ZGlmZiAtLWdpdCBhLy5hcHB2ZXlvci55bWwgYi8uYXBwdmV5b3IueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTZjYjYKLS0tIC9kZXYvbnVsbAorKysgYi8uYXBwdmV5b3IueW1sCkBAIC0wLDAgKzEsNjUgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKwordmVyc2lvbjogMC4xLntidWlsZH0KK2ltYWdlOiBWaXN1YWwgU3R1ZGlvIDIwMTUKK2NvbmZpZ3VyYXRpb246CistIFJlbGVhc2UKK3BsYXRmb3JtOgorLSB4NjQKKy0geDg2CistIGFybQorY2xvbmVfZGVwdGg6IDEwCitpbnN0YWxsOgorICAgIC0gY21kOiBCY2RlZGl0LmV4ZSAtc2V0IFRFU1RTSUdOSU5HIE9OCisgICAgIyBDb25maWd1cmUgbG9nZ2luZworICAgIC0gY21kOiByZWcgaW1wb3J0IHRvb2xzXHdpbmRvd3NcVGhyZWFkRXR3LnJlZworICAgIC0gcHM6IFJlc3RhcnQtQ29tcHV0ZXIgLUZvcmNlCisgICAgLSBwczogU3RhcnQtU2xlZXAgLXMgMTAKK2JlZm9yZV9idWlsZDoKKyAgICAtIGNtZDogcmVuICJDOlxQcm9ncmFtIEZpbGVzICh4ODYpXFdpbmRvd3MgS2l0c1wxMFxpbmNsdWRlXDAwd2RmIiAid2RmIgorYnVpbGQ6CisgIHByb2plY3Q6IGV0Yy92aXN1YWwtc3R1ZGlvL29wZW50aHJlYWQuc2xuCisgIHZlcmJvc2l0eTogbWluaW1hbAorYWZ0ZXJfYnVpbGQ6CisgICAgLSBwczogJGVudjpQbGF0Zm9ybTIgPSAkZW52OlBsYXRmb3JtCisgICAgLSBwczogSWYgKCRlbnY6UGxhdGZvcm0yIC1lcSAieDg2IikgeyAkZW52OlBsYXRmb3JtMiA9ICJXaW4zMiIgfQorICAgICMgU2V0IHVwIHRoZSByZWxlYXNlIGRpcmVjdG9yaWVzCisgICAgLSBjbWQ6IC5hcHB2ZXlvclxtYWtlX3JlbGVhc2UuY21kCisgICAgIyBJbnN0YWxsIGRyaXZlciAob25seSBydW5zIG9uIHg2NCkKKyAgICAtIGNtZDogLmFwcHZleW9yXGluc3RhbGxfZHJpdmVyLmNtZAordGVzdF9zY3JpcHQ6CisgICAgIyBSdW4gdGhlIHVuaXQgdGVzdHMKKyAgICAtIGNtZDogLmFwcHZleW9yXHJ1bl91bml0X3Rlc3RzLmNtZAorICAgICMgUnVuIHRoZSB0ZXN0cyBmb3IgdGhlIGRyaXZlciAob25seSBydW5zIG9uIHg2NCkKKyAgICAjLSBjbWQ6IC5hcHB2ZXlvclx0ZXN0X2RyaXZlci5jbWQKK2FydGlmYWN0czoKKy0gcGF0aDogcmVsZWFzZQorICBuYW1lOiByZWxlYXNlCistIHBhdGg6IGJ1aWxkXGJpblxBcHBQYWNrYWdlcworICBuYW1lOiBhcHAKZGlmZiAtLWdpdCBhLy5hcHB2ZXlvci9pbnN0YWxsX2RyaXZlci5jbWQgYi8uYXBwdmV5b3IvaW5zdGFsbF9kcml2ZXIuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTA3NDIKLS0tIC9kZXYvbnVsbAorKysgYi8uYXBwdmV5b3IvaW5zdGFsbF9kcml2ZXIuY21kCkBAIC0wLDAgKzEsNDMgQEAKK1JFTQorUkVNICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCitSRU0gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSRU0KK1JFTSAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CitSRU0gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorUkVNICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorUkVNICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSRU0gIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CitSRU0gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK1JFTSAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1JFTSAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCitSRU0gICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCitSRU0gICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorUkVNCitSRU0gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorUkVNICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitSRU0gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitSRU0gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKK1JFTSAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorUkVNICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorUkVNICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK1JFTSAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK1JFTSAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK1JFTSAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1JFTSAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitSRU0KKworSUYgTk9UICIlUGxhdGZvcm0lIj09Ing2NCIgR09UTyA6RU9GCisKK3B1c2hkICVBUFBWRVlPUl9CVUlMRF9GT0xERVIlXGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcc3lzCisKK1JFTSBJbnN0YWxsIHRoZSBjZXJ0aWZpY2F0aW9ucyB0byB0aGUgY2VydCBzdG9yZXMKK2NlcnR1dGlsIC1hZGRzdG9yZSByb290IG90THdmLmNlcgorY2VydHV0aWwgLWFkZHN0b3JlIFRydXN0ZWRQdWJsaXNoZXIgb3RMd2YuY2VyCisKK2NkIG90THdmCisKK1JFTSBJbnN0YWxsIHRoZSBORElTIExXRiBkcml2ZXIsIG90THdmLnN5cworCituZXRjZmcuZXhlIC12IC1sIG90bHdmLmluZiAtYyBzIC1pIG90THdmCisKK3BvcGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uYXBwdmV5b3IvbWFrZV9yZWxlYXNlLmNtZCBiLy5hcHB2ZXlvci9tYWtlX3JlbGVhc2UuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjlmMmMKLS0tIC9kZXYvbnVsbAorKysgYi8uYXBwdmV5b3IvbWFrZV9yZWxlYXNlLmNtZApAQCAtMCwwICsxLDg3IEBACitSRU0KK1JFTSAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorUkVNICBBbGwgcmlnaHRzIHJlc2VydmVkLgorUkVNCitSRU0gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorUkVNICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKK1JFTSAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK1JFTSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUkVNICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorUkVNICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitSRU0gICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitSRU0gIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorUkVNICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworUkVNICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1JFTQorUkVNICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK1JFTSAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorUkVNICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorUkVNICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCitSRU0gIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK1JFTSAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1JFTSAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitSRU0gIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitSRU0gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitSRU0gIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitSRU0gIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorUkVNCisKK3B1c2hkICVBUFBWRVlPUl9CVUlMRF9GT0xERVIlCisKK1JFTSBNYWtlIHRoZSByZWxlYXNlIGRpcmVjdG9yaWVzCitta2RpciByZWxlYXNlCitta2RpciByZWxlYXNlXGluY2x1ZGUKK21rZGlyIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkXAorbWtkaXIgcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWRcbWlzc2luZworbWtkaXIgcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWRccGxhdGZvcm0KK21rZGlyIHJlbGVhc2VcbGlicworbWtkaXIgcmVsZWFzZVxzeW1ib2xzCitta2RpciByZWxlYXNlXHN5bWJvbHNcVHJhY2VGb3JtYXQKKworUkVNIENvcHkgdGhlIHJlbGF2YW50IGluY2x1ZGUgaGVhZGVycworCitjb3B5IGluY2x1ZGVcb3BlbnRocmVhZFxjb21taXNzaW9uZXIuaCByZWxlYXNlXGluY2x1ZGVcb3BlbnRocmVhZAorY29weSBpbmNsdWRlXG9wZW50aHJlYWRcZGF0YXNldC5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkCitjb3B5IGluY2x1ZGVcb3BlbnRocmVhZFxpbnN0YW5jZS5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkCitjb3B5IGluY2x1ZGVcb3BlbnRocmVhZFxpcDYuaCByZWxlYXNlXGluY2x1ZGVcb3BlbnRocmVhZAorY29weSBpbmNsdWRlXG9wZW50aHJlYWRcam9pbmVyLmggcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWQKK2NvcHkgaW5jbHVkZVxvcGVudGhyZWFkXGxpbmsuaCByZWxlYXNlXGluY2x1ZGVcb3BlbnRocmVhZAorY29weSBpbmNsdWRlXG9wZW50aHJlYWRcbWVzc2FnZS5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkCitjb3B5IGluY2x1ZGVcb3BlbnRocmVhZFxuZXRkYXRhLmggcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWQKK2NvcHkgaW5jbHVkZVxvcGVudGhyZWFkXG9wZW50aHJlYWQuaCByZWxlYXNlXGluY2x1ZGVcb3BlbnRocmVhZAorY29weSBpbmNsdWRlXG9wZW50aHJlYWRcdGhyZWFkLmggcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWQKK2NvcHkgaW5jbHVkZVxvcGVudGhyZWFkXHR5cGVzLmggcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWQKK2NvcHkgaW5jbHVkZVxvcGVudGhyZWFkXHBsYXRmb3JtXHRvb2xjaGFpbi5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkXHBsYXRmb3JtCitjb3B5IHNyY1xtaXNzaW5nXHN0ZGJvb2xcc3RkYm9vbC5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkXG1pc3NpbmcKK2NvcHkgc3JjXG1pc3Npbmdcc3RkaW50XHN0ZGludC5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkXG1pc3NpbmcKKworUkVNIENvcHkgdGhlIHJlbGF2YW50IGJpbmFyaWVzCisKK2NvcHkgYnVpbGRcYmluXCVQbGF0Zm9ybTIlXCVDb25maWd1cmF0aW9uJVxzeXNcb3Rsd2ZcKiByZWxlYXNlCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcc3lzXG90bHdmLmNlciByZWxlYXNlCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcc3lzXG90bHdmLnBkYiByZWxlYXNlXHN5bWJvbHMKK2NvcHkgYnVpbGRcYmluXCVQbGF0Zm9ybTIlXCVDb25maWd1cmF0aW9uJVxzeXNcb3R0bXBcKiByZWxlYXNlCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcc3lzXG90dG1wLmNlciByZWxlYXNlCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcc3lzXG90dG1wLnBkYiByZWxlYXNlXHN5bWJvbHMKK2NvcHkgYnVpbGRcYmluXCVQbGF0Zm9ybTIlXCVDb25maWd1cmF0aW9uJVxkbGxcb3RBcGkuZGxsIHJlbGVhc2UKK2NvcHkgYnVpbGRcYmluXCVQbGF0Zm9ybTIlXCVDb25maWd1cmF0aW9uJVxkbGxcb3RBcGkubGliIHJlbGVhc2VcbGlicworY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGRsbFxvdEFwaS5wZGIgcmVsZWFzZVxzeW1ib2xzCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcZGxsXG90Tm9kZUFwaS5kbGwgcmVsZWFzZQorY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGRsbFxvdE5vZGVBcGkubGliIHJlbGVhc2VcbGlicworY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGRsbFxvdE5vZGVBcGkucGRiIHJlbGVhc2Vcc3ltYm9scworY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGV4ZVxvdENsaS5leGUgcmVsZWFzZQorY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGV4ZVxvdENsaS5wZGIgcmVsZWFzZVxzeW1ib2xzCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcZXhlXG90VGVzdFJ1bm5lci5leGUgcmVsZWFzZQorY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGV4ZVxvdFRlc3RSdW5uZXIucGRiIHJlbGVhc2Vcc3ltYm9scworCitSRU0gQ29weSB0aGUgdG9vbHMKKworY29weSB0b29sc1x3aW5kb3dzXCogcmVsZWFzZQorY29weSB0b29sc1x3aW5kb3dzXCVQbGF0Zm9ybSVcb3RJbnN0YWxsLmV4ZSByZWxlYXNlCitjb3B5ICJDOlxQcm9ncmFtIEZpbGVzICh4ODYpXFdpbmRvd3MgS2l0c1wxMFxUb29sc1wlUGxhdGZvcm0lXGRldmNvbi5leGUiIHJlbGVhc2UKKworUkVNIEdlbmVyYXRlIHRoZSB0cmFjZSBmb3JtYXQgZmlsZXMgdG8gZGVjb2RlIHRoZSBXUFAgbG9ncworCisiQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNaWNyb3NvZnQgU0RLc1xXaW5kb3dzXHY3LjFBXEJpblx4NjRcVHJhY2VQZGIuZXhlIiAtZiByZWxlYXNlXHN5bWJvbHNcKi5wZGIgLXAgcmVsZWFzZVxzeW1ib2xzXFRyYWNlRm9ybWF0CisKK3BvcGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uYXBwdmV5b3IvcnVuX3VuaXRfdGVzdHMuY21kIGIvLmFwcHZleW9yL3J1bl91bml0X3Rlc3RzLmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGY0OTZjCi0tLSAvZGV2L251bGwKKysrIGIvLmFwcHZleW9yL3J1bl91bml0X3Rlc3RzLmNtZApAQCAtMCwwICsxLDMxIEBACitSRU0KK1JFTSAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorUkVNICBBbGwgcmlnaHRzIHJlc2VydmVkLgorUkVNCitSRU0gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorUkVNICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKK1JFTSAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK1JFTSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUkVNICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorUkVNICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitSRU0gICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitSRU0gIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorUkVNICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworUkVNICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1JFTQorUkVNICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK1JFTSAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorUkVNICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorUkVNICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCitSRU0gIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK1JFTSAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1JFTSAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitSRU0gIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitSRU0gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitSRU0gIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitSRU0gIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorUkVNCisKK0lGICIlUGxhdGZvcm0lIj09ImFybSIgR09UTyA6RU9GCisKK3ZzdGVzdC5jb25zb2xlIC9sb2dnZXI6QXBwdmV5b3IgL2luSXNvbGF0aW9uIC9wbGF0Zm9ybTolUGxhdGZvcm0lIGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcZGxsXFVuaXRUZXN0cy5kbGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uYXBwdmV5b3IvdGVzdF9kcml2ZXIuY21kIGIvLmFwcHZleW9yL3Rlc3RfZHJpdmVyLmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDI1NDE5Ci0tLSAvZGV2L251bGwKKysrIGIvLmFwcHZleW9yL3Rlc3RfZHJpdmVyLmNtZApAQCAtMCwwICsxLDQ3IEBACitSRU0KK1JFTSAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorUkVNICBBbGwgcmlnaHRzIHJlc2VydmVkLgorUkVNCitSRU0gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorUkVNICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKK1JFTSAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK1JFTSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUkVNICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorUkVNICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitSRU0gICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitSRU0gIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorUkVNICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworUkVNICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1JFTQorUkVNICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK1JFTSAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorUkVNICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorUkVNICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCitSRU0gIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK1JFTSAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1JFTSAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitSRU0gIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitSRU0gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitSRU0gIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitSRU0gIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorUkVNCisKK0lGIE5PVCAiJVBsYXRmb3JtJSI9PSJ4NjQiIEdPVE8gOkVPRgorCitwdXNoZCAlQVBQVkVZT1JfQlVJTERfRk9MREVSJVxyZWxlYXNlCisKK1JFTSBRdWVyeSB0aGUgZHJpdmVyIHN0YXRlCisKK3NjIHF1ZXJ5IG90bHdmCisKK1JFTSBSdW4gdGhlIGJhc2ljIGRyaXZlciB0ZXN0CisKK290VGVzdFJ1bm5lci5leGUgLi5cdGVzdHNcc2NyaXB0c1x0aHJlYWQtY2VydCBUZXN0X290THdmKiBhcHB2ZXlvcgorCitSRU0gR3JhYiB0aGUgbG9ncworCitta2RpciBsb2dzCitsb2dtYW4gc3RvcCBUaHJlYWQgLWV0cworY29weSAlU3lzdGVtUm9vdCVcU3lzdGVtMzJcTG9nRmlsZXNcV01JXFRocmVhZC4qIGxvZ3MKKworcG9wZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLy5hc3R5bGUvYXN0eWxlLW9wdHMgYi8uYXN0eWxlL2FzdHlsZS1vcHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZWJlY2QKLS0tIC9kZXYvbnVsbAorKysgYi8uYXN0eWxlL2FzdHlsZS1vcHRzCkBAIC0wLDAgKzEsMTYgQEAKKy0tc3R5bGU9YWxsbWFuCistLW1heC1jb2RlLWxlbmd0aD0xMjAKKy0tbWF4LWluc3RhdGVtZW50LWluZGVudD0xMDAKKy0tYXR0YWNoLW5hbWVzcGFjZXMgLS1hdHRhY2gtaW5saW5lcworLS1hdHRhY2gtZXh0ZXJuLWMKKy0tbWluLWNvbmRpdGlvbmFsLWluZGVudD0wCistLWJyZWFrLWJsb2NrcworLS1wYWQtb3BlcgorLS1wYWQtaGVhZGVyCistLXVucGFkLXBhcmVuCistLWFsaWduLXBvaW50ZXI9bmFtZQorLS1hZGQtYnJhY2tldHMKKy0ta2VlcC1vbmUtbGluZS1ibG9ja3MKKy0tY29udmVydC10YWJzCistLWJyZWFrLWFmdGVyLWxvZ2ljYWwKKy0tZm9ybWF0dGVkCmRpZmYgLS1naXQgYS8uYXN0eWxlL2FzdHlsZS13cmFwLnNoIGIvLmFzdHlsZS9hc3R5bGUtd3JhcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNTMwNDUwCi0tLSAvZGV2L251bGwKKysrIGIvLmFzdHlsZS9hc3R5bGUtd3JhcC5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworIworIyBhc3R5ZSBkb2VzIG5vdCByZXR1cm4gYSBub24temVybyBleGl0IGNvZGUuICBUaGlzIHdyYXBwZXIgZXhpc3RzIHdpdGggYQorIyBub24temVybyBleGl0IGNvZGUgaWYgdGhlcmUgaXMgYW55IG91dHB1dCBmcm9tIGFzdHlsZS4KKyMKKworZGllKCkgeworCWVjaG8gIiAqKiogRVJST1I6ICIgJCoKKwlleGl0IDEKK30KKworc2V0IC14CisKK1sgLXogImAkQGAiIF0gfHwgeworICAgIFsgIiQzIiAhPSAiLS1kcnktcnVuIiBdIHx8IGRpZQorfQpkaWZmIC0tZ2l0IGEvLmNvZGVjb3YueW1sIGIvLmNvZGVjb3YueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMjFhN2YKLS0tIC9kZXYvbnVsbAorKysgYi8uY29kZWNvdi55bWwKQEAgLTAsMCArMSw4IEBACitjb3ZlcmFnZToKKyAgaWdub3JlOgorICAgIC0gInRlc3RzLyoiCisgICAgLSAidGhpcmRfcGFydHkvKiIKKworICBzdGF0dXM6CisgICAgcHJvamVjdDogZmFsc2UKKyAgICBwYXRjaDogZmFsc2UKZGlmZiAtLWdpdCBhLy5kZWZhdWx0LXZlcnNpb24gYi8uZGVmYXVsdC12ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjY1ODUKLS0tIC9kZXYvbnVsbAorKysgYi8uZGVmYXVsdC12ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzAuMDEuMDAKZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhZDY4YwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEsNDUgQEAKKyMgQXV0byBub3JtYWxpemUgYWxsIGZpbGVzIHdoaWNoIGFwcGVhciB0byBiZSB0ZXh0IGZpbGVzLgorKiAgICAgICAgdGV4dD1hdXRvCisKKyMgQXV0byBub3JtYWxpemUgZmlsZXMgd2hpY2ggYXJlIGV4cGxpY2l0bHkgdGV4dAorKi5bY2hdICAgdGV4dAorKi5bY2hdcHAgdGV4dAorKi50eHQgICAgdGV4dAorKi5tZCAgICAgdGV4dAorKi55bWwgICAgdGV4dAorKi5odG1sICAgdGV4dAorKi5weSAgICAgdGV4dAorCisjIEZpbGVzIHdoaWNoIGFyZSBleHBsaWNpdGx5IGJpbmFyeQorKi5neiAgICAgYmluYXJ5ICFlb2wKKyoueHogICAgIGJpbmFyeSAhZW9sCisqLmJ6MiAgICBiaW5hcnkgIWVvbAorKi50YXIgICAgYmluYXJ5ICFlb2wKKyoucG5nICAgIGJpbmFyeSAhZW9sCisqLmpwZyAgICBiaW5hcnkgIWVvbAorKi5naWYgICAgYmluYXJ5ICFlb2wKKworIyBGaWxlcyBub3JtYWxpemVkIHRvIGFsd2F5cyBrZWVwIFVuaXggbGluZSBlbmRpbmdzCisuZGVmYXVsdC12ZXJzaW9uICBlb2w9bGYKK2Jvb3RzdHJhcCogICAgICAgIGVvbD1sZgorY29uZmlnLmd1ZXNzICAgICAgZW9sPWxmCitjb25maWcuc3RhdHVzICAgICBlb2w9bGYKK2NvbmZpZ3VyZSAgICAgICAgIGVvbD1sZgorbGlidG9vbCAgICAgICAgICAgZW9sPWxmCitsaWJ0b29saXplICAgICAgICBlb2w9bGYKK2F1dG9yZWNvbmYgICAgICAgIGVvbD1sZgorbWt2ZXJzaW9uICAgICAgICAgZW9sPWxmCisqLnNoICAgICAgICAgICAgICBlb2w9bGYKKyotc2ggICAgICAgICAgICAgIGVvbD1sZgorKi5tNCAgICAgICAgICAgICAgZW9sPWxmCitjb25maWd1cmUuYWMgICAgICBlb2w9bGYKK01ha2VmaWxlLmFtICAgICAgIGVvbD1sZgorTWFrZWZpbGUuaW4gICAgICAgZW9sPWxmCitNYWtlZmlsZSAgICAgICAgICBlb2w9bGYKKworIyBGaWxlcyBub3JtYWxpemVkIHRvIGFsd2F5cyBrZWVwIFdpbmRvd3MgbGluZSBlbmRpbmdzCisqLnZjeHByb2ogICAgICAgICBlb2w9Y3JsZgorKi52Y3hwcm9qLmZpbHRlcnMgZW9sPWNybGYKKyouc2xuICAgICAgICAgICAgIGVvbD1jcmxmCisqLnJjICAgICB0ZXh0ICAgICBlb2w9Y3JsZgorKi5pbmYgICAgdGV4dCAgICAgZW9sPWNybGYKZGlmZiAtLWdpdCBhLy5naXRodWIvSVNTVUVfVEVNUExBVEUubWQgYi8uZ2l0aHViL0lTU1VFX1RFTVBMQVRFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYzBlNjQKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aHViL0lTU1VFX1RFTVBMQVRFLm1kCkBAIC0wLDAgKzEsNyBAQAorR2l0SHViIElzc3VlcyBhcmUgZm9yIGJ1Z3MgYW5kIGZlYXR1cmUgcmVxdWVzdHMuICBUbyBtYWtlIGJ1Z3MgYW5kIGZlYXR1cmUgcmVxdWVzdHMgbW9yZSBlYXN5IHRvIGZpbmQgYW5kIG9yZ2FuaXplLCB3ZSBjbG9zZSBpc3N1ZXMgdGhhdCBhcmUgZGVlbWVkIG91dCBvZiBzY29wZSBmb3IgR2l0SHViIElzc3Vlcy4KKworVXNhZ2UgcXVlc3Rpb25zPyBQb3N0IHF1ZXN0aW9ucyB0byBbU3RhY2sgT3ZlcmZsb3ddKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS8pIHVzaW5nIHRoZSBbW29wZW50aHJlYWRdIHRhZ10oaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy90YWdnZWQvb3BlbnRocmVhZCkuIFdlIGFsc28gdXNlIEdvb2dsZSBHcm91cHMgZm9yIGRpc2N1c3Npb24gYW5kIGFubm91bmNlbWVudHM6CisKKyogW29wZW50aHJlYWQtYW5ub3VuY2VdKGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyFmb3J1bS9vcGVudGhyZWFkLWFubm91bmNlKSAtIHN1YnNjcmliZSBmb3IgcmVsZWFzZSBub3RlcyBhbmQgbmV3IHVwZGF0ZXMgb24gT3BlblRocmVhZAorKiBbb3BlbnRocmVhZC11c2Vyc10oaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9mb3J1bS8jIWZvcnVtL29wZW50aHJlYWQtdXNlcnMpIC0gdGhlIGJlc3QgcGxhY2UgZm9yIHVzZXJzIHRvIGRpc2N1c3MgT3BlblRocmVhZCBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgT3BlblRocmVhZCB0ZWFtCisqIFtvcGVudGhyZWFkLWRldmVsXShodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhZm9ydW0vb3BlbnRocmVhZC1kZXZlbCkgLSB0ZWFtIG1lbWJlcnMgZGlzY3VzcyB0aGUgb24tZ29pbmcgZGV2ZWxvcG1lbnQgb2YgT3BlblRocmVhZApkaWZmIC0tZ2l0IGEvLnRyYXZpcy55bWwgYi8udHJhdmlzLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjNlZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvLnRyYXZpcy55bWwKQEAgLTAsMCArMSw5NiBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitsYW5ndWFnZTogZ2VuZXJpYworCitzdWRvOiByZXF1aXJlZAorZGlzdDogdHJ1c3R5CisKK2JlZm9yZV9pbnN0YWxsOgorICAtIC50cmF2aXMvYmVmb3JlX2luc3RhbGwuc2gKKworc2NyaXB0OgorICAtIC50cmF2aXMvc2NyaXB0LnNoCisKK2FmdGVyX3N1Y2Nlc3M6CisgIC0gYmFzaCA8KGN1cmwgLXMgaHR0cHM6Ly9jb2RlY292LmlvL2Jhc2gpCisKK21hdHJpeDoKKyAgaW5jbHVkZToKKyAgICAtIGVudjogQlVJTERfVEFSR0VUPSJwcmV0dHktY2hlY2siCisgICAgICBvczogbGludXgKKyAgICAtIGVudjogQlVJTERfVEFSR0VUPSJzY2FuLWJ1aWxkIiBDQz0iY2xhbmciIENYWD0iY2xhbmcrKyIKKyAgICAgIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6IGNsYW5nCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0iYXJtLWdjYzQ5IgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0iYXJtLWdjYzU0IgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0iYXJtLWdjYzYzIgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0icG9zaXgiIENDPSJjbGFuZyIgQ1hYPSJjbGFuZysrIgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogY2xhbmcKKyAgICAtIGVudjogQlVJTERfVEFSR0VUPSJwb3NpeCIgQ0M9ImdjYyIgQ1hYPSJnKysiCisgICAgICBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOiBnY2MKKyAgICAtIGVudjogQlVJTERfVEFSR0VUPSJwb3NpeCIgQ0M9ImdjYy01IiBDWFg9ImcrKy01IgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgICBhZGRvbnM6CisgICAgICAgIGFwdDoKKyAgICAgICAgICBzb3VyY2VzOgorICAgICAgICAgICAgLSB1YnVudHUtdG9vbGNoYWluLXItdGVzdAorICAgICAgICAgIHBhY2thZ2VzOgorICAgICAgICAgICAgLSBnY2MtNQorICAgICAgICAgICAgLSBnKystNQorICAgIC0gZW52OiBCVUlMRF9UQVJHRVQ9InBvc2l4IiBDQz0iZ2NjLTYiIENYWD0iZysrLTYiCisgICAgICBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOiBnY2MKKyAgICAgIGFkZG9uczoKKyAgICAgICAgYXB0OgorICAgICAgICAgIHNvdXJjZXM6CisgICAgICAgICAgICAtIHVidW50dS10b29sY2hhaW4tci10ZXN0CisgICAgICAgICAgcGFja2FnZXM6CisgICAgICAgICAgICAtIGdjYy02CisgICAgICAgICAgICAtIGcrKy02CisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0icG9zaXgtZGlzdGNoZWNrIiBWRVJCT1NFPTEKKyAgICAgIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6IGNsYW5nCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0icG9zaXgtMzItYml0IiBWRVJCT1NFPTEKKyAgICAgIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6IGdjYworICAgIC0gZW52OiBCVUlMRF9UQVJHRVQ9InBvc2l4LW5jcC1zcGkiIFZFUkJPU0U9MQorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0icG9zaXgtbmNwIiBWRVJCT1NFPTEKKyAgICAgIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6IGdjYwpkaWZmIC0tZ2l0IGEvLnRyYXZpcy9iZWZvcmVfaW5zdGFsbC5zaCBiLy50cmF2aXMvYmVmb3JlX2luc3RhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDg3ZTUwOAotLS0gL2Rldi9udWxsCisrKyBiLy50cmF2aXMvYmVmb3JlX2luc3RhbGwuc2gKQEAgLTAsMCArMSwxMTEgQEAKKyMhL2Jpbi9zaAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitkaWUoKSB7CisJZWNobyAiICoqKiBFUlJPUjogIiAkKgorCWV4aXQgMQorfQorCitzZXQgLXgKKworY2QgL3RtcCB8fCBkaWUKKworWyAkVFJBVklTX09TX05BTUUgIT0gbGludXggXSB8fCB7CisgICAgc3VkbyBhcHQtZ2V0IHVwZGF0ZSB8fCBkaWUKKworICAgIFsgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC1kaXN0Y2hlY2sgLWEgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC0zMi1iaXQgLWEgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC1uY3AgXSB8fCB7CisgICAgICAgIHBpcCBpbnN0YWxsIC0tdXBncmFkZSBwaXAgfHwgZGllCisgICAgICAgIHBpcCBpbnN0YWxsIC0tdXNlciAtciAkVFJBVklTX0JVSUxEX0RJUi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3JlcXVpcmVtZW50cy50eHQgfHwgZGllCisgICAgICAgIFsgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC1uY3AgXSB8fCB7CisgICAgICAgICAgICAjIFBhY2thZ2VzIHVzZWQgYnkgbmNwIHRvb2xzLgorICAgICAgICAgICAgcGlwIGluc3RhbGwgLS11c2VyIGdpdCtodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9weXNwaW5lbCB8fCBkaWUKKyAgICAgICAgfQorICAgIH0KKworICAgIFsgJEJVSUxEX1RBUkdFVCAhPSBwcmV0dHktY2hlY2sgXSB8fCB7CisgICAgICAgIHdnZXQgaHR0cDovL2phaXN0LmRsLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L2FzdHlsZS9hc3R5bGUvYXN0eWxlJTIwMi4wNS4xL2FzdHlsZV8yLjA1LjFfbGludXgudGFyLmd6IHx8IGRpZQorICAgICAgICB0YXIgeHp2ZiBhc3R5bGVfMi4wNS4xX2xpbnV4LnRhci5neiB8fCBkaWUKKyAgICAgICAgY2QgYXN0eWxlL2J1aWxkL2djYyB8fCBkaWUKKyAgICAgICAgTERGTEFHUz0iICIgbWFrZSB8fCBkaWUKKyAgICAgICAgY2QgLi4vLi4vLi4KKyAgICAgICAgZXhwb3J0IFBBVEg9L3RtcC9hc3R5bGUvYnVpbGQvZ2NjL2JpbjokUEFUSCB8fCBkaWUKKyAgICAgICAgYXN0eWxlIC0tdmVyc2lvbiB8fCBkaWUKKyAgICB9CisKKyAgICBbICRCVUlMRF9UQVJHRVQgIT0gc2Nhbi1idWlsZCBdIHx8IHsKKyAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgY2xhbmcgfHwgZGllCisgICAgfQorCisgICAgWyAkQlVJTERfVEFSR0VUICE9IGFybS1nY2M0OSBdIHx8IHsKKyAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgbGliMzJ6MSB8fCBkaWUKKyAgICAgICAgd2dldCBodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZC80LjkvNC45LTIwMTUtcTMtdXBkYXRlLytkb3dubG9hZC9nY2MtYXJtLW5vbmUtZWFiaS00XzktMjAxNXEzLTIwMTUwOTIxLWxpbnV4LnRhci5iejIgfHwgZGllCisgICAgICAgIHRhciB4amYgZ2NjLWFybS1ub25lLWVhYmktNF85LTIwMTVxMy0yMDE1MDkyMS1saW51eC50YXIuYnoyIHx8IGRpZQorICAgICAgICBleHBvcnQgUEFUSD0vdG1wL2djYy1hcm0tbm9uZS1lYWJpLTRfOS0yMDE1cTMvYmluOiRQQVRIIHx8IGRpZQorICAgICAgICBhcm0tbm9uZS1lYWJpLWdjYyAtLXZlcnNpb24gfHwgZGllCisgICAgfQorCisgICAgWyAkQlVJTERfVEFSR0VUICE9IGFybS1nY2M1NCBdIHx8IHsKKyAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgbGliMzJ6MSB8fCBkaWUKKyAgICAgICAgd2dldCBodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZC81LjAvNS0yMDE2LXEzLXVwZGF0ZS8rZG93bmxvYWQvZ2NjLWFybS1ub25lLWVhYmktNV80LTIwMTZxMy0yMDE2MDkyNi1saW51eC50YXIuYnoyIHx8IGRpZQorICAgICAgICB0YXIgeGpmIGdjYy1hcm0tbm9uZS1lYWJpLTVfNC0yMDE2cTMtMjAxNjA5MjYtbGludXgudGFyLmJ6MiB8fCBkaWUKKyAgICAgICAgZXhwb3J0IFBBVEg9L3RtcC9nY2MtYXJtLW5vbmUtZWFiaS01XzQtMjAxNnEzL2JpbjokUEFUSCB8fCBkaWUKKyAgICAgICAgYXJtLW5vbmUtZWFiaS1nY2MgLS12ZXJzaW9uIHx8IGRpZQorICAgIH0KKworICAgIFsgJEJVSUxEX1RBUkdFVCAhPSBhcm0tZ2NjNjMgXSB8fCB7CisgICAgICAgIHdnZXQgaHR0cHM6Ly9naXRodWIuY29tL2Zvc3MtZm9yLXN5bm9wc3lzLWR3Yy1hcmMtcHJvY2Vzc29ycy90b29sY2hhaW4vcmVsZWFzZXMvZG93bmxvYWQvYXJjLTIwMTcuMDMtcmMyL2FyY19nbnVfMjAxNy4wMy1yYzJfcHJlYnVpbHRfZWxmMzJfbGVfbGludXhfaW5zdGFsbC50YXIuZ3ogfHwgZGllCisgICAgICAgIHRhciB4emYgYXJjX2dudV8yMDE3LjAzLXJjMl9wcmVidWlsdF9lbGYzMl9sZV9saW51eF9pbnN0YWxsLnRhci5negorICAgICAgICBleHBvcnQgUEFUSD0vdG1wL2FyY19nbnVfMjAxNy4wMy1yYzJfcHJlYnVpbHRfZWxmMzJfbGVfbGludXhfaW5zdGFsbC9iaW46JFBBVEggfHwgZGllCisgICAgICAgIGFyYy1lbGYzMi1nY2MgLS12ZXJzaW9uIHx8IGRpZQorICAgIH0KKworICAgIFsgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC0zMi1iaXQgXSB8fCB7CisgICAgICAgIHN1ZG8gYXB0LWdldCBpbnN0YWxsIGcrKy1tdWx0aWxpYiB8fCBkaWUKKyAgICB9CisKKyAgICBbICRCVUlMRF9UQVJHRVQgIT0gcG9zaXgtZGlzdGNoZWNrIF0gfHwgeworICAgICAgICBzdWRvIGFwdC1nZXQgaW5zdGFsbCBjbGFuZyB8fCBkaWUKKyAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgbGx2bS0zLjQtcnVudGltZSB8fCBkaWUKKyAgICB9CisKKyAgICBbICRCVUlMRF9UQVJHRVQgIT0gcG9zaXggLW8gJENDICE9IGNsYW5nIF0gfHwgeworICAgICAgICBzdWRvIGFwdC1nZXQgaW5zdGFsbCBjbGFuZyB8fCBkaWUKKyAgICB9Cit9CisKK1sgJFRSQVZJU19PU19OQU1FICE9IG9zeCBdIHx8IHsKKyAgICBzdWRvIGVhc3lfaW5zdGFsbCBwZXhwZWN0IHx8IGRpZQorCisgICAgWyAkQlVJTERfVEFSR0VUICE9IGNjMjUzOCBdIHx8IHsKKyAgICAgICAgd2dldCBodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZC80LjkvNC45LTIwMTUtcTMtdXBkYXRlLytkb3dubG9hZC9nY2MtYXJtLW5vbmUtZWFiaS00XzktMjAxNXEzLTIwMTUwOTIxLW1hYy50YXIuYnoyIHx8IGRpZQorICAgICAgICB0YXIgeGpmIGdjYy1hcm0tbm9uZS1lYWJpLTRfOS0yMDE1cTMtMjAxNTA5MjEtbWFjLnRhci5iejIgfHwgZGllCisgICAgICAgIGV4cG9ydCBQQVRIPS90bXAvZ2NjLWFybS1ub25lLWVhYmktNF85LTIwMTVxMy9iaW46JFBBVEggfHwgZGllCisgICAgICAgIGFybS1ub25lLWVhYmktZ2NjIC0tdmVyc2lvbiB8fCBkaWUKKyAgICB9Cit9CmRpZmYgLS1naXQgYS8udHJhdmlzL3NjcmlwdC5zaCBiLy50cmF2aXMvc2NyaXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwY2QzOTMKLS0tIC9kZXYvbnVsbAorKysgYi8udHJhdmlzL3NjcmlwdC5zaApAQCAtMCwwICsxLDIwNCBAQAorIyEvYmluL3NoCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2RpZSgpIHsKKwllY2hvICIgKioqIEVSUk9SOiAiICQqCisJZXhpdCAxCit9CisKK3NldCAteAorCitbICRCVUlMRF9UQVJHRVQgIT0gcHJldHR5LWNoZWNrIF0gfHwgeworICAgIGV4cG9ydCBQQVRIPS90bXAvYXN0eWxlL2J1aWxkL2djYy9iaW46JFBBVEggfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgLi9jb25maWd1cmUgfHwgZGllCisgICAgbWFrZSBwcmV0dHktY2hlY2sgfHwgZGllCit9CisKK1sgJEJVSUxEX1RBUkdFVCAhPSBzY2FuLWJ1aWxkIF0gfHwgeworICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIHNjYW4tYnVpbGQgLi9jb25maWd1cmUgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1jbGktYXBwPWFsbCAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1uY3AtYXBwPWFsbCAgICAgICAgICAgICAgXAorICAgICAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1kaWFnICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1kZWZhdWx0LWxvZ2dpbmcgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1yYXctbGluay1hcGk9eWVzICAgICAgICAgXAorICAgICAgICAtLXdpdGgtZXhhbXBsZXM9cG9zaXggICAgICAgICAgICAgXAorICAgICAgICAtLXdpdGgtcGxhdGZvcm0taW5mbz1QT1NJWCAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1hcHBsaWNhdGlvbi1jb2FwICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1ib3JkZXItYWdlbnQtcHJveHkgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1jZXJ0LWxvZyAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1jb21taXNzaW9uZXIgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1kaGNwNi1jbGllbnQgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1kaGNwNi1zZXJ2ZXIgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1kbnMtY2xpZW50ICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1qYW0tZGV0ZWN0aW9uICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1qb2luZXIgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1sZWdhY3kgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1tYWMtd2hpdGVsaXN0ICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1tdGQtbmV0d29yay1kaWFnbm9zdGljIHx8IGRpZQorICAgIHNjYW4tYnVpbGQgLS1zdGF0dXMtYnVncyAtYW5hbHl6ZS1oZWFkZXJzIC12IG1ha2UgfHwgZGllCit9CisKK1sgJEJVSUxEX1RBUkdFVCAhPSBhcm0tZ2NjNDkgXSB8fCB7CisgICAgZXhwb3J0IFBBVEg9L3RtcC9nY2MtYXJtLW5vbmUtZWFiaS00XzktMjAxNXEzL2JpbjokUEFUSCB8fCBkaWUKKworICAgIGdpdCBjaGVja291dCAtLSAuIHx8IGRpZQorICAgIGdpdCBjbGVhbiAteGZkIHx8IGRpZQorICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIENPTU1JU1NJT05FUj0xIEpPSU5FUj0xIERIQ1A2X0NMSUVOVD0xIERIQ1A2X1NFUlZFUj0xIEROU19DTElFTlQ9MSBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWNjMjUzOCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9jYzI1MzgvYmluL290LWNsaS1mdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvY2MyNTM4L2Jpbi9vdC1jbGktbXRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2NjMjUzOC9iaW4vb3QtbmNwLWZ0ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9jYzI1MzgvYmluL290LW5jcC1tdGQgfHwgZGllCisKKyAgICBnaXQgY2hlY2tvdXQgLS0gLiB8fCBkaWUKKyAgICBnaXQgY2xlYW4gLXhmZCB8fCBkaWUKKyAgICAuL2Jvb3RzdHJhcCB8fCBkaWUKKyAgICBDT01NSVNTSU9ORVI9MSBKT0lORVI9MSBESENQNl9DTElFTlQ9MSBESENQNl9TRVJWRVI9MSBETlNfQ0xJRU5UPTEgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1kYTE1MDAwIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2RhMTUwMDAvYmluL290LWNsaS1mdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvZGExNTAwMC9iaW4vb3QtY2xpLW10ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9kYTE1MDAwL2Jpbi9vdC1uY3AtZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2RhMTUwMDAvYmluL290LW5jcC1tdGQgfHwgZGllCisKKyAgICBnaXQgY2hlY2tvdXQgLS0gLiB8fCBkaWUKKyAgICBnaXQgY2xlYW4gLXhmZCB8fCBkaWUKKyAgICAuL2Jvb3RzdHJhcCB8fCBkaWUKKyAgICBDT01NSVNTSU9ORVI9MSBKT0lORVI9MSBESENQNl9DTElFTlQ9MSBESENQNl9TRVJWRVI9MSBETlNfQ0xJRU5UPTEgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1rdzQxeiB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9rdzQxei9iaW4vb3QtY2xpLWZ0ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9rdzQxei9iaW4vb3QtY2xpLW10ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9rdzQxei9iaW4vb3QtbmNwLWZ0ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9rdzQxei9iaW4vb3QtbmNwLW10ZCB8fCBkaWUKKworICAgIGdpdCBjaGVja291dCAtLSAuIHx8IGRpZQorICAgIGdpdCBjbGVhbiAteGZkIHx8IGRpZQorICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIENPTU1JU1NJT05FUj0xIEpPSU5FUj0xIERIQ1A2X0NMSUVOVD0xIERIQ1A2X1NFUlZFUj0xIEROU19DTElFTlQ9MSBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLW5yZjUyODQwIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L25yZjUyODQwL2Jpbi9vdC1jbGktZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L25yZjUyODQwL2Jpbi9vdC1jbGktbXRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L25yZjUyODQwL2Jpbi9vdC1uY3AtZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L25yZjUyODQwL2Jpbi9vdC1uY3AtbXRkIHx8IGRpZQorCisgICAgZ2l0IGNoZWNrb3V0IC0tIC4gfHwgZGllCisgICAgZ2l0IGNsZWFuIC14ZmQgfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1jYzI2NTAgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvY2MyNjUwL2Jpbi9vdC1jbGktbXRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2NjMjY1MC9iaW4vb3QtbmNwLW10ZCB8fCBkaWUKK30KKworWyAkQlVJTERfVEFSR0VUICE9IGFybS1nY2M1NCBdIHx8IHsKKyAgICBleHBvcnQgUEFUSD0vdG1wL2djYy1hcm0tbm9uZS1lYWJpLTVfNC0yMDE2cTMvYmluOiRQQVRIIHx8IGRpZQorCisgICAgZ2l0IGNoZWNrb3V0IC0tIC4gfHwgZGllCisgICAgZ2l0IGNsZWFuIC14ZmQgfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgQ09NTUlTU0lPTkVSPTEgSk9JTkVSPTEgREhDUDZfQ0xJRU5UPTEgREhDUDZfU0VSVkVSPTEgRE5TX0NMSUVOVD0xIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtY2MyNTM4IHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2NjMjUzOC9iaW4vb3QtY2xpLWZ0ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9jYzI1MzgvYmluL290LWNsaS1tdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvY2MyNTM4L2Jpbi9vdC1uY3AtZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2NjMjUzOC9iaW4vb3QtbmNwLW10ZCB8fCBkaWUKKworICAgIGdpdCBjaGVja291dCAtLSAuIHx8IGRpZQorICAgIGdpdCBjbGVhbiAteGZkIHx8IGRpZQorICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIENPTU1JU1NJT05FUj0xIEpPSU5FUj0xIERIQ1A2X0NMSUVOVD0xIERIQ1A2X1NFUlZFUj0xIEROU19DTElFTlQ9MSBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWRhMTUwMDAgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvZGExNTAwMC9iaW4vb3QtY2xpLWZ0ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9kYTE1MDAwL2Jpbi9vdC1jbGktbXRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2RhMTUwMDAvYmluL290LW5jcC1mdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvZGExNTAwMC9iaW4vb3QtbmNwLW10ZCB8fCBkaWUKKworICAgIGdpdCBjaGVja291dCAtLSAuIHx8IGRpZQorICAgIGdpdCBjbGVhbiAteGZkIHx8IGRpZQorICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIENPTU1JU1NJT05FUj0xIEpPSU5FUj0xIERIQ1A2X0NMSUVOVD0xIERIQ1A2X1NFUlZFUj0xIEROU19DTElFTlQ9MSBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWt3NDF6IHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2t3NDF6L2Jpbi9vdC1jbGktZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2t3NDF6L2Jpbi9vdC1jbGktbXRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2t3NDF6L2Jpbi9vdC1uY3AtZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2t3NDF6L2Jpbi9vdC1uY3AtbXRkIHx8IGRpZQorCisgICAgZ2l0IGNoZWNrb3V0IC0tIC4gfHwgZGllCisgICAgZ2l0IGNsZWFuIC14ZmQgfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgQ09NTUlTU0lPTkVSPTEgSk9JTkVSPTEgREhDUDZfQ0xJRU5UPTEgREhDUDZfU0VSVkVSPTEgRE5TX0NMSUVOVD0xIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtbnJmNTI4NDAgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvbnJmNTI4NDAvYmluL290LWNsaS1mdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvbnJmNTI4NDAvYmluL290LWNsaS1tdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvbnJmNTI4NDAvYmluL290LW5jcC1mdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvbnJmNTI4NDAvYmluL290LW5jcC1tdGQgfHwgZGllCisKKyAgICBnaXQgY2hlY2tvdXQgLS0gLiB8fCBkaWUKKyAgICBnaXQgY2xlYW4gLXhmZCB8fCBkaWUKKyAgICAuL2Jvb3RzdHJhcCB8fCBkaWUKKyAgICBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWNjMjY1MCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9jYzI2NTAvYmluL290LWNsaS1tdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvY2MyNjUwL2Jpbi9vdC1uY3AtbXRkIHx8IGRpZQorfQorCitbICRCVUlMRF9UQVJHRVQgIT0gYXJtLWdjYzYzIF0gfHwgeworICAgIGV4cG9ydCBQQVRIPS90bXAvYXJjX2dudV8yMDE3LjAzLXJjMl9wcmVidWlsdF9lbGYzMl9sZV9saW51eF9pbnN0YWxsL2JpbjokUEFUSCB8fCBkaWUKKworICAgIGdpdCBjaGVja291dCAtLSAuIHx8IGRpZQorICAgIGdpdCBjbGVhbiAteGZkIHx8IGRpZQorICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIENPTU1JU1NJT05FUj0xIEpPSU5FUj0xIERIQ1A2X0NMSUVOVD0xIERIQ1A2X1NFUlZFUj0xIEROU19DTElFTlQ9MSBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWVtc2sgfHwgZGllCisgICAgYXJjLWVsZjMyLXNpemUgIG91dHB1dC9lbXNrL2Jpbi9vdC1jbGktZnRkIHx8IGRpZQorICAgIGFyYy1lbGYzMi1zaXplICBvdXRwdXQvZW1zay9iaW4vb3QtY2xpLW10ZCB8fCBkaWUKKyAgICBhcmMtZWxmMzItc2l6ZSAgb3V0cHV0L2Vtc2svYmluL290LW5jcC1mdGQgfHwgZGllCisgICAgYXJjLWVsZjMyLXNpemUgIG91dHB1dC9lbXNrL2Jpbi9vdC1uY3AtbXRkIHx8IGRpZQorfQorCitbICRCVUlMRF9UQVJHRVQgIT0gcG9zaXggXSB8fCB7CisgICAgc2ggLWMgJyRDQyAtLXZlcnNpb24nIHx8IGRpZQorICAgIHNoIC1jICckQ1hYIC0tdmVyc2lvbicgfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1wb3NpeCB8fCBkaWUKK30KKworWyAkQlVJTERfVEFSR0VUICE9IHBvc2l4LWRpc3RjaGVjayBdIHx8IHsKKyAgICBleHBvcnQgQVNBTl9TWU1CT0xJWkVSX1BBVEg9YHdoaWNoIGxsdm0tc3ltYm9saXplci0zLjRgIHx8IGRpZQorICAgIGV4cG9ydCBBU0FOX09QVElPTlM9c3ltYm9saXplPTEgfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1wb3NpeCBkaXN0Y2hlY2sgfHwgZGllCit9CisKK1sgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC0zMi1iaXQgXSB8fCB7CisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgQ09WRVJBR0U9MSBDRkxBR1M9LW0zMiBDWFhGTEFHUz0tbTMyIExERkxBR1M9LW0zMiBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLXBvc2l4IGNoZWNrIHx8IGRpZQorfQorCitbICRCVUlMRF9UQVJHRVQgIT0gcG9zaXgtbmNwLXNwaSBdIHx8IHsKKyAgICAuL2Jvb3RzdHJhcCB8fCBkaWUKKyAgICBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLXBvc2l4IGNoZWNrIGNvbmZpZ3VyZV9PUFRJT05TPSItLWVuYWJsZS1uY3AtYXBwPWZ0ZCAtLXdpdGgtbmNwLWJ1cz1zcGkgLS13aXRoLWV4YW1wbGVzPXBvc2l4IC0td2l0aC1wbGF0Zm9ybS1pbmZvPVBPU0lYIiB8fCBkaWUKK30KKworWyAkQlVJTERfVEFSR0VUICE9IHBvc2l4LW5jcCBdIHx8IHsKKyAgICAuL2Jvb3RzdHJhcCB8fCBkaWUKKyAgICBDT1ZFUkFHRT0xIE5PREVfVFlQRT1uY3Atc2ltIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtcG9zaXggY2hlY2sgfHwgZGllCit9CmRpZmYgLS1naXQgYS9BVVRIT1JTIGIvQVVUSE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGFiNGJjCi0tLSAvZGV2L251bGwKKysrIGIvQVVUSE9SUwpAQCAtMCwwICsxLDE2IEBACisjIFRoaXMgaXMgdGhlIG9mZmljaWFsIGxpc3Qgb2YgT3BlblRocmVhZCBhdXRob3JzIGZvciBjb3B5cmlnaHQgcHVycG9zZXMuCisjCisjIFRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbGlzdCBldmVyeW9uZSB3aG8gaGFzIGNvbnRyaWJ1dGVkIGNvZGUsIHNpbmNlIGluCisjIHNvbWUgY2FzZXMsIHRoZWlyIGVtcGxveWVyIG1heSBiZSB0aGUgY29weXJpZ2h0IGhvbGRlci4gVG8gc2VlIHRoZSBmdWxsIGxpc3QKKyMgb2YgY29udHJpYnV0b3JzLCBzZWUgdGhlIHJldmlzaW9uIGhpc3RvcnkgaW4gc291cmNlIGNvbnRyb2wgb3IKKyMgaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9ncmFwaHMvY29udHJpYnV0b3JzCisjCisjIEF1dGhvcnMgd2hvIHdpc2ggdG8gYmUgcmVjb2duaXplZCBpbiB0aGlzIGZpbGUgc2hvdWxkIGFkZCB0aGVtc2VsdmVzIChvcgorIyB0aGVpciBlbXBsb3llciwgYXMgYXBwcm9wcmlhdGUpLgorCitOZXN0IExhYnMsIEluYy4KK01pY3Jvc29mdCBDb3Jwb3JhdGlvbgorTm9yZGljIFNlbWljb25kdWN0b3IKK1RleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorTlhQIFNlbWljb25kdWN0b3JzCitTeW5vcHN5cywgSW5jLgpkaWZmIC0tZ2l0IGEvQ09ERV9PRl9DT05EVUNULm1kIGIvQ09ERV9PRl9DT05EVUNULm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MjE3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9DT0RFX09GX0NPTkRVQ1QubWQKQEAgLTAsMCArMSw3NCBAQAorIyBPcGVuVGhyZWFkIENvZGUgb2YgQ29uZHVjdAorCisjIyBPdXIgUGxlZGdlCisKK0luIHRoZSBpbnRlcmVzdCBvZiBmb3N0ZXJpbmcgYW4gb3BlbiBhbmQgd2VsY29taW5nIGVudmlyb25tZW50LCB3ZSBhcworY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyIHByb2plY3QgYW5kCitvdXIgY29tbXVuaXR5IGEgaGFyYXNzbWVudC1mcmVlIGV4cGVyaWVuY2UgZm9yIGV2ZXJ5b25lLCByZWdhcmRsZXNzIG9mIGFnZSwgYm9keQorc2l6ZSwgZGlzYWJpbGl0eSwgZXRobmljaXR5LCBnZW5kZXIgaWRlbnRpdHkgYW5kIGV4cHJlc3Npb24sIGxldmVsIG9mIGV4cGVyaWVuY2UsCituYXRpb25hbGl0eSwgcGVyc29uYWwgYXBwZWFyYW5jZSwgcmFjZSwgcmVsaWdpb24sIG9yIHNleHVhbCBpZGVudGl0eSBhbmQKK29yaWVudGF0aW9uLgorCisjIyBPdXIgU3RhbmRhcmRzCisKK0V4YW1wbGVzIG9mIGJlaGF2aW9yIHRoYXQgY29udHJpYnV0ZXMgdG8gY3JlYXRpbmcgYSBwb3NpdGl2ZSBlbnZpcm9ubWVudAoraW5jbHVkZToKKworKiBVc2luZyB3ZWxjb21pbmcgYW5kIGluY2x1c2l2ZSBsYW5ndWFnZQorKiBCZWluZyByZXNwZWN0ZnVsIG9mIGRpZmZlcmluZyB2aWV3cG9pbnRzIGFuZCBleHBlcmllbmNlcworKiBHcmFjZWZ1bGx5IGFjY2VwdGluZyBjb25zdHJ1Y3RpdmUgY3JpdGljaXNtCisqIEZvY3VzaW5nIG9uIHdoYXQgaXMgYmVzdCBmb3IgdGhlIGNvbW11bml0eQorKiBTaG93aW5nIGVtcGF0aHkgdG93YXJkcyBvdGhlciBjb21tdW5pdHkgbWVtYmVycworCitFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CisKKyogVGhlIHVzZSBvZiBzZXh1YWxpemVkIGxhbmd1YWdlIG9yIGltYWdlcnkgYW5kIHVud2VsY29tZSBzZXh1YWwgYXR0ZW50aW9uIG9yCithZHZhbmNlcworKiBUcm9sbGluZywgaW5zdWx0aW5nL2Rlcm9nYXRvcnkgY29tbWVudHMsIGFuZCBwZXJzb25hbCBvciBwb2xpdGljYWwgYXR0YWNrcworKiBQdWJsaWMgb3IgcHJpdmF0ZSBoYXJhc3NtZW50CisqIFB1Ymxpc2hpbmcgb3RoZXJzJyBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IgZWxlY3Ryb25pYworICBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KKyogT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCisgIHByb2Zlc3Npb25hbCBzZXR0aW5nCisKKyMjIE91ciBSZXNwb25zaWJpbGl0aWVzCisKK1Byb2plY3QgbWFpbnRhaW5lcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjbGFyaWZ5aW5nIHRoZSBzdGFuZGFyZHMgb2YgYWNjZXB0YWJsZQorYmVoYXZpb3IgYW5kIGFyZSBleHBlY3RlZCB0byB0YWtlIGFwcHJvcHJpYXRlIGFuZCBmYWlyIGNvcnJlY3RpdmUgYWN0aW9uIGluCityZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KKworUHJvamVjdCBtYWludGFpbmVycyBoYXZlIHRoZSByaWdodCBhbmQgcmVzcG9uc2liaWxpdHkgdG8gcmVtb3ZlLCBlZGl0LCBvcgorcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlciBjb250cmlidXRpb25zCit0aGF0IGFyZSBub3QgYWxpZ25lZCB0byB0aGlzIENvZGUgb2YgQ29uZHVjdCwgb3IgdG8gYmFuIHRlbXBvcmFyaWx5IG9yCitwZXJtYW5lbnRseSBhbnkgY29udHJpYnV0b3IgZm9yIG90aGVyIGJlaGF2aW9ycyB0aGF0IHRoZXkgZGVlbSBpbmFwcHJvcHJpYXRlLAordGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KKworIyMgU2NvcGUKKworVGhpcyBDb2RlIG9mIENvbmR1Y3QgYXBwbGllcyBib3RoIHdpdGhpbiBwcm9qZWN0IHNwYWNlcyBhbmQgaW4gcHVibGljIHNwYWNlcword2hlbiBhbiBpbmRpdmlkdWFsIGlzIHJlcHJlc2VudGluZyB0aGUgcHJvamVjdCBvciBpdHMgY29tbXVuaXR5LiBFeGFtcGxlcyBvZgorcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbiBvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbAorYWRkcmVzcywgcG9zdGluZyB2aWEgYW4gb2ZmaWNpYWwgc29jaWFsIG1lZGlhIGFjY291bnQsIG9yIGFjdGluZyBhcyBhbiBhcHBvaW50ZWQKK3JlcHJlc2VudGF0aXZlIGF0IGFuIG9ubGluZSBvciBvZmZsaW5lIGV2ZW50LiBSZXByZXNlbnRhdGlvbiBvZiBhIHByb2plY3QgbWF5IGJlCitmdXJ0aGVyIGRlZmluZWQgYW5kIGNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgorCisjIyBFbmZvcmNlbWVudAorCitJbnN0YW5jZXMgb2YgYWJ1c2l2ZSwgaGFyYXNzaW5nLCBvciBvdGhlcndpc2UgdW5hY2NlcHRhYmxlIGJlaGF2aW9yIG1heSBiZQorcmVwb3J0ZWQgYnkgY29udGFjdGluZyB0aGUgcHJvamVjdCB0ZWFtIGF0IG9wZW50aHJlYWQtY29uZHVjdEBnb29nbGUuY29tLiBBbGwKK2NvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhIHJlc3BvbnNlIHRoYXQKK2lzIGRlZW1lZCBuZWNlc3NhcnkgYW5kIGFwcHJvcHJpYXRlIHRvIHRoZSBjaXJjdW1zdGFuY2VzLiBUaGUgcHJvamVjdCB0ZWFtIGlzCitvYmxpZ2F0ZWQgdG8gbWFpbnRhaW4gY29uZmlkZW50aWFsaXR5IHdpdGggcmVnYXJkIHRvIHRoZSByZXBvcnRlciBvZiBhbiBpbmNpZGVudC4KK0Z1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudCBwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCisKK1Byb2plY3QgbWFpbnRhaW5lcnMgd2hvIGRvIG5vdCBmb2xsb3cgb3IgZW5mb3JjZSB0aGUgQ29kZSBvZiBDb25kdWN0IGluIGdvb2QKK2ZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkIGJ5IG90aGVyCittZW1iZXJzIG9mIHRoZSBwcm9qZWN0J3MgbGVhZGVyc2hpcC4KKworIyMgQXR0cmlidXRpb24KKworVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBbQ29udHJpYnV0b3IgQ292ZW5hbnRdW2hvbWVwYWdlXSwgdmVyc2lvbiAxLjQsCithdmFpbGFibGUgYXQgW2h0dHA6Ly9jb250cmlidXRvci1jb3ZlbmFudC5vcmcvdmVyc2lvbi8xLzRdW3ZlcnNpb25dCisKK1tob21lcGFnZV06IGh0dHA6Ly9jb250cmlidXRvci1jb3ZlbmFudC5vcmcKK1t2ZXJzaW9uXTogaHR0cDovL2NvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZy92ZXJzaW9uLzEvNC8KZGlmZiAtLWdpdCBhL0NPTlRSSUJVVElORy5tZCBiL0NPTlRSSUJVVElORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTYyNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvQ09OVFJJQlVUSU5HLm1kCkBAIC0wLDAgKzEsMTQyIEBACisjIENvbnRyaWJ1dGluZyB0byBPcGVuVGhyZWFkCisKK1dlIHdvdWxkIGxvdmUgZm9yIHlvdSB0byBjb250cmlidXRlIHRvIE9wZW5UaHJlYWQgYW5kIGhlbHAgbWFrZSBpdCBldmVuIGJldHRlciB0aGFuIGl0IGlzIHRvZGF5ISBBcyBhIGNvbnRyaWJ1dG9yLCBoZXJlIGFyZSB0aGUgZ3VpZGVsaW5lcyB3ZSB3b3VsZCBsaWtlIHlvdSB0byBmb2xsb3cuCisKKyogWzEgQ29kZSBvZiBDb25kdWN0XSgjY29kZS1vZi1jb25kdWN0KQorKiBbMiBCdWdzXSgjYnVncykKKyogWzMgTmV3IEZlYXR1cmVzXSgjbmV3LWZlYXR1cmVzKQorKiBbNCBDb250cmlidXRpbmcgQ29kZV0oI2NvbnRyaWJ1dGluZy1jb2RlKQorICAqIFs0LjEgSW5pdGlhbCBTZXR1cF0oI2luaXRpYWwtc2V0dXApCisgICogWzQuMiBDb250cmlidXRvciBMaWNlbnNlIEFncmVlbWVudCAoQ0xBKV0oI2NvbnRyaWJ1dG9yLWxpY2Vuc2UtYWdyZWVtZW50LS1jbGEtKQorICAqIFs0LjMgU3VibWl0dGluZyBhIFB1bGwgUmVxdWVzdF0oI3N1Ym1pdHRpbmctYS1wdWxsLXJlcXVlc3QpCisKKyMjIENvZGUgb2YgQ29uZHVjdAorCitIZWxwIHVzIGtlZXAgT3BlblRocmVhZCBvcGVuIGFuZCBpbmNsdXNpdmUuICBQbGVhc2UgcmVhZCBhbmQgZm9sbG93IG91ciBbQ29kZSBvZiBDb25kdWN0XShDT0RFX09GX0NPTkRVQ1QubWQpLgorCisjIyBCdWdzCisKK0lmIHlvdSBmaW5kIGEgYnVnIGluIHRoZSBzb3VyY2UgY29kZSwgeW91IGNhbiBoZWxwIHVzIGJ5IFtzdWJtaXR0aW5nIGEgR2l0SHViIElzc3VlXShodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkL2lzc3Vlcy9uZXcpLiAgVGhlIGJlc3QgYnVnIHJlcG9ydHMgcHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBpc3N1ZSBhbmQgc3RlcC1ieS1zdGVwIGluc3RydWN0aW9ucyBmb3IgcHJlZGljdGFibHkgcmVwcm9kdWNpbmcgdGhlIGlzc3VlLiAgRXZlbiBiZXR0ZXIsIHlvdSBjYW4gW3N1Ym1pdCBhIFB1bGwgUmVxdWVzdF0oI3N1Ym1pdHRpbmctYS1wdWxsLXJlcXVlc3QpIHdpdGggYSBmaXguCisKKyMjIE5ldyBGZWF0dXJlcworCitZb3UgY2FuIHJlcXVlc3QgYSBuZXcgZmVhdHVyZSBieSBbc3VibWl0dGluZyBhIEdpdEh1YiBJc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9pc3N1ZXMvbmV3KS4KKworSWYgeW91IHdvdWxkIGxpa2UgdG8gaW1wbGVtZW50IGEgbmV3IGZlYXR1cmUsIHBsZWFzZSBjb25zaWRlciB0aGUgc2NvcGUgb2YgdGhlIG5ldyBmZWF0dXJlOgorCisqICpMYXJnZSBmZWF0dXJlKjogZmlyc3QgW3N1Ym1pdCBhIEdpdEh1YiBJc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9pc3N1ZXMvbmV3KSBhbmQgY29tbXVuaWNhdGUgeW91ciBwcm9wb3NhbCBzbyB0aGF0IHRoZSBjb21tdW5pdHkgY2FuIHJldmlldyBhbmQgcHJvdmlkZSBmZWVkYmFjay4gIEdldHRpbmcgZWFybHkgZmVlZGJhY2sgd2lsbCBoZWxwIGVuc3VyZSB5b3VyIGltcGxlbWVudGF0aW9uIHdvcmsgaXMgYWNjZXB0ZWQgYnkgdGhlIGNvbW11bml0eS4gIFRoaXMgd2lsbCBhbHNvIGFsbG93IHVzIHRvIGJldHRlciBjb29yZGluYXRlIG91ciBlZmZvcnRzIGFuZCBtaW5pbWl6ZSBkdXBsaWNhdGVkIGVmZm9ydC4KKworKiAqU21hbGwgZmVhdHVyZSo6IGNhbiBiZSBpbXBsZW1lbnRlZCBhbmQgZGlyZWN0bHkgW3N1Ym1pdHRlZCBhcyBhIFB1bGwgUmVxdWVzdF0oI3N1Ym1pdHRpbmctYS1wdWxsLXJlcXVlc3QpLgorCisjIyBDb250cmlidXRpbmcgQ29kZQorCitUaGUgT3BlblRocmVhZCBQcm9qZWN0IGZvbGxvd3MgdGhlICJGb3JrLWFuZC1QdWxsIiBtb2RlbCBmb3IgYWNjZXB0aW5nIGNvbnRyaWJ1dGlvbnMuCisKKyMjIyBJbml0aWFsIFNldHVwCisKK1NldHVwIHlvdXIgR2l0SHViIGZvcmsgYW5kIGNvbnRpbnVvdXMtaW50ZWdyYXRpb24gc2VydmljZXM6CisKKzEuIEZvcmsgdGhlIFtPcGVuVGhyZWFkIHJlcG9zaXRvcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQpIGJ5IGNsaWNraW5nICJGb3JrIiBvbiB0aGUgd2ViIFVJLgorMi4gRW5hYmxlIFtUcmF2aXMgQ0ldKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy8pIGFuZCBbQXBwVmV5b3JdKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tLykgYnkgbG9nZ2luZyBpbiB0aGUgcmVzcGVjdGl2ZSBzZXJ2aWNlcyB3aXRoIHlvdXIgR2l0SHViIGFjY291bnQgYW5kIGVuYWJsaW5nIHlvdXIgbmV3bHkgY3JlYXRlZCBmb3JrLiAgV2UgdXNlIFRyYXZpcyBDSSBmb3IgTGludXgtYmFzZWQgY29udGludW91cyBpbnRlZ3JhdGlvbiBjaGVja3MgYW5kIEFwcFZleW9yIGZvciBXaW5kb3dzLWJhc2VkIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gY2hlY2tzLiAgQWxsIGNvbnRyaWJ1dGlvbnMgbXVzdCBwYXNzIHRoZXNlIGNoZWNrcyB0byBiZSBhY2NlcHRlZC4KKworU2V0dXAgeW91ciBsb2NhbCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudDoKKworYGBgYmFzaAorIyBDbG9uZSB5b3VyIGZvcmsKK2dpdCBjbG9uZSBnaXRAZ2l0aHViLmNvbTo8dXNlcm5hbWU+L29wZW50aHJlYWQuZ2l0CisKKyMgQ29uZmlndXJlIHVwc3RyZWFtIGFsaWFzCitnaXQgcmVtb3RlIGFkZCB1cHN0cmVhbSBnaXRAZ2l0aHViLmNvbTpvcGVudGhyZWFkL29wZW50aHJlYWQuZ2l0CitgYGAKKworIyMjIENvbnRyaWJ1dG9yIExpY2Vuc2UgQWdyZWVtZW50IChDTEEpCisKK1RoZSBPcGVuVGhyZWFkIFByb2plY3QgcmVxdWlyZXMgYWxsIGNvbnRyaWJ1dG9ycyB0byBzaWduIGEgQ29udHJpYnV0b3IgTGljZW5zZSBBZ3JlZW1lbnQgKFtpbmRpdmlkdWFsXShodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9vcGVuLXNvdXJjZS9jbGEvaW5kaXZpZHVhbCkgb3IgW2NvcnBvcmF0ZV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vb3Blbi1zb3VyY2UvY2xhL2NvcnBvcmF0ZSkpIGluIG9yZGVyIHRvIHByb3RlY3QgY29udHJpYnV0b3JzLCB1c2VycywgYW5kIEdvb2dsZSBpbiBpc3N1ZXMgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5LgorCitXaXRoIGVhY2ggUHVsbCBSZXF1ZXN0LCBhbiBhdXRvbWF0ZWQgY2hlY2sgb2NjdXJzIHRvIHZlcmlmeSB0aGF0IHlvdSBoYXZlIHNpZ25lZCB0aGUgQ0xBLiAgTWFrZSBzdXJlIHRoYXQgeW91IHNpZ24gdGhlIENMQSB3aXRoIHRoZSBzYW1lIGVtYWlsIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHlvdXIgY29tbWl0cyAoaS5lLiB2aWEgdGhlIGB1c2VyLmVtYWlsYCBHaXQgY29uZmlnIGFzIGRlc2NyaWJlZCBvbiBHaXRIdWIncyBbU2V0IHVwIEdpdF0oaHR0cHM6Ly9oZWxwLmdpdGh1Yi5jb20vYXJ0aWNsZXMvc2V0LXVwLWdpdC8pIHBhZ2UuCisKK05PVEU6IE9ubHkgb3JpZ2luYWwgc291cmNlIGNvZGUgZnJvbSB5b3UgYW5kIG90aGVyIHBlb3BsZSB0aGF0IGhhdmUgc2lnbmVkIHRoZSBDTEEgY2FuIGJlIGFjY2VwdGVkIGludG8gdGhlIHJlcG9zaXRvcnkuIFRoaXMgcG9saWN5IGRvZXMgbm90IGFwcGx5IHRvIFt0aGlyZF9wYXJ0eV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC90cmVlL21hc3Rlci90aGlyZF9wYXJ0eSkuCisKKworIyMjIFN1Ym1pdHRpbmcgYSBQdWxsIFJlcXVlc3QKKworIyMjIyBCcmFuY2gKKworRm9yIGVhY2ggbmV3IGZlYXR1cmUsIGNyZWF0ZSBhIHdvcmtpbmcgYnJhbmNoOgorCitgYGBiYXNoCisjIENyZWF0ZSBhIHdvcmtpbmcgYnJhbmNoIGZvciB5b3VyIG5ldyBmZWF0dXJlCitnaXQgYnJhbmNoIC0tdHJhY2sgPGJyYW5jaC1uYW1lPiBvcmlnaW4vbWFzdGVyCisKKyMgQ2hlY2tvdXQgdGhlIGJyYW5jaAorZ2l0IGNoZWNrb3V0IDxicmFuY2gtbmFtZT4KK2BgYAorCisjIyMjIENyZWF0ZSBDb21taXRzCisKK2BgYGJhc2gKKyMgQWRkIGVhY2ggbW9kaWZpZWQgZmlsZSB5b3UnZCBsaWtlIHRvIGluY2x1ZGUgaW4gdGhlIGNvbW1pdAorZ2l0IGFkZCA8ZmlsZTE+IDxmaWxlMj4KKworIyBDcmVhdGUgYSBjb21taXQKK2dpdCBjb21taXQKK2BgYAorCitUaGlzIHdpbGwgb3BlbiB1cCBhIHRleHQgZWRpdG9yIHdoZXJlIHlvdSBjYW4gY3JhZnQgeW91ciBjb21taXQgbWVzc2FnZS4KKworIyMjIyBVcHN0cmVhbSBTeW5jIGFuZCBDbGVhbiBVcAorCitQcmlvciB0byBzdWJtaXR0aW5nIHlvdXIgcHVsbCByZXF1ZXN0LCB5b3UgbWlnaHQgd2FudCB0byBkbyBhIGZldyB0aGluZ3MgdG8gY2xlYW4gdXAgeW91ciBicmFuY2ggYW5kIG1ha2UgaXQgYXMgc2ltcGxlIGFzIHBvc3NpYmxlIGZvciB0aGUgb3JpZ2luYWwgcmVwbydzIG1haW50YWluZXIgdG8gdGVzdCwgYWNjZXB0LCBhbmQgbWVyZ2UgeW91ciB3b3JrLgorCitJZiBhbnkgY29tbWl0cyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgdXBzdHJlYW0gbWFzdGVyIGJyYW5jaCwgeW91IHNob3VsZCByZWJhc2UgeW91ciBkZXZlbG9wbWVudCBicmFuY2ggc28gdGhhdCBtZXJnaW5nIGl0IHdpbGwgYmUgYSBzaW1wbGUgZmFzdC1mb3J3YXJkIHRoYXQgd29uJ3QgcmVxdWlyZSBhbnkgY29uZmxpY3QgcmVzb2x1dGlvbiB3b3JrLgorCitgYGBiYXNoCisjIEZldGNoIHVwc3RyZWFtIG1hc3RlciBhbmQgbWVyZ2Ugd2l0aCB5b3VyIHJlcG8ncyBtYXN0ZXIgYnJhbmNoCitnaXQgY2hlY2tvdXQgbWFzdGVyCitnaXQgcHVsbCB1cHN0cmVhbSBtYXN0ZXIKKworIyBJZiB0aGVyZSB3ZXJlIGFueSBuZXcgY29tbWl0cywgcmViYXNlIHlvdXIgZGV2ZWxvcG1lbnQgYnJhbmNoCitnaXQgY2hlY2tvdXQgPGJyYW5jaC1uYW1lPgorZ2l0IHJlYmFzZSBtYXN0ZXIKK2BgYAorCitOb3csIGl0IG1heSBiZSBkZXNpcmFibGUgdG8gc3F1YXNoIHNvbWUgb2YgeW91ciBzbWFsbGVyIGNvbW1pdHMgZG93biBpbnRvIGEgc21hbGwgbnVtYmVyIG9mIGxhcmdlciBtb3JlIGNvaGVzaXZlIGNvbW1pdHMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIGFuIGludGVyYWN0aXZlIHJlYmFzZToKKworYGBgYmFzaAorIyBSZWJhc2UgYWxsIGNvbW1pdHMgb24geW91ciBkZXZlbG9wbWVudCBicmFuY2gKK2dpdCBjaGVja291dCAKK2dpdCByZWJhc2UgLWkgbWFzdGVyCitgYGAKKworVGhpcyB3aWxsIG9wZW4gdXAgYSB0ZXh0IGVkaXRvciB3aGVyZSB5b3UgY2FuIHNwZWNpZnkgd2hpY2ggY29tbWl0cyB0byBzcXVhc2guCisKKyMjIyMgQ29kaW5nIENvbnZlbnRpb25zIGFuZCBTdHlsZQorCitPcGVuVGhyZWFkIHVzZXMgYW5kIGVuZm9yY2VzIHRoZSBbT3BlblRocmVhZCBDb2RpbmcgQ29udmVudGlvbnMgYW5kIFN0eWxlXShTVFlMRV9HVUlERS5tZCkgb24gYWxsIGNvZGUsIGV4Y2VwdCBmb3IgY29kZSBsb2NhdGVkIGluIFt0aGlyZF9wYXJ0eV0odGhpcmRfcGFydHkpLgorCitBcyBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2Nlc3MsIHlvdSBzaG91bGQgYWxzbyBydW4gYG1ha2UgcHJldHR5LWNoZWNrYCB0byBlbnN1cmUgdGhhdCB5b3VyIGNvZGUgcGFzc2VzIHRoZSBiYXNlbGluZSBjb2RlIHN0eWxlIGNoZWNrcy4KKworYGBgYmFzaAorLi9ib290c3RyYXAKKy4vY29uZmlndXJlIC0tZW5hYmxlLWZ0ZCAtLWVuYWJsZS1jbGkgLS1lbmFibGUtZGlhZyAtLWVuYWJsZS1kaGNwNi1jbGllbnQgLS1lbmFibGUtZGhjcDYtc2VydmVyIC0tZW5hYmxlLWNvbW1pc3Npb25lciAtLWVuYWJsZS1qb2luZXIgLS13aXRoLWV4YW1wbGVzPXBvc2l4CittYWtlIHByZXR0eS1jaGVjaworCitgYGAKKworTWFrZSBzdXJlIHRvIGluY2x1ZGUgYW55IGNvZGUgZm9ybWF0IGNoYW5nZXMgaW4geW91ciBjb21taXRzLgorCisjIyMjIFB1c2ggYW5kIFRlc3QKKworYGBgYmFzaAorIyBDaGVja291dCB5b3VyIGJyYW5jaAorZ2l0IGNoZWNrb3V0IDxicmFuY2gtbmFtZT4KKworIyBQdXNoIHRvIHlvdXIgR2l0SHViIGZvcms6CitnaXQgcHVzaCBvcmlnaW4gPGJyYW5jaC1uYW1lPgorYGBgCisKK1RoaXMgd2lsbCB0cmlnZ2VyIHRoZSBUcmF2aXMgQ0kgYW5kIEFwcFZleW9yIGNvbnRpbnVvdXMtaW50ZWdyYXRpb24gY2hlY2tzLiAgWW91IGNhbiB2aWV3IHRoZSByZXN1bHRzIGluIHRoZSByZXNwZWN0aXZlIHNlcnZpY2VzLiAgTm90ZSB0aGF0IHRoZSBpbnRlZ3JhdGlvbiBjaGVja3Mgd2lsbCByZXBvcnQgZmFpbHVyZXMgb24gb2NjYXNpb24uICBJZiBhIGZhaWx1cmUgb2NjdXJzLCB5b3UgbWF5IHRyeSByZXJ1bm5pbmcgdGhlIHRlc3QgdmlhIHRoZSBUcmF2aXMgYW5kL29yIEFwcFZleW9yIHdlYiBVSS4KKworIyMjIyBTdWJtaXQgUHVsbCBSZXF1ZXN0CisKK09uY2UgeW91J3ZlIHZhbGlkYXRlZCB0aGUgVHJhdmlzIENJIGFuZCBBcHBWZXlvciByZXN1bHRzLCBnbyB0byB0aGUgcGFnZSBmb3IgeW91ciBmb3JrIG9uIEdpdEh1Yiwgc2VsZWN0IHlvdXIgZGV2ZWxvcG1lbnQgYnJhbmNoLCBhbmQgY2xpY2sgdGhlIHB1bGwgcmVxdWVzdCBidXR0b24uIElmIHlvdSBuZWVkIHRvIG1ha2UgYW55IGFkanVzdG1lbnRzIHRvIHlvdXIgcHVsbCByZXF1ZXN0LCBqdXN0IHB1c2ggdGhlIHVwZGF0ZXMgdG8gR2l0SHViLiBZb3VyIHB1bGwgcmVxdWVzdCB3aWxsIGF1dG9tYXRpY2FsbHkgdHJhY2sgdGhlIGNoYW5nZXMgb24geW91ciBkZXZlbG9wbWVudCBicmFuY2ggYW5kIHVwZGF0ZS4KZGlmZiAtLWdpdCBhL0xJQ0VOU0UgYi9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MTcwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTlNFCkBAIC0wLDAgKzEsMjUgQEAKK0NvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxODYxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDIwNCBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitBTV9NQUtFRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICA9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CisKK0FNX0RJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MgICAgICAgID0gXAorICAgIC0tZW5hYmxlLWFkZHJlc3Mtc2FuaXRpemVyICAgICAgICBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1hbGwgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1uY3AtYXBwPWFsbCAgICAgICAgICAgICAgXAorICAgIC0td2l0aC1uY3AtYnVzPXVhcnQgICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtZGlhZyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtLXdpdGgtZXhhbXBsZXM9cG9zaXggICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWNvbW1pc3Npb25lciAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtam9pbmVyICAgICAgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1kaGNwNi1jbGllbnQgICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWRoY3A2LXNlcnZlciAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtZG5zLWNsaWVudCAgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1hcHBsaWNhdGlvbi1jb2FwICAgICAgICAgXAorICAgIC0tZW5hYmxlLWJvcmRlci1yb3V0ZXIgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBpbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNyYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGhpcmRfcGFydHkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBleGFtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdG9vbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRVhUUkFfRElTVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLmFzdHlsZS9hc3R5bGUtb3B0cyAgICAgICAgICAgICAgIFwKKyAgICAuYXN0eWxlL2FzdHlsZS13cmFwLnNoICAgICAgICAgICAgXAorICAgIC5kZWZhdWx0LXZlcnNpb24gICAgICAgICAgICAgICAgICBcCisgICAgYm9vdHN0cmFwICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBldGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJFQURNRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9USUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDT05UUklCVVRJTkcubWQgICAgICAgICAgICAgICAgICAgXAorICAgIExJQ0VOU0UgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitCVUlMVF9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAubG9jYWwtdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworZGlzdF9kb2NfREFUQSAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitESVNUQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAubG9jYWwtdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUFJFVFRZX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNyYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0b29scyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBJZ25vcmUgdGhlIHBzZXVkbyBmbGFzaCBmaWxlcyBvbiBQb3NpeCBwbGF0Zm9ybSBkdXJpbmcgZGlza2NoZWNrCitkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMgICAgICAgICAgICA9IFwKKyAgICAkKEFNX1ZfYXQpZmluZCAuIC10eXBlIGYgLW5hbWUgIipmbGFzaCIKKworIworIyBQYWNrYWdlIHZlcnNpb24gZmlsZXM6CisjCisjIC5kZWZhdWx0LXZlcnNpb24gLSBUaGUgZGVmYXVsdCBwYWNrYWdlIHZlcnNpb24uIFRoaXMgZmlsZSBpcyBBTFdBWVMgY2hlY2tlZAorIyAgICAgICAgICAgICAgICAgICAgaW4gYW5kIHNob3VsZCBhbHdheXMgcmVwcmVzZW50IHRoZSBjdXJyZW50IGJhc2VsaW5lCisjICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLgorIworIyAuZGlzdC12ZXJzaW9uICAgIC0gVGhlIGRpc3RyaWJ1dGVkIHBhY2thZ2UgdmVyc2lvbi4gVGhpcyBmaWxlIGlzIE5FVkVSCisjICAgICAgICAgICAgICAgICAgICBjaGVja2VkIGluIHdpdGhpbiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSwgaXMgYXV0by0KKyMgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCwgYW5kIGlzIG9ubHkgZm91bmQgaW4gdGhlIHBhY2thZ2UgZGlzdHJpYnV0aW9uLgorIworIyAubG9jYWwtdmVyc2lvbiAgIC0gVGhlIGN1cnJlbnQgc291cmNlIGNvZGUgY29udHJvbGxlZCBwYWNrYWdlIHZlcnNpb24uIFRoaXMKKyMgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgTkVWRVIgY2hlY2tlZCBpbiB3aXRoaW4gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnksCisjICAgICAgICAgICAgICAgICAgICBpcyBhdXRvLWdlbmVyYXRlZCwgYW5kIGNhbiBhbHdheXMgYmUgZm91bmQgaW4gYm90aCB0aGUKKyMgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHRyZWUgYW5kIGRpc3RyaWJ1dGlvbi4KKyMKKyMgV2hlbiBwcmVzZW50LCB0aGUgLmxvY2FsLXZlcnNpb24gZmlsZSBpcyBwcmVmZXJyZWQgZmlyc3QsIHRoZQorIyAuZGlzdC12ZXJzaW9uIHNlY29uZCwgYW5kIHRoZSAuZGVmYXVsdC12ZXJzaW9uIGxhc3QuCisjCisKK1ZFUlNJT05fRklMRSAgICAgICAgICAgICAgICAgICAgICA6PSAkKGlmICQod2lsZGNhcmQgJChidWlsZGRpcikvLmxvY2FsLXZlcnNpb24pLCQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uLCQoaWYgJCh3aWxkY2FyZCAkKHNyY2RpcikvLmRpc3QtdmVyc2lvbiksJChzcmNkaXIpLy5kaXN0LXZlcnNpb24sJChzcmNkaXIpLy5kZWZhdWx0LXZlcnNpb24pKQorCisjCisjIE92ZXJyaWRlIGF1dG90b29sJ3MgZGVmYXVsdCBub3Rpb24gb2YgdGhlIHBhY2thZ2UgdmVyc2lvbiB2YXJpYWJsZXMuCisjIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gd2UgY3JlYXRlIGEgc291cmNlIGRpc3RyaWJ1dGlvbiB0aGF0IHRoZQorIyB2ZXJzaW9uIGlzIGFsd2F5cyB0aGUgY3VycmVudCB2ZXJzaW9uLCBub3QgdGhlIHZlcnNpb24gd2hlbiB0aGUKKyMgcGFja2FnZSB3YXMgYm9vdHN0cmFwcGVkLgorIworCitPUEVOVEhSRUFEX1ZFUlNJT04gICAgICAgICAgICAgICAgPz0gJChzaGVsbCBjYXQgJChWRVJTSU9OX0ZJTEUpIDI+IC9kZXYvbnVsbCkKKworUEFDS0FHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9ICQoT1BFTlRIUkVBRF9WRVJTSU9OKQorVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQoUEFDS0FHRV9WRVJTSU9OKQorCitkaXN0ZGlyID0gJChQQUNLQUdFKS0kKHNoZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2lmIFsgIiQob3JpZ2luIE9QRU5USFJFQURfVkVSU0lPTikiICE9ICJmaWxlIiBdOyB0aGVuICAgICAgICAgICAgXAorICAgIGVjaG8gIiQoT1BFTlRIUkVBRF9WRVJTSU9OKSIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9zY3JpcHRzL21rdmVyc2lvbiAgICAgICAgICAgXAorICAgICAgICAtYiAiJChPUEVOVEhSRUFEX1ZFUlNJT04pIiAiJCh0b3Bfc3JjZGlyKSI7ICAgICAgICAgICAgICBcCitmaSApCisKKyMKKyMgY2hlY2stZmlsZS0ubG9jYWwtdmVyc2lvbgorIworIyBTcGVjdWxhdGl2ZWx5IHJlZ2VuZXJhdGUgLmxvY2FsLXZlcnNpb24gYW5kIGNoZWNrIHRvIHNlZSBpZiBpdCBuZWVkcworIyB0byBiZSB1cGRhdGVkLgorIworIyBJZiBPUEVOVEhSRUFEX1ZFUlNJT04gaGFzIGJlZW4gc3VwcGxpZWQgYW55d2hlcmUgb3RoZXIgdGhhbiBpbiB0aGlzIGZpbGUKKyMgKHdoaWNoIGlzIGltcGxpY2l0bHkgdGhlIGNvbnRlbnRzIG9mIC5sb2NhbC12ZXJzaW9uKSwgdGhlbiB1c2UgdGhhdDsKKyMgb3RoZXJ3aXNlLCBhdHRlbXB0IHRvIGdlbmVyYXRlIGl0IGZyb20gdGhlIFNDTSBzeXN0ZW0uCisjCisjIFRoaXMgaXMgY2FsbGVkIGZyb20gJChjYWxsIGNoZWNrLWZpbGUsLmxvY2FsLXZlcnNpb24pLgorIworZGVmaW5lIGNoZWNrLWZpbGUtLmxvY2FsLXZlcnNpb24KK2lmIFsgIiQob3JpZ2luIE9QRU5USFJFQURfVkVSU0lPTikiICE9ICJmaWxlIiBdOyB0aGVuIFwKKyAgICBlY2hvICIkKE9QRU5USFJFQURfVkVSU0lPTikiID4gIiQoMikiOyAgICAgICAgICAgIFwKK2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL3NjcmlwdHMvbWt2ZXJzaW9uICAgICAgICAgICBcCisgICAgICAgIC1iICIkKE9QRU5USFJFQURfVkVSU0lPTikiICIkKHRvcF9zcmNkaXIpIiAgICBcCisgICAgICAgID4gIiQoMikiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2ZpCitlbmRlZgorCisjCisjIGNoZWNrLWZpbGUtLmRpc3QtdmVyc2lvbgorIworIyBTcGVjdWxhdGl2ZWx5IHJlZ2VuZXJhdGUgLmRpc3QtdmVyc2lvbiBhbmQgY2hlY2sgdG8gc2VlIGlmIGl0IG5lZWRzCisjIHRvIGJlIHVwZGF0ZWQuCisjCisjIFRoaXMgaXMgY2FsbGVkIGZyb20gJChjYWxsIGNoZWNrLWZpbGUsLmRpc3QtdmVyc2lvbikuCisjCitkZWZpbmUgY2hlY2stZmlsZS0uZGlzdC12ZXJzaW9uCitjYXQgIiQoMSkiID4gIiQoMikiCitlbmRlZgorCisjCisjIEEgY29udmVuaWVuY2UgdGFyZ2V0IHRvIGFsbG93IHBhY2thZ2UgdXNlcnMgdG8gZWFzaWx5IHJlcnVuIHRoZQorIyBwYWNrYWdlIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjCisuUEhPTlk6IHJlY29uZmlndXJlCityZWNvbmZpZ3VyZTogJChidWlsZGRpcikvY29uZmlnLnN0YXR1cworCSQoQU1fVl9hdCkkKDwpIC0tcmVjaGVjaworCisjCisjIFZlcnNpb24gZmlsZSByZWdlbmVyYXRpb24gcnVsZXMuCisjCisuUEhPTlk6IGZvcmNlCisKKyQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uOiAkKHNyY2RpcikvLmRlZmF1bHQtdmVyc2lvbiBmb3JjZQorCiskKGRpc3RkaXIpLy5kaXN0LXZlcnNpb246ICQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uIGZvcmNlCisKKyQoZGlzdGRpcikvLmRpc3QtdmVyc2lvbiAkKGJ1aWxkZGlyKS8ubG9jYWwtdmVyc2lvbjoKKwkkKGNhbGwgY2hlY2stZmlsZSwkKEBGKSkKKworZGlzdCBkaXN0Y2hlY2s6ICQoQlVJTFRfU09VUkNFUykKKworZGlzdC1ob29rOiAkKGRpc3RkaXIpLy5kaXN0LXZlcnNpb24KKworIworIyBUb3AtbGV2ZWwgY29udmVuaWVuY2UgdGFyZ2V0IGZvciBtYWtpbmcgYSBkb2N1bWVudGF0aW9uLW9ubHkKKyMgZGlzdHJpYnV0aW9uIHdob3NlIHJlc3VsdHMgYXBwZWFyIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGJ1aWxkIHRyZWUKKyMgaW4gdGhlIHNhbWUgZmFzaGlvbiB0aGF0IHRoZSBkaXN0cmlidXRpb24gd291bGQgYmUgZm9yICdtYWtlIGRpc3QnLgorIworCisuUEhPTlk6IGRvY2Rpc3QKK2RvY2Rpc3Q6ICQoQlVJTFRfU09VUkNFUykKKwkkKE1BS0UpIC1DIGRvYyBkb2NkaXN0ZGlyPSQoYWJzX2J1aWxkZGlyKSAkKEApCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvTk9USUNFIGIvTk9USUNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMWRhZDgKLS0tIC9kZXYvbnVsbAorKysgYi9OT1RJQ0UKQEAgLTAsMCArMSwxOSBAQAorT3BlblRocmVhZCBpcyBhbiBvcGVuIHNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGhyZWFkIDEuMC4xIEZpbmFsIFNwZWNpZmljYXRpb24uCitUaGUgVGhyZWFkIDEuMC4xIEZpbmFsIFNwZWNpZmljYXRpb24gaXMgcHJvbXVsZ2F0ZWQgYnkgdGhlIFRocmVhZCBHcm91cC4gVGhlIFRocmVhZAorR3JvdXAgaXMgYSBub24tcHJvZml0IG9yZ2FuaXphdGlvbiBmb3JtZWQgZm9yIHRoZSBwdXJwb3NlcyBvZiBkZWZpbmluZyBvbmUgb3IKK21vcmUgc3BlY2lmaWNhdGlvbnMsIGJlc3QgcHJhY3RpY2VzLCByZWZlcmVuY2UgYXJjaGl0ZWN0dXJlcywgaW1wbGVtZW50YXRpb24KK2d1aWRlbGluZXMgYW5kIGNlcnRpZmljYXRpb24gcHJvZ3JhbXMgdG8gcHJvbW90ZSB0aGUgYXZhaWxhYmlsaXR5IG9mIGNvbXBsaWFudAoraW1wbGVtZW50YXRpb25zIG9mIHRoZSBUaHJlYWQgcHJvdG9jb2wuIEluZm9ybWF0aW9uIG9uIGJlY29taW5nIGEgTWVtYmVyLCBpbmNsdWRpbmcKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBiZW5lZml0cyB0aGVyZW9mLCBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3RocmVhZGdyb3VwLm9yZy4KKworT3BlblRocmVhZCBpcyBub3QgYWZmaWxpYXRlZCB3aXRoIG9yIGVuZG9yc2VkIGJ5IHRoZSBUaHJlYWQgR3JvdXAuIEltcGxlbWVudGF0aW9uCitvZiB0aGlzIE9wZW5UaHJlYWQgY29kZSBkb2VzIG5vdCBhc3N1cmUgY29tcGxpYW5jZSB3aXRoIHRoZSBUaHJlYWQgMS4wLjEgRmluYWwKK1NwZWNpZmljYXRpb24gYW5kIGRvZXMgbm90IGNvbnZleSB0aGUgcmlnaHQgdG8gaWRlbnRpZnkgYW55IGZpbmFsIHByb2R1Y3QgYXMgVGhyZWFkCitjZXJ0aWZpZWQuIE1lbWJlcnMgb2YgdGhlIFRocmVhZCBHcm91cCBtYXkgaG9sZCBwYXRlbnRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyByZWxhdGluZyB0byB0aGUgVGhyZWFkIDEuMC4xIEZpbmFsIFNwZWNpZmljYXRpb24sIG93bmVyc2hpcCBhbmQKK2xpY2Vuc2VzIG9mIHdoaWNoIGFyZSBzdWJqZWN0IHRvIHRoZSBUaHJlYWQgR3JvdXDigJlzIElQIFBvbGljaWVzLCBhbmQgbm90IHRoaXMgbGljZW5zZS4KKworVGhlIGluY2x1ZGVkIGNvcHlyaWdodCB0byB0aGUgT3BlblRocmVhZCBjb2RlIGlzIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgaW4gdGhlCitMSUNFTlNFIGZpbGUsIGFuZCBhbGwgb3RoZXIgcmlnaHRzIGFuZCBsaWNlbnNlcyBhcmUgZXhwcmVzc2x5IHJlc2VydmVkLgorTm8gd2FycmFudHkgb3IgYXNzdXJhbmNlIGlzIG1hZGUgd2l0aCByZXNwZWN0IHRvIGFkZGl0aW9uYWwgcmlnaHRzIHRoYXQgbWF5IGJlCityZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhpcyBjb2RlLgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxM2JmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUubWQKQEAgLTAsMCArMSwxODQgQEAKK1shW09wZW5UaHJlYWRdW290LWxvZ29dXVtvdC1yZXBvXSAgCitbIVtCdWlsZCBTdGF0dXNdW290LXRyYXZpcy1zdmddXVtvdC10cmF2aXNdCitbIVtCdWlsZCBTdGF0dXNdW290LWFwcHZleW9yLXN2Z11dW290LWFwcHZleW9yXQorWyFbQ292ZXJhZ2UgU3RhdHVzXVtvdC1jb2RlY292LXN2Z11dW290LWNvZGVjb3ZdCisKKy0tLQorCisjIFdoYXQgaXMgT3BlblRocmVhZD8gIAorCitPcGVuVGhyZWFkIGlzLi4uCis8YSBocmVmPSJodHRwOi8vdGhyZWFkZ3JvdXAub3JnL3RlY2hub2xvZ3kvb3VydGVjaG5vbG9neSNjZXJ0aWZpZWRwcm9kdWN0cyI+Cis8aW1nIHNyYz0iaHR0cHM6Ly9jZG4ucmF3Z2l0LmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvYWI0YzRlMWUvZG9jL2ltYWdlcy9jZXJ0aWZpZWQuc3ZnIiBhbHQ9IlRocmVhZCBDZXJ0aWZpZWQgQ29tcG9uZW50IiB3aWR0aD0iMTUwcHgiIGFsaWduPSJyaWdodCI+Cis8L2E+CisKKyoqLi4uYW4gb3Blbi1zb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIFtUaHJlYWRdKGh0dHA6Ly90aHJlYWRncm91cC5vcmcvdGVjaG5vbG9neS9vdXJ0ZWNobm9sb2d5KSBuZXR3b3JraW5nIHByb3RvY29sLioqIE5lc3QgaGFzIHJlbGVhc2VkIE9wZW5UaHJlYWQgdG8gbWFrZSB0aGUgdGVjaG5vbG9neSB1c2VkIGluIE5lc3QgcHJvZHVjdHMgbW9yZSBicm9hZGx5IGF2YWlsYWJsZSB0byBkZXZlbG9wZXJzIHRvIGFjY2VsZXJhdGUgdGhlIGRldmVsb3BtZW50IG9mIHByb2R1Y3RzIGZvciB0aGUgY29ubmVjdGVkIGhvbWUuCisKKyoqLi4uT1MgYW5kIHBsYXRmb3JtIGFnbm9zdGljKiosIHdpdGggYSBuYXJyb3cgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIgYW5kIGEgc21hbGwgbWVtb3J5IGZvb3RwcmludCwgbWFraW5nIGl0IGhpZ2hseSBwb3J0YWJsZS4KKworKiouLi5hIFRocmVhZCBDZXJ0aWZpZWQgQ29tcG9uZW50KiosIGltcGxlbWVudGluZyBhbGwgZmVhdHVyZXMgZGVmaW5lZCBpbiB0aGUgW1RocmVhZCAxLjEuMSBzcGVjaWZpY2F0aW9uXShodHRwOi8vdGhyZWFkZ3JvdXAub3JnL3RlY2hub2xvZ3kvb3VydGVjaG5vbG9neSNzcGVjaWZpY2F0aW9ucykuIFRoaXMgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGFuIElQdjYtYmFzZWQgcmVsaWFibGUsIHNlY3VyZSBhbmQgbG93LXBvd2VyIHdpcmVsZXNzIGRldmljZS10by1kZXZpY2UgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBmb3IgaG9tZSBhcHBsaWNhdGlvbnMuCisKK01vcmUgaW5mb3JtYXRpb24gYWJvdXQgVGhyZWFkIGNhbiBiZSBmb3VuZCBvbiBbdGhyZWFkZ3JvdXAub3JnXShodHRwOi8vdGhyZWFkZ3JvdXAub3JnLykuCisKK1t0aHJlYWRdOiBodHRwOi8vdGhyZWFkZ3JvdXAub3JnL3RlY2hub2xvZ3kvb3VydGVjaG5vbG9neQorW290LXJlcG9dOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkCitbb3QtbG9nb106IGRvYy9pbWFnZXMvb3BlbnRocmVhZF9sb2dvLnBuZworW290LXRyYXZpc106IGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9vcGVudGhyZWFkL29wZW50aHJlYWQKK1tvdC10cmF2aXMtc3ZnXTogaHR0cHM6Ly90cmF2aXMtY2kub3JnL29wZW50aHJlYWQvb3BlbnRocmVhZC5zdmc/YnJhbmNoPW1hc3RlcgorW290LWFwcHZleW9yXTogaHR0cHM6Ly9jaS5hcHB2ZXlvci5jb20vcHJvamVjdC9qd2h1aS9vcGVudGhyZWFkCitbb3QtYXBwdmV5b3Itc3ZnXTogaHR0cHM6Ly9jaS5hcHB2ZXlvci5jb20vYXBpL3Byb2plY3RzL3N0YXR1cy9yNXF3eWhuOXAyNm5tZmszP3N2Zz10cnVlCitbb3QtY29kZWNvdl06IGh0dHBzOi8vY29kZWNvdi5pby9naC9vcGVudGhyZWFkL29wZW50aHJlYWQKK1tvdC1jb2RlY292LXN2Z106IGh0dHBzOi8vY29kZWNvdi5pby9naC9vcGVudGhyZWFkL29wZW50aHJlYWQvYnJhbmNoL21hc3Rlci9ncmFwaC9iYWRnZS5zdmcKKworIyBHZXQgc3RhcnRlZCB3aXRoIE9wZW5UaHJlYWQKKworPGEgaHJlZj0iaHR0cHM6Ly9jb2RlbGFicy5kZXZlbG9wZXJzLmdvb2dsZS5jb20vY29kZWxhYnMvb3BlbnRocmVhZC1zaW11bGF0aW9uL2luZGV4Lmh0bWwiPgorPGltZyBzcmM9ImRvYy9pbWFnZXMvb3QtY29kZWxhYi5wbmciIGFsdD0iT3BlblRocmVhZCBDb2RlbGFiIiB3aWR0aD0iMzAwcHgiIGFsaWduPSJyaWdodCI+Cis8L2E+CisKK1dhbnQgdG8gdHJ5IE9wZW5UaHJlYWQ/IFRoZSBxdWlja2VzdCB3YXkgdG8gZ2V0IHN0YXJ0ZWQgaXMgdG8gcnVuIHRocm91Z2ggb3VyIFtTaW11bGF0aW9uIENvZGVsYWJdKGh0dHBzOi8vY29kZWxhYnMuZGV2ZWxvcGVycy5nb29nbGUuY29tL2NvZGVsYWJzL29wZW50aHJlYWQtc2ltdWxhdGlvbi9pbmRleC5odG1sKSwgd2hpY2ggY292ZXJzIGFsbCB0aGUgYmFzaWNzLCB3aXRob3V0IHRoZSBuZWVkIGZvciB0ZXN0IGhhcmR3YXJlLiBVc2luZyBWaXJ0dWFsQm94IGFuZCBWYWdyYW50IG9uIGEgTWFjIG9yIExpbnV4IG1hY2hpbmUsIHlvdSB3aWxsIGxlYXJuOgorCisqIEhvdyB0byBzZXQgdXAgdGhlIE9wZW5UaHJlYWQgYnVpbGQgdG9vbGNoYWluCisqIEhvdyB0byBzaW11bGF0ZSBhIFRocmVhZCBuZXR3b3JrCisqIEhvdyB0byBhdXRoZW50aWNhdGUgVGhyZWFkIG5vZGVzIHdpdGggQ29tbWlzc2lvbmluZworKiBIb3cgdG8gdXNlIGB3cGFudHVuZGAgdG8gbWFuYWdlIGEgc2ltdWxhdGVkIFRocmVhZCBuZXR3b3JrIGZlYXR1cmluZyBhbiBOQ1AKKworIyMjIE5leHQgU3RlcHMKKworVGhlIENvZGVsYWIgc2hvd3MgeW91IGhvdyBlYXN5IGl0IGlzIHVzZSB0byBPcGVuVGhyZWFkIHRvIHNpbXVsYXRlIGEgVGhyZWFkIG5ldHdvcmsuIE9uY2UgY29tcGxldGU6CisKKzEuIExlYXJuIG1vcmUgYWJvdXQgdGhlIFtPcGVuVGhyZWFkIGFyY2hpdGVjdHVyZSBhbmQgZmVhdHVyZXNdKCNvcGVudGhyZWFkLWZlYXR1cmVzKQorMS4gR2V0IGZhbWlsaWFyIHdpdGggW3BsYXRmb3JtcyBhbmQgZGV2aWNlcyB0aGF0IHN1cHBvcnQgT3BlblRocmVhZF0oI3doby1zdXBwb3J0cy1vcGVudGhyZWFkKQorMS4gU2VlIHdoYXQgW3Rlc3RpbmcgdG9vbHNdKCN3aGF0LXRvb2xzLWFyZS1hdmFpbGFibGUtZm9yLXRlc3RpbmcpIGFyZSBhdmFpbGFibGUKKzEuIExlYXJuIFt3aGVyZSB0byBnZXQgaGVscF0oI25lZWQtaGVscCkgYW5kIFtob3cgdG8gY29udHJpYnV0ZV0oI3dhbnQtdG8tY29udHJpYnV0ZSkgdG8gdGhlIG9uZ29pbmcgZGV2ZWxvcG1lbnQgb2YgT3BlblRocmVhZAorCisjIE9wZW5UaHJlYWQgRmVhdHVyZXMKKworT3BlblRocmVhZCBpbXBsZW1lbnRzIGFsbCBmZWF0dXJlcyBkZWZpbmVkIGluIHRoZSBbVGhyZWFkIDEuMS4xIHNwZWNpZmljYXRpb25dKGh0dHA6Ly90aHJlYWRncm91cC5vcmcvdGVjaG5vbG9neS9vdXJ0ZWNobm9sb2d5I3NwZWNpZmljYXRpb25zKSwgaW5jbHVkaW5nIGFsbCBUaHJlYWQgbmV0d29ya2luZyBsYXllcnMgKElQdjYsIDZMb1dQQU4sIElFRUUgODAyLjE1LjQgd2l0aCBNQUMgc2VjdXJpdHksIE1lc2ggTGluayBFc3RhYmxpc2htZW50LCBNZXNoIFJvdXRpbmcpIGFuZCBkZXZpY2Ugcm9sZXMsIGFzIHdlbGwgYXMgW0JvcmRlciBSb3V0ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL2JvcmRlcnJvdXRlcikgc3VwcG9ydC4KKworT3BlblRocmVhZCBzdXBwb3J0cyBib3RoIHN5c3RlbS1vbi1jaGlwIChTb0MpIGFuZCBuZXR3b3JrIGNvLXByb2Nlc3NvciAoTkNQKSBkZXNpZ25zLiBPdGhlciBmZWF0dXJlcyBhbmQgZW5oYW5jZW1lbnRzIGluY2x1ZGU6CisKKyogQXBwbGljYXRpb24gc3VwcG9ydCBhbmQgc2VydmljZXMKKyAgICAqIElQdjYgY29uZmlndXJhdGlvbiBhbmQgcmF3IGRhdGEgaW50ZXJmYWNlCisgICAgKiBVRFAgc29ja2V0cworICAgICogQ29BUCBjbGllbnQgYW5kIHNlcnZlcgorICAgICogREhDUHY2IGNsaWVudCBhbmQgc2VydmVyCisgICAgKiBETlN2NiBjbGllbnQKKyAgICAqIENvbW1hbmQgTGluZSBJbnRlcmZhY2UgKENMSSkKKyogTkNQIHN1cHBvcnQKKyAgICAqIFNwaW5lbCAtIGdlbmVyYWwgcHVycG9zZSBOQ1AgcHJvdG9jb2wKKyAgICAqIGB3cGFudHVuZGAgLSB1c2VyLXNwYWNlIE5DUCBuZXR3b3JrIGludGVyZmFjZSBkcml2ZXIvZGFlbW9uCisgICAgKiBTbmlmZmVyIHN1cHBvcnQgdmlhIE5DUCBTcGluZWwgbm9kZXMKKyogQm9yZGVyIFJvdXRlcgorICAgICogV2ViIFVJIGZvciBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50CisgICAgKiBUaHJlYWQgQm9yZGVyIEFnZW50IHRvIHN1cHBvcnQgYW4gRXh0ZXJuYWwgQ29tbWlzc2lvbmVyCisgICAgKiBOQVQ2NCBmb3IgY29ubmVjdGluZyB0byBJUHY0IG5ldHdvcmtzCisgICAgKiBUaHJlYWQgaW50ZXJmYWNlIGRyaXZlciB1c2luZyBgd3BhbnR1bmRgCisKKyMjIyBXaGF0J3MgY29taW5nPworCitUaGUgZGV2ZWxvcG1lbnQgb2YgT3BlblRocmVhZCBpcyBvbmdvaW5nIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBmZWF0dXJlcyBub3QgYXZhaWxhYmxlIGluIHRoZSBzdGFuZGFyZC4gQ2hlY2sgYmFjayByZWd1bGFybHkgZm9yIG5ldyB1cGRhdGVzLCBvciB2aXNpdCB0aGUgW29wZW50aHJlYWQtYW5ub3VuY2VdKGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyFmb3J1bS9vcGVudGhyZWFkLWFubm91bmNlKSBHb29nbGUgR3JvdXAuCisKKyMgV2hvIHN1cHBvcnRzIE9wZW5UaHJlYWQ/CisKK0xlZCBieSBOZXN0LCB0aGUgZm9sbG93aW5nIGNvbXBhbmllcyBhcmUgY29udHJpYnV0aW5nIHRvIHRoZSBvbmdvaW5nIGRldmVsb3BtZW50IG9mIE9wZW5UaHJlYWQ6CisKKzxhIGhyZWY9Imh0dHBzOi8vd3d3LmFybS5jb20vIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLWFybS5wbmciIGFsdD0iQVJNIiB3aWR0aD0iMjAwcHgiPjwvYT48YSBocmVmPSJodHRwOi8vd3d3LmF0bWVsLmNvbS8iPjxpbWcgc3JjPSJkb2MvaW1hZ2VzL290LWNvbnRyaWItYXRtZWwucG5nIiBhbHQ9IkF0bWVsIiB3aWR0aD0iMjAwcHgiPjwvYT48YSBocmVmPSJodHRwOi8vd3d3LmRpYWxvZy1zZW1pY29uZHVjdG9yLmNvbS8iPjxpbWcgc3JjPSJkb2MvaW1hZ2VzL290LWNvbnRyaWItZGlhbG9nLnBuZyIgYWx0PSJEaWFsb2ciIHdpZHRoPSIyMDBweCI+PC9hPjxhIGhyZWY9Imh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vZW4tdXMvIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLW1zLnBuZyIgYWx0PSJNaWNyb3NvZnQiIHdpZHRoPSIyMDBweCI+PC9hPjxhIGhyZWY9Imh0dHBzOi8vbmVzdC5jb20vIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLW5lc3QucG5nIiBhbHQ9Ik5lc3QiIHdpZHRoPSIyMDBweCI+PC9hPjxhIGhyZWY9Imh0dHA6Ly93d3cubm9yZGljc2VtaS5jb20vIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLW5vcmRpYy5wbmciIGFsdD0iTm9yZGljIiB3aWR0aD0iMjAwcHgiPjwvYT48YSBocmVmPSJodHRwOi8vd3d3Lm54cC5jb20vIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLW54cC5wbmciIGFsdD0iTlhQIiB3aWR0aD0iMjAwcHgiPjwvYT48YSBocmVmPSJodHRwczovL3d3dy5xdWFsY29tbS5jb20vIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLXFjLnBuZyIgYWx0PSJRdWFsY29tbSIgd2lkdGg9IjIwMHB4Ij48L2E+PGEgaHJlZj0iaHR0cHM6Ly93d3cuc3lub3BzeXMuY29tLyI+PGltZyBzcmM9ImRvYy9pbWFnZXMvb3QtY29udHJpYi1zeW5vcHN5cy5wbmciIGFsdD0iU3lub3BzeXMiIHdpZHRoPSIyMDBweCI+PC9hPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnRpLmNvbS8iPjxpbWcgc3JjPSJkb2MvaW1hZ2VzL290LWNvbnRyaWItdGkucG5nIiBhbHQ9IlRleGFzIEluc3RydW1lbnRzIiB3aWR0aD0iMjAwcHgiPjwvYT4KKworT3BlblRocmVhZCBoYXMgYmVlbiBwb3J0ZWQgdG8gc2V2ZXJhbCBkZXZpY2VzIGFuZCBwbGF0Zm9ybXMgYnkgYm90aCB0aGUgT3BlblRocmVhZCB0ZWFtIGFuZCB0aGUgY29tbXVuaXR5LiBCdWlsZCBleGFtcGxlcyBmb3IgYWxsIHN1cHBvcnRlZCBwbGF0Zm9ybXMgYXJlIGluY2x1ZGVkIGluIHRoZSBPcGVuVGhyZWFkIHByb2plY3QuCisKKyMjIyBJRUVFIDgwMi4xNS40IFBsYXRmb3JtIFN1cHBvcnQKKworKiBbRGlhbG9nIFNlbWljb25kdWN0b3IgREExNTAwMF0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BsYXRmb3JtcyNkaWFsb2ctZGExNTAwMCkKKyogW05vcmRpYyBTZW1pY29uZHVjdG9yIG5SRjUyODQwXShodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkL3dpa2kvUGxhdGZvcm1zI25vcmRpYy1zZW1pY29uZHVjdG9yLW5yZjUyODQwKQorKiBbTlhQIEtXNDFaXShodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkL3dpa2kvUGxhdGZvcm1zI254cC1rdzQxeikKKyogW1NpbGljb24gTGFicyBFRlIzMl0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BsYXRmb3JtcyNzaWxpY29uLWxhYnMtZWZyMzIpCisqIFtTeW5vcHN5cyBBUkMgRU1TSyB3aXRoIE1pY3JvY2hpcCBNUkYyNEo0MF0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BsYXRmb3JtcyNzeW5vcHN5cy1hcmMtZW0td2l0aC1taWNyb2NoaXAtbXJmMjRqNDApCisqIFtUZXhhcyBJbnN0cnVtZW50cyBDQzI1MzhdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvd2lraS9QbGF0Zm9ybXMjdGV4YXMtaW5zdHJ1bWVudHMtY2MyNTM4KQorKiBbVGV4YXMgSW5zdHJ1bWVudHMgQ0MyNjUwXShodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkL3dpa2kvUGxhdGZvcm1zI3RleGFzLWluc3RydW1lbnRzLWNjMjY1MCkKKyogW1BPU0lYIEVtdWxhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BsYXRmb3JtcyNwb3NpeC1lbXVsYXRpb24pCisKK1NlZSB0aGUgW1dpa2kgUGxhdGZvcm0gcGFnZV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BsYXRmb3JtcykgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIHBsYXRmb3Jtcy4KKworIyMjIERlc2t0b3AgU3VwcG9ydAorCitEZXNrdG9wIHBsYXRmb3JtcyBjYW4gYWxzbyBiZSB1c2VkIHRvIGNvbnRyb2wgYW5kIGludGVyZmFjZSB3aXRoIGEgVGhyZWFkIG5ldHdvcmsgdXNpbmcgT3BlblRocmVhZDoKKworKiAqKlVuaXgqKiDigJQgW2B3cGFudHVuZGBdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL3dwYW50dW5kKSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gYW4gTkNQCisqICoqV2luZG93cyAxMCoqIOKAlCBbdW5pdmVyc2FsIGRyaXZlcnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvd2lraS9PcGVuVGhyZWFkLW9uJUMyJUEwV2luZG93cykgdG8gaW50ZXJmYWNlIHdpdGggZGV2aWNlcyBydW5uaW5nIE9wZW5UaHJlYWQKKworIyMjIFBvcnRpbmcKKworSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHBvcnRpbmcgT3BlblRocmVhZCB0byBhIG5ldyBwbGF0Zm9ybSwgc2VlIHRoZSBbUG9ydGluZyBHdWlkZV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BvcnRpbmctR3VpZGUpIGZvciBoYXJkd2FyZSByZXF1aXJlbWVudHMgYW5kIGRldGFpbGVkIHBvcnRpbmcgaW5zdHJ1Y3Rpb25zLgorCisjIyMgQm9yZGVyIFJvdXRlcgorCitBIEJvcmRlciBSb3V0ZXIgY29ubmVjdHMgYSBUaHJlYWQgbmV0d29yayB0byBuZXR3b3JrcyBhdCBkaWZmZXJlbnQgbGF5ZXJzLCBzdWNoIGFzIFdpRmkgb3IgRXRoZXJuZXQuIFtPcGVuVGhyZWFkIEJvcmRlciBSb3V0ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL2JvcmRlcnJvdXRlcikgcHJvdmlkZXMgZW5kLXRvLWVuZCBJUCB2aWEgcm91dGluZyBiZXR3ZWVuIFRocmVhZCBkZXZpY2VzIGFuZCBvdGhlciBleHRlcm5hbCBJUCBuZXR3b3JrcywgYXMgd2VsbCBhcyBleHRlcm5hbCBUaHJlYWQgQ29tbWlzc2lvbmluZy4KKworIyBXaGF0IHRvb2xzIGFyZSBhdmFpbGFibGUgZm9yIHRlc3Rpbmc/CisKKyMjIyBDZXJ0aWZpY2F0aW9uIFRlc3RpbmcKKworQ2VydGlmaWNhdGlvbiB0ZXN0aW5nIGlzIGRvbmUgd2l0aCB0aGUgW0dSTCBUaHJlYWQgVGVzdCBIYXJuZXNzIHNvZnR3YXJlXShodHRwOi8vZ3Jhbml0ZXJpdmVybGFicy5jb20vdGhyZWFkLyksIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgdG8gVGhyZWFkIG1lbWJlciBjb21wYW5pZXMuCisKK0FkZGl0aW9uYWwgdG9vbHMgdGhhdCBleHRlbmQgdGhlIFRlc3QgSGFybmVzcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9wZW5UaHJlYWQgcHJvamVjdDoKKworKiBbVGhyZWFkIEhhcm5lc3MgQXV0b21hdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC90cmVlL21hc3Rlci90b29scy9oYXJuZXNzLWF1dG9tYXRpb24pIOKAlCBhdXRvbWF0ZXMgdGhlIFRocmVhZCBUZXN0IEhhcm5lc3Mgc29mdHdhcmUKKyogW1RocmVhZCBIYXJuZXNzIFRIQ0kgZm9yIE9wZW5UaHJlYWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvdHJlZS9tYXN0ZXIvdG9vbHMvaGFybmVzcy10aGNpKSDigJQgYWxsb3dzIHRoZSBUaHJlYWQgVGVzdCBIYXJuZXNzIHRvIGNvbnRyb2wgT3BlblRocmVhZC1iYXNlZCByZWZlcmVuY2UgZGV2aWNlcyBkaXJlY3RseQorICAgICogQ0MyNTM4IGV4YW1wbGUgaW5jbHVkZWQgaW4gdGhlIEdSTCBUaHJlYWQgVGVzdCBIYXJkbmVzcyBzb2Z0d2FyZQorICAgICogTGlicmFyeSB2ZXJzaW9uIGNhbiBiZSBtb2RpZmllZCBieSBkZXZlbG9wZXJzIGZvciB1c2Ugb24gb3RoZXIgcGxhdGZvcm1zCisKKyMjIyBTbmlmZmVyCisKK09wZW5UaHJlYWQgYWxzbyBwcm92aWRlcyBhIFtzbmlmZmVyXShodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkL2Jsb2IvbWFzdGVyL3Rvb2xzL3NwaW5lbC1jbGkvU05JRkZFUi5tZCkgb24gdGhlIE5DUCBidWlsZC4gVGhlIHNuaWZmZXIgaXMgZXhwb3NlZCBieSB0aGUgU3BpbmVsIHByb3RvY29sIGFuZCBmZWF0dXJlczoKKworKiBNb25pdG9yIG1vZGUg4oCUIGNhcHR1cmUgcGFja2V0cyBkdXJpbmcgb3BlcmF0aW9uCisqIFByb21pc2N1b3VzIG1vZGUg4oCUIGRlZGljYXRlZCBzbmlmZmVyCisqIEhvc3Qtc2lkZSBzdXBwb3J0IOKAlCBgd3BhbnR1bmRgCisqIHBjYXAgc3RyZWFtIG91dHB1dAorCisjIE5lZWQgaGVscD8KKworIyMjIFdpa2kKKworRXhwbG9yZSB0aGUgW09wZW5UaHJlYWQgV2lraV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpKSBmb3IgbW9yZSBpbi1kZXB0aCBkb2N1bWVudGF0aW9uIG9uIGJ1aWxkaW5nLCB0ZXN0aW5nLCBhdXRvbWF0aW9uIGFuZCB0b29scy4KKworIyMjIEludGVyYWN0CisKK1RoZXJlIGFyZSBudW1lcm91cyBhdmVudWVzIGZvciBPcGVuVGhyZWFkIHN1cHBvcnQ6CisKKyogQnVncyBhbmQgZmVhdHVyZSByZXF1ZXN0cyDigJQgW3N1Ym1pdCB0byB0aGUgSXNzdWUgVHJhY2tlcl0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9pc3N1ZXMpCisqIFN0YWNrIE92ZXJmbG93IOKAlCBbcG9zdCBxdWVzdGlvbnMgdXNpbmcgdGhlIGBvcGVudGhyZWFkYCB0YWddKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvdGFnZ2VkL29wZW50aHJlYWQpCisqIEdvb2dsZSBHcm91cHMg4oCUIGRpc2N1c3Npb24gYW5kIGFubm91bmNlbWVudHMKKyAgICAqIFtvcGVudGhyZWFkLWFubm91bmNlXShodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhZm9ydW0vb3BlbnRocmVhZC1hbm5vdW5jZSkg4oCUIHJlbGVhc2Ugbm90ZXMgYW5kIG5ldyB1cGRhdGVzIG9uIE9wZW5UaHJlYWQKKyAgICAqIFtvcGVudGhyZWFkLXVzZXJzXShodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhZm9ydW0vb3BlbnRocmVhZC11c2Vycykg4oCUIHRoZSBiZXN0IHBsYWNlIGZvciB1c2VycyB0byBkaXNjdXNzIE9wZW5UaHJlYWQgYW5kIGludGVyYWN0IHdpdGggdGhlIE9wZW5UaHJlYWQgdGVhbQorCisjIyMgRGlyZWN0b3J5IFN0cnVjdHVyZQorCitUaGUgT3BlblRocmVhZCByZXBvc2l0b3J5IGlzIHN0cnVjdHVyZWQgYXMgZm9sbG93czoKKworRm9sZGVyICAgfCBDb250ZW50cworLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYGRvY2AgICAgICAgICB8IFNwaW5lbCBkb2NzIGFuZCBEb3h5Z2VuIGJ1aWxkIGZpbGUKK2BldGNgICAgICAgICAgfCBDb25maWd1cmF0aW9uIGZpbGVzIGZvciBvdGhlciBidWlsZCBzeXN0ZW1zIChlLmcuIFZpc3VhbCBTdHVkaW8pCitgZXhhbXBsZXNgICAgIHwgU2FtcGxlIGFwcGxpY2F0aW9ucyBhbmQgcGxhdGZvcm1zIGRlbW9uc3RyYXRpbmcgT3BlblRocmVhZAorYGluY2x1ZGVgICAgICB8IFB1YmxpYyBBUEkgaGVhZGVyIGZpbGVzCitgc3JjYCAgICAgICAgIHwgQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGhyZWFkIHN0YW5kYXJkIGFuZCByZWxhdGVkIGFkZC1vbnMKK2B0ZXN0c2AgICAgICAgfCBVbml0IGFuZCBUaHJlYWQgY29uZm9ybWFuY2UgdGVzdHMKK2B0aGlyZF9wYXJ0eWAgfCBUaGlyZC1wYXJ0eSBjb2RlIHVzZWQgYnkgT3BlblRocmVhZAorYHRvb2xzYCAgICAgICB8IEhlbHBmdWwgdXRpbGl0aWVzIHJlbGF0ZWQgdG8gdGhlIE9wZW5UaHJlYWQgcHJvamVjdAorCisKKyMgV2FudCB0byBjb250cmlidXRlPworCitXZSB3b3VsZCBsb3ZlIGZvciB5b3UgdG8gY29udHJpYnV0ZSB0byBPcGVuVGhyZWFkIGFuZCBoZWxwIG1ha2UgaXQgZXZlbiBiZXR0ZXIgdGhhbiBpdCBpcyB0b2RheSEgU2VlIHRoZSBbYENPTlRSSUJVVElORy5tZGBdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvYmxvYi9tYXN0ZXIvQ09OVFJJQlVUSU5HLm1kKSBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisjIFZlcnNpb25pbmcKKworT3BlblRocmVhZCBmb2xsb3dzIHRoZSBbU2VtYW50aWMgVmVyc2lvbmluZyBndWlkZWxpbmVzXShodHRwOi8vc2VtdmVyLm9yZy8pIGZvciByZWxlYXNlIGN5Y2xlIHRyYW5zcGFyZW5jeSBhbmQgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIE9wZW5UaHJlYWQncyB2ZXJzaW9uaW5nIGlzIGluZGVwZW5kZW50IG9mIHRoZSBUaHJlYWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGJ1dCB3aWxsIGNsZWFybHkgaW5kaWNhdGUgd2hpY2ggdmVyc2lvbiBvZiB0aGUgc3BlY2lmaWNhdGlvbiBpdCBjdXJyZW50bHkgc3VwcG9ydHMuCisKKyMgTGljZW5zZQorCitPcGVuVGhyZWFkIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBbQlNEIDMtQ2xhdXNlIGxpY2Vuc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvYmxvYi9tYXN0ZXIvTElDRU5TRSkuIFNlZSB0aGUgW2BMSUNFTlNFYF0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9ibG9iL21hc3Rlci9MSUNFTlNFKSBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgCisgIAorUGxlYXNlIG9ubHkgdXNlIHRoZSBPcGVuVGhyZWFkIG5hbWUgYW5kIG1hcmtzIHdoZW4gYWNjdXJhdGVseSByZWZlcmVuY2luZyB0aGlzIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbi4gRG8gbm90IHVzZSB0aGUgbWFya3MgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyB5b3UgYXJlIGVuZG9yc2VkIGJ5IG9yIG90aGVyd2lzZSBhZmZpbGlhdGVkIHdpdGggTmVzdCwgR29vZ2xlLCBvciBUaGUgVGhyZWFkIEdyb3VwLgpkaWZmIC0tZ2l0IGEvU1RZTEVfR1VJREUubWQgYi9TVFlMRV9HVUlERS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2EzNDk0Ci0tLSAvZGV2L251bGwKKysrIGIvU1RZTEVfR1VJREUubWQKQEAgLTAsMCArMSwxODIgQEAKKyMgT3BlblRocmVhZCBDb2RpbmcgQ29udmVudGlvbnMgYW5kIFN0eWxlCisKKyogWzEgQyBhbmQgQysrXSgjYy1hbmQtYykKKyAgKiBbMS4xIFN0YW5kYXJkc10oI3N0YW5kYXJkcykKKyAgKiBbMS4yIENvbnZlbnRpb25zIGFuZCBCZXN0IFByYWN0aWNlc10oI2NvbnZlbnRpb25zLWFuZC1iZXN0LXByYWN0aWNlcykKKyAgKiBbMS4zIFRpZ2h0bHktY29uc3RyYWluZWQgU3lzdGVtcyBhbmQgU2hhcmVkIEluZnJhc3RydWN0dXJlXSgjdGlnaHRseS1jb25zdHJhaW5lZC1zeXN0ZW1zLWFuZC1zaGFyZWQtaW5mcmFzdHJ1Y3R1cmUpCisgICogWzEuNCBGb3JtYXQgYW5kIFN0eWxlXSgjZm9ybWF0LWFuZC1zdHlsZSkKKyAgKiBbMS41IENvbW1lbnRzXSgjY29tbWVudHMpCisqIFsyIFB5dGhvbl0oI3B5dGhvbikKKyAgKiBbMi4xIFN0YW5kYXJkc10oI3N0YW5kYXJkcykKKyAgKiBbMi4yIENvbnZlbnRpb25zIGFuZCBCZXN0IFByYWN0aWNlc10oI2NvbnZlbnRpb25zLWFuZC1iZXN0LXByYWN0aWNlcykKKyAgKiBbMi4zIEZvcm1hdCBhbmQgU3R5bGVdKCNmb3JtYXQtYW5kLXN0eWxlKQorCisjIEMgYW5kIEMrKworCisjIyBTdGFuZGFyZHMKKworLSBDCisgIC0gT3BlblRocmVhZCB1c2VzIGFuZCBlbmZvcmNlcyB0aGUgSVNPOTg5OToxOTk5IChha2EgSVNPIEM5OSwgQzk5KSBDIGxhbmd1YWdlIHN0YW5kYXJkIGFzIHRoZSBtaW5pbXVtLgorLSBDKysKKyAgLSBPcGVuVGhyZWFkIHVzZXMgYW5kIGVuZm9yY2VzIHRoZSBJU08xNDg4MjoyMDAzIChha2EgSVNPIEMrKzAzLCBDKyswMykgQysrIGxhbmd1YWdlIHN0YW5kYXJkIGFzIHRoZSBtaW5pbXVtLgorLSBFeHRlbnNpb25zCisgIC0gV2hlcmV2ZXIgcG9zc2libGUsIHRvb2xjaGFpbi1zcGVjaWZpYyAoZS5nIEdDQy9HTlUpIGV4dGVuc2lvbnMgb3IgdGhlIHVzZSBvZiBsYXRlciBzdGFuZGFyZHMgc2hhbGwgYmUgYXZvaWRlZCBvciBzaGFsbCBiZSBsZXZlcmFnZWQgdGhyb3VnaCB0b29sY2hhaW4tY29tcGF0aWJpbGl0eSBwcmVwcm9jZXNzb3IgbWFjcm9zLgorCisjIyBDb252ZW50aW9ucyBhbmQgQmVzdCBQcmFjdGljZXMKKworIyMjIExhbmd1YWdlIEluZGVwZW5kZW50CisKKy0gSW5saW5lIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBqdWRpY2lvdXNseS4KKyAgLSBUaGUgdXNlIG9mIGNvZGUgaW4gaGVhZGVycyBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgdXNlIG9mIHRoZSBub24tbG9jYWwgc2NvcGUgaW5saW5lIGZ1bmN0aW9ucyBzaG91bGQgYmUgYXZvaWRlZC4gIEV4Y2VwdGlvbjogU2ltcGxlIHNldHRlcnMgYW5kIGdldHRlcnMgYXJlIGZpbmUgc2luY2UgdGhlIGNvbXBpbGVyIGNhbiBlZmZpY2llbnRseSBvcHRpbWl6ZSB0aGVzZSBhbmQgbWFrZSB0aGVpciBvdmVyaGVhZCBhcyBsb3cgYXMgYSBkaXJlY3QgZGF0YSBtZW1iZXIgYWNjZXNzLgorLSBSZXR1cm4gU3RhdGVtZW50cworICAtIFRoZXJlIHNob3VsZCBiZSBvbmUgcmV0dXJuIHN0YXRlbWVudCBwZXIgZnJlZSBmdW5jdGlvbiBvciBtZXRob2QgYXQgdGhlIGVuZCBvZiB0aGUgZnJlZSBmdW5jdGlvbiBvciBtZXRob2QuCistIE5vbi1sb2NhbCBHb3RvCisgIC0gVGhlcmUgc2hvdWxkIGJlIG5vIGNhbGxzIHRvIHRoZSBmdW5jdGlvbnMgYHNldGptcGAgb3IgYGxvbmdqbXBgLgorLSBMb2NhbCBHb3RvCisgIC0gVGhlcmUgc2hvdWxkIGJlIG5vIGNhbGxzIHRvIHRoZSBDL0MrKyBrZXl3b3JkIGdvdG8uICBFeGNlcHRpb246IFRoZSB1c2Ugb2YgbG9jYWwgZ290b3MgZm9yIHRoZSBwdXJwb3NlcyBvZiBjb21tb24gZXJyb3IgaGFuZGxpbmcgYmxvY2tzIGFuZCBzaW5nbGUgcG9pbnRzIG9mIGZ1bmN0aW9uIHJldHVybiBhdCB0aGUgYm90dG9tIG9mIGEgZnVuY3Rpb24uCistIEMgUHJlcHJvY2Vzc29yCisgIC0gVXNlIG9mIHRoZSBDIHByZXByb2Nlc3NvciBzaG91bGQgYmUgbGltaXRlZCB0byBmaWxlIGluY2x1c2lvbiBhbmQgc2ltcGxlIG1hY3Jvcy4KKyAgLSBNYWNyb3Mgc2hhbGwgbm90IGJlIGRlZmluZWQgd2l0aGluIGEgZnVuY3Rpb24gb3IgYSBibG9jayBhbmQgc2hvdWxkIGJlIGRlZmluZWQgYXQgdGhlIHRvcCBvZiBhIGZpbGUuCisgIC0gQWxsIGAjZWxzZWAsIGAjZWxpZmAsIGFuZCBgI2VuZGlmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBzaGFsbCByZXNpZGUgaW4gdGhlIHNhbWUgZmlsZSBhcyB0aGUgYCNpZmAgb3IgYCNpZmRlZmAgZGlyZWN0aXZlIHRvIHdoaWNoIHRoZXkgYXJlIHJlbGF0ZWQuCisgIC0gQWxsIGAjZW5kaWZgIGRpcmVjdGl2ZXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDIwIGxpbmVzIGF3YXkgZnJvbSB0aGUgYCNpZmAgb3IgYCNpZmRlZmAgZGlyZWN0aXZlIHRvIHdoaWNoIHRoZXkgYXJlIHJlbGF0ZWQgc2hhbGwgYmUgZGVjb3JhdGVkIGJ5IGxhbmd1YWdlIGNvbW1lbnQgaW5kaWNhdGluZyB0aGUgY29uZGl0aW9uYWwgdGhleSBhcmUgYXNzb2NpYXRlZCB3aXRoLgorICAtIFByZXByb2Nlc3NvciBgI2luY2x1ZGVgIGRpcmVjdGl2ZXMgaW4gYSBmaWxlIHNoYWxsIG9ubHkgYmUgcHJlY2VkZWQgYnkgb3RoZXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgb3IgY29tbWVudHMuCisgIC0gUHJlcHJvY2Vzc29yIGAjaW5jbHVkZWAgZGlyZWN0aXZlcyBzaGFsbCB1c2UgYnJhY2UgKOKAnDzigJ0pIGFuZCAo4oCcPuKAnSkgc3R5bGUgZm9yIGFsbCBwdWJsaWMgaGVhZGVycywgaW5jbHVkaW5nIEMgYW5kIEMrKyBzdGFuZGFyZCBsaWJyYXJ5LCBvciBvdGhlciBmaXJzdC0gYW5kIHRoaXJkLXBhcnR5IHB1YmxpYyBsaWJyYXJ5IGhlYWRlcnMuCisgIC0gUHJlcHJvY2Vzc29yIGAjaW5jbHVkZWAgZGlyZWN0aXZlcyBzaG91bGQgdXNlIGRvdWJsZSBxdW90ZSAo4oCY4oCc4oCYKSBhbmQgKOKAmOKAnOKAmCkgc3R5bGUgZm9yIGFsbCBwcml2YXRlIG9yIHJlbGF0aXZlIGhlYWRlcnMuCisgIC0gUHJlcHJvY2Vzc29yIGAjaW5jbHVkZWAgZGlyZWN0aXZlcyBzaG91bGQgYmUgZ3JvdXBlZCwgb3JkZXJlZCwgb3Igc29ydGVkIGFzIGZvbGxvd3M6CisgICAgLSBUaGlzIGNvbXBpbGF0aW9uIHVuaXQncyBjb3JyZXNwb25kaW5nIGhlYWRlciwgaWYgYW55LgorICAgIC0gQysrIFN0YW5kYXJkIExpYnJhcnkgaGVhZGVycworICAgIC0gQyBTdGFuZGFyZCBMaWJyYXJ5IGhlYWRlcnMKKyAgICAtIFRoaXJkLXBhcnR5IGxpYnJhcnkgaGVhZGVycworICAgIC0gRmlyc3QtcGFydHkgbGlicmFyeSBoZWFkZXJzCisgICAgLSBQcml2YXRlIG9yIGxvY2FsIGhlYWRlcnMKKyAgICAtIEFscGhhbnVtZXJpYyBvcmRlciB3aXRoaW4gZWFjaCBzdWJncm91cAorICAtIFRoZSBwcmVwcm9jZXNzb3Igc2hhbGwgbm90IGJlIHVzZWQgdG8gcmVkZWZpbmUgcmVzZXJ2ZWQgbGFuZ3VhZ2Uga2V5d29yZHMuCisgIC0gVW51c2VkIGNvZGUgc2hhbGwgbm90IGJlIGRpc2FibGVkIGJ5IGNvbW1lbnRpbmcgaXQgb3V0IHdpdGggQy0gb3IgQysrLXN0eWxlIGNvbW1lbnRzIG9yIHdpdGggcHJlcHJvY2Vzc29yIGAjaWYgMCAuLi4gI2VuZGlmYCBzZW1hbnRpY3MuCisgIC0gVXNlIG9mIHRoZSBwcmVwcm9jZXNzb3IgdG9rZW4gY29uY2F0ZW5hdGlvbiBvcGVyYXRvciAnIyMnIHNob3VsZCBiZSBhdm9pZGVkLgorICAtIFRoZSBgdW5kZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgc2hvdWxkIGJlIGF2b2lkZWQgYW5kIHNoYWxsIG5ldmVyIGJlIHVzZWQgdG8gdW5kZWZpbmUgYSBzeW1ib2wgZnJvbSBhIGZvcmVpZ24gbW9kdWxlLgorLSBPYmplY3QgU2NvcGUKKyAgLSBEYXRhIG9iamVjdHMgc2hhbGwgYmUgZGVjbGFyZWQgYXQgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGxldmVsIG9mIHNjb3BlLgorICAtIE5vIGRlY2xhcmF0aW9uIGluIGFuIGlubmVyIHNjb3BlIHNoYWxsIGhpZGUgb3Igc2hhZG93IGEgZGVjbGFyYXRpb24gaW4gYW4gb3V0ZXIgc2NvcGUuIENvbXBpbGVyIGZsYWdzIHNoYWxsIGJlIHNldCB0byBmbGFnIGFuZCBlbmZvcmNlIHRoaXMuCistIFVuYm91bmRlZCBSZWN1cnNpb24KKyAgLSBUaGVyZSBzaGFsbCBiZSBubyBkaXJlY3Qgb3IgaW5kaXJlY3QgdXNlIG9mIHVuYm91bmRlZCByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMuCistIFN5bW1ldHJpYyBBUElzCisgIC0gV2hlcmV2ZXIgcG9zc2libGUgYW5kIGFwcHJvcHJpYXRlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBtYW5hZ2VtZW50IG9mIHJlc291cmNlcywgQVBJcyBzaG91bGQgYmUgc3ltbWV0cmljLiAgRm9yIGV4YW1wbGUsIGlmIHRoZXJlIGlzIGEgZnJlZSBmdW5jdGlvbiBvciBvYmplY3QgbWV0aG9kIHRoYXQgYWxsb2NhdGVzIGEgcmVzb3VyY2UsIHRoZW4gdGhlcmUgc2hvdWxkIGJlIG9uZSB0aGF0IGRlYWxsb2NhdGVzIGl0LiBJZiB0aGVyZSBpcyBhIGZyZWUgZnVuY3Rpb24gb3Igb2JqZWN0IG1ldGhvZCB0aGF0IG9wZW5zIGEgZmlsZSBvciBuZXR3b3JrIHN0cmVhbSwgdGhlbiB0aGVyZSBzaG91bGQgYmUgb25lIHRoYXQgY2xvc2VzIGl0LgorLSBVc2UgQyBzdGRpbnQuaCBvciBDKysgY3N0ZGludCBmb3IgUGxhaW4gT2xkIERhdGEgVHlwZXMKKyAgLSBTdGFuZGFyZCwgc2NhbGFyIGRhdGEgdHlwZXMgZGVmaW5lZCBpbiBzdGRpbnQuaCAoQykgb3IgY3N0ZGludCAoQysrKSBzaG91bGQgYmUgdXNlZCBmb3IgYmFzaWMgc2lnbmVkIGFuZCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGVzLCBlc3BlY2lhbGx5IHdoZW4gc2l6ZSBhbmQgc2VyaWFsaXphdGlvbiB0byBub24tdm9sYXRpbGUgc3RvcmFnZSBvciBhY3Jvc3MgYSBuZXR3b3JrIGlzIGNvbmNlcm5lZC4gIEV4YW1wbGVzIG9mIHRoZXNlIGFyZTogYHVpbnQ4X3RgLCBgaW50OF90YCwgZXRjLgorLSBDb25zdGFudCBRdWFsaWZpZXJzCisgIC0gUmVhZC1vbmx5IG1ldGhvZHMsIGdsb2JhbCB2YXJpYWJsZXMsIHN0YWNrIHZhcmlhYmxlcywgb3IgZGF0YSBtZW1iZXJzIGFyZSByZWFkLW9ubHkgc2hvdWxkIGJlIHF1YWxpZmllZCB1c2luZyB0aGUgQyBvciBDKysgYGNvbnN0YCBxdWFsaWZpZXIuCisgIC0gUG9pbnRlcnMgb3IgcmVmZXJlbmNlcyB0byByZWFkLW9ubHkgb2JqZWN0cyBvciBzdG9yYWdlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGZ1bmN0aW9uIHBhcmFtZXRlcnMsIHNob3VsZCBiZSBxdWFsaWZpZWQgdXNpbmcgdGhlIEMgb3IgQysrIGBjb25zdGAgcXVhbGlmaWVyLgorLSBIZWFkZXIgSW5jbHVkZSBHdWFyZAorICAtIEFsbCBDIGFuZCBDKysgaGVhZGVycyBzaGFsbCB1c2UgcHJlcHJvY2Vzc29yIGhlYWRlciBpbmNsdWRlIGd1YXJkcy4KKyAgLSBUaGUgdGVybWluYXRpbmcgZW5kaWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBzaGFsbCBoYXZlIGEgY29tbWVudCwgQyBvciBDKysgZGVwZW5kaW5nIG9uIHRoZSBoZWFkZXIgdHlwZSwgY29udGFpbmluZyB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbCBpbnRyb2R1Y2VkIGJ5IHRoZSBpZm5kZWYgZGlyZWN0aXZlIHN0YXJ0aW5nIHRoZSBndWFyZC4KKyAgLSBUaGUgc3ltYm9sIHVzZWQgZm9yIHRoZSBndWFyZCBzaG91bGQgYmUgdGhlIGZpbGUgbmFtZSwgY29udmVydGVkIHRvIGFsbCB1cHBlcmNhc2UsIHdpdGggYW55IHNwYWNlcyAo4oCcIOKAnCkgb3IgZG90cyAo4oCcLuKAnSkgY29udmVydGVkIHRvIHVuZGVyc2NvcmVzICjigJxf4oCdKS4KKy0gRnVuY3Rpb24gYW5kIE1ldGhvZCBQcm90b3R5cGVzCisgIC0gQWxsIHZvaWQgZnVuY3Rpb25zIG9yIG1ldGhvZHMgc2hhbGwgZXhwbGljaXRseSBkZWNsYXJlIGFuZCBzcGVjaWZ5IHRoZSB2b2lkIHR5cGUga2V5d29yZC4KKworIyMjIEMKKworLSBDIC8gQysrIExpbmthZ2UgV3JhcHBlcnMKKyAgLSBBbGwgaGVhZGVyIGZpbGVzIGludGVuZGVkIHRvIGhhdmUgQyBzeW1ib2wgbGlua2FnZSBzaGFsbCB1c2Ug4oCcZXh0ZXJuIEPigJ0gbGlua2FnZSB3cmFwcGVycy4KKworIyMjIEMrKworCistIFByZWZlciBQYXNzaW5nIFBhcmFtZXRlcnMgYnkgUmVmZXJlbmNlIHRvIFBvaW50ZXIKKyAgLSBVbmxpa2UgQywgQysrIG9mZmVycyBhbiBhbHRlcm5hdGUgd2F5IHRvIGFsaWFzIGRhdGEgb3ZlciBhbmQgYWJvdmUgYSBwb2ludGVyLCB0aGUgcmVmZXJlbmNlLCBpbmRpY2F0ZWQgYnkgdGhlICYgc3ltYm9sLiAgV2hlcmUgYXBwcm9wcmlhdGUsIHRoZSByZWZlcmVuY2Ugc2hvdWxkIGJlIHByZWZlcnJlZCB0byB0aGUgcG9pbnRlci4KKy0gUGFzc2luZyBCYXNlIFNjYWxhcnMKKyAgLSBTaXplLSBhbmQgY2FsbCBmcmVxdWVuY3ktYmFzZWQgY29uc2lkZXJhdGlvbnMgc2hvdWxkIGJlIG1hZGUgd2hlbiBwYXNzaW5nIHNjYWxhcnMgYXMgdG8gd2hldGhlciB0aGV5IHNob3VsZCBiZSBwYXNzZWQgYnkgdmFsdWUgb3IgYnkgY29uc3RhbnQgcmVmZXJlbmNlOyBob3dldmVyLCBwYXNzLWJ5LXZhbHVlIHNob3VsZCBnZW5lcmFsbHkgYmUgcHJlZmVycmVkLgorLSBFbGltaW5hdGUgVW5uZWNlc3NhcnkgRGVzdHJ1Y3RvcnMKKyAgLSBUaGUgY3JlYXRpb24gb2YgZW1wdHkgb3IgdXNlbGVzcyBkZXN0cnVjdG9ycyBzaG91bGQgYmUgYXZvaWRlZC4gIEVtcHR5IG9yIHVzZWxlc3MgZGVzdHJ1Y3RvcnMgc2hvdWxkIGJlIHJlbW92ZWQuCistIERlZmF1bHQgUGFyYW1ldGVycworICAtIFdoZW4geW91IGRlY2xhcmUgQysrIGZyZWUgZnVuY3Rpb25zIGFuZCBvYmplY3QgbWV0aG9kcywgeW91IHNob3VsZCBhdm9pZCBvciBtaW5pbWl6ZSB1c2luZyBkZWZhdWx0IHBhcmFtZXRlcnMuCisgIC0gV2hlbiB5b3UgZGVjbGFyZSBDKysgdmlydHVhbCBvYmplY3QgbWV0aG9kcywgeW91IHNoYWxsIGF2b2lkIHVzaW5nIGRlZmF1bHQgcGFyYW1ldGVycy4KKy0gR2xvYmFsIGFuZCBTY29wZWQgU3RhdGljIENvbnN0cnVjdGlvbgorICAtIFRoZXJlIHNoYWxsIGJlIG5vIHVzZSBvZiBnbG9iYWwsIHN0YXRpYyBvciBvdGhlcndpc2UsIG9iamVjdCBjb25zdHJ1Y3Rpb24uICBUaGUgdXNlIG9mIHNjb3BlZCBzdGF0aWMgb2JqZWN0IGNvbnN0cnVjdGlvbiBzaG91bGQgYmUgYXZvaWRlZC4KKy0gQysrLXN0eWxlIENhc3RzCisgIC0gV2hlcmV2ZXIgcG9zc2libGUgYW5kIHByYWN0aWNhbCwgQysrIHN0eWxlIGNhc3RzIHNob3VsZCBiZSB1c2VkIGFuZCBwcmVmZXJyZWQgdG8gdGhlIEMgc3R5bGUgY2FzdCBlcXVpdmFsZW50LgorLSBBdm9pZCBgdXNpbmcgbmFtZXNwYWNlYCBTdGF0ZW1lbnRzIGluIEhlYWRlcnMKKyAgLSBUaGUgQysrIGB1c2luZyBuYW1lc3BhY2VgIHN0YXRlbWVudCBzaG91bGQgbm90IGJlIHVzZWQgb3V0c2lkZSBvZiBvYmplY3Qgc2NvcGUgaW5zaWRlIGhlYWRlciBmaWxlcy4KKworIyMgVGlnaHRseS1jb25zdHJhaW5lZCBTeXN0ZW1zIGFuZCBTaGFyZWQgSW5mcmFzdHJ1Y3R1cmUKKworLSBIZWFwLWJhc2VkIHJlc291cmNlIGFsbG9jYXRpb24gc2hvdWxkIGJlIGF2b2lkZWQuCistIFRoZXJlIHNoYWxsIGJlIG5vIGRpcmVjdCBvciBpbmRpcmVjdCB1c2Ugb2YgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzLgorLSBUaGUgdXNlIG9mIHZpcnR1YWwgZnVuY3Rpb25zIHNob3VsZCBiZSBhdm9pZGVkLgorLSBUaGUgdXNlIG9mIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeSBzaGFsbCBiZSBhdm9pZGVkLgorLSBUaGUgdXNlIG9mIHRoZSBDKysgU3RhbmRhcmQgVGVtcGxhdGUgTGlicmFyeSAoU1RMKSBzaG91bGQgYmUgYXZvaWRlZCBvciBtaW5pbWl6ZWQuCistIFRoZSB1c2Ugb2YgdGhlIEMrKyB0ZW1wbGF0ZXMgc2hvdWxkIGJlIGF2b2lkZWQgb3IgbWluaW1pemVkLgorLSBDb2RlIHNoYWxsIG5vdCB1c2UgZXhjZXB0aW9ucy4KKy0gQ29kZSBzaGFsbCBub3QgdXNlIEMrKyBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24gKFJUVEkpLCBpbmNsdWRpbmcgZmFjaWxpdGllcyB0aGF0IHJlbHkgdXBvbiBpdCwgc3VjaCBhcyBgZHluYW1pY19jYXN0YCBhbmQgYHR5cGVpZGAuCisKKyMjIEZvcm1hdCBhbmQgU3R5bGUKKworLSBPcGVuVGhyZWFkIHVzZXMgdGhlIGBtYWtlIHByZXR0eWAgYnVpbGQgdGFyZ2V0IHRvIHJlZm9ybWF0IGNvZGUgYW5kIGVuZm9yY2UgY29kZSBmb3JtYXQgYW5kIHN0eWxlLiAgVGhlIGBtYWtlIHByZXR0eS1jaGVja2AgYnVpbGQgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIE9wZW5UaHJlYWQncyBjb250aW51b3VzIGludGVncmF0aW9uIGFuZCBtdXN0IHBhc3MgYmVmb3JlIGEgcHVsbCByZXF1ZXN0IGlzIG1lcmdlZC4KKworIyMjIEZpbGUgTmFtZXMKKy0gRmlsZSBuYW1lcyBzaG91bGQgbWF0Y2ggdGhlIG5hbWVzIGFuZCB0eXBlcyBvZiB3aGF0IGlzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZS4gIElmIGEgZmlsZSBjb250YWlucyBtYW55IGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMsIHRoZSBhdXRob3Igc2hvdWxkIGNob29zZSB0aGUgb25lIHRoYXQgcHJlZG9taW5hbnRseSBkZXNjcmliZXMgb3IgdGhhdCBtYWtlcyB0aGUgbW9zdCBzZW5zZS4KKy0gRmlsZSBjb250ZW50cyBhbmQgbmFtZXMgc2hvdWxkIGJlIGxpbWl0ZWQgaW4gdGhlIHNjb3BlIG9mIHdoYXQgdGhleSBjb250YWluLiBJdCBtYXkgYWxzbyBiZSBwb3NzaWJsZSB0aGF0IHRoZXJlIGlzIHRvbyBtdWNoIHN0dWZmIGluIG9uZSBmaWxlIGFuZCB5b3UgbmVlZCB0byBicmVhayBpdCB1cCBpbnRvIG11bHRpcGxlIGZpbGVzLgorLSBGaWxlIG5hbWVzIHNob3VsZCBiZSBhbGwgbG93ZXIgY2FzZS4KKy0gRmlsZSBleHRlbnNpb25zIHNoYWxsIGJlIGluZGljYXRpdmUgYW5kIGFwcHJvcHJpYXRlIGZvciB0aGUgdHlwZSBhbmQgdXNhZ2Ugb2YgdGhlIHNvdXJjZSBvciBoZWFkZXIgZmlsZS4KKworIyMjIE5hbWluZworLSBOYW1lcyBzaG91bGQgYmUgZGVzY3JpcHRpdmUgYnV0IG5vdCBvdmVybHkgc28gYW5kIHRoZXkgc2hvdWxkIGdpdmUgc29tZSBpZGVhIG9mIHNjb3BlIGFuZCBzaG91bGQgYmUgc2VsZWN0ZWQgc3VjaCB0aGF0ICp3cm9uZyBjb2RlIGxvb2tzIHdyb25nKi4KKy0gTmFtZXMgc2hhbGwgbm90IGdpdmUgYW55IGlkZWEgb2YgdHlwZSwgc3VjaCBhcyBpcyBkb25lIHdpdGggU3lzdGVtIEh1bmdhcmlhbiBub3RhdGlvbi4KKy0gQ2FzZQorICAtIEMgcHJlcHJvY2Vzc29yIHN5bWJvbHMgc2hvdWxkIGJlIGFsbCB1cHBlcmNhc2UuCisgIC0gQWxsIE9wZW5UaHJlYWQgbmFtZXMgaW4gdGhlIEMgbGFuZ3VhZ2Ugc2hhbGwgYmUgaW4gKnNuYWtlIGNhc2UqLgorICAtIEFsbCBPcGVuVGhyZWFkIGNsYXNzLCBuYW1lc3BhY2UsIHN0cnVjdHVyZSwgbWV0aG9kLCBmdW5jdGlvbiwgZW51bWVyYXRpb24sIGFuZCB0eXBlIG5hbWVzIGluIHRoZSBDKysgbGFuZ3VhZ2Ugc2hhbGwgYmUgaW4gKnVwcGVyIGNhbWVsIGNhc2UqLiAgRXhjZXB0aW9uOiB0aGUgdG9wIGxldmVsIE9wZW5UaHJlYWQgbmFtZXNwYWNlICdvdCcuCisgIC0gQWxsIE9wZW5UaHJlYWQgaW5zdGFudGlhdGVkIG5hbWVzIG9mIGluc3RhbmNlcyBvZiBjbGFzc2VzLCBuYW1lc3BhY2VzLCBzdHJ1Y3R1cmVzLCBtZXRob2RzLCBmdW5jdGlvbnMsIGVudW1lcmF0aW9ucywgYW5kIHR5cGVzIGFzIHdlbGwgYXMgbWV0aG9kIGFuZCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGluIHRoZSBDKysgbGFuZ3VhZ2Ugc2hhbGwgYmUgaW4gKmxvd2VyIGNhbWVsIGNhc2UqLgorLSBTeW1ib2wgUXVhbGlmaWNhdGlvbgorICAtIEFsbCBPcGVuVGhyZWFkIEMgcHVibGljIGRhdGEgdHlwZXMgYW5kIGZyZWUgZnVuY3Rpb25zIHNob3VsZCBoYXZlIGBvdGAgcHJlcGVuZGVkIHRvIHRoZWlyIG5hbWUuCisgIC0gQWxsIE9wZW5UaHJlYWQgQysrIGNvZGUgc2hvdWxkIGJlIGluIHRoZSDigJhvdOKAmSB0b3AtbGV2ZWwgbmFtZXNwYWNlLgorLSBTY29wZQorICAtIEFsbCBnbG9iYWwgZGF0YSBzaGFsbCBoYXZlIGEgYGdgIHByZXBlbmRlZCB0byB0aGUgbmFtZSB0byBkZW5vdGUgZ2xvYmFsIHNjb3BlLgorICAtIEFsbCBzdGF0aWMgZGF0YSBzaGFsbCBoYXZlIGEgYHNgIHByZXBlbmRlZCB0byB0aGUgbmFtZSB0byBkZW5vdGUgc3RhdGljIHNjb3BlLgorICAtIEFsbCBjbGFzcyBvciBzdHJ1Y3R1cmUgZGF0YSBtZW1iZXJzIHNoYWxsIGhhdmUgYSBgbWAgcHJlcGVuZGVkIHRvIHRoZSBuYW1lIHRvIGRlbm90ZSBtZW1iZXIgc2NvcGUuCisgIC0gQWxsIGZyZWUgZnVuY3Rpb24gb3IgbWV0aG9kIHBhcmFtZXRlcnMgc2hvdWxkIGhhdmUgYW4gYGFgIHByZXBlbmRlZCB0byB0aGUgbmFtZSB0byBkZW5vdGUgZnVuY3Rpb24gcGFyYW1ldGVyIHNjb3BlLgorICAtIEFsbCB2YXJpYWJsZXMgdGhhdCBkbyBub3QgaGF2ZSBzdWNoIHByZWZpeGVzIHNoYWxsIGJlIGFzc3VtZWQgdG8gYmUgZnVuY3Rpb24gbG9jYWwgc2NvcGUuCisKKyMjIyBXaGl0ZSBTcGFjZQorLSBJbmRlbnRhdGlvbiBzaGFsbCBiZSA0IHNwYWNlIGNoYXJhY3RlcnMuCistIENvbmRpdGlvbmFscyBzaGFsbCBhbHdheXMgYXBwZWFyIG9uIGEgc2VwYXJhdGUgbGluZSBmcm9tIHRoZSBjb2RlIHRvIGV4ZWN1dGUgYXMgYSByZXN1bHQgb2YgdGhlIGNvbmRpdGlvbi4KKy0gU2NvcGVkIFZhcmlhYmxlIGRlY2xhcmF0aW9ucworICAtIEFsbCBzY29wZWQgKGkuZS4gc3RhY2spIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBzaG91bGQgYmUgcGxhY2VkIHRvZ2V0aGVyIGF0IHRoZSB0b3Agb2YgdGhlIGVuY2xvc2luZyBzY29wZSBpbiB3aGljaCB0aGV5IGFyZSB1c2VkLgorICAtIFRoZXJlIHNoYWxsIGJlIGFuIGVtcHR5IGxpbmUgYWZ0ZXIgYWxsIHN1Y2ggdmFyaWFibGUgZGVjbGFyYXRpb25zLgorICAtIFRoZSBuYW1lcyBvZiBhbGwgdmFyaWFibGUgZGVjbGFyYXRpb25zIHNob3VsZCBiZSBsZWZ0IGFsaWduZWQuCistIERhdGEgTWVtYmVyIGRlY2xhcmF0aW9ucworICAtIEFsbCBkYXRhIG1lbWJlciBkZWNsYXJhdGlvbnMgc2hvdWxkIGJlIHBsYWNlZCB0b2dldGhlci4KKyAgLSBUaGUgbmFtZXMgb2YgYWxsIGRhdGEgbWVtYmVyIGRlY2xhcmF0aW9ucyBzaG91bGQgYmUgbGVmdCBhbGlnbmVkLgorICAtIFRoZSBkYXRhIG1lbWJlciBkZWNsYXJhdGlvbnMgZm9yIEMrKyBjbGFzc2VzIHNob3VsZCBiZSBwbGFjZWQgYXQgdGhlIGVuZCBvciB0YWlsIG9mIHRoZSBjbGFzcy4KKy0gQnJhY2VzCisgIC0gQnJhY2VzIHNob3VsZCBnbyBvbiB0aGVpciBvd24gbGluZXMuCisgIC0gU3RhdGVtZW50cyBzaG91bGQgbmV2ZXIgYmUgb24gdGhlIHNhbWUgbGluZSBmb2xsb3dpbmcgYSBjbG9zaW5nIGJyYWNlLgorLSBLZXl3b3JkcworICAtIFRoZXJlIHNob3VsZCBiZSBhIHNpbmdsZSBzcGFjZSBhZnRlciBsYW5ndWFnZS1yZXNlcnZlZCBrZXl3b3JkcyAoZm9yLCB3aGlsZSwgaWYsIGV0YykuCisKKyMjIENvbW1lbnRzCisKKy0gQWxsIGNvZGUgc2hvdWxkIHVzZSBEb3h5Z2VuIHRvOgorICAtIERldGFpbCB3aGF0IHRoZSB2YXJpb3VzIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzIGFyZSBhbmQgaG93IHRoZXkgZml0IGludG8gdGhlIGJyb2FkZXIgY29udGV4dC4KKyAgLSBEZXRhaWwgd2hhdCB0aGUgdmFyaW91cyBDKysgbmFtZXNwYWNlcyBhcmUuCisgIC0gRGV0YWlsIHdoYXQgdGhlIGNvbnN0YW50cywgQyBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMsIGFuZCBlbnVtZXJhdGlvbnMgYXJlLgorICAtIERldGFpbCB3aGF0IHRoZSBnbG9iYWxzIGFyZSBhbmQgaG93IHRoZXkgYXJlIHRvIGJlIHVzZWQuCisgIC0gRGV0YWlsIHdoYXQgdGhlIGZyZWUgZnVuY3Rpb24gYW5kIG9iamVjdCAvIGNsYXNzIG1ldGhvZHMgYXJlIGFuZCBob3cgdGhleSBhcmUgdG8gYmUgdXNlZCwgd2hhdCB0aGVpciBwYXJhbWV0ZXJzIGFyZSwgYW5kIHdoYXQgdGhlaXIgcmV0dXJuIHZhbHVlcyBhcmUuCisgIC0gRGV0YWlsIGFueSBvdGhlciBpbXBvcnRhbnQgdGVjaG5pY2FsIGluZm9ybWF0aW9uIG9yIHRoZW9yeSBvZiBvcGVyYXRpb24gdW5pcXVlIGFuZCByZWxldmFudCB0byB0aGUgc3RhY2sgdGhhdCBpcyBub3Qgb3RoZXJ3aXNlIGNhcHR1cmVkIGluIGFyY2hpdGVjdHVyZSwgZGVzaWduLCBvciBwcm90b2NvbCBkb2N1bWVudGF0aW9uLgorLSBFdmVyeSBwdWJsaWMsIGFuZCBpZGVhbGx5IHByaXZhdGUsIGZyZWUgZnVuY3Rpb24gYW5kIGNsYXNzIG1ldGhvZCBzaG91bGQgbGlrZXdpc2UgaGF2ZSBhIHByb2xvZ3VlIGNvbW1lbnQgdGhhdDoKKyAgLSBCcmllZmx5IGRlc2NyaWJlcyB3aGF0IGl0IGlzIGFuZCB3aGF0IGl0IGRvZXMuCisgIC0gRGVzY3JpYmVzIGluIGRldGFpbCwgb3B0aW9uYWxseSwgd2hhdCBpdCBpcyBhbmQgd2hhdCBpdCBkb2VzLgorICAtIERlc2NyaWJlcyB0aGUgcHVycG9zZSwgZnVuY3Rpb24sIGFuZCBpbmZsdWVuY2Ugb2YgZWFjaCBwYXJhbWV0ZXIgYXMgd2VsbCBhcyB3aGV0aGVyIGl0IGlzIGFuIGlucHV0LCBhbiBvdXRwdXQsIG9yIGJvdGguCisgIC0gRGVzY3JpYmVzIHRoZSByZXR1cm4gdmFsdWUsIGlmIHByZXNlbnQsIGFuZCB0aGUgZXhwZWN0ZWQgcmFuZ2Ugb3IgY29uc3RyYWludHMgb2YgaXQuCisKKyMgUHl0aG9uCisKKyMjIFN0YW5kYXJkcworCistIE9wZW5UaHJlYWQgdXNlcyBhbmQgZW5mb3JlcyBib3RoIFB5dGhvbiAyIGFuZCBQeXRob24gMy4gIFN1cHBvcnQgZm9yIFB5dGhvbiAyIGlzIGEgcmVzdWx0IG9mIHRoZSBmYWN0IHRoYXQgc29tZSBjdXJyZW50IExpbnV4IGRpc3RyaWJ1dGlvbnMgYW5kIE1hY3MgYXJlIHN0aWxsIHVzaW5nIDIueCBhcyBkZWZhdWx0LgorCisjIyBDb252ZW50aW9ucyBhbmQgQmVzdCBQcmFjdGljZXMKKworLSBSdW4gYHB5bGludGAgb3ZlciB5b3VyIGNvZGUuICBgcHlsaW50YCBpcyBhIHRvb2wgZm9yIGZpbmRpbmcgYnVncyBhbmQgc3R5bGUgcHJvYmxlbXMgaW4gUHl0aG9uIHNvdXJjZSBjb2RlLiBJdCBmaW5kcyBwcm9ibGVtcyB0aGF0IGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IGEgY29tcGlsZXIgZm9yIGxlc3MgZHluYW1pYyBsYW5ndWFnZXMgbGlrZSBDIGFuZCBDKysuIEJlY2F1c2Ugb2YgdGhlIGR5bmFtaWMgbmF0dXJlIG9mIFB5dGhvbiwgc29tZSB3YXJuaW5ncyBtYXkgYmUgaW5jb3JyZWN0OyBob3dldmVyLCBzcHVyaW91cyB3YXJuaW5ncyBzaG91bGQgYmUgZmFpcmx5IGluZnJlcXVlbnQuCisKKyMjIEZvcm1hdCBhbmQgU3R5bGUKKworLSBBbGwgY29kZSBzaG91bGQgYWRoZXJlIHRvIFtQRVAgOF0oaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDAwOC8pLgpkaWZmIC0tZ2l0IGEvYm9vdHN0cmFwIGIvYm9vdHN0cmFwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2ZjhlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9ib290c3RyYXAKQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyBhIHRyYW1wb2xpbmUgc2NyaXB0IHRvIHRoZSBubGJ1aWxkLWF1dG90b29scworIyAgICAgIGJvb3RzdHJhcCBzY3JpcHQgYW5kIGF1Z21lbnRzIGl0IGJ5IHByb3ZpZGluZyB0aGUgcGF0aCB0byB0aGUKKyMgICAgICBubGJ1aWxkLWF1dG90b29scyByZXBvc2l0b3J5IGZvciB0aGlzIHByb2plY3QuCisjCisKKyMgU2V0IHRoaXMgdG8gdGhlIHJlbGF0aXZlIGxvY2F0aW9uIG9mIG5sYnVpbGQtYXV0b3Rvb2xzIHRvIHRoaXMgc2NyaXB0CisKK25sYnVpbGRfYXV0b3Rvb2xzX3N0ZW09InRoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8iCisKKyMgRXN0YWJsaXNoIHNvbWUga2V5IGRpcmVjdG9yaWVzCisKK3NyY2Rpcj1gZGlybmFtZSAkezB9YAorYWJzX3NyY2Rpcj1gcHdkYAorYWJzX3RvcF9zcmNkaXI9IiR7YWJzX3NyY2Rpcn0iCisKK2V4ZWMgJHtzcmNkaXJ9LyR7bmxidWlsZF9hdXRvdG9vbHNfc3RlbX0vc2NyaXB0cy9ib290c3RyYXAgLUkgIiR7YWJzX3RvcF9zcmNkaXJ9LyR7bmxidWlsZF9hdXRvdG9vbHNfc3RlbX0iICQqCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0M2EyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMCwwICsxLDE0MzggQEAKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKworIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisjCisjIERlY2xhcmUgYXV0b2NvbmYgdmVyc2lvbiByZXF1aXJlbWVudHMKKyMKK0FDX1BSRVJFUShbMi42OF0pCisKKyMKKyMgSW5pdGlhbGl6ZSBhdXRvY29uZiBmb3IgdGhlIHBhY2thZ2UKKyMKK0FDX0lOSVQoW09QRU5USFJFQURdLAorICAgICAgICBtNF9lc3lzY21kKFt0aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3NjcmlwdHMvbWt2ZXJzaW9uIC1iIGBjYXQgLmRlZmF1bHQtdmVyc2lvbmAgLl0pLAorICAgICAgICBbb3BlbnRocmVhZC1kZXZlbEBnb29nbGVncm91cHMuY29tXSwKKyAgICAgICAgW29wZW50aHJlYWRdLAorICAgICAgICBbaHR0cDovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkXSkKKworIyBUZWxsIHRoZSByZXN0IG9mIHRoZSBidWlsZCBzeXN0ZW0gdGhlIGFic29sdXRlIHBhdGggd2hlcmUgdGhlCisjIG5sYnVpbGQtYXV0b3Rvb2xzIHJlcG9zaXRvcnkgaXMgcm9vdGVkIGF0LgorCitBQ19TVUJTVChubGJ1aWxkX2F1dG90b29sc19zdGVtLFt0aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvXSkKK0FDX1NVQlNUKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyLFtcJHthYnNfdG9wX3NyY2Rpcn0vXCR7bmxidWlsZF9hdXRvdG9vbHNfc3RlbX1dKQorCisjCisjIE9QRU5USFJFQUQgaW50ZXJmYWNlIGN1cnJlbnQsIHJldmlzaW9uLCBhbmQgYWdlIHZlcnNpb25zLgorIworIyBNYWludGFpbnRlcnM6IFBsZWFzZSBtYW5hZ2UgdGhlc2UgZmllbGRzIGFzIGZvbGxvd3M6CisjCisjICAgSW50ZXJmYWNlcyByZW1vdmVkOiAgICBDVVJSRU5UKyssIEFHRSA9IDAsIFJFVklTSU9OID0gMAorIyAgIEludGVyZmFjZXMgYWRkZWQ6ICAgICAgQ1VSUkVOVCsrLCBBR0UrKywgICBSRVZJU0lPTiA9IDAKKyMgICBObyBpbnRlcmZhY2VzIGNoYW5nZWQ6ICAgICAgICAgICAgICAgICAgICAgUkVWSVNJT04rKworIworIworQUNfU1VCU1QoTElCT1BFTlRIUkVBRF9WRVJTSU9OX0NVUlJFTlQsICBbMF0pCitBQ19TVUJTVChMSUJPUEVOVEhSRUFEX1ZFUlNJT05fQUdFLCAgICAgIFs1XSkKK0FDX1NVQlNUKExJQk9QRU5USFJFQURfVkVSU0lPTl9SRVZJU0lPTiwgWzBdKQorQUNfU1VCU1QoTElCT1BFTlRIUkVBRF9WRVJTSU9OX0lORk8sICAgICBbJHtMSUJPUEVOVEhSRUFEX1ZFUlNJT05fQ1VSUkVOVH06JHtMSUJPUEVOVEhSRUFEX1ZFUlNJT05fUkVWSVNJT059OiR7TElCT1BFTlRIUkVBRF9WRVJTSU9OX0FHRX1dKQorCisjCisjIENoZWNrIHRoZSBzYW5pdHkgb2YgdGhlIHNvdXJjZSBkaXJlY3RvcnkgYnkgY2hlY2tpbmcgZm9yIHRoZQorIyBwcmVzZW5jZSBvZiBhIGtleSB3YXRjaCBmaWxlCisjCitBQ19DT05GSUdfU1JDRElSKFtpbmNsdWRlL29wZW50aHJlYWQvb3BlbnRocmVhZC5oXSkKKworIworIyBUZWxsIGF1dG9jb25mIHdoZXJlIHRvIGZpbmQgYXV4aWxsaWFyeSBidWlsZCB0b29scyAoZS5nLiBjb25maWcuZ3Vlc3MsCisjIGluc3RhbGwtc2gsIG1pc3NpbmcsIGV0Yy4pCisjCitBQ19DT05GSUdfQVVYX0RJUihbdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZl0pCisKKyMKKyMgVGVsbCBhdXRvY29uZiB3aGVyZSB0byBmaW5kIGF1eGlsbGlhcnkgTTQgbWFjcm9zCisjCitBQ19DT05GSUdfTUFDUk9fRElSKFt0aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200XSkKKworIworIyBUZWxsIGF1dG9jb25mIHdoYXQgZmlsZSB0aGUgcGFja2FnZSBpcyB1c2luZyB0byBhZ2dyZWdhdGUgQyBwcmVwcm9jZXNzb3IKKyMgZGVmaW5lcy4KKyMKK0FDX0NPTkZJR19IRUFERVJTKFtpbmNsdWRlL29wZW50aHJlYWQtY29uZmlnLWdlbmVyaWMuaF0pCisKKyMKKyMgRmlndXJlIG91dCB3aGF0IHRoZSBjYW5vbmljYWwgYnVpbGQgYW5kIGhvc3QgdHVwbGVzIGFyZS4KKyMKK0FDX0NBTk9OSUNBTF9CVUlMRAorQUNfQ0FOT05JQ0FMX0hPU1QKKworIworIyBNYWMgT1MgWCAvIERhcndpbiBlbmRzIHVwIHB1dHRpbmcgc29tZSB2ZXJzaW9uaW5nIGNydWZ0IG9uIHRoZSBlbmQgb2YgaXRzCisjIHR1cGxlIHRoYXQgd2UgZG9uJ3QgY2FyZSBhYm91dCBpbiB0aGlzIHNjcmlwdC4gQ3JlYXRlICJjbGVhbiIgdmFyaWFibGVzCisjIGRldm9pZCBvZiBpdC4KKyMKKworTkxfRklMVEVSRURfQ0FOT05JQ0FMX0JVSUxECitOTF9GSUxURVJFRF9DQU5PTklDQUxfSE9TVAorCisjCisjIENvbmZpZ3VyZSBhdXRvbWFrZSB3aXRoIHRoZSBkZXNpcmVkIG9wdGlvbnMsIGluZGljYXRpbmcgdGhhdCB0aGlzIGlzIG5vdAorIyBhIG5hdGl2ZSBHTlUgcGFja2FnZSwgdGhhdCB3ZSB3YW50ICJzaWxlbnQiIGJ1aWxkIHJ1bGVzLCBhbmQgdGhhdCB3ZSB3YW50CisjIG9iamVjdHMgYnVpbHQgaW4gdGhlIHNhbWUgc3ViZGlyZWN0b3J5IGFzIHRoZWlyIHNvdXJjZSByYXRoZXIgdGhhbiBjb2xsYXBzZWQKKyMgdG9nZXRoZXIgYXQgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisjCisjIERpc2FibGUgc2lsZW50IGJ1aWxkIHJ1bGVzIGJ5IGVpdGhlciBwYXNzaW5nIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgdG8KKyMgY29uZmlndXJlIG9yIHBhc3NpbmcgVj0xIHRvIG1ha2UKKyMKK0FNX0lOSVRfQVVUT01BS0UoWzEuMTQgZm9yZWlnbiBzaWxlbnQtcnVsZXMgc3ViZGlyLW9iamVjdHMgdGFyLXBheF0pCisKKyMKKyMgU2lsZW50IGJ1aWxkIHJ1bGVzIHJlcXVpcmVzIGF0IGxlYXN0IGF1dG9tYWtlLTEuMTEuIEVtcGxveQorIyB0ZWNobmlxdWVzIGZvciBub3QgYnJlYWtpbmcgZWFybGllciB2ZXJzaW9ucyBvZiBhdXRvbWFrZS4KKyMKK200X2lmZGVmKFtBTV9TSUxFTlRfUlVMRVNdLCBbQU1fU0lMRU5UX1JVTEVTKFt5ZXNdKV0pCitBTV9TSUxFTlRfUlVMRVMoW3llc10pCisKKyMKKyMgRW5hYmxlIG1haW50YWluZXIgbW9kZSB0byBwcmV2ZW50IHRoZSBwYWNrYWdlIGZyb20gY29uc3RhbnRseSB0cnlpbmcKKyMgdG8gcmVidWlsZCBjb25maWd1cmUsIE1ha2VmaWxlLmluLCBldGMuIFJlYnVpbGRpbmcgc3VjaCBmaWxlcyByYXJlbHksCisjIGlmIGV2ZXIsIG5lZWRzIHRvIGJlIGRvbmUgImluIHRoZSBmaWVsZCIuCisjCisjIFVzZSB0aGUgaW5jbHVkZWQgJ2Jvb3RzdHJhcCcgc2NyaXB0IGluc3RlYWQgd2hlbiBuZWNlc3NhcnkuCisjCitBTV9NQUlOVEFJTkVSX01PREUKKworIworIyBIb3N0LW9zLXNwZWNpZmljIGNoZWNrcworIworCitjYXNlICR7aG9zdF9vc30gaW4KKworICAgICpkYXJ3aW4qKQorICAgICAgICBPUEVOVEhSRUFEX1RBUkdFVD1kYXJ3aW4KKyAgICAgICAgT1BFTlRIUkVBRF9UQVJHRVRfREVGSU5FUz0iLURPUEVOVEhSRUFEX1RBUkdFVF9EQVJXSU4iCisgICAgICAgIDs7CisKKyAgICAqbGludXgqKQorICAgICAgICBPUEVOVEhSRUFEX1RBUkdFVD1saW51eAorICAgICAgICBPUEVOVEhSRUFEX1RBUkdFVF9ERUZJTkVTPSItRE9QRU5USFJFQURfVEFSR0VUX0xJTlVYIgorICAgICAgICA7OworCitlc2FjCisKK0FDX1NVQlNUKE9QRU5USFJFQURfVEFSR0VUX0RBUldJTikKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX1RBUkdFVF9EQVJXSU5dLCBbdGVzdCAiJHtPUEVOVEhSRUFEX1RBUkdFVH0iID0gImRhcndpbiJdKQorCitBQ19TVUJTVChPUEVOVEhSRUFEX1RBUkdFVF9MSU5VWCkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX1RBUkdFVF9MSU5VWF0sIFt0ZXN0ICIke09QRU5USFJFQURfVEFSR0VUfSIgPSAibGludXgiXSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9UQVJHRVRfREVGSU5FUykKKworIworIyBDaGVja3MgZm9yIGJ1aWxkIGhvc3QgcHJvZ3JhbXMKKyMKKworIyBUaGlzIGlzIGEgaGFjayB0byByZXN0b3JlIHNvbWUgb2xkIGJyb2tlbiBiZWhhdmlvciB0aGF0IHdhcworIyByZW1vdmVkIGluIHB1bGwgcmVxdWVzdCAjMTUyNy4gSXQncyB1c2UgaXMgaGlnaGx5IGRpc2NvdXJhZ2VkLAorIyB5b3Ugc2hvdWxkIHRyeSB0byBmaXggeW91ciBidWlsZCBlbnZpcm9ubWVudCBpbnN0ZWFkLgorQUNfQVJHX0VOQUJMRShuby1leGVjdXRhYmxlcy1oYWNrLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbm8tZXhlY3V0YWJsZXMtaGFja10sCisgICAgICAgIFtFbmFibGUgaGFjayB0aGF0IHByZXZlbnRzIGxpbmsgY2hlY2tzIGF0IGNvbmZpZ3VyZSB0aW1lLiBIaWdobHkgZGlzY291cmFnZWQuXSldKQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGRpc2FibGUgZXhlY3V0YWJsZSBjaGVja2luZ10pCitpZiB0ZXN0ICIke2VuYWJsZV9ub19leGVjdXRhYmxlc19oYWNrfSIgPSAieWVzIgordGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfTk9fRVhFQ1VUQUJMRVMKKyAgICAjIEhlcmUgd2UgZ3Vlc3MgY29uc2VydmF0aXZlIHZhbHVlcyBmb3IgdGVzdHMgdGhhdCByZXF1aXJlIGxpbmsgY2hlY2tzCisgICAgIyB0byB0ZXN0IGZvciB0aGVzZSBmZWF0dXJlcy4gVGhpcyB3aWxsIHByZXZlbnQgdGhlc2UgY2hlY2tzIGZyb20KKyAgICAjIGJlaW5nIHBlcmZvcm1lZCBsYXRlciBpbiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgorICAgIGFjX2N2X2Z1bmNfc3RybGNhdD0ke2FjX2N2X2Z1bmNfc3RybGNhdC1ub30KKyAgICBhY19jdl9mdW5jX3N0cmxjcHk9JHthY19jdl9mdW5jX3N0cmxjcHktbm99CisgICAgYWNfY3ZfZnVuY19zdHJubGVuPSR7YWNfY3ZfZnVuY19zdHJubGVuLW5vfQorZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKK2ZpCisKKyMgUGFzc2luZyAtV2Vycm9yIHRvIEdDQy1iYXNlZCBvciAtY29tcGF0aWJsZSBjb21waWxlcnMgYnJlYWtzIHNvbWUKKyMgYXV0b2NvbmYgdGVzdHMgKHNlZQorIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b2NvbmYtcGF0Y2hlcy8yMDA4LTA5L21zZzAwMDE0Lmh0bWwpLgorIworIyBJZiAtV2Vycm9yIGhhcyBiZWVuIHBhc3NlZCB0cmFuc2Zvcm0gaXQgaW50byAtV25vLWVycm9yLiBXZSdsbAorIyB0cmFuc2Zvcm0gaXQgYmFjayBsYXRlciB3aXRoIE5MX1JFU1RPUkVfV0VSUk9SLgorCitOTF9TQVZFX1dFUlJPUgorCisjIENoZWNrIGZvciBjb21waWxlcnMuCisjCisjIFRoZXNlIHNob3VsZCBiZSBjaGVja2VkIEJFRk9SRSB3ZSBjaGVjayBmb3IgYW5kLCBpbXBsaWNpdGx5LAorIyBpbml0aWFsaXplIGxpYnRvb2wgc3VjaCB0aGF0IGxpYnRvb2wga25vd3Mgd2hhdCBsYW5ndWFnZXMgaXQgaGFzIHRvCisjIHdvcmsgd2l0aC4KKworQUNfUFJPR19DUFAKK0FDX1BST0dfQ1BQX1dFUlJPUgorCitBQ19QUk9HX0NDCitBQ19QUk9HX0NDX0NfTworCitBQ19QUk9HX0NYWENQUAorCitBQ19QUk9HX0NYWAorQUNfUFJPR19DWFhfQ19PCisKK0FNX1BST0dfQVMKKworIyBDaGVjayBmb3Igb3RoZXIgY29tcGlsZXIgdG9vbGNoYWluIHRvb2xzLgorCitBQ19DSEVDS19UT09MKEFSLCBhcikKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIpCitBQ19DSEVDS19UT09MKE9CSkNPUFksIG9iamNvcHkpCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCkKKworIyBDaGVjayBmb3Igb3RoZXIgaG9zdCB0b29scy4KKworQUNfUFJPR19JTlNUQUxMCitBQ19QUk9HX0xOX1MKKworQUNfUEFUSF9QUk9HKENNUCwgY21wKQorCisjCisjIENoZWNrcyBmb3Igc3BlY2lmaWMgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCisjCisKKyMKKyMgQ29tbW9uIGNvbXBpbGVyIGZsYWdzIHdlIHdvdWxkIGxpa2UgdG8gaGF2ZS4KKyMKKyMgICAtV2FsbCAgICAgICAgICAgICAgICAgICAgICAgIENDLCBDWFgKKyMKKworUFJPU1BFQ1RJVkVfQ0ZMQUdTPSItV2FsbCAtV2V4dHJhIC1Xc2hhZG93IC1XZXJyb3IgLXN0ZD1jOTkgLXBlZGFudGljLWVycm9ycyIKK1BST1NQRUNUSVZFX0NYWEZMQUdTPSItV2FsbCAtV2V4dHJhIC1Xc2hhZG93IC1XZXJyb3IgLXN0ZD1nbnUrKzk4IC1Xbm8tYysrMTQtY29tcGF0IgorCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkQ0MgaXMgQ2xhbmddLAorICAgIFtubF9jdl9jbGFuZ10sCisgICAgW25sX2N2X2NsYW5nPW5vCisgICAgaWYgdGVzdCAieCR7R0NDfSIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgQUNfRUdSRVBfQ1BQKFtOTF9DQ19JU19DTEFOR10sCisgICAgICAgICAgICBbLyogTm90ZTogQ2xhbmcgMi43IGxhY2tzIF9fY2xhbmdfW2Etel0rX18gKi8KKyMgICAgICAgICAgICBpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgZGVmaW5lZChfX2xsdm1fXykKKyAgICAgICAgICAgICBOTF9DQ19JU19DTEFORworIyAgICAgICAgICAgIGVuZGlmCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgW25sX2N2X2NsYW5nPXllc10pCisgICAgZmkKKyAgICBdKQorCitpZiB0ZXN0ICIke25sX2N2X2NsYW5nfSIgPSAieWVzIjsgdGhlbgorICAgIFBST1NQRUNUSVZFX0NGTEFHUz0iJHtQUk9TUEVDVElWRV9DRkxBR1N9IC1XY29udmVyc2lvbiIKKyAgICBQUk9TUEVDVElWRV9DWFhGTEFHUz0iJHtQUk9TUEVDVElWRV9DWFhGTEFHU30gLVdjb252ZXJzaW9uIgorZmkKKworQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OUyhbQ10sICAgJHtQUk9TUEVDVElWRV9DRkxBR1N9KQorQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OUyhbQysrXSwgJHtQUk9TUEVDVElWRV9DWFhGTEFHU30pCisKKyMgQ2hlY2sgZm9yIGFuZCBpbml0aWFsaXplIGxpYnRvb2wKKworTFRfSU5JVAorQUNfUFJPR19MSUJUT09MCisKKyMgRGlzYWJsZSBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzIGJ5IGRlZmF1bHQgKGNhbiBiZSBlbmFibGVkIHdpdGggLS1lbmFibGUtc2hhcmVkKQorCitBQ19ESVNBQkxFX1NIQVJFRAorCisjCisjIERlYnVnIGluc3RhbmNlcworIworQUNfTVNHX05PVElDRShbY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBkZWJ1ZyBpbnN0YW5jZXNdKQorCisjIERlYnVnCisKK05MX0VOQUJMRV9ERUJVRyhbbm9dKQorCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9CVUlMRF9ERUJVR10sIFt0ZXN0ICIke25sX2N2X2J1aWxkX2RlYnVnfSIgPSAieWVzIl0pCisKKyMKKyMgQ29kZSBjb3ZlcmFnZSBhbmQgY29tcGlsZXIgb3B0aW1pemF0aW9uCisjCisKKyMgQ292ZXJhZ2UKKworTkxfRU5BQkxFX0NPVkVSQUdFKFtub10pCisKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFXSwgW3Rlc3QgIiR7bmxfY3ZfYnVpbGRfY292ZXJhZ2V9IiA9ICJ5ZXMiXSkKKworTkxfRU5BQkxFX0NPVkVSQUdFX1JFUE9SVFMoW2F1dG9dKQorCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRV9SRVBPUlRTXSwgW3Rlc3QgIiR7bmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0c30iID0gInllcyJdKQorCisjIE9wdGltaXphdGlvbgorCitOTF9FTkFCTEVfT1BUSU1JWkFUSU9OKFt5ZXNdKQorCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9CVUlMRF9PUFRJTUlaRURdLCBbdGVzdCAiJHtubF9jdl9idWlsZF9vcHRpbWl6ZWR9IiA9ICJ5ZXMiXSkKKworIyBBZGRyZXNzIFNhbml0aXplcgorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgd2l0aCBBZGRyZXNzIFNhbml0aXplciBzdXBwb3J0XSkKK0FDX0FSR19FTkFCTEUoYWRkcmVzcy1zYW5pdGl6ZXIsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hZGRyZXNzLXNhbml0aXplcl0sW0VuYWJsZSBBZGRyZXNzIFNhbml0aXplciBzdXBwb3J0IEA8OkBkZWZhdWx0PW5vQDo+QC5dKV0sCisgICAgWworICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisKKyAgICAgICAgbm98eWVzKQorICAgICAgICAgICAgZW5hYmxlX2FkZHJlc3Nfc2FuaXRpemVyPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtYWRkcmVzcy1zYW5pdGl6ZXJdKQorICAgICAgICAgICAgOzsKKworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbZW5hYmxlX2FkZHJlc3Nfc2FuaXRpemVyPW5vXSkKK0FDX01TR19SRVNVTFQoJHtlbmFibGVfYWRkcmVzc19zYW5pdGl6ZXJ9KQorCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9XSVRIX0FERFJFU1NfU0FOSVRJWkVSXSwgW3Rlc3QgIiR7ZW5hYmxlX2FkZHJlc3Nfc2FuaXRpemVyfSIgPSAieWVzIl0pCisKK2lmIHRlc3QgIiR7ZW5hYmxlX2FkZHJlc3Nfc2FuaXRpemVyfSIgPSAieWVzIiA7IHRoZW4KKworICAgIFBST1NQRUNUSVZFX0NGTEFHUz0iLWZzYW5pdGl6ZT1hZGRyZXNzIgorCisgICAgIyBDaGVjayBpZiB0aGUgY29tcGlsZXJzIHN1cHBvcnQgYWRkcmVzcyBzYW5pdGl6ZXIKKyAgICBBWF9DSEVDS19DT01QSUxFUl9PUFRJT05TKFtDXSwgICAke1BST1NQRUNUSVZFX0NGTEFHU30pCisgICAgQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OUyhbQysrXSwgJHtQUk9TUEVDVElWRV9DRkxBR1N9KQorCitmaQorCisjCisjIENvZGUgc3R5bGUKKyMKKworQUNfU1VCU1QoUFJFVFRZLCBbIlwke2Fic190b3Bfc3JjZGlyfS8uYXN0eWxlL2FzdHlsZS13cmFwLnNoIl0pCitBQ19TVUJTVChQUkVUVFlfQVJHUywgWyJhc3R5bGUgLS1vcHRpb25zPVwke2Fic190b3Bfc3JjZGlyfS8uYXN0eWxlL2FzdHlsZS1vcHRzIl0pCitBQ19TVUJTVChQUkVUVFlfQ0hFQ0ssIFsiXCR7YWJzX3RvcF9zcmNkaXJ9Ly5hc3R5bGUvYXN0eWxlLXdyYXAuc2giXSkKK0FDX1NVQlNUKFBSRVRUWV9DSEVDS19BUkdTLCBbImFzdHlsZSAtLW9wdGlvbnM9XCR7YWJzX3RvcF9zcmNkaXJ9Ly5hc3R5bGUvYXN0eWxlLW9wdHMgLS1kcnktcnVuIl0pCisKKyMKKyMgVGVzdHMKKyMKK0FDX01TR19OT1RJQ0UoW2NoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgdGVzdHNdKQorCisjIFRlc3RzCisKK05MX0VOQUJMRV9URVNUUyhbeWVzXSkKKworQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfQlVJTERfVEVTVFNdLCBbdGVzdCAiJHtubF9jdl9idWlsZF90ZXN0c30iID0gInllcyJdKQorCisjCisjIENMSSBMaWJyYXJ5CisjCitBQ19BUkdfRU5BQkxFKGNsaS1hcHAsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jbGktYXBwXSxbRW5hYmxlIENMSSBzdXBwb3J0IChub3xtdGR8ZnRkfGFsbCkgQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgYWxsfGJvdGgpCisgICAgICAgICAgICBlbmFibGVfY2xpX2FwcD15ZXMKKyAgICAgICAgICAgIGVuYWJsZV9jbGlfYXBwX210ZD15ZXMKKyAgICAgICAgICAgIGVuYWJsZV9jbGlfYXBwX2Z0ZD15ZXMKKyAgICAgICAgICAgIDs7CisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9jbGlfYXBwPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgZW5hYmxlX2NsaV9hcHBfbXRkPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgZW5hYmxlX2NsaV9hcHBfZnRkPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKyAgICAgICAgbXRkKQorICAgICAgICAgICAgZW5hYmxlX2NsaV9hcHA9eWVzCisgICAgICAgICAgICBlbmFibGVfY2xpX2FwcF9tdGQ9eWVzCisgICAgICAgICAgICBlbmFibGVfY2xpX2FwcF9mdGQ9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgIGZ0ZCkKKyAgICAgICAgICAgIGVuYWJsZV9jbGlfYXBwPXllcworICAgICAgICAgICAgZW5hYmxlX2NsaV9hcHBfbXRkPW5vCisgICAgICAgICAgICBlbmFibGVfY2xpX2FwcF9mdGQ9eWVzCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtY2xpLWFwcF0pCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbCisgICAgIGVuYWJsZV9jbGlfYXBwPW5vCisgICAgIGVuYWJsZV9jbGlfYXBwX210ZD1ubworICAgICBlbmFibGVfY2xpX2FwcF9mdGQ9bm9dKQorCisKK0FDX01TR19DSEVDS0lORyhbY2xpLWFwcCBtb2Rlc10pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX2NsaV9hcHB9KQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX0NMSV0sICAgICBbdGVzdCAiJHtlbmFibGVfY2xpX2FwcH0iID09ICJ5ZXMiXSkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9DTElfTVREXSwgW3Rlc3QgIiR7ZW5hYmxlX2NsaV9hcHBfbXRkfSIgPT0gInllcyJdKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX0NMSV9GVERdLCBbdGVzdCAiJHtlbmFibGVfY2xpX2FwcF9mdGR9IiA9PSAieWVzIl0pCitBQ19TVUJTVChPUEVOVEhSRUFEX0VOQUJMRV9DTEkpCitBQ19TVUJTVChPUEVOVEhSRUFEX0VOQUJMRV9DTElfRlREKQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfQ0xJX01URCkKKworCisjCisjIE5DUCBhcHAKKyMKK0FDX0FSR19FTkFCTEUobmNwLWFwcCwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5jcC1hcHBdLFtFbmFibGUgTkNQIHN1cHBvcnQgKG5vfG10ZHxmdGR8YWxsKSBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgIyBNYXAgYWxsICYgYm90aCB0byB5ZXMKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICBhbGx8Ym90aCkKKyAgICAgICAgICAgIGVuYWJsZXZhbD15ZXMKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBlbmFibGVfbmNwX2FwcD0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIGVuYWJsZV9uY3BfYXBwX210ZD0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIGVuYWJsZV9uY3BfYXBwX2Z0ZD0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgbXRkKQorICAgICAgICAgICAgZW5hYmxlX25jcF9hcHA9eWVzCisgICAgICAgICAgICBlbmFibGVfbmNwX2FwcF9tdGQ9eWVzCisgICAgICAgICAgICBlbmFibGVfbmNwX2FwcF9mdGQ9bm8KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgZnRkKQorICAgICAgICAgICAgZW5hYmxlX25jcF9hcHA9eWVzCisgICAgICAgICAgICBlbmFibGVfbmNwX2FwcF9tdGQ9bm8KKyAgICAgICAgICAgIGVuYWJsZV9uY3BfYXBwX2Z0ZD15ZXMKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLW5jcC1hcHBdKQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIF0sCisgICAgWworICAgICBlbmFibGVfbmNwX2FwcD1ubworICAgICBlbmFibGVfbmNwX2FwcF9mdGQ9bm8KKyAgICAgZW5hYmxlX25jcF9hcHBfbXRkPW5vCisgICAgXQorICAgICkKKworCitBQ19NU0dfQ0hFQ0tJTkcoW25jcC1hcHAgbW9kZXNdKQorQUNfTVNHX1JFU1VMVCgke2VuYWJsZV9uY3BfYXBwfSkKK0FDX01TR19DSEVDS0lORyhbc2hvdWxkIE5DUCBzdXBwb3J0IGZ0ZF0pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX25jcF9hcHBfZnRkfSkKK0FDX01TR19DSEVDS0lORyhbc2hvdWxkIE5DUCBzdXBwb3J0IG10ZF0pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX25jcF9hcHBfbXRkfSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfTkNQKQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfTkNQX01URCkKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX05DUF9GVEQpCisKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9OQ1BdLCAgICAgIFt0ZXN0ICIke2VuYWJsZV9uY3BfYXBwfSIgPT0gInllcyJdKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX05DUF9NVERdLCAgW3Rlc3QgIiR7ZW5hYmxlX25jcF9hcHBfbXRkfSIgPT0gInllcyJdKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX05DUF9GVERdLCAgW3Rlc3QgIiR7ZW5hYmxlX25jcF9hcHBfZnRkfSIgPT0gInllcyJdKQorCisjCisjIE5DUCBCVVMgLSBob3cgZG9lcyB0aGUgTkNQIHRhbGsgdG8gdGhlIGhvc3Q/CisjCisKK0FDX0FSR19XSVRIKAorICAgIFtuY3AtYnVzXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1uY3AtYnVzXSxbU3BlY2lmeSB0aGUgTkNQIGJ1cyAobm9uZXxzcGl8dWFydCkgQDw6QGRlZmF1bHQ9bm9uZUA6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHt3aXRoX25jcF9idXN9IiBpbgorICAgICAgICAibm9uZSIpCisgICAgICAgICAgICBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfU1BJPTAKKyAgICAgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9VQVJUPTAKKyAgICAgICAgICAgIDs7CisgICAgICAgICJzcGkiKQorICAgICAgICAgICAgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQST0xCisgICAgICAgICAgICBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfVUFSVD0wCisgICAgICAgICAgICA7OworICAgICAgICAidWFydCIpCisgICAgICAgICAgICBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfU1BJPTAKKyAgICAgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9VQVJUPTEKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW3VuZXhwZWN0ZWQgLS13aXRoLW5jcC1idXM9JHt3aXRoX25jcF9idXN9XSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFsKKyAgICAgICBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfU1BJPTAKKyAgICAgICBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfVUFSVD0wCisgICAgXSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQSSkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfU1BJXSwgIFt0ZXN0ICIke3dpdGhfbmNwX2J1c30iICA9ICJzcGkiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQSV0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQSX1dLFtEZWZpbmUgdG8gMSB0byBlbmFibGUgdGhlIE5DUCBTUEkgaW50ZXJmYWNlLl0pCitBQ19NU0dfQ0hFQ0tJTkcoW3Nob3VsZCBOQ1Agc3VwcG9ydCBTUEldKQorQUNfTVNHX1JFU1VMVChbJHtPUEVOVEhSRUFEX0VOQUJMRV9TUEl9XSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlRdLCBbdGVzdCAiJHt3aXRoX25jcF9idXN9IiAgPSAidWFydCJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfVUFSVF0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlR9XSxbRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBOQ1AgVUFSVCBpbnRlcmZhY2UuXSkKK0FDX01TR19DSEVDS0lORyhbc291bGQgTkNQIHN1cHBvcnQgVUFSVF0pCitBQ19NU0dfUkVTVUxUKFske09QRU5USFJFQURfRU5BQkxFX1VBUlR9XSkKKworIworIyBNdWx0aXBsZSBPcGVuVGhyZWFkIEluc3RhbmNlcworIworCitBQ19BUkdfRU5BQkxFKG11bHRpcGxlLWluc3RhbmNlcywKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW11bHRpcGxlLWluc3RhbmNlc10sW0VuYWJsZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBPcGVuVGhyZWFkIGluc3RhbmNlcyBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9tdWx0aXBsZV9pbnN0YW5jZXM9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfbXVsdGlwbGVfaW5zdGFuY2VzfSBmb3IgLS1lbmFibGUtbXVsdGlwbGUtaW5zdGFuY2VzXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfbXVsdGlwbGVfaW5zdGFuY2VzPW5vXSkKKworaWYgdGVzdCAiJGVuYWJsZV9tdWx0aXBsZV9pbnN0YW5jZXMiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVM9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUz0wCitmaQorCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX211bHRpcGxlX2luc3RhbmNlc30pCitBQ19TVUJTVChPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTXSwgW3Rlc3QgIiR7ZW5hYmxlX211bHRpcGxlX2luc3RhbmNlc30iID0gInllcyJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVNdLFske09QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFU31dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgT3BlblRocmVhZCBpbnN0YW5jZXMuXSkKKworIworIyBCdWlsdGluIG1iZWR0bHMKKyMKKworQUNfQVJHX0VOQUJMRShidWlsdGluLW1iZWR0bHMsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1idWlsdGluLW1iZWR0bHNdLFtFbmFibGUgYnVpbHRpbiBtYmVkdGxzIEA8OkBkZWZhdWx0PXllc0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9idWlsdGluX21iZWR0bHM9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfYnVpbHRpbl9tYmVkdGxzfSBmb3IgLS1lbmFibGUtYnVpbHRpbi1tYmVkdGxzXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfYnVpbHRpbl9tYmVkdGxzPXllc10pCisKK2lmIHRlc3QgIiRlbmFibGVfYnVpbHRpbl9tYmVkdGxzIiA9ICJ5ZXMiIC1hICEgIiR7TUJFRFRMU19DUFBGTEFHU30iOyB0aGVuCisgICAgTUJFRFRMU19DUFBGTEFHUz0iLUlcJHthYnNfdG9wX3NyY2Rpcn0vdGhpcmRfcGFydHkvbWJlZHRscyIKKyAgICBNQkVEVExTX0NQUEZMQUdTPSIke01CRURUTFNfQ1BQRkxBR1N9IC1JXCR7YWJzX3RvcF9zcmNkaXJ9L3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlIgorICAgIE1CRURUTFNfQ1BQRkxBR1M9IiR7TUJFRFRMU19DUFBGTEFHU30gLUlcJHthYnNfdG9wX3NyY2Rpcn0vdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscyIKKyAgICBNQkVEVExTX0NQUEZMQUdTPSIke01CRURUTFNfQ1BQRkxBR1N9IC1ETUJFRFRMU19DT05GSUdfRklMRT1cXFwibWJlZHRscy1jb25maWcuaFxcXCIiCitmaQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIG1iZWQgVExTIHNob3VsZCBiZSBlbmFibGVkXSkKK0FDX01TR19SRVNVTFQoJHtlbmFibGVfYnVpbHRpbl9tYmVkdGxzfSkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9CVUlMVElOX01CRURUTFNdLCBbdGVzdCAiJHtlbmFibGVfYnVpbHRpbl9tYmVkdGxzfSIgPSAieWVzIl0pCisKKyMKKyMgVGhyZWFkIFRNRiBQcm94eQorIworCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIFRNRiBwcm94eV0pCitBQ19BUkdfRU5BQkxFKHRtZl9wcm94eSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRtZi1wcm94eV0sW0VuYWJsZSBUTUYgcHJveHkgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV90bWZfcHJveHk9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfdG1mX3Byb3h5fSBmb3IgLS1lbmFibGUtdG1mLXByb3h5XSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfdG1mX3Byb3h5PW5vXSkKKworaWYgdGVzdCAiJGVuYWJsZV90bWZfcHJveHkiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFk9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWT0wCitmaQorCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX3RtZl9wcm94eX0pCitBQ19TVUJTVChPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZXSwgW3Rlc3QgIiR7ZW5hYmxlX3RtZl9wcm94eX0iID0gInllcyJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFldLFske09QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWX1dLFtEZWZpbmUgdG8gMSB0byBlbmFibGUgdGhlIFRNRiBwcm94eSBmZWF0dXJlLl0pCisKKyMKKyMgVGhyZWFkIE5ldHdvcmsgRGlhZ25vc3RpYyBmb3IgTVRECisjCisKK0FDX0FSR19FTkFCTEUobXRkX25ldHdvcmtfZGlhZ25vc3RpYywKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW10ZC1uZXR3b3JrLWRpYWdub3N0aWNdLFtFbmFibGUgbmV0d29yayBkaWFnbm9zdGljIHN1cHBvcnQgZm9yIE1URCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9tdGRfbmV0d29ya19kaWFnbm9zdGljPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxlX210ZF9uZXR3b3JrX2RpYWdub3N0aWN9IGZvciAtLWVuYWJsZS1tdGQtbmV0d29yay1kaWFnbm9zdGljXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfbXRkX25ldHdvcmtfZGlhZ25vc3RpYz1ub10pCisKK2lmIHRlc3QgIiRlbmFibGVfbXRkX25ldHdvcmtfZGlhZ25vc3RpYyIgPSAieWVzIjsgdGhlbgorICAgIE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUM9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUM9MAorZmkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSB0aGUgbmV0d29yayBkaWFnbm9zdGljIGZvciBNVERdKQorQUNfTVNHX1JFU1VMVCgke2VuYWJsZV9tdGRfbmV0d29ya19kaWFnbm9zdGljfSkKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQ10sIFt0ZXN0ICIke2VuYWJsZV9tdGRfbmV0d29ya19kaWFnbm9zdGljfSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUNdLFske09QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUN9XSxbRGVmaW5lIHRvIDEgdG8gZW5hYmxlIG5ldHdvcmsgZGlhZ25vc3RpYyBmb3IgTVRELl0pCisKKyMKKyMgVGhyZWFkIENvbW1pc3Npb25lcgorIworCitBQ19BUkdfRU5BQkxFKGNvbW1pc3Npb25lciwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNvbW1pc3Npb25lcl0sW0VuYWJsZSBjb21taXNzaW9uZXIgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9jb21taXNzaW9uZXI9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfY29tbWlzc2lvbmVyfSBmb3IgLS1lbmFibGUtY29tbWlzc2lvbmVyXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfY29tbWlzc2lvbmVyPW5vXSkKKworaWYgdGVzdCAiJGVuYWJsZV9jb21taXNzaW9uZXIiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVI9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUj0wCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIHRoZSBjb21taXNzaW9uZXJdKQorQUNfTVNHX1JFU1VMVCgke2VuYWJsZV9jb21taXNzaW9uZXJ9KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUl0sIFt0ZXN0ICIke2VuYWJsZV9jb21taXNzaW9uZXJ9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSXSxbJHtPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVJ9XSxbRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBjb21taXNzaW9uZXIgcm9sZS5dKQorCisjCisjIFRocmVhZCBKb2luZXIKKyMKKworQUNfQVJHX0VOQUJMRShqb2luZXIsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1qb2luZXJdLFtFbmFibGUgam9pbmVyIHN1cHBvcnQgQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBlbmFibGVfam9pbmVyPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxlX2pvaW5lcn0gZm9yIC0tZW5hYmxlLWpvaW5lcl0pCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbZW5hYmxlX2pvaW5lcj1ub10pCisKK2lmIHRlc3QgIiRlbmFibGVfam9pbmVyIiA9ICJ5ZXMiOyB0aGVuCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVI9MAorZmkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSB0aGUgam9pbmVyIGZlYXR1cmVdKQorQUNfTVNHX1JFU1VMVCgke2VuYWJsZV9qb2luZXJ9KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX0pPSU5FUl0sIFt0ZXN0ICIke2VuYWJsZV9qb2luZXJ9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSXSxbJHtPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVJ9XSxbRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBqb2luZXIgcm9sZS5dKQorCitpZiB0ZXN0ICIke2VuYWJsZV9jb21taXNzaW9uZXJ9IiA9ICJ5ZXMiIC1vICIke2VuYWJsZV9qb2luZXJ9IiA9ICJ5ZXMiOyB0aGVuCisgICAgZW5hYmxlX2R0bHM9InllcyIKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9EVExTPTEKK2Vsc2UKKyAgICBlbmFibGVfZHRscz0ibm8iCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfRFRMUz0wCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIERUTFMgZHVlIHRvIGpvaW5lci9jb21taXNzaW9uZXJdKQorQUNfTVNHX1JFU1VMVCgke2VuYWJsZV9kdGxzfSkKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX0RUTFMpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfRFRMU10sIFt0ZXN0ICIke2VuYWJsZV9kdGxzfSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX0RUTFNdLFske09QRU5USFJFQURfRU5BQkxFX0RUTFN9XSxbRGVmaW5lIHRvIDEgdG8gZW5hYmxlIGR0bHMgc3VwcG9ydC5dKQorCisjCisjIEphbSBEZXRlY3Rpb24KKyMKKworQUNfQVJHX0VOQUJMRShqYW1fZGV0ZWN0aW9uLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtamFtLWRldGVjdGlvbl0sW0VuYWJsZSBKYW0gRGV0ZWN0aW9uIHN1cHBvcnQgQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBlbmFibGVfamFtX2RldGVjdGlvbj0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9qYW1fZGV0ZWN0aW9ufSBmb3IgLS1lbmFibGUtamFtLWRldGVjdGlvbl0pCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbZW5hYmxlX2phbV9kZXRlY3Rpb249bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2phbV9kZXRlY3Rpb24iID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OPTAKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgamFtIGRldGVjdGlvbl0pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX2phbV9kZXRlY3Rpb259KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTikKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OXSwgW3Rlc3QgIiR7ZW5hYmxlX2phbV9kZXRlY3Rpb259IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTl0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTn1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byB1c2UgamFtIGRldGVjdGlvbiBmZWF0dXJlXSkKKworIworIyBNQUMgV2hpdGVsaXN0IGFuZCBCbGFja2xpc3QKKyMKKworQUNfQVJHX0VOQUJMRShtYWNfd2hpdGVsaXN0LAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbWFjLXdoaXRlbGlzdF0sW0VuYWJsZSBNQUMgd2hpdGVsaXN0L2JsYWNrbGlzdCBzdXBwb3J0IEA8OkBkZWZhdWx0PXllc0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9tYWNfd2hpdGVsaXN0PSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxlX21hY193aGl0ZWxpc3R9IGZvciAtLWVuYWJsZS1tYWMtd2hpdGVsaXN0XSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfbWFjX3doaXRlbGlzdD15ZXNdKQorCitpZiB0ZXN0ICIkZW5hYmxlX21hY193aGl0ZWxpc3QiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUPTAKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgbWFjIHdoaXRlbGlzdF0pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX21hY193aGl0ZWxpc3R9KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVCkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUXSwgW3Rlc3QgIiR7ZW5hYmxlX21hY193aGl0ZWxpc3R9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVF0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVH1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byB1c2UgTUFDIHdoaXRlbGlzdC9ibGFja2xpc3QgZmVhdHVyZV0pCisKKyMKKyMgRGlhZ25vc3RpY3MgTGlicmFyeQorIworCitBQ19BUkdfRU5BQkxFKGRpYWcsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kaWFnXSxbRW5hYmxlIGRpYWdub3N0aWNzIHN1cHBvcnQgQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBlbmFibGVfZGlhZz0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9kaWFnfSBmb3IgLS1lbmFibGUtZGlhZ10pCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbZW5hYmxlX2RpYWc9bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2RpYWciID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHPTAKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgZGlhZ10pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX2RpYWd9KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfRElBRykKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9ESUFHXSwgW3Rlc3QgIiR7ZW5hYmxlX2RpYWd9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfRElBR10sWyR7T1BFTlRIUkVBRF9FTkFCTEVfRElBR31dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byB1c2UgZGlhZ25vc3RpY3MgbW9kdWxlXSkKKworIworIyBMZWdhY3kgTmV0d29yaworIworCitBQ19BUkdfRU5BQkxFKGxlZ2FjeSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxlZ2FjeV0sW0VuYWJsZSBsZWdhY3kgbmV0d29yayBzdXBwb3J0IEA8OkBkZWZhdWx0PW5vQDo+QC5dKV0sCisgICAgWworICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisKKyAgICAgICAgbm98eWVzKQorICAgICAgICAgICAgZW5hYmxlX2xlZ2FjeT0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9sZWdhY3l9IGZvciAtLWVuYWJsZS1sZWdhY3ldKQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIF0sCisgICAgW2VuYWJsZV9sZWdhY3k9bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2xlZ2FjeSIgPSAieWVzIjsgdGhlbgorICAgIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWT0xCitlbHNlCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZPTAKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgbGVnYWN5XSkKK0FDX01TR19SRVNVTFQoJHtlbmFibGVfbGVnYWN5fSkKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWSkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1ldLCBbdGVzdCAiJHtlbmFibGVfbGVnYWN5fSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX0xFR0FDWV0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIHVzZSBsZWdhY3kgbmV0d29yayBzdXBwb3J0XSkKKworIworIyBDaGlsZCBTdXBlcnZpc2lvbgorIworCitBQ19BUkdfRU5BQkxFKGNoaWxkX3N1cGVydmlzaW9uLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY2hpbGQtc3VwZXJ2aXNpb25dLFtFbmFibGUgY2hpbGQgc3VwZXJ2aXNpb24gZmVhdHVyZSBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9jaGlsZF9zdXBlcnZpc2lvbj0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9jaGlsZF9zdXBlcnZpc2lvbn0gZm9yIC0tZW5hYmxlLWNoaWxkLXN1cGVydmlzaW9uXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfY2hpbGRfc3VwZXJ2aXNpb249bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2NoaWxkX3N1cGVydmlzaW9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT049MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OPTAKK2ZpCisKK0FDX01TR19SRVNVTFQoJHtlbmFibGVfY2hpbGRfc3VwZXJ2aXNpb259KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT04pCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT05dLCBbdGVzdCAiJHtlbmFibGVfY2hpbGRfc3VwZXJ2aXNpb259IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT05dLFske09QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIHVzZSBjaGlsZCBzdXBlcnZpc2lvbiBmZWF0dXJlXSkKKworIworIyBMb2cgZm9yIGNlcnRpZmljYXRpb24gdGVzdAorIworCitBQ19BUkdfRU5BQkxFKGNlcnRfbG9nLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY2VydC1sb2ddLFtFbmFibGUgY2VydGlmaWNhdGlvbiBsb2cgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9jZXJ0X2xvZz0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9jZXJ0X2xvZ30gZm9yIC0tZW5hYmxlLWNlcnQtbG9nXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfY2VydF9sb2c9bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2NlcnRfbG9nIiA9ICJ5ZXMiOyB0aGVuCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfQ0VSVF9MT0c9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HPTAKK2ZpCisKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HXSwgW3Rlc3QgIiR7ZW5hYmxlX2NlcnRfbG9nfSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HXSxbJHtPUEVOVEhSRUFEX0VOQUJMRV9DRVJUX0xPR31dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgbG9nIGZvciBjZXJ0aWZpY2F0aW9uIHRlc3RdKQorCisjCisjIERIQ1B2NiBDbGllbnQKKyMKKworQUNfQVJHX0VOQUJMRShkaGNwNl9jbGllbnQsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kaGNwNi1jbGllbnRdLFtFbmFibGUgREhDUHY2IGNsaWVudCBzdXBwb3J0IEA8OkBkZWZhdWx0PW5vQDo+QC5dKV0sCisgICAgWworICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisKKyAgICAgICAgbm98eWVzKQorICAgICAgICAgICAgZW5hYmxlX2RoY3A2X2NsaWVudD0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9kaGNwNl9jbGllbnR9IGZvciAtLWVuYWJsZS1kaGNwNi1jbGllbnRdKQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIF0sCisgICAgW2VuYWJsZV9kaGNwNl9jbGllbnQ9bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2RoY3A2X2NsaWVudCIgPSAieWVzIjsgdGhlbgorICAgIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVD0xCitlbHNlCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UPTAKK2ZpCisKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVCkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlRdLCBbdGVzdCAiJHtlbmFibGVfZGhjcDZfY2xpZW50fSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVF0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBESENQdjYgQ2xpZW50XSkKKworIworIyBESENQdjYgU2VydmVyCisjCisKK0FDX0FSR19FTkFCTEUoZGhjcDZfc2VydmVyLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZGhjcDYtc2VydmVyXSxbRW5hYmxlIERIQ1B2NiBzZXJ2ZXIgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9kaGNwNl9zZXJ2ZXI9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfZGhjcDZfc2VydmVyfSBmb3IgLS1lbmFibGUtZGhjcDYtc2VydmVyXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfZGhjcDZfc2VydmVyPW5vXSkKKworaWYgdGVzdCAiJGVuYWJsZV9kaGNwNl9zZXJ2ZXIiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVI9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUj0wCitmaQorCitBQ19TVUJTVChPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSXSwgW3Rlc3QgIiR7ZW5hYmxlX2RoY3A2X3NlcnZlcn0iID0gInllcyJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVJdLFske09QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUn1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgREhDUHY2IFNlcnZlcl0pCisKKyMKKyMgRE5TIENsaWVudAorIworCitBQ19BUkdfRU5BQkxFKGRuc19jbGllbnQsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kbnMtY2xpZW50XSxbRW5hYmxlIEROUyBjbGllbnQgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9kbnNfY2xpZW50PSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxlX2Ruc19jbGllbnR9IGZvciAtLWVuYWJsZS1kbnMtY2xpZW50XSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfZG5zX2NsaWVudD1ub10pCisKK2lmIHRlc3QgIiRlbmFibGVfZG5zX2NsaWVudCIgPSAieWVzIjsgdGhlbgorICAgIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQ9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQ9MAorZmkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVCkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UXSwgW3Rlc3QgIiR7ZW5hYmxlX2Ruc19jbGllbnR9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVF0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVH1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgRE5TIENsaWVudF0pCisKKyMKKyMgQXBwbGljYXRpb24gQ29BUAorIworCitBQ19BUkdfRU5BQkxFKGFwcGxpY2F0aW9uX2NvYXAsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hcHBsaWNhdGlvbi1jb2FwXSxbRW5hYmxlIENvQVAgdG8gYW4gYXBwbGljYXRpb24uQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBlbmFibGVfYXBwbGljYXRpb25fY29hcD0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9hcHBsaWNhdGlvbl9jb2FwfSBmb3IgLS1lbmFibGUtYXBwbGljYXRpb24tY29hcF0pCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbZW5hYmxlX2FwcGxpY2F0aW9uX2NvYXA9bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2FwcGxpY2F0aW9uX2NvYXAiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQPTAKK2ZpCisKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVApCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUF0sIFt0ZXN0ICIke2VuYWJsZV9hcHBsaWNhdGlvbl9jb2FwfSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVBdLFske09QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVB9XSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIENvQVAgdG8gYW4gYXBwbGljYXRpb24uXSkKKworIworIyBvdExpbmtSYXcgQVBJCisjCisKK0FDX0FSR19FTkFCTEUocmF3X2xpbmtfYXBpLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcmF3LWxpbmstYXBpXSxbRW5hYmxlIHJhdyBsaW5rLWxheWVyIEFQSSBzdXBwb3J0IEA8OkBkZWZhdWx0PXllc0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9yYXdfbGlua19hcGk9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfcmF3X2xpbmtfYXBpfSBmb3IgLS1lbmFibGUtcmF3LWxpbmstYXBpXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfcmF3X2xpbmtfYXBpPXllc10pCisKK2lmIHRlc3QgIiRlbmFibGVfcmF3X2xpbmtfYXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEk9MAorZmkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSV0sIFt0ZXN0ICIke2VuYWJsZV9yYXdfbGlua19hcGl9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJXSxbJHtPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEl9XSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHJhdyBsaW5rLWxheWVyIEFQSV0pCisKKyMKKyMgQm9yZGVyIFJvdXRlcgorIworCitBQ19BUkdfRU5BQkxFKGJvcmRlcl9yb3V0ZXIsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ib3JkZXItcm91dGVyXSxbRW5hYmxlIEJvcmRlciBSb3V0ZXIgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9ib3JkZXJfcm91dGVyPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxlX2JvcmRlcl9yb3V0ZXJ9IGZvciAtLWVuYWJsZS1ib3JkZXItcm91dGVyXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfYm9yZGVyX3JvdXRlcj1ub10pCisKK2lmIHRlc3QgIiRlbmFibGVfYm9yZGVyX3JvdXRlciIgPSAieWVzIjsgdGhlbgorICAgIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVI9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVI9MAorZmkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUikKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSXSwgW3Rlc3QgIiR7ZW5hYmxlX2JvcmRlcl9yb3V0ZXJ9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUl0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUn1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgQm9yZGVyIFJvdXRlcl0pCisKKyMKKyMgRXhhbXBsZXMKKyMKKworQUNfQVJHX1dJVEgoZXhhbXBsZXMsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZXhhbXBsZXM9VEFSR0VUXSwKKyAgICAgICAgW1NwZWNpZnkgdGhlIGV4YW1wbGVzIGZyb20gb25lIG9mOiBub25lLCBwb3NpeCwgY2MyNTM4LCBjYzI2NTAsIGRhMTUwMDAsIGVmcjMyLCBlbXNrLCBrdzQxeiwgbnJmNTI4NDAgQDw6QGRlZmF1bHQ9bm9uZUA6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHt3aXRoX2V4YW1wbGVzfSIgaW4KKworICAgICAgICBub25lfHBvc2l4fGNjMjUzOHxjYzI2NTB8ZGExNTAwMHxlZnIzMnxlbXNrfGt3NDF6fG5yZjUyODQwKQorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke3dpdGhfZXhhbXBsZXN9IGZvciAtLXdpdGgtZXhhbXBsZXNdKQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIF0sCisgICAgW3dpdGhfZXhhbXBsZXM9bm9uZV0pCisKK09QRU5USFJFQURfRVhBTVBMRVM9JHt3aXRoX2V4YW1wbGVzfQorCitjYXNlICR7d2l0aF9leGFtcGxlc30gaW4KKworICAgIHBvc2l4KQorICAgICAgICBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYPTEKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYXSxbJHtPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIHVzZSBwb3NpeCBleGFtcGxlc10pCisgICAgICAgIDs7CisKKyAgICBjYzI1MzgpCisgICAgICAgIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNTM4PTEKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0NDMjUzOF0sWyR7T1BFTlRIUkVBRF9FWEFNUExFU19DQzI1Mzh9XSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gdXNlIGNjMjUzOCBleGFtcGxlc10pCisgICAgICAgIDs7CisKKyAgICBjYzI2NTApCisgICAgICAgIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNjUwPTEKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0NDMjY1MF0sWyR7T1BFTlRIUkVBRF9FWEFNUExFU19DQzI2NTB9XSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gdXNlIGNjMjY1MCBleGFtcGxlc10pCisgICAgICAgIDs7CisKKyAgICBkYTE1MDAwKQorICAgICAgICBPUEVOVEhSRUFEX0VYQU1QTEVTX0RBMTUwMDA9MQorICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRVhBTVBMRVNfREExNTAwMF0sWyR7T1BFTlRIUkVBRF9FWEFNUExFU19EQTE1MDAwfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIHVzZSBkYTE1MDAwIGV4YW1wbGVzXSkKKyAgICAgICAgOzsKKworICAgIGVmcjMyKQorICAgICAgICBPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyPTEKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyXSxbJHtPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIHVzZSBlZnIzMiBleGFtcGxlc10pCisgICAgICAgIDs7CisKKyAgICAgZW1zaykKKyAgICAgICAgT1BFTlRIUkVBRF9FWEFNUExFU19FTVNLPTEKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0VNU0tdLFske09QRU5USFJFQURfRVhBTVBMRVNfRU1TS31dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byB1c2UgZW1zayBleGFtcGxlc10pCisgICAgICAgIDs7CisKKyAgICBrdzQxeikKKyAgICAgICAgT1BFTlRIUkVBRF9FWEFNUExFU19LVzQxWj0xCisgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FWEFNUExFU19LVzQxWl0sWyR7T1BFTlRIUkVBRF9FWEFNUExFU19LVzQxWn1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byB1c2Uga3c0MXogZXhhbXBsZXNdKQorICAgICAgICA7OworCisgICAgbnJmNTI4NDApCisgICAgICAgIE9QRU5USFJFQURfRVhBTVBMRVNfTlJGNTI4NDA9MQorICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRVhBTVBMRVNfTlJGNTI4NDBdLFske09QRU5USFJFQURfRVhBTVBMRVNfTlJGNTI4NDB9XSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gdXNlIG5yZjUyODQwIGV4YW1wbGVzXSkKKyAgICAgICAgOzsKKworZXNhYworCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIGV4YW1wbGVzXSkKK0FDX01TR19SRVNVTFQoJHtPUEVOVEhSRUFEX0VYQU1QTEVTfSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FWEFNUExFUykKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VYQU1QTEVTXSwgW3Rlc3QgJHt3aXRoX2V4YW1wbGVzfSAhPSAibm9uZSJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTXSxbJHtPUEVOVEhSRUFEX0VYQU1QTEVTfV0sW09wZW5UaHJlYWQgZXhhbXBsZXNdKQorCitBQ19TVUJTVChPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRVhBTVBMRVNfUE9TSVhdLCBbdGVzdCAiJHtPUEVOVEhSRUFEX0VYQU1QTEVTfSIgPSAicG9zaXgiXSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FWEFNUExFU19DQzI1MzgpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FWEFNUExFU19DQzI1MzhdLCBbdGVzdCAiJHtPUEVOVEhSRUFEX0VYQU1QTEVTfSIgPSAiY2MyNTM4Il0pCisKK0FDX1NVQlNUKE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNjUwKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRVhBTVBMRVNfQ0MyNjUwXSwgW3Rlc3QgIiR7T1BFTlRIUkVBRF9FWEFNUExFU30iID0gImNjMjY1MCJdKQorCitBQ19TVUJTVChPUEVOVEhSRUFEX0VYQU1QTEVTX0RBMTUwMDApCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FWEFNUExFU19EQTE1MDAwXSwgW3Rlc3QgIiR7T1BFTlRIUkVBRF9FWEFNUExFU30iID0gImRhMTUwMDAiXSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FWEFNUExFU19FRlIzMikKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyXSwgW3Rlc3QgIiR7T1BFTlRIUkVBRF9FWEFNUExFU30iID0gImVmcjMyIl0pCisKK0FDX1NVQlNUKE9QRU5USFJFQURfRVhBTVBMRVNfRU1TSykKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0VNU0tdLCBbdGVzdCAiJHtPUEVOVEhSRUFEX0VYQU1QTEVTfSIgPSAiZW1zayJdKQorCitBQ19TVUJTVChPUEVOVEhSRUFEX0VYQU1QTEVTX0tXNDFaKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRVhBTVBMRVNfS1c0MVpdLCBbdGVzdCAiJHtPUEVOVEhSRUFEX0VYQU1QTEVTfSIgPSAia3c0MXoiXSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FWEFNUExFU19OUkY1Mjg0MCkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VYQU1QTEVTX05SRjUyODQwXSwgW3Rlc3QgIiR7T1BFTlRIUkVBRF9FWEFNUExFU30iID0gIm5yZjUyODQwIl0pCisKKyMKKyMgUGxhdGZvcm0gSW5mb3JtYXRpb24KKyMKKworQUNfQVJHX1dJVEgocGxhdGZvcm0taW5mbywKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wbGF0Zm9ybS1pbmZvPVBMQVRGT1JNXSwKKyAgICAgICAgW1NwZWNpZnkgdGhlIHBsYXRmb3JtIGluZm9ybWF0aW9uIEA8OkBkZWZhdWx0PW5vbmVAOj5ALl0pXSwKKyAgICBbXSwKKyAgICBbd2l0aF9wbGF0Zm9ybV9pbmZvPW5vbmVdKQorCitQTEFURk9STV9JTkZPPSR7d2l0aF9wbGF0Zm9ybV9pbmZvfQorCitBQ19NU0dfQ0hFQ0tJTkcoW3dpdGggcGxhdGZvcm0gaW5mb10pCitBQ19NU0dfUkVTVUxUKCR7UExBVEZPUk1fSU5GT30pCisKK0FDX1NVQlNUKFBMQVRGT1JNX0lORk8pCitBQ19ERUZJTkVfVU5RVU9URUQoW1BMQVRGT1JNX0lORk9dLFsiJHtQTEFURk9STV9JTkZPfSJdLFtPcGVuVGhyZWFkIHBsYXRmb3JtIGluZm9ybWF0aW9uXSkKKworIworIyBUb29scworIworCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgdG9vbHNdKQorQUNfQVJHX0VOQUJMRSh0b29scywKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS10b29sc10sW0Rpc2FibGUgYnVpbGRpbmcgb2YgdG9vbHMgQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBidWlsZF90b29scz0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRvb2xzXSkKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgZXNhYworICAgIF0sCisgICAgW2J1aWxkX3Rvb2xzPXllc10pCitBQ19NU0dfUkVTVUxUKCR7YnVpbGRfdG9vbHN9KQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfQlVJTERfVE9PTFNdLCBbdGVzdCAiJHtidWlsZF90b29sc30iID0gInllcyJdKQorCisjCisjIERvY3VtZW50YXRpb24KKyMKKworIyBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgZG9jdW1lbnRhdGlvbiAodmlhIERveHlnZW4pIHNob3VsZCBiZSBidWlsdAorIyBvciBub3QsIHdpdGggJ2F1dG8nIGFzIHRoZSBkZWZhdWx0IGFuZCBlc3RhYmxpc2ggYSBkZWZhdWx0IHN1cHBvcnQKKyMgdmFsdWUgZm9yIEdyYXBoVml6ICdkb3QnIHN1cHBvcnQuCisKK05MX0VOQUJMRV9ET0NTKFthdXRvXSxbTk9dKQorCitBTV9DT05ESVRJT05BTChPUEVOVEhSRUFEX0JVSUxEX0RPQ1MsIFt0ZXN0ICIke25sX2N2X2J1aWxkX2RvY3N9IiA9ICJ5ZXMiXSkKKworIworIyBDaGVja3MgZm9yIGxpYnJhcmllcyBhbmQgcGFja2FnZXMuCisjCisjIEF0IG1pbmltdW0sIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgYXJlIG9wdGlvbmFsLCBkZXBlbmRpbmcgb24KKyMgY29uZmlndXJhdGlvbjoKKyMKKyMgICAqIFRCRAorIworQUNfTVNHX05PVElDRShbY2hlY2tpbmcgcmVxdWlyZWQgcGFja2FnZSBkZXBlbmRlbmNpZXNdKQorCisjIE5MX1dJVEhfUEFDS0FHRSguLi4pCisKKyMKKyMgQ2hlY2sgZm9yIGhlYWRlcnMKKyMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgQlNEIFNlY3VyaXR5IEZlYXR1cmVzCisjIFRoaXMgZW5hYmxlcyBzdHJsY3B5KCkgYW5kIG90aGVyIGZyaWVuZHMgaW4gR05VIGxhbmQuCisjIFdoaWxlIHRoZSByZWZlcmVuY2VzIGJlbG93IGdlbmVyYWxseSBzcGVhayBvZjogImdsaWJjIgorIyBUaGUgQVJNIEVtYmVkZGVkIHBsYXRmb3JtIHVzZXMgdGhlIG5hbm8gaW5zdGFuY2Ugb2YgTkVXTElCCisjIFdoaWNoIGdyZWF0bHkgZm9sbG93cyBhbmQgbWlycm9ycyBnbGliYy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgUmVmZXJlbmNlczoKKyMgMSkgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yOTIwMTUxNS93aGF0LWRvZXMtZC1kZWZhdWx0LXNvdXJjZS1kbworIyAyKSBodHRwOi8vbWFuNy5vcmcvbGludXgvbWFuLXBhZ2VzL21hbjcvZmVhdHVyZV90ZXN0X21hY3Jvcy43Lmh0bWwKKyMKK0NGTEFHUz0iJHtDRkxBR1N9IC1EX0JTRF9TT1VSQ0U9MSAtRF9ERUZBVUxUX1NPVVJDRT0xIgorQ1hYRkxBR1M9IiR7Q1hYRkxBR1N9IC1EX0JTRF9TT1VSQ0U9MSAtRF9ERUZBVUxUX1NPVVJDRT0xIgorCitPTERfQ0ZMQUdTPSIke0NGTEFHU30iCitDRkxBR1M9IiR7Q0ZMQUdTfSAtV25vLWVycm9yPWFkZHJlc3MiCitBQ19IRUFERVJfU1REQk9PTAorQ0ZMQUdTPSIke09MRF9DRkxBR1N9IgorQUNfSEVBREVSX1NUREMKKworQUNfQ0hFQ0tfSEVBREVSUyhbc3RkaW50LmhdKQorQUNfQ0hFQ0tfSEVBREVSUyhbc3RyaW5nLmhdKQorCisjCisjIE1pc3NpbmcgRnVuY3Rpb25zCisjCitBQ19DSEVDS19GVU5DKFtzdHJsY3B5XSwgW0FDX0RFRklORShbSEFWRV9TVFJMQ1BZXSwgWzFdLCBbRGVmaW5lIGlmIHN0cmxjcHkgZXhpc3RzLl0pXSkKK0FDX0NIRUNLX0ZVTkMoW3N0cmxjYXRdLCBbQUNfREVGSU5FKFtIQVZFX1NUUkxDQVRdLCBbMV0sIFtEZWZpbmUgaWYgc3RybGNhdCBleGlzdHMuXSldKQorQUNfQ0hFQ0tfRlVOQyhbc3Rybmxlbl0sIFtBQ19ERUZJTkUoW0hBVkVfU1RSTkxFTl0sIFsxXSwgW0RlZmluZSBpZiBzdHJubGVuIGV4aXN0cy5dKV0pCisKKyMKKyMgQ2hlY2sgZm9yIHR5cGVzIGFuZCBzdHJ1Y3R1cmVzCisjCitBQ19UWVBFX0lOVDhfVAorQUNfVFlQRV9JTlQxNl9UCitBQ19UWVBFX0lOVDMyX1QKK0FDX1RZUEVfSU5UNjRfVAorQUNfVFlQRV9VSU5UOF9UCitBQ19UWVBFX1VJTlQxNl9UCitBQ19UWVBFX1VJTlQzMl9UCitBQ19UWVBFX1VJTlQ2NF9UCisKKyMKKyMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucworIworCitpZiB0ZXN0ICIke2FjX25vX2xpbmt9IiAhPSAieWVzIjsgdGhlbgorICAgIEFDX0NIRUNLX0ZVTkNTKFttZW1jcHldKQorZmkKKworIyBBZGQgYW55IG1iZWR0bHMgQ1BQRkxBR1MKKworQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9ICR7TUJFRFRMU19DUFBGTEFHU30iCisKKyMgQWRkIGFueSBjb2RlIGNvdmVyYWdlIENQUEZMQUdTIGFuZCBMREZMQUdTCisKK0NQUEZMQUdTPSIke0NQUEZMQUdTfSAke05MX0NPVkVSQUdFX0NQUEZMQUdTfSIKK0xERkxBR1M9IiR7TERGTEFHU30gJHtOTF9DT1ZFUkFHRV9MREZMQUdTfSIKKworIyBBdCB0aGlzIHBvaW50LCB3ZSBjYW4gcmVzdG9yZSB0aGUgY29tcGlsZXIgZmxhZ3MgdG8gd2hhdGV2ZXIgdGhlCisjIHVzZXIgcGFzc2VkIGluLCBub3cgdGhhdCB3ZSdyZSBjbGVhciBvZiBhbiAtV2Vycm9yIGlzc3VlcyBieQorIyB0cmFuc2Zvcm1pbmcgLVduby1lcnJvciBiYWNrIHRvIC1XZXJyb3IuCisKK05MX1JFU1RPUkVfV0VSUk9SCisKKyMKKyMgSWRlbnRpZnkgdGhlIHZhcmlvdXMgbWFrZWZpbGVzIGFuZCBhdXRvLWdlbmVyYXRlZCBmaWxlcyBmb3IgdGhlIHBhY2thZ2UKKyMKK0FDX0NPTkZJR19GSUxFUyhbCitNYWtlZmlsZQoraW5jbHVkZS9NYWtlZmlsZQoraW5jbHVkZS9vcGVudGhyZWFkL01ha2VmaWxlCitpbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vTWFrZWZpbGUKK3NyYy9NYWtlZmlsZQorc3JjL2NsaS9NYWtlZmlsZQorc3JjL25jcC9NYWtlZmlsZQorc3JjL2NvcmUvTWFrZWZpbGUKK3NyYy9kaWFnL01ha2VmaWxlCit0aGlyZF9wYXJ0eS9NYWtlZmlsZQordGhpcmRfcGFydHkvbWJlZHRscy9NYWtlZmlsZQorZXhhbXBsZXMvTWFrZWZpbGUKK2V4YW1wbGVzL2FwcHMvTWFrZWZpbGUKK2V4YW1wbGVzL2FwcHMvY2xpL01ha2VmaWxlCitleGFtcGxlcy9hcHBzL25jcC9NYWtlZmlsZQorZXhhbXBsZXMvcGxhdGZvcm1zL01ha2VmaWxlCitleGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L01ha2VmaWxlCitleGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL01ha2VmaWxlCitleGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9NYWtlZmlsZQorZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL01ha2VmaWxlCitleGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9NYWtlZmlsZQorZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L01ha2VmaWxlCitleGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvTWFrZWZpbGUKK2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9NYWtlZmlsZQorZXhhbXBsZXMvcGxhdGZvcm1zL3V0aWxzL01ha2VmaWxlCit0b29scy9NYWtlZmlsZQordG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL01ha2VmaWxlCit0b29scy9oYXJuZXNzLXRoY2kvTWFrZWZpbGUKK3Rvb2xzL3NwaS1oZGxjLWFkYXB0ZXIvTWFrZWZpbGUKK3Rlc3RzL01ha2VmaWxlCit0ZXN0cy9zY3JpcHRzL01ha2VmaWxlCit0ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L01ha2VmaWxlCit0ZXN0cy91bml0L01ha2VmaWxlCitkb2MvTWFrZWZpbGUKK10pCisKKyMKKyMgR2VuZXJhdGUgdGhlIGF1dG8tZ2VuZXJhdGVkIGZpbGVzIGZvciB0aGUgcGFja2FnZQorIworQUNfT1VUUFVUCisKKyMKKyMgU3VtbWFyaXplIHRoZSBwYWNrYWdlIGNvbmZpZ3VyYXRpb24KKyMKKworQUNfTVNHX05PVElDRShbCisKKyAgQ29uZmlndXJhdGlvbiBTdW1tYXJ5CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBQYWNrYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7UEFDS0FHRV9OQU1FfQorICBWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7UEFDS0FHRV9WRVJTSU9OfQorICBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7TElCT1BFTlRIUkVBRF9WRVJTSU9OX0lORk8vLzovLn0KKyAgQnVpbGQgc3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke2J1aWxkfQorICBIb3N0IHN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7aG9zdH0KKyAgSG9zdCBhcmNoaXRlY3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgOiAke2hvc3RfY3B1fQorICBIb3N0IE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7aG9zdF9vc30KKyAgQ3Jvc3MgY29tcGlsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke2Nyb3NzX2NvbXBpbGluZ30KKyAgQnVpbGQgc2hhcmVkIGxpYnJhcmllcyAgICAgICAgICAgICAgICAgICAgOiAke2VuYWJsZV9zaGFyZWR9CisgIEJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgICAgICAgICAgICAgICAgICAgIDogJHtlbmFibGVfc3RhdGljfQorICBCdWlsZCBkZWJ1ZyBsaWJyYXJpZXMgICAgICAgICAgICAgICAgICAgICA6ICR7bmxfY3ZfYnVpbGRfZGVidWd9CisgIEJ1aWxkIG9wdGltaXplZCBsaWJyYXJpZXMgICAgICAgICAgICAgICAgIDogJHtubF9jdl9idWlsZF9vcHRpbWl6ZWR9CisgIEJ1aWxkIGNvdmVyYWdlIGxpYnJhcmllcyAgICAgICAgICAgICAgICAgIDogJHtubF9jdl9idWlsZF9jb3ZlcmFnZX0KKyAgQnVpbGQgY292ZXJhZ2UgcmVwb3J0cyAgICAgICAgICAgICAgICAgICAgOiAke25sX2N2X2J1aWxkX2NvdmVyYWdlX3JlcG9ydHN9CisgIEFkZHJlc3Mgc2FuaXRpemVyIHN1cHBvcnQgICAgICAgICAgICAgICAgIDogJHtlbmFibGVfYWRkcmVzc19zYW5pdGl6ZXJ9CisgIExjb3YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtMQ09WOi0tfQorICBHZW5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7R0VOSFRNTDotLX0KKyAgQnVpbGQgdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke25sX2N2X2J1aWxkX3Rlc3RzfQorICBCdWlsZCB0b29scyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7YnVpbGRfdG9vbHN9CisgIE9wZW5UaHJlYWQgdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHt3aXRoX3Rlc3RzfQorICBQcmVmaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7cHJlZml4fQorICBEb2N1bWVudGF0aW9uIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICA6ICR7bmxfY3ZfYnVpbGRfZG9jc30KKyAgRG94eWdlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0RPWFlHRU46LS19CisgIEdyYXBoVml6IGRvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtET1Q6LS19CisgIEMgUHJlcHJvY2Vzc29yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDUFB9CisgIEMgQ29tcGlsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDQ30KKyAgQysrIFByZXByb2Nlc3NvciAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0NYWENQUH0KKyAgQysrIENvbXBpbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0NYWH0KKyAgQXNzZW1ibGVyIENvbXBpbGVyICAgICAgICAgICAgICAgICAgICAgICAgOiAke0NDQVN9CisgIEFyY2hpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtBUn0KKyAgQXJjaGl2ZSBJbmRleGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1JBTkxJQn0KKyAgU3ltYm9sIFN0cmlwcGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1NUUklQfQorICBPYmplY3QgQ29waWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7T0JKQ09QWX0KKyAgQyBQcmVwcm9jZXNzb3IgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgOiAke0NQUEZMQUdTOi0tfQorICBDIENvbXBpbGUgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7Q0ZMQUdTOi0tfQorICBDKysgQ29tcGlsZSBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7Q1hYRkxBR1M6LS19CisgIEFzc2VtYmxlciBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDQ0FTRkxBR1M6LS19CisgIExpbmsgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtMREZMQUdTOi0tfQorICBMaW5rIGxpYnJhcmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7TElCU30KKyAgUHJldHR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1BSRVRUWTotLX0KKyAgUHJldHR5IGFyZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1BSRVRUWV9BUkdTOi0tfQorICBQcmV0dHkgY2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7UFJFVFRZX0NIRUNLOi0tfQorICBQcmV0dHkgY2hlY2sgYXJncyAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7UFJFVFRZX0NIRUNLX0FSR1M6LS19CisgIE9wZW5UaHJlYWQgQ0xJIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgIDogJHtlbmFibGVfY2xpX2FwcH0KKyAgT3BlblRocmVhZCBDTEktTVREIHN1cHBvcnQgICAgICAgICAgICAgICAgOiAke2VuYWJsZV9jbGlfYXBwX210ZH0KKyAgT3BlblRocmVhZCBDTEktRlREIHN1cHBvcnQgICAgICAgICAgICAgICAgOiAke2VuYWJsZV9jbGlfYXBwX2Z0ZH0KKyAgT3BlblRocmVhZCBOQ1Agc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgOiAke2VuYWJsZV9uY3BfYXBwfQorICBPcGVuVGhyZWFkIE5DUC1NVEQgc3VwcG9ydCAgICAgICAgICAgICAgICA6ICR7ZW5hYmxlX25jcF9hcHBfbXRkfQorICBPcGVuVGhyZWFkIE5DUC1GVEQgc3VwcG9ydCAgICAgICAgICAgICAgICA6ICR7ZW5hYmxlX25jcF9hcHBfZnRkfQorICBPcGVuVGhyZWFkIE5DUC1CVVMgQ29uZmlndXJhdGlvbiAgICAgICAgICA6ICR7d2l0aF9uY3BfYnVzfQorICBPcGVuVGhyZWFkIE11bHRpcGxlIEluc3RhbmNlcyBzdXBwb3J0ICAgICA6ICR7ZW5hYmxlX211bHRpcGxlX2luc3RhbmNlc30KKyAgT3BlblRocmVhZCBNVEQgTmV0d29yayBEaWFnbm9zdGljIHN1cHBvcnQgOiAke2VuYWJsZV9tdGRfbmV0d29ya19kaWFnbm9zdGljfQorICBPcGVuVGhyZWFkIGJ1aWx0aW4gbWJlZHRscyBzdXBwb3J0ICAgICAgICA6ICR7ZW5hYmxlX2J1aWx0aW5fbWJlZHRsc30KKyAgT3BlblRocmVhZCBUTUYgUHJveHkgc3VwcG9ydCAgICAgICAgICAgICAgOiAke2VuYWJsZV90bWZfcHJveHl9CisgIE9wZW5UaHJlYWQgQ29tbWlzc2lvbmVyIHN1cHBvcnQgICAgICAgICAgIDogJHtlbmFibGVfY29tbWlzc2lvbmVyfQorICBPcGVuVGhyZWFkIEpvaW5lciBzdXBwb3J0ICAgICAgICAgICAgICAgICA6ICR7ZW5hYmxlX2pvaW5lcn0KKyAgT3BlblRocmVhZCBEVExTIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgOiAke2VuYWJsZV9kdGxzfQorICBPcGVuVGhyZWFkIEphbSBEZXRlY3Rpb24gc3VwcG9ydCAgICAgICAgICA6ICR7ZW5hYmxlX2phbV9kZXRlY3Rpb259CisgIE9wZW5UaHJlYWQgTUFDIFdoaXRlbGlzdCBzdXBwb3J0ICAgICAgICAgIDogJHtlbmFibGVfbWFjX3doaXRlbGlzdH0KKyAgT3BlblRocmVhZCBEaWFnbm9zdGljcyBzdXBwb3J0ICAgICAgICAgICAgOiAke2VuYWJsZV9kaWFnfQorICBPcGVuVGhyZWFkIENoaWxkIFN1cGVydmlzaW9uIHN1cHBvcnQgICAgICA6ICR7ZW5hYmxlX2NoaWxkX3N1cGVydmlzaW9ufQorICBPcGVuVGhyZWFkIExlZ2FjeSBuZXR3b3JrIHN1cHBvcnQgICAgICAgICA6ICR7ZW5hYmxlX2xlZ2FjeX0KKyAgT3BlblRocmVhZCBDZXJ0aWZpY2F0aW9uIGxvZyBzdXBwb3J0ICAgICAgOiAke2VuYWJsZV9jZXJ0X2xvZ30KKyAgT3BlblRocmVhZCBESENQdjYgU2VydmVyIHN1cHBvcnQgICAgICAgICAgOiAke2VuYWJsZV9kaGNwNl9zZXJ2ZXJ9CisgIE9wZW5UaHJlYWQgREhDUHY2IENsaWVudCBzdXBwb3J0ICAgICAgICAgIDogJHtlbmFibGVfZGhjcDZfY2xpZW50fQorICBPcGVuVGhyZWFkIEROUyBDbGllbnQgc3VwcG9ydCAgICAgICAgICAgICA6ICR7ZW5hYmxlX2Ruc19jbGllbnR9CisgIE9wZW5UaHJlYWQgQXBwbGljYXRpb24gQ29BUCBzdXBwb3J0ICAgICAgIDogJHtlbmFibGVfYXBwbGljYXRpb25fY29hcH0KKyAgT3BlblRocmVhZCBSYXcgTGluay1MYXllciBzdXBwb3J0ICAgICAgICAgOiAke2VuYWJsZV9yYXdfbGlua19hcGl9CisgIE9wZW5UaHJlYWQgQm9yZGVyIFJvdXRlciBzdXBwb3J0ICAgICAgICAgIDogJHtlbmFibGVfYm9yZGVyX3JvdXRlcn0KKyAgT3BlblRocmVhZCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgOiAke09QRU5USFJFQURfRVhBTVBMRVN9CisgIE9wZW5UaHJlYWQgcGxhdGZvcm0gaW5mb3JtYXRpb24gICAgICAgICAgIDogJHtQTEFURk9STV9JTkZPfQorCitdKQpkaWZmIC0tZ2l0IGEvZG9jL0RveHlmaWxlLmluIGIvZG9jL0RveHlmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTcyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvRG94eWZpbGUuaW4KQEAgLTAsMCArMSwyMzg0IEBACisjIERveHlmaWxlIDEuOC42CisKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IHRoZQorIyAgICAgIGRvY3VtZW50YXRpb24gc3lzdGVtICMgZG94eWdlbiAod3d3LmRveHlnZW4ub3JnKSBmb3IgT3BlblRocmVhZC4KKyMKKyMgICAgICBUaGlzIHdhcyBpbml0aWFsbHkgYXV0b2dlbmVyYXRlZCAnZG94eXdpemFyZCcgYW5kIHRoZW4gaGFuZC10dW5lZC4KKyMKKyMgICAgICBBbGwgdGV4dCBhZnRlciBhIGhhc2ggKCMpIGlzIGNvbnNpZGVyZWQgYSBjb21tZW50IGFuZCB3aWxsIGJlCisjICAgICAgaWdub3JlZC4KKyMKKyMgICAgICBUaGUgZm9ybWF0IGlzOgorIworIyAgICAgICAgICBUQUcgPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMKKyMgICAgICBGb3IgbGlzdHMgaXRlbXMgY2FuIGFsc28gYmUgYXBwZW5kZWQgdXNpbmc6CisjCisjICAgICAgICAgIFRBRyArPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMKKyMgICAgICBWYWx1ZXMgdGhhdCBjb250YWluIHNwYWNlcyBzaG91bGQgYmUgcGxhY2VkIGJldHdlZW4gcXVvdGVzICgiICIpCisjCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoaXMgdGFnIHNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGNvbmZpZyBmaWxlCisjIHRoYXQgZm9sbG93LiBUaGUgZGVmYXVsdCBpcyBVVEYtOCB3aGljaCBpcyBhbHNvIHRoZSBlbmNvZGluZyB1c2VkIGZvciBhbGwgdGV4dAorIyBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhpcyB0YWcuIERveHlnZW4gdXNlcyBsaWJpY29udiAob3IgdGhlIGljb252CisjIGJ1aWx0IGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udgorIyBmb3IgdGhlIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogVVRGLTguCisKK0RPWFlGSUxFX0VOQ09ESU5HICAgICAgPSBVVEYtOAorCisjIFRoZSBQUk9KRUNUX05BTUUgdGFnIGlzIGEgc2luZ2xlIHdvcmQgKG9yIGEgc2VxdWVuY2Ugb2Ygd29yZHMgc3Vycm91bmRlZCBieQorIyBkb3VibGUtcXVvdGVzLCB1bmxlc3MgeW91IGFyZSB1c2luZyBEb3h5d2l6YXJkKSB0aGF0IHNob3VsZCBpZGVudGlmeSB0aGUKKyMgcHJvamVjdCBmb3Igd2hpY2ggdGhlIGRvY3VtZW50YXRpb24gaXMgZ2VuZXJhdGVkLiBUaGlzIG5hbWUgaXMgdXNlZCBpbiB0aGUKKyMgdGl0bGUgb2YgbW9zdCBnZW5lcmF0ZWQgcGFnZXMgYW5kIGluIGEgZmV3IG90aGVyIHBsYWNlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE15IFByb2plY3QuCisKK1BST0pFQ1RfTkFNRSAgICAgICAgICAgPSBPcGVuVGhyZWFkCisKKyMgVGhlIFBST0pFQ1RfTlVNQkVSIHRhZyBjYW4gYmUgdXNlZCB0byBlbnRlciBhIHByb2plY3Qgb3IgcmV2aXNpb24gbnVtYmVyLiBUaGlzCisjIGNvdWxkIGJlIGhhbmR5IGZvciBhcmNoaXZpbmcgdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIG9yIGlmIHNvbWUgdmVyc2lvbgorIyBjb250cm9sIHN5c3RlbSBpcyB1c2VkLgorCitQUk9KRUNUX05VTUJFUiAgICAgICAgID0gQFBBQ0tBR0VfVkVSU0lPTkAKKworIyBVc2luZyB0aGUgUFJPSkVDVF9CUklFRiB0YWcgb25lIGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIG9uZSBsaW5lIGRlc2NyaXB0aW9uCisjIGZvciBhIHByb2plY3QgdGhhdCBhcHBlYXJzIGF0IHRoZSB0b3Agb2YgZWFjaCBwYWdlIGFuZCBzaG91bGQgZ2l2ZSB2aWV3ZXIgYQorIyBxdWljayBpZGVhIGFib3V0IHRoZSBwdXJwb3NlIG9mIHRoZSBwcm9qZWN0LiBLZWVwIHRoZSBkZXNjcmlwdGlvbiBzaG9ydC4KKworUFJPSkVDVF9CUklFRiAgICAgICAgICA9CisKKyMgV2l0aCB0aGUgUFJPSkVDVF9MT0dPIHRhZyBvbmUgY2FuIHNwZWNpZnkgYW4gbG9nbyBvciBpY29uIHRoYXQgaXMgaW5jbHVkZWQgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24uIFRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgbG9nbyBzaG91bGQgbm90IGV4Y2VlZCA1NSBwaXhlbHMKKyMgYW5kIHRoZSBtYXhpbXVtIHdpZHRoIHNob3VsZCBub3QgZXhjZWVkIDIwMCBwaXhlbHMuIERveHlnZW4gd2lsbCBjb3B5IHRoZSBsb2dvCisjIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LgorCitQUk9KRUNUX0xPR08gICAgICAgICAgID0gQGFic19zcmNkaXJAL2ltYWdlcy9PcGVuLVRocmVhZC1Mb2dvLTIwMHg0Mi5wbmcKKworIyBUaGUgT1VUUFVUX0RJUkVDVE9SWSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSAocmVsYXRpdmUgb3IgYWJzb2x1dGUpIHBhdGgKKyMgaW50byB3aGljaCB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBiZSB3cml0dGVuLiBJZiBhIHJlbGF0aXZlIHBhdGggaXMKKyMgZW50ZXJlZCwgaXQgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gd2hlcmUgZG94eWdlbiB3YXMgc3RhcnRlZC4gSWYKKyMgbGVmdCBibGFuayB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkLgorCitPVVRQVVRfRElSRUNUT1JZICAgICAgID0gQGFic19idWlsZGRpckAKKworIyBJZiB0aGUgQ1JFQVRFX1NVQkRJUlMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIGNyZWF0ZSA0MDk2IHN1Yi0KKyMgZGlyZWN0b3JpZXMgKGluIDIgbGV2ZWxzKSB1bmRlciB0aGUgb3V0cHV0IGRpcmVjdG9yeSBvZiBlYWNoIG91dHB1dCBmb3JtYXQgYW5kCisjIHdpbGwgZGlzdHJpYnV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzIG92ZXIgdGhlc2UgZGlyZWN0b3JpZXMuIEVuYWJsaW5nIHRoaXMKKyMgb3B0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBmZWVkaW5nIGRveHlnZW4gYSBodWdlIGFtb3VudCBvZiBzb3VyY2UgZmlsZXMsIHdoZXJlCisjIHB1dHRpbmcgYWxsIGdlbmVyYXRlZCBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd291bGQgb3RoZXJ3aXNlIGNhdXNlcworIyBwZXJmb3JtYW5jZSBwcm9ibGVtcyBmb3IgdGhlIGZpbGUgc3lzdGVtLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0NSRUFURV9TVUJESVJTICAgICAgICAgPSBZRVMKKworIyBUaGUgT1VUUFVUX0xBTkdVQUdFIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGxhbmd1YWdlIGluIHdoaWNoIGFsbAorIyBkb2N1bWVudGF0aW9uIGdlbmVyYXRlZCBieSBkb3h5Z2VuIGlzIHdyaXR0ZW4uIERveHlnZW4gd2lsbCB1c2UgdGhpcworIyBpbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBhbGwgY29uc3RhbnQgb3V0cHV0IGluIHRoZSBwcm9wZXIgbGFuZ3VhZ2UuCisjIFBvc3NpYmxlIHZhbHVlcyBhcmU6IEFmcmlrYWFucywgQXJhYmljLCBBcm1lbmlhbiwgQnJhemlsaWFuLCBDYXRhbGFuLCBDaGluZXNlLAorIyBDaGluZXNlLVRyYWRpdGlvbmFsLCBDcm9hdGlhbiwgQ3plY2gsIERhbmlzaCwgRHV0Y2gsIEVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpLAorIyBFc3BlcmFudG8sIEZhcnNpIChQZXJzaWFuKSwgRmlubmlzaCwgRnJlbmNoLCBHZXJtYW4sIEdyZWVrLCBIdW5nYXJpYW4sCisjIEluZG9uZXNpYW4sIEl0YWxpYW4sIEphcGFuZXNlLCBKYXBhbmVzZS1lbiAoSmFwYW5lc2Ugd2l0aCBFbmdsaXNoIG1lc3NhZ2VzKSwKKyMgS29yZWFuLCBLb3JlYW4tZW4gKEtvcmVhbiB3aXRoIEVuZ2xpc2ggbWVzc2FnZXMpLCBMYXR2aWFuLCBMaXRodWFuaWFuLAorIyBNYWNlZG9uaWFuLCBOb3J3ZWdpYW4sIFBlcnNpYW4gKEZhcnNpKSwgUG9saXNoLCBQb3J0dWd1ZXNlLCBSb21hbmlhbiwgUnVzc2lhbiwKKyMgU2VyYmlhbiwgU2VyYmlhbi1DeXJpbGxpYywgU2xvdmFrLCBTbG92ZW5lLCBTcGFuaXNoLCBTd2VkaXNoLCBUdXJraXNoLAorIyBVa3JhaW5pYW4gYW5kIFZpZXRuYW1lc2UuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBFbmdsaXNoLgorCitPVVRQVVRfTEFOR1VBR0UgICAgICAgID0gRW5nbGlzaAorCisjIElmIHRoZSBCUklFRl9NRU1CRVJfREVTQyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgaW5jbHVkZSBicmllZiBtZW1iZXIKKyMgZGVzY3JpcHRpb25zIGFmdGVyIHRoZSBtZW1iZXJzIHRoYXQgYXJlIGxpc3RlZCBpbiB0aGUgZmlsZSBhbmQgY2xhc3MKKyMgZG9jdW1lbnRhdGlvbiAoc2ltaWxhciB0byBKYXZhZG9jKS4gU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworQlJJRUZfTUVNQkVSX0RFU0MgICAgICA9IFlFUworCisjIElmIHRoZSBSRVBFQVRfQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIHByZXBlbmQgdGhlIGJyaWVmCisjIGRlc2NyaXB0aW9uIG9mIGEgbWVtYmVyIG9yIGZ1bmN0aW9uIGJlZm9yZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24KKyMKKyMgTm90ZTogSWYgYm90aCBISURFX1VORE9DX01FTUJFUlMgYW5kIEJSSUVGX01FTUJFUl9ERVNDIGFyZSBzZXQgdG8gTk8sIHRoZQorIyBicmllZiBkZXNjcmlwdGlvbnMgd2lsbCBiZSBjb21wbGV0ZWx5IHN1cHByZXNzZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1JFUEVBVF9CUklFRiAgICAgICAgICAgPSBZRVMKKworIyBUaGlzIHRhZyBpbXBsZW1lbnRzIGEgcXVhc2ktaW50ZWxsaWdlbnQgYnJpZWYgZGVzY3JpcHRpb24gYWJicmV2aWF0b3IgdGhhdCBpcworIyB1c2VkIHRvIGZvcm0gdGhlIHRleHQgaW4gdmFyaW91cyBsaXN0aW5ncy4gRWFjaCBzdHJpbmcgaW4gdGhpcyBsaXN0LCBpZiBmb3VuZAorIyBhcyB0aGUgbGVhZGluZyB0ZXh0IG9mIHRoZSBicmllZiBkZXNjcmlwdGlvbiwgd2lsbCBiZSBzdHJpcHBlZCBmcm9tIHRoZSB0ZXh0CisjIGFuZCB0aGUgcmVzdWx0LCBhZnRlciBwcm9jZXNzaW5nIHRoZSB3aG9sZSBsaXN0LCBpcyB1c2VkIGFzIHRoZSBhbm5vdGF0ZWQKKyMgdGV4dC4gT3RoZXJ3aXNlLCB0aGUgYnJpZWYgZGVzY3JpcHRpb24gaXMgdXNlZCBhcy1pcy4gSWYgbGVmdCBibGFuaywgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHVzZWQgKCRuYW1lIGlzIGF1dG9tYXRpY2FsbHkgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZgorIyB0aGUgZW50aXR5KTpUaGUgJG5hbWUgY2xhc3MsIFRoZSAkbmFtZSB3aWRnZXQsIFRoZSAkbmFtZSBmaWxlLCBpcywgcHJvdmlkZXMsCisjIHNwZWNpZmllcywgY29udGFpbnMsIHJlcHJlc2VudHMsIGEsIGFuIGFuZCB0aGUuCisKK0FCQlJFVklBVEVfQlJJRUYgICAgICAgPSAiVGhlICRuYW1lIGNsYXNzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSAkbmFtZSB3aWRnZXQiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlICRuYW1lIGZpbGUiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFuIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKworIyBJZiB0aGUgQUxXQVlTX0RFVEFJTEVEX1NFQyBhbmQgUkVQRUFUX0JSSUVGIHRhZ3MgYXJlIGJvdGggc2V0IHRvIFlFUyB0aGVuCisjIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGRldGFpbGVkIHNlY3Rpb24gZXZlbiBpZiB0aGVyZSBpcyBvbmx5IGEgYnJpZWYKKyMgZGVzY3JpcHRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQUxXQVlTX0RFVEFJTEVEX1NFQyAgICA9IE5PCisKKyMgSWYgdGhlIElOTElORV9JTkhFUklURURfTUVNQiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHNob3cgYWxsCisjIGluaGVyaXRlZCBtZW1iZXJzIG9mIGEgY2xhc3MgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBjbGFzcyBhcyBpZiB0aG9zZQorIyBtZW1iZXJzIHdlcmUgb3JkaW5hcnkgY2xhc3MgbWVtYmVycy4gQ29uc3RydWN0b3JzLCBkZXN0cnVjdG9ycyBhbmQgYXNzaWdubWVudAorIyBvcGVyYXRvcnMgb2YgdGhlIGJhc2UgY2xhc3NlcyB3aWxsIG5vdCBiZSBzaG93bi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfSU5IRVJJVEVEX01FTUIgID0gTk8KKworIyBJZiB0aGUgRlVMTF9QQVRIX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBwcmVwZW5kIHRoZSBmdWxsIHBhdGgKKyMgYmVmb3JlIGZpbGVzIG5hbWUgaW4gdGhlIGZpbGUgbGlzdCBhbmQgaW4gdGhlIGhlYWRlciBmaWxlcy4gSWYgc2V0IHRvIE5PIHRoZQorIyBzaG9ydGVzdCBwYXRoIHRoYXQgbWFrZXMgdGhlIGZpbGUgbmFtZSB1bmlxdWUgd2lsbCBiZSB1c2VkCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0ZVTExfUEFUSF9OQU1FUyAgICAgICAgPSBZRVMKKworIyBUaGUgU1RSSVBfRlJPTV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIHRoZSBwYXRoLgorIyBTdHJpcHBpbmcgaXMgb25seSBkb25lIGlmIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHN0cmluZ3MgbWF0Y2hlcyB0aGUgbGVmdC1oYW5kCisjIHBhcnQgb2YgdGhlIHBhdGguIFRoZSB0YWcgY2FuIGJlIHVzZWQgdG8gc2hvdyByZWxhdGl2ZSBwYXRocyBpbiB0aGUgZmlsZSBsaXN0LgorIyBJZiBsZWZ0IGJsYW5rIHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCBkb3h5Z2VuIGlzIHJ1biBpcyB1c2VkIGFzIHRoZSBwYXRoIHRvCisjIHN0cmlwLgorIworIyBOb3RlIHRoYXQgeW91IGNhbiBzcGVjaWZ5IGFic29sdXRlIHBhdGhzIGhlcmUsIGJ1dCBhbHNvIHJlbGF0aXZlIHBhdGhzLCB3aGljaAorIyB3aWxsIGJlIHJlbGF0aXZlIGZyb20gdGhlIGRpcmVjdG9yeSB3aGVyZSBkb3h5Z2VuIGlzIHN0YXJ0ZWQuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBGVUxMX1BBVEhfTkFNRVMgaXMgc2V0IHRvIFlFUy4KKworU1RSSVBfRlJPTV9QQVRIICAgICAgICA9IEBhYnNfdG9wX3NyY2RpckAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIEBhYnNfdG9wX2J1aWxkZGlyQAorCisjIFRoZSBTVFJJUF9GUk9NX0lOQ19QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIHRoZQorIyBwYXRoIG1lbnRpb25lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBhIGNsYXNzLCB3aGljaCB0ZWxscyB0aGUgcmVhZGVyIHdoaWNoCisjIGhlYWRlciBmaWxlIHRvIGluY2x1ZGUgaW4gb3JkZXIgdG8gdXNlIGEgY2xhc3MuIElmIGxlZnQgYmxhbmsgb25seSB0aGUgbmFtZSBvZgorIyB0aGUgaGVhZGVyIGZpbGUgY29udGFpbmluZyB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyB1c2VkLiBPdGhlcndpc2Ugb25lIHNob3VsZAorIyBzcGVjaWZ5IHRoZSBsaXN0IG9mIGluY2x1ZGUgcGF0aHMgdGhhdCBhcmUgbm9ybWFsbHkgcGFzc2VkIHRvIHRoZSBjb21waWxlcgorIyB1c2luZyB0aGUgLUkgZmxhZy4KKworU1RSSVBfRlJPTV9JTkNfUEFUSCAgICA9IEBhYnNfdG9wX3NyY2RpckAKKworIyBJZiB0aGUgU0hPUlRfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBtdWNoIHNob3J0ZXIgKGJ1dAorIyBsZXNzIHJlYWRhYmxlKSBmaWxlIG5hbWVzLiBUaGlzIGNhbiBiZSB1c2VmdWwgaXMgeW91ciBmaWxlIHN5c3RlbXMgZG9lc24ndAorIyBzdXBwb3J0IGxvbmcgbmFtZXMgbGlrZSBvbiBET1MsIE1hYywgb3IgQ0QtUk9NLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NIT1JUX05BTUVTICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBKQVZBRE9DX0FVVE9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbnRlcnByZXQgdGhlCisjIGZpcnN0IGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgSmF2YWRvYy1zdHlsZSBjb21tZW50IGFzIHRoZSBicmllZgorIyBkZXNjcmlwdGlvbi4gSWYgc2V0IHRvIE5PLCB0aGUgSmF2YWRvYy1zdHlsZSB3aWxsIGJlaGF2ZSBqdXN0IGxpa2UgcmVndWxhciBRdC0KKyMgc3R5bGUgY29tbWVudHMgKHRodXMgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IEBicmllZiBjb21tYW5kIGZvciBhIGJyaWVmCisjIGRlc2NyaXB0aW9uLikKKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitKQVZBRE9DX0FVVE9CUklFRiAgICAgID0gWUVTCisKKyMgSWYgdGhlIFFUX0FVVE9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbnRlcnByZXQgdGhlIGZpcnN0CisjIGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgUXQtc3R5bGUgY29tbWVudCBhcyB0aGUgYnJpZWYgZGVzY3JpcHRpb24uIElmCisjIHNldCB0byBOTywgdGhlIFF0LXN0eWxlIHdpbGwgYmVoYXZlIGp1c3QgbGlrZSByZWd1bGFyIFF0LXN0eWxlIGNvbW1lbnRzICh0aHVzCisjIHJlcXVpcmluZyBhbiBleHBsaWNpdCBcYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4pCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUVRfQVVUT0JSSUVGICAgICAgICAgICA9IE5PCisKKyMgVGhlIE1VTFRJTElORV9DUFBfSVNfQlJJRUYgdGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIG1ha2UgZG94eWdlbiB0cmVhdCBhCisjIG11bHRpLWxpbmUgQysrIHNwZWNpYWwgY29tbWVudCBibG9jayAoaS5lLiBhIGJsb2NrIG9mIC8vISBvciAvLy8gY29tbWVudHMpIGFzCisjIGEgYnJpZWYgZGVzY3JpcHRpb24uIFRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhlIG5ldyBkZWZhdWx0IGlzCisjIHRvIHRyZWF0IGEgbXVsdGktbGluZSBDKysgY29tbWVudCBibG9jayBhcyBhIGRldGFpbGVkIGRlc2NyaXB0aW9uLiBTZXQgdGhpcworIyB0YWcgdG8gWUVTIGlmIHlvdSBwcmVmZXIgdGhlIG9sZCBiZWhhdmlvciBpbnN0ZWFkLgorIworIyBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIHRhZyB0byBZRVMgYWxzbyBtZWFucyB0aGF0IHJhdGlvbmFsIHJvc2UgY29tbWVudHMgYXJlCisjIG5vdCByZWNvZ25pemVkIGFueSBtb3JlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK01VTFRJTElORV9DUFBfSVNfQlJJRUYgPSBOTworCisjIElmIHRoZSBJTkhFUklUX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBhbiB1bmRvY3VtZW50ZWQgbWVtYmVyIGluaGVyaXRzIHRoZQorIyBkb2N1bWVudGF0aW9uIGZyb20gYW55IGRvY3VtZW50ZWQgbWVtYmVyIHRoYXQgaXQgcmUtaW1wbGVtZW50cy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworSU5IRVJJVF9ET0NTICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBTRVBBUkFURV9NRU1CRVJfUEFHRVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHByb2R1Y2UgYQorIyBuZXcgcGFnZSBmb3IgZWFjaCBtZW1iZXIuIElmIHNldCB0byBOTywgdGhlIGRvY3VtZW50YXRpb24gb2YgYSBtZW1iZXIgd2lsbCBiZQorIyBwYXJ0IG9mIHRoZSBmaWxlL2NsYXNzL25hbWVzcGFjZSB0aGF0IGNvbnRhaW5zIGl0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NFUEFSQVRFX01FTUJFUl9QQUdFUyAgPSBOTworCisjIFRoZSBUQUJfU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2Ygc3BhY2VzIGluIGEgdGFiLiBEb3h5Z2VuCisjIHVzZXMgdGhpcyB2YWx1ZSB0byByZXBsYWNlIHRhYnMgYnkgc3BhY2VzIGluIGNvZGUgZnJhZ21lbnRzLgorIyBNaW5pbXVtIHZhbHVlOiAxLCBtYXhpbXVtIHZhbHVlOiAxNiwgZGVmYXVsdCB2YWx1ZTogNC4KKworVEFCX1NJWkUgICAgICAgICAgICAgICA9IDQKKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbnVtYmVyIG9mIGFsaWFzZXMgdGhhdCBhY3QgYXMgY29tbWFuZHMgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24uIEFuIGFsaWFzIGhhcyB0aGUgZm9ybToKKyMgbmFtZT12YWx1ZQorIyBGb3IgZXhhbXBsZSBhZGRpbmcKKyMgInNpZGVlZmZlY3Q9QHBhciBTaWRlIEVmZmVjdHM6XG4iCisjIHdpbGwgYWxsb3cgeW91IHRvIHB1dCB0aGUgY29tbWFuZCBcc2lkZWVmZmVjdCAob3IgQHNpZGVlZmZlY3QpIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIHVzZXItZGVmaW5lZCBwYXJhZ3JhcGggd2l0aCBoZWFkaW5nCisjICJTaWRlIEVmZmVjdHM6Ii4gWW91IGNhbiBwdXQgXG4ncyBpbiB0aGUgdmFsdWUgcGFydCBvZiBhbiBhbGlhcyB0byBpbnNlcnQKKyMgbmV3bGluZXMuCisKK0FMSUFTRVMgICAgICAgICAgICAgICAgPQorCisjIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBudW1iZXIgb2Ygd29yZC1rZXl3b3JkIG1hcHBpbmdzIChUQ0wgb25seSkuCisjIEEgbWFwcGluZyBoYXMgdGhlIGZvcm0gIm5hbWU9dmFsdWUiLiBGb3IgZXhhbXBsZSBhZGRpbmcgImNsYXNzPWl0Y2w6OmNsYXNzIgorIyB3aWxsIGFsbG93IHlvdSB0byB1c2UgdGhlIGNvbW1hbmQgY2xhc3MgaW4gdGhlIGl0Y2w6OmNsYXNzIG1lYW5pbmcuCisKK1RDTF9TVUJTVCAgICAgICAgICAgICAgPQorCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0ZPUl9DIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIEMgc291cmNlcworIyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkIGZvciBDLiBGb3IKKyMgaW5zdGFuY2UsIHNvbWUgb2YgdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgd2lsbCBiZSBkaWZmZXJlbnQuIFRoZSBsaXN0IG9mIGFsbAorIyBtZW1iZXJzIHdpbGwgYmUgb21pdHRlZCwgZXRjLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK09QVElNSVpFX09VVFBVVF9GT1JfQyAgPSBOTworCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0pBVkEgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgSmF2YSBvcgorIyBQeXRob24gc291cmNlcyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkCisjIGZvciB0aGF0IGxhbmd1YWdlLiBGb3IgaW5zdGFuY2UsIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50ZWQgYXMgcGFja2FnZXMsCisjIHF1YWxpZmllZCBzY29wZXMgd2lsbCBsb29rIGRpZmZlcmVudCwgZXRjLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK09QVElNSVpFX09VVFBVVF9KQVZBICAgPSBOTworCisjIFNldCB0aGUgT1BUSU1JWkVfRk9SX0ZPUlRSQU4gdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgRm9ydHJhbgorIyBzb3VyY2VzLiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyB0YWlsb3JlZCBmb3IgRm9ydHJhbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitPUFRJTUlaRV9GT1JfRk9SVFJBTiAgID0gTk8KKworIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9WSERMIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIFZIREwKKyMgc291cmNlcy4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgdGFpbG9yZWQgZm9yIFZIREwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworT1BUSU1JWkVfT1VUUFVUX1ZIREwgICA9IE5PCisKKyMgRG94eWdlbiBzZWxlY3RzIHRoZSBwYXJzZXIgdG8gdXNlIGRlcGVuZGluZyBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlcyBpdAorIyBwYXJzZXMuIFdpdGggdGhpcyB0YWcgeW91IGNhbiBhc3NpZ24gd2hpY2ggcGFyc2VyIHRvIHVzZSBmb3IgYSBnaXZlbgorIyBleHRlbnNpb24uIERveHlnZW4gaGFzIGEgYnVpbHQtaW4gbWFwcGluZywgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgb3IgZXh0ZW5kIGl0CisjIHVzaW5nIHRoaXMgdGFnLiBUaGUgZm9ybWF0IGlzIGV4dD1sYW5ndWFnZSwgd2hlcmUgZXh0IGlzIGEgZmlsZSBleHRlbnNpb24sIGFuZAorIyBsYW5ndWFnZSBpcyBvbmUgb2YgdGhlIHBhcnNlcnMgc3VwcG9ydGVkIGJ5IGRveHlnZW46IElETCwgSmF2YSwgSmF2YXNjcmlwdCwKKyMgQyMsIEMsIEMrKywgRCwgUEhQLCBPYmplY3RpdmUtQywgUHl0aG9uLCBGb3J0cmFuLCBWSERMLiBGb3IgaW5zdGFuY2UgdG8gbWFrZQorIyBkb3h5Z2VuIHRyZWF0IC5pbmMgZmlsZXMgYXMgRm9ydHJhbiBmaWxlcyAoZGVmYXVsdCBpcyBQSFApLCBhbmQgLmYgZmlsZXMgYXMgQworIyAoZGVmYXVsdCBpcyBGb3J0cmFuKSwgdXNlOiBpbmM9Rm9ydHJhbiBmPUMuCisjCisjIE5vdGUgRm9yIGZpbGVzIHdpdGhvdXQgZXh0ZW5zaW9uIHlvdSBjYW4gdXNlIG5vX2V4dGVuc2lvbiBhcyBhIHBsYWNlaG9sZGVyLgorIworIyBOb3RlIHRoYXQgZm9yIGN1c3RvbSBleHRlbnNpb25zIHlvdSBhbHNvIG5lZWQgdG8gc2V0IEZJTEVfUEFUVEVSTlMgb3RoZXJ3aXNlCisjIHRoZSBmaWxlcyBhcmUgbm90IHJlYWQgYnkgZG94eWdlbi4KKworRVhURU5TSU9OX01BUFBJTkcgICAgICA9CisKKyMgSWYgdGhlIE1BUktET1dOX1NVUFBPUlQgdGFnIGlzIGVuYWJsZWQgdGhlbiBkb3h5Z2VuIHByZS1wcm9jZXNzZXMgYWxsIGNvbW1lbnRzCisjIGFjY29yZGluZyB0byB0aGUgTWFya2Rvd24gZm9ybWF0LCB3aGljaCBhbGxvd3MgZm9yIG1vcmUgcmVhZGFibGUKKyMgZG9jdW1lbnRhdGlvbi4gU2VlIGh0dHA6Ly9kYXJpbmdmaXJlYmFsbC5uZXQvcHJvamVjdHMvbWFya2Rvd24vIGZvciBkZXRhaWxzLgorIyBUaGUgb3V0cHV0IG9mIG1hcmtkb3duIHByb2Nlc3NpbmcgaXMgZnVydGhlciBwcm9jZXNzZWQgYnkgZG94eWdlbiwgc28geW91IGNhbgorIyBtaXggZG94eWdlbiwgSFRNTCwgYW5kIFhNTCBjb21tYW5kcyB3aXRoIE1hcmtkb3duIGZvcm1hdHRpbmcuIERpc2FibGUgb25seSBpbgorIyBjYXNlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdGllcyBpc3N1ZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK01BUktET1dOX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBXaGVuIGVuYWJsZWQgZG94eWdlbiB0cmllcyB0byBsaW5rIHdvcmRzIHRoYXQgY29ycmVzcG9uZCB0byBkb2N1bWVudGVkCisjIGNsYXNzZXMsIG9yIG5hbWVzcGFjZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uLiBTdWNoIGEgbGluayBjYW4KKyMgYmUgcHJldmVudGVkIGluIGluZGl2aWR1YWwgY2FzZXMgYnkgYnkgcHV0dGluZyBhICUgc2lnbiBpbiBmcm9udCBvZiB0aGUgd29yZAorIyBvciBnbG9iYWxseSBieSBzZXR0aW5nIEFVVE9MSU5LX1NVUFBPUlQgdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0FVVE9MSU5LX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBJZiB5b3UgdXNlIFNUTCBjbGFzc2VzIChpLmUuIHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvciwgZXRjLikgYnV0IGRvIG5vdCB3YW50CisjIHRvIGluY2x1ZGUgKGEgdGFnIGZpbGUgZm9yKSB0aGUgU1RMIHNvdXJjZXMgYXMgaW5wdXQsIHRoZW4geW91IHNob3VsZCBzZXQgdGhpcworIyB0YWcgdG8gWUVTIGluIG9yZGVyIHRvIGxldCBkb3h5Z2VuIG1hdGNoIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbnMgYW5kCisjIGRlZmluaXRpb25zIHdob3NlIGFyZ3VtZW50cyBjb250YWluIFNUTCBjbGFzc2VzIChlLmcuIGZ1bmMoc3RkOjpzdHJpbmcpOworIyB2ZXJzdXMgZnVuYyhzdGQ6OnN0cmluZykge30pLiBUaGlzIGFsc28gbWFrZSB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24KKyMgZGlhZ3JhbXMgdGhhdCBpbnZvbHZlIFNUTCBjbGFzc2VzIG1vcmUgY29tcGxldGUgYW5kIGFjY3VyYXRlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0JVSUxUSU5fU1RMX1NVUFBPUlQgICAgPSBOTworCisjIElmIHlvdSB1c2UgTWljcm9zb2Z0J3MgQysrL0NMSSBsYW5ndWFnZSwgeW91IHNob3VsZCBzZXQgdGhpcyBvcHRpb24gdG8gWUVTIHRvCisjIGVuYWJsZSBwYXJzaW5nIHN1cHBvcnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQ1BQX0NMSV9TVVBQT1JUICAgICAgICA9IE5PCisKKyMgU2V0IHRoZSBTSVBfU1VQUE9SVCB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBzaXAgKHNlZToKKyMgaHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvc2lwL2ludHJvKSBzb3VyY2VzIG9ubHkuIERveHlnZW4KKyMgd2lsbCBwYXJzZSB0aGVtIGxpa2Ugbm9ybWFsIEMrKyBidXQgd2lsbCBhc3N1bWUgYWxsIGNsYXNzZXMgdXNlIHB1YmxpYyBpbnN0ZWFkCisjIG9mIHByaXZhdGUgaW5oZXJpdGFuY2Ugd2hlbiBubyBleHBsaWNpdCBwcm90ZWN0aW9uIGtleXdvcmQgaXMgcHJlc2VudC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTSVBfU1VQUE9SVCAgICAgICAgICAgID0gTk8KKworIyBGb3IgTWljcm9zb2Z0J3MgSURMIHRoZXJlIGFyZSBwcm9wZ2V0IGFuZCBwcm9wcHV0IGF0dHJpYnV0ZXMgdG8gaW5kaWNhdGUKKyMgZ2V0dGVyIGFuZCBzZXR0ZXIgbWV0aG9kcyBmb3IgYSBwcm9wZXJ0eS4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byBZRVMgd2lsbCBtYWtlCisjIGRveHlnZW4gdG8gcmVwbGFjZSB0aGUgZ2V0IGFuZCBzZXQgbWV0aG9kcyBieSBhIHByb3BlcnR5IGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBtZXRob2RzIGFyZSBpbmRlZWQgZ2V0dGluZyBvciBzZXR0aW5nIGEgc2ltcGxlCisjIHR5cGUuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBvciB5b3Ugd2FudCB0byBzaG93IHRoZSBtZXRob2RzIGFueXdheSwgeW91CisjIHNob3VsZCBzZXQgdGhpcyBvcHRpb24gdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0lETF9QUk9QRVJUWV9TVVBQT1JUICAgPSBZRVMKKworIyBJZiBtZW1iZXIgZ3JvdXBpbmcgaXMgdXNlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIERJU1RSSUJVVEVfR1JPVVBfRE9DCisjIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCByZXVzZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZmlyc3QKKyMgbWVtYmVyIGluIHRoZSBncm91cCAoaWYgYW55KSBmb3IgdGhlIG90aGVyIG1lbWJlcnMgb2YgdGhlIGdyb3VwLiBCeSBkZWZhdWx0CisjIGFsbCBtZW1iZXJzIG9mIGEgZ3JvdXAgbXVzdCBiZSBkb2N1bWVudGVkIGV4cGxpY2l0bHkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRElTVFJJQlVURV9HUk9VUF9ET0MgICA9IE5PCisKKyMgU2V0IHRoZSBTVUJHUk9VUElORyB0YWcgdG8gWUVTIHRvIGFsbG93IGNsYXNzIG1lbWJlciBncm91cHMgb2YgdGhlIHNhbWUgdHlwZQorIyAoZm9yIGluc3RhbmNlIGEgZ3JvdXAgb2YgcHVibGljIGZ1bmN0aW9ucykgdG8gYmUgcHV0IGFzIGEgc3ViZ3JvdXAgb2YgdGhhdAorIyB0eXBlIChlLmcuIHVuZGVyIHRoZSBQdWJsaWMgRnVuY3Rpb25zIHNlY3Rpb24pLiBTZXQgaXQgdG8gTk8gdG8gcHJldmVudAorIyBzdWJncm91cGluZy4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgZG9uZSBwZXIgY2xhc3MgdXNpbmcgdGhlCisjIFxub3N1Ymdyb3VwaW5nIGNvbW1hbmQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NVQkdST1VQSU5HICAgICAgICAgICAgPSBZRVMKKworIyBXaGVuIHRoZSBJTkxJTkVfR1JPVVBFRF9DTEFTU0VTIHRhZyBpcyBzZXQgdG8gWUVTLCBjbGFzc2VzLCBzdHJ1Y3RzIGFuZCB1bmlvbnMKKyMgYXJlIHNob3duIGluc2lkZSB0aGUgZ3JvdXAgaW4gd2hpY2ggdGhleSBhcmUgaW5jbHVkZWQgKGUuZy4gdXNpbmcgXGluZ3JvdXApCisjIGluc3RlYWQgb2Ygb24gYSBzZXBhcmF0ZSBwYWdlIChmb3IgSFRNTCBhbmQgTWFuIHBhZ2VzKSBvciBzZWN0aW9uIChmb3IgTGFUZVgKKyMgYW5kIFJURikuCisjCisjIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgZG9lcyBub3Qgd29yayBpbiBjb21iaW5hdGlvbiB3aXRoCisjIFNFUEFSQVRFX01FTUJFUl9QQUdFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfR1JPVVBFRF9DTEFTU0VTID0gTk8KKworIyBXaGVuIHRoZSBJTkxJTkVfU0lNUExFX1NUUlVDVFMgdGFnIGlzIHNldCB0byBZRVMsIHN0cnVjdHMsIGNsYXNzZXMsIGFuZCB1bmlvbnMKKyMgd2l0aCBvbmx5IHB1YmxpYyBkYXRhIGZpZWxkcyBvciBzaW1wbGUgdHlwZWRlZiBmaWVsZHMgd2lsbCBiZSBzaG93biBpbmxpbmUgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIHNjb3BlIGluIHdoaWNoIHRoZXkgYXJlIGRlZmluZWQgKGkuZS4gZmlsZSwKKyMgbmFtZXNwYWNlLCBvciBncm91cCBkb2N1bWVudGF0aW9uKSwgcHJvdmlkZWQgdGhpcyBzY29wZSBpcyBkb2N1bWVudGVkLiBJZiBzZXQKKyMgdG8gTk8sIHN0cnVjdHMsIGNsYXNzZXMsIGFuZCB1bmlvbnMgYXJlIHNob3duIG9uIGEgc2VwYXJhdGUgcGFnZSAoZm9yIEhUTUwgYW5kCisjIE1hbiBwYWdlcykgb3Igc2VjdGlvbiAoZm9yIExhVGVYIGFuZCBSVEYpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0lOTElORV9TSU1QTEVfU1RSVUNUUyAgPSBOTworCisjIFdoZW4gVFlQRURFRl9ISURFU19TVFJVQ1QgdGFnIGlzIGVuYWJsZWQsIGEgdHlwZWRlZiBvZiBhIHN0cnVjdCwgdW5pb24sIG9yCisjIGVudW0gaXMgZG9jdW1lbnRlZCBhcyBzdHJ1Y3QsIHVuaW9uLCBvciBlbnVtIHdpdGggdGhlIG5hbWUgb2YgdGhlIHR5cGVkZWYuIFNvCisjIHR5cGVkZWYgc3RydWN0IFR5cGVTIHt9IFR5cGVULCB3aWxsIGFwcGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhcyBhIHN0cnVjdAorIyB3aXRoIG5hbWUgVHlwZVQuIFdoZW4gZGlzYWJsZWQgdGhlIHR5cGVkZWYgd2lsbCBhcHBlYXIgYXMgYSBtZW1iZXIgb2YgYSBmaWxlLAorIyBuYW1lc3BhY2UsIG9yIGNsYXNzLiBBbmQgdGhlIHN0cnVjdCB3aWxsIGJlIG5hbWVkIFR5cGVTLiBUaGlzIGNhbiB0eXBpY2FsbHkgYmUKKyMgdXNlZnVsIGZvciBDIGNvZGUgaW4gY2FzZSB0aGUgY29kaW5nIGNvbnZlbnRpb24gZGljdGF0ZXMgdGhhdCBhbGwgY29tcG91bmQKKyMgdHlwZXMgYXJlIHR5cGVkZWYnZWQgYW5kIG9ubHkgdGhlIHR5cGVkZWYgaXMgcmVmZXJlbmNlZCwgbmV2ZXIgdGhlIHRhZyBuYW1lLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1RZUEVERUZfSElERVNfU1RSVUNUICAgPSBOTworCisjIFRoZSBzaXplIG9mIHRoZSBzeW1ib2wgbG9va3VwIGNhY2hlIGNhbiBiZSBzZXQgdXNpbmcgTE9PS1VQX0NBQ0hFX1NJWkUuIFRoaXMKKyMgY2FjaGUgaXMgdXNlZCB0byByZXNvbHZlIHN5bWJvbHMgZ2l2ZW4gdGhlaXIgbmFtZSBhbmQgc2NvcGUuIFNpbmNlIHRoaXMgY2FuIGJlCisjIGFuIGV4cGVuc2l2ZSBwcm9jZXNzIGFuZCBvZnRlbiB0aGUgc2FtZSBzeW1ib2wgYXBwZWFycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUKKyMgY29kZSwgZG94eWdlbiBrZWVwcyBhIGNhY2hlIG9mIHByZS1yZXNvbHZlZCBzeW1ib2xzLiBJZiB0aGUgY2FjaGUgaXMgdG9vIHNtYWxsCisjIGRveHlnZW4gd2lsbCBiZWNvbWUgc2xvd2VyLiBJZiB0aGUgY2FjaGUgaXMgdG9vIGxhcmdlLCBtZW1vcnkgaXMgd2FzdGVkLiBUaGUKKyMgY2FjaGUgc2l6ZSBpcyBnaXZlbiBieSB0aGlzIGZvcm11bGE6IDJeKDE2K0xPT0tVUF9DQUNIRV9TSVpFKS4gVGhlIHZhbGlkIHJhbmdlCisjIGlzIDAuLjksIHRoZSBkZWZhdWx0IGlzIDAsIGNvcnJlc3BvbmRpbmcgdG8gYSBjYWNoZSBzaXplIG9mIDJeMTY9NjU1MzYKKyMgc3ltYm9scy4gQXQgdGhlIGVuZCBvZiBhIHJ1biBkb3h5Z2VuIHdpbGwgcmVwb3J0IHRoZSBjYWNoZSB1c2FnZSBhbmQgc3VnZ2VzdAorIyB0aGUgb3B0aW1hbCBjYWNoZSBzaXplIGZyb20gYSBzcGVlZCBwb2ludCBvZiB2aWV3LgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiA5LCBkZWZhdWx0IHZhbHVlOiAwLgorCitMT09LVVBfQ0FDSEVfU0laRSAgICAgID0gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJ1aWxkIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEVYVFJBQ1RfQUxMIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBhc3N1bWUgYWxsIGVudGl0aWVzIGluCisjIGRvY3VtZW50YXRpb24gYXJlIGRvY3VtZW50ZWQsIGV2ZW4gaWYgbm8gZG9jdW1lbnRhdGlvbiB3YXMgYXZhaWxhYmxlLiBQcml2YXRlCisjIGNsYXNzIG1lbWJlcnMgYW5kIHN0YXRpYyBmaWxlIG1lbWJlcnMgd2lsbCBiZSBoaWRkZW4gdW5sZXNzIHRoZQorIyBFWFRSQUNUX1BSSVZBVEUgcmVzcGVjdGl2ZWx5IEVYVFJBQ1RfU1RBVElDIHRhZ3MgYXJlIHNldCB0byBZRVMuCisjIE5vdGU6IFRoaXMgd2lsbCBhbHNvIGRpc2FibGUgdGhlIHdhcm5pbmdzIGFib3V0IHVuZG9jdW1lbnRlZCBtZW1iZXJzIHRoYXQgYXJlCisjIG5vcm1hbGx5IHByb2R1Y2VkIHdoZW4gV0FSTklOR1MgaXMgc2V0IHRvIFlFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWFRSQUNUX0FMTCAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgRVhUUkFDVF9QUklWQVRFIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBwcml2YXRlIG1lbWJlcnMgb2YgYSBjbGFzcyB3aWxsCisjIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYVFJBQ1RfUFJJVkFURSAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFRSQUNUX1BBQ0tBR0UgdGFnIGlzIHNldCB0byBZRVMgYWxsIG1lbWJlcnMgd2l0aCBwYWNrYWdlIG9yIGludGVybmFsCisjIHNjb3BlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9QQUNLQUdFICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfU1RBVElDIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBzdGF0aWMgbWVtYmVycyBvZiBhIGZpbGUgd2lsbCBiZQorIyBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWFRSQUNUX1NUQVRJQyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYVFJBQ1RfTE9DQUxfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUyBjbGFzc2VzIChhbmQgc3RydWN0cykgZGVmaW5lZAorIyBsb2NhbGx5IGluIHNvdXJjZSBmaWxlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gTk8KKyMgb25seSBjbGFzc2VzIGRlZmluZWQgaW4gaGVhZGVyIGZpbGVzIGFyZSBpbmNsdWRlZC4gRG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0CisjIGZvciBKYXZhIHNvdXJjZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VYVFJBQ1RfTE9DQUxfQ0xBU1NFUyAgPSBZRVMKKworIyBUaGlzIGZsYWcgaXMgb25seSB1c2VmdWwgZm9yIE9iamVjdGl2ZS1DIGNvZGUuIFdoZW4gc2V0IHRvIFlFUyBsb2NhbCBtZXRob2RzLAorIyB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gc2VjdGlvbiBidXQgbm90IGluIHRoZSBpbnRlcmZhY2UgYXJlCisjIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gTk8gb25seSBtZXRob2RzIGluIHRoZSBpbnRlcmZhY2UgYXJlCisjIGluY2x1ZGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYVFJBQ1RfTE9DQUxfTUVUSE9EUyAgPSBOTworCisjIElmIHRoaXMgZmxhZyBpcyBzZXQgdG8gWUVTLCB0aGUgbWVtYmVycyBvZiBhbm9ueW1vdXMgbmFtZXNwYWNlcyB3aWxsIGJlCisjIGV4dHJhY3RlZCBhbmQgYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFzIGEgbmFtZXNwYWNlIGNhbGxlZAorIyAnYW5vbnltb3VzX25hbWVzcGFjZXtmaWxlfScsIHdoZXJlIGZpbGUgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBiYXNlIG5hbWUgb2YKKyMgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgYW5vbnltb3VzIG5hbWVzcGFjZS4gQnkgZGVmYXVsdCBhbm9ueW1vdXMgbmFtZXNwYWNlCisjIGFyZSBoaWRkZW4uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9BTk9OX05TUEFDRVMgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfVU5ET0NfTUVNQkVSUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGhpZGUgYWxsCisjIHVuZG9jdW1lbnRlZCBtZW1iZXJzIGluc2lkZSBkb2N1bWVudGVkIGNsYXNzZXMgb3IgZmlsZXMuIElmIHNldCB0byBOTyB0aGVzZQorIyBtZW1iZXJzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHZhcmlvdXMgb3ZlcnZpZXdzLCBidXQgbm8gZG9jdW1lbnRhdGlvbgorIyBzZWN0aW9uIGlzIGdlbmVyYXRlZC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiBFWFRSQUNUX0FMTCBpcyBlbmFibGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0hJREVfVU5ET0NfTUVNQkVSUyAgICAgPSBOTworCisjIElmIHRoZSBISURFX1VORE9DX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBoaWRlIGFsbAorIyB1bmRvY3VtZW50ZWQgY2xhc3NlcyB0aGF0IGFyZSBub3JtYWxseSB2aXNpYmxlIGluIHRoZSBjbGFzcyBoaWVyYXJjaHkuIElmIHNldAorIyB0byBOTyB0aGVzZSBjbGFzc2VzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHZhcmlvdXMgb3ZlcnZpZXdzLiBUaGlzIG9wdGlvbiBoYXMKKyMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9VTkRPQ19DTEFTU0VTICAgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfRlJJRU5EX0NPTVBPVU5EUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGhpZGUgYWxsIGZyaWVuZAorIyAoY2xhc3N8c3RydWN0fHVuaW9uKSBkZWNsYXJhdGlvbnMuIElmIHNldCB0byBOTyB0aGVzZSBkZWNsYXJhdGlvbnMgd2lsbCBiZQorIyBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitISURFX0ZSSUVORF9DT01QT1VORFMgID0gTk8KKworIyBJZiB0aGUgSElERV9JTl9CT0RZX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBoaWRlIGFueQorIyBkb2N1bWVudGF0aW9uIGJsb2NrcyBmb3VuZCBpbnNpZGUgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbi4gSWYgc2V0IHRvIE5PIHRoZXNlCisjIGJsb2NrcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBmdW5jdGlvbidzIGRldGFpbGVkIGRvY3VtZW50YXRpb24gYmxvY2suCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9JTl9CT0RZX0RPQ1MgICAgICA9IE5PCisKKyMgVGhlIElOVEVSTkFMX0RPQ1MgdGFnIGRldGVybWluZXMgaWYgZG9jdW1lbnRhdGlvbiB0aGF0IGlzIHR5cGVkIGFmdGVyIGEKKyMgXGludGVybmFsIGNvbW1hbmQgaXMgaW5jbHVkZWQuIElmIHRoZSB0YWcgaXMgc2V0IHRvIE5PIHRoZW4gdGhlIGRvY3VtZW50YXRpb24KKyMgd2lsbCBiZSBleGNsdWRlZC4gU2V0IGl0IHRvIFlFUyB0byBpbmNsdWRlIHRoZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0lOVEVSTkFMX0RPQ1MgICAgICAgICAgPSBOTworCisjIElmIHRoZSBDQVNFX1NFTlNFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gdGhlbiBkb3h5Z2VuIHdpbGwgb25seSBnZW5lcmF0ZSBmaWxlCisjIG5hbWVzIGluIGxvd2VyLWNhc2UgbGV0dGVycy4gSWYgc2V0IHRvIFlFUyB1cHBlci1jYXNlIGxldHRlcnMgYXJlIGFsc28KKyMgYWxsb3dlZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgY2xhc3NlcyBvciBmaWxlcyB3aG9zZSBuYW1lcyBvbmx5IGRpZmZlcgorIyBpbiBjYXNlIGFuZCBpZiB5b3VyIGZpbGUgc3lzdGVtIHN1cHBvcnRzIGNhc2Ugc2Vuc2l0aXZlIGZpbGUgbmFtZXMuIFdpbmRvd3MKKyMgYW5kIE1hYyB1c2VycyBhcmUgYWR2aXNlZCB0byBzZXQgdGhpcyBvcHRpb24gdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBzeXN0ZW0gZGVwZW5kZW50LgorCitDQVNFX1NFTlNFX05BTUVTICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEhJREVfU0NPUEVfTkFNRVMgdGFnIGlzIHNldCB0byBOTyB0aGVuIGRveHlnZW4gd2lsbCBzaG93IG1lbWJlcnMgd2l0aAorIyB0aGVpciBmdWxsIGNsYXNzIGFuZCBuYW1lc3BhY2Ugc2NvcGVzIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gWUVTIHRoZQorIyBzY29wZSB3aWxsIGJlIGhpZGRlbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitISURFX1NDT1BFX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU0hPV19JTkNMVURFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHB1dCBhIGxpc3Qgb2YKKyMgdGhlIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5IGEgZmlsZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGZpbGUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NIT1dfSU5DTFVERV9GSUxFUyAgICAgPSBZRVMKKworIyBJZiB0aGUgU0hPV19HUk9VUEVEX01FTUJfSU5DIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbiB3aWxsIGFkZCBmb3IgZWFjaAorIyBncm91cGVkIG1lbWJlciBhbiBpbmNsdWRlIHN0YXRlbWVudCB0byB0aGUgZG9jdW1lbnRhdGlvbiwgdGVsbGluZyB0aGUgcmVhZGVyCisjIHdoaWNoIGZpbGUgdG8gaW5jbHVkZSBpbiBvcmRlciB0byB1c2UgdGhlIG1lbWJlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTSE9XX0dST1VQRURfTUVNQl9JTkMgID0gTk8KKworIyBJZiB0aGUgRk9SQ0VfTE9DQUxfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgbGlzdCBpbmNsdWRlCisjIGZpbGVzIHdpdGggZG91YmxlIHF1b3RlcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiByYXRoZXIgdGhhbiB3aXRoIHNoYXJwIGJyYWNrZXRzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0ZPUkNFX0xPQ0FMX0lOQ0xVREVTICAgPSBOTworCisjIElmIHRoZSBJTkxJTkVfSU5GTyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGEgdGFnIFtpbmxpbmVdIGlzIGluc2VydGVkIGluIHRoZQorIyBkb2N1bWVudGF0aW9uIGZvciBpbmxpbmUgbWVtYmVycy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworSU5MSU5FX0lORk8gICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBTT1JUX01FTUJFUl9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHNvcnQgdGhlCisjIChkZXRhaWxlZCkgZG9jdW1lbnRhdGlvbiBvZiBmaWxlIGFuZCBjbGFzcyBtZW1iZXJzIGFscGhhYmV0aWNhbGx5IGJ5IG1lbWJlcgorIyBuYW1lLiBJZiBzZXQgdG8gTk8gdGhlIG1lbWJlcnMgd2lsbCBhcHBlYXIgaW4gZGVjbGFyYXRpb24gb3JkZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NPUlRfTUVNQkVSX0RPQ1MgICAgICAgPSBZRVMKKworIyBJZiB0aGUgU09SVF9CUklFRl9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHNvcnQgdGhlIGJyaWVmCisjIGRlc2NyaXB0aW9ucyBvZiBmaWxlLCBuYW1lc3BhY2UgYW5kIGNsYXNzIG1lbWJlcnMgYWxwaGFiZXRpY2FsbHkgYnkgbWVtYmVyCisjIG5hbWUuIElmIHNldCB0byBOTyB0aGUgbWVtYmVycyB3aWxsIGFwcGVhciBpbiBkZWNsYXJhdGlvbiBvcmRlci4gTm90ZSB0aGF0CisjIHRoaXMgd2lsbCBhbHNvIGluZmx1ZW5jZSB0aGUgb3JkZXIgb2YgdGhlIGNsYXNzZXMgaW4gdGhlIGNsYXNzIGxpc3QuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU09SVF9CUklFRl9ET0NTICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFNPUlRfTUVNQkVSU19DVE9SU18xU1QgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUKKyMgKGJyaWVmIGFuZCBkZXRhaWxlZCkgZG9jdW1lbnRhdGlvbiBvZiBjbGFzcyBtZW1iZXJzIHNvIHRoYXQgY29uc3RydWN0b3JzIGFuZAorIyBkZXN0cnVjdG9ycyBhcmUgbGlzdGVkIGZpcnN0LiBJZiBzZXQgdG8gTk8gdGhlIGNvbnN0cnVjdG9ycyB3aWxsIGFwcGVhciBpbiB0aGUKKyMgcmVzcGVjdGl2ZSBvcmRlcnMgZGVmaW5lZCBieSBTT1JUX0JSSUVGX0RPQ1MgYW5kIFNPUlRfTUVNQkVSX0RPQ1MuCisjIE5vdGU6IElmIFNPUlRfQlJJRUZfRE9DUyBpcyBzZXQgdG8gTk8gdGhpcyBvcHRpb24gaXMgaWdub3JlZCBmb3Igc29ydGluZyBicmllZgorIyBtZW1iZXIgZG9jdW1lbnRhdGlvbi4KKyMgTm90ZTogSWYgU09SVF9NRU1CRVJfRE9DUyBpcyBzZXQgdG8gTk8gdGhpcyBvcHRpb24gaXMgaWdub3JlZCBmb3Igc29ydGluZworIyBkZXRhaWxlZCBtZW1iZXIgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX01FTUJFUlNfQ1RPUlNfMVNUID0gTk8KKworIyBJZiB0aGUgU09SVF9HUk9VUF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZSBoaWVyYXJjaHkKKyMgb2YgZ3JvdXAgbmFtZXMgaW50byBhbHBoYWJldGljYWwgb3JkZXIuIElmIHNldCB0byBOTyB0aGUgZ3JvdXAgbmFtZXMgd2lsbAorIyBhcHBlYXIgaW4gdGhlaXIgZGVmaW5lZCBvcmRlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX0dST1VQX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU09SVF9CWV9TQ09QRV9OQU1FIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgY2xhc3MgbGlzdCB3aWxsIGJlIHNvcnRlZCBieQorIyBmdWxseS1xdWFsaWZpZWQgbmFtZXMsIGluY2x1ZGluZyBuYW1lc3BhY2VzLiBJZiBzZXQgdG8gTk8sIHRoZSBjbGFzcyBsaXN0IHdpbGwKKyMgYmUgc29ydGVkIG9ubHkgYnkgY2xhc3MgbmFtZSwgbm90IGluY2x1ZGluZyB0aGUgbmFtZXNwYWNlIHBhcnQuCisjIE5vdGU6IFRoaXMgb3B0aW9uIGlzIG5vdCB2ZXJ5IHVzZWZ1bCBpZiBISURFX1NDT1BFX05BTUVTIGlzIHNldCB0byBZRVMuCisjIE5vdGU6IFRoaXMgb3B0aW9uIGFwcGxpZXMgb25seSB0byB0aGUgY2xhc3MgbGlzdCwgbm90IHRvIHRoZSBhbHBoYWJldGljYWwKKyMgbGlzdC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX0JZX1NDT1BFX05BTUUgICAgID0gTk8KKworIyBJZiB0aGUgU1RSSUNUX1BST1RPX01BVENISU5HIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBkb3h5Z2VuIGZhaWxzIHRvIGRvIHByb3BlcgorIyB0eXBlIHJlc29sdXRpb24gb2YgYWxsIHBhcmFtZXRlcnMgb2YgYSBmdW5jdGlvbiBpdCB3aWxsIHJlamVjdCBhIG1hdGNoIGJldHdlZW4KKyMgdGhlIHByb3RvdHlwZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgbWVtYmVyIGZ1bmN0aW9uIGV2ZW4gaWYgdGhlcmUgaXMKKyMgb25seSBvbmUgY2FuZGlkYXRlIG9yIGl0IGlzIG9idmlvdXMgd2hpY2ggY2FuZGlkYXRlIHRvIGNob29zZSBieSBkb2luZyBhCisjIHNpbXBsZSBzdHJpbmcgbWF0Y2guIEJ5IGRpc2FibGluZyBTVFJJQ1RfUFJPVE9fTUFUQ0hJTkcgZG94eWdlbiB3aWxsIHN0aWxsCisjIGFjY2VwdCBhIG1hdGNoIGJldHdlZW4gcHJvdG90eXBlIGFuZCBpbXBsZW1lbnRhdGlvbiBpbiBzdWNoIGNhc2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NUUklDVF9QUk9UT19NQVRDSElORyAgPSBOTworCisjIFRoZSBHRU5FUkFURV9UT0RPTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlICggWUVTKSBvciBkaXNhYmxlICggTk8pIHRoZQorIyB0b2RvIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXHRvZG8gY29tbWFuZHMgaW4gdGhlCisjIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX1RPRE9MSVNUICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfVEVTVExJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoIFlFUykgb3IgZGlzYWJsZSAoIE5PKSB0aGUKKyMgdGVzdCBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFx0ZXN0IGNvbW1hbmRzIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitHRU5FUkFURV9URVNUTElTVCAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX0JVR0xJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoIFlFUykgb3IgZGlzYWJsZSAoIE5PKSB0aGUgYnVnCisjIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXGJ1ZyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfQlVHTElTVCAgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9ERVBSRUNBVEVETElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlICggWUVTKSBvciBkaXNhYmxlICggTk8pCisjIHRoZSBkZXByZWNhdGVkIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXGRlcHJlY2F0ZWQgY29tbWFuZHMgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX0RFUFJFQ0FURURMSVNUPSBZRVMKKworIyBUaGUgRU5BQkxFRF9TRUNUSU9OUyB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGNvbmRpdGlvbmFsIGRvY3VtZW50YXRpb24KKyMgc2VjdGlvbnMsIG1hcmtlZCBieSBcaWYgPHNlY3Rpb25fbGFiZWw+IC4uLiBcZW5kaWYgYW5kIFxjb25kIDxzZWN0aW9uX2xhYmVsPgorIyAuLi4gXGVuZGNvbmQgYmxvY2tzLgorCitFTkFCTEVEX1NFQ1RJT05TICAgICAgID0KKworIyBUaGUgTUFYX0lOSVRJQUxJWkVSX0xJTkVTIHRhZyBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0aGF0IHRoZQorIyBpbml0aWFsIHZhbHVlIG9mIGEgdmFyaWFibGUgb3IgbWFjcm8gLyBkZWZpbmUgY2FuIGhhdmUgZm9yIGl0IHRvIGFwcGVhciBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbi4gSWYgdGhlIGluaXRpYWxpemVyIGNvbnNpc3RzIG9mIG1vcmUgbGluZXMgdGhhbiBzcGVjaWZpZWQgaGVyZQorIyBpdCB3aWxsIGJlIGhpZGRlbi4gVXNlIGEgdmFsdWUgb2YgMCB0byBoaWRlIGluaXRpYWxpemVycyBjb21wbGV0ZWx5LiBUaGUKKyMgYXBwZWFyYW5jZSBvZiB0aGUgdmFsdWUgb2YgaW5kaXZpZHVhbCB2YXJpYWJsZXMgYW5kIG1hY3JvcyAvIGRlZmluZXMgY2FuIGJlCisjIGNvbnRyb2xsZWQgdXNpbmcgXHNob3dpbml0aWFsaXplciBvciBcaGlkZWluaXRpYWxpemVyIGNvbW1hbmQgaW4gdGhlCisjIGRvY3VtZW50YXRpb24gcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDEwMDAwLCBkZWZhdWx0IHZhbHVlOiAzMC4KKworTUFYX0lOSVRJQUxJWkVSX0xJTkVTICA9IDMwCisKKyMgU2V0IHRoZSBTSE9XX1VTRURfRklMRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGxpc3Qgb2YgZmlsZXMgZ2VuZXJhdGVkIGF0CisjIHRoZSBib3R0b20gb2YgdGhlIGRvY3VtZW50YXRpb24gb2YgY2xhc3NlcyBhbmQgc3RydWN0cy4gSWYgc2V0IHRvIFlFUyB0aGUgbGlzdAorIyB3aWxsIG1lbnRpb24gdGhlIGZpbGVzIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTSE9XX1VTRURfRklMRVMgICAgICAgID0gWUVTCisKKyMgU2V0IHRoZSBTSE9XX0ZJTEVTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBGaWxlcyBwYWdlLiBUaGlzCisjIHdpbGwgcmVtb3ZlIHRoZSBGaWxlcyBlbnRyeSBmcm9tIHRoZSBRdWljayBJbmRleCBhbmQgZnJvbSB0aGUgRm9sZGVyIFRyZWUgVmlldworIyAoaWYgc3BlY2lmaWVkKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU0hPV19GSUxFUyAgICAgICAgICAgICA9IFlFUworCisjIFNldCB0aGUgU0hPV19OQU1FU1BBQ0VTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBOYW1lc3BhY2VzCisjIHBhZ2UuIFRoaXMgd2lsbCByZW1vdmUgdGhlIE5hbWVzcGFjZXMgZW50cnkgZnJvbSB0aGUgUXVpY2sgSW5kZXggYW5kIGZyb20gdGhlCisjIEZvbGRlciBUcmVlIFZpZXcgKGlmIHNwZWNpZmllZCkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NIT1dfTkFNRVNQQUNFUyAgICAgICAgPSBZRVMKKworIyBUaGUgRklMRV9WRVJTSU9OX0ZJTFRFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHByb2dyYW0gb3Igc2NyaXB0IHRoYXQKKyMgZG94eWdlbiBzaG91bGQgaW52b2tlIHRvIGdldCB0aGUgY3VycmVudCB2ZXJzaW9uIGZvciBlYWNoIGZpbGUgKHR5cGljYWxseSBmcm9tCisjIHRoZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtKS4gRG94eWdlbiB3aWxsIGludm9rZSB0aGUgcHJvZ3JhbSBieSBleGVjdXRpbmcgKHZpYQorIyBwb3BlbigpKSB0aGUgY29tbWFuZCBjb21tYW5kIGlucHV0LWZpbGUsIHdoZXJlIGNvbW1hbmQgaXMgdGhlIHZhbHVlIG9mIHRoZQorIyBGSUxFX1ZFUlNJT05fRklMVEVSIHRhZywgYW5kIGlucHV0LWZpbGUgaXMgdGhlIG5hbWUgb2YgYW4gaW5wdXQgZmlsZSBwcm92aWRlZAorIyBieSBkb3h5Z2VuLiBXaGF0ZXZlciB0aGUgcHJvZ3JhbSB3cml0ZXMgdG8gc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQgYXMgdGhlIGZpbGUKKyMgdmVyc2lvbi4gRm9yIGFuIGV4YW1wbGUgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorCitGSUxFX1ZFUlNJT05fRklMVEVSICAgID0KKworIyBUaGUgTEFZT1VUX0ZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBsYXlvdXQgZmlsZSB3aGljaCB3aWxsIGJlIHBhcnNlZAorIyBieSBkb3h5Z2VuLiBUaGUgbGF5b3V0IGZpbGUgY29udHJvbHMgdGhlIGdsb2JhbCBzdHJ1Y3R1cmUgb2YgdGhlIGdlbmVyYXRlZAorIyBvdXRwdXQgZmlsZXMgaW4gYW4gb3V0cHV0IGZvcm1hdCBpbmRlcGVuZGVudCB3YXkuIFRvIGNyZWF0ZSB0aGUgbGF5b3V0IGZpbGUKKyMgdGhhdCByZXByZXNlbnRzIGRveHlnZW4ncyBkZWZhdWx0cywgcnVuIGRveHlnZW4gd2l0aCB0aGUgLWwgb3B0aW9uLiBZb3UgY2FuCisjIG9wdGlvbmFsbHkgc3BlY2lmeSBhIGZpbGUgbmFtZSBhZnRlciB0aGUgb3B0aW9uLCBpZiBvbWl0dGVkIERveHlnZW5MYXlvdXQueG1sCisjIHdpbGwgYmUgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgbGF5b3V0IGZpbGUuCisjCisjIE5vdGUgdGhhdCBpZiB5b3UgcnVuIGRveHlnZW4gZnJvbSBhIGRpcmVjdG9yeSBjb250YWluaW5nIGEgZmlsZSBjYWxsZWQKKyMgRG94eWdlbkxheW91dC54bWwsIGRveHlnZW4gd2lsbCBwYXJzZSBpdCBhdXRvbWF0aWNhbGx5IGV2ZW4gaWYgdGhlIExBWU9VVF9GSUxFCisjIHRhZyBpcyBsZWZ0IGVtcHR5LgorCitMQVlPVVRfRklMRSAgICAgICAgICAgID0KKworIyBUaGUgQ0lURV9CSUJfRklMRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgYmliIGZpbGVzIGNvbnRhaW5pbmcKKyMgdGhlIHJlZmVyZW5jZSBkZWZpbml0aW9ucy4gVGhpcyBtdXN0IGJlIGEgbGlzdCBvZiAuYmliIGZpbGVzLiBUaGUgLmJpYgorIyBleHRlbnNpb24gaXMgYXV0b21hdGljYWxseSBhcHBlbmRlZCBpZiBvbWl0dGVkLiBUaGlzIHJlcXVpcmVzIHRoZSBiaWJ0ZXggdG9vbAorIyB0byBiZSBpbnN0YWxsZWQuIFNlZSBhbHNvIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmliVGVYIGZvciBtb3JlIGluZm8uCisjIEZvciBMYVRlWCB0aGUgc3R5bGUgb2YgdGhlIGJpYmxpb2dyYXBoeSBjYW4gYmUgY29udHJvbGxlZCB1c2luZworIyBMQVRFWF9CSUJfU1RZTEUuIFRvIHVzZSB0aGlzIGZlYXR1cmUgeW91IG5lZWQgYmlidGV4IGFuZCBwZXJsIGF2YWlsYWJsZSBpbiB0aGUKKyMgc2VhcmNoIHBhdGguIERvIG5vdCB1c2UgZmlsZSBuYW1lcyB3aXRoIHNwYWNlcywgYmlidGV4IGNhbm5vdCBoYW5kbGUgdGhlbS4gU2VlCisjIGFsc28gXGNpdGUgZm9yIGluZm8gaG93IHRvIGNyZWF0ZSByZWZlcmVuY2VzLgorCitDSVRFX0JJQl9GSUxFUyAgICAgICAgID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBRVUlFVCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIGdlbmVyYXRlZCB0bworIyBzdGFuZGFyZCBvdXRwdXQgYnkgZG94eWdlbi4gSWYgUVVJRVQgaXMgc2V0IHRvIFlFUyB0aGlzIGltcGxpZXMgdGhhdCB0aGUKKyMgbWVzc2FnZXMgYXJlIG9mZi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitRVUlFVCAgICAgICAgICAgICAgICAgID0gTk8KKworIyBUaGUgV0FSTklOR1MgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgYXJlCisjIGdlbmVyYXRlZCB0byBzdGFuZGFyZCBlcnJvciAoIHN0ZGVycikgYnkgZG94eWdlbi4gSWYgV0FSTklOR1MgaXMgc2V0IHRvIFlFUworIyB0aGlzIGltcGxpZXMgdGhhdCB0aGUgd2FybmluZ3MgYXJlIG9uLgorIworIyBUaXA6IFR1cm4gd2FybmluZ3Mgb24gd2hpbGUgd3JpdGluZyB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworV0FSTklOR1MgICAgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBXQVJOX0lGX1VORE9DVU1FTlRFRCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUKKyMgd2FybmluZ3MgZm9yIHVuZG9jdW1lbnRlZCBtZW1iZXJzLiBJZiBFWFRSQUNUX0FMTCBpcyBzZXQgdG8gWUVTIHRoZW4gdGhpcyBmbGFnCisjIHdpbGwgYXV0b21hdGljYWxseSBiZSBkaXNhYmxlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworV0FSTl9JRl9VTkRPQ1VNRU5URUQgICA9IFlFUworCisjIElmIHRoZSBXQVJOX0lGX0RPQ19FUlJPUiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIHdhcm5pbmdzIGZvcgorIyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBkb2N1bWVudGF0aW9uLCBzdWNoIGFzIG5vdCBkb2N1bWVudGluZyBzb21lIHBhcmFtZXRlcnMKKyMgaW4gYSBkb2N1bWVudGVkIGZ1bmN0aW9uLCBvciBkb2N1bWVudGluZyBwYXJhbWV0ZXJzIHRoYXQgZG9uJ3QgZXhpc3Qgb3IgdXNpbmcKKyMgbWFya3VwIGNvbW1hbmRzIHdyb25nbHkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1dBUk5fSUZfRE9DX0VSUk9SICAgICAgPSBZRVMKKworIyBUaGlzIFdBUk5fTk9fUEFSQU1ET0Mgb3B0aW9uIGNhbiBiZSBlbmFibGVkIHRvIGdldCB3YXJuaW5ncyBmb3IgZnVuY3Rpb25zIHRoYXQKKyMgYXJlIGRvY3VtZW50ZWQsIGJ1dCBoYXZlIG5vIGRvY3VtZW50YXRpb24gZm9yIHRoZWlyIHBhcmFtZXRlcnMgb3IgcmV0dXJuCisjIHZhbHVlLiBJZiBzZXQgdG8gTk8gZG94eWdlbiB3aWxsIG9ubHkgd2FybiBhYm91dCB3cm9uZyBvciBpbmNvbXBsZXRlIHBhcmFtZXRlcgorIyBkb2N1bWVudGF0aW9uLCBidXQgbm90IGFib3V0IHRoZSBhYnNlbmNlIG9mIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworV0FSTl9OT19QQVJBTURPQyAgICAgICA9IE5PCisKKyMgVGhlIFdBUk5fRk9STUFUIHRhZyBkZXRlcm1pbmVzIHRoZSBmb3JtYXQgb2YgdGhlIHdhcm5pbmcgbWVzc2FnZXMgdGhhdCBkb3h5Z2VuCisjIGNhbiBwcm9kdWNlLiBUaGUgc3RyaW5nIHNob3VsZCBjb250YWluIHRoZSAkZmlsZSwgJGxpbmUsIGFuZCAkdGV4dCB0YWdzLCB3aGljaAorIyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBmcm9tIHdoaWNoIHRoZSB3YXJuaW5nIG9yaWdpbmF0ZWQKKyMgYW5kIHRoZSB3YXJuaW5nIHRleHQuIE9wdGlvbmFsbHkgdGhlIGZvcm1hdCBtYXkgY29udGFpbiAkdmVyc2lvbiwgd2hpY2ggd2lsbAorIyBiZSByZXBsYWNlZCBieSB0aGUgdmVyc2lvbiBvZiB0aGUgZmlsZSAoaWYgaXQgY291bGQgYmUgb2J0YWluZWQgdmlhCisjIEZJTEVfVkVSU0lPTl9GSUxURVIpCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiAkZmlsZTokbGluZTogJHRleHQuCisKK1dBUk5fRk9STUFUICAgICAgICAgICAgPSAiJGZpbGU6JGxpbmU6ICR0ZXh0IgorCisjIFRoZSBXQVJOX0xPR0ZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBmaWxlIHRvIHdoaWNoIHdhcm5pbmcgYW5kIGVycm9yCisjIG1lc3NhZ2VzIHNob3VsZCBiZSB3cml0dGVuLiBJZiBsZWZ0IGJsYW5rIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiB0byBzdGFuZGFyZAorIyBlcnJvciAoc3RkZXJyKS4KKworV0FSTl9MT0dGSUxFICAgICAgICAgICA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGlucHV0IGZpbGVzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIElOUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4KKyMgZG9jdW1lbnRlZCBzb3VyY2UgZmlsZXMuIFlvdSBtYXkgZW50ZXIgZmlsZSBuYW1lcyBsaWtlIG15ZmlsZS5jcHAgb3IKKyMgZGlyZWN0b3JpZXMgbGlrZSAvdXNyL3NyYy9teXByb2plY3QuIFNlcGFyYXRlIHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcyB3aXRoCisjIHNwYWNlcy4KKyMgTm90ZTogSWYgdGhpcyB0YWcgaXMgZW1wdHkgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHNlYXJjaGVkLgorCitJTlBVVCAgICAgICAgICAgICAgICAgID0gQGFic190b3BfYnVpbGRkaXJAL3NyYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgQGFic190b3Bfc3JjZGlyQC9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBAYWJzX3RvcF9zcmNkaXJAL2RvYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgQGFic190b3Bfc3JjZGlyQC9SRUFETUUubWQKKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgdGhlIHNvdXJjZSBmaWxlcworIyB0aGF0IGRveHlnZW4gcGFyc2VzLiBJbnRlcm5hbGx5IGRveHlnZW4gdXNlcyB0aGUgVVRGLTggZW5jb2RpbmcuIERveHlnZW4gdXNlcworIyBsaWJpY29udiAob3IgdGhlIGljb252IGJ1aWx0IGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIHRoZSBsaWJpY29udgorIyBkb2N1bWVudGF0aW9uIChzZWU6IGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udikgZm9yIHRoZSBsaXN0IG9mCisjIHBvc3NpYmxlIGVuY29kaW5ncy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFVURi04LgorCitJTlBVVF9FTkNPRElORyAgICAgICAgID0gVVRGLTgKKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIElOUFVUIHRhZyBjb250YWlucyBkaXJlY3RvcmllcywgeW91IGNhbiB1c2UgdGhlCisjIEZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybnMgKGxpa2UgKi5jcHAgYW5kCisjICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuayB0aGUKKyMgZm9sbG93aW5nIHBhdHRlcm5zIGFyZSB0ZXN0ZWQ6Ki5jLCAqLmNjLCAqLmN4eCwgKi5jcHAsICouYysrLCAqLmphdmEsICouaWksCisjICouaXh4LCAqLmlwcCwgKi5pKyssICouaW5sLCAqLmlkbCwgKi5kZGwsICoub2RsLCAqLmgsICouaGgsICouaHh4LCAqLmhwcCwKKyMgKi5oKyssICouY3MsICouZCwgKi5waHAsICoucGhwNCwgKi5waHA1LCAqLnBodG1sLCAqLmluYywgKi5tLCAqLm1hcmtkb3duLAorIyAqLm1kLCAqLm1tLCAqLmRveCwgKi5weSwgKi5mOTAsICouZiwgKi5mb3IsICoudGNsLCAqLnZoZCwgKi52aGRsLCAqLnVjZiwKKyMgKi5xc2YsICouYXMgYW5kICouanMuCisKK0ZJTEVfUEFUVEVSTlMgICAgICAgICAgPSAqLmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouY2MgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouY3h4IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmNwcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5jKysgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5qYXZhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmlpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLml4eCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5pcHAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaSsrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmlubCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmhoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmh4eCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5ocHAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaCsrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmlkbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5vZGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouY3MgXAorICAgICAgICAgICAgICAgICAgICAgICAgICoucGhwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLnBocDMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaW5jIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLm0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICoubW0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICouZG94IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLnB5IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmY5MCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5mIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmZvciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi52aGQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICoudmhkbAorCisjIFRoZSBSRUNVUlNJVkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciBvciBub3Qgc3ViZGlyZWN0b3JpZXMgc2hvdWxkCisjIGJlIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyBhcyB3ZWxsLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1JFQ1VSU0lWRSAgICAgICAgICAgICAgPSBZRVMKKworIyBUaGUgRVhDTFVERSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUKKyMgZXhjbHVkZWQgZnJvbSB0aGUgSU5QVVQgc291cmNlIGZpbGVzLiBUaGlzIHdheSB5b3UgY2FuIGVhc2lseSBleGNsdWRlIGEKKyMgc3ViZGlyZWN0b3J5IGZyb20gYSBkaXJlY3RvcnkgdHJlZSB3aG9zZSByb290IGlzIHNwZWNpZmllZCB3aXRoIHRoZSBJTlBVVCB0YWcuCisjCisjIE5vdGUgdGhhdCByZWxhdGl2ZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRveHlnZW4gaXMKKyMgcnVuLgorCitFWENMVURFICAgICAgICAgICAgICAgID0gLi4vc3JjL25jcC9uY3AucGItYy5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAuLi9zcmMvbmNwL25jcC5wYi1jLmMKKworIyBUaGUgRVhDTFVERV9TWU1MSU5LUyB0YWcgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHdoZXRoZXIgb3Igbm90IGZpbGVzIG9yCisjIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHN5bWJvbGljIGxpbmtzIChhIFVuaXggZmlsZSBzeXN0ZW0gZmVhdHVyZSkgYXJlIGV4Y2x1ZGVkCisjIGZyb20gdGhlIGlucHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYQ0xVREVfU1lNTElOS1MgICAgICAgPSBOTworCisjIElmIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVQgdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUKKyMgRVhDTFVERV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJucyB0byBleGNsdWRlCisjIGNlcnRhaW4gZmlsZXMgZnJvbSB0aG9zZSBkaXJlY3Rvcmllcy4KKyMKKyMgTm90ZSB0aGF0IHRoZSB3aWxkY2FyZHMgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmlsZSB3aXRoIGFic29sdXRlIHBhdGgsIHNvIHRvCisjIGV4Y2x1ZGUgYWxsIHRlc3QgZGlyZWN0b3JpZXMgZm9yIGV4YW1wbGUgdXNlIHRoZSBwYXR0ZXJuICovdGVzdC8qCisKK0VYQ0xVREVfUEFUVEVSTlMgICAgICAgPQorCisjIFRoZSBFWENMVURFX1NZTUJPTFMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgc3ltYm9sIG5hbWVzCisjIChuYW1lc3BhY2VzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGV0Yy4pIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlCisjIG91dHB1dC4gVGhlIHN5bWJvbCBuYW1lIGNhbiBiZSBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lLCBhIHdvcmQsIG9yIGlmIHRoZQorIyB3aWxkY2FyZCAqIGlzIHVzZWQsIGEgc3Vic3RyaW5nLiBFeGFtcGxlczogQU5hbWVzcGFjZSwgQUNsYXNzLAorIyBBQ2xhc3M6OkFOYW1lc3BhY2UsIEFOYW1lc3BhY2U6OipUZXN0CisjCisjIE5vdGUgdGhhdCB0aGUgd2lsZGNhcmRzIGFyZSBtYXRjaGVkIGFnYWluc3QgdGhlIGZpbGUgd2l0aCBhYnNvbHV0ZSBwYXRoLCBzbyB0bworIyBleGNsdWRlIGFsbCB0ZXN0IGRpcmVjdG9yaWVzIHVzZSB0aGUgcGF0dGVybiAqL3Rlc3QvKgorCitFWENMVURFX1NZTUJPTFMgICAgICAgID0KKworIyBUaGUgRVhBTVBMRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCisjIHRoYXQgY29udGFpbiBleGFtcGxlIGNvZGUgZnJhZ21lbnRzIHRoYXQgYXJlIGluY2x1ZGVkIChzZWUgdGhlIFxpbmNsdWRlCisjIGNvbW1hbmQpLgorCitFWEFNUExFX1BBVEggICAgICAgICAgID0KKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIEVYQU1QTEVfUEFUSCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZQorIyBFWEFNUExFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm4gKGxpa2UgKi5jcHAgYW5kCisjICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuayBhbGwKKyMgZmlsZXMgYXJlIGluY2x1ZGVkLgorCitFWEFNUExFX1BBVFRFUk5TICAgICAgID0gKgorCisjIElmIHRoZSBFWEFNUExFX1JFQ1VSU0lWRSB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHN1YmRpcmVjdG9yaWVzIHdpbGwgYmUKKyMgc2VhcmNoZWQgZm9yIGlucHV0IGZpbGVzIHRvIGJlIHVzZWQgd2l0aCB0aGUgXGluY2x1ZGUgb3IgXGRvbnRpbmNsdWRlIGNvbW1hbmRzCisjIGlycmVzcGVjdGl2ZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFJFQ1VSU0lWRSB0YWcuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhBTVBMRV9SRUNVUlNJVkUgICAgICA9IE5PCisKKyMgVGhlIElNQUdFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZmlsZXMgb3IgZGlyZWN0b3JpZXMKKyMgdGhhdCBjb250YWluIGltYWdlcyB0aGF0IGFyZSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZQorIyBcaW1hZ2UgY29tbWFuZCkuCisKK0lNQUdFX1BBVEggICAgICAgICAgICAgPSBAYWJzX3NyY2RpckAvaW1hZ2VzLworCisjIFRoZSBJTlBVVF9GSUxURVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcm9ncmFtIHRoYXQgZG94eWdlbiBzaG91bGQKKyMgaW52b2tlIHRvIGZpbHRlciBmb3IgZWFjaCBpbnB1dCBmaWxlLiBEb3h5Z2VuIHdpbGwgaW52b2tlIHRoZSBmaWx0ZXIgcHJvZ3JhbQorIyBieSBleGVjdXRpbmcgKHZpYSBwb3BlbigpKSB0aGUgY29tbWFuZDoKKyMKKyMgPGZpbHRlcj4gPGlucHV0LWZpbGU+CisjCisjIHdoZXJlIDxmaWx0ZXI+IGlzIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVRfRklMVEVSIHRhZywgYW5kIDxpbnB1dC1maWxlPiBpcyB0aGUKKyMgbmFtZSBvZiBhbiBpbnB1dCBmaWxlLiBEb3h5Z2VuIHdpbGwgdGhlbiB1c2UgdGhlIG91dHB1dCB0aGF0IHRoZSBmaWx0ZXIKKyMgcHJvZ3JhbSB3cml0ZXMgdG8gc3RhbmRhcmQgb3V0cHV0LiBJZiBGSUxURVJfUEFUVEVSTlMgaXMgc3BlY2lmaWVkLCB0aGlzIHRhZworIyB3aWxsIGJlIGlnbm9yZWQuCisjCisjIE5vdGUgdGhhdCB0aGUgZmlsdGVyIG11c3Qgbm90IGFkZCBvciByZW1vdmUgbGluZXM7IGl0IGlzIGFwcGxpZWQgYmVmb3JlIHRoZQorIyBjb2RlIGlzIHNjYW5uZWQsIGJ1dCBub3Qgd2hlbiB0aGUgb3V0cHV0IGNvZGUgaXMgZ2VuZXJhdGVkLiBJZiBsaW5lcyBhcmUgYWRkZWQKKyMgb3IgcmVtb3ZlZCwgdGhlIGFuY2hvcnMgd2lsbCBub3QgYmUgcGxhY2VkIGNvcnJlY3RseS4KKworSU5QVVRfRklMVEVSICAgICAgICAgICA9CisKKyMgVGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWx0ZXJzIG9uIGEgcGVyIGZpbGUgcGF0dGVybgorIyBiYXNpcy4gRG94eWdlbiB3aWxsIGNvbXBhcmUgdGhlIGZpbGUgbmFtZSB3aXRoIGVhY2ggcGF0dGVybiBhbmQgYXBwbHkgdGhlCisjIGZpbHRlciBpZiB0aGVyZSBpcyBhIG1hdGNoLiBUaGUgZmlsdGVycyBhcmUgYSBsaXN0IG9mIHRoZSBmb3JtOiBwYXR0ZXJuPWZpbHRlcgorIyAobGlrZSAqLmNwcD1teV9jcHBfZmlsdGVyKS4gU2VlIElOUFVUX0ZJTFRFUiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBob3cKKyMgZmlsdGVycyBhcmUgdXNlZC4gSWYgdGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgaXMgZW1wdHkgb3IgaWYgbm9uZSBvZiB0aGUKKyMgcGF0dGVybnMgbWF0Y2ggdGhlIGZpbGUgbmFtZSwgSU5QVVRfRklMVEVSIGlzIGFwcGxpZWQuCisKK0ZJTFRFUl9QQVRURVJOUyAgICAgICAgPQorCisjIElmIHRoZSBGSUxURVJfU09VUkNFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgaW5wdXQgZmlsdGVyIChpZiBzZXQgdXNpbmcKKyMgSU5QVVRfRklMVEVSICkgd2lsbCBhbHNvIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSBpbnB1dCBmaWxlcyB0aGF0IGFyZSB1c2VkIGZvcgorIyBwcm9kdWNpbmcgdGhlIHNvdXJjZSBmaWxlcyB0byBicm93c2UgKGkuZS4gd2hlbiBTT1VSQ0VfQlJPV1NFUiBpcyBzZXQgdG8gWUVTKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitGSUxURVJfU09VUkNFX0ZJTEVTICAgID0gTk8KKworIyBUaGUgRklMVEVSX1NPVVJDRV9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBzb3VyY2UgZmlsdGVycyBwZXIgZmlsZQorIyBwYXR0ZXJuLiBBIHBhdHRlcm4gd2lsbCBvdmVycmlkZSB0aGUgc2V0dGluZyBmb3IgRklMVEVSX1BBVFRFUk4gKGlmIGFueSkgYW5kCisjIGl0IGlzIGFsc28gcG9zc2libGUgdG8gZGlzYWJsZSBzb3VyY2UgZmlsdGVyaW5nIGZvciBhIHNwZWNpZmljIHBhdHRlcm4gdXNpbmcKKyMgKi5leHQ9IChzbyB3aXRob3V0IG5hbWluZyBhIGZpbHRlcikuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBGSUxURVJfU09VUkNFX0ZJTEVTIGlzIHNldCB0byBZRVMuCisKK0ZJTFRFUl9TT1VSQ0VfUEFUVEVSTlMgPQorCisjIElmIHRoZSBVU0VfTURGSUxFX0FTX01BSU5QQUdFIHRhZyByZWZlcnMgdG8gdGhlIG5hbWUgb2YgYSBtYXJrZG93biBmaWxlIHRoYXQKKyMgaXMgcGFydCBvZiB0aGUgaW5wdXQsIGl0cyBjb250ZW50cyB3aWxsIGJlIHBsYWNlZCBvbiB0aGUgbWFpbiBwYWdlCisjIChpbmRleC5odG1sKS4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBoYXZlIGEgcHJvamVjdCBvbiBmb3IgaW5zdGFuY2UgR2l0SHViCisjIGFuZCB3YW50IHRvIHJldXNlIHRoZSBpbnRyb2R1Y3Rpb24gcGFnZSBhbHNvIGZvciB0aGUgZG94eWdlbiBvdXRwdXQuCisKK1VTRV9NREZJTEVfQVNfTUFJTlBBR0UgPSBSRUFETUUubWQKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBzb3VyY2UgYnJvd3NpbmcKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgU09VUkNFX0JST1dTRVIgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBhIGxpc3Qgb2Ygc291cmNlIGZpbGVzIHdpbGwgYmUKKyMgZ2VuZXJhdGVkLiBEb2N1bWVudGVkIGVudGl0aWVzIHdpbGwgYmUgY3Jvc3MtcmVmZXJlbmNlZCB3aXRoIHRoZXNlIHNvdXJjZXMuCisjCisjIE5vdGU6IFRvIGdldCByaWQgb2YgYWxsIHNvdXJjZSBjb2RlIGluIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LCBtYWtlIHN1cmUgdGhhdAorIyBhbHNvIFZFUkJBVElNX0hFQURFUlMgaXMgc2V0IHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NPVVJDRV9CUk9XU0VSICAgICAgICAgPSBOTworCisjIFNldHRpbmcgdGhlIElOTElORV9TT1VSQ0VTIHRhZyB0byBZRVMgd2lsbCBpbmNsdWRlIHRoZSBib2R5IG9mIGZ1bmN0aW9ucywKKyMgY2xhc3NlcyBhbmQgZW51bXMgZGlyZWN0bHkgaW50byB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfU09VUkNFUyAgICAgICAgID0gTk8KKworIyBTZXR0aW5nIHRoZSBTVFJJUF9DT0RFX0NPTU1FTlRTIHRhZyB0byBZRVMgd2lsbCBpbnN0cnVjdCBkb3h5Z2VuIHRvIGhpZGUgYW55CisjIHNwZWNpYWwgY29tbWVudCBibG9ja3MgZnJvbSBnZW5lcmF0ZWQgc291cmNlIGNvZGUgZnJhZ21lbnRzLiBOb3JtYWwgQywgQysrIGFuZAorIyBGb3J0cmFuIGNvbW1lbnRzIHdpbGwgYWx3YXlzIHJlbWFpbiB2aXNpYmxlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTVFJJUF9DT0RFX0NPTU1FTlRTICAgID0gWUVTCisKKyMgSWYgdGhlIFJFRkVSRU5DRURfQllfUkVMQVRJT04gdGFnIGlzIHNldCB0byBZRVMgdGhlbiBmb3IgZWFjaCBkb2N1bWVudGVkCisjIGZ1bmN0aW9uIGFsbCBkb2N1bWVudGVkIGZ1bmN0aW9ucyByZWZlcmVuY2luZyBpdCB3aWxsIGJlIGxpc3RlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OID0gTk8KKworIyBJZiB0aGUgUkVGRVJFTkNFU19SRUxBVElPTiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGZvciBlYWNoIGRvY3VtZW50ZWQgZnVuY3Rpb24KKyMgYWxsIGRvY3VtZW50ZWQgZW50aXRpZXMgY2FsbGVkL3VzZWQgYnkgdGhhdCBmdW5jdGlvbiB3aWxsIGJlIGxpc3RlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitSRUZFUkVOQ0VTX1JFTEFUSU9OICAgID0gTk8KKworIyBJZiB0aGUgUkVGRVJFTkNFU19MSU5LX1NPVVJDRSB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgU09VUkNFX0JST1dTRVIgdGFnIGlzIHNldAorIyB0byBZRVMsIHRoZW4gdGhlIGh5cGVybGlua3MgZnJvbSBmdW5jdGlvbnMgaW4gUkVGRVJFTkNFU19SRUxBVElPTiBhbmQKKyMgUkVGRVJFTkNFRF9CWV9SRUxBVElPTiBsaXN0cyB3aWxsIGxpbmsgdG8gdGhlIHNvdXJjZSBjb2RlLiBPdGhlcndpc2UgdGhleSB3aWxsCisjIGxpbmsgdG8gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1JFRkVSRU5DRVNfTElOS19TT1VSQ0UgPSBZRVMKKworIyBJZiBTT1VSQ0VfVE9PTFRJUFMgaXMgZW5hYmxlZCAodGhlIGRlZmF1bHQpIHRoZW4gaG92ZXJpbmcgYSBoeXBlcmxpbmsgaW4gdGhlCisjIHNvdXJjZSBjb2RlIHdpbGwgc2hvdyBhIHRvb2x0aXAgd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHN1Y2ggYXMgcHJvdG90eXBlLAorIyBicmllZiBkZXNjcmlwdGlvbiBhbmQgbGlua3MgdG8gdGhlIGRlZmluaXRpb24gYW5kIGRvY3VtZW50YXRpb24uIFNpbmNlIHRoaXMKKyMgd2lsbCBtYWtlIHRoZSBIVE1MIGZpbGUgbGFyZ2VyIGFuZCBsb2FkaW5nIG9mIGxhcmdlIGZpbGVzIGEgYml0IHNsb3dlciwgeW91CisjIGNhbiBvcHQgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTT1VSQ0VfQlJPV1NFUiBpcyBzZXQgdG8gWUVTLgorCitTT1VSQ0VfVE9PTFRJUFMgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFVTRV9IVEFHUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHRoZSByZWZlcmVuY2VzIHRvIHNvdXJjZSBjb2RlIHdpbGwKKyMgcG9pbnQgdG8gdGhlIEhUTUwgZ2VuZXJhdGVkIGJ5IHRoZSBodGFncygxKSB0b29sIGluc3RlYWQgb2YgZG94eWdlbiBidWlsdC1pbgorIyBzb3VyY2UgYnJvd3Nlci4gVGhlIGh0YWdzIHRvb2wgaXMgcGFydCBvZiBHTlUncyBnbG9iYWwgc291cmNlIHRhZ2dpbmcgc3lzdGVtCisjIChzZWUgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dsb2JhbC9nbG9iYWwuaHRtbCkuIFlvdSB3aWxsIG5lZWQgdmVyc2lvbgorIyA0LjguNiBvciBoaWdoZXIuCisjCisjIFRvIHVzZSBpdCBkbyB0aGUgZm9sbG93aW5nOgorIyAtIEluc3RhbGwgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGdsb2JhbAorIyAtIEVuYWJsZSBTT1VSQ0VfQlJPV1NFUiBhbmQgVVNFX0hUQUdTIGluIHRoZSBjb25maWcgZmlsZQorIyAtIE1ha2Ugc3VyZSB0aGUgSU5QVVQgcG9pbnRzIHRvIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZQorIyAtIFJ1biBkb3h5Z2VuIGFzIG5vcm1hbAorIworIyBEb3h5Z2VuIHdpbGwgaW52b2tlIGh0YWdzIChhbmQgdGhhdCB3aWxsIGluIHR1cm4gaW52b2tlIGd0YWdzKSwgc28gdGhlc2UKKyMgdG9vbHMgbXVzdCBiZSBhdmFpbGFibGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lIChpLmUuIGluIHRoZSBzZWFyY2ggcGF0aCkuCisjCisjIFRoZSByZXN1bHQ6IGluc3RlYWQgb2YgdGhlIHNvdXJjZSBicm93c2VyIGdlbmVyYXRlZCBieSBkb3h5Z2VuLCB0aGUgbGlua3MgdG8KKyMgc291cmNlIGNvZGUgd2lsbCBub3cgcG9pbnQgdG8gdGhlIG91dHB1dCBvZiBodGFncy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU09VUkNFX0JST1dTRVIgaXMgc2V0IHRvIFlFUy4KKworVVNFX0hUQUdTICAgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFZFUkJBVElNX0hFQURFUlMgdGFnIGlzIHNldCB0aGUgWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgdmVyYmF0aW0gY29weSBvZiB0aGUgaGVhZGVyIGZpbGUgZm9yIGVhY2ggY2xhc3MgZm9yIHdoaWNoIGFuIGluY2x1ZGUgaXMKKyMgc3BlY2lmaWVkLiBTZXQgdG8gTk8gdG8gZGlzYWJsZSB0aGlzLgorIyBTZWUgYWxzbzogU2VjdGlvbiBcY2xhc3MuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1ZFUkJBVElNX0hFQURFUlMgICAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYWxwaGFiZXRpY2FsIGNsYXNzIGluZGV4CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEFMUEhBQkVUSUNBTF9JTkRFWCB0YWcgaXMgc2V0IHRvIFlFUywgYW4gYWxwaGFiZXRpY2FsIGluZGV4IG9mIGFsbAorIyBjb21wb3VuZHMgd2lsbCBiZSBnZW5lcmF0ZWQuIEVuYWJsZSB0aGlzIGlmIHRoZSBwcm9qZWN0IGNvbnRhaW5zIGEgbG90IG9mCisjIGNsYXNzZXMsIHN0cnVjdHMsIHVuaW9ucyBvciBpbnRlcmZhY2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitBTFBIQUJFVElDQUxfSU5ERVggICAgID0gWUVTCisKKyMgVGhlIENPTFNfSU5fQUxQSEFfSU5ERVggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluCisjIHdoaWNoIHRoZSBhbHBoYWJldGljYWwgaW5kZXggbGlzdCB3aWxsIGJlIHNwbGl0LgorIyBNaW5pbXVtIHZhbHVlOiAxLCBtYXhpbXVtIHZhbHVlOiAyMCwgZGVmYXVsdCB2YWx1ZTogNS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEFMUEhBQkVUSUNBTF9JTkRFWCBpcyBzZXQgdG8gWUVTLgorCitDT0xTX0lOX0FMUEhBX0lOREVYICAgID0gNQorCisjIEluIGNhc2UgYWxsIGNsYXNzZXMgaW4gYSBwcm9qZWN0IHN0YXJ0IHdpdGggYSBjb21tb24gcHJlZml4LCBhbGwgY2xhc3NlcyB3aWxsCisjIGJlIHB1dCB1bmRlciB0aGUgc2FtZSBoZWFkZXIgaW4gdGhlIGFscGhhYmV0aWNhbCBpbmRleC4gVGhlIElHTk9SRV9QUkVGSVggdGFnCisjIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcmVmaXggKG9yIGEgbGlzdCBvZiBwcmVmaXhlcykgdGhhdCBzaG91bGQgYmUgaWdub3JlZAorIyB3aGlsZSBnZW5lcmF0aW5nIHRoZSBpbmRleCBoZWFkZXJzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgQUxQSEFCRVRJQ0FMX0lOREVYIGlzIHNldCB0byBZRVMuCisKK0lHTk9SRV9QUkVGSVggICAgICAgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBIVE1MIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBIVE1MIG91dHB1dAorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitHRU5FUkFURV9IVE1MICAgICAgICAgID0gWUVTCisKKyMgVGhlIEhUTUxfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIEhUTUwgZG9jcyB3aWxsIGJlIHB1dC4gSWYgYQorIyByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4gZnJvbnQgb2YKKyMgaXQuCisjIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpczogaHRtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9PVVRQVVQgICAgICAgICAgICA9IGh0bWwKKworIyBUaGUgSFRNTF9GSUxFX0VYVEVOU0lPTiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBleHRlbnNpb24gZm9yIGVhY2gKKyMgZ2VuZXJhdGVkIEhUTUwgcGFnZSAoZm9yIGV4YW1wbGU6IC5odG0sIC5waHAsIC5hc3ApLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogLmh0bWwuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfRklMRV9FWFRFTlNJT04gICAgPSAuaHRtbAorCisjIFRoZSBIVE1MX0hFQURFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHVzZXItZGVmaW5lZCBIVE1MIGhlYWRlciBmaWxlIGZvcgorIyBlYWNoIGdlbmVyYXRlZCBIVE1MIHBhZ2UuIElmIHRoZSB0YWcgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYQorIyBzdGFuZGFyZCBoZWFkZXIuCisjCisjIFRvIGdldCB2YWxpZCBIVE1MIHRoZSBoZWFkZXIgZmlsZSB0aGF0IGluY2x1ZGVzIGFueSBzY3JpcHRzIGFuZCBzdHlsZSBzaGVldHMKKyMgdGhhdCBkb3h5Z2VuIG5lZWRzLCB3aGljaCBpcyBkZXBlbmRlbnQgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB1c2VkIChlLmcuCisjIHRoZSBzZXR0aW5nIEdFTkVSQVRFX1RSRUVWSUVXKS4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHN0YXJ0IHdpdGggYQorIyBkZWZhdWx0IGhlYWRlciB1c2luZworIyBkb3h5Z2VuIC13IGh0bWwgbmV3X2hlYWRlci5odG1sIG5ld19mb290ZXIuaHRtbCBuZXdfc3R5bGVzaGVldC5jc3MKKyMgWW91ckNvbmZpZ0ZpbGUKKyMgYW5kIHRoZW4gbW9kaWZ5IHRoZSBmaWxlIG5ld19oZWFkZXIuaHRtbC4gU2VlIGFsc28gc2VjdGlvbiAiRG94eWdlbiB1c2FnZSIKKyMgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZW5lcmF0ZSB0aGUgZGVmYXVsdCBoZWFkZXIgdGhhdCBkb3h5Z2VuIG5vcm1hbGx5CisjIHVzZXMuCisjIE5vdGU6IFRoZSBoZWFkZXIgaXMgc3ViamVjdCB0byBjaGFuZ2Ugc28geW91IHR5cGljYWxseSBoYXZlIHRvIHJlZ2VuZXJhdGUgdGhlCisjIGRlZmF1bHQgaGVhZGVyIHdoZW4gdXBncmFkaW5nIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZiBkb3h5Z2VuLiBGb3IgYSBkZXNjcmlwdGlvbgorIyBvZiB0aGUgcG9zc2libGUgbWFya2VycyBhbmQgYmxvY2sgbmFtZXMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0hFQURFUiAgICAgICAgICAgID0gQGFic19zcmNkaXJAL2hlYWRlci5odG1sCisKKyMgVGhlIEhUTUxfRk9PVEVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgdXNlci1kZWZpbmVkIEhUTUwgZm9vdGVyIGZvciBlYWNoCisjIGdlbmVyYXRlZCBIVE1MIHBhZ2UuIElmIHRoZSB0YWcgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBzdGFuZGFyZAorIyBmb290ZXIuIFNlZSBIVE1MX0hFQURFUiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2VuZXJhdGUgYSBkZWZhdWx0CisjIGZvb3RlciBhbmQgd2hhdCBzcGVjaWFsIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGluc2lkZSB0aGUgZm9vdGVyLiBTZWUgYWxzbworIyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZSBkZWZhdWx0IGZvb3RlcgorIyB0aGF0IGRveHlnZW4gbm9ybWFsbHkgdXNlcy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9GT09URVIgICAgICAgICAgICA9CisKKyMgVGhlIEhUTUxfU1RZTEVTSEVFVCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHVzZXItZGVmaW5lZCBjYXNjYWRpbmcgc3R5bGUKKyMgc2hlZXQgdGhhdCBpcyB1c2VkIGJ5IGVhY2ggSFRNTCBwYWdlLiBJdCBjYW4gYmUgdXNlZCB0byBmaW5lLXR1bmUgdGhlIGxvb2sgb2YKKyMgdGhlIEhUTUwgb3V0cHV0LiBJZiBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGRlZmF1bHQgc3R5bGUgc2hlZXQuCisjIFNlZSBhbHNvIHNlY3Rpb24gIkRveHlnZW4gdXNhZ2UiIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2VuZXJhdGUgdGhlIHN0eWxlCisjIHNoZWV0IHRoYXQgZG94eWdlbiBub3JtYWxseSB1c2VzLgorIyBOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgSFRNTF9FWFRSQV9TVFlMRVNIRUVUIGluc3RlYWQgb2YgdGhpcyB0YWcsIGFzCisjIGl0IGlzIG1vcmUgcm9idXN0IGFuZCB0aGlzIHRhZyAoSFRNTF9TVFlMRVNIRUVUKSB3aWxsIGluIHRoZSBmdXR1cmUgYmVjb21lCisjIG9ic29sZXRlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX1NUWUxFU0hFRVQgICAgICAgID0KKworIyBUaGUgSFRNTF9FWFRSQV9TVFlMRVNIRUVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFuIGFkZGl0aW9uYWwgdXNlci0KKyMgZGVmaW5lZCBjYXNjYWRpbmcgc3R5bGUgc2hlZXQgdGhhdCBpcyBpbmNsdWRlZCBhZnRlciB0aGUgc3RhbmRhcmQgc3R5bGUgc2hlZXRzCisjIGNyZWF0ZWQgYnkgZG94eWdlbi4gVXNpbmcgdGhpcyBvcHRpb24gb25lIGNhbiBvdmVycnVsZSBjZXJ0YWluIHN0eWxlIGFzcGVjdHMuCisjIFRoaXMgaXMgcHJlZmVycmVkIG92ZXIgdXNpbmcgSFRNTF9TVFlMRVNIRUVUIHNpbmNlIGl0IGRvZXMgbm90IHJlcGxhY2UgdGhlCisjIHN0YW5kYXJkIHN0eWxlIHNoZWV0IGFuZCBpcyB0aGVyZWZvciBtb3JlIHJvYnVzdCBhZ2FpbnN0IGZ1dHVyZSB1cGRhdGVzLgorIyBEb3h5Z2VuIHdpbGwgY29weSB0aGUgc3R5bGUgc2hlZXQgZmlsZSB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4gRm9yIGFuIGV4YW1wbGUKKyMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0VYVFJBX1NUWUxFU0hFRVQgID0KKworIyBUaGUgSFRNTF9FWFRSQV9GSUxFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBleHRyYSBpbWFnZXMgb3IKKyMgb3RoZXIgc291cmNlIGZpbGVzIHdoaWNoIHNob3VsZCBiZSBjb3BpZWQgdG8gdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeS4gTm90ZQorIyB0aGF0IHRoZXNlIGZpbGVzIHdpbGwgYmUgY29waWVkIHRvIHRoZSBiYXNlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeS4gVXNlIHRoZQorIyAkcmVscGF0aF4gbWFya2VyIGluIHRoZSBIVE1MX0hFQURFUiBhbmQvb3IgSFRNTF9GT09URVIgZmlsZXMgdG8gbG9hZCB0aGVzZQorIyBmaWxlcy4gSW4gdGhlIEhUTUxfU1RZTEVTSEVFVCBmaWxlLCB1c2UgdGhlIGZpbGUgbmFtZSBvbmx5LiBBbHNvIG5vdGUgdGhhdCB0aGUKKyMgZmlsZXMgd2lsbCBiZSBjb3BpZWQgYXMtaXM7IHRoZXJlIGFyZSBubyBjb21tYW5kcyBvciBtYXJrZXJzIGF2YWlsYWJsZS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9FWFRSQV9GSUxFUyAgICAgICA9CisKKyMgVGhlIEhUTUxfQ09MT1JTVFlMRV9IVUUgdGFnIGNvbnRyb2xzIHRoZSBjb2xvciBvZiB0aGUgSFRNTCBvdXRwdXQuIERveHlnZW4KKyMgd2lsbCBhZGp1c3QgdGhlIGNvbG9ycyBpbiB0aGUgc3R5bGVzaGVldCBhbmQgYmFja2dyb3VuZCBpbWFnZXMgYWNjb3JkaW5nIHRvCisjIHRoaXMgY29sb3IuIEh1ZSBpcyBzcGVjaWZpZWQgYXMgYW4gYW5nbGUgb24gYSBjb2xvcndoZWVsLCBzZWUKKyMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IdWUgZm9yIG1vcmUgaW5mb3JtYXRpb24uIEZvciBpbnN0YW5jZSB0aGUgdmFsdWUKKyMgMCByZXByZXNlbnRzIHJlZCwgNjAgaXMgeWVsbG93LCAxMjAgaXMgZ3JlZW4sIDE4MCBpcyBjeWFuLCAyNDAgaXMgYmx1ZSwgMzAwCisjIHB1cnBsZSwgYW5kIDM2MCBpcyByZWQgYWdhaW4uCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDM1OSwgZGVmYXVsdCB2YWx1ZTogMjIwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0NPTE9SU1RZTEVfSFVFICAgID0gMjIwCisKKyMgVGhlIEhUTUxfQ09MT1JTVFlMRV9TQVQgdGFnIGNvbnRyb2xzIHRoZSBwdXJpdHkgKG9yIHNhdHVyYXRpb24pIG9mIHRoZSBjb2xvcnMKKyMgaW4gdGhlIEhUTUwgb3V0cHV0LiBGb3IgYSB2YWx1ZSBvZiAwIHRoZSBvdXRwdXQgd2lsbCB1c2UgZ3JheXNjYWxlcyBvbmx5LiBBCisjIHZhbHVlIG9mIDI1NSB3aWxsIHByb2R1Y2UgdGhlIG1vc3Qgdml2aWQgY29sb3JzLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAyNTUsIGRlZmF1bHQgdmFsdWU6IDEwMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9DT0xPUlNUWUxFX1NBVCAgICA9IDEwMAorCisjIFRoZSBIVE1MX0NPTE9SU1RZTEVfR0FNTUEgdGFnIGNvbnRyb2xzIHRoZSBnYW1tYSBjb3JyZWN0aW9uIGFwcGxpZWQgdG8gdGhlCisjIGx1bWluYW5jZSBjb21wb25lbnQgb2YgdGhlIGNvbG9ycyBpbiB0aGUgSFRNTCBvdXRwdXQuIFZhbHVlcyBiZWxvdyAxMDAKKyMgZ3JhZHVhbGx5IG1ha2UgdGhlIG91dHB1dCBsaWdodGVyLCB3aGVyZWFzIHZhbHVlcyBhYm92ZSAxMDAgbWFrZSB0aGUgb3V0cHV0CisjIGRhcmtlci4gVGhlIHZhbHVlIGRpdmlkZWQgYnkgMTAwIGlzIHRoZSBhY3R1YWwgZ2FtbWEgYXBwbGllZCwgc28gODAgcmVwcmVzZW50cworIyBhIGdhbW1hIG9mIDAuOCwgVGhlIHZhbHVlIDIyMCByZXByZXNlbnRzIGEgZ2FtbWEgb2YgMi4yLCBhbmQgMTAwIGRvZXMgbm90CisjIGNoYW5nZSB0aGUgZ2FtbWEuCisjIE1pbmltdW0gdmFsdWU6IDQwLCBtYXhpbXVtIHZhbHVlOiAyNDAsIGRlZmF1bHQgdmFsdWU6IDgwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0NPTE9SU1RZTEVfR0FNTUEgID0gODAKKworIyBJZiB0aGUgSFRNTF9USU1FU1RBTVAgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgZm9vdGVyIG9mIGVhY2ggZ2VuZXJhdGVkIEhUTUwKKyMgcGFnZSB3aWxsIGNvbnRhaW4gdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgcGFnZSB3YXMgZ2VuZXJhdGVkLiBTZXR0aW5nIHRoaXMKKyMgdG8gTk8gY2FuIGhlbHAgd2hlbiBjb21wYXJpbmcgdGhlIG91dHB1dCBvZiBtdWx0aXBsZSBydW5zLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX1RJTUVTVEFNUCAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEhUTUxfRFlOQU1JQ19TRUNUSU9OUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHRoZSBnZW5lcmF0ZWQgSFRNTAorIyBkb2N1bWVudGF0aW9uIHdpbGwgY29udGFpbiBzZWN0aW9ucyB0aGF0IGNhbiBiZSBoaWRkZW4gYW5kIHNob3duIGFmdGVyIHRoZQorIyBwYWdlIGhhcyBsb2FkZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9EWU5BTUlDX1NFQ1RJT05TICA9IE5PCisKKyMgV2l0aCBIVE1MX0lOREVYX05VTV9FTlRSSUVTIG9uZSBjYW4gY29udHJvbCB0aGUgcHJlZmVycmVkIG51bWJlciBvZiBlbnRyaWVzCisjIHNob3duIGluIHRoZSB2YXJpb3VzIHRyZWUgc3RydWN0dXJlZCBpbmRpY2VzIGluaXRpYWxseTsgdGhlIHVzZXIgY2FuIGV4cGFuZAorIyBhbmQgY29sbGFwc2UgZW50cmllcyBkeW5hbWljYWxseSBsYXRlciBvbi4gRG94eWdlbiB3aWxsIGV4cGFuZCB0aGUgdHJlZSB0bworIyBzdWNoIGEgbGV2ZWwgdGhhdCBhdCBtb3N0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVudHJpZXMgYXJlIHZpc2libGUgKHVubGVzcworIyBhIGZ1bGx5IGNvbGxhcHNlZCB0cmVlIGFscmVhZHkgZXhjZWVkcyB0aGlzIGFtb3VudCkuIFNvIHNldHRpbmcgdGhlIG51bWJlciBvZgorIyBlbnRyaWVzIDEgd2lsbCBwcm9kdWNlIGEgZnVsbCBjb2xsYXBzZWQgdHJlZSBieSBkZWZhdWx0LiAwIGlzIGEgc3BlY2lhbCB2YWx1ZQorIyByZXByZXNlbnRpbmcgYW4gaW5maW5pdGUgbnVtYmVyIG9mIGVudHJpZXMgYW5kIHdpbGwgcmVzdWx0IGluIGEgZnVsbCBleHBhbmRlZAorIyB0cmVlIGJ5IGRlZmF1bHQuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDk5OTksIGRlZmF1bHQgdmFsdWU6IDEwMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9JTkRFWF9OVU1fRU5UUklFUyA9IDEwMAorCisjIElmIHRoZSBHRU5FUkFURV9ET0NTRVQgdGFnIGlzIHNldCB0byBZRVMsIGFkZGl0aW9uYWwgaW5kZXggZmlsZXMgd2lsbCBiZQorIyBnZW5lcmF0ZWQgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgQXBwbGUncyBYY29kZSAzIGludGVncmF0ZWQgZGV2ZWxvcG1lbnQKKyMgZW52aXJvbm1lbnQgKHNlZTogaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdG9vbHMveGNvZGUvKSwgaW50cm9kdWNlZCB3aXRoCisjIE9TWCAxMC41IChMZW9wYXJkKS4gVG8gY3JlYXRlIGEgZG9jdW1lbnRhdGlvbiBzZXQsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIE1ha2VmaWxlIGluIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkuIFJ1bm5pbmcgbWFrZSB3aWxsIHByb2R1Y2UgdGhlIGRvY3NldCBpbgorIyB0aGF0IGRpcmVjdG9yeSBhbmQgcnVubmluZyBtYWtlIGluc3RhbGwgd2lsbCBpbnN0YWxsIHRoZSBkb2NzZXQgaW4KKyMgfi9MaWJyYXJ5L0RldmVsb3Blci9TaGFyZWQvRG9jdW1lbnRhdGlvbi9Eb2NTZXRzIHNvIHRoYXQgWGNvZGUgd2lsbCBmaW5kIGl0IGF0CisjIHN0YXJ0dXAuIFNlZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90b29scy9jcmVhdGluZ2RvY3NldHN3aXRoZG94eWdlbi5odG1sCisjIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0RPQ1NFVCAgICAgICAgPSBOTworCisjIFRoaXMgdGFnIGRldGVybWluZXMgdGhlIG5hbWUgb2YgdGhlIGRvY3NldCBmZWVkLiBBIGRvY3VtZW50YXRpb24gZmVlZCBwcm92aWRlcworIyBhbiB1bWJyZWxsYSB1bmRlciB3aGljaCBtdWx0aXBsZSBkb2N1bWVudGF0aW9uIHNldHMgZnJvbSBhIHNpbmdsZSBwcm92aWRlcgorIyAoc3VjaCBhcyBhIGNvbXBhbnkgb3IgcHJvZHVjdCBzdWl0ZSkgY2FuIGJlIGdyb3VwZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBEb3h5Z2VuIGdlbmVyYXRlZCBkb2NzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9GRUVETkFNRSAgICAgICAgPSAiRG94eWdlbiBnZW5lcmF0ZWQgZG9jcyIKKworIyBUaGlzIHRhZyBzcGVjaWZpZXMgYSBzdHJpbmcgdGhhdCBzaG91bGQgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGRvY3VtZW50YXRpb24KKyMgc2V0IGJ1bmRsZS4gVGhpcyBzaG91bGQgYmUgYSByZXZlcnNlIGRvbWFpbi1uYW1lIHN0eWxlIHN0cmluZywgZS5nLgorIyBjb20ubXljb21wYW55Lk15RG9jU2V0LiBEb3h5Z2VuIHdpbGwgYXBwZW5kIC5kb2NzZXQgdG8gdGhlIG5hbWUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBvcmcuZG94eWdlbi5Qcm9qZWN0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9CVU5ETEVfSUQgICAgICAgPSBvcmcuZG94eWdlbi5Qcm9qZWN0CisKKyMgVGhlIERPQ1NFVF9QVUJMSVNIRVJfSUQgdGFnIHNwZWNpZmllcyBhIHN0cmluZyB0aGF0IHNob3VsZCB1bmlxdWVseSBpZGVudGlmeQorIyB0aGUgZG9jdW1lbnRhdGlvbiBwdWJsaXNoZXIuIFRoaXMgc2hvdWxkIGJlIGEgcmV2ZXJzZSBkb21haW4tbmFtZSBzdHlsZQorIyBzdHJpbmcsIGUuZy4gY29tLm15Y29tcGFueS5NeURvY1NldC5kb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogb3JnLmRveHlnZW4uUHVibGlzaGVyLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9QVUJMSVNIRVJfSUQgICAgPSBvcmcuZG94eWdlbi5QdWJsaXNoZXIKKworIyBUaGUgRE9DU0VUX1BVQkxJU0hFUl9OQU1FIHRhZyBpZGVudGlmaWVzIHRoZSBkb2N1bWVudGF0aW9uIHB1Ymxpc2hlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFB1Ymxpc2hlci4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ1NFVCBpcyBzZXQgdG8gWUVTLgorCitET0NTRVRfUFVCTElTSEVSX05BTUUgID0gUHVibGlzaGVyCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiBnZW5lcmF0ZXMgdGhyZWUKKyMgYWRkaXRpb25hbCBIVE1MIGluZGV4IGZpbGVzOiBpbmRleC5oaHAsIGluZGV4LmhoYywgYW5kIGluZGV4Lmhoay4gVGhlCisjIGluZGV4LmhocCBpcyBhIHByb2plY3QgZmlsZSB0aGF0IGNhbiBiZSByZWFkIGJ5IE1pY3Jvc29mdCdzIEhUTUwgSGVscCBXb3Jrc2hvcAorIyAoc2VlOiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZW4tdXMvZG93bmxvYWQvZGV0YWlscy5hc3B4P2lkPTIxMTM4KSBvbgorIyBXaW5kb3dzLgorIworIyBUaGUgSFRNTCBIZWxwIFdvcmtzaG9wIGNvbnRhaW5zIGEgY29tcGlsZXIgdGhhdCBjYW4gY29udmVydCBhbGwgSFRNTCBvdXRwdXQKKyMgZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaW50byBhIHNpbmdsZSBjb21waWxlZCBIVE1MIGZpbGUgKC5jaG0pLiBDb21waWxlZCBIVE1MCisjIGZpbGVzIGFyZSBub3cgdXNlZCBhcyB0aGUgV2luZG93cyA5OCBoZWxwIGZvcm1hdCwgYW5kIHdpbGwgcmVwbGFjZSB0aGUgb2xkCisjIFdpbmRvd3MgaGVscCBmb3JtYXQgKC5obHApIG9uIGFsbCBXaW5kb3dzIHBsYXRmb3JtcyBpbiB0aGUgZnV0dXJlLiBDb21wcmVzc2VkCisjIEhUTUwgZmlsZXMgYWxzbyBjb250YWluIGFuIGluZGV4LCBhIHRhYmxlIG9mIGNvbnRlbnRzLCBhbmQgeW91IGNhbiBzZWFyY2ggZm9yCisjIHdvcmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLiBUaGUgSFRNTCB3b3Jrc2hvcCBhbHNvIGNvbnRhaW5zIGEgdmlld2VyIGZvcgorIyBjb21wcmVzc2VkIEhUTUwgZmlsZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworR0VORVJBVEVfSFRNTEhFTFAgICAgICA9IE5PCisKKyMgVGhlIENITV9GSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAuY2htCisjIGZpbGUuIFlvdSBjYW4gYWRkIGEgcGF0aCBpbiBmcm9udCBvZiB0aGUgZmlsZSBpZiB0aGUgcmVzdWx0IHNob3VsZCBub3QgYmUKKyMgd3JpdHRlbiB0byB0aGUgaHRtbCBvdXRwdXQgZGlyZWN0b3J5LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQ0hNX0ZJTEUgICAgICAgICAgICAgICA9CisKKyMgVGhlIEhIQ19MT0NBVElPTiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gKGFic29sdXRlIHBhdGgKKyMgaW5jbHVkaW5nIGZpbGUgbmFtZSkgb2YgdGhlIEhUTUwgaGVscCBjb21waWxlciAoIGhoYy5leGUpLiBJZiBub24tZW1wdHkKKyMgZG94eWdlbiB3aWxsIHRyeSB0byBydW4gdGhlIEhUTUwgaGVscCBjb21waWxlciBvbiB0aGUgZ2VuZXJhdGVkIGluZGV4LmhocC4KKyMgVGhlIGZpbGUgaGFzIHRvIGJlIHNwZWNpZmllZCB3aXRoIGZ1bGwgcGF0aC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK0hIQ19MT0NBVElPTiAgICAgICAgICAgPQorCisjIFRoZSBHRU5FUkFURV9DSEkgZmxhZyBjb250cm9scyBpZiBhIHNlcGFyYXRlIC5jaGkgaW5kZXggZmlsZSBpcyBnZW5lcmF0ZWQgKAorIyBZRVMpIG9yIHRoYXQgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBtYXN0ZXIgLmNobSBmaWxlICggTk8pLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MSEVMUCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9DSEkgICAgICAgICAgID0gTk8KKworIyBUaGUgQ0hNX0lOREVYX0VOQ09ESU5HIGlzIHVzZWQgdG8gZW5jb2RlIEh0bWxIZWxwIGluZGV4ICggaGhrKSwgY29udGVudCAoIGhoYykKKyMgYW5kIHByb2plY3QgZmlsZSBjb250ZW50LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQ0hNX0lOREVYX0VOQ09ESU5HICAgICA9CisKKyMgVGhlIEJJTkFSWV9UT0MgZmxhZyBjb250cm9scyB3aGV0aGVyIGEgYmluYXJ5IHRhYmxlIG9mIGNvbnRlbnRzIGlzIGdlbmVyYXRlZCAoCisjIFlFUykgb3IgYSBub3JtYWwgdGFibGUgb2YgY29udGVudHMgKCBOTykgaW4gdGhlIC5jaG0gZmlsZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQklOQVJZX1RPQyAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIFRPQ19FWFBBTkQgZmxhZyBjYW4gYmUgc2V0IHRvIFlFUyB0byBhZGQgZXh0cmEgaXRlbXMgZm9yIGdyb3VwIG1lbWJlcnMgdG8KKyMgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIG9mIHRoZSBIVE1MIGhlbHAgZG9jdW1lbnRhdGlvbiBhbmQgdG8gdGhlIHRyZWUgdmlldy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworVE9DX0VYUEFORCAgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEdFTkVSQVRFX1FIUCB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgYm90aCBRSFBfTkFNRVNQQUNFIGFuZAorIyBRSFBfVklSVFVBTF9GT0xERVIgYXJlIHNldCwgYW4gYWRkaXRpb25hbCBpbmRleCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIHRoYXQKKyMgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIFF0J3MgcWhlbHBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgYSBRdCBDb21wcmVzc2VkIEhlbHAKKyMgKC5xY2gpIG9mIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX1FIUCAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBRSEdfTE9DQVRJT04gdGFnIGlzIHNwZWNpZmllZCwgdGhlIFFDSF9GSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CisjIHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAucWNoIGZpbGUuIFRoZSBwYXRoIHNwZWNpZmllZCBpcyByZWxhdGl2ZSB0bworIyB0aGUgSFRNTCBvdXRwdXQgZm9sZGVyLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FDSF9GSUxFICAgICAgICAgICAgICAgPQorCisjIFRoZSBRSFBfTkFNRVNQQUNFIHRhZyBzcGVjaWZpZXMgdGhlIG5hbWVzcGFjZSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIFF0IEhlbHAKKyMgUHJvamVjdCBvdXRwdXQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgUXQgSGVscCBQcm9qZWN0IC8gTmFtZXNwYWNlCisjIChzZWU6IGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCNuYW1lc3BhY2UpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogb3JnLmRveHlnZW4uUHJvamVjdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfTkFNRVNQQUNFICAgICAgICAgID0gb3JnLmRveHlnZW4uUHJvamVjdAorCisjIFRoZSBRSFBfVklSVFVBTF9GT0xERVIgdGFnIHNwZWNpZmllcyB0aGUgbmFtZXNwYWNlIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgUXQKKyMgSGVscCBQcm9qZWN0IG91dHB1dC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBRdCBIZWxwIFByb2plY3QgLyBWaXJ0dWFsCisjIEZvbGRlcnMgKHNlZTogaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI3ZpcnR1YWwtCisjIGZvbGRlcnMpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogZG9jLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FIUF9WSVJUVUFMX0ZPTERFUiAgICAgPSBkb2MKKworIyBJZiB0aGUgUUhQX0NVU1RfRklMVEVSX05BTUUgdGFnIGlzIHNldCwgaXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgY3VzdG9tCisjIGZpbHRlciB0byBhZGQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgUXQgSGVscCBQcm9qZWN0IC8gQ3VzdG9tCisjIEZpbHRlcnMgKHNlZTogaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI2N1c3RvbS0KKyMgZmlsdGVycykuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhQX0NVU1RfRklMVEVSX05BTUUgICA9CisKKyMgVGhlIFFIUF9DVVNUX0ZJTFRFUl9BVFRSUyB0YWcgc3BlY2lmaWVzIHRoZSBsaXN0IG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZQorIyBjdXN0b20gZmlsdGVyIHRvIGFkZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBRdCBIZWxwIFByb2plY3QgLyBDdXN0b20KKyMgRmlsdGVycyAoc2VlOiBodHRwOi8vcXQtcHJvamVjdC5vcmcvZG9jL3F0LTQuOC9xdGhlbHBwcm9qZWN0Lmh0bWwjY3VzdG9tLQorIyBmaWx0ZXJzKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfQ1VTVF9GSUxURVJfQVRUUlMgID0KKworIyBUaGUgUUhQX1NFQ1RfRklMVEVSX0FUVFJTIHRhZyBzcGVjaWZpZXMgdGhlIGxpc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgdGhpcworIyBwcm9qZWN0J3MgZmlsdGVyIHNlY3Rpb24gbWF0Y2hlcy4gUXQgSGVscCBQcm9qZWN0IC8gRmlsdGVyIEF0dHJpYnV0ZXMgKHNlZToKKyMgaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI2ZpbHRlci1hdHRyaWJ1dGVzKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfU0VDVF9GSUxURVJfQVRUUlMgID0KKworIyBUaGUgUUhHX0xPQ0FUSU9OIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBRdCdzCisjIHFoZWxwZ2VuZXJhdG9yLiBJZiBub24tZW1wdHkgZG94eWdlbiB3aWxsIHRyeSB0byBydW4gcWhlbHBnZW5lcmF0b3Igb24gdGhlCisjIGdlbmVyYXRlZCAucWhwIGZpbGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhHX0xPQ0FUSU9OICAgICAgICAgICA9CisKKyMgSWYgdGhlIEdFTkVSQVRFX0VDTElQU0VIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCBhZGRpdGlvbmFsIGluZGV4IGZpbGVzIHdpbGwgYmUKKyMgZ2VuZXJhdGVkLCB0b2dldGhlciB3aXRoIHRoZSBIVE1MIGZpbGVzLCB0aGV5IGZvcm0gYW4gRWNsaXBzZSBoZWxwIHBsdWdpbi4gVG8KKyMgaW5zdGFsbCB0aGlzIHBsdWdpbiBhbmQgbWFrZSBpdCBhdmFpbGFibGUgdW5kZXIgdGhlIGhlbHAgY29udGVudHMgbWVudSBpbgorIyBFY2xpcHNlLCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBIVE1MIGFuZCBYTUwgZmlsZXMgbmVlZHMKKyMgdG8gYmUgY29waWVkIGludG8gdGhlIHBsdWdpbnMgZGlyZWN0b3J5IG9mIGVjbGlwc2UuIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkKKyMgd2l0aGluIHRoZSBwbHVnaW5zIGRpcmVjdG9yeSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEVDTElQU0VfRE9DX0lEIHZhbHVlLgorIyBBZnRlciBjb3B5aW5nIEVjbGlwc2UgbmVlZHMgdG8gYmUgcmVzdGFydGVkIGJlZm9yZSB0aGUgaGVscCBhcHBlYXJzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0VDTElQU0VIRUxQICAgPSBOTworCisjIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBFY2xpcHNlIGhlbHAgcGx1Z2luLiBXaGVuIGluc3RhbGxpbmcgdGhlIHBsdWdpbgorIyB0aGUgZGlyZWN0b3J5IG5hbWUgY29udGFpbmluZyB0aGUgSFRNTCBhbmQgWE1MIGZpbGVzIHNob3VsZCBhbHNvIGhhdmUgdGhpcworIyBuYW1lLiBFYWNoIGRvY3VtZW50YXRpb24gc2V0IHNob3VsZCBoYXZlIGl0cyBvd24gaWRlbnRpZmllci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IG9yZy5kb3h5Z2VuLlByb2plY3QuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9FQ0xJUFNFSEVMUCBpcyBzZXQgdG8gWUVTLgorCitFQ0xJUFNFX0RPQ19JRCAgICAgICAgID0gb3JnLmRveHlnZW4uUHJvamVjdAorCisjIElmIHlvdSB3YW50IGZ1bGwgY29udHJvbCBvdmVyIHRoZSBsYXlvdXQgb2YgdGhlIGdlbmVyYXRlZCBIVE1MIHBhZ2VzIGl0IG1pZ2h0CisjIGJlIG5lY2Vzc2FyeSB0byBkaXNhYmxlIHRoZSBpbmRleCBhbmQgcmVwbGFjZSBpdCB3aXRoIHlvdXIgb3duLiBUaGUKKyMgRElTQUJMRV9JTkRFWCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIGNvbmRlbnNlZCBpbmRleCAodGFicykgYXQgdG9wCisjIG9mIGVhY2ggSFRNTCBwYWdlLiBBIHZhbHVlIG9mIE5PIGVuYWJsZXMgdGhlIGluZGV4IGFuZCB0aGUgdmFsdWUgWUVTIGRpc2FibGVzCisjIGl0LiBTaW5jZSB0aGUgdGFicyBpbiB0aGUgaW5kZXggY29udGFpbiB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyB0aGUgbmF2aWdhdGlvbgorIyB0cmVlLCB5b3UgY2FuIHNldCB0aGlzIG9wdGlvbiB0byBZRVMgaWYgeW91IGFsc28gc2V0IEdFTkVSQVRFX1RSRUVWSUVXIHRvIFlFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitESVNBQkxFX0lOREVYICAgICAgICAgID0gTk8KKworIyBUaGUgR0VORVJBVEVfVFJFRVZJRVcgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIGEgdHJlZS1saWtlIGluZGV4CisjIHN0cnVjdHVyZSBzaG91bGQgYmUgZ2VuZXJhdGVkIHRvIGRpc3BsYXkgaGllcmFyY2hpY2FsIGluZm9ybWF0aW9uLiBJZiB0aGUgdGFnCisjIHZhbHVlIGlzIHNldCB0byBZRVMsIGEgc2lkZSBwYW5lbCB3aWxsIGJlIGdlbmVyYXRlZCBjb250YWluaW5nIGEgdHJlZS1saWtlCisjIGluZGV4IHN0cnVjdHVyZSAoanVzdCBsaWtlIHRoZSBvbmUgdGhhdCBpcyBnZW5lcmF0ZWQgZm9yIEhUTUwgSGVscCkuIEZvciB0aGlzCisjIHRvIHdvcmsgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgSmF2YVNjcmlwdCwgREhUTUwsIENTUyBhbmQgZnJhbWVzIGlzIHJlcXVpcmVkCisjIChpLmUuIGFueSBtb2Rlcm4gYnJvd3NlcikuIFdpbmRvd3MgdXNlcnMgYXJlIHByb2JhYmx5IGJldHRlciBvZmYgdXNpbmcgdGhlCisjIEhUTUwgaGVscCBmZWF0dXJlLiBWaWEgY3VzdG9tIHN0eWxlc2hlZXRzIChzZWUgSFRNTF9FWFRSQV9TVFlMRVNIRUVUKSBvbmUgY2FuCisjIGZ1cnRoZXIgZmluZS10dW5lIHRoZSBsb29rIG9mIHRoZSBpbmRleC4gQXMgYW4gZXhhbXBsZSwgdGhlIGRlZmF1bHQgc3R5bGUKKyMgc2hlZXQgZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaGFzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gcHV0IGFuIGltYWdlIGF0CisjIHRoZSByb290IG9mIHRoZSB0cmVlIGluc3RlYWQgb2YgdGhlIFBST0pFQ1RfTkFNRS4gU2luY2UgdGhlIHRyZWUgYmFzaWNhbGx5IGhhcworIyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyB0aGUgdGFiIGluZGV4LCB5b3UgY291bGQgY29uc2lkZXIgc2V0dGluZworIyBESVNBQkxFX0lOREVYIHRvIFlFUyB3aGVuIGVuYWJsaW5nIHRoaXMgb3B0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX1RSRUVWSUVXICAgICAgPSBZRVMKKworIyBUaGUgRU5VTV9WQUxVRVNfUEVSX0xJTkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIGVudW0gdmFsdWVzIHRoYXQKKyMgZG94eWdlbiB3aWxsIGdyb3VwIG9uIG9uZSBsaW5lIGluIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorIworIyBOb3RlIHRoYXQgYSB2YWx1ZSBvZiAwIHdpbGwgY29tcGxldGVseSBzdXBwcmVzcyB0aGUgZW51bSB2YWx1ZXMgZnJvbSBhcHBlYXJpbmcKKyMgaW4gdGhlIG92ZXJ2aWV3IHNlY3Rpb24uCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDIwLCBkZWZhdWx0IHZhbHVlOiA0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitFTlVNX1ZBTFVFU19QRVJfTElORSAgID0gMQorCisjIElmIHRoZSB0cmVldmlldyBpcyBlbmFibGVkIChzZWUgR0VORVJBVEVfVFJFRVZJRVcpIHRoZW4gdGhpcyB0YWcgY2FuIGJlIHVzZWQKKyMgdG8gc2V0IHRoZSBpbml0aWFsIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBmcmFtZSBpbiB3aGljaCB0aGUgdHJlZSBpcyBzaG93bi4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMTUwMCwgZGVmYXVsdCB2YWx1ZTogMjUwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitUUkVFVklFV19XSURUSCAgICAgICAgID0gMjUwCisKKyMgV2hlbiB0aGUgRVhUX0xJTktTX0lOX1dJTkRPVyBvcHRpb24gaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgb3BlbiBsaW5rcyB0bworIyBleHRlcm5hbCBzeW1ib2xzIGltcG9ydGVkIHZpYSB0YWcgZmlsZXMgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworRVhUX0xJTktTX0lOX1dJTkRPVyAgICA9IE5PCisKKyMgVXNlIHRoaXMgdGFnIHRvIGNoYW5nZSB0aGUgZm9udCBzaXplIG9mIExhVGVYIGZvcm11bGFzIGluY2x1ZGVkIGFzIGltYWdlcyBpbgorIyB0aGUgSFRNTCBkb2N1bWVudGF0aW9uLiBXaGVuIHlvdSBjaGFuZ2UgdGhlIGZvbnQgc2l6ZSBhZnRlciBhIHN1Y2Nlc3NmdWwKKyMgZG94eWdlbiBydW4geW91IG5lZWQgdG8gbWFudWFsbHkgcmVtb3ZlIGFueSBmb3JtXyoucG5nIGltYWdlcyBmcm9tIHRoZSBIVE1MCisjIG91dHB1dCBkaXJlY3RvcnkgdG8gZm9yY2UgdGhlbSB0byBiZSByZWdlbmVyYXRlZC4KKyMgTWluaW11bSB2YWx1ZTogOCwgbWF4aW11bSB2YWx1ZTogNTAsIGRlZmF1bHQgdmFsdWU6IDEwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitGT1JNVUxBX0ZPTlRTSVpFICAgICAgID0gMTAKKworIyBVc2UgdGhlIEZPUk1VTEFfVFJBTlBBUkVOVCB0YWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZXMKKyMgZ2VuZXJhdGVkIGZvciBmb3JtdWxhcyBhcmUgdHJhbnNwYXJlbnQgUE5Hcy4gVHJhbnNwYXJlbnQgUE5HcyBhcmUgbm90CisjIHN1cHBvcnRlZCBwcm9wZXJseSBmb3IgSUUgNi4wLCBidXQgYXJlIHN1cHBvcnRlZCBvbiBhbGwgbW9kZXJuIGJyb3dzZXJzLgorIworIyBOb3RlIHRoYXQgd2hlbiBjaGFuZ2luZyB0aGlzIG9wdGlvbiB5b3UgbmVlZCB0byBkZWxldGUgYW55IGZvcm1fKi5wbmcgZmlsZXMgaW4KKyMgdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgdGhlIGNoYW5nZXMgaGF2ZSBlZmZlY3QuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0ZPUk1VTEFfVFJBTlNQQVJFTlQgICAgPSBZRVMKKworIyBFbmFibGUgdGhlIFVTRV9NQVRISkFYIG9wdGlvbiB0byByZW5kZXIgTGFUZVggZm9ybXVsYXMgdXNpbmcgTWF0aEpheCAoc2VlCisjIGh0dHA6Ly93d3cubWF0aGpheC5vcmcpIHdoaWNoIHVzZXMgY2xpZW50IHNpZGUgSmF2YXNjcmlwdCBmb3IgdGhlIHJlbmRlcmluZworIyBpbnN0ZWFkIG9mIHVzaW5nIHByZXJlbmRlcmVkIGJpdG1hcHMuIFVzZSB0aGlzIGlmIHlvdSBkbyBub3QgaGF2ZSBMYVRlWAorIyBpbnN0YWxsZWQgb3IgaWYgeW91IHdhbnQgdG8gZm9ybXVsYXMgbG9vayBwcmV0dGllciBpbiB0aGUgSFRNTCBvdXRwdXQuIFdoZW4KKyMgZW5hYmxlZCB5b3UgbWF5IGFsc28gbmVlZCB0byBpbnN0YWxsIE1hdGhKYXggc2VwYXJhdGVseSBhbmQgY29uZmlndXJlIHRoZSBwYXRoCisjIHRvIGl0IHVzaW5nIHRoZSBNQVRISkFYX1JFTFBBVEggb3B0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK1VTRV9NQVRISkFYICAgICAgICAgICAgPSBOTworCisjIFdoZW4gTWF0aEpheCBpcyBlbmFibGVkIHlvdSBjYW4gc2V0IHRoZSBkZWZhdWx0IG91dHB1dCBmb3JtYXQgdG8gYmUgdXNlZCBmb3IKKyMgdGhlIE1hdGhKYXggb3V0cHV0LiBTZWUgdGhlIE1hdGhKYXggc2l0ZSAoc2VlOgorIyBodHRwOi8vZG9jcy5tYXRoamF4Lm9yZy9lbi9sYXRlc3Qvb3V0cHV0Lmh0bWwpIGZvciBtb3JlIGRldGFpbHMuCisjIFBvc3NpYmxlIHZhbHVlcyBhcmU6IEhUTUwtQ1NTICh3aGljaCBpcyBzbG93ZXIsIGJ1dCBoYXMgdGhlIGJlc3QKKyMgY29tcGF0aWJpbGl0eSksIE5hdGl2ZU1NTCAoaS5lLiBNYXRoTUwpIGFuZCBTVkcuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBIVE1MLUNTUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFVTRV9NQVRISkFYIGlzIHNldCB0byBZRVMuCisKK01BVEhKQVhfRk9STUFUICAgICAgICAgPSBIVE1MLUNTUworCisjIFdoZW4gTWF0aEpheCBpcyBlbmFibGVkIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIHJlbGF0aXZlIHRvIHRoZSBIVE1MCisjIG91dHB1dCBkaXJlY3RvcnkgdXNpbmcgdGhlIE1BVEhKQVhfUkVMUEFUSCBvcHRpb24uIFRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKKyMgc2hvdWxkIGNvbnRhaW4gdGhlIE1hdGhKYXguanMgc2NyaXB0LiBGb3IgaW5zdGFuY2UsIGlmIHRoZSBtYXRoamF4IGRpcmVjdG9yeQorIyBpcyBsb2NhdGVkIGF0IHRoZSBzYW1lIGxldmVsIGFzIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnksIHRoZW4KKyMgTUFUSEpBWF9SRUxQQVRIIHNob3VsZCBiZSAuLi9tYXRoamF4LiBUaGUgZGVmYXVsdCB2YWx1ZSBwb2ludHMgdG8gdGhlIE1hdGhKYXgKKyMgQ29udGVudCBEZWxpdmVyeSBOZXR3b3JrIHNvIHlvdSBjYW4gcXVpY2tseSBzZWUgdGhlIHJlc3VsdCB3aXRob3V0IGluc3RhbGxpbmcKKyMgTWF0aEpheC4gSG93ZXZlciwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gaW5zdGFsbCBhIGxvY2FsIGNvcHkgb2YKKyMgTWF0aEpheCBmcm9tIGh0dHA6Ly93d3cubWF0aGpheC5vcmcgYmVmb3JlIGRlcGxveW1lbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBodHRwOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgVVNFX01BVEhKQVggaXMgc2V0IHRvIFlFUy4KKworTUFUSEpBWF9SRUxQQVRIICAgICAgICA9IGh0dHA6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QKKworIyBUaGUgTUFUSEpBWF9FWFRFTlNJT05TIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIE1hdGhKYXgKKyMgZXh0ZW5zaW9uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgZHVyaW5nIE1hdGhKYXggcmVuZGVyaW5nLiBGb3IgZXhhbXBsZQorIyBNQVRISkFYX0VYVEVOU0lPTlMgPSBUZVgvQU1TbWF0aCBUZVgvQU1Tc3ltYm9scworIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgVVNFX01BVEhKQVggaXMgc2V0IHRvIFlFUy4KKworTUFUSEpBWF9FWFRFTlNJT05TICAgICA9CisKKyMgVGhlIE1BVEhKQVhfQ09ERUZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBmaWxlIHdpdGggamF2YXNjcmlwdCBwaWVjZXMKKyMgb2YgY29kZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiBzdGFydHVwIG9mIHRoZSBNYXRoSmF4IGNvZGUuIFNlZSB0aGUgTWF0aEpheCBzaXRlCisjIChzZWU6IGh0dHA6Ly9kb2NzLm1hdGhqYXgub3JnL2VuL2xhdGVzdC9vdXRwdXQuaHRtbCkgZm9yIG1vcmUgZGV0YWlscy4gRm9yIGFuCisjIGV4YW1wbGUgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgVVNFX01BVEhKQVggaXMgc2V0IHRvIFlFUy4KKworTUFUSEpBWF9DT0RFRklMRSAgICAgICA9CisKKyMgV2hlbiB0aGUgU0VBUkNIRU5HSU5FIHRhZyBpcyBlbmFibGVkIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIHNlYXJjaCBib3ggZm9yCisjIHRoZSBIVE1MIG91dHB1dC4gVGhlIHVuZGVybHlpbmcgc2VhcmNoIGVuZ2luZSB1c2VzIGphdmFzY3JpcHQgYW5kIERIVE1MIGFuZAorIyBzaG91bGQgd29yayBvbiBhbnkgbW9kZXJuIGJyb3dzZXIuIE5vdGUgdGhhdCB3aGVuIHVzaW5nIEhUTUwgaGVscAorIyAoR0VORVJBVEVfSFRNTEhFTFApLCBRdCBoZWxwIChHRU5FUkFURV9RSFApLCBvciBkb2NzZXRzIChHRU5FUkFURV9ET0NTRVQpCisjIHRoZXJlIGlzIGFscmVhZHkgYSBzZWFyY2ggZnVuY3Rpb24gc28gdGhpcyBvbmUgc2hvdWxkIHR5cGljYWxseSBiZSBkaXNhYmxlZC4KKyMgRm9yIGxhcmdlIHByb2plY3RzIHRoZSBqYXZhc2NyaXB0IGJhc2VkIHNlYXJjaCBlbmdpbmUgY2FuIGJlIHNsb3csIHRoZW4KKyMgZW5hYmxpbmcgU0VSVkVSX0JBU0VEX1NFQVJDSCBtYXkgcHJvdmlkZSBhIGJldHRlciBzb2x1dGlvbi4gSXQgaXMgcG9zc2libGUgdG8KKyMgc2VhcmNoIHVzaW5nIHRoZSBrZXlib2FyZDsgdG8ganVtcCB0byB0aGUgc2VhcmNoIGJveCB1c2UgPGFjY2VzcyBrZXk+ICsgUworIyAod2hhdCB0aGUgPGFjY2VzcyBrZXk+IGlzIGRlcGVuZHMgb24gdGhlIE9TIGFuZCBicm93c2VyLCBidXQgaXQgaXMgdHlwaWNhbGx5CisjIDxDVFJMPiwgPEFMVD4vPG9wdGlvbj4sIG9yIGJvdGgpLiBJbnNpZGUgdGhlIHNlYXJjaCBib3ggdXNlIHRoZSA8Y3Vyc29yIGRvd24KKyMga2V5PiB0byBqdW1wIGludG8gdGhlIHNlYXJjaCByZXN1bHRzIHdpbmRvdywgdGhlIHJlc3VsdHMgY2FuIGJlIG5hdmlnYXRlZAorIyB1c2luZyB0aGUgPGN1cnNvciBrZXlzPi4gUHJlc3MgPEVudGVyPiB0byBzZWxlY3QgYW4gaXRlbSBvciA8ZXNjYXBlPiB0byBjYW5jZWwKKyMgdGhlIHNlYXJjaC4gVGhlIGZpbHRlciBvcHRpb25zIGNhbiBiZSBzZWxlY3RlZCB3aGVuIHRoZSBjdXJzb3IgaXMgaW5zaWRlIHRoZQorIyBzZWFyY2ggYm94IGJ5IHByZXNzaW5nIDxTaGlmdD4rPGN1cnNvciBkb3duPi4gQWxzbyBoZXJlIHVzZSB0aGUgPGN1cnNvciBrZXlzPgorIyB0byBzZWxlY3QgYSBmaWx0ZXIgYW5kIDxFbnRlcj4gb3IgPGVzY2FwZT4gdG8gYWN0aXZhdGUgb3IgY2FuY2VsIHRoZSBmaWx0ZXIKKyMgb3B0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitTRUFSQ0hFTkdJTkUgICAgICAgICAgID0gWUVTCisKKyMgV2hlbiB0aGUgU0VSVkVSX0JBU0VEX1NFQVJDSCB0YWcgaXMgZW5hYmxlZCB0aGUgc2VhcmNoIGVuZ2luZSB3aWxsIGJlCisjIGltcGxlbWVudGVkIHVzaW5nIGEgd2ViIHNlcnZlciBpbnN0ZWFkIG9mIGEgd2ViIGNsaWVudCB1c2luZyBKYXZhc2NyaXB0LiBUaGVyZQorIyBhcmUgdHdvIGZsYXZvdXJzIG9mIHdlYiBzZXJ2ZXIgYmFzZWQgc2VhcmNoaW5nIGRlcGVuZGluZyBvbiB0aGUKKyMgRVhURVJOQUxfU0VBUkNIIHNldHRpbmcuIFdoZW4gZGlzYWJsZWQsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIFBIUCBzY3JpcHQgZm9yCisjIHNlYXJjaGluZyBhbmQgYW4gaW5kZXggZmlsZSB1c2VkIGJ5IHRoZSBzY3JpcHQuIFdoZW4gRVhURVJOQUxfU0VBUkNIIGlzCisjIGVuYWJsZWQgdGhlIGluZGV4aW5nIGFuZCBzZWFyY2hpbmcgbmVlZHMgdG8gYmUgcHJvdmlkZWQgYnkgZXh0ZXJuYWwgdG9vbHMuIFNlZQorIyB0aGUgc2VjdGlvbiAiRXh0ZXJuYWwgSW5kZXhpbmcgYW5kIFNlYXJjaGluZyIgZm9yIGRldGFpbHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitTRVJWRVJfQkFTRURfU0VBUkNIICAgID0gTk8KKworIyBXaGVuIEVYVEVSTkFMX1NFQVJDSCB0YWcgaXMgZW5hYmxlZCBkb3h5Z2VuIHdpbGwgbm8gbG9uZ2VyIGdlbmVyYXRlIHRoZSBQSFAKKyMgc2NyaXB0IGZvciBzZWFyY2hpbmcuIEluc3RlYWQgdGhlIHNlYXJjaCByZXN1bHRzIGFyZSB3cml0dGVuIHRvIGFuIFhNTCBmaWxlCisjIHdoaWNoIG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBieSBhbiBleHRlcm5hbCBpbmRleGVyLiBEb3h5Z2VuIHdpbGwgaW52b2tlIGFuCisjIGV4dGVybmFsIHNlYXJjaCBlbmdpbmUgcG9pbnRlZCB0byBieSB0aGUgU0VBUkNIRU5HSU5FX1VSTCBvcHRpb24gdG8gb2J0YWluIHRoZQorIyBzZWFyY2ggcmVzdWx0cy4KKyMKKyMgRG94eWdlbiBzaGlwcyB3aXRoIGFuIGV4YW1wbGUgaW5kZXhlciAoIGRveHlpbmRleGVyKSBhbmQgc2VhcmNoIGVuZ2luZQorIyAoZG94eXNlYXJjaC5jZ2kpIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgb3BlbiBzb3VyY2Ugc2VhcmNoIGVuZ2luZSBsaWJyYXJ5CisjIFhhcGlhbiAoc2VlOiBodHRwOi8veGFwaWFuLm9yZy8pLgorIworIyBTZWUgdGhlIHNlY3Rpb24gIkV4dGVybmFsIEluZGV4aW5nIGFuZCBTZWFyY2hpbmciIGZvciBkZXRhaWxzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworRVhURVJOQUxfU0VBUkNIICAgICAgICA9IE5PCisKKyMgVGhlIFNFQVJDSEVOR0lORV9VUkwgc2hvdWxkIHBvaW50IHRvIGEgc2VhcmNoIGVuZ2luZSBob3N0ZWQgYnkgYSB3ZWIgc2VydmVyCisjIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBzZWFyY2ggcmVzdWx0cyB3aGVuIEVYVEVSTkFMX1NFQVJDSCBpcyBlbmFibGVkLgorIworIyBEb3h5Z2VuIHNoaXBzIHdpdGggYW4gZXhhbXBsZSBpbmRleGVyICggZG94eWluZGV4ZXIpIGFuZCBzZWFyY2ggZW5naW5lCisjIChkb3h5c2VhcmNoLmNnaSkgd2hpY2ggYXJlIGJhc2VkIG9uIHRoZSBvcGVuIHNvdXJjZSBzZWFyY2ggZW5naW5lIGxpYnJhcnkKKyMgWGFwaWFuIChzZWU6IGh0dHA6Ly94YXBpYW4ub3JnLykuIFNlZSB0aGUgc2VjdGlvbiAiRXh0ZXJuYWwgSW5kZXhpbmcgYW5kCisjIFNlYXJjaGluZyIgZm9yIGRldGFpbHMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworU0VBUkNIRU5HSU5FX1VSTCAgICAgICA9CisKKyMgV2hlbiBTRVJWRVJfQkFTRURfU0VBUkNIIGFuZCBFWFRFUk5BTF9TRUFSQ0ggYXJlIGJvdGggZW5hYmxlZCB0aGUgdW5pbmRleGVkCisjIHNlYXJjaCBkYXRhIGlzIHdyaXR0ZW4gdG8gYSBmaWxlIGZvciBpbmRleGluZyBieSBhbiBleHRlcm5hbCB0b29sLiBXaXRoIHRoZQorIyBTRUFSQ0hEQVRBX0ZJTEUgdGFnIHRoZSBuYW1lIG9mIHRoaXMgZmlsZSBjYW4gYmUgc3BlY2lmaWVkLgorIyBUaGUgZGVmYXVsdCBmaWxlIGlzOiBzZWFyY2hkYXRhLnhtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitTRUFSQ0hEQVRBX0ZJTEUgICAgICAgID0gc2VhcmNoZGF0YS54bWwKKworIyBXaGVuIFNFUlZFUl9CQVNFRF9TRUFSQ0ggYW5kIEVYVEVSTkFMX1NFQVJDSCBhcmUgYm90aCBlbmFibGVkIHRoZQorIyBFWFRFUk5BTF9TRUFSQ0hfSUQgdGFnIGNhbiBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBwcm9qZWN0LiBUaGlzIGlzCisjIHVzZWZ1bCBpbiBjb21iaW5hdGlvbiB3aXRoIEVYVFJBX1NFQVJDSF9NQVBQSU5HUyB0byBzZWFyY2ggdGhyb3VnaCBtdWx0aXBsZQorIyBwcm9qZWN0cyBhbmQgcmVkaXJlY3QgdGhlIHJlc3VsdHMgYmFjayB0byB0aGUgcmlnaHQgcHJvamVjdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitFWFRFUk5BTF9TRUFSQ0hfSUQgICAgID0KKworIyBUaGUgRVhUUkFfU0VBUkNIX01BUFBJTkdTIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgc2VhcmNoaW5nIHRocm91Z2ggZG94eWdlbgorIyBwcm9qZWN0cyBvdGhlciB0aGFuIHRoZSBvbmUgZGVmaW5lZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSwgYnV0IHRoYXQgYXJlCisjIGFsbCBhZGRlZCB0byB0aGUgc2FtZSBleHRlcm5hbCBzZWFyY2ggaW5kZXguIEVhY2ggcHJvamVjdCBuZWVkcyB0byBoYXZlIGEKKyMgdW5pcXVlIGlkIHNldCB2aWEgRVhURVJOQUxfU0VBUkNIX0lELiBUaGUgc2VhcmNoIG1hcHBpbmcgdGhlbiBtYXBzIHRoZSBpZCBvZgorIyB0byBhIHJlbGF0aXZlIGxvY2F0aW9uIHdoZXJlIHRoZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZC4gVGhlIGZvcm1hdCBpczoKKyMgRVhUUkFfU0VBUkNIX01BUFBJTkdTID0gdGFnbmFtZTE9bG9jMSB0YWduYW1lMj1sb2MyIC4uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU0VBUkNIRU5HSU5FIGlzIHNldCB0byBZRVMuCisKK0VYVFJBX1NFQVJDSF9NQVBQSU5HUyAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTEFURVggdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIExhVGVYIG91dHB1dC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfTEFURVggICAgICAgICA9IE5PCisKKyMgVGhlIExBVEVYX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBMYVRlWCBkb2NzIHdpbGwgYmUgcHV0LiBJZiBhCisjIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIHB1dCBpbiBmcm9udCBvZgorIyBpdC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiBsYXRleC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX09VVFBVVCAgICAgICAgICAgPSBsYXRleAorCisjIFRoZSBMQVRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgTGFUZVggY29tbWFuZCBuYW1lIHRvIGJlCisjIGludm9rZWQuCisjCisjIE5vdGUgdGhhdCB3aGVuIGVuYWJsaW5nIFVTRV9QREZMQVRFWCB0aGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgZm9yIGdlbmVyYXRpbmcKKyMgYml0bWFwcyBmb3IgZm9ybXVsYXMgaW4gdGhlIEhUTUwgb3V0cHV0LCBidXQgbm90IGluIHRoZSBNYWtlZmlsZSB0aGF0IGlzCisjIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuCisjIFRoZSBkZWZhdWx0IGZpbGUgaXM6IGxhdGV4LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfQ01EX05BTUUgICAgICAgICA9IGxhdGV4CisKKyMgVGhlIE1BS0VJTkRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29tbWFuZCBuYW1lIHRvIGdlbmVyYXRlCisjIGluZGV4IGZvciBMYVRlWC4KKyMgVGhlIGRlZmF1bHQgZmlsZSBpczogbWFrZWluZGV4LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTUFLRUlOREVYX0NNRF9OQU1FICAgICA9IG1ha2VpbmRleAorCisjIElmIHRoZSBDT01QQUNUX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gZ2VuZXJhdGVzIG1vcmUgY29tcGFjdCBMYVRlWAorIyBkb2N1bWVudHMuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3Igc21hbGwgcHJvamVjdHMgYW5kIG1heSBoZWxwIHRvIHNhdmUgc29tZQorIyB0cmVlcyBpbiBnZW5lcmFsLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitDT01QQUNUX0xBVEVYICAgICAgICAgID0gTk8KKworIyBUaGUgUEFQRVJfVFlQRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBwYXBlciB0eXBlIHRoYXQgaXMgdXNlZCBieSB0aGUKKyMgcHJpbnRlci4KKyMgUG9zc2libGUgdmFsdWVzIGFyZTogYTQgKDIxMCB4IDI5NyBtbSksIGxldHRlciAoOC41IHggMTEgaW5jaGVzKSwgbGVnYWwgKDguNSB4CisjIDE0IGluY2hlcykgYW5kIGV4ZWN1dGl2ZSAoNy4yNSB4IDEwLjUgaW5jaGVzKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IGE0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworUEFQRVJfVFlQRSAgICAgICAgICAgICA9IGxldHRlcgorCisjIFRoZSBFWFRSQV9QQUNLQUdFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBMYVRlWCBwYWNrYWdlIG5hbWVzCisjIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBMYVRlWCBvdXRwdXQuIFRvIGdldCB0aGUgdGltZXMgZm9udCBmb3IKKyMgaW5zdGFuY2UgeW91IGNhbiBzcGVjaWZ5CisjIEVYVFJBX1BBQ0tBR0VTPXRpbWVzCisjIElmIGxlZnQgYmxhbmsgbm8gZXh0cmEgcGFja2FnZXMgd2lsbCBiZSBpbmNsdWRlZC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0VYVFJBX1BBQ0tBR0VTICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBoZWFkZXIgZm9yIHRoZQorIyBnZW5lcmF0ZWQgTGFUZVggZG9jdW1lbnQuIFRoZSBoZWFkZXIgc2hvdWxkIGNvbnRhaW4gZXZlcnl0aGluZyB1bnRpbCB0aGUgZmlyc3QKKyMgY2hhcHRlci4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBzdGFuZGFyZCBoZWFkZXIuIFNlZQorIyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGxldCBkb3h5Z2VuIHdyaXRlIHRoZQorIyBkZWZhdWx0IGhlYWRlciB0byBhIHNlcGFyYXRlIGZpbGUuCisjCisjIE5vdGU6IE9ubHkgdXNlIGEgdXNlci1kZWZpbmVkIGhlYWRlciBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmchIFRoZQorIyBmb2xsb3dpbmcgY29tbWFuZHMgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZyBpbnNpZGUgdGhlIGhlYWRlcjogJHRpdGxlLAorIyAkZGF0ZXRpbWUsICRkYXRlLCAkZG94eWdlbnZlcnNpb24sICRwcm9qZWN0bmFtZSwgJHByb2plY3RudW1iZXIuIERveHlnZW4gd2lsbAorIyByZXBsYWNlIHRoZW0gYnkgcmVzcGVjdGl2ZWx5IHRoZSB0aXRsZSBvZiB0aGUgcGFnZSwgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSwKKyMgb25seSB0aGUgY3VycmVudCBkYXRlLCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgZG94eWdlbiwgdGhlIHByb2plY3QgbmFtZSAoc2VlCisjIFBST0pFQ1RfTkFNRSksIG9yIHRoZSBwcm9qZWN0IG51bWJlciAoc2VlIFBST0pFQ1RfTlVNQkVSKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0hFQURFUiAgICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9GT09URVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBmb290ZXIgZm9yIHRoZQorIyBnZW5lcmF0ZWQgTGFUZVggZG9jdW1lbnQuIFRoZSBmb290ZXIgc2hvdWxkIGNvbnRhaW4gZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdAorIyBjaGFwdGVyLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIHN0YW5kYXJkIGZvb3Rlci4KKyMKKyMgTm90ZTogT25seSB1c2UgYSB1c2VyLWRlZmluZWQgZm9vdGVyIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyEKKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0ZPT1RFUiAgICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9FWFRSQV9GSUxFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBleHRyYSBpbWFnZXMgb3IKKyMgb3RoZXIgc291cmNlIGZpbGVzIHdoaWNoIHNob3VsZCBiZSBjb3BpZWQgdG8gdGhlIExBVEVYX09VVFBVVCBvdXRwdXQKKyMgZGlyZWN0b3J5LiBOb3RlIHRoYXQgdGhlIGZpbGVzIHdpbGwgYmUgY29waWVkIGFzLWlzOyB0aGVyZSBhcmUgbm8gY29tbWFuZHMgb3IKKyMgbWFya2VycyBhdmFpbGFibGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9FWFRSQV9GSUxFUyAgICAgID0KKworIyBJZiB0aGUgUERGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBMYVRlWCB0aGF0IGlzIGdlbmVyYXRlZCBpcworIyBwcmVwYXJlZCBmb3IgY29udmVyc2lvbiB0byBQREYgKHVzaW5nIHBzMnBkZiBvciBwZGZsYXRleCkuIFRoZSBQREYgZmlsZSB3aWxsCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLiBUaGlzCisjIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBhIFBERiB2aWV3ZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitQREZfSFlQRVJMSU5LUyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIExBVEVYX1BERkxBVEVYIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgdXNlIHBkZmxhdGV4IHRvIGdlbmVyYXRlCisjIHRoZSBQREYgZmlsZSBkaXJlY3RseSBmcm9tIHRoZSBMYVRlWCBmaWxlcy4gU2V0IHRoaXMgb3B0aW9uIHRvIFlFUyB0byBnZXQgYQorIyBoaWdoZXIgcXVhbGl0eSBQREYgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK1VTRV9QREZMQVRFWCAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgTEFURVhfQkFUQ0hNT0RFIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgYWRkIHRoZSBcYmF0Y2htb2RlCisjIGNvbW1hbmQgdG8gdGhlIGdlbmVyYXRlZCBMYVRlWCBmaWxlcy4gVGhpcyB3aWxsIGluc3RydWN0IExhVGVYIHRvIGtlZXAgcnVubmluZworIyBpZiBlcnJvcnMgb2NjdXIsIGluc3RlYWQgb2YgYXNraW5nIHRoZSB1c2VyIGZvciBoZWxwLiBUaGlzIG9wdGlvbiBpcyBhbHNvIHVzZWQKKyMgd2hlbiBnZW5lcmF0aW5nIGZvcm11bGFzIGluIEhUTUwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0JBVENITU9ERSAgICAgICAgPSBOTworCisjIElmIHRoZSBMQVRFWF9ISURFX0lORElDRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgbm90IGluY2x1ZGUgdGhlCisjIGluZGV4IGNoYXB0ZXJzIChzdWNoIGFzIEZpbGUgSW5kZXgsIENvbXBvdW5kIEluZGV4LCBldGMuKSBpbiB0aGUgb3V0cHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9ISURFX0lORElDRVMgICAgID0gTk8KKworIyBJZiB0aGUgTEFURVhfU09VUkNFX0NPREUgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgaW5jbHVkZSBzb3VyY2UKKyMgY29kZSB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgaW4gdGhlIExhVGVYIG91dHB1dC4KKyMKKyMgTm90ZSB0aGF0IHdoaWNoIHNvdXJjZXMgYXJlIHNob3duIGFsc28gZGVwZW5kcyBvbiBvdGhlciBzZXR0aW5ncyBzdWNoIGFzCisjIFNPVVJDRV9CUk9XU0VSLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9TT1VSQ0VfQ09ERSAgICAgID0gTk8KKworIyBUaGUgTEFURVhfQklCX1NUWUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBzdHlsZSB0byB1c2UgZm9yIHRoZQorIyBiaWJsaW9ncmFwaHksIGUuZy4gcGxhaW5uYXQsIG9yIGllZWV0ci4gU2VlCisjIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmliVGVYIGFuZCBcY2l0ZSBmb3IgbW9yZSBpbmZvLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogcGxhaW4uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9CSUJfU1RZTEUgICAgICAgID0gcGxhaW4KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUlRGIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9SVEYgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIFJURiBvdXRwdXQuIFRoZQorIyBSVEYgb3V0cHV0IGlzIG9wdGltaXplZCBmb3IgV29yZCA5NyBhbmQgbWF5IG5vdCBsb29rIHRvbyBwcmV0dHkgd2l0aCBvdGhlciBSVEYKKyMgcmVhZGVycy9lZGl0b3JzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX1JURiAgICAgICAgICAgPSBOTworCisjIFRoZSBSVEZfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIFJURiBkb2NzIHdpbGwgYmUgcHV0LiBJZiBhCisjIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIHB1dCBpbiBmcm9udCBvZgorIyBpdC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiBydGYuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9SVEYgaXMgc2V0IHRvIFlFUy4KKworUlRGX09VVFBVVCAgICAgICAgICAgICA9IHJ0ZgorCisjIElmIHRoZSBDT01QQUNUX1JURiB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIGdlbmVyYXRlcyBtb3JlIGNvbXBhY3QgUlRGCisjIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gc2F2ZSBzb21lCisjIHRyZWVzIGluIGdlbmVyYWwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitDT01QQUNUX1JURiAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUlRGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBSVEYgdGhhdCBpcyBnZW5lcmF0ZWQgd2lsbAorIyBjb250YWluIGh5cGVybGluayBmaWVsZHMuIFRoZSBSVEYgZmlsZSB3aWxsIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTAorIyBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLiBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZQorIyBicm93c2luZyB1c2luZyBXb3JkIG9yIHNvbWUgb3RoZXIgV29yZCBjb21wYXRpYmxlIHJlYWRlcnMgdGhhdCBzdXBwb3J0IHRob3NlCisjIGZpZWxkcy4KKyMKKyMgTm90ZTogV29yZFBhZCAod3JpdGUpIGFuZCBvdGhlcnMgZG8gbm90IHN1cHBvcnQgbGlua3MuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitSVEZfSFlQRVJMSU5LUyAgICAgICAgID0gTk8KKworIyBMb2FkIHN0eWxlc2hlZXQgZGVmaW5pdGlvbnMgZnJvbSBmaWxlLiBTeW50YXggaXMgc2ltaWxhciB0byBkb3h5Z2VuJ3MgY29uZmlnCisjIGZpbGUsIGkuZS4gYSBzZXJpZXMgb2YgYXNzaWdubWVudHMuIFlvdSBvbmx5IGhhdmUgdG8gcHJvdmlkZSByZXBsYWNlbWVudHMsCisjIG1pc3NpbmcgZGVmaW5pdGlvbnMgYXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlLgorIworIyBTZWUgYWxzbyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZQorIyBkZWZhdWx0IHN0eWxlIHNoZWV0IHRoYXQgZG94eWdlbiBub3JtYWxseSB1c2VzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUlRGIGlzIHNldCB0byBZRVMuCisKK1JURl9TVFlMRVNIRUVUX0ZJTEUgICAgPQorCisjIFNldCBvcHRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBhbiBSVEYgZG9jdW1lbnQuIFN5bnRheCBpcworIyBzaW1pbGFyIHRvIGRveHlnZW4ncyBjb25maWcgZmlsZS4gQSB0ZW1wbGF0ZSBleHRlbnNpb25zIGZpbGUgY2FuIGJlIGdlbmVyYXRlZAorIyB1c2luZyBkb3h5Z2VuIC1lIHJ0ZiBleHRlbnNpb25GaWxlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUlRGIGlzIHNldCB0byBZRVMuCisKK1JURl9FWFRFTlNJT05TX0ZJTEUgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBtYW4gcGFnZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTUFOIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBtYW4gcGFnZXMgZm9yCisjIGNsYXNzZXMgYW5kIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX01BTiAgICAgICAgICAgPSBOTworCisjIFRoZSBNQU5fT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIG1hbiBwYWdlcyB3aWxsIGJlIHB1dC4gSWYgYQorIyByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4gZnJvbnQgb2YKKyMgaXQuIEEgZGlyZWN0b3J5IG1hbjMgd2lsbCBiZSBjcmVhdGVkIGluc2lkZSB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieQorIyBNQU5fT1VUUFVULgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IG1hbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX01BTiBpcyBzZXQgdG8gWUVTLgorCitNQU5fT1VUUFVUICAgICAgICAgICAgID0gbWFuCisKKyMgVGhlIE1BTl9FWFRFTlNJT04gdGFnIGRldGVybWluZXMgdGhlIGV4dGVuc2lvbiB0aGF0IGlzIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQKKyMgbWFuIHBhZ2VzLiBJbiBjYXNlIHRoZSBtYW51YWwgc2VjdGlvbiBkb2VzIG5vdCBzdGFydCB3aXRoIGEgbnVtYmVyLCB0aGUgbnVtYmVyCisjIDMgaXMgcHJlcGVuZGVkLiBUaGUgZG90ICguKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBNQU5fRVhURU5TSU9OIHRhZyBpcworIyBvcHRpb25hbC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IC4zLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTUFOIGlzIHNldCB0byBZRVMuCisKK01BTl9FWFRFTlNJT04gICAgICAgICAgPSAuMworCisjIElmIHRoZSBNQU5fTElOS1MgdGFnIGlzIHNldCB0byBZRVMgYW5kIGRveHlnZW4gZ2VuZXJhdGVzIG1hbiBvdXRwdXQsIHRoZW4gaXQKKyMgd2lsbCBnZW5lcmF0ZSBvbmUgYWRkaXRpb25hbCBtYW4gZmlsZSBmb3IgZWFjaCBlbnRpdHkgZG9jdW1lbnRlZCBpbiB0aGUgcmVhbAorIyBtYW4gcGFnZShzKS4gVGhlc2UgYWRkaXRpb25hbCBmaWxlcyBvbmx5IHNvdXJjZSB0aGUgcmVhbCBtYW4gcGFnZSwgYnV0IHdpdGhvdXQKKyMgdGhlbSB0aGUgbWFuIGNvbW1hbmQgd291bGQgYmUgdW5hYmxlIHRvIGZpbmQgdGhlIGNvcnJlY3QgcGFnZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTUFOIGlzIHNldCB0byBZRVMuCisKK01BTl9MSU5LUyAgICAgICAgICAgICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBYTUwgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX1hNTCB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYW4gWE1MIGZpbGUgdGhhdAorIyBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9YTUwgICAgICAgICAgID0gTk8KKworIyBUaGUgWE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBYTUwgcGFnZXMgd2lsbCBiZSBwdXQuIElmIGEKKyMgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluIGZyb250IG9mCisjIGl0LgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IHhtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1hNTCBpcyBzZXQgdG8gWUVTLgorCitYTUxfT1VUUFVUICAgICAgICAgICAgID0geG1sCisKKyMgVGhlIFhNTF9TQ0hFTUEgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBYTUwgc2NoZW1hLCB3aGljaCBjYW4gYmUgdXNlZCBieSBhCisjIHZhbGlkYXRpbmcgWE1MIHBhcnNlciB0byBjaGVjayB0aGUgc3ludGF4IG9mIHRoZSBYTUwgZmlsZXMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9YTUwgaXMgc2V0IHRvIFlFUy4KKworWE1MX1NDSEVNQSAgICAgICAgICAgICA9CisKKyMgVGhlIFhNTF9EVEQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBYTUwgRFRELCB3aGljaCBjYW4gYmUgdXNlZCBieSBhCisjIHZhbGlkYXRpbmcgWE1MIHBhcnNlciB0byBjaGVjayB0aGUgc3ludGF4IG9mIHRoZSBYTUwgZmlsZXMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9YTUwgaXMgc2V0IHRvIFlFUy4KKworWE1MX0RURCAgICAgICAgICAgICAgICA9CisKKyMgSWYgdGhlIFhNTF9QUk9HUkFNTElTVElORyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZHVtcCB0aGUgcHJvZ3JhbQorIyBsaXN0aW5ncyAoaW5jbHVkaW5nIHN5bnRheCBoaWdobGlnaHRpbmcgYW5kIGNyb3NzLXJlZmVyZW5jaW5nIGluZm9ybWF0aW9uKSB0bworIyB0aGUgWE1MIG91dHB1dC4gTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSBzaXplCisjIG9mIHRoZSBYTUwgb3V0cHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfWE1MIGlzIHNldCB0byBZRVMuCisKK1hNTF9QUk9HUkFNTElTVElORyAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgRE9DQk9PSyBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfRE9DQk9PSyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgRG9jYm9vayBmaWxlcworIyB0aGF0IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIFBERi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9ET0NCT09LICAgICAgID0gTk8KKworIyBUaGUgRE9DQk9PS19PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgRG9jYm9vayBwYWdlcyB3aWxsIGJlIHB1dC4KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4KKyMgZnJvbnQgb2YgaXQuCisjIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpczogZG9jYm9vay4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ0JPT0sgaXMgc2V0IHRvIFlFUy4KKworRE9DQk9PS19PVVRQVVQgICAgICAgICA9IGRvY2Jvb2sKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBdXRvR2VuIERlZmluaXRpb25zIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9BVVRPR0VOX0RFRiB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYW4gQXV0b0dlbgorIyBEZWZpbml0aW9ucyAoc2VlIGh0dHA6Ly9hdXRvZ2VuLnNmLm5ldCkgZmlsZSB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YKKyMgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLiBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIHN0aWxsCisjIGV4cGVyaW1lbnRhbCBhbmQgaW5jb21wbGV0ZSBhdCB0aGUgbW9tZW50LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX0FVVE9HRU5fREVGICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfUEVSTE1PRCB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBQZXJsIG1vZHVsZQorIyBmaWxlIHRoYXQgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29kZSBpbmNsdWRpbmcgYWxsIGRvY3VtZW50YXRpb24uCisjCisjIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgc3RpbGwgZXhwZXJpbWVudGFsIGFuZCBpbmNvbXBsZXRlIGF0IHRoZSBtb21lbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworR0VORVJBVEVfUEVSTE1PRCAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfTEFURVggdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIHRoZSBuZWNlc3NhcnkKKyMgTWFrZWZpbGUgcnVsZXMsIFBlcmwgc2NyaXB0cyBhbmQgTGFUZVggY29kZSB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIFBERiBhbmQgRFZJCisjIG91dHB1dCBmcm9tIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1BFUkxNT0QgaXMgc2V0IHRvIFlFUy4KKworUEVSTE1PRF9MQVRFWCAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfUFJFVFRZIHRhZyBpcyBzZXQgdG8gWUVTIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQgd2lsbCBiZSBuaWNlbHkKKyMgZm9ybWF0dGVkIHNvIGl0IGNhbiBiZSBwYXJzZWQgYnkgYSBodW1hbiByZWFkZXIuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvCisjIHVuZGVyc3RhbmQgd2hhdCBpcyBnb2luZyBvbi4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoaXMgdGFnIGlzIHNldCB0byBOTyB0aGUKKyMgc2l6ZSBvZiB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgbXVjaCBzbWFsbGVyIGFuZCBQZXJsIHdpbGwgcGFyc2UgaXQKKyMganVzdCB0aGUgc2FtZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1BFUkxNT0QgaXMgc2V0IHRvIFlFUy4KKworUEVSTE1PRF9QUkVUVFkgICAgICAgICA9IFlFUworCisjIFRoZSBuYW1lcyBvZiB0aGUgbWFrZSB2YXJpYWJsZXMgaW4gdGhlIGdlbmVyYXRlZCBkb3h5cnVsZXMubWFrZSBmaWxlIGFyZQorIyBwcmVmaXhlZCB3aXRoIHRoZSBzdHJpbmcgY29udGFpbmVkIGluIFBFUkxNT0RfTUFLRVZBUl9QUkVGSVguIFRoaXMgaXMgdXNlZnVsCisjIHNvIGRpZmZlcmVudCBkb3h5cnVsZXMubWFrZSBmaWxlcyBpbmNsdWRlZCBieSB0aGUgc2FtZSBNYWtlZmlsZSBkb24ndAorIyBvdmVyd3JpdGUgZWFjaCBvdGhlcidzIHZhcmlhYmxlcy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1BFUkxNT0QgaXMgc2V0IHRvIFlFUy4KKworUEVSTE1PRF9NQUtFVkFSX1BSRUZJWCA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHByZXByb2Nlc3NvcgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZXZhbHVhdGUgYWxsCisjIEMtcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgZm91bmQgaW4gdGhlIHNvdXJjZXMgYW5kIGluY2x1ZGUgZmlsZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VOQUJMRV9QUkVQUk9DRVNTSU5HICAgPSBZRVMKKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBleHBhbmQgYWxsIG1hY3JvIG5hbWVzCisjIGluIHRoZSBzb3VyY2UgY29kZS4gSWYgc2V0IHRvIE5PIG9ubHkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2lsbCBiZQorIyBwZXJmb3JtZWQuIE1hY3JvIGV4cGFuc2lvbiBjYW4gYmUgZG9uZSBpbiBhIGNvbnRyb2xsZWQgd2F5IGJ5IHNldHRpbmcKKyMgRVhQQU5EX09OTFlfUFJFREVGIHRvIFlFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworTUFDUk9fRVhQQU5TSU9OICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFBBTkRfT05MWV9QUkVERUYgYW5kIE1BQ1JPX0VYUEFOU0lPTiB0YWdzIGFyZSBib3RoIHNldCB0byBZRVMgdGhlbgorIyB0aGUgbWFjcm8gZXhwYW5zaW9uIGlzIGxpbWl0ZWQgdG8gdGhlIG1hY3JvcyBzcGVjaWZpZWQgd2l0aCB0aGUgUFJFREVGSU5FRCBhbmQKKyMgRVhQQU5EX0FTX0RFRklORUQgdGFncy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworRVhQQU5EX09OTFlfUFJFREVGICAgICA9IFlFUworCisjIElmIHRoZSBTRUFSQ0hfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMgdGhlIGluY2x1ZGVzIGZpbGVzIGluIHRoZQorIyBJTkNMVURFX1BBVEggd2lsbCBiZSBzZWFyY2hlZCBpZiBhICNpbmNsdWRlIGlzIGZvdW5kLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworU0VBUkNIX0lOQ0xVREVTICAgICAgICA9IFlFUworCisjIFRoZSBJTkNMVURFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdAorIyBjb250YWluIGluY2x1ZGUgZmlsZXMgdGhhdCBhcmUgbm90IGlucHV0IGZpbGVzIGJ1dCBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IHRoZQorIyBwcmVwcm9jZXNzb3IuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hfSU5DTFVERVMgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERV9QQVRIICAgICAgICAgICA9IEBhYnNfdG9wX3NyY2RpckAvaW5jbHVkZQorCisjIFlvdSBjYW4gdXNlIHRoZSBJTkNMVURFX0ZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQKKyMgcGF0dGVybnMgKGxpa2UgKi5oIGFuZCAqLmhwcCkgdG8gZmlsdGVyIG91dCB0aGUgaGVhZGVyLWZpbGVzIGluIHRoZQorIyBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuaywgdGhlIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIEZJTEVfUEFUVEVSTlMgd2lsbCBiZQorIyB1c2VkLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERV9GSUxFX1BBVFRFUk5TICA9CisKKyMgVGhlIFBSRURFRklORUQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgbWFjcm8gbmFtZXMgdGhhdCBhcmUKKyMgZGVmaW5lZCBiZWZvcmUgdGhlIHByZXByb2Nlc3NvciBpcyBzdGFydGVkIChzaW1pbGFyIHRvIHRoZSAtRCBvcHRpb24gb2YgZS5nLgorIyBnY2MpLiBUaGUgYXJndW1lbnQgb2YgdGhlIHRhZyBpcyBhIGxpc3Qgb2YgbWFjcm9zIG9mIHRoZSBmb3JtOiBuYW1lIG9yCisjIG5hbWU9ZGVmaW5pdGlvbiAobm8gc3BhY2VzKS4gSWYgdGhlIGRlZmluaXRpb24gYW5kIHRoZSAiPSIgYXJlIG9taXR0ZWQsICI9MSIKKyMgaXMgYXNzdW1lZC4gVG8gcHJldmVudCBhIG1hY3JvIGRlZmluaXRpb24gZnJvbSBiZWluZyB1bmRlZmluZWQgdmlhICN1bmRlZiBvcgorIyByZWN1cnNpdmVseSBleHBhbmRlZCB1c2UgdGhlIDo9IG9wZXJhdG9yIGluc3RlYWQgb2YgdGhlID0gb3BlcmF0b3IuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitQUkVERUZJTkVEICAgICAgICAgICAgID0gX19hdHRyaWJ1dGVfXyh4KT0KKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIGFuZCBFWFBBTkRfT05MWV9QUkVERUYgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIHRoaXMKKyMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBsaXN0IG9mIG1hY3JvIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLiBUaGUKKyMgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZSBzb3VyY2VzIHdpbGwgYmUgdXNlZC4gVXNlIHRoZSBQUkVERUZJTkVECisjIHRhZyBpZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IG92ZXJydWxlcyB0aGUKKyMgZGVmaW5pdGlvbiBmb3VuZCBpbiB0aGUgc291cmNlIGNvZGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitFWFBBTkRfQVNfREVGSU5FRCAgICAgID0KKworIyBJZiB0aGUgU0tJUF9GVU5DVElPTl9NQUNST1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuJ3MgcHJlcHJvY2Vzc29yIHdpbGwKKyMgcmVtb3ZlIGFsbCByZWZyZW5jZXMgdG8gZnVuY3Rpb24tbGlrZSBtYWNyb3MgdGhhdCBhcmUgYWxvbmUgb24gYSBsaW5lLCBoYXZlIGFuCisjIGFsbCB1cHBlcmNhc2UgbmFtZSwgYW5kIGRvIG5vdCBlbmQgd2l0aCBhIHNlbWljb2xvbi4gU3VjaCBmdW5jdGlvbiBtYWNyb3MgYXJlCisjIHR5cGljYWxseSB1c2VkIGZvciBib2lsZXItcGxhdGUgY29kZSwgYW5kIHdpbGwgY29uZnVzZSB0aGUgcGFyc2VyIGlmIG5vdAorIyByZW1vdmVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworU0tJUF9GVU5DVElPTl9NQUNST1MgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIHJlZmVyZW5jZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgVEFHRklMRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgdGFnIGZpbGVzLiBGb3IgZWFjaCB0YWcKKyMgZmlsZSB0aGUgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24gc2hvdWxkIGJlIGFkZGVkLiBUaGUgZm9ybWF0IG9mCisjIGEgdGFnIGZpbGUgd2l0aG91dCB0aGlzIGxvY2F0aW9uIGlzIGFzIGZvbGxvd3M6CisjIFRBR0ZJTEVTID0gZmlsZTEgZmlsZTIgLi4uCisjIEFkZGluZyBsb2NhdGlvbiBmb3IgdGhlIHRhZyBmaWxlcyBpcyBkb25lIGFzIGZvbGxvd3M6CisjIFRBR0ZJTEVTID0gZmlsZTE9bG9jMSAiZmlsZTIgPSBsb2MyIiAuLi4KKyMgd2hlcmUgbG9jMSBhbmQgbG9jMiBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aHMgb3IgVVJMcy4gU2VlIHRoZQorIyBzZWN0aW9uICJMaW5raW5nIHRvIGV4dGVybmFsIGRvY3VtZW50YXRpb24iIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2UKKyMgb2YgdGFnIGZpbGVzLgorIyBOb3RlOiBFYWNoIHRhZyBmaWxlIG11c3QgaGF2ZSBhbiB1bmlxdWUgbmFtZSAod2hlcmUgdGhlIG5hbWUgZG9lcyBOT1QgaW5jbHVkZQorIyB0aGUgcGF0aCkuIElmIGEgdGFnIGZpbGUgaXMgbm90IGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBkb3h5Z2VuIGlzCisjIHJ1biwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSB0YWdmaWxlIGhlcmUuCisKK1RBR0ZJTEVTICAgICAgICAgICAgICAgPQorCisjIFdoZW4gYSBmaWxlIG5hbWUgaXMgc3BlY2lmaWVkIGFmdGVyIEdFTkVSQVRFX1RBR0ZJTEUsIGRveHlnZW4gd2lsbCBjcmVhdGUgYQorIyB0YWcgZmlsZSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBpbnB1dCBmaWxlcyBpdCByZWFkcy4gU2VlIHNlY3Rpb24gIkxpbmtpbmcgdG8KKyMgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbiIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzYWdlIG9mIHRhZyBmaWxlcy4KKworR0VORVJBVEVfVEFHRklMRSAgICAgICA9CisKKyMgSWYgdGhlIEFMTEVYVEVSTkFMUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgY2xhc3Mgd2lsbCBiZSBsaXN0ZWQgaW4gdGhlCisjIGNsYXNzIGluZGV4LiBJZiBzZXQgdG8gTk8gb25seSB0aGUgaW5oZXJpdGVkIGV4dGVybmFsIGNsYXNzZXMgd2lsbCBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQUxMRVhURVJOQUxTICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVEVSTkFMX0dST1VQUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgZ3JvdXBzIHdpbGwgYmUgbGlzdGVkIGluCisjIHRoZSBtb2R1bGVzIGluZGV4LiBJZiBzZXQgdG8gTk8sIG9ubHkgdGhlIGN1cnJlbnQgcHJvamVjdCdzIGdyb3VwcyB3aWxsIGJlCisjIGxpc3RlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworRVhURVJOQUxfR1JPVVBTICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFRFUk5BTF9QQUdFUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgcGFnZXMgd2lsbCBiZSBsaXN0ZWQgaW4KKyMgdGhlIHJlbGF0ZWQgcGFnZXMgaW5kZXguIElmIHNldCB0byBOTywgb25seSB0aGUgY3VycmVudCBwcm9qZWN0J3MgcGFnZXMgd2lsbAorIyBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VYVEVSTkFMX1BBR0VTICAgICAgICAgPSBZRVMKKworIyBUaGUgUEVSTF9QQVRIIHNob3VsZCBiZSB0aGUgYWJzb2x1dGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgcGVybCBzY3JpcHQKKyMgaW50ZXJwcmV0ZXIgKGkuZS4gdGhlIHJlc3VsdCBvZiAnd2hpY2ggcGVybCcpLgorIyBUaGUgZGVmYXVsdCBmaWxlICh3aXRoIGFic29sdXRlIHBhdGgpIGlzOiAvdXNyL2Jpbi9wZXJsLgorCitQRVJMX1BBVEggICAgICAgICAgICAgID0gQFBFUkxACisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGRvdCB0b29sCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIENMQVNTX0RJQUdSQU1TIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGNsYXNzIGRpYWdyYW0KKyMgKGluIEhUTUwgYW5kIExhVGVYKSBmb3IgY2xhc3NlcyB3aXRoIGJhc2Ugb3Igc3VwZXIgY2xhc3Nlcy4gU2V0dGluZyB0aGUgdGFnIHRvCisjIE5PIHR1cm5zIHRoZSBkaWFncmFtcyBvZmYuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBhbHNvIHdvcmtzIHdpdGggSEFWRV9ET1QKKyMgZGlzYWJsZWQsIGJ1dCBpdCBpcyByZWNvbW1lbmRlZCB0byBpbnN0YWxsIGFuZCB1c2UgZG90LCBzaW5jZSBpdCB5aWVsZHMgbW9yZQorIyBwb3dlcmZ1bCBncmFwaHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0NMQVNTX0RJQUdSQU1TICAgICAgICAgPSBZRVMKKworIyBZb3UgY2FuIGRlZmluZSBtZXNzYWdlIHNlcXVlbmNlIGNoYXJ0cyB3aXRoaW4gZG94eWdlbiBjb21tZW50cyB1c2luZyB0aGUgXG1zYworIyBjb21tYW5kLiBEb3h5Z2VuIHdpbGwgdGhlbiBydW4gdGhlIG1zY2dlbiB0b29sIChzZWU6CisjIGh0dHA6Ly93d3cubWN0ZXJuYW4ubWUudWsvbXNjZ2VuLykpIHRvIHByb2R1Y2UgdGhlIGNoYXJ0IGFuZCBpbnNlcnQgaXQgaW4gdGhlCisjIGRvY3VtZW50YXRpb24uIFRoZSBNU0NHRU5fUEFUSCB0YWcgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUKKyMgdGhlIG1zY2dlbiB0b29sIHJlc2lkZXMuIElmIGxlZnQgZW1wdHkgdGhlIHRvb2wgaXMgYXNzdW1lZCB0byBiZSBmb3VuZCBpbiB0aGUKKyMgZGVmYXVsdCBzZWFyY2ggcGF0aC4KKworTVNDR0VOX1BBVEggICAgICAgICAgICA9CisKKyMgWW91IGNhbiBpbmNsdWRlIGRpYWdyYW1zIG1hZGUgd2l0aCBkaWEgaW4gZG94eWdlbiBkb2N1bWVudGF0aW9uLiBEb3h5Z2VuIHdpbGwKKyMgdGhlbiBydW4gZGlhIHRvIHByb2R1Y2UgdGhlIGRpYWdyYW0gYW5kIGluc2VydCBpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhlCisjIERJQV9QQVRIIHRhZyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgZGlhIGJpbmFyeSByZXNpZGVzLgorIyBJZiBsZWZ0IGVtcHR5IGRpYSBpcyBhc3N1bWVkIHRvIGJlIGZvdW5kIGluIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXRoLgorCitESUFfUEFUSCAgICAgICAgICAgICAgID0KKworIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgaGlkZSBpbmhlcml0YW5jZQorIyBhbmQgdXNhZ2UgcmVsYXRpb25zIGlmIHRoZSB0YXJnZXQgaXMgdW5kb2N1bWVudGVkIG9yIGlzIG5vdCBhIGNsYXNzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitISURFX1VORE9DX1JFTEFUSU9OUyAgID0gWUVTCisKKyMgSWYgeW91IHNldCB0aGUgSEFWRV9ET1QgdGFnIHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBhc3N1bWUgdGhlIGRvdCB0b29sIGlzCisjIGF2YWlsYWJsZSBmcm9tIHRoZSBwYXRoLiBUaGlzIHRvb2wgaXMgcGFydCBvZiBHcmFwaHZpeiAoc2VlOgorIyBodHRwOi8vd3d3LmdyYXBodml6Lm9yZy8pLCBhIGdyYXBoIHZpc3VhbGl6YXRpb24gdG9vbGtpdCBmcm9tIEFUJlQgYW5kIEx1Y2VudAorIyBCZWxsIExhYnMuIFRoZSBvdGhlciBvcHRpb25zIGluIHRoaXMgc2VjdGlvbiBoYXZlIG5vIGVmZmVjdCBpZiB0aGlzIG9wdGlvbiBpcworIyBzZXQgdG8gTk8KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitIQVZFX0RPVCAgICAgICAgICAgICAgID0gQERPWFlHRU5fVVNFX0RPVEAKKworIyBUaGUgRE9UX05VTV9USFJFQURTIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGRvdCBpbnZvY2F0aW9ucyBkb3h5Z2VuIGlzIGFsbG93ZWQKKyMgdG8gcnVuIGluIHBhcmFsbGVsLiBXaGVuIHNldCB0byAwIGRveHlnZW4gd2lsbCBiYXNlIHRoaXMgb24gdGhlIG51bWJlciBvZgorIyBwcm9jZXNzb3JzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLiBZb3UgY2FuIHNldCBpdCBleHBsaWNpdGx5IHRvIGEgdmFsdWUKKyMgbGFyZ2VyIHRoYW4gMCB0byBnZXQgY29udHJvbCBvdmVyIHRoZSBiYWxhbmNlIGJldHdlZW4gQ1BVIGxvYWQgYW5kIHByb2Nlc3NpbmcKKyMgc3BlZWQuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDMyLCBkZWZhdWx0IHZhbHVlOiAwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX05VTV9USFJFQURTICAgICAgICA9IDAKKworIyBXaGVuIHlvdSB3YW50IGEgZGlmZmVyZW50bHkgbG9va2luZyBmb250IG4gdGhlIGRvdCBmaWxlcyB0aGF0IGRveHlnZW4KKyMgZ2VuZXJhdGVzIHlvdSBjYW4gc3BlY2lmeSB0aGUgZm9udCBuYW1lIHVzaW5nIERPVF9GT05UTkFNRS4gWW91IG5lZWQgdG8gbWFrZQorIyBzdXJlIGRvdCBpcyBhYmxlIHRvIGZpbmQgdGhlIGZvbnQsIHdoaWNoIGNhbiBiZSBkb25lIGJ5IHB1dHRpbmcgaXQgaW4gYQorIyBzdGFuZGFyZCBsb2NhdGlvbiBvciBieSBzZXR0aW5nIHRoZSBET1RGT05UUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciBieQorIyBzZXR0aW5nIERPVF9GT05UUEFUSCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZvbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBIZWx2ZXRpY2EuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfRk9OVE5BTUUgICAgICAgICAgID0gSGVsdmV0aWNhCisKKyMgVGhlIERPVF9GT05UU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBzaXplIChpbiBwb2ludHMpIG9mIHRoZSBmb250IG9mCisjIGRvdCBncmFwaHMuCisjIE1pbmltdW0gdmFsdWU6IDQsIG1heGltdW0gdmFsdWU6IDI0LCBkZWZhdWx0IHZhbHVlOiAxMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9GT05UU0laRSAgICAgICAgICAgPSAxMAorCisjIEJ5IGRlZmF1bHQgZG94eWdlbiB3aWxsIHRlbGwgZG90IHRvIHVzZSB0aGUgZGVmYXVsdCBmb250IGFzIHNwZWNpZmllZCB3aXRoCisjIERPVF9GT05UTkFNRS4gSWYgeW91IHNwZWNpZnkgYSBkaWZmZXJlbnQgZm9udCB1c2luZyBET1RfRk9OVE5BTUUgeW91IGNhbiBzZXQKKyMgdGhlIHBhdGggd2hlcmUgZG90IGNhbiBmaW5kIGl0IHVzaW5nIHRoaXMgdGFnLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0ZPTlRQQVRIICAgICAgICAgICA9CisKKyMgSWYgdGhlIENMQVNTX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yCisjIGVhY2ggZG9jdW1lbnRlZCBjbGFzcyBzaG93aW5nIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IGluaGVyaXRhbmNlIHJlbGF0aW9ucy4KKyMgU2V0dGluZyB0aGlzIHRhZyB0byBZRVMgd2lsbCBmb3JjZSB0aGUgQ0xBU1NfRElBR1JBTVMgdGFnIHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworQ0xBU1NfR1JBUEggICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBDT0xMQUJPUkFUSU9OX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBjbGFzcyBzaG93aW5nIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IGltcGxlbWVudGF0aW9uCisjIGRlcGVuZGVuY2llcyAoaW5oZXJpdGFuY2UsIGNvbnRhaW5tZW50LCBhbmQgY2xhc3MgcmVmZXJlbmNlcyB2YXJpYWJsZXMpIG9mIHRoZQorIyBjbGFzcyB3aXRoIG90aGVyIGRvY3VtZW50ZWQgY2xhc3Nlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0NPTExBQk9SQVRJT05fR1JBUEggICAgPSBZRVMKKworIyBJZiB0aGUgR1JPVVBfR1JBUEhTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yCisjIGdyb3Vwcywgc2hvd2luZyB0aGUgZGlyZWN0IGdyb3VwcyBkZXBlbmRlbmNpZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitHUk9VUF9HUkFQSFMgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFVNTF9MT09LIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBpbmhlcml0YW5jZSBhbmQKKyMgY29sbGFib3JhdGlvbiBkaWFncmFtcyBpbiBhIHN0eWxlIHNpbWlsYXIgdG8gdGhlIE9NRydzIFVuaWZpZWQgTW9kZWxpbmcKKyMgTGFuZ3VhZ2UuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK1VNTF9MT09LICAgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBVTUxfTE9PSyB0YWcgaXMgZW5hYmxlZCwgdGhlIGZpZWxkcyBhbmQgbWV0aG9kcyBhcmUgc2hvd24gaW5zaWRlIHRoZQorIyBjbGFzcyBub2RlLiBJZiB0aGVyZSBhcmUgbWFueSBmaWVsZHMgb3IgbWV0aG9kcyBhbmQgbWFueSBub2RlcyB0aGUgZ3JhcGggbWF5CisjIGJlY29tZSB0b28gYmlnIHRvIGJlIHVzZWZ1bC4gVGhlIFVNTF9MSU1JVF9OVU1fRklFTERTIHRocmVzaG9sZCBsaW1pdHMgdGhlCisjIG51bWJlciBvZiBpdGVtcyBmb3IgZWFjaCB0eXBlIHRvIG1ha2UgdGhlIHNpemUgbW9yZSBtYW5hZ2VhYmxlLiBTZXQgdGhpcyB0byAwCisjIGZvciBubyBsaW1pdC4gTm90ZSB0aGF0IHRoZSB0aHJlc2hvbGQgbWF5IGJlIGV4Y2VlZGVkIGJ5IDUwJSBiZWZvcmUgdGhlIGxpbWl0CisjIGlzIGVuZm9yY2VkLiBTbyB3aGVuIHlvdSBzZXQgdGhlIHRocmVzaG9sZCB0byAxMCwgdXAgdG8gMTUgZmllbGRzIG1heSBhcHBlYXIsCisjIGJ1dCBpZiB0aGUgbnVtYmVyIGV4Y2VlZHMgMTUsIHRoZSB0b3RhbCBhbW91bnQgb2YgZmllbGRzIHNob3duIGlzIGxpbWl0ZWQgdG8KKyMgMTAuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDEwMCwgZGVmYXVsdCB2YWx1ZTogMTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitVTUxfTElNSVRfTlVNX0ZJRUxEUyAgID0gMTAKKworIyBJZiB0aGUgVEVNUExBVEVfUkVMQVRJT05TIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIGluaGVyaXRhbmNlIGFuZAorIyBjb2xsYWJvcmF0aW9uIGdyYXBocyB3aWxsIHNob3cgdGhlIHJlbGF0aW9ucyBiZXR3ZWVuIHRlbXBsYXRlcyBhbmQgdGhlaXIKKyMgaW5zdGFuY2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitURU1QTEFURV9SRUxBVElPTlMgICAgID0gTk8KKworIyBJZiB0aGUgSU5DTFVERV9HUkFQSCwgRU5BQkxFX1BSRVBST0NFU1NJTkcgYW5kIFNFQVJDSF9JTkNMVURFUyB0YWdzIGFyZSBzZXQgdG8KKyMgWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBmaWxlIHNob3dpbmcgdGhlCisjIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGUgd2l0aCBvdGhlciBkb2N1bWVudGVkCisjIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERV9HUkFQSCAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBJTkNMVURFRF9CWV9HUkFQSCwgRU5BQkxFX1BSRVBST0NFU1NJTkcgYW5kIFNFQVJDSF9JTkNMVURFUyB0YWdzIGFyZQorIyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBmaWxlIHNob3dpbmcKKyMgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGUgd2l0aCBvdGhlciBkb2N1bWVudGVkCisjIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERURfQllfR1JBUEggICAgICA9IFlFUworCisjIElmIHRoZSBDQUxMX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgY2FsbAorIyBkZXBlbmRlbmN5IGdyYXBoIGZvciBldmVyeSBnbG9iYWwgZnVuY3Rpb24gb3IgY2xhc3MgbWV0aG9kLgorIworIyBOb3RlIHRoYXQgZW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSB0aW1lIG9mIGEgcnVuLgorIyBTbyBpbiBtb3N0IGNhc2VzIGl0IHdpbGwgYmUgYmV0dGVyIHRvIGVuYWJsZSBjYWxsIGdyYXBocyBmb3Igc2VsZWN0ZWQKKyMgZnVuY3Rpb25zIG9ubHkgdXNpbmcgdGhlIFxjYWxsZ3JhcGggY29tbWFuZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworQ0FMTF9HUkFQSCAgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBDQUxMRVJfR1JBUEggdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBjYWxsZXIKKyMgZGVwZW5kZW5jeSBncmFwaCBmb3IgZXZlcnkgZ2xvYmFsIGZ1bmN0aW9uIG9yIGNsYXNzIG1ldGhvZC4KKyMKKyMgTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbmNyZWFzZSB0aGUgdGltZSBvZiBhIHJ1bi4KKyMgU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbGVyIGdyYXBocyBmb3Igc2VsZWN0ZWQKKyMgZnVuY3Rpb25zIG9ubHkgdXNpbmcgdGhlIFxjYWxsZXJncmFwaCBjb21tYW5kLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitDQUxMRVJfR1JBUEggICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEdSQVBISUNBTF9ISUVSQVJDSFkgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ3JhcGhpY2FsCisjIGhpZXJhcmNoeSBvZiBhbGwgY2xhc3NlcyBpbnN0ZWFkIG9mIGEgdGV4dHVhbCBvbmUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitHUkFQSElDQUxfSElFUkFSQ0hZICAgID0gWUVTCisKKyMgSWYgdGhlIERJUkVDVE9SWV9HUkFQSCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzaG93IHRoZQorIyBkZXBlbmRlbmNpZXMgYSBkaXJlY3RvcnkgaGFzIG9uIG90aGVyIGRpcmVjdG9yaWVzIGluIGEgZ3JhcGhpY2FsIHdheS4gVGhlCisjIGRlcGVuZGVuY3kgcmVsYXRpb25zIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSAjaW5jbHVkZSByZWxhdGlvbnMgYmV0d2VlbiB0aGUKKyMgZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRElSRUNUT1JZX0dSQVBIICAgICAgICA9IFlFUworCisjIFRoZSBET1RfSU1BR0VfRk9STUFUIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGltYWdlIGZvcm1hdCBvZiB0aGUgaW1hZ2VzCisjIGdlbmVyYXRlZCBieSBkb3QuCisjIE5vdGU6IElmIHlvdSBjaG9vc2Ugc3ZnIHlvdSBuZWVkIHRvIHNldCBIVE1MX0ZJTEVfRVhURU5TSU9OIHRvIHhodG1sIGluIG9yZGVyCisjIHRvIG1ha2UgdGhlIFNWRyBmaWxlcyB2aXNpYmxlIGluIElFIDkrIChvdGhlciBicm93c2VycyBkbyBub3QgaGF2ZSB0aGlzCisjIHJlcXVpcmVtZW50KS4KKyMgUG9zc2libGUgdmFsdWVzIGFyZTogcG5nLCBqcGcsIGdpZiBhbmQgc3ZnLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogcG5nLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0lNQUdFX0ZPUk1BVCAgICAgICA9IHBuZworCisjIElmIERPVF9JTUFHRV9GT1JNQVQgaXMgc2V0IHRvIHN2ZywgdGhlbiB0aGlzIG9wdGlvbiBjYW4gYmUgc2V0IHRvIFlFUyB0bworIyBlbmFibGUgZ2VuZXJhdGlvbiBvZiBpbnRlcmFjdGl2ZSBTVkcgaW1hZ2VzIHRoYXQgYWxsb3cgem9vbWluZyBhbmQgcGFubmluZy4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgYSBtb2Rlcm4gYnJvd3NlciBvdGhlciB0aGFuIEludGVybmV0IEV4cGxvcmVyLiBUZXN0ZWQKKyMgYW5kIHdvcmtpbmcgYXJlIEZpcmVmb3gsIENocm9tZSwgU2FmYXJpLCBhbmQgT3BlcmEuCisjIE5vdGU6IEZvciBJRSA5KyB5b3UgbmVlZCB0byBzZXQgSFRNTF9GSUxFX0VYVEVOU0lPTiB0byB4aHRtbCBpbiBvcmRlciB0byBtYWtlCisjIHRoZSBTVkcgZmlsZXMgdmlzaWJsZS4gT2xkZXIgdmVyc2lvbnMgb2YgSUUgZG8gbm90IGhhdmUgU1ZHIHN1cHBvcnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0lOVEVSQUNUSVZFX1NWRyAgICAgICAgPSBOTworCisjIFRoZSBET1RfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB3aGVyZSB0aGUgZG90IHRvb2wgY2FuIGJlCisjIGZvdW5kLiBJZiBsZWZ0IGJsYW5rLCBpdCBpcyBhc3N1bWVkIHRoZSBkb3QgdG9vbCBjYW4gYmUgZm91bmQgaW4gdGhlIHBhdGguCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfUEFUSCAgICAgICAgICAgICAgID0KKworIyBUaGUgRE9URklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBkb3QgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgXGRvdGZpbGUKKyMgY29tbWFuZCkuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RGSUxFX0RJUlMgICAgICAgICAgID0KKworIyBUaGUgTVNDRklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBtc2MgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgXG1zY2ZpbGUKKyMgY29tbWFuZCkuCisKK01TQ0ZJTEVfRElSUyAgICAgICAgICAgPQorCisjIFRoZSBESUFGSUxFX0RJUlMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdAorIyBjb250YWluIGRpYSBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZSBcZGlhZmlsZQorIyBjb21tYW5kKS4KKworRElBRklMRV9ESVJTICAgICAgICAgICA9CisKKyMgVGhlIERPVF9HUkFQSF9NQVhfTk9ERVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9kZXMKKyMgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSBncmFwaC4gSWYgdGhlIG51bWJlciBvZiBub2RlcyBpbiBhIGdyYXBoIGJlY29tZXMKKyMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZSwgZG94eWdlbiB3aWxsIHRydW5jYXRlIHRoZSBncmFwaCwgd2hpY2ggaXMgdmlzdWFsaXplZAorIyBieSByZXByZXNlbnRpbmcgYSBub2RlIGFzIGEgcmVkIGJveC4gTm90ZSB0aGF0IGRveHlnZW4gaWYgdGhlIG51bWJlciBvZiBkaXJlY3QKKyMgY2hpbGRyZW4gb2YgdGhlIHJvb3Qgbm9kZSBpbiBhIGdyYXBoIGlzIGFscmVhZHkgbGFyZ2VyIHRoYW4KKyMgRE9UX0dSQVBIX01BWF9OT0RFUyB0aGVuIHRoZSBncmFwaCB3aWxsIG5vdCBiZSBzaG93biBhdCBhbGwuIEFsc28gbm90ZSB0aGF0CisjIHRoZSBzaXplIG9mIGEgZ3JhcGggY2FuIGJlIGZ1cnRoZXIgcmVzdHJpY3RlZCBieSBNQVhfRE9UX0dSQVBIX0RFUFRILgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAxMDAwMCwgZGVmYXVsdCB2YWx1ZTogNTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfR1JBUEhfTUFYX05PREVTICAgID0gNTAKKworIyBUaGUgTUFYX0RPVF9HUkFQSF9ERVBUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSBncmFwaHMKKyMgZ2VuZXJhdGVkIGJ5IGRvdC4gQSBkZXB0aCB2YWx1ZSBvZiAzIG1lYW5zIHRoYXQgb25seSBub2RlcyByZWFjaGFibGUgZnJvbSB0aGUKKyMgcm9vdCBieSBmb2xsb3dpbmcgYSBwYXRoIHZpYSBhdCBtb3N0IDMgZWRnZXMgd2lsbCBiZSBzaG93bi4gTm9kZXMgdGhhdCBsYXkKKyMgZnVydGhlciBmcm9tIHRoZSByb290IG5vZGUgd2lsbCBiZSBvbWl0dGVkLiBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIG9wdGlvbiB0byAxCisjIG9yIDIgbWF5IGdyZWF0bHkgcmVkdWNlIHRoZSBjb21wdXRhdGlvbiB0aW1lIG5lZWRlZCBmb3IgbGFyZ2UgY29kZSBiYXNlcy4gQWxzbworIyBub3RlIHRoYXQgdGhlIHNpemUgb2YgYSBncmFwaCBjYW4gYmUgZnVydGhlciByZXN0cmljdGVkIGJ5CisjIERPVF9HUkFQSF9NQVhfTk9ERVMuIFVzaW5nIGEgZGVwdGggb2YgMCBtZWFucyBubyBkZXB0aCByZXN0cmljdGlvbi4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMTAwMCwgZGVmYXVsdCB2YWx1ZTogMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK01BWF9ET1RfR1JBUEhfREVQVEggICAgPSAwCisKKyMgU2V0IHRoZSBET1RfVFJBTlNQQVJFTlQgdGFnIHRvIFlFUyB0byBnZW5lcmF0ZSBpbWFnZXMgd2l0aCBhIHRyYW5zcGFyZW50CisjIGJhY2tncm91bmQuIFRoaXMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYmVjYXVzZSBkb3Qgb24gV2luZG93cyBkb2VzIG5vdCBzZWVtCisjIHRvIHN1cHBvcnQgdGhpcyBvdXQgb2YgdGhlIGJveC4KKyMKKyMgV2FybmluZzogRGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSB1c2VkLCBlbmFibGluZyB0aGlzIG9wdGlvbiBtYXkgbGVhZCB0bworIyBiYWRseSBhbnRpLWFsaWFzZWQgbGFiZWxzIG9uIHRoZSBlZGdlcyBvZiBhIGdyYXBoIChpLmUuIHRoZXkgYmVjb21lIGhhcmQgdG8KKyMgcmVhZCkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9UUkFOU1BBUkVOVCAgICAgICAgPSBOTworCisjIFNldCB0aGUgRE9UX01VTFRJX1RBUkdFVFMgdGFnIHRvIFlFUyBhbGxvdyBkb3QgdG8gZ2VuZXJhdGUgbXVsdGlwbGUgb3V0cHV0CisjIGZpbGVzIGluIG9uZSBydW4gKGkuZS4gbXVsdGlwbGUgLW8gYW5kIC1UIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZSkuIFRoaXMKKyMgbWFrZXMgZG90IHJ1biBmYXN0ZXIsIGJ1dCBzaW5jZSBvbmx5IG5ld2VyIHZlcnNpb25zIG9mIGRvdCAoPjEuOC4xMCkgc3VwcG9ydAorIyB0aGlzLCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX01VTFRJX1RBUkdFVFMgICAgICA9IFlFUworCisjIElmIHRoZSBHRU5FUkFURV9MRUdFTkQgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgbGVnZW5kIHBhZ2UKKyMgZXhwbGFpbmluZyB0aGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBib3hlcyBhbmQgYXJyb3dzIGluIHRoZSBkb3QgZ2VuZXJhdGVkCisjIGdyYXBocy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0xFR0VORCAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRE9UX0NMRUFOVVAgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIHJlbW92ZSB0aGUgaW50ZXJtZWRpYXRlIGRvdAorIyBmaWxlcyB0aGF0IGFyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSB2YXJpb3VzIGdyYXBocy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9DTEVBTlVQICAgICAgICAgICAgPSBZRVMKZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5hbSBiL2RvYy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjcyZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTE0IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoc3JjZGlyKS9Eb3h5ZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChzcmNkaXIpL2hlYWRlci5odG1sICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHNyY2RpcikvaW1hZ2VzL09wZW4tVGhyZWFkLUxvZ28tMjAweDQyLnBuZyAgXAorICAgICQoc3JjZGlyKS9pbWFnZXMvb3BlbnRocmVhZF9jb250cmliLnBuZyAgICAgICBcCisgICAgJChzcmNkaXIpL2ltYWdlcy9vcGVudGhyZWFkX2xvZ28ucG5nICAgICAgICAgIFwKKyAgICBkcmFmdC1ycXVhdHRsZS1zcGluZWwtdW5pZmllZC5odG1sICAgICAgICAgICAgXAorICAgIGRyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLnR4dCAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjCisjIE92ZXJyaWRlIGF1dG90b29sJ3MgZGVmYXVsdCBub3Rpb24gb2YgdGhlIHBhY2thZ2UgdmVyc2lvbiB2YXJpYWJsZXMuCisjIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gd2UgY3JlYXRlIGEgZG9jIGRpc3RyaWJ1dGlvbiB0aGF0IHRoZQorIyB2ZXJzaW9uIGlzIGFsd2F5cyB0aGUgY3VycmVudCB2ZXJzaW9uLCBub3QgdGhlIHZlcnNpb24gd2hlbiB0aGUKKyMgcGFja2FnZSB3YXMgYm9vdHN0cmFwcGVkLgorIworUEFDS0FHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKHNoZWxsIGNhdCAkKHRvcF9idWlsZGRpcikvLmxvY2FsLXZlcnNpb24pCitWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQoUEFDS0FHRV9WRVJTSU9OKQorCisKK2RvY2Rpc3RkaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz0gLgorCitvcGVudGhyZWFkX2RvY2Rpc3RfYWxpYXMgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFBBQ0tBR0VfVEFSTkFNRSktZG9jcworCitvcGVudGhyZWFkX2RvY2Rpc3RfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKG9wZW50aHJlYWRfZG9jZGlzdF9hbGlhcyktJChWRVJTSU9OKQorCitvcGVudGhyZWFkX2RvY2Rpc3RfYXJjaGl2ZSAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKGRvY2Rpc3RkaXIpLyQob3BlbnRocmVhZF9kb2NkaXN0X25hbWUpLnRhci5negorCitDTEVBTkZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBEb3h5ZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQob3BlbnRocmVhZF9kb2NkaXN0X2FyY2hpdmUpICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0JVSUxEX0RPQ1MKKworYWxsLWxvY2FsOiBodG1sL2luZGV4Lmh0bWwKKworIworIyBXZSBjaG9vc2UgdG8gbWFudWFsbHkgdHJhbnNmb3JtIERveHlmaWxlLmluIGludG8gRG94eWZpbGUgaGVyZSBpbgorIyB0aGUgbWFrZWZpbGUgcmF0aGVyIHRoYW4gaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgc28gdGhhdCB3ZSBjYW4gdGFrZQorIyBhZHZhbnRhZ2Ugb2YgbGl2ZSwgYXQgYnVpbGQgdGltZSAocmF0aGVyIHRoYW4gYXQgY29uZmlndXJlIHRpbWUpLAorIyB1cGRhdGluZyBvZiB0aGUgcGFja2FnZSB2ZXJzaW9uIG51bWJlci4KKyMKKworRG94eWZpbGU6ICQoc3JjZGlyKS9Eb3h5ZmlsZS5pbiBNYWtlZmlsZQorCSQoQU1fVl9HRU4pJChTRUQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgLWUgInMsXEBET1hZR0VOX1VTRV9ET1RcQCwkKERPWFlHRU5fVVNFX0RPVCksZyIgICBcCisJICAgIC1lICJzLFxAUEFDS0FHRV9OQU1FXEAsJChQQUNLQUdFX05BTUUpLGciICAgICAgICAgXAorCSAgICAtZSAicyxcQFBBQ0tBR0VfVkVSU0lPTlxALCQoUEFDS0FHRV9WRVJTSU9OKSxnIiAgIFwKKwkgICAgLWUgInMsXEBQRVJMXEAsJChQRVJMKSxnIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIC1lICJzLFxAYWJzX2J1aWxkZGlyXEAsJChhYnNfYnVpbGRkaXIpLGciICAgICAgICAgXAorCSAgICAtZSAicyxcQGFic19zcmNkaXJcQCwkKGFic19zcmNkaXIpLGciICAgICAgICAgICAgIFwKKwkgICAgLWUgInMsXEBhYnNfdG9wX2J1aWxkZGlyXEAsJChhYnNfdG9wX2J1aWxkZGlyKSxnIiBcCisJICAgIC1lICJzLFxAYWJzX3RvcF9zcmNkaXJcQCwkKGFic190b3Bfc3JjZGlyKSxnIiAgICAgXAorCSAgICA8ICIkKHNyY2RpcikvRG94eWZpbGUuaW4iID4gIiQoQCkiCisKK2h0bWwvaW5kZXguaHRtbDogRG94eWZpbGUKKwkkKEFNX1ZfR0VOKSQoRE9YWUdFTikgJCg8KQorCisjCisjIEFkZGl0aW9uIHJ1bGVzIGFuZCBjb21tYW5kcyB0byBjcmVhdGUgYSBkb2N1bWVudGF0aW9uLW9ubHkKKyMgZGlzdHJpYnV0aW9uIG9mIG9wZW50aHJlYWQKKyMKKworJChvcGVudGhyZWFkX2RvY2Rpc3RfbmFtZSk6IGh0bWwvaW5kZXguaHRtbAorCSQoQU1fVl9hdClybSAtZiAtciAkKEApCisJJChjYWxsIGNyZWF0ZS1kaXJlY3RvcnkpCisJJChBTV9WX2F0KWNwIC1SIGh0bWwgJChAKQorCiskKG9wZW50aHJlYWRfZG9jZGlzdF9hcmNoaXZlKTogJChvcGVudGhyZWFkX2RvY2Rpc3RfbmFtZSkKKwkkKEFNX1ZfYXQpZWNobyAiICBUQVIgICAgICAkKEApIgorCSQoQU1fVl9hdCl0YXJkaXI9IiQoPCkiICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiAiJChAKSIgJiYgcm0gLXJmICQoPCkKKworZG9jZGlzdCAkKG9wZW50aHJlYWRfZG9jZGlzdF9hbGlhcyk6ICQob3BlbnRocmVhZF9kb2NkaXN0X2FyY2hpdmUpCisKK2NsZWFuLWxvY2FsOgorCSQoQU1fVl9hdClybSAtZiAtciBodG1sCisKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9ET0NTCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvZG9jL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLmh0bWwgYi9kb2MvZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzRkNDlhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLmh0bWwKQEAgLTAsMCArMSw0OTI1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorCis8aHRtbCBsYW5nPSJlbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZCBwcm9maWxlPSJodHRwOi8vd3d3LnczLm9yZy8yMDA2LzAzL2hjYXJkIGh0dHA6Ly9kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvMjAwOC8wOC8wNC9kYy1odG1sLyI+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgorCisgIDx0aXRsZT5TcGluZWwgSG9zdC1Db250cm9sbGVyIFByb3RvY29sPC90aXRsZT4KKworICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJYbWwyUmZjIChzYW5zIHNlcmlmKSI+CisgIC8qPCFbQ0RBVEFbKi8KKwkgIGEgeworCSAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworCSAgfQorICAgICAgLyogaW5mbyBjb2RlIGZyb20gU2FudGFLbGF1c3MgYXQgaHR0cDovL3d3dy5tYWRhYm91dHN0eWxlLmNvbS90b29sdGlwMi5odG1sICovCisgICAgICBhLmluZm8geworICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIGtleS4gKi8KKyAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgICAgICAgei1pbmRleDogMjQ7CisgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAgfQorICAgICAgYS5pbmZvOmhvdmVyIHsKKyAgICAgICAgICB6LWluZGV4OiAyNTsKKyAgICAgICAgICBjb2xvcjogI0ZGRjsgYmFja2dyb3VuZC1jb2xvcjogIzkwMDsKKyAgICAgIH0KKyAgICAgIGEuaW5mbyBzcGFuIHsgZGlzcGxheTogbm9uZTsgfQorICAgICAgYS5pbmZvOmhvdmVyIHNwYW4uaW5mbyB7CisgICAgICAgICAgLyogVGhlIHNwYW4gd2lsbCBkaXNwbGF5IGp1c3Qgb24gOmhvdmVyIHN0YXRlLiAqLworICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7CisgICAgICAgICAgdG9wOiAyZW07IGxlZnQ6IC01ZW07IHdpZHRoOiAxNWVtOworICAgICAgICAgIHBhZGRpbmc6IDJweDsgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKKyAgICAgICAgICBjb2xvcjogIzkwMDsgYmFja2dyb3VuZC1jb2xvcjogI0VFRTsKKyAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgfQorCSAgYS5zbXBsIHsKKwkgIGNvbG9yOiBibGFjazsKKwkgIH0KKwkgIGE6aG92ZXIgeworCSAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisJICB9CisJICBhOmFjdGl2ZSB7CisJICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKwkgIH0KKwkgIGFkZHJlc3MgeworCSAgbWFyZ2luLXRvcDogMWVtOworCSAgbWFyZ2luLWxlZnQ6IDJlbTsKKwkgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKwkgIH0KKwkgIGJvZHkgeworCSAgY29sb3I6IGJsYWNrOworCSAgZm9udC1mYW1pbHk6IHZlcmRhbmEsIGhlbHZldGljYSwgYXJpYWwsIHNhbnMtc2VyaWY7CisJICBmb250LXNpemU6IDEwcHQ7CisJICBtYXgtd2lkdGg6IDU1ZW07CisJICAKKwkgIH0KKwkgIGNpdGUgeworCSAgZm9udC1zdHlsZTogbm9ybWFsOworCSAgfQorCSAgZGQgeworCSAgbWFyZ2luLXJpZ2h0OiAyZW07CisJICB9CisJICBkbCB7CisJICBtYXJnaW4tbGVmdDogMmVtOworCSAgfQorCQorCSAgdWwuZW1wdHkgeworCSAgbGlzdC1zdHlsZS10eXBlOiBub25lOworCSAgfQorCSAgdWwuZW1wdHkgbGkgeworCSAgbWFyZ2luLXRvcDogLjVlbTsKKwkgIH0KKwkgIGRsIHAgeworCSAgbWFyZ2luLWxlZnQ6IDBlbTsKKwkgIH0KKwkgIGR0IHsKKwkgIG1hcmdpbi10b3A6IC41ZW07CisJICB9CisJICBoMSB7CisJICBmb250LXNpemU6IDE0cHQ7CisJICBsaW5lLWhlaWdodDogMjFwdDsKKwkgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOworCSAgfQorCSAgaDEubnAgeworCSAgcGFnZS1icmVhay1iZWZvcmU6IGFsd2F5czsKKwkgIH0KKwkgIGgxIGEgeworCSAgY29sb3I6ICMzMzMzMzM7CisJICB9CisJICBoMiB7CisJICBmb250LXNpemU6IDEycHQ7CisJICBsaW5lLWhlaWdodDogMTVwdDsKKwkgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOworCSAgfQorCSAgaDMsIGg0LCBoNSwgaDYgeworCSAgZm9udC1zaXplOiAxMHB0OworCSAgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7CisJICB9CisJICBoMiBhLCBoMyBhLCBoNCBhLCBoNSBhLCBoNiBhIHsKKwkgIGNvbG9yOiBibGFjazsKKwkgIH0KKwkgIGltZyB7CisJICBtYXJnaW4tbGVmdDogM2VtOworCSAgfQorCSAgbGkgeworCSAgbWFyZ2luLWxlZnQ6IDJlbTsKKwkgIG1hcmdpbi1yaWdodDogMmVtOworCSAgfQorCSAgb2wgeworCSAgbWFyZ2luLWxlZnQ6IDJlbTsKKwkgIG1hcmdpbi1yaWdodDogMmVtOworCSAgfQorCSAgb2wgcCB7CisJICBtYXJnaW4tbGVmdDogMGVtOworCSAgfQorCSAgcCB7CisJICBtYXJnaW4tbGVmdDogMmVtOworCSAgbWFyZ2luLXJpZ2h0OiAyZW07CisJICB9CisJICBwcmUgeworCSAgbWFyZ2luLWxlZnQ6IDNlbTsKKwkgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0eWVsbG93OworCSAgcGFkZGluZzogLjI1ZW07CisJICB9CisJICBwcmUudGV4dDIgeworCSAgYm9yZGVyLXN0eWxlOiBkb3R0ZWQ7CisJICBib3JkZXItd2lkdGg6IDFweDsKKwkgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7CisJICB3aWR0aDogNjllbTsKKwkgIH0KKwkgIHByZS5pbmxpbmUgeworCSAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisJICBwYWRkaW5nOiAwZW07CisJICB9CisJICBwcmUudGV4dCB7CisJICBib3JkZXItc3R5bGU6IGRvdHRlZDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKKwkgIHdpZHRoOiA2OWVtOworCSAgfQorCSAgcHJlLmRyYXdpbmcgeworCSAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKKwkgIHBhZGRpbmc6IDJlbTsKKwkgIH0KKwkgIHRhYmxlIHsKKwkgIG1hcmdpbi1sZWZ0OiAyZW07CisJICB9CisJICB0YWJsZS50dCB7CisJICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworCSAgfQorCSAgdGFibGUuZnVsbCB7CisJICBib3JkZXItc3R5bGU6IG91dHNldDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgfQorCSAgdGFibGUuaGVhZGVycyB7CisJICBib3JkZXItc3R5bGU6IG91dHNldDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgfQorCSAgdGFibGUudHQgdGQgeworCSAgdmVydGljYWwtYWxpZ246IHRvcDsKKwkgIH0KKwkgIHRhYmxlLmZ1bGwgdGQgeworCSAgYm9yZGVyLXN0eWxlOiBpbnNldDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgfQorCSAgdGFibGUudHQgdGggeworCSAgdmVydGljYWwtYWxpZ246IHRvcDsKKwkgIH0KKwkgIHRhYmxlLmZ1bGwgdGggeworCSAgYm9yZGVyLXN0eWxlOiBpbnNldDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgfQorCSAgdGFibGUuaGVhZGVycyB0aCB7CisJICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBpbnNldCBub25lOworCSAgYm9yZGVyLXdpZHRoOiAxcHg7CisJICB9CisJICB0YWJsZS5sZWZ0IHsKKwkgIG1hcmdpbi1yaWdodDogYXV0bzsKKwkgIH0KKwkgIHRhYmxlLnJpZ2h0IHsKKwkgIG1hcmdpbi1sZWZ0OiBhdXRvOworCSAgfQorCSAgdGFibGUuY2VudGVyIHsKKwkgIG1hcmdpbi1sZWZ0OiBhdXRvOworCSAgbWFyZ2luLXJpZ2h0OiBhdXRvOworCSAgfQorCSAgY2FwdGlvbiB7CisJICBjYXB0aW9uLXNpZGU6IGJvdHRvbTsKKwkgIGZvbnQtd2VpZ2h0OiBib2xkOworCSAgZm9udC1zaXplOiA5cHQ7CisJICBtYXJnaW4tdG9wOiAuNWVtOworCSAgfQorCQorCSAgdGFibGUuaGVhZGVyIHsKKwkgIGJvcmRlci1zcGFjaW5nOiAxcHg7CisJICB3aWR0aDogOTUlOworCSAgZm9udC1zaXplOiAxMHB0OworCSAgY29sb3I6IHdoaXRlOworCSAgfQorCSAgdGQudG9wIHsKKwkgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisJICB9CisJICB0ZC50b3Bub3dyYXAgeworCSAgdmVydGljYWwtYWxpZ246IHRvcDsKKwkgIHdoaXRlLXNwYWNlOiBub3dyYXA7IAorCSAgfQorCSAgdGFibGUuaGVhZGVyIHRkIHsKKwkgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7CisJICB3aWR0aDogNTAlOworCSAgfQorCSAgdGFibGUuaGVhZGVyIGEgeworCSAgY29sb3I6IHdoaXRlOworCSAgfQorCSAgdGQucmVmZXJlbmNlIHsKKwkgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisJICB3aGl0ZS1zcGFjZTogbm93cmFwOworCSAgcGFkZGluZy1yaWdodDogMWVtOworCSAgfQorCSAgdGhlYWQgeworCSAgZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXA7CisJICB9CisJICB1bC50b2MsIHVsLnRvYyB1bCB7CisJICBsaXN0LXN0eWxlOiBub25lOworCSAgbWFyZ2luLWxlZnQ6IDEuNWVtOworCSAgbWFyZ2luLXJpZ2h0OiAwZW07CisJICBwYWRkaW5nLWxlZnQ6IDBlbTsKKwkgIH0KKwkgIHVsLnRvYyBsaSB7CisJICBsaW5lLWhlaWdodDogMTUwJTsKKwkgIGZvbnQtd2VpZ2h0OiBib2xkOworCSAgZm9udC1zaXplOiAxMHB0OworCSAgbWFyZ2luLWxlZnQ6IDBlbTsKKwkgIG1hcmdpbi1yaWdodDogMGVtOworCSAgfQorCSAgdWwudG9jIGxpIGxpIHsKKwkgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CisJICBmb250LXdlaWdodDogbm9ybWFsOworCSAgZm9udC1zaXplOiA5cHQ7CisJICBtYXJnaW4tbGVmdDogMGVtOworCSAgbWFyZ2luLXJpZ2h0OiAwZW07CisJICB9CisJICBsaS5leGNsdWRlZCB7CisJICBmb250LXNpemU6IDBwdDsKKwkgIH0KKwkgIHVsIHAgeworCSAgbWFyZ2luLWxlZnQ6IDBlbTsKKwkgIH0KKwkKKwkgIC5jb21tZW50IHsKKwkgIGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKKwkgIH0KKwkgIC5jZW50ZXIgeworCSAgdGV4dC1hbGlnbjogY2VudGVyOworCSAgfQorCSAgLmVycm9yIHsKKwkgIGNvbG9yOiByZWQ7CisJICBmb250LXN0eWxlOiBpdGFsaWM7CisJICBmb250LXdlaWdodDogYm9sZDsKKwkgIH0KKwkgIC5maWd1cmUgeworCSAgZm9udC13ZWlnaHQ6IGJvbGQ7CisJICB0ZXh0LWFsaWduOiBjZW50ZXI7CisJICBmb250LXNpemU6IDlwdDsKKwkgIH0KKwkgIC5maWxlbmFtZSB7CisJICBjb2xvcjogIzMzMzMzMzsKKwkgIGZvbnQtd2VpZ2h0OiBib2xkOworCSAgZm9udC1zaXplOiAxMnB0OworCSAgbGluZS1oZWlnaHQ6IDIxcHQ7CisJICB0ZXh0LWFsaWduOiBjZW50ZXI7CisJICB9CisJICAuZm4geworCSAgZm9udC13ZWlnaHQ6IGJvbGQ7CisJICB9CisJICAuaGlkZGVuIHsKKwkgIGRpc3BsYXk6IG5vbmU7CisJICB9CisJICAubGVmdCB7CisJICB0ZXh0LWFsaWduOiBsZWZ0OworCSAgfQorCSAgLnJpZ2h0IHsKKwkgIHRleHQtYWxpZ246IHJpZ2h0OworCSAgfQorCSAgLnRpdGxlIHsKKwkgIGNvbG9yOiAjOTkwMDAwOworCSAgZm9udC1zaXplOiAxOHB0OworCSAgbGluZS1oZWlnaHQ6IDE4cHQ7CisJICBmb250LXdlaWdodDogYm9sZDsKKwkgIHRleHQtYWxpZ246IGNlbnRlcjsKKwkgIG1hcmdpbi10b3A6IDM2cHQ7CisJICB9CisJICAudmNhcmRsaW5lIHsKKwkgIGRpc3BsYXk6IGJsb2NrOworCSAgfQorCSAgLndhcm5pbmcgeworCSAgZm9udC1zaXplOiAxNHB0OworCSAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OworCSAgfQorCQorCQorCSAgQG1lZGlhIHByaW50IHsKKwkgIC5ub3ByaW50IHsKKwkJZGlzcGxheTogbm9uZTsKKwkgIH0KKwkKKwkgIGEgeworCQljb2xvcjogYmxhY2s7CisJCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwkgIH0KKwkKKwkgIHRhYmxlLmhlYWRlciB7CisJCXdpZHRoOiA5MCU7CisJICB9CisJCisJICB0ZC5oZWFkZXIgeworCQl3aWR0aDogNTAlOworCQljb2xvcjogYmxhY2s7CisJCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOworCQl2ZXJ0aWNhbC1hbGlnbjogdG9wOworCQlmb250LXNpemU6IDEycHQ7CisJICB9CisJCisJICB1bC50b2MgYTo6YWZ0ZXIgeworCQljb250ZW50OiBsZWFkZXIoJy4nKSB0YXJnZXQtY291bnRlcihhdHRyKGhyZWYpLCBwYWdlKTsKKwkgIH0KKwkKKwkgIHVsLmluZCBsaSBsaSBhIHsKKwkJY29udGVudDogdGFyZ2V0LWNvdW50ZXIoYXR0cihocmVmKSwgcGFnZSk7CisJICB9CisJCisJICAucHJpbnQyY29sIHsKKwkJY29sdW1uLWNvdW50OiAyOworCQktbW96LWNvbHVtbi1jb3VudDogMjsKKwkJY29sdW1uLWZpbGw6IGF1dG87CisJICB9CisJICB9CisJCisJICBAcGFnZSB7CisJICBAdG9wLWxlZnQgeworCQkgICBjb250ZW50OiAiSW50ZXJuZXQtRHJhZnQiOyAKKwkgIH0gCisJICBAdG9wLXJpZ2h0IHsKKwkJICAgY29udGVudDogIkRlY2VtYmVyIDIwMTAiOyAKKwkgIH0gCisJICBAdG9wLWNlbnRlciB7CisJCSAgIGNvbnRlbnQ6ICJBYmJyZXZpYXRlZCBUaXRsZSI7CisJICB9IAorCSAgQGJvdHRvbS1sZWZ0IHsKKwkJICAgY29udGVudDogIkRvZSI7IAorCSAgfSAKKwkgIEBib3R0b20tY2VudGVyIHsKKwkJICAgY29udGVudDogIkV4cGlyZXMgSnVuZSAyMDExIjsgCisJICB9IAorCSAgQGJvdHRvbS1yaWdodCB7CisJCSAgIGNvbnRlbnQ6ICJbUGFnZSAiIGNvdW50ZXIocGFnZSkgIl0iOyAKKwkgIH0gCisJICB9CisJCisJICBAcGFnZTpmaXJzdCB7IAorCQlAdG9wLWxlZnQgeworCQkgIGNvbnRlbnQ6IG5vcm1hbDsKKwkJfQorCQlAdG9wLXJpZ2h0IHsKKwkJICBjb250ZW50OiBub3JtYWw7CisJCX0KKwkJQHRvcC1jZW50ZXIgeworCQkgIGNvbnRlbnQ6IG5vcm1hbDsKKwkJfQorCSAgfQorICAvKl1dPiovCisgIDwvc3R5bGU+CisKKyAgPGxpbmsgaHJlZj0iI3JmYy50b2MiIHJlbD0iQ29udGVudHMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxIEludHJvZHVjdGlvbiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjEuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMS4xIEFib3V0IHRoaXMgRHJhZnQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xLjEuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMS4xLjEgU2NvcGUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xLjEuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMS4xLjIgUmVudW1iZXJpbmciLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIyIEZyYW1lIEZvcm1hdCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMi4xIEhlYWRlciBGb3JtYXQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMi4xLjEgRkxHOiBGbGFnIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMi4xLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjIuMS4yIE5MSTogTmV0d29yayBMaW5rIElkZW50aWZpZXIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEuMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMi4xLjMgVElEOiBUcmFuc2FjdGlvbiBJZGVudGlmaWVyIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMi4xLjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjIuMS40IENvbW1hbmQgSWRlbnRpZmllciAoQ01EKSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMS41IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIyLjEuNSBDb21tYW5kIFBheWxvYWQgKE9wdGlvbmFsKSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjMgRGF0YSBQYWNraW5nIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMy4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIzLjEgUHJpbWl0aXZlIFR5cGVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMy4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIzLjIgUGFja2VkIFVuc2lnbmVkIEludGVnZXIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4zLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjMuMyBEYXRhIEJsb2JzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMy40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIzLjQgU3RydWN0dXJlZCBEYXRhIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMy41IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIzLjUgQXJyYXlzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNCBDb21tYW5kcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNC4xIENNRCAwOiAoSG9zdC0mZ3Q7TkNQKSBDTURfTk9PUCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNC4yIENNRCAxOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUkVTRVQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi40LjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjQuMyBDTUQgMjogKEhvc3QtJmd0O05DUCkgQ01EX1BST1BfVkFMVUVfR0VUIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjQgQ01EIDM6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX1NFVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjQuNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNC41IENNRCA0OiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9JTlNFUlQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi40LjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjQuNiBDTUQgNTogKEhvc3QtJmd0O05DUCkgQ01EX1BST1BfVkFMVUVfUkVNT1ZFIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC43IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjcgQ01EIDY6IChOQ1AtJmd0O0hvc3QpIENNRF9QUk9QX1ZBTFVFX0lTIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjggQ01EIDc6IChOQ1AtJmd0O0hvc3QpIENNRF9QUk9QX1ZBTFVFX0lOU0VSVEVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC45IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjkgQ01EIDg6IChOQ1AtJmd0O0hvc3QpIENNRF9QUk9QX1ZBTFVFX1JFTU9WRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi40LjEwIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjEwIENNRCAxODogKEhvc3QtJmd0O05DUCkgQ01EX1BFRUsiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi40LjExIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjExIENNRCAxOTogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BFRUtfUkVUIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNC4xMiBDTUQgMjA6IChIb3N0LSZndDtOQ1ApIENNRF9QT0tFIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNC4xMyBDTUQgMjE6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMTQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjQuMTQgQ01EIDIyOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi40LjE1IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjE1IENNRCAyMzogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVTX0FSRSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS4xIFByb3BlcnR5IE1ldGhvZHMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuMiBQcm9wZXJ0eSBUeXBlcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMi4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjIuMSBTaW5nbGUtVmFsdWUgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMi4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjIuMiBNdWx0aXBsZS1WYWx1ZSBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4yLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuMi4zIFN0cmVhbSBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjMgUHJvcGVydHkgTnVtYmVyaW5nIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjQgUHJvcGVydHkgU2VjdGlvbnMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNSBDb3JlIFByb3BlcnRpZXMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjEgUFJPUCAwOiBQUk9QX0xBU1RfU1RBVFVTIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNS4yIFBST1AgMTogUFJPUF9QUk9UT0NPTF9WRVJTSU9OIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNS4zIFBST1AgMjogUFJPUF9OQ1BfVkVSU0lPTiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjUuNCBQUk9QIDM6IFBST1BfSU5URVJGQUNFX1RZUEUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjUgUFJPUCA0OiBQUk9QX0lOVEVSRkFDRV9WRU5ET1JfSUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjYgUFJPUCA1OiBQUk9QX0NBUFMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjcgUFJPUCA2OiBQUk9QX0lOVEVSRkFDRV9DT1VOVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjUuOCBQUk9QIDc6IFBST1BfUE9XRVJfU1RBVEUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuOSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjkgUFJPUCA4OiBQUk9QX0hXQUREUiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xMCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjEwIFBST1AgOTogUFJPUF9MT0NLIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjExIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjUuMTEgUFJPUCAxMDogUFJPUF9IT1NUX1BPV0VSX1NUQVRFIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjEyIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjUuMTIgUFJPUCA0MTA0OiBQUk9QX1VOU09MX1VQREFURV9GSUxURVIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMTMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNS4xMyBQUk9QIDQxMDU6IFBST1BfVU5TT0xfVVBEQVRFX0xJU1QiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNiBTdHJlYW0gUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjYuMSBQUk9QIDExMjogUFJPUF9TVFJFQU1fREVCVUciLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjYuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS42LjIgUFJPUCAxMTM6IFBST1BfU1RSRUFNX1JBVyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjYuMyBQUk9QIDExNDogUFJPUF9TVFJFQU1fTkVUIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS42LjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNi40IFBST1AgMTE1OiBQUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjciIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNyBQSFkgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjcuMSBQUk9QIDMyOiBQUk9QX1BIWV9FTkFCTEVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNy4yIFBST1AgMzM6IFBST1BfUEhZX0NIQU4iLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS43LjMgUFJPUCAzNDogUFJPUF9QSFlfQ0hBTl9TVVBQT1JURUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS43LjQgUFJPUCAzNTogUFJPUF9QSFlfRlJFUSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy41IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjcuNSBQUk9QIDM2OiBQUk9QX1BIWV9DQ0FfVEhSRVNIT0xEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNy42IFBST1AgMzc6IFBST1BfUEhZX1RYX1BPV0VSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjciIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNy43IFBST1AgMzg6IFBST1BfUEhZX1JTU0kiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuOCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS43LjggUFJPUCAzOTogUFJPUF9QSFlfUlhfU0VOU0lUSVZJVFkiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjgiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOCBNQUMgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguMSBQUk9QIDQ4OiBQUk9QX01BQ19TQ0FOX1NUQVRFIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOC4yIFBST1AgNDk6IFBST1BfTUFDX1NDQU5fTUFTSyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguMyBQUk9QIDUwOiBQUk9QX01BQ19TQ0FOX1BFUklPRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguNCBQUk9QIDUxOiBQUk9QX01BQ19TQ0FOX0JFQUNPTiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC41IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguNSBQUk9QIDUyOiBQUk9QX01BQ18xNV80X0xBRERSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOC42IFBST1AgNTM6IFBST1BfTUFDXzE1XzRfU0FERFIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjcgUFJPUCA1NDogUFJPUF9NQUNfMTVfNF9QQU5JRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguOCBQUk9QIDU1OiBQUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguOSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjkgUFJPUCA1NjogUFJPUF9NQUNfUFJPTUlTQ1VPVVNfTU9ERSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xMCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjEwIFBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjExIFBST1AgNDg2NDogUFJPUF9NQUNfV0hJVEVMSVNUIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjEyIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguMTIgUFJPUCA0ODY1OiBQUk9QX01BQ19XSElURUxJU1RfRU5BQkxFRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjEzIFBST1AgNDg2NzogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjE0IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguMTQgUFJPUCA0ODY4OiBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjE1IFBST1AgNDg2OTogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOC4xNiBQUk9QIDQ4NzA6IFBST1BfTUFDX0JMQUNLTElTVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjE3IFBST1AgNDg3MTogUFJPUF9NQUNfQkxBQ0tMSVNUX0VOQUJMRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOSBORVQgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuMSBQUk9QIDY0OiBQUk9QX05FVF9TQVZFRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuMiBQUk9QIDY1OiBQUk9QX05FVF9JRl9VUCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuMyBQUk9QIDY2OiBQUk9QX05FVF9TVEFDS19VUCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuNCBQUk9QIDY3OiBQUk9QX05FVF9ST0xFIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOS41IFBST1AgNjg6IFBST1BfTkVUX05FVFdPUktfTkFNRSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS42IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuNiBQUk9QIDY5OiBQUk9QX05FVF9YUEFOSUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS45LjcgUFJPUCA3MDogUFJPUF9ORVRfTUFTVEVSX0tFWSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuOCBQUk9QIDcxOiBQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS45IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuOSBQUk9QIDcyOiBQUk9QX05FVF9QQVJUSVRJT05fSUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuMTAiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOS4xMCBQUk9QIDczOiBQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkciLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuMTEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOS4xMSBQUk9QIDc0OiBQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS45LjEyIFBST1AgNzU6IFBST1BfTkVUX1BTS0MiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjEwIElQdjYgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTAuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS4xMC4xIFBST1AgOTY6IFBST1BfSVBWNl9MTF9BRERSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjEwLjIgUFJPUCA5NzogUFJPUF9JUFY2X01MX0FERFIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuMTAuMyBQUk9QIDk4OiBQUk9QX0lQVjZfTUxfUFJFRklYIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjEwLjQgUFJPUCA5OTogUFJPUF9JUFY2X0FERFJFU1NfVEFCTEUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuMTAuNSBQUk9QIDEwMTogUFJPUF9JUHY2X0lDTVBfUElOR19PRkZMT0FEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS4xMSBEZWJ1ZyBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjExLjEgUFJPUCAxNjM4NDogUFJPUF9ERUJVR19URVNUX0FTU0VSVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTEuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS4xMS4yIFBST1AgMTYzODU6IFBST1BfREVCVUdfTkNQX0xPR19MRVZFTCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjYgU3RhdHVzIENvZGVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNyBUZWNobm9sb2d5OiBUaHJlYWQoUikiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMSBDYXBhYmlsaXRpZXMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMiBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4xIFBST1AgODA6IFBST1BfVEhSRUFEX0xFQURFUl9BRERSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4yIFBST1AgODE6IFBST1BfVEhSRUFEX1BBUkVOVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMyBQUk9QIDgyOiBQUk9QX1RIUkVBRF9DSElMRF9UQUJMRSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuNCBQUk9QIDgzOiBQUk9QX1RIUkVBRF9MRUFERVJfUklEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi41IFBST1AgODQ6IFBST1BfVEhSRUFEX0xFQURFUl9XRUlHSFQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjYgUFJPUCA4NTogUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi43IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuNyBQUk9QIDg2OiBQUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEEiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuOCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjggUFJPUCA4NzogUFJPUF9USFJFQURfTkVUV09SS19EQVRBX1ZFUlNJT04iLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuOSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjkgUFJPUCA4ODogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjEwIFBST1AgODk6IFBST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjExIFBST1AgOTA6IFBST1BfVEhSRUFEX09OX01FU0hfTkVUUyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjEyIFBST1AgOTE6IFBST1BfVEhSRUFEX09GRl9NRVNIX1JPVVRFUyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjEzIFBST1AgOTI6IFBST1BfVEhSRUFEX0FTU0lTVElOR19QT1JUUyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xNCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjE0IFBST1AgOTM6IFBST1BfVEhSRUFEX0FMTE9XX0xPQ0FMX05FVF9EQVRBX0NIQU5HRSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjE1IFBST1AgOTQ6IFBST1BfVEhSRUFEX01PREUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4xNiBQUk9QIDUzNzY6IFBST1BfVEhSRUFEX0NISUxEX1RJTUVPVVQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTciIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4xNyBQUk9QIDUzNzc6IFBST1BfVEhSRUFEX1JMT0MxNiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xOCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjE4IFBST1AgNTM3ODogUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjE5IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMTkgUFJPUCA1Mzc5OiBQUk9QX1RIUkVBRF9DT05URVhUX1JFVVNFX0RFTEFZIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIwIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMjAgUFJPUCA1MzgwOiBQUk9QX1RIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4yMSBQUk9QIDUzODE6IFBST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIyIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMjIgUFJPUCA1MzgyOiBQUk9QX1RIUkVBRF9STE9DMTZfREVCVUdfUEFTU1RIUlUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4yMyBQUk9QIDUzODM6IFBST1BfVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4yNCBQUk9QIDUzODQ6IFBST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjI1IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMjUgUFJPUCA1Mzg1OiBQUk9QX1RIUkVBRF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yNiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjI2IFBST1AgNTM4NjogUFJPUF9USFJFQURfUFJFRkVSUkVEX1JPVVRFUl9JRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjI3IFBST1AgNTM4NzogUFJPUF9USFJFQURfTkVJR0hCT1JfVEFCTEUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjgiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4yOCBQUk9QIDUzODg6IFBST1BfVEhSRUFEX0NISUxEX0NPVU5UX01BWCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yOSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjI5IFBST1AgNTM4OTogUFJPUF9USFJFQURfTEVBREVSX05FVFdPUktfREFUQSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zMCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjMwIFBST1AgNTM5MDogUFJPUF9USFJFQURfU1RBQkxFX0xFQURFUl9ORVRXT1JLX0RBVEEiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4zMSBQUk9QIDUzOTE6IFBST1BfVEhSRUFEX0pPSU5FUlMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4zMiBQUk9QIDUzOTI6IFBST1BfVEhSRUFEX0NPTU1JU1NJT05FUl9FTkFCTEVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjMzIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMzMgUFJPUCA1MzkzOiBQUk9QX1RIUkVBRF9UTUZfUFJPWFlfRU5BQkxFRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zNCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjM0IFBST1AgNTM5NDogUFJPUF9USFJFQURfVE1GX1BST1hZX1NUUkVBTSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjM1IFBST1AgNTM5NTogUFJPUF9USFJFQURfRElTT1ZFUllfU0NBTl9KT0lORVJfRkxBRyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zNiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjM2IFBST1AgNTM5NjogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fRU5BQkxFX0ZJTFRFUklORyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjM3IFBST1AgNTM5NzogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzgiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4zOCBQUk9QIDUzOTg6IFBST1BfVEhSRUFEX1NURUVSSU5HX0RBVEEiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI4IEZlYXR1cmU6IE5ldHdvcmsgU2F2ZSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjguMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iOC4xIENvbW1hbmRzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uOC4xLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjguMS4xIENNRCA5OiAoSG9zdC0mZ3Q7TkNQKSBDTURfTkVUX1NBVkUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iOC4xLjIgQ01EIDEwOiAoSG9zdC0mZ3Q7TkNQKSBDTURfTkVUX0NMRUFSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uOC4xLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjguMS4zIENNRCAxMTogKEhvc3QtJmd0O05DUCkgQ01EX05FVF9SRUNBTEwiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi45IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI5IEZlYXR1cmU6IEhvc3QgQnVmZmVyIE9mZmxvYWQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjkuMSBDb21tYW5kcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI5LjEuMSBDTUQgMTI6IChOQ1AtJmd0O0hvc3QpIENNRF9IQk9fT0ZGTE9BRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI5LjEuMiBDTUQgMTM6IChOQ1AtJmd0O0hvc3QpIENNRF9IQk9fUkVDTEFJTSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI5LjEuMyBDTUQgMTQ6IChOQ1AtJmd0O0hvc3QpIENNRF9IQk9fRFJPUCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI5LjEuNCBDTUQgMTU6IChIb3N0LSZndDtOQ1ApIENNRF9IQk9fT0ZGTE9BREVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uOS4xLjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjkuMS41IENNRCAxNjogKEhvc3QtJmd0O05DUCkgQ01EX0hCT19SRUNMQUlNRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEuNiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iOS4xLjYgQ01EIDE3OiAoSG9zdC0mZ3Q7TkNQKSBDTURfSEJPX0RST1BQRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjkuMiBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uOS4yLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjkuMi4xIFBST1AgMTA6IFBST1BfSEJPX01FTV9NQVgiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iOS4yLjIgUFJPUCAxMTogUFJPUF9IQk9fQkxPQ0tfTUFYIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTAiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEwIEZlYXR1cmU6IEphbSBEZXRlY3Rpb24iLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMC4xIFByb3BlcnRpZXMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEwLjEuMSBQUk9QIDQ2MDg6IFBST1BfSkFNX0RFVEVDVF9FTkFCTEUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEwLjEuMiBQUk9QIDQ2MDk6IFBST1BfSkFNX0RFVEVDVEVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMC4xLjMgUFJPUCA0NjEwOiBQUk9QX0pBTV9ERVRFQ1RfUlNTSV9USFJFU0hPTEQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEwLjEuNCBQUk9QIDQ2MTE6IFBST1BfSkFNX0RFVEVDVF9XSU5ET1ciLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEwLjEuNSBQUk9QIDQ2MTI6IFBST1BfSkFNX0RFVEVDVF9CVVNZIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS42IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMC4xLjYgUFJPUCA0NjEzOiBQUk9QX0pBTV9ERVRFQ1RfSElTVE9SWV9CSVRNQVAiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMTEgRmVhdHVyZTogR1BJTyBBY2Nlc3MiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMS4xIFByb3BlcnRpZXMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjExLjEuMSBQUk9QIDQwOTY6IFBST1BfR1BJT19DT05GSUciLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjExLjEuMiBQUk9QIDQwOTg6IFBST1BfR1BJT19TVEFURSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjExLjEuMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMTEuMS4zIFBST1AgNDA5OTogUFJPUF9HUElPX1NUQVRFX1NFVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjExLjEuNCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMTEuMS40IFBST1AgNDEwMDogUFJPUF9HUElPX1NUQVRFX0NMRUFSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEyIEZlYXR1cmU6IFRydWUgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTIuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMTIuMSBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTIuMS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMi4xLjEgUFJPUCA0MTAxOiBQUk9QX1RSTkdfMzIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMi4xLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEyLjEuMiBQUk9QIDQxMDI6IFBST1BfVFJOR18xMjgiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMi4xLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEyLjEuMyBQUk9QIDQxMDM6IFBST1BfVFJOR19SQVdfMzIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMTMgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMy4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMy4xIFJhdyBBcHBsaWNhdGlvbiBBY2Nlc3MiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQSBGcmFtaW5nIFByb3RvY29sIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQS4xIFVBUlQgUmVjb21tZW5kYXRpb25zIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJBLjEuMSBVQVJUIEJpdCBSYXRlIERldGVjdGlvbiIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5BLjEuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQS4xLjIgSERMQy1MaXRlIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQS4yIFNQSSBSZWNvbW1lbmRhdGlvbnMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4yLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkEuMi4xIFNQSSBGcmFtaW5nIFByb3RvY29sIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQS4zIEkmI3hCMjtDIFJlY29tbWVuZGF0aW9ucyIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5BLjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkEuNCBOYXRpdmUgVVNCIFJlY29tbWVuZGF0aW9ucyIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCIFRlc3QgVmVjdG9ycyIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkIuMSBUZXN0IFZlY3RvcjogUGFja2VkIFVuc2lnbmVkIEludGVnZXIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjIgVGVzdCBWZWN0b3I6IFJlc2V0IENvbW1hbmQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjMgVGVzdCBWZWN0b3I6IFJlc2V0IE5vdGlmaWNhdGlvbiIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkIuNCBUZXN0IFZlY3RvcjogU2NhbiBCZWFjb24iLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQi41IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjUgVGVzdCBWZWN0b3I6IEluYm91bmQgSVB2NiBQYWNrZXQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQi42IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjYgVGVzdCBWZWN0b3I6IE91dGJvdW5kIElQdjYgUGFja2V0Ii8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkIuNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQi43IFRlc3QgVmVjdG9yOiBGZXRjaCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3MiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQi44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjggVGVzdCBWZWN0b3I6IFJldHVybmVkIGxpc3Qgb2Ygb24tbWVzaCBuZXR3b3JrcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjkiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkIuOSBUZXN0IFZlY3RvcjogQWRkaW5nIGFuIG9uLW1lc2ggbmV0d29yayIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjEwIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjEwIFRlc3QgVmVjdG9yOiBJbnNlcnRpb24gbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yayIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjExIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjExIFRlc3QgVmVjdG9yOiBSZW1vdmluZyBhIGxvY2FsIG9uLW1lc2ggbmV0d29yayIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjEyIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjEyIFRlc3QgVmVjdG9yOiBSZW1vdmFsIG5vdGlmaWNhdGlvbiBvZiBhbiBvbi1tZXNoIG5ldHdvcmsiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQyBFeGFtcGxlIFNlc3Npb25zIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQy4xIE5DUCBJbml0aWFsaXphdGlvbiIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkMuMiBBdHRhY2hpbmcgdG8gYSBuZXR3b3JrIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQy4zIFN1Y2Nlc3NmdWxseSBqb2luaW5nIGEgcHJlLWV4aXN0aW5nIG5ldHdvcmsiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQy40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJDLjQgVW5zdWNjZXNzZnVsbHkgam9pbmluZyBhIHByZS1leGlzdGluZyBuZXR3b3JrIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkMuNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQy41IERldGFjaGluZyBmcm9tIGEgbmV0d29yayIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkMuNiBBdHRhY2hpbmcgdG8gYSBzYXZlZCBuZXR3b3JrIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkMuNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQy43IE5DUCBTb2Z0d2FyZSBSZXNldCIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjgiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkMuOCBBZGRpbmcgYW4gb24tbWVzaCBwcmVmaXgiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQy45IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJDLjkgRW50ZXJpbmcgbG93LXBvd2VyIG1vZGVzIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMTAiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkMuMTAgU25pZmZpbmcgcmF3IHBhY2tldHMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguRCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iRCBHbG9zc2FyeSIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5FIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJFIEFja25vd2xlZGdtZW50cyIvPgorPGxpbmsgaHJlZj0iI3JmYy5hdXRob3JzIiByZWw9IkNoYXB0ZXIiLz4KKworCisgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ieG1sMnJmYyB2ZXJzaW9uIDIuNS4yIC0gaHR0cDovL3Rvb2xzLmlldGYub3JnL3Rvb2xzL3htbDJyZmMiIC8+CisgIDxsaW5rIHJlbD0ic2NoZW1hLmRjdCIgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIgLz4KKworICA8bWV0YSBuYW1lPSJkY3QuY3JlYXRvciIgY29udGVudD0iUXVhdHRsZWJhdW0sIFIuIGFuZCBKLiBXb29keWF0dCwgRWQuIiAvPgorICA8bWV0YSBuYW1lPSJkY3QuaWRlbnRpZmllciIgY29udGVudD0idXJuOmlldGY6aWQ6ZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQtYWI1NjI4YTUiIC8+CisgIDxtZXRhIG5hbWU9ImRjdC5pc3N1ZWQiIHNjaGVtZT0iSVNPODYwMSIgY29udGVudD0iMjAxNy02LTIyIiAvPgorICA8bWV0YSBuYW1lPSJkY3QuYWJzdHJhY3QiIGNvbnRlbnQ9IlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBTcGluZWwgcHJvdG9jb2wsIHdoaWNoIGZhY2lsaXRhdGVzIHRoZSBjb250cm9sIGFuZCBtYW5hZ2VtZW50IG9mIElQdjYgbmV0d29yayBpbnRlcmZhY2VzIG9uIGRldmljZXMgd2hlcmUgZ2VuZXJhbCBwdXJwb3NlIGFwcGxpY2F0aW9uIHByb2Nlc3NvcnMgb2ZmbG9hZCBuZXR3b3JrIGZ1bmN0aW9ucyBhdCB0aGVpciBpbnRlcmZhY2VzIHRvIG5ldHdvcmsgY28tcHJvY2Vzc29ycyAoTkNQKSBjb25uZWN0ZWQgYnkgc2ltcGxlIGNvbW11bmljYXRpb24gbGlua3MgbGlrZSBzZXJpYWwgZGF0YSBjaGFubmVscy4gV2hpbGUgaW5pdGlhbGx5IGRldmVsb3BlZCB0byBzdXBwb3J0IFRocmVhZChSKSwgU3BpbmVsJ3MgbGF5ZXJlZCBkZXNpZ24gYWxsb3dzIGl0IHRvIGJlIGVhc2lseSBhZGFwdGVkIHRvIG90aGVyIHNpbWlsYXIgbmV0d29yayB0ZWNobm9sb2dpZXMuICAiIC8+CisgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgU3BpbmVsIHByb3RvY29sLCB3aGljaCBmYWNpbGl0YXRlcyB0aGUgY29udHJvbCBhbmQgbWFuYWdlbWVudCBvZiBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlcyBvbiBkZXZpY2VzIHdoZXJlIGdlbmVyYWwgcHVycG9zZSBhcHBsaWNhdGlvbiBwcm9jZXNzb3JzIG9mZmxvYWQgbmV0d29yayBmdW5jdGlvbnMgYXQgdGhlaXIgaW50ZXJmYWNlcyB0byBuZXR3b3JrIGNvLXByb2Nlc3NvcnMgKE5DUCkgY29ubmVjdGVkIGJ5IHNpbXBsZSBjb21tdW5pY2F0aW9uIGxpbmtzIGxpa2Ugc2VyaWFsIGRhdGEgY2hhbm5lbHMuIFdoaWxlIGluaXRpYWxseSBkZXZlbG9wZWQgdG8gc3VwcG9ydCBUaHJlYWQoUiksIFNwaW5lbCdzIGxheWVyZWQgZGVzaWduIGFsbG93cyBpdCB0byBiZSBlYXNpbHkgYWRhcHRlZCB0byBvdGhlciBzaW1pbGFyIG5ldHdvcmsgdGVjaG5vbG9naWVzLiAgIiAvPgorCis8L2hlYWQ+CisKKzxib2R5PgorCisgIDx0YWJsZSBjbGFzcz0iaGVhZGVyIj4KKyAgICA8dGJvZHk+CisgICAgCisgICAgCTx0cj4KKyAgPHRkIGNsYXNzPSJsZWZ0Ij5OZXR3b3JrIFdvcmtpbmcgR3JvdXA8L3RkPgorICA8dGQgY2xhc3M9InJpZ2h0Ij5SLiBRdWF0dGxlYmF1bTwvdGQ+Cis8L3RyPgorPHRyPgorICA8dGQgY2xhc3M9ImxlZnQiPkludGVybmV0LURyYWZ0PC90ZD4KKyAgPHRkIGNsYXNzPSJyaWdodCI+Si4gV29vZHlhdHQsIEVkLjwvdGQ+Cis8L3RyPgorPHRyPgorICA8dGQgY2xhc3M9ImxlZnQiPkludGVuZGVkIHN0YXR1czogSW5mb3JtYXRpb25hbDwvdGQ+CisgIDx0ZCBjbGFzcz0icmlnaHQiPk5lc3QgTGFicywgSW5jLjwvdGQ+Cis8L3RyPgorPHRyPgorICA8dGQgY2xhc3M9ImxlZnQiPkV4cGlyZXM6IERlY2VtYmVyIDI0LCAyMDE3PC90ZD4KKyAgPHRkIGNsYXNzPSJyaWdodCI+SnVuZSAyMiwgMjAxNzwvdGQ+Cis8L3RyPgorCisgICAgCQorICAgIDwvdGJvZHk+CisgIDwvdGFibGU+CisKKyAgPHAgY2xhc3M9InRpdGxlIj5TcGluZWwgSG9zdC1Db250cm9sbGVyIFByb3RvY29sPGJyIC8+CisgIDxzcGFuIGNsYXNzPSJmaWxlbmFtZSI+ZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQtYWI1NjI4YTU8L3NwYW4+PC9wPgorICAKKyAgPGgxIGlkPSJyZmMuYWJzdHJhY3QiPgorICA8YSBocmVmPSIjcmZjLmFic3RyYWN0Ij5BYnN0cmFjdDwvYT4KKzwvaDE+Cis8cD5UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgU3BpbmVsIHByb3RvY29sLCB3aGljaCBmYWNpbGl0YXRlcyB0aGUgY29udHJvbCBhbmQgbWFuYWdlbWVudCBvZiBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlcyBvbiBkZXZpY2VzIHdoZXJlIGdlbmVyYWwgcHVycG9zZSBhcHBsaWNhdGlvbiBwcm9jZXNzb3JzIG9mZmxvYWQgbmV0d29yayBmdW5jdGlvbnMgYXQgdGhlaXIgaW50ZXJmYWNlcyB0byBuZXR3b3JrIGNvLXByb2Nlc3NvcnMgKE5DUCkgY29ubmVjdGVkIGJ5IHNpbXBsZSBjb21tdW5pY2F0aW9uIGxpbmtzIGxpa2Ugc2VyaWFsIGRhdGEgY2hhbm5lbHMuIFdoaWxlIGluaXRpYWxseSBkZXZlbG9wZWQgdG8gc3VwcG9ydCBUaHJlYWQoUiksIFNwaW5lbCdzIGxheWVyZWQgZGVzaWduIGFsbG93cyBpdCB0byBiZSBlYXNpbHkgYWRhcHRlZCB0byBvdGhlciBzaW1pbGFyIG5ldHdvcmsgdGVjaG5vbG9naWVzLiAgPC9wPgorPHA+VGhpcyBkb2N1bWVudCBhbHNvIGRlc2NyaWJlcyB2YXJpb3VzIFNwaW5lbCBzcGVjaWFsaXphdGlvbnMsIGluY2x1ZGluZyBzdXBwb3J0IGZvciB0aGUgVGhyZWFkKFIpIGxvdy1wb3dlciBtZXNoIG5ldHdvcmsgdGVjaG5vbG9neS4gIDwvcD4KKzxoMSBpZD0icmZjLnN0YXR1cyI+CisgIDxhIGhyZWY9IiNyZmMuc3RhdHVzIj5TdGF0dXMgb2YgVGhpcyBNZW1vPC9hPgorPC9oMT4KKzxwPlRoaXMgSW50ZXJuZXQtRHJhZnQgaXMgc3VibWl0dGVkIGluIGZ1bGwgY29uZm9ybWFuY2Ugd2l0aCB0aGUgcHJvdmlzaW9ucyBvZiBCQ1AgNzggYW5kIEJDUCA3OS48L3A+Cis8cD5JbnRlcm5ldC1EcmFmdHMgYXJlIHdvcmtpbmcgZG9jdW1lbnRzIG9mIHRoZSBJbnRlcm5ldCBFbmdpbmVlcmluZyBUYXNrIEZvcmNlIChJRVRGKS4gIE5vdGUgdGhhdCBvdGhlciBncm91cHMgbWF5IGFsc28gZGlzdHJpYnV0ZSB3b3JraW5nIGRvY3VtZW50cyBhcyBJbnRlcm5ldC1EcmFmdHMuICBUaGUgbGlzdCBvZiBjdXJyZW50IEludGVybmV0LURyYWZ0cyBpcyBhdCBodHRwOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZHJhZnRzL2N1cnJlbnQvLjwvcD4KKzxwPkludGVybmV0LURyYWZ0cyBhcmUgZHJhZnQgZG9jdW1lbnRzIHZhbGlkIGZvciBhIG1heGltdW0gb2Ygc2l4IG1vbnRocyBhbmQgbWF5IGJlIHVwZGF0ZWQsIHJlcGxhY2VkLCBvciBvYnNvbGV0ZWQgYnkgb3RoZXIgZG9jdW1lbnRzIGF0IGFueSB0aW1lLiAgSXQgaXMgaW5hcHByb3ByaWF0ZSB0byB1c2UgSW50ZXJuZXQtRHJhZnRzIGFzIHJlZmVyZW5jZSBtYXRlcmlhbCBvciB0byBjaXRlIHRoZW0gb3RoZXIgdGhhbiBhcyAid29yayBpbiBwcm9ncmVzcy4iPC9wPgorPHA+VGhpcyBJbnRlcm5ldC1EcmFmdCB3aWxsIGV4cGlyZSBvbiBEZWNlbWJlciAyNCwgMjAxNy48L3A+Cis8aDEgaWQ9InJmYy5jb3B5cmlnaHRub3RpY2UiPgorICA8YSBocmVmPSIjcmZjLmNvcHlyaWdodG5vdGljZSI+Q29weXJpZ2h0IE5vdGljZTwvYT4KKzwvaDE+Cis8cD5Db3B5cmlnaHQgKGMpIDIwMTcgSUVURiBUcnVzdCBhbmQgdGhlIHBlcnNvbnMgaWRlbnRpZmllZCBhcyB0aGUgZG9jdW1lbnQgYXV0aG9ycy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9wPgorPHA+VGhpcyBkb2N1bWVudCBpcyBzdWJqZWN0IHRvIEJDUCA3OCBhbmQgdGhlIElFVEYgVHJ1c3QncyBMZWdhbCBQcm92aXNpb25zIFJlbGF0aW5nIHRvIElFVEYgRG9jdW1lbnRzIChodHRwOi8vdHJ1c3RlZS5pZXRmLm9yZy9saWNlbnNlLWluZm8pIGluIGVmZmVjdCBvbiB0aGUgZGF0ZSBvZiBwdWJsaWNhdGlvbiBvZiB0aGlzIGRvY3VtZW50LiAgUGxlYXNlIHJldmlldyB0aGVzZSBkb2N1bWVudHMgY2FyZWZ1bGx5LCBhcyB0aGV5IGRlc2NyaWJlIHlvdXIgcmlnaHRzIGFuZCByZXN0cmljdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoaXMgZG9jdW1lbnQuICBDb2RlIENvbXBvbmVudHMgZXh0cmFjdGVkIGZyb20gdGhpcyBkb2N1bWVudCBtdXN0IGluY2x1ZGUgU2ltcGxpZmllZCBCU0QgTGljZW5zZSB0ZXh0IGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQuZSBvZiB0aGUgVHJ1c3QgTGVnYWwgUHJvdmlzaW9ucyBhbmQgYXJlIHByb3ZpZGVkIHdpdGhvdXQgd2FycmFudHkgYXMgZGVzY3JpYmVkIGluIHRoZSBTaW1wbGlmaWVkIEJTRCBMaWNlbnNlLjwvcD4KKzxwPlRoaXMgZG9jdW1lbnQgbWF5IG5vdCBiZSBtb2RpZmllZCwgYW5kIGRlcml2YXRpdmUgd29ya3Mgb2YgaXQgbWF5IG5vdCBiZSBjcmVhdGVkLCBhbmQgaXQgbWF5IG5vdCBiZSBwdWJsaXNoZWQgZXhjZXB0IGFzIGFuIEludGVybmV0LURyYWZ0LjwvcD4KKworICAKKyAgPGhyIGNsYXNzPSJub3ByaW50IiAvPgorICA8aDEgY2xhc3M9Im5wIiBpZD0icmZjLnRvYyI+PGEgaHJlZj0iI3JmYy50b2MiPlRhYmxlIG9mIENvbnRlbnRzPC9hPjwvaDE+CisgIDx1bCBjbGFzcz0idG9jIj4KKworICAJPGxpPjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEiPkludHJvZHVjdGlvbjwvYT48L2xpPgorPHVsPjxsaT4xLjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEuMSI+QWJvdXQgdGhpcyBEcmFmdDwvYT48L2xpPgorPHVsPjxsaT4xLjEuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMS4xLjEiPlNjb3BlPC9hPjwvbGk+Cis8bGk+MS4xLjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEuMS4yIj5SZW51bWJlcmluZzwvYT48L2xpPgorPC91bD48L3VsPjxsaT4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yIj5GcmFtZSBGb3JtYXQ8L2E+PC9saT4KKzx1bD48bGk+Mi4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEiPkhlYWRlciBGb3JtYXQ8L2E+PC9saT4KKzx1bD48bGk+Mi4xLjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMS4xIj5GTEc6IEZsYWc8L2E+PC9saT4KKzxsaT4yLjEuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMi4xLjIiPk5MSTogTmV0d29yayBMaW5rIElkZW50aWZpZXI8L2E+PC9saT4KKzxsaT4yLjEuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMi4xLjMiPlRJRDogVHJhbnNhY3Rpb24gSWRlbnRpZmllcjwvYT48L2xpPgorPGxpPjIuMS40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEuNCI+Q29tbWFuZCBJZGVudGlmaWVyIChDTUQpPC9hPjwvbGk+Cis8bGk+Mi4xLjUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMS41Ij5Db21tYW5kIFBheWxvYWQgKE9wdGlvbmFsKTwvYT48L2xpPgorPC91bD48L3VsPjxsaT4zLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4zIj5EYXRhIFBhY2tpbmc8L2E+PC9saT4KKzx1bD48bGk+My4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4zLjEiPlByaW1pdGl2ZSBUeXBlczwvYT48L2xpPgorPGxpPjMuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMy4yIj5QYWNrZWQgVW5zaWduZWQgSW50ZWdlcjwvYT48L2xpPgorPGxpPjMuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMy4zIj5EYXRhIEJsb2JzPC9hPjwvbGk+Cis8bGk+My40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4zLjQiPlN0cnVjdHVyZWQgRGF0YTwvYT48L2xpPgorPGxpPjMuNS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMy41Ij5BcnJheXM8L2E+PC9saT4KKzwvdWw+PGxpPjQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQiPkNvbW1hbmRzPC9hPjwvbGk+Cis8dWw+PGxpPjQuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xIj5DTUQgMDogKEhvc3QtJmd0O05DUCkgQ01EX05PT1A8L2E+PC9saT4KKzxsaT40LjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMiI+Q01EIDE6IChIb3N0LSZndDtOQ1ApIENNRF9SRVNFVDwvYT48L2xpPgorPGxpPjQuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4zIj5DTUQgMjogKEhvc3QtJmd0O05DUCkgQ01EX1BST1BfVkFMVUVfR0VUPC9hPjwvbGk+Cis8bGk+NC40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjQiPkNNRCAzOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9TRVQ8L2E+PC9saT4KKzxsaT40LjUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuNSI+Q01EIDQ6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX0lOU0VSVDwvYT48L2xpPgorPGxpPjQuNi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC42Ij5DTUQgNTogKEhvc3QtJmd0O05DUCkgQ01EX1BST1BfVkFMVUVfUkVNT1ZFPC9hPjwvbGk+Cis8bGk+NC43LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjciPkNNRCA2OiAoTkNQLSZndDtIb3N0KSBDTURfUFJPUF9WQUxVRV9JUzwvYT48L2xpPgorPGxpPjQuOC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC44Ij5DTUQgNzogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVfSU5TRVJURUQ8L2E+PC9saT4KKzxsaT40LjkuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuOSI+Q01EIDg6IChOQ1AtJmd0O0hvc3QpIENNRF9QUk9QX1ZBTFVFX1JFTU9WRUQ8L2E+PC9saT4KKzxsaT40LjEwLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjEwIj5DTUQgMTg6IChIb3N0LSZndDtOQ1ApIENNRF9QRUVLPC9hPjwvbGk+Cis8bGk+NC4xMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMSI+Q01EIDE5OiAoTkNQLSZndDtIb3N0KSBDTURfUEVFS19SRVQ8L2E+PC9saT4KKzxsaT40LjEyLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjEyIj5DTUQgMjA6IChIb3N0LSZndDtOQ1ApIENNRF9QT0tFPC9hPjwvbGk+Cis8bGk+NC4xMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMyI+Q01EIDIxOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9NVUxUSV9HRVQ8L2E+PC9saT4KKzxsaT40LjE0LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjE0Ij5DTUQgMjI6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVDwvYT48L2xpPgorPGxpPjQuMTUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMTUiPkNNRCAyMzogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVTX0FSRTwvYT48L2xpPgorPC91bD48bGk+NS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNSI+UHJvcGVydGllczwvYT48L2xpPgorPHVsPjxsaT41LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMSI+UHJvcGVydHkgTWV0aG9kczwvYT48L2xpPgorPGxpPjUuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4yIj5Qcm9wZXJ0eSBUeXBlczwvYT48L2xpPgorPHVsPjxsaT41LjIuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4yLjEiPlNpbmdsZS1WYWx1ZSBQcm9wZXJ0aWVzPC9hPjwvbGk+Cis8bGk+NS4yLjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMi4yIj5NdWx0aXBsZS1WYWx1ZSBQcm9wZXJ0aWVzPC9hPjwvbGk+Cis8bGk+NS4yLjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMi4zIj5TdHJlYW0gUHJvcGVydGllczwvYT48L2xpPgorPC91bD48bGk+NS4zLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjMiPlByb3BlcnR5IE51bWJlcmluZzwvYT48L2xpPgorPGxpPjUuNC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS40Ij5Qcm9wZXJ0eSBTZWN0aW9uczwvYT48L2xpPgorPGxpPjUuNS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41Ij5Db3JlIFByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+NS41LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xIj5QUk9QIDA6IFBST1BfTEFTVF9TVEFUVVM8L2E+PC9saT4KKzxsaT41LjUuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjIiPlBST1AgMTogUFJPUF9QUk9UT0NPTF9WRVJTSU9OPC9hPjwvbGk+Cis8bGk+NS41LjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4zIj5QUk9QIDI6IFBST1BfTkNQX1ZFUlNJT048L2E+PC9saT4KKzxsaT41LjUuNC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjQiPlBST1AgMzogUFJPUF9JTlRFUkZBQ0VfVFlQRTwvYT48L2xpPgorPGxpPjUuNS41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNSI+UFJPUCA0OiBQUk9QX0lOVEVSRkFDRV9WRU5ET1JfSUQ8L2E+PC9saT4KKzxsaT41LjUuNi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjYiPlBST1AgNTogUFJPUF9DQVBTPC9hPjwvbGk+Cis8bGk+NS41LjcuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS43Ij5QUk9QIDY6IFBST1BfSU5URVJGQUNFX0NPVU5UPC9hPjwvbGk+Cis8bGk+NS41LjguICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS44Ij5QUk9QIDc6IFBST1BfUE9XRVJfU1RBVEU8L2E+PC9saT4KKzxsaT41LjUuOS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjkiPlBST1AgODogUFJPUF9IV0FERFI8L2E+PC9saT4KKzxsaT41LjUuMTAuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xMCI+UFJPUCA5OiBQUk9QX0xPQ0s8L2E+PC9saT4KKzxsaT41LjUuMTEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xMSI+UFJPUCAxMDogUFJPUF9IT1NUX1BPV0VSX1NUQVRFPC9hPjwvbGk+Cis8bGk+NS41LjEyLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMTIiPlBST1AgNDEwNDogUFJPUF9VTlNPTF9VUERBVEVfRklMVEVSPC9hPjwvbGk+Cis8bGk+NS41LjEzLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMTMiPlBST1AgNDEwNTogUFJPUF9VTlNPTF9VUERBVEVfTElTVDwvYT48L2xpPgorPC91bD48bGk+NS42LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjYiPlN0cmVhbSBQcm9wZXJ0aWVzPC9hPjwvbGk+Cis8dWw+PGxpPjUuNi4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjYuMSI+UFJPUCAxMTI6IFBST1BfU1RSRUFNX0RFQlVHPC9hPjwvbGk+Cis8bGk+NS42LjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi4yIj5QUk9QIDExMzogUFJPUF9TVFJFQU1fUkFXPC9hPjwvbGk+Cis8bGk+NS42LjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi4zIj5QUk9QIDExNDogUFJPUF9TVFJFQU1fTkVUPC9hPjwvbGk+Cis8bGk+NS42LjQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi40Ij5QUk9QIDExNTogUFJPUF9TVFJFQU1fTkVUX0lOU0VDVVJFPC9hPjwvbGk+Cis8L3VsPjxsaT41LjcuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNyI+UEhZIFByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+NS43LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4xIj5QUk9QIDMyOiBQUk9QX1BIWV9FTkFCTEVEPC9hPjwvbGk+Cis8bGk+NS43LjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4yIj5QUk9QIDMzOiBQUk9QX1BIWV9DSEFOPC9hPjwvbGk+Cis8bGk+NS43LjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4zIj5QUk9QIDM0OiBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRDwvYT48L2xpPgorPGxpPjUuNy40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNCI+UFJPUCAzNTogUFJPUF9QSFlfRlJFUTwvYT48L2xpPgorPGxpPjUuNy41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNSI+UFJPUCAzNjogUFJPUF9QSFlfQ0NBX1RIUkVTSE9MRDwvYT48L2xpPgorPGxpPjUuNy42LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNiI+UFJPUCAzNzogUFJPUF9QSFlfVFhfUE9XRVI8L2E+PC9saT4KKzxsaT41LjcuNy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjciPlBST1AgMzg6IFBST1BfUEhZX1JTU0k8L2E+PC9saT4KKzxsaT41LjcuOC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjgiPlBST1AgMzk6IFBST1BfUEhZX1JYX1NFTlNJVElWSVRZPC9hPjwvbGk+Cis8L3VsPjxsaT41LjguICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOCI+TUFDIFByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+NS44LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xIj5QUk9QIDQ4OiBQUk9QX01BQ19TQ0FOX1NUQVRFPC9hPjwvbGk+Cis8bGk+NS44LjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4yIj5QUk9QIDQ5OiBQUk9QX01BQ19TQ0FOX01BU0s8L2E+PC9saT4KKzxsaT41LjguMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjMiPlBST1AgNTA6IFBST1BfTUFDX1NDQU5fUEVSSU9EPC9hPjwvbGk+Cis8bGk+NS44LjQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC40Ij5QUk9QIDUxOiBQUk9QX01BQ19TQ0FOX0JFQUNPTjwvYT48L2xpPgorPGxpPjUuOC41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguNSI+UFJPUCA1MjogUFJPUF9NQUNfMTVfNF9MQUREUjwvYT48L2xpPgorPGxpPjUuOC42LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguNiI+UFJPUCA1MzogUFJPUF9NQUNfMTVfNF9TQUREUjwvYT48L2xpPgorPGxpPjUuOC43LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguNyI+UFJPUCA1NDogUFJPUF9NQUNfMTVfNF9QQU5JRDwvYT48L2xpPgorPGxpPjUuOC44LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguOCI+UFJPUCA1NTogUFJPUF9NQUNfUkFXX1NUUkVBTV9FTkFCTEVEPC9hPjwvbGk+Cis8bGk+NS44LjkuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC45Ij5QUk9QIDU2OiBQUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFPC9hPjwvbGk+Cis8bGk+NS44LjEwLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTAiPlBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVDwvYT48L2xpPgorPGxpPjUuOC4xMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjExIj5QUk9QIDQ4NjQ6IFBST1BfTUFDX1dISVRFTElTVDwvYT48L2xpPgorPGxpPjUuOC4xMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjEyIj5QUk9QIDQ4NjU6IFBST1BfTUFDX1dISVRFTElTVF9FTkFCTEVEPC9hPjwvbGk+Cis8bGk+NS44LjEzLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTMiPlBST1AgNDg2NzogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEPC9hPjwvbGk+Cis8bGk+NS44LjE0LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTQiPlBST1AgNDg2ODogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVM8L2E+PC9saT4KKzxsaT41LjguMTUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xNSI+UFJPUCA0ODY5OiBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUzwvYT48L2xpPgorPGxpPjUuOC4xNi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjE2Ij5QUk9QIDQ4NzA6IFBST1BfTUFDX0JMQUNLTElTVDwvYT48L2xpPgorPGxpPjUuOC4xNy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjE3Ij5QUk9QIDQ4NzE6IFBST1BfTUFDX0JMQUNLTElTVF9FTkFCTEVEPC9hPjwvbGk+Cis8L3VsPjxsaT41LjkuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOSI+TkVUIFByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+NS45LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xIj5QUk9QIDY0OiBQUk9QX05FVF9TQVZFRDwvYT48L2xpPgorPGxpPjUuOS4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuMiI+UFJPUCA2NTogUFJPUF9ORVRfSUZfVVA8L2E+PC9saT4KKzxsaT41LjkuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjMiPlBST1AgNjY6IFBST1BfTkVUX1NUQUNLX1VQPC9hPjwvbGk+Cis8bGk+NS45LjQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS40Ij5QUk9QIDY3OiBQUk9QX05FVF9ST0xFPC9hPjwvbGk+Cis8bGk+NS45LjUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS41Ij5QUk9QIDY4OiBQUk9QX05FVF9ORVRXT1JLX05BTUU8L2E+PC9saT4KKzxsaT41LjkuNi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjYiPlBST1AgNjk6IFBST1BfTkVUX1hQQU5JRDwvYT48L2xpPgorPGxpPjUuOS43LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuNyI+UFJPUCA3MDogUFJPUF9ORVRfTUFTVEVSX0tFWTwvYT48L2xpPgorPGxpPjUuOS44LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuOCI+UFJPUCA3MTogUFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVI8L2E+PC9saT4KKzxsaT41LjkuOS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjkiPlBST1AgNzI6IFBST1BfTkVUX1BBUlRJVElPTl9JRDwvYT48L2xpPgorPGxpPjUuOS4xMC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjEwIj5QUk9QIDczOiBQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc8L2E+PC9saT4KKzxsaT41LjkuMTEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xMSI+UFJPUCA3NDogUFJPUF9ORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUU8L2E+PC9saT4KKzxsaT41LjkuMTIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xMiI+UFJPUCA3NTogUFJPUF9ORVRfUFNLQzwvYT48L2xpPgorPC91bD48bGk+NS4xMC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMCI+SVB2NiBQcm9wZXJ0aWVzPC9hPjwvbGk+Cis8dWw+PGxpPjUuMTAuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC4xIj5QUk9QIDk2OiBQUk9QX0lQVjZfTExfQUREUjwvYT48L2xpPgorPGxpPjUuMTAuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC4yIj5QUk9QIDk3OiBQUk9QX0lQVjZfTUxfQUREUjwvYT48L2xpPgorPGxpPjUuMTAuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC4zIj5QUk9QIDk4OiBQUk9QX0lQVjZfTUxfUFJFRklYPC9hPjwvbGk+Cis8bGk+NS4xMC40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjQiPlBST1AgOTk6IFBST1BfSVBWNl9BRERSRVNTX1RBQkxFPC9hPjwvbGk+Cis8bGk+NS4xMC41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjUiPlBST1AgMTAxOiBQUk9QX0lQdjZfSUNNUF9QSU5HX09GRkxPQUQ8L2E+PC9saT4KKzwvdWw+PGxpPjUuMTEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTEiPkRlYnVnIFByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+NS4xMS4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjExLjEiPlBST1AgMTYzODQ6IFBST1BfREVCVUdfVEVTVF9BU1NFUlQ8L2E+PC9saT4KKzxsaT41LjExLjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTEuMiI+UFJPUCAxNjM4NTogUFJPUF9ERUJVR19OQ1BfTE9HX0xFVkVMPC9hPjwvbGk+Cis8L3VsPjwvdWw+PGxpPjYuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjYiPlN0YXR1cyBDb2RlczwvYT48L2xpPgorPGxpPjcuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjciPlRlY2hub2xvZ3k6IFRocmVhZChSKTwvYT48L2xpPgorPHVsPjxsaT43LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMSI+Q2FwYWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+Ny4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIiPlByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+Ny4yLjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xIj5QUk9QIDgwOiBQUk9QX1RIUkVBRF9MRUFERVJfQUREUjwvYT48L2xpPgorPGxpPjcuMi4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMiI+UFJPUCA4MTogUFJPUF9USFJFQURfUEFSRU5UPC9hPjwvbGk+Cis8bGk+Ny4yLjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zIj5QUk9QIDgyOiBQUk9QX1RIUkVBRF9DSElMRF9UQUJMRTwvYT48L2xpPgorPGxpPjcuMi40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNCI+UFJPUCA4MzogUFJPUF9USFJFQURfTEVBREVSX1JJRDwvYT48L2xpPgorPGxpPjcuMi41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNSI+UFJPUCA4NDogUFJPUF9USFJFQURfTEVBREVSX1dFSUdIVDwvYT48L2xpPgorPGxpPjcuMi42LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNiI+UFJPUCA4NTogUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVDwvYT48L2xpPgorPGxpPjcuMi43LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNyI+UFJPUCA4NjogUFJPUF9USFJFQURfTkVUV09SS19EQVRBPC9hPjwvbGk+Cis8bGk+Ny4yLjguICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi44Ij5QUk9QIDg3OiBQUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEFfVkVSU0lPTjwvYT48L2xpPgorPGxpPjcuMi45LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuOSI+UFJPUCA4ODogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQTwvYT48L2xpPgorPGxpPjcuMi4xMC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjEwIj5QUk9QIDg5OiBQUk9QX1RIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT048L2E+PC9saT4KKzxsaT43LjIuMTEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMSI+UFJPUCA5MDogUFJPUF9USFJFQURfT05fTUVTSF9ORVRTPC9hPjwvbGk+Cis8bGk+Ny4yLjEyLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTIiPlBST1AgOTE6IFBST1BfVEhSRUFEX09GRl9NRVNIX1JPVVRFUzwvYT48L2xpPgorPGxpPjcuMi4xMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjEzIj5QUk9QIDkyOiBQUk9QX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFM8L2E+PC9saT4KKzxsaT43LjIuMTQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xNCI+UFJPUCA5MzogUFJPUF9USFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFPC9hPjwvbGk+Cis8bGk+Ny4yLjE1LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTUiPlBST1AgOTQ6IFBST1BfVEhSRUFEX01PREU8L2E+PC9saT4KKzxsaT43LjIuMTYuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xNiI+UFJPUCA1Mzc2OiBQUk9QX1RIUkVBRF9DSElMRF9USU1FT1VUPC9hPjwvbGk+Cis8bGk+Ny4yLjE3LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTciPlBST1AgNTM3NzogUFJPUF9USFJFQURfUkxPQzE2PC9hPjwvbGk+Cis8bGk+Ny4yLjE4LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTgiPlBST1AgNTM3ODogUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEPC9hPjwvbGk+Cis8bGk+Ny4yLjE5LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTkiPlBST1AgNTM3OTogUFJPUF9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWTwvYT48L2xpPgorPGxpPjcuMi4yMC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIwIj5QUk9QIDUzODA6IFBST1BfVEhSRUFEX05FVFdPUktfSURfVElNRU9VVDwvYT48L2xpPgorPGxpPjcuMi4yMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIxIj5QUk9QIDUzODE6IFBST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTPC9hPjwvbGk+Cis8bGk+Ny4yLjIyLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjIiPlBST1AgNTM4MjogUFJPUF9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVPC9hPjwvbGk+Cis8bGk+Ny4yLjIzLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjMiPlBST1AgNTM4MzogUFJPUF9USFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRDwvYT48L2xpPgorPGxpPjcuMi4yNC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjI0Ij5QUk9QIDUzODQ6IFBST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEPC9hPjwvbGk+Cis8bGk+Ny4yLjI1LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjUiPlBST1AgNTM4NTogUFJPUF9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVI8L2E+PC9saT4KKzxsaT43LjIuMjYuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yNiI+UFJPUCA1Mzg2OiBQUk9QX1RIUkVBRF9QUkVGRVJSRURfUk9VVEVSX0lEPC9hPjwvbGk+Cis8bGk+Ny4yLjI3LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjciPlBST1AgNTM4NzogUFJPUF9USFJFQURfTkVJR0hCT1JfVEFCTEU8L2E+PC9saT4KKzxsaT43LjIuMjguICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yOCI+UFJPUCA1Mzg4OiBQUk9QX1RIUkVBRF9DSElMRF9DT1VOVF9NQVg8L2E+PC9saT4KKzxsaT43LjIuMjkuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yOSI+UFJPUCA1Mzg5OiBQUk9QX1RIUkVBRF9MRUFERVJfTkVUV09SS19EQVRBPC9hPjwvbGk+Cis8bGk+Ny4yLjMwLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzAiPlBST1AgNTM5MDogUFJPUF9USFJFQURfU1RBQkxFX0xFQURFUl9ORVRXT1JLX0RBVEE8L2E+PC9saT4KKzxsaT43LjIuMzEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zMSI+UFJPUCA1MzkxOiBQUk9QX1RIUkVBRF9KT0lORVJTPC9hPjwvbGk+Cis8bGk+Ny4yLjMyLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzIiPlBST1AgNTM5MjogUFJPUF9USFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQ8L2E+PC9saT4KKzxsaT43LjIuMzMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zMyI+UFJPUCA1MzkzOiBQUk9QX1RIUkVBRF9UTUZfUFJPWFlfRU5BQkxFRDwvYT48L2xpPgorPGxpPjcuMi4zNC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjM0Ij5QUk9QIDUzOTQ6IFBST1BfVEhSRUFEX1RNRl9QUk9YWV9TVFJFQU08L2E+PC9saT4KKzxsaT43LjIuMzUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zNSI+UFJPUCA1Mzk1OiBQUk9QX1RIUkVBRF9ESVNPVkVSWV9TQ0FOX0pPSU5FUl9GTEFHPC9hPjwvbGk+Cis8bGk+Ny4yLjM2LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzYiPlBST1AgNTM5NjogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fRU5BQkxFX0ZJTFRFUklORzwvYT48L2xpPgorPGxpPjcuMi4zNy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjM3Ij5QUk9QIDUzOTc6IFBST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX1BBTklEPC9hPjwvbGk+Cis8bGk+Ny4yLjM4LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzgiPlBST1AgNTM5ODogUFJPUF9USFJFQURfU1RFRVJJTkdfREFUQTwvYT48L2xpPgorPC91bD48L3VsPjxsaT44LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi44Ij5GZWF0dXJlOiBOZXR3b3JrIFNhdmU8L2E+PC9saT4KKzx1bD48bGk+OC4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEiPkNvbW1hbmRzPC9hPjwvbGk+Cis8dWw+PGxpPjguMS4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEuMSI+Q01EIDk6IChIb3N0LSZndDtOQ1ApIENNRF9ORVRfU0FWRTwvYT48L2xpPgorPGxpPjguMS4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEuMiI+Q01EIDEwOiAoSG9zdC0mZ3Q7TkNQKSBDTURfTkVUX0NMRUFSPC9hPjwvbGk+Cis8bGk+OC4xLjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjguMS4zIj5DTUQgMTE6IChIb3N0LSZndDtOQ1ApIENNRF9ORVRfUkVDQUxMPC9hPjwvbGk+Cis8L3VsPjwvdWw+PGxpPjkuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkiPkZlYXR1cmU6IEhvc3QgQnVmZmVyIE9mZmxvYWQ8L2E+PC9saT4KKzx1bD48bGk+OS4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEiPkNvbW1hbmRzPC9hPjwvbGk+Cis8dWw+PGxpPjkuMS4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEuMSI+Q01EIDEyOiAoTkNQLSZndDtIb3N0KSBDTURfSEJPX09GRkxPQUQ8L2E+PC9saT4KKzxsaT45LjEuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uOS4xLjIiPkNNRCAxMzogKE5DUC0mZ3Q7SG9zdCkgQ01EX0hCT19SRUNMQUlNPC9hPjwvbGk+Cis8bGk+OS4xLjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4zIj5DTUQgMTQ6IChOQ1AtJmd0O0hvc3QpIENNRF9IQk9fRFJPUDwvYT48L2xpPgorPGxpPjkuMS40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEuNCI+Q01EIDE1OiAoSG9zdC0mZ3Q7TkNQKSBDTURfSEJPX09GRkxPQURFRDwvYT48L2xpPgorPGxpPjkuMS41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEuNSI+Q01EIDE2OiAoSG9zdC0mZ3Q7TkNQKSBDTURfSEJPX1JFQ0xBSU1FRDwvYT48L2xpPgorPGxpPjkuMS42LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEuNiI+Q01EIDE3OiAoSG9zdC0mZ3Q7TkNQKSBDTURfSEJPX0RST1BQRUQ8L2E+PC9saT4KKzwvdWw+PGxpPjkuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uOS4yIj5Qcm9wZXJ0aWVzPC9hPjwvbGk+Cis8dWw+PGxpPjkuMi4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIuMSI+UFJPUCAxMDogUFJPUF9IQk9fTUVNX01BWDwvYT48L2xpPgorPGxpPjkuMi4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIuMiI+UFJPUCAxMTogUFJPUF9IQk9fQkxPQ0tfTUFYPC9hPjwvbGk+Cis8L3VsPjwvdWw+PGxpPjEwLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMCI+RmVhdHVyZTogSmFtIERldGVjdGlvbjwvYT48L2xpPgorPHVsPjxsaT4xMC4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xIj5Qcm9wZXJ0aWVzPC9hPjwvbGk+Cis8dWw+PGxpPjEwLjEuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS4xIj5QUk9QIDQ2MDg6IFBST1BfSkFNX0RFVEVDVF9FTkFCTEU8L2E+PC9saT4KKzxsaT4xMC4xLjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEwLjEuMiI+UFJPUCA0NjA5OiBQUk9QX0pBTV9ERVRFQ1RFRDwvYT48L2xpPgorPGxpPjEwLjEuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS4zIj5QUk9QIDQ2MTA6IFBST1BfSkFNX0RFVEVDVF9SU1NJX1RIUkVTSE9MRDwvYT48L2xpPgorPGxpPjEwLjEuNC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS40Ij5QUk9QIDQ2MTE6IFBST1BfSkFNX0RFVEVDVF9XSU5ET1c8L2E+PC9saT4KKzxsaT4xMC4xLjUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEwLjEuNSI+UFJPUCA0NjEyOiBQUk9QX0pBTV9ERVRFQ1RfQlVTWTwvYT48L2xpPgorPGxpPjEwLjEuNi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS42Ij5QUk9QIDQ2MTM6IFBST1BfSkFNX0RFVEVDVF9ISVNUT1JZX0JJVE1BUDwvYT48L2xpPgorPC91bD48L3VsPjxsaT4xMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTEiPkZlYXR1cmU6IEdQSU8gQWNjZXNzPC9hPjwvbGk+Cis8dWw+PGxpPjExLjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjExLjEiPlByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+MTEuMS4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xLjEiPlBST1AgNDA5NjogUFJPUF9HUElPX0NPTkZJRzwvYT48L2xpPgorPGxpPjExLjEuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTEuMS4yIj5QUk9QIDQwOTg6IFBST1BfR1BJT19TVEFURTwvYT48L2xpPgorPGxpPjExLjEuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTEuMS4zIj5QUk9QIDQwOTk6IFBST1BfR1BJT19TVEFURV9TRVQ8L2E+PC9saT4KKzxsaT4xMS4xLjQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjExLjEuNCI+UFJPUCA0MTAwOiBQUk9QX0dQSU9fU1RBVEVfQ0xFQVI8L2E+PC9saT4KKzwvdWw+PC91bD48bGk+MTIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEyIj5GZWF0dXJlOiBUcnVlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbjwvYT48L2xpPgorPHVsPjxsaT4xMi4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMi4xIj5Qcm9wZXJ0aWVzPC9hPjwvbGk+Cis8dWw+PGxpPjEyLjEuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTIuMS4xIj5QUk9QIDQxMDE6IFBST1BfVFJOR18zMjwvYT48L2xpPgorPGxpPjEyLjEuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTIuMS4yIj5QUk9QIDQxMDI6IFBST1BfVFJOR18xMjg8L2E+PC9saT4KKzxsaT4xMi4xLjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEyLjEuMyI+UFJPUCA0MTAzOiBQUk9QX1RSTkdfUkFXXzMyPC9hPjwvbGk+Cis8L3VsPjwvdWw+PGxpPjEzLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMyI+U2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM8L2E+PC9saT4KKzx1bD48bGk+MTMuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTMuMSI+UmF3IEFwcGxpY2F0aW9uIEFjY2VzczwvYT48L2xpPgorPC91bD48bGk+QXBwZW5kaXggQS4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEiPkZyYW1pbmcgUHJvdG9jb2w8L2E+PC9saT4KKzx1bD48bGk+QS4xLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4xIj5VQVJUIFJlY29tbWVuZGF0aW9uczwvYT48L2xpPgorPHVsPjxsaT5BLjEuMS4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMS4xIj5VQVJUIEJpdCBSYXRlIERldGVjdGlvbjwvYT48L2xpPgorPGxpPkEuMS4yLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4xLjIiPkhETEMtTGl0ZTwvYT48L2xpPgorPC91bD48bGk+QS4yLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4yIj5TUEkgUmVjb21tZW5kYXRpb25zPC9hPjwvbGk+Cis8dWw+PGxpPkEuMi4xLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4yLjEiPlNQSSBGcmFtaW5nIFByb3RvY29sPC9hPjwvbGk+Cis8L3VsPjxsaT5BLjMuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5BLjMiPkkmIzE3ODtDIFJlY29tbWVuZGF0aW9uczwvYT48L2xpPgorPGxpPkEuNC4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuNCI+TmF0aXZlIFVTQiBSZWNvbW1lbmRhdGlvbnM8L2E+PC9saT4KKzwvdWw+PGxpPkFwcGVuZGl4IEIuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CIj5UZXN0IFZlY3RvcnM8L2E+PC9saT4KKzx1bD48bGk+Qi4xLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4xIj5UZXN0IFZlY3RvcjogUGFja2VkIFVuc2lnbmVkIEludGVnZXI8L2E+PC9saT4KKzxsaT5CLjIuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjIiPlRlc3QgVmVjdG9yOiBSZXNldCBDb21tYW5kPC9hPjwvbGk+Cis8bGk+Qi4zLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4zIj5UZXN0IFZlY3RvcjogUmVzZXQgTm90aWZpY2F0aW9uPC9hPjwvbGk+Cis8bGk+Qi40LiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi40Ij5UZXN0IFZlY3RvcjogU2NhbiBCZWFjb248L2E+PC9saT4KKzxsaT5CLjUuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjUiPlRlc3QgVmVjdG9yOiBJbmJvdW5kIElQdjYgUGFja2V0PC9hPjwvbGk+Cis8bGk+Qi42LiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi42Ij5UZXN0IFZlY3RvcjogT3V0Ym91bmQgSVB2NiBQYWNrZXQ8L2E+PC9saT4KKzxsaT5CLjcuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjciPlRlc3QgVmVjdG9yOiBGZXRjaCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3M8L2E+PC9saT4KKzxsaT5CLjguICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjgiPlRlc3QgVmVjdG9yOiBSZXR1cm5lZCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3M8L2E+PC9saT4KKzxsaT5CLjkuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjkiPlRlc3QgVmVjdG9yOiBBZGRpbmcgYW4gb24tbWVzaCBuZXR3b3JrPC9hPjwvbGk+Cis8bGk+Qi4xMC4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuMTAiPlRlc3QgVmVjdG9yOiBJbnNlcnRpb24gbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yazwvYT48L2xpPgorPGxpPkIuMTEuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjExIj5UZXN0IFZlY3RvcjogUmVtb3ZpbmcgYSBsb2NhbCBvbi1tZXNoIG5ldHdvcms8L2E+PC9saT4KKzxsaT5CLjEyLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4xMiI+VGVzdCBWZWN0b3I6IFJlbW92YWwgbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yazwvYT48L2xpPgorPC91bD48bGk+QXBwZW5kaXggQy4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMiPkV4YW1wbGUgU2Vzc2lvbnM8L2E+PC9saT4KKzx1bD48bGk+Qy4xLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy4xIj5OQ1AgSW5pdGlhbGl6YXRpb248L2E+PC9saT4KKzxsaT5DLjIuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjIiPkF0dGFjaGluZyB0byBhIG5ldHdvcms8L2E+PC9saT4KKzxsaT5DLjMuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjMiPlN1Y2Nlc3NmdWxseSBqb2luaW5nIGEgcHJlLWV4aXN0aW5nIG5ldHdvcms8L2E+PC9saT4KKzxsaT5DLjQuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjQiPlVuc3VjY2Vzc2Z1bGx5IGpvaW5pbmcgYSBwcmUtZXhpc3RpbmcgbmV0d29yazwvYT48L2xpPgorPGxpPkMuNS4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuNSI+RGV0YWNoaW5nIGZyb20gYSBuZXR3b3JrPC9hPjwvbGk+Cis8bGk+Qy42LiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy42Ij5BdHRhY2hpbmcgdG8gYSBzYXZlZCBuZXR3b3JrPC9hPjwvbGk+Cis8bGk+Qy43LiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy43Ij5OQ1AgU29mdHdhcmUgUmVzZXQ8L2E+PC9saT4KKzxsaT5DLjguICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjgiPkFkZGluZyBhbiBvbi1tZXNoIHByZWZpeDwvYT48L2xpPgorPGxpPkMuOS4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuOSI+RW50ZXJpbmcgbG93LXBvd2VyIG1vZGVzPC9hPjwvbGk+Cis8bGk+Qy4xMC4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMTAiPlNuaWZmaW5nIHJhdyBwYWNrZXRzPC9hPjwvbGk+Cis8L3VsPjxsaT5BcHBlbmRpeCBELiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguRCI+R2xvc3Nhcnk8L2E+PC9saT4KKzxsaT5BcHBlbmRpeCBFLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguRSI+QWNrbm93bGVkZ21lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iI3JmYy5hdXRob3JzIj5BdXRob3JzJyBBZGRyZXNzZXM8L2E+PC9saT4KKworCisgIDwvdWw+CisKKyAgPGgxIGlkPSJyZmMuc2VjdGlvbi4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMSI+MS48L2E+IDxhIGhyZWY9IiNpbnRyb2R1Y3Rpb24iIGlkPSJpbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEucC4xIj5TcGluZWwgaXMgYSBob3N0LWNvbnRyb2xsZXIgcHJvdG9jb2wgZGVzaWduZWQgdG8gZW5hYmxlIGludGVyb3BlcmF0aW9uIG92ZXIgc2ltcGxlIHNlcmlhbCBjb25uZWN0aW9ucyBiZXR3ZWVuIGdlbmVyYWwgcHVycG9zZSBkZXZpY2Ugb3BlcmF0aW5nIHN5c3RlbXMgKE9TKSBhbmQgbmV0d29yayBjby1wcm9jZXNzb3JzIChOQ1ApIGZvciB0aGUgcHVycG9zZSBvZiBjb250cm9sbGluZyBhbmQgbWFuYWdpbmcgdGhlaXIgSVB2NiBuZXR3b3JrIGludGVyZmFjZXMsIGFjaGlldmluZyB0aGUgZm9sbG93aW5nIGdvYWxzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkFkb3B0IGEgbGF5ZXJlZCBhcHByb2FjaCB0byB0aGUgcHJvdG9jb2wgZGVzaWduLCBhbGxvd2luZyBmdXR1cmUgc3VwcG9ydCBmb3Igb3RoZXIgbmV0d29yayBwcm90b2NvbHMuPC9saT4KKyAgPGxpPk1pbmltaXplIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgY29tbWFuZHMvbWV0aG9kcyBieSBwcm92aWRpbmcgYSByaWNoLCBwcm9wZXJ0eS1iYXNlZCBBUEkuPC9saT4KKyAgPGxpPlN1cHBvcnQgTkNQcyBjYXBhYmxlIG9mIGJlaW5nIGNvbm5lY3RlZCB0byBtb3JlIHRoYW4gb25lIG5ldHdvcmsgYXQgYSB0aW1lLjwvbGk+CisgIDxsaT5HcmFjZWZ1bGx5IGhhbmRsZSB0aGUgYWRkaXRpb24gb2YgbmV3IGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgd2l0aG91dCBuZWNlc3NhcmlseSBicmVha2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LjwvbGk+CisgIDxsaT5CZSBhcyBtaW5pbWFsIGFuZCBsaWdodC13ZWlnaHQgYXMgcG9zc2libGUgd2l0aG91dCB1bm5lY2Vzc2FyaWx5IHNhY3JpZmljaW5nIGZsZXhpYmlsaXR5LjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEucC4zIj5PbiB0b3Agb2YgdGhpcyBjb3JlIGZyYW1ld29yaywgd2UgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIGFuZCBjb21tYW5kcyB0byBlbmFibGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgbmV0d29yayBwcm90b2NvbHMuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEuMSI+MS4xLjwvYT4gPGEgaHJlZj0iI2Fib3V0LXRoaXMtZHJhZnQiIGlkPSJhYm91dC10aGlzLWRyYWZ0Ij5BYm91dCB0aGlzIERyYWZ0PC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMS4xLnAuMSI+VGhpcyBkb2N1bWVudCBpcyBjdXJyZW50bHkgaW4gYSBkcmFmdCBzdGF0dXMgYW5kIGlzIGNoYW5naW5nIG9mdGVuLiAgVGhpcyBzZWN0aW9uIGRpc2N1c3NlcyBzb21lIGlkZWFzIGZvciBjaGFuZ2VzIHRvIHRoZSBwcm90b2NvbCB0aGF0IGhhdmVuJ3QgeWV0IGJlZW4gZnVsbHkgc3BlY2lmaWVkLCBhcyB3ZWxsIGFzIHNvbWUgb2YgdGhlIGltcGV0dXMgZm9yIHRoZSBjdXJyZW50IGRlc2lnbi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMS4xLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xLjEuMSI+MS4xLjEuPC9hPiA8YSBocmVmPSIjc2NvcGUiIGlkPSJzY29wZSI+U2NvcGU8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xLjEuMS5wLjEiPlRoZSBldmVudHVhbCBpbnRlbnQgaXMgdG8gaGF2ZSB0d28gZG9jdW1lbnRzOiBBIFNwaW5lbCBiYXNpcyBkb2N1bWVudCB3aGljaCBkaXNjdXNzZXMgdGhlIG5ldHdvcmstdGVjaG5vbG9neS1hZ25vc3RpYyBtZWNoYW5pc21zIGFuZCBhIFRocmVhZChSKSBzcGVjaWFsaXphdGlvbiBkb2N1bWVudCB3aGljaCBkZXNjcmliZXMgYWxsIG9mIHRoZSBUaHJlYWQoUiktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gQ3VycmVudGx5LCB0aGlzIGRvY3VtZW50IGNvdmVycyBib3RoLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xLjEuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEuMS4yIj4xLjEuMi48L2E+IDxhIGhyZWY9IiNyZW51bWJlcmluZyIgaWQ9InJlbnVtYmVyaW5nIj5SZW51bWJlcmluZzwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEuMS4yLnAuMSI+RWZmb3J0cyBhcmUgY3VycmVudGx5IG1haW50YWluZWQgdG8gdHJ5IHRvIHByZXZlbnQgb3ZlcnRseSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgZXhpc3RpbmcgcHJvdG9jb2wsIGJ1dCBpZiB5b3UgYXJlIGltcGxlbWVudGluZyBTcGluZWwgaW4geW91ciBvd24gcHJvZHVjdHMgeW91IHNob3VsZCBleHBlY3QgdGhlcmUgdG8gYmUgYXQgbGVhc3Qgb25lIGxhcmdlIHJlbnVtYmVyaW5nIGV2ZW50IGFuZCBtYWpvciB2ZXJzaW9uIG51bWJlciBjaGFuZ2UgYmVmb3JlIHRoZSBzdGFuZGFyZCBpcyBjb25zaWRlcmVkICJiYWtlZCIuIEFsbCBjaGFuZ2VzIHdpbGwgYmUgY2xlYXJseSBtYXJrZWQgYW5kIGRvY3VtZW50ZWQgdG8gbWFrZSBzdWNoIGEgdHJhbnNpdGlvbiBhcyBlYXN5IGFzIHBvc3NpYmxlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEuMS4yLnAuMiI+VG8gYWxsb3cgY29uY2x1c2l2ZSBkZXRlY3Rpb24gb2YgcHJvdG9jb2wgKGluKWNvbXBhdGliaWxpdHkgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIE5DUCwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhbmQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBjb25zaWRlcmVkIHRvIGJlICJiYWtlZCIgYW5kIHdpbGwgbm90IGNoYW5nZTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5Db21tYW5kIElEcyB6ZXJvIHRocm91Z2ggZWlnaHQuIChSZXNldCwgTm8tb3AsIGFuZCBQcm9wZXJ0eS1WYWx1ZSBDb21tYW5kcyk8L2xpPgorICA8bGk+UHJvcGVydHkgSURzIHplcm8gdGhyb3VnaCB0d28uIChMYXN0IHN0YXR1cywgUHJvdG9jb2wgVmVyc2lvbiwgYW5kIE5DUCBWZXJzaW9uKTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEuMS4yLnAuNCI+UmVudW1iZXJpbmcgd291bGQgYmUgdW5kZXJ0YWtlbiBpbiBvcmRlciB0byBiZXR0ZXIgb3JnYW5pemUgdGhlIGFsbG9jYXRpb24gb2YgcHJvcGVydHkgSURzIGFuZCBjYXBhYmlsaXR5IElEcy4gT25lIG9mIHRoZSBpbml0aWFsIGdvYWxzIG9mIHRoaXMgcHJvdG9jb2wgd2FzIGZvciBpdCB0byBiZSBwb3NzaWJsZSBmb3IgYSBob3N0IG9yIE5DUCB0byBvbmx5IGltcGxlbWVudCBwcm9wZXJ0aWVzIHdpdGggdmFsdWVzIGxlc3MgdGhhbiAxMjcgYW5kIGZvciB0aGUgTkNQIHRvIHN0aWxsIGJlIHVzYWJsZS0tLXJlbGVnYXRpbmcgYWxsIGxhcmdlciBwcm9wZXJ0eSB2YWx1ZXMgZm9yIGV4dHJhIGZlYXR1cmVzIG9yIG90aGVyIGNhcGFiaWxpdGllcyB0aGF0IGFyZW4ndCBzdHJpY3RseSBuZWNlc3NhcnkuIFRoaXMgd291bGQgYWxsb3cgc2ltcGxlIGltcGxlbWVudGF0aW9ucyB0byBhdm9pZCB0aGUgbmVlZCB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgUFVJcyAoPGEgaHJlZj0iI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyIj5TZWN0aW9uIDMuMjwvYT4pLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEuMS4yLnAuNSI+QXMgdGltZSBoYXMgZ29uZSBieSBhbmQgdGhlIHByb3RvY29sIGhhcyBiZWNvbWUgbW9yZSBmbGVzaGVkIG91dCwgaXQgaGFzIGJlY29tZSBjbGVhciB0aGF0IHNvbWUgb2YgdGhlIGluaXRpYWwgYWxsb2NhdGlvbnMgd2VyZSBpbmFkZXF1YXRlIGFuZCBzaG91bGQgYmUgcmV2aXNpdGVkIGlmIHdlIHdhbnQgdG8gdHJ5IHRvIGFjaGlldmUgdGhlIG9yaWdpbmFsIGdvYWwuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yIj4yLjwvYT4gPGEgaHJlZj0iI2ZyYW1lLWZvcm1hdCIgaWQ9ImZyYW1lLWZvcm1hdCI+RnJhbWUgRm9ybWF0PC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMi5wLjEiPkEgZnJhbWUgaXMgZGVmaW5lZCBzaW1wbHkgYXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5BIGhlYWRlciBieXRlPC9saT4KKyAgPGxpPkEgY29tbWFuZCAodXAgdG8gdGhyZWUgYnl0ZXMsIHNlZSA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPiBmb3IgZm9ybWF0KTwvbGk+CisgIDxsaT5BbiBvcHRpb25hbCBjb21tYW5kIHBheWxvYWQ8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkhFQURFUjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q01EPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUEFZTE9BRDwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjIuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMSI+Mi4xLjwvYT4gPGEgaHJlZj0iI2hlYWRlci1mb3JtYXQiIGlkPSJoZWFkZXItZm9ybWF0Ij5IZWFkZXIgRm9ybWF0PC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMi4xLnAuMSI+VGhlIGhlYWRlciBieXRlIGlzIGJyb2tlbiBkb3duIGFzIGZvbGxvd3M6IDwvcD4KKzxwcmU+CisgIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgIEZMRyAgfCAgTkxJICB8ICAgICAgVElEICAgICAgfAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCis8L3ByZT4KKzxwPgorICA8YSBpZD0iQ1JFRjEiIGNsYXNzPSJpbmZvIj5bQ1JFRjFdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBFdmVudHVhbGx5LCB3aGVuIGh0dHBzOi8vZ2l0aHViLmNvbS9taWVrZy9tbWFyay9pc3N1ZXMvOTUgaXMgYWRkcmVzc2VkLCB0aGUgYWJvdmUgdGFibGUgc2hvdWxkIGJlIHN3YXBwZWQgb3V0IHdpdGggdGhpczogfCAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IHwtLS18LS0tfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfCB8ICBGTEcgfHwgIE5MSSB8fCAgICAgIFRJRCAgIHx8fHw8L3NwYW4+PC9hPgorPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4yLjEuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMS4xIj4yLjEuMS48L2E+IDxhIGhyZWY9IiNmbGctZmxhZyIgaWQ9ImZsZy1mbGFnIj5GTEc6IEZsYWc8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4yLjEuMS5wLjEiPlRoZSBmbGFnIGZpZWxkIG9mIHRoZSBoZWFkZXIgYnl0ZSAoPHNhbXA+RkxHPC9zYW1wPikgaXMgYWx3YXlzIHNldCB0byB0aGUgdmFsdWUgdHdvIChvciA8c2FtcD4xMDwvc2FtcD4gaW4gYmluYXJ5KS4gQW55IGZyYW1lIHJlY2VpdmVkIHdpdGggdGhlc2UgYml0cyBzZXQgdG8gYW55IG90aGVyIHZhbHVlIGVsc2UgTVVTVCBOT1QgYmUgY29uc2lkZXJlZCBhIFNwaW5lbCBmcmFtZS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4yLjEuMS5wLjIiPlRoaXMgY29udmVudGlvbiBhbGxvd3MgU3BpbmVsIHRvIGJlIGxpbmUgY29tcGF0aWJsZSB3aXRoIEJUTEUgSENJLiBCeSBkZWZpbmluZyB0aGUgZmlyc3QgdHdvIGJpdCBpbiB0aGlzIHdheSB3ZSBjYW4gZGlzYW1iaWd1YXRlIGJldHdlZW4gU3BpbmVsIGZyYW1lcyBhbmQgSENJIGZyYW1lcyAod2hpY2ggYWx3YXlzIHN0YXJ0IHdpdGggZWl0aGVyIDxzYW1wPjB4MDE8L3NhbXA+IG9yIDxzYW1wPjB4MDQ8L3NhbXA+KSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZyYW1pbmcgb3ZlcmhlYWQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjIuMS4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMi4xLjIiPjIuMS4yLjwvYT4gPGEgaHJlZj0iI25saS1uZXR3b3JrLWxpbmstaWRlbnRpZmllciIgaWQ9Im5saS1uZXR3b3JrLWxpbmstaWRlbnRpZmllciI+TkxJOiBOZXR3b3JrIExpbmsgSWRlbnRpZmllcjwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjIuMS4yLnAuMSI+VGhlIE5ldHdvcmsgTGluayBJZGVudGlmaWVyIChOTEkpIGlzIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMywgd2hpY2ggaXMgYXNzb2NpYXRlZCBieSB0aGUgT1Mgd2l0aCBvbmUgb2YgdXAgdG8gZm91ciBJUHY2IHpvbmUgaW5kaWNlcyBjb3JyZXNwb25kaW5nIHRvIGNvbmNlcHR1YWwgSVB2NiBpbnRlcmZhY2VzIG9uIHRoZSBOQ1AuIFRoaXMgYWxsb3dzIHRoZSBwcm90b2NvbCB0byBzdXBwb3J0IElQdjYgbm9kZXMgY29ubmVjdGluZyBzaW11bHRhbmVvdXNseSB0byBtb3JlIHRoYW4gb25lIElQdjYgbmV0d29yayBsaW5rIHVzaW5nIGEgc2luZ2xlIE5DUCBpbnN0YW5jZS4gVGhlIGZpcnN0IE5ldHdvcmsgTGluayBJZGVudGlmaWVyICgwKSBNVVNUIHJlZmVyIHRvIGEgZGlzdGluZ3Vpc2hlZCBjb25jZXB0dWFsIGludGVyZmFjZSBwcm92aWRlZCBieSB0aGUgTkNQIGZvciBpdHMgSVB2NiBsaW5rIHR5cGUuIFRoZSBvdGhlciB0aHJlZSBOZXR3b3JrIExpbmsgSWRlbnRpZmllcnMgKDEsIDIgYW5kIDMpIE1BWSBiZSBkaXNzb2NpYXRlZCBmcm9tIGFueSBjb25jZXB0dWFsIGludGVyZmFjZS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMi4xLjMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEuMyI+Mi4xLjMuPC9hPiA8YSBocmVmPSIjdGlkLXRyYW5zYWN0aW9uLWlkZW50aWZpZXIiIGlkPSJ0aWQtdHJhbnNhY3Rpb24taWRlbnRpZmllciI+VElEOiBUcmFuc2FjdGlvbiBJZGVudGlmaWVyPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMi4xLjMucC4xIj5UaGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgaGVhZGVyIHJlcHJlc2VudCB0aGUgVHJhbnNhY3Rpb24gSWRlbnRpZmllcihUSUQpLiBUaGUgVElEIGlzIHVzZWQgZm9yIGNvcnJlbGF0aW5nIHJlc3BvbnNlcyB0byB0aGUgY29tbWFuZHMgd2hpY2ggZ2VuZXJhdGVkIHRoZW0uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMi4xLjMucC4yIj5XaGVuIGEgY29tbWFuZCBpcyBzZW50IGZyb20gdGhlIGhvc3QsIGFueSByZXBseSB0byB0aGF0IGNvbW1hbmQgc2VudCBieSB0aGUgTkNQIHdpbGwgdXNlIHRoZSBzYW1lIHZhbHVlIGZvciB0aGUgVElELiBXaGVuIHRoZSBob3N0IHJlY2VpdmVzIGEgZnJhbWUgdGhhdCBtYXRjaGVzIHRoZSBUSUQgb2YgdGhlIGNvbW1hbmQgaXQgc2VudCwgaXQgY2FuIGVhc2lseSByZWNvZ25pemUgdGhhdCBmcmFtZSBhcyB0aGUgYWN0dWFsIHJlc3BvbnNlIHRvIHRoYXQgY29tbWFuZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4yLjEuMy5wLjMiPlRoZSBUSUQgdmFsdWUgb2YgemVybyAoMCkgaXMgdXNlZCBmb3IgY29tbWFuZHMgdG8gd2hpY2ggYSBjb3JyZWxhdGVkIHJlc3BvbnNlIGlzIG5vdCBleHBlY3RlZCBvciBuZWVkZWQsIHN1Y2ggYXMgZm9yIHVuc29saWNpdGVkIHVwZGF0ZSBjb21tYW5kcyBzZW50IHRvIHRoZSBob3N0IGZyb20gdGhlIE5DUC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMi4xLjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEuNCI+Mi4xLjQuPC9hPiA8YSBocmVmPSIjY29tbWFuZC1pZGVudGlmaWVyLWNtZCIgaWQ9ImNvbW1hbmQtaWRlbnRpZmllci1jbWQiPkNvbW1hbmQgSWRlbnRpZmllciAoQ01EKTwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjIuMS40LnAuMSI+VGhlIGNvbW1hbmQgaWRlbnRpZmllciBpcyBhIDIxLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGVuY29kZWQgaW4gdXAgdG8gdGhyZWUgYnl0ZXMgdXNpbmcgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gPGEgaHJlZj0iI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyIj5TZWN0aW9uIDMuMjwvYT4uIFRoaXMgZW5jb2RpbmcgYWxsb3dzIGZvciB1cCB0byAyLDA5NywxNTIgaW5kaXZpZHVhbCBjb21tYW5kcywgd2l0aCB0aGUgZmlyc3QgMTI3IGNvbW1hbmRzIHJlcHJlc2VudGVkIGFzIGEgc2luZ2xlIGJ5dGUuICBDb21tYW5kIGlkZW50aWZpZXJzIGxhcmdlciB0aGFuIDIsMDk3LDE1MSBhcmUgZXhwbGljaXRseSBmb3JiaWRkZW4uICA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPkNJRCBSYW5nZTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+RGVzY3JpcHRpb248L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MCAtIDYzPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5SZXNlcnZlZCBmb3IgY29yZSBjb21tYW5kczwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+NjQgLSAxNSwzNTk8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8ZW0+VU5BTExPQ0FURUQ8L2VtPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4xNSwzNjAgLSAxNiwzODM8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlZlbmRvci1zcGVjaWZpYzwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MTYsMzg0IC0gMSw5OTksOTk5PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPGVtPlVOQUxMT0NBVEVEPC9lbT4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MiwwMDAsMDAwIC0gMiwwOTcsMTUxPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5FeHBlcmltZW50YWwgdXNlIG9ubHk8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4yLjEuNSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMS41Ij4yLjEuNS48L2E+IDxhIGhyZWY9IiNjb21tYW5kLXBheWxvYWQtb3B0aW9uYWwiIGlkPSJjb21tYW5kLXBheWxvYWQtb3B0aW9uYWwiPkNvbW1hbmQgUGF5bG9hZCAoT3B0aW9uYWwpPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMi4xLjUucC4xIj5EZXBlbmRpbmcgb24gdGhlIHNlbWFudGljcyBvZiB0aGUgY29tbWFuZCBpbiBxdWVzdGlvbiwgYSBwYXlsb2FkIE1BWSBiZSBpbmNsdWRlZCBpbiB0aGUgZnJhbWUuIFRoZSBleGFjdCBjb21wb3NpdGlvbiBhbmQgbGVuZ3RoIG9mIHRoZSBwYXlsb2FkIGlzIGRlZmluZWQgYnkgdGhlIGNvbW1hbmQgaWRlbnRpZmllci4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjMiPjMuPC9hPiA8YSBocmVmPSIjZGF0YS1wYWNraW5nIiBpZD0iZGF0YS1wYWNraW5nIj5EYXRhIFBhY2tpbmc8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLnAuMSI+RGF0YSBzZXJpYWxpemF0aW9uIGZvciBwcm9wZXJ0aWVzIGlzIHBlcmZvcm1lZCB1c2luZyBhIGxpZ2h0LXdlaWdodCBkYXRhIHBhY2tpbmcgZm9ybWF0IHdoaWNoIHdhcyBsb29zZWx5IGluc3BpcmVkIGJ5IEQtQnVzLiBUaGUgZm9ybWF0IG9mIGEgc2VyaWFsaXphdGlvbiBpcyBkZWZpbmVkIGJ5IGEgc3BlY2lhbGx5IGZvcm1hdHRlZCBzdHJpbmcuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy5wLjIiPlRoaXMgcGFja2luZyBmb3JtYXQgaXMgdXNlZCBmb3Igbm90YXRpb25hbCBjb252ZW5pZW5jZS4gV2hpbGUgdGhpcyBzdHJpbmctYmFzZWQgZGF0YXR5cGUgZm9ybWF0IGhhcyBiZWVuIGRlc2lnbmVkIHNvIHRoYXQgdGhlIHN0cmluZ3MgbWF5IGJlIGRpcmVjdGx5IHVzZWQgYnkgYSBzdHJ1Y3R1cmVkIGRhdGEgcGFyc2VyLCBzdWNoIGEgdGhpbmcgaXMgbm90IHJlcXVpcmVkIHRvIGltcGxlbWVudCBTcGluZWwuIEluZGVlZCwgaGlnbHkgY29uc3RyYWluZWQgYXBwbGljYXRpb25zIG1heSBmaW5kIHN1Y2ggYSB0aGluZyB0byBiZSB0b28gaGVhdnl3ZWlnaHQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy5wLjMiPkdvYWxzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkJlIGxpZ2h0d2VpZ2h0IGFuZCBmYXZvciBkaXJlY3QgcmVwcmVzZW50YXRpb24gb2YgdmFsdWVzLjwvbGk+CisgIDxsaT5Vc2UgYW4gZWFzaWx5IHJlYWRhYmxlIGFuZCBtZW1vcmFibGUgZm9ybWF0IHN0cmluZy48L2xpPgorICA8bGk+U3VwcG9ydCBsaXN0cyBhbmQgc3RydWN0dXJlcy48L2xpPgorICA8bGk+QWxsb3cgcHJvcGVydGllcyB0byBiZSBhcHBlbmRlZCB0byBzdHJ1Y3R1cmVzIHdoaWxlIG1haW50YWluaW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy5wLjUiPkVhY2ggcHJpbWl0aXZlIGRhdGF0eXBlIGhhcyBhbiBBU0NJSSBjaGFyYWN0ZXIgYXNzb2NpYXRlZCB3aXRoIGl0LiAgU3RydWN0dXJlcyBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgc3RyaW5ncyBvZiB0aGVzZSBjaGFyYWN0ZXJzLiBGb3IgZXhhbXBsZTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5DPC9zYW1wPjogQSBzaW5nbGUgdW5zaWduZWQgYnl0ZS48L2xpPgorICA8bGk+PHNhbXA+QzZVPC9zYW1wPjogQSBzaW5nbGUgdW5zaWduZWQgYnl0ZSwgZm9sbG93ZWQgYnkgYSAxMjgtYml0IElQdjYgYWRkcmVzcywgZm9sbG93ZWQgYnkgYSB6ZXJvLXRlcm1pbmF0ZWQgVVRGOCBzdHJpbmcuPC9saT4KKyAgPGxpPjxzYW1wPkEoNik8L3NhbXA+OiBBbiBhcnJheSBvZiBjb25jYXRlbmF0ZWQgSVB2NiBhZGRyZXNzZXM8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLnAuNyI+SW4gZWFjaCBjYXNlLCB0aGUgZGF0YSBpcyByZXByZXNlbnRlZCBleGFjdGx5IGFzIGRlc2NyaWJlZC4gRm9yIGV4YW1wbGUsIGFuIGFycmF5IG9mIDEwIElQdjYgYWRkcmVzcyBpcyBzdG9yZWQgYXMgMTYwIGJ5dGVzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4zLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4zLjEiPjMuMS48L2E+IDxhIGhyZWY9IiNwcmltaXRpdmUtdHlwZXMiIGlkPSJwcmltaXRpdmUtdHlwZXMiPlByaW1pdGl2ZSBUeXBlczwvYT48L2gxPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5DaGFyPC90aD4KKyAgICAgIDx0aCBjbGFzcz0ibGVmdCI+TmFtZTwvdGg+CisgICAgICA8dGggY2xhc3M9ImxlZnQiPkRlc2NyaXB0aW9uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD4uPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfVk9JRDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPkVtcHR5IGRhdGEgdHlwZS4gVXNlZCBpbnRlcm5hbGx5LjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPmI8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9CT09MPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+Qm9vbGVhbiB2YWx1ZS4gRW5jb2RlZCBpbiA4LWJpdHMgYXMgZWl0aGVyIDB4MDAgb3IgMHgwMS4gQWxsIG90aGVyIHZhbHVlcyBhcmUgaWxsZWdhbC48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5DPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfVUlOVDg8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5VbnNpZ25lZCA4LWJpdCBpbnRlZ2VyLjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPmM8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9JTlQ4PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+U2lnbmVkIDgtYml0IGludGVnZXIuPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+Uzwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPkRBVEFUWVBFX1VJTlQxNjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyLjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPnM8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9JTlQxNjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlNpZ25lZCAxNi1iaXQgaW50ZWdlci48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5MPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfVUlOVDMyPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+VW5zaWduZWQgMzItYml0IGludGVnZXIuPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+bDwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPkRBVEFUWVBFX0lOVDMyPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+U2lnbmVkIDMyLWJpdCBpbnRlZ2VyLjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPmk8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9VSU5UX1BBQ0tFRDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlBhY2tlZCBVbnNpZ25lZCBJbnRlZ2VyLiBTZWUgPGEgaHJlZj0iI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyIj5TZWN0aW9uIDMuMjwvYT4uPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+Njwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPkRBVEFUWVBFX0lQdjZBRERSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+SVB2NiBBZGRyZXNzLiAoQmlnLWVuZGlhbik8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5FPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfRVVJNjQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5FVUktNjQgQWRkcmVzcy4gKEJpZy1lbmRpYW4pPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+ZTwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPkRBVEFUWVBFX0VVSTQ4PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+RVVJLTQ4IEFkZHJlc3MuIChCaWctZW5kaWFuKTwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPkQ8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9EQVRBPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+QXJiaXRyYXJ5IGRhdGEuIFNlZSA8YSBocmVmPSIjZGF0YS1ibG9icyI+U2VjdGlvbiAzLjM8L2E+LjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPmQ8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9EQVRBX1dMRU48L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5BcmJpdHJhcnkgZGF0YSB3aXRoIHByZXBlbmRlZCBsZW5ndGguIFNlZSA8YSBocmVmPSIjZGF0YS1ibG9icyI+U2VjdGlvbiAzLjM8L2E+LjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPlU8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9VVEY4PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+WmVyby10ZXJtaW5hdGVkIFVURjgtZW5jb2RlZCBzdHJpbmcuPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+dCguLi4pPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfU1RSVUNUPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+U3RydWN0dXJlZCBkYXRhdHlwZSB3aXRoIHByZXBlbmRlZCBsZW5ndGguIFNlZSA8YSBocmVmPSIjc3RydWN0dXJlZC1kYXRhIj5TZWN0aW9uIDMuNDwvYT4uPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+QSguLi4pPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfQVJSQVk8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5BcnJheSBvZiBkYXRhdHlwZXMuIENvbXBvdW5kIHR5cGUuIFNlZSA8YSBocmVmPSIjYXJyYXlzIj5TZWN0aW9uIDMuNTwvYT4uPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjEucC4xIj5BbGwgbXVsdGktYnl0ZSB2YWx1ZXMgYXJlIGxpdHRsZS1lbmRpYW4gdW5sZXNzIGV4cGxpY2l0bHkgc3RhdGVkIG90aGVyd2lzZS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMy4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMy4yIj4zLjIuPC9hPiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiIGlkPSJwYWNrZWQtdW5zaWduZWQtaW50ZWdlciI+UGFja2VkIFVuc2lnbmVkIEludGVnZXI8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjIucC4xIj5Gb3IgY2VydGFpbiB0eXBlcyBvZiBpbnRlZ2Vycywgc3VjaCBjb21tYW5kIG9yIHByb3BlcnR5IGlkZW50aWZpZXJzLCB1c3VhbGx5IGhhdmUgYSB2YWx1ZSBvbiB0aGUgd2lyZSB0aGF0IGlzIGxlc3MgdGhhbiAxMjcuIEhvd2V2ZXIsIGluIG9yZGVyIHRvIG5vdCBwcmVjbHVkZSB0aGUgdXNlIG9mIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUsIHdlIHdvdWxkIG5lZWQgdG8gYWRkIGFuIGV4dHJhIGJ5dGUuIERvaW5nIHRoaXMgd291bGQgYWRkIGFuIGV4dHJhIGJ5dGUgdG8gdGhlIG1ham9yaXR5IG9mIGluc3RhbmNlcywgd2hpY2ggY2FuIGFkZCB1cCBpbiB0ZXJtcyBvZiBiYW5kd2lkdGguICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy4yLnAuMiI+VGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBpcyBiYXNlZCBvbiB0aGUgPGEgaHJlZj0iaHR0cHM6Ly93d3cudzMub3JnL1RSL2V4aS8jZW5jb2RpbmdVbnNpZ25lZEludGVnZXIiPnVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGluIEVYSTwvYT4sIGV4Y2VwdCB0aGF0IHdlIGxpbWl0IHRoZSBtYXhpbXVtIHZhbHVlIHRvIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgY2FuIGJlIGVuY29kZWQgaW50byB0aHJlZSBieXRlcygyLDA5NywxNTEpLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuMi5wLjMiPkZvciBhbGwgdmFsdWVzIGxlc3MgdGhhbiAxMjcsIHRoZSBwYWNrZWQgZm9ybSBvZiB0aGUgbnVtYmVyIGlzIHNpbXBseSBhIHNpbmdsZSBieXRlIHdoaWNoIGRpcmVjdGx5IHJlcHJlc2VudHMgdGhlIG51bWJlci4gRm9yIHZhbHVlcyBsYXJnZXIgdGhhbiAxMjcsIHRoZSBmb2xsb3dpbmcgcHJvY2VzcyBpcyB1c2VkIHRvIGVuY29kZSB0aGUgdmFsdWU6IDwvcD4KKzxwLz4KKworPG9sPgorICA8bGk+VGhlIHVuc2lnbmVkIGludGVnZXIgaXMgYnJva2VuIHVwIGludG8gPGVtPm48L2VtPiA3LWJpdCBjaHVua3MgYW5kIHBsYWNlZCBpbnRvIDxlbT5uPC9lbT4gb2N0ZXRzLCBsZWF2aW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBlYWNoIG9jdGV0IHVudXNlZC48L2xpPgorICA8bGk+T3JkZXIgdGhlIG9jdGV0cyBmcm9tIGxlYXN0LXNpZ25pZmljYW50IHRvIG1vc3Qtc2lnbmlmaWNhbnQuICAoTGl0dGxlLWVuZGlhbik8L2xpPgorICA8bGk+Q2xlYXIgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IG9jdGV0LiBTZXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvbiBhbGwgb3RoZXIgb2N0ZXRzLjwvbGk+Cis8L29sPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuMi5wLjUiPldoZXJlIDxlbT5uPC9lbT4gaXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiA3LWJpdCBjaHVua3MgeW91IGNhbiB1c2UgdG8gcmVwcmVzZW50IHRoZSBnaXZlbiB2YWx1ZS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjIucC42Ij5UYWtlIHRoZSB2YWx1ZSAxMzM3LCBmb3IgZXhhbXBsZTogPC9wPgorPHByZT4KKzEzMzcgPSZndDsgMHgwNTM5CisgICAgID0mZ3Q7IFszOSAwQV0KKyAgICAgPSZndDsgW0I5IDBBXQorPC9wcmU+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy4yLnAuNyI+VG8gZGVjb2RlIHRoZSB2YWx1ZSwgeW91IGNvbGxlY3QgdGhlIDctYml0IGNodW5rcyB1bnRpbCB5b3UgZmluZCBhbiBvY3RldCB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBjbGVhci4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMy4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMy4zIj4zLjMuPC9hPiA8YSBocmVmPSIjZGF0YS1ibG9icyIgaWQ9ImRhdGEtYmxvYnMiPkRhdGEgQmxvYnM8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjMucC4xIj5UaGVyZSBhcmUgdHdvIHR5cGVzIGZvciBkYXRhIGJsb2JzOiA8c2FtcD5kPC9zYW1wPiBhbmQgPHNhbXA+RDwvc2FtcD4uICA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPmQ8L3NhbXA+IGhhcyB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChpbiBieXRlcykgcHJlcGVuZGVkIHRvIHRoZSBkYXRhICh3aXRoIHRoZSBsZW5ndGggZW5jb2RlZCBhcyB0eXBlIDxzYW1wPlM8L3NhbXA+KS4gVGhlIHNpemUgb2YgdGhlIGxlbmd0aCBmaWVsZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxlbmd0aC48L2xpPgorICA8bGk+PHNhbXA+RDwvc2FtcD4gZG9lcyBub3QgaGF2ZSBhIHByZXBlbmRlZCBsZW5ndGg6IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgaXMgaW1wbGllZCBieSB0aGUgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIHBhcnNlZC4gSXQgaXMgYW4gZXJyb3IgZm9yIDxzYW1wPkQ8L3NhbXA+IHRvIG5vdCBiZSB0aGUgbGFzdCB0eXBlIGluIGEgdHlwZSBpbiBhIHR5cGUgc2lnbmF0dXJlLjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuMy5wLjMiPlRoaXMgZGljaG90b215IGFsbG93cyBmb3IgbW9yZSBlZmZpY2llbnQgZW5jb2RpbmcgYnkgZWxpbWluYXRpbmcgcmVkdW5kZW5jeS4gSWYgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlciBpcyBhIGRhdGEgYmxvYiwgZW5jb2RpbmcgdGhlIGxlbmd0aCB3b3VsZCBiZSByZWR1bmRhbnQgYmVjYXVzZSB3ZSBhbHJlYWR5IGtub3cgaG93IG1hbnkgYnl0ZXMgYXJlIGluIHRoZSByZXN0IG9mIHRoZSBidWZmZXIuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy4zLnAuNCI+SW4gc29tZSBjYXNlcyB3ZSB1c2UgPHNhbXA+ZDwvc2FtcD4gZXZlbiBpZiBpdCBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIHR5cGUgc2lnbmF0dXJlLiAgV2UgZG8gdGhpcyB0byBhbGxvdyBmb3IgdXMgdG8gYmUgYWJsZSB0byBhcHBlbmQgYWRkaXRpb25hbCBmaWVsZHMgdG8gdGhlIHR5cGUgc2lnbmF0dXJlIGlmIG5lY2Vzc2FyeSBpbiB0aGUgZnV0dXJlLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2Ugd2l0aCBlbWJlZGRlZCBzdHJ1Y3RzLCBsaWtlIGluIHRoZSBzY2FuIHJlc3VsdHMuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy4zLnAuNSI+Rm9yIGV4YW1wbGUsIGxldCdzIHNheSB3ZSBoYXZlIGEgYnVmZmVyIHRoYXQgaXMgZW5jb2RlZCB3aXRoIHRoZSBkYXRhdHlwZSBzaWduYXR1cmUgb2YgPHNhbXA+Q0xMRDwvc2FtcD4uIEluIHRoaXMgY2FzZSwgaXQgaXMgcHJldHR5IGVhc3kgdG8gdGVsbCB3aGVyZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZGF0YSBibG9iIGlzOiB0aGUgc3RhcnQgaXMgOSBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLCBhbmQgaXRzIGxlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgbWludXMgOS4gKDkgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0YWtlbiB1cCBieSBhIGJ5dGUgYW5kIHR3byBsb25ncykgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuMy5wLjYiPlRoZSBkYXRhdHlwZSBzaWduYXR1cmUgPHNhbXA+Q0xMRFU8L3NhbXA+IGlzIGlsbGVnYWwgYmVjYXVzZSB3ZSBjYW4ndCBkZXRlcm1pbmUgd2hlcmUgdGhlIGxhc3QgZmllbGQgKGEgemVyby10ZXJtaW5hdGVkIFVURjggc3RyaW5nKSBzdGFydHMuIEJ1dCB0aGUgZGF0YXR5cGUgPHNhbXA+Q0xMZFU8L3NhbXA+IDxlbT5pczwvZW0+IGxlZ2FsLCBiZWNhdXNlIHRoZSBwYXJzZXIgY2FuIGRldGVybWluZSB0aGUgZXhhY3QgbGVuZ3RoIG9mIHRoZSBkYXRhIGJsb2ItLSBhbGxvd2luZyBpdCB0byBrbm93IHdoZXJlIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBmaWVsZCB3b3VsZCBiZS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMy40Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uMy40Ij4zLjQuPC9hPiA8YSBocmVmPSIjc3RydWN0dXJlZC1kYXRhIiBpZD0ic3RydWN0dXJlZC1kYXRhIj5TdHJ1Y3R1cmVkIERhdGE8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjQucC4xIj5UaGUgc3RydWN0dXJlIGRhdGEgdHlwZSAoPHNhbXA+dCguLi4pPC9zYW1wPikgaXMgYSB3YXkgb2YgYnVuZGxpbmcgdG9nZXRoZXIgc2V2ZXJhbCBmaWVsZHMgaW50byBhIHNpbmdsZSBzdHJ1Y3R1cmUuIEl0IGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEgPHNhbXA+ZDwvc2FtcD4gdHlwZSBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mIGJlaW5nIG9wYXF1ZSwgdGhlIGZpZWxkcyBpbiB0aGUgY29udGVudCBhcmUga25vd24uIFRoaXMgaXMgdXNlZnVsIGZvciB0aGluZ3MgbGlrZSBzY2FuIHJlc3VsdHMgd2hlcmUgeW91IGhhdmUgc3Vic3RydWN0dXJlcyB3aGljaCBhcmUgZGVmaW5lZCBieSBkaWZmZXJlbnQgbGF5ZXJzLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuNC5wLjIiPkZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgdHlwZSBzaWduYXR1cmUgPHNhbXA+THQoRVMpdCg2Qyk8L3NhbXA+LiBJbiB0aGlzIGh5cG90aGV0aWNhbCBjYXNlLCB0aGUgZmlyc3Qgc3RydWN0IGlzIGRlZmluZWQgYnkgdGhlIE1BQyBsYXllciwgYW5kIHRoZSBzZWNvbmQgc3RydWN0IGlzIGRlZmluZWQgYnkgdGhlIFBIWSBsYXllci4gQmVjYXVzZSBvZiB0aGUgdXNlIG9mIHN0cnVjdHVyZXMsIHdlIGtub3cgZXhhY3RseSB3aGF0IHBhcnQgY29tZXMgZnJvbSB0aGF0IGxheWVyLiAgQWRkaXRpb25hbGx5LCB3ZSBjYW4gYWRkIGZpZWxkcyB0byBlYWNoIHN0cnVjdHVyZSB3aXRob3V0IGludHJvZHVjaW5nIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgcHJvYmxlbXM6IERhdGEgZW5jb2RlZCBhcyA8c2FtcD5MdChFU1UpdCg2Qyk8L3NhbXA+IChOb3RpY2UgdGhlIGV4dHJhIDxzYW1wPlU8L3NhbXA+KSB3aWxsIGRlY29kZSBqdXN0IGZpbmUgYXMgPHNhbXA+THQoRVMpdCg2Qyk8L3NhbXA+LiBBZGRpdGlvbmFsbHksIGlmIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIE1BQyBsYXllciBhbmQgb25seSBjYXJlIGFib3V0IHRoZSBuZXR3b3JrIGxheWVyLCB3ZSBjb3VsZCBwYXJzZSBhcyA8c2FtcD5MdCgpdCg2Qyk8L3NhbXA+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuNC5wLjMiPk5vdGUgdGhhdCBkYXRhIGVuY29kZWQgYXMgPHNhbXA+THQoRVMpdCg2Qyk8L3NhbXA+IHdpbGwgYWxzbyBwYXJzZSBhcyA8c2FtcD5MZGQ8L3NhbXA+LCB3aXRoIHRoZSBzdHJ1Y3R1cmVzIGZyb20gYm90aCBsYXllcnMgbm93IGJlaW5nIG9wYXF1ZSBkYXRhIGJsb2JzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4zLjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4zLjUiPjMuNS48L2E+IDxhIGhyZWY9IiNhcnJheXMiIGlkPSJhcnJheXMiPkFycmF5czwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuNS5wLjEiPkFuIGFycmF5IGlzIHNpbXBseSBhIGNvbmNhdGVuYXRlZCBzZXQgb2YgPGVtPm48L2VtPiBkYXRhIGVuY29kaW5ncy4gRm9yIGV4YW1wbGUsIHRoZSB0eXBlIDxzYW1wPkEoNik8L3NhbXA+IGlzIHNpbXBseSBhIGxpc3Qgb2YgSVB2NiBhZGRyZXNzZXMtLS1vbmUgYWZ0ZXIgdGhlIG90aGVyLiAgVGhlIHR5cGUgPHNhbXA+QSg2RSk8L3NhbXA+IGxpa2V3aXNlIGEgY29uY2F0ZW5hdGlvbiBvZiBJUHY2LWFkZHJlc3MvRVVJLTY0IHBhaXJzLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuNS5wLjIiPklmIGFuIGFycmF5IGNvbnRhaW5zIG1hbnkgZmllbGRzLCB0aGUgZmllbGRzIHdpbGwgb2Z0ZW4gYmUgc3Vycm91bmRlZCBieSBhIHN0cnVjdHVyZSAoPHNhbXA+dCguLi4pPC9zYW1wPikuIFRoaXMgZWZmZWN0aXZlbHkgcHJlcGVuZHMgZWFjaCBpdGVtIGluIHRoZSBhcnJheSB3aXRoIGl0cyBsZW5ndGguIFRoaXMgaXMgdXNlZnVsIGZvciBpbXByb3ZpbmcgcGFyc2luZyBwZXJmb3JtYW5jZSBvciB0byBhbGxvdyBhZGRpdGlvbmFsIGZpZWxkcyB0byBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlIGluIGEgYmFja3dhcmQgY29tcGF0aWJsZSB3YXkuIElmIHRoZXJlIGlzIGEgaGlnaCBjZXJ0YWludHkgdGhhdCBhZGRpdGlvbmFsIGZpZWxkcyB3aWxsIG5ldmVyIGJlIGFkZGVkLCB0aGUgc3RydWN0IG1heSBiZSBvbWl0dGVkIChzYXZpbmcgdHdvIGJ5dGVzIHBlciBpdGVtKS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjUucC4zIj5UaGlzIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZGVmaW5lIGEgd2F5IHRvIGVtYmVkIGFuIGFycmF5IGFzIGEgZmllbGQgYWxvbmdzaWRlIG90aGVyIGZpZWxkcy4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQiPjQuPC9hPiA8YSBocmVmPSIjY29tbWFuZHMiIGlkPSJjb21tYW5kcyI+Q29tbWFuZHM8L2E+PC9oMT4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNC4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xIj40LjEuPC9hPiA8YSBocmVmPSIjY21kLW5vb3AiIGlkPSJjbWQtbm9vcCI+Q01EIDA6IChIb3N0LSZndDtOQ1ApIENNRF9OT09QPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfTk9PUDwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xLnAuMSI+Tm8tT3BlcmF0aW9uIGNvbW1hbmQuIEluZHVjZXMgdGhlIE5DUCB0byBzZW5kIGEgc3VjY2VzcyBzdGF0dXMgYmFjayB0byB0aGUgaG9zdC4gVGhpcyBpcyBwcmltYXJpbHkgdXNlZCBmb3IgbGl2ZWxpbmVzcyBjaGVja3MuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xLnAuMiI+VGhlIGNvbW1hbmQgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIFNIT1VMRCBiZSBlbXB0eS4gVGhlIHJlY2VpdmVyIE1VU1QgaWdub3JlIGFueSBub24tZW1wdHkgY29tbWFuZCBwYXlsb2FkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMS5wLjMiPlRoZXJlIGlzIG5vIGVycm9yIGNvbmRpdGlvbiBmb3IgdGhpcyBjb21tYW5kLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjIiPjQuMi48L2E+IDxhIGhyZWY9IiNjbWQtcmVzZXQiIGlkPSJjbWQtcmVzZXQiPkNNRCAxOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUkVTRVQ8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IRUFERVI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkNNRF9SRVNFVDwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4yLnAuMSI+UmVzZXQgTkNQIGNvbW1hbmQuIENhdXNlcyB0aGUgTkNQIHRvIHBlcmZvcm0gYSBzb2Z0d2FyZSByZXNldC4gRHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhpcyBjb21tYW5kLCB0aGUgVElEIGlzIGlnbm9yZWQuIFRoZSBob3N0IHNob3VsZCBpbnN0ZWFkIHdhaXQgZm9yIGEgPHNhbXA+Q01EX1BST1BfVkFMVUVfSVM8L3NhbXA+IGNvbW1hbmQgZnJvbSB0aGUgTkNQIGluZGljYXRpbmcgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4gaGFzIGJlZW4gc2V0IHRvIDxzYW1wPlNUQVRVU19SRVNFVF9TT0ZUV0FSRTwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4yLnAuMiI+VGhlIGNvbW1hbmQgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIFNIT1VMRCBiZSBlbXB0eS4gVGhlIHJlY2VpdmVyIE1VU1QgaWdub3JlIGFueSBub24tZW1wdHkgY29tbWFuZCBwYXlsb2FkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMi5wLjMiPklmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+IHdpbGwgYmUgZW1pdHRlZCBpbnN0ZWFkIHdpdGggdGhlIHZhbHVlIHNldCB0byB0aGUgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlIGZvciB0aGUgZXJyb3IuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjQuMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMyI+NC4zLjwvYT4gPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWdldCIgaWQ9ImNtZC1wcm9wLXZhbHVlLWdldCI+Q01EIDI6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX0dFVDwvYT48L2gxPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xLTM8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUFJPUF9WQUxVRV9HRVQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBST1BfSUQ8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMy5wLjEiPkdldCBwcm9wZXJ0eSB2YWx1ZSBjb21tYW5kLiBDYXVzZXMgdGhlIE5DUCB0byBlbWl0IGEgPHNhbXA+Q01EX1BST1BfVkFMVUVfSVM8L3NhbXA+IGNvbW1hbmQgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpZGVudGlmaWVyLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMy5wLjIiPlRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjMucC4zIj5JZiBhbiBlcnJvciBvY2N1cnMsIHRoZSB2YWx1ZSBvZiA8c2FtcD5QUk9QX0xBU1RfU1RBVFVTPC9zYW1wPiB3aWxsIGJlIGVtaXR0ZWQgaW5zdGVhZCB3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gdGhlIGdlbmVyYXRlZCBzdGF0dXMgY29kZSBmb3IgdGhlIGVycm9yLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjQiPjQuNC48L2E+IDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1zZXQiIGlkPSJjbWQtcHJvcC12YWx1ZS1zZXQiPkNNRCAzOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9TRVQ8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkhFQURFUjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q01EX1BST1BfVkFMVUVfU0VUPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5QUk9QX0lEPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5WQUxVRTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC40LnAuMSI+U2V0IHByb3BlcnR5IHZhbHVlIGNvbW1hbmQuIEluc3RydWN0cyB0aGUgTkNQIHRvIHNldCB0aGUgZ2l2ZW4gcHJvcGVydHkgdG8gdGhlIHNwZWNpZmljIGdpdmVuIHZhbHVlLCByZXBsYWNpbmcgYW55IHByZXZpb3VzIHZhbHVlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNC5wLjIiPlRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPiwgZm9sbG93ZWQgYnkgdGhlIHByb3BlcnR5IHZhbHVlLiBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBkZWZpbmVkIGJ5IHRoZSBwcm9wZXJ0eS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjQucC4zIj5JZiBhbiBlcnJvciBvY2N1cnMsIHRoZSB2YWx1ZSBvZiA8c2FtcD5QUk9QX0xBU1RfU1RBVFVTPC9zYW1wPiB3aWxsIGJlIGVtaXR0ZWQgd2l0aCB0aGUgdmFsdWUgc2V0IHRvIHRoZSBnZW5lcmF0ZWQgc3RhdHVzIGNvZGUgZm9yIHRoZSBlcnJvci4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNC41Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNC41Ij40LjUuPC9hPiA8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtaW5zZXJ0IiBpZD0iY21kLXByb3AtdmFsdWUtaW5zZXJ0Ij5DTUQgNDogKEhvc3QtJmd0O05DUCkgQ01EX1BST1BfVkFMVUVfSU5TRVJUPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjEtMzwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IRUFERVI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkNNRF9QUk9QX1ZBTFVFX0lOU0VSVDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UFJPUF9JRDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+VkFMVUU8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNS5wLjEiPkluc2VydCB2YWx1ZSBpbnRvIHByb3BlcnR5IGNvbW1hbmQuIEluc3RydWN0cyB0aGUgTkNQIHRvIGluc2VydCB0aGUgZ2l2ZW4gdmFsdWUgaW50byBhIGxpc3Qtb3JpZW50ZWQgcHJvcGVydHksIHdpdGhvdXQgcmVtb3Zpbmcgb3RoZXIgaXRlbXMgaW4gdGhlIGxpc3QuIFRoZSByZXN1bHRpbmcgb3JkZXIgb2YgaXRlbXMgaW4gdGhlIGxpc3QgaXMgZGVmaW5lZCBieSB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0eSBiZWluZyBvcGVyYXRlZCBvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjUucC4yIj5UaGUgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIGlzIHRoZSBwcm9wZXJ0eSBpZGVudGlmaWVyIGVuY29kZWQgaW4gdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gPGEgaHJlZj0iI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyIj5TZWN0aW9uIDMuMjwvYT4sIGZvbGxvd2VkIGJ5IHRoZSB2YWx1ZSB0byBiZSBpbnNlcnRlZC4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgdmFsdWUgaXMgZGVmaW5lZCBieSB0aGUgcHJvcGVydHkuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC41LnAuMyI+SWYgdGhlIHR5cGUgc2lnbmF0dXJlIG9mIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkgPHNhbXA+UFJPUF9JRDwvc2FtcD4gY29uc2lzdHMgb2YgYSBzaW5nbGUgc3RydWN0dXJlIGVuY2xvc2VkIGJ5IGFuIGFycmF5ICg8c2FtcD5BKHQoLi4uKSk8L3NhbXA+KSwgdGhlbiB0aGUgY29udGVudHMgb2YgPHNhbXA+VkFMVUU8L3NhbXA+IE1VU1QgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhlIHN0cnVjdHVyZSAoPHNhbXA+Li4uPC9zYW1wPikgcmF0aGVyIHRoYW4gdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIHdob2xlIGl0ZW0gKDxzYW1wPnQoLi4uKTwvc2FtcD4pLiAgU3BlY2lmaWNhbGx5LCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUgTVVTVCBOT1QgYmUgcHJlcGVuZGVkIHRvIDxzYW1wPlZBTFVFPC9zYW1wPi4gVGhpcyBoZWxwcyB0byBlbGltaW5hdGUgcmVkdW5kYW50IGRhdGEuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC41LnAuNCI+SWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgdmFsdWUgb2YgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4gd2lsbCBiZSBlbWl0dGVkIHdpdGggdGhlIHZhbHVlIHNldCB0byB0aGUgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlIGZvciB0aGUgZXJyb3IuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjQuNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuNiI+NC42LjwvYT4gPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLXJlbW92ZSIgaWQ9ImNtZC1wcm9wLXZhbHVlLXJlbW92ZSI+Q01EIDU6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX1JFTU9WRTwvYT48L2gxPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xLTM8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUFJPUF9WQUxVRV9SRU1PVkU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBST1BfSUQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlZBTFVFPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjYucC4xIj5SZW1vdmUgdmFsdWUgZnJvbSBwcm9wZXJ0eSBjb21tYW5kLiBJbnN0cnVjdHMgdGhlIE5DUCB0byByZW1vdmUgdGhlIGdpdmVuIHZhbHVlIGZyb20gYSBsaXN0LW9yaWVudGVkIHByb3BlcnR5LCB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBpdGVtcyBpbiB0aGUgbGlzdC4gVGhlIHJlc3VsdGluZyBvcmRlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBpcyBkZWZpbmVkIGJ5IHRoZSBpbmRpdmlkdWFsIHByb3BlcnR5IGJlaW5nIG9wZXJhdGVkIG9uLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNi5wLjIiPk5vdGUgdGhhdCB0aGlzIGNvbW1hbmQgb3BlcmF0ZXMgPGVtPmJ5IHZhbHVlPC9lbT4sIG5vdCBieSBpbmRleCEgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNi5wLjMiPlRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPiwgZm9sbG93ZWQgYnkgdGhlIHZhbHVlIHRvIGJlIHJlbW92ZWQuIFRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIHZhbHVlIGlzIGRlZmluZWQgYnkgdGhlIHByb3BlcnR5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNi5wLjQiPklmIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IDxzYW1wPlBST1BfSUQ8L3NhbXA+IGNvbnNpc3RzIG9mIGEgc2luZ2xlIHN0cnVjdHVyZSBlbmNsb3NlZCBieSBhbiBhcnJheSAoPHNhbXA+QSh0KC4uLikpPC9zYW1wPiksIHRoZW4gdGhlIGNvbnRlbnRzIG9mIDxzYW1wPlZBTFVFPC9zYW1wPiBNVVNUIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJ1Y3R1cmUgKDxzYW1wPi4uLjwvc2FtcD4pIHJhdGhlciB0aGFuIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSB3aG9sZSBpdGVtICg8c2FtcD50KC4uLik8L3NhbXA+KS4gIFNwZWNpZmljYWxseSwgdGhlIGxlbmd0aCBvZiB0aGUgc3RydWN0dXJlIE1VU1QgTk9UIGJlIHByZXBlbmRlZCB0byA8c2FtcD5WQUxVRTwvc2FtcD4uIFRoaXMgaGVscHMgdG8gZWxpbWluYXRlIHJlZHVuZGFudCBkYXRhLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNi5wLjUiPklmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+IHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gdGhlIGdlbmVyYXRlZCBzdGF0dXMgY29kZSBmb3IgdGhlIGVycm9yLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjciPjQuNy48L2E+IDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1pcyIgaWQ9ImNtZC1wcm9wLXZhbHVlLWlzIj5DTUQgNjogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVfSVM8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkhFQURFUjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q01EX1BST1BfVkFMVUVfSVM8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBST1BfSUQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlZBTFVFPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjcucC4xIj5Qcm9wZXJ0eSB2YWx1ZSBub3RpZmljYXRpb24gY29tbWFuZC4gVGhpcyBjb21tYW5kIGNhbiBiZSBzZW50IGJ5IHRoZSBOQ1AgaW4gcmVzcG9uc2UgdG8gYSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhvc3QsIG9yIGl0IGNhbiBiZSBzZW50IGJ5IHRoZSBOQ1AgaW4gYW4gdW5zb2xpY2l0ZWQgZmFzaGlvbiB0byBub3RpZnkgdGhlIGhvc3Qgb2YgdmFyaW91cyBzdGF0ZSBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNy5wLjIiPlRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPiwgZm9sbG93ZWQgYnkgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjgiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjgiPjQuOC48L2E+IDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1pbnNlcnRlZCIgaWQ9ImNtZC1wcm9wLXZhbHVlLWluc2VydGVkIj5DTUQgNzogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVfSU5TRVJURUQ8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkhFQURFUjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q01EX1BST1BfVkFMVUVfSU5TRVJURUQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBST1BfSUQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlZBTFVFPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjgucC4xIj5Qcm9wZXJ0eSB2YWx1ZSBpbnNlcnRpb24gbm90aWZpY2F0aW9uIGNvbW1hbmQuIFRoaXMgY29tbWFuZCBjYW4gYmUgc2VudCBieSB0aGUgTkNQIGluIHJlc3BvbnNlIHRvIHRoZSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JTlNFUlQ8L3NhbXA+IGNvbW1hbmQsIG9yIGl0IGNhbiBiZSBzZW50IGJ5IHRoZSBOQ1AgaW4gYW4gdW5zb2xpY2l0ZWQgZmFzaGlvbiB0byBub3RpZnkgdGhlIGhvc3Qgb2YgdmFyaW91cyBzdGF0ZSBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuOC5wLjIiPlRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPiwgZm9sbG93ZWQgYnkgdGhlIHZhbHVlIHRoYXQgd2FzIGluc2VydGVkIGludG8gdGhlIGdpdmVuIHByb3BlcnR5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuOC5wLjMiPklmIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IDxzYW1wPlBST1BfSUQ8L3NhbXA+IGNvbnNpc3RzIG9mIGEgc2luZ2xlIHN0cnVjdHVyZSBlbmNsb3NlZCBieSBhbiBhcnJheSAoPHNhbXA+QSh0KC4uLikpPC9zYW1wPiksIHRoZW4gdGhlIGNvbnRlbnRzIG9mIDxzYW1wPlZBTFVFPC9zYW1wPiBNVVNUIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJ1Y3R1cmUgKDxzYW1wPi4uLjwvc2FtcD4pIHJhdGhlciB0aGFuIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSB3aG9sZSBpdGVtICg8c2FtcD50KC4uLik8L3NhbXA+KS4gIFNwZWNpZmljYWxseSwgdGhlIGxlbmd0aCBvZiB0aGUgc3RydWN0dXJlIE1VU1QgTk9UIGJlIHByZXBlbmRlZCB0byA8c2FtcD5WQUxVRTwvc2FtcD4uIFRoaXMgaGVscHMgdG8gZWxpbWluYXRlIHJlZHVuZGFudCBkYXRhLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuOC5wLjQiPlRoZSByZXN1bHRpbmcgb3JkZXIgb2YgaXRlbXMgaW4gdGhlIGxpc3QgaXMgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gcHJvcGVydHkuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjQuOSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuOSI+NC45LjwvYT4gPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLXJlbW92ZWQiIGlkPSJjbWQtcHJvcC12YWx1ZS1yZW1vdmVkIj5DTUQgODogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVfUkVNT1ZFRDwvYT48L2gxPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xLTM8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUFJPUF9WQUxVRV9SRU1PVkVEPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5QUk9QX0lEPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5WQUxVRTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC45LnAuMSI+UHJvcGVydHkgdmFsdWUgcmVtb3ZhbCBub3RpZmljYXRpb24gY29tbWFuZC4gVGhpcyBjb21tYW5kIGNhbiBiZSBzZW50IGJ5IHRoZSBOQ1AgaW4gcmVzcG9uc2UgdG8gdGhlIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX1JFTU9WRTwvc2FtcD4gY29tbWFuZCwgb3IgaXQgY2FuIGJlIHNlbnQgYnkgdGhlIE5DUCBpbiBhbiB1bnNvbGljaXRlZCBmYXNoaW9uIHRvIG5vdGlmeSB0aGUgaG9zdCBvZiB2YXJpb3VzIHN0YXRlIGNoYW5nZXMgYXN5bmNocm9ub3VzbHkuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC45LnAuMiI+Tm90ZSB0aGF0IHRoaXMgY29tbWFuZCBvcGVyYXRlcyA8ZW0+YnkgdmFsdWU8L2VtPiwgbm90IGJ5IGluZGV4ISA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC45LnAuMyI+VGhlIHBheWxvYWQgZm9yIHRoaXMgY29tbWFuZCBpcyB0aGUgcHJvcGVydHkgaWRlbnRpZmllciBlbmNvZGVkIGluIHRoZSBwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluIDxhIGhyZWY9IiNwYWNrZWQtdW5zaWduZWQtaW50ZWdlciI+U2VjdGlvbiAzLjI8L2E+LCBmb2xsb3dlZCBieSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjkucC40Ij5JZiB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIHByb3BlcnR5IHNwZWNpZmllZCBieSA8c2FtcD5QUk9QX0lEPC9zYW1wPiBjb25zaXN0cyBvZiBhIHNpbmdsZSBzdHJ1Y3R1cmUgZW5jbG9zZWQgYnkgYW4gYXJyYXkgKDxzYW1wPkEodCguLi4pKTwvc2FtcD4pLCB0aGVuIHRoZSBjb250ZW50cyBvZiA8c2FtcD5WQUxVRTwvc2FtcD4gTVVTVCBjb250YWluIHRoZSBjb250ZW50cyBvZiB0aGUgc3RydWN0dXJlICg8c2FtcD4uLi48L3NhbXA+KSByYXRoZXIgdGhhbiB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgd2hvbGUgaXRlbSAoPHNhbXA+dCguLi4pPC9zYW1wPikuICBTcGVjaWZpY2FsbHksIHRoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8gPHNhbXA+VkFMVUU8L3NhbXA+LiBUaGlzIGhlbHBzIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgZGF0YS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjkucC41Ij5UaGUgcmVzdWx0aW5nIG9yZGVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0IGlzIGRlZmluZWQgYnkgdGhlIGdpdmVuIHByb3BlcnR5LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjEwIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMCI+NC4xMC48L2E+IDxhIGhyZWY9IiNjbWQtcGVlayIgaWQ9ImNtZC1wZWVrIj5DTUQgMTg6IChIb3N0LSZndDtOQ1ApIENNRF9QRUVLPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjQ8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUEVFSzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+QUREUkVTUzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q09VTlQ8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMTAucC4xIj5UaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSBOQ1AgdG8gZmV0Y2ggdmFsdWVzIGZyb20gdGhlIFJBTSBvZiB0aGUgTkNQIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIFVwb24gc3VjY2VzcywgPHNhbXA+Q01EX1BFRUtfUkVUPC9zYW1wPiBpcyBzZW50IGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdC4gVXBvbiBmYWlsdXJlLCA8c2FtcD5QUk9QX0xBU1RfU1RBVFVTPC9zYW1wPiBpcyBlbWl0dGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGVycm9yIGluZGljYXRpb24uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMC5wLjIiPkR1ZSB0byB0aGUgbG93LWxldmVsIG5hdHVyZSBvZiB0aGlzIGNvbW1hbmQsIGNlcnRhaW4gZXJyb3IgY29uZGl0aW9ucyBtYXkgaW5kdWNlIHRoZSBOQ1AgdG8gcmVzZXQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMC5wLjMiPlRoZSBOQ1AgTUFZIHByZXZlbnQgY2VydGFpbiByZWdpb25zIG9mIG1lbW9yeSBmcm9tIGJlaW5nIGFjY2Vzc2VkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMTAucC40Ij5UaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuICBTZWUgPGEgaHJlZj0iI3NlY3VyaXR5LWNvbnNpZGVyYXRpb25zIj5TZWN0aW9uIDEzPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjEwLnAuNSI+VGhpcyBjb21tYW5kIHJlcXVpcmVzIHRoZSBjYXBhYmlsaXR5IDxzYW1wPkNBUF9QRUVLX1BPS0U8L3NhbXA+IHRvIGJlIHByZXNlbnQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjQuMTEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjExIj40LjExLjwvYT4gPGEgaHJlZj0iI2NtZC1wZWVrLXJldCIgaWQ9ImNtZC1wZWVrLXJldCI+Q01EIDE5OiAoTkNQLSZndDtIb3N0KSBDTURfUEVFS19SRVQ8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+NDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IRUFERVI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkNNRF9QRUVLX1JFVDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+QUREUkVTUzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q09VTlQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkJZVEVTPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjExLnAuMSI+VGhpcyBjb21tYW5kIGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiBtZW1vcnkgdGhhdCB3YXMgcmVxdWVzdGVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byA8c2FtcD5DTURfUEVFSzwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMS5wLjIiPlRoaXMgY29tbWFuZCByZXF1aXJlcyB0aGUgY2FwYWJpbGl0eSA8c2FtcD5DQVBfUEVFS19QT0tFPC9zYW1wPiB0byBiZSBwcmVzZW50LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjEyIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMiI+NC4xMi48L2E+IDxhIGhyZWY9IiNjbWQtcG9rZSIgaWQ9ImNtZC1wb2tlIj5DTUQgMjA6IChIb3N0LSZndDtOQ1ApIENNRF9QT0tFPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjQ8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUE9LRTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+QUREUkVTUzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q09VTlQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkJZVEVTPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjEyLnAuMSI+VGhpcyBjb21tYW5kIHdyaXRlcyB0aGUgYnl0ZXMgdG8gdGhlIHNwZWNpZmllZCBtZW1vcnkgYWRkcmVzcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMTIucC4yIj5EdWUgdG8gdGhlIGxvdy1sZXZlbCBuYXR1cmUgb2YgdGhpcyBjb21tYW5kLCBjZXJ0YWluIGVycm9yIGNvbmRpdGlvbnMgbWF5IGluZHVjZSB0aGUgTkNQIHRvIHJlc2V0LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMTIucC4zIj5UaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuICBTZWUgPGEgaHJlZj0iI3NlY3VyaXR5LWNvbnNpZGVyYXRpb25zIj5TZWN0aW9uIDEzPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjEyLnAuNCI+VGhpcyBjb21tYW5kIHJlcXVpcmVzIHRoZSBjYXBhYmlsaXR5IDxzYW1wPkNBUF9QRUVLX1BPS0U8L3NhbXA+IHRvIGJlIHByZXNlbnQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjQuMTMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjEzIj40LjEzLjwvYT4gPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLW11bHRpLWdldCIgaWQ9ImNtZC1wcm9wLXZhbHVlLW11bHRpLWdldCI+Q01EIDIxOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9NVUxUSV9HRVQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkEoaSk8L3NhbXA+PC9saT4KKyAgPGxpPlJlcXVpcmVkIENhcGFiaWxpdHk6IDxzYW1wPkNBUF9DTURfTVVMVEk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMy5wLjIiPkZldGNoIHRoZSB2YWx1ZSBvZiBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIG9uZSBjb21tYW5kLiBBcmd1bWVudHMgYXJlIGFuIGFycmF5IG9mIHByb3BlcnR5IElEcy4gSWYgYWxsIHByb3BlcnRpZXMgYXJlIGZldGNoZWQgc3VjY2Vzc2Z1bGx5LCBhIDxzYW1wPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3NhbXA+IGNvbW1hbmQgaXMgc2VudCBiYWNrIHRvIHRoZSBob3N0IGNvbnRhaW5pbmcgdGhlIHByb3BlcnR5aWQgYW5kIHZhbHVlIG9mIGVhY2ggZmV0Y2hlZCBwcm9wZXJ0eS4gVGhlIG9yZGVyIG9mIHRoZSByZXN1bHRzIGluIDxzYW1wPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3NhbXA+IG1hdGNoIHRoZSBvcmRlciBvZiBwcm9wZXJ0aWVzIGdpdmVuIGluIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0dFVDwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMy5wLjMiPkVycm9ycyBmZXRjaGluZyBpbmRpdmlkdWFsIHByb3BlcnRpZXMgYXJlIHJlZmxlY3RlZCBhcyBpbmRpY2F0aW5nIGEgY2hhbmdlIHRvIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+IGZvciB0aGF0IHByb3BlcnR5J3MgcGxhY2UuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMy5wLjQiPk5vdCBhbGwgcHJvcGVydGllcyBjYW4gYmUgZmV0Y2hlZCB1c2luZyB0aGlzIG1ldGhvZC4gQXMgYSBnZW5lcmFsIHJ1bGUgb2YgdGh1bWIsIGFueSBwcm9wZXJ0eSB0aGF0IGJsb2NrcyB3aGVuIGdldHRpbmcgd2lsbCBmYWlsIGZvciB0aGF0IGluZGl2aWR1YWwgcHJvcGVydHkgd2l0aCA8c2FtcD5TVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QPC9zYW1wPi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNC4xNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMTQiPjQuMTQuPC9hPiA8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtbXVsdGktc2V0IiBpZD0iY21kLXByb3AtdmFsdWUtbXVsdGktc2V0Ij5DTUQgMjI6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5Bcmd1bWVudC1FbmNvZGluZzogPHNhbXA+QShpRCk8L3NhbXA+PC9saT4KKyAgPGxpPlJlcXVpcmVkIENhcGFiaWxpdHk6IDxzYW1wPkNBUF9DTURfTVVMVEk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUFJPUF9WQUxVRV9NVUxUSV9TRVQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlByb3BlcnR5L1ZhbHVlIFBhaXJzPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjE0LnAuMiI+V2l0aCBlYWNoIHByb3BlcnR5L3ZhbHVlIHBhaXIgYmVpbmc6IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkxFTkdUSDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UFJPUF9JRDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UFJPUF9WQUxVRTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xNC5wLjMiPlRoaXMgY29tbWFuZCBzZXRzIHRoZSB2YWx1ZSBvZiBzZXZlcmFsIHByb3BlcnRpZXMgYXQgb25jZSBpbiB0aGUgZ2l2ZW4gb3JkZXIuIFRoZSBzZXR0aW5nIG9mIHByb3BlcnRpZXMgc3RvcHMgYXQgdGhlIGZpcnN0IGVycm9yLCBpZ25vcmluZyBhbnkgbGF0ZXIgcHJvcGVydGllcy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjE0LnAuNCI+VGhlIHJlc3VsdCBvZiB0aGlzIGNvbW1hbmQgaXMgZ2VuZXJhbGx5IDxzYW1wPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3NhbXA+IHVubGVzcyAoZm9yIGV4YW1wbGUpIGEgcGFyc2luZyBlcnJvciBoYXMgb2NjdXJlZCAoaW4gd2hpY2ggY2FzZSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4gZm9yIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+IHdvdWxkIGJlIHRoZSByZXN1bHQpLiBUaGUgb3JkZXIgb2YgdGhlIHJlc3VsdHMgaW4gPHNhbXA+Q01EX1BST1BfVkFMVUVTX0FSRTwvc2FtcD4gbWF0Y2ggdGhlIG9yZGVyIG9mIHByb3BlcnRpZXMgZ2l2ZW4gaW4gPHNhbXA+Q01EX1BST1BfVkFMVUVfTVVMVElfU0VUPC9zYW1wPi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjE0LnAuNSI+U2luY2UgdGhlIHByb2Nlc3Npbmcgb2YgcHJvcGVydGllcyB0byBzZXQgc3RvcHMgYXQgdGhlIGZpcnN0IGVycm9yLCB0aGUgcmVzdWx0aW5nIDxzYW1wPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3NhbXA+IGNhbiBjb250YWluIGZld2VyIGl0ZW1zIHRoYW4gdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcHJvcGVydGllcyB0byBzZXQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xNC5wLjYiPk5vdCBhbGwgcHJvcGVydGllcyBjYW4gYmUgc2V0IHVzaW5nIHRoaXMgbWV0aG9kLiBBcyBhIGdlbmVyYWwgcnVsZSBvZiB0aHVtYiwgYW55IHByb3BlcnR5IHRoYXQgYmxvY2tzIHdoZW4gc2V0dGluZyB3aWxsIGZhaWwgZm9yIHRoYXQgaW5kaXZpZHVhbCBwcm9wZXJ0eSB3aXRoIDxzYW1wPlNUQVRVU19JTlZBTElEX0NPTU1BTkRfRk9SX1BST1A8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjE1Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xNSI+NC4xNS48L2E+IDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZXMtYXJlIiBpZD0iY21kLXByb3AtdmFsdWVzLWFyZSI+Q01EIDIzOiAoTkNQLSZndDtIb3N0KSBDTURfUFJPUF9WQUxVRVNfQVJFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkFyZ3VtZW50LUVuY29kaW5nOiA8c2FtcD5BKGlEKTwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgQ2FwYWJpbGl0eTogPHNhbXA+Q0FQX0NNRF9NVUxUSTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IRUFERVI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlByb3BlcnR5L1ZhbHVlIFBhaXJzPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjE1LnAuMiI+V2l0aCBlYWNoIHByb3BlcnR5L3ZhbHVlIHBhaXIgYmVpbmc6IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkxFTkdUSDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UFJPUF9JRDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UFJPUF9WQUxVRTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xNS5wLjMiPlRoaXMgY29tbWFuZCBpcyBlbWl0dGVkIGJ5IHRoZSBOQ1AgYXMgdGhlIHJlc3BvbnNlIHRvIGJvdGggdGhlIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVDwvc2FtcD4gYW5kIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVDwvc2FtcD4gY29tbWFuZHMuIEl0IGlzIHJvdWdobHkgYW5hbG9nb3VzIHRvIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lTPC9zYW1wPiwgZXhjZXB0IHRoYXQgaXQgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBwcm9wZXJ0eS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjE1LnAuNCI+VGhpcyBjb21tYW5kIFNIT1VMRCBOT1QgYmUgZW1pdHRlZCBhc3luY2hyb25vdXNseSwgb3IgaW4gcmVzcG9uc2UgdG8gYW55IGNvbW1hbmQgb3RoZXIgdGhhbiA8c2FtcD5DTURfUFJPUF9WQUxVRV9NVUxUSV9HRVQ8L3NhbXA+IG9yIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVDwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xNS5wLjUiPlRoZSBhcmd1bWVudHMgYXJlIGEgbGlzdCBvZiBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdGhlIGVtaXR0ZWQgcHJvcGVydHkgYW5kIHRoZSBhc3NvY2lhdGVkIHZhbHVlLiBUaGVzZSBhcmUgcHJlc2VudGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIGdpdmVuIGluIHRoZSBhc3NvY2lhdGVkIGluaXRpYXRpbmcgY29tbWFuZC4gSW4gY2FzZXMgd2hlcmUgZ2V0dGluZyBvciBzZXR0aW5nIGEgc3BlY2lmaWMgcHJvcGVydHkgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsIHRoZSBhc3NvY2lhdGVkIHNsb3QgaW4gdGhpcyBjb21tYW5kIHdpbGwgZGVzY3JpYmUgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41Ij41LjwvYT4gPGEgaHJlZj0iI3Byb3BlcnRpZXMiIGlkPSJwcm9wZXJ0aWVzIj5Qcm9wZXJ0aWVzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS5wLjEiPlNwaW5lbCBpcyBsYXJnZWx5IGEgcHJvcGVydHktYmFzZWQgcHJvdG9jb2wsIHNpbWlsYXIgdG8gcmVwcmVzZW50YXRpb25hbCBzdGF0ZSB0cmFuc2ZlciAoUkVTVCksIHdpdGggYSBwcm9wZXJ0eSBkZWZpbmVkIGZvciBldmVyeSBhdHRyaWJ1dGUgdGhhdCBhbiBPUyBuZWVkcyB0byBjcmVhdGUsIHJlYWQsIHVwZGF0ZSBvciBkZWxldGUgaW4gdGhlIGZ1bmN0aW9uIG9mIGFuIElQdjYgaW50ZXJmYWNlLiBUaGUgaW5zcGlyYXRpb24gb2YgdGhpcyBhcHByb2FjaCB3YXMgbWVtb3J5LW1hcHBlZCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHBlcmlwaGVyYWxzLiBUaGUgZ29hbCBpcyB0byBhdm9pZCwgYXMgbXVjaCBhcyBwb3NzaWJsZSwgdGhlIHVzZSBvZiBsYXJnZSBjb21wbGljYXRlZCBzdHJ1Y3R1cmVzIGFuZC9vciBtZXRob2QgYXJndW1lbnQgbGlzdHMuIFRoZSByZWFzb24gZm9yIGF2b2lkaW5nIHRoZXNlIGlzIGJlY2F1c2UgdGhleSBoYXZlIGEgdGVuZGVuY3kgdG8gY2hhbmdlLCBlc3BlY2lhbGx5IGVhcmx5IGluIGRldmVsb3BtZW50LiBBZGRpbmcgb3IgcmVtb3ZpbmcgYSBwcm9wZXJ0eSBmcm9tIGEgc3RydWN0dXJlIGNhbiByZW5kZXIgdGhlIGVudGlyZSBwcm90b2NvbCBpbmNvbXBhdGlibGUuIEJ5IHVzaW5nIHByb3BlcnRpZXMsIHlvdSBzaW1wbHkgZXh0ZW5kIHRoZSBwcm90b2NvbCB3aXRoIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS5wLjIiPkFsbW9zdCBhbGwgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgcHJvcGVydGllcy4gTW9zdCBuZXcgZmVhdHVyZXMgdGhhdCBhcmUgaW5pdGlhbGx5IHByb3Bvc2VkIGFzIGNvbW1hbmRzIGNhbiBiZSBhZGFwdGVkIHRvIGJlIHByb3BlcnR5LWJhc2VkIGluc3RlYWQuIE5vdGFibGUgZXhjZXB0aW9ucyBpbmNsdWRlICJIb3N0IEJ1ZmZlciBPZmZsb2FkIiAoPGEgaHJlZj0iI2ZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZCI+U2VjdGlvbiA5PC9hPikgYW5kICJOZXR3b3JrIFNhdmUiICg8YSBocmVmPSIjZmVhdHVyZS1uZXR3b3JrLXNhdmUiPlNlY3Rpb24gODwvYT4pLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUucC4zIj5JbiBTcGluZWwsIHByb3BlcnRpZXMgYXJlIGtleWVkIGJ5IGFuIHVuc2lnbmVkIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyLDA5NywxNTEgKFNlZSA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPikuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMSI+NS4xLjwvYT4gPGEgaHJlZj0iI3Byb3BlcnR5LW1ldGhvZHMiIGlkPSJwcm9wZXJ0eS1tZXRob2RzIj5Qcm9wZXJ0eSBNZXRob2RzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4xLnAuMSI+UHJvcGVydGllcyBtYXkgc3VwcG9ydCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIG1ldGhvZHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+VkFMVUVfR0VUPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWdldCI+U2VjdGlvbiA0LjM8L2E+KTwvbGk+CisgIDxsaT48c2FtcD5WQUxVRV9TRVQ8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtc2V0Ij5TZWN0aW9uIDQuNDwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPlZBTFVFX0lOU0VSVDwvc2FtcD4gICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtaW5zZXJ0Ij5TZWN0aW9uIDQuNTwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPlZBTFVFX1JFTU9WRTwvc2FtcD4gICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtcmVtb3ZlIj5TZWN0aW9uIDQuNjwvYT4pPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4xLnAuMyI+QWRkaXRpb25hbGx5LCB0aGUgTkNQIGNhbiBzZW5kIHVwZGF0ZXMgdG8gdGhlIGhvc3QgKGVpdGhlciBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5KSB0aGF0IGluZm9ybSB0aGUgaG9zdCBhYm91dCBjaGFuZ2VzIHRvIHNwZWNpZmljIHByb3BlcnRpZXM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+VkFMVUVfSVM8L3NhbXA+ICAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWlzIj5TZWN0aW9uIDQuNzwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPlZBTFVFX0lOU0VSVEVEPC9zYW1wPiAgKDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1pbnNlcnRlZCI+U2VjdGlvbiA0Ljg8L2E+KTwvbGk+CisgIDxsaT48c2FtcD5WQUxVRV9SRU1PVkVEPC9zYW1wPiAgKDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1yZW1vdmVkIj5TZWN0aW9uIDQuOTwvYT4pPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMiI+NS4yLjwvYT4gPGEgaHJlZj0iI3Byb3BlcnR5LXR5cGVzIiBpZD0icHJvcGVydHktdHlwZXMiPlByb3BlcnR5IFR5cGVzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4yLnAuMSI+Q29uY2VwdHVhbGx5LCB0aGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHR5cGVzIG9mIHByb3BlcnRpZXM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+U2luZ2xlLXZhbHVlIHByb3BlcnRpZXM8L2xpPgorICA8bGk+TXVsdGlwbGUtdmFsdWUgKEFycmF5KSBwcm9wZXJ0aWVzPC9saT4KKyAgPGxpPlN0cmVhbSBwcm9wZXJ0aWVzPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMi4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4yLjEiPjUuMi4xLjwvYT4gPGEgaHJlZj0iI3NpbmdsZXZhbHVlLXByb3BlcnRpZXMiIGlkPSJzaW5nbGV2YWx1ZS1wcm9wZXJ0aWVzIj5TaW5nbGUtVmFsdWUgUHJvcGVydGllczwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMi4xLnAuMSI+U2luZ2xlLXZhbHVlIHByb3BlcnRpZXMgYXJlIHByb3BlcnRpZXMgdGhhdCBoYXZlIGEgc2ltcGxlIHJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIHZhbHVlLiBFeGFtcGxlcyB3b3VsZCBiZTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DdXJyZW50IHJhZGlvIGNoYW5uZWwgKFJlcHJlc2VudGVkIGFzIGFuIHVuc2lnbmVkIDgtYml0IGludGVnZXIpPC9saT4KKyAgPGxpPk5ldHdvcmsgbmFtZSAoUmVwcmVzZW50ZWQgYXMgYSBVVEYtOCBlbmNvZGVkIHN0cmluZyk8L2xpPgorICA8bGk+ODAyLjE1LjQgUEFOIElEIChSZXByZXNlbnRlZCBhcyBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlcik8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjIuMS5wLjMiPlRoZSB2YWxpZCBvcGVyYXRpb25zIG9uIHRoZXNlIHNvcnRzIG9mIHByb3BlcnRpZXMgYXJlIDxzYW1wPkdFVDwvc2FtcD4gYW5kIDxzYW1wPlNFVDwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMi4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4yLjIiPjUuMi4yLjwvYT4gPGEgaHJlZj0iI211bHRpcGxldmFsdWUtcHJvcGVydGllcyIgaWQ9Im11bHRpcGxldmFsdWUtcHJvcGVydGllcyI+TXVsdGlwbGUtVmFsdWUgUHJvcGVydGllczwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMi4yLnAuMSI+TXVsdGlwbGUtVmFsdWUgUHJvcGVydGllcyBoYXZlIG1vcmUgdGhhbiBvbmUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIEV4YW1wbGVzIHdvdWxkIGJlOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkxpc3Qgb2YgY2hhbm5lbHMgc3VwcG9ydGVkIGJ5IHRoZSByYWRpbyBoYXJkd2FyZS48L2xpPgorICA8bGk+TGlzdCBvZiBJUHY2IGFkZHJlc3NlcyBhc3NpZ25lZCB0byB0aGUgaW50ZXJmYWNlLjwvbGk+CisgIDxsaT5MaXN0IG9mIGNhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIE5DUC48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjIuMi5wLjMiPlRoZSB2YWxpZCBvcGVyYXRpb25zIG9uIHRoZXNlIHNvcnRzIG9mIHByb3BlcnRpZXMgYXJlIDxzYW1wPlZBTFVFX0dFVDwvc2FtcD4sIDxzYW1wPlZBTFVFX1NFVDwvc2FtcD4sIDxzYW1wPlZBTFVFX0lOU0VSVDwvc2FtcD4sIGFuZCA8c2FtcD5WQUxVRV9SRU1PVkU8L3NhbXA+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMi4yLnAuNCI+V2hlbiB0aGUgdmFsdWUgaXMgZmV0Y2hlZCB1c2luZyA8c2FtcD5WQUxVRV9HRVQ8L3NhbXA+LCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIHZhbHVlcyBpbiB0aGUgbGlzdC4gSWYgdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgZm9yIGFuIGluZGl2aWR1YWwgaXRlbSBpbiB0aGUgbGlzdCBpcyBub3QgZGVmaW5lZCBieSB0aGUgdHlwZSB0aGVuIGVhY2ggaXRlbSByZXR1cm5lZCBpbiB0aGUgbGlzdCBpcyBwcmVwZW5kZWQgd2l0aCBhIGxlbmd0aCAoU2VlIDxhIGhyZWY9IiNhcnJheXMiPlNlY3Rpb24gMy41PC9hPikuIFRoZSBvcmRlciBvZiB0aGUgcmV0dXJuZWQgaXRlbXMsIHVubGVzcyBleHBsaWNpdGx5IGRlZmluZWQgZm9yIHRoYXQgc3BlY2lmaWMgcHJvcGVydHksIGlzIHVuZGVmaW5lZC4gIDwvcD4KKzxwPjxzYW1wPlZBTFVFX1NFVDwvc2FtcD4gcHJvdmlkZXMgYSB3YXkgdG8gY29tcGxldGVseSByZXBsYWNlIGFsbCBwcmV2aW91cyB2YWx1ZXMuIENhbGxpbmcgPHNhbXA+VkFMVUVfU0VUPC9zYW1wPiB3aXRoIGFuIGVtcHR5IHZhbHVlIGVmZmVjdGl2ZWx5IGluc3RydWN0cyB0aGUgTkNQIHRvIGNsZWFyIHRoZSB2YWx1ZSBvZiB0aGF0IHByb3BlcnR5LiAgPC9wPgorPHA+PHNhbXA+VkFMVUVfSU5TRVJUPC9zYW1wPiBhbmQgPHNhbXA+VkFMVUVfUkVNT1ZFPC9zYW1wPiBwcm92aWRlIG1lY2hhbmlzbXMgZm9yIHRoZSBpbnNlcnRpb24gb3IgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIGl0ZW1zIDxlbT5ieSB2YWx1ZTwvZW0+LiBUaGUgcGF5bG9hZCBmb3IgdGhlc2UgY29tbWFuZHMgaXMgYSBwbGFpbiBzaW5nbGUgdmFsdWUuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMi4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4yLjMiPjUuMi4zLjwvYT4gPGEgaHJlZj0iI3N0cmVhbS1wcm9wZXJ0aWVzIiBpZD0ic3RyZWFtLXByb3BlcnRpZXMiPlN0cmVhbSBQcm9wZXJ0aWVzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4yLjMucC4xIj5TdHJlYW0gcHJvcGVydGllcyBhcmUgc3BlY2lhbCBwcm9wZXJ0aWVzIHJlcHJlc2VudGluZyBzdHJlYW1zIG9mIGRhdGEuIEV4YW1wbGVzIHdvdWxkIGJlOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPk5ldHdvcmsgcGFja2V0IHN0cmVhbSAoPGEgaHJlZj0iI3Byb3Atc3RyZWFtLW5ldCI+U2VjdGlvbiA1LjYuMzwvYT4pPC9saT4KKyAgPGxpPlJhdyBwYWNrZXQgc3RyZWFtICg8YSBocmVmPSIjcHJvcC1zdHJlYW0tcmF3Ij5TZWN0aW9uIDUuNi4yPC9hPik8L2xpPgorICA8bGk+RGVidWcgbWVzc2FnZSBzdHJlYW0gKDxhIGhyZWY9IiNwcm9wLXN0cmVhbS1kZWJ1ZyI+U2VjdGlvbiA1LjYuMTwvYT4pPC9saT4KKyAgPGxpPk5ldHdvcmsgQmVhY29uIHN0cmVhbSAoPGEgaHJlZj0iI3Byb3AtbWFjLXNjYW4tYmVhY29uIj5TZWN0aW9uIDUuOC40PC9hPik8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjIuMy5wLjMiPkFsbCBzdWNoIHByb3BlcnRpZXMgZW1pdCBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5IHVzaW5nIHRoZSA8c2FtcD5WQUxVRV9JUzwvc2FtcD4gY29tbWFuZCwgc2VudCBmcm9tIHRoZSBOQ1AgdG8gdGhlIGhvc3QuIEZvciBleGFtcGxlLCBhcyBJUHY2IHRyYWZmaWMgaXMgcmVjZWl2ZWQgYnkgdGhlIE5DUCwgdGhlIElQdjYgcGFja2V0cyBhcmUgc2VudCB0byB0aGUgaG9zdCBieSB3YXkgb2YgYXN5bmNocm9ub3VzIDxzYW1wPlZBTFVFX0lTPC9zYW1wPiBub3RpZmljYXRpb25zLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMi4zLnAuNCI+U29tZSBvZiB0aGVzZSBwcm9wZXJ0aWVzIGFsc28gc3VwcG9ydCB0aGUgaG9zdCBzZW5kIGRhdGEgYmFjayB0byB0aGUgTkNQLiBGb3IgZXhhbXBsZSwgdGhpcyBpcyBob3cgdGhlIGhvc3Qgc2VuZHMgSVB2NiB0cmFmZmljIHRvIHRoZSBOQ1AuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4yLjMucC41Ij5UaGVzZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGdlbmVyYWxseSBkbyBub3Qgc3VwcG9ydCA8c2FtcD5WQUxVRV9HRVQ8L3NhbXA+LCBhcyBpdCBpcyBtZWFuaW5nbGVzcy4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4zIj41LjMuPC9hPiA8YSBocmVmPSIjcHJvcGVydHktbnVtYmVyaW5nIiBpZD0icHJvcGVydHktbnVtYmVyaW5nIj5Qcm9wZXJ0eSBOdW1iZXJpbmc8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjMucC4xIj5XaGlsZSB0aGUgbWFqb3JpdHkgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBuZXR3b3JrIGNvbm5lY3Rpdml0eSBhcmUgbmV0d29yayBwcm90b2NvbCBzcGVjaWZpYywgdGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyB0aGF0IGFyZSByZXF1aXJlZCBpbiBhbGwgaW1wbGVtZW50YXRpb25zLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMy5wLjIiPkZ1dHVyZSBwcm9wZXJ0eSBhbGxvY2F0aW9ucyBTSEFMTCBiZSBtYWRlIGZyb20gdGhlIGZvbGxvd2luZyBhbGxvY2F0aW9uIHBsYW46IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImxlZnQiPlByb3BlcnR5IElEIFJhbmdlPC90aD4KKyAgICAgIDx0aCBjbGFzcz0ibGVmdCI+RGVzY3JpcHRpb248L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPjAgLSAxMjc8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5SZXNlcnZlZCBmb3IgZnJlcXVlbnRseS11c2VkIHByb3BlcnRpZXM8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij4xMjggLSAxNSwzNTk8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5VbmFsbG9jYXRlZDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPjE1LDM2MCAtIDE2LDM4MzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlZlbmRvci1zcGVjaWZpYzwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPjE2LDM4NCAtIDEsOTk5LDk5OTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlVuYWxsb2NhdGVkPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+MiwwMDAsMDAwIC0gMiwwOTcsMTUxPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+RXhwZXJpbWVudGFsIHVzZSBvbmx5PC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjMucC4zIj5Gb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGRhdGEgZm9ybWF0IGVuY29kaW5nIHNob3J0aGFuZCB1c2VkIHRocm91Z2hvdXQgdGhpcyBkb2N1bWVudCwgc2VlIDxhIGhyZWY9IiNkYXRhLXBhY2tpbmciPlNlY3Rpb24gMzwvYT4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNCI+NS40LjwvYT4gPGEgaHJlZj0iI3Byb3BlcnR5LXNlY3Rpb25zIiBpZD0icHJvcGVydHktc2VjdGlvbnMiPlByb3BlcnR5IFNlY3Rpb25zPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS40LnAuMSI+VGhlIGN1cnJlbnRseSBhc3NpZ25lZCBwcm9wZXJ0aWVzIGFyZSBicm9rZW4gdXAgaW50byBzZXZlcmFsIHNlY3Rpb25zLCBlYWNoIHdpdGggcmVzZXJ2ZWQgcmFuZ2VzIG9mIHByb3BlcnR5IGlkZW50aWZpZXJzLiAgVGhlc2UgcmFuZ2VzIGFyZTogPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5OYW1lPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5SYW5nZSAoSW5jbHVzaXZlKTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+RG9jdW1lbnRhdGlvbjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5Db3JlPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4weDAwIC0gMHgxRiwgMHgxMDAwIC0gMHgxMUZGPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPGEgaHJlZj0iI3Byb3AtY29yZSI+U2VjdGlvbiA1LjU8L2E+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBIWTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHgyMCAtIDB4MkYsIDB4MTIwMCAtIDB4MTJGRjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxhIGhyZWY9IiNwcm9wLXBoeSI+U2VjdGlvbiA1Ljc8L2E+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk1BQzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHgzMCAtIDB4M0YsIDB4MTMwMCAtIDB4MTNGRjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxhIGhyZWY9IiNwcm9wLW1hYyI+U2VjdGlvbiA1Ljg8L2E+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk5FVDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHg0MCAtIDB4NEYsIDB4MTQwMCAtIDB4MTRGRjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxhIGhyZWY9IiNwcm9wLW5ldCI+U2VjdGlvbiA1Ljk8L2E+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlRlY2g8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjB4NTAgLSAweDVGLCAweDE1MDAgLSAweDE1RkY8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlRlY2hub2xvZ3ktc3BlY2lmaWM8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPklQdjY8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjB4NjAgLSAweDZGLCAweDE2MDAgLSAweDE2RkY8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8YSBocmVmPSIjcHJvcC1pcHY2Ij5TZWN0aW9uIDUuMTA8L2E+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlN0cmVhbTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHg3MCAtIDB4N0YsIDB4MTcwMCAtIDB4MTdGRjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxhIGhyZWY9IiNwcm9wLWNvcmUiPlNlY3Rpb24gNS41PC9hPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5EZWJ1ZzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHg0MDAwIC0gMHg0NDAwPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPGEgaHJlZj0iI3Byb3AtZGVidWciPlNlY3Rpb24gNS4xMTwvYT4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS40LnAuMiI+Tm90ZSB0aGF0IHNvbWUgb2YgdGhlIHByb3BlcnR5IHNlY3Rpb25zIGhhdmUgdHdvIHJlc2VydmVkIHJhbmdlczogYSBwcmltYXJ5IHJhbmdlICh3aGljaCBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGJ5dGUpIGFuZCBhbiBleHRlbmRlZCByYW5nZSAod2hpY2ggaXMgZW5jb2RlZCBhcyB0d28gYnl0ZXMpLiAgcHJvcGVydGllcyB3aGljaCBhcmUgdXNlZCBtb3JlIGZyZXF1ZW50bHkgYXJlIGdlbmVyYWxseSBhbGxvY2F0ZWQgZnJvbSB0aGUgZm9ybWVyIHJhbmdlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUiPjUuNS48L2E+IDxhIGhyZWY9IiNwcm9wLWNvcmUiIGlkPSJwcm9wLWNvcmUiPkNvcmUgUHJvcGVydGllczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xIj41LjUuMS48L2E+IDxhIGhyZWY9IiNwcm9wLWxhc3Qtc3RhdHVzIiBpZD0icHJvcC1sYXN0LXN0YXR1cyI+UFJPUCAwOiBQUk9QX0xBU1RfU1RBVFVTPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5FbmNvZGluZzogPHNhbXA+aTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9InJpZ2h0Ij5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xLTM8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9InJpZ2h0Ij5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5MQVNUX1NUQVRVUzwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEucC4yIj5EZXNjcmliZXMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBvcGVyYXRpb24uIEVuY29kZWQgYXMgYSBwYWNrZWQgdW5zaWduZWQgaW50ZWdlci4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMS5wLjMiPlRoaXMgcHJvcGVydHkgaXMgZW1pdHRlZCBvZnRlbiB0byBpbmRpY2F0ZSB0aGUgcmVzdWx0IHN0YXR1cyBvZiBwcmV0dHkgbXVjaCBhbnkgSG9zdC10by1OQ1Agb3BlcmF0aW9uLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xLnAuNCI+SXQgaXMgZW1pdHRlZCBhdXRvbWF0aWNhbGx5IGF0IE5DUCBzdGFydHVwIHdpdGggYSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNldCByZWFzb24uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEucC41Ij5TZWUgPGEgaHJlZj0iI3N0YXR1cy1jb2RlcyI+U2VjdGlvbiA2PC9hPiBmb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygc3RhdHVzIGNvZGVzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4yIj41LjUuMi48L2E+IDxhIGhyZWY9IiNwcm9wLXByb3RvY29sLXZlcnNpb24iIGlkPSJwcm9wLXByb3RvY29sLXZlcnNpb24iPlBST1AgMTogUFJPUF9QUk9UT0NPTF9WRVJTSU9OPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5FbmNvZGluZzogPHNhbXA+aWk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjEtMzwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk1BSk9SX1ZFUlNJT048L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk1JTk9SX1ZFUlNJT048L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4yLnAuMiI+RGVzY3JpYmVzIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGluZm9ybWF0aW9uLiBUaGlzIHByb3BlcnR5IGNvbnRhaW5zIGZvdXIgZmllbGRzLCBlYWNoIGVuY29kZWQgYXMgYSBwYWNrZWQgdW5zaWduZWQgaW50ZWdlcjogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5NYWpvciBWZXJzaW9uIE51bWJlcjwvbGk+CisgIDxsaT5NaW5vciBWZXJzaW9uIE51bWJlcjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4yLnAuNCI+VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgbWFqb3IgdmVyc2lvbiA0LCBtaW5vciB2ZXJzaW9uIDMgb2YgdGhpcyBwcm90b2NvbC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMi5wLjUiPlRoZSBob3N0IE1VU1Qgb25seSB1c2UgdGhpcyBwcm9wZXJ0eSBmcm9tIE5MSSAwLiBCZWhhdmlvciB3aGVuIHVzZWQgZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjIuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4yLjEiPjUuNS4yLjEuPC9hPiA8YSBocmVmPSIjbWFqb3ItdmVyc2lvbi1udW1iZXIiIGlkPSJtYWpvci12ZXJzaW9uLW51bWJlciI+TWFqb3IgVmVyc2lvbiBOdW1iZXI8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMi4xLnAuMSI+VGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgbGFyZ2UgYW5kIGluY29tcGF0aWJsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHByb3RvY29sIHZlcnNpb25zLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4yLjEucC4yIj5UaGUgaG9zdCBNVVNUIGVudGVyIGEgRkFVTFQgc3RhdGUgaWYgaXQgZG9lcyBub3QgZXhwbGljaXRseSBzdXBwb3J0IHRoZSBnaXZlbiBtYWpvciB2ZXJzaW9uIG51bWJlci4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjIuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4yLjIiPjUuNS4yLjIuPC9hPiA8YSBocmVmPSIjbWlub3ItdmVyc2lvbi1udW1iZXIiIGlkPSJtaW5vci12ZXJzaW9uLW51bWJlciI+TWlub3IgVmVyc2lvbiBOdW1iZXI8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMi4yLnAuMSI+VGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgc21hbGwgYnV0IG90aGVyd2lzZSBjb21wYXRpYmxlIGRpZmZlcmVuY2VzIGJldHdlZW4gcHJvdG9jb2wgdmVyc2lvbnMuIEEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgYWR2ZXJ0aXNlZCBtaW5vciB2ZXJzaW9uIG51bWJlciBhbmQgdGhlIG1pbm9yIHZlcnNpb24gdGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgU0hPVUxEIE5PVCBiZSBmYXRhbCB0byB0aGUgb3BlcmF0aW9uIG9mIHRoZSBob3N0LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4zIj41LjUuMy48L2E+IDxhIGhyZWY9IiNwcm9wLW5jcC12ZXJzaW9uIiBpZD0icHJvcC1uY3AtdmVyc2lvbiI+UFJPUCAyOiBQUk9QX05DUF9WRVJTSU9OPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPlU8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+TkNQX1ZFU0lPTl9TVFJJTkc8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4zLnAuMiI+Q29udGFpbnMgYSBzdHJpbmcgd2hpY2ggZGVzY3JpYmVzIHRoZSBmaXJtd2FyZSBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgTkNQLiBFbmNvZGVkIGFzIGEgemVyby10ZXJtaW5hdGVkIFVURi04IHN0cmluZy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMy5wLjMiPlRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBub3Qgc3RyaWN0bHkgZGVmaW5lZCwgYnV0IGl0IGlzIGludGVuZGVkIHRvIHByZXNlbnQgc2ltaWxhcmx5IHRvIHRoZSAiVXNlci1BZ2VudCIgc3RyaW5nIGZyb20gSFRUUC4gVGhlIFJFQ09NTUVOREVEIGZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGFzIGZvbGxvd3M6IDwvcD4KKzxwcmU+CitTVEFDSy1OQU1FL1NUQUNLLVZFUlNJT05bQlVJTERfSU5GT11bOyBPVEhFUl9JTkZPXTsgQlVJTERfREFURV9BTkRfVElNRQorPC9wcmU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjMucC40Ij5FeGFtcGxlczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT4KKyAgICA8c2FtcD5PcGVuVGhyZWFkLzEuMGQyNi0yNS1nYjY4NGM3ZjsgREVCVUc7IE1heSA5IDIwMTYgMTg6MjI6MDQ8L3NhbXA+CisgIDwvbGk+CisgIDxsaT4KKyAgICA8c2FtcD5Db25uZWN0SVAvMi4wYjEyNSBzMSBBTFBIQTsgU2VwdCAyNCAyMDE1IDIwOjQ5OjE5PC9zYW1wPgorICA8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMy5wLjYiPlRoZSBob3N0IE1VU1Qgb25seSB1c2UgdGhpcyBwcm9wZXJ0eSBmcm9tIE5MSSAwLiBCZWhhdmlvciB3aGVuIHVzZWQgZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNCI+NS41LjQuPC9hPiA8YSBocmVmPSIjcHJvcC1pbnRlcmZhY2UtdHlwZSIgaWQ9InByb3AtaW50ZXJmYWNlLXR5cGUiPlBST1AgMzogUFJPUF9JTlRFUkZBQ0VfVFlQRTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+RW5jb2Rpbmc6IDxzYW1wPmk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjEtMzwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5JTlRFUkZBQ0VfVFlQRTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjQucC4yIj5UaGlzIGludGVnZXIgaWRlbnRpZmllcyB3aGF0IHRoZSBuZXR3b3JrIHByb3RvY29sIGZvciB0aGlzIE5DUC4gIEN1cnJlbnRseSBkZWZpbmVkIHZhbHVlcyBhcmU6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+MDogQm9vdGxvYWRlcjwvbGk+CisgIDxsaT4yOiBaaWdCZWUgSVAoVE0pPC9saT4KKyAgPGxpPjM6IFRocmVhZChSKTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS40LnAuNCI+VGhlIGhvc3QgTVVTVCBlbnRlciBhIEZBVUxUIHN0YXRlIGlmIGl0IGRvZXMgbm90IHJlY29nbml6ZSB0aGUgcHJvdG9jb2wgZ2l2ZW4gYnkgdGhlIE5DUC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNSI+NS41LjUuPC9hPiA8YSBocmVmPSIjcHJvcC1pbnRlcmZhY2UtdmVuZG9yLWlkIiBpZD0icHJvcC1pbnRlcmZhY2UtdmVuZG9yLWlkIj5QUk9QIDQ6IFBST1BfSU5URVJGQUNFX1ZFTkRPUl9JRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+RW5jb2Rpbmc6IDxzYW1wPmk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjEtMzwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5WRU5ET1JfSUQ8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS41LnAuMiI+VmVuZG9yIGlkZW50aWZpZXIuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNS42Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjYiPjUuNS42LjwvYT4gPGEgaHJlZj0iI3Byb3AtY2FwcyIgaWQ9InByb3AtY2FwcyI+UFJPUCA1OiBQUk9QX0NBUFM8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Pbmx5PC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+QShpKTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xLTM8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPi4uLjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DQVBfMTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q0FQXzI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPi4uLjwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjYucC4yIj5EZXNjcmliZXMgdGhlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgb2YgdGhpcyBOQ1AuIEVuY29kZWQgYXMgYSBsaXN0IG9mIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2Vycy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuNi5wLjMiPkEgY2FwYWJpbGl0eSBpcyBkZWZpbmVkIGFzIGEgMjEtYml0IGludGVnZXIgdGhhdCBkZXNjcmliZXMgYSBzdWJzZXQgb2YgZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgdGhlIE5DUC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuNi5wLjQiPkN1cnJlbnRseSBkZWZpbmVkIHZhbHVlcyBhcmU6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+MTogPHNhbXA+Q0FQX0xPQ0s8L3NhbXA+PC9saT4KKyAgPGxpPjI6IDxzYW1wPkNBUF9ORVRfU0FWRTwvc2FtcD48L2xpPgorICA8bGk+MzogPHNhbXA+Q0FQX0hCTzwvc2FtcD46IEhvc3QgQnVmZmVyIE9mZmxvYWQuIFNlZSA8YSBocmVmPSIjZmVhdHVyZS1ob3N0LWJ1ZmZlci1vZmZsb2FkIj5TZWN0aW9uIDk8L2E+LjwvbGk+CisgIDxsaT40OiA8c2FtcD5DQVBfUE9XRVJfU0FWRTwvc2FtcD48L2xpPgorICA8bGk+NTogPHNhbXA+Q0FQX0NPVU5URVJTPC9zYW1wPjwvbGk+CisgIDxsaT42OiA8c2FtcD5DQVBfSkFNX0RFVEVDVDwvc2FtcD46IEphbW1pbmcgZGV0ZWN0aW9uLiBTZWUgPGEgaHJlZj0iI2ZlYXR1cmUtamFtLWRldGVjdCI+U2VjdGlvbiAxMDwvYT48L2xpPgorICA8bGk+NzogPHNhbXA+Q0FQX1BFRUtfUE9LRTwvc2FtcD46IFBFRUsvUE9LRSBkZWJ1Z2dpbmcgY29tbWFuZHMuPC9saT4KKyAgPGxpPjg6IDxzYW1wPkNBUF9XUklUQUJMRV9SQVdfU1RSRUFNPC9zYW1wPjogPHNhbXA+UFJPUF9TVFJFQU1fUkFXPC9zYW1wPiBpcyB3cml0YWJsZS48L2xpPgorICA8bGk+OTogPHNhbXA+Q0FQX0dQSU88L3NhbXA+OiBTdXBwb3J0IGZvciBHUElPIGFjY2Vzcy4gU2VlIDxhIGhyZWY9IiNmZWF0dXJlLWdwaW8tYWNjZXNzIj5TZWN0aW9uIDExPC9hPi48L2xpPgorICA8bGk+MTA6IDxzYW1wPkNBUF9UUk5HPC9zYW1wPjogU3VwcG9ydCBmb3IgdHJ1ZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24uIFNlZSA8YSBocmVmPSIjZmVhdHVyZS10cm5nIj5TZWN0aW9uIDEyPC9hPi48L2xpPgorICA8bGk+MTE6IDxzYW1wPkNBUF9DTURfTVVMVEk8L3NhbXA+OiBTdXBwb3J0IGZvciA8c2FtcD5DTURfUFJPUF9WQUxVRV9NVUxUSV9HRVQ8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtbXVsdGktZ2V0Ij5TZWN0aW9uIDQuMTM8L2E+KSwgPHNhbXA+Q01EX1BST1BfVkFMVUVfTVVMVElfU0VUPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLW11bHRpLXNldCI+U2VjdGlvbiA0LjE0PC9hPiwgYW5kIDxzYW1wPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWVzLWFyZSI+U2VjdGlvbiA0LjE1PC9hPikuPC9saT4KKyAgPGxpPjEyOiA8c2FtcD5DQVBfVU5TT0xfVVBEQVRFX0ZJTFRFUjwvc2FtcD46IFN1cHBvcnQgZm9yIDxzYW1wPlBST1BfVU5TT0xfVVBEQVRFX0ZJTFRFUjwvc2FtcD4gKDxhIGhyZWY9IiNwcm9wLXVuc29sLXVwZGF0ZS1maWx0ZXIiPlNlY3Rpb24gNS41LjEyPC9hPikgYW5kIDxzYW1wPlBST1BfVU5TT0xfVVBEQVRFX0xJU1Q8L3NhbXA+ICg8YSBocmVmPSIjcHJvcC11bnNvbC11cGRhdGUtbGlzdCI+U2VjdGlvbiA1LjUuMTM8L2E+KS48L2xpPgorICA8bGk+MTY6IDxzYW1wPkNBUF84MDJfMTVfNF8yMDAzPC9zYW1wPjwvbGk+CisgIDxsaT4xNzogPHNhbXA+Q0FQXzgwMl8xNV80XzIwMDY8L3NhbXA+PC9saT4KKyAgPGxpPjE4OiA8c2FtcD5DQVBfODAyXzE1XzRfMjAxMTwvc2FtcD48L2xpPgorICA8bGk+MjE6IDxzYW1wPkNBUF84MDJfMTVfNF9QSUI8L3NhbXA+PC9saT4KKyAgPGxpPjI0OiA8c2FtcD5DQVBfODAyXzE1XzRfMjQ1ME1IWl9PUVBTSzwvc2FtcD48L2xpPgorICA8bGk+MjU6IDxzYW1wPkNBUF84MDJfMTVfNF85MTVNSFpfT1FQU0s8L3NhbXA+PC9saT4KKyAgPGxpPjI2OiA8c2FtcD5DQVBfODAyXzE1XzRfODY4TUhaX09RUFNLPC9zYW1wPjwvbGk+CisgIDxsaT4yNzogPHNhbXA+Q0FQXzgwMl8xNV80XzkxNU1IWl9CUFNLPC9zYW1wPjwvbGk+CisgIDxsaT4yODogPHNhbXA+Q0FQXzgwMl8xNV80Xzg2OE1IWl9CUFNLPC9zYW1wPjwvbGk+CisgIDxsaT4yOTogPHNhbXA+Q0FQXzgwMl8xNV80XzkxNU1IWl9BU0s8L3NhbXA+PC9saT4KKyAgPGxpPjMwOiA8c2FtcD5DQVBfODAyXzE1XzRfODY4TUhaX0FTSzwvc2FtcD48L2xpPgorICA8bGk+NDg6IDxzYW1wPkNBUF9ST0xFX1JPVVRFUjwvc2FtcD48L2xpPgorICA8bGk+NDk6IDxzYW1wPkNBUF9ST0xFX1NMRUVQWTwvc2FtcD48L2xpPgorICA8bGk+NTI6IDxzYW1wPkNBUF9ORVRfVEhSRUFEXzFfMDwvc2FtcD48L2xpPgorICA8bGk+NTEyOiA8c2FtcD5DQVBfTUFDX1dISVRFTElTVDwvc2FtcD48L2xpPgorICA8bGk+NTEzOiA8c2FtcD5DQVBfTUFDX1JBVzwvc2FtcD48L2xpPgorICA8bGk+NTE0OiA8c2FtcD5DQVBfT09CX1NURUVSSU5HX0RBVEE8L3NhbXA+PC9saT4KKyAgPGxpPjEwMjQ6IDxzYW1wPkNBUF9USFJFQURfQ09NTUlTU0lPTkVSPC9zYW1wPjwvbGk+CisgIDxsaT4xMDI1OiA8c2FtcD5DQVBfVEhSRUFEX1RNRl9QUk9YWTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuNi5wLjYiPkFkZGl0aW9uYWxseSwgZnV0dXJlIGNhcGFiaWxpdHkgYWxsb2NhdGlvbnMgU0hBTEwgYmUgbWFkZSBmcm9tIHRoZSBmb2xsb3dpbmcgYWxsb2NhdGlvbiBwbGFuOiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPkNhcGFiaWxpdHkgUmFuZ2U8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPkRlc2NyaXB0aW9uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjAgLSAxMjc8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlJlc2VydmVkIGZvciBjb3JlIGNhcGFiaWxpdGllczwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MTI4IC0gMTUsMzU5PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPGVtPlVOQUxMT0NBVEVEPC9lbT4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MTUsMzYwIC0gMTYsMzgzPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5WZW5kb3Itc3BlY2lmaWM8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjE2LDM4NCAtIDEsOTk5LDk5OTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxlbT5VTkFMTE9DQVRFRDwvZW0+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjIsMDAwLDAwMCAtIDIsMDk3LDE1MTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RXhwZXJpbWVudGFsIHVzZSBvbmx5PC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNyI+NS41LjcuPC9hPiA8YSBocmVmPSIjcHJvcC1pbnRlcmZhY2UtY291bnQiIGlkPSJwcm9wLWludGVyZmFjZS1jb3VudCI+UFJPUCA2OiBQUk9QX0lOVEVSRkFDRV9DT1VOVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5JTlRFUkZBQ0VfQ09VTlQ8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS43LnAuMiI+RGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgY29uY3VycmVudCBpbnRlcmZhY2VzIHN1cHBvcnRlZCBieSB0aGlzIE5DUC4gIFNpbmNlIHRoZSBjb25jdXJyZW50IGludGVyZmFjZSBtZWNoYW5pc20gaXMgc3RpbGwgVEJELCB0aGlzIHZhbHVlIE1VU1QgYWx3YXlzIGJlIG9uZS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuNy5wLjMiPlRoaXMgdmFsdWUgaXMgZW5jb2RlZCBhcyBhbiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS43LnAuNCI+VGhlIGhvc3QgTVVTVCBvbmx5IHVzZSB0aGlzIHByb3BlcnR5IGZyb20gTkxJIDAuIEJlaGF2aW9yIHdoZW4gdXNlZCBmcm9tIG90aGVyIE5MSXMgaXMgdW5kZWZpbmVkLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuOCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS44Ij41LjUuOC48L2E+IDxhIGhyZWY9IiNwcm9wLXBvd2VyLXN0YXRlIiBpZD0icHJvcC1wb3dlci1zdGF0ZSI+UFJPUCA3OiBQUk9QX1BPV0VSX1NUQVRFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBPV0VSX1NUQVRFPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuOC5wLjIiPkRlc2NyaWJlcyB0aGUgY3VycmVudCBwb3dlciBzdGF0ZSBvZiB0aGUgTkNQLiBCeSB3cml0aW5nIHRvIHRoaXMgcHJvcGVydHkgeW91IGNhbiBtYW5hZ2UgdGhlIGxvd2VyIHN0YXRlIG9mIHRoZSBOQ1AuIEVudW1lcmF0aW9uIGlzIGVuY29kZWQgYXMgYSBzaW5nbGUgdW5zaWduZWQgYnl0ZS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuOC5wLjMiPkRlZmluZWQgdmFsdWVzIGFyZTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT4wOiA8c2FtcD5QT1dFUl9TVEFURV9PRkZMSU5FPC9zYW1wPjogTkNQIGlzIHBoeXNpY2FsbHkgcG93ZXJlZCBvZmYuICAoRW51bWVyYXRlZCBmb3IgY29tcGxldGVuZXNzIHNha2UsIG5vdCBleHBlY3RlZCBvbiB0aGUgd2lyZSk8L2xpPgorICA8bGk+MTogPHNhbXA+UE9XRVJfU1RBVEVfREVFUF9TTEVFUDwvc2FtcD46IEFsbW9zdCBldmVyeXRoaW5nIG9uIHRoZSBOQ1AgaXMgc2h1dCBkb3duLCBidXQgY2FuIHN0aWxsIGJlIHJlc3VtZWQgdmlhIGEgY29tbWFuZCBvciBpbnRlcnJ1cHQuPC9saT4KKyAgPGxpPjI6IDxzYW1wPlBPV0VSX1NUQVRFX1NUQU5EQlk8L3NhbXA+OiBOQ1AgaXMgaW4gdGhlIGxvd2VzdCBwb3dlciBzdGF0ZSB0aGF0IGNhbiBzdGlsbCBiZSBhd29rZW4gYnkgYW4gZXZlbnQgZnJvbSB0aGUgcmFkaW8gKGUuZy4gd2FpdGluZyBmb3IgYWxhcm0pPC9saT4KKyAgPGxpPjM6IDxzYW1wPlBPV0VSX1NUQVRFX0xPV19QT1dFUjwvc2FtcD46IE5DUCBpcyByZXNwb25zaXZlIChhbmQgcG9zc2libHkgY29ubmVjdGVkKSwgYnV0IHVzaW5nIGxlc3MgcG93ZXIuIChlLmcuICJTbGVlcHkiIGNoaWxkIG5vZGUpPC9saT4KKyAgPGxpPjQ6IDxzYW1wPlBPV0VSX1NUQVRFX09OTElORTwvc2FtcD46IE5DUCBpcyBmdWxseSBwb3dlcmVkLiAoZS5nLiAiUGFyZW50IiBub2RlKTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHA+CisgIDxhIGlkPSJDUkVGMiIgY2xhc3M9ImluZm8iPltDUkVGMl08c3BhbiBjbGFzcz0iaW5mbyI+UlE6IFdlIHNob3VsZCBjb25zaWRlciByZXZlcnNpbmcgdGhlIG51bWJlcmluZyBoZXJlIHNvIHRoYXQgMCBpcyBgUE9XRVJfU1RBVEVfT05MSU5FYC4gV2UgbWF5IGFsc28gd2FudCB0byBpbmNsdWRlIHNvbWUgZXh0cmEgdmFsdWVzIGJldHdlZW4gdGhlIGRlZmluZWQgdmFsdWVzIGZvciBmdXR1cmUgZXhwYW5zaW9uLCBzbyB0aGF0IHdlIGNhbiBwcmVzZXJ2ZSB0aGUgb3JkZXJlZCByZWxhdGlvbnNoaXAuIC0tPC9zcGFuPjwvYT4KKzwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjkiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuOSI+NS41LjkuPC9hPiA8YSBocmVmPSIjcHJvcC1od2FkZHIiIGlkPSJwcm9wLWh3YWRkciI+UFJPUCA4OiBQUk9QX0hXQUREUjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHkqPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+ODwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IV0FERFI8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS45LnAuMiI+VGhlIHN0YXRpYyBFVUk2NCBhZGRyZXNzIG9mIHRoZSBkZXZpY2UsIHVzZWQgYXMgYSBzZXJpYWwgbnVtYmVyLiAgVGhpcyB2YWx1ZSBpcyByZWFkLW9ubHksIGJ1dCBtYXkgYmUgd3JpdGFibGUgdW5kZXIgY2VydGFpbiB2ZW5kb3ItZGVmaW5lZCBjaXJjdW1zdGFuY2VzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuMTAiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMTAiPjUuNS4xMC48L2E+IDxhIGhyZWY9IiNwcm9wLWxvY2siIGlkPSJwcm9wLWxvY2siPlBST1AgOTogUFJPUF9MT0NLPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkxPQ0s8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMC5wLjIiPlByb3BlcnR5IGxvY2suIFVzZWQgZm9yIGdyb3VwaW5nIGNoYW5nZXMgdG8gc2V2ZXJhbCBwcm9wZXJ0aWVzIHRvIHRha2UgZWZmZWN0IGF0IG9uY2UsIG9yIHRvIHRlbXBvcmFyaWx5IHByZXZlbnQgdGhlIGF1dG9tYXRpYyB1cGRhdGluZyBvZiBwcm9wZXJ0eSB2YWx1ZXMuIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQsIHRoZSBleGVjdXRpb24gb2YgdGhlIE5DUCBpcyBlZmZlY3RpdmVseSBmcm96ZW4gdW50aWwgaXQgaXMgY2xlYXJlZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMTAucC4zIj5UaGlzIHByb3BlcnR5IGlzIG9ubHkgc3VwcG9ydGVkIGlmIHRoZSA8c2FtcD5DQVBfTE9DSzwvc2FtcD4gY2FwYWJpbGl0eSBpcyBwcmVzZW50LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMC5wLjQiPlVubGlrZSBtb3N0IG90aGVyIHByb3BlcnRpZXMsIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpcyBhbHJlYWR5IHRydWUgTVVTVCBmYWlsIHdpdGggYSBsYXN0IHN0YXR1cyBvZiA8c2FtcD5TVEFUVVNfQUxSRUFEWTwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xMSI+NS41LjExLjwvYT4gPGEgaHJlZj0iI3Byb3AtaG9zdC1wb3dlci1zdGF0ZSIgaWQ9InByb3AtaG9zdC1wb3dlci1zdGF0ZSI+UFJPUCAxMDogUFJPUF9IT1NUX1BPV0VSX1NUQVRFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+CisgIDxsaT5EZWZhdWx0IHZhbHVlOiA0PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPkhPU1RfUE9XRVJfU1RBVEU8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMS5wLjIiPkRlc2NyaWJlcyB0aGUgY3VycmVudCBwb3dlciBzdGF0ZSBvZiB0aGUgPGVtPmhvc3Q8L2VtPi4gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IHRoZSBob3N0IHRvIGluZm9ybSB0aGUgTkNQIHdoZW4gaXQgaGFzIGNoYW5nZWQgcG93ZXIgc3RhdGVzLiBUaGUgTkNQIGNhbiB0aGVuIHVzZSB0aGlzIHN0YXRlIHRvIGRldGVybWluZSB3aGljaCBwcm9wZXJ0aWVzIG5lZWQgYXN5bmNocm9ub3VzIHVwZGF0ZXMuIEVudW1lcmF0aW9uIGlzIGVuY29kZWQgYXMgYSBzaW5nbGUgdW5zaWduZWQgYnl0ZS4gVGhlc2Ugc3RhdGVzIGFyZSBkZWZpbmVkIGluIHNpbWlsYXIgdGVybXMgdG8gPHNhbXA+UFJPUF9QT1dFUl9TVEFURTwvc2FtcD4gKDxhIGhyZWY9IiNwcm9wLXBvd2VyLXN0YXRlIj5TZWN0aW9uIDUuNS44PC9hPikuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjExLnAuMyI+RGVmaW5lZCB2YWx1ZXMgYXJlOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjA6IDxzYW1wPkhPU1RfUE9XRVJfU1RBVEVfT0ZGTElORTwvc2FtcD46IEhvc3QgaXMgcGh5c2ljYWxseSBwb3dlcmVkIG9mZiBhbmQgY2Fubm90IGJlIHdva2VuIGJ5IHRoZSBOQ1AuIEFsbCBhc3luY2hyb25vdXMgY29tbWFuZHMgYXJlIHNxdWVsY2hlZC48L2xpPgorICA8bGk+MTogPHNhbXA+SE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQPC9zYW1wPjogVGhlIGhvc3QgaXMgaW4gYSBsb3cgcG93ZXIgc3RhdGUgd2hlcmUgaXQgY2FuIGJlIHdva2VuIGJ5IHRoZSBOQ1AgYnV0IHdpbGwgcG90ZW50aWFsbHkgcmVxdWlyZSBtb3JlIHRoYW4gdHdvIHNlY29uZHMgdG8gYmVjb21lIGZ1bGx5IHJlc3BvbnNpdmUuIFRoZSBOQ1AgTVVTVCBhdm9pZCBzZW5kaW5nIHVubmVjZXNzYXJ5IHByb3BlcnR5IHVwZGF0ZXMsIHN1Y2ggYXMgY2hpbGQgdGFibGUgdXBkYXRlcyBvciBub24tY3JpdGljYWwgbWVzc2FnZXMgb24gdGhlIGRlYnVnIHN0cmVhbS4gSWYgdGhlIE5DUCBuZWVkcyB0byB3YWtlIHRoZSBob3N0IGZvciB0cmFmZmljLCB0aGUgTkNQIE1VU1QgZmlyc3QgdGFrZSBhY3Rpb24gdG8gd2FrZSB0aGUgaG9zdC4gT25jZSB0aGUgTkNQIHNpZ25hbHMgdG8gdGhlIGhvc3QgdGhhdCBpdCBzaG91bGQgd2FrZSB1cCwgdGhlIE5DUCBNVVNUIHdhaXQgZm9yIHNvbWUgYWN0aXZpdHkgZnJvbSB0aGUgaG9zdCAoaW5kaWNhdGluZyB0aGF0IGl0IGlzIGZ1bGx5IGF3YWtlKSBiZWZvcmUgc2VuZGluZyBmcmFtZXMuPC9saT4KKyAgPGxpPjI6IDxzdHJvbmc+UkVTRVJWRUQ8L3N0cm9uZz4uIFRoaXMgdmFsdWUgTVVTVCBOT1QgYmUgc2V0IGJ5IHRoZSBob3N0LiBJZiByZWNlaXZlZCBieSB0aGUgTkNQLCB0aGUgTkNQIFNIT1VMRCBjb25zaWRlciB0aGlzIGFzIGEgc3lub255bSBvZiA8c2FtcD5IT1NUX1BPV0VSX1NUQVRFX0RFRVBfU0xFRVA8L3NhbXA+LjwvbGk+CisgIDxsaT4zOiA8c2FtcD5IT1NUX1BPV0VSX1NUQVRFX0xPV19QT1dFUjwvc2FtcD46IFRoZSBob3N0IGlzIGluIGEgbG93IHBvd2VyIHN0YXRlIHdoZXJlIGl0IGNhbiBiZSBpbW1lZGlhdGVseSB3b2tlbiBieSB0aGUgTkNQLiBUaGUgTkNQIFNIT1VMRCBhdm9pZCBzZW5kaW5nIHVubmVjZXNzYXJ5IHByb3BlcnR5IHVwZGF0ZXMsIHN1Y2ggYXMgY2hpbGQgdGFibGUgdXBkYXRlcyBvciBub24tY3JpdGljYWwgbWVzc2FnZXMgb24gdGhlIGRlYnVnIHN0cmVhbS48L2xpPgorICA8bGk+NDogPHNhbXA+SE9TVF9QT1dFUl9TVEFURV9PTkxJTkU8L3NhbXA+OiBUaGUgaG9zdCBpcyBhd2FrZSBhbmQgcmVzcG9uc2l2ZS4gTm8gc3BlY2lhbCBmaWx0ZXJpbmcgaXMgcGVyZm9ybWVkIGJ5IHRoZSBOQ1Agb24gYXN5bmNocm9ub3VzIHVwZGF0ZXMuPC9saT4KKyAgPGxpPkFsbCBvdGhlciB2YWx1ZXMgYXJlIDxzdHJvbmc+UkVTRVJWRUQ8L3N0cm9uZz4uIFRoZXkgTVVTVCBOT1QgYmUgc2V0IGJ5IHRoZSBob3N0LiBJZiByZWNlaXZlZCBieSB0aGUgTkNQLCB0aGUgTkNQIFNIT1VMRCBjb25zaWRlciB0aGUgdmFsdWUgYXMgYSBzeW5vbnltIG9mIDxzYW1wPkhPU1RfUE9XRVJfU1RBVEVfTE9XX1BPV0VSPC9zYW1wPi48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwPgorICA8YSBpZD0iQ1JFRjMiIGNsYXNzPSJpbmZvIj5bQ1JFRjNdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBXZSBzaG91bGQgY29uc2lkZXIgcmV2ZXJzaW5nIHRoZSBudW1iZXJpbmcgaGVyZSBzbyB0aGF0IDAgaXMgYFBPV0VSX1NUQVRFX09OTElORWAuIFdlIG1heSBhbHNvIHdhbnQgdG8gaW5jbHVkZSBzb21lIGV4dHJhIHZhbHVlcyBiZXR3ZWVuIHRoZSBkZWZpbmVkIHZhbHVlcyBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgc28gdGhhdCB3ZSBjYW4gcHJlc2VydmUgdGhlIG9yZGVyZWQgcmVsYXRpb25zaGlwLiAtLTwvc3Bhbj48L2E+Cis8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjExLnAuNiI+QWZ0ZXIgc2V0dGluZyB0aGlzIHBvd2VyIHN0YXRlLCBhbnkgZnVydGhlciBjb21tYW5kcyBmcm9tIHRoZSBob3N0IHRvIHRoZSBOQ1Agd2lsbCBjYXVzZSA8c2FtcD5IT1NUX1BPV0VSX1NUQVRFPC9zYW1wPiB0byBhdXRvbWF0aWNhbGx5IHJldmVydCB0byA8c2FtcD5IT1NUX1BPV0VSX1NUQVRFX09OTElORTwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjExLnAuNyI+V2hlbiB0aGUgaG9zdCBpcyBlbnRlcmluZyBhIGxvdy1wb3dlciBzdGF0ZSwgaXQgc2hvdWxkIHdhaXQgZm9yIHRoZSByZXNwb25zZSBmcm9tIHRoZSBOQ1AgYWNrbm93bGVkZ2luZyB0aGUgY29tbWFuZCAod2l0aCA8c2FtcD5DTURfVkFMVUVfSVM8L3NhbXA+KS4gIE9uY2UgdGhhdCBhY2tub3dsZWRnZW1lbnQgaXMgcmVjZWl2ZWQgdGhlIGhvc3QgbWF5IGVudGVyIHRoZSBsb3ctcG93ZXIgc3RhdGUuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjExLnAuOCI+SWYgdGhlIE5DUCBoYXMgdGhlIDxzYW1wPkNBUF9VTlNPTF9VUERBVEVfRklMVEVSPC9zYW1wPiBjYXBhYmlsaXR5LCBhbnkgdW5zb2xpY2l0ZWQgcHJvcGVydHkgdXBkYXRlcyBtYXNrZWQgYnkgPHNhbXA+UFJPUF9VTlNPTF9VUERBVEVfRklMVEVSPC9zYW1wPiBzaG91bGQgYmUgaG9ub3JlZCB3aGlsZSB0aGUgaG9zdCBpbmRpY2F0ZXMgaXQgaXMgaW4gYSBsb3ctcG93ZXIgc3RhdGUuIEFmdGVyIHJlc3VtaW5nIHRvIHRoZSA8c2FtcD5IT1NUX1BPV0VSX1NUQVRFX09OTElORTwvc2FtcD4gc3RhdGUsIHRoZSB2YWx1ZSBvZiA8c2FtcD5QUk9QX1VOU09MX1VQREFURV9GSUxURVI8L3NhbXA+IE1VU1QgYmUgdW5jaGFuZ2VkIGZyb20gdGhlIHZhbHVlIGFzc2lnbmVkIHByaW9yIHRvIHRoZSBob3N0IGluZGljYXRpbmcgaXQgd2FzIGVudGVyaW5nIGEgbG93LXBvd2VyIHN0YXRlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMS5wLjkiPlRoZSBob3N0IE1VU1Qgb25seSB1c2UgdGhpcyBwcm9wZXJ0eSBmcm9tIE5MSSAwLiBCZWhhdmlvciB3aGVuIHVzZWQgZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjEyIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjEyIj41LjUuMTIuPC9hPiA8YSBocmVmPSIjcHJvcC11bnNvbC11cGRhdGUtZmlsdGVyIiBpZD0icHJvcC11bnNvbC11cGRhdGUtZmlsdGVyIj5QUk9QIDQxMDQ6IFBST1BfVU5TT0xfVVBEQVRFX0ZJTFRFUjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5SZXF1aXJlZCBvbmx5IGlmIDxzYW1wPkNBUF9VTlNPTF9VUERBVEVfRklMVEVSPC9zYW1wPiBpcyBzZXQuPC9saT4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKEkpPC9zYW1wPjwvbGk+CisgIDxsaT5EZWZhdWx0IHZhbHVlOiBFbXB0eS48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMTIucC4yIj5Db250YWlucyBhIGxpc3Qgb2YgcHJvcGVydGllcyB3aGljaCBhcmUgPGVtPmV4Y2x1ZGVkPC9lbT4gZnJvbSBnZW5lcmF0aW5nIHVuc29saWNpdGVkIHZhbHVlIHVwZGF0ZXMuIFRoaXMgcHJvcGVydHkgTVVTVCBiZSBlbXB0eSBhZnRlciByZXNldC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMTIucC4zIj5JbiBvdGhlciB3b3JkcywgdGhlIGhvc3QgbWF5IG9wdC1vdXQgb2YgdW5zb2xpY2l0ZWQgcHJvcGVydHkgdXBkYXRlcyBmb3IgYSBzcGVjaWZpYyBwcm9wZXJ0eSBieSBhZGRpbmcgdGhhdCBwcm9wZXJ0eSBpZCB0byB0aGlzIGxpc3QuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEyLnAuNCI+SG9zdHMgU0hPVUxEIE5PVCBhZGQgcHJvcGVydGllcyB0byB0aGlzIGxpc3Qgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGluIDxzYW1wPlBST1BfVU5TT0xfVVBEQVRFX0xJU1Q8L3NhbXA+LiBJZiBzdWNoIHByb3BlcnRpZXMgYXJlIGFkZGVkLCB0aGUgTkNQIE1VU1QgaWdub3JlIHRoZSB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLiAgPC9wPgorPHA+CisgIDxhIGlkPSJDUkVGNCIgY2xhc3M9ImluZm8iPltDUkVGNF08c3BhbiBjbGFzcz0iaW5mbyI+UlE6IFRoZSBqdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgYmVoYXZpb3IgaXMgdG8gYXR0ZW1wdCB0byBhdm9pZCBwb3NzaWJsZSBmdXR1cmUgaW50ZXJvcCBwcm9ibGVtcyBieSBleHBsaWNpdGx5IG1ha2luZyBzdXJlIHRoYXQgdW5rbm93biBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkLiBTaW5jZSB1bmtub3duIHByb3BlcnRpZXMgd2lsbCBvYnZpb3VzbHkgbm90IGJlIGdlbmVyYXRpbmcgdW5zb2xpY2l0ZWQgdXBkYXRlcywgaXQgc2VlbXMgZmFpcmx5IGhhcm1sZXNzLiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgcHJpbnQgb3V0IGEgd2FybmluZyB0byB0aGUgZGVidWcgc3RyZWFtLiAgTm90ZSB0aGF0IHRoZSBlcnJvciBpcyBzdGlsbCBkZXRlY3RhYmxlOiBJZiB5b3UgVkFMVUVcX1NFVCB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLCB0aGUgcmVzdWx0aW5nIFZBTFVFXF9JUyB3b3VsZCBjb250YWluIG9ubHkgdGhlIHN1cHBvcnRlZCBwcm9wZXJ0aWVzIG9mIHRoYXQgc2V0KHNpbmNlIHRoZSB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzIHdvdWxkIGJlIGlnbm9yZWQpLiBJZiBhbiBpbXBsZW1lbnRhdGlvbiBjYXJlcyB0aGF0IG11Y2ggYWJvdXQgZ2V0dGluZyB0aGlzIHJpZ2h0IHRoZW4gaXQgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgaXQgY2hlY2tzIFBST1BcX1VOU09MXF9VUERBVEVcX0xJU1QgZmlyc3QuICAtLTwvc3Bhbj48L2E+Cis8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEyLnAuNiI+SW1wbGVtZW50YXRpb25zIG9mIHRoaXMgcHJvcGVydHkgYXJlIG9ubHkgUkVRVUlSRUQgdG8gc3VwcG9ydCBhbmQgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Q01EX1BST1BfVkFMVUVfR0VUPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWdldCI+U2VjdGlvbiA0LjM8L2E+KTwvbGk+CisgIDxsaT48c2FtcD5DTURfUFJPUF9WQUxVRV9TRVQ8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtc2V0Ij5TZWN0aW9uIDQuNDwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lTPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWlzIj5TZWN0aW9uIDQuNzwvYT4pPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEyLnAuOCI+SW1wbGVtZW50YXRpb25zIG9mIHRoaXMgcHJvcGVydHkgTUFZIG9wdGlvbmFsbHkgc3VwcG9ydCBhbmQgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Q01EX1BST1BfVkFMVUVfSU5TRVJUPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWluc2VydCI+U2VjdGlvbiA0LjU8L2E+KTwvbGk+CisgIDxsaT48c2FtcD5DTURfUFJPUF9WQUxVRV9SRU1PVkU8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtcmVtb3ZlIj5TZWN0aW9uIDQuNjwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lOU0VSVEVEPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWluc2VydGVkIj5TZWN0aW9uIDQuODwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBTFVFX1JFTU9WRUQ8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtcmVtb3ZlZCI+U2VjdGlvbiA0Ljk8L2E+KTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMi5wLjEwIj5Ib3N0IGltcGxlbWVudGF0aW9ucyB3aGljaCBhcmUgYWltaW5nIHRvIG1heGltaXplIHRoZWlyIGNvbXBhdGFiaWxpdHkgYWNyb3NzIGRpZmZlcmVudCBmaXJtd3JlIGltcGxlbWVudGF0aW9ucyBTSE9VTEQgTk9UIGFzc3VtZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBvcHRpb25hbCBjb21tYW5kcyBmb3IgdGhpcyBwcm9wZXJ0eS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMTIucC4xMSI+VGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgU0hBTEwgYmUgaW5kZXBlbmRlbnQgZm9yIGVhY2ggTkxJLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuMTMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMTMiPjUuNS4xMy48L2E+IDxhIGhyZWY9IiNwcm9wLXVuc29sLXVwZGF0ZS1saXN0IiBpZD0icHJvcC11bnNvbC11cGRhdGUtbGlzdCI+UFJPUCA0MTA1OiBQUk9QX1VOU09MX1VQREFURV9MSVNUPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlJlcXVpcmVkIG9ubHkgaWYgPHNhbXA+Q0FQX1VOU09MX1VQREFURV9GSUxURVI8L3NhbXA+IGlzIHNldC48L2xpPgorICA8bGk+VHlwZTogUmVhZC1Pbmx5PC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+QShJKTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMTMucC4yIj5Db250YWlucyBhIGxpc3Qgb2YgcHJvcGVydGllcyB3aGljaCBhcmUgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIHVuc29saWNpdGVkIHZhbHVlIHVwZGF0ZXMuIFRoaXMgbGlzdCBjYW4gYmUgdXNlZCB3aGVuIHBvcHVsYXRpbmcgPHNhbXA+UFJPUF9VTlNPTF9VUERBVEVfRklMVEVSPC9zYW1wPiB0byBkaXNhYmxlIGFsbCB1bnNvbGljaXRlZCBwcm9wZXJ0eSB1cGRhdGVzLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMy5wLjMiPlRoaXMgcHJvcGVydHkgaXMgaW50ZW5kZWQgdG8gZWZmZWN0aXZlbHkgYmVoYXZlIGFzIGEgY29uc3RhbnQgZm9yIGEgZ2l2ZW4gTkNQIGZpcm13YXJlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMy5wLjQiPk5vdGUgdGhhdCBub3QgYWxsIHByb3BlcnRpZXMgdGhhdCBzdXBwb3J0IHVuc29saWNpdGVkIHVwZGF0ZXMgbmVlZCB0byBiZSBsaXN0ZWQgaGVyZS4gU2NhbiByZXN1bHRzLCBmb3IgZXhhbXBsZSwgYXJlIG9ubHkgZ2VuZXJhdGVkIGR1ZSB0byBkaXJlY3QgYWN0aW9uIG9uIHRoZSBwYXJ0IG9mIHRoZSBob3N0LCBzbyB0aG9zZSBwcm9wZXJ0aWVzIE1VU1QgTk9UIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEzLnAuNSI+VGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgTUFZIGJlIGRpZmZlcmVudCBhY3Jvc3MgYXZhaWxhYmxlIE5MSXMuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNiI+NS42LjwvYT4gPGEgaHJlZj0iI3Byb3Atc3RyZWFtIiBpZD0icHJvcC1zdHJlYW0iPlN0cmVhbSBQcm9wZXJ0aWVzPC9hPjwvaDE+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNi4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS42LjEiPjUuNi4xLjwvYT4gPGEgaHJlZj0iI3Byb3Atc3RyZWFtLWRlYnVnIiBpZD0icHJvcC1zdHJlYW0tZGVidWciPlBST1AgMTEyOiBQUk9QX1NUUkVBTV9ERUJVRzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHktU3RyZWFtPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5VVEY4X0RBVEE8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi4xLnAuMiI+VGhpcyBwcm9wZXJ0eSBpcyBhIHN0cmVhbWluZyBwcm9wZXJ0eSwgbWVhbmluZyB0aGF0IHlvdSBjYW5ub3QgZXhwbGljaXRseSBmZXRjaCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4gVGhlIHN0cmVhbSBwcm92aWRlcyBodW1hbi1yZWFkYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWNoIG1heSBiZSBkaXNwbGF5ZWQgaW4gdGhlIGhvc3QgbG9ncy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMS5wLjMiPlRoZSBsb2NhdGlvbiBvZiBuZXdsaW5lIGNoYXJhY3RlcnMgaXMgbm90IGFzc3VtZWQgYnkgdGhlIGhvc3Q6IGl0IGlzIHRoZSBOQ1AncyByZXNwb25zaWJpbGl0eSB0byBpbnNlcnQgbmV3bGluZSBjaGFyYWN0ZXJzIHdoZXJlIG5lZWRlZCwganVzdCBsaWtlIHdpdGggYW55IG90aGVyIHRleHQgc3RyZWFtLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi4xLnAuNCI+VG8gcmVjZWl2ZSB0aGUgZGVidWdnaW5nIHN0cmVhbSwgeW91IHdhaXQgZm9yIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lTPC9zYW1wPiBjb21tYW5kcyBmb3IgdGhpcyBwcm9wZXJ0eSBmcm9tIHRoZSBOQ1AuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNi4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS42LjIiPjUuNi4yLjwvYT4gPGEgaHJlZj0iI3Byb3Atc3RyZWFtLXJhdyIgaWQ9InByb3Atc3RyZWFtLXJhdyI+UFJPUCAxMTM6IFBST1BfU1RSRUFNX1JBVzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlLVN0cmVhbTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmREPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4yPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZSQU1FX0RBVEFfTEVOPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GUkFNRV9EQVRBPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GUkFNRV9NRVRBREFUQTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjIucC4yIj5UaGlzIHN0cmVhbSBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSBvZiBzZW5kaW5nIGFuZCByZWNlaXZpbmcgcmF3IHBhY2tldHMgdG8gYW5kIGZyb20gdGhlIHJhZGlvLiBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBmcmFtZSBtZXRhZGF0YSBhbmQgZGF0YSBpcyBkZXBlbmRlbnQgb24gdGhlIE1BQyBhbmQgUEhZIGJlaW5nIHVzZWQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjIucC4zIj5UaGlzIHByb3BlcnR5IGlzIGEgc3RyZWFtaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoYXQgeW91IGNhbm5vdCBleHBsaWNpdGx5IGZldGNoIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LiBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdSB3YWl0IGZvciA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4gY29tbWFuZHMgd2l0aCB0aGlzIHByb3BlcnR5IGlkIGZyb20gdGhlIE5DUC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMi5wLjQiPkltcGxlbWVudGF0aW9ucyBtYXkgT1BUSU9OQUxMWSBzdXBwb3J0IHRoZSBhYmlsaXR5IHRvIHRyYW5zbWl0IGFyYml0cmFyeSByYXcgcGFja2V0cy4gU3VwcG9ydCBmb3IgdGhpcyBmZWF0dXJlIGlzIGluZGljYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhlIDxzYW1wPkNBUF9XUklUQUJMRV9SQVdfU1RSRUFNPC9zYW1wPiBjYXBhYmlsaXR5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi4yLnAuNSI+SWYgdGhlIGNhcGFiaWxpdHkgPHNhbXA+Q0FQX1dSSVRBQkxFX1JBV19TVFJFQU08L3NhbXA+IGlzIHNldCwgdGhlbiBwYWNrZXRzIHdyaXR0ZW4gdG8gdGhpcyBzdHJlYW0gd2l0aCA8c2FtcD5DTURfUFJPUF9WQUxVRV9TRVQ8L3NhbXA+IHdpbGwgYmUgc2VudCBvdXQgb3ZlciB0aGUgcmFkaW8uICBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIHVzZSB0aGUgcmFkaW8gZGlyZWN0bHksIHdpdGggdGhlIHN0YWNrIGJlaW5nIGltcGxlbWVudGVkIG9uIHRoZSBob3N0IGluc3RlYWQgb2YgdGhlIE5DUC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS42LjIuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi4yLjEiPjUuNi4yLjEuPC9hPiA8YSBocmVmPSIjZnJhbWUtbWV0YWRhdGEtZm9ybWF0IiBpZD0iZnJhbWUtbWV0YWRhdGEtZm9ybWF0Ij5GcmFtZSBNZXRhZGF0YSBGb3JtYXQ8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMi4xLnAuMSI+QW55IGRhdGEgcGFzdCB0aGUgZW5kIG9mIDxzYW1wPkZSQU1FX0RBVEFfTEVOPC9zYW1wPiBpcyBjb25zaWRlcmVkIG1ldGFkYXRhIGFuZCBpcyBPUFRJT05BTC4gRnJhbWUgbWV0YWRhdGEgTUFZIGJlIGVtcHR5IG9yIHBhcnRpYWxseSBzcGVjaWZpZWQuIFBhcnRpYWxseSBzcGVjaWZpZWQgbWV0YWRhdGEgTVVTVCBiZSBhY2NlcHRlZC4gRGVmYXVsdCB2YWx1ZXMgYXJlIHVzZWQgZm9yIGFsbCB1bnNwZWNpZmllZCBmaWVsZHMuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjIuMS5wLjIiPlRoZSBzYW1lIGdlbmVyYWwgZm9ybWF0IGlzIHVzZWQgZm9yIDxzYW1wPlBST1BfU1RSRUFNX1JBVzwvc2FtcD4sIDxzYW1wPlBST1BfU1RSRUFNX05FVDwvc2FtcD4sIGFuZCA8c2FtcD5QUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkU8L3NhbXA+LiBJdCBjYW4gYmUgdXNlZCBmb3IgZnJhbWVzIHNlbnQgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0IGFzIHdlbGwgYXMgZnJhbWVzIHNlbnQgZnJvbSB0aGUgaG9zdCB0byB0aGUgTkNQLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi4yLjEucC4zIj5UaGUgZnJhbWUgbWV0YWRhdGEgZmllbGQgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImxlZnQiPkZpZWxkPC90aD4KKyAgICAgIDx0aCBjbGFzcz0ibGVmdCI+RGVzY3JpcHRpb248L3RoPgorICAgICAgPHRoIGNsYXNzPSJsZWZ0Ij5UeXBlPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5MZW48L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPkRlZmF1bHQ8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPk1EX1BPV0VSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+KGRCbSkgUlNTSS9UWC1Qb3dlcjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPjxzYW1wPmM8L3NhbXA+IGludDg8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPi0xMjg8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5NRF9OT0lTRTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPihkQm0pIE5vaXNlIGZsb29yPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+PHNhbXA+Yzwvc2FtcD4gaW50ODwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+LTEyODwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPk1EX0ZMQUc8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5GbGFncyAoZGVmaW5lZCBiZWxvdyk8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij48c2FtcD5TPC9zYW1wPiB1aW50MTY8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiLz4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+TURfUEhZPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+UEhZLXNwZWNpZmljIGRhdGE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij48c2FtcD5kPC9zYW1wPiBkYXRhPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4mZ3Q7PTI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiLz4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+TURfVkVORDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlZlbmRvci1zcGVjaWZpYyBkYXRhPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+PHNhbXA+ZDwvc2FtcD4gZGF0YTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Jmd0Oz0yPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIi8+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjIuMS5wLjQiPlRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBpZ25vcmVkIGJ5IHRoZSBOQ1AgZm9yIHBhY2tldHMgc2VudCB0byBpdCBmcm9tIHRoZSBob3N0OiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPk1EX05PSVNFPC9saT4KKyAgPGxpPk1EX0ZMQUc8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMi4xLnAuNiI+V2hlbiBzcGVjaWZ5aW5nIDxzYW1wPk1EX1BPV0VSPC9zYW1wPiBmb3IgYSBwYWNrZXQgdG8gYmUgdHJhbnNtaXR0ZWQsIHRoZSBhY3R1YWwgdHJhbnNtaXQgcG93ZXIgaXMgbmV2ZXIgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgPHNhbXA+UFJPUF9QSFlfVFhfUE9XRVI8L3NhbXA+ICg8YSBocmVmPSIjcHJvcC1waHktdHgtcG93ZXIiPlNlY3Rpb24gNS43LjY8L2E+KS4gV2hlbiBsZWZ0IHVuc3BlY2lmaWVkIChvciBzZXQgdG8gdGhlIHZhbHVlIC0xMjgpLCBhbiBhcHByb3ByaWF0ZSB0cmFuc21pdCBwb3dlciB3aWxsIGJlIGNob3NlbiBieSB0aGUgTkNQLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi4yLjEucC43Ij5UaGUgYml0IHZhbHVlcyBpbiA8c2FtcD5NRF9GTEFHPC9zYW1wPiBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPkJpdDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+TWFzazwvdGg+CisgICAgICA8dGggY2xhc3M9ImxlZnQiPk5hbWU8L3RoPgorICAgICAgPHRoIGNsYXNzPSJsZWZ0Ij5EZXNjcmlwdGlvbiBpZiBzZXQ8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MTU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjB4MDAwMTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPk1EX0ZMQUdfVFg8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5QYWNrZXQgd2FzIHRyYW5zbWl0dGVkLCBub3QgcmVjZWl2ZWQuPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4xMzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHgwMDA0PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+TURfRkxBR19CQURfRkNTPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+UGFja2V0IHdhcyByZWNlaXZlZCB3aXRoIGJhZCBGQ1M8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjEyPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4weDAwMDg8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5NRF9GTEFHX0RVUEU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5QYWNrZXQgc2VlbXMgdG8gYmUgYSBkdXBsaWNhdGU8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjAtMTEsIDE0PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4weEZGRjI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5NRF9GTEFHX1JFU0VSVkVEPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+RmxhZ3MgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMi4xLnAuOCI+VGhlIGZvcm1hdCBvZiA8c2FtcD5NRF9QSFk8L3NhbXA+IGlzIHNwZWNpZmllZCBieSB0aGUgUEhZIGxheWVyIGN1cnJlbnRseSBpbiB1c2UsIGFuZCBtYXkgY29udGFpbiBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBjaGFubmVsLCBMUUksIGFudGVubmEsIG9yIG90aGVyIHBlcnRhaW5lbnQgaW5mb3JtYXRpb24uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNi4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS42LjMiPjUuNi4zLjwvYT4gPGEgaHJlZj0iI3Byb3Atc3RyZWFtLW5ldCIgaWQ9InByb3Atc3RyZWFtLW5ldCI+UFJPUCAxMTQ6IFBST1BfU1RSRUFNX05FVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlLVN0cmVhbTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmREPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4yPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZSQU1FX0RBVEFfTEVOPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GUkFNRV9EQVRBPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GUkFNRV9NRVRBREFUQTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjMucC4yIj5UaGlzIHN0cmVhbSBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSBvZiBzZW5kaW5nIGFuZCByZWNlaXZpbmcgZGF0YSBwYWNrZXRzIHRvIGFuZCBmcm9tIHRoZSBjdXJyZW50bHkgYXR0YWNoZWQgbmV0d29yay4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgZnJhbWUgbWV0YWRhdGEgYW5kIGRhdGEgaXMgZGVwZW5kZW50IG9uIHRoZSBuZXR3b3JrIHByb3RvY29sIGJlaW5nIHVzZWQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjMucC4zIj5UaGlzIHByb3BlcnR5IGlzIGEgc3RyZWFtaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoYXQgeW91IGNhbm5vdCBleHBsaWNpdGx5IGZldGNoIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LiBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdSB3YWl0IGZvciA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4gY29tbWFuZHMgd2l0aCB0aGlzIHByb3BlcnR5IGlkIGZyb20gdGhlIE5DUC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMy5wLjQiPlRvIHNlbmQgbmV0d29yayBwYWNrZXRzLCB5b3UgY2FsbCA8c2FtcD5DTURfUFJPUF9WQUxVRV9TRVQ8L3NhbXA+IG9uIHRoaXMgcHJvcGVydHkgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHBhY2tldC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMy5wLjUiPkFueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiA8c2FtcD5GUkFNRV9EQVRBX0xFTjwvc2FtcD4gaXMgY29uc2lkZXJlZCBtZXRhZGF0YSwgdGhlIGZvcm1hdCBvZiB3aGljaCBpcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0iI2ZyYW1lLW1ldGFkYXRhLWZvcm1hdCI+U2VjdGlvbiA1LjYuMi4xPC9hPi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS42LjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjYuNCI+NS42LjQuPC9hPiA8YSBocmVmPSIjcHJvcC1zdHJlYW0tbmV0LWluc2VjdXJlIiBpZD0icHJvcC1zdHJlYW0tbmV0LWluc2VjdXJlIj5QUk9QIDExNTogUFJPUF9TVFJFQU1fTkVUX0lOU0VDVVJFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGUtU3RyZWFtPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+ZEQ8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RlJBTUVfREFUQV9MRU48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZSQU1FX0RBVEE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZSQU1FX01FVEFEQVRBPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuNC5wLjIiPlRoaXMgc3RyZWFtIHByb3ZpZGVzIHRoZSBjYXBhYmlsaXR5IG9mIHNlbmRpbmcgYW5kIHJlY2VpdmluZyB1bmVuY3J5cHRlZCBhbmQgdW5hdXRoZW50aWNhdGVkIGRhdGEgcGFja2V0cyB0byBhbmQgZnJvbSBuZWFyYnkgZGV2aWNlcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGRldmljZSBjb21taXNzaW9uaW5nLiBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBmcmFtZSBtZXRhZGF0YSBhbmQgZGF0YSBpcyBkZXBlbmRlbnQgb24gdGhlIG5ldHdvcmsgcHJvdG9jb2wgYmVpbmcgdXNlZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuNC5wLjMiPlRoaXMgcHJvcGVydHkgaXMgYSBzdHJlYW1pbmcgcHJvcGVydHksIG1lYW5pbmcgdGhhdCB5b3UgY2Fubm90IGV4cGxpY2l0bHkgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuIFRvIHJlY2VpdmUgdHJhZmZpYywgeW91IHdhaXQgZm9yIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lTPC9zYW1wPiBjb21tYW5kcyB3aXRoIHRoaXMgcHJvcGVydHkgaWQgZnJvbSB0aGUgTkNQLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi40LnAuNCI+VG8gc2VuZCBuZXR3b3JrIHBhY2tldHMsIHlvdSBjYWxsIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX1NFVDwvc2FtcD4gb24gdGhpcyBwcm9wZXJ0eSB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgcGFja2V0LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi40LnAuNSI+QW55IGRhdGEgcGFzdCB0aGUgZW5kIG9mIDxzYW1wPkZSQU1FX0RBVEFfTEVOPC9zYW1wPiBpcyBjb25zaWRlcmVkIG1ldGFkYXRhLCB0aGUgZm9ybWF0IG9mIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjZnJhbWUtbWV0YWRhdGEtZm9ybWF0Ij5TZWN0aW9uIDUuNi4yLjE8L2E+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjciPjUuNy48L2E+IDxhIGhyZWY9IiNwcm9wLXBoeSIgaWQ9InByb3AtcGh5Ij5QSFkgUHJvcGVydGllczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjcuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4xIj41LjcuMS48L2E+IDxhIGhyZWY9IiNwcm9wLXBoeS1lbmFibGVkIiBpZD0icHJvcC1waHktZW5hYmxlZCI+UFJPUCAzMjogUFJPUF9QSFlfRU5BQkxFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD4gKGJvb2w4KTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNy4xLnAuMiI+U2V0IHRvIDEgaWYgdGhlIFBIWSBpcyBlbmFibGVkLCBzZXQgdG8gMCBvdGhlcndpc2UuICBNYXkgYmUgZGlyZWN0bHkgZW5hYmxlZCB0byBieXBhc3MgaGlnaGVyLWxldmVsIHBhY2tldCBwcm9jZXNzaW5nIGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGluZ3MgbGlrZSBwYWNrZXQgc25pZmZlcnMuIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgd3JpdHRlbiBpZiB0aGUgPHNhbXA+U1BJTkVMX0NBUF9NQUNfUkFXPC9zYW1wPiBjYXBhYmlsaXR5IGlzIHByZXNlbnQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNy4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjIiPjUuNy4yLjwvYT4gPGEgaHJlZj0iI3Byb3AtcGh5LWNoYW4iIGlkPSJwcm9wLXBoeS1jaGFuIj5QUk9QIDMzOiBQUk9QX1BIWV9DSEFOPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPiAodWludDgpPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS43LjIucC4yIj5WYWx1ZSBpcyB0aGUgY3VycmVudCBjaGFubmVsLiBNdXN0IGJlIHNldCB0byBvbmUgb2YgdGhlIHZhbHVlcyBjb250YWluZWQgaW4gPHNhbXA+UFJPUF9QSFlfQ0hBTl9TVVBQT1JURUQ8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjcuMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4zIj41LjcuMy48L2E+IDxhIGhyZWY9IiNwcm9wLXBoeS1jaGFuLXN1cHBvcnRlZCIgaWQ9InByb3AtcGh5LWNoYW4tc3VwcG9ydGVkIj5QUk9QIDM0OiBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKEMpPC9zYW1wPiAoYXJyYXkgb2YgdWludDgpPC9saT4KKyAgPGxpPlVuaXQ6IExpc3Qgb2YgY2hhbm5lbHM8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjcuMy5wLjIiPlZhbHVlIGlzIGEgbGlzdCBvZiBjaGFubmVsIHZhbHVlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjcuNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy40Ij41LjcuNC48L2E+IDxhIGhyZWY9IiNwcm9wLXBoeS1mcmVxIiBpZD0icHJvcC1waHktZnJlcSI+UFJPUCAzNTogUFJPUF9QSFlfRlJFUTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPiAodWludDMyKTwvbGk+CisgIDxsaT5Vbml0OiBLaWxvaGVydHo8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjcuNC5wLjIiPlZhbHVlIGlzIHRoZSByYWRpbyBmcmVxdWVuY3kgKGluIGtpbG9oZXJ0eikgb2YgdGhlIGN1cnJlbnQgY2hhbm5lbC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS43LjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNSI+NS43LjUuPC9hPiA8YSBocmVmPSIjcHJvcC1waHktY2NhLXRocmVzaG9sZCIgaWQ9InByb3AtcGh5LWNjYS10aHJlc2hvbGQiPlBST1AgMzY6IFBST1BfUEhZX0NDQV9USFJFU0hPTEQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmM8L3NhbXA+IChpbnQ4KTwvbGk+CisgIDxsaT5Vbml0OiBkQm08L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjcuNS5wLjIiPlZhbHVlIGlzIHRoZSBDQ0EgKGNsZWFyLWNoYW5uZWwgYXNzZXNzbWVudCkgdGhyZXNob2xkLiBTZXQgdG8gLTEyOCB0byBkaXNhYmxlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNy41LnAuMyI+V2hlbiBzZXR0aW5nLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gYSB2YWx1ZSB0aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyByYWRpbyBoYXJkd2FyZS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS43LjYiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNiI+NS43LjYuPC9hPiA8YSBocmVmPSIjcHJvcC1waHktdHgtcG93ZXIiIGlkPSJwcm9wLXBoeS10eC1wb3dlciI+UFJPUCAzNzogUFJPUF9QSFlfVFhfUE9XRVI8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmM8L3NhbXA+IChpbnQ4KTwvbGk+CisgIDxsaT5Vbml0OiBkQm08L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjcuNi5wLjIiPlZhbHVlIGlzIHRoZSB0cmFuc21pdCBwb3dlciBvZiB0aGUgcmFkaW8uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS43LjYucC4zIj5XaGVuIHNldHRpbmcsIHRoZSB2YWx1ZSB3aWxsIGJlIHJvdW5kZWQgZG93biB0byBhIHZhbHVlIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIHJhZGlvIGhhcmR3YXJlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjcuNyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy43Ij41LjcuNy48L2E+IDxhIGhyZWY9IiNwcm9wLXBoeS1yc3NpIiBpZD0icHJvcC1waHktcnNzaSI+UFJPUCAzODogUFJPUF9QSFlfUlNTSTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5jPC9zYW1wPiAoaW50OCk8L2xpPgorICA8bGk+VW5pdDogZEJtPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS43LjcucC4yIj5WYWx1ZSBpcyB0aGUgY3VycmVudCBSU1NJIChSZWNlaXZlZCBzaWduYWwgc3RyZW5ndGggaW5kaWNhdGlvbikgZnJvbSB0aGUgcmFkaW8uIFRoaXMgdmFsdWUgY2FuIGJlIHVzZWQgaW4gZW5lcmd5IHNjYW5zIGFuZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFtYmllbnQgbm9pc2UgZmxvb3IgZm9yIHRoZSBvcGVyYXRpbmcgZW52aXJvbm1lbnQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNy44Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjgiPjUuNy44LjwvYT4gPGEgaHJlZj0iI3Byb3AtcGh5LXJ4LXNlbnNpdGl2aXR5IiBpZD0icHJvcC1waHktcngtc2Vuc2l0aXZpdHkiPlBST1AgMzk6IFBST1BfUEhZX1JYX1NFTlNJVElWSVRZPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmM8L3NhbXA+IChpbnQ4KTwvbGk+CisgIDxsaT5Vbml0OiBkQm08L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjcuOC5wLjIiPlZhbHVlIGlzIHRoZSByYWRpbyByZWNlaXZlIHNlbnNpdGl2aXR5LiBUaGlzIHZhbHVlIGNhbiBiZSB1c2VkIGFzIGxvd2VyIGJvdW5kIG5vaXNlIGZsb29yIGZvciBsaW5rIG1ldHJpY3MgY29tcHV0YXRpb24uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOCI+NS44LjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjIiBpZD0icHJvcC1tYWMiPk1BQyBQcm9wZXJ0aWVzPC9hPjwvaDE+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOC4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjEiPjUuOC4xLjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjLXNjYW4tc3RhdGUiIGlkPSJwcm9wLW1hYy1zY2FuLXN0YXRlIj5QUk9QIDQ4OiBQUk9QX01BQ19TQ0FOX1NUQVRFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0OiBFbnVtZXJhdGlvbjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xLnAuMiI+UG9zc2libGUgVmFsdWVzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjA6IDxzYW1wPlNDQU5fU1RBVEVfSURMRTwvc2FtcD48L2xpPgorICA8bGk+MTogPHNhbXA+U0NBTl9TVEFURV9CRUFDT048L3NhbXA+PC9saT4KKyAgPGxpPjI6IDxzYW1wPlNDQU5fU1RBVEVfRU5FUkdZPC9zYW1wPjwvbGk+CisgIDxsaT4zOiA8c2FtcD5TQ0FOX1NUQVRFX0RJU0NPVkVSPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xLnAuNCI+U2V0IHRvIDxzYW1wPlNDQU5fU1RBVEVfQkVBQ09OPC9zYW1wPiB0byBzdGFydCBhbiBhY3RpdmUgc2Nhbi4gIEJlYWNvbnMgd2lsbCBiZSBlbWl0dGVkIGZyb20gPHNhbXA+UFJPUF9NQUNfU0NBTl9CRUFDT048L3NhbXA+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xLnAuNSI+U2V0IHRvIDxzYW1wPlNDQU5fU1RBVEVfRU5FUkdZPC9zYW1wPiB0byBzdGFydCBhbiBlbmVyZ3kgc2Nhbi4gIENoYW5uZWwgZW5lcmd5IHJlc3VsdCB3aWxsIGJlIHJlcG9ydGVkIGJ5IGVtaXNzaW9ucyBvZiA8c2FtcD5QUk9QX01BQ19FTkVSR1lfU0NBTl9SRVNVTFQ8L3NhbXA+IChwZXIgY2hhbm5lbCkuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjEucC42Ij5TZXQgdG8gPHNhbXA+U0NBTl9TVEFURV9ESVNPVkVSPC9zYW1wPiB0byBzdGFydCBhIFRocmVhZCBNTEUgZGlzY292ZXJ5IHNjYW4gb3BlcmF0aW9uLiBEaXNjb3Zlcnkgc2NhbiByZXN1bHQgd2lsbCBiZSBlbWl0dGVkIGZyb20gPHNhbXA+UFJPUF9NQUNfU0NBTl9CRUFDT048L3NhbXA+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xLnAuNyI+VmFsdWUgc3dpdGNoZXMgdG8gPHNhbXA+U0NBTl9TVEFURV9JRExFPC9zYW1wPiB3aGVuIHNjYW4gaXMgY29tcGxldGUuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOC4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjIiPjUuOC4yLjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjLXNjYW4tbWFzayIgaWQ9InByb3AtbWFjLXNjYW4tbWFzayI+UFJPUCA0OTogUFJPUF9NQUNfU0NBTl9NQVNLPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKEMpPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0OiBMaXN0IG9mIGNoYW5uZWxzIHRvIHNjYW48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMyI+NS44LjMuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtc2Nhbi1wZXJpb2QiIGlkPSJwcm9wLW1hYy1zY2FuLXBlcmlvZCI+UFJPUCA1MDogUFJPUF9NQUNfU0NBTl9QRVJJT0Q8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPlM8L3NhbXA+ICh1aW50MTYpPC9saT4KKyAgPGxpPlVuaXQ6IG1pbGxpc2Vjb25kcyBwZXIgY2hhbm5lbDwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjguNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC40Ij41LjguNC48L2E+IDxhIGhyZWY9IiNwcm9wLW1hYy1zY2FuLWJlYWNvbiIgaWQ9InByb3AtbWFjLXNjYW4tYmVhY29uIj5QUk9QIDUxOiBQUk9QX01BQ19TQ0FOX0JFQUNPTjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHktU3RyZWFtPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Q2NkZDwvc2FtcD4gKG9yIDxzYW1wPkNjdChFU1NjKXQoaUNVZGQpPC9zYW1wPik8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DSDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UlNTSTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+TUFDX0xFTjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+TUFDX0RBVEE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk5FVF9MRU48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk5FVF9EQVRBPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguNC5wLjIiPlNjYW4gYmVhY29ucyBoYXZlIHR3byBlbWJlZGRlZCBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1BQyBsYXllciBhbmQgdGhlIE5FVCBsYXllci4gVGhlaXIgZm9ybWF0IGRlcGVuZHMgb24gdGhlIE1BQyBhbmQgTkVUIGxheWVyIGN1cnJlbnRseSBpbiB1c2UuICBUaGUgZm9ybWF0IGJlbG93IGlzIGZvciBhbiA4MDIuMTUuNCBNQUMgd2l0aCBUaHJlYWQ6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IENoYW5uZWw8L2xpPgorICA8bGk+PHNhbXA+Yzwvc2FtcD46IFJTU0kgb2YgdGhlIGJlYWNvbjwvbGk+CisgIDxsaT48c2FtcD50PC9zYW1wPjogTUFDIGxheWVyIHByb3BlcnRpZXMgKDgwMi4xNS40IGxheWVyIHNob3duIGJlbG93IGZvciBjb252ZW5pZW5jZSkgPHVsPjxsaT48c2FtcD5FPC9zYW1wPjogTG9uZyBhZGRyZXNzPC9saT48bGk+PHNhbXA+Uzwvc2FtcD46IFNob3J0IGFkZHJlc3M8L2xpPjxsaT48c2FtcD5TPC9zYW1wPjogUEFOLUlEPC9saT48bGk+PHNhbXA+Yzwvc2FtcD46IExRSTwvbGk+PC91bD48L2xpPgorICA8bGk+TkVUIGxheWVyIHByb3BlcnRpZXMgKFN0YW5kYXJkIG5ldCBsYXllciBzaG93biBiZWxvdyBmb3IgY29udmVuaWVuY2UpIDx1bD48bGk+PHNhbXA+aTwvc2FtcD46IFByb3RvY29sIE51bWJlcjwvbGk+PGxpPjxzYW1wPkM8L3NhbXA+OiBGbGFnczwvbGk+PGxpPjxzYW1wPlU8L3NhbXA+OiBOZXR3b3JrIE5hbWU8L2xpPjxsaT48c2FtcD5kPC9zYW1wPjogWFBBTklEPC9saT48bGk+PHNhbXA+ZDwvc2FtcD46IFN0ZWVyaW5nIGRhdGE8L2xpPjwvdWw+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjQucC40Ij5FeHRyYSBwYXJhbWV0ZXJzIG1heSBiZSBhZGRlZCB0byBlYWNoIG9mIHRoZSBzdHJ1Y3R1cmVzIGluIHRoZSBmdXR1cmUsIHNvIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIHJlYWQgdGhlIGxlbmd0aCB0aGF0IHByZXBlbmRzIGVhY2ggc3RydWN0dXJlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjguNSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC41Ij41LjguNS48L2E+IDxhIGhyZWY9IiNwcm9wLW1hYy0xNS00LWxhZGRyIiBpZD0icHJvcC1tYWMtMTUtNC1sYWRkciI+UFJPUCA1MjogUFJPUF9NQUNfMTVfNF9MQUREUjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguNS5wLjIiPlRoZSA4MDIuMTUuNCBsb25nIGFkZHJlc3Mgb2YgdGhpcyBub2RlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC41LnAuMyI+VGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHByZXNlbnQgb24gTkNQcyB3aGljaCBpbXBsZW1lbnQgODAyLjE1LjQgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjguNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC42Ij41LjguNi48L2E+IDxhIGhyZWY9IiNwcm9wLW1hYy0xNS00LXNhZGRyIiBpZD0icHJvcC1tYWMtMTUtNC1zYWRkciI+UFJPUCA1MzogUFJPUF9NQUNfMTVfNF9TQUREUjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Uzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguNi5wLjIiPlRoZSA4MDIuMTUuNCBzaG9ydCBhZGRyZXNzIG9mIHRoaXMgbm9kZS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguNi5wLjMiPlRoaXMgcHJvcGVydHkgaXMgb25seSBwcmVzZW50IG9uIE5DUHMgd2hpY2ggaW1wbGVtZW50IDgwMi4xNS40IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguNyI+NS44LjcuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtMTUtNC1wYW5pZCIgaWQ9InByb3AtbWFjLTE1LTQtcGFuaWQiPlBST1AgNTQ6IFBST1BfTUFDXzE1XzRfUEFOSUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPlM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjcucC4yIj5UaGUgODAyLjE1LjQgUEFOSUQgdGhpcyBub2RlIGlzIGFzc29jaWF0ZWQgd2l0aC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguNy5wLjMiPlRoaXMgcHJvcGVydHkgaXMgb25seSBwcmVzZW50IG9uIE5DUHMgd2hpY2ggaW1wbGVtZW50IDgwMi4xNS40IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjgiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguOCI+NS44LjguPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtcmF3LXN0cmVhbS1lbmFibGVkIiBpZD0icHJvcC1tYWMtcmF3LXN0cmVhbS1lbmFibGVkIj5QUk9QIDU1OiBQUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjgucC4yIj5TZXQgdG8gdHJ1ZSB0byBlbmFibGUgcmF3IE1BQyBmcmFtZXMgdG8gYmUgZW1pdHRlZCBmcm9tIDxzYW1wPlBST1BfU1RSRUFNX1JBVzwvc2FtcD4uICBTZWUgPGEgaHJlZj0iI3Byb3Atc3RyZWFtLXJhdyI+U2VjdGlvbiA1LjYuMjwvYT4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOC45Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjkiPjUuOC45LjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjLXByb21pc2N1b3VzLW1vZGUiIGlkPSJwcm9wLW1hYy1wcm9taXNjdW91cy1tb2RlIj5QUk9QIDU2OiBQUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC45LnAuMiI+UG9zc2libGUgVmFsdWVzOiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPklkPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5OYW1lPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5EZXNjcmlwdGlvbjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4wPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+TUFDX1BST01JU0NVT1VTX01PREVfT0ZGPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5Ob3JtYWwgTUFDIGZpbHRlcmluZyBpcyBpbiBwbGFjZS48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5NQUNfUFJPTUlTQ1VPVVNfTU9ERV9ORVRXT1JLPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5BbGwgTUFDIHBhY2tldHMgbWF0Y2hpbmcgbmV0d29yayBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5NQUNfUFJPTUlTQ1VPVVNfTU9ERV9GVUxMPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5BbGwgZGVjb2RlZCBNQUMgcGFja2V0cyBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay48L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC45LnAuMyI+U2VlIDxhIGhyZWY9IiNwcm9wLXN0cmVhbS1yYXciPlNlY3Rpb24gNS42LjI8L2E+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjguMTAiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTAiPjUuOC4xMC48L2E+IDxhIGhyZWY9IiNwcm9wLW1hYy1lc2Nhbi1yZXN1bHQiIGlkPSJwcm9wLW1hYy1lc2Nhbi1yZXN1bHQiPlBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHktU3RyZWFtPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Q2M8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjEwLnAuMiI+VGhpcyBwcm9wZXJ0eSBpcyBlbWl0dGVkIGR1cmluZyBlbmVyZ3kgc2NhbiBvcGVyYXRpb24gcGVyIHNjYW5uZWQgY2hhbm5lbCB3aXRoIGZvbGxvd2luZyBmb3JtYXQ6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IENoYW5uZWw8L2xpPgorICA8bGk+PHNhbXA+Yzwvc2FtcD46IFJTU0kgKGluIGRCbSk8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjExIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjExIj41LjguMTEuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtd2hpdGVsaXN0IiBpZD0icHJvcC1tYWMtd2hpdGVsaXN0Ij5QUk9QIDQ4NjQ6IFBST1BfTUFDX1dISVRFTElTVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+QShUKEVjKSk8L3NhbXA+PC9saT4KKyAgPGxpPlJlcXVpcmVkIGNhcGFiaWxpdHk6IDxzYW1wPkNBUF9NQUNfV0hJVEVMSVNUPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xMS5wLjIiPlN0cnVjdHVyZSBQYXJhbWV0ZXJzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkU8L3NhbXA+OiBFVUk2NCBhZGRyZXNzIG9mIG5vZGU8L2xpPgorICA8bGk+PHNhbXA+Yzwvc2FtcD46IE9wdGlvbmFsIFJTU0ktb3ZlcnJpZGUgdmFsdWUuIFRoZSB2YWx1ZSAxMjcgaW5kaWNhdGVzIHRoYXQgdGhlIFJTU0ktb3ZlcnJpZGUgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBhZGRyZXNzLiBJZiB0aGlzIHZhbHVlIGlzIG9taXR0ZWQgd2hlbiBzZXR0aW5nIG9yIGluc2VydGluZywgaXQgaXMgYXNzdW1lZCB0byBiZSAxMjcuIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgd2hlbiByZW1vdmluZy48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjEyIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjEyIj41LjguMTIuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtd2hpdGVsaXN0LWVuYWJsZWQiIGlkPSJwcm9wLW1hYy13aGl0ZWxpc3QtZW5hYmxlZCI+UFJPUCA0ODY1OiBQUk9QX01BQ19XSElURUxJU1RfRU5BQkxFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgY2FwYWJpbGl0eTogPHNhbXA+Q0FQX01BQ19XSElURUxJU1Q8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOC4xMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xMyI+NS44LjEzLjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjLXNyYy1tYXRjaC1lbmFibGVkIiBpZD0icHJvcC1tYWMtc3JjLW1hdGNoLWVuYWJsZWQiPlBST1AgNDg2NzogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguMTMucC4yIj5TZXQgdG8gdHJ1ZSB0byBlbmFibGUgcmFkaW8gc291cmNlIG1hdGNoaW5nIG9yIGZhbHNlIHRvIGRpc2FibGUgaXQuIFRoaXMgcHJvcGVydHkgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIDxzYW1wPlNQSU5FTF9DQVBfTUFDX1JBVzwvc2FtcD4gY2FwYWJpbGl0eSBpcyBwcmVzZW50LiBUaGUgc291cmNlIG1hdGNoIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZCBieSByYWRpb3Mgd2hlbiBnZW5lcmF0aW5nIEFDS3MuIFRoZSBzaG9ydCBhbmQgZXh0ZW5kZWQgYWRkcmVzcyBsaXN0cyBhcmUgdXNlZCBmb3Igc2V0dGluZ3MgdGhlIEZyYW1lIFBlbmRpbmcgYml0IGluIHRoZSBBQ0tzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjguMTQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTQiPjUuOC4xNC48L2E+IDxhIGhyZWY9IiNwcm9wLW1hYy1zcmMtbWF0Y2gtc2hvcnQtYWRkcmVzc2VzIiBpZD0icHJvcC1tYWMtc3JjLW1hdGNoLXNob3J0LWFkZHJlc3NlcyI+UFJPUCA0ODY4OiBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBXcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEoUyk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjE0LnAuMiI+Q29uZmlndXJlcyB0aGUgbGlzdCBvZiBzaG9ydCBhZGRyZXNzZXMgdXNlZCBmb3Igc291cmNlIG1hdGNoaW5nLiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSA8c2FtcD5TUElORUxfQ0FQX01BQ19SQVc8L3NhbXA+IGNhcGFiaWxpdHkgaXMgcHJlc2VudC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguMTQucC4zIj5TdHJ1Y3R1cmUgUGFyYW1ldGVyczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5TPC9zYW1wPjogU2hvcnQgYWRkcmVzcyBmb3IgaGFyZHdhcmUgZ2VuZXJhdGVkIEFDS3M8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjE1Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjE1Ij41LjguMTUuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtc3JjLW1hdGNoLWV4dGVuZGVkLWFkZHJlc3NlcyIgaWQ9InByb3AtbWFjLXNyYy1tYXRjaC1leHRlbmRlZC1hZGRyZXNzZXMiPlBST1AgNDg2OTogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVM8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKEUpPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xNS5wLjIiPkNvbmZpZ3VyZXMgdGhlIGxpc3Qgb2YgZXh0ZW5kZWQgYWRkcmVzc2VzIHVzZWQgZm9yIHNvdXJjZSBtYXRjaGluZy4gVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgPHNhbXA+U1BJTkVMX0NBUF9NQUNfUkFXPC9zYW1wPiBjYXBhYmlsaXR5IGlzIHByZXNlbnQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjE1LnAuMyI+U3RydWN0dXJlIFBhcmFtZXRlcnM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+RTwvc2FtcD46IEVVSTY0IGFkZHJlc3MgZm9yIGhhcmR3YXJlIGdlbmVyYXRlZCBBQ0tzPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOC4xNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xNiI+NS44LjE2LjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjLWJsYWNrbGlzdCIgaWQ9InByb3AtbWFjLWJsYWNrbGlzdCI+UFJPUCA0ODcwOiBQUk9QX01BQ19CTEFDS0xJU1Q8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEoVChFKSk8L3NhbXA+PC9saT4KKyAgPGxpPlJlcXVpcmVkIGNhcGFiaWxpdHk6IDxzYW1wPkNBUF9NQUNfV0hJVEVMSVNUPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xNi5wLjIiPlN0cnVjdHVyZSBQYXJhbWV0ZXJzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkU8L3NhbXA+OiBFVUk2NCBhZGRyZXNzIG9mIG5vZGU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjE3Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjE3Ij41LjguMTcuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtYmxhY2tsaXN0LWVuYWJsZWQiIGlkPSJwcm9wLW1hYy1ibGFja2xpc3QtZW5hYmxlZCI+UFJPUCA0ODcxOiBQUk9QX01BQ19CTEFDS0xJU1RfRU5BQkxFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgY2FwYWJpbGl0eTogPHNhbXA+Q0FQX01BQ19XSElURUxJU1Q8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOSI+NS45LjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0IiBpZD0icHJvcC1uZXQiPk5FVCBQcm9wZXJ0aWVzPC9hPjwvaDE+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjEiPjUuOS4xLjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LXNhdmVkIiBpZD0icHJvcC1uZXQtc2F2ZWQiPlBST1AgNjQ6IFBST1BfTkVUX1NBVkVEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS45LjEucC4yIj5SZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSBuZXR3b3JrIHN0YXRlIHN0b3JlZC9zYXZlZC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS45LjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuMiI+NS45LjIuPC9hPiA8YSBocmVmPSIjcHJvcC1uZXQtaWYtdXAiIGlkPSJwcm9wLW5ldC1pZi11cCI+UFJPUCA2NTogUFJPUF9ORVRfSUZfVVA8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS45LjIucC4yIj5OZXR3b3JrIGludGVyZmFjZSB1cC9kb3duIHN0YXR1cy4gTm9uLXplcm8gKHNldCB0byAxKSBpbmRpY2F0ZXMgdXAsIHplcm8gaW5kaWNhdGVzIGRvd24uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjMiPjUuOS4zLjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LXN0YWNrLXVwIiBpZD0icHJvcC1uZXQtc3RhY2stdXAiPlBST1AgNjY6IFBST1BfTkVUX1NUQUNLX1VQPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0OiBFbnVtZXJhdGlvbjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOS4zLnAuMiI+VGhyZWFkIHN0YWNrIG9wZXJhdGlvbmFsIHN0YXR1cy4gTm9uLXplcm8gKHNldCB0byAxKSBpbmRpY2F0ZXMgdXAsIHplcm8gaW5kaWNhdGVzIGRvd24uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS40Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjQiPjUuOS40LjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LXJvbGUiIGlkPSJwcm9wLW5ldC1yb2xlIj5QUk9QIDY3OiBQUk9QX05FVF9ST0xFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0OiBFbnVtZXJhdGlvbjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOS40LnAuMiI+VmFsdWVzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjA6IDxzYW1wPk5FVF9ST0xFX0RFVEFDSEVEPC9zYW1wPjwvbGk+CisgIDxsaT4xOiA8c2FtcD5ORVRfUk9MRV9DSElMRDwvc2FtcD48L2xpPgorICA8bGk+MjogPHNhbXA+TkVUX1JPTEVfUk9VVEVSPC9zYW1wPjwvbGk+CisgIDxsaT4zOiA8c2FtcD5ORVRfUk9MRV9MRUFERVI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS41Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjUiPjUuOS41LjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LW5ldHdvcmstbmFtZSIgaWQ9InByb3AtbmV0LW5ldHdvcmstbmFtZSI+UFJPUCA2ODogUFJPUF9ORVRfTkVUV09SS19OQU1FPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5VPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjkuNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS42Ij41LjkuNi48L2E+IDxhIGhyZWY9IiNwcm9wLW5ldC14cGFuaWQiIGlkPSJwcm9wLW5ldC14cGFuaWQiPlBST1AgNjk6IFBST1BfTkVUX1hQQU5JRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS45LjciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuNyI+NS45LjcuPC9hPiA8YSBocmVmPSIjcHJvcC1uZXQtbWFzdGVyLWtleSIgaWQ9InByb3AtbmV0LW1hc3Rlci1rZXkiPlBST1AgNzA6IFBST1BfTkVUX01BU1RFUl9LRVk8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkQ8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS44Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjgiPjUuOS44LjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LWtleS1zZXF1ZW5jZS1jb3VudGVyIiBpZD0icHJvcC1uZXQta2V5LXNlcXVlbmNlLWNvdW50ZXIiPlBST1AgNzE6IFBST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjkuOSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS45Ij41LjkuOS48L2E+IDxhIGhyZWY9IiNwcm9wLW5ldC1wYXJ0aXRpb24taWQiIGlkPSJwcm9wLW5ldC1wYXJ0aXRpb24taWQiPlBST1AgNzI6IFBST1BfTkVUX1BBUlRJVElPTl9JRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+TDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjkuOS5wLjIiPlRoZSBwYXJ0aXRpb24gSUQgb2YgdGhlIHBhcnRpdGlvbiB0aGF0IHRoaXMgbm9kZSBpcyBhIG1lbWJlciBvZi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS45LjEwIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjEwIj41LjkuMTAuPC9hPiA8YSBocmVmPSIjcHJvcC1uZXQtcmVxdWlyZS1qb2luLWV4aXN0aW5nIiBpZD0icHJvcC1uZXQtcmVxdWlyZS1qb2luLWV4aXN0aW5nIj5QUk9QIDczOiBQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS4xMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xMSI+NS45LjExLjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LWtleS1zd3RpY2gtZ3VhcmR0aW1lIiBpZD0icHJvcC1uZXQta2V5LXN3dGljaC1ndWFyZHRpbWUiPlBST1AgNzQ6IFBST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjkuMTIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuMTIiPjUuOS4xMi48L2E+IDxhIGhyZWY9IiNwcm9wLW5ldC1wc2tjIiBpZD0icHJvcC1uZXQtcHNrYyI+UFJPUCA3NTogUFJPUF9ORVRfUFNLQzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS4xMCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTAiPjUuMTAuPC9hPiA8YSBocmVmPSIjcHJvcC1pcHY2IiBpZD0icHJvcC1pcHY2Ij5JUHY2IFByb3BlcnRpZXM8L2E+PC9oMT4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS4xMC4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC4xIj41LjEwLjEuPC9hPiA8YSBocmVmPSIjcHJvcC1pcHY2LWxsLWFkZHIiIGlkPSJwcm9wLWlwdjYtbGwtYWRkciI+UFJPUCA5NjogUFJPUF9JUFY2X0xMX0FERFI8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Pbmx5PC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Njwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjEwLjEucC4yIj5JUHY2IEFkZHJlc3MgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjEwLjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjIiPjUuMTAuMi48L2E+IDxhIGhyZWY9IiNwcm9wLWlwdjYtbWwtYWRkciIgaWQ9InByb3AtaXB2Ni1tbC1hZGRyIj5QUk9QIDk3OiBQUk9QX0lQVjZfTUxfQUREUjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD42PC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMTAuMi5wLjIiPklQdjYgQWRkcmVzcyArIFByZWZpeCBMZW5ndGggPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjEwLjMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjMiPjUuMTAuMy48L2E+IDxhIGhyZWY9IiNwcm9wLWlwdjYtbWwtcHJlZml4IiBpZD0icHJvcC1pcHY2LW1sLXByZWZpeCI+UFJPUCA5ODogUFJPUF9JUFY2X01MX1BSRUZJWDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+NkM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4xMC4zLnAuMiI+SVB2NiBQcmVmaXggKyBQcmVmaXggTGVuZ3RoIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS4xMC40Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC40Ij41LjEwLjQuPC9hPiA8YSBocmVmPSIjcHJvcC1pcHY2LWFkZHJlc3MtdGFibGUiIGlkPSJwcm9wLWlwdjYtYWRkcmVzcy10YWJsZSI+UFJPUCA5OTogUFJPUF9JUFY2X0FERFJFU1NfVEFCTEU8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEodCg2Q0xMQykpPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMTAuNC5wLjIiPkFycmF5IG9mIHN0cnVjdHVyZXMgY29udGFpbmluZzogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD42PC9zYW1wPjogSVB2NiBBZGRyZXNzPC9saT4KKyAgPGxpPjxzYW1wPkM8L3NhbXA+OiBOZXR3b3JrIFByZWZpeCBMZW5ndGg8L2xpPgorICA8bGk+PHNhbXA+TDwvc2FtcD46IFZhbGlkIExpZmV0aW1lPC9saT4KKyAgPGxpPjxzYW1wPkw8L3NhbXA+OiBQcmVmZXJyZWQgTGlmZXRpbWU8L2xpPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IEZsYWdzPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMTAuNSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTAuNSI+NS4xMC41LjwvYT4gPGEgaHJlZj0iI3Byb3AtMTAxLXByb3BpcHY2aWNtcHBpbmdvZmZsb2FkIiBpZD0icHJvcC0xMDEtcHJvcGlwdjZpY21wcGluZ29mZmxvYWQiPlBST1AgMTAxOiBQUk9QX0lQdjZfSUNNUF9QSU5HX09GRkxPQUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4xMC41LnAuMiI+QWxsb3cgdGhlIE5DUCB0byBkaXJlY3RseSByZXNwb25kIHRvIElDTVAgcGluZyByZXF1ZXN0cy4gSWYgdGhpcyBpcyB0dXJuZWQgb24sIHBpbmcgcmVxdWVzdCBJQ01QIHBhY2tldHMgd2lsbCBub3QgYmUgcGFzc2VkIHRvIHRoZSBob3N0LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMTAuNS5wLjMiPkRlZmF1bHQgdmFsdWUgaXMgPHNhbXA+ZmFsc2U8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjExIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMSI+NS4xMS48L2E+IDxhIGhyZWY9IiNwcm9wLWRlYnVnIiBpZD0icHJvcC1kZWJ1ZyI+RGVidWcgUHJvcGVydGllczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjExLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjExLjEiPjUuMTEuMS48L2E+IDxhIGhyZWY9IiNwcm9wLWRlYnVnLXRlc3QtYXNzZXJ0IiBpZD0icHJvcC1kZWJ1Zy10ZXN0LWFzc2VydCI+UFJPUCAxNjM4NDogUFJPUF9ERUJVR19URVNUX0FTU0VSVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMTEuMS5wLjIiPlJlYWRpbmcgdGhpcyBwcm9wZXJ0eSB3aWxsIGNhdXNlIGFuIGFzc2VydCBvbiB0aGUgTkNQLiBUaGlzIGlzIGludGVuZGVkIGZvciB0ZXN0aW5nIHRoZSBhc3NlcnQgZnVuY3Rpb25hbGl0eSBvZiB1bmRlcmx5aW5nIHBsYXRmb3JtL05DUC4gQXNzZXJ0IHNob3VsZCBpZGVhbGx5IGNhdXNlIHRoZSBOQ1AgdG8gcmVzZXQsIGJ1dCBpZiA8c2FtcD5hc3NlcnQ8L3NhbXA+IGlzIG5vdCBzdXBwb3J0ZWQgb3IgZGlzYWJsZWQgYm9vbGVhbiB2YWx1ZSBvZiA8c2FtcD5mYWxzZTwvc2FtcD4gaXMgcmV0dXJuZWQgaW4gcmVzcG9uc2UuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMTEuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTEuMiI+NS4xMS4yLjwvYT4gPGEgaHJlZj0iI3Byb3AtZGVidWctbmNwLWxvZy1sZXZlbCIgaWQ9InByb3AtZGVidWctbmNwLWxvZy1sZXZlbCI+UFJPUCAxNjM4NTogUFJPUF9ERUJVR19OQ1BfTE9HX0xFVkVMPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMTEuMi5wLjIiPlByb3ZpZGVzIGFjY2VzcyB0byB0aGUgTkNQIGxvZyBsZXZlbC4gQ3VycmVudGx5IGRlZmluZWQgdmFsdWVzIGFyZSAod2hpY2ggZm9sbG93cyB0aGUgUkZDIDU0MjQpOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjA6IEVtZXJnZW5jeSAoZW1lcmcpLjwvbGk+CisgIDxsaT4xOiBBbGVydCAoYWxlcnQpLjwvbGk+CisgIDxsaT4yOiBDcml0aWNhbCAoY3JpdCkuPC9saT4KKyAgPGxpPjM6IEVycm9yIChlcnIpLjwvbGk+CisgIDxsaT40OiBXYXJuaW5nICh3YXJuKS48L2xpPgorICA8bGk+NTogTm90aWNlIChub3RpY2UpLjwvbGk+CisgIDxsaT42OiBJbmZvcm1hdGlvbiAoaW5mbykuPC9saT4KKyAgPGxpPjc6IERlYnVnIChkZWJ1ZykuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4xMS4yLnAuNCI+SWYgdGhlIE5DUCBzdXBwb3J0cyBkeW5hbWljIGxvZyBsZXZlbCBjb250cm9sLCBzZXR0aW5nIHRoaXMgcHJvcGVydHkgY2hhbmdlcyB0aGUgbG9nIGxldmVsIGFjY29yZGluZ2x5LiBHZXR0aW5nIHRoZSB2YWx1ZSByZXR1cm5zIHRoZSBjdXJyZW50IGxvZyBsZXZlbC4gIElmIHRoZSBkeW5hbWljIGxvZyBsZXZlbCBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQsIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSByZXR1cm5zIGEgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4gd2l0aCA8c2FtcD5TVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QPC9zYW1wPi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjYiPjYuPC9hPiA8YSBocmVmPSIjc3RhdHVzLWNvZGVzIiBpZD0ic3RhdHVzLWNvZGVzIj5TdGF0dXMgQ29kZXM8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi42LnAuMSI+U3RhdHVzIGNvZGVzIGFyZSBzZW50IGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdCB2aWEgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4gdXNpbmcgdGhlIDxzYW1wPkNNRF9WQUxVRV9JUzwvc2FtcD4gY29tbWFuZCB0byBpbmRpY2F0ZSB0aGUgcmV0dXJuIHN0YXR1cyBvZiBhIHByZXZpb3VzIGNvbW1hbmQuIEFzIHdpdGggYW55IHJlc3BvbnNlLCB0aGUgVElEIGZpZWxkIG9mIHRoZSBGTEFHIGJ5dGUgaXMgdXNlZCB0byBjb3JyZWxhdGUgdGhlIHJlc3BvbnNlIHdpdGggdGhlIHJlcXVlc3QuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNi5wLjIiPk5vdGUgdGhhdCBtb3N0IHN1Y2Nlc3NmdWxseSBleGVjdXRlZCBjb21tYW5kcyBkbyBub3QgaW5kaWNhdGUgYSBsYXN0IHN0YXR1cyBvZiA8c2FtcD5TVEFUVVNfT0s8L3NhbXA+LiBUaGUgdXN1YWwgd2F5IHRoZSBOQ1AgaW5kaWNhdGVzIGEgc3VjY2Vzc2Z1bCBjb21tYW5kIGlzIHRvIG1pcnJvciB0aGUgcHJvcGVydHkgY2hhbmdlIGJhY2sgdG8gdGhlIGhvc3QuIEZvciBleGFtcGxlLCBpZiB5b3UgZG8gYSA8c2FtcD5DTURfVkFMVUVfU0VUPC9zYW1wPiBvbiA8c2FtcD5QUk9QX1BIWV9FTkFCTEVEPC9zYW1wPiwgdGhlIE5DUCB3b3VsZCBpbmRpY2F0ZSBzdWNjZXNzIGJ5IHJlc3BvbmRpbmcgd2l0aCBhIDxzYW1wPkNNRF9WQUxVRV9JUzwvc2FtcD4gZm9yIDxzYW1wPlBST1BfUEhZX0VOQUJMRUQ8L3NhbXA+LiBJZiB0aGUgY29tbWFuZCBmYWlsZWQsIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+IHdvdWxkIGJlIGVtaXR0ZWQgaW5zdGVhZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi42LnAuMyI+U2VlIDxhIGhyZWY9IiNwcm9wLWxhc3Qtc3RhdHVzIj5TZWN0aW9uIDUuNS4xPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiA8c2FtcD5QUk9QX0xBU1RfU1RBVFVTPC9zYW1wPi4gIDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+MDogPHNhbXA+U1RBVFVTX09LPC9zYW1wPjogT3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LjwvbGk+CisgIDxsaT4xOiA8c2FtcD5TVEFUVVNfRkFJTFVSRTwvc2FtcD46IE9wZXJhdGlvbiBoYXMgZmFpbGVkIGZvciBzb21lIHVuZGVmaW5lZCByZWFzb24uPC9saT4KKyAgPGxpPjI6IDxzYW1wPlNUQVRVU19VTklNUExFTUVOVEVEPC9zYW1wPjogVGhlIGdpdmVuIG9wZXJhdGlvbiBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQuPC9saT4KKyAgPGxpPjM6IDxzYW1wPlNUQVRVU19JTlZBTElEX0FSR1VNRU5UPC9zYW1wPjogQW4gYXJndW1lbnQgdG8gdGhlIGdpdmVuIG9wZXJhdGlvbiBpcyBpbnZhbGlkLjwvbGk+CisgIDxsaT40OiA8c2FtcD5TVEFUVVNfSU5WQUxJRF9TVEFURTwvc2FtcD4gOiBUaGUgZ2l2ZW4gb3BlcmF0aW9uIGlzIGludmFsaWQgZm9yIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkZXZpY2UuPC9saT4KKyAgPGxpPjU6IDxzYW1wPlNUQVRVU19JTlZBTElEX0NPTU1BTkQ8L3NhbXA+OiBUaGUgZ2l2ZW4gY29tbWFuZCBpcyBub3QgcmVjb2duaXplZC48L2xpPgorICA8bGk+NjogPHNhbXA+U1RBVFVTX0lOVkFMSURfSU5URVJGQUNFPC9zYW1wPjogVGhlIGdpdmVuIFNwaW5lbCBpbnRlcmZhY2UgaXMgbm90IHN1cHBvcnRlZC48L2xpPgorICA8bGk+NzogPHNhbXA+U1RBVFVTX0lOVEVSTkFMX0VSUk9SPC9zYW1wPjogQW4gaW50ZXJuYWwgcnVudGltZSBlcnJvciBoYXMgb2NjdXJyZWQuPC9saT4KKyAgPGxpPjg6IDxzYW1wPlNUQVRVU19TRUNVUklUWV9FUlJPUjwvc2FtcD46IEEgc2VjdXJpdHkgb3IgYXV0aGVudGljYXRpb24gZXJyb3IgaGFzIG9jY3VycmVkLjwvbGk+CisgIDxsaT45OiA8c2FtcD5TVEFUVVNfUEFSU0VfRVJST1I8L3NhbXA+OiBBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgcGFyc2luZyB0aGUgY29tbWFuZC48L2xpPgorICA8bGk+MTA6IDxzYW1wPlNUQVRVU19JTl9QUk9HUkVTUzwvc2FtcD46IFRoZSBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MgYW5kIHdpbGwgYmUgY29tcGxldGVkIGFzeW5jaHJvbm91c2x5LjwvbGk+CisgIDxsaT4xMTogPHNhbXA+U1RBVFVTX05PTUVNPC9zYW1wPjogVGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwcmV2ZW50ZWQgZHVlIHRvIG1lbW9yeSBwcmVzc3VyZS48L2xpPgorICA8bGk+MTI6IDxzYW1wPlNUQVRVU19CVVNZPC9zYW1wPjogVGhlIGRldmljZSBpcyBjdXJyZW50bHkgcGVyZm9ybWluZyBhIG11dHVhbGx5IGV4Y2x1c2l2ZSBvcGVyYXRpb24uPC9saT4KKyAgPGxpPjEzOiA8c2FtcD5TVEFUVVNfUFJPUF9OT1RfRk9VTkQ8L3NhbXA+OiBUaGUgZ2l2ZW4gcHJvcGVydHkgaXMgbm90IHJlY29nbml6ZWQuPC9saT4KKyAgPGxpPjE0OiA8c2FtcD5TVEFUVVNfUEFDS0VUX0RST1BQRUQ8L3NhbXA+OiBUaGUgcGFja2V0IHdhcyBkcm9wcGVkLjwvbGk+CisgIDxsaT4xNTogPHNhbXA+U1RBVFVTX0VNUFRZPC9zYW1wPjogVGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uIGlzIGVtcHR5LjwvbGk+CisgIDxsaT4xNjogPHNhbXA+U1RBVFVTX0NNRF9UT09fQklHPC9zYW1wPjogVGhlIGNvbW1hbmQgd2FzIHRvbyBsYXJnZSB0byBmaXQgaW4gdGhlIGludGVybmFsIGJ1ZmZlci48L2xpPgorICA8bGk+MTc6IDxzYW1wPlNUQVRVU19OT19BQ0s8L3NhbXA+OiBUaGUgcGFja2V0IHdhcyBub3QgYWNrbm93bGVkZ2VkLjwvbGk+CisgIDxsaT4xODogPHNhbXA+U1RBVFVTX0NDQV9GQUlMVVJFPC9zYW1wPjogVGhlIHBhY2tldCB3YXMgbm90IHNlbnQgZHVlIHRvIGEgQ0NBIGZhaWx1cmUuPC9saT4KKyAgPGxpPjE5OiA8c2FtcD5TVEFUVVNfQUxSRUFEWTwvc2FtcD46IFRoZSBvcGVyYXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyBvciB0aGUgcHJvcGVydHkgd2FzIGFscmVhZHkgc2V0IHRvIHRoZSBnaXZlbiB2YWx1ZS48L2xpPgorICA8bGk+MjA6IDxzYW1wPlNUQVRVU19JVEVNX05PVF9GT1VORDwvc2FtcD46IFRoZSBnaXZlbiBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcHJvcGVydHkuPC9saT4KKyAgPGxpPjIxOiA8c2FtcD5TVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QPC9zYW1wPjogVGhlIGdpdmVuIGNvbW1hbmQgY2Fubm90IGJlIHBlcmZvcm1lZCBvbiB0aGlzIHByb3BlcnR5LjwvbGk+CisgIDxsaT4yMi0xMTE6IFJFU0VSVkVEPC9saT4KKyAgPGxpPjExMi0xMjc6IFJlc2V0IENhdXNlcyA8dWw+PGxpPjExMjogPHNhbXA+U1RBVFVTX1JFU0VUX1BPV0VSX09OPC9zYW1wPjwvbGk+PGxpPjExMzogPHNhbXA+U1RBVFVTX1JFU0VUX0VYVEVSTkFMPC9zYW1wPjwvbGk+PGxpPjExNDogPHNhbXA+U1RBVFVTX1JFU0VUX1NPRlRXQVJFPC9zYW1wPjwvbGk+PGxpPjExNTogPHNhbXA+U1RBVFVTX1JFU0VUX0ZBVUxUPC9zYW1wPjwvbGk+PGxpPjExNjogPHNhbXA+U1RBVFVTX1JFU0VUX0NSQVNIPC9zYW1wPjwvbGk+PGxpPjExNzogPHNhbXA+U1RBVFVTX1JFU0VUX0FTU0VSVDwvc2FtcD48L2xpPjxsaT4xMTg6IDxzYW1wPlNUQVRVU19SRVNFVF9PVEhFUjwvc2FtcD48L2xpPjxsaT4xMTk6IDxzYW1wPlNUQVRVU19SRVNFVF9VTktOT1dOPC9zYW1wPjwvbGk+PGxpPjEyMDogPHNhbXA+U1RBVFVTX1JFU0VUX1dBVENIRE9HPC9zYW1wPjwvbGk+PGxpPjEyMS0xMjc6IFJFU0VSVkVELVJFU0VULUNPREVTPC9saT48L3VsPjwvbGk+CisgIDxsaT4xMjggLSAxNSwzNTk6IFVOQUxMT0NBVEVEPC9saT4KKyAgPGxpPjE1LDM2MCAtIDE2LDM4MzogVmVuZG9yLXNwZWNpZmljPC9saT4KKyAgPGxpPjE2LDM4NCAtIDEsOTk5LDk5OTogVU5BTExPQ0FURUQ8L2xpPgorICA8bGk+MiwwMDAsMDAwIC0gMiwwOTcsMTUxOiBFeHBlcmltZW50YWwgVXNlIE9ubHkgKE1VU1QgTkVWRVIgYmUgdXNlZCBpbiBwcm9kdWN0aW9uISk8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjciPjcuPC9hPiA8YSBocmVmPSIjdGVjaC10aHJlYWQiIGlkPSJ0ZWNoLXRocmVhZCI+VGVjaG5vbG9neTogVGhyZWFkKFIpPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy5wLjEiPlRoaXMgc2VjdGlvbiBkZXNjcmliZXMgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZW1hbnRpY3MgcmVxdWlyZWQgZm9yIG1hbmFnaW5nIGEgVGhyZWFkKFIpIE5DUC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LnAuMiI+VGhyZWFkKFIpIE5DUHMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5UaGUgcHJvcGVydHkgPHNhbXA+UFJPUF9JTlRFUkZBQ0VfVFlQRTwvc2FtcD4gbXVzdCBiZSAzLjwvbGk+CisgIDxsaT5UaGUgbm9uLW9wdGlvbmFsIHByb3BlcnRpZXMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucyBNVVNUIGJlIGltcGxlbWVudGVkOiBDT1JFLCBQSFksIE1BQywgTkVULCBhbmQgSVBWNi48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LnAuNCI+QWxsIHNlcmlvdXMgaW1wbGVtZW50YXRpb25zIG9mIGFuIE5DUCBTSE9VTEQgYWxzbyBzdXBwb3J0IHRoZSBuZXR3b3JrIHNhdmUgZmVhdHVyZSAoU2VlIDxhIGhyZWY9IiNmZWF0dXJlLW5ldHdvcmstc2F2ZSI+U2VjdGlvbiA4PC9hPikuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMSI+Ny4xLjwvYT4gPGEgaHJlZj0iI3RocmVhZC1jYXBzIiBpZD0idGhyZWFkLWNhcHMiPkNhcGFiaWxpdGllczwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMS5wLjEiPlRoZSBUaHJlYWQoUikgdGVjaG5vbG9neSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkNBUF9ORVRfVEhSRUFEXzFfMDwvc2FtcD4gLSBJbmRpY2F0ZXMgdGhhdCB0aGUgTkNQIGltcGxlbWVudHMgdjEuMCBvZiB0aGUgVGhyZWFkKFIpIHN0YW5kYXJkLjwvbGk+CisgIDxsaT48c2FtcD5DQVBfTkVUX1RIUkVBRF8xXzE8L3NhbXA+IC0gSW5kaWNhdGVzIHRoYXQgdGhlIE5DUCBpbXBsZW1lbnRzIHYxLjEgb2YgdGhlIFRocmVhZChSKSBzdGFuZGFyZC48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yIj43LjIuPC9hPiA8YSBocmVmPSIjdGhyZWFkLXByb3BlcnRpZXMiIGlkPSJ0aHJlYWQtcHJvcGVydGllcyI+UHJvcGVydGllczwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi5wLjEiPlByb3BlcnRpZXMgZm9yIFRocmVhZChSKSBhcmUgYWxsb2NhdGVkIG91dCBvZiB0aGUgPHNhbXA+VGVjaDwvc2FtcD4gcHJvcGVydHkgc2VjdGlvbiAoc2VlIDxhIGhyZWY9IiNwcm9wZXJ0eS1zZWN0aW9ucyI+U2VjdGlvbiA1LjQ8L2E+KS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMSI+Ny4yLjEuPC9hPiA8YSBocmVmPSIjcHJvcC04MC1wcm9wdGhyZWFkbGVhZGVyYWRkciIgaWQ9InByb3AtODAtcHJvcHRocmVhZGxlYWRlcmFkZHIiPlBST1AgODA6IFBST1BfVEhSRUFEX0xFQURFUl9BRERSPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPjY8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjEucC4yIj5UaGUgSVB2NiBhZGRyZXNzIG9mIHRoZSBsZWFkZXIuIChOb3RlOiBNYXkgY2hhbmdlIHRvIGxvbmcgYW5kIHNob3J0IGFkZHJlc3Mgb2YgbGVhZGVyKSA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIiPjcuMi4yLjwvYT4gPGEgaHJlZj0iI3Byb3AtODEtcHJvcHRocmVhZHBhcmVudCIgaWQ9InByb3AtODEtcHJvcHRocmVhZHBhcmVudCI+UFJPUCA4MTogUFJPUF9USFJFQURfUEFSRU5UPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkVTPC9zYW1wPjwvbGk+CisgIDxsaT5MQUREUiwgU0FERFI8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMi5wLjIiPlRoZSBsb25nIGFkZHJlc3MgYW5kIHNob3J0IGFkZHJlc3Mgb2YgdGhlIHBhcmVudCBvZiB0aGlzIG5vZGUuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjMiPjcuMi4zLjwvYT4gPGEgaHJlZj0iI3Byb3AtODItcHJvcHRocmVhZGNoaWxkdGFibGUiIGlkPSJwcm9wLTgyLXByb3B0aHJlYWRjaGlsZHRhYmxlIj5QUk9QIDgyOiBQUk9QX1RIUkVBRF9DSElMRF9UQUJMRTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKHQoRVMpKTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMy5wLjIiPlRhYmxlIGNvbnRhaW5pbmcgdGhlIGxvbmcgYW5kIHNob3J0IGFkZHJlc3NlcyBvZiBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoaXMgbm9kZS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNCI+Ny4yLjQuPC9hPiA8YSBocmVmPSIjcHJvcC04My1wcm9wdGhyZWFkbGVhZGVycmlkIiBpZD0icHJvcC04My1wcm9wdGhyZWFkbGVhZGVycmlkIj5QUk9QIDgzOiBQUk9QX1RIUkVBRF9MRUFERVJfUklEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjQucC4yIj5UaGUgcm91dGVyLWlkIG9mIHRoZSBjdXJyZW50IGxlYWRlci4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNSI+Ny4yLjUuPC9hPiA8YSBocmVmPSIjcHJvcC04NC1wcm9wdGhyZWFkbGVhZGVyd2VpZ2h0IiBpZD0icHJvcC04NC1wcm9wdGhyZWFkbGVhZGVyd2VpZ2h0Ij5QUk9QIDg0OiBQUk9QX1RIUkVBRF9MRUFERVJfV0VJR0hUPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjUucC4yIj5UaGUgbGVhZGVyIHdlaWdodCBvZiB0aGUgY3VycmVudCBsZWFkZXIuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi42Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjYiPjcuMi42LjwvYT4gPGEgaHJlZj0iI3Byb3AtODUtcHJvcHRocmVhZGxvY2FsbGVhZGVyd2VpZ2h0IiBpZD0icHJvcC04NS1wcm9wdGhyZWFkbG9jYWxsZWFkZXJ3ZWlnaHQiPlBST1AgODU6IFBST1BfVEhSRUFEX0xPQ0FMX0xFQURFUl9XRUlHSFQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjYucC4yIj5UaGUgbGVhZGVyIHdlaWdodCBmb3IgdGhpcyBub2RlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuNyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi43Ij43LjIuNy48L2E+IDxhIGhyZWY9IiNwcm9wLTg2LXByb3B0aHJlYWRuZXR3b3JrZGF0YSIgaWQ9InByb3AtODYtcHJvcHRocmVhZG5ldHdvcmtkYXRhIj5QUk9QIDg2OiBQUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEE8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Pbmx5PC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuNy5wLjIiPlRoZSBsb2NhbCBuZXR3b3JrIGRhdGEuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi44Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjgiPjcuMi44LjwvYT4gPGEgaHJlZj0iI3Byb3AtODctcHJvcHRocmVhZG5ldHdvcmtkYXRhdmVyc2lvbiIgaWQ9InByb3AtODctcHJvcHRocmVhZG5ldHdvcmtkYXRhdmVyc2lvbiI+UFJPUCA4NzogUFJPUF9USFJFQURfTkVUV09SS19EQVRBX1ZFUlNJT048L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Pbmx5PC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Uzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjkiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuOSI+Ny4yLjkuPC9hPiA8YSBocmVmPSIjcHJvcC04OC1wcm9wdGhyZWFkc3RhYmxlbmV0d29ya2RhdGEiIGlkPSJwcm9wLTg4LXByb3B0aHJlYWRzdGFibGVuZXR3b3JrZGF0YSI+UFJPUCA4ODogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5EPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi45LnAuMiI+VGhlIGxvY2FsIHN0YWJsZSBuZXR3b3JrIGRhdGEuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4xMCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMCI+Ny4yLjEwLjwvYT4gPGEgaHJlZj0iI3Byb3AtODktcHJvcHRocmVhZHN0YWJsZW5ldHdvcmtkYXRhdmVyc2lvbiIgaWQ9InByb3AtODktcHJvcHRocmVhZHN0YWJsZW5ldHdvcmtkYXRhdmVyc2lvbiI+UFJPUCA4OTogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQV9WRVJTSU9OPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPlM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4xMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMSI+Ny4yLjExLjwvYT4gPGEgaHJlZj0iI3Byb3AtOTAtcHJvcHRocmVhZG9ubWVzaG5ldHMiIGlkPSJwcm9wLTkwLXByb3B0aHJlYWRvbm1lc2huZXRzIj5QUk9QIDkwOiBQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEodCg2Q2JDYikpPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4xMS5wLjIiPkRhdGEgcGVyIGl0ZW0gaXM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Njwvc2FtcD46IElQdjYgUHJlZml4PC9saT4KKyAgPGxpPjxzYW1wPkM8L3NhbXA+OiBQcmVmaXggbGVuZ3RoIGluIGJpdHM8L2xpPgorICA8bGk+PHNhbXA+Yjwvc2FtcD46IFN0YWJsZSBmbGFnPC9saT4KKyAgPGxpPjxzYW1wPkM8L3NhbXA+OiBUTFYgZmxhZ3M8L2xpPgorICA8bGk+PHNhbXA+Yjwvc2FtcD46ICJJcyBkZWZpbmVkIGxvY2FsbHkiIGZsYWcuIFNldCBpZiB0aGlzIG5ldHdvcmsgd2FzIGxvY2FsbHkgZGVmaW5lZC4gQXNzdW1lZCB0byBiZSB0cnVlIGZvciBzZXQsIGluc2VydCBhbmQgcmVwbGFjZS4gQ2xlYXIgaWYgdGhlIG9uIG1lc2ggbmV0d29yayB3YXMgZGVmaW5lZCBieSBhbm90aGVyIG5vZGUuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4xMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMiI+Ny4yLjEyLjwvYT4gPGEgaHJlZj0iI3Byb3AtOTEtcHJvcHRocmVhZG9mZm1lc2hyb3V0ZXMiIGlkPSJwcm9wLTkxLXByb3B0aHJlYWRvZmZtZXNocm91dGVzIj5QUk9QIDkxOiBQUk9QX1RIUkVBRF9PRkZfTUVTSF9ST1VURVM8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEodCg2Q2JDYmIpKTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMTIucC4yIj5EYXRhIHBlciBpdGVtIGlzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPjY8L3NhbXA+OiBSb3V0ZSBQcmVmaXg8L2xpPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IFByZWZpeCBsZW5ndGggaW4gYml0czwvbGk+CisgIDxsaT48c2FtcD5iPC9zYW1wPjogU3RhYmxlIGZsYWc8L2xpPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IFJvdXRlIHByZWZlcmVuY2UgZmxhZ3M8L2xpPgorICA8bGk+PHNhbXA+Yjwvc2FtcD46ICJJcyBkZWZpbmVkIGxvY2FsbHkiIGZsYWcuIFNldCBpZiB0aGlzIHJvdXRlIGluZm8gd2FzIGxvY2FsbHkgZGVmaW5lZCBhcyBwYXJ0IG9mIGxvY2FsIG5ldHdvcmsgZGF0YS4gQXNzdW1lZCB0byBiZSB0cnVlIGZvciBzZXQsIGluc2VydCBhbmQgcmVwbGFjZS4gQ2xlYXIgaWYgdGhlIHJvdXRlIGlzIHBhcnQgb2YgcGFydGl0aW9uJ3MgbmV0d29yayBkYXRhLjwvbGk+CisgIDxsaT48c2FtcD5iPC9zYW1wPjogIk5leHQgaG9wIGlzIHRoaXMgZGV2aWNlIiBmbGFnLiBTZXQgaWYgdGhlIG5leHQgaG9wIGZvciB0aGUgcm91dGUgaXMgdGhpcyBkZXZpY2UgaXRzZWxmIChpLmUuLCByb3V0ZSB3YXMgYWRkZWQgYnkgdGhpcyBkZXZpY2UpIFRoaXMgdmFsdWUgaXMgaWdub3JlZCB3aGVuIGFkZGluZyBhbiBleHRlcm5hbCByb3V0ZS4gRm9yIGFueSBhZGRlZCByb3V0ZSB0aGUgbmV4dCBob3AgaXMgdGhpcyBkZXZpY2UuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4xMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMyI+Ny4yLjEzLjwvYT4gPGEgaHJlZj0iI3Byb3AtOTItcHJvcHRocmVhZGFzc2lzdGluZ3BvcnRzIiBpZD0icHJvcC05Mi1wcm9wdGhyZWFkYXNzaXN0aW5ncG9ydHMiPlBST1AgOTI6IFBST1BfVEhSRUFEX0FTU0lTVElOR19QT1JUUzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+QShTKTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjE0Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjE0Ij43LjIuMTQuPC9hPiA8YSBocmVmPSIjcHJvcC05My1wcm9wdGhyZWFkYWxsb3dsb2NhbG5ldGRhdGFjaGFuZ2UiIGlkPSJwcm9wLTkzLXByb3B0aHJlYWRhbGxvd2xvY2FsbmV0ZGF0YWNoYW5nZSI+UFJPUCA5MzogUFJPUF9USFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4xNC5wLjIiPlNldCB0byB0cnVlIGJlZm9yZSBjaGFuZ2luZyBsb2NhbCBuZXQgZGF0YS4gU2V0IHRvIGZhbHNlIHdoZW4gZmluaXNoZWQuICBUaGlzIGFsbG93cyBjaGFuZ2VzIHRvIGJlIGFnZ3JlZ2F0ZWQgaW50byBzaW5nbGUgZXZlbnRzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMTUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTUiPjcuMi4xNS48L2E+IDxhIGhyZWY9IiNwcm9wLTk0LXByb3B0aHJlYWRtb2RlIiBpZD0icHJvcC05NC1wcm9wdGhyZWFkbW9kZSI+UFJPUCA5NDogUFJPUF9USFJFQURfTU9ERTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Qzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMTUucC4yIj5UaGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZSBUTFYgZm9yIHRoaXMgbm9kZS4gVGhlIG1lYW5pbmcgb2YgdGhlIGJpdHMgaW4gdGhpcyBiaXRmaWVsZCBhcmUgZGVmaW5lZCBieSBzZWN0aW9uIDQuNS4yIG9mIHRoZSBUaHJlYWQoUikgc3BlY2lmaWNhdGlvbi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjE2Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjE2Ij43LjIuMTYuPC9hPiA8YSBocmVmPSIjcHJvcC01Mzc2LXByb3B0aHJlYWRjaGlsZHRpbWVvdXQiIGlkPSJwcm9wLTUzNzYtcHJvcHRocmVhZGNoaWxkdGltZW91dCI+UFJPUCA1Mzc2OiBQUk9QX1RIUkVBRF9DSElMRF9USU1FT1VUPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4xNi5wLjIiPlVzZWQgd2hlbiBvcGVyYXRpbmcgaW4gdGhlIENoaWxkIHJvbGUuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4xNyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xNyI+Ny4yLjE3LjwvYT4gPGEgaHJlZj0iI3Byb3AtNTM3Ny1wcm9wdGhyZWFkcmxvYzE2IiBpZD0icHJvcC01Mzc3LXByb3B0aHJlYWRybG9jMTYiPlBST1AgNTM3NzogUFJPUF9USFJFQURfUkxPQzE2PC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5TPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMTgiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTgiPjcuMi4xOC48L2E+IDxhIGhyZWY9IiNwcm9wLTUzNzgtcHJvcHRocmVhZHJvdXRlcnVwZ3JhZGV0aHJlc2hvbGQiIGlkPSJwcm9wLTUzNzgtcHJvcHRocmVhZHJvdXRlcnVwZ3JhZGV0aHJlc2hvbGQiPlBST1AgNTM3ODogUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMTkiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTkiPjcuMi4xOS48L2E+IDxhIGhyZWY9IiNwcm9wLTUzNzktcHJvcHRocmVhZGNvbnRleHRyZXVzZWRlbGF5IiBpZD0icHJvcC01Mzc5LXByb3B0aHJlYWRjb250ZXh0cmV1c2VkZWxheSI+UFJPUCA1Mzc5OiBQUk9QX1RIUkVBRF9DT05URVhUX1JFVVNFX0RFTEFZPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjAiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjAiPjcuMi4yMC48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODAtcHJvcHRocmVhZG5ldHdvcmtpZHRpbWVvdXQiIGlkPSJwcm9wLTUzODAtcHJvcHRocmVhZG5ldHdvcmtpZHRpbWVvdXQiPlBST1AgNTM4MDogUFJPUF9USFJFQURfTkVUV09SS19JRF9USU1FT1VUPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4yMC5wLjIiPkFsbG93cyB5b3UgdG8gZ2V0IG9yIHNldCB0aGUgVGhyZWFkKFIpIDxzYW1wPk5FVFdPUktfSURfVElNRU9VVDwvc2FtcD4gY29uc3RhbnQsIGFzIGRlZmluZWQgYnkgdGhlIFRocmVhZChSKSBzcGVjaWZpY2F0aW9uLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjEiPjcuMi4yMS48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODEtcHJvcHRocmVhZGFjdGl2ZXJvdXRlcmlkcyIgaWQ9InByb3AtNTM4MS1wcm9wdGhyZWFkYWN0aXZlcm91dGVyaWRzIj5QUk9QIDUzODE6IFBST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGUvV3JpdGUtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEoQyk8L3NhbXA+IChMaXN0IG9mIGFjdGl2ZSB0aHJlYWQgcm91dGVyIGlkcyk8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMjEucC4yIj5Ob3RlIHRoYXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBzdXBwb3J0IDxzYW1wPkNNRF9HRVRfVkFMVUU8L3NhbXA+IHJvdXRlciBpZHMsIGJ1dCBtYXkgc3VwcG9ydCA8c2FtcD5DTURfUkVNT1ZFX1ZBTFVFPC9zYW1wPiB3aGVuIHRoZSBub2RlIGlzIGEgbGVhZGVyLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjIiPjcuMi4yMi48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODItcHJvcHRocmVhZHJsb2MxNmRlYnVncGFzc3RocnUiIGlkPSJwcm9wLTUzODItcHJvcHRocmVhZHJsb2MxNmRlYnVncGFzc3RocnUiPlBST1AgNTM4MjogUFJPUF9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4yMi5wLjIiPkFsbG93IHRoZSBIT1NUIHRvIGRpcmVjdGx5IG9ic2VydmUgYWxsIElQdjYgcGFja2V0cyByZWNlaXZlZCBieSB0aGUgTkNQLCBpbmNsdWRpbmcgb25lcyBzZW50IHRvIHRoZSBSTE9DMTYgYWRkcmVzcy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMjIucC4zIj5EZWZhdWx0IHZhbHVlIGlzIDxzYW1wPmZhbHNlPC9zYW1wPi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjIzIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIzIj43LjIuMjMuPC9hPiA8YSBocmVmPSIjcHJvcC01MzgzLXByb3B0aHJlYWRyb3V0ZXJyb2xlZW5hYmxlZCIgaWQ9InByb3AtNTM4My1wcm9wdGhyZWFkcm91dGVycm9sZWVuYWJsZWQiPlBST1AgNTM4MzogUFJPUF9USFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMjMucC4yIj5BbGxvdyB0aGUgSE9TVCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGUgcm91dGVyIHJvbGUgaXMgZW5hYmxlZC4gIElmIGN1cnJlbnQgcm9sZSBpcyBhIHJvdXRlciwgc2V0dGluZyB0aGlzIHByb3BlcnR5IHRvIDxzYW1wPmZhbHNlPC9zYW1wPiBzdGFydHMgYSByZS1hdHRhY2ggcHJvY2VzcyBhcyBhbiBlbmQtZGV2aWNlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjQiPjcuMi4yNC48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODQtcHJvcHRocmVhZHJvdXRlcmRvd25ncmFkZXRocmVzaG9sZCIgaWQ9InByb3AtNTM4NC1wcm9wdGhyZWFkcm91dGVyZG93bmdyYWRldGhyZXNob2xkIj5QUk9QIDUzODQ6IFBST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjUiPjcuMi4yNS48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODUtcHJvcHRocmVhZHJvdXRlcnNlbGVjdGlvbmppdHRlciIgaWQ9InByb3AtNTM4NS1wcm9wdGhyZWFkcm91dGVyc2VsZWN0aW9uaml0dGVyIj5QUk9QIDUzODU6IFBST1BfVEhSRUFEX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4yNS5wLjIiPlNwZWNpZmllcyB0aGUgc2VsZiBpbXBvc2VkIHJhbmRvbSBkZWxheSBpbiBzZWNvbmRzIGEgUkVFRCB3YWl0cyBiZWZvcmUgcmVnaXN0ZXJpbmcgdG8gYmVjb21lIGFuIEFjdGl2ZSBSb3V0ZXIuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4yNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yNiI+Ny4yLjI2LjwvYT4gPGEgaHJlZj0iI3Byb3AtNTM4Ni1wcm9wdGhyZWFkcHJlZmVycmVkcm91dGVyaWQiIGlkPSJwcm9wLTUzODYtcHJvcHRocmVhZHByZWZlcnJlZHJvdXRlcmlkIj5QUk9QIDUzODY6IFBST1BfVEhSRUFEX1BSRUZFUlJFRF9ST1VURVJfSUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogV3JpdGUtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjI2LnAuMiI+U3BlY2lmaWVzIHRoZSBwcmVmZXJyZWQgUm91dGVyIElkLiBVcG9uIGJlY29taW5nIGEgcm91dGVyL2xlYWRlciB0aGUgbm9kZSBhdHRlbXB0cyB0byB1c2UgdGhpcyBSb3V0ZXIgSWQuIElmIHRoZSBwcmVmZXJyZWQgUm91dGVyIElkIGlzIG5vdCBzZXQgb3IgaWYgaXQgY2FuIG5vdCBiZSB1c2VkLCBhIHJhbmRvbWx5IGdlbmVyYXRlZCByb3V0ZXIgaWQgaXMgcGlja2VkLiBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgb25seSB3aGVuIHRoZSBkZXZpY2Ugcm9sZSBpcyBlaXRoZXIgZGV0YWNoZWQgb3IgZGlzYWJsZWQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4yNyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yNyI+Ny4yLjI3LjwvYT4gPGEgaHJlZj0iI3Byb3AtNTM4Ny1wcm9wdGhyZWFkbmVpZ2hib3J0YWJsZSIgaWQ9InByb3AtNTM4Ny1wcm9wdGhyZWFkbmVpZ2hib3J0YWJsZSI+UFJPUCA1Mzg3OiBQUk9QX1RIUkVBRF9ORUlHSEJPUl9UQUJMRTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKHQoRVNMQ2NDYkxMKSk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjI3LnAuMiI+RGF0YSBwZXIgaXRlbSBpczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5FPC9zYW1wPjogRXh0ZW5kZWQvbG9uZyBhZGRyZXNzPC9saT4KKyAgPGxpPjxzYW1wPlM8L3NhbXA+OiBSTE9DMTY8L2xpPgorICA8bGk+PHNhbXA+TDwvc2FtcD46IEFnZTwvbGk+CisgIDxsaT48c2FtcD5DPC9zYW1wPjogTGluayBRdWFsaXR5IEluPC9saT4KKyAgPGxpPjxzYW1wPmM8L3NhbXA+OiBBdmVyYWdlIFJTUzwvbGk+CisgIDxsaT48c2FtcD5DPC9zYW1wPjogTW9kZSAoYml0LWZsYWdzKTwvbGk+CisgIDxsaT48c2FtcD5iPC9zYW1wPjogPHNhbXA+dHJ1ZTwvc2FtcD4gaWYgbmVpZ2hib3IgaXMgYSBjaGlsZCwgPHNhbXA+ZmFsc2U8L3NhbXA+IG90aGVyd2lzZS48L2xpPgorICA8bGk+PHNhbXA+TDwvc2FtcD46IExpbmsgRnJhbWUgQ291bnRlcjwvbGk+CisgIDxsaT48c2FtcD5MPC9zYW1wPjogTUxFIEZyYW1lIENvdW50ZXI8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjI4Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjI4Ij43LjIuMjguPC9hPiA8YSBocmVmPSIjcHJvcC01Mzg4LXByb3B0aHJlYWRjaGlsZGNvdW50bWF4IiBpZD0icHJvcC01Mzg4LXByb3B0aHJlYWRjaGlsZGNvdW50bWF4Ij5QUk9QIDUzODg6IFBST1BfVEhSRUFEX0NISUxEX0NPVU5UX01BWDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Qzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMjgucC4yIj5TcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoaWxkcmVuIGN1cnJlbnRseSBhbGxvd2VkLiAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IHdoZW4gVGhyZWFkKFIpIHByb3RvY29sIG9wZXJhdGlvbiBoYXMgYmVlbiBzdG9wcGVkLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjkiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjkiPjcuMi4yOS48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODktcHJvcHRocmVhZGxlYWRlcm5ldHdvcmtkYXRhIiBpZD0icHJvcC01Mzg5LXByb3B0aHJlYWRsZWFkZXJuZXR3b3JrZGF0YSI+UFJPUCA1Mzg5OiBQUk9QX1RIUkVBRF9MRUFERVJfTkVUV09SS19EQVRBPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkQ8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjI5LnAuMiI+VGhlIGxlYWRlciBuZXR3b3JrIGRhdGEuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4zMCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zMCI+Ny4yLjMwLjwvYT4gPGEgaHJlZj0iI3Byb3AtNTM5MC1wcm9wdGhyZWFkc3RhYmxlbGVhZGVybmV0d29ya2RhdGEiIGlkPSJwcm9wLTUzOTAtcHJvcHRocmVhZHN0YWJsZWxlYWRlcm5ldHdvcmtkYXRhIj5QUk9QIDUzOTA6IFBST1BfVEhSRUFEX1NUQUJMRV9MRUFERVJfTkVUV09SS19EQVRBPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkQ8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjMwLnAuMiI+VGhlIHN0YWJsZSBsZWFkZXIgbmV0d29yayBkYXRhLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMzEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzEiPjcuMi4zMS48L2E+IDxhIGhyZWY9IiNwcm9wLXRocmVhZC1qb2luZXJzIiBpZD0icHJvcC10aHJlYWQtam9pbmVycyI+UFJPUCA1MzkxOiBQUk9QX1RIUkVBRF9KT0lORVJTPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IEluc2VydC9SZW1vdmUgT25seSAob3B0aW9uYWxseSBSZWFkLVdyaXRlKTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEodChVTEUpKTwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgY2FwYWJpbGl0eTogPHNhbXA+Q0FQX1RIUkVBRF9DT01NSVNTSU9ORVI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjMxLnAuMiI+RGF0YSBwZXIgaXRlbSBpczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5VPC9zYW1wPjogUFNLZDwvbGk+CisgIDxsaT48c2FtcD5MPC9zYW1wPjogVGltZW91dCBpbiBzZWNvbmRzPC9saT4KKyAgPGxpPjxzYW1wPkU8L3NhbXA+OiBFeHRlbmRlZC9sb25nIGFkZHJlc3MgKG9wdGlvbmFsKTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4zMS5wLjQiPlBhc3Nlc3MgUHJlLVNoYXJlZCBLZXkgZm9yIHRoZSBEZXZpY2UgdG8gdGhlIE5DUCBpbiB0aGUgY29tbWlzc2lvbmluZyBwcm9jZXNzLiAgV2hlbiB0aGUgRXh0ZW5kZWQgYWRkcmVzcyBpcyBvbW1pdGVkIGFsbCBEZXZpY2VzIHdoaWNoIHByb3ZpZGVkIGEgdmFsaWQgUFNLZCBhcmUgYWxsb3dlZCB0byBqb2luIHRoZSBUaHJlYWQoUikgTmV0d29yay4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjMyIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjMyIj43LjIuMzIuPC9hPiA8YSBocmVmPSIjcHJvcC10aHJlYWQtY29tbWlzc2lvbmVyLWVuYWJsZWQiIGlkPSJwcm9wLXRocmVhZC1jb21taXNzaW9uZXItZW5hYmxlZCI+UFJPUCA1MzkyOiBQUk9QX1RIUkVBRF9DT01NSVNTSU9ORVJfRU5BQkxFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBXcml0ZSBvbmx5IChvcHRpb25hbGx5IFJlYWQtV3JpdGUpPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgY2FwYWJpbGl0eTogPHNhbXA+Q0FQX1RIUkVBRF9DT01NSVNTSU9ORVI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjMyLnAuMiI+U2V0IHRvIHRydWUgdG8gZW5hYmxlIHRoZSBuYXRpdmUgY29tbWlzc2lvbmVyLiBJdCBpcyBtYW5kYXRvcnkgYmVmb3JlIGFkZGluZyB0aGUgam9pbmVyIHRvIHRoZSBuZXR3b3JrLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMzMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzMiPjcuMi4zMy48L2E+IDxhIGhyZWY9IiNwcm9wLXRocmVhZC10bWYtcHJveHktZW5hYmxlZCIgaWQ9InByb3AtdGhyZWFkLXRtZi1wcm94eS1lbmFibGVkIj5QUk9QIDUzOTM6IFBST1BfVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+CisgIDxsaT5SZXF1aXJlZCBjYXBhYmlsaXR5OiA8c2FtcD5DQVBfVEhSRUFEX1RNRl9QUk9YWTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMzMucC4yIj5TZXQgdG8gdHJ1ZSB0byBlbmFibGUgdGhlIFRNRiBwcm94eS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjM0Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjM0Ij43LjIuMzQuPC9hPiA8YSBocmVmPSIjcHJvcC10aHJlYWQtdG1mLXByb3h5LXN0cmVhbSIgaWQ9InByb3AtdGhyZWFkLXRtZi1wcm94eS1zdHJlYW0iPlBST1AgNTM5NDogUFJPUF9USFJFQURfVE1GX1BST1hZX1NUUkVBTTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlLVN0cmVhbTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmRTUzwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgY2FwYWJpbGl0eTogPHNhbXA+Q0FQX1RIUkVBRF9UTUZfUFJPWFk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjM0LnAuMiI+RGF0YSBwZXIgaXRlbSBpczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5kPC9zYW1wPjogQ29BUCBmcmFtZTwvbGk+CisgIDxsaT48c2FtcD5TPC9zYW1wPjogc291cmNlL2Rlc3RpbmF0aW9uIFJMT0MvQUxPQzwvbGk+CisgIDxsaT48c2FtcD5TPC9zYW1wPjogc291cmNlL2Rlc3RpbmF0aW9uIHBvcnQ8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZWN0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+TGVuZ3RoPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5Db0FQPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5sb2NhdG9yPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5wb3J0PC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMzQucC40Ij5UaGlzIHByb3BlcnR5IGFsbG93cyB0aGUgaG9zdCB0byBzZW5kIGFuZCByZWNlaXZlIFRNRiBtZXNzYWdlcyBmcm9tIHRoZSBOQ1AncyBSTE9DIGFkZHJlc3MgYW5kIHN1cHBvcnQgVGhyZWFkLXNwZWNpZmljIGJvcmRlciByb3V0ZXIgZnVuY3Rpb25zLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMzUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzUiPjcuMi4zNS48L2E+IDxhIGhyZWY9IiNwcm9wLXRocmVhZC1kaXNjb3Zlcnktc2Nhbi1qb2luZXItZmxhZyIgaWQ9InByb3AtdGhyZWFkLWRpc2NvdmVyeS1zY2FuLWpvaW5lci1mbGFnIj5QUk9QIDUzOTU6IFBST1BfVEhSRUFEX0RJU09WRVJZX1NDQU5fSk9JTkVSX0ZMQUc8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6OiA8c2FtcD5iPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4zNS5wLjIiPlRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSB2YWx1ZSB1c2VkIGluIFRocmVhZChSKSBNTEUgRGlzY292ZXJ5IFJlcXVlc3QgVExWIGR1cmluZyBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24uIERlZmF1bHQgdmFsdWUgaXMgPHNhbXA+ZmFsc2U8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMzYiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzYiPjcuMi4zNi48L2E+IDxhIGhyZWY9IiNwcm9wLXRocmVhZC1kaXNjb3Zlcnktc2Nhbi1lbmFibGUtZmlsdGVyaW5nIiBpZD0icHJvcC10aHJlYWQtZGlzY292ZXJ5LXNjYW4tZW5hYmxlLWZpbHRlcmluZyI+UFJPUCA1Mzk2OiBQUk9QX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9FTkFCTEVfRklMVEVSSU5HPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOjogPHNhbXA+Yjwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMzYucC4yIj5UaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgRVVJNjQgZmlsdGVyaW5nIGR1cmluZyBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24uIERlZmF1bHQgdmFsdWUgaXMgPHNhbXA+ZmFsc2U8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMzciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzciPjcuMi4zNy48L2E+IDxhIGhyZWY9IiNwcm9wLXRocmVhZC1kaXNjb3Zlcnktc2Nhbi1wYW5pZCIgaWQ9InByb3AtdGhyZWFkLWRpc2NvdmVyeS1zY2FuLXBhbmlkIj5QUk9QIDUzOTc6IFBST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX1BBTklEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtd3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOjogPHNhbXA+Uzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMzcucC4yIj5UaGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgUEFOSUQgdXNlZCBmb3IgZmlsdGVyaW5nIGR1cmluZyBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24uIERlZmF1bHQgdmFsdWUgaXMgPHNhbXA+MHhmZmZmPC9zYW1wPiAoYnJvYWRjYXN0IFBBTklEKSB3aGljaCBkaXNhYmxlcyBQQU5JRCBmaWx0ZXJpbmcuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4zOCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zOCI+Ny4yLjM4LjwvYT4gPGEgaHJlZj0iI3Byb3AtdGhyZWFkLXN0ZWVyaW5nLWRhdGEiIGlkPSJwcm9wLXRocmVhZC1zdGVlcmluZy1kYXRhIj5QUk9QIDUzOTg6IFBST1BfVEhSRUFEX1NURUVSSU5HX0RBVEE8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogV3JpdGUtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkU8L3NhbXA+PC9saT4KKyAgPGxpPlJlcXVpcmVkIGNhcGFiaWxpdHk6IDxzYW1wPkNBUF9PT0JfU1RFRVJJTkdfREFUQTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMzgucC4yIj5UaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgc3RlZXJpbmcgZGF0YSBmb3IgTUxFIERpc2NvdmVyeSBSZXNwb25zZSBtZXNzYWdlcy4gIDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+QWxsIHplcm9zIHRvIGNsZWFyIHRoZSBzdGVlcmluZyBkYXRhIChpbmRpY2F0aW5nIG5vIHN0ZWVyaW5nIGRhdGEpLjwvbGk+CisgIDxsaT5BbGwgMHhGRnMgdG8gc2V0IHRoZSBzdGVlcmluZyBkYXRhIChibG9vbSBmaWx0ZXIpIHRvIGFjY2VwdC9hbGxvdyBhbGwuPC9saT4KKyAgPGxpPkEgc3BlY2lmaWMgRVVJNjQgd2hpY2ggaXMgdGhlbiBhZGRlZCB0byBzdGVlcmluZyBkYXRhL2Jsb29tIGZpbHRlci48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uOCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjgiPjguPC9hPiA8YSBocmVmPSIjZmVhdHVyZS1uZXR3b3JrLXNhdmUiIGlkPSJmZWF0dXJlLW5ldHdvcmstc2F2ZSI+RmVhdHVyZTogTmV0d29yayBTYXZlPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uOC5wLjEiPlRoZSBuZXR3b3JrIHNhdmUvcmVjYWxsIGZlYXR1cmUgaXMgYW4gb3B0aW9uYWwgTkNQIGNhcGFiaWxpdHkgdGhhdCwgd2hlbiBwcmVzZW50LCBhbGxvd3MgdGhlIGhvc3QgdG8gc2F2ZSBhbmQgcmVjYWxsIG5ldHdvcmsgY3JlZGVudGlhbHMgYW5kIHN0YXRlIHRvIGFuZCBmcm9tIG5vbnZvbGF0aWxlIHN0b3JhZ2UuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uOC5wLjIiPlRoZSBwcmVzZW5jZSBvZiB0aGUgc2F2ZS9yZWNhbGwgZmVhdHVyZSBjYW4gYmUgZGV0ZWN0ZWQgYnkgY2hlY2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgPHNhbXA+Q0FQX05FVF9TQVZFPC9zYW1wPiBjYXBhYmlsaXR5IGluIDxzYW1wPlBST1BfQ0FQUzwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uOC5wLjMiPk5ldHdvcmsgY2xlYXIgZmVhdHVyZSBhbGxvd3MgaG9zdCB0byBlcmFzZSBhbGwgbmV0d29yayBjcmVkZW50aWFscyBhbmQgc3RhdGUgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi44LjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEiPjguMS48L2E+IDxhIGhyZWY9IiNjb21tYW5kcy0xIiBpZD0iY29tbWFuZHMtMSI+Q29tbWFuZHM8L2E+PC9oMT4KKzxoMSBpZD0icmZjLnNlY3Rpb24uOC4xLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEuMSI+OC4xLjEuPC9hPiA8YSBocmVmPSIjY21kLTktaG9zdG5jcC1jbWRuZXRzYXZlIiBpZD0iY21kLTktaG9zdG5jcC1jbWRuZXRzYXZlIj5DTUQgOTogKEhvc3QtJmd0O05DUCkgQ01EX05FVF9TQVZFPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfTkVUX1NBVkU8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4xLnAuMSI+U2F2ZSBuZXR3b3JrIHN0YXRlIGNvbW1hbmQuIFNhdmVzIGFueSBjdXJyZW50IG5ldHdvcmsgY3JlZGVudGlhbHMgYW5kIHN0YXRlIG5lY2Vzc2FyeSB0byByZWNvbm5lY3QgdG8gdGhlIGN1cnJlbnQgbmV0d29yayB0byBub24tdm9sYXRpbGUgbWVtb3J5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4xLnAuMiI+VGhpcyBvcGVyYXRpb24gYWZmZWN0cyBub24tdm9sYXRpbGUgbWVtb3J5IG9ubHkuIFRoZSBjdXJyZW50IG5ldHdvcmsgaW5mb3JtYXRpb24gc3RvcmVkIGluIHZvbGF0aWxlIG1lbW9yeSBpcyB1bmFmZmVjdGVkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4xLnAuMyI+VGhlIHJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCBpcyBhbHdheXMgYSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4gZm9yIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+LCBpbmRpY2F0aW5nIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi44LjEuMS5wLjQiPlRoaXMgY29tbWFuZCBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgPHNhbXA+Q0FQX05FVF9TQVZFPC9zYW1wPiBjYXBhYmlsaXR5IGlzIHNldC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uOC4xLjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEuMiI+OC4xLjIuPC9hPiA8YSBocmVmPSIjY21kLTEwLWhvc3RuY3AtY21kbmV0Y2xlYXIiIGlkPSJjbWQtMTAtaG9zdG5jcC1jbWRuZXRjbGVhciI+Q01EIDEwOiAoSG9zdC0mZ3Q7TkNQKSBDTURfTkVUX0NMRUFSPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfTkVUX0NMRUFSPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi44LjEuMi5wLjEiPkNsZWFyIHNhdmVkIG5ldHdvcmsgc2V0dGluZ3MgY29tbWFuZC4gRXJhc2VzIGFsbCBuZXR3b3JrIGNyZWRlbnRpYWxzIGFuZCBzdGF0ZSBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuIFRoZSBlcmFzZWQgc2V0dGluZ3MgaW5jbHVkZSBhbnkgZGF0YSBzYXZlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBuZXR3b3JrIHN0YWNrIGZpcm13YXJlIGFuZC9vciBkYXRhIHNhdmVkIGJ5IDxzYW1wPkNNRF9ORVRfU0FWRTwvc2FtcD4gb3BlcmF0aW9uLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4yLnAuMiI+VGhpcyBvcGVyYXRpb24gYWZmZWN0cyBub24tdm9sYXRpbGUgbWVtb3J5IG9ubHkuIFRoZSBjdXJyZW50IG5ldHdvcmsgaW5mb3JtYXRpb24gc3RvcmVkIGluIHZvbGF0aWxlIG1lbW9yeSBpcyB1bmFmZmVjdGVkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4yLnAuMyI+VGhlIHJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCBpcyBhbHdheXMgYSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4gZm9yIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+LCBpbmRpY2F0aW5nIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi44LjEuMi5wLjQiPlRoaXMgY29tbWFuZCBpcyBhbHdheXMgYXZhaWxhYmxlIGluZGVwZW5kZW50IG9mIHRoZSB2YWx1ZSBvZiA8c2FtcD5DQVBfTkVUX1NBVkU8L3NhbXA+IGNhcGFiaWxpdHkuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjguMS4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uOC4xLjMiPjguMS4zLjwvYT4gPGEgaHJlZj0iI2NtZC0xMS1ob3N0bmNwLWNtZG5ldHJlY2FsbCIgaWQ9ImNtZC0xMS1ob3N0bmNwLWNtZG5ldHJlY2FsbCI+Q01EIDExOiAoSG9zdC0mZ3Q7TkNQKSBDTURfTkVUX1JFQ0FMTDwvYT48L2gxPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkhFQURFUjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q01EX05FVF9SRUNBTEw8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4zLnAuMSI+UmVjYWxsIHNhdmVkIG5ldHdvcmsgc3RhdGUgY29tbWFuZC4gUmVjYWxscyBhbnkgcHJldmlvdXNseSBzYXZlZCBuZXR3b3JrIGNyZWRlbnRpYWxzIGFuZCBzdGF0ZSBwcmV2aW91c2x5IHN0b3JlZCBieSA8c2FtcD5DTURfTkVUX1NBVkU8L3NhbXA+IGZyb20gbm9uLXZvbGF0aWxlIG1lbW9yeS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi44LjEuMy5wLjIiPlRoaXMgY29tbWFuZCB3aWxsIHR5cGljYWxseSBnZW5lcmF0ZWQgc2V2ZXJhbCB1bnNvbGljaXRlZCBwcm9wZXJ0eSB1cGRhdGVzIGFzIHRoZSBuZXR3b3JrIHN0YXRlIGlzIGxvYWRlZC4gQXQgdGhlIGNvbmNsdXNpb24gb2YgbG9hZGluZywgdGhlIGF1dGhvcml0YXRpdmUgcmVzcG9uc2UgdG8gdGhpcyBjb21tYW5kIGlzIGFsd2F5cyBhIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lTPC9zYW1wPiBmb3IgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4sIGluZGljYXRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4zLnAuMyI+VGhpcyBjb21tYW5kIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSA8c2FtcD5DQVBfTkVUX1NBVkU8L3NhbXA+IGNhcGFiaWxpdHkgaXMgc2V0LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uOSI+OS48L2E+IDxhIGhyZWY9IiNmZWF0dXJlLWhvc3QtYnVmZmVyLW9mZmxvYWQiIGlkPSJmZWF0dXJlLWhvc3QtYnVmZmVyLW9mZmxvYWQiPkZlYXR1cmU6IEhvc3QgQnVmZmVyIE9mZmxvYWQ8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LnAuMSI+VGhlIG1lbW9yeSBvbiBhbiBOQ1AgbWF5IGJlIG11Y2ggbW9yZSBsaW1pdGVkIHRoYW4gdGhlIG1lbW9yeSBvbiB0aGUgaG9zdCBwcm9jZXNzb3IuIEluIHN1Y2ggc2l0dWF0aW9ucywgaXQgaXMgc29tZXRpbWVzIHVzZWZ1bCBmb3IgdGhlIE5DUCB0byBvZmZsb2FkIGJ1ZmZlcnMgdG8gdGhlIGhvc3QgcHJvY2Vzc29yIHRlbXBvcmFyaWx5IHNvIHRoYXQgaXQgY2FuIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9ucy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LnAuMiI+SG9zdCBidWZmZXIgb2ZmbG9hZCBpcyBhbiBvcHRpb25hbCBOQ1AgY2FwYWJpbGl0eSB0aGF0LCB3aGVuIHByZXNlbnQsIGFsbG93cyB0aGUgTkNQIHRvIHN0b3JlIGRhdGEgYnVmZmVycyBvbiB0aGUgaG9zdCBwcm9jZXNzb3IgdGhhdCBjYW4gYmUgcmVjYWxsZWQgYXQgYSBsYXRlciB0aW1lLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjkucC4zIj5UaGUgcHJlc2VuY2Ugb2YgdGhpcyBmZWF0dXJlIGNhbiBiZSBkZXRlY3RlZCBieSB0aGUgaG9zdCBieSBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSA8c2FtcD5DQVBfSEJPPC9zYW1wPiBjYXBhYmlsaXR5IGluIDxzYW1wPlBST1BfQ0FQUzwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjkuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMSI+OS4xLjwvYT4gPGEgaHJlZj0iI2NvbW1hbmRzLTIiIGlkPSJjb21tYW5kcy0yIj5Db21tYW5kczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjEuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4xIj45LjEuMS48L2E+IDxhIGhyZWY9IiNjbWQtMTItbmNwaG9zdC1jbWRoYm9vZmZsb2FkIiBpZD0iY21kLTEyLW5jcGhvc3QtY21kaGJvb2ZmbG9hZCI+Q01EIDEyOiAoTkNQLSZndDtIb3N0KSBDTURfSEJPX09GRkxPQUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkxzY0Q8L3NhbXA+IDx1bD48bGk+PHNhbXA+T2ZmbG9hZElkPC9zYW1wPjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyPC9saT48bGk+PHNhbXA+RXhwaXJhdGlvbjwvc2FtcD46IEluIHNlY29uZHMtZnJvbS1ub3c8L2xpPjxsaT48c2FtcD5Qcmlvcml0eTwvc2FtcD46IENyaXRpY2FsLCBIaWdoLCBNZWRpdW0sIExvdzwvbGk+PGxpPjxzYW1wPkRhdGE8L3NhbXA+OiBEYXRhIHRvIG9mZmxvYWQ8L2xpPjwvdWw+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjkuMS4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uOS4xLjIiPjkuMS4yLjwvYT4gPGEgaHJlZj0iI2NtZC0xMy1uY3Bob3N0LWNtZGhib3JlY2xhaW0iIGlkPSJjbWQtMTMtbmNwaG9zdC1jbWRoYm9yZWNsYWltIj5DTUQgMTM6IChOQ1AtJmd0O0hvc3QpIENNRF9IQk9fUkVDTEFJTTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5Bcmd1bWVudC1FbmNvZGluZzogPHNhbXA+TGI8L3NhbXA+IDx1bD48bGk+PHNhbXA+T2ZmbG9hZElkPC9zYW1wPjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyPC9saT48bGk+PHNhbXA+S2VlcEFmdGVyUmVjbGFpbTwvc2FtcD46IElmIG5vdCBzZXQgdG8gdHJ1ZSwgdGhlIGJsb2NrIHdpbGwgYmUgZHJvcHBlZCBieSB0aGUgaG9zdCBhZnRlciBpdCBpcyBzZW50IHRvIHRoZSBOQ1AuPC9saT48L3VsPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjEuMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4zIj45LjEuMy48L2E+IDxhIGhyZWY9IiNjbWQtMTQtbmNwaG9zdC1jbWRoYm9kcm9wIiBpZD0iY21kLTE0LW5jcGhvc3QtY21kaGJvZHJvcCI+Q01EIDE0OiAoTkNQLSZndDtIb3N0KSBDTURfSEJPX0RST1A8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkw8L3NhbXA+IDx1bD48bGk+PHNhbXA+T2ZmbG9hZElkPC9zYW1wPjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyPC9saT48L3VsPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjEuNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS40Ij45LjEuNC48L2E+IDxhIGhyZWY9IiNjbWQtMTUtaG9zdG5jcC1jbWRoYm9vZmZsb2FkZWQiIGlkPSJjbWQtMTUtaG9zdG5jcC1jbWRoYm9vZmZsb2FkZWQiPkNNRCAxNTogKEhvc3QtJmd0O05DUCkgQ01EX0hCT19PRkZMT0FERUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkxpPC9zYW1wPiA8dWw+PGxpPjxzYW1wPk9mZmxvYWRJZDwvc2FtcD46IDMyLWJpdCB1bmlxdWUgYmxvY2sgaWRlbnRpZmllcjwvbGk+PGxpPjxzYW1wPlN0YXR1czwvc2FtcD46IFN0YXR1cyBjb2RlIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uPC9saT48L3VsPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjEuNSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS41Ij45LjEuNS48L2E+IDxhIGhyZWY9IiNjbWQtMTYtaG9zdG5jcC1jbWRoYm9yZWNsYWltZWQiIGlkPSJjbWQtMTYtaG9zdG5jcC1jbWRoYm9yZWNsYWltZWQiPkNNRCAxNjogKEhvc3QtJmd0O05DUCkgQ01EX0hCT19SRUNMQUlNRUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkxpRDwvc2FtcD4gPHVsPjxsaT48c2FtcD5PZmZsb2FkSWQ8L3NhbXA+OiAzMi1iaXQgdW5pcXVlIGJsb2NrIGlkZW50aWZpZXI8L2xpPjxsaT48c2FtcD5TdGF0dXM8L3NhbXA+OiBTdGF0dXMgY29kZSBmb3IgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLjwvbGk+PGxpPjxzYW1wPkRhdGE8L3NhbXA+OiBEYXRhIHRoYXQgd2FzIHByZXZpb3VzbHkgb2ZmbG9hZGVkIChpZiBhbnkpPC9saT48L3VsPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjEuNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS42Ij45LjEuNi48L2E+IDxhIGhyZWY9IiNjbWQtMTctaG9zdG5jcC1jbWRoYm9kcm9wcGVkIiBpZD0iY21kLTE3LWhvc3RuY3AtY21kaGJvZHJvcHBlZCI+Q01EIDE3OiAoSG9zdC0mZ3Q7TkNQKSBDTURfSEJPX0RST1BQRUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkxpPC9zYW1wPiA8dWw+PGxpPjxzYW1wPk9mZmxvYWRJZDwvc2FtcD46IDMyLWJpdCB1bmlxdWUgYmxvY2sgaWRlbnRpZmllcjwvbGk+PGxpPjxzYW1wPlN0YXR1czwvc2FtcD46IFN0YXR1cyBjb2RlIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uPC9saT48L3VsPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIiPjkuMi48L2E+IDxhIGhyZWY9IiNwcm9wZXJ0aWVzLTEiIGlkPSJwcm9wZXJ0aWVzLTEiPlByb3BlcnRpZXM8L2E+PC9oMT4KKzxoMSBpZD0icmZjLnNlY3Rpb24uOS4yLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIuMSI+OS4yLjEuPC9hPiA8YSBocmVmPSIjcHJvcC1oYm8tbWVtLW1heCIgaWQ9InByb3AtaGJvLW1lbS1tYXgiPlBST1AgMTA6IFBST1BfSEJPX01FTV9NQVg8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkw8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjQ8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPlBST1BfSEJPX01FTV9NQVg8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjkuMi4xLnAuMiI+RGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYXkgYmUgb2ZmbG9hZGVkIGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdC4gRGVmYXVsdCB2YWx1ZSBpcyB6ZXJvLCBzbyB0aGlzIHByb3BlcnR5IG11c3QgYmUgc2V0IGJ5IHRoZSBob3N0IHRvIGEgbm9uLXplcm8gdmFsdWUgYmVmb3JlIHRoZSBOQ1Agd2lsbCBiZWdpbiBvZmZsb2FkaW5nIGJsb2Nrcy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LjIuMS5wLjMiPlRoaXMgdmFsdWUgaXMgZW5jb2RlZCBhcyBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlci4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LjIuMS5wLjQiPlRoaXMgcHJvcGVydHkgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIDxzYW1wPkNBUF9IQk88L3NhbXA+IGNhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiA8c2FtcD5QUk9QX0NBUFM8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjIuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMi4yIj45LjIuMi48L2E+IDxhIGhyZWY9IiNwcm9wLWhiby1ibG9jay1tYXgiIGlkPSJwcm9wLWhiby1ibG9jay1tYXgiPlBST1AgMTE6IFBST1BfSEJPX0JMT0NLX01BWDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Uzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+UFJPUF9IQk9fQkxPQ0tfTUFYPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LjIuMi5wLjIiPkRlc2NyaWJlcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IG1heSBiZSBvZmZsb2FkZWQgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0LiBEZWZhdWx0IHZhbHVlIGlzIDMyLiBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gemVybyB3aWxsIGNhdXNlIGhvc3QgYmxvY2sgb2ZmbG9hZCB0byBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LjIuMi5wLjMiPlRoaXMgdmFsdWUgaXMgZW5jb2RlZCBhcyBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlci4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LjIuMi5wLjQiPlRoaXMgcHJvcGVydHkgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIDxzYW1wPkNBUF9IQk88L3NhbXA+IGNhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiA8c2FtcD5QUk9QX0NBUFM8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEwIj4xMC48L2E+IDxhIGhyZWY9IiNmZWF0dXJlLWphbS1kZXRlY3QiIGlkPSJmZWF0dXJlLWphbS1kZXRlY3QiPkZlYXR1cmU6IEphbSBEZXRlY3Rpb248L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMC5wLjEiPkphbW1pbmcgZGV0ZWN0aW9uIGlzIGEgZmVhdHVyZSB0aGF0IGFsbG93cyB0aGUgTkNQIHRvIHJlcG9ydCB3aGVuIGl0IGRldGVjdHMgaGlnaCBsZXZlbHMgb2YgaW50ZXJmZXJlbmNlIHRoYXQgYXJlIGNoYXJhY3RlcmlzdGljIG9mIGludGVudGlvbmFsIHNpZ25hbCBqYW1taW5nLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEwLnAuMiI+VGhlIHByZXNlbmNlIG9mIHRoaXMgZmVhdHVyZSBjYW4gYmUgZGV0ZWN0ZWQgYnkgY2hlY2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgPHNhbXA+Q0FQX0pBTV9ERVRFQ1Q8L3NhbXA+ICh2YWx1ZSA2KSBjYXBhYmlsaXR5IGluIDxzYW1wPlBST1BfQ0FQUzwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEwLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xIj4xMC4xLjwvYT4gPGEgaHJlZj0iI3Byb3BlcnRpZXMtMiIgaWQ9InByb3BlcnRpZXMtMiI+UHJvcGVydGllczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMC4xLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjEiPjEwLjEuMS48L2E+IDxhIGhyZWY9IiNwcm9wLWphbS1kZXRlY3QtZW5hYmxlIiBpZD0icHJvcC1qYW0tZGV0ZWN0LWVuYWJsZSI+UFJPUCA0NjA4OiBQUk9QX0pBTV9ERVRFQ1RfRU5BQkxFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+CisgIDxsaT5EZWZhdWx0IFZhbHVlOiBmYWxzZTwvbGk+CisgIDxsaT5SRVFVSVJFRCBmb3IgPHNhbXA+Q0FQX0pBTV9ERVRFQ1Q8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPlBST1BfSkFNX0RFVEVDVF9FTkFCTEU8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEwLjEuMS5wLjIiPkluZGljYXRlcyBpZiBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgamFtbWluZyBkZXRlY3Rpb24uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTAuMS4xLnAuMyI+VGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgPHNhbXA+Q0FQX0pBTV9ERVRFQ1Q8L3NhbXA+IGNhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiA8c2FtcD5QUk9QX0NBUFM8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMC4xLjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjIiPjEwLjEuMi48L2E+IDxhIGhyZWY9IiNwcm9wLWphbS1kZXRlY3RlZCIgaWQ9InByb3AtamFtLWRldGVjdGVkIj5QUk9QIDQ2MDk6IFBST1BfSkFNX0RFVEVDVEVEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKyAgPGxpPlJFUVVJUkVEIGZvciA8c2FtcD5DQVBfSkFNX0RFVEVDVDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+UFJPUF9KQU1fREVURUNURUQ8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEwLjEuMi5wLjIiPlNldCB0byB0cnVlIGlmIHJhZGlvIGphbW1pbmcgaXMgZGV0ZWN0ZWQuIFNldCB0byBmYWxzZSBvdGhlcndpc2UuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTAuMS4yLnAuMyI+V2hlbiBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkLCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGFyZSBlbWl0dGVkIGFzeW5jaHJvbm91c2x5IHZpYSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTAuMS4yLnAuNCI+VGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgPHNhbXA+Q0FQX0pBTV9ERVRFQ1Q8L3NhbXA+IGNhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiA8c2FtcD5QUk9QX0NBUFM8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMC4xLjMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjMiPjEwLjEuMy48L2E+IDxhIGhyZWY9IiNwcm9wLTQ2MTAtcHJvcGphbWRldGVjdHJzc2l0aHJlc2hvbGQiIGlkPSJwcm9wLTQ2MTAtcHJvcGphbWRldGVjdHJzc2l0aHJlc2hvbGQiPlBST1AgNDYxMDogUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5jPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0czogZEJtPC9saT4KKyAgPGxpPkRlZmF1bHQgVmFsdWU6IEltcGxlbWVudGF0aW9uLXNwZWNpZmljPC9saT4KKyAgPGxpPlJFQ09NTUVOREVEIGZvciA8c2FtcD5DQVBfSkFNX0RFVEVDVDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMC4xLjMucC4yIj5UaGlzIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIHRocmVzaG9sZCBSU1NJIGxldmVsIChtZWFzdXJlZCBpbiBkQm0pIGFib3ZlIHdoaWNoIHRoZSBqYW1taW5nIGRldGVjdGlvbiB3aWxsIGNvbnNpZGVyIHRoZSBjaGFubmVsIGJsb2NrZWQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEwLjEuNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEwLjEuNCI+MTAuMS40LjwvYT4gPGEgaHJlZj0iI3Byb3AtNDYxMS1wcm9wamFtZGV0ZWN0d2luZG93IiBpZD0icHJvcC00NjExLXByb3BqYW1kZXRlY3R3aW5kb3ciPlBST1AgNDYxMTogUFJPUF9KQU1fREVURUNUX1dJTkRPVzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yzwvc2FtcD48L2xpPgorICA8bGk+VW5pdHM6IFNlY29uZHMgKDEtNjQpPC9saT4KKyAgPGxpPkRlZmF1bHQgVmFsdWU6IEltcGxlbWVudGF0aW9uLXNwZWNpZmljPC9saT4KKyAgPGxpPlJFQ09NTUVOREVEIGZvciA8c2FtcD5DQVBfSkFNX0RFVEVDVDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMC4xLjQucC4yIj5UaGlzIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIHdpbmRvdyBwZXJpb2QgZm9yIHNpZ25hbCBqYW1taW5nIGRldGVjdGlvbi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTAuMS41Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS41Ij4xMC4xLjUuPC9hPiA8YSBocmVmPSIjcHJvcC00NjEyLXByb3BqYW1kZXRlY3RidXN5IiBpZD0icHJvcC00NjEyLXByb3BqYW1kZXRlY3RidXN5Ij5QUk9QIDQ2MTI6IFBST1BfSkFNX0RFVEVDVF9CVVNZPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5pPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0czogU2Vjb25kcyAoMS02NCk8L2xpPgorICA8bGk+RGVmYXVsdCBWYWx1ZTogSW1wbGVtZW50YXRpb24tc3BlY2lmaWM8L2xpPgorICA8bGk+UkVDT01NRU5ERUQgZm9yIDxzYW1wPkNBUF9KQU1fREVURUNUPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEwLjEuNS5wLjIiPlRoaXMgcGFyYW1ldGVyIGRlc2NyaWJlcyB0aGUgbnVtYmVyIG9mIGFnZ3JlZ2F0ZSBzZWNvbmRzIHdpdGhpbiB0aGUgZGV0ZWN0aW9uIHdpbmRvdyB3aGVyZSB0aGUgUlNTSSBtdXN0IGJlIGFib3ZlIDxzYW1wPlBST1BfSkFNX0RFVEVDVF9SU1NJX1RIUkVTSE9MRDwvc2FtcD4gdG8gdHJpZ2dlciBkZXRlY3Rpb24uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTAuMS41LnAuMyI+VGhlIGJlaGF2aW9yIG9mIHRoZSBqYW1taW5nIGRldGVjdGlvbiBmZWF0dXJlIHdoZW4gPHNhbXA+UFJPUF9KQU1fREVURUNUX0JVU1k8L3NhbXA+IGlzIGxhcmdlciB0aGFuIDxzYW1wPlBST1BfSkFNX0RFVEVDVF9XSU5ET1c8L3NhbXA+IGlzIHVuZGVmaW5lZC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTAuMS42Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS42Ij4xMC4xLjYuPC9hPiA8YSBocmVmPSIjcHJvcC00NjEzLXByb3BqYW1kZXRlY3RoaXN0b3J5Yml0bWFwIiBpZD0icHJvcC00NjEzLXByb3BqYW1kZXRlY3RoaXN0b3J5Yml0bWFwIj5QUk9QIDQ2MTM6IFBST1BfSkFNX0RFVEVDVF9ISVNUT1JZX0JJVE1BUDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MTDwvc2FtcD48L2xpPgorICA8bGk+RGVmYXVsdCBWYWx1ZTogSW1wbGVtZW50YXRpb24tc3BlY2lmaWM8L2xpPgorICA8bGk+UkVDT01NRU5ERUQgZm9yIDxzYW1wPkNBUF9KQU1fREVURUNUPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEwLjEuNi5wLjIiPlRoaXMgdmFsdWUgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBzdGF0ZSBvZiBqYW1taW5nIGRldGVjdGlvbiBtb2R1bGUgZm9yIG1vbml0b3JpbmcvZGVidWdnaW5nIHB1cnBvc2UuIEl0IHJldHVybnMgYSA2NC1iaXQgdmFsdWUgd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lIHNlY29uZCBpbnRlcnZhbCBzdGFydGluZyB3aXRoIGJpdCAwIGZvciB0aGUgbW9zdCByZWNlbnQgaW50ZXJ2YWwgYW5kIGJpdCA2MyBmb3IgdGhlIG9sZGVzdCBpbnRlcnZhbHMgKDYzIHNlYyBlYXJsaWVyKS4gIFRoZSBiaXQgaXMgc2V0IHRvIDEgaWYgdGhlIGphbW1pbmcgZGV0ZWN0aW9uIG1vZHVsZSBvYnNlcnZlZC9kZXRlY3RlZCBoaWdoIHNpZ25hbCBsZXZlbCBkdXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgb25lIHNlY29uZCBpbnRlcnZhbC4gIFRoZSB2YWx1ZSBpcyByZWFkLW9ubHkgYW5kIGlzIGVuY29kZWQgYXMgdHdvIDxzYW1wPkw8L3NhbXA+ICh1aW50MzIpIHZhbHVlcyBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAoZmlyc3QgPHNhbXA+TDwvc2FtcD4gKHVpbnQzMikgdmFsdWUgZ2l2ZXMgdGhlIGxvd2VyIGJpdHMgY29ycmVzcG9uZGluZyB0byBtb3JlIHJlY2VudCBoaXN0b3J5KS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMSI+MTEuPC9hPiA8YSBocmVmPSIjZmVhdHVyZS1ncGlvLWFjY2VzcyIgaWQ9ImZlYXR1cmUtZ3Bpby1hY2Nlc3MiPkZlYXR1cmU6IEdQSU8gQWNjZXNzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEucC4xIj5UaGlzIGZlYXR1cmUgYWxsb3dzIHRoZSBob3N0IHRvIGhhdmUgY29udHJvbCBvdmVyIHNvbWUgb3IgYWxsIG9mIHRoZSBHUElPIHBpbnMgb24gdGhlIE5DUC4gVGhlIGhvc3QgY2FuIGRldGVybWluZSB3aGljaCBHUElPcyBhcmUgYXZhaWxhYmxlIGJ5IGV4YW1pbmluZyA8c2FtcD5QUk9QX0dQSU9fQ09ORklHPC9zYW1wPiwgZGVzY3JpYmVkIGJlbG93LiBUaGlzIEFQSSBzdXBwb3J0cyBhIG1heGltdW0gb2YgMjU2IGluZGl2aWR1YWwgR1BJTyBwaW5zLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjExLnAuMiI+U3VwcG9ydCBmb3IgdGhpcyBmZWF0dXJlIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBwcmVzZW5jZSBvZiA8c2FtcD5DQVBfR1BJTzwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjExLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xIj4xMS4xLjwvYT4gPGEgaHJlZj0iI3Byb3BlcnRpZXMtMyIgaWQ9InByb3BlcnRpZXMtMyI+UHJvcGVydGllczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMS4xLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xLjEiPjExLjEuMS48L2E+IDxhIGhyZWY9IiNwcm9wLTQwOTYtcHJvcGdwaW9jb25maWciIGlkPSJwcm9wLTQwOTYtcHJvcGdwaW9jb25maWciPlBST1AgNDA5NjogUFJPUF9HUElPX0NPTkZJRzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5Bcmd1bWVudC1FbmNvZGluZzogPHNhbXA+QSh0KENDVSkpPC9zYW1wPjwvbGk+CisgIDxsaT5UeXBlOiBSZWFkLXdyaXRlIChXcml0YWJsZSBvbmx5IHVzaW5nIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lOU0VSVDwvc2FtcD4sIDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1pbnNlcnQiPlNlY3Rpb24gNC41PC9hPik8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMS4xLjEucC4yIj5BbiBhcnJheSBvZiBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBmaWVsZHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IEdQSU8gTnVtYmVyPC9saT4KKyAgPGxpPjxzYW1wPkM8L3NhbXA+OiBHUElPIENvbmZpZ3VyYXRpb24gRmxhZ3M8L2xpPgorICA8bGk+PHNhbXA+VTwvc2FtcD46IEh1bWFuLXJlYWRhYmxlIEdQSU8gbmFtZTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjExLjEuMS5wLjQiPkdQSU9zIHdoaWNoIGRvIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbnRyeSBhcmUgbm90IHN1cHBvcnRlZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMS4xLjEucC41Ij5UaGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gZmxhZ3MgZm9yIHRoZSBHUElPOiA8L3A+Cis8cHJlPgorICAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNworKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8RElSfFBVUHxQRE58VFJJR0dFUnwgIFJFU0VSVkVEIHwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworICAgICAgICB8Ty9EfAorICAgICAgICArLS0tKworPC9wcmU+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkRJUjwvc2FtcD46IFBpbiBkaXJlY3Rpb24uIENsZWFyICgwKSBmb3IgaW5wdXQsIHNldCAoMSkgZm9yIG91dHB1dC48L2xpPgorICA8bGk+PHNhbXA+UFVQPC9zYW1wPjogUHVsbC11cCBlbmFibGVkIGZsYWcuPC9saT4KKyAgPGxpPjxzYW1wPlBETjwvc2FtcD4vPHNhbXA+Ty9EPC9zYW1wPjogRmxhZyBtZWFuaW5nIGRlcGVuZHMgb24gcGluIGRpcmVjdGlvbjogPHVsPjxsaT5JbnB1dDogUHVsbC1kb3duIGVuYWJsZWQuPC9saT48bGk+T3V0cHV0OiBPdXRwdXQgaXMgYW4gb3Blbi1kcmFpbi48L2xpPjwvdWw+PC9saT4KKyAgPGxpPjxzYW1wPlRSSUdHRVI8L3NhbXA+OiBFbnVtZXJhdGlvbiBkZXNjcmliaW5nIGhvdyBwaW4gY2hhbmdlcyBnZW5lcmF0ZSBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uIGNvbW1hbmRzIChUQkQpIGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdC4gIDx1bD48bGk+MDogRmVhdHVyZSBkaXNhYmxlZCBmb3IgdGhpcyBwaW48L2xpPjxsaT4xOiBUcmlnZ2VyIG9uIGZhbGxpbmcgZWRnZTwvbGk+PGxpPjI6IFRyaWdnZXIgb24gcmlzaW5nIGVkZ2U8L2xpPjxsaT4zOiBUcmlnZ2VyIG9uIGxldmVsIGNoYW5nZTwvbGk+PC91bD48L2xpPgorICA8bGk+PHNhbXA+UkVTRVJWRUQ8L3NhbXA+OiBCaXRzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBBbHdheXMgY2xlYXJlZCB0byB6ZXJvIGFuZCBpZ25vcmVkIHdoZW4gcmVhZC48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMS4xLjEucC43Ij5BcyBhbiBvcHRpb25hbCBmZWF0dXJlLCB0aGUgY29uZmlndXJhdGlvbiBvZiBpbmRpdmlkdWFsIHBpbnMgbWF5IGJlIG1vZGlmaWVkIHVzaW5nIHRoZSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JTlNFUlQ8L3NhbXA+IGNvbW1hbmQuIE9ubHkgdGhlIEdQSU8gbnVtYmVyIGFuZCBmbGFncyBmaWVsZHMgTVVTVCBiZSBwcmVzZW50LCB0aGUgR1BJTyBuYW1lIChpZiBwcmVzZW50KSB3b3VsZCBiZSBpZ25vcmVkLiBUaGlzIGNvbW1hbmQgY2FuIG9ubHkgYmUgdXNlZCB0byBtb2RpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb2YgR1BJT3Mgd2hpY2ggYXJlIGFscmVhZHkgZXhwb3NlZC0tLWl0IGNhbm5vdCBiZSB1c2VkIGJ5IHRoZSBob3N0IHRvIGFkZCBhZGRpb25hbCBHUElPcy4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTEuMS4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMTEuMS4yIj4xMS4xLjIuPC9hPiA8YSBocmVmPSIjcHJvcC00MDk4LXByb3BncGlvc3RhdGUiIGlkPSJwcm9wLTQwOTgtcHJvcGdwaW9zdGF0ZSI+UFJPUCA0MDk4OiBQUk9QX0dQSU9fU1RBVEU8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjExLjEuMi5wLjIiPkNvbnRhaW5zIGEgYml0IGZpZWxkIGlkZW50aWZ5aW5nIHRoZSBzdGF0ZSBvZiB0aGUgR1BJT3MuIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHByb3BlcnRpZXMgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIEdQSU9zLiBJZiB5b3UgaGF2ZSAxMCBHUElPcywgeW91J2QgaGF2ZSB0d28gYnl0ZXMuIEdQSU9zIGFyZSBudW1iZXJlZCBmcm9tIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHRvIGxlYXN0IHNpZ25pZmljYW50IGJpdCwgc28gMHg4MCBpcyBHUElPIDAsIDB4NDAgaXMgR1BJTyAxLCBldGMuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS4yLnAuMyI+Rm9yIEdQSU9zIGNvbmZpZ3VyZWQgYXMgaW5wdXRzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBVUVfR0VUPC9zYW1wPjogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBkZXNjcmliZXMgdGhlIGxvZ2ljIGxldmVsIHJlYWQgZnJvbSB0aGUgcGluLjwvbGk+CisgIDxsaT48c2FtcD5DTURfUFJPUF9WQUxVRV9TRVQ8L3NhbXA+OiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGlzIGlnbm9yZWQgZm9yIHRoZXNlIHBpbnMuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS4yLnAuNSI+Rm9yIEdQSU9zIGNvbmZpZ3VyZWQgYXMgb3V0cHV0czogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5DTURfUFJPUF9WQVVFX0dFVDwvc2FtcD46IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuPC9saT4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBTFVFX1NFVDwvc2FtcD46IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgZGV0ZXJtaW5lcyB0aGUgbmV3IGxvZ2ljIGxldmVsIG9mIHRoZSBvdXRwdXQuIElmIHRoaXMgcGluIGlzIGNvbmZpZ3VyZWQgYXMgYW4gb3Blbi1kcmFpbiwgc2V0dGluZyB0aGUgYXNzb2NpYXRlZCBiaXQgdG8gMSB3aWxsIGNhdXNlIHRoZSBwaW4gdG8gZW50ZXIgYSBIaS1aIHN0YXRlLjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjExLjEuMi5wLjciPkZvciBHUElPcyB3aGljaCBhcmUgbm90IHNwZWNpZmllZCBpbiA8c2FtcD5QUk9QX0dQSU9fQ09ORklHPC9zYW1wPjogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5DTURfUFJPUF9WQVVFX0dFVDwvc2FtcD46IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuPC9saT4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBTFVFX1NFVDwvc2FtcD46IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgTVVTVCBiZSBpZ25vcmVkIGJ5IHRoZSBOQ1AuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS4yLnAuOSI+V2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjExLjEuMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjExLjEuMyI+MTEuMS4zLjwvYT4gPGEgaHJlZj0iI3Byb3AtNDA5OS1wcm9wZ3Bpb3N0YXRlc2V0IiBpZD0icHJvcC00MDk5LXByb3BncGlvc3RhdGVzZXQiPlBST1AgNDA5OTogUFJPUF9HUElPX1NUQVRFX1NFVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBXcml0ZS1vbmx5PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS4zLnAuMiI+QWxsb3dzIGZvciB0aGUgc3RhdGUgb2YgdmFyaW91cyBvdXRwdXQgR1BJT3MgdG8gYmUgc2V0IHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIEdQSU8gc3RhdGVzLiBDb250YWlucyBhIGJpdCBmaWVsZCBpZGVudGlmeWluZyB0aGUgb3V0cHV0IEdQSU9zIHRoYXQgc2hvdWxkIGhhdmUgdGhlaXIgc3RhdGUgc2V0IHRvIDEuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS4zLnAuMyI+V2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uIFRoZSB2YWx1ZSBvZiBhbnkgYml0cyBmb3IgR1BJT3Mgd2hpY2ggYXJlIG5vdCBzcGVjaWZpZWQgaW4gPHNhbXA+UFJPUF9HUElPX0NPTkZJRzwvc2FtcD4gTVVTVCBiZSBpZ25vcmVkLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMS4xLjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xLjQiPjExLjEuNC48L2E+IDxhIGhyZWY9IiNwcm9wLTQxMDAtcHJvcGdwaW9zdGF0ZWNsZWFyIiBpZD0icHJvcC00MTAwLXByb3BncGlvc3RhdGVjbGVhciI+UFJPUCA0MTAwOiBQUk9QX0dQSU9fU1RBVEVfQ0xFQVI8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogV3JpdGUtb25seTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjExLjEuNC5wLjIiPkFsbG93cyBmb3IgdGhlIHN0YXRlIG9mIHZhcmlvdXMgb3V0cHV0IEdQSU9zIHRvIGJlIGNsZWFyZWQgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIgR1BJTyBzdGF0ZXMuIENvbnRhaW5zIGEgYml0IGZpZWxkIGlkZW50aWZ5aW5nIHRoZSBvdXRwdXQgR1BJT3MgdGhhdCBzaG91bGQgaGF2ZSB0aGVpciBzdGF0ZSBjbGVhcmVkIHRvIDAuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS40LnAuMyI+V2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uIFRoZSB2YWx1ZSBvZiBhbnkgYml0cyBmb3IgR1BJT3Mgd2hpY2ggYXJlIG5vdCBzcGVjaWZpZWQgaW4gPHNhbXA+UFJPUF9HUElPX0NPTkZJRzwvc2FtcD4gTVVTVCBiZSBpZ25vcmVkLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEyIj4xMi48L2E+IDxhIGhyZWY9IiNmZWF0dXJlLXRybmciIGlkPSJmZWF0dXJlLXRybmciPkZlYXR1cmU6IFRydWUgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIucC4xIj5UaGlzIGZlYXR1cmUgYWxsb3dzIHRoZSBob3N0IHRvIGhhdmUgYWNjZXNzIHRvIGFueSBzdHJvbmcgaGFyZHdhcmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgdGhhdCBtaWdodCBiZSBwcmVzZW50IG9uIHRoZSBOQ1AsIGZvciB0aGluZ3MgbGlrZSBrZXkgZ2VuZXJhdGlvbiBvciBzZWVkaW5nIFBSTkdzLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEyLnAuMiI+U3VwcG9ydCBmb3IgdGhpcyBmZWF0dXJlIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBwcmVzZW5jZSBvZiA8c2FtcD5DQVBfVFJORzwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIucC4zIj5Ob3RlIHdlbGwgdGhhdCBpbXBsZW1lbnRpbmcgYSBjcnlwdG9ncmFwaGljYWxseS1zdHJvbmcgc29mdHdhcmUtYmFzZWQgdHJ1ZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAodGhhdCBpcyBpbXBlcnZpb3VzIHRvIHRoaW5ncyBsaWtlIHRlbXBlcmF0dXJlIGNoYW5nZXMsIG1hbnVmYWN0dXJpbmcgZGlmZmVyZW5jZXMgYWNyb3NzIGRldmljZXMsIG9yIHVuZXhwZWN0ZWQgb3V0cHV0IGNvcnJlbGF0aW9ucykgaXMgbm9uLXRyaXZpYWwgd2l0aG91dCBhIHdlbGwtZGVzaWduZWQsIGRlZGljYXRlZCBoYXJkd2FyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gSW1wbGVtZW50b3JzIHdobyBoYXZlIGxpdHRsZSBvciBubyBleHBlcmllbmNlIGluIHRoaXMgYXJlYSBhcmUgZW5jb3VyYWdlZCB0byBub3QgYWR2ZXJ0aXNlIHRoaXMgY2FwYWJpbGl0eS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTIuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEyLjEiPjEyLjEuPC9hPiA8YSBocmVmPSIjcHJvcGVydGllcy00IiBpZD0icHJvcGVydGllcy00Ij5Qcm9wZXJ0aWVzPC9hPjwvaDE+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEyLjEuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEyLjEuMSI+MTIuMS4xLjwvYT4gPGEgaHJlZj0iI3Byb3AtNDEwMS1wcm9wdHJuZzMyIiBpZD0icHJvcC00MTAxLXByb3B0cm5nMzIiPlBST1AgNDEwMTogUFJPUF9UUk5HXzMyPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkFyZ3VtZW50LUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPjwvbGk+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMi4xLjEucC4yIj5GZXRjaGluZyB0aGlzIHByb3BlcnR5IHJldHVybnMgYSBzdHJvbmcgcmFuZG9tIDMyLWJpdCBpbnRlZ2VyIHRoYXQgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyBhIFBSTkcgc2VlZCBvciBmb3IgY3J5cHRvZ3JhcGhpYyB1c2UuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIuMS4xLnAuMyI+V2hpbGUgdGhlIGV4YWN0IG1lY2hhbmlzbSBiZWhpbmQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoaXMgdmFsdWUgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMsIHRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+RGF0YSByZXByZXNlbnRpbmcgYXQgbGVhc3QgMzIgYml0cyBvZiBmcmVzaCBlbnRyb3B5IChleHRyYWN0ZWQgZnJvbSB0aGUgcHJpbWFyeSBlbnRyb3B5IHNvdXJjZSkgTVVTVCBiZSBjb25zdW1lZCBieSB0aGUgY2FsY3VsYXRpb24gb2YgZWFjaCBxdWVyeS48L2xpPgorICA8bGk+RWFjaCBvZiB0aGUgMzIgYml0cyByZXR1cm5lZCBNVVNUIGJlIGZyZWUgb2YgYmlhcyBhbmQgaGF2ZSBubyBzdGF0aXN0aWNhbCBjb3JyZWxhdGlvbiB0byBhbnkgcGFydCBvZiB0aGUgcmF3IGRhdGEgdXNlZCBmb3IgdGhlIGNhbGN1bGF0aW9uIG9mIGFueSBxdWVyeS48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMi4xLjEucC41Ij5TdXBwb3J0IGZvciB0aGlzIHByb3BlcnR5IGlzIFJFUVVJUkVEIGlmIDxzYW1wPkNBUF9UUk5HPC9zYW1wPiBpcyBpbmNsdWRlZCBpbiB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcy4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTIuMS4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMTIuMS4yIj4xMi4xLjIuPC9hPiA8YSBocmVmPSIjcHJvcC00MTAyLXByb3B0cm5nMTI4IiBpZD0icHJvcC00MTAyLXByb3B0cm5nMTI4Ij5QUk9QIDQxMDI6IFBST1BfVFJOR18xMjg8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkQ8L3NhbXA+PC9saT4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEyLjEuMi5wLjIiPkZldGNoaW5nIHRoaXMgcHJvcGVydHkgcmV0dXJucyAxNiBieXRlcyBvZiBzdHJvbmcgcmFuZG9tIGRhdGEgc3VpdGFibGUgZm9yIGRpcmVjdCBjcnlwdG9ncmFwaGljIHVzZSB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZyhGb3IgZXhhbXBsZSwgYXMgYW4gQUVTIGtleSkuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIuMS4yLnAuMyI+V2hpbGUgdGhlIGV4YWN0IG1lY2hhbmlzbSBiZWhpbmQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoaXMgdmFsdWUgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMsIHRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+RGF0YSByZXByZXNlbnRpbmcgYXQgbGVhc3QgMTI4IGJpdHMgb2YgZnJlc2ggZW50cm9weSAoZXh0cmFjdGVkIGZyb20gdGhlIHByaW1hcnkgZW50cm9weSBzb3VyY2UpIE1VU1QgYmUgY29uc3VtZWQgYnkgdGhlIGNhbGN1bGF0aW9uIG9mIGVhY2ggcXVlcnkuPC9saT4KKyAgPGxpPkVhY2ggb2YgdGhlIDEyOCBiaXRzIHJldHVybmVkIE1VU1QgYmUgZnJlZSBvZiBiaWFzIGFuZCBoYXZlIG5vIHN0YXRpc3RpY2FsIGNvcnJlbGF0aW9uIHRvIGFueSBwYXJ0IG9mIHRoZSByYXcgZGF0YSB1c2VkIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYW55IHF1ZXJ5LjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEyLjEuMi5wLjUiPlN1cHBvcnQgZm9yIHRoaXMgcHJvcGVydHkgaXMgUkVRVUlSRUQgaWYgPHNhbXA+Q0FQX1RSTkc8L3NhbXA+IGlzIGluY2x1ZGVkIGluIHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMi4xLjMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMi4xLjMiPjEyLjEuMy48L2E+IDxhIGhyZWY9IiNwcm9wLTQxMDMtcHJvcHRybmdyYXczMiIgaWQ9InByb3AtNDEwMy1wcm9wdHJuZ3JhdzMyIj5QUk9QIDQxMDM6IFBST1BfVFJOR19SQVdfMzI8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkQ8L3NhbXA+PC9saT4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEyLjEuMy5wLjIiPlRoaXMgcHJvcGVydHkgaXMgcHJpbWFyaWx5IHVzZWQgdG8gZGlhZ25vc2UgYW5kIGRlYnVnIHRoZSBiZWhhdmlvciBvZiB0aGUgZW50cm9weSBzb3VyY2UgdXNlZCBmb3Igc3Ryb25nIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMi4xLjMucC4zIj5XaGVuIHF1ZXJpZWQsIHJldHVybnMgdGhlIHJhdyBvdXRwdXQgZnJvbSB0aGUgZW50cm9weSBzb3VyY2UgdXNlZCB0byBnZW5lcmF0ZSA8c2FtcD5QUk9QX1RSTkdfMzI8L3NhbXA+LCBwcmlvciB0byBhbnkgcmVkdWN0aW9uL3doaXRlbmluZyBhbmQvb3IgbWl4aW5nIHdpdGggcHJpb3Igc3RhdGUuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIuMS4zLnAuNCI+VGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGFuZCBzaG91bGQgYmUgZXhwZWN0ZWQgdG8gYmUgbm9uLWRldGVybWluaXN0aWMuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIuMS4zLnAuNSI+U3VwcG9ydCBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBSRUNPTU1FTkRFRCBpZiA8c2FtcD5DQVBfVFJORzwvc2FtcD4gaXMgaW5jbHVkZWQgaW4gdGhlIGRldmljZSBjYXBhYmlsaXRpZXMuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEzIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMTMiPjEzLjwvYT4gPGEgaHJlZj0iI3NlY3VyaXR5LWNvbnNpZGVyYXRpb25zIiBpZD0ic2VjdXJpdHktY29uc2lkZXJhdGlvbnMiPlNlY3VyaXR5IENvbnNpZGVyYXRpb25zPC9hPjwvaDE+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEzLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMy4xIj4xMy4xLjwvYT4gPGEgaHJlZj0iI3Jhdy1hcHBsaWNhdGlvbi1hY2Nlc3MiIGlkPSJyYXctYXBwbGljYXRpb24tYWNjZXNzIj5SYXcgQXBwbGljYXRpb24gQWNjZXNzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTMuMS5wLjEiPlNwaW5lbCBNQVkgYmUgdXNlZCBhcyBhbiBBUEkgYm91bmRhcnkgZm9yIGFsbG93aW5nIHByb2Nlc3NlcyB0byBjb25maWd1cmUgdGhlIE5DUC4gSG93ZXZlciwgc3VjaCBhIHN5c3RlbSBNVVNUIE5PVCBnaXZlIHVucHJpdmlsZWdlZCBwcm9jZXNzZXNzIHRoZSBhYmlsaXR5IHRvIHNlbmQgb3IgcmVjZWl2ZSBhcmJpdHJhcnkgY29tbWFuZCBmcmFtZXMgdG8gdGhlIE5DUC4gT25seSB0aGUgc3BlY2lmaWMgY29tbWFuZHMgYW5kIHByb3BlcnRpZXMgdGhhdCBhcmUgcmVxdWlyZWQgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUgcGFzc2VkLCBhbmQgdGhlbiBvbmx5IGFmdGVyIGJlaW5nIGNoZWNrZWQgZm9yIHByb3BlciBmb3JtYXQuICA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5BIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEiPkFwcGVuZGl4IEEuPC9hPiA8YSBocmVmPSIjZnJhbWluZy1wcm90b2NvbCIgaWQ9ImZyYW1pbmctcHJvdG9jb2wiPkZyYW1pbmcgUHJvdG9jb2w8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLnAuMSI+U2luY2UgdGhpcyBOQ1AgcHJvdG9jb2wgaXMgZGVmaW5lZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBwaHlzaWNhbCB0cmFuc3BvcnQgb3IgZnJhbWluZywgYW55IG51bWJlciBvZiB0cmFuc3BvcnRzIGFuZCBmcmFtaW5nIHByb3RvY29scyBjb3VsZCBiZSB1c2VkIHN1Y2Nlc3NmdWxseS4gSG93ZXZlciwgaW4gdGhlIGludGVyZXN0cyBvZiBjb21wYXRpYmlsaXR5LCB0aGlzIGRvY3VtZW50IHByb3ZpZGVzIHNvbWUgcmVjb21tZW5kYXRpb25zLiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS4xIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMSI+QS4xLjwvYT4gPGEgaHJlZj0iI3VhcnQtcmVjb21tZW5kYXRpb25zIiBpZD0idWFydC1yZWNvbW1lbmRhdGlvbnMiPlVBUlQgUmVjb21tZW5kYXRpb25zPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4xLnAuMSI+VGhlIHJlY29tbWVuZGVkIGRlZmF1bHQgVUFSVCBzZXR0aW5ncyBhcmU6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Qml0IHJhdGU6ICAgICAxMTUyMDA8L2xpPgorICA8bGk+U3RhcnQgYml0czogICAxPC9saT4KKyAgPGxpPkRhdGEgYml0czogICAgODwvbGk+CisgIDxsaT5TdG9wIGJpdHM6ICAgIDE8L2xpPgorICA8bGk+UGFyaXR5OiAgICAgICBOb25lPC9saT4KKyAgPGxpPkZsb3cgQ29udHJvbDogSGFyZHdhcmU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjEucC4zIj5UaGVzZSB2YWx1ZXMgbWF5IGJlIGFkanVzdGVkIGRlcGVuZGluZyBvbiB0aGUgaW5kaXZpZHVhbCBuZWVkcyBvZiB0aGUgYXBwbGljYXRpb24gb3IgcHJvZHVjdCwgYnV0IHNvbWUgc29ydCBvZiBmbG93IGNvbnRyb2wgTVVTVCBiZSB1c2VkLiAgSGFyZHdhcmUgZmxvdyBjb250cm9sIGlzIHByZWZlcnJlZCBvdmVyIHNvZnR3YXJlIGZsb3cgY29udHJvbC4gSW4gdGhlIGFic2VuY2Ugb2YgaGFyZHdhcmUgZmxvdyBjb250cm9sLCBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKFhPTi9YT0ZGKSBNVVNUIGJlIHVzZWQgaW5zdGVhZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjEucC40Ij5XZSBhbHNvIDxzdHJvbmc+UkVDT01NRU5EPC9zdHJvbmc+IGFuIEFyZHVpbm8tc3R5bGUgaGFyZHdhcmUgcmVzZXQsIHdoZXJlIHRoZSBEVFIgc2lnbmFsIGlzIGNvdXBsZWQgdG8gdGhlIDxzYW1wPlImIzc3MztFJiM3NzM7UyYjNzczOzwvc2FtcD4gcGluIHRocm91Z2ggYSAwLjAxJiMxODE7RiBjYXBhY2l0b3IuIFRoaXMgY2F1c2VzIHRoZSBOQ1AgdG8gYXV0b21hdGljYWxseSByZXNldCB3aGVuZXZlciB0aGUgc2VyaWFsIHBvcnQgaXMgb3BlbmVkLiBBdCB0aGUgdmVyeSBsZWFzdCB3ZSA8c3Ryb25nPlJFQ09NTUVORDwvc3Ryb25nPiBkZWRpY2F0aW5nIG9uZSBvZiB5b3VyIGhvc3QgcGlucyB0byBjb250cm9sbGluZyB0aGUgPHNhbXA+UiYjNzczO0UmIzc3MztTJiM3NzM7PC9zYW1wPiBwaW4gb24gdGhlIE5DUCwgc28gdGhhdCB5b3UgY2FuIGVhc2lseSBwZXJmb3JtIGEgaGFyZHdhcmUgcmVzZXQgaWYgbmVjZXNzYXJ5LiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS4xLjEiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4xLjEiPkEuMS4xLjwvYT4gPGEgaHJlZj0iI3VhcnQtYml0LXJhdGUtZGV0ZWN0aW9uIiBpZD0idWFydC1iaXQtcmF0ZS1kZXRlY3Rpb24iPlVBUlQgQml0IFJhdGUgRGV0ZWN0aW9uPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4xLjEucC4xIj5XaGVuIHVzaW5nIGEgVUFSVCwgdGhlIGlzc3VlIG9mIGFuIGFwcHJvcHJpYXRlIGJpdCByYXRlIG11c3QgYmUgY29uc2lkZXJlZC4gQSBiaXRyYXRlIG9mIDExNTIwMCBiaXRzIHBlciBzZWNvbmQgaGFzIGJlY29tZSBhIGRlZmFjdG8gc3RhbmRhcmQgYmF1ZCByYXRlIGZvciBtYW55IHNlcmlhbCBwZXJpcGhlcmFscy4gVGhpcyByYXRlLCBob3dldmVyLCBpcyBzbG93ZXIgdGhhbiB0aGUgdGhlb3JldGljYWwgbWF4aW11bSBiaXRyYXRlIG9mIHRoZSA4MDIuMTUuNCAyLjRHSHogUEhZICgyNTBrYml0KS4gSW4gbW9zdCBjaXJjdW1zdGFuY2VzIHRoaXMgbWlzbWF0Y2ggaXMgbm90IHNpZ25pZmljYW50IGJlY2F1c2UgdGhlIG92ZXJhbGwgYml0cmF0ZSB3aWxsIGJlIG11Y2ggbG93ZXIgdGhhbiBlaXRoZXIgb2YgdGhlc2UgcmF0ZXMsIGJ1dCB0aGVyZSBhcmUgY2lyY3Vtc3RhbmNlcyB3aGVyZSBhIGZhc3RlciBVQVJUIGJpdHJhdGUgaXMgZGVzaXJhYmxlLiBUaHVzLCB0aGlzIGRvY3VtZW50IHByb3Bvc2VzIGEgc2ltcGxlIGJpdHJhdGUgZGV0ZWN0aW9uIHNjaGVtZSB0aGF0IGNhbiBiZSBlbXBsb3llZCBieSB0aGUgaG9zdCB0byBkZXRlY3Qgd2hlbiB0aGUgYXR0YWNoZWQgTkNQIGlzIGluaXRpYWxseSBydW5uaW5nIGF0IGEgaGlnaGVyIGJpdHJhdGUuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4xLjEucC4yIj5UaGUgYWxnb3JpdGhtIGlzIHRvIHNlbmQgc3VjY2Vzc2l2ZSBOT09QIGNvbW1hbmRzIHRvIHRoZSBOQ1AgYXQgaW5jcmVhc2luZyBiaXRyYXRlcy4gV2hlbiBhIHZhbGlkIDxzYW1wPkNNRF9MQVNUX1NUQVRVUzwvc2FtcD4gcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQsIHdlIGhhdmUgaWRlbnRpZmllZCB0aGUgY29ycmVjdCBiaXRyYXRlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4xLnAuMyI+SW4gb3JkZXIgdG8gbGltaXQgdGhlIHRpbWUgc3BlbnQgaHVudGluZyBmb3IgdGhlIGFwcHJvcHJpYXRlIGJpdHJhdGUsIHdlIFJFQ09NTUVORCB0aGF0IG9ubHkgdGhlIGZvbGxvd2luZyBiaXRyYXRlcyBiZSBjaGVja2VkOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjExNTIwMDwvbGk+CisgIDxsaT4yMzA0MDA8L2xpPgorICA8bGk+MTAwMDAwMCAoMU1iaXQpPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4xLjEucC41Ij5UaGUgYml0cmF0ZSBNQVkgYWxzbyBiZSBjaGFuZ2VkIHByb2dyYW1tYXRpY2FsbHkgYnkgYWRqdXN0aW5nIDxzYW1wPlBST1BfVUFSVF9CSVRSQVRFPC9zYW1wPiwgaWYgaW1wbGVtZW50ZWQuICA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5BLjEuMiI+PGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5BLjEuMiI+QS4xLjIuPC9hPiA8YSBocmVmPSIjaGRsYy1saXRlIiBpZD0iaGRsYy1saXRlIj5IRExDLUxpdGU8L2E+PC9oMT4KKzxwPjxlbT5IRExDLUxpdGU8L2VtPiBpcyB0aGUgcmVjb21tZW5kZWQgZnJhbWluZyBwcm90b2NvbCBmb3IgdHJhbnNtaXR0aW5nIFNwaW5lbCBmcmFtZXMgb3ZlciBhIFVBUlQuIEhETEMtTGl0ZSBjb25zaXN0cyBvZiBvbmx5IHRoZSBmcmFtaW5nLCBlc2NhcGluZywgYW5kIENSQyBwYXJ0cyBvZiB0aGUgbGFyZ2VyIEhETEMgcHJvdG9jb2wtLS1hbGwgb3RoZXIgcGFydHMgb2YgSERMQyBhcmUgb21pdHRlZC4gVGhpcyBwcm90b2NvbCB3YXMgY2hvc2VuIGJlY2F1c2UgaXQgd29ya3Mgd2VsbCB3aXRoIHNvZnR3YXJlIGZsb3cgY29udHJvbCBhbmQgaXMgd2lkZWx5IGltcGxlbWVudGVkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4yLnAuMiI+VG8gdHJhbnNtaXQgYSBmcmFtZSB3aXRoIEhETEMtbGl0ZSwgdGhlIDE2LWJpdCBDUkMgbXVzdCBmaXJzdCBiZSBhcHBlbmRlZCB0byB0aGUgZnJhbWUuIFRoZSBDUkMgZnVuY3Rpb24gaXMgZGVmaW5lZCB0byBiZSBDUkMtMTYvQ0NJVFQsIG90aGVyd2lzZSBrbm93biBhcyB0aGUgPGEgaHJlZj0iaHR0cDovL3JldmVuZy5zb3VyY2Vmb3JnZS5uZXQvY3JjLWNhdGFsb2d1ZS8xNi5odG0jY3JjLmNhdC5rZXJtaXQiPktFUk1JVCBDUkM8L2E+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4yLnAuMyI+SW5kaXZpZHVhbCBmcmFtZXMgYXJlIHRlcm1pbmF0ZWQgd2l0aCBhIGZyYW1lIGRlbGltaXRlciBvY3RldCBjYWxsZWQgdGhlICdmbGFnJyBvY3RldCAoPHNhbXA+MHg3RTwvc2FtcD4pLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4yLnAuNCI+VGhlIGZvbGxvd2luZyBvY3RldHMgdmFsdWVzIGFyZSBjb25zaWRlcmVkIDxlbT5zcGVjaWFsPC9lbT4gYW5kIHNob3VsZCBiZSBlc2NhcGVkIHdoZW4gcHJlc2VudCBpbiBkYXRhIGZyYW1lczogPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldCBWYWx1ZTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+RGVzY3JpcHRpb248L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHg3RTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RnJhbWUgRGVsaW1pdGVyIChGbGFnKTwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHg3RDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RXNjYXBlIEJ5dGU8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjB4MTE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlhPTjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHgxMzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+WE9GRjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHhGODwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+VmVuZG9yLVNwZWNpZmljPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjEuMi5wLjUiPldoZW4gcHJlc2VudCBpbiBhIGRhdGEgZnJhbWUsIHRoZXNlIG9jdGV0IHZhbHVlcyBhcmUgZXNjYXBlZCBieSBwcmVwZW5kaW5nIHRoZSBlc2NhcGUgb2N0ZXQgKDxzYW1wPjB4N0Q8L3NhbXA+KSBhbmQgWE9SaW5nIHRoZSB2YWx1ZSB3aXRoIDxzYW1wPjB4MjA8L3NhbXA+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4yLnAuNiI+V2hlbiByZWNlaXZpbmcgYSBmcmFtZSwgdGhlIENSQyBtdXN0IGJlIHZlcmlmaWVkIGFmdGVyIHRoZSBmcmFtZSBpcyB1bmVzY2FwZWQuIElmIHRoZSBDUkMgdmFsdWUgZG9lcyBub3QgbWF0Y2ggd2hhdCBpcyBjYWxjdWxhdGVkIGZvciB0aGUgZnJhbWUgZGF0YSwgdGhlIGZyYW1lIE1VU1QgYmUgZGlzY2FyZGVkLiBUaGUgaW1wbGVtZW50YXRpb24gTUFZIGluZGljYXRlIHRoZSBmYWlsdXJlIHRvIGhpZ2hlciBsZXZlbHMgdG8gaGFuZGxlIGFzIHRoZXkgc2VlIGZpdCwgYnV0IE1VU1QgTk9UIGF0dGVtcHQgdG8gcHJvY2VzcyB0aGUgZGVjZWl2ZWQgZnJhbWUuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4xLjIucC43Ij5Db25zZWN1dGl2ZSBmbGFnIG9jdGV0cyBhcmUgZW50aXJlbHkgbGVnYWwgYW5kIE1VU1QgTk9UIGJlIHRyZWF0ZWQgYXMgYSBmcmFtaW5nIGVycm9yLiBDb25zZWN1dGl2ZSBmbGFnIG9jdGV0cyBNQVkgYmUgdXNlZCBhcyBhIHdheSB0byB3YWtlIHVwIGEgc2xlZXBpbmcgTkNQLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4yLnAuOCI+V2hlbiBmaXJzdCBlc3RhYmxpc2hpbmcgYSBjb25uZWN0aW9uIHRvIHRoZSBOQ1AsIGl0IGlzIGN1c3RvbWFyeSB0byBzZW5kIG9uZSBvciBtb3JlIGZsYWcgb2N0ZXRzIHRvIGVuc3VyZSB0aGF0IGFueSBwcmV2aW91c2x5IHJlY2VpdmVkIGRhdGEgaXMgZGlzY2FyZGVkLiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS4yIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMiI+QS4yLjwvYT4gPGEgaHJlZj0iI3NwaS1yZWNvbW1lbmRhdGlvbnMiIGlkPSJzcGktcmVjb21tZW5kYXRpb25zIj5TUEkgUmVjb21tZW5kYXRpb25zPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4yLnAuMSI+V2UgUkVDT01NRU5EIHRoZSB1c2Ugb2YgdGhlIGZvbGxvd2luZyBzdGFuZGFyZCBTUEkgc2lnbmFsczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5DJiM3NzM7UyYjNzczOzwvc2FtcD46ICAgKEhvc3QtdG8tTkNQKSBDaGlwIFNlbGVjdDwvbGk+CisgIDxsaT48c2FtcD5DTEs8L3NhbXA+OiAgKEhvc3QtdG8tTkNQKSBDbG9jazwvbGk+CisgIDxsaT48c2FtcD5NT1NJPC9zYW1wPjogTWFzdGVyLU91dHB1dC9TbGF2ZS1JbnB1dDwvbGk+CisgIDxsaT48c2FtcD5NSVNPPC9zYW1wPjogTWFzdGVyLUlucHV0L1NsYXZlLU91dHB1dDwvbGk+CisgIDxsaT48c2FtcD5JJiM3NzM7TiYjNzczO1QmIzc3Mzs8L3NhbXA+OiAgKE5DUC10by1Ib3N0KSBIb3N0IEludGVycnVwdDwvbGk+CisgIDxsaT48c2FtcD5SJiM3NzM7RSYjNzczO1MmIzc3Mzs8L3NhbXA+OiAgKEhvc3QtdG8tTkNQKSBOQ1AgSGFyZHdhcmUgUmVzZXQ8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjIucC4zIj5UaGUgPHNhbXA+SSYjNzczO04mIzc3MztUJiM3NzM7PC9zYW1wPiBzaWduYWwgaXMgdXNlZCBieSB0aGUgTkNQIHRvIGluZGljYXRlIHRvIHRoZSBob3N0IHRoYXQgdGhlIE5DUCBoYXMgZnJhbWVzIHBlbmRpbmcgdG8gc2VuZCB0byBpdC4gV2hlbiBhc3NlcnRlZCwgdGhlIGhvc3QgU0hPVUxEIGluaXRpYXRlIGEgU1BJIHRyYW5zYWN0aW9uIGluIGEgdGltZWx5IG1hbm5lci4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjIucC40Ij5XZSBSRUNPTU1FTkQgdGhlIGZvbGxvd2luZyBTUEkgcHJvcGVydGllczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5DJiM3NzM7UyYjNzczOzwvc2FtcD4gaXMgYWN0aXZlIGxvdy48L2xpPgorICA8bGk+PHNhbXA+Q0xLPC9zYW1wPiBpcyBhY3RpdmUgaGlnaC48L2xpPgorICA8bGk+PHNhbXA+Q0xLPC9zYW1wPiBzcGVlZCBpcyBsYXJnZXIgdGhhbiA1MDAga0h6LjwvbGk+CisgIDxsaT5EYXRhIGlzIHZhbGlkIG9uIGxlYWRpbmcgZWRnZSBvZiA8c2FtcD5DTEs8L3NhbXA+LjwvbGk+CisgIDxsaT5EYXRhIGlzIHNlbnQgaW4gbXVsdGlwbGVzIG9mIDgtYml0cyAob2N0ZXRzKS48L2xpPgorICA8bGk+T2N0ZXRzIGFyZSBzZW50IG1vc3Qtc2lnbmlmaWNhbnQgYml0IGZpcnN0LjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMi5wLjYiPlRoaXMgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbiBtYXkgYmUgYWRqdXN0ZWQgZGVwZW5kaW5nIG9uIHRoZSBpbmRpdmlkdWFsIG5lZWRzIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBwcm9kdWN0LiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS4yLjEiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4yLjEiPkEuMi4xLjwvYT4gPGEgaHJlZj0iI3NwaS1mcmFtaW5nLXByb3RvY29sIiBpZD0ic3BpLWZyYW1pbmctcHJvdG9jb2wiPlNQSSBGcmFtaW5nIFByb3RvY29sPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4yLjEucC4xIj5FYWNoIFNQSSBmcmFtZSBzdGFydHMgd2l0aCBhIDUtYnl0ZSBmcmFtZSBoZWFkZXI6IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IRFI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlJFQ1ZfTEVOPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5EQVRBX0xFTjwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkhEUjwvc2FtcD46IFRoZSBmaXJzdCBieXRlIGlzIHRoZSBoZWFkZXIgYnl0ZSAoZGVmaW5lZCBiZWxvdyk8L2xpPgorICA8bGk+PHNhbXA+UkVDVl9MRU48L3NhbXA+OiBUaGUgc2Vjb25kIGFuZCB0aGlyZCBieXRlcyBpbmRpY2F0ZSB0aGUgbGFyZ2VzdCBmcmFtZSBzaXplIHRoYXQgdGhhdCBkZXZpY2UgaXMgcmVhZHkgdG8gcmVjZWl2ZS4gSWYgemVybywgdGhlbiB0aGUgb3RoZXIgZGV2aWNlIG11c3Qgbm90IHNlbmQgYW55IGRhdGEuIChMaXR0bGUgZW5kaWFuKTwvbGk+CisgIDxsaT48c2FtcD5EQVRBX0xFTjwvc2FtcD46IFRoZSBmb3VydGggYW5kIGZpZnRoIGJ5dGVzIGluZGljYXRlIHRoZSBzaXplIG9mIHRoZSBwZW5kaW5nIGRhdGEgZnJhbWUgdG8gYmUgc2VudCB0byB0aGUgb3RoZXIgZGV2aWNlLiBJZiB0aGlzIHZhbHVlIGlzIGVxdWFsLXRvIG9yIGxlc3MtdGhhbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIG90aGVyIGRldmljZSBpcyB3aWxsaW5nIHRvIHJlY2VpdmUsIHRoZW4gdGhlIGRhdGEgb2YgdGhlIGZyYW1lIGlzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBoZWFkZXIuIChMaXR0bGUgRW5kaWFuKTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMi4xLnAuMyI+VGhlIDxzYW1wPkhEUjwvc2FtcD4gYnl0ZSBpcyBkZWZpbmVkIGFzOiA8L3A+Cis8cHJlPgorICAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNworKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8UlNUfENSQ3xDQ0Z8ICBSRVNFUlZFRCB8UEFUVEVSTnwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworPC9wcmU+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPlJTVDwvc2FtcD46IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoYXQgZGV2aWNlIGhhcyBiZWVuIHJlc2V0IHNpbmNlIHRoZSBsYXN0IHRpbWUgPHNhbXA+QyYjNzczO1MmIzc3Mzs8L3NhbXA+IHdhcyBhc3NlcnRlZC48L2xpPgorICA8bGk+PHNhbXA+Q1JDPC9zYW1wPjogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhhdCBkZXZpY2Ugc3VwcG9ydHMgd3JpdGluZyBhIDE2LWJpdCBDUkMgYXQgdGhlIGVuZCBvZiB0aGUgZGF0YS4gVGhlIENSQyBsZW5ndGggaXMgTk9UIGluY2x1ZGVkIGluIERBVEFfTEVOLjwvbGk+CisgIDxsaT48c2FtcD5DQ0Y8L3NhbXA+OiAiQ1JDIENoZWNrIEZhaWx1cmUiLiBTZXQgaWYgdGhlIENSQyBjaGVjayBvbiB0aGUgbGFzdCByZWNlaXZlZCBmcmFtZSBmYWlsZWQsIGNsZWFyZWQgdG8gemVybyBvdGhlcndpc2UuIFRoaXMgYml0IGlzIG9ubHkgdXNlZCBpZiBib3RoIHNpZGVzIHN1cHBvcnQgQ1JDLjwvbGk+CisgIDxsaT48c2FtcD5SRVNFUlZFRDwvc2FtcD46IFRoZXNlIGJpdHMgYXJlIGFsbCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZWQuIFRoZXkgTVVTVCBiZSBjbGVhcmVkIHRvIHplcm8gYW5kIE1VU1QgYmUgaWdub3JlZCBpZiBzZXQuPC9saT4KKyAgPGxpPjxzYW1wPlBBVFRFUk48L3NhbXA+OiBUaGVzZSBiaXRzIGFyZSBzZXQgdG8gYSBmaXhlZCB2YWx1ZSB0byBoZWxwIGRpc3Rpbmd1aXNoIHZhbGlkIFNQSSBmcmFtZXMgZnJvbSBnYXJiYWdlIChieSBleHBsaWNpdGx5IG1ha2luZyA8c2FtcD4weEZGPC9zYW1wPiBhbmQgPHNhbXA+MHgwMDwvc2FtcD4gaW52YWxpZCB2YWx1ZXMpLiBCaXQgNiBNVVNUIGJlIHNldCB0byBiZSBvbmUgYW5kIGJpdCA3IE1VU1QgYmUgY2xlYXJlZCAoMCkuIEEgZnJhbWUgcmVjZWl2ZWQgdGhhdCBoYXMgYW55IG90aGVyIHZhbHVlcyBmb3IgdGhlc2UgYml0cyBNVVNUIGJlIGRyb3BwZWQuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4yLjEucC41Ij5QcmlvciB0byBhIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgZnJhbWUsIHRoZSBtYXN0ZXIgTUFZIHNlbmQgYSA1LW9jdGV0IGZyYW1lIHdpdGggemVyb3MgZm9yIGJvdGggdGhlIG1heCByZWNlaXZlIGZyYW1lIHNpemUgYW5kIHRoZSB0aGUgY29udGFpbmVkIGZyYW1lIGxlbmd0aC4gVGhpcyB3aWxsIGluZHVjZSB0aGUgc2xhdmUgZGV2aWNlIHRvIGluZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIGl0IHdhbnRzIHRvIHNlbmQgKGlmIGFueSkgYW5kIGluZGljYXRlIHRoZSBsYXJnZXN0IGZyYW1lIGl0IGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGF0IHRoZSBtb21lbnQuICBUaGlzIGFsbG93cyB0aGUgbWFzdGVyIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV4dCB0cmFuc2FjdGlvbi4gIEFsdGVybmF0aXZlbHksIGlmIHRoZSBtYXN0ZXIgaGFzIGEgZnJhbWUgdG8gc2VuZCBpdCBjYW4ganVzdCBnbyBhaGVhZCBhbmQgc2VuZCBhIGZyYW1lIG9mIHRoYXQgbGVuZ3RoIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGZyYW1lIHdhcyBhY2NlcHRlZCBieSBjaGVja2luZyB0aGF0IHRoZSA8c2FtcD5SRUNWX0xFTjwvc2FtcD4gZnJvbSB0aGUgc2xhdmUgZnJhbWUgaXMgbGFyZ2VyIHRoYW4gdGhlIGZyYW1lIHRoZSBtYXN0ZXIganVzdCB0cmllZCB0byBzZW5kLiBJZiB0aGUgPHNhbXA+UkVDVl9MRU48L3NhbXA+IGlzIHNtYWxsZXIgdGhlbiB0aGUgZnJhbWUgd2Fzbid0IGFjY2VwdGVkIGFuZCB3aWxsIG5lZWQgdG8gYmUgdHJhbnNtaXR0ZWQgYWdhaW4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4yLjEucC42Ij5UaGlzIHByb3RvY29sIGNhbiBiZSB1c2VkIGVpdGhlciB1bmlkaXJlY3Rpb25hbGx5IG9yIGJpZGlyZWN0aW9uYWxseSwgZGV0ZXJtaW5lZCBieSB0aGUgYmVoYXZpb3Igb2YgdGhlIG1hc3RlciBhbmQgdGhlIHNsYXZlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMi4xLnAuNyI+SWYgdGhlIHRoZSBtYXN0ZXIgbm90aWNlcyA8c2FtcD5QQVRURVJOPC9zYW1wPiBpcyBub3Qgc2V0IGNvcnJlY3RseSwgdGhlIG1hc3RlciBzaG91bGQgY29uc2lkZXIgdGhlIHRyYW5zYWN0aW9uIHRvIGhhdmUgZmFpbGVkIGFuZCB0cnkgYWdhaW4gYWZ0ZXIgMTAgbWlsbGlzZWNvbmRzLCByZXRyeWluZyB1cCB0byAyMDAgdGltZXMuIEFmdGVyIHVuc3VjY2Vzc2Z1bGx5IHRyeWluZyAyMDAgdGltZXMgaW4gYSByb3csIHRoZSBtYXN0ZXIgTUFZIHRha2UgYXBwcm9wcmlhdGUgcmVtZWRpYWwgYWN0aW9uIChsaWtlIGEgTkNQIGhhcmR3YXJlIHJlc2V0LCBvciBpbmRpY2F0aW5nIGEgY29tbXVuaWNhdGlvbiBmYWlsdXJlIHRvIGEgdXNlciBpbnRlcmZhY2UpLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMi4xLnAuOCI+QXQgdGhlIGVuZCBvZiB0aGUgZGF0YSBvZiBhIGZyYW1lIGlzIGFuIG9wdGlvbmFsIDE2LWJpdCBDUkMsIHN1cHBvcnQgZm9yIHdoaWNoIGlzIGluZGljYXRlZCBieSB0aGUgPHNhbXA+Q1JDPC9zYW1wPiBiaXQgb2YgdGhlIDxzYW1wPkhEUjwvc2FtcD4gYnl0ZSBiZWluZyBzZXQuIElmIHRoZXNlIGJpdHMgYXJlIHNldCBmb3IgYm90aCB0aGUgbWFzdGVyIGFuZCBzbGF2ZSBmcmFtZXMsIHRoZW4gQ1JDIGNoZWNraW5nIGlzIGVuYWJsZWQgb24gYm90aCBzaWRlcywgZWZmZWN0aXZlbHkgcmVxdWlyaW5nIHRoYXQgZnJhbWUgc2l6ZXMgYmUgdHdvIGJ5dGVzIGxvbmdlciB0aGFuIHdvdWxkIGJlIG90aGVyd2lzZSByZXF1aXJlZC4gVGhlIENSQyBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBzYW1lIG1lY2hhbmlzbSB1c2VkIGZvciB0aGUgQ1JDIGNhbGN1bGF0aW9uIGluIEhETEMtTGl0ZSAoU2VlIDxhIGhyZWY9IiNoZGxjLWxpdGUiPkFwcGVuZGl4IEEuMS4yPC9hPikuICBXaGVuIGJvdGggb2YgdGhlIDxzYW1wPkNSQzwvc2FtcD4gYml0cyBhcmUgc2V0LCBib3RoIHNpZGVzIG11c3QgdmVyaWZ5IHRoYXQgdGhlIDxzYW1wPkNSQzwvc2FtcD4gaXMgdmFsaWQgYmVmb3JlIGFjY2VwdGluZyB0aGUgZnJhbWUuIElmIG5vdCBlbm91Z2ggYnl0ZXMgd2VyZSBjbG9ja2VkIG91dCBmb3IgdGhlIENSQyB0byBiZSByZWFkLCB0aGVuIHRoZSBmcmFtZSBtdXN0IGJlIGlnbm9yZWQuIElmIGVub3VnaCBieXRlcyB3ZXJlIGNsb2NrZWQgb3V0IHRvIHBlcmZvcm0gYSBDUkMgY2hlY2ssIGJ1dCB0aGUgQ1JDIGNoZWNrIGZhaWxzLCB0aGVuIHRoZSBmcmFtZSBtdXN0IGJlIHJlamVjdGVkIGFuZCB0aGUgPHNhbXA+Q1JDX0ZBSUw8L3NhbXA+IGJpdCBvbiB0aGUgbmV4dCBmcmFtZSAoYW5kIE9OTFkgdGhlIG5leHQgZnJhbWUpIE1VU1QgYmUgc2V0LiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS4zIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMyI+QS4zLjwvYT4gPGEgaHJlZj0iI2kyYy1yZWNvbW1lbmRhdGlvbnMiIGlkPSJpMmMtcmVjb21tZW5kYXRpb25zIj5JJiMxNzg7QyBSZWNvbW1lbmRhdGlvbnM8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjMucC4xIj5UQkQgPC9wPgorPHA+CisgIDxhIGlkPSJDUkVGNSIgY2xhc3M9ImluZm8iPltDUkVGNV08c3BhbiBjbGFzcz0iaW5mbyI+UlE6IEl0IG1heSBtYWtlIHNlbnNlIHRvIGhhdmUgYSBsb29rIGF0IHdoYXQgQmx1ZXRvb3RoIEhDSSBpcyBkb2luZyBmb3IgbmF0aXZlIEkmIzE3ODtDIGZyYW1pbmcgYW5kIGdvIHdpdGggdGhhdC48L3NwYW4+PC9hPgorPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS40Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuNCI+QS40LjwvYT4gPGEgaHJlZj0iI25hdGl2ZS11c2ItcmVjb21tZW5kYXRpb25zIiBpZD0ibmF0aXZlLXVzYi1yZWNvbW1lbmRhdGlvbnMiPk5hdGl2ZSBVU0IgUmVjb21tZW5kYXRpb25zPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS40LnAuMSI+VEJEIDwvcD4KKzxwPgorICA8YSBpZD0iQ1JFRjYiIGNsYXNzPSJpbmZvIj5bQ1JFRjZdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBJdCBtYXkgbWFrZSBzZW5zZSB0byBoYXZlIGEgbG9vayBhdCB3aGF0IEJsdWV0b290aCBIQ0kgaXMgZG9pbmcgZm9yIG5hdGl2ZSBVU0IgZnJhbWluZyBhbmQgZ28gd2l0aCB0aGF0Ljwvc3Bhbj48L2E+Cis8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIiPkFwcGVuZGl4IEIuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3JzIiBpZD0idGVzdC12ZWN0b3JzIj5UZXN0IFZlY3RvcnM8L2E+PC9oMT4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkIuMSI+PGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjEiPkIuMS48L2E+IDxhIGhyZWY9IiN0ZXN0LXZlY3Rvci1wYWNrZWQtdW5zaWduZWQtaW50ZWdlciIgaWQ9InRlc3QtdmVjdG9yLXBhY2tlZC11bnNpZ25lZC1pbnRlZ2VyIj5UZXN0IFZlY3RvcjogUGFja2VkIFVuc2lnbmVkIEludGVnZXI8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9InJpZ2h0Ij5EZWNpbWFsIFZhbHVlPC90aD4KKyAgICAgIDx0aCBjbGFzcz0ibGVmdCI+UGFja2V0IE9jdGV0IEVuY29kaW5nPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJyaWdodCI+MDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPgorICAgICAgICA8c2FtcD4wMDwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9InJpZ2h0Ij4xPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+CisgICAgICAgIDxzYW1wPjAxPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0icmlnaHQiPjEyNzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPgorICAgICAgICA8c2FtcD43Rjwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9InJpZ2h0Ij4xMjg8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij4KKyAgICAgICAgPHNhbXA+ODAgMDE8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJyaWdodCI+MTI5PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+CisgICAgICAgIDxzYW1wPjgxIDAxPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0icmlnaHQiPjEsMzM3PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+CisgICAgICAgIDxzYW1wPkI5IDBBPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0icmlnaHQiPjE2LDM4MzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPgorICAgICAgICA8c2FtcD5GRiA3Rjwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9InJpZ2h0Ij4xNiwzODQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij4KKyAgICAgICAgPHNhbXA+ODAgODAgMDE8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJyaWdodCI+MTYsMzg1PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+CisgICAgICAgIDxzYW1wPjgxIDgwIDAxPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0icmlnaHQiPjIsMDk3LDE1MTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPgorICAgICAgICA8c2FtcD5GRiBGRiA3Rjwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cD4KKyAgPGEgaWQ9IkNSRUY3IiBjbGFzcz0iaW5mbyI+W0NSRUY3XTxzcGFuIGNsYXNzPSJpbmZvIj5SUTogVGhlIFBVSSB0ZXN0LXZlY3RvciBlbmNvZGluZ3MgbmVlZCB0byBiZSB2ZXJpZmllZC48L3NwYW4+PC9hPgorPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQi4yIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuMiI+Qi4yLjwvYT4gPGEgaHJlZj0iI3Rlc3QtdmVjdG9yLXJlc2V0LWNvbW1hbmQiIGlkPSJ0ZXN0LXZlY3Rvci1yZXNldC1jb21tYW5kIj5UZXN0IFZlY3RvcjogUmVzZXQgQ29tbWFuZDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiAwPC9saT4KKyAgPGxpPkNNRDogMSAoPHNhbXA+Q01EX1JFU0VUPC9zYW1wPik8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5CLjIucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzgwIDAxCis8L3ByZT4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkIuMyI+PGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjMiPkIuMy48L2E+IDxhIGhyZWY9IiN0ZXN0LXZlY3Rvci1yZXNldC1ub3RpZmljYXRpb24iIGlkPSJ0ZXN0LXZlY3Rvci1yZXNldC1ub3RpZmljYXRpb24iPlRlc3QgVmVjdG9yOiBSZXNldCBOb3RpZmljYXRpb248L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+TkxJOiAwPC9saT4KKyAgPGxpPlRJRDogMDwvbGk+CisgIDxsaT5DTUQ6IDYgKDxzYW1wPkNNRF9WQUxVRV9JUzwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDAgKDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+KTwvbGk+CisgIDxsaT5WQUxVRTogMTE0ICg8c2FtcD5TVEFUVVNfUkVTRVRfU09GVFdBUkU8L3NhbXA+KTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuMy5wLjIiPkZyYW1lOiA8L3A+Cis8cHJlPgorODAgMDYgMDAgNzIKKzwvcHJlPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQi40Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuNCI+Qi40LjwvYT4gPGEgaHJlZj0iI3Rlc3QtdmVjdG9yLXNjYW4tYmVhY29uIiBpZD0idGVzdC12ZWN0b3Itc2Nhbi1iZWFjb24iPlRlc3QgVmVjdG9yOiBTY2FuIEJlYWNvbjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiAwPC9saT4KKyAgPGxpPkNNRDogNyAoPHNhbXA+Q01EX1ZBTFVFX0lOU0VSVEVEPC9zYW1wPik8L2xpPgorICA8bGk+UFJPUDogNTEgKDxzYW1wPlBST1BfTUFDX1NDQU5fQkVBQ09OPC9zYW1wPik8L2xpPgorICA8bGk+VkFMVUU6IFN0cnVjdHVyZSwgZW5jb2RlZCBhcyA8c2FtcD5DY3QoRVNTYyl0KGlDVWQpPC9zYW1wPiA8dWw+PGxpPkNIQU46IDE1PC9saT48bGk+UlNTSTogLTYwZEJtPC9saT48bGk+TUFDX0RBVEE6ICgwRCAwMCBCNiA0MCBENCA4QyBFOSAzOCBGOSA1MiBGRiBGRiBEMiAwNCAwMCkgPHVsPjxsaT5Mb25nIGFkZHJlc3M6IEI2OjQwOkQ0OjhDOkU5OjM4OkY5OjUyPC9saT48bGk+U2hvcnQgYWRkcmVzczogMHhGRkZGPC9saT48bGk+UEFOLUlEOiAweDA0RDI8L2xpPjxsaT5MUUk6IDA8L2xpPjwvdWw+PC9saT48bGk+TkVUX0RBVEE6ICgxMyAwMCAwMyAyMCA3MyA3MCA2OSA2RSA2NSA2QyAwMCAwOCAwMCBERSBBRCAwMCBCRSBFRiAwMCBDQSBGRSkgPHVsPjxsaT5Qcm90b2NvbCBOdW1iZXI6IDM8L2xpPjxsaT5GbGFnczogMHgyMDwvbGk+PGxpPk5ldHdvcmsgTmFtZTogPHNhbXA+c3BpbmVsPC9zYW1wPjwvbGk+PGxpPlhQQU5JRDogPHNhbXA+REUgQUQgMDAgQkUgRUYgMDAgQ0EgRkU8L3NhbXA+PC9saT48L3VsPjwvbGk+PC91bD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5CLjQucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzgwIDA3IDMzIDBGIEM0IDBEIDAwIEI2IDQwIEQ0IDhDIEU5IDM4IEY5IDUyIEZGIEZGIEQyIDA0IDAwCisxMyAwMCAwMyAyMCA3MyA3MCA2OSA2RSA2NSA2QyAwMCAwOCAwMCBERSBBRCAwMCBCRSBFRiAwMCBDQQorRkUKKzwvcHJlPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQi41Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuNSI+Qi41LjwvYT4gPGEgaHJlZj0iI3Rlc3QtdmVjdG9yLWluYm91bmQtaXB2Ni1wYWNrZXQiIGlkPSJ0ZXN0LXZlY3Rvci1pbmJvdW5kLWlwdjYtcGFja2V0Ij5UZXN0IFZlY3RvcjogSW5ib3VuZCBJUHY2IFBhY2tldDwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuNS5wLjEiPkNNRF9WQUxVRV9JUyhQUk9QX1NUUkVBTV9ORVQpIDwvcD4KKzxwPgorICA8YSBpZD0iQ1JFRjgiIGNsYXNzPSJpbmZvIj5bQ1JFRjhdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLjwvc3Bhbj48L2E+Cis8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CLjYiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi42Ij5CLjYuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3Itb3V0Ym91bmQtaXB2Ni1wYWNrZXQiIGlkPSJ0ZXN0LXZlY3Rvci1vdXRib3VuZC1pcHY2LXBhY2tldCI+VGVzdCBWZWN0b3I6IE91dGJvdW5kIElQdjYgUGFja2V0PC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQi42LnAuMSI+Q01EX1ZBTFVFX1NFVChQUk9QX1NUUkVBTV9ORVQpIDwvcD4KKzxwPgorICA8YSBpZD0iQ1JFRjkiIGNsYXNzPSJpbmZvIj5bQ1JFRjldPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLjwvc3Bhbj48L2E+Cis8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CLjciPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi43Ij5CLjcuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3ItZmV0Y2gtbGlzdC1vZi1vbm1lc2gtbmV0d29ya3MiIGlkPSJ0ZXN0LXZlY3Rvci1mZXRjaC1saXN0LW9mLW9ubWVzaC1uZXR3b3JrcyI+VGVzdCBWZWN0b3I6IEZldGNoIGxpc3Qgb2Ygb24tbWVzaCBuZXR3b3JrczwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiA0PC9saT4KKyAgPGxpPkNNRDogMiAoPHNhbXA+Q01EX1ZBTFVFX0dFVDwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDkwICg8c2FtcD5QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L3NhbXA+KTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuNy5wLjIiPkZyYW1lOiA8L3A+Cis8cHJlPgorODQgMDIgNUEKKzwvcHJlPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQi44Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuOCI+Qi44LjwvYT4gPGEgaHJlZj0iI3Rlc3QtdmVjdG9yLXJldHVybmVkLWxpc3Qtb2Ytb25tZXNoLW5ldHdvcmtzIiBpZD0idGVzdC12ZWN0b3ItcmV0dXJuZWQtbGlzdC1vZi1vbm1lc2gtbmV0d29ya3MiPlRlc3QgVmVjdG9yOiBSZXR1cm5lZCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3M8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+TkxJOiAwPC9saT4KKyAgPGxpPlRJRDogNDwvbGk+CisgIDxsaT5DTUQ6IDYgKDxzYW1wPkNNRF9WQUxVRV9JUzwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDkwICg8c2FtcD5QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L3NhbXA+KTwvbGk+CisgIDxsaT5WQUxVRTogQXJyYXkgb2Ygc3RydWN0dXJlcywgZW5jb2RlZCBhcyA8c2FtcD5BKHQoNkNiQykpPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5JUHY2IFByZWZpeDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+UHJlZml4IExlbmd0aDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+U3RhYmxlIEZsYWc8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk90aGVyIEZsYWdzPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjIwMDE6REI4OjE6OjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+NjQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlRydWU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPj8/PC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4yMDAxOkRCODoyOjo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjY0PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GYWxzZTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Pz88L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuOC5wLjIiPkZyYW1lOiA8L3A+Cis8cHJlPgorODQgMDYgNUEgMTMgMDAgMjAgMDEgMEQgQjggMDAgMDEgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKzAwIDQwIDAxID8/IDEzIDAwIDIwIDAxIDBEIEI4IDAwIDAyIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCiswMCAwMCA0MCAwMCA/PworPC9wcmU+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CLjkiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi45Ij5CLjkuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3ItYWRkaW5nLWFuLW9ubWVzaC1uZXR3b3JrIiBpZD0idGVzdC12ZWN0b3ItYWRkaW5nLWFuLW9ubWVzaC1uZXR3b3JrIj5UZXN0IFZlY3RvcjogQWRkaW5nIGFuIG9uLW1lc2ggbmV0d29yazwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiA1PC9saT4KKyAgPGxpPkNNRDogNCAoPHNhbXA+Q01EX1ZBTFVFX0lOU0VSVDwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDkwICg8c2FtcD5QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L3NhbXA+KTwvbGk+CisgIDxsaT5WQUxVRTogU3RydWN0dXJlLCBlbmNvZGVkIGFzIDxzYW1wPjZDYkNiPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5JUHY2IFByZWZpeDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+UHJlZml4IExlbmd0aDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+U3RhYmxlIEZsYWc8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk90aGVyIEZsYWdzPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjIwMDE6REI4OjM6OjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+NjQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlRydWU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPj8/PC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi5CLjkucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzg1IDAzIDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDQwCiswMSA/PyAwMQorPC9wcmU+Cis8cD4KKyAgPGEgaWQ9IkNSRUYxMCIgY2xhc3M9ImluZm8iPltDUkVGMTBdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLjwvc3Bhbj48L2E+Cis8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CLjEwIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuMTAiPkIuMTAuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3ItaW5zZXJ0aW9uLW5vdGlmaWNhdGlvbi1vZi1hbi1vbm1lc2gtbmV0d29yayIgaWQ9InRlc3QtdmVjdG9yLWluc2VydGlvbi1ub3RpZmljYXRpb24tb2YtYW4tb25tZXNoLW5ldHdvcmsiPlRlc3QgVmVjdG9yOiBJbnNlcnRpb24gbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yazwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiA1PC9saT4KKyAgPGxpPkNNRDogNyAoPHNhbXA+Q01EX1ZBTFVFX0lOU0VSVEVEPC9zYW1wPik8L2xpPgorICA8bGk+UFJPUDogOTAgKDxzYW1wPlBST1BfVEhSRUFEX09OX01FU0hfTkVUUzwvc2FtcD4pPC9saT4KKyAgPGxpPlZBTFVFOiBTdHJ1Y3R1cmUsIGVuY29kZWQgYXMgPHNhbXA+NkNiQ2I8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPklQdjYgUHJlZml4PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5QcmVmaXggTGVuZ3RoPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5TdGFibGUgRmxhZzwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T3RoZXIgRmxhZ3M8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MjAwMTpEQjg6Mzo6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj42NDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+VHJ1ZTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Pz88L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuMTAucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzg1IDA3IDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDQwCiswMSA/PyAwMQorPC9wcmU+Cis8cD4KKyAgPGEgaWQ9IkNSRUYxMSIgY2xhc3M9ImluZm8iPltDUkVGMTFdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLjwvc3Bhbj48L2E+Cis8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CLjExIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuMTEiPkIuMTEuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3ItcmVtb3ZpbmctYS1sb2NhbC1vbm1lc2gtbmV0d29yayIgaWQ9InRlc3QtdmVjdG9yLXJlbW92aW5nLWEtbG9jYWwtb25tZXNoLW5ldHdvcmsiPlRlc3QgVmVjdG9yOiBSZW1vdmluZyBhIGxvY2FsIG9uLW1lc2ggbmV0d29yazwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiA2PC9saT4KKyAgPGxpPkNNRDogNSAoPHNhbXA+Q01EX1ZBTFVFX1JFTU9WRTwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDkwICg8c2FtcD5QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L3NhbXA+KTwvbGk+CisgIDxsaT5WQUxVRTogSVB2NiBQcmVmaXggPHNhbXA+MjAwMTpEQjg6Mzo6PC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuMTEucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzg2IDA1IDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCis8L3ByZT4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkIuMTIiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4xMiI+Qi4xMi48L2E+IDxhIGhyZWY9IiN0ZXN0LXZlY3Rvci1yZW1vdmFsLW5vdGlmaWNhdGlvbi1vZi1hbi1vbm1lc2gtbmV0d29yayIgaWQ9InRlc3QtdmVjdG9yLXJlbW92YWwtbm90aWZpY2F0aW9uLW9mLWFuLW9ubWVzaC1uZXR3b3JrIj5UZXN0IFZlY3RvcjogUmVtb3ZhbCBub3RpZmljYXRpb24gb2YgYW4gb24tbWVzaCBuZXR3b3JrPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPk5MSTogMDwvbGk+CisgIDxsaT5USUQ6IDY8L2xpPgorICA8bGk+Q01EOiA4ICg8c2FtcD5DTURfVkFMVUVfUkVNT1ZFRDwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDkwICg8c2FtcD5QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L3NhbXA+KTwvbGk+CisgIDxsaT5WQUxVRTogSVB2NiBQcmVmaXggPHNhbXA+MjAwMTpEQjg6Mzo6PC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuMTIucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzg2IDA4IDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCis8L3ByZT4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkMiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQyI+QXBwZW5kaXggQy48L2E+IDxhIGhyZWY9IiNleGFtcGxlLXNlc3Npb25zIiBpZD0iZXhhbXBsZS1zZXNzaW9ucyI+RXhhbXBsZSBTZXNzaW9uczwvYT48L2gxPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQy4xIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMSI+Qy4xLjwvYT4gPGEgaHJlZj0iI25jcC1pbml0aWFsaXphdGlvbiIgaWQ9Im5jcC1pbml0aWFsaXphdGlvbiI+TkNQIEluaXRpYWxpemF0aW9uPC9hPjwvaDE+Cis8cD4KKyAgPGEgaWQ9IkNSRUYxMiIgY2xhc3M9ImluZm8iPltDUkVGMTJdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS48L3NwYW4+PC9hPgorPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMS5wLjIiPkNoZWNrIHRoZSBwcm90b2NvbCB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBzdXBwb3J0ZWQ6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX0dFVDpQUk9QX1BST1RPQ09MX1ZFUlNJT048L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfUFJPVE9DT0xfVkVSU0lPTjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMS5wLjQiPkNoZWNrIHRoZSBOQ1AgdmVyc2lvbiB0byBzZWUgaWYgYSBmaXJtd2FyZSB1cGRhdGUgbWF5IGJlIG5lY2Vzc2FyeTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfR0VUOlBST1BfTkNQX1ZFUlNJT048L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTkNQX1ZFUlNJT048L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjEucC42Ij5DaGVjayBpbnRlcmZhY2UgdHlwZSB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyB3aGF0IHdlIGV4cGVjdDogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfR0VUOlBST1BfSU5URVJGQUNFX1RZUEU8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfSU5URVJGQUNFX1RZUEU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjEucC44Ij5JZiB0aGUgaG9zdCBzdXBwb3J0cyB1c2luZyB2ZW5kb3Itc3BlY2lmaWMgY29tbWFuZHMsIHRoZSB2ZW5kb3Igc2hvdWxkIGJlIHZlcmlmaWVkIGJlZm9yZSB1c2luZyB0aGVtOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9HRVQ6UFJPUF9WRU5ET1JfSUQ8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfVkVORE9SX0lEPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy4xLnAuMTAiPkZldGNoIHRoZSBjYXBhYmlsaXR5IGxpc3Qgc28gdGhhdCB3ZSBrbm93IHdoYXQgZmVhdHVyZXMgdGhpcyBOQ1Agc3VwcG9ydHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX0dFVDpQUk9QX0NBUFM8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfQ0FQUzwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMS5wLjEyIj5JZiB0aGUgTkNQIHN1cHBvcnRzIENBUF9ORVRfU0FWRSwgdGhlbiB3ZSBnbyBhaGVhZCBhbmQgcmVjYWxsIHRoZSBuZXR3b3JrOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9ORVRfUkVDQUxMPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5DLjIiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy4yIj5DLjIuPC9hPiA8YSBocmVmPSIjYXR0YWNoaW5nLXRvLWEtbmV0d29yayIgaWQ9ImF0dGFjaGluZy10by1hLW5ldHdvcmsiPkF0dGFjaGluZyB0byBhIG5ldHdvcms8L2E+PC9oMT4KKzxwPgorICA8YSBpZD0iQ1JFRjEzIiBjbGFzcz0iaW5mbyI+W0NSRUYxM108c3BhbiBjbGFzcz0iaW5mbyI+UlE6IEZJWE1FOiBUaGlzIGV4YW1wbGUgc2Vzc2lvbiBpcyBpbmNvbXBsZXRlLjwvc3Bhbj48L2E+Cis8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy4yLnAuMiI+V2UgbWFrZSB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBOQ1AgaXMgbm90IGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggYSBuZXR3b3JrLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMi5wLjMiPlNldCB0aGUgbmV0d29yayBwcm9wZXJ0aWVzLCBpZiB0aGV5IHdlcmUgbm90IGFscmVhZHkgc2V0OiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9TRVQ6UFJPUF9QSFlfQ0hBTjwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9QSFlfQ0hBTjwvbGk+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX1hQQU5JRDwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfWFBBTklEPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9TRVQ6UFJPUF9NQUNfMTVfNF9QQU5JRDwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9NQUNfMTVfNF9QQU5JRDwvbGk+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX05FVFdPUktfTkFNRTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfTkVUV09SS19OQU1FPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfTUFTVEVSX0tFWTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfTUFTVEVSX0tFWTwvbGk+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUjwvbGk+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMi5wLjUiPkJyaW5nIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1cDogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX0lGX1VQOlRSVUU8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTkVUX0lGX1VQOlRSVUU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjIucC43Ij5CcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX1NUQUNLX1VQOlRSVUU8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOlRSVUU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjIucC45Ij5Tb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9ST0xFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9QQVJUSVRJT05fSUQ8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfVEhSRUFEX09OX01FU0hfTkVUUzwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQy4zIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMyI+Qy4zLjwvYT4gPGEgaHJlZj0iI3N1Y2Nlc3NmdWxseS1qb2luaW5nLWEtcHJlZXhpc3RpbmctbmV0d29yayIgaWQ9InN1Y2Nlc3NmdWxseS1qb2luaW5nLWEtcHJlZXhpc3RpbmctbmV0d29yayI+U3VjY2Vzc2Z1bGx5IGpvaW5pbmcgYSBwcmUtZXhpc3RpbmcgbmV0d29yazwvYT48L2gxPgorPHA+CisgIDxhIGlkPSJDUkVGMTQiIGNsYXNzPSJpbmZvIj5bQ1JFRjE0XTxzcGFuIGNsYXNzPSJpbmZvIj5SUTogRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuPC9zcGFuPjwvYT4KKzwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjMucC4yIj5UaGlzIGV4YW1wbGUgc2Vzc2lvbiBpcyBpZGVudGljYWwgdG8gdGhlIGFib3ZlIHNlc3Npb24gdXAgdG8gdGhlIHBvaW50IHdoZXJlIHdlIHNldCBQUk9QX05FVF9JRl9VUCB0byB0cnVlLiBGcm9tIHRoZXJlLCB0aGUgYmVoYXZpb3IgY2hhbmdlcy4gIDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX1NFVDpQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc6VFJVRTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HOlRSVUU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjMucC40Ij5CcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX1NUQUNLX1VQOlRSVUU8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOlRSVUU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjMucC42Ij5Tb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9ST0xFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9QQVJUSVRJT05fSUQ8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfVEhSRUFEX09OX01FU0hfTkVUUzwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMy5wLjgiPk5vdyBsZXQncyBzYXZlIHRoZSBuZXR3b3JrIHNldHRpbmdzIHRvIE5WUkFNOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9ORVRfU0FWRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQy40Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuNCI+Qy40LjwvYT4gPGEgaHJlZj0iI3Vuc3VjY2Vzc2Z1bGx5LWpvaW5pbmctYS1wcmVleGlzdGluZy1uZXR3b3JrIiBpZD0idW5zdWNjZXNzZnVsbHktam9pbmluZy1hLXByZWV4aXN0aW5nLW5ldHdvcmsiPlVuc3VjY2Vzc2Z1bGx5IGpvaW5pbmcgYSBwcmUtZXhpc3RpbmcgbmV0d29yazwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuNC5wLjEiPlRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGlkZW50aWNhbCB0byB0aGUgYWJvdmUgc2Vzc2lvbiB1cCB0byB0aGUgcG9pbnQgd2hlcmUgd2Ugc2V0IFBST1BfTkVUX0lGX1VQIHRvIHRydWUuIEZyb20gdGhlcmUsIHRoZSBiZWhhdmlvciBjaGFuZ2VzLiAgPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORzpUUlVFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc6VFJVRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuNC5wLjMiPkJyaW5nIHRoZSByb3V0aW5nIHN0YWNrIHVwOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuNC5wLjUiPlNvbWUgYXN5bmNocm9ub3VzIGV2ZW50cyBmcm9tIHRoZSBOQ1A6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTEFTVF9TVEFUVVM6U1RBVFVTX0pPSU5fTk9fUEVFUlM8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOkZBTFNFPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5DLjUiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy41Ij5DLjUuPC9hPiA8YSBocmVmPSIjZGV0YWNoaW5nLWZyb20tYS1uZXR3b3JrIiBpZD0iZGV0YWNoaW5nLWZyb20tYS1uZXR3b3JrIj5EZXRhY2hpbmcgZnJvbSBhIG5ldHdvcms8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjUucC4xIj5UQkQgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQy42Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuNiI+Qy42LjwvYT4gPGEgaHJlZj0iI2F0dGFjaGluZy10by1hLXNhdmVkLW5ldHdvcmsiIGlkPSJhdHRhY2hpbmctdG8tYS1zYXZlZC1uZXR3b3JrIj5BdHRhY2hpbmcgdG8gYSBzYXZlZCBuZXR3b3JrPC9hPjwvaDE+Cis8cD4KKyAgPGEgaWQ9IkNSRUYxNSIgY2xhc3M9ImluZm8iPltDUkVGMTVdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS48L3NwYW4+PC9hPgorPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuNi5wLjIiPlJlY2FsbCB0aGUgc2F2ZWQgbmV0d29yayBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc286IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX05FVF9SRUNBTEw8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjYucC40Ij5CcmluZyB0aGUgbmV0d29yayBpbnRlcmZhY2UgdXA6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX1NFVDpQUk9QX05FVF9JRl9VUDpUUlVFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9JRl9VUDpUUlVFPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy42LnAuNiI+QnJpbmcgdGhlIHJvdXRpbmcgc3RhY2sgdXA6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX1NFVDpQUk9QX05FVF9TVEFDS19VUDpUUlVFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9TVEFDS19VUDpUUlVFPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy42LnAuOCI+U29tZSBhc3luY2hyb25vdXMgZXZlbnRzIGZyb20gdGhlIE5DUDogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfUk9MRTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfUEFSVElUSU9OX0lEPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkMuNyI+PGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjciPkMuNy48L2E+IDxhIGhyZWY9IiNuY3Atc29mdHdhcmUtcmVzZXQiIGlkPSJuY3Atc29mdHdhcmUtcmVzZXQiPk5DUCBTb2Z0d2FyZSBSZXNldDwvYT48L2gxPgorPHA+CisgIDxhIGlkPSJDUkVGMTYiIGNsYXNzPSJpbmZvIj5bQ1JFRjE2XTxzcGFuIGNsYXNzPSJpbmZvIj5SUTogRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuPC9zcGFuPjwvYT4KKzwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1JFU0VUPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX0xBU1RfU1RBVFVTOlNUQVRVU19SRVNFVF9TT0ZUV0FSRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuNy5wLjMiPlRoZW4ganVtcCB0byA8YSBocmVmPSIjbmNwLWluaXRpYWxpemF0aW9uIj5BcHBlbmRpeCBDLjE8L2E+LiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQy44Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuOCI+Qy44LjwvYT4gPGEgaHJlZj0iI2FkZGluZy1hbi1vbm1lc2gtcHJlZml4IiBpZD0iYWRkaW5nLWFuLW9ubWVzaC1wcmVmaXgiPkFkZGluZyBhbiBvbi1tZXNoIHByZWZpeDwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuOC5wLjEiPlRCRCA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5DLjkiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy45Ij5DLjkuPC9hPiA8YSBocmVmPSIjZW50ZXJpbmctbG93cG93ZXItbW9kZXMiIGlkPSJlbnRlcmluZy1sb3dwb3dlci1tb2RlcyI+RW50ZXJpbmcgbG93LXBvd2VyIG1vZGVzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy45LnAuMSI+VEJEIDwvcD4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkMuMTAiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy4xMCI+Qy4xMC48L2E+IDxhIGhyZWY9IiNzbmlmZmluZy1yYXctcGFja2V0cyIgaWQ9InNuaWZmaW5nLXJhdy1wYWNrZXRzIj5TbmlmZmluZyByYXcgcGFja2V0czwvYT48L2gxPgorPHA+CisgIDxhIGlkPSJDUkVGMTciIGNsYXNzPSJpbmZvIj5bQ1JFRjE3XTxzcGFuIGNsYXNzPSJpbmZvIj5SUTogRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuPC9zcGFuPjwvYT4KKzwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjEwLnAuMiI+VGhpcyBhc3N1bWVzIHRoYXQgdGhlIE5DUCBoYXMgYmVlbiBpbml0aWFsaXplZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjEwLnAuMyI+T3B0aW9uYWxseSBzZXQgdGhlIGNoYW5uZWw6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX1NFVDpQUk9QX1BIWV9DSEFOOng8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfUEhZX0NIQU48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjEwLnAuNSI+U2V0IHRoZSBmaWx0ZXIgbW9kZTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTUFDX1BST01JU0NVT1VTX01PREU6TUFDX1BST01JU0NVT1VTX01PREVfTU9OSVRPUjwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9NQUNfUFJPTUlTQ1VPVVNfTU9ERTpNQUNfUFJPTUlTQ1VPVVNfTU9ERV9NT05JVE9SPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy4xMC5wLjciPkVuYWJsZSB0aGUgcmF3IHN0cmVhbTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRDpUUlVFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQ6VFJVRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMTAucC45Ij5FbmFibGUgdGhlIFBIWSBkaXJlY3RseTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfUEhZX0VOQUJMRUQ6VFJVRTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9QSFlfRU5BQkxFRDpUUlVFPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy4xMC5wLjExIj5Ob3cgd2Ugd2lsbCBnZXQgcmF3IDgwMi4xNS40IHBhY2tldHMgYXN5bmNocm9ub3VzbHkgb24gUFJPUF9TVFJFQU1fUkFXOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX1NUUkVBTV9SQVc6Li4uPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX1NUUkVBTV9SQVc6Li4uPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX1NUUkVBTV9SQVc6Li4uPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy4xMC5wLjEzIj5UaGlzIG1vZGUgbWF5IGJlIGVudGVyZWQgZXZlbiB3aGVuIGFzc29jaWF0ZWQgd2l0aCBhIG5ldHdvcmsuICBJbiB0aGF0IGNhc2UsIHlvdSBzaG91bGQgc2V0IDxzYW1wPlBST1BfTUFDX1BST01JU0NVT1VTX01PREU8L3NhbXA+IHRvIDxzYW1wPk1BQ19QUk9NSVNDVU9VU19NT0RFX1BST01JU0NVT1VTPC9zYW1wPiBvciA8c2FtcD5NQUNfUFJPTUlTQ1VPVVNfTU9ERV9OT1JNQUw8L3NhbXA+LCBzbyB0aGF0IHlvdSBjYW4gYXZvaWQgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBvdGhlciBuZXR3b3JrcyBvciB0aGF0IGFyZSBkZXN0aW5lZCBmb3Igb3RoZXIgbm9kZXMuICA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5EIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkQiPkFwcGVuZGl4IEQuPC9hPiA8YSBocmVmPSIjZ2xvc3NhcnkiIGlkPSJnbG9zc2FyeSI+R2xvc3Nhcnk8L2E+PC9oMT4KKzxwPgorICA8YSBpZD0iQ1JFRjE4IiBjbGFzcz0iaW5mbyI+W0NSRUYxOF08c3BhbiBjbGFzcz0iaW5mbyI+UlE6IEFscGhhYmV0aXplIGJlZm9yZSBmaW5hbGl6YXRpb24uPC9zcGFuPjwvYT4KKzwvcD4KKzxwLz4KKworPGRsPgorICA8ZHQ+RkNTPC9kdD4KKyAgPGRkIHN0eWxlPSJtYXJnaW4tbGVmdDogOCI+PGJyLz4gRmluYWwgQ2hlY2tzdW0uIEJ5dGVzIGFkZGVkIHRvIHRoZSBlbmQgb2YgYSBwYWNrZXQgdG8gaGVscCBkZXRlcm1pbmUgaWYgdGhlIHBhY2tldCB3YXMgcmVjZWl2ZWQgd2l0aG91dCBjb3JydXB0aW9uLjwvZGQ+CisgIDxkdD5OQ1A8L2R0PgorICA8ZGQgc3R5bGU9Im1hcmdpbi1sZWZ0OiA4Ij48YnIvPiBOZXR3b3JrIENvbnRyb2wgUHJvY2Vzc29yLjwvZGQ+CisgIDxkdD5OTEk8L2R0PgorICA8ZGQgc3R5bGU9Im1hcmdpbi1sZWZ0OiA4Ij48YnIvPiBOZXR3b3JrIExpbmsgSWRlbnRpZmllci4gTWF5IGJlIGEgdmFsdWUgYmV0d2VlbiB6ZXJvIGFuZCB0aHJlZS4gU2VlIDxhIGhyZWY9IiNubGktbmV0d29yay1saW5rLWlkZW50aWZpZXIiPlNlY3Rpb24gMi4xLjI8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvZGQ+CisgIDxkdD5PUzwvZHQ+CisgIDxkZCBzdHlsZT0ibWFyZ2luLWxlZnQ6IDgiPjxici8+IE9wZXJhdGluZyBTeXN0ZW0sIGkuZS4gdGhlIElQdjYgbm9kZSB1c2luZyBTcGluZWwgdG8gY29udHJvbCBhbmQgbWFuYWdlIG9uZSBvciBtb3JlIG9mIGl0cyBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlcy48L2RkPgorICA8ZHQ+UEhZPC9kdD4KKyAgPGRkIHN0eWxlPSJtYXJnaW4tbGVmdDogOCI+PGJyLz4gUGh5c2ljYWwgbGF5ZXIuIFJlZmVycyB0byBjaGFyYWN0ZXJpc3RpY3MgYW5kIHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aGUgcGh5c2ljYWwgaW1wbGVtZW50YXRpb24gYW5kIG9wZXJhdGlvbiBvZiBhIG5ldHdvcmtpbmcgbWVkaXVtLjwvZGQ+CisgIDxkdD5QVUk8L2R0PgorICA8ZGQgc3R5bGU9Im1hcmdpbi1sZWZ0OiA4Ij48YnIvPiBQYWNrZWQgVW5zaWduZWQgSW50ZWdlci4gQSB3YXkgdG8gc2VyaWFsaXplIGFuIHVuc2lnbmVkIGludGVnZXIgdXNpbmcgb25lLCB0d28sIG9yIHRocmVlIGJ5dGVzLiBVc2VkIHRocm91Z2hvdXQgdGhlIFNwaW5lbCBwcm90b2NvbC4gU2VlIDxhIGhyZWY9IiNwYWNrZWQtdW5zaWduZWQtaW50ZWdlciI+U2VjdGlvbiAzLjI8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvZGQ+CisgIDxkdD5USUQ8L2R0PgorICA8ZGQgc3R5bGU9Im1hcmdpbi1sZWZ0OiA4Ij48YnIvPiBUcmFuc2FjdGlvbiBJZGVudGlmaWVyLiBNYXkgYmUgYSB2YWx1ZSBiZXR3ZWVuIHplcm8gYW5kIGZpZnRlZW4uIFNlZSA8YSBocmVmPSIjdGlkLXRyYW5zYWN0aW9uLWlkZW50aWZpZXIiPlNlY3Rpb24gMi4xLjM8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvZGQ+Cis8L2RsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguRSI+PGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5FIj5BcHBlbmRpeCBFLjwvYT4gPGEgaHJlZj0iI2Fja25vd2xlZGdtZW50cyIgaWQ9ImFja25vd2xlZGdtZW50cyI+QWNrbm93bGVkZ21lbnRzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uRS5wLjEiPlRocmVhZCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFRoZSBUaHJlYWQgR3JvdXAsIEluYy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5FLnAuMiI+U3BlY2lhbCB0aGFua3MgdG8gTmljayBCYW5rcywgSm9uYXRoYW4gSHVpLCBBYnRpbiBLZXNoYXZhcnppYW4sIFlha3VuIFh1LCBQaW90ciBTemtvdGFrLCBBcmp1bmEgU2l2YXNpdGhhbWJhcmVzYW4gYW5kIE1hcnRpbiBUdXJvbiBmb3IgdGhlaXIgc3Vic3RhbnRpYWwgY29udHJpYnV0aW9ucyBhbmQgZmVlZGJhY2sgcmVsYXRlZCB0byB0aGlzIGRvY3VtZW50LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkUucC4zIj5UaGlzIGRvY3VtZW50IHdhcyBwcmVwYXJlZCB1c2luZyA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWlla2cvbW1hcmsiPm1tYXJrPC9hPiBieSAoTWllayBHaWViZW4pIGFuZCA8YSBocmVmPSJodHRwOi8veG1sMnJmYy5pZXRmLm9yZy8iPnhtbDJyZmMgKHZlcnNpb24gMik8L2E+LiAgPC9wPgorPGgxIGlkPSJyZmMuYXV0aG9ycyI+CisgIDxhIGhyZWY9IiNyZmMuYXV0aG9ycyI+QXV0aG9ycycgQWRkcmVzc2VzPC9hPgorPC9oMT4KKzxkaXYgY2xhc3M9ImF2b2lkYnJlYWsiPgorICA8YWRkcmVzcyBjbGFzcz0idmNhcmQiPgorCTxzcGFuIGNsYXNzPSJ2Y2FyZGxpbmUiPgorCSAgPHNwYW4gY2xhc3M9ImZuIj5Sb2JlcnQgUy4gUXVhdHRsZWJhdW08L3NwYW4+IAorCSAgPHNwYW4gY2xhc3M9Im4gaGlkZGVuIj4KKwkJPHNwYW4gY2xhc3M9ImZhbWlseS1uYW1lIj5RdWF0dGxlYmF1bTwvc3Bhbj4KKwkgIDwvc3Bhbj4KKwk8L3NwYW4+CisJPHNwYW4gY2xhc3M9Im9yZyB2Y2FyZGxpbmUiPk5lc3QgTGFicywgSW5jLjwvc3Bhbj4KKwk8c3BhbiBjbGFzcz0iYWRyIj4KKwkgIDxzcGFuIGNsYXNzPSJ2Y2FyZGxpbmUiPjM0MDAgSGlsbHZpZXcgQXZlLjwvc3Bhbj4KKworCSAgPHNwYW4gY2xhc3M9InZjYXJkbGluZSI+CisJCTxzcGFuIGNsYXNzPSJsb2NhbGl0eSI+UGFsbyBBbHRvPC9zcGFuPiwgIAorCQk8c3BhbiBjbGFzcz0icmVnaW9uIj5DYWxpZm9ybmlhPC9zcGFuPiAKKwkJPHNwYW4gY2xhc3M9ImNvZGUiPjk0MzA0PC9zcGFuPgorCSAgPC9zcGFuPgorCSAgPHNwYW4gY2xhc3M9ImNvdW50cnktbmFtZSB2Y2FyZGxpbmUiPlVTQTwvc3Bhbj4KKwk8L3NwYW4+CisJPHNwYW4gY2xhc3M9InZjYXJkbGluZSI+RU1haWw6IDxhIGhyZWY9Im1haWx0bzpycXVhdHRsZUBuZXN0bGFicy5jb20iPnJxdWF0dGxlQG5lc3RsYWJzLmNvbTwvYT48L3NwYW4+CisKKyAgPC9hZGRyZXNzPgorPC9kaXY+PGRpdiBjbGFzcz0iYXZvaWRicmVhayI+CisgIDxhZGRyZXNzIGNsYXNzPSJ2Y2FyZCI+CisJPHNwYW4gY2xhc3M9InZjYXJkbGluZSI+CisJICA8c3BhbiBjbGFzcz0iZm4iPkphbWVzIFdvb2R5YXR0PC9zcGFuPiAoZWRpdG9yKQorCSAgPHNwYW4gY2xhc3M9Im4gaGlkZGVuIj4KKwkJPHNwYW4gY2xhc3M9ImZhbWlseS1uYW1lIj5Xb29keWF0dDwvc3Bhbj4KKwkgIDwvc3Bhbj4KKwk8L3NwYW4+CisJPHNwYW4gY2xhc3M9Im9yZyB2Y2FyZGxpbmUiPk5lc3QgTGFicywgSW5jLjwvc3Bhbj4KKwk8c3BhbiBjbGFzcz0iYWRyIj4KKwkgIDxzcGFuIGNsYXNzPSJ2Y2FyZGxpbmUiPjM0MDAgSGlsbHZpZXcgQXZlLjwvc3Bhbj4KKworCSAgPHNwYW4gY2xhc3M9InZjYXJkbGluZSI+CisJCTxzcGFuIGNsYXNzPSJsb2NhbGl0eSI+UGFsbyBBbHRvPC9zcGFuPiwgIAorCQk8c3BhbiBjbGFzcz0icmVnaW9uIj5DYWxpZm9ybmlhPC9zcGFuPiAKKwkJPHNwYW4gY2xhc3M9ImNvZGUiPjk0MzA0PC9zcGFuPgorCSAgPC9zcGFuPgorCSAgPHNwYW4gY2xhc3M9ImNvdW50cnktbmFtZSB2Y2FyZGxpbmUiPlVTQTwvc3Bhbj4KKwk8L3NwYW4+CisJPHNwYW4gY2xhc3M9InZjYXJkbGluZSI+RU1haWw6IDxhIGhyZWY9Im1haWx0bzpqaHdAbmVzdGxhYnMuY29tIj5qaHdAbmVzdGxhYnMuY29tPC9hPjwvc3Bhbj4KKworICA8L2FkZHJlc3M+Cis8L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLnR4dCBiL2RvYy9kcmFmdC1ycXVhdHRsZS1zcGluZWwtdW5pZmllZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiODczZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9kcmFmdC1ycXVhdHRsZS1zcGluZWwtdW5pZmllZC50eHQKQEAgLTAsMCArMSw0NjQ4IEBACisKKworCisKK05ldHdvcmsgV29ya2luZyBHcm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLiBRdWF0dGxlYmF1bQorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKLiBXb29keWF0dCwgRWQuCitJbnRlbmRlZCBzdGF0dXM6IEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXN0IExhYnMsIEluYy4KK0V4cGlyZXM6IERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVuZSAyMiwgMjAxNworCisKKyAgICAgICAgICAgICAgICAgICAgU3BpbmVsIEhvc3QtQ29udHJvbGxlciBQcm90b2NvbAorICAgICAgICAgICAgICAgICBkcmFmdC1ycXVhdHRsZS1zcGluZWwtdW5pZmllZC1hYjU2MjhhNQorCitBYnN0cmFjdAorCisgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgU3BpbmVsIHByb3RvY29sLCB3aGljaCBmYWNpbGl0YXRlcyB0aGUKKyAgIGNvbnRyb2wgYW5kIG1hbmFnZW1lbnQgb2YgSVB2NiBuZXR3b3JrIGludGVyZmFjZXMgb24gZGV2aWNlcyB3aGVyZQorICAgZ2VuZXJhbCBwdXJwb3NlIGFwcGxpY2F0aW9uIHByb2Nlc3NvcnMgb2ZmbG9hZCBuZXR3b3JrIGZ1bmN0aW9ucyBhdAorICAgdGhlaXIgaW50ZXJmYWNlcyB0byBuZXR3b3JrIGNvLXByb2Nlc3NvcnMgKE5DUCkgY29ubmVjdGVkIGJ5IHNpbXBsZQorICAgY29tbXVuaWNhdGlvbiBsaW5rcyBsaWtlIHNlcmlhbCBkYXRhIGNoYW5uZWxzLiAgV2hpbGUgaW5pdGlhbGx5CisgICBkZXZlbG9wZWQgdG8gc3VwcG9ydCBUaHJlYWQoUiksIFNwaW5lbCdzIGxheWVyZWQgZGVzaWduIGFsbG93cyBpdCB0bworICAgYmUgZWFzaWx5IGFkYXB0ZWQgdG8gb3RoZXIgc2ltaWxhciBuZXR3b3JrIHRlY2hub2xvZ2llcy4KKworICAgVGhpcyBkb2N1bWVudCBhbHNvIGRlc2NyaWJlcyB2YXJpb3VzIFNwaW5lbCBzcGVjaWFsaXphdGlvbnMsCisgICBpbmNsdWRpbmcgc3VwcG9ydCBmb3IgdGhlIFRocmVhZChSKSBsb3ctcG93ZXIgbWVzaCBuZXR3b3JrCisgICB0ZWNobm9sb2d5LgorCitTdGF0dXMgb2YgVGhpcyBNZW1vCisKKyAgIFRoaXMgSW50ZXJuZXQtRHJhZnQgaXMgc3VibWl0dGVkIGluIGZ1bGwgY29uZm9ybWFuY2Ugd2l0aCB0aGUKKyAgIHByb3Zpc2lvbnMgb2YgQkNQIDc4IGFuZCBCQ1AgNzkuCisKKyAgIEludGVybmV0LURyYWZ0cyBhcmUgd29ya2luZyBkb2N1bWVudHMgb2YgdGhlIEludGVybmV0IEVuZ2luZWVyaW5nCisgICBUYXNrIEZvcmNlIChJRVRGKS4gIE5vdGUgdGhhdCBvdGhlciBncm91cHMgbWF5IGFsc28gZGlzdHJpYnV0ZQorICAgd29ya2luZyBkb2N1bWVudHMgYXMgSW50ZXJuZXQtRHJhZnRzLiAgVGhlIGxpc3Qgb2YgY3VycmVudCBJbnRlcm5ldC0KKyAgIERyYWZ0cyBpcyBhdCBodHRwOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZHJhZnRzL2N1cnJlbnQvLgorCisgICBJbnRlcm5ldC1EcmFmdHMgYXJlIGRyYWZ0IGRvY3VtZW50cyB2YWxpZCBmb3IgYSBtYXhpbXVtIG9mIHNpeCBtb250aHMKKyAgIGFuZCBtYXkgYmUgdXBkYXRlZCwgcmVwbGFjZWQsIG9yIG9ic29sZXRlZCBieSBvdGhlciBkb2N1bWVudHMgYXQgYW55CisgICB0aW1lLiAgSXQgaXMgaW5hcHByb3ByaWF0ZSB0byB1c2UgSW50ZXJuZXQtRHJhZnRzIGFzIHJlZmVyZW5jZQorICAgbWF0ZXJpYWwgb3IgdG8gY2l0ZSB0aGVtIG90aGVyIHRoYW4gYXMgIndvcmsgaW4gcHJvZ3Jlc3MuIgorCisgICBUaGlzIEludGVybmV0LURyYWZ0IHdpbGwgZXhwaXJlIG9uIERlY2VtYmVyIDI0LCAyMDE3LgorCitDb3B5cmlnaHQgTm90aWNlCisKKyAgIENvcHlyaWdodCAoYykgMjAxNyBJRVRGIFRydXN0IGFuZCB0aGUgcGVyc29ucyBpZGVudGlmaWVkIGFzIHRoZQorICAgZG9jdW1lbnQgYXV0aG9ycy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFRoaXMgZG9jdW1lbnQgaXMgc3ViamVjdCB0byBCQ1AgNzggYW5kIHRoZSBJRVRGIFRydXN0J3MgTGVnYWwKKyAgIFByb3Zpc2lvbnMgUmVsYXRpbmcgdG8gSUVURiBEb2N1bWVudHMKKyAgIChodHRwOi8vdHJ1c3RlZS5pZXRmLm9yZy9saWNlbnNlLWluZm8pIGluIGVmZmVjdCBvbiB0aGUgZGF0ZSBvZgorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgIFtQYWdlIDFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBwdWJsaWNhdGlvbiBvZiB0aGlzIGRvY3VtZW50LiAgUGxlYXNlIHJldmlldyB0aGVzZSBkb2N1bWVudHMKKyAgIGNhcmVmdWxseSwgYXMgdGhleSBkZXNjcmliZSB5b3VyIHJpZ2h0cyBhbmQgcmVzdHJpY3Rpb25zIHdpdGggcmVzcGVjdAorICAgdG8gdGhpcyBkb2N1bWVudC4gIENvZGUgQ29tcG9uZW50cyBleHRyYWN0ZWQgZnJvbSB0aGlzIGRvY3VtZW50IG11c3QKKyAgIGluY2x1ZGUgU2ltcGxpZmllZCBCU0QgTGljZW5zZSB0ZXh0IGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQuZSBvZgorICAgdGhlIFRydXN0IExlZ2FsIFByb3Zpc2lvbnMgYW5kIGFyZSBwcm92aWRlZCB3aXRob3V0IHdhcnJhbnR5IGFzCisgICBkZXNjcmliZWQgaW4gdGhlIFNpbXBsaWZpZWQgQlNEIExpY2Vuc2UuCisKKyAgIFRoaXMgZG9jdW1lbnQgbWF5IG5vdCBiZSBtb2RpZmllZCwgYW5kIGRlcml2YXRpdmUgd29ya3Mgb2YgaXQgbWF5IG5vdAorICAgYmUgY3JlYXRlZCwgYW5kIGl0IG1heSBub3QgYmUgcHVibGlzaGVkIGV4Y2VwdCBhcyBhbiBJbnRlcm5ldC1EcmFmdC4KKworVGFibGUgb2YgQ29udGVudHMKKworICAgMS4gIEludHJvZHVjdGlvbiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA3CisgICAgIDEuMS4gIEFib3V0IHRoaXMgRHJhZnQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDcKKyAgICAgICAxLjEuMS4gIFNjb3BlIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgNworICAgICAgIDEuMS4yLiAgUmVudW1iZXJpbmcgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA3CisgICAyLiAgRnJhbWUgRm9ybWF0ICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDgKKyAgICAgMi4xLiAgSGVhZGVyIEZvcm1hdCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgOAorICAgICAgIDIuMS4xLiAgRkxHOiBGbGFnIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA5CisgICAgICAgMi4xLjIuICBOTEk6IE5ldHdvcmsgTGluayBJZGVudGlmaWVyICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDkKKyAgICAgICAyLjEuMy4gIFRJRDogVHJhbnNhY3Rpb24gSWRlbnRpZmllciAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgOQorICAgICAgIDIuMS40LiAgQ29tbWFuZCBJZGVudGlmaWVyIChDTUQpICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA5CisgICAgICAgMi4xLjUuICBDb21tYW5kIFBheWxvYWQgKE9wdGlvbmFsKSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTAKKyAgIDMuICBEYXRhIFBhY2tpbmcgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxMAorICAgICAzLjEuICBQcmltaXRpdmUgVHlwZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDExCisgICAgIDMuMi4gIFBhY2tlZCBVbnNpZ25lZCBJbnRlZ2VyIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTEKKyAgICAgMy4zLiAgRGF0YSBCbG9icyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxMgorICAgICAzLjQuICBTdHJ1Y3R1cmVkIERhdGEgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDEzCisgICAgIDMuNS4gIEFycmF5cyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTMKKyAgIDQuICBDb21tYW5kcyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxNAorICAgICA0LjEuICBDTUQgMDogKEhvc3QtPk5DUCkgQ01EX05PT1AgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDE0CisgICAgIDQuMi4gIENNRCAxOiAoSG9zdC0+TkNQKSBDTURfUkVTRVQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTQKKyAgICAgNC4zLiAgQ01EIDI6IChIb3N0LT5OQ1ApIENNRF9QUk9QX1ZBTFVFX0dFVCAuIC4gLiAuIC4gLiAuIC4gLiAuICAxNAorICAgICA0LjQuICBDTUQgMzogKEhvc3QtPk5DUCkgQ01EX1BST1BfVkFMVUVfU0VUIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDE1CisgICAgIDQuNS4gIENNRCA0OiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9JTlNFUlQgIC4gLiAuIC4gLiAuIC4gLiAgMTUKKyAgICAgNC42LiAgQ01EIDU6IChIb3N0LT5OQ1ApIENNRF9QUk9QX1ZBTFVFX1JFTU9WRSAgLiAuIC4gLiAuIC4gLiAuICAxNgorICAgICA0LjcuICBDTUQgNjogKE5DUC0+SG9zdCkgQ01EX1BST1BfVkFMVUVfSVMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDE3CisgICAgIDQuOC4gIENNRCA3OiAoTkNQLT5Ib3N0KSBDTURfUFJPUF9WQUxVRV9JTlNFUlRFRCAgLiAuIC4gLiAuIC4gLiAgMTcKKyAgICAgNC45LiAgQ01EIDg6IChOQ1AtPkhvc3QpIENNRF9QUk9QX1ZBTFVFX1JFTU9WRUQgLiAuIC4gLiAuIC4gLiAuICAxOAorICAgICA0LjEwLiBDTUQgMTg6IChIb3N0LT5OQ1ApIENNRF9QRUVLICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDE4CisgICAgIDQuMTEuIENNRCAxOTogKE5DUC0+SG9zdCkgQ01EX1BFRUtfUkVUICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTkKKyAgICAgNC4xMi4gQ01EIDIwOiAoSG9zdC0+TkNQKSBDTURfUE9LRSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxOQorICAgICA0LjEzLiBDTUQgMjE6IChIb3N0LT5OQ1ApIENNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVCAgLiAuIC4gLiAuIC4gIDE5CisgICAgIDQuMTQuIENNRCAyMjogKEhvc3QtPk5DUCkgQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUICAuIC4gLiAuIC4gLiAgMjAKKyAgICAgNC4xNS4gQ01EIDIzOiAoTkNQLT5Ib3N0KSBDTURfUFJPUF9WQUxVRVNfQVJFIC4gLiAuIC4gLiAuIC4gLiAuICAyMQorICAgNS4gIFByb3BlcnRpZXMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDIxCisgICAgIDUuMS4gIFByb3BlcnR5IE1ldGhvZHMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjIKKyAgICAgNS4yLiAgUHJvcGVydHkgVHlwZXMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAyMgorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgIFtQYWdlIDJdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICAgICAgNS4yLjEuICBTaW5nbGUtVmFsdWUgUHJvcGVydGllcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjIKKyAgICAgICA1LjIuMi4gIE11bHRpcGxlLVZhbHVlIFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAyMworICAgICAgIDUuMi4zLiAgU3RyZWFtIFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDIzCisgICAgIDUuMy4gIFByb3BlcnR5IE51bWJlcmluZyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjQKKyAgICAgNS40LiAgUHJvcGVydHkgU2VjdGlvbnMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAyNAorICAgICA1LjUuICBDb3JlIFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDI1CisgICAgICAgNS41LjEuICBQUk9QIDA6IFBST1BfTEFTVF9TVEFUVVMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjUKKyAgICAgICA1LjUuMi4gIFBST1AgMTogUFJPUF9QUk9UT0NPTF9WRVJTSU9OIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAyNQorICAgICAgIDUuNS4zLiAgUFJPUCAyOiBQUk9QX05DUF9WRVJTSU9OICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDI2CisgICAgICAgNS41LjQuICBQUk9QIDM6IFBST1BfSU5URVJGQUNFX1RZUEUgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjcKKyAgICAgICA1LjUuNS4gIFBST1AgNDogUFJPUF9JTlRFUkZBQ0VfVkVORE9SX0lEICAuIC4gLiAuIC4gLiAuIC4gLiAuICAyNworICAgICAgIDUuNS42LiAgUFJPUCA1OiBQUk9QX0NBUFMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDI3CisgICAgICAgNS41LjcuICBQUk9QIDY6IFBST1BfSU5URVJGQUNFX0NPVU5UICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjkKKyAgICAgICA1LjUuOC4gIFBST1AgNzogUFJPUF9QT1dFUl9TVEFURSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAyOQorICAgICAgIDUuNS45LiAgUFJPUCA4OiBQUk9QX0hXQUREUiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDMwCisgICAgICAgNS41LjEwLiBQUk9QIDk6IFBST1BfTE9DSyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzAKKyAgICAgICA1LjUuMTEuIFBST1AgMTA6IFBST1BfSE9TVF9QT1dFUl9TVEFURSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzMQorICAgICAgIDUuNS4xMi4gUFJPUCA0MTA0OiBQUk9QX1VOU09MX1VQREFURV9GSUxURVIgLiAuIC4gLiAuIC4gLiAuIC4gIDMyCisgICAgICAgNS41LjEzLiBQUk9QIDQxMDU6IFBST1BfVU5TT0xfVVBEQVRFX0xJU1QgLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzMKKyAgICAgNS42LiAgU3RyZWFtIFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzMworICAgICAgIDUuNi4xLiAgUFJPUCAxMTI6IFBST1BfU1RSRUFNX0RFQlVHIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDMzCisgICAgICAgNS42LjIuICBQUk9QIDExMzogUFJPUF9TVFJFQU1fUkFXIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzQKKyAgICAgICA1LjYuMy4gIFBST1AgMTE0OiBQUk9QX1NUUkVBTV9ORVQgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzNgorICAgICAgIDUuNi40LiAgUFJPUCAxMTU6IFBST1BfU1RSRUFNX05FVF9JTlNFQ1VSRSAgLiAuIC4gLiAuIC4gLiAuIC4gIDM3CisgICAgIDUuNy4gIFBIWSBQcm9wZXJ0aWVzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzcKKyAgICAgICA1LjcuMS4gIFBST1AgMzI6IFBST1BfUEhZX0VOQUJMRUQgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzNworICAgICAgIDUuNy4yLiAgUFJPUCAzMzogUFJPUF9QSFlfQ0hBTiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDM3CisgICAgICAgNS43LjMuICBQUk9QIDM0OiBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzgKKyAgICAgICA1LjcuNC4gIFBST1AgMzU6IFBST1BfUEhZX0ZSRVEgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzOAorICAgICAgIDUuNy41LiAgUFJPUCAzNjogUFJPUF9QSFlfQ0NBX1RIUkVTSE9MRCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDM4CisgICAgICAgNS43LjYuICBQUk9QIDM3OiBQUk9QX1BIWV9UWF9QT1dFUiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzgKKyAgICAgICA1LjcuNy4gIFBST1AgMzg6IFBST1BfUEhZX1JTU0kgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzOAorICAgICAgIDUuNy44LiAgUFJPUCAzOTogUFJPUF9QSFlfUlhfU0VOU0lUSVZJVFkgIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDM5CisgICAgIDUuOC4gIE1BQyBQcm9wZXJ0aWVzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzkKKyAgICAgICA1LjguMS4gIFBST1AgNDg6IFBST1BfTUFDX1NDQU5fU1RBVEUgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzOQorICAgICAgIDUuOC4yLiAgUFJPUCA0OTogUFJPUF9NQUNfU0NBTl9NQVNLIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDM5CisgICAgICAgNS44LjMuICBQUk9QIDUwOiBQUk9QX01BQ19TQ0FOX1BFUklPRCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzkKKyAgICAgICA1LjguNC4gIFBST1AgNTE6IFBST1BfTUFDX1NDQU5fQkVBQ09OIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0MAorICAgICAgIDUuOC41LiAgUFJPUCA1MjogUFJPUF9NQUNfMTVfNF9MQUREUiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQwCisgICAgICAgNS44LjYuICBQUk9QIDUzOiBQUk9QX01BQ18xNV80X1NBRERSICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDEKKyAgICAgICA1LjguNy4gIFBST1AgNTQ6IFBST1BfTUFDXzE1XzRfUEFOSUQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0MQorICAgICAgIDUuOC44LiAgUFJPUCA1NTogUFJPUF9NQUNfUkFXX1NUUkVBTV9FTkFCTEVEICAuIC4gLiAuIC4gLiAuIC4gIDQxCisgICAgICAgNS44LjkuICBQUk9QIDU2OiBQUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFICAuIC4gLiAuIC4gLiAuIC4gLiAgNDEKKyAgICAgICA1LjguMTAuIFBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVCAgLiAuIC4gLiAuIC4gLiAuICA0MgorICAgICAgIDUuOC4xMS4gUFJPUCA0ODY0OiBQUk9QX01BQ19XSElURUxJU1QgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQyCisgICAgICAgNS44LjEyLiBQUk9QIDQ4NjU6IFBST1BfTUFDX1dISVRFTElTVF9FTkFCTEVEIC4gLiAuIC4gLiAuIC4gLiAgNDIKKyAgICAgICA1LjguMTMuIFBST1AgNDg2NzogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEICAuIC4gLiAuICA0MgorICAgICAgIDUuOC4xNC4gUFJPUCA0ODY4OiBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUyAgIDQyCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICAgW1BhZ2UgM10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgICAgICA1LjguMTUuIFBST1AgNDg2OToKKyAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTICAuIC4gLiAuICA0MworICAgICAgIDUuOC4xNi4gUFJPUCA0ODcwOiBQUk9QX01BQ19CTEFDS0xJU1QgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQzCisgICAgICAgNS44LjE3LiBQUk9QIDQ4NzE6IFBST1BfTUFDX0JMQUNLTElTVF9FTkFCTEVEIC4gLiAuIC4gLiAuIC4gLiAgNDMKKyAgICAgNS45LiAgTkVUIFByb3BlcnRpZXMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0MworICAgICAgIDUuOS4xLiAgUFJPUCA2NDogUFJPUF9ORVRfU0FWRUQgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQzCisgICAgICAgNS45LjIuICBQUk9QIDY1OiBQUk9QX05FVF9JRl9VUCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDQKKyAgICAgICA1LjkuMy4gIFBST1AgNjY6IFBST1BfTkVUX1NUQUNLX1VQICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0NAorICAgICAgIDUuOS40LiAgUFJPUCA2NzogUFJPUF9ORVRfUk9MRSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ0CisgICAgICAgNS45LjUuICBQUk9QIDY4OiBQUk9QX05FVF9ORVRXT1JLX05BTUUgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDQKKyAgICAgICA1LjkuNi4gIFBST1AgNjk6IFBST1BfTkVUX1hQQU5JRCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0NAorICAgICAgIDUuOS43LiAgUFJPUCA3MDogUFJPUF9ORVRfTUFTVEVSX0tFWSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ0CisgICAgICAgNS45LjguICBQUk9QIDcxOiBQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiAgLiAuIC4gLiAuIC4gLiAgNDUKKyAgICAgICA1LjkuOS4gIFBST1AgNzI6IFBST1BfTkVUX1BBUlRJVElPTl9JRCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0NQorICAgICAgIDUuOS4xMC4gUFJPUCA3MzogUFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HIC4gLiAuIC4gLiAuIC4gIDQ1CisgICAgICAgNS45LjExLiBQUk9QIDc0OiBQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRSAgLiAuIC4gLiAuIC4gLiAgNDUKKyAgICAgICA1LjkuMTIuIFBST1AgNzU6IFBST1BfTkVUX1BTS0MgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0NQorICAgICA1LjEwLiBJUHY2IFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ1CisgICAgICAgNS4xMC4xLiAgUFJPUCA5NjogUFJPUF9JUFY2X0xMX0FERFIgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDUKKyAgICAgICA1LjEwLjIuICBQUk9QIDk3OiBQUk9QX0lQVjZfTUxfQUREUiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0NQorICAgICAgIDUuMTAuMy4gIFBST1AgOTg6IFBST1BfSVBWNl9NTF9QUkVGSVggLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ1CisgICAgICAgNS4xMC40LiAgUFJPUCA5OTogUFJPUF9JUFY2X0FERFJFU1NfVEFCTEUgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDYKKyAgICAgICA1LjEwLjUuICBQUk9QIDEwMTogUFJPUF9JUHY2X0lDTVBfUElOR19PRkZMT0FEICAuIC4gLiAuIC4gLiAuICA0NgorICAgICA1LjExLiBEZWJ1ZyBQcm9wZXJ0aWVzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ2CisgICAgICAgNS4xMS4xLiAgUFJPUCAxNjM4NDogUFJPUF9ERUJVR19URVNUX0FTU0VSVCAuIC4gLiAuIC4gLiAuIC4gLiAgNDYKKyAgICAgICA1LjExLjIuICBQUk9QIDE2Mzg1OiBQUk9QX0RFQlVHX05DUF9MT0dfTEVWRUwgLiAuIC4gLiAuIC4gLiAuICA0NgorICAgNi4gIFN0YXR1cyBDb2RlcyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ3CisgICA3LiAgVGVjaG5vbG9neTogVGhyZWFkKFIpIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDgKKyAgICAgNy4xLiAgQ2FwYWJpbGl0aWVzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0OQorICAgICA3LjIuICBQcm9wZXJ0aWVzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ5CisgICAgICAgNy4yLjEuICBQUk9QIDgwOiBQUk9QX1RIUkVBRF9MRUFERVJfQUREUiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDkKKyAgICAgICA3LjIuMi4gIFBST1AgODE6IFBST1BfVEhSRUFEX1BBUkVOVCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0OQorICAgICAgIDcuMi4zLiAgUFJPUCA4MjogUFJPUF9USFJFQURfQ0hJTERfVEFCTEUgIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ5CisgICAgICAgNy4yLjQuICBQUk9QIDgzOiBQUk9QX1RIUkVBRF9MRUFERVJfUklEIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTAKKyAgICAgICA3LjIuNS4gIFBST1AgODQ6IFBST1BfVEhSRUFEX0xFQURFUl9XRUlHSFQgIC4gLiAuIC4gLiAuIC4gLiAuICA1MAorICAgICAgIDcuMi42LiAgUFJPUCA4NTogUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCAgLiAuIC4gLiAuIC4gIDUwCisgICAgICAgNy4yLjcuICBQUk9QIDg2OiBQUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEEgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTAKKyAgICAgICA3LjIuOC4gIFBST1AgODc6IFBST1BfVEhSRUFEX05FVFdPUktfREFUQV9WRVJTSU9OIC4gLiAuIC4gLiAuICA1MAorICAgICAgIDcuMi45LiAgUFJPUCA4ODogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQSAgLiAuIC4gLiAuIC4gIDUwCisgICAgICAgNy4yLjEwLiBQUk9QIDg5OiBQUk9QX1RIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT04gIC4gLiAgNTAKKyAgICAgICA3LjIuMTEuIFBST1AgOTA6IFBST1BfVEhSRUFEX09OX01FU0hfTkVUUyAuIC4gLiAuIC4gLiAuIC4gLiAuICA1MQorICAgICAgIDcuMi4xMi4gUFJPUCA5MTogUFJPUF9USFJFQURfT0ZGX01FU0hfUk9VVEVTICAuIC4gLiAuIC4gLiAuIC4gIDUxCisgICAgICAgNy4yLjEzLiBQUk9QIDkyOiBQUk9QX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFMgIC4gLiAuIC4gLiAuIC4gLiAgNTEKKyAgICAgICA3LjIuMTQuIFBST1AgOTM6IFBST1BfVEhSRUFEX0FMTE9XX0xPQ0FMX05FVF9EQVRBX0NIQU5HRSAgLiAuICA1MQorICAgICAgIDcuMi4xNS4gUFJPUCA5NDogUFJPUF9USFJFQURfTU9ERSAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDUyCisgICAgICAgNy4yLjE2LiBQUk9QIDUzNzY6IFBST1BfVEhSRUFEX0NISUxEX1RJTUVPVVQgIC4gLiAuIC4gLiAuIC4gLiAgNTIKKyAgICAgICA3LjIuMTcuIFBST1AgNTM3NzogUFJPUF9USFJFQURfUkxPQzE2IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA1MgorICAgICAgIDcuMi4xOC4gUFJPUCA1Mzc4OiBQUk9QX1RIUkVBRF9ST1VURVJfVVBHUkFERV9USFJFU0hPTEQgLiAuIC4gIDUyCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICAgW1BhZ2UgNF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgICAgICA3LjIuMTkuIFBST1AgNTM3OTogUFJPUF9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWSAgLiAuIC4gLiAuICA1MgorICAgICAgIDcuMi4yMC4gUFJPUCA1MzgwOiBQUk9QX1RIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQgLiAuIC4gLiAuIC4gIDUyCisgICAgICAgNy4yLjIxLiBQUk9QIDUzODE6IFBST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTICAuIC4gLiAuIC4gLiAgNTIKKyAgICAgICA3LjIuMjIuIFBST1AgNTM4MjogUFJPUF9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVICAuIC4gLiAuICA1MworICAgICAgIDcuMi4yMy4gUFJPUCA1MzgzOiBQUk9QX1RIUkVBRF9ST1VURVJfUk9MRV9FTkFCTEVEICAuIC4gLiAuIC4gIDUzCisgICAgICAgNy4yLjI0LiBQUk9QIDUzODQ6IFBST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEIC4gLiAgNTMKKyAgICAgICA3LjIuMjUuIFBST1AgNTM4NTogUFJPUF9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVIgIC4gLiAuICA1MworICAgICAgIDcuMi4yNi4gUFJPUCA1Mzg2OiBQUk9QX1RIUkVBRF9QUkVGRVJSRURfUk9VVEVSX0lEICAuIC4gLiAuIC4gIDUzCisgICAgICAgNy4yLjI3LiBQUk9QIDUzODc6IFBST1BfVEhSRUFEX05FSUdIQk9SX1RBQkxFIC4gLiAuIC4gLiAuIC4gLiAgNTMKKyAgICAgICA3LjIuMjguIFBST1AgNTM4ODogUFJPUF9USFJFQURfQ0hJTERfQ09VTlRfTUFYICAuIC4gLiAuIC4gLiAuICA1NAorICAgICAgIDcuMi4yOS4gUFJPUCA1Mzg5OiBQUk9QX1RIUkVBRF9MRUFERVJfTkVUV09SS19EQVRBICAuIC4gLiAuIC4gIDU0CisgICAgICAgNy4yLjMwLiBQUk9QIDUzOTA6IFBST1BfVEhSRUFEX1NUQUJMRV9MRUFERVJfTkVUV09SS19EQVRBIC4gLiAgNTQKKyAgICAgICA3LjIuMzEuIFBST1AgNTM5MTogUFJPUF9USFJFQURfSk9JTkVSUyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA1NAorICAgICAgIDcuMi4zMi4gUFJPUCA1MzkyOiBQUk9QX1RIUkVBRF9DT01NSVNTSU9ORVJfRU5BQkxFRCAuIC4gLiAuIC4gIDU1CisgICAgICAgNy4yLjMzLiBQUk9QIDUzOTM6IFBST1BfVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVEICAuIC4gLiAuIC4gLiAgNTUKKyAgICAgICA3LjIuMzQuIFBST1AgNTM5NDogUFJPUF9USFJFQURfVE1GX1BST1hZX1NUUkVBTSAuIC4gLiAuIC4gLiAuICA1NQorICAgICAgIDcuMi4zNS4gUFJPUCA1Mzk1OiBQUk9QX1RIUkVBRF9ESVNPVkVSWV9TQ0FOX0pPSU5FUl9GTEFHICAuIC4gIDU1CisgICAgICAgNy4yLjM2LiBQUk9QIDUzOTY6CisgICAgICAgICAgICAgICBQUk9QX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9FTkFCTEVfRklMVEVSSU5HIC4gLiAuIC4gLiAgNTYKKyAgICAgICA3LjIuMzcuIFBST1AgNTM5NzogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQgLiAuIC4gLiAuICA1NgorICAgICAgIDcuMi4zOC4gUFJPUCA1Mzk4OiBQUk9QX1RIUkVBRF9TVEVFUklOR19EQVRBICAuIC4gLiAuIC4gLiAuIC4gIDU2CisgICA4LiAgRmVhdHVyZTogTmV0d29yayBTYXZlIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTYKKyAgICAgOC4xLiAgQ29tbWFuZHMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA1NworICAgICAgIDguMS4xLiAgQ01EIDk6IChIb3N0LT5OQ1ApIENNRF9ORVRfU0FWRSAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDU3CisgICAgICAgOC4xLjIuICBDTUQgMTA6IChIb3N0LT5OQ1ApIENNRF9ORVRfQ0xFQVIgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTcKKyAgICAgICA4LjEuMy4gIENNRCAxMTogKEhvc3QtPk5DUCkgQ01EX05FVF9SRUNBTEwgIC4gLiAuIC4gLiAuIC4gLiAuICA1OAorICAgOS4gIEZlYXR1cmU6IEhvc3QgQnVmZmVyIE9mZmxvYWQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDU4CisgICAgIDkuMS4gIENvbW1hbmRzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTgKKyAgICAgICA5LjEuMS4gIENNRCAxMjogKE5DUC0+SG9zdCkgQ01EX0hCT19PRkZMT0FEIC4gLiAuIC4gLiAuIC4gLiAuICA1OAorICAgICAgIDkuMS4yLiAgQ01EIDEzOiAoTkNQLT5Ib3N0KSBDTURfSEJPX1JFQ0xBSU0gLiAuIC4gLiAuIC4gLiAuIC4gIDU5CisgICAgICAgOS4xLjMuICBDTUQgMTQ6IChOQ1AtPkhvc3QpIENNRF9IQk9fRFJPUCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTkKKyAgICAgICA5LjEuNC4gIENNRCAxNTogKEhvc3QtPk5DUCkgQ01EX0hCT19PRkZMT0FERUQgLiAuIC4gLiAuIC4gLiAuICA1OQorICAgICAgIDkuMS41LiAgQ01EIDE2OiAoSG9zdC0+TkNQKSBDTURfSEJPX1JFQ0xBSU1FRCAuIC4gLiAuIC4gLiAuIC4gIDU5CisgICAgICAgOS4xLjYuICBDTUQgMTc6IChIb3N0LT5OQ1ApIENNRF9IQk9fRFJPUFBFRCAuIC4gLiAuIC4gLiAuIC4gLiAgNTkKKyAgICAgOS4yLiAgUHJvcGVydGllcyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA1OQorICAgICAgIDkuMi4xLiAgUFJPUCAxMDogUFJPUF9IQk9fTUVNX01BWCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDU5CisgICAgICAgOS4yLjIuICBQUk9QIDExOiBQUk9QX0hCT19CTE9DS19NQVggLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjAKKyAgIDEwLiBGZWF0dXJlOiBKYW0gRGV0ZWN0aW9uICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2MAorICAgICAxMC4xLiAgUHJvcGVydGllcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDYwCisgICAgICAgMTAuMS4xLiAgUFJPUCA0NjA4OiBQUk9QX0pBTV9ERVRFQ1RfRU5BQkxFICAuIC4gLiAuIC4gLiAuIC4gLiAgNjAKKyAgICAgICAxMC4xLjIuICBQUk9QIDQ2MDk6IFBST1BfSkFNX0RFVEVDVEVEIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2MQorICAgICAgIDEwLjEuMy4gIFBST1AgNDYxMDogUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEICAuIC4gLiAuIC4gIDYxCisgICAgICAgMTAuMS40LiAgUFJPUCA0NjExOiBQUk9QX0pBTV9ERVRFQ1RfV0lORE9XICAuIC4gLiAuIC4gLiAuIC4gLiAgNjEKKyAgICAgICAxMC4xLjUuICBQUk9QIDQ2MTI6IFBST1BfSkFNX0RFVEVDVF9CVVNZICAuIC4gLiAuIC4gLiAuIC4gLiAuICA2MgorICAgICAgIDEwLjEuNi4gIFBST1AgNDYxMzogUFJPUF9KQU1fREVURUNUX0hJU1RPUllfQklUTUFQICAuIC4gLiAuIC4gIDYyCisgICAxMS4gRmVhdHVyZTogR1BJTyBBY2Nlc3MgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjIKKyAgICAgMTEuMS4gIFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2MworICAgICAgIDExLjEuMS4gIFBST1AgNDA5NjogUFJPUF9HUElPX0NPTkZJRyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDYzCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICAgW1BhZ2UgNV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgICAgICAxMS4xLjIuICBQUk9QIDQwOTg6IFBST1BfR1BJT19TVEFURSAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2NAorICAgICAgIDExLjEuMy4gIFBST1AgNDA5OTogUFJPUF9HUElPX1NUQVRFX1NFVCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDY0CisgICAgICAgMTEuMS40LiAgUFJPUCA0MTAwOiBQUk9QX0dQSU9fU1RBVEVfQ0xFQVIgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjUKKyAgIDEyLiBGZWF0dXJlOiBUcnVlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2NQorICAgICAxMi4xLiAgUHJvcGVydGllcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDY1CisgICAgICAgMTIuMS4xLiAgUFJPUCA0MTAxOiBQUk9QX1RSTkdfMzIgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjUKKyAgICAgICAxMi4xLjIuICBQUk9QIDQxMDI6IFBST1BfVFJOR18xMjggLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2NgorICAgICAgIDEyLjEuMy4gIFBST1AgNDEwMzogUFJPUF9UUk5HX1JBV18zMiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDY2CisgICAxMy4gU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjcKKyAgICAgMTMuMS4gIFJhdyBBcHBsaWNhdGlvbiBBY2Nlc3MgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2NworICAgICAxNC4xLiAgVVJJcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDY3CisgICBBcHBlbmRpeCBBLiAgRnJhbWluZyBQcm90b2NvbCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjcKKyAgICAgQS4xLiAgVUFSVCBSZWNvbW1lbmRhdGlvbnMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2NworICAgICAgIEEuMS4xLiAgVUFSVCBCaXQgUmF0ZSBEZXRlY3Rpb24gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDY4CisgICAgICAgQS4xLjIuICBIRExDLUxpdGUgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjgKKyAgICAgQS4yLiAgU1BJIFJlY29tbWVuZGF0aW9ucyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2OQorICAgICAgIEEuMi4xLiAgU1BJIEZyYW1pbmcgUHJvdG9jb2wgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDcwCisgICAgIEEuMy4gIEleMkMgUmVjb21tZW5kYXRpb25zICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzIKKyAgICAgQS40LiAgTmF0aXZlIFVTQiBSZWNvbW1lbmRhdGlvbnMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3MgorICAgQXBwZW5kaXggQi4gIFRlc3QgVmVjdG9ycyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDcyCisgICAgIEIuMS4gIFRlc3QgVmVjdG9yOiBQYWNrZWQgVW5zaWduZWQgSW50ZWdlciAgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzIKKyAgICAgQi4yLiAgVGVzdCBWZWN0b3I6IFJlc2V0IENvbW1hbmQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3MgorICAgICBCLjMuICBUZXN0IFZlY3RvcjogUmVzZXQgTm90aWZpY2F0aW9uIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDczCisgICAgIEIuNC4gIFRlc3QgVmVjdG9yOiBTY2FuIEJlYWNvbiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzMKKyAgICAgQi41LiAgVGVzdCBWZWN0b3I6IEluYm91bmQgSVB2NiBQYWNrZXQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3MworICAgICBCLjYuICBUZXN0IFZlY3RvcjogT3V0Ym91bmQgSVB2NiBQYWNrZXQgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDc0CisgICAgIEIuNy4gIFRlc3QgVmVjdG9yOiBGZXRjaCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3MgLiAuIC4gLiAuIC4gLiAgNzQKKyAgICAgQi44LiAgVGVzdCBWZWN0b3I6IFJldHVybmVkIGxpc3Qgb2Ygb24tbWVzaCBuZXR3b3JrcyAgLiAuIC4gLiAuICA3NAorICAgICBCLjkuICBUZXN0IFZlY3RvcjogQWRkaW5nIGFuIG9uLW1lc2ggbmV0d29yayAgLiAuIC4gLiAuIC4gLiAuIC4gIDc0CisgICAgIEIuMTAuIFRlc3QgVmVjdG9yOiBJbnNlcnRpb24gbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yayAgNzUKKyAgICAgQi4xMS4gVGVzdCBWZWN0b3I6IFJlbW92aW5nIGEgbG9jYWwgb24tbWVzaCBuZXR3b3JrIC4gLiAuIC4gLiAuICA3NQorICAgICBCLjEyLiBUZXN0IFZlY3RvcjogUmVtb3ZhbCBub3RpZmljYXRpb24gb2YgYW4gb24tbWVzaCBuZXR3b3JrIC4gIDc2CisgICBBcHBlbmRpeCBDLiAgRXhhbXBsZSBTZXNzaW9ucyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzYKKyAgICAgQy4xLiAgTkNQIEluaXRpYWxpemF0aW9uICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3NgorICAgICBDLjIuICBBdHRhY2hpbmcgdG8gYSBuZXR3b3JrICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDc3CisgICAgIEMuMy4gIFN1Y2Nlc3NmdWxseSBqb2luaW5nIGEgcHJlLWV4aXN0aW5nIG5ldHdvcmsgLiAuIC4gLiAuIC4gLiAgNzcKKyAgICAgQy40LiAgVW5zdWNjZXNzZnVsbHkgam9pbmluZyBhIHByZS1leGlzdGluZyBuZXR3b3JrIC4gLiAuIC4gLiAuICA3OAorICAgICBDLjUuICBEZXRhY2hpbmcgZnJvbSBhIG5ldHdvcmsgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDc4CisgICAgIEMuNi4gIEF0dGFjaGluZyB0byBhIHNhdmVkIG5ldHdvcmsgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzkKKyAgICAgQy43LiAgTkNQIFNvZnR3YXJlIFJlc2V0ICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3OQorICAgICBDLjguICBBZGRpbmcgYW4gb24tbWVzaCBwcmVmaXggIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDc5CisgICAgIEMuOS4gIEVudGVyaW5nIGxvdy1wb3dlciBtb2RlcyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzkKKyAgICAgQy4xMC4gU25pZmZpbmcgcmF3IHBhY2tldHMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3OQorICAgQXBwZW5kaXggRC4gIEdsb3NzYXJ5IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDgwCisgICBBcHBlbmRpeCBFLiAgQWNrbm93bGVkZ21lbnRzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgODEKKyAgIEF1dGhvcnMnIEFkZHJlc3NlcyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA4MgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgICBbUGFnZSA2XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworMS4gIEludHJvZHVjdGlvbgorCisgICBTcGluZWwgaXMgYSBob3N0LWNvbnRyb2xsZXIgcHJvdG9jb2wgZGVzaWduZWQgdG8gZW5hYmxlCisgICBpbnRlcm9wZXJhdGlvbiBvdmVyIHNpbXBsZSBzZXJpYWwgY29ubmVjdGlvbnMgYmV0d2VlbiBnZW5lcmFsIHB1cnBvc2UKKyAgIGRldmljZSBvcGVyYXRpbmcgc3lzdGVtcyAoT1MpIGFuZCBuZXR3b3JrIGNvLXByb2Nlc3NvcnMgKE5DUCkgZm9yIHRoZQorICAgcHVycG9zZSBvZiBjb250cm9sbGluZyBhbmQgbWFuYWdpbmcgdGhlaXIgSVB2NiBuZXR3b3JrIGludGVyZmFjZXMsCisgICBhY2hpZXZpbmcgdGhlIGZvbGxvd2luZyBnb2FsczoKKworICAgbyAgQWRvcHQgYSBsYXllcmVkIGFwcHJvYWNoIHRvIHRoZSBwcm90b2NvbCBkZXNpZ24sIGFsbG93aW5nIGZ1dHVyZQorICAgICAgc3VwcG9ydCBmb3Igb3RoZXIgbmV0d29yayBwcm90b2NvbHMuCisgICBvICBNaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGNvbW1hbmRzL21ldGhvZHMgYnkgcHJvdmlkaW5nIGEKKyAgICAgIHJpY2gsIHByb3BlcnR5LWJhc2VkIEFQSS4KKyAgIG8gIFN1cHBvcnQgTkNQcyBjYXBhYmxlIG9mIGJlaW5nIGNvbm5lY3RlZCB0byBtb3JlIHRoYW4gb25lIG5ldHdvcmsKKyAgICAgIGF0IGEgdGltZS4KKyAgIG8gIEdyYWNlZnVsbHkgaGFuZGxlIHRoZSBhZGRpdGlvbiBvZiBuZXcgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcworICAgICAgd2l0aG91dCBuZWNlc3NhcmlseSBicmVha2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgbyAgQmUgYXMgbWluaW1hbCBhbmQgbGlnaHQtd2VpZ2h0IGFzIHBvc3NpYmxlIHdpdGhvdXQgdW5uZWNlc3NhcmlseQorICAgICAgc2FjcmlmaWNpbmcgZmxleGliaWxpdHkuCisKKyAgIE9uIHRvcCBvZiB0aGlzIGNvcmUgZnJhbWV3b3JrLCB3ZSBkZWZpbmUgdGhlIHByb3BlcnRpZXMgYW5kIGNvbW1hbmRzCisgICB0byBlbmFibGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgbmV0d29yayBwcm90b2NvbHMuCisKKzEuMS4gIEFib3V0IHRoaXMgRHJhZnQKKworICAgVGhpcyBkb2N1bWVudCBpcyBjdXJyZW50bHkgaW4gYSBkcmFmdCBzdGF0dXMgYW5kIGlzIGNoYW5naW5nIG9mdGVuLgorICAgVGhpcyBzZWN0aW9uIGRpc2N1c3NlcyBzb21lIGlkZWFzIGZvciBjaGFuZ2VzIHRvIHRoZSBwcm90b2NvbCB0aGF0CisgICBoYXZlbid0IHlldCBiZWVuIGZ1bGx5IHNwZWNpZmllZCwgYXMgd2VsbCBhcyBzb21lIG9mIHRoZSBpbXBldHVzIGZvcgorICAgdGhlIGN1cnJlbnQgZGVzaWduLgorCisxLjEuMS4gIFNjb3BlCisKKyAgIFRoZSBldmVudHVhbCBpbnRlbnQgaXMgdG8gaGF2ZSB0d28gZG9jdW1lbnRzOiBBIFNwaW5lbCBiYXNpcyBkb2N1bWVudAorICAgd2hpY2ggZGlzY3Vzc2VzIHRoZSBuZXR3b3JrLXRlY2hub2xvZ3ktYWdub3N0aWMgbWVjaGFuaXNtcyBhbmQgYQorICAgVGhyZWFkKFIpIHNwZWNpYWxpemF0aW9uIGRvY3VtZW50IHdoaWNoIGRlc2NyaWJlcyBhbGwgb2YgdGhlCisgICBUaHJlYWQoUiktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gIEN1cnJlbnRseSwgdGhpcyBkb2N1bWVudAorICAgY292ZXJzIGJvdGguCisKKzEuMS4yLiAgUmVudW1iZXJpbmcKKworICAgRWZmb3J0cyBhcmUgY3VycmVudGx5IG1haW50YWluZWQgdG8gdHJ5IHRvIHByZXZlbnQgb3ZlcnRseSBiYWNrd2FyZC0KKyAgIGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBleGlzdGluZyBwcm90b2NvbCwgYnV0IGlmIHlvdSBhcmUKKyAgIGltcGxlbWVudGluZyBTcGluZWwgaW4geW91ciBvd24gcHJvZHVjdHMgeW91IHNob3VsZCBleHBlY3QgdGhlcmUgdG8KKyAgIGJlIGF0IGxlYXN0IG9uZSBsYXJnZSByZW51bWJlcmluZyBldmVudCBhbmQgbWFqb3IgdmVyc2lvbiBudW1iZXIKKyAgIGNoYW5nZSBiZWZvcmUgdGhlIHN0YW5kYXJkIGlzIGNvbnNpZGVyZWQgImJha2VkIi4gIEFsbCBjaGFuZ2VzIHdpbGwKKyAgIGJlIGNsZWFybHkgbWFya2VkIGFuZCBkb2N1bWVudGVkIHRvIG1ha2Ugc3VjaCBhIHRyYW5zaXRpb24gYXMgZWFzeSBhcworICAgcG9zc2libGUuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgIFtQYWdlIDddCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBUbyBhbGxvdyBjb25jbHVzaXZlIGRldGVjdGlvbiBvZiBwcm90b2NvbCAoaW4pY29tcGF0aWJpbGl0eSBiZXR3ZWVuCisgICB0aGUgaG9zdCBhbmQgdGhlIE5DUCwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhbmQgcHJvcGVydGllcyBhcmUKKyAgIGFscmVhZHkgY29uc2lkZXJlZCB0byBiZSAiYmFrZWQiIGFuZCB3aWxsIG5vdCBjaGFuZ2U6CisKKyAgIG8gIENvbW1hbmQgSURzIHplcm8gdGhyb3VnaCBlaWdodC4gIChSZXNldCwgTm8tb3AsIGFuZCBQcm9wZXJ0eS1WYWx1ZQorICAgICAgQ29tbWFuZHMpCisgICBvICBQcm9wZXJ0eSBJRHMgemVybyB0aHJvdWdoIHR3by4gIChMYXN0IHN0YXR1cywgUHJvdG9jb2wgVmVyc2lvbiwKKyAgICAgIGFuZCBOQ1AgVmVyc2lvbikKKworICAgUmVudW1iZXJpbmcgd291bGQgYmUgdW5kZXJ0YWtlbiBpbiBvcmRlciB0byBiZXR0ZXIgb3JnYW5pemUgdGhlCisgICBhbGxvY2F0aW9uIG9mIHByb3BlcnR5IElEcyBhbmQgY2FwYWJpbGl0eSBJRHMuICBPbmUgb2YgdGhlIGluaXRpYWwKKyAgIGdvYWxzIG9mIHRoaXMgcHJvdG9jb2wgd2FzIGZvciBpdCB0byBiZSBwb3NzaWJsZSBmb3IgYSBob3N0IG9yIE5DUCB0bworICAgb25seSBpbXBsZW1lbnQgcHJvcGVydGllcyB3aXRoIHZhbHVlcyBsZXNzIHRoYW4gMTI3IGFuZCBmb3IgdGhlIE5DUAorICAgdG8gc3RpbGwgYmUgdXNhYmxlLS0tcmVsZWdhdGluZyBhbGwgbGFyZ2VyIHByb3BlcnR5IHZhbHVlcyBmb3IgZXh0cmEKKyAgIGZlYXR1cmVzIG9yIG90aGVyIGNhcGFiaWxpdGllcyB0aGF0IGFyZW4ndCBzdHJpY3RseSBuZWNlc3NhcnkuICBUaGlzCisgICB3b3VsZCBhbGxvdyBzaW1wbGUgaW1wbGVtZW50YXRpb25zIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGltcGxlbWVudAorICAgc3VwcG9ydCBmb3IgUFVJcyAoU2VjdGlvbiAzLjIpLgorCisgICBBcyB0aW1lIGhhcyBnb25lIGJ5IGFuZCB0aGUgcHJvdG9jb2wgaGFzIGJlY29tZSBtb3JlIGZsZXNoZWQgb3V0LCBpdAorICAgaGFzIGJlY29tZSBjbGVhciB0aGF0IHNvbWUgb2YgdGhlIGluaXRpYWwgYWxsb2NhdGlvbnMgd2VyZSBpbmFkZXF1YXRlCisgICBhbmQgc2hvdWxkIGJlIHJldmlzaXRlZCBpZiB3ZSB3YW50IHRvIHRyeSB0byBhY2hpZXZlIHRoZSBvcmlnaW5hbAorICAgZ29hbC4KKworMi4gIEZyYW1lIEZvcm1hdAorCisgICBBIGZyYW1lIGlzIGRlZmluZWQgc2ltcGx5IGFzIHRoZSBjb25jYXRlbmF0aW9uIG9mCisKKyAgIG8gIEEgaGVhZGVyIGJ5dGUKKyAgIG8gIEEgY29tbWFuZCAodXAgdG8gdGhyZWUgYnl0ZXMsIHNlZSBTZWN0aW9uIDMuMiBmb3IgZm9ybWF0KQorICAgbyAgQW4gb3B0aW9uYWwgY29tbWFuZCBwYXlsb2FkCisKKyAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgIDEgICAgfCAxLTMgfCAgICAgIG4gICAgICB8CisgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EIHwgQ01EX1BBWUxPQUQgfAorICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0rCisKKzIuMS4gIEhlYWRlciBGb3JtYXQKKworICAgVGhlIGhlYWRlciBieXRlIGlzIGJyb2tlbiBkb3duIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAgICAgICAgICAgICAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcKKyAgICAgICAgICAgICAgICAgICAgICstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworICAgICAgICAgICAgICAgICAgICAgfCAgRkxHICB8ICBOTEkgIHwgICAgICBUSUQgICAgICB8CisgICAgICAgICAgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKKworICAgW0NSRUYxXQorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICAgW1BhZ2UgOF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzIuMS4xLiAgRkxHOiBGbGFnCisKKyAgIFRoZSBmbGFnIGZpZWxkIG9mIHRoZSBoZWFkZXIgYnl0ZSAoIkZMRyIpIGlzIGFsd2F5cyBzZXQgdG8gdGhlIHZhbHVlCisgICB0d28gKG9yICIxMCIgaW4gYmluYXJ5KS4gIEFueSBmcmFtZSByZWNlaXZlZCB3aXRoIHRoZXNlIGJpdHMgc2V0IHRvCisgICBhbnkgb3RoZXIgdmFsdWUgZWxzZSBNVVNUIE5PVCBiZSBjb25zaWRlcmVkIGEgU3BpbmVsIGZyYW1lLgorCisgICBUaGlzIGNvbnZlbnRpb24gYWxsb3dzIFNwaW5lbCB0byBiZSBsaW5lIGNvbXBhdGlibGUgd2l0aCBCVExFIEhDSS4KKyAgIEJ5IGRlZmluaW5nIHRoZSBmaXJzdCB0d28gYml0IGluIHRoaXMgd2F5IHdlIGNhbiBkaXNhbWJpZ3VhdGUgYmV0d2VlbgorICAgU3BpbmVsIGZyYW1lcyBhbmQgSENJIGZyYW1lcyAod2hpY2ggYWx3YXlzIHN0YXJ0IHdpdGggZWl0aGVyICIweDAxIgorICAgb3IgIjB4MDQiKSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZyYW1pbmcgb3ZlcmhlYWQuCisKKzIuMS4yLiAgTkxJOiBOZXR3b3JrIExpbmsgSWRlbnRpZmllcgorCisgICBUaGUgTmV0d29yayBMaW5rIElkZW50aWZpZXIgKE5MSSkgaXMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAzLCB3aGljaAorICAgaXMgYXNzb2NpYXRlZCBieSB0aGUgT1Mgd2l0aCBvbmUgb2YgdXAgdG8gZm91ciBJUHY2IHpvbmUgaW5kaWNlcworICAgY29ycmVzcG9uZGluZyB0byBjb25jZXB0dWFsIElQdjYgaW50ZXJmYWNlcyBvbiB0aGUgTkNQLiAgVGhpcyBhbGxvd3MKKyAgIHRoZSBwcm90b2NvbCB0byBzdXBwb3J0IElQdjYgbm9kZXMgY29ubmVjdGluZyBzaW11bHRhbmVvdXNseSB0byBtb3JlCisgICB0aGFuIG9uZSBJUHY2IG5ldHdvcmsgbGluayB1c2luZyBhIHNpbmdsZSBOQ1AgaW5zdGFuY2UuICBUaGUgZmlyc3QKKyAgIE5ldHdvcmsgTGluayBJZGVudGlmaWVyICgwKSBNVVNUIHJlZmVyIHRvIGEgZGlzdGluZ3Vpc2hlZCBjb25jZXB0dWFsCisgICBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIE5DUCBmb3IgaXRzIElQdjYgbGluayB0eXBlLiAgVGhlIG90aGVyCisgICB0aHJlZSBOZXR3b3JrIExpbmsgSWRlbnRpZmllcnMgKDEsIDIgYW5kIDMpIE1BWSBiZSBkaXNzb2NpYXRlZCBmcm9tCisgICBhbnkgY29uY2VwdHVhbCBpbnRlcmZhY2UuCisKKzIuMS4zLiAgVElEOiBUcmFuc2FjdGlvbiBJZGVudGlmaWVyCisKKyAgIFRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBoZWFkZXIgcmVwcmVzZW50IHRoZSBUcmFuc2FjdGlvbgorICAgSWRlbnRpZmllcihUSUQpLiAgVGhlIFRJRCBpcyB1c2VkIGZvciBjb3JyZWxhdGluZyByZXNwb25zZXMgdG8gdGhlCisgICBjb21tYW5kcyB3aGljaCBnZW5lcmF0ZWQgdGhlbS4KKworICAgV2hlbiBhIGNvbW1hbmQgaXMgc2VudCBmcm9tIHRoZSBob3N0LCBhbnkgcmVwbHkgdG8gdGhhdCBjb21tYW5kIHNlbnQKKyAgIGJ5IHRoZSBOQ1Agd2lsbCB1c2UgdGhlIHNhbWUgdmFsdWUgZm9yIHRoZSBUSUQuICBXaGVuIHRoZSBob3N0CisgICByZWNlaXZlcyBhIGZyYW1lIHRoYXQgbWF0Y2hlcyB0aGUgVElEIG9mIHRoZSBjb21tYW5kIGl0IHNlbnQsIGl0IGNhbgorICAgZWFzaWx5IHJlY29nbml6ZSB0aGF0IGZyYW1lIGFzIHRoZSBhY3R1YWwgcmVzcG9uc2UgdG8gdGhhdCBjb21tYW5kLgorCisgICBUaGUgVElEIHZhbHVlIG9mIHplcm8gKDApIGlzIHVzZWQgZm9yIGNvbW1hbmRzIHRvIHdoaWNoIGEgY29ycmVsYXRlZAorICAgcmVzcG9uc2UgaXMgbm90IGV4cGVjdGVkIG9yIG5lZWRlZCwgc3VjaCBhcyBmb3IgdW5zb2xpY2l0ZWQgdXBkYXRlCisgICBjb21tYW5kcyBzZW50IHRvIHRoZSBob3N0IGZyb20gdGhlIE5DUC4KKworMi4xLjQuICBDb21tYW5kIElkZW50aWZpZXIgKENNRCkKKworICAgVGhlIGNvbW1hbmQgaWRlbnRpZmllciBpcyBhIDIxLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGVuY29kZWQgaW4gdXAgdG8KKyAgIHRocmVlIGJ5dGVzIHVzaW5nIHRoZSBwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluCisgICBTZWN0aW9uIDMuMi4gIFRoaXMgZW5jb2RpbmcgYWxsb3dzIGZvciB1cCB0byAyLDA5NywxNTIgaW5kaXZpZHVhbAorICAgY29tbWFuZHMsIHdpdGggdGhlIGZpcnN0IDEyNyBjb21tYW5kcyByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBieXRlLgorICAgQ29tbWFuZCBpZGVudGlmaWVycyBsYXJnZXIgdGhhbiAyLDA5NywxNTEgYXJlIGV4cGxpY2l0bHkgZm9yYmlkZGVuLgorCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgIFtQYWdlIDldCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgfCAgICAgICBDSUQgUmFuZ2UgICAgICAgfCAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgfCAgICAgICAgIDAgLSA2MyAgICAgICAgfCBSZXNlcnZlZCBmb3IgY29yZSBjb21tYW5kcyB8CisgICAgICAgICAgfCAgICAgIDY0IC0gMTUsMzU5ICAgICAgfCAgICAgICBfVU5BTExPQ0FURURfICAgICAgICB8CisgICAgICAgICAgfCAgICAxNSwzNjAgLSAxNiwzODMgICAgfCAgICAgIFZlbmRvci1zcGVjaWZpYyAgICAgICB8CisgICAgICAgICAgfCAgIDE2LDM4NCAtIDEsOTk5LDk5OSAgfCAgICAgICBfVU5BTExPQ0FURURfICAgICAgICB8CisgICAgICAgICAgfCAyLDAwMCwwMDAgLSAyLDA5NywxNTEgfCAgIEV4cGVyaW1lbnRhbCB1c2Ugb25seSAgICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKzIuMS41LiAgQ29tbWFuZCBQYXlsb2FkIChPcHRpb25hbCkKKworICAgRGVwZW5kaW5nIG9uIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGNvbW1hbmQgaW4gcXVlc3Rpb24sIGEgcGF5bG9hZCBNQVkKKyAgIGJlIGluY2x1ZGVkIGluIHRoZSBmcmFtZS4gIFRoZSBleGFjdCBjb21wb3NpdGlvbiBhbmQgbGVuZ3RoIG9mIHRoZQorICAgcGF5bG9hZCBpcyBkZWZpbmVkIGJ5IHRoZSBjb21tYW5kIGlkZW50aWZpZXIuCisKKzMuICBEYXRhIFBhY2tpbmcKKworICAgRGF0YSBzZXJpYWxpemF0aW9uIGZvciBwcm9wZXJ0aWVzIGlzIHBlcmZvcm1lZCB1c2luZyBhIGxpZ2h0LXdlaWdodAorICAgZGF0YSBwYWNraW5nIGZvcm1hdCB3aGljaCB3YXMgbG9vc2VseSBpbnNwaXJlZCBieSBELUJ1cy4gIFRoZSBmb3JtYXQKKyAgIG9mIGEgc2VyaWFsaXphdGlvbiBpcyBkZWZpbmVkIGJ5IGEgc3BlY2lhbGx5IGZvcm1hdHRlZCBzdHJpbmcuCisKKyAgIFRoaXMgcGFja2luZyBmb3JtYXQgaXMgdXNlZCBmb3Igbm90YXRpb25hbCBjb252ZW5pZW5jZS4gIFdoaWxlIHRoaXMKKyAgIHN0cmluZy1iYXNlZCBkYXRhdHlwZSBmb3JtYXQgaGFzIGJlZW4gZGVzaWduZWQgc28gdGhhdCB0aGUgc3RyaW5ncworICAgbWF5IGJlIGRpcmVjdGx5IHVzZWQgYnkgYSBzdHJ1Y3R1cmVkIGRhdGEgcGFyc2VyLCBzdWNoIGEgdGhpbmcgaXMgbm90CisgICByZXF1aXJlZCB0byBpbXBsZW1lbnQgU3BpbmVsLiAgSW5kZWVkLCBoaWdseSBjb25zdHJhaW5lZCBhcHBsaWNhdGlvbnMKKyAgIG1heSBmaW5kIHN1Y2ggYSB0aGluZyB0byBiZSB0b28gaGVhdnl3ZWlnaHQuCisKKyAgIEdvYWxzOgorCisgICBvICBCZSBsaWdodHdlaWdodCBhbmQgZmF2b3IgZGlyZWN0IHJlcHJlc2VudGF0aW9uIG9mIHZhbHVlcy4KKyAgIG8gIFVzZSBhbiBlYXNpbHkgcmVhZGFibGUgYW5kIG1lbW9yYWJsZSBmb3JtYXQgc3RyaW5nLgorICAgbyAgU3VwcG9ydCBsaXN0cyBhbmQgc3RydWN0dXJlcy4KKyAgIG8gIEFsbG93IHByb3BlcnRpZXMgdG8gYmUgYXBwZW5kZWQgdG8gc3RydWN0dXJlcyB3aGlsZSBtYWludGFpbmluZworICAgICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworICAgRWFjaCBwcmltaXRpdmUgZGF0YXR5cGUgaGFzIGFuIEFTQ0lJIGNoYXJhY3RlciBhc3NvY2lhdGVkIHdpdGggaXQuCisgICBTdHJ1Y3R1cmVzIGNhbiBiZSByZXByZXNlbnRlZCBhcyBzdHJpbmdzIG9mIHRoZXNlIGNoYXJhY3RlcnMuICBGb3IKKyAgIGV4YW1wbGU6CisKKyAgIG8gICJDIjogQSBzaW5nbGUgdW5zaWduZWQgYnl0ZS4KKyAgIG8gICJDNlUiOiBBIHNpbmdsZSB1bnNpZ25lZCBieXRlLCBmb2xsb3dlZCBieSBhIDEyOC1iaXQgSVB2NiBhZGRyZXNzLAorICAgICAgZm9sbG93ZWQgYnkgYSB6ZXJvLXRlcm1pbmF0ZWQgVVRGOCBzdHJpbmcuCisgICBvICAiQSg2KSI6IEFuIGFycmF5IG9mIGNvbmNhdGVuYXRlZCBJUHY2IGFkZHJlc3NlcworCisgICBJbiBlYWNoIGNhc2UsIHRoZSBkYXRhIGlzIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgZGVzY3JpYmVkLiAgRm9yCisgICBleGFtcGxlLCBhbiBhcnJheSBvZiAxMCBJUHY2IGFkZHJlc3MgaXMgc3RvcmVkIGFzIDE2MCBieXRlcy4KKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMTBdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCiszLjEuICBQcmltaXRpdmUgVHlwZXMKKworICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8ICAgQ2hhciAgIHwgTmFtZSAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCAgICIuIiAgICB8IERBVEFUWVBFX1ZPSUQgICAgICAgIHwgRW1wdHkgZGF0YSB0eXBlLiBVc2VkICAgICAgICAgICB8CisgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCBpbnRlcm5hbGx5LiAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAiYiIgICAgfCBEQVRBVFlQRV9CT09MICAgICAgICB8IEJvb2xlYW4gdmFsdWUuIEVuY29kZWQgaW4gICAgICAgfAorICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgOC1iaXRzIGFzIGVpdGhlciAweDAwIG9yIDB4MDEuICB8CisgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCBBbGwgb3RoZXIgdmFsdWVzIGFyZSBpbGxlZ2FsLiAgIHwKKyAgIHwgICAiQyIgICAgfCBEQVRBVFlQRV9VSU5UOCAgICAgICB8IFVuc2lnbmVkIDgtYml0IGludGVnZXIuICAgICAgICAgfAorICAgfCAgICJjIiAgICB8IERBVEFUWVBFX0lOVDggICAgICAgIHwgU2lnbmVkIDgtYml0IGludGVnZXIuICAgICAgICAgICB8CisgICB8ICAgIlMiICAgIHwgREFUQVRZUEVfVUlOVDE2ICAgICAgfCBVbnNpZ25lZCAxNi1iaXQgaW50ZWdlci4gICAgICAgIHwKKyAgIHwgICAicyIgICAgfCBEQVRBVFlQRV9JTlQxNiAgICAgICB8IFNpZ25lZCAxNi1iaXQgaW50ZWdlci4gICAgICAgICAgfAorICAgfCAgICJMIiAgICB8IERBVEFUWVBFX1VJTlQzMiAgICAgIHwgVW5zaWduZWQgMzItYml0IGludGVnZXIuICAgICAgICB8CisgICB8ICAgImwiICAgIHwgREFUQVRZUEVfSU5UMzIgICAgICAgfCBTaWduZWQgMzItYml0IGludGVnZXIuICAgICAgICAgIHwKKyAgIHwgICAiaSIgICAgfCBEQVRBVFlQRV9VSU5UX1BBQ0tFRCB8IFBhY2tlZCBVbnNpZ25lZCBJbnRlZ2VyLiBTZWUgICAgfAorICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgU2VjdGlvbiAzLjIuICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgIjYiICAgIHwgREFUQVRZUEVfSVB2NkFERFIgICAgfCBJUHY2IEFkZHJlc3MuIChCaWctZW5kaWFuKSAgICAgIHwKKyAgIHwgICAiRSIgICAgfCBEQVRBVFlQRV9FVUk2NCAgICAgICB8IEVVSS02NCBBZGRyZXNzLiAoQmlnLWVuZGlhbikgICAgfAorICAgfCAgICJlIiAgICB8IERBVEFUWVBFX0VVSTQ4ICAgICAgIHwgRVVJLTQ4IEFkZHJlc3MuIChCaWctZW5kaWFuKSAgICB8CisgICB8ICAgIkQiICAgIHwgREFUQVRZUEVfREFUQSAgICAgICAgfCBBcmJpdHJhcnkgZGF0YS4gU2VlIFNlY3Rpb24gICAgIHwKKyAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8IDMuMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICJkIiAgICB8IERBVEFUWVBFX0RBVEFfV0xFTiAgIHwgQXJiaXRyYXJ5IGRhdGEgd2l0aCBwcmVwZW5kZWQgICB8CisgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCBsZW5ndGguIFNlZSBTZWN0aW9uIDMuMy4gICAgICAgIHwKKyAgIHwgICAiVSIgICAgfCBEQVRBVFlQRV9VVEY4ICAgICAgICB8IFplcm8tdGVybWluYXRlZCBVVEY4LWVuY29kZWQgICAgfAorICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgc3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICJ0KC4uLikiIHwgREFUQVRZUEVfU1RSVUNUICAgICAgfCBTdHJ1Y3R1cmVkIGRhdGF0eXBlIHdpdGggICAgICAgIHwKKyAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8IHByZXBlbmRlZCBsZW5ndGguIFNlZSBTZWN0aW9uICAgfAorICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgMy40LiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICJBKC4uLikiIHwgREFUQVRZUEVfQVJSQVkgICAgICAgfCBBcnJheSBvZiBkYXRhdHlwZXMuIENvbXBvdW5kICAgIHwKKyAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUuIFNlZSBTZWN0aW9uIDMuNS4gICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIEFsbCBtdWx0aS1ieXRlIHZhbHVlcyBhcmUgbGl0dGxlLWVuZGlhbiB1bmxlc3MgZXhwbGljaXRseSBzdGF0ZWQKKyAgIG90aGVyd2lzZS4KKworMy4yLiAgUGFja2VkIFVuc2lnbmVkIEludGVnZXIKKworICAgRm9yIGNlcnRhaW4gdHlwZXMgb2YgaW50ZWdlcnMsIHN1Y2ggY29tbWFuZCBvciBwcm9wZXJ0eSBpZGVudGlmaWVycywKKyAgIHVzdWFsbHkgaGF2ZSBhIHZhbHVlIG9uIHRoZSB3aXJlIHRoYXQgaXMgbGVzcyB0aGFuIDEyNy4gIEhvd2V2ZXIsIGluCisgICBvcmRlciB0byBub3QgcHJlY2x1ZGUgdGhlIHVzZSBvZiB2YWx1ZXMgbGFyZ2VyIHRoYW4gMjU1LCB3ZSB3b3VsZAorICAgbmVlZCB0byBhZGQgYW4gZXh0cmEgYnl0ZS4gIERvaW5nIHRoaXMgd291bGQgYWRkIGFuIGV4dHJhIGJ5dGUgdG8gdGhlCisgICBtYWpvcml0eSBvZiBpbnN0YW5jZXMsIHdoaWNoIGNhbiBhZGQgdXAgaW4gdGVybXMgb2YgYmFuZHdpZHRoLgorCisgICBUaGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGlzIGJhc2VkIG9uIHRoZSB1bnNpZ25lZCBpbnRlZ2VyCisgICBmb3JtYXQgaW4gRVhJIFsxXSwgZXhjZXB0IHRoYXQgd2UgbGltaXQgdGhlIG1heGltdW0gdmFsdWUgdG8gdGhlCisgICBsYXJnZXN0IHZhbHVlIHRoYXQgY2FuIGJlIGVuY29kZWQgaW50byB0aHJlZSBieXRlcygyLDA5NywxNTEpLgorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMTFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBGb3IgYWxsIHZhbHVlcyBsZXNzIHRoYW4gMTI3LCB0aGUgcGFja2VkIGZvcm0gb2YgdGhlIG51bWJlciBpcyBzaW1wbHkKKyAgIGEgc2luZ2xlIGJ5dGUgd2hpY2ggZGlyZWN0bHkgcmVwcmVzZW50cyB0aGUgbnVtYmVyLiAgRm9yIHZhbHVlcworICAgbGFyZ2VyIHRoYW4gMTI3LCB0aGUgZm9sbG93aW5nIHByb2Nlc3MgaXMgdXNlZCB0byBlbmNvZGUgdGhlIHZhbHVlOgorCisgICAxLiAgVGhlIHVuc2lnbmVkIGludGVnZXIgaXMgYnJva2VuIHVwIGludG8gX25fIDctYml0IGNodW5rcyBhbmQKKyAgICAgICBwbGFjZWQgaW50byBfbl8gb2N0ZXRzLCBsZWF2aW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBlYWNoCisgICAgICAgb2N0ZXQgdW51c2VkLgorICAgMi4gIE9yZGVyIHRoZSBvY3RldHMgZnJvbSBsZWFzdC1zaWduaWZpY2FudCB0byBtb3N0LXNpZ25pZmljYW50LgorICAgICAgIChMaXR0bGUtZW5kaWFuKQorICAgMy4gIENsZWFyIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBvY3RldC4KKyAgICAgICBTZXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvbiBhbGwgb3RoZXIgb2N0ZXRzLgorCisgICBXaGVyZSBfbl8gaXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiA3LWJpdCBjaHVua3MgeW91IGNhbiB1c2UgdG8KKyAgIHJlcHJlc2VudCB0aGUgZ2l2ZW4gdmFsdWUuCisKKyAgIFRha2UgdGhlIHZhbHVlIDEzMzcsIGZvciBleGFtcGxlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzM3ID0+IDB4MDUzOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBbMzkgMEFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFtCOSAwQV0KKworICAgVG8gZGVjb2RlIHRoZSB2YWx1ZSwgeW91IGNvbGxlY3QgdGhlIDctYml0IGNodW5rcyB1bnRpbCB5b3UgZmluZCBhbgorICAgb2N0ZXQgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgY2xlYXIuCisKKzMuMy4gIERhdGEgQmxvYnMKKworICAgVGhlcmUgYXJlIHR3byB0eXBlcyBmb3IgZGF0YSBibG9iczogImQiIGFuZCAiRCIuCisKKyAgIG8gICJkIiBoYXMgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAoaW4gYnl0ZXMpIHByZXBlbmRlZCB0byB0aGUgZGF0YQorICAgICAgKHdpdGggdGhlIGxlbmd0aCBlbmNvZGVkIGFzIHR5cGUgIlMiKS4gIFRoZSBzaXplIG9mIHRoZSBsZW5ndGgKKyAgICAgIGZpZWxkIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGVuZ3RoLgorICAgbyAgIkQiIGRvZXMgbm90IGhhdmUgYSBwcmVwZW5kZWQgbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGlzCisgICAgICBpbXBsaWVkIGJ5IHRoZSBieXRlcyByZW1haW5pbmcgdG8gYmUgcGFyc2VkLiAgSXQgaXMgYW4gZXJyb3IgZm9yCisgICAgICAiRCIgdG8gbm90IGJlIHRoZSBsYXN0IHR5cGUgaW4gYSB0eXBlIGluIGEgdHlwZSBzaWduYXR1cmUuCisKKyAgIFRoaXMgZGljaG90b215IGFsbG93cyBmb3IgbW9yZSBlZmZpY2llbnQgZW5jb2RpbmcgYnkgZWxpbWluYXRpbmcKKyAgIHJlZHVuZGVuY3kuICBJZiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIGlzIGEgZGF0YSBibG9iLCBlbmNvZGluZyB0aGUKKyAgIGxlbmd0aCB3b3VsZCBiZSByZWR1bmRhbnQgYmVjYXVzZSB3ZSBhbHJlYWR5IGtub3cgaG93IG1hbnkgYnl0ZXMgYXJlCisgICBpbiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyLgorCisgICBJbiBzb21lIGNhc2VzIHdlIHVzZSAiZCIgZXZlbiBpZiBpdCBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIHR5cGUKKyAgIHNpZ25hdHVyZS4gIFdlIGRvIHRoaXMgdG8gYWxsb3cgZm9yIHVzIHRvIGJlIGFibGUgdG8gYXBwZW5kCisgICBhZGRpdGlvbmFsIGZpZWxkcyB0byB0aGUgdHlwZSBzaWduYXR1cmUgaWYgbmVjZXNzYXJ5IGluIHRoZSBmdXR1cmUuCisgICBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2Ugd2l0aCBlbWJlZGRlZCBzdHJ1Y3RzLCBsaWtlIGluIHRoZSBzY2FuCisgICByZXN1bHRzLgorCisgICBGb3IgZXhhbXBsZSwgbGV0J3Mgc2F5IHdlIGhhdmUgYSBidWZmZXIgdGhhdCBpcyBlbmNvZGVkIHdpdGggdGhlCisgICBkYXRhdHlwZSBzaWduYXR1cmUgb2YgIkNMTEQiLiAgSW4gdGhpcyBjYXNlLCBpdCBpcyBwcmV0dHkgZWFzeSB0bworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMTJdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICB0ZWxsIHdoZXJlIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBkYXRhIGJsb2IgaXM6IHRoZSBzdGFydCBpcyA5CisgICBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLCBhbmQgaXRzIGxlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mCisgICB0aGUgYnVmZmVyIG1pbnVzIDkuICg5IGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGFrZW4gdXAgYnkgYSBieXRlIGFuZAorICAgdHdvIGxvbmdzKQorCisgICBUaGUgZGF0YXR5cGUgc2lnbmF0dXJlICJDTExEVSIgaXMgaWxsZWdhbCBiZWNhdXNlIHdlIGNhbid0IGRldGVybWluZQorICAgd2hlcmUgdGhlIGxhc3QgZmllbGQgKGEgemVyby10ZXJtaW5hdGVkIFVURjggc3RyaW5nKSBzdGFydHMuICBCdXQgdGhlCisgICBkYXRhdHlwZSAiQ0xMZFUiIF9pc18gbGVnYWwsIGJlY2F1c2UgdGhlIHBhcnNlciBjYW4gZGV0ZXJtaW5lIHRoZQorICAgZXhhY3QgbGVuZ3RoIG9mIHRoZSBkYXRhIGJsb2ItLSBhbGxvd2luZyBpdCB0byBrbm93IHdoZXJlIHRoZSBzdGFydAorICAgb2YgdGhlIG5leHQgZmllbGQgd291bGQgYmUuCisKKzMuNC4gIFN0cnVjdHVyZWQgRGF0YQorCisgICBUaGUgc3RydWN0dXJlIGRhdGEgdHlwZSAoInQoLi4uKSIpIGlzIGEgd2F5IG9mIGJ1bmRsaW5nIHRvZ2V0aGVyCisgICBzZXZlcmFsIGZpZWxkcyBpbnRvIGEgc2luZ2xlIHN0cnVjdHVyZS4gIEl0IGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEKKyAgICJkIiB0eXBlIGV4Y2VwdCB0aGF0IGluc3RlYWQgb2YgYmVpbmcgb3BhcXVlLCB0aGUgZmllbGRzIGluIHRoZQorICAgY29udGVudCBhcmUga25vd24uICBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhpbmdzIGxpa2Ugc2NhbiByZXN1bHRzIHdoZXJlCisgICB5b3UgaGF2ZSBzdWJzdHJ1Y3R1cmVzIHdoaWNoIGFyZSBkZWZpbmVkIGJ5IGRpZmZlcmVudCBsYXllcnMuCisKKyAgIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgdHlwZSBzaWduYXR1cmUgIkx0KEVTKXQoNkMpIi4gIEluIHRoaXMKKyAgIGh5cG90aGV0aWNhbCBjYXNlLCB0aGUgZmlyc3Qgc3RydWN0IGlzIGRlZmluZWQgYnkgdGhlIE1BQyBsYXllciwgYW5kCisgICB0aGUgc2Vjb25kIHN0cnVjdCBpcyBkZWZpbmVkIGJ5IHRoZSBQSFkgbGF5ZXIuICBCZWNhdXNlIG9mIHRoZSB1c2Ugb2YKKyAgIHN0cnVjdHVyZXMsIHdlIGtub3cgZXhhY3RseSB3aGF0IHBhcnQgY29tZXMgZnJvbSB0aGF0IGxheWVyLgorICAgQWRkaXRpb25hbGx5LCB3ZSBjYW4gYWRkIGZpZWxkcyB0byBlYWNoIHN0cnVjdHVyZSB3aXRob3V0IGludHJvZHVjaW5nCisgICBiYWNrd2FyZCBjb21wYXRhYmlsaXR5IHByb2JsZW1zOiBEYXRhIGVuY29kZWQgYXMgIkx0KEVTVSl0KDZDKSIKKyAgIChOb3RpY2UgdGhlIGV4dHJhICJVIikgd2lsbCBkZWNvZGUganVzdCBmaW5lIGFzICJMdChFUyl0KDZDKSIuCisgICBBZGRpdGlvbmFsbHksIGlmIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIE1BQyBsYXllciBhbmQgb25seSBjYXJlCisgICBhYm91dCB0aGUgbmV0d29yayBsYXllciwgd2UgY291bGQgcGFyc2UgYXMgIkx0KCl0KDZDKSIuCisKKyAgIE5vdGUgdGhhdCBkYXRhIGVuY29kZWQgYXMgIkx0KEVTKXQoNkMpIiB3aWxsIGFsc28gcGFyc2UgYXMgIkxkZCIsCisgICB3aXRoIHRoZSBzdHJ1Y3R1cmVzIGZyb20gYm90aCBsYXllcnMgbm93IGJlaW5nIG9wYXF1ZSBkYXRhIGJsb2JzLgorCiszLjUuICBBcnJheXMKKworICAgQW4gYXJyYXkgaXMgc2ltcGx5IGEgY29uY2F0ZW5hdGVkIHNldCBvZiBfbl8gZGF0YSBlbmNvZGluZ3MuICBGb3IKKyAgIGV4YW1wbGUsIHRoZSB0eXBlICJBKDYpIiBpcyBzaW1wbHkgYSBsaXN0IG9mIElQdjYgYWRkcmVzc2VzLS0tb25lCisgICBhZnRlciB0aGUgb3RoZXIuICBUaGUgdHlwZSAiQSg2RSkiIGxpa2V3aXNlIGEgY29uY2F0ZW5hdGlvbiBvZiBJUHY2LQorICAgYWRkcmVzcy9FVUktNjQgcGFpcnMuCisKKyAgIElmIGFuIGFycmF5IGNvbnRhaW5zIG1hbnkgZmllbGRzLCB0aGUgZmllbGRzIHdpbGwgb2Z0ZW4gYmUgc3Vycm91bmRlZAorICAgYnkgYSBzdHJ1Y3R1cmUgKCJ0KC4uLikiKS4gIFRoaXMgZWZmZWN0aXZlbHkgcHJlcGVuZHMgZWFjaCBpdGVtIGluCisgICB0aGUgYXJyYXkgd2l0aCBpdHMgbGVuZ3RoLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGltcHJvdmluZyBwYXJzaW5nCisgICBwZXJmb3JtYW5jZSBvciB0byBhbGxvdyBhZGRpdGlvbmFsIGZpZWxkcyB0byBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlCisgICBpbiBhIGJhY2t3YXJkIGNvbXBhdGlibGUgd2F5LiAgSWYgdGhlcmUgaXMgYSBoaWdoIGNlcnRhaW50eSB0aGF0CisgICBhZGRpdGlvbmFsIGZpZWxkcyB3aWxsIG5ldmVyIGJlIGFkZGVkLCB0aGUgc3RydWN0IG1heSBiZSBvbWl0dGVkCisgICAoc2F2aW5nIHR3byBieXRlcyBwZXIgaXRlbSkuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMTNdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBUaGlzIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZGVmaW5lIGEgd2F5IHRvIGVtYmVkIGFuIGFycmF5IGFzIGEgZmllbGQKKyAgIGFsb25nc2lkZSBvdGhlciBmaWVsZHMuCisKKzQuICBDb21tYW5kcworCis0LjEuICBDTUQgMDogKEhvc3QtPk5DUCkgQ01EX05PT1AKKworICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgIDEgICAgfCAgICAxICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9OT09QIHwKKyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0rCisKKyAgIE5vLU9wZXJhdGlvbiBjb21tYW5kLiAgSW5kdWNlcyB0aGUgTkNQIHRvIHNlbmQgYSBzdWNjZXNzIHN0YXR1cyBiYWNrCisgICB0byB0aGUgaG9zdC4gIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIGxpdmVsaW5lc3MgY2hlY2tzLgorCisgICBUaGUgY29tbWFuZCBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgU0hPVUxEIGJlIGVtcHR5LiAgVGhlIHJlY2VpdmVyCisgICBNVVNUIGlnbm9yZSBhbnkgbm9uLWVtcHR5IGNvbW1hbmQgcGF5bG9hZC4KKworICAgVGhlcmUgaXMgbm8gZXJyb3IgY29uZGl0aW9uIGZvciB0aGlzIGNvbW1hbmQuCisKKzQuMi4gIENNRCAxOiAoSG9zdC0+TkNQKSBDTURfUkVTRVQKKworICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAxICAgICB8CisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1JFU0VUIHwKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rCisKKyAgIFJlc2V0IE5DUCBjb21tYW5kLiAgQ2F1c2VzIHRoZSBOQ1AgdG8gcGVyZm9ybSBhIHNvZnR3YXJlIHJlc2V0LiAgRHVlCisgICB0byB0aGUgbmF0dXJlIG9mIHRoaXMgY29tbWFuZCwgdGhlIFRJRCBpcyBpZ25vcmVkLiAgVGhlIGhvc3Qgc2hvdWxkCisgICBpbnN0ZWFkIHdhaXQgZm9yIGEgIkNNRF9QUk9QX1ZBTFVFX0lTIiBjb21tYW5kIGZyb20gdGhlIE5DUAorICAgaW5kaWNhdGluZyAiUFJPUF9MQVNUX1NUQVRVUyIgaGFzIGJlZW4gc2V0IHRvCisgICAiU1RBVFVTX1JFU0VUX1NPRlRXQVJFIi4KKworICAgVGhlIGNvbW1hbmQgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIFNIT1VMRCBiZSBlbXB0eS4gIFRoZSByZWNlaXZlcgorICAgTVVTVCBpZ25vcmUgYW55IG5vbi1lbXB0eSBjb21tYW5kIHBheWxvYWQuCisKKyAgIElmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mICJQUk9QX0xBU1RfU1RBVFVTIiB3aWxsIGJlIGVtaXR0ZWQKKyAgIGluc3RlYWQgd2l0aCB0aGUgdmFsdWUgc2V0IHRvIHRoZSBnZW5lcmF0ZWQgc3RhdHVzIGNvZGUgZm9yIHRoZQorICAgZXJyb3IuCisKKzQuMy4gIENNRCAyOiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9HRVQKKworCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAxNF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKworICAgICAgICAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgICAgICAxICAgICAgICAgIHwgICAxLTMgICB8CisgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKKyAgICAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9QUk9QX1ZBTFVFX0dFVCB8IFBST1BfSUQgfAorICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCisKKyAgIEdldCBwcm9wZXJ0eSB2YWx1ZSBjb21tYW5kLiAgQ2F1c2VzIHRoZSBOQ1AgdG8gZW1pdCBhCisgICAiQ01EX1BST1BfVkFMVUVfSVMiIGNvbW1hbmQgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpZGVudGlmaWVyLgorCisgICBUaGUgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIGlzIHRoZSBwcm9wZXJ0eSBpZGVudGlmaWVyIGVuY29kZWQgaW4KKyAgIHRoZSBwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLgorCisgICBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSB2YWx1ZSBvZiAiUFJPUF9MQVNUX1NUQVRVUyIgd2lsbCBiZSBlbWl0dGVkCisgICBpbnN0ZWFkIHdpdGggdGhlIHZhbHVlIHNldCB0byB0aGUgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlIGZvciB0aGUKKyAgIGVycm9yLgorCis0LjQuICBDTUQgMzogKEhvc3QtPk5DUCkgQ01EX1BST1BfVkFMVUVfU0VUCisKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgICAgICAxICAgICAgICAgIHwgICAxLTMgICB8ICAgbiAgIHwKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfU0VUIHwgUFJPUF9JRCB8IFZBTFVFIHwKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKworICAgU2V0IHByb3BlcnR5IHZhbHVlIGNvbW1hbmQuICBJbnN0cnVjdHMgdGhlIE5DUCB0byBzZXQgdGhlIGdpdmVuCisgICBwcm9wZXJ0eSB0byB0aGUgc3BlY2lmaWMgZ2l2ZW4gdmFsdWUsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgdmFsdWUuCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgcHJvcGVydHkgdmFsdWUuICBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcworICAgZGVmaW5lZCBieSB0aGUgcHJvcGVydHkuCisKKyAgIElmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mICJQUk9QX0xBU1RfU1RBVFVTIiB3aWxsIGJlIGVtaXR0ZWQKKyAgIHdpdGggdGhlIHZhbHVlIHNldCB0byB0aGUgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlIGZvciB0aGUgZXJyb3IuCisKKzQuNS4gIENNRCA0OiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9JTlNFUlQKKworICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgICAgICAxICAgICAgICAgICB8ICAgMS0zICAgfCAgIG4gICB8CisgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfSU5TRVJUIHwgUFJPUF9JRCB8IFZBTFVFIHwKKyAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisKKyAgIEluc2VydCB2YWx1ZSBpbnRvIHByb3BlcnR5IGNvbW1hbmQuICBJbnN0cnVjdHMgdGhlIE5DUCB0byBpbnNlcnQgdGhlCisgICBnaXZlbiB2YWx1ZSBpbnRvIGEgbGlzdC1vcmllbnRlZCBwcm9wZXJ0eSwgd2l0aG91dCByZW1vdmluZyBvdGhlcgorICAgaXRlbXMgaW4gdGhlIGxpc3QuICBUaGUgcmVzdWx0aW5nIG9yZGVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0IGlzCisgICBkZWZpbmVkIGJ5IHRoZSBpbmRpdmlkdWFsIHByb3BlcnR5IGJlaW5nIG9wZXJhdGVkIG9uLgorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAxNV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgdmFsdWUgdG8gYmUgaW5zZXJ0ZWQuICBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSB2YWx1ZSBpcworICAgZGVmaW5lZCBieSB0aGUgcHJvcGVydHkuCisKKyAgIElmIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIGJ5ICJQUk9QX0lEIiBjb25zaXN0cworICAgb2YgYSBzaW5nbGUgc3RydWN0dXJlIGVuY2xvc2VkIGJ5IGFuIGFycmF5ICgiQSh0KC4uLikpIiksIHRoZW4gdGhlCisgICBjb250ZW50cyBvZiAiVkFMVUUiIE1VU1QgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhlIHN0cnVjdHVyZQorICAgKCIuLi4iKSByYXRoZXIgdGhhbiB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgd2hvbGUgaXRlbSAoInQoLi4uKSIpLgorICAgU3BlY2lmaWNhbGx5LCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUgTVVTVCBOT1QgYmUgcHJlcGVuZGVkIHRvCisgICAiVkFMVUUiLiAgVGhpcyBoZWxwcyB0byBlbGltaW5hdGUgcmVkdW5kYW50IGRhdGEuCisKKyAgIElmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mICJQUk9QX0xBU1RfU1RBVFVTIiB3aWxsIGJlIGVtaXR0ZWQKKyAgIHdpdGggdGhlIHZhbHVlIHNldCB0byB0aGUgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlIGZvciB0aGUgZXJyb3IuCisKKzQuNi4gIENNRCA1OiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9SRU1PVkUKKworICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgICAgICAxICAgICAgICAgICB8ICAgMS0zICAgfCAgIG4gICB8CisgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfUkVNT1ZFIHwgUFJPUF9JRCB8IFZBTFVFIHwKKyAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisKKyAgIFJlbW92ZSB2YWx1ZSBmcm9tIHByb3BlcnR5IGNvbW1hbmQuICBJbnN0cnVjdHMgdGhlIE5DUCB0byByZW1vdmUgdGhlCisgICBnaXZlbiB2YWx1ZSBmcm9tIGEgbGlzdC1vcmllbnRlZCBwcm9wZXJ0eSwgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIKKyAgIGl0ZW1zIGluIHRoZSBsaXN0LiAgVGhlIHJlc3VsdGluZyBvcmRlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBpcworICAgZGVmaW5lZCBieSB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0eSBiZWluZyBvcGVyYXRlZCBvbi4KKworICAgTm90ZSB0aGF0IHRoaXMgY29tbWFuZCBvcGVyYXRlcyBfYnkgdmFsdWVfLCBub3QgYnkgaW5kZXghCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgdmFsdWUgdG8gYmUgcmVtb3ZlZC4gIFRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIHZhbHVlIGlzIGRlZmluZWQKKyAgIGJ5IHRoZSBwcm9wZXJ0eS4KKworICAgSWYgdGhlIHR5cGUgc2lnbmF0dXJlIG9mIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkgIlBST1BfSUQiIGNvbnNpc3RzCisgICBvZiBhIHNpbmdsZSBzdHJ1Y3R1cmUgZW5jbG9zZWQgYnkgYW4gYXJyYXkgKCJBKHQoLi4uKSkiKSwgdGhlbiB0aGUKKyAgIGNvbnRlbnRzIG9mICJWQUxVRSIgTVVTVCBjb250YWluIHRoZSBjb250ZW50cyBvZiB0aGUgc3RydWN0dXJlCisgICAoIi4uLiIpIHJhdGhlciB0aGFuIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSB3aG9sZSBpdGVtICgidCguLi4pIikuCisgICBTcGVjaWZpY2FsbHksIHRoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8KKyAgICJWQUxVRSIuICBUaGlzIGhlbHBzIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgZGF0YS4KKworICAgSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgdmFsdWUgb2YgIlBST1BfTEFTVF9TVEFUVVMiIHdpbGwgYmUgZW1pdHRlZAorICAgd2l0aCB0aGUgdmFsdWUgc2V0IHRvIHRoZSBnZW5lcmF0ZWQgc3RhdHVzIGNvZGUgZm9yIHRoZSBlcnJvci4KKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMTZdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis0LjcuICBDTUQgNjogKE5DUC0+SG9zdCkgQ01EX1BST1BfVkFMVUVfSVMKKworICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisgICAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgICAgMSAgICAgICAgIHwgICAxLTMgICB8ICAgbiAgIHwKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworICAgICAgICB8IEZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRV9JUyB8IFBST1BfSUQgfCBWQUxVRSB8CisgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKworICAgUHJvcGVydHkgdmFsdWUgbm90aWZpY2F0aW9uIGNvbW1hbmQuICBUaGlzIGNvbW1hbmQgY2FuIGJlIHNlbnQgYnkgdGhlCisgICBOQ1AgaW4gcmVzcG9uc2UgdG8gYSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhvc3QsIG9yIGl0IGNhbiBiZQorICAgc2VudCBieSB0aGUgTkNQIGluIGFuIHVuc29saWNpdGVkIGZhc2hpb24gdG8gbm90aWZ5IHRoZSBob3N0IG9mCisgICB2YXJpb3VzIHN0YXRlIGNoYW5nZXMgYXN5bmNocm9ub3VzbHkuCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkuCisKKzQuOC4gIENNRCA3OiAoTkNQLT5Ib3N0KSBDTURfUFJPUF9WQUxVRV9JTlNFUlRFRAorCisgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgICAgICAgICAxICAgICAgICAgICAgfCAgIDEtMyAgIHwgICBuICAgfAorICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9QUk9QX1ZBTFVFX0lOU0VSVEVEIHwgUFJPUF9JRCB8IFZBTFVFIHwKKyAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworCisgICBQcm9wZXJ0eSB2YWx1ZSBpbnNlcnRpb24gbm90aWZpY2F0aW9uIGNvbW1hbmQuICBUaGlzIGNvbW1hbmQgY2FuIGJlCisgICBzZW50IGJ5IHRoZSBOQ1AgaW4gcmVzcG9uc2UgdG8gdGhlICJDTURfUFJPUF9WQUxVRV9JTlNFUlQiIGNvbW1hbmQsCisgICBvciBpdCBjYW4gYmUgc2VudCBieSB0aGUgTkNQIGluIGFuIHVuc29saWNpdGVkIGZhc2hpb24gdG8gbm90aWZ5IHRoZQorICAgaG9zdCBvZiB2YXJpb3VzIHN0YXRlIGNoYW5nZXMgYXN5bmNocm9ub3VzbHkuCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgdmFsdWUgdGhhdCB3YXMgaW5zZXJ0ZWQgaW50byB0aGUgZ2l2ZW4gcHJvcGVydHkuCisKKyAgIElmIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIGJ5ICJQUk9QX0lEIiBjb25zaXN0cworICAgb2YgYSBzaW5nbGUgc3RydWN0dXJlIGVuY2xvc2VkIGJ5IGFuIGFycmF5ICgiQSh0KC4uLikpIiksIHRoZW4gdGhlCisgICBjb250ZW50cyBvZiAiVkFMVUUiIE1VU1QgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhlIHN0cnVjdHVyZQorICAgKCIuLi4iKSByYXRoZXIgdGhhbiB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgd2hvbGUgaXRlbSAoInQoLi4uKSIpLgorICAgU3BlY2lmaWNhbGx5LCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUgTVVTVCBOT1QgYmUgcHJlcGVuZGVkIHRvCisgICAiVkFMVUUiLiAgVGhpcyBoZWxwcyB0byBlbGltaW5hdGUgcmVkdW5kYW50IGRhdGEuCisKKyAgIFRoZSByZXN1bHRpbmcgb3JkZXIgb2YgaXRlbXMgaW4gdGhlIGxpc3QgaXMgZGVmaW5lZCBieSB0aGUgZ2l2ZW4KKyAgIHByb3BlcnR5LgorCisKKworCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDE3XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNC45LiAgQ01EIDg6IChOQ1AtPkhvc3QpIENNRF9QUk9QX1ZBTFVFX1JFTU9WRUQKKworICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisgICAgICB8IE9jdGV0czogfCAgIDEgICAgfCAgICAgICAgICAgMSAgICAgICAgICAgIHwgICAxLTMgICB8ICAgbiAgIHwKKyAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCB8IFBST1BfSUQgfCBWQUxVRSB8CisgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKworICAgUHJvcGVydHkgdmFsdWUgcmVtb3ZhbCBub3RpZmljYXRpb24gY29tbWFuZC4gIFRoaXMgY29tbWFuZCBjYW4gYmUKKyAgIHNlbnQgYnkgdGhlIE5DUCBpbiByZXNwb25zZSB0byB0aGUgIkNNRF9QUk9QX1ZBTFVFX1JFTU9WRSIgY29tbWFuZCwKKyAgIG9yIGl0IGNhbiBiZSBzZW50IGJ5IHRoZSBOQ1AgaW4gYW4gdW5zb2xpY2l0ZWQgZmFzaGlvbiB0byBub3RpZnkgdGhlCisgICBob3N0IG9mIHZhcmlvdXMgc3RhdGUgY2hhbmdlcyBhc3luY2hyb25vdXNseS4KKworICAgTm90ZSB0aGF0IHRoaXMgY29tbWFuZCBvcGVyYXRlcyBfYnkgdmFsdWVfLCBub3QgYnkgaW5kZXghCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS4KKworICAgSWYgdGhlIHR5cGUgc2lnbmF0dXJlIG9mIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkgIlBST1BfSUQiIGNvbnNpc3RzCisgICBvZiBhIHNpbmdsZSBzdHJ1Y3R1cmUgZW5jbG9zZWQgYnkgYW4gYXJyYXkgKCJBKHQoLi4uKSkiKSwgdGhlbiB0aGUKKyAgIGNvbnRlbnRzIG9mICJWQUxVRSIgTVVTVCBjb250YWluIHRoZSBjb250ZW50cyBvZiB0aGUgc3RydWN0dXJlCisgICAoIi4uLiIpIHJhdGhlciB0aGFuIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSB3aG9sZSBpdGVtICgidCguLi4pIikuCisgICBTcGVjaWZpY2FsbHksIHRoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8KKyAgICJWQUxVRSIuICBUaGlzIGhlbHBzIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgZGF0YS4KKworICAgVGhlIHJlc3VsdGluZyBvcmRlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBpcyBkZWZpbmVkIGJ5IHRoZSBnaXZlbgorICAgcHJvcGVydHkuCisKKzQuMTAuICBDTUQgMTg6IChIb3N0LT5OQ1ApIENNRF9QRUVLCisKKyAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgMSAgICAgfCAgICA0ICAgIHwgICAyICAgfAorICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgICAgICB8IEZpZWxkczogfCBIRUFERVIgfCBDTURfUEVFSyB8IEFERFJFU1MgfCBDT1VOVCB8CisgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworCisgICBUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSBOQ1AgdG8gZmV0Y2ggdmFsdWVzIGZyb20gdGhlIFJBTSBvZiB0aGUgTkNQCisgICBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiAgVXBvbiBzdWNjZXNzLCAiQ01EX1BFRUtfUkVUIiBpcyBzZW50IGZyb20KKyAgIHRoZSBOQ1AgdG8gdGhlIGhvc3QuICBVcG9uIGZhaWx1cmUsICJQUk9QX0xBU1RfU1RBVFVTIiBpcyBlbWl0dGVkCisgICB3aXRoIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBpbmRpY2F0aW9uLgorCisgICBEdWUgdG8gdGhlIGxvdy1sZXZlbCBuYXR1cmUgb2YgdGhpcyBjb21tYW5kLCBjZXJ0YWluIGVycm9yIGNvbmRpdGlvbnMKKyAgIG1heSBpbmR1Y2UgdGhlIE5DUCB0byByZXNldC4KKworICAgVGhlIE5DUCBNQVkgcHJldmVudCBjZXJ0YWluIHJlZ2lvbnMgb2YgbWVtb3J5IGZyb20gYmVpbmcgYWNjZXNzZWQuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMThdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuICBTZWUKKyAgIFNlY3Rpb24gMTMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgIFRoaXMgY29tbWFuZCByZXF1aXJlcyB0aGUgY2FwYWJpbGl0eSAiQ0FQX1BFRUtfUE9LRSIgdG8gYmUgcHJlc2VudC4KKworNC4xMS4gIENNRCAxOTogKE5DUC0+SG9zdCkgQ01EX1BFRUtfUkVUCisKKyAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisgICAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgICAxICAgICAgIHwgICAgNCAgICB8ICAgMiAgIHwgICBuICAgfAorICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKKyAgICAgICB8IEZpZWxkczogfCBIRUFERVIgfCBDTURfUEVFS19SRVQgfCBBRERSRVNTIHwgQ09VTlQgfCBCWVRFUyB8CisgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworCisgICBUaGlzIGNvbW1hbmQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIG1lbW9yeSB0aGF0IHdhcyByZXF1ZXN0ZWQgYnkgYQorICAgcHJldmlvdXMgY2FsbCB0byAiQ01EX1BFRUsiLgorCisgICBUaGlzIGNvbW1hbmQgcmVxdWlyZXMgdGhlIGNhcGFiaWxpdHkgIkNBUF9QRUVLX1BPS0UiIHRvIGJlIHByZXNlbnQuCisKKzQuMTIuICBDTUQgMjA6IChIb3N0LT5OQ1ApIENNRF9QT0tFCisKKyAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworICAgICAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgMSAgICAgfCAgICA0ICAgIHwgICAyICAgfCAgIG4gICB8CisgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9QT0tFIHwgQUREUkVTUyB8IENPVU5UIHwgQllURVMgfAorICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisKKyAgIFRoaXMgY29tbWFuZCB3cml0ZXMgdGhlIGJ5dGVzIHRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5IGFkZHJlc3MgZm9yCisgICBkZWJ1Z2dpbmcgcHVycG9zZXMuCisKKyAgIER1ZSB0byB0aGUgbG93LWxldmVsIG5hdHVyZSBvZiB0aGlzIGNvbW1hbmQsIGNlcnRhaW4gZXJyb3IgY29uZGl0aW9ucworICAgbWF5IGluZHVjZSB0aGUgTkNQIHRvIHJlc2V0LgorCisgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuICBTZWUKKyAgIFNlY3Rpb24gMTMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgIFRoaXMgY29tbWFuZCByZXF1aXJlcyB0aGUgY2FwYWJpbGl0eSAiQ0FQX1BFRUtfUE9LRSIgdG8gYmUgcHJlc2VudC4KKworNC4xMy4gIENNRCAyMTogKEhvc3QtPk5DUCkgQ01EX1BST1BfVkFMVUVfTVVMVElfR0VUCisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiQShpKSIKKyAgIG8gIFJlcXVpcmVkIENhcGFiaWxpdHk6ICJDQVBfQ01EX01VTFRJIgorCisgICBGZXRjaCB0aGUgdmFsdWUgb2YgbXVsdGlwbGUgcHJvcGVydGllcyBpbiBvbmUgY29tbWFuZC4gIEFyZ3VtZW50cyBhcmUKKyAgIGFuIGFycmF5IG9mIHByb3BlcnR5IElEcy4gIElmIGFsbCBwcm9wZXJ0aWVzIGFyZSBmZXRjaGVkCisgICBzdWNjZXNzZnVsbHksIGEgIkNNRF9QUk9QX1ZBTFVFU19BUkUiIGNvbW1hbmQgaXMgc2VudCBiYWNrIHRvIHRoZQorICAgaG9zdCBjb250YWluaW5nIHRoZSBwcm9wZXJ0eWlkIGFuZCB2YWx1ZSBvZiBlYWNoIGZldGNoZWQgcHJvcGVydHkuCisgICBUaGUgb3JkZXIgb2YgdGhlIHJlc3VsdHMgaW4gIkNNRF9QUk9QX1ZBTFVFU19BUkUiIG1hdGNoIHRoZSBvcmRlciBvZgorICAgcHJvcGVydGllcyBnaXZlbiBpbiAiQ01EX1BST1BfVkFMVUVfR0VUIi4KKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDE5XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgRXJyb3JzIGZldGNoaW5nIGluZGl2aWR1YWwgcHJvcGVydGllcyBhcmUgcmVmbGVjdGVkIGFzIGluZGljYXRpbmcgYQorICAgY2hhbmdlIHRvICJQUk9QX0xBU1RfU1RBVFVTIiBmb3IgdGhhdCBwcm9wZXJ0eSdzIHBsYWNlLgorCisgICBOb3QgYWxsIHByb3BlcnRpZXMgY2FuIGJlIGZldGNoZWQgdXNpbmcgdGhpcyBtZXRob2QuICBBcyBhIGdlbmVyYWwKKyAgIHJ1bGUgb2YgdGh1bWIsIGFueSBwcm9wZXJ0eSB0aGF0IGJsb2NrcyB3aGVuIGdldHRpbmcgd2lsbCBmYWlsIGZvcgorICAgdGhhdCBpbmRpdmlkdWFsIHByb3BlcnR5IHdpdGggIlNUQVRVU19JTlZBTElEX0NPTU1BTkRfRk9SX1BST1AiLgorCis0LjE0LiAgQ01EIDIyOiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVQKKworICAgbyAgQXJndW1lbnQtRW5jb2Rpbmc6ICJBKGlEKSIKKyAgIG8gIFJlcXVpcmVkIENhcGFiaWxpdHk6ICJDQVBfQ01EX01VTFRJIgorCisgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgICAgICAgMSAgICAgICAgICAgICB8ICAgICAgICAgIG4gICAgICAgICAgfAorICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVQgfCAgICBQcm9wZXJ0eS9WYWx1ZSAgIHwKKyAgIHwgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICBQYWlycyAgICAgICAgfAorICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdpdGggZWFjaCBwcm9wZXJ0eS92YWx1ZSBwYWlyIGJlaW5nOgorCisgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgMiAgICB8ICAgMS0zICAgfCAgICAgbiAgICAgIHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgTEVOR1RIIHwgUFJPUF9JRCB8IFBST1BfVkFMVUUgfAorICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKworICAgVGhpcyBjb21tYW5kIHNldHMgdGhlIHZhbHVlIG9mIHNldmVyYWwgcHJvcGVydGllcyBhdCBvbmNlIGluIHRoZQorICAgZ2l2ZW4gb3JkZXIuICBUaGUgc2V0dGluZyBvZiBwcm9wZXJ0aWVzIHN0b3BzIGF0IHRoZSBmaXJzdCBlcnJvciwKKyAgIGlnbm9yaW5nIGFueSBsYXRlciBwcm9wZXJ0aWVzLgorCisgICBUaGUgcmVzdWx0IG9mIHRoaXMgY29tbWFuZCBpcyBnZW5lcmFsbHkgIkNNRF9QUk9QX1ZBTFVFU19BUkUiIHVubGVzcworICAgKGZvciBleGFtcGxlKSBhIHBhcnNpbmcgZXJyb3IgaGFzIG9jY3VyZWQgKGluIHdoaWNoIGNhc2UKKyAgICJDTURfUFJPUF9WQUxVRV9JUyIgZm9yICJQUk9QX0xBU1RfU1RBVFVTIiB3b3VsZCBiZSB0aGUgcmVzdWx0KS4gIFRoZQorICAgb3JkZXIgb2YgdGhlIHJlc3VsdHMgaW4gIkNNRF9QUk9QX1ZBTFVFU19BUkUiIG1hdGNoIHRoZSBvcmRlciBvZgorICAgcHJvcGVydGllcyBnaXZlbiBpbiAiQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUIi4KKworICAgU2luY2UgdGhlIHByb2Nlc3Npbmcgb2YgcHJvcGVydGllcyB0byBzZXQgc3RvcHMgYXQgdGhlIGZpcnN0IGVycm9yLAorICAgdGhlIHJlc3VsdGluZyAiQ01EX1BST1BfVkFMVUVTX0FSRSIgY2FuIGNvbnRhaW4gZmV3ZXIgaXRlbXMgdGhhbiB0aGUKKyAgIHJlcXVlc3RlZCBudW1iZXIgb2YgcHJvcGVydGllcyB0byBzZXQuCisKKyAgIE5vdCBhbGwgcHJvcGVydGllcyBjYW4gYmUgc2V0IHVzaW5nIHRoaXMgbWV0aG9kLiAgQXMgYSBnZW5lcmFsIHJ1bGUKKyAgIG9mIHRodW1iLCBhbnkgcHJvcGVydHkgdGhhdCBibG9ja3Mgd2hlbiBzZXR0aW5nIHdpbGwgZmFpbCBmb3IgdGhhdAorICAgaW5kaXZpZHVhbCBwcm9wZXJ0eSB3aXRoICJTVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QIi4KKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMjBdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis0LjE1LiAgQ01EIDIzOiAoTkNQLT5Ib3N0KSBDTURfUFJPUF9WQUxVRVNfQVJFCisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiQShpRCkiCisgICBvICBSZXF1aXJlZCBDYXBhYmlsaXR5OiAiQ0FQX0NNRF9NVUxUSSIKKworICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICB8IE9jdGV0czogfCAgIDEgICAgfCAgICAgICAgICAxICAgICAgICAgIHwgICAgICAgICAgbiAgICAgICAgICAgfAorICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICB8IEZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRVNfQVJFIHwgUHJvcGVydHkvVmFsdWUgUGFpcnMgfAorICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBXaXRoIGVhY2ggcHJvcGVydHkvdmFsdWUgcGFpciBiZWluZzoKKworICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgIDIgICAgfCAgIDEtMyAgIHwgICAgIG4gICAgICB8CisgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IExFTkdUSCB8IFBST1BfSUQgfCBQUk9QX1ZBTFVFIHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisKKyAgIFRoaXMgY29tbWFuZCBpcyBlbWl0dGVkIGJ5IHRoZSBOQ1AgYXMgdGhlIHJlc3BvbnNlIHRvIGJvdGggdGhlCisgICAiQ01EX1BST1BfVkFMVUVfTVVMVElfR0VUIiBhbmQgIkNNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVCIgY29tbWFuZHMuCisgICBJdCBpcyByb3VnaGx5IGFuYWxvZ291cyB0byAiQ01EX1BST1BfVkFMVUVfSVMiLCBleGNlcHQgdGhhdCBpdAorICAgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBwcm9wZXJ0eS4KKworICAgVGhpcyBjb21tYW5kIFNIT1VMRCBOT1QgYmUgZW1pdHRlZCBhc3luY2hyb25vdXNseSwgb3IgaW4gcmVzcG9uc2UgdG8KKyAgIGFueSBjb21tYW5kIG90aGVyIHRoYW4gIkNNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVCIgb3IKKyAgICJDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVQiLgorCisgICBUaGUgYXJndW1lbnRzIGFyZSBhIGxpc3Qgb2Ygc3RydWN0dXJlcyBjb250YWluaW5nIHRoZSBlbWl0dGVkCisgICBwcm9wZXJ0eSBhbmQgdGhlIGFzc29jaWF0ZWQgdmFsdWUuICBUaGVzZSBhcmUgcHJlc2VudGVkIGluIHRoZSBzYW1lCisgICBvcmRlciBhcyBnaXZlbiBpbiB0aGUgYXNzb2NpYXRlZCBpbml0aWF0aW5nIGNvbW1hbmQuICBJbiBjYXNlcyB3aGVyZQorICAgZ2V0dGluZyBvciBzZXR0aW5nIGEgc3BlY2lmaWMgcHJvcGVydHkgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsIHRoZQorICAgYXNzb2NpYXRlZCBzbG90IGluIHRoaXMgY29tbWFuZCB3aWxsIGRlc2NyaWJlICJQUk9QX0xBU1RfU1RBVFVTIi4KKworNS4gIFByb3BlcnRpZXMKKworICAgU3BpbmVsIGlzIGxhcmdlbHkgYSBwcm9wZXJ0eS1iYXNlZCBwcm90b2NvbCwgc2ltaWxhciB0bworICAgcmVwcmVzZW50YXRpb25hbCBzdGF0ZSB0cmFuc2ZlciAoUkVTVCksIHdpdGggYSBwcm9wZXJ0eSBkZWZpbmVkIGZvcgorICAgZXZlcnkgYXR0cmlidXRlIHRoYXQgYW4gT1MgbmVlZHMgdG8gY3JlYXRlLCByZWFkLCB1cGRhdGUgb3IgZGVsZXRlIGluCisgICB0aGUgZnVuY3Rpb24gb2YgYW4gSVB2NiBpbnRlcmZhY2UuICBUaGUgaW5zcGlyYXRpb24gb2YgdGhpcyBhcHByb2FjaAorICAgd2FzIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBwZXJpcGhlcmFscy4gIFRoZSBnb2FsIGlzIHRvCisgICBhdm9pZCwgYXMgbXVjaCBhcyBwb3NzaWJsZSwgdGhlIHVzZSBvZiBsYXJnZSBjb21wbGljYXRlZCBzdHJ1Y3R1cmVzCisgICBhbmQvb3IgbWV0aG9kIGFyZ3VtZW50IGxpc3RzLiAgVGhlIHJlYXNvbiBmb3IgYXZvaWRpbmcgdGhlc2UgaXMKKyAgIGJlY2F1c2UgdGhleSBoYXZlIGEgdGVuZGVuY3kgdG8gY2hhbmdlLCBlc3BlY2lhbGx5IGVhcmx5IGluCisgICBkZXZlbG9wbWVudC4gIEFkZGluZyBvciByZW1vdmluZyBhIHByb3BlcnR5IGZyb20gYSBzdHJ1Y3R1cmUgY2FuCisgICByZW5kZXIgdGhlIGVudGlyZSBwcm90b2NvbCBpbmNvbXBhdGlibGUuICBCeSB1c2luZyBwcm9wZXJ0aWVzLCB5b3UKKyAgIHNpbXBseSBleHRlbmQgdGhlIHByb3RvY29sIHdpdGggYW4gYWRkaXRpb25hbCBwcm9wZXJ0eS4KKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMjFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBBbG1vc3QgYWxsIGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgYXJlIGltcGxlbWVudGVkIHVzaW5nCisgICBwcm9wZXJ0aWVzLiAgTW9zdCBuZXcgZmVhdHVyZXMgdGhhdCBhcmUgaW5pdGlhbGx5IHByb3Bvc2VkIGFzCisgICBjb21tYW5kcyBjYW4gYmUgYWRhcHRlZCB0byBiZSBwcm9wZXJ0eS1iYXNlZCBpbnN0ZWFkLiAgTm90YWJsZQorICAgZXhjZXB0aW9ucyBpbmNsdWRlICJIb3N0IEJ1ZmZlciBPZmZsb2FkIiAoU2VjdGlvbiA5KSBhbmQgIk5ldHdvcmsKKyAgIFNhdmUiIChTZWN0aW9uIDgpLgorCisgICBJbiBTcGluZWwsIHByb3BlcnRpZXMgYXJlIGtleWVkIGJ5IGFuIHVuc2lnbmVkIGludGVnZXIgYmV0d2VlbiAwIGFuZAorICAgMiwwOTcsMTUxIChTZWUgU2VjdGlvbiAzLjIpLgorCis1LjEuICBQcm9wZXJ0eSBNZXRob2RzCisKKyAgIFByb3BlcnRpZXMgbWF5IHN1cHBvcnQgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCisgICBvICAiVkFMVUVfR0VUIiAoU2VjdGlvbiA0LjMpCisgICBvICAiVkFMVUVfU0VUIiAoU2VjdGlvbiA0LjQpCisgICBvICAiVkFMVUVfSU5TRVJUIiAoU2VjdGlvbiA0LjUpCisgICBvICAiVkFMVUVfUkVNT1ZFIiAoU2VjdGlvbiA0LjYpCisKKyAgIEFkZGl0aW9uYWxseSwgdGhlIE5DUCBjYW4gc2VuZCB1cGRhdGVzIHRvIHRoZSBob3N0IChlaXRoZXIKKyAgIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkpIHRoYXQgaW5mb3JtIHRoZSBob3N0IGFib3V0IGNoYW5nZXMKKyAgIHRvIHNwZWNpZmljIHByb3BlcnRpZXM6CisKKyAgIG8gICJWQUxVRV9JUyIgKFNlY3Rpb24gNC43KQorICAgbyAgIlZBTFVFX0lOU0VSVEVEIiAoU2VjdGlvbiA0LjgpCisgICBvICAiVkFMVUVfUkVNT1ZFRCIgKFNlY3Rpb24gNC45KQorCis1LjIuICBQcm9wZXJ0eSBUeXBlcworCisgICBDb25jZXB0dWFsbHksIHRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgdHlwZXMgb2YgcHJvcGVydGllczoKKworICAgbyAgU2luZ2xlLXZhbHVlIHByb3BlcnRpZXMKKyAgIG8gIE11bHRpcGxlLXZhbHVlIChBcnJheSkgcHJvcGVydGllcworICAgbyAgU3RyZWFtIHByb3BlcnRpZXMKKworNS4yLjEuICBTaW5nbGUtVmFsdWUgUHJvcGVydGllcworCisgICBTaW5nbGUtdmFsdWUgcHJvcGVydGllcyBhcmUgcHJvcGVydGllcyB0aGF0IGhhdmUgYSBzaW1wbGUKKyAgIHJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIHZhbHVlLiAgRXhhbXBsZXMgd291bGQgYmU6CisKKyAgIG8gIEN1cnJlbnQgcmFkaW8gY2hhbm5lbCAoUmVwcmVzZW50ZWQgYXMgYW4gdW5zaWduZWQgOC1iaXQgaW50ZWdlcikKKyAgIG8gIE5ldHdvcmsgbmFtZSAoUmVwcmVzZW50ZWQgYXMgYSBVVEYtOCBlbmNvZGVkIHN0cmluZykKKyAgIG8gIDgwMi4xNS40IFBBTiBJRCAoUmVwcmVzZW50ZWQgYXMgYW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIpCisKKyAgIFRoZSB2YWxpZCBvcGVyYXRpb25zIG9uIHRoZXNlIHNvcnRzIG9mIHByb3BlcnRpZXMgYXJlICJHRVQiIGFuZAorICAgIlNFVCIuCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAyMl0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzUuMi4yLiAgTXVsdGlwbGUtVmFsdWUgUHJvcGVydGllcworCisgICBNdWx0aXBsZS1WYWx1ZSBQcm9wZXJ0aWVzIGhhdmUgbW9yZSB0aGFuIG9uZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGgKKyAgIHRoZW0uICBFeGFtcGxlcyB3b3VsZCBiZToKKworICAgbyAgTGlzdCBvZiBjaGFubmVscyBzdXBwb3J0ZWQgYnkgdGhlIHJhZGlvIGhhcmR3YXJlLgorICAgbyAgTGlzdCBvZiBJUHY2IGFkZHJlc3NlcyBhc3NpZ25lZCB0byB0aGUgaW50ZXJmYWNlLgorICAgbyAgTGlzdCBvZiBjYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBOQ1AuCisKKyAgIFRoZSB2YWxpZCBvcGVyYXRpb25zIG9uIHRoZXNlIHNvcnRzIG9mIHByb3BlcnRpZXMgYXJlICJWQUxVRV9HRVQiLAorICAgIlZBTFVFX1NFVCIsICJWQUxVRV9JTlNFUlQiLCBhbmQgIlZBTFVFX1JFTU9WRSIuCisKKyAgIFdoZW4gdGhlIHZhbHVlIGlzIGZldGNoZWQgdXNpbmcgIlZBTFVFX0dFVCIsIHRoZSByZXR1cm5lZCB2YWx1ZSBpcworICAgdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIHZhbHVlcyBpbiB0aGUgbGlzdC4gIElmCisgICB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBmb3IgYW4gaW5kaXZpZHVhbCBpdGVtIGluIHRoZSBsaXN0IGlzIG5vdAorICAgZGVmaW5lZCBieSB0aGUgdHlwZSB0aGVuIGVhY2ggaXRlbSByZXR1cm5lZCBpbiB0aGUgbGlzdCBpcyBwcmVwZW5kZWQKKyAgIHdpdGggYSBsZW5ndGggKFNlZSBTZWN0aW9uIDMuNSkuICBUaGUgb3JkZXIgb2YgdGhlIHJldHVybmVkIGl0ZW1zLAorICAgdW5sZXNzIGV4cGxpY2l0bHkgZGVmaW5lZCBmb3IgdGhhdCBzcGVjaWZpYyBwcm9wZXJ0eSwgaXMgdW5kZWZpbmVkLgorCisgICAiVkFMVUVfU0VUIiBwcm92aWRlcyBhIHdheSB0byBjb21wbGV0ZWx5IHJlcGxhY2UgYWxsIHByZXZpb3VzIHZhbHVlcy4KKyAgIENhbGxpbmcgIlZBTFVFX1NFVCIgd2l0aCBhbiBlbXB0eSB2YWx1ZSBlZmZlY3RpdmVseSBpbnN0cnVjdHMgdGhlIE5DUAorICAgdG8gY2xlYXIgdGhlIHZhbHVlIG9mIHRoYXQgcHJvcGVydHkuCisKKyAgICJWQUxVRV9JTlNFUlQiIGFuZCAiVkFMVUVfUkVNT1ZFIiBwcm92aWRlIG1lY2hhbmlzbXMgZm9yIHRoZQorICAgaW5zZXJ0aW9uIG9yIHJlbW92YWwgb2YgaW5kaXZpZHVhbCBpdGVtcyBfYnkgdmFsdWVfLiBUaGUgcGF5bG9hZCBmb3IKKyAgIHRoZXNlIGNvbW1hbmRzIGlzIGEgcGxhaW4gc2luZ2xlIHZhbHVlLgorCis1LjIuMy4gIFN0cmVhbSBQcm9wZXJ0aWVzCisKKyAgIFN0cmVhbSBwcm9wZXJ0aWVzIGFyZSBzcGVjaWFsIHByb3BlcnRpZXMgcmVwcmVzZW50aW5nIHN0cmVhbXMgb2YKKyAgIGRhdGEuICBFeGFtcGxlcyB3b3VsZCBiZToKKworICAgbyAgTmV0d29yayBwYWNrZXQgc3RyZWFtIChTZWN0aW9uIDUuNi4zKQorICAgbyAgUmF3IHBhY2tldCBzdHJlYW0gKFNlY3Rpb24gNS42LjIpCisgICBvICBEZWJ1ZyBtZXNzYWdlIHN0cmVhbSAoU2VjdGlvbiA1LjYuMSkKKyAgIG8gIE5ldHdvcmsgQmVhY29uIHN0cmVhbSAoU2VjdGlvbiA1LjguNCkKKworICAgQWxsIHN1Y2ggcHJvcGVydGllcyBlbWl0IGNoYW5nZXMgYXN5bmNocm9ub3VzbHkgdXNpbmcgdGhlICJWQUxVRV9JUyIKKyAgIGNvbW1hbmQsIHNlbnQgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0LiAgRm9yIGV4YW1wbGUsIGFzIElQdjYgdHJhZmZpYworICAgaXMgcmVjZWl2ZWQgYnkgdGhlIE5DUCwgdGhlIElQdjYgcGFja2V0cyBhcmUgc2VudCB0byB0aGUgaG9zdCBieSB3YXkKKyAgIG9mIGFzeW5jaHJvbm91cyAiVkFMVUVfSVMiIG5vdGlmaWNhdGlvbnMuCisKKyAgIFNvbWUgb2YgdGhlc2UgcHJvcGVydGllcyBhbHNvIHN1cHBvcnQgdGhlIGhvc3Qgc2VuZCBkYXRhIGJhY2sgdG8gdGhlCisgICBOQ1AuICBGb3IgZXhhbXBsZSwgdGhpcyBpcyBob3cgdGhlIGhvc3Qgc2VuZHMgSVB2NiB0cmFmZmljIHRvIHRoZQorICAgTkNQLgorCisgICBUaGVzZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGdlbmVyYWxseSBkbyBub3Qgc3VwcG9ydCAiVkFMVUVfR0VUIiwgYXMgaXQKKyAgIGlzIG1lYW5pbmdsZXNzLgorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMjNdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis1LjMuICBQcm9wZXJ0eSBOdW1iZXJpbmcKKworICAgV2hpbGUgdGhlIG1ham9yaXR5IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YKKyAgIG5ldHdvcmsgY29ubmVjdGl2aXR5IGFyZSBuZXR3b3JrIHByb3RvY29sIHNwZWNpZmljLCB0aGVyZSBhcmUgc2V2ZXJhbAorICAgcHJvcGVydGllcyB0aGF0IGFyZSByZXF1aXJlZCBpbiBhbGwgaW1wbGVtZW50YXRpb25zLgorCisgICBGdXR1cmUgcHJvcGVydHkgYWxsb2NhdGlvbnMgU0hBTEwgYmUgbWFkZSBmcm9tIHRoZSBmb2xsb3dpbmcKKyAgIGFsbG9jYXRpb24gcGxhbjoKKworICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IFByb3BlcnR5IElEIFJhbmdlICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgMCAtIDEyNyAgICAgICAgICAgICAgIHwgUmVzZXJ2ZWQgZm9yIGZyZXF1ZW50bHktdXNlZCBwcm9wZXJ0aWVzIHwKKyAgICB8IDEyOCAtIDE1LDM1OSAgICAgICAgICB8IFVuYWxsb2NhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgfCAxNSwzNjAgLSAxNiwzODMgICAgICAgfCBWZW5kb3Itc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwgMTYsMzg0IC0gMSw5OTksOTk5ICAgIHwgVW5hbGxvY2F0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICB8IDIsMDAwLDAwMCAtIDIsMDk3LDE1MSB8IEV4cGVyaW1lbnRhbCB1c2Ugb25seSAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBGb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGRhdGEgZm9ybWF0IGVuY29kaW5nIHNob3J0aGFuZCB1c2VkCisgICB0aHJvdWdob3V0IHRoaXMgZG9jdW1lbnQsIHNlZSBTZWN0aW9uIDMuCisKKzUuNC4gIFByb3BlcnR5IFNlY3Rpb25zCisKKyAgIFRoZSBjdXJyZW50bHkgYXNzaWduZWQgcHJvcGVydGllcyBhcmUgYnJva2VuIHVwIGludG8gc2V2ZXJhbAorICAgc2VjdGlvbnMsIGVhY2ggd2l0aCByZXNlcnZlZCByYW5nZXMgb2YgcHJvcGVydHkgaWRlbnRpZmllcnMuICBUaGVzZQorICAgcmFuZ2VzIGFyZToKKworICAgICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICBOYW1lICB8ICAgICAgUmFuZ2UgKEluY2x1c2l2ZSkgICAgICAgfCAgICBEb2N1bWVudGF0aW9uICAgIHwKKyAgICAgICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgQ29yZSAgfCAweDAwIC0gMHgxRiwgMHgxMDAwIC0gMHgxMUZGIHwgICAgIFNlY3Rpb24gNS41ICAgICB8CisgICAgICB8ICBQSFkgICB8IDB4MjAgLSAweDJGLCAweDEyMDAgLSAweDEyRkYgfCAgICAgU2VjdGlvbiA1LjcgICAgIHwKKyAgICAgIHwgIE1BQyAgIHwgMHgzMCAtIDB4M0YsIDB4MTMwMCAtIDB4MTNGRiB8ICAgICBTZWN0aW9uIDUuOCAgICAgfAorICAgICAgfCAgTkVUICAgfCAweDQwIC0gMHg0RiwgMHgxNDAwIC0gMHgxNEZGIHwgICAgIFNlY3Rpb24gNS45ICAgICB8CisgICAgICB8ICBUZWNoICB8IDB4NTAgLSAweDVGLCAweDE1MDAgLSAweDE1RkYgfCBUZWNobm9sb2d5LXNwZWNpZmljIHwKKyAgICAgIHwgIElQdjYgIHwgMHg2MCAtIDB4NkYsIDB4MTYwMCAtIDB4MTZGRiB8ICAgICBTZWN0aW9uIDUuMTAgICAgfAorICAgICAgfCBTdHJlYW0gfCAweDcwIC0gMHg3RiwgMHgxNzAwIC0gMHgxN0ZGIHwgICAgIFNlY3Rpb24gNS41ICAgICB8CisgICAgICB8IERlYnVnICB8ICAgICAgIDB4NDAwMCAtIDB4NDQwMCAgICAgICAgfCAgICAgU2VjdGlvbiA1LjExICAgIHwKKyAgICAgICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBOb3RlIHRoYXQgc29tZSBvZiB0aGUgcHJvcGVydHkgc2VjdGlvbnMgaGF2ZSB0d28gcmVzZXJ2ZWQgcmFuZ2VzOiBhCisgICBwcmltYXJ5IHJhbmdlICh3aGljaCBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGJ5dGUpIGFuZCBhbiBleHRlbmRlZAorICAgcmFuZ2UgKHdoaWNoIGlzIGVuY29kZWQgYXMgdHdvIGJ5dGVzKS4gIHByb3BlcnRpZXMgd2hpY2ggYXJlIHVzZWQKKyAgIG1vcmUgZnJlcXVlbnRseSBhcmUgZ2VuZXJhbGx5IGFsbG9jYXRlZCBmcm9tIHRoZSBmb3JtZXIgcmFuZ2UuCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAyNF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzUuNS4gIENvcmUgUHJvcGVydGllcworCis1LjUuMS4gIFBST1AgMDogUFJPUF9MQVNUX1NUQVRVUworCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIEVuY29kaW5nOiAiaSIKKworICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgICAgMS0zICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IExBU1RfU1RBVFVTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisKKyAgIERlc2NyaWJlcyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IG9wZXJhdGlvbi4gIEVuY29kZWQgYXMgYSBwYWNrZWQKKyAgIHVuc2lnbmVkIGludGVnZXIuCisKKyAgIFRoaXMgcHJvcGVydHkgaXMgZW1pdHRlZCBvZnRlbiB0byBpbmRpY2F0ZSB0aGUgcmVzdWx0IHN0YXR1cyBvZgorICAgcHJldHR5IG11Y2ggYW55IEhvc3QtdG8tTkNQIG9wZXJhdGlvbi4KKworICAgSXQgaXMgZW1pdHRlZCBhdXRvbWF0aWNhbGx5IGF0IE5DUCBzdGFydHVwIHdpdGggYSB2YWx1ZSBpbmRpY2F0aW5nCisgICB0aGUgcmVzZXQgcmVhc29uLgorCisgICBTZWUgU2VjdGlvbiA2IGZvciB0aGUgY29tcGxldGUgbGlzdCBvZiBzdGF0dXMgY29kZXMuCisKKzUuNS4yLiAgUFJPUCAxOiBQUk9QX1BST1RPQ09MX1ZFUlNJT04KKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBFbmNvZGluZzogImlpIgorCisgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgICAgMS0zICAgICAgfCAgICAgIDEtMyAgICAgIHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgTUFKT1JfVkVSU0lPTiB8IE1JTk9SX1ZFUlNJT04gfAorICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKworICAgRGVzY3JpYmVzIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGluZm9ybWF0aW9uLiAgVGhpcyBwcm9wZXJ0eSBjb250YWlucworICAgZm91ciBmaWVsZHMsIGVhY2ggZW5jb2RlZCBhcyBhIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyOgorCisgICBvICBNYWpvciBWZXJzaW9uIE51bWJlcgorICAgbyAgTWlub3IgVmVyc2lvbiBOdW1iZXIKKworICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgbWFqb3IgdmVyc2lvbiA0LCBtaW5vciB2ZXJzaW9uIDMgb2YgdGhpcworICAgcHJvdG9jb2wuCisKKyAgIFRoZSBob3N0IE1VU1Qgb25seSB1c2UgdGhpcyBwcm9wZXJ0eSBmcm9tIE5MSSAwLiAgQmVoYXZpb3Igd2hlbiB1c2VkCisgICBmcm9tIG90aGVyIE5MSXMgaXMgdW5kZWZpbmVkLgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDI1XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNS41LjIuMS4gIE1ham9yIFZlcnNpb24gTnVtYmVyCisKKyAgIFRoZSBtYWpvciB2ZXJzaW9uIG51bWJlciBpcyB1c2VkIHRvIGlkZW50aWZ5IGxhcmdlIGFuZCBpbmNvbXBhdGlibGUKKyAgIGRpZmZlcmVuY2VzIGJldHdlZW4gcHJvdG9jb2wgdmVyc2lvbnMuCisKKyAgIFRoZSBob3N0IE1VU1QgZW50ZXIgYSBGQVVMVCBzdGF0ZSBpZiBpdCBkb2VzIG5vdCBleHBsaWNpdGx5IHN1cHBvcnQKKyAgIHRoZSBnaXZlbiBtYWpvciB2ZXJzaW9uIG51bWJlci4KKworNS41LjIuMi4gIE1pbm9yIFZlcnNpb24gTnVtYmVyCisKKyAgIFRoZSBtaW5vciB2ZXJzaW9uIG51bWJlciBpcyB1c2VkIHRvIGlkZW50aWZ5IHNtYWxsIGJ1dCBvdGhlcndpc2UKKyAgIGNvbXBhdGlibGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBwcm90b2NvbCB2ZXJzaW9ucy4gIEEgbWlzbWF0Y2ggYmV0d2VlbgorICAgdGhlIGFkdmVydGlzZWQgbWlub3IgdmVyc2lvbiBudW1iZXIgYW5kIHRoZSBtaW5vciB2ZXJzaW9uIHRoYXQgaXMKKyAgIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBTSE9VTEQgTk9UIGJlIGZhdGFsIHRvIHRoZSBvcGVyYXRpb24gb2YgdGhlCisgICBob3N0LgorCis1LjUuMy4gIFBST1AgMjogUFJPUF9OQ1BfVkVSU0lPTgorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIlUiCisKKyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAgICBuICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCBOQ1BfVkVTSU9OX1NUUklORyB8CisgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBDb250YWlucyBhIHN0cmluZyB3aGljaCBkZXNjcmliZXMgdGhlIGZpcm13YXJlIGN1cnJlbnRseSBydW5uaW5nIG9uCisgICB0aGUgTkNQLiAgRW5jb2RlZCBhcyBhIHplcm8tdGVybWluYXRlZCBVVEYtOCBzdHJpbmcuCisKKyAgIFRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBub3Qgc3RyaWN0bHkgZGVmaW5lZCwgYnV0IGl0IGlzIGludGVuZGVkCisgICB0byBwcmVzZW50IHNpbWlsYXJseSB0byB0aGUgIlVzZXItQWdlbnQiIHN0cmluZyBmcm9tIEhUVFAuICBUaGUKKyAgIFJFQ09NTUVOREVEIGZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGFzIGZvbGxvd3M6CisKKyBTVEFDSy1OQU1FL1NUQUNLLVZFUlNJT05bQlVJTERfSU5GT11bOyBPVEhFUl9JTkZPXTsgQlVJTERfREFURV9BTkRfVElNRQorCisgICBFeGFtcGxlczoKKworICAgbyAgIk9wZW5UaHJlYWQvMS4wZDI2LTI1LWdiNjg0YzdmOyBERUJVRzsgTWF5IDkgMjAxNiAxODoyMjowNCIKKyAgIG8gICJDb25uZWN0SVAvMi4wYjEyNSBzMSBBTFBIQTsgU2VwdCAyNCAyMDE1IDIwOjQ5OjE5IgorCisgICBUaGUgaG9zdCBNVVNUIG9ubHkgdXNlIHRoaXMgcHJvcGVydHkgZnJvbSBOTEkgMC4gIEJlaGF2aW9yIHdoZW4gdXNlZAorICAgZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4KKworCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAyNl0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzUuNS40LiAgUFJPUCAzOiBQUk9QX0lOVEVSRkFDRV9UWVBFCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgRW5jb2Rpbmc6ICJpIgorCisgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAxLTMgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IElOVEVSRkFDRV9UWVBFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworCisgICBUaGlzIGludGVnZXIgaWRlbnRpZmllcyB3aGF0IHRoZSBuZXR3b3JrIHByb3RvY29sIGZvciB0aGlzIE5DUC4KKyAgIEN1cnJlbnRseSBkZWZpbmVkIHZhbHVlcyBhcmU6CisKKyAgIG8gIDA6IEJvb3Rsb2FkZXIKKyAgIG8gIDI6IFppZ0JlZSBJUChUTSkKKyAgIG8gIDM6IFRocmVhZChSKQorCisgICBUaGUgaG9zdCBNVVNUIGVudGVyIGEgRkFVTFQgc3RhdGUgaWYgaXQgZG9lcyBub3QgcmVjb2duaXplIHRoZQorICAgcHJvdG9jb2wgZ2l2ZW4gYnkgdGhlIE5DUC4KKworNS41LjUuICBQUk9QIDQ6IFBST1BfSU5URVJGQUNFX1ZFTkRPUl9JRAorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIEVuY29kaW5nOiAiaSIKKworICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgICAxLTMgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCBWRU5ET1JfSUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworCisgICBWZW5kb3IgaWRlbnRpZmllci4KKworNS41LjYuICBQUk9QIDU6IFBST1BfQ0FQUworCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEoaSkiCisKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tKworICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgIDEtMyAgfCAgMS0zICB8IC4uLiB8CisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IENBUF8xIHwgQ0FQXzIgfCAuLi4gfAorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0rCisKKyAgIERlc2NyaWJlcyB0aGUgc3VwcG9ydGVkIGNhcGFiaWxpdGllcyBvZiB0aGlzIE5DUC4gIEVuY29kZWQgYXMgYSBsaXN0CisgICBvZiBwYWNrZWQgdW5zaWduZWQgaW50ZWdlcnMuCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDI3XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgQSBjYXBhYmlsaXR5IGlzIGRlZmluZWQgYXMgYSAyMS1iaXQgaW50ZWdlciB0aGF0IGRlc2NyaWJlcyBhIHN1YnNldAorICAgb2YgZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgdGhlIE5DUC4KKworICAgQ3VycmVudGx5IGRlZmluZWQgdmFsdWVzIGFyZToKKworICAgbyAgMTogIkNBUF9MT0NLIgorICAgbyAgMjogIkNBUF9ORVRfU0FWRSIKKyAgIG8gIDM6ICJDQVBfSEJPIjogSG9zdCBCdWZmZXIgT2ZmbG9hZC4gIFNlZSBTZWN0aW9uIDkuCisgICBvICA0OiAiQ0FQX1BPV0VSX1NBVkUiCisgICBvICA1OiAiQ0FQX0NPVU5URVJTIgorICAgbyAgNjogIkNBUF9KQU1fREVURUNUIjogSmFtbWluZyBkZXRlY3Rpb24uICBTZWUgU2VjdGlvbiAxMAorICAgbyAgNzogIkNBUF9QRUVLX1BPS0UiOiBQRUVLL1BPS0UgZGVidWdnaW5nIGNvbW1hbmRzLgorICAgbyAgODogIkNBUF9XUklUQUJMRV9SQVdfU1RSRUFNIjogIlBST1BfU1RSRUFNX1JBVyIgaXMgd3JpdGFibGUuCisgICBvICA5OiAiQ0FQX0dQSU8iOiBTdXBwb3J0IGZvciBHUElPIGFjY2Vzcy4gIFNlZSBTZWN0aW9uIDExLgorICAgbyAgMTA6ICJDQVBfVFJORyI6IFN1cHBvcnQgZm9yIHRydWUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLiAgU2VlCisgICAgICBTZWN0aW9uIDEyLgorICAgbyAgMTE6ICJDQVBfQ01EX01VTFRJIjogU3VwcG9ydCBmb3IgIkNNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVCIKKyAgICAgIChTZWN0aW9uIDQuMTMpLCAiQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUIiAoU2VjdGlvbiA0LjE0LCBhbmQKKyAgICAgICJDTURfUFJPUF9WQUxVRVNfQVJFIiAoU2VjdGlvbiA0LjE1KS4KKyAgIG8gIDEyOiAiQ0FQX1VOU09MX1VQREFURV9GSUxURVIiOiBTdXBwb3J0IGZvcgorICAgICAgIlBST1BfVU5TT0xfVVBEQVRFX0ZJTFRFUiIgKFNlY3Rpb24gNS41LjEyKSBhbmQKKyAgICAgICJQUk9QX1VOU09MX1VQREFURV9MSVNUIiAoU2VjdGlvbiA1LjUuMTMpLgorICAgbyAgMTY6ICJDQVBfODAyXzE1XzRfMjAwMyIKKyAgIG8gIDE3OiAiQ0FQXzgwMl8xNV80XzIwMDYiCisgICBvICAxODogIkNBUF84MDJfMTVfNF8yMDExIgorICAgbyAgMjE6ICJDQVBfODAyXzE1XzRfUElCIgorICAgbyAgMjQ6ICJDQVBfODAyXzE1XzRfMjQ1ME1IWl9PUVBTSyIKKyAgIG8gIDI1OiAiQ0FQXzgwMl8xNV80XzkxNU1IWl9PUVBTSyIKKyAgIG8gIDI2OiAiQ0FQXzgwMl8xNV80Xzg2OE1IWl9PUVBTSyIKKyAgIG8gIDI3OiAiQ0FQXzgwMl8xNV80XzkxNU1IWl9CUFNLIgorICAgbyAgMjg6ICJDQVBfODAyXzE1XzRfODY4TUhaX0JQU0siCisgICBvICAyOTogIkNBUF84MDJfMTVfNF85MTVNSFpfQVNLIgorICAgbyAgMzA6ICJDQVBfODAyXzE1XzRfODY4TUhaX0FTSyIKKyAgIG8gIDQ4OiAiQ0FQX1JPTEVfUk9VVEVSIgorICAgbyAgNDk6ICJDQVBfUk9MRV9TTEVFUFkiCisgICBvICA1MjogIkNBUF9ORVRfVEhSRUFEXzFfMCIKKyAgIG8gIDUxMjogIkNBUF9NQUNfV0hJVEVMSVNUIgorICAgbyAgNTEzOiAiQ0FQX01BQ19SQVciCisgICBvICA1MTQ6ICJDQVBfT09CX1NURUVSSU5HX0RBVEEiCisgICBvICAxMDI0OiAiQ0FQX1RIUkVBRF9DT01NSVNTSU9ORVIiCisgICBvICAxMDI1OiAiQ0FQX1RIUkVBRF9UTUZfUFJPWFkiCisKKyAgIEFkZGl0aW9uYWxseSwgZnV0dXJlIGNhcGFiaWxpdHkgYWxsb2NhdGlvbnMgU0hBTEwgYmUgbWFkZSBmcm9tIHRoZQorICAgZm9sbG93aW5nIGFsbG9jYXRpb24gcGxhbjoKKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMjhdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgfCAgICBDYXBhYmlsaXR5IFJhbmdlICAgfCAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgfAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgIHwgICAgICAgIDAgLSAxMjcgICAgICAgIHwgUmVzZXJ2ZWQgZm9yIGNvcmUgY2FwYWJpbGl0aWVzIHwKKyAgICAgICAgfCAgICAgIDEyOCAtIDE1LDM1OSAgICAgfCAgICAgICAgIF9VTkFMTE9DQVRFRF8gICAgICAgICAgfAorICAgICAgICB8ICAgIDE1LDM2MCAtIDE2LDM4MyAgICB8ICAgICAgICBWZW5kb3Itc3BlY2lmaWMgICAgICAgICB8CisgICAgICAgIHwgICAxNiwzODQgLSAxLDk5OSw5OTkgIHwgICAgICAgICBfVU5BTExPQ0FURURfICAgICAgICAgIHwKKyAgICAgICAgfCAyLDAwMCwwMDAgLSAyLDA5NywxNTEgfCAgICAgRXhwZXJpbWVudGFsIHVzZSBvbmx5ICAgICAgfAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKzUuNS43LiAgUFJPUCA2OiBQUk9QX0lOVEVSRkFDRV9DT1VOVAorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisKKyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAgICAxICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCAiSU5URVJGQUNFX0NPVU5UIiB8CisgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBEZXNjcmliZXMgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IGludGVyZmFjZXMgc3VwcG9ydGVkIGJ5IHRoaXMgTkNQLgorICAgU2luY2UgdGhlIGNvbmN1cnJlbnQgaW50ZXJmYWNlIG1lY2hhbmlzbSBpcyBzdGlsbCBUQkQsIHRoaXMgdmFsdWUKKyAgIE1VU1QgYWx3YXlzIGJlIG9uZS4KKworICAgVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDgtYml0IGludGVnZXIuCisKKyAgIFRoZSBob3N0IE1VU1Qgb25seSB1c2UgdGhpcyBwcm9wZXJ0eSBmcm9tIE5MSSAwLiAgQmVoYXZpb3Igd2hlbiB1c2VkCisgICBmcm9tIG90aGVyIE5MSXMgaXMgdW5kZWZpbmVkLgorCis1LjUuOC4gIFBST1AgNzogUFJPUF9QT1dFUl9TVEFURQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgICAgMSAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgUE9XRVJfU1RBVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSsKKworICAgRGVzY3JpYmVzIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIHRoZSBOQ1AuICBCeSB3cml0aW5nIHRvIHRoaXMKKyAgIHByb3BlcnR5IHlvdSBjYW4gbWFuYWdlIHRoZSBsb3dlciBzdGF0ZSBvZiB0aGUgTkNQLiAgRW51bWVyYXRpb24gaXMKKyAgIGVuY29kZWQgYXMgYSBzaW5nbGUgdW5zaWduZWQgYnl0ZS4KKworICAgRGVmaW5lZCB2YWx1ZXMgYXJlOgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDI5XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgMDogIlBPV0VSX1NUQVRFX09GRkxJTkUiOiBOQ1AgaXMgcGh5c2ljYWxseSBwb3dlcmVkIG9mZi4KKyAgICAgIChFbnVtZXJhdGVkIGZvciBjb21wbGV0ZW5lc3Mgc2FrZSwgbm90IGV4cGVjdGVkIG9uIHRoZSB3aXJlKQorICAgbyAgMTogIlBPV0VSX1NUQVRFX0RFRVBfU0xFRVAiOiBBbG1vc3QgZXZlcnl0aGluZyBvbiB0aGUgTkNQIGlzIHNodXQKKyAgICAgIGRvd24sIGJ1dCBjYW4gc3RpbGwgYmUgcmVzdW1lZCB2aWEgYSBjb21tYW5kIG9yIGludGVycnVwdC4KKyAgIG8gIDI6ICJQT1dFUl9TVEFURV9TVEFOREJZIjogTkNQIGlzIGluIHRoZSBsb3dlc3QgcG93ZXIgc3RhdGUgdGhhdAorICAgICAgY2FuIHN0aWxsIGJlIGF3b2tlbiBieSBhbiBldmVudCBmcm9tIHRoZSByYWRpbyAoZS5nLiB3YWl0aW5nIGZvcgorICAgICAgYWxhcm0pCisgICBvICAzOiAiUE9XRVJfU1RBVEVfTE9XX1BPV0VSIjogTkNQIGlzIHJlc3BvbnNpdmUgKGFuZCBwb3NzaWJseQorICAgICAgY29ubmVjdGVkKSwgYnV0IHVzaW5nIGxlc3MgcG93ZXIuIChlLmcuICAiU2xlZXB5IiBjaGlsZCBub2RlKQorICAgbyAgNDogIlBPV0VSX1NUQVRFX09OTElORSI6IE5DUCBpcyBmdWxseSBwb3dlcmVkLiAoZS5nLiAgIlBhcmVudCIKKyAgICAgIG5vZGUpCisKKyAgIFtDUkVGMl0KKworNS41LjkuICBQUk9QIDg6IFBST1BfSFdBRERSCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seSoKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkUiCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgIDggICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IEhXQUREUiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKworCisgICBUaGUgc3RhdGljIEVVSTY0IGFkZHJlc3Mgb2YgdGhlIGRldmljZSwgdXNlZCBhcyBhIHNlcmlhbCBudW1iZXIuCisgICBUaGlzIHZhbHVlIGlzIHJlYWQtb25seSwgYnV0IG1heSBiZSB3cml0YWJsZSB1bmRlciBjZXJ0YWluIHZlbmRvci0KKyAgIGRlZmluZWQgY2lyY3Vtc3RhbmNlcy4KKworNS41LjEwLiAgUFJPUCA5OiBQUk9QX0xPQ0sKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAxICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IExPQ0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tKworCisgICBQcm9wZXJ0eSBsb2NrLiAgVXNlZCBmb3IgZ3JvdXBpbmcgY2hhbmdlcyB0byBzZXZlcmFsIHByb3BlcnRpZXMgdG8KKyAgIHRha2UgZWZmZWN0IGF0IG9uY2UsIG9yIHRvIHRlbXBvcmFyaWx5IHByZXZlbnQgdGhlIGF1dG9tYXRpYyB1cGRhdGluZworICAgb2YgcHJvcGVydHkgdmFsdWVzLiAgV2hlbiB0aGlzIHByb3BlcnR5IGlzIHNldCwgdGhlIGV4ZWN1dGlvbiBvZiB0aGUKKyAgIE5DUCBpcyBlZmZlY3RpdmVseSBmcm96ZW4gdW50aWwgaXQgaXMgY2xlYXJlZC4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHN1cHBvcnRlZCBpZiB0aGUgIkNBUF9MT0NLIiBjYXBhYmlsaXR5IGlzCisgICBwcmVzZW50LgorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAzMF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFVubGlrZSBtb3N0IG90aGVyIHByb3BlcnRpZXMsIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHdoZW4gdGhlCisgICB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaXMgYWxyZWFkeSB0cnVlIE1VU1QgZmFpbCB3aXRoIGEgbGFzdCBzdGF0dXMgb2YKKyAgICJTVEFUVVNfQUxSRUFEWSIuCisKKzUuNS4xMS4gIFBST1AgMTA6IFBST1BfSE9TVF9QT1dFUl9TVEFURQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorICAgbyAgRGVmYXVsdCB2YWx1ZTogNAorCisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAgICAxICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCAiSE9TVF9QT1dFUl9TVEFURSIgfAorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgRGVzY3JpYmVzIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIHRoZSBfaG9zdF8uIFRoaXMgcHJvcGVydHkgaXMKKyAgIHVzZWQgYnkgdGhlIGhvc3QgdG8gaW5mb3JtIHRoZSBOQ1Agd2hlbiBpdCBoYXMgY2hhbmdlZCBwb3dlciBzdGF0ZXMuCisgICBUaGUgTkNQIGNhbiB0aGVuIHVzZSB0aGlzIHN0YXRlIHRvIGRldGVybWluZSB3aGljaCBwcm9wZXJ0aWVzIG5lZWQKKyAgIGFzeW5jaHJvbm91cyB1cGRhdGVzLiAgRW51bWVyYXRpb24gaXMgZW5jb2RlZCBhcyBhIHNpbmdsZSB1bnNpZ25lZAorICAgYnl0ZS4gIFRoZXNlIHN0YXRlcyBhcmUgZGVmaW5lZCBpbiBzaW1pbGFyIHRlcm1zIHRvCisgICAiUFJPUF9QT1dFUl9TVEFURSIgKFNlY3Rpb24gNS41LjgpLgorCisgICBEZWZpbmVkIHZhbHVlcyBhcmU6CisKKyAgIG8gIDA6ICJIT1NUX1BPV0VSX1NUQVRFX09GRkxJTkUiOiBIb3N0IGlzIHBoeXNpY2FsbHkgcG93ZXJlZCBvZmYgYW5kCisgICAgICBjYW5ub3QgYmUgd29rZW4gYnkgdGhlIE5DUC4gIEFsbCBhc3luY2hyb25vdXMgY29tbWFuZHMgYXJlCisgICAgICBzcXVlbGNoZWQuCisgICBvICAxOiAiSE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQIjogVGhlIGhvc3QgaXMgaW4gYSBsb3cgcG93ZXIgc3RhdGUKKyAgICAgIHdoZXJlIGl0IGNhbiBiZSB3b2tlbiBieSB0aGUgTkNQIGJ1dCB3aWxsIHBvdGVudGlhbGx5IHJlcXVpcmUgbW9yZQorICAgICAgdGhhbiB0d28gc2Vjb25kcyB0byBiZWNvbWUgZnVsbHkgcmVzcG9uc2l2ZS4gIFRoZSBOQ1AgTVVTVCBhdm9pZAorICAgICAgc2VuZGluZyB1bm5lY2Vzc2FyeSBwcm9wZXJ0eSB1cGRhdGVzLCBzdWNoIGFzIGNoaWxkIHRhYmxlIHVwZGF0ZXMKKyAgICAgIG9yIG5vbi1jcml0aWNhbCBtZXNzYWdlcyBvbiB0aGUgZGVidWcgc3RyZWFtLiAgSWYgdGhlIE5DUCBuZWVkcyB0bworICAgICAgd2FrZSB0aGUgaG9zdCBmb3IgdHJhZmZpYywgdGhlIE5DUCBNVVNUIGZpcnN0IHRha2UgYWN0aW9uIHRvIHdha2UKKyAgICAgIHRoZSBob3N0LiAgT25jZSB0aGUgTkNQIHNpZ25hbHMgdG8gdGhlIGhvc3QgdGhhdCBpdCBzaG91bGQgd2FrZQorICAgICAgdXAsIHRoZSBOQ1AgTVVTVCB3YWl0IGZvciBzb21lIGFjdGl2aXR5IGZyb20gdGhlIGhvc3QgKGluZGljYXRpbmcKKyAgICAgIHRoYXQgaXQgaXMgZnVsbHkgYXdha2UpIGJlZm9yZSBzZW5kaW5nIGZyYW1lcy4KKyAgIG8gIDI6ICpSRVNFUlZFRCouIFRoaXMgdmFsdWUgTVVTVCBOT1QgYmUgc2V0IGJ5IHRoZSBob3N0LiAgSWYKKyAgICAgIHJlY2VpdmVkIGJ5IHRoZSBOQ1AsIHRoZSBOQ1AgU0hPVUxEIGNvbnNpZGVyIHRoaXMgYXMgYSBzeW5vbnltIG9mCisgICAgICAiSE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQIi4KKyAgIG8gIDM6ICJIT1NUX1BPV0VSX1NUQVRFX0xPV19QT1dFUiI6IFRoZSBob3N0IGlzIGluIGEgbG93IHBvd2VyIHN0YXRlCisgICAgICB3aGVyZSBpdCBjYW4gYmUgaW1tZWRpYXRlbHkgd29rZW4gYnkgdGhlIE5DUC4gIFRoZSBOQ1AgU0hPVUxECisgICAgICBhdm9pZCBzZW5kaW5nIHVubmVjZXNzYXJ5IHByb3BlcnR5IHVwZGF0ZXMsIHN1Y2ggYXMgY2hpbGQgdGFibGUKKyAgICAgIHVwZGF0ZXMgb3Igbm9uLWNyaXRpY2FsIG1lc3NhZ2VzIG9uIHRoZSBkZWJ1ZyBzdHJlYW0uCisgICBvICA0OiAiSE9TVF9QT1dFUl9TVEFURV9PTkxJTkUiOiBUaGUgaG9zdCBpcyBhd2FrZSBhbmQgcmVzcG9uc2l2ZS4KKyAgICAgIE5vIHNwZWNpYWwgZmlsdGVyaW5nIGlzIHBlcmZvcm1lZCBieSB0aGUgTkNQIG9uIGFzeW5jaHJvbm91cworICAgICAgdXBkYXRlcy4KKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMzFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBvICBBbGwgb3RoZXIgdmFsdWVzIGFyZSAqUkVTRVJWRUQqLiBUaGV5IE1VU1QgTk9UIGJlIHNldCBieSB0aGUgaG9zdC4KKyAgICAgIElmIHJlY2VpdmVkIGJ5IHRoZSBOQ1AsIHRoZSBOQ1AgU0hPVUxEIGNvbnNpZGVyIHRoZSB2YWx1ZSBhcyBhCisgICAgICBzeW5vbnltIG9mICJIT1NUX1BPV0VSX1NUQVRFX0xPV19QT1dFUiIuCisKKyAgIFtDUkVGM10KKworICAgQWZ0ZXIgc2V0dGluZyB0aGlzIHBvd2VyIHN0YXRlLCBhbnkgZnVydGhlciBjb21tYW5kcyBmcm9tIHRoZSBob3N0IHRvCisgICB0aGUgTkNQIHdpbGwgY2F1c2UgIkhPU1RfUE9XRVJfU1RBVEUiIHRvIGF1dG9tYXRpY2FsbHkgcmV2ZXJ0IHRvCisgICAiSE9TVF9QT1dFUl9TVEFURV9PTkxJTkUiLgorCisgICBXaGVuIHRoZSBob3N0IGlzIGVudGVyaW5nIGEgbG93LXBvd2VyIHN0YXRlLCBpdCBzaG91bGQgd2FpdCBmb3IgdGhlCisgICByZXNwb25zZSBmcm9tIHRoZSBOQ1AgYWNrbm93bGVkZ2luZyB0aGUgY29tbWFuZCAod2l0aAorICAgIkNNRF9WQUxVRV9JUyIpLiAgT25jZSB0aGF0IGFja25vd2xlZGdlbWVudCBpcyByZWNlaXZlZCB0aGUgaG9zdCBtYXkKKyAgIGVudGVyIHRoZSBsb3ctcG93ZXIgc3RhdGUuCisKKyAgIElmIHRoZSBOQ1AgaGFzIHRoZSAiQ0FQX1VOU09MX1VQREFURV9GSUxURVIiIGNhcGFiaWxpdHksIGFueQorICAgdW5zb2xpY2l0ZWQgcHJvcGVydHkgdXBkYXRlcyBtYXNrZWQgYnkgIlBST1BfVU5TT0xfVVBEQVRFX0ZJTFRFUiIKKyAgIHNob3VsZCBiZSBob25vcmVkIHdoaWxlIHRoZSBob3N0IGluZGljYXRlcyBpdCBpcyBpbiBhIGxvdy1wb3dlcgorICAgc3RhdGUuICBBZnRlciByZXN1bWluZyB0byB0aGUgIkhPU1RfUE9XRVJfU1RBVEVfT05MSU5FIiBzdGF0ZSwgdGhlCisgICB2YWx1ZSBvZiAiUFJPUF9VTlNPTF9VUERBVEVfRklMVEVSIiBNVVNUIGJlIHVuY2hhbmdlZCBmcm9tIHRoZSB2YWx1ZQorICAgYXNzaWduZWQgcHJpb3IgdG8gdGhlIGhvc3QgaW5kaWNhdGluZyBpdCB3YXMgZW50ZXJpbmcgYSBsb3ctcG93ZXIKKyAgIHN0YXRlLgorCisgICBUaGUgaG9zdCBNVVNUIG9ubHkgdXNlIHRoaXMgcHJvcGVydHkgZnJvbSBOTEkgMC4gIEJlaGF2aW9yIHdoZW4gdXNlZAorICAgZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4KKworNS41LjEyLiAgUFJPUCA0MTA0OiBQUk9QX1VOU09MX1VQREFURV9GSUxURVIKKworICAgbyAgUmVxdWlyZWQgb25seSBpZiAiQ0FQX1VOU09MX1VQREFURV9GSUxURVIiIGlzIHNldC4KKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEoSSkiCisgICBvICBEZWZhdWx0IHZhbHVlOiBFbXB0eS4KKworICAgQ29udGFpbnMgYSBsaXN0IG9mIHByb3BlcnRpZXMgd2hpY2ggYXJlIF9leGNsdWRlZF8gZnJvbSBnZW5lcmF0aW5nCisgICB1bnNvbGljaXRlZCB2YWx1ZSB1cGRhdGVzLiAgVGhpcyBwcm9wZXJ0eSBNVVNUIGJlIGVtcHR5IGFmdGVyIHJlc2V0LgorCisgICBJbiBvdGhlciB3b3JkcywgdGhlIGhvc3QgbWF5IG9wdC1vdXQgb2YgdW5zb2xpY2l0ZWQgcHJvcGVydHkgdXBkYXRlcworICAgZm9yIGEgc3BlY2lmaWMgcHJvcGVydHkgYnkgYWRkaW5nIHRoYXQgcHJvcGVydHkgaWQgdG8gdGhpcyBsaXN0LgorCisgICBIb3N0cyBTSE9VTEQgTk9UIGFkZCBwcm9wZXJ0aWVzIHRvIHRoaXMgbGlzdCB3aGljaCBhcmUgbm90IHByZXNlbnQgaW4KKyAgICJQUk9QX1VOU09MX1VQREFURV9MSVNUIi4gIElmIHN1Y2ggcHJvcGVydGllcyBhcmUgYWRkZWQsIHRoZSBOQ1AgTVVTVAorICAgaWdub3JlIHRoZSB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLgorCisgICBbQ1JFRjRdCisKKyAgIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIHByb3BlcnR5IGFyZSBvbmx5IFJFUVVJUkVEIHRvIHN1cHBvcnQgYW5kIHVzZQorICAgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMzJdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBvICAiQ01EX1BST1BfVkFMVUVfR0VUIiAoU2VjdGlvbiA0LjMpCisgICBvICAiQ01EX1BST1BfVkFMVUVfU0VUIiAoU2VjdGlvbiA0LjQpCisgICBvICAiQ01EX1BST1BfVkFMVUVfSVMiIChTZWN0aW9uIDQuNykKKworICAgSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgcHJvcGVydHkgTUFZIG9wdGlvbmFsbHkgc3VwcG9ydCBhbmQgdXNlIHRoZQorICAgZm9sbG93aW5nIGNvbW1hbmRzOgorCisgICBvICAiQ01EX1BST1BfVkFMVUVfSU5TRVJUIiAoU2VjdGlvbiA0LjUpCisgICBvICAiQ01EX1BST1BfVkFMVUVfUkVNT1ZFIiAoU2VjdGlvbiA0LjYpCisgICBvICAiQ01EX1BST1BfVkFMVUVfSU5TRVJURUQiIChTZWN0aW9uIDQuOCkKKyAgIG8gICJDTURfUFJPUF9WQUxVRV9SRU1PVkVEIiAoU2VjdGlvbiA0LjkpCisKKyAgIEhvc3QgaW1wbGVtZW50YXRpb25zIHdoaWNoIGFyZSBhaW1pbmcgdG8gbWF4aW1pemUgdGhlaXIgY29tcGF0YWJpbGl0eQorICAgYWNyb3NzIGRpZmZlcmVudCBmaXJtd3JlIGltcGxlbWVudGF0aW9ucyBTSE9VTEQgTk9UIGFzc3VtZSB0aGUKKyAgIGF2YWlsYWJpbGl0eSBvZiB0aGUgb3B0aW9uYWwgY29tbWFuZHMgZm9yIHRoaXMgcHJvcGVydHkuCisKKyAgIFRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IFNIQUxMIGJlIGluZGVwZW5kZW50IGZvciBlYWNoIE5MSS4KKworNS41LjEzLiAgUFJPUCA0MTA1OiBQUk9QX1VOU09MX1VQREFURV9MSVNUCisKKyAgIG8gIFJlcXVpcmVkIG9ubHkgaWYgIkNBUF9VTlNPTF9VUERBVEVfRklMVEVSIiBpcyBzZXQuCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEoSSkiCisKKyAgIENvbnRhaW5zIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjYXBhYmxlIG9mIGdlbmVyYXRpbmcKKyAgIHVuc29saWNpdGVkIHZhbHVlIHVwZGF0ZXMuICBUaGlzIGxpc3QgY2FuIGJlIHVzZWQgd2hlbiBwb3B1bGF0aW5nCisgICAiUFJPUF9VTlNPTF9VUERBVEVfRklMVEVSIiB0byBkaXNhYmxlIGFsbCB1bnNvbGljaXRlZCBwcm9wZXJ0eQorICAgdXBkYXRlcy4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBpbnRlbmRlZCB0byBlZmZlY3RpdmVseSBiZWhhdmUgYXMgYSBjb25zdGFudCBmb3IgYQorICAgZ2l2ZW4gTkNQIGZpcm13YXJlLgorCisgICBOb3RlIHRoYXQgbm90IGFsbCBwcm9wZXJ0aWVzIHRoYXQgc3VwcG9ydCB1bnNvbGljaXRlZCB1cGRhdGVzIG5lZWQgdG8KKyAgIGJlIGxpc3RlZCBoZXJlLiAgU2NhbiByZXN1bHRzLCBmb3IgZXhhbXBsZSwgYXJlIG9ubHkgZ2VuZXJhdGVkIGR1ZSB0bworICAgZGlyZWN0IGFjdGlvbiBvbiB0aGUgcGFydCBvZiB0aGUgaG9zdCwgc28gdGhvc2UgcHJvcGVydGllcyBNVVNUIE5PVAorICAgbm90IGJlIGluY2x1ZGVkIGluIHRoaXMgbGlzdC4KKworICAgVGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgTUFZIGJlIGRpZmZlcmVudCBhY3Jvc3MgYXZhaWxhYmxlIE5MSXMuCisKKzUuNi4gIFN0cmVhbSBQcm9wZXJ0aWVzCisKKzUuNi4xLiAgUFJPUCAxMTI6IFBST1BfU1RSRUFNX0RFQlVHCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seS1TdHJlYW0KKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkQiCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAzM10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgIG4gICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgVVRGOF9EQVRBIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLSsKKworICAgVGhpcyBwcm9wZXJ0eSBpcyBhIHN0cmVhbWluZyBwcm9wZXJ0eSwgbWVhbmluZyB0aGF0IHlvdSBjYW5ub3QKKyAgIGV4cGxpY2l0bHkgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuICBUaGUgc3RyZWFtIHByb3ZpZGVzCisgICBodW1hbi1yZWFkYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWNoIG1heSBiZSBkaXNwbGF5ZWQgaW4gdGhlIGhvc3QKKyAgIGxvZ3MuCisKKyAgIFRoZSBsb2NhdGlvbiBvZiBuZXdsaW5lIGNoYXJhY3RlcnMgaXMgbm90IGFzc3VtZWQgYnkgdGhlIGhvc3Q6IGl0IGlzCisgICB0aGUgTkNQJ3MgcmVzcG9uc2liaWxpdHkgdG8gaW5zZXJ0IG5ld2xpbmUgY2hhcmFjdGVycyB3aGVyZSBuZWVkZWQsCisgICBqdXN0IGxpa2Ugd2l0aCBhbnkgb3RoZXIgdGV4dCBzdHJlYW0uCisKKyAgIFRvIHJlY2VpdmUgdGhlIGRlYnVnZ2luZyBzdHJlYW0sIHlvdSB3YWl0IGZvciAiQ01EX1BST1BfVkFMVUVfSVMiCisgICBjb21tYW5kcyBmb3IgdGhpcyBwcm9wZXJ0eSBmcm9tIHRoZSBOQ1AuCisKKzUuNi4yLiAgUFJPUCAxMTM6IFBST1BfU1RSRUFNX1JBVworCisgICBvICBUeXBlOiBSZWFkLVdyaXRlLVN0cmVhbQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiZEQiCisKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgICAgICB8IE9jdGV0czogfCAgICAgICAyICAgICAgICB8ICAgICBuICAgICAgfCAgICAgICBuICAgICAgICB8CisgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgfCBGaWVsZHM6IHwgRlJBTUVfREFUQV9MRU4gfCBGUkFNRV9EQVRBIHwgRlJBTUVfTUVUQURBVEEgfAorICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFRoaXMgc3RyZWFtIHByb3ZpZGVzIHRoZSBjYXBhYmlsaXR5IG9mIHNlbmRpbmcgYW5kIHJlY2VpdmluZyByYXcKKyAgIHBhY2tldHMgdG8gYW5kIGZyb20gdGhlIHJhZGlvLiAgVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgZnJhbWUKKyAgIG1ldGFkYXRhIGFuZCBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgTUFDIGFuZCBQSFkgYmVpbmcgdXNlZC4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBhIHN0cmVhbWluZyBwcm9wZXJ0eSwgbWVhbmluZyB0aGF0IHlvdSBjYW5ub3QKKyAgIGV4cGxpY2l0bHkgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuICBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdQorICAgd2FpdCBmb3IgIkNNRF9QUk9QX1ZBTFVFX0lTIiBjb21tYW5kcyB3aXRoIHRoaXMgcHJvcGVydHkgaWQgZnJvbSB0aGUKKyAgIE5DUC4KKworICAgSW1wbGVtZW50YXRpb25zIG1heSBPUFRJT05BTExZIHN1cHBvcnQgdGhlIGFiaWxpdHkgdG8gdHJhbnNtaXQKKyAgIGFyYml0cmFyeSByYXcgcGFja2V0cy4gIFN1cHBvcnQgZm9yIHRoaXMgZmVhdHVyZSBpcyBpbmRpY2F0ZWQgYnkgdGhlCisgICBwcmVzZW5jZSBvZiB0aGUgIkNBUF9XUklUQUJMRV9SQVdfU1RSRUFNIiBjYXBhYmlsaXR5LgorCisgICBJZiB0aGUgY2FwYWJpbGl0eSAiQ0FQX1dSSVRBQkxFX1JBV19TVFJFQU0iIGlzIHNldCwgdGhlbiBwYWNrZXRzCisgICB3cml0dGVuIHRvIHRoaXMgc3RyZWFtIHdpdGggIkNNRF9QUk9QX1ZBTFVFX1NFVCIgd2lsbCBiZSBzZW50IG91dAorICAgb3ZlciB0aGUgcmFkaW8uICBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIHVzZSB0aGUgcmFkaW8gZGlyZWN0bHksCisgICB3aXRoIHRoZSBzdGFjayBiZWluZyBpbXBsZW1lbnRlZCBvbiB0aGUgaG9zdCBpbnN0ZWFkIG9mIHRoZSBOQ1AuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMzRdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis1LjYuMi4xLiAgRnJhbWUgTWV0YWRhdGEgRm9ybWF0CisKKyAgIEFueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiAiRlJBTUVfREFUQV9MRU4iIGlzIGNvbnNpZGVyZWQgbWV0YWRhdGEgYW5kCisgICBpcyBPUFRJT05BTC4gIEZyYW1lIG1ldGFkYXRhIE1BWSBiZSBlbXB0eSBvciBwYXJ0aWFsbHkgc3BlY2lmaWVkLgorICAgUGFydGlhbGx5IHNwZWNpZmllZCBtZXRhZGF0YSBNVVNUIGJlIGFjY2VwdGVkLiAgRGVmYXVsdCB2YWx1ZXMgYXJlCisgICB1c2VkIGZvciBhbGwgdW5zcGVjaWZpZWQgZmllbGRzLgorCisgICBUaGUgc2FtZSBnZW5lcmFsIGZvcm1hdCBpcyB1c2VkIGZvciAiUFJPUF9TVFJFQU1fUkFXIiwKKyAgICJQUk9QX1NUUkVBTV9ORVQiLCBhbmQgIlBST1BfU1RSRUFNX05FVF9JTlNFQ1VSRSIuICBJdCBjYW4gYmUgdXNlZAorICAgZm9yIGZyYW1lcyBzZW50IGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdCBhcyB3ZWxsIGFzIGZyYW1lcyBzZW50IGZyb20KKyAgIHRoZSBob3N0IHRvIHRoZSBOQ1AuCisKKyAgIFRoZSBmcmFtZSBtZXRhZGF0YSBmaWVsZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZpZWxkczoKKworICAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKworICAgICB8IEZpZWxkICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgIHwgVHlwZSAgICAgICB8IExlbiB8IERlZmF1bHQgfAorICAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKworICAgICB8IE1EX1BPV0VSIHwgKGRCbSkgUlNTSS9UWC1Qb3dlciAgIHwgImMiIGludDggICB8ICAxICB8ICAgLTEyOCAgfAorICAgICB8IE1EX05PSVNFIHwgKGRCbSkgTm9pc2UgZmxvb3IgICAgIHwgImMiIGludDggICB8ICAxICB8ICAgLTEyOCAgfAorICAgICB8IE1EX0ZMQUcgIHwgRmxhZ3MgKGRlZmluZWQgYmVsb3cpIHwgIlMiIHVpbnQxNiB8ICAyICB8ICAgICAgICAgfAorICAgICB8IE1EX1BIWSAgIHwgUEhZLXNwZWNpZmljIGRhdGEgICAgIHwgImQiIGRhdGEgICB8ID49MiB8ICAgICAgICAgfAorICAgICB8IE1EX1ZFTkQgIHwgVmVuZG9yLXNwZWNpZmljIGRhdGEgIHwgImQiIGRhdGEgICB8ID49MiB8ICAgICAgICAgfAorICAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKworCisgICBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgaWdub3JlZCBieSB0aGUgTkNQIGZvciBwYWNrZXRzIHNlbnQgdG8gaXQKKyAgIGZyb20gdGhlIGhvc3Q6CisKKyAgIG8gIE1EX05PSVNFCisgICBvICBNRF9GTEFHCisKKyAgIFdoZW4gc3BlY2lmeWluZyAiTURfUE9XRVIiIGZvciBhIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZCwgdGhlIGFjdHVhbAorICAgdHJhbnNtaXQgcG93ZXIgaXMgbmV2ZXIgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyAgICJQUk9QX1BIWV9UWF9QT1dFUiIgKFNlY3Rpb24gNS43LjYpLiAgV2hlbiBsZWZ0IHVuc3BlY2lmaWVkIChvciBzZXQKKyAgIHRvIHRoZSB2YWx1ZSAtMTI4KSwgYW4gYXBwcm9wcmlhdGUgdHJhbnNtaXQgcG93ZXIgd2lsbCBiZSBjaG9zZW4gYnkKKyAgIHRoZSBOQ1AuCisKKyAgIFRoZSBiaXQgdmFsdWVzIGluICJNRF9GTEFHIiBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOgorCisKKworCisKKworCisKKworCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDM1XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8ICAgQml0ICAgfCAgTWFzayAgfCBOYW1lICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gaWYgc2V0ICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCAgICAxNSAgIHwgMHgwMDAxIHwgTURfRkxBR19UWCAgICAgICB8IFBhY2tldCB3YXMgdHJhbnNtaXR0ZWQsIG5vdCB8CisgICB8ICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgcmVjZWl2ZWQuICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgMTMgICB8IDB4MDAwNCB8IE1EX0ZMQUdfQkFEX0ZDUyAgfCBQYWNrZXQgd2FzIHJlY2VpdmVkIHdpdGggICAgfAorICAgfCAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IGJhZCBGQ1MgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgIDEyICAgfCAweDAwMDggfCBNRF9GTEFHX0RVUEUgICAgIHwgUGFja2V0IHNlZW1zIHRvIGJlIGEgICAgICAgIHwKKyAgIHwgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBkdXBsaWNhdGUgICAgICAgICAgICAgICAgICAgfAorICAgfCAgMC0xMSwgIHwgMHhGRkYyIHwgTURfRkxBR19SRVNFUlZFRCB8IEZsYWdzIHJlc2VydmVkIGZvciBmdXR1cmUgICB8CisgICB8ICAgIDE0ICAgfCAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgdXNlLiAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBUaGUgZm9ybWF0IG9mICJNRF9QSFkiIGlzIHNwZWNpZmllZCBieSB0aGUgUEhZIGxheWVyIGN1cnJlbnRseSBpbgorICAgdXNlLCBhbmQgbWF5IGNvbnRhaW4gaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgY2hhbm5lbCwgTFFJLCBhbnRlbm5hLAorICAgb3Igb3RoZXIgcGVydGFpbmVudCBpbmZvcm1hdGlvbi4KKworNS42LjMuICBQUk9QIDExNDogUFJPUF9TVFJFQU1fTkVUCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUtU3RyZWFtCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJkRCIKKworICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgIHwgT2N0ZXRzOiB8ICAgICAgIDIgICAgICAgIHwgICAgIG4gICAgICB8ICAgICAgIG4gICAgICAgIHwKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgICAgICB8IEZpZWxkczogfCBGUkFNRV9EQVRBX0xFTiB8IEZSQU1FX0RBVEEgfCBGUkFNRV9NRVRBREFUQSB8CisgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKworICAgVGhpcyBzdHJlYW0gcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgb2Ygc2VuZGluZyBhbmQgcmVjZWl2aW5nIGRhdGEKKyAgIHBhY2tldHMgdG8gYW5kIGZyb20gdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBuZXR3b3JrLiAgVGhlIGV4YWN0IGZvcm1hdAorICAgb2YgdGhlIGZyYW1lIG1ldGFkYXRhIGFuZCBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgbmV0d29yayBwcm90b2NvbAorICAgYmVpbmcgdXNlZC4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBhIHN0cmVhbWluZyBwcm9wZXJ0eSwgbWVhbmluZyB0aGF0IHlvdSBjYW5ub3QKKyAgIGV4cGxpY2l0bHkgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuICBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdQorICAgd2FpdCBmb3IgIkNNRF9QUk9QX1ZBTFVFX0lTIiBjb21tYW5kcyB3aXRoIHRoaXMgcHJvcGVydHkgaWQgZnJvbSB0aGUKKyAgIE5DUC4KKworICAgVG8gc2VuZCBuZXR3b3JrIHBhY2tldHMsIHlvdSBjYWxsICJDTURfUFJPUF9WQUxVRV9TRVQiIG9uIHRoaXMKKyAgIHByb3BlcnR5IHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwYWNrZXQuCisKKyAgIEFueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiAiRlJBTUVfREFUQV9MRU4iIGlzIGNvbnNpZGVyZWQgbWV0YWRhdGEsIHRoZQorICAgZm9ybWF0IG9mIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDUuNi4yLjEuCisKKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMzZdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis1LjYuNC4gIFBST1AgMTE1OiBQUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkUKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZS1TdHJlYW0KKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImREIgorCisgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgfCBPY3RldHM6IHwgICAgICAgMiAgICAgICAgfCAgICAgbiAgICAgIHwgICAgICAgbiAgICAgICAgfAorICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgIHwgRmllbGRzOiB8IEZSQU1FX0RBVEFfTEVOIHwgRlJBTUVfREFUQSB8IEZSQU1FX01FVEFEQVRBIHwKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworCisgICBUaGlzIHN0cmVhbSBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSBvZiBzZW5kaW5nIGFuZCByZWNlaXZpbmcKKyAgIHVuZW5jcnlwdGVkIGFuZCB1bmF1dGhlbnRpY2F0ZWQgZGF0YSBwYWNrZXRzIHRvIGFuZCBmcm9tIG5lYXJieQorICAgZGV2aWNlcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGRldmljZSBjb21taXNzaW9uaW5nLiAgVGhlIGV4YWN0IGZvcm1hdAorICAgb2YgdGhlIGZyYW1lIG1ldGFkYXRhIGFuZCBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgbmV0d29yayBwcm90b2NvbAorICAgYmVpbmcgdXNlZC4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBhIHN0cmVhbWluZyBwcm9wZXJ0eSwgbWVhbmluZyB0aGF0IHlvdSBjYW5ub3QKKyAgIGV4cGxpY2l0bHkgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuICBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdQorICAgd2FpdCBmb3IgIkNNRF9QUk9QX1ZBTFVFX0lTIiBjb21tYW5kcyB3aXRoIHRoaXMgcHJvcGVydHkgaWQgZnJvbSB0aGUKKyAgIE5DUC4KKworICAgVG8gc2VuZCBuZXR3b3JrIHBhY2tldHMsIHlvdSBjYWxsICJDTURfUFJPUF9WQUxVRV9TRVQiIG9uIHRoaXMKKyAgIHByb3BlcnR5IHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwYWNrZXQuCisKKyAgIEFueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiAiRlJBTUVfREFUQV9MRU4iIGlzIGNvbnNpZGVyZWQgbWV0YWRhdGEsIHRoZQorICAgZm9ybWF0IG9mIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDUuNi4yLjEuCisKKzUuNy4gIFBIWSBQcm9wZXJ0aWVzCisKKzUuNy4xLiAgUFJPUCAzMjogUFJPUF9QSFlfRU5BQkxFRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIiAoYm9vbDgpCisKKyAgIFNldCB0byAxIGlmIHRoZSBQSFkgaXMgZW5hYmxlZCwgc2V0IHRvIDAgb3RoZXJ3aXNlLiAgTWF5IGJlIGRpcmVjdGx5CisgICBlbmFibGVkIHRvIGJ5cGFzcyBoaWdoZXItbGV2ZWwgcGFja2V0IHByb2Nlc3NpbmcgaW4gb3JkZXIgdG8KKyAgIGltcGxlbWVudCB0aGluZ3MgbGlrZSBwYWNrZXQgc25pZmZlcnMuICBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlCisgICB3cml0dGVuIGlmIHRoZSAiU1BJTkVMX0NBUF9NQUNfUkFXIiBjYXBhYmlsaXR5IGlzIHByZXNlbnQuCisKKzUuNy4yLiAgUFJPUCAzMzogUFJPUF9QSFlfQ0hBTgorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIiAodWludDgpCisKKyAgIFZhbHVlIGlzIHRoZSBjdXJyZW50IGNoYW5uZWwuICBNdXN0IGJlIHNldCB0byBvbmUgb2YgdGhlIHZhbHVlcworICAgY29udGFpbmVkIGluICJQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRCIuCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDM3XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNS43LjMuICBQUk9QIDM0OiBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRAorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEoQykiIChhcnJheSBvZiB1aW50OCkKKyAgIG8gIFVuaXQ6IExpc3Qgb2YgY2hhbm5lbHMKKworICAgVmFsdWUgaXMgYSBsaXN0IG9mIGNoYW5uZWwgdmFsdWVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUuCisKKzUuNy40LiAgUFJPUCAzNTogUFJPUF9QSFlfRlJFUQorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkwiICh1aW50MzIpCisgICBvICBVbml0OiBLaWxvaGVydHoKKworICAgVmFsdWUgaXMgdGhlIHJhZGlvIGZyZXF1ZW5jeSAoaW4ga2lsb2hlcnR6KSBvZiB0aGUgY3VycmVudCBjaGFubmVsLgorCis1LjcuNS4gIFBST1AgMzY6IFBST1BfUEhZX0NDQV9USFJFU0hPTEQKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYyIgKGludDgpCisgICBvICBVbml0OiBkQm0KKworICAgVmFsdWUgaXMgdGhlIENDQSAoY2xlYXItY2hhbm5lbCBhc3Nlc3NtZW50KSB0aHJlc2hvbGQuICBTZXQgdG8gLTEyOAorICAgdG8gZGlzYWJsZS4KKworICAgV2hlbiBzZXR0aW5nLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gYSB2YWx1ZSB0aGF0IGlzCisgICBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgcmFkaW8gaGFyZHdhcmUuCisKKzUuNy42LiAgUFJPUCAzNzogUFJPUF9QSFlfVFhfUE9XRVIKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYyIgKGludDgpCisgICBvICBVbml0OiBkQm0KKworICAgVmFsdWUgaXMgdGhlIHRyYW5zbWl0IHBvd2VyIG9mIHRoZSByYWRpby4KKworICAgV2hlbiBzZXR0aW5nLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gYSB2YWx1ZSB0aGF0IGlzCisgICBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgcmFkaW8gaGFyZHdhcmUuCisKKzUuNy43LiAgUFJPUCAzODogUFJPUF9QSFlfUlNTSQorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImMiIChpbnQ4KQorICAgbyAgVW5pdDogZEJtCisKKyAgIFZhbHVlIGlzIHRoZSBjdXJyZW50IFJTU0kgKFJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aCBpbmRpY2F0aW9uKSBmcm9tCisgICB0aGUgcmFkaW8uICBUaGlzIHZhbHVlIGNhbiBiZSB1c2VkIGluIGVuZXJneSBzY2FucyBhbmQgZm9yCisgICBkZXRlcm1pbmluZyB0aGUgYW1iaWVudCBub2lzZSBmbG9vciBmb3IgdGhlIG9wZXJhdGluZyBlbnZpcm9ubWVudC4KKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDM4XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNS43LjguICBQUk9QIDM5OiBQUk9QX1BIWV9SWF9TRU5TSVRJVklUWQorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImMiIChpbnQ4KQorICAgbyAgVW5pdDogZEJtCisKKyAgIFZhbHVlIGlzIHRoZSByYWRpbyByZWNlaXZlIHNlbnNpdGl2aXR5LiAgVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCBhcworICAgbG93ZXIgYm91bmQgbm9pc2UgZmxvb3IgZm9yIGxpbmsgbWV0cmljcyBjb21wdXRhdGlvbi4KKworNS44LiAgTUFDIFByb3BlcnRpZXMKKworNS44LjEuICBQUk9QIDQ4OiBQUk9QX01BQ19TQ0FOX1NUQVRFCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisgICBvICBVbml0OiBFbnVtZXJhdGlvbgorCisgICBQb3NzaWJsZSBWYWx1ZXM6CisKKyAgIG8gIDA6ICJTQ0FOX1NUQVRFX0lETEUiCisgICBvICAxOiAiU0NBTl9TVEFURV9CRUFDT04iCisgICBvICAyOiAiU0NBTl9TVEFURV9FTkVSR1kiCisgICBvICAzOiAiU0NBTl9TVEFURV9ESVNDT1ZFUiIKKworICAgU2V0IHRvICJTQ0FOX1NUQVRFX0JFQUNPTiIgdG8gc3RhcnQgYW4gYWN0aXZlIHNjYW4uICBCZWFjb25zIHdpbGwgYmUKKyAgIGVtaXR0ZWQgZnJvbSAiUFJPUF9NQUNfU0NBTl9CRUFDT04iLgorCisgICBTZXQgdG8gIlNDQU5fU1RBVEVfRU5FUkdZIiB0byBzdGFydCBhbiBlbmVyZ3kgc2Nhbi4gIENoYW5uZWwgZW5lcmd5CisgICByZXN1bHQgd2lsbCBiZSByZXBvcnRlZCBieSBlbWlzc2lvbnMgb2YgIlBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVCIKKyAgIChwZXIgY2hhbm5lbCkuCisKKyAgIFNldCB0byAiU0NBTl9TVEFURV9ESVNPVkVSIiB0byBzdGFydCBhIFRocmVhZCBNTEUgZGlzY292ZXJ5IHNjYW4KKyAgIG9wZXJhdGlvbi4gIERpc2NvdmVyeSBzY2FuIHJlc3VsdCB3aWxsIGJlIGVtaXR0ZWQgZnJvbQorICAgIlBST1BfTUFDX1NDQU5fQkVBQ09OIi4KKworICAgVmFsdWUgc3dpdGNoZXMgdG8gIlNDQU5fU1RBVEVfSURMRSIgd2hlbiBzY2FuIGlzIGNvbXBsZXRlLgorCis1LjguMi4gIFBST1AgNDk6IFBST1BfTUFDX1NDQU5fTUFTSworCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKEMpIgorICAgbyAgVW5pdDogTGlzdCBvZiBjaGFubmVscyB0byBzY2FuCisKKzUuOC4zLiAgUFJPUCA1MDogUFJPUF9NQUNfU0NBTl9QRVJJT0QKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiUyIgKHVpbnQxNikKKyAgIG8gIFVuaXQ6IG1pbGxpc2Vjb25kcyBwZXIgY2hhbm5lbAorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMzldCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis1LjguNC4gIFBST1AgNTE6IFBST1BfTUFDX1NDQU5fQkVBQ09OCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seS1TdHJlYW0KKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkNjZGQiIChvciAiQ2N0KEVTU2MpdChpQ1VkZCkiKQorCisgICAgICstLS0tLS0tLS0rLS0tLSstLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgIHwgT2N0ZXRzOiB8IDEgIHwgIDEgICB8ICAgIDIgICAgfCAgICBuICAgICB8ICAgIDIgICAgfCAgICBuICAgICB8CisgICAgICstLS0tLS0tLS0rLS0tLSstLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgIHwgRmllbGRzOiB8IENIIHwgUlNTSSB8IE1BQ19MRU4gfCBNQUNfREFUQSB8IE5FVF9MRU4gfCBORVRfREFUQSB8CisgICAgICstLS0tLS0tLS0rLS0tLSstLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisKKyAgIFNjYW4gYmVhY29ucyBoYXZlIHR3byBlbWJlZGRlZCBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gaW5mb3JtYXRpb24KKyAgIGFib3V0IHRoZSBNQUMgbGF5ZXIgYW5kIHRoZSBORVQgbGF5ZXIuICBUaGVpciBmb3JtYXQgZGVwZW5kcyBvbiB0aGUKKyAgIE1BQyBhbmQgTkVUIGxheWVyIGN1cnJlbnRseSBpbiB1c2UuICBUaGUgZm9ybWF0IGJlbG93IGlzIGZvciBhbgorICAgODAyLjE1LjQgTUFDIHdpdGggVGhyZWFkOgorCisgICBvICAiQyI6IENoYW5uZWwKKyAgIG8gICJjIjogUlNTSSBvZiB0aGUgYmVhY29uCisgICBvICAidCI6IE1BQyBsYXllciBwcm9wZXJ0aWVzICg4MDIuMTUuNCBsYXllciBzaG93biBiZWxvdyBmb3IKKyAgICAgIGNvbnZlbmllbmNlKQorCisgICAgICAqICAiRSI6IExvbmcgYWRkcmVzcworICAgICAgKiAgIlMiOiBTaG9ydCBhZGRyZXNzCisgICAgICAqICAiUyI6IFBBTi1JRAorICAgICAgKiAgImMiOiBMUUkKKyAgIG8gIE5FVCBsYXllciBwcm9wZXJ0aWVzIChTdGFuZGFyZCBuZXQgbGF5ZXIgc2hvd24gYmVsb3cgZm9yCisgICAgICBjb252ZW5pZW5jZSkKKworICAgICAgKiAgImkiOiBQcm90b2NvbCBOdW1iZXIKKyAgICAgICogICJDIjogRmxhZ3MKKyAgICAgICogICJVIjogTmV0d29yayBOYW1lCisgICAgICAqICAiZCI6IFhQQU5JRAorICAgICAgKiAgImQiOiBTdGVlcmluZyBkYXRhCisKKyAgIEV4dHJhIHBhcmFtZXRlcnMgbWF5IGJlIGFkZGVkIHRvIGVhY2ggb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCisgICBmdXR1cmUsIHNvIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIHJlYWQgdGhlIGxlbmd0aCB0aGF0IHByZXBlbmRzIGVhY2gKKyAgIHN0cnVjdHVyZS4KKworNS44LjUuICBQUk9QIDUyOiBQUk9QX01BQ18xNV80X0xBRERSCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkUiCisKKyAgIFRoZSA4MDIuMTUuNCBsb25nIGFkZHJlc3Mgb2YgdGhpcyBub2RlLgorCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgcHJlc2VudCBvbiBOQ1BzIHdoaWNoIGltcGxlbWVudCA4MDIuMTUuNAorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDQwXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNS44LjYuICBQUk9QIDUzOiBQUk9QX01BQ18xNV80X1NBRERSCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIlMiCisKKyAgIFRoZSA4MDIuMTUuNCBzaG9ydCBhZGRyZXNzIG9mIHRoaXMgbm9kZS4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHByZXNlbnQgb24gTkNQcyB3aGljaCBpbXBsZW1lbnQgODAyLjE1LjQKKworNS44LjcuICBQUk9QIDU0OiBQUk9QX01BQ18xNV80X1BBTklECisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIlMiCisKKyAgIFRoZSA4MDIuMTUuNCBQQU5JRCB0aGlzIG5vZGUgaXMgYXNzb2NpYXRlZCB3aXRoLgorCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgcHJlc2VudCBvbiBOQ1BzIHdoaWNoIGltcGxlbWVudCA4MDIuMTUuNAorCis1LjguOC4gIFBST1AgNTU6IFBST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIgorCisgICBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgcmF3IE1BQyBmcmFtZXMgdG8gYmUgZW1pdHRlZCBmcm9tCisgICAiUFJPUF9TVFJFQU1fUkFXIi4gIFNlZSBTZWN0aW9uIDUuNi4yLgorCis1LjguOS4gIFBST1AgNTY6IFBST1BfTUFDX1BST01JU0NVT1VTX01PREUKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiQyIKKworICAgUG9zc2libGUgVmFsdWVzOgorCisgICArLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgSWQgfCAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgfCAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgfAorICAgKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDAgIHwgICAiTUFDX1BST01JU0NVT1VTX01PREVfT0ZGIiAgIHwgIE5vcm1hbCBNQUMgZmlsdGVyaW5nIGlzIGluIHwKKyAgIHwgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHBsYWNlLiAgICAgICAgICAgfAorICAgfCAxICB8ICJNQUNfUFJPTUlTQ1VPVVNfTU9ERV9ORVRXT1JLIiB8ICAgQWxsIE1BQyBwYWNrZXRzIG1hdGNoaW5nICB8CisgICB8ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG5ldHdvcmsgYXJlIHBhc3NlZCB1cCB0aGUgIHwKKyAgIHwgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHN0YWNrLiAgICAgICAgICAgfAorICAgfCAyICB8ICAiTUFDX1BST01JU0NVT1VTX01PREVfRlVMTCIgICB8IEFsbCBkZWNvZGVkIE1BQyBwYWNrZXRzIGFyZSB8CisgICB8ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHBhc3NlZCB1cCB0aGUgc3RhY2suICAgIHwKKyAgICstLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBTZWUgU2VjdGlvbiA1LjYuMi4KKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA0MV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzUuOC4xMC4gIFBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVAorCisgICBvICBUeXBlOiBSZWFkLU9ubHktU3RyZWFtCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDYyIKKworICAgVGhpcyBwcm9wZXJ0eSBpcyBlbWl0dGVkIGR1cmluZyBlbmVyZ3kgc2NhbiBvcGVyYXRpb24gcGVyIHNjYW5uZWQKKyAgIGNoYW5uZWwgd2l0aCBmb2xsb3dpbmcgZm9ybWF0OgorCisgICBvICAiQyI6IENoYW5uZWwKKyAgIG8gICJjIjogUlNTSSAoaW4gZEJtKQorCis1LjguMTEuICBQUk9QIDQ4NjQ6IFBST1BfTUFDX1dISVRFTElTVAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKFQoRWMpKSIKKyAgIG8gIFJlcXVpcmVkIGNhcGFiaWxpdHk6ICJDQVBfTUFDX1dISVRFTElTVCIKKworICAgU3RydWN0dXJlIFBhcmFtZXRlcnM6CisKKyAgIG8gICJFIjogRVVJNjQgYWRkcmVzcyBvZiBub2RlCisgICBvICAiYyI6IE9wdGlvbmFsIFJTU0ktb3ZlcnJpZGUgdmFsdWUuICBUaGUgdmFsdWUgMTI3IGluZGljYXRlcyB0aGF0CisgICAgICB0aGUgUlNTSS1vdmVycmlkZSBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIGZvciB0aGlzIGFkZHJlc3MuICBJZgorICAgICAgdGhpcyB2YWx1ZSBpcyBvbWl0dGVkIHdoZW4gc2V0dGluZyBvciBpbnNlcnRpbmcsIGl0IGlzIGFzc3VtZWQgdG8KKyAgICAgIGJlIDEyNy4gIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgd2hlbiByZW1vdmluZy4KKworNS44LjEyLiAgUFJPUCA0ODY1OiBQUk9QX01BQ19XSElURUxJU1RfRU5BQkxFRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIgorICAgbyAgUmVxdWlyZWQgY2FwYWJpbGl0eTogIkNBUF9NQUNfV0hJVEVMSVNUIgorCis1LjguMTMuICBQUk9QIDQ4Njc6IFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfRU5BQkxFRAorCisgICBvICBUeXBlOiBXcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgU2V0IHRvIHRydWUgdG8gZW5hYmxlIHJhZGlvIHNvdXJjZSBtYXRjaGluZyBvciBmYWxzZSB0byBkaXNhYmxlIGl0LgorICAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgIlNQSU5FTF9DQVBfTUFDX1JBVyIKKyAgIGNhcGFiaWxpdHkgaXMgcHJlc2VudC4gIFRoZSBzb3VyY2UgbWF0Y2ggZnVuY3Rpb25hbGl0eSBpcyB1c2VkIGJ5CisgICByYWRpb3Mgd2hlbiBnZW5lcmF0aW5nIEFDS3MuICBUaGUgc2hvcnQgYW5kIGV4dGVuZGVkIGFkZHJlc3MgbGlzdHMKKyAgIGFyZSB1c2VkIGZvciBzZXR0aW5ncyB0aGUgRnJhbWUgUGVuZGluZyBiaXQgaW4gdGhlIEFDS3MuCisKKzUuOC4xNC4gIFBST1AgNDg2ODogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMKKworICAgbyAgVHlwZTogV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEoUykiCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNDJdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBDb25maWd1cmVzIHRoZSBsaXN0IG9mIHNob3J0IGFkZHJlc3NlcyB1c2VkIGZvciBzb3VyY2UgbWF0Y2hpbmcuCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSAiU1BJTkVMX0NBUF9NQUNfUkFXIgorICAgY2FwYWJpbGl0eSBpcyBwcmVzZW50LgorCisgICBTdHJ1Y3R1cmUgUGFyYW1ldGVyczoKKworICAgbyAgIlMiOiBTaG9ydCBhZGRyZXNzIGZvciBoYXJkd2FyZSBnZW5lcmF0ZWQgQUNLcworCis1LjguMTUuICBQUk9QIDQ4Njk6IFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTCisKKyAgIG8gIFR5cGU6IFdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKEUpIgorCisgICBDb25maWd1cmVzIHRoZSBsaXN0IG9mIGV4dGVuZGVkIGFkZHJlc3NlcyB1c2VkIGZvciBzb3VyY2UgbWF0Y2hpbmcuCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSAiU1BJTkVMX0NBUF9NQUNfUkFXIgorICAgY2FwYWJpbGl0eSBpcyBwcmVzZW50LgorCisgICBTdHJ1Y3R1cmUgUGFyYW1ldGVyczoKKworICAgbyAgIkUiOiBFVUk2NCBhZGRyZXNzIGZvciBoYXJkd2FyZSBnZW5lcmF0ZWQgQUNLcworCis1LjguMTYuICBQUk9QIDQ4NzA6IFBST1BfTUFDX0JMQUNLTElTVAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKFQoRSkpIgorICAgbyAgUmVxdWlyZWQgY2FwYWJpbGl0eTogIkNBUF9NQUNfV0hJVEVMSVNUIgorCisgICBTdHJ1Y3R1cmUgUGFyYW1ldGVyczoKKworICAgbyAgIkUiOiBFVUk2NCBhZGRyZXNzIG9mIG5vZGUKKworNS44LjE3LiAgUFJPUCA0ODcxOiBQUk9QX01BQ19CTEFDS0xJU1RfRU5BQkxFRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIgorICAgbyAgUmVxdWlyZWQgY2FwYWJpbGl0eTogIkNBUF9NQUNfV0hJVEVMSVNUIgorCis1LjkuICBORVQgUHJvcGVydGllcworCis1LjkuMS4gIFBST1AgNjQ6IFBST1BfTkVUX1NBVkVECisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgbmV0d29yayBzdGF0ZSBzdG9yZWQvc2F2ZWQuCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA0M10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzUuOS4yLiAgUFJPUCA2NTogUFJPUF9ORVRfSUZfVVAKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgTmV0d29yayBpbnRlcmZhY2UgdXAvZG93biBzdGF0dXMuICBOb24temVybyAoc2V0IHRvIDEpIGluZGljYXRlcyB1cCwKKyAgIHplcm8gaW5kaWNhdGVzIGRvd24uCisKKzUuOS4zLiAgUFJPUCA2NjogUFJPUF9ORVRfU1RBQ0tfVVAKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKyAgIG8gIFVuaXQ6IEVudW1lcmF0aW9uCisKKyAgIFRocmVhZCBzdGFjayBvcGVyYXRpb25hbCBzdGF0dXMuICBOb24temVybyAoc2V0IHRvIDEpIGluZGljYXRlcyB1cCwKKyAgIHplcm8gaW5kaWNhdGVzIGRvd24uCisKKzUuOS40LiAgUFJPUCA2NzogUFJPUF9ORVRfUk9MRQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorICAgbyAgVW5pdDogRW51bWVyYXRpb24KKworICAgVmFsdWVzOgorCisgICBvICAwOiAiTkVUX1JPTEVfREVUQUNIRUQiCisgICBvICAxOiAiTkVUX1JPTEVfQ0hJTEQiCisgICBvICAyOiAiTkVUX1JPTEVfUk9VVEVSIgorICAgbyAgMzogIk5FVF9ST0xFX0xFQURFUiIKKworNS45LjUuICBQUk9QIDY4OiBQUk9QX05FVF9ORVRXT1JLX05BTUUKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiVSIKKworNS45LjYuICBQUk9QIDY5OiBQUk9QX05FVF9YUEFOSUQKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiRCIKKworNS45LjcuICBQUk9QIDcwOiBQUk9QX05FVF9NQVNURVJfS0VZCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkQiCisKKworCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDQ0XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNS45LjguICBQUk9QIDcxOiBQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUgorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJMIgorCis1LjkuOS4gIFBST1AgNzI6IFBST1BfTkVUX1BBUlRJVElPTl9JRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJMIgorCisgICBUaGUgcGFydGl0aW9uIElEIG9mIHRoZSBwYXJ0aXRpb24gdGhhdCB0aGlzIG5vZGUgaXMgYSBtZW1iZXIgb2YuCisKKzUuOS4xMC4gIFBST1AgNzM6IFBST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORworCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIgorCis1LjkuMTEuICBQUk9QIDc0OiBQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJMIgorCis1LjkuMTIuICBQUk9QIDc1OiBQUk9QX05FVF9QU0tDCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkQiCisKKzUuMTAuICBJUHY2IFByb3BlcnRpZXMKKworNS4xMC4xLiAgUFJPUCA5NjogUFJPUF9JUFY2X0xMX0FERFIKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICI2IgorCisgICBJUHY2IEFkZHJlc3MKKworNS4xMC4yLiAgUFJPUCA5NzogUFJPUF9JUFY2X01MX0FERFIKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICI2IgorCisgICBJUHY2IEFkZHJlc3MgKyBQcmVmaXggTGVuZ3RoCisKKzUuMTAuMy4gIFBST1AgOTg6IFBST1BfSVBWNl9NTF9QUkVGSVgKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiNkMiCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDQ1XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgSVB2NiBQcmVmaXggKyBQcmVmaXggTGVuZ3RoCisKKzUuMTAuNC4gIFBST1AgOTk6IFBST1BfSVBWNl9BRERSRVNTX1RBQkxFCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEodCg2Q0xMQykpIgorCisgICBBcnJheSBvZiBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmc6CisKKyAgIG8gICI2IjogSVB2NiBBZGRyZXNzCisgICBvICAiQyI6IE5ldHdvcmsgUHJlZml4IExlbmd0aAorICAgbyAgIkwiOiBWYWxpZCBMaWZldGltZQorICAgbyAgIkwiOiBQcmVmZXJyZWQgTGlmZXRpbWUKKyAgIG8gICJDIjogRmxhZ3MKKworNS4xMC41LiAgUFJPUCAxMDE6IFBST1BfSVB2Nl9JQ01QX1BJTkdfT0ZGTE9BRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIgorCisgICBBbGxvdyB0aGUgTkNQIHRvIGRpcmVjdGx5IHJlc3BvbmQgdG8gSUNNUCBwaW5nIHJlcXVlc3RzLiAgSWYgdGhpcyBpcworICAgdHVybmVkIG9uLCBwaW5nIHJlcXVlc3QgSUNNUCBwYWNrZXRzIHdpbGwgbm90IGJlIHBhc3NlZCB0byB0aGUgaG9zdC4KKworICAgRGVmYXVsdCB2YWx1ZSBpcyAiZmFsc2UiLgorCis1LjExLiAgRGVidWcgUHJvcGVydGllcworCis1LjExLjEuICBQUk9QIDE2Mzg0OiBQUk9QX0RFQlVHX1RFU1RfQVNTRVJUCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgUmVhZGluZyB0aGlzIHByb3BlcnR5IHdpbGwgY2F1c2UgYW4gYXNzZXJ0IG9uIHRoZSBOQ1AuICBUaGlzIGlzCisgICBpbnRlbmRlZCBmb3IgdGVzdGluZyB0aGUgYXNzZXJ0IGZ1bmN0aW9uYWxpdHkgb2YgdW5kZXJseWluZyBwbGF0Zm9ybS8KKyAgIE5DUC4gIEFzc2VydCBzaG91bGQgaWRlYWxseSBjYXVzZSB0aGUgTkNQIHRvIHJlc2V0LCBidXQgaWYgImFzc2VydCIKKyAgIGlzIG5vdCBzdXBwb3J0ZWQgb3IgZGlzYWJsZWQgYm9vbGVhbiB2YWx1ZSBvZiAiZmFsc2UiIGlzIHJldHVybmVkIGluCisgICByZXNwb25zZS4KKworNS4xMS4yLiAgUFJPUCAxNjM4NTogUFJPUF9ERUJVR19OQ1BfTE9HX0xFVkVMCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisKKyAgIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgTkNQIGxvZyBsZXZlbC4gIEN1cnJlbnRseSBkZWZpbmVkIHZhbHVlcyBhcmUKKyAgICh3aGljaCBmb2xsb3dzIHRoZSBSRkMgNTQyNCk6CisKKyAgIG8gIDA6IEVtZXJnZW5jeSAoZW1lcmcpLgorICAgbyAgMTogQWxlcnQgKGFsZXJ0KS4KKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDQ2XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgMjogQ3JpdGljYWwgKGNyaXQpLgorICAgbyAgMzogRXJyb3IgKGVycikuCisgICBvICA0OiBXYXJuaW5nICh3YXJuKS4KKyAgIG8gIDU6IE5vdGljZSAobm90aWNlKS4KKyAgIG8gIDY6IEluZm9ybWF0aW9uIChpbmZvKS4KKyAgIG8gIDc6IERlYnVnIChkZWJ1ZykuCisKKyAgIElmIHRoZSBOQ1Agc3VwcG9ydHMgZHluYW1pYyBsb2cgbGV2ZWwgY29udHJvbCwgc2V0dGluZyB0aGlzIHByb3BlcnR5CisgICBjaGFuZ2VzIHRoZSBsb2cgbGV2ZWwgYWNjb3JkaW5nbHkuICBHZXR0aW5nIHRoZSB2YWx1ZSByZXR1cm5zIHRoZQorICAgY3VycmVudCBsb2cgbGV2ZWwuICBJZiB0aGUgZHluYW1pYyBsb2cgbGV2ZWwgY29udHJvbCBpcyBub3QKKyAgIHN1cHBvcnRlZCwgc2V0dGluZyB0aGlzIHByb3BlcnR5IHJldHVybnMgYSAiUFJPUF9MQVNUX1NUQVRVUyIgd2l0aAorICAgIlNUQVRVU19JTlZBTElEX0NPTU1BTkRfRk9SX1BST1AiLgorCis2LiAgU3RhdHVzIENvZGVzCisKKyAgIFN0YXR1cyBjb2RlcyBhcmUgc2VudCBmcm9tIHRoZSBOQ1AgdG8gdGhlIGhvc3QgdmlhICJQUk9QX0xBU1RfU1RBVFVTIgorICAgdXNpbmcgdGhlICJDTURfVkFMVUVfSVMiIGNvbW1hbmQgdG8gaW5kaWNhdGUgdGhlIHJldHVybiBzdGF0dXMgb2YgYQorICAgcHJldmlvdXMgY29tbWFuZC4gIEFzIHdpdGggYW55IHJlc3BvbnNlLCB0aGUgVElEIGZpZWxkIG9mIHRoZSBGTEFHCisgICBieXRlIGlzIHVzZWQgdG8gY29ycmVsYXRlIHRoZSByZXNwb25zZSB3aXRoIHRoZSByZXF1ZXN0LgorCisgICBOb3RlIHRoYXQgbW9zdCBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQgY29tbWFuZHMgZG8gbm90IGluZGljYXRlIGEgbGFzdAorICAgc3RhdHVzIG9mICJTVEFUVVNfT0siLiAgVGhlIHVzdWFsIHdheSB0aGUgTkNQIGluZGljYXRlcyBhIHN1Y2Nlc3NmdWwKKyAgIGNvbW1hbmQgaXMgdG8gbWlycm9yIHRoZSBwcm9wZXJ0eSBjaGFuZ2UgYmFjayB0byB0aGUgaG9zdC4gIEZvcgorICAgZXhhbXBsZSwgaWYgeW91IGRvIGEgIkNNRF9WQUxVRV9TRVQiIG9uICJQUk9QX1BIWV9FTkFCTEVEIiwgdGhlIE5DUAorICAgd291bGQgaW5kaWNhdGUgc3VjY2VzcyBieSByZXNwb25kaW5nIHdpdGggYSAiQ01EX1ZBTFVFX0lTIiBmb3IKKyAgICJQUk9QX1BIWV9FTkFCTEVEIi4gIElmIHRoZSBjb21tYW5kIGZhaWxlZCwgIlBST1BfTEFTVF9TVEFUVVMiIHdvdWxkCisgICBiZSBlbWl0dGVkIGluc3RlYWQuCisKKyAgIFNlZSBTZWN0aW9uIDUuNS4xIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uICJQUk9QX0xBU1RfU1RBVFVTIi4KKworICAgbyAgMDogIlNUQVRVU19PSyI6IE9wZXJhdGlvbiBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKyAgIG8gIDE6ICJTVEFUVVNfRkFJTFVSRSI6IE9wZXJhdGlvbiBoYXMgZmFpbGVkIGZvciBzb21lIHVuZGVmaW5lZAorICAgICAgcmVhc29uLgorICAgbyAgMjogIlNUQVRVU19VTklNUExFTUVOVEVEIjogVGhlIGdpdmVuIG9wZXJhdGlvbiBoYXMgbm90IGJlZW4KKyAgICAgIGltcGxlbWVudGVkLgorICAgbyAgMzogIlNUQVRVU19JTlZBTElEX0FSR1VNRU5UIjogQW4gYXJndW1lbnQgdG8gdGhlIGdpdmVuIG9wZXJhdGlvbgorICAgICAgaXMgaW52YWxpZC4KKyAgIG8gIDQ6ICJTVEFUVVNfSU5WQUxJRF9TVEFURSIgOiBUaGUgZ2l2ZW4gb3BlcmF0aW9uIGlzIGludmFsaWQgZm9yIHRoZQorICAgICAgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGV2aWNlLgorICAgbyAgNTogIlNUQVRVU19JTlZBTElEX0NPTU1BTkQiOiBUaGUgZ2l2ZW4gY29tbWFuZCBpcyBub3QgcmVjb2duaXplZC4KKyAgIG8gIDY6ICJTVEFUVVNfSU5WQUxJRF9JTlRFUkZBQ0UiOiBUaGUgZ2l2ZW4gU3BpbmVsIGludGVyZmFjZSBpcyBub3QKKyAgICAgIHN1cHBvcnRlZC4KKyAgIG8gIDc6ICJTVEFUVVNfSU5URVJOQUxfRVJST1IiOiBBbiBpbnRlcm5hbCBydW50aW1lIGVycm9yIGhhcworICAgICAgb2NjdXJyZWQuCisgICBvICA4OiAiU1RBVFVTX1NFQ1VSSVRZX0VSUk9SIjogQSBzZWN1cml0eSBvciBhdXRoZW50aWNhdGlvbiBlcnJvciBoYXMKKyAgICAgIG9jY3VycmVkLgorICAgbyAgOTogIlNUQVRVU19QQVJTRV9FUlJPUiI6IEFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZQorICAgICAgY29tbWFuZC4KKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDQ3XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgMTA6ICJTVEFUVVNfSU5fUFJPR1JFU1MiOiBUaGUgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzIGFuZCB3aWxsIGJlCisgICAgICBjb21wbGV0ZWQgYXN5bmNocm9ub3VzbHkuCisgICBvICAxMTogIlNUQVRVU19OT01FTSI6IFRoZSBvcGVyYXRpb24gaGFzIGJlZW4gcHJldmVudGVkIGR1ZSB0byBtZW1vcnkKKyAgICAgIHByZXNzdXJlLgorICAgbyAgMTI6ICJTVEFUVVNfQlVTWSI6IFRoZSBkZXZpY2UgaXMgY3VycmVudGx5IHBlcmZvcm1pbmcgYSBtdXR1YWxseQorICAgICAgZXhjbHVzaXZlIG9wZXJhdGlvbi4KKyAgIG8gIDEzOiAiU1RBVFVTX1BST1BfTk9UX0ZPVU5EIjogVGhlIGdpdmVuIHByb3BlcnR5IGlzIG5vdCByZWNvZ25pemVkLgorICAgbyAgMTQ6ICJTVEFUVVNfUEFDS0VUX0RST1BQRUQiOiBUaGUgcGFja2V0IHdhcyBkcm9wcGVkLgorICAgbyAgMTU6ICJTVEFUVVNfRU1QVFkiOiBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gaXMgZW1wdHkuCisgICBvICAxNjogIlNUQVRVU19DTURfVE9PX0JJRyI6IFRoZSBjb21tYW5kIHdhcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZQorICAgICAgaW50ZXJuYWwgYnVmZmVyLgorICAgbyAgMTc6ICJTVEFUVVNfTk9fQUNLIjogVGhlIHBhY2tldCB3YXMgbm90IGFja25vd2xlZGdlZC4KKyAgIG8gIDE4OiAiU1RBVFVTX0NDQV9GQUlMVVJFIjogVGhlIHBhY2tldCB3YXMgbm90IHNlbnQgZHVlIHRvIGEgQ0NBCisgICAgICBmYWlsdXJlLgorICAgbyAgMTk6ICJTVEFUVVNfQUxSRUFEWSI6IFRoZSBvcGVyYXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyBvciB0aGUKKyAgICAgIHByb3BlcnR5IHdhcyBhbHJlYWR5IHNldCB0byB0aGUgZ2l2ZW4gdmFsdWUuCisgICBvICAyMDogIlNUQVRVU19JVEVNX05PVF9GT1VORCI6IFRoZSBnaXZlbiBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCBpbgorICAgICAgdGhlIHByb3BlcnR5LgorICAgbyAgMjE6ICJTVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QIjogVGhlIGdpdmVuIGNvbW1hbmQgY2Fubm90IGJlCisgICAgICBwZXJmb3JtZWQgb24gdGhpcyBwcm9wZXJ0eS4KKyAgIG8gIDIyLTExMTogUkVTRVJWRUQKKyAgIG8gIDExMi0xMjc6IFJlc2V0IENhdXNlcworCisgICAgICAqICAxMTI6ICJTVEFUVVNfUkVTRVRfUE9XRVJfT04iCisgICAgICAqICAxMTM6ICJTVEFUVVNfUkVTRVRfRVhURVJOQUwiCisgICAgICAqICAxMTQ6ICJTVEFUVVNfUkVTRVRfU09GVFdBUkUiCisgICAgICAqICAxMTU6ICJTVEFUVVNfUkVTRVRfRkFVTFQiCisgICAgICAqICAxMTY6ICJTVEFUVVNfUkVTRVRfQ1JBU0giCisgICAgICAqICAxMTc6ICJTVEFUVVNfUkVTRVRfQVNTRVJUIgorICAgICAgKiAgMTE4OiAiU1RBVFVTX1JFU0VUX09USEVSIgorICAgICAgKiAgMTE5OiAiU1RBVFVTX1JFU0VUX1VOS05PV04iCisgICAgICAqICAxMjA6ICJTVEFUVVNfUkVTRVRfV0FUQ0hET0ciCisgICAgICAqICAxMjEtMTI3OiBSRVNFUlZFRC1SRVNFVC1DT0RFUworICAgbyAgMTI4IC0gMTUsMzU5OiBVTkFMTE9DQVRFRAorICAgbyAgMTUsMzYwIC0gMTYsMzgzOiBWZW5kb3Itc3BlY2lmaWMKKyAgIG8gIDE2LDM4NCAtIDEsOTk5LDk5OTogVU5BTExPQ0FURUQKKyAgIG8gIDIsMDAwLDAwMCAtIDIsMDk3LDE1MTogRXhwZXJpbWVudGFsIFVzZSBPbmx5IChNVVNUIE5FVkVSIGJlIHVzZWQKKyAgICAgIGluIHByb2R1Y3Rpb24hKQorCis3LiAgVGVjaG5vbG9neTogVGhyZWFkKFIpCisKKyAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZW1hbnRpY3MgcmVxdWlyZWQKKyAgIGZvciBtYW5hZ2luZyBhIFRocmVhZChSKSBOQ1AuCisKKyAgIFRocmVhZChSKSBOQ1BzIGhhdmUgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CisKKyAgIG8gIFRoZSBwcm9wZXJ0eSAiUFJPUF9JTlRFUkZBQ0VfVFlQRSIgbXVzdCBiZSAzLgorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA0OF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIG8gIFRoZSBub24tb3B0aW9uYWwgcHJvcGVydGllcyBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIE1VU1QgYmUKKyAgICAgIGltcGxlbWVudGVkOiBDT1JFLCBQSFksIE1BQywgTkVULCBhbmQgSVBWNi4KKworICAgQWxsIHNlcmlvdXMgaW1wbGVtZW50YXRpb25zIG9mIGFuIE5DUCBTSE9VTEQgYWxzbyBzdXBwb3J0IHRoZSBuZXR3b3JrCisgICBzYXZlIGZlYXR1cmUgKFNlZSBTZWN0aW9uIDgpLgorCis3LjEuICBDYXBhYmlsaXRpZXMKKworICAgVGhlIFRocmVhZChSKSB0ZWNobm9sb2d5IGRlZmluZXMgdGhlIGZvbGxvd2luZyBjYXBhYmlsaXRpZXM6CisKKyAgIG8gICJDQVBfTkVUX1RIUkVBRF8xXzAiIC0gSW5kaWNhdGVzIHRoYXQgdGhlIE5DUCBpbXBsZW1lbnRzIHYxLjAgb2YKKyAgICAgIHRoZSBUaHJlYWQoUikgc3RhbmRhcmQuCisgICBvICAiQ0FQX05FVF9USFJFQURfMV8xIiAtIEluZGljYXRlcyB0aGF0IHRoZSBOQ1AgaW1wbGVtZW50cyB2MS4xIG9mCisgICAgICB0aGUgVGhyZWFkKFIpIHN0YW5kYXJkLgorCis3LjIuICBQcm9wZXJ0aWVzCisKKyAgIFByb3BlcnRpZXMgZm9yIFRocmVhZChSKSBhcmUgYWxsb2NhdGVkIG91dCBvZiB0aGUgIlRlY2giIHByb3BlcnR5CisgICBzZWN0aW9uIChzZWUgU2VjdGlvbiA1LjQpLgorCis3LjIuMS4gIFBST1AgODA6IFBST1BfVEhSRUFEX0xFQURFUl9BRERSCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiNiIKKworICAgVGhlIElQdjYgYWRkcmVzcyBvZiB0aGUgbGVhZGVyLiAgKE5vdGU6IE1heSBjaGFuZ2UgdG8gbG9uZyBhbmQgc2hvcnQKKyAgIGFkZHJlc3Mgb2YgbGVhZGVyKQorCis3LjIuMi4gIFBST1AgODE6IFBST1BfVEhSRUFEX1BBUkVOVAorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkVTIgorICAgbyAgTEFERFIsIFNBRERSCisKKyAgIFRoZSBsb25nIGFkZHJlc3MgYW5kIHNob3J0IGFkZHJlc3Mgb2YgdGhlIHBhcmVudCBvZiB0aGlzIG5vZGUuCisKKzcuMi4zLiAgUFJPUCA4MjogUFJPUF9USFJFQURfQ0hJTERfVEFCTEUKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKHQoRVMpKSIKKworICAgVGFibGUgY29udGFpbmluZyB0aGUgbG9uZyBhbmQgc2hvcnQgYWRkcmVzc2VzIG9mIGFsbCB0aGUgY2hpbGRyZW4gb2YKKyAgIHRoaXMgbm9kZS4KKworCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA0OV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzcuMi40LiAgUFJPUCA4MzogUFJPUF9USFJFQURfTEVBREVSX1JJRAorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisKKyAgIFRoZSByb3V0ZXItaWQgb2YgdGhlIGN1cnJlbnQgbGVhZGVyLgorCis3LjIuNS4gIFBST1AgODQ6IFBST1BfVEhSRUFEX0xFQURFUl9XRUlHSFQKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBUaGUgbGVhZGVyIHdlaWdodCBvZiB0aGUgY3VycmVudCBsZWFkZXIuCisKKzcuMi42LiAgUFJPUCA4NTogUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBUaGUgbGVhZGVyIHdlaWdodCBmb3IgdGhpcyBub2RlLgorCis3LjIuNy4gIFBST1AgODY6IFBST1BfVEhSRUFEX05FVFdPUktfREFUQQorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkQiCisKKyAgIFRoZSBsb2NhbCBuZXR3b3JrIGRhdGEuCisKKzcuMi44LiAgUFJPUCA4NzogUFJPUF9USFJFQURfTkVUV09SS19EQVRBX1ZFUlNJT04KKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJTIgorCis3LjIuOS4gIFBST1AgODg6IFBST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEEKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJEIgorCisgICBUaGUgbG9jYWwgc3RhYmxlIG5ldHdvcmsgZGF0YS4KKworNy4yLjEwLiAgUFJPUCA4OTogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQV9WRVJTSU9OCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiUyIKKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNTBdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis3LjIuMTEuICBQUk9QIDkwOiBQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFMKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiQSh0KDZDYkNiKSkiCisKKyAgIERhdGEgcGVyIGl0ZW0gaXM6CisKKyAgIG8gICI2IjogSVB2NiBQcmVmaXgKKyAgIG8gICJDIjogUHJlZml4IGxlbmd0aCBpbiBiaXRzCisgICBvICAiYiI6IFN0YWJsZSBmbGFnCisgICBvICAiQyI6IFRMViBmbGFncworICAgbyAgImIiOiAiSXMgZGVmaW5lZCBsb2NhbGx5IiBmbGFnLiAgU2V0IGlmIHRoaXMgbmV0d29yayB3YXMgbG9jYWxseQorICAgICAgZGVmaW5lZC4gIEFzc3VtZWQgdG8gYmUgdHJ1ZSBmb3Igc2V0LCBpbnNlcnQgYW5kIHJlcGxhY2UuICBDbGVhcgorICAgICAgaWYgdGhlIG9uIG1lc2ggbmV0d29yayB3YXMgZGVmaW5lZCBieSBhbm90aGVyIG5vZGUuCisKKzcuMi4xMi4gIFBST1AgOTE6IFBST1BfVEhSRUFEX09GRl9NRVNIX1JPVVRFUworCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKHQoNkNiQ2JiKSkiCisKKyAgIERhdGEgcGVyIGl0ZW0gaXM6CisKKyAgIG8gICI2IjogUm91dGUgUHJlZml4CisgICBvICAiQyI6IFByZWZpeCBsZW5ndGggaW4gYml0cworICAgbyAgImIiOiBTdGFibGUgZmxhZworICAgbyAgIkMiOiBSb3V0ZSBwcmVmZXJlbmNlIGZsYWdzCisgICBvICAiYiI6ICJJcyBkZWZpbmVkIGxvY2FsbHkiIGZsYWcuICBTZXQgaWYgdGhpcyByb3V0ZSBpbmZvIHdhcworICAgICAgbG9jYWxseSBkZWZpbmVkIGFzIHBhcnQgb2YgbG9jYWwgbmV0d29yayBkYXRhLiAgQXNzdW1lZCB0byBiZSB0cnVlCisgICAgICBmb3Igc2V0LCBpbnNlcnQgYW5kIHJlcGxhY2UuICBDbGVhciBpZiB0aGUgcm91dGUgaXMgcGFydCBvZgorICAgICAgcGFydGl0aW9uJ3MgbmV0d29yayBkYXRhLgorICAgbyAgImIiOiAiTmV4dCBob3AgaXMgdGhpcyBkZXZpY2UiIGZsYWcuICBTZXQgaWYgdGhlIG5leHQgaG9wIGZvciB0aGUKKyAgICAgIHJvdXRlIGlzIHRoaXMgZGV2aWNlIGl0c2VsZiAoaS5lLiwgcm91dGUgd2FzIGFkZGVkIGJ5IHRoaXMgZGV2aWNlKQorICAgICAgVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIHdoZW4gYWRkaW5nIGFuIGV4dGVybmFsIHJvdXRlLiAgRm9yIGFueQorICAgICAgYWRkZWQgcm91dGUgdGhlIG5leHQgaG9wIGlzIHRoaXMgZGV2aWNlLgorCis3LjIuMTMuICBQUk9QIDkyOiBQUk9QX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFMKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiQShTKSIKKworNy4yLjE0LiAgUFJPUCA5MzogUFJPUF9USFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImIiCisKKyAgIFNldCB0byB0cnVlIGJlZm9yZSBjaGFuZ2luZyBsb2NhbCBuZXQgZGF0YS4gIFNldCB0byBmYWxzZSB3aGVuCisgICBmaW5pc2hlZC4gIFRoaXMgYWxsb3dzIGNoYW5nZXMgdG8gYmUgYWdncmVnYXRlZCBpbnRvIHNpbmdsZSBldmVudHMuCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDUxXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNy4yLjE1LiAgUFJPUCA5NDogUFJPUF9USFJFQURfTU9ERQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBUaGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZSBUTFYgZm9yIHRoaXMgbm9kZS4gIFRoZQorICAgbWVhbmluZyBvZiB0aGUgYml0cyBpbiB0aGlzIGJpdGZpZWxkIGFyZSBkZWZpbmVkIGJ5IHNlY3Rpb24gNC41LjIgb2YKKyAgIHRoZSBUaHJlYWQoUikgc3BlY2lmaWNhdGlvbi4KKworNy4yLjE2LiAgUFJPUCA1Mzc2OiBQUk9QX1RIUkVBRF9DSElMRF9USU1FT1VUCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkwiCisKKyAgIFVzZWQgd2hlbiBvcGVyYXRpbmcgaW4gdGhlIENoaWxkIHJvbGUuCisKKzcuMi4xNy4gIFBST1AgNTM3NzogUFJPUF9USFJFQURfUkxPQzE2CisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIlMiCisKKzcuMi4xOC4gIFBST1AgNTM3ODogUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xECisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisKKzcuMi4xOS4gIFBST1AgNTM3OTogUFJPUF9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJMIgorCis3LjIuMjAuICBQUk9QIDUzODA6IFBST1BfVEhSRUFEX05FVFdPUktfSURfVElNRU9VVAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBBbGxvd3MgeW91IHRvIGdldCBvciBzZXQgdGhlIFRocmVhZChSKSAiTkVUV09SS19JRF9USU1FT1VUIiBjb25zdGFudCwKKyAgIGFzIGRlZmluZWQgYnkgdGhlIFRocmVhZChSKSBzcGVjaWZpY2F0aW9uLgorCis3LjIuMjEuICBQUk9QIDUzODE6IFBST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUvV3JpdGUtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiQShDKSIgKExpc3Qgb2YgYWN0aXZlIHRocmVhZCByb3V0ZXIgaWRzKQorCisgICBOb3RlIHRoYXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBzdXBwb3J0ICJDTURfR0VUX1ZBTFVFIiByb3V0ZXIKKyAgIGlkcywgYnV0IG1heSBzdXBwb3J0ICJDTURfUkVNT1ZFX1ZBTFVFIiB3aGVuIHRoZSBub2RlIGlzIGEgbGVhZGVyLgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDUyXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNy4yLjIyLiAgUFJPUCA1MzgyOiBQUk9QX1RIUkVBRF9STE9DMTZfREVCVUdfUEFTU1RIUlUKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgQWxsb3cgdGhlIEhPU1QgdG8gZGlyZWN0bHkgb2JzZXJ2ZSBhbGwgSVB2NiBwYWNrZXRzIHJlY2VpdmVkIGJ5IHRoZQorICAgTkNQLCBpbmNsdWRpbmcgb25lcyBzZW50IHRvIHRoZSBSTE9DMTYgYWRkcmVzcy4KKworICAgRGVmYXVsdCB2YWx1ZSBpcyAiZmFsc2UiLgorCis3LjIuMjMuICBQUk9QIDUzODM6IFBST1BfVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgQWxsb3cgdGhlIEhPU1QgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIHJvdXRlciByb2xlIGlzIGVuYWJsZWQuCisgICBJZiBjdXJyZW50IHJvbGUgaXMgYSByb3V0ZXIsIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byAiZmFsc2UiIHN0YXJ0cworICAgYSByZS1hdHRhY2ggcHJvY2VzcyBhcyBhbiBlbmQtZGV2aWNlLgorCis3LjIuMjQuICBQUk9QIDUzODQ6IFBST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xECisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisKKzcuMi4yNS4gIFBST1AgNTM4NTogUFJPUF9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVIKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiQyIKKworICAgU3BlY2lmaWVzIHRoZSBzZWxmIGltcG9zZWQgcmFuZG9tIGRlbGF5IGluIHNlY29uZHMgYSBSRUVEIHdhaXRzCisgICBiZWZvcmUgcmVnaXN0ZXJpbmcgdG8gYmVjb21lIGFuIEFjdGl2ZSBSb3V0ZXIuCisKKzcuMi4yNi4gIFBST1AgNTM4NjogUFJPUF9USFJFQURfUFJFRkVSUkVEX1JPVVRFUl9JRAorCisgICBvICBUeXBlOiBXcml0ZS1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBTcGVjaWZpZXMgdGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQuICBVcG9uIGJlY29taW5nIGEgcm91dGVyL2xlYWRlciB0aGUKKyAgIG5vZGUgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgUm91dGVyIElkLiAgSWYgdGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQgaXMKKyAgIG5vdCBzZXQgb3IgaWYgaXQgY2FuIG5vdCBiZSB1c2VkLCBhIHJhbmRvbWx5IGdlbmVyYXRlZCByb3V0ZXIgaWQgaXMKKyAgIHBpY2tlZC4gIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNldCBvbmx5IHdoZW4gdGhlIGRldmljZSByb2xlIGlzIGVpdGhlcgorICAgZGV0YWNoZWQgb3IgZGlzYWJsZWQuCisKKzcuMi4yNy4gIFBST1AgNTM4NzogUFJPUF9USFJFQURfTkVJR0hCT1JfVEFCTEUKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKHQoRVNMQ2NDYkxMKSkiCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDUzXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgRGF0YSBwZXIgaXRlbSBpczoKKworICAgbyAgIkUiOiBFeHRlbmRlZC9sb25nIGFkZHJlc3MKKyAgIG8gICJTIjogUkxPQzE2CisgICBvICAiTCI6IEFnZQorICAgbyAgIkMiOiBMaW5rIFF1YWxpdHkgSW4KKyAgIG8gICJjIjogQXZlcmFnZSBSU1MKKyAgIG8gICJDIjogTW9kZSAoYml0LWZsYWdzKQorICAgbyAgImIiOiAidHJ1ZSIgaWYgbmVpZ2hib3IgaXMgYSBjaGlsZCwgImZhbHNlIiBvdGhlcndpc2UuCisgICBvICAiTCI6IExpbmsgRnJhbWUgQ291bnRlcgorICAgbyAgIkwiOiBNTEUgRnJhbWUgQ291bnRlcgorCis3LjIuMjguICBQUk9QIDUzODg6IFBST1BfVEhSRUFEX0NISUxEX0NPVU5UX01BWAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoaWxkcmVuIGN1cnJlbnRseSBhbGxvd2VkLiAgVGhpcworICAgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCB3aGVuIFRocmVhZChSKSBwcm90b2NvbCBvcGVyYXRpb24gaGFzIGJlZW4KKyAgIHN0b3BwZWQuCisKKzcuMi4yOS4gIFBST1AgNTM4OTogUFJPUF9USFJFQURfTEVBREVSX05FVFdPUktfREFUQQorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkQiCisKKyAgIFRoZSBsZWFkZXIgbmV0d29yayBkYXRhLgorCis3LjIuMzAuICBQUk9QIDUzOTA6IFBST1BfVEhSRUFEX1NUQUJMRV9MRUFERVJfTkVUV09SS19EQVRBCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiRCIKKworICAgVGhlIHN0YWJsZSBsZWFkZXIgbmV0d29yayBkYXRhLgorCis3LjIuMzEuICBQUk9QIDUzOTE6IFBST1BfVEhSRUFEX0pPSU5FUlMKKworICAgbyAgVHlwZTogSW5zZXJ0L1JlbW92ZSBPbmx5IChvcHRpb25hbGx5IFJlYWQtV3JpdGUpCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKHQoVUxFKSkiCisgICBvICBSZXF1aXJlZCBjYXBhYmlsaXR5OiAiQ0FQX1RIUkVBRF9DT01NSVNTSU9ORVIiCisKKyAgIERhdGEgcGVyIGl0ZW0gaXM6CisKKyAgIG8gICJVIjogUFNLZAorICAgbyAgIkwiOiBUaW1lb3V0IGluIHNlY29uZHMKKyAgIG8gICJFIjogRXh0ZW5kZWQvbG9uZyBhZGRyZXNzIChvcHRpb25hbCkKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA1NF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFBhc3Nlc3MgUHJlLVNoYXJlZCBLZXkgZm9yIHRoZSBEZXZpY2UgdG8gdGhlIE5DUCBpbiB0aGUgY29tbWlzc2lvbmluZworICAgcHJvY2Vzcy4gIFdoZW4gdGhlIEV4dGVuZGVkIGFkZHJlc3MgaXMgb21taXRlZCBhbGwgRGV2aWNlcyB3aGljaAorICAgcHJvdmlkZWQgYSB2YWxpZCBQU0tkIGFyZSBhbGxvd2VkIHRvIGpvaW4gdGhlIFRocmVhZChSKSBOZXR3b3JrLgorCis3LjIuMzIuICBQUk9QIDUzOTI6IFBST1BfVEhSRUFEX0NPTU1JU1NJT05FUl9FTkFCTEVECisKKyAgIG8gIFR5cGU6IFdyaXRlIG9ubHkgKG9wdGlvbmFsbHkgUmVhZC1Xcml0ZSkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImIiCisgICBvICBSZXF1aXJlZCBjYXBhYmlsaXR5OiAiQ0FQX1RIUkVBRF9DT01NSVNTSU9ORVIiCisKKyAgIFNldCB0byB0cnVlIHRvIGVuYWJsZSB0aGUgbmF0aXZlIGNvbW1pc3Npb25lci4gIEl0IGlzIG1hbmRhdG9yeQorICAgYmVmb3JlIGFkZGluZyB0aGUgam9pbmVyIHRvIHRoZSBuZXR3b3JrLgorCis3LjIuMzMuICBQUk9QIDUzOTM6IFBST1BfVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVECisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImIiCisgICBvICBSZXF1aXJlZCBjYXBhYmlsaXR5OiAiQ0FQX1RIUkVBRF9UTUZfUFJPWFkiCisKKyAgIFNldCB0byB0cnVlIHRvIGVuYWJsZSB0aGUgVE1GIHByb3h5LgorCis3LjIuMzQuICBQUk9QIDUzOTQ6IFBST1BfVEhSRUFEX1RNRl9QUk9YWV9TVFJFQU0KKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZS1TdHJlYW0KKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImRTUyIKKyAgIG8gIFJlcXVpcmVkIGNhcGFiaWxpdHk6ICJDQVBfVEhSRUFEX1RNRl9QUk9YWSIKKworICAgRGF0YSBwZXIgaXRlbSBpczoKKworICAgbyAgImQiOiBDb0FQIGZyYW1lCisgICBvICAiUyI6IHNvdXJjZS9kZXN0aW5hdGlvbiBSTE9DL0FMT0MKKyAgIG8gICJTIjogc291cmNlL2Rlc3RpbmF0aW9uIHBvcnQKKworICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0rCisgICAgICAgICAgICAgICB8IE9jdGVjdHM6IHwgICAyICAgIHwgIG4gICB8ICAgIDIgICAgfCAgMiAgIHwKKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0rLS0tLS0tKworICAgICAgICAgICAgICAgfCBGaWVsZHM6ICB8IExlbmd0aCB8IENvQVAgfCBsb2NhdG9yIHwgcG9ydCB8CisgICAgICAgICAgICAgICArLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tKy0tLS0tLSsKKworICAgVGhpcyBwcm9wZXJ0eSBhbGxvd3MgdGhlIGhvc3QgdG8gc2VuZCBhbmQgcmVjZWl2ZSBUTUYgbWVzc2FnZXMgZnJvbQorICAgdGhlIE5DUCdzIFJMT0MgYWRkcmVzcyBhbmQgc3VwcG9ydCBUaHJlYWQtc3BlY2lmaWMgYm9yZGVyIHJvdXRlcgorICAgZnVuY3Rpb25zLgorCis3LjIuMzUuICBQUk9QIDUzOTU6IFBST1BfVEhSRUFEX0RJU09WRVJZX1NDQU5fSk9JTkVSX0ZMQUcKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOjogImIiCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDU1XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIHZhbHVlIHVzZWQgaW4gVGhyZWFkKFIpIE1MRSBEaXNjb3ZlcnkKKyAgIFJlcXVlc3QgVExWIGR1cmluZyBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24uICBEZWZhdWx0IHZhbHVlIGlzCisgICAiZmFsc2UiLgorCis3LjIuMzYuICBQUk9QIDUzOTY6IFBST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0VOQUJMRV9GSUxURVJJTkcKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOjogImIiCisKKyAgIFRoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSBFVUk2NCBmaWx0ZXJpbmcgZHVyaW5nCisgICBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24uICBEZWZhdWx0IHZhbHVlIGlzICJmYWxzZSIuCisKKzcuMi4zNy4gIFBST1AgNTM5NzogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQKKworICAgbyAgVHlwZTogUmVhZC13cml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOjogIlMiCisKKyAgIFRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSBQQU5JRCB1c2VkIGZvciBmaWx0ZXJpbmcgZHVyaW5nIGRpc2NvdmVyeQorICAgc2NhbiBvcGVyYXRpb24uICBEZWZhdWx0IHZhbHVlIGlzICIweGZmZmYiIChicm9hZGNhc3QgUEFOSUQpIHdoaWNoCisgICBkaXNhYmxlcyBQQU5JRCBmaWx0ZXJpbmcuCisKKzcuMi4zOC4gIFBST1AgNTM5ODogUFJPUF9USFJFQURfU1RFRVJJTkdfREFUQQorCisgICBvICBUeXBlOiBXcml0ZS1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJFIgorICAgbyAgUmVxdWlyZWQgY2FwYWJpbGl0eTogIkNBUF9PT0JfU1RFRVJJTkdfREFUQSIKKworICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHN0ZWVyaW5nIGRhdGEgZm9yIE1MRSBEaXNjb3ZlcnkKKyAgIFJlc3BvbnNlIG1lc3NhZ2VzLgorCisgICBvICBBbGwgemVyb3MgdG8gY2xlYXIgdGhlIHN0ZWVyaW5nIGRhdGEgKGluZGljYXRpbmcgbm8gc3RlZXJpbmcKKyAgICAgIGRhdGEpLgorICAgbyAgQWxsIDB4RkZzIHRvIHNldCB0aGUgc3RlZXJpbmcgZGF0YSAoYmxvb20gZmlsdGVyKSB0byBhY2NlcHQvYWxsb3cKKyAgICAgIGFsbC4KKyAgIG8gIEEgc3BlY2lmaWMgRVVJNjQgd2hpY2ggaXMgdGhlbiBhZGRlZCB0byBzdGVlcmluZyBkYXRhL2Jsb29tCisgICAgICBmaWx0ZXIuCisKKzguICBGZWF0dXJlOiBOZXR3b3JrIFNhdmUKKworICAgVGhlIG5ldHdvcmsgc2F2ZS9yZWNhbGwgZmVhdHVyZSBpcyBhbiBvcHRpb25hbCBOQ1AgY2FwYWJpbGl0eSB0aGF0LAorICAgd2hlbiBwcmVzZW50LCBhbGxvd3MgdGhlIGhvc3QgdG8gc2F2ZSBhbmQgcmVjYWxsIG5ldHdvcmsgY3JlZGVudGlhbHMKKyAgIGFuZCBzdGF0ZSB0byBhbmQgZnJvbSBub252b2xhdGlsZSBzdG9yYWdlLgorCisgICBUaGUgcHJlc2VuY2Ugb2YgdGhlIHNhdmUvcmVjYWxsIGZlYXR1cmUgY2FuIGJlIGRldGVjdGVkIGJ5IGNoZWNraW5nCisgICBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSAiQ0FQX05FVF9TQVZFIiBjYXBhYmlsaXR5IGluICJQUk9QX0NBUFMiLgorCisgICBOZXR3b3JrIGNsZWFyIGZlYXR1cmUgYWxsb3dzIGhvc3QgdG8gZXJhc2UgYWxsIG5ldHdvcmsgY3JlZGVudGlhbHMKKyAgIGFuZCBzdGF0ZSBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA1Nl0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzguMS4gIENvbW1hbmRzCisKKzguMS4xLiAgQ01EIDk6IChIb3N0LT5OQ1ApIENNRF9ORVRfU0FWRQorCisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgMSAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9ORVRfU0FWRSB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCisKKyAgIFNhdmUgbmV0d29yayBzdGF0ZSBjb21tYW5kLiAgU2F2ZXMgYW55IGN1cnJlbnQgbmV0d29yayBjcmVkZW50aWFscworICAgYW5kIHN0YXRlIG5lY2Vzc2FyeSB0byByZWNvbm5lY3QgdG8gdGhlIGN1cnJlbnQgbmV0d29yayB0byBub24tCisgICB2b2xhdGlsZSBtZW1vcnkuCisKKyAgIFRoaXMgb3BlcmF0aW9uIGFmZmVjdHMgbm9uLXZvbGF0aWxlIG1lbW9yeSBvbmx5LiAgVGhlIGN1cnJlbnQgbmV0d29yaworICAgaW5mb3JtYXRpb24gc3RvcmVkIGluIHZvbGF0aWxlIG1lbW9yeSBpcyB1bmFmZmVjdGVkLgorCisgICBUaGUgcmVzcG9uc2UgdG8gdGhpcyBjb21tYW5kIGlzIGFsd2F5cyBhICJDTURfUFJPUF9WQUxVRV9JUyIgZm9yCisgICAiUFJPUF9MQVNUX1NUQVRVUyIsIGluZGljYXRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorCisgICBUaGlzIGNvbW1hbmQgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlICJDQVBfTkVUX1NBVkUiIGNhcGFiaWxpdHkgaXMKKyAgIHNldC4KKworOC4xLjIuICBDTUQgMTA6IChIb3N0LT5OQ1ApIENNRF9ORVRfQ0xFQVIKKworICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgIDEgICAgICAgfAorICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9ORVRfQ0xFQVIgfAorICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCisgICBDbGVhciBzYXZlZCBuZXR3b3JrIHNldHRpbmdzIGNvbW1hbmQuICBFcmFzZXMgYWxsIG5ldHdvcmsgY3JlZGVudGlhbHMKKyAgIGFuZCBzdGF0ZSBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuICBUaGUgZXJhc2VkIHNldHRpbmdzIGluY2x1ZGUgYW55CisgICBkYXRhIHNhdmVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIG5ldHdvcmsgc3RhY2sgZmlybXdhcmUgYW5kL29yIGRhdGEKKyAgIHNhdmVkIGJ5ICJDTURfTkVUX1NBVkUiIG9wZXJhdGlvbi4KKworICAgVGhpcyBvcGVyYXRpb24gYWZmZWN0cyBub24tdm9sYXRpbGUgbWVtb3J5IG9ubHkuICBUaGUgY3VycmVudCBuZXR3b3JrCisgICBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gdm9sYXRpbGUgbWVtb3J5IGlzIHVuYWZmZWN0ZWQuCisKKyAgIFRoZSByZXNwb25zZSB0byB0aGlzIGNvbW1hbmQgaXMgYWx3YXlzIGEgIkNNRF9QUk9QX1ZBTFVFX0lTIiBmb3IKKyAgICJQUk9QX0xBU1RfU1RBVFVTIiwgaW5kaWNhdGluZyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisKKyAgIFRoaXMgY29tbWFuZCBpcyBhbHdheXMgYXZhaWxhYmxlIGluZGVwZW5kZW50IG9mIHRoZSB2YWx1ZSBvZgorICAgIkNBUF9ORVRfU0FWRSIgY2FwYWJpbGl0eS4KKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNTddCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis4LjEuMy4gIENNRCAxMTogKEhvc3QtPk5DUCkgQ01EX05FVF9SRUNBTEwKKworICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgIDEgICAgfCAgICAgICAxICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9ORVRfUkVDQUxMIHwKKyAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFJlY2FsbCBzYXZlZCBuZXR3b3JrIHN0YXRlIGNvbW1hbmQuICBSZWNhbGxzIGFueSBwcmV2aW91c2x5IHNhdmVkCisgICBuZXR3b3JrIGNyZWRlbnRpYWxzIGFuZCBzdGF0ZSBwcmV2aW91c2x5IHN0b3JlZCBieSAiQ01EX05FVF9TQVZFIgorICAgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorCisgICBUaGlzIGNvbW1hbmQgd2lsbCB0eXBpY2FsbHkgZ2VuZXJhdGVkIHNldmVyYWwgdW5zb2xpY2l0ZWQgcHJvcGVydHkKKyAgIHVwZGF0ZXMgYXMgdGhlIG5ldHdvcmsgc3RhdGUgaXMgbG9hZGVkLiAgQXQgdGhlIGNvbmNsdXNpb24gb2YKKyAgIGxvYWRpbmcsIHRoZSBhdXRob3JpdGF0aXZlIHJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCBpcyBhbHdheXMgYQorICAgIkNNRF9QUk9QX1ZBTFVFX0lTIiBmb3IgIlBST1BfTEFTVF9TVEFUVVMiLCBpbmRpY2F0aW5nIHRoZSByZXN1bHQgb2YKKyAgIHRoZSBvcGVyYXRpb24uCisKKyAgIFRoaXMgY29tbWFuZCBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgIkNBUF9ORVRfU0FWRSIgY2FwYWJpbGl0eSBpcworICAgc2V0LgorCis5LiAgRmVhdHVyZTogSG9zdCBCdWZmZXIgT2ZmbG9hZAorCisgICBUaGUgbWVtb3J5IG9uIGFuIE5DUCBtYXkgYmUgbXVjaCBtb3JlIGxpbWl0ZWQgdGhhbiB0aGUgbWVtb3J5IG9uIHRoZQorICAgaG9zdCBwcm9jZXNzb3IuICBJbiBzdWNoIHNpdHVhdGlvbnMsIGl0IGlzIHNvbWV0aW1lcyB1c2VmdWwgZm9yIHRoZQorICAgTkNQIHRvIG9mZmxvYWQgYnVmZmVycyB0byB0aGUgaG9zdCBwcm9jZXNzb3IgdGVtcG9yYXJpbHkgc28gdGhhdCBpdAorICAgY2FuIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9ucy4KKworICAgSG9zdCBidWZmZXIgb2ZmbG9hZCBpcyBhbiBvcHRpb25hbCBOQ1AgY2FwYWJpbGl0eSB0aGF0LCB3aGVuIHByZXNlbnQsCisgICBhbGxvd3MgdGhlIE5DUCB0byBzdG9yZSBkYXRhIGJ1ZmZlcnMgb24gdGhlIGhvc3QgcHJvY2Vzc29yIHRoYXQgY2FuCisgICBiZSByZWNhbGxlZCBhdCBhIGxhdGVyIHRpbWUuCisKKyAgIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVjdGVkIGJ5IHRoZSBob3N0IGJ5IGNoZWNraW5nCisgICBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSAiQ0FQX0hCTyIgY2FwYWJpbGl0eSBpbiAiUFJPUF9DQVBTIi4KKworOS4xLiAgQ29tbWFuZHMKKworOS4xLjEuICBDTUQgMTI6IChOQ1AtPkhvc3QpIENNRF9IQk9fT0ZGTE9BRAorCisgICBvICBBcmd1bWVudC1FbmNvZGluZzogIkxzY0QiCisKKyAgICAgICogICJPZmZsb2FkSWQiOiAzMi1iaXQgdW5pcXVlIGJsb2NrIGlkZW50aWZpZXIKKyAgICAgICogICJFeHBpcmF0aW9uIjogSW4gc2Vjb25kcy1mcm9tLW5vdworICAgICAgKiAgIlByaW9yaXR5IjogQ3JpdGljYWwsIEhpZ2gsIE1lZGl1bSwgTG93CisgICAgICAqICAiRGF0YSI6IERhdGEgdG8gb2ZmbG9hZAorCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNThdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis5LjEuMi4gIENNRCAxMzogKE5DUC0+SG9zdCkgQ01EX0hCT19SRUNMQUlNCisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiTGIiCisKKyAgICAgICogICJPZmZsb2FkSWQiOiAzMi1iaXQgdW5pcXVlIGJsb2NrIGlkZW50aWZpZXIKKyAgICAgICogICJLZWVwQWZ0ZXJSZWNsYWltIjogSWYgbm90IHNldCB0byB0cnVlLCB0aGUgYmxvY2sgd2lsbCBiZQorICAgICAgICAgZHJvcHBlZCBieSB0aGUgaG9zdCBhZnRlciBpdCBpcyBzZW50IHRvIHRoZSBOQ1AuCisKKzkuMS4zLiAgQ01EIDE0OiAoTkNQLT5Ib3N0KSBDTURfSEJPX0RST1AKKworICAgbyAgQXJndW1lbnQtRW5jb2Rpbmc6ICJMIgorCisgICAgICAqICAiT2ZmbG9hZElkIjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyCisKKzkuMS40LiAgQ01EIDE1OiAoSG9zdC0+TkNQKSBDTURfSEJPX09GRkxPQURFRAorCisgICBvICBBcmd1bWVudC1FbmNvZGluZzogIkxpIgorCisgICAgICAqICAiT2ZmbG9hZElkIjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyCisgICAgICAqICAiU3RhdHVzIjogU3RhdHVzIGNvZGUgZm9yIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKworOS4xLjUuICBDTUQgMTY6IChIb3N0LT5OQ1ApIENNRF9IQk9fUkVDTEFJTUVECisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiTGlEIgorCisgICAgICAqICAiT2ZmbG9hZElkIjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyCisgICAgICAqICAiU3RhdHVzIjogU3RhdHVzIGNvZGUgZm9yIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAgICAgICogICJEYXRhIjogRGF0YSB0aGF0IHdhcyBwcmV2aW91c2x5IG9mZmxvYWRlZCAoaWYgYW55KQorCis5LjEuNi4gIENNRCAxNzogKEhvc3QtPk5DUCkgQ01EX0hCT19EUk9QUEVECisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiTGkiCisKKyAgICAgICogICJPZmZsb2FkSWQiOiAzMi1iaXQgdW5pcXVlIGJsb2NrIGlkZW50aWZpZXIKKyAgICAgICogICJTdGF0dXMiOiBTdGF0dXMgY29kZSBmb3IgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorCis5LjIuICBQcm9wZXJ0aWVzCisKKzkuMi4xLiAgUFJPUCAxMDogUFJPUF9IQk9fTUVNX01BWAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJMIgorCisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAgICA0ICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCAiUFJPUF9IQk9fTUVNX01BWCIgfAorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDU5XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgRGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYXkgYmUgb2ZmbG9hZGVkIGZyb20gdGhlIE5DUCB0bworICAgdGhlIGhvc3QuICBEZWZhdWx0IHZhbHVlIGlzIHplcm8sIHNvIHRoaXMgcHJvcGVydHkgbXVzdCBiZSBzZXQgYnkgdGhlCisgICBob3N0IHRvIGEgbm9uLXplcm8gdmFsdWUgYmVmb3JlIHRoZSBOQ1Agd2lsbCBiZWdpbiBvZmZsb2FkaW5nIGJsb2Nrcy4KKworICAgVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgorCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSAiQ0FQX0hCTyIgY2FwYWJpbGl0eSBpcworICAgcHJlc2VudCBpbiAiUFJPUF9DQVBTIi4KKworOS4yLjIuICBQUk9QIDExOiBQUk9QX0hCT19CTE9DS19NQVgKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiUyIKKworICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgICAgICAgIDIgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCAiUFJPUF9IQk9fQkxPQ0tfTUFYIiB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgRGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCBmcm9tIHRoZSBOQ1AgdG8KKyAgIHRoZSBob3N0LiAgRGVmYXVsdCB2YWx1ZSBpcyAzMi4gIFNldHRpbmcgdGhpcyB2YWx1ZSB0byB6ZXJvIHdpbGwKKyAgIGNhdXNlIGhvc3QgYmxvY2sgb2ZmbG9hZCB0byBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4KKworICAgVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyLgorCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSAiQ0FQX0hCTyIgY2FwYWJpbGl0eSBpcworICAgcHJlc2VudCBpbiAiUFJPUF9DQVBTIi4KKworMTAuICBGZWF0dXJlOiBKYW0gRGV0ZWN0aW9uCisKKyAgIEphbW1pbmcgZGV0ZWN0aW9uIGlzIGEgZmVhdHVyZSB0aGF0IGFsbG93cyB0aGUgTkNQIHRvIHJlcG9ydCB3aGVuIGl0CisgICBkZXRlY3RzIGhpZ2ggbGV2ZWxzIG9mIGludGVyZmVyZW5jZSB0aGF0IGFyZSBjaGFyYWN0ZXJpc3RpYyBvZgorICAgaW50ZW50aW9uYWwgc2lnbmFsIGphbW1pbmcuCisKKyAgIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVjdGVkIGJ5IGNoZWNraW5nIGZvciB0aGUKKyAgIHByZXNlbmNlIG9mIHRoZSAiQ0FQX0pBTV9ERVRFQ1QiICh2YWx1ZSA2KSBjYXBhYmlsaXR5IGluICJQUk9QX0NBUFMiLgorCisxMC4xLiAgUHJvcGVydGllcworCisxMC4xLjEuICBQUk9QIDQ2MDg6IFBST1BfSkFNX0RFVEVDVF9FTkFCTEUKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKyAgIG8gIERlZmF1bHQgVmFsdWU6IGZhbHNlCisgICBvICBSRVFVSVJFRCBmb3IgIkNBUF9KQU1fREVURUNUIgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDYwXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgICAgICAgICAgMSAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgIlBST1BfSkFNX0RFVEVDVF9FTkFCTEUiIHwKKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIEluZGljYXRlcyBpZiBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiAgU2V0IHRvIHRydWUKKyAgIHRvIGVuYWJsZSBqYW1taW5nIGRldGVjdGlvbi4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgIkNBUF9KQU1fREVURUNUIiBjYXBhYmlsaXR5IGlzCisgICBwcmVzZW50IGluICJQUk9QX0NBUFMiLgorCisxMC4xLjIuICBQUk9QIDQ2MDk6IFBST1BfSkFNX0RFVEVDVEVECisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKyAgIG8gIFJFUVVJUkVEIGZvciAiQ0FQX0pBTV9ERVRFQ1QiCisKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAgICAgMSAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8ICJQUk9QX0pBTV9ERVRFQ1RFRCIgfAorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFNldCB0byB0cnVlIGlmIHJhZGlvIGphbW1pbmcgaXMgZGV0ZWN0ZWQuICBTZXQgdG8gZmFsc2Ugb3RoZXJ3aXNlLgorCisgICBXaGVuIGphbW1pbmcgZGV0ZWN0aW9uIGlzIGVuYWJsZWQsIGNoYW5nZXMgdG8gdGhlIHZhbHVlIG9mIHRoaXMKKyAgIHByb3BlcnR5IGFyZSBlbWl0dGVkIGFzeW5jaHJvbm91c2x5IHZpYSAiQ01EX1BST1BfVkFMVUVfSVMiLgorCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSAiQ0FQX0pBTV9ERVRFQ1QiIGNhcGFiaWxpdHkgaXMKKyAgIHByZXNlbnQgaW4gIlBST1BfQ0FQUyIuCisKKzEwLjEuMy4gIFBST1AgNDYxMDogUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xECisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImMiCisgICBvICBVbml0czogZEJtCisgICBvICBEZWZhdWx0IFZhbHVlOiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworICAgbyAgUkVDT01NRU5ERUQgZm9yICJDQVBfSkFNX0RFVEVDVCIKKworICAgVGhpcyBwYXJhbWV0ZXIgZGVzY3JpYmVzIHRoZSB0aHJlc2hvbGQgUlNTSSBsZXZlbCAobWVhc3VyZWQgaW4gZEJtKQorICAgYWJvdmUgd2hpY2ggdGhlIGphbW1pbmcgZGV0ZWN0aW9uIHdpbGwgY29uc2lkZXIgdGhlIGNoYW5uZWwgYmxvY2tlZC4KKworMTAuMS40LiAgUFJPUCA0NjExOiBQUk9QX0pBTV9ERVRFQ1RfV0lORE9XCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImMiCisgICBvICBVbml0czogU2Vjb25kcyAoMS02NCkKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDYxXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgRGVmYXVsdCBWYWx1ZTogSW1wbGVtZW50YXRpb24tc3BlY2lmaWMKKyAgIG8gIFJFQ09NTUVOREVEIGZvciAiQ0FQX0pBTV9ERVRFQ1QiCisKKyAgIFRoaXMgcGFyYW1ldGVyIGRlc2NyaWJlcyB0aGUgd2luZG93IHBlcmlvZCBmb3Igc2lnbmFsIGphbW1pbmcKKyAgIGRldGVjdGlvbi4KKworMTAuMS41LiAgUFJPUCA0NjEyOiBQUk9QX0pBTV9ERVRFQ1RfQlVTWQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJpIgorICAgbyAgVW5pdHM6IFNlY29uZHMgKDEtNjQpCisgICBvICBEZWZhdWx0IFZhbHVlOiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworICAgbyAgUkVDT01NRU5ERUQgZm9yICJDQVBfSkFNX0RFVEVDVCIKKworICAgVGhpcyBwYXJhbWV0ZXIgZGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgYWdncmVnYXRlIHNlY29uZHMgd2l0aGluIHRoZQorICAgZGV0ZWN0aW9uIHdpbmRvdyB3aGVyZSB0aGUgUlNTSSBtdXN0IGJlIGFib3ZlCisgICAiUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEIiB0byB0cmlnZ2VyIGRldGVjdGlvbi4KKworICAgVGhlIGJlaGF2aW9yIG9mIHRoZSBqYW1taW5nIGRldGVjdGlvbiBmZWF0dXJlIHdoZW4KKyAgICJQUk9QX0pBTV9ERVRFQ1RfQlVTWSIgaXMgbGFyZ2VyIHRoYW4gIlBST1BfSkFNX0RFVEVDVF9XSU5ET1ciIGlzCisgICB1bmRlZmluZWQuCisKKzEwLjEuNi4gIFBST1AgNDYxMzogUFJPUF9KQU1fREVURUNUX0hJU1RPUllfQklUTUFQCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiTEwiCisgICBvICBEZWZhdWx0IFZhbHVlOiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworICAgbyAgUkVDT01NRU5ERUQgZm9yICJDQVBfSkFNX0RFVEVDVCIKKworICAgVGhpcyB2YWx1ZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IHN0YXRlIG9mIGphbW1pbmcKKyAgIGRldGVjdGlvbiBtb2R1bGUgZm9yIG1vbml0b3JpbmcvZGVidWdnaW5nIHB1cnBvc2UuICBJdCByZXR1cm5zIGEKKyAgIDY0LWJpdCB2YWx1ZSB3aGVyZSBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byBvbmUgc2Vjb25kIGludGVydmFsCisgICBzdGFydGluZyB3aXRoIGJpdCAwIGZvciB0aGUgbW9zdCByZWNlbnQgaW50ZXJ2YWwgYW5kIGJpdCA2MyBmb3IgdGhlCisgICBvbGRlc3QgaW50ZXJ2YWxzICg2MyBzZWMgZWFybGllcikuICBUaGUgYml0IGlzIHNldCB0byAxIGlmIHRoZQorICAgamFtbWluZyBkZXRlY3Rpb24gbW9kdWxlIG9ic2VydmVkL2RldGVjdGVkIGhpZ2ggc2lnbmFsIGxldmVsIGR1cmluZworICAgdGhlIGNvcnJlc3BvbmRpbmcgb25lIHNlY29uZCBpbnRlcnZhbC4gIFRoZSB2YWx1ZSBpcyByZWFkLW9ubHkgYW5kIGlzCisgICBlbmNvZGVkIGFzIHR3byAiTCIgKHVpbnQzMikgdmFsdWVzIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0IChmaXJzdCAiTCIKKyAgICh1aW50MzIpIHZhbHVlIGdpdmVzIHRoZSBsb3dlciBiaXRzIGNvcnJlc3BvbmRpbmcgdG8gbW9yZSByZWNlbnQKKyAgIGhpc3RvcnkpLgorCisxMS4gIEZlYXR1cmU6IEdQSU8gQWNjZXNzCisKKyAgIFRoaXMgZmVhdHVyZSBhbGxvd3MgdGhlIGhvc3QgdG8gaGF2ZSBjb250cm9sIG92ZXIgc29tZSBvciBhbGwgb2YgdGhlCisgICBHUElPIHBpbnMgb24gdGhlIE5DUC4gIFRoZSBob3N0IGNhbiBkZXRlcm1pbmUgd2hpY2ggR1BJT3MgYXJlCisgICBhdmFpbGFibGUgYnkgZXhhbWluaW5nICJQUk9QX0dQSU9fQ09ORklHIiwgZGVzY3JpYmVkIGJlbG93LiAgVGhpcyBBUEkKKyAgIHN1cHBvcnRzIGEgbWF4aW11bSBvZiAyNTYgaW5kaXZpZHVhbCBHUElPIHBpbnMuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNjJdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBTdXBwb3J0IGZvciB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIHByZXNlbmNlIG9mCisgICAiQ0FQX0dQSU8iLgorCisxMS4xLiAgUHJvcGVydGllcworCisxMS4xLjEuICBQUk9QIDQwOTY6IFBST1BfR1BJT19DT05GSUcKKworICAgbyAgQXJndW1lbnQtRW5jb2Rpbmc6ICJBKHQoQ0NVKSkiCisgICBvICBUeXBlOiBSZWFkLXdyaXRlIChXcml0YWJsZSBvbmx5IHVzaW5nICJDTURfUFJPUF9WQUxVRV9JTlNFUlQiLAorICAgICAgU2VjdGlvbiA0LjUpCisKKyAgIEFuIGFycmF5IG9mIHN0cnVjdHVyZXMgd2hpY2ggY29udGFpbiB0aGUgZm9sbG93aW5nIGZpZWxkczoKKworICAgbyAgIkMiOiBHUElPIE51bWJlcgorICAgbyAgIkMiOiBHUElPIENvbmZpZ3VyYXRpb24gRmxhZ3MKKyAgIG8gICJVIjogSHVtYW4tcmVhZGFibGUgR1BJTyBuYW1lCisKKyAgIEdQSU9zIHdoaWNoIGRvIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbnRyeSBhcmUgbm90IHN1cHBvcnRlZC4KKworICAgVGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGZsYWdzIGZvciB0aGUKKyAgIEdQSU86CisKKyAgICAgICAgICAgICAgICAgICAgICAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcKKyAgICAgICAgICAgICAgICAgICAgICstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworICAgICAgICAgICAgICAgICAgICAgfERJUnxQVVB8UEROfFRSSUdHRVJ8ICBSRVNFUlZFRCB8CisgICAgICAgICAgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfE8vRHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLSsKKworICAgbyAgIkRJUiI6IFBpbiBkaXJlY3Rpb24uICBDbGVhciAoMCkgZm9yIGlucHV0LCBzZXQgKDEpIGZvciBvdXRwdXQuCisgICBvICAiUFVQIjogUHVsbC11cCBlbmFibGVkIGZsYWcuCisgICBvICAiUEROIi8iTy9EIjogRmxhZyBtZWFuaW5nIGRlcGVuZHMgb24gcGluIGRpcmVjdGlvbjoKKworICAgICAgKiAgSW5wdXQ6IFB1bGwtZG93biBlbmFibGVkLgorICAgICAgKiAgT3V0cHV0OiBPdXRwdXQgaXMgYW4gb3Blbi1kcmFpbi4KKyAgIG8gICJUUklHR0VSIjogRW51bWVyYXRpb24gZGVzY3JpYmluZyBob3cgcGluIGNoYW5nZXMgZ2VuZXJhdGUKKyAgICAgIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24gY29tbWFuZHMgKFRCRCkgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0LgorCisgICAgICAqICAwOiBGZWF0dXJlIGRpc2FibGVkIGZvciB0aGlzIHBpbgorICAgICAgKiAgMTogVHJpZ2dlciBvbiBmYWxsaW5nIGVkZ2UKKyAgICAgICogIDI6IFRyaWdnZXIgb24gcmlzaW5nIGVkZ2UKKyAgICAgICogIDM6IFRyaWdnZXIgb24gbGV2ZWwgY2hhbmdlCisgICBvICAiUkVTRVJWRUQiOiBCaXRzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiAgQWx3YXlzIGNsZWFyZWQgdG8gemVybworICAgICAgYW5kIGlnbm9yZWQgd2hlbiByZWFkLgorCisgICBBcyBhbiBvcHRpb25hbCBmZWF0dXJlLCB0aGUgY29uZmlndXJhdGlvbiBvZiBpbmRpdmlkdWFsIHBpbnMgbWF5IGJlCisgICBtb2RpZmllZCB1c2luZyB0aGUgIkNNRF9QUk9QX1ZBTFVFX0lOU0VSVCIgY29tbWFuZC4gIE9ubHkgdGhlIEdQSU8KKyAgIG51bWJlciBhbmQgZmxhZ3MgZmllbGRzIE1VU1QgYmUgcHJlc2VudCwgdGhlIEdQSU8gbmFtZSAoaWYgcHJlc2VudCkKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDYzXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgd291bGQgYmUgaWdub3JlZC4gIFRoaXMgY29tbWFuZCBjYW4gb25seSBiZSB1c2VkIHRvIG1vZGlmeSB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gb2YgR1BJT3Mgd2hpY2ggYXJlIGFscmVhZHkgZXhwb3NlZC0tLWl0IGNhbm5vdCBiZSB1c2VkCisgICBieSB0aGUgaG9zdCB0byBhZGQgYWRkaW9uYWwgR1BJT3MuCisKKzExLjEuMi4gIFBST1AgNDA5ODogUFJPUF9HUElPX1NUQVRFCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKworICAgQ29udGFpbnMgYSBiaXQgZmllbGQgaWRlbnRpZnlpbmcgdGhlIHN0YXRlIG9mIHRoZSBHUElPcy4gIFRoZSBsZW5ndGgKKyAgIG9mIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBwcm9wZXJ0aWVzIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZgorICAgR1BJT3MuICBJZiB5b3UgaGF2ZSAxMCBHUElPcywgeW91J2QgaGF2ZSB0d28gYnl0ZXMuICBHUElPcyBhcmUKKyAgIG51bWJlcmVkIGZyb20gbW9zdCBzaWduaWZpY2FudCBiaXQgdG8gbGVhc3Qgc2lnbmlmaWNhbnQgYml0LCBzbyAweDgwCisgICBpcyBHUElPIDAsIDB4NDAgaXMgR1BJTyAxLCBldGMuCisKKyAgIEZvciBHUElPcyBjb25maWd1cmVkIGFzIGlucHV0czoKKworICAgbyAgIkNNRF9QUk9QX1ZBVUVfR0VUIjogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBkZXNjcmliZXMgdGhlCisgICAgICBsb2dpYyBsZXZlbCByZWFkIGZyb20gdGhlIHBpbi4KKyAgIG8gICJDTURfUFJPUF9WQUxVRV9TRVQiOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGlzIGlnbm9yZWQKKyAgICAgIGZvciB0aGVzZSBwaW5zLgorCisgICBGb3IgR1BJT3MgY29uZmlndXJlZCBhcyBvdXRwdXRzOgorCisgICBvICAiQ01EX1BST1BfVkFVRV9HRVQiOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGlzCisgICAgICBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4KKyAgIG8gICJDTURfUFJPUF9WQUxVRV9TRVQiOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGRldGVybWluZXMKKyAgICAgIHRoZSBuZXcgbG9naWMgbGV2ZWwgb2YgdGhlIG91dHB1dC4gIElmIHRoaXMgcGluIGlzIGNvbmZpZ3VyZWQgYXMKKyAgICAgIGFuIG9wZW4tZHJhaW4sIHNldHRpbmcgdGhlIGFzc29jaWF0ZWQgYml0IHRvIDEgd2lsbCBjYXVzZSB0aGUgcGluCisgICAgICB0byBlbnRlciBhIEhpLVogc3RhdGUuCisKKyAgIEZvciBHUElPcyB3aGljaCBhcmUgbm90IHNwZWNpZmllZCBpbiAiUFJPUF9HUElPX0NPTkZJRyI6CisKKyAgIG8gICJDTURfUFJPUF9WQVVFX0dFVCI6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMKKyAgICAgIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLgorICAgbyAgIkNNRF9QUk9QX1ZBTFVFX1NFVCI6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgTVVTVCBiZQorICAgICAgaWdub3JlZCBieSB0aGUgTkNQLgorCisgICBXaGVuIHdyaXRpbmcsIHVuc3BlY2lmaWVkIGJpdHMgYXJlIGFzc3VtZWQgdG8gYmUgemVyby4KKworMTEuMS4zLiAgUFJPUCA0MDk5OiBQUk9QX0dQSU9fU1RBVEVfU0VUCisKKyAgIG8gIFR5cGU6IFdyaXRlLW9ubHkKKworICAgQWxsb3dzIGZvciB0aGUgc3RhdGUgb2YgdmFyaW91cyBvdXRwdXQgR1BJT3MgdG8gYmUgc2V0IHdpdGhvdXQKKyAgIGFmZmVjdGluZyBvdGhlciBHUElPIHN0YXRlcy4gIENvbnRhaW5zIGEgYml0IGZpZWxkIGlkZW50aWZ5aW5nIHRoZQorICAgb3V0cHV0IEdQSU9zIHRoYXQgc2hvdWxkIGhhdmUgdGhlaXIgc3RhdGUgc2V0IHRvIDEuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNjRdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBXaGVuIHdyaXRpbmcsIHVuc3BlY2lmaWVkIGJpdHMgYXJlIGFzc3VtZWQgdG8gYmUgemVyby4gIFRoZSB2YWx1ZSBvZgorICAgYW55IGJpdHMgZm9yIEdQSU9zIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWVkIGluICJQUk9QX0dQSU9fQ09ORklHIiBNVVNUCisgICBiZSBpZ25vcmVkLgorCisxMS4xLjQuICBQUk9QIDQxMDA6IFBST1BfR1BJT19TVEFURV9DTEVBUgorCisgICBvICBUeXBlOiBXcml0ZS1vbmx5CisKKyAgIEFsbG93cyBmb3IgdGhlIHN0YXRlIG9mIHZhcmlvdXMgb3V0cHV0IEdQSU9zIHRvIGJlIGNsZWFyZWQgd2l0aG91dAorICAgYWZmZWN0aW5nIG90aGVyIEdQSU8gc3RhdGVzLiAgQ29udGFpbnMgYSBiaXQgZmllbGQgaWRlbnRpZnlpbmcgdGhlCisgICBvdXRwdXQgR1BJT3MgdGhhdCBzaG91bGQgaGF2ZSB0aGVpciBzdGF0ZSBjbGVhcmVkIHRvIDAuCisKKyAgIFdoZW4gd3JpdGluZywgdW5zcGVjaWZpZWQgYml0cyBhcmUgYXNzdW1lZCB0byBiZSB6ZXJvLiAgVGhlIHZhbHVlIG9mCisgICBhbnkgYml0cyBmb3IgR1BJT3Mgd2hpY2ggYXJlIG5vdCBzcGVjaWZpZWQgaW4gIlBST1BfR1BJT19DT05GSUciIE1VU1QKKyAgIGJlIGlnbm9yZWQuCisKKzEyLiAgRmVhdHVyZTogVHJ1ZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKworICAgVGhpcyBmZWF0dXJlIGFsbG93cyB0aGUgaG9zdCB0byBoYXZlIGFjY2VzcyB0byBhbnkgc3Ryb25nIGhhcmR3YXJlCisgICByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0aGF0IG1pZ2h0IGJlIHByZXNlbnQgb24gdGhlIE5DUCwgZm9yIHRoaW5ncworICAgbGlrZSBrZXkgZ2VuZXJhdGlvbiBvciBzZWVkaW5nIFBSTkdzLgorCisgICBTdXBwb3J0IGZvciB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIHByZXNlbmNlIG9mCisgICAiQ0FQX1RSTkciLgorCisgICBOb3RlIHdlbGwgdGhhdCBpbXBsZW1lbnRpbmcgYSBjcnlwdG9ncmFwaGljYWxseS1zdHJvbmcgc29mdHdhcmUtYmFzZWQKKyAgIHRydWUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKHRoYXQgaXMgaW1wZXJ2aW91cyB0byB0aGluZ3MgbGlrZQorICAgdGVtcGVyYXR1cmUgY2hhbmdlcywgbWFudWZhY3R1cmluZyBkaWZmZXJlbmNlcyBhY3Jvc3MgZGV2aWNlcywgb3IKKyAgIHVuZXhwZWN0ZWQgb3V0cHV0IGNvcnJlbGF0aW9ucykgaXMgbm9uLXRyaXZpYWwgd2l0aG91dCBhIHdlbGwtCisgICBkZXNpZ25lZCwgZGVkaWNhdGVkIGhhcmR3YXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgSW1wbGVtZW50b3JzCisgICB3aG8gaGF2ZSBsaXR0bGUgb3Igbm8gZXhwZXJpZW5jZSBpbiB0aGlzIGFyZWEgYXJlIGVuY291cmFnZWQgdG8gbm90CisgICBhZHZlcnRpc2UgdGhpcyBjYXBhYmlsaXR5LgorCisxMi4xLiAgUHJvcGVydGllcworCisxMi4xLjEuICBQUk9QIDQxMDE6IFBST1BfVFJOR18zMgorCisgICBvICBBcmd1bWVudC1FbmNvZGluZzogIkwiCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKworICAgRmV0Y2hpbmcgdGhpcyBwcm9wZXJ0eSByZXR1cm5zIGEgc3Ryb25nIHJhbmRvbSAzMi1iaXQgaW50ZWdlciB0aGF0IGlzCisgICBzdWl0YWJsZSBmb3IgdXNlIGFzIGEgUFJORyBzZWVkIG9yIGZvciBjcnlwdG9ncmFwaGljIHVzZS4KKworICAgV2hpbGUgdGhlIGV4YWN0IG1lY2hhbmlzbSBiZWhpbmQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoaXMgdmFsdWUgaXMKKyAgIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLCB0aGUgaW1wbGVtZW50YXRpb24gbXVzdCBzYXRpc2Z5IHRoZQorICAgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA2NV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIG8gIERhdGEgcmVwcmVzZW50aW5nIGF0IGxlYXN0IDMyIGJpdHMgb2YgZnJlc2ggZW50cm9weSAoZXh0cmFjdGVkCisgICAgICBmcm9tIHRoZSBwcmltYXJ5IGVudHJvcHkgc291cmNlKSBNVVNUIGJlIGNvbnN1bWVkIGJ5IHRoZQorICAgICAgY2FsY3VsYXRpb24gb2YgZWFjaCBxdWVyeS4KKyAgIG8gIEVhY2ggb2YgdGhlIDMyIGJpdHMgcmV0dXJuZWQgTVVTVCBiZSBmcmVlIG9mIGJpYXMgYW5kIGhhdmUgbm8KKyAgICAgIHN0YXRpc3RpY2FsIGNvcnJlbGF0aW9uIHRvIGFueSBwYXJ0IG9mIHRoZSByYXcgZGF0YSB1c2VkIGZvciB0aGUKKyAgICAgIGNhbGN1bGF0aW9uIG9mIGFueSBxdWVyeS4KKworICAgU3VwcG9ydCBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBSRVFVSVJFRCBpZiAiQ0FQX1RSTkciIGlzIGluY2x1ZGVkIGluCisgICB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcy4KKworMTIuMS4yLiAgUFJPUCA0MTAyOiBQUk9QX1RSTkdfMTI4CisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiRCIKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorCisgICBGZXRjaGluZyB0aGlzIHByb3BlcnR5IHJldHVybnMgMTYgYnl0ZXMgb2Ygc3Ryb25nIHJhbmRvbSBkYXRhCisgICBzdWl0YWJsZSBmb3IgZGlyZWN0IGNyeXB0b2dyYXBoaWMgdXNlIHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nKEZvcgorICAgZXhhbXBsZSwgYXMgYW4gQUVTIGtleSkuCisKKyAgIFdoaWxlIHRoZSBleGFjdCBtZWNoYW5pc20gYmVoaW5kIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGlzIHZhbHVlIGlzCisgICBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYywgdGhlIGltcGxlbWVudGF0aW9uIG11c3Qgc2F0aXNmeSB0aGUKKyAgIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CisKKyAgIG8gIERhdGEgcmVwcmVzZW50aW5nIGF0IGxlYXN0IDEyOCBiaXRzIG9mIGZyZXNoIGVudHJvcHkgKGV4dHJhY3RlZAorICAgICAgZnJvbSB0aGUgcHJpbWFyeSBlbnRyb3B5IHNvdXJjZSkgTVVTVCBiZSBjb25zdW1lZCBieSB0aGUKKyAgICAgIGNhbGN1bGF0aW9uIG9mIGVhY2ggcXVlcnkuCisgICBvICBFYWNoIG9mIHRoZSAxMjggYml0cyByZXR1cm5lZCBNVVNUIGJlIGZyZWUgb2YgYmlhcyBhbmQgaGF2ZSBubworICAgICAgc3RhdGlzdGljYWwgY29ycmVsYXRpb24gdG8gYW55IHBhcnQgb2YgdGhlIHJhdyBkYXRhIHVzZWQgZm9yIHRoZQorICAgICAgY2FsY3VsYXRpb24gb2YgYW55IHF1ZXJ5LgorCisgICBTdXBwb3J0IGZvciB0aGlzIHByb3BlcnR5IGlzIFJFUVVJUkVEIGlmICJDQVBfVFJORyIgaXMgaW5jbHVkZWQgaW4KKyAgIHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzLgorCisxMi4xLjMuICBQUk9QIDQxMDM6IFBST1BfVFJOR19SQVdfMzIKKworICAgbyAgQXJndW1lbnQtRW5jb2Rpbmc6ICJEIgorICAgbyAgVHlwZTogUmVhZC1Pbmx5CisKKyAgIFRoaXMgcHJvcGVydHkgaXMgcHJpbWFyaWx5IHVzZWQgdG8gZGlhZ25vc2UgYW5kIGRlYnVnIHRoZSBiZWhhdmlvciBvZgorICAgdGhlIGVudHJvcHkgc291cmNlIHVzZWQgZm9yIHN0cm9uZyByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24uCisKKyAgIFdoZW4gcXVlcmllZCwgcmV0dXJucyB0aGUgcmF3IG91dHB1dCBmcm9tIHRoZSBlbnRyb3B5IHNvdXJjZSB1c2VkIHRvCisgICBnZW5lcmF0ZSAiUFJPUF9UUk5HXzMyIiwgcHJpb3IgdG8gYW55IHJlZHVjdGlvbi93aGl0ZW5pbmcgYW5kL29yCisgICBtaXhpbmcgd2l0aCBwcmlvciBzdGF0ZS4KKworICAgVGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGFuZAorICAgc2hvdWxkIGJlIGV4cGVjdGVkIHRvIGJlIG5vbi1kZXRlcm1pbmlzdGljLgorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA2Nl0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFN1cHBvcnQgZm9yIHRoaXMgcHJvcGVydHkgaXMgUkVDT01NRU5ERUQgaWYgIkNBUF9UUk5HIiBpcyBpbmNsdWRlZCBpbgorICAgdGhlIGRldmljZSBjYXBhYmlsaXRpZXMuCisKKzEzLiAgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMKKworMTMuMS4gIFJhdyBBcHBsaWNhdGlvbiBBY2Nlc3MKKworICAgU3BpbmVsIE1BWSBiZSB1c2VkIGFzIGFuIEFQSSBib3VuZGFyeSBmb3IgYWxsb3dpbmcgcHJvY2Vzc2VzIHRvCisgICBjb25maWd1cmUgdGhlIE5DUC4gIEhvd2V2ZXIsIHN1Y2ggYSBzeXN0ZW0gTVVTVCBOT1QgZ2l2ZSB1bnByaXZpbGVnZWQKKyAgIHByb2Nlc3Nlc3MgdGhlIGFiaWxpdHkgdG8gc2VuZCBvciByZWNlaXZlIGFyYml0cmFyeSBjb21tYW5kIGZyYW1lcyB0bworICAgdGhlIE5DUC4gIE9ubHkgdGhlIHNwZWNpZmljIGNvbW1hbmRzIGFuZCBwcm9wZXJ0aWVzIHRoYXQgYXJlIHJlcXVpcmVkCisgICBzaG91bGQgYmUgYWxsb3dlZCB0byBiZSBwYXNzZWQsIGFuZCB0aGVuIG9ubHkgYWZ0ZXIgYmVpbmcgY2hlY2tlZCBmb3IKKyAgIHByb3BlciBmb3JtYXQuCisKKzE0LiAgUmVmZXJlbmNlcworCisxNC4xLiAgVVJJcworCisgICBbMV0gaHR0cHM6Ly93d3cudzMub3JnL1RSL2V4aS8jZW5jb2RpbmdVbnNpZ25lZEludGVnZXIKKworICAgWzJdIGh0dHA6Ly9yZXZlbmcuc291cmNlZm9yZ2UubmV0L2NyYy1jYXRhbG9ndWUvMTYuaHRtI2NyYy5jYXQua2VybWl0CisKKyAgIFszXSBodHRwczovL2dpdGh1Yi5jb20vbWlla2cvbW1hcmsKKworICAgWzRdIGh0dHA6Ly94bWwycmZjLmlldGYub3JnLworCitBcHBlbmRpeCBBLiAgRnJhbWluZyBQcm90b2NvbAorCisgICBTaW5jZSB0aGlzIE5DUCBwcm90b2NvbCBpcyBkZWZpbmVkIGluZGVwZW5kZW50bHkgb2YgdGhlIHBoeXNpY2FsCisgICB0cmFuc3BvcnQgb3IgZnJhbWluZywgYW55IG51bWJlciBvZiB0cmFuc3BvcnRzIGFuZCBmcmFtaW5nIHByb3RvY29scworICAgY291bGQgYmUgdXNlZCBzdWNjZXNzZnVsbHkuICBIb3dldmVyLCBpbiB0aGUgaW50ZXJlc3RzIG9mCisgICBjb21wYXRpYmlsaXR5LCB0aGlzIGRvY3VtZW50IHByb3ZpZGVzIHNvbWUgcmVjb21tZW5kYXRpb25zLgorCitBLjEuICBVQVJUIFJlY29tbWVuZGF0aW9ucworCisgICBUaGUgcmVjb21tZW5kZWQgZGVmYXVsdCBVQVJUIHNldHRpbmdzIGFyZToKKworICAgbyAgQml0IHJhdGU6IDExNTIwMAorICAgbyAgU3RhcnQgYml0czogMQorICAgbyAgRGF0YSBiaXRzOiA4CisgICBvICBTdG9wIGJpdHM6IDEKKyAgIG8gIFBhcml0eTogTm9uZQorICAgbyAgRmxvdyBDb250cm9sOiBIYXJkd2FyZQorCisgICBUaGVzZSB2YWx1ZXMgbWF5IGJlIGFkanVzdGVkIGRlcGVuZGluZyBvbiB0aGUgaW5kaXZpZHVhbCBuZWVkcyBvZiB0aGUKKyAgIGFwcGxpY2F0aW9uIG9yIHByb2R1Y3QsIGJ1dCBzb21lIHNvcnQgb2YgZmxvdyBjb250cm9sIE1VU1QgYmUgdXNlZC4KKyAgIEhhcmR3YXJlIGZsb3cgY29udHJvbCBpcyBwcmVmZXJyZWQgb3ZlciBzb2Z0d2FyZSBmbG93IGNvbnRyb2wuICBJbgorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA2N10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIHRoZSBhYnNlbmNlIG9mIGhhcmR3YXJlIGZsb3cgY29udHJvbCwgc29mdHdhcmUgZmxvdyBjb250cm9sIChYT04vCisgICBYT0ZGKSBNVVNUIGJlIHVzZWQgaW5zdGVhZC4KKworICAgV2UgYWxzbyAqUkVDT01NRU5EKiBhbiBBcmR1aW5vLXN0eWxlIGhhcmR3YXJlIHJlc2V0LCB3aGVyZSB0aGUgRFRSCisgICBzaWduYWwgaXMgY291cGxlZCB0byB0aGUgIlImIzc3MztFJiM3NzM7UyYjNzczOyIgcGluIHRocm91Z2ggYQorICAgMC4wMVttaWNyb11GIGNhcGFjaXRvci4gIFRoaXMgY2F1c2VzIHRoZSBOQ1AgdG8gYXV0b21hdGljYWxseSByZXNldAorICAgd2hlbmV2ZXIgdGhlIHNlcmlhbCBwb3J0IGlzIG9wZW5lZC4gIEF0IHRoZSB2ZXJ5IGxlYXN0IHdlICpSRUNPTU1FTkQqCisgICBkZWRpY2F0aW5nIG9uZSBvZiB5b3VyIGhvc3QgcGlucyB0byBjb250cm9sbGluZyB0aGUKKyAgICJSJiM3NzM7RSYjNzczO1MmIzc3MzsiIHBpbiBvbiB0aGUgTkNQLCBzbyB0aGF0IHlvdSBjYW4gZWFzaWx5CisgICBwZXJmb3JtIGEgaGFyZHdhcmUgcmVzZXQgaWYgbmVjZXNzYXJ5LgorCitBLjEuMS4gIFVBUlQgQml0IFJhdGUgRGV0ZWN0aW9uCisKKyAgIFdoZW4gdXNpbmcgYSBVQVJULCB0aGUgaXNzdWUgb2YgYW4gYXBwcm9wcmlhdGUgYml0IHJhdGUgbXVzdCBiZQorICAgY29uc2lkZXJlZC4gIEEgYml0cmF0ZSBvZiAxMTUyMDAgYml0cyBwZXIgc2Vjb25kIGhhcyBiZWNvbWUgYSBkZWZhY3RvCisgICBzdGFuZGFyZCBiYXVkIHJhdGUgZm9yIG1hbnkgc2VyaWFsIHBlcmlwaGVyYWxzLiAgVGhpcyByYXRlLCBob3dldmVyLAorICAgaXMgc2xvd2VyIHRoYW4gdGhlIHRoZW9yZXRpY2FsIG1heGltdW0gYml0cmF0ZSBvZiB0aGUgODAyLjE1LjQgMi40R0h6CisgICBQSFkgKDI1MGtiaXQpLiAgSW4gbW9zdCBjaXJjdW1zdGFuY2VzIHRoaXMgbWlzbWF0Y2ggaXMgbm90CisgICBzaWduaWZpY2FudCBiZWNhdXNlIHRoZSBvdmVyYWxsIGJpdHJhdGUgd2lsbCBiZSBtdWNoIGxvd2VyIHRoYW4KKyAgIGVpdGhlciBvZiB0aGVzZSByYXRlcywgYnV0IHRoZXJlIGFyZSBjaXJjdW1zdGFuY2VzIHdoZXJlIGEgZmFzdGVyCisgICBVQVJUIGJpdHJhdGUgaXMgZGVzaXJhYmxlLiAgVGh1cywgdGhpcyBkb2N1bWVudCBwcm9wb3NlcyBhIHNpbXBsZQorICAgYml0cmF0ZSBkZXRlY3Rpb24gc2NoZW1lIHRoYXQgY2FuIGJlIGVtcGxveWVkIGJ5IHRoZSBob3N0IHRvIGRldGVjdAorICAgd2hlbiB0aGUgYXR0YWNoZWQgTkNQIGlzIGluaXRpYWxseSBydW5uaW5nIGF0IGEgaGlnaGVyIGJpdHJhdGUuCisKKyAgIFRoZSBhbGdvcml0aG0gaXMgdG8gc2VuZCBzdWNjZXNzaXZlIE5PT1AgY29tbWFuZHMgdG8gdGhlIE5DUCBhdAorICAgaW5jcmVhc2luZyBiaXRyYXRlcy4gIFdoZW4gYSB2YWxpZCAiQ01EX0xBU1RfU1RBVFVTIiByZXNwb25zZSBoYXMKKyAgIGJlZW4gcmVjZWl2ZWQsIHdlIGhhdmUgaWRlbnRpZmllZCB0aGUgY29ycmVjdCBiaXRyYXRlLgorCisgICBJbiBvcmRlciB0byBsaW1pdCB0aGUgdGltZSBzcGVudCBodW50aW5nIGZvciB0aGUgYXBwcm9wcmlhdGUgYml0cmF0ZSwKKyAgIHdlIFJFQ09NTUVORCB0aGF0IG9ubHkgdGhlIGZvbGxvd2luZyBiaXRyYXRlcyBiZSBjaGVja2VkOgorCisgICBvICAxMTUyMDAKKyAgIG8gIDIzMDQwMAorICAgbyAgMTAwMDAwMCAoMU1iaXQpCisKKyAgIFRoZSBiaXRyYXRlIE1BWSBhbHNvIGJlIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseSBieSBhZGp1c3RpbmcKKyAgICJQUk9QX1VBUlRfQklUUkFURSIsIGlmIGltcGxlbWVudGVkLgorCitBLjEuMi4gIEhETEMtTGl0ZQorCisgICBfSERMQy1MaXRlXyBpcyB0aGUgcmVjb21tZW5kZWQgZnJhbWluZyBwcm90b2NvbCBmb3IgdHJhbnNtaXR0aW5nCisgICBTcGluZWwgZnJhbWVzIG92ZXIgYSBVQVJULiAgSERMQy1MaXRlIGNvbnNpc3RzIG9mIG9ubHkgdGhlIGZyYW1pbmcsCisgICBlc2NhcGluZywgYW5kIENSQyBwYXJ0cyBvZiB0aGUgbGFyZ2VyIEhETEMgcHJvdG9jb2wtLS1hbGwgb3RoZXIgcGFydHMKKyAgIG9mIEhETEMgYXJlIG9taXR0ZWQuICBUaGlzIHByb3RvY29sIHdhcyBjaG9zZW4gYmVjYXVzZSBpdCB3b3JrcyB3ZWxsCisgICB3aXRoIHNvZnR3YXJlIGZsb3cgY29udHJvbCBhbmQgaXMgd2lkZWx5IGltcGxlbWVudGVkLgorCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNjhdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBUbyB0cmFuc21pdCBhIGZyYW1lIHdpdGggSERMQy1saXRlLCB0aGUgMTYtYml0IENSQyBtdXN0IGZpcnN0IGJlCisgICBhcHBlbmRlZCB0byB0aGUgZnJhbWUuICBUaGUgQ1JDIGZ1bmN0aW9uIGlzIGRlZmluZWQgdG8gYmUgQ1JDLTE2LworICAgQ0NJVFQsIG90aGVyd2lzZSBrbm93biBhcyB0aGUgS0VSTUlUIENSQyBbMl0uCisKKyAgIEluZGl2aWR1YWwgZnJhbWVzIGFyZSB0ZXJtaW5hdGVkIHdpdGggYSBmcmFtZSBkZWxpbWl0ZXIgb2N0ZXQgY2FsbGVkCisgICB0aGUgJ2ZsYWcnIG9jdGV0ICgiMHg3RSIpLgorCisgICBUaGUgZm9sbG93aW5nIG9jdGV0cyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgX3NwZWNpYWxfIGFuZCBzaG91bGQgYmUKKyAgIGVzY2FwZWQgd2hlbiBwcmVzZW50IGluIGRhdGEgZnJhbWVzOgorCisgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgfCBPY3RldCBWYWx1ZSB8ICAgICAgRGVzY3JpcHRpb24gICAgICAgfAorICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgIHwgICAgIDB4N0UgICAgfCBGcmFtZSBEZWxpbWl0ZXIgKEZsYWcpIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgMHg3RCAgICB8ICAgICAgRXNjYXBlIEJ5dGUgICAgICAgfAorICAgICAgICAgICAgICAgICB8ICAgICAweDExICAgIHwgICAgICAgICAgWE9OICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgIHwgICAgIDB4MTMgICAgfCAgICAgICAgICBYT0ZGICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgMHhGOCAgICB8ICAgIFZlbmRvci1TcGVjaWZpYyAgICAgfAorICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdoZW4gcHJlc2VudCBpbiBhIGRhdGEgZnJhbWUsIHRoZXNlIG9jdGV0IHZhbHVlcyBhcmUgZXNjYXBlZCBieQorICAgcHJlcGVuZGluZyB0aGUgZXNjYXBlIG9jdGV0ICgiMHg3RCIpIGFuZCBYT1JpbmcgdGhlIHZhbHVlIHdpdGgKKyAgICIweDIwIi4KKworICAgV2hlbiByZWNlaXZpbmcgYSBmcmFtZSwgdGhlIENSQyBtdXN0IGJlIHZlcmlmaWVkIGFmdGVyIHRoZSBmcmFtZSBpcworICAgdW5lc2NhcGVkLiAgSWYgdGhlIENSQyB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB3aGF0IGlzIGNhbGN1bGF0ZWQgZm9yCisgICB0aGUgZnJhbWUgZGF0YSwgdGhlIGZyYW1lIE1VU1QgYmUgZGlzY2FyZGVkLiAgVGhlIGltcGxlbWVudGF0aW9uIE1BWQorICAgaW5kaWNhdGUgdGhlIGZhaWx1cmUgdG8gaGlnaGVyIGxldmVscyB0byBoYW5kbGUgYXMgdGhleSBzZWUgZml0LCBidXQKKyAgIE1VU1QgTk9UIGF0dGVtcHQgdG8gcHJvY2VzcyB0aGUgZGVjZWl2ZWQgZnJhbWUuCisKKyAgIENvbnNlY3V0aXZlIGZsYWcgb2N0ZXRzIGFyZSBlbnRpcmVseSBsZWdhbCBhbmQgTVVTVCBOT1QgYmUgdHJlYXRlZCBhcworICAgYSBmcmFtaW5nIGVycm9yLiAgQ29uc2VjdXRpdmUgZmxhZyBvY3RldHMgTUFZIGJlIHVzZWQgYXMgYSB3YXkgdG8KKyAgIHdha2UgdXAgYSBzbGVlcGluZyBOQ1AuCisKKyAgIFdoZW4gZmlyc3QgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgTkNQLCBpdCBpcyBjdXN0b21hcnkgdG8KKyAgIHNlbmQgb25lIG9yIG1vcmUgZmxhZyBvY3RldHMgdG8gZW5zdXJlIHRoYXQgYW55IHByZXZpb3VzbHkgcmVjZWl2ZWQKKyAgIGRhdGEgaXMgZGlzY2FyZGVkLgorCitBLjIuICBTUEkgUmVjb21tZW5kYXRpb25zCisKKyAgIFdlIFJFQ09NTUVORCB0aGUgdXNlIG9mIHRoZSBmb2xsb3dpbmcgc3RhbmRhcmQgU1BJIHNpZ25hbHM6CisKKyAgIG8gICJDJiM3NzM7UyYjNzczOyI6IChIb3N0LXRvLU5DUCkgQ2hpcCBTZWxlY3QKKyAgIG8gICJDTEsiOiAoSG9zdC10by1OQ1ApIENsb2NrCisgICBvICAiTU9TSSI6IE1hc3Rlci1PdXRwdXQvU2xhdmUtSW5wdXQKKyAgIG8gICJNSVNPIjogTWFzdGVyLUlucHV0L1NsYXZlLU91dHB1dAorICAgbyAgIkkmIzc3MztOJiM3NzM7VCYjNzczOyI6IChOQ1AtdG8tSG9zdCkgSG9zdCBJbnRlcnJ1cHQKKyAgIG8gICJSJiM3NzM7RSYjNzczO1MmIzc3MzsiOiAoSG9zdC10by1OQ1ApIE5DUCBIYXJkd2FyZSBSZXNldAorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNjldCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBUaGUgIkkmIzc3MztOJiM3NzM7VCYjNzczOyIgc2lnbmFsIGlzIHVzZWQgYnkgdGhlIE5DUCB0byBpbmRpY2F0ZSB0bworICAgdGhlIGhvc3QgdGhhdCB0aGUgTkNQIGhhcyBmcmFtZXMgcGVuZGluZyB0byBzZW5kIHRvIGl0LiAgV2hlbgorICAgYXNzZXJ0ZWQsIHRoZSBob3N0IFNIT1VMRCBpbml0aWF0ZSBhIFNQSSB0cmFuc2FjdGlvbiBpbiBhIHRpbWVseQorICAgbWFubmVyLgorCisgICBXZSBSRUNPTU1FTkQgdGhlIGZvbGxvd2luZyBTUEkgcHJvcGVydGllczoKKworICAgbyAgIkMmIzc3MztTJiM3NzM7IiBpcyBhY3RpdmUgbG93LgorICAgbyAgIkNMSyIgaXMgYWN0aXZlIGhpZ2guCisgICBvICAiQ0xLIiBzcGVlZCBpcyBsYXJnZXIgdGhhbiA1MDAga0h6LgorICAgbyAgRGF0YSBpcyB2YWxpZCBvbiBsZWFkaW5nIGVkZ2Ugb2YgIkNMSyIuCisgICBvICBEYXRhIGlzIHNlbnQgaW4gbXVsdGlwbGVzIG9mIDgtYml0cyAob2N0ZXRzKS4KKyAgIG8gIE9jdGV0cyBhcmUgc2VudCBtb3N0LXNpZ25pZmljYW50IGJpdCBmaXJzdC4KKworICAgVGhpcyByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uIG1heSBiZSBhZGp1c3RlZCBkZXBlbmRpbmcgb24gdGhlCisgICBpbmRpdmlkdWFsIG5lZWRzIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBwcm9kdWN0LgorCitBLjIuMS4gIFNQSSBGcmFtaW5nIFByb3RvY29sCisKKyAgIEVhY2ggU1BJIGZyYW1lIHN0YXJ0cyB3aXRoIGEgNS1ieXRlIGZyYW1lIGhlYWRlcjoKKworICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgMSAgfCAgICAyICAgICB8ICAgIDIgICAgIHwKKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgSERSIHwgUkVDVl9MRU4gfCBEQVRBX0xFTiB8CisgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKworICAgbyAgIkhEUiI6IFRoZSBmaXJzdCBieXRlIGlzIHRoZSBoZWFkZXIgYnl0ZSAoZGVmaW5lZCBiZWxvdykKKyAgIG8gICJSRUNWX0xFTiI6IFRoZSBzZWNvbmQgYW5kIHRoaXJkIGJ5dGVzIGluZGljYXRlIHRoZSBsYXJnZXN0IGZyYW1lCisgICAgICBzaXplIHRoYXQgdGhhdCBkZXZpY2UgaXMgcmVhZHkgdG8gcmVjZWl2ZS4gIElmIHplcm8sIHRoZW4gdGhlCisgICAgICBvdGhlciBkZXZpY2UgbXVzdCBub3Qgc2VuZCBhbnkgZGF0YS4gIChMaXR0bGUgZW5kaWFuKQorICAgbyAgIkRBVEFfTEVOIjogVGhlIGZvdXJ0aCBhbmQgZmlmdGggYnl0ZXMgaW5kaWNhdGUgdGhlIHNpemUgb2YgdGhlCisgICAgICBwZW5kaW5nIGRhdGEgZnJhbWUgdG8gYmUgc2VudCB0byB0aGUgb3RoZXIgZGV2aWNlLiAgSWYgdGhpcyB2YWx1ZQorICAgICAgaXMgZXF1YWwtdG8gb3IgbGVzcy10aGFuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgb3RoZXIgZGV2aWNlCisgICAgICBpcyB3aWxsaW5nIHRvIHJlY2VpdmUsIHRoZW4gdGhlIGRhdGEgb2YgdGhlIGZyYW1lIGlzIGltbWVkaWF0ZWx5CisgICAgICBhZnRlciB0aGUgaGVhZGVyLiAgKExpdHRsZSBFbmRpYW4pCisKKyAgIFRoZSAiSERSIiBieXRlIGlzIGRlZmluZWQgYXM6CisKKyAgICAgICAgICAgICAgICAgICAgICAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcKKyAgICAgICAgICAgICAgICAgICAgICstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworICAgICAgICAgICAgICAgICAgICAgfFJTVHxDUkN8Q0NGfCAgUkVTRVJWRUQgfFBBVFRFUk58CisgICAgICAgICAgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKKworICAgbyAgIlJTVCI6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoYXQgZGV2aWNlIGhhcyBiZWVuIHJlc2V0IHNpbmNlIHRoZQorICAgICAgbGFzdCB0aW1lICJDJiM3NzM7UyYjNzczOyIgd2FzIGFzc2VydGVkLgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDcwXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgIkNSQyI6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoYXQgZGV2aWNlIHN1cHBvcnRzIHdyaXRpbmcgYSAxNi1iaXQKKyAgICAgIENSQyBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhLiAgVGhlIENSQyBsZW5ndGggaXMgTk9UIGluY2x1ZGVkIGluCisgICAgICBEQVRBX0xFTi4KKyAgIG8gICJDQ0YiOiAiQ1JDIENoZWNrIEZhaWx1cmUiLiAgU2V0IGlmIHRoZSBDUkMgY2hlY2sgb24gdGhlIGxhc3QKKyAgICAgIHJlY2VpdmVkIGZyYW1lIGZhaWxlZCwgY2xlYXJlZCB0byB6ZXJvIG90aGVyd2lzZS4gIFRoaXMgYml0IGlzCisgICAgICBvbmx5IHVzZWQgaWYgYm90aCBzaWRlcyBzdXBwb3J0IENSQy4KKyAgIG8gICJSRVNFUlZFRCI6IFRoZXNlIGJpdHMgYXJlIGFsbCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZWQuICBUaGV5CisgICAgICBNVVNUIGJlIGNsZWFyZWQgdG8gemVybyBhbmQgTVVTVCBiZSBpZ25vcmVkIGlmIHNldC4KKyAgIG8gICJQQVRURVJOIjogVGhlc2UgYml0cyBhcmUgc2V0IHRvIGEgZml4ZWQgdmFsdWUgdG8gaGVscCBkaXN0aW5ndWlzaAorICAgICAgdmFsaWQgU1BJIGZyYW1lcyBmcm9tIGdhcmJhZ2UgKGJ5IGV4cGxpY2l0bHkgbWFraW5nICIweEZGIiBhbmQKKyAgICAgICIweDAwIiBpbnZhbGlkIHZhbHVlcykuICBCaXQgNiBNVVNUIGJlIHNldCB0byBiZSBvbmUgYW5kIGJpdCA3CisgICAgICBNVVNUIGJlIGNsZWFyZWQgKDApLiAgQSBmcmFtZSByZWNlaXZlZCB0aGF0IGhhcyBhbnkgb3RoZXIgdmFsdWVzCisgICAgICBmb3IgdGhlc2UgYml0cyBNVVNUIGJlIGRyb3BwZWQuCisKKyAgIFByaW9yIHRvIGEgc2VuZGluZyBvciByZWNlaXZpbmcgYSBmcmFtZSwgdGhlIG1hc3RlciBNQVkgc2VuZCBhCisgICA1LW9jdGV0IGZyYW1lIHdpdGggemVyb3MgZm9yIGJvdGggdGhlIG1heCByZWNlaXZlIGZyYW1lIHNpemUgYW5kIHRoZQorICAgdGhlIGNvbnRhaW5lZCBmcmFtZSBsZW5ndGguICBUaGlzIHdpbGwgaW5kdWNlIHRoZSBzbGF2ZSBkZXZpY2UgdG8KKyAgIGluZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIGl0IHdhbnRzIHRvIHNlbmQgKGlmIGFueSkgYW5kCisgICBpbmRpY2F0ZSB0aGUgbGFyZ2VzdCBmcmFtZSBpdCBpcyBjYXBhYmxlIG9mIHJlY2VpdmluZyBhdCB0aGUgbW9tZW50LgorICAgVGhpcyBhbGxvd3MgdGhlIG1hc3RlciB0byBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIG5leHQgdHJhbnNhY3Rpb24uCisgICBBbHRlcm5hdGl2ZWx5LCBpZiB0aGUgbWFzdGVyIGhhcyBhIGZyYW1lIHRvIHNlbmQgaXQgY2FuIGp1c3QgZ28gYWhlYWQKKyAgIGFuZCBzZW5kIGEgZnJhbWUgb2YgdGhhdCBsZW5ndGggYW5kIGRldGVybWluZSBpZiB0aGUgZnJhbWUgd2FzCisgICBhY2NlcHRlZCBieSBjaGVja2luZyB0aGF0IHRoZSAiUkVDVl9MRU4iIGZyb20gdGhlIHNsYXZlIGZyYW1lIGlzCisgICBsYXJnZXIgdGhhbiB0aGUgZnJhbWUgdGhlIG1hc3RlciBqdXN0IHRyaWVkIHRvIHNlbmQuICBJZiB0aGUKKyAgICJSRUNWX0xFTiIgaXMgc21hbGxlciB0aGVuIHRoZSBmcmFtZSB3YXNuJ3QgYWNjZXB0ZWQgYW5kIHdpbGwgbmVlZCB0bworICAgYmUgdHJhbnNtaXR0ZWQgYWdhaW4uCisKKyAgIFRoaXMgcHJvdG9jb2wgY2FuIGJlIHVzZWQgZWl0aGVyIHVuaWRpcmVjdGlvbmFsbHkgb3IgYmlkaXJlY3Rpb25hbGx5LAorICAgZGV0ZXJtaW5lZCBieSB0aGUgYmVoYXZpb3Igb2YgdGhlIG1hc3RlciBhbmQgdGhlIHNsYXZlLgorCisgICBJZiB0aGUgdGhlIG1hc3RlciBub3RpY2VzICJQQVRURVJOIiBpcyBub3Qgc2V0IGNvcnJlY3RseSwgdGhlIG1hc3RlcgorICAgc2hvdWxkIGNvbnNpZGVyIHRoZSB0cmFuc2FjdGlvbiB0byBoYXZlIGZhaWxlZCBhbmQgdHJ5IGFnYWluIGFmdGVyIDEwCisgICBtaWxsaXNlY29uZHMsIHJldHJ5aW5nIHVwIHRvIDIwMCB0aW1lcy4gIEFmdGVyIHVuc3VjY2Vzc2Z1bGx5IHRyeWluZworICAgMjAwIHRpbWVzIGluIGEgcm93LCB0aGUgbWFzdGVyIE1BWSB0YWtlIGFwcHJvcHJpYXRlIHJlbWVkaWFsIGFjdGlvbgorICAgKGxpa2UgYSBOQ1AgaGFyZHdhcmUgcmVzZXQsIG9yIGluZGljYXRpbmcgYSBjb21tdW5pY2F0aW9uIGZhaWx1cmUgdG8KKyAgIGEgdXNlciBpbnRlcmZhY2UpLgorCisgICBBdCB0aGUgZW5kIG9mIHRoZSBkYXRhIG9mIGEgZnJhbWUgaXMgYW4gb3B0aW9uYWwgMTYtYml0IENSQywgc3VwcG9ydAorICAgZm9yIHdoaWNoIGlzIGluZGljYXRlZCBieSB0aGUgIkNSQyIgYml0IG9mIHRoZSAiSERSIiBieXRlIGJlaW5nIHNldC4KKyAgIElmIHRoZXNlIGJpdHMgYXJlIHNldCBmb3IgYm90aCB0aGUgbWFzdGVyIGFuZCBzbGF2ZSBmcmFtZXMsIHRoZW4gQ1JDCisgICBjaGVja2luZyBpcyBlbmFibGVkIG9uIGJvdGggc2lkZXMsIGVmZmVjdGl2ZWx5IHJlcXVpcmluZyB0aGF0IGZyYW1lCisgICBzaXplcyBiZSB0d28gYnl0ZXMgbG9uZ2VyIHRoYW4gd291bGQgYmUgb3RoZXJ3aXNlIHJlcXVpcmVkLiAgVGhlIENSQworICAgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgc2FtZSBtZWNoYW5pc20gdXNlZCBmb3IgdGhlIENSQyBjYWxjdWxhdGlvbgorICAgaW4gSERMQy1MaXRlIChTZWUgQXBwZW5kaXggQS4xLjIpLiAgV2hlbiBib3RoIG9mIHRoZSAiQ1JDIiBiaXRzIGFyZQorICAgc2V0LCBib3RoIHNpZGVzIG11c3QgdmVyaWZ5IHRoYXQgdGhlICJDUkMiIGlzIHZhbGlkIGJlZm9yZSBhY2NlcHRpbmcKKyAgIHRoZSBmcmFtZS4gIElmIG5vdCBlbm91Z2ggYnl0ZXMgd2VyZSBjbG9ja2VkIG91dCBmb3IgdGhlIENSQyB0byBiZQorICAgcmVhZCwgdGhlbiB0aGUgZnJhbWUgbXVzdCBiZSBpZ25vcmVkLiAgSWYgZW5vdWdoIGJ5dGVzIHdlcmUgY2xvY2tlZAorICAgb3V0IHRvIHBlcmZvcm0gYSBDUkMgY2hlY2ssIGJ1dCB0aGUgQ1JDIGNoZWNrIGZhaWxzLCB0aGVuIHRoZSBmcmFtZQorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNzFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBtdXN0IGJlIHJlamVjdGVkIGFuZCB0aGUgIkNSQ19GQUlMIiBiaXQgb24gdGhlIG5leHQgZnJhbWUgKGFuZCBPTkxZCisgICB0aGUgbmV4dCBmcmFtZSkgTVVTVCBiZSBzZXQuCisKK0EuMy4gIEleMkMgUmVjb21tZW5kYXRpb25zCisKKyAgIFRCRAorCisgICBbQ1JFRjVdCisKK0EuNC4gIE5hdGl2ZSBVU0IgUmVjb21tZW5kYXRpb25zCisKKyAgIFRCRAorCisgICBbQ1JFRjZdCisKK0FwcGVuZGl4IEIuICBUZXN0IFZlY3RvcnMKKworQi4xLiAgVGVzdCBWZWN0b3I6IFBhY2tlZCBVbnNpZ25lZCBJbnRlZ2VyCisKKyAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgfCBEZWNpbWFsIFZhbHVlIHwgUGFja2V0IE9jdGV0IEVuY29kaW5nIHwKKyAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAwIHwgIjAwIiAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgIjAxIiAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgMTI3IHwgIjdGIiAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgMTI4IHwgIjgwIDAxIiAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgMTI5IHwgIjgxIDAxIiAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgIDEsMzM3IHwgIkI5IDBBIiAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgMTYsMzgzIHwgIkZGIDdGIiAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgMTYsMzg0IHwgIjgwIDgwIDAxIiAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgMTYsMzg1IHwgIjgxIDgwIDAxIiAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgMiwwOTcsMTUxIHwgIkZGIEZGIDdGIiAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgW0NSRUY3XQorCitCLjIuICBUZXN0IFZlY3RvcjogUmVzZXQgQ29tbWFuZAorCisgICBvICBOTEk6IDAKKyAgIG8gIFRJRDogMAorICAgbyAgQ01EOiAxICgiQ01EX1JFU0VUIikKKworICAgRnJhbWU6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODAgMDEKKworCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDcyXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworQi4zLiAgVGVzdCBWZWN0b3I6IFJlc2V0IE5vdGlmaWNhdGlvbgorCisgICBvICBOTEk6IDAKKyAgIG8gIFRJRDogMAorICAgbyAgQ01EOiA2ICgiQ01EX1ZBTFVFX0lTIikKKyAgIG8gIFBST1A6IDAgKCJQUk9QX0xBU1RfU1RBVFVTIikKKyAgIG8gIFZBTFVFOiAxMTQgKCJTVEFUVVNfUkVTRVRfU09GVFdBUkUiKQorCisgICBGcmFtZToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MCAwNiAwMCA3MgorCitCLjQuICBUZXN0IFZlY3RvcjogU2NhbiBCZWFjb24KKworICAgbyAgTkxJOiAwCisgICBvICBUSUQ6IDAKKyAgIG8gIENNRDogNyAoIkNNRF9WQUxVRV9JTlNFUlRFRCIpCisgICBvICBQUk9QOiA1MSAoIlBST1BfTUFDX1NDQU5fQkVBQ09OIikKKyAgIG8gIFZBTFVFOiBTdHJ1Y3R1cmUsIGVuY29kZWQgYXMgIkNjdChFU1NjKXQoaUNVZCkiCisKKyAgICAgICogIENIQU46IDE1CisgICAgICAqICBSU1NJOiAtNjBkQm0KKyAgICAgICogIE1BQ19EQVRBOiAoMEQgMDAgQjYgNDAgRDQgOEMgRTkgMzggRjkgNTIgRkYgRkYgRDIgMDQgMDApCisKKyAgICAgICAgICsgIExvbmcgYWRkcmVzczogQjY6NDA6RDQ6OEM6RTk6Mzg6Rjk6NTIKKyAgICAgICAgICsgIFNob3J0IGFkZHJlc3M6IDB4RkZGRgorICAgICAgICAgKyAgUEFOLUlEOiAweDA0RDIKKyAgICAgICAgICsgIExRSTogMAorICAgICAgKiAgTkVUX0RBVEE6ICgxMyAwMCAwMyAyMCA3MyA3MCA2OSA2RSA2NSA2QyAwMCAwOCAwMCBERSBBRCAwMCBCRQorICAgICAgICAgRUYgMDAgQ0EgRkUpCisKKyAgICAgICAgICsgIFByb3RvY29sIE51bWJlcjogMworICAgICAgICAgKyAgRmxhZ3M6IDB4MjAKKyAgICAgICAgICsgIE5ldHdvcmsgTmFtZTogInNwaW5lbCIKKyAgICAgICAgICsgIFhQQU5JRDogIkRFIEFEIDAwIEJFIEVGIDAwIENBIEZFIgorCisgICBGcmFtZToKKworICAgICAgICA4MCAwNyAzMyAwRiBDNCAwRCAwMCBCNiA0MCBENCA4QyBFOSAzOCBGOSA1MiBGRiBGRiBEMiAwNCAwMAorICAgICAgICAxMyAwMCAwMyAyMCA3MyA3MCA2OSA2RSA2NSA2QyAwMCAwOCAwMCBERSBBRCAwMCBCRSBFRiAwMCBDQQorICAgICAgICBGRQorCitCLjUuICBUZXN0IFZlY3RvcjogSW5ib3VuZCBJUHY2IFBhY2tldAorCisgICBDTURfVkFMVUVfSVMoUFJPUF9TVFJFQU1fTkVUKQorCisgICBbQ1JFRjhdCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDczXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworQi42LiAgVGVzdCBWZWN0b3I6IE91dGJvdW5kIElQdjYgUGFja2V0CisKKyAgIENNRF9WQUxVRV9TRVQoUFJPUF9TVFJFQU1fTkVUKQorCisgICBbQ1JFRjldCisKK0IuNy4gIFRlc3QgVmVjdG9yOiBGZXRjaCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3MKKworICAgbyAgTkxJOiAwCisgICBvICBUSUQ6IDQKKyAgIG8gIENNRDogMiAoIkNNRF9WQUxVRV9HRVQiKQorICAgbyAgUFJPUDogOTAgKCJQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFMiKQorCisgICBGcmFtZToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQgMDIgNUEKKworQi44LiAgVGVzdCBWZWN0b3I6IFJldHVybmVkIGxpc3Qgb2Ygb24tbWVzaCBuZXR3b3JrcworCisgICBvICBOTEk6IDAKKyAgIG8gIFRJRDogNAorICAgbyAgQ01EOiA2ICgiQ01EX1ZBTFVFX0lTIikKKyAgIG8gIFBST1A6IDkwICgiUFJPUF9USFJFQURfT05fTUVTSF9ORVRTIikKKyAgIG8gIFZBTFVFOiBBcnJheSBvZiBzdHJ1Y3R1cmVzLCBlbmNvZGVkIGFzICJBKHQoNkNiQykpIgorCisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgICAgfCBJUHY2IFByZWZpeCAgfCBQcmVmaXggTGVuZ3RoIHwgU3RhYmxlIEZsYWcgfCBPdGhlciBGbGFncyB8CisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgICAgfCAyMDAxOkRCODoxOjogfCAgICAgICA2NCAgICAgIHwgICAgIFRydWUgICAgfCAgICAgID8/ICAgICB8CisgICAgICAgfCAyMDAxOkRCODoyOjogfCAgICAgICA2NCAgICAgIHwgICAgRmFsc2UgICAgfCAgICAgID8/ICAgICB8CisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisKKyAgIEZyYW1lOgorCisgICAgICAgIDg0IDA2IDVBIDEzIDAwIDIwIDAxIDBEIEI4IDAwIDAxIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisgICAgICAgIDAwIDQwIDAxID8/IDEzIDAwIDIwIDAxIDBEIEI4IDAwIDAyIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisgICAgICAgIDAwIDAwIDQwIDAwID8/CisKK0IuOS4gIFRlc3QgVmVjdG9yOiBBZGRpbmcgYW4gb24tbWVzaCBuZXR3b3JrCisKKyAgIG8gIE5MSTogMAorICAgbyAgVElEOiA1CisgICBvICBDTUQ6IDQgKCJDTURfVkFMVUVfSU5TRVJUIikKKyAgIG8gIFBST1A6IDkwICgiUFJPUF9USFJFQURfT05fTUVTSF9ORVRTIikKKyAgIG8gIFZBTFVFOiBTdHJ1Y3R1cmUsIGVuY29kZWQgYXMgIjZDYkNiIgorCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNzRdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgICAgfCBJUHY2IFByZWZpeCAgfCBQcmVmaXggTGVuZ3RoIHwgU3RhYmxlIEZsYWcgfCBPdGhlciBGbGFncyB8CisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgICAgfCAyMDAxOkRCODozOjogfCAgICAgICA2NCAgICAgIHwgICAgIFRydWUgICAgfCAgICAgID8/ICAgICB8CisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisKKyAgIEZyYW1lOgorCisgICAgICAgIDg1IDAzIDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDQwCisgICAgICAgIDAxID8/IDAxCisKKyAgIFtDUkVGMTBdCisKK0IuMTAuICBUZXN0IFZlY3RvcjogSW5zZXJ0aW9uIG5vdGlmaWNhdGlvbiBvZiBhbiBvbi1tZXNoIG5ldHdvcmsKKworICAgbyAgTkxJOiAwCisgICBvICBUSUQ6IDUKKyAgIG8gIENNRDogNyAoIkNNRF9WQUxVRV9JTlNFUlRFRCIpCisgICBvICBQUk9QOiA5MCAoIlBST1BfVEhSRUFEX09OX01FU0hfTkVUUyIpCisgICBvICBWQUxVRTogU3RydWN0dXJlLCBlbmNvZGVkIGFzICI2Q2JDYiIKKworICAgICAgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKworICAgICAgIHwgSVB2NiBQcmVmaXggIHwgUHJlZml4IExlbmd0aCB8IFN0YWJsZSBGbGFnIHwgT3RoZXIgRmxhZ3MgfAorICAgICAgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKworICAgICAgIHwgMjAwMTpEQjg6Mzo6IHwgICAgICAgNjQgICAgICB8ICAgICBUcnVlICAgIHwgICAgICA/PyAgICAgfAorICAgICAgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKworCisgICBGcmFtZToKKworICAgICAgICA4NSAwNyA1QSAyMCAwMSAwRCBCOCAwMCAwMyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCA0MAorICAgICAgICAwMSA/PyAwMQorCisgICBbQ1JFRjExXQorCitCLjExLiAgVGVzdCBWZWN0b3I6IFJlbW92aW5nIGEgbG9jYWwgb24tbWVzaCBuZXR3b3JrCisKKyAgIG8gIE5MSTogMAorICAgbyAgVElEOiA2CisgICBvICBDTUQ6IDUgKCJDTURfVkFMVUVfUkVNT1ZFIikKKyAgIG8gIFBST1A6IDkwICgiUFJPUF9USFJFQURfT05fTUVTSF9ORVRTIikKKyAgIG8gIFZBTFVFOiBJUHY2IFByZWZpeCAiMjAwMTpEQjg6Mzo6IgorCisgICBGcmFtZToKKworICAgICAgICAgODYgMDUgNUEgMjAgMDEgMEQgQjggMDAgMDMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKworCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDc1XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworQi4xMi4gIFRlc3QgVmVjdG9yOiBSZW1vdmFsIG5vdGlmaWNhdGlvbiBvZiBhbiBvbi1tZXNoIG5ldHdvcmsKKworICAgbyAgTkxJOiAwCisgICBvICBUSUQ6IDYKKyAgIG8gIENNRDogOCAoIkNNRF9WQUxVRV9SRU1PVkVEIikKKyAgIG8gIFBST1A6IDkwICgiUFJPUF9USFJFQURfT05fTUVTSF9ORVRTIikKKyAgIG8gIFZBTFVFOiBJUHY2IFByZWZpeCAiMjAwMTpEQjg6Mzo6IgorCisgICBGcmFtZToKKworICAgICAgICAgODYgMDggNUEgMjAgMDEgMEQgQjggMDAgMDMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKworQXBwZW5kaXggQy4gIEV4YW1wbGUgU2Vzc2lvbnMKKworQy4xLiAgTkNQIEluaXRpYWxpemF0aW9uCisKKyAgIFtDUkVGMTJdCisKKyAgIENoZWNrIHRoZSBwcm90b2NvbCB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBzdXBwb3J0ZWQ6CisKKyAgIG8gIENNRF9WQUxVRV9HRVQ6UFJPUF9QUk9UT0NPTF9WRVJTSU9OCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9QUk9UT0NPTF9WRVJTSU9OCisKKyAgIENoZWNrIHRoZSBOQ1AgdmVyc2lvbiB0byBzZWUgaWYgYSBmaXJtd2FyZSB1cGRhdGUgbWF5IGJlIG5lY2Vzc2FyeToKKworICAgbyAgQ01EX1ZBTFVFX0dFVDpQUk9QX05DUF9WRVJTSU9OCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9OQ1BfVkVSU0lPTgorCisgICBDaGVjayBpbnRlcmZhY2UgdHlwZSB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyB3aGF0IHdlIGV4cGVjdDoKKworICAgbyAgQ01EX1ZBTFVFX0dFVDpQUk9QX0lOVEVSRkFDRV9UWVBFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9JTlRFUkZBQ0VfVFlQRQorCisgICBJZiB0aGUgaG9zdCBzdXBwb3J0cyB1c2luZyB2ZW5kb3Itc3BlY2lmaWMgY29tbWFuZHMsIHRoZSB2ZW5kb3IKKyAgIHNob3VsZCBiZSB2ZXJpZmllZCBiZWZvcmUgdXNpbmcgdGhlbToKKworICAgbyAgQ01EX1ZBTFVFX0dFVDpQUk9QX1ZFTkRPUl9JRAorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfVkVORE9SX0lECisKKyAgIEZldGNoIHRoZSBjYXBhYmlsaXR5IGxpc3Qgc28gdGhhdCB3ZSBrbm93IHdoYXQgZmVhdHVyZXMgdGhpcyBOQ1AKKyAgIHN1cHBvcnRzOgorCisgICBvICBDTURfVkFMVUVfR0VUOlBST1BfQ0FQUworICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfQ0FQUworCisgICBJZiB0aGUgTkNQIHN1cHBvcnRzIENBUF9ORVRfU0FWRSwgdGhlbiB3ZSBnbyBhaGVhZCBhbmQgcmVjYWxsIHRoZQorICAgbmV0d29yazoKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNzZdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBvICBDTURfTkVUX1JFQ0FMTAorCitDLjIuICBBdHRhY2hpbmcgdG8gYSBuZXR3b3JrCisKKyAgIFtDUkVGMTNdCisKKyAgIFdlIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgTkNQIGlzIG5vdCBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoCisgICBhIG5ldHdvcmsuCisKKyAgIFNldCB0aGUgbmV0d29yayBwcm9wZXJ0aWVzLCBpZiB0aGV5IHdlcmUgbm90IGFscmVhZHkgc2V0OgorCisgICBvICBDTURfVkFMVUVfU0VUOlBST1BfUEhZX0NIQU4KKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX1BIWV9DSEFOCisgICBvICBDTURfVkFMVUVfU0VUOlBST1BfTkVUX1hQQU5JRAorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1hQQU5JRAorICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX01BQ18xNV80X1BBTklECisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9NQUNfMTVfNF9QQU5JRAorICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9ORVRXT1JLX05BTUUKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX05FVF9ORVRXT1JLX05BTUUKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfTUFTVEVSX0tFWQorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX01BU1RFUl9LRVkKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUgorICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRQorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FCisKKyAgIEJyaW5nIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1cDoKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9JRl9VUDpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfSUZfVVA6VFJVRQorCisgICBCcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDoKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9TVEFDS19VUDpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorCisgICBTb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOgorCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUk9MRQorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1BBUlRJVElPTl9JRAorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfVEhSRUFEX09OX01FU0hfTkVUUworCitDLjMuICBTdWNjZXNzZnVsbHkgam9pbmluZyBhIHByZS1leGlzdGluZyBuZXR3b3JrCisKKyAgIFtDUkVGMTRdCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA3N10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGlkZW50aWNhbCB0byB0aGUgYWJvdmUgc2Vzc2lvbiB1cCB0byB0aGUKKyAgIHBvaW50IHdoZXJlIHdlIHNldCBQUk9QX05FVF9JRl9VUCB0byB0cnVlLiAgRnJvbSB0aGVyZSwgdGhlIGJlaGF2aW9yCisgICBjaGFuZ2VzLgorCisgICBvICBDTURfVkFMVUVfU0VUOlBST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORzpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HOlRSVUUKKworICAgQnJpbmcgdGhlIHJvdXRpbmcgc3RhY2sgdXA6CisKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOlRSVUUKKworICAgU29tZSBhc3luY2hyb25vdXMgZXZlbnRzIGZyb20gdGhlIE5DUDoKKworICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1JPTEUKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX05FVF9QQVJUSVRJT05fSUQKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFMKKworICAgTm93IGxldCdzIHNhdmUgdGhlIG5ldHdvcmsgc2V0dGluZ3MgdG8gTlZSQU06CisKKyAgIG8gIENNRF9ORVRfU0FWRQorCitDLjQuICBVbnN1Y2Nlc3NmdWxseSBqb2luaW5nIGEgcHJlLWV4aXN0aW5nIG5ldHdvcmsKKworICAgVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBhYm92ZSBzZXNzaW9uIHVwIHRvIHRoZQorICAgcG9pbnQgd2hlcmUgd2Ugc2V0IFBST1BfTkVUX0lGX1VQIHRvIHRydWUuICBGcm9tIHRoZXJlLCB0aGUgYmVoYXZpb3IKKyAgIGNoYW5nZXMuCisKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HOlRSVUUKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc6VFJVRQorCisgICBCcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDoKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9TVEFDS19VUDpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorCisgICBTb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOgorCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9MQVNUX1NUQVRVUzpTVEFUVVNfSk9JTl9OT19QRUVSUworICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOkZBTFNFCisKK0MuNS4gIERldGFjaGluZyBmcm9tIGEgbmV0d29yaworCisgICBUQkQKKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNzhdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCitDLjYuICBBdHRhY2hpbmcgdG8gYSBzYXZlZCBuZXR3b3JrCisKKyAgIFtDUkVGMTVdCisKKyAgIFJlY2FsbCB0aGUgc2F2ZWQgbmV0d29yayBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc286CisKKyAgIG8gIENNRF9ORVRfUkVDQUxMCisKKyAgIEJyaW5nIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1cDoKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9JRl9VUDpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfSUZfVVA6VFJVRQorCisgICBCcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDoKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9TVEFDS19VUDpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorCisgICBTb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOgorCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUk9MRQorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1BBUlRJVElPTl9JRAorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfVEhSRUFEX09OX01FU0hfTkVUUworCitDLjcuICBOQ1AgU29mdHdhcmUgUmVzZXQKKworICAgW0NSRUYxNl0KKworICAgbyAgQ01EX1JFU0VUCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9MQVNUX1NUQVRVUzpTVEFUVVNfUkVTRVRfU09GVFdBUkUKKworICAgVGhlbiBqdW1wIHRvIEFwcGVuZGl4IEMuMS4KKworQy44LiAgQWRkaW5nIGFuIG9uLW1lc2ggcHJlZml4CisKKyAgIFRCRAorCitDLjkuICBFbnRlcmluZyBsb3ctcG93ZXIgbW9kZXMKKworICAgVEJECisKK0MuMTAuICBTbmlmZmluZyByYXcgcGFja2V0cworCisgICBbQ1JFRjE3XQorCisgICBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgTkNQIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCisgICBPcHRpb25hbGx5IHNldCB0aGUgY2hhbm5lbDoKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDc5XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX1BIWV9DSEFOOngKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX1BIWV9DSEFOCisKKyAgIFNldCB0aGUgZmlsdGVyIG1vZGU6CisKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9NQUNfUFJPTUlTQ1VPVVNfTU9ERTpNQUNfUFJPTUlTQ1VPVVNfTU9ERV9NT05JVAorICAgICAgT1IKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFOk1BQ19QUk9NSVNDVU9VU19NT0RFX01PTklUTworICAgICAgUgorCisgICBFbmFibGUgdGhlIHJhdyBzdHJlYW06CisKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9NQUNfUkFXX1NUUkVBTV9FTkFCTEVEOlRSVUUKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQ6VFJVRQorCisgICBFbmFibGUgdGhlIFBIWSBkaXJlY3RseToKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX1BIWV9FTkFCTEVEOlRSVUUKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX1BIWV9FTkFCTEVEOlRSVUUKKworICAgTm93IHdlIHdpbGwgZ2V0IHJhdyA4MDIuMTUuNCBwYWNrZXRzIGFzeW5jaHJvbm91c2x5IG9uCisgICBQUk9QX1NUUkVBTV9SQVc6CisKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX1NUUkVBTV9SQVc6Li4uCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9TVFJFQU1fUkFXOi4uLgorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfU1RSRUFNX1JBVzouLi4KKworICAgVGhpcyBtb2RlIG1heSBiZSBlbnRlcmVkIGV2ZW4gd2hlbiBhc3NvY2lhdGVkIHdpdGggYSBuZXR3b3JrLiAgSW4KKyAgIHRoYXQgY2FzZSwgeW91IHNob3VsZCBzZXQgIlBST1BfTUFDX1BST01JU0NVT1VTX01PREUiIHRvCisgICAiTUFDX1BST01JU0NVT1VTX01PREVfUFJPTUlTQ1VPVVMiIG9yICJNQUNfUFJPTUlTQ1VPVVNfTU9ERV9OT1JNQUwiLAorICAgc28gdGhhdCB5b3UgY2FuIGF2b2lkIHJlY2VpdmluZyBwYWNrZXRzIGZyb20gb3RoZXIgbmV0d29ya3Mgb3IgdGhhdAorICAgYXJlIGRlc3RpbmVkIGZvciBvdGhlciBub2Rlcy4KKworQXBwZW5kaXggRC4gIEdsb3NzYXJ5CisKKyAgIFtDUkVGMThdCisKKyAgIEZDUworICAgICAgRmluYWwgQ2hlY2tzdW0uICBCeXRlcyBhZGRlZCB0byB0aGUgZW5kIG9mIGEgcGFja2V0IHRvIGhlbHAKKyAgICAgIGRldGVybWluZSBpZiB0aGUgcGFja2V0IHdhcyByZWNlaXZlZCB3aXRob3V0IGNvcnJ1cHRpb24uCisgICBOQ1AKKyAgICAgIE5ldHdvcmsgQ29udHJvbCBQcm9jZXNzb3IuCisgICBOTEkKKyAgICAgIE5ldHdvcmsgTGluayBJZGVudGlmaWVyLiAgTWF5IGJlIGEgdmFsdWUgYmV0d2VlbiB6ZXJvIGFuZCB0aHJlZS4KKyAgICAgIFNlZSBTZWN0aW9uIDIuMS4yIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgT1MKKyAgICAgIE9wZXJhdGluZyBTeXN0ZW0sIGkuZS4gdGhlIElQdjYgbm9kZSB1c2luZyBTcGluZWwgdG8gY29udHJvbCBhbmQKKyAgICAgIG1hbmFnZSBvbmUgb3IgbW9yZSBvZiBpdHMgSVB2NiBuZXR3b3JrIGludGVyZmFjZXMuCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA4MF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFBIWQorICAgICAgUGh5c2ljYWwgbGF5ZXIuICBSZWZlcnMgdG8gY2hhcmFjdGVyaXN0aWNzIGFuZCBwYXJhbWV0ZXJzIHJlbGF0ZWQKKyAgICAgIHRvIHRoZSBwaHlzaWNhbCBpbXBsZW1lbnRhdGlvbiBhbmQgb3BlcmF0aW9uIG9mIGEgbmV0d29ya2luZworICAgICAgbWVkaXVtLgorICAgUFVJCisgICAgICBQYWNrZWQgVW5zaWduZWQgSW50ZWdlci4gIEEgd2F5IHRvIHNlcmlhbGl6ZSBhbiB1bnNpZ25lZCBpbnRlZ2VyCisgICAgICB1c2luZyBvbmUsIHR3bywgb3IgdGhyZWUgYnl0ZXMuICBVc2VkIHRocm91Z2hvdXQgdGhlIFNwaW5lbAorICAgICAgcHJvdG9jb2wuICBTZWUgU2VjdGlvbiAzLjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICBUSUQKKyAgICAgIFRyYW5zYWN0aW9uIElkZW50aWZpZXIuICBNYXkgYmUgYSB2YWx1ZSBiZXR3ZWVuIHplcm8gYW5kIGZpZnRlZW4uCisgICAgICBTZWUgU2VjdGlvbiAyLjEuMyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworQXBwZW5kaXggRS4gIEFja25vd2xlZGdtZW50cworCisgICBUaHJlYWQgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBUaGUgVGhyZWFkIEdyb3VwLCBJbmMuCisKKyAgIFNwZWNpYWwgdGhhbmtzIHRvIE5pY2sgQmFua3MsIEpvbmF0aGFuIEh1aSwgQWJ0aW4gS2VzaGF2YXJ6aWFuLCBZYWt1bgorICAgWHUsIFBpb3RyIFN6a290YWssIEFyanVuYSBTaXZhc2l0aGFtYmFyZXNhbiBhbmQgTWFydGluIFR1cm9uIGZvcgorICAgdGhlaXIgc3Vic3RhbnRpYWwgY29udHJpYnV0aW9ucyBhbmQgZmVlZGJhY2sgcmVsYXRlZCB0byB0aGlzCisgICBkb2N1bWVudC4KKworICAgVGhpcyBkb2N1bWVudCB3YXMgcHJlcGFyZWQgdXNpbmcgbW1hcmsgWzNdIGJ5IChNaWVrIEdpZWJlbikgYW5kCisgICB4bWwycmZjICh2ZXJzaW9uIDIpIFs0XS4KKworRWRpdG9yaWFsIENvbW1lbnRzCisKK1tDUkVGMV0gUlE6IEV2ZW50dWFsbHksIHdoZW4gaHR0cHM6Ly9naXRodWIuY29tL21pZWtnL21tYXJrL2lzc3Vlcy85NSBpcworICAgICAgICBhZGRyZXNzZWQsIHRoZSBhYm92ZSB0YWJsZSBzaG91bGQgYmUgc3dhcHBlZCBvdXQgd2l0aCB0aGlzOiB8CisgICAgICAgIDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfAorICAgICAgICA3IHwgfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfC0tLXwtLS18IHwgRkxHIHx8IE5MSSB8fCBUSUQgfHx8fAorCitbQ1JFRjJdIFJROiBXZSBzaG91bGQgY29uc2lkZXIgcmV2ZXJzaW5nIHRoZSBudW1iZXJpbmcgaGVyZSBzbyB0aGF0IDAgaXMKKyAgICAgICAgYFBPV0VSX1NUQVRFX09OTElORWAuIFdlIG1heSBhbHNvIHdhbnQgdG8gaW5jbHVkZSBzb21lIGV4dHJhCisgICAgICAgIHZhbHVlcyBiZXR3ZWVuIHRoZSBkZWZpbmVkIHZhbHVlcyBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgc28gdGhhdAorICAgICAgICB3ZSBjYW4gcHJlc2VydmUgdGhlIG9yZGVyZWQgcmVsYXRpb25zaGlwLiAtLQorCitbQ1JFRjNdIFJROiBXZSBzaG91bGQgY29uc2lkZXIgcmV2ZXJzaW5nIHRoZSBudW1iZXJpbmcgaGVyZSBzbyB0aGF0IDAgaXMKKyAgICAgICAgYFBPV0VSX1NUQVRFX09OTElORWAuIFdlIG1heSBhbHNvIHdhbnQgdG8gaW5jbHVkZSBzb21lIGV4dHJhCisgICAgICAgIHZhbHVlcyBiZXR3ZWVuIHRoZSBkZWZpbmVkIHZhbHVlcyBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgc28gdGhhdAorICAgICAgICB3ZSBjYW4gcHJlc2VydmUgdGhlIG9yZGVyZWQgcmVsYXRpb25zaGlwLiAtLQorCitbQ1JFRjRdIFJROiBUaGUganVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIGJlaGF2aW9yIGlzIHRvIGF0dGVtcHQgdG8KKyAgICAgICAgYXZvaWQgcG9zc2libGUgZnV0dXJlIGludGVyb3AgcHJvYmxlbXMgYnkgZXhwbGljaXRseSBtYWtpbmcgc3VyZQorICAgICAgICB0aGF0IHVua25vd24gcHJvcGVydGllcyBhcmUgaWdub3JlZC4gIFNpbmNlIHVua25vd24gcHJvcGVydGllcworICAgICAgICB3aWxsIG9idmlvdXNseSBub3QgYmUgZ2VuZXJhdGluZyB1bnNvbGljaXRlZCB1cGRhdGVzLCBpdCBzZWVtcworICAgICAgICBmYWlybHkgaGFybWxlc3MuICBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgcHJpbnQgb3V0IGEgd2FybmluZyB0bworICAgICAgICB0aGUgZGVidWcgc3RyZWFtLiAgTm90ZSB0aGF0IHRoZSBlcnJvciBpcyBzdGlsbCBkZXRlY3RhYmxlOiBJZgorICAgICAgICB5b3UgVkFMVUVcX1NFVCB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLCB0aGUgcmVzdWx0aW5nIFZBTFVFXF9JUworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgODFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICAgICAgIHdvdWxkIGNvbnRhaW4gb25seSB0aGUgc3VwcG9ydGVkIHByb3BlcnRpZXMgb2YgdGhhdCBzZXQoc2luY2UKKyAgICAgICAgdGhlIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMgd291bGQgYmUgaWdub3JlZCkuICBJZiBhbgorICAgICAgICBpbXBsZW1lbnRhdGlvbiBjYXJlcyB0aGF0IG11Y2ggYWJvdXQgZ2V0dGluZyB0aGlzIHJpZ2h0IHRoZW4gaXQKKyAgICAgICAgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgaXQgY2hlY2tzIFBST1BcX1VOU09MXF9VUERBVEVcX0xJU1QKKyAgICAgICAgZmlyc3QuICAtLQorCitbQ1JFRjVdIFJROiBJdCBtYXkgbWFrZSBzZW5zZSB0byBoYXZlIGEgbG9vayBhdCB3aGF0IEJsdWV0b290aCBIQ0kgaXMKKyAgICAgICAgZG9pbmcgZm9yIG5hdGl2ZSBJXjJDIGZyYW1pbmcgYW5kIGdvIHdpdGggdGhhdC4KKworW0NSRUY2XSBSUTogSXQgbWF5IG1ha2Ugc2Vuc2UgdG8gaGF2ZSBhIGxvb2sgYXQgd2hhdCBCbHVldG9vdGggSENJIGlzCisgICAgICAgIGRvaW5nIGZvciBuYXRpdmUgVVNCIGZyYW1pbmcgYW5kIGdvIHdpdGggdGhhdC4KKworW0NSRUY3XSBSUTogVGhlIFBVSSB0ZXN0LXZlY3RvciBlbmNvZGluZ3MgbmVlZCB0byBiZSB2ZXJpZmllZC4KKworW0NSRUY4XSBSUTogRklYTUU6IFRoaXMgdGVzdCB2ZWN0b3IgaXMgaW5jb21wbGV0ZS4KKworW0NSRUY5XSBSUTogRklYTUU6IFRoaXMgdGVzdCB2ZWN0b3IgaXMgaW5jb21wbGV0ZS4KKworW0NSRUYxMF0gUlE6IEZJWE1FOiBUaGlzIHRlc3QgdmVjdG9yIGlzIGluY29tcGxldGUuCisKK1tDUkVGMTFdIFJROiBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLgorCitbQ1JFRjEyXSBSUTogRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuCisKK1tDUkVGMTNdIFJROiBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS4KKworW0NSRUYxNF0gUlE6IEZJWE1FOiBUaGlzIGV4YW1wbGUgc2Vzc2lvbiBpcyBpbmNvbXBsZXRlLgorCitbQ1JFRjE1XSBSUTogRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuCisKK1tDUkVGMTZdIFJROiBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS4KKworW0NSRUYxN10gUlE6IEZJWE1FOiBUaGlzIGV4YW1wbGUgc2Vzc2lvbiBpcyBpbmNvbXBsZXRlLgorCitbQ1JFRjE4XSBSUTogQWxwaGFiZXRpemUgYmVmb3JlIGZpbmFsaXphdGlvbi4KKworQXV0aG9ycycgQWRkcmVzc2VzCisKKyAgIFJvYmVydCBTLiBRdWF0dGxlYmF1bQorICAgTmVzdCBMYWJzLCBJbmMuCisgICAzNDAwIEhpbGx2aWV3IEF2ZS4KKyAgIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSAgOTQzMDQKKyAgIFVTQQorCisgICBFbWFpbDogcnF1YXR0bGVAbmVzdGxhYnMuY29tCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA4Ml0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIEphbWVzIFdvb2R5YXR0IChlZGl0b3IpCisgICBOZXN0IExhYnMsIEluYy4KKyAgIDM0MDAgSGlsbHZpZXcgQXZlLgorICAgUGFsbyBBbHRvLCBDYWxpZm9ybmlhICA5NDMwNAorICAgVVNBCisKKyAgIEVtYWlsOiBqaHdAbmVzdGxhYnMuY29tCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgODNdCmRpZmYgLS1naXQgYS9kb2MvaGVhZGVyLmh0bWwgYi9kb2MvaGVhZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyODRkNwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9oZWFkZXIuaHRtbApAQCAtMCwwICsxLDU1IEBACis8IS0tIEhUTUwgaGVhZGVyIGZvciBkb3h5Z2VuIDEuOC45LjEtLT4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9OSIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuICRkb3h5Z2VudmVyc2lvbiIvPgorPCEtLUJFR0lOIFBST0pFQ1RfTkFNRS0tPjx0aXRsZT4kcHJvamVjdG5hbWU6ICR0aXRsZTwvdGl0bGU+PCEtLUVORCBQUk9KRUNUX05BTUUtLT4KKzwhLS1CRUdJTiAhUFJPSkVDVF9OQU1FLS0+PHRpdGxlPiR0aXRsZTwvdGl0bGU+PCEtLUVORCAhUFJPSkVDVF9OQU1FLS0+Cis8bGluayBocmVmPSIkcmVscGF0aF50YWJzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJHJlbHBhdGheanF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiRyZWxwYXRoXmR5bnNlY3Rpb25zLmpzIj48L3NjcmlwdD4KKyR0cmVldmlldworJHNlYXJjaAorJG1hdGhqYXgKKzxsaW5rIGhyZWY9IiRyZWxwYXRoXiRzdHlsZXNoZWV0IiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgorJGV4dHJhc3R5bGVzaGVldAorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0b3AiPjwhLS0gZG8gbm90IHJlbW92ZSB0aGlzIGRpdiwgaXQgaXMgY2xvc2VkIGJ5IGRveHlnZW4hIC0tPgorCis8IS0tQkVHSU4gVElUTEVBUkVBLS0+Cis8ZGl2IGlkPSJ0aXRsZWFyZWEiPgorPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CisgPHRib2R5PgorIDx0ciBzdHlsZT0iaGVpZ2h0OiA1NnB4OyI+CisgIDwhLS1CRUdJTiBQUk9KRUNUX0xPR08tLT4KKyAgPHRkIGlkPSJwcm9qZWN0bG9nbyI+PGltZyBhbHQ9IkxvZ28iIHNyYz0iJHJlbHBhdGheJHByb2plY3Rsb2dvIi8+PC90ZD4KKyAgPCEtLUVORCBQUk9KRUNUX0xPR08tLT4KKyAgPCEtLUJFR0lOIFBST0pFQ1RfTkFNRS0tPgorICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDogMC41ZW07Ij4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj4KKyAgIDwhLS1CRUdJTiBQUk9KRUNUX05VTUJFUi0tPiYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4kcHJvamVjdG51bWJlcjwvc3Bhbj48IS0tRU5EIFBST0pFQ1RfTlVNQkVSLS0+CisgICA8L2Rpdj4KKyAgIDwhLS1CRUdJTiBQUk9KRUNUX0JSSUVGLS0+PGRpdiBpZD0icHJvamVjdGJyaWVmIj4kcHJvamVjdGJyaWVmPC9kaXY+PCEtLUVORCBQUk9KRUNUX0JSSUVGLS0+CisgIDwvdGQ+CisgIDwhLS1FTkQgUFJPSkVDVF9OQU1FLS0+CisgIDwhLS1CRUdJTiAhUFJPSkVDVF9OQU1FLS0+CisgICA8IS0tQkVHSU4gUFJPSkVDVF9CUklFRi0tPgorICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OiAwLjVlbTsiPgorICAgIDxkaXYgaWQ9InByb2plY3RicmllZiI+JHByb2plY3RicmllZjwvZGl2PgorICAgIDwvdGQ+CisgICA8IS0tRU5EIFBST0pFQ1RfQlJJRUYtLT4KKyAgPCEtLUVORCAhUFJPSkVDVF9OQU1FLS0+CisgIDwhLS1CRUdJTiBESVNBQkxFX0lOREVYLS0+CisgICA8IS0tQkVHSU4gU0VBUkNIRU5HSU5FLS0+CisgICA8dGQ+JHNlYXJjaGJveDwvdGQ+CisgICA8IS0tRU5EIFNFQVJDSEVOR0lORS0tPgorICA8IS0tRU5EIERJU0FCTEVfSU5ERVgtLT4KKyA8L3RyPgorIDwvdGJvZHk+Cis8L3RhYmxlPgorPC9kaXY+Cis8IS0tRU5EIFRJVExFQVJFQS0tPgorPCEtLSBlbmQgaGVhZGVyIHBhcnQgLS0+CmRpZmYgLS1naXQgYS9kb2MvaW1hZ2VzL09wZW4tVGhyZWFkLUxvZ28tMjAweDQyLnBuZyBiL2RvYy9pbWFnZXMvT3Blbi1UaHJlYWQtTG9nby0yMDB4NDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZTk1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaW1hZ2VzL09wZW4tVGhyZWFkLUxvZ28tMjAweDQyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvaW1hZ2VzL2NlcnRpZmllZC5zdmcgYi9kb2MvaW1hZ2VzL2NlcnRpZmllZC5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjNjVjNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvY2VydGlmaWVkLnN2ZwpAQCAtMCwwICsxLDgzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgorPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKKwkgdmlld0JveD0iMCAwIDkyLjEgNDIuNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgOTIuMSA0Mi42OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorCS5zdDB7ZmlsbDojRkY2NjMzO30KKwkuc3Qxe2ZpbGw6I0ZGRkZGRjt9Cis8L3N0eWxlPgorPGc+CisJPGc+CisJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik04NiwwTDIxLjMsMEM5LjUsMCwwLDkuNSwwLDIxLjNDMCwzMyw5LjUsNDIuNiwyMS4zLDQyLjZsNjQuNywwYzMuNCwwLDYuMS0yLjcsNi4xLTYuMVY2LjEKKwkJCUM5Mi4xLDIuNyw4OS40LDAsODYsMHoiLz4KKwk8L2c+CisJPGc+CisJCTxnPgorCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTIxLjMsNi4xYy04LjQsMC0xNS4yLDYuOC0xNS4yLDE1LjJjMCw4LjMsNi43LDE1LjEsMTUsMTUuMlYyMS4zaC01Yy0xLjUsMC0yLjcsMS4yLTIuNywyLjcKKwkJCQljMCwxLjUsMS4yLDIuNywyLjcsMi43VjMwYy0zLjMsMC02LTIuNy02LTZjMC0zLjMsMi43LTYsNi02aDV2LTEuN2MwLTIuOCwyLjItNSw1LTVjMi43LDAsNSwyLjIsNSw1YzAsMi44LTIuMiw1LTUsNWgtMS43djE0LjkKKwkJCQljNi45LTEuNSwxMi4xLTcuNiwxMi4xLTE0LjlDMzYuNSwxMi45LDI5LjcsNi4xLDIxLjMsNi4xeiIvPgorCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTI3LjgsMTYuM2MwLTAuOS0wLjgtMS43LTEuNy0xLjdjLTAuOSwwLTEuNywwLjgtMS43LDEuN1YxOGgxLjdDMjcsMTgsMjcuOCwxNy4yLDI3LjgsMTYuM3oiLz4KKwkJPC9nPgorCQk8Zz4KKwkJCTxnPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik00Ni45LDIwLjhjMC4zLDAsMC42LDAuMSwwLjksMC4yYzAuMywwLjEsMC41LDAuMywwLjcsMC41TDQ3LjksMjJjLTAuMy0wLjMtMC42LTAuNC0xLjEtMC40CisJCQkJCWMtMC4yLDAtMC40LDAtMC42LDAuMWMtMC4yLDAuMS0wLjMsMC4yLTAuNSwwLjNjLTAuMSwwLjEtMC4yLDAuMy0wLjMsMC41Yy0wLjEsMC4yLTAuMSwwLjQtMC4xLDAuNmMwLDAuMiwwLDAuNCwwLjEsMC42CisJCQkJCWMwLjEsMC4yLDAuMiwwLjMsMC4zLDAuNWMwLjEsMC4xLDAuMywwLjIsMC41LDAuM2MwLjIsMC4xLDAuNCwwLjEsMC42LDAuMWMwLjQsMCwwLjgtMC4xLDEuMS0wLjRsMC41LDAuNQorCQkJCQljLTAuMiwwLjItMC40LDAuNC0wLjcsMC41Yy0wLjMsMC4xLTAuNiwwLjItMC45LDAuMmMtMC4zLDAtMC42LTAuMS0wLjktMC4yYy0wLjMtMC4xLTAuNS0wLjMtMC43LTAuNWMtMC4yLTAuMi0wLjQtMC40LTAuNS0wLjcKKwkJCQkJYy0wLjEtMC4zLTAuMi0wLjYtMC4yLTAuOWMwLTAuMywwLjEtMC42LDAuMi0wLjljMC4xLTAuMywwLjMtMC41LDAuNS0wLjdjMC4yLTAuMiwwLjQtMC40LDAuNy0wLjUKKwkJCQkJQzQ2LjMsMjAuOSw0Ni42LDIwLjgsNDYuOSwyMC44eiIvPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik01MywyMC44djAuOGgtMi4zdjEuMUg1M3YwLjdoLTIuM3YxLjFINTN2MC44aC0zdi00LjVINTN6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTU3LjUsMjUuNGwtMC45LTEuNWgtMS4zdjEuNWgtMC43di00LjVoMi4zYzAuNCwwLDAuOCwwLjEsMS4xLDAuNGMwLjMsMC4zLDAuNCwwLjYsMC40LDEuMQorCQkJCQljMCwwLjMtMC4xLDAuNi0wLjMsMC45Yy0wLjIsMC4zLTAuNCwwLjQtMC43LDAuNWwwLjksMS42SDU3LjV6IE01Ni44LDIxLjZoLTEuNXYxLjVsMS41LDBjMC4yLDAsMC40LTAuMSwwLjUtMC4yCisJCQkJCWMwLjEtMC4xLDAuMi0wLjMsMC4yLTAuNWMwLTAuMi0wLjEtMC40LTAuMi0wLjVDNTcuMiwyMS43LDU3LDIxLjYsNTYuOCwyMS42eiIvPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik01OS4zLDIwLjhoMy44djAuOGgtMS41djMuOGgtMC44di0zLjhoLTEuNVYyMC44eiIvPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02NC41LDIwLjhoMC44djQuNWgtMC44VjIwLjh6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTY5LjgsMjAuOHYwLjhoLTIuM3YxLjFoMi4zdjAuN2gtMi4zdjEuOWgtMC43di00LjVINjkuOHoiLz4KKwkJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzEuNCwyMC44aDAuN3Y0LjVoLTAuN1YyMC44eiIvPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik03Ni43LDIwLjh2MC44aC0yLjN2MS4xaDIuM3YwLjdoLTIuM3YxLjFoMi4zdjAuOGgtM3YtNC41SDc2Ljd6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTc4LjIsMjAuOGgxLjVjMC4zLDAsMC42LDAuMSwwLjksMC4yYzAuMywwLjEsMC41LDAuMywwLjcsMC41YzAuMiwwLjIsMC40LDAuNCwwLjUsMC43CisJCQkJCWMwLjEsMC4zLDAuMiwwLjYsMC4yLDAuOWMwLDAuMy0wLjEsMC42LTAuMiwwLjljLTAuMSwwLjMtMC4zLDAuNS0wLjUsMC43Yy0wLjIsMC4yLTAuNCwwLjQtMC43LDAuNWMtMC4zLDAuMS0wLjYsMC4yLTAuOSwwLjIKKwkJCQkJaC0xLjVWMjAuOHogTTc5LjcsMjQuNmMwLjIsMCwwLjQsMCwwLjYtMC4xYzAuMi0wLjEsMC4zLTAuMiwwLjUtMC4zYzAuMS0wLjEsMC4yLTAuMywwLjMtMC41YzAuMS0wLjIsMC4xLTAuNCwwLjEtMC42CisJCQkJCWMwLTAuMiwwLTAuNC0wLjEtMC42Yy0wLjEtMC4yLTAuMi0wLjMtMC4zLTAuNWMtMC4xLTAuMS0wLjMtMC4yLTAuNS0wLjNjLTAuMi0wLjEtMC40LTAuMS0wLjYtMC4xSDc5djNINzkuN3oiLz4KKwkJCTwvZz4KKwkJCTxnPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik00Mi4yLDI4YzAuMywwLDAuNiwwLjEsMC45LDAuMmMwLjMsMC4xLDAuNSwwLjMsMC43LDAuNWwtMC41LDAuNWMtMC4zLTAuMy0wLjYtMC40LTEuMS0wLjQKKwkJCQkJYy0wLjIsMC0wLjQsMC0wLjYsMC4xYy0wLjIsMC4xLTAuMywwLjItMC41LDAuM2MtMC4xLDAuMS0wLjIsMC4zLTAuMywwLjVjLTAuMSwwLjItMC4xLDAuNC0wLjEsMC42YzAsMC4yLDAsMC40LDAuMSwwLjYKKwkJCQkJYzAuMSwwLjIsMC4yLDAuMywwLjMsMC41YzAuMSwwLjEsMC4zLDAuMiwwLjUsMC4zYzAuMiwwLjEsMC40LDAuMSwwLjYsMC4xYzAuNCwwLDAuOC0wLjEsMS4xLTAuNGwwLjUsMC41CisJCQkJCWMtMC4yLDAuMi0wLjQsMC40LTAuNywwLjVjLTAuMywwLjEtMC42LDAuMi0wLjksMC4yYy0wLjMsMC0wLjYtMC4xLTAuOS0wLjJjLTAuMy0wLjEtMC41LTAuMy0wLjctMC41Yy0wLjItMC4yLTAuNC0wLjQtMC41LTAuNworCQkJCQljLTAuMS0wLjMtMC4yLTAuNi0wLjItMC45YzAtMC4zLDAuMS0wLjYsMC4yLTAuOWMwLjEtMC4zLDAuMy0wLjUsMC41LTAuN2MwLjItMC4yLDAuNC0wLjQsMC43LTAuNUM0MS42LDI4LjEsNDEuOSwyOCw0Mi4yLDI4eiIKKwkJCQkJLz4KKwkJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNDcsMjhjMC42LDAsMS4yLDAuMiwxLjYsMC43YzAuNCwwLjQsMC43LDEsMC43LDEuNmMwLDAuNi0wLjIsMS4yLTAuNywxLjZjLTAuNCwwLjQtMSwwLjctMS42LDAuNworCQkJCQljLTAuNiwwLTEuMi0wLjItMS42LTAuN2MtMC40LTAuNC0wLjctMS0wLjctMS42YzAtMC42LDAuMi0xLjEsMC43LTEuNkM0NS44LDI4LjIsNDYuMywyOCw0NywyOHogTTQ3LDI4LjgKKwkJCQkJYy0wLjQsMC0wLjgsMC4xLTEuMSwwLjRjLTAuMywwLjMtMC40LDAuNi0wLjQsMS4xYzAsMC40LDAuMSwwLjgsMC40LDEuMWMwLjMsMC4zLDAuNywwLjQsMS4xLDAuNGMwLjQsMCwwLjgtMC4xLDEuMS0wLjQKKwkJCQkJYzAuMy0wLjMsMC40LTAuNywwLjQtMS4xYzAtMC40LTAuMS0wLjgtMC40LTEuMUM0Ny43LDI4LjksNDcuNCwyOC44LDQ3LDI4Ljh6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTUxLjMsMjkuOHYyLjdoLTAuN1YyOGwyLjMsMi4zbDIuMy0yLjN2NC41aC0wLjh2LTIuN2wtMS41LDEuNUw1MS4zLDI5Ljh6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTU3LjcsMzF2MS41SDU3VjI4aDIuM2MwLjQsMCwwLjgsMC4xLDEuMSwwLjRjMC4zLDAuMywwLjQsMC42LDAuNCwxLjFjMCwwLjQtMC4xLDAuOC0wLjQsMS4xCisJCQkJCUM2MCwzMC45LDU5LjcsMzEsNTkuMiwzMUg1Ny43eiBNNTcuNywyOC44djEuNWgxLjVjMC4yLDAsMC40LTAuMSwwLjUtMC4yYzAuMS0wLjEsMC4yLTAuMywwLjItMC41YzAtMC4yLTAuMS0wLjQtMC4yLTAuNQorCQkJCQljLTAuMS0wLjEtMC4zLTAuMi0wLjUtMC4ySDU3Ljd6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTY0LjEsMjhjMC42LDAsMS4yLDAuMiwxLjYsMC43YzAuNCwwLjQsMC43LDEsMC43LDEuNmMwLDAuNi0wLjIsMS4yLTAuNywxLjZjLTAuNCwwLjQtMSwwLjctMS42LDAuNworCQkJCQljLTAuNiwwLTEuMi0wLjItMS42LTAuN2MtMC40LTAuNC0wLjctMS0wLjctMS42YzAtMC42LDAuMi0xLjEsMC43LTEuNkM2Mi45LDI4LjIsNjMuNSwyOCw2NC4xLDI4eiBNNjQuMSwyOC44CisJCQkJCWMtMC40LDAtMC44LDAuMS0xLjEsMC40Yy0wLjMsMC4zLTAuNCwwLjYtMC40LDEuMWMwLDAuNCwwLjEsMC44LDAuNCwxLjFjMC4zLDAuMywwLjcsMC40LDEuMSwwLjRjMC40LDAsMC44LTAuMSwxLjEtMC40CisJCQkJCWMwLjMtMC4zLDAuNC0wLjcsMC40LTEuMWMwLTAuNC0wLjEtMC44LTAuNC0xLjFDNjQuOSwyOC45LDY0LjUsMjguOCw2NC4xLDI4Ljh6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTY3LjcsMjhsMywyLjdWMjhoMC44djQuNXYwdjBsLTMtMi43djIuN2gtMC44VjI4eiIvPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik03NiwyOHYwLjhoLTIuM3YxLjFINzZ2MC43aC0yLjN2MS4xSDc2djAuOGgtM1YyOEg3NnoiLz4KKwkJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzcuNiwyOGwzLDIuN1YyOGgwLjh2NC41djB2MGwtMy0yLjd2Mi43aC0wLjdWMjh6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTgyLjksMjhoMy44djAuOGgtMS41djMuOGgtMC44di0zLjhoLTEuNVYyOHoiLz4KKwkJCTwvZz4KKwkJCTxnPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0zOS45LDEwaDUuN3YxLjFoLTIuM3Y1LjZoLTEuMXYtNS42aC0yLjNWMTB6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTQ4LjIsMTBoMS4xdjIuOGgzLjRWMTBoMS4xdjYuOGgtMS4xVjE0aC0zLjR2Mi44aC0xLjFWMTB6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTYxLjEsMTYuOGwtMS4zLTIuM2gtMS45djIuM2gtMS4xVjEwaDMuNGMwLjYsMCwxLjEsMC4yLDEuNiwwLjdjMC40LDAuNCwwLjcsMSwwLjcsMS42CisJCQkJCWMwLDAuNS0wLjEsMC45LTAuNCwxLjNjLTAuMywwLjQtMC42LDAuNi0xLDAuOGwxLjQsMi40SDYxLjF6IE02MC4yLDExLjJoLTIuM3YyLjJsMi4zLDBjMC4zLDAsMC42LTAuMSwwLjgtMC4zCisJCQkJCWMwLjItMC4yLDAuMy0wLjUsMC4zLTAuOGMwLTAuMy0wLjEtMC42LTAuMy0wLjhDNjAuNywxMS4zLDYwLjUsMTEuMiw2MC4yLDExLjJ6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTY5LjcsMTB2MS4xaC0zLjR2MS43aDMuNFYxNGgtMy40djEuN2gzLjR2MS4xaC00LjVWMTBINjkuN3oiLz4KKwkJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzYuOSwxNS43aC0zLjFsLTAuNiwxLjFINzJsMy40LTYuOGwzLjQsNi44aC0xLjNMNzYuOSwxNS43eiBNNzQuNCwxNC42aDJsLTEtMkw3NC40LDE0LjZ6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTgxLDEwaDIuM2MwLjUsMCwwLjksMC4xLDEuMywwLjNjMC40LDAuMiwwLjgsMC40LDEuMSwwLjdjMC4zLDAuMywwLjYsMC43LDAuNywxLjEKKwkJCQkJYzAuMiwwLjQsMC4zLDAuOCwwLjMsMS4zYzAsMC41LTAuMSwwLjktMC4zLDEuM2MtMC4yLDAuNC0wLjQsMC44LTAuNywxLjFjLTAuMywwLjMtMC43LDAuNi0xLjEsMC43Yy0wLjQsMC4yLTAuOSwwLjMtMS4zLDAuMworCQkJCQlIODFWMTB6IE04My4zLDE1LjdjMC4zLDAsMC42LTAuMSwwLjktMC4yYzAuMy0wLjEsMC41LTAuMywwLjctMC41YzAuMi0wLjIsMC40LTAuNSwwLjUtMC43YzAuMS0wLjMsMC4yLTAuNiwwLjItMC45CisJCQkJCWMwLTAuMy0wLjEtMC42LTAuMi0wLjljLTAuMS0wLjMtMC4zLTAuNS0wLjUtMC43Yy0wLjItMC4yLTAuNS0wLjQtMC43LTAuNWMtMC4zLTAuMS0wLjYtMC4yLTAuOS0wLjJoLTEuMXY0LjVIODMuM3oiLz4KKwkJCTwvZz4KKwkJPC9nPgorCTwvZz4KKzwvZz4KKzwvc3ZnPgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vcGVudGhyZWFkX2NvbnRyaWIucG5nIGIvZG9jL2ltYWdlcy9vcGVudGhyZWFkX2NvbnRyaWIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZDgwZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaW1hZ2VzL29wZW50aHJlYWRfY29udHJpYi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vcGVudGhyZWFkX2xvZ28ucG5nIGIvZG9jL2ltYWdlcy9vcGVudGhyZWFkX2xvZ28ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTY1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaW1hZ2VzL29wZW50aHJlYWRfbG9nby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb2RlbGFiLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29kZWxhYi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhNDlkNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29kZWxhYi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLWFybS5wbmcgYi9kb2MvaW1hZ2VzL290LWNvbnRyaWItYXJtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQ1NTZlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy9vdC1jb250cmliLWFybS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLWF0bWVsLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1hdG1lbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4MzIyZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1hdG1lbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLWRpYWxvZy5wbmcgYi9kb2MvaW1hZ2VzL290LWNvbnRyaWItZGlhbG9nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzI2MTdlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy9vdC1jb250cmliLWRpYWxvZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLW1zLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1tcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQwM2E0MAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1tcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLW5lc3QucG5nIGIvZG9jL2ltYWdlcy9vdC1jb250cmliLW5lc3QucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNzlkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaW1hZ2VzL290LWNvbnRyaWItbmVzdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLW5vcmRpYy5wbmcgYi9kb2MvaW1hZ2VzL290LWNvbnRyaWItbm9yZGljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjI5YWVmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy9vdC1jb250cmliLW5vcmRpYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLW54cC5wbmcgYi9kb2MvaW1hZ2VzL290LWNvbnRyaWItbnhwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWM0MGEwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy9vdC1jb250cmliLW54cC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLXFjLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1xYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmY2UzMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1xYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLXN5bm9wc3lzLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1zeW5vcHN5cy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhODYyOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1zeW5vcHN5cy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLXRpLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi10aS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4OTAxYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi10aS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC1kZXRhaWxzLnBuZyBiL2RvYy9pbWFnZXMvd2luZG93cy1hcHAtZGV0YWlscy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5NzdjMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvd2luZG93cy1hcHAtZGV0YWlscy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC1pbnRlcmZhY2UtbGlzdC5wbmcgYi9kb2MvaW1hZ2VzL3dpbmRvd3MtYXBwLWludGVyZmFjZS1saXN0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjJiNWYyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC1pbnRlcmZhY2UtbGlzdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC10YWxrLWNsaWVudC5wbmcgYi9kb2MvaW1hZ2VzL3dpbmRvd3MtYXBwLXRhbGstY2xpZW50LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDBjOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC10YWxrLWNsaWVudC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC10YWxrLXNlcnZlci5wbmcgYi9kb2MvaW1hZ2VzL3dpbmRvd3MtYXBwLXRhbGstc2VydmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU2ODliCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC10YWxrLXNlcnZlci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy93aW5kb3dzX2Rlc2lnbi5wbmcgYi9kb2MvaW1hZ2VzL3dpbmRvd3NfZGVzaWduLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWZhMzQzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy93aW5kb3dzX2Rlc2lnbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvTWFrZWZpbGUgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTFmYjIxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvTWFrZWZpbGUKQEAgLTAsMCArMSwxMTQgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgTmVzdCBMYWJzLCBJbmMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK1hNTDJSRkNfQ0FDSEVfRElSID89ICQoSE9NRSkvLmNhY2hlL3htbDJyZmMKKworVE9PTF9QUkVGSVggICAgICAgID0gJChET0NLRVIpIHJ1biAtLXJtIC0tdXNlcj1gaWQgLXVgOmBpZCAtZ2AgLXYgYHB3ZGA6L3JmYyAtdiAkKFhNTDJSRkNfQ0FDSEVfRElSKTovdmFyL2NhY2hlL3htbDJyZmMgcGF1bGVqL3JmY3Rvb2xzCisKK0RPQ0tFUiAgICAgICAgICAgID89IGRvY2tlcgorTUQyUkZDICAgICAgICAgICAgPz0gJChUT09MX1BSRUZJWCkgbWQycmZjCitYTUwyUkZDICAgICAgICAgICA/PSAkKFRPT0xfUFJFRklYKSB4bWwycmZjCitNTUFSSyAgICAgICAgICAgICA/PSAkKFRPT0xfUFJFRklYKSBtbWFyaworU0VEICAgICAgICAgICAgICAgPz0gc2VkCitSTV9GCQkgICAgICA/PSBybSAtZgorTUtESVJfUAkJICAgICAgPz0gbWtkaXIgLXAKKworU09VUkNFX0RBVEUgICAgICAgOj0gJChzaGVsbCAoVFo9VVRDIGdpdCBsb2cgLW4gMSAtLWRhdGU9aXNvLXN0cmljdC1sb2NhbCAtLXByZXR0eT1mb3JtYXQ6JWFkIDI+IC9kZXYvbnVsbCB8fCBkYXRlIC11ICsiJVktJW0tJWRUJUg6JU06JVNaIiApIHwgc2VkICdzLyswMDowMCQkL1ovJykKK1NPVVJDRV9WRVJTSU9OICAgID89ICQoc2hlbGwgZ2l0IGRlc2NyaWJlIC0tZGlydHkgLS1hbHdheXMgLS1tYXRjaCAiLS1Qb0lzT24tLSIgMj4gL2Rldi9udWxsKQorCisjIC0tLS0tLS0tLS0tLS0KKworU1JDICAgOj0gJCh3aWxkY2FyZCBkcmFmdC0qLm1kKSAkKHdpbGRjYXJkIGRyYWZ0LSoubWQuaW4pCitYTUwgICA6PSAkKHBhdHN1YnN0ICUubWQsJS54bWwsJChwYXRzdWJzdCAlLm1kLmluLCUueG1sLCQoU1JDKSkpCitUWFQgICA6PSAkKHBhdHN1YnN0ICUubWQsJS50eHQsJChwYXRzdWJzdCAlLm1kLmluLCUudHh0LCQoU1JDKSkpCitIVE1MICA6PSAkKHBhdHN1YnN0ICUubWQsJS5odG1sLCQocGF0c3Vic3QgJS5tZC5pbiwlLmh0bWwsJChTUkMpKSkKKworYWxsOiAkKFhNTCkgJChUWFQpICQoSFRNTCkKKworY2xlYW46CisJJChSTV9GKSAkKFhNTCkgJChUWFQpICQoSFRNTCkgJChwYXRzdWJzdCAlLm1kLmluLCUubWQsJCh3aWxkY2FyZCBkcmFmdC0qLm1kLmluKSkKKworJChYTUwyUkZDX0NBQ0hFX0RJUik6CisJJChNS0RJUl9QKSAiJChYTUwyUkZDX0NBQ0hFX0RJUikiCisKKyUubWQ6ICUubWQuaW4KKwkkKFNFRCkgJ3MvQFNPVVJDRV9WRVJTSU9OQC8kKFNPVVJDRV9WRVJTSU9OKS9nO3MvQFNPVVJDRV9EQVRFQC8kKFNPVVJDRV9EQVRFKS9nJyA8ICQ8ID4gJEAKKworJS54bWw6ICUubWQKKwkkKE1NQVJLKSAteG1sMiAtcGFnZSAkPCAkQAorCSQoU0VEKSAtaSAiIiAtZSAncy9mdWxsbmFtZT0iSmFtZXMgV29vZHlhdHQiL2Z1bGxuYW1lPSJKYW1lcyBXb29keWF0dCIgcm9sZT0iZWRpdG9yIi8nICRACisKKyUuaHRtbDogJS54bWwgJChYTUwyUkZDX0NBQ0hFX0RJUikKKwkkKFhNTDJSRkMpIC0taHRtbCAkPAorCislLnR4dDogJS54bWwgJChYTUwyUkZDX0NBQ0hFX0RJUikKKwkkKFhNTDJSRkMpIC0tdGV4dCAkPAorCisjIC0tLS0tLS0tLS0tLS0KKworZHJhZnQtcnF1YXR0bGUtc3BpbmVsLWJhc2lzLnhtbDogXAorCWRyYWZ0LXJxdWF0dGxlLXNwaW5lbC1iYXNpcy5tZCBcCisJc3BpbmVsLWNvbW1hbmRzLm1kIFwKKwlzcGluZWwtZGF0YS1wYWNraW5nLm1kIFwKKwlzcGluZWwtZXhhbXBsZS1zZXNzaW9ucy5tZCBcCisJc3BpbmVsLWZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZC5tZCBcCisJc3BpbmVsLWZlYXR1cmUtbmV0d29yay1zYXZlLm1kIFwKKwlzcGluZWwtZnJhbWUtZm9ybWF0Lm1kIFwKKwlzcGluZWwtZnJhbWluZy5tZCBcCisJc3BpbmVsLXByb3AtY29yZS5tZCBcCisJc3BpbmVsLXByb3AtZGVidWcubWQgXAorCXNwaW5lbC1wcm9wLWlwdjYubWQgXAorCXNwaW5lbC1wcm9wLW1hYy5tZCBcCisJc3BpbmVsLXByb3AtbmV0Lm1kIFwKKwlzcGluZWwtcHJvcC1waHkubWQgXAorCXNwaW5lbC1wcm9wLm1kIFwKKwlzcGluZWwtc3RhdHVzLWNvZGVzLm1kIFwKKwlzcGluZWwtdGVjaC10aHJlYWQubWQgXAorCXNwaW5lbC10ZXN0LXZlY3RvcnMubWQgXAorCSQoTlVMTCkKKworZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQueG1sOiBcCisJZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQubWQgXAorCXNwaW5lbC1jb21tYW5kcy5tZCBcCisJc3BpbmVsLWRhdGEtcGFja2luZy5tZCBcCisJc3BpbmVsLWV4YW1wbGUtc2Vzc2lvbnMubWQgXAorCXNwaW5lbC1mZWF0dXJlLWhvc3QtYnVmZmVyLW9mZmxvYWQubWQgXAorCXNwaW5lbC1mZWF0dXJlLW5ldHdvcmstc2F2ZS5tZCBcCisJc3BpbmVsLWZyYW1lLWZvcm1hdC5tZCBcCisJc3BpbmVsLWZyYW1pbmcubWQgXAorCXNwaW5lbC1wcm9wLWNvcmUubWQgXAorCXNwaW5lbC1wcm9wLWRlYnVnLm1kIFwKKwlzcGluZWwtcHJvcC1pcHY2Lm1kIFwKKwlzcGluZWwtcHJvcC1tYWMubWQgXAorCXNwaW5lbC1wcm9wLW5ldC5tZCBcCisJc3BpbmVsLXByb3AtcGh5Lm1kIFwKKwlzcGluZWwtcHJvcC5tZCBcCisJc3BpbmVsLXN0YXR1cy1jb2Rlcy5tZCBcCisJc3BpbmVsLXRlY2gtdGhyZWFkLm1kIFwKKwlzcGluZWwtdGVzdC12ZWN0b3JzLm1kIFwKKwkkKE5VTEwpCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9kcmFmdC1ycXVhdHRsZS1zcGluZWwtYmFzaXMubWQuaW4gYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9kcmFmdC1ycXVhdHRsZS1zcGluZWwtYmFzaXMubWQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1MGE0NAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC1iYXNpcy5tZC5pbgpAQCAtMCwwICsxLDEwOSBAQAorJSUlCisgICAgdGl0bGUgICAgICAgICAgID0gIlNwaW5lbDogQSBwcm90b2NvbCBiYXNpcyBmb3IgY29udHJvbCBhbmQgbWFuYWdlbWVudCBvZiBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlIGNvLXByb2Nlc3NvcnMiCisgICAgYWJicmV2ICAgICAgICAgID0gIlNwaW5lbCBCYXNpcyIKKyAgICBjYXRlZ29yeSAgICAgICAgPSAic3RkIgorICAgIGRvY05hbWUgICAgICAgICA9ICJkcmFmdC1ycXVhdHRsZS1zcGluZWwtYmFzaXMiCisgICAgaXByICAgICAgICAgICAgID0gInRydXN0MjAwOTAyIgorICAgIGtleXdvcmQgICAgICAgICA9IFsiU3BpbmVsIiwgIklQdjYiLCAiTkNQIl0KKyAgICBkYXRlICAgICAgICAgICAgPSBAU09VUkNFX0RBVEVACisgICAgCisgICAgW3BpXQorICAgIGVkaXRpbmcgICAgICAgICA9ICJ5ZXMiCisgICAgY29tcGFjdCAgICAgICAgID0gInllcyIKKyAgICBzdWJjb21wYWN0ICAgICAgPSAieWVzIgorICAgIGNvbW1lbnRzICAgICAgICA9ICJ5ZXMiCisgICAgCisgICAgW1thdXRob3JdXQorICAgIGluaXRpYWxzICAgICAgICA9ICJSLiIKKyAgICBzdXJuYW1lICAgICAgICAgPSAiUXVhdHRsZWJhdW0iCisgICAgZnVsbG5hbWUgICAgICAgID0gIlJvYmVydCBTLiBRdWF0dGxlYmF1bSIKKyAgICBvcmdhbml6YXRpb24gICAgPSAiTmVzdCBMYWJzLCBJbmMuIgorICAgIAorICAgICAgICBbYXV0aG9yLmFkZHJlc3NdCisgICAgICAgIGVtYWlsICAgICAgID0gInJxdWF0dGxlQG5lc3RsYWJzLmNvbSIKKyAgICAgICAgCisgICAgICAgIFthdXRob3IuYWRkcmVzcy5wb3N0YWxdCisgICAgICAgIHN0cmVldCAgICAgID0gIjM0MDAgSGlsbHZpZXcgQXZlLiIKKyAgICAgICAgY2l0eSAgICAgICAgPSAiUGFsbyBBbHRvIgorICAgICAgICByZWdpb24gICAgICA9ICJDYWxpZm9ybmlhIgorICAgICAgICBjb2RlICAgICAgICA9ICI5NDMwNCIKKyAgICAgICAgY291bnRyeSAgICAgPSAiVVNBIgorICAgIAorICAgIFtbYXV0aG9yXV0KKyAgICBpbml0aWFscyAgICAgICAgPSAiai5oLiIKKyAgICBzdXJuYW1lICAgICAgICAgPSAid29vZHlhdHQiCisgICAgZnVsbG5hbWUgICAgICAgID0gImphbWVzIHdvb2R5YXR0IgorICAgIG9yZ2FuaXphdGlvbiAgICA9ICJOZXN0IExhYnMsIEluYy4iCisgICAgcm9sZSAgICAgICAgICAgID0gImVkaXRvciIKKyAgICAKKyAgICAgICAgW2F1dGhvci5hZGRyZXNzXQorICAgICAgICBlbWFpbCAgICAgICA9ICJqaHdAbmVzdGxhYnMuY29tIgorICAgICAgICAKKyAgICAgICAgW2F1dGhvci5hZGRyZXNzLnBvc3RhbF0KKyAgICAgICAgc3RyZWV0ICAgICAgPSAiMzQwMCBIaWxsdmlldyBBdmUuIgorICAgICAgICBjaXR5ICAgICAgICA9ICJQYWxvIEFsdG8iCisgICAgICAgIHJlZ2lvbiAgICAgID0gIkNhbGlmb3JuaWEiCisgICAgICAgIGNvZGUgICAgICAgID0gIjk0MzA0IgorICAgICAgICBjb3VudHJ5ICAgICA9ICJVU0EiCislJSUKKworLiMgQWJzdHJhY3QKKworVGhpcyBkb2N1bWVudCBzcGVjaWZpZXMgdGhlIGJhc2lzIG9mIHRoZSBTcGluZWwgcHJvdG9jb2wsIHdoaWNoIGZhY2lsaXRhdGVzIHRoZSBjb250cm9sIGFuZCBtYW5hZ2VtZW50IG9mIElQdjYgbmV0d29yayBpbnRlcmZhY2VzIG9uIGRldmljZXMgd2hlcmUgZ2VuZXJhbCBwdXJwb3NlIGFwcGxpY2F0aW9uIHByb2Nlc3NvcnMgb2ZmbG9hZCBuZXR3b3JrIGZ1bmN0aW9ucyBhdCB0aGVpciBpbnRlcmZhY2VzIHRvIG5ldHdvcmsgY28tcHJvY2Vzc29ycyAoTkNQKSBjb25uZWN0ZWQgYnkgc2ltcGxlIGNvbW11bmljYXRpb24gbGlua3MgbGlrZSBzZXJpYWwgZGF0YSBjaGFubmVscy4gU3BpbmVsIHdhcyBpbml0aWFsbHkgZGVzaWduZWQgZm9yIHVzZSB3aXRoIFRocmVhZCBuZXR3b3JrIGNvLXByb2Nlc3NvcnMsIGJ1dCBpdHMgYmFzaXMgaXMgZ2VuZXJhbCBwdXJwb3NlIGFuZCBpbnRlbmRlZCB0byBiZSBlYXNpbHkgYWRhcHRlZCB0byBvdGhlciB0eXBlcyBvZiBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlLgorCit7bWFpbm1hdHRlcn0KKworIyBJbnRyb2R1Y3Rpb24gIworCitTcGluZWwgaXMgYSBob3N0LWNvbnRyb2xsZXIgcHJvdG9jb2wgZGVzaWduZWQgdG8gZW5hYmxlIGludGVyb3BlcmF0aW9uIG92ZXIgc2ltcGxlIHNlcmlhbCBjb25uZWN0aW9ucyBiZXR3ZWVuIGdlbmVyYWwgcHVycG9zZSBkZXZpY2Ugb3BlcmF0aW5nIHN5c3RlbXMgKE9TKSBhbmQgbmV0d29yayBjby1wcm9jZXNzb3JzIChOQ1ApIGZvciB0aGUgcHVycG9zZSBvZiBjb250cm9sbGluZyBhbmQgbWFuYWdpbmcgdGhlaXIgSVB2NiBuZXR3b3JrIGludGVyZmFjZXMsIGFjaGlldmluZyB0aGUgZm9sbG93aW5nIGdvYWxzOgorCisqICAgQWRvcHQgYSBsYXllcmVkIGFwcHJvYWNoIHRvIHRoZSBwcm90b2NvbCBkZXNpZ24sIGFsbG93aW5nIGZ1dHVyZSBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBvZiBJUHY2IGxpbmsuCisqICAgTWluaW1pemUgdGhlIG51bWJlciBvZiByZXF1aXJlZCBjb21tYW5kcy9tZXRob2RzIGJ5IHN1cHBvcnRpbmcgYSByaWNoLCBwcm9wZXJ0eS1iYXNlZCBwcm9ncmFtbWluZyBpbnRlcmZhY2UuCisqICAgU3VwcG9ydCBOQ1BzIGNhcGFibGUgb2YgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIElQdjYgaW50ZXJmYWNlcy4KKyogICBTdXBwb3J0IE5DUHMgY2FwYWJsZSBvZiBjb21tdW5pY2F0aW5nIHNpbXVsdGFuZW91c2x5IG9uIG1vcmUgdGhhbiBvbmUgcGh5c2ljYWwgbGluay4KKyogICBHcmFjZWZ1bGx5IGhhbmRsZSB0aGUgYWRkaXRpb24gb2YgbmV3IGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgd2l0aG91dCBuZWNlc3NhcmlseSBicmVha2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorKiAgIEJlIGFzIG1pbmltYWwgYW5kIGxpZ2h0LXdlaWdodCBhcyBwb3NzaWJsZSB3aXRob3V0IHVubmVjZXNzYXJpbHkgc2FjcmlmaWNpbmcgZmxleGliaWxpdHkuCisKK09uIHRvcCBvZiB0aGlzIGNvcmUgZnJhbWV3b3JrLCBwcm9wZXJ0aWVzIGFuZCBjb21tYW5kcyBlbmFibGUgdmFyaW91cyBjb21tb24gZmVhdHVyZXMgb2YgSVB2Ni4gSW4gcmVsYXRlZCBhbmQgZm9ydGhjb21pbmcgZG9jdW1lbnRzLCB0aGUgU3BpbmVsIHByb3RvY29sIGlzIGV4dGVuZGVkIHRvIHN1cHBvcnQgTkNQIGltcGxlbWVudGF0aW9ucyBmb3Igc3BlY2lmaWMgSVB2NiBsaW5rIHR5cGVzLCBlLmcuIFRocmVhZC4KKwore3tzcGluZWwtZnJhbWUtZm9ybWF0Lm1kfX0KKwore3tzcGluZWwtZGF0YS1wYWNraW5nLm1kfX0KKwore3tzcGluZWwtY29tbWFuZHMubWR9fQorCit7e3NwaW5lbC1wcm9wLm1kfX0KKwore3tzcGluZWwtc3RhdHVzLWNvZGVzLm1kfX0KKwore3tzcGluZWwtdGVjaC10aHJlYWQubWR9fQorCit7e3NwaW5lbC1mZWF0dXJlLW5ldHdvcmstc2F2ZS5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZC5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtamFtLWRldGVjdC5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtZ3Bpby5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtdHJuZy5tZH19CisKK3t7c3BpbmVsLXNlY3VyaXR5LWNvbnNpZGVyYXRpb25zLm1kfX0KKwore2JhY2ttYXR0ZXJ9CisKK3t7c3BpbmVsLWZyYW1pbmcubWR9fQorCit7e3NwaW5lbC10ZXN0LXZlY3RvcnMubWR9fQorCit7e3NwaW5lbC1leGFtcGxlLXNlc3Npb25zLm1kfX0KKwore3tzcGluZWwtYmFzaXMtZ2xvc3NhcnkubWR9fQorCisjIEFja25vd2xlZGdtZW50cyAjCisKK1RocmVhZCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFRoZSBUaHJlYWQgR3JvdXAsIEluYy4KKworU3BlY2lhbCB0aGFua3MgdG8gTmljayBCYW5rcywgSm9uYXRoYW4gSHVpLCBBYnRpbiBLZXNoYXZhcnppYW4sIFBpb3RyIFN6a290YWssIEFyanVuYSBTaXZhc2l0aGFtYmFyZXNhbiBhbmQgTWFydGluIFR1cm9uIGZvciB0aGVpciBzdWJzdGFudGlhbCBjb250cmlidXRpb25zIGFuZCBmZWVkYmFjayByZWxhdGVkIHRvIHRoaXMgZG9jdW1lbnQuCisKK1RoaXMgZG9jdW1lbnQgd2FzIHByZXBhcmVkIHVzaW5nIFttbWFya10oaHR0cHM6Ly9naXRodWIuY29tL21pZWtnL21tYXJrKSBieSAoTWllayBHaWViZW4pIGFuZCBbeG1sMnJmYyAodmVyc2lvbiAyKV0oaHR0cDovL3htbDJyZmMuaWV0Zi5vcmcvKS4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLm1kLmluIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQubWQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2OGY2MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLm1kLmluCkBAIC0wLDAgKzEsMTc0IEBACislJSUKKyAgICB0aXRsZSAgICAgICAgICAgPSAiU3BpbmVsIEhvc3QtQ29udHJvbGxlciBQcm90b2NvbCIKKyAgICBhYmJyZXYgICAgICAgICAgPSAiU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSIKKyAgICBjYXRlZ29yeSAgICAgICAgPSAiaW5mbyIKKyAgICBkb2NOYW1lICAgICAgICAgPSAiZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQtQFNPVVJDRV9WRVJTSU9OQCIKKyAgICBpcHIgICAgICAgICAgICAgPSAibm9EZXJpdmF0aXZlc1RydXN0MjAwOTAyIgorICAgIGtleXdvcmQgICAgICAgICA9IFsiU3BpbmVsIiwgIklQdjYiLCAiTkNQIl0KKyAgICBkYXRlICAgICAgICAgICAgPSBAU09VUkNFX0RBVEVACisgICAgc3VibWlzc2lvblR5cGUgID0gImluZGVwZW5kZW50IgorICAgIAorICAgIFtwaV0KKyAgICBlZGl0aW5nICAgICAgICAgPSAieWVzIgorICAgIGNvbXBhY3QgICAgICAgICA9ICJ5ZXMiCisgICAgc3ViY29tcGFjdCAgICAgID0gInllcyIKKyAgICBjb21tZW50cyAgICAgICAgPSAieWVzIgorICAgIAorICAgIFtbYXV0aG9yXV0KKyAgICBpbml0aWFscyAgICAgICAgPSAiUi4iCisgICAgc3VybmFtZSAgICAgICAgID0gIlF1YXR0bGViYXVtIgorICAgIGZ1bGxuYW1lICAgICAgICA9ICJSb2JlcnQgUy4gUXVhdHRsZWJhdW0iCisgICAgb3JnYW5pemF0aW9uICAgID0gIk5lc3QgTGFicywgSW5jLiIKKyAgICAKKyAgICAgICAgW2F1dGhvci5hZGRyZXNzXQorICAgICAgICBlbWFpbCAgICAgICA9ICJycXVhdHRsZUBuZXN0bGFicy5jb20iCisgICAgICAgIAorICAgICAgICBbYXV0aG9yLmFkZHJlc3MucG9zdGFsXQorICAgICAgICBzdHJlZXQgICAgICA9ICIzNDAwIEhpbGx2aWV3IEF2ZS4iCisgICAgICAgIGNpdHkgICAgICAgID0gIlBhbG8gQWx0byIKKyAgICAgICAgcmVnaW9uICAgICAgPSAiQ2FsaWZvcm5pYSIKKyAgICAgICAgY29kZSAgICAgICAgPSAiOTQzMDQiCisgICAgICAgIGNvdW50cnkgICAgID0gIlVTQSIKKyAgICAKKyAgICBbW2F1dGhvcl1dCisgICAgcm9sZSAgICAgICAgICAgID0gImVkaXRvciIKKyAgICBpbml0aWFscyAgICAgICAgPSAiSi5ILiIKKyAgICBzdXJuYW1lICAgICAgICAgPSAiV29vZHlhdHQiCisgICAgZnVsbG5hbWUgICAgICAgID0gIkphbWVzIFdvb2R5YXR0IgorICAgIG9yZ2FuaXphdGlvbiAgICA9ICJOZXN0IExhYnMsIEluYy4iCisgICAgCisgICAgICAgIFthdXRob3IuYWRkcmVzc10KKyAgICAgICAgZW1haWwgICAgICAgPSAiamh3QG5lc3RsYWJzLmNvbSIKKyAgICAgICAgCisgICAgICAgIFthdXRob3IuYWRkcmVzcy5wb3N0YWxdCisgICAgICAgIHN0cmVldCAgICAgID0gIjM0MDAgSGlsbHZpZXcgQXZlLiIKKyAgICAgICAgY2l0eSAgICAgICAgPSAiUGFsbyBBbHRvIgorICAgICAgICByZWdpb24gICAgICA9ICJDYWxpZm9ybmlhIgorICAgICAgICBjb2RlICAgICAgICA9ICI5NDMwNCIKKyAgICAgICAgY291bnRyeSAgICAgPSAiVVNBIgorJSUlCisKKy4jIEFic3RyYWN0CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBTcGluZWwgcHJvdG9jb2wsIHdoaWNoIGZhY2lsaXRhdGVzIHRoZSBjb250cm9sIGFuZAorbWFuYWdlbWVudCBvZiBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlcyBvbiBkZXZpY2VzIHdoZXJlIGdlbmVyYWwgcHVycG9zZQorYXBwbGljYXRpb24gcHJvY2Vzc29ycyBvZmZsb2FkIG5ldHdvcmsgZnVuY3Rpb25zIGF0IHRoZWlyIGludGVyZmFjZXMgdG8gbmV0d29yaworY28tcHJvY2Vzc29ycyAoTkNQKSBjb25uZWN0ZWQgYnkgc2ltcGxlIGNvbW11bmljYXRpb24gbGlua3MgbGlrZSBzZXJpYWwgZGF0YQorY2hhbm5lbHMuIFdoaWxlIGluaXRpYWxseSBkZXZlbG9wZWQgdG8gc3VwcG9ydCBUaHJlYWQoUiksIFNwaW5lbCdzIGxheWVyZWQKK2Rlc2lnbiBhbGxvd3MgaXQgdG8gYmUgZWFzaWx5IGFkYXB0ZWQgdG8gb3RoZXIgc2ltaWxhciBuZXR3b3JrIHRlY2hub2xvZ2llcy4KKworVGhpcyBkb2N1bWVudCBhbHNvIGRlc2NyaWJlcyB2YXJpb3VzIFNwaW5lbCBzcGVjaWFsaXphdGlvbnMsIGluY2x1ZGluZyBzdXBwb3J0Citmb3IgdGhlIFRocmVhZChSKSBsb3ctcG93ZXIgbWVzaCBuZXR3b3JrIHRlY2hub2xvZ3kuCisKKwore21haW5tYXR0ZXJ9CisKKyMgSW50cm9kdWN0aW9uICMKKworU3BpbmVsIGlzIGEgaG9zdC1jb250cm9sbGVyIHByb3RvY29sIGRlc2lnbmVkIHRvIGVuYWJsZSBpbnRlcm9wZXJhdGlvbiBvdmVyIHNpbXBsZSBzZXJpYWwgY29ubmVjdGlvbnMgYmV0d2VlbiBnZW5lcmFsIHB1cnBvc2UgZGV2aWNlIG9wZXJhdGluZyBzeXN0ZW1zIChPUykgYW5kIG5ldHdvcmsgY28tcHJvY2Vzc29ycyAoTkNQKSBmb3IgdGhlIHB1cnBvc2Ugb2YgY29udHJvbGxpbmcgYW5kIG1hbmFnaW5nIHRoZWlyIElQdjYgbmV0d29yayBpbnRlcmZhY2VzLCBhY2hpZXZpbmcgdGhlIGZvbGxvd2luZyBnb2FsczoKKworKiAgIEFkb3B0IGEgbGF5ZXJlZCBhcHByb2FjaCB0byB0aGUgcHJvdG9jb2wgZGVzaWduLCBhbGxvd2luZyBmdXR1cmUKKyAgICBzdXBwb3J0IGZvciBvdGhlciBuZXR3b3JrIHByb3RvY29scy4KKyogICBNaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGNvbW1hbmRzL21ldGhvZHMgYnkgcHJvdmlkaW5nIGEKKyAgICByaWNoLCBwcm9wZXJ0eS1iYXNlZCBBUEkuCisqICAgU3VwcG9ydCBOQ1BzIGNhcGFibGUgb2YgYmVpbmcgY29ubmVjdGVkIHRvIG1vcmUgdGhhbiBvbmUgbmV0d29yaworICAgIGF0IGEgdGltZS4KKyogICBHcmFjZWZ1bGx5IGhhbmRsZSB0aGUgYWRkaXRpb24gb2YgbmV3IGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMKKyAgICB3aXRob3V0IG5lY2Vzc2FyaWx5IGJyZWFraW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisqICAgQmUgYXMgbWluaW1hbCBhbmQgbGlnaHQtd2VpZ2h0IGFzIHBvc3NpYmxlIHdpdGhvdXQgdW5uZWNlc3NhcmlseQorICAgIHNhY3JpZmljaW5nIGZsZXhpYmlsaXR5LgorCitPbiB0b3Agb2YgdGhpcyBjb3JlIGZyYW1ld29yaywgd2UgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIGFuZCBjb21tYW5kcwordG8gZW5hYmxlIHZhcmlvdXMgZmVhdHVyZXMgYW5kIG5ldHdvcmsgcHJvdG9jb2xzLgorCisjIyBBYm91dCB0aGlzIERyYWZ0ICMjCisKK1RoaXMgZG9jdW1lbnQgaXMgY3VycmVudGx5IGluIGEgZHJhZnQgc3RhdHVzIGFuZCBpcyBjaGFuZ2luZyBvZnRlbi4KK1RoaXMgc2VjdGlvbiBkaXNjdXNzZXMgc29tZSBpZGVhcyBmb3IgY2hhbmdlcyB0byB0aGUgcHJvdG9jb2wgdGhhdAoraGF2ZW4ndCB5ZXQgYmVlbiBmdWxseSBzcGVjaWZpZWQsIGFzIHdlbGwgYXMgc29tZSBvZiB0aGUgaW1wZXR1cyBmb3IKK3RoZSBjdXJyZW50IGRlc2lnbi4KKworIyMjIFNjb3BlICMjIworCitUaGUgZXZlbnR1YWwgaW50ZW50IGlzIHRvIGhhdmUgdHdvIGRvY3VtZW50czogQSBTcGluZWwgYmFzaXMgZG9jdW1lbnQKK3doaWNoIGRpc2N1c3NlcyB0aGUgbmV0d29yay10ZWNobm9sb2d5LWFnbm9zdGljIG1lY2hhbmlzbXMgYW5kIGEKK1RocmVhZChSKSBzcGVjaWFsaXphdGlvbiBkb2N1bWVudCB3aGljaCBkZXNjcmliZXMgYWxsIG9mIHRoZSBUaHJlYWQoUiktc3BlY2lmaWMKK2ltcGxlbWVudGF0aW9uIGRldGFpbHMuIEN1cnJlbnRseSwgdGhpcyBkb2N1bWVudCBjb3ZlcnMgYm90aC4KKworIyMjIFJlbnVtYmVyaW5nICMjIworCitFZmZvcnRzIGFyZSBjdXJyZW50bHkgbWFpbnRhaW5lZCB0byB0cnkgdG8gcHJldmVudCBvdmVydGx5CitiYWNrd2FyZC1pbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgZXhpc3RpbmcgcHJvdG9jb2wsIGJ1dCBpZiB5b3UgYXJlCitpbXBsZW1lbnRpbmcgU3BpbmVsIGluIHlvdXIgb3duIHByb2R1Y3RzIHlvdSBzaG91bGQgZXhwZWN0IHRoZXJlIHRvIGJlCithdCBsZWFzdCBvbmUgbGFyZ2UgcmVudW1iZXJpbmcgZXZlbnQgYW5kIG1ham9yIHZlcnNpb24gbnVtYmVyIGNoYW5nZQorYmVmb3JlIHRoZSBzdGFuZGFyZCBpcyBjb25zaWRlcmVkICJiYWtlZCIuIEFsbCBjaGFuZ2VzIHdpbGwgYmUgY2xlYXJseQorbWFya2VkIGFuZCBkb2N1bWVudGVkIHRvIG1ha2Ugc3VjaCBhIHRyYW5zaXRpb24gYXMgZWFzeSBhcyBwb3NzaWJsZS4KKworVG8gYWxsb3cgY29uY2x1c2l2ZSBkZXRlY3Rpb24gb2YgcHJvdG9jb2wgKGluKWNvbXBhdGliaWxpdHkgYmV0d2VlbgordGhlIGhvc3QgYW5kIHRoZSBOQ1AsIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYW5kIHByb3BlcnRpZXMgYXJlCithbHJlYWR5IGNvbnNpZGVyZWQgdG8gYmUgImJha2VkIiBhbmQgd2lsbCBub3QgY2hhbmdlOgorCisqICAgQ29tbWFuZCBJRHMgemVybyB0aHJvdWdoIGVpZ2h0LiAoUmVzZXQsIE5vLW9wLCBhbmQgUHJvcGVydHktVmFsdWUKKyAgICBDb21tYW5kcykKKyogICBQcm9wZXJ0eSBJRHMgemVybyB0aHJvdWdoIHR3by4gKExhc3Qgc3RhdHVzLCBQcm90b2NvbCBWZXJzaW9uLCBhbmQKKyAgICBOQ1AgVmVyc2lvbikKKworUmVudW1iZXJpbmcgd291bGQgYmUgdW5kZXJ0YWtlbiBpbiBvcmRlciB0byBiZXR0ZXIgb3JnYW5pemUgdGhlCithbGxvY2F0aW9uIG9mIHByb3BlcnR5IElEcyBhbmQgY2FwYWJpbGl0eSBJRHMuIE9uZSBvZiB0aGUgaW5pdGlhbAorZ29hbHMgb2YgdGhpcyBwcm90b2NvbCB3YXMgZm9yIGl0IHRvIGJlIHBvc3NpYmxlIGZvciBhIGhvc3Qgb3IgTkNQIHRvCitvbmx5IGltcGxlbWVudCBwcm9wZXJ0aWVzIHdpdGggdmFsdWVzIGxlc3MgdGhhbiAxMjcgYW5kIGZvciB0aGUgTkNQIHRvCitzdGlsbCBiZSB1c2FibGUtLS1yZWxlZ2F0aW5nIGFsbCBsYXJnZXIgcHJvcGVydHkgdmFsdWVzIGZvciBleHRyYQorZmVhdHVyZXMgb3Igb3RoZXIgY2FwYWJpbGl0aWVzIHRoYXQgYXJlbid0IHN0cmljdGx5IG5lY2Vzc2FyeS4gVGhpcword291bGQgYWxsb3cgc2ltcGxlIGltcGxlbWVudGF0aW9ucyB0byBhdm9pZCB0aGUgbmVlZCB0byBpbXBsZW1lbnQKK3N1cHBvcnQgZm9yIFBVSXMgKCgjcGFja2VkLXVuc2lnbmVkLWludGVnZXIpKS4KKworQXMgdGltZSBoYXMgZ29uZSBieSBhbmQgdGhlIHByb3RvY29sIGhhcyBiZWNvbWUgbW9yZSBmbGVzaGVkIG91dCwgaXQKK2hhcyBiZWNvbWUgY2xlYXIgdGhhdCBzb21lIG9mIHRoZSBpbml0aWFsIGFsbG9jYXRpb25zIHdlcmUgaW5hZGVxdWF0ZQorYW5kIHNob3VsZCBiZSByZXZpc2l0ZWQgaWYgd2Ugd2FudCB0byB0cnkgdG8gYWNoaWV2ZSB0aGUgb3JpZ2luYWwKK2dvYWwuCisKKwore3tzcGluZWwtZnJhbWUtZm9ybWF0Lm1kfX0KKwore3tzcGluZWwtZGF0YS1wYWNraW5nLm1kfX0KKwore3tzcGluZWwtY29tbWFuZHMubWR9fQorCit7e3NwaW5lbC1wcm9wLm1kfX0KKwore3tzcGluZWwtc3RhdHVzLWNvZGVzLm1kfX0KKwore3tzcGluZWwtdGVjaC10aHJlYWQubWR9fQorCit7e3NwaW5lbC1mZWF0dXJlLW5ldHdvcmstc2F2ZS5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZC5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtamFtLWRldGVjdC5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtZ3Bpby5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtdHJuZy5tZH19CisKK3t7c3BpbmVsLXNlY3VyaXR5LWNvbnNpZGVyYXRpb25zLm1kfX0KKwore2JhY2ttYXR0ZXJ9CisKK3t7c3BpbmVsLWZyYW1pbmcubWR9fQorCit7e3NwaW5lbC10ZXN0LXZlY3RvcnMubWR9fQorCit7e3NwaW5lbC1leGFtcGxlLXNlc3Npb25zLm1kfX0KKwore3tzcGluZWwtYmFzaXMtZ2xvc3NhcnkubWR9fQorCisjIEFja25vd2xlZGdtZW50cyAjCisKK1RocmVhZCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFRoZSBUaHJlYWQgR3JvdXAsIEluYy4KKworU3BlY2lhbCB0aGFua3MgdG8gTmljayBCYW5rcywgSm9uYXRoYW4gSHVpLCBBYnRpbiBLZXNoYXZhcnppYW4sIFlha3VuIFh1LAorUGlvdHIgU3prb3RhaywgQXJqdW5hIFNpdmFzaXRoYW1iYXJlc2FuIGFuZCBNYXJ0aW4gVHVyb24gZm9yIHRoZWlyCitzdWJzdGFudGlhbCBjb250cmlidXRpb25zIGFuZCBmZWVkYmFjayByZWxhdGVkIHRvIHRoaXMgZG9jdW1lbnQuCisKK1RoaXMgZG9jdW1lbnQgd2FzIHByZXBhcmVkIHVzaW5nIFttbWFya10oaHR0cHM6Ly9naXRodWIuY29tL21pZWtnL21tYXJrKQorYnkgKE1pZWsgR2llYmVuKSBhbmQgW3htbDJyZmMgKHZlcnNpb24gMildKGh0dHA6Ly94bWwycmZjLmlldGYub3JnLykuCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtYmFzaXMtZ2xvc3NhcnkubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtYmFzaXMtZ2xvc3NhcnkubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhYmYzNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1iYXNpcy1nbG9zc2FyeS5tZApAQCAtMCwwICsxLDI1IEBACisjIEdsb3NzYXJ5ICMKKworPCEtLSBSUSAtLSBBbHBoYWJldGl6ZSBiZWZvcmUgZmluYWxpemF0aW9uLiAtLT4KKworRkNTCis6IEZpbmFsIENoZWNrc3VtLiBCeXRlcyBhZGRlZCB0byB0aGUgZW5kIG9mIGEgcGFja2V0IHRvIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgd2FzIHJlY2VpdmVkIHdpdGhvdXQgY29ycnVwdGlvbi4KKworTkNQCis6IE5ldHdvcmsgQ29udHJvbCBQcm9jZXNzb3IuCisKK05MSQorOiBOZXR3b3JrIExpbmsgSWRlbnRpZmllci4gTWF5IGJlIGEgdmFsdWUgYmV0d2VlbiB6ZXJvIGFuZCB0aHJlZS4gU2VlICgjbmxpLW5ldHdvcmstbGluay1pZGVudGlmaWVyKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworT1MKKzogT3BlcmF0aW5nIFN5c3RlbSwgaS5lLiB0aGUgSVB2NiBub2RlIHVzaW5nIFNwaW5lbCB0byBjb250cm9sIGFuZCBtYW5hZ2Ugb25lIG9yIG1vcmUgb2YgaXRzIElQdjYgbmV0d29yayBpbnRlcmZhY2VzLgorCitQSFkKKzogUGh5c2ljYWwgbGF5ZXIuIFJlZmVycyB0byBjaGFyYWN0ZXJpc3RpY3MgYW5kIHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aGUgcGh5c2ljYWwgaW1wbGVtZW50YXRpb24gYW5kIG9wZXJhdGlvbiBvZiBhIG5ldHdvcmtpbmcgbWVkaXVtLgorCitQVUkKKzogUGFja2VkIFVuc2lnbmVkIEludGVnZXIuIEEgd2F5IHRvIHNlcmlhbGl6ZSBhbiB1bnNpZ25lZCBpbnRlZ2VyIHVzaW5nIG9uZSwgdHdvLCBvciB0aHJlZSBieXRlcy4gVXNlZCB0aHJvdWdob3V0IHRoZSBTcGluZWwgcHJvdG9jb2wuIFNlZSAoI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVElECis6IFRyYW5zYWN0aW9uIElkZW50aWZpZXIuIE1heSBiZSBhIHZhbHVlIGJldHdlZW4gemVybyBhbmQgZmlmdGVlbi4gU2VlICgjdGlkLXRyYW5zYWN0aW9uLWlkZW50aWZpZXIpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtY29tbWFuZHMubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtY29tbWFuZHMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2YmFlMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1jb21tYW5kcy5tZApAQCAtMCwwICsxLDMzMCBAQAorIyBDb21tYW5kcworCisjIyBDTUQgMDogKEhvc3QtPk5DUCkgQ01EX05PT1AgeyNjbWQtbm9vcH0KKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAxCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX05PT1AKKworTm8tT3BlcmF0aW9uIGNvbW1hbmQuIEluZHVjZXMgdGhlIE5DUCB0byBzZW5kIGEgc3VjY2VzcyBzdGF0dXMgYmFjayB0bwordGhlIGhvc3QuIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIGxpdmVsaW5lc3MgY2hlY2tzLgorCitUaGUgY29tbWFuZCBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgU0hPVUxEIGJlIGVtcHR5LiBUaGUgcmVjZWl2ZXIKK01VU1QgaWdub3JlIGFueSBub24tZW1wdHkgY29tbWFuZCBwYXlsb2FkLgorCitUaGVyZSBpcyBubyBlcnJvciBjb25kaXRpb24gZm9yIHRoaXMgY29tbWFuZC4KKworCisKKyMjIENNRCAxOiAoSG9zdC0+TkNQKSBDTURfUkVTRVQgeyNjbWQtcmVzZXR9CisKK09jdGV0czogfCAgICAxICAgfCAgICAgMQorLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tLQorRmllbGRzOiB8IEhFQURFUiB8IENNRF9SRVNFVAorCitSZXNldCBOQ1AgY29tbWFuZC4gQ2F1c2VzIHRoZSBOQ1AgdG8gcGVyZm9ybSBhIHNvZnR3YXJlIHJlc2V0LiBEdWUgdG8KK3RoZSBuYXR1cmUgb2YgdGhpcyBjb21tYW5kLCB0aGUgVElEIGlzIGlnbm9yZWQuIFRoZSBob3N0IHNob3VsZAoraW5zdGVhZCB3YWl0IGZvciBhIGBDTURfUFJPUF9WQUxVRV9JU2AgY29tbWFuZCBmcm9tIHRoZSBOQ1AgaW5kaWNhdGluZworYFBST1BfTEFTVF9TVEFUVVNgIGhhcyBiZWVuIHNldCB0byBgU1RBVFVTX1JFU0VUX1NPRlRXQVJFYC4KKworVGhlIGNvbW1hbmQgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIFNIT1VMRCBiZSBlbXB0eS4gVGhlIHJlY2VpdmVyCitNVVNUIGlnbm9yZSBhbnkgbm9uLWVtcHR5IGNvbW1hbmQgcGF5bG9hZC4KKworSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgdmFsdWUgb2YgYFBST1BfTEFTVF9TVEFUVVNgIHdpbGwgYmUgZW1pdHRlZAoraW5zdGVhZCB3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gdGhlIGdlbmVyYXRlZCBzdGF0dXMgY29kZSBmb3IgdGhlIGVycm9yLgorCisKKworIyMgQ01EIDI6IChIb3N0LT5OQ1ApIENNRF9QUk9QX1ZBTFVFX0dFVCB7I2NtZC1wcm9wLXZhbHVlLWdldH0KKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAgICAgIDEgICAgICAgICB8ICAgMS0zCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRV9HRVQgfCBQUk9QX0lECisKK0dldCBwcm9wZXJ0eSB2YWx1ZSBjb21tYW5kLiBDYXVzZXMgdGhlIE5DUCB0byBlbWl0IGEKK2BDTURfUFJPUF9WQUxVRV9JU2AgY29tbWFuZCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IGlkZW50aWZpZXIuCisKK1RoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUKK3BhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gKCNwYWNrZWQtdW5zaWduZWQtaW50ZWdlcikuCisKK0lmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mIGBQUk9QX0xBU1RfU1RBVFVTYCB3aWxsIGJlIGVtaXR0ZWQKK2luc3RlYWQgd2l0aCB0aGUgdmFsdWUgc2V0IHRvIHRoZSBnZW5lcmF0ZWQgc3RhdHVzIGNvZGUgZm9yIHRoZSBlcnJvci4KKworCisKKyMjIENNRCAzOiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9TRVQgeyNjbWQtcHJvcC12YWx1ZS1zZXR9CisKK09jdGV0czogfCAgICAxICAgfCAgICAgICAgICAxICAgICAgICAgfCAgIDEtMyAgIHwgICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfU0VUIHwgUFJPUF9JRCB8IFZBTFVFCisKK1NldCBwcm9wZXJ0eSB2YWx1ZSBjb21tYW5kLiBJbnN0cnVjdHMgdGhlIE5DUCB0byBzZXQgdGhlIGdpdmVuCitwcm9wZXJ0eSB0byB0aGUgc3BlY2lmaWMgZ2l2ZW4gdmFsdWUsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgdmFsdWUuCisKK1RoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUKK3BhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gKCNwYWNrZWQtdW5zaWduZWQtaW50ZWdlciksIGZvbGxvd2VkIGJ5Cit0aGUgcHJvcGVydHkgdmFsdWUuIFRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIHByb3BlcnR5IHZhbHVlIGlzIGRlZmluZWQKK2J5IHRoZSBwcm9wZXJ0eS4KKworSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgdmFsdWUgb2YgYFBST1BfTEFTVF9TVEFUVVNgIHdpbGwgYmUgZW1pdHRlZAord2l0aCB0aGUgdmFsdWUgc2V0IHRvIHRoZSBnZW5lcmF0ZWQgc3RhdHVzIGNvZGUgZm9yIHRoZSBlcnJvci4KKworCisKKyMjIENNRCA0OiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9JTlNFUlQgeyNjbWQtcHJvcC12YWx1ZS1pbnNlcnR9CisKK09jdGV0czogfCAgICAxICAgfCAgICAgICAgICAxICAgICAgICAgICAgfCAgIDEtMyAgIHwgICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfSU5TRVJUIHwgUFJPUF9JRCB8IFZBTFVFCisKK0luc2VydCB2YWx1ZSBpbnRvIHByb3BlcnR5IGNvbW1hbmQuIEluc3RydWN0cyB0aGUgTkNQIHRvIGluc2VydCB0aGUKK2dpdmVuIHZhbHVlIGludG8gYSBsaXN0LW9yaWVudGVkIHByb3BlcnR5LCB3aXRob3V0IHJlbW92aW5nIG90aGVyCitpdGVtcyBpbiB0aGUgbGlzdC4gVGhlIHJlc3VsdGluZyBvcmRlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBpcyBkZWZpbmVkCitieSB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0eSBiZWluZyBvcGVyYXRlZCBvbi4KKworVGhlIHBheWxvYWQgZm9yIHRoaXMgY29tbWFuZCBpcyB0aGUgcHJvcGVydHkgaWRlbnRpZmllciBlbmNvZGVkIGluIHRoZQorcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiAoI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyKSwgZm9sbG93ZWQgYnkKK3RoZSB2YWx1ZSB0byBiZSBpbnNlcnRlZC4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgdmFsdWUgaXMgZGVmaW5lZCBieQordGhlIHByb3BlcnR5LgorCitJZiB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIHByb3BlcnR5IHNwZWNpZmllZCBieSBgUFJPUF9JRGAgY29uc2lzdHMKK29mIGEgc2luZ2xlIHN0cnVjdHVyZSBlbmNsb3NlZCBieSBhbiBhcnJheSAoYEEodCguLi4pKWApLCB0aGVuIHRoZQorY29udGVudHMgb2YgYFZBTFVFYCBNVVNUIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJ1Y3R1cmUgKGAuLi5gKQorcmF0aGVyIHRoYW4gdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIHdob2xlIGl0ZW0gKGB0KC4uLilgKS4gIFNwZWNpZmljYWxseSwKK3RoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8gYFZBTFVFYC4gVGhpcworaGVscHMgdG8gZWxpbWluYXRlIHJlZHVuZGFudCBkYXRhLgorCitJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSB2YWx1ZSBvZiBgUFJPUF9MQVNUX1NUQVRVU2Agd2lsbCBiZSBlbWl0dGVkCit3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gdGhlIGdlbmVyYXRlZCBzdGF0dXMgY29kZSBmb3IgdGhlIGVycm9yLgorCisKKworIyMgQ01EIDU6IChIb3N0LT5OQ1ApIENNRF9QUk9QX1ZBTFVFX1JFTU9WRSB7I2NtZC1wcm9wLXZhbHVlLXJlbW92ZX0KKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAgICAgIDEgICAgICAgICAgICB8ICAgMS0zICAgfCAgICAqbioKKy0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRV9SRU1PVkUgfCBQUk9QX0lEIHwgVkFMVUUKKworUmVtb3ZlIHZhbHVlIGZyb20gcHJvcGVydHkgY29tbWFuZC4gSW5zdHJ1Y3RzIHRoZSBOQ1AgdG8gcmVtb3ZlIHRoZQorZ2l2ZW4gdmFsdWUgZnJvbSBhIGxpc3Qtb3JpZW50ZWQgcHJvcGVydHksIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyCitpdGVtcyBpbiB0aGUgbGlzdC4gVGhlIHJlc3VsdGluZyBvcmRlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBpcyBkZWZpbmVkCitieSB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0eSBiZWluZyBvcGVyYXRlZCBvbi4KKworTm90ZSB0aGF0IHRoaXMgY29tbWFuZCBvcGVyYXRlcyAqYnkgdmFsdWUqLCBub3QgYnkgaW5kZXghCisKK1RoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUKK3BhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gKCNwYWNrZWQtdW5zaWduZWQtaW50ZWdlciksIGZvbGxvd2VkIGJ5Cit0aGUgdmFsdWUgdG8gYmUgcmVtb3ZlZC4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgdmFsdWUgaXMgZGVmaW5lZCBieQordGhlIHByb3BlcnR5LgorCitJZiB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIHByb3BlcnR5IHNwZWNpZmllZCBieSBgUFJPUF9JRGAgY29uc2lzdHMKK29mIGEgc2luZ2xlIHN0cnVjdHVyZSBlbmNsb3NlZCBieSBhbiBhcnJheSAoYEEodCguLi4pKWApLCB0aGVuIHRoZQorY29udGVudHMgb2YgYFZBTFVFYCBNVVNUIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJ1Y3R1cmUgKGAuLi5gKQorcmF0aGVyIHRoYW4gdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIHdob2xlIGl0ZW0gKGB0KC4uLilgKS4gIFNwZWNpZmljYWxseSwKK3RoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8gYFZBTFVFYC4gVGhpcworaGVscHMgdG8gZWxpbWluYXRlIHJlZHVuZGFudCBkYXRhLgorCitJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSB2YWx1ZSBvZiBgUFJPUF9MQVNUX1NUQVRVU2Agd2lsbCBiZSBlbWl0dGVkCit3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gdGhlIGdlbmVyYXRlZCBzdGF0dXMgY29kZSBmb3IgdGhlIGVycm9yLgorCisKKyMjIENNRCA2OiAoTkNQLT5Ib3N0KSBDTURfUFJPUF9WQUxVRV9JUyB7I2NtZC1wcm9wLXZhbHVlLWlzfQorCitPY3RldHM6IHwgICAgMSAgIHwgICAgICAgICAgMSAgICAgICAgfCAgIDEtMyAgIHwgICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRV9JUyB8IFBST1BfSUQgfCBWQUxVRQorCitQcm9wZXJ0eSB2YWx1ZSBub3RpZmljYXRpb24gY29tbWFuZC4gVGhpcyBjb21tYW5kIGNhbiBiZSBzZW50IGJ5IHRoZQorTkNQIGluIHJlc3BvbnNlIHRvIGEgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBob3N0LCBvciBpdCBjYW4gYmUgc2VudAorYnkgdGhlIE5DUCBpbiBhbiB1bnNvbGljaXRlZCBmYXNoaW9uIHRvIG5vdGlmeSB0aGUgaG9zdCBvZiB2YXJpb3VzCitzdGF0ZSBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5LgorCitUaGUgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIGlzIHRoZSBwcm9wZXJ0eSBpZGVudGlmaWVyIGVuY29kZWQgaW4gdGhlCitwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluICgjcGFja2VkLXVuc2lnbmVkLWludGVnZXIpLCBmb2xsb3dlZCBieQordGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LgorCisKKworIyMgQ01EIDc6IChOQ1AtPkhvc3QpIENNRF9QUk9QX1ZBTFVFX0lOU0VSVEVEIHsjY21kLXByb3AtdmFsdWUtaW5zZXJ0ZWR9CisKK09jdGV0czogfCAgICAxICAgfCAgICAgICAgICAgIDEgICAgICAgICAgICB8ICAgMS0zICAgfCAgICAqbioKKy0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEhFQURFUiB8IENNRF9QUk9QX1ZBTFVFX0lOU0VSVEVEIHwgUFJPUF9JRCB8IFZBTFVFCisKK1Byb3BlcnR5IHZhbHVlIGluc2VydGlvbiBub3RpZmljYXRpb24gY29tbWFuZC4gVGhpcyBjb21tYW5kIGNhbiBiZQorc2VudCBieSB0aGUgTkNQIGluIHJlc3BvbnNlIHRvIHRoZSBgQ01EX1BST1BfVkFMVUVfSU5TRVJUYCBjb21tYW5kLCBvcgoraXQgY2FuIGJlIHNlbnQgYnkgdGhlIE5DUCBpbiBhbiB1bnNvbGljaXRlZCBmYXNoaW9uIHRvIG5vdGlmeSB0aGUgaG9zdAorb2YgdmFyaW91cyBzdGF0ZSBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5LgorCitUaGUgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIGlzIHRoZSBwcm9wZXJ0eSBpZGVudGlmaWVyIGVuY29kZWQgaW4gdGhlCitwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluICgjcGFja2VkLXVuc2lnbmVkLWludGVnZXIpLCBmb2xsb3dlZCBieQordGhlIHZhbHVlIHRoYXQgd2FzIGluc2VydGVkIGludG8gdGhlIGdpdmVuIHByb3BlcnR5LgorCitJZiB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIHByb3BlcnR5IHNwZWNpZmllZCBieSBgUFJPUF9JRGAgY29uc2lzdHMKK29mIGEgc2luZ2xlIHN0cnVjdHVyZSBlbmNsb3NlZCBieSBhbiBhcnJheSAoYEEodCguLi4pKWApLCB0aGVuIHRoZQorY29udGVudHMgb2YgYFZBTFVFYCBNVVNUIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJ1Y3R1cmUgKGAuLi5gKQorcmF0aGVyIHRoYW4gdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIHdob2xlIGl0ZW0gKGB0KC4uLilgKS4gIFNwZWNpZmljYWxseSwKK3RoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8gYFZBTFVFYC4gVGhpcworaGVscHMgdG8gZWxpbWluYXRlIHJlZHVuZGFudCBkYXRhLgorCitUaGUgcmVzdWx0aW5nIG9yZGVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0IGlzIGRlZmluZWQgYnkgdGhlIGdpdmVuCitwcm9wZXJ0eS4KKworIyMgQ01EIDg6IChOQ1AtPkhvc3QpIENNRF9QUk9QX1ZBTFVFX1JFTU9WRUQgeyNjbWQtcHJvcC12YWx1ZS1yZW1vdmVkfQorCitPY3RldHM6IHwgICAgMSAgIHwgICAgICAgICAgICAxICAgICAgICAgICB8ICAgMS0zICAgfCAgICAqbioKKy0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCB8IFBST1BfSUQgfCBWQUxVRQorCitQcm9wZXJ0eSB2YWx1ZSByZW1vdmFsIG5vdGlmaWNhdGlvbiBjb21tYW5kLiBUaGlzIGNvbW1hbmQgY2FuIGJlIHNlbnQKK2J5IHRoZSBOQ1AgaW4gcmVzcG9uc2UgdG8gdGhlIGBDTURfUFJPUF9WQUxVRV9SRU1PVkVgIGNvbW1hbmQsIG9yIGl0CitjYW4gYmUgc2VudCBieSB0aGUgTkNQIGluIGFuIHVuc29saWNpdGVkIGZhc2hpb24gdG8gbm90aWZ5IHRoZSBob3N0IG9mCit2YXJpb3VzIHN0YXRlIGNoYW5nZXMgYXN5bmNocm9ub3VzbHkuCisKK05vdGUgdGhhdCB0aGlzIGNvbW1hbmQgb3BlcmF0ZXMgKmJ5IHZhbHVlKiwgbm90IGJ5IGluZGV4IQorCitUaGUgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIGlzIHRoZSBwcm9wZXJ0eSBpZGVudGlmaWVyIGVuY29kZWQgaW4gdGhlCitwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluICgjcGFja2VkLXVuc2lnbmVkLWludGVnZXIpLCBmb2xsb3dlZCBieQordGhlIHZhbHVlIHRoYXQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkuCisKK0lmIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IGBQUk9QX0lEYCBjb25zaXN0cworb2YgYSBzaW5nbGUgc3RydWN0dXJlIGVuY2xvc2VkIGJ5IGFuIGFycmF5IChgQSh0KC4uLikpYCksIHRoZW4gdGhlCitjb250ZW50cyBvZiBgVkFMVUVgIE1VU1QgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhlIHN0cnVjdHVyZSAoYC4uLmApCityYXRoZXIgdGhhbiB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgd2hvbGUgaXRlbSAoYHQoLi4uKWApLiAgU3BlY2lmaWNhbGx5LAordGhlIGxlbmd0aCBvZiB0aGUgc3RydWN0dXJlIE1VU1QgTk9UIGJlIHByZXBlbmRlZCB0byBgVkFMVUVgLiBUaGlzCitoZWxwcyB0byBlbGltaW5hdGUgcmVkdW5kYW50IGRhdGEuCisKK1RoZSByZXN1bHRpbmcgb3JkZXIgb2YgaXRlbXMgaW4gdGhlIGxpc3QgaXMgZGVmaW5lZCBieSB0aGUgZ2l2ZW4KK3Byb3BlcnR5LgorCisKKyMjIENNRCAxODogKEhvc3QtPk5DUCkgQ01EX1BFRUsgeyNjbWQtcGVla30KKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAxICAgIHwgICAgNCAgICB8IDIKKy0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUEVFSyB8IEFERFJFU1MgfCBDT1VOVAorCitUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSBOQ1AgdG8gZmV0Y2ggdmFsdWVzIGZyb20gdGhlIFJBTSBvZiB0aGUgTkNQCitmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBVcG9uIHN1Y2Nlc3MsIGBDTURfUEVFS19SRVRgIGlzIHNlbnQgZnJvbSB0aGUKK05DUCB0byB0aGUgaG9zdC4gVXBvbiBmYWlsdXJlLCBgUFJPUF9MQVNUX1NUQVRVU2AgaXMgZW1pdHRlZCB3aXRoCit0aGUgYXBwcm9wcmlhdGUgZXJyb3IgaW5kaWNhdGlvbi4KKworRHVlIHRvIHRoZSBsb3ctbGV2ZWwgbmF0dXJlIG9mIHRoaXMgY29tbWFuZCwgY2VydGFpbiBlcnJvciBjb25kaXRpb25zCittYXkgaW5kdWNlIHRoZSBOQ1AgdG8gcmVzZXQuCisKK1RoZSBOQ1AgTUFZIHByZXZlbnQgY2VydGFpbiByZWdpb25zIG9mIG1lbW9yeSBmcm9tIGJlaW5nIGFjY2Vzc2VkLgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuCitTZWUgKCNzZWN1cml0eS1jb25zaWRlcmF0aW9ucykgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RoaXMgY29tbWFuZCByZXF1aXJlcyB0aGUgY2FwYWJpbGl0eSBgQ0FQX1BFRUtfUE9LRWAgdG8gYmUgcHJlc2VudC4KKworIyMgQ01EIDE5OiAoTkNQLT5Ib3N0KSBDTURfUEVFS19SRVQgeyNjbWQtcGVlay1yZXR9CisKK09jdGV0czogfCAgICAxICAgfCAgICAgMSAgICAgICAgfCAgICA0ICAgIHwgMiAgICAgfCAqbioKKy0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUEVFS19SRVQgfCBBRERSRVNTIHwgQ09VTlQgfCBCWVRFUworCitUaGlzIGNvbW1hbmQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIG1lbW9yeSB0aGF0IHdhcyByZXF1ZXN0ZWQgYnkKK2EgcHJldmlvdXMgY2FsbCB0byBgQ01EX1BFRUtgLgorCitUaGlzIGNvbW1hbmQgcmVxdWlyZXMgdGhlIGNhcGFiaWxpdHkgYENBUF9QRUVLX1BPS0VgIHRvIGJlIHByZXNlbnQuCisKKyMjIENNRCAyMDogKEhvc3QtPk5DUCkgQ01EX1BPS0UgeyNjbWQtcG9rZX0KKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAxICAgIHwgICAgNCAgICB8IDIgICAgIHwgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUE9LRSB8IEFERFJFU1MgfCBDT1VOVCB8IEJZVEVTCisKK1RoaXMgY29tbWFuZCB3cml0ZXMgdGhlIGJ5dGVzIHRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5IGFkZHJlc3MKK2ZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisKK0R1ZSB0byB0aGUgbG93LWxldmVsIG5hdHVyZSBvZiB0aGlzIGNvbW1hbmQsIGNlcnRhaW4gZXJyb3IgY29uZGl0aW9ucworbWF5IGluZHVjZSB0aGUgTkNQIHRvIHJlc2V0LgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuCitTZWUgKCNzZWN1cml0eS1jb25zaWRlcmF0aW9ucykgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RoaXMgY29tbWFuZCByZXF1aXJlcyB0aGUgY2FwYWJpbGl0eSBgQ0FQX1BFRUtfUE9LRWAgdG8gYmUgcHJlc2VudC4KKworIyMgQ01EIDIxOiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9NVUxUSV9HRVQgeyNjbWQtcHJvcC12YWx1ZS1tdWx0aS1nZXR9CisKKyogICBBcmd1bWVudC1FbmNvZGluZzogYEEoaSlgCisqICAgUmVxdWlyZWQgQ2FwYWJpbGl0eTogYENBUF9DTURfTVVMVElgCisKK0ZldGNoIHRoZSB2YWx1ZSBvZiBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIG9uZSBjb21tYW5kLiBBcmd1bWVudHMgYXJlCithbiBhcnJheSBvZiBwcm9wZXJ0eSBJRHMuIElmIGFsbCBwcm9wZXJ0aWVzIGFyZSBmZXRjaGVkIHN1Y2Nlc3NmdWxseSwKK2EgYENNRF9QUk9QX1ZBTFVFU19BUkVgIGNvbW1hbmQgaXMgc2VudCBiYWNrIHRvIHRoZSBob3N0IGNvbnRhaW5pbmcKK3RoZSBwcm9wZXJ0eWlkIGFuZCB2YWx1ZSBvZiBlYWNoIGZldGNoZWQgcHJvcGVydHkuIFRoZSBvcmRlciBvZiB0aGUKK3Jlc3VsdHMgaW4gYENNRF9QUk9QX1ZBTFVFU19BUkVgIG1hdGNoIHRoZSBvcmRlciBvZiBwcm9wZXJ0aWVzIGdpdmVuCitpbiBgQ01EX1BST1BfVkFMVUVfR0VUYC4KKworRXJyb3JzIGZldGNoaW5nIGluZGl2aWR1YWwgcHJvcGVydGllcyBhcmUgcmVmbGVjdGVkIGFzIGluZGljYXRpbmcgYQorY2hhbmdlIHRvIGBQUk9QX0xBU1RfU1RBVFVTYCBmb3IgdGhhdCBwcm9wZXJ0eSdzIHBsYWNlLgorCitOb3QgYWxsIHByb3BlcnRpZXMgY2FuIGJlIGZldGNoZWQgdXNpbmcgdGhpcyBtZXRob2QuIEFzIGEgZ2VuZXJhbCBydWxlCitvZiB0aHVtYiwgYW55IHByb3BlcnR5IHRoYXQgYmxvY2tzIHdoZW4gZ2V0dGluZyB3aWxsIGZhaWwgZm9yIHRoYXQKK2luZGl2aWR1YWwgcHJvcGVydHkgd2l0aCBgU1RBVFVTX0lOVkFMSURfQ09NTUFORF9GT1JfUFJPUGAuCisKKyMjIENNRCAyMjogKEhvc3QtPk5DUCkgQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUIHsjY21kLXByb3AtdmFsdWUtbXVsdGktc2V0fQorCisqICAgQXJndW1lbnQtRW5jb2Rpbmc6IGBBKGlEKWAKKyogICBSZXF1aXJlZCBDYXBhYmlsaXR5OiBgQ0FQX0NNRF9NVUxUSWAKKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAgICAgIDEgICAgICAgICAgICAgICB8ICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUIHwgUHJvcGVydHkvVmFsdWUgUGFpcnMKKworV2l0aCBlYWNoIHByb3BlcnR5L3ZhbHVlIHBhaXIgYmVpbmc6CisKK09jdGV0czogfCAgICAyICAgfCAgIDEtMyAgIHwgICpuKgorLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLQorRmllbGRzOiB8IExFTkdUSCB8IFBST1BfSUQgfCBQUk9QX1ZBTFVFCisKK1RoaXMgY29tbWFuZCBzZXRzIHRoZSB2YWx1ZSBvZiBzZXZlcmFsIHByb3BlcnRpZXMgYXQgb25jZSBpbiB0aGUgZ2l2ZW4KK29yZGVyLiBUaGUgc2V0dGluZyBvZiBwcm9wZXJ0aWVzIHN0b3BzIGF0IHRoZSBmaXJzdCBlcnJvciwgaWdub3JpbmcKK2FueSBsYXRlciBwcm9wZXJ0aWVzLgorCitUaGUgcmVzdWx0IG9mIHRoaXMgY29tbWFuZCBpcyBnZW5lcmFsbHkgYENNRF9QUk9QX1ZBTFVFU19BUkVgIHVubGVzcworKGZvciBleGFtcGxlKSBhIHBhcnNpbmcgZXJyb3IgaGFzIG9jY3VyZWQgKGluIHdoaWNoIGNhc2UKK2BDTURfUFJPUF9WQUxVRV9JU2AgZm9yIGBQUk9QX0xBU1RfU1RBVFVTYCB3b3VsZCBiZSB0aGUgcmVzdWx0KS4gVGhlCitvcmRlciBvZiB0aGUgcmVzdWx0cyBpbiBgQ01EX1BST1BfVkFMVUVTX0FSRWAgbWF0Y2ggdGhlIG9yZGVyIG9mCitwcm9wZXJ0aWVzIGdpdmVuIGluIGBDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVRgLgorCitTaW5jZSB0aGUgcHJvY2Vzc2luZyBvZiBwcm9wZXJ0aWVzIHRvIHNldCBzdG9wcyBhdCB0aGUgZmlyc3QgZXJyb3IsCit0aGUgcmVzdWx0aW5nIGBDTURfUFJPUF9WQUxVRVNfQVJFYCBjYW4gY29udGFpbiBmZXdlciBpdGVtcyB0aGFuIHRoZQorcmVxdWVzdGVkIG51bWJlciBvZiBwcm9wZXJ0aWVzIHRvIHNldC4KKworTm90IGFsbCBwcm9wZXJ0aWVzIGNhbiBiZSBzZXQgdXNpbmcgdGhpcyBtZXRob2QuIEFzIGEgZ2VuZXJhbCBydWxlCitvZiB0aHVtYiwgYW55IHByb3BlcnR5IHRoYXQgYmxvY2tzIHdoZW4gc2V0dGluZyB3aWxsIGZhaWwgZm9yIHRoYXQKK2luZGl2aWR1YWwgcHJvcGVydHkgd2l0aCBgU1RBVFVTX0lOVkFMSURfQ09NTUFORF9GT1JfUFJPUGAuCisKKyMjIENNRCAyMzogKE5DUC0+SG9zdCkgQ01EX1BST1BfVkFMVUVTX0FSRSB7I2NtZC1wcm9wLXZhbHVlcy1hcmV9CisKKyogICBBcmd1bWVudC1FbmNvZGluZzogYEEoaUQpYAorKiAgIFJlcXVpcmVkIENhcGFiaWxpdHk6IGBDQVBfQ01EX01VTFRJYAorCitPY3RldHM6IHwgICAgMSAgIHwgICAgICAgICAgMSAgICAgICAgICB8ICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEhFQURFUiB8IENNRF9QUk9QX1ZBTFVFU19BUkUgfCBQcm9wZXJ0eS9WYWx1ZSBQYWlycworCitXaXRoIGVhY2ggcHJvcGVydHkvdmFsdWUgcGFpciBiZWluZzoKKworT2N0ZXRzOiB8ICAgIDIgICB8ICAgMS0zICAgfCAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgTEVOR1RIIHwgUFJPUF9JRCB8IFBST1BfVkFMVUUKKworVGhpcyBjb21tYW5kIGlzIGVtaXR0ZWQgYnkgdGhlIE5DUCBhcyB0aGUgcmVzcG9uc2UgdG8gYm90aCB0aGUKK2BDTURfUFJPUF9WQUxVRV9NVUxUSV9HRVRgIGFuZCBgQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUYCBjb21tYW5kcy4gSXQKK2lzIHJvdWdobHkgYW5hbG9nb3VzIHRvIGBDTURfUFJPUF9WQUxVRV9JU2AsIGV4Y2VwdCB0aGF0IGl0IGNvbnRhaW5zCittb3JlIHRoYW4gb25lIHByb3BlcnR5LgorCitUaGlzIGNvbW1hbmQgU0hPVUxEIE5PVCBiZSBlbWl0dGVkIGFzeW5jaHJvbm91c2x5LCBvciBpbiByZXNwb25zZSB0bworYW55IGNvbW1hbmQgb3RoZXIgdGhhbiBgQ01EX1BST1BfVkFMVUVfTVVMVElfR0VUYCBvcgorYENNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVGAuCisKK1RoZSBhcmd1bWVudHMgYXJlIGEgbGlzdCBvZiBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdGhlIGVtaXR0ZWQgcHJvcGVydHkKK2FuZCB0aGUgYXNzb2NpYXRlZCB2YWx1ZS4gVGhlc2UgYXJlIHByZXNlbnRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcworZ2l2ZW4gaW4gdGhlIGFzc29jaWF0ZWQgaW5pdGlhdGluZyBjb21tYW5kLiBJbiBjYXNlcyB3aGVyZSBnZXR0aW5nIG9yCitzZXR0aW5nIGEgc3BlY2lmaWMgcHJvcGVydHkgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsIHRoZSBhc3NvY2lhdGVkIHNsb3QKK2luIHRoaXMgY29tbWFuZCB3aWxsIGRlc2NyaWJlIGBQUk9QX0xBU1RfU1RBVFVTYC4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1kYXRhLXBhY2tpbmcubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZGF0YS1wYWNraW5nLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMjJlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZGF0YS1wYWNraW5nLm1kCkBAIC0wLDAgKzEsMTY3IEBACisjIERhdGEgUGFja2luZworCitEYXRhIHNlcmlhbGl6YXRpb24gZm9yIHByb3BlcnRpZXMgaXMgcGVyZm9ybWVkIHVzaW5nIGEgbGlnaHQtd2VpZ2h0CitkYXRhIHBhY2tpbmcgZm9ybWF0IHdoaWNoIHdhcyBsb29zZWx5IGluc3BpcmVkIGJ5IEQtQnVzLiBUaGUgZm9ybWF0IG9mCithIHNlcmlhbGl6YXRpb24gaXMgZGVmaW5lZCBieSBhIHNwZWNpYWxseSBmb3JtYXR0ZWQgc3RyaW5nLgorCitUaGlzIHBhY2tpbmcgZm9ybWF0IGlzIHVzZWQgZm9yIG5vdGF0aW9uYWwgY29udmVuaWVuY2UuIFdoaWxlIHRoaXMKK3N0cmluZy1iYXNlZCBkYXRhdHlwZSBmb3JtYXQgaGFzIGJlZW4gZGVzaWduZWQgc28gdGhhdCB0aGUgc3RyaW5ncyBtYXkKK2JlIGRpcmVjdGx5IHVzZWQgYnkgYSBzdHJ1Y3R1cmVkIGRhdGEgcGFyc2VyLCBzdWNoIGEgdGhpbmcgaXMgbm90CityZXF1aXJlZCB0byBpbXBsZW1lbnQgU3BpbmVsLiBJbmRlZWQsIGhpZ2x5IGNvbnN0cmFpbmVkIGFwcGxpY2F0aW9ucworbWF5IGZpbmQgc3VjaCBhIHRoaW5nIHRvIGJlIHRvbyBoZWF2eXdlaWdodC4KKworR29hbHM6CisKKyAqICBCZSBsaWdodHdlaWdodCBhbmQgZmF2b3IgZGlyZWN0IHJlcHJlc2VudGF0aW9uIG9mIHZhbHVlcy4KKyAqICBVc2UgYW4gZWFzaWx5IHJlYWRhYmxlIGFuZCBtZW1vcmFibGUgZm9ybWF0IHN0cmluZy4KKyAqICBTdXBwb3J0IGxpc3RzIGFuZCBzdHJ1Y3R1cmVzLgorICogIEFsbG93IHByb3BlcnRpZXMgdG8gYmUgYXBwZW5kZWQgdG8gc3RydWN0dXJlcyB3aGlsZSBtYWludGFpbmluZworICAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKK0VhY2ggcHJpbWl0aXZlIGRhdGF0eXBlIGhhcyBhbiBBU0NJSSBjaGFyYWN0ZXIgYXNzb2NpYXRlZCB3aXRoIGl0LgorU3RydWN0dXJlcyBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgc3RyaW5ncyBvZiB0aGVzZSBjaGFyYWN0ZXJzLiBGb3IKK2V4YW1wbGU6CisKKyAqICBgQ2A6IEEgc2luZ2xlIHVuc2lnbmVkIGJ5dGUuCisgKiAgYEM2VWA6IEEgc2luZ2xlIHVuc2lnbmVkIGJ5dGUsIGZvbGxvd2VkIGJ5IGEgMTI4LWJpdCBJUHY2CisgICAgYWRkcmVzcywgZm9sbG93ZWQgYnkgYSB6ZXJvLXRlcm1pbmF0ZWQgVVRGOCBzdHJpbmcuCisgKiAgYEEoNilgOiBBbiBhcnJheSBvZiBjb25jYXRlbmF0ZWQgSVB2NiBhZGRyZXNzZXMKKworSW4gZWFjaCBjYXNlLCB0aGUgZGF0YSBpcyByZXByZXNlbnRlZCBleGFjdGx5IGFzIGRlc2NyaWJlZC4gRm9yCitleGFtcGxlLCBhbiBhcnJheSBvZiAxMCBJUHY2IGFkZHJlc3MgaXMgc3RvcmVkIGFzIDE2MCBieXRlcy4KKworIyMgUHJpbWl0aXZlIFR5cGVzCisKK0NoYXIgfCBOYW1lICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24KKy0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgYC5gIHwgREFUQVRZUEVfVk9JRCAgICAgICAgfCBFbXB0eSBkYXRhIHR5cGUuIFVzZWQgaW50ZXJuYWxseS4KKyBgYmAgfCBEQVRBVFlQRV9CT09MICAgICAgICB8IEJvb2xlYW4gdmFsdWUuIEVuY29kZWQgaW4gOC1iaXRzIGFzIGVpdGhlciAweDAwIG9yIDB4MDEuIEFsbCBvdGhlciB2YWx1ZXMgYXJlIGlsbGVnYWwuCisgYENgIHwgREFUQVRZUEVfVUlOVDggICAgICAgfCBVbnNpZ25lZCA4LWJpdCBpbnRlZ2VyLgorIGBjYCB8IERBVEFUWVBFX0lOVDggICAgICAgIHwgU2lnbmVkIDgtYml0IGludGVnZXIuCisgYFNgIHwgREFUQVRZUEVfVUlOVDE2ICAgICAgfCBVbnNpZ25lZCAxNi1iaXQgaW50ZWdlci4KKyBgc2AgfCBEQVRBVFlQRV9JTlQxNiAgICAgICB8IFNpZ25lZCAxNi1iaXQgaW50ZWdlci4KKyBgTGAgfCBEQVRBVFlQRV9VSU5UMzIgICAgICB8IFVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgorIGBsYCB8IERBVEFUWVBFX0lOVDMyICAgICAgIHwgU2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgorIGBpYCB8IERBVEFUWVBFX1VJTlRfUEFDS0VEIHwgUGFja2VkIFVuc2lnbmVkIEludGVnZXIuIFNlZSAoI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyKS4KKyBgNmAgfCBEQVRBVFlQRV9JUHY2QUREUiAgICB8IElQdjYgQWRkcmVzcy4gKEJpZy1lbmRpYW4pCisgYEVgIHwgREFUQVRZUEVfRVVJNjQgICAgICAgfCBFVUktNjQgQWRkcmVzcy4gKEJpZy1lbmRpYW4pCisgYGVgIHwgREFUQVRZUEVfRVVJNDggICAgICAgfCBFVUktNDggQWRkcmVzcy4gKEJpZy1lbmRpYW4pCisgYERgIHwgREFUQVRZUEVfREFUQSAgICAgICAgfCBBcmJpdHJhcnkgZGF0YS4gU2VlICgjZGF0YS1ibG9icykuCisgYGRgIHwgREFUQVRZUEVfREFUQV9XTEVOICAgfCBBcmJpdHJhcnkgZGF0YSB3aXRoIHByZXBlbmRlZCBsZW5ndGguIFNlZSAoI2RhdGEtYmxvYnMpLgorIGBVYCB8IERBVEFUWVBFX1VURjggICAgICAgIHwgWmVyby10ZXJtaW5hdGVkIFVURjgtZW5jb2RlZCBzdHJpbmcuCisgYHQoLi4uKWAgfCBEQVRBVFlQRV9TVFJVQ1QgfCBTdHJ1Y3R1cmVkIGRhdGF0eXBlIHdpdGggcHJlcGVuZGVkIGxlbmd0aC4gU2VlICgjc3RydWN0dXJlZC1kYXRhKS4KKyBgQSguLi4pYCB8IERBVEFUWVBFX0FSUkFZICB8IEFycmF5IG9mIGRhdGF0eXBlcy4gQ29tcG91bmQgdHlwZS4gU2VlICgjYXJyYXlzKS4KKworQWxsIG11bHRpLWJ5dGUgdmFsdWVzIGFyZSBsaXR0bGUtZW5kaWFuIHVubGVzcyBleHBsaWNpdGx5IHN0YXRlZAorb3RoZXJ3aXNlLgorCisjIyBQYWNrZWQgVW5zaWduZWQgSW50ZWdlcgorCitGb3IgY2VydGFpbiB0eXBlcyBvZiBpbnRlZ2Vycywgc3VjaCBjb21tYW5kIG9yIHByb3BlcnR5IGlkZW50aWZpZXJzLAordXN1YWxseSBoYXZlIGEgdmFsdWUgb24gdGhlIHdpcmUgdGhhdCBpcyBsZXNzIHRoYW4gMTI3LiBIb3dldmVyLCBpbgorb3JkZXIgdG8gbm90IHByZWNsdWRlIHRoZSB1c2Ugb2YgdmFsdWVzIGxhcmdlciB0aGFuIDI1NSwgd2Ugd291bGQgbmVlZAordG8gYWRkIGFuIGV4dHJhIGJ5dGUuIERvaW5nIHRoaXMgd291bGQgYWRkIGFuIGV4dHJhIGJ5dGUgdG8gdGhlCittYWpvcml0eSBvZiBpbnN0YW5jZXMsIHdoaWNoIGNhbiBhZGQgdXAgaW4gdGVybXMgb2YgYmFuZHdpZHRoLgorCitUaGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGlzIGJhc2VkIG9uIHRoZSBbdW5zaWduZWQgaW50ZWdlcgorZm9ybWF0IGluIEVYSV1bRVhJXSwgZXhjZXB0IHRoYXQgd2UgbGltaXQgdGhlIG1heGltdW0gdmFsdWUgdG8gdGhlCitsYXJnZXN0IHZhbHVlIHRoYXQgY2FuIGJlIGVuY29kZWQgaW50byB0aHJlZSBieXRlcygyLDA5NywxNTEpLgorCitbRVhJXTogaHR0cHM6Ly93d3cudzMub3JnL1RSL2V4aS8jZW5jb2RpbmdVbnNpZ25lZEludGVnZXIKKworRm9yIGFsbCB2YWx1ZXMgbGVzcyB0aGFuIDEyNywgdGhlIHBhY2tlZCBmb3JtIG9mIHRoZSBudW1iZXIgaXMgc2ltcGx5CithIHNpbmdsZSBieXRlIHdoaWNoIGRpcmVjdGx5IHJlcHJlc2VudHMgdGhlIG51bWJlci4gRm9yIHZhbHVlcyBsYXJnZXIKK3RoYW4gMTI3LCB0aGUgZm9sbG93aW5nIHByb2Nlc3MgaXMgdXNlZCB0byBlbmNvZGUgdGhlIHZhbHVlOgorCisxLiAgVGhlIHVuc2lnbmVkIGludGVnZXIgaXMgYnJva2VuIHVwIGludG8gKm4qIDctYml0IGNodW5rcyBhbmQgcGxhY2VkCisgICAgaW50byAqbiogb2N0ZXRzLCBsZWF2aW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBlYWNoIG9jdGV0CisgICAgdW51c2VkLgorMi4gIE9yZGVyIHRoZSBvY3RldHMgZnJvbSBsZWFzdC1zaWduaWZpY2FudCB0byBtb3N0LXNpZ25pZmljYW50LgorICAgIChMaXR0bGUtZW5kaWFuKQorMy4gIENsZWFyIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBvY3RldC4gU2V0CisgICAgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvbiBhbGwgb3RoZXIgb2N0ZXRzLgorCitXaGVyZSAqbiogaXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiA3LWJpdCBjaHVua3MgeW91IGNhbiB1c2UgdG8KK3JlcHJlc2VudCB0aGUgZ2l2ZW4gdmFsdWUuCisKK1Rha2UgdGhlIHZhbHVlIDEzMzcsIGZvciBleGFtcGxlOgorCisgICAgMTMzNyA9PiAweDA1MzkKKyAgICAgICAgID0+IFszOSAwQV0KKyAgICAgICAgID0+IFtCOSAwQV0KKworVG8gZGVjb2RlIHRoZSB2YWx1ZSwgeW91IGNvbGxlY3QgdGhlIDctYml0IGNodW5rcyB1bnRpbCB5b3UgZmluZCBhbgorb2N0ZXQgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgY2xlYXIuCisKKyMjIERhdGEgQmxvYnMKKworVGhlcmUgYXJlIHR3byB0eXBlcyBmb3IgZGF0YSBibG9iczogYGRgIGFuZCBgRGAuCisKKyogICBgZGAgaGFzIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKGluIGJ5dGVzKSBwcmVwZW5kZWQgdG8gdGhlIGRhdGEKKyAgICAod2l0aCB0aGUgbGVuZ3RoIGVuY29kZWQgYXMgdHlwZSBgU2ApLiBUaGUgc2l6ZSBvZiB0aGUgbGVuZ3RoCisgICAgZmllbGQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsZW5ndGguCisqICAgYERgIGRvZXMgbm90IGhhdmUgYSBwcmVwZW5kZWQgbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGlzCisgICAgaW1wbGllZCBieSB0aGUgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIHBhcnNlZC4gSXQgaXMgYW4gZXJyb3IgZm9yCisgICAgYERgIHRvIG5vdCBiZSB0aGUgbGFzdCB0eXBlIGluIGEgdHlwZSBpbiBhIHR5cGUgc2lnbmF0dXJlLgorCitUaGlzIGRpY2hvdG9teSBhbGxvd3MgZm9yIG1vcmUgZWZmaWNpZW50IGVuY29kaW5nIGJ5IGVsaW1pbmF0aW5nCityZWR1bmRlbmN5LiBJZiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIGlzIGEgZGF0YSBibG9iLCBlbmNvZGluZyB0aGUKK2xlbmd0aCB3b3VsZCBiZSByZWR1bmRhbnQgYmVjYXVzZSB3ZSBhbHJlYWR5IGtub3cgaG93IG1hbnkgYnl0ZXMgYXJlCitpbiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyLgorCitJbiBzb21lIGNhc2VzIHdlIHVzZSBgZGAgZXZlbiBpZiBpdCBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIHR5cGUgc2lnbmF0dXJlLgorV2UgZG8gdGhpcyB0byBhbGxvdyBmb3IgdXMgdG8gYmUgYWJsZSB0byBhcHBlbmQgYWRkaXRpb25hbCBmaWVsZHMKK3RvIHRoZSB0eXBlIHNpZ25hdHVyZSBpZiBuZWNlc3NhcnkgaW4gdGhlIGZ1dHVyZS4gVGhpcyBpcyB1c3VhbGx5IHRoZQorY2FzZSB3aXRoIGVtYmVkZGVkIHN0cnVjdHMsIGxpa2UgaW4gdGhlIHNjYW4gcmVzdWx0cy4KKworRm9yIGV4YW1wbGUsIGxldCdzIHNheSB3ZSBoYXZlIGEgYnVmZmVyIHRoYXQgaXMgZW5jb2RlZCB3aXRoIHRoZQorZGF0YXR5cGUgc2lnbmF0dXJlIG9mIGBDTExEYC4gSW4gdGhpcyBjYXNlLCBpdCBpcyBwcmV0dHkgZWFzeSB0byB0ZWxsCit3aGVyZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZGF0YSBibG9iIGlzOiB0aGUgc3RhcnQgaXMgOSBieXRlcyBmcm9tCit0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciwgYW5kIGl0cyBsZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyCittaW51cyA5LiAoOSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRha2VuIHVwIGJ5IGEgYnl0ZSBhbmQgdHdvIGxvbmdzKQorCitUaGUgZGF0YXR5cGUgc2lnbmF0dXJlIGBDTExEVWAgaXMgaWxsZWdhbCBiZWNhdXNlIHdlIGNhbid0IGRldGVybWluZQord2hlcmUgdGhlIGxhc3QgZmllbGQgKGEgemVyby10ZXJtaW5hdGVkIFVURjggc3RyaW5nKSBzdGFydHMuIEJ1dCB0aGUKK2RhdGF0eXBlIGBDTExkVWAgKmlzKiBsZWdhbCwgYmVjYXVzZSB0aGUgcGFyc2VyIGNhbiBkZXRlcm1pbmUgdGhlCitleGFjdCBsZW5ndGggb2YgdGhlIGRhdGEgYmxvYi0tIGFsbG93aW5nIGl0IHRvIGtub3cgd2hlcmUgdGhlIHN0YXJ0CitvZiB0aGUgbmV4dCBmaWVsZCB3b3VsZCBiZS4KKworIyMgU3RydWN0dXJlZCBEYXRhCisKK1RoZSBzdHJ1Y3R1cmUgZGF0YSB0eXBlIChgdCguLi4pYCkgaXMgYSB3YXkgb2YgYnVuZGxpbmcgdG9nZXRoZXIKK3NldmVyYWwgZmllbGRzIGludG8gYSBzaW5nbGUgc3RydWN0dXJlLiBJdCBjYW4gYmUgdGhvdWdodCBvZiBhcyBhCitgZGAgdHlwZSBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mIGJlaW5nIG9wYXF1ZSwgdGhlIGZpZWxkcyBpbiB0aGUKK2NvbnRlbnQgYXJlIGtub3duLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhpbmdzIGxpa2Ugc2NhbiByZXN1bHRzIHdoZXJlCit5b3UgaGF2ZSBzdWJzdHJ1Y3R1cmVzIHdoaWNoIGFyZSBkZWZpbmVkIGJ5IGRpZmZlcmVudCBsYXllcnMuCisKK0ZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgdHlwZSBzaWduYXR1cmUgYEx0KEVTKXQoNkMpYC4gSW4gdGhpcworaHlwb3RoZXRpY2FsIGNhc2UsIHRoZSBmaXJzdCBzdHJ1Y3QgaXMgZGVmaW5lZCBieSB0aGUgTUFDIGxheWVyLCBhbmQKK3RoZSBzZWNvbmQgc3RydWN0IGlzIGRlZmluZWQgYnkgdGhlIFBIWSBsYXllci4gQmVjYXVzZSBvZiB0aGUgdXNlIG9mCitzdHJ1Y3R1cmVzLCB3ZSBrbm93IGV4YWN0bHkgd2hhdCBwYXJ0IGNvbWVzIGZyb20gdGhhdCBsYXllci4KK0FkZGl0aW9uYWxseSwgd2UgY2FuIGFkZCBmaWVsZHMgdG8gZWFjaCBzdHJ1Y3R1cmUgd2l0aG91dCBpbnRyb2R1Y2luZworYmFja3dhcmQgY29tcGF0YWJpbGl0eSBwcm9ibGVtczogRGF0YSBlbmNvZGVkIGFzIGBMdChFU1UpdCg2QylgIChOb3RpY2UKK3RoZSBleHRyYSBgVWApIHdpbGwKK2RlY29kZSBqdXN0IGZpbmUgYXMgYEx0KEVTKXQoNkMpYC4gQWRkaXRpb25hbGx5LCBpZiB3ZSBkb24ndCBjYXJlCithYm91dCB0aGUgTUFDIGxheWVyIGFuZCBvbmx5IGNhcmUgYWJvdXQgdGhlIG5ldHdvcmsgbGF5ZXIsIHdlIGNvdWxkCitwYXJzZSBhcyBgTHQoKXQoNkMpYC4KKworTm90ZSB0aGF0IGRhdGEgZW5jb2RlZCBhcyBgTHQoRVMpdCg2QylgIHdpbGwgYWxzbyBwYXJzZSBhcyBgTGRkYCwKK3dpdGggdGhlIHN0cnVjdHVyZXMgZnJvbSBib3RoIGxheWVycyBub3cgYmVpbmcgb3BhcXVlIGRhdGEgYmxvYnMuCisKKyMjIEFycmF5cworCitBbiBhcnJheSBpcyBzaW1wbHkgYSBjb25jYXRlbmF0ZWQgc2V0IG9mICpuKiBkYXRhIGVuY29kaW5ncy4gRm9yIGV4YW1wbGUsCit0aGUgdHlwZSBgQSg2KWAgaXMgc2ltcGx5IGEgbGlzdCBvZiBJUHY2IGFkZHJlc3Nlcy0tLW9uZSBhZnRlciB0aGUgb3RoZXIuCitUaGUgdHlwZSBgQSg2RSlgIGxpa2V3aXNlIGEgY29uY2F0ZW5hdGlvbiBvZiBJUHY2LWFkZHJlc3MvRVVJLTY0IHBhaXJzLgorCitJZiBhbiBhcnJheSBjb250YWlucyBtYW55IGZpZWxkcywgdGhlIGZpZWxkcyB3aWxsIG9mdGVuIGJlIHN1cnJvdW5kZWQKK2J5IGEgc3RydWN0dXJlIChgdCguLi4pYCkuIFRoaXMgZWZmZWN0aXZlbHkgcHJlcGVuZHMgZWFjaCBpdGVtIGluIHRoZQorYXJyYXkgd2l0aCBpdHMgbGVuZ3RoLiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW1wcm92aW5nIHBhcnNpbmcgcGVyZm9ybWFuY2UKK29yIHRvIGFsbG93IGFkZGl0aW9uYWwgZmllbGRzIHRvIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUgaW4gYSBiYWNrd2FyZAorY29tcGF0aWJsZSB3YXkuIElmIHRoZXJlIGlzIGEgaGlnaCBjZXJ0YWludHkgdGhhdCBhZGRpdGlvbmFsCitmaWVsZHMgd2lsbCBuZXZlciBiZSBhZGRlZCwgdGhlIHN0cnVjdCBtYXkgYmUgb21pdHRlZCAoc2F2aW5nIHR3byBieXRlcworcGVyIGl0ZW0pLgorCitUaGlzIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZGVmaW5lIGEgd2F5IHRvIGVtYmVkIGFuIGFycmF5IGFzIGEgZmllbGQKK2Fsb25nc2lkZSBvdGhlciBmaWVsZHMuCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1leGFtcGxlLXNlc3Npb25zLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWV4YW1wbGUtc2Vzc2lvbnMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0MWM2NwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1leGFtcGxlLXNlc3Npb25zLm1kCkBAIC0wLDAgKzEsMjEwIEBACisjIEV4YW1wbGUgU2Vzc2lvbnMKKworIyMgTkNQIEluaXRpYWxpemF0aW9uCisKKzwhLS0gUlEgLS0gRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuIC0tPgorCitDaGVjayB0aGUgcHJvdG9jb2wgdmVyc2lvbiB0byBzZWUgaWYgaXQgaXMgc3VwcG9ydGVkOgorCisqIENNRF9WQUxVRV9HRVQ6UFJPUF9QUk9UT0NPTF9WRVJTSU9OCisqIENNRF9WQUxVRV9JUzpQUk9QX1BST1RPQ09MX1ZFUlNJT04KKworQ2hlY2sgdGhlIE5DUCB2ZXJzaW9uIHRvIHNlZSBpZiBhIGZpcm13YXJlIHVwZGF0ZSBtYXkgYmUgbmVjZXNzYXJ5OgorCisqIENNRF9WQUxVRV9HRVQ6UFJPUF9OQ1BfVkVSU0lPTgorKiBDTURfVkFMVUVfSVM6UFJPUF9OQ1BfVkVSU0lPTgorCitDaGVjayBpbnRlcmZhY2UgdHlwZSB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyB3aGF0IHdlIGV4cGVjdDoKKworKiBDTURfVkFMVUVfR0VUOlBST1BfSU5URVJGQUNFX1RZUEUKKyogQ01EX1ZBTFVFX0lTOlBST1BfSU5URVJGQUNFX1RZUEUKKworSWYgdGhlIGhvc3Qgc3VwcG9ydHMgdXNpbmcgdmVuZG9yLXNwZWNpZmljIGNvbW1hbmRzLCB0aGUgdmVuZG9yIHNob3VsZAorYmUgdmVyaWZpZWQgYmVmb3JlIHVzaW5nIHRoZW06CisKKyogQ01EX1ZBTFVFX0dFVDpQUk9QX1ZFTkRPUl9JRAorKiBDTURfVkFMVUVfSVM6UFJPUF9WRU5ET1JfSUQKKworRmV0Y2ggdGhlIGNhcGFiaWxpdHkgbGlzdCBzbyB0aGF0IHdlIGtub3cgd2hhdCBmZWF0dXJlcyB0aGlzIE5DUAorc3VwcG9ydHM6CisKKyogQ01EX1ZBTFVFX0dFVDpQUk9QX0NBUFMKKyogQ01EX1ZBTFVFX0lTOlBST1BfQ0FQUworCitJZiB0aGUgTkNQIHN1cHBvcnRzIENBUF9ORVRfU0FWRSwgdGhlbiB3ZSBnbyBhaGVhZCBhbmQgcmVjYWxsIHRoZSBuZXR3b3JrOgorCisqIENNRF9ORVRfUkVDQUxMCisKKyMjIEF0dGFjaGluZyB0byBhIG5ldHdvcmsKKworPCEtLSBSUSAtLSBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS4gLS0+CisKK1dlIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgTkNQIGlzIG5vdCBjdXJyZW50bHkgYXNzb2NpYXRlZAord2l0aCBhIG5ldHdvcmsuCisKK1NldCB0aGUgbmV0d29yayBwcm9wZXJ0aWVzLCBpZiB0aGV5IHdlcmUgbm90IGFscmVhZHkgc2V0OgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9QSFlfQ0hBTgorKiBDTURfVkFMVUVfSVM6UFJPUF9QSFlfQ0hBTgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfWFBBTklECisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9YUEFOSUQKKworKiBDTURfVkFMVUVfU0VUOlBST1BfTUFDXzE1XzRfUEFOSUQKKyogQ01EX1ZBTFVFX0lTOlBST1BfTUFDXzE1XzRfUEFOSUQKKworKiBDTURfVkFMVUVfU0VUOlBST1BfTkVUX05FVFdPUktfTkFNRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfTkVUV09SS19OQU1FCisKKyogQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9NQVNURVJfS0VZCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9NQVNURVJfS0VZCisKKyogQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUgorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIKKworKiBDTURfVkFMVUVfU0VUOlBST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRQorCitCcmluZyB0aGUgbmV0d29yayBpbnRlcmZhY2UgdXA6CisKKyogQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9JRl9VUDpUUlVFCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9JRl9VUDpUUlVFCisKK0JyaW5nIHRoZSByb3V0aW5nIHN0YWNrIHVwOgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorCitTb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOgorCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9ST0xFCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9QQVJUSVRJT05fSUQKKyogQ01EX1ZBTFVFX0lTOlBST1BfVEhSRUFEX09OX01FU0hfTkVUUworCisjIyBTdWNjZXNzZnVsbHkgam9pbmluZyBhIHByZS1leGlzdGluZyBuZXR3b3JrCisKKzwhLS0gUlEgLS0gRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuIC0tPgorCitUaGlzIGV4YW1wbGUgc2Vzc2lvbiBpcyBpZGVudGljYWwgdG8gdGhlIGFib3ZlIHNlc3Npb24gdXAgdG8gdGhlIHBvaW50Cit3aGVyZSB3ZSBzZXQgUFJPUF9ORVRfSUZfVVAgdG8gdHJ1ZS4gRnJvbSB0aGVyZSwgdGhlIGJlaGF2aW9yIGNoYW5nZXMuCisKKyogQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc6VFJVRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HOlRSVUUKKworQnJpbmcgdGhlIHJvdXRpbmcgc3RhY2sgdXA6CisKKyogQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9TVEFDS19VUDpUUlVFCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9TVEFDS19VUDpUUlVFCisKK1NvbWUgYXN5bmNocm9ub3VzIGV2ZW50cyBmcm9tIHRoZSBOQ1A6CisKKyogQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1JPTEUKKyogQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1BBUlRJVElPTl9JRAorKiBDTURfVkFMVUVfSVM6UFJPUF9USFJFQURfT05fTUVTSF9ORVRTCisKK05vdyBsZXQncyBzYXZlIHRoZSBuZXR3b3JrIHNldHRpbmdzIHRvIE5WUkFNOgorCisqIENNRF9ORVRfU0FWRQorCisjIyBVbnN1Y2Nlc3NmdWxseSBqb2luaW5nIGEgcHJlLWV4aXN0aW5nIG5ldHdvcmsKKworVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBhYm92ZSBzZXNzaW9uIHVwIHRvIHRoZSBwb2ludAord2hlcmUgd2Ugc2V0IFBST1BfTkVUX0lGX1VQIHRvIHRydWUuIEZyb20gdGhlcmUsIHRoZSBiZWhhdmlvciBjaGFuZ2VzLgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HOlRSVUUKKyogQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORzpUUlVFCisKK0JyaW5nIHRoZSByb3V0aW5nIHN0YWNrIHVwOgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorCitTb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOgorCisqIENNRF9WQUxVRV9JUzpQUk9QX0xBU1RfU1RBVFVTOlNUQVRVU19KT0lOX05PX1BFRVJTCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9TVEFDS19VUDpGQUxTRQorCisjIyBEZXRhY2hpbmcgZnJvbSBhIG5ldHdvcmsKKworVEJECisKKyMjIEF0dGFjaGluZyB0byBhIHNhdmVkIG5ldHdvcmsKKworPCEtLSBSUSAtLSBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS4gLS0+CisKK1JlY2FsbCB0aGUgc2F2ZWQgbmV0d29yayBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc286CisKKyogQ01EX05FVF9SRUNBTEwKKworQnJpbmcgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVwOgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfSUZfVVA6VFJVRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfSUZfVVA6VFJVRQorCitCcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDoKKworKiBDTURfVkFMVUVfU0VUOlBST1BfTkVUX1NUQUNLX1VQOlRSVUUKKyogQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOlRSVUUKKworU29tZSBhc3luY2hyb25vdXMgZXZlbnRzIGZyb20gdGhlIE5DUDoKKworKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUk9MRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUEFSVElUSU9OX0lECisqIENNRF9WQUxVRV9JUzpQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFMKKworIyMgTkNQIFNvZnR3YXJlIFJlc2V0CisKKzwhLS0gUlEgLS0gRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuIC0tPgorCisqIENNRF9SRVNFVAorKiBDTURfVkFMVUVfSVM6UFJPUF9MQVNUX1NUQVRVUzpTVEFUVVNfUkVTRVRfU09GVFdBUkUKKworVGhlbiBqdW1wIHRvICgjbmNwLWluaXRpYWxpemF0aW9uKS4KKworIyMgQWRkaW5nIGFuIG9uLW1lc2ggcHJlZml4CisKK1RCRAorCisjIyBFbnRlcmluZyBsb3ctcG93ZXIgbW9kZXMKKworVEJECisKKyMjIFNuaWZmaW5nIHJhdyBwYWNrZXRzCisKKzwhLS0gUlEgLS0gRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuIC0tPgorCitUaGlzIGFzc3VtZXMgdGhhdCB0aGUgTkNQIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCitPcHRpb25hbGx5IHNldCB0aGUgY2hhbm5lbDoKKworKiBDTURfVkFMVUVfU0VUOlBST1BfUEhZX0NIQU46eAorKiBDTURfVkFMVUVfSVM6UFJPUF9QSFlfQ0hBTgorCitTZXQgdGhlIGZpbHRlciBtb2RlOgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9NQUNfUFJPTUlTQ1VPVVNfTU9ERTpNQUNfUFJPTUlTQ1VPVVNfTU9ERV9NT05JVE9SCisqIENNRF9WQUxVRV9JUzpQUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFOk1BQ19QUk9NSVNDVU9VU19NT0RFX01PTklUT1IKKworRW5hYmxlIHRoZSByYXcgc3RyZWFtOgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9NQUNfUkFXX1NUUkVBTV9FTkFCTEVEOlRSVUUKKyogQ01EX1ZBTFVFX0lTOlBST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRDpUUlVFCisKK0VuYWJsZSB0aGUgUEhZIGRpcmVjdGx5OgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9QSFlfRU5BQkxFRDpUUlVFCisqIENNRF9WQUxVRV9JUzpQUk9QX1BIWV9FTkFCTEVEOlRSVUUKKworTm93IHdlIHdpbGwgZ2V0IHJhdyA4MDIuMTUuNCBwYWNrZXRzIGFzeW5jaHJvbm91c2x5IG9uCitQUk9QX1NUUkVBTV9SQVc6CisKKyogQ01EX1ZBTFVFX0lTOlBST1BfU1RSRUFNX1JBVzouLi4KKyogQ01EX1ZBTFVFX0lTOlBST1BfU1RSRUFNX1JBVzouLi4KKyogQ01EX1ZBTFVFX0lTOlBST1BfU1RSRUFNX1JBVzouLi4KKworVGhpcyBtb2RlIG1heSBiZSBlbnRlcmVkIGV2ZW4gd2hlbiBhc3NvY2lhdGVkIHdpdGggYSBuZXR3b3JrLgorSW4gdGhhdCBjYXNlLCB5b3Ugc2hvdWxkIHNldCBgUFJPUF9NQUNfUFJPTUlTQ1VPVVNfTU9ERWAgdG8KK2BNQUNfUFJPTUlTQ1VPVVNfTU9ERV9QUk9NSVNDVU9VU2Agb3IgYE1BQ19QUk9NSVNDVU9VU19NT0RFX05PUk1BTGAsIHNvIHRoYXQKK3lvdSBjYW4gYXZvaWQgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBvdGhlciBuZXR3b3JrcyBvciB0aGF0IGFyZSBkZXN0aW5lZAorZm9yIG90aGVyIG5vZGVzLgorCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZmVhdHVyZS1ncGlvLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWZlYXR1cmUtZ3Bpby5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDNmNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWZlYXR1cmUtZ3Bpby5tZApAQCAtMCwwICsxLDExNCBAQAorIyBGZWF0dXJlOiBHUElPIEFjY2VzcyB7I2ZlYXR1cmUtZ3Bpby1hY2Nlc3N9CisKK1RoaXMgZmVhdHVyZSBhbGxvd3MgdGhlIGhvc3QgdG8gaGF2ZSBjb250cm9sIG92ZXIgc29tZSBvciBhbGwgb2YgdGhlCitHUElPIHBpbnMgb24gdGhlIE5DUC4gVGhlIGhvc3QgY2FuIGRldGVybWluZSB3aGljaCBHUElPcyBhcmUgYXZhaWxhYmxlCitieSBleGFtaW5pbmcgYFBST1BfR1BJT19DT05GSUdgLCBkZXNjcmliZWQgYmVsb3cuIFRoaXMgQVBJIHN1cHBvcnRzIGEKK21heGltdW0gb2YgMjU2IGluZGl2aWR1YWwgR1BJTyBwaW5zLgorCitTdXBwb3J0IGZvciB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIHByZXNlbmNlIG9mIGBDQVBfR1BJT2AuCisKKyMjIFByb3BlcnRpZXMgIyMKKworIyMjIFBST1AgNDA5NjogUFJPUFxfR1BJT1xfQ09ORklHICMjIworCisqICAgQXJndW1lbnQtRW5jb2Rpbmc6IGBBKHQoQ0NVKSlgCisqICAgVHlwZTogUmVhZC13cml0ZSAoV3JpdGFibGUgb25seSB1c2luZyBgQ01EX1BST1BfVkFMVUVfSU5TRVJUYCwKKyAgICAoI2NtZC1wcm9wLXZhbHVlLWluc2VydCkpCisKK0FuIGFycmF5IG9mIHN0cnVjdHVyZXMgd2hpY2ggY29udGFpbiB0aGUgZm9sbG93aW5nIGZpZWxkczoKKworKiAgIGBDYDogR1BJTyBOdW1iZXIKKyogICBgQ2A6IEdQSU8gQ29uZmlndXJhdGlvbiBGbGFncworKiAgIGBVYDogSHVtYW4tcmVhZGFibGUgR1BJTyBuYW1lCisKK0dQSU9zIHdoaWNoIGRvIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbnRyeSBhcmUgbm90IHN1cHBvcnRlZC4KKworVGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGZsYWdzIGZvciB0aGUKK0dQSU86CisKKyAgICAgIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisgICAgfERJUnxQVVB8UEROfFRSSUdHRVJ8ICBSRVNFUlZFRCB8CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisgICAgICAgICAgICB8Ty9EfAorICAgICAgICAgICAgKy0tLSsKKworKiAgIGBESVJgOiBQaW4gZGlyZWN0aW9uLiBDbGVhciAoMCkgZm9yIGlucHV0LCBzZXQgKDEpIGZvciBvdXRwdXQuCisqICAgYFBVUGA6IFB1bGwtdXAgZW5hYmxlZCBmbGFnLgorKiAgIGBQRE5gL2BPL0RgOiBGbGFnIG1lYW5pbmcgZGVwZW5kcyBvbiBwaW4gZGlyZWN0aW9uOgorICAgICogICBJbnB1dDogUHVsbC1kb3duIGVuYWJsZWQuCisgICAgKiAgIE91dHB1dDogT3V0cHV0IGlzIGFuIG9wZW4tZHJhaW4uCisqICAgYFRSSUdHRVJgOiBFbnVtZXJhdGlvbiBkZXNjcmliaW5nIGhvdyBwaW4gY2hhbmdlcyBnZW5lcmF0ZQorICAgIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24gY29tbWFuZHMgKFRCRCkgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0LgorICAgICogICAwOiBGZWF0dXJlIGRpc2FibGVkIGZvciB0aGlzIHBpbgorICAgICogICAxOiBUcmlnZ2VyIG9uIGZhbGxpbmcgZWRnZQorICAgICogICAyOiBUcmlnZ2VyIG9uIHJpc2luZyBlZGdlCisgICAgKiAgIDM6IFRyaWdnZXIgb24gbGV2ZWwgY2hhbmdlCisqICAgYFJFU0VSVkVEYDogQml0cyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gQWx3YXlzIGNsZWFyZWQgdG8gemVybworICAgIGFuZCBpZ25vcmVkIHdoZW4gcmVhZC4KKworQXMgYW4gb3B0aW9uYWwgZmVhdHVyZSwgdGhlIGNvbmZpZ3VyYXRpb24gb2YgaW5kaXZpZHVhbCBwaW5zIG1heSBiZQorbW9kaWZpZWQgdXNpbmcgdGhlIGBDTURfUFJPUF9WQUxVRV9JTlNFUlRgIGNvbW1hbmQuIE9ubHkgdGhlIEdQSU8KK251bWJlciBhbmQgZmxhZ3MgZmllbGRzIE1VU1QgYmUgcHJlc2VudCwgdGhlIEdQSU8gbmFtZSAoaWYgcHJlc2VudCkKK3dvdWxkIGJlIGlnbm9yZWQuIFRoaXMgY29tbWFuZCBjYW4gb25seSBiZSB1c2VkIHRvIG1vZGlmeSB0aGUKK2NvbmZpZ3VyYXRpb24gb2YgR1BJT3Mgd2hpY2ggYXJlIGFscmVhZHkgZXhwb3NlZC0tLWl0IGNhbm5vdCBiZSB1c2VkCitieSB0aGUgaG9zdCB0byBhZGQgYWRkaW9uYWwgR1BJT3MuCisKKyMjIyBQUk9QIDQwOTg6IFBST1BcX0dQSU9cX1NUQVRFICMjIworCisqICAgVHlwZTogUmVhZC1Xcml0ZQorCitDb250YWlucyBhIGJpdCBmaWVsZCBpZGVudGlmeWluZyB0aGUgc3RhdGUgb2YgdGhlIEdQSU9zLiBUaGUgbGVuZ3RoIG9mCit0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlc2UgcHJvcGVydGllcyBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YKK0dQSU9zLiBJZiB5b3UgaGF2ZSAxMCBHUElPcywgeW91J2QgaGF2ZSB0d28gYnl0ZXMuIEdQSU9zIGFyZSBudW1iZXJlZAorZnJvbSBtb3N0IHNpZ25pZmljYW50IGJpdCB0byBsZWFzdCBzaWduaWZpY2FudCBiaXQsIHNvIDB4ODAgaXMgR1BJTyAwLAorMHg0MCBpcyBHUElPIDEsIGV0Yy4KKworRm9yIEdQSU9zIGNvbmZpZ3VyZWQgYXMgaW5wdXRzOgorCisqICAgYENNRF9QUk9QX1ZBVUVfR0VUYDogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBkZXNjcmliZXMgdGhlCisgICAgbG9naWMgbGV2ZWwgcmVhZCBmcm9tIHRoZSBwaW4uCisqICAgYENNRF9QUk9QX1ZBTFVFX1NFVGA6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgaWdub3JlZAorICAgIGZvciB0aGVzZSBwaW5zLgorCitGb3IgR1BJT3MgY29uZmlndXJlZCBhcyBvdXRwdXRzOgorCisqICAgYENNRF9QUk9QX1ZBVUVfR0VUYDogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBpcworICAgIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLgorKiAgIGBDTURfUFJPUF9WQUxVRV9TRVRgOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGRldGVybWluZXMKKyAgICB0aGUgbmV3IGxvZ2ljIGxldmVsIG9mIHRoZSBvdXRwdXQuIElmIHRoaXMgcGluIGlzIGNvbmZpZ3VyZWQgYXMgYW4KKyAgICBvcGVuLWRyYWluLCBzZXR0aW5nIHRoZSBhc3NvY2lhdGVkIGJpdCB0byAxIHdpbGwgY2F1c2UgdGhlIHBpbiB0bworICAgIGVudGVyIGEgSGktWiBzdGF0ZS4KKworRm9yIEdQSU9zIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWVkIGluIGBQUk9QX0dQSU9fQ09ORklHYDoKKworKiAgIGBDTURfUFJPUF9WQVVFX0dFVGA6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMKKyAgICBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4KKyogICBgQ01EX1BST1BfVkFMVUVfU0VUYDogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBNVVNUIGJlCisgICAgaWdub3JlZCBieSB0aGUgTkNQLgorCitXaGVuIHdyaXRpbmcsIHVuc3BlY2lmaWVkIGJpdHMgYXJlIGFzc3VtZWQgdG8gYmUgemVyby4KKworIyMjIFBST1AgNDA5OTogUFJPUFxfR1BJT1xfU1RBVEVcX1NFVCAjIyMKKworKiAgIFR5cGU6IFdyaXRlLW9ubHkKKworQWxsb3dzIGZvciB0aGUgc3RhdGUgb2YgdmFyaW91cyBvdXRwdXQgR1BJT3MgdG8gYmUgc2V0IHdpdGhvdXQKK2FmZmVjdGluZyBvdGhlciBHUElPIHN0YXRlcy4gQ29udGFpbnMgYSBiaXQgZmllbGQgaWRlbnRpZnlpbmcgdGhlCitvdXRwdXQgR1BJT3MgdGhhdCBzaG91bGQgaGF2ZSB0aGVpciBzdGF0ZSBzZXQgdG8gMS4KKworV2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uIFRoZSB2YWx1ZSBvZgorYW55IGJpdHMgZm9yIEdQSU9zIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWVkIGluIGBQUk9QX0dQSU9fQ09ORklHYCBNVVNUCitiZSBpZ25vcmVkLgorCisjIyMgUFJPUCA0MTAwOiBQUk9QXF9HUElPXF9TVEFURVxfQ0xFQVIgIyMjCisKKyogICBUeXBlOiBXcml0ZS1vbmx5CisKK0FsbG93cyBmb3IgdGhlIHN0YXRlIG9mIHZhcmlvdXMgb3V0cHV0IEdQSU9zIHRvIGJlIGNsZWFyZWQgd2l0aG91dAorYWZmZWN0aW5nIG90aGVyIEdQSU8gc3RhdGVzLiBDb250YWlucyBhIGJpdCBmaWVsZCBpZGVudGlmeWluZyB0aGUKK291dHB1dCBHUElPcyB0aGF0IHNob3VsZCBoYXZlIHRoZWlyIHN0YXRlIGNsZWFyZWQgdG8gMC4KKworV2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uIFRoZSB2YWx1ZSBvZgorYW55IGJpdHMgZm9yIEdQSU9zIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWVkIGluIGBQUk9QX0dQSU9fQ09ORklHYCBNVVNUCitiZSBpZ25vcmVkLgpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZC5tZCBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLWhvc3QtYnVmZmVyLW9mZmxvYWQubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1ZGZlYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLWhvc3QtYnVmZmVyLW9mZmxvYWQubWQKQEAgLTAsMCArMSw5NSBAQAorIyBGZWF0dXJlOiBIb3N0IEJ1ZmZlciBPZmZsb2FkCisKK1RoZSBtZW1vcnkgb24gYW4gTkNQIG1heSBiZSBtdWNoIG1vcmUgbGltaXRlZCB0aGFuIHRoZSBtZW1vcnkgb24KK3RoZSBob3N0IHByb2Nlc3Nvci4gSW4gc3VjaCBzaXR1YXRpb25zLCBpdCBpcyBzb21ldGltZXMgdXNlZnVsCitmb3IgdGhlIE5DUCB0byBvZmZsb2FkIGJ1ZmZlcnMgdG8gdGhlIGhvc3QgcHJvY2Vzc29yIHRlbXBvcmFyaWx5CitzbyB0aGF0IGl0IGNhbiBwZXJmb3JtIG90aGVyIG9wZXJhdGlvbnMuCisKK0hvc3QgYnVmZmVyIG9mZmxvYWQgaXMgYW4gb3B0aW9uYWwgTkNQIGNhcGFiaWxpdHkgdGhhdCwgd2hlbgorcHJlc2VudCwgYWxsb3dzIHRoZSBOQ1AgdG8gc3RvcmUgZGF0YSBidWZmZXJzIG9uIHRoZSBob3N0IHByb2Nlc3NvcgordGhhdCBjYW4gYmUgcmVjYWxsZWQgYXQgYSBsYXRlciB0aW1lLgorCitUaGUgcHJlc2VuY2Ugb2YgdGhpcyBmZWF0dXJlIGNhbiBiZSBkZXRlY3RlZCBieSB0aGUgaG9zdCBieQorY2hlY2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgYENBUF9IQk9gCitjYXBhYmlsaXR5IGluIGBQUk9QX0NBUFNgLgorCisjIyBDb21tYW5kcworCisjIyMgQ01EIDEyOiAoTkNQLT5Ib3N0KSBDTURfSEJPX09GRkxPQUQKKworKiBBcmd1bWVudC1FbmNvZGluZzogYExzY0RgCisgICAgKiBgT2ZmbG9hZElkYDogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyCisgICAgKiBgRXhwaXJhdGlvbmA6IEluIHNlY29uZHMtZnJvbS1ub3cKKyAgICAqIGBQcmlvcml0eWA6IENyaXRpY2FsLCBIaWdoLCBNZWRpdW0sIExvdworICAgICogYERhdGFgOiBEYXRhIHRvIG9mZmxvYWQKKworIyMjIENNRCAxMzogKE5DUC0+SG9zdCkgQ01EX0hCT19SRUNMQUlNCisgKiAgQXJndW1lbnQtRW5jb2Rpbmc6IGBMYmAKKyAgICAgKiAgYE9mZmxvYWRJZGA6IDMyLWJpdCB1bmlxdWUgYmxvY2sgaWRlbnRpZmllcgorICAgICAqICBgS2VlcEFmdGVyUmVjbGFpbWA6IElmIG5vdCBzZXQgdG8gdHJ1ZSwgdGhlIGJsb2NrIHdpbGwgYmUKKyAgICAgICAgZHJvcHBlZCBieSB0aGUgaG9zdCBhZnRlciBpdCBpcyBzZW50IHRvIHRoZSBOQ1AuCisKKyMjIyBDTUQgMTQ6IChOQ1AtPkhvc3QpIENNRF9IQk9fRFJPUAorCisqIEFyZ3VtZW50LUVuY29kaW5nOiBgTGAKKyAgICAqIGBPZmZsb2FkSWRgOiAzMi1iaXQgdW5pcXVlIGJsb2NrIGlkZW50aWZpZXIKKworIyMjIENNRCAxNTogKEhvc3QtPk5DUCkgQ01EX0hCT19PRkZMT0FERUQKKworKiBBcmd1bWVudC1FbmNvZGluZzogYExpYAorICAgICogYE9mZmxvYWRJZGA6IDMyLWJpdCB1bmlxdWUgYmxvY2sgaWRlbnRpZmllcgorICAgICogYFN0YXR1c2A6IFN0YXR1cyBjb2RlIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisKKyMjIyBDTUQgMTY6IChIb3N0LT5OQ1ApIENNRF9IQk9fUkVDTEFJTUVECisKKyogQXJndW1lbnQtRW5jb2Rpbmc6IGBMaURgCisgICAgKiBgT2ZmbG9hZElkYDogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyCisgICAgKiBgU3RhdHVzYDogU3RhdHVzIGNvZGUgZm9yIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAgICAqIGBEYXRhYDogRGF0YSB0aGF0IHdhcyBwcmV2aW91c2x5IG9mZmxvYWRlZCAoaWYgYW55KQorCisjIyMgQ01EIDE3OiAoSG9zdC0+TkNQKSBDTURfSEJPX0RST1BQRUQKKworKiBBcmd1bWVudC1FbmNvZGluZzogYExpYAorICAgICogYE9mZmxvYWRJZGA6IDMyLWJpdCB1bmlxdWUgYmxvY2sgaWRlbnRpZmllcgorICAgICogYFN0YXR1c2A6IFN0YXR1cyBjb2RlIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisKKyMjIFByb3BlcnRpZXMKKworIyMjIFBST1AgMTA6IFBST1BfSEJPX01FTV9NQVggeyNwcm9wLWhiby1tZW0tbWF4fQorCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgTGAKKworT2N0ZXRzOiB8ICAgICAgIDQKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgYFBST1BfSEJPX01FTV9NQVhgCisKK0Rlc2NyaWJlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCBmcm9tIHRoZSBOQ1AgdG8KK3RoZSBob3N0LiBEZWZhdWx0IHZhbHVlIGlzIHplcm8sIHNvIHRoaXMgcHJvcGVydHkgbXVzdCBiZSBzZXQgYnkgdGhlCitob3N0IHRvIGEgbm9uLXplcm8gdmFsdWUgYmVmb3JlIHRoZSBOQ1Agd2lsbCBiZWdpbiBvZmZsb2FkaW5nIGJsb2Nrcy4KKworVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgorCitUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBgQ0FQX0hCT2AKK2NhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiBgUFJPUF9DQVBTYC4KKworIyMjIFBST1AgMTE6IFBST1BfSEJPX0JMT0NLX01BWCAgeyNwcm9wLWhiby1ibG9jay1tYXh9CisKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBTYAorCitPY3RldHM6IHwgICAgICAgMgorLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBgUFJPUF9IQk9fQkxPQ0tfTUFYYAorCitEZXNjcmliZXMgdGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBtYXkgYmUgb2ZmbG9hZGVkIGZyb20gdGhlIE5DUCB0bwordGhlIGhvc3QuIERlZmF1bHQgdmFsdWUgaXMgMzIuIFNldHRpbmcgdGhpcyB2YWx1ZSB0byB6ZXJvIHdpbGwgY2F1c2UKK2hvc3QgYmxvY2sgb2ZmbG9hZCB0byBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4KKworVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyLgorCitUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBgQ0FQX0hCT2AKK2NhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiBgUFJPUF9DQVBTYC4KKworCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLWphbS1kZXRlY3QubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZmVhdHVyZS1qYW0tZGV0ZWN0Lm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NmE2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZmVhdHVyZS1qYW0tZGV0ZWN0Lm1kCkBAIC0wLDAgKzEsMTAwIEBACisjIEZlYXR1cmU6IEphbSBEZXRlY3Rpb24geyNmZWF0dXJlLWphbS1kZXRlY3R9CisKK0phbW1pbmcgZGV0ZWN0aW9uIGlzIGEgZmVhdHVyZSB0aGF0IGFsbG93cyB0aGUgTkNQIHRvIHJlcG9ydCB3aGVuIGl0CitkZXRlY3RzIGhpZ2ggbGV2ZWxzIG9mIGludGVyZmVyZW5jZSB0aGF0IGFyZSBjaGFyYWN0ZXJpc3RpYyBvZiBpbnRlbnRpb25hbAorc2lnbmFsIGphbW1pbmcuCisKK1RoZSBwcmVzZW5jZSBvZiB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVjdGVkIGJ5IGNoZWNraW5nIGZvciB0aGUKK3ByZXNlbmNlIG9mIHRoZSBgQ0FQX0pBTV9ERVRFQ1RgICh2YWx1ZSA2KSBjYXBhYmlsaXR5IGluIGBQUk9QX0NBUFNgLgorCisjIyBQcm9wZXJ0aWVzCisKKyMjIyBQUk9QIDQ2MDg6IFBST1BfSkFNX0RFVEVDVF9FTkFCTEUgeyNwcm9wLWphbS1kZXRlY3QtZW5hYmxlfQorCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgYmAKKyogRGVmYXVsdCBWYWx1ZTogZmFsc2UKKyogUkVRVUlSRUQgZm9yIGBDQVBfSkFNX0RFVEVDVGAKKworT2N0ZXRzOiB8ICAgICAgIDEKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgYFBST1BfSkFNX0RFVEVDVF9FTkFCTEVgCisKK0luZGljYXRlcyBpZiBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBTZXQgdG8gdHJ1ZQordG8gZW5hYmxlIGphbW1pbmcgZGV0ZWN0aW9uLgorCitUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBgQ0FQX0pBTV9ERVRFQ1RgCitjYXBhYmlsaXR5IGlzIHByZXNlbnQgaW4gYFBST1BfQ0FQU2AuCisKKyMjIyBQUk9QIDQ2MDk6IFBST1BfSkFNX0RFVEVDVEVEIHsjcHJvcC1qYW0tZGV0ZWN0ZWR9CisKKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYGJgCisqIFJFUVVJUkVEIGZvciBgQ0FQX0pBTV9ERVRFQ1RgCisKK09jdGV0czogfCAgICAgICAxCistLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IGBQUk9QX0pBTV9ERVRFQ1RFRGAKKworU2V0IHRvIHRydWUgaWYgcmFkaW8gamFtbWluZyBpcyBkZXRlY3RlZC4gU2V0IHRvIGZhbHNlIG90aGVyd2lzZS4KKworV2hlbiBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkLCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZSBvZiB0aGlzCitwcm9wZXJ0eSBhcmUgZW1pdHRlZCBhc3luY2hyb25vdXNseSB2aWEgYENNRF9QUk9QX1ZBTFVFX0lTYC4KKworVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgYENBUF9KQU1fREVURUNUYAorY2FwYWJpbGl0eSBpcyBwcmVzZW50IGluIGBQUk9QX0NBUFNgLgorCisjIyMgUFJPUCA0NjEwOiBQUk9QX0pBTV9ERVRFQ1RfUlNTSV9USFJFU0hPTEQKKworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYGNgCisqIFVuaXRzOiBkQm0KKyogRGVmYXVsdCBWYWx1ZTogSW1wbGVtZW50YXRpb24tc3BlY2lmaWMKKyogUkVDT01NRU5ERUQgZm9yIGBDQVBfSkFNX0RFVEVDVGAKKworVGhpcyBwYXJhbWV0ZXIgZGVzY3JpYmVzIHRoZSB0aHJlc2hvbGQgUlNTSSBsZXZlbCAobWVhc3VyZWQgaW4KK2RCbSkgYWJvdmUgd2hpY2ggdGhlIGphbW1pbmcgZGV0ZWN0aW9uIHdpbGwgY29uc2lkZXIgdGhlCitjaGFubmVsIGJsb2NrZWQuCisKKyMjIyBQUk9QIDQ2MTE6IFBST1BfSkFNX0RFVEVDVF9XSU5ET1cKKworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYGNgCisqIFVuaXRzOiBTZWNvbmRzICgxLTY0KQorKiBEZWZhdWx0IFZhbHVlOiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworKiBSRUNPTU1FTkRFRCBmb3IgYENBUF9KQU1fREVURUNUYAorCitUaGlzIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIHdpbmRvdyBwZXJpb2QgZm9yIHNpZ25hbCBqYW1taW5nCitkZXRlY3Rpb24uCisKKyMjIyBQUk9QIDQ2MTI6IFBST1BfSkFNX0RFVEVDVF9CVVNZCisKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBpYAorKiBVbml0czogU2Vjb25kcyAoMS02NCkKKyogRGVmYXVsdCBWYWx1ZTogSW1wbGVtZW50YXRpb24tc3BlY2lmaWMKKyogUkVDT01NRU5ERUQgZm9yIGBDQVBfSkFNX0RFVEVDVGAKKworVGhpcyBwYXJhbWV0ZXIgZGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgYWdncmVnYXRlIHNlY29uZHMgd2l0aGluCit0aGUgZGV0ZWN0aW9uIHdpbmRvdyB3aGVyZSB0aGUgUlNTSSBtdXN0IGJlIGFib3ZlCitgUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEYCB0byB0cmlnZ2VyIGRldGVjdGlvbi4KKworVGhlIGJlaGF2aW9yIG9mIHRoZSBqYW1taW5nIGRldGVjdGlvbiBmZWF0dXJlIHdoZW4gYFBST1BfSkFNX0RFVEVDVF9CVVNZYAoraXMgbGFyZ2VyIHRoYW4gYFBST1BfSkFNX0RFVEVDVF9XSU5ET1dgIGlzIHVuZGVmaW5lZC4KKworIyMjIFBST1AgNDYxMzogUFJPUF9KQU1fREVURUNUX0hJU1RPUllfQklUTUFQCisKKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYExMYAorKiBEZWZhdWx0IFZhbHVlOiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworKiBSRUNPTU1FTkRFRCBmb3IgYENBUF9KQU1fREVURUNUYAorCitUaGlzIHZhbHVlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgc3RhdGUgb2YgamFtbWluZyBkZXRlY3Rpb24KK21vZHVsZSBmb3IgbW9uaXRvcmluZy9kZWJ1Z2dpbmcgcHVycG9zZS4gSXQgcmV0dXJucyBhIDY0LWJpdCB2YWx1ZSB3aGVyZQorZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lIHNlY29uZCBpbnRlcnZhbCBzdGFydGluZyB3aXRoIGJpdCAwIGZvciB0aGUKK21vc3QgcmVjZW50IGludGVydmFsIGFuZCBiaXQgNjMgZm9yIHRoZSBvbGRlc3QgaW50ZXJ2YWxzICg2MyBzZWMgZWFybGllcikuCitUaGUgYml0IGlzIHNldCB0byAxIGlmIHRoZSBqYW1taW5nIGRldGVjdGlvbiBtb2R1bGUgb2JzZXJ2ZWQvZGV0ZWN0ZWQKK2hpZ2ggc2lnbmFsIGxldmVsIGR1cmluZyB0aGUgY29ycmVzcG9uZGluZyBvbmUgc2Vjb25kIGludGVydmFsLgorVGhlIHZhbHVlIGlzIHJlYWQtb25seSBhbmQgaXMgZW5jb2RlZCBhcyB0d28gYExgICh1aW50MzIpIHZhbHVlcyBpbgorbGl0dGxlLWVuZGlhbiBmb3JtYXQgKGZpcnN0IGBMYCAodWludDMyKSB2YWx1ZSBnaXZlcyB0aGUgbG93ZXIgYml0cworY29ycmVzcG9uZGluZyB0byBtb3JlIHJlY2VudCBoaXN0b3J5KS4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLW5ldHdvcmstc2F2ZS5tZCBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLW5ldHdvcmstc2F2ZS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjU1YWFjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWZlYXR1cmUtbmV0d29yay1zYXZlLm1kCkBAIC0wLDAgKzEsNzQgQEAKKyMgRmVhdHVyZTogTmV0d29yayBTYXZlCisKK1RoZSBuZXR3b3JrIHNhdmUvcmVjYWxsIGZlYXR1cmUgaXMgYW4gb3B0aW9uYWwgTkNQIGNhcGFiaWxpdHkgdGhhdCwgd2hlbgorcHJlc2VudCwgYWxsb3dzIHRoZSBob3N0IHRvIHNhdmUgYW5kIHJlY2FsbCBuZXR3b3JrIGNyZWRlbnRpYWxzIGFuZAorc3RhdGUgdG8gYW5kIGZyb20gbm9udm9sYXRpbGUgc3RvcmFnZS4KKworVGhlIHByZXNlbmNlIG9mIHRoZSBzYXZlL3JlY2FsbCBmZWF0dXJlIGNhbiBiZSBkZXRlY3RlZCBieSBjaGVja2luZyBmb3IKK3RoZSBwcmVzZW5jZSBvZiB0aGUgYENBUF9ORVRfU0FWRWAgY2FwYWJpbGl0eSBpbiBgUFJPUF9DQVBTYC4KKworTmV0d29yayBjbGVhciBmZWF0dXJlIGFsbG93cyBob3N0IHRvIGVyYXNlIGFsbCBuZXR3b3JrIGNyZWRlbnRpYWxzIGFuZAorc3RhdGUgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorCisjIyBDb21tYW5kcworCisjIyMgQ01EIDk6IChIb3N0LT5OQ1ApIENNRF9ORVRfU0FWRQorCitPY3RldHM6IHwgICAgMSAgIHwgICAgICAxCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEhFQURFUiB8IENNRF9ORVRfU0FWRQorCitTYXZlIG5ldHdvcmsgc3RhdGUgY29tbWFuZC4gU2F2ZXMgYW55IGN1cnJlbnQgbmV0d29yayBjcmVkZW50aWFscyBhbmQKK3N0YXRlIG5lY2Vzc2FyeSB0byByZWNvbm5lY3QgdG8gdGhlIGN1cnJlbnQgbmV0d29yayB0byBub24tdm9sYXRpbGUKK21lbW9yeS4KKworVGhpcyBvcGVyYXRpb24gYWZmZWN0cyBub24tdm9sYXRpbGUgbWVtb3J5IG9ubHkuIFRoZSBjdXJyZW50IG5ldHdvcmsKK2luZm9ybWF0aW9uIHN0b3JlZCBpbiB2b2xhdGlsZSBtZW1vcnkgaXMgdW5hZmZlY3RlZC4KKworVGhlIHJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCBpcyBhbHdheXMgYSBgQ01EX1BST1BfVkFMVUVfSVNgIGZvcgorYFBST1BfTEFTVF9TVEFUVVNgLCBpbmRpY2F0aW5nIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKworVGhpcyBjb21tYW5kIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBgQ0FQX05FVF9TQVZFYCBjYXBhYmlsaXR5IGlzCitzZXQuCisKKyMjIyBDTUQgMTA6IChIb3N0LT5OQ1ApIENNRF9ORVRfQ0xFQVIKKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAgMQorLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX05FVF9DTEVBUgorCitDbGVhciBzYXZlZCBuZXR3b3JrIHNldHRpbmdzIGNvbW1hbmQuIEVyYXNlcyBhbGwgbmV0d29yayBjcmVkZW50aWFscworYW5kIHN0YXRlIGZyb20gbm9uLXZvbGF0aWxlIG1lbW9yeS4gVGhlIGVyYXNlZCBzZXR0aW5ncyBpbmNsdWRlIGFueSBkYXRhCitzYXZlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBuZXR3b3JrIHN0YWNrIGZpcm13YXJlIGFuZC9vciBkYXRhIHNhdmVkIGJ5CitgQ01EX05FVF9TQVZFYCBvcGVyYXRpb24uCisKK1RoaXMgb3BlcmF0aW9uIGFmZmVjdHMgbm9uLXZvbGF0aWxlIG1lbW9yeSBvbmx5LiBUaGUgY3VycmVudCBuZXR3b3JrCitpbmZvcm1hdGlvbiBzdG9yZWQgaW4gdm9sYXRpbGUgbWVtb3J5IGlzIHVuYWZmZWN0ZWQuCisKK1RoZSByZXNwb25zZSB0byB0aGlzIGNvbW1hbmQgaXMgYWx3YXlzIGEgYENNRF9QUk9QX1ZBTFVFX0lTYCBmb3IKK2BQUk9QX0xBU1RfU1RBVFVTYCwgaW5kaWNhdGluZyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisKK1RoaXMgY29tbWFuZCBpcyBhbHdheXMgYXZhaWxhYmxlIGluZGVwZW5kZW50IG9mIHRoZSB2YWx1ZSBvZgorYENBUF9ORVRfU0FWRWAgY2FwYWJpbGl0eS4KKworCisjIyMgQ01EIDExOiAoSG9zdC0+TkNQKSBDTURfTkVUX1JFQ0FMTAorCitPY3RldHM6IHwgICAgMSAgIHwgICAgICAxCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX05FVF9SRUNBTEwKKworUmVjYWxsIHNhdmVkIG5ldHdvcmsgc3RhdGUgY29tbWFuZC4gUmVjYWxscyBhbnkgcHJldmlvdXNseSBzYXZlZAorbmV0d29yayBjcmVkZW50aWFscyBhbmQgc3RhdGUgcHJldmlvdXNseSBzdG9yZWQgYnkgYENNRF9ORVRfU0FWRWAgZnJvbQorbm9uLXZvbGF0aWxlIG1lbW9yeS4KKworVGhpcyBjb21tYW5kIHdpbGwgdHlwaWNhbGx5IGdlbmVyYXRlZCBzZXZlcmFsIHVuc29saWNpdGVkIHByb3BlcnR5Cit1cGRhdGVzIGFzIHRoZSBuZXR3b3JrIHN0YXRlIGlzIGxvYWRlZC4gQXQgdGhlIGNvbmNsdXNpb24gb2YgbG9hZGluZywKK3RoZSBhdXRob3JpdGF0aXZlIHJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCBpcyBhbHdheXMgYQorYENNRF9QUk9QX1ZBTFVFX0lTYCBmb3IgYFBST1BfTEFTVF9TVEFUVVNgLCBpbmRpY2F0aW5nIHRoZSByZXN1bHQgb2YKK3RoZSBvcGVyYXRpb24uCisKK1RoaXMgY29tbWFuZCBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgYENBUF9ORVRfU0FWRWAgY2FwYWJpbGl0eSBpcworc2V0LgorCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLXRybmcubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZmVhdHVyZS10cm5nLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTBiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZmVhdHVyZS10cm5nLm1kCkBAIC0wLDAgKzEsNzcgQEAKKyMgRmVhdHVyZTogVHJ1ZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24geyNmZWF0dXJlLXRybmd9CisKK1RoaXMgZmVhdHVyZSBhbGxvd3MgdGhlIGhvc3QgdG8gaGF2ZSBhY2Nlc3MgdG8gYW55IHN0cm9uZyBoYXJkd2FyZQorcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgdGhhdCBtaWdodCBiZSBwcmVzZW50IG9uIHRoZSBOQ1AsIGZvciB0aGluZ3MKK2xpa2Uga2V5IGdlbmVyYXRpb24gb3Igc2VlZGluZyBQUk5Hcy4KKworU3VwcG9ydCBmb3IgdGhpcyBmZWF0dXJlIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBgQ0FQX1RSTkdgLgorCitOb3RlIHdlbGwgdGhhdCBpbXBsZW1lbnRpbmcgYSBjcnlwdG9ncmFwaGljYWxseS1zdHJvbmcgc29mdHdhcmUtYmFzZWQgdHJ1ZQorcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKHRoYXQgaXMgaW1wZXJ2aW91cyB0byB0aGluZ3MgbGlrZSB0ZW1wZXJhdHVyZQorY2hhbmdlcywgbWFudWZhY3R1cmluZyBkaWZmZXJlbmNlcyBhY3Jvc3MgZGV2aWNlcywgb3IgdW5leHBlY3RlZCBvdXRwdXQKK2NvcnJlbGF0aW9ucykgaXMgbm9uLXRyaXZpYWwgd2l0aG91dCBhIHdlbGwtZGVzaWduZWQsIGRlZGljYXRlZCBoYXJkd2FyZQorcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuIEltcGxlbWVudG9ycyB3aG8gaGF2ZSBsaXR0bGUgb3Igbm8gZXhwZXJpZW5jZSBpbgordGhpcyBhcmVhIGFyZSBlbmNvdXJhZ2VkIHRvIG5vdCBhZHZlcnRpc2UgdGhpcyBjYXBhYmlsaXR5LgorCisjIyBQcm9wZXJ0aWVzICMjCisKKyMjIyBQUk9QIDQxMDE6IFBST1BfVFJOR18zMiAjIyMKKworKiAgIEFyZ3VtZW50LUVuY29kaW5nOiBgTGAKKyogICBUeXBlOiBSZWFkLU9ubHkKKworRmV0Y2hpbmcgdGhpcyBwcm9wZXJ0eSByZXR1cm5zIGEgc3Ryb25nIHJhbmRvbSAzMi1iaXQgaW50ZWdlciB0aGF0IGlzIHN1aXRhYmxlCitmb3IgdXNlIGFzIGEgUFJORyBzZWVkIG9yIGZvciBjcnlwdG9ncmFwaGljIHVzZS4KKworV2hpbGUgdGhlIGV4YWN0IG1lY2hhbmlzbSBiZWhpbmQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoaXMgdmFsdWUgaXMKK2ltcGxlbWVudGF0aW9uLXNwZWNpZmljLCB0aGUgaW1wbGVtZW50YXRpb24gbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcKK3JlcXVpcmVtZW50czoKKworKiBEYXRhIHJlcHJlc2VudGluZyBhdCBsZWFzdCAzMiBiaXRzIG9mIGZyZXNoIGVudHJvcHkgKGV4dHJhY3RlZCBmcm9tIHRoZQorICBwcmltYXJ5IGVudHJvcHkgc291cmNlKSBNVVNUIGJlIGNvbnN1bWVkIGJ5IHRoZSBjYWxjdWxhdGlvbiBvZiBlYWNoIHF1ZXJ5LgorKiBFYWNoIG9mIHRoZSAzMiBiaXRzIHJldHVybmVkIE1VU1QgYmUgZnJlZSBvZiBiaWFzIGFuZCBoYXZlIG5vIHN0YXRpc3RpY2FsCisgIGNvcnJlbGF0aW9uIHRvIGFueSBwYXJ0IG9mIHRoZSByYXcgZGF0YSB1c2VkIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYW55CisgIHF1ZXJ5LgorCitTdXBwb3J0IGZvciB0aGlzIHByb3BlcnR5IGlzIFJFUVVJUkVEIGlmIGBDQVBfVFJOR2AgaXMgaW5jbHVkZWQgaW4gdGhlCitkZXZpY2UgY2FwYWJpbGl0aWVzLgorCisjIyMgUFJPUCA0MTAyOiBQUk9QX1RSTkdfMTI4ICMjIworCisqICAgQXJndW1lbnQtRW5jb2Rpbmc6IGBEYAorKiAgIFR5cGU6IFJlYWQtT25seQorCitGZXRjaGluZyB0aGlzIHByb3BlcnR5IHJldHVybnMgMTYgYnl0ZXMgb2Ygc3Ryb25nIHJhbmRvbSBkYXRhIHN1aXRhYmxlIGZvcgorZGlyZWN0IGNyeXB0b2dyYXBoaWMgdXNlIHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nKEZvciBleGFtcGxlLCBhcyBhbgorQUVTIGtleSkuCisKK1doaWxlIHRoZSBleGFjdCBtZWNoYW5pc20gYmVoaW5kIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGlzIHZhbHVlIGlzCitpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYywgdGhlIGltcGxlbWVudGF0aW9uIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nCityZXF1aXJlbWVudHM6CisKKyogRGF0YSByZXByZXNlbnRpbmcgYXQgbGVhc3QgMTI4IGJpdHMgb2YgZnJlc2ggZW50cm9weSAoZXh0cmFjdGVkIGZyb20gdGhlCisgIHByaW1hcnkgZW50cm9weSBzb3VyY2UpIE1VU1QgYmUgY29uc3VtZWQgYnkgdGhlIGNhbGN1bGF0aW9uIG9mIGVhY2ggcXVlcnkuCisqIEVhY2ggb2YgdGhlIDEyOCBiaXRzIHJldHVybmVkIE1VU1QgYmUgZnJlZSBvZiBiaWFzIGFuZCBoYXZlIG5vIHN0YXRpc3RpY2FsCisgIGNvcnJlbGF0aW9uIHRvIGFueSBwYXJ0IG9mIHRoZSByYXcgZGF0YSB1c2VkIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYW55CisgIHF1ZXJ5LgorCitTdXBwb3J0IGZvciB0aGlzIHByb3BlcnR5IGlzIFJFUVVJUkVEIGlmIGBDQVBfVFJOR2AgaXMgaW5jbHVkZWQgaW4gdGhlCitkZXZpY2UgY2FwYWJpbGl0aWVzLgorCisjIyMgUFJPUCA0MTAzOiBQUk9QX1RSTkdfUkFXXzMyICMjIworCisqICAgQXJndW1lbnQtRW5jb2Rpbmc6IGBEYAorKiAgIFR5cGU6IFJlYWQtT25seQorCitUaGlzIHByb3BlcnR5IGlzIHByaW1hcmlseSB1c2VkIHRvIGRpYWdub3NlIGFuZCBkZWJ1ZyB0aGUgYmVoYXZpb3IKK29mIHRoZSBlbnRyb3B5IHNvdXJjZSB1c2VkIGZvciBzdHJvbmcgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLgorCitXaGVuIHF1ZXJpZWQsIHJldHVybnMgdGhlIHJhdyBvdXRwdXQgZnJvbSB0aGUgZW50cm9weSBzb3VyY2UgdXNlZCB0bworZ2VuZXJhdGUgYFBST1BfVFJOR18zMmAsIHByaW9yIHRvIGFueSByZWR1Y3Rpb24vd2hpdGVuaW5nIGFuZC9vciBtaXhpbmcKK3dpdGggcHJpb3Igc3RhdGUuCisKK1RoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBhbmQgc2hvdWxkIGJlCitleHBlY3RlZCB0byBiZSBub24tZGV0ZXJtaW5pc3RpYy4KKworU3VwcG9ydCBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBSRUNPTU1FTkRFRCBpZiBgQ0FQX1RSTkdgIGlzIGluY2x1ZGVkIGluIHRoZQorZGV2aWNlIGNhcGFiaWxpdGllcy4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mcmFtZS1mb3JtYXQubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZnJhbWUtZm9ybWF0Lm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZjFhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZnJhbWUtZm9ybWF0Lm1kCkBAIC0wLDAgKzEsODMgQEAKKyMgRnJhbWUgRm9ybWF0ICMjCisKK0EgZnJhbWUgaXMgZGVmaW5lZCBzaW1wbHkgYXMgdGhlIGNvbmNhdGVuYXRpb24gb2YKKworICogIEEgaGVhZGVyIGJ5dGUKKyAqICBBIGNvbW1hbmQgKHVwIHRvIHRocmVlIGJ5dGVzLCBzZWUgKCNwYWNrZWQtdW5zaWduZWQtaW50ZWdlcikgZm9yIGZvcm1hdCkKKyAqICBBbiBvcHRpb25hbCBjb21tYW5kIHBheWxvYWQKKworT2N0ZXRzOiB8ICAgIDEgICB8IDEtMyB8ICAgICpuKgorLS0tLS0tLS18LS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEhFQURFUiB8IENNRCB8IENNRF9QQVlMT0FECisKKworIyMgSGVhZGVyIEZvcm1hdCAjIyMKKworVGhlIGhlYWRlciBieXRlIGlzIGJyb2tlbiBkb3duIGFzIGZvbGxvd3M6CisKKyAgICAgIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisgICAgfCAgRkxHICB8ICBOTEkgIHwgICAgICBUSUQgICAgICB8CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisKKzwhLS0gUlEgLS0gRXZlbnR1YWxseSwgd2hlbiBodHRwczovL2dpdGh1Yi5jb20vbWlla2cvbW1hcmsvaXNzdWVzLzk1CitpcyBhZGRyZXNzZWQsIHRoZSBhYm92ZSB0YWJsZSBzaG91bGQgYmUgc3dhcHBlZCBvdXQgd2l0aCB0aGlzOgorCit8IDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwKK3wtLS18LS0tfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfAorfCAgRkxHIHx8ICBOTEkgfHwgICAgICBUSUQgICB8fHx8CistLT4KKworIyMjIEZMRzogRmxhZworCitUaGUgZmxhZyBmaWVsZCBvZiB0aGUgaGVhZGVyIGJ5dGUgKGBGTEdgKSBpcyBhbHdheXMgc2V0IHRvIHRoZSB2YWx1ZQordHdvIChvciBgMTBgIGluIGJpbmFyeSkuIEFueSBmcmFtZSByZWNlaXZlZCB3aXRoIHRoZXNlIGJpdHMgc2V0IHRvCithbnkgb3RoZXIgdmFsdWUgZWxzZSBNVVNUIE5PVCBiZSBjb25zaWRlcmVkIGEgU3BpbmVsIGZyYW1lLgorCitUaGlzIGNvbnZlbnRpb24gYWxsb3dzIFNwaW5lbCB0byBiZSBsaW5lIGNvbXBhdGlibGUgd2l0aCBCVExFIEhDSS4gQnkKK2RlZmluaW5nIHRoZSBmaXJzdCB0d28gYml0IGluIHRoaXMgd2F5IHdlIGNhbiBkaXNhbWJpZ3VhdGUgYmV0d2VlbgorU3BpbmVsIGZyYW1lcyBhbmQgSENJIGZyYW1lcyAod2hpY2ggYWx3YXlzIHN0YXJ0IHdpdGggZWl0aGVyIGAweDAxYAorb3IgYDB4MDRgKSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZyYW1pbmcgb3ZlcmhlYWQuCisKKyMjIyBOTEk6IE5ldHdvcmsgTGluayBJZGVudGlmaWVyCisKK1RoZSBOZXR3b3JrIExpbmsgSWRlbnRpZmllciAoTkxJKSBpcyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDMsIHdoaWNoIGlzIGFzc29jaWF0ZWQgYnkgdGhlIE9TIHdpdGggb25lIG9mIHVwIHRvIGZvdXIgSVB2NiB6b25lIGluZGljZXMgY29ycmVzcG9uZGluZyB0byBjb25jZXB0dWFsIElQdjYgaW50ZXJmYWNlcyBvbiB0aGUgTkNQLiBUaGlzIGFsbG93cyB0aGUgcHJvdG9jb2wgdG8gc3VwcG9ydCBJUHY2IG5vZGVzIGNvbm5lY3Rpbmcgc2ltdWx0YW5lb3VzbHkgdG8gbW9yZSB0aGFuIG9uZSBJUHY2IG5ldHdvcmsgbGluayB1c2luZyBhIHNpbmdsZSBOQ1AgaW5zdGFuY2UuIFRoZSBmaXJzdCBOZXR3b3JrIExpbmsgSWRlbnRpZmllciAoMCkgTVVTVCByZWZlciB0byBhIGRpc3Rpbmd1aXNoZWQgY29uY2VwdHVhbCBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIE5DUCBmb3IgaXRzIElQdjYgbGluayB0eXBlLiBUaGUgb3RoZXIgdGhyZWUgTmV0d29yayBMaW5rIElkZW50aWZpZXJzICgxLCAyIGFuZCAzKSBNQVkgYmUgZGlzc29jaWF0ZWQgZnJvbSBhbnkgY29uY2VwdHVhbCBpbnRlcmZhY2UuCisKKyMjIyBUSUQ6IFRyYW5zYWN0aW9uIElkZW50aWZpZXIKKworVGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIGhlYWRlciByZXByZXNlbnQgdGhlIFRyYW5zYWN0aW9uCitJZGVudGlmaWVyKFRJRCkuIFRoZSBUSUQgaXMgdXNlZCBmb3IgY29ycmVsYXRpbmcgcmVzcG9uc2VzIHRvIHRoZQorY29tbWFuZHMgd2hpY2ggZ2VuZXJhdGVkIHRoZW0uCisKK1doZW4gYSBjb21tYW5kIGlzIHNlbnQgZnJvbSB0aGUgaG9zdCwgYW55IHJlcGx5IHRvIHRoYXQgY29tbWFuZCBzZW50CitieSB0aGUgTkNQIHdpbGwgdXNlIHRoZSBzYW1lIHZhbHVlIGZvciB0aGUgVElELiBXaGVuIHRoZSBob3N0IHJlY2VpdmVzCithIGZyYW1lIHRoYXQgbWF0Y2hlcyB0aGUgVElEIG9mIHRoZSBjb21tYW5kIGl0IHNlbnQsIGl0IGNhbiBlYXNpbHkKK3JlY29nbml6ZSB0aGF0IGZyYW1lIGFzIHRoZSBhY3R1YWwgcmVzcG9uc2UgdG8gdGhhdCBjb21tYW5kLgorCitUaGUgVElEIHZhbHVlIG9mIHplcm8gKDApIGlzIHVzZWQgZm9yIGNvbW1hbmRzIHRvIHdoaWNoIGEgY29ycmVsYXRlZAorcmVzcG9uc2UgaXMgbm90IGV4cGVjdGVkIG9yIG5lZWRlZCwgc3VjaCBhcyBmb3IgdW5zb2xpY2l0ZWQgdXBkYXRlCitjb21tYW5kcyBzZW50IHRvIHRoZSBob3N0IGZyb20gdGhlIE5DUC4KKworIyMjIENvbW1hbmQgSWRlbnRpZmllciAoQ01EKSAjIyMjCisKK1RoZSBjb21tYW5kIGlkZW50aWZpZXIgaXMgYSAyMS1iaXQgdW5zaWduZWQgaW50ZWdlciBlbmNvZGVkIGluIHVwIHRvCit0aHJlZSBieXRlcyB1c2luZyB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbgorKCNwYWNrZWQtdW5zaWduZWQtaW50ZWdlcikuIFRoaXMgZW5jb2RpbmcgYWxsb3dzIGZvciB1cCB0byAyLDA5NywxNTIgaW5kaXZpZHVhbAorY29tbWFuZHMsIHdpdGggdGhlIGZpcnN0IDEyNyBjb21tYW5kcyByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBieXRlLgorQ29tbWFuZCBpZGVudGlmaWVycyBsYXJnZXIgdGhhbiAyLDA5NywxNTEgYXJlIGV4cGxpY2l0bHkgZm9yYmlkZGVuLgorCitDSUQgUmFuZ2UgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0KKzAgLSA2MyAgICAgICAgICAgICAgICB8IFJlc2VydmVkIGZvciBjb3JlIGNvbW1hbmRzCis2NCAtIDE1LDM1OSAgICAgICAgICAgfCAqVU5BTExPQ0FURUQqCisxNSwzNjAgLSAxNiwzODMgICAgICAgfCBWZW5kb3Itc3BlY2lmaWMKKzE2LDM4NCAtIDEsOTk5LDk5OSAgICB8ICpVTkFMTE9DQVRFRCoKKzIsMDAwLDAwMCAtIDIsMDk3LDE1MSB8IEV4cGVyaW1lbnRhbCB1c2Ugb25seQorCisjIyMgQ29tbWFuZCBQYXlsb2FkIChPcHRpb25hbCkgIyMjIworCitEZXBlbmRpbmcgb24gdGhlIHNlbWFudGljcyBvZiB0aGUgY29tbWFuZCBpbiBxdWVzdGlvbiwgYSBwYXlsb2FkIE1BWQorYmUgaW5jbHVkZWQgaW4gdGhlIGZyYW1lLiBUaGUgZXhhY3QgY29tcG9zaXRpb24gYW5kIGxlbmd0aCBvZiB0aGUKK3BheWxvYWQgaXMgZGVmaW5lZCBieSB0aGUgY29tbWFuZCBpZGVudGlmaWVyLgorCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mcmFtaW5nLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWZyYW1pbmcubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEzNTkzZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mcmFtaW5nLm1kCkBAIC0wLDAgKzEsMjIzIEBACisKKyMgRnJhbWluZyBQcm90b2NvbAorCitTaW5jZSB0aGlzIE5DUCBwcm90b2NvbCBpcyBkZWZpbmVkIGluZGVwZW5kZW50bHkgb2YgdGhlIHBoeXNpY2FsCit0cmFuc3BvcnQgb3IgZnJhbWluZywgYW55IG51bWJlciBvZiB0cmFuc3BvcnRzIGFuZCBmcmFtaW5nIHByb3RvY29scworY291bGQgYmUgdXNlZCBzdWNjZXNzZnVsbHkuIEhvd2V2ZXIsIGluIHRoZSBpbnRlcmVzdHMgb2YgY29tcGF0aWJpbGl0eSwKK3RoaXMgZG9jdW1lbnQgcHJvdmlkZXMgc29tZSByZWNvbW1lbmRhdGlvbnMuCisKKyMjIFVBUlQgUmVjb21tZW5kYXRpb25zICMjIworCitUaGUgcmVjb21tZW5kZWQgZGVmYXVsdCBVQVJUIHNldHRpbmdzIGFyZToKKworKiBCaXQgcmF0ZTogICAgIDExNTIwMAorKiBTdGFydCBiaXRzOiAgIDEKKyogRGF0YSBiaXRzOiAgICA4CisqIFN0b3AgYml0czogICAgMQorKiBQYXJpdHk6ICAgICAgIE5vbmUKKyogRmxvdyBDb250cm9sOiBIYXJkd2FyZQorCitUaGVzZSB2YWx1ZXMgbWF5IGJlIGFkanVzdGVkIGRlcGVuZGluZyBvbiB0aGUgaW5kaXZpZHVhbCBuZWVkcyBvZgordGhlIGFwcGxpY2F0aW9uIG9yIHByb2R1Y3QsIGJ1dCBzb21lIHNvcnQgb2YgZmxvdyBjb250cm9sICoqTVVTVCoqIGJlIHVzZWQuCitIYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgcHJlZmVycmVkIG92ZXIgc29mdHdhcmUgZmxvdyBjb250cm9sLiBJbiB0aGUKK2Fic2VuY2Ugb2YgaGFyZHdhcmUgZmxvdyBjb250cm9sLCBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKFhPTi9YT0ZGKSAqKk1VU1QqKgorYmUgdXNlZCBpbnN0ZWFkLgorCitXZSBhbHNvICoqUkVDT01NRU5EKiogYW4gQXJkdWluby1zdHlsZSBoYXJkd2FyZSByZXNldCwgd2hlcmUgdGhlIERUUgorc2lnbmFsIGlzIGNvdXBsZWQgdG8gdGhlIGBSzIVFzIVTzIVgIHBpbiB0aHJvdWdoIGEgMC4wMcK1RiBjYXBhY2l0b3IuIFRoaXMKK2NhdXNlcyB0aGUgTkNQIHRvIGF1dG9tYXRpY2FsbHkgcmVzZXQgd2hlbmV2ZXIgdGhlIHNlcmlhbCBwb3J0IGlzCitvcGVuZWQuIEF0IHRoZSB2ZXJ5IGxlYXN0IHdlICoqUkVDT01NRU5EKiogZGVkaWNhdGluZyBvbmUgb2YgeW91ciBob3N0CitwaW5zIHRvIGNvbnRyb2xsaW5nIHRoZSBgUsyFRcyFU8yFYCBwaW4gb24gdGhlIE5DUCwgc28gdGhhdCB5b3UgY2FuCitlYXNpbHkgcGVyZm9ybSBhIGhhcmR3YXJlIHJlc2V0IGlmIG5lY2Vzc2FyeS4KKworIyMjIFVBUlQgQml0IFJhdGUgRGV0ZWN0aW9uICMjIworCitXaGVuIHVzaW5nIGEgVUFSVCwgdGhlIGlzc3VlIG9mIGFuIGFwcHJvcHJpYXRlIGJpdCByYXRlIG11c3QgYmUKK2NvbnNpZGVyZWQuIEEgYml0cmF0ZSBvZiAxMTUyMDAgYml0cyBwZXIgc2Vjb25kIGhhcyBiZWNvbWUgYSBkZWZhY3RvCitzdGFuZGFyZCBiYXVkIHJhdGUgZm9yIG1hbnkgc2VyaWFsIHBlcmlwaGVyYWxzLiBUaGlzIHJhdGUsIGhvd2V2ZXIsCitpcyBzbG93ZXIgdGhhbiB0aGUgdGhlb3JldGljYWwgbWF4aW11bSBiaXRyYXRlIG9mIHRoZSA4MDIuMTUuNCAyLjRHSHoKK1BIWSAoMjUwa2JpdCkuIEluIG1vc3QgY2lyY3Vtc3RhbmNlcyB0aGlzIG1pc21hdGNoIGlzIG5vdCBzaWduaWZpY2FudAorYmVjYXVzZSB0aGUgb3ZlcmFsbCBiaXRyYXRlIHdpbGwgYmUgbXVjaCBsb3dlciB0aGFuIGVpdGhlciBvZiB0aGVzZQorcmF0ZXMsIGJ1dCB0aGVyZSBhcmUgY2lyY3Vtc3RhbmNlcyB3aGVyZSBhIGZhc3RlciBVQVJUIGJpdHJhdGUgaXMKK2Rlc2lyYWJsZS4gVGh1cywgdGhpcyBkb2N1bWVudCBwcm9wb3NlcyBhIHNpbXBsZSBiaXRyYXRlIGRldGVjdGlvbgorc2NoZW1lIHRoYXQgY2FuIGJlIGVtcGxveWVkIGJ5IHRoZSBob3N0IHRvIGRldGVjdCB3aGVuIHRoZSBhdHRhY2hlZAorTkNQIGlzIGluaXRpYWxseSBydW5uaW5nIGF0IGEgaGlnaGVyIGJpdHJhdGUuCisKK1RoZSBhbGdvcml0aG0gaXMgdG8gc2VuZCBzdWNjZXNzaXZlIE5PT1AgY29tbWFuZHMgdG8gdGhlIE5DUCBhdCBpbmNyZWFzaW5nCitiaXRyYXRlcy4gV2hlbiBhIHZhbGlkIGBDTURfTEFTVF9TVEFUVVNgIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLCB3ZQoraGF2ZSBpZGVudGlmaWVkIHRoZSBjb3JyZWN0IGJpdHJhdGUuCisKK0luIG9yZGVyIHRvIGxpbWl0IHRoZSB0aW1lIHNwZW50IGh1bnRpbmcgZm9yIHRoZSBhcHByb3ByaWF0ZSBiaXRyYXRlLAord2UgUkVDT01NRU5EIHRoYXQgb25seSB0aGUgZm9sbG93aW5nIGJpdHJhdGVzIGJlIGNoZWNrZWQ6CisKKyogMTE1MjAwCisqIDIzMDQwMAorKiAxMDAwMDAwICgxTWJpdCkKKworVGhlIGJpdHJhdGUgTUFZIGFsc28gYmUgY2hhbmdlZCBwcm9ncmFtbWF0aWNhbGx5IGJ5IGFkanVzdGluZworYFBST1BfVUFSVF9CSVRSQVRFYCwgaWYgaW1wbGVtZW50ZWQuCisKKyMjIyBIRExDLUxpdGUgeyNoZGxjLWxpdGV9CisKKypIRExDLUxpdGUqIGlzIHRoZSByZWNvbW1lbmRlZCBmcmFtaW5nIHByb3RvY29sIGZvciB0cmFuc21pdHRpbmcKK1NwaW5lbCBmcmFtZXMgb3ZlciBhIFVBUlQuIEhETEMtTGl0ZSBjb25zaXN0cyBvZiBvbmx5IHRoZSBmcmFtaW5nLAorZXNjYXBpbmcsIGFuZCBDUkMgcGFydHMgb2YgdGhlIGxhcmdlciBIRExDIHByb3RvY29sLS0tYWxsIG90aGVyIHBhcnRzCitvZiBIRExDIGFyZSBvbWl0dGVkLiBUaGlzIHByb3RvY29sIHdhcyBjaG9zZW4gYmVjYXVzZSBpdCB3b3JrcyB3ZWxsCit3aXRoIHNvZnR3YXJlIGZsb3cgY29udHJvbCBhbmQgaXMgd2lkZWx5IGltcGxlbWVudGVkLgorCitUbyB0cmFuc21pdCBhIGZyYW1lIHdpdGggSERMQy1saXRlLCB0aGUgMTYtYml0IENSQyBtdXN0IGZpcnN0IGJlCithcHBlbmRlZCB0byB0aGUgZnJhbWUuIFRoZSBDUkMgZnVuY3Rpb24gaXMgZGVmaW5lZCB0byBiZSBDUkMtMTYvQ0NJVFQsCitvdGhlcndpc2Uga25vd24gYXMgdGhlIFtLRVJNSVQgQ1JDXVtdLgorCitbS0VSTUlUIENSQ106IGh0dHA6Ly9yZXZlbmcuc291cmNlZm9yZ2UubmV0L2NyYy1jYXRhbG9ndWUvMTYuaHRtI2NyYy5jYXQua2VybWl0CisKK0luZGl2aWR1YWwgZnJhbWVzIGFyZSB0ZXJtaW5hdGVkIHdpdGggYSBmcmFtZSBkZWxpbWl0ZXIgb2N0ZXQgY2FsbGVkCit0aGUgJ2ZsYWcnIG9jdGV0IChgMHg3RWApLgorCitUaGUgZm9sbG93aW5nIG9jdGV0cyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgKnNwZWNpYWwqIGFuZCBzaG91bGQgYmUKK2VzY2FwZWQgd2hlbiBwcmVzZW50IGluIGRhdGEgZnJhbWVzOgorCitPY3RldCBWYWx1ZSB8IERlc2NyaXB0aW9uICAKKy0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisgICAgICAgMHg3RSB8IEZyYW1lIERlbGltaXRlciAoRmxhZykgIAorICAgICAgIDB4N0QgfCBFc2NhcGUgQnl0ZSAgCisgICAgICAgMHgxMSB8IFhPTiAgCisgICAgICAgMHgxMyB8IFhPRkYgIAorICAgICAgIDB4RjggfCBWZW5kb3ItU3BlY2lmaWMgIAorCitXaGVuIHByZXNlbnQgaW4gYSBkYXRhIGZyYW1lLCB0aGVzZSBvY3RldCB2YWx1ZXMgYXJlIGVzY2FwZWQgYnkKK3ByZXBlbmRpbmcgdGhlIGVzY2FwZSBvY3RldCAoYDB4N0RgKSBhbmQgWE9SaW5nIHRoZSB2YWx1ZSB3aXRoIGAweDIwYC4KKworV2hlbiByZWNlaXZpbmcgYSBmcmFtZSwgdGhlIENSQyBtdXN0IGJlIHZlcmlmaWVkIGFmdGVyIHRoZSBmcmFtZSBpcwordW5lc2NhcGVkLiBJZiB0aGUgQ1JDIHZhbHVlIGRvZXMgbm90IG1hdGNoIHdoYXQgaXMgY2FsY3VsYXRlZCBmb3IgdGhlCitmcmFtZSBkYXRhLCB0aGUgZnJhbWUgTVVTVCBiZSBkaXNjYXJkZWQuIFRoZSBpbXBsZW1lbnRhdGlvbiBNQVkKK2luZGljYXRlIHRoZSBmYWlsdXJlIHRvIGhpZ2hlciBsZXZlbHMgdG8gaGFuZGxlIGFzIHRoZXkgc2VlIGZpdCwgYnV0CitNVVNUIE5PVCBhdHRlbXB0IHRvIHByb2Nlc3MgdGhlIGRlY2VpdmVkIGZyYW1lLgorCitDb25zZWN1dGl2ZSBmbGFnIG9jdGV0cyBhcmUgZW50aXJlbHkgbGVnYWwgYW5kIE1VU1QgTk9UIGJlIHRyZWF0ZWQgYXMKK2EgZnJhbWluZyBlcnJvci4gQ29uc2VjdXRpdmUgZmxhZyBvY3RldHMgTUFZIGJlIHVzZWQgYXMgYSB3YXkgdG8gd2FrZQordXAgYSBzbGVlcGluZyBOQ1AuCisKK1doZW4gZmlyc3QgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgTkNQLCBpdCBpcyBjdXN0b21hcnkgdG8KK3NlbmQgb25lIG9yIG1vcmUgZmxhZyBvY3RldHMgdG8gZW5zdXJlIHRoYXQgYW55IHByZXZpb3VzbHkgcmVjZWl2ZWQKK2RhdGEgaXMgZGlzY2FyZGVkLgorCisjIyBTUEkgUmVjb21tZW5kYXRpb25zICMjIworCitXZSBSRUNPTU1FTkQgdGhlIHVzZSBvZiB0aGUgZm9sbG93aW5nIHN0YW5kYXJkIFNQSSBzaWduYWxzOgorCisqICAgYEPMhVPMhWA6ICAgKEhvc3QtdG8tTkNQKSBDaGlwIFNlbGVjdAorKiAgIGBDTEtgOiAgKEhvc3QtdG8tTkNQKSBDbG9jaworKiAgIGBNT1NJYDogTWFzdGVyLU91dHB1dC9TbGF2ZS1JbnB1dAorKiAgIGBNSVNPYDogTWFzdGVyLUlucHV0L1NsYXZlLU91dHB1dAorKiAgIGBJzIVOzIVUzIVgOiAgKE5DUC10by1Ib3N0KSBIb3N0IEludGVycnVwdAorKiAgIGBSzIVFzIVTzIVgOiAgKEhvc3QtdG8tTkNQKSBOQ1AgSGFyZHdhcmUgUmVzZXQKKworVGhlIGBJzIVOzIVUzIVgIHNpZ25hbCBpcyB1c2VkIGJ5IHRoZSBOQ1AgdG8gaW5kaWNhdGUgdG8gdGhlIGhvc3QgdGhhdAordGhlIE5DUCBoYXMgZnJhbWVzIHBlbmRpbmcgdG8gc2VuZCB0byBpdC4gV2hlbiBhc3NlcnRlZCwgdGhlIGhvc3QKK1NIT1VMRCBpbml0aWF0ZSBhIFNQSSB0cmFuc2FjdGlvbiBpbiBhIHRpbWVseSBtYW5uZXIuCisKK1dlIFJFQ09NTUVORCB0aGUgZm9sbG93aW5nIFNQSSBwcm9wZXJ0aWVzOgorCisqICAgYEPMhVPMhWAgaXMgYWN0aXZlIGxvdy4KKyogICBgQ0xLYCBpcyBhY3RpdmUgaGlnaC4KKyogICBgQ0xLYCBzcGVlZCBpcyBsYXJnZXIgdGhhbiA1MDAga0h6LgorKiAgIERhdGEgaXMgdmFsaWQgb24gbGVhZGluZyBlZGdlIG9mIGBDTEtgLgorKiAgIERhdGEgaXMgc2VudCBpbiBtdWx0aXBsZXMgb2YgOC1iaXRzIChvY3RldHMpLgorKiAgIE9jdGV0cyBhcmUgc2VudCBtb3N0LXNpZ25pZmljYW50IGJpdCBmaXJzdC4KKworVGhpcyByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uIG1heSBiZSBhZGp1c3RlZCBkZXBlbmRpbmcgb24gdGhlCitpbmRpdmlkdWFsIG5lZWRzIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBwcm9kdWN0LgorCisjIyMgU1BJIEZyYW1pbmcgUHJvdG9jb2wgIyMjIworCitFYWNoIFNQSSBmcmFtZSBzdGFydHMgd2l0aCBhIDUtYnl0ZSBmcmFtZSBoZWFkZXI6CisKK09jdGV0czogfCAgMSAgfCAgICAyICAgICB8ICAgICAyICAKKy0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLSAgCitGaWVsZHM6IHwgSERSIHwgUkVDVl9MRU4gfCBEQVRBX0xFTiAgCisKKyogICBgSERSYDogVGhlIGZpcnN0IGJ5dGUgaXMgdGhlIGhlYWRlciBieXRlIChkZWZpbmVkIGJlbG93KQorKiAgIGBSRUNWX0xFTmA6IFRoZSBzZWNvbmQgYW5kIHRoaXJkIGJ5dGVzIGluZGljYXRlIHRoZSBsYXJnZXN0IGZyYW1lCisgICAgc2l6ZSB0aGF0IHRoYXQgZGV2aWNlIGlzIHJlYWR5IHRvIHJlY2VpdmUuIElmIHplcm8sIHRoZW4gdGhlIG90aGVyCisgICAgZGV2aWNlIG11c3Qgbm90IHNlbmQgYW55IGRhdGEuIChMaXR0bGUgZW5kaWFuKQorKiAgIGBEQVRBX0xFTmA6IFRoZSBmb3VydGggYW5kIGZpZnRoIGJ5dGVzIGluZGljYXRlIHRoZSBzaXplIG9mIHRoZQorICAgIHBlbmRpbmcgZGF0YSBmcmFtZSB0byBiZSBzZW50IHRvIHRoZSBvdGhlciBkZXZpY2UuIElmIHRoaXMgdmFsdWUKKyAgICBpcyBlcXVhbC10byBvciBsZXNzLXRoYW4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBvdGhlciBkZXZpY2UKKyAgICBpcyB3aWxsaW5nIHRvIHJlY2VpdmUsIHRoZW4gdGhlIGRhdGEgb2YgdGhlIGZyYW1lIGlzIGltbWVkaWF0ZWx5CisgICAgYWZ0ZXIgdGhlIGhlYWRlci4gKExpdHRsZSBFbmRpYW4pCisKK1RoZSBgSERSYCBieXRlIGlzIGRlZmluZWQgYXM6CisKKyAgICAgIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisgICAgfFJTVHxDUkN8Q0NGfCAgUkVTRVJWRUQgfFBBVFRFUk58CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisKKyogICBgUlNUYDogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhhdCBkZXZpY2UgaGFzIGJlZW4gcmVzZXQgc2luY2UgdGhlCisgICAgbGFzdCB0aW1lIGBDzIVTzIVgIHdhcyBhc3NlcnRlZC4KKyogICBgQ1JDYDogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhhdCBkZXZpY2Ugc3VwcG9ydHMgd3JpdGluZyBhIDE2LWJpdAorICAgIENSQyBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhLiBUaGUgQ1JDIGxlbmd0aCBpcyBOT1QgaW5jbHVkZWQgaW4gREFUQV9MRU4uCisqICAgYENDRmA6ICJDUkMgQ2hlY2sgRmFpbHVyZSIuIFNldCBpZiB0aGUgQ1JDIGNoZWNrIG9uIHRoZSBsYXN0IHJlY2VpdmVkCisgICAgZnJhbWUgZmFpbGVkLCBjbGVhcmVkIHRvIHplcm8gb3RoZXJ3aXNlLiBUaGlzIGJpdCBpcyBvbmx5IHVzZWQgaWYgYm90aAorICAgIHNpZGVzIHN1cHBvcnQgQ1JDLgorKiAgIGBSRVNFUlZFRGA6IFRoZXNlIGJpdHMgYXJlIGFsbCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZWQuIFRoZXkKKyAgICBNVVNUIGJlIGNsZWFyZWQgdG8gemVybyBhbmQgTVVTVCBiZSBpZ25vcmVkIGlmIHNldC4KKyogICBgUEFUVEVSTmA6IFRoZXNlIGJpdHMgYXJlIHNldCB0byBhIGZpeGVkIHZhbHVlIHRvIGhlbHAgZGlzdGluZ3Vpc2gKKyAgICB2YWxpZCBTUEkgZnJhbWVzIGZyb20gZ2FyYmFnZSAoYnkgZXhwbGljaXRseSBtYWtpbmcgYDB4RkZgIGFuZCBgMHgwMGAKKyAgICBpbnZhbGlkIHZhbHVlcykuIEJpdCA2IE1VU1QgYmUgc2V0IHRvIGJlIG9uZSBhbmQgYml0IDcgTVVTVCBiZQorICAgIGNsZWFyZWQgKDApLiBBIGZyYW1lIHJlY2VpdmVkIHRoYXQgaGFzIGFueSBvdGhlciB2YWx1ZXMgZm9yIHRoZXNlIGJpdHMKKyAgICBNVVNUIGJlIGRyb3BwZWQuCisKK1ByaW9yIHRvIGEgc2VuZGluZyBvciByZWNlaXZpbmcgYSBmcmFtZSwgdGhlIG1hc3RlciBNQVkgc2VuZCBhCis1LW9jdGV0IGZyYW1lIHdpdGggemVyb3MgZm9yIGJvdGggdGhlIG1heCByZWNlaXZlIGZyYW1lIHNpemUgYW5kIHRoZQordGhlIGNvbnRhaW5lZCBmcmFtZSBsZW5ndGguIFRoaXMgd2lsbCBpbmR1Y2UgdGhlIHNsYXZlIGRldmljZSB0bworaW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgaXQgd2FudHMgdG8gc2VuZCAoaWYgYW55KSBhbmQKK2luZGljYXRlIHRoZSBsYXJnZXN0IGZyYW1lIGl0IGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGF0IHRoZSBtb21lbnQuCitUaGlzIGFsbG93cyB0aGUgbWFzdGVyIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV4dCB0cmFuc2FjdGlvbi4KK0FsdGVybmF0aXZlbHksIGlmIHRoZSBtYXN0ZXIgaGFzIGEgZnJhbWUgdG8gc2VuZCBpdCBjYW4ganVzdCBnbyBhaGVhZAorYW5kIHNlbmQgYSBmcmFtZSBvZiB0aGF0IGxlbmd0aCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBmcmFtZSB3YXMgYWNjZXB0ZWQKK2J5IGNoZWNraW5nIHRoYXQgdGhlIGBSRUNWX0xFTmAgZnJvbSB0aGUgc2xhdmUgZnJhbWUgaXMgbGFyZ2VyIHRoYW4KK3RoZSBmcmFtZSB0aGUgbWFzdGVyIGp1c3QgdHJpZWQgdG8gc2VuZC4gSWYgdGhlIGBSRUNWX0xFTmAgaXMgc21hbGxlcgordGhlbiB0aGUgZnJhbWUgd2Fzbid0IGFjY2VwdGVkIGFuZCB3aWxsIG5lZWQgdG8gYmUgdHJhbnNtaXR0ZWQgYWdhaW4uCisKK1RoaXMgcHJvdG9jb2wgY2FuIGJlIHVzZWQgZWl0aGVyIHVuaWRpcmVjdGlvbmFsbHkgb3IgYmlkaXJlY3Rpb25hbGx5LAorZGV0ZXJtaW5lZCBieSB0aGUgYmVoYXZpb3Igb2YgdGhlIG1hc3RlciBhbmQgdGhlIHNsYXZlLgorCitJZiB0aGUgdGhlIG1hc3RlciBub3RpY2VzIGBQQVRURVJOYCBpcyBub3Qgc2V0IGNvcnJlY3RseSwgdGhlIG1hc3Rlcgorc2hvdWxkIGNvbnNpZGVyIHRoZSB0cmFuc2FjdGlvbiB0byBoYXZlIGZhaWxlZCBhbmQgdHJ5IGFnYWluIGFmdGVyIDEwCittaWxsaXNlY29uZHMsIHJldHJ5aW5nIHVwIHRvIDIwMCB0aW1lcy4gQWZ0ZXIgdW5zdWNjZXNzZnVsbHkgdHJ5aW5nCisyMDAgdGltZXMgaW4gYSByb3csIHRoZSBtYXN0ZXIgTUFZIHRha2UgYXBwcm9wcmlhdGUgcmVtZWRpYWwgYWN0aW9uCisobGlrZSBhIE5DUCBoYXJkd2FyZSByZXNldCwgb3IgaW5kaWNhdGluZyBhIGNvbW11bmljYXRpb24gZmFpbHVyZSB0byBhCit1c2VyIGludGVyZmFjZSkuCisKK0F0IHRoZSBlbmQgb2YgdGhlIGRhdGEgb2YgYSBmcmFtZSBpcyBhbiBvcHRpb25hbCAxNi1iaXQgQ1JDLCBzdXBwb3J0IGZvcgord2hpY2ggaXMgaW5kaWNhdGVkIGJ5IHRoZSBgQ1JDYCBiaXQgb2YgdGhlIGBIRFJgIGJ5dGUgYmVpbmcgc2V0LiBJZiB0aGVzZQorYml0cyBhcmUgc2V0IGZvciBib3RoIHRoZSBtYXN0ZXIgYW5kIHNsYXZlIGZyYW1lcywgdGhlbiBDUkMgY2hlY2tpbmcgaXMKK2VuYWJsZWQgb24gYm90aCBzaWRlcywgZWZmZWN0aXZlbHkgcmVxdWlyaW5nIHRoYXQgZnJhbWUgc2l6ZXMgYmUgdHdvIGJ5dGVzCitsb25nZXIgdGhhbiB3b3VsZCBiZSBvdGhlcndpc2UgcmVxdWlyZWQuIFRoZSBDUkMgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUKK3NhbWUgbWVjaGFuaXNtIHVzZWQgZm9yIHRoZSBDUkMgY2FsY3VsYXRpb24gaW4gSERMQy1MaXRlIChTZWUgKCNoZGxjLWxpdGUpKS4KK1doZW4gYm90aCBvZiB0aGUgYENSQ2AgYml0cyBhcmUgc2V0LCBib3RoIHNpZGVzIG11c3QgdmVyaWZ5IHRoYXQgdGhlIGBDUkNgCitpcyB2YWxpZCBiZWZvcmUgYWNjZXB0aW5nIHRoZSBmcmFtZS4gSWYgbm90IGVub3VnaCBieXRlcyB3ZXJlIGNsb2NrZWQgb3V0Citmb3IgdGhlIENSQyB0byBiZSByZWFkLCB0aGVuIHRoZSBmcmFtZSBtdXN0IGJlIGlnbm9yZWQuIElmIGVub3VnaCBieXRlcword2VyZSBjbG9ja2VkIG91dCB0byBwZXJmb3JtIGEgQ1JDIGNoZWNrLCBidXQgdGhlIENSQyBjaGVjayBmYWlscywgdGhlbgordGhlIGZyYW1lIG11c3QgYmUgcmVqZWN0ZWQgYW5kIHRoZSBgQ1JDX0ZBSUxgIGJpdCBvbiB0aGUgbmV4dCBmcmFtZSAoYW5kCitPTkxZIHRoZSBuZXh0IGZyYW1lKSBNVVNUIGJlIHNldC4KKworIyMgScKyQyBSZWNvbW1lbmRhdGlvbnMgeyNpMmMtcmVjb21tZW5kYXRpb25zfQorCitUQkQKKworPCEtLSBSUQorICAtLSBJdCBtYXkgbWFrZSBzZW5zZSB0byBoYXZlIGEgbG9vayBhdCB3aGF0IEJsdWV0b290aCBIQ0kgaXMgZG9pbmcKKyAgICAgZm9yIG5hdGl2ZSBJwrJDIGZyYW1pbmcgYW5kIGdvIHdpdGggdGhhdC4KKyAgLS0+CisKKyMjIE5hdGl2ZSBVU0IgUmVjb21tZW5kYXRpb25zICMjIworCitUQkQKKworPCEtLSBSUQorICAtLSBJdCBtYXkgbWFrZSBzZW5zZSB0byBoYXZlIGEgbG9vayBhdCB3aGF0IEJsdWV0b290aCBIQ0kgaXMgZG9pbmcKKyAgICAgZm9yIG5hdGl2ZSBVU0IgZnJhbWluZyBhbmQgZ28gd2l0aCB0aGF0LgorICAtLT4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLWNvcmUubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1jb3JlLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMzg0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1jb3JlLm1kCkBAIC0wLDAgKzEsNTQ0IEBACisjIyBDb3JlIFByb3BlcnRpZXMgeyNwcm9wLWNvcmV9CisKKyMjIyBQUk9QIDA6IFBST1BfTEFTVF9TVEFUVVMgeyNwcm9wLWxhc3Qtc3RhdHVzfQorCisqIFR5cGU6IFJlYWQtT25seQorKiBFbmNvZGluZzogYGlgCisKK09jdGV0czogfCAgICAxLTMKKy0tLS0tLS06fC0tLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBMQVNUX1NUQVRVUworCitEZXNjcmliZXMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBvcGVyYXRpb24uIEVuY29kZWQgYXMgYSBwYWNrZWQKK3Vuc2lnbmVkIGludGVnZXIuCisKK1RoaXMgcHJvcGVydHkgaXMgZW1pdHRlZCBvZnRlbiB0byBpbmRpY2F0ZSB0aGUgcmVzdWx0IHN0YXR1cyBvZgorcHJldHR5IG11Y2ggYW55IEhvc3QtdG8tTkNQIG9wZXJhdGlvbi4KKworSXQgaXMgZW1pdHRlZCBhdXRvbWF0aWNhbGx5IGF0IE5DUCBzdGFydHVwIHdpdGggYSB2YWx1ZSBpbmRpY2F0aW5nCit0aGUgcmVzZXQgcmVhc29uLgorCitTZWUgKCNzdGF0dXMtY29kZXMpIGZvciB0aGUgY29tcGxldGUgbGlzdCBvZiBzdGF0dXMgY29kZXMuCisKKyMjIyBQUk9QIDE6IFBST1BfUFJPVE9DT0xfVkVSU0lPTiB7I3Byb3AtcHJvdG9jb2wtdmVyc2lvbn0KKworKiBUeXBlOiBSZWFkLU9ubHkKKyogRW5jb2Rpbmc6IGBpaWAKKworT2N0ZXRzOiB8ICAgICAgIDEtMyAgICAgIHwgICAgICAxLTMKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgIE1BSk9SX1ZFUlNJT04gfCBNSU5PUl9WRVJTSU9OCisKK0Rlc2NyaWJlcyB0aGUgcHJvdG9jb2wgdmVyc2lvbiBpbmZvcm1hdGlvbi4gVGhpcyBwcm9wZXJ0eSBjb250YWlucworZm91ciBmaWVsZHMsIGVhY2ggZW5jb2RlZCBhcyBhIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyOgorCisgKiAgTWFqb3IgVmVyc2lvbiBOdW1iZXIKKyAqICBNaW5vciBWZXJzaW9uIE51bWJlcgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBtYWpvciB2ZXJzaW9uIDQsIG1pbm9yIHZlcnNpb24gMyBvZiB0aGlzIHByb3RvY29sLgorCitUaGUgaG9zdCAqKk1VU1QqKiBvbmx5IHVzZSB0aGlzIHByb3BlcnR5IGZyb20gTkxJIDAuIEJlaGF2aW9yIHdoZW4gdXNlZAorZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4KKworIyMjIyBNYWpvciBWZXJzaW9uIE51bWJlcgorCitUaGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgaXMgdXNlZCB0byBpZGVudGlmeSBsYXJnZSBhbmQgaW5jb21wYXRpYmxlCitkaWZmZXJlbmNlcyBiZXR3ZWVuIHByb3RvY29sIHZlcnNpb25zLgorCitUaGUgaG9zdCBNVVNUIGVudGVyIGEgRkFVTFQgc3RhdGUgaWYgaXQgZG9lcyBub3QgZXhwbGljaXRseSBzdXBwb3J0Cit0aGUgZ2l2ZW4gbWFqb3IgdmVyc2lvbiBudW1iZXIuCisKKyMjIyMgTWlub3IgVmVyc2lvbiBOdW1iZXIKKworVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgc21hbGwgYnV0IG90aGVyd2lzZQorY29tcGF0aWJsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHByb3RvY29sIHZlcnNpb25zLiBBIG1pc21hdGNoIGJldHdlZW4KK3RoZSBhZHZlcnRpc2VkIG1pbm9yIHZlcnNpb24gbnVtYmVyIGFuZCB0aGUgbWlub3IgdmVyc2lvbiB0aGF0IGlzCitzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgU0hPVUxEIE5PVCBiZSBmYXRhbCB0byB0aGUgb3BlcmF0aW9uIG9mIHRoZQoraG9zdC4KKworIyMjIFBST1AgMjogUFJPUF9OQ1BfVkVSU0lPTiB7I3Byb3AtbmNwLXZlcnNpb259CisKKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYFVgCisKK09jdGV0czogfCAgICAgICAqbioKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBOQ1BfVkVTSU9OX1NUUklORworCitDb250YWlucyBhIHN0cmluZyB3aGljaCBkZXNjcmliZXMgdGhlIGZpcm13YXJlIGN1cnJlbnRseSBydW5uaW5nIG9uCit0aGUgTkNQLiBFbmNvZGVkIGFzIGEgemVyby10ZXJtaW5hdGVkIFVURi04IHN0cmluZy4KKworVGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIG5vdCBzdHJpY3RseSBkZWZpbmVkLCBidXQgaXQgaXMgaW50ZW5kZWQKK3RvIHByZXNlbnQgc2ltaWxhcmx5IHRvIHRoZSAiVXNlci1BZ2VudCIgc3RyaW5nIGZyb20gSFRUUC4gVGhlCitSRUNPTU1FTkRFRCBmb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBhcyBmb2xsb3dzOgorCisgICAgU1RBQ0stTkFNRS9TVEFDSy1WRVJTSU9OW0JVSUxEX0lORk9dWzsgT1RIRVJfSU5GT107IEJVSUxEX0RBVEVfQU5EX1RJTUUKKworRXhhbXBsZXM6CisKKyAqICBgT3BlblRocmVhZC8xLjBkMjYtMjUtZ2I2ODRjN2Y7IERFQlVHOyBNYXkgOSAyMDE2IDE4OjIyOjA0YAorICogIGBDb25uZWN0SVAvMi4wYjEyNSBzMSBBTFBIQTsgU2VwdCAyNCAyMDE1IDIwOjQ5OjE5YAorCitUaGUgaG9zdCAqKk1VU1QqKiBvbmx5IHVzZSB0aGlzIHByb3BlcnR5IGZyb20gTkxJIDAuIEJlaGF2aW9yIHdoZW4gdXNlZAorZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4KKworIyMjIFBST1AgMzogUFJPUF9JTlRFUkZBQ0VfVFlQRSB7I3Byb3AtaW50ZXJmYWNlLXR5cGV9CisKKyogVHlwZTogUmVhZC1Pbmx5CisqIEVuY29kaW5nOiBgaWAKKworT2N0ZXRzOiB8ICAgICAgIDEtMworLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IElOVEVSRkFDRV9UWVBFCisKK1RoaXMgaW50ZWdlciBpZGVudGlmaWVzIHdoYXQgdGhlIG5ldHdvcmsgcHJvdG9jb2wgZm9yIHRoaXMgTkNQLgorQ3VycmVudGx5IGRlZmluZWQgdmFsdWVzIGFyZToKKworICogIDA6IEJvb3Rsb2FkZXIKKyAqICAyOiBaaWdCZWUgSVAoVE0pCisgKiAgMzogVGhyZWFkKFIpCisKK1RoZSBob3N0IE1VU1QgZW50ZXIgYSBGQVVMVCBzdGF0ZSBpZiBpdCBkb2VzIG5vdCByZWNvZ25pemUgdGhlCitwcm90b2NvbCBnaXZlbiBieSB0aGUgTkNQLgorCisjIyMgUFJPUCA0OiBQUk9QX0lOVEVSRkFDRV9WRU5ET1JfSUQgeyNwcm9wLWludGVyZmFjZS12ZW5kb3ItaWR9CisKKyogVHlwZTogUmVhZC1Pbmx5CisqIEVuY29kaW5nOiBgaWAKKworT2N0ZXRzOiB8ICAgICAgIDEtMworLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IFZFTkRPUl9JRAorCitWZW5kb3IgaWRlbnRpZmllci4KKworIyMjIFBST1AgNTogUFJPUF9DQVBTIHsjcHJvcC1jYXBzfQorCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKGkpYAorCitPY3RldHM6IHwgIDEtMyAgfCAgMS0zICB8IC4uLgorLS0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfC0tLS0tCitGaWVsZHM6IHwgQ0FQXzEgfCBDQVBfMiB8IC4uLgorCitEZXNjcmliZXMgdGhlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgb2YgdGhpcyBOQ1AuIEVuY29kZWQgYXMgYSBsaXN0IG9mCitwYWNrZWQgdW5zaWduZWQgaW50ZWdlcnMuCisKK0EgY2FwYWJpbGl0eSBpcyBkZWZpbmVkIGFzIGEgMjEtYml0IGludGVnZXIgdGhhdCBkZXNjcmliZXMgYSBzdWJzZXQgb2YKK2Z1bmN0aW9uYWxpdHkgd2hpY2ggaXMgc3VwcG9ydGVkIGJ5IHRoZSBOQ1AuCisKK0N1cnJlbnRseSBkZWZpbmVkIHZhbHVlcyBhcmU6CisKKyAqIDE6IGBDQVBfTE9DS2AKKyAqIDI6IGBDQVBfTkVUX1NBVkVgCisgKiAzOiBgQ0FQX0hCT2A6IEhvc3QgQnVmZmVyIE9mZmxvYWQuIFNlZSAoI2ZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZCkuCisgKiA0OiBgQ0FQX1BPV0VSX1NBVkVgCisgKiA1OiBgQ0FQX0NPVU5URVJTYAorICogNjogYENBUF9KQU1fREVURUNUYDogSmFtbWluZyBkZXRlY3Rpb24uIFNlZSAoI2ZlYXR1cmUtamFtLWRldGVjdCkKKyAqIDc6IGBDQVBfUEVFS19QT0tFYDogUEVFSy9QT0tFIGRlYnVnZ2luZyBjb21tYW5kcy4KKyAqIDg6IGBDQVBfV1JJVEFCTEVfUkFXX1NUUkVBTWA6IGBQUk9QX1NUUkVBTV9SQVdgIGlzIHdyaXRhYmxlLgorICogOTogYENBUF9HUElPYDogU3VwcG9ydCBmb3IgR1BJTyBhY2Nlc3MuIFNlZSAoI2ZlYXR1cmUtZ3Bpby1hY2Nlc3MpLgorICogMTA6IGBDQVBfVFJOR2A6IFN1cHBvcnQgZm9yIHRydWUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLiBTZWUgKCNmZWF0dXJlLXRybmcpLgorICogMTE6IGBDQVBfQ01EX01VTFRJYDogU3VwcG9ydCBmb3IgYENNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVGAgKCgjY21kLXByb3AtdmFsdWUtbXVsdGktZ2V0KSksIGBDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVRgICgoI2NtZC1wcm9wLXZhbHVlLW11bHRpLXNldCksIGFuZCBgQ01EX1BST1BfVkFMVUVTX0FSRWAgKCgjY21kLXByb3AtdmFsdWVzLWFyZSkpLgorICogMTI6IGBDQVBfVU5TT0xfVVBEQVRFX0ZJTFRFUmA6IFN1cHBvcnQgZm9yIGBQUk9QX1VOU09MX1VQREFURV9GSUxURVJgICgoI3Byb3AtdW5zb2wtdXBkYXRlLWZpbHRlcikpIGFuZCBgUFJPUF9VTlNPTF9VUERBVEVfTElTVGAgKCgjcHJvcC11bnNvbC11cGRhdGUtbGlzdCkpLgorICogMTY6IGBDQVBfODAyXzE1XzRfMjAwM2AKKyAqIDE3OiBgQ0FQXzgwMl8xNV80XzIwMDZgCisgKiAxODogYENBUF84MDJfMTVfNF8yMDExYAorICogMjE6IGBDQVBfODAyXzE1XzRfUElCYAorICogMjQ6IGBDQVBfODAyXzE1XzRfMjQ1ME1IWl9PUVBTS2AKKyAqIDI1OiBgQ0FQXzgwMl8xNV80XzkxNU1IWl9PUVBTS2AKKyAqIDI2OiBgQ0FQXzgwMl8xNV80Xzg2OE1IWl9PUVBTS2AKKyAqIDI3OiBgQ0FQXzgwMl8xNV80XzkxNU1IWl9CUFNLYAorICogMjg6IGBDQVBfODAyXzE1XzRfODY4TUhaX0JQU0tgCisgKiAyOTogYENBUF84MDJfMTVfNF85MTVNSFpfQVNLYAorICogMzA6IGBDQVBfODAyXzE1XzRfODY4TUhaX0FTS2AKKyAqIDQ4OiBgQ0FQX1JPTEVfUk9VVEVSYAorICogNDk6IGBDQVBfUk9MRV9TTEVFUFlgCisgKiA1MjogYENBUF9ORVRfVEhSRUFEXzFfMGAKKyAqIDUxMjogYENBUF9NQUNfV0hJVEVMSVNUYAorICogNTEzOiBgQ0FQX01BQ19SQVdgCisgKiA1MTQ6IGBDQVBfT09CX1NURUVSSU5HX0RBVEFgCisgKiAxMDI0OiBgQ0FQX1RIUkVBRF9DT01NSVNTSU9ORVJgCisgKiAxMDI1OiBgQ0FQX1RIUkVBRF9UTUZfUFJPWFlgCisKKworQWRkaXRpb25hbGx5LCBmdXR1cmUgY2FwYWJpbGl0eSBhbGxvY2F0aW9ucyBTSEFMTCBiZSBtYWRlIGZyb20gdGhlCitmb2xsb3dpbmcgYWxsb2NhdGlvbiBwbGFuOgorCitDYXBhYmlsaXR5IFJhbmdlICAgICAgfCBEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0KKzAgLSAxMjcgICAgICAgICAgICAgICB8IFJlc2VydmVkIGZvciBjb3JlIGNhcGFiaWxpdGllcworMTI4IC0gMTUsMzU5ICAgICAgICAgIHwgKlVOQUxMT0NBVEVEKgorMTUsMzYwIC0gMTYsMzgzICAgICAgIHwgVmVuZG9yLXNwZWNpZmljCisxNiwzODQgLSAxLDk5OSw5OTkgICAgfCAqVU5BTExPQ0FURUQqCisyLDAwMCwwMDAgLSAyLDA5NywxNTEgfCBFeHBlcmltZW50YWwgdXNlIG9ubHkKKworCisjIyMgUFJPUCA2OiBQUk9QX0lOVEVSRkFDRV9DT1VOVCB7I3Byb3AtaW50ZXJmYWNlLWNvdW50fQorCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitPY3RldHM6IHwgICAgICAgMQorLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBgSU5URVJGQUNFX0NPVU5UYAorCitEZXNjcmliZXMgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IGludGVyZmFjZXMgc3VwcG9ydGVkIGJ5IHRoaXMgTkNQLgorU2luY2UgdGhlIGNvbmN1cnJlbnQgaW50ZXJmYWNlIG1lY2hhbmlzbSBpcyBzdGlsbCBUQkQsIHRoaXMgdmFsdWUgTVVTVAorYWx3YXlzIGJlIG9uZS4KKworVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDgtYml0IGludGVnZXIuCisKK1RoZSBob3N0ICoqTVVTVCoqIG9ubHkgdXNlIHRoaXMgcHJvcGVydHkgZnJvbSBOTEkgMC4gQmVoYXZpb3Igd2hlbiB1c2VkCitmcm9tIG90aGVyIE5MSXMgaXMgdW5kZWZpbmVkLgorCisjIyMgUFJPUCA3OiBQUk9QX1BPV0VSX1NUQVRFIHsjcHJvcC1wb3dlci1zdGF0ZX0KKworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKK09jdGV0czogfCAgICAgICAgMQorLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgUE9XRVJfU1RBVEUKKworRGVzY3JpYmVzIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIHRoZSBOQ1AuIEJ5IHdyaXRpbmcgdG8gdGhpcworcHJvcGVydHkgeW91IGNhbiBtYW5hZ2UgdGhlIGxvd2VyIHN0YXRlIG9mIHRoZSBOQ1AuIEVudW1lcmF0aW9uIGlzCitlbmNvZGVkIGFzIGEgc2luZ2xlIHVuc2lnbmVkIGJ5dGUuCisKK0RlZmluZWQgdmFsdWVzIGFyZToKKworICogIDA6IGBQT1dFUl9TVEFURV9PRkZMSU5FYDogTkNQIGlzIHBoeXNpY2FsbHkgcG93ZXJlZCBvZmYuCisgICAgKEVudW1lcmF0ZWQgZm9yIGNvbXBsZXRlbmVzcyBzYWtlLCBub3QgZXhwZWN0ZWQgb24gdGhlIHdpcmUpCisgKiAgMTogYFBPV0VSX1NUQVRFX0RFRVBfU0xFRVBgOiBBbG1vc3QgZXZlcnl0aGluZyBvbiB0aGUgTkNQIGlzIHNodXQKKyAgICBkb3duLCBidXQgY2FuIHN0aWxsIGJlIHJlc3VtZWQgdmlhIGEgY29tbWFuZCBvciBpbnRlcnJ1cHQuCisgKiAgMjogYFBPV0VSX1NUQVRFX1NUQU5EQllgOiBOQ1AgaXMgaW4gdGhlIGxvd2VzdCBwb3dlciBzdGF0ZSB0aGF0CisgICAgY2FuIHN0aWxsIGJlIGF3b2tlbiBieSBhbiBldmVudCBmcm9tIHRoZSByYWRpbyAoZS5nLiB3YWl0aW5nIGZvcgorICAgIGFsYXJtKQorICogIDM6IGBQT1dFUl9TVEFURV9MT1dfUE9XRVJgOiBOQ1AgaXMgcmVzcG9uc2l2ZSAoYW5kIHBvc3NpYmx5CisgICAgY29ubmVjdGVkKSwgYnV0IHVzaW5nIGxlc3MgcG93ZXIuIChlLmcuICJTbGVlcHkiIGNoaWxkIG5vZGUpCisgKiAgNDogYFBPV0VSX1NUQVRFX09OTElORWA6IE5DUCBpcyBmdWxseSBwb3dlcmVkLiAoZS5nLiAiUGFyZW50IgorICAgIG5vZGUpCisKKzwhLS0gUlEKKyAgLS0gV2Ugc2hvdWxkIGNvbnNpZGVyIHJldmVyc2luZyB0aGUgbnVtYmVyaW5nIGhlcmUgc28gdGhhdCAwIGlzCisgICAgIGBQT1dFUl9TVEFURV9PTkxJTkVgLiBXZSBtYXkgYWxzbyB3YW50IHRvIGluY2x1ZGUgc29tZSBleHRyYQorICAgICB2YWx1ZXMgYmV0d2VlbiB0aGUgZGVmaW5lZCB2YWx1ZXMgZm9yIGZ1dHVyZSBleHBhbnNpb24sIHNvCisgICAgIHRoYXQgd2UgY2FuIHByZXNlcnZlIHRoZSBvcmRlcmVkIHJlbGF0aW9uc2hpcC4gLS0gLS0+CisKKyMjIyBQUk9QIDg6IFBST1BfSFdBRERSIHsjcHJvcC1od2FkZHJ9CisKKyogVHlwZTogUmVhZC1Pbmx5XCoKKyogUGFja2VkLUVuY29kaW5nOiBgRWAKKworT2N0ZXRzOiB8ICAgIDgKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEhXQUREUgorCitUaGUgc3RhdGljIEVVSTY0IGFkZHJlc3Mgb2YgdGhlIGRldmljZSwgdXNlZCBhcyBhIHNlcmlhbCBudW1iZXIuCitUaGlzIHZhbHVlIGlzIHJlYWQtb25seSwgYnV0IG1heSBiZSB3cml0YWJsZSB1bmRlciBjZXJ0YWluCit2ZW5kb3ItZGVmaW5lZCBjaXJjdW1zdGFuY2VzLgorCisjIyMgUFJPUCA5OiBQUk9QX0xPQ0sgeyNwcm9wLWxvY2t9CisKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitPY3RldHM6IHwgICAgMQorLS0tLS0tLS18LS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgTE9DSworCitQcm9wZXJ0eSBsb2NrLiBVc2VkIGZvciBncm91cGluZyBjaGFuZ2VzIHRvIHNldmVyYWwgcHJvcGVydGllcyB0bwordGFrZSBlZmZlY3QgYXQgb25jZSwgb3IgdG8gdGVtcG9yYXJpbHkgcHJldmVudCB0aGUgYXV0b21hdGljIHVwZGF0aW5nCitvZiBwcm9wZXJ0eSB2YWx1ZXMuIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQsIHRoZSBleGVjdXRpb24gb2YgdGhlCitOQ1AgaXMgZWZmZWN0aXZlbHkgZnJvemVuIHVudGlsIGl0IGlzIGNsZWFyZWQuCisKK1RoaXMgcHJvcGVydHkgaXMgb25seSBzdXBwb3J0ZWQgaWYgdGhlIGBDQVBfTE9DS2AgY2FwYWJpbGl0eSBpcyBwcmVzZW50LgorCitVbmxpa2UgbW9zdCBvdGhlciBwcm9wZXJ0aWVzLCBzZXR0aW5nIHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB3aGVuIHRoZQordmFsdWUgb2YgdGhlIHByb3BlcnR5IGlzIGFscmVhZHkgdHJ1ZSAqKk1VU1QqKiBmYWlsIHdpdGggYSBsYXN0IHN0YXR1cworb2YgYFNUQVRVU19BTFJFQURZYC4KKworIyMjIFBST1AgMTA6IFBST1BfSE9TVF9QT1dFUl9TVEFURSB7I3Byb3AtaG9zdC1wb3dlci1zdGF0ZX0KKworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisqIERlZmF1bHQgdmFsdWU6IDQKKworT2N0ZXRzOiB8ICAgICAgICAxCistLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBgSE9TVF9QT1dFUl9TVEFURWAKKworRGVzY3JpYmVzIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIHRoZSAqaG9zdCouIFRoaXMgcHJvcGVydHkgaXMgdXNlZAorYnkgdGhlIGhvc3QgdG8gaW5mb3JtIHRoZSBOQ1Agd2hlbiBpdCBoYXMgY2hhbmdlZCBwb3dlciBzdGF0ZXMuIFRoZQorTkNQIGNhbiB0aGVuIHVzZSB0aGlzIHN0YXRlIHRvIGRldGVybWluZSB3aGljaCBwcm9wZXJ0aWVzIG5lZWQKK2FzeW5jaHJvbm91cyB1cGRhdGVzLiBFbnVtZXJhdGlvbiBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIHVuc2lnbmVkCitieXRlLiBUaGVzZSBzdGF0ZXMgYXJlIGRlZmluZWQgaW4gc2ltaWxhciB0ZXJtcyB0byBgUFJPUF9QT1dFUl9TVEFURWAKKygoI3Byb3AtcG93ZXItc3RhdGUpKS4KKworRGVmaW5lZCB2YWx1ZXMgYXJlOgorCisqICAgMDogYEhPU1RfUE9XRVJfU1RBVEVfT0ZGTElORWA6IEhvc3QgaXMgcGh5c2ljYWxseSBwb3dlcmVkIG9mZiBhbmQKKyAgICBjYW5ub3QgYmUgd29rZW4gYnkgdGhlIE5DUC4gQWxsIGFzeW5jaHJvbm91cyBjb21tYW5kcyBhcmUKKyAgICBzcXVlbGNoZWQuCisqICAgMTogYEhPU1RfUE9XRVJfU1RBVEVfREVFUF9TTEVFUGA6IFRoZSBob3N0IGlzIGluIGEgbG93IHBvd2VyIHN0YXRlCisgICAgd2hlcmUgaXQgY2FuIGJlIHdva2VuIGJ5IHRoZSBOQ1AgYnV0IHdpbGwgcG90ZW50aWFsbHkgcmVxdWlyZSBtb3JlCisgICAgdGhhbiB0d28gc2Vjb25kcyB0byBiZWNvbWUgZnVsbHkgcmVzcG9uc2l2ZS4gVGhlIE5DUCAqKk1VU1QqKgorICAgIGF2b2lkIHNlbmRpbmcgdW5uZWNlc3NhcnkgcHJvcGVydHkgdXBkYXRlcywgc3VjaCBhcyBjaGlsZCB0YWJsZQorICAgIHVwZGF0ZXMgb3Igbm9uLWNyaXRpY2FsIG1lc3NhZ2VzIG9uIHRoZSBkZWJ1ZyBzdHJlYW0uIElmIHRoZSBOQ1AKKyAgICBuZWVkcyB0byB3YWtlIHRoZSBob3N0IGZvciB0cmFmZmljLCB0aGUgTkNQICoqTVVTVCoqIGZpcnN0IHRha2UKKyAgICBhY3Rpb24gdG8gd2FrZSB0aGUgaG9zdC4gT25jZSB0aGUgTkNQIHNpZ25hbHMgdG8gdGhlIGhvc3QgdGhhdCBpdAorICAgIHNob3VsZCB3YWtlIHVwLCB0aGUgTkNQICoqTVVTVCoqIHdhaXQgZm9yIHNvbWUgYWN0aXZpdHkgZnJvbSB0aGUKKyAgICBob3N0IChpbmRpY2F0aW5nIHRoYXQgaXQgaXMgZnVsbHkgYXdha2UpIGJlZm9yZSBzZW5kaW5nIGZyYW1lcy4KKyogICAyOiAqKlJFU0VSVkVEKiouIFRoaXMgdmFsdWUgKipNVVNUIE5PVCoqIGJlIHNldCBieSB0aGUgaG9zdC4gSWYKKyAgICByZWNlaXZlZCBieSB0aGUgTkNQLCB0aGUgTkNQICoqU0hPVUxEKiogY29uc2lkZXIgdGhpcyBhcyBhIHN5bm9ueW0KKyAgICBvZiBgSE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQYC4KKyogICAzOiBgSE9TVF9QT1dFUl9TVEFURV9MT1dfUE9XRVJgOiBUaGUgaG9zdCBpcyBpbiBhIGxvdyBwb3dlciBzdGF0ZQorICAgIHdoZXJlIGl0IGNhbiBiZSBpbW1lZGlhdGVseSB3b2tlbiBieSB0aGUgTkNQLiBUaGUgTkNQICoqU0hPVUxEKioKKyAgICBhdm9pZCBzZW5kaW5nIHVubmVjZXNzYXJ5IHByb3BlcnR5IHVwZGF0ZXMsIHN1Y2ggYXMgY2hpbGQgdGFibGUKKyAgICB1cGRhdGVzIG9yIG5vbi1jcml0aWNhbCBtZXNzYWdlcyBvbiB0aGUgZGVidWcgc3RyZWFtLgorKiAgIDQ6IGBIT1NUX1BPV0VSX1NUQVRFX09OTElORWA6IFRoZSBob3N0IGlzIGF3YWtlIGFuZCByZXNwb25zaXZlLiBObworICAgIHNwZWNpYWwgZmlsdGVyaW5nIGlzIHBlcmZvcm1lZCBieSB0aGUgTkNQIG9uIGFzeW5jaHJvbm91cyB1cGRhdGVzLgorKiAgIEFsbCBvdGhlciB2YWx1ZXMgYXJlICoqUkVTRVJWRUQqKi4gVGhleSBNVVNUIE5PVCBiZSBzZXQgYnkgdGhlCisgICAgaG9zdC4gSWYgcmVjZWl2ZWQgYnkgdGhlIE5DUCwgdGhlIE5DUCAqKlNIT1VMRCoqIGNvbnNpZGVyIHRoZSB2YWx1ZSBhcworICAgIGEgc3lub255bSBvZiBgSE9TVF9QT1dFUl9TVEFURV9MT1dfUE9XRVJgLgorCis8IS0tIFJRCisgIC0tIFdlIHNob3VsZCBjb25zaWRlciByZXZlcnNpbmcgdGhlIG51bWJlcmluZyBoZXJlIHNvIHRoYXQgMCBpcworICAgICBgUE9XRVJfU1RBVEVfT05MSU5FYC4gV2UgbWF5IGFsc28gd2FudCB0byBpbmNsdWRlIHNvbWUgZXh0cmEKKyAgICAgdmFsdWVzIGJldHdlZW4gdGhlIGRlZmluZWQgdmFsdWVzIGZvciBmdXR1cmUgZXhwYW5zaW9uLCBzbworICAgICB0aGF0IHdlIGNhbiBwcmVzZXJ2ZSB0aGUgb3JkZXJlZCByZWxhdGlvbnNoaXAuIC0tIC0tPgorCitBZnRlciBzZXR0aW5nIHRoaXMgcG93ZXIgc3RhdGUsIGFueSBmdXJ0aGVyIGNvbW1hbmRzIGZyb20gdGhlIGhvc3QgdG8KK3RoZSBOQ1Agd2lsbCBjYXVzZSBgSE9TVF9QT1dFUl9TVEFURWAgdG8gYXV0b21hdGljYWxseSByZXZlcnQgdG8KK2BIT1NUX1BPV0VSX1NUQVRFX09OTElORWAuCisKK1doZW4gdGhlIGhvc3QgaXMgZW50ZXJpbmcgYSBsb3ctcG93ZXIgc3RhdGUsIGl0IHNob3VsZCB3YWl0IGZvciB0aGUKK3Jlc3BvbnNlIGZyb20gdGhlIE5DUCBhY2tub3dsZWRnaW5nIHRoZSBjb21tYW5kICh3aXRoIGBDTURfVkFMVUVfSVNgKS4KK09uY2UgdGhhdCBhY2tub3dsZWRnZW1lbnQgaXMgcmVjZWl2ZWQgdGhlIGhvc3QgbWF5IGVudGVyIHRoZSBsb3ctcG93ZXIKK3N0YXRlLgorCitJZiB0aGUgTkNQIGhhcyB0aGUgYENBUF9VTlNPTF9VUERBVEVfRklMVEVSYCBjYXBhYmlsaXR5LCBhbnkgdW5zb2xpY2l0ZWQKK3Byb3BlcnR5IHVwZGF0ZXMgbWFza2VkIGJ5IGBQUk9QX1VOU09MX1VQREFURV9GSUxURVJgIHNob3VsZCBiZSBob25vcmVkCit3aGlsZSB0aGUgaG9zdCBpbmRpY2F0ZXMgaXQgaXMgaW4gYSBsb3ctcG93ZXIgc3RhdGUuIEFmdGVyIHJlc3VtaW5nIHRvIHRoZQorYEhPU1RfUE9XRVJfU1RBVEVfT05MSU5FYCBzdGF0ZSwgdGhlIHZhbHVlIG9mIGBQUk9QX1VOU09MX1VQREFURV9GSUxURVJgCisqKk1VU1QqKiBiZSB1bmNoYW5nZWQgZnJvbSB0aGUgdmFsdWUgYXNzaWduZWQgcHJpb3IgdG8gdGhlIGhvc3QgaW5kaWNhdGluZworaXQgd2FzIGVudGVyaW5nIGEgbG93LXBvd2VyIHN0YXRlLgorCitUaGUgaG9zdCAqKk1VU1QqKiBvbmx5IHVzZSB0aGlzIHByb3BlcnR5IGZyb20gTkxJIDAuIEJlaGF2aW9yIHdoZW4gdXNlZAorZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4KKworIyMjIFBST1AgNDEwNDogUFJPUF9VTlNPTF9VUERBVEVfRklMVEVSIHsjcHJvcC11bnNvbC11cGRhdGUtZmlsdGVyfQorCisqIFJlcXVpcmVkIG9ubHkgaWYgYENBUF9VTlNPTF9VUERBVEVfRklMVEVSYCBpcyBzZXQuCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQShJKWAKKyogRGVmYXVsdCB2YWx1ZTogRW1wdHkuCisKK0NvbnRhaW5zIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIGFyZSAqZXhjbHVkZWQqIGZyb20gZ2VuZXJhdGluZwordW5zb2xpY2l0ZWQgdmFsdWUgdXBkYXRlcy4gVGhpcyBwcm9wZXJ0eSAqKk1VU1QqKiBiZSBlbXB0eSBhZnRlciByZXNldC4KKworSW4gb3RoZXIgd29yZHMsIHRoZSBob3N0IG1heSBvcHQtb3V0IG9mIHVuc29saWNpdGVkIHByb3BlcnR5IHVwZGF0ZXMKK2ZvciBhIHNwZWNpZmljIHByb3BlcnR5IGJ5IGFkZGluZyB0aGF0IHByb3BlcnR5IGlkIHRvIHRoaXMgbGlzdC4KKworSG9zdHMgKipTSE9VTEQgTk9UKiogYWRkIHByb3BlcnRpZXMgdG8gdGhpcyBsaXN0IHdoaWNoIGFyZSBub3QKK3ByZXNlbnQgaW4gYFBST1BfVU5TT0xfVVBEQVRFX0xJU1RgLiBJZiBzdWNoIHByb3BlcnRpZXMgYXJlIGFkZGVkLAordGhlIE5DUCAqKk1VU1QqKiBpZ25vcmUgdGhlIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMuCisKKzwhLS0gUlEKKyAgLS0gVGhlIGp1c3RpZmljYXRpb24gZm9yIHRoZSBhYm92ZSBiZWhhdmlvciBpcyB0byBhdHRlbXB0IHRvIGF2b2lkIHBvc3NpYmxlCisgICAgIGZ1dHVyZSBpbnRlcm9wIHByb2JsZW1zIGJ5IGV4cGxpY2l0bHkgbWFraW5nIHN1cmUgdGhhdCB1bmtub3duCisgICAgIHByb3BlcnRpZXMgYXJlIGlnbm9yZWQuIFNpbmNlIHVua25vd24gcHJvcGVydGllcyB3aWxsIG9idmlvdXNseSBub3QgYmUKKyAgICAgZ2VuZXJhdGluZyB1bnNvbGljaXRlZCB1cGRhdGVzLCBpdCBzZWVtcyBmYWlybHkgaGFybWxlc3MuIEFuCisgICAgIGltcGxlbWVudGF0aW9uIG1heSBwcmludCBvdXQgYSB3YXJuaW5nIHRvIHRoZSBkZWJ1ZyBzdHJlYW0uCisKKyAgICAgTm90ZSB0aGF0IHRoZSBlcnJvciBpcyBzdGlsbCBkZXRlY3RhYmxlOiBJZiB5b3UgVkFMVUVcX1NFVCB1bnN1cHBvcnRlZAorICAgICBwcm9wZXJ0aWVzLCB0aGUgcmVzdWx0aW5nIFZBTFVFXF9JUyB3b3VsZCBjb250YWluIG9ubHkgdGhlIHN1cHBvcnRlZAorICAgICBwcm9wZXJ0aWVzIG9mIHRoYXQgc2V0KHNpbmNlIHRoZSB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzIHdvdWxkIGJlCisgICAgIGlnbm9yZWQpLiBJZiBhbiBpbXBsZW1lbnRhdGlvbiBjYXJlcyB0aGF0IG11Y2ggYWJvdXQgZ2V0dGluZyB0aGlzCisgICAgIHJpZ2h0IHRoZW4gaXQgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgaXQgY2hlY2tzCisgICAgIFBST1BcX1VOU09MXF9VUERBVEVcX0xJU1QgZmlyc3QuCisgIC0tIC0tPgorCitJbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBwcm9wZXJ0eSBhcmUgb25seSAqKlJFUVVJUkVEKiogdG8gc3VwcG9ydAorYW5kIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorCisqIGBDTURfUFJPUF9WQUxVRV9HRVRgICgoI2NtZC1wcm9wLXZhbHVlLWdldCkpCisqIGBDTURfUFJPUF9WQUxVRV9TRVRgICgoI2NtZC1wcm9wLXZhbHVlLXNldCkpCisqIGBDTURfUFJPUF9WQUxVRV9JU2AgKCgjY21kLXByb3AtdmFsdWUtaXMpKQorCitJbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBwcm9wZXJ0eSAqKk1BWSoqIG9wdGlvbmFsbHkgc3VwcG9ydCBhbmQgdXNlCit0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorCisqIGBDTURfUFJPUF9WQUxVRV9JTlNFUlRgICgoI2NtZC1wcm9wLXZhbHVlLWluc2VydCkpCisqIGBDTURfUFJPUF9WQUxVRV9SRU1PVkVgICgoI2NtZC1wcm9wLXZhbHVlLXJlbW92ZSkpCisqIGBDTURfUFJPUF9WQUxVRV9JTlNFUlRFRGAgKCgjY21kLXByb3AtdmFsdWUtaW5zZXJ0ZWQpKQorKiBgQ01EX1BST1BfVkFMVUVfUkVNT1ZFRGAgKCgjY21kLXByb3AtdmFsdWUtcmVtb3ZlZCkpCisKK0hvc3QgaW1wbGVtZW50YXRpb25zIHdoaWNoIGFyZSBhaW1pbmcgdG8gbWF4aW1pemUgdGhlaXIgY29tcGF0YWJpbGl0eSBhY3Jvc3MKK2RpZmZlcmVudCBmaXJtd3JlIGltcGxlbWVudGF0aW9ucyAqKlNIT1VMRCBOT1QqKiBhc3N1bWUgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUKK29wdGlvbmFsIGNvbW1hbmRzIGZvciB0aGlzIHByb3BlcnR5LgorCitUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSAqKlNIQUxMKiogYmUgaW5kZXBlbmRlbnQgZm9yIGVhY2ggTkxJLgorCisjIyMgUFJPUCA0MTA1OiBQUk9QX1VOU09MX1VQREFURV9MSVNUIHsjcHJvcC11bnNvbC11cGRhdGUtbGlzdH0KKworKiBSZXF1aXJlZCBvbmx5IGlmIGBDQVBfVU5TT0xfVVBEQVRFX0ZJTFRFUmAgaXMgc2V0LgorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgQShJKWAKKworQ29udGFpbnMgYSBsaXN0IG9mIHByb3BlcnRpZXMgd2hpY2ggYXJlIGNhcGFibGUgb2YgZ2VuZXJhdGluZwordW5zb2xpY2l0ZWQgdmFsdWUgdXBkYXRlcy4gVGhpcyBsaXN0IGNhbiBiZSB1c2VkIHdoZW4gcG9wdWxhdGluZworYFBST1BfVU5TT0xfVVBEQVRFX0ZJTFRFUmAgdG8gZGlzYWJsZSBhbGwgdW5zb2xpY2l0ZWQgcHJvcGVydHkKK3VwZGF0ZXMuCisKK1RoaXMgcHJvcGVydHkgaXMgaW50ZW5kZWQgdG8gZWZmZWN0aXZlbHkgYmVoYXZlIGFzIGEgY29uc3RhbnQKK2ZvciBhIGdpdmVuIE5DUCBmaXJtd2FyZS4KKworTm90ZSB0aGF0IG5vdCBhbGwgcHJvcGVydGllcyB0aGF0IHN1cHBvcnQgdW5zb2xpY2l0ZWQgdXBkYXRlcyBuZWVkIHRvCitiZSBsaXN0ZWQgaGVyZS4gU2NhbiByZXN1bHRzLCBmb3IgZXhhbXBsZSwgYXJlIG9ubHkgZ2VuZXJhdGVkIGR1ZSB0bworZGlyZWN0IGFjdGlvbiBvbiB0aGUgcGFydCBvZiB0aGUgaG9zdCwgc28gdGhvc2UgcHJvcGVydGllcyAqKk1VU1QgTk9UKioKK25vdCBiZSBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuCisKK1RoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5ICoqTUFZKiogYmUgZGlmZmVyZW50IGFjcm9zcyBhdmFpbGFibGUKK05MSXMuCisKKyMjIFN0cmVhbSBQcm9wZXJ0aWVzIHsjcHJvcC1zdHJlYW19CisKKyMjIyBQUk9QIDExMjogUFJPUF9TVFJFQU1fREVCVUcgeyNwcm9wLXN0cmVhbS1kZWJ1Z30KKworKiBUeXBlOiBSZWFkLU9ubHktU3RyZWFtCisqIFBhY2tlZC1FbmNvZGluZzogYERgCisKK09jdGV0czogfCAgICAqbioKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLQorRmllbGRzOiB8IFVURjhfREFUQQorCitUaGlzIHByb3BlcnR5IGlzIGEgc3RyZWFtaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoYXQgeW91IGNhbm5vdCBleHBsaWNpdGx5CitmZXRjaCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4gVGhlIHN0cmVhbSBwcm92aWRlcyBodW1hbi1yZWFkYWJsZSBkZWJ1Z2dpbmcKK291dHB1dCB3aGljaCBtYXkgYmUgZGlzcGxheWVkIGluIHRoZSBob3N0IGxvZ3MuCisKK1RoZSBsb2NhdGlvbiBvZiBuZXdsaW5lIGNoYXJhY3RlcnMgaXMgbm90IGFzc3VtZWQgYnkgdGhlIGhvc3Q6IGl0IGlzCit0aGUgTkNQJ3MgcmVzcG9uc2liaWxpdHkgdG8gaW5zZXJ0IG5ld2xpbmUgY2hhcmFjdGVycyB3aGVyZSBuZWVkZWQsCitqdXN0IGxpa2Ugd2l0aCBhbnkgb3RoZXIgdGV4dCBzdHJlYW0uCisKK1RvIHJlY2VpdmUgdGhlIGRlYnVnZ2luZyBzdHJlYW0sIHlvdSB3YWl0IGZvciBgQ01EX1BST1BfVkFMVUVfSVNgCitjb21tYW5kcyBmb3IgdGhpcyBwcm9wZXJ0eSBmcm9tIHRoZSBOQ1AuCisKKyMjIyBQUk9QIDExMzogUFJPUF9TVFJFQU1fUkFXIHsjcHJvcC1zdHJlYW0tcmF3fQorCisqIFR5cGU6IFJlYWQtV3JpdGUtU3RyZWFtCisqIFBhY2tlZC1FbmNvZGluZzogYGREYAorCitPY3RldHM6IHwgICAgICAgIDIgICAgICAgfCAgICAgKm4qICAgIHwgICAgICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgRlJBTUVfREFUQV9MRU4gfCBGUkFNRV9EQVRBIHwgRlJBTUVfTUVUQURBVEEKKworVGhpcyBzdHJlYW0gcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgb2Ygc2VuZGluZyBhbmQgcmVjZWl2aW5nIHJhdyBwYWNrZXRzCit0byBhbmQgZnJvbSB0aGUgcmFkaW8uIFRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIGZyYW1lIG1ldGFkYXRhIGFuZCBkYXRhIGlzCitkZXBlbmRlbnQgb24gdGhlIE1BQyBhbmQgUEhZIGJlaW5nIHVzZWQuCisKK1RoaXMgcHJvcGVydHkgaXMgYSBzdHJlYW1pbmcgcHJvcGVydHksIG1lYW5pbmcgdGhhdCB5b3UgY2Fubm90IGV4cGxpY2l0bHkKK2ZldGNoIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LiBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdSB3YWl0IGZvcgorYENNRF9QUk9QX1ZBTFVFX0lTYCBjb21tYW5kcyB3aXRoIHRoaXMgcHJvcGVydHkgaWQgZnJvbSB0aGUgTkNQLgorCitJbXBsZW1lbnRhdGlvbnMgbWF5IE9QVElPTkFMTFkgc3VwcG9ydCB0aGUgYWJpbGl0eSB0byB0cmFuc21pdCBhcmJpdHJhcnkKK3JhdyBwYWNrZXRzLiBTdXBwb3J0IGZvciB0aGlzIGZlYXR1cmUgaXMgaW5kaWNhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGUKK2BDQVBfV1JJVEFCTEVfUkFXX1NUUkVBTWAgY2FwYWJpbGl0eS4KKworSWYgdGhlIGNhcGFiaWxpdHkgYENBUF9XUklUQUJMRV9SQVdfU1RSRUFNYCBpcyBzZXQsIHRoZW4gcGFja2V0cyB3cml0dGVuCit0byB0aGlzIHN0cmVhbSB3aXRoIGBDTURfUFJPUF9WQUxVRV9TRVRgIHdpbGwgYmUgc2VudCBvdXQgb3ZlciB0aGUgcmFkaW8uCitUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIHVzZSB0aGUgcmFkaW8gZGlyZWN0bHksIHdpdGggdGhlIHN0YWNrIGJlaW5nCitpbXBsZW1lbnRlZCBvbiB0aGUgaG9zdCBpbnN0ZWFkIG9mIHRoZSBOQ1AuCisKKyMjIyMgRnJhbWUgTWV0YWRhdGEgRm9ybWF0IHsjZnJhbWUtbWV0YWRhdGEtZm9ybWF0fQorCitBbnkgZGF0YSBwYXN0IHRoZSBlbmQgb2YgYEZSQU1FX0RBVEFfTEVOYCBpcyBjb25zaWRlcmVkIG1ldGFkYXRhIGFuZCBpcworT1BUSU9OQUwuIEZyYW1lIG1ldGFkYXRhIE1BWSBiZSBlbXB0eSBvciBwYXJ0aWFsbHkgc3BlY2lmaWVkLiBQYXJ0aWFsbHkKK3NwZWNpZmllZCBtZXRhZGF0YSBNVVNUIGJlIGFjY2VwdGVkLiBEZWZhdWx0IHZhbHVlcyBhcmUgdXNlZCBmb3IgYWxsCit1bnNwZWNpZmllZCBmaWVsZHMuCisKK1RoZSBzYW1lIGdlbmVyYWwgZm9ybWF0IGlzIHVzZWQgZm9yIGBQUk9QX1NUUkVBTV9SQVdgLCBgUFJPUF9TVFJFQU1fTkVUYCwKK2FuZCBgUFJPUF9TVFJFQU1fTkVUX0lOU0VDVVJFYC4gSXQgY2FuIGJlIHVzZWQgZm9yIGZyYW1lcyBzZW50IGZyb20gdGhlCitOQ1AgdG8gdGhlIGhvc3QgYXMgd2VsbCBhcyBmcmFtZXMgc2VudCBmcm9tIHRoZSBob3N0IHRvIHRoZSBOQ1AuCisKK1RoZSBmcmFtZSBtZXRhZGF0YSBmaWVsZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZpZWxkczoKKworIEZpZWxkICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICAgICB8IExlbiAgIHwgRGVmYXVsdAorOi0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS18LS0tLS0tLXwtLS0tLS0tLS0tCitNRF9QT1dFUiB8IChkQm0pIFJTU0kvVFgtUG93ZXIgICAgICAgICAgfCBgY2AgaW50OCAgIHwgMSAgICAgfCAtMTI4CitNRF9OT0lTRSB8IChkQm0pIE5vaXNlIGZsb29yICAgICAgICAgICAgfCBgY2AgaW50OCAgIHwgMSAgICAgfCAtMTI4CitNRF9GTEFHICB8IEZsYWdzIChkZWZpbmVkIGJlbG93KSAgICAgICAgfCBgU2AgdWludDE2IHwgMiAgICAgfAorTURfUEhZICAgfCBQSFktc3BlY2lmaWMgZGF0YSAgICAgICAgICAgIHwgYGRgIGRhdGEgICB8ID49MiAgIHwKK01EX1ZFTkQgIHwgVmVuZG9yLXNwZWNpZmljIGRhdGEgICAgICAgICB8IGBkYCBkYXRhICAgfCA+PTIgICB8CisKK1RoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBpZ25vcmVkIGJ5IHRoZSBOQ1AgZm9yIHBhY2tldHMgc2VudCB0byBpdCBmcm9tCit0aGUgaG9zdDoKKworKiBNRF9OT0lTRQorKiBNRF9GTEFHCisKK1doZW4gc3BlY2lmeWluZyBgTURfUE9XRVJgIGZvciBhIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZCwgdGhlIGFjdHVhbAordHJhbnNtaXQgcG93ZXIgaXMgbmV2ZXIgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYFBST1BfUEhZX1RYX1BPV0VSYAorKCgjcHJvcC1waHktdHgtcG93ZXIpKS4gV2hlbiBsZWZ0IHVuc3BlY2lmaWVkIChvciBzZXQgdG8gdGhlIHZhbHVlIC0xMjgpLAorYW4gYXBwcm9wcmlhdGUgdHJhbnNtaXQgcG93ZXIgd2lsbCBiZSBjaG9zZW4gYnkgdGhlIE5DUC4KKworVGhlIGJpdCB2YWx1ZXMgaW4gYE1EX0ZMQUdgIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CisKKyBCaXQgICAgIHwgTWFzayAgIHwgTmFtZSAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiBpZiBzZXQKKy0tLS0tLS0tLXwtLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tCisxNSAgICAgICB8IDB4MDAwMSB8IE1EX0ZMQUdfVFggICAgICAgIHwgUGFja2V0IHdhcyB0cmFuc21pdHRlZCwgbm90IHJlY2VpdmVkLgorMTMgICAgICAgfCAweDAwMDQgfCBNRF9GTEFHX0JBRF9GQ1MgICB8IFBhY2tldCB3YXMgcmVjZWl2ZWQgd2l0aCBiYWQgRkNTCisxMiAgICAgICB8IDB4MDAwOCB8IE1EX0ZMQUdfRFVQRSAgICAgIHwgUGFja2V0IHNlZW1zIHRvIGJlIGEgZHVwbGljYXRlCiswLTExLCAxNCB8IDB4RkZGMiB8IE1EX0ZMQUdfUkVTRVJWRUQgIHwgRmxhZ3MgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCisKK1RoZSBmb3JtYXQgb2YgYE1EX1BIWWAgaXMgc3BlY2lmaWVkIGJ5IHRoZSBQSFkgbGF5ZXIgY3VycmVudGx5IGluIHVzZSwKK2FuZCBtYXkgY29udGFpbiBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBjaGFubmVsLCBMUUksIGFudGVubmEsIG9yIG90aGVyCitwZXJ0YWluZW50IGluZm9ybWF0aW9uLgorCisjIyMgUFJPUCAxMTQ6IFBST1BfU1RSRUFNX05FVCB7I3Byb3Atc3RyZWFtLW5ldH0KKworKiBUeXBlOiBSZWFkLVdyaXRlLVN0cmVhbQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBkRGAKKworT2N0ZXRzOiB8ICAgICAgICAyICAgICAgIHwgICAgICpuKiAgICB8ICAgICAgICpuKgorLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEZSQU1FX0RBVEFfTEVOIHwgRlJBTUVfREFUQSB8IEZSQU1FX01FVEFEQVRBCisKK1RoaXMgc3RyZWFtIHByb3ZpZGVzIHRoZSBjYXBhYmlsaXR5IG9mIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBkYXRhIHBhY2tldHMKK3RvIGFuZCBmcm9tIHRoZSBjdXJyZW50bHkgYXR0YWNoZWQgbmV0d29yay4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgZnJhbWUKK21ldGFkYXRhIGFuZCBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgbmV0d29yayBwcm90b2NvbCBiZWluZyB1c2VkLgorCitUaGlzIHByb3BlcnR5IGlzIGEgc3RyZWFtaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoYXQgeW91IGNhbm5vdCBleHBsaWNpdGx5CitmZXRjaCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4gVG8gcmVjZWl2ZSB0cmFmZmljLCB5b3Ugd2FpdCBmb3IKK2BDTURfUFJPUF9WQUxVRV9JU2AgY29tbWFuZHMgd2l0aCB0aGlzIHByb3BlcnR5IGlkIGZyb20gdGhlIE5DUC4KKworVG8gc2VuZCBuZXR3b3JrIHBhY2tldHMsIHlvdSBjYWxsIGBDTURfUFJPUF9WQUxVRV9TRVRgIG9uIHRoaXMgcHJvcGVydHkgd2l0aAordGhlIHZhbHVlIG9mIHRoZSBwYWNrZXQuCisKK0FueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiBgRlJBTUVfREFUQV9MRU5gIGlzIGNvbnNpZGVyZWQgbWV0YWRhdGEsIHRoZQorZm9ybWF0IG9mIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiAoI2ZyYW1lLW1ldGFkYXRhLWZvcm1hdCkuCisKKyMjIyBQUk9QIDExNTogUFJPUF9TVFJFQU1fTkVUX0lOU0VDVVJFIHsjcHJvcC1zdHJlYW0tbmV0LWluc2VjdXJlfQorCisqIFR5cGU6IFJlYWQtV3JpdGUtU3RyZWFtCisqIFBhY2tlZC1FbmNvZGluZzogYGREYAorCitPY3RldHM6IHwgICAgICAgIDIgICAgICAgfCAgICAgKm4qICAgIHwgICAgICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgRlJBTUVfREFUQV9MRU4gfCBGUkFNRV9EQVRBIHwgRlJBTUVfTUVUQURBVEEKKworVGhpcyBzdHJlYW0gcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgb2Ygc2VuZGluZyBhbmQgcmVjZWl2aW5nIHVuZW5jcnlwdGVkCithbmQgdW5hdXRoZW50aWNhdGVkIGRhdGEgcGFja2V0cyB0byBhbmQgZnJvbSBuZWFyYnkgZGV2aWNlcyBmb3IgdGhlCitwdXJwb3NlcyBvZiBkZXZpY2UgY29tbWlzc2lvbmluZy4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgZnJhbWUKK21ldGFkYXRhIGFuZCBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgbmV0d29yayBwcm90b2NvbCBiZWluZyB1c2VkLgorCitUaGlzIHByb3BlcnR5IGlzIGEgc3RyZWFtaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoYXQgeW91IGNhbm5vdCBleHBsaWNpdGx5CitmZXRjaCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4gVG8gcmVjZWl2ZSB0cmFmZmljLCB5b3Ugd2FpdCBmb3IKK2BDTURfUFJPUF9WQUxVRV9JU2AgY29tbWFuZHMgd2l0aCB0aGlzIHByb3BlcnR5IGlkIGZyb20gdGhlIE5DUC4KKworVG8gc2VuZCBuZXR3b3JrIHBhY2tldHMsIHlvdSBjYWxsIGBDTURfUFJPUF9WQUxVRV9TRVRgIG9uIHRoaXMgcHJvcGVydHkgd2l0aAordGhlIHZhbHVlIG9mIHRoZSBwYWNrZXQuCisKK0FueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiBgRlJBTUVfREFUQV9MRU5gIGlzIGNvbnNpZGVyZWQgbWV0YWRhdGEsIHRoZQorZm9ybWF0IG9mIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiAoI2ZyYW1lLW1ldGFkYXRhLWZvcm1hdCkuCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLWRlYnVnLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AtZGVidWcubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyNjI2MQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLWRlYnVnLm1kCkBAIC0wLDAgKzEsMzIgQEAKKyMjIERlYnVnIFByb3BlcnRpZXMgeyNwcm9wLWRlYnVnfQorCisjIyMgUFJPUCAxNjM4NDogUFJPUF9ERUJVR19URVNUX0FTU0VSVCB7I3Byb3AtZGVidWctdGVzdC1hc3NlcnR9CisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitSZWFkaW5nIHRoaXMgcHJvcGVydHkgd2lsbCBjYXVzZSBhbiBhc3NlcnQgb24gdGhlIE5DUC4gVGhpcworaXMgaW50ZW5kZWQgZm9yIHRlc3RpbmcgdGhlIGFzc2VydCBmdW5jdGlvbmFsaXR5IG9mCit1bmRlcmx5aW5nIHBsYXRmb3JtL05DUC4gQXNzZXJ0IHNob3VsZCBpZGVhbGx5IGNhdXNlIHRoZQorTkNQIHRvIHJlc2V0LCBidXQgaWYgYGFzc2VydGAgaXMgbm90IHN1cHBvcnRlZCBvciBkaXNhYmxlZAorYm9vbGVhbiB2YWx1ZSBvZiBgZmFsc2VgIGlzIHJldHVybmVkIGluIHJlc3BvbnNlLgorCisjIyMgUFJPUCAxNjM4NTogUFJPUF9ERUJVR19OQ1BfTE9HX0xFVkVMIHsjcHJvcC1kZWJ1Zy1uY3AtbG9nLWxldmVsfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKK1Byb3ZpZGVzIGFjY2VzcyB0byB0aGUgTkNQIGxvZyBsZXZlbC4gQ3VycmVudGx5IGRlZmluZWQgdmFsdWVzIGFyZSAod2hpY2ggZm9sbG93cwordGhlIFJGQyA1NDI0KToKKworICogIDA6IEVtZXJnZW5jeSAoZW1lcmcpLgorICogIDE6IEFsZXJ0IChhbGVydCkuCisgKiAgMjogQ3JpdGljYWwgKGNyaXQpLgorICogIDM6IEVycm9yIChlcnIpLgorICogIDQ6IFdhcm5pbmcgKHdhcm4pLgorICogIDU6IE5vdGljZSAobm90aWNlKS4KKyAqICA2OiBJbmZvcm1hdGlvbiAoaW5mbykuCisgKiAgNzogRGVidWcgKGRlYnVnKS4KKworSWYgdGhlIE5DUCBzdXBwb3J0cyBkeW5hbWljIGxvZyBsZXZlbCBjb250cm9sLCBzZXR0aW5nIHRoaXMgcHJvcGVydHkKK2NoYW5nZXMgdGhlIGxvZyBsZXZlbCBhY2NvcmRpbmdseS4gR2V0dGluZyB0aGUgdmFsdWUgcmV0dXJucyB0aGUgY3VycmVudAorbG9nIGxldmVsLiAgSWYgdGhlIGR5bmFtaWMgbG9nIGxldmVsIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCwgc2V0dGluZyB0aGlzCitwcm9wZXJ0eSByZXR1cm5zIGEgYFBST1BfTEFTVF9TVEFUVVNgIHdpdGggYFNUQVRVU19JTlZBTElEX0NPTU1BTkRfRk9SX1BST1BgLgpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AtaXB2Ni5tZCBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLWlwdjYubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4NzRkYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLWlwdjYubWQKQEAgLTAsMCArMSw0MSBAQAorIyMgSVB2NiBQcm9wZXJ0aWVzIHsjcHJvcC1pcHY2fQorCisjIyMgUFJPUCA5NjogUFJPUF9JUFY2X0xMX0FERFIgeyNwcm9wLWlwdjYtbGwtYWRkcn0KKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYDZgCisKK0lQdjYgQWRkcmVzcworCisjIyMgUFJPUCA5NzogUFJPUF9JUFY2X01MX0FERFIgeyNwcm9wLWlwdjYtbWwtYWRkcn0KKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYDZgCisKK0lQdjYgQWRkcmVzcyArIFByZWZpeCBMZW5ndGgKKworIyMjIFBST1AgOTg6IFBST1BfSVBWNl9NTF9QUkVGSVggeyNwcm9wLWlwdjYtbWwtcHJlZml4fQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYDZDYAorCitJUHY2IFByZWZpeCArIFByZWZpeCBMZW5ndGgKKworIyMjIFBST1AgOTk6IFBST1BfSVBWNl9BRERSRVNTX1RBQkxFIHsjcHJvcC1pcHY2LWFkZHJlc3MtdGFibGV9CisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQSh0KDZDTExDKSlgCisKK0FycmF5IG9mIHN0cnVjdHVyZXMgY29udGFpbmluZzoKKworKiBgNmA6IElQdjYgQWRkcmVzcworKiBgQ2A6IE5ldHdvcmsgUHJlZml4IExlbmd0aAorKiBgTGA6IFZhbGlkIExpZmV0aW1lCisqIGBMYDogUHJlZmVycmVkIExpZmV0aW1lCisqIGBDYDogRmxhZ3MKKworIyMjIFBST1AgMTAxOiBQUk9QX0lQdjZfSUNNUF9QSU5HX09GRkxPQUQKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitBbGxvdyB0aGUgTkNQIHRvIGRpcmVjdGx5IHJlc3BvbmQgdG8gSUNNUCBwaW5nIHJlcXVlc3RzLiBJZiB0aGlzIGlzCit0dXJuZWQgb24sIHBpbmcgcmVxdWVzdCBJQ01QIHBhY2tldHMgd2lsbCBub3QgYmUgcGFzc2VkIHRvIHRoZSBob3N0LgorCitEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLW1hYy5tZCBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLW1hYy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDMwYzE0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AtbWFjLm1kCkBAIC0wLDAgKzEsMjA0IEBACisjIyBNQUMgUHJvcGVydGllcyB7I3Byb3AtbWFjfQorCisjIyMgUFJPUCA0ODogUFJPUF9NQUNfU0NBTl9TVEFURSB7I3Byb3AtbWFjLXNjYW4tc3RhdGV9CisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQ2AKKyogVW5pdDogRW51bWVyYXRpb24KKworUG9zc2libGUgVmFsdWVzOgorCisqIDA6IGBTQ0FOX1NUQVRFX0lETEVgCisqIDE6IGBTQ0FOX1NUQVRFX0JFQUNPTmAKKyogMjogYFNDQU5fU1RBVEVfRU5FUkdZYAorKiAzOiBgU0NBTl9TVEFURV9ESVNDT1ZFUmAKKworU2V0IHRvIGBTQ0FOX1NUQVRFX0JFQUNPTmAgdG8gc3RhcnQgYW4gYWN0aXZlIHNjYW4uCitCZWFjb25zIHdpbGwgYmUgZW1pdHRlZCBmcm9tIGBQUk9QX01BQ19TQ0FOX0JFQUNPTmAuCisKK1NldCB0byBgU0NBTl9TVEFURV9FTkVSR1lgIHRvIHN0YXJ0IGFuIGVuZXJneSBzY2FuLgorQ2hhbm5lbCBlbmVyZ3kgcmVzdWx0IHdpbGwgYmUgcmVwb3J0ZWQgYnkgZW1pc3Npb25zCitvZiBgUFJPUF9NQUNfRU5FUkdZX1NDQU5fUkVTVUxUYCAocGVyIGNoYW5uZWwpLgorCitTZXQgdG8gYFNDQU5fU1RBVEVfRElTT1ZFUmAgdG8gc3RhcnQgYSBUaHJlYWQgTUxFIGRpc2NvdmVyeQorc2NhbiBvcGVyYXRpb24uIERpc2NvdmVyeSBzY2FuIHJlc3VsdCB3aWxsIGJlIGVtaXR0ZWQgZnJvbQorYFBST1BfTUFDX1NDQU5fQkVBQ09OYC4KKworVmFsdWUgc3dpdGNoZXMgdG8gYFNDQU5fU1RBVEVfSURMRWAgd2hlbiBzY2FuIGlzIGNvbXBsZXRlLgorCisjIyMgUFJPUCA0OTogUFJPUF9NQUNfU0NBTl9NQVNLIHsjcHJvcC1tYWMtc2Nhbi1tYXNrfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYEEoQylgCisqIFVuaXQ6IExpc3Qgb2YgY2hhbm5lbHMgdG8gc2NhbgorCisKKyMjIyBQUk9QIDUwOiBQUk9QX01BQ19TQ0FOX1BFUklPRCB7I3Byb3AtbWFjLXNjYW4tcGVyaW9kfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYFNgICh1aW50MTYpCisqIFVuaXQ6IG1pbGxpc2Vjb25kcyBwZXIgY2hhbm5lbAorCisjIyMgUFJPUCA1MTogUFJPUF9NQUNfU0NBTl9CRUFDT04geyNwcm9wLW1hYy1zY2FuLWJlYWNvbn0KKyogVHlwZTogUmVhZC1Pbmx5LVN0cmVhbQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDY2RkYCAob3IgYENjdChFU1NjKXQoaUNVZGQpYCkKKworT2N0ZXRzOiB8IDEgIHwgICAxICB8ICAgIDIgICAgfCAgICpuKiAgICB8ICAgIDIgICAgfCAgICpuKgorLS0tLS0tLS18LS0tLXwtLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0KK0ZpZWxkczogfCBDSCB8IFJTU0kgfCBNQUNfTEVOIHwgTUFDX0RBVEEgfCBORVRfTEVOIHwgTkVUX0RBVEEKKworU2NhbiBiZWFjb25zIGhhdmUgdHdvIGVtYmVkZGVkIHN0cnVjdHVyZXMgd2hpY2ggY29udGFpbgoraW5mb3JtYXRpb24gYWJvdXQgdGhlIE1BQyBsYXllciBhbmQgdGhlIE5FVCBsYXllci4gVGhlaXIKK2Zvcm1hdCBkZXBlbmRzIG9uIHRoZSBNQUMgYW5kIE5FVCBsYXllciBjdXJyZW50bHkgaW4gdXNlLgorVGhlIGZvcm1hdCBiZWxvdyBpcyBmb3IgYW4gODAyLjE1LjQgTUFDIHdpdGggVGhyZWFkOgorCisqIGBDYDogQ2hhbm5lbAorKiBgY2A6IFJTU0kgb2YgdGhlIGJlYWNvbgorKiBgdGA6IE1BQyBsYXllciBwcm9wZXJ0aWVzICg4MDIuMTUuNCBsYXllciBzaG93biBiZWxvdyBmb3IgY29udmVuaWVuY2UpCisgICogYEVgOiBMb25nIGFkZHJlc3MKKyAgKiBgU2A6IFNob3J0IGFkZHJlc3MKKyAgKiBgU2A6IFBBTi1JRAorICAqIGBjYDogTFFJCisqIE5FVCBsYXllciBwcm9wZXJ0aWVzIChTdGFuZGFyZCBuZXQgbGF5ZXIgc2hvd24gYmVsb3cgZm9yIGNvbnZlbmllbmNlKQorICAqIGBpYDogUHJvdG9jb2wgTnVtYmVyCisgICogYENgOiBGbGFncworICAqIGBVYDogTmV0d29yayBOYW1lCisgICogYGRgOiBYUEFOSUQKKyAgKiBgZGA6IFN0ZWVyaW5nIGRhdGEKKworRXh0cmEgcGFyYW1ldGVycyBtYXkgYmUgYWRkZWQgdG8gZWFjaCBvZiB0aGUgc3RydWN0dXJlcworaW4gdGhlIGZ1dHVyZSwgc28gY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gcmVhZCB0aGUgbGVuZ3RoCit0aGF0IHByZXBlbmRzIGVhY2ggc3RydWN0dXJlLgorCisjIyMgUFJPUCA1MjogUFJPUF9NQUNfMTVfNF9MQUREUiB7I3Byb3AtbWFjLTE1LTQtbGFkZHJ9CisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgRWAKKworVGhlIDgwMi4xNS40IGxvbmcgYWRkcmVzcyBvZiB0aGlzIG5vZGUuCisKK1RoaXMgcHJvcGVydHkgaXMgb25seSBwcmVzZW50IG9uIE5DUHMgd2hpY2ggaW1wbGVtZW50IDgwMi4xNS40CisKKyMjIyBQUk9QIDUzOiBQUk9QX01BQ18xNV80X1NBRERSIHsjcHJvcC1tYWMtMTUtNC1zYWRkcn0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBTYAorCitUaGUgODAyLjE1LjQgc2hvcnQgYWRkcmVzcyBvZiB0aGlzIG5vZGUuCisKK1RoaXMgcHJvcGVydHkgaXMgb25seSBwcmVzZW50IG9uIE5DUHMgd2hpY2ggaW1wbGVtZW50IDgwMi4xNS40CisKKyMjIyBQUk9QIDU0OiBQUk9QX01BQ18xNV80X1BBTklEIHsjcHJvcC1tYWMtMTUtNC1wYW5pZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBTYAorCitUaGUgODAyLjE1LjQgUEFOSUQgdGhpcyBub2RlIGlzIGFzc29jaWF0ZWQgd2l0aC4KKworVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHByZXNlbnQgb24gTkNQcyB3aGljaCBpbXBsZW1lbnQgODAyLjE1LjQKKworIyMjIFBST1AgNTU6IFBST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRCB7I3Byb3AtbWFjLXJhdy1zdHJlYW0tZW5hYmxlZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitTZXQgdG8gdHJ1ZSB0byBlbmFibGUgcmF3IE1BQyBmcmFtZXMgdG8gYmUgZW1pdHRlZCBmcm9tIGBQUk9QX1NUUkVBTV9SQVdgLgorU2VlICgjcHJvcC1zdHJlYW0tcmF3KS4KKworIyMjIFBST1AgNTY6IFBST1BfTUFDX1BST01JU0NVT1VTX01PREUgeyNwcm9wLW1hYy1wcm9taXNjdW91cy1tb2RlfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKK1Bvc3NpYmxlIFZhbHVlczoKKworSWQgfCBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uCistLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0KKyAwIHwgYE1BQ19QUk9NSVNDVU9VU19NT0RFX09GRmAgICAgfCBOb3JtYWwgTUFDIGZpbHRlcmluZyBpcyBpbiBwbGFjZS4KKyAxIHwgYE1BQ19QUk9NSVNDVU9VU19NT0RFX05FVFdPUktgfCBBbGwgTUFDIHBhY2tldHMgbWF0Y2hpbmcgbmV0d29yayBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay4KKyAyIHwgYE1BQ19QUk9NSVNDVU9VU19NT0RFX0ZVTExgICAgfCBBbGwgZGVjb2RlZCBNQUMgcGFja2V0cyBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay4KKworU2VlICgjcHJvcC1zdHJlYW0tcmF3KS4KKworIyMjIFBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVCB7I3Byb3AtbWFjLWVzY2FuLXJlc3VsdH0KKyogVHlwZTogUmVhZC1Pbmx5LVN0cmVhbQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDY2AKKworVGhpcyBwcm9wZXJ0eSBpcyBlbWl0dGVkIGR1cmluZyBlbmVyZ3kgc2NhbiBvcGVyYXRpb24KK3BlciBzY2FubmVkIGNoYW5uZWwgd2l0aCBmb2xsb3dpbmcgZm9ybWF0OgorCisqIGBDYDogQ2hhbm5lbAorKiBgY2A6IFJTU0kgKGluIGRCbSkKKworIyMjIFBST1AgNTg6IFBST1BfTUFDX0RBVEFfUE9MTF9QRVJJT0QgeyNwcm9wLW1hYy1kYXRhLXBvbGwtcGVyaW9kCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgTGAKKworVGhlICh1c2VyLXNwZWNpZmllZCkgZGF0YSBwb2xsICg4MDIuMTUuNCBNQUMgRGF0YSBSZXF1ZXN0KSBwZXJpb2QKK2luIG1pbGxpc2Vjb25kcy4gVmFsdWUgemVybyBtZWFucyB0aGVyZSBpcyBubyB1c2VyLXNwZWNpZmllZAorcG9sbCBwZXJpb2QsIGFuZCB0aGUgbmV0d29yayBzdGFjayBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIHBlcmlvZAorYmFzZWQgb24gdGhlIE1MRSBDaGlsZCBUaW1lb3V0LgorCitJZiB0aGUgdmFsdWUgaXMgbm9uLXplcm8sIGl0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBwZXJpb2QgYmV0d2VlbgorZGF0YSBwb2xsIHRyYW5zbWlzc2lvbnMuIE5vdGUgdGhhdCB0aGUgbmV0d29yayBzdGFjayBtYXkgc2VuZCBkYXRhCityZXF1ZXN0IHRyYW5zbWlzc2lvbnMgbW9yZSBmcmVxdWVudGx5IHdoZW4gZXhwZWN0aW5nIGEgY29udHJvbC1tZXNzYWdlCisoZS5nLiwgd2hlbiB3YWl0aW5nIGZvciBhbiBNTEUgQ2hpbGQgSUQgUmVzcG9uc2UpLgorCitUaGlzIHByb3BlcnR5IGlzIG9ubHkgcHJlc2VudCBvbiBOQ1BzIHdoaWNoIGltcGxlbWVudCA4MDIuMTUuNC4KKworIyMjIFBST1AgNDg2NDogUFJPUF9NQUNfV0hJVEVMSVNUICB7I3Byb3AtbWFjLXdoaXRlbGlzdH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKFQoRWMpKWAKKyogUmVxdWlyZWQgY2FwYWJpbGl0eTogYENBUF9NQUNfV0hJVEVMSVNUYAorCitTdHJ1Y3R1cmUgUGFyYW1ldGVyczoKKworKiBgRWA6IEVVSTY0IGFkZHJlc3Mgb2Ygbm9kZQorKiBgY2A6IE9wdGlvbmFsIFJTU0ktb3ZlcnJpZGUgdmFsdWUuIFRoZSB2YWx1ZSAxMjcgaW5kaWNhdGVzCisgICAgICAgdGhhdCB0aGUgUlNTSS1vdmVycmlkZSBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIGZvciB0aGlzCisgICAgICAgYWRkcmVzcy4gSWYgdGhpcyB2YWx1ZSBpcyBvbWl0dGVkIHdoZW4gc2V0dGluZyBvcgorICAgICAgIGluc2VydGluZywgaXQgaXMgYXNzdW1lZCB0byBiZSAxMjcuIFRoaXMgcGFyYW1ldGVyIGlzCisgICAgICAgaWdub3JlZCB3aGVuIHJlbW92aW5nLgorCisjIyMgUFJPUCA0ODY1OiBQUk9QX01BQ19XSElURUxJU1RfRU5BQkxFRCAgeyNwcm9wLW1hYy13aGl0ZWxpc3QtZW5hYmxlZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorKiBSZXF1aXJlZCBjYXBhYmlsaXR5OiBgQ0FQX01BQ19XSElURUxJU1RgCisKKyMjIyBQUk9QIDQ4Njc6IFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfRU5BQkxFRCAgeyNwcm9wLW1hYy1zcmMtbWF0Y2gtZW5hYmxlZH0KKyogVHlwZTogV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgYmAKKworU2V0IHRvIHRydWUgdG8gZW5hYmxlIHJhZGlvIHNvdXJjZSBtYXRjaGluZyBvciBmYWxzZSB0byBkaXNhYmxlIGl0LiBUaGlzIHByb3BlcnR5CitpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgYFNQSU5FTF9DQVBfTUFDX1JBV2AgY2FwYWJpbGl0eSBpcyBwcmVzZW50LiBUaGUgc291cmNlIG1hdGNoCitmdW5jdGlvbmFsaXR5IGlzIHVzZWQgYnkgcmFkaW9zIHdoZW4gZ2VuZXJhdGluZyBBQ0tzLiBUaGUgc2hvcnQgYW5kIGV4dGVuZGVkIGFkZHJlc3MKK2xpc3RzIGFyZSB1c2VkIGZvciBzZXR0aW5ncyB0aGUgRnJhbWUgUGVuZGluZyBiaXQgaW4gdGhlIEFDS3MuCisKKyMjIyBQUk9QIDQ4Njg6IFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTICB7I3Byb3AtbWFjLXNyYy1tYXRjaC1zaG9ydC1hZGRyZXNzZXN9CisqIFR5cGU6IFdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYEEoUylgCisKK0NvbmZpZ3VyZXMgdGhlIGxpc3Qgb2Ygc2hvcnQgYWRkcmVzc2VzIHVzZWQgZm9yIHNvdXJjZSBtYXRjaGluZy4gVGhpcyBwcm9wZXJ0eQoraXMgb25seSBhdmFpbGFibGUgaWYgdGhlIGBTUElORUxfQ0FQX01BQ19SQVdgIGNhcGFiaWxpdHkgaXMgcHJlc2VudC4KKworU3RydWN0dXJlIFBhcmFtZXRlcnM6CisKKyogYFNgOiBTaG9ydCBhZGRyZXNzIGZvciBoYXJkd2FyZSBnZW5lcmF0ZWQgQUNLcworCisjIyMgUFJPUCA0ODY5OiBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUyAgeyNwcm9wLW1hYy1zcmMtbWF0Y2gtZXh0ZW5kZWQtYWRkcmVzc2VzfQorKiBUeXBlOiBXcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKEUpYAorCitDb25maWd1cmVzIHRoZSBsaXN0IG9mIGV4dGVuZGVkIGFkZHJlc3NlcyB1c2VkIGZvciBzb3VyY2UgbWF0Y2hpbmcuIFRoaXMgcHJvcGVydHkKK2lzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBgU1BJTkVMX0NBUF9NQUNfUkFXYCBjYXBhYmlsaXR5IGlzIHByZXNlbnQuCisKK1N0cnVjdHVyZSBQYXJhbWV0ZXJzOgorCisqIGBFYDogRVVJNjQgYWRkcmVzcyBmb3IgaGFyZHdhcmUgZ2VuZXJhdGVkIEFDS3MKKworIyMjIFBST1AgNDg3MDogUFJPUF9NQUNfQkxBQ0tMSVNUICB7I3Byb3AtbWFjLWJsYWNrbGlzdH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKFQoRSkpYAorKiBSZXF1aXJlZCBjYXBhYmlsaXR5OiBgQ0FQX01BQ19XSElURUxJU1RgCisKK1N0cnVjdHVyZSBQYXJhbWV0ZXJzOgorCisqIGBFYDogRVVJNjQgYWRkcmVzcyBvZiBub2RlCisKKyMjIyBQUk9QIDQ4NzE6IFBST1BfTUFDX0JMQUNLTElTVF9FTkFCTEVEICB7I3Byb3AtbWFjLWJsYWNrbGlzdC1lbmFibGVkfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYGJgCisqIFJlcXVpcmVkIGNhcGFiaWxpdHk6IGBDQVBfTUFDX1dISVRFTElTVGAKKwpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AtbmV0Lm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AtbmV0Lm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOTgxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1uZXQubWQKQEAgLTAsMCArMSw3MCBAQAorIyMgTkVUIFByb3BlcnRpZXMgeyNwcm9wLW5ldH0KKworIyMjIFBST1AgNjQ6IFBST1BfTkVUX1NBVkVEIHsjcHJvcC1uZXQtc2F2ZWR9CisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSBuZXR3b3JrIHN0YXRlIHN0b3JlZC9zYXZlZC4KKworIyMjIFBST1AgNjU6IFBST1BfTkVUX0lGX1VQICB7I3Byb3AtbmV0LWlmLXVwfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYGJgCisKK05ldHdvcmsgaW50ZXJmYWNlIHVwL2Rvd24gc3RhdHVzLiBOb24temVybyAoc2V0IHRvIDEpIGluZGljYXRlcyB1cCwKK3plcm8gaW5kaWNhdGVzIGRvd24uCisKKyMjIyBQUk9QIDY2OiBQUk9QX05FVF9TVEFDS19VUCAgeyNwcm9wLW5ldC1zdGFjay11cH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorKiBVbml0OiBFbnVtZXJhdGlvbgorCitUaHJlYWQgc3RhY2sgb3BlcmF0aW9uYWwgc3RhdHVzLiBOb24temVybyAoc2V0IHRvIDEpIGluZGljYXRlcyB1cCwKK3plcm8gaW5kaWNhdGVzIGRvd24uCisKKyMjIyBQUk9QIDY3OiBQUk9QX05FVF9ST0xFIHsjcHJvcC1uZXQtcm9sZX0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorKiBVbml0OiBFbnVtZXJhdGlvbgorCitWYWx1ZXM6CisKKyogMDogYE5FVF9ST0xFX0RFVEFDSEVEYAorKiAxOiBgTkVUX1JPTEVfQ0hJTERgCisqIDI6IGBORVRfUk9MRV9ST1VURVJgCisqIDM6IGBORVRfUk9MRV9MRUFERVJgCisKKyMjIyBQUk9QIDY4OiBQUk9QX05FVF9ORVRXT1JLX05BTUUgIHsjcHJvcC1uZXQtbmV0d29yay1uYW1lfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYFVgCisKKyMjIyBQUk9QIDY5OiBQUk9QX05FVF9YUEFOSUQgICB7I3Byb3AtbmV0LXhwYW5pZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBEYAorCisjIyMgUFJPUCA3MDogUFJPUF9ORVRfTUFTVEVSX0tFWSAgIHsjcHJvcC1uZXQtbWFzdGVyLWtleX0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBEYAorCisjIyMgUFJPUCA3MTogUFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIgICB7I3Byb3AtbmV0LWtleS1zZXF1ZW5jZS1jb3VudGVyfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYExgCisKKyMjIyBQUk9QIDcyOiBQUk9QX05FVF9QQVJUSVRJT05fSUQgICB7I3Byb3AtbmV0LXBhcnRpdGlvbi1pZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBMYAorCitUaGUgcGFydGl0aW9uIElEIG9mIHRoZSBwYXJ0aXRpb24gdGhhdCB0aGlzIG5vZGUgaXMgYSBtZW1iZXIgb2YuCisKKyMjIyBQUk9QIDczOiBQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkcgICB7I3Byb3AtbmV0LXJlcXVpcmUtam9pbi1leGlzdGluZ30KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCisjIyMgUFJPUCA3NDogUFJPUF9ORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUUgICB7I3Byb3AtbmV0LWtleS1zd3RpY2gtZ3VhcmR0aW1lfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYExgCisKKyMjIyBQUk9QIDc1OiBQUk9QX05FVF9QU0tDICAgeyNwcm9wLW5ldC1wc2tjfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYERgCisKKwpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3Atb3ZlcnZpZXcubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1vdmVydmlldy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjc3YTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3Atb3ZlcnZpZXcubWQKQEAgLTAsMCArMSw2OSBAQAorU3BpbmVsIGlzIGxhcmdlbHkgYSBwcm9wZXJ0eS1iYXNlZCBwcm90b2NvbCwgc2ltaWxhciB0byByZXByZXNlbnRhdGlvbmFsIHN0YXRlIHRyYW5zZmVyIChSRVNUKSwgd2l0aCBhIHByb3BlcnR5IGRlZmluZWQgZm9yIGV2ZXJ5IGF0dHJpYnV0ZSB0aGF0IGFuIE9TIG5lZWRzIHRvIGNyZWF0ZSwgcmVhZCwgdXBkYXRlIG9yIGRlbGV0ZSBpbiB0aGUgZnVuY3Rpb24gb2YgYW4gSVB2NiBpbnRlcmZhY2UuIFRoZSBpbnNwaXJhdGlvbiBvZiB0aGlzIGFwcHJvYWNoIHdhcyBtZW1vcnktbWFwcGVkIGhhcmR3YXJlIHJlZ2lzdGVycyBmb3IgcGVyaXBoZXJhbHMuIFRoZSBnb2FsIGlzIHRvIGF2b2lkLCBhcyBtdWNoIGFzIHBvc3NpYmxlLCB0aGUgdXNlIG9mIGxhcmdlIGNvbXBsaWNhdGVkIHN0cnVjdHVyZXMgYW5kL29yIG1ldGhvZCBhcmd1bWVudCBsaXN0cy4gVGhlIHJlYXNvbiBmb3IgYXZvaWRpbmcgdGhlc2UgaXMgYmVjYXVzZSB0aGV5IGhhdmUgYSB0ZW5kZW5jeSB0byBjaGFuZ2UsIGVzcGVjaWFsbHkgZWFybHkgaW4gZGV2ZWxvcG1lbnQuIEFkZGluZyBvciByZW1vdmluZyBhIHByb3BlcnR5IGZyb20gYSBzdHJ1Y3R1cmUgY2FuIHJlbmRlciB0aGUgZW50aXJlIHByb3RvY29sIGluY29tcGF0aWJsZS4gQnkgdXNpbmcgcHJvcGVydGllcywgeW91IHNpbXBseSBleHRlbmQgdGhlIHByb3RvY29sIHdpdGggYW4gYWRkaXRpb25hbCBwcm9wZXJ0eS4KKworQWxtb3N0IGFsbCBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBwcm9wZXJ0aWVzLiBNb3N0IG5ldyBmZWF0dXJlcyB0aGF0IGFyZSBpbml0aWFsbHkgcHJvcG9zZWQgYXMgY29tbWFuZHMgY2FuIGJlIGFkYXB0ZWQgdG8gYmUgcHJvcGVydHktYmFzZWQgaW5zdGVhZC4gTm90YWJsZSBleGNlcHRpb25zIGluY2x1ZGUgIkhvc3QgQnVmZmVyIE9mZmxvYWQiICgoI2ZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZCkpIGFuZCAiTmV0d29yayBTYXZlIiAoKCNmZWF0dXJlLW5ldHdvcmstc2F2ZSkpLgorCitJbiBTcGluZWwsIHByb3BlcnRpZXMgYXJlIGtleWVkIGJ5IGFuIHVuc2lnbmVkIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyLDA5NywxNTEgKFNlZSAoI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyKSkuCisKKyMjIFByb3BlcnR5IE1ldGhvZHMgIyMjCisKK1Byb3BlcnRpZXMgbWF5IHN1cHBvcnQgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCisqICAgYFZBTFVFX0dFVGAgKCgjY21kLXByb3AtdmFsdWUtZ2V0KSkKKyogICBgVkFMVUVfU0VUYCAoKCNjbWQtcHJvcC12YWx1ZS1zZXQpKQorKiAgIGBWQUxVRV9JTlNFUlRgICAoKCNjbWQtcHJvcC12YWx1ZS1pbnNlcnQpKQorKiAgIGBWQUxVRV9SRU1PVkVgICAoKCNjbWQtcHJvcC12YWx1ZS1yZW1vdmUpKQorCitBZGRpdGlvbmFsbHksIHRoZSBOQ1AgY2FuIHNlbmQgdXBkYXRlcyB0byB0aGUgaG9zdCAoZWl0aGVyIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkpIHRoYXQgaW5mb3JtIHRoZSBob3N0IGFib3V0IGNoYW5nZXMgdG8gc3BlY2lmaWMgcHJvcGVydGllczoKKworKiAgIGBWQUxVRV9JU2AgICgoI2NtZC1wcm9wLXZhbHVlLWlzKSkKKyogICBgVkFMVUVfSU5TRVJURURgICAoKCNjbWQtcHJvcC12YWx1ZS1pbnNlcnRlZCkpCisqICAgYFZBTFVFX1JFTU9WRURgICAoKCNjbWQtcHJvcC12YWx1ZS1yZW1vdmVkKSkKKworIyMgUHJvcGVydHkgVHlwZXMgIyMjCisKK0NvbmNlcHR1YWxseSwgdGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB0eXBlcyBvZiBwcm9wZXJ0aWVzOgorCisqICAgU2luZ2xlLXZhbHVlIHByb3BlcnRpZXMKKyogICBNdWx0aXBsZS12YWx1ZSAoQXJyYXkpIHByb3BlcnRpZXMKKyogICBTdHJlYW0gcHJvcGVydGllcworCisjIyMgU2luZ2xlLVZhbHVlIFByb3BlcnRpZXMgIyMjIworCitTaW5nbGUtdmFsdWUgcHJvcGVydGllcyBhcmUgcHJvcGVydGllcyB0aGF0IGhhdmUgYSBzaW1wbGUgcmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgdmFsdWUuIEV4YW1wbGVzIHdvdWxkIGJlOgorCisqICAgQ3VycmVudCByYWRpbyBjaGFubmVsIChSZXByZXNlbnRlZCBhcyBhbiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyKQorKiAgIE5ldHdvcmsgbmFtZSAoUmVwcmVzZW50ZWQgYXMgYSBVVEYtOCBlbmNvZGVkIHN0cmluZykKKyogICA4MDJcLjE1LjQgUEFOIElEIChSZXByZXNlbnRlZCBhcyBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlcikKKworVGhlIHZhbGlkIG9wZXJhdGlvbnMgb24gdGhlc2Ugc29ydHMgb2YgcHJvcGVydGllcyBhcmUgYEdFVGAgYW5kIGBTRVRgLgorCisjIyMgTXVsdGlwbGUtVmFsdWUgUHJvcGVydGllcyAjIyMjCisKK011bHRpcGxlLVZhbHVlIFByb3BlcnRpZXMgaGF2ZSBtb3JlIHRoYW4gb25lIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBFeGFtcGxlcyB3b3VsZCBiZToKKworKiAgIExpc3Qgb2YgY2hhbm5lbHMgc3VwcG9ydGVkIGJ5IHRoZSByYWRpbyBoYXJkd2FyZS4KKyogICBMaXN0IG9mIElQdjYgYWRkcmVzc2VzIGFzc2lnbmVkIHRvIHRoZSBpbnRlcmZhY2UuCisqICAgTGlzdCBvZiBjYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBOQ1AuCisKK1RoZSB2YWxpZCBvcGVyYXRpb25zIG9uIHRoZXNlIHNvcnRzIG9mIHByb3BlcnRpZXMgYXJlIGBWQUxVRV9HRVRgLCBgVkFMVUVfU0VUYCwgYFZBTFVFX0lOU0VSVGAsIGFuZCBgVkFMVUVfUkVNT1ZFYC4KKworV2hlbiB0aGUgdmFsdWUgaXMgZmV0Y2hlZCB1c2luZyBgVkFMVUVfR0VUYCwgdGhlIHJldHVybmVkIHZhbHVlIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCB2YWx1ZXMgaW4gdGhlIGxpc3QuIElmIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIGZvciBhbiBpbmRpdmlkdWFsIGl0ZW0gaW4gdGhlIGxpc3QgaXMgbm90IGRlZmluZWQgYnkgdGhlIHR5cGUgdGhlbiBlYWNoIGl0ZW0gcmV0dXJuZWQgaW4gdGhlIGxpc3QgaXMgcHJlcGVuZGVkIHdpdGggYSBsZW5ndGggKFNlZSAoI2FycmF5cykpLiBUaGUgb3JkZXIgb2YgdGhlIHJldHVybmVkIGl0ZW1zLCB1bmxlc3MgZXhwbGljaXRseSBkZWZpbmVkIGZvciB0aGF0IHNwZWNpZmljIHByb3BlcnR5LCBpcyB1bmRlZmluZWQuCisKK2BWQUxVRV9TRVRgIHByb3ZpZGVzIGEgd2F5IHRvIGNvbXBsZXRlbHkgcmVwbGFjZSBhbGwgcHJldmlvdXMgdmFsdWVzLiBDYWxsaW5nIGBWQUxVRV9TRVRgIHdpdGggYW4gZW1wdHkgdmFsdWUgZWZmZWN0aXZlbHkgaW5zdHJ1Y3RzIHRoZSBOQ1AgdG8gY2xlYXIgdGhlIHZhbHVlIG9mIHRoYXQgcHJvcGVydHkuCisKK2BWQUxVRV9JTlNFUlRgIGFuZCBgVkFMVUVfUkVNT1ZFYCBwcm92aWRlIG1lY2hhbmlzbXMgZm9yIHRoZSBpbnNlcnRpb24gb3IgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIGl0ZW1zICpieSB2YWx1ZSouIFRoZSBwYXlsb2FkIGZvciB0aGVzZSBjb21tYW5kcyBpcyBhIHBsYWluIHNpbmdsZSB2YWx1ZS4KKworIyMjIFN0cmVhbSBQcm9wZXJ0aWVzICMjIyMKKworU3RyZWFtIHByb3BlcnRpZXMgYXJlIHNwZWNpYWwgcHJvcGVydGllcyByZXByZXNlbnRpbmcgc3RyZWFtcyBvZiBkYXRhLiBFeGFtcGxlcyB3b3VsZCBiZToKKworKiAgIE5ldHdvcmsgcGFja2V0IHN0cmVhbSAoKCNwcm9wLXN0cmVhbS1uZXQpKQorKiAgIFJhdyBwYWNrZXQgc3RyZWFtICgoI3Byb3Atc3RyZWFtLXJhdykpCisqICAgRGVidWcgbWVzc2FnZSBzdHJlYW0gKCgjcHJvcC1zdHJlYW0tZGVidWcpKQorKiAgIE5ldHdvcmsgQmVhY29uIHN0cmVhbSAoKCNwcm9wLW1hYy1zY2FuLWJlYWNvbikpCisKK0FsbCBzdWNoIHByb3BlcnRpZXMgZW1pdCBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5IHVzaW5nIHRoZSBgVkFMVUVfSVNgIGNvbW1hbmQsIHNlbnQgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0LiBGb3IgZXhhbXBsZSwgYXMgSVB2NiB0cmFmZmljIGlzIHJlY2VpdmVkIGJ5IHRoZSBOQ1AsIHRoZSBJUHY2IHBhY2tldHMgYXJlIHNlbnQgdG8gdGhlIGhvc3QgYnkgd2F5IG9mIGFzeW5jaHJvbm91cyBgVkFMVUVfSVNgIG5vdGlmaWNhdGlvbnMuCisKK1NvbWUgb2YgdGhlc2UgcHJvcGVydGllcyBhbHNvIHN1cHBvcnQgdGhlIGhvc3Qgc2VuZCBkYXRhIGJhY2sgdG8gdGhlIE5DUC4gRm9yIGV4YW1wbGUsIHRoaXMgaXMgaG93IHRoZSBob3N0IHNlbmRzIElQdjYgdHJhZmZpYyB0byB0aGUgTkNQLgorCitUaGVzZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGdlbmVyYWxseSBkbyBub3Qgc3VwcG9ydCBgVkFMVUVfR0VUYCwgYXMgaXQgaXMgbWVhbmluZ2xlc3MuCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1waHkubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1waHkubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkNmMxNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLXBoeS5tZApAQCAtMCwwICsxLDcyIEBACisjIyBQSFkgUHJvcGVydGllcyB7I3Byb3AtcGh5fQorCisKKyMjIyBQUk9QIDMyOiBQUk9QX1BIWV9FTkFCTEVEIHsjcHJvcC1waHktZW5hYmxlZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYCAoYm9vbDgpCisKK1NldCB0byAxIGlmIHRoZSBQSFkgaXMgZW5hYmxlZCwgc2V0IHRvIDAgb3RoZXJ3aXNlLgorTWF5IGJlIGRpcmVjdGx5IGVuYWJsZWQgdG8gYnlwYXNzIGhpZ2hlci1sZXZlbCBwYWNrZXQgcHJvY2Vzc2luZworaW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoaW5ncyBsaWtlIHBhY2tldCBzbmlmZmVycy4gVGhpcyBwcm9wZXJ0eQorY2FuIG9ubHkgYmUgd3JpdHRlbiBpZiB0aGUgYFNQSU5FTF9DQVBfTUFDX1JBV2AgY2FwYWJpbGl0eSBpcyBwcmVzZW50LgorCisjIyMgUFJPUCAzMzogUFJPUF9QSFlfQ0hBTiB7I3Byb3AtcGh5LWNoYW59CisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQ2AgKHVpbnQ4KQorCitWYWx1ZSBpcyB0aGUgY3VycmVudCBjaGFubmVsLiBNdXN0IGJlIHNldCB0byBvbmUgb2YgdGhlCit2YWx1ZXMgY29udGFpbmVkIGluIGBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRGAuCisKKyMjIyBQUk9QIDM0OiBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRCB7I3Byb3AtcGh5LWNoYW4tc3VwcG9ydGVkfQorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgQShDKWAgKGFycmF5IG9mIHVpbnQ4KQorKiBVbml0OiBMaXN0IG9mIGNoYW5uZWxzCisKK1ZhbHVlIGlzIGEgbGlzdCBvZiBjaGFubmVsIHZhbHVlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlCitoYXJkd2FyZS4KKworIyMjIFBST1AgMzU6IFBST1BfUEhZX0ZSRVEgeyNwcm9wLXBoeS1mcmVxfQorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgTGAgKHVpbnQzMikKKyogVW5pdDogS2lsb2hlcnR6CisKK1ZhbHVlIGlzIHRoZSByYWRpbyBmcmVxdWVuY3kgKGluIGtpbG9oZXJ0eikgb2YgdGhlCitjdXJyZW50IGNoYW5uZWwuCisKKyMjIyBQUk9QIDM2OiBQUk9QX1BIWV9DQ0FfVEhSRVNIT0xEIHsjcHJvcC1waHktY2NhLXRocmVzaG9sZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBjYCAoaW50OCkKKyogVW5pdDogZEJtCisKK1ZhbHVlIGlzIHRoZSBDQ0EgKGNsZWFyLWNoYW5uZWwgYXNzZXNzbWVudCkgdGhyZXNob2xkLiBTZXQgdG8KKy0xMjggdG8gZGlzYWJsZS4KKworV2hlbiBzZXR0aW5nLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gYSB2YWx1ZQordGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgcmFkaW8gaGFyZHdhcmUuCisKKyMjIyBQUk9QIDM3OiBQUk9QX1BIWV9UWF9QT1dFUiB7I3Byb3AtcGh5LXR4LXBvd2VyfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYGNgIChpbnQ4KQorKiBVbml0OiBkQm0KKworVmFsdWUgaXMgdGhlIHRyYW5zbWl0IHBvd2VyIG9mIHRoZSByYWRpby4KKworV2hlbiBzZXR0aW5nLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gYSB2YWx1ZQordGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgcmFkaW8gaGFyZHdhcmUuCisKKyMjIyBQUk9QIDM4OiBQUk9QX1BIWV9SU1NJIHsjcHJvcC1waHktcnNzaX0KKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYGNgIChpbnQ4KQorKiBVbml0OiBkQm0KKworVmFsdWUgaXMgdGhlIGN1cnJlbnQgUlNTSSAoUmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIGluZGljYXRpb24pCitmcm9tIHRoZSByYWRpby4gVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCBpbiBlbmVyZ3kgc2NhbnMgYW5kIGZvcgorZGV0ZXJtaW5pbmcgdGhlIGFtYmllbnQgbm9pc2UgZmxvb3IgZm9yIHRoZSBvcGVyYXRpbmcgZW52aXJvbm1lbnQuCisKKyMjIyBQUk9QIDM5OiBQUk9QX1BIWV9SWF9TRU5TSVRJVklUWSB7I3Byb3AtcGh5LXJ4LXNlbnNpdGl2aXR5fQorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgY2AgKGludDgpCisqIFVuaXQ6IGRCbQorCitWYWx1ZSBpcyB0aGUgcmFkaW8gcmVjZWl2ZSBzZW5zaXRpdml0eS4gVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCBhcworbG93ZXIgYm91bmQgbm9pc2UgZmxvb3IgZm9yIGxpbmsgbWV0cmljcyBjb21wdXRhdGlvbi4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0MmM2NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLm1kCkBAIC0wLDAgKzEsNTggQEAKKyMgUHJvcGVydGllcworCit7e3NwaW5lbC1wcm9wLW92ZXJ2aWV3Lm1kfX0KKworIyMgUHJvcGVydHkgTnVtYmVyaW5nCisKK1doaWxlIHRoZSBtYWpvcml0eSBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFsbG93IHRoZSBjb25maWd1cmF0aW9uCitvZiBuZXR3b3JrIGNvbm5lY3Rpdml0eSBhcmUgbmV0d29yayBwcm90b2NvbCBzcGVjaWZpYywgdGhlcmUgYXJlCitzZXZlcmFsIHByb3BlcnRpZXMgdGhhdCBhcmUgcmVxdWlyZWQgaW4gYWxsIGltcGxlbWVudGF0aW9ucy4KKworRnV0dXJlIHByb3BlcnR5IGFsbG9jYXRpb25zICoqU0hBTEwqKiBiZSBtYWRlIGZyb20gdGhlCitmb2xsb3dpbmcgYWxsb2NhdGlvbiBwbGFuOgorCitQcm9wZXJ0eSBJRCBSYW5nZSAgICAgfCBEZXNjcmlwdGlvbgorOi0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0KKzAgLSAxMjcgICAgICAgICAgICAgICB8IFJlc2VydmVkIGZvciBmcmVxdWVudGx5LXVzZWQgcHJvcGVydGllcworMTI4IC0gMTUsMzU5ICAgICAgICAgIHwgVW5hbGxvY2F0ZWQKKzE1LDM2MCAtIDE2LDM4MyAgICAgICB8IFZlbmRvci1zcGVjaWZpYworMTYsMzg0IC0gMSw5OTksOTk5ICAgIHwgVW5hbGxvY2F0ZWQKKzIsMDAwLDAwMCAtIDIsMDk3LDE1MSB8IEV4cGVyaW1lbnRhbCB1c2Ugb25seQorCitGb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGRhdGEgZm9ybWF0IGVuY29kaW5nIHNob3J0aGFuZCB1c2VkCit0aHJvdWdob3V0IHRoaXMgZG9jdW1lbnQsIHNlZSAoI2RhdGEtcGFja2luZykuCisKKyMjIFByb3BlcnR5IFNlY3Rpb25zCisKK1RoZSBjdXJyZW50bHkgYXNzaWduZWQgcHJvcGVydGllcyBhcmUgYnJva2VuIHVwIGludG8gc2V2ZXJhbAorc2VjdGlvbnMsIGVhY2ggd2l0aCByZXNlcnZlZCByYW5nZXMgb2YgcHJvcGVydHkgaWRlbnRpZmllcnMuCitUaGVzZSByYW5nZXMgYXJlOgorCitOYW1lICAgfCBSYW5nZSAoSW5jbHVzaXZlKSAgICAgICAgICAgIHwgRG9jdW1lbnRhdGlvbgorLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0KK0NvcmUgICB8IDB4MDAgLSAweDFGLCAweDEwMDAgLSAweDExRkYgfCAoI3Byb3AtY29yZSkKK1BIWSAgICB8IDB4MjAgLSAweDJGLCAweDEyMDAgLSAweDEyRkYgfCAoI3Byb3AtcGh5KQorTUFDICAgIHwgMHgzMCAtIDB4M0YsIDB4MTMwMCAtIDB4MTNGRiB8ICgjcHJvcC1tYWMpCitORVQgICAgfCAweDQwIC0gMHg0RiwgMHgxNDAwIC0gMHgxNEZGIHwgKCNwcm9wLW5ldCkKK1RlY2ggICB8IDB4NTAgLSAweDVGLCAweDE1MDAgLSAweDE1RkYgfCBUZWNobm9sb2d5LXNwZWNpZmljCitJUHY2ICAgfCAweDYwIC0gMHg2RiwgMHgxNjAwIC0gMHgxNkZGIHwgKCNwcm9wLWlwdjYpCitTdHJlYW0gfCAweDcwIC0gMHg3RiwgMHgxNzAwIC0gMHgxN0ZGIHwgKCNwcm9wLWNvcmUpCitEZWJ1ZyAgfCAgICAgICAgICAgICAgMHg0MDAwIC0gMHg0NDAwIHwgKCNwcm9wLWRlYnVnKQorCitOb3RlIHRoYXQgc29tZSBvZiB0aGUgcHJvcGVydHkgc2VjdGlvbnMgaGF2ZSB0d28gcmVzZXJ2ZWQKK3JhbmdlczogYSBwcmltYXJ5IHJhbmdlICh3aGljaCBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGJ5dGUpCithbmQgYW4gZXh0ZW5kZWQgcmFuZ2UgKHdoaWNoIGlzIGVuY29kZWQgYXMgdHdvIGJ5dGVzKS4KK3Byb3BlcnRpZXMgd2hpY2ggYXJlIHVzZWQgbW9yZSBmcmVxdWVudGx5IGFyZSBnZW5lcmFsbHkKK2FsbG9jYXRlZCBmcm9tIHRoZSBmb3JtZXIgcmFuZ2UuCisKK3t7c3BpbmVsLXByb3AtY29yZS5tZH19CisKK3t7c3BpbmVsLXByb3AtcGh5Lm1kfX0KKwore3tzcGluZWwtcHJvcC1tYWMubWR9fQorCit7e3NwaW5lbC1wcm9wLW5ldC5tZH19CisKK3t7c3BpbmVsLXByb3AtaXB2Ni5tZH19CisKK3t7c3BpbmVsLXByb3AtZGVidWcubWR9fQpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXNlY3VyaXR5LWNvbnNpZGVyYXRpb25zLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXNlY3VyaXR5LWNvbnNpZGVyYXRpb25zLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NGVjMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtc2VjdXJpdHktY29uc2lkZXJhdGlvbnMubWQKQEAgLTAsMCArMSw5IEBACisjIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zICMKKworIyMgUmF3IEFwcGxpY2F0aW9uIEFjY2VzcyAjIworCitTcGluZWwgKipNQVkqKiBiZSB1c2VkIGFzIGFuIEFQSSBib3VuZGFyeSBmb3IgYWxsb3dpbmcgcHJvY2Vzc2VzIHRvIGNvbmZpZ3VyZQordGhlIE5DUC4gSG93ZXZlciwgc3VjaCBhIHN5c3RlbSAqKk1VU1QgTk9UKiogZ2l2ZSB1bnByaXZpbGVnZWQgcHJvY2Vzc2VzcyB0aGUKK2FiaWxpdHkgdG8gc2VuZCBvciByZWNlaXZlIGFyYml0cmFyeSBjb21tYW5kIGZyYW1lcyB0byB0aGUgTkNQLiBPbmx5IHRoZQorc3BlY2lmaWMgY29tbWFuZHMgYW5kIHByb3BlcnRpZXMgdGhhdCBhcmUgcmVxdWlyZWQgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUKK3Bhc3NlZCwgYW5kIHRoZW4gb25seSBhZnRlciBiZWluZyBjaGVja2VkIGZvciBwcm9wZXIgZm9ybWF0LgpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXN0YXR1cy1jb2Rlcy5tZCBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1zdGF0dXMtY29kZXMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2YjViYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1zdGF0dXMtY29kZXMubWQKQEAgLTAsMCArMSw2NiBAQAorIyBTdGF0dXMgQ29kZXMKKworU3RhdHVzIGNvZGVzIGFyZSBzZW50IGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdCB2aWEKK2BQUk9QX0xBU1RfU1RBVFVTYCB1c2luZyB0aGUgYENNRF9WQUxVRV9JU2AgY29tbWFuZCB0byBpbmRpY2F0ZQordGhlIHJldHVybiBzdGF0dXMgb2YgYSBwcmV2aW91cyBjb21tYW5kLiBBcyB3aXRoIGFueSByZXNwb25zZSwKK3RoZSBUSUQgZmllbGQgb2YgdGhlIEZMQUcgYnl0ZSBpcyB1c2VkIHRvIGNvcnJlbGF0ZSB0aGUgcmVzcG9uc2UKK3dpdGggdGhlIHJlcXVlc3QuCisKK05vdGUgdGhhdCBtb3N0IHN1Y2Nlc3NmdWxseSBleGVjdXRlZCBjb21tYW5kcyBkbyBub3QgaW5kaWNhdGUKK2EgbGFzdCBzdGF0dXMgb2YgYFNUQVRVU19PS2AuIFRoZSB1c3VhbCB3YXkgdGhlIE5DUCBpbmRpY2F0ZXMgYQorc3VjY2Vzc2Z1bCBjb21tYW5kIGlzIHRvIG1pcnJvciB0aGUgcHJvcGVydHkgY2hhbmdlIGJhY2sgdG8gdGhlCitob3N0LiBGb3IgZXhhbXBsZSwgaWYgeW91IGRvIGEgYENNRF9WQUxVRV9TRVRgIG9uIGBQUk9QX1BIWV9FTkFCTEVEYCwKK3RoZSBOQ1Agd291bGQgaW5kaWNhdGUgc3VjY2VzcyBieSByZXNwb25kaW5nIHdpdGggYSBgQ01EX1ZBTFVFX0lTYAorZm9yIGBQUk9QX1BIWV9FTkFCTEVEYC4gSWYgdGhlIGNvbW1hbmQgZmFpbGVkLCBgUFJPUF9MQVNUX1NUQVRVU2AKK3dvdWxkIGJlIGVtaXR0ZWQgaW5zdGVhZC4KKworU2VlICgjcHJvcC1sYXN0LXN0YXR1cykgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYFBST1BfTEFTVF9TVEFUVVNgLgorCisgKiAgMDogYFNUQVRVU19PS2A6IE9wZXJhdGlvbiBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKyAqICAxOiBgU1RBVFVTX0ZBSUxVUkVgOiBPcGVyYXRpb24gaGFzIGZhaWxlZCBmb3Igc29tZSB1bmRlZmluZWQKKyAgICByZWFzb24uCisgKiAgMjogYFNUQVRVU19VTklNUExFTUVOVEVEYDogVGhlIGdpdmVuIG9wZXJhdGlvbiBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQuCisgKiAgMzogYFNUQVRVU19JTlZBTElEX0FSR1VNRU5UYDogQW4gYXJndW1lbnQgdG8gdGhlIGdpdmVuIG9wZXJhdGlvbiBpcyBpbnZhbGlkLgorICogIDQ6IGBTVEFUVVNfSU5WQUxJRF9TVEFURWAgOiBUaGUgZ2l2ZW4gb3BlcmF0aW9uIGlzIGludmFsaWQgZm9yIHRoZSBjdXJyZW50CisgICAgc3RhdGUgb2YgdGhlIGRldmljZS4KKyAqICA1OiBgU1RBVFVTX0lOVkFMSURfQ09NTUFORGA6IFRoZSBnaXZlbiBjb21tYW5kIGlzIG5vdCByZWNvZ25pemVkLgorICogIDY6IGBTVEFUVVNfSU5WQUxJRF9JTlRFUkZBQ0VgOiBUaGUgZ2l2ZW4gU3BpbmVsIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVkLgorICogIDc6IGBTVEFUVVNfSU5URVJOQUxfRVJST1JgOiBBbiBpbnRlcm5hbCBydW50aW1lIGVycm9yIGhhcyBvY2N1cnJlZC4KKyAqICA4OiBgU1RBVFVTX1NFQ1VSSVRZX0VSUk9SYDogQSBzZWN1cml0eSBvciBhdXRoZW50aWNhdGlvbiBlcnJvciBoYXMgb2NjdXJyZWQuCisgKiAgOTogYFNUQVRVU19QQVJTRV9FUlJPUmA6IEFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBjb21tYW5kLgorICogIDEwOiBgU1RBVFVTX0lOX1BST0dSRVNTYDogVGhlIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBhbmQgd2lsbCBiZQorICAgIGNvbXBsZXRlZCBhc3luY2hyb25vdXNseS4KKyAqICAxMTogYFNUQVRVU19OT01FTWA6IFRoZSBvcGVyYXRpb24gaGFzIGJlZW4gcHJldmVudGVkIGR1ZSB0byBtZW1vcnkKKyAgICBwcmVzc3VyZS4KKyAqICAxMjogYFNUQVRVU19CVVNZYDogVGhlIGRldmljZSBpcyBjdXJyZW50bHkgcGVyZm9ybWluZyBhIG11dHVhbGx5IGV4Y2x1c2l2ZQorICAgIG9wZXJhdGlvbi4KKyAqICAxMzogYFNUQVRVU19QUk9QX05PVF9GT1VORGA6IFRoZSBnaXZlbiBwcm9wZXJ0eSBpcyBub3QgcmVjb2duaXplZC4KKyAqICAxNDogYFNUQVRVU19QQUNLRVRfRFJPUFBFRGA6IFRoZSBwYWNrZXQgd2FzIGRyb3BwZWQuCisgKiAgMTU6IGBTVEFUVVNfRU1QVFlgOiBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gaXMgZW1wdHkuCisgKiAgMTY6IGBTVEFUVVNfQ01EX1RPT19CSUdgOiBUaGUgY29tbWFuZCB3YXMgdG9vIGxhcmdlIHRvIGZpdCBpbiB0aGUgaW50ZXJuYWwKKyAgICBidWZmZXIuCisgKiAgMTc6IGBTVEFUVVNfTk9fQUNLYDogVGhlIHBhY2tldCB3YXMgbm90IGFja25vd2xlZGdlZC4KKyAqICAxODogYFNUQVRVU19DQ0FfRkFJTFVSRWA6IFRoZSBwYWNrZXQgd2FzIG5vdCBzZW50IGR1ZSB0byBhIENDQSBmYWlsdXJlLgorICogIDE5OiBgU1RBVFVTX0FMUkVBRFlgOiBUaGUgb3BlcmF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3Mgb3IKKyAgICB0aGUgcHJvcGVydHkgd2FzIGFscmVhZHkgc2V0IHRvIHRoZSBnaXZlbiB2YWx1ZS4KKyAqICAyMDogYFNUQVRVU19JVEVNX05PVF9GT1VORGA6IFRoZSBnaXZlbiBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcHJvcGVydHkuIAorICogIDIxOiBgU1RBVFVTX0lOVkFMSURfQ09NTUFORF9GT1JfUFJPUGA6IFRoZSBnaXZlbiBjb21tYW5kIGNhbm5vdCBiZSBwZXJmb3JtZWQKKyAgICBvbiB0aGlzIHByb3BlcnR5LgorICogIDIyLTExMTogUkVTRVJWRUQKKyAqICAxMTItMTI3OiBSZXNldCBDYXVzZXMKKyAgICAgKiAgMTEyOiBgU1RBVFVTX1JFU0VUX1BPV0VSX09OYAorICAgICAqICAxMTM6IGBTVEFUVVNfUkVTRVRfRVhURVJOQUxgCisgICAgICogIDExNDogYFNUQVRVU19SRVNFVF9TT0ZUV0FSRWAKKyAgICAgKiAgMTE1OiBgU1RBVFVTX1JFU0VUX0ZBVUxUYAorICAgICAqICAxMTY6IGBTVEFUVVNfUkVTRVRfQ1JBU0hgCisgICAgICogIDExNzogYFNUQVRVU19SRVNFVF9BU1NFUlRgCisgICAgICogIDExODogYFNUQVRVU19SRVNFVF9PVEhFUmAKKyAgICAgKiAgMTE5OiBgU1RBVFVTX1JFU0VUX1VOS05PV05gCisgICAgICogIDEyMDogYFNUQVRVU19SRVNFVF9XQVRDSERPR2AKKyAgICAgKiAgMTIxLTEyNzogUkVTRVJWRUQtUkVTRVQtQ09ERVMKKyAqICAxMjggLSAxNSwzNTk6IFVOQUxMT0NBVEVECisgKiAgMTUsMzYwIC0gMTYsMzgzOiBWZW5kb3Itc3BlY2lmaWMKKyAqICAxNiwzODQgLSAxLDk5OSw5OTk6IFVOQUxMT0NBVEVECisgKiAgMiwwMDAsMDAwIC0gMiwwOTcsMTUxOiBFeHBlcmltZW50YWwgVXNlIE9ubHkgKE1VU1QgTkVWRVIgYmUgdXNlZAorICAgIGluIHByb2R1Y3Rpb24hKQorCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtdGVjaC10aHJlYWQubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtdGVjaC10aHJlYWQubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxMGZkMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC10ZWNoLXRocmVhZC5tZApAQCAtMCwwICsxLDMzMyBAQAorIyBUZWNobm9sb2d5OiBUaHJlYWQoUikgeyN0ZWNoLXRocmVhZH0KKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBhbGwgb2YgdGhlIHByb3BlcnRpZXMgYW5kIHNlbWFudGljcyByZXF1aXJlZAorZm9yIG1hbmFnaW5nIGEgVGhyZWFkKFIpIE5DUC4KKworVGhyZWFkKFIpIE5DUHMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKworKiBUaGUgcHJvcGVydHkgYFBST1BfSU5URVJGQUNFX1RZUEVgIG11c3QgYmUgMy4KKyogVGhlIG5vbi1vcHRpb25hbCBwcm9wZXJ0aWVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgKipNVVNUKiogYmUKKyAgaW1wbGVtZW50ZWQ6IENPUkUsIFBIWSwgTUFDLCBORVQsIGFuZCBJUFY2LgorCitBbGwgc2VyaW91cyBpbXBsZW1lbnRhdGlvbnMgb2YgYW4gTkNQICoqU0hPVUxEKiogYWxzbyBzdXBwb3J0IHRoZSBuZXR3b3JrCitzYXZlIGZlYXR1cmUgKFNlZSAoI2ZlYXR1cmUtbmV0d29yay1zYXZlKSkuCisKKyMjIENhcGFiaWxpdGllcyB7I3RocmVhZC1jYXBzfQorCitUaGUgVGhyZWFkKFIpIHRlY2hub2xvZ3kgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNhcGFiaWxpdGllczoKKworKiBgQ0FQX05FVF9USFJFQURfMV8wYCAtIEluZGljYXRlcyB0aGF0IHRoZSBOQ1AgaW1wbGVtZW50cyB2MS4wIG9mIHRoZSBUaHJlYWQoUikgc3RhbmRhcmQuCisqIGBDQVBfTkVUX1RIUkVBRF8xXzFgIC0gSW5kaWNhdGVzIHRoYXQgdGhlIE5DUCBpbXBsZW1lbnRzIHYxLjEgb2YgdGhlIFRocmVhZChSKSBzdGFuZGFyZC4KKworIyMgUHJvcGVydGllcyB7I3RocmVhZC1wcm9wZXJ0aWVzfQorCitQcm9wZXJ0aWVzIGZvciBUaHJlYWQoUikgYXJlIGFsbG9jYXRlZCBvdXQgb2YgdGhlIGBUZWNoYCBwcm9wZXJ0eQorc2VjdGlvbiAoc2VlICgjcHJvcGVydHktc2VjdGlvbnMpKS4KKworIyMjIFBST1AgODA6IFBST1BfVEhSRUFEX0xFQURFUl9BRERSCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGA2YAorCitUaGUgSVB2NiBhZGRyZXNzIG9mIHRoZSBsZWFkZXIuIChOb3RlOiBNYXkgY2hhbmdlIHRvIGxvbmcgYW5kIHNob3J0IGFkZHJlc3Mgb2YgbGVhZGVyKQorCisjIyMgUFJPUCA4MTogUFJPUF9USFJFQURfUEFSRU5UCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBFU2AKKyogTEFERFIsIFNBRERSCisKK1RoZSBsb25nIGFkZHJlc3MgYW5kIHNob3J0IGFkZHJlc3Mgb2YgdGhlIHBhcmVudCBvZiB0aGlzIG5vZGUuCisKKyMjIyBQUk9QIDgyOiBQUk9QX1RIUkVBRF9DSElMRF9UQUJMRQorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgQSh0KEVTKSlgCisKK1RhYmxlIGNvbnRhaW5pbmcgdGhlIGxvbmcgYW5kIHNob3J0IGFkZHJlc3NlcyBvZiBhbGwKK3RoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUuCisKKyMjIyBQUk9QIDgzOiBQUk9QX1RIUkVBRF9MRUFERVJfUklECisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitUaGUgcm91dGVyLWlkIG9mIHRoZSBjdXJyZW50IGxlYWRlci4KKworIyMjIFBST1AgODQ6IFBST1BfVEhSRUFEX0xFQURFUl9XRUlHSFQKKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKK1RoZSBsZWFkZXIgd2VpZ2h0IG9mIHRoZSBjdXJyZW50IGxlYWRlci4KKworIyMjIFBST1AgODU6IFBST1BfVEhSRUFEX0xPQ0FMX0xFQURFUl9XRUlHSFQKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitUaGUgbGVhZGVyIHdlaWdodCBmb3IgdGhpcyBub2RlLgorCisjIyMgUFJPUCA4NjogUFJPUF9USFJFQURfTkVUV09SS19EQVRBCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBEYAorCitUaGUgbG9jYWwgbmV0d29yayBkYXRhLgorCisjIyMgUFJPUCA4NzogUFJPUF9USFJFQURfTkVUV09SS19EQVRBX1ZFUlNJT04KKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYFNgCisKKyMjIyBQUk9QIDg4OiBQUk9QX1RIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBEYAorCitUaGUgbG9jYWwgc3RhYmxlIG5ldHdvcmsgZGF0YS4KKworIyMjIFBST1AgODk6IFBST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTgorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgU2AKKworIyMjIFBST1AgOTA6IFBST1BfVEhSRUFEX09OX01FU0hfTkVUUworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYEEodCg2Q2JDYikpYAorCitEYXRhIHBlciBpdGVtIGlzOgorCisqIGA2YDogSVB2NiBQcmVmaXgKKyogYENgOiBQcmVmaXggbGVuZ3RoIGluIGJpdHMKKyogYGJgOiBTdGFibGUgZmxhZworKiBgQ2A6IFRMViBmbGFncworKiBgYmA6ICJJcyBkZWZpbmVkIGxvY2FsbHkiIGZsYWcuIFNldCBpZiB0aGlzIG5ldHdvcmsgd2FzIGxvY2FsbHkKKyAgZGVmaW5lZC4gQXNzdW1lZCB0byBiZSB0cnVlIGZvciBzZXQsIGluc2VydCBhbmQgcmVwbGFjZS4gQ2xlYXIgaWYKKyAgdGhlIG9uIG1lc2ggbmV0d29yayB3YXMgZGVmaW5lZCBieSBhbm90aGVyIG5vZGUuCisKKyMjIyBQUk9QIDkxOiBQUk9QX1RIUkVBRF9PRkZfTUVTSF9ST1VURVMKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKHQoNkNiQ2JiKSlgCisKK0RhdGEgcGVyIGl0ZW0gaXM6CisKKyogYDZgOiBSb3V0ZSBQcmVmaXgKKyogYENgOiBQcmVmaXggbGVuZ3RoIGluIGJpdHMKKyogYGJgOiBTdGFibGUgZmxhZworKiBgQ2A6IFJvdXRlIHByZWZlcmVuY2UgZmxhZ3MKKyogYGJgOiAiSXMgZGVmaW5lZCBsb2NhbGx5IiBmbGFnLiBTZXQgaWYgdGhpcyByb3V0ZSBpbmZvIHdhcyBsb2NhbGx5CisgIGRlZmluZWQgYXMgcGFydCBvZiBsb2NhbCBuZXR3b3JrIGRhdGEuIEFzc3VtZWQgdG8gYmUgdHJ1ZSBmb3Igc2V0LAorICBpbnNlcnQgYW5kIHJlcGxhY2UuIENsZWFyIGlmIHRoZSByb3V0ZSBpcyBwYXJ0IG9mIHBhcnRpdGlvbidzIG5ldHdvcmsKKyAgZGF0YS4KKyogYGJgOiAiTmV4dCBob3AgaXMgdGhpcyBkZXZpY2UiIGZsYWcuIFNldCBpZiB0aGUgbmV4dCBob3AgZm9yIHRoZQorICByb3V0ZSBpcyB0aGlzIGRldmljZSBpdHNlbGYgKGkuZS4sIHJvdXRlIHdhcyBhZGRlZCBieSB0aGlzIGRldmljZSkKKyAgVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIHdoZW4gYWRkaW5nIGFuIGV4dGVybmFsIHJvdXRlLiBGb3IgYW55IGFkZGVkCisgIHJvdXRlIHRoZSBuZXh0IGhvcCBpcyB0aGlzIGRldmljZS4KKworIyMjIFBST1AgOTI6IFBST1BfVEhSRUFEX0FTU0lTVElOR19QT1JUUworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYEEoUylgCisKKyMjIyBQUk9QIDkzOiBQUk9QX1RIUkVBRF9BTExPV19MT0NBTF9ORVRfREFUQV9DSEFOR0UKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitTZXQgdG8gdHJ1ZSBiZWZvcmUgY2hhbmdpbmcgbG9jYWwgbmV0IGRhdGEuIFNldCB0byBmYWxzZSB3aGVuIGZpbmlzaGVkLgorVGhpcyBhbGxvd3MgY2hhbmdlcyB0byBiZSBhZ2dyZWdhdGVkIGludG8gc2luZ2xlIGV2ZW50cy4KKworIyMjIFBST1AgOTQ6IFBST1BfVEhSRUFEX01PREUKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitUaGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZQorVExWIGZvciB0aGlzIG5vZGUuIFRoZSBtZWFuaW5nIG9mIHRoZSBiaXRzIGluIHRoaXMKK2JpdGZpZWxkIGFyZSBkZWZpbmVkIGJ5IHNlY3Rpb24gNC41LjIgb2YgdGhlIFRocmVhZChSKQorc3BlY2lmaWNhdGlvbi4KKworIyMjIFBST1AgNTM3NjogUFJPUF9USFJFQURfQ0hJTERfVElNRU9VVAorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYExgCisKK1VzZWQgd2hlbiBvcGVyYXRpbmcgaW4gdGhlIENoaWxkIHJvbGUuCisKKyMjIyBQUk9QIDUzNzc6IFBST1BfVEhSRUFEX1JMT0MxNgorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYFNgCisKKyMjIyBQUk9QIDUzNzg6IFBST1BfVEhSRUFEX1JPVVRFUl9VUEdSQURFX1RIUkVTSE9MRAorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKKyMjIyBQUk9QIDUzNzk6IFBST1BfVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVkKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBMYAorCisjIyMgUFJPUCA1MzgwOiBQUk9QX1RIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitBbGxvd3MgeW91IHRvIGdldCBvciBzZXQgdGhlIFRocmVhZChSKSBgTkVUV09SS19JRF9USU1FT1VUYCBjb25zdGFudCwgYXMKK2RlZmluZWQgYnkgdGhlIFRocmVhZChSKSBzcGVjaWZpY2F0aW9uLgorCisjIyMgUFJPUCA1MzgxOiBQUk9QX1RIUkVBRF9BQ1RJVkVfUk9VVEVSX0lEUworKiBUeXBlOiBSZWFkLVdyaXRlL1dyaXRlLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgQShDKWAgKExpc3Qgb2YgYWN0aXZlIHRocmVhZCByb3V0ZXIgaWRzKQorCitOb3RlIHRoYXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBzdXBwb3J0IGBDTURfR0VUX1ZBTFVFYAorcm91dGVyIGlkcywgYnV0IG1heSBzdXBwb3J0IGBDTURfUkVNT1ZFX1ZBTFVFYCB3aGVuIHRoZSBub2RlIGlzCithIGxlYWRlci4KKworIyMjIFBST1AgNTM4MjogUFJPUF9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgYmAKKworQWxsb3cgdGhlIEhPU1QgdG8gZGlyZWN0bHkgb2JzZXJ2ZSBhbGwgSVB2NiBwYWNrZXRzIHJlY2VpdmVkIGJ5IHRoZSBOQ1AsCitpbmNsdWRpbmcgb25lcyBzZW50IHRvIHRoZSBSTE9DMTYgYWRkcmVzcy4KKworRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLgorCisjIyMgUFJPUCA1MzgzOiBQUk9QX1RIUkVBRF9ST1VURVJfUk9MRV9FTkFCTEVECisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgYmAKKworQWxsb3cgdGhlIEhPU1QgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIHJvdXRlciByb2xlIGlzIGVuYWJsZWQuCitJZiBjdXJyZW50IHJvbGUgaXMgYSByb3V0ZXIsIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byBgZmFsc2VgIHN0YXJ0cworYSByZS1hdHRhY2ggcHJvY2VzcyBhcyBhbiBlbmQtZGV2aWNlLgorCisjIyMgUFJPUCA1Mzg0OiBQUk9QX1RIUkVBRF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRAorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKKyMjIyBQUk9QIDUzODU6IFBST1BfVEhSRUFEX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQ2AKKworU3BlY2lmaWVzIHRoZSBzZWxmIGltcG9zZWQgcmFuZG9tIGRlbGF5IGluIHNlY29uZHMgYSBSRUVEIHdhaXRzIGJlZm9yZQorcmVnaXN0ZXJpbmcgdG8gYmVjb21lIGFuIEFjdGl2ZSBSb3V0ZXIuCisKKyMjIyBQUk9QIDUzODY6IFBST1BfVEhSRUFEX1BSRUZFUlJFRF9ST1VURVJfSUQKKyogVHlwZTogV3JpdGUtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitTcGVjaWZpZXMgdGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQuIFVwb24gYmVjb21pbmcgYSByb3V0ZXIvbGVhZGVyIHRoZSBub2RlCithdHRlbXB0cyB0byB1c2UgdGhpcyBSb3V0ZXIgSWQuIElmIHRoZSBwcmVmZXJyZWQgUm91dGVyIElkIGlzIG5vdCBzZXQgb3IKK2lmIGl0IGNhbiBub3QgYmUgdXNlZCwgYSByYW5kb21seSBnZW5lcmF0ZWQgcm91dGVyIGlkIGlzIHBpY2tlZC4gVGhpcworcHJvcGVydHkgY2FuIGJlIHNldCBvbmx5IHdoZW4gdGhlIGRldmljZSByb2xlIGlzIGVpdGhlciBkZXRhY2hlZCBvcgorZGlzYWJsZWQuCisKKyMjIyBQUk9QIDUzODc6IFBST1BfVEhSRUFEX05FSUdIQk9SX1RBQkxFCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKHQoRVNMQ2NDYkxMKSlgCisKK0RhdGEgcGVyIGl0ZW0gaXM6CisKKyogYEVgOiBFeHRlbmRlZC9sb25nIGFkZHJlc3MKKyogYFNgOiBSTE9DMTYKKyogYExgOiBBZ2UKKyogYENgOiBMaW5rIFF1YWxpdHkgSW4KKyogYGNgOiBBdmVyYWdlIFJTUworKiBgQ2A6IE1vZGUgKGJpdC1mbGFncykKKyogYGJgOiBgdHJ1ZWAgaWYgbmVpZ2hib3IgaXMgYSBjaGlsZCwgYGZhbHNlYCBvdGhlcndpc2UuCisqIGBMYDogTGluayBGcmFtZSBDb3VudGVyCisqIGBMYDogTUxFIEZyYW1lIENvdW50ZXIKKworIyMjIFBST1AgNTM4ODogUFJPUF9USFJFQURfQ0hJTERfQ09VTlRfTUFYCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQ2AKKworU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGlsZHJlbiBjdXJyZW50bHkgYWxsb3dlZC4KK1RoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCB3aGVuIFRocmVhZChSKSBwcm90b2NvbCBvcGVyYXRpb24KK2hhcyBiZWVuIHN0b3BwZWQuCisKKyMjIyBQUk9QIDUzODk6IFBST1BfVEhSRUFEX0xFQURFUl9ORVRXT1JLX0RBVEEKKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYERgCisKK1RoZSBsZWFkZXIgbmV0d29yayBkYXRhLgorCisjIyMgUFJPUCA1MzkwOiBQUk9QX1RIUkVBRF9TVEFCTEVfTEVBREVSX05FVFdPUktfREFUQQorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgRGAKKworVGhlIHN0YWJsZSBsZWFkZXIgbmV0d29yayBkYXRhLgorCisjIyMgUFJPUCA1MzkxOiBQUk9QX1RIUkVBRF9KT0lORVJTIHsjcHJvcC10aHJlYWQtam9pbmVyc30KKworKiBUeXBlOiBJbnNlcnQvUmVtb3ZlIE9ubHkgKG9wdGlvbmFsbHkgUmVhZC1Xcml0ZSkKKyogUGFja2VkLUVuY29kaW5nOiBgQSh0KFVMRSkpYAorKiBSZXF1aXJlZCBjYXBhYmlsaXR5OiBgQ0FQX1RIUkVBRF9DT01NSVNTSU9ORVJgCisKK0RhdGEgcGVyIGl0ZW0gaXM6CisKKyogYFVgOiBQU0tkCisqIGBMYDogVGltZW91dCBpbiBzZWNvbmRzCisqIGBFYDogRXh0ZW5kZWQvbG9uZyBhZGRyZXNzIChvcHRpb25hbCkKKworUGFzc2VzcyBQcmUtU2hhcmVkIEtleSBmb3IgdGhlIERldmljZSB0byB0aGUgTkNQIGluIHRoZSBjb21taXNzaW9uaW5nIHByb2Nlc3MuCitXaGVuIHRoZSBFeHRlbmRlZCBhZGRyZXNzIGlzIG9tbWl0ZWQgYWxsIERldmljZXMgd2hpY2ggcHJvdmlkZWQgYSB2YWxpZCBQU0tkCithcmUgYWxsb3dlZCB0byBqb2luIHRoZSBUaHJlYWQoUikgTmV0d29yay4KKworIyMjIFBST1AgNTM5MjogUFJPUF9USFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQgeyNwcm9wLXRocmVhZC1jb21taXNzaW9uZXItZW5hYmxlZH0KKworKiBUeXBlOiBXcml0ZSBvbmx5IChvcHRpb25hbGx5IFJlYWQtV3JpdGUpCisqIFBhY2tlZC1FbmNvZGluZzogYGJgCisqIFJlcXVpcmVkIGNhcGFiaWxpdHk6IGBDQVBfVEhSRUFEX0NPTU1JU1NJT05FUmAKKworU2V0IHRvIHRydWUgdG8gZW5hYmxlIHRoZSBuYXRpdmUgY29tbWlzc2lvbmVyLiBJdCBpcyBtYW5kYXRvcnkgYmVmb3JlIGFkZGluZyB0aGUgam9pbmVyIHRvIHRoZSBuZXR3b3JrLgorCisjIyMgUFJPUCA1MzkzOiBQUk9QX1RIUkVBRF9UTUZfUFJPWFlfRU5BQkxFRCB7I3Byb3AtdGhyZWFkLXRtZi1wcm94eS1lbmFibGVkfQorCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgYmAKKyogUmVxdWlyZWQgY2FwYWJpbGl0eTogYENBUF9USFJFQURfVE1GX1BST1hZYAorCitTZXQgdG8gdHJ1ZSB0byBlbmFibGUgdGhlIFRNRiBwcm94eS4KKworIyMjIFBST1AgNTM5NDogUFJPUF9USFJFQURfVE1GX1BST1hZX1NUUkVBTSB7I3Byb3AtdGhyZWFkLXRtZi1wcm94eS1zdHJlYW19CisKKyogVHlwZTogUmVhZC1Xcml0ZS1TdHJlYW0KKyogUGFja2VkLUVuY29kaW5nOiBgZFNTYAorKiBSZXF1aXJlZCBjYXBhYmlsaXR5OiBgQ0FQX1RIUkVBRF9UTUZfUFJPWFlgCisKK0RhdGEgcGVyIGl0ZW0gaXM6CisKKyogYGRgOiBDb0FQIGZyYW1lCisqIGBTYDogc291cmNlL2Rlc3RpbmF0aW9uIFJMT0MvQUxPQworKiBgU2A6IHNvdXJjZS9kZXN0aW5hdGlvbiBwb3J0CisKK09jdGVjdHM6IHwgMiAgICAgIHwgKm4qICB8ICAgIDIgICAgfCAgMgorLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLQorRmllbGRzOiAgfCBMZW5ndGggfCBDb0FQIHwgbG9jYXRvciB8IHBvcnQKKworVGhpcyBwcm9wZXJ0eSBhbGxvd3MgdGhlIGhvc3QgdG8gc2VuZCBhbmQgcmVjZWl2ZSBUTUYgbWVzc2FnZXMgZnJvbQordGhlIE5DUCdzIFJMT0MgYWRkcmVzcyBhbmQgc3VwcG9ydCBUaHJlYWQtc3BlY2lmaWMgYm9yZGVyIHJvdXRlciBmdW5jdGlvbnMuCisKKworIyMjIFBST1AgNTM5NTogUFJPUF9USFJFQURfRElTT1ZFUllfU0NBTl9KT0lORVJfRkxBRyB7I3Byb3AtdGhyZWFkLWRpc2NvdmVyeS1zY2FuLWpvaW5lci1mbGFnfQorCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOjogYGJgCisKK1RoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSB2YWx1ZSB1c2VkIGluIFRocmVhZChSKSBNTEUgRGlzY292ZXJ5IFJlcXVlc3QKK1RMViBkdXJpbmcgZGlzY292ZXJ5IHNjYW4gb3BlcmF0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuCisKKyMjIyBQUk9QIDUzOTY6IFBST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0VOQUJMRV9GSUxURVJJTkcgeyNwcm9wLXRocmVhZC1kaXNjb3Zlcnktc2Nhbi1lbmFibGUtZmlsdGVyaW5nfQorCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOjogYGJgCisKK1RoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSBFVUk2NCBmaWx0ZXJpbmcgZHVyaW5nIGRpc2NvdmVyeQorc2NhbiBvcGVyYXRpb24uIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC4KKworIyMjIFBST1AgNTM5NzogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQgeyNwcm9wLXRocmVhZC1kaXNjb3Zlcnktc2Nhbi1wYW5pZH0KKworKiBUeXBlOiBSZWFkLXdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzo6IGBTYAorCitUaGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgUEFOSUQgdXNlZCBmb3IgZmlsdGVyaW5nIGR1cmluZyBkaXNjb3ZlcnkKK3NjYW4gb3BlcmF0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIGAweGZmZmZgIChicm9hZGNhc3QgUEFOSUQpIHdoaWNoIGRpc2FibGVzCitQQU5JRCBmaWx0ZXJpbmcuCisKKyMjIyBQUk9QIDUzOTg6IFBST1BfVEhSRUFEX1NURUVSSU5HX0RBVEEgeyNwcm9wLXRocmVhZC1zdGVlcmluZy1kYXRhfQorCisqIFR5cGU6IFdyaXRlLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgRWAKKyogUmVxdWlyZWQgY2FwYWJpbGl0eTogYENBUF9PT0JfU1RFRVJJTkdfREFUQWAKKworVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHN0ZWVyaW5nIGRhdGEgZm9yIE1MRSBEaXNjb3ZlcnkKK1Jlc3BvbnNlIG1lc3NhZ2VzLgorCisqIEFsbCB6ZXJvcyB0byBjbGVhciB0aGUgc3RlZXJpbmcgZGF0YSAoaW5kaWNhdGluZyBubyBzdGVlcmluZyBkYXRhKS4KKyogQWxsIDB4RkZzIHRvIHNldCB0aGUgc3RlZXJpbmcgZGF0YSAoYmxvb20gZmlsdGVyKSB0byBhY2NlcHQvYWxsb3cgYWxsLgorKiBBIHNwZWNpZmljIEVVSTY0IHdoaWNoIGlzIHRoZW4gYWRkZWQgdG8gc3RlZXJpbmcgZGF0YS9ibG9vbSBmaWx0ZXIuCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtdGVzdC12ZWN0b3JzLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXRlc3QtdmVjdG9ycy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmI5ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXRlc3QtdmVjdG9ycy5tZApAQCAtMCwwICsxLDE3NCBAQAorIyBUZXN0IFZlY3RvcnMKKworIyMgVGVzdCBWZWN0b3I6IFBhY2tlZCBVbnNpZ25lZCBJbnRlZ2VyCisKK0RlY2ltYWwgVmFsdWUgfCBQYWNrZXQgT2N0ZXQgRW5jb2RpbmcKKy0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAwIHwgYDAwYAorICAgICAgICAgICAgMSB8IGAwMWAKKyAgICAgICAgICAxMjcgfCBgN0ZgCisgICAgICAgICAgMTI4IHwgYDgwIDAxYAorICAgICAgICAgIDEyOSB8IGA4MSAwMWAKKyAgICAgICAgMSwzMzcgfCBgQjkgMEFgCisgICAgICAgMTYsMzgzIHwgYEZGIDdGYAorICAgICAgIDE2LDM4NCB8IGA4MCA4MCAwMWAKKyAgICAgICAxNiwzODUgfCBgODEgODAgMDFgCisgICAgMiwwOTcsMTUxIHwgYEZGIEZGIDdGYAorCis8IS0tIFJRIC0tIFRoZSBQVUkgdGVzdC12ZWN0b3IgZW5jb2RpbmdzIG5lZWQgdG8gYmUgdmVyaWZpZWQuIC0tPgorCisjIyBUZXN0IFZlY3RvcjogUmVzZXQgQ29tbWFuZAorCisqIE5MSTogMAorKiBUSUQ6IDAKKyogQ01EOiAxIChgQ01EX1JFU0VUYCkKKworRnJhbWU6CisKKyAgICA4MCAwMQorCisjIyBUZXN0IFZlY3RvcjogUmVzZXQgTm90aWZpY2F0aW9uCisKKyogTkxJOiAwCisqIFRJRDogMAorKiBDTUQ6IDYgKGBDTURfVkFMVUVfSVNgKQorKiBQUk9QOiAwIChgUFJPUF9MQVNUX1NUQVRVU2ApCisqIFZBTFVFOiAxMTQgKGBTVEFUVVNfUkVTRVRfU09GVFdBUkVgKQorCitGcmFtZToKKworICAgIDgwIDA2IDAwIDcyCisKKyMjIFRlc3QgVmVjdG9yOiBTY2FuIEJlYWNvbgorCisqIE5MSTogMAorKiBUSUQ6IDAKKyogQ01EOiA3IChgQ01EX1ZBTFVFX0lOU0VSVEVEYCkKKyogUFJPUDogNTEgKGBQUk9QX01BQ19TQ0FOX0JFQUNPTmApCisqIFZBTFVFOiBTdHJ1Y3R1cmUsIGVuY29kZWQgYXMgYENjdChFU1NjKXQoaUNVZClgCisgICAgKiBDSEFOOiAxNQorICAgICogUlNTSTogLTYwZEJtCisgICAgKiBNQUNfREFUQTogKDBEIDAwIEI2IDQwIEQ0IDhDIEU5IDM4IEY5IDUyIEZGIEZGIEQyIDA0IDAwKQorICAgICAgICAqIExvbmcgYWRkcmVzczogQjY6NDA6RDQ6OEM6RTk6Mzg6Rjk6NTIKKyAgICAgICAgKiBTaG9ydCBhZGRyZXNzOiAweEZGRkYKKyAgICAgICAgKiBQQU4tSUQ6IDB4MDREMgorICAgICAgICAqIExRSTogMAorICAgICogTkVUX0RBVEE6ICgxMyAwMCAwMyAyMCA3MyA3MCA2OSA2RSA2NSA2QyAwMCAwOCAwMCBERSBBRCAwMCBCRSBFRiAwMCBDQSBGRSkKKyAgICAgICAgKiBQcm90b2NvbCBOdW1iZXI6IDMKKyAgICAgICAgKiBGbGFnczogMHgyMAorICAgICAgICAqIE5ldHdvcmsgTmFtZTogYHNwaW5lbGAKKyAgICAgICAgKiBYUEFOSUQ6IGBERSBBRCAwMCBCRSBFRiAwMCBDQSBGRWAKKworRnJhbWU6CisKKyAgICA4MCAwNyAzMyAwRiBDNCAwRCAwMCBCNiA0MCBENCA4QyBFOSAzOCBGOSA1MiBGRiBGRiBEMiAwNCAwMAorICAgIDEzIDAwIDAzIDIwIDczIDcwIDY5IDZFIDY1IDZDIDAwIDA4IDAwIERFIEFEIDAwIEJFIEVGIDAwIENBCisgICAgRkUKKworIyMgVGVzdCBWZWN0b3I6IEluYm91bmQgSVB2NiBQYWNrZXQKKworQ01EX1ZBTFVFX0lTKFBST1BfU1RSRUFNX05FVCkKKworPCEtLSBSUSAtLSBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLiAtLT4KKworIyMgVGVzdCBWZWN0b3I6IE91dGJvdW5kIElQdjYgUGFja2V0CisKK0NNRF9WQUxVRV9TRVQoUFJPUF9TVFJFQU1fTkVUKQorCis8IS0tIFJRIC0tIEZJWE1FOiBUaGlzIHRlc3QgdmVjdG9yIGlzIGluY29tcGxldGUuIC0tPgorCisjIyBUZXN0IFZlY3RvcjogRmV0Y2ggbGlzdCBvZiBvbi1tZXNoIG5ldHdvcmtzCisKKyogTkxJOiAwCisqIFRJRDogNAorKiBDTUQ6IDIgKGBDTURfVkFMVUVfR0VUYCkKKyogUFJPUDogOTAgKGBQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFNgKQorCitGcmFtZToKKworICAgIDg0IDAyIDVBCisKKyMjIFRlc3QgVmVjdG9yOiBSZXR1cm5lZCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3MKKworKiBOTEk6IDAKKyogVElEOiA0CisqIENNRDogNiAoYENNRF9WQUxVRV9JU2ApCisqIFBST1A6IDkwIChgUFJPUF9USFJFQURfT05fTUVTSF9ORVRTYCkKKyogVkFMVUU6IEFycmF5IG9mIHN0cnVjdHVyZXMsIGVuY29kZWQgYXMgYEEodCg2Q2JDKSlgCisKK0lQdjYgUHJlZml4ICB8IFByZWZpeCBMZW5ndGggfCBTdGFibGUgRmxhZyB8IE90aGVyIEZsYWdzCistLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tCisyMDAxOkRCODoxOjogfCA2NCAgICAgICAgICAgIHwgVHJ1ZSAgICAgICAgfCA/PworMjAwMTpEQjg6Mjo6IHwgNjQgICAgICAgICAgICB8IEZhbHNlICAgICAgIHwgPz8KKworRnJhbWU6CisKKyAgICA4NCAwNiA1QSAxMyAwMCAyMCAwMSAwRCBCOCAwMCAwMSAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorICAgIDAwIDQwIDAxID8/IDEzIDAwIDIwIDAxIDBEIEI4IDAwIDAyIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisgICAgMDAgMDAgNDAgMDAgPz8KKworPCEtLSBUT0RPOiBUaGlzIHRlc3QgdmVjdG9yIGlzIGluY29tcGxldGUuIC0tPgorCisjIyBUZXN0IFZlY3RvcjogQWRkaW5nIGFuIG9uLW1lc2ggbmV0d29yaworCisqIE5MSTogMAorKiBUSUQ6IDUKKyogQ01EOiA0IChgQ01EX1ZBTFVFX0lOU0VSVGApCisqIFBST1A6IDkwIChgUFJPUF9USFJFQURfT05fTUVTSF9ORVRTYCkKKyogVkFMVUU6IFN0cnVjdHVyZSwgZW5jb2RlZCBhcyBgNkNiQ2JgCisKK0lQdjYgUHJlZml4ICB8IFByZWZpeCBMZW5ndGggfCBTdGFibGUgRmxhZyB8IE90aGVyIEZsYWdzCistLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tCisyMDAxOkRCODozOjogfCA2NCAgICAgICAgICAgIHwgVHJ1ZSAgICAgICAgfCA/PworCitGcmFtZToKKworICAgIDg1IDAzIDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDQwCisgICAgMDEgPz8gMDEKKworPCEtLSBSUSAtLSBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLiAtLT4KKworIyMgVGVzdCBWZWN0b3I6IEluc2VydGlvbiBub3RpZmljYXRpb24gb2YgYW4gb24tbWVzaCBuZXR3b3JrCisKKyogTkxJOiAwCisqIFRJRDogNQorKiBDTUQ6IDcgKGBDTURfVkFMVUVfSU5TRVJURURgKQorKiBQUk9QOiA5MCAoYFBST1BfVEhSRUFEX09OX01FU0hfTkVUU2ApCisqIFZBTFVFOiBTdHJ1Y3R1cmUsIGVuY29kZWQgYXMgYDZDYkNiYAorCitJUHY2IFByZWZpeCAgfCBQcmVmaXggTGVuZ3RoIHwgU3RhYmxlIEZsYWcgfCBPdGhlciBGbGFncworLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLQorMjAwMTpEQjg6Mzo6IHwgNjQgICAgICAgICAgICB8IFRydWUgICAgICAgIHwgPz8KKworRnJhbWU6CisKKyAgICA4NSAwNyA1QSAyMCAwMSAwRCBCOCAwMCAwMyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCA0MAorICAgIDAxID8/IDAxCisKKzwhLS0gUlEgLS0gRklYTUU6IFRoaXMgdGVzdCB2ZWN0b3IgaXMgaW5jb21wbGV0ZS4gLS0+CisKKyMjIFRlc3QgVmVjdG9yOiBSZW1vdmluZyBhIGxvY2FsIG9uLW1lc2ggbmV0d29yaworCisqIE5MSTogMAorKiBUSUQ6IDYKKyogQ01EOiA1IChgQ01EX1ZBTFVFX1JFTU9WRWApCisqIFBST1A6IDkwIChgUFJPUF9USFJFQURfT05fTUVTSF9ORVRTYCkKKyogVkFMVUU6IElQdjYgUHJlZml4IGAyMDAxOkRCODozOjpgCisKK0ZyYW1lOgorCisgICAgODYgMDUgNUEgMjAgMDEgMEQgQjggMDAgMDMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKworIyMgVGVzdCBWZWN0b3I6IFJlbW92YWwgbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yaworCisqIE5MSTogMAorKiBUSUQ6IDYKKyogQ01EOiA4IChgQ01EX1ZBTFVFX1JFTU9WRURgKQorKiBQUk9QOiA5MCAoYFBST1BfVEhSRUFEX09OX01FU0hfTkVUU2ApCisqIFZBTFVFOiBJUHY2IFByZWZpeCBgMjAwMTpEQjg6Mzo6YAorCitGcmFtZToKKworICAgIDg2IDA4IDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisKKwpkaWZmIC0tZ2l0IGEvZXRjL3ZhZ3JhbnQvVmFncmFudGZpbGUgYi9ldGMvdmFncmFudC9WYWdyYW50ZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWQwNDMzCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3ZhZ3JhbnQvVmFncmFudGZpbGUKQEAgLTAsMCArMSw4NiBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisjIC0qLSBtb2RlOiBydWJ5IC0qLQorIyB2aTogc2V0IGZ0PXJ1YnkgOgorCisjIGNyaWJiZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWRhZnJ1aXQvZXNwODI2Ni1taWNyb3B5dGhvbi12YWdyYW50CitWYWdyYW50LmNvbmZpZ3VyZSgiMiIpIGRvIHxjb25maWd8CisgIGNvbmZpZy52bS5ib3ggPSAidWJ1bnR1L3RydXN0eTY0IgorCisgICMgVmlydHVhbGJveCBWTSBjb25maWd1cmF0aW9uLgorICBjb25maWcudm0ucHJvdmlkZXIgInZpcnR1YWxib3giIGRvIHx2fAorICAgICMgZXh0cmEgbWVtb3J5IGZvciBjb21waWxhdGlvbgorICAgIHYubWVtb3J5ID0gMjA0OAorICBlbmQKKworICAjIGRvd25sb2FkcyBhbmQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMKKyAgY29uZmlnLnZtLnByb3Zpc2lvbiAic2hlbGwiLCBwcml2aWxlZ2VkOiBmYWxzZSwgaW5saW5lOiA8PC1TSEVMTAorICAgIGVjaG8gIkluc3RhbGxpbmcgZGVwZW5kZW5jaWVzLi4uIgorCisgICAgIyBxdWlldHMgc29tZSBzdGRpbiBlcnJvcnMKKyAgICBleHBvcnQgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlCisKKyAgICBzdWRvIGFwdC1nZXQgaW5zdGFsbCAteSBweXRob24tc29mdHdhcmUtcHJvcGVydGllcworICAgIHN1ZG8gYWRkLWFwdC1yZXBvc2l0b3J5IC15IHBwYTp0ZXJyeS5ndW8vZ2NjLWFybS1lbWJlZGRlZAorICAgIHN1ZG8gYXB0LWdldCB1cGRhdGUgLXFxCisKKyAgICAjIHdwYW5kdHVuZCBydW50aW1lICYgYnVpbGQgcmVxdWlyZW1lbnRzCisgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgLXkgYnVpbGQtZXNzZW50aWFsIGdpdCBtYWtlIGF1dG9jb25mIGF1dG9jb25mLWFyY2hpdmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYWtlIGRidXMgbGlidG9vbCBnY2MgZysrIGdwZXJmIGZsZXggYmlzb24gdGV4aW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcy1kZXYgbGliZXhwYXQtZGV2IHB5dGhvbiBzZWQgcHl0aG9uLXBpcCBnYXdrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyZWFkbGluZTYtZGV2IGxpYnJlYWRsaW5lNiBsaWJkYnVzLTEtZGV2IGxpYmJvb3N0LWRldgorICAgIHN1ZG8gYXB0LWdldCBpbnN0YWxsIC15IC0tZm9yY2UteWVzIGdjYy1hcm0tbm9uZS1lYWJpCisKKyAgICBzdWRvIHBpcCBpbnN0YWxsIHBleHBlY3QKKworICAgIGVjaG8gIkluc3RhbGxpbmcgT3BlblRocmVhZCAmIHdwYW5kdHVuZC4uLiIKKyAgICBta2RpciAtcCB+L3NyYworCisgICAgIyBpbnN0YWxsIHdwYW50dW5kCisgICAgY2Qgfi9zcmMKKyAgICBlY2hvICJpbnN0YWxsaW5nIHdwYW50dW5kIgorICAgIGdpdCBjbG9uZSAtLXJlY3Vyc2l2ZSBodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC93cGFudHVuZC5naXQKKyAgICBjZCB3cGFudHVuZAorICAgIHN1ZG8gZ2l0IGNoZWNrb3V0IGZ1bGwvbWFzdGVyCisgICAgLi9jb25maWd1cmUgLS1zeXNjb25mZGlyPS9ldGMKKyAgICBtYWtlCisgICAgc3VkbyBtYWtlIGluc3RhbGwKKyAgICAjIGRidXMgc29tZXRpbWVzIGlzIHdvbmt5OyBmb3JjaW5nIHJlc3RhcnQKKyAgICBzdWRvIHNlcnZpY2UgZGJ1cyByZXN0YXJ0CisKKyAgICAjIGluc3RhbGwgT3BlblRocmVhZAorICAgIGNkIH4vc3JjCisgICAgZ2l0IGNsb25lIC0tcmVjdXJzaXZlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQuZ2l0CisgICAgY2Qgb3BlbnRocmVhZAorICAgIC4vYm9vdHN0cmFwCisKKyAgICBlY2hvICJPcGVuVGhyZWFkIGFuZCB3cGFudHVuZCBzZXR1cCBjb21wbGV0ZSEgRXhhbXBsZXMgY2FuIGJlIGZvdW5kIGluIH4vc3JjL29wZW50aHJlYWQvZXhhbXBsZXMiCisgIFNIRUxMCisKK2VuZApkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL0xvY2tTY3JlZW5Mb2dvLnNjYWxlLTIwMC5wbmcgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvTG9ja1NjcmVlbkxvZ28uc2NhbGUtMjAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGVkYzcxCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL0xvY2tTY3JlZW5Mb2dvLnNjYWxlLTIwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NwbGFzaFNjcmVlbi5zY2FsZS0yMDAucG5nIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NwbGFzaFNjcmVlbi5zY2FsZS0yMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDM4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvU3BsYXNoU2NyZWVuLnNjYWxlLTIwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTE1MHgxNTBMb2dvLnNjYWxlLTIwMC5wbmcgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvU3F1YXJlMTUweDE1MExvZ28uc2NhbGUtMjAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWUyMzlkCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTE1MHgxNTBMb2dvLnNjYWxlLTIwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTQ0eDQ0TG9nby5zY2FsZS0yMDAucG5nIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTQ0eDQ0TG9nby5zY2FsZS0yMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMDIwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvU3F1YXJlNDR4NDRMb2dvLnNjYWxlLTIwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTQ0eDQ0TG9nby50YXJnZXRzaXplLTI0X2FsdGZvcm0tdW5wbGF0ZWQucG5nIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTQ0eDQ0TG9nby50YXJnZXRzaXplLTI0X2FsdGZvcm0tdW5wbGF0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNmYyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvU3F1YXJlNDR4NDRMb2dvLnRhcmdldHNpemUtMjRfYWx0Zm9ybS11bnBsYXRlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1N0b3JlTG9nby5wbmcgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvU3RvcmVMb2dvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmEzN2MyCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1N0b3JlTG9nby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1dpZGUzMTB4MTUwTG9nby5zY2FsZS0yMDAucG5nIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1dpZGUzMTB4MTUwTG9nby5zY2FsZS0yMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YjgwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvV2lkZTMxMHgxNTBMb2dvLnNjYWxlLTIwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vT3BlblRocmVhZC52Y3hwcm9qIGIvZXRjL3Zpc3VhbC1zdHVkaW8vT3BlblRocmVhZC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTI3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9PcGVuVGhyZWFkLnZjeHByb2oKQEAgLTAsMCArMSwxNTUgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjE0LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntmOGMyMjg0NC05YjkzLTQ5NzgtODBkZi04YWYyYjM3YTdhYmJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5vdDwvUm9vdE5hbWVzcGFjZT4KKyAgICA8RGVmYXVsdExhbmd1YWdlPmVuLVVTPC9EZWZhdWx0TGFuZ3VhZ2U+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxBcHBDb250YWluZXJBcHBsaWNhdGlvbj50cnVlPC9BcHBDb250YWluZXJBcHBsaWNhdGlvbj4KKyAgICA8QXBwbGljYXRpb25UeXBlPldpbmRvd3MgU3RvcmU8L0FwcGxpY2F0aW9uVHlwZT4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFVzZURvdE5ldE5hdGl2ZVRvb2xjaGFpbj50cnVlPC9Vc2VEb3ROZXROYXRpdmVUb29sY2hhaW4+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxQYWNrYWdlQ2VydGlmaWNhdGVLZXlGaWxlPi4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xPcGVuVGhyZWFkX1RlbXBvcmFyeUtleS5wZng8L1BhY2thZ2VDZXJ0aWZpY2F0ZUtleUZpbGU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGFwcFw8L091dERpcj4KKyAgICA8QXBweEF1dG9JbmNyZW1lbnRQYWNrYWdlUmV2aXNpb24+VHJ1ZTwvQXBweEF1dG9JbmNyZW1lbnRQYWNrYWdlUmV2aXNpb24+CisgICAgPEFwcHhQYWNrYWdlRGlyPi4uXC4uXGJ1aWxkXGJpblxBcHBQYWNrYWdlc1w8L0FwcHhQYWNrYWdlRGlyPgorICAgIDxBcHB4QnVuZGxlPk5ldmVyPC9BcHB4QnVuZGxlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L2JpZ29iaiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDQ1MzsyODIwNDwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICAgICUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7CisgICAgICAgIC4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGRsbFxvdEFwaS5saWI7CisgICAgICA8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQ2xpZW50QXJncy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXENsaWVudENvbnRyb2wueGFtbC5oIj4KKyAgICAgIDxEZXBlbmRlbnRVcG9uPi4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xDbGllbnRDb250cm9sLnhhbWw8L0RlcGVuZGVudFVwb24+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1DbGllbnRDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xGYWN0b3J5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcSUNsaWVudENvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xJTGlzdGVuZXJDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcUHJvdG9jb2wuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xJQXN5bmNUaHJlYWROb3RpZnkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xJTWFpblBhZ2VVSUVsZW1lbnRzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcTGlzdGVuZXJBcmdzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3Ncb3RBZGFwdGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3Ncb3RBcGkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xwY2guaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xBcHAueGFtbC5oIj4KKyAgICAgIDxEZXBlbmRlbnRVcG9uPi4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xBcHAueGFtbDwvRGVwZW5kZW50VXBvbj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xNYWluUGFnZS54YW1sLmgiPgorICAgICAgPERlcGVuZGVudFVwb24+Li5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXE1haW5QYWdlLnhhbWw8L0RlcGVuZGVudFVwb24+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU2VydmVyQ29udHJvbC54YW1sLmgiPgorICAgICAgPERlcGVuZGVudFVwb24+Li5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFNlcnZlckNvbnRyb2wueGFtbDwvRGVwZW5kZW50VXBvbj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xTdHJlYW1DbGllbnRDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU3RyZWFtTGlzdGVuZXJDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0NvbnN0cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFRhbGtHcmlkLnhhbWwuaCI+CisgICAgICA8RGVwZW5kZW50VXBvbj4uLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0dyaWQueGFtbDwvRGVwZW5kZW50VXBvbj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xUYWxrSGVscGVyLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxBcHBsaWNhdGlvbkRlZmluaXRpb24gSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXEFwcC54YW1sIj4KKyAgICAgIDxTdWJUeXBlPkRlc2lnbmVyPC9TdWJUeXBlPgorICAgIDwvQXBwbGljYXRpb25EZWZpbml0aW9uPgorICAgIDxQYWdlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xDbGllbnRDb250cm9sLnhhbWwiPgorICAgICAgPFN1YlR5cGU+RGVzaWduZXI8L1N1YlR5cGU+CisgICAgPC9QYWdlPgorICAgIDxQYWdlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xNYWluUGFnZS54YW1sIj4KKyAgICAgIDxTdWJUeXBlPkRlc2lnbmVyPC9TdWJUeXBlPgorICAgIDwvUGFnZT4KKyAgICA8UGFnZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU2VydmVyQ29udHJvbC54YW1sIj4KKyAgICAgIDxTdWJUeXBlPkRlc2lnbmVyPC9TdWJUeXBlPgorICAgIDwvUGFnZT4KKyAgICA8UGFnZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0dyaWQueGFtbCI+CisgICAgICA8U3ViVHlwZT5EZXNpZ25lcjwvU3ViVHlwZT4KKyAgICA8L1BhZ2U+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxBcHB4TWFuaWZlc3QgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFBhY2thZ2UuYXBweG1hbmlmZXN0Ij4KKyAgICAgIDxTdWJUeXBlPkRlc2lnbmVyPC9TdWJUeXBlPgorICAgIDwvQXBweE1hbmlmZXN0PgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xPcGVuVGhyZWFkX1RlbXBvcmFyeUtleS5wZngiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcTG9ja1NjcmVlbkxvZ28uc2NhbGUtMjAwLnBuZyIgLz4KKyAgICA8SW1hZ2UgSW5jbHVkZT0iQXNzZXRzXFNwbGFzaFNjcmVlbi5zY2FsZS0yMDAucG5nIiAvPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcU3F1YXJlMTUweDE1MExvZ28uc2NhbGUtMjAwLnBuZyIgLz4KKyAgICA8SW1hZ2UgSW5jbHVkZT0iQXNzZXRzXFNxdWFyZTQ0eDQ0TG9nby5zY2FsZS0yMDAucG5nIiAvPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcU3F1YXJlNDR4NDRMb2dvLnRhcmdldHNpemUtMjRfYWx0Zm9ybS11bnBsYXRlZC5wbmciIC8+CisgICAgPEltYWdlIEluY2x1ZGU9IkFzc2V0c1xTdG9yZUxvZ28ucG5nIiAvPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcV2lkZTMxMHgxNTBMb2dvLnNjYWxlLTIwMC5wbmciIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXEFwcC54YW1sLmNwcCI+CisgICAgICA8RGVwZW5kZW50VXBvbj4uLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQXBwLnhhbWw8L0RlcGVuZGVudFVwb24+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQ2xpZW50Q29udHJvbC54YW1sLmNwcCI+CisgICAgICA8RGVwZW5kZW50VXBvbj4uLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQ2xpZW50Q29udHJvbC54YW1sPC9EZXBlbmRlbnRVcG9uPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXERhdGFncmFtQ2xpZW50Q29udGV4dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXEZhY3RvcnkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXE1haW5QYWdlLnhhbWwuY3BwIj4KKyAgICAgIDxEZXBlbmRlbnRVcG9uPi4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xNYWluUGFnZS54YW1sPC9EZXBlbmRlbnRVcG9uPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXHBjaC5jcHAiPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU2VydmVyQ29udHJvbC54YW1sLmNwcCI+CisgICAgICA8RGVwZW5kZW50VXBvbj4uLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU2VydmVyQ29udHJvbC54YW1sPC9EZXBlbmRlbnRVcG9uPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFN0cmVhbUNsaWVudENvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFN0cmVhbUxpc3RlbmVyQ29udGV4dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0dyaWQueGFtbC5jcHAiPgorICAgICAgPERlcGVuZGVudFVwb24+Li5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFRhbGtHcmlkLnhhbWw8L0RlcGVuZGVudFVwb24+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL09wZW5UaHJlYWQudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vT3BlblRocmVhZC52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiNDMxNQotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL09wZW5UaHJlYWQudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsODcgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iQ29tbW9uIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPmY4YzIyODQ0LTliOTMtNDk3OC04MGRmLThhZjJiMzdhN2FiYjwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkFzc2V0cyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj5jZjUzOWJmMS00NGFmLTRhMDYtYmUxMy01OTQxZjZhYzI2MjM8L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5ibXA7ZmJ4O2dpZjtqcGc7anBlZzt0Z2E7dGlmZjt0aWY7cG5nPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8QXBwbGljYXRpb25EZWZpbml0aW9uIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xBcHAueGFtbCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQXBwLnhhbWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXE1haW5QYWdlLnhhbWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXHBjaC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRmFjdG9yeS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQ2xpZW50Q29udHJvbC54YW1sLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xTZXJ2ZXJDb250cm9sLnhhbWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFRhbGtHcmlkLnhhbWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXERhdGFncmFtQ2xpZW50Q29udGV4dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFN0cmVhbUNsaWVudENvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFN0cmVhbUxpc3RlbmVyQ29udGV4dC5jcHAiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXHBjaC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXEFwcC54YW1sLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcTWFpblBhZ2UueGFtbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXG90QWRhcHRlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXG90QXBpLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcSUFzeW5jVGhyZWFkTm90aWZ5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcSU1haW5QYWdlVUlFbGVtZW50cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXExpc3RlbmVyQXJncy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXENsaWVudEFyZ3MuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xQcm90b2NvbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXElMaXN0ZW5lckNvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xGYWN0b3J5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcSUNsaWVudENvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xDbGllbnRDb250cm9sLnhhbWwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xTZXJ2ZXJDb250cm9sLnhhbWwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xUYWxrR3JpZC54YW1sLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1DbGllbnRDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xTdHJlYW1DbGllbnRDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU3RyZWFtTGlzdGVuZXJDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0NvbnN0cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFRhbGtIZWxwZXIuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPEltYWdlIEluY2x1ZGU9IkFzc2V0c1xMb2NrU2NyZWVuTG9nby5zY2FsZS0yMDAucG5nIj4KKyAgICAgIDxGaWx0ZXI+QXNzZXRzPC9GaWx0ZXI+CisgICAgPC9JbWFnZT4KKyAgICA8SW1hZ2UgSW5jbHVkZT0iQXNzZXRzXFNwbGFzaFNjcmVlbi5zY2FsZS0yMDAucG5nIj4KKyAgICAgIDxGaWx0ZXI+QXNzZXRzPC9GaWx0ZXI+CisgICAgPC9JbWFnZT4KKyAgICA8SW1hZ2UgSW5jbHVkZT0iQXNzZXRzXFNxdWFyZTE1MHgxNTBMb2dvLnNjYWxlLTIwMC5wbmciPgorICAgICAgPEZpbHRlcj5Bc3NldHM8L0ZpbHRlcj4KKyAgICA8L0ltYWdlPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcU3F1YXJlNDR4NDRMb2dvLnNjYWxlLTIwMC5wbmciPgorICAgICAgPEZpbHRlcj5Bc3NldHM8L0ZpbHRlcj4KKyAgICA8L0ltYWdlPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcU3F1YXJlNDR4NDRMb2dvLnRhcmdldHNpemUtMjRfYWx0Zm9ybS11bnBsYXRlZC5wbmciPgorICAgICAgPEZpbHRlcj5Bc3NldHM8L0ZpbHRlcj4KKyAgICA8L0ltYWdlPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcU3RvcmVMb2dvLnBuZyI+CisgICAgICA8RmlsdGVyPkFzc2V0czwvRmlsdGVyPgorICAgIDwvSW1hZ2U+CisgICAgPEltYWdlIEluY2x1ZGU9IkFzc2V0c1xXaWRlMzEweDE1MExvZ28uc2NhbGUtMjAwLnBuZyI+CisgICAgICA8RmlsdGVyPkFzc2V0czwvRmlsdGVyPgorICAgIDwvSW1hZ2U+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxBcHB4TWFuaWZlc3QgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFBhY2thZ2UuYXBweG1hbmlmZXN0IiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcT3BlblRocmVhZF9UZW1wb3JhcnlLZXkucGZ4IiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UGFnZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcTWFpblBhZ2UueGFtbCIgLz4KKyAgICA8UGFnZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0dyaWQueGFtbCIgLz4KKyAgICA8UGFnZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQ2xpZW50Q29udHJvbC54YW1sIiAvPgorICAgIDxQYWdlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xTZXJ2ZXJDb250cm9sLnhhbWwiIC8+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL1VuaXRUZXN0cy52Y3hwcm9qIGIvZXRjL3Zpc3VhbC1zdHVkaW8vVW5pdFRlc3RzLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhNjQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL1VuaXRUZXN0cy52Y3hwcm9qCkBAIC0wLDAgKzEsMTAzIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SW1wb3J0IFByb2plY3Q9Im9wZW50aHJlYWQuY29uZmlndXJhdGlvbi5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZGxsXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgJChWQ0luc3RhbGxEaXIpVW5pdFRlc3RcaW5jbHVkZTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsczsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpCisgICAgICAgIE1CRURUTFNfQ09ORklHX0ZJTEU9Im1iZWR0bHMtY29uZmlnLmgiOworICAgICAgICBPUEVOVEhSRUFEX0NPTkZJR19GSUxFPSJvcGVudGhyZWFkLXdpbmRvd3MtY29uZmlnLmgiOworICAgICAgICBPUEVOVEhSRUFEX0ZURD0xOworICAgICAgPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8VXNlRnVsbFBhdGhzPnRydWU8L1VzZUZ1bGxQYXRocz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICAgICUoQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyk7CisgICAgICAgICQoVkNJbnN0YWxsRGlyKVVuaXRUZXN0XGxpYjsKKyAgICAgICAgPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X2Flcy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfZnV6ei5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfaG1hY19zaGEyNTYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X2xpbmtfcXVhbGl0eS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfbG93cGFuLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF9tYWNfZnJhbWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X21lc3NhZ2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X21lc3NhZ2VfcXVldWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X25jcF9idWZmZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3BsYXRmb3JtLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF9wcmlvcml0eV9xdWV1ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfdGltZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3Rvb2xjaGFpbl9jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfdG9vbGNoYWluLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF91dGlsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF93aW5kb3dzLmNwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfcGxhdGZvcm0uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF9sb3dwYW4uaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3V0aWwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF91dGlsLmhwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZC1uY3AtdWFydC52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntkOTQ4NjdkMi02ZGFlLTQ3ZTItOTYyYS01ZThlNjU4MTM0ZDF9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJsaWJvcGVudGhyZWFkLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2RkNTAxOGJlLTU0YzYtNGZkNC05ZjhkLTA4ZDUyZmMwY2Q0MH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWR0bHMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDExMWM4YmItZDM1NC00MzQ4LWFkM2MtZWI2ODMyZTg0ODMxfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vVW5pdFRlc3RzLnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL1VuaXRUZXN0cy52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyZGRhMAotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL1VuaXRUZXN0cy52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSw3OCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfYWVzLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X2Z1enouY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfaG1hY19zaGEyNTYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfbGlua19xdWFsaXR5LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X2xvd3Bhbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF9tYWNfZnJhbWUuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfbWVzc2FnZS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF9tZXNzYWdlX3F1ZXVlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3ByaW9yaXR5X3F1ZXVlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3RpbWVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3Rvb2xjaGFpbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF91dGlsLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3dpbmRvd3MuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfcGxhdGZvcm0uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfbmNwX2J1ZmZlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfcGxhdGZvcm0uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X2xvd3Bhbi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF91dGlsLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF91dGlsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICA8L0l0ZW1Hcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtY2xpLXdpbmRvd3MudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtY2xpLXdpbmRvd3MudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MThlMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGktd2luZG93cy52Y3hwcm9qCkBAIC0wLDAgKzEsNjYgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPnsyODgzNDQ5OC0zODM3LTQ0QTUtOEY2Ny0yNDlBQkFCN0I5N0R9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5TdGF0aWNMaWJyYXJ5PC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGxpYlw8L091dERpcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9URExMOworICAgICAgICBPVEJVSUxEOworICAgICAgICBPUEVOVEhSRUFEX0ZURD0xOworICAgICAgPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgICAlKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgICAuLlwuLlxzcmM7CisgICAgICAgIC4uXC4uXHNyY1xjb3JlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTRExDaGVjaz50cnVlPC9TRExDaGVjaz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGlfZGF0YXNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY2xpXGNsaV9pbnN0YW5jZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY2xpXGNsaV91YXJ0LmNwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGktd2luZG93cy52Y3hwcm9qLmZpbHRlcnMgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLWNsaS13aW5kb3dzLnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGJhMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGktd2luZG93cy52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjbGlcY2xpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGlfdWFydC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjbGlcY2xpX2RhdGFzZXQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY2xpXGNsaV9pbnN0YW5jZS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGkudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtY2xpLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyMGU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtY2xpLnZjeHByb2oKQEAgLTAsMCArMSw2NyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEltcG9ydCBQcm9qZWN0PSJvcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezQxQjMyMDY5LTYzMkUtNDU3OC04NTVCLUEzNkVCRkE4MEI1Nn08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPlN0YXRpY0xpYnJhcnk8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcbGliXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBNQkVEVExTX0NPTkZJR19GSUxFPSJtYmVkdGxzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9DT05GSUdfRklMRT0ib3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9GVEQ9MTsKKyAgICAgICAgT1RCVUlMRDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsczsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFNETENoZWNrPnRydWU8L1NETENoZWNrPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY2xpXGNsaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY2xpXGNsaV9kYXRhc2V0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjbGlcY2xpX3VhcnQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGlfdWRwLmNwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGkudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNmM4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLWNsaS52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjbGlcY2xpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGlfdWRwLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGlfdWFydC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjbGlcY2xpX2RhdGFzZXQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXNwaS52Y3hwcm9qIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1uY3Atc3BpLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwMTQyNAotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXNwaS52Y3hwcm9qCkBAIC0wLDAgKzEsNzUgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntCOTJGNDQ5RS0wRkQ5LTQ0RkMtQUNGQS02NTIxQTMyNDBDQTJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5TdGF0aWNMaWJyYXJ5PC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGxpYlw8L091dERpcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEk9MTsKKyAgICAgICAgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQ9MDsKKyAgICAgICAgT1RCVUlMRDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsczsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFNETENoZWNrPnRydWU8L1NETENoZWNrPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3BcbmNwX2J1ZmZlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9zcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxzcGluZWwuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3BcbmNwX2J1ZmZlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9zcGkuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxzcGluZWwuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1uY3Atc3BpLnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXNwaS52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmODU0NwotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXNwaS52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSw0NSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfYnVmZmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxzcGluZWwuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3Bfc3BpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3BcbmNwX2Jhc2UuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9idWZmZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9zcGkuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXHNwaW5lbC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXVhcnQudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXVhcnQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2M1OTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1uY3AtdWFydC52Y3hwcm9qCkBAIC0wLDAgKzEsNzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5TdGF0aWNMaWJyYXJ5PC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGxpYlw8L091dERpcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEk9MDsKKyAgICAgICAgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQ9MTsKKyAgICAgICAgT1RCVUlMRDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsczsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFNETENoZWNrPnRydWU8L1NETENoZWNrPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXGhkbGMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfYmFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9idWZmZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfdWFydC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXHNwaW5lbC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3BcaGRsYy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3BcbmNwX2J1ZmZlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF91YXJ0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3Bcc3BpbmVsLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1uY3AtdWFydC52Y3hwcm9qLmZpbHRlcnMgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLW5jcC11YXJ0LnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjU0NDMzCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1uY3AtdWFydC52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSw1MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXGhkbGMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfYnVmZmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfdWFydC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3Bcc3BpbmVsLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXGhkbGMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfYnVmZmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfdWFydC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3Bcc3BpbmVsLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLXdpbmRvd3MudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtd2luZG93cy52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTFjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLXdpbmRvd3MudmN4cHJvagpAQCAtMCwwICsxLDc1IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SW1wb3J0IFByb2plY3Q9Im9wZW50aHJlYWQuY29uZmlndXJhdGlvbi5wcm9wcyIgLz4gCisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezMwNzIzQzM4LUJBM0ItNDRDOS04RDY0LUM1ODYxQTI2OTM0Rn08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPlN0YXRpY0xpYnJhcnk8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcbGliXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9UQlVJTEQ7CisgICAgICA8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICAgICUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk7CisgICAgICAgIC4uXC4uXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXGV4YW1wbGVzXHBsYXRmb3JtczsKKyAgICAgICAgLi5cLi5cc3JjXGNvcmU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8U0RMQ2hlY2s+dHJ1ZTwvU0RMQ2hlY2s+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFxhbGFybS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHBvc2l4XGZsYXNoLXdpbmRvd3Mtc3R1YnMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFxsb2dnaW5nLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhcbWlzYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHBvc2l4XHBsYXRmb3JtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhccmFkaW8uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFxyYW5kb20uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFxzcGktc3R1YnMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFx1YXJ0LXdpbmRvd3MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1x1dGlsc1xzZXR0aW5ncy5jcHAiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHBvc2l4XHBsYXRmb3JtLXBvc2l4LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNcdXRpbHNcZmxhc2guaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC13aW5kb3dzLnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtd2luZG93cy52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwZWNhOAotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtd2luZG93cy52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSw1MiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnthZjJhMGUwNC0xMzRkLTQwYjMtODRkNC04MmM4YzYyMmY5YWV9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFxhbGFybS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhcZmxhc2gtd2luZG93cy1zdHVicy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhcbG9nZ2luZy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhcbWlzYy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhccGxhdGZvcm0uYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHBvc2l4XHJhbmRvbS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhccmFkaW8uYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHBvc2l4XHNwaS1zdHVicy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhcdWFydC13aW5kb3dzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1x1dGlsc1xzZXR0aW5ncy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhccGxhdGZvcm0tcG9zaXguaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHV0aWxzXGZsYXNoLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFlNzAyYQotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQudmN4cHJvagpAQCAtMCwwICsxLDIzNyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEltcG9ydCBQcm9qZWN0PSJvcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0RENTAxOEJFLTU0QzYtNEZENC05RjhELTA4RDUyRkMwQ0Q0MH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPlN0YXRpY0xpYnJhcnk8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcbGliXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBNQkVEVExTX0NPTkZJR19GSUxFPSJtYmVkdGxzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9DT05GSUdfRklMRT0ib3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9GVEQ9MTsKKyAgICAgICAgT1RCVUlMRDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjXGNvcmU7CisgICAgICAgIC4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHM7CisgICAgICAgIC4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xpbmNsdWRlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+CisgICAgICA8U0RMQ2hlY2s+dHJ1ZTwvU0RMQ2hlY2s+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxjb21taXNzaW9uZXJfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxib3JkZXJfcm91dGVyX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcZGF0YXNldF9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGRhdGFzZXRfZnRkX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcZGhjcDZfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxpY21wNl9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGlwNl9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGluc3RhbmNlX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcam9pbmVyX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbGlua19hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGxpbmtfcmF3X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbWVzc2FnZV9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXG5ldGRhdGFfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVx0YXNrbGV0X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2Z0ZF9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9oZWFkZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwX3NlY3VyZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY3JjMTYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvY2F0b3IuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvZ2dpbmcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG1lc3NhZ2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRhc2tsZXQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRpbWVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0bHZzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0cmlja2xlX3RpbWVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfY2NtLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfZWNiLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xobWFjX3NoYTI1Ni5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cbWJlZHRscy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9ccGJrZGYyX2NtYWMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHNoYTI1Ni5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfZnJhbWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY193aGl0ZWxpc3QuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxhbm5vdW5jZV9iZWdpbl9jbGllbnQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxjb21taXNzaW9uZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9sb2NhbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlcl9mdGQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkdGxzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZW5lcmd5X3NjYW5fY2xpZW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyX3JvdXRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGxlYWRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHBhbmlkX3F1ZXJ5X2NsaWVudC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHRpbWVzdGFtcC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXG1lc2hjb3BfdGx2cy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcZGhjcDZfY2xpZW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9zZXJ2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGljbXA2LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9hZGRyZXNzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfZmlsdGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfbXBsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfcm91dGVzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxuZXRpZi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcdWRwNi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYWRkcmVzc19yZXNvbHZlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYW5ub3VuY2VfYmVnaW5fc2VydmVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxlbmVyZ3lfc2Nhbl9zZXJ2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGRhdGFfcG9sbF9tYW5hZ2VyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxrZXlfbWFuYWdlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbGlua19xdWFsaXR5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsb3dwYW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1lc2hfZm9yd2FyZGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZV9yb3V0ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlcl9mdGQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YV9sb2NhbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kaWFnbm9zdGljLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxwYW5pZF9xdWVyeV9zZXJ2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHNyY19tYXRjaF9jb250cm9sbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfbmV0aWYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHRvcG9sb2d5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXGNoaWxkX3N1cGVydmlzaW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHNsYWFjX2FkZHJlc3MuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcamFtX2RldGVjdG9yLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXG1pc3Npbmdfc3Rybmxlbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcbWlzc2luZ19zdHJsY2F0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xtaXNzaW5nX3N0cmxjcHkuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcbGlua19yYXcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfaGVhZGVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9zZWN1cmUuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGNvZGVfdXRpbHMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGNyYzE2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxjb250ZXh0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxkZWJ1Zy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cZW5jb2RpbmcuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvY2F0b3IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvZ2dpbmcuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG1lc3NhZ2UuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG5ldy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGFza2xldC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGltZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRsdnMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRyaWNrbGVfdGltZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGFlc19jY20uaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGFlc19lY2IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGhtYWNfc2hhMjU2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xtYmVkdGxzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xwYmtkZjJfY21hYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHNoYTI1Ni5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0X2ltcGwuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19ibGFja2xpc3Rfc3R1Yi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2ZyYW1lLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0X2ltcGwuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY193aGl0ZWxpc3Rfc3R1Yi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGFubm91bmNlX2JlZ2luX2NsaWVudC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGNvbW1pc3Npb25lci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X2xvY2FsLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9tYW5hZ2VyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZHRscy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGVuZXJneV9zY2FuX2NsaWVudC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lcl9yb3V0ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxsZWFkZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxwYW5pZF9xdWVyeV9jbGllbnQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0aW1lc3RhbXAuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0bHZzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpY21wNi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfYWRkcmVzcy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X2ZpbHRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X21wbC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X3JvdXRlcy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcbmV0aWYuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XHNvY2tldC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcdWRwNi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYWRkcmVzc19yZXNvbHZlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYW5ub3VuY2VfYmVnaW5fc2VydmVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxlbmVyZ3lfc2Nhbl9zZXJ2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9jbGllbnQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2X3NlcnZlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcZGF0YV9wb2xsX21hbmFnZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGtleV9tYW5hZ2VyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsaW5rX3F1YWxpdHkuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGxvd3Bhbi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWVzaF9mb3J3YXJkZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZS5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX2NvbnN0YW50cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3JvdXRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3RsdnMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xvY2FsLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kaWFnbm9zdGljLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RpYWdub3N0aWNfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRccGFuaWRfcXVlcnlfc2VydmVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxzcmNfbWF0Y2hfY29udHJvbGxlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX25ldGlmLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX3VyaV9wYXRocy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdG9wb2xvZ3kuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcY2hpbGRfc3VwZXJ2aXNpb24uaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcc2xhYWNfYWRkcmVzcy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xqYW1fZGV0ZWN0b3IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcF9zdHJpbmcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHdyYXBfc3RkYm9vbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcF9zdGRpbnQuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNzMzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDU5MSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzA5YzJkMWMtODVmYi00MDgxLTgyMzUtOTI1YjQ1ZWQzYzRifTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xhcGkiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e0NFNzdBQTk4LUZDOTgtNEZDNi1CQjUyLThBODg2Mzc4QUI1RX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcY29tbW9uIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnthNTk2MzZiOC1kMDQ2LTQ2YjctOTkyYi03NjU3MmNhNzJiZDF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXGNvYXAiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezdjOTg5ZjUzLTQ4MGItNDJkNC1hMmRjLTQ1NGFkYWZkYTgxOH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcY3J5cHRvIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0NDRhYjhjNi02YjgzLTRhNWItOTA1OS02N2Y0NjlkYTEzMzF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXG1hYyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YTQ5YTljYzMtNmEzNy00OGE2LTgwNDktYjEwYzljZWNkMTkzfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xtZXNoY29wIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnswZTdmNGY1OC1hMTE1LTRjZTgtOGUzYi0xMDk0ZmI3OWFmNTJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXG5ldCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OWE2MTM1M2EtODYxMy00NDk2LTllZTgtYzNkMjgwMGM1YWM2fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1x0aHJlYWQiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2MxNGE3YTNmLTA4OWYtNDdlZS04MGRiLTFjYWYxYjQ3YWI2Yn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcdXRpbHMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e0EwRDJFOTkwLURDNUUtNEI1Ni1BNTUyLTg4OEY5NzIxNEExN308L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcbWlzc2luZyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57RjBEREE5MC1EMTNGLTRCNTYtQTU1Mi0zMjhGOTcxMjRBODF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntiNDkwNWMxNS05NzAyLTRmZjAtOGQ1Ny1lNzkyNjMzN2Q1MGZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXGNvYXAiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2MyZjcyMTMyLTBkZjEtNGRiYS1iMjRmLTBhYjY4Mzg3NDUzOH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcY29tbW9uIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5MmYyMGNlNy04Zjg3LTRhMWMtYmMwYi1kN2ZhM2RmZDNiNjB9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXGNyeXB0byI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzYxOGRkYzktNWM2Ni00ODVmLWEwZmYtZWJhYmIzNTA4NTY4fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xtYWMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkwMjk0NTk4LWU5NGItNGMwNy1hNTMxLTkzMzM1YTg5NTVkOX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcbmV0Ij4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnswYzc2ZDExNi0wYjRkLTRmZWMtYTBkOC01Y2ExMjc5MTMxMjR9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXHRocmVhZCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NzAyMTQ1ZjktMGU2Ni00ZTQ1LWIzZDQtZDQzZjJjZjE3ZTEwfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xtZXNoY29wIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2MzVhYWFiZi04MGYwLTQwZTItOTIxOC0yMmZmNzViYzBlMzJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXHV0aWxzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns1YWM5NmNiOS02MjU3LTQzODctOTIzOC0yNzY0OTkxNTQ2M2F9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXGFwaSI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MjVhNTY2MmQtMDcwOS00Njk4LThmZDktM2FiZmRlOGYwZmM2fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xtaXNzaW5nIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5NzE5NjlmMi1mNmVjLTUwYjQtODA2YS05Nzk2NWM5MzRjZWZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxjb21taXNzaW9uZXJfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxib3JkZXJfcm91dGVyX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcZGF0YXNldF9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGRhdGFzZXRfZnRkX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcZGhjcDZfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxpY21wNl9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGlwNl9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGluc3RhbmNlX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcam9pbmVyX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbGlua19hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGxpbmtfcmF3X2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbWVzc2FnZV9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXG5ldGRhdGFfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVx0YXNrbGV0X2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2Z0ZF9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfaGVhZGVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfc2VjdXJlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cbG9jYXRvci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cbG9nZ2luZy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cbWVzc2FnZS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGFza2xldC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGltZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRsdnMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRyaWNrbGVfdGltZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGFlc19jY20uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hYy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2ZyYW1lLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9jbGllbnQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2X3NlcnZlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaWNtcDYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X2FkZHJlc3MuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9maWx0ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9tcGwuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9yb3V0ZXMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XG5ldGlmLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxhZGRyZXNzX3Jlc29sdmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxkYXRhX3BvbGxfbWFuYWdlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcZW5lcmd5X3NjYW5fc2VydmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxrZXlfbWFuYWdlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbGlua19xdWFsaXR5LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsb3dwYW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1lc2hfZm9yd2FyZGVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGUuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZV9yb3V0ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlcl9mdGQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YV9sb2NhbC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRccGFuaWRfcXVlcnlfc2VydmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxzcmNfbWF0Y2hfY29udHJvbGxlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX25ldGlmLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0b3BvbG9neS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcdWRwNi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2JsYWNrbGlzdC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGNvbW1pc3Npb25lci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9sb2NhbC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlcl9mdGQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkdGxzLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGVuZXJneV9zY2FuX2NsaWVudC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxqb2luZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyX3JvdXRlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxsZWFkZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BccGFuaWRfcXVlcnlfY2xpZW50LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHRpbWVzdGFtcC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxtZXNoY29wX3RsdnMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfZWNiLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xobWFjX3NoYTI1Ni5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cbWJlZHRscy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9ccGJrZGYyX2NtYWMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHNoYTI1Ni5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xjaGlsZF9zdXBlcnZpc2lvbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdXRpbHM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHNsYWFjX2FkZHJlc3MuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xqYW1fZGV0ZWN0b3IuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwX3N0cm5sZW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwX3N0cmxjcHkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwX3N0cmxjYXQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGFubm91bmNlX2JlZ2luX2NsaWVudC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFubm91bmNlX2JlZ2luX3NlcnZlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY3JjMTYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGlhZ25vc3RpYy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfaGVhZGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfc2VjdXJlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY29kZV91dGlscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY29udGV4dC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cZGVidWcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGVuY29kaW5nLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2NhdG9yLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2dnaW5nLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxtZXNzYWdlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxuZXcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRhc2tsZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRpbWVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0cmlja2xlX3RpbWVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfY2NtLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19mcmFtZS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX3doaXRlbGlzdC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX3doaXRlbGlzdF9pbXBsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0X3N0dWIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2LmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2X3NlcnZlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaWNtcDYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X2FkZHJlc3MuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9maWx0ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9tcGwuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9yb3V0ZXMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XG5ldGlmLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxzb2NrZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XHVkcDYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFkZHJlc3NfcmVzb2x2ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFubm91bmNlX2JlZ2luX3NlcnZlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcZGF0YV9wb2xsX21hbmFnZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGVuZXJneV9zY2FuX3NlcnZlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRca2V5X21hbmFnZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGxpbmtfcXVhbGl0eS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbG93cGFuLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtZXNoX2ZvcndhcmRlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGVfY29uc3RhbnRzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGVfcm91dGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGVfdGx2cy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfbGVhZGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfbG9jYWwuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YV90bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxwYW5pZF9xdWVyeV9zZXJ2ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHNyY19tYXRjaF9jb250cm9sbGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfbmV0aWYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHRocmVhZF90bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfdXJpX3BhdGhzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0b3BvbG9neS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2JsYWNrbGlzdC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2JsYWNrbGlzdF9pbXBsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0X3N0dWIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxhbm5vdW5jZV9iZWdpbl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcY29tbWlzc2lvbmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X2xvY2FsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9tYW5hZ2VyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZHRscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxlbmVyZ3lfc2Nhbl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lcl9yb3V0ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcbGVhZGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHBhbmlkX3F1ZXJ5X2NsaWVudC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0aW1lc3RhbXAuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfZWNiLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xobWFjX3NoYTI1Ni5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cbWJlZHRscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9ccGJrZGYyX2NtYWMuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xzaGEyNTYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcY2hpbGRfc3VwZXJ2aXNpb24uaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xzbGFhY19hZGRyZXNzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x1dGlsczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcamFtX2RldGVjdG9yLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x1dGlsczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcF9zdHJpbmcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwX3N0ZGJvb2wuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwX3N0ZGludC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdXRpbHM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxjcmMxNi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcbGlua19yYXcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RpYWdub3N0aWMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGlhZ25vc3RpY190bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkX2sudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWRfay52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Y2IwNGUKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkX2sudmN4cHJvagpAQCAtMCwwICsxLDI3MSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEltcG9ydCBQcm9qZWN0PSJvcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezlCMzNDMTkwLTVEMDctNDBCRi05NTM2LTY4ODQzREM1RDdBRn08L1Byb2plY3RHdWlkPgorICAgIDxUZW1wbGF0ZUd1aWQ+ezhjMGUzZDhiLWRmNDMtNDU1Yi04MTVhLTRhMGU3Mjk3M2JjNn08L1RlbXBsYXRlR3VpZD4KKyAgICA8VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj52NC41PC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9uPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xMi4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICA8UGxhdGZvcm0gQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknID09ICcnIj5XaW4zMjwvUGxhdGZvcm0+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPERyaXZlclR5cGU+S01ERjwvRHJpdmVyVHlwZT4KKyAgICA8RHJpdmVyVGFyZ2V0UGxhdGZvcm0+VW5pdmVyc2FsPC9Ecml2ZXJUYXJnZXRQbGF0Zm9ybT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0tlcm5lbE1vZGVEcml2ZXIxMC4wPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFRhcmdldFZlcnNpb24+V2luZG93czEwPC9UYXJnZXRWZXJzaW9uPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFRhcmdldFZlcnNpb24+V2luZG93czEwPC9UYXJnZXRWZXJzaW9uPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxsaWJcPC9PdXREaXI+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSJvcGVudGhyZWFkLWNvcmUtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIFdJTkRPV1NfTE9HR0lORzsKKyAgICAgICAgT1BFTlRIUkVBRF9GVEQ9MTsKKyAgICAgICAgSEFWRV9TVERCT09MX0g9MTsKKyAgICAgICAgSEFWRV9TVERJTlRfSD0xOworICAgICAgICBPVEJVSUxEOworICAgICAgPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgICAlKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgICAuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3NcaW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjXGNvcmU7CisgICAgICAgIC4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHM7CisgICAgICAgIC4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xpbmNsdWRlOworICAgICAgICAuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3NcaW5jbHVkZV9jOTk7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0NzA2OzQ3NDg7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgorICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4KKyAgICAgIDxXcHBFbmFibGVkPnRydWU8L1dwcEVuYWJsZWQ+CisgICAgICA8V3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPi4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxwbGF0Zm9ybVxsb2dnaW5nLXdpbmRvd3MuaDwvV3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPgorICAgICAgPFdwcEFkZGl0aW9uYWxPcHRpb25zPi1rbSAlKFdwcEFkZGl0aW9uYWxPcHRpb25zKTwvV3BwQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8V3BwTW9kdWxlTmFtZT5vdENvcmU8L1dwcE1vZHVsZU5hbWU+CisgICAgICA8V3BwU2VhcmNoU3RyaW5nPldQUF9JTklUX1RSQUNJTkc8L1dwcFNlYXJjaFN0cmluZz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGNvbW1pc3Npb25lcl9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGJvcmRlcl9yb3V0ZXJfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxkYXRhc2V0X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcZGF0YXNldF9mdGRfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxkaGNwNl9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGljbXA2X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcaXA2X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcaW5zdGFuY2VfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxqb2luZXJfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxsaW5rX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbWVzc2FnZV9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXG5ldGRhdGFfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVx0YXNrbGV0X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2Z0ZF9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9oZWFkZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwX3NlY3VyZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY3JjMTYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvY2F0b3IuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvZ2dpbmcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG1lc3NhZ2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRhc2tsZXQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRpbWVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0bHZzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0cmlja2xlX3RpbWVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfY2NtLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfZWNiLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xobWFjX3NoYTI1Ni5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9ccGJrZGYyX2NtYWMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHNoYTI1Ni5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfZnJhbWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY193aGl0ZWxpc3QuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxjb21taXNzaW9uZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9sb2NhbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlcl9mdGQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkdGxzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcYW5ub3VuY2VfYmVnaW5fY2xpZW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZW5lcmd5X3NjYW5fY2xpZW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyX3JvdXRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGxlYWRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHBhbmlkX3F1ZXJ5X2NsaWVudC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHRpbWVzdGFtcC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXG1lc2hjb3BfdGx2cy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcZGhjcDZfY2xpZW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9zZXJ2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGljbXA2LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9hZGRyZXNzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfZmlsdGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfbXBsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfcm91dGVzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxuZXRpZi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcdWRwNi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYWRkcmVzc19yZXNvbHZlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYW5ub3VuY2VfYmVnaW5fc2VydmVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxkYXRhX3BvbGxfbWFuYWdlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcZW5lcmd5X3NjYW5fc2VydmVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxrZXlfbWFuYWdlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbGlua19xdWFsaXR5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsb3dwYW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1lc2hfZm9yd2FyZGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZV9yb3V0ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlcl9mdGQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YV9sb2NhbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kaWFnbm9zdGljLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxwYW5pZF9xdWVyeV9zZXJ2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHNyY19tYXRjaF9jb250cm9sbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfbmV0aWYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHRvcG9sb2d5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXGNoaWxkX3N1cGVydmlzaW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHNsYWFjX2FkZHJlc3MuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcamFtX2RldGVjdG9yLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXG1pc3Npbmdfc3RybGNhdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcbWlzc2luZ19zdHJsY3B5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xtaXNzaW5nX3N0cm5sZW4uYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3NcaW5jbHVkZVxvcGVudGhyZWFkLWNvcmUtd2luZG93cy1jb25maWcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxjb2FwLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcY29tbWlzc2lvbmVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcY3J5cHRvLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcYm9yZGVyX3JvdXRlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGRhdGFzZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxkYXRhc2V0X2Z0ZC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGRoY3A2X2NsaWVudC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGRoY3A2X3NlcnZlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGljbXA2LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcaW5zdGFuY2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxpcDYuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxqYW1fZGV0ZWN0aW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcam9pbmVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcbGluay5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXG1lc3NhZ2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxuZXRkYXRhLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcb3BlbnRocmVhZC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHRhc2tsZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFx0aHJlYWQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFx0aHJlYWRfZnRkLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcdHlwZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHVkcC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGxpbmtfcmF3LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfaGVhZGVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9zZWN1cmUuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGNvZGVfdXRpbHMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGNvbnRleHQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGNyYzE2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxkZWJ1Zy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cZW5jb2RpbmcuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvY2F0b3IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvZ2dpbmcuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG1lc3NhZ2UuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG5ldy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGFza2xldC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGltZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRsdnMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRyaWNrbGVfdGltZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGFlc19jY20uaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGFlc19lY2IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGhtYWNfc2hhMjU2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xtYmVkdGxzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xwYmtkZjJfY21hYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHNoYTI1Ni5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0X2ltcGwuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19ibGFja2xpc3Rfc3R1Yi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2ZyYW1lLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0X2ltcGwuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY193aGl0ZWxpc3Rfc3R1Yi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGFubm91bmNlX2JlZ2luX2NsaWVudC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGNvbW1pc3Npb25lci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X2xvY2FsLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9tYW5hZ2VyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZHRscy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGVuZXJneV9zY2FuX2NsaWVudC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lcl9yb3V0ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxsZWFkZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxwYW5pZF9xdWVyeV9jbGllbnQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0aW1lc3RhbXAuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0bHZzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcZGhjcDZfY2xpZW50LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9zZXJ2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGljbXA2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDYuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9hZGRyZXNzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfZmlsdGVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfbXBsLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfcm91dGVzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxuZXRpZi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcc29ja2V0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFx1ZHA2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG9wZW50aHJlYWQtY29yZS1jb25maWcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG9wZW50aHJlYWQtY29yZS1kZWZhdWx0LWNvbmZpZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcb3BlbnRocmVhZC1pbnN0YW5jZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFkZHJlc3NfcmVzb2x2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxhbm5vdW5jZV9iZWdpbl9zZXJ2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGRhdGFfcG9sbF9tYW5hZ2VyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxlbmVyZ3lfc2Nhbl9zZXJ2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGtleV9tYW5hZ2VyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsaW5rX3F1YWxpdHkuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGxvd3Bhbi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWVzaF9mb3J3YXJkZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZS5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX2NvbnN0YW50cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3JvdXRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3RsdnMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xvY2FsLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kaWFnbm9zdGljLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RpYWdub3N0aWNfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRccGFuaWRfcXVlcnlfc2VydmVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxzcmNfbWF0Y2hfY29udHJvbGxlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX25ldGlmLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX3VyaV9wYXRocy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdG9wb2xvZ3kuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcY2hpbGRfc3VwZXJ2aXNpb24uaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcc2xhYWNfYWRkcmVzcy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xqYW1fZGV0ZWN0b3IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcF9zdHJpbmcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHdyYXBfc3RkYm9vbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcF9zdGRpbnQuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWRfay52Y3hwcm9qLmZpbHRlcnMgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkX2sudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYTZkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkX2sudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsNjY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntjMDljMmQxYy04NWZiLTQwODEtODIzNS05MjViNDVlZDNjNGJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXGFwaSI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57Qjc4NzQ3QTktMTFDMi00Nzg0LUI4MjUtRDQ4RkQzODhGRTJGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xjb21tb24iPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2E1OTYzNmI4LWQwNDYtNDZiNy05OTJiLTc2NTcyY2E3MmJkMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcY29hcCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57N2M5ODlmNTMtNDgwYi00MmQ0LWEyZGMtNDU0YWRhZmRhODE4fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xjcnlwdG8iPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezQ0NGFiOGM2LTZiODMtNGE1Yi05MDU5LTY3ZjQ2OWRhMTMzMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcbWFjIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnthNDlhOWNjMy02YTM3LTQ4YTYtODA0OS1iMTBjOWNlY2QxOTN9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXG1lc2hjb3AiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezUwYTM5YWNjLWZhYjYtNGUyYS04NWI3LWQ3NjRiZTUyOTlmNX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcbmV0Ij4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5YTYxMzUzYS04NjEzLTQ0OTYtOWVlOC1jM2QyODAwYzVhYzZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXHRocmVhZCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzE0YTdhM2YtMDg5Zi00N2VlLTgwZGItMWNhZjFiNDdhYjZifTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1x1dGlscyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57QTBEMkU5OTAtREM1RS00QjU2LUE1NTItODg4Rjk3MjE0QTE3fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xtaXNzaW5nIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntGMEREQTkwLUQxM0YtNEI1Ni1BNTUyLTMyOEY5NzEyNEE4MX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2I0OTA1YzE1LTk3MDItNGZmMC04ZDU3LWU3OTI2MzM3ZDUwZn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcY29hcCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzJmNzIxMzItMGRmMS00ZGJhLWIyNGYtMGFiNjgzODc0NTM4fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xjb21tb24iPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkyZjIwY2U3LThmODctNGExYy1iYzBiLWQ3ZmEzZGZkM2I2MH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcY3J5cHRvIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntjNjE4ZGRjOS01YzY2LTQ4NWYtYTBmZi1lYmFiYjM1MDg1Njh9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXG1hYyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTAyOTQ1OTgtZTk0Yi00YzA3LWE1MzEtOTMzMzVhODk1NWQ5fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xtZXNoY29wIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns4ZjU0ZThiMy1kOGZiLTRmZWQtODhjZS00MmIzOWYxNzFkMGJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXG5ldCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MGM3NmQxMTYtMGI0ZC00ZmVjLWEwZDgtNWNhMTI3OTEzMTI0fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1x0aHJlYWQiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezcwMjE0NWY5LTBlNjYtNGU0NS1iM2Q0LWQ0M2YyY2YxN2UxMH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcdXRpbHMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezVhYzk2Y2I5LTYyNTctNDM4Ny05MjM4LTI3NjQ5OTE1NDYzYX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcYXBpIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2M2EyN2QyMC1iMDM5LTQ2YjQtYWZmOS02M2FjZTIwMTBiOWJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXG9wZW50aHJlYWQiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezJiNjY2MzVkLWZiMDktNDIxYi05OTQyLThjNDNkZjVjOGM3N308L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcbWlzc2luZyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTcxOTY5ZjItZjZlYy01MGI0LTgwNmEtOTc5NjVjOTM0Y2VmfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcY29tbWlzc2lvbmVyX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcYm9yZGVyX3JvdXRlcl9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGRhdGFzZXRfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxkYXRhc2V0X2Z0ZF9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGRoY3A2X2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcaWNtcDZfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxpcDZfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxpbnN0YW5jZV9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGpvaW5lcl9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGxpbmtfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxtZXNzYWdlX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbmV0ZGF0YV9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXHRhc2tsZXRfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVx0aHJlYWRfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVx0aHJlYWRfZnRkX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXAuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvYXA8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9oZWFkZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvYXA8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9zZWN1cmUuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvYXA8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2NhdG9yLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2dnaW5nLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxtZXNzYWdlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0YXNrbGV0LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0aW1lci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGx2cy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdHJpY2tsZV90aW1lci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cYWVzX2NjbS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfZnJhbWUuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY193aGl0ZWxpc3QuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2X2NsaWVudC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcZGhjcDZfc2VydmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpY21wNi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfYWRkcmVzcy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X2ZpbHRlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X21wbC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X3JvdXRlcy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcbmV0aWYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFkZHJlc3NfcmVzb2x2ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGRhdGFfcG9sbF9tYW5hZ2VyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxlbmVyZ3lfc2Nhbl9zZXJ2ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGtleV9tYW5hZ2VyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsaW5rX3F1YWxpdHkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGxvd3Bhbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWVzaF9mb3J3YXJkZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3JvdXRlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfbGVhZGVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfbGVhZGVyX2Z0ZC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xvY2FsLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RpYWdub3N0aWMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHBhbmlkX3F1ZXJ5X3NlcnZlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcc3JjX21hdGNoX2NvbnRyb2xsZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHRocmVhZF9uZXRpZi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdG9wb2xvZ3kuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XHVkcDYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19ibGFja2xpc3QuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxjb21taXNzaW9uZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbG9jYWwuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X21hbmFnZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X21hbmFnZXJfZnRkLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZHRscy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxlbmVyZ3lfc2Nhbl9jbGllbnQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lcl9yb3V0ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcbGVhZGVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHBhbmlkX3F1ZXJ5X2NsaWVudC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0aW1lc3RhbXAuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcbWVzaGNvcF90bHZzLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cYWVzX2VjYi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9caG1hY19zaGEyNTYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHBia2RmMl9jbWFjLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xzaGEyNTYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xjaGlsZF9zdXBlcnZpc2lvbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdXRpbHM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHNsYWFjX2FkZHJlc3MuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xqYW1fZGV0ZWN0b3IuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYW5ub3VuY2VfYmVnaW5fc2VydmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcYW5ub3VuY2VfYmVnaW5fY2xpZW50LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY3JjMTYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcbWlzc2luZ19zdHJsY3B5LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWlzc2luZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcbWlzc2luZ19zdHJsY2F0LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWlzc2luZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcbWlzc2luZ19zdHJubGVuLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWlzc2luZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG9wZW50aHJlYWQtY29yZS1jb25maWcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfaGVhZGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfc2VjdXJlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY29kZV91dGlscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY29udGV4dC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cZGVidWcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGVuY29kaW5nLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2NhdG9yLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2dnaW5nLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxtZXNzYWdlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxuZXcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRhc2tsZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRpbWVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0cmlja2xlX3RpbWVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfY2NtLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19mcmFtZS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX3doaXRlbGlzdC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX3doaXRlbGlzdF9pbXBsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0X3N0dWIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2LmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2X3NlcnZlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaWNtcDYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X2FkZHJlc3MuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9maWx0ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9tcGwuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9yb3V0ZXMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XG5ldGlmLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxzb2NrZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XHVkcDYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFkZHJlc3NfcmVzb2x2ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGRhdGFfcG9sbF9tYW5hZ2VyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxlbmVyZ3lfc2Nhbl9zZXJ2ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGtleV9tYW5hZ2VyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsaW5rX3F1YWxpdHkuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGxvd3Bhbi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWVzaF9mb3J3YXJkZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX2NvbnN0YW50cy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3JvdXRlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3RsdnMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xvY2FsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfdGx2cy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kaWFnbm9zdGljLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RpYWdub3N0aWNfdGx2cy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRccGFuaWRfcXVlcnlfc2VydmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxzcmNfbWF0Y2hfY29udHJvbGxlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX25ldGlmLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfdGx2cy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX3VyaV9wYXRocy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdG9wb2xvZ3kuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19ibGFja2xpc3QuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19ibGFja2xpc3RfaW1wbC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2JsYWNrbGlzdF9zdHViLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcY29tbWlzc2lvbmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X2xvY2FsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9tYW5hZ2VyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZHRscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxlbmVyZ3lfc2Nhbl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lcl9yb3V0ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcbGVhZGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHBhbmlkX3F1ZXJ5X2NsaWVudC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0aW1lc3RhbXAuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfZWNiLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xobWFjX3NoYTI1Ni5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cbWJlZHRscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9ccGJrZGYyX2NtYWMuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xzaGEyNTYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcY2hpbGRfc3VwZXJ2aXNpb24uaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xzbGFhY19hZGRyZXNzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x1dGlsczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcamFtX2RldGVjdG9yLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x1dGlsczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxhbm5vdW5jZV9iZWdpbl9zZXJ2ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxhbm5vdW5jZV9iZWdpbl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxjcmMxNi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcb3BlbnRocmVhZC1jb3JlLWRlZmF1bHQtY29uZmlnLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG9wZW50aHJlYWQtaW5zdGFuY2UuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHR5cGVzLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXGluY2x1ZGVcb3BlbnRocmVhZC1jb3JlLXdpbmRvd3MtY29uZmlnLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxjb2FwLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGNvbW1pc3Npb25lci5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxjcnlwdG8uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcYm9yZGVyX3JvdXRlci5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxkYXRhc2V0LmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGRhdGFzZXRfZnRkLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGRoY3A2X2NsaWVudC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxkaGNwNl9zZXJ2ZXIuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcaWNtcDYuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcaW5zdGFuY2UuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcaXA2LmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGphbV9kZXRlY3Rpb24uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcam9pbmVyLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGxpbmsuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcbWVzc2FnZS5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxuZXRkYXRhLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXG9wZW50aHJlYWQuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcdGFza2xldC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFx0aHJlYWQuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcdGhyZWFkX2Z0ZC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFx1ZHAuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbGlua19yYXcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcHBlcl9zdHJpbmcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtaXNzaW5nPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwcGVyX3N0ZGJvb2wuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtaXNzaW5nPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwcGVyX3N0ZGludC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1pc3Npbmc8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxODMyZQotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL21iZWR0bHMudmN4cHJvagpAQCAtMCwwICsxLDg2IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SW1wb3J0IFByb2plY3Q9Im9wZW50aHJlYWQuY29uZmlndXJhdGlvbi5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NDExMUM4QkItRDM1NC00MzQ4LUFEM0MtRUI2ODMyRTg0ODMxfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm1iZWR0bHM8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcbGliXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgIDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICA8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICAgIC4uXC4uXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXHNyY1xjb3JlOworICAgICAgICAuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzOworICAgICAgICAuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGVcbWJlZHRscworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+CisgICAgICA8U0RMQ2hlY2s+dHJ1ZTwvU0RMQ2hlY2s+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNcaGFyZHdhcmVfZW50cm9weS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcYWVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxiaWdudW0uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNjbS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY2lwaGVyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxjaXBoZXJfd3JhcC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY21hYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY3RyX2RyYmcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGRlYnVnLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlY2pwYWtlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlY3AuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGVjcF9jdXJ2ZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGVudHJvcHkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGVudHJvcHlfcG9sbC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcbWQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XG1kX3dyYXAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XG1lbW9yeV9idWZmZXJfYWxsb2MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHBsYXRmb3JtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzaGEyNTYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF9jaXBoZXJzdWl0ZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF9jbGkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF9jb29raWUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF9zcnYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF90aWNrZXQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF90bHMuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzLnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL21iZWR0bHMudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Mzk5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDkyIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNccmVwbyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MGEyY2U3N2UtZGNjZi00MDhjLWFlYTAtN2E3ODEyODRhOTM2fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnkiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezg1OTgxOWRjLWU4NGUtNDg1NC1hZDMyLTI4MTlkNjBkYTM4Yn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xoYXJkd2FyZV9lbnRyb3B5LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGFlcy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcYmlnbnVtLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxjY20uYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNpcGhlci5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY2lwaGVyX3dyYXAuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNtYWMuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGN0cl9kcmJnLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxkZWJ1Zy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNqcGFrZS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNwLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlY3BfY3VydmVzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5X3BvbGwuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XG1kLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZF93cmFwLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZW1vcnlfYnVmZmVyX2FsbG9jLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxwbGF0Zm9ybS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcc2hhMjU2LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2lwaGVyc3VpdGVzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2xpLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY29va2llLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfc3J2LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGlja2V0LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGxzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbWJlZHRsc19rLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzX2sudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWZkNDJkCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbWJlZHRsc19rLnZjeHByb2oKQEAgLTAsMCArMSw4OCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEltcG9ydCBQcm9qZWN0PSJvcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn08L1Byb2plY3RHdWlkPgorICAgIDxUZW1wbGF0ZUd1aWQ+ezhjMGUzZDhiLWRmNDMtNDU1Yi04MTVhLTRhMGU3Mjk3M2JjNn08L1RlbXBsYXRlR3VpZD4KKyAgICA8VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj52NC41PC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9uPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xMi4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICA8UGxhdGZvcm0gQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknID09ICcnIj5XaW4zMjwvUGxhdGZvcm0+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPERyaXZlclR5cGU+S01ERjwvRHJpdmVyVHlwZT4KKyAgICA8RHJpdmVyVGFyZ2V0UGxhdGZvcm0+VW5pdmVyc2FsPC9Ecml2ZXJUYXJnZXRQbGF0Zm9ybT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0tlcm5lbE1vZGVEcml2ZXIxMC4wPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFRhcmdldFZlcnNpb24+V2luZG93czEwPC9UYXJnZXRWZXJzaW9uPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFRhcmdldFZlcnNpb24+V2luZG93czEwPC9UYXJnZXRWZXJzaW9uPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxsaWJcPC9PdXREaXI+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICAgIC4uXC4uXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXHNyY1xjb3JlOworICAgICAgICAuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzOworICAgICAgICAuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGVcbWJlZHRsczsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXGluY2x1ZGVfYzk5OworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIEhBVkVfU1REQk9PTF9IPTE7CisgICAgICAgIEhBVkVfU1RESU5UX0g9MTsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEzMjs0MjQyOzQyNDU7NDYwMzs0NjI3OzQ5ODY7NDk4Nzs0OTk2OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+CisgICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXGhhcmR3YXJlX2VudHJvcHkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGFlcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcYmlnbnVtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxjY20uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNpcGhlci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY2lwaGVyX3dyYXAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNtYWMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGN0cl9kcmJnLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxkZWJ1Zy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNqcGFrZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlY3BfY3VydmVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5X3BvbGwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XG1kLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZF93cmFwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZW1vcnlfYnVmZmVyX2FsbG9jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxwbGF0Zm9ybS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcc2hhMjU2LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2lwaGVyc3VpdGVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2xpLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY29va2llLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfc3J2LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGlja2V0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGxzLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiIC8+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzX2sudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbWJlZHRsc19rLnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE4MDNmCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbWJlZHRsc19rLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDkyIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNccmVwbyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MGEyY2U3N2UtZGNjZi00MDhjLWFlYTAtN2E3ODEyODRhOTM2fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnkiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezg3ZWM2OGIzLTViZWMtNGM2MC1iNzY0LWMyZGFmM2ZmY2ZiMn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xoYXJkd2FyZV9lbnRyb3B5LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGFlcy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcYmlnbnVtLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxjY20uYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNpcGhlci5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY2lwaGVyX3dyYXAuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNtYWMuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGN0cl9kcmJnLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxkZWJ1Zy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNqcGFrZS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNwLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlY3BfY3VydmVzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5X3BvbGwuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XG1kLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZF93cmFwLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZW1vcnlfYnVmZmVyX2FsbG9jLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxwbGF0Zm9ybS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcc2hhMjU2LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2lwaGVyc3VpdGVzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2xpLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY29va2llLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfc3J2LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGlja2V0LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGxzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vb3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYTI5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gIAorPFByb2plY3QgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+ICAKKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8QVJNIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkFSTTwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxBUk0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5BUk08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vcGVudGhyZWFkLnNsbiBiL2V0Yy92aXN1YWwtc3R1ZGlvL29wZW50aHJlYWQuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZTlmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vcGVudGhyZWFkLnNsbgpAQCAtMCwwICsxLDM4OSBAQAor77u/CitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMi4wMAorIyBWaXN1YWwgU3R1ZGlvIDE0CitWaXN1YWxTdHVkaW9WZXJzaW9uID0gMTQuMC4yNTQyMC4xCitNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbiA9IDEwLjAuNDAyMTkuMQorUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJjb25maWcgZmlsZXMiLCAiY29uZmlnIGZpbGVzIiwgIns1M0Y0RUVGNi1COTZELTQ4ODctQjlDRi1DRDIxRThCRUNEMTV9IgorCVByb2plY3RTZWN0aW9uKFNvbHV0aW9uSXRlbXMpID0gcHJlUHJvamVjdAorCQkuLlwuLlwuYXBwdmV5b3IueW1sID0gLi5cLi5cLmFwcHZleW9yLnltbAorCQkuLlwuLlwuY29kZWNvdi55bWwgPSAuLlwuLlwuY29kZWNvdi55bWwKKwkJLi5cLi5cLnRyYXZpcy55bWwgPSAuLlwuLlwudHJhdmlzLnltbAorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7MjE1MEUzMzMtOEZEQy00MkEzLTk0NzQtMUEzOTU2RDQ2REU4fSIpID0gImV4YW1wbGVzIiwgImV4YW1wbGVzIiwgIns3NkVBNTQxRS1DQUIxLTREQjUtQTM5Ri1FM0RCMkE3OENERER9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJzcmMiLCAic3JjIiwgIns5NUJEMDY2OS0wNEM4LTRFRUItQjNDQy0wNTM1QjAzRjQ0Njh9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJ0ZXN0cyIsICJ0ZXN0cyIsICJ7MzVGNkFCNzEtNUJEMi00RDUzLThBNTEtRDc1Q0NENENDQzNEfSIKK0VuZFByb2plY3QKK1Byb2plY3QoInsyMTUwRTMzMy04RkRDLTQyQTMtOTQ3NC0xQTM5NTZENDZERTh9IikgPSAidGhpcmRfcGFydHkiLCAidGhpcmRfcGFydHkiLCAiezg3M0U5RDE2LTJBMDgtNDFGQy1CMzAxLTc5Qzk1QjNBOEY5OH0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImxpYm9wZW50aHJlYWQiLCAibGlib3BlbnRocmVhZC52Y3hwcm9qIiwgIntERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJsaWJvcGVudGhyZWFkX2siLCAibGlib3BlbnRocmVhZF9rLnZjeHByb2oiLCAiezlCMzNDMTkwLTVEMDctNDBCRi05NTM2LTY4ODQzREM1RDdBRn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1iZWR0bHMiLCAibWJlZHRscy52Y3hwcm9qIiwgIns0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYmVkdGxzX2siLCAibWJlZHRsc19rLnZjeHByb2oiLCAiezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIlVuaXRUZXN0cyIsICJVbml0VGVzdHMudmN4cHJvaiIsICJ7RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibGlib3BlbnRocmVhZC13aW5kb3dzIiwgImxpYm9wZW50aHJlYWQtd2luZG93cy52Y3hwcm9qIiwgInszMDcyM0MzOC1CQTNCLTQ0QzktOEQ2NC1DNTg2MUEyNjkzNEZ9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJsaWJvcGVudGhyZWFkLWNsaSIsICJsaWJvcGVudGhyZWFkLWNsaS52Y3hwcm9qIiwgIns0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJvdC1jbGkiLCAib3QtY2xpLnZjeHByb2oiLCAiezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImxpYm9wZW50aHJlYWQtbmNwLXNwaSIsICJsaWJvcGVudGhyZWFkLW5jcC1zcGkudmN4cHJvaiIsICJ7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibGlib3BlbnRocmVhZC1uY3AtdWFydCIsICJsaWJvcGVudGhyZWFkLW5jcC11YXJ0LnZjeHByb2oiLCAie0Q5NDg2N0QyLTZEQUUtNDdFMi05NjJBLTVFOEU2NTgxMzREMX0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm90LW5jcC1zcGkiLCAib3QtbmNwLXNwaS52Y3hwcm9qIiwgIntCNEM3NDRFQy1CNjYyLTQ2QzYtQTA3Ni1GQjU4RkE4RkRGMUJ9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJvdC1uY3AtdWFydCIsICJvdC1uY3AtdWFydC52Y3hwcm9qIiwgIns5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJkcml2ZXJzIiwgImRyaXZlcnMiLCAiezYxRThBNEEwLTgxMzgtNDlEQi05N0I0LTNCRUM4N0M4RTEzM30iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm90THdmIiwgIm90THdmLnZjeHByb2oiLCAiezNGMUY3RjZDLTJBMzMtNDYzNS05ODgwLTA4RkM1QkM0RTQzNX0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm90QXBpIiwgIm90QXBpLnZjeHByb2oiLCAie0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImxpYm9wZW50aHJlYWQtY2xpLXdpbmRvd3MiLCAibGlib3BlbnRocmVhZC1jbGktd2luZG93cy52Y3hwcm9qIiwgInsyODgzNDQ5OC0zODM3LTQ0QTUtOEY2Ny0yNDlBQkFCN0I5N0R9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJvdENsaSIsICJvdENsaS52Y3hwcm9qIiwgIntDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJvdE5vZGVBcGkiLCAib3ROb2RlQXBpLnZjeHByb2oiLCAie0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7RkFFMDRFQzAtMzAxRi0xMUQzLUJGNEItMDBDMDRGNzlFRkJDfSIpID0gIm90VGVzdFJ1bm5lciIsICJvdFRlc3RSdW5uZXIuY3Nwcm9qIiwgIntENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJPcGVuVGhyZWFkIiwgIk9wZW5UaHJlYWQudmN4cHJvaiIsICJ7RjhDMjI4NDQtOUI5My00OTc4LTgwREYtOEFGMkIzN0E3QUJCfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9ID0ge0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzcGluZWxfayIsICJzcGluZWxfay52Y3hwcm9qIiwgIntBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJvdHRtcCIsICJvdHRtcC52Y3hwcm9qIiwgInsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9IgorRW5kUHJvamVjdAorR2xvYmFsCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KKwkJRGVidWd8QVJNID0gRGVidWd8QVJNCisJCURlYnVnfHg2NCA9IERlYnVnfHg2NAorCQlEZWJ1Z3x4ODYgPSBEZWJ1Z3x4ODYKKwkJUmVsZWFzZXxBUk0gPSBSZWxlYXNlfEFSTQorCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0CisJCVJlbGVhc2V8eDg2ID0gUmVsZWFzZXx4ODYKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24KKwkJe0RENTAxOEJFLTU0QzYtNEZENC05RjhELTA4RDUyRkMwQ0Q0MH0uRGVidWd8QVJNLkFjdGl2ZUNmZyA9IERlYnVnfEFSTQorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5EZWJ1Z3xBUk0uQnVpbGQuMCA9IERlYnVnfEFSTQorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXtERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0RENTAxOEJFLTU0QzYtNEZENC05RjhELTA4RDUyRkMwQ0Q0MH0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7OUIzM0MxOTAtNUQwNy00MEJGLTk1MzYtNjg4NDNEQzVEN0FGfS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LkRlYnVnfEFSTS5EZXBsb3kuMCA9IERlYnVnfEFSTQorCQl7OUIzM0MxOTAtNUQwNy00MEJGLTk1MzYtNjg4NDNEQzVEN0FGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7OUIzM0MxOTAtNUQwNy00MEJGLTk1MzYtNjg4NDNEQzVEN0FGfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LkRlYnVnfHg4Ni5EZXBsb3kuMCA9IERlYnVnfFdpbjMyCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7OUIzM0MxOTAtNUQwNy00MEJGLTk1MzYtNjg4NDNEQzVEN0FGfS5SZWxlYXNlfEFSTS5EZXBsb3kuMCA9IFJlbGVhc2V8QVJNCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7OUIzM0MxOTAtNUQwNy00MEJGLTk1MzYtNjg4NDNEQzVEN0FGfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8eDg2LkRlcGxveS4wID0gUmVsZWFzZXxXaW4zMgorCQl7NDExMUM4QkItRDM1NC00MzQ4LUFEM0MtRUI2ODMyRTg0ODMxfS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezQxMTFDOEJCLUQzNTQtNDM0OC1BRDNDLUVCNjgzMkU4NDgzMX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezQxMTFDOEJCLUQzNTQtNDM0OC1BRDNDLUVCNjgzMkU4NDgzMX0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezQxMTFDOEJCLUQzNTQtNDM0OC1BRDNDLUVCNjgzMkU4NDgzMX0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJezQxMTFDOEJCLUQzNTQtNDM0OC1BRDNDLUVCNjgzMkU4NDgzMX0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NDExMUM4QkItRDM1NC00MzQ4LUFEM0MtRUI2ODMyRTg0ODMxfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uRGVidWd8QVJNLkRlcGxveS4wID0gRGVidWd8QVJNCisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uRGVidWd8eDg2LkRlcGxveS4wID0gRGVidWd8V2luMzIKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9LlJlbGVhc2V8QVJNLkRlcGxveS4wID0gUmVsZWFzZXxBUk0KKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXx4ODYuRGVwbG95LjAgPSBSZWxlYXNlfFdpbjMyCisJCXtGRDY0QkYxNy04RDM2LTQ1NzgtOEQxMy03N0IxMjNCRTMwRDN9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfS5SZWxlYXNlfEFSTS5BY3RpdmVDZmcgPSBSZWxlYXNlfEFSTQorCQl7RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBUk0KKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtGRDY0QkYxNy04RDM2LTQ1NzgtOEQxMy03N0IxMjNCRTMwRDN9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezMwNzIzQzM4LUJBM0ItNDRDOS04RDY0LUM1ODYxQTI2OTM0Rn0uRGVidWd8QVJNLkFjdGl2ZUNmZyA9IERlYnVnfEFSTQorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5EZWJ1Z3xBUk0uQnVpbGQuMCA9IERlYnVnfEFSTQorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXszMDcyM0MzOC1CQTNCLTQ0QzktOEQ2NC1DNTg2MUEyNjkzNEZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXszMDcyM0MzOC1CQTNCLTQ0QzktOEQ2NC1DNTg2MUEyNjkzNEZ9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXszMDcyM0MzOC1CQTNCLTQ0QzktOEQ2NC1DNTg2MUEyNjkzNEZ9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXszMDcyM0MzOC1CQTNCLTQ0QzktOEQ2NC1DNTg2MUEyNjkzNEZ9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezMwNzIzQzM4LUJBM0ItNDRDOS04RDY0LUM1ODYxQTI2OTM0Rn0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NDFCMzIwNjktNjMyRS00NTc4LTg1NUItQTM2RUJGQTgwQjU2fS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezQxQjMyMDY5LTYzMkUtNDU3OC04NTVCLUEzNkVCRkE4MEI1Nn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezQxQjMyMDY5LTYzMkUtNDU3OC04NTVCLUEzNkVCRkE4MEI1Nn0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezQxQjMyMDY5LTYzMkUtNDU3OC04NTVCLUEzNkVCRkE4MEI1Nn0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJezQxQjMyMDY5LTYzMkUtNDU3OC04NTVCLUEzNkVCRkE4MEI1Nn0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NDFCMzIwNjktNjMyRS00NTc4LTg1NUItQTM2RUJGQTgwQjU2fS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs5MUQzQURFQS1GMUZFLTQ0MzMtOTVCNi1GOEY2QTdDRjdCQUZ9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7OTFEM0FERUEtRjFGRS00NDMzLTk1QjYtRjhGNkE3Q0Y3QkFGfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7OTFEM0FERUEtRjFGRS00NDMzLTk1QjYtRjhGNkE3Q0Y3QkFGfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7OTFEM0FERUEtRjFGRS00NDMzLTk1QjYtRjhGNkE3Q0Y3QkFGfS5SZWxlYXNlfEFSTS5BY3RpdmVDZmcgPSBSZWxlYXNlfEFSTQorCQl7OTFEM0FERUEtRjFGRS00NDMzLTk1QjYtRjhGNkE3Q0Y3QkFGfS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBUk0KKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs5MUQzQURFQS1GMUZFLTQ0MzMtOTVCNi1GOEY2QTdDRjdCQUZ9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0I5MkY0NDlFLTBGRDktNDRGQy1BQ0ZBLTY1MjFBMzI0MENBMn0uRGVidWd8QVJNLkFjdGl2ZUNmZyA9IERlYnVnfEFSTQorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5EZWJ1Z3xBUk0uQnVpbGQuMCA9IERlYnVnfEFSTQorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtCOTJGNDQ5RS0wRkQ5LTQ0RkMtQUNGQS02NTIxQTMyNDBDQTJ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtCOTJGNDQ5RS0wRkQ5LTQ0RkMtQUNGQS02NTIxQTMyNDBDQTJ9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtCOTJGNDQ5RS0wRkQ5LTQ0RkMtQUNGQS02NTIxQTMyNDBDQTJ9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXtCOTJGNDQ5RS0wRkQ5LTQ0RkMtQUNGQS02NTIxQTMyNDBDQTJ9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0I5MkY0NDlFLTBGRDktNDRGQy1BQ0ZBLTY1MjFBMzI0MENBMn0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RDk0ODY3RDItNkRBRS00N0UyLTk2MkEtNUU4RTY1ODEzNEQxfS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0Q5NDg2N0QyLTZEQUUtNDdFMi05NjJBLTVFOEU2NTgxMzREMX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0Q5NDg2N0QyLTZEQUUtNDdFMi05NjJBLTVFOEU2NTgxMzREMX0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0Q5NDg2N0QyLTZEQUUtNDdFMi05NjJBLTVFOEU2NTgxMzREMX0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJe0Q5NDg2N0QyLTZEQUUtNDdFMi05NjJBLTVFOEU2NTgxMzREMX0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RDk0ODY3RDItNkRBRS00N0UyLTk2MkEtNUU4RTY1ODEzNEQxfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtCNEM3NDRFQy1CNjYyLTQ2QzYtQTA3Ni1GQjU4RkE4RkRGMUJ9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7QjRDNzQ0RUMtQjY2Mi00NkM2LUEwNzYtRkI1OEZBOEZERjFCfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7QjRDNzQ0RUMtQjY2Mi00NkM2LUEwNzYtRkI1OEZBOEZERjFCfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7QjRDNzQ0RUMtQjY2Mi00NkM2LUEwNzYtRkI1OEZBOEZERjFCfS5SZWxlYXNlfEFSTS5BY3RpdmVDZmcgPSBSZWxlYXNlfEFSTQorCQl7QjRDNzQ0RUMtQjY2Mi00NkM2LUEwNzYtRkI1OEZBOEZERjFCfS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBUk0KKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtCNEM3NDRFQy1CNjYyLTQ2QzYtQTA3Ni1GQjU4RkE4RkRGMUJ9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezlFRUY5RENELUVBOEYtNDE1NC1CRDAyLUFCMkIzMUNFQzMyNH0uRGVidWd8QVJNLkFjdGl2ZUNmZyA9IERlYnVnfEFSTQorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5EZWJ1Z3xBUk0uQnVpbGQuMCA9IERlYnVnfEFSTQorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXs5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezlFRUY5RENELUVBOEYtNDE1NC1CRDAyLUFCMkIzMUNFQzMyNH0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LkRlYnVnfEFSTS5EZXBsb3kuMCA9IERlYnVnfEFSTQorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LkRlYnVnfHg2NC5EZXBsb3kuMCA9IERlYnVnfHg2NAorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezNGMUY3RjZDLTJBMzMtNDYzNS05ODgwLTA4RkM1QkM0RTQzNX0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5EZWJ1Z3x4ODYuRGVwbG95LjAgPSBEZWJ1Z3xXaW4zMgorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5SZWxlYXNlfEFSTS5BY3RpdmVDZmcgPSBSZWxlYXNlfEFSTQorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBUk0KKwkJezNGMUY3RjZDLTJBMzMtNDYzNS05ODgwLTA4RkM1QkM0RTQzNX0uUmVsZWFzZXxBUk0uRGVwbG95LjAgPSBSZWxlYXNlfEFSTQorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezNGMUY3RjZDLTJBMzMtNDYzNS05ODgwLTA4RkM1QkM0RTQzNX0uUmVsZWFzZXx4NjQuRGVwbG95LjAgPSBSZWxlYXNlfHg2NAorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LlJlbGVhc2V8eDg2LkRlcGxveS4wID0gUmVsZWFzZXxXaW4zMgorCQl7RUQwRUEyNjItQzIyMi00MkM3LTk4RDMtRTcwQzcyOTc4RUQyfS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJe0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RUQwRUEyNjItQzIyMi00MkM3LTk4RDMtRTcwQzcyOTc4RUQyfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXsyODgzNDQ5OC0zODM3LTQ0QTUtOEY2Ny0yNDlBQkFCN0I5N0R9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7Mjg4MzQ0OTgtMzgzNy00NEE1LThGNjctMjQ5QUJBQjdCOTdEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7Mjg4MzQ0OTgtMzgzNy00NEE1LThGNjctMjQ5QUJBQjdCOTdEfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7Mjg4MzQ0OTgtMzgzNy00NEE1LThGNjctMjQ5QUJBQjdCOTdEfS5SZWxlYXNlfEFSTS5BY3RpdmVDZmcgPSBSZWxlYXNlfEFSTQorCQl7Mjg4MzQ0OTgtMzgzNy00NEE1LThGNjctMjQ5QUJBQjdCOTdEfS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBUk0KKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXsyODgzNDQ5OC0zODM3LTQ0QTUtOEY2Ny0yNDlBQkFCN0I5N0R9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0NBQzhBMDBFLUM2QzgtNENGMC1CQTVBLUM5QTlBNjAxQzZEQn0uRGVidWd8QVJNLkFjdGl2ZUNmZyA9IERlYnVnfEFSTQorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5EZWJ1Z3xBUk0uQnVpbGQuMCA9IERlYnVnfEFSTQorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXtDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0NBQzhBMDBFLUM2QzgtNENGMC1CQTVBLUM5QTlBNjAxQzZEQn0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QjdDNkYzNDQtNzI4Ny00OTMwLUFGMzgtMjIzNjIyQkQ4Q0JCfS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJe0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QjdDNkYzNDQtNzI4Ny00OTMwLUFGMzgtMjIzNjIyQkQ4Q0JCfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBbnkgQ1BVCisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QW55IENQVQorCQl7RDU1NzdFNTEtRkEzMS00ODAyLTg2NjktMURCMzI4MDU5MzVFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7RDU1NzdFNTEtRkEzMS00ODAyLTg2NjktMURCMzI4MDU5MzVFfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QW55IENQVQorCQl7RDU1NzdFNTEtRkEzMS00ODAyLTg2NjktMURCMzI4MDU5MzVFfS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBbnkgQ1BVCisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RDU1NzdFNTEtRkEzMS00ODAyLTg2NjktMURCMzI4MDU5MzVFfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uRGVidWd8QVJNLkRlcGxveS4wID0gRGVidWd8QVJNCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uRGVidWd8eDY0LkRlcGxveS4wID0gRGVidWd8eDY0CisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7RjhDMjI4NDQtOUI5My00OTc4LTgwREYtOEFGMkIzN0E3QUJCfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LkRlYnVnfHg4Ni5EZXBsb3kuMCA9IERlYnVnfFdpbjMyCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7RjhDMjI4NDQtOUI5My00OTc4LTgwREYtOEFGMkIzN0E3QUJCfS5SZWxlYXNlfEFSTS5EZXBsb3kuMCA9IFJlbGVhc2V8QVJNCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RjhDMjI4NDQtOUI5My00OTc4LTgwREYtOEFGMkIzN0E3QUJCfS5SZWxlYXNlfHg2NC5EZXBsb3kuMCA9IFJlbGVhc2V8eDY0CisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uUmVsZWFzZXx4ODYuRGVwbG95LjAgPSBSZWxlYXNlfFdpbjMyCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uRGVidWd8QVJNLkRlcGxveS4wID0gRGVidWd8QVJNCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uRGVidWd8eDY0LkRlcGxveS4wID0gRGVidWd8eDY0CisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QTU1NzY2QjUtNThCNi00NTE5LTgzNUUtNUE0QjdDMTY0QjVBfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LkRlYnVnfHg4Ni5EZXBsb3kuMCA9IERlYnVnfFdpbjMyCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7QTU1NzY2QjUtNThCNi00NTE5LTgzNUUtNUE0QjdDMTY0QjVBfS5SZWxlYXNlfEFSTS5EZXBsb3kuMCA9IFJlbGVhc2V8QVJNCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QTU1NzY2QjUtNThCNi00NTE5LTgzNUUtNUE0QjdDMTY0QjVBfS5SZWxlYXNlfHg2NC5EZXBsb3kuMCA9IFJlbGVhc2V8eDY0CisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uUmVsZWFzZXx4ODYuRGVwbG95LjAgPSBSZWxlYXNlfFdpbjMyCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uRGVidWd8QVJNLkRlcGxveS4wID0gRGVidWd8QVJNCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uRGVidWd8eDY0LkRlcGxveS4wID0gRGVidWd8eDY0CisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7MUVBRkY3QzgtODIxNS00RURBLTgzQjItRUVCNTZDRUNFODREfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LkRlYnVnfHg4Ni5EZXBsb3kuMCA9IERlYnVnfFdpbjMyCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7MUVBRkY3QzgtODIxNS00RURBLTgzQjItRUVCNTZDRUNFODREfS5SZWxlYXNlfEFSTS5EZXBsb3kuMCA9IFJlbGVhc2V8QVJNCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7MUVBRkY3QzgtODIxNS00RURBLTgzQjItRUVCNTZDRUNFODREfS5SZWxlYXNlfHg2NC5EZXBsb3kuMCA9IFJlbGVhc2V8eDY0CisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uUmVsZWFzZXx4ODYuRGVwbG95LjAgPSBSZWxlYXNlfFdpbjMyCisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKE5lc3RlZFByb2plY3RzKSA9IHByZVNvbHV0aW9uCisJCXtERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9ID0gezk1QkQwNjY5LTA0QzgtNEVFQi1CM0NDLTA1MzVCMDNGNDQ2OH0KKwkJezlCMzNDMTkwLTVEMDctNDBCRi05NTM2LTY4ODQzREM1RDdBRn0gPSB7OTVCRDA2NjktMDRDOC00RUVCLUIzQ0MtMDUzNUIwM0Y0NDY4fQorCQl7NDExMUM4QkItRDM1NC00MzQ4LUFEM0MtRUI2ODMyRTg0ODMxfSA9IHs4NzNFOUQxNi0yQTA4LTQxRkMtQjMwMS03OUM5NUIzQThGOTh9CisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9ID0gezg3M0U5RDE2LTJBMDgtNDFGQy1CMzAxLTc5Qzk1QjNBOEY5OH0KKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30gPSB7MzVGNkFCNzEtNUJEMi00RDUzLThBNTEtRDc1Q0NENENDQzNEfQorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfSA9IHs3NkVBNTQxRS1DQUIxLTREQjUtQTM5Ri1FM0RCMkE3OENERER9CisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9ID0gezk1QkQwNjY5LTA0QzgtNEVFQi1CM0NDLTA1MzVCMDNGNDQ2OH0KKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0gPSB7NzZFQTU0MUUtQ0FCMS00REI1LUEzOUYtRTNEQjJBNzhDREREfQorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfSA9IHs5NUJEMDY2OS0wNEM4LTRFRUItQjNDQy0wNTM1QjAzRjQ0Njh9CisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9ID0gezk1QkQwNjY5LTA0QzgtNEVFQi1CM0NDLTA1MzVCMDNGNDQ2OH0KKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0gPSB7NzZFQTU0MUUtQ0FCMS00REI1LUEzOUYtRTNEQjJBNzhDREREfQorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fSA9IHs3NkVBNTQxRS1DQUIxLTREQjUtQTM5Ri1FM0RCMkE3OENERER9CisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9ID0gezYxRThBNEEwLTgxMzgtNDlEQi05N0I0LTNCRUM4N0M4RTEzM30KKwkJe0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0gPSB7NjFFOEE0QTAtODEzOC00OURCLTk3QjQtM0JFQzg3QzhFMTMzfQorCQl7Mjg4MzQ0OTgtMzgzNy00NEE1LThGNjctMjQ5QUJBQjdCOTdEfSA9IHs5NUJEMDY2OS0wNEM4LTRFRUItQjNDQy0wNTM1QjAzRjQ0Njh9CisJCXtDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9ID0gezYxRThBNEEwLTgxMzgtNDlEQi05N0I0LTNCRUM4N0M4RTEzM30KKwkJe0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0gPSB7NjFFOEE0QTAtODEzOC00OURCLTk3QjQtM0JFQzg3QzhFMTMzfQorCQl7RDU1NzdFNTEtRkEzMS00ODAyLTg2NjktMURCMzI4MDU5MzVFfSA9IHszNUY2QUI3MS01QkQyLTRENTMtOEE1MS1ENzVDQ0Q0Q0NDM0R9CisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9ID0gezc2RUE1NDFFLUNBQjEtNERCNS1BMzlGLUUzREIyQTc4Q0RERH0KKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0gPSB7OTVCRDA2NjktMDRDOC00RUVCLUIzQ0MtMDUzNUIwM0Y0NDY4fQorCQl7MUVBRkY3QzgtODIxNS00RURBLTgzQjItRUVCNTZDRUNFODREfSA9IHs2MUU4QTRBMC04MTM4LTQ5REItOTdCNC0zQkVDODdDOEUxMzN9CisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vdC1jbGkudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL290LWNsaS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNjY5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdC1jbGkudmN4cHJvagpAQCAtMCwwICsxLDgwIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SW1wb3J0IFByb2plY3Q9Im9wZW50aHJlYWQuY29uZmlndXJhdGlvbi5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57OTFEM0FERUEtRjFGRS00NDMzLTk1QjYtRjhGNkE3Q0Y3QkFGfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZXhlXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBPUEVOVEhSRUFEX0NPTkZJR19GSUxFPSJvcGVudGhyZWFkLXdpbmRvd3MtY29uZmlnLmgiOworICAgICAgICBPUEVOVEhSRUFEX0ZURD0xOworICAgICAgPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgICAlKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpOworICAgICAgICAuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXM7CisgICAgICAgIC4uXC4uXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXHNyY1xjb3JlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTRExDaGVjaz50cnVlPC9TRExDaGVjaz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICAgIG1pbmNvcmUubGliOworICAgICAgPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9ImxpYm9wZW50aHJlYWQtY2xpLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQxYjMyMDY5LTYzMmUtNDU3OC04NTViLWEzNmViZmE4MGI1Nn08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9ImxpYm9wZW50aHJlYWQudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57ZGQ1MDE4YmUtNTRjNi00ZmQ0LTlmOGQtMDhkNTJmYzBjZDQwfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZHRscy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0MTExYzhiYi1kMzU0LTQzNDgtYWQzYy1lYjY4MzJlODQ4MzF9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJsaWJvcGVudGhyZWFkLXdpbmRvd3MudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57MzA3MjNjMzgtYmEzYi00NGM5LThkNjQtYzU4NjFhMjY5MzRmfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1xjbGlcbWFpbi5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vdC1jbGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3QtY2xpLnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDczNWIzCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3QtY2xpLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDE0IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1xjbGlcbWFpbi5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC1zcGkudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC1zcGkudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjExN2E0Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3QtbmNwLXNwaS52Y3hwcm9qCkBAIC0wLDAgKzEsODIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntCNEM3NDRFQy1CNjYyLTQ2QzYtQTA3Ni1GQjU4RkE4RkRGMUJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJTaGFyZWQiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxJbnREaXI+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxleGVcPC9PdXREaXI+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgICAgJShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEk9MTsKKyAgICAgICAgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQ9MDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgIDwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxTRExDaGVjaz50cnVlPC9TRExDaGVjaz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgICBtaW5jb3JlLmxpYjsKKyAgICAgIDwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcbmNwXG1haW4uYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZC52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntkZDUwMThiZS01NGM2LTRmZDQtOWY4ZC0wOGQ1MmZjMGNkNDB9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJsaWJvcGVudGhyZWFkLW5jcC1zcGkudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57YjkyZjQ0OWUtMGZkOS00NGZjLWFjZmEtNjUyMWEzMjQwY2EyfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZHRscy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0MTExYzhiYi1kMzU0LTQzNDgtYWQzYy1lYjY4MzJlODQ4MzF9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJsaWJvcGVudGhyZWFkLXdpbmRvd3MudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57MzA3MjNjMzgtYmEzYi00NGM5LThkNjQtYzU4NjFhMjY5MzRmfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC1zcGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3QtbmNwLXNwaS52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmZDI4NwotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC1zcGkudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsMjIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXA+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmg7aGg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1xuY3BcbWFpbi5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC11YXJ0LnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9vdC1uY3AtdWFydC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDA2MzEKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdC1uY3AtdWFydC52Y3hwcm9qCkBAIC0wLDAgKzEsODIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJTaGFyZWQiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxJbnREaXI+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxleGVcPC9PdXREaXI+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgICAgJShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEk9MDsKKyAgICAgICAgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQ9MTsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgIDwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxTRExDaGVjaz50cnVlPC9TRExDaGVjaz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgICBtaW5jb3JlLmxpYjsKKyAgICAgIDwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcbmNwXG1haW4uYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZC52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntkZDUwMThiZS01NGM2LTRmZDQtOWY4ZC0wOGQ1MmZjMGNkNDB9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJsaWJvcGVudGhyZWFkLW5jcC11YXJ0LnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2Q5NDg2N2QyLTZkYWUtNDdlMi05NjJhLTVlOGU2NTgxMzRkMX08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWR0bHMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDExMWM4YmItZDM1NC00MzQ4LWFkM2MtZWI2ODMyZTg0ODMxfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZC13aW5kb3dzLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezMwNzIzYzM4LWJhM2ItNDRjOS04ZDY0LWM1ODYxYTI2OTM0Zn08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC11YXJ0LnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC11YXJ0LnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2ZkMjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3QtbmNwLXVhcnQudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsMjIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXA+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmg7aGg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1xuY3BcbWFpbi5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290QXBpLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9vdEFwaS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YWNmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdEFwaS52Y3hwcm9qCkBAIC0wLDAgKzEsNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPiAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RUQwRUEyNjItQzIyMi00MkM3LTk4RDMtRTcwQzcyOTc4RUQyfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xMi4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8RHJpdmVyVGFyZ2V0UGxhdGZvcm0+VW5pdmVyc2FsPC9Ecml2ZXJUYXJnZXRQbGF0Zm9ybT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0FwcGxpY2F0aW9uRm9yRHJpdmVyczEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0FwcGxpY2F0aW9uRm9yRHJpdmVyczEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJTaGFyZWQiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxJbnREaXI+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxkbGxcPC9PdXREaXI+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQ+QzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAxNC4wXFRlYW0gVG9vbHNcU3RhdGljIEFuYWx5c2lzIFRvb2xzXFJ1bGUgU2V0c1xOYXRpdmVSZWNvbW1lbmRlZFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPFJ1bkNvZGVBbmFseXNpcz50cnVlPC9SdW5Db2RlQW5hbHlzaXM+CisgICAgPEFwaVZhbGlkYXRvcl9FbmFibGU+ZmFsc2U8L0FwaVZhbGlkYXRvcl9FbmFibGU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBPUEVOVEhSRUFEX0ZURD0xOworICAgICAgICBPVEFQSV9FWFBPUlRTOworICAgICAgPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTRExDaGVjaz50cnVlPC9TRExDaGVjaz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgICAlKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpOworICAgICAgICAuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3NcaW5jbHVkZTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90QXBpOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdwcEVuYWJsZWQ+dHJ1ZTwvV3BwRW5hYmxlZD4KKyAgICAgIDxXcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+Li5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHBsYXRmb3JtXGxvZ2dpbmctd2luZG93cy5oPC9XcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+CisgICAgICA8V3BwTW9kdWxlTmFtZT5vdEFwaTwvV3BwTW9kdWxlTmFtZT4KKyAgICAgIDxFbmFibGVQUkVmYXN0PnRydWU8L0VuYWJsZVBSRWZhc3Q+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmcgQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknPT0nQVJNJyI+U3luYzwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEFwaVxwcmVjb21wLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90QXBpXGRsbG1haW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90QXBpXG90QXBpLmNwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vb3RBcGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3RBcGkudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMmRlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdEFwaS52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwzMCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RBcGlcb3RBcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RBcGlcZGxsbWFpbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RBcGlccHJlY29tcC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290Q2xpLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9vdENsaS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOTEwNDUKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdENsaS52Y3hwcm9qCkBAIC0wLDAgKzEsNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPiAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZXhlXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBPUEVOVEhSRUFEX0ZURD0xOworICAgICAgICBPVERMTDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgIDwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U0RMQ2hlY2s+dHJ1ZTwvU0RMQ2hlY2s+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdENsaVxtYWluLmNwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZC1jbGktd2luZG93cy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PnsyODgzNDQ5OC0zODM3LTQ0YTUtOGY2Ny0yNDlhYmFiN2I5N2R9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJvdEFwaS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntlZDBlYTI2Mi1jMjIyLTQyYzctOThkMy1lNzBjNzI5NzhlZDJ9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vb3RDbGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3RDbGkudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwM2QxNmEKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdENsaS52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RDbGlcbWFpbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vb3RMd2YudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL290THdmLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhZjE3MAotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL290THdmLnZjeHByb2oKQEAgLTAsMCArMSwxMzQgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPnszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9PC9Qcm9qZWN0R3VpZD4KKyAgICA8VGVtcGxhdGVHdWlkPns4YjE4MDBiOS1kMDE3LTQwMjktOTc4NS0xM2VmNWU1YjMyOGV9PC9UZW1wbGF0ZUd1aWQ+CisgICAgPFRhcmdldEZyYW1ld29ya1ZlcnNpb24+djQuNTwvVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj4KKyAgICA8TWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb24+MTIuMDwvTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb24+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPERyaXZlclR5cGU+S01ERjwvRHJpdmVyVHlwZT4KKyAgICA8RHJpdmVyVGFyZ2V0UGxhdGZvcm0+VW5pdmVyc2FsPC9Ecml2ZXJUYXJnZXRQbGF0Zm9ybT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0tlcm5lbE1vZGVEcml2ZXIxMC4wPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkRyaXZlcjwvQ29uZmlndXJhdGlvblR5cGU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VGFyZ2V0VmVyc2lvbj5XaW5kb3dzMTA8L1RhcmdldFZlcnNpb24+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VGFyZ2V0VmVyc2lvbj5XaW5kb3dzMTA8L1RhcmdldFZlcnNpb24+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXHN5c1w8L091dERpcj4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0PkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPFJ1bkNvZGVBbmFseXNpcz50cnVlPC9SdW5Db2RlQW5hbHlzaXM+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVQcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgICAgJShQcmVQcm9jZXNzb3JEZWZpbml0aW9ucyk7CisgICAgICAgIE5ESVNfV0RNPTE7CisgICAgICAgIE5ESVM2MzA9MTsKKyAgICAgICAgT1BFTlRIUkVBRF9GVEQ9MTsKKyAgICAgICAgT1BFTlRIUkVBRF9DT05GSUdfRklMRT0ib3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9QUk9KRUNUX0NPUkVfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtY29yZS13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgIDwvUHJlUHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xpbmNsdWRlX2M5OTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmOworICAgICAgICAuLlwuLlxzcmM7CisgICAgICAgIC4uXC4uXHNyY1xjb3JlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk7NDIwMTs0MjE0PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4KKyAgICAgIDxQcmVDb21waWxlZEhlYWRlckZpbGU+cHJlY29tcC5oPC9QcmVDb21waWxlZEhlYWRlckZpbGU+CisgICAgICA8UHJlQ29tcGlsZWRIZWFkZXI+VXNlPC9QcmVDb21waWxlZEhlYWRlcj4KKyAgICAgIDxXcHBFbmFibGVkPnRydWU8L1dwcEVuYWJsZWQ+CisgICAgICA8V3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPi4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxwbGF0Zm9ybVxsb2dnaW5nLXdpbmRvd3MuaDwvV3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPgorICAgICAgPFdwcEFkZGl0aW9uYWxPcHRpb25zPi1rbSAlKFdwcEFkZGl0aW9uYWxPcHRpb25zKTwvV3BwQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8V3BwTW9kdWxlTmFtZT5vdEx3ZjwvV3BwTW9kdWxlTmFtZT4KKyAgICAgIDxXcHBTZWFyY2hTdHJpbmc+V1BQX0lOSVRfVFJBQ0lORzwvV3BwU2VhcmNoU3RyaW5nPgorICAgICAgPEVuYWJsZVBSRWZhc3Q+dHJ1ZTwvRW5hYmxlUFJFZmFzdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsuLjsuOzwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgICAlKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOworICAgICAgICBuZGlzLmxpYjsKKyAgICAgICAgd2Rtc2VjLmxpYjsKKyAgICAgICAgbmV0aW8ubGliOworICAgICAgICB1dWlkLmxpYjsKKyAgICAgICAgY25nLmxpYjsKKyAgICAgIDwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgICAgPFBvc3RCdWlsZEV2ZW50PgorICAgICAgPENvbW1hbmQgQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknPT0nQVJNJyI+aW5mMmNhdCAvZHJpdmVyOiQoVGFyZ2V0RGlyKSAvb3M6OF9BUk08L0NvbW1hbmQ+CisgICAgPC9Qb3N0QnVpbGRFdmVudD4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGFkZHJlc3MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxhbGFybS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGNvbW1hbmQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxkYXRhcGF0aC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGRyaXZlci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGV2ZW50cHJvY2Vzc2luZy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGlvY29udHJvbC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHNldHRpbmdzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcdGhyZWFkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcdHVubmVsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZccHJlY29tcC5jIj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uOy47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVQcm9jZXNzb3JEZWZpbml0aW9ucz4lKFByZVByb2Nlc3NvckRlZmluaXRpb25zKTtORElTX1dETT0xPC9QcmVQcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxQcmVDb21waWxlZEhlYWRlckZpbGU+cHJlY29tcC5oPC9QcmVDb21waWxlZEhlYWRlckZpbGU+CisgICAgICA8UHJlQ29tcGlsZWRIZWFkZXI+Q3JlYXRlPC9QcmVDb21waWxlZEhlYWRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxmaWx0ZXIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxkZXZpY2UuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxyYWRpby5jIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGNvbW1hbmQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxkZXZpY2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxkcml2ZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxpb2NvbnRyb2wuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxuc2loZWxwZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxyYWRpby5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHRocmVhZC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHR1bm5lbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHByZWNvbXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxmaWx0ZXIuaCIgLz4KKyAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxmaWx0ZXIucmMiIC8+CisgICAgPEluZiBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2Zcb3RMd2YuaW5mIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsZXNUb1BhY2thZ2UgSW5jbHVkZT0iJChUYXJnZXRQYXRoKSIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZF9rLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezliMzNjMTkwLTVkMDctNDBiZi05NTM2LTY4ODQzZGM1ZDdhZn08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWR0bHNfay52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns2OWJlOGU4Yy1jZjFlLTQ2ZDYtOTMyYi1kYjQzNWY0NzA1OWJ9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJzcGluZWxfay52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PnthNTU3NjZiNS01OGI2LTQ1MTktODM1ZS01YTRiN2MxNjRiNWF9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vdEx3Zi52Y3hwcm9qLmZpbHRlcnMgYi9ldGMvdmlzdWFsLXN0dWRpby9vdEx3Zi52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1NDBlMwotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL290THdmLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDEwNyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkRyaXZlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OEU0MTIxNEItNjc4NS00Q0ZFLUI5OTItMDM3RDY4OTQ5QTE0fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmluZjtpbnY7aW54O21vZjttYzs8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxJbmYgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXG90THdmLmluZiI+CisgICAgICA8RmlsdGVyPkRyaXZlciBGaWxlczwvRmlsdGVyPgorICAgIDwvSW5mPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxwcmVjb21wLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxmaWx0ZXIuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGRyaXZlci5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcZGV2aWNlLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxuc2loZWxwZXIuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGlvY29udHJvbC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZccmFkaW8uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHRocmVhZC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcdHVubmVsLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxjb21tYW5kLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcZmlsdGVyLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxkZXZpY2UuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHByZWNvbXAuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGFsYXJtLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxyYWRpby5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcZHJpdmVyLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxpb2NvbnRyb2wuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGV2ZW50cHJvY2Vzc2luZy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcZGF0YXBhdGguYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGFkZHJlc3MuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHR1bm5lbC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcdGhyZWFkLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxzZXR0aW5ncy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcY29tbWFuZC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGZpbHRlci5yYyI+CisgICAgICA8RmlsdGVyPlJlc291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290Tm9kZUFwaS52Y3hwcm9qIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3ROb2RlQXBpLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkNjg3NgotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL290Tm9kZUFwaS52Y3hwcm9qCkBAIC0wLDAgKzEsNzggQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPiAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QjdDNkYzNDQtNzI4Ny00OTMwLUFGMzgtMjIzNjIyQkQ4Q0JCfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xMi4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8RHJpdmVyVGFyZ2V0UGxhdGZvcm0+VW5pdmVyc2FsPC9Ecml2ZXJUYXJnZXRQbGF0Zm9ybT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0FwcGxpY2F0aW9uRm9yRHJpdmVyczEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0FwcGxpY2F0aW9uRm9yRHJpdmVyczEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJTaGFyZWQiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxJbnREaXI+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxkbGxcPC9PdXREaXI+CisgICAgPFJ1bkNvZGVBbmFseXNpcz50cnVlPC9SdW5Db2RlQW5hbHlzaXM+CisgICAgPEFwaVZhbGlkYXRvcl9FbmFibGU+ZmFsc2U8L0FwaVZhbGlkYXRvcl9FbmFibGU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgICAgJShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9UQVBJX0VYUE9SVFM7CisgICAgICA8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICAgICUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk7CisgICAgICAgIC4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xpbmNsdWRlOworICAgICAgICAuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RBcGk7CisgICAgICAgIC4uXC4uXGluY2x1ZGU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFNETENoZWNrPnRydWU8L1NETENoZWNrPgorICAgICAgPFdwcEVuYWJsZWQ+dHJ1ZTwvV3BwRW5hYmxlZD4KKyAgICAgIDxXcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+Li5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHBsYXRmb3JtXGxvZ2dpbmctd2luZG93cy5oPC9XcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+CisgICAgICA8V3BwTW9kdWxlTmFtZT5vdE5vZGVBcGk8L1dwcE1vZHVsZU5hbWU+CisgICAgICA8RW5hYmxlUFJFZmFzdD50cnVlPC9FbmFibGVQUkVmYXN0PgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nIENvbmRpdGlvbj0iJyQoUGxhdGZvcm0pJz09J0FSTSciPlN5bmM8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICAgIG50ZGxsLmxpYjsKKyAgICAgIDwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdE5vZGVBcGlccHJlY29tcC5oIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdE5vZGVBcGlcZGxsbWFpbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3ROb2RlQXBpXG90Tm9kZUFwaS5jcHAiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im90QXBpLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2VkMGVhMjYyLWMyMjItNDJjNy05OGQzLWU3MGM3Mjk3OGVkMn08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vdE5vZGVBcGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3ROb2RlQXBpLnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTUyN2FlCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3ROb2RlQXBpLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDMwIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5oO2hoO2hwcDtoeHg7aG07aW5sO2luYzt4c2Q8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJSZXNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NjdEQTZBQjYtRjgwMC00YzA4LThCN0EtODNCQjEyMUFBRDAxfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPnJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4O3RpZmY7dGlmO3BuZzt3YXY7bWZjcmliYm9uLW1zPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdE5vZGVBcGlcb3ROb2RlQXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90Tm9kZUFwaVxkbGxtYWluLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdE5vZGVBcGlccHJlY29tcC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290VGVzdFJ1bm5lci5jc3Byb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9vdFRlc3RSdW5uZXIuY3Nwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODQwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdFRlc3RSdW5uZXIuY3Nwcm9qCkBAIC0wLDAgKzEsMTEyIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSIxNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SW1wb3J0IFByb2plY3Q9IiQoTVNCdWlsZEV4dGVuc2lvbnNQYXRoKVwkKE1TQnVpbGRUb29sc1ZlcnNpb24pXE1pY3Jvc29mdC5Db21tb24ucHJvcHMiIENvbmRpdGlvbj0iRXhpc3RzKCckKE1TQnVpbGRFeHRlbnNpb25zUGF0aClcJChNU0J1aWxkVG9vbHNWZXJzaW9uKVxNaWNyb3NvZnQuQ29tbW9uLnByb3BzJykiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxDb25maWd1cmF0aW9uIENvbmRpdGlvbj0iICckKENvbmZpZ3VyYXRpb24pJyA9PSAnJyAiPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgIDxQbGF0Zm9ybSBDb25kaXRpb249IiAnJChQbGF0Zm9ybSknID09ICcnICI+QW55Q1BVPC9QbGF0Zm9ybT4KKyAgICA8UHJvamVjdEd1aWQ+e0Q1NTc3RTUxLUZBMzEtNDgwMi04NjY5LTFEQjMyODA1OTM1RX08L1Byb2plY3RHdWlkPgorICAgIDxPdXRwdXRUeXBlPkV4ZTwvT3V0cHV0VHlwZT4KKyAgICA8QXBwRGVzaWduZXJGb2xkZXI+UHJvcGVydGllczwvQXBwRGVzaWduZXJGb2xkZXI+CisgICAgPFJvb3ROYW1lc3BhY2U+b3RUZXN0UnVubmVyPC9Sb290TmFtZXNwYWNlPgorICAgIDxBc3NlbWJseU5hbWU+b3RUZXN0UnVubmVyPC9Bc3NlbWJseU5hbWU+CisgICAgPFRhcmdldEZyYW1ld29ya1ZlcnNpb24+djQuNS4yPC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9uPgorICAgIDxGaWxlQWxpZ25tZW50PjUxMjwvRmlsZUFsaWdubWVudD4KKyAgICA8QXV0b0dlbmVyYXRlQmluZGluZ1JlZGlyZWN0cz50cnVlPC9BdXRvR2VuZXJhdGVCaW5kaW5nUmVkaXJlY3RzPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iICckKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJyA9PSAnRGVidWd8QW55Q1BVJyAiPgorICAgIDxQbGF0Zm9ybVRhcmdldD5BbnlDUFU8L1BsYXRmb3JtVGFyZ2V0PgorICAgIDxEZWJ1Z1N5bWJvbHM+dHJ1ZTwvRGVidWdTeW1ib2xzPgorICAgIDxEZWJ1Z1R5cGU+ZnVsbDwvRGVidWdUeXBlPgorICAgIDxPcHRpbWl6ZT5mYWxzZTwvT3B0aW1pemU+CisgICAgPEludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KKyAgICA8QmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvQmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+CisgICAgPE91dHB1dFBhdGg+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZXhlXDwvT3V0cHV0UGF0aD4KKyAgICA8RGVmaW5lQ29uc3RhbnRzPkRFQlVHO1RSQUNFPC9EZWZpbmVDb25zdGFudHM+CisgICAgPEVycm9yUmVwb3J0PnByb21wdDwvRXJyb3JSZXBvcnQ+CisgICAgPFdhcm5pbmdMZXZlbD40PC9XYXJuaW5nTGV2ZWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIgJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknID09ICdSZWxlYXNlfEFueUNQVScgIj4KKyAgICA8UGxhdGZvcm1UYXJnZXQ+QW55Q1BVPC9QbGF0Zm9ybVRhcmdldD4KKyAgICA8RGVidWdUeXBlPnBkYm9ubHk8L0RlYnVnVHlwZT4KKyAgICA8T3B0aW1pemU+dHJ1ZTwvT3B0aW1pemU+CisgICAgPEludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KKyAgICA8QmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvQmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+CisgICAgPE91dHB1dFBhdGg+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZXhlXDwvT3V0cHV0UGF0aD4KKyAgICA8RGVmaW5lQ29uc3RhbnRzPlRSQUNFPC9EZWZpbmVDb25zdGFudHM+CisgICAgPEVycm9yUmVwb3J0PnByb21wdDwvRXJyb3JSZXBvcnQ+CisgICAgPFdhcm5pbmdMZXZlbD40PC9XYXJuaW5nTGV2ZWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKScgPT0gJ0RlYnVnfHg2NCciPgorICAgIDxEZWJ1Z1N5bWJvbHM+dHJ1ZTwvRGVidWdTeW1ib2xzPgorICAgIDxEZWZpbmVDb25zdGFudHM+REVCVUc7VFJBQ0U8L0RlZmluZUNvbnN0YW50cz4KKyAgICA8RGVidWdUeXBlPmZ1bGw8L0RlYnVnVHlwZT4KKyAgICA8SW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxvdFRlc3RSdW5uZXJcPC9JbnRlcm1lZGlhdGVPdXRwdXRQYXRoPgorICAgIDxCYXNlSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxvdFRlc3RSdW5uZXJcPC9CYXNlSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KKyAgICA8T3V0cHV0UGF0aD4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxleGVcPC9PdXRwdXRQYXRoPgorICAgIDxQbGF0Zm9ybVRhcmdldD54NjQ8L1BsYXRmb3JtVGFyZ2V0PgorICAgIDxFcnJvclJlcG9ydD5wcm9tcHQ8L0Vycm9yUmVwb3J0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0Pk1pbmltdW1SZWNvbW1lbmRlZFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPFByZWZlcjMyQml0PnRydWU8L1ByZWZlcjMyQml0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknID09ICdSZWxlYXNlfHg2NCciPgorICAgIDxEZWZpbmVDb25zdGFudHM+VFJBQ0U8L0RlZmluZUNvbnN0YW50cz4KKyAgICA8T3B0aW1pemU+dHJ1ZTwvT3B0aW1pemU+CisgICAgPEludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KKyAgICA8QmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvQmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+CisgICAgPE91dHB1dFBhdGg+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZXhlXDwvT3V0cHV0UGF0aD4KKyAgICA8RGVidWdUeXBlPnBkYm9ubHk8L0RlYnVnVHlwZT4KKyAgICA8UGxhdGZvcm1UYXJnZXQ+eDY0PC9QbGF0Zm9ybVRhcmdldD4KKyAgICA8RXJyb3JSZXBvcnQ+cHJvbXB0PC9FcnJvclJlcG9ydD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldD5NaW5pbXVtUmVjb21tZW5kZWRSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxQcmVmZXIzMkJpdD50cnVlPC9QcmVmZXIzMkJpdD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJyA9PSAnRGVidWd8V2luMzInIj4KKyAgICA8RGVidWdTeW1ib2xzPnRydWU8L0RlYnVnU3ltYm9scz4KKyAgICA8SW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxvdFRlc3RSdW5uZXJcPC9JbnRlcm1lZGlhdGVPdXRwdXRQYXRoPgorICAgIDxCYXNlSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxvdFRlc3RSdW5uZXJcPC9CYXNlSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KKyAgICA8T3V0cHV0UGF0aD4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxleGVcPC9PdXRwdXRQYXRoPgorICAgIDxEZWZpbmVDb25zdGFudHM+REVCVUc7VFJBQ0U8L0RlZmluZUNvbnN0YW50cz4KKyAgICA8RGVidWdUeXBlPmZ1bGw8L0RlYnVnVHlwZT4KKyAgICA8UGxhdGZvcm1UYXJnZXQ+eDg2PC9QbGF0Zm9ybVRhcmdldD4KKyAgICA8RXJyb3JSZXBvcnQ+cHJvbXB0PC9FcnJvclJlcG9ydD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldD5NaW5pbXVtUmVjb21tZW5kZWRSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxQcmVmZXIzMkJpdD50cnVlPC9QcmVmZXIzMkJpdD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJyA9PSAnUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbnRlcm1lZGlhdGVPdXRwdXRQYXRoPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXG90VGVzdFJ1bm5lclw8L0ludGVybWVkaWF0ZU91dHB1dFBhdGg+CisgICAgPEJhc2VJbnRlcm1lZGlhdGVPdXRwdXRQYXRoPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXG90VGVzdFJ1bm5lclw8L0Jhc2VJbnRlcm1lZGlhdGVPdXRwdXRQYXRoPgorICAgIDxPdXRwdXRQYXRoPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGV4ZVw8L091dHB1dFBhdGg+CisgICAgPERlZmluZUNvbnN0YW50cz5UUkFDRTwvRGVmaW5lQ29uc3RhbnRzPgorICAgIDxPcHRpbWl6ZT50cnVlPC9PcHRpbWl6ZT4KKyAgICA8RGVidWdUeXBlPnBkYm9ubHk8L0RlYnVnVHlwZT4KKyAgICA8UGxhdGZvcm1UYXJnZXQ+eDg2PC9QbGF0Zm9ybVRhcmdldD4KKyAgICA8RXJyb3JSZXBvcnQ+cHJvbXB0PC9FcnJvclJlcG9ydD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldD5NaW5pbXVtUmVjb21tZW5kZWRSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxQcmVmZXIzMkJpdD50cnVlPC9QcmVmZXIzMkJpdD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtIiAvPgorICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLkNvcmUiIC8+CisgICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uWG1sLkxpbnEiIC8+CisgICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uRGF0YS5EYXRhU2V0RXh0ZW5zaW9ucyIgLz4KKyAgICA8UmVmZXJlbmNlIEluY2x1ZGU9Ik1pY3Jvc29mdC5DU2hhcnAiIC8+CisgICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uRGF0YSIgLz4KKyAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbS5OZXQuSHR0cCIgLz4KKyAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbS5YbWwiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXG90VGVzdFJ1bm5lclxQcm9ncmFtLmNzIiAvPgorICAgIDxDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXG90VGVzdFJ1bm5lclxBc3NlbWJseUluZm8uY3MiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXG90VGVzdFJ1bm5lclxBcHAuY29uZmlnIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKE1TQnVpbGRUb29sc1BhdGgpXE1pY3Jvc29mdC5DU2hhcnAudGFyZ2V0cyIgLz4KKyAgPCEtLSBUbyBtb2RpZnkgeW91ciBidWlsZCBwcm9jZXNzLCBhZGQgeW91ciB0YXNrIGluc2lkZSBvbmUgb2YgdGhlIHRhcmdldHMgYmVsb3cgYW5kIHVuY29tbWVudCBpdC4gCisgICAgICAgT3RoZXIgc2ltaWxhciBleHRlbnNpb24gcG9pbnRzIGV4aXN0LCBzZWUgTWljcm9zb2Z0LkNvbW1vbi50YXJnZXRzLgorICA8VGFyZ2V0IE5hbWU9IkJlZm9yZUJ1aWxkIj4KKyAgPC9UYXJnZXQ+CisgIDxUYXJnZXQgTmFtZT0iQWZ0ZXJCdWlsZCI+CisgIDwvVGFyZ2V0PgorICAtLT4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vdHRtcC52Y3hwcm9qIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3R0bXAudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE1ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3R0bXAudmN4cHJvagpAQCAtMCwwICsxLDEwMiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEltcG9ydCBQcm9qZWN0PSJvcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH08L1Byb2plY3RHdWlkPgorICAgIDxUZW1wbGF0ZUd1aWQ+ezQ5N2UzMWNiLTA1NmItNGYzMS1hYmI4LTQ0N2ZkNTVlZTVhNX08L1RlbXBsYXRlR3VpZD4KKyAgICA8VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj52NC41PC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9uPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xMi4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8Um9vdE5hbWVzcGFjZT5vdDwvUm9vdE5hbWVzcGFjZT4KKyAgICA8VGFyZ2V0VmVyc2lvbj5XaW5kb3dzMTA8L1RhcmdldFZlcnNpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzS2VybmVsTW9kZURyaXZlcjEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHJpdmVyPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8RHJpdmVyVHlwZT5LTURGPC9Ecml2ZXJUeXBlPgorICAgIDxEcml2ZXJUYXJnZXRQbGF0Zm9ybT5Vbml2ZXJzYWw8L0RyaXZlclRhcmdldFBsYXRmb3JtPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcc3lzXDwvT3V0RGlyPgorICAgIDxJbnREaXI+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQ+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8UnVuQ29kZUFuYWx5c2lzPnRydWU8L1J1bkNvZGVBbmFseXNpcz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZVByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZVByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTkRJU19NSU5JUE9SVF9EUklWRVI9MTsKKyAgICAgICAgTkRJU19XRE09MTsKKyAgICAgICAgTkRJUzY1MF9NSU5JUE9SVD0xOworICAgICAgICBPVFRNUF9MRUdBQ1k9MTsKKyAgICAgIDwvUHJlUHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcDsKKyAgICAgIDwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+CisgICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPgorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPiUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpOzQyMDA7NDIwMTs0MjE0PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4KKyAgICAgIDxXcHBFbmFibGVkPnRydWU8L1dwcEVuYWJsZWQ+CisgICAgICA8V3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPi4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxwbGF0Zm9ybVxsb2dnaW5nLXdpbmRvd3MuaDwvV3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPgorICAgICAgPFdwcEFkZGl0aW9uYWxPcHRpb25zPi1rbSAlKFdwcEFkZGl0aW9uYWxPcHRpb25zKTwvV3BwQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8V3BwTW9kdWxlTmFtZT5vdHRtcDwvV3BwTW9kdWxlTmFtZT4KKyAgICAgIDxXcHBTZWFyY2hTdHJpbmc+V1BQX0lOSVRfVFJBQ0lORzwvV3BwU2VhcmNoU3RyaW5nPgorICAgICAgPEVuYWJsZVBSRWZhc3Q+dHJ1ZTwvRW5hYmxlUFJFZmFzdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZVByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZVByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTkRJU19NSU5JUE9SVF9EUklWRVI9MTsKKyAgICAgICAgTkRJU19XRE09MTsKKyAgICAgICAgTkRJUzY1MF9NSU5JUE9SVD0xOworICAgICAgICBPVFRNUF9MRUdBQ1k9MTsKKyAgICAgIDwvUHJlUHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpOy4uOy47PC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvUmVzb3VyY2VDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICAgICUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7CisgICAgICAgIG5kaXMubGliOworICAgICAgPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgICA8UG9zdEJ1aWxkRXZlbnQ+CisgICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKFBsYXRmb3JtKSc9PSdBUk0nIj5pbmYyY2F0IC9kcml2ZXI6JChUYXJnZXREaXIpIC9vczo4X0FSTTwvQ29tbWFuZD4KKyAgICA8L1Bvc3RCdWlsZEV2ZW50PgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcYWRhcHRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcZGV2aWNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxkcml2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90dG1wXGhkbGMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90dG1wXG9pZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcc2VyaWFsLmNwcCIgLz4KKyAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxvdHRtcC5yYyIgLz4KKyAgICA8SW5mIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxvdHRtcC5pbmYiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcYWRhcHRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcZGV2aWNlLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxkcml2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90dG1wXGhhcmR3YXJlLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxoZGxjLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxvaWQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90dG1wXHBjaC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcc2VyaWFsLmhwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPEZpbGVzVG9QYWNrYWdlIEluY2x1ZGU9IiQoVGFyZ2V0UGF0aCkiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vb3R0bXAudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3R0bXAudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YmExZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdHRtcC52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57QkVEMTA3MDQtQkZEQS00MjdDLUJCMDEtQjA4RjIwQUIxNzE4fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntBNkM2MUIyOC05NjFDLTRCNjMtODkyQi1BN0U1RUIyQTRCM0V9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezBDQkZDNjNDLTExQ0ItNEU1Ri05NUYxLTE4N0JFM0Y2REE0NH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkRyaXZlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NkMyQkFGRDQtRTI0NC00RkYyLUEwMDItRkJDQ0YxNEFGQTlEfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmluZjtpbnY7aW54O21vZjttYzs8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL3NwaW5lbF9rLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9zcGluZWxfay52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDk5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9zcGluZWxfay52Y3hwcm9qCkBAIC0wLDAgKzEsNzIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPiAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QTU1NzY2QjUtNThCNi00NTE5LTgzNUUtNUE0QjdDMTY0QjVBfTwvUHJvamVjdEd1aWQ+CisgICAgPFRlbXBsYXRlR3VpZD57OGMwZTNkOGItZGY0My00NTViLTgxNWEtNGEwZTcyOTczYmM2fTwvVGVtcGxhdGVHdWlkPgorICAgIDxUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPnY0LjU8L1RhcmdldEZyYW1ld29ya1ZlcnNpb24+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjEyLjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgIDxQbGF0Zm9ybSBDb25kaXRpb249IickKFBsYXRmb3JtKScgPT0gJyciPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8Um9vdE5hbWVzcGFjZT5vdDwvUm9vdE5hbWVzcGFjZT4KKyAgICA8RHJpdmVyVHlwZT5LTURGPC9Ecml2ZXJUeXBlPgorICAgIDxEcml2ZXJUYXJnZXRQbGF0Zm9ybT5Vbml2ZXJzYWw8L0RyaXZlclRhcmdldFBsYXRmb3JtPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzS2VybmVsTW9kZURyaXZlcjEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VGFyZ2V0VmVyc2lvbj5XaW5kb3dzMTA8L1RhcmdldFZlcnNpb24+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VGFyZ2V0VmVyc2lvbj5XaW5kb3dzMTA8L1RhcmdldFZlcnNpb24+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGxpYlw8L091dERpcj4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBIQVZFX1NUUk5MRU49MTsKKyAgICAgICAgT1BFTlRIUkVBRF9GVEQ9MTsKKyAgICAgICAgSEFWRV9TVERCT09MX0g9MTsKKyAgICAgICAgSEFWRV9TVERJTlRfSD0xOworICAgICAgICBTUElORUxfUExBVEZPUk1fRE9FU05UX0lNUExFTUVOVF9FUlJOT19WQVI9MTsKKyAgICAgICAgT1BFTlRIUkVBRF9DT05GSUdfRklMRT0ib3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9QUk9KRUNUX0NPUkVfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtY29yZS13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjXGNvcmU7CisgICAgICAgIC4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xpbmNsdWRlX2M5OTsKKyAgICAgIDwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MTAwOzQ3MDY7NDc0ODslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+CisgICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPgorICAgICAgPFdwcEVuYWJsZWQ+dHJ1ZTwvV3BwRW5hYmxlZD4KKyAgICAgIDxXcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+Li5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHBsYXRmb3JtXGxvZ2dpbmctd2luZG93cy5oPC9XcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+CisgICAgICA8V3BwQWRkaXRpb25hbE9wdGlvbnM+LWttICUoV3BwQWRkaXRpb25hbE9wdGlvbnMpPC9XcHBBZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxXcHBNb2R1bGVOYW1lPm90Q29yZTwvV3BwTW9kdWxlTmFtZT4KKyAgICAgIDxXcHBTZWFyY2hTdHJpbmc+V1BQX0lOSVRfVFJBQ0lORzwvV3BwU2VhcmNoU3RyaW5nPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXHNwaW5lbC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3Bcc3BpbmVsLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vc3BpbmVsX2sudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vc3BpbmVsX2sudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzEyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9zcGluZWxfay52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyNyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57QzAzNEY3RjQtM0NCRC00QjlBLUEwMzMtMEQ3NkExOTVCNTgxfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns3QTk1ODg1RS1BRDIzLTQzOUEtQjI4My05QkRFMEUzOUQ4NEV9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezFFMURGOTNFLTk3NDYtNDY4OC1BMUYwLTdCNTkzNzhDRjI4Rn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXHNwaW5lbC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxzcGluZWwuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICA8L0l0ZW1Hcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZS1jYzI1MzggYi9leGFtcGxlcy9NYWtlZmlsZS1jYzI1MzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1NGQxMAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlLWNjMjUzOApAQCAtMCwwICsxLDI2MiBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisuTk9UUEFSQUxMRUw6CisKK0FSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFyCitDQ0FTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1hcworQ1BQICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktY3BwCitDQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1nY2MKK0NYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWcrKworTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktbGQKK1NUUklQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLXN0cmlwCitOTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1ubQorUkFOTElCICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktcmFubGliCitPQkpDT1BZICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1vYmpjb3B5CisKK0J1aWxkSm9icyAgICAgICAgICAgICAgICAgICAgICA/PSAxMAorCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgID0gXAorICAgIC0tZW5hYmxlLWNsaS1hcHA9YWxsICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1uY3AtYXBwPWFsbCAgICAgICAgICBcCisgICAgLS13aXRoLW5jcC1idXM9dWFydCAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWRpYWcgICAgICAgICAgICAgICAgIFwKKyAgICAtLXdpdGgtZXhhbXBsZXM9Y2MyNTM4ICAgICAgICBcCisgICAgLS13aXRoLXBsYXRmb3JtLWluZm89Q0MyNTM4ICAgXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGRpciAkKGFic3BhdGggJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpL2NvbW1vbi1zd2l0Y2hlcy5taworCitUb3BTb3VyY2VEaXIgICAgICAgICAgICAgICAgICAgIDo9ICQoZGlyICQoc2hlbGwgcmVhZGxpbmsgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS4uCitBYnNUb3BTb3VyY2VEaXIgICAgICAgICAgICAgICAgIDo9ICQoZGlyICQocmVhbHBhdGggJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS4uCisKK0NPTkZJR19GSUxFICAgICAgPSBPUEVOVEhSRUFEX1BST0pFQ1RfQ09SRV9DT05GSUdfRklMRT0nXCJvcGVudGhyZWFkLWNvcmUtY2MyNTM4LWNvbmZpZy5oXCInCitDT05GSUdfRklMRV9QQVRIID0gJChBYnNUb3BTb3VyY2VEaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvCisKK0NPTU1PTkNGTEFHUyAgICAgICAgICAgICAgICAgICA6PSBcCisgICAgLWZkYXRhLXNlY3Rpb25zICAgICAgICAgICAgICAgXAorICAgIC1mZnVuY3Rpb24tc2VjdGlvbnMgICAgICAgICAgIFwKKyAgICAtT3MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EJChDT05GSUdfRklMRSkgICAgICAgICAgICAgIFwKKyAgICAtSSQoQ09ORklHX0ZJTEVfUEFUSCkgICAgICAgICBcCisgICAgJChOVUxMKQorCitDUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DUFBGTEFHUykgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DRkxBR1MpICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DWFhGTEFHUykgICAgICAgICAgICBcCisgICAgLWZuby1leGNlcHRpb25zICAgICAgICAgICAgICAgXAorICAgIC1mbm8tcnR0aSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0xERkxBR1MpICAgICAgICAgICAgIFwKKyAgICAtbm9zdGFydGZpbGVzICAgICAgICAgICAgICAgICBcCisgICAgLXNwZWNzPW5hbm8uc3BlY3MgICAgICAgICAgICAgXAorICAgIC1zcGVjcz1ub3N5cy5zcGVjcyAgICAgICAgICAgIFwKKyAgICAtV2wsLS1nYy1zZWN0aW9ucyAgICAgICAgICAgICBcCisgICAgLVdsLC1NYXA9bWFwLm1hcCAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRUNITyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBAZWNobworTUFLRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBtYWtlCitNS0RJUl9QICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1rZGlyIC1wCitMTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IGxuIC1zCitSTV9GICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IHJtIC1mCisKK0lOU1RBTEwgICAgICAgICAgICAgICAgICAgICAgICAgOj0gL3Vzci9iaW4vaW5zdGFsbAorSU5TVEFMTEZMQUdTICAgICAgICAgICAgICAgICAgICA6PSAtcAorCitCdWlsZFBhdGggICAgICAgICAgICAgICAgICAgICAgID0gYnVpbGQKK1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgICAgPSAkKEJ1aWxkUGF0aCkKK0Fic1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BCdWlsZERpcikKKworUmVzdWx0UGF0aCAgICAgICAgICAgICAgICAgICAgICA9IG91dHB1dAorVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICAgICA9ICQoUmVzdWx0UGF0aCkKK0Fic1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BSZXN1bHREaXIpCisKK1RhcmdldFR1cGxlICAgICAgICAgICAgICAgICAgICAgPSBjYzI1MzgKKworQVJDSFMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMworCitUb3BUYXJnZXRMaWJEaXIgICAgICAgICAgICAgICAgID0gJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYgorCitpZm5kZWYgQnVpbGRKb2JzCitCdWlsZEpvYnMgOj0gJChzaGVsbCBnZXRjb25mIF9OUFJPQ0VTU09SU19PTkxOKQorZW5kaWYKK0pPQlNGTEFHIDo9IC1qJChCdWlsZEpvYnMpCisKKyMKKyMgY29uZmlndXJlLWFyY2ggPGFyY2g+CisjCisjIENvbmZpZ3VyZSBPcGVuVGhyZWFkIGZvciB0aGUgc3BlY2lmaWVkIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBjb25maWd1cmUuCisjCitkZWZpbmUgY29uZmlndXJlLWFyY2gKKyQoRUNITykgIiAgQ09ORklHICAgJChUYXJnZXRUdXBsZSkuLi4iCisoY2QgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpICYmICQoQWJzVG9wU291cmNlRGlyKS9jb25maWd1cmUgXAorSU5TVEFMTD0iJChJTlNUQUxMKSAkKElOU1RBTExGTEFHUykiIFwKK0NQUD0iJChDUFApIiBDQz0iJChDQykiIENYWD0iJChDWFgpIiBPQkpDPSIkKE9CSkMpIiBPQkpDWFg9IiQoT0JKQ1hYKSIgQVI9IiQoQVIpIiBSQU5MSUI9IiQoUkFOTElCKSIgTk09IiQoTk0pIiBTVFJJUD0iJChTVFJJUCkiIENQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIENYWEZMQUdTPSIkKENYWEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgXAorLS1ob3N0PWFybS1ub25lLWVhYmkgXAorLS1wcmVmaXg9LyBcCistLWV4ZWMtcHJlZml4PS8kKFRhcmdldFR1cGxlKSBcCiskKGNvbmZpZ3VyZV9PUFRJT05TKSkKK2VuZGVmICMgY29uZmlndXJlLWFyY2gKKworIworIyBidWlsZC1hcmNoIDxhcmNoPgorIworIyBCdWlsZCB0aGUgT3BlblRocmVhZCBpbnRlcm1lZGlhdGUgYnVpbGQgcHJvZHVjdHMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkLgorIworZGVmaW5lIGJ1aWxkLWFyY2gKKyQoRUNITykgIiAgQlVJTEQgICAgJChUYXJnZXRUdXBsZSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCithbGwKK2VuZGVmICMgYnVpbGQtYXJjaAorCisjCisjIHN0YWdlLWFyY2ggPGFyY2g+CisjCisjIFN0YWdlIChpbnN0YWxsKSB0aGUgT3BlblRocmVhZCBmaW5hbCBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gc3RhZ2UuCisjCitkZWZpbmUgc3RhZ2UtYXJjaAorJChFQ0hPKSAiICBTVEFHRSAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK0RFU1RESVI9JChBYnNUb3BSZXN1bHREaXIpIFwKK2luc3RhbGwKK2VuZGVmICMgc3RhZ2UtYXJjaAorCisjCisjIEFSQ0hfdGVtcGxhdGUgPGFyY2g+CisjCisjIERlZmluZSBtYWNyb3MsIHRhcmdldHMgYW5kIHJ1bGVzIHRvIGNvbmZpZ3VyZSwgYnVpbGQsIGFuZCBzdGFnZSB0aGUKKyMgT3BlblRocmVhZCBmb3IgYSBzaW5nbGUgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZSBmb3IuCisjCitkZWZpbmUgQVJDSF90ZW1wbGF0ZQorQ09ORklHVVJFX1RBUkdFVFMgKz0gY29uZmlndXJlLSQoMSkKK0JVSUxEX1RBUkdFVFMgICAgICs9IGRvLWJ1aWxkLSQoMSkKK1NUQUdFX1RBUkdFVFMgICAgICs9IHN0YWdlLSQoMSkKK0JVSUxEX0RJUlMgICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorRElSRUNUT1JJRVMgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ1BQRkxBR1M9JCgkKDEpX3RhcmdldF9DUFBGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ0ZMQUdTPSQoJCgxKV90YXJnZXRfQ0ZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DWFhGTEFHUz0kKCQoMSlfdGFyZ2V0X0NYWEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9MREZMQUdTPSQoJCgxKV90YXJnZXRfTERGTEFHUykKKworY29uZmlndXJlLSQoMSk6ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzCisKKyQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzOiB8ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorCSQkKGNhbGwgY29uZmlndXJlLWFyY2gsJCgxKSkKKworZG8tYnVpbGQtJCgxKTogY29uZmlndXJlLSQoMSkKKworZG8tYnVpbGQtJCgxKToKKwkrJCQoY2FsbCBidWlsZC1hcmNoLCQoMSkpCisKK3N0YWdlLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworc3RhZ2UtJCgxKTogfCAkKFRvcFJlc3VsdERpcikKKwkkJChjYWxsIHN0YWdlLWFyY2gsJCgxKSkKKworJCgxKTogc3RhZ2UtJCgxKQorZW5kZWYgIyBBUkNIX3RlbXBsYXRlCisKKy5ERUZBVUxUX0dPQUwgOj0gYWxsCisKK2FsbDogc3RhZ2UKKworIworIyBjb3J0ZXgtbTMKKyMKKworY29ydGV4LW0zX3RhcmdldF9BQkkgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMworY29ydGV4LW0zX3RhcmdldF9DUFBGTEFHUyAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMyAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKK2NvcnRleC1tM190YXJnZXRfQ0ZMQUdTICAgICAgICAgICAgICAgPSAtbWNwdT1jb3J0ZXgtbTMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTNfdGFyZ2V0X0NYWEZMQUdTICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW0zIC1tZmxvYXQtYWJpPXNvZnQgLW10aHVtYgorY29ydGV4LW0zX3RhcmdldF9MREZMQUdTICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMyAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKKworIyBJbnN0YW50aWF0ZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYnVpbGQgdGVtcGxhdGUgZm9yIGVhY2ggdGFyZ2V0CisjIGFyY2hpdGVjdHVyZS4KKworJChmb3JlYWNoIGFyY2gsJChBUkNIUyksJChldmFsICQoY2FsbCBBUkNIX3RlbXBsYXRlLCQoYXJjaCkpKSkKKworIworIyBDb21tb24gLyBGaW5hbGl6YXRpb24KKyMKKworY29uZmlndXJlOiAkKENPTkZJR1VSRV9UQVJHRVRTKQorCitidWlsZDogJChCVUlMRF9UQVJHRVRTKQorCitzdGFnZTogJChTVEFHRV9UQVJHRVRTKQorCitESVJFQ1RPUklFUyAgICAgPSAkKFRvcFJlc3VsdERpcikgJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYiAkKEJVSUxEX0RJUlMpCisKK0NMRUFOX0RJUlMgICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKEJVSUxEX0RJUlMpCisKK2FsbDogc3RhZ2UKKworJChESVJFQ1RPUklFUyk6CisJJChFQ0hPKSAiICBNS0RJUiAgICAkQCIKKwlAJChNS0RJUl9QKSAiJEAiCisKK2NsZWFuOgorCSQoRUNITykgIiAgQ0xFQU4iCisJQCQoUk1fRikgLXIgJChDTEVBTl9ESVJTKQorCitoZWxwOgorCSQoRUNITykgIlNpbXBseSB0eXBlICdtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpJyB0byBidWlsZCBPcGVuVGhyZWFkIGZvciB0aGUgZm9sbG93aW5nICIKKwkkKEVDSE8pICJhcmNoaXRlY3R1cmVzOiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICAkKEFSQ0hTKSIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiVG8gYnVpbGQgb25seSBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLCBzcGVjaWZ5OiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICBtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpIDxhcmNoaXRlY3R1cmU+IgorCSQoRUNITykgIiIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlLWNjMjY1MCBiL2V4YW1wbGVzL01ha2VmaWxlLWNjMjY1MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTBiNWYyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUtY2MyNjUwCkBAIC0wLDAgKzEsMjY3IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKy5OT1RQQVJBTExFTDoKKworQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktYXIKK0FTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFzCitDUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1jcHAKK0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWdjYworQ1hYICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktZysrCitMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1sZAorU1RSSVAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktc3RyaXAKK05NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW5tCitSQU5MSUIgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1yYW5saWIKK09CSkNPUFkgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW9iamNvcHkKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgPSBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1tdGQgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW5jcC1hcHA9bXRkICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICBcCisgICAgLS13aXRoLWV4YW1wbGVzPWNjMjY1MCAgICAgICAgXAorICAgIC0td2l0aC1wbGF0Zm9ybS1pbmZvPWNjMjY1MCAgIFwKKyAgICBNQkVEVExTX0NQUEZMQUdTPSIkKENDMjY1MF9NQkVEVExTX0NQUEZMQUdTKSIgXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGRpciAkKGFic3BhdGggJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpL2NvbW1vbi1zd2l0Y2hlcy5taworCitDQzI2NTBfTUJFRFRMU19DUFBGTEFHUyAgPSAtRE1CRURUTFNfQ09ORklHX0ZJTEU9J1wiY2MyNjUwLW1iZWR0bHMtY29uZmlnLmhcIicKK0NDMjY1MF9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChQV0QpL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvCitDQzI2NTBfTUJFRFRMU19DUFBGTEFHUyArPSAtSSQoUFdEKS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlCitDQzI2NTBfTUJFRFRMU19DUFBGTEFHUyArPSAtSSQoUFdEKS90aGlyZF9wYXJ0eS9tYmVkdGxzCitDQzI2NTBfTUJFRFRMU19DUFBGTEFHUyArPSAtSSQoUFdEKS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZQorCitDQzI2NTBfQ09ORklHX0ZJTEVfQ1BQRkxBR1MgID0gLURPUEVOVEhSRUFEX1BST0pFQ1RfQ09SRV9DT05GSUdfRklMRT0nXCJvcGVudGhyZWFkLWNvcmUtY2MyNjUwLWNvbmZpZy5oXCInCitDQzI2NTBfQ09ORklHX0ZJTEVfQ1BQRkxBR1MgKz0gLUkkKFBXRCkvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC8KKworQ09NTU9OQ0ZMQUdTICAgICAgICAgICAgICAgICAgIDo9IFwKKyAgICAtZmRhdGEtc2VjdGlvbnMgICAgICAgICAgICAgICBcCisgICAgLWZmdW5jdGlvbi1zZWN0aW9ucyAgICAgICAgICAgXAorICAgIC1PcyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChDQzI2NTBfQ09ORklHX0ZJTEVfQ1BQRkxBR1MpXAorICAgICQoTlVMTCkKKworQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfQ1BQRkxBR1MpICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfQ0ZMQUdTKSAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ1hYRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfQ1hYRkxBR1MpICAgICAgICAgICAgXAorICAgIC1mbm8tZXhjZXB0aW9ucyAgICAgICAgICAgICAgIFwKKyAgICAtZm5vLXJ0dGkgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitMREZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9MREZMQUdTKSAgICAgICAgICAgICBcCisgICAgLW5vc3RhcnRmaWxlcyAgICAgICAgICAgICAgICAgXAorICAgIC1zcGVjcz1uYW5vLnNwZWNzICAgICAgICAgICAgIFwKKyAgICAtc3BlY3M9bm9zeXMuc3BlY3MgICAgICAgICAgICBcCisgICAgLVdsLC0tZ2Mtc2VjdGlvbnMgICAgICAgICAgICAgXAorICAgIC1XbCwtTWFwPW1hcC5tYXAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0VDSE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gQGVjaG8KK01BS0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbWFrZQorTUtESVJfUCAgICAgICAgICAgICAgICAgICAgICAgICA6PSBta2RpciAtcAorTE5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBsbiAtcworUk1fRiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBybSAtZgorCitJTlNUQUxMICAgICAgICAgICAgICAgICAgICAgICAgIDo9IC91c3IvYmluL2luc3RhbGwKK0lOU1RBTExGTEFHUyAgICAgICAgICAgICAgICAgICAgOj0gLXAKKworVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHNoZWxsIHJlYWRsaW5rICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorQWJzVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHJlYWxwYXRoICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorCitCdWlsZFBhdGggICAgICAgICAgICAgICAgICAgICAgID0gYnVpbGQKK1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgICAgPSAkKEJ1aWxkUGF0aCkKK0Fic1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BCdWlsZERpcikKKworUmVzdWx0UGF0aCAgICAgICAgICAgICAgICAgICAgICA9IG91dHB1dAorVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICAgICA9ICQoUmVzdWx0UGF0aCkKK0Fic1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BSZXN1bHREaXIpCisKK1RhcmdldFR1cGxlICAgICAgICAgICAgICAgICAgICAgPSBjYzI2NTAKKworQVJDSFMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMworCitUb3BUYXJnZXRMaWJEaXIgICAgICAgICAgICAgICAgID0gJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYgorCitpZm5kZWYgQnVpbGRKb2JzCitCdWlsZEpvYnMgOj0gJChzaGVsbCBnZXRjb25mIF9OUFJPQ0VTU09SU19PTkxOKQorZW5kaWYKK0pPQlNGTEFHIDo9IC1qJChCdWlsZEpvYnMpCisKKyMKKyMgY29uZmlndXJlLWFyY2ggPGFyY2g+CisjCisjIENvbmZpZ3VyZSBPcGVuVGhyZWFkIGZvciB0aGUgc3BlY2lmaWVkIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBjb25maWd1cmUuCisjCitkZWZpbmUgY29uZmlndXJlLWFyY2gKKyQoRUNITykgIiAgQ09ORklHICAgJChUYXJnZXRUdXBsZSkuLi4iCisoY2QgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpICYmICQoQWJzVG9wU291cmNlRGlyKS9jb25maWd1cmUgXAorSU5TVEFMTD0iJChJTlNUQUxMKSAkKElOU1RBTExGTEFHUykiIFwKK0NQUD0iJChDUFApIiBDQz0iJChDQykiIENYWD0iJChDWFgpIiBPQkpDPSIkKE9CSkMpIiBPQkpDWFg9IiQoT0JKQ1hYKSIgQVI9IiQoQVIpIiBSQU5MSUI9IiQoUkFOTElCKSIgTk09IiQoTk0pIiBTVFJJUD0iJChTVFJJUCkiIENQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIENYWEZMQUdTPSIkKENYWEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgXAorLS1ob3N0PWFybS1ub25lLWVhYmkgXAorLS1wcmVmaXg9LyBcCistLWV4ZWMtcHJlZml4PS8kKFRhcmdldFR1cGxlKSBcCiskKGNvbmZpZ3VyZV9PUFRJT05TKSkKK2VuZGVmICMgY29uZmlndXJlLWFyY2gKKworIworIyBidWlsZC1hcmNoIDxhcmNoPgorIworIyBCdWlsZCB0aGUgT3BlblRocmVhZCBpbnRlcm1lZGlhdGUgYnVpbGQgcHJvZHVjdHMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkLgorIworZGVmaW5lIGJ1aWxkLWFyY2gKKyQoRUNITykgIiAgQlVJTEQgICAgJChUYXJnZXRUdXBsZSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCithbGwKK2VuZGVmICMgYnVpbGQtYXJjaAorCisjCisjIHN0YWdlLWFyY2ggPGFyY2g+CisjCisjIFN0YWdlIChpbnN0YWxsKSB0aGUgT3BlblRocmVhZCBmaW5hbCBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gc3RhZ2UuCisjCitkZWZpbmUgc3RhZ2UtYXJjaAorJChFQ0hPKSAiICBTVEFHRSAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK0RFU1RESVI9JChBYnNUb3BSZXN1bHREaXIpIFwKK2luc3RhbGwKK2VuZGVmICMgc3RhZ2UtYXJjaAorCisjCisjIEFSQ0hfdGVtcGxhdGUgPGFyY2g+CisjCisjIERlZmluZSBtYWNyb3MsIHRhcmdldHMgYW5kIHJ1bGVzIHRvIGNvbmZpZ3VyZSwgYnVpbGQsIGFuZCBzdGFnZSB0aGUKKyMgT3BlblRocmVhZCBmb3IgYSBzaW5nbGUgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZSBmb3IuCisjCitkZWZpbmUgQVJDSF90ZW1wbGF0ZQorQ09ORklHVVJFX1RBUkdFVFMgKz0gY29uZmlndXJlLSQoMSkKK0JVSUxEX1RBUkdFVFMgICAgICs9IGRvLWJ1aWxkLSQoMSkKK1NUQUdFX1RBUkdFVFMgICAgICs9IHN0YWdlLSQoMSkKK0JVSUxEX0RJUlMgICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorRElSRUNUT1JJRVMgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ1BQRkxBR1M9JCgkKDEpX3RhcmdldF9DUFBGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ0ZMQUdTPSQoJCgxKV90YXJnZXRfQ0ZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DWFhGTEFHUz0kKCQoMSlfdGFyZ2V0X0NYWEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9MREZMQUdTPSQoJCgxKV90YXJnZXRfTERGTEFHUykKKworY29uZmlndXJlLSQoMSk6ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzCisKKyQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzOiB8ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorCSQkKGNhbGwgY29uZmlndXJlLWFyY2gsJCgxKSkKKworZG8tYnVpbGQtJCgxKTogY29uZmlndXJlLSQoMSkKKworZG8tYnVpbGQtJCgxKToKKwkrJCQoY2FsbCBidWlsZC1hcmNoLCQoMSkpCisKK3N0YWdlLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworc3RhZ2UtJCgxKTogfCAkKFRvcFJlc3VsdERpcikKKwkkJChjYWxsIHN0YWdlLWFyY2gsJCgxKSkKKworJCgxKTogc3RhZ2UtJCgxKQorZW5kZWYgIyBBUkNIX3RlbXBsYXRlCisKKy5ERUZBVUxUX0dPQUwgOj0gYWxsCisKK2FsbDogc3RhZ2UKKworIworIyBjb3J0ZXgtbTMKKyMKKworY29ydGV4LW0zX3RhcmdldF9BQkkgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMworY29ydGV4LW0zX3RhcmdldF9DUFBGTEFHUyAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMyAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKK2NvcnRleC1tM190YXJnZXRfQ0ZMQUdTICAgICAgICAgICAgICAgPSAtbWNwdT1jb3J0ZXgtbTMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTNfdGFyZ2V0X0NYWEZMQUdTICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW0zIC1tZmxvYXQtYWJpPXNvZnQgLW10aHVtYgorY29ydGV4LW0zX3RhcmdldF9MREZMQUdTICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMyAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKKworIyBJbnN0YW50aWF0ZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYnVpbGQgdGVtcGxhdGUgZm9yIGVhY2ggdGFyZ2V0CisjIGFyY2hpdGVjdHVyZS4KKworJChmb3JlYWNoIGFyY2gsJChBUkNIUyksJChldmFsICQoY2FsbCBBUkNIX3RlbXBsYXRlLCQoYXJjaCkpKSkKKworIworIyBDb21tb24gLyBGaW5hbGl6YXRpb24KKyMKKworY29uZmlndXJlOiAkKENPTkZJR1VSRV9UQVJHRVRTKQorCitidWlsZDogJChCVUlMRF9UQVJHRVRTKQorCitzdGFnZTogJChTVEFHRV9UQVJHRVRTKQorCitESVJFQ1RPUklFUyAgICAgPSAkKFRvcFJlc3VsdERpcikgJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYiAkKEJVSUxEX0RJUlMpCisKK0NMRUFOX0RJUlMgICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKEJVSUxEX0RJUlMpCisKK2FsbDogc3RhZ2UKKworJChESVJFQ1RPUklFUyk6CisJJChFQ0hPKSAiICBNS0RJUiAgICAkQCIKKwlAJChNS0RJUl9QKSAiJEAiCisKK2NsZWFuOgorCSQoRUNITykgIiAgQ0xFQU4iCisJQCQoUk1fRikgLXIgJChDTEVBTl9ESVJTKQorCitoZWxwOgorCSQoRUNITykgIlNpbXBseSB0eXBlICdtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpJyB0byBidWlsZCBPcGVuVGhyZWFkIGZvciB0aGUgZm9sbG93aW5nICIKKwkkKEVDSE8pICJhcmNoaXRlY3R1cmVzOiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICAkKEFSQ0hTKSIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiVG8gYnVpbGQgb25seSBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLCBzcGVjaWZ5OiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICBtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpIDxhcmNoaXRlY3R1cmU+IgorCSQoRUNITykgIiIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlLWRhMTUwMDAgYi9leGFtcGxlcy9NYWtlZmlsZS1kYTE1MDAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDljMWEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9NYWtlZmlsZS1kYTE1MDAwCkBAIC0wLDAgKzEsMjYxIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKy5OT1RQQVJBTExFTDoKKworQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktYXIKK0FTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFzCitDUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1jcHAKK0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWdjYworQ1hYICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktZysrCitMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1sZAorU1RSSVAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktc3RyaXAKK05NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW5tCitSQU5MSUIgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1yYW5saWIKK09CSkNPUFkgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW9iamNvcHkKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgPSBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1hbGwgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW5jcC1hcHA9YWxsICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICBcCisgICAgLS13aXRoLWV4YW1wbGVzPWRhMTUwMDAgICAgICAgXAorICAgIC0td2l0aC1wbGF0Zm9ybS1pbmZvPURBMTUwMDAgIFwKKyAgICAkKE5VTEwpCisKK2luY2x1ZGUgJChkaXIgJChhYnNwYXRoICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS9jb21tb24tc3dpdGNoZXMubWsKKworVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHNoZWxsIHJlYWRsaW5rICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorQWJzVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHJlYWxwYXRoICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorCitDT05GSUdfRklMRSAgICAgICAgICAgICAgICAgICAgICA9IE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSdcIm9wZW50aHJlYWQtY29yZS1kYTE1MDAwLWNvbmZpZy5oXCInCitDT05GSUdfRklMRV9QQVRIICAgICAgICAgICAgICAgICA9ICQoQWJzVG9wU291cmNlRGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC8KKworQ09NTU9OQ0ZMQUdTICAgICAgICAgICAgICAgICAgIDo9IFwKKyAgICAtZmRhdGEtc2VjdGlvbnMgICAgICAgICAgICAgICBcCisgICAgLWZmdW5jdGlvbi1zZWN0aW9ucyAgICAgICAgICAgXAorICAgIC1PcyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUQkKENPTkZJR19GSUxFKSAgICAgICAgICAgICAgXAorICAgIC1JJChDT05GSUdfRklMRV9QQVRIKSAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NQUEZMQUdTKSAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NGTEFHUykgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NYWEZMQUdTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NYWEZMQUdTKSAgICAgICAgICAgIFwKKyAgICAtZm5vLWV4Y2VwdGlvbnMgICAgICAgICAgICAgICBcCisgICAgLWZuby1ydHRpICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworTERGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfTERGTEFHUykgICAgICAgICAgICAgXAorICAgIC1ub3N0YXJ0ZmlsZXMgICAgICAgICAgICAgICAgIFwKKyAgICAtc3BlY3M9bmFuby5zcGVjcyAgICAgICAgICAgICBcCisgICAgLXNwZWNzPW5vc3lzLnNwZWNzICAgICAgICAgICAgXAorICAgIC1XbCwtLWdjLXNlY3Rpb25zICAgICAgICAgICAgIFwKKyAgICAtV2wsLU1hcD1tYXAubWFwICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitFQ0hPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IEBlY2hvCitNQUtFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1ha2UKK01LRElSX1AgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbWtkaXIgLXAKK0xOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbG4gLXMKK1JNX0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gcm0gLWYKKworSU5TVEFMTCAgICAgICAgICAgICAgICAgICAgICAgICA6PSAvdXNyL2Jpbi9pbnN0YWxsCitJTlNUQUxMRkxBR1MgICAgICAgICAgICAgICAgICAgIDo9IC1wCisKK0J1aWxkUGF0aCAgICAgICAgICAgICAgICAgICAgICAgPSBidWlsZAorVG9wQnVpbGREaXIgICAgICAgICAgICAgICAgICAgICA9ICQoQnVpbGRQYXRoKQorQWJzVG9wQnVpbGREaXIgICAgICAgICAgICAgICAgICA9ICQoUFdEKS8kKFRvcEJ1aWxkRGlyKQorCitSZXN1bHRQYXRoICAgICAgICAgICAgICAgICAgICAgID0gb3V0cHV0CitUb3BSZXN1bHREaXIgICAgICAgICAgICAgICAgICAgID0gJChSZXN1bHRQYXRoKQorQWJzVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICA9ICQoUFdEKS8kKFRvcFJlc3VsdERpcikKKworVGFyZ2V0VHVwbGUgICAgICAgICAgICAgICAgICAgICA9IGRhMTUwMDAKKworQVJDSFMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMAorCitUb3BUYXJnZXRMaWJEaXIgICAgICAgICAgICAgICAgID0gJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYgorCitpZm5kZWYgQnVpbGRKb2JzCitCdWlsZEpvYnMgOj0gJChzaGVsbCBnZXRjb25mIF9OUFJPQ0VTU09SU19PTkxOKQorZW5kaWYKK0pPQlNGTEFHIDo9IC1qJChCdWlsZEpvYnMpCisKKyMKKyMgY29uZmlndXJlLWFyY2ggPGFyY2g+CisjCisjIENvbmZpZ3VyZSBPcGVuVGhyZWFkIGZvciB0aGUgc3BlY2lmaWVkIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBjb25maWd1cmUuCisjCitkZWZpbmUgY29uZmlndXJlLWFyY2gKKyQoRUNITykgIiAgQ09ORklHICAgJChUYXJnZXRUdXBsZSkuLi4iCisoY2QgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpICYmICQoQWJzVG9wU291cmNlRGlyKS9jb25maWd1cmUgXAorSU5TVEFMTD0iJChJTlNUQUxMKSAkKElOU1RBTExGTEFHUykiIFwKK0NQUD0iJChDUFApIiBDQz0iJChDQykiIENYWD0iJChDWFgpIiBPQkpDPSIkKE9CSkMpIiBPQkpDWFg9IiQoT0JKQ1hYKSIgQVI9IiQoQVIpIiBSQU5MSUI9IiQoUkFOTElCKSIgTk09IiQoTk0pIiBTVFJJUD0iJChTVFJJUCkiIENQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIENYWEZMQUdTPSIkKENYWEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgXAorLS1ob3N0PWFybS1ub25lLWVhYmkgXAorLS1wcmVmaXg9LyBcCistLWV4ZWMtcHJlZml4PS8kKFRhcmdldFR1cGxlKSBcCiskKGNvbmZpZ3VyZV9PUFRJT05TKSkKK2VuZGVmICMgY29uZmlndXJlLWFyY2gKKworIworIyBidWlsZC1hcmNoIDxhcmNoPgorIworIyBCdWlsZCB0aGUgT3BlblRocmVhZCBpbnRlcm1lZGlhdGUgYnVpbGQgcHJvZHVjdHMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkLgorIworZGVmaW5lIGJ1aWxkLWFyY2gKKyQoRUNITykgIiAgQlVJTEQgICAgJChUYXJnZXRUdXBsZSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCithbGwKK2VuZGVmICMgYnVpbGQtYXJjaAorCisjCisjIHN0YWdlLWFyY2ggPGFyY2g+CisjCisjIFN0YWdlIChpbnN0YWxsKSB0aGUgT3BlblRocmVhZCBmaW5hbCBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gc3RhZ2UuCisjCitkZWZpbmUgc3RhZ2UtYXJjaAorJChFQ0hPKSAiICBTVEFHRSAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK0RFU1RESVI9JChBYnNUb3BSZXN1bHREaXIpIFwKK2luc3RhbGwKK2VuZGVmICMgc3RhZ2UtYXJjaAorCisjCisjIEFSQ0hfdGVtcGxhdGUgPGFyY2g+CisjCisjIERlZmluZSBtYWNyb3MsIHRhcmdldHMgYW5kIHJ1bGVzIHRvIGNvbmZpZ3VyZSwgYnVpbGQsIGFuZCBzdGFnZSB0aGUKKyMgT3BlblRocmVhZCBmb3IgYSBzaW5nbGUgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZSBmb3IuCisjCitkZWZpbmUgQVJDSF90ZW1wbGF0ZQorQ09ORklHVVJFX1RBUkdFVFMgKz0gY29uZmlndXJlLSQoMSkKK0JVSUxEX1RBUkdFVFMgICAgICs9IGRvLWJ1aWxkLSQoMSkKK1NUQUdFX1RBUkdFVFMgICAgICs9IHN0YWdlLSQoMSkKK0JVSUxEX0RJUlMgICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorRElSRUNUT1JJRVMgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ1BQRkxBR1M9JCgkKDEpX3RhcmdldF9DUFBGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ0ZMQUdTPSQoJCgxKV90YXJnZXRfQ0ZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DWFhGTEFHUz0kKCQoMSlfdGFyZ2V0X0NYWEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9MREZMQUdTPSQoJCgxKV90YXJnZXRfTERGTEFHUykKKworY29uZmlndXJlLSQoMSk6ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzCisKKyQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzOiB8ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorCSQkKGNhbGwgY29uZmlndXJlLWFyY2gsJCgxKSkKKworZG8tYnVpbGQtJCgxKTogY29uZmlndXJlLSQoMSkKKworZG8tYnVpbGQtJCgxKToKKwkrJCQoY2FsbCBidWlsZC1hcmNoLCQoMSkpCisKK3N0YWdlLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworc3RhZ2UtJCgxKTogfCAkKFRvcFJlc3VsdERpcikKKwkkJChjYWxsIHN0YWdlLWFyY2gsJCgxKSkKKworJCgxKTogc3RhZ2UtJCgxKQorZW5kZWYgIyBBUkNIX3RlbXBsYXRlCisKKy5ERUZBVUxUX0dPQUwgOj0gYWxsCisKK2FsbDogc3RhZ2UKKworIworIyBjb3J0ZXgtbTAKKyMKKworY29ydGV4LW0wX3RhcmdldF9BQkkgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMAorY29ydGV4LW0wX3RhcmdldF9DUFBGTEFHUyAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMCAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKK2NvcnRleC1tMF90YXJnZXRfQ0ZMQUdTICAgICAgICAgICAgICAgPSAtbWNwdT1jb3J0ZXgtbTAgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTBfdGFyZ2V0X0NYWEZMQUdTICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW0wIC1tZmxvYXQtYWJpPXNvZnQgLW10aHVtYgorY29ydGV4LW0wX3RhcmdldF9MREZMQUdTICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMCAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKKworIyBJbnN0YW50aWF0ZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYnVpbGQgdGVtcGxhdGUgZm9yIGVhY2ggdGFyZ2V0CisjIGFyY2hpdGVjdHVyZS4KKworJChmb3JlYWNoIGFyY2gsJChBUkNIUyksJChldmFsICQoY2FsbCBBUkNIX3RlbXBsYXRlLCQoYXJjaCkpKSkKKworIworIyBDb21tb24gLyBGaW5hbGl6YXRpb24KKyMKKworY29uZmlndXJlOiAkKENPTkZJR1VSRV9UQVJHRVRTKQorCitidWlsZDogJChCVUlMRF9UQVJHRVRTKQorCitzdGFnZTogJChTVEFHRV9UQVJHRVRTKQorCitESVJFQ1RPUklFUyAgICAgPSAkKFRvcFJlc3VsdERpcikgJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYiAkKEJVSUxEX0RJUlMpCisKK0NMRUFOX0RJUlMgICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKEJVSUxEX0RJUlMpCisKK2FsbDogc3RhZ2UKKworJChESVJFQ1RPUklFUyk6CisJJChFQ0hPKSAiICBNS0RJUiAgICAkQCIKKwlAJChNS0RJUl9QKSAiJEAiCisKK2NsZWFuOgorCSQoRUNITykgIiAgQ0xFQU4iCisJQCQoUk1fRikgLXIgJChDTEVBTl9ESVJTKQorCitoZWxwOgorCSQoRUNITykgIlNpbXBseSB0eXBlICdtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpJyB0byBidWlsZCBPcGVuVGhyZWFkIGZvciB0aGUgZm9sbG93aW5nICIKKwkkKEVDSE8pICJhcmNoaXRlY3R1cmVzOiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICAkKEFSQ0hTKSIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiVG8gYnVpbGQgb25seSBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLCBzcGVjaWZ5OiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICBtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpIDxhcmNoaXRlY3R1cmU+IgorCSQoRUNITykgIiIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlLWVmcjMyIGIvZXhhbXBsZXMvTWFrZWZpbGUtZWZyMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzYTE0NAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlLWVmcjMyCkBAIC0wLDAgKzEsMjc2IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKy5OT1RQQVJBTExFTDoKKworQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktYXIKK0NDQVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFzCitDUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1jcHAKK0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWdjYworQ1hYICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktZysrCitMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1sZAorU1RSSVAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktc3RyaXAKK05NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW5tCitSQU5MSUIgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1yYW5saWIKK09CSkNPUFkgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW9iamNvcHkKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgPSBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1hbGwgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW5jcC1hcHA9YWxsICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICBcCisgICAgLS1lbmFibGUtZGlhZyAgICAgICAgICAgICAgICAgXAorICAgIC0td2l0aC1leGFtcGxlcz1lZnIzMiAgICAgICAgIFwKKyAgICAtLXdpdGgtcGxhdGZvcm0taW5mbz1FRlIzMiAgICBcCisgICAgTUJFRFRMU19DUFBGTEFHUz0iJChFRlIzMl9NQkVEVExTX0NQUEZMQUdTKSIgXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGRpciAkKGFic3BhdGggJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpL2NvbW1vbi1zd2l0Y2hlcy5taworCitUb3BTb3VyY2VEaXIgICAgICAgICAgICAgICAgICAgIDo9ICQoZGlyICQoc2hlbGwgcmVhZGxpbmsgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS4uCitBYnNUb3BTb3VyY2VEaXIgICAgICAgICAgICAgICAgIDo9ICQoZGlyICQocmVhbHBhdGggJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS4uCisKK0VGUjMyX01CRURUTFNfQ1BQRkxBR1MgID0gLURNQkVEVExTX0NPTkZJR19GSUxFPSdcIm1iZWR0bHMtY29uZmlnLmhcIicKK0VGUjMyX01CRURUTFNfQ1BQRkxBR1MgKz0gLURNQkVEVExTX1VTRVJfQ09ORklHX0ZJTEU9J1wiZWZyMzItbWJlZHRscy1jb25maWcuaFwiJworRUZSMzJfTUJFRFRMU19DUFBGTEFHUyArPSAtREVGUjMyTUcxMlA0MzJGMTAyNEdMMTI1CitFRlIzMl9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9jcnlwdG8KK0VGUjMyX01CRURUTFNfQ1BQRkxBR1MgKz0gLUkkKEFic1RvcFNvdXJjZURpcikvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3V0aWwvdGhpcmRfcGFydHkvbWJlZHRscy9jb25maWdzCitFRlIzMl9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9DTVNJUy9JbmNsdWRlCitFRlIzMl9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS91dGlsL3RoaXJkX3BhcnR5L21iZWR0bHMvc2xfY3J5cHRvL2luY2x1ZGUKK0VGUjMyX01CRURUTFNfQ1BQRkxBR1MgKz0gLUkkKEFic1RvcFNvdXJjZURpcikvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL0RldmljZS9TaWxpY29uTGFicy9FRlIzMk1HMTJQL0luY2x1ZGUKK0VGUjMyX01CRURUTFNfQ1BQRkxBR1MgKz0gLUkkKEFic1RvcFNvdXJjZURpcikvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtbGliL2luYworRUZSMzJfTUJFRFRMU19DUFBGTEFHUyArPSAtSSQoQWJzVG9wU291cmNlRGlyKS90aGlyZF9wYXJ0eS9tYmVkdGxzCitFRlIzMl9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlCitFRlIzMl9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMKKworQ09ORklHX0ZJTEUgICAgICA9IE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSdcIm9wZW50aHJlYWQtY29yZS1lZnIzMi1jb25maWcuaFwiJworQ09ORklHX0ZJTEVfUEFUSCA9ICQoQWJzVG9wU291cmNlRGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvCisKK0NPTU1PTkNGTEFHUyAgICAgICAgICAgICAgICAgICA6PSBcCisgICAgLWZkYXRhLXNlY3Rpb25zICAgICAgICAgICAgICAgXAorICAgIC1mZnVuY3Rpb24tc2VjdGlvbnMgICAgICAgICAgIFwKKyAgICAtT3MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EJChDT05GSUdfRklMRSkgICAgICAgICAgICAgIFwKKyAgICAtSSQoQ09ORklHX0ZJTEVfUEFUSCkgICAgICAgICBcCisgICAgJChOVUxMKQorCitDUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DUFBGTEFHUykgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DRkxBR1MpICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DWFhGTEFHUykgICAgICAgICAgICBcCisgICAgLWZuby1leGNlcHRpb25zICAgICAgICAgICAgICAgXAorICAgIC1mbm8tcnR0aSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0xERkxBR1MpICAgICAgICAgICAgIFwKKyAgICAtbm9zdGFydGZpbGVzICAgICAgICAgICAgICAgICBcCisgICAgLXNwZWNzPW5hbm8uc3BlY3MgICAgICAgICAgICAgXAorICAgIC1zcGVjcz1ub3N5cy5zcGVjcyAgICAgICAgICAgIFwKKyAgICAtV2wsLS1nYy1zZWN0aW9ucyAgICAgICAgICAgICBcCisgICAgLVdsLC1NYXA9bWFwLm1hcCAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRUNITyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBAZWNobworTUFLRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBtYWtlCitNS0RJUl9QICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1rZGlyIC1wCitMTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IGxuIC1zCitSTV9GICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IHJtIC1mCisKK0lOU1RBTEwgICAgICAgICAgICAgICAgICAgICAgICAgOj0gL3Vzci9iaW4vaW5zdGFsbAorSU5TVEFMTEZMQUdTICAgICAgICAgICAgICAgICAgICA6PSAtcAorCitCdWlsZFBhdGggICAgICAgICAgICAgICAgICAgICAgID0gYnVpbGQKK1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgICAgPSAkKEJ1aWxkUGF0aCkKK0Fic1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BCdWlsZERpcikKKworUmVzdWx0UGF0aCAgICAgICAgICAgICAgICAgICAgICA9IG91dHB1dAorVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICAgICA9ICQoUmVzdWx0UGF0aCkKK0Fic1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BSZXN1bHREaXIpCisKK1RhcmdldFR1cGxlICAgICAgICAgICAgICAgICAgICAgPSBlZnIzMgorCitBUkNIUyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gY29ydGV4LW00CisKK1RvcFRhcmdldExpYkRpciAgICAgICAgICAgICAgICAgPSAkKFRvcFJlc3VsdERpcikvJChUYXJnZXRUdXBsZSkvbGliCisKK2lmbmRlZiBCdWlsZEpvYnMKK0J1aWxkSm9icyA6PSAkKHNoZWxsIGdldGNvbmYgX05QUk9DRVNTT1JTX09OTE4pCitlbmRpZgorSk9CU0ZMQUcgOj0gLWokKEJ1aWxkSm9icykKKworIworIyBjb25maWd1cmUtYXJjaCA8YXJjaD4KKyMKKyMgQ29uZmlndXJlIE9wZW5UaHJlYWQgZm9yIHRoZSBzcGVjaWZpZWQgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGNvbmZpZ3VyZS4KKyMKK2RlZmluZSBjb25maWd1cmUtYXJjaAorJChFQ0hPKSAiICBDT05GSUcgICAkKFRhcmdldFR1cGxlKS4uLiIKKyhjZCAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgJiYgJChBYnNUb3BTb3VyY2VEaXIpL2NvbmZpZ3VyZSBcCitJTlNUQUxMPSIkKElOU1RBTEwpICQoSU5TVEFMTEZMQUdTKSIgXAorQ1BQPSIkKENQUCkiIENDPSIkKENDKSIgQ1hYPSIkKENYWCkiIE9CSkM9IiQoT0JKQykiIE9CSkNYWD0iJChPQkpDWFgpIiBBUj0iJChBUikiIFJBTkxJQj0iJChSQU5MSUIpIiBOTT0iJChOTSkiIFNUUklQPSIkKFNUUklQKSIgQ1BQRkxBR1M9IiQoQ1BQRkxBR1MpIiBDRkxBR1M9IiQoQ0ZMQUdTKSIgQ1hYRkxBR1M9IiQoQ1hYRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiBcCistLWhvc3Q9YXJtLW5vbmUtZWFiaSBcCistLXByZWZpeD0vIFwKKy0tZXhlYy1wcmVmaXg9LyQoVGFyZ2V0VHVwbGUpIFwKKyQoY29uZmlndXJlX09QVElPTlMpKQorZW5kZWYgIyBjb25maWd1cmUtYXJjaAorCisjCisjIGJ1aWxkLWFyY2ggPGFyY2g+CisjCisjIEJ1aWxkIHRoZSBPcGVuVGhyZWFkIGludGVybWVkaWF0ZSBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gYnVpbGQuCisjCitkZWZpbmUgYnVpbGQtYXJjaAorJChFQ0hPKSAiICBCVUlMRCAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK2FsbAorZW5kZWYgIyBidWlsZC1hcmNoCisKKyMKKyMgc3RhZ2UtYXJjaCA8YXJjaD4KKyMKKyMgU3RhZ2UgKGluc3RhbGwpIHRoZSBPcGVuVGhyZWFkIGZpbmFsIGJ1aWxkIHByb2R1Y3RzIGZvciB0aGUgc3BlY2lmaWVkCisjIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBzdGFnZS4KKyMKK2RlZmluZSBzdGFnZS1hcmNoCiskKEVDSE8pICIgIFNUQUdFICAgICQoVGFyZ2V0VHVwbGUpIgorJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorREVTVERJUj0kKEFic1RvcFJlc3VsdERpcikgXAoraW5zdGFsbAorZW5kZWYgIyBzdGFnZS1hcmNoCisKKyMKKyMgQVJDSF90ZW1wbGF0ZSA8YXJjaD4KKyMKKyMgRGVmaW5lIG1hY3JvcywgdGFyZ2V0cyBhbmQgcnVsZXMgdG8gY29uZmlndXJlLCBidWlsZCwgYW5kIHN0YWdlIHRoZQorIyBPcGVuVGhyZWFkIGZvciBhIHNpbmdsZSBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gaW5zdGFudGlhdGUgdGhlIHRlbXBsYXRlIGZvci4KKyMKK2RlZmluZSBBUkNIX3RlbXBsYXRlCitDT05GSUdVUkVfVEFSR0VUUyArPSBjb25maWd1cmUtJCgxKQorQlVJTERfVEFSR0VUUyAgICAgKz0gZG8tYnVpbGQtJCgxKQorU1RBR0VfVEFSR0VUUyAgICAgKz0gc3RhZ2UtJCgxKQorQlVJTERfRElSUyAgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCitESVJFQ1RPUklFUyAgICAgICArPSAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkKKworY29uZmlndXJlLSQoMSk6IHRhcmdldF9DUFBGTEFHUz0kKCQoMSlfdGFyZ2V0X0NQUEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DRkxBR1M9JCgkKDEpX3RhcmdldF9DRkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0NYWEZMQUdTPSQoJCgxKV90YXJnZXRfQ1hYRkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0xERkxBR1M9JCgkKDEpX3RhcmdldF9MREZMQUdTKQorCitjb25maWd1cmUtJCgxKTogJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXMKKworJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXM6IHwgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisJJCQoY2FsbCBjb25maWd1cmUtYXJjaCwkKDEpKQorCitkby1idWlsZC0kKDEpOiBjb25maWd1cmUtJCgxKQorCitkby1idWlsZC0kKDEpOgorCSskJChjYWxsIGJ1aWxkLWFyY2gsJCgxKSkKKworc3RhZ2UtJCgxKTogZG8tYnVpbGQtJCgxKQorCitzdGFnZS0kKDEpOiB8ICQoVG9wUmVzdWx0RGlyKQorCSQkKGNhbGwgc3RhZ2UtYXJjaCwkKDEpKQorCiskKDEpOiBzdGFnZS0kKDEpCitlbmRlZiAjIEFSQ0hfdGVtcGxhdGUKKworLkRFRkFVTFRfR09BTCA6PSBhbGwKKworYWxsOiBzdGFnZQorCisjCisjIGNvcnRleC1tNAorIworCitjb3J0ZXgtbTRfdGFyZ2V0X0FCSSAgICAgICAgICAgICAgICAgID0gY29ydGV4LW00Citjb3J0ZXgtbTRfdGFyZ2V0X0NQUEZMQUdTICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW00IC1tZmxvYXQtYWJpPXNvZnQgLW10aHVtYgorY29ydGV4LW00X3RhcmdldF9DRkxBR1MgICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tNCAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKK2NvcnRleC1tNF90YXJnZXRfQ1hYRkxBR1MgICAgICAgICAgICAgPSAtbWNwdT1jb3J0ZXgtbTQgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTRfdGFyZ2V0X0xERkxBR1MgICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW00IC1tZmxvYXQtYWJpPXNvZnQgLW10aHVtYgorCisjIEluc3RhbnRpYXRlIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBidWlsZCB0ZW1wbGF0ZSBmb3IgZWFjaCB0YXJnZXQKKyMgYXJjaGl0ZWN0dXJlLgorCiskKGZvcmVhY2ggYXJjaCwkKEFSQ0hTKSwkKGV2YWwgJChjYWxsIEFSQ0hfdGVtcGxhdGUsJChhcmNoKSkpKQorCisjCisjIENvbW1vbiAvIEZpbmFsaXphdGlvbgorIworCitjb25maWd1cmU6ICQoQ09ORklHVVJFX1RBUkdFVFMpCisKK2J1aWxkOiAkKEJVSUxEX1RBUkdFVFMpCisKK3N0YWdlOiAkKFNUQUdFX1RBUkdFVFMpCisKK0RJUkVDVE9SSUVTICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKFRvcFJlc3VsdERpcikvJChUYXJnZXRUdXBsZSkvbGliICQoQlVJTERfRElSUykKKworQ0xFQU5fRElSUyAgICAgID0gJChUb3BSZXN1bHREaXIpICQoQlVJTERfRElSUykKKworYWxsOiBzdGFnZQorCiskKERJUkVDVE9SSUVTKToKKwkkKEVDSE8pICIgIE1LRElSICAgICRAIgorCUAkKE1LRElSX1ApICIkQCIKKworY2xlYW46CisJJChFQ0hPKSAiICBDTEVBTiIKKwlAJChSTV9GKSAtciAkKENMRUFOX0RJUlMpCisKK2hlbHA6CisJJChFQ0hPKSAiU2ltcGx5IHR5cGUgJ21ha2UgLWYgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSknIHRvIGJ1aWxkIE9wZW5UaHJlYWQgZm9yIHRoZSBmb2xsb3dpbmcgIgorCSQoRUNITykgImFyY2hpdGVjdHVyZXM6ICIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiICAgICQoQVJDSFMpIgorCSQoRUNITykgIiIKKwkkKEVDSE8pICJUbyBidWlsZCBvbmx5IGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUsIHNwZWNpZnk6ICIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiICAgIG1ha2UgLWYgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkgPGFyY2hpdGVjdHVyZT4iCisJJChFQ0hPKSAiIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUtZW1zayBiL2V4YW1wbGVzL01ha2VmaWxlLWVtc2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhNGYwNwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlLWVtc2sKQEAgLTAsMCArMSwzMjcgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworLk5PVFBBUkFMTEVMOgorCitBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJjLWVsZjMyLWFyCitDQ0FTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJjLWVsZjMyLWdjYworQ1BQICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFyYy1lbGYzMi1jcHAKK0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcmMtZWxmMzItZ2NjCitDWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJjLWVsZjMyLWcrKworTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFyYy1lbGYzMi1nY2MKK1NUUklQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcmMtZWxmMzItc3RyaXAKK05NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcmMtZWxmMzItbm0KK1JBTkxJQiAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcmMtZWxmMzItcmFubGliCitPQkpDT1BZICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJjLWVsZjMyLW9iamNvcHkKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgPSBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1hbGwgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW5jcC1hcHA9YWxsICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICBcCisgICAgLS13aXRoLWV4YW1wbGVzPWVtc2sgICAgICAgICAgXAorICAgIC0td2l0aC1wbGF0Zm9ybS1pbmZvPUVNU0sgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmZXEgKCQoQ0VSVF9MT0cpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtY2VydC1sb2cKK2VuZGlmCisKK2lmZXEgKCQoQ09NTUlTU0lPTkVSKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWNvbW1pc3Npb25lcgorZW5kaWYKKworaWZlcSAoJChKT0lORVIpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtam9pbmVyCitlbmRpZgorCitpZmVxICgkKERIQ1A2X1NFUlZFUiksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1kaGNwNi1zZXJ2ZXIKK2VuZGlmCisKK2lmZXEgKCQoREhDUDZfQ0xJRU5UKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWRoY3A2LWNsaWVudAorZW5kaWYKKworVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHNoZWxsIHJlYWRsaW5rICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorQWJzVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHJlYWxwYXRoICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorCitDT05GSUdfRklMRSAgICAgICAgICAgICAgICAgICAgICA9IE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSdcIm9wZW50aHJlYWQtY29yZS1lbXNrLWNvbmZpZy5oXCInCitDT05GSUdfRklMRV9QQVRIICAgICAgICAgICAgICAgICA9ICQoQWJzVG9wU291cmNlRGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay8KKworQ09NTU9OQ0ZMQUdTICAgICAgICAgICAgICAgICAgIDo9IFwKKyAgICAtZmRhdGEtc2VjdGlvbnMgICAgICAgICAgICAgICBcCisgICAgLWZmdW5jdGlvbi1zZWN0aW9ucyAgICAgICAgICAgXAorICAgIC1PcyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUQkKENPTkZJR19GSUxFKSAgICAgICAgICAgICAgXAorICAgIC1JJChDT05GSUdfRklMRV9QQVRIKSAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NQUEZMQUdTKSAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NGTEFHUykgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NYWEZMQUdTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NYWEZMQUdTKSAgICAgICAgICAgIFwKKyAgICAtZm5vLWV4Y2VwdGlvbnMgICAgICAgICAgICAgICBcCisgICAgLWZuby1ydHRpICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ0NBU0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNDQVNGTEFHUykgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfQ0NBU0ZMQUdTKSAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworTERGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfTERGTEFHUykgICAgICAgICAgICAgXAorICAgIC1ub3N0YXJ0ZmlsZXMgICAgICAgICAgICAgICAgIFwKKyAgICAtc3BlY3M9bmFuby5zcGVjcyAgICAgICAgICAgICBcCisgICAgLVdsLC0tZ2Mtc2VjdGlvbnMgICAgICAgICAgICAgXAorICAgIC1XbCwtTWFwPW1hcC5tYXAgICAgICAgICAgICAgIFwKKyAgICAtV2wsLS1kZWZzeW09X1NUQUNLU0laRT01MjQyODggXAorICAgIC1XbCwtLWRlZnN5bT1fSEVBUFNJWkU9NTI0Mjg4IFwKKyAgICAkKE5VTEwpCisKK0VDSE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gQGVjaG8KK01BS0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbWFrZQorTUtESVJfUCAgICAgICAgICAgICAgICAgICAgICAgICA6PSBta2RpciAtcAorTE5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBsbiAtcworUk1fRiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBybSAtZgorCitJTlNUQUxMICAgICAgICAgICAgICAgICAgICAgICAgIDo9IC91c3IvYmluL2luc3RhbGwKK0lOU1RBTExGTEFHUyAgICAgICAgICAgICAgICAgICAgOj0gLXAKKworQnVpbGRQYXRoICAgICAgICAgICAgICAgICAgICAgICA9IGJ1aWxkCitUb3BCdWlsZERpciAgICAgICAgICAgICAgICAgICAgID0gJChCdWlsZFBhdGgpCitBYnNUb3BCdWlsZERpciAgICAgICAgICAgICAgICAgID0gJChQV0QpLyQoVG9wQnVpbGREaXIpCisKK1Jlc3VsdFBhdGggICAgICAgICAgICAgICAgICAgICAgPSBvdXRwdXQKK1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgICAgPSAkKFJlc3VsdFBhdGgpCitBYnNUb3BSZXN1bHREaXIgICAgICAgICAgICAgICAgID0gJChQV0QpLyQoVG9wUmVzdWx0RGlyKQorCitUYXJnZXRUdXBsZSAgICAgICAgICAgICAgICAgICAgID0gZW1zaworCitBUkNIUyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJjZW0xMWQKKworVG9wVGFyZ2V0TGliRGlyICAgICAgICAgICAgICAgICA9ICQoVG9wUmVzdWx0RGlyKS8kKFRhcmdldFR1cGxlKS9saWIKKworaWZuZGVmIEJ1aWxkSm9icworQnVpbGRKb2JzIDo9ICQoc2hlbGwgZ2V0Y29uZiBfTlBST0NFU1NPUlNfT05MTikKK2VuZGlmCitKT0JTRkxBRyA6PSAtaiQoQnVpbGRKb2JzKQorCisjCisjIGNvbmZpZ3VyZS1hcmNoIDxhcmNoPgorIworIyBDb25maWd1cmUgT3BlblRocmVhZCBmb3IgdGhlIHNwZWNpZmllZCBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gY29uZmlndXJlLgorIworZGVmaW5lIGNvbmZpZ3VyZS1hcmNoCiskKEVDSE8pICIgIENPTkZJRyAgICQoVGFyZ2V0VHVwbGUpLi4uIgorKGNkICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAmJiAkKEFic1RvcFNvdXJjZURpcikvY29uZmlndXJlIFwKK0lOU1RBTEw9IiQoSU5TVEFMTCkgJChJTlNUQUxMRkxBR1MpIiBcCitDUFA9IiQoQ1BQKSIgQ0M9IiQoQ0MpIiBDWFg9IiQoQ1hYKSIgQ0NBUz0iJChDQ0FTKSIgT0JKQz0iJChPQkpDKSIgT0JKQ1hYPSIkKE9CSkNYWCkiIEFSPSIkKEFSKSIgUkFOTElCPSIkKFJBTkxJQikiIE5NPSIkKE5NKSIgU1RSSVA9IiQoU1RSSVApIiBDUFBGTEFHUz0iJChDUFBGTEFHUykiIENGTEFHUz0iJChDRkxBR1MpIiBDWFhGTEFHUz0iJChDWFhGTEFHUykiIENDQVNGTEFHUz0iJChDQ0FTRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiBcCistLWhvc3Q9YXJjLWVsZjMyIFwKKy0tcHJlZml4PS8gXAorLS1leGVjLXByZWZpeD0vJChUYXJnZXRUdXBsZSkgXAorJChjb25maWd1cmVfT1BUSU9OUykpCitlbmRlZiAjIGNvbmZpZ3VyZS1hcmNoCisKKyMKKyMgYnVpbGQtYXJjaCA8YXJjaD4KKyMKKyMgQnVpbGQgdGhlIE9wZW5UaHJlYWQgaW50ZXJtZWRpYXRlIGJ1aWxkIHByb2R1Y3RzIGZvciB0aGUgc3BlY2lmaWVkCisjIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBidWlsZC4KKyMKK2RlZmluZSBidWlsZC1hcmNoCiskKEVDSE8pICIgIEJVSUxEICAgICQoVGFyZ2V0VHVwbGUpIgorJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorYWxsCitlbmRlZiAjIGJ1aWxkLWFyY2gKKworIworIyBzdGFnZS1hcmNoIDxhcmNoPgorIworIyBTdGFnZSAoaW5zdGFsbCkgdGhlIE9wZW5UaHJlYWQgZmluYWwgYnVpbGQgcHJvZHVjdHMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIHN0YWdlLgorIworZGVmaW5lIHN0YWdlLWFyY2gKKyQoRUNITykgIiAgU1RBR0UgICAgJChUYXJnZXRUdXBsZSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCitERVNURElSPSQoQWJzVG9wUmVzdWx0RGlyKSBcCitpbnN0YWxsCitlbmRlZiAjIHN0YWdlLWFyY2gKKworIworIyBBUkNIX3RlbXBsYXRlIDxhcmNoPgorIworIyBEZWZpbmUgbWFjcm9zLCB0YXJnZXRzIGFuZCBydWxlcyB0byBjb25maWd1cmUsIGJ1aWxkLCBhbmQgc3RhZ2UgdGhlCisjIE9wZW5UaHJlYWQgZm9yIGEgc2luZ2xlIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBpbnN0YW50aWF0ZSB0aGUgdGVtcGxhdGUgZm9yLgorIworZGVmaW5lIEFSQ0hfdGVtcGxhdGUKK0NPTkZJR1VSRV9UQVJHRVRTICs9IGNvbmZpZ3VyZS0kKDEpCitCVUlMRF9UQVJHRVRTICAgICArPSBkby1idWlsZC0kKDEpCitTVEFHRV9UQVJHRVRTICAgICArPSBzdGFnZS0kKDEpCitCVUlMRF9ESVJTICAgICAgICArPSAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkKK0RJUkVDVE9SSUVTICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0NQUEZMQUdTPSQoJCgxKV90YXJnZXRfQ1BQRkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0NGTEFHUz0kKCQoMSlfdGFyZ2V0X0NGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ1hYRkxBR1M9JCgkKDEpX3RhcmdldF9DWFhGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfTERGTEFHUz0kKCQoMSlfdGFyZ2V0X0xERkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0NDQVNGTEFHUz0kKCQoMSlfdGFyZ2V0X0NDQVNGTEFHUykKKworY29uZmlndXJlLSQoMSk6ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzCisKKyQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzOiB8ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorCSQkKGNhbGwgY29uZmlndXJlLWFyY2gsJCgxKSkKKworZG8tYnVpbGQtJCgxKTogY29uZmlndXJlLSQoMSkKKworZG8tYnVpbGQtJCgxKToKKwkrJCQoY2FsbCBidWlsZC1hcmNoLCQoMSkpCisKK3N0YWdlLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworc3RhZ2UtJCgxKTogfCAkKFRvcFJlc3VsdERpcikKKwkkJChjYWxsIHN0YWdlLWFyY2gsJCgxKSkKKworJCgxKTogc3RhZ2UtJCgxKQorZW5kZWYgIyBBUkNIX3RlbXBsYXRlCisKKy5ERUZBVUxUX0dPQUwgOj0gYWxsCisKK2FsbDogc3RhZ2UKKworIworIyBFTVNLMi4zIGFyY2VtMTFkCisjCisKKyMgQ29tbW9uIG9wdGlvbnMKK01LREVQX09QVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAtTU1EIC1NVCAkQCAtTUYgJEAuZAorT1BUX09MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IC1PMAorCisjIEluY2x1ZGUgRU1TSyBCU1AgZm9sZGVyCitBTExfSU5DTFVERVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYgorCisjIENPTU1PTl9DT01QSUxFX09QVCAgICAgICAgICAgICAgICAgID0gLW1uby1zZGF0YSAkKE9QVF9PTEVWRUwpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKEFMTF9JTkNMVURFUykgJChNS0RFUF9PUFQpCisKKyMgQ29yZSBvcHRpb25zIG9mIGFyY2VtMTFkIGluIEVNU0syLjMgZnJvbSBBUkMgVENGIGZpbGUKK0NPTU1PTl9DT1JFX09QVF9HTlUgICAgICAgICAgICAgICAgICAgPSAtbWNwdT1lbTRfZnB1ZGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tbGl0dGxlLWVuZGlhbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1jb2RlLWRlbnNpdHkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tZGl2LXJlbSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1zd2FwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbW5vcm0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tbXB5LW9wdGlvbj02IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbWJhcnJlbC1zaGlmdGVyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbWZwdT1mcHVkYV9hbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcGFyYW0gbDEtY2FjaGUtc2l6ZT0xNjM4NCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1wYXJhbSBsMS1jYWNoZS1saW5lLXNpemU9MzIKKworQ0NPUkVfT1BUX0dOVSAgICAgICAgICAgICAgICAgICAgICAgICs9ICQoQ09NTU9OX0NPUkVfT1BUX0dOVSkKK0NYWENPUkVfT1BUX0dOVSAgICAgICAgICAgICAgICAgICAgICArPSAkKENPTU1PTl9DT1JFX09QVF9HTlUpCitBQ09SRV9PUFRfR05VICAgICAgICAgICAgICAgICAgICAgICAgKz0gJChDT01NT05fQ09SRV9PUFRfR05VKQorTENPUkVfT1BUX0dOVSAgICAgICAgICAgICAgICAgICAgICAgICs9ICQoQ09NTU9OX0NPUkVfT1BUX0dOVSkKKworIyBDL0NQUC9BU00vTGlua2VyIE9wdGlvbnMKK0NPTVBJTEVfT1BUICAgICAgICAgICAgICAgICAgICAgICAgICArPSAkKENDT1JFX09QVF9HTlUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKENPTU1PTl9DT01QSUxFX09QVCkgLXN0ZD1nbnU5OQorQ1hYX0NPTVBJTEVfT1BUICAgICAgICAgICAgICAgICAgICAgICs9ICQoQ1hYQ09SRV9PUFRfR05VKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChDT01NT05fQ09NUElMRV9PUFQpCitBU01fT1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gJChBQ09SRV9PUFRfR05VKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChDT01NT05fQ09NUElMRV9PUFQpIC14IGFzc2VtYmxlci13aXRoLWNwcAorTElOS19PUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICQoTENPUkVfT1BUX0dOVSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tbm8tc2RhdGEgLW5vc3RhcnRmaWxlcyAtLXZlcmJvc2UKKworYXJjZW0xMWRfdGFyZ2V0X0FCSSAgICAgICAgICAgICAgICAgICA9IGFyY2VtMTFkCithcmNlbTExZF90YXJnZXRfQ1BQRkxBR1MgICAgICAgICAgICAgID0gJChDWFhfQ09NUElMRV9PUFQpCithcmNlbTExZF90YXJnZXRfQ0ZMQUdTICAgICAgICAgICAgICAgID0gJChDT01QSUxFX09QVCkKK2FyY2VtMTFkX3RhcmdldF9DWFhGTEFHUyAgICAgICAgICAgICAgPSAkKENYWF9DT01QSUxFX09QVCkKK2FyY2VtMTFkX3RhcmdldF9DQ0FTRkxBR1MgICAgICAgICAgICAgPSAkKEFTTV9PUFQpCithcmNlbTExZF90YXJnZXRfTERGTEFHUyAgICAgICAgICAgICAgID0gJChMSU5LX09QVCkKKworIyBJbnN0YW50aWF0ZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYnVpbGQgdGVtcGxhdGUgZm9yIGVhY2ggdGFyZ2V0CisjIGFyY2hpdGVjdHVyZS4KKworJChmb3JlYWNoIGFyY2gsJChBUkNIUyksJChldmFsICQoY2FsbCBBUkNIX3RlbXBsYXRlLCQoYXJjaCkpKSkKKworIworIyBDb21tb24gLyBGaW5hbGl6YXRpb24KKyMKKworY29uZmlndXJlOiAkKENPTkZJR1VSRV9UQVJHRVRTKQorCitidWlsZDogJChCVUlMRF9UQVJHRVRTKQorCitzdGFnZTogJChTVEFHRV9UQVJHRVRTKQorCitESVJFQ1RPUklFUyAgICAgPSAkKFRvcFJlc3VsdERpcikgJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYiAkKEJVSUxEX0RJUlMpCisKK0NMRUFOX0RJUlMgICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKEJVSUxEX0RJUlMpCisKK2FsbDogc3RhZ2UKKworJChESVJFQ1RPUklFUyk6CisJJChFQ0hPKSAiICBNS0RJUiAgICAkQCIKKwlAJChNS0RJUl9QKSAiJEAiCisKK2NsZWFuOgorCSQoRUNITykgIiAgQ0xFQU4iCisJQCQoUk1fRikgLXIgJChDTEVBTl9ESVJTKQorCitoZWxwOgorCSQoRUNITykgIlNpbXBseSB0eXBlICdtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpJyB0byBidWlsZCBPcGVuVGhyZWFkIGZvciB0aGUgZm9sbG93aW5nICIKKwkkKEVDSE8pICJhcmNoaXRlY3R1cmVzOiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICAkKEFSQ0hTKSIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiVG8gYnVpbGQgb25seSBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLCBzcGVjaWZ5OiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICBtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpIDxhcmNoaXRlY3R1cmU+IgorCSQoRUNITykgIiIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlLWt3NDF6IGIvZXhhbXBsZXMvTWFrZWZpbGUta3c0MXoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyMjgwMwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlLWt3NDF6CkBAIC0wLDAgKzEsMjYxIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKy5OT1RQQVJBTExFTDoKKworQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktYXIKK0NDQVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFzCitDUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1jcHAKK0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWdjYworQ1hYICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktZysrCitMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1sZAorU1RSSVAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktc3RyaXAKK05NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW5tCitSQU5MSUIgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1yYW5saWIKK09CSkNPUFkgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW9iamNvcHkKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgPSBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1hbGwgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW5jcC1hcHA9YWxsICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICBcCisgICAgLS1lbmFibGUtZGlhZyAgICAgICAgICAgICAgICAgXAorICAgIC0td2l0aC1leGFtcGxlcz1rdzQxeiAgICAgICAgIFwKKyAgICAtLXdpdGgtcGxhdGZvcm0taW5mbz1LVzQxWiAgICBcCisgICAgJChOVUxMKQorCitpbmNsdWRlICQoZGlyICQoYWJzcGF0aCAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkvY29tbW9uLXN3aXRjaGVzLm1rCisKK1RvcFNvdXJjZURpciAgICAgICAgICAgICAgICAgICAgOj0gJChkaXIgJChzaGVsbCByZWFkbGluayAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpLi4KK0Fic1RvcFNvdXJjZURpciAgICAgICAgICAgICAgICAgOj0gJChkaXIgJChyZWFscGF0aCAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpLi4KKworQ09ORklHX0ZJTEUgICAgICA9IE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSdcIm9wZW50aHJlYWQtY29yZS1rdzQxei1jb25maWcuaFwiJworQ09ORklHX0ZJTEVfUEFUSCA9ICQoQWJzVG9wU291cmNlRGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovCisKK0NPTU1PTkNGTEFHUyAgICAgICAgICAgICAgICAgICA6PSBcCisgICAgLWZkYXRhLXNlY3Rpb25zICAgICAgICAgICAgICAgXAorICAgIC1mZnVuY3Rpb24tc2VjdGlvbnMgICAgICAgICAgIFwKKyAgICAtT3MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EJChDT05GSUdfRklMRSkgICAgICAgICAgICAgIFwKKyAgICAtSSQoQ09ORklHX0ZJTEVfUEFUSCkgICAgICAgICBcCisgICAgJChOVUxMKQorCitDUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DUFBGTEFHUykgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DRkxBR1MpICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DWFhGTEFHUykgICAgICAgICAgICBcCisgICAgLWZuby1leGNlcHRpb25zICAgICAgICAgICAgICAgXAorICAgIC1mbm8tcnR0aSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0xERkxBR1MpICAgICAgICAgICAgIFwKKyAgICAtc3BlY3M9bmFuby5zcGVjcyAgICAgICAgICAgICBcCisgICAgLXNwZWNzPW5vc3lzLnNwZWNzICAgICAgICAgICAgXAorICAgIC1XbCwtLWdjLXNlY3Rpb25zICAgICAgICAgICAgIFwKKyAgICAtV2wsLU1hcD1tYXAubWFwICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitFQ0hPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IEBlY2hvCitNQUtFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1ha2UKK01LRElSX1AgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbWtkaXIgLXAKK0xOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbG4gLXMKK1JNX0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gcm0gLWYKKworSU5TVEFMTCAgICAgICAgICAgICAgICAgICAgICAgICA6PSAvdXNyL2Jpbi9pbnN0YWxsCitJTlNUQUxMRkxBR1MgICAgICAgICAgICAgICAgICAgIDo9IC1wCisKK0J1aWxkUGF0aCAgICAgICAgICAgICAgICAgICAgICAgPSBidWlsZAorVG9wQnVpbGREaXIgICAgICAgICAgICAgICAgICAgICA9ICQoQnVpbGRQYXRoKQorQWJzVG9wQnVpbGREaXIgICAgICAgICAgICAgICAgICA9ICQoUFdEKS8kKFRvcEJ1aWxkRGlyKQorCitSZXN1bHRQYXRoICAgICAgICAgICAgICAgICAgICAgID0gb3V0cHV0CitUb3BSZXN1bHREaXIgICAgICAgICAgICAgICAgICAgID0gJChSZXN1bHRQYXRoKQorQWJzVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICA9ICQoUFdEKS8kKFRvcFJlc3VsdERpcikKKworVGFyZ2V0VHVwbGUgICAgICAgICAgICAgICAgICAgICA9IGt3NDF6CisKK0FSQ0hTICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjb3J0ZXgtbTBwbHVzCisKK1RvcFRhcmdldExpYkRpciAgICAgICAgICAgICAgICAgPSAkKFRvcFJlc3VsdERpcikvJChUYXJnZXRUdXBsZSkvbGliCisKK2lmbmRlZiBCdWlsZEpvYnMKK0J1aWxkSm9icyA6PSAkKHNoZWxsIGdldGNvbmYgX05QUk9DRVNTT1JTX09OTE4pCitlbmRpZgorSk9CU0ZMQUcgOj0gLWokKEJ1aWxkSm9icykKKworIworIyBjb25maWd1cmUtYXJjaCA8YXJjaD4KKyMKKyMgQ29uZmlndXJlIE9wZW5UaHJlYWQgZm9yIHRoZSBzcGVjaWZpZWQgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGNvbmZpZ3VyZS4KKyMKK2RlZmluZSBjb25maWd1cmUtYXJjaAorJChFQ0hPKSAiICBDT05GSUcgICAkKFRhcmdldFR1cGxlKS4uLiIKKyhjZCAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgJiYgJChBYnNUb3BTb3VyY2VEaXIpL2NvbmZpZ3VyZSBcCitJTlNUQUxMPSIkKElOU1RBTEwpICQoSU5TVEFMTEZMQUdTKSIgXAorQ1BQPSIkKENQUCkiIENDPSIkKENDKSIgQ1hYPSIkKENYWCkiIE9CSkM9IiQoT0JKQykiIE9CSkNYWD0iJChPQkpDWFgpIiBBUj0iJChBUikiIFJBTkxJQj0iJChSQU5MSUIpIiBOTT0iJChOTSkiIFNUUklQPSIkKFNUUklQKSIgQ1BQRkxBR1M9IiQoQ1BQRkxBR1MpIiBDRkxBR1M9IiQoQ0ZMQUdTKSIgQ1hYRkxBR1M9IiQoQ1hYRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiBcCistLWhvc3Q9YXJtLW5vbmUtZWFiaSBcCistLXByZWZpeD0vIFwKKy0tZXhlYy1wcmVmaXg9LyQoVGFyZ2V0VHVwbGUpIFwKKyQoY29uZmlndXJlX09QVElPTlMpKQorZW5kZWYgIyBjb25maWd1cmUtYXJjaAorCisjCisjIGJ1aWxkLWFyY2ggPGFyY2g+CisjCisjIEJ1aWxkIHRoZSBPcGVuVGhyZWFkIGludGVybWVkaWF0ZSBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gYnVpbGQuCisjCitkZWZpbmUgYnVpbGQtYXJjaAorJChFQ0hPKSAiICBCVUlMRCAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK2FsbAorZW5kZWYgIyBidWlsZC1hcmNoCisKKyMKKyMgc3RhZ2UtYXJjaCA8YXJjaD4KKyMKKyMgU3RhZ2UgKGluc3RhbGwpIHRoZSBPcGVuVGhyZWFkIGZpbmFsIGJ1aWxkIHByb2R1Y3RzIGZvciB0aGUgc3BlY2lmaWVkCisjIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBzdGFnZS4KKyMKK2RlZmluZSBzdGFnZS1hcmNoCiskKEVDSE8pICIgIFNUQUdFICAgICQoVGFyZ2V0VHVwbGUpIgorJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorREVTVERJUj0kKEFic1RvcFJlc3VsdERpcikgXAoraW5zdGFsbAorZW5kZWYgIyBzdGFnZS1hcmNoCisKKyMKKyMgQVJDSF90ZW1wbGF0ZSA8YXJjaD4KKyMKKyMgRGVmaW5lIG1hY3JvcywgdGFyZ2V0cyBhbmQgcnVsZXMgdG8gY29uZmlndXJlLCBidWlsZCwgYW5kIHN0YWdlIHRoZQorIyBPcGVuVGhyZWFkIGZvciBhIHNpbmdsZSBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gaW5zdGFudGlhdGUgdGhlIHRlbXBsYXRlIGZvci4KKyMKK2RlZmluZSBBUkNIX3RlbXBsYXRlCitDT05GSUdVUkVfVEFSR0VUUyArPSBjb25maWd1cmUtJCgxKQorQlVJTERfVEFSR0VUUyAgICAgKz0gZG8tYnVpbGQtJCgxKQorU1RBR0VfVEFSR0VUUyAgICAgKz0gc3RhZ2UtJCgxKQorQlVJTERfRElSUyAgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCitESVJFQ1RPUklFUyAgICAgICArPSAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkKKworY29uZmlndXJlLSQoMSk6IHRhcmdldF9DUFBGTEFHUz0kKCQoMSlfdGFyZ2V0X0NQUEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DRkxBR1M9JCgkKDEpX3RhcmdldF9DRkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0NYWEZMQUdTPSQoJCgxKV90YXJnZXRfQ1hYRkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0xERkxBR1M9JCgkKDEpX3RhcmdldF9MREZMQUdTKQorCitjb25maWd1cmUtJCgxKTogJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXMKKworJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXM6IHwgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisJJCQoY2FsbCBjb25maWd1cmUtYXJjaCwkKDEpKQorCitkby1idWlsZC0kKDEpOiBjb25maWd1cmUtJCgxKQorCitkby1idWlsZC0kKDEpOgorCSskJChjYWxsIGJ1aWxkLWFyY2gsJCgxKSkKKworc3RhZ2UtJCgxKTogZG8tYnVpbGQtJCgxKQorCitzdGFnZS0kKDEpOiB8ICQoVG9wUmVzdWx0RGlyKQorCSQkKGNhbGwgc3RhZ2UtYXJjaCwkKDEpKQorCiskKDEpOiBzdGFnZS0kKDEpCitlbmRlZiAjIEFSQ0hfdGVtcGxhdGUKKworLkRFRkFVTFRfR09BTCA6PSBhbGwKKworYWxsOiBzdGFnZQorCisjCisjIGNvcnRleC1tMHBsdXMKKyMKKworY29ydGV4LW0wcGx1c190YXJnZXRfQUJJICAgICAgICAgICAgICAgICAgPSBjb3J0ZXgtbTBwbHVzCitjb3J0ZXgtbTBwbHVzX3RhcmdldF9DUFBGTEFHUyAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMHBsdXMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTBwbHVzX3RhcmdldF9DRkxBR1MgICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMHBsdXMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTBwbHVzX3RhcmdldF9DWFhGTEFHUyAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMHBsdXMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTBwbHVzX3RhcmdldF9MREZMQUdTICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMHBsdXMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCisKKyMgSW5zdGFudGlhdGUgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJ1aWxkIHRlbXBsYXRlIGZvciBlYWNoIHRhcmdldAorIyBhcmNoaXRlY3R1cmUuCisKKyQoZm9yZWFjaCBhcmNoLCQoQVJDSFMpLCQoZXZhbCAkKGNhbGwgQVJDSF90ZW1wbGF0ZSwkKGFyY2gpKSkpCisKKyMKKyMgQ29tbW9uIC8gRmluYWxpemF0aW9uCisjCisKK2NvbmZpZ3VyZTogJChDT05GSUdVUkVfVEFSR0VUUykKKworYnVpbGQ6ICQoQlVJTERfVEFSR0VUUykKKworc3RhZ2U6ICQoU1RBR0VfVEFSR0VUUykKKworRElSRUNUT1JJRVMgICAgID0gJChUb3BSZXN1bHREaXIpICQoVG9wUmVzdWx0RGlyKS8kKFRhcmdldFR1cGxlKS9saWIgJChCVUlMRF9ESVJTKQorCitDTEVBTl9ESVJTICAgICAgPSAkKFRvcFJlc3VsdERpcikgJChCVUlMRF9ESVJTKQorCithbGw6IHN0YWdlCisKKyQoRElSRUNUT1JJRVMpOgorCSQoRUNITykgIiAgTUtESVIgICAgJEAiCisJQCQoTUtESVJfUCkgIiRAIgorCitjbGVhbjoKKwkkKEVDSE8pICIgIENMRUFOIgorCUAkKFJNX0YpIC1yICQoQ0xFQU5fRElSUykKKworaGVscDoKKwkkKEVDSE8pICJTaW1wbHkgdHlwZSAnbWFrZSAtZiAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKScgdG8gYnVpbGQgT3BlblRocmVhZCBmb3IgdGhlIGZvbGxvd2luZyAiCisJJChFQ0hPKSAiYXJjaGl0ZWN0dXJlczogIgorCSQoRUNITykgIiIKKwkkKEVDSE8pICIgICAgJChBUkNIUykiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIlRvIGJ1aWxkIG9ubHkgYSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSwgc3BlY2lmeTogIgorCSQoRUNITykgIiIKKwkkKEVDSE8pICIgICAgbWFrZSAtZiAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSA8YXJjaGl0ZWN0dXJlPiIKKwkkKEVDSE8pICIiCmRpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZS1ucmY1Mjg0MCBiL2V4YW1wbGVzL01ha2VmaWxlLW5yZjUyODQwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjN2EwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9NYWtlZmlsZS1ucmY1Mjg0MApAQCAtMCwwICsxLDI4NSBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisuTk9UUEFSQUxMRUw6CisKK0FSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFyCitDQ0FTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1nY2MKK0NQUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWNwcAorQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktZ2NjCitDWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1nKysKK0xEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWxkCitTVFJJUCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1zdHJpcAorTk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktbm0KK1JBTkxJQiAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLXJhbmxpYgorT0JKQ09QWSAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktb2JqY29weQorCitCdWlsZEpvYnMgICAgICAgICAgICAgICAgICAgICAgPz0gMTAKKworY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAtLWVuYWJsZS1jbGktYXBwPWFsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtbmNwLWFwcD1hbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC0td2l0aC1uY3AtYnVzPXVhcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1kaWFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLS13aXRoLWV4YW1wbGVzPW5yZjUyODQwICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC0td2l0aC1wbGF0Zm9ybS1pbmZvPU5SRjUyODQwICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQkVEVExTX0NQUEZMQUdTPSIkKE5SRjUyODQwX01CRURUTFNfQ1BQRkxBR1MpIiBcCisgICAgJChOVUxMKQorCitpbmNsdWRlICQoZGlyICQoYWJzcGF0aCAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkvY29tbW9uLXN3aXRjaGVzLm1rCisKK2lmZGVmIFNSQ19QQVRICitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1zcmNkaXI9IiQoU1JDX1BBVEgpIgorZW5kaWYKKworVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHNoZWxsIHJlYWRsaW5rICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorQWJzVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHJlYWxwYXRoICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorCitOUkY1Mjg0MF9NQkVEVExTX0NQUEZMQUdTICA9IC1ETUJFRFRMU19DT05GSUdfRklMRT0nXCJtYmVkdGxzLWNvbmZpZy5oXCInCitOUkY1Mjg0MF9NQkVEVExTX0NQUEZMQUdTICs9IC1ETUJFRFRMU19VU0VSX0NPTkZJR19GSUxFPSdcIm5yZjUyODQwLW1iZWR0bHMtY29uZmlnLmhcIicKK05SRjUyODQwX01CRURUTFNfQ1BQRkxBR1MgKz0gLUkkKEFic1RvcFNvdXJjZURpcikvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2NyeXB0bworTlJGNTI4NDBfTUJFRFRMU19DUFBGTEFHUyArPSAtSSQoQWJzVG9wU291cmNlRGlyKS90aGlyZF9wYXJ0eS9tYmVkdGxzCitOUkY1Mjg0MF9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlCitOUkY1Mjg0MF9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMKKworQ09ORklHX0ZJTEUgICAgICA9IE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSdcIm9wZW50aHJlYWQtY29yZS1ucmY1Mjg0MC1jb25maWcuaFwiJworQ09ORklHX0ZJTEVfUEFUSCA9ICQoQWJzVG9wU291cmNlRGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvCisKK0NPTU1PTkNGTEFHUyAgICAgICAgICAgICAgICAgICA6PSBcCisgICAgLWZkYXRhLXNlY3Rpb25zICAgICAgICAgICAgICAgXAorICAgIC1mZnVuY3Rpb24tc2VjdGlvbnMgICAgICAgICAgIFwKKyAgICAtT3MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EJChDT05GSUdfRklMRSkgICAgICAgICAgICAgIFwKKyAgICAtSSQoQ09ORklHX0ZJTEVfUEFUSCkgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZmVxICgkKENFUlRfTE9HKSwxKQorQ09NTU9OQ0ZMQUdTICs9IC1ET1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVD0xCitlbmRpZgorCitDUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DUFBGTEFHUykgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DRkxBR1MpICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DWFhGTEFHUykgICAgICAgICAgICBcCisgICAgLWZuby1leGNlcHRpb25zICAgICAgICAgICAgICAgXAorICAgIC1mbm8tcnR0aSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0xERkxBR1MpICAgICAgICAgICAgIFwKKyAgICAtc3BlY3M9bmFuby5zcGVjcyAgICAgICAgICAgICBcCisgICAgLXNwZWNzPW5vc3lzLnNwZWNzICAgICAgICAgICAgXAorICAgIC1XbCwtLWdjLXNlY3Rpb25zICAgICAgICAgICAgIFwKKyAgICAtV2wsLU1hcD1tYXAubWFwICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDQ0FTRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNDQVNGTEFHUykgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NDQVNGTEFHUykgICAgICAgICAgICBcCisgICAgLXggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc3NlbWJsZXItd2l0aC1jcHAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRUNITyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBAZWNobworTUFLRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBtYWtlCitNS0RJUl9QICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1rZGlyIC1wCitMTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IGxuIC1zCitSTV9GICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IHJtIC1mCisKK0lOU1RBTEwgICAgICAgICAgICAgICAgICAgICAgICAgOj0gL3Vzci9iaW4vaW5zdGFsbAorSU5TVEFMTEZMQUdTICAgICAgICAgICAgICAgICAgICA6PSAtcAorCitCdWlsZFBhdGggICAgICAgICAgICAgICAgICAgICAgID0gYnVpbGQKK1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgICAgPSAkKEJ1aWxkUGF0aCkKK0Fic1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BCdWlsZERpcikKKworUmVzdWx0UGF0aCAgICAgICAgICAgICAgICAgICAgICA9IG91dHB1dAorVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICAgICA9ICQoUmVzdWx0UGF0aCkKK0Fic1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BSZXN1bHREaXIpCisKK1RhcmdldFR1cGxlICAgICAgICAgICAgICAgICAgICAgPSBucmY1Mjg0MAorCitBUkNIUyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gY29ydGV4LW00CisKK1RvcFRhcmdldExpYkRpciAgICAgICAgICAgICAgICAgPSAkKFRvcFJlc3VsdERpcikvJChUYXJnZXRUdXBsZSkvbGliCisKK2lmbmRlZiBCdWlsZEpvYnMKK0J1aWxkSm9icyA6PSAkKHNoZWxsIGdldGNvbmYgX05QUk9DRVNTT1JTX09OTE4pCitlbmRpZgorSk9CU0ZMQUcgOj0gLWokKEJ1aWxkSm9icykKKworIworIyBjb25maWd1cmUtYXJjaCA8YXJjaD4KKyMKKyMgQ29uZmlndXJlIE9wZW5UaHJlYWQgZm9yIHRoZSBzcGVjaWZpZWQgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGNvbmZpZ3VyZS4KKyMKK2RlZmluZSBjb25maWd1cmUtYXJjaAorJChFQ0hPKSAiICBDT05GSUcgICAkKFRhcmdldFR1cGxlKS4uLiIKKyhjZCAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgJiYgJChBYnNUb3BTb3VyY2VEaXIpL2NvbmZpZ3VyZSBcCitJTlNUQUxMPSIkKElOU1RBTEwpICQoSU5TVEFMTEZMQUdTKSIgXAorQ1BQPSIkKENQUCkiIENDPSIkKENDKSIgQ1hYPSIkKENYWCkiIENDQVM9IiQoQ0NBUykiIE9CSkM9IiQoT0JKQykiIE9CSkNYWD0iJChPQkpDWFgpIiBBUj0iJChBUikiIFJBTkxJQj0iJChSQU5MSUIpIiBOTT0iJChOTSkiIFNUUklQPSIkKFNUUklQKSIgQ1BQRkxBR1M9IiQoQ1BQRkxBR1MpIiBDRkxBR1M9IiQoQ0ZMQUdTKSIgQ1hYRkxBR1M9IiQoQ1hYRkxBR1MpIiBDQ0FTRkxBR1M9IiQoQ0NBU0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgXAorLS1ob3N0PWFybS1ub25lLWVhYmkgXAorLS1wcmVmaXg9LyBcCistLWV4ZWMtcHJlZml4PS8kKFRhcmdldFR1cGxlKSBcCiskKGNvbmZpZ3VyZV9PUFRJT05TKSkKK2VuZGVmICMgY29uZmlndXJlLWFyY2gKKworIworIyBidWlsZC1hcmNoIDxhcmNoPgorIworIyBCdWlsZCB0aGUgT3BlblRocmVhZCBpbnRlcm1lZGlhdGUgYnVpbGQgcHJvZHVjdHMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkLgorIworZGVmaW5lIGJ1aWxkLWFyY2gKKyQoRUNITykgIiAgQlVJTEQgICAgJChUYXJnZXRUdXBsZSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCithbGwKK2VuZGVmICMgYnVpbGQtYXJjaAorCisjCisjIHN0YWdlLWFyY2ggPGFyY2g+CisjCisjIFN0YWdlIChpbnN0YWxsKSB0aGUgT3BlblRocmVhZCBmaW5hbCBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gc3RhZ2UuCisjCitkZWZpbmUgc3RhZ2UtYXJjaAorJChFQ0hPKSAiICBTVEFHRSAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK0RFU1RESVI9JChBYnNUb3BSZXN1bHREaXIpIFwKK2luc3RhbGwKK2VuZGVmICMgc3RhZ2UtYXJjaAorCisjCisjIEFSQ0hfdGVtcGxhdGUgPGFyY2g+CisjCisjIERlZmluZSBtYWNyb3MsIHRhcmdldHMgYW5kIHJ1bGVzIHRvIGNvbmZpZ3VyZSwgYnVpbGQsIGFuZCBzdGFnZSB0aGUKKyMgT3BlblRocmVhZCBmb3IgYSBzaW5nbGUgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZSBmb3IuCisjCitkZWZpbmUgQVJDSF90ZW1wbGF0ZQorQ09ORklHVVJFX1RBUkdFVFMgKz0gY29uZmlndXJlLSQoMSkKK0JVSUxEX1RBUkdFVFMgICAgICs9IGRvLWJ1aWxkLSQoMSkKK1NUQUdFX1RBUkdFVFMgICAgICs9IHN0YWdlLSQoMSkKK0JVSUxEX0RJUlMgICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorRElSRUNUT1JJRVMgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ1BQRkxBR1M9JCgkKDEpX3RhcmdldF9DUFBGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ0ZMQUdTPSQoJCgxKV90YXJnZXRfQ0ZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DWFhGTEFHUz0kKCQoMSlfdGFyZ2V0X0NYWEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9MREZMQUdTPSQoJCgxKV90YXJnZXRfTERGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ0NBU0ZMQUdTPSQoJCgxKV90YXJnZXRfQ0NBU0ZMQUdTKQorCitjb25maWd1cmUtJCgxKTogJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXMKKworJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXM6IHwgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisJJCQoY2FsbCBjb25maWd1cmUtYXJjaCwkKDEpKQorCitkby1idWlsZC0kKDEpOiBjb25maWd1cmUtJCgxKQorCitkby1idWlsZC0kKDEpOgorCSskJChjYWxsIGJ1aWxkLWFyY2gsJCgxKSkKKworc3RhZ2UtJCgxKTogZG8tYnVpbGQtJCgxKQorCitzdGFnZS0kKDEpOiB8ICQoVG9wUmVzdWx0RGlyKQorCSQkKGNhbGwgc3RhZ2UtYXJjaCwkKDEpKQorCiskKDEpOiBzdGFnZS0kKDEpCitlbmRlZiAjIEFSQ0hfdGVtcGxhdGUKKworLkRFRkFVTFRfR09BTCA6PSBhbGwKKworYWxsOiBzdGFnZQorCisjCisjIENvcnRleC1tNAorIworCitjb3J0ZXgtbTRfdGFyZ2V0X0FCSSAgICAgICAgICAgICAgICAgID0gY29ydGV4LW00Citjb3J0ZXgtbTRfdGFyZ2V0X0NQUEZMQUdTICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW00IC1tZmxvYXQtYWJpPWhhcmQgLW1mcHU9ZnB2NC1zcC1kMTYgLW10aHVtYiAtbWFiaT1hYXBjcworY29ydGV4LW00X3RhcmdldF9DRkxBR1MgICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tNCAtbWZsb2F0LWFiaT1oYXJkIC1tZnB1PWZwdjQtc3AtZDE2IC1tdGh1bWIgLW1hYmk9YWFwY3MKK2NvcnRleC1tNF90YXJnZXRfQ1hYRkxBR1MgICAgICAgICAgICAgPSAtbWNwdT1jb3J0ZXgtbTQgLW1mbG9hdC1hYmk9aGFyZCAtbWZwdT1mcHY0LXNwLWQxNiAtbXRodW1iIC1tYWJpPWFhcGNzCitjb3J0ZXgtbTRfdGFyZ2V0X0xERkxBR1MgICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW00IC1tZmxvYXQtYWJpPWhhcmQgLW1mcHU9ZnB2NC1zcC1kMTYgLW10aHVtYiAtbWFiaT1hYXBjcworCisjIEluc3RhbnRpYXRlIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBidWlsZCB0ZW1wbGF0ZSBmb3IgZWFjaCB0YXJnZXQKKyMgYXJjaGl0ZWN0dXJlLgorCiskKGZvcmVhY2ggYXJjaCwkKEFSQ0hTKSwkKGV2YWwgJChjYWxsIEFSQ0hfdGVtcGxhdGUsJChhcmNoKSkpKQorCisjCisjIENvbW1vbiAvIEZpbmFsaXphdGlvbgorIworCitjb25maWd1cmU6ICQoQ09ORklHVVJFX1RBUkdFVFMpCisKK2J1aWxkOiAkKEJVSUxEX1RBUkdFVFMpCisKK3N0YWdlOiAkKFNUQUdFX1RBUkdFVFMpCisKK0RJUkVDVE9SSUVTICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKFRvcFJlc3VsdERpcikvJChUYXJnZXRUdXBsZSkvbGliICQoQlVJTERfRElSUykKKworQ0xFQU5fRElSUyAgICAgID0gJChUb3BSZXN1bHREaXIpICQoQlVJTERfRElSUykKKworYWxsOiBzdGFnZQorCiskKERJUkVDVE9SSUVTKToKKwkkKEVDSE8pICIgIE1LRElSICAgICRAIgorCUAkKE1LRElSX1ApICIkQCIKKworY2xlYW46CisJJChFQ0hPKSAiICBDTEVBTiIKKwlAJChSTV9GKSAtciAkKENMRUFOX0RJUlMpCisKK2hlbHA6CisJJChFQ0hPKSAiU2ltcGx5IHR5cGUgJ21ha2UgLWYgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSknIHRvIGJ1aWxkIE9wZW5UaHJlYWQgZm9yIHRoZSBmb2xsb3dpbmcgIgorCSQoRUNITykgImFyY2hpdGVjdHVyZXM6ICIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiICAgICQoQVJDSFMpIgorCSQoRUNITykgIiIKKwkkKEVDSE8pICJUbyBidWlsZCBvbmx5IGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUsIHNwZWNpZnk6ICIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiICAgIG1ha2UgLWYgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkgPGFyY2hpdGVjdHVyZT4iCisJJChFQ0hPKSAiIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUtcG9zaXggYi9leGFtcGxlcy9NYWtlZmlsZS1wb3NpeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM3YjMzCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUtcG9zaXgKQEAgLTAsMCArMSwzMDAgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworIyBEb24ndCBhbGxvdyB0aGlzIHRvcC1sZXZlbCBtYWtlZmlsZSdzIHRhcmdldHMgdG8gYmUgYnVpbHQgaW4gcGFyYWxsZWwuCisKKy5OT1RQQVJBTExFTDoKKworQ09WRVJBR0UgICAgICAgICAgICAgICAgICAgICAgID89IDAKK0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICA/PSAwCisKK0VDSE8gICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBAZWNobworTUFLRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1ha2UKK01LRElSX1AgICAgICAgICAgICAgICAgICAgICAgICA6PSBta2RpciAtcAorTE5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IGxuIC1zCitSTV9GICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gcm0gLWYKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK1RvcFNvdXJjZURpciAgICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHNoZWxsIHJlYWRsaW5rICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorQWJzVG9wU291cmNlRGlyICAgICAgICAgICAgICAgIDo9ICQoZGlyICQocmVhbHBhdGggJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS4uCisKK0NPTkZJR19GSUxFICAgICAgPSBPUEVOVEhSRUFEX1BST0pFQ1RfQ09SRV9DT05GSUdfRklMRT0nXCJvcGVudGhyZWFkLWNvcmUtcG9zaXgtY29uZmlnLmhcIicKK0NPTkZJR19GSUxFX1BBVEggPSAkKEFic1RvcFNvdXJjZURpcikvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4LworCitDT01NT05DRkxBR1MgICAgICAgICAgICAgICAgICAgOj0gXAorICAgIC1PMSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUQkKENPTkZJR19GSUxFKSAgICAgICAgICAgICAgXAorICAgIC1JJChDT05GSUdfRklMRV9QQVRIKSAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworSU5TVEFMTCAgICAgICAgICAgICAgICAgICAgICAgICA6PSAvdXNyL2Jpbi9pbnN0YWxsCitJTlNUQUxMRkxBR1MgICAgICAgICAgICAgICAgICAgIDo9IC1wCisKK1RvcFNvdXJjZURpciAgICAgICAgICAgICAgICAgICAgOj0gJChkaXIgJChzaGVsbCByZWFkbGluayAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpLi4KK0Fic1RvcFNvdXJjZURpciAgICAgICAgICAgICAgICAgOj0gJChkaXIgJChyZWFscGF0aCAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpLi4KKworQnVpbGRQYXRoICAgICAgICAgICAgICAgICAgICAgICA9IGJ1aWxkCitUb3BCdWlsZERpciAgICAgICAgICAgICAgICAgICAgID0gJChCdWlsZFBhdGgpCitBYnNUb3BCdWlsZERpciAgICAgICAgICAgICAgICAgID0gJChQV0QpLyQoVG9wQnVpbGREaXIpCisKK1Jlc3VsdFBhdGggICAgICAgICAgICAgICAgICAgICAgPSBvdXRwdXQKK1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgICAgPSAkKFJlc3VsdFBhdGgpCitBYnNUb3BSZXN1bHREaXIgICAgICAgICAgICAgICAgID0gJChQV0QpLyQoVG9wUmVzdWx0RGlyKQorCitUYXJnZXRUdXBsZSAgICAgICAgICAgICAgICAgICAgID0gJChzaGVsbCAke0Fic1RvcFNvdXJjZURpcn0vdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9jb25maWcuZ3Vlc3MgfCBzZWQgLWUgJ3MvW1s6ZGlnaXQ6XS5dKiQkLy9nJykKKworIyBJZiB0aGUgdXNlciBoYXMgYXNzZXJ0ZWQgQ09WRVJBR0UsIGFsdGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyMgYWNjb3JkaW5nbHkuCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgICAgID0gXAorICAgIC0tZW5hYmxlLWNsaS1hcHA9YWxsICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtbmNwLWFwcD1hbGwgICAgICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWRpYWcgICAgICAgICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtcmF3LWxpbmstYXBpPXllcyAgICAgICAgIFwKKyAgICAtLXdpdGgtZXhhbXBsZXM9cG9zaXggICAgICAgICAgICAgXAorICAgIC0td2l0aC1wbGF0Zm9ybS1pbmZvPVBPU0lYICAgICAgICBcCisgICAgLS1lbmFibGUtYXBwbGljYXRpb24tY29hcCAgICAgICAgIFwKKyAgICAtLWVuYWJsZS10bWYtcHJveHkgICAgICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWNlcnQtbG9nICAgICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtY29tbWlzc2lvbmVyICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1kaGNwNi1jbGllbnQgICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWRoY3A2LXNlcnZlciAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtZG5zLWNsaWVudCAgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1qYW0tZGV0ZWN0aW9uICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWpvaW5lciAgICAgICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtbGVnYWN5ICAgICAgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1tYWMtd2hpdGVsaXN0ICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW10ZC1uZXR3b3JrLWRpYWdub3N0aWMgICBcCisgICAgLS1lbmFibGUtYm9yZGVyLXJvdXRlciAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmbmRlZiBCdWlsZEpvYnMKK0J1aWxkSm9icyA6PSAkKHNoZWxsIGdldGNvbmYgX05QUk9DRVNTT1JTX09OTE4pCitlbmRpZgorSk9CU0ZMQUcgOj0gLWokKEJ1aWxkSm9icykKKworIworIyBjb25maWd1cmUtYXJjaCA8dGFyZ2V0PgorIworIyBDb25maWd1cmUgT3BlblRocmVhZCBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQuCisjCisjICAgdGFyZ2V0IC0gVGhlIHRhcmdldCB0byBjb25maWd1cmUuCisjCitkZWZpbmUgY29uZmlndXJlLXRhcmdldAorJChFQ0hPKSAiICBDT05GSUcgICAkKDEpLi4uIgorKGNkICQoQnVpbGRQYXRoKS8kKDEpICYmICQoQWJzVG9wU291cmNlRGlyKS9jb25maWd1cmUgXAorSU5TVEFMTD0iJChJTlNUQUxMKSAkKElOU1RBTExGTEFHUykiIFwKK0NQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIENYWEZMQUdTPSIkKENYWEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgXAorLS1wcmVmaXg9LyBcCistLWV4ZWMtcHJlZml4PS8kKDEpIFwKKyQoY29uZmlndXJlX09QVElPTlMpKQorZW5kZWYgIyBjb25maWd1cmUtdGFyZ2V0CisKKyMKKyMgYnVpbGQtdGFyZ2V0IDx0YXJnZXQ+CisjCisjIEJ1aWxkIHRoZSBPcGVuVGhyZWFkIGludGVybWVkaWF0ZSBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyB0YXJnZXQuCisjCisjICAgdGFyZ2V0IC0gVGhlIHRhcmdldCB0byBidWlsZC4KKyMKK2RlZmluZSBidWlsZC10YXJnZXQKKyQoRUNITykgIiAgQlVJTEQgICAgJCgxKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoMSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorYWxsCitlbmRlZiAjIGJ1aWxkLXRhcmdldAorCisjCisjIGNoZWNrLXRhcmdldCA8dGFyZ2V0PgorIworIyBDaGVjayAocnVuIHVuaXQgdGVzdHMpIE9wZW5UaHJlYWQgZm9yIHRoZSBzcGVjaWZpZWQgdGFyZ2V0LgorIworIyAgIHRhcmdldCAtIFRoZSB0YXJnZXQgdG8gY2hlY2suCisjCitkZWZpbmUgY2hlY2stdGFyZ2V0CiskKEVDSE8pICIgIENIRUNLICAgICQoMSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKDEpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK2NoZWNrCitlbmRlZiAjIGNoZWNrLXRhcmdldAorCisjCisjIGRpc3RjaGVjay10YXJnZXQgPHRhcmdldD4KKyMKKyMgQ2hlY2sgKHJ1biB1bml0IHRlc3RzKSBPcGVuVGhyZWFkIGZvciB0aGUgc3BlY2lmaWVkIHRhcmdldC4KKyMKKyMgICB0YXJnZXQgLSBUaGUgdGFyZ2V0IHRvIGRpc3RjaGVjay4KKyMKK2RlZmluZSBkaXN0Y2hlY2stdGFyZ2V0CiskKEVDSE8pICIgIERJU1RDSEVDSyAgICAkKDEpIgorJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkUGF0aCkvJCgxKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCitkaXN0Y2hlY2sKK2VuZGVmICMgZGlzdGNoZWNrLXRhcmdldAorCisjCisjIGNvdmVyYWdlLXRhcmdldCA8dGFyZ2V0PgorIworIyBHZW5lcmF0ZSBjb2RlIGNvdmVyYWdlIGZyb20gdW5pdCB0ZXN0cyBmb3IgT3BlblRocmVhZCBmb3IgdGhlCisjIHNwZWNpZmllZCB0YXJnZXQuCisjCisjICAgdGFyZ2V0IC0gVGhlIHRhcmdldCB0byBnZW5lcmF0ZSBjb2RlIGNvdmVyYWdlIGZvci4KKyMKK2RlZmluZSBjb3ZlcmFnZS10YXJnZXQKKyQoRUNITykgIiAgQ09WRVJBR0UgJCgxKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoMSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorY292ZXJhZ2UKK2VuZGVmICMgY292ZXJhZ2UtdGFyZ2V0CisKKyMKKyMgc3RhZ2UtdGFyZ2V0IDx0YXJnZXQ+CisjCisjIFN0YWdlIChpbnN0YWxsKSB0aGUgT3BlblRocmVhZCBmaW5hbCBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyB0YXJnZXQuCisjCisjICAgdGFyZ2V0IC0gVGhlIHRhcmdldCB0byBzdGFnZS4KKyMKK2RlZmluZSBzdGFnZS10YXJnZXQKKyQoRUNITykgIiAgU1RBR0UgICAgJCgxKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoMSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorREVTVERJUj0kKEFic1RvcFJlc3VsdERpcikgXAoraW5zdGFsbAorZW5kZWYgIyBzdGFnZS10YXJnZXQKKworIworIyBUQVJHRVRfdGVtcGxhdGUgPHRhcmdldD4KKyMKKyMgRGVmaW5lIG1hY3JvcywgdGFyZ2V0cyBhbmQgcnVsZXMgdG8gY29uZmlndXJlLCBidWlsZCwgYW5kIHN0YWdlCisjIE9wZW5UaHJlYWQgZm9yIGEgc2luZ2xlIHRhcmdldC4KKyMKKyMgICB0YXJnZXQgLSBUaGUgdGFyZ2V0IHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZSBmb3IuCisjCitkZWZpbmUgVEFSR0VUX3RlbXBsYXRlCitDT05GSUdVUkVfVEFSR0VUUyArPSBjb25maWd1cmUtJCgxKQorQlVJTERfVEFSR0VUUyAgICAgKz0gZG8tYnVpbGQtJCgxKQorQ0hFQ0tfVEFSR0VUUyAgICAgKz0gY2hlY2stJCgxKQorRElTVENIRUNLX1RBUkdFVFMgKz0gZGlzdGNoZWNrLSQoMSkKK0NPVkVSQUdFX1RBUkdFVFMgICs9IGNvdmVyYWdlLSQoMSkKK1NUQUdFX1RBUkdFVFMgICAgICs9IHN0YWdlLSQoMSkKK0JVSUxEX0RJUlMgICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKDEpCitESVJFQ1RPUklFUyAgICAgICArPSAkKEJ1aWxkUGF0aCkvJCgxKQorCitjb25maWd1cmUtJCgxKTogJChCdWlsZFBhdGgpLyQoMSkvY29uZmlnLnN0YXR1cworCiskKEJ1aWxkUGF0aCkvJCgxKS9jb25maWcuc3RhdHVzOiB8ICQoQnVpbGRQYXRoKS8kKDEpCisJJCQoY2FsbCBjb25maWd1cmUtdGFyZ2V0LCQoMSkpCisKK2RvLWJ1aWxkLSQoMSk6IGNvbmZpZ3VyZS0kKDEpCisKK2RvLWJ1aWxkLSQoMSk6CisJKyQkKGNhbGwgYnVpbGQtdGFyZ2V0LCQoMSkpCisKK2NoZWNrLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworY2hlY2stJCgxKToKKwkrJCQoY2FsbCBjaGVjay10YXJnZXQsJCgxKSkKKworZGlzdGNoZWNrLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworZGlzdGNoZWNrLSQoMSk6CisJKyQkKGNhbGwgZGlzdGNoZWNrLXRhcmdldCwkKDEpKQorCitjb3ZlcmFnZS0kKDEpOiBkby1idWlsZC0kKDEpCisKK2NvdmVyYWdlLSQoMSk6CisJKyQkKGNhbGwgY292ZXJhZ2UtdGFyZ2V0LCQoMSkpCisKK3N0YWdlLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworc3RhZ2UtJCgxKTogfCAkKFRvcFJlc3VsdERpcikKKwkkJChjYWxsIHN0YWdlLXRhcmdldCwkKDEpKQorCiskKDEpOiBzdGFnZS0kKDEpCitlbmRlZiAjIFRBUkdFVF90ZW1wbGF0ZQorCisuREVGQVVMVF9HT0FMIDo9IGFsbAorCithbGw6IHN0YWdlCisKKyMgSW5zdGFudGlhdGUgYW4gdGFyZ2V0LXNwZWNpZmljIGJ1aWxkIHRlbXBsYXRlIGZvciB0aGUgdGFyZ2V0LgorCiskKGV2YWwgJChjYWxsIFRBUkdFVF90ZW1wbGF0ZSwkKFRhcmdldFR1cGxlKSkpCisKKyMKKyMgQ29tbW9uIC8gRmluYWxpemF0aW9uCisjCisKK2NvbmZpZ3VyZTogJChDT05GSUdVUkVfVEFSR0VUUykKKworYnVpbGQ6ICQoQlVJTERfVEFSR0VUUykKKworY2hlY2s6ICQoQ0hFQ0tfVEFSR0VUUykKKworZGlzdGNoZWNrOiAkKERJU1RDSEVDS19UQVJHRVRTKQorCitjb3ZlcmFnZTogJChDT1ZFUkFHRV9UQVJHRVRTKQorCitzdGFnZTogJChTVEFHRV9UQVJHRVRTKQorCitESVJFQ1RPUklFUyAgICAgPSAkKFRvcFJlc3VsdERpcikgJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYiAkKEJVSUxEX0RJUlMpCisKK0NMRUFOX0RJUlMgICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKEJVSUxEX0RJUlMpCisKK2FsbDogc3RhZ2UKKworJChESVJFQ1RPUklFUyk6CisJJChFQ0hPKSAiICBNS0RJUiAgICAkQCIKKwlAJChNS0RJUl9QKSAiJEAiCisKK2NsZWFuOgorCSQoRUNITykgIiAgQ0xFQU4iCisJQCQoUk1fRikgLXIgJChDTEVBTl9ESVJTKQorCitoZWxwOgorCSQoRUNITykgIlNpbXBseSB0eXBlICdtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpJyB0byBidWlsZCBPcGVuVGhyZWFkIGZvciB0aGUgZm9sbG93aW5nICIKKwkkKEVDSE8pICJ0YXJnZXQ6IgorCSQoRUNITykgIiIKKwkkKEVDSE8pICIgICAgJChUYXJnZXRUdXBsZSkiCisJJChFQ0hPKSAiIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGIxMDUxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2MSBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCisjIEFsd2F5cyBwYWNrYWdlIChlLmcuIGZvciAnbWFrZSBkaXN0JykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK0RJU1RfU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBwbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhcHBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBkcml2ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKKyMgQWx3YXlzIGJ1aWxkIChlLmcuIGZvciAnbWFrZSBhbGwnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHBsYXRmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKyAgICAKK2lmIE9QRU5USFJFQURfRVhBTVBMRVMKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICBhcHBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorCisjIEFsd2F5cyBwcmV0dHkgKGUuZy4gZm9yICdtYWtlIHByZXR0eScpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitQUkVUVFlfU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgcGxhdGZvcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXBwcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9hcHBzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzQ1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNTggQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworIyBBbHdheXMgcGFja2FnZSAoZS5nLiBmb3IgJ21ha2UgZGlzdCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitESVNUX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY2xpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmNwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIEFsd2F5cyBidWlsZCAoZS5nLiBmb3IgJ21ha2UgYWxsJykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0NMSQorU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gY2xpCitlbmRpZgorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9OQ1AKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IG5jcAorZW5kaWYKKworIyBBbHdheXMgcHJldHR5IChlLmcuIGZvciAnbWFrZSBwcmV0dHknKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworUFJFVFRZX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGNsaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5jcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL2NsaS9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL2FwcHMvY2xpL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzI2YTAKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL2NsaS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE5OCBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitiaW5fUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworQ1BQRkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitMREZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworU09VUkNFU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBtYWluLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9CVUlMVElOX01CRURUTFMKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvbGlibWJlZGNyeXB0by5hICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmICMgT1BFTlRIUkVBRF9FTkFCTEVfQlVJTFRJTl9NQkVEVExTCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3NyYy9kaWFnL2xpYm9wZW50aHJlYWQtZGlhZy5hICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmICMgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvbGlib3BlbnRocmVhZC1wb3NpeC5hICAgICAgIFwKKyAgICAtbHN0ZGMrKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNTM4CitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2xpYm9wZW50aHJlYWQtY2MyNTM4LmEgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLVQgJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC5sZCAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmICMgT1BFTlRIUkVBRF9FWEFNUExFU19DQzI1MzgKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19DQzI2NTAKK0NQUEZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICBcCisgICAgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvbGlib3BlbnRocmVhZC1jYzI2NTAuYSAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9nY2MvZHJpdmVybGliLmEgXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICAgXAorICAgIC1UICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9saW5rZXJfZmlsZXMvY2MyNngwZjEyOC5sZHMgXAorICAgICQoTlVMTCkKKworZW5kaWYgI09QRU5USFJFQURfRVhBTVBMRVNfQ0MyNjUwCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfREExNTAwMAorTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvbGlib3BlbnRocmVhZC1kYTE1MDAwLmEgICBcCisgICAgJChOVUxMKQorCitMREZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIC1UICQodG9wX3NyY2RpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvZGExNTAwMC5sZCAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRVhBTVBMRVNfREExNTAwMAorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyCisgICAgTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvbGlib3BlbnRocmVhZC1lZnIzMi5hICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9yYWRpby9yYWlsX2xpYi9hdXRvZ2VuL2xpYnJhaWxfcmVsZWFzZS9saWJyYWlsX2VmcjMyeGcxMl9nY2NfcmVsZWFzZS5hIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLVQgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vRGV2aWNlL1NpbGljb25MYWJzL0VGUjMyTUcxMlAvU291cmNlL0dDQy9lZnIzMm1nMTJwLmxkIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRVhBTVBMRVNfRUZSMzIKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19FTVNLCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9saWJvcGVudGhyZWFkLWVtc2suYSAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLVQgJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9lbXNrLmxkICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmICMgT1BFTlRIUkVBRF9FWEFNUExFU19FTVNLCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfTlJGNTI4NDAKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9saWJvcGVudGhyZWFkLW5yZjUyODQwLmEgXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAtVCAkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9ucmY1Mjg0MC5sZCAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19LVzQxWgorTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2xpYm9wZW50aHJlYWQta3c0MXouYSAgICAgICBcCisgICAgJChOVUxMKQorCitMREZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIC1UICQodG9wX3NyY2RpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L01LVzQxWjUxMnh4eDQubGQgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRVhBTVBMRVNfS1c0MVoKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0xJX0ZURAorYmluX1BST0dSQU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICBvdC1jbGktZnRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworb3RfY2xpX2Z0ZF9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKENQUEZMQUdTX0NPTU1PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitvdF9jbGlfZnRkX0xEQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQodG9wX2J1aWxkZGlyKS9zcmMvY2xpL2xpYm9wZW50aHJlYWQtY2xpLWZ0ZC5hICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9idWlsZGRpcikvc3JjL2NvcmUvbGlib3BlbnRocmVhZC1mdGQuYSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChMREFERF9DT01NT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworb3RfY2xpX2Z0ZF9MREZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKExERkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitvdF9jbGlfZnRkX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoU09VUkNFU19DT01NT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0NMSV9NVEQKK2Jpbl9QUk9HUkFNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgb3QtY2xpLW10ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmCisKK290X2NsaV9tdGRfQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChDUFBGTEFHU19DT01NT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworb3RfY2xpX210ZF9MREFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvc3JjL2NsaS9saWJvcGVudGhyZWFkLWNsaS1tdGQuYSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3NyYy9jb3JlL2xpYm9wZW50aHJlYWQtbXRkLmEgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTERBRERfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK290X2NsaV9tdGRfTERGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChMREZMQUdTX0NPTU1PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworb3RfY2xpX210ZF9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFNPVVJDRVNfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCitDTEVBTkZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJCh3aWxkY2FyZCAqLmdjZGEgKi5nY25vKQorZW5kaWYgIyBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy9jbGkvUkVBRE1FLm1kIGIvZXhhbXBsZXMvYXBwcy9jbGkvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDE5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL2NsaS9SRUFETUUubWQKQEAgLTAsMCArMSwxMTIgQEAKKyMgT3BlblRocmVhZCBDTEkgRXhhbXBsZQorCitUaGlzIGV4YW1wbGUgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGEgbWluaW1hbCBPcGVuVGhyZWFkIGFwcGxpY2F0aW9uCit0aGF0IGV4cG9zZXMgdGhlIE9wZW5UaHJlYWQgY29uZmlndXJhdGlvbiBhbmQgbWFuYWdlbWVudCBpbnRlcmZhY2VzCit2aWEgYSBiYXNpYyBjb21tYW5kLWxpbmUgaW50ZXJmYWNlLiBUaGUgc3RlcHMgYmVsb3cgdGFrZSB5b3UgdGhyb3VnaAordGhlIG1pbmltYWwgc3RlcHMgcmVxdWlyZWQgdG8gcGluZyBvbmUgZW11bGF0ZWQgVGhyZWFkIGRldmljZSBmcm9tCithbm90aGVyIGVtdWxhdGVkIFRocmVhZCBkZXZpY2UuCisKKyMjIDEuIEJ1aWxkCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4KKyQgLi9ib290c3RyYXAKKyQgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1wb3NpeAorYGBgCisKKyMjIDIuIFN0YXJ0IG5vZGUgMQorCitTcGF3biB0aGUgcHJvY2VzczoKKworYGBgYmFzaAorJCBjZCA8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQvPHBsYXRmb3JtPi9iaW4KKyQgLi9vdC1jbGktZnRkIDEKK2BgYAorCitTZXQgdGhlIFBBTiBJRDoKKworYGBgYmFzaAorPiBwYW5pZCAweDEyMzQKK2BgYAorCitCcmluZyB1cCB0aGUgSVB2NiBpbnRlcmZhY2U6CisKK2BgYGJhc2gKKz4gaWZjb25maWcgdXAKK0RvbmUKK2BgYAorCitTdGFydCBUaHJlYWQgcHJvdG9jb2wgb3BlcmF0aW9uOgorCitgYGBiYXNoCis+IHRocmVhZCBzdGFydAorRG9uZQorYGBgCisKK1dhaXQgYSBmZXcgc2Vjb25kcyBhbmQgdmVyaWZ5IHRoYXQgdGhlIGRldmljZSBoYXMgYmVjb21lIGEgVGhyZWFkIExlYWRlcjoKKworYGBgYmFzaAorPiBzdGF0ZQorbGVhZGVyCitEb25lCitgYGAKKworVmlldyBJUHY2IGFkZHJlc3NlcyBhc3NpZ25lZCB0byBOb2RlIDEncyBUaHJlYWQgaW50ZXJmYWNlOgorCitgYGBiYXNoCis+IGlwYWRkcgorZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6MAorZmRkZTphZDAwOmJlZWY6MDo1NTg6ZjU2YjpkNjg4Ojc5OQorZmU4MDowOjA6MDpmM2Q5OjJhODI6YzhkODpmZTQzCitEb25lCitgYGAKKworIyMgMi4gU3RhcnQgbm9kZSAyCisKK1NwYXduIHRoZSBwcm9jZXNzOgorCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+L291dHB1dC88cGxhdGZvcm0+L2JpbgorJCAuL290LWNsaS1mdGQgMgorYGBgCisKK1NldCB0aGUgUEFOIElEOgorCitgYGBiYXNoCis+IHBhbmlkIDB4MTIzNAorYGBgCisKK0JyaW5nIHVwIHRoZSBJUHY2IGludGVyZmFjZToKKworYGBgYmFzaAorPiBpZmNvbmZpZyB1cAorRG9uZQorYGBgCisKK1N0YXJ0IFRocmVhZCBwcm90b2NvbCBvcGVyYXRpb246CisKK2BgYGJhc2gKKz4gdGhyZWFkIHN0YXJ0CitEb25lCitgYGAKKworV2FpdCBhIGZldyBzZWNvbmRzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIGhhcyBiZWNvbWUgYSBUaHJlYWQgUm91dGVyOgorCitgYGBiYXNoCis+IHN0YXRlCityb3V0ZXIKK0RvbmUKK2BgYAorCisjIyAzLiBQaW5nIE5vZGUgMSBmcm9tIE5vZGUgMgorCitgYGBiYXNoCis+IHBpbmcgZmRkZTphZDAwOmJlZWY6MDo1NTg6ZjU2YjpkNjg4Ojc5OQorMTYgYnl0ZXMgZnJvbSBmZGRlOmFkMDA6YmVlZjowOjU1ODpmNTZiOmQ2ODg6Nzk5OiBpY21wX3NlcT0xIGhsaW09NjQKK2BgYAorCisjIyA0LiBXYW50IG1vcmU/CisKK1lvdSBtYXkgbm90ZSB0aGF0IHRoZSBleGFtcGxlIGFib3ZlIGRpZCBub3QgaW5jbHVkZSBhbnkgbmV0d29yayBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbiwgc3VjaCBhcyB0aGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQgb3IgdGhlIFRocmVhZCBNYXN0ZXIgS2V5LiBPcGVuVGhyZWFkIGN1cnJlbnRseSBpbXBsZW1lbnRzIGRlZmF1bHQgdmFsdWVzIGZvciBuZXR3b3JrIHBhcmFtZXRlcnMsIGhvd2V2ZXIsIHlvdSBtYXkgdXNlIHRoZSBDTEkgdG8gY2hhbmdlIG5ldHdvcmsgcGFyYW1ldGVycywgb3RoZXIgY29uZmlndXJhdGlvbnMsIGFuZCBwZXJmb3JtIG90aGVyIG9wZXJhdGlvbnMuCisKK1NlZSB0aGUgW09wZW5UaHJlYWQgQ0xJIFJlZmVyZW5jZSBSRUFETUUubWRdKC4uLy4uLy4uL3NyYy9jbGkvUkVBRE1FLm1kKSB0byBleHBsb3JlIG1vcmUuCmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL2NsaS9tYWluLmMgYi9leGFtcGxlcy9hcHBzL2NsaS9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkNDg5MwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvY2xpL21haW4uYwpAQCAtMCwwICsxLDk5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jbGkuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RpYWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3BsYXRmb3JtLmg+CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKK3ZvaWQgKm90UGxhdENBbGxvYyhzaXplX3QgYU51bSwgc2l6ZV90IGFTaXplKQoreworICAgIHJldHVybiBjYWxsb2MoYU51bSwgYVNpemUpOworfQorCit2b2lkIG90UGxhdEZyZWUodm9pZCAqYVB0cikKK3sKKyAgICBmcmVlKGFQdHIpOworfQorI2VuZGlmCisKK3ZvaWQgb3RUYXNrbGV0c1NpZ25hbFBlbmRpbmcob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEluc3RhbmNlICpzSW5zdGFuY2U7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBzaXplX3Qgb3RJbnN0YW5jZUJ1ZmZlckxlbmd0aCA9IDA7CisgICAgdWludDhfdCAqb3RJbnN0YW5jZUJ1ZmZlciA9IE5VTEw7CisjZW5kaWYKKworICAgIFBsYXRmb3JtSW5pdChhcmdjLCBhcmd2KTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIC8vIENhbGwgdG8gcXVlcnkgdGhlIGJ1ZmZlciBzaXplCisgICAgKHZvaWQpb3RJbnN0YW5jZUluaXQoTlVMTCwgJm90SW5zdGFuY2VCdWZmZXJMZW5ndGgpOworCisgICAgLy8gQ2FsbCB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyCisgICAgb3RJbnN0YW5jZUJ1ZmZlciA9ICh1aW50OF90ICopbWFsbG9jKG90SW5zdGFuY2VCdWZmZXJMZW5ndGgpOworICAgIGFzc2VydChvdEluc3RhbmNlQnVmZmVyKTsKKworICAgIC8vIEluaXRpYWxpemUgT3BlblRocmVhZCB3aXRoIHRoZSBidWZmZXIKKyAgICBzSW5zdGFuY2UgPSBvdEluc3RhbmNlSW5pdChvdEluc3RhbmNlQnVmZmVyLCAmb3RJbnN0YW5jZUJ1ZmZlckxlbmd0aCk7CisjZWxzZQorICAgIHNJbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0U2luZ2xlKCk7CisjZW5kaWYKKyAgICBhc3NlcnQoc0luc3RhbmNlKTsKKworICAgIG90Q2xpVWFydEluaXQoc0luc3RhbmNlKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKyAgICBvdERpYWdJbml0KHNJbnN0YW5jZSk7CisjZW5kaWYKKworICAgIHdoaWxlICgxKQorICAgIHsKKyAgICAgICAgb3RUYXNrbGV0c1Byb2Nlc3Moc0luc3RhbmNlKTsKKyAgICAgICAgUGxhdGZvcm1Qcm9jZXNzRHJpdmVycyhzSW5zdGFuY2UpOworICAgIH0KKworICAgIC8vIG90SW5zdGFuY2VGaW5hbGl6ZShzSW5zdGFuY2UpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIC8vIGZyZWUob3RJbnN0YW5jZUJ1ZmZlcik7CisjZW5kaWYKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy9uY3AvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9hcHBzL25jcC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmZlMzkyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy9uY3AvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxOTggQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworYmluX1BST0dSQU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK0NQUEZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMvY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvZXhhbXBsZXMvcGxhdGZvcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK1NPVVJDRVNfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgbWFpbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfQlVJTFRJTl9NQkVEVExTCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS90aGlyZF9wYXJ0eS9tYmVkdGxzL2xpYm1iZWRjcnlwdG8uYSAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRU5BQkxFX0JVSUxUSU5fTUJFRFRMUworCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9zcmMvZGlhZy9saWJvcGVudGhyZWFkLWRpYWcuYSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvbGlib3BlbnRocmVhZC1wb3NpeC5hICAgICAgIFwKKyAgICAtbHN0ZGMrKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNTM4CitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2xpYm9wZW50aHJlYWQtY2MyNTM4LmEgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLVQgJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC5sZCAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmICMgT1BFTlRIUkVBRF9FWEFNUExFU19DQzI1MzgKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19DQzI2NTAKK0NQUEZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICBcCisgICAgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvbGlib3BlbnRocmVhZC1jYzI2NTAuYSAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9nY2MvZHJpdmVybGliLmEgXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICAgXAorICAgIC1UICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9saW5rZXJfZmlsZXMvY2MyNngwZjEyOC5sZHMgXAorICAgICQoTlVMTCkKKworZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX0NDMjY1MAorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX0RBMTUwMDAKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2xpYm9wZW50aHJlYWQtZGExNTAwMC5hICAgXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAtVCAkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2RhMTUwMDAubGQgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX0RBMTUwMDAKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19FRlIzMgorTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2xpYm9wZW50aHJlYWQtZWZyMzIuYSAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vcmFkaW8vcmFpbF9saWIvYXV0b2dlbi9saWJyYWlsX3JlbGVhc2UvbGlicmFpbF9lZnIzMnhnMTJfZ2NjX3JlbGVhc2UuYSBcCisgICAgJChOVUxMKQorCitMREZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIC1UICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL0RldmljZS9TaWxpY29uTGFicy9FRlIzMk1HMTJQL1NvdXJjZS9HQ0MvZWZyMzJtZzEycC5sZCBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfRU1TSworTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svbGlib3BlbnRocmVhZC1lbXNrLmEgICAgICAgICBcCisgICAgJChOVUxMKQorCitMREZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIC1UICQodG9wX3NyY2RpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svZW1zay5sZCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRVhBTVBMRVNfRU1TSworCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX05SRjUyODQwCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvbGlib3BlbnRocmVhZC1ucmY1Mjg0MC5hIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLVQgJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvbnJmNTI4NDAubGQgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfS1c0MVoKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9saWJvcGVudGhyZWFkLWt3NDF6LmEgICAgICAgXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAtVCAkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9NS1c0MVo1MTJ4eHg0LmxkICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX0tXNDFaCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX05DUF9GVEQKK2Jpbl9QUk9HUkFNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgb3QtbmNwLWZ0ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmCisKK290X25jcF9mdGRfQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChDUFBGTEFHU19DT01NT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworb3RfbmNwX2Z0ZF9MREFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvc3JjL25jcC9saWJvcGVudGhyZWFkLW5jcC1mdGQuYSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3NyYy9jb3JlL2xpYm9wZW50aHJlYWQtZnRkLmEgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTERBRERfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK290X25jcF9mdGRfTERGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChMREZMQUdTX0NPTU1PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworb3RfbmNwX2Z0ZF9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFNPVVJDRVNfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfTVRECitiaW5fUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIG90LW5jcC1tdGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorCitvdF9uY3BfbXRkX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoQ1BQRkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK290X25jcF9tdGRfTERBREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3NyYy9uY3AvbGlib3BlbnRocmVhZC1uY3AtbXRkLmEgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX2J1aWxkZGlyKS9zcmMvY29yZS9saWJvcGVudGhyZWFkLW10ZC5hICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKExEQUREX0NPTU1PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitvdF9uY3BfbXRkX0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTERGTEFHU19DT01NT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK290X25jcF9tdGRfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChTT1VSQ0VTX0NPTU1PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQod2lsZGNhcmQgKi5nY2RhICouZ2NubykKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvbmNwL21haW4uYyBiL2V4YW1wbGVzL2FwcHMvbmNwL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjUzMjE4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy9uY3AvbWFpbi5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RpYWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL25jcC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcGxhdGZvcm0uaD4KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUwordm9pZCAqb3RQbGF0Q0FsbG9jKHNpemVfdCBhTnVtLCBzaXplX3QgYVNpemUpCit7CisgICAgcmV0dXJuIGNhbGxvYyhhTnVtLCBhU2l6ZSk7Cit9CisKK3ZvaWQgb3RQbGF0RnJlZSh2b2lkICphUHRyKQoreworICAgIGZyZWUoYVB0cik7Cit9CisjZW5kaWYKKwordm9pZCBvdFRhc2tsZXRzU2lnbmFsUGVuZGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90SW5zdGFuY2UgKnNJbnN0YW5jZTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIHNpemVfdCBvdEluc3RhbmNlQnVmZmVyTGVuZ3RoID0gMDsKKyAgICB1aW50OF90ICpvdEluc3RhbmNlQnVmZmVyID0gTlVMTDsKKyNlbmRpZgorCisgICAgUGxhdGZvcm1Jbml0KGFyZ2MsIGFyZ3YpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgLy8gQ2FsbCB0byBxdWVyeSB0aGUgYnVmZmVyIHNpemUKKyAgICAodm9pZClvdEluc3RhbmNlSW5pdChOVUxMLCAmb3RJbnN0YW5jZUJ1ZmZlckxlbmd0aCk7CisKKyAgICAvLyBDYWxsIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIKKyAgICBvdEluc3RhbmNlQnVmZmVyID0gKHVpbnQ4X3QgKiltYWxsb2Mob3RJbnN0YW5jZUJ1ZmZlckxlbmd0aCk7CisgICAgYXNzZXJ0KG90SW5zdGFuY2VCdWZmZXIpOworCisgICAgLy8gSW5pdGlhbGl6ZSBPcGVuVGhyZWFkIHdpdGggdGhlIGJ1ZmZlcgorICAgIHNJbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0KG90SW5zdGFuY2VCdWZmZXIsICZvdEluc3RhbmNlQnVmZmVyTGVuZ3RoKTsKKyNlbHNlCisgICAgc0luc3RhbmNlID0gb3RJbnN0YW5jZUluaXRTaW5nbGUoKTsKKyNlbmRpZgorICAgIGFzc2VydChzSW5zdGFuY2UpOworCisgICAgb3ROY3BJbml0KHNJbnN0YW5jZSk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisgICAgb3REaWFnSW5pdChzSW5zdGFuY2UpOworI2VuZGlmCisKKyAgICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAgIG90VGFza2xldHNQcm9jZXNzKHNJbnN0YW5jZSk7CisgICAgICAgIFBsYXRmb3JtUHJvY2Vzc0RyaXZlcnMoc0luc3RhbmNlKTsKKyAgICB9CisKKyAgICAvLyBvdEluc3RhbmNlRmluYWxpemUoc0luc3RhbmNlKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICAvLyBmcmVlKG90SW5zdGFuY2VCdWZmZXIpOworI2VuZGlmCisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGIwMmM0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0FwcC54YW1sCkBAIC0wLDAgKzEsMzUgQEAKK++7vzwhLS0KKyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+Cis8QXBwbGljYXRpb24KKyAgICB4OkNsYXNzPSJvdC5BcHAiCisgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiIKKyAgICB4bWxuczp4PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbCIKKyAgICB4bWxuczpsb2NhbD0idXNpbmc6b3QiCisgICAgUmVxdWVzdGVkVGhlbWU9IkRhcmsiPgorCis8L0FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0FwcC54YW1sLmNwcCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzM2I1NAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbC5jcHAKQEAgLTAsMCArMSwxNDYgQEAKK++7vy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwY2guaCIKKyNpbmNsdWRlICJNYWluUGFnZS54YW1sLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkFwcGxpY2F0aW9uTW9kZWw7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6QXBwbGljYXRpb25Nb2RlbDo6QWN0aXZhdGlvbjsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM6OlByaW1pdGl2ZXM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkRhdGE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OklucHV0OwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpJbnRlcm9wOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpNZWRpYTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TmF2aWdhdGlvbjsKKworLy8vIDxzdW1tYXJ5PgorLy8vIEluaXRpYWxpemVzIHRoZSBzaW5nbGV0b24gYXBwbGljYXRpb24gb2JqZWN0LiAgVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvZiBhdXRob3JlZCBjb2RlCisvLy8gZXhlY3V0ZWQsIGFuZCBhcyBzdWNoIGlzIHRoZSBsb2dpY2FsIGVxdWl2YWxlbnQgb2YgbWFpbigpIG9yIFdpbk1haW4oKS4KKy8vLyA8L3N1bW1hcnk+CitBcHA6OkFwcCgpCit7CisgICAgSW5pdGlhbGl6ZUNvbXBvbmVudCgpOworICAgIFN1c3BlbmRpbmcgKz0gcmVmIG5ldyBTdXNwZW5kaW5nRXZlbnRIYW5kbGVyKHRoaXMsICZBcHA6Ok9uU3VzcGVuZGluZyk7Cit9CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBJbnZva2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIGxhdW5jaGVkIG5vcm1hbGx5IGJ5IHRoZSBlbmQgdXNlci4gIE90aGVyIGVudHJ5IHBvaW50cworLy8vIHdpbGwgYmUgdXNlZCBzdWNoIGFzIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIGxhdW5jaGVkIHRvIG9wZW4gYSBzcGVjaWZpYyBmaWxlLgorLy8vIDwvc3VtbWFyeT4KKy8vLyA8cGFyYW0gbmFtZT0iZSI+RGV0YWlscyBhYm91dCB0aGUgbGF1bmNoIHJlcXVlc3QgYW5kIHByb2Nlc3MuPC9wYXJhbT4KK3ZvaWQgQXBwOjpPbkxhdW5jaGVkKFdpbmRvd3M6OkFwcGxpY2F0aW9uTW9kZWw6OkFjdGl2YXRpb246OkxhdW5jaEFjdGl2YXRlZEV2ZW50QXJnc14gZSkKK3sKKyNpZiBfREVCVUcKKyAgICAvLyBTaG93IGdyYXBoaWNzIHByb2ZpbGluZyBpbmZvcm1hdGlvbiB3aGlsZSBkZWJ1Z2dpbmcuCisgICAgaWYgKElzRGVidWdnZXJQcmVzZW50KCkpCisgICAgeworICAgICAgICAvLyBEaXNwbGF5IHRoZSBjdXJyZW50IGZyYW1lIHJhdGUgY291bnRlcnMKKyAgICAgICAgIERlYnVnU2V0dGluZ3MtPkVuYWJsZUZyYW1lUmF0ZUNvdW50ZXIgPSB0cnVlOworICAgIH0KKyNlbmRpZgorICAgIGF1dG8gcm9vdEZyYW1lID0gZHluYW1pY19jYXN0PEZyYW1lXj4oV2luZG93OjpDdXJyZW50LT5Db250ZW50KTsKKworICAgIC8vIERvIG5vdCByZXBlYXQgYXBwIGluaXRpYWxpemF0aW9uIHdoZW4gdGhlIFdpbmRvdyBhbHJlYWR5IGhhcyBjb250ZW50LAorICAgIC8vIGp1c3QgZW5zdXJlIHRoYXQgdGhlIHdpbmRvdyBpcyBhY3RpdmUKKyAgICBpZiAocm9vdEZyYW1lID09IG51bGxwdHIpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgYSBGcmFtZSB0byBhY3QgYXMgdGhlIG5hdmlnYXRpb24gY29udGV4dCBhbmQgYXNzb2NpYXRlIGl0IHdpdGgKKyAgICAgICAgLy8gYSBTdXNwZW5zaW9uTWFuYWdlciBrZXkKKyAgICAgICAgcm9vdEZyYW1lID0gcmVmIG5ldyBGcmFtZSgpOworCisgICAgICAgIHJvb3RGcmFtZS0+TmF2aWdhdGlvbkZhaWxlZCArPSByZWYgbmV3IFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uRmFpbGVkRXZlbnRIYW5kbGVyKHRoaXMsICZBcHA6Ok9uTmF2aWdhdGlvbkZhaWxlZCk7CisKKyAgICAgICAgaWYgKGUtPlByZXZpb3VzRXhlY3V0aW9uU3RhdGUgPT0gQXBwbGljYXRpb25FeGVjdXRpb25TdGF0ZTo6VGVybWluYXRlZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVE9ETzogUmVzdG9yZSB0aGUgc2F2ZWQgc2Vzc2lvbiBzdGF0ZSBvbmx5IHdoZW4gYXBwcm9wcmlhdGUsIHNjaGVkdWxpbmcgdGhlCisgICAgICAgICAgICAvLyBmaW5hbCBsYXVuY2ggc3RlcHMgYWZ0ZXIgdGhlIHJlc3RvcmUgaXMgY29tcGxldGUKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlLT5QcmVsYXVuY2hBY3RpdmF0ZWQgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyb290RnJhbWUtPkNvbnRlbnQgPT0gbnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBuYXZpZ2F0aW9uIHN0YWNrIGlzbid0IHJlc3RvcmVkIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlLAorICAgICAgICAgICAgICAgIC8vIGNvbmZpZ3VyaW5nIHRoZSBuZXcgcGFnZSBieSBwYXNzaW5nIHJlcXVpcmVkIGluZm9ybWF0aW9uIGFzIGEgbmF2aWdhdGlvbgorICAgICAgICAgICAgICAgIC8vIHBhcmFtZXRlcgorICAgICAgICAgICAgICAgIHJvb3RGcmFtZS0+TmF2aWdhdGUoVHlwZU5hbWUoTWFpblBhZ2U6OnR5cGVpZCksIGUtPkFyZ3VtZW50cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBQbGFjZSB0aGUgZnJhbWUgaW4gdGhlIGN1cnJlbnQgV2luZG93CisgICAgICAgICAgICBXaW5kb3c6OkN1cnJlbnQtPkNvbnRlbnQgPSByb290RnJhbWU7CisgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGN1cnJlbnQgd2luZG93IGlzIGFjdGl2ZQorICAgICAgICAgICAgV2luZG93OjpDdXJyZW50LT5BY3RpdmF0ZSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChlLT5QcmVsYXVuY2hBY3RpdmF0ZWQgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyb290RnJhbWUtPkNvbnRlbnQgPT0gbnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBuYXZpZ2F0aW9uIHN0YWNrIGlzbid0IHJlc3RvcmVkIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlLAorICAgICAgICAgICAgICAgIC8vIGNvbmZpZ3VyaW5nIHRoZSBuZXcgcGFnZSBieSBwYXNzaW5nIHJlcXVpcmVkIGluZm9ybWF0aW9uIGFzIGEgbmF2aWdhdGlvbgorICAgICAgICAgICAgICAgIC8vIHBhcmFtZXRlcgorICAgICAgICAgICAgICAgIHJvb3RGcmFtZS0+TmF2aWdhdGUoVHlwZU5hbWUoTWFpblBhZ2U6OnR5cGVpZCksIGUtPkFyZ3VtZW50cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGN1cnJlbnQgd2luZG93IGlzIGFjdGl2ZQorICAgICAgICAgICAgV2luZG93OjpDdXJyZW50LT5BY3RpdmF0ZSgpOworICAgICAgICB9CisgICAgfQorfQorCisvLy8gPHN1bW1hcnk+CisvLy8gSW52b2tlZCB3aGVuIGFwcGxpY2F0aW9uIGV4ZWN1dGlvbiBpcyBiZWluZyBzdXNwZW5kZWQuICBBcHBsaWNhdGlvbiBzdGF0ZSBpcyBzYXZlZAorLy8vIHdpdGhvdXQga25vd2luZyB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJlIHRlcm1pbmF0ZWQgb3IgcmVzdW1lZCB3aXRoIHRoZSBjb250ZW50cworLy8vIG9mIG1lbW9yeSBzdGlsbCBpbnRhY3QuCisvLy8gPC9zdW1tYXJ5PgorLy8vIDxwYXJhbSBuYW1lPSJzZW5kZXIiPlRoZSBzb3VyY2Ugb2YgdGhlIHN1c3BlbmQgcmVxdWVzdC48L3BhcmFtPgorLy8vIDxwYXJhbSBuYW1lPSJlIj5EZXRhaWxzIGFib3V0IHRoZSBzdXNwZW5kIHJlcXVlc3QuPC9wYXJhbT4KK3ZvaWQgQXBwOjpPblN1c3BlbmRpbmcoT2JqZWN0XiBzZW5kZXIsIFN1c3BlbmRpbmdFdmVudEFyZ3NeIGUpCit7CisgICAgKHZvaWQpIHNlbmRlcjsgIC8vIFVudXNlZCBwYXJhbWV0ZXIKKyAgICAodm9pZCkgZTsgICAvLyBVbnVzZWQgcGFyYW1ldGVyCisKKyAgICAvL1RPRE86IFNhdmUgYXBwbGljYXRpb24gc3RhdGUgYW5kIHN0b3AgYW55IGJhY2tncm91bmQgYWN0aXZpdHkKK30KKworLy8vIDxzdW1tYXJ5PgorLy8vIEludm9rZWQgd2hlbiBOYXZpZ2F0aW9uIHRvIGEgY2VydGFpbiBwYWdlIGZhaWxzCisvLy8gPC9zdW1tYXJ5PgorLy8vIDxwYXJhbSBuYW1lPSJzZW5kZXIiPlRoZSBGcmFtZSB3aGljaCBmYWlsZWQgbmF2aWdhdGlvbjwvcGFyYW0+CisvLy8gPHBhcmFtIG5hbWU9ImUiPkRldGFpbHMgYWJvdXQgdGhlIG5hdmlnYXRpb24gZmFpbHVyZTwvcGFyYW0+Cit2b2lkIEFwcDo6T25OYXZpZ2F0aW9uRmFpbGVkKFBsYXRmb3JtOjpPYmplY3QgXnNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6Ok5hdmlnYXRpb246Ok5hdmlnYXRpb25GYWlsZWRFdmVudEFyZ3MgXmUpCit7CisgICAgdGhyb3cgcmVmIG5ldyBGYWlsdXJlRXhjZXB0aW9uKCJGYWlsZWQgdG8gbG9hZCBQYWdlICIgKyBlLT5Tb3VyY2VQYWdlVHlwZS5OYW1lKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0FwcC54YW1sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0OWM4OQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbC5oCkBAIC0wLDAgKzEsNTAgQEAKK++7vy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXBwLmcuaCIKKworbmFtZXNwYWNlIG90Cit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBQcm92aWRlcyBhcHBsaWNhdGlvbi1zcGVjaWZpYyBiZWhhdmlvciB0byBzdXBwbGVtZW50IHRoZSBkZWZhdWx0IEFwcGxpY2F0aW9uIGNsYXNzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcmVmIGNsYXNzIEFwcCBzZWFsZWQKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgT25MYXVuY2hlZChXaW5kb3dzOjpBcHBsaWNhdGlvbk1vZGVsOjpBY3RpdmF0aW9uOjpMYXVuY2hBY3RpdmF0ZWRFdmVudEFyZ3NeIGUpIG92ZXJyaWRlOworCisgICAgaW50ZXJuYWw6CisgICAgICAgIEFwcCgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBPblN1c3BlbmRpbmcoUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpBcHBsaWNhdGlvbk1vZGVsOjpTdXNwZW5kaW5nRXZlbnRBcmdzXiBlKTsKKyAgICAgICAgdm9pZCBPbk5hdmlnYXRpb25GYWlsZWQoUGxhdGZvcm06Ok9iamVjdCBec2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6TmF2aWdhdGlvbjo6TmF2aWdhdGlvbkZhaWxlZEV2ZW50QXJncyBeZSk7CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9DbGllbnRBcmdzLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvQ2xpZW50QXJncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NDNhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvQ2xpZW50QXJncy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ugb3QKK3sKKworcHVibGljIHJlZiBjbGFzcyBDbGllbnRBcmdzIHNlYWxlZAoreworcHVibGljOgorICAgIHByb3BlcnR5IFdpbmRvd3M6Ok5ldHdvcmtpbmc6Okhvc3ROYW1lXiBTZXJ2ZXJIb3N0TmFtZTsKKyAgICBwcm9wZXJ0eSBQbGF0Zm9ybTo6U3RyaW5nXiAgICAgICAgICAgICAgU2VydmVyUG9ydDsKKyAgICBwcm9wZXJ0eSBXaW5kb3dzOjpOZXR3b3JraW5nOjpIb3N0TmFtZV4gQ2xpZW50SG9zdE5hbWU7CisgICAgcHJvcGVydHkgUGxhdGZvcm06OlN0cmluZ14gICAgICAgICAgICAgIENsaWVudFBvcnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0NsaWVudENvbnRyb2wueGFtbCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9DbGllbnRDb250cm9sLnhhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwMGZiYgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9DbGllbnRDb250cm9sLnhhbWwKQEAgLTAsMCArMSwxNDIgQEAKK++7vzwhLS0KKyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+Cis8VXNlckNvbnRyb2wKKyAgICB4OkNsYXNzPSJvdC5DbGllbnRDb250cm9sIgorICAgIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbC9wcmVzZW50YXRpb24iCisgICAgeG1sbnM6eD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aW5meC8yMDA2L3hhbWwiCisgICAgeG1sbnM6bG9jYWw9InVzaW5nOm90IgorICAgIHhtbG5zOmQ9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZXhwcmVzc2lvbi9ibGVuZC8yMDA4IgorICAgIHhtbG5zOm1jPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNiIKKyAgICBtYzpJZ25vcmFibGU9ImQiPgorICAgIDxHcmlkPgorICAgICAgICA8R3JpZC5Sb3dEZWZpbml0aW9ucz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSIyMCIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSJBdXRvIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IkF1dG8iLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iMjAiLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSIyMCIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSJBdXRvIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IkF1dG8iLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iMjAiLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICA8L0dyaWQuUm93RGVmaW5pdGlvbnM+CisgICAgICAgIDxHcmlkLkNvbHVtbkRlZmluaXRpb25zPgorICAgICAgICAgICAgPENvbHVtbkRlZmluaXRpb24gV2lkdGg9IkF1dG8iLz4KKyAgICAgICAgICAgIDxDb2x1bW5EZWZpbml0aW9uIFdpZHRoPSIyMCIvPgorICAgICAgICAgICAgPENvbHVtbkRlZmluaXRpb24gV2lkdGg9IioiLz4KKyAgICAgICAgPC9HcmlkLkNvbHVtbkRlZmluaXRpb25zPgorICAgICAgICA8VGV4dEJsb2NrCisgICAgICAgICAgICBHcmlkLlJvdz0iMCIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIwIgorICAgICAgICAgICAgVGV4dD0iU2VydmVyIElQIDoiCisgICAgICAgICAgICAvPgorICAgICAgICA8VGV4dEJveAorICAgICAgICAgICAgR3JpZC5Sb3c9IjAiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMiIKKyAgICAgICAgICAgIHg6TmFtZT0iU2VydmVySVAiCisgICAgICAgICAgICBNaW5XaWR0aD0iNTAwIgorICAgICAgICAgICAgLz4KKyAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgR3JpZC5Sb3c9IjIiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMCIKKyAgICAgICAgICAgIFRleHQ9IlNlcnZlciBQb3J0IDoiCisgICAgICAgICAgICAvPgorICAgICAgICA8VGV4dEJveAorICAgICAgICAgICAgR3JpZC5Sb3c9IjIiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMiIKKyAgICAgICAgICAgIHg6TmFtZT0iU2VydmVyUG9ydCIKKyAgICAgICAgICAgIFdpZHRoPSIxMDAiCisgICAgICAgICAgICBIb3Jpem9udGFsQWxpZ25tZW50PSJMZWZ0IgorICAgICAgICAgICAgLz4KKyAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgR3JpZC5Sb3c9IjQiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMCIKKyAgICAgICAgICAgIFRleHQ9IkNsaWVudCBJUCA6IgorICAgICAgICAgICAgLz4KKyAgICAgICAgPFRleHRCb3gKKyAgICAgICAgICAgIEdyaWQuUm93PSI0IgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjIiCisgICAgICAgICAgICB4Ok5hbWU9IkNsaWVudElQIgorICAgICAgICAgICAgTWluV2lkdGg9IjUwMCIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgIEdyaWQuUm93PSI2IgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjAiCisgICAgICAgICAgICBUZXh0PSJDbGllbnQgUG9ydCA6IgorICAgICAgICAgICAgLz4KKyAgICAgICAgPFRleHRCb3gKKyAgICAgICAgICAgIEdyaWQuUm93PSI2IgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjIiCisgICAgICAgICAgICB4Ok5hbWU9IkNsaWVudFBvcnQiCisgICAgICAgICAgICBXaWR0aD0iMTAwIgorICAgICAgICAgICAgSG9yaXpvbnRhbEFsaWdubWVudD0iTGVmdCIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgIEdyaWQuUm93PSI4IgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjAiCisgICAgICAgICAgICBHcmlkLkNvbHVtblNwYW49IjMiCisgICAgICAgICAgICBXaWR0aD0iNzUiCisgICAgICAgICAgICBDb250ZW50PSJDb25uZWN0IgorICAgICAgICAgICAgQ2xpY2s9IkNvbm5lY3RfQ2xpY2siCisgICAgICAgICAgICAvPgorICAgICAgICA8VGV4dEJsb2NrCisgICAgICAgICAgICBHcmlkLlJvdz0iMTAiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMCIKKyAgICAgICAgICAgIFRleHQ9IklucHV0IDoiCisgICAgICAgICAgICAvPgorICAgICAgICA8VGV4dEJveAorICAgICAgICAgICAgR3JpZC5Sb3c9IjEwIgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjIiCisgICAgICAgICAgICB4Ok5hbWU9IklucHV0IgorICAgICAgICAgICAgTWluV2lkdGg9IjMwMCIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxTdGFja1BhbmVsCisgICAgICAgICAgICBPcmllbnRhdGlvbj0iSG9yaXpvbnRhbCIKKyAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJUb3AiCisgICAgICAgICAgICBHcmlkLlJvdz0iMTIiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMCIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uU3Bhbj0iMyIKKyAgICAgICAgICAgID4KKyAgICAgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgICAgICBXaWR0aD0iNzUiCisgICAgICAgICAgICAgICAgQ29udGVudD0iU2VuZCIKKyAgICAgICAgICAgICAgICBDbGljaz0iU2VuZF9DbGljayIKKyAgICAgICAgICAgICAgICBNYXJnaW49IjAsMCw3NSwwIgorICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICA8QnV0dG9uCisgICAgICAgICAgICAgICAgV2lkdGg9Ijc1IgorICAgICAgICAgICAgICAgIENvbnRlbnQ9IkV4aXQiCisgICAgICAgICAgICAgICAgQ2xpY2s9IkV4aXRfQ2xpY2siCisgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgPC9TdGFja1BhbmVsPgorICAgIDwvR3JpZD4KKzwvVXNlckNvbnRyb2w+CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvQ2xpZW50Q29udHJvbC54YW1sLmNwcCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9DbGllbnRDb250cm9sLnhhbWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGY0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvQ2xpZW50Q29udHJvbC54YW1sLmNwcApAQCAtMCwwICsxLDE4OCBAQAor77u/LyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5oIgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgIkNsaWVudENvbnRyb2wueGFtbC5oIgorI2luY2x1ZGUgIkZhY3RvcnkuaCIKKyNpbmNsdWRlICJUYWxrSGVscGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordXNpbmcgbmFtZXNwYWNlIENvbmN1cnJlbmN5OwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkFwcGxpY2F0aW9uTW9kZWw6OkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6Rm91bmRhdGlvbjsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpDb2xsZWN0aW9uczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOjpQcmltaXRpdmVzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpEYXRhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpJbnB1dDsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TWVkaWE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok5hdmlnYXRpb247CisKKy8vIFRoZSBVc2VyIENvbnRyb2wgaXRlbSB0ZW1wbGF0ZSBpcyBkb2N1bWVudGVkIGF0IGh0dHA6Ly9nby5taWNyb3NvZnQuY29tL2Z3bGluay8/TGlua0lkPTIzNDIzNgorCitzdGQ6OmF0b21pYzxpbnQ+IENsaWVudENvbnRyb2w6Ol9jbGllbnRQb3J0eyBUYWxrQ29uc3RzOjpERUZfQ0xJRU5UX1BPUlRfSU5JVCB9OworCitDbGllbnRDb250cm9sOjpDbGllbnRDb250cm9sKCkKK3sKKyAgICBJbml0aWFsaXplQ29tcG9uZW50KCk7CisKKyAgICBTZXJ2ZXJQb3J0LT5UZXh0ID0gREVGX1NFUlZFUl9QT1JULlRvU3RyaW5nKCk7CisgICAgYXV0byBjbGllbnRQb3J0ID0gX2NsaWVudFBvcnQubG9hZCgpOworICAgIENsaWVudFBvcnQtPlRleHQgPSBjbGllbnRQb3J0LlRvU3RyaW5nKCk7Cit9CisKK3ZvaWQKK0NsaWVudENvbnRyb2w6OkluaXQoCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiAgbm90aWZ5LAorICAgIElNYWluUGFnZVVJRWxlbWVudHNeIG1haW5QYWdlVUlFbGVtZW50cykKK3sKKyAgICBfbm90aWZ5ID0gc3RkOjptb3ZlKG5vdGlmeSk7CisgICAgX21haW5QYWdlVUlFbGVtZW50cyA9IHN0ZDo6bW92ZShtYWluUGFnZVVJRWxlbWVudHMpOworfQorCit2b2lkCitDbGllbnRDb250cm9sOjpQcm90b2NvbENoYW5nZWQoCisgICAgUHJvdG9jb2wgcHJvdG9jb2wpCit7CisgICAgX3Byb3RvY29sID0gcHJvdG9jb2w7Cit9CisKK3ZvaWQKK0NsaWVudENvbnRyb2w6OkNvbm5lY3RfQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIHRyeQorICAgIHsKKyAgICAgICAgYXV0byBjbGllbnRBcmdzID0gcmVmIG5ldyBDbGllbnRBcmdzKCk7CisKKyAgICAgICAgYXV0byBzZXJ2ZXJJUCA9IFNlcnZlcklQLT5UZXh0OworICAgICAgICBpZiAoc2VydmVySVAtPklzRW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHLCAiTm8gU2VydmVyIElQIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBjaGVjayB2YWxpZCBjaGFycyBvZiBJcHY2IEFkZHJlc3MKKyAgICAgICAgaWYgKCFUYWxrSGVscGVyOjpBbGxWYWxpZElwdjZDaGFycyhzZXJ2ZXJJUC0+RGF0YSgpLCBzZXJ2ZXJJUC0+RGF0YSgpICsgc2VydmVySVAtPkxlbmd0aCgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHLCAiTm90IGEgdmFsaWQgU2VydmVyIElQdjYgYWRkcmVzcyIpOworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50QXJncy0+U2VydmVySG9zdE5hbWUgPSByZWYgbmV3IEhvc3ROYW1lKHNlcnZlcklQKTsKKworICAgICAgICBpZiAoU2VydmVyUG9ydC0+VGV4dC0+SXNFbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBFeGNlcHRpb246OkNyZWF0ZUV4Y2VwdGlvbihFX0lOVkFMSURBUkcsICJObyBTZXJ2ZXIgUG9ydCIpOworICAgICAgICB9CisgICAgICAgIGNsaWVudEFyZ3MtPlNlcnZlclBvcnQgPSBTZXJ2ZXJQb3J0LT5UZXh0OworCisgICAgICAgIGF1dG8gY2xpZW50SVAgPSBDbGllbnRJUC0+VGV4dDsKKyAgICAgICAgaWYgKGNsaWVudElQLT5Jc0VtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IEV4Y2VwdGlvbjo6Q3JlYXRlRXhjZXB0aW9uKEVfSU5WQUxJREFSRywgIk5vIENsaWVudCBJUCIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gY2hlY2sgdmFsaWQgY2hhcnMgb2YgSXB2NiBBZGRyZXNzCisgICAgICAgIGlmICghVGFsa0hlbHBlcjo6QWxsVmFsaWRJcHY2Q2hhcnMoY2xpZW50SVAtPkRhdGEoKSwgY2xpZW50SVAtPkRhdGEoKSArIGNsaWVudElQLT5MZW5ndGgoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IEV4Y2VwdGlvbjo6Q3JlYXRlRXhjZXB0aW9uKEVfSU5WQUxJREFSRywgIk5vdCBhIHZhbGlkIGNsaWVudCBJUHY2IGFkZHJlc3MiKTsKKyAgICAgICAgfQorCisgICAgICAgIGNsaWVudEFyZ3MtPkNsaWVudEhvc3ROYW1lID0gcmVmIG5ldyBIb3N0TmFtZShjbGllbnRJUCk7CisKKyAgICAgICAgaWYgKENsaWVudFBvcnQtPlRleHQtPklzRW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHLCAiTm8gQ2xpZW50IFBvcnQiKTsKKyAgICAgICAgfQorICAgICAgICBjbGllbnRBcmdzLT5DbGllbnRQb3J0ID0gQ2xpZW50UG9ydC0+VGV4dDsKKworICAgICAgICBhdXRvIGNsZWludENvbnRleHQgPSBGYWN0b3J5OjpDcmVhdGVDbGllbnRDb250ZXh0KF9ub3RpZnksIGNsaWVudEFyZ3MsIF9wcm90b2NvbCk7CisgICAgICAgIGNsZWludENvbnRleHQtPkNvbm5lY3RfQ2xpY2soc2VuZGVyLCBlKTsKKworICAgICAgICAvLyBmaXggT25seSB1c2FnZSBvZiBlYWNoIHNvY2tldCBhZGRyZXNzIChwcm90b2NvbC9uZXR3b3JrIGFkZHJlc3MvcG9ydCkKKyAgICAgICAgLy8gaXMgbm9ybWFsbHkgcGVybWl0dGVkLiAKKyAgICAgICAgYXV0byBjbGllbnRQb3J0ID0gKytfY2xpZW50UG9ydDsKKyAgICAgICAgQ2xpZW50UG9ydC0+VGV4dCA9IGNsaWVudFBvcnQuVG9TdHJpbmcoKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgeworICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAiQ29ubmVjdGluZyBmYWlsZWQgd2l0aCBpbnB1dCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgIH0KK30KKwordm9pZAorQ2xpZW50Q29udHJvbDo6U2VuZF9DbGljaygKKyAgICBPYmplY3ReICAgICAgICAgIHNlbmRlciwKKyAgICBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgdHJ5CisgICAgeworICAgICAgICBhdXRvIGlucHV0ID0gSW5wdXQtPlRleHQ7CisgICAgICAgIGlmIChpbnB1dC0+SXNFbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBFeGNlcHRpb246OkNyZWF0ZUV4Y2VwdGlvbihFX0lOVkFMSURBUkcsICJObyBJbnB1dCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkhhc0tleSgiY2xpZW50Q29udGV4dCIpKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBFeGNlcHRpb246OkNyZWF0ZUV4Y2VwdGlvbihFX1VORVhQRUNURUQsICJOb3QgQ29ubmVjdGVkIik7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNsaWVudENvbnRleHQgPSBkeW5hbWljX2Nhc3Q8SUNsaWVudENvbnRleHRePigKKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+TG9va3VwKCJjbGllbnRDb250ZXh0IikpOworICAgICAgICBpZiAoY2xpZW50Q29udGV4dCA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBFeGNlcHRpb246OkNyZWF0ZUV4Y2VwdGlvbihFX1VORVhQRUNURUQsICJObyBjbGllbnRDb250ZXh0Iik7CisgICAgICAgIH0KKworICAgICAgICBjbGllbnRDb250ZXh0LT5TZW5kX0NsaWNrKHNlbmRlciwgZSwgaW5wdXQpOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICB7CisgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICJTZW5kaW5nIG1lc3NhZ2UgZmFpbGVkIHdpdGggZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICB9Cit9CisKK3ZvaWQKK0NsaWVudENvbnRyb2w6OkV4aXRfQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIF9tYWluUGFnZVVJRWxlbWVudHMtPlRhbGtHcmlkLT5WaXNpYmlsaXR5ID0gWGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgIF9tYWluUGFnZVVJRWxlbWVudHMtPlRocmVhZEdyaWQtPlZpc2liaWxpdHkgPSBYYW1sOjpWaXNpYmlsaXR5OjpWaXNpYmxlOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0NsaWVudENvbnRyb2wueGFtbC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0NsaWVudENvbnRyb2wueGFtbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjQ3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvQ2xpZW50Q29udHJvbC54YW1sLmgKQEAgLTAsMCArMSw2NiBAQAor77u/LyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxhdG9taWM+CisjaW5jbHVkZSAiQ2xpZW50Q29udHJvbC5nLmgiCisjaW5jbHVkZSAiVGFsa0NvbnN0cy5oIgorI2luY2x1ZGUgIklBc3luY1RocmVhZE5vdGlmeS5oIgorI2luY2x1ZGUgIklNYWluUGFnZVVJRWxlbWVudHMuaCIKKyNpbmNsdWRlICJQcm90b2NvbC5oIgorCituYW1lc3BhY2Ugb3QKK3sKKworW1dpbmRvd3M6OkZvdW5kYXRpb246Ok1ldGFkYXRhOjpXZWJIb3N0SGlkZGVuXQorcHVibGljIHJlZiBjbGFzcyBDbGllbnRDb250cm9sIHNlYWxlZAoreworcHVibGljOgorICAgIENsaWVudENvbnRyb2woKTsKKworICAgIHZvaWQgSW5pdChJQXN5bmNUaHJlYWROb3RpZnleIG5vdGlmeSwgSU1haW5QYWdlVUlFbGVtZW50c14gbWFpblBhZ2VVSUVsZW1lbnRzKTsKKworICAgIHZvaWQgUHJvdG9jb2xDaGFuZ2VkKFByb3RvY29sIHByb3RvY29sKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNob3J0IERFRl9TRVJWRVJfUE9SVCA9IFRhbGtDb25zdHM6OkRFRl9TRVJWRVJfUE9SVDsKKworICAgIHZvaWQgQ29ubmVjdF9DbGljayhQbGF0Zm9ybTo6T2JqZWN0XiBzZW5kZXIsIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUpOworCisgICAgdm9pZCBTZW5kX0NsaWNrKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSk7CisKKyAgICB2b2lkIEV4aXRfQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKTsKKworICAgIElBc3luY1RocmVhZE5vdGlmeV4gICAgIF9ub3RpZnk7CisgICAgSU1haW5QYWdlVUlFbGVtZW50c14gICAgX21haW5QYWdlVUlFbGVtZW50czsKKyAgICBQcm90b2NvbCAgICAgICAgICAgICAgICBfcHJvdG9jb2w7CisgICAgc3RhdGljIHN0ZDo6YXRvbWljPGludD4gX2NsaWVudFBvcnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtQ2xpZW50Q29udGV4dC5jcHAgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRGF0YWdyYW1DbGllbnRDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjIzYjBkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtQ2xpZW50Q29udGV4dC5jcHAKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwY2guaCIKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgIkRhdGFncmFtQ2xpZW50Q29udGV4dC5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK3VzaW5nIG5hbWVzcGFjZSBDb25jdXJyZW5jeTsKK3VzaW5nIG5hbWVzcGFjZSBQbGF0Zm9ybTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpBcHBsaWNhdGlvbk1vZGVsOjpDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb247Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6Rm91bmRhdGlvbjo6Q29sbGVjdGlvbnM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6TmV0d29ya2luZzo6U29ja2V0czsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOjpQcmltaXRpdmVzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpEYXRhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpJbnB1dDsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TWVkaWE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok5hdmlnYXRpb247CisKK0RhdGFncmFtQ2xpZW50Q29udGV4dDo6RGF0YWdyYW1DbGllbnRDb250ZXh0KAorICAgIElBc3luY1RocmVhZE5vdGlmeV4gbm90aWZ5LAorICAgIERhdGFncmFtU29ja2V0XiAgICAgY2xpZW50LAorICAgIENsaWVudEFyZ3NeICAgICAgICAgYXJncykgOgorICAgIF9ub3RpZnl7IHN0ZDo6bW92ZShub3RpZnkpIH0sCisgICAgX2NsaWVudHsgc3RkOjptb3ZlKGNsaWVudCkgfSwKKyAgICBfYXJnc3sgc3RkOjptb3ZlKGFyZ3MpIH0KK3sKK30KKworRGF0YWdyYW1DbGllbnRDb250ZXh0Ojp+RGF0YWdyYW1DbGllbnRDb250ZXh0KCkKK3sKKyAgICAvLyBBIENsaWVudCBjYW4gYmUgY2xvc2VkIGluIHR3byB3YXlzOgorICAgIC8vICAtIGV4cGxpY2l0bHk6IHVzaW5nIHRoZSAnZGVsZXRlJyBrZXl3b3JkIChjbGllbnQgaXMgY2xvc2VkIGV2ZW4gaWYgdGhlcmUgYXJlIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMgdG8gaXQpLgorICAgIC8vICAtIGltcGxpY2l0bHk6IHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBpdCAoaS5lLiwgZmFsbGluZyBvdXQtb2Ytc2NvcGUpLgorICAgIC8vCisgICAgLy8gV2hlbiBhIFNvY2tldCBpcyBjbG9zZWQgaW1wbGljaXRseSwgaXQgY2FuIHRha2Ugc2V2ZXJhbCBzZWNvbmRzIGZvciB0aGUgbG9jYWwgcG9ydCBiZWluZyB1c2VkCisgICAgLy8gYnkgaXQgdG8gYmUgZnJlZWQvcmVjbGFpbWVkIGJ5IHRoZSBsb3dlciBuZXR3b3JraW5nIGxheWVycy4gRHVyaW5nIHRoYXQgdGltZSwgb3RoZXIgc29ja2V0cyBvbiB0aGUgbWFjaGluZQorICAgIC8vIHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIHRoZSBwb3J0LiBUaHVzLCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IFNvY2tldCBpbnN0YW5jZXMgYmUgZXhwbGljaXRseQorICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBnbyBvdXQgb2Ygc2NvcGUoZS5nLiwgYmVmb3JlIGFwcGxpY2F0aW9uIGV4aXQpLiBUaGUgY2FsbCBiZWxvdyBleHBsaWNpdGx5IGNsb3NlcyB0aGUgc29ja2V0LgorICAgIGlmIChfY2xpZW50ICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBkZWxldGUgX2NsaWVudDsKKyAgICAgICAgX2NsaWVudCA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkCitEYXRhZ3JhbUNsaWVudENvbnRleHQ6OkNvbm5lY3RfQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIHRhc2s8dm9pZD4gcmVtb3ZlQ29udGV4dDsKKworICAgIGlmIChDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkhhc0tleSgiY2xpZW50Q29udGV4dCIpKQorICAgIHsKKyAgICAgICAgYXV0byBjbGllbnRDb250ZXh0ID0gZHluYW1pY19jYXN0PElDbGllbnRDb250ZXh0Xj4oCisgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkxvb2t1cCgiY2xpZW50Q29udGV4dCIpKTsKKyAgICAgICAgaWYgKGNsaWVudENvbnRleHQgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgcmVmIG5ldyBGYWlsdXJlRXhjZXB0aW9uKEwiTm8gY2xpZW50Q29udGV4dCIpOworICAgICAgICB9CisKKyAgICAgICAgcmVtb3ZlQ29udGV4dCA9IGNyZWF0ZV90YXNrKGNsaWVudENvbnRleHQtPkNhbmNlbElPKCkpLnRoZW4oCisgICAgICAgICAgICBbXSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+UmVtb3ZlKCJjbGllbnRDb250ZXh0Iik7CisgICAgICAgIH0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2soW10oKSB7fSk7CisgICAgfQorCisgICAgX2NsaWVudC0+TWVzc2FnZVJlY2VpdmVkICs9IHJlZiBuZXcgTWVzc2FnZUhhbmRsZXIoCisgICAgICAgIHRoaXMsICZEYXRhZ3JhbUNsaWVudENvbnRleHQ6Ok9uTWVzc2FnZSk7CisKKyAgICByZW1vdmVDb250ZXh0LnRoZW4oW3RoaXNdKHRhc2s8dm9pZD4gcHJldlRhc2spCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVHJ5IGdldHRpbmcgYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgcHJldlRhc2suZ2V0KCk7CisKKyAgICAgICAgICAgIC8vIEV2ZW50cyBjYW5ub3QgYmUgaG9va2VkIHVwIGRpcmVjdGx5IHRvIHRoZSBTY2VuYXJpb0lucHV0MiBvYmplY3QsIGFzIHRoZSBvYmplY3QgY2FuIGZhbGwgb3V0LW9mLXNjb3BlIGFuZCBiZQorICAgICAgICAgICAgLy8gZGVsZXRlZC4gVGhpcyB3b3VsZCByZW5kZXIgYW55IGV2ZW50IGhvb2tlZCB1cCB0byB0aGUgb2JqZWN0IGluZWZmZWN0aXZlLiBUaGUgQ2xpZW50Q29udGV4dCBndWFyYW50ZWVzIHRoYXQKKyAgICAgICAgICAgIC8vIGJvdGggdGhlIHNvY2tldCBhbmQgb2JqZWN0IHRoYXQgc2VydmVzIGl0cyBldmVudHMgaGF2ZSB0aGUgc2FtZSBsaWZldGltZS4KKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+SW5zZXJ0KCJjbGllbnRDb250ZXh0IiwgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICAgICAiUmVtb3ZlIGNsaWVudENvbnRleHQgZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgICAgICBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKHRhc2tfY2FuY2VsZWQmKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9KS50aGVuKFt0aGlzXSgpCisgICAgeworICAgICAgICBhdXRvIGVuZHBvaW50UGFpciA9IHJlZiBuZXcgRW5kcG9pbnRQYWlyKF9hcmdzLT5DbGllbnRIb3N0TmFtZSwgX2FyZ3MtPkNsaWVudFBvcnQsCisgICAgICAgICAgICBfYXJncy0+U2VydmVySG9zdE5hbWUsIF9hcmdzLT5TZXJ2ZXJQb3J0KTsKKworICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlN0YXJ0IGNvbm5lY3RpbmciLCBOb3RpZnlUeXBlOjpTdGF0dXMpOworCisgICAgICAgIGNyZWF0ZV90YXNrKF9jbGllbnQtPkNvbm5lY3RBc3luYyhlbmRwb2ludFBhaXIpKS50aGVuKAorICAgICAgICAgICAgW3RoaXMsIGVuZHBvaW50UGFpcl0odGFzazx2b2lkPiBwcmV2VGFzaykKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJ5IGdldHRpbmcgYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgICAgIHByZXZUYXNrLmdldCgpOworICAgICAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3QgZnJvbSAiICsgZW5kcG9pbnRQYWlyLT5Mb2NhbEhvc3ROYW1lLT5DYW5vbmljYWxOYW1lICsKKyAgICAgICAgICAgICAgICAgICAgIiB0byAiICsgZW5kcG9pbnRQYWlyLT5SZW1vdGVIb3N0TmFtZS0+Q2Fub25pY2FsTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6U3RhdHVzKTsKKyAgICAgICAgICAgICAgICBTZXRDb25uZWN0ZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgICAgICJTdGFydCBiaW5kaW5nIGZhaWxlZCB3aXRoIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICAgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPlJlbW92ZSgiY2xpZW50Q29udGV4dCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKHRhc2tfY2FuY2VsZWQmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+UmVtb3ZlKCJjbGllbnRDb250ZXh0Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkCitEYXRhZ3JhbUNsaWVudENvbnRleHQ6OlNlbmRfQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlLAorICAgIFN0cmluZ14gICAgICAgICAgaW5wdXQpCit7CisgICAgU2VuZE1lc3NhZ2UoR2V0RGF0YVdyaXRlcigpLCBpbnB1dCk7Cit9CisKK0lBc3luY0FjdGlvbl4KK0RhdGFncmFtQ2xpZW50Q29udGV4dDo6Q2FuY2VsSU8oKQoreworICAgIHJldHVybiBfY2xpZW50LT5DYW5jZWxJT0FzeW5jKCk7Cit9CisKK3ZvaWQKK0RhdGFncmFtQ2xpZW50Q29udGV4dDo6U2V0Q29ubmVjdGVkKAorICAgIGJvb2wgY29ubmVjdGVkKQoreworICAgIF9jb25uZWN0ZWQgPSBjb25uZWN0ZWQ7Cit9CisKK2Jvb2wKK290OjpEYXRhZ3JhbUNsaWVudENvbnRleHQ6OklzQ29ubmVjdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gX2Nvbm5lY3RlZDsKK30KKwordm9pZAorb3Q6OkRhdGFncmFtQ2xpZW50Q29udGV4dDo6T25NZXNzYWdlKAorICAgIERhdGFncmFtU29ja2V0XiAgICAgICAgICAgc29ja2V0LAorICAgIE1lc3NhZ2VSZWNlaXZlZEV2ZW50QXJnc14gZXZlbnRBcmdzKQoreworICAgIHRyeQorICAgIHsKKyAgICAgICAgYXV0byBkYXRhUmVhZGVyID0gZXZlbnRBcmdzLT5HZXREYXRhUmVhZGVyKCk7CisgICAgICAgIFJlY2VpdmUoZGF0YVJlYWRlciwgZGF0YVJlYWRlci0+VW5jb25zdW1lZEJ1ZmZlckxlbmd0aCk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgIHsKKyAgICAgICAgYXV0byBzb2NrZXRFcnJvciA9IFNvY2tldEVycm9yOjpHZXRTdGF0dXMoZXgtPkhSZXN1bHQpOworICAgICAgICBpZiAoc29ja2V0RXJyb3IgPT0gU29ja2V0RXJyb3JTdGF0dXM6OkNvbm5lY3Rpb25SZXNldEJ5UGVlcikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBlcnJvciB3b3VsZCBpbmRpY2F0ZSB0aGF0IGEgcHJldmlvdXMgc2VuZCBvcGVyYXRpb24gcmVzdWx0ZWQgaW4gYW4gSUNNUCAiUG9ydCBVbnJlYWNoYWJsZSIgbWVzc2FnZS4KKyAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICAgICAiUGVlciBkb2VzIG5vdCBsaXN0ZW4gb24gdGhlIHNwZWNpZmljIHBvcnQuIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB5b3UgcnVuIHN0ZXAgMSBmaXJzdCAiCisgICAgICAgICAgICAgICAgIm9yIHlvdSBoYXZlIGEgc2VydmVyIHByb3Blcmx5IHdvcmtpbmcgb24gYSByZW1vdGUgc2VydmVyLiIsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNvY2tldEVycm9yICE9IFNvY2tldEVycm9yU3RhdHVzOjpVbmtub3duKQorICAgICAgICB7CisgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgIkVycm9yIGhhcHBlbmVkIHdoZW4gcmVjZWl2aW5nIGEgZGF0YWdyYW06ICIgKyBzb2NrZXRFcnJvci5Ub1N0cmluZygpLAorICAgICAgICAgICAgICAgIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkCitEYXRhZ3JhbUNsaWVudENvbnRleHQ6OlJlY2VpdmUoCisgICAgRGF0YVJlYWRlcl4gIGRhdGFSZWFkZXIsCisgICAgdW5zaWduZWQgaW50IHN0ckxlbikKK3sKKyAgICBpZiAoIXN0ckxlbikKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIG1zZyA9IGRhdGFSZWFkZXItPlJlYWRTdHJpbmcoc3RyTGVuKTsKKyAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlJlY2VpdmVkIGRhdGEgZnJvbSBzZXJ2ZXI6IFwiIiArIG1zZyArICJcIiIsCisgICAgICAgIE5vdGlmeVR5cGU6OlN0YXR1cyk7Cit9CisKK3ZvaWQKK0RhdGFncmFtQ2xpZW50Q29udGV4dDo6U2VuZE1lc3NhZ2UoCisgICAgRGF0YVdyaXRlcl4gZGF0YVdyaXRlciwKKyAgICBTdHJpbmdeICAgICBtc2cpCit7CisgICAgaWYgKCFJc0Nvbm5lY3RlZCgpKQorICAgIHsKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJUaGlzIHNvY2tldCBpcyBub3QgeWV0IGNvbm5lY3RlZC4iLCBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGRhdGFXcml0ZXItPldyaXRlU3RyaW5nKG1zZyk7CisgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiU2VuZGluZyAtICIgKyBtc2csIE5vdGlmeVR5cGU6OlN0YXR1cyk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgIHsKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJTZW5kaW5nIGZhaWxlZCB3aXRoIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSB0aGUgbG9jYWxseSBidWZmZXJlZCBkYXRhIHRvIHRoZSBuZXR3b3JrLiBQbGVhc2Ugbm90ZSB0aGF0IHdyaXRlIG9wZXJhdGlvbiB3aWxsIHN1Y2NlZWQKKyAgICAvLyBldmVuIGlmIHRoZSBzZXJ2ZXIgaXMgbm90IGxpc3RlbmluZy4KKyAgICBjcmVhdGVfdGFzayhkYXRhV3JpdGVyLT5TdG9yZUFzeW5jKCkpLnRoZW4oCisgICAgICAgIFt0aGlzXSh0YXNrPHVuc2lnbmVkIGludD4gd3JpdGVUYXNrKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHdyaXRlVGFzay5nZXQoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICAgICAgeworICAgICAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJTZW5kIGZhaWxlZCB3aXRoIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCitXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpEYXRhV3JpdGVyXgorRGF0YWdyYW1DbGllbnRDb250ZXh0OjpHZXREYXRhV3JpdGVyKCkKK3sKKyAgICBpZiAoX2RhdGFXcml0ZXIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIF9kYXRhV3JpdGVyID0gcmVmIG5ldyBEYXRhV3JpdGVyKF9jbGllbnQtPk91dHB1dFN0cmVhbSk7CisgICAgfQorCisgICAgcmV0dXJuIF9kYXRhV3JpdGVyOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtQ2xpZW50Q29udGV4dC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtQ2xpZW50Q29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OTE4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRGF0YWdyYW1DbGllbnRDb250ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJQ2xpZW50Q29udGV4dC5oIgorI2luY2x1ZGUgIklBc3luY1RocmVhZE5vdGlmeS5oIgorI2luY2x1ZGUgIkNsaWVudEFyZ3MuaCIKKworbmFtZXNwYWNlIG90Cit7CisKK1tXaW5kb3dzOjpGb3VuZGF0aW9uOjpNZXRhZGF0YTo6V2ViSG9zdEhpZGRlbl0KK3B1YmxpYyByZWYgY2xhc3MgRGF0YWdyYW1DbGllbnRDb250ZXh0IHNlYWxlZCA6IHB1YmxpYyBJQ2xpZW50Q29udGV4dAoreworcHVibGljOgorICAgIHVzaW5nIERhdGFncmFtU29ja2V0ID0gV2luZG93czo6TmV0d29ya2luZzo6U29ja2V0czo6RGF0YWdyYW1Tb2NrZXQ7CisKKyAgICBEYXRhZ3JhbUNsaWVudENvbnRleHQoSUFzeW5jVGhyZWFkTm90aWZ5XiBub3RpZnksIERhdGFncmFtU29ja2V0XiBjbGllbnQsIENsaWVudEFyZ3NeIGFyZ3MpOworICAgIHZpcnR1YWwgfkRhdGFncmFtQ2xpZW50Q29udGV4dCgpOworCisgICAgdmlydHVhbCB2b2lkIENvbm5lY3RfQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKTsKKworICAgIHZpcnR1YWwgdm9pZCBTZW5kX0NsaWNrKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSwgUGxhdGZvcm06OlN0cmluZ14gaW5wdXQpOworCisgICAgdmlydHVhbCBXaW5kb3dzOjpGb3VuZGF0aW9uOjpJQXN5bmNBY3Rpb25eIENhbmNlbElPKCk7CisKK3ByaXZhdGU6CisgICAgdXNpbmcgTWVzc2FnZVJlY2VpdmVkRXZlbnRBcmdzID0gV2luZG93czo6TmV0d29ya2luZzo6U29ja2V0czo6RGF0YWdyYW1Tb2NrZXRNZXNzYWdlUmVjZWl2ZWRFdmVudEFyZ3M7CisgICAgdXNpbmcgTWVzc2FnZUhhbmRsZXIgPSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpUeXBlZEV2ZW50SGFuZGxlcjxEYXRhZ3JhbVNvY2tldF4sIE1lc3NhZ2VSZWNlaXZlZEV2ZW50QXJnc14+OworICAgIHVzaW5nIERhdGFSZWFkZXIgPSBXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpEYXRhUmVhZGVyOworICAgIHVzaW5nIERhdGFXcml0ZXIgPSBXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpEYXRhV3JpdGVyOworICAgIHVzaW5nIEFyZ3MgPSBDbGllbnRBcmdzOworCisgICAgdm9pZCBTZXRDb25uZWN0ZWQoYm9vbCBjb25uZWN0ZWQpOworICAgIGJvb2wgSXNDb25uZWN0ZWQoKSBjb25zdDsKKworICAgIHZvaWQgT25NZXNzYWdlKERhdGFncmFtU29ja2V0XiBzb2NrZXQsIE1lc3NhZ2VSZWNlaXZlZEV2ZW50QXJnc14gZXZlbnRBcmdzKTsKKyAgICB2b2lkIFJlY2VpdmUoRGF0YVJlYWRlcl4sIHVuc2lnbmVkIGludCBzdHJMZW4pOworCisgICAgdm9pZCBTZW5kTWVzc2FnZShEYXRhV3JpdGVyXiwgU3RyaW5nXiBtc2cpOworCisgICAgRGF0YVdyaXRlcl4gR2V0RGF0YVdyaXRlcigpOworCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiBfbm90aWZ5OworICAgIERhdGFncmFtU29ja2V0XiAgICAgX2NsaWVudDsKKyAgICBBcmdzXiAgICAgICAgICAgICAgIF9hcmdzOworICAgIGJvb2wgICAgICAgICAgICAgICAgX2Nvbm5lY3RlZCA9IGZhbHNlOworICAgIERhdGFSZWFkZXJeICAgICAgICAgX2RhdGFSZWFkZXI7CisgICAgRGF0YVdyaXRlcl4gICAgICAgICBfZGF0YVdyaXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuY3BwIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtTGlzdGVuZXJDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzllOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtTGlzdGVuZXJDb250ZXh0LmNwcApAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5oIgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSAiRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCit1c2luZyBuYW1lc3BhY2UgQ29uY3VycmVuY3k7Cit1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm07Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6QXBwbGljYXRpb25Nb2RlbDo6Q29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczo6UHJpbWl0aXZlczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6RGF0YTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6SW5wdXQ7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok1lZGlhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOworCitEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dDo6RGF0YWdyYW1MaXN0ZW5lckNvbnRleHQoCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiBub3RpZnksCisgICAgRGF0YWdyYW1Tb2NrZXReICAgICBsaXN0ZW5lciwKKyAgICBMaXN0ZW5lckFyZ3NeICAgICAgIGFyZ3MpIDoKKyAgICBfbm90aWZ5eyBzdGQ6Om1vdmUobm90aWZ5KSB9LAorICAgIF9saXN0ZW5lcnsgc3RkOjptb3ZlKGxpc3RlbmVyKSB9LAorICAgIF9hcmdzeyBzdGQ6Om1vdmUoYXJncykgfQoreworfQorCitEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dDo6fkRhdGFncmFtTGlzdGVuZXJDb250ZXh0KCkKK3sKKyAgICAvLyBBIExpc3RlbmVyIGNhbiBiZSBjbG9zZWQgaW4gdHdvIHdheXM6CisgICAgLy8gIC0gZXhwbGljaXRseTogdXNpbmcgdGhlICdkZWxldGUnIGtleXdvcmQgKGxpc3RlbmVyIGlzIGNsb3NlZCBldmVuIGlmIHRoZXJlIGFyZSBvdXRzdGFuZGluZyByZWZlcmVuY2VzIHRvIGl0KS4KKyAgICAvLyAgLSBpbXBsaWNpdGx5OiByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gaXQgKGkuZS4sIGZhbGxpbmcgb3V0LW9mLXNjb3BlKS4KKyAgICAvLworICAgIC8vIFdoZW4gYSBTb2NrZXQgaXMgY2xvc2VkIGltcGxpY2l0bHksIGl0IGNhbiB0YWtlIHNldmVyYWwgc2Vjb25kcyBmb3IgdGhlIGxvY2FsIHBvcnQgYmVpbmcgdXNlZAorICAgIC8vIGJ5IGl0IHRvIGJlIGZyZWVkL3JlY2xhaW1lZCBieSB0aGUgbG93ZXIgbmV0d29ya2luZyBsYXllcnMuIER1cmluZyB0aGF0IHRpbWUsIG90aGVyIHNvY2tldHMgb24gdGhlIG1hY2hpbmUKKyAgICAvLyB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZSB0aGUgcG9ydC4gVGh1cywgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCBTb2NrZXQgaW5zdGFuY2VzIGJlIGV4cGxpY2l0bHkKKyAgICAvLyBjbG9zZWQgYmVmb3JlIHRoZXkgZ28gb3V0IG9mIHNjb3BlKGUuZy4sIGJlZm9yZSBhcHBsaWNhdGlvbiBleGl0KS4gVGhlIGNhbGwgYmVsb3cgZXhwbGljaXRseSBjbG9zZXMgdGhlIHNvY2tldC4KKyAgICBpZiAoX2xpc3RlbmVyICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBkZWxldGUgX2xpc3RlbmVyOworICAgICAgICBfbGlzdGVuZXIgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZAorRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQ6Okxpc3Rlbl9DbGljaygKKyAgICBPYmplY3ReICAgICAgICAgIHNlbmRlciwKKyAgICBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgdGFzazx2b2lkPiByZW1vdmVDb250ZXh0OworCisgICAgaWYgKENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+SGFzS2V5KCJsaXN0ZW5lckNvbnRleHQiKSkKKyAgICB7CisgICAgICAgIGF1dG8gbGlzdGVuZXJDb250ZXh0ID0gZHluYW1pY19jYXN0PElMaXN0ZW5lckNvbnRleHRePigKKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+TG9va3VwKCJsaXN0ZW5lckNvbnRleHQiKSk7CisgICAgICAgIGlmIChsaXN0ZW5lckNvbnRleHQgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgcmVmIG5ldyBGYWlsdXJlRXhjZXB0aW9uKEwiTm8gbGlzdGVuZXJDb250ZXh0Iik7CisgICAgICAgIH0KKworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2sobGlzdGVuZXJDb250ZXh0LT5DYW5jZWxJTygpKS50aGVuKAorICAgICAgICAgICAgW10oKQorICAgICAgICB7CisgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPlJlbW92ZSgibGlzdGVuZXJDb250ZXh0Iik7CisgICAgICAgIH0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2soW10oKSB7fSk7CisgICAgfQorCisgICAgX2xpc3RlbmVyLT5NZXNzYWdlUmVjZWl2ZWQgKz0gcmVmIG5ldyBNZXNzYWdlSGFuZGxlcigKKyAgICAgICAgdGhpcywgJkRhdGFncmFtTGlzdGVuZXJDb250ZXh0OjpPbk1lc3NhZ2UpOworCisgICAgcmVtb3ZlQ29udGV4dC50aGVuKFt0aGlzXSh0YXNrPHZvaWQ+IHByZXZUYXNrKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHByZXZUYXNrLmdldCgpOworCisgICAgICAgICAgICAvLyBFdmVudHMgY2Fubm90IGJlIGhvb2tlZCB1cCBkaXJlY3RseSB0byB0aGUgU2NlbmFyaW9JbnB1dDEgb2JqZWN0LCBhcyB0aGUgb2JqZWN0IGNhbiBmYWxsIG91dC1vZi1zY29wZSBhbmQgYmUKKyAgICAgICAgICAgIC8vIGRlbGV0ZWQuIFRoaXMgd291bGQgcmVuZGVyIGFueSBldmVudCBob29rZWQgdXAgdG8gdGhlIG9iamVjdCBpbmVmZmVjdGl2ZS4gVGhlIExpc3RlbmVyQ29udGV4dCBndWFyYW50ZWVzIHRoYXQKKyAgICAgICAgICAgIC8vIGJvdGggdGhlIGxpc3RlbmVyIGFuZCBvYmplY3QgdGhhdCBzZXJ2ZXMgaXRzIGV2ZW50cyBoYXZlIHRoZSBzYW1lIGxpZmV0aW1lLgorICAgICAgICAgICAgQ29yZUFwcGxpY2F0aW9uOjpQcm9wZXJ0aWVzLT5JbnNlcnQoImxpc3RlbmVyQ29udGV4dCIsIHRoaXMpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgICAgICB7CisgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgIlJlbW92ZSBsaXN0ZW5lckNvbnRleHQgZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgICAgICBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKHRhc2tfY2FuY2VsZWQmKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9KS50aGVuKFt0aGlzXSgpCisgICAgeworICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlN0YXJ0IGxpc3RlbmluZyIsIE5vdGlmeVR5cGU6OlN0YXR1cyk7CisKKyAgICAgICAgY3JlYXRlX3Rhc2soX2xpc3RlbmVyLT5CaW5kRW5kcG9pbnRBc3luYyhfYXJncy0+U2VydmVySG9zdE5hbWUsIF9hcmdzLT5TZXJ2ZXJQb3J0KSkudGhlbigKKyAgICAgICAgICAgIFt0aGlzXSh0YXNrPHZvaWQ+IHByZXZUYXNrKQorICAgICAgICB7CisgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUcnkgZ2V0dGluZyBhbiBleGNlcHRpb24uCisgICAgICAgICAgICAgICAgcHJldlRhc2suZ2V0KCk7CisgICAgICAgICAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKAorICAgICAgICAgICAgICAgICAgICAiTGlzdGVuaW5nIG9uIGFkZHJlc3MgIiArIF9hcmdzLT5TZXJ2ZXJIb3N0TmFtZS0+Q2Fub25pY2FsTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6U3RhdHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICAgICAgICAgIlN0YXJ0IGxpc3RlbmluZyBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgICAgICAgICAgQ29yZUFwcGxpY2F0aW9uOjpQcm9wZXJ0aWVzLT5SZW1vdmUoImxpc3RlbmVyQ29udGV4dCIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30KKworSUFzeW5jQWN0aW9uXgorRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQ6OkNhbmNlbElPKCkKK3sKKyAgICByZXR1cm4gX2xpc3RlbmVyLT5DYW5jZWxJT0FzeW5jKCk7Cit9CisKK3ZvaWQKK0RhdGFncmFtTGlzdGVuZXJDb250ZXh0OjpPbk1lc3NhZ2UoCisgICAgRGF0YWdyYW1Tb2NrZXReICAgICAgICAgICBzb2NrZXQsCisgICAgTWVzc2FnZVJlY2VpdmVkRXZlbnRBcmdzXiBldmVudEFyZ3MpCit7CisgICAgaWYgKF9vdXRwdXRTdHJlYW0gIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGF1dG8gZGF0YVJlYWRlciA9IGV2ZW50QXJncy0+R2V0RGF0YVJlYWRlcigpOworICAgICAgICBSZWNlaXZlKGRhdGFSZWFkZXIsIGRhdGFSZWFkZXItPlVuY29uc3VtZWRCdWZmZXJMZW5ndGgsIEdldERhdGFXcml0ZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBkbyBub3QgaGF2ZSBhbiBvdXRwdXQgc3RyZWFtIHlldCBzbyBjcmVhdGUgb25lLgorICAgIGNyZWF0ZV90YXNrKHNvY2tldC0+R2V0T3V0cHV0U3RyZWFtQXN5bmMoZXZlbnRBcmdzLT5SZW1vdGVBZGRyZXNzLCBldmVudEFyZ3MtPlJlbW90ZVBvcnQpKS50aGVuKAorICAgICAgICBbdGhpcywgc29ja2V0LCBldmVudEFyZ3NdKElPdXRwdXRTdHJlYW1eIHN0cmVhbSkKKyAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxtdXRleF90PiBsb2NrKF9tdHgpOworCisgICAgICAgICAgICAvLyBJdCBtaWdodCBoYXBwZW4gdGhhdCB0aGUgT25NZXNzYWdlIHdhcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGJlZm9yZSB0aGUgR2V0T3V0cHV0U3RyZWFtQXN5bmMgY2FsbAorICAgICAgICAgICAgLy8gY29tcGxldGVkLiBJbiB0aGlzIGNhc2Ugd2Ugd2lsbCBlbmQgdXAgd2l0aCBtdWx0aXBsZSBzdHJlYW1zIC0ganVzdCBrZWVwIG9uZSBvZiB0aGVtLgorICAgICAgICAgICAgaWYgKF9vdXRwdXRTdHJlYW0gPT0gbnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfb3V0cHV0U3RyZWFtID0gc3RyZWFtOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXV0byBkYXRhUmVhZGVyID0gZXZlbnRBcmdzLT5HZXREYXRhUmVhZGVyKCk7CisgICAgICAgIFJlY2VpdmUoZGF0YVJlYWRlciwgZGF0YVJlYWRlci0+VW5jb25zdW1lZEJ1ZmZlckxlbmd0aCwgR2V0RGF0YVdyaXRlcigpKTsKKyAgICB9KS50aGVuKFt0aGlzXSh0YXNrPHZvaWQ+IHByZXZUYXNrKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFsbCBleGNlcHRpb25zIGZyb20gdGhlIGNvbnRpbnVhdGlvbiBjaGFpbiBhYm92ZSB0aGlzIHBvaW50LgorICAgICAgICAgICAgcHJldlRhc2suZ2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiT24gbWVzc2FnZSB3aXRoIGFuIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGNhdGNoICh0YXNrX2NhbmNlbGVkJikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRG8gbm90IHByaW50IGFueXRoaW5nIGhlcmUgLSB0aGlzIHdpbGwgdXN1YWxseSBoYXBwZW4gYmVjYXVzZSB1c2VyIGNsb3NlZCB0aGUgY2xpZW50IHNvY2tldC4KKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkCitEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dDo6UmVjZWl2ZSgKKyAgICBEYXRhUmVhZGVyXiAgZGF0YVJlYWRlciwKKyAgICB1bnNpZ25lZCBpbnQgc3RyTGVuLAorICAgIERhdGFXcml0ZXJeICBkYXRhV3JpdGVyKQoreworICAgIGlmICghc3RyTGVuKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbXNnID0gZGF0YVJlYWRlci0+UmVhZFN0cmluZyhzdHJMZW4pOworICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiUmVjZWl2ZWQgZGF0YSBmcm9tIGNsaWVudDogXCIiICsgbXNnICsgIlwiIiwKKyAgICAgICAgTm90aWZ5VHlwZTo6U3RhdHVzKTsKKyAgICBhdXRvIGVjaG8gPSBDcmVhdGVFY2hvTWVzc2FnZShtc2cpOworICAgIEVjaG9NZXNzYWdlKGRhdGFXcml0ZXIsIGVjaG8pOworfQorCitTdHJpbmdeCitEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dDo6Q3JlYXRlRWNob01lc3NhZ2UoCisgICAgU3RyaW5nXiBtc2cpCit7CisgICAgd2NoYXJfdCBidWZbMjU2XTsKKyAgICBhdXRvIGxlbiA9IHN3cHJpbnRmX3MoYnVmLCBMIlNlcnZlciVzIHJlY2VpdmVkIGRhdGEgZnJvbSBjbGllbnQgOiBcIiVzXCIiLAorICAgICAgICBfYXJncy0+U2VydmVyTmFtZS0+SXNFbXB0eSgpID8gTCIiIDogKCIgIiArIF9hcmdzLT5TZXJ2ZXJOYW1lKS0+RGF0YSgpLCBtc2ctPkRhdGEoKSk7CisKKyAgICBsZW4gKz0gc3dwcmludGZfcygmYnVmW2xlbl0sIF9jb3VudG9mKGJ1ZikgLSBsZW4sIEwiIC0gZ290ICVkIGNoYXJzIiwKKyAgICAgICAgbXNnLT5MZW5ndGgoKSk7CisgICAgcmV0dXJuIHJlZiBuZXcgU3RyaW5nKGJ1Zik7Cit9CisKK3ZvaWQKK0RhdGFncmFtTGlzdGVuZXJDb250ZXh0OjpFY2hvTWVzc2FnZSgKKyAgICBEYXRhV3JpdGVyXiBkYXRhV3JpdGVyLAorICAgIFN0cmluZ14gICAgIGVjaG8pCit7CisgICAgdHJ5CisgICAgeworICAgICAgICBkYXRhV3JpdGVyLT5Xcml0ZVN0cmluZyhlY2hvKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgeworICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIkVjaG9pbmcgZmFpbGVkIHdpdGggZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICB9CisKKyAgICBjcmVhdGVfdGFzayhkYXRhV3JpdGVyLT5TdG9yZUFzeW5jKCkpLnRoZW4oCisgICAgICAgIFt0aGlzXSh0YXNrPHVuc2lnbmVkIGludD4gd3JpdGVUYXNrKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFsbCBleGNlcHRpb25zIGZyb20gdGhlIGNvbnRpbnVhdGlvbiBjaGFpbiBhYm92ZSB0aGlzIHBvaW50LgorICAgICAgICAgICAgd3JpdGVUYXNrLmdldCgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgICAgICB7CisgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIkVjaG8gbWVzc2FnZSB3aXRoIGFuIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK1dpbmRvd3M6OlN0b3JhZ2U6OlN0cmVhbXM6OkRhdGFXcml0ZXJeCitEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dDo6R2V0RGF0YVdyaXRlcigpCit7CisgICAgaWYgKF9kYXRhV3JpdGVyID09IG51bGxwdHIpCisgICAgeworICAgICAgICBfZGF0YVdyaXRlciA9IHJlZiBuZXcgRGF0YVdyaXRlcihfb3V0cHV0U3RyZWFtKTsKKyAgICB9CisKKyAgICByZXR1cm4gX2RhdGFXcml0ZXI7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9EYXRhZ3JhbUxpc3RlbmVyQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODY5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgIklMaXN0ZW5lckNvbnRleHQuaCIKKyNpbmNsdWRlICJJQXN5bmNUaHJlYWROb3RpZnkuaCIKKyNpbmNsdWRlICJMaXN0ZW5lckFyZ3MuaCIKKworbmFtZXNwYWNlIG90Cit7CisKK1tXaW5kb3dzOjpGb3VuZGF0aW9uOjpNZXRhZGF0YTo6V2ViSG9zdEhpZGRlbl0KK3B1YmxpYyByZWYgY2xhc3MgRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQgc2VhbGVkIDogcHVibGljIElMaXN0ZW5lckNvbnRleHQKK3sKK3B1YmxpYzoKKyAgICB1c2luZyBEYXRhZ3JhbVNvY2tldCA9IFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM6OkRhdGFncmFtU29ja2V0OworCisgICAgRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQoSUFzeW5jVGhyZWFkTm90aWZ5XiBub3RpZnksIERhdGFncmFtU29ja2V0XiBsaXN0ZW5lciwgTGlzdGVuZXJBcmdzXiBhcmdzKTsKKyAgICB2aXJ0dWFsIH5EYXRhZ3JhbUxpc3RlbmVyQ29udGV4dCgpOworCisgICAgdmlydHVhbCB2b2lkIExpc3Rlbl9DbGljayhQbGF0Zm9ybTo6T2JqZWN0XiBzZW5kZXIsIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUpOworCisgICAgdmlydHVhbCBXaW5kb3dzOjpGb3VuZGF0aW9uOjpJQXN5bmNBY3Rpb25eIENhbmNlbElPKCk7CisKK3ByaXZhdGU6CisgICAgdXNpbmcgTWVzc2FnZVJlY2VpdmVkRXZlbnRBcmdzID0gV2luZG93czo6TmV0d29ya2luZzo6U29ja2V0czo6RGF0YWdyYW1Tb2NrZXRNZXNzYWdlUmVjZWl2ZWRFdmVudEFyZ3M7CisgICAgdXNpbmcgTWVzc2FnZUhhbmRsZXIgPSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpUeXBlZEV2ZW50SGFuZGxlcjxEYXRhZ3JhbVNvY2tldF4sIE1lc3NhZ2VSZWNlaXZlZEV2ZW50QXJnc14+OworICAgIHVzaW5nIERhdGFSZWFkZXIgPSBXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpEYXRhUmVhZGVyOworICAgIHVzaW5nIERhdGFXcml0ZXIgPSBXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpEYXRhV3JpdGVyOworICAgIHVzaW5nIElPdXRwdXRTdHJlYW0gPSBXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpJT3V0cHV0U3RyZWFtOworICAgIHVzaW5nIExpc3RlbmVyID0gRGF0YWdyYW1Tb2NrZXQ7CisgICAgdXNpbmcgQXJncyA9IExpc3RlbmVyQXJnczsKKyAgICB1c2luZyBtdXRleF90ID0gc3RkOjptdXRleDsKKworICAgIHZvaWQgT25NZXNzYWdlKERhdGFncmFtU29ja2V0XiBzb2NrZXQsIE1lc3NhZ2VSZWNlaXZlZEV2ZW50QXJnc14gZXZlbnRBcmdzKTsKKyAgICB2b2lkIFJlY2VpdmUoRGF0YVJlYWRlcl4sIHVuc2lnbmVkIGludCBzdHJMZW4sIERhdGFXcml0ZXJeKTsKKyAgICBTdHJpbmdeIENyZWF0ZUVjaG9NZXNzYWdlKFN0cmluZ14gbXNnKTsKKyAgICB2b2lkIEVjaG9NZXNzYWdlKERhdGFXcml0ZXJeLCBTdHJpbmdeIGVjaG8pOworCisgICAgRGF0YVdyaXRlcl4gR2V0RGF0YVdyaXRlcigpOworCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiBfbm90aWZ5OworICAgIExpc3RlbmVyXiAgICAgICAgICAgX2xpc3RlbmVyOworICAgIEFyZ3NeICAgICAgICAgICAgICAgX2FyZ3M7CisgICAgRGF0YVdyaXRlcl4gICAgICAgICBfZGF0YVdyaXRlcjsKKworICAgIG11dGFibGUgbXV0ZXhfdCBfbXR4OworICAgIC8vIG11dGV4IHByb3RlY3RlZCBkYXRhCisgICAgSU91dHB1dFN0cmVhbV4gIF9vdXRwdXRTdHJlYW07Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0ZhY3RvcnkuY3BwIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0ZhY3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNDdhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRmFjdG9yeS5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5oIgorI2luY2x1ZGUgIkZhY3RvcnkuaCIKKyNpbmNsdWRlICJTdHJlYW1MaXN0ZW5lckNvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dC5oIgorI2luY2x1ZGUgIlN0cmVhbUNsaWVudENvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhZ3JhbUNsaWVudENvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCit1c2luZyBuYW1lc3BhY2UgQ29uY3VycmVuY3k7Cit1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm07Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6QXBwbGljYXRpb25Nb2RlbDo6Q29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczo6UHJpbWl0aXZlczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6RGF0YTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6SW5wdXQ7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok1lZGlhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOworCitJTGlzdGVuZXJDb250ZXh0XgorRmFjdG9yeTo6Q3JlYXRlTGlzdGVuZXJDb250ZXh0KAorICAgIElBc3luY1RocmVhZE5vdGlmeV4gbm90aWZ5LAorICAgIExpc3RlbmVyQXJnc14gICAgICAgbGlzdGVuZXJBcmdzLAorICAgIFByb3RvY29sICAgICAgICAgICAgcHJvdG9jb2wpCit7CisgICAgaWYgKHByb3RvY29sID09IFByb3RvY29sOjpUQ1ApCisgICAgeworICAgICAgICBhdXRvIGxpc3RlbmVyID0gcmVmIG5ldyBTdHJlYW1Tb2NrZXRMaXN0ZW5lcigpOworICAgICAgICByZXR1cm4gcmVmIG5ldyBTdHJlYW1MaXN0ZW5lckNvbnRleHQobm90aWZ5LCBsaXN0ZW5lciwgbGlzdGVuZXJBcmdzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IHJlZiBuZXcgRGF0YWdyYW1Tb2NrZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlZiBuZXcgRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQobm90aWZ5LCBsaXN0ZW5lciwgbGlzdGVuZXJBcmdzKTsKKyAgICB9Cit9CisKK0lDbGllbnRDb250ZXh0XgorRmFjdG9yeTo6Q3JlYXRlQ2xpZW50Q29udGV4dCgKKyAgICBJQXN5bmNUaHJlYWROb3RpZnleIG5vdGlmeSwKKyAgICBDbGllbnRBcmdzXiAgICAgICAgIGNsaWVudEFyZ3MsCisgICAgUHJvdG9jb2wgICAgICAgICAgICBwcm90b2NvbCkKK3sKKyAgICBpZiAocHJvdG9jb2wgPT0gUHJvdG9jb2w6OlRDUCkKKyAgICB7CisgICAgICAgIGF1dG8gY2xpZW50ID0gcmVmIG5ldyBTdHJlYW1Tb2NrZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlZiBuZXcgU3RyZWFtQ2xpZW50Q29udGV4dChub3RpZnksIGNsaWVudCwgY2xpZW50QXJncyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGF1dG8gY2xpZW50ID0gcmVmIG5ldyBEYXRhZ3JhbVNvY2tldCgpOworICAgICAgICByZXR1cm4gcmVmIG5ldyBEYXRhZ3JhbUNsaWVudENvbnRleHQobm90aWZ5LCBjbGllbnQsIGNsaWVudEFyZ3MpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9GYWN0b3J5LmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRmFjdG9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZGVhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRmFjdG9yeS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSUFzeW5jVGhyZWFkTm90aWZ5LmgiCisjaW5jbHVkZSAiTGlzdGVuZXJBcmdzLmgiCisjaW5jbHVkZSAiSUxpc3RlbmVyQ29udGV4dC5oIgorI2luY2x1ZGUgIkNsaWVudEFyZ3MuaCIKKyNpbmNsdWRlICJJQ2xpZW50Q29udGV4dC5oIgorI2luY2x1ZGUgIlByb3RvY29sLmgiCisKK25hbWVzcGFjZSBvdAoreworCitjbGFzcyBGYWN0b3J5Cit7CitwdWJsaWM6CisgICAgc3RhdGljIElMaXN0ZW5lckNvbnRleHReIENyZWF0ZUxpc3RlbmVyQ29udGV4dChJQXN5bmNUaHJlYWROb3RpZnleLCBMaXN0ZW5lckFyZ3NeLCBQcm90b2NvbCk7CisKKyAgICBzdGF0aWMgSUNsaWVudENvbnRleHReIENyZWF0ZUNsaWVudENvbnRleHQoSUFzeW5jVGhyZWFkTm90aWZ5XiwgQ2xpZW50QXJnc14sIFByb3RvY29sKTsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvSUFzeW5jVGhyZWFkTm90aWZ5LmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvSUFzeW5jVGhyZWFkTm90aWZ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMzYzkwMAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9JQXN5bmNUaHJlYWROb3RpZnkuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIG90Cit7CisKK3B1YmxpYyBlbnVtIGNsYXNzIE5vdGlmeVR5cGUKK3sKKyAgICBTdGF0dXMsCisgICAgRXJyb3IsCit9OworCitwdWJsaWMgaW50ZXJmYWNlIHN0cnVjdCBJQXN5bmNUaHJlYWROb3RpZnkKK3sKKyAgICB2b2lkIE5vdGlmeUZyb21Bc3luY1RocmVhZChQbGF0Zm9ybTo6U3RyaW5nXiBtZXNzYWdlLCBOb3RpZnlUeXBlIHR5cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9JQ2xpZW50Q29udGV4dC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0lDbGllbnRDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhjOTQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9JQ2xpZW50Q29udGV4dC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ugb3QKK3sKKyAgICAKK3B1YmxpYyBpbnRlcmZhY2Ugc3RydWN0IElDbGllbnRDb250ZXh0Cit7CisgICAgdm9pZCBDb25uZWN0X0NsaWNrKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSk7CisKKyAgICB2b2lkIFNlbmRfQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlLCBQbGF0Zm9ybTo6U3RyaW5nXiBpbnB1dCk7CisKKyAgICBXaW5kb3dzOjpGb3VuZGF0aW9uOjpJQXN5bmNBY3Rpb25eIENhbmNlbElPKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0lMaXN0ZW5lckNvbnRleHQuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9JTGlzdGVuZXJDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjYjg5YQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9JTGlzdGVuZXJDb250ZXh0LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBvdAoreworCitwdWJsaWMgaW50ZXJmYWNlIHN0cnVjdCBJTGlzdGVuZXJDb250ZXh0Cit7CisgICAgdm9pZCBMaXN0ZW5fQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKTsKKworICAgIFdpbmRvd3M6OkZvdW5kYXRpb246OklBc3luY0FjdGlvbl4gQ2FuY2VsSU8oKTsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvSU1haW5QYWdlVUlFbGVtZW50cy5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0lNYWluUGFnZVVJRWxlbWVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2NkNDZmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0lNYWluUGFnZVVJRWxlbWVudHMuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIG90Cit7CisKK3B1YmxpYyBpbnRlcmZhY2Ugc3RydWN0IElNYWluUGFnZVVJRWxlbWVudHMKK3sKKyAgICBwcm9wZXJ0eSBXaW5kb3dzOjpVSTo6WGFtbDo6VUlFbGVtZW50XiBUaHJlYWRHcmlkCisgICAgeworICAgICAgICBXaW5kb3dzOjpVSTo6WGFtbDo6VUlFbGVtZW50XiBnZXQoKTsKKyAgICB9CisgICAgCisgICAgcHJvcGVydHkgV2luZG93czo6VUk6OlhhbWw6OlVJRWxlbWVudF4gVGFsa0dyaWQKKyAgICB7CisgICAgICAgIFdpbmRvd3M6OlVJOjpYYW1sOjpVSUVsZW1lbnReIGdldCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTGlzdGVuZXJBcmdzLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTGlzdGVuZXJBcmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwYzAxNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9MaXN0ZW5lckFyZ3MuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIG90Cit7CisKK3B1YmxpYyByZWYgY2xhc3MgTGlzdGVuZXJBcmdzIHNlYWxlZAoreworcHVibGljOgorICAgIHByb3BlcnR5IFBsYXRmb3JtOjpTdHJpbmdeICAgICAgICAgICAgICBTZXJ2ZXJOYW1lOworICAgIHByb3BlcnR5IFdpbmRvd3M6Ok5ldHdvcmtpbmc6Okhvc3ROYW1lXiBTZXJ2ZXJIb3N0TmFtZTsKKyAgICBwcm9wZXJ0eSBQbGF0Zm9ybTo6U3RyaW5nXiAgICAgICAgICAgICAgU2VydmVyUG9ydDsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTWFpblBhZ2UueGFtbCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9NYWluUGFnZS54YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYjFlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTWFpblBhZ2UueGFtbApAQCAtMCwwICsxLDMwNyBAQAor77u/PCEtLQorICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKzxQYWdlCisgICAgeDpDbGFzcz0ib3QuTWFpblBhZ2UiCisgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiIKKyAgICB4bWxuczp4PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbCIKKyAgICB4bWxuczpsb2NhbD0idXNpbmc6b3QiCisgICAgeG1sbnM6ZD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9leHByZXNzaW9uL2JsZW5kLzIwMDgiCisgICAgeG1sbnM6bWM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IgorICAgIElzVGFiU3RvcD0iZmFsc2UiCisgICAgbWM6SWdub3JhYmxlPSJkIj4KKworICAgIDxHcmlkPgorICAgICAgICA8R3JpZC5CYWNrZ3JvdW5kPgorICAgICAgICAgICAgPEltYWdlQnJ1c2ggSW1hZ2VTb3VyY2U9Im1zLWFwcHg6Ly8vQXNzZXRzL1dpZGUzMTB4MTUwTG9nby5wbmciIE9wYWNpdHk9IjAuMjUiIFN0cmV0Y2g9IlVuaWZvcm0iLz4KKyAgICAgICAgPC9HcmlkLkJhY2tncm91bmQ+CisgICAgICAgIDwhLS0gSW50ZXJmYWNlIExpc3QgLS0+CisgICAgICAgIDxHcmlkCisgICAgICAgICAgICB4Ok5hbWU9IlRocmRHcmlkIgorICAgICAgICAgICAgPgorICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgIFRleHQ9IlRocmVhZCBVWCIgCisgICAgICAgICAgICAgICAgSG9yaXpvbnRhbEFsaWdubWVudD0iTGVmdCIgCisgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IlRvcCIgCisgICAgICAgICAgICAgICAgTWFyZ2luPSIyMCIgCisgICAgICAgICAgICAgICAgRm9udFNpemU9IjUwIgorICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgICAgIE9yaWVudGF0aW9uPSJIb3Jpem9udGFsIgorICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJUb3AiCisgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgVGV4dD0iSW50ZXJmYWNlcyIgCisgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWxBbGlnbm1lbnQ9IkxlZnQiIAorICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iVG9wIiAKKyAgICAgICAgICAgICAgICAgICAgTWFyZ2luPSI2MCw5MCIgCisgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIyNSIKKyAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICA8QnV0dG9uCisgICAgICAgICAgICAgICAgICAgIHg6TmFtZT0iVGFsayIKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudD0iVGFsayIKKyAgICAgICAgICAgICAgICAgICAgTWFyZ2luPSIxMCwwIgorICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgPC9TdGFja1BhbmVsPgorICAgICAgICAgICAgPExpc3RWaWV3CisgICAgICAgICAgICAgICAgTmFtZT0iSW50ZXJmYWNlTGlzdCIKKyAgICAgICAgICAgICAgICBNYXJnaW49IjYwLDEzMCwyMCwxNTAiCisgICAgICAgICAgICAgICAgU2VsZWN0aW9uTW9kZT0iTm9uZSI+CisgICAgICAgICAgICA8L0xpc3RWaWV3PgorCisgICAgICAgICAgICA8IS0tIEludGVyZmFjZSBDb25maWd1cmF0aW9uIC0tPgorICAgICAgICAgICAgPEdyaWQgCisgICAgICAgICAgICAgICAgeDpOYW1lPSJJbnRlcmZhY2VDb25maWd1cmF0aW9uIiAKKyAgICAgICAgICAgICAgICBCYWNrZ3JvdW5kPSIjQjJGRkZGRkYiCisgICAgICAgICAgICAgICAgVmlzaWJpbGl0eT0iQ29sbGFwc2VkIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgICAgICAgICBCYWNrZ3JvdW5kPSJ7U3RhdGljUmVzb3VyY2UgQXBwbGljYXRpb25QYWdlQmFja2dyb3VuZFRoZW1lQnJ1c2h9IgorICAgICAgICAgICAgICAgICAgICBXaWR0aD0iNjAwIiAKKyAgICAgICAgICAgICAgICAgICAgSGVpZ2h0PSIzNjAiIAorICAgICAgICAgICAgICAgICAgICBIb3Jpem9udGFsQWxpZ25tZW50PSJDZW50ZXIiIAorICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9IkludGVyZmFjZSBDb25maWd1cmF0aW9uIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWxBbGlnbm1lbnQ9IkxlZnQiIAorICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IlRvcCIgCisgICAgICAgICAgICAgICAgICAgICAgICBNYXJnaW49IjIwIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIyNSIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDxHcmlkIE1hcmdpbj0iNDAsMTAiPgorICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQuQ29sdW1uRGVmaW5pdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbHVtbkRlZmluaXRpb24gV2lkdGg9IjIwMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb2x1bW5EZWZpbml0aW9uIFdpZHRoPSIqIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWQuQ29sdW1uRGVmaW5pdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8R3JpZC5Sb3dEZWZpbml0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjUwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSI1MCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iNTAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjUwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSI1MCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkLlJvd0RlZmluaXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9Ik5hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFNpemU9IjIyIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dEJveAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IkludGVyZmFjZUNvbmZpZ05hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iVGVzdCBOZXR3b3JrIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIxOCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IkNlbnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9IktleSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Sb3c9IjEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0Qm94CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iSW50ZXJmYWNlQ29uZmlnS2V5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9IjAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuUm93PSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIxOCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IkNlbnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9Ik1heCBDaGlsZHJlbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Sb3c9IjIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTbGlkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VDb25maWdNYXhDaGlsZHJlbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtPSIwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heGltdW09IjMyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlPSIxNiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dEJsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iQ2hhbm5lbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Sb3c9IjMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTbGlkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VDb25maWdDaGFubmVsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuUm93PSIzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW09IjExIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heGltdW09IjI0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlPSIxMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuUm93PSI1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuQ29sdW1uU3Bhbj0iMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3Jpem9udGFsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZW50YXRpb249Ikhvcml6b250YWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iSW50ZXJmYWNlQ29uZmlnT2tCdXR0b24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQ9Ik9rIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFNpemU9IjIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJnaW49IjIwLDAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VDb25maWdDYW5jZWxCdXR0b24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQ9IkNhbmNlbCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIyMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFyZ2luPSIyMCwwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhbmVsPgorICAgICAgICAgICAgICAgICAgICA8L0dyaWQ+CisgICAgICAgICAgICAgICAgPC9TdGFja1BhbmVsPgorICAgICAgICAgICAgPC9HcmlkPgorCisgICAgICAgICAgICA8IS0tIEludGVyZmFjZSBEZXRhaWxzIC0tPgorICAgICAgICAgICAgPEdyaWQgCisgICAgICAgICAgICAgICAgeDpOYW1lPSJJbnRlcmZhY2VEZXRhaWxzIiAKKyAgICAgICAgICAgICAgICBCYWNrZ3JvdW5kPSIjQjJGRkZGRkYiCisgICAgICAgICAgICAgICAgVmlzaWJpbGl0eT0iQ29sbGFwc2VkIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgICAgICAgICBCYWNrZ3JvdW5kPSJ7U3RhdGljUmVzb3VyY2UgQXBwbGljYXRpb25QYWdlQmFja2dyb3VuZFRoZW1lQnJ1c2h9IgorICAgICAgICAgICAgICAgICAgICBXaWR0aD0iNjAwIiAKKyAgICAgICAgICAgICAgICAgICAgSGVpZ2h0PSI0MDUiIAorICAgICAgICAgICAgICAgICAgICBIb3Jpem9udGFsQWxpZ25tZW50PSJDZW50ZXIiIAorICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9IkludGVyZmFjZSBEZXRhaWxzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWxBbGlnbm1lbnQ9IkxlZnQiIAorICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IlRvcCIgCisgICAgICAgICAgICAgICAgICAgICAgICBNYXJnaW49IjIwIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIyNSIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDxHcmlkIE1hcmdpbj0iNDAsMCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW5EZWZpbml0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29sdW1uRGVmaW5pdGlvbiBXaWR0aD0iMjAwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbHVtbkRlZmluaXRpb24gV2lkdGg9IioiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZC5Db2x1bW5EZWZpbml0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxHcmlkLlJvd0RlZmluaXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iNTAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjUwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSI1MCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iNTAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjUwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSI1MCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkLlJvd0RlZmluaXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9Ik1BQyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VNYWNBZGRyZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9IjAwOjAwOjAwOjAwOjAwOjAwOjAwOjAwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIxOCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IkNlbnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9Ik1MLUVJRCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VNTF9FSUQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iOjowMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMTgiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0PSJSTE9DIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuUm93PSIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIyMiIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IkNlbnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IkludGVyZmFjZVJMT0MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iOjowMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMTgiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VOZWlnaGJvcnNUZXh0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9Ik5laWdoYm9ycyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VOZWlnaGJvcnMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iMCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VDaGlsZHJlblRleHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iQ2hpbGRyZW4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Sb3c9IjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFNpemU9IjIyIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dEJsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iSW50ZXJmYWNlQ2hpbGRyZW4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iMCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iNCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VEZXRhaWxzQ2xvc2VCdXR0b24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Sb3c9IjYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Db2x1bW5TcGFuPSIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQ9IkNsb3NlIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3Jpem9udGFsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFNpemU9IjIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvR3JpZD4KKyAgICAgICAgICAgICAgICA8L1N0YWNrUGFuZWw+CisgICAgICAgICAgICA8L0dyaWQ+CisgICAgICAgIDwvR3JpZD4KKyAgICAgICAgPGxvY2FsOlRhbGtHcmlkCisgICAgICAgICAgICB4Ok5hbWU9IlRsa0dyaWQiCisgICAgICAgICAgICBNYXJnaW49IjIwIgorICAgICAgICAgICAgVmlzaWJpbGl0eT0iQ29sbGFwc2VkIgorICAgICAgICAgICAgLz4KKyAgICA8L0dyaWQ+Cis8L1BhZ2U+CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTWFpblBhZ2UueGFtbC5jcHAgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTWFpblBhZ2UueGFtbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3MzJkZQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9NYWluUGFnZS54YW1sLmNwcApAQCAtMCwwICsxLDQxOSBAQAor77u/LyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5oIgorI2luY2x1ZGUgIk1haW5QYWdlLnhhbWwuaCIKKyNpbmNsdWRlICJUYWxrR3JpZC54YW1sLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb247Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6Rm91bmRhdGlvbjo6Q29sbGVjdGlvbnM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczo6UHJpbWl0aXZlczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6RGF0YTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6SW5wdXQ7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok1lZGlhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOworCisjZGVmaW5lIEdVSURfRk9STUFUIEwieyUwOGxYLSUwNGhYLSUwNGhYLSUwMmhoWCUwMmhoWC0lMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFh9IgorI2RlZmluZSBHVUlEX0FSRyhndWlkKSBndWlkLkRhdGExLCBndWlkLkRhdGEyLCBndWlkLkRhdGEzLCBndWlkLkRhdGE0WzBdLCBndWlkLkRhdGE0WzFdLCBndWlkLkRhdGE0WzJdLCBndWlkLkRhdGE0WzNdLCBndWlkLkRhdGE0WzRdLCBndWlkLkRhdGE0WzVdLCBndWlkLkRhdGE0WzZdLCBndWlkLkRhdGE0WzddCisKK3ZvaWQgb3RMb2coUENTVFIgYUZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBhRm9ybWF0KTsKKworICAgIENIQVIgbG9nU3RyaW5nWzUxMl0gPSB7IDAgfTsKKyAgICBpbnQgY2hhcnNXcml0dGVuID0gdnNwcmludGZfcyhsb2dTdHJpbmcsIHNpemVvZihsb2dTdHJpbmcpLCBhRm9ybWF0LCBhcmdzKTsKKyAgICBpZiAoY2hhcnNXcml0dGVuID4gMCkgT3V0cHV0RGVidWdTdHJpbmdBKGxvZ1N0cmluZyk7CisKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKK01haW5QYWdlOjpNYWluUGFnZSgpIDogX290QXBpKG51bGxwdHIpCit7CisgICAgSW5pdGlhbGl6ZUNvbXBvbmVudCgpOworCisgICAgSW50ZXJmYWNlQ29uZmlnQ2FuY2VsQnV0dG9uLT5DbGljayArPQorICAgICAgICByZWYgbmV3IFJvdXRlZEV2ZW50SGFuZGxlcigKKyAgICAgICAgICAgIFs9XShQbGF0Zm9ybTo6T2JqZWN0XiwgUm91dGVkRXZlbnRBcmdzXikgeworICAgICAgICAgICAgICAgIHRoaXMtPkludGVyZmFjZUNvbmZpZ3VyYXRpb24tPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICAgICAgICAgIHRoaXMtPl9jdXJBZGFwdGVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICApOworICAgIEludGVyZmFjZUNvbmZpZ09rQnV0dG9uLT5DbGljayArPQorICAgICAgICByZWYgbmV3IFJvdXRlZEV2ZW50SGFuZGxlcigKKyAgICAgICAgICAgIFs9XShQbGF0Zm9ybTo6T2JqZWN0XiwgUm91dGVkRXZlbnRBcmdzXikgeworICAgICAgICAgICAgICAgIHRoaXMtPkludGVyZmFjZUNvbmZpZ3VyYXRpb24tPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICAgICAgICAgIHRoaXMtPkNvbm5lY3ROZXR3b3JrKF9jdXJBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLT5fY3VyQWRhcHRlciA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgKTsKKyAgICBJbnRlcmZhY2VEZXRhaWxzQ2xvc2VCdXR0b24tPkNsaWNrICs9CisgICAgICAgIHJlZiBuZXcgUm91dGVkRXZlbnRIYW5kbGVyKAorICAgICAgICAgICAgWz1dKFBsYXRmb3JtOjpPYmplY3ReLCBSb3V0ZWRFdmVudEFyZ3NeKSB7CisgICAgICAgICAgICAgICAgdGhpcy0+SW50ZXJmYWNlRGV0YWlscy0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpDb2xsYXBzZWQ7CisgICAgICAgICAgICB9CisgICAgKTsKKyAgICBUYWxrLT5DbGljayArPQorICAgICAgICByZWYgbmV3IFJvdXRlZEV2ZW50SGFuZGxlcigKKyAgICAgICAgICAgIFs9XShQbGF0Zm9ybTo6T2JqZWN0XiwgUm91dGVkRXZlbnRBcmdzXikgeworICAgICAgICAgICAgICAgIHRoaXMtPlRocmVhZEdyaWQtPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICAgICAgICAgIHRoaXMtPlRhbGtHcmlkLT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgICAgICAgICB9CisgICAgKTsKKworICAgIFRsa0dyaWQtPkluaXQodGhpcyk7Cit9CisKK3ZvaWQgTWFpblBhZ2U6Ok9uTmF2aWdhdGVkVG8oTmF2aWdhdGlvbkV2ZW50QXJnc14gZSkKK3sKKyAgICBMb2FkZWQgKz0gcmVmIG5ldyBSb3V0ZWRFdmVudEhhbmRsZXIodGhpcywgJk1haW5QYWdlOjpPbkxvYWRlZCk7CisgICAgVW5sb2FkZWQgKz0gcmVmIG5ldyBSb3V0ZWRFdmVudEhhbmRsZXIodGhpcywgJk1haW5QYWdlOjpPblVubG9hZGVkKTsKK30KKwordm9pZCBNYWluUGFnZTo6T25Mb2FkZWQoT2JqZWN0XiBzZW5kZXIsIFJvdXRlZEV2ZW50QXJnc14gZSkKK3sKKyAgICB0cnkKKyAgICB7CisgICAgICAgIC8vIEluaXRpYWxpemUgYXBpIGhhbmRsZQorICAgICAgICBfb3RBcGkgPSByZWYgbmV3IG90QXBpKCk7CisKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIHN0YXRlIGNoYW5nZXMKKyAgICAgICAgX2FkYXB0ZXJBcnJpdmFsVG9rZW4gPQorICAgICAgICAgICAgX290QXBpLT5BZGFwdGVyQXJyaXZhbCArPQorICAgICAgICAgICAgICAgIHJlZiBuZXcgb3RBZGFwdGVyQXJyaXZhbERlbGVnYXRlKAorICAgICAgICAgICAgICAgICAgICBbPV0ob3RBZGFwdGVyXiBhZGFwdGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgb24gdGhlIFVJIHRocmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+RGlzcGF0Y2hlci0+UnVuQXN5bmMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93czo6VUk6OkNvcmU6OkNvcmVEaXNwYXRjaGVyUHJpb3JpdHk6Ok5vcm1hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYgbmV3IFdpbmRvd3M6OlVJOjpDb3JlOjpEaXNwYXRjaGVkSGFuZGxlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+QWRkQWRhcHRlclRvTGlzdChhZGFwdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIEVudW1lcmF0ZSB0aGUgYWRhcHRlciBsaXN0CisgICAgICAgIGF1dG8gYWRhcHRlcnMgPSBfb3RBcGktPkdldEFkYXB0ZXJzKCk7CisgICAgICAgIGZvciAoYXV0byYmIGFkYXB0ZXIgOiBhZGFwdGVycykgeworICAgICAgICAgICAgQWRkQWRhcHRlclRvTGlzdChhZGFwdGVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXikKKyAgICB7CisgICAgfQorfQorCit2b2lkIE1haW5QYWdlOjpPblVubG9hZGVkKE9iamVjdF4gc2VuZGVyLCBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgaWYgKF9vdEFwaSkKKyAgICB7CisgICAgICAgIC8vIFVucmVnaXN0ZXIKKyAgICAgICAgX290QXBpLT5BZGFwdGVyQXJyaXZhbCAtPSBfYWRhcHRlckFycml2YWxUb2tlbjsKKworICAgICAgICAvLyBDbGVhciBjdXJyZW50IGFkYXB0ZXIKKyAgICAgICAgX2N1ckFkYXB0ZXIgPSBudWxscHRyOworCisgICAgICAgIC8vIFJlbW92ZSB0aGUgYWRhcHRlciBsaXN0CisgICAgICAgIGF1dG8gYWRhcHRlcnMgPSBfb3RBcGktPkdldEFkYXB0ZXJzKCk7CisgICAgICAgIGZvciAoYXV0byYmIGFkYXB0ZXIgOiBhZGFwdGVycykgeworICAgICAgICAgICAgYWRhcHRlci0+SW52b2tlQWRhcHRlclJlbW92YWwoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZyZWUgdGhlIGFwaSBoYW5kbGUKKyAgICAgICAgX290QXBpID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgTWFpblBhZ2U6Ok9uUmVzdW1pbmcoKQoreworfQorCit2b2lkIE1haW5QYWdlOjpTaG93SW50ZXJmYWNlRGV0YWlscyhvdEFkYXB0ZXJeIGFkYXB0ZXIpCit7CisgICAgdHJ5CisgICAgeworICAgICAgICBJbnRlcmZhY2VNYWNBZGRyZXNzLT5UZXh0ID0gb3RBcGk6Ok1hY1RvU3RyaW5nKGFkYXB0ZXItPkV4dGVuZGVkQWRkcmVzcyk7CisgICAgICAgIEludGVyZmFjZU1MX0VJRC0+VGV4dCA9IGFkYXB0ZXItPk1lc2hMb2NhbEVpZC0+VG9TdHJpbmcoKTsKKyAgICAgICAgSW50ZXJmYWNlUkxPQy0+VGV4dCA9IG90QXBpOjpSbG9jMTZUb1N0cmluZyhhZGFwdGVyLT5SbG9jMTYpOworCisgICAgICAgIGlmIChhZGFwdGVyLT5TdGF0ZSA+IG90VGhyZWFkU3RhdGU6OkNoaWxkKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50OF90IGluZGV4ID0gMDsKKyAgICAgICAgICAgIG90Q2hpbGRJbmZvIGNoaWxkSW5mbzsKKyAgICAgICAgICAgIHdoaWxlIChPVF9FUlJPUl9OT05FID09IG90VGhyZWFkR2V0Q2hpbGRJbmZvQnlJbmRleCgob3RJbnN0YW5jZSopKHZvaWQqKWFkYXB0ZXItPlJhd0hhbmRsZSwgaW5kZXgsICZjaGlsZEluZm8pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdDSEFSIHN6VGV4dFs2NF0gPSB7IDAgfTsKKyAgICAgICAgICAgIHN3cHJpbnRmX3Moc3pUZXh0LCA2NCwgTCIlZCIsIGluZGV4KTsKKyAgICAgICAgICAgIEludGVyZmFjZUNoaWxkcmVuLT5UZXh0ID0gcmVmIG5ldyBTdHJpbmcoc3pUZXh0KTsKKworICAgICAgICAgICAgSW50ZXJmYWNlTmVpZ2hib3JzLT5UZXh0ID0gTCJ1bmtub3duIjsKKworICAgICAgICAgICAgSW50ZXJmYWNlTmVpZ2hib3JzLT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgICAgICAgICBJbnRlcmZhY2VOZWlnaGJvcnNUZXh0LT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgICAgICAgICBJbnRlcmZhY2VDaGlsZHJlbi0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgICAgICAgICAgSW50ZXJmYWNlQ2hpbGRyZW5UZXh0LT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaG93IHRoZSBkZXRhaWxzCisgICAgICAgIEludGVyZmFjZURldGFpbHMtPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbl4pCisgICAgeworCisgICAgfQorfQorCit2b2lkIE1haW5QYWdlOjpBZGRBZGFwdGVyVG9MaXN0KG90QWRhcHRlcl4gYWRhcHRlcikKK3sKKyAgICB0cnkKKyAgICB7CisgICAgICAgIEdVSUQgaW50ZXJmYWNlR3VpZCA9IGFkYXB0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIFdDSEFSIHN6TmFtZVsyNTZdID0geyAwIH07CisgICAgICAgIHN3cHJpbnRmX3Moc3pOYW1lLCAyNTYsIEdVSURfRk9STUFULCBHVUlEX0FSRyhpbnRlcmZhY2VHdWlkKSk7CisKKyAgICAgICAgYXV0byBJbnRlcmZhY2VTdGFja1BhbmVsID0gcmVmIG5ldyBTdGFja1BhbmVsKCk7CisgICAgICAgIEludGVyZmFjZVN0YWNrUGFuZWwtPk5hbWUgPSByZWYgbmV3IFN0cmluZyhzek5hbWUpOworICAgICAgICBJbnRlcmZhY2VTdGFja1BhbmVsLT5PcmllbnRhdGlvbiA9IE9yaWVudGF0aW9uOjpIb3Jpem9udGFsOworCisgICAgICAgIG90TG9nKCIlUyBhcnJpdmFsIVxuIiwgSW50ZXJmYWNlU3RhY2tQYW5lbC0+TmFtZS0+RGF0YSgpKTsKKworICAgICAgICAvLyBCYXNpYyBkZXNjcmlwdGlvbiB0ZXh0CisgICAgICAgIGF1dG8gSW50ZXJmYWNlVGV4dEJsb2NrID0gcmVmIG5ldyBUZXh0QmxvY2soKTsKKyAgICAgICAgSW50ZXJmYWNlVGV4dEJsb2NrLT5UZXh0ID0gcmVmIG5ldyBTdHJpbmcoTCJvcGVudGhyZWFkIGludGVyZmFjZSIpOworICAgICAgICBJbnRlcmZhY2VUZXh0QmxvY2stPkZvbnRTaXplID0gMTY7CisgICAgICAgIEludGVyZmFjZVRleHRCbG9jay0+TWFyZ2luID0gVGhpY2tuZXNzKDEwKTsKKyAgICAgICAgSW50ZXJmYWNlVGV4dEJsb2NrLT5UZXh0V3JhcHBpbmcgPSBUZXh0V3JhcHBpbmc6OldyYXA7CisgICAgICAgIEludGVyZmFjZVN0YWNrUGFuZWwtPkNoaWxkcmVuLT5BcHBlbmQoSW50ZXJmYWNlVGV4dEJsb2NrKTsKKworICAgICAgICAvLyBDb25uZWN0IGJ1dHRvbgorICAgICAgICBhdXRvIENvbm5lY3RCdXR0b24gPSByZWYgbmV3IEJ1dHRvbigpOworICAgICAgICBDb25uZWN0QnV0dG9uLT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OkNvbGxhcHNlZDsKKyAgICAgICAgQ29ubmVjdEJ1dHRvbi0+Q29udGVudCA9IHJlZiBuZXcgU3RyaW5nKEwiQ29ubmVjdCIpOworICAgICAgICBDb25uZWN0QnV0dG9uLT5DbGljayArPQorICAgICAgICAgICAgcmVmIG5ldyBSb3V0ZWRFdmVudEhhbmRsZXIoCisgICAgICAgICAgICAgICAgWz1dKFBsYXRmb3JtOjpPYmplY3ReLCBSb3V0ZWRFdmVudEFyZ3NeKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMtPl9jdXJBZGFwdGVyID0gYWRhcHRlcjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+SW50ZXJmYWNlQ29uZmlndXJhdGlvbi0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICk7CisgICAgICAgIEludGVyZmFjZVN0YWNrUGFuZWwtPkNoaWxkcmVuLT5BcHBlbmQoQ29ubmVjdEJ1dHRvbik7CisKKyAgICAgICAgLy8gRGV0YWlscyBidXR0b24KKyAgICAgICAgYXV0byBEZXRhaWxzQnV0dG9uID0gcmVmIG5ldyBCdXR0b24oKTsKKyAgICAgICAgRGV0YWlsc0J1dHRvbi0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpDb2xsYXBzZWQ7CisgICAgICAgIERldGFpbHNCdXR0b24tPkNvbnRlbnQgPSByZWYgbmV3IFN0cmluZyhMIkRldGFpbHMiKTsKKyAgICAgICAgRGV0YWlsc0J1dHRvbi0+Q2xpY2sgKz0KKyAgICAgICAgICAgIHJlZiBuZXcgUm91dGVkRXZlbnRIYW5kbGVyKAorICAgICAgICAgICAgICAgIFs9XShQbGF0Zm9ybTo6T2JqZWN0XiwgUm91dGVkRXZlbnRBcmdzXikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLT5TaG93SW50ZXJmYWNlRGV0YWlscyhhZGFwdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICApOworICAgICAgICBJbnRlcmZhY2VTdGFja1BhbmVsLT5DaGlsZHJlbi0+QXBwZW5kKERldGFpbHNCdXR0b24pOworCisgICAgICAgIC8vIERpc2Nvbm5lY3QgYnV0dG9uCisgICAgICAgIGF1dG8gRGlzY29ubmVjdEJ1dHRvbiA9IHJlZiBuZXcgQnV0dG9uKCk7CisgICAgICAgIERpc2Nvbm5lY3RCdXR0b24tPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICBEaXNjb25uZWN0QnV0dG9uLT5Db250ZW50ID0gcmVmIG5ldyBTdHJpbmcoTCJEaXNjb25uZWN0Iik7CisgICAgICAgIERpc2Nvbm5lY3RCdXR0b24tPkNsaWNrICs9CisgICAgICAgICAgICByZWYgbmV3IFJvdXRlZEV2ZW50SGFuZGxlcigKKyAgICAgICAgICAgICAgICBbPV0oUGxhdGZvcm06Ok9iamVjdF4sIFJvdXRlZEV2ZW50QXJnc14pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+RGlzY29ubmVjdE5ldHdvcmsoYWRhcHRlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAgSW50ZXJmYWNlU3RhY2tQYW5lbC0+Q2hpbGRyZW4tPkFwcGVuZChEaXNjb25uZWN0QnV0dG9uKTsKKworICAgICAgICAvLyBEZWxlZ2F0ZSBmb3IgaGFuZGxpbmcgcm9sZSBjaGFuZ2VzCisgICAgICAgIGF1dG8gT25BZGFwdGVyUm9sZUNoYW5nZWQgPQorICAgICAgICAgICAgWz1dKCkgeworICAgICAgICAgICAgICAgIEdVSUQgaW50ZXJmYWNlR3VpZCA9IGFkYXB0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgICAgICAgICAgYXV0byBzdGF0ZSA9IGFkYXB0ZXItPlN0YXRlOworICAgICAgICAgICAgICAgIGF1dG8gc3RhdGVTdHIgPSBvdEFwaTo6VGhyZWFkU3RhdGVUb1N0cmluZyhhZGFwdGVyLT5TdGF0ZSk7CisKKyAgICAgICAgICAgICAgICBXQ0hBUiBzelRleHRbMjU2XSA9IHsgMCB9OworICAgICAgICAgICAgICAgIHN3cHJpbnRmX3Moc3pUZXh0LCAyNTYsIEdVSURfRk9STUFUIEwiXHJcblx0JXNcclxuXHQlcyIsCisgICAgICAgICAgICAgICAgICAgIEdVSURfQVJHKGludGVyZmFjZUd1aWQpLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZVN0ci0+RGF0YSgpLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA+PSBvdFRocmVhZFN0YXRlOjpDaGlsZCA/IAorICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+TWVzaExvY2FsRWlkLT5Ub1N0cmluZygpLT5EYXRhKCkgOiAKKyAgICAgICAgICAgICAgICAgICAgICAgIEwiIik7CisKKyAgICAgICAgICAgICAgICBJbnRlcmZhY2VUZXh0QmxvY2stPlRleHQgPSByZWYgbmV3IFN0cmluZyhzelRleHQpOworCisgICAgICAgICAgICAgICAgb3RMb2coIiVTIHN0YXRlID0gJVNcbiIsIEludGVyZmFjZVN0YWNrUGFuZWwtPk5hbWUtPkRhdGEoKSwgc3RhdGVTdHItPkRhdGEoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gb3RUaHJlYWRTdGF0ZTo6RGlzYWJsZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDb25uZWN0QnV0dG9uLT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgICAgICAgICAgICAgICAgIERldGFpbHNCdXR0b24tPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICAgICAgICAgICAgICBEaXNjb25uZWN0QnV0dG9uLT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OkNvbGxhcHNlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ29ubmVjdEJ1dHRvbi0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpDb2xsYXBzZWQ7CisgICAgICAgICAgICAgICAgICAgIERldGFpbHNCdXR0b24tPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICAgICAgICAgICAgICAgICAgRGlzY29ubmVjdEJ1dHRvbi0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIHJvbGUgY2hhbmdlIGNhbGxiYWNrcworICAgICAgICBhdXRvIGFkYXB0ZXJSb2xlQ2hhbmdlZFRva2VuID0gCisgICAgICAgICAgICBhZGFwdGVyLT5OZXRSb2xlQ2hhbmdlZCArPQorICAgICAgICAgICAgICAgIHJlZiBuZXcgb3ROZXRSb2xlQ2hhbmdlZERlbGVnYXRlKAorICAgICAgICAgICAgICAgICAgICBbPV0oYXV0byBzZW5kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGV4dCBvbiB0aGUgVUkgdGhyZWFkCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5EaXNwYXRjaGVyLT5SdW5Bc3luYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3dzOjpVSTo6Q29yZTo6Q29yZURpc3BhdGNoZXJQcmlvcml0eTo6Tm9ybWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZiBuZXcgV2luZG93czo6VUk6OkNvcmU6OkRpc3BhdGNoZWRIYW5kbGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbkFkYXB0ZXJSb2xlQ2hhbmdlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGFkZHJlc3MgY2hhbmdlIGNhbGxiYWNrcworICAgICAgICBhdXRvIGFkYXB0ZXJNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkVG9rZW4gPQorICAgICAgICAgICAgYWRhcHRlci0+SXBNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkICs9CisgICAgICAgICAgICAgICAgcmVmIG5ldyBvdElwTWVzaExvY2FsQWRkcmVzQ2hhbmdlZERlbGVnYXRlKAorICAgICAgICAgICAgICAgICAgICBbPV0oYXV0byBzZW5kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGV4dCBvbiB0aGUgVUkgdGhyZWFkCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5EaXNwYXRjaGVyLT5SdW5Bc3luYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3dzOjpVSTo6Q29yZTo6Q29yZURpc3BhdGNoZXJQcmlvcml0eTo6Tm9ybWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZiBuZXcgV2luZG93czo6VUk6OkNvcmU6OkRpc3BhdGNoZWRIYW5kbGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbkFkYXB0ZXJSb2xlQ2hhbmdlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGFkYXB0ZXIgcmVtb3ZhbCBjYWxsYmFja3MKKyAgICAgICAgV2luZG93czo6Rm91bmRhdGlvbjo6RXZlbnRSZWdpc3RyYXRpb25Ub2tlbiBhZGFwdGVyUmVtb3ZhbFRva2VuOworICAgICAgICBhZGFwdGVyUmVtb3ZhbFRva2VuID0KKyAgICAgICAgICAgIGFkYXB0ZXItPkFkYXB0ZXJSZW1vdmFsICs9CisgICAgICAgICAgICAgICAgcmVmIG5ldyBvdEFkYXB0ZXJSZW1vdmFsRGVsZWdhdGUoCisgICAgICAgICAgICAgICAgICAgIFs9XShvdEFkYXB0ZXJeIGFkYXB0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVucmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPk5ldFJvbGVDaGFuZ2VkIC09IGFkYXB0ZXJSb2xlQ2hhbmdlZFRva2VuOworICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+SXBNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkIC09IGFkYXB0ZXJNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkVG9rZW47CisgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5BZGFwdGVyUmVtb3ZhbCAtPSBhZGFwdGVyUmVtb3ZhbFRva2VuOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGl0ZW0gb24gdGhlIFVJIHRocmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+RGlzcGF0Y2hlci0+UnVuQXN5bmMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93czo6VUk6OkNvcmU6OkNvcmVEaXNwYXRjaGVyUHJpb3JpdHk6Ok5vcm1hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYgbmV3IFdpbmRvd3M6OlVJOjpDb3JlOjpEaXNwYXRjaGVkSGFuZGxlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHRoaXMtPkludGVyZmFjZUxpc3QtPkl0ZW1zLT5TaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBJdGVtID0gZHluYW1pY19jYXN0PFN0YWNrUGFuZWxePih0aGlzLT5JbnRlcmZhY2VMaXN0LT5JdGVtcy0+R2V0QXQoaSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJdGVtID09IEludGVyZmFjZVN0YWNrUGFuZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdExvZygiJVMgcmVtb3ZhbCFcbiIsIEludGVyZmFjZVN0YWNrUGFuZWwtPk5hbWUtPkRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkludGVyZmFjZUxpc3QtPkl0ZW1zLT5SZW1vdmVBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIFRyaWdnZXIgdGhlIGluaXRpYWwgcm9sZSBjaGFuZ2UKKyAgICAgICAgT25BZGFwdGVyUm9sZUNoYW5nZWQoKTsKKworICAgICAgICAvLyBBZGQgdGhlIGludGVyZmFjZSB0byB0aGUgbGlzdAorICAgICAgICBJbnRlcmZhY2VMaXN0LT5JdGVtcy0+QXBwZW5kKEludGVyZmFjZVN0YWNrUGFuZWwpOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXikKKyAgICB7CisgICAgfQorfQorCit2b2lkIE1haW5QYWdlOjpDb25uZWN0TmV0d29yayhvdEFkYXB0ZXJeIGFkYXB0ZXIpCit7CisgICAgdHJ5CisgICAgeworICAgICAgICBHVUlEIGludGVyZmFjZUd1aWQgPSBhZGFwdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICBXQ0hBUiBzek5hbWVbMjU2XSA9IHsgMCB9OworICAgICAgICBzd3ByaW50Zl9zKHN6TmFtZSwgMjU2LCBHVUlEX0ZPUk1BVCwgR1VJRF9BUkcoaW50ZXJmYWNlR3VpZCkpOworICAgICAgICBvdExvZygiJVMgc3RhcnRpbmcgY29ubmVjdGlvbi4uLlxuIiwgc3pOYW1lKTsKKworICAgICAgICAvLyBDb25maWd1cmUKKyAgICAgICAgYWRhcHRlci0+TmV0d29ya05hbWUgPSBJbnRlcmZhY2VDb25maWdOYW1lLT5UZXh0OworICAgICAgICBhZGFwdGVyLT5NYXN0ZXJLZXkgPSBJbnRlcmZhY2VDb25maWdLZXktPlRleHQ7CisgICAgICAgIGFkYXB0ZXItPkNoYW5uZWwgPSAodWludDhfdClJbnRlcmZhY2VDb25maWdDaGFubmVsLT5WYWx1ZTsKKyAgICAgICAgYWRhcHRlci0+TWF4QWxsb3dlZENoaWxkcmVuID0gKHVpbnQ4X3QpSW50ZXJmYWNlQ29uZmlnTWF4Q2hpbGRyZW4tPlZhbHVlOworICAgICAgICBhZGFwdGVyLT5QYW5JZCA9IDB4NDU2NzsKKworICAgICAgICAvLyBCcmluZyB1cCB0aGUgaW50ZXJmYWNlIGFuZCBzdGFydCB0aGUgVGhyZWFkIGxvZ2ljCisgICAgICAgIGFkYXB0ZXItPklwRW5hYmxlZCA9IHRydWU7CisgICAgICAgIGFkYXB0ZXItPlRocmVhZEVuYWJsZWQgPSB0cnVlOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXikKKyAgICB7CisKKyAgICB9Cit9CisKK3ZvaWQgTWFpblBhZ2U6OkRpc2Nvbm5lY3ROZXR3b3JrKG90QWRhcHRlcl4gYWRhcHRlcikKK3sKKyAgICB0cnkKKyAgICB7CisgICAgICAgIEdVSUQgaW50ZXJmYWNlR3VpZCA9IGFkYXB0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIFdDSEFSIHN6TmFtZVsyNTZdID0geyAwIH07CisgICAgICAgIHN3cHJpbnRmX3Moc3pOYW1lLCAyNTYsIEdVSURfRk9STUFULCBHVUlEX0FSRyhpbnRlcmZhY2VHdWlkKSk7CisgICAgICAgIG90TG9nKCIlUyBkaXNjb25uZWN0aW5nLi4uXG4iLCBzek5hbWUpOworCisgICAgICAgIC8vIFN0b3AgdGhlIFRocmVhZCBuZXR3b3JrIGFuZCBicmluZyBkb3duIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgYWRhcHRlci0+VGhyZWFkRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBhZGFwdGVyLT5JcEVuYWJsZWQgPSBmYWxzZTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbl4pCisgICAgeworCisgICAgfQorfQorCitXaW5kb3dzOjpVSTo6WGFtbDo6VUlFbGVtZW50XgorTWFpblBhZ2U6OlRocmVhZEdyaWQ6OmdldCgpCit7CisgICAgcmV0dXJuIFRocmRHcmlkOworfQorCitXaW5kb3dzOjpVSTo6WGFtbDo6VUlFbGVtZW50XgorTWFpblBhZ2U6OlRhbGtHcmlkOjpnZXQoKQoreworICAgIHJldHVybiBUbGtHcmlkOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL01haW5QYWdlLnhhbWwuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9NYWluUGFnZS54YW1sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkM2U3YgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9NYWluUGFnZS54YW1sLmgKQEAgLTAsMCArMSw3NyBAQAor77u/LyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYWluUGFnZS5nLmgiCisjaW5jbHVkZSAiSU1haW5QYWdlVUlFbGVtZW50cy5oIgorCituYW1lc3BhY2Ugb3QKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEFuIGVtcHR5IHBhZ2UgdGhhdCBjYW4gYmUgdXNlZCBvbiBpdHMgb3duIG9yIG5hdmlnYXRlZCB0byB3aXRoaW4gYSBGcmFtZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIHB1YmxpYyByZWYgY2xhc3MgTWFpblBhZ2Ugc2VhbGVkIDogcHVibGljIElNYWluUGFnZVVJRWxlbWVudHMKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBNYWluUGFnZSgpOworCisgICAgICAgIHZvaWQgT25SZXN1bWluZygpOworCisgICAgICAgIHZvaWQgQ29ubmVjdE5ldHdvcmsob3RBZGFwdGVyXiBhZGFwdGVyKTsKKyAgICAgICAgdm9pZCBTaG93SW50ZXJmYWNlRGV0YWlscyhvdEFkYXB0ZXJeIGFkYXB0ZXIpOworICAgICAgICB2b2lkIERpc2Nvbm5lY3ROZXR3b3JrKG90QWRhcHRlcl4gYWRhcHRlcik7CisKKyAgICAgICAgcHJvcGVydHkgV2luZG93czo6VUk6OlhhbWw6OlVJRWxlbWVudF4gVGhyZWFkR3JpZAorICAgICAgICB7CisgICAgICAgICAgICB2aXJ0dWFsIFdpbmRvd3M6OlVJOjpYYW1sOjpVSUVsZW1lbnReIGdldCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwcm9wZXJ0eSBXaW5kb3dzOjpVSTo6WGFtbDo6VUlFbGVtZW50XiBUYWxrR3JpZAorICAgICAgICB7CisgICAgICAgICAgIHZpcnR1YWwgV2luZG93czo6VUk6OlhhbWw6OlVJRWxlbWVudF4gZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBPbk5hdmlnYXRlZFRvKFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uRXZlbnRBcmdzXiBlKSBvdmVycmlkZTsKKworICAgIHByaXZhdGU6CisKKyAgICAgICAgdm9pZCBPbkxvYWRlZChQbGF0Zm9ybTo6T2JqZWN0XiBzZW5kZXIsIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUpOworICAgICAgICB2b2lkIE9uVW5sb2FkZWQoUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKTsKKworICAgICAgICB2b2lkIEFkZEFkYXB0ZXJUb0xpc3Qob3RBZGFwdGVyXiBhZGFwdGVyKTsKKyAgICAgICAgCisgICAgICAgIG90QXBpXiBfb3RBcGk7CisKKyAgICAgICAgV2luZG93czo6Rm91bmRhdGlvbjo6RXZlbnRSZWdpc3RyYXRpb25Ub2tlbiBfYWRhcHRlckFycml2YWxUb2tlbjsKKworICAgICAgICBvdEFkYXB0ZXJeIF9jdXJBZGFwdGVyOworCisgICAgfTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9PcGVuVGhyZWFkX1RlbXBvcmFyeUtleS5wZnggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvT3BlblRocmVhZF9UZW1wb3JhcnlLZXkucGZ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YjQ3NTUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvT3BlblRocmVhZF9UZW1wb3JhcnlLZXkucGZ4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9QYWNrYWdlLmFwcHhtYW5pZmVzdCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9QYWNrYWdlLmFwcHhtYW5pZmVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzM2ZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1BhY2thZ2UuYXBweG1hbmlmZXN0CkBAIC0wLDAgKzEsMzAgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UGFja2FnZSB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hcHB4L21hbmlmZXN0L2ZvdW5kYXRpb24vd2luZG93czEwIiB4bWxuczptcD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hcHB4LzIwMTQvcGhvbmUvbWFuaWZlc3QiIHhtbG5zOnVhcD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hcHB4L21hbmlmZXN0L3VhcC93aW5kb3dzMTAiIElnbm9yYWJsZU5hbWVzcGFjZXM9InVhcCBtcCI+CisgIDxJZGVudGl0eSBOYW1lPSI3OTI2ZTNmOS04MzVlLTQyMWMtOTRjMS0yODEyZjM1NjlmNGEiIFB1Ymxpc2hlcj0iQ049bmliYW5rcyIgVmVyc2lvbj0iMS4wLjEyLjAiIC8+CisgIDxtcDpQaG9uZUlkZW50aXR5IFBob25lUHJvZHVjdElkPSI3OTI2ZTNmOS04MzVlLTQyMWMtOTRjMS0yODEyZjM1NjlmNGEiIFBob25lUHVibGlzaGVySWQ9IjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIgLz4KKyAgPFByb3BlcnRpZXM+CisgICAgPERpc3BsYXlOYW1lPk9wZW5UaHJlYWQ8L0Rpc3BsYXlOYW1lPgorICAgIDxQdWJsaXNoZXJEaXNwbGF5TmFtZT5PcGVuVGhyZWFkPC9QdWJsaXNoZXJEaXNwbGF5TmFtZT4KKyAgICA8TG9nbz5Bc3NldHNcU3RvcmVMb2dvLnBuZzwvTG9nbz4KKyAgPC9Qcm9wZXJ0aWVzPgorICA8RGVwZW5kZW5jaWVzPgorICAgIDxUYXJnZXREZXZpY2VGYW1pbHkgTmFtZT0iV2luZG93cy5Vbml2ZXJzYWwiIE1pblZlcnNpb249IjEwLjAuMC4wIiBNYXhWZXJzaW9uVGVzdGVkPSIxMC4wLjAuMCIgLz4KKyAgPC9EZXBlbmRlbmNpZXM+CisgIDxSZXNvdXJjZXM+CisgICAgPFJlc291cmNlIExhbmd1YWdlPSJ4LWdlbmVyYXRlIiAvPgorICA8L1Jlc291cmNlcz4KKyAgPEFwcGxpY2F0aW9ucz4KKyAgICA8QXBwbGljYXRpb24gSWQ9IkFwcCIgRXhlY3V0YWJsZT0iJHRhcmdldG5hbWV0b2tlbiQuZXhlIiBFbnRyeVBvaW50PSJvdC5BcHAiPgorICAgICAgPHVhcDpWaXN1YWxFbGVtZW50cyBEaXNwbGF5TmFtZT0iT3BlblRocmVhZCIgU3F1YXJlMTUweDE1MExvZ289IkFzc2V0c1xTcXVhcmUxNTB4MTUwTG9nby5wbmciIFNxdWFyZTQ0eDQ0TG9nbz0iQXNzZXRzXFNxdWFyZTQ0eDQ0TG9nby5wbmciIERlc2NyaXB0aW9uPSJPcGVuVGhyZWFkIiBCYWNrZ3JvdW5kQ29sb3I9IndoaXRlIj4KKyAgICAgICAgPHVhcDpEZWZhdWx0VGlsZSBXaWRlMzEweDE1MExvZ289IkFzc2V0c1xXaWRlMzEweDE1MExvZ28ucG5nIj4KKyAgICAgICAgPC91YXA6RGVmYXVsdFRpbGU+CisgICAgICAgIDx1YXA6U3BsYXNoU2NyZWVuIEltYWdlPSJBc3NldHNcU3BsYXNoU2NyZWVuLnBuZyIgQmFja2dyb3VuZENvbG9yPSJ3aGl0ZSIgLz4KKyAgICAgIDwvdWFwOlZpc3VhbEVsZW1lbnRzPgorICAgIDwvQXBwbGljYXRpb24+CisgIDwvQXBwbGljYXRpb25zPgorICA8Q2FwYWJpbGl0aWVzPgorICAgIDxDYXBhYmlsaXR5IE5hbWU9ImludGVybmV0Q2xpZW50IiAvPgorICAgIDxDYXBhYmlsaXR5IE5hbWU9InByaXZhdGVOZXR3b3JrQ2xpZW50U2VydmVyIiAvPgorICAgIDxDYXBhYmlsaXR5IE5hbWU9ImludGVybmV0Q2xpZW50U2VydmVyIiAvPgorICA8L0NhcGFiaWxpdGllcz4KKzwvUGFja2FnZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvUHJvdG9jb2wuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9Qcm90b2NvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMjVlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvUHJvdG9jb2wuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIG90Cit7CisKK3B1YmxpYyBlbnVtIGNsYXNzIFByb3RvY29sCit7CisgICAgVENQLAorICAgIFVEUCwKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvUkVBRE1FLm1kIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2IyZThmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1JFQURNRS5tZApAQCAtMCwwICsxLDI2IEBACisjIE9wZW5UaHJlYWQgQXBwIGZvciBXaW5kb3dzICMKKworVGhpcyBzYW1wbGUgYXBwIHByb3ZpZGVzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGludGVyZmFjZSB3aXRoIHRoZSBPcGVuVGhyZWFkIEFQSSBhbmQgdGFsayB0byBlYWNoIG90aGVyIGluIGEKK1tVbml2ZXJzYWwgV2luZG93cyBBcHBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9hcHBzKS4gVGhlIGFwcCBpcyB3cml0dGVuIGluIEMrKyAvQ1gKK2FuZCBwcm92aWRlcyBhIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgT3BlblRocmVhZCBBUEksIGhpZGluZyB0aGUgcmF3IEMvQysrIGludGVyZmFjZS4KKworVGhlIG1haW4gcGFnZSBvZiB0aGUgQXBwIGlzIGEgbGlzdCBvZiB0aGUgYXZhaWxhYmxlIGludGVyZmFjZXMsIHRoZWlyIGN1cnJlbnQgY29ubmVjdGlvbiBzdGF0ZSwKK3RoZWlyIGN1cnJlbnQgTUwtRUlEIElQdjYgYWRkcmVzcywgYW5kIGJ1dHRvbnMgdG8gY29ubmVjdC9kaXNjb25uZWN0IGFuZCB0byB2aWV3IHNvbWUgbW9yZSBkZXRhaWxzLgorCishW0ludGVyZmFjZSBMaXN0XSguLi8uLi8uLi9kb2MvaW1hZ2VzL3dpbmRvd3MtYXBwLWludGVyZmFjZS1saXN0LnBuZykKKworVGhlIGRldGFpbHMgbGlzdCBwcm92aWRlcyBzb21lIG1vcmUgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBleHRlbmRlZCBNQUMgYWRkcmVzcywgUkxPQzE2IGFuZCBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIGN1cnJlbnQgY2hpbGRyZW4uCisKKyFbSW50ZXJmYWNlIExpc3RdKC4uLy4uLy4uL2RvYy9pbWFnZXMvd2luZG93cy1hcHAtZGV0YWlscy5wbmcpCisKK1RoZSAiVGFsayIgYnV0dG9uIG9mIG1haW4gcGFnZSBzd2l0Y2hlcyB0aGUgdXNlciBpbnRlcmZhY2UgdG8gdGhlIHRhbGsgZnVjdGlvbmFsaXR5LiBUaGlzIGFwcCBhY3RzCitlaXRoZXIgYXMgYSBzZXJ2ZXIgb3IgYSBjbGllbnQgcm9sZSBhbmQgdGFsa3MgdG8gZWFjaCBvdGhlciBvdmVyIGEgVENQIG9yIGEgVURQIHByb3RvY29sLgorCitUaGUgc2VydmVyIGxpc3RlbnMgdG8gdGhlIGNsaWVudHMuCisKKyFbVGFsayBGdW5jdGlvbmFsaXR5XSguLi8uLi8uLi9kb2MvaW1hZ2VzL3dpbmRvd3MtYXBwLXRhbGstc2VydmVyLnBuZykKKworVGhlIGNsaWVudCBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIHNlcnZlciBhbmQgdGhlIHNlcnZlciBlY2hvcyB0aGF0IG1lc3NhZ2UgYmFjayB0byB0aGUgY2xpZW50LgorCishW1RhbGsgRnVuY3Rpb25hbGl0eV0oLi4vLi4vLi4vZG9jL2ltYWdlcy93aW5kb3dzLWFwcC10YWxrLWNsaWVudC5wbmcpCmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU2VydmVyQ29udHJvbC54YW1sIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1NlcnZlckNvbnRyb2wueGFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDA4YjJlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1NlcnZlckNvbnRyb2wueGFtbApAQCAtMCwwICsxLDEwNiBAQAor77u/PCEtLQorICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKzxVc2VyQ29udHJvbAorICAgIHg6Q2xhc3M9Im90LlNlcnZlckNvbnRyb2wiCisgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiIKKyAgICB4bWxuczp4PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbCIKKyAgICB4bWxuczpsb2NhbD0idXNpbmc6b3QiCisgICAgeG1sbnM6ZD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9leHByZXNzaW9uL2JsZW5kLzIwMDgiCisgICAgeG1sbnM6bWM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IgorICAgIG1jOklnbm9yYWJsZT0iZCI+CisgICAgPEdyaWQ+CisgICAgICAgIDxHcmlkLlJvd0RlZmluaXRpb25zPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSJBdXRvIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IkF1dG8iLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iMjAiLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSIyMCIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSJBdXRvIi8+CisgICAgICAgIDwvR3JpZC5Sb3dEZWZpbml0aW9ucz4KKyAgICAgICAgPEdyaWQuQ29sdW1uRGVmaW5pdGlvbnM+CisgICAgICAgICAgICA8Q29sdW1uRGVmaW5pdGlvbiBXaWR0aD0iQXV0byIvPgorICAgICAgICAgICAgPENvbHVtbkRlZmluaXRpb24gV2lkdGg9IjIwIi8+CisgICAgICAgICAgICA8Q29sdW1uRGVmaW5pdGlvbiBXaWR0aD0iKiIvPgorICAgICAgICA8L0dyaWQuQ29sdW1uRGVmaW5pdGlvbnM+CisgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgIEdyaWQuUm93PSIwIgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjAiCisgICAgICAgICAgICBUZXh0PSJTZXJ2ZXIgTmFtZSA6IgorICAgICAgICAgICAgLz4KKyAgICAgICAgPFRleHRCb3gKKyAgICAgICAgICAgIEdyaWQuUm93PSIwIgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjIiCisgICAgICAgICAgICB4Ok5hbWU9IlNlcnZlck5hbWUiCisgICAgICAgICAgICBXaWR0aD0iMzAwIgorICAgICAgICAgICAgSG9yaXpvbnRhbEFsaWdubWVudD0iTGVmdCIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgIEdyaWQuUm93PSIyIgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjAiCisgICAgICAgICAgICBUZXh0PSJTZXJ2ZXIgSVAgOiIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxUZXh0Qm94CisgICAgICAgICAgICBHcmlkLlJvdz0iMiIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIyIgorICAgICAgICAgICAgeDpOYW1lPSJTZXJ2ZXJJUCIKKyAgICAgICAgICAgIE1pbldpZHRoPSI1MDAiCisgICAgICAgICAgICAvPgorICAgICAgICA8VGV4dEJsb2NrCisgICAgICAgICAgICBHcmlkLlJvdz0iNCIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIwIgorICAgICAgICAgICAgVGV4dD0iU2VydmVyIFBvcnQgOiIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxUZXh0Qm94CisgICAgICAgICAgICBHcmlkLlJvdz0iNCIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIyIgorICAgICAgICAgICAgeDpOYW1lPSJTZXJ2ZXJQb3J0IgorICAgICAgICAgICAgV2lkdGg9IjEwMCIKKyAgICAgICAgICAgIEhvcml6b250YWxBbGlnbm1lbnQ9IkxlZnQiCisgICAgICAgICAgICAvPgorICAgICAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgT3JpZW50YXRpb249Ikhvcml6b250YWwiCisgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iVG9wIgorICAgICAgICAgICAgR3JpZC5Sb3c9IjYiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMCIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uU3Bhbj0iMyIKKyAgICAgICAgICAgID4KKyAgICAgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgICAgICBXaWR0aD0iNzUiCisgICAgICAgICAgICAgICAgQ29udGVudD0iTGlzdGVuIgorICAgICAgICAgICAgICAgIENsaWNrPSJMaXN0ZW5fQ2xpY2siCisgICAgICAgICAgICAgICAgTWFyZ2luPSIwLDAsNzUsMCIKKyAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgPEJ1dHRvbgorICAgICAgICAgICAgICAgIFdpZHRoPSI3NSIKKyAgICAgICAgICAgICAgICBDb250ZW50PSJFeGl0IgorICAgICAgICAgICAgICAgIENsaWNrPSJFeGl0X0NsaWNrIgorICAgICAgICAgICAgICAgIC8+CisgICAgICAgIDwvU3RhY2tQYW5lbD4KKyAgICA8L0dyaWQ+Cis8L1VzZXJDb250cm9sPgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1NlcnZlckNvbnRyb2wueGFtbC5jcHAgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU2VydmVyQ29udHJvbC54YW1sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzU0NWJkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1NlcnZlckNvbnRyb2wueGFtbC5jcHAKQEAgLTAsMCArMSwxMjQgQEAKK++7vy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwY2guaCIKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlICJTZXJ2ZXJDb250cm9sLnhhbWwuaCIKKyNpbmNsdWRlICJGYWN0b3J5LmgiCisjaW5jbHVkZSAiVGFsa0hlbHBlci5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK3VzaW5nIG5hbWVzcGFjZSBQbGF0Zm9ybTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM6OlByaW1pdGl2ZXM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkRhdGE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OklucHV0OwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpNZWRpYTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TmF2aWdhdGlvbjsKKworLy8gVGhlIFVzZXIgQ29udHJvbCBpdGVtIHRlbXBsYXRlIGlzIGRvY3VtZW50ZWQgYXQgaHR0cDovL2dvLm1pY3Jvc29mdC5jb20vZndsaW5rLz9MaW5rSWQ9MjM0MjM2CisKK1NlcnZlckNvbnRyb2w6OlNlcnZlckNvbnRyb2woKQoreworICAgIEluaXRpYWxpemVDb21wb25lbnQoKTsKKworICAgIFNlcnZlclBvcnQtPlRleHQgPSBERUZfUE9SVC5Ub1N0cmluZygpOworfQorCit2b2lkCitTZXJ2ZXJDb250cm9sOjpJbml0KAorICAgIElBc3luY1RocmVhZE5vdGlmeV4gIG5vdGlmeSwKKyAgICBJTWFpblBhZ2VVSUVsZW1lbnRzXiBtYWluUGFnZVVJRWxlbWVudHMpCit7CisgICAgX25vdGlmeSA9IHN0ZDo6bW92ZShub3RpZnkpOworICAgIF9tYWluUGFnZVVJRWxlbWVudHMgPSBzdGQ6Om1vdmUobWFpblBhZ2VVSUVsZW1lbnRzKTsKK30KKwordm9pZAorU2VydmVyQ29udHJvbDo6UHJvdG9jb2xDaGFuZ2VkKAorICAgIFByb3RvY29sIHByb3RvY29sKQoreworICAgIF9wcm90b2NvbCA9IHByb3RvY29sOworfQorCit2b2lkCitTZXJ2ZXJDb250cm9sOjpMaXN0ZW5fQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIHRyeQorICAgIHsKKyAgICAgICAgYXV0byBsaXN0ZW5lckFyZ3MgPSByZWYgbmV3IExpc3RlbmVyQXJncygpOworCisgICAgICAgIGxpc3RlbmVyQXJncy0+U2VydmVyTmFtZSA9IFNlcnZlck5hbWUtPlRleHQ7CisKKyAgICAgICAgYXV0byBzZXJ2ZXJJUCA9IFNlcnZlcklQLT5UZXh0OworICAgICAgICBpZiAoc2VydmVySVAtPklzRW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHLCAiTm8gU2VydmVyIElQIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBjaGVjayB2YWxpZCBjaGFycyBvZiBJcHY2IEFkZHJlc3MKKyAgICAgICAgaWYgKCFUYWxrSGVscGVyOjpBbGxWYWxpZElwdjZDaGFycyhzZXJ2ZXJJUC0+RGF0YSgpLCBzZXJ2ZXJJUC0+RGF0YSgpICsgc2VydmVySVAtPkxlbmd0aCgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHLCAiTm90IGEgdmFsaWQgU2VydmVyIElQdjYgYWRkcmVzcyIpOworICAgICAgICB9CisKKyAgICAgICAgbGlzdGVuZXJBcmdzLT5TZXJ2ZXJIb3N0TmFtZSA9IHJlZiBuZXcgSG9zdE5hbWUoc2VydmVySVApOworCisgICAgICAgIGlmIChTZXJ2ZXJQb3J0LT5UZXh0LT5Jc0VtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IEV4Y2VwdGlvbjo6Q3JlYXRlRXhjZXB0aW9uKEVfSU5WQUxJREFSRywgIk5vIFNlcnZlciBQb3J0Iik7CisgICAgICAgIH0KKyAgICAgICAgbGlzdGVuZXJBcmdzLT5TZXJ2ZXJQb3J0ID0gU2VydmVyUG9ydC0+VGV4dDsKKworICAgICAgICBhdXRvIGxpc3RlbmVyQ29udGV4dCA9IEZhY3Rvcnk6OkNyZWF0ZUxpc3RlbmVyQ29udGV4dChfbm90aWZ5LCBsaXN0ZW5lckFyZ3MsIF9wcm90b2NvbCk7CisgICAgICAgIGxpc3RlbmVyQ29udGV4dC0+TGlzdGVuX0NsaWNrKHNlbmRlciwgZSk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgIHsKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKAorICAgICAgICAgICAgIkxpc3RlbmluZyBmYWlsZWQgd2l0aCBpbnB1dCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgIH0KK30KKwordm9pZAorU2VydmVyQ29udHJvbDo6RXhpdF9DbGljaygKKyAgICBPYmplY3ReICAgICAgICAgIHNlbmRlciwKKyAgICBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgX21haW5QYWdlVUlFbGVtZW50cy0+VGFsa0dyaWQtPlZpc2liaWxpdHkgPSBYYW1sOjpWaXNpYmlsaXR5OjpDb2xsYXBzZWQ7CisgICAgX21haW5QYWdlVUlFbGVtZW50cy0+VGhyZWFkR3JpZC0+VmlzaWJpbGl0eSA9IFhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU2VydmVyQ29udHJvbC54YW1sLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU2VydmVyQ29udHJvbC54YW1sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4NGY0YQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9TZXJ2ZXJDb250cm9sLnhhbWwuaApAQCAtMCwwICsxLDYyIEBACivvu78vKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNlcnZlckNvbnRyb2wuZy5oIgorI2luY2x1ZGUgIlRhbGtDb25zdHMuaCIKKyNpbmNsdWRlICJJQXN5bmNUaHJlYWROb3RpZnkuaCIKKyNpbmNsdWRlICJJTWFpblBhZ2VVSUVsZW1lbnRzLmgiCisjaW5jbHVkZSAiUHJvdG9jb2wuaCIKKworbmFtZXNwYWNlIG90Cit7CisKK1tXaW5kb3dzOjpGb3VuZGF0aW9uOjpNZXRhZGF0YTo6V2ViSG9zdEhpZGRlbl0KK3B1YmxpYyByZWYgY2xhc3MgU2VydmVyQ29udHJvbCBzZWFsZWQKK3sKK3B1YmxpYzoKKyAgICBTZXJ2ZXJDb250cm9sKCk7CisKKyAgICB2b2lkIEluaXQoSUFzeW5jVGhyZWFkTm90aWZ5XiBub3RpZnksIElNYWluUGFnZVVJRWxlbWVudHNeIG1haW5QYWdlVUlFbGVtZW50cyk7CisKKyAgICB2b2lkIFByb3RvY29sQ2hhbmdlZChQcm90b2NvbCBwcm90b2NvbCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzaG9ydCBERUZfUE9SVCA9IFRhbGtDb25zdHM6OkRFRl9TRVJWRVJfUE9SVDsKKworICAgIHZvaWQgTGlzdGVuX0NsaWNrKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSk7CisKKyAgICB2b2lkIEV4aXRfQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKTsKKworICAgIElBc3luY1RocmVhZE5vdGlmeV4gIF9ub3RpZnk7CisgICAgSU1haW5QYWdlVUlFbGVtZW50c14gX21haW5QYWdlVUlFbGVtZW50czsKKyAgICBQcm90b2NvbCAgICAgICAgICAgICBfcHJvdG9jb2w7Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1N0cmVhbUNsaWVudENvbnRleHQuY3BwIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1N0cmVhbUNsaWVudENvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMDllOWMKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU3RyZWFtQ2xpZW50Q29udGV4dC5jcHAKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwY2guaCIKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgIlN0cmVhbUNsaWVudENvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCit1c2luZyBuYW1lc3BhY2UgQ29uY3VycmVuY3k7Cit1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm07Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6QXBwbGljYXRpb25Nb2RlbDo6Q29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczo6UHJpbWl0aXZlczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6RGF0YTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6SW5wdXQ7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok1lZGlhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOworCitTdHJlYW1DbGllbnRDb250ZXh0OjpTdHJlYW1DbGllbnRDb250ZXh0KAorICAgIElBc3luY1RocmVhZE5vdGlmeV4gbm90aWZ5LAorICAgIFN0cmVhbVNvY2tldF4gICAgICAgY2xpZW50LAorICAgIENsaWVudEFyZ3NeICAgICAgICAgYXJncykgOgorICAgIF9ub3RpZnl7IHN0ZDo6bW92ZShub3RpZnkpIH0sCisgICAgX2NsaWVudHsgc3RkOjptb3ZlKGNsaWVudCkgfSwKKyAgICBfYXJnc3sgc3RkOjptb3ZlKGFyZ3MpIH0KK3sKK30KKworU3RyZWFtQ2xpZW50Q29udGV4dDo6flN0cmVhbUNsaWVudENvbnRleHQoKQoreworICAgIC8vIEEgQ2xpZW50IGNhbiBiZSBjbG9zZWQgaW4gdHdvIHdheXM6CisgICAgLy8gIC0gZXhwbGljaXRseTogdXNpbmcgdGhlICdkZWxldGUnIGtleXdvcmQgKGNsaWVudCBpcyBjbG9zZWQgZXZlbiBpZiB0aGVyZSBhcmUgb3V0c3RhbmRpbmcgcmVmZXJlbmNlcyB0byBpdCkuCisgICAgLy8gIC0gaW1wbGljaXRseTogcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIGl0IChpLmUuLCBmYWxsaW5nIG91dC1vZi1zY29wZSkuCisgICAgLy8KKyAgICAvLyBXaGVuIGEgU29ja2V0IGlzIGNsb3NlZCBpbXBsaWNpdGx5LCBpdCBjYW4gdGFrZSBzZXZlcmFsIHNlY29uZHMgZm9yIHRoZSBsb2NhbCBwb3J0IGJlaW5nIHVzZWQKKyAgICAvLyBieSBpdCB0byBiZSBmcmVlZC9yZWNsYWltZWQgYnkgdGhlIGxvd2VyIG5ldHdvcmtpbmcgbGF5ZXJzLiBEdXJpbmcgdGhhdCB0aW1lLCBvdGhlciBzb2NrZXRzIG9uIHRoZSBtYWNoaW5lCisgICAgLy8gd2lsbCBub3QgYmUgYWJsZSB0byB1c2UgdGhlIHBvcnQuIFRodXMsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgU29ja2V0IGluc3RhbmNlcyBiZSBleHBsaWNpdGx5CisgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGdvIG91dCBvZiBzY29wZShlLmcuLCBiZWZvcmUgYXBwbGljYXRpb24gZXhpdCkuIFRoZSBjYWxsIGJlbG93IGV4cGxpY2l0bHkgY2xvc2VzIHRoZSBzb2NrZXQuCisgICAgaWYgKF9jbGllbnQgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGRlbGV0ZSBfY2xpZW50OworICAgICAgICBfY2xpZW50ID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQKK1N0cmVhbUNsaWVudENvbnRleHQ6OkNvbm5lY3RfQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIHRhc2s8dm9pZD4gcmVtb3ZlQ29udGV4dDsKKworICAgIGlmIChDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkhhc0tleSgiY2xpZW50Q29udGV4dCIpKQorICAgIHsKKyAgICAgICAgYXV0byBjbGllbnRDb250ZXh0ID0gZHluYW1pY19jYXN0PElDbGllbnRDb250ZXh0Xj4oCisgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkxvb2t1cCgiY2xpZW50Q29udGV4dCIpKTsKKyAgICAgICAgaWYgKGNsaWVudENvbnRleHQgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgcmVmIG5ldyBGYWlsdXJlRXhjZXB0aW9uKEwiTm8gY2xpZW50Q29udGV4dCIpOworICAgICAgICB9CisKKyAgICAgICAgcmVtb3ZlQ29udGV4dCA9IGNyZWF0ZV90YXNrKGNsaWVudENvbnRleHQtPkNhbmNlbElPKCkpLnRoZW4oCisgICAgICAgICAgICBbXSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+UmVtb3ZlKCJjbGllbnRDb250ZXh0Iik7CisgICAgICAgIH0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2soW10oKSB7fSk7CisgICAgfQorCisgICAgcmVtb3ZlQ29udGV4dC50aGVuKFt0aGlzXSh0YXNrPHZvaWQ+IHByZXZUYXNrKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHByZXZUYXNrLmdldCgpOworCisgICAgICAgICAgICAvLyBFdmVudHMgY2Fubm90IGJlIGhvb2tlZCB1cCBkaXJlY3RseSB0byB0aGUgU2NlbmFyaW9JbnB1dDIgb2JqZWN0LCBhcyB0aGUgb2JqZWN0IGNhbiBmYWxsIG91dC1vZi1zY29wZSBhbmQgYmUKKyAgICAgICAgICAgIC8vIGRlbGV0ZWQuIFRoaXMgd291bGQgcmVuZGVyIGFueSBldmVudCBob29rZWQgdXAgdG8gdGhlIG9iamVjdCBpbmVmZmVjdGl2ZS4gVGhlIENsaWVudENvbnRleHQgZ3VhcmFudGVlcyB0aGF0CisgICAgICAgICAgICAvLyBib3RoIHRoZSBzb2NrZXQgYW5kIG9iamVjdCB0aGF0IHNlcnZlcyBpdHMgZXZlbnRzIGhhdmUgdGhlIHNhbWUgbGlmZXRpbWUuCisgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkluc2VydCgiY2xpZW50Q29udGV4dCIsIHRoaXMpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgICAgICB7CisgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgIlJlbW92ZSBjbGllbnRDb250ZXh0IGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGNhdGNoICh0YXNrX2NhbmNlbGVkJikKKyAgICAgICAgeworICAgICAgICB9CisgICAgfSkudGhlbihbdGhpc10oKQorICAgIHsKKyAgICAgICAgYXV0byBlbmRwb2ludFBhaXIgPSByZWYgbmV3IEVuZHBvaW50UGFpcihfYXJncy0+Q2xpZW50SG9zdE5hbWUsIF9hcmdzLT5DbGllbnRQb3J0LAorICAgICAgICAgICAgX2FyZ3MtPlNlcnZlckhvc3ROYW1lLCBfYXJncy0+U2VydmVyUG9ydCk7CisKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJTdGFydCBjb25uZWN0aW5nIiwgTm90aWZ5VHlwZTo6U3RhdHVzKTsKKworICAgICAgICBjcmVhdGVfdGFzayhfY2xpZW50LT5Db25uZWN0QXN5bmMoZW5kcG9pbnRQYWlyKSkudGhlbigKKyAgICAgICAgICAgIFt0aGlzLCBlbmRwb2ludFBhaXJdKHRhc2s8dm9pZD4gcHJldlRhc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICAgICBwcmV2VGFzay5nZXQoKTsKKyAgICAgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgICAgICJDb25uZWN0IGZyb20gIiArIGVuZHBvaW50UGFpci0+TG9jYWxIb3N0TmFtZS0+Q2Fub25pY2FsTmFtZSArCisgICAgICAgICAgICAgICAgICAgICIgdG8gIiArIGVuZHBvaW50UGFpci0+UmVtb3RlSG9zdE5hbWUtPkNhbm9uaWNhbE5hbWUsCisgICAgICAgICAgICAgICAgICAgIE5vdGlmeVR5cGU6OlN0YXR1cyk7CisgICAgICAgICAgICAgICAgT25Db25uZWN0aW9uKF9jbGllbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKAorICAgICAgICAgICAgICAgICAgICAiU3RhcnQgYmluZGluZyBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgICAgICAgICAgQ29yZUFwcGxpY2F0aW9uOjpQcm9wZXJ0aWVzLT5SZW1vdmUoImNsaWVudENvbnRleHQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoICh0YXNrX2NhbmNlbGVkJikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPlJlbW92ZSgiY2xpZW50Q29udGV4dCIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZAorb3Q6OlN0cmVhbUNsaWVudENvbnRleHQ6OlNlbmRfQ2xpY2soCisgICAgUGxhdGZvcm06Ok9iamVjdF4gICAgICAgICAgICAgICAgICAgc2VuZGVyLAorICAgIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUsCisgICAgUGxhdGZvcm06OlN0cmluZ14gICAgICAgICAgICAgICAgICAgaW5wdXQpCit7CisgICAgU2VuZE1lc3NhZ2UoR2V0RGF0YVdyaXRlcigpLCBpbnB1dCk7Cit9CisKK0lBc3luY0FjdGlvbl4KK290OjpTdHJlYW1DbGllbnRDb250ZXh0OjpDYW5jZWxJTygpCit7CisgICAgcmV0dXJuIF9jbGllbnQtPkNhbmNlbElPQXN5bmMoKTsKK30KKwordm9pZAorU3RyZWFtQ2xpZW50Q29udGV4dDo6T25Db25uZWN0aW9uKAorICAgIFN0cmVhbVNvY2tldF4gc3RyZWFtU29ja2V0KQoreworICAgIFNldENvbm5lY3RlZCh0cnVlKTsKKyAgICBSZWNlaXZlTG9vcChzdHJlYW1Tb2NrZXQsIEdldERhdGFSZWFkZXIoKSk7Cit9CisKK3ZvaWQKK1N0cmVhbUNsaWVudENvbnRleHQ6OlNldENvbm5lY3RlZCgKKyAgICBib29sIGNvbm5lY3RlZCkKK3sKKyAgICBfY29ubmVjdGVkID0gY29ubmVjdGVkOworfQorCitib29sCitTdHJlYW1DbGllbnRDb250ZXh0OjpJc0Nvbm5lY3RlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIF9jb25uZWN0ZWQ7Cit9CisKK3ZvaWQKK1N0cmVhbUNsaWVudENvbnRleHQ6OlJlY2VpdmVMb29wKAorICAgIFN0cmVhbVNvY2tldF4gc3RyZWFtU29ja2V0LAorICAgIERhdGFSZWFkZXJeICAgZGF0YVJlYWRlcikKK3sKKyAgICAvLyBSZWFkIGZpcnN0IDQgYnl0ZXMgKGxlbmd0aCBvZiB0aGUgc3Vic2VxdWVudCBzdHJpbmcpLgorICAgIGNyZWF0ZV90YXNrKGRhdGFSZWFkZXItPkxvYWRBc3luYyhzaXplb2YoVUlOVDMyKSkpLnRoZW4oCisgICAgICAgIFt0aGlzLCBkYXRhUmVhZGVyXSh1bnNpZ25lZCBpbnQgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDwgc2l6ZW9mKFVJTlQzMikpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIHNvY2tldCB3YXMgY2xvc2VkIGJlZm9yZSB3ZSB3ZXJlIGFibGUgdG8gcmVhZCB0aGUgd2hvbGUgZGF0YS4KKyAgICAgICAgICAgIGNhbmNlbF9jdXJyZW50X3Rhc2soKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc3RyTGVuID0gZGF0YVJlYWRlci0+UmVhZFVJbnQzMigpOworICAgICAgICByZXR1cm4gY3JlYXRlX3Rhc2soZGF0YVJlYWRlci0+TG9hZEFzeW5jKHN0ckxlbikpLnRoZW4oCisgICAgICAgICAgICBbdGhpcywgZGF0YVJlYWRlciwgc3RyTGVuXSh1bnNpZ25lZCBpbnQgYWN0dWFsU3RyTGVuKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYWN0dWFsU3RyTGVuICE9IHN0ckxlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdW5kZXJseWluZyBzb2NrZXQgd2FzIGNsb3NlZCBiZWZvcmUgd2Ugd2VyZSBhYmxlIHRvIHJlYWQgdGhlIHdob2xlIGRhdGEuCisgICAgICAgICAgICAgICAgY2FuY2VsX2N1cnJlbnRfdGFzaygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWNlaXZlKGRhdGFSZWFkZXIsIHN0ckxlbik7CisgICAgICAgIH0pOworICAgIH0pLnRoZW4oW3RoaXMsIHN0cmVhbVNvY2tldCwgZGF0YVJlYWRlcl0odGFzazx2b2lkPiBwcmV2aW91c1Rhc2spCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVHJ5IGdldHRpbmcgYWxsIGV4Y2VwdGlvbnMgZnJvbSB0aGUgY29udGludWF0aW9uIGNoYWluIGFib3ZlIHRoaXMgcG9pbnQuCisgICAgICAgICAgICBwcmV2aW91c1Rhc2suZ2V0KCk7CisKKyAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgd2VudCBvaywgc28gdHJ5IHRvIHJlY2VpdmUgYW5vdGhlciBzdHJpbmcuIFRoZSByZWNlaXZlIHdpbGwgY29udGludWUgdW50aWwgdGhlIHN0cmVhbSBpcworICAgICAgICAgICAgLy8gYnJva2VuIChpLmUuIHBlZXIgY2xvc2VkIHRoZSBzb2NrZXQpLgorICAgICAgICAgICAgUmVjZWl2ZUxvb3Aoc3RyZWFtU29ja2V0LCBkYXRhUmVhZGVyKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICAgICAgeworICAgICAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJSZWFkIHN0cmVhbSBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgICAgIE5vdGlmeVR5cGU6OkVycm9yKTsKKworICAgICAgICAgICAgLy8gRXhwbGljaXRseSBjbG9zZSB0aGUgc29ja2V0LgorICAgICAgICAgICAgZGVsZXRlIHN0cmVhbVNvY2tldDsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAodGFza19jYW5jZWxlZCYpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERvIG5vdCBwcmludCBhbnl0aGluZyBoZXJlIC0gdGhpcyB3aWxsIHVzdWFsbHkgaGFwcGVuIGJlY2F1c2UgdXNlciBjbG9zZWQgdGhlIGNsaWVudCBzb2NrZXQuCisKKyAgICAgICAgICAgIC8vIEV4cGxpY2l0bHkgY2xvc2UgdGhlIHNvY2tldC4KKyAgICAgICAgICAgIGRlbGV0ZSBzdHJlYW1Tb2NrZXQ7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZAorU3RyZWFtQ2xpZW50Q29udGV4dDo6UmVjZWl2ZSgKKyAgICBEYXRhUmVhZGVyXiAgZGF0YVJlYWRlciwKKyAgICB1bnNpZ25lZCBpbnQgc3RyTGVuKQoreworICAgIGlmICghc3RyTGVuKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbXNnID0gZGF0YVJlYWRlci0+UmVhZFN0cmluZyhzdHJMZW4pOworICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiUmVjZWl2ZWQgZGF0YSBmcm9tIHNlcnZlcjogXCIiICsgbXNnICsgIlwiIiwKKyAgICAgICAgTm90aWZ5VHlwZTo6U3RhdHVzKTsKK30KKwordm9pZAorU3RyZWFtQ2xpZW50Q29udGV4dDo6U2VuZE1lc3NhZ2UoCisgICAgRGF0YVdyaXRlcl4gZGF0YVdyaXRlciwKKyAgICBTdHJpbmdeICAgICBtc2cpCit7CisgICAgaWYgKCFJc0Nvbm5lY3RlZCgpKQorICAgIHsKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJUaGlzIHNvY2tldCBpcyBub3QgeWV0IGNvbm5lY3RlZC4iLCBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGRhdGFXcml0ZXItPldyaXRlVUludDMyKG1zZy0+TGVuZ3RoKCkpOworICAgICAgICBkYXRhV3JpdGVyLT5Xcml0ZVN0cmluZyhtc2cpOworICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlNlbmRpbmcgLSAiICsgbXNnLCBOb3RpZnlUeXBlOjpTdGF0dXMpOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICB7CisgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiU2VuZGluZyBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLCBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIGxvY2FsbHkgYnVmZmVyZWQgZGF0YSB0byB0aGUgbmV0d29yay4gUGxlYXNlIG5vdGUgdGhhdCB3cml0ZSBvcGVyYXRpb24gd2lsbCBzdWNjZWVkCisgICAgLy8gZXZlbiBpZiB0aGUgc2VydmVyIGlzIG5vdCBsaXN0ZW5pbmcuCisgICAgY3JlYXRlX3Rhc2soZGF0YVdyaXRlci0+U3RvcmVBc3luYygpKS50aGVuKAorICAgICAgICBbdGhpc10odGFzazx1bnNpZ25lZCBpbnQ+IHdyaXRlVGFzaykKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUcnkgZ2V0dGluZyBhbiBleGNlcHRpb24uCisgICAgICAgICAgICB3cml0ZVRhc2suZ2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiU2VuZCBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLCBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworV2luZG93czo6U3RvcmFnZTo6U3RyZWFtczo6RGF0YVJlYWRlcl4KK1N0cmVhbUNsaWVudENvbnRleHQ6OkdldERhdGFSZWFkZXIoKQoreworICAgIGlmIChfZGF0YVJlYWRlciA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgX2RhdGFSZWFkZXIgPSByZWYgbmV3IERhdGFSZWFkZXIoX2NsaWVudC0+SW5wdXRTdHJlYW0pOworICAgIH0KKworICAgIHJldHVybiBfZGF0YVJlYWRlcjsKK30KKworV2luZG93czo6U3RvcmFnZTo6U3RyZWFtczo6RGF0YVdyaXRlcl4KK1N0cmVhbUNsaWVudENvbnRleHQ6OkdldERhdGFXcml0ZXIoKQoreworICAgIGlmIChfZGF0YVdyaXRlciA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgX2RhdGFXcml0ZXIgPSByZWYgbmV3IERhdGFXcml0ZXIoX2NsaWVudC0+T3V0cHV0U3RyZWFtKTsKKyAgICB9CisKKyAgICByZXR1cm4gX2RhdGFXcml0ZXI7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU3RyZWFtQ2xpZW50Q29udGV4dC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1N0cmVhbUNsaWVudENvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTExODIzCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1N0cmVhbUNsaWVudENvbnRleHQuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIklDbGllbnRDb250ZXh0LmgiCisjaW5jbHVkZSAiSUFzeW5jVGhyZWFkTm90aWZ5LmgiCisjaW5jbHVkZSAiQ2xpZW50QXJncy5oIgorCituYW1lc3BhY2Ugb3QKK3sKKworW1dpbmRvd3M6OkZvdW5kYXRpb246Ok1ldGFkYXRhOjpXZWJIb3N0SGlkZGVuXQorcHVibGljIHJlZiBjbGFzcyBTdHJlYW1DbGllbnRDb250ZXh0IHNlYWxlZCA6IHB1YmxpYyBJQ2xpZW50Q29udGV4dAoreworcHVibGljOgorICAgIHVzaW5nIFN0cmVhbVNvY2tldCA9IFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM6OlN0cmVhbVNvY2tldDsKKworICAgIFN0cmVhbUNsaWVudENvbnRleHQoSUFzeW5jVGhyZWFkTm90aWZ5XiBub3RpZnksIFN0cmVhbVNvY2tldF4gY2xpZW50LCBDbGllbnRBcmdzXiBhcmdzKTsKKyAgICB2aXJ0dWFsIH5TdHJlYW1DbGllbnRDb250ZXh0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgQ29ubmVjdF9DbGljayhQbGF0Zm9ybTo6T2JqZWN0XiBzZW5kZXIsIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUpOworCisgICAgdmlydHVhbCB2b2lkIFNlbmRfQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlLCBQbGF0Zm9ybTo6U3RyaW5nXiBpbnB1dCk7CisKKyAgICB2aXJ0dWFsIFdpbmRvd3M6OkZvdW5kYXRpb246OklBc3luY0FjdGlvbl4gQ2FuY2VsSU8oKTsKKworcHJpdmF0ZToKKyAgICB1c2luZyBEYXRhUmVhZGVyID0gV2luZG93czo6U3RvcmFnZTo6U3RyZWFtczo6RGF0YVJlYWRlcjsKKyAgICB1c2luZyBEYXRhV3JpdGVyID0gV2luZG93czo6U3RvcmFnZTo6U3RyZWFtczo6RGF0YVdyaXRlcjsKKyAgICB1c2luZyBBcmdzID0gQ2xpZW50QXJnczsKKworICAgIHZvaWQgT25Db25uZWN0aW9uKFN0cmVhbVNvY2tldF4pOworCisgICAgdm9pZCBTZXRDb25uZWN0ZWQoYm9vbCBjb25uZWN0ZWQpOworICAgIGJvb2wgSXNDb25uZWN0ZWQoKSBjb25zdDsKKworICAgIHZvaWQgUmVjZWl2ZUxvb3AoU3RyZWFtU29ja2V0XiwgRGF0YVJlYWRlcl4pOworICAgIHZvaWQgUmVjZWl2ZShEYXRhUmVhZGVyXiwgdW5zaWduZWQgaW50IHN0ckxlbik7CisKKyAgICB2b2lkIFNlbmRNZXNzYWdlKERhdGFXcml0ZXJeLCBTdHJpbmdeIG1zZyk7CisKKyAgICBEYXRhUmVhZGVyXiBHZXREYXRhUmVhZGVyKCk7CisgICAgRGF0YVdyaXRlcl4gR2V0RGF0YVdyaXRlcigpOworCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiBfbm90aWZ5OworICAgIFN0cmVhbVNvY2tldF4gICAgICAgX2NsaWVudDsKKyAgICBBcmdzXiAgICAgICAgICAgICAgIF9hcmdzOworICAgIGJvb2wgICAgICAgICAgICAgICAgX2Nvbm5lY3RlZCA9IGZhbHNlOworICAgIERhdGFSZWFkZXJeICAgICAgICAgX2RhdGFSZWFkZXI7CisgICAgRGF0YVdyaXRlcl4gICAgICAgICBfZGF0YVdyaXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU3RyZWFtTGlzdGVuZXJDb250ZXh0LmNwcCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9TdHJlYW1MaXN0ZW5lckNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NTIwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU3RyZWFtTGlzdGVuZXJDb250ZXh0LmNwcApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5oIgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSAiU3RyZWFtTGlzdGVuZXJDb250ZXh0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordXNpbmcgbmFtZXNwYWNlIENvbmN1cnJlbmN5OwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkFwcGxpY2F0aW9uTW9kZWw6OkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6Rm91bmRhdGlvbjsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpDb2xsZWN0aW9uczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpOZXR3b3JraW5nOjpTb2NrZXRzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM6OlByaW1pdGl2ZXM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkRhdGE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OklucHV0OwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpNZWRpYTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TmF2aWdhdGlvbjsKKworU3RyZWFtTGlzdGVuZXJDb250ZXh0OjpTdHJlYW1MaXN0ZW5lckNvbnRleHQoCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiAgIG5vdGlmeSwKKyAgICBTdHJlYW1Tb2NrZXRMaXN0ZW5lcl4gbGlzdGVuZXIsCisgICAgTGlzdGVuZXJBcmdzXiAgICAgICAgIGFyZ3MpIDoKKyAgICBfbm90aWZ5eyBzdGQ6Om1vdmUobm90aWZ5KSB9LAorICAgIF9saXN0ZW5lcnsgc3RkOjptb3ZlKGxpc3RlbmVyKSB9LAorICAgIF9hcmdzeyBzdGQ6Om1vdmUoYXJncykgfQoreworfQorCitTdHJlYW1MaXN0ZW5lckNvbnRleHQ6On5TdHJlYW1MaXN0ZW5lckNvbnRleHQoKQoreworICAgIC8vIEEgTGlzdGVuZXIgY2FuIGJlIGNsb3NlZCBpbiB0d28gd2F5czoKKyAgICAvLyAgLSBleHBsaWNpdGx5OiB1c2luZyB0aGUgJ2RlbGV0ZScga2V5d29yZCAobGlzdGVuZXIgaXMgY2xvc2VkIGV2ZW4gaWYgdGhlcmUgYXJlIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMgdG8gaXQpLgorICAgIC8vICAtIGltcGxpY2l0bHk6IHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBpdCAoaS5lLiwgZmFsbGluZyBvdXQtb2Ytc2NvcGUpLgorICAgIC8vCisgICAgLy8gV2hlbiBhIFNvY2tldCBpcyBjbG9zZWQgaW1wbGljaXRseSwgaXQgY2FuIHRha2Ugc2V2ZXJhbCBzZWNvbmRzIGZvciB0aGUgbG9jYWwgcG9ydCBiZWluZyB1c2VkCisgICAgLy8gYnkgaXQgdG8gYmUgZnJlZWQvcmVjbGFpbWVkIGJ5IHRoZSBsb3dlciBuZXR3b3JraW5nIGxheWVycy4gRHVyaW5nIHRoYXQgdGltZSwgb3RoZXIgc29ja2V0cyBvbiB0aGUgbWFjaGluZQorICAgIC8vIHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIHRoZSBwb3J0LiBUaHVzLCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IFNvY2tldCBpbnN0YW5jZXMgYmUgZXhwbGljaXRseQorICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBnbyBvdXQgb2Ygc2NvcGUoZS5nLiwgYmVmb3JlIGFwcGxpY2F0aW9uIGV4aXQpLiBUaGUgY2FsbCBiZWxvdyBleHBsaWNpdGx5IGNsb3NlcyB0aGUgc29ja2V0LgorICAgIGlmIChfbGlzdGVuZXIgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGRlbGV0ZSBfbGlzdGVuZXI7CisgICAgICAgIF9saXN0ZW5lciA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkCitTdHJlYW1MaXN0ZW5lckNvbnRleHQ6Okxpc3Rlbl9DbGljaygKKyAgICBPYmplY3ReICAgICAgICAgIHNlbmRlciwKKyAgICBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgdGFzazx2b2lkPiByZW1vdmVDb250ZXh0OworCisgICAgaWYgKENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+SGFzS2V5KCJsaXN0ZW5lckNvbnRleHQiKSkKKyAgICB7CisgICAgICAgIGF1dG8gbGlzdGVuZXJDb250ZXh0ID0gZHluYW1pY19jYXN0PElMaXN0ZW5lckNvbnRleHRePigKKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+TG9va3VwKCJsaXN0ZW5lckNvbnRleHQiKSk7CisgICAgICAgIGlmIChsaXN0ZW5lckNvbnRleHQgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgcmVmIG5ldyBGYWlsdXJlRXhjZXB0aW9uKEwiTm8gbGlzdGVuZXJDb250ZXh0Iik7CisgICAgICAgIH0KKworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2sobGlzdGVuZXJDb250ZXh0LT5DYW5jZWxJTygpKS50aGVuKAorICAgICAgICAgICAgW10oKQorICAgICAgICB7CisgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPlJlbW92ZSgibGlzdGVuZXJDb250ZXh0Iik7CisgICAgICAgIH0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2soW10oKSB7fSk7CisgICAgfQorCisgICAgX2xpc3RlbmVyLT5Db25uZWN0aW9uUmVjZWl2ZWQgKz0gcmVmIG5ldyBDb25uZWN0aW9uSGFuZGxlcigKKyAgICAgICAgdGhpcywgJlN0cmVhbUxpc3RlbmVyQ29udGV4dDo6T25Db25uZWN0aW9uKTsKKworICAgIHJlbW92ZUNvbnRleHQudGhlbihbdGhpc10odGFzazx2b2lkPiBwcmV2VGFzaykKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUcnkgZ2V0dGluZyBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBwcmV2VGFzay5nZXQoKTsKKworICAgICAgICAgICAgLy8gRXZlbnRzIGNhbm5vdCBiZSBob29rZWQgdXAgZGlyZWN0bHkgdG8gdGhlIFNjZW5hcmlvSW5wdXQxIG9iamVjdCwgYXMgdGhlIG9iamVjdCBjYW4gZmFsbCBvdXQtb2Ytc2NvcGUgYW5kIGJlCisgICAgICAgICAgICAvLyBkZWxldGVkLiBUaGlzIHdvdWxkIHJlbmRlciBhbnkgZXZlbnQgaG9va2VkIHVwIHRvIHRoZSBvYmplY3QgaW5lZmZlY3RpdmUuIFRoZSBMaXN0ZW5lckNvbnRleHQgZ3VhcmFudGVlcyB0aGF0CisgICAgICAgICAgICAvLyBib3RoIHRoZSBsaXN0ZW5lciBhbmQgb2JqZWN0IHRoYXQgc2VydmVzIGl0cyBldmVudHMgaGF2ZSB0aGUgc2FtZSBsaWZldGltZS4KKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+SW5zZXJ0KCJsaXN0ZW5lckNvbnRleHQiLCB0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICAgICAgeworICAgICAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKAorICAgICAgICAgICAgICAgICJSZW1vdmUgbGlzdGVuZXJDb250ZXh0IGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGNhdGNoICh0YXNrX2NhbmNlbGVkJikKKyAgICAgICAgeworICAgICAgICB9CisgICAgfSkudGhlbihbdGhpc10oKQorICAgIHsKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJTdGFydCBsaXN0ZW5pbmciLCBOb3RpZnlUeXBlOjpTdGF0dXMpOworCisgICAgICAgIGNyZWF0ZV90YXNrKF9saXN0ZW5lci0+QmluZEVuZHBvaW50QXN5bmMoX2FyZ3MtPlNlcnZlckhvc3ROYW1lLCBfYXJncy0+U2VydmVyUG9ydCkpLnRoZW4oCisgICAgICAgICAgICBbdGhpc10odGFzazx2b2lkPiBwcmV2VGFzaykKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJ5IGdldHRpbmcgYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgICAgIHByZXZUYXNrLmdldCgpOworICAgICAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICAgICAgICAgIkxpc3RlbmluZyBvbiBhZGRyZXNzICIgKyBfYXJncy0+U2VydmVySG9zdE5hbWUtPkNhbm9uaWNhbE5hbWUsCisgICAgICAgICAgICAgICAgICAgIE5vdGlmeVR5cGU6OlN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgICAgICJTdGFydCBsaXN0ZW5pbmcgZmFpbGVkIHdpdGggZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+UmVtb3ZlKCJsaXN0ZW5lckNvbnRleHQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK0lBc3luY0FjdGlvbl4KK1N0cmVhbUxpc3RlbmVyQ29udGV4dDo6Q2FuY2VsSU8oKQoreworICAgIHJldHVybiBfbGlzdGVuZXItPkNhbmNlbElPQXN5bmMoKTsKK30KKwordm9pZAorU3RyZWFtTGlzdGVuZXJDb250ZXh0OjpPbkNvbm5lY3Rpb24oCisgICAgU3RyZWFtU29ja2V0TGlzdGVuZXJeICAgICAgICBsaXN0ZW5lciwKKyAgICBDb25uZWN0aW9uUmVjZWl2ZWRFdmVudEFyZ3NeIGFyZ3MpCit7CisgICAgYXV0byBkYXRhUmVhZGVyID0gcmVmIG5ldyBEYXRhUmVhZGVyKGFyZ3MtPlNvY2tldC0+SW5wdXRTdHJlYW0pOworICAgIGF1dG8gZGF0YVdyaXRlciA9IHJlZiBuZXcgRGF0YVdyaXRlcihhcmdzLT5Tb2NrZXQtPk91dHB1dFN0cmVhbSk7CisKKyAgICBSZWNlaXZlTG9vcChhcmdzLT5Tb2NrZXQsIGRhdGFSZWFkZXIsIGRhdGFXcml0ZXIpOworfQorCit2b2lkCitTdHJlYW1MaXN0ZW5lckNvbnRleHQ6OlJlY2VpdmVMb29wKAorICAgIFN0cmVhbVNvY2tldF4gc3RyZWFtU29ja2V0LAorICAgIERhdGFSZWFkZXJeICAgZGF0YVJlYWRlciwKKyAgICBEYXRhV3JpdGVyXiAgIGRhdGFXcml0ZXIpCit7CisgICAgLy8gUmVhZCBmaXJzdCA0IGJ5dGVzIChsZW5ndGggb2YgdGhlIHN1YnNlcXVlbnQgc3RyaW5nKS4KKyAgICBjcmVhdGVfdGFzayhkYXRhUmVhZGVyLT5Mb2FkQXN5bmMoc2l6ZW9mKFVJTlQzMikpKS50aGVuKAorICAgICAgICBbdGhpcywgc3RyZWFtU29ja2V0LCBkYXRhUmVhZGVyLCBkYXRhV3JpdGVyXSh1bnNpZ25lZCBpbnQgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDwgc2l6ZW9mKFVJTlQzMikpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIHNvY2tldCB3YXMgY2xvc2VkIGJlZm9yZSB3ZSB3ZXJlIGFibGUgdG8gcmVhZCB0aGUgd2hvbGUgZGF0YS4KKyAgICAgICAgICAgIGNhbmNlbF9jdXJyZW50X3Rhc2soKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGludCBzdHJMZW4gPSBkYXRhUmVhZGVyLT5SZWFkVUludDMyKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVfdGFzayhkYXRhUmVhZGVyLT5Mb2FkQXN5bmMoc3RyTGVuKSkudGhlbigKKyAgICAgICAgICAgIFt0aGlzLCBkYXRhUmVhZGVyLCBkYXRhV3JpdGVyLCBzdHJMZW5dKHVuc2lnbmVkIGludCBhY3R1YWxTdHJMZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhY3R1YWxTdHJMZW4gIT0gc3RyTGVuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIHNvY2tldCB3YXMgY2xvc2VkIGJlZm9yZSB3ZSB3ZXJlIGFibGUgdG8gcmVhZCB0aGUgd2hvbGUgZGF0YS4KKyAgICAgICAgICAgICAgICBjYW5jZWxfY3VycmVudF90YXNrKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlY2VpdmUoZGF0YVJlYWRlciwgc3RyTGVuLCBkYXRhV3JpdGVyKTsKKyAgICAgICAgfSk7CisgICAgfSkudGhlbihbdGhpcywgc3RyZWFtU29ja2V0LCBkYXRhUmVhZGVyLCBkYXRhV3JpdGVyXSh0YXNrPHZvaWQ+IHByZXZpb3VzVGFzaykKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUcnkgZ2V0dGluZyBhbGwgZXhjZXB0aW9ucyBmcm9tIHRoZSBjb250aW51YXRpb24gY2hhaW4gYWJvdmUgdGhpcyBwb2ludC4KKyAgICAgICAgICAgIHByZXZpb3VzVGFzay5nZXQoKTsKKworICAgICAgICAgICAgLy8gRXZlcnl0aGluZyB3ZW50IG9rLCBzbyB0cnkgdG8gcmVjZWl2ZSBhbm90aGVyIHN0cmluZy4gVGhlIHJlY2VpdmUgd2lsbCBjb250aW51ZSB1bnRpbCB0aGUgc3RyZWFtIGlzCisgICAgICAgICAgICAvLyBicm9rZW4gKGkuZS4gcGVlciBjbG9zZWQgdGhlIHNvY2tldCkuCisgICAgICAgICAgICBSZWNlaXZlTG9vcChzdHJlYW1Tb2NrZXQsIGRhdGFSZWFkZXIsIGRhdGFXcml0ZXIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgICAgICB7CisgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlJlYWQgc3RyZWFtIGZhaWxlZCB3aXRoIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworCisgICAgICAgICAgICAvLyBFeHBsaWNpdGx5IGNsb3NlIHRoZSBzb2NrZXQuCisgICAgICAgICAgICBkZWxldGUgc3RyZWFtU29ja2V0OworICAgICAgICB9CisgICAgICAgIGNhdGNoICh0YXNrX2NhbmNlbGVkJikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRG8gbm90IHByaW50IGFueXRoaW5nIGhlcmUgLSB0aGlzIHdpbGwgdXN1YWxseSBoYXBwZW4gYmVjYXVzZSB1c2VyIGNsb3NlZCB0aGUgY2xpZW50IHNvY2tldC4KKworICAgICAgICAgICAgLy8gRXhwbGljaXRseSBjbG9zZSB0aGUgc29ja2V0LgorICAgICAgICAgICAgZGVsZXRlIHN0cmVhbVNvY2tldDsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkCitTdHJlYW1MaXN0ZW5lckNvbnRleHQ6OlJlY2VpdmUoCisgICAgRGF0YVJlYWRlcl4gIGRhdGFSZWFkZXIsCisgICAgdW5zaWduZWQgaW50IHN0ckxlbiwKKyAgICBEYXRhV3JpdGVyXiAgZGF0YVdyaXRlcikKK3sKKyAgICBpZiAoIXN0ckxlbikKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIG1zZyA9IGRhdGFSZWFkZXItPlJlYWRTdHJpbmcoc3RyTGVuKTsKKyAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlJlY2VpdmVkIGRhdGEgZnJvbSBjbGllbnQ6IFwiIiArIG1zZyArICJcIiIsCisgICAgICAgIE5vdGlmeVR5cGU6OlN0YXR1cyk7CisgICAgYXV0byBlY2hvID0gQ3JlYXRlRWNob01lc3NhZ2UobXNnKTsKKyAgICBFY2hvTWVzc2FnZShkYXRhV3JpdGVyLCBlY2hvKTsKK30KKworU3RyaW5nXgorU3RyZWFtTGlzdGVuZXJDb250ZXh0OjpDcmVhdGVFY2hvTWVzc2FnZSgKKyAgICBTdHJpbmdeIG1zZykKK3sKKyAgICB3Y2hhcl90IGJ1ZlsyNTZdOworICAgIGF1dG8gbGVuID0gc3dwcmludGZfcyhidWYsIEwiU2VydmVyJXMgcmVjZWl2ZWQgZGF0YSBmcm9tIGNsaWVudCA6IFwiJXNcIiIsCisgICAgICAgIF9hcmdzLT5TZXJ2ZXJOYW1lLT5Jc0VtcHR5KCkgPyBMIiIgOiAoIiAiICsgX2FyZ3MtPlNlcnZlck5hbWUpLT5EYXRhKCksIG1zZy0+RGF0YSgpKTsKKworICAgIGxlbiArPSBzd3ByaW50Zl9zKCZidWZbbGVuXSwgX2NvdW50b2YoYnVmKSAtIGxlbiwgTCIgLSBnb3QgJWQgY2hhcnMiLAorICAgICAgICBtc2ctPkxlbmd0aCgpKTsKKyAgICByZXR1cm4gcmVmIG5ldyBTdHJpbmcoYnVmKTsKK30KKwordm9pZAorU3RyZWFtTGlzdGVuZXJDb250ZXh0OjpFY2hvTWVzc2FnZSgKKyAgICBEYXRhV3JpdGVyXiBkYXRhV3JpdGVyLAorICAgIFN0cmluZ14gICAgIGVjaG8pCit7CisgICAgdHJ5CisgICAgeworICAgICAgICBkYXRhV3JpdGVyLT5Xcml0ZVVJbnQzMihlY2hvLT5MZW5ndGgoKSk7CisgICAgICAgIGRhdGFXcml0ZXItPldyaXRlU3RyaW5nKGVjaG8pOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICB7CisgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiRWNob2luZyBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgIH0KKworICAgIGNyZWF0ZV90YXNrKGRhdGFXcml0ZXItPlN0b3JlQXN5bmMoKSkudGhlbigKKyAgICAgICAgW3RoaXNdKHRhc2s8dW5zaWduZWQgaW50PiB3cml0ZVRhc2spCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVHJ5IGdldHRpbmcgYWxsIGV4Y2VwdGlvbnMgZnJvbSB0aGUgY29udGludWF0aW9uIGNoYWluIGFib3ZlIHRoaXMgcG9pbnQuCisgICAgICAgICAgICB3cml0ZVRhc2suZ2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiRWNobyBtZXNzYWdlIHdpdGggYW4gZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgICAgICBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIH0KKyAgICB9KTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9TdHJlYW1MaXN0ZW5lckNvbnRleHQuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9TdHJlYW1MaXN0ZW5lckNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjlhZmZkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1N0cmVhbUxpc3RlbmVyQ29udGV4dC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSUxpc3RlbmVyQ29udGV4dC5oIgorI2luY2x1ZGUgIklBc3luY1RocmVhZE5vdGlmeS5oIgorI2luY2x1ZGUgIkxpc3RlbmVyQXJncy5oIgorCituYW1lc3BhY2Ugb3QKK3sKKworW1dpbmRvd3M6OkZvdW5kYXRpb246Ok1ldGFkYXRhOjpXZWJIb3N0SGlkZGVuXQorcHVibGljIHJlZiBjbGFzcyBTdHJlYW1MaXN0ZW5lckNvbnRleHQgc2VhbGVkIDogcHVibGljIElMaXN0ZW5lckNvbnRleHQKK3sKK3B1YmxpYzoKKyAgICB1c2luZyBTdHJlYW1Tb2NrZXRMaXN0ZW5lciA9IFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM6OlN0cmVhbVNvY2tldExpc3RlbmVyOworCisgICAgU3RyZWFtTGlzdGVuZXJDb250ZXh0KElBc3luY1RocmVhZE5vdGlmeV4gbm90aWZ5LCBTdHJlYW1Tb2NrZXRMaXN0ZW5lcl4gbGlzdGVuZXIsIExpc3RlbmVyQXJnc14gYXJncyk7CisgICAgdmlydHVhbCB+U3RyZWFtTGlzdGVuZXJDb250ZXh0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgTGlzdGVuX0NsaWNrKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSk7CisKKyAgICB2aXJ0dWFsIFdpbmRvd3M6OkZvdW5kYXRpb246OklBc3luY0FjdGlvbl4gQ2FuY2VsSU8oKTsKKworcHJpdmF0ZToKKyAgICB1c2luZyBDb25uZWN0aW9uUmVjZWl2ZWRFdmVudEFyZ3MgPSBXaW5kb3dzOjpOZXR3b3JraW5nOjpTb2NrZXRzOjpTdHJlYW1Tb2NrZXRMaXN0ZW5lckNvbm5lY3Rpb25SZWNlaXZlZEV2ZW50QXJnczsKKyAgICB1c2luZyBDb25uZWN0aW9uSGFuZGxlciA9IFdpbmRvd3M6OkZvdW5kYXRpb246OlR5cGVkRXZlbnRIYW5kbGVyPFN0cmVhbVNvY2tldExpc3RlbmVyXiwgQ29ubmVjdGlvblJlY2VpdmVkRXZlbnRBcmdzXj47CisgICAgdXNpbmcgRGF0YVJlYWRlciA9IFdpbmRvd3M6OlN0b3JhZ2U6OlN0cmVhbXM6OkRhdGFSZWFkZXI7CisgICAgdXNpbmcgRGF0YVdyaXRlciA9IFdpbmRvd3M6OlN0b3JhZ2U6OlN0cmVhbXM6OkRhdGFXcml0ZXI7CisgICAgdXNpbmcgTGlzdGVuZXIgPSBTdHJlYW1Tb2NrZXRMaXN0ZW5lcjsKKyAgICB1c2luZyBTdHJlYW1Tb2NrZXQgPSBXaW5kb3dzOjpOZXR3b3JraW5nOjpTb2NrZXRzOjpTdHJlYW1Tb2NrZXQ7CisgICAgdXNpbmcgQXJncyA9IExpc3RlbmVyQXJnczsKKworICAgIHZvaWQgT25Db25uZWN0aW9uKFN0cmVhbVNvY2tldExpc3RlbmVyXiBsaXN0ZW5lciwgQ29ubmVjdGlvblJlY2VpdmVkRXZlbnRBcmdzXiBhcmdzKTsKKyAgICB2b2lkIFJlY2VpdmVMb29wKFN0cmVhbVNvY2tldF4sIERhdGFSZWFkZXJeLCBEYXRhV3JpdGVyXik7CisgICAgdm9pZCBSZWNlaXZlKERhdGFSZWFkZXJeLCB1bnNpZ25lZCBpbnQgc3RyTGVuLCBEYXRhV3JpdGVyXik7CisgICAgU3RyaW5nXiBDcmVhdGVFY2hvTWVzc2FnZShTdHJpbmdeIG1zZyk7CisgICAgdm9pZCBFY2hvTWVzc2FnZShEYXRhV3JpdGVyXiwgU3RyaW5nXiBlY2hvKTsKKworICAgIElBc3luY1RocmVhZE5vdGlmeV4gX25vdGlmeTsKKyAgICBMaXN0ZW5lcl4gICAgICAgICAgIF9saXN0ZW5lcjsKKyAgICBBcmdzXiAgICAgICAgICAgICAgIF9hcmdzOworfTsKKworfSAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrQ29uc3RzLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvVGFsa0NvbnN0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMGZhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvVGFsa0NvbnN0cy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ugb3QKK3sKKworc3RydWN0IFRhbGtDb25zdHMKK3sKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNob3J0IERFRl9TRVJWRVJfUE9SVCA9IDUxMDAwOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc2hvcnQgREVGX0NMSUVOVF9QT1JUX0lOSVQgPSA1MTEwMDsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvVGFsa0dyaWQueGFtbCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrR3JpZC54YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOGFhMmUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvVGFsa0dyaWQueGFtbApAQCAtMCwwICsxLDEwOCBAQAor77u/PCEtLQorICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKzxHcmlkCisgICAgeDpDbGFzcz0ib3QuVGFsa0dyaWQiCisgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiIKKyAgICB4bWxuczp4PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbCIKKyAgICB4bWxuczpsb2NhbD0idXNpbmc6b3QiCisgICAgeG1sbnM6ZD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9leHByZXNzaW9uL2JsZW5kLzIwMDgiCisgICAgeG1sbnM6bWM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IgorICAgIG1jOklnbm9yYWJsZT0iZCI+CisgICAgPEdyaWQuUm93RGVmaW5pdGlvbnM+CisgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iKiIvPgorICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgIDwvR3JpZC5Sb3dEZWZpbml0aW9ucz4KKyAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgR3JpZC5Sb3c9IjAiCisgICAgICAgICAgICBPcmllbnRhdGlvbj0iSG9yaXpvbnRhbCIKKyAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJUb3AiCisgICAgICAgICAgICA+CisgICAgICAgIDxSYWRpb0J1dHRvbgorICAgICAgICAgICAgICAgIHg6TmFtZT0iVGNwUmFkaW8iCisgICAgICAgICAgICAgICAgQ29udGVudD0iVENQIgorICAgICAgICAgICAgICAgIEdyb3VwTmFtZT0iUHJvdG9jb2xHcm91cCIKKyAgICAgICAgICAgICAgICBDaGVja2VkPSJQcm90b2NvbF9DaGFuZ2VkIgorICAgICAgICAgICAgICAgIE1hcmdpbj0iMCwwLDIwLDAiCisgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgPFJhZGlvQnV0dG9uCisgICAgICAgICAgICAgICAgeDpOYW1lPSJVZHBSYWRpbyIKKyAgICAgICAgICAgICAgICBDb250ZW50PSJVRFAiCisgICAgICAgICAgICAgICAgR3JvdXBOYW1lPSJQcm90b2NvbEdyb3VwIgorICAgICAgICAgICAgICAgIENoZWNrZWQ9IlByb3RvY29sX0NoYW5nZWQiCisgICAgICAgICAgICAgICAgTWFyZ2luPSIwLDAsMjAsMCIKKyAgICAgICAgICAgICAgICAvPgorICAgIDwvU3RhY2tQYW5lbD4KKyAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgR3JpZC5Sb3c9IjIiCisgICAgICAgICAgICBPcmllbnRhdGlvbj0iSG9yaXpvbnRhbCIKKyAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJUb3AiCisgICAgICAgICAgICA+CisgICAgICAgIDxSYWRpb0J1dHRvbgorICAgICAgICAgICAgICAgIHg6TmFtZT0iU2VydmVyUmFkaW8iCisgICAgICAgICAgICAgICAgQ29udGVudD0iU2VydmVyIgorICAgICAgICAgICAgICAgIEdyb3VwTmFtZT0iUm9sZUdyb3VwIgorICAgICAgICAgICAgICAgIENoZWNrZWQ9IlJvbGVfQ2hhbmdlZCIKKyAgICAgICAgICAgICAgICBNYXJnaW49IjAsMCwyMCwwIgorICAgICAgICAgICAgICAgIC8+CisgICAgICAgIDxSYWRpb0J1dHRvbgorICAgICAgICAgICAgICAgIHg6TmFtZT0iQ2xpZW50UmFkaW8iCisgICAgICAgICAgICAgICAgQ29udGVudD0iQ2xpZW50IgorICAgICAgICAgICAgICAgIEdyb3VwTmFtZT0iUm9sZUdyb3VwIgorICAgICAgICAgICAgICAgIENoZWNrZWQ9IlJvbGVfQ2hhbmdlZCIKKyAgICAgICAgICAgICAgICBNYXJnaW49IjAsMCwyMCwwIgorICAgICAgICAgICAgICAgIC8+CisgICAgPC9TdGFja1BhbmVsPgorICAgIDxsb2NhbDpTZXJ2ZXJDb250cm9sCisgICAgICAgIHg6TmFtZT0iU2VydmVyUm9sZSIKKyAgICAgICAgR3JpZC5Sb3c9IjQiCisgICAgICAgIFZpc2liaWxpdHk9IkNvbGxhcHNlZCIKKyAgICAgICAgLz4KKyAgICA8bG9jYWw6Q2xpZW50Q29udHJvbAorICAgICAgICB4Ok5hbWU9IkNsaWVudFJvbGUiCisgICAgICAgIEdyaWQuUm93PSI0IgorICAgICAgICBWaXNpYmlsaXR5PSJDb2xsYXBzZWQiCisgICAgICAgIC8+CisgICAgPEJvcmRlcgorICAgICAgICB4Ok5hbWU9IlN0YXR1c0JvcmRlciIKKyAgICAgICAgR3JpZC5Sb3c9IjYiCisgICAgICAgID4KKyAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgeDpOYW1lPSJTdGF0dXNCbG9jayIKKyAgICAgICAgICAgIEZvbnRXZWlnaHQ9IkJvbGQiCisgICAgICAgICAgICBUZXh0PSIiCisgICAgICAgICAgICBGb250U2l6ZT0iMTYiCisgICAgICAgICAgICBUZXh0V3JhcHBpbmc9IldyYXAiCisgICAgICAgICAgICBNYXhIZWlnaHQ9IjgwIgorICAgICAgICAgICAgLz4KKyAgICA8L0JvcmRlcj4KKzwvR3JpZD4KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrR3JpZC54YW1sLmNwcCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrR3JpZC54YW1sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzJjMjZkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1RhbGtHcmlkLnhhbWwuY3BwCkBAIC0wLDAgKzEsMTUwIEBACivvu78vKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicGNoLmgiCisjaW5jbHVkZSAiVGFsa0dyaWQueGFtbC5oIgorI2luY2x1ZGUgIkNsaWVudENvbnRyb2wueGFtbC5oIgorI2luY2x1ZGUgIlNlcnZlckNvbnRyb2wueGFtbC5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK3VzaW5nIG5hbWVzcGFjZSBQbGF0Zm9ybTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM6OlByaW1pdGl2ZXM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkRhdGE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OklucHV0OwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpNZWRpYTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TmF2aWdhdGlvbjsKKworLy8gVGhlIFVzZXIgQ29udHJvbCBpdGVtIHRlbXBsYXRlIGlzIGRvY3VtZW50ZWQgYXQgaHR0cDovL2dvLm1pY3Jvc29mdC5jb20vZndsaW5rLz9MaW5rSWQ9MjM0MjM2CisKK1RhbGtHcmlkOjpUYWxrR3JpZCgpCit7CisgICAgSW5pdGlhbGl6ZUNvbXBvbmVudCgpOworCisgICAgVGNwUmFkaW8tPklzQ2hlY2tlZCA9IHRydWU7CisgICAgU2VydmVyUmFkaW8tPklzQ2hlY2tlZCA9IHRydWU7Cit9CisKKwordm9pZAorVGFsa0dyaWQ6OkluaXQoCisgICAgSU1haW5QYWdlVUlFbGVtZW50c14gbWFpblBhZ2VVSUVsZW1lbnRzKQoreworICAgIFNlcnZlclJvbGUtPkluaXQodGhpcywgbWFpblBhZ2VVSUVsZW1lbnRzKTsKKyAgICBDbGllbnRSb2xlLT5Jbml0KHRoaXMsIG1haW5QYWdlVUlFbGVtZW50cyk7Cit9CisKK3ZvaWQKK1RhbGtHcmlkOjpOb3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgU3RyaW5nXiAgICBtZXNzYWdlLAorICAgIE5vdGlmeVR5cGUgdHlwZSkKK3sKKyAgICBEaXNwYXRjaGVyLT5SdW5Bc3luYyhDb3JlRGlzcGF0Y2hlclByaW9yaXR5OjpOb3JtYWwsCisgICAgICAgIHJlZiBuZXcgRGlzcGF0Y2hlZEhhbmRsZXIoW3RoaXMsIG1lc3NhZ2UsIHR5cGVdKCkKKyAgICB7CisgICAgICAgIE5vdGlmeShtZXNzYWdlLCB0eXBlKTsKKyAgICB9KSk7Cit9CisKK3ZvaWQKK1RhbGtHcmlkOjpOb3RpZnkoCisgICAgU3RyaW5nXiAgICBtZXNzYWdlLAorICAgIE5vdGlmeVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgIGNhc2UgTm90aWZ5VHlwZTo6U3RhdHVzOgorICAgICAgICBTdGF0dXNCb3JkZXItPkJhY2tncm91bmQgPSByZWYgbmV3IFNvbGlkQ29sb3JCcnVzaChDb2xvcnM6OkdyZWVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb3RpZnlUeXBlOjpFcnJvcjoKKyAgICAgICAgU3RhdHVzQm9yZGVyLT5CYWNrZ3JvdW5kID0gcmVmIG5ldyBTb2xpZENvbG9yQnJ1c2goQ29sb3JzOjpSZWQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBTdGF0dXNCbG9jay0+VGV4dCA9IG1lc3NhZ2U7CisKKyAgICAvLyBDb2xsYXBzZSB0aGUgU3RhdHVzQmxvY2sgaWYgaXQgaGFzIG5vIHRleHQgdG8gY29uc2VydmUgcmVhbCBlc3RhdGUuCisgICAgaWYgKFN0YXR1c0Jsb2NrLT5UZXh0ICE9ICIiKQorICAgIHsKKyAgICAgICAgU3RhdHVzQm9yZGVyLT5WaXNpYmlsaXR5ID0gWGFtbDo6VmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3RhdHVzQm9yZGVyLT5WaXNpYmlsaXR5ID0gWGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgIH0KK30KKwordm9pZAorVGFsa0dyaWQ6OlByb3RvY29sX0NoYW5nZWQoCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIGF1dG8gcmFkaW9CdG4gPSBkeW5hbWljX2Nhc3Q8UmFkaW9CdXR0b25ePihzZW5kZXIpOworICAgIGlmICghcmFkaW9CdG4pCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBwcm90b2NvbCA9IChyYWRpb0J0biA9PSBUY3BSYWRpbykgPyBQcm90b2NvbDo6VENQIDogUHJvdG9jb2w6OlVEUDsKKworICAgIFNlcnZlclJvbGUtPlByb3RvY29sQ2hhbmdlZChwcm90b2NvbCk7CisgICAgQ2xpZW50Um9sZS0+UHJvdG9jb2xDaGFuZ2VkKHByb3RvY29sKTsKK30KKwordm9pZAorVGFsa0dyaWQ6OlJvbGVfQ2hhbmdlZCgKKyAgICBPYmplY3ReICAgICAgICAgIHNlbmRlciwKKyAgICBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgYXV0byByYWRpb0J0biA9IGR5bmFtaWNfY2FzdDxSYWRpb0J1dHRvbl4+KHNlbmRlcik7CisgICAgaWYgKCFyYWRpb0J0bikKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocmFkaW9CdG4gPT0gU2VydmVyUmFkaW8pCisgICAgeworICAgICAgICAvLyBzd2l0Y2ggdG8gc2VydmVyIHJvbGUgVUkKKyAgICAgICAgQ2xpZW50Um9sZS0+VmlzaWJpbGl0eSA9IFhhbWw6OlZpc2liaWxpdHk6OkNvbGxhcHNlZDsKKyAgICAgICAgU2VydmVyUm9sZS0+VmlzaWJpbGl0eSA9IFhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIHN3aXRjaCB0byBjbGllbnQgcm9sZSBVSQorICAgICAgICBTZXJ2ZXJSb2xlLT5WaXNpYmlsaXR5ID0gWGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICBDbGllbnRSb2xlLT5WaXNpYmlsaXR5ID0gWGFtbDo6VmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvVGFsa0dyaWQueGFtbC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1RhbGtHcmlkLnhhbWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzg3MDk1Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1RhbGtHcmlkLnhhbWwuaApAQCAtMCwwICsxLDYxIEBACivvu78vKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRhbGtHcmlkLmcuaCIKKyNpbmNsdWRlICJJQXN5bmNUaHJlYWROb3RpZnkuaCIKKyNpbmNsdWRlICJJTWFpblBhZ2VVSUVsZW1lbnRzLmgiCisjaW5jbHVkZSAiUHJvdG9jb2wuaCIKKworbmFtZXNwYWNlIG90Cit7CisKK1tXaW5kb3dzOjpGb3VuZGF0aW9uOjpNZXRhZGF0YTo6V2ViSG9zdEhpZGRlbl0KK3B1YmxpYyByZWYgY2xhc3MgVGFsa0dyaWQgc2VhbGVkIDogcHVibGljIElBc3luY1RocmVhZE5vdGlmeQoreworcHVibGljOgorICAgIFRhbGtHcmlkKCk7CisKKyAgICB2b2lkIEluaXQoSU1haW5QYWdlVUlFbGVtZW50c14gbWFpblBhZ2VVSUVsZW1lbnRzKTsKKworICAgIC8vIElBc3luY1RocmVhZE1lc3NhZ2UKKyAgICB2aXJ0dWFsIHZvaWQgTm90aWZ5RnJvbUFzeW5jVGhyZWFkKFN0cmluZ14gbWVzc2FnZSwgTm90aWZ5VHlwZSB0eXBlKTsKKworICAgIHZvaWQgTm90aWZ5KFN0cmluZ14gbWVzc2FnZSwgTm90aWZ5VHlwZSB0eXBlKTsKKworcHJpdmF0ZToKKyAgICAvLyBjaGFuZ2UgcHJvdG9jb2wKKyAgICAvLyBUQ1AgPC0+IFVEUAorICAgIHZvaWQgUHJvdG9jb2xfQ2hhbmdlZChQbGF0Zm9ybTo6T2JqZWN0XiBzZW5kZXIsIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUpOworCisgICAgLy8gY2hhbmdlIHJvbGUgZnJvbSBzZXJ2ZXIgY2xpZW50IChvciB2aWNlIHZlcnNhKQorICAgIHZvaWQgUm9sZV9DaGFuZ2VkKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1RhbGtIZWxwZXIuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrSGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmYjg0OQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrSGVscGVyLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBvdAoreworcmVmIGNsYXNzIENsaWVudENvbnRyb2w7CityZWYgY2xhc3MgU2VydmVyQ29udHJvbDsKKworY2xhc3MgVGFsa0hlbHBlcgoreworcHJpdmF0ZToKKyAgICBmcmllbmQgcmVmIGNsYXNzIENsaWVudENvbnRyb2w7CisgICAgZnJpZW5kIHJlZiBjbGFzcyBTZXJ2ZXJDb250cm9sOworCisgICAgLy8gdGhpcyBpcyBhIHByaXZhdGUgbWV0aG9kIGZvciBzcGVjaWZpYyB1c2FnZSwgbm90IGEgZ2VuZXJhbCBwdXJwb3NlIG9uZQorICAgIC8vIGNoZWNrcyBhbGwgY2hhcnMgYXJlIHZhbGlkIElwdjYgY2hhcnMgaW4gdGhlIHJhbmdlIFtiZWdpbiwgZW5kKQorICAgIHN0YXRpYyBib29sIEFsbFZhbGlkSXB2NkNoYXJzKGNvbnN0IHdjaGFyX3QqIGJlZ2luLCBjb25zdCB3Y2hhcl90KiBlbmQpCisgICAgeworICAgICAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGMgPSAqaXQ7CisKKyAgICAgICAgICAgIGlmICgoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IChjID09ICc6JykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKSB8fCAoYyA+PSAnQScgJiYgYyA8PSAnRicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9vdEFkYXB0ZXIuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9vdEFkYXB0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTA4MTgyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL290QWRhcHRlci5oCkBAIC0wLDAgKzEsNjA3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2RlZmluZSBPVERMTCAxCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9ib3JkZXJfcm91dGVyLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90aHJlYWRfZnRkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb21taXNzaW9uZXIuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2pvaW5lci5oPgorCisjaW5jbHVkZSA8d3JsLmg+CisjaW5jbHVkZSA8Y29sbGVjdGlvbi5oPgorCit1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm07Cit1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm06OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOjpNZXRhZGF0YTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpDb2xsZWN0aW9uczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpOZXR3b3JraW5nOworCituYW1lc3BhY2Ugb3QKK3sKKworcmVmIGNsYXNzIG90QWRhcHRlcjsKKworcHVibGljIGRlbGVnYXRlIHZvaWQgb3RBZGFwdGVyUmVtb3ZhbERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKKworcHVibGljIGRlbGVnYXRlIHZvaWQgb3RJcEFkZHJlc3NBZGRlZERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKK3B1YmxpYyBkZWxlZ2F0ZSB2b2lkIG90SXBBZGRyZXNzUmVtb3ZlZERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKK3B1YmxpYyBkZWxlZ2F0ZSB2b2lkIG90SXBSbG9jQWRkZWREZWxlZ2F0ZShvdEFkYXB0ZXJeIHNlbmRlcik7CitwdWJsaWMgZGVsZWdhdGUgdm9pZCBvdElwUmxvY1JlbW92ZWREZWxlZ2F0ZShvdEFkYXB0ZXJeIHNlbmRlcik7CitwdWJsaWMgZGVsZWdhdGUgdm9pZCBvdElwTGlua0xvY2FsQWRkcmVzQ2hhbmdlZERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKK3B1YmxpYyBkZWxlZ2F0ZSB2b2lkIG90SXBNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkRGVsZWdhdGUob3RBZGFwdGVyXiBzZW5kZXIpOworCitwdWJsaWMgZGVsZWdhdGUgdm9pZCBvdE5ldFJvbGVDaGFuZ2VkRGVsZWdhdGUob3RBZGFwdGVyXiBzZW5kZXIpOworcHVibGljIGRlbGVnYXRlIHZvaWQgb3ROZXRQYXJ0aXRpb25JZENoYW5nZWREZWxlZ2F0ZShvdEFkYXB0ZXJeIHNlbmRlcik7CitwdWJsaWMgZGVsZWdhdGUgdm9pZCBvdE5ldEtleVNlcXVlbmNlQ291bnRlckNoYW5nZWREZWxlZ2F0ZShvdEFkYXB0ZXJeIHNlbmRlcik7CisKK3B1YmxpYyBkZWxlZ2F0ZSB2b2lkIG90VGhyZWFkQ2hpbGRBZGRlZERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKK3B1YmxpYyBkZWxlZ2F0ZSB2b2lkIG90VGhyZWFkQ2hpbGRSZW1vdmVkRGVsZWdhdGUob3RBZGFwdGVyXiBzZW5kZXIpOworcHVibGljIGRlbGVnYXRlIHZvaWQgb3RUaHJlYWROZXREYXRhVXBkYXRlZERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKKworW0ZsYWdzXQorcHVibGljIGVudW0gY2xhc3Mgb3RMaW5rTW9kZUZsYWdzIDogdW5zaWduZWQgaW50Cit7CisgICAgTm9uZSAgICAgICAgICAgICAgICA9IDAsCisgICAgUnhPbldoZW5JZGxlICAgICAgICA9IDB4MSwgIC8qIDEsIGlmIHRoZSBzZW5kZXIgaGFzIGl0cyByZWNlaXZlciBvbiB3aGVuIG5vdCB0cmFuc21pdHRpbmcuICAwLCBvdGhlcndpc2UuICovCisgICAgU2VjdXJlRGF0YVJlcXVlc3RzICA9IDB4MiwgIC8qIDEsIGlmIHRoZSBzZW5kZXIgd2lsbCB1c2UgSUVFRSA4MDIuMTUuNCB0byBzZWN1cmUgYWxsIGRhdGEgcmVxdWVzdHMuICAwLCBvdGhlcndpc2UuICovCisgICAgRGV2aWNlVHlwZSAgICAgICAgICA9IDB4NCwgIC8qIDEsIGlmIHRoZSBzZW5kZXIgaXMgYW4gRkZELiAgMCwgb3RoZXJ3aXNlLiAqLworICAgIE5ldHdvcmtEYXRhICAgICAgICAgPSAweDggICAvKiAxLCBpZiB0aGUgc2VuZGVyIHJlcXVpcmVzIHRoZSBmdWxsIE5ldHdvcmsgRGF0YS4gIDAsIG90aGVyd2lzZS4gKi8KK307CisKK3B1YmxpYyBlbnVtIGNsYXNzIG90VGhyZWFkU3RhdGUKK3sKKyAgICBPZmZsaW5lLAorICAgIERpc2FibGVkLAorICAgIERldGFjaGVkLAorICAgIENoaWxkLAorICAgIFJvdXRlciwKKyAgICBMZWFkZXIKK307CisKKy8vIEhlbHBlciBjbGFzcyBmb3IgT3BlblRocmVhZCBJbnRlcmZhY2UvQWRhcHRlciBzcGVjaWZpYyBBUElzCitwdWJsaWMgcmVmIGNsYXNzIG90QWRhcHRlciBzZWFsZWQKK3sKK3ByaXZhdGU6CisKKyAgICB2b2lkICpfSW5zdGFuY2U7CisgICAgI2RlZmluZSBEZXZpY2VJbnN0YW5jZSAoKG90SW5zdGFuY2UqKV9JbnN0YW5jZSkKKworICAgICNkZWZpbmUgVGhyb3dPbkZhaWx1cmUoZXhwKSBcCisgICAgZG8geyBcCisgICAgICAgIGF1dG8gcmVzID0gZXhwOyBcCisgICAgICAgIGlmIChyZXMgIT0gMCkgXAorICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oVGhlYWRFcnJvclRvSFJlc3VsdChyZXMpLCAjZXhwKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCitwdWJsaWM6CisKKyNwcmFnbWEgcmVnaW9uIEV2ZW50cworCisgICAgZXZlbnQgb3RBZGFwdGVyUmVtb3ZhbERlbGVnYXRlXiAgICAgICAgICAgICAgICAgQWRhcHRlclJlbW92YWw7CisKKyAgICBldmVudCBvdElwQWRkcmVzc0FkZGVkRGVsZWdhdGVeICAgICAgICAgICAgICAgICBJcEFkZHJlc3NBZGRlZDsKKyAgICBldmVudCBvdElwQWRkcmVzc1JlbW92ZWREZWxlZ2F0ZV4gICAgICAgICAgICAgICBJcEFkZHJlc3NSZW1vdmVkOworICAgIGV2ZW50IG90SXBSbG9jQWRkZWREZWxlZ2F0ZV4gICAgICAgICAgICAgICAgICAgIElwUmxvY0FkZGVkOworICAgIGV2ZW50IG90SXBSbG9jUmVtb3ZlZERlbGVnYXRlXiAgICAgICAgICAgICAgICAgIElwUmxvY1JlbW92ZWQ7CisgICAgZXZlbnQgb3RJcExpbmtMb2NhbEFkZHJlc0NoYW5nZWREZWxlZ2F0ZV4gICAgICAgSXBMaW5rTG9jYWxBZGRyZXNDaGFuZ2VkOworICAgIGV2ZW50IG90SXBNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkRGVsZWdhdGVeICAgICAgIElwTWVzaExvY2FsQWRkcmVzQ2hhbmdlZDsKKworICAgIGV2ZW50IG90TmV0Um9sZUNoYW5nZWREZWxlZ2F0ZV4gICAgICAgICAgICAgICAgIE5ldFJvbGVDaGFuZ2VkOworICAgIGV2ZW50IG90TmV0UGFydGl0aW9uSWRDaGFuZ2VkRGVsZWdhdGVeICAgICAgICAgIE5ldFBhcnRpdGlvbklkQ2hhbmdlZDsKKyAgICBldmVudCBvdE5ldEtleVNlcXVlbmNlQ291bnRlckNoYW5nZWREZWxlZ2F0ZV4gICBOZXRLZXlTZXF1ZW5jZUNvdW50ZXJDaGFuZ2VkOworCisgICAgZXZlbnQgb3RUaHJlYWRDaGlsZEFkZGVkRGVsZWdhdGVeICAgICAgICAgICAgICAgVGhyZWFkQ2hpbGRBZGRlZDsKKyAgICBldmVudCBvdFRocmVhZENoaWxkUmVtb3ZlZERlbGVnYXRlXiAgICAgICAgICAgICBUaHJlYWRDaGlsZFJlbW92ZWQ7CisgICAgZXZlbnQgb3RUaHJlYWROZXREYXRhVXBkYXRlZERlbGVnYXRlXiAgICAgICAgICAgVGhyZWFkTmV0RGF0YVVwZGF0ZWQ7CisKKyNwcmFnbWEgZW5kcmVnaW9uCisKKyNwcmFnbWEgcmVnaW9uIFByb3BlcnRpZXMKKworICAgIHByb3BlcnR5IEludFB0ciBSYXdIYW5kbGUKKyAgICB7CisgICAgICAgIEludFB0ciBnZXQoKSB7IHJldHVybiBfSW5zdGFuY2U7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSBHdWlkIEludGVyZmFjZUd1aWQKKyAgICB7CisgICAgICAgIEd1aWQgZ2V0KCkgeyByZXR1cm4gb3RHZXREZXZpY2VHdWlkKERldmljZUluc3RhbmNlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQzMl90IElmSW5kZXgKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGdldCgpIHsgcmV0dXJuIG90R2V0RGV2aWNlSWZJbmRleChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50MzJfdCBDb21wYXJ0bWVudElkCisgICAgeworICAgICAgICB1aW50MzJfdCBnZXQoKSB7IHJldHVybiBvdEdldENvbXBhcnRtZW50SWQoRGV2aWNlSW5zdGFuY2UpOyB9CisgICAgfQorCisjcHJhZ21hIHJlZ2lvbiBMaW5rIExheWVyCisKKyAgICBwcm9wZXJ0eSBzaWduZWQgaW50IC8qaW50OF90Ki8gTWF4VHJhbnNtaXRQb3dlcgorICAgIHsKKyAgICAgICAgc2lnbmVkIGludCBnZXQoKSB7IHJldHVybiBvdExpbmtHZXRNYXhUcmFuc21pdFBvd2VyKERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldChzaWduZWQgaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodmFsdWUgPiAxMjcpIHRocm93IEV4Y2VwdGlvbjo6Q3JlYXRlRXhjZXB0aW9uKEVfSU5WQUxJREFSRyk7CisgICAgICAgICAgICBvdExpbmtTZXRNYXhUcmFuc21pdFBvd2VyKERldmljZUluc3RhbmNlLCAoaW50OF90KXZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQzMl90IFBvbGxQZXJpb2QKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGdldCgpIHsgcmV0dXJuIG90TGlua0dldFBvbGxQZXJpb2QoRGV2aWNlSW5zdGFuY2UpOyB9CisgICAgICAgIHZvaWQgc2V0KHVpbnQzMl90IHZhbHVlKSB7IG90TGlua1NldFBvbGxQZXJpb2QoRGV2aWNlSW5zdGFuY2UsIHZhbHVlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQ4X3QgQ2hhbm5lbAorICAgIHsgCisgICAgICAgIHVpbnQ4X3QgZ2V0KCkgeyByZXR1cm4gb3RMaW5rR2V0Q2hhbm5lbChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICAgICAgdm9pZCBzZXQodWludDhfdCB2YWx1ZSkgeyBUaHJvd09uRmFpbHVyZShvdExpbmtTZXRDaGFubmVsKERldmljZUluc3RhbmNlLCB2YWx1ZSkpOyB9CisgICAgfQorCisgICAgcHJvcGVydHkgdWludDE2X3QgUGFuSWQKKyAgICB7CisgICAgICAgIHVpbnQxNl90IGdldCgpIHsgcmV0dXJuIG90TGlua0dldFBhbklkKERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldCh1aW50MTZfdCB2YWx1ZSkgeyBUaHJvd09uRmFpbHVyZShvdExpbmtTZXRQYW5JZChEZXZpY2VJbnN0YW5jZSwgdmFsdWUpKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQxNl90IFNob3J0QWRkcmVzcworICAgIHsKKyAgICAgICAgdWludDE2X3QgZ2V0KCkgeyByZXR1cm4gb3RMaW5rR2V0U2hvcnRBZGRyZXNzKERldmljZUluc3RhbmNlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQ2NF90IEV4dGVuZGVkQWRkcmVzcworICAgIHsKKyAgICAgICAgdWludDY0X3QgZ2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBhZGRyID0gb3RMaW5rR2V0RXh0ZW5kZWRBZGRyZXNzKERldmljZUluc3RhbmNlKTsKKyAgICAgICAgICAgIGF1dG8gcmV0ID0gKih1aW50NjRfdCopYWRkcjsKKyAgICAgICAgICAgIG90RnJlZU1lbW9yeShhZGRyKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXQodWludDY0X3QgdmFsdWUpIAorICAgICAgICB7CisgICAgICAgICAgICBUaHJvd09uRmFpbHVyZShvdExpbmtTZXRFeHRlbmRlZEFkZHJlc3MoRGV2aWNlSW5zdGFuY2UsIChvdEV4dEFkZHJlc3MqKSZ2YWx1ZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvcGVydHkgdWludDY0X3QgRmFjdG9yeUFzc2lnbmVkSWVlZUV1aTY0CisgICAgeworICAgICAgICB1aW50NjRfdCBnZXQoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50NjRfdCBhZGRyOworICAgICAgICAgICAgb3RMaW5rR2V0RmFjdG9yeUFzc2lnbmVkSWVlZUV1aTY0KERldmljZUluc3RhbmNlLCAob3RFeHRBZGRyZXNzKikmYWRkcik7CisgICAgICAgICAgICByZXR1cm4gYWRkcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQ2NF90IEpvaW5lcklkCisgICAgeworICAgICAgICB1aW50NjRfdCBnZXQoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50NjRfdCBhZGRyOworICAgICAgICAgICAgb3RMaW5rR2V0Sm9pbmVySWQoRGV2aWNlSW5zdGFuY2UsIChvdEV4dEFkZHJlc3MqKSZhZGRyKTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyOworICAgICAgICB9CisgICAgfQorCisjcHJhZ21hIGVuZHJlZ2lvbgorCisjcHJhZ21hIHJlZ2lvbiBJUCBMYXllcgorCisgICAgcHJvcGVydHkgYm9vbCBJcEVuYWJsZWQKKyAgICB7CisgICAgICAgIGJvb2wgZ2V0KCkgeyByZXR1cm4gb3RJcDZJc0VuYWJsZWQoRGV2aWNlSW5zdGFuY2UpOyB9CisgICAgICAgIHZvaWQgc2V0KGJvb2wgdmFsdWUpIHsgVGhyb3dPbkZhaWx1cmUob3RJcDZTZXRFbmFibGVkKERldmljZUluc3RhbmNlLCB2YWx1ZSkpOyB9CisgICAgfQorCisjcHJhZ21hIGVuZHJlZ2lvbgorCisjcHJhZ21hIHJlZ2lvbiBUaHJlYWQgTGF5ZXIKKworICAgIHByb3BlcnR5IHVpbnQ2NF90IEV4dGVuZGVkUGFuSWQKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IGdldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcGFuaWQgPSBvdFRocmVhZEdldEV4dGVuZGVkUGFuSWQoRGV2aWNlSW5zdGFuY2UpOworICAgICAgICAgICAgYXV0byByZXQgPSAqKHVpbnQ2NF90KilwYW5pZDsKKyAgICAgICAgICAgIG90RnJlZU1lbW9yeShwYW5pZCk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0KHVpbnQ2NF90IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBvdFRocmVhZFNldEV4dGVuZGVkUGFuSWQoRGV2aWNlSW5zdGFuY2UsICh1aW50OF90KikmdmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvcGVydHkgb3RMaW5rTW9kZUZsYWdzIExpbmtNb2RlCisgICAgeworICAgICAgICBvdExpbmtNb2RlRmxhZ3MgZ2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsaW5rbW9kZSA9IG90VGhyZWFkR2V0TGlua01vZGUoRGV2aWNlSW5zdGFuY2UpOworICAgICAgICAgICAgb3RMaW5rTW9kZUZsYWdzIGZsYWdzID0gb3RMaW5rTW9kZUZsYWdzOjpOb25lOworICAgICAgICAgICAgaWYgKGxpbmttb2RlLm1SeE9uV2hlbklkbGUpICAgICAgICAgZmxhZ3MgPSBmbGFncyB8IG90TGlua01vZGVGbGFnczo6UnhPbldoZW5JZGxlOworICAgICAgICAgICAgaWYgKGxpbmttb2RlLm1TZWN1cmVEYXRhUmVxdWVzdHMpICAgZmxhZ3MgPSBmbGFncyB8IG90TGlua01vZGVGbGFnczo6U2VjdXJlRGF0YVJlcXVlc3RzOworICAgICAgICAgICAgaWYgKGxpbmttb2RlLm1EZXZpY2VUeXBlKSAgICAgICAgICAgZmxhZ3MgPSBmbGFncyB8IG90TGlua01vZGVGbGFnczo6RGV2aWNlVHlwZTsKKyAgICAgICAgICAgIGlmIChsaW5rbW9kZS5tTmV0d29ya0RhdGEpICAgICAgICAgIGZsYWdzID0gZmxhZ3MgfCBvdExpbmtNb2RlRmxhZ3M6Ok5ldHdvcmtEYXRhOworICAgICAgICAgICAgcmV0dXJuIGZsYWdzOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0KG90TGlua01vZGVGbGFncyB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMaW5rTW9kZUNvbmZpZyBsaW5rbW9kZSA9IHsgMCB9OworICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIG90TGlua01vZGVGbGFnczo6UnhPbldoZW5JZGxlKSAhPSBvdExpbmtNb2RlRmxhZ3M6Ok5vbmUpCisgICAgICAgICAgICAgICAgbGlua21vZGUubVJ4T25XaGVuSWRsZSA9IHRydWU7CisgICAgICAgICAgICBpZiAoKHZhbHVlICYgb3RMaW5rTW9kZUZsYWdzOjpTZWN1cmVEYXRhUmVxdWVzdHMpICE9IG90TGlua01vZGVGbGFnczo6Tm9uZSkKKyAgICAgICAgICAgICAgICBsaW5rbW9kZS5tU2VjdXJlRGF0YVJlcXVlc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICgodmFsdWUgJiBvdExpbmtNb2RlRmxhZ3M6OkRldmljZVR5cGUpICE9IG90TGlua01vZGVGbGFnczo6Tm9uZSkKKyAgICAgICAgICAgICAgICBsaW5rbW9kZS5tRGV2aWNlVHlwZSA9IHRydWU7CisgICAgICAgICAgICBpZiAoKHZhbHVlICYgb3RMaW5rTW9kZUZsYWdzOjpOZXR3b3JrRGF0YSkgIT0gb3RMaW5rTW9kZUZsYWdzOjpOb25lKQorICAgICAgICAgICAgICAgIGxpbmttb2RlLm1OZXR3b3JrRGF0YSA9IHRydWU7CisgICAgICAgICAgICBUaHJvd09uRmFpbHVyZShvdFRocmVhZFNldExpbmtNb2RlKERldmljZUluc3RhbmNlLCBsaW5rbW9kZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHVpbnQzMl90IGNoYXJUb1ZhbHVlKHdjaGFyX3QgYykKKyAgICB7CisgICAgICAgIGlmIChjID49IEwnYScgJiYgYyA8PSBMJ2YnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYyAtIEwnYSc7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYyA+PSBMJ0EnICYmIGMgPD0gTCdGJykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGMgLSBMJ0EnOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGMgPj0gTCcwJyAmJiBjIDw9IEwnOScpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjIC0gTCcwJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IEV4Y2VwdGlvbjo6Q3JlYXRlRXhjZXB0aW9uKEVfSU5WQUxJREFSRyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSBTdHJpbmdeIE1hc3RlcktleQorICAgIHsKKyAgICAgICAgU3RyaW5nXiBnZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdGV4cHIgY2hhciBoZXhtYXBbXSA9IHsgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnIH07CisgICAgICAgICAgICBhdXRvIGtleSA9IG90VGhyZWFkR2V0TWFzdGVyS2V5KERldmljZUluc3RhbmNlKTsKKyAgICAgICAgICAgIFdDSEFSIHN6S2V5W09UX01BU1RFUl9LRVlfU0laRSAqIDIgKyAxXSA9IHsgMCB9OworICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgT1RfTUFTVEVSX0tFWV9TSVpFOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3pLZXlbMiAqIGldICAgICA9IGhleG1hcFsoa2V5LT5tOFtpXSAmIDB4RjApID4+IDRdOworICAgICAgICAgICAgICAgIHN6S2V5WzIgKiBpICsgMV0gPSBoZXhtYXBba2V5LT5tOFtpXSAmIDB4MEZdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3RGcmVlTWVtb3J5KGtleSk7CisgICAgICAgICAgICByZXR1cm4gcmVmIG5ldyBTdHJpbmcoc3pLZXkpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0KFN0cmluZ14gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TWFzdGVyS2V5IGtleTsKKyAgICAgICAgICAgIHVpbnQ4X3Qga2V5TGVuID0gMDsKKyAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB2YWx1ZS0+TGVuZ3RoKCkgLSAxOyBpKz0yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGtleS5tOFtrZXlMZW4rK10gPSAodWludDhfdCkoKGNoYXJUb1ZhbHVlKHZhbHVlLT5EYXRhKClbaV0pIDw8IDQpIHwKKyAgICAgICAgICAgICAgICAgICAgY2hhclRvVmFsdWUodmFsdWUtPkRhdGEoKVtpICsgMV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChrZXlMZW4gKiAyID09IHZhbHVlLT5MZW5ndGgoKSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAga2V5Lm04W2tleUxlbisrXSA9ICh1aW50OF90KShjaGFyVG9WYWx1ZSh2YWx1ZS0+RGF0YSgpW3ZhbHVlLT5MZW5ndGgoKS0xXSkpIDw8IDQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1zZXQoa2V5Lm04ICsga2V5TGVuLCAwLCBzaXplb2Yoa2V5KSAtIGtleUxlbik7CisgICAgICAgICAgICBUaHJvd09uRmFpbHVyZShvdFRocmVhZFNldE1hc3RlcktleShEZXZpY2VJbnN0YW5jZSwgJmtleSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvcGVydHkgU3RyaW5nXiBOZXR3b3JrTmFtZQorICAgIHsKKyAgICAgICAgU3RyaW5nXiBnZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIF9uYW1lID0gb3RUaHJlYWRHZXROZXR3b3JrTmFtZShEZXZpY2VJbnN0YW5jZSk7CisgICAgICAgICAgICBXQ0hBUiBuYW1lW09UX05FVFdPUktfTkFNRV9NQVhfU0laRSArIDFdOworICAgICAgICAgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LCAwLCBfbmFtZSwgLTEsIG5hbWUsIEFSUkFZU0laRShuYW1lKSk7CisgICAgICAgICAgICBvdEZyZWVNZW1vcnkoX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIHJlZiBuZXcgU3RyaW5nKG5hbWUpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0KFN0cmluZ14gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgbmFtZVtPVF9ORVRXT1JLX05BTUVfTUFYX1NJWkUgKyAxXTsKKyAgICAgICAgICAgIGF1dG8gbGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCB2YWx1ZS0+RGF0YSgpLCAtMSwgbmFtZSwgQVJSQVlTSVpFKG5hbWUpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmIChsZW4gPD0gMCkgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHKTsKKyAgICAgICAgICAgIFRocm93T25GYWlsdXJlKG90VGhyZWFkU2V0TmV0d29ya05hbWUoRGV2aWNlSW5zdGFuY2UsIG5hbWUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQ4X3QgTWF4QWxsb3dlZENoaWxkcmVuCisgICAgeworICAgICAgICB1aW50OF90IGdldCgpIHsgcmV0dXJuIG90VGhyZWFkR2V0TWF4QWxsb3dlZENoaWxkcmVuKERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldCh1aW50OF90IHZhbHVlKSB7IFRocm93T25GYWlsdXJlKG90VGhyZWFkU2V0TWF4QWxsb3dlZENoaWxkcmVuKERldmljZUluc3RhbmNlLCB2YWx1ZSkpOyB9CisgICAgfQorCisgICAgcHJvcGVydHkgdWludDMyX3QgQ2hpbGRUaW1lb3V0CisgICAgeworICAgICAgICB1aW50MzJfdCBnZXQoKSB7IHJldHVybiBvdFRocmVhZEdldENoaWxkVGltZW91dChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICAgICAgdm9pZCBzZXQodWludDMyX3QgdmFsdWUpIHsgb3RUaHJlYWRTZXRDaGlsZFRpbWVvdXQoRGV2aWNlSW5zdGFuY2UsIHZhbHVlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IGJvb2wgVGhyZWFkRW5hYmxlZAorICAgIHsKKyAgICAgICAgLy9ib29sIGdldCgpIHsgcmV0dXJuIG90SXNUaHJlYWRTdGFydGVkKERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldChib29sIHZhbHVlKSB7IFRocm93T25GYWlsdXJlKG90VGhyZWFkU2V0RW5hYmxlZChEZXZpY2VJbnN0YW5jZSwgdmFsdWUpKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IGJvb2wgQXV0b1N0YXJ0CisgICAgeworICAgICAgICBib29sIGdldCgpIHsgcmV0dXJuIG90VGhyZWFkR2V0QXV0b1N0YXJ0KERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldChib29sIHZhbHVlKSB7IFRocm93T25GYWlsdXJlKG90VGhyZWFkU2V0QXV0b1N0YXJ0KERldmljZUluc3RhbmNlLCB2YWx1ZSkpOyB9CisgICAgfQorCisgICAgcHJvcGVydHkgYm9vbCBTaW5nbGV0b24KKyAgICB7CisgICAgICAgIGJvb2wgZ2V0KCkgeyByZXR1cm4gb3RUaHJlYWRJc1NpbmdsZXRvbihEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSBib29sIFJvdXRlclJvbGVFbmFibGVkCisgICAgeworICAgICAgICBib29sIGdldCgpIHsgcmV0dXJuIG90VGhyZWFkSXNSb3V0ZXJSb2xlRW5hYmxlZChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICAgICAgdm9pZCBzZXQoYm9vbCB2YWx1ZSkgeyBvdFRocmVhZFNldFJvdXRlclJvbGVFbmFibGVkKERldmljZUluc3RhbmNlLCB2YWx1ZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50OF90IFByZWZlcnJlZFJvdXRlcklkCisgICAgeworICAgICAgICB2b2lkIHNldCh1aW50OF90IHZhbHVlKSB7IFRocm93T25GYWlsdXJlKG90VGhyZWFkU2V0UHJlZmVycmVkUm91dGVySWQoRGV2aWNlSW5zdGFuY2UsIHZhbHVlKSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSBIb3N0TmFtZV4gTWVzaExvY2FsRWlkCisgICAgeworICAgICAgICBIb3N0TmFtZV4gZ2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBhZGRyID0gb3RUaHJlYWRHZXRNZXNoTG9jYWxFaWQoRGV2aWNlSW5zdGFuY2UpOworICAgICAgICAgICAgV0NIQVIgc3pBZGRyWzQ2XTsKKyAgICAgICAgICAgIFJ0bElwdjZBZGRyZXNzVG9TdHJpbmcoKElONl9BRERSKilhZGRyLCBzekFkZHIpOworICAgICAgICAgICAgb3RGcmVlTWVtb3J5KGFkZHIpOworICAgICAgICAgICAgcmV0dXJuIHJlZiBuZXcgSG9zdE5hbWUocmVmIG5ldyBTdHJpbmcoc3pBZGRyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSBIb3N0TmFtZV4gTGVhZGVyUmxvYworICAgIHsKKyAgICAgICAgSG9zdE5hbWVeIGdldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIElONl9BRERSIGFkZHI7CisgICAgICAgICAgICBUaHJvd09uRmFpbHVyZShvdFRocmVhZEdldExlYWRlclJsb2MoRGV2aWNlSW5zdGFuY2UsIChvdElwNkFkZHJlc3MqKSZhZGRyKSk7CisgICAgICAgICAgICBXQ0hBUiBzekFkZHJbNDZdOworICAgICAgICAgICAgUnRsSXB2NkFkZHJlc3NUb1N0cmluZygmYWRkciwgc3pBZGRyKTsKKyAgICAgICAgICAgIHJldHVybiByZWYgbmV3IEhvc3ROYW1lKHJlZiBuZXcgU3RyaW5nKHN6QWRkcikpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvcGVydHkgdWludDhfdCBMb2NhbExlYWRlcldlaWdodAorICAgIHsKKyAgICAgICAgdWludDhfdCBnZXQoKSB7IHJldHVybiBvdFRocmVhZEdldExvY2FsTGVhZGVyV2VpZ2h0KERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldCh1aW50OF90IHZhbHVlKSB7IG90VGhyZWFkU2V0TG9jYWxMZWFkZXJXZWlnaHQoRGV2aWNlSW5zdGFuY2UsIHZhbHVlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQzMl90IExvY2FsTGVhZGVyUGFydGl0aW9uSWQKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGdldCgpIHsgcmV0dXJuIG90VGhyZWFkR2V0TG9jYWxMZWFkZXJQYXJ0aXRpb25JZChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICAgICAgdm9pZCBzZXQodWludDMyX3QgdmFsdWUpIHsgb3RUaHJlYWRTZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKERldmljZUluc3RhbmNlLCB2YWx1ZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50OF90IExlYWRlcldlaWdodAorICAgIHsKKyAgICAgICAgdWludDhfdCBnZXQoKSB7IHJldHVybiBvdFRocmVhZEdldExlYWRlcldlaWdodChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50MzJfdCBMZWFkZXJSb3V0ZXJJZAorICAgIHsKKyAgICAgICAgdWludDMyX3QgZ2V0KCkgeyByZXR1cm4gb3RUaHJlYWRHZXRMZWFkZXJSb3V0ZXJJZChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50MzJfdCBQYXJ0aXRpb25JZAorICAgIHsKKyAgICAgICAgdWludDMyX3QgZ2V0KCkgeyByZXR1cm4gb3RUaHJlYWRHZXRQYXJ0aXRpb25JZChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50MTZfdCBSbG9jMTYKKyAgICB7CisgICAgICAgIHVpbnQxNl90IGdldCgpIHsgcmV0dXJuIG90VGhyZWFkR2V0UmxvYzE2KERldmljZUluc3RhbmNlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IG90VGhyZWFkU3RhdGUgU3RhdGUKKyAgICB7CisgICAgICAgIG90VGhyZWFkU3RhdGUgZ2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChvdFRocmVhZFN0YXRlKW90VGhyZWFkR2V0RGV2aWNlUm9sZShEZXZpY2VJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICB9CisKKyNwcmFnbWEgZW5kcmVnaW9uCisKKyNwcmFnbWEgZW5kcmVnaW9uCisKKyNwcmFnbWEgcmVnaW9uIENvbnN0cnVjdG9yL0Rlc3RydWN0b3IKKworICAgIG90QWRhcHRlcihfSW5fIEludFB0ciAvKm90SW5zdGFuY2UqKi8gYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgX0luc3RhbmNlID0gKHZvaWQqKWFJbnN0YW5jZTsKKworICAgICAgICBJSW5zcGVjdGFibGUqIHBJbnNwZWN0YWJsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SUluc3BlY3RhYmxlKj4odGhpcyk7CisKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGRldmljZSBhdmFpbGFiaWxpdHkgY2FsbGJhY2tzCisgICAgICAgIG90U2V0U3RhdGVDaGFuZ2VkQ2FsbGJhY2soRGV2aWNlSW5zdGFuY2UsIFRocmVhZFN0YXRlQ2hhbmdlQ2FsbGJhY2ssIHBJbnNwZWN0YWJsZSk7CisgICAgfQorCisgICAgdmlydHVhbCB+b3RBZGFwdGVyKCkKKyAgICB7CisgICAgICAgIC8vIFVucmVnaXN0ZXIgZm9yIGNhbGxiYWNrcyBmb3IgdGhlIGRldmljZQorICAgICAgICBvdFNldFN0YXRlQ2hhbmdlZENhbGxiYWNrKERldmljZUluc3RhbmNlLCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICAvLyBGcmVlIHRoZSBkZXZpY2UKKyAgICAgICAgb3RGcmVlTWVtb3J5KERldmljZUluc3RhbmNlKTsKKyAgICB9CisKKyNwcmFnbWEgZW5kcmVnaW9uCisKKyNwcmFnbWEgcmVnaW9uIEZ1bmN0aW9ucworCisgICAgdm9pZCBQbGF0Zm9ybVJlc2V0KCkKKyAgICB7CisgICAgICAgIG90SW5zdGFuY2VSZXNldChEZXZpY2VJbnN0YW5jZSk7CisgICAgfQorCisgICAgdm9pZCBGYWN0b3J5UmVzZXQoKQorICAgIHsKKyAgICAgICAgb3RJbnN0YW5jZUZhY3RvcnlSZXNldChEZXZpY2VJbnN0YW5jZSk7CisgICAgfQorCisgICAgdm9pZCBCZWNvbWVSb3V0ZXIoKQorICAgIHsKKyAgICAgICAgVGhyb3dPbkZhaWx1cmUob3RUaHJlYWRCZWNvbWVSb3V0ZXIoRGV2aWNlSW5zdGFuY2UpKTsKKyAgICB9CisKKyAgICB2b2lkIEJlY29tZUxlYWRlcigpCisgICAgeworICAgICAgICBUaHJvd09uRmFpbHVyZShvdFRocmVhZEJlY29tZUxlYWRlcihEZXZpY2VJbnN0YW5jZSkpOworICAgIH0KKworI3ByYWdtYSBlbmRyZWdpb24KKworaW50ZXJuYWw6CisKKyAgICB2b2lkIEludm9rZUFkYXB0ZXJSZW1vdmFsKCkKKyAgICB7CisgICAgICAgIEFkYXB0ZXJSZW1vdmFsKHRoaXMpOworICAgIH0KKworcHJpdmF0ZToKKworICAgIGZyaWVuZCByZWYgY2xhc3Mgb3RBcGk7CisKKyAgICBzdGF0aWMgdm9pZCBPVENBTEwKKyAgICBUaHJlYWRTdGF0ZUNoYW5nZUNhbGxiYWNrKAorICAgICAgICB1aW50MzJfdCBhRmxhZ3MsCisgICAgICAgIF9Jbl8gdm9pZCogYUNvbnRleHQKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgSUluc3BlY3RhYmxlKiBwSW5zcGVjdGFibGUgPSAoSUluc3BlY3RhYmxlKilhQ29udGV4dDsKKyAgICAgICAgb3RBZGFwdGVyXiBwVGhpcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8b3RBZGFwdGVyXj4ocEluc3BlY3RhYmxlKTsKKworICAgICAgICBpZiAoYUZsYWdzICYgT1RfQ0hBTkdFRF9JUDZfQUREUkVTU19BRERFRCkKKyAgICAgICAgeworICAgICAgICAgICAgcFRoaXMtPklwQWRkcmVzc0FkZGVkKHBUaGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRmxhZ3MgJiBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX1JFTU9WRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBUaGlzLT5JcEFkZHJlc3NSZW1vdmVkKHBUaGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9STE9DX0FEREVEKQorICAgICAgICB7CisgICAgICAgICAgICBwVGhpcy0+SXBSbG9jQWRkZWQocFRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfUkVNT1ZFRCkKKyAgICAgICAgeworICAgICAgICAgICAgcFRoaXMtPklwUmxvY1JlbW92ZWQocFRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX0xMX0FERFIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBUaGlzLT5JcExpbmtMb2NhbEFkZHJlc0NoYW5nZWQocFRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX01MX0FERFIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBUaGlzLT5JcE1lc2hMb2NhbEFkZHJlc0NoYW5nZWQocFRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX1JPTEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBUaGlzLT5OZXRSb2xlQ2hhbmdlZChwVGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUEFSVElUSU9OX0lEKQorICAgICAgICB7CisgICAgICAgICAgICBwVGhpcy0+TmV0UGFydGl0aW9uSWRDaGFuZ2VkKHBUaGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9LRVlfU0VRVUVOQ0VfQ09VTlRFUikKKyAgICAgICAgeworICAgICAgICAgICAgcFRoaXMtPk5ldEtleVNlcXVlbmNlQ291bnRlckNoYW5nZWQocFRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX0FEREVEKQorICAgICAgICB7CisgICAgICAgICAgICBwVGhpcy0+VGhyZWFkQ2hpbGRBZGRlZChwVGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfQ0hJTERfUkVNT1ZFRCkKKyAgICAgICAgeworICAgICAgICAgICAgcFRoaXMtPlRocmVhZENoaWxkUmVtb3ZlZChwVGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfTkVUREFUQSkKKyAgICAgICAgeworICAgICAgICAgICAgcFRoaXMtPlRocmVhZE5ldERhdGFVcGRhdGVkKHBUaGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBIUkVTVUxUCisgICAgVGhlYWRFcnJvclRvSFJlc3VsdCgKKyAgICAgICAgaW50IC8qIG90RXJyb3IgKi8gZXJyb3IKKyAgICApCisgICAgeworICAgICAgICBzd2l0Y2ggKGVycm9yKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzogICAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworICAgICAgICBjYXNlIE9UX0VSUk9SX0RST1A6CisgICAgICAgIGNhc2UgT1RfRVJST1JfTk9fUk9VVEU6ICAgICAgICAgIHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIoRVJST1JfTkVUV09SS19VTlJFQUNIQUJMRSk7CisgICAgICAgIGNhc2UgT1RfRVJST1JfSU5WQUxJRF9BUkdTOiAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisgICAgICAgIGNhc2UgT1RfRVJST1JfU0VDVVJJVFk6ICAgICAgICAgIHJldHVybiBFX0FDQ0VTU0RFTklFRDsKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9OT1RfQ0FQQUJMRToKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ6ICAgcmV0dXJuIEVfTk9USU1QTDsKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOiAgICAgcmV0dXJuIEVfTk9UX1ZBTElEX1NUQVRFOworICAgICAgICBjYXNlIE9UX0VSUk9SX05PVF9GT1VORDogICAgICAgICByZXR1cm4gSFJFU1VMVF9GUk9NX1dJTjMyKEVSUk9SX05PVF9GT1VORCk7CisgICAgICAgIGNhc2UgT1RfRVJST1JfQUxSRUFEWTogICAgICAgICAgIHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIoRVJST1JfQUxSRUFEWV9FWElTVFMpOworICAgICAgICBjYXNlIE9UX0VSUk9SX1JFU1BPTlNFX1RJTUVPVVQ6ICByZXR1cm4gSFJFU1VMVF9GUk9NX1dJTjMyKEVSUk9SX1RJTUVPVVQpOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRV9GQUlMOworICAgICAgICB9CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ugb3QKKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL290QXBpLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3Mvb3RBcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBhMDAxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL290QXBpLmgKQEAgLTAsMCArMSwyNTIgQEAKKy8qCisqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIm90QWRhcHRlci5oIgorI2luY2x1ZGUgPGNvbGxlY3Rpb24uaD4KKwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOjpDb2xsZWN0aW9uczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpDb2xsZWN0aW9uczsKKworI2RlZmluZSBNQUM4X0ZPUk1BVCBMIiUwMlgtJTAyWC0lMDJYLSUwMlgtJTAyWC0lMDJYLSUwMlgtJTAyWCIKKyNkZWZpbmUgTUFDOF9BUkcobWFjKSBtYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdLCBtYWNbNl0sIG1hY1s3XQorCituYW1lc3BhY2Ugb3QKK3sKKworcHVibGljIGRlbGVnYXRlIHZvaWQgb3RBZGFwdGVyQXJyaXZhbERlbGVnYXRlKG90QWRhcHRlcl4gYUFkYXB0ZXIpOworCisvLyBIZWxwZXIgY2xhc3MgZm9yIE9wZW5UaHJlYWQgQVBJCitwdWJsaWMgcmVmIGNsYXNzIG90QXBpIHNlYWxlZAoreworcHJpdmF0ZToKKworICAgIHZvaWQgKl9hcGlJbnN0YW5jZTsKKyAgICAjZGVmaW5lIEFwaUluc3RhbmNlICgob3RBcGlJbnN0YW5jZSopX2FwaUluc3RhbmNlKQorCisgICAgQ1JJVElDQUxfU0VDVElPTiBfY3M7CisgICAgVmVjdG9yPG90QWRhcHRlcl4+XiBfYWRhcHRlcnM7CisKK3B1YmxpYzoKKworICAgIC8vIEV2ZW50IGZvciBkZXZpY2UgYXZhaWxhYmlsaXR5IGNoYW5nZXMKKyAgICBldmVudCBvdEFkYXB0ZXJBcnJpdmFsRGVsZWdhdGVeIEFkYXB0ZXJBcnJpdmFsOworCisgICAgcHJvcGVydHkgSW50UHRyIFJhd0hhbmRsZQorICAgIHsKKyAgICAgICAgSW50UHRyIGdldCgpIHsgcmV0dXJuIF9hcGlJbnN0YW5jZTsgfQorICAgIH0KKworICAgIC8vIENvbnN0cnVjdG9yCisgICAgb3RBcGkoKSA6CisgICAgICAgIF9hZGFwdGVycyhyZWYgbmV3IFZlY3RvcjxvdEFkYXB0ZXJePigpKQorICAgIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgQVBJIGhhbmRsZQorICAgICAgICBfYXBpSW5zdGFuY2UgPSBvdEFwaUluaXQoKTsKKyAgICAgICAgaWYgKF9hcGlJbnN0YW5jZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBFeGNlcHRpb246OkNyZWF0ZUV4Y2VwdGlvbihFX1VORVhQRUNURUQsIEwib3RBcGlJbml0IGZhaWxlZC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJl9jcyk7CisKKyAgICAgICAgSUluc3BlY3RhYmxlKiBwSW5zcGVjdGFibGUgPSByZWludGVycHJldF9jYXN0PElJbnNwZWN0YWJsZSo+KHRoaXMpOworCisgICAgICAgIC8vIFJlZ2lzdGVyIGZvciBkZXZpY2UgYXZhaWxhYmlsaXR5IGNhbGxiYWNrcworICAgICAgICBvdFNldERldmljZUF2YWlsYWJpbGl0eUNoYW5nZWRDYWxsYmFjayhBcGlJbnN0YW5jZSwgVGhyZWFkRGV2aWNlQXZhaWxhYmlsaXR5Q2FsbGJhY2ssIHBJbnNwZWN0YWJsZSk7CisKKyAgICAgICAgLy8gUXVlcnkgbGlzdCBvZiBkZXZpY2VzCisgICAgICAgIGF1dG8gZGV2aWNlTGlzdCA9IG90RW51bWVyYXRlRGV2aWNlcyhBcGlJbnN0YW5jZSk7CisgICAgICAgIGlmIChkZXZpY2VMaXN0KQorICAgICAgICB7CisgICAgICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmX2NzKTsKKworICAgICAgICAgICAgLy8gQWRkIGVhY2ggYWRhcHRlciB0byBvdXIgY2FjaGUgdW5sZXNzIGl0IGFscmVhZHkgd2FzIGluc2VydGVkIGZyb20gYSBub3RpZmljYXRpb24KKyAgICAgICAgICAgIGZvciAoRFdPUkQgaSA9IDA7IGkgPCBkZXZpY2VMaXN0LT5hRGV2aWNlc0xlbmd0aDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChHZXRBZGFwdGVyKGRldmljZUxpc3QtPmFEZXZpY2VzW2ldKSA9PSBudWxscHRyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkZXZpY2VJbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0KEFwaUluc3RhbmNlLCAmZGV2aWNlTGlzdC0+YURldmljZXNbaV0pOworICAgICAgICAgICAgICAgICAgICBpZiAoZGV2aWNlSW5zdGFuY2UpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hZGFwdGVycy0+QXBwZW5kKHJlZiBuZXcgb3RBZGFwdGVyKGRldmljZUluc3RhbmNlKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZfY3MpOworCisgICAgICAgICAgICBvdEZyZWVNZW1vcnkoZGV2aWNlTGlzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZXN0cnVjdG9yCisgICAgdmlydHVhbCB+b3RBcGkoKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXIgcmVnaXN0cmF0aW9uIGZvciBjYWxsYmFja3MKKyAgICAgICAgb3RTZXREZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkQ2FsbGJhY2soQXBpSW5zdGFuY2UsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgIERlbGV0ZUNyaXRpY2FsU2VjdGlvbigmX2NzKTsKKworICAgICAgICAvLyBDbGVhbiB1cCBhcGkKKyAgICAgICAgb3RBcGlGaW5hbGl6ZShBcGlJbnN0YW5jZSk7CisgICAgICAgIF9hcGlJbnN0YW5jZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0aGUgZW50aXJlIGxpc3Qgb2YgYWRhcHRlcnMKKyAgICBJVmVjdG9yVmlldzxvdEFkYXB0ZXJePl4gR2V0QWRhcHRlcnMoKQorICAgIHsKKyAgICAgICAgSVZlY3RvclZpZXc8b3RBZGFwdGVyXj5eIGFkYXB0ZXJzOworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmX2NzKTsKKyAgICAgICAgYWRhcHRlcnMgPSBfYWRhcHRlcnMtPkdldFZpZXcoKTsgLy8gVE9ETyAtIE5lZWQgdG8gY29weQorICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmX2NzKTsKKyAgICAgICAgcmV0dXJuIGFkYXB0ZXJzOworICAgIH0KKworICAgIC8vIEhlbHBlciB0byBnZXQgYW4gYWRhcHRlciwgZ2l2ZW4gaXRzIGRldmljZSBndWlkCisgICAgb3RBZGFwdGVyXiBHZXRBZGFwdGVyKEd1aWQgYURldmljZUd1aWQpCisgICAgeworICAgICAgICBvdEFkYXB0ZXJeIHJldCA9IG51bGxwdHI7CisKKyAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJl9jcyk7CisKKyAgICAgICAgZm9yIChhdXRvJiYgYWRhcHRlciA6IF9hZGFwdGVycykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFkYXB0ZXItPkludGVyZmFjZUd1aWQgPT0gYURldmljZUd1aWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gYWRhcHRlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZfY3MpOworCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgbWFjIGFkZHJlc3MgdG8gc3RyaW5nCisgICAgc3RhdGljIFN0cmluZ14gTWFjVG9TdHJpbmcodWludDY0X3QgbWFjKQorICAgIHsKKyAgICAgICAgV0NIQVIgc3pNYWNbNjRdID0geyAwIH07CisgICAgICAgIHN3cHJpbnRmX3Moc3pNYWMsIDY0LCBNQUM4X0ZPUk1BVCwgTUFDOF9BUkcoKChVQ0hBUiopJm1hYykpKTsKKyAgICAgICAgcmV0dXJuIHJlZiBuZXcgU3RyaW5nKHN6TWFjKTsKKyAgICB9CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBSTE9DMTYvUEFOSUQgdG8gc3RyaW5nCisgICAgc3RhdGljIFN0cmluZ14gUmxvYzE2VG9TdHJpbmcodWludDE2X3QgcmxvYykKKyAgICB7CisgICAgICAgIFdDSEFSIHN6UmxvY1sxNl0gPSB7IDAgfTsKKyAgICAgICAgc3dwcmludGZfcyhzelJsb2MsIDE2LCBMIjB4JVgiLCBybG9jKTsKKyAgICAgICAgcmV0dXJuIHJlZiBuZXcgU3RyaW5nKHN6UmxvYyk7CisgICAgfQorCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgc3RhdGUgdG8gc3RyaW5nCisgICAgc3RhdGljIFN0cmluZ14gVGhyZWFkU3RhdGVUb1N0cmluZyhvdFRocmVhZFN0YXRlIHN0YXRlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkKKyAgICAgICAgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIG90VGhyZWFkU3RhdGU6Ok9mZmxpbmU6ICAgIHJldHVybiBMIk9mZmxpbmUiOworICAgICAgICBjYXNlIG90VGhyZWFkU3RhdGU6OkRpc2FibGVkOiAgIHJldHVybiBMIkRpc2FibGVkIjsKKyAgICAgICAgY2FzZSBvdFRocmVhZFN0YXRlOjpEZXRhY2hlZDogICByZXR1cm4gTCJEaXNjb25uZWN0ZWQiOworICAgICAgICBjYXNlIG90VGhyZWFkU3RhdGU6OkNoaWxkOiAgICAgIHJldHVybiBMIkNvbm5lY3RlZCAtIENoaWxkIjsKKyAgICAgICAgY2FzZSBvdFRocmVhZFN0YXRlOjpSb3V0ZXI6ICAgICByZXR1cm4gTCJDb25uZWN0ZWQgLSBSb3V0ZXIiOworICAgICAgICBjYXNlIG90VGhyZWFkU3RhdGU6OkxlYWRlcjogICAgIHJldHVybiBMIkNvbm5lY3RlZCAtIExlYWRlciI7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisKKyAgICAvLyBDYWxsYmFjayBmcm9tIE9wZW5UaHJlYWQgaW5kaWNhdGluZyBhcnJpdmFsIG9yIHJlbW92YWwgb2YgaW50ZXJmYWNlcworICAgIHN0YXRpYyB2b2lkIE9UQ0FMTAorICAgIFRocmVhZERldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrKAorICAgICAgICBib29sICAgICAgICBhQWRkZWQsCisgICAgICAgIGNvbnN0IEdVSUQqIGFEZXZpY2VHdWlkLAorICAgICAgICBfSW5fIHZvaWQqICBhQ29udGV4dAorICAgICkKKyAgICB7CisgICAgICAgIElJbnNwZWN0YWJsZSogcEluc3BlY3RhYmxlID0gKElJbnNwZWN0YWJsZSopYUNvbnRleHQ7CisgICAgICAgIG90QXBpXiBwVGhpcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8b3RBcGlePihwSW5zcGVjdGFibGUpOworCisgICAgICAgIGlmIChhQWRkZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90QWRhcHRlcl4gYWRhcHRlciA9IG51bGxwdHI7CisKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgZGV2aWNlIHRvIHRoZSBsaXN0LCBpZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlCisgICAgICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmcFRoaXMtPl9jcyk7CisKKyAgICAgICAgICAgIGlmIChwVGhpcy0+R2V0QWRhcHRlcigqYURldmljZUd1aWQpID09IG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBkZXZpY2VJbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0KChvdEFwaUluc3RhbmNlKilwVGhpcy0+X2FwaUluc3RhbmNlLCBhRGV2aWNlR3VpZCk7CisgICAgICAgICAgICAgICAgaWYgKGRldmljZUluc3RhbmNlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcFRoaXMtPl9hZGFwdGVycy0+QXBwZW5kKGFkYXB0ZXIgPSByZWYgbmV3IG90QWRhcHRlcihkZXZpY2VJbnN0YW5jZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJnBUaGlzLT5fY3MpOworCisgICAgICAgICAgICBpZiAoYWRhcHRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTZW5kIGEgbm90aWZpY2F0aW9uIG9mIGFycml2YWwKKyAgICAgICAgICAgICAgICBwVGhpcy0+QWRhcHRlckFycml2YWwoYWRhcHRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdEFkYXB0ZXJeIHJldCA9IG51bGxwdHI7CisgICAgICAgICAgICBHdWlkIGd1aWQgPSAqYURldmljZUd1aWQ7CisKKyAgICAgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZwVGhpcy0+X2NzKTsKKworICAgICAgICAgICAgLy8gTG9vayB1cCBpbiB0aGUgY2FjaGVkIGxpc3Qgb2YgYWRhcHRlcnMgdG8gcmVtb3ZlIGl0CisgICAgICAgICAgICB1aW50MzJfdCBpID0gMDsKKyAgICAgICAgICAgIGZvciAoYXV0byYmIGFkYXB0ZXIgOiBwVGhpcy0+X2FkYXB0ZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhZGFwdGVyLT5JbnRlcmZhY2VHdWlkID09IGd1aWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBhZGFwdGVyOworICAgICAgICAgICAgICAgICAgICBwVGhpcy0+X2FkYXB0ZXJzLT5SZW1vdmVBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJnBUaGlzLT5fY3MpOworCisgICAgICAgICAgICBpZiAocmV0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldC0+SW52b2tlQWRhcHRlclJlbW92YWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvcGNoLmNwcCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9wY2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ODk0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvcGNoLmNwcApAQCAtMCwwICsxLDI5IEBACivvu78vKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicGNoLmgiCmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvcGNoLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvcGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwNDRhYgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9wY2guaApAQCAtMCwwICsxLDQ0IEBACivvu78vKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworCisjaW5jbHVkZSA8V2luU29jazIuaD4KKyNpbmNsdWRlIDxXaW5kb3dzLmg+CisjaW5jbHVkZSA8Y29sbGVjdGlvbi5oPgorI2luY2x1ZGUgPHBwbHRhc2tzLmg+CisKKyNpbmNsdWRlIDx3czJkZWYuaD4KKyNpbmNsdWRlIDx3czJpcGRlZi5oPgorI2luY2x1ZGUgPG1zdGNwaXAuaD4KKworI2luY2x1ZGUgIm90QXBpLmgiCisKKyNpbmNsdWRlICJBcHAueGFtbC5oIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvY29tbW9uLXN3aXRjaGVzLm1rIGIvZXhhbXBsZXMvY29tbW9uLXN3aXRjaGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0M2Q2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9jb21tb24tc3dpdGNoZXMubWsKQEAgLTAsMCArMSw5MSBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2lmZXEgKCQoVE1GX1BST1hZKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLXRtZi1wcm94eQorZW5kaWYKKworaWZlcSAoJChCT1JERVJfUk9VVEVSKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWJvcmRlci1yb3V0ZXIKK2VuZGlmCisKK2lmZXEgKCQoQ0VSVF9MT0cpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtY2VydC1sb2cKK2VuZGlmCisKK2lmZXEgKCQoQ09BUCksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1hcHBsaWNhdGlvbi1jb2FwCitlbmRpZgorCitpZmVxICgkKENPTU1JU1NJT05FUiksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1jb21taXNzaW9uZXIKK2VuZGlmCisKK2lmZXEgKCQoQ09WRVJBR0UpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtY292ZXJhZ2UKK2VuZGlmCisKK2lmZXEgKCQoREVCVUcpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtZGVidWcgLS1lbmFibGUtb3B0aW1pemF0aW9uPW5vCitlbmRpZgorCitpZmVxICgkKERIQ1A2X0NMSUVOVCksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1kaGNwNi1jbGllbnQKK2VuZGlmCisKK2lmZXEgKCQoREhDUDZfU0VSVkVSKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWRoY3A2LXNlcnZlcgorZW5kaWYKKworaWZlcSAoJChESVNBQkxFX0RPQyksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWRpc2FibGUtZG9jcworZW5kaWYKKworaWZlcSAoJChETlNfQ0xJRU5UKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWRucy1jbGllbnQKK2VuZGlmCisKK2lmZXEgKCQoSkFNX0RFVEVDVElPTiksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1qYW0tZGV0ZWN0aW9uCitlbmRpZgorCitpZmVxICgkKEpPSU5FUiksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1qb2luZXIKK2VuZGlmCisKK2lmZXEgKCQoTEVHQUNZKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWxlZ2FjeQorZW5kaWYKKworaWZlcSAoJChNQUNfV0hJVEVMSVNUKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLW1hYy13aGl0ZWxpc3QKK2VuZGlmCisKK2lmZXEgKCQoTVREX05FVERJQUcpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtbXRkLW5ldHdvcmstZGlhZ25vc3RpYworZW5kaWYKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9SRUFETUUubWQgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMWU5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvUkVBRE1FLm1kCkBAIC0wLDAgKzEsNTQgQEAKKyMgT3BlblRocmVhZCBvbiBXaW5kb3dzICMKKworVGhlc2UgY29tcG9uZW50cyBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0byBnZXQgT3BlblRocmVhZCBpbnRlZ3JhdGVkIGludG8gdGhlIFdpbmRvd3MKK25ldHdvcmtpbmcgc3RhY2sgYW5kIHByb3ZpZGUgYW4gaW50ZXJmYWNlIGZvciBhcHBsaWNhdGlvbnMgdG8gY29udHJvbCBpdC4KKworIyMgQXJjaGl0ZWN0dXJlICMjCisKK1tuZGlzXTogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9oYXJkd2FyZS9kcml2ZXJzL25ldHdvcmsvbmRpcy1kcml2ZXJzCitbbHdmXTogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9oYXJkd2FyZS9kcml2ZXJzL25ldHdvcmsvbmRpcy1maWx0ZXItZHJpdmVycworW21pbmlwb3J0XTogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9oYXJkd2FyZS9kcml2ZXJzL25ldHdvcmsvbmRpcy1taW5pcG9ydC1kcml2ZXJzMgorW2lvY3RsXTogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjMyMTkodj12cy44NSkuYXNweAorW29pZF06IGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9oYXJkd2FyZS9mZjU2NjcwNyh2PXZzLjg1KS5hc3B4CitbbmJsXTogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9oYXJkd2FyZS9kcml2ZXJzL25ldHdvcmsvbmV0LWJ1ZmZlci1hcmNoaXRlY3R1cmUKKworIVtXaW5kb3dzIEFyY2hpdGVjdHVyZV0oLi4vLi4vLi4vZG9jL2ltYWdlcy93aW5kb3dzX2Rlc2lnbi5wbmcpCisKK1RoaXMgZGVzaWduIGFsbG93cyBmb3Igc3VwcG9ydCBvZiBib3RoIHNpbXBsZSByYWRpbyBkZXZpY2VzIGFuZCBkZXZpY2VzIHJ1bm5pbmcgdGhlIGNvbXBsZXRlCitPcGVuVGhyZWFkIHN0YWNrLgorCisjIyMgb3RBcGkuZGxsICMjIworCitUaGlzIGlzIHRoZSBkeW5hbWljIGxpYnJheSBmb3IgYXBwbGljYXRpb25zIHRvIGNvbnRyb2wgdGhlIE9wZW5UaHJlYWQgc3RhY2sgZnJvbSB1c2VyIG1vZGUuIEl0CitleHBvc2VzIGFsbCB0aGUgY29udHJvbCBwYXRoIEFQSXMgZnJvbSBgb3BlbnRocmVhZC5oYC4gSXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBkcml2ZXIgYnkgdGhlIHVzZQorb2YgW0lPQ1RMXVtpb2N0bF1zLiBUaGUgSU9DVExzIGFsbG93IG90QXBpLmRsbCB0byBzZXJpYWxpemUgYW5kIHNlbmQgY29tbWFuZHMsIGFuZCBwb2xsIGZvciBub3RpZmljYXRpb25zLAord2hpY2ggY2FuIHRoZW4gYmUgcmV0dXJuZWQgYmFjayB0byB0aGUgY2xpZW50LgorCisjIyMgb3RMd2Yuc3lzICMjIworCitUaGlzIGlzIHdoZXJlIG1vc3Qgb2YgdGhlIHJlYWwgbG9naWMgbGl2ZXMuIGBvdEx3Zi5zeXNgIGlzIGFuIFtORElTXVtuZGlzXSBMaWdodCBXZWlnaHQgRmlsdGVyIChbTFdGXVtsd2ZdKSBkcml2ZXIuCitJdCBwbHVncyBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBiaW5kaW5nIHRvIGEgcHJvdG9jb2wgZHJpdmVyIChUQ1BJUCkgYXQgdGhlIHRvcCwgYW5kIGFuIE5ESVMgW01pbmlwb3J0XVttaW5pcG9ydF0KK2F0IHRoZSBib3R0b20uIEl0J3Mgam9iIGlzIHRvIHRha2UgSVB2NiBwYWNrZXRzIGZyb20gVENQSVAgYW5kIHBhc3MgdGhlIG5lY2Vzc2FyeSBkYXRhIGRvd24gdG8gdGhlIE1pbmlwb3J0CitpbiBvcmRlciB0byBzZW5kIHRoZSBwYWNrZXRzIG91dCBvdmVyIHRoZSBuZXR3b3JrLgorCitgb3RMd2Yuc3lzYCBzdXBwb3J0cyBvcGVyYXRpbmcgaW4gdHdvIG1vZGVzOiBGdWxsIFN0YWNrIGFuZCBUdW5uZWwuIEZ1bGwgU3RhY2sgbW9kZSBpcyB3aGVyZSBPcGVuVGhyZWFkIGlzCitydW5uaW5nIG9uIHRoZSBob3N0IChpbiBXaW5kb3dzKSBhbmQgYSBzaW1wbGUgcmFkaW8gZGV2aWNlIGlzIGNvbm5lY3RlZCBleHRlcm5hbGx5LiBUdW5uZWwgbW9kZSBpcyB3aGVyZQorT3BlblRocmVhZCBpcyBydW5uaW5nIG9uIHRoZSBleHRlcm5hbCBkZXZpY2UgYW5kIFdpbmRvd3MgaXMgbWVyZWx5IGEgcGFzcyB0aHJvdWdoIGZvciBjb21tYW5kcyBhbmQgcGFja2V0cy4KKworSW4gYm90aCBjYXNlcywgYG90THdmLnN5c2AgdXNlcyB0aGUgU3BpbmVsIGNvbW1hbmQgaW50ZXJmYWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBjb25uZWN0ZWQgZGV2aWNlLiBXaGVuIG9wZXJhdGluZworaW4gRnVsbCBTdGFjayBtb2RlLCBgb3RMd2Yuc3lzYCB1c2VzIG9ubHkgdGhlIGxvdyBsZXZlbCBQSFkvTUFDIGNvbW1hbmRzLiBJbiBUdW5uZWwgbW9kZSwgaXQgdXNlcyB0aGUgaGlnaGVyIGxheWVyCitTcGluZWwgY29tbWFuZHMgYW5kIGxldHMgdGhlIGRldmljZSBtYW5hZ2UgdGhlIGFjdHVhbCBUaHJlYWQgc3RhY2suCisKKyMjIyBvdHRtcC5zeXMgIyMjCisKK1RoaXMgaXMgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBwYXNzaW5nIHRoZSBTcGluZWwgY29tbWFuZHMgZnJvbSBgb3RMd2Yuc3lzYCBkb3duIHRvIHRoZSBkZXZpY2UuIEl0IGlzIHJlc3BvbnNpYmxlCitmb3IgYWJzdHJhY3RpbmcgdGhlIGFjdHVhbCBtZWNoYW5pc20gKFVTQiwgU2VyaWFsLCBTUEkpIHVzZWQgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgZGV2aWNlLiBJdCBoYW5kbGVzIHRoZSBkZXZpY2UKK2Fycml2YWwvcmVtb3ZhbCBhbmQgdGhlIGVuY29kaW5nL2RlY29kaW5nIG9mIGRhdGEgd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggaXQuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHkgaGFuZGxlcworU2VyaWFsIGRldmljZXMuCisKKyMjIyBEZXZpY2UgIyMjCisKK1dpbmRvd3Mgc3VwcG9ydHMgT3BlblRocmVhZCBkZXZpY2VzIHRoYXQgaW1wbGVtZW50IHRoZSBTcGluZWwgcHJvdG9jb2wuIEl0IHN1cHBvcnRzIGRldmljZXMgdGhhdCBzdXBwb3J0IGVpdGhlciB0aGUgcmF3CitsaW5rLWxheWVyIFBIWS9NQUMgY29tbWFuZHMgYW5kIGRldmljZXMgdGhhdCBzdXBwb3J0IHRoZSBUaHJlYWQgY29tbWFuZHMgKGFuZCBkZXZpY2VzIHRoYXQgc3VwcG9ydCBib3RoKS4gQnkgZGVmYXVsdCwKK1dpbmRvd3Mgd2lsbCBvcGVyYXRlIGluIEZ1bGwgU3RhY2sgbW9kZSwgb25seSBzZW5kaW5nIHJhdyBsaW5rLWxheWVyIGNvbW1hbmRzLgorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9vcGVudGhyZWFkLWNvcmUtd2luZG93cy1jb25maWcuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL29wZW50aHJlYWQtY29yZS13aW5kb3dzLWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYWYzMmEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9vcGVudGhyZWFkLWNvcmUtd2luZG93cy1jb25maWcuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBXaW5kb3dzIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGNvbnN0YW50cworICogICBmb3IgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9XSU5ET1dTX0NPTkZJR19IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPUkVfV0lORE9XU19DT05GSUdfSF8KKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX05VTV9NRVNTQUdFX0JVRkZFUlMKKyAqCisgKiBUaGUgbnVtYmVyIG9mIG1lc3NhZ2UgYnVmZmVycyBpbiB0aGUgYnVmZmVyIHBvb2wuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX05VTV9NRVNTQUdFX0JVRkZFUlMgICAgICAgICAgICAgICAyMDQ4CisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfQ0hJTERSRU4KKyAqCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hpbGRyZW4uCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BWF9DSElMRFJFTiAgICAgICAgICAgICAgICAgICAgICAzMgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfSVBfQUREUlNfUEVSX0NISUxECisgKgorICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBJUHY2IGFkZHJlc3MgcmVnaXN0cmF0aW9ucyBwZXIgY2hpbGQuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0lQX0FERFJTX1BFUl9DSElMRCAgICAgICAgICAgICAgICA2CisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfSk9JTkVSX0VOVFJJRVMKKyAqCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgSm9pbmVyIGVudHJpZXMgbWFpbnRhaW5lZCBieSB0aGUgQ29tbWlzc2lvbmVyLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfSk9JTkVSX0VOVFJJRVMgICAgICAgICAgICAgICAgMTYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorICoKKyAqIFRoZSBtZXNzYWdlIHBvb2wgaXMgbWFuYWdlZCBieSBwbGF0Zm9ybSBkZWZpbmVkIGxvZ2ljIHdoZW4gdGhpcyBmbGFnIGlzIHNldC4KKyAqIFRoaXMgZmVhdHVyZSB3b3VsZCB0eXBpY2FsbHkgYmUgdXNlZCB3aGVuIG9wZXJhdGluZyBpbiBhIG11bHRpLXRocmVhZGVkIHN5c3RlbQorICogYW5kIG11bHRpcGxlIHRocmVhZHMgbmVlZCB0byBhY2Nlc3MgdGhlIG1lc3NhZ2UgcG9vbC4KKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UICAgICAgIDEKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTAorICoKKyAqIFRoZSBsb2cgbGV2ZWwuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICBPVF9MT0dfTEVWRUxfREVCRworCisgLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19QS1RfRFVNUAorICoKKyAqIERlZmluZSB0byBlbmFibGUgbG9nIGNvbnRlbnQgb2YgcGFja2V0cy4KKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BLVF9EVU1QICAgICAgICAgICAgICAgICAgICAgIDAKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPUkVfV0lORE9XU19DT05GSUdfSF8KKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3RMd2ZJb2N0bC5oIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3RMd2ZJb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYmRmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9vdEx3ZklvY3RsLmgKQEAgLTAsMCArMSw3MDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgSU9DVEwgaW50ZXJmYWNlIGZvciBvdEx3Zi5zeXMuCisgKi8KKworI2lmbmRlZiBfX09UTFdGSU9DVExfSF9fCisjZGVmaW5lIF9fT1RMV0ZJT0NUTF9IX18KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworX19pbmxpbmUgTE9ORyBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RFcnJvciBlcnJvcikgeyByZXR1cm4gKExPTkcpLSgoaW50KWVycm9yKTsgfQorCisvLyBVc2VyLW1vZGUgSU9DVEwgcGF0aCBmb3IgQ3JlYXRlRmlsZQorI2RlZmluZSBPVExXRl9JT0NMVF9QQVRIICAgICAgVEVYVCgiXFxcXC5cXFxcb3Rsd2YiKQorCisvLworLy8gSU9DTFRzIGFuZCBEYXRhIFR5cGVzCisvLworCisjZGVmaW5lIE9UTFdGX0NUTF9DT0RFKHJlcXVlc3QsIG1ldGhvZCwgYWNjZXNzKSBcCisgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfTkVUV09SSywgcmVxdWVzdCwgbWV0aG9kLCBhY2Nlc3MpCisKKy8vIERpZmZlcmVudCBwb3NzaWJsZSBub3RpZmljYXRpb24gdHlwZXMKK3R5cGVkZWYgZW51bSBfT1RMV0ZfTk9USUZfVFlQRQoreworICAgIE9UTFdGX05PVElGX1VOU1BFQ0lGSUVELAorICAgIE9UTFdGX05PVElGX0RFVklDRV9BVkFJTEFCSUxJVFksCisgICAgT1RMV0ZfTk9USUZfU1RBVEVfQ0hBTkdFLAorICAgIE9UTFdGX05PVElGX0RJU0NPVkVSLAorICAgIE9UTFdGX05PVElGX0FDVElWRV9TQ0FOLAorICAgIE9UTFdGX05PVElGX0VORVJHWV9TQ0FOLAorICAgIE9UTFdGX05PVElGX0NPTU1JU1NJT05FUl9FTkVSR1lfUkVQT1JULAorICAgIE9UTFdGX05PVElGX0NPTU1JU1NJT05FUl9QQU5JRF9RVUVSWSwKKyAgICBPVExXRl9OT1RJRl9KT0lORVJfQ09NUExFVEUKKworfSBPVExXRl9OT1RJRl9UWVBFOworCisjZGVmaW5lIE1BWF9FTkVSR1lfUkVQT1JUX0xFTkdUSCAgICA2NAorCisvLworLy8gUXVlcmllcyAoYXN5bmMpIHRoZSBuZXh0IG5vdGlmaWNhdGlvbiBpbiB0aGUgcXVldWUKKy8vCisjZGVmaW5lIElPQ1RMX09UTFdGX1FVRVJZX05PVElGSUNBVElPTiBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICB0eXBlZGVmIHN0cnVjdCBfT1RMV0ZfTk9USUZJQ0FUSU9OIHsKKyAgICAgICAgR1VJRCAgICAgICAgICAgICAgICBJbnRlcmZhY2VHdWlkOworICAgICAgICBPVExXRl9OT1RJRl9UWVBFICAgIE5vdGlmVHlwZTsKKyAgICAgICAgdW5pb24KKyAgICAgICAgeworICAgICAgICAgICAgLy8gUGF5bG9hZCBmb3IgT1RMV0ZfTk9USUZfREVWSUNFX0FWQUlMQUJJTElUWQorICAgICAgICAgICAgc3RydWN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgQXZhaWxhYmxlOworICAgICAgICAgICAgfSBEZXZpY2VBdmFpbGFiaWxpdHlQYXlsb2FkOworCisgICAgICAgICAgICAvLyBQYXlsb2FkIGZvciBPVExXRl9OT1RJRl9TVEFURV9DSEFOR0UKKyAgICAgICAgICAgIHN0cnVjdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIEZsYWdzOworICAgICAgICAgICAgfSBTdGF0ZUNoYW5nZVBheWxvYWQ7CisKKyAgICAgICAgICAgIC8vIFBheWxvYWQgZm9yIE9UTFdGX05PVElGX0RJU0NPVkVSCisgICAgICAgICAgICBzdHJ1Y3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCT09MRUFOICAgICAgICAgICAgICAgICBWYWxpZDsKKyAgICAgICAgICAgICAgICBvdEFjdGl2ZVNjYW5SZXN1bHQgICAgICBSZXN1bHRzOworICAgICAgICAgICAgfSBEaXNjb3ZlclBheWxvYWQ7CisKKyAgICAgICAgICAgIC8vIFBheWxvYWQgZm9yIE9UTFdGX05PVElGX0FDVElWRV9TQ0FOCisgICAgICAgICAgICBzdHJ1Y3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCT09MRUFOICAgICAgICAgICAgICAgICBWYWxpZDsKKyAgICAgICAgICAgICAgICBvdEFjdGl2ZVNjYW5SZXN1bHQgICAgICBSZXN1bHRzOworICAgICAgICAgICAgfSBBY3RpdmVTY2FuUGF5bG9hZDsKKworICAgICAgICAgICAgLy8gUGF5bG9hZCBmb3IgT1RMV0ZfTk9USUZfRU5FUkdZX1NDQU4KKyAgICAgICAgICAgIHN0cnVjdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIFZhbGlkOworICAgICAgICAgICAgICAgIG90RW5lcmd5U2NhblJlc3VsdCAgICAgIFJlc3VsdHM7CisgICAgICAgICAgICB9IEVuZXJneVNjYW5QYXlsb2FkOworCisgICAgICAgICAgICAvLyBQYXlsb2FkIGZvciBPVExXRl9OT1RJRl9DT01NSVNTSU9ORVJfRU5FUkdZX1JFUE9SVAorICAgICAgICAgICAgc3RydWN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgQ2hhbm5lbE1hc2s7CisgICAgICAgICAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgRW5lcmd5TGlzdExlbmd0aDsKKyAgICAgICAgICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICBFbmVyZ3lMaXN0W01BWF9FTkVSR1lfUkVQT1JUX0xFTkdUSF07CisKKyAgICAgICAgICAgIH0gQ29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0UGF5bG9hZDsKKworICAgICAgICAgICAgLy8gUGF5bG9hZCBmb3IgT1RMV0ZfTk9USUZfQ09NTUlTU0lPTkVSX1BBTklEX1FVRVJZCisgICAgICAgICAgICBzdHJ1Y3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICBQYW5JZDsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBDaGFubmVsTWFzazsKKyAgICAgICAgICAgIH0gQ29tbWlzc2lvbmVyUGFuSWRRdWVyeVBheWxvYWQ7CisKKyAgICAgICAgICAgIC8vIFBheWxvYWQgZm9yIE9UTFdGX05PVElGX0pPSU5FUl9DT01QTEVURQorICAgICAgICAgICAgc3RydWN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RFcnJvciAgICAgICAgICAgICBFcnJvcjsKKyAgICAgICAgICAgIH0gSm9pbmVyQ29tcGxldGVQYXlsb2FkOworICAgICAgICB9OworICAgIH0gT1RMV0ZfTk9USUZJQ0FUSU9OLCAqUE9UTFdGX05PVElGSUNBVElPTjsKKworLy8KKy8vIEVudW1lcmF0ZXMgYWxsIHRoZSBUaHJlYWQgaW50ZXJmYWNlcyBndWlkcworLy8KKyNkZWZpbmUgSU9DVExfT1RMV0ZfRU5VTUVSQVRFX0RFVklDRVMgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UTFdGX0lOVEVSRkFDRV9MSVNUCisgICAgeworICAgICAgICB1aW50MTZfdCBjSW50ZXJmYWNlR3VpZHM7CisgICAgICAgIEdVSUQgICAgIEludGVyZmFjZUd1aWRzWzFdOworICAgIH0gT1RMV0ZfSU5URVJGQUNFX0xJU1QsICpQT1RMV0ZfSU5URVJGQUNFX0xJU1Q7CisKKy8vCisvLyBRdWVyaWVzIHRoZSBkZXRpYWxzIG9mIGEgZ2l2ZW4gZGV2aWNlIFRocmVhZCBpbnRlcmZhY2VzCisvLworI2RlZmluZSBJT0NUTF9PVExXRl9RVUVSWV9ERVZJQ0UgXAorICAgIE9UTFdGX0NUTF9DT0RFKDIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQgKGluKQorICAgIHR5cGVkZWYgc3RydWN0IF9PVExXRl9ERVZJQ0UgeworICAgICAgICBVTE9ORyAgICAgICAgICAgQ29tcGFydG1lbnRJRDsKKyAgICB9IE9UTFdGX0RFVklDRSwgKlBPVExXRl9ERVZJQ0U7CisKKy8vCisvLyBQcm94aWVzIHRvIG90KiBBUElzIGluIG90THdmLnN5cworLy8KKworLyogUkVNT1ZFRAorI2RlZmluZSBJT0NUTF9PVExXRl9PVF9FTkFCTEVEIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMDAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gQk9PTEVBTiAtIGFFbmFibGVkCisqLworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9JTlRFUkZBQ0UgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEwMSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIEJPT0xFQU4gLSBhVXAKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9USFJFQUQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEwMiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBCT09MRUFOIC0gYVN0YXJ0ZWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9BQ1RJVkVfU0NBTiBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTAzLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDMyX3QgLSBhU2NhbkNoYW5uZWxzCisgICAgLy8gdWludDE2X3QgLSBhU2NhbkR1cmF0aW9uCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfRElTQ09WRVIgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEwNCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQzMl90IC0gYVNjYW5DaGFubmVscworICAgIC8vIHVpbnQxNl90IC0gYVNjYW5EdXJhdGlvbgorICAgIC8vIHVpbnQxNl90IC0gYVBhbmlkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQ0hBTk5FTCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTA1LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFDaGFubmVsCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQ0hJTERfVElNRU9VVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTA2LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDMyX3QgLSBhVGltZW91dAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0VYVEVOREVEX0FERFJFU1MgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEwNywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90RXh0QWRkcmVzcyAtIGFFeHRlbmRlZEFkZHJlc3MKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9FWFRFTkRFRF9QQU5JRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTA4LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RFeHRlbmRlZFBhbklkIC0gYUV4dGVuZGVkUGFuSWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9MRUFERVJfUkxPQyBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTA5LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RJcDZBZGRyZXNzIC0gYUxlYWRlclJsb2MKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9MSU5LX01PREUgXAorICAgIE9UTFdGX0NUTF9DT0RFKDExMCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90TGlua01vZGVDb25maWcgLSBhQ29uZmlnCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTUFTVEVSX0tFWSBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTExLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RNYXN0ZXJLZXkgLSBhS2V5CisgICAgLy8gdWludDhfdCAtIGFLZXlMZW5ndGgKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9NRVNIX0xPQ0FMX0VJRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTEyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RJcDZBZGRyZXNzIC0gYU1lc2hMb2NhbEVpZAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01FU0hfTE9DQUxfUFJFRklYIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMTMsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdE1lc2hMb2NhbFByZWZpeCAtIGFQcmVmaXgKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ORVRXT1JLX0RBVEFfTEVBREVSIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMTQsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90W10gLSBhRGF0YQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX05FVFdPUktfREFUQV9MT0NBTCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTE1LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdFtdIC0gYURhdGEKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ORVRXT1JLX05BTUUgXAorICAgIE9UTFdGX0NUTF9DT0RFKDExNiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90TmV0d29ya05hbWUgLSBhTmV0d29ya05hbWUKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9QQU5fSUQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDExNywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90UGFuSWQgLSBhUGFuSWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ST1VURVJfUk9MTF9FTkFCTEVEIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMTgsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBCT09MRUFOIC0gYUVuYWJsZWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9TSE9SVF9BRERSRVNTIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMTksIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdFNob3J0QWRkcmVzcyAtIGFTaG9ydEFkZHJlc3MKKworLyogTk9UIFVTRUQKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfVU5JQ0FTVF9BRERSRVNTRVMgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEyMCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90TmV0aWZBZGRyZXNzW10gLSBhQWRkcmVzc2VzCisqLworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0FDVElWRV9EQVRBU0VUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMjEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdE9wZXJhdGlvbmFsRGF0YXNldCAtIGFEYXRhc2V0CisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfUEVORElOR19EQVRBU0VUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMjIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdE9wZXJhdGlvbmFsRGF0YXNldCAtIGFEYXRhc2V0CisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTE9DQUxfTEVBREVSX1dFSUdIVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTIzLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFXZWlnaHQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9BRERfQk9SREVSX1JPVVRFUiBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTI0LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90Qm9yZGVyUm91dGVyQ29uZmlnIC0gYUNvbmZpZworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JFTU9WRV9CT1JERVJfUk9VVEVSIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMjUsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RJcDZQcmVmaXggLSBhUHJlZml4CisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQUREX0VYVEVSTkFMX1JPVVRFIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMjYsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RFeHRlcm5hbFJvdXRlQ29uZmlnIC0gYUNvbmZpZworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JFTU9WRV9FWFRFUk5BTF9ST1VURSBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTI3LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90SXA2UHJlZml4IC0gYVByZWZpeAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1NFTkRfU0VSVkVSX0RBVEEgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEyOCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DT05URVhUX0lEX1JFVVNFX0RFTEFZIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMjksIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFEZWxheQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0tFWV9TRVFVRU5DRV9DT1VOVEVSIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMzAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFLZXlTZXF1ZW5jZUNvdW50ZXIKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ORVRXT1JLX0lEX1RJTUVPVVQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEzMSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhVGltZW91dAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTMyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFUaHJlc2hvbGQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9SRUxFQVNFX1JPVVRFUl9JRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTMzLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhUm91dGVySWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9NQUNfV0hJVEVMSVNUX0VOQUJMRUQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEzNCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIEJPT0xFQU4gLSBhRW5hYmxlZAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0FERF9NQUNfV0hJVEVMSVNUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMzUsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RFeHRBZGRyZXNzIC0gYUV4dEFkZHIKKyAgICAvLyBpbnQ4X3QgLSBhUnNzaSAob3B0aW9uYWwpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfUkVNT1ZFX01BQ19XSElURUxJU1QgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEzNiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdEV4dEFkZHJlc3MgLSBhRXh0QWRkcgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01BQ19XSElURUxJU1RfRU5UUlkgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEzNywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhSW5kZXggKGlucHV0KQorICAgIC8vIG90TWFjV2hpdGVsaXN0RW50cnkgLSBhRW50cnkgKG91dHB1dCkKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DTEVBUl9NQUNfV0hJVEVMSVNUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMzgsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfREVWSUNFX1JPTEUgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEzOSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90RGV2aWNlUm9sZSAtIGFSb2xlCisgICAgLy8gb3RNbGVBdHRhY2hGaWx0ZXIgLSBhRmlsdGVyIChvbmx5IGZvciBPVF9ERVZJQ0VfUk9MRV9DSElMRCkKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DSElMRF9JTkZPX0JZX0lEIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNDAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MTZfdCAtIGFDaGlsZElkIChpbnB1dCkKKyAgICAvLyBvdENoaWxkSW5mbyAtIGFDaGlsZEluZm8gKG91dHB1dCkKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DSElMRF9JTkZPX0JZX0lOREVYIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNDEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUNoaWxkSW5kZXggKGlucHV0KQorICAgIC8vIG90Q2hpbGRJbmZvIC0gYUNoaWxkSW5mbyAob3V0cHV0KQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0VJRF9DQUNIRV9FTlRSWSBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTQyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFJbmRleCAoaW5wdXQpCisgICAgLy8gb3RFaWRDYWNoZUVudHJ5IC0gYUVudHJ5IChvdXRwdXQpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTEVBREVSX0RBVEEgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE0MywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90TGVhZGVyRGF0YSAtIGFMZWFkZXJEYXRhCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTEVBREVSX1JPVVRFUl9JRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTQ0LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFSb3V0ZXJJRAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0xFQURFUl9XRUlHSFQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE0NSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhV2VpZ2h0CisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTkVUV09SS19EQVRBX1ZFUlNJT04gXAorICAgIE9UTFdGX0NUTF9DT0RFKDE0NiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhVmVyc2lvbgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1BBUlRJVElPTl9JRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTQ3LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDMyX3QgLSBhUGFydGl0aW9uCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfUkxPQzE2IFwKKyAgICBPVExXRl9DVExfQ09ERSgxNDgsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MTZfdCAtIGFSbG9jMTYKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ST1VURVJfSURfU0VRVUVOQ0UgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE0OSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhSWRTZXF1ZW5jZQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JPVVRFUl9JTkZPIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNTAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MTZfdCAtIGFSb3V0ZXJJZCAoaW5wdXQpCisgICAgLy8gb3RSb3V0ZXJJbmZvIC0gYVJvdXRlckluZm8gKG91dHB1dCkKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT04gXAorICAgIE9UTFdGX0NUTF9DT0RFKDE1MSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhVmVyc2lvbgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01BQ19CTEFDS0xJU1RfRU5BQkxFRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTUyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gQk9PTEVBTiAtIGFFbmFibGVkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQUREX01BQ19CTEFDS0xJU1QgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE1MywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdEV4dEFkZHJlc3MgLSBhRXh0QWRkcgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JFTU9WRV9NQUNfQkxBQ0tMSVNUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNTQsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RFeHRBZGRyZXNzIC0gYUV4dEFkZHIKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9NQUNfQkxBQ0tMSVNUX0VOVFJZIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNTUsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUluZGV4IChpbnB1dCkKKyAgICAvLyBvdE1hY0JsYWNrbGlzdEVudHJ5IC0gYUVudHJ5IChvdXRwdXQpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQ0xFQVJfTUFDX0JMQUNLTElTVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTU2LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01BWF9UUkFOU01JVF9QT1dFUiBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTU3LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gaW50OF90IC0gYVBvd2VyCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTkVYVF9PTl9NRVNIX1BSRUZJWCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTU4LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gQk9PTEVBTiAtIGFMb2NhbCAoaW5wdXQpCisgICAgLy8gdWludDhfdCAtIGFJdGVyYXRvciAoaW5wdXQpCisgICAgLy8gdWludDhfdCAtIGFOZXdJdGVyYXRvciAob3V0cHV0KQorICAgIC8vIG90Qm9yZGVyUm91dGVyQ29uZmlnIC0gYUNvbmZpZyAob3V0cHV0KQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1BPTExfUEVSSU9EIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNTksIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFQb2xsUGVyaW9kCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTE9DQUxfTEVBREVSX1BBUlRJVElPTl9JRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTYwLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDMyX3QgLSBhUGFydGl0aW9uSWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9BU1NJR05fTElOS19RVUFMSVRZIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNjEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdEV4dEFkZHJlc3MgLSBhRXh0QWRkciAoaW5wdXQpCisgICAgLy8gdWludDhfdCAtIGFMaW5rUXVhbGl0eSAoaW5wdXQgb3Igb3V0cHV0KQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1BMQVRGT1JNX1JFU0VUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNjIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfUEFSRU5UX0lORk8gXAorICAgIE9UTFdGX0NUTF9DT0RFKDE2MywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90Um91dGVySW5mbyAtIGFQYXJlbnRJbmZvCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfU0lOR0xFVE9OIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNjQsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBCT09MRUFOIC0gYVNpbmdsZXRvbgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01BQ19DT1VOVEVSUyBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTY1LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RNYWNDb3VudGVycyAtIGFDb3VudGVycworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01BWF9DSElMRFJFTiBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTY2LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFNYXhDaGlsZHJlbgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX1NUQVJUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNjcsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfU1RPUCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTY4LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorCisjZGVmaW5lIE9QRU5USFJFQURfUFNLX01BWF9MRU5HVEggICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgT1BFTlRIUkVBRF9QUk9WX1VSTF9NQVhfTEVOR1RIICAgICAgICAgICA2NAorI2RlZmluZSBPUEVOVEhSRUFEX1ZFTkRPUl9OQU1FX01BWF9MRU5HVEggICAgICAgIDMyCisjZGVmaW5lIE9QRU5USFJFQURfVkVORE9SX01PREVMX01BWF9MRU5HVEggICAgICAgMzIKKyNkZWZpbmUgT1BFTlRIUkVBRF9WRU5ET1JfU1dfVkVSU0lPTl9NQVhfTEVOR1RIICAxNgorI2RlZmluZSBPUEVOVEhSRUFEX1ZFTkRPUl9EQVRBX01BWF9MRU5HVEggICAgICAgIDY0Cit0eXBlZGVmIHN0cnVjdCBvdENvbW1pc3Npb25Db25maWcKK3sKKyAgICBjaGFyIFBTS2RbT1BFTlRIUkVBRF9QU0tfTUFYX0xFTkdUSCArIDFdOworICAgIGNoYXIgUHJvdmlzaW9uaW5nVXJsW09QRU5USFJFQURfUFJPVl9VUkxfTUFYX0xFTkdUSCArIDFdOworICAgIGNoYXIgVmVuZG9yTmFtZVtPUEVOVEhSRUFEX1ZFTkRPUl9OQU1FX01BWF9MRU5HVEggKyAxXTsKKyAgICBjaGFyIFZlbmRvck1vZGVsW09QRU5USFJFQURfVkVORE9SX01PREVMX01BWF9MRU5HVEggKyAxXTsKKyAgICBjaGFyIFZlbmRvclN3VmVyc2lvbltPUEVOVEhSRUFEX1ZFTkRPUl9TV19WRVJTSU9OX01BWF9MRU5HVEggKyAxXTsKKyAgICBjaGFyIFZlbmRvckRhdGFbT1BFTlRIUkVBRF9WRU5ET1JfREFUQV9NQVhfTEVOR1RIICsgMV07Cit9IG90Q29tbWlzc2lvbkNvbmZpZzsKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9KT0lORVJfU1RBUlQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE2OSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdENvbW1pc3Npb25Db25maWcgLSBhQ29uZmlnCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfSk9JTkVSX1NUT1AgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE3MCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9GQUNUT1JZX0VVSTY0IFwKKyAgICBPVExXRl9DVExfQ09ERSgxNzEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdEV4dEFkZHJlc3MgLSBhRXVpNjQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9IQVNIX01BQ19BRERSRVNTIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNzIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdEV4dEFkZHJlc3MgLSBhRXVpNjQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTczLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFUaHJlc2hvbGQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DT01NSVNTSU9ORVJfUEFOSURfUVVFUlkgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE3NCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MTZfdCAtIGFQYW5JZAorICAgIC8vIHVpbnQzMl90IC0gYUNoYW5uZWtNYXNrCisgICAgLy8gb3RJcDZBZGRyZXNzIC0gYUFkZHJlc3MKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DT01NSVNTSU9ORVJfRU5FUkdZX1NDQU4gXAorICAgIE9UTFdGX0NUTF9DT0RFKDE3NSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFDaGFubmVrTWFzaworICAgIC8vIHVpbnQ4X3QgLSBhQ291bnQKKyAgICAvLyB1aW50MTZfdCAtIGFQZXJpb2QKKyAgICAvLyB1aW50MTZfdCAtIGFTY2FuRHVyYXRpb24KKyAgICAvLyBvdElwNkFkZHJlc3MgLSBhQWRkcmVzcworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNzYsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYVJvdXRlckppdHRlcgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0pPSU5FUl9VRFBfUE9SVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTc3LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDE2X3QgLSBhSm9pbmVyVWRwUG9ydAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1NFTkRfRElBR05PU1RJQ19HRVQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE3OCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdElwNkFkZHJlc3MgLSBhRGVzdGluYXRpb24KKyAgICAvLyB1aW50OF90IC0gYUNvdW50CisgICAgLy8gdWludDhfdFthQ291bnRdIC0gYVRsdlR5cGVzCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfU0VORF9ESUFHTk9TVElDX1JFU0VUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNzksIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RJcDZBZGRyZXNzIC0gYURlc3RpbmF0aW9uCisgICAgLy8gdWludDhfdCAtIGFDb3VudAorICAgIC8vIHVpbnQ4X3RbYUNvdW50XSAtIGFUbHZUeXBlcworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX0FERF9KT0lORVIgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE4MCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUV4dEFkZHJlc3NWYWxpZAorICAgIC8vIG90RXh0QWRkcmVzcyAtIGFFeHRBZGRyZXNzIChvcHRpb25hbCkKKyAgICAvLyBjaGFyW09QRU5USFJFQURfUFNLX01BWF9MRU5HVEggKyAxXSAtIGFQU0tkCisgICAgLy8gdWludDMyX3QgLSBhVGltZW91dAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX1JFTU9WRV9KT0lORVIgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE4MSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUV4dEFkZHJlc3NWYWxpZAorICAgIC8vIG90RXh0QWRkcmVzcyAtIGFFeHRBZGRyZXNzIChvcHRpb25hbCkKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DT01NSVNJT05FUl9QUk9WSVNJT05JTkdfVVJMIFwKKyAgICBPVExXRl9DVExfQ09ERSgxODIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBjaGFyW09QRU5USFJFQURfUFJPVl9VUkxfTUFYX0xFTkdUSCArIDFdIC0gYVByb3Zpc2lvbmluZ1VybCAob3B0aW9uYWwpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfQU5OT1VOQ0VfQkVHSU4gXAorICAgIE9UTFdGX0NUTF9DT0RFKDE4MywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFDaGFubmVsTWFzaworICAgIC8vIHVpbnQ4X3QgLSBhQ291bnQKKyAgICAvLyB1aW50MTZfdCAtIGFQZXJpb2QKKyAgICAvLyBvdElwNkFkZHJlc3MgLSBhQWRkcmVzcworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0VORVJHWV9TQ0FOIFwKKyAgICBPVExXRl9DVExfQ09ERSgxODQsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFTY2FuQ2hhbm5lbHMKKyAgICAvLyB1aW50MTZfdCAtIGFTY2FuRHVyYXRpb24KKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9TRU5EX0FDVElWRV9HRVQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE4NSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUxlbmd0aAorICAgIC8vIHVpbnQ4X3RbYUxlbmd0aF0gLSBhVGx2VHlwZXMKKyAgICAvLyBvdElwNkFkZHJlc3MgLSBhQWRkcmVzcyAob3B0aW9uYWwpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfU0VORF9BQ1RJVkVfU0VUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxODYsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RPcGVyYXRpb25hbERhdGFzZXQgLSBhRGF0YXNldAorICAgIC8vIHVpbnQ4X3QgLSBhTGVuZ3RoCisgICAgLy8gdWludDhfdFthTGVuZ3RoXSAtIGFUbHZUeXBlcworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1NFTkRfUEVORElOR19HRVQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE4NywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUxlbmd0aAorICAgIC8vIHVpbnQ4X3RbYUxlbmd0aF0gLSBhVGx2VHlwZXMKKyAgICAvLyBvdElwNkFkZHJlc3MgLSBhQWRkcmVzcyAob3B0aW9uYWwpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfU0VORF9QRU5ESU5HX1NFVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTg4LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90T3BlcmF0aW9uYWxEYXRhc2V0IC0gYURhdGFzZXQKKyAgICAvLyB1aW50OF90IC0gYUxlbmd0aAorICAgIC8vIHVpbnQ4X3RbYUxlbmd0aF0gLSBhVGx2VHlwZXMKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9TRU5EX01HTVRfQ09NTUlTU0lPTkVSX0dFVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTg5LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhTGVuZ3RoCisgICAgLy8gdWludDhfdFthTGVuZ3RoXSAtIGFUbHZzCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfU0VORF9NR01UX0NPTU1JU1NJT05FUl9TRVQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE5MCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdE9wZXJhdGlvbmFsRGF0YXNldCAtIGFEYXRhc2V0CisgICAgLy8gdWludDhfdCAtIGFMZW5ndGgKKyAgICAvLyB1aW50OF90W2FMZW5ndGhdIC0gYVRsdnMKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9LRVlfU1dJVENIX0dVQVJEVElNRSBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTkxLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDMyX3QgLSBhS2V5U3dpdGNoR3VhcmRUaW1lCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfRkFDVE9SWV9SRVNFVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTkyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1RIUkVBRF9BVVRPX1NUQVJUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxOTMsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBCT09MRUFOIC0gYUF1dG9TdGFydAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1BSRUZFUlJFRF9ST1VURVJfSUQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE5NCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYVJvdXRlcklkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfUFNLQyBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTk1LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RQU0tjIC0gYVBTS2MKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9QQVJFTlRfUFJJT1JJVFkgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE5NiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIGludDhfdCAtIGFQYXJlbnRQcmlvcml0eQorCisvLyBPcGVuVGhyZWFkIGZ1bmN0aW9uIElPQ1RMIGNvZGVzCisjZGVmaW5lIE1JTl9PVExXRl9JT0NUTF9GVU5DX0NPREUgMTAwCisjZGVmaW5lIE1BWF9PVExXRl9JT0NUTF9GVU5DX0NPREUgMTk2CisKKyNlbmRpZiAvL19fT1RMV0ZJT0NUTF9IX18KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL290TkJMQ29udGV4dC5oIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3ROQkxDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyMDRmMgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL290TkJMQ29udGV4dC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgY29udGV4dCBzdHJ1Y3R1cmUgZm9yIE5CTHMgc2VuZCBiZXR3ZWVuIG90THdmIGFuZCBpdCdzIG1pbmlwb3J0LgorICovCisKKyNpZm5kZWYgX19PVF9OQkxfQ09OVEVYVF9IX18KKyNkZWZpbmUgX19PVF9OQkxfQ09OVEVYVF9IX18KKworI2lmbmRlZiBfTkRJU18KKyNkZWZpbmUgTkVUX0JVRkZFUl9MSVNUX0lORk8oX05CTCwgX0lkKSAgICAgICAgICAgICAoKF9OQkwpLT5OZXRCdWZmZXJMaXN0SW5mb1soX0lkKV0pCisjZW5kaWYKKworLy8gRmxhZyB0aGF0IGluZGljYXRlcyB0aGUgQUNLIHJlY2VpdmVkIGhhZCB0aGUgRnJhbWUgcGVuZGluZyBmbGFnCisjZGVmaW5lIE9UX05CTF9GTEFHX0FDS19GUkFNRV9QRU5ESU5HICAgMHgwMQorCisvLyBSZXByZXNlbnRzIHRoZSBkYXRhIG5lY2Vzc2FyeSBmb3IgdGhlIE1BQyBsYXllciB0byBzZW5kIG91dCB0aGUgTmV0QnVmZmVyTGlzdAorLy8gTXVzdCBiZSBzYXZlZCBpbjogTkVUX0JVRkZFUl9MSVNUX0lORk8oTmV0QnVmZmVyTGlzdCwgTWVkaWFTcGVjaWZpY0luZm9ybWF0aW9uRXgpCit0eXBlZGVmIHN0cnVjdCBfT1RfTkJMX0NPTlRFWFQKK3sKKyAgICAvLyBGbGFncworICAgIFVDSEFSIEZsYWdzOworCisgICAgLy8gQ2hhbm5lbCB1c2VkIHRvIHRyYW5zbWl0L3JlY2VpdmUgdGhlIGZyYW1lLgorICAgIFVDSEFSIENoYW5uZWw7CisKKyAgICAvLyBUcmFuc21pdC9yZWNlaXZlIHBvd2VyIGluIGRCbS4KKyAgICBDSEFSICBQb3dlcjsKKworICAgIC8vIExpbmsgUXVhbGl0eSBJbmRpY2F0b3IgZm9yIHJlY2VpdmVkIGZyYW1lcy4KKyAgICBVQ0hBUiBMcWk7CisKK30gT1RfTkJMX0NPTlRFWFQsICpQT1RfTkJMX0NPTlRFWFQ7CisKKy8vIE9UX05CTF9DT05URVhUIG11c3QgZml0IGluIHRoZSBwb2ludGVyIHVzZWQgZm9yIE1lZGlhU3BlY2lmaWNJbmZvcm1hdGlvbkV4IGluIHRoZSBOQkwKK0NfQVNTRVJUKHNpemVvZihPVF9OQkxfQ09OVEVYVCkgPD0gc2l6ZW9mKFBWT0lEKSk7CisKKy8vIEhlbHBlciB0byBzZXQgdGhlIE9UX05CTF9DT05URVhUIGF0dGFjaGVkIHRvIHRoZSBOZXRCdWZmZXJMaXN0CitfX2ZvcmNlaW5saW5lIFZPSUQgU2V0TkJMQ29udGV4dChfSW5fIFBORVRfQlVGRkVSX0xJU1QgTmV0QnVmZmVyTGlzdCwgX0luXyBQT1RfTkJMX0NPTlRFWFQgQ29udGV4dCkKK3sKKyAgICAqKFBPVF9OQkxfQ09OVEVYVCkoJk5FVF9CVUZGRVJfTElTVF9JTkZPKE5ldEJ1ZmZlckxpc3QsIE1lZGlhU3BlY2lmaWNJbmZvcm1hdGlvbkV4KSkgPSAqQ29udGV4dDsKK30KKworLy8gSGVscGVyIHRvIHJldHVybiB0aGUgT1RfTkJMX0NPTlRFWFQgYXR0YWNoZWQgdG8gdGhlIE5ldEJ1ZmZlckxpc3QKK19fZm9yY2VpbmxpbmUgUE9UX05CTF9DT05URVhUIEdldE5CTENvbnRleHQoX0luXyBQTkVUX0JVRkZFUl9MSVNUIE5ldEJ1ZmZlckxpc3QpCit7CisgICAgcmV0dXJuIChQT1RfTkJMX0NPTlRFWFQpKCZORVRfQlVGRkVSX0xJU1RfSU5GTyhOZXRCdWZmZXJMaXN0LCBNZWRpYVNwZWNpZmljSW5mb3JtYXRpb25FeCkpOworfQorCisjZW5kaWYgLy9fX09UX05CTF9DT05URVhUX0hfXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3ROb2RlLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9vdE5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjhhOTViCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3ROb2RlLmgKQEAgLTAsMCArMSw0MDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIGEgbm9kZSBpbnRlcmZhY2UgZm9yIG9wZW50aHJlYWQuaCB0byBiZSB1c2VkIGZvciBjZXJ0aWZpY2F0aW9uIHRlc3RzCisgKi8KKworI2lmbmRlZiBPVE5PREVfSF8KKyNkZWZpbmUgT1ROT0RFX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2lmbmRlZiBPVE5PREVBUEkKKyNkZWZpbmUgT1ROT0RFQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBSZXByZXNlbnRzIGEgdmlydHVhbCBub2RlIGZvciBhbiBvcGVudGhyZWFkIGludGVyZmFjZQorICovCit0eXBlZGVmIHN0cnVjdCBvdE5vZGUgb3ROb2RlOworCisvKioKKyAqIExvZ3MgYSBXUFAgbWVzc2FnZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlTG9nKGNvbnN0IGNoYXIgKmFNZXNzYWdlKTsKKworLyoqCisgKiBBbGxvY2F0ZXMgYSBuZXcgdmlydHVhbCBub2RlCisgKi8KK09UTk9ERUFQSSBvdE5vZGUqIE9UQ0FMTCBvdE5vZGVJbml0KHVpbnQzMl90IGlkKTsKKworLyoqCisgKiBGcmVlcyBhIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUZpbmFsaXplKG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFNldHMgdGhlIGxpbmsgbW9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0TW9kZShvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphTW9kZSk7CisKKy8qKgorICogU3RhcnRzIHRoZSB0aHJlYWQgaW50ZXJmYWNlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVJbnRlcmZhY2VVcChvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBTdG9wcyB0aGUgdGhyZWFkIGludGVyZmFjZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlSW50ZXJmYWNlRG93bihvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBTdGFydHMgdGhlIHRocmVhZCBsb2dpYworICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlVGhyZWFkU3RhcnQob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU3RvcHMgdGhlIHRocmVhZCBsb2dpYworICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlVGhyZWFkU3RvcChvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBTdGFydHMgdGhlIGNvbW1pc3Npb25lciBsb2dpYworICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQ29tbWlzc2lvbmVyU3RhcnQob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogQWRkcyBhIG5ldyBqb2luZXIgdG8gdGhlIGxpc3QgZm9yIGNvbW1pc3Npb25pbmcKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNvbW1pc3Npb25lckpvaW5lckFkZChvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphRXh0QWRkciwgY29uc3QgY2hhciAqYVBTS2QpOworCisvKioKKyAqIFN0b3BzIHRoZSBjb21taXNzaW9uZXIgbG9naWMKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNvbW1pc3Npb25lclN0b3Aob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU3RhcnRzIHRoZSBqb2luZXIgbG9naWMKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUpvaW5lclN0YXJ0KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFQU0tkLCBjb25zdCBjaGFyICphUHJvdmlzaW9uaW5nVXJsKTsKKworLyoqCisgKiBDbGVhcnMgdGhlIG5vZGUncyB3aGl0ZWxpc3QKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNsZWFyV2hpdGVsaXN0KG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIEVuYWJsZXMgdGhlIG5vZGUncyB3aGl0ZWxpc3QKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUVuYWJsZVdoaXRlbGlzdChvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBEaXNhYmxlcyB0aGUgbm9kZSdzIHdoaXRlbGlzdAorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlRGlzYWJsZVdoaXRlbGlzdChvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBBZGRzIGFuIGVudHJ5IHRvIHRoZSBub2RlJ3Mgd2hpdGVsaXN0CisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVBZGRXaGl0ZWxpc3Qob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYUV4dEFkZHIsIGludDhfdCBhUnNzaSk7CisKKy8qKgorICogUmVtb3ZlcyBhbiBlbnRyeSB0byB0aGUgbm9kZSdzIHdoaXRlbGlzdAorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlUmVtb3ZlV2hpdGVsaXN0KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFFeHRBZGRyKTsKKworLyoqCisgKiBHZXRzIHRoZSBub2RlJ3Mgc2hvcnQgbWFjIGFkZHJlc3MgKFJsb2MxNikKKyAqLworT1ROT0RFQVBJIHVpbnQxNl90IE9UQ0FMTCBvdE5vZGVHZXRBZGRyMTYob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogR2V0cyB0aGUgbm9kZSdzIGV4dGVuZGVkIG1hYyBhZGRyZXNzCisgKi8KK09UTk9ERUFQSSBjb25zdCBjaGFyKiBPVENBTEwgb3ROb2RlR2V0QWRkcjY0KG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIEdldHMgdGhlIG5vZGUncyBoYXNoIG1hYyBhZGRyZXNzCisgKi8KK09UTk9ERUFQSSBjb25zdCBjaGFyKiBPVENBTEwgb3ROb2RlR2V0SGFzaE1hY0FkZHJlc3Mob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU2V0cyB0aGUgY2hhbm5lbCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldENoYW5uZWwob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhQ2hhbm5lbCk7CisKKy8qKgorICogR2V0cyB0aGUgY2hhbm5lbCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIHVpbnQ4X3QgT1RDQUxMIG90Tm9kZUdldENoYW5uZWwob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogc2V0cyB0aGUgbm9kZSdzIG1hc3RlciBrZXkKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldE1hc3RlcmtleShvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphTWFzdGVya2V5KTsKKworLyoqCisgKiBHZXRzIHRoZSBub2RlJ3MgbWFzdGVyIGtleQorICovCitPVE5PREVBUEkgY29uc3QgY2hhciogT1RDQUxMIG90Tm9kZUdldE1hc3RlcmtleShvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBHZXRzIHRoZSBrZXkgc2VxdWVuY2UgY291bnRlciBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIHVpbnQzMl90IE9UQ0FMTCBvdE5vZGVHZXRLZXlTZXF1ZW5jZUNvdW50ZXIob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU2V0cyB0aGUga2V5IHNlcXVlbmNlIGNvdW50ZXIgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRLZXlTZXF1ZW5jZUNvdW50ZXIob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVNlcXVlbmNlKTsKKworLyoqCisgKiBTZXRzIHRoZSBrZXkgc3dpdGNoIGd1YXJkIHRpbWUgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRLZXlTd2l0Y2hHdWFyZFRpbWUob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVNlcXVlbmNlKTsKKworLyoqCisgKiBTZXRzIHRoZSBuZXR3b3JrIGlkIHRpbWVvdXQgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXROZXR3b3JrSWRUaW1lb3V0KG90Tm9kZSogYU5vZGUsIHVpbnQ4X3QgYVRpbWVvdXQpOworCisvKioKKyAqIEdldHMgdGhlIG5ldHdvcmsgbmFtZSBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXROZXR3b3JrTmFtZShvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBTZXRzIHRoZSBuZXR3b3JrIG5hbWUgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXROZXR3b3JrTmFtZShvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphTmFtZSk7CisKKy8qKgorICogR2V0cyB0aGUgcGFuIGlkIGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgdWludDE2X3QgT1RDQUxMIG90Tm9kZUdldFBhbklkKG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFNldHMgdGhlIHBhbiBpZCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFBhbklkKG90Tm9kZSogYU5vZGUsIHVpbnQxNl90IGFQYW5JZCk7CisKKy8qKgorICogR2V0cyB0aGUgcGFydGl0aW9uIGlkIGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgdWludDMyX3QgT1RDQUxMIG90Tm9kZUdldFBhcnRpdGlvbklkKG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFNldHMgdGhlIHBhcnRpdGlvbiBpZCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFBhcnRpdGlvbklkKG90Tm9kZSogYU5vZGUsIHVpbnQzMl90IGFQYXJ0aXRpb25JZCk7CisKKy8qKgorICogU2V0cyB0aGUgcm91dGVyIHVwZ3JhZGUgdGhyZXNob2xkIGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFUaHJlc2hvbGQpOworCisvKioKKyAqIFNldHMgdGhlIHJvdXRlciBkb3duZ3JhZGUgdGhyZXNob2xkIGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKG90Tm9kZSogYU5vZGUsIHVpbnQ4X3QgYVRocmVzaG9sZCk7CisKKy8qKgorICogUmVsZWFzZXMgYSByb3V0ZXIgaWQgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVSZWxlYXNlUm91dGVySWQob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhUm91dGVySWQpOworCisvKioKKyAqIEdldHMgdGhlIG5vZGUncyBzdGF0ZQorICovCitPVE5PREVBUEkgY29uc3QgY2hhciogT1RDQUxMIG90Tm9kZUdldFN0YXRlKG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFNldHMgdGhlIG5vZGUncyBzdGF0ZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0U3RhdGUob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVN0YXRlKTsKKworLyoqCisgKiBHZXRzIHRoZSBjaGlsZCB0aW1lb3V0IGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgdWludDMyX3QgT1RDQUxMIG90Tm9kZUdldFRpbWVvdXQob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU2V0cyB0aGUgY2hpbGQgdGltZW91dCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFRpbWVvdXQob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVRpbWVvdXQpOworCisvKioKKyAqIEdldHMgdGhlIGxlYWRlciB3ZWlnaHQgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSB1aW50OF90IE9UQ0FMTCBvdE5vZGVHZXRXZWlnaHQob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU2V0cyB0aGUgbGVhZGVyIHdlaWdodCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFdlaWdodChvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFXZWlnaHQpOworCisvKioKKyAqIEFkZHMgYW4gSVAgYWRkcmVzcyBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUFkZElwQWRkcihvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphQWRkcik7CisKKy8qKgorICogR2V0cyB0aGUgSVAgYWRkcmVzcyBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXRBZGRycyhvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBHZXRzIHRoZSBjb250ZXh0IHJldXNlIGRlbGF5IGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgdWludDMyX3QgT1RDQUxMIG90Tm9kZUdldENvbnRleHRSZXVzZURlbGF5KG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFNldHMgdGhlIGNvbnRleHQgcmV1c2UgZGVsYXkgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRDb250ZXh0UmV1c2VEZWxheShvdE5vZGUqIGFOb2RlLCB1aW50MzJfdCBhRGVsYXkpOworCisvKioKKyAqIEFkZHMgYW4gSVAgcHJlZml4IGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQWRkUHJlZml4KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFQcmVmaXgsIGNvbnN0IGNoYXIgKmFGbGFncywgY29uc3QgY2hhciAqYVByZWZlcmVuY2UpOworCisvKioKKyAqIFJlbW92ZXMgYW4gSVAgcHJlZml4IGZyb20gdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlbW92ZVByZWZpeChvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphUHJlZml4KTsKKworLyoqCisgKiBBZGRzIGFuIElQIHJvdXRlIGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQWRkUm91dGUob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVByZWZpeCwgY29uc3QgY2hhciAqYVByZWZlcmVuY2UpOworCisvKioKKyAqIFJlbW92ZXMgYW4gSVAgcm91dGUgZnJvbSB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlUmVtb3ZlUm91dGUob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVByZWZpeCk7CisKKy8qKgorICogUmVnaXN0ZXJzIHRoZSBuZXQgZGF0YSBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlZ2lzdGVyTmV0ZGF0YShvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBQZXJmb3JtcyBhbiBlbmVyZ3kgc2NhbiBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUVuZXJneVNjYW4ob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYU1hc2ssIHVpbnQ4X3QgYUNvdW50LCB1aW50MTZfdCBhUGVyaW9kLCB1aW50MTZfdCBhRHVyYXRpb24sIGNvbnN0IGNoYXIgKmFBZGRyKTsKKworLyoqCisgKiBQZXJmb3JtcyBhIHBhbmlkIHF1ZXJ5IGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlUGFuSWRRdWVyeShvdE5vZGUqIGFOb2RlLCB1aW50MTZfdCBhUGFuSWQsIHVpbnQzMl90IGFNYXNrLCBjb25zdCBjaGFyICphQWRkcik7CisKKy8qKgorICogUGVyZm9ybXMgYW4gc2NhbiBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVTY2FuKG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFBlcmZvcm1zIGFuIHNjYW4gZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSB1aW50MzJfdCBPVENBTEwgb3ROb2RlUGluZyhvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphQWRkciwgdWludDE2X3QgYVNpemUsIHVpbnQzMl90IGFNaW5SZXBsaWVzLCB1aW50MTZfdCBhVGltZW91dCk7CisKKy8qKgorICogU2V0cyB0aGUgcm91dGVyIHNlbGVjdGlvbiBqaXR0ZXIgdmFsdWUgZm9yIGEgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKG90Tm9kZSogYU5vZGUsIHVpbnQ4X3QgYVJvdXRlckppdHRlcik7CisKKy8qKgorICogU2VuZHMgdGhlIGFubm91bmNlIG1lc3NhZ2UgZm9yIGEgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQ29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbihvdE5vZGUqIGFOb2RlLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIHVpbnQ4X3QgYUNvdW50LCB1aW50MTZfdCBhUGVyaW9kLCBjb25zdCBjaGFyICphQWRkcik7CisKKy8qKgorICogU2V0cyB0aGUgYWN0aXZlIGRhdGFzZXQgZm9yIGEgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0QWN0aXZlRGF0YXNldChvdE5vZGUqIGFOb2RlLCB1aW50NjRfdCBhVGltZXN0YW1wLCB1aW50MTZfdCBhUGFuSWQsIHVpbnQxNl90IGFDaGFubmVsLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXkpOworCisvKioKKyAqIFNldHMgdGhlIHBlbmRpbmcgZGF0YXNldCBmb3IgYSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRQZW5kaW5nRGF0YXNldChvdE5vZGUqIGFOb2RlLCB1aW50NjRfdCBhQWN0aXZlVGltZXN0YW1wLCB1aW50NjRfdCBhUGVuZGluZ1RpbWVzdGFtcCwgdWludDE2X3QgYVBhbklkLCB1aW50MTZfdCBhQ2hhbm5lbCk7CisKKy8qKgorICogU2VuZHMgYSBwZW5kaW5nIHNldCBmb3IgYSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZW5kUGVuZGluZ1NldChvdE5vZGUqIGFOb2RlLCB1aW50NjRfdCBhQWN0aXZlVGltZXN0YW1wLCB1aW50NjRfdCBhUGVuZGluZ1RpbWVzdGFtcCwgdWludDMyX3QgYURlbGF5VGltZXIsIHVpbnQxNl90IGFQYW5JZCwgdWludDE2X3QgYUNoYW5uZWwsIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXksIGNvbnN0IGNoYXIgKmFNZXNoTG9jYWwsIGNvbnN0IGNoYXIgKmFOZXR3b3JrTmFtZSk7CisKKy8qKgorICogU2VuZHMgYSBhY3RpdmUgc2V0IGZvciBhIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNlbmRBY3RpdmVTZXQob3ROb2RlKiBhTm9kZSwgdWludDY0X3QgYUFjdGl2ZVRpbWVzdGFtcCwgdWludDE2X3QgYVBhbklkLCB1aW50MTZfdCBhQ2hhbm5lbCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCBjb25zdCBjaGFyICphRXh0UGFuSWQsIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXksIGNvbnN0IGNoYXIgKmFNZXNoTG9jYWwsIGNvbnN0IGNoYXIgKmFOZXR3b3JrTmFtZSwgY29uc3QgY2hhciAqYUJpbmFyeSk7CisKKy8qKgorICogU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hpbGRyZW4gZm9yIGEgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0TWF4Q2hpbGRyZW4ob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhTWF4Q2hpbGRyZW4pOworCisvKioKKyAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBsaXN0ZW4gaW4gb24gdmlydHVhbCBub2RlcycgTUFDIGZyYW1lcworICovCisKK3R5cGVkZWYgc3RydWN0IG90TGlzdGVuZXIgb3RMaXN0ZW5lcjsKKworLyoqCisgKiBDcmVhdGVzIGFuZCBzdGFydHMgYSBuZXcgbGlzdGVuZXIKKyAqLworT1ROT0RFQVBJIG90TGlzdGVuZXIqIE9UQ0FMTCBvdExpc3RlbmVySW5pdCh1aW50MzJfdCBub2RlaWQpOworCisvKioKKyAqIEZyZWVzIGEgbGlzdGVuZXIKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90TGlzdGVuZXJGaW5hbGl6ZShvdExpc3RlbmVyKiBhTGlzdGVuZXIpOworCisvKioKKyAqIFN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgYSByZWNlaXZlZCBNQUMgZnJhbWUgZnJvbSB0aGUgbGlzdGVuZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RNYWNGcmFtZQoreworICAgIHVpbnQ4X3QgYnVmZmVyWzEyOF07CisgICAgdWludDhfdCBsZW5ndGg7CisgICAgdWludDMyX3Qgbm9kZWlkOworfSBvdE1hY0ZyYW1lOworCisvKioKKyAqIFJlYWRzIHRoZSBuZXh0IE1BQyBmcmFtZSBmcm9tIHRoZSBsaXN0ZW5lcgorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3RMaXN0ZW5lclJlYWQob3RMaXN0ZW5lciogYUxpc3RlbmVyLCBvdE1hY0ZyYW1lICphRnJhbWUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9UTk9ERV9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3RPSUQuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL290T0lELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MjY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL290T0lELmgKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT0lEIGludGVyZmFjZSBiZXR3ZWVuIG90THdmIGFuZCBpdCdzIG1pbmlwb3J0LgorICovCisKKyNpZm5kZWYgX19PVE9JRF9IX18KKyNkZWZpbmUgX19PVE9JRF9IX18KKworI3ByYWdtYSBvbmNlCisKKy8vCisvLyBNYWNyb3MgZm9yIGRlZmluaW5nIG5hdGl2ZSBPcGVuVGhyZWFkIE9JRHMKKy8vCisKKyNkZWZpbmUgT1RfT1BFUkFUSU9OQUxfT0lEICAgICAgKDB4MDFVKQorI2RlZmluZSBPVF9TVEFUSVNUSUNTX09JRCAgICAgICAoMHgwMlUpIAorCisjZGVmaW5lIE9UX01BTkRBVE9SWV9PSUQgICAgICAgICgweDAxVSkKKyNkZWZpbmUgT1RfT1BUSU9OQUxfT0lEICAgICAgICAgKDB4MDJVKQorCisjZGVmaW5lIE9UX0RFRklORV9PSUQoU2VxLG8sbSkgICgoMHhEMDAwMDAwMFUpIHwgKChvKSA8PCAxNikgfCAoKG0pIDw8IDgpIHwgKFNlcSkpCisKKy8vCisvLyBPcGVuVGhyZWFkIFN0YXR1cyBJbmRpY2F0aW9uIGNvZGVzIChhbmQgYXNzb2NpYXRlZCBwYXlsb2FkIHR5cGVzKQorLy8KKworI2RlZmluZSBORElTX1NUQVRVU19PVF9FTkVSR1lfU0NBTl9SRVNVTFQgICAgICAgICAgICgoTkRJU19TVEFUVVMpMHg0MDA1MDAwMEwpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UX0VORVJHWV9TQ0FOX1JFU1VMVAorICAgIHsKKyAgICAgICAgTkRJU19TVEFUVVMgICAgICAgICBTdGF0dXM7CisgICAgICAgIENIQVIgICAgICAgICAgICAgICAgTWF4UnNzaTsKKyAgICB9IE9UX0VORVJHWV9TQ0FOX1JFU1VMVCwgKiBQT1RfRU5FUkdZX1NDQU5fUkVTVUxUOworCisvLworLy8gR2VuZXJhbCBPSUQgRGVmaW5pdGlvbnMKKy8vCisKKy8vIFVzZWQgdG8gcXVlcnkgaW5pdGlhbCBjb25zdGFudHMgb2YgdGhlIG1pbmlwb3J0CisjZGVmaW5lIE9JRF9PVF9DQVBBQklMSVRJRVMgICAgICAgICAgICAgICAgICAgICAgICAgT1RfREVGSU5FX09JRCgwLCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX01BTkRBVE9SWV9PSUQpCisgICAgdHlwZWRlZiBlbnVtIE9UX01QX01PREUKKyAgICB7CisgICAgICAgIE9UX01QX01PREVfUkFESU8sICAvLyBTdXBwb3J0cyB0aGUgcGh5c2ljYWwgcmFkaW8gbGF5ZXIKKyAgICAgICAgT1RfTVBfTU9ERV9USFJFQUQgIC8vIFN1cHBvcnRzIHRoZSBmdWxsIFRocmVhZCBzdGFjaworICAgIH0gT1RfTVBfTU9ERTsKKyAgICB0eXBlZGVmIGVudW0gT1RfUkFESU9fQ0FQQUJJTElUWQorICAgIHsKKyAgICAgICAgLy8gUmFkaW8gc3VwcG9ydHMgQWNrIHRpbWVvdXRzIGludGVybmFsbHkKKyAgICAgICAgT1RfUkFESU9fQ0FQX0FDS19USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCisgICAgICAgIC8vIFJhZGlvIHN1cHBvcnRzIE1BQyByZXRyeSBsb2dpYyBhbmQgdGltZXJzOyBhcyB3ZWxsIGFzIGNvbGxpc2lvbiBhdm9pZGFuY2UuCisgICAgICAgIE9UX1JBRElPX0NBUF9NQUNfUkVUUllfQU5EX0NPTExJU0lPTl9BVk9JREFOQ0UgID0gMSA8PCAxLAorICAgICAgICAvLyBSYWRpbyBzdXBwb3J0cyBzbGVlcGluZy4gSWYgdGhlIGRldmljZSBzdXBwb3J0cyBzbGVlcGluZywgaXQgaXMgYXNzdW1lZCB0bworICAgICAgICAvLyBkZWZhdWx0IHRvIHRoZSBzbGVlcCBzdGF0ZSBvbiBicmluZyB1cC4KKyAgICAgICAgT1RfUkFESU9fQ0FQX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDIsCisgICAgfSBPVF9SQURJT19DQVBBQklMSVRZOworICAgIHR5cGVkZWYgc3RydWN0IF9PVF9DQVBBQklMSVRJRVMKKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfQ0FQQUJJTElUSUVTX1JFVklTSU9OXzEgMQorICAgICAgICBORElTX09CSkVDVF9IRUFERVIgSGVhZGVyOworICAgICAgICBPVF9NUF9NT0RFICAgICAgICAgTWluaXBvcnRNb2RlOworICAgICAgICBVU0hPUlQgICAgICAgICAgICAgUmFkaW9DYXBhYmlsaXRpZXM7ICAvLyBPVF9SQURJT19DQVBBQklMSVRZIGZsYWdzCisgICAgfSBPVF9DQVBBQklMSVRJRVMsICogUE9UX0NBUEFCSUxJVElFUzsKKworI2RlZmluZSBTSVpFT0ZfT1RfQ0FQQUJJTElUSUVTX1JFVklTSU9OXzEgXAorICAgIFJUTF9TSVpFT0ZfVEhST1VHSF9GSUVMRChPVF9DQVBBQklMSVRJRVMsIFJhZGlvQ2FwYWJpbGl0aWVzKQorCisvLworLy8gUmFkaW8gTW9kZSBPSURzCisvLworCisvLyBVc2VkIHRvIHF1ZXJ5L3NldCBzbGVlcCBtb2RlOyBvbmx5IHVzZWQgaWYgUmFkaW9DYXBhYmlsaXRpZXMgCisvLyBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgT1RfUkFESU9fQ0FQX1NMRUVQLgorI2RlZmluZSBPSURfT1RfU0xFRVBfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UX0RFRklORV9PSUQoMTAwLCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX09QVElPTkFMX09JRCkKKyAgICB0eXBlZGVmIHN0cnVjdCBfT1RfU0xFRVBfTU9ERQorICAgIHsKKyAgICAgICAgI2RlZmluZSBPVF9TTEVFUF9NT0RFX1JFVklTSU9OXzEgMQorICAgICAgICBORElTX09CSkVDVF9IRUFERVIgSGVhZGVyOworICAgICAgICBCT09MRUFOICAgICAgICAgICAgSW5TbGVlcE1vZGU7CisgICAgfSBPVF9TTEVFUF9NT0RFLCAqIFBPVF9TTEVFUF9NT0RFOworCisjZGVmaW5lIFNJWkVPRl9PVF9TTEVFUF9NT0RFX1JFVklTSU9OXzEgXAorICAgIFJUTF9TSVpFT0ZfVEhST1VHSF9GSUVMRChPVF9TTEVFUF9NT0RFLCBJblNsZWVwTW9kZSkKKworLy8gVXNlZCB0byBxdWVyeS9zZXQgcHJvbWlzY3VvdXMgbW9kZQorI2RlZmluZSBPSURfT1RfUFJPTUlTQ1VPVVNfTU9ERSAgICAgICAgICAgICAgICAgICAgIE9UX0RFRklORV9PSUQoMTAxLCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX01BTkRBVE9SWV9PSUQpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UX1BST01JU0NVT1VTX01PREUKKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfUFJPTUlTQ1VPVVNfTU9ERV9SRVZJU0lPTl8xIDEKKyAgICAgICAgTkRJU19PQkpFQ1RfSEVBREVSIEhlYWRlcjsKKyAgICAgICAgQk9PTEVBTiAgICAgICAgICAgIEluUHJvbWlzY3VvdXNNb2RlOworICAgIH0gT1RfUFJPTUlTQ1VPVVNfTU9ERSwgKiBQT1RfUFJPTUlTQ1VPVVNfTU9ERTsKKworI2RlZmluZSBTSVpFT0ZfT1RfUFJPTUlTQ1VPVVNfTU9ERV9SRVZJU0lPTl8xIFwKKyAgICBSVExfU0laRU9GX1RIUk9VR0hfRklFTEQoT1RfUFJPTUlTQ1VPVVNfTU9ERSwgSW5Qcm9taXNjdW91c01vZGUpCisKKy8vIFVzZWQgdG8gcXVlcnkgdGhlIGZhY3RvcnkgRXh0ZW5kZWQgQWRkcmVzcworI2RlZmluZSBPSURfT1RfRkFDVE9SWV9FWFRFTkRFRF9BRERSRVNTICAgICAgICAgICAgIE9UX0RFRklORV9PSUQoMTAyLCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX01BTkRBVE9SWV9PSUQpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UX0ZBQ1RPUllfRVhURU5ERURfQUREUkVTUworICAgIHsKKyAgICAgICAgI2RlZmluZSBPVF9GQUNUT1JZX0VYVEVOREVEX0FERFJFU1NfUkVWSVNJT05fMSAxCisgICAgICAgIE5ESVNfT0JKRUNUX0hFQURFUiBIZWFkZXI7CisgICAgICAgIFVMT05HTE9ORyAgICAgICAgICBFeHRlbmRlZEFkZHJlc3M7CisgICAgfSBPVF9GQUNUT1JZX0VYVEVOREVEX0FERFJFU1MsICogUE9UX0ZBQ1RPUllfRVhURU5ERURfQUREUkVTUzsKKworI2RlZmluZSBTSVpFT0ZfT1RfRkFDVE9SWV9FWFRFTkRFRF9BRERSRVNTX1JFVklTSU9OXzEgXAorICAgIFJUTF9TSVpFT0ZfVEhST1VHSF9GSUVMRChPVF9GQUNUT1JZX0VYVEVOREVEX0FERFJFU1MsIEV4dGVuZGVkQWRkcmVzcykKKworLy8gVXNlZCB0byBxdWVyeS9zZXQgdGhlIFBhbiBJRAorI2RlZmluZSBPSURfT1RfUEFORF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UX0RFRklORV9PSUQoMTAzLCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX01BTkRBVE9SWV9PSUQpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UX1BBTkRfSUQKKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfUEFORF9JRF9SRVZJU0lPTl8xIDEKKyAgICAgICAgTkRJU19PQkpFQ1RfSEVBREVSIEhlYWRlcjsKKyAgICAgICAgVVNIT1JUICAgICAgICAgICAgIFBhbklEOworICAgIH0gT1RfUEFORF9JRCwgKiBQT1RfUEFORF9JRDsKKworI2RlZmluZSBTSVpFT0ZfT1RfUEFORF9JRF9SRVZJU0lPTl8xIFwKKyAgICBSVExfU0laRU9GX1RIUk9VR0hfRklFTEQoT1RfUEFORF9JRCwgUGFuSUQpCisKKy8vIFVzZWQgdG8gcXVlcnkvc2V0IHRoZSBTaG9ydCBBZGRyZXNzCisjZGVmaW5lIE9JRF9PVF9TSE9SVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgT1RfREVGSU5FX09JRCgxMDQsIE9UX09QRVJBVElPTkFMX09JRCwgT1RfTUFOREFUT1JZX09JRCkKKyAgICB0eXBlZGVmIHN0cnVjdCBfT1RfU0hPUlRfQUREUkVTUworICAgIHsKKyAgICAgICAgI2RlZmluZSBPVF9TSE9SVF9BRERSRVNTX1JFVklTSU9OXzEgMQorICAgICAgICBORElTX09CSkVDVF9IRUFERVIgSGVhZGVyOworICAgICAgICBVU0hPUlQgICAgICAgICAgICAgU2hvcnRBZGRyZXNzOworICAgIH0gT1RfU0hPUlRfQUREUkVTUywgKiBQT1RfU0hPUlRfQUREUkVTUzsKKworI2RlZmluZSBTSVpFT0ZfT1RfU0hPUlRfQUREUkVTU19SRVZJU0lPTl8xIFwKKyAgICBSVExfU0laRU9GX1RIUk9VR0hfRklFTEQoT1RfU0hPUlRfQUREUkVTUywgU2hvcnRBZGRyZXNzKQorCisvLyBVc2VkIHRvIHF1ZXJ5L3NldCB0aGUgRXh0ZW5kZWQgQWRkcmVzcworI2RlZmluZSBPSURfT1RfRVhURU5ERURfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIE9UX0RFRklORV9PSUQoMTA1LCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX01BTkRBVE9SWV9PSUQpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UX0VYVEVOREVEX0FERFJFU1MKKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfRVhURU5ERURfQUREUkVTU19SRVZJU0lPTl8xIDEKKyAgICAgICAgTkRJU19PQkpFQ1RfSEVBREVSIEhlYWRlcjsKKyAgICAgICAgVUxPTkdMT05HICAgICAgICAgIEV4dGVuZGVkQWRkcmVzczsKKyAgICB9IE9UX0VYVEVOREVEX0FERFJFU1MsICogUE9UX0VYVEVOREVEX0FERFJFU1M7CisKKyNkZWZpbmUgU0laRU9GX09UX0VYVEVOREVEX0FERFJFU1NfUkVWSVNJT05fMSBcCisgICAgUlRMX1NJWkVPRl9USFJPVUdIX0ZJRUxEKE9UX0VYVEVOREVEX0FERFJFU1MsIEV4dGVuZGVkQWRkcmVzcykKKworLy8gVXNlZCB0byBxdWVyeS9zZXQgdGhlIGN1cnJlbnQgbGlzdGVuaW5nIGNoYW5uZWwKKyNkZWZpbmUgT0lEX09UX0NVUlJFTlRfQ0hBTk5FTCAgICAgICAgICAgICAgICAgICAgICBPVF9ERUZJTkVfT0lEKDEwNiwgT1RfT1BFUkFUSU9OQUxfT0lELCBPVF9NQU5EQVRPUllfT0lEKQorICAgIHR5cGVkZWYgc3RydWN0IF9PVF9DVVJSRU5UX0NIQU5ORUwKKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfQ1VSUkVOVF9DSEFOTkVMX1JFVklTSU9OXzEgMQorICAgICAgICBORElTX09CSkVDVF9IRUFERVIgSGVhZGVyOworICAgICAgICBVQ0hBUiAgICAgICAgICAgICAgQ2hhbm5lbDsKKyAgICB9IE9UX0NVUlJFTlRfQ0hBTk5FTCwgKiBQT1RfQ1VSUkVOVF9DSEFOTkVMOworCisjZGVmaW5lIFNJWkVPRl9PVF9DVVJSRU5UX0NIQU5ORUxfUkVWSVNJT05fMSBcCisgICAgUlRMX1NJWkVPRl9USFJPVUdIX0ZJRUxEKE9UX0NVUlJFTlRfQ0hBTk5FTCwgQ2hhbm5lbCkKKworLy8gVXNlZCB0byBxdWVyeSB0aGUgY3VycmVudCBSU1NJIGZvciB0aGUgY3VycmVudCBjaGFubmVsCisjZGVmaW5lIE9JRF9PVF9SU1NJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RfREVGSU5FX09JRCgxMDcsIE9UX09QRVJBVElPTkFMX09JRCwgT1RfTUFOREFUT1JZX09JRCkKKyAgICB0eXBlZGVmIHN0cnVjdCBfT1RfUlNTSQorICAgIHsKKyAgICAgICAgI2RlZmluZSBPVF9SU1NJX1JFVklTSU9OXzEgMQorICAgICAgICBORElTX09CSkVDVF9IRUFERVIgSGVhZGVyOworICAgICAgICBDSEFSICAgICAgICAgICAgICAgUnNzaTsKKyAgICB9IE9UX1JTU0ksICogUE9UX1JTU0k7CisKKyNkZWZpbmUgU0laRU9GX09UX1JTU0lfUkVWSVNJT05fMSBcCisgICAgUlRMX1NJWkVPRl9USFJPVUdIX0ZJRUxEKE9UX1JTU0ksIFJzc2kpCisKKy8vIFRoZSBtYXhpbXVtIG9mIGVhY2ggdHlwZSAoc2hvcnQgb3IgZXh0ZW5kZWQpIG9mIE1BQyBhZGRyZXNzIHRvIHBlbmQKKyNkZWZpbmUgTUFYX1BFTkRJTkdfTUFDX1NJWkUgICAgMzIKKworLy8gVXNlZCB0byBzZXQgdGhlIGxpc3Qgb2YgTUFDIGFkZHJlc3NlcyBmb3IgU0VEcyB3ZSBjdXJyZW50bHkgaGF2ZSBwYWNrZXRzIHBlbmRpbmcKKyNkZWZpbmUgT0lEX09UX1BFTkRJTkdfTUFDX09GRkxPQUQgICAgICAgICAgICAgICAgICBPVF9ERUZJTkVfT0lEKDEwOCwgT1RfT1BFUkFUSU9OQUxfT0lELCBPVF9NQU5EQVRPUllfT0lEKQorICAgIHR5cGVkZWYgc3RydWN0IF9PVF9QRU5ESU5HX01BQ19PRkZMT0FECisgICAgeworICAgICAgICAjZGVmaW5lIE9UX1BFTkRJTkdfTUFDX09GRkxPQURfUkVWSVNJT05fMSAxCisgICAgICAgIE5ESVNfT0JKRUNUX0hFQURFUiBIZWFkZXI7CisgICAgICAgIFVDSEFSICAgICAgICAgICAgICBTaG9ydEFkZHJlc3NDb3VudDsKKyAgICAgICAgVUNIQVIgICAgICAgICAgICAgIEV4dGVuZGVkQWRkcmVzc0NvdW50OworICAgICAgICAvLyBEeW5hbWljIGFycmF5IG9mIFVTSE9SVCBTaG9ydEFkZHJlc3NlcyBvZiBjb3VudCBTaG9ydEFkZHJlc3NDb3VudAorICAgICAgICAvLyBEeW5hbWljIGFycmF5IG9mIFVMT05HTE9ORyBFeHRlbmRlZEFkZHJlc3NlcyBvZiBjb3VudCBFeHRlbmRlZEFkZHJlc3NDb3VudAorICAgIH0gT1RfUEVORElOR19NQUNfT0ZGTE9BRCwgKiBQT1RfUEVORElOR19NQUNfT0ZGTE9BRDsKKworI2RlZmluZSBTSVpFT0ZfT1RfUEVORElOR19NQUNfT0ZGTE9BRF9SRVZJU0lPTl8xIFwKKyAgICBSVExfU0laRU9GX1RIUk9VR0hfRklFTEQoT1RfUEVORElOR19NQUNfT0ZGTE9BRCwgRXh0ZW5kZWRBZGRyZXNzQ291bnQpCisKKyNkZWZpbmUgQ09NUExFVEVfU0laRU9GX09UX1BFTkRJTkdfTUFDX09GRkxPQURfUkVWSVNJT05fMShTaG9ydEFkZHJlc3NDb3VudCwgRXh0ZW5kZWRBZGRyZXNzQ291bnQpIFwKKyAgICAoU0laRU9GX09UX1BFTkRJTkdfTUFDX09GRkxPQURfUkVWSVNJT05fMSArIHNpemVvZihVU0hPUlQpICogU2hvcnRBZGRyZXNzQ291bnQgKyBzaXplb2YoVUxPTkdMT05HKSAqIEV4dGVuZGVkQWRkcmVzc0NvdW50KQorCisvLyBVc2VkIHRvIGlzc3VlIGFuIGVuZXJneSBzY2FuIHJlcXVlc3QgZm9yIHRoZSBnaXZlbiBjaGFubmVsCisjZGVmaW5lIE9JRF9PVF9FTkVSR1lfU0NBTiAgICAgICAgICAgICAgICAgICAgICAgICAgT1RfREVGSU5FX09JRCgxMDksIE9UX09QRVJBVElPTkFMX09JRCwgT1RfTUFOREFUT1JZX09JRCkKKyAgICB0eXBlZGVmIHN0cnVjdCBfT1RfRU5FUkdZX1NDQU4KKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfRU5FUkdZX1NDQU5fUkVWSVNJT05fMSAxCisgICAgICAgIE5ESVNfT0JKRUNUX0hFQURFUiBIZWFkZXI7CisgICAgICAgIFVDSEFSICAgICAgICAgICAgICBDaGFubmVsOworICAgICAgICBVU0hPUlQgICAgICAgICAgICAgRHVyYXRpb25NczsKKyAgICB9IE9UX0VORVJHWV9TQ0FOLCAqIFBPVF9FTkVSR1lfU0NBTjsKKworI2RlZmluZSBTSVpFT0ZfT1RfRU5FUkdZX1NDQU5fUkVWSVNJT05fMSBcCisgICAgUlRMX1NJWkVPRl9USFJPVUdIX0ZJRUxEKE9UX0VORVJHWV9TQ0FOLCBEdXJhdGlvbk1zKQorCisvLworLy8gVGhyZWFkIE1vZGUgT0lEcworLy8KKworLy8gVE9ETyAuLi4KKworI2VuZGlmIC8vX19PVE9JRF9IX18KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL3J0bHJlZmNvdW50LmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9ydGxyZWZjb3VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MTliYzUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9ydGxyZWZjb3VudC5oCkBAIC0wLDAgKzEsNDQxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIG1vZHVsZSBjb250YWlucyByb3V0aW5lcyBhbmQgdHlwZSBkZWZpbml0aW9ucyBmb3IgbWFuYWdpbmcgcmVmZXJlbmNlCisgKiAgY291bnRzLgorICoKKyAqICBOLkIuIFRoZSBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIHVzZSB0aGUgbWluaW11bSBmZW5jaW5nIHJlcXVpcmVkIGZvciBjb3JyZWN0CisgKiAgICAgICBtYW5hZ2VtZW50IG9mIHRoZSByZWZlcmVuY2UgY291bnQgY29udHJhY3QuIE5vIGFkZGl0aW9uYWwgbWVtb3J5CisgKiAgICAgICBvcmRlcmluZyBzaG91bGQgYmUgYXNzdW1lZC4KKyAqLworCisjcHJhZ21hIG9uY2UKKworLy8KKy8vIEFyY2hpdGVjdHVyZSBzdXBwb3J0IG1hY3Jvcy4KKy8vIChVbmRlZmluZWQgYXQgdGhlIGJvdHRvbSB0byBhdm9pZCBnbG9iYWwgbmFtZXNwYWNlIHBvbGx1dGlvbikKKy8vCisKKyNpZiBkZWZpbmVkKF9XSU42NCkKKworI2RlZmluZSBSdGxJbmNyZW1lbnRMb25nUHRyTm9GZW5jZSBJbnRlcmxvY2tlZEluY3JlbWVudE5vRmVuY2U2NAorI2RlZmluZSBSdGxEZWNyZW1lbnRMb25nUHRyUmVsZWFzZSBJbnRlcmxvY2tlZERlY3JlbWVudFJlbGVhc2U2NAorI2RlZmluZSBSdGxFeGNoYW5nZUFkZExvbmdQdHJOb0ZlbmNlIEludGVybG9ja2VkRXhjaGFuZ2VBZGROb0ZlbmNlNjQKKyNkZWZpbmUgUnRsRXhjaGFuZ2VBZGRMb25nUHRyUmVsZWFzZSBJbnRlcmxvY2tlZEV4Y2hhbmdlQWRkUmVsZWFzZTY0CisjZGVmaW5lIFJ0bENvbXBhcmVFeGNoYW5nZUxvbmdQdHJOb0ZlbmNlIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlTm9GZW5jZTY0CisjZGVmaW5lIFJ0bENvbXBhcmVFeGNoYW5nZUxvbmdQdHJSZWxlYXNlIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUmVsZWFzZTY0CisKKyNlbHNlCisKKyNkZWZpbmUgUnRsSW5jcmVtZW50TG9uZ1B0ck5vRmVuY2UgSW50ZXJsb2NrZWRJbmNyZW1lbnROb0ZlbmNlCisjZGVmaW5lIFJ0bERlY3JlbWVudExvbmdQdHJSZWxlYXNlIEludGVybG9ja2VkRGVjcmVtZW50UmVsZWFzZQorI2RlZmluZSBSdGxFeGNoYW5nZUFkZExvbmdQdHJOb0ZlbmNlIEludGVybG9ja2VkRXhjaGFuZ2VBZGROb0ZlbmNlCisjZGVmaW5lIFJ0bEV4Y2hhbmdlQWRkTG9uZ1B0clJlbGVhc2UgSW50ZXJsb2NrZWRFeGNoYW5nZUFkZFJlbGVhc2UKKyNkZWZpbmUgUnRsQ29tcGFyZUV4Y2hhbmdlTG9uZ1B0ck5vRmVuY2UgSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VOb0ZlbmNlCisjZGVmaW5lIFJ0bENvbXBhcmVFeGNoYW5nZUxvbmdQdHJSZWxlYXNlIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUmVsZWFzZQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoX1g4Nl8pIHx8IGRlZmluZWQoX0FNRDY0XykKKworI2RlZmluZSBSdGxCYXJyaWVyQWZ0ZXJJbnRlcmxvY2soKQorCisjZWxpZiBkZWZpbmVkKF9BUk02NF8pCisKKyNkZWZpbmUgUnRsQmFycmllckFmdGVySW50ZXJsb2NrKCkgIF9fZG1iKF9BUk02NF9CQVJSSUVSX0lTSCkKKworI2VsaWYgZGVmaW5lZChfQVJNXykKKworI2RlZmluZSBSdGxCYXJyaWVyQWZ0ZXJJbnRlcmxvY2soKSAgX19kbWIoX0FSTV9CQVJSSUVSX0lTSCkKKworI2Vsc2UKKworI2RlZmluZSBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUuCisKKyNlbmRpZgorCisjZGVmaW5lIFJUTF9SRUZfQ09VTlRfSU5JVCAxCisKK0ZPUkNFSU5MSU5FCitWT0lECitSdGxJbml0aWFsaXplUmVmZXJlbmNlQ291bnQgKAorICAgIF9PdXRfIFBSVExfUkVGRVJFTkNFX0NPVU5UIFJlZkNvdW50CisgICAgKQorCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgcmVmZXJlbmNlIGNvdW50IHRvIDEuCisKK0FyZ3VtZW50czoKKworICAgIFJlZkNvdW50IC0gU3VwcGxpZXMgYSBwb2ludGVyIHRvIGEgcmVmZXJlbmNlIGNvdW50IHRvIGluaXRpYWxpemUuCisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuCisKKy0tKi8KKworeworCisgICAgKlJlZkNvdW50ID0gUlRMX1JFRl9DT1VOVF9JTklUOworICAgIHJldHVybjsKK30KKworRk9SQ0VJTkxJTkUKK1ZPSUQKK1J0bEluaXRpYWxpemVSZWZlcmVuY2VDb3VudEV4ICgKKyAgICBfT3V0XyBQUlRMX1JFRkVSRU5DRV9DT1VOVCBSZWZDb3VudCwKKyAgICBfSW5fIFVMT05HIEJpYXMKKyAgICApCisKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSByZWZlcmVuY2UgY291bnQgdG8gYSBwb3NpdGl2ZSB2YWx1ZS4KKworQXJndW1lbnRzOgorCisgICAgUmVmQ291bnQgLSBTdXBwbGllcyBhIHBvaW50ZXIgdG8gYSByZWZlcmVuY2UgY291bnQgdG8gaW5pdGlhbGl6ZS4KKworICAgIEJpYXMgLSBTdXBwbGllcyBhbiBpbml0aWFsIHJlZmVyZW5jZSBjb3VudCAobXVzdCBiZSBwb3NpdGl2ZSkuCisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuCisKKy0tKi8KKworeworCisgICAgKlJlZkNvdW50ID0gQmlhczsKKyAgICByZXR1cm47Cit9CisKK0ZPUkNFSU5MSU5FCitWT0lECitSdGxJbmNyZW1lbnRSZWZlcmVuY2VDb3VudCAoCisgICAgX0lub3V0XyBQUlRMX1JFRkVSRU5DRV9DT1VOVCBSZWZDb3VudAorICAgICkKKworLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIGNvdW50LCBwcmV2ZW50aW5nIG9iamVjdAorICAgIGRlbGV0aW9uLgorCitBcmd1bWVudHM6CisKKyAgICBSZWZDb3VudCAtIFN1cHBsaWVzIGEgcG9pbnRlciB0byBhIHJlZmVyZW5jZSBjb3VudC4KKworUmV0dXJuIFZhbHVlOgorCisgICAgTm9uZS4KKworLS0qLworCit7CisKKyAgICBpZiAoUnRsSW5jcmVtZW50TG9uZ1B0ck5vRmVuY2UoUmVmQ291bnQpID4gMSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX19mYXN0ZmFpbChGQVNUX0ZBSUxfSU5WQUxJRF9SRUZFUkVOQ0VfQ09VTlQpOworfQorCitGT1JDRUlOTElORQorVk9JRAorUnRsSW5jcmVtZW50UmVmZXJlbmNlQ291bnRFeCAoCisgICAgX0lub3V0XyBQUlRMX1JFRkVSRU5DRV9DT1VOVCBSZWZDb3VudCwKKyAgICBfSW5fIFVMT05HIEJpYXMKKyAgICApCisKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFRoaXMgZnVuY3Rpb24gaW5jcmVhc2VzIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIGNvdW50IGJ5IHRoZSBzcGVjaWZpZWQgYmlhcywKKyAgICBwcmV2ZW50aW5nIG9iamVjdCBkZWxldGlvbi4KKworQXJndW1lbnRzOgorCisgICAgUmVmQ291bnQgLSBTdXBwbGllcyBhIHBvaW50ZXIgdG8gYSByZWZlcmVuY2UgY291bnQuCisKKyAgICBCaWFzIC0gU3VwcGxpZXMgYSByZWZlcmVuY2UgYmlhcyBhbW91bnQuCisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuCisKKy0tKi8KKworeworCisgICAgaWYgKFJ0bEV4Y2hhbmdlQWRkTG9uZ1B0ck5vRmVuY2UoUmVmQ291bnQsIEJpYXMpID4gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX19mYXN0ZmFpbChGQVNUX0ZBSUxfSU5WQUxJRF9SRUZFUkVOQ0VfQ09VTlQpOworfQorCitGT1JDRUlOTElORQorQk9PTEVBTgorUnRsSW5jcmVtZW50UmVmZXJlbmNlQ291bnROb25aZXJvICgKKyAgICBfSW5vdXRfIHZvbGF0aWxlIFJUTF9SRUZFUkVOQ0VfQ09VTlQgKlJlZkNvdW50LAorICAgIF9Jbl8gVUxPTkcgQmlhcworICAgICkKKworLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgVGhpcyBmdW5jdGlvbiBpbmNyZWFzZXMgdGhlIHNwZWNpZmllZCByZWZlcmVuY2UgY291bnQgYnkgdGhlIHNwZWNpZmllZCBiaWFzLAorICAgIHVubGVzcyB0aGUgcmVmZXJlbmNlIGNvdW50IHdhcyBwcmV2aW91c2x5IHplcm8uCisKK0FyZ3VtZW50czoKKworICAgIFJlZkNvdW50IC0gU3VwcGxpZXMgYSBwb2ludGVyIHRvIGEgcmVmZXJlbmNlIGNvdW50LgorCisgICAgQmlhcyAtIFN1cHBsaWVzIGEgcmVmZXJlbmNlIGJpYXMgYW1vdW50LgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBUUlVFIGlmIHRoZSByZWZlcmVuY2UgY291bnQgd2FzIGluY3JlbWVudGVkLCBGQUxTRSBvdGhlcndpc2UuCisKKy0tKi8KKworeworCisgICAgUlRMX1JFRkVSRU5DRV9DT1VOVCBOZXdWYWx1ZTsKKyAgICBSVExfUkVGRVJFTkNFX0NPVU5UIE9sZFZhbHVlOworCisgICAgUHJlZmV0Y2hGb3JXcml0ZShSZWZDb3VudCk7CisgICAgT2xkVmFsdWUgPSBSZWFkTG9uZ1B0ck5vRmVuY2UoUmVmQ291bnQpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgTmV3VmFsdWUgPSBPbGRWYWx1ZSArIEJpYXM7CisgICAgICAgIGlmICgoVUxPTkdfUFRSKU5ld1ZhbHVlID4gQmlhcykgeworICAgICAgICAgICAgTmV3VmFsdWUgPSBSdGxDb21wYXJlRXhjaGFuZ2VMb25nUHRyTm9GZW5jZShSZWZDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV3VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9sZFZhbHVlKTsKKworICAgICAgICAgICAgaWYgKE5ld1ZhbHVlID09IE9sZFZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE9sZFZhbHVlID0gTmV3VmFsdWU7CisKKyAgICAgICAgfSBlbHNlIGlmICgoVUxPTkdfUFRSKU5ld1ZhbHVlID09IEJpYXMpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgX19mYXN0ZmFpbChGQVNUX0ZBSUxfSU5WQUxJRF9SRUZFUkVOQ0VfQ09VTlQpOworICAgICAgICB9CisgICAgfQorfQorCitGT1JDRUlOTElORQorQk9PTEVBTgorUnRsRGVjcmVtZW50UmVmZXJlbmNlQ291bnQgKAorICAgIF9Jbm91dF8gUFJUTF9SRUZFUkVOQ0VfQ09VTlQgUmVmQ291bnQKKyAgICApCisKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFRoaXMgZnVuY3Rpb24gcmVkdWNlcyB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZSBjb3VudCwgcG90ZW50aWFsbHkgdHJpZ2dlcmluZworICAgIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgZ3VhcmRlZCBvYmplY3QuCisKK0FyZ3VtZW50czoKKworICAgIFJlZkNvdW50IC0gU3VwcGxpZXMgYSBwb2ludGVyIHRvIGEgcmVmZXJlbmNlIGNvdW50LgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBUUlVFIGlmIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGRlc3Ryb3llZCwgRkFMU0Ugb3RoZXJ3aXNlLgorCistLSovCisKK3sKKworICAgIFJUTF9SRUZFUkVOQ0VfQ09VTlQgTmV3VmFsdWU7CisKKyAgICAvLworICAgIC8vIEEgcmVsZWFzZSBmZW5jZSBpcyByZXF1aXJlZCB0byBlbnN1cmUgYWxsIGd1YXJkZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZQorICAgIC8vIGNvbXBsZXRlIGJlZm9yZSBhbnkgdGhyZWFkIGNhbiBiZWdpbiBkZXN0cm95aW5nIHRoZSBvYmplY3QuCisgICAgLy8KKworICAgIE5ld1ZhbHVlID0gUnRsRGVjcmVtZW50TG9uZ1B0clJlbGVhc2UoUmVmQ291bnQpOworICAgIGlmIChOZXdWYWx1ZSA+IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgfSBlbHNlIGlmIChOZXdWYWx1ZSA9PSAwKSB7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW4gYWNxdWlyZSBmZW5jZSBpcyByZXF1aXJlZCBiZWZvcmUgb2JqZWN0IGRlc3RydWN0aW9uIHRvIGVuc3VyZQorICAgICAgICAvLyB0aGF0IHRoZSBkZXN0cnVjdG9yIGNhbm5vdCBvYnNlcnZlIHZhbHVlcyBjaGFuZ2luZyBvbiBvdGhlciB0aHJlYWRzLgorICAgICAgICAvLworCisgICAgICAgIFJ0bEJhcnJpZXJBZnRlckludGVybG9jaygpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBfX2Zhc3RmYWlsKEZBU1RfRkFJTF9JTlZBTElEX1JFRkVSRU5DRV9DT1VOVCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitGT1JDRUlOTElORQorQk9PTEVBTgorUnRsRGVjcmVtZW50UmVmZXJlbmNlQ291bnRFeCAoCisgICAgX0lub3V0XyBQUlRMX1JFRkVSRU5DRV9DT1VOVCBSZWZDb3VudCwKKyAgICBfSW5fIFVMT05HIEJpYXMKKyAgICApCisKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFRoaXMgZnVuY3Rpb24gcmVkdWNlcyB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZSBjb3VudCBieSB0aGUgc3BlY2lmaWVkIGFtb3VudCwKKyAgICBwb3RlbnRpYWxseSB0cmlnZ2VyaW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgZ3VhcmRlZCBvYmplY3QuCisKK0FyZ3VtZW50czoKKworICAgIFJlZkNvdW50IC0gU3VwcGxpZXMgYSBwb2ludGVyIHRvIGEgcmVmZXJlbmNlIGNvdW50LgorCisgICAgQmlhcyAtIFN1cHBsaWVzIGEgcmVmZXJlbmNlIGJpYXMgYW1vdW50LgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBUUlVFIGlmIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGRlc3Ryb3llZCwgRkFMU0Ugb3RoZXJ3aXNlLgorCistLSovCisKK3sKKworICAgIFJUTF9SRUZFUkVOQ0VfQ09VTlQgTmV3VmFsdWU7CisKKyAgICAvLworICAgIC8vIEEgcmVsZWFzZSBmZW5jZSBpcyByZXF1aXJlZCB0byBlbnN1cmUgYWxsIGd1YXJkZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZQorICAgIC8vIGNvbXBsZXRlIGJlZm9yZSBhbnkgdGhyZWFkIGNhbiBiZWdpbiBkZXN0cm95aW5nIHRoZSBvYmplY3QuCisgICAgLy8KKworICAgIE5ld1ZhbHVlID0gUnRsRXhjaGFuZ2VBZGRMb25nUHRyUmVsZWFzZShSZWZDb3VudCwgLShMT05HKUJpYXMpIC0gQmlhczsKKyAgICBpZiAoTmV3VmFsdWUgPiAwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIH0gZWxzZSBpZiAoTmV3VmFsdWUgPT0gMCkgeworCisgICAgICAgIC8vCisgICAgICAgIC8vIEFuIGFjcXVpcmUgZmVuY2UgaXMgcmVxdWlyZWQgYmVmb3JlIG9iamVjdCBkZXN0cnVjdGlvbiB0byBlbnN1cmUKKyAgICAgICAgLy8gdGhhdCB0aGUgZGVzdHJ1Y3RvciBjYW5ub3Qgb2JzZXJ2ZSB2YWx1ZXMgY2hhbmdpbmcgb24gb3RoZXIgdGhyZWFkcy4KKyAgICAgICAgLy8KKworICAgICAgICBSdGxCYXJyaWVyQWZ0ZXJJbnRlcmxvY2soKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgX19mYXN0ZmFpbChGQVNUX0ZBSUxfSU5WQUxJRF9SRUZFUkVOQ0VfQ09VTlQpOworICAgIHJldHVybiBGQUxTRTsKK30KKworRk9SQ0VJTkxJTkUKK0JPT0xFQU4KK1J0bERlY3JlbWVudFJlZmVyZW5jZUNvdW50Tm9uWmVybyAoCisgICAgX0lub3V0XyB2b2xhdGlsZSBSVExfUkVGRVJFTkNFX0NPVU5UICpSZWZDb3VudCwKKyAgICBfSW5fIFVMT05HIEJpYXMKKyAgICApCisKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFRoaXMgZnVuY3Rpb24gcmVkdWNlcyB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZSBjb3VudCBieSB0aGUgc3BlY2lmaWVkIGFtb3VudCwKKyAgICB1bmxlc3MgZG9pbmcgc28gd291bGQgcmVzdWx0IGluIGEgemVybyB2YWx1ZS4KKworQXJndW1lbnRzOgorCisgICAgUmVmQ291bnQgLSBTdXBwbGllcyBhIHBvaW50ZXIgdG8gYSByZWZlcmVuY2UgY291bnQuCisKKyAgICBCaWFzIC0gU3VwcGxpZXMgYSByZWZlcmVuY2UgYmlhcyBhbW91bnQuCisKK1JldHVybiBWYWx1ZToKKworICAgIFRSVUUgaWYgdGhlIHJlZmVyZW5jZSBjb3VudCB3b3VsZCBiZSB6ZXJvLCBGQUxTRSBvdGhlcndpc2UuCisKKy0tKi8KKworeworCisgICAgUlRMX1JFRkVSRU5DRV9DT1VOVCBOZXdWYWx1ZTsKKyAgICBSVExfUkVGRVJFTkNFX0NPVU5UIE9sZFZhbHVlOworCisgICAgUHJlZmV0Y2hGb3JXcml0ZShSZWZDb3VudCk7CisgICAgT2xkVmFsdWUgPSBSZWFkTG9uZ1B0ck5vRmVuY2UoUmVmQ291bnQpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgTmV3VmFsdWUgPSBPbGRWYWx1ZSAtIEJpYXM7CisgICAgICAgIGlmIChOZXdWYWx1ZSA+IDApIHsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEEgcmVsZWFzZSBmZW5jZSBpcyByZXF1aXJlZCB0byBlbnN1cmUgYWxsIGd1YXJkZWQgbWVtb3J5CisgICAgICAgICAgICAvLyBhY2Nlc3NlcyBhcmUgY29tcGxldGUgYmVmb3JlIGFueSB0aHJlYWQgY2FuIGJlZ2luIGRlc3Ryb3lpbmcKKyAgICAgICAgICAgIC8vIHRoZSBvYmplY3QuCisgICAgICAgICAgICAvLworCisgICAgICAgICAgICBOZXdWYWx1ZSA9IFJ0bENvbXBhcmVFeGNoYW5nZUxvbmdQdHJSZWxlYXNlKFJlZkNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXdWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2xkVmFsdWUpOworCisgICAgICAgICAgICBpZiAoTmV3VmFsdWUgPT0gT2xkVmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE9sZFZhbHVlID0gTmV3VmFsdWU7CisKKyAgICAgICAgfSBlbHNlIGlmIChOZXdWYWx1ZSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgX19mYXN0ZmFpbChGQVNUX0ZBSUxfSU5WQUxJRF9SRUZFUkVOQ0VfQ09VTlQpOworICAgICAgICB9CisgICAgfQorfQorCisjdW5kZWYgUnRsSW5jcmVtZW50TG9uZ1B0ck5vRmVuY2UKKyN1bmRlZiBSdGxEZWNyZW1lbnRMb25nUHRyUmVsZWFzZQorI3VuZGVmIFJ0bEV4Y2hhbmdlQWRkTG9uZ1B0ck5vRmVuY2UKKyN1bmRlZiBSdGxFeGNoYW5nZUFkZExvbmdQdHJSZWxlYXNlCisjdW5kZWYgUnRsQ29tcGFyZUV4Y2hhbmdlTG9uZ1B0ck5vRmVuY2UKKyN1bmRlZiBSdGxDb21wYXJlRXhjaGFuZ2VMb25nUHRyUmVsZWFzZQorI3VuZGVmIFJ0bEJhcnJpZXJBZnRlckludGVybG9jawpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGVfYzk5L3N0ZGJvb2wuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlX2M5OS9zdGRib29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4MTIxYwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlX2M5OS9zdGRib29sLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfU1REQk9PTF9IXworI2RlZmluZSBfU1REQk9PTF9IXworCisjaWZuZGVmIF9fY3BsdXNwbHVzCisKK3R5cGVkZWYgX0Jvb2wgYm9vbDsKKyNkZWZpbmUgZmFsc2UgMAorI2RlZmluZSB0cnVlIDEKKworI2VuZGlmIC8vIF9fY3BsdXNwbHVzCisKKyNlbmRpZiAgLy8gX1NUREJPT0xfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlX2M5OS9zdGRpbnQuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlX2M5OS9zdGRpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTJkYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGVfYzk5L3N0ZGludC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1NURElOVF9IXworI2RlZmluZSBfU1RESU5UX0hfCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgICAgICAgIGludDhfdDsKK3R5cGVkZWYgc2hvcnQgICAgICAgICAgICAgIGludDE2X3Q7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgICBpbnQzMl90OwordHlwZWRlZiBsb25nIGxvbmcgICAgICAgICAgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgIHVpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICB1aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgIHVpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7CisKKyNlbmRpZiAgLy8gX1NURElOVF9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290QXBpL2RsbG1haW4uY3BwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290QXBpL2RsbG1haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZDIzMjYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RBcGkvZGxsbWFpbi5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInByZWNvbXAuaCIKKyNpbmNsdWRlICJkbGxtYWluLnRtaCIKKworQk9PTCAKK19fc3RkY2FsbCAKK0RsbE1haW4oCisgICAgSElOU1RBTkNFIGhpbnN0RGxsLCAKKyAgICBEV09SRCBkd1JlYXNvbiwgCisgICAgTFBWT0lEIC8qIGxwdlJlc2VydmVkICovCisgICAgKQoreworICAgIHN3aXRjaCAoZHdSZWFzb24pCisgICAgeworICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgorICAgICAgICBEaXNhYmxlVGhyZWFkTGlicmFyeUNhbGxzKGhpbnN0RGxsKTsKKyAgICAgICAgV1BQX0lOSVRfVFJBQ0lORyhMIm90QXBpIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6CisgICAgICAgIFdQUF9DTEVBTlVQKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBETExfVEhSRUFEX0FUVEFDSDoKKyAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290QXBpL290QXBpLmNwcCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEFwaS9vdEFwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiZGMwZQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEFwaS9vdEFwaS5jcHAKQEAgLTAsMCArMSwzODY5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgIm90QXBpLnRtaCIKKworLy8jZGVmaW5lIERFQlVHX0FTWU5DX0lPCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKy8vIFRoZSBtYXhpbXVtIHRpbWUgd2Ugd2lsbCB3YWl0IGZvciBhbiBvdmVybGFwcGVkIHJlc3VsdC4gRXNzZW50aWFsbHksIHRoZSBtYXhpbXVtCisvLyBhbW91bnQgb2YgdGltZSBlYWNoIHN5bmNocm9ub3VzIElPQ1RMIHNob3VsZCB0YWtlLgorY29uc3QgRFdPUkQgY19NYXhPdmVybGFwcGVkV2FpdFRpbWVNUyA9IDUgKiAxMDAwOworCisvLyBWZXJzaW9uIHN0cmluZyByZXR1cm5lZCBieSB0aGUgQVBJCitjb25zdCBjaGFyIGNfVmVyc2lvbltdID0gIldpbmRvd3MiOyAvLyBUT0RPIC0gV2hhdCBzaG91bGQgd2UgcmVhbGx5IHB1dCBoZXJlPworCit0ZW1wbGF0ZTxjbGFzcyBDYWxsYmFja1Q+CitjbGFzcyBvdENhbGxiYWNrCit7CitwdWJsaWM6CisgICAgUlRMX1JFRkVSRU5DRV9DT1VOVCBDYWxsYmFja1JlZkNvdW50OworICAgIEhBTkRMRSAgICAgICAgICAgICAgQ2FsbGJhY2tDb21wbGV0ZUV2ZW50OworICAgIEdVSUQgICAgICAgICAgICAgICAgSW50ZXJmYWNlR3VpZDsKKyAgICBDYWxsYmFja1QgICAgICAgICAgIENhbGxiYWNrOworICAgIFBWT0lEICAgICAgICAgICAgICAgQ2FsbGJhY2tDb250ZXh0OworCisgICAgb3RDYWxsYmFjaygKKyAgICAgICAgQ2FsbGJhY2tUIF9DYWxsYmFjaywKKyAgICAgICAgUFZPSUQgX0NhbGxiYWNrQ29udGV4dAorICAgICAgICApIDogCisgICAgICAgIENhbGxiYWNrUmVmQ291bnQoMSksCisgICAgICAgIENhbGxiYWNrQ29tcGxldGVFdmVudChDcmVhdGVFdmVudChudWxscHRyLCBGQUxTRSwgRkFMU0UsIG51bGxwdHIpKSwKKyAgICAgICAgQ2FsbGJhY2soX0NhbGxiYWNrKSwKKyAgICAgICAgQ2FsbGJhY2tDb250ZXh0KF9DYWxsYmFja0NvbnRleHQpCisgICAgeworICAgIH0KKworICAgIG90Q2FsbGJhY2soCisgICAgICAgIGNvbnN0IEdVSUQmIF9JbnRlcmZhY2VHdWlkLAorICAgICAgICBDYWxsYmFja1QgX0NhbGxiYWNrLAorICAgICAgICBQVk9JRCBfQ2FsbGJhY2tDb250ZXh0CisgICAgICAgICkgOiAKKyAgICAgICAgQ2FsbGJhY2tSZWZDb3VudCgxKSwKKyAgICAgICAgQ2FsbGJhY2tDb21wbGV0ZUV2ZW50KENyZWF0ZUV2ZW50KG51bGxwdHIsIEZBTFNFLCBGQUxTRSwgbnVsbHB0cikpLAorICAgICAgICBJbnRlcmZhY2VHdWlkKF9JbnRlcmZhY2VHdWlkKSwKKyAgICAgICAgQ2FsbGJhY2soX0NhbGxiYWNrKSwKKyAgICAgICAgQ2FsbGJhY2tDb250ZXh0KF9DYWxsYmFja0NvbnRleHQpCisgICAgeworICAgIH0KKworICAgIH5vdENhbGxiYWNrKCkKKyAgICB7CisgICAgICAgIGlmIChDYWxsYmFja0NvbXBsZXRlRXZlbnQpIENsb3NlSGFuZGxlKENhbGxiYWNrQ29tcGxldGVFdmVudCk7CisgICAgfQorCisgICAgdm9pZCBBZGRSZWYoKQorICAgIHsKKyAgICAgICAgUnRsSW5jcmVtZW50UmVmZXJlbmNlQ291bnQoJkNhbGxiYWNrUmVmQ291bnQpOworICAgIH0KKworICAgIHZvaWQgUmVsZWFzZShib29sIHdhaXRGb3JTaHV0ZG93biA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgaWYgKFJ0bERlY3JlbWVudFJlZmVyZW5jZUNvdW50KCZDYWxsYmFja1JlZkNvdW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2V0IGNvbXBsZXRpb24gZXZlbnQgaWYgdGhlcmUgYXJlIG5vIG1vcmUgcmVmcworICAgICAgICAgICAgU2V0RXZlbnQoQ2FsbGJhY2tDb21wbGV0ZUV2ZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3YWl0Rm9yU2h1dGRvd24pCisgICAgICAgIHsKKyAgICAgICAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3QoQ2FsbGJhY2tDb21wbGV0ZUV2ZW50LCBJTkZJTklURSk7CisgICAgICAgIH0KKyAgICB9Cit9OworCit0eXBlZGVmIG90Q2FsbGJhY2s8b3REZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkQ2FsbGJhY2s+IG90QXBpRGV2aWNlQXZhaWxhYmlsaXR5Q2FsbGJhY2s7Cit0eXBlZGVmIG90Q2FsbGJhY2s8b3RIYW5kbGVBY3RpdmVTY2FuUmVzdWx0PiBvdEFwaUFjdGl2ZVNjYW5DYWxsYmFjazsKK3R5cGVkZWYgb3RDYWxsYmFjazxvdEhhbmRsZUVuZXJneVNjYW5SZXN1bHQ+IG90QXBpRW5lcmd5U2NhbkNhbGxiYWNrOwordHlwZWRlZiBvdENhbGxiYWNrPG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2s+IG90QXBpU3RhdGVDaGFuZ2VDYWxsYmFjazsKK3R5cGVkZWYgb3RDYWxsYmFjazxvdENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrPiBvdEFwaUNvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrOwordHlwZWRlZiBvdENhbGxiYWNrPG90Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrPiBvdEFwaUNvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFjazsKK3R5cGVkZWYgb3RDYWxsYmFjazxvdEpvaW5lckNhbGxiYWNrPiBvdEFwaUpvaW5lckNhbGxiYWNrOworCit0eXBlZGVmIHN0cnVjdCBvdEFwaUluc3RhbmNlCit7CisgICAgLy8gSGFuZGxlIHRvIHRoZSBkcml2ZXIKKyAgICBIQU5ETEUgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSGFuZGxlOworCisgICAgLy8gQXN5bmMgSU8gdmFyaWFibGVzCisgICAgT1ZFUkxBUFBFRCAgICAgICAgICAgICAgICAgIE92ZXJsYXBwZWQ7CisgICAgUFRQX1dBSVQgICAgICAgICAgICAgICAgICAgIFRocmVhZHBvb2xXYWl0OworCisgICAgLy8gTm90aWZpY2F0aW9uIHZhcmlhYmxlcworICAgIENSSVRJQ0FMX1NFQ1RJT04gICAgICAgICAgICBDYWxsYmFja0xvY2s7CisgICAgT1RMV0ZfTk9USUZJQ0FUSU9OICAgICAgICAgIE5vdGlmaWNhdGlvbkJ1ZmZlcjsKKworICAgIC8vIENhbGxiYWNrcworICAgIG90QXBpRGV2aWNlQXZhaWxhYmlsaXR5Q2FsbGJhY2sqICAgIERldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrczsKKyAgICB2ZWN0b3I8b3RBcGlBY3RpdmVTY2FuQ2FsbGJhY2sqPiAgICBBY3RpdmVTY2FuQ2FsbGJhY2tzOworICAgIHZlY3RvcjxvdEFwaUVuZXJneVNjYW5DYWxsYmFjayo+ICAgIEVuZXJneVNjYW5DYWxsYmFja3M7CisgICAgdmVjdG9yPG90QXBpQWN0aXZlU2NhbkNhbGxiYWNrKj4gICAgRGlzY292ZXJDYWxsYmFja3M7CisgICAgdmVjdG9yPG90QXBpU3RhdGVDaGFuZ2VDYWxsYmFjayo+ICAgU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzOworICAgIHZlY3RvcjxvdEFwaUNvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrKj4gIENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrczsKKyAgICB2ZWN0b3I8b3RBcGlDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2sqPiBDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzOworICAgIHZlY3RvcjxvdEFwaUpvaW5lckNhbGxiYWNrKj4gICAgICAgIEpvaW5lckNhbGxiYWNrczsKKworICAgIC8vIENvbnN0cnVjdG9yCisgICAgb3RBcGlJbnN0YW5jZSgpIDogCisgICAgICAgIERldmljZUhhbmRsZShJTlZBTElEX0hBTkRMRV9WQUxVRSksCisgICAgICAgIE92ZXJsYXBwZWQoezB9KSwKKyAgICAgICAgVGhyZWFkcG9vbFdhaXQobnVsbHB0ciksCisgICAgICAgIERldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrcyhudWxscHRyKQorICAgIHsgCisgICAgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJkNhbGxiYWNrTG9jayk7CisgICAgfQorCisgICAgfm90QXBpSW5zdGFuY2UoKQorICAgIHsKKyAgICAgICAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZDYWxsYmFja0xvY2spOworICAgIH0KKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBzZXQgYSBjYWxsYmFjaworICAgIHRlbXBsYXRlPGNsYXNzIENhbGxiYWNrVD4KKyAgICBib29sIAorICAgIFNldENhbGxiYWNrKAorICAgICAgICB2ZWN0b3I8b3RDYWxsYmFjazxDYWxsYmFja1Q+Kj4gJkNhbGxiYWNrcywgCisgICAgICAgIGNvbnN0IEdVSUQmIEludGVyZmFjZUd1aWQsCisgICAgICAgIENhbGxiYWNrVCBDYWxsYmFjaywKKyAgICAgICAgUFZPSUQgQ2FsbGJhY2tDb250ZXh0CisgICAgICAgICkKKyAgICB7CisgICAgICAgIGJvb2wgYWxyZWFkeUV4aXN0cyA9IGZhbHNlOworICAgICAgICBvdENhbGxiYWNrPENhbGxiYWNrVD4qIENhbGxiYWNrVG9SZWxlYXNlID0gbnVsbHB0cjsKKworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmQ2FsbGJhY2tMb2NrKTsKKworICAgICAgICBpZiAoQ2FsbGJhY2sgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKENhbGxiYWNrc1tpXS0+SW50ZXJmYWNlR3VpZCA9PSBJbnRlcmZhY2VHdWlkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbGJhY2tUb1JlbGVhc2UgPSBDYWxsYmFja3NbaV07CisgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrcy5lcmFzZShDYWxsYmFja3MuYmVnaW4oKSArIGkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IENhbGxiYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoQ2FsbGJhY2tzW2ldLT5JbnRlcmZhY2VHdWlkID09IEludGVyZmFjZUd1aWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhbHJlYWR5RXhpc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWFscmVhZHlFeGlzdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2FsbGJhY2tzLnB1c2hfYmFjayhuZXcgb3RDYWxsYmFjazxDYWxsYmFja1Q+KEludGVyZmFjZUd1aWQsIENhbGxiYWNrLCBDYWxsYmFja0NvbnRleHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZDYWxsYmFja0xvY2spOworCisgICAgICAgIGlmIChDYWxsYmFja1RvUmVsZWFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ2FsbGJhY2tUb1JlbGVhc2UtPlJlbGVhc2UodHJ1ZSk7CisgICAgICAgICAgICBkZWxldGUgQ2FsbGJhY2tUb1JlbGVhc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gIWFscmVhZHlFeGlzdHM7CisgICAgfQorCit9IG90QXBpSW5zdGFuY2U7CisKK3R5cGVkZWYgc3RydWN0IG90SW5zdGFuY2UKK3sKKyAgICBvdEFwaUluc3RhbmNlICAgKkFwaUhhbmRsZTsgICAgICAvLyBQb2ludGVyIHRvIHRoZSBBcGkgaGFuZGxlCisgICAgTkVUX0lGSU5ERVggICAgICBJbnRlcmZhY2VJbmRleDsgLy8gSW50ZXJmYWNlIEluZGV4CisgICAgTkVUX0xVSUQgICAgICAgICBJbnRlcmZhY2VMdWlkOyAgLy8gSW50ZXJmYWNlIEx1aWQKKyAgICBHVUlEICAgICAgICAgICAgIEludGVyZmFjZUd1aWQ7ICAvLyBJbnRlcmZhY2UgZ3VpZAorICAgIFVMT05HICAgICAgICAgICAgQ29tcGFydG1lbnRJRDsgIC8vIEludGVyZmFjZSBDb21wYXJ0bWVudCBJRAorCit9IG90SW5zdGFuY2U7CisKKy8vIG90cG9vbCB3YWl0IGNhbGxiYWNrIGZvciBhc3luYyBJTyBjb21wbGV0aW9uCitWT0lEIENBTExCQUNLIAorb3RJb0NvbXBsZXRlKAorICAgIF9Jbm91dF8gICAgIFBUUF9DQUxMQkFDS19JTlNUQU5DRSBJbnN0YW5jZSwKKyAgICBfSW5vdXRfb3B0XyBQVk9JRCAgICAgICAgICAgICAgICAgQ29udGV4dCwKKyAgICBfSW5vdXRfICAgICBQVFBfV0FJVCAgICAgICAgICAgICAgV2FpdCwKKyAgICBfSW5fICAgICAgICBUUF9XQUlUX1JFU1VMVCAgICAgICAgV2FpdFJlc3VsdAorICAgICk7CisKK09UQVBJIAorb3RBcGlJbnN0YW5jZSAqCitPVENBTEwKK290QXBpSW5pdCgKKyAgICApCit7CisgICAgRFdPUkQgZHdFcnJvciA9IEVSUk9SX1NVQ0NFU1M7CisgICAgb3RBcGlJbnN0YW5jZSAqYUFwaXRJbnN0YW5jZSA9IG51bGxwdHI7CisgICAgCisgICAgTG9nRnVuY0VudHJ5KEFQSV9ERUZBVUxUKTsKKworICAgIGFBcGl0SW5zdGFuY2UgPSBuZXcoc3RkOjpub3Rocm93KW90QXBpSW5zdGFuY2UoKTsKKyAgICBpZiAoYUFwaXRJbnN0YW5jZSA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgZHdFcnJvciA9IEdldExhc3RFcnJvcigpOworICAgICAgICBMb2dXYXJuaW5nKEFQSV9ERUZBVUxULCAiRmFpbGVkIHRvIGFsbG9jYXRlIG90QXBpSW5zdGFuY2UiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBPcGVuIHRoZSBwaXBlIHRvIHRoZSBPcGVuVGhyZWFkIGRyaXZlcgorICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSA9IAorICAgICAgICBDcmVhdGVGaWxlKAorICAgICAgICAgICAgT1RMV0ZfSU9DTFRfUEFUSCwKKyAgICAgICAgICAgIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgbnVsbHB0ciwgICAgICAgICAgICAgICAgLy8gbm8gU0VDVVJJVFlfQVRUUklCVVRFUyBzdHJ1Y3R1cmUKKyAgICAgICAgICAgIE9QRU5fRVhJU1RJTkcsICAgICAgICAgIC8vIE5vIHNwZWNpYWwgY3JlYXRlIGZsYWdzCisgICAgICAgICAgICBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCwgICAvLyBBbGxvdyBhc3luY2hyb25vdXMgcmVxdWVzdHMKKyAgICAgICAgICAgIG51bGxwdHIKKyAgICAgICAgICAgICk7CisgICAgaWYgKGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICB7CisgICAgICAgIGR3RXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJDcmVhdGVGaWxlIGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgZXZlbnQgZm9yIGNvbXBsZXRpb24gb2YgYXN5bmMgSU8KKyAgICBhQXBpdEluc3RhbmNlLT5PdmVybGFwcGVkLmhFdmVudCA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIEZBTFNFLCBGQUxTRSwgbnVsbHB0cik7CisgICAgaWYgKGFBcGl0SW5zdGFuY2UtPk92ZXJsYXBwZWQuaEV2ZW50ID09IG51bGxwdHIpCisgICAgeworICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiQ3JlYXRlRXZlbnQgKE92ZXJsYXBwZWQuaEV2ZW50KSBmYWlsZWQsICUhV0lORVJST1IhIiwgZHdFcnJvcik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIHRoZSBvdHBvb2wgd2FpdAorICAgIGFBcGl0SW5zdGFuY2UtPlRocmVhZHBvb2xXYWl0ID0gCisgICAgICAgIENyZWF0ZVRocmVhZHBvb2xXYWl0KAorICAgICAgICAgICAgb3RJb0NvbXBsZXRlLAorICAgICAgICAgICAgYUFwaXRJbnN0YW5jZSwKKyAgICAgICAgICAgIG51bGxwdHIKKyAgICAgICAgICAgICk7CisgICAgaWYgKGFBcGl0SW5zdGFuY2UtPlRocmVhZHBvb2xXYWl0ID09IG51bGxwdHIpCisgICAgeworICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiQ3JlYXRlVGhyZWFkcG9vbFdhaXQgZmFpbGVkLCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8vIFN0YXJ0IHRoZSBvdHBvb2wgd2FpdGluZyBvbiB0aGUgb3ZlcmxhcHBlZCBldmVudAorICAgIFNldFRocmVhZHBvb2xXYWl0KGFBcGl0SW5zdGFuY2UtPlRocmVhZHBvb2xXYWl0LCBhQXBpdEluc3RhbmNlLT5PdmVybGFwcGVkLmhFdmVudCwgbnVsbHB0cik7CisKKyNpZmRlZiBERUJVR19BU1lOQ19JTworICAgIExvZ1ZlcmJvc2UoQVBJX0RFRkFVTFQsICJRdWVyeWluZyBmb3IgMXN0IG5vdGlmaWNhdGlvbiIpOworI2VuZGlmCisKKyAgICAvLyBSZXF1ZXN0IGZpcnN0IG5vdGlmaWNhdGlvbiBhc3luY2hyb25vdXNseQorICAgIGlmICghRGV2aWNlSW9Db250cm9sKAorICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+RGV2aWNlSGFuZGxlLAorICAgICAgICAgICAgSU9DVExfT1RMV0ZfUVVFUllfTk9USUZJQ0FUSU9OLAorICAgICAgICAgICAgbnVsbHB0ciwgMCwKKyAgICAgICAgICAgICZhQXBpdEluc3RhbmNlLT5Ob3RpZmljYXRpb25CdWZmZXIsIHNpemVvZihPVExXRl9OT1RJRklDQVRJT04pLAorICAgICAgICAgICAgbnVsbHB0ciwgCisgICAgICAgICAgICAmYUFwaXRJbnN0YW5jZS0+T3ZlcmxhcHBlZCkpCisgICAgeworICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIGlmIChkd0Vycm9yICE9IEVSUk9SX0lPX1BFTkRJTkcpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiRGV2aWNlSW9Db250cm9sIGZvciBmaXJzdCBub3RpZmljYXRpb24gZmFpbGVkLCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBkd0Vycm9yID0gRVJST1JfU1VDQ0VTUzsKKyAgICB9CisKK2Vycm9yOgorCisgICAgaWYgKGR3RXJyb3IgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIG90QXBpRmluYWxpemUoYUFwaXRJbnN0YW5jZSk7CisgICAgICAgIGFBcGl0SW5zdGFuY2UgPSBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBMb2dGdW5jRXhpdChBUElfREVGQVVMVCk7CisKKyAgICByZXR1cm4gYUFwaXRJbnN0YW5jZTsKK30KKworT1RBUEkgCit2b2lkIAorT1RDQUxMCitvdEFwaUZpbmFsaXplKAorICAgIF9Jbl8gb3RBcGlJbnN0YW5jZSAqYUFwaXRJbnN0YW5jZQorKQoreworICAgIGlmIChhQXBpdEluc3RhbmNlID09IG51bGxwdHIpIHJldHVybjsKKyAgICAKKyAgICBMb2dGdW5jRW50cnkoQVBJX0RFRkFVTFQpOworCisgICAgLy8gSWYgd2UgbmV2ZXIgZ290IHRoZSBoYW5kbGUsIG5vdGhpbmcgbGVmdCB0byBjbGVhbiB1cAorICAgIGlmIChhQXBpdEluc3RhbmNlLT5EZXZpY2VIYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgdW5yZWdpc3RlciBjYWxsYmFja3MKKyAgICAgICAgLy8KKworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKworICAgICAgICBvdEFwaURldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrKiBEZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3MgPSBhQXBpdEluc3RhbmNlLT5EZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3M7CisgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrcyA9IG51bGxwdHI7CisKKyAgICAgICAgdmVjdG9yPG90QXBpQWN0aXZlU2NhbkNhbGxiYWNrKj4gQWN0aXZlU2NhbkNhbGxiYWNrcyhhQXBpdEluc3RhbmNlLT5BY3RpdmVTY2FuQ2FsbGJhY2tzKTsKKyAgICAgICAgYUFwaXRJbnN0YW5jZS0+QWN0aXZlU2NhbkNhbGxiYWNrcy5jbGVhcigpOworCisgICAgICAgIHZlY3RvcjxvdEFwaUVuZXJneVNjYW5DYWxsYmFjayo+IEVuZXJneVNjYW5DYWxsYmFja3MoYUFwaXRJbnN0YW5jZS0+RW5lcmd5U2NhbkNhbGxiYWNrcyk7CisgICAgICAgIGFBcGl0SW5zdGFuY2UtPkVuZXJneVNjYW5DYWxsYmFja3MuY2xlYXIoKTsKKworICAgICAgICB2ZWN0b3I8b3RBcGlBY3RpdmVTY2FuQ2FsbGJhY2sqPiBEaXNjb3ZlckNhbGxiYWNrcyhhQXBpdEluc3RhbmNlLT5EaXNjb3ZlckNhbGxiYWNrcyk7CisgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRpc2NvdmVyQ2FsbGJhY2tzLmNsZWFyKCk7CisKKyAgICAgICAgdmVjdG9yPG90QXBpU3RhdGVDaGFuZ2VDYWxsYmFjayo+IFN0YXRlQ2hhbmdlZENhbGxiYWNrcyhhQXBpdEluc3RhbmNlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3MpOworICAgICAgICBhQXBpdEluc3RhbmNlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3MuY2xlYXIoKTsKKworICAgICAgICB2ZWN0b3I8b3RBcGlDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjayo+IENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrcyhhQXBpdEluc3RhbmNlLT5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3MpOworICAgICAgICBhQXBpdEluc3RhbmNlLT5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3MuY2xlYXIoKTsKKworICAgICAgICB2ZWN0b3I8b3RBcGlDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2sqPiBDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzKGFBcGl0SW5zdGFuY2UtPkNvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFja3MpOworICAgICAgICBhQXBpdEluc3RhbmNlLT5Db21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzLmNsZWFyKCk7CisKKyAgICAgICAgdmVjdG9yPG90QXBpSm9pbmVyQ2FsbGJhY2sqPiBKb2luZXJDYWxsYmFja3MoYUFwaXRJbnN0YW5jZS0+Sm9pbmVyQ2FsbGJhY2tzKTsKKyAgICAgICAgYUFwaXRJbnN0YW5jZS0+Sm9pbmVyQ2FsbGJhY2tzLmNsZWFyKCk7CisKKyAgICAgICAgI2lmZGVmIERFQlVHX0FTWU5DX0lPCisgICAgICAgIExvZ1ZlcmJvc2UoQVBJX0RFRkFVTFQsICJDbGVhcmluZyBUaHJlYWRwb29sIFdhaXQiKTsKKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgLy8gQ2xlYXIgdGhlIHRocmVhZHBvb2wgd2FpdCB0byBwcmV2ZW50IGZ1cnRoZXIgd2FpdHMgZnJvbSBiZWluZyBzY2hlZHVsZWQKKyAgICAgICAgUFRQX1dBSVQgdHBXYWl0ID0gYUFwaXRJbnN0YW5jZS0+VGhyZWFkcG9vbFdhaXQ7CisgICAgICAgIGFBcGl0SW5zdGFuY2UtPlRocmVhZHBvb2xXYWl0ID0gbnVsbHB0cjsKKworICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKworICAgICAgICAvLyBDbGVhciBhbGwgY2FsbGJhY2tzCisgICAgICAgIGlmIChEZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIERldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrcy0+UmVsZWFzZSh0cnVlKTsKKyAgICAgICAgICAgIGRlbGV0ZSBEZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3M7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBY3RpdmVTY2FuQ2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBBY3RpdmVTY2FuQ2FsbGJhY2tzW2ldLT5SZWxlYXNlKHRydWUpOworICAgICAgICAgICAgZGVsZXRlIEFjdGl2ZVNjYW5DYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBFbmVyZ3lTY2FuQ2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBFbmVyZ3lTY2FuQ2FsbGJhY2tzW2ldLT5SZWxlYXNlKHRydWUpOworICAgICAgICAgICAgZGVsZXRlIEVuZXJneVNjYW5DYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBEaXNjb3ZlckNhbGxiYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgRGlzY292ZXJDYWxsYmFja3NbaV0tPlJlbGVhc2UodHJ1ZSk7CisgICAgICAgICAgICBkZWxldGUgRGlzY292ZXJDYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBTdGF0ZUNoYW5nZWRDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0YXRlQ2hhbmdlZENhbGxiYWNrc1tpXS0+UmVsZWFzZSh0cnVlKTsKKyAgICAgICAgICAgIGRlbGV0ZSBTdGF0ZUNoYW5nZWRDYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrc1tpXS0+UmVsZWFzZSh0cnVlKTsKKyAgICAgICAgICAgIGRlbGV0ZSBDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzW2ldLT5SZWxlYXNlKHRydWUpOworICAgICAgICAgICAgZGVsZXRlIENvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBKb2luZXJDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEpvaW5lckNhbGxiYWNrc1tpXS0+UmVsZWFzZSh0cnVlKTsKKyAgICAgICAgICAgIGRlbGV0ZSBKb2luZXJDYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENsZWFuIHVwIHRocmVhZHBvb2wgd2FpdAorICAgICAgICBpZiAodHBXYWl0KQorICAgICAgICB7CisgICAgICAgICAgICAjaWZkZWYgREVCVUdfQVNZTkNfSU8KKyAgICAgICAgICAgIExvZ1ZlcmJvc2UoQVBJX0RFRkFVTFQsICJXYWl0aW5nIGZvciBvdXRzdGFuZGluZyB0aHJlYWRwb29sIGNhbGxiYWNrcyB0byBjb21wZWx0ZSIpOworICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgIC8vIENhbmNlbCBhbnkgcXVldWVkIHdhaXRzIGFuZCB3YWl0IGZvciBhbnkgb3V0c3RhbmRpbmcgY2FsbHMgdG8gY29tcGVsdGUKKyAgICAgICAgICAgIFdhaXRGb3JUaHJlYWRwb29sV2FpdENhbGxiYWNrcyh0cFdhaXQsIFRSVUUpOworICAgICAgICAKKyAgICAgICAgICAgICNpZmRlZiBERUJVR19BU1lOQ19JTworICAgICAgICAgICAgTG9nVmVyYm9zZShBUElfREVGQVVMVCwgIkNhbmNlbGxpbmcgYW55IHBlbmRpbmcgSU8iKTsKKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICAvLyBDYW5jZWwgYW55IGFzeW5jIElPCisgICAgICAgICAgICBDYW5jZWxJb0V4KGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSwgJmFBcGl0SW5zdGFuY2UtPk92ZXJsYXBwZWQpOworCisgICAgICAgICAgICAvLyBGcmVlIHRoZSB0aHJlYWRwb29sIHdhaXQKKyAgICAgICAgICAgIENsb3NlVGhyZWFkcG9vbFdhaXQodHBXYWl0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENsZWFuIHVwIG92ZXJsYXBwZWQgZXZlbnQKKyAgICAgICAgaWYgKGFBcGl0SW5zdGFuY2UtPk92ZXJsYXBwZWQuaEV2ZW50KQorICAgICAgICB7CisgICAgICAgICAgICBDbG9zZUhhbmRsZShhQXBpdEluc3RhbmNlLT5PdmVybGFwcGVkLmhFdmVudCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gQ2xvc2UgdGhlIGRldmljZSBoYW5kbGUKKyAgICAgICAgQ2xvc2VIYW5kbGUoYUFwaXRJbnN0YW5jZS0+RGV2aWNlSGFuZGxlKTsKKyAgICB9CisKKyAgICBkZWxldGUgYUFwaXRJbnN0YW5jZTsKKyAgICAKKyAgICBMb2dGdW5jRXhpdChBUElfREVGQVVMVCk7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RGcmVlTWVtb3J5KAorICAgIF9Jbl8gY29uc3Qgdm9pZCAqbWVtCisgICAgKQoreworICAgIGZyZWUoKHZvaWQqKW1lbSk7Cit9CisKKy8vIEhhbmRsZXMgY2xlYW5seSBpbnZva2luZyB0aGUgcmVnaXN0ZXIgY2FsbGJhY2sKK1ZPSUQKK1Byb2Nlc3NOb3RpZmljYXRpb24oCisgICAgX0luXyBvdEFwaUluc3RhbmNlICAgICAgICAgKmFBcGl0SW5zdGFuY2UsCisgICAgX0luXyBQT1RMV0ZfTk9USUZJQ0FUSU9OICAgIE5vdGlmCisgICAgKQoreworICAgIGlmIChOb3RpZi0+Tm90aWZUeXBlID09IE9UTFdGX05PVElGX0RFVklDRV9BVkFJTEFCSUxJVFkpCisgICAgeworICAgICAgICBvdENhbGxiYWNrPG90RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrPiogQ2FsbGJhY2sgPSBudWxscHRyOworICAgICAgICAKKyAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisKKyAgICAgICAgaWYgKGFBcGl0SW5zdGFuY2UtPkRldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrcyAhPSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5EZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3MtPkFkZFJlZigpOworICAgICAgICAgICAgQ2FsbGJhY2sgPSBhQXBpdEluc3RhbmNlLT5EZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3M7CisgICAgICAgIH0KKworICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKworICAgICAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrIG91dHNpZGUgdGhlIGxvY2sgYW5kIHJlbGVhc2UgcmVmIHdoZW4gZG9uZQorICAgICAgICBpZiAoQ2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFjaygKKyAgICAgICAgICAgICAgICBOb3RpZi0+RGV2aWNlQXZhaWxhYmlsaXR5UGF5bG9hZC5BdmFpbGFibGUgIT0gRkFMU0UsIAorICAgICAgICAgICAgICAgICZOb3RpZi0+SW50ZXJmYWNlR3VpZCwgCisgICAgICAgICAgICAgICAgQ2FsbGJhY2stPkNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAgICAgICAgIENhbGxiYWNrLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoTm90aWYtPk5vdGlmVHlwZSA9PSBPVExXRl9OT1RJRl9TVEFURV9DSEFOR0UpCisgICAgeworICAgICAgICBvdENhbGxiYWNrPG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2s+KiBDYWxsYmFjayA9IG51bGxwdHI7CisKKyAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhQXBpdEluc3RhbmNlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhQXBpdEluc3RhbmNlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3NbaV0tPkludGVyZmFjZUd1aWQgPT0gTm90aWYtPkludGVyZmFjZUd1aWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzW2ldLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBDYWxsYmFjayA9IGFBcGl0SW5zdGFuY2UtPlN0YXRlQ2hhbmdlZENhbGxiYWNrc1tpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworICAgICAgICAKKyAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBvdXRzaWRlIHRoZSBsb2NrIGFuZCByZWxlYXNlIHJlZiB3aGVuIGRvbmUKKyAgICAgICAgaWYgKENhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBDYWxsYmFjay0+Q2FsbGJhY2soCisgICAgICAgICAgICAgICAgTm90aWYtPlN0YXRlQ2hhbmdlUGF5bG9hZC5GbGFncywgCisgICAgICAgICAgICAgICAgQ2FsbGJhY2stPkNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAgICAgICAgIENhbGxiYWNrLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoTm90aWYtPk5vdGlmVHlwZSA9PSBPVExXRl9OT1RJRl9ESVNDT1ZFUikKKyAgICB7CisgICAgICAgIG90Q2FsbGJhY2s8b3RIYW5kbGVBY3RpdmVTY2FuUmVzdWx0PiogQ2FsbGJhY2sgPSBudWxscHRyOworCisgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYUFwaXRJbnN0YW5jZS0+RGlzY292ZXJDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhQXBpdEluc3RhbmNlLT5EaXNjb3ZlckNhbGxiYWNrc1tpXS0+SW50ZXJmYWNlR3VpZCA9PSBOb3RpZi0+SW50ZXJmYWNlR3VpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5EaXNjb3ZlckNhbGxiYWNrc1tpXS0+QWRkUmVmKCk7CisgICAgICAgICAgICAgICAgQ2FsbGJhY2sgPSBhQXBpdEluc3RhbmNlLT5EaXNjb3ZlckNhbGxiYWNrc1tpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworICAgICAgICAKKyAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBvdXRzaWRlIHRoZSBsb2NrIGFuZCByZWxlYXNlIHJlZiB3aGVuIGRvbmUKKyAgICAgICAgaWYgKENhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBDYWxsYmFjay0+Q2FsbGJhY2soCisgICAgICAgICAgICAgICAgTm90aWYtPkRpc2NvdmVyUGF5bG9hZC5WYWxpZCA/ICZOb3RpZi0+RGlzY292ZXJQYXlsb2FkLlJlc3VsdHMgOiBudWxscHRyLCAKKyAgICAgICAgICAgICAgICBDYWxsYmFjay0+Q2FsbGJhY2tDb250ZXh0KTsKKworICAgICAgICAgICAgQ2FsbGJhY2stPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChOb3RpZi0+Tm90aWZUeXBlID09IE9UTFdGX05PVElGX0FDVElWRV9TQ0FOKQorICAgIHsKKyAgICAgICAgb3RDYWxsYmFjazxvdEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQ+KiBDYWxsYmFjayA9IG51bGxwdHI7CisKKyAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhQXBpdEluc3RhbmNlLT5BY3RpdmVTY2FuQ2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYUFwaXRJbnN0YW5jZS0+QWN0aXZlU2NhbkNhbGxiYWNrc1tpXS0+SW50ZXJmYWNlR3VpZCA9PSBOb3RpZi0+SW50ZXJmYWNlR3VpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5BY3RpdmVTY2FuQ2FsbGJhY2tzW2ldLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBDYWxsYmFjayA9IGFBcGl0SW5zdGFuY2UtPkFjdGl2ZVNjYW5DYWxsYmFja3NbaV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKyAgICAgICAgCisgICAgICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2sgb3V0c2lkZSB0aGUgbG9jayBhbmQgcmVsZWFzZSByZWYgd2hlbiBkb25lCisgICAgICAgIGlmIChDYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgQ2FsbGJhY2stPkNhbGxiYWNrKAorICAgICAgICAgICAgICAgIE5vdGlmLT5BY3RpdmVTY2FuUGF5bG9hZC5WYWxpZCA/ICZOb3RpZi0+QWN0aXZlU2NhblBheWxvYWQuUmVzdWx0cyA6IG51bGxwdHIsIAorICAgICAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFja0NvbnRleHQpOworCisgICAgICAgICAgICBDYWxsYmFjay0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKE5vdGlmLT5Ob3RpZlR5cGUgPT0gT1RMV0ZfTk9USUZfRU5FUkdZX1NDQU4pCisgICAgeworICAgICAgICBvdENhbGxiYWNrPG90SGFuZGxlRW5lcmd5U2NhblJlc3VsdD4qIENhbGxiYWNrID0gbnVsbHB0cjsKKworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFBcGl0SW5zdGFuY2UtPkVuZXJneVNjYW5DYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhQXBpdEluc3RhbmNlLT5FbmVyZ3lTY2FuQ2FsbGJhY2tzW2ldLT5JbnRlcmZhY2VHdWlkID09IE5vdGlmLT5JbnRlcmZhY2VHdWlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkVuZXJneVNjYW5DYWxsYmFja3NbaV0tPkFkZFJlZigpOworICAgICAgICAgICAgICAgIENhbGxiYWNrID0gYUFwaXRJbnN0YW5jZS0+RW5lcmd5U2NhbkNhbGxiYWNrc1tpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworICAgICAgICAKKyAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBvdXRzaWRlIHRoZSBsb2NrIGFuZCByZWxlYXNlIHJlZiB3aGVuIGRvbmUKKyAgICAgICAgaWYgKENhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBDYWxsYmFjay0+Q2FsbGJhY2soCisgICAgICAgICAgICAgICAgTm90aWYtPkVuZXJneVNjYW5QYXlsb2FkLlZhbGlkID8gJk5vdGlmLT5FbmVyZ3lTY2FuUGF5bG9hZC5SZXN1bHRzIDogbnVsbHB0ciwgCisgICAgICAgICAgICAgICAgQ2FsbGJhY2stPkNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAgICAgICAgIENhbGxiYWNrLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoTm90aWYtPk5vdGlmVHlwZSA9PSBPVExXRl9OT1RJRl9DT01NSVNTSU9ORVJfRU5FUkdZX1JFUE9SVCkKKyAgICB7CisgICAgICAgIG90Q2FsbGJhY2s8b3RDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjaz4qIENhbGxiYWNrID0gbnVsbHB0cjsKKworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFBcGl0SW5zdGFuY2UtPkNvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFBcGl0SW5zdGFuY2UtPkNvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrc1tpXS0+SW50ZXJmYWNlR3VpZCA9PSBOb3RpZi0+SW50ZXJmYWNlR3VpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3NbaV0tPkFkZFJlZigpOworICAgICAgICAgICAgICAgIENhbGxiYWNrID0gYUFwaXRJbnN0YW5jZS0+Q29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0Q2FsbGJhY2tzW2ldOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrIG91dHNpZGUgdGhlIGxvY2sgYW5kIHJlbGVhc2UgcmVmIHdoZW4gZG9uZQorICAgICAgICBpZiAoQ2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFjaygKKyAgICAgICAgICAgICAgICBOb3RpZi0+Q29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0UGF5bG9hZC5DaGFubmVsTWFzaywKKyAgICAgICAgICAgICAgICBOb3RpZi0+Q29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0UGF5bG9hZC5FbmVyZ3lMaXN0LAorICAgICAgICAgICAgICAgIE5vdGlmLT5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRQYXlsb2FkLkVuZXJneUxpc3RMZW5ndGgsCisgICAgICAgICAgICAgICAgQ2FsbGJhY2stPkNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAgICAgICAgIENhbGxiYWNrLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoTm90aWYtPk5vdGlmVHlwZSA9PSBPVExXRl9OT1RJRl9DT01NSVNTSU9ORVJfUEFOSURfUVVFUlkpCisgICAgeworICAgICAgICBvdENhbGxiYWNrPG90Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrPiogQ2FsbGJhY2sgPSBudWxscHRyOworCisgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYUFwaXRJbnN0YW5jZS0+Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFBcGl0SW5zdGFuY2UtPkNvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFja3NbaV0tPkludGVyZmFjZUd1aWQgPT0gTm90aWYtPkludGVyZmFjZUd1aWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrc1tpXS0+QWRkUmVmKCk7CisgICAgICAgICAgICAgICAgQ2FsbGJhY2sgPSBhQXBpdEluc3RhbmNlLT5Db21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzW2ldOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrIG91dHNpZGUgdGhlIGxvY2sgYW5kIHJlbGVhc2UgcmVmIHdoZW4gZG9uZQorICAgICAgICBpZiAoQ2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFjaygKKyAgICAgICAgICAgICAgICBOb3RpZi0+Q29tbWlzc2lvbmVyUGFuSWRRdWVyeVBheWxvYWQuUGFuSWQsCisgICAgICAgICAgICAgICAgTm90aWYtPkNvbW1pc3Npb25lclBhbklkUXVlcnlQYXlsb2FkLkNoYW5uZWxNYXNrLAorICAgICAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFja0NvbnRleHQpOworCisgICAgICAgICAgICBDYWxsYmFjay0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKE5vdGlmLT5Ob3RpZlR5cGUgPT0gT1RMV0ZfTk9USUZfSk9JTkVSX0NPTVBMRVRFKQorICAgIHsKKyAgICAgICAgb3RDYWxsYmFjazxvdEpvaW5lckNhbGxiYWNrPiogQ2FsbGJhY2sgPSBudWxscHRyOworCisgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYUFwaXRJbnN0YW5jZS0+Sm9pbmVyQ2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYUFwaXRJbnN0YW5jZS0+Sm9pbmVyQ2FsbGJhY2tzW2ldLT5JbnRlcmZhY2VHdWlkID09IE5vdGlmLT5JbnRlcmZhY2VHdWlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkpvaW5lckNhbGxiYWNrc1tpXS0+QWRkUmVmKCk7CisgICAgICAgICAgICAgICAgQ2FsbGJhY2sgPSBhQXBpdEluc3RhbmNlLT5Kb2luZXJDYWxsYmFja3NbaV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKyAgICAgICAgCisgICAgICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2sgb3V0c2lkZSB0aGUgbG9jayBhbmQgcmVsZWFzZSByZWYgd2hlbiBkb25lCisgICAgICAgIGlmIChDYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+U2V0Q2FsbGJhY2soCisgICAgICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+Sm9pbmVyQ2FsbGJhY2tzLAorICAgICAgICAgICAgICAgIE5vdGlmLT5JbnRlcmZhY2VHdWlkLCAob3RKb2luZXJDYWxsYmFjayludWxscHRyLCAoUFZPSUQpbnVsbHB0cgorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFjaygKKyAgICAgICAgICAgICAgICBOb3RpZi0+Sm9pbmVyQ29tcGxldGVQYXlsb2FkLkVycm9yLAorICAgICAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFja0NvbnRleHQpOworCisgICAgICAgICAgICBDYWxsYmFjay0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFVuZXhwZWN0ZWQgbm90aWYgdHlwZQorICAgIH0KK30KKworLy8gVGhyZWFkcG9vbCB3YWl0IGNhbGxiYWNrIGZvciBhc3luYyBJTyBjb21wbGV0aW9uCitWT0lEIENBTExCQUNLIAorb3RJb0NvbXBsZXRlKAorICAgIF9Jbm91dF8gICAgIFBUUF9DQUxMQkFDS19JTlNUQU5DRSAvKiBJbnN0YW5jZSAqLywKKyAgICBfSW5vdXRfb3B0XyBQVk9JRCAgICAgICAgICAgICAgICAgQ29udGV4dCwKKyAgICBfSW5vdXRfICAgICBQVFBfV0FJVCAgICAgICAgICAgICAgLyogV2FpdCAqLywKKyAgICBfSW5fICAgICAgICBUUF9XQUlUX1JFU1VMVCAgICAgICAgLyogV2FpdFJlc3VsdCAqLworICAgICkKK3sKKyNpZmRlZiBERUJVR19BU1lOQ19JTworICAgIExvZ0Z1bmNFbnRyeShBUElfREVGQVVMVCk7CisjZW5kaWYKKworICAgIG90QXBpSW5zdGFuY2UgKmFBcGl0SW5zdGFuY2UgPSAob3RBcGlJbnN0YW5jZSopQ29udGV4dDsKKyAgICBpZiAoYUFwaXRJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm47CisKKyAgICAvLyBHZXQgdGhlIHJlc3VsdCBvZiB0aGUgSU8gb3BlcmF0aW9uCisgICAgRFdPUkQgZHdCeXRlc1RyYW5zZmVycmVkID0gMDsKKyAgICBpZiAoIUdldE92ZXJsYXBwZWRSZXN1bHQoCisgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5EZXZpY2VIYW5kbGUsCisgICAgICAgICAgICAmYUFwaXRJbnN0YW5jZS0+T3ZlcmxhcHBlZCwKKyAgICAgICAgICAgICZkd0J5dGVzVHJhbnNmZXJyZWQsCisgICAgICAgICAgICBGQUxTRSkpCisgICAgeworICAgICAgICBEV09SRCBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiR2V0T3ZlcmxhcHBlZFJlc3VsdCBmb3Igbm90aWZpY2F0aW9uIGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShBUElfREVGQVVMVCwgIlJlY2VpdmVkIHN1Y2Nlc3NmdWwgY2FsbGJhY2sgZm9yIG5vdGlmaWNhdGlvbiwgdHlwZT0lZCIsIAorICAgICAgICAgICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+Tm90aWZpY2F0aW9uQnVmZmVyLk5vdGlmVHlwZSk7CisKKyAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBpZiBzZXQKKyAgICAgICAgUHJvY2Vzc05vdGlmaWNhdGlvbihhQXBpdEluc3RhbmNlLCAmYUFwaXRJbnN0YW5jZS0+Tm90aWZpY2F0aW9uQnVmZmVyKTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBUcnkgdG8gZ2V0IHRoZSB0aHJlYWRwb29sIHdhaXQgdG8gc2VlIGlmIHdlIGFyZSBhbGxvd2VkIHRvIGNvbnRpbnVlIHByb2Nlc3Npbmcgbm90aWZpY2F0aW9ucworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKyAgICAgICAgUFRQX1dBSVQgdHBXYWl0ID0gYUFwaXRJbnN0YW5jZS0+VGhyZWFkcG9vbFdhaXQ7CisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworCisgICAgICAgIGlmICh0cFdhaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHdhaXRpbmcgZm9yIG5leHQgbm90aWZpY2F0aW9uCisgICAgICAgICAgICBTZXRUaHJlYWRwb29sV2FpdCh0cFdhaXQsIGFBcGl0SW5zdGFuY2UtPk92ZXJsYXBwZWQuaEV2ZW50LCBudWxscHRyKTsKKyAgICAgICAgICAgIAorI2lmZGVmIERFQlVHX0FTWU5DX0lPCisgICAgICAgICAgICBMb2dWZXJib3NlKEFQSV9ERUZBVUxULCAiUXVlcnlpbmcgZm9yIG5leHQgbm90aWZpY2F0aW9uIik7CisjZW5kaWYKKworICAgICAgICAgICAgLy8gUmVxdWVzdCBuZXh0IG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgaWYgKCFEZXZpY2VJb0NvbnRyb2woCisgICAgICAgICAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgSU9DVExfT1RMV0ZfUVVFUllfTk9USUZJQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICBudWxscHRyLCAwLAorICAgICAgICAgICAgICAgICAgICAmYUFwaXRJbnN0YW5jZS0+Tm90aWZpY2F0aW9uQnVmZmVyLCBzaXplb2YoT1RMV0ZfTk9USUZJQ0FUSU9OKSwKKyAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgCisgICAgICAgICAgICAgICAgICAgICZhQXBpdEluc3RhbmNlLT5PdmVybGFwcGVkKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEV09SRCBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAgICAgaWYgKGR3RXJyb3IgIT0gRVJST1JfSU9fUEVORElORykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiRGV2aWNlSW9Db250cm9sIGZvciBuZXcgbm90aWZpY2F0aW9uIGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisjaWZkZWYgREVCVUdfQVNZTkNfSU8KKyAgICBMb2dGdW5jRXhpdChBUElfREVGQVVMVCk7CisjZW5kaWYKK30KKworRFdPUkQKK1NlbmRJT0NUTCgKKyAgICBfSW5fIG90QXBpSW5zdGFuY2UgKmFBcGl0SW5zdGFuY2UsCisgICAgX0luXyBEV09SRCBkd0lvQ29udHJvbENvZGUsCisgICAgX0luX3JlYWRzX2J5dGVzX29wdF8obkluQnVmZmVyU2l6ZSkgTFBWT0lEIGxwSW5CdWZmZXIsCisgICAgX0luXyBEV09SRCBuSW5CdWZmZXJTaXplLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzX29wdF8obk91dEJ1ZmZlclNpemUpIExQVk9JRCBscE91dEJ1ZmZlciwKKyAgICBfSW5fIERXT1JEIG5PdXRCdWZmZXJTaXplCisgICAgKQoreworICAgIERXT1JEIGR3RXJyb3IgPSBFUlJPUl9TVUNDRVNTOworICAgIE9WRVJMQVBQRUQgT3ZlcmxhcHBlZCA9IHsgMCB9OworICAgIERXT1JEIGR3Qnl0ZXNSZXR1cm5lZCA9IDA7CisgICAgCisgICAgT3ZlcmxhcHBlZC5oRXZlbnQgPSBDcmVhdGVFdmVudChudWxscHRyLCBGQUxTRSwgRkFMU0UsIG51bGxwdHIpOworICAgIGlmIChPdmVybGFwcGVkLmhFdmVudCA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgZHdFcnJvciA9IEdldExhc3RFcnJvcigpOworICAgICAgICBMb2dFcnJvcihBUElfREVGQVVMVCwgIkNyZWF0ZUV2ZW50IChPdmVybGFwcGVkLmhFdmVudCkgZmFpbGVkLCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICAKKyAgICAvLyBTZW5kIHRoZSBJT0NUTCB0aGUgT3BlblRocmVhZCBkcml2ZXIKKyAgICBpZiAoIURldmljZUlvQ29udHJvbCgKKyAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSwKKyAgICAgICAgICAgIGR3SW9Db250cm9sQ29kZSwKKyAgICAgICAgICAgIGxwSW5CdWZmZXIsIG5JbkJ1ZmZlclNpemUsCisgICAgICAgICAgICBscE91dEJ1ZmZlciwgbk91dEJ1ZmZlclNpemUsCisgICAgICAgICAgICBudWxscHRyLCAKKyAgICAgICAgICAgICZPdmVybGFwcGVkKSkKKyAgICB7CisgICAgICAgIGR3RXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKGR3RXJyb3IgIT0gRVJST1JfSU9fUEVORElORykKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJEZXZpY2VJb0NvbnRyb2woMHgleCkgZmFpbGVkLCAlIVdJTkVSUk9SISIsIGR3SW9Db250cm9sQ29kZSwgZHdFcnJvcik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGR3RXJyb3IgPSBFUlJPUl9TVUNDRVNTOworICAgIH0KKworICAgIC8vIEdldCB0aGUgcmVzdWx0IG9mIHRoZSBJTyBvcGVyYXRpb24KKyAgICBpZiAoIUdldE92ZXJsYXBwZWRSZXN1bHRFeCgKKyAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSwKKyAgICAgICAgICAgICZPdmVybGFwcGVkLAorICAgICAgICAgICAgJmR3Qnl0ZXNSZXR1cm5lZCwKKyAgICAgICAgICAgIGNfTWF4T3ZlcmxhcHBlZFdhaXRUaW1lTVMsCisgICAgICAgICAgICBGQUxTRQorICAgICAgICAgICAgKSkKKyAgICB7CisgICAgICAgIGR3RXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKGR3RXJyb3IgPT0gV0FJVF9USU1FT1VUKQorICAgICAgICB7CisgICAgICAgICAgICBkd0Vycm9yID0gRVJST1JfVElNRU9VVDsKKyAgICAgICAgICAgIENhbmNlbElvRXgoYUFwaXRJbnN0YW5jZS0+RGV2aWNlSGFuZGxlLCAmT3ZlcmxhcHBlZCk7CisgICAgICAgIH0KKyAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJHZXRPdmVybGFwcGVkUmVzdWx0IGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAoZHdCeXRlc1JldHVybmVkICE9IG5PdXRCdWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgZHdFcnJvciA9IEVSUk9SX0lOVkFMSURfREFUQTsKKyAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJHZXRPdmVybGFwcGVkUmVzdWx0IHJldHVybmVkIGludmFsaWQgb3V0cHV0IHNpemUsIGV4cGVjdGVkPSV1IGFjdHVhbD0ldSIsIAorICAgICAgICAgICAgICAgICAgICAgbk91dEJ1ZmZlclNpemUsIGR3Qnl0ZXNSZXR1cm5lZCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCitlcnJvcjoKKworICAgIGlmIChPdmVybGFwcGVkLmhFdmVudCkKKyAgICB7CisgICAgICAgIENsb3NlSGFuZGxlKE92ZXJsYXBwZWQuaEV2ZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gZHdFcnJvcjsKK30KKworX19wcmFnbWEocGFjayhwdXNoLDEpKQordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KK3N0cnVjdCBQYWNrZWRCdWZmZXIyCit7CisgICAgVDEgZGF0YTE7IFQyIGRhdGEyOworICAgIFBhY2tlZEJ1ZmZlcjIoY29uc3QgVDEgJmQxLCBjb25zdCBUMiAmZDIpIDogZGF0YTEoZDEpLCBkYXRhMihkMikgeyB9Cit9OwordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDM+CitzdHJ1Y3QgUGFja2VkQnVmZmVyMworeworICAgIFQxIGRhdGExOyBUMiBkYXRhMjsgVDMgZGF0YTM7CisgICAgUGFja2VkQnVmZmVyMyhjb25zdCBUMSAmZDEsIGNvbnN0IFQyICZkMiwgY29uc3QgVDMgJmQzKSA6IGRhdGExKGQxKSwgZGF0YTIoZDIpLCBkYXRhMyhkMykgeyB9Cit9OwordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0Pgorc3RydWN0IFBhY2tlZEJ1ZmZlcjQKK3sKKyAgICBUMSBkYXRhMTsgVDIgZGF0YTI7IFQzIGRhdGEzOyBUNCBkYXRhNDsKKyAgICBQYWNrZWRCdWZmZXI0KGNvbnN0IFQxICZkMSwgY29uc3QgVDIgJmQyLCBjb25zdCBUMyAmZDMsIGNvbnN0IFQ0ICZkNCkgOiBkYXRhMShkMSksIGRhdGEyKGQyKSwgZGF0YTMoZDMpLCBkYXRhNChkNCkgeyB9Cit9OwordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0LCBjbGFzcyBUNT4KK3N0cnVjdCBQYWNrZWRCdWZmZXI1Cit7CisgICAgVDEgZGF0YTE7IFQyIGRhdGEyOyBUMyBkYXRhMzsgVDQgZGF0YTQ7IFQ1IGRhdGE1OworICAgIFBhY2tlZEJ1ZmZlcjUoY29uc3QgVDEgJmQxLCBjb25zdCBUMiAmZDIsIGNvbnN0IFQzICZkMywgY29uc3QgVDQgJmQ0LCBjb25zdCBUNSAmZDUpIDogZGF0YTEoZDEpLCBkYXRhMihkMiksIGRhdGEzKGQzKSwgZGF0YTQoZDQpLCBkYXRhNShkNSkgeyB9Cit9OwordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0LCBjbGFzcyBUNSwgY2xhc3MgVDY+CitzdHJ1Y3QgUGFja2VkQnVmZmVyNgoreworICAgIFQxIGRhdGExOyBUMiBkYXRhMjsgVDMgZGF0YTM7IFQ0IGRhdGE0OyBUNSBkYXRhNTsgVDYgZGF0YTY7CisgICAgUGFja2VkQnVmZmVyNihjb25zdCBUMSAmZDEsIGNvbnN0IFQyICZkMiwgY29uc3QgVDMgJmQzLCBjb25zdCBUNCAmZDQsIGNvbnN0IFQ1ICZkNSwgY29uc3QgVDYgJmQ2KSA6IGRhdGExKGQxKSwgZGF0YTIoZDIpLCBkYXRhMyhkMyksIGRhdGE0KGQ0KSwgZGF0YTUoZDUpLCBkYXRhNihkNikgeyB9Cit9OworIF9fcHJhZ21hKHBhY2socG9wKSkKKwordGVtcGxhdGUgPGNsYXNzIGluLCBjbGFzcyBvdXQ+CitEV09SRAorUXVlcnlJT0NUTCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBfSW5fIERXT1JEIGR3SW9Db250cm9sQ29kZSwKKyAgICBfSW5fIGNvbnN0IGluICppbnB1dCwKKyAgICBfT3V0XyBvdXQqIG91dHB1dAorICAgICkKK3sKKyAgICBQYWNrZWRCdWZmZXIyPEdVSUQsaW4+IEJ1ZmZlcihhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsICppbnB1dCk7CisgICAgcmV0dXJuIFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgZHdJb0NvbnRyb2xDb2RlLCAmQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgb3V0cHV0LCBzaXplb2Yob3V0KSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBvdXQ+CitEV09SRAorUXVlcnlJT0NUTCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBfSW5fIERXT1JEIGR3SW9Db250cm9sQ29kZSwKKyAgICBfT3V0XyBvdXQqIG91dHB1dAorICAgICkKK3sKKyAgICByZXR1cm4gU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBkd0lvQ29udHJvbENvZGUsICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSwgb3V0cHV0LCBzaXplb2Yob3V0KSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBpbj4KK0RXT1JECitTZXRJT0NUTCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBfSW5fIERXT1JEIGR3SW9Db250cm9sQ29kZSwKKyAgICBfSW5fIGNvbnN0IGluKiBpbnB1dAorICAgICkKK3sKKyAgICBQYWNrZWRCdWZmZXIyPEdVSUQsaW4+IEJ1ZmZlcihhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsICppbnB1dCk7CisgICAgcmV0dXJuIFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgZHdJb0NvbnRyb2xDb2RlLCAmQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgbnVsbHB0ciwgMCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBpbj4KK0RXT1JECitTZXRJT0NUTCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBfSW5fIERXT1JEIGR3SW9Db250cm9sQ29kZSwKKyAgICBfSW5fIGNvbnN0IGluIGlucHV0CisgICAgKQoreworICAgIFBhY2tlZEJ1ZmZlcjI8R1VJRCxpbj4gQnVmZmVyKGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgaW5wdXQpOworICAgIHJldHVybiBTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIGR3SW9Db250cm9sQ29kZSwgJkJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksIG51bGxwdHIsIDApOworfQorCitEV09SRAorU2V0SU9DVEwoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgX0luXyBEV09SRCBkd0lvQ29udHJvbENvZGUKKyAgICApCit7CisgICAgcmV0dXJuIFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgZHdJb0NvbnRyb2xDb2RlLCAmYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBzaXplb2YoR1VJRCksIG51bGxwdHIsIDApOworfQorCitvdEVycm9yCitEd29yZFRvVGhyZWFkRXJyb3IoCisgICAgRFdPUkQgZHdFcnJvcgorICAgICkKK3sKKyAgICBpZiAoKChpbnQpZHdFcnJvcikgPiAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0dFTkVSSUM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAob3RFcnJvcikoLShpbnQpZHdFcnJvcik7CisgICAgfQorfQorCitPVEFQSSAKK3ZvaWQgCitPVENBTEwKK290U2V0RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrKAorICAgIF9Jbl8gb3RBcGlJbnN0YW5jZSAqYUFwaXRJbnN0YW5jZSwKKyAgICBfSW5fIG90RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrIGFDYWxsYmFjaywKKyAgICBfSW5fIHZvaWQgKmFDYWxsYmFja0NvbnRleHQKKyAgICApCit7CisgICAgb3RBcGlEZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFjayogQ2FsbGJhY2tUb1JlbGVhc2UgPSBudWxscHRyOworCisgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisKKyAgICBpZiAoYUFwaXRJbnN0YW5jZS0+RGV2aWNlQXZhaWxhYmlsaXR5Q2FsbGJhY2tzICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBDYWxsYmFja1RvUmVsZWFzZSA9IGFBcGl0SW5zdGFuY2UtPkRldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrczsKKyAgICAgICAgYUFwaXRJbnN0YW5jZS0+RGV2aWNlQXZhaWxhYmlsaXR5Q2FsbGJhY2tzID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoYUNhbGxiYWNrICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBhQXBpdEluc3RhbmNlLT5EZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3MgPSAKKyAgICAgICAgICAgIG5ldyBvdEFwaURldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrKGFDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dCk7CisgICAgfQorICAgIAorICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworCisgICAgaWYgKENhbGxiYWNrVG9SZWxlYXNlKQorICAgIHsKKyAgICAgICAgQ2FsbGJhY2tUb1JlbGVhc2UtPlJlbGVhc2UodHJ1ZSk7CisgICAgICAgIGRlbGV0ZSBDYWxsYmFja1RvUmVsZWFzZTsKKyAgICB9Cit9CisKK09UQVBJIAorb3REZXZpY2VMaXN0KiAKK09UQ0FMTAorb3RFbnVtZXJhdGVEZXZpY2VzKAorICAgIF9Jbl8gb3RBcGlJbnN0YW5jZSAqYUFwaXRJbnN0YW5jZQorICAgICkKK3sKKyAgICBEV09SRCBkd0Vycm9yID0gRVJST1JfU1VDQ0VTUzsKKyAgICBPVkVSTEFQUEVEIE92ZXJsYXBwZWQgPSB7IDAgfTsKKyAgICBEV09SRCBkd0J5dGVzUmV0dXJuZWQgPSAwOworICAgIG90RGV2aWNlTGlzdCogcERldmljZUxpc3QgPSBudWxscHRyOworICAgIERXT1JEIGNiRGV2aWNlTGlzdCA9IHNpemVvZihvdERldmljZUxpc3QpOworICAgIAorICAgIExvZ0Z1bmNFbnRyeShBUElfREVGQVVMVCk7CisKKyAgICBPdmVybGFwcGVkLmhFdmVudCA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIEZBTFNFLCBGQUxTRSwgbnVsbHB0cik7CisgICAgaWYgKE92ZXJsYXBwZWQuaEV2ZW50ID09IG51bGxwdHIpCisgICAgeworICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiQ3JlYXRlRXZlbnQgKE92ZXJsYXBwZWQuaEV2ZW50KSBmYWlsZWQsICUhV0lORVJST1IhIiwgZHdFcnJvcik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIAorICAgIHBEZXZpY2VMaXN0ID0gKG90RGV2aWNlTGlzdCopbWFsbG9jKGNiRGV2aWNlTGlzdCk7CisgICAgaWYgKHBEZXZpY2VMaXN0ID09IG51bGxwdHIpCisgICAgeworICAgICAgICBMb2dXYXJuaW5nKEFQSV9ERUZBVUxULCAiRmFpbGVkIHRvIGFsbG9jYXRlIG90RGV2aWNlTGlzdCBvZiAldSBieXRlcy4iLCBjYkRldmljZUxpc3QpOworICAgICAgICBkd0Vycm9yID0gRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFJ0bFplcm9NZW1vcnkocERldmljZUxpc3QsIGNiRGV2aWNlTGlzdCk7CisgICAgCisgICAgLy8gUXVlcnkgaW4gYSBsb29wIHRvIGFjY291bnQgZm9yIGl0IGNoYW5naW5nIGJldHdlZW4gY2FsbHMKKyAgICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICAgIC8vIFNlbmQgdGhlIElPQ1RMIHRvIHF1ZXJ5IHRoZSBpbnRlcmZhY2VzCisgICAgICAgIGlmICghRGV2aWNlSW9Db250cm9sKAorICAgICAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSwKKyAgICAgICAgICAgICAgICBJT0NUTF9PVExXRl9FTlVNRVJBVEVfREVWSUNFUywKKyAgICAgICAgICAgICAgICBudWxscHRyLCAwLAorICAgICAgICAgICAgICAgIHBEZXZpY2VMaXN0LCBjYkRldmljZUxpc3QsCisgICAgICAgICAgICAgICAgbnVsbHB0ciwgCisgICAgICAgICAgICAgICAgJk92ZXJsYXBwZWQpKQorICAgICAgICB7CisgICAgICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICBpZiAoZHdFcnJvciAhPSBFUlJPUl9JT19QRU5ESU5HKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiRGV2aWNlSW9Db250cm9sKElPQ1RMX09UTFdGX0VOVU1FUkFURV9ERVZJQ0VTKSBmYWlsZWQsICUhV0lORVJST1IhIiwgZHdFcnJvcik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGR3RXJyb3IgPSBFUlJPUl9TVUNDRVNTOworICAgICAgICB9CisKKyAgICAgICAgLy8gR2V0IHRoZSByZXN1bHQgb2YgdGhlIElPIG9wZXJhdGlvbgorICAgICAgICBpZiAoIUdldE92ZXJsYXBwZWRSZXN1bHRFeCgKKyAgICAgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5EZXZpY2VIYW5kbGUsCisgICAgICAgICAgICAgICAgJk92ZXJsYXBwZWQsCisgICAgICAgICAgICAgICAgJmR3Qnl0ZXNSZXR1cm5lZCwKKyAgICAgICAgICAgICAgICBjX01heE92ZXJsYXBwZWRXYWl0VGltZU1TLAorICAgICAgICAgICAgICAgIFRSVUUpKQorICAgICAgICB7CisgICAgICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICBpZiAoZHdFcnJvciA9PSBXQUlUX1RJTUVPVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZHdFcnJvciA9IEVSUk9SX1RJTUVPVVQ7CisgICAgICAgICAgICAgICAgQ2FuY2VsSW9FeChhQXBpdEluc3RhbmNlLT5EZXZpY2VIYW5kbGUsICZPdmVybGFwcGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiR2V0T3ZlcmxhcHBlZFJlc3VsdCBmb3Igbm90aWZpY2F0aW9uIGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgZnVsbCBidWZmZXIKKyAgICAgICAgY2JEZXZpY2VMaXN0ID0gCisgICAgICAgICAgICBGSUVMRF9PRkZTRVQob3REZXZpY2VMaXN0LCBhRGV2aWNlcykgKworICAgICAgICAgICAgcERldmljZUxpc3QtPmFEZXZpY2VzTGVuZ3RoICogc2l6ZW9mKG90RGV2aWNlTGlzdDo6YURldmljZXMpOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXkgcmV0dXJuZWQgYSBjb21wbGV0ZSBidWZmZXIKKyAgICAgICAgaWYgKGR3Qnl0ZXNSZXR1cm5lZCAhPSBzaXplb2Yob3REZXZpY2VMaXN0OjphRGV2aWNlc0xlbmd0aCkpIGJyZWFrOworICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUgdGhhdCBtZWFucyB3ZSBkaWRuJ3QgaGF2ZSBhIGJpZyBlbm91Z2ggYnVmZmVyCisgICAgICAgIC8vIFJlYWxsb2NhdGUgYSBuZXcgYnVmZmVyCisgICAgICAgIGZyZWUocERldmljZUxpc3QpOworICAgICAgICBwRGV2aWNlTGlzdCA9IChvdERldmljZUxpc3QqKW1hbGxvYyhjYkRldmljZUxpc3QpOworICAgICAgICBpZiAocERldmljZUxpc3QgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgb3REZXZpY2VMaXN0IG9mICV1IGJ5dGVzLiIsIGNiRGV2aWNlTGlzdCk7CisgICAgICAgICAgICBkd0Vycm9yID0gRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFJ0bFplcm9NZW1vcnkocERldmljZUxpc3QsIGNiRGV2aWNlTGlzdCk7CisgICAgfQorCitlcnJvcjoKKworICAgIGlmIChkd0Vycm9yICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgeworICAgICAgICBmcmVlKHBEZXZpY2VMaXN0KTsKKyAgICAgICAgcERldmljZUxpc3QgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChPdmVybGFwcGVkLmhFdmVudCkKKyAgICB7CisgICAgICAgIENsb3NlSGFuZGxlKE92ZXJsYXBwZWQuaEV2ZW50KTsKKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXRNc2coQVBJX0RFRkFVTFQsICIlZCBkZXZpY2VzIiwgcERldmljZUxpc3QgPT0gbnVsbHB0ciA/IC0xIDogKGludClwRGV2aWNlTGlzdC0+YURldmljZXNMZW5ndGgpOworCisgICAgcmV0dXJuIHBEZXZpY2VMaXN0OworfQorICAgIAorT1RBUEkgCitvdEluc3RhbmNlICoKK09UQ0FMTAorb3RJbnN0YW5jZUluaXQoCisgICAgX0luXyBvdEFwaUluc3RhbmNlICphQXBpdEluc3RhbmNlLCAKKyAgICBfSW5fIGNvbnN0IEdVSUQgKmFEZXZpY2VHdWlkCisgICAgKQoreworICAgIG90SW5zdGFuY2UgKmFJbnN0YW5jZSA9IG51bGxwdHI7CisKKyAgICBPVExXRl9ERVZJQ0UgUmVzdWx0ID0gezB9OworICAgIGlmIChhQXBpdEluc3RhbmNlICYmCisgICAgICAgIFNlbmRJT0NUTCgKKyAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UsIAorICAgICAgICAgICAgSU9DVExfT1RMV0ZfUVVFUllfREVWSUNFLCAKKyAgICAgICAgICAgIChMUFZPSUQpYURldmljZUd1aWQsIAorICAgICAgICAgICAgc2l6ZW9mKEdVSUQpLCAKKyAgICAgICAgICAgICZSZXN1bHQsIAorICAgICAgICAgICAgc2l6ZW9mKFJlc3VsdCkKKyAgICAgICAgICAgICkgPT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGFJbnN0YW5jZSA9IChvdEluc3RhbmNlKiltYWxsb2Moc2l6ZW9mKG90SW5zdGFuY2UpKTsKKyAgICAgICAgaWYgKGFJbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgYUluc3RhbmNlLT5BcGlIYW5kbGUgPSBhQXBpdEluc3RhbmNlOworICAgICAgICAgICAgYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkID0gKmFEZXZpY2VHdWlkOworICAgICAgICAgICAgYUluc3RhbmNlLT5Db21wYXJ0bWVudElEID0gUmVzdWx0LkNvbXBhcnRtZW50SUQ7CisKKyAgICAgICAgICAgIGlmIChDb252ZXJ0SW50ZXJmYWNlR3VpZFRvTHVpZChhRGV2aWNlR3VpZCwgJmFJbnN0YW5jZS0+SW50ZXJmYWNlTHVpZCkgIT0gRVJST1JfU1VDQ0VTUyB8fAorICAgICAgICAgICAgICAgIENvbnZlcnRJbnRlcmZhY2VMdWlkVG9JbmRleCgmYUluc3RhbmNlLT5JbnRlcmZhY2VMdWlkLCAmYUluc3RhbmNlLT5JbnRlcmZhY2VJbmRleCkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihBUElfREVGQVVMVCwgIkZhaWxlZCB0byBjb252ZXJ0IGludGVyZmFjZSBndWlkIHRvIGluZGV4ISIpOworICAgICAgICAgICAgICAgIGZyZWUoYUluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBhSW5zdGFuY2UgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFJbnN0YW5jZTsKK30KKworT1RBUEkgCitHVUlEIAorT1RDQUxMCitvdEdldERldmljZUd1aWQoCisgICAgb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIHt9OworICAgIHJldHVybiBhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQ7Cit9CisKK09UQVBJIAordWludDMyX3QgCitPVENBTEwKK290R2V0RGV2aWNlSWZJbmRleCgKKyAgICBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gKHVpbnQzMl90KS0xOworICAgIHJldHVybiBhSW5zdGFuY2UtPkludGVyZmFjZUluZGV4OworfQorCitPVEFQSSAKK3VpbnQzMl90IAorT1RDQUxMCitvdEdldENvbXBhcnRtZW50SWQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gKHVpbnQzMl90KS0xOworICAgIHJldHVybiBhSW5zdGFuY2UtPkNvbXBhcnRtZW50SUQ7Cit9CisKK09UQVBJIAorY29uc3QgY2hhciAqCitPVENBTEwKK290R2V0VmVyc2lvblN0cmluZygpCit7CisgICAgY2hhciogc3pWZXJzaW9uID0gKGNoYXIqKW1hbGxvYyhzaXplb2YoY19WZXJzaW9uKSk7CisgICAgaWYgKHN6VmVyc2lvbikKKyAgICB7CisgICAgICAgIG1lbWNweV9zKHN6VmVyc2lvbiwgc2l6ZW9mKGNfVmVyc2lvbiksIGNfVmVyc2lvbiwgc2l6ZW9mKGNfVmVyc2lvbikpOworICAgIH0KKyAgICByZXR1cm4gc3pWZXJzaW9uOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290SXA2U2V0RW5hYmxlZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBib29sIGFFbmFibGVkCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfSU5URVJGQUNFLCAoQk9PTEVBTilhRW5hYmxlZCkpOworfQorCitPVEFQSSAKK2Jvb2wgCitPVENBTEwKK290SXA2SXNFbmFibGVkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIEJPT0xFQU4gUmVzdWx0ID0gRkFMU0U7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0lOVEVSRkFDRSwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdCAhPSBGQUxTRTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdFRocmVhZFNldEVuYWJsZWQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgYm9vbCBhRW5hYmxlZAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1RIUkVBRCwgKEJPT0xFQU4pYUVuYWJsZWQpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRTZXRBdXRvU3RhcnQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgYm9vbCBhU3RhcnRBdXRvbWF0aWNhbGx5CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfVEhSRUFEX0FVVE9fU1RBUlQsIChCT09MRUFOKShhU3RhcnRBdXRvbWF0aWNhbGx5ID8gVFJVRSA6IEZBTFNFKSkpOworfQorCitPVEFQSQorYm9vbAorT1RDQUxMCitvdFRocmVhZEdldEF1dG9TdGFydCgKKyAgICBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgQk9PTEVBTiBSZXN1bHQgPSBGQUxTRTsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfVEhSRUFEX0FVVE9fU1RBUlQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQgIT0gRkFMU0U7Cit9CisKK09UQVBJIAorYm9vbCAKK09UQ0FMTAorb3RUaHJlYWRJc1NpbmdsZXRvbigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBCT09MRUFOIFJlc3VsdCA9IEZBTFNFOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9TSU5HTEVUT04sICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQgIT0gRkFMU0U7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RMaW5rQWN0aXZlU2NhbigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgdWludDMyX3QgYVNjYW5DaGFubmVscywgCisgICAgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwKKyAgICBvdEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQgYUNhbGxiYWNrLAorICAgIF9Jbl8gdm9pZCAqYUNhbGxiYWNrQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisKKyAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+U2V0Q2FsbGJhY2soCisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5BY3RpdmVTY2FuQ2FsbGJhY2tzLAorICAgICAgICBhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIGFDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dAorICAgICAgICApOworICAgIAorICAgIFBhY2tlZEJ1ZmZlcjM8R1VJRCx1aW50MzJfdCx1aW50MTZfdD4gQnVmZmVyKGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgYVNjYW5DaGFubmVscywgYVNjYW5EdXJhdGlvbik7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX0FDVElWRV9TQ0FOLCAmQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgbnVsbHB0ciwgMCkpOworfQorCitPVEFQSSAKK2Jvb2wgCitPVENBTEwKK290TGlua0lzQWN0aXZlU2NhbkluUHJvZ3Jlc3MoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgQk9PTEVBTiBSZXN1bHQgPSBGQUxTRTsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQUNUSVZFX1NDQU4sICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQgIT0gRkFMU0U7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTCAKK290TGlua0VuZXJneVNjYW4oCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQzMl90IGFTY2FuQ2hhbm5lbHMsIAorICAgIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sCisgICAgX0luXyBvdEhhbmRsZUVuZXJneVNjYW5SZXN1bHQgYUNhbGxiYWNrLCAKKyAgICBfSW5fIHZvaWQgKmFDYWxsYmFja0NvbnRleHQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgYUluc3RhbmNlLT5BcGlIYW5kbGUtPlNldENhbGxiYWNrKAorICAgICAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+RW5lcmd5U2NhbkNhbGxiYWNrcywKKyAgICAgICAgYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhQ2FsbGJhY2ssIGFDYWxsYmFja0NvbnRleHQKKyAgICAgICAgKTsKKyAgICAKKyAgICBQYWNrZWRCdWZmZXIzPEdVSUQsdWludDMyX3QsdWludDE2X3Q+IEJ1ZmZlcihhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIGFTY2FuQ2hhbm5lbHMsIGFTY2FuRHVyYXRpb24pOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9FTkVSR1lfU0NBTiwgJkJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkgCitib29sIAorT1RDQUxMIAorb3RMaW5rSXNFbmVyZ3lTY2FuSW5Qcm9ncmVzcygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBCT09MRUFOIFJlc3VsdCA9IEZBTFNFOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9FTkVSR1lfU0NBTiwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdCAhPSBGQUxTRTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdFRocmVhZERpc2NvdmVyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCAKKyAgICB1aW50MTZfdCBhUGFuaWQsCisgICAgYm9vbCBhSm9pbmVyLAorICAgIGJvb2wgYUVuYWJsZUV1aTY0RmlsdGVyaW5nLAorICAgIG90SGFuZGxlQWN0aXZlU2NhblJlc3VsdCBhQ2FsbGJhY2ssCisgICAgdm9pZCAqYUNhbGxiYWNrQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisKKyAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+U2V0Q2FsbGJhY2soCisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5EaXNjb3ZlckNhbGxiYWNrcywKKyAgICAgICAgYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhQ2FsbGJhY2ssIGFDYWxsYmFja0NvbnRleHQKKyAgICAgICAgKTsKKworICAgIFBhY2tlZEJ1ZmZlcjU8R1VJRCx1aW50MzJfdCx1aW50MTZfdCwgdWludDhfdCwgdWludDhfdD4gQnVmZmVyKGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgYVNjYW5DaGFubmVscywgYVBhbmlkLCBhSm9pbmVyLCBhRW5hYmxlRXVpNjRGaWx0ZXJpbmcpOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9ESVNDT1ZFUiwgJkJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkgCitib29sIAorT1RDQUxMCitvdElzRGlzY292ZXJJblByb2dyZXNzKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIEJPT0xFQU4gUmVzdWx0ID0gRkFMU0U7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0RJU0NPVkVSLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0ICE9IEZBTFNFOworfQorCitPVEFQSSAKK290RXJyb3IKK09UQ0FMTAorb3RMaW5rU2VuZERhdGFSZXF1ZXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFJbnN0YW5jZSk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgLy8gVE9ETworfQorCitPVEFQSSAKK3VpbnQ4X3QgCitPVENBTEwKK290TGlua0dldENoYW5uZWwoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDhfdCBSZXN1bHQgPSAweEZGOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9DSEFOTkVMLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290TGlua1NldENoYW5uZWwoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQ4X3QgYUNoYW5uZWwKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9DSEFOTkVMLCBhQ2hhbm5lbCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdERhdGFzZXRTZXREZWxheVRpbWVyTWluaW1hbCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICB1aW50MzJfdCBhRGVsYXlUaW1lck1pbmltYWwKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIC8vIFRPRE8KKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFEZWxheVRpbWVyTWluaW1hbCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworT1RBUEkKK3VpbnQzMl90CitPVENBTEwKK290RGF0YXNldEdldERlbGF5VGltZXJNaW5pbWFsKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIDA7CisgICAgLy8gVE9ETworICAgIHJldHVybiAwOworfQorCitPVEFQSSAKK3VpbnQ4X3QgCitPVENBTEwKK290VGhyZWFkR2V0TWF4QWxsb3dlZENoaWxkcmVuKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQ4X3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTUFYX0NISUxEUkVOLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290VGhyZWFkU2V0TWF4QWxsb3dlZENoaWxkcmVuKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFNYXhDaGlsZHJlbgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BWF9DSElMRFJFTiwgYU1heENoaWxkcmVuKSk7Cit9CisKK09UQVBJIAordWludDMyX3QgCitPVENBTEwKK290VGhyZWFkR2V0Q2hpbGRUaW1lb3V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQzMl90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0NISUxEX1RJTUVPVVQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RUaHJlYWRTZXRDaGlsZFRpbWVvdXQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQzMl90IGFUaW1lb3V0CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ0hJTERfVElNRU9VVCwgYVRpbWVvdXQpOworfQorCitPVEFQSSAKK2NvbnN0IAordWludDhfdCAqCitPVENBTEwKK290TGlua0dldEV4dGVuZGVkQWRkcmVzcygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgb3RFeHRBZGRyZXNzICpSZXN1bHQgPSAob3RFeHRBZGRyZXNzKiltYWxsb2Moc2l6ZW9mKG90RXh0QWRkcmVzcykpOworICAgIGlmIChSZXN1bHQgJiYgUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0VYVEVOREVEX0FERFJFU1MsIFJlc3VsdCkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGZyZWUoUmVzdWx0KTsKKyAgICAgICAgUmVzdWx0ID0gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuICh1aW50OF90KilSZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RMaW5rU2V0RXh0ZW5kZWRBZGRyZXNzKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdEV4dEFkZHJlc3MgKmFFeHRlbmRlZEFkZHJlc3MKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9FWFRFTkRFRF9BRERSRVNTLCBhRXh0ZW5kZWRBZGRyZXNzKSk7Cit9CisKK09UQVBJIAorY29uc3QgdWludDhfdCAqCitPVENBTEwKK290VGhyZWFkR2V0RXh0ZW5kZWRQYW5JZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgb3RFeHRlbmRlZFBhbklkICpSZXN1bHQgPSAob3RFeHRlbmRlZFBhbklkKiltYWxsb2Moc2l6ZW9mKG90RXh0ZW5kZWRQYW5JZCkpOworICAgIGlmIChSZXN1bHQgJiYgUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0VYVEVOREVEX1BBTklELCBSZXN1bHQpICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgeworICAgICAgICBmcmVlKFJlc3VsdCk7CisgICAgICAgIFJlc3VsdCA9IG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiAodWludDhfdCopUmVzdWx0OworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290VGhyZWFkU2V0RXh0ZW5kZWRQYW5JZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3QgdWludDhfdCAqYUV4dGVuZGVkUGFuSWQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9FWFRFTkRFRF9QQU5JRCwgKGNvbnN0IG90RXh0ZW5kZWRQYW5JZCopYUV4dGVuZGVkUGFuSWQpKTsKK30KKworT1RBUEkgCit2b2lkIAorT1RDQUxMCitvdExpbmtHZXRGYWN0b3J5QXNzaWduZWRJZWVlRXVpNjQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIF9PdXRfIG90RXh0QWRkcmVzcyAqYUV1aTY0CispCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm47CisgICAgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0ZBQ1RPUllfRVVJNjQsIGFFdWk2NCk7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RMaW5rR2V0Sm9pbmVySWQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIF9PdXRfIG90RXh0QWRkcmVzcyAqYUhhc2hNYWNBZGRyZXNzCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuOworICAgICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9IQVNIX01BQ19BRERSRVNTLCBhSGFzaE1hY0FkZHJlc3MpOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290VGhyZWFkR2V0TGVhZGVyUmxvYygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgX091dF8gb3RJcDZBZGRyZXNzICphTGVhZGVyUmxvYworICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTEVBREVSX1JMT0MsIGFMZWFkZXJSbG9jKSk7Cit9CisKK09UQVBJIAorb3RMaW5rTW9kZUNvbmZpZyAKK09UQ0FMTAorb3RUaHJlYWRHZXRMaW5rTW9kZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBvdExpbmtNb2RlQ29uZmlnIFJlc3VsdCA9IHswfTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihvdExpbmtNb2RlQ29uZmlnKSA9PSA0LCAiVGhlIHNpemUgb2Ygb3RMaW5rTW9kZUNvbmZpZyBzaG91bGQgYmUgNCBieXRlcyIpOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9MSU5LX01PREUsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RUaHJlYWRTZXRMaW5rTW9kZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgb3RMaW5rTW9kZUNvbmZpZyBhQ29uZmlnCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihvdExpbmtNb2RlQ29uZmlnKSA9PSA0LCAiVGhlIHNpemUgb2Ygb3RMaW5rTW9kZUNvbmZpZyBzaG91bGQgYmUgNCBieXRlcyIpOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9MSU5LX01PREUsIGFDb25maWcpKTsKK30KKworT1RBUEkgCitjb25zdCBvdE1hc3RlcktleSAqCitPVENBTEwKK290VGhyZWFkR2V0TWFzdGVyS2V5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIG51bGxwdHI7CisKKyAgICBvdE1hc3RlcktleSAqUmVzdWx0ID0gKG90TWFzdGVyS2V5KiltYWxsb2Moc2l6ZW9mKG90TWFzdGVyS2V5KSk7CisgICAgaWYgKFJlc3VsdCA9PSBudWxscHRyKSByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BU1RFUl9LRVksIFJlc3VsdCkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGZyZWUoUmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkU2V0TWFzdGVyS2V5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdE1hc3RlcktleSAqYUtleQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgCisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BU1RFUl9LRVksIGFLZXkpKTsKK30KKworT1RBUEkgCitjb25zdCB1aW50OF90ICoKK09UQ0FMTAorb3RUaHJlYWRHZXRQU0tjKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlIAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgdWludDhfdCAqUmVzdWx0ID0gKHVpbnQ4X3QqKW1hbGxvYyhzaXplb2Yob3RQU0tjKSk7CisgICAgaWYgKFJlc3VsdCA9PSBudWxscHRyKSByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1BTS0MsIFJlc3VsdCkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGZyZWUoUmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkU2V0UFNLYygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3QgdWludDhfdCAqYVBTS2MgCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAKKyAgICBCWVRFIEJ1ZmZlcltzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RQU0tjKV07CisgICAgbWVtY3B5X3MoQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgJmFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgc2l6ZW9mKEdVSUQpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCksIHNpemVvZihCdWZmZXIpIC0gc2l6ZW9mKEdVSUQpLCBhUFNLYywgc2l6ZW9mKG90UFNLYykpOworICAgIAorICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9QU0tDLCBCdWZmZXIsIHNpemVvZihCdWZmZXIpLCBudWxscHRyLCAwKSk7Cit9CisKK09UQVBJIAoraW50OF90IAorT1RDQUxMCitvdExpbmtHZXRNYXhUcmFuc21pdFBvd2VyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGludDhfdCBSZXN1bHQgPSAwOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NQVhfVFJBTlNNSVRfUE9XRVIsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RMaW5rU2V0TWF4VHJhbnNtaXRQb3dlcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgaW50OF90IGFQb3dlcgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BWF9UUkFOU01JVF9QT1dFUiwgYVBvd2VyKTsKK30KKworT1RBUEkKK2NvbnN0IG90SXA2QWRkcmVzcyAqCitPVENBTEwKK290VGhyZWFkR2V0TWVzaExvY2FsRWlkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIG90SXA2QWRkcmVzcyAqUmVzdWx0ID0gKG90SXA2QWRkcmVzcyopbWFsbG9jKHNpemVvZihvdElwNkFkZHJlc3MpKTsKKyAgICBpZiAoUmVzdWx0ICYmIFF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NRVNIX0xPQ0FMX0VJRCwgUmVzdWx0KSAhPSBFUlJPUl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgZnJlZShSZXN1bHQpOworICAgICAgICBSZXN1bHQgPSBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSQorY29uc3QgdWludDhfdCAqCitPVENBTEwKK290VGhyZWFkR2V0TWVzaExvY2FsUHJlZml4KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIG51bGxwdHI7CisKKyAgICBvdE1lc2hMb2NhbFByZWZpeCAqUmVzdWx0ID0gKG90TWVzaExvY2FsUHJlZml4KiltYWxsb2Moc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KSk7CisgICAgaWYgKFJlc3VsdCAmJiBRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTUVTSF9MT0NBTF9QUkVGSVgsIFJlc3VsdCkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGZyZWUoUmVzdWx0KTsKKyAgICAgICAgUmVzdWx0ID0gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuICh1aW50OF90KilSZXN1bHQ7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkU2V0TWVzaExvY2FsUHJlZml4KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphTWVzaExvY2FsUHJlZml4CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTUVTSF9MT0NBTF9QUkVGSVgsIChjb25zdCBvdE1lc2hMb2NhbFByZWZpeCopYU1lc2hMb2NhbFByZWZpeCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEdldE5ldHdvcmtEYXRhTGVhZGVyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBib29sIGFTdGFibGUsIAorICAgIF9PdXRfIHVpbnQ4X3QgKmFEYXRhLCAKKyAgICBfT3V0XyB1aW50OF90ICphRGF0YUxlbmd0aAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhSW5zdGFuY2UpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoYVN0YWJsZSk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhRGF0YSk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhRGF0YUxlbmd0aCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgLy8gVE9ETworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEdldE5ldHdvcmtEYXRhTG9jYWwoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIGJvb2wgYVN0YWJsZSwgCisgICAgX091dF8gdWludDhfdCAqYURhdGEsIAorICAgIF9PdXRfIHVpbnQ4X3QgKmFEYXRhTGVuZ3RoCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFJbnN0YW5jZSk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhU3RhYmxlKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFEYXRhKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFEYXRhTGVuZ3RoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyAvLyBUT0RPCit9CisKK09UQVBJCitjb25zdCBjaGFyICoKK09UQ0FMTAorb3RUaHJlYWRHZXROZXR3b3JrTmFtZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgb3ROZXR3b3JrTmFtZSAqUmVzdWx0ID0gKG90TmV0d29ya05hbWUqKW1hbGxvYyhzaXplb2Yob3ROZXR3b3JrTmFtZSkpOworICAgIGlmIChSZXN1bHQgJiYgUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX05FVFdPUktfTkFNRSwgUmVzdWx0KSAhPSBFUlJPUl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgZnJlZShSZXN1bHQpOworICAgICAgICBSZXN1bHQgPSBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gKGNoYXIqKVJlc3VsdDsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRTZXROZXR3b3JrTmFtZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgX0luXyBjb25zdCBjaGFyICphTmV0d29ya05hbWUKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgb3ROZXR3b3JrTmFtZSBCdWZmZXIgPSB7MH07CisgICAgc3RyY3B5X3MoQnVmZmVyLm04LCBzaXplb2YoQnVmZmVyKSwgYU5ldHdvcmtOYW1lKTsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTkVUV09SS19OQU1FLCAoY29uc3Qgb3ROZXR3b3JrTmFtZSopJkJ1ZmZlcikpOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290TmV0RGF0YUdldE5leHRPbk1lc2hQcmVmaXgoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIF9Jbm91dF8gb3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsCisgICAgX091dF8gb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyIHx8IGFDb25maWcgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAKKyAgICBCT09MRUFOIGFMb2NhbCA9IEZBTFNFOworICAgIFBhY2tlZEJ1ZmZlcjM8R1VJRCxCT09MRUFOLG90TmV0d29ya0RhdGFJdGVyYXRvcj4gSW5CdWZmZXIoYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhTG9jYWwsICphSXRlcmF0b3IpOworICAgIEJZVEUgT3V0QnVmZmVyW3NpemVvZih1aW50OF90KSArIHNpemVvZihvdEJvcmRlclJvdXRlckNvbmZpZyldOworCisgICAgb3RFcnJvciBhRXJyb3IgPQorICAgICAgICBEd29yZFRvVGhyZWFkRXJyb3IoCisgICAgICAgICAgICBTZW5kSU9DVEwoCisgICAgICAgICAgICAgICAgYUluc3RhbmNlLT5BcGlIYW5kbGUsCisgICAgICAgICAgICAgICAgSU9DVExfT1RMV0ZfT1RfTkVYVF9PTl9NRVNIX1BSRUZJWCwKKyAgICAgICAgICAgICAgICAmSW5CdWZmZXIsIHNpemVvZihJbkJ1ZmZlciksCisgICAgICAgICAgICAgICAgT3V0QnVmZmVyLCBzaXplb2YoT3V0QnVmZmVyKSkpOworCisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgbWVtY3B5KGFJdGVyYXRvciwgT3V0QnVmZmVyLCBzaXplb2YodWludDhfdCkpOworICAgICAgICBtZW1jcHkoYUNvbmZpZywgT3V0QnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpLCBzaXplb2Yob3RCb3JkZXJSb3V0ZXJDb25maWcpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgWmVyb01lbW9yeShhQ29uZmlnLCBzaXplb2Yob3RCb3JkZXJSb3V0ZXJDb25maWcpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYUVycm9yOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdEJvcmRlclJvdXRlckdldE5leHRPbk1lc2hQcmVmaXgoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgX0lub3V0XyBvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwKKyAgICBfT3V0XyBvdEJvcmRlclJvdXRlckNvbmZpZyAqYUNvbmZpZworICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIgfHwgYUNvbmZpZyA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgQk9PTEVBTiBhTG9jYWwgPSBUUlVFOworICAgIFBhY2tlZEJ1ZmZlcjM8R1VJRCxCT09MRUFOLG90TmV0d29ya0RhdGFJdGVyYXRvcj4gSW5CdWZmZXIoYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhTG9jYWwsICphSXRlcmF0b3IpOworICAgIEJZVEUgT3V0QnVmZmVyW3NpemVvZih1aW50OF90KSArIHNpemVvZihvdEJvcmRlclJvdXRlckNvbmZpZyldOworCisgICAgb3RFcnJvciBhRXJyb3IgPSAKKyAgICAgICAgRHdvcmRUb1RocmVhZEVycm9yKAorICAgICAgICAgICAgU2VuZElPQ1RMKAorICAgICAgICAgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLCAKKyAgICAgICAgICAgICAgICBJT0NUTF9PVExXRl9PVF9ORVhUX09OX01FU0hfUFJFRklYLCAKKyAgICAgICAgICAgICAgICAmSW5CdWZmZXIsIHNpemVvZihJbkJ1ZmZlciksIAorICAgICAgICAgICAgICAgIE91dEJ1ZmZlciwgc2l6ZW9mKE91dEJ1ZmZlcikpKTsKKworICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG1lbWNweShhSXRlcmF0b3IsIE91dEJ1ZmZlciwgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgbWVtY3B5KGFDb25maWcsIE91dEJ1ZmZlciArIHNpemVvZih1aW50OF90KSwgc2l6ZW9mKG90Qm9yZGVyUm91dGVyQ29uZmlnKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFplcm9NZW1vcnkoYUNvbmZpZywgc2l6ZW9mKG90Qm9yZGVyUm91dGVyQ29uZmlnKSk7CisgICAgfQorCisgICAgcmV0dXJuIGFFcnJvcjsKK30KKworT1RBUEkKK290UGFuSWQgCitPVENBTEwKK290TGlua0dldFBhbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIG90UGFuSWQgUmVzdWx0ID0gezB9OworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9QQU5fSUQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290TGlua1NldFBhbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBvdFBhbklkIGFQYW5JZAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1BBTl9JRCwgYVBhbklkKSk7Cit9CisKK09UQVBJCitib29sIAorT1RDQUxMCitvdFRocmVhZElzUm91dGVyUm9sZUVuYWJsZWQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgQk9PTEVBTiBSZXN1bHQgPSB7MH07CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JPVVRFUl9ST0xMX0VOQUJMRUQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQgIT0gRkFMU0U7Cit9CisKK09UQVBJCit2b2lkIAorT1RDQUxMCitvdFRocmVhZFNldFJvdXRlclJvbGVFbmFibGVkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBib29sIGFFbmFibGVkCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUk9VVEVSX1JPTExfRU5BQkxFRCwgKEJPT0xFQU4pYUVuYWJsZWQpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZFNldFByZWZlcnJlZFJvdXRlcklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLAorICAgIHVpbnQ4X3QgYVJvdXRlcklkCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUEFOX0lELCBhUm91dGVySWQpKTsKK30KKworT1RBUEkKK290U2hvcnRBZGRyZXNzIAorT1RDQUxMCitvdExpbmtHZXRTaG9ydEFkZHJlc3MoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgb3RTaG9ydEFkZHJlc3MgUmVzdWx0ID0gezB9OworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9TSE9SVF9BRERSRVNTLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitCT09MCitHZXRBZGFwdGVyQWRkcmVzc2VzKAorICAgIFBJUF9BREFQVEVSX0FERFJFU1NFUyAqIHBwSUFBCispCit7CisgICAgUElQX0FEQVBURVJfQUREUkVTU0VTIHBJQUEgPSBOVUxMOworICAgIERXT1JEIGxlbiA9IDA7CisgICAgRFdPUkQgZmxhZ3M7CisKKyAgICBmbGFncyA9IEdBQV9GTEFHX1NLSVBfQU5ZQ0FTVCB8IEdBQV9GTEFHX1NLSVBfTVVMVElDQVNUIHwgR0FBX0ZMQUdfU0tJUF9ETlNfU0VSVkVSOworICAgIGlmIChHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9JTkVUNiwgZmxhZ3MsIE5VTEwsIE5VTEwsICZsZW4pICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcElBQSA9IChQSVBfQURBUFRFUl9BRERSRVNTRVMpbWFsbG9jKGxlbik7CisgICAgaWYgKHBJQUEpIHsKKyAgICAgICAgR2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZfSU5FVDYsIGZsYWdzLCBOVUxMLCBwSUFBLCAmbGVuKTsKKyAgICAgICAgKnBwSUFBID0gcElBQTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworT1RBUEkKK2NvbnN0IG90TmV0aWZBZGRyZXNzICoKK09UQ0FMTAorb3RJcDZHZXRVbmljYXN0QWRkcmVzc2VzKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeShBUElfREVGQVVMVCk7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgTG9nRnVuY0V4aXQoQVBJX0RFRkFVTFQpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBQdXQgdGhlIGN1cnJlbnQgdGhlYWQgaW4gdGhlIGNvcnJlY3QgY29tcGFydG1lbnQKKyAgICBib29sIFJldmVydENvbXBhcnRtZW50T25FeGl0ID0gZmFsc2U7CisgICAgVUxPTkcgT3JpZ2luYWxDb21wYXJ0bWVudElEID0gR2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoKTsKKyAgICBpZiAoT3JpZ2luYWxDb21wYXJ0bWVudElEICE9IGFJbnN0YW5jZS0+Q29tcGFydG1lbnRJRCkKKyAgICB7CisgICAgICAgIERXT1JEIGR3RXJyb3IgPSBFUlJPUl9TVUNDRVNTOworICAgICAgICBpZiAoKGR3RXJyb3IgPSBTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZChhSW5zdGFuY2UtPkNvbXBhcnRtZW50SUQpKSAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihBUElfREVGQVVMVCwgIlNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkIGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIFJldmVydENvbXBhcnRtZW50T25FeGl0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBvdE5ldGlmQWRkcmVzcyAqYWRkcnMgPSBudWxscHRyOworICAgIFVMT05HIEFkZHJDb3VudCA9IDA7CisKKyAgICAvLyBRdWVyeSB0aGUgY3VycmVudCBhZGFwdGVyIGFkZHJlc3NlcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHByb3BlciBvdXRwdXQgZm9ybWF0CisgICAgUElQX0FEQVBURVJfQUREUkVTU0VTIHBJQUFMaXN0OworICAgIGlmIChHZXRBZGFwdGVyQWRkcmVzc2VzKCZwSUFBTGlzdCkpCisgICAgeworICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBpbnRlcmZhY2VzCisgICAgICAgIGZvciAoYXV0byBwSUFBID0gcElBQUxpc3Q7IHBJQUEgIT0gbnVsbHB0cjsgcElBQSA9IHBJQUEtPk5leHQpIAorICAgICAgICB7CisgICAgICAgICAgICAvLyBMb29rIGZvciB0aGUgcmlnaHQgaW50ZXJmYWNlCisgICAgICAgICAgICBpZiAocElBQS0+SXB2NklmSW5kZXggIT0gYUluc3RhbmNlLT5JbnRlcmZhY2VJbmRleCkgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIExvb2sgdGhyb3VnaCBhbGwgdW5pY2FzdCBhZGRyZXNzZXMKKyAgICAgICAgICAgIGZvciAoYXV0byBwVW5pY2FzdEFkZHIgPSBwSUFBLT5GaXJzdFVuaWNhc3RBZGRyZXNzOyAKKyAgICAgICAgICAgICAgICAgcFVuaWNhc3RBZGRyICE9IG51bGxwdHI7IAorICAgICAgICAgICAgICAgICBwVW5pY2FzdEFkZHIgPSBwVW5pY2FzdEFkZHItPk5leHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQWRkckNvdW50Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55IGFkZHJlc3NlcywganVzdCBicmVhayBvdXQKKyAgICAgICAgaWYgKEFkZHJDb3VudCA9PSAwKSBnb3RvIGVycm9yOworCisgICAgICAgIC8vIEFsbG9jYXRlIHRoZSBhZGRyZXNzZXMKKyAgICAgICAgYWRkcnMgPSAob3ROZXRpZkFkZHJlc3MqKW1hbGxvYyhBZGRyQ291bnQgKiBzaXplb2Yob3ROZXRpZkFkZHJlc3MpKTsKKyAgICAgICAgaWYgKGFkZHJzID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ1dhcm5pbmcoQVBJX0RFRkFVTFQsICJOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvYyBvdE5ldGlmQWRkcmVzcyBhcnJheSIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBaZXJvTWVtb3J5KGFkZHJzLCBBZGRyQ291bnQgKiBzaXplb2Yob3ROZXRpZkFkZHJlc3MpKTsKKworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBuZXh0IHBvaW50ZXJzCisgICAgICAgIGZvciAoVUxPTkcgaSA9IDA7IGkgPCBBZGRyQ291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYWRkcnNbaV0ubU5leHQgPSAoaSArIDEgPT0gQWRkckNvdW50KSA/IG51bGxwdHIgOiAmYWRkcnNbaSArIDFdOworICAgICAgICB9CisKKyAgICAgICAgQWRkckNvdW50ID0gMDsKKworICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBpbnRlcmZhY2VzCisgICAgICAgIGZvciAoYXV0byBwSUFBID0gcElBQUxpc3Q7IHBJQUEgIT0gbnVsbHB0cjsgcElBQSA9IHBJQUEtPk5leHQpIAorICAgICAgICB7CisgICAgICAgICAgICAvLyBMb29rIGZvciB0aGUgcmlnaHQgaW50ZXJmYWNlCisgICAgICAgICAgICBpZiAocElBQS0+SXB2NklmSW5kZXggIT0gYUluc3RhbmNlLT5JbnRlcmZhY2VJbmRleCkgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIExvb2sgdGhyb3VnaCBhbGwgdW5pY2FzdCBhZGRyZXNzZXMKKyAgICAgICAgICAgIGZvciAoYXV0byBwVW5pY2FzdEFkZHIgPSBwSUFBLT5GaXJzdFVuaWNhc3RBZGRyZXNzOyAKKyAgICAgICAgICAgICAgICAgcFVuaWNhc3RBZGRyICE9IG51bGxwdHI7IAorICAgICAgICAgICAgICAgICBwVW5pY2FzdEFkZHIgPSBwVW5pY2FzdEFkZHItPk5leHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBTT0NLQUREUl9JTjYgcEFkZHIgPSAoTFBTT0NLQUREUl9JTjYpcFVuaWNhc3RBZGRyLT5BZGRyZXNzLmxwU29ja2FkZHI7CisKKyAgICAgICAgICAgICAgICAvLyBDb3B5IHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycworICAgICAgICAgICAgICAgIG1lbWNweSgmYWRkcnNbQWRkckNvdW50XS5tQWRkcmVzcywgJnBBZGRyLT5zaW42X2FkZHIsIHNpemVvZihwQWRkci0+c2luNl9hZGRyKSk7CisgICAgICAgICAgICAgICAgYWRkcnNbQWRkckNvdW50XS5tUHJlZmVycmVkID0gcFVuaWNhc3RBZGRyLT5QcmVmZXJyZWRMaWZldGltZSAhPSAwOworICAgICAgICAgICAgICAgIGFkZHJzW0FkZHJDb3VudF0ubVZhbGlkID0gcFVuaWNhc3RBZGRyLT5WYWxpZExpZmV0aW1lICE9IDA7CisgICAgICAgICAgICAgICAgYWRkcnNbQWRkckNvdW50XS5tUHJlZml4TGVuZ3RoID0gcFVuaWNhc3RBZGRyLT5PbkxpbmtQcmVmaXhMZW5ndGg7CisKKyAgICAgICAgICAgICAgICBBZGRyQ291bnQrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGVycm9yOgorICAgICAgICBmcmVlKHBJQUFMaXN0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJHZXRBZGFwdGVyQWRkcmVzc2VzIGZhaWxlZCEiKTsKKyAgICB9CisKKyAgICAvLyBSZXZlcnQgdGhlIGNvbXBhcm1lbnQgaWYgbmVjZXNzYXJ5CisgICAgaWYgKFJldmVydENvbXBhcnRtZW50T25FeGl0KQorICAgIHsKKyAgICAgICAgKFZPSUQpU2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoT3JpZ2luYWxDb21wYXJ0bWVudElEKTsKKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXRNc2coQVBJX0RFRkFVTFQsICIlZCBhZGRycyIsIEFkZHJDb3VudCk7CisgICAgcmV0dXJuIGFkZHJzOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdElwNkFkZFVuaWNhc3RBZGRyZXNzKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3MKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgLy8gUHV0IHRoZSBjdXJyZW50IHRoZWFkIGluIHRoZSBjb3JyZWN0IGNvbXBhcnRtZW50CisgICAgYm9vbCBSZXZlcnRDb21wYXJ0bWVudE9uRXhpdCA9IGZhbHNlOworICAgIFVMT05HIE9yaWdpbmFsQ29tcGFydG1lbnRJRCA9IEdldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKCk7CisgICAgaWYgKE9yaWdpbmFsQ29tcGFydG1lbnRJRCAhPSBhSW5zdGFuY2UtPkNvbXBhcnRtZW50SUQpCisgICAgeworICAgICAgICBEV09SRCBkd0Vycm9yID0gRVJST1JfU1VDQ0VTUzsKKyAgICAgICAgaWYgKChkd0Vycm9yID0gU2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoYUluc3RhbmNlLT5Db21wYXJ0bWVudElEKSkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZCBmYWlsZWQsICUhV0lORVJST1IhIiwgZHdFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfRkFJTEVEOworICAgICAgICB9CisgICAgICAgIFJldmVydENvbXBhcnRtZW50T25FeGl0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBNSUJfVU5JQ0FTVElQQUREUkVTU19ST1cgbmV3Um93OworICAgIEluaXRpYWxpemVVbmljYXN0SXBBZGRyZXNzRW50cnkoJm5ld1Jvdyk7CisKKyAgICBuZXdSb3cuSW50ZXJmYWNlSW5kZXggPSBhSW5zdGFuY2UtPkludGVyZmFjZUluZGV4OworICAgIG5ld1Jvdy5JbnRlcmZhY2VMdWlkID0gYUluc3RhbmNlLT5JbnRlcmZhY2VMdWlkOworICAgIG5ld1Jvdy5BZGRyZXNzLnNpX2ZhbWlseSA9IEFGX0lORVQ2OworICAgIG5ld1Jvdy5BZGRyZXNzLklwdjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoSU42X0FERFIpID09IHNpemVvZihvdElwNkFkZHJlc3MpLCAiV2luZG93cyBhbmQgT3BlblRocmVhZCBJUHY2IEFkZHIgU3RydWN0cyBtdXN0IGJlIHNhbWUgc2l6ZSIpOworCisgICAgbWVtY3B5KCZuZXdSb3cuQWRkcmVzcy5JcHY2LnNpbjZfYWRkciwgJmFBZGRyZXNzLT5tQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSk7CisgICAgbmV3Um93Lk9uTGlua1ByZWZpeExlbmd0aCA9IGFBZGRyZXNzLT5tUHJlZml4TGVuZ3RoOworICAgIG5ld1Jvdy5QcmVmZXJyZWRMaWZldGltZSA9IGFBZGRyZXNzLT5tUHJlZmVycmVkID8gMHhmZmZmZmZmZiA6IDA7CisgICAgbmV3Um93LlZhbGlkTGlmZXRpbWUgPSBhQWRkcmVzcy0+bVZhbGlkID8gMHhmZmZmZmZmZiA6IDA7CisgICAgbmV3Um93LlByZWZpeE9yaWdpbiA9IElwUHJlZml4T3JpZ2luT3RoZXI7ICAvLyBEZXJpdmVkIGZyb20gbmV0d29yayBYUEFOSUQKKyAgICBuZXdSb3cuU2tpcEFzU291cmNlID0gRkFMU0U7ICAgICAgICAgICAgICAgIC8vIEFsbG93IGF1dG9tYXRpYyBiaW5kaW5nIHRvIHRoaXMgYWRkcmVzcyAoZGVmYXVsdCkKKworICAgIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJm5ld1Jvdy5BZGRyZXNzLklwdjYuc2luNl9hZGRyKSkKKyAgICB7CisgICAgICAgIG5ld1Jvdy5TdWZmaXhPcmlnaW4gPSBJcFN1ZmZpeE9yaWdpbkxpbmtMYXllckFkZHJlc3M7ICAgLy8gRGVyaXZlZCBmcm9tIEV4dGVuZGVkIE1BQyBhZGRyZXNzCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5ld1Jvdy5TdWZmaXhPcmlnaW4gPSBJcFN1ZmZpeE9yaWdpblJhbmRvbTsgICAgICAgICAgICAgLy8gV2FzIGNyZWF0ZWQgcmFuZG9tbHkKKyAgICB9CisKKyAgICBEV09SRCBkd0Vycm9yID0gQ3JlYXRlVW5pY2FzdElwQWRkcmVzc0VudHJ5KCZuZXdSb3cpOworCisgICAgLy8gUmV2ZXJ0IHRoZSBjb21wYXJtZW50IGlmIG5lY2Vzc2FyeQorICAgIGlmIChSZXZlcnRDb21wYXJ0bWVudE9uRXhpdCkKKyAgICB7CisgICAgICAgIChWT0lEKVNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKE9yaWdpbmFsQ29tcGFydG1lbnRJRCk7CisgICAgfQorCisgICAgaWYgKGR3RXJyb3IgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiQ3JlYXRlVW5pY2FzdElwQWRkcmVzc0VudHJ5IGZhaWxlZCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICByZXR1cm4gT1RfRVJST1JfRkFJTEVEOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdElwNlJlbW92ZVVuaWNhc3RBZGRyZXNzKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKworICAgIC8vIFB1dCB0aGUgY3VycmVudCB0aGVhZCBpbiB0aGUgY29ycmVjdCBjb21wYXJ0bWVudAorICAgIGJvb2wgUmV2ZXJ0Q29tcGFydG1lbnRPbkV4aXQgPSBmYWxzZTsKKyAgICBVTE9ORyBPcmlnaW5hbENvbXBhcnRtZW50SUQgPSBHZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZCgpOworICAgIGlmIChPcmlnaW5hbENvbXBhcnRtZW50SUQgIT0gYUluc3RhbmNlLT5Db21wYXJ0bWVudElEKQorICAgIHsKKyAgICAgICAgRFdPUkQgZHdFcnJvciA9IEVSUk9SX1NVQ0NFU1M7CisgICAgICAgIGlmICgoZHdFcnJvciA9IFNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKGFJbnN0YW5jZS0+Q29tcGFydG1lbnRJRCkpICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiU2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQgZmFpbGVkLCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0ZBSUxFRDsKKyAgICAgICAgfQorICAgICAgICBSZXZlcnRDb21wYXJ0bWVudE9uRXhpdCA9IHRydWU7CisgICAgfQorCisgICAgTUlCX1VOSUNBU1RJUEFERFJFU1NfUk9XIGRlbGV0ZVJvdzsKKyAgICBJbml0aWFsaXplVW5pY2FzdElwQWRkcmVzc0VudHJ5KCZkZWxldGVSb3cpOworCisgICAgZGVsZXRlUm93LkludGVyZmFjZUluZGV4ID0gYUluc3RhbmNlLT5JbnRlcmZhY2VJbmRleDsKKyAgICBkZWxldGVSb3cuSW50ZXJmYWNlTHVpZCA9IGFJbnN0YW5jZS0+SW50ZXJmYWNlTHVpZDsKKyAgICBkZWxldGVSb3cuQWRkcmVzcy5zaV9mYW1pbHkgPSBBRl9JTkVUNjsKKworICAgIG1lbWNweSgmZGVsZXRlUm93LkFkZHJlc3MuSXB2Ni5zaW42X2FkZHIsIGFBZGRyZXNzLCBzaXplb2YoSU42X0FERFIpKTsKKyAgICAKKyAgICBEV09SRCBkd0Vycm9yID0gRGVsZXRlVW5pY2FzdElwQWRkcmVzc0VudHJ5KCZkZWxldGVSb3cpOworCisgICAgLy8gUmV2ZXJ0IHRoZSBjb21wYXJtZW50IGlmIG5lY2Vzc2FyeQorICAgIGlmIChSZXZlcnRDb21wYXJ0bWVudE9uRXhpdCkKKyAgICB7CisgICAgICAgIChWT0lEKVNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKE9yaWdpbmFsQ29tcGFydG1lbnRJRCk7CisgICAgfQorCisgICAgaWYgKGR3RXJyb3IgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiRGVsZXRlVW5pY2FzdElwQWRkcmVzc0VudHJ5IGZhaWxlZCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICByZXR1cm4gT1RfRVJST1JfRkFJTEVEOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitPVEFQSQorb3RFcnJvciAKK09UQ0FMTAorb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjaygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgX0luXyBvdFN0YXRlQ2hhbmdlZENhbGxiYWNrIGFDYWxsYmFjaywgCisgICAgX0luXyB2b2lkICphQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgYm9vbCBzdWNjZXNzID0gCisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5TZXRDYWxsYmFjaygKKyAgICAgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3MsCisgICAgICAgICAgICBhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIGFDYWxsYmFjaywgYUNvbnRleHQKKyAgICAgICAgICAgICk7CisgICAgcmV0dXJuIHN1Y2Nlc3MgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfQUxSRUFEWTsKK30KKworT1RBUEkKK3ZvaWQKK09UQ0FMTAorb3RSZW1vdmVTdGF0ZUNoYW5nZUNhbGxiYWNrKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLAorICAgIF9Jbl8gb3RTdGF0ZUNoYW5nZWRDYWxsYmFjayAvKiBhQ2FsbGJhY2sgKi8sCisgICAgX0luXyB2b2lkICphQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybjsKKyAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+U2V0Q2FsbGJhY2soCisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3MsCisgICAgICAgIGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgKG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2spbnVsbHB0ciwgYUNvbnRleHQKKyAgICAgICAgKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3REYXRhc2V0R2V0QWN0aXZlKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBfT3V0XyBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0FDVElWRV9EQVRBU0VULCBhRGF0YXNldCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdERhdGFzZXRTZXRBY3RpdmUoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICphRGF0YXNldAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0FDVElWRV9EQVRBU0VULCBhRGF0YXNldCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdERhdGFzZXRHZXRQZW5kaW5nKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBfT3V0XyBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1BFTkRJTkdfREFUQVNFVCwgYURhdGFzZXQpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3REYXRhc2V0U2V0UGVuZGluZygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUEVORElOR19EQVRBU0VULCBhRGF0YXNldCkpOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290RGF0YXNldFNlbmRNZ210QWN0aXZlR2V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphVGx2VHlwZXMsIAorICAgIHVpbnQ4X3QgYUxlbmd0aCwKKyAgICBfSW5fb3B0XyBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBpZiAoYVRsdlR5cGVzID09IG51bGxwdHIgJiYgYUxlbmd0aCAhPSAwKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIAorICAgIERXT1JEIEJ1ZmZlclNpemUgPSBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoOworICAgIGlmIChhQWRkcmVzcykgQnVmZmVyU2l6ZSArPSBzaXplb2Yob3RJcDZBZGRyZXNzKTsKKyAgICBQQllURSBCdWZmZXIgPSAoUEJZVEUpbWFsbG9jKEJ1ZmZlclNpemUpOworICAgIGlmIChCdWZmZXIgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBtZW1jcHlfcyhCdWZmZXIsIEJ1ZmZlclNpemUsICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpLCAmYUxlbmd0aCwgc2l6ZW9mKGFMZW5ndGgpKTsKKyAgICBpZiAoYUxlbmd0aCA+IDApCisgICAgICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZih1aW50OF90KSwgYVRsdlR5cGVzLCBhTGVuZ3RoKTsKKyAgICBpZiAoYUFkZHJlc3MpCisgICAgICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSArIGFMZW5ndGgsIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2YodWludDhfdCkgLSBhTGVuZ3RoLCBhQWRkcmVzcywgc2l6ZW9mKG90SXA2QWRkcmVzcykpOworICAgIAorICAgIG90RXJyb3IgcmVzdWx0ID0gCisgICAgICAgIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX1NFTkRfQUNUSVZFX0dFVCwgQnVmZmVyLCBCdWZmZXJTaXplLCBudWxscHRyLCAwKSk7CisKKyAgICBmcmVlKEJ1ZmZlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdERhdGFzZXRTZW5kTWdtdEFjdGl2ZVNldCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0LCAKKyAgICBjb25zdCB1aW50OF90ICphVGx2cywKKyAgICB1aW50OF90IGFMZW5ndGgKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyIHx8IGFEYXRhc2V0ID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgaWYgKGFUbHZzID09IG51bGxwdHIgJiYgYUxlbmd0aCAhPSAwKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIAorICAgIERXT1JEIEJ1ZmZlclNpemUgPSBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aDsKKyAgICBQQllURSBCdWZmZXIgPSAoUEJZVEUpbWFsbG9jKEJ1ZmZlclNpemUpOworICAgIGlmIChCdWZmZXIgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBtZW1jcHlfcyhCdWZmZXIsIEJ1ZmZlclNpemUsICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpLCBhRGF0YXNldCwgc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCksICZhTGVuZ3RoLCBzaXplb2YoYUxlbmd0aCkpOworICAgIGlmIChhTGVuZ3RoID4gMCkKKyAgICAgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSArIHNpemVvZih1aW50OF90KSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkgLSBzaXplb2YodWludDhfdCksIGFUbHZzLCBhTGVuZ3RoKTsKKyAgICAKKyAgICBvdEVycm9yIHJlc3VsdCA9IAorICAgICAgICBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9TRU5EX0FDVElWRV9TRVQsIEJ1ZmZlciwgQnVmZmVyU2l6ZSwgbnVsbHB0ciwgMCkpOworCisgICAgZnJlZShCdWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nR2V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphVGx2VHlwZXMsIAorICAgIHVpbnQ4X3QgYUxlbmd0aCwKKyAgICBfSW5fb3B0XyBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBpZiAoYVRsdlR5cGVzID09IG51bGxwdHIgJiYgYUxlbmd0aCAhPSAwKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIAorICAgIERXT1JEIEJ1ZmZlclNpemUgPSBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoOworICAgIGlmIChhQWRkcmVzcykgQnVmZmVyU2l6ZSArPSBzaXplb2Yob3RJcDZBZGRyZXNzKTsKKyAgICBQQllURSBCdWZmZXIgPSAoUEJZVEUpbWFsbG9jKEJ1ZmZlclNpemUpOworICAgIGlmIChCdWZmZXIgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBtZW1jcHlfcyhCdWZmZXIsIEJ1ZmZlclNpemUsICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpLCAmYUxlbmd0aCwgc2l6ZW9mKGFMZW5ndGgpKTsKKyAgICBpZiAoYUxlbmd0aCA+IDApCisgICAgICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZih1aW50OF90KSwgYVRsdlR5cGVzLCBhTGVuZ3RoKTsKKyAgICBpZiAoYUFkZHJlc3MpCisgICAgICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSArIGFMZW5ndGgsIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2YodWludDhfdCkgLSBhTGVuZ3RoLCBhQWRkcmVzcywgc2l6ZW9mKG90SXA2QWRkcmVzcykpOworICAgIAorICAgIG90RXJyb3IgcmVzdWx0ID0gCisgICAgICAgIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX1NFTkRfUEVORElOR19HRVQsIEJ1ZmZlciwgQnVmZmVyU2l6ZSwgbnVsbHB0ciwgMCkpOworCisgICAgZnJlZShCdWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nU2V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQsIAorICAgIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLAorICAgIHVpbnQ4X3QgYUxlbmd0aAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIgfHwgYURhdGFzZXQgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBpZiAoYVRsdnMgPT0gbnVsbHB0ciAmJiBhTGVuZ3RoICE9IDApIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgCisgICAgRFdPUkQgQnVmZmVyU2l6ZSA9IHNpemVvZihHVUlEKSArIHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkgKyBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoOworICAgIFBCWVRFIEJ1ZmZlciA9IChQQllURSltYWxsb2MoQnVmZmVyU2l6ZSk7CisgICAgaWYgKEJ1ZmZlciA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfTk9fQlVGUzsKKworICAgIG1lbWNweV9zKEJ1ZmZlciwgQnVmZmVyU2l6ZSwgJmFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgc2l6ZW9mKEdVSUQpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCksIGFEYXRhc2V0LCBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpIC0gc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSwgJmFMZW5ndGgsIHNpemVvZihhTGVuZ3RoKSk7CisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgICAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpICsgc2l6ZW9mKHVpbnQ4X3QpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpIC0gc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSAtIHNpemVvZih1aW50OF90KSwgYVRsdnMsIGFMZW5ndGgpOworICAgIAorICAgIG90RXJyb3IgcmVzdWx0ID0gCisgICAgICAgIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX1NFTkRfUEVORElOR19TRVQsIEJ1ZmZlciwgQnVmZmVyU2l6ZSwgbnVsbHB0ciwgMCkpOworCisgICAgZnJlZShCdWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UQVBJIAordWludDMyX3QgCitPVENBTEwKK290TGlua0dldFBvbGxQZXJpb2QoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDMyX3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUE9MTF9QRVJJT0QsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RMaW5rU2V0UG9sbFBlcmlvZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgdWludDMyX3QgYVBvbGxQZXJpb2QKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9QT0xMX1BFUklPRCwgYVBvbGxQZXJpb2QpOworfQorCitPVEFQSQordWludDhfdCAKK09UQ0FMTAorb3RUaHJlYWRHZXRMb2NhbExlYWRlcldlaWdodCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50OF90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0xPQ0FMX0xFQURFUl9XRUlHSFQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJCit2b2lkIAorT1RDQUxMCitvdFRocmVhZFNldExvY2FsTGVhZGVyV2VpZ2h0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFXZWlnaHQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9MT0NBTF9MRUFERVJfV0VJR0hULCBhV2VpZ2h0KTsKK30KKworT1RBUEkgCit1aW50MzJfdCAKK09UQ0FMTAorb3RUaHJlYWRHZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQzMl90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0xPQ0FMX0xFQURFUl9QQVJUSVRJT05fSUQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RUaHJlYWRTZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MzJfdCBhUGFydGl0aW9uSWQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9MT0NBTF9MRUFERVJfUEFSVElUSU9OX0lELCBhUGFydGl0aW9uSWQpOworfQorCitPVEFQSSAKK3VpbnQxNl90IAorT1RDQUxMIAorb3RUaHJlYWRHZXRKb2luZXJVZHBQb3J0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCispCit7CisgICAgdWludDE2X3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfSk9JTkVSX1VEUF9QT1JULCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwgCitvdFRocmVhZFNldEpvaW5lclVkcFBvcnQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQxNl90IGFKb2luZXJVZHBQb3J0CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfSk9JTkVSX1VEUF9QT1JULCBhSm9pbmVyVWRwUG9ydCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdEJvcmRlclJvdXRlckFkZE9uTWVzaFByZWZpeCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9BRERfQk9SREVSX1JPVVRFUiwgYUNvbmZpZykpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdEJvcmRlclJvdXRlclJlbW92ZU9uTWVzaFByZWZpeCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RJcDZQcmVmaXggKmFQcmVmaXgKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9SRU1PVkVfQk9SREVSX1JPVVRFUiwgYVByZWZpeCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdEJvcmRlclJvdXRlckFkZFJvdXRlKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdEV4dGVybmFsUm91dGVDb25maWcgKmFDb25maWcKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9BRERfRVhURVJOQUxfUk9VVEUsIGFDb25maWcpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RCb3JkZXJSb3V0ZXJSZW1vdmVSb3V0ZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RJcDZQcmVmaXggKmFQcmVmaXgKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9SRU1PVkVfRVhURVJOQUxfUk9VVEUsIGFQcmVmaXgpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RCb3JkZXJSb3V0ZXJSZWdpc3RlcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1NFTkRfU0VSVkVSX0RBVEEpKTsKK30KKworT1RBUEkKK3VpbnQzMl90IAorT1RDQUxMCitvdFRocmVhZEdldENvbnRleHRJZFJldXNlRGVsYXkoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDMyX3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ09OVEVYVF9JRF9SRVVTRV9ERUxBWSwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3ZvaWQgCitPVENBTEwKK290VGhyZWFkU2V0Q29udGV4dElkUmV1c2VEZWxheSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgdWludDMyX3QgYURlbGF5CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ09OVEVYVF9JRF9SRVVTRV9ERUxBWSwgYURlbGF5KTsKK30KKworT1RBUEkKK3VpbnQzMl90IAorT1RDQUxMCitvdFRocmVhZEdldEtleVNlcXVlbmNlQ291bnRlcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50MzJfdCBSZXN1bHQgPSAwOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3ZvaWQgCitPVENBTEwKK290VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2VDb3VudGVyCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfS0VZX1NFUVVFTkNFX0NPVU5URVIsIGFLZXlTZXF1ZW5jZUNvdW50ZXIpOworfQorCitPVEFQSQordWludDMyX3QgCitPVENBTEwKK290VGhyZWFkR2V0S2V5U3dpdGNoR3VhcmRUaW1lKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQzMl90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0tFWV9TV0lUQ0hfR1VBUkRUSU1FLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSQordm9pZCAKK09UQ0FMTAorb3RUaHJlYWRTZXRLZXlTd2l0Y2hHdWFyZFRpbWUoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQzMl90IGFLZXlTd2l0Y2hHdWFyZFRpbWUKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9LRVlfU1dJVENIX0dVQVJEVElNRSwgYUtleVN3aXRjaEd1YXJkVGltZSk7Cit9CisKK09UQVBJCit1aW50OF90CitPVENBTEwKK290VGhyZWFkR2V0TmV0d29ya0lkVGltZW91dCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50OF90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX05FVFdPUktfSURfVElNRU9VVCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3ZvaWQgCitPVENBTEwKK290VGhyZWFkU2V0TmV0d29ya0lkVGltZW91dCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgdWludDhfdCBhVGltZW91dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX05FVFdPUktfSURfVElNRU9VVCwgYVRpbWVvdXQpOworfQorCitPVEFQSQordWludDhfdCAKK09UQ0FMTAorb3RUaHJlYWRHZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQ4X3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xELCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSQordm9pZCAKK09UQ0FMTAorb3RUaHJlYWRTZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFUaHJlc2hvbGQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9ST1VURVJfVVBHUkFERV9USFJFU0hPTEQsIGFUaHJlc2hvbGQpOworfQorCitPVEFQSSAKK3VpbnQ4X3QgCitPVENBTEwKK290VGhyZWFkR2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQ4X3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RUaHJlYWRTZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQ4X3QgYVRocmVzaG9sZAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xELCBhVGhyZXNob2xkKTsKK30KKworT1RBUEkgCit1aW50OF90IAorT1RDQUxMCitvdFRocmVhZEdldFJvdXRlclNlbGVjdGlvbkppdHRlcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50OF90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSSAKK3ZvaWQgCitPVENBTEwKK290VGhyZWFkU2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFSb3V0ZXJKaXR0ZXIKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUiwgYVJvdXRlckppdHRlcik7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkUmVsZWFzZVJvdXRlcklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFSb3V0ZXJJZAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JFTEVBU0VfUk9VVEVSX0lELCBhUm91dGVySWQpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RMaW5rQWRkV2hpdGVsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphRXh0QWRkcgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0FERF9NQUNfV0hJVEVMSVNULCAoY29uc3Qgb3RFeHRBZGRyZXNzKilhRXh0QWRkcikpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdExpbmtBZGRXaGl0ZWxpc3RSc3NpKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphRXh0QWRkciwgCisgICAgaW50OF90IGFSc3NpCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAKKyAgICBQYWNrZWRCdWZmZXIzPEdVSUQsb3RFeHRBZGRyZXNzLGludDhfdD4gQnVmZmVyKGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgKihvdEV4dEFkZHJlc3MqKWFFeHRBZGRyLCBhUnNzaSk7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX0FERF9NQUNfV0hJVEVMSVNULCAmQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgbnVsbHB0ciwgMCkpOworfQorCitPVEFQSQordm9pZCAKK09UQ0FMTAorb3RMaW5rUmVtb3ZlV2hpdGVsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphRXh0QWRkcgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JFTU9WRV9NQUNfV0hJVEVMSVNULCAoY29uc3Qgb3RFeHRBZGRyZXNzKilhRXh0QWRkcik7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290TGlua0dldFdoaXRlbGlzdEVudHJ5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFJbmRleCwgCisgICAgX091dF8gb3RNYWNXaGl0ZWxpc3RFbnRyeSAqYUVudHJ5CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NQUNfV0hJVEVMSVNUX0VOVFJZLCAmYUluZGV4LCBhRW50cnkpKTsKK30KKworT1RBUEkKK3ZvaWQgCitPVENBTEwKK290TGlua0NsZWFyV2hpdGVsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ0xFQVJfTUFDX1dISVRFTElTVCk7Cit9CisKK09UQVBJCit2b2lkIAorT1RDQUxMCitvdExpbmtTZXRXaGl0ZWxpc3RFbmFibGVkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLAorICAgIGJvb2wgYUVuYWJsZWQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NQUNfV0hJVEVMSVNUX0VOQUJMRUQsIChCT09MRUFOKWFFbmFibGVkKTsKK30KKworT1RBUEkKK2Jvb2wgCitPVENBTEwKK290TGlua0lzV2hpdGVsaXN0RW5hYmxlZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBCT09MRUFOIFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BQ19XSElURUxJU1RfRU5BQkxFRCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdCAhPSBGQUxTRTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRCZWNvbWVEZXRhY2hlZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0RFVklDRV9ST0xFLCAodWludDhfdClPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEJlY29tZUNoaWxkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfREVWSUNFX1JPTEUsICh1aW50OF90KU9UX0RFVklDRV9ST0xFX0NISUxEKSk7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkQmVjb21lUm91dGVyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfREVWSUNFX1JPTEUsICh1aW50OF90KU9UX0RFVklDRV9ST0xFX1JPVVRFUikpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEJlY29tZUxlYWRlcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0RFVklDRV9ST0xFLCAodWludDhfdClPVF9ERVZJQ0VfUk9MRV9MRUFERVIpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RMaW5rQWRkQmxhY2tsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphRXh0QWRkcgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0FERF9NQUNfQkxBQ0tMSVNULCAoY29uc3Qgb3RFeHRBZGRyZXNzKilhRXh0QWRkcikpOworfQorCitPVEFQSQordm9pZCAKK09UQ0FMTAorb3RMaW5rUmVtb3ZlQmxhY2tsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphRXh0QWRkcgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JFTU9WRV9NQUNfQkxBQ0tMSVNULCAoY29uc3Qgb3RFeHRBZGRyZXNzKilhRXh0QWRkcik7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290TGlua0dldEJsYWNrbGlzdEVudHJ5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFJbmRleCwgCisgICAgX091dF8gb3RNYWNCbGFja2xpc3RFbnRyeSAqYUVudHJ5CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NQUNfQkxBQ0tMSVNUX0VOVFJZLCAmYUluZGV4LCBhRW50cnkpKTsKK30KKworT1RBUEkKK3ZvaWQgCitPVENBTEwKK290TGlua0NsZWFyQmxhY2tsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ0xFQVJfTUFDX0JMQUNLTElTVCk7Cit9CisKK09UQVBJCit2b2lkIAorT1RDQUxMCitvdExpbmtTZXRCbGFja2xpc3RFbmFibGVkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLAorICAgIGJvb2wgYUVuYWJsZWQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NQUNfQkxBQ0tMSVNUX0VOQUJMRUQsIChCT09MRUFOKWFFbmFibGVkKTsKK30KKworT1RBUEkKK2Jvb2wgCitPVENBTEwKK290TGlua0lzQmxhY2tsaXN0RW5hYmxlZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBCT09MRUFOIFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BQ19CTEFDS0xJU1RfRU5BQkxFRCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdCAhPSBGQUxTRTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdExpbmtHZXRBc3NpZ25MaW5rUXVhbGl0eSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3QgdWludDhfdCAqYUV4dEFkZHIsIAorICAgIF9PdXRfIHVpbnQ4X3QgKmFMaW5rUXVhbGl0eQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQVNTSUdOX0xJTktfUVVBTElUWSwgKG90RXh0QWRkcmVzcyopYUV4dEFkZHIsIGFMaW5rUXVhbGl0eSkpOworfQorCitPVEFQSSAKK3ZvaWQgCitPVENBTEwKK290TGlua1NldEFzc2lnbkxpbmtRdWFsaXR5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLAorICAgIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCAKKyAgICB1aW50OF90IGFMaW5rUXVhbGl0eQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybjsKKyAgICBQYWNrZWRCdWZmZXIzPEdVSUQsb3RFeHRBZGRyZXNzLHVpbnQ4X3Q+IEJ1ZmZlcihhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsICoob3RFeHRBZGRyZXNzKilhRXh0QWRkciwgYUxpbmtRdWFsaXR5KTsKKyAgICAodm9pZClTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX0FTU0lHTl9MSU5LX1FVQUxJVFksICZCdWZmZXIsIHNpemVvZihCdWZmZXIpLCBudWxscHRyLCAwKTsKK30KKworT1RBUEkgCit2b2lkIAorT1RDQUxMCitvdEluc3RhbmNlUmVzZXQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9QTEFURk9STV9SRVNFVCk7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RJbnN0YW5jZUZhY3RvcnlSZXNldCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0ZBQ1RPUllfUkVTRVQpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEdldENoaWxkSW5mb0J5SWQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQxNl90IGFDaGlsZElkLCAKKyAgICBfT3V0XyBvdENoaWxkSW5mbyAqYUNoaWxkSW5mbworICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ0hJTERfSU5GT19CWV9JRCwgJmFDaGlsZElkLCBhQ2hpbGRJbmZvKSk7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkR2V0Q2hpbGRJbmZvQnlJbmRleCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgdWludDhfdCBhQ2hpbGRJbmRleCwgCisgICAgX091dF8gb3RDaGlsZEluZm8gKmFDaGlsZEluZm8KKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0NISUxEX0lORk9fQllfSU5ERVgsICZhQ2hpbGRJbmRleCwgYUNoaWxkSW5mbykpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEdldE5leHROZWlnaGJvckluZm8oCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgX0lub3V0XyBvdE5laWdoYm9ySW5mb0l0ZXJhdG9yICphSXRlcmF0b3IsCisgICAgX091dF8gb3ROZWlnaGJvckluZm8gKmFJbmZvCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFJdGVyYXRvcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhSW5mbyk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgLy8gVE9ETworfQorCitPVEFQSQorb3REZXZpY2VSb2xlIAorT1RDQUxMCitvdFRocmVhZEdldERldmljZVJvbGUoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDhfdCBSZXN1bHQgPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfREVWSUNFX1JPTEUsICZSZXN1bHQpOworICAgIHJldHVybiAob3REZXZpY2VSb2xlKVJlc3VsdDsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRHZXRFaWRDYWNoZUVudHJ5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFJbmRleCwgCisgICAgX091dF8gb3RFaWRDYWNoZUVudHJ5ICphRW50cnkKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0VJRF9DQUNIRV9FTlRSWSwgJmFJbmRleCwgYUVudHJ5KSk7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkR2V0TGVhZGVyRGF0YSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgX091dF8gb3RMZWFkZXJEYXRhICphTGVhZGVyRGF0YQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTEVBREVSX0RBVEEsIGFMZWFkZXJEYXRhKSk7Cit9CisKK09UQVBJCit1aW50OF90IAorT1RDQUxMCitvdFRocmVhZEdldExlYWRlclJvdXRlcklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQ4X3QgUmVzdWx0ID0gMHhGRjsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTEVBREVSX1JPVVRFUl9JRCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQ4X3QgCitPVENBTEwKK290VGhyZWFkR2V0TGVhZGVyV2VpZ2h0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQ4X3QgUmVzdWx0ID0gMHhGRjsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTEVBREVSX1dFSUdIVCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQ4X3QgCitPVENBTEwKK290TmV0RGF0YUdldFZlcnNpb24oCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDhfdCBSZXN1bHQgPSAweEZGOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9ORVRXT1JLX0RBVEFfVkVSU0lPTiwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQzMl90IAorT1RDQUxMCitvdFRocmVhZEdldFBhcnRpdGlvbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQzMl90IFJlc3VsdCA9IDB4RkZGRkZGRkY7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1BBUlRJVElPTl9JRCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQxNl90IAorT1RDQUxMCitvdFRocmVhZEdldFJsb2MxNigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50MTZfdCBSZXN1bHQgPSAweEZGRkY7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JMT0MxNiwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQ4X3QgCitPVENBTEwKK290VGhyZWFkR2V0Um91dGVySWRTZXF1ZW5jZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50OF90IFJlc3VsdCA9IDB4RkY7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JPVVRFUl9JRF9TRVFVRU5DRSwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRHZXRSb3V0ZXJJbmZvKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MTZfdCBhUm91dGVySWQsIAorICAgIF9PdXRfIG90Um91dGVySW5mbyAqYVJvdXRlckluZm8KKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JPVVRFUl9JTkZPLCAmYVJvdXRlcklkLCBhUm91dGVySW5mbykpOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290VGhyZWFkR2V0UGFyZW50SW5mbygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgX091dF8gb3RSb3V0ZXJJbmZvICphUGFyZW50SW5mbworICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yob3RSb3V0ZXJJbmZvKSA9PSAyMCwgIlRoZSBzaXplIG9mIG90Um91dGVySW5mbyBzaG91bGQgYmUgMjAgYnl0ZXMiKTsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9QQVJFTlRfSU5GTywgYVBhcmVudEluZm8pKTsKK30KKworT1RBUEkKK3VpbnQ4X3QgCitPVENBTEwKK290TmV0RGF0YUdldFN0YWJsZVZlcnNpb24oCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDhfdCBSZXN1bHQgPSAweEZGOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT04sICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJCitjb25zdCBvdE1hY0NvdW50ZXJzKgorT1RDQUxMCitvdExpbmtHZXRDb3VudGVycygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgb3RNYWNDb3VudGVycyogYUNvdW50ZXJzID0gKG90TWFjQ291bnRlcnMqKW1hbGxvYyhzaXplb2Yob3RNYWNDb3VudGVycykpOworICAgIGlmIChhQ291bnRlcnMpCisgICAgeworICAgICAgICBpZiAoRVJST1JfU1VDQ0VTUyAhPSBRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTUFDX0NPVU5URVJTLCBhQ291bnRlcnMpKQorICAgICAgICB7CisgICAgICAgICAgICBmcmVlKGFDb3VudGVycyk7CisgICAgICAgICAgICBhQ291bnRlcnMgPSBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhQ291bnRlcnM7Cit9CisKK09UQVBJCit2b2lkCitPVENBTEwKK290TWVzc2FnZUdldEJ1ZmZlckluZm8oCisgICAgX0luXyBvdEluc3RhbmNlICosCisgICAgX091dF8gb3RCdWZmZXJJbmZvICphQnVmZmVySW5mbworICAgICkKK3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MKKyAgICBaZXJvTWVtb3J5KGFCdWZmZXJJbmZvLCBzaXplb2Yob3RCdWZmZXJJbmZvKSk7Cit9CisKK09UQVBJCitib29sIAorT1RDQUxMCitvdElzSXA2QWRkcmVzc0VxdWFsKAorICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYSwgCisgICAgY29uc3Qgb3RJcDZBZGRyZXNzICpiCisgICAgKQoreworICAgIHJldHVybiBtZW1jbXAoYS0+bUZpZWxkcy5tOCwgYi0+bUZpZWxkcy5tOCwgc2l6ZW9mKG90SXA2QWRkcmVzcykpID09IDA7Cit9CisKK09UQVBJCitvdEVycm9yIAorT1RDQUxMCitvdElwNkFkZHJlc3NGcm9tU3RyaW5nKAorICAgIGNvbnN0IGNoYXIgKnN0ciwgCisgICAgb3RJcDZBZGRyZXNzICphZGRyZXNzCisgICAgKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihhZGRyZXNzLT5tRmllbGRzLm04KTsKKyAgICB1aW50OF90ICplbmRwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGFkZHJlc3MtPm1GaWVsZHMubTggKyAxNSk7CisgICAgdWludDhfdCAqY29sb25wID0gTlVMTDsKKyAgICB1aW50MTZfdCB2YWwgPSAwOworICAgIHVpbnQ4X3QgY291bnQgPSAwOworICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgIGNoYXIgY2g7CisgICAgdWludDhfdCBkOworCisgICAgbWVtc2V0KGFkZHJlc3MtPm1GaWVsZHMubTgsIDAsIDE2KTsKKworICAgIGRzdC0tOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGNoID0gKnN0cisrOworICAgICAgICBkID0gY2ggJiAweGY7CisKKyAgICAgICAgaWYgKCgnYScgPD0gY2ggJiYgY2ggPD0gJ2YnKSB8fCAoJ0EnIDw9IGNoICYmIGNoIDw9ICdGJykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGQgKz0gOTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjaCA9PSAnOicgfHwgY2ggPT0gJ1wwJyB8fCBjaCA9PSAnICcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZHN0ICsgMiA+IGVuZHApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFOworICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICooZHN0ICsgMSkgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwgPj4gOCk7CisgICAgICAgICAgICAgICAgKihkc3QgKyAyKSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgICAgICAgICAgICAgZHN0ICs9IDI7CisgICAgICAgICAgICAgICAgY291bnQgPSAwOworICAgICAgICAgICAgICAgIHZhbCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnOicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCEoY29sb25wID09IG51bGxwdHIgfHwgZmlyc3QpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2xvbnAgPSBkc3Q7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PSAnXDAnIHx8IGNoID09ICcgJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoISgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIHZhbCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigodmFsIDw8IDQpIHwgZCk7CisgICAgICAgIGlmICghKCsrY291bnQgPD0gNCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0U7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAoY29sb25wICYmIGRzdCA+IGNvbG9ucCkKKyAgICB7CisgICAgICAgICplbmRwLS0gPSAqZHN0LS07CisgICAgfQorCisgICAgd2hpbGUgKGVuZHAgPiBkc3QpCisgICAgeworICAgICAgICAqZW5kcC0tID0gMDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitPVEFQSSAKK3VpbnQ4X3QgCitPVENBTEwKK290SXA2UHJlZml4TWF0Y2goCisgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphRmlyc3QsIAorICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYVNlY29uZAorICAgICkKK3sKKyAgICB1aW50OF90IHJ2YWwgPSAwOworICAgIHVpbnQ4X3QgZGlmZjsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHNpemVvZihvdElwNkFkZHJlc3MpOyBpKyspCisgICAgeworICAgICAgICBkaWZmID0gYUZpcnN0LT5tRmllbGRzLm04W2ldIF4gYVNlY29uZC0+bUZpZWxkcy5tOFtpXTsKKworICAgICAgICBpZiAoZGlmZiA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBydmFsICs9IDg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoKGRpZmYgJiAweDgwKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJ2YWwrKzsKKyAgICAgICAgICAgICAgICBkaWZmIDw8PSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBydmFsOworfQorCitPVEFQSQorY29uc3QgY2hhciAqCitPVENBTEwKK290VGhyZWFkRXJyb3JUb1N0cmluZygKKyAgICBvdEVycm9yIGFFcnJvcgorICAgICkKK3sKKyAgICBjb25zdCBjaGFyICpyZXR2YWw7CisKKyAgICBzd2l0Y2ggKGFFcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICByZXR2YWwgPSAiTm9uZSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9GQUlMRUQ6CisgICAgICAgIHJldHZhbCA9ICJGYWlsZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRFJPUDoKKyAgICAgICAgcmV0dmFsID0gIkRyb3AiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzoKKyAgICAgICAgcmV0dmFsID0gIk5vQnVmcyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT19ST1VURToKKyAgICAgICAgcmV0dmFsID0gIk5vUm91dGUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQlVTWToKKyAgICAgICAgcmV0dmFsID0gIkJ1c3kiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfUEFSU0U6CisgICAgICAgIHJldHZhbCA9ICJQYXJzZSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9JTlZBTElEX0FSR1M6CisgICAgICAgIHJldHZhbCA9ICJJbnZhbGlkQXJncyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9TRUNVUklUWToKKyAgICAgICAgcmV0dmFsID0gIlNlY3VyaXR5IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0FERFJFU1NfUVVFUlk6CisgICAgICAgIHJldHZhbCA9ICJBZGRyZXNzUXVlcnkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQUREUkVTUzoKKyAgICAgICAgcmV0dmFsID0gIk5vQWRkcmVzcyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9BQk9SVDoKKyAgICAgICAgcmV0dmFsID0gIkFib3J0IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDoKKyAgICAgICAgcmV0dmFsID0gIk5vdEltcGxlbWVudGVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0lOVkFMSURfU1RBVEU6CisgICAgICAgIHJldHZhbCA9ICJJbnZhbGlkU3RhdGUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQUNLOgorICAgICAgICByZXR2YWwgPSAiTm9BY2siOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRToKKyAgICAgICAgcmV0dmFsID0gIkNoYW5uZWxBY2Nlc3NGYWlsdXJlIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0RFVEFDSEVEOgorICAgICAgICByZXR2YWwgPSAiRGV0YWNoZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRkNTOgorICAgICAgICByZXR2YWwgPSAiRmNzRXJyIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PX0ZSQU1FX1JFQ0VJVkVEOgorICAgICAgICByZXR2YWwgPSAiTm9GcmFtZVJlY2VpdmVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1VOS05PV05fTkVJR0hCT1I6CisgICAgICAgIHJldHZhbCA9ICJVbmtub3duTmVpZ2hib3IiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfSU5WQUxJRF9TT1VSQ0VfQUREUkVTUzoKKyAgICAgICAgcmV0dmFsID0gIkludmFsaWRTb3VyY2VBZGRyZXNzIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1dISVRFTElTVF9GSUxURVJFRDoKKyAgICAgICAgcmV0dmFsID0gIldoaXRlbGlzdEZpbHRlcmVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0RFU1RJTkFUSU9OX0FERFJFU1NfRklMVEVSRUQ6CisgICAgICAgIHJldHZhbCA9ICJEZXN0aW5hdGlvbkFkZHJlc3NGaWx0ZXJlZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT1RfRk9VTkQ6CisgICAgICAgIHJldHZhbCA9ICJOb3RGb3VuZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9BTFJFQURZOgorICAgICAgICByZXR2YWwgPSAiQWxyZWFkeSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9CTEFDS0xJU1RfRklMVEVSRUQ6CisgICAgICAgIHJldHZhbCA9ICJCbGFja2xpc3RGaWx0ZXJlZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9JUDZfQUREUkVTU19DUkVBVElPTl9GQUlMVVJFOgorICAgICAgICByZXR2YWwgPSAiSXB2NkFkZHJlc3NDcmVhdGlvbkZhaWx1cmUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9UX0NBUEFCTEU6CisgICAgICAgIHJldHZhbCA9ICJOb3RDYXBhYmxlIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1JFU1BPTlNFX1RJTUVPVVQ6CisgICAgICAgIHJldHZhbCA9ICJSZXNwb25zZVRpbWVvdXQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRFVQTElDQVRFRDoKKyAgICAgICAgcmV0dmFsID0gIkR1cGxpY2F0ZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfR0VORVJJQzoKKyAgICAgICAgcmV0dmFsID0gIkdlbmVyaWNFcnJvciI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dmFsID0gIlVua25vd25FcnJvclR5cGUiOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwgCitvdFRocmVhZFNlbmREaWFnbm9zdGljR2V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFEZXN0aW5hdGlvbiwgCisgICAgY29uc3QgdWludDhfdCBhVGx2VHlwZXNbXSwKKyAgICB1aW50OF90IGFDb3VudAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIgfHwgYURlc3RpbmF0aW9uID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgaWYgKGFUbHZUeXBlcyA9PSBudWxscHRyICYmIGFDb3VudCAhPSAwKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIAorICAgIERXT1JEIEJ1ZmZlclNpemUgPSBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RJcDZBZGRyZXNzKSArIHNpemVvZih1aW50OF90KSArIGFDb3VudDsKKyAgICBQQllURSBCdWZmZXIgPSAoUEJZVEUpbWFsbG9jKEJ1ZmZlclNpemUpOworICAgIGlmIChCdWZmZXIgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBtZW1jcHlfcyhCdWZmZXIsIEJ1ZmZlclNpemUsICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpLCBhRGVzdGluYXRpb24sIHNpemVvZihvdElwNkFkZHJlc3MpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RJcDZBZGRyZXNzKSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZihvdElwNkFkZHJlc3MpLCAmYUNvdW50LCBzaXplb2YoYUNvdW50KSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2Yob3RJcDZBZGRyZXNzKSAtIHNpemVvZih1aW50OF90KSwgYVRsdlR5cGVzLCBhQ291bnQpOworICAgIAorICAgIG90RXJyb3IgcmVzdWx0ID0gCisgICAgICAgIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX1NFTkRfRElBR05PU1RJQ19HRVQsIEJ1ZmZlciwgQnVmZmVyU2l6ZSwgbnVsbHB0ciwgMCkpOworCisgICAgZnJlZShCdWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTCAKK290VGhyZWFkU2VuZERpYWdub3N0aWNSZXNldCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphRGVzdGluYXRpb24sIAorICAgIGNvbnN0IHVpbnQ4X3QgYVRsdlR5cGVzW10sCisgICAgdWludDhfdCBhQ291bnQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyIHx8IGFEZXN0aW5hdGlvbiA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIGlmIChhVGx2VHlwZXMgPT0gbnVsbHB0ciAmJiBhQ291bnQgIT0gMCkgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAKKyAgICBEV09SRCBCdWZmZXJTaXplID0gc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCkgKyBhQ291bnQ7CisgICAgUEJZVEUgQnVmZmVyID0gKFBCWVRFKW1hbGxvYyhCdWZmZXJTaXplKTsKKyAgICBpZiAoQnVmZmVyID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9OT19CVUZTOworCisgICAgbWVtY3B5X3MoQnVmZmVyLCBCdWZmZXJTaXplLCAmYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBzaXplb2YoR1VJRCkpOworICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSwgYURlc3RpbmF0aW9uLCBzaXplb2Yob3RJcDZBZGRyZXNzKSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKG90SXA2QWRkcmVzcyksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2Yob3RJcDZBZGRyZXNzKSwgJmFDb3VudCwgc2l6ZW9mKGFDb3VudCkpOworICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZihvdElwNkFkZHJlc3MpICsgc2l6ZW9mKHVpbnQ4X3QpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpIC0gc2l6ZW9mKG90SXA2QWRkcmVzcykgLSBzaXplb2YodWludDhfdCksIGFUbHZUeXBlcywgYUNvdW50KTsKKyAgICAKKyAgICBvdEVycm9yIHJlc3VsdCA9IAorICAgICAgICBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9TRU5EX0RJQUdOT1NUSUNfUkVTRVQsIEJ1ZmZlciwgQnVmZmVyU2l6ZSwgbnVsbHB0ciwgMCkpOworCisgICAgZnJlZShCdWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RDb21taXNzaW9uZXJTdGFydCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX1NUQVJUKSk7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RDb21taXNzaW9uZXJBZGRKb2luZXIoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIGNvbnN0IG90RXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MsIAorICAgIGNvbnN0IGNoYXIgKmFQU0tkLAorICAgIHVpbnQzMl90IGFUaW1lb3V0CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0ciB8fCBhUFNLZCA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgc2l6ZV90IGFQU0tkTGVuZ3RoID0gc3RybmxlbihhUFNLZCwgT1BFTlRIUkVBRF9QU0tfTUFYX0xFTkdUSCArIDEpOworICAgIGlmIChhUFNLZExlbmd0aCA+IE9QRU5USFJFQURfUFNLX01BWF9MRU5HVEgpCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIH0KKworICAgIHVpbnQ4X3QgYUV4dEFkZHJlc3NWYWxpZCA9IGFFeHRBZGRyZXNzID8gMSA6IDA7CisgICAgCisgICAgY29uc3QgVUxPTkcgQnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKG90RXh0QWRkcmVzcykgKyAoVUxPTkcpYVBTS2RMZW5ndGggKyAxICsgc2l6ZW9mKGFUaW1lb3V0KTsKKyAgICBCWVRFIEJ1ZmZlcltzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSArIE9QRU5USFJFQURfUFNLX01BWF9MRU5HVEggKyAxICsgc2l6ZW9mKGFUaW1lb3V0KV0gPSB7MH07CisgICAgbWVtY3B5X3MoQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgJmFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgc2l6ZW9mKEdVSUQpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCksIHNpemVvZihCdWZmZXIpIC0gc2l6ZW9mKEdVSUQpLCAmYUV4dEFkZHJlc3NWYWxpZCwgc2l6ZW9mKGFFeHRBZGRyZXNzVmFsaWQpKTsKKyAgICBpZiAoYUV4dEFkZHJlc3NWYWxpZCkKKyAgICAgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKHVpbnQ4X3QpLCBzaXplb2YoQnVmZmVyKSAtIHNpemVvZihHVUlEKSAtIHNpemVvZih1aW50OF90KSwgYUV4dEFkZHJlc3MsIHNpemVvZihvdEV4dEFkZHJlc3MpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSwgc2l6ZW9mKEJ1ZmZlcikgLSBzaXplb2YoR1VJRCkgLSBzaXplb2YodWludDhfdCkgLSBzaXplb2Yob3RFeHRBZGRyZXNzKSwgYVBTS2QsIGFQU0tkTGVuZ3RoKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSArIGFQU0tkTGVuZ3RoICsgMSwgc2l6ZW9mKEJ1ZmZlcikgLSBzaXplb2YoR1VJRCkgLSBzaXplb2YodWludDhfdCkgLSBzaXplb2Yob3RFeHRBZGRyZXNzKSAtIGFQU0tkTGVuZ3RoIC0gMSwgJmFUaW1lb3V0LCBzaXplb2YoYVRpbWVvdXQpKTsKKyAgICAKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfQUREX0pPSU5FUiwgQnVmZmVyLCBCdWZmZXJMZW5ndGgsIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdENvbW1pc3Npb25lclJlbW92ZUpvaW5lcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcworICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisKKyAgICB1aW50OF90IGFFeHRBZGRyZXNzVmFsaWQgPSBhRXh0QWRkcmVzcyA/IDEgOiAwOworICAgIAorICAgIEJZVEUgQnVmZmVyW3NpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSArIHNpemVvZihvdEV4dEFkZHJlc3MpXSA9IHswfTsKKyAgICBtZW1jcHlfcyhCdWZmZXIsIHNpemVvZihCdWZmZXIpLCAmYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBzaXplb2YoR1VJRCkpOworICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSwgc2l6ZW9mKEJ1ZmZlcikgLSBzaXplb2YoR1VJRCksICZhRXh0QWRkcmVzc1ZhbGlkLCBzaXplb2YoYUV4dEFkZHJlc3NWYWxpZCkpOworICAgIGlmIChhRXh0QWRkcmVzc1ZhbGlkKQorICAgICAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCksIHNpemVvZihCdWZmZXIpIC0gc2l6ZW9mKEdVSUQpIC0gc2l6ZW9mKHVpbnQ4X3QpLCBhRXh0QWRkcmVzcywgc2l6ZW9mKG90RXh0QWRkcmVzcykpOworCisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX1JFTU9WRV9KT0lORVIsIEJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdENvbW1pc3Npb25lclNldFByb3Zpc2lvbmluZ1VybCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBjb25zdCBjaGFyICphUHJvdmlzaW9uaW5nVXJsCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKworICAgIHNpemVfdCBhUHJvdmlzaW9uaW5nVXJsTGVuZ3RoID0gYVByb3Zpc2lvbmluZ1VybCA/IHN0cm5sZW4oYVByb3Zpc2lvbmluZ1VybCwgT1BFTlRIUkVBRF9QUk9WX1VSTF9NQVhfTEVOR1RIICsgMSkgOiAwOworICAgIGlmIChhUHJvdmlzaW9uaW5nVXJsTGVuZ3RoID4gT1BFTlRIUkVBRF9QUk9WX1VSTF9NQVhfTEVOR1RIKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICB9CisgICAgCisgICAgY29uc3QgVUxPTkcgQnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEdVSUQpICsgKFVMT05HKWFQcm92aXNpb25pbmdVcmxMZW5ndGggKyAxOworICAgIEJZVEUgQnVmZmVyW3NpemVvZihHVUlEKSArIE9QRU5USFJFQURfUFJPVl9VUkxfTUFYX0xFTkdUSCArIDFdID0gezB9OworICAgIG1lbWNweV9zKEJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSk7CisgICAgaWYgKGFQcm92aXNpb25pbmdVcmxMZW5ndGggPiAwKQorICAgICAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCksIHNpemVvZihCdWZmZXIpIC0gc2l6ZW9mKEdVSUQpLCBhUHJvdmlzaW9uaW5nVXJsLCBhUHJvdmlzaW9uaW5nVXJsTGVuZ3RoKTsKKyAgICAKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfUFJPVklTSU9OSU5HX1VSTCwgQnVmZmVyLCBCdWZmZXJMZW5ndGgsIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RDb21taXNzaW9uZXJBbm5vdW5jZUJlZ2luKAorICAgIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssCisgICAgdWludDhfdCBhQ291bnQsCisgICAgdWludDE2X3QgYVBlcmlvZCwKKyAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0ciB8fCBhQWRkcmVzcyA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgUGFja2VkQnVmZmVyNTxHVUlELHVpbnQzMl90LHVpbnQ4X3QsdWludDE2X3Qsb3RJcDZBZGRyZXNzPiBCdWZmZXIoYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhQ2hhbm5lbE1hc2ssIGFDb3VudCwgYVBlcmlvZCwgKmFBZGRyZXNzKTsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfQU5OT1VOQ0VfQkVHSU4sICZCdWZmZXIsIHNpemVvZihCdWZmZXIpLCBudWxscHRyLCAwKSk7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RDb21taXNzaW9uZXJTdG9wKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfU1RPUCkpOworfQorCitPVEFQSQorb3RFcnJvciAKK09UQ0FMTAorb3RDb21taXNzaW9uZXJFbmVyZ3lTY2FuKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIAorICAgIHVpbnQ4X3QgYUNvdW50LCAKKyAgICB1aW50MTZfdCBhUGVyaW9kLAorICAgIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sIAorICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MsCisgICAgX0luXyBvdENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrIGFDYWxsYmFjaywgCisgICAgX0luXyB2b2lkICphQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisKKyAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+U2V0Q2FsbGJhY2soCisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3MsCisgICAgICAgIGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgYUNhbGxiYWNrLCBhQ29udGV4dAorICAgICAgICApOworCisgICAgUGFja2VkQnVmZmVyNjxHVUlELHVpbnQzMl90LHVpbnQ4X3QsdWludDE2X3QsdWludDE2X3Qsb3RJcDZBZGRyZXNzPiBCdWZmZXIoYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhQ2hhbm5lbE1hc2ssIGFDb3VudCwgYVBlcmlvZCwgYVNjYW5EdXJhdGlvbiwgKmFBZGRyZXNzKTsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgSU9DVExfT1RMV0ZfT1RfQ09NTUlTU0lPTkVSX0VORVJHWV9TQ0FOLCAmQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgbnVsbHB0ciwgMCkpOworfQorCitPVEFQSQorb3RFcnJvciAKK09UQ0FMTAorb3RDb21taXNzaW9uZXJQYW5JZFF1ZXJ5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MTZfdCBhUGFuSWQsIAorICAgIHVpbnQzMl90IGFDaGFubmVsTWFzaywKKyAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzLAorICAgIF9Jbl8gb3RDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2sgYUNhbGxiYWNrLCAKKyAgICBfSW5fIHZvaWQgKmFDb250ZXh0CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKworICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5TZXRDYWxsYmFjaygKKyAgICAgICAgYUluc3RhbmNlLT5BcGlIYW5kbGUtPkNvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFja3MsCisgICAgICAgIGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgYUNhbGxiYWNrLCBhQ29udGV4dAorICAgICAgICApOworCisgICAgUGFja2VkQnVmZmVyNDxHVUlELHVpbnQxNl90LHVpbnQzMl90LG90SXA2QWRkcmVzcz4gQnVmZmVyKGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgYVBhbklkLCBhQ2hhbm5lbE1hc2ssICphQWRkcmVzcyk7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX0NPTU1JU1NJT05FUl9QQU5JRF9RVUVSWSwgJkJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMIAorb3RDb21taXNzaW9uZXJTZW5kTWdtdEdldCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIAorICAgIHVpbnQ4X3QgYUxlbmd0aAorKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBpZiAoYVRsdnMgPT0gbnVsbHB0ciAmJiBhTGVuZ3RoICE9IDApIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgCisgICAgRFdPUkQgQnVmZmVyU2l6ZSA9IHNpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSArIGFMZW5ndGg7CisgICAgUEJZVEUgQnVmZmVyID0gKFBCWVRFKW1hbGxvYyhCdWZmZXJTaXplKTsKKyAgICBpZiAoQnVmZmVyID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9OT19CVUZTOworCisgICAgbWVtY3B5X3MoQnVmZmVyLCBCdWZmZXJTaXplLCAmYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBzaXplb2YoR1VJRCkpOworICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSwgJmFMZW5ndGgsIHNpemVvZihhTGVuZ3RoKSk7CisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgICAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2YodWludDhfdCksIGFUbHZzLCBhTGVuZ3RoKTsKKyAgICAKKyAgICBvdEVycm9yIHJlc3VsdCA9IAorICAgICAgICBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9TRU5EX01HTVRfQ09NTUlTU0lPTkVSX0dFVCwgQnVmZmVyLCBCdWZmZXJTaXplLCBudWxscHRyLCAwKSk7CisKKyAgICBmcmVlKEJ1ZmZlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMIAorb3RDb21taXNzaW9uZXJTZW5kTWdtdFNldCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBjb25zdCBvdENvbW1pc3Npb25pbmdEYXRhc2V0ICphRGF0YXNldCwKKyAgICBjb25zdCB1aW50OF90ICphVGx2cywKKyAgICB1aW50OF90IGFMZW5ndGgKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyIHx8IGFEYXRhc2V0ID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgaWYgKGFUbHZzID09IG51bGxwdHIgJiYgYUxlbmd0aCAhPSAwKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIAorICAgIERXT1JEIEJ1ZmZlclNpemUgPSBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkgKyBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoOworICAgIFBCWVRFIEJ1ZmZlciA9IChQQllURSltYWxsb2MoQnVmZmVyU2l6ZSk7CisgICAgaWYgKEJ1ZmZlciA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfTk9fQlVGUzsKKworICAgIG1lbWNweV9zKEJ1ZmZlciwgQnVmZmVyU2l6ZSwgJmFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgc2l6ZW9mKEdVSUQpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCksIGFEYXRhc2V0LCBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkpOworICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZihvdENvbW1pc3Npb25pbmdEYXRhc2V0KSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZihvdENvbW1pc3Npb25pbmdEYXRhc2V0KSwgJmFMZW5ndGgsIHNpemVvZihhTGVuZ3RoKSk7CisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgICAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkgKyBzaXplb2YodWludDhfdCksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkgLSBzaXplb2YodWludDhfdCksIGFUbHZzLCBhTGVuZ3RoKTsKKyAgICAKKyAgICBvdEVycm9yIHJlc3VsdCA9IAorICAgICAgICBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9TRU5EX01HTVRfQ09NTUlTU0lPTkVSX1NFVCwgQnVmZmVyLCBCdWZmZXJTaXplLCBudWxscHRyLCAwKSk7CisKKyAgICBmcmVlKEJ1ZmZlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQxNl90CitPVENBTEwKK290Q29tbWlzc2lvbmVyR2V0U2Vzc2lvbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIDA7CisgICAgLy8gVE9ETworICAgIHJldHVybiAwOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290Sm9pbmVyU3RhcnQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgX051bGxfdGVybWluYXRlZF8gY29uc3QgY2hhciAqYVBTS2QsCisgICAgX051bGxfdGVybWluYXRlZF8gY29uc3QgY2hhciAqYVByb3Zpc2lvbmluZ1VybCwKKyAgICBfTnVsbF90ZXJtaW5hdGVkXyBjb25zdCBjaGFyICphVmVuZG9yTmFtZSwKKyAgICBfTnVsbF90ZXJtaW5hdGVkXyBjb25zdCBjaGFyICphVmVuZG9yTW9kZWwsCisgICAgX051bGxfdGVybWluYXRlZF8gY29uc3QgY2hhciAqYVZlbmRvclN3VmVyc2lvbiwKKyAgICBfTnVsbF90ZXJtaW5hdGVkXyBjb25zdCBjaGFyICphVmVuZG9yRGF0YSwKKyAgICBfSW5fIG90Sm9pbmVyQ2FsbGJhY2sgYUNhbGxiYWNrLAorICAgIF9Jbl8gdm9pZCAqYUNhbGxiYWNrQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIgfHwgYVBTS2QgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKworICAgIG90Q29tbWlzc2lvbkNvbmZpZyBjb25maWcgPSB7MH07CisKKyAgICBzaXplX3QgYVBTS2RMZW5ndGggPSBzdHJsZW4oYVBTS2QpOworICAgIHNpemVfdCBhUHJvdmlzaW9uaW5nVXJsTGVuZ3RoID0gYVByb3Zpc2lvbmluZ1VybCA9PSBudWxscHRyID8gMCA6IHN0cmxlbihhUHJvdmlzaW9uaW5nVXJsKTsKKyAgICBzaXplX3QgYVZlbmRvck5hbWVMZW5ndGggPSBhVmVuZG9yTmFtZSA9PSBudWxscHRyID8gMCA6IHN0cmxlbihhVmVuZG9yTmFtZSk7CisgICAgc2l6ZV90IGFWZW5kb3JNb2RlbExlbmd0aCA9IGFWZW5kb3JNb2RlbCA9PSBudWxscHRyID8gMCA6IHN0cmxlbihhVmVuZG9yTW9kZWwpOworICAgIHNpemVfdCBhVmVuZG9yU3dWZXJzaW9uTGVuZ3RoID0gYVZlbmRvclN3VmVyc2lvbiA9PSBudWxscHRyID8gMCA6IHN0cmxlbihhVmVuZG9yU3dWZXJzaW9uKTsKKyAgICBzaXplX3QgYVZlbmRvckRhdGFMZW5ndGggPSBhVmVuZG9yRGF0YSA9PSBudWxscHRyID8gMCA6IHN0cmxlbihhVmVuZG9yRGF0YSk7CisKKyAgICBpZiAoYVBTS2RMZW5ndGggPiBPUEVOVEhSRUFEX1BTS19NQVhfTEVOR1RIIHx8CisgICAgICAgIGFQcm92aXNpb25pbmdVcmxMZW5ndGggPiBPUEVOVEhSRUFEX1BST1ZfVVJMX01BWF9MRU5HVEggfHwKKyAgICAgICAgYVZlbmRvck5hbWVMZW5ndGggPiBPUEVOVEhSRUFEX1ZFTkRPUl9OQU1FX01BWF9MRU5HVEggfHwKKyAgICAgICAgYVZlbmRvck1vZGVsTGVuZ3RoID4gT1BFTlRIUkVBRF9WRU5ET1JfTU9ERUxfTUFYX0xFTkdUSCB8fAorICAgICAgICBhVmVuZG9yU3dWZXJzaW9uTGVuZ3RoID4gT1BFTlRIUkVBRF9WRU5ET1JfU1dfVkVSU0lPTl9NQVhfTEVOR1RIIHx8CisgICAgICAgIGFWZW5kb3JEYXRhTGVuZ3RoID4gT1BFTlRIUkVBRF9WRU5ET1JfREFUQV9NQVhfTEVOR1RIKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICB9CisKKyAgICBtZW1jcHlfcyhjb25maWcuUFNLZCwgc2l6ZW9mKGNvbmZpZy5QU0tkKSwgYVBTS2QsIGFQU0tkTGVuZ3RoKTsKKyAgICBtZW1jcHlfcyhjb25maWcuUHJvdmlzaW9uaW5nVXJsLCBzaXplb2YoY29uZmlnLlByb3Zpc2lvbmluZ1VybCksIGFQcm92aXNpb25pbmdVcmwsIGFQcm92aXNpb25pbmdVcmxMZW5ndGgpOworICAgIG1lbWNweV9zKGNvbmZpZy5WZW5kb3JOYW1lLCBzaXplb2YoY29uZmlnLlZlbmRvck5hbWUpLCBhVmVuZG9yTmFtZSwgYVZlbmRvck5hbWVMZW5ndGgpOworICAgIG1lbWNweV9zKGNvbmZpZy5WZW5kb3JNb2RlbCwgc2l6ZW9mKGNvbmZpZy5WZW5kb3JNb2RlbCksIGFWZW5kb3JNb2RlbCwgYVZlbmRvck1vZGVsTGVuZ3RoKTsKKyAgICBtZW1jcHlfcyhjb25maWcuVmVuZG9yU3dWZXJzaW9uLCBzaXplb2YoY29uZmlnLlZlbmRvclN3VmVyc2lvbiksIGFWZW5kb3JTd1ZlcnNpb24sIGFWZW5kb3JTd1ZlcnNpb25MZW5ndGgpOworICAgIG1lbWNweV9zKGNvbmZpZy5WZW5kb3JEYXRhLCBzaXplb2YoY29uZmlnLlZlbmRvckRhdGEpLCBhVmVuZG9yRGF0YSwgYVZlbmRvckRhdGFMZW5ndGgpOworCisgICAgYUluc3RhbmNlLT5BcGlIYW5kbGUtPlNldENhbGxiYWNrKAorICAgICAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+Sm9pbmVyQ2FsbGJhY2tzLAorICAgICAgICBhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIGFDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dAorICAgICAgICApOworCisgICAgYXV0byByZXQgPSBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9KT0lORVJfU1RBUlQsIChjb25zdCBvdENvbW1pc3Npb25Db25maWcqKSZjb25maWcpKTsKKworICAgIGlmIChyZXQgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5TZXRDYWxsYmFjaygKKyAgICAgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5Kb2luZXJDYWxsYmFja3MsCisgICAgICAgICAgICBhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIChvdEpvaW5lckNhbGxiYWNrKW51bGxwdHIsIChQVk9JRCludWxscHRyCisgICAgICAgICAgICApOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RKb2luZXJTdG9wKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfSk9JTkVSX1NUT1ApKTsKK30KKworT1RBUEkKK2ludDhfdAorT1RDQUxMCitvdFRocmVhZEdldFBhcmVudFByaW9yaXR5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCispCit7CisgICAgaW50OF90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1BBUkVOVF9QUklPUklUWSwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRTZXRQYXJlbnRQcmlvcml0eSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBpbnQ4X3QgYVBhcmVudFByaW9yaXR5CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUEFSRU5UX1BSSU9SSVRZLCBhUGFyZW50UHJpb3JpdHkpKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEFwaS9wcmVjb21wLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RBcGkvcHJlY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMDhlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RBcGkvcHJlY29tcC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIHN0ZGFmeC5oIDogaW5jbHVkZSBmaWxlIGZvciBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBmaWxlcywKKy8vIG9yIHByb2plY3Qgc3BlY2lmaWMgaW5jbHVkZSBmaWxlcyB0aGF0IGFyZSB1c2VkIGZyZXF1ZW50bHksIGJ1dAorLy8gYXJlIGNoYW5nZWQgaW5mcmVxdWVudGx5CisvLworCisjcHJhZ21hIG9uY2UKKworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6MjgzMDEpICAvLyBObyBhbm5vdGF0aW9ucyBmb3IgZmlyc3QgZGVjbGFyYXRpb24gb2YgKgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbm50Lmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJpcGRlZi5oPgorI2luY2x1ZGUgPElQSGxwQXBpLmg+CisjaW5jbHVkZSA8bXN0Y3BpcC5oPgorI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8dHVwbGU+CisKKy8vIERlZmluZSB0byBleHBvcnQgbmVjZXNzYXJ5IGZ1bmN0aW9ucworI2RlZmluZSBPVERMTAorI2RlZmluZSBPVEFQSSBFWFRFUk5fQyBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvYm9yZGVyX3JvdXRlci5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvZGF0YXNldF9mdGQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3RocmVhZF9mdGQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbW1pc3Npb25lci5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvam9pbmVyLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLXdpbmRvd3MuaD4KKworI2luY2x1ZGUgPHdpbmlvY3RsLmg+CisjaW5jbHVkZSA8b3RMd2ZJb2N0bC5oPgorI2luY2x1ZGUgPHJ0bHJlZmNvdW50Lmg+CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RDbGkvbWFpbi5jcHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RDbGkvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3MzM3NwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdENsaS9tYWluLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NsaS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vdWFydC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oPgorCitib29sIHNraXBOZXh0TGluZSA9IGZhbHNlOworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90Q2xpVWFydEluaXQoTlVMTCk7CisKKyAgICBjaGFyIGNtZFsxMDI0XSA9ICJcbiI7CisgICAgb3RQbGF0VWFydFJlY2VpdmVkKCh1aW50OF90KiljbWQsIDEpOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGNtZFswXSA9IDA7CisgICAgICAgIGlmIChOVUxMID09IGZnZXRzKGNtZCwgc2l6ZW9mKGNtZCksIHN0ZGluKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNpemVfdCBjbWRMZW4gPSBzdHJsZW4oY21kKTsKKyAgICAgICAgaWYgKGNtZExlbiA+PSBzaXplb2YoY21kKSkgY21kTGVuID0gc2l6ZW9mKGNtZCk7CisKKyAgICAgICAgaWYgKHN0cm5jbXAoY21kLCAiZXhpdCIsIDQpID09IDApIAorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc2tpcE5leHRMaW5lID0gdHJ1ZTsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKCh1aW50OF90KiljbWQsICh1aW50MTZfdCljbWRMZW4pOworICAgIH0KKworICAgIHJldHVybiBOT19FUlJPUjsKK30KKworRVhURVJOX0Mgb3RFcnJvciBvdFBsYXRVYXJ0RW5hYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK0VYVEVSTl9DIG90RXJyb3Igb3RQbGF0VWFydFNlbmQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmICghc2tpcE5leHRMaW5lKQorICAgIHsKKyAgICAgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGFCdWZMZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGZwdXRjKGFCdWZbaV0sIHN0ZG91dCk7CisgICAgfQorCisgICAgaWYgKGFCdWZbYUJ1Zkxlbmd0aCAtIDFdID09ICdcbicpCisgICAgICAgIHNraXBOZXh0TGluZSA9IGZhbHNlOworCisgICAgb3RQbGF0VWFydFNlbmREb25lKCk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0VYVEVSTl9DIHZvaWQgb3RQbGF0V2FrZUhvc3Qodm9pZCkKK3sKKworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2FkZHJlc3MuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9hZGRyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhYmFhMQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9hZGRyZXNzLmMKQEAgLTAsMCArMSw1MDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwcmVjb21wLmgiCisjaW5jbHVkZSAiYWRkcmVzcy50bWgiCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK0JPT0xFQU4gCitvdEx3Zk9uQWRkcmVzc0FkZGVkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLCAKKyAgICBfSW5fIGNvbnN0IG90TmV0aWZBZGRyZXNzKiBBZGRyLAorICAgIF9Jbl8gQk9PTEVBTiBVcGRhdGVXaW5kb3dzCisgICAgKQoreworICAgIGlmIChwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCA+PSBPVF9NQVhfQUREUkVTU0VTKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsaW5nIHRvIGFkZCBuZXcgYWRkcmVzcyBhcyB3ZSBoYXZlIHJlYWNoZWQgb3VyIG1heCEiKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBhZGRpbmcgYWRkcmVzczogJSFJUFY2QUREUiEgKCV1LWJpdCBwcmVmaXgpIiwgCisgICAgICAgICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkLCAKKyAgICAgICAgKFBJTjZfQUREUikmQWRkci0+bUFkZHJlc3MsCisgICAgICAgIEFkZHItPm1QcmVmaXhMZW5ndGgKKyAgICAgICAgKTsKKworICAgIC8vIFVwZGF0ZSBsb2NhbCBjYWNoZQorICAgIG1lbWNweShwRmlsdGVyLT5vdENhY2hlZEFkZHIgKyBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCwgQWRkciwgc2l6ZW9mKElONl9BRERSKSk7CisgICAgcEZpbHRlci0+b3RDYWNoZWRBZGRyQ291bnQrKzsKKworICAgIC8vIElmIHRoaXMgaXMgbGluayBsb2NhbCwgY2FjaGUgaXQgYXMgb3VyIGxpbmsgbG9jYWwgYWRkcmVzcworICAgIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoKFBJTjZfQUREUikmQWRkci0+bUFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCZwRmlsdGVyLT5vdExpbmtMb2NhbEFkZHIsIEFkZHIsIHNpemVvZihJTjZfQUREUikpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gVXBkYXRlIFdpbmRvd3MgaWYgbmVjZXNzYXJ5CisgICAgaWYgKFVwZGF0ZVdpbmRvd3MpCisgICAgeworICAgICAgICBOVFNUQVRVUyBzdGF0dXM7CisgICAgICAgIE1JQl9VTklDQVNUSVBBRERSRVNTX1JPVyBuZXdSb3c7CisgICAgICAgIE1JQl9JUEZPUldBUkRfUk9XMiBuZXdSb3V0ZVJvdzsKKyAgICAgICAgQ09NUEFSVE1FTlRfSUQgT3JpZ2luYWxDb21wYXJ0bWVudElEOworICAgICAgICBJbml0aWFsaXplVW5pY2FzdElwQWRkcmVzc0VudHJ5KCZuZXdSb3cpOworICAgICAgICBJbml0aWFsaXplSXBGb3J3YXJkRW50cnkoJm5ld1JvdXRlUm93KTsgCisKKyAgICAgICAgbmV3Um93LkludGVyZmFjZUluZGV4ID0gcEZpbHRlci0+SW50ZXJmYWNlSW5kZXg7CisgICAgICAgIG5ld1Jvdy5JbnRlcmZhY2VMdWlkID0gcEZpbHRlci0+SW50ZXJmYWNlTHVpZDsKKyAgICAgICAgbmV3Um93LkFkZHJlc3Muc2lfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIG5ld1Jvdy5BZGRyZXNzLklwdjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKElONl9BRERSKSA9PSBzaXplb2Yob3RJcDZBZGRyZXNzKSwgIldpbmRvd3MgYW5kIE9wZW5UaHJlYWQgSVB2NiBBZGRyIFN0cnVjdHMgbXVzdCBiZSBzYW1lIHNpemUiKTsKKworICAgICAgICBtZW1jcHkoJm5ld1Jvdy5BZGRyZXNzLklwdjYuc2luNl9hZGRyLCAmQWRkci0+bUFkZHJlc3MsIHNpemVvZihJTjZfQUREUikpOworICAgICAgICBuZXdSb3cuT25MaW5rUHJlZml4TGVuZ3RoID0gQWRkci0+bVByZWZpeExlbmd0aDsKKyAgICAgICAgbmV3Um93LlByZWZlcnJlZExpZmV0aW1lID0gQWRkci0+bVByZWZlcnJlZCA/IDB4ZmZmZmZmZmYgOiAwOworICAgICAgICBuZXdSb3cuVmFsaWRMaWZldGltZSA9IEFkZHItPm1WYWxpZCA/IDB4ZmZmZmZmZmYgOiAwOworICAgICAgICBuZXdSb3cuUHJlZml4T3JpZ2luID0gSXBQcmVmaXhPcmlnaW5PdGhlcjsgIC8vIERlcml2ZWQgZnJvbSBuZXR3b3JrIFhQQU5JRAorICAgICAgICBuZXdSb3cuU2tpcEFzU291cmNlID0gRkFMU0U7ICAgICAgICAgICAgICAgIC8vIEFsbG93IGF1dG9tYXRpYyBiaW5kaW5nIHRvIHRoaXMgYWRkcmVzcyAoZGVmYXVsdCkKKworICAgICAgICBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZuZXdSb3cuQWRkcmVzcy5JcHY2LnNpbjZfYWRkcikpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ld1Jvdy5TdWZmaXhPcmlnaW4gPSBJcFN1ZmZpeE9yaWdpbkxpbmtMYXllckFkZHJlc3M7ICAgLy8gRGVyaXZlZCBmcm9tIEV4dGVuZGVkIE1BQyBhZGRyZXNzCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBuZXdSb3cuU3VmZml4T3JpZ2luID0gSXBTdWZmaXhPcmlnaW5SYW5kb207ICAgICAgICAgICAgIC8vIFdhcyBjcmVhdGVkIHJhbmRvbWx5CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgYXJlIGluIHRoZSByaWdodCBjb21wYXJ0bWVudAorICAgICAgICAoVk9JRClvdEx3ZlNldENvbXBhcnRtZW50KHBGaWx0ZXIsICZPcmlnaW5hbENvbXBhcnRtZW50SUQpOworCisgICAgICAgIHN0YXR1cyA9IENyZWF0ZVVuaWNhc3RJcEFkZHJlc3NFbnRyeSgmbmV3Um93KTsKKyAgICAgICAgLy9OVF9BU1NFUlQoTlRfU1VDQ0VTUyhzdGF0dXMpKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiQ3JlYXRlVW5pY2FzdElwQWRkcmVzc0VudHJ5IGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisKKyAgICAgICAgbmV3Um91dGVSb3cuSW50ZXJmYWNlSW5kZXggPSBwRmlsdGVyLT5JbnRlcmZhY2VJbmRleDsKKyAgICAgICAgbmV3Um91dGVSb3cuSW50ZXJmYWNlTHVpZCA9IHBGaWx0ZXItPkludGVyZmFjZUx1aWQ7CisgICAgICAgIG5ld1JvdXRlUm93LkRlc3RpbmF0aW9uUHJlZml4LlByZWZpeC5zaV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgbmV3Um91dGVSb3cuRGVzdGluYXRpb25QcmVmaXguUHJlZml4TGVuZ3RoID0gMDsKKworICAgICAgICBzdGF0dXMgPSBDcmVhdGVJcEZvcndhcmRFbnRyeTIoJm5ld1JvdXRlUm93KTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykgJiYgc3RhdHVzICE9IFNUQVRVU19EVVBMSUNBVEVfT0JKRUNUSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJDcmVhdGVJcEZvcndhcmRFbnRyeTIgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXZlcnQgYmFjayB0byBvcmlnaW5hbCBjb21wYXJ0bWVudAorICAgICAgICBvdEx3ZlJldmVydENvbXBhcnRtZW50KE9yaWdpbmFsQ29tcGFydG1lbnRJRCk7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQgCitvdEx3Zk9uQWRkcmVzc1JlbW92ZWQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsIAorICAgIF9Jbl8gVUxPTkcgQ2FjaGVkSW5kZXgsCisgICAgX0luXyBCT09MRUFOIFVwZGF0ZVdpbmRvd3MKKyAgICApCit7CisgICAgLy8gQ2FjaGUgYWRkcmVzcyBiZWZvcmUgd2UgZGVsZXRlIGxvY2FsIGNhY2hlCisgICAgSU42X0FERFIgQWRkciA9IHBGaWx0ZXItPm90Q2FjaGVkQWRkcltDYWNoZWRJbmRleF07CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiSW50ZXJmYWNlICUhR1VJRCEgcmVtb3ZpbmcgYWRkcmVzczogJSFJUFY2QUREUiEiLCAmcEZpbHRlci0+SW50ZXJmYWNlR3VpZCwgJkFkZHIpOworICAgIAorICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCAhPSAwKTsKKyAgICBOVF9BU1NFUlQoQ2FjaGVkSW5kZXggPCBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCk7CisKKyAgICAvLyBSZW1vdmUgdGhlIGNhY2hlZCBlbnRyeQorICAgIGlmIChDYWNoZWRJbmRleCArIDEgIT0gcEZpbHRlci0+b3RDYWNoZWRBZGRyQ291bnQpCisgICAgICAgIG1lbW1vdmUocEZpbHRlci0+b3RDYWNoZWRBZGRyICsgQ2FjaGVkSW5kZXgsIAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q2FjaGVkQWRkciArIENhY2hlZEluZGV4ICsgMSwgCisgICAgICAgICAgICAgICAgKHBGaWx0ZXItPm90Q2FjaGVkQWRkckNvdW50IC0gQ2FjaGVkSW5kZXggLSAxKSAqIHNpemVvZihJTjZfQUREUikKKyAgICAgICAgICAgICAgICApOworICAgIHBGaWx0ZXItPm90Q2FjaGVkQWRkckNvdW50LS07CisKKyAgICAvLyBVcGRhdGUgV2luZG93cyBpZiBuZWNlc3NhcnkKKyAgICBpZiAoVXBkYXRlV2luZG93cykKKyAgICB7CisgICAgICAgIE1JQl9VTklDQVNUSVBBRERSRVNTX1JPVyBkZWxldGVSb3c7CisgICAgICAgIENPTVBBUlRNRU5UX0lEIE9yaWdpbmFsQ29tcGFydG1lbnRJRDsKKyAgICAgICAgSW5pdGlhbGl6ZVVuaWNhc3RJcEFkZHJlc3NFbnRyeSgmZGVsZXRlUm93KTsKKworICAgICAgICBkZWxldGVSb3cuSW50ZXJmYWNlSW5kZXggPSBwRmlsdGVyLT5JbnRlcmZhY2VJbmRleDsKKyAgICAgICAgZGVsZXRlUm93LkludGVyZmFjZUx1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VMdWlkOworICAgICAgICBkZWxldGVSb3cuQWRkcmVzcy5zaV9mYW1pbHkgPSBBRl9JTkVUNjsKKworICAgICAgICBkZWxldGVSb3cuQWRkcmVzcy5JcHY2LnNpbjZfYWRkciA9IEFkZHI7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGFyZSBpbiB0aGUgcmlnaHQgY29tcGFydG1lbnQKKyAgICAgICAgKFZPSUQpb3RMd2ZTZXRDb21wYXJ0bWVudChwRmlsdGVyLCAmT3JpZ2luYWxDb21wYXJ0bWVudElEKTsKKyAgICAKKyAgICAgICAgLy8gQmVzdCBlZmZvcnQgcmVtb3ZlIGFkZHJlc3MgZnJvbSBUQ1BJUAorICAgICAgICAoVk9JRClEZWxldGVVbmljYXN0SXBBZGRyZXNzRW50cnkoJmRlbGV0ZVJvdyk7CisKKyAgICAgICAgLy8gUmV2ZXJ0IGJhY2sgdG8gb3JpZ2luYWwgY29tcGFydG1lbnQKKyAgICAgICAgb3RMd2ZSZXZlcnRDb21wYXJ0bWVudChPcmlnaW5hbENvbXBhcnRtZW50SUQpOworICAgIH0KK30KKworaW50IAorb3RMd2ZGaW5kQ2FjaGVkQWRkckluZGV4KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLCAKKyAgICBfSW5fIFBJTjZfQUREUiBhZGRyCisgICAgKQoreworICAgIGZvciAoVUxPTkcgaSA9IDA7IGkgPCBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudDsgaSsrKQorICAgICAgICBpZiAobWVtY21wKHBGaWx0ZXItPm90Q2FjaGVkQWRkciArIGksIGFkZHIsIHNpemVvZihJTjZfQUREUikpID09IDApCisgICAgICAgICAgICByZXR1cm4gKGludClpOworICAgIHJldHVybiAtMTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMgCitvdEx3ZkluaXRpYWxpemVBZGRyZXNzZXMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApCit7CisgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIAorICAgIFBNSUJfVU5JQ0FTVElQQUREUkVTU19UQUJMRSBwTWliVW5pY2FzdEFkZHJlc3NUYWJsZSA9IE5VTEw7CisgICAgQ09NUEFSVE1FTlRfSUQgICAgICAgICAgICAgIE9yaWdpbmFsQ29tcGFydG1lbnRJRDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgcEZpbHRlci0+b3RDYWNoZWRBZGRyQ291bnQgPSAwOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGFyZSBpbiB0aGUgcmlnaHQgY29tcGFydG1lbnQKKyAgICAoVk9JRClvdEx3ZlNldENvbXBhcnRtZW50KHBGaWx0ZXIsICZPcmlnaW5hbENvbXBhcnRtZW50SUQpOworCisgICAgLy8gUXVlcnkgdGhlIHRhYmxlIGZvciB0aGUgY3VycmVudCBjb21wYXJ0bWVudAorICAgIHN0YXR1cyA9IEdldFVuaWNhc3RJcEFkZHJlc3NUYWJsZShBRl9JTkVUNiwgJnBNaWJVbmljYXN0QWRkcmVzc1RhYmxlKTsKKworICAgIC8vIFJldmVydCB0aGUgY29tcGFydG1lbnQsIG5vdyB0aGF0IHdlIGhhdmUgdGhlIHRhYmxlCisgICAgb3RMd2ZSZXZlcnRDb21wYXJ0bWVudChPcmlnaW5hbENvbXBhcnRtZW50SUQpOworCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkdldFVuaWNhc3RJcEFkZHJlc3NUYWJsZSBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIAorICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYWRkcmVzc2VzIGFuZCBkZWxldGUgKGJlc3QgZWZmb3J0KSB0aGUgb25lcyBmb3Igb3VyIGludGVyZmFjZQorICAgIGZvciAoVUxPTkcgSW5kZXggPSAwOyBJbmRleCA8IHBNaWJVbmljYXN0QWRkcmVzc1RhYmxlLT5OdW1FbnRyaWVzOyBJbmRleCsrKQorICAgIHsKKyAgICAgICAgTUlCX1VOSUNBU1RJUEFERFJFU1NfUk9XKiByb3cgPSAmcE1pYlVuaWNhc3RBZGRyZXNzVGFibGUtPlRhYmxlW0luZGV4XTsKKworICAgICAgICBpZiAoKDAgPT0gbWVtY21wKCZyb3ctPkludGVyZmFjZUx1aWQsICZwRmlsdGVyLT5JbnRlcmZhY2VMdWlkLCBzaXplb2YoTkVUX0xVSUQpKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJDYWNoaW5nIGluaXRpYWwgYWRkcmVzczogJSFJUFY2QUREUiEiLCAmcm93LT5BZGRyZXNzLklwdjYuc2luNl9hZGRyKTsKKyAgICAgICAgICAgIG1lbWNweShwRmlsdGVyLT5vdENhY2hlZEFkZHIgKyBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCwgJnJvdy0+QWRkcmVzcy5JcHY2LnNpbjZfYWRkciwgc2l6ZW9mKElONl9BRERSKSk7CisgICAgICAgICAgICBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCsrOworICAgICAgICB9CisgICAgfQorCitlcnJvcjoKKyAgICAKKyAgICBpZiAoTlVMTCAhPSBwTWliVW5pY2FzdEFkZHJlc3NUYWJsZSkKKyAgICB7CisgICAgICAgIEZyZWVNaWJUYWJsZShwTWliVW5pY2FzdEFkZHJlc3NUYWJsZSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfREVGQVVMVCwgc3RhdHVzKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8vIENhbGxiYWNrIGZyb20gV2luZG93cyBUQ1BJUCBzdGFjayB3aGVuIGFuIGFkZHJlc3MgY2hhbmdlIG9jY3VycworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorTkVUSU9BUElfQVBJXyAKK290THdmQWRkcmVzc0NoYW5nZUNhbGxiYWNrKAorICAgIF9Jbl8gUFZPSUQgQ2FsbGVyQ29udGV4dCwKKyAgICBfSW5fb3B0XyBQTUlCX1VOSUNBU1RJUEFERFJFU1NfUk9XIFJvdywKKyAgICBfSW5fIE1JQl9OT1RJRklDQVRJT05fVFlQRSBOb3RpZmljYXRpb25UeXBlCisgICAgKQoreworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IChQTVNfRklMVEVSKUNhbGxlckNvbnRleHQ7CisgICAgaWYgKFJvdyA9PSBOVUxMIHx8IHBGaWx0ZXIgPT0gTlVMTCkgcmV0dXJuOworCisgICAgLy8gSWdub3JlIG5vdGlmaWNhdGlvbnMgdGhhdCBhcmVuJ3QgZm9yIG91ciBpbnRlcmZhY2UKKyAgICBpZiAoUm93LT5JbnRlcmZhY2VJbmRleCAhPSBwRmlsdGVyLT5JbnRlcmZhY2VJbmRleCkgcmV0dXJuOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiJXAgKCV1KSAlIUlQVjZBRERSISIsIHBGaWx0ZXIsIE5vdGlmaWNhdGlvblR5cGUsICZSb3ctPkFkZHJlc3MuSXB2Ni5zaW42X2FkZHIpOworCisgICAgLy8gU2luY2Ugd2UgZG9uJ3QgcGFzcyBpbiB0aGUgaW5pdGlhbCBmbGFnLCB3ZSBzaG91bGRuJ3QgZ2V0IHRoaXMgdHlwZQorICAgIE5UX0FTU0VSVChOb3RpZmljYXRpb25UeXBlICE9IE1pYkluaXRpYWxOb3RpZmljYXRpb24pOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGNhbiByZWZlcmVuY2UgdGhlIGludGVyZmFjZQorICAgIGlmIChFeEFjcXVpcmVSdW5kb3duUHJvdGVjdGlvbigmcEZpbHRlci0+RXh0ZXJuYWxSZWZzKSkKKyAgICB7CisgICAgICAgIGlmIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19SQURJT19NT0RFKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBRdWV1ZSB1cCB0aGUgZXZlbnQgZm9yIHByb2Nlc3NpbmcKKyAgICAgICAgICAgIG90THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVBZGRyZXNzQ2hhbmdlKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAmUm93LT5BZGRyZXNzLklwdjYuc2luNl9hZGRyCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIE5UX0FTU0VSVChGQUxTRSk7IC8vIE5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIHRoaXMgaW4gdHVubmVsIG1vZGUKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbGVhc2UgcmVmZXJlbmNlIG9uIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgRXhSZWxlYXNlUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPkV4dGVybmFsUmVmcyk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCisvLyBDYWxsYmFjayBvbiB0aGUgT3BlblRocmVhZCB0aHJlYWQgZm9yIHByb2Nlc3NpbmcgYW4gYWRkcmVzcyBjaGFuZ2UKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nQWRkcmVzc0NoYW5nZWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBNSUJfTk9USUZJQ0FUSU9OX1RZUEUgIE5vdGlmaWNhdGlvblR5cGUsCisgICAgX0luXyBQSU42X0FERFIgICAgICAgICAgICAgIHBBZGRyCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIiVwICgldSkiLCBwRmlsdGVyLCBOb3RpZmljYXRpb25UeXBlKTsKKworICAgIGlmIChOb3RpZmljYXRpb25UeXBlID09IE1pYkFkZEluc3RhbmNlIHx8CisgICAgICAgIE5vdGlmaWNhdGlvblR5cGUgPT0gTWliUGFyYW1ldGVyTm90aWZpY2F0aW9uKQorICAgIHsKKyAgICAgICAgTUlCX1VOSUNBU1RJUEFERFJFU1NfUk9XIFJvdzsKKyAgICAgICAgSW5pdGlhbGl6ZVVuaWNhc3RJcEFkZHJlc3NFbnRyeSgmUm93KTsKKworICAgICAgICBSb3cuQWRkcmVzcy5zaV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgUm93LkFkZHJlc3MuSXB2Ni5zaW42X2FkZHIgPSAqcEFkZHI7CisgICAgICAgIFJvdy5JbnRlcmZhY2VJbmRleCA9IHBGaWx0ZXItPkludGVyZmFjZUluZGV4OworICAgICAgICBSb3cuSW50ZXJmYWNlTHVpZCA9IHBGaWx0ZXItPkludGVyZmFjZUx1aWQ7CisKKyAgICAgICAgTlRTVEFUVVMgc3RhdHVzID0gR2V0VW5pY2FzdElwQWRkcmVzc0VudHJ5KCZSb3cpOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJHZXRVbmljYXN0SXBBZGRyZXNzRW50cnkgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3ROZXRpZkFkZHJlc3Mgb3RBZGRyID0gezB9OworICAgICAgICAgICAgbWVtY3B5KCZvdEFkZHIubUFkZHJlc3MsIHBBZGRyLCBzaXplb2YoSU42X0FERFIpKTsKKyAgICAgICAgICAgIG90QWRkci5tUHJlZmVycmVkID0gUm93LlByZWZlcnJlZExpZmV0aW1lICE9IDA7CisgICAgICAgICAgICBvdEFkZHIubVByZWZpeExlbmd0aCA9IFJvdy5PbkxpbmtQcmVmaXhMZW5ndGg7CisgICAgICAgICAgICBvdEFkZHIubVZhbGlkID0gUm93LlZhbGlkTGlmZXRpbWUgIT0gMDsKKworICAgICAgICAgICAgQk9PTEVBTiBTaG91bGREZWxldGUgPSBGQUxTRTsKKyAgICAgICAgICAgIEJPT0xFQU4gQWRkZWRUb0NhY2hlID0gRkFMU0U7CisgICAgICAgICAgICBCT09MRUFOIElzQ2FjaGVkID0gb3RMd2ZGaW5kQ2FjaGVkQWRkckluZGV4KHBGaWx0ZXIsIHBBZGRyKSAhPSAtMTsKKworICAgICAgICAgICAgLy8gSWdub3JlIGxpbmsgbG9jYWwgYWRkcmVzc2VzCisgICAgICAgICAgICBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKHBBZGRyKSAmJiAhSXNDYWNoZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2hvdWxkRGVsZXRlID0gVFJVRTsKKyAgICAgICAgICAgICAgICBnb3RvIGFkZF9jb21wbGV0ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIHRvIHRoZSBjYWNoZSBpZiB0aGlzIGlzIGEgbmV3IGFkZHJlc3MKKyAgICAgICAgICAgIGlmIChOb3RpZmljYXRpb25UeXBlID09IE1pYkFkZEluc3RhbmNlICYmICFJc0NhY2hlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBZGRlZFRvQ2FjaGUgPSBvdEx3Zk9uQWRkcmVzc0FkZGVkKHBGaWx0ZXIsICZvdEFkZHIsIEZBTFNFKTsKKyAgICAgICAgICAgICAgICBpZiAoQWRkZWRUb0NhY2hlID09IEZBTFNFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU2hvdWxkRGVsZXRlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBhZGRfY29tcGxldGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBVcGRhdGUgT3BlblRocmVhZCBpZiB3ZSBkb24ndCBoYXZlIHRoaXMgY2FjaGVkIG9yIGl0IGlzIGJlaW5nIHVwZGF0ZWQKKyAgICAgICAgICAgIGlmICghSXNDYWNoZWQvKiB8fCBOb3RpZmljYXRpb25UeXBlID09IE1pYlBhcmFtZXRlck5vdGlmaWNhdGlvbiovKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgdHJ5aW5nIHRvIGFkZC91cGRhdGUgYWRkcmVzczogJSFJUFY2QUREUiEiLCBwRmlsdGVyLCBwQWRkcik7CisKKyAgICAgICAgICAgICAgICAvLyBBZGQgKG9yIHVwZGF0ZSkgdGhlIGFkZHJlc3MgdG8gT3BlblRocmVhZAorICAgICAgICAgICAgICAgIG90RXJyb3Igb3RFcnJvciA9IG90SXA2QWRkVW5pY2FzdEFkZHJlc3MocEZpbHRlci0+b3RDdHgsICZvdEFkZHIpOworICAgICAgICAgICAgICAgIGlmIChvdEVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIm90SXA2QWRkVW5pY2FzdEFkZHJlc3MgZmFpbGVkLCAlIW90RXJyb3IhIiwgb3RFcnJvcik7CisgICAgICAgICAgICAgICAgICAgIFNob3VsZERlbGV0ZSA9IG90RXJyb3IgPT0gT1RfRVJST1JfTk9fQlVGUyA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgYWRkX2NvbXBsZXRlOgorCisgICAgICAgICAgICAvLyBSZW1vdmUgaXQgZnJvbSBUQ1BJUCBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgIGlmIChTaG91bGREZWxldGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCBkZWxldGluZyByZWNlbnRseSBhZGRlZCBhZGRyZXNzOiAlIUlQVjZBRERSISIsIHBGaWx0ZXIsIHBBZGRyKTsKKworICAgICAgICAgICAgICAgIC8vIEJlc3QgZWZmb3J0IHJlbW92ZSBhZGRyZXNzIGZyb20gVENQSVAKKyAgICAgICAgICAgICAgICAoVk9JRClEZWxldGVVbmljYXN0SXBBZGRyZXNzRW50cnkoJlJvdyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoTm90aWZpY2F0aW9uVHlwZSA9PSBNaWJEZWxldGVJbnN0YW5jZSkKKyAgICB7CisgICAgICAgIC8vIExvb2sgZm9yIHRoZSBhZGRyZXNzIGluIG91ciBjYWNoZQorICAgICAgICBpbnQgaW5kZXggPSBvdEx3ZkZpbmRDYWNoZWRBZGRySW5kZXgocEZpbHRlciwgcEFkZHIpOworCisgICAgICAgIC8vIElmIGl0J3Mgbm90IGFscmVhZHkgZGVsZXRlZCBmcm9tIG91ciBjYWNoZSwgdGhlbiBXaW5kb3dzCisgICAgICAgIC8vIGlzIGRlbGV0aW5nIHRoZSBhZGRkcmVzcyBhbmQgd2UgbmVlZCB0byB1cGRhdGUgT3BlblRocmVhZC4KKyAgICAgICAgaWYgKGluZGV4ICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVcGRhdGUgb3VyIGNhY2hlCisgICAgICAgICAgICBvdEx3Zk9uQWRkcmVzc1JlbW92ZWQocEZpbHRlciwgKFVMT05HKWluZGV4LCBGQUxTRSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgdHJ5aW5nIHRvIHJlbW92ZSBhZGRyZXNzOiAlIUlQVjZBRERSISIsIHBGaWx0ZXIsIHBBZGRyKTsKKworICAgICAgICAgICAgLy8gRmluZCB0aGUgY29ycmVjdCBhZGRyZXNzIGZyb20gT3BlblRocmVhZCB0byByZW1vdmUgKGJlc3QgZWZmb3J0KQorICAgICAgICAgICAgKHZvaWQpb3RJcDZSZW1vdmVVbmljYXN0QWRkcmVzcyhwRmlsdGVyLT5vdEN0eCwgKG90SXA2QWRkcmVzcyopcEFkZHIpOworICAgICAgICB9CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lEIAorb3RMd2ZSYWRpb0FkZHJlc3Nlc1VwZGF0ZWQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFVMT05HIEZvdW5kSW5PcGVuVGhyZWFkID0gMDsgLy8gQml0IGZpZWxkCisgICAgVUxPTkcgT3JpZ2luYWxDYWNoZUxlbmd0aCA9IHBGaWx0ZXItPm90Q2FjaGVkQWRkckNvdW50OworICAgIAorICAgIE5UX0FTU0VSVChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19SQURJT19NT0RFKTsKKworICAgIGNvbnN0IG90TmV0aWZBZGRyZXNzKiBhZGRyID0gb3RJcDZHZXRVbmljYXN0QWRkcmVzc2VzKHBGaWx0ZXItPm90Q3R4KTsKKworICAgIC8vIFByb2Nlc3MgdGhlIGFkZHJlc3NlcworICAgIHdoaWxlIChhZGRyKQorICAgIHsKKyAgICAgICAgaW50IGluZGV4ID0gb3RMd2ZGaW5kQ2FjaGVkQWRkckluZGV4KHBGaWx0ZXIsIChQSU42X0FERFIpJmFkZHItPm1BZGRyZXNzKTsKKyAgICAgICAgaWYgKGluZGV4ID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBvdEx3Zk9uQWRkcmVzc0FkZGVkKHBGaWx0ZXIsIGFkZHIsIFRSVUUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTlRfQVNTRVJUKGluZGV4IDwgOCAqIHNpemVvZihGb3VuZEluT3BlblRocmVhZCkpOworICAgICAgICAgICAgRm91bmRJbk9wZW5UaHJlYWQgfD0gMSA8PCBpbmRleDsKKyAgICAgICAgfQorICAgICAgICBhZGRyID0gYWRkci0+bU5leHQ7CisgICAgfQorCisgICAgLy8gTG9vayBmb3IgbWlzc2luZyBhZGRyZXNzZXMgYW5kIG1hcmsgdGhlbSBhcyByZW1vdmVkCisgICAgZm9yIChpbnQgaSA9IE9yaWdpbmFsQ2FjaGVMZW5ndGggLSAxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAgIGlmICgoRm91bmRJbk9wZW5UaHJlYWQgJiAoMSA8PCBpKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMd2ZPbkFkZHJlc3NSZW1vdmVkKHBGaWx0ZXIsIChVTE9ORylpLCBUUlVFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQgCitvdEx3ZlR1bkFkZHJlc3Nlc1VwZGF0ZWQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuLAorICAgIF9PdXRfIHVpbnQzMl90ICphTm90aWZGbGFncworICAgICkKK3sKKyAgICBVTE9ORyBGb3VuZEluT3BlblRocmVhZCA9IDA7IC8vIEJpdCBmaWVsZAorICAgIFVMT05HIE9yaWdpbmFsQ2FjaGVMZW5ndGggPSBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgTlRfQVNTRVJUIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19USFJFQURfTU9ERSk7CisKKyAgICAqYU5vdGlmRmxhZ3MgPSAwOworCisgICAgd2hpbGUgKHZhbHVlX2RhdGFfbGVuID4gMCkKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmVudHJ5X3B0ciA9IE5VTEw7CisgICAgICAgIHNwaW5lbF9zaXplX3QgZW50cnlfbGVuID0gMDsKKworICAgICAgICBzcGluZWxfc3NpemVfdCBsZW4gPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKHZhbHVlX2RhdGFfcHRyLCB2YWx1ZV9kYXRhX2xlbiwgImQiLCAmZW50cnlfcHRyLCAmZW50cnlfbGVuKTsKKyAgICAgICAgaWYgKGxlbiA8IDEpIGJyZWFrOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFBJTjZfQUREUiBwQWRkciA9IE5VTEw7CisgICAgICAgICAgICBvdE5ldGlmQWRkcmVzcyBhZGRyID0geyB7IDAgfSwgMCwgMSwgMSwgMCwgMCwgMCwgTlVMTCB9OworICAgICAgICAgICAgdWludDMyX3QgcHJlZmVycmVkTGlmZXRpbWUgPSAweEZGRkZGRkZGOworICAgICAgICAgICAgdWludDMyX3QgdmFsaWRMaWZldGltZSA9IDB4RkZGRkZGRkY7CisKKyAgICAgICAgICAgIHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgZW50cnlfcHRyLCAKKyAgICAgICAgICAgICAgICBlbnRyeV9sZW4sIAorICAgICAgICAgICAgICAgICI2Q0xMIiwgCisgICAgICAgICAgICAgICAgJnBBZGRyLCAKKyAgICAgICAgICAgICAgICAmYWRkci5tUHJlZml4TGVuZ3RoLCAKKyAgICAgICAgICAgICAgICAmdmFsaWRMaWZldGltZSwKKyAgICAgICAgICAgICAgICAmcHJlZmVycmVkTGlmZXRpbWUpOworCisgICAgICAgICAgICBhZGRyLm1QcmVmZXJyZWQgPSBwcmVmZXJyZWRMaWZldGltZSAhPSAwOworICAgICAgICAgICAgYWRkci5tVmFsaWQgPSB2YWxpZExpZmV0aW1lICE9IDA7CisKKyAgICAgICAgICAgIGlmIChwQWRkcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBvdEx3ZkZpbmRDYWNoZWRBZGRySW5kZXgocEZpbHRlciwgcEFkZHIpOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweV9zKCZhZGRyLm1BZGRyZXNzLCBzaXplb2YoYWRkci5tQWRkcmVzcyksIHBBZGRyLCBzaXplb2YoSU42X0FERFIpKTsKKyAgICAgICAgICAgICAgICAgICAgb3RMd2ZPbkFkZHJlc3NBZGRlZChwRmlsdGVyLCAmYWRkciwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgICphTm90aWZGbGFncyB8PSBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX0FEREVEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOVF9BU1NFUlQoaW5kZXggPCA4ICogc2l6ZW9mKEZvdW5kSW5PcGVuVGhyZWFkKSk7CisgICAgICAgICAgICAgICAgICAgIEZvdW5kSW5PcGVuVGhyZWFkIHw9IDEgPDwgaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFsdWVfZGF0YV9sZW4gLT0gbGVuOworICAgICAgICB2YWx1ZV9kYXRhX3B0ciArPSBsZW47CisgICAgfQorCisgICAgLy8gTG9vayBmb3IgbWlzc2luZyBhZGRyZXNzZXMgYW5kIG1hcmsgdGhlbSBhcyByZW1vdmVkCisgICAgZm9yIChpbnQgaSA9IE9yaWdpbmFsQ2FjaGVMZW5ndGggLSAxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAgIGlmICgoRm91bmRJbk9wZW5UaHJlYWQgJiAoMSA8PCBpKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMd2ZPbkFkZHJlc3NSZW1vdmVkKHBGaWx0ZXIsIChVTE9ORylpLCBUUlVFKTsKKyAgICAgICAgICAgICphTm90aWZGbGFncyB8PSBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX1JFTU9WRUQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2FsYXJtLmMgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvYWxhcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDg3ZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2FsYXJtLmMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGFsYXJtIGZ1bmN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIE9wZW5UaHJlYWQgbGlicmFyeS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgImFsYXJtLnRtaCIKKwordWludDMyX3QgCitvdFBsYXRBbGFybUdldE5vdygpCit7CisgICAgLy8gUmV0dXJuIG51bWJlciBvZiAndGlja3MnCisgICAgTEFSR0VfSU5URUdFUiBQZXJmb3JtYW5jZUNvdW50ZXIgPSBLZVF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKE5VTEwpOworCisgICAgLy8gTXVsdGlwbHkgYnkgMTAwMCBtcy9zZWMgYW5kIGRpdmlkZSBieSAndGlja3MnL3NlYyB0byBnZXQgbXMKKyAgICByZXR1cm4gKHVpbnQzMl90KShQZXJmb3JtYW5jZUNvdW50ZXIuUXVhZFBhcnQgKiAxMDAwIC8gRmlsdGVyUGVyZm9ybWFuY2VGcmVxdWVuY3kuUXVhZFBhcnQpOworfQorCit2b2lkIAorb3RQbGF0QWxhcm1TdG9wKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgKKyAgICApCit7CisgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIm90UGxhdEFsYXJtU3RvcCIpOworICAgIG90THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVOZXdXYWl0VGltZShvdEN0eFRvRmlsdGVyKG90Q3R4KSwgKFVMT05HKSgtMSkpOworfQorCit2b2lkIAorb3RQbGF0QWxhcm1TdGFydEF0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIAorICAgIHVpbnQzMl90IG5vdywgCisgICAgdWludDMyX3Qgd2FpdFRpbWUKKyAgICApCit7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihub3cpOworICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJvdFBsYXRBbGFybVN0YXJ0QXQgJXUgbXMiLCB3YWl0VGltZSk7CisgICAgb3RMd2ZFdmVudFByb2Nlc3NpbmdJbmRpY2F0ZU5ld1dhaXRUaW1lKG90Q3R4VG9GaWx0ZXIob3RDdHgpLCB3YWl0VGltZSk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvY29tbWFuZC5jIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2NvbW1hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTY4ZWJlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2NvbW1hbmQuYwpAQCAtMCwwICsxLDE0MjYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgZm9yIHNlbmRpbmcvcmVjZWl2aW5nIFNwaW5lbCBjb21tYW5kcyB0byB0aGUgbWluaXBvcnQuCisgKi8KKworI2luY2x1ZGUgInByZWNvbXAuaCIKKyNpbmNsdWRlICJjb21tYW5kLnRtaCIKKwordHlwZWRlZiBzdHJ1Y3QgX1NQSU5FTF9DTURfSEFORExFUl9FTlRSWQoreworICAgIExJU1RfRU5UUlkgICAgICAgICAgTGluazsKKyAgICB2b2xhdGlsZSBMT05HICAgICAgIFJlZkNvdW50OworICAgIFNQSU5FTF9DTURfSEFORExFUiAqSGFuZGxlcjsKKyAgICBQVk9JRCAgICAgICAgICAgICAgIENvbnRleHQ7CisgICAgc3BpbmVsX3RpZF90ICAgICAgICBUcmFuc2FjdGlvbklkOworfSBTUElORUxfQ01EX0hBTkRMRVJfRU5UUlk7CisKK3ZvaWQgQWRkRW50cnlSZWYoU1BJTkVMX0NNRF9IQU5ETEVSX0VOVFJZICpwRW50cnkpIHsgSW50ZXJsb2NrZWRJbmNyZW1lbnQoJnBFbnRyeS0+UmVmQ291bnQpOyB9Cit2b2lkIFJlbGVhc2VFbnRyeVJlZihTUElORUxfQ01EX0hBTkRMRVJfRU5UUlkgKnBFbnRyeSkgCit7IAorICAgIGlmIChJbnRlcmxvY2tlZERlY3JlbWVudCgmcEVudHJ5LT5SZWZDb3VudCkgPT0gMCkKKyAgICB7CisgICAgICAgIEZJTFRFUl9GUkVFX01FTShwRW50cnkpOworICAgIH0KK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTkRJU19TVEFUVVMgCitvdEx3ZkNtZEluaXRpYWxpemUoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApCit7CisgICAgTkRJU19TVEFUVVMgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICBOVFNUQVRVUyBOdFN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIHVpbnQzMl90IE1ham9yVmVyc2lvbiA9IDA7CisgICAgdWludDMyX3QgTWlub3JWZXJzaW9uID0gMDsKKyAgICB1aW50MzJfdCBJbnRlcmZhY2VUeXBlID0gMDsKKworICAgIE5FVF9CVUZGRVJfTElTVF9QT09MX1BBUkFNRVRFUlMgUG9vbFBhcmFtcyA9CisgICAgeworICAgICAgICB7IE5ESVNfT0JKRUNUX1RZUEVfREVGQVVMVCwgTkVUX0JVRkZFUl9MSVNUX1BPT0xfUEFSQU1FVEVSU19SRVZJU0lPTl8xLCBORElTX1NJWkVPRl9ORVRfQlVGRkVSX0xJU1RfUE9PTF9QQVJBTUVURVJTX1JFVklTSU9OXzEgfSwKKyAgICAgICAgTkRJU19QUk9UT0NPTF9JRF9ERUZBVUxULAorICAgICAgICBUUlVFLAorICAgICAgICAwLAorICAgICAgICAnbGJOQycsIC8vIENOYmwKKyAgICAgICAgMAorICAgIH07CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIHBGaWx0ZXItPmNtZFRJRHNJblVzZSA9IDA7CisgICAgICAgIHBGaWx0ZXItPmNtZE5leHRUSUQgPSAxOworICAgICAgICBwRmlsdGVyLT5jbWRSZXNldFJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX1BPV0VSX09OOworCisgICAgICAgIE5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwRmlsdGVyLT5jbWRMb2NrKTsKKyAgICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZwRmlsdGVyLT5jbWRIYW5kbGVycyk7CisKKyAgICAgICAgS2VJbml0aWFsaXplRXZlbnQoCisgICAgICAgICAgICAmcEZpbHRlci0+Y21kUmVzZXRDb21wbGV0ZUV2ZW50LAorICAgICAgICAgICAgU3luY2hyb25pemF0aW9uRXZlbnQsIC8vIGF1dG8tY2xlYXJpbmcgZXZlbnQKKyAgICAgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAvLyBldmVudCBpbml0aWFsbHkgbm9uLXNpZ25hbGxlZAorICAgICAgICAgICAgKTsKKworICAgICAgICAvLyBFbmFibGUgcnVuZG93biBwcm90ZWN0aW9uCisgICAgICAgIEV4UmVJbml0aWFsaXplUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPmNtZFJ1bmRvd24pOworCisgICAgICAgIC8vIENyZWF0ZSB0aGUgTkRJUyBwb29sIGZvciBjcmVhdGluZyB0aGUgU2VuZE5ldEJ1ZmZlckxpc3QKKyAgICAgICAgcEZpbHRlci0+Y21kTmJsUG9vbCA9IE5kaXNBbGxvY2F0ZU5ldEJ1ZmZlckxpc3RQb29sKHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgJlBvb2xQYXJhbXMpOworICAgICAgICBpZiAocEZpbHRlci0+Y21kTmJsUG9vbCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CisgICAgICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGNyZWF0ZSBOZXRCdWZmZXJMaXN0IHBvb2wgZm9yIFNwaW5lbCBjb21tYW5kcyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBRdWVyeSB0aGUgaW50ZXJmYWNlIHR5cGUgdG8gbWFrZSBzdXJlIGl0IGlzIGEgVGhyZWFkIGRldmljZQorI2lmZGVmIENPTU1BTkRfSU5JVF9SRVRSWQorICAgICAgICBwRmlsdGVyLT5jbWRJbml0VHJ5Q291bnQgPSAwOworICAgICAgICB3aGlsZSAocEZpbHRlci0+Y21kSW5pdFRyeUNvdW50IDwgMTApCisgICAgICAgIHsKKyAgICAgICAgICAgIE50U3RhdHVzID0gb3RMd2ZDbWRHZXRQcm9wKHBGaWx0ZXIsIE5VTEwsIFNQSU5FTF9QUk9QX1BST1RPQ09MX1ZFUlNJT04sICJpaSIsICZNYWpvclZlcnNpb24sICZNaW5vclZlcnNpb24pOworICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKE50U3RhdHVzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5jbWRJbml0VHJ5Q291bnQrKzsKKyAgICAgICAgICAgICAgICBOZGlzTVNsZWVwKDEwMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAocEZpbHRlci0+Y21kSW5pdFRyeUNvdW50ID49IDEwKQorICAgICAgICB7CisjZWxzZQorICAgICAgICBOdFN0YXR1cyA9IG90THdmQ21kR2V0UHJvcChwRmlsdGVyLCBOVUxMLCBTUElORUxfUFJPUF9QUk9UT0NPTF9WRVJTSU9OLCAiaWkiLCAmTWFqb3JWZXJzaW9uLCAmTWlub3JWZXJzaW9uKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKE50U3RhdHVzKSkKKyAgICAgICAgeworI2VuZGlmCisgICAgICAgICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEOworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gcXVlcnkgU1BJTkVMX1BST1BfUFJPVE9DT0xfVkVSU0lPTiwgJSFTVEFUVVMhIiwgTnRTdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKE1ham9yVmVyc2lvbiAhPSBTUElORUxfUFJPVE9DT0xfVkVSU0lPTl9USFJFQURfTUFKT1IgfHwKKyAgICAgICAgICAgIE1pbm9yVmVyc2lvbiA8IDMpIC8vIFRPRE8gLSBSZW1vdmUgdGhpcyBtaW5vciB2ZXJzaW9uIGNoZWNrIHdpdGggdGhlIG5leHQgbWFqb3IgdmVyc2lvbiB1cGRhdGUKKyAgICAgICAgeworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiUHJvdG9jb2wgVmVyc2lvbiBNaXNtYXRjaCEgT3NWZXI6ICVkLiVkIERldmljZVZlcjogJWQuJWQiLAorICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1BST1RPQ09MX1ZFUlNJT05fVEhSRUFEX01BSk9SLCBTUElORUxfUFJPVE9DT0xfVkVSU0lPTl9USFJFQURfTUlOT1IsCisgICAgICAgICAgICAgICAgICAgICBNYWpvclZlcnNpb24sIE1pbm9yVmVyc2lvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIE50U3RhdHVzID0gb3RMd2ZDbWRHZXRQcm9wKHBGaWx0ZXIsIE5VTEwsIFNQSU5FTF9QUk9QX0lOVEVSRkFDRV9UWVBFLCBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgJkludGVyZmFjZVR5cGUpOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoTnRTdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEOworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gcXVlcnkgU1BJTkVMX1BST1BfSU5URVJGQUNFX1RZUEUsICUhU1RBVFVTISIsIE50U3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChJbnRlcmZhY2VUeXBlICE9IFNQSU5FTF9QUk9UT0NPTF9UWVBFX1RIUkVBRCkKKyAgICAgICAgeworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU1BJTkVMX1BST1BfSU5URVJGQUNFX1RZUEUgaXMgaW52YWxpZCwgJWQiLCBJbnRlcmZhY2VUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgTnRTdGF0dXMgPSBvdEx3ZkNtZFJlc2V0RGV2aWNlKHBGaWx0ZXIsIEZBTFNFKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKE50U3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IHdoaWxlIChGQUxTRSk7CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIFN0YXR1cyk7CisKKyAgICAvLyBDbGVhbiB1cCBvbiBmYWlsdXJlCisgICAgaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgIHsKKyAgICAgICAgb3RMd2ZDbWRVbmluaXRpYWxpemUocEZpbHRlcik7CisgICAgfQorCisgICAgcmV0dXJuIFN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQordm9pZCAKK290THdmQ21kVW5pbml0aWFsaXplKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICAvLyBSZWxlYXNlIGFuZCB3YWl0IGZvciBydW4gZG93bi4gVGhpcyB3aWxsIGJsb2NrIHdhaXRpbmcgZm9yIGFueSBwZW5kaW5nIHNlbmRzIHRvIGNvbXBsZXRlCisgICAgRXhXYWl0Rm9yUnVuZG93blByb3RlY3Rpb25SZWxlYXNlKCZwRmlsdGVyLT5jbWRSdW5kb3duKTsKKworICAgIC8vIFVzZSB0aGUgTkJMIFBvb2wgdmFyaWFibGUgYXMgYSBmbGFnIGZvciBpbml0aWFsaXphdGlvbgorICAgIGlmIChwRmlsdGVyLT5jbWROYmxQb29sKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYW4gdXAgYW55IHBlbmRpbmcgaGFuZGxlcnMKKyAgICAgICAgUExJU1RfRU5UUlkgTGluayA9IHBGaWx0ZXItPmNtZEhhbmRsZXJzLkZsaW5rOworICAgICAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+Y21kSGFuZGxlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSogcEVudHJ5ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgU1BJTkVMX0NNRF9IQU5ETEVSX0VOVFJZLCBMaW5rKTsKKyAgICAgICAgICAgIExpbmsgPSBMaW5rLT5GbGluazsKKworICAgICAgICAgICAgaWYgKHBFbnRyeS0+SGFuZGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwRW50cnktPkhhbmRsZXIocEZpbHRlciwgcEVudHJ5LT5Db250ZXh0LCAwLCAwLCBOVUxMLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVsZWFzZUVudHJ5UmVmKHBFbnRyeSk7CisgICAgICAgIH0KKyAgICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZwRmlsdGVyLT5jbWRIYW5kbGVycyk7CisKKyAgICAgICAgLy8gRnJlZSBOQkwgUG9vbAorICAgICAgICBOZGlzRnJlZU5ldEJ1ZmZlclBvb2wocEZpbHRlci0+Y21kTmJsUG9vbCk7CisgICAgICAgIHBGaWx0ZXItPmNtZE5ibFBvb2wgPSBOVUxMOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworLy8KKy8vIFJlY2VpdmUgU3BpbmVsIEVuY29kZWQgQ29tbWFuZAorLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK3ZvaWQKK290THdmQ21kUHJvY2VzcygKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIFVJTlQgY29tbWFuZCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKGNtZF9kYXRhX2xlbikgY29uc3QgdWludDhfdCogY21kX2RhdGFfcHRyLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBjbWRfZGF0YV9sZW4KKyAgICApCit7CisgICAgdWludDhfdCBIZWFkZXI7CisgICAgc3BpbmVsX3Byb3Bfa2V5X3Qga2V5OworICAgIHVpbnQ4X3QqIHZhbHVlX2RhdGFfcHRyID0gTlVMTDsKKyAgICBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuID0gMDsKKworICAgIC8vIE1ha2Ugc3VyZSBpdCdzIGFuIGV4cGVjdGVkIGNvbW1hbmQKKyAgICBpZiAoY29tbWFuZCA8IFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUyB8fCBjb21tYW5kID4gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRUQpCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiUmVjaWV2ZWQgdW5oYW5kbGVkIGNvbW1hbmQsICV1IiwgY29tbWFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEZWNvZGUgdGhlIGtleSBhbmQgZGF0YQorICAgIGlmIChzcGluZWxfZGF0YXR5cGVfdW5wYWNrKGNtZF9kYXRhX3B0ciwgY21kX2RhdGFfbGVuLCAiQ2lpRCIsICZIZWFkZXIsIE5VTEwsICZrZXksICZ2YWx1ZV9kYXRhX3B0ciwgJnZhbHVlX2RhdGFfbGVuKSA9PSAtMSkKKyAgICB7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gdW5wYWNrIGNvbW1hbmQga2V5ICYgZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gR2V0IHRoZSB0cmFuc2FjdGlvbiBJRAorICAgIGlmIChTUElORUxfSEVBREVSX0dFVF9USUQoSGVhZGVyKSA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gSGFuZGxlIG91dCBvZiBiYW5kIGxhc3Qgc3RhdHVzIGxvY2FsbHkKKyAgICAgICAgaWYgKGNvbW1hbmQgPT0gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTICYmIGtleSA9PSBTUElORUxfUFJPUF9MQVNUX1NUQVRVUykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlc2V0CisgICAgICAgICAgICBzcGluZWxfc3RhdHVzX3Qgc3RhdHVzID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICAgICAgICAgIHNwaW5lbF9kYXRhdHlwZV91bnBhY2sodmFsdWVfZGF0YV9wdHIsIHZhbHVlX2RhdGFfbGVuLCAiaSIsICZzdGF0dXMpOworCisgICAgICAgICAgICBpZiAoKHN0YXR1cyA+PSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTikgJiYgKHN0YXR1cyA8PSBTUElORUxfU1RBVFVTX1JFU0VUX19FTkQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISB3YXMgcmVzZXQgKHN0YXR1cyAlZCkuIiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgcEZpbHRlci0+Y21kUmVzZXRSZWFzb24gPSBzdGF0dXMgLSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTjsKKyAgICAgICAgICAgICAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5jbWRSZXNldENvbXBsZXRlRXZlbnQsIElPX05PX0lOQ1JFTUVOVCwgRkFMU0UpOworCisgICAgICAgICAgICAgICAgLy8gVE9ETyAtIFNob3VsZCB0aGlzIGJlIHBhc3NlZCBvbiB0byBUaHJlYWQgb3IgVHVubmVsIGxvZ2ljPworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEV4QWNxdWlyZVJ1bmRvd25Qcm90ZWN0aW9uKCZwRmlsdGVyLT5FeHRlcm5hbFJlZnMpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgJ1ZhbHVlIElzJyBjb21tYW5kLCBwcm9jZXNzIGl0IGZvciBub3RpZmljYXRpb24gb2Ygc3RhdGUgY2hhbmdlcy4KKyAgICAgICAgICAgIGlmIChjb21tYW5kID09IFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocEZpbHRlci0+RGV2aWNlU3RhdHVzID09IE9UTFdGX0RFVklDRV9TVEFUVVNfUkFESU9fTU9ERSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG90THdmVGhyZWFkVmFsdWVJcyhwRmlsdGVyLCBEaXNwYXRjaExldmVsLCBrZXksIHZhbHVlX2RhdGFfcHRyLCB2YWx1ZV9kYXRhX2xlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1RIUkVBRF9NT0RFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3RMd2ZUdW5WYWx1ZUlzKHBGaWx0ZXIsIERpc3BhdGNoTGV2ZWwsIGtleSwgdmFsdWVfZGF0YV9wdHIsIHZhbHVlX2RhdGFfbGVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kID09IFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocEZpbHRlci0+RGV2aWNlU3RhdHVzID09IE9UTFdGX0RFVklDRV9TVEFUVVNfUkFESU9fTU9ERSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG90THdmVGhyZWFkVmFsdWVJbnNlcnRlZChwRmlsdGVyLCBEaXNwYXRjaExldmVsLCBrZXksIHZhbHVlX2RhdGFfcHRyLCB2YWx1ZV9kYXRhX2xlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1RIUkVBRF9NT0RFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3RMd2ZUdW5WYWx1ZUluc2VydGVkKHBGaWx0ZXIsIERpc3BhdGNoTGV2ZWwsIGtleSwgdmFsdWVfZGF0YV9wdHIsIHZhbHVlX2RhdGFfbGVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEV4UmVsZWFzZVJ1bmRvd25Qcm90ZWN0aW9uKCZwRmlsdGVyLT5FeHRlcm5hbFJlZnMpOworICAgICAgICB9CisgICAgfQorICAgIC8vIElmIHRoZXJlIHdhcyBhIHRyYW5zYWN0aW9uIElELCB0aGVuIGxvb2sgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1hbmQgaGFuZGxlcgorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFBMSVNUX0VOVFJZIExpbms7CisgICAgICAgIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSogSGFuZGxlciA9IE5VTEw7CisKKyAgICAgICAgRklMVEVSX0FDUVVJUkVfTE9DSygmcEZpbHRlci0+Y21kTG9jaywgRGlzcGF0Y2hMZXZlbCk7CisKKyAgICAgICAgLy8gU2VhcmNoIGZvciBtYXRjaGluZyBoYW5kbGVycyBmb3IgdGhpcyBjb21tYW5kCisgICAgICAgIExpbmsgPSBwRmlsdGVyLT5jbWRIYW5kbGVycy5GbGluazsKKyAgICAgICAgd2hpbGUgKExpbmsgIT0gJnBGaWx0ZXItPmNtZEhhbmRsZXJzKQorICAgICAgICB7CisgICAgICAgICAgICBTUElORUxfQ01EX0hBTkRMRVJfRU5UUlkqIHBFbnRyeSA9IENPTlRBSU5JTkdfUkVDT1JEKExpbmssIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSwgTGluayk7CisgICAgICAgICAgICBMaW5rID0gTGluay0+Rmxpbms7CisKKyAgICAgICAgICAgIGlmIChTUElORUxfSEVBREVSX0dFVF9USUQoSGVhZGVyKSA9PSBwRW50cnktPlRyYW5zYWN0aW9uSWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIG1haW4gbGlzdAorICAgICAgICAgICAgICAgIFJlbW92ZUVudHJ5TGlzdCgmcEVudHJ5LT5MaW5rKTsKKworICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBoYW5kbGVyCisgICAgICAgICAgICAgICAgSGFuZGxlciA9IHBFbnRyeTsKKworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgdHJhbnNhY3Rpb24gSUQgZnJvbSB0aGUgJ2luIHVzZScgYml0IGZpZWxkCisgICAgICAgICAgICAgICAgcEZpbHRlci0+Y21kVElEc0luVXNlICY9IH4oMSA8PCBwRW50cnktPlRyYW5zYWN0aW9uSWQpOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBGSUxURVJfUkVMRUFTRV9MT0NLKCZwRmlsdGVyLT5jbWRMb2NrLCBEaXNwYXRjaExldmVsKTsKKworICAgICAgICAvLyBUT0RPIC0gU2V0IGV2ZW50CisKKyAgICAgICAgLy8gUHJvY2VzcyB0aGUgaGFuZGxlciB3ZSBmb3VuZCwgb3V0c2lkZSB0aGUgbG9jaworICAgICAgICBpZiAoSGFuZGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2FsbCB0aGUgaGFuZGxlciBmdW5jdGlvbgorICAgICAgICAgICAgSGFuZGxlci0+SGFuZGxlcihwRmlsdGVyLCBIYW5kbGVyLT5Db250ZXh0LCBjb21tYW5kLCBrZXksIHZhbHVlX2RhdGFfcHRyLCB2YWx1ZV9kYXRhX2xlbik7CisKKyAgICAgICAgICAgIC8vIEZyZWUgdGhlIGVudHJ5CisgICAgICAgICAgICBSZWxlYXNlRW50cnlSZWYoSGFuZGxlcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkCitvdEx3ZkNtZFJlY3ZlaXZlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBEaXNwYXRjaExldmVsLAorICAgIF9Jbl9yZWFkc19ieXRlc18oQnVmZmVyTGVuZ3RoKSBjb25zdCBQVUNIQVIgQnVmZmVyLAorICAgIF9Jbl8gVUxPTkcgQnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIHVpbnQ4X3QgSGVhZGVyOworICAgIFVJTlQgQ29tbWFuZDsKKworICAgIC8vIFVucGFjayB0aGUgaGVhZGVyIGZyb20gdGhlIGJ1ZmZlcgorICAgIGlmIChzcGluZWxfZGF0YXR5cGVfdW5wYWNrKEJ1ZmZlciwgQnVmZmVyTGVuZ3RoLCAiQ2kiLCAmSGVhZGVyLCAmQ29tbWFuZCkgPD0gMCkKKyAgICB7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gdW5wYWNrIGhlYWRlciBhbmQgY29tbWFuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVmFsaWRhdGUgdGhlIGhlYWRlcgorICAgIGlmICgoSGVhZGVyICYgU1BJTkVMX0hFQURFUl9GTEFHKSAhPSBTUElORUxfSEVBREVSX0ZMQUcpCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiUmVjaWV2ZWQgdW5yZWNvZ25pemVkIGZyYW1lLCBoZWFkZXI9MHgleCIsIEhlYWRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBvbmx5IHN1cHBvcnQgSUlEIHplcm8gZm9yIG5vdworICAgIGlmIChTUElORUxfSEVBREVSX0dFVF9JSUQoSGVhZGVyKSAhPSAwKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIlJlY2lldmVkIHVuc3VwcG9ydGVkIElJRCwgJXUiLCBTUElORUxfSEVBREVSX0dFVF9JSUQoSGVhZGVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBQcm9jZXNzIHRoZSByZWNlaXZlZCBjb21tYW5kCisgICAgb3RMd2ZDbWRQcm9jZXNzKHBGaWx0ZXIsIERpc3BhdGNoTGV2ZWwsIENvbW1hbmQsIEJ1ZmZlciwgQnVmZmVyTGVuZ3RoKTsKK30KKworLy8KKy8vIFNlbmQgQXN5bmMgU3BpbmVsIEVuY29kZWQgQ29tbWFuZAorLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorc3BpbmVsX3RpZF90CitvdEx3ZkNtZEdldE5leHRUSUQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApCit7CisgICAgc3BpbmVsX3RpZF90IFRJRCA9IDA7CisgICAgd2hpbGUgKFRJRCA9PSAwKQorICAgIHsKKyAgICAgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmcEZpbHRlci0+Y21kTG9jayk7CisKKyAgICAgICAgaWYgKCgoMSA8PCBwRmlsdGVyLT5jbWROZXh0VElEKSAmIHBGaWx0ZXItPmNtZFRJRHNJblVzZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVElEID0gcEZpbHRlci0+Y21kTmV4dFRJRDsKKyAgICAgICAgICAgIHBGaWx0ZXItPmNtZE5leHRUSUQgPSBTUElORUxfR0VUX05FWFRfVElEKHBGaWx0ZXItPmNtZE5leHRUSUQpOworICAgICAgICAgICAgcEZpbHRlci0+Y21kVElEc0luVXNlIHw9ICgxIDw8IFRJRCk7CisgICAgICAgIH0KKworICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5jbWRMb2NrKTsKKworICAgICAgICBpZiAoVElEID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRPRE8gLSBXYWl0IGZvciBldmVudAorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUSUQ7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQKK290THdmQ21kQWRkSGFuZGxlcigKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSAqcEVudHJ5CisgICAgKQoreworICAgIC8vIEdldCB0aGUgbmV4dCB0cmFuc2FjdGlvbiBJRC4gVGhpcyBjYWxsIHdpbGwgYmxvY2sgaWYgdGhlcmUgYXJlCisgICAgLy8gbm9uZSBjdXJyZW50bHkgYXZhaWxhYmxlLgorICAgIHBFbnRyeS0+VHJhbnNhY3Rpb25JZCA9IG90THdmQ21kR2V0TmV4dFRJRChwRmlsdGVyKTsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgInRpZD0ldSIsIChVTE9ORylwRW50cnktPlRyYW5zYWN0aW9uSWQpOworICAgIAorICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJnBGaWx0ZXItPmNtZExvY2spOworICAgIAorICAgIC8vIEFkZCB0byB0aGUgaGFuZGxlcnMgbGlzdAorICAgIEFkZEVudHJ5UmVmKHBFbnRyeSk7CisgICAgSW5zZXJ0VGFpbExpc3QoJnBGaWx0ZXItPmNtZEhhbmRsZXJzLCAmcEVudHJ5LT5MaW5rKTsKKyAgICAKKyAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5jbWRMb2NrKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kRW5jb2RlQW5kU2VuZEFzeW5jKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gc3BpbmVsX3RpZF90IHRpZCwKKyAgICBfSW5fIFVMT05HIE1heERhdGFMZW5ndGgsCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIF9Jbl9vcHRfIHZhX2xpc3QgYXJncworICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICBQTkVUX0JVRkZFUl9MSVNUIE5ldEJ1ZmZlckxpc3QgPSBOVUxMOworICAgIFBORVRfQlVGRkVSIE5ldEJ1ZmZlciA9IE5VTEw7CisgICAgVUxPTkcgTmV0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBQVUNIQVIgRGF0YUJ1ZmZlciA9IE5VTEw7CisgICAgc3BpbmVsX3NzaXplX3QgUGFja2VkTGVuZ3RoOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiQ21kPSV1IEtleT0ldSB0aWQ9JXUiLCAoVUxPTkcpQ29tbWFuZCwgKFVMT05HKUtleSwgKFVMT05HKXRpZCk7CisKKyAgICBOZXRCdWZmZXJMaXN0ID0KKyAgICAgICAgTmRpc0FsbG9jYXRlTmV0QnVmZmVyQW5kTmV0QnVmZmVyTGlzdCgKKyAgICAgICAgICAgIHBGaWx0ZXItPmNtZE5ibFBvb2wsICAgICAvLyBQb29sSGFuZGxlCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHRTaXplCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHRCYWNrRmlsbAorICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZGxDaGFpbgorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhT2Zmc2V0CisgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGFMZW5ndGgKKyAgICAgICAgICAgICk7CisgICAgaWYgKE5ldEJ1ZmZlckxpc3QgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGNyZWF0ZSBjb21tYW5kIE5ldEJ1ZmZlckxpc3QiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICAgICAgCisgICAgLy8gSW5pdGlhbGl6ZSBOZXRCdWZmZXIgZmllbGRzCisgICAgTmV0QnVmZmVyID0gTkVUX0JVRkZFUl9MSVNUX0ZJUlNUX05CKE5ldEJ1ZmZlckxpc3QpOworICAgIE5FVF9CVUZGRVJfQ1VSUkVOVF9NREwoTmV0QnVmZmVyKSA9IE5VTEw7CisgICAgTkVUX0JVRkZFUl9DVVJSRU5UX01ETF9PRkZTRVQoTmV0QnVmZmVyKSA9IDA7CisgICAgTkVUX0JVRkZFUl9EQVRBX0xFTkdUSChOZXRCdWZmZXIpID0gMDsKKyAgICBORVRfQlVGRkVSX0RBVEFfT0ZGU0VUKE5ldEJ1ZmZlcikgPSAwOworICAgIE5FVF9CVUZGRVJfRklSU1RfTURMKE5ldEJ1ZmZlcikgPSBOVUxMOworCisgICAgLy8gQ2FsY3VsYXRlIGxlbmd0aCBvZiBOZXRCdWZmZXIKKyAgICBOZXRCdWZmZXJMZW5ndGggPSAxNiArIE1heERhdGFMZW5ndGg7CisgICAgaWYgKE5ldEJ1ZmZlckxlbmd0aCA8IDY0KSBOZXRCdWZmZXJMZW5ndGggPSA2NDsKKyAgICAKKyAgICAvLyBBbGxvY2F0ZSB0aGUgTmV0QnVmZmVyIGZvciBOZXRCdWZmZXJMaXN0CisgICAgaWYgKE5kaXNSZXRyZWF0TmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgTmV0QnVmZmVyTGVuZ3RoLCAwLCBOVUxMKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgIHsKKyAgICAgICAgTmV0QnVmZmVyID0gTlVMTDsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGFsbG9jYXRlIE5CIGZvciBjb21tYW5kIE5ldEJ1ZmZlckxpc3QsICV1IGJ5dGVzIiwgTmV0QnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIEdldCB0aGUgcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIKKyAgICBEYXRhQnVmZmVyID0gKFBVQ0hBUilOZGlzR2V0RGF0YUJ1ZmZlcihOZXRCdWZmZXIsIE5ldEJ1ZmZlckxlbmd0aCwgTlVMTCwgMSwgMCk7CisgICAgTlRfQVNTRVJUKERhdGFCdWZmZXIpOworICAgIAorICAgIC8vIFNhdmUgdGhlIHRydWUgTmV0QnVmZmVyIGxlbmd0aCBpbiB0aGUgcHJvdG9jb2wgcmVzZXJ2ZWQKKyAgICBOZXRCdWZmZXItPlByb3RvY29sUmVzZXJ2ZWRbMF0gPSAoUFZPSUQpTmV0QnVmZmVyTGVuZ3RoOworICAgIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCA9IDA7CisgICAgCisgICAgLy8gU2F2ZSB0aGUgdHJhbnNhY3Rpb24gSUQgaW4gdGhlIHByb3RvY29sIHJlc2VydmVkCisgICAgTmV0QnVmZmVyLT5Qcm90b2NvbFJlc2VydmVkWzFdID0gKFBWT0lEKXRpZDsKKworICAgIC8vIFBhY2sgdGhlIGhlYWRlciwgY29tbWFuZCBhbmQga2V5CisgICAgUGFja2VkTGVuZ3RoID0gCisgICAgICAgIHNwaW5lbF9kYXRhdHlwZV9wYWNrKAorICAgICAgICAgICAgRGF0YUJ1ZmZlciwgCisgICAgICAgICAgICBOZXRCdWZmZXJMZW5ndGgsIAorICAgICAgICAgICAgIkNpaSIsIAorICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCB8IHRpZCwgCisgICAgICAgICAgICBDb21tYW5kLCAKKyAgICAgICAgICAgIEtleSk7CisgICAgaWYgKFBhY2tlZExlbmd0aCA8IDAgfHwgUGFja2VkTGVuZ3RoICsgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoID4gTmV0QnVmZmVyTGVuZ3RoKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBOZXRCdWZmZXItPkRhdGFMZW5ndGggKz0gKFVMT05HKVBhY2tlZExlbmd0aDsKKworICAgIC8vIFBhY2sgdGhlIGRhdGEgKGlmIGFueSkKKyAgICBpZiAocGFja19mb3JtYXQpCisgICAgeworICAgICAgICBQYWNrZWRMZW5ndGggPSAKKyAgICAgICAgICAgIHNwaW5lbF9kYXRhdHlwZV92cGFjaygKKyAgICAgICAgICAgICAgICBEYXRhQnVmZmVyICsgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoLCAKKyAgICAgICAgICAgICAgICBOZXRCdWZmZXJMZW5ndGggLSBOZXRCdWZmZXItPkRhdGFMZW5ndGgsIAorICAgICAgICAgICAgICAgIHBhY2tfZm9ybWF0LCAKKyAgICAgICAgICAgICAgICBhcmdzKTsKKyAgICAgICAgaWYgKFBhY2tlZExlbmd0aCA8IDAgfHwgUGFja2VkTGVuZ3RoICsgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoID4gTmV0QnVmZmVyTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCArPSAoVUxPTkcpUGFja2VkTGVuZ3RoOworICAgIH0KKworICAgIC8vIEdyYWIgYSByZWYgZm9yIHJ1bmRvd24gcHJvdGVjdGlvbgorICAgIGlmICghRXhBY3F1aXJlUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPmNtZFJ1bmRvd24pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0RFVklDRV9OT1RfUkVBRFk7CisgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWNxdWlyZSBydW5kb3duIHByb3RlY3Rpb24iKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIFNlbmQgdGhlIE5CTCBkb3duCisgICAgTmRpc0ZTZW5kTmV0QnVmZmVyTGlzdHMoCisgICAgICAgIHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgCisgICAgICAgIE5ldEJ1ZmZlckxpc3QsIAorICAgICAgICBORElTX0RFRkFVTFRfUE9SVF9OVU1CRVIsIAorICAgICAgICAwKTsKKworICAgIC8vIENsZWFyIGxvY2FsIHZhcmlhYmxlIGJlY2F1c2Ugd2UgZG9uJ3Qgb3duIHRoZSBOQkwgYW55IG1vcmUKKyAgICBOZXRCdWZmZXJMaXN0ID0gTlVMTDsKKworZXhpdDoKKworICAgIGlmIChOZXRCdWZmZXJMaXN0KQorICAgIHsKKyAgICAgICAgaWYgKE5ldEJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoID0gKFVMT05HKShVTE9OR19QVFIpTmV0QnVmZmVyLT5Qcm90b2NvbFJlc2VydmVkWzBdOworICAgICAgICAgICAgTmRpc0FkdmFuY2VOZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBOZXRCdWZmZXItPkRhdGFMZW5ndGgsIFRSVUUsIE5VTEwpOworICAgICAgICB9CisgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyTGlzdChOZXRCdWZmZXJMaXN0KTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kUmVzZXREZXZpY2UoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIGZBc3luYworICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgS2VSZXNldEV2ZW50KCZwRmlsdGVyLT5jbWRSZXNldENvbXBsZXRlRXZlbnQpOworCisgICAgTlRTVEFUVVMgc3RhdHVzID0gb3RMd2ZDbWRFbmNvZGVBbmRTZW5kQXN5bmMocEZpbHRlciwgU1BJTkVMX0NNRF9SRVNFVCwgMCwgMCwgMCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBzZW5kIFNQSU5FTF9DTURfUkVTRVQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorICAgIGVsc2UgaWYgKCFmQXN5bmMpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgdGhlIHJlbGF0aXZlIChuZWdhdGl2ZSkgdGltZSB0byB3YWl0IGZvciA1IHNlY29uZHMKKyAgICAgICAgTEFSR0VfSU5URUdFUiBUaW1lb3V0OworICAgICAgICBUaW1lb3V0LlF1YWRQYXJ0ID0gLTUwMDAgKiAxMDAwMDsKKworICAgICAgICBzdGF0dXMgPSBLZVdhaXRGb3JTaW5nbGVPYmplY3QoJnBGaWx0ZXItPmNtZFJlc2V0Q29tcGxldGVFdmVudCwgRXhlY3V0aXZlLCBLZXJuZWxNb2RlLCBGQUxTRSwgJlRpbWVvdXQpOworICAgICAgICBpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB3YWl0aW5nIGZvciByZXNldCBjb21wbGV0ZSwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19ERVZJQ0VfQlVTWTsKKyAgICAgICAgfQorICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZDbWRTZW5kQXN5bmNWKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl9vcHRfIFNQSU5FTF9DTURfSEFORExFUiAqSGFuZGxlciwKKyAgICBfSW5fb3B0XyBQVk9JRCBIYW5kbGVyQ29udGV4dCwKKyAgICBfT3V0X29wdF8gc3BpbmVsX3RpZF90ICpwVGlkLAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gVUxPTkcgTWF4RGF0YUxlbmd0aCwKKyAgICBfSW5fb3B0XyBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgCisgICAgX0luX29wdF8gdmFfbGlzdCBhcmdzCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSAqcEVudHJ5ID0gTlVMTDsKKworICAgIGlmIChwVGlkKSAqcFRpZCA9IDA7CisKKyAgICAvLyBDcmVhdGUgdGhlIGhhbmRsZXIgZW50cnkgYW5kIGFkZCBpdCB0byB0aGUgbGlzdAorICAgIGlmIChIYW5kbGVyKQorICAgIHsKKyAgICAgICAgcEVudHJ5ID0gRklMVEVSX0FMTE9DX01FTShwRmlsdGVyLT5GaWx0ZXJIYW5kbGUsIHNpemVvZihTUElORUxfQ01EX0hBTkRMRVJfRU5UUlkpKTsKKyAgICAgICAgaWYgKHBFbnRyeSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgaGFuZGxlciBlbnRyeSIpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgcEVudHJ5LT5SZWZDb3VudCA9IDE7CisgICAgICAgIHBFbnRyeS0+SGFuZGxlciA9IEhhbmRsZXI7CisgICAgICAgIHBFbnRyeS0+Q29udGV4dCA9IEhhbmRsZXJDb250ZXh0OworCisgICAgICAgIG90THdmQ21kQWRkSGFuZGxlcihwRmlsdGVyLCBwRW50cnkpOworCisgICAgICAgIGlmIChwVGlkKSAqcFRpZCA9IHBFbnRyeS0+VHJhbnNhY3Rpb25JZDsKKyAgICB9CisgICAgCisgICAgc3RhdHVzID0gb3RMd2ZDbWRFbmNvZGVBbmRTZW5kQXN5bmMocEZpbHRlciwgQ29tbWFuZCwgS2V5LCBwRW50cnkgPyBwRW50cnktPlRyYW5zYWN0aW9uSWQgOiAwLCBNYXhEYXRhTGVuZ3RoLCBwYWNrX2Zvcm1hdCwgYXJncyk7CisKKyAgICAvLyBSZW1vdmUgdGhlIGhhbmRsZXIgZW50cnkgZnJvbSB0aGUgbGlzdAorICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpICYmIHBFbnRyeSkKKyAgICB7CisgICAgICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJnBGaWx0ZXItPmNtZExvY2spOworICAgIAorICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgbWFpbiBsaXN0CisgICAgICAgIFJlbW92ZUVudHJ5TGlzdCgmcEVudHJ5LT5MaW5rKTsKKworICAgICAgICAvLyBSZW1vdmUgdGhlIHRyYW5zYWN0aW9uIElEIGZyb20gdGhlICdpbiB1c2UnIGJpdCBmaWVsZAorICAgICAgICBwRmlsdGVyLT5jbWRUSURzSW5Vc2UgJj0gfigxIDw8IHBFbnRyeS0+VHJhbnNhY3Rpb25JZCk7CisKKyAgICAgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmcEZpbHRlci0+Y21kTG9jayk7CisKKyAgICAgICAgLy8gVE9ETyAtIFNldCBldmVudAorCisgICAgICAgIFJlbGVhc2VFbnRyeVJlZihwRW50cnkpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChwRW50cnkpIFJlbGVhc2VFbnRyeVJlZihwRW50cnkpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kU2VuZEFzeW5jKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl9vcHRfIFNQSU5FTF9DTURfSEFORExFUiAqSGFuZGxlciwKKyAgICBfSW5fb3B0XyBQVk9JRCBIYW5kbGVyQ29udGV4dCwKKyAgICBfT3V0X29wdF8gc3BpbmVsX3RpZF90ICpwVGlkLAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gVUxPTkcgTWF4RGF0YUxlbmd0aCwKKyAgICBfSW5fb3B0XyBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgCisgICAgLi4uCisgICAgKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBwYWNrX2Zvcm1hdCk7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gCisgICAgICAgIG90THdmQ21kU2VuZEFzeW5jVihwRmlsdGVyLCBIYW5kbGVyLCBIYW5kbGVyQ29udGV4dCwgcFRpZCwgQ29tbWFuZCwgS2V5LCBNYXhEYXRhTGVuZ3RoLCBwYWNrX2Zvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitCT09MRUFOCitvdEx3ZkNtZENhbmNlbCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIHNwaW5lbF90aWRfdCB0aWQKKyAgICApCit7CisgICAgUExJU1RfRU5UUlkgTGluazsKKyAgICBTUElORUxfQ01EX0hBTkRMRVJfRU5UUlkqIEhhbmRsZXIgPSBOVUxMOworICAgIEJPT0xFQU4gRm91bmQgPSBGQUxTRTsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgInRpZD0ldSIsIChVTE9ORyl0aWQpOworCisgICAgRklMVEVSX0FDUVVJUkVfTE9DSygmcEZpbHRlci0+Y21kTG9jaywgRGlzcGF0Y2hMZXZlbCk7CisgICAgCisgICAgLy8gU2VhcmNoIGZvciBtYXRjaGluZyBoYW5kbGVycyBmb3IgdGhpcyB0cmFuc2FjdGlvbiBJRAorICAgIExpbmsgPSBwRmlsdGVyLT5jbWRIYW5kbGVycy5GbGluazsKKyAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+Y21kSGFuZGxlcnMpCisgICAgeworICAgICAgICBTUElORUxfQ01EX0hBTkRMRVJfRU5UUlkqIHBFbnRyeSA9IENPTlRBSU5JTkdfUkVDT1JEKExpbmssIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSwgTGluayk7CisgICAgICAgIExpbmsgPSBMaW5rLT5GbGluazsKKworICAgICAgICBpZiAodGlkID09IHBFbnRyeS0+VHJhbnNhY3Rpb25JZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIG1haW4gbGlzdAorICAgICAgICAgICAgUmVtb3ZlRW50cnlMaXN0KCZwRW50cnktPkxpbmspOworCisgICAgICAgICAgICAvLyBTYXZlIGhhbmRsZXIgdG8gY2FuY2VsIG91dHNpZGUgbG9jaworICAgICAgICAgICAgSGFuZGxlciA9IHBFbnRyeTsKKyAgICAgICAgICAgIEZvdW5kID0gVFJVRTsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0cmFuc2FjdGlvbiBJRCBmcm9tIHRoZSAnaW4gdXNlJyBiaXQgZmllbGQKKyAgICAgICAgICAgIHBGaWx0ZXItPmNtZFRJRHNJblVzZSAmPSB+KDEgPDwgcEVudHJ5LT5UcmFuc2FjdGlvbklkKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgRklMVEVSX1JFTEVBU0VfTE9DSygmcEZpbHRlci0+Y21kTG9jaywgRGlzcGF0Y2hMZXZlbCk7CisKKyAgICBpZiAoSGFuZGxlcikKKyAgICB7CisgICAgICAgIC8vIENhbGwgdGhlIGhhbmRsZXIgZnVuY3Rpb24KKyAgICAgICAgSGFuZGxlci0+SGFuZGxlcihwRmlsdGVyLCBIYW5kbGVyLT5Db250ZXh0LCAwLCAwLCBOVUxMLCAwKTsKKworICAgICAgICAvLyBGcmVlIHRoZSBlbnRyeQorICAgICAgICBSZWxlYXNlRW50cnlSZWYoSGFuZGxlcik7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXRNc2coRFJJVkVSX0RFRkFVTFQsICJGb3VuZD0ldSIsIEZvdW5kKTsKKworICAgIHJldHVybiBGb3VuZDsKK30KKworLy8KKy8vIFNlbmQgUGFja2V0L0ZyYW1lCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kU2VuZElwNlBhY2tldEFzeW5jKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBEaXNwYXRjaExldmVsLAorICAgIF9Jbl8gUE5FVF9CVUZGRVIgSXBOZXRCdWZmZXIsCisgICAgX0luXyBCT09MRUFOIFNlY3VyZWQKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgUE5FVF9CVUZGRVJfTElTVCBOZXRCdWZmZXJMaXN0ID0gTlVMTDsKKyAgICBQTkVUX0JVRkZFUiBOZXRCdWZmZXIgPSBOVUxMOworICAgIFVMT05HIE5ldEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgUFVDSEFSIERhdGFCdWZmZXIgPSBOVUxMOworICAgIFBVQ0hBUiBJcERhdGFCdWZmZXIgPSBOVUxMOworICAgIHNwaW5lbF9zc2l6ZV90IFBhY2tlZExlbmd0aDsKKyAgICBJUFY2X0hFQURFUiogdjZIZWFkZXI7CisKKyAgICBOZXRCdWZmZXJMaXN0ID0KKyAgICAgICAgTmRpc0FsbG9jYXRlTmV0QnVmZmVyQW5kTmV0QnVmZmVyTGlzdCgKKyAgICAgICAgICAgIHBGaWx0ZXItPmNtZE5ibFBvb2wsICAgICAgICAgICAgLy8gUG9vbEhhbmRsZQorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250ZXh0U2l6ZQorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250ZXh0QmFja0ZpbGwKKyAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWRsQ2hhaW4KKyAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YU9mZnNldAorICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhTGVuZ3RoCisgICAgICAgICAgICApOworICAgIGlmIChOZXRCdWZmZXJMaXN0ID09IE5VTEwpCisgICAgeworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgTG9nV2FybmluZyhEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBjcmVhdGUgY29tbWFuZCBOZXRCdWZmZXJMaXN0Iik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgICAgIAorICAgIC8vIEluaXRpYWxpemUgTmV0QnVmZmVyIGZpZWxkcworICAgIE5ldEJ1ZmZlciA9IE5FVF9CVUZGRVJfTElTVF9GSVJTVF9OQihOZXRCdWZmZXJMaXN0KTsKKyAgICBORVRfQlVGRkVSX0NVUlJFTlRfTURMKE5ldEJ1ZmZlcikgPSBOVUxMOworICAgIE5FVF9CVUZGRVJfQ1VSUkVOVF9NRExfT0ZGU0VUKE5ldEJ1ZmZlcikgPSAwOworICAgIE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoTmV0QnVmZmVyKSA9IDA7CisgICAgTkVUX0JVRkZFUl9EQVRBX09GRlNFVChOZXRCdWZmZXIpID0gMDsKKyAgICBORVRfQlVGRkVSX0ZJUlNUX01ETChOZXRCdWZmZXIpID0gTlVMTDsKKworICAgIC8vIENhbGN1bGF0ZSBsZW5ndGggb2YgTmV0QnVmZmVyCisgICAgTmV0QnVmZmVyTGVuZ3RoID0gMjAgKyBJcE5ldEJ1ZmZlci0+RGF0YUxlbmd0aDsKKyAgICBpZiAoTmV0QnVmZmVyTGVuZ3RoIDwgNjQpIE5ldEJ1ZmZlckxlbmd0aCA9IDY0OworICAgIAorICAgIC8vIEFsbG9jYXRlIHRoZSBOZXRCdWZmZXIgZm9yIE5ldEJ1ZmZlckxpc3QKKyAgICBpZiAoTmRpc1JldHJlYXROZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBOZXRCdWZmZXJMZW5ndGgsIDAsIE5VTEwpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgeworICAgICAgICBOZXRCdWZmZXIgPSBOVUxMOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgTkIgZm9yIGNvbW1hbmQgTmV0QnVmZmVyTGlzdCwgJXUgYnl0ZXMiLCBOZXRCdWZmZXJMZW5ndGgpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciBmb3IgdGhlIGhlYWRlciBkYXRhCisgICAgRGF0YUJ1ZmZlciA9IChQVUNIQVIpTmRpc0dldERhdGFCdWZmZXIoTmV0QnVmZmVyLCBOZXRCdWZmZXJMZW5ndGgsIE5VTEwsIDEsIDApOworICAgIE5UX0FTU0VSVChEYXRhQnVmZmVyKTsKKyAgICAKKyAgICAvLyBTYXZlIHRoZSB0cnVlIE5ldEJ1ZmZlciBsZW5ndGggaW4gdGhlIHByb3RvY29sIHJlc2VydmVkCisgICAgTmV0QnVmZmVyLT5Qcm90b2NvbFJlc2VydmVkWzBdID0gKFBWT0lEKU5ldEJ1ZmZlckxlbmd0aDsKKyAgICBOZXRCdWZmZXItPkRhdGFMZW5ndGggPSAwOworCisgICAgLy8gUGFjayB0aGUgaGVhZGVyLCBjb21tYW5kIGFuZCBrZXkKKyAgICBQYWNrZWRMZW5ndGggPSAKKyAgICAgICAgc3BpbmVsX2RhdGF0eXBlX3BhY2soCisgICAgICAgICAgICBEYXRhQnVmZmVyLCAKKyAgICAgICAgICAgIE5ldEJ1ZmZlckxlbmd0aCwgCisgICAgICAgICAgICAiQ2lpIiwgCisgICAgICAgICAgICAoc3BpbmVsX3RpZF90KShTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wKSwgCisgICAgICAgICAgICAoVUlOVClTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULCAKKyAgICAgICAgICAgIChTZWN1cmVkID8gU1BJTkVMX1BST1BfU1RSRUFNX05FVCA6IFNQSU5FTF9QUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkUpKTsKKyAgICBpZiAoUGFja2VkTGVuZ3RoIDwgMCB8fCBQYWNrZWRMZW5ndGggKyBOZXRCdWZmZXItPkRhdGFMZW5ndGggPiBOZXRCdWZmZXJMZW5ndGgpCisgICAgeworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIE5UX0FTU0VSVChQYWNrZWRMZW5ndGggPj0gMyk7CisgICAgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoICs9IChVTE9ORylQYWNrZWRMZW5ndGg7CisgICAgCisgICAgLy8gQ29weSBvdmVyIHRoZSBkYXRhIGxlbmd0aAorICAgIERhdGFCdWZmZXJbTmV0QnVmZmVyLT5EYXRhTGVuZ3RoKzFdID0gKCgoVVNIT1JUKUlwTmV0QnVmZmVyLT5EYXRhTGVuZ3RoKSA+PiA4KSAmIDB4ZmY7CisgICAgRGF0YUJ1ZmZlcltOZXRCdWZmZXItPkRhdGFMZW5ndGhdICAgPSAoKChVU0hPUlQpSXBOZXRCdWZmZXItPkRhdGFMZW5ndGgpID4+IDApICYgMHhmZjsKKyAgICBOZXRCdWZmZXItPkRhdGFMZW5ndGggKz0gMjsKKyAgICAKKyAgICB2NkhlYWRlciA9IChJUFY2X0hFQURFUiopKERhdGFCdWZmZXIgKyBOZXRCdWZmZXItPkRhdGFMZW5ndGgpOworCisgICAgLy8gQ29weSB0aGUgSVAgcGFja2V0IGRhdGEKKyAgICBJcERhdGFCdWZmZXIgPSAoUFVDSEFSKU5kaXNHZXREYXRhQnVmZmVyKElwTmV0QnVmZmVyLCBJcE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCwgdjZIZWFkZXIsIDEsIDApOworICAgIGlmIChJcERhdGFCdWZmZXIgIT0gKFBVQ0hBUil2NkhlYWRlcikKKyAgICB7CisgICAgICAgIFJ0bENvcHlNZW1vcnkodjZIZWFkZXIsIElwRGF0YUJ1ZmZlciwgSXBOZXRCdWZmZXItPkRhdGFMZW5ndGgpOworICAgIH0KKworICAgIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCArPSBJcE5ldEJ1ZmZlci0+RGF0YUxlbmd0aDsKKworICAgIC8vIEdyYWIgYSByZWYgZm9yIHJ1bmRvd24gcHJvdGVjdGlvbgorICAgIGlmICghRXhBY3F1aXJlUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPmNtZFJ1bmRvd24pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0RFVklDRV9OT1RfUkVBRFk7CisgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWNxdWlyZSBydW5kb3duIHByb3RlY3Rpb24iKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgSVA2X1NFTkQ6ICVwIDogJSFJUFY2QUREUiEgPT4gJSFJUFY2QUREUiEgKCV1IGJ5dGVzKSIsIAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsIE5ldEJ1ZmZlckxpc3QsICZ2NkhlYWRlci0+U291cmNlQWRkcmVzcywgJnY2SGVhZGVyLT5EZXN0aW5hdGlvbkFkZHJlc3MsIAorICAgICAgICAgICAgICAgIE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoSXBOZXRCdWZmZXIpKTsKKworICAgIC8vIFNlbmQgdGhlIE5CTCBkb3duCisgICAgTmRpc0ZTZW5kTmV0QnVmZmVyTGlzdHMoCisgICAgICAgIHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgCisgICAgICAgIE5ldEJ1ZmZlckxpc3QsIAorICAgICAgICBORElTX0RFRkFVTFRfUE9SVF9OVU1CRVIsIAorICAgICAgICBEaXNwYXRjaExldmVsID8gTkRJU19TRU5EX0ZMQUdTX0RJU1BBVENIX0xFVkVMIDogMCk7CisKKyAgICAvLyBDbGVhciBsb2NhbCB2YXJpYWJsZSBiZWNhdXNlIHdlIGRvbid0IG93biB0aGUgTkJMIGFueSBtb3JlCisgICAgTmV0QnVmZmVyTGlzdCA9IE5VTEw7CisKK2V4aXQ6CisKKyAgICBpZiAoTmV0QnVmZmVyTGlzdCkKKyAgICB7CisgICAgICAgIGlmIChOZXRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCA9IChVTE9ORykoVUxPTkdfUFRSKU5ldEJ1ZmZlci0+UHJvdG9jb2xSZXNlcnZlZFswXTsKKyAgICAgICAgICAgIE5kaXNBZHZhbmNlTmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoLCBUUlVFLCBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBOZGlzRnJlZU5ldEJ1ZmZlckxpc3QoTmV0QnVmZmVyTGlzdCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmQ21kU2VuZE1hY0ZyYW1lQ29tcGxldGUoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBQVk9JRCBDb250ZXh0LAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aAorICAgICkKK3sKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKENvbnRleHQpOworCisgICAgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX0FCT1JUOworCisgICAgaWYgKERhdGEgJiYgQ29tbWFuZCA9PSBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMpCisgICAgeworICAgICAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX0xBU1RfU1RBVFVTKQorICAgICAgICB7CisgICAgICAgICAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsX3N0YXR1cyA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgICAgICAgICBzcGluZWxfc3NpemVfdCBwYWNrZWRfbGVuID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCAiaSIsICZzcGluZWxfc3RhdHVzKTsKKyAgICAgICAgICAgIGlmIChwYWNrZWRfbGVuID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc3BpbmVsX3N0YXR1cyA9PSBTUElORUxfU1RBVFVTX09LKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgICAgICAgICAgICAgICh2b2lkKXNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgICBEYXRhICsgcGFja2VkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGggLSAoc3BpbmVsX3NpemVfdClwYWNrZWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgImIiLAorICAgICAgICAgICAgICAgICAgICAgICAgJnBGaWx0ZXItPm90TGFzdFRyYW5zbWl0RnJhbWVQZW5kaW5nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvciA9IFNwaW5lbFN0YXR1c1RvVGhyZWFkRXJyb3Ioc3BpbmVsX3N0YXR1cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBjb21wbGV0aW9uIGV2ZW50CisgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+U2VuZE5ldEJ1ZmZlckxpc3RDb21wbGV0ZSwgSU9fTk9fSU5DUkVNRU5ULCBGQUxTRSk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmQ21kU2VuZE1hY0ZyYW1lQXN5bmMoCisgICAgX0luXyBQTVNfRklMVEVSICAgICBwRmlsdGVyLAorICAgIF9Jbl8gb3RSYWRpb0ZyYW1lKiAgUGFja2V0CisgICAgKQoreworICAgIC8vIFJlc2V0IHRoZSBjb21wbGV0aW9uIGV2ZW50CisgICAgS2VSZXNldEV2ZW50KCZwRmlsdGVyLT5TZW5kTmV0QnVmZmVyTGlzdENvbXBsZXRlKTsKKyAgICBwRmlsdGVyLT5TZW5kUGVuZGluZyA9IFRSVUU7CisKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNlbmRBc3luYygKKyAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICBvdEx3ZkNtZFNlbmRNYWNGcmFtZUNvbXBsZXRlLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgU1BJTkVMX1BST1BfU1RSRUFNX1JBVywKKyAgICAgICAgICAgIFBhY2tldC0+bUxlbmd0aCArIDIwLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfV0xFTl9TCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUworICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUywKKyAgICAgICAgICAgIFBhY2tldC0+bVBzZHUsCisgICAgICAgICAgICAodWludDMyX3QpUGFja2V0LT5tTGVuZ3RoLAorICAgICAgICAgICAgUGFja2V0LT5tQ2hhbm5lbCwKKyAgICAgICAgICAgIFBhY2tldC0+bVBvd2VyCisgICAgICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfU1RSRUFNX1JBVyBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIHBGaWx0ZXItPm90TGFzdFRyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9BQk9SVDsKKyAgICAgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+U2VuZE5ldEJ1ZmZlckxpc3RDb21wbGV0ZSwgSU9fTk9fSU5DUkVNRU5ULCBGQUxTRSk7CisgICAgfQorfQorCisvLworLy8gU2VuZCBTeW5jaHJvbm91cyBTcGluZWwgRW5jb2RlZCBDb21tYW5kCisvLworCit0eXBlZGVmIHN0cnVjdCBfU1BJTkVMX0dFVF9QUk9QX0NPTlRFWFQKK3sKKyAgICBLRVZFTlQgICAgICAgICAgICAgIENvbXBsZXRpb25FdmVudDsKKyAgICBzcGluZWxfcHJvcF9rZXlfdCAgIEtleTsKKyAgICBQVk9JRCAgICAgICAgICAgICAgKkRhdGFCdWZmZXI7CisgICAgY29uc3QgY2hhciogICAgICAgICBGb3JtYXQ7CisgICAgdmFfbGlzdCAgICAgICAgICAgICBBcmdzOworICAgIE5UU1RBVFVTICAgICAgICAgICAgU3RhdHVzOworfSBTUElORUxfR0VUX1BST1BfQ09OVEVYVDsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmR2V0UHJvcEhhbmRsZXIoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBQVk9JRCBDb250ZXh0LAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aAorICAgICkKK3sKKyAgICBTUElORUxfR0VUX1BST1BfQ09OVEVYVCogQ21kQ29udGV4dCA9IChTUElORUxfR0VUX1BST1BfQ09OVEVYVCopQ29udGV4dDsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIktleT0ldSIsIChVTE9ORylLZXkpOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwRmlsdGVyKTsKKyAgICAKKyAgICBpZiAoRGF0YSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgQ21kQ29udGV4dC0+U3RhdHVzID0gU1RBVFVTX0NBTkNFTExFRDsKKyAgICB9CisgICAgZWxzZSBpZiAoQ29tbWFuZCAhPSBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMpCisgICAgeworICAgICAgICBDbWRDb250ZXh0LT5TdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgfQorICAgIGVsc2UgaWYgKEtleSA9PSBTUElORUxfUFJPUF9MQVNUX1NUQVRVUykKKyAgICB7CisgICAgICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxfc3RhdHVzID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICAgICAgc3BpbmVsX3NzaXplX3QgcGFja2VkX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgImkiLCAmc3BpbmVsX3N0YXR1cyk7CisgICAgICAgIGlmIChwYWNrZWRfbGVuIDwgMCB8fCAoVUxPTkcpcGFja2VkX2xlbiA+IERhdGFMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3RFcnJvciBlcnJvckNvZGUgPSBTcGluZWxTdGF0dXNUb1RocmVhZEVycm9yKHNwaW5lbF9zdGF0dXMpOworICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkdldCBrZXk9JXUgZmFpbGVkIHdpdGggJSFvdEVycm9yISIsIENtZENvbnRleHQtPktleSwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhlcnJvckNvZGUpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKEtleSA9PSBDbWRDb250ZXh0LT5LZXkpCisgICAgeworICAgICAgICBpZiAoQ21kQ29udGV4dC0+RGF0YUJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgKkNtZENvbnRleHQtPkRhdGFCdWZmZXIgPSBGSUxURVJfQUxMT0NfTUVNKHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgRGF0YUxlbmd0aCk7CisgICAgICAgICAgICBpZiAoKkNtZENvbnRleHQtPkRhdGFCdWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDbWRDb250ZXh0LT5TdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoKkNtZENvbnRleHQtPkRhdGFCdWZmZXIsIERhdGEsIERhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIERhdGEgPSAodWludDhfdCopKkNtZENvbnRleHQtPkRhdGFCdWZmZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzcGluZWxfc3NpemVfdCBwYWNrZWRfbGVuID0gc3BpbmVsX2RhdGF0eXBlX3Z1bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgQ21kQ29udGV4dC0+Rm9ybWF0LCBDbWRDb250ZXh0LT5BcmdzKTsKKyAgICAgICAgaWYgKHBhY2tlZF9sZW4gPCAwIHx8IChVTE9ORylwYWNrZWRfbGVuID4gRGF0YUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgQ21kQ29udGV4dC0+U3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBDbWRDb250ZXh0LT5TdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBDbWRDb250ZXh0LT5TdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBjb21wbGV0aW9uIGV2ZW50CisgICAgS2VTZXRFdmVudCgmQ21kQ29udGV4dC0+Q29tcGxldGlvbkV2ZW50LCAwLCBGQUxTRSk7CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZEdldFByb3AoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX091dF9vcHRfIFBWT0lEICpEYXRhQnVmZmVyLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIC4uLgorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXM7CisgICAgTEFSR0VfSU5URUdFUiBXYWl0VGltZW91dDsKKyAgICBzcGluZWxfdGlkX3QgdGlkOworCisgICAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IHN0cnVjdHVyZQorICAgIFNQSU5FTF9HRVRfUFJPUF9DT05URVhUIENvbnRleHQ7CisgICAgS2VJbml0aWFsaXplRXZlbnQoJkNvbnRleHQuQ29tcGxldGlvbkV2ZW50LCBTeW5jaHJvbml6YXRpb25FdmVudCwgRkFMU0UpOworICAgIENvbnRleHQuS2V5ID0gS2V5OworICAgIENvbnRleHQuRGF0YUJ1ZmZlciA9IERhdGFCdWZmZXI7CisgICAgQ29udGV4dC5Gb3JtYXQgPSBwYWNrX2Zvcm1hdDsKKyAgICBDb250ZXh0LlN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIHZhX3N0YXJ0KENvbnRleHQuQXJncywgcGFja19mb3JtYXQpOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiS2V5PSV1IiwgKFVMT05HKUtleSk7CisKKyAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHRyYW5zYWN0aW9uCisgICAgc3RhdHVzID0gCisgICAgICAgIG90THdmQ21kU2VuZEFzeW5jVigKKyAgICAgICAgICAgIHBGaWx0ZXIsIAorICAgICAgICAgICAgb3RMd2ZHZXRQcm9wSGFuZGxlciwgCisgICAgICAgICAgICAmQ29udGV4dCwKKyAgICAgICAgICAgICZ0aWQsCisgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULCAKKyAgICAgICAgICAgIEtleSwgCisgICAgICAgICAgICAwLCAKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAoTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgLy8gU2V0IGEgMSBzZWNvbmQgd2FpdCB0aW1lb3V0CisgICAgICAgIFdhaXRUaW1lb3V0LlF1YWRQYXJ0ID0gLTEwMDAgKiAxMDAwMDsKKworICAgICAgICAvLyBXYWl0IGZvciB0aGUgcmVzcG9uc2UKKyAgICAgICAgaWYgKEtlV2FpdEZvclNpbmdsZU9iamVjdCgKKyAgICAgICAgICAgICAgICAmQ29udGV4dC5Db21wbGV0aW9uRXZlbnQsCisgICAgICAgICAgICAgICAgRXhlY3V0aXZlLAorICAgICAgICAgICAgICAgIEtlcm5lbE1vZGUsCisgICAgICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgJldhaXRUaW1lb3V0KSAhPSBTVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFvdEx3ZkNtZENhbmNlbChwRmlsdGVyLCBGQUxTRSwgdGlkKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBLZVdhaXRGb3JTaW5nbGVPYmplY3QoCisgICAgICAgICAgICAgICAgICAgICZDb250ZXh0LkNvbXBsZXRpb25FdmVudCwKKyAgICAgICAgICAgICAgICAgICAgRXhlY3V0aXZlLAorICAgICAgICAgICAgICAgICAgICBLZXJuZWxNb2RlLAorICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQ29udGV4dC5TdGF0dXMgPSBzdGF0dXM7CisgICAgfQorICAgIAorICAgIHZhX2VuZChDb250ZXh0LkFyZ3MpOworCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfREVGQVVMVCwgQ29udGV4dC5TdGF0dXMpOworCisgICAgcmV0dXJuIENvbnRleHQuU3RhdHVzOworfQorCit0eXBlZGVmIHN0cnVjdCBfU1BJTkVMX1NFVF9QUk9QX0NPTlRFWFQKK3sKKyAgICBLRVZFTlQgICAgICAgICAgICAgIENvbXBsZXRpb25FdmVudDsKKyAgICBVSU5UICAgICAgICAgICAgICAgIEV4cGVjdGVkUmVzdWx0Q29tbWFuZDsKKyAgICBzcGluZWxfcHJvcF9rZXlfdCAgIEtleTsKKyAgICBOVFNUQVRVUyAgICAgICAgICAgIFN0YXR1czsKK30gU1BJTkVMX1NFVF9QUk9QX0NPTlRFWFQ7CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZlNldFByb3BIYW5kbGVyKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gUFZPSUQgQ29udGV4dCwKKyAgICBfSW5fIFVJTlQgQ29tbWFuZCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgKKyAgICApCit7CisgICAgU1BJTkVMX1NFVF9QUk9QX0NPTlRFWFQqIENtZENvbnRleHQgPSAoU1BJTkVMX1NFVF9QUk9QX0NPTlRFWFQqKUNvbnRleHQ7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJLZXk9JXUiLCAoVUxPTkcpS2V5KTsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIocEZpbHRlcik7CisgICAgCisgICAgaWYgKERhdGEgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFNUQVRVU19DQU5DRUxMRUQ7CisgICAgfQorICAgIGVsc2UgaWYgKENvbW1hbmQgPT0gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTICYmIEtleSA9PSBTUElORUxfUFJPUF9MQVNUX1NUQVRVUykKKyAgICB7CisgICAgICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxfc3RhdHVzID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICAgICAgc3BpbmVsX3NzaXplX3QgcGFja2VkX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgImkiLCAmc3BpbmVsX3N0YXR1cyk7CisgICAgICAgIGlmIChwYWNrZWRfbGVuIDwgMCB8fCAoVUxPTkcpcGFja2VkX2xlbiA+IERhdGFMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3RFcnJvciBlcnJvckNvZGUgPSBTcGluZWxTdGF0dXNUb1RocmVhZEVycm9yKHNwaW5lbF9zdGF0dXMpOworICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIlNldCBrZXk9JXUgZmFpbGVkIHdpdGggJSFvdEVycm9yISIsIENtZENvbnRleHQtPktleSwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhlcnJvckNvZGUpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKENvbW1hbmQgIT0gQ21kQ29udGV4dC0+RXhwZWN0ZWRSZXN1bHRDb21tYW5kKQorICAgIHsKKyAgICAgICAgTlRfQVNTRVJUKEZBTFNFKTsKKyAgICAgICAgQ21kQ29udGV4dC0+U3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIH0KKyAgICBlbHNlIGlmIChLZXkgPT0gQ21kQ29udGV4dC0+S2V5KQorICAgIHsKKyAgICAgICAgQ21kQ29udGV4dC0+U3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE5UX0FTU0VSVChGQUxTRSk7CisgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGNvbXBsZXRpb24gZXZlbnQKKyAgICBLZVNldEV2ZW50KCZDbWRDb250ZXh0LT5Db21wbGV0aW9uRXZlbnQsIDAsIEZBTFNFKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kU2V0UHJvcFYoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBVSU5UIENvbW1hbmQsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsCisgICAgX0luX29wdF8gdmFfbGlzdCBhcmdzCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1czsKKyAgICBMQVJHRV9JTlRFR0VSIFdhaXRUaW1lb3V0OworICAgIHNwaW5lbF90aWRfdCB0aWQ7CisKKyAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgc3RydWN0dXJlCisgICAgU1BJTkVMX1NFVF9QUk9QX0NPTlRFWFQgQ29udGV4dDsKKyAgICBLZUluaXRpYWxpemVFdmVudCgmQ29udGV4dC5Db21wbGV0aW9uRXZlbnQsIFN5bmNocm9uaXphdGlvbkV2ZW50LCBGQUxTRSk7CisgICAgQ29udGV4dC5LZXkgPSBLZXk7CisgICAgQ29udGV4dC5TdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIkNtZD0ldSBLZXk9JXUiLCBDb21tYW5kLCAoVUxPTkcpS2V5KTsKKworICAgIGlmIChDb21tYW5kID09IFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQpCisgICAgeworICAgICAgICBDb250ZXh0LkV4cGVjdGVkUmVzdWx0Q29tbWFuZCA9IFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUzsKKyAgICB9CisgICAgZWxzZSBpZiAoQ29tbWFuZCA9PSBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJUKQorICAgIHsKKyAgICAgICAgQ29udGV4dC5FeHBlY3RlZFJlc3VsdENvbW1hbmQgPSBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJURUQ7CisgICAgfQorICAgIGVsc2UgaWYgKENvbW1hbmQgPT0gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRSkKKyAgICB7CisgICAgICAgIENvbnRleHQuRXhwZWN0ZWRSZXN1bHRDb21tYW5kID0gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRUQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEFTU0VSVChGQUxTRSk7CisgICAgfQorCisgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCB0cmFuc2FjdGlvbgorICAgIHN0YXR1cyA9IAorICAgICAgICBvdEx3ZkNtZFNlbmRBc3luY1YoCisgICAgICAgICAgICBwRmlsdGVyLCAKKyAgICAgICAgICAgIG90THdmU2V0UHJvcEhhbmRsZXIsIAorICAgICAgICAgICAgJkNvbnRleHQsIAorICAgICAgICAgICAgJnRpZCwKKyAgICAgICAgICAgIENvbW1hbmQsCisgICAgICAgICAgICBLZXksIAorICAgICAgICAgICAgOCwgCisgICAgICAgICAgICBwYWNrX2Zvcm1hdCwKKyAgICAgICAgICAgIGFyZ3MpOworICAgIGlmIChOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICAvLyBTZXQgYSAxIHNlY29uZCB3YWl0IHRpbWVvdXQKKyAgICAgICAgV2FpdFRpbWVvdXQuUXVhZFBhcnQgPSAtMTAwMCAqIDEwMDAwOworCisgICAgICAgIC8vIFdhaXQgZm9yIHRoZSByZXNwb25zZQorICAgICAgICBpZiAoS2VXYWl0Rm9yU2luZ2xlT2JqZWN0KAorICAgICAgICAgICAgICAgICZDb250ZXh0LkNvbXBsZXRpb25FdmVudCwKKyAgICAgICAgICAgICAgICBFeGVjdXRpdmUsCisgICAgICAgICAgICAgICAgS2VybmVsTW9kZSwKKyAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAmV2FpdFRpbWVvdXQpICE9IFNUQVRVU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW90THdmQ21kQ2FuY2VsKHBGaWx0ZXIsIEZBTFNFLCB0aWQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEtlV2FpdEZvclNpbmdsZU9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgJkNvbnRleHQuQ29tcGxldGlvbkV2ZW50LAorICAgICAgICAgICAgICAgICAgICBFeGVjdXRpdmUsCisgICAgICAgICAgICAgICAgICAgIEtlcm5lbE1vZGUsCisgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBDb250ZXh0LlN0YXR1cyA9IHN0YXR1czsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBDb250ZXh0LlN0YXR1cyk7CisKKyAgICByZXR1cm4gQ29udGV4dC5TdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZFNldFByb3AoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsCisgICAgLi4uCisgICAgKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBwYWNrX2Zvcm1hdCk7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gb3RMd2ZDbWRTZXRQcm9wVihwRmlsdGVyLCBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULCBLZXksIHBhY2tfZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kSW5zZXJ0UHJvcCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fb3B0XyBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwKKyAgICAuLi4KKyAgICApCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIHBhY2tfZm9ybWF0KTsKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBvdEx3ZkNtZFNldFByb3BWKHBGaWx0ZXIsIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlQsIEtleSwgcGFja19mb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZDbWRSZW1vdmVQcm9wKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9vcHRfIGNvbnN0IGNoYXIgKnBhY2tfZm9ybWF0LAorICAgIC4uLgorICAgICkKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgcGFja19mb3JtYXQpOworICAgIE5UU1RBVFVTIHN0YXR1cyA9IG90THdmQ21kU2V0UHJvcFYocEZpbHRlciwgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRSwgS2V5LCBwYWNrX2Zvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8vCisvLyBHZW5lcmFsIFNwaW5lbCBIZWxwZXJzCisvLworCitvdEVycm9yCitTcGluZWxTdGF0dXNUb1RocmVhZEVycm9yKAorICAgIHNwaW5lbF9zdGF0dXNfdCBlcnJvcgorICAgICkKK3sKKyAgICBvdEVycm9yIHJldDsKKworICAgIHN3aXRjaCAoZXJyb3IpCisgICAgeworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19PSzoKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfRkFJTFVSRToKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfRkFJTEVEOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19EUk9QUEVEOgorICAgICAgICByZXQgPSBPVF9FUlJPUl9EUk9QOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19OT01FTToKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfTk9fQlVGUzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfQlVTWToKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfQlVTWTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1I6CisgICAgICAgIHJldCA9IE9UX0VSUk9SX1BBUlNFOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19JTlZBTElEX0FSR1VNRU5UOgorICAgICAgICByZXQgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX1VOSU1QTEVNRU5URUQ6CisgICAgICAgIHJldCA9IE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9TVEFURToKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfTk9fQUNLOgorICAgICAgICByZXQgPSBPVF9FUlJPUl9OT19BQ0s7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0NDQV9GQUlMVVJFOgorICAgICAgICByZXQgPSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19BTFJFQURZOgorICAgICAgICByZXQgPSBPVF9FUlJPUl9BTFJFQURZOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19JVEVNX05PVF9GT1VORDoKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChlcnJvciA+PSBTUElORUxfU1RBVFVTX1NUQUNLX05BVElWRV9fQkVHSU4gJiYgZXJyb3IgPD0gU1BJTkVMX1NUQVRVU19TVEFDS19OQVRJVkVfX0VORCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gKG90RXJyb3IpKGVycm9yIC0gU1BJTkVMX1NUQVRVU19TVEFDS19OQVRJVkVfX0JFR0lOKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE9UX0VSUk9SX0ZBSUxFRDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitCT09MRUFOCit0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICBjb25zdCB1aW50OF90ICpkYXRhX2luLAorICAgIHNwaW5lbF9zaXplX3QgZGF0YV9sZW4sCisgICAgY29uc3QgY2hhciAqcGFja19mb3JtYXQsCisgICAgLi4uCisgICAgKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBwYWNrX2Zvcm1hdCk7CisgICAgc3BpbmVsX3NzaXplX3QgcGFja2VkX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV92dW5wYWNrKGRhdGFfaW4sIGRhdGFfbGVuLCBwYWNrX2Zvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgcmV0dXJuICEocGFja2VkX2xlbiA8IDAgfHwgKHNwaW5lbF9zaXplX3QpcGFja2VkX2xlbiA+IGRhdGFfbGVuKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9jb21tYW5kLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvY29tbWFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNzNkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvY29tbWFuZC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIGZvciBzZW5kaW5nL3JlY2VpdmluZyBTcGluZWwgY29tbWFuZHMgdG8gdGhlIG1pbmlwb3J0LgorICovCisKKyNpZm5kZWYgX0NPTU1BTkRfSF8KKyNkZWZpbmUgX0NPTU1BTkRfSF8KKworLy8KKy8vIEluaXRpYWxpemF0aW9uCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitORElTX1NUQVRVUyAKK290THdmQ21kSW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgCitvdEx3ZkNtZFVuaW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZFJlc2V0RGV2aWNlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBmQXN5bmMKKyAgICApOworCisvLworLy8gUmVjZWl2ZSBTcGluZWwgRW5jb2RlZCBDb21tYW5kCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQordm9pZAorb3RMd2ZDbWRSZWN2ZWl2ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEJ1ZmZlckxlbmd0aCkgY29uc3QgUFVDSEFSIEJ1ZmZlciwKKyAgICBfSW5fIFVMT05HIEJ1ZmZlckxlbmd0aAorICAgICk7CisKKy8vCisvLyBTZW5kIEFzeW5jIFNwaW5lbCBFbmNvZGVkIENvbW1hbmQKKy8vCisKK3R5cGVkZWYKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECisoU1BJTkVMX0NNRF9IQU5ETEVSKSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIFBWT0lEIENvbnRleHQsCisgICAgX0luXyBVSU5UIENvbW1hbmQsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kU2VuZEFzeW5jVigKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fb3B0XyBTUElORUxfQ01EX0hBTkRMRVIgKkhhbmRsZXIsCisgICAgX0luX29wdF8gUFZPSUQgSGFuZGxlckNvbnRleHQsCisgICAgX091dF9vcHRfIHNwaW5lbF90aWRfdCAqcFRpZCwKKyAgICBfSW5fIFVJTlQgQ29tbWFuZCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fIFVMT05HIE1heERhdGFMZW5ndGgsCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIF9Jbl9vcHRfIHZhX2xpc3QgYXJncworICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZFNlbmRBc3luYygKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fb3B0XyBTUElORUxfQ01EX0hBTkRMRVIgKkhhbmRsZXIsCisgICAgX0luX29wdF8gUFZPSUQgSGFuZGxlckNvbnRleHQsCisgICAgX091dF9vcHRfIHNwaW5lbF90aWRfdCAqcFRpZCwKKyAgICBfSW5fIFVJTlQgQ29tbWFuZCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fIFVMT05HIE1heERhdGFMZW5ndGgsCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIC4uLgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitCT09MRUFOCitvdEx3ZkNtZENhbmNlbCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIHNwaW5lbF90aWRfdCB0aWQKKyAgICApOworCisvLworLy8gU2VuZCBQYWNrZXQvRnJhbWUKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZDbWRTZW5kSXA2UGFja2V0QXN5bmMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBQTkVUX0JVRkZFUiBJcE5ldEJ1ZmZlciwKKyAgICBfSW5fIEJPT0xFQU4gU2VjdXJlZAorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmQ21kU2VuZE1hY0ZyYW1lQXN5bmMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBvdFJhZGlvRnJhbWUqIFBhY2tldAorICAgICk7CisKKy8vCisvLyBTZW5kIFN5bmNocm9ub3VzIFNwaW5lbCBFbmNvZGVkIENvbW1hbmQKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZEdldFByb3AoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX091dF9vcHRfIFBWT0lEICpEYXRhQnVmZmVyLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIC4uLgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZFNldFByb3AoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIC4uLgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZEluc2VydFByb3AoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsCisgICAgLi4uCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kUmVtb3ZlUHJvcCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fb3B0XyBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwKKyAgICAuLi4KKyAgICApOworCisvLworLy8gR2VuZXJhbCBTcGluZWwgSGVscGVycworLy8KKworb3RFcnJvcgorU3BpbmVsU3RhdHVzVG9UaHJlYWRFcnJvcigKKyAgICBzcGluZWxfc3RhdHVzX3QgZXJyb3IKKyAgICApOworCitCT09MRUFOCit0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICBjb25zdCB1aW50OF90ICpkYXRhX2luLAorICAgIHNwaW5lbF9zaXplX3QgZGF0YV9sZW4sCisgICAgY29uc3QgY2hhciAqcGFja19mb3JtYXQsCisgICAgLi4uCisgICAgKTsKKworI2VuZGlmICAvL19DT01NQU5EX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvZGF0YXBhdGguYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kYXRhcGF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYWI2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvZGF0YXBhdGguYwpAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9ucyByZXF1aXJlZCBmb3IgaGFuZGxpbmcgTmV0QnVmZmVyTGlzdHMgaW4KKyAqICB0aGUgZGF0YSBwYXRoLgorICovCisKKyNpbmNsdWRlICJwcmVjb21wLmgiCisjaW5jbHVkZSAiZGF0YXBhdGgudG1oIgorCisjaWZkZWYgTE9HX0JVRkZFUlMKKworX19mb3JjZWlubGluZSBDSEFSIFRvSGV4KENIQVIgbikKK3sKKyAgICBpZiAobiA+IDkpIHJldHVybiAnQScgKyAobiAtIDEwKTsKKyAgICBlbHNlICAgICAgIHJldHVybiAnMCcgKyBuOworfQorCisjZGVmaW5lIG90TG9nTGluZUxlbmd0aCAzMgorCisvLyBIZWxwZXIgdG8gbG9nIGEgYnVmZmVyCit2b2lkCitvdExvZ0J1ZmZlcigKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEJ1ZmZlckxlbmd0aCkgUFVDSEFSIEJ1ZmZlciwKKyAgICBfSW5fICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkcgIEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBVTE9ORyBpbmRleCA9IDA7CisgICAgd2hpbGUgKGluZGV4IDwgQnVmZmVyTGVuZ3RoKQorICAgIHsKKyAgICAgICAgQ0hBUiBzekJ1ZmZlcltvdExvZ0xpbmVMZW5ndGggKiA0XSA9ICIgICI7CisgICAgICAgIFBDSEFSIGJ1ZiA9IHN6QnVmZmVyICsgMjsKKyAgICAgICAgZm9yIChVTE9ORyBpID0gMDsgaSA8IG90TG9nTGluZUxlbmd0aCAmJiBpICsgaW5kZXggPCBCdWZmZXJMZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYnVmWzBdID0gVG9IZXgoQnVmZmVyW2kgKyBpbmRleF0gPj4gNCk7CisgICAgICAgICAgICBidWZbMV0gPSBUb0hleChCdWZmZXJbaSArIGluZGV4XSAmIDB4MEYpOworICAgICAgICAgICAgYnVmWzJdID0gJyAnOworICAgICAgICAgICAgYnVmICs9IDM7CisgICAgICAgIH0KKyAgICAgICAgYnVmWzBdID0gMDsKKworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICIlcyIsIHN6QnVmZmVyKTsKKyAgICAgICAgaW5kZXggKz0gb3RMb2dMaW5lTGVuZ3RoOworICAgIH0KK30KKworI2VuZGlmCisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK1ZPSUQKK0ZpbHRlclNlbmROZXRCdWZmZXJMaXN0c0NvbXBsZXRlKAorICAgIE5ESVNfSEFORExFICAgICAgICAgRmlsdGVyTW9kdWxlQ29udGV4dCwKKyAgICBQTkVUX0JVRkZFUl9MSVNUICAgIE5ldEJ1ZmZlckxpc3RzLAorICAgIFVMT05HICAgICAgICAgICAgICAgU2VuZENvbXBsZXRlRmxhZ3MKKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBTZW5kIGNvbXBsZXRlIGhhbmRsZXIKKworICAgIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHdoZW5ldmVyIHRoZSBsb3dlciBsYXllciBpcyBmaW5pc2hlZCBwcm9jZXNzaW5nCisgICAgc2VudCBORVRfQlVGRkVSX0xJU1RzLiAgSWYgdGhlIGZpbHRlciBkb2VzIG5vdCBuZWVkIHRvIGJlIGludm9sdmVkIGluIHRoZQorICAgIHNlbmQgcGF0aCwgeW91IHNob3VsZCByZW1vdmUgdGhpcyByb3V0aW5lIGFuZCB0aGUgRmlsdGVyU2VuZE5ldEJ1ZmZlckxpc3RzCisgICAgcm91dGluZS4gIE5ESVMgd2lsbCBwYXNzIGFsb25nIHNlbmQgcGFja2V0cyBvbiBiZWhhbGYgb2YgeW91ciBmaWx0ZXIgbW9yZQorICAgIGVmZmljaWVudGx5IHRoYW4gdGhlIGZpbHRlciBjYW4uCisKK0FyZ3VtZW50czoKKworICAgIEZpbHRlck1vZHVsZUNvbnRleHQgICAgIC0gb3VyIGZpbHRlciBjb250ZXh0CisgICAgTmV0QnVmZmVyTGlzdHMgICAgICAgICAgLSBhIGNoYWluIG9mIE5CTHMgdGhhdCBhcmUgYmVpbmcgcmV0dXJuZWQgdG8geW91CisgICAgU2VuZENvbXBsZXRlRmxhZ3MgICAgICAgLSBmbGFncyAoc2VlIGRvY3VtZW50YXRpb24pCisKKy0tKi8KK3sKKyAgICBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisgICAgCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwLCBOQkw6ICVwICUhU1RBVFVTISIsIEZpbHRlck1vZHVsZUNvbnRleHQsIE5ldEJ1ZmZlckxpc3RzLCBOZXRCdWZmZXJMaXN0cy0+U3RhdHVzKTsKKworICAgIFBORVRfQlVGRkVSX0xJU1QgTkJMID0gTmV0QnVmZmVyTGlzdHM7CisgICAgd2hpbGUgKE5CTCkKKyAgICB7CisgICAgICAgIFBORVRfQlVGRkVSX0xJU1QgTmV4dE5CTCA9IE5CTC0+TmV4dDsKKyAgICAgICAgUE5FVF9CVUZGRVIgTmV0QnVmZmVyID0gTkVUX0JVRkZFUl9MSVNUX0ZJUlNUX05CKE5CTCk7CisKKyAgICAgICAgLy8gQ2FuY2VsIGNvbW1hbmQgaWYgd2UgZmFpbGVkIHRvIHNlbmQgdGhlIE5CTAorICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoTkJMLT5TdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBzcGluZWxfdGlkX3QgdGlkID0gKHNwaW5lbF90aWRfdCkoVUxPTkdfUFRSKU5ldEJ1ZmZlci0+UHJvdG9jb2xSZXNlcnZlZFsxXTsKKyAgICAgICAgICAgIGlmICh0aWQgIT0gMCkKKyAgICAgICAgICAgIHsKKyNpZmRlZiBDT01NQU5EX0lOSVRfUkVUUlkKKyAgICAgICAgICAgICAgICBOVF9BU1NFUlQocEZpbHRlci0+Y21kSW5pdFRyeUNvdW50IDwgOSB8fCBOQkwtPlN0YXR1cyAhPSBORElTX1NUQVRVU19QQVVTRUQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgb3RMd2ZDbWRDYW5jZWwocEZpbHRlciwgTkRJU19URVNUX1NFTkRfQ09NUExFVEVfQVRfRElTUEFUQ0hfTEVWRUwoU2VuZENvbXBsZXRlRmxhZ3MpLCB0aWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoID0gKFVMT05HKShVTE9OR19QVFIpTmV0QnVmZmVyLT5Qcm90b2NvbFJlc2VydmVkWzBdOworICAgICAgICBOZGlzQWR2YW5jZU5ldEJ1ZmZlckRhdGFTdGFydChOZXRCdWZmZXIsIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCwgVFJVRSwgTlVMTCk7CisgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyTGlzdChOQkwpOworCisgICAgICAgIC8vIFJlbGVhc2UgdGhlIGNvbW1hbmQgcnVuZG93biBwcm90ZWN0aW9uCisgICAgICAgIEV4UmVsZWFzZVJ1bmRvd25Qcm90ZWN0aW9uKCZwRmlsdGVyLT5jbWRSdW5kb3duKTsKKworICAgICAgICBOQkwgPSBOZXh0TkJMOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9EQVRBX1BBVEgpOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitGaWx0ZXJTZW5kTmV0QnVmZmVyTGlzdHMoCisgICAgTkRJU19IQU5ETEUgICAgICAgICBGaWx0ZXJNb2R1bGVDb250ZXh0LAorICAgIFBORVRfQlVGRkVSX0xJU1QgICAgTmV0QnVmZmVyTGlzdHMsCisgICAgTkRJU19QT1JUX05VTUJFUiAgICBQb3J0TnVtYmVyLAorICAgIFVMT05HICAgICAgICAgICAgICAgU2VuZEZsYWdzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2VuZCBOZXQgQnVmZmVyIExpc3QgaGFuZGxlcgorICAgIFRoaXMgZnVuY3Rpb24gaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gZm9yIGZpbHRlciBkcml2ZXJzLiBJZiBwcm92aWRlZCwgTkRJUworICAgIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHRyYW5zbWl0IGEgbGlua2VkIGxpc3Qgb2YgTmV0QnVmZmVycywgZGVzY3JpYmVkIGJ5IGEKKyAgICBOZXRCdWZmZXJMaXN0LCBvdmVyIHRoZSBuZXR3b3JrLiBJZiB0aGlzIGhhbmRsZXIgaXMgTlVMTCwgTkRJUyB3aWxsIHNraXAgY2FsbGluZworICAgIHRoaXMgZmlsdGVyIHdoZW4gc2VuZGluZyBhIE5ldEJ1ZmZlckxpc3QgYW5kIHdpbGwgY2FsbCB0aGUgbmV4dCBsb3dlcgorICAgIGRyaXZlciBpbiB0aGUgc3RhY2suICBBIGZpbHRlciB0aGF0IGRvZXNuJ3QgcHJvdmlkZSBhIEZpbGVyU2VuZE5ldEJ1ZmZlckxpc3QKKyAgICBoYW5kbGVyIGNhbiBub3Qgb3JpZ2luYXRlIGEgc2VuZCBvbiBpdHMgb3duLgorCitBcmd1bWVudHM6CisKKyAgICBGaWx0ZXJNb2R1bGVDb250ZXh0ICAgICAtIG91ciBmaWx0ZXIgY29udGV4dCBhcmVhCisgICAgTmV0QnVmZmVyTGlzdHMgICAgICAgICAgLSBhIExpc3Qgb2YgTmV0QnVmZmVyTGlzdHMgdG8gc2VuZAorICAgIFBvcnROdW1iZXIgICAgICAgICAgICAgIC0gUG9ydCBOdW1iZXIgdG8gd2hpY2ggdGhpcyBzZW5kIGlzIHRhcmdldGVkCisgICAgU2VuZEZsYWdzICAgICAgICAgICAgICAgLSBzcGVjaWZpZXMgaWYgdGhlIGNhbGwgaXMgYXQgRElTUEFUQ0hfTEVWRUwKKworLS0qLworeworICAgIFBNU19GSUxURVIgICAgICAgICAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisgICAgQk9PTEVBTiAgICAgICAgICAgICBEaXNwYXRjaExldmVsID0gTkRJU19URVNUX1NFTkRfQVRfRElTUEFUQ0hfTEVWRUwoU2VuZEZsYWdzKTsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoUG9ydE51bWJlcik7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAsIE5CTDogJXAiLCBGaWx0ZXJNb2R1bGVDb250ZXh0LCBOZXRCdWZmZXJMaXN0cyk7CisKKyAgICAvLyBUcnkgdG8gZ3JhYiBhIHJlZiBvbiB0aGUgZGF0YSBwYXRoIGZpcnN0LCB0byBtYWtlIHN1cmUgd2UgYXJlIGFsbG93ZWQKKyAgICBpZiAoIUV4QWNxdWlyZVJ1bmRvd25Qcm90ZWN0aW9uKCZwRmlsdGVyLT5FeHRlcm5hbFJlZnMpKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZhaWxpbmcgU2VuZE5ldEJ1ZmZlckxpc3RzIGJlY2F1c2UgZGF0YSBwYXRoIGlzbid0IGFjdGl2ZS4iKTsKKworICAgICAgICAvLyBJZ25vcmUgYW55IE5CTHMgd2UgZ2V0IGlmIHdlIGFyZW4ndCBhY3RpdmUgKGNhbid0IGdldCBhIHJlZikKKyAgICAgICAgUE5FVF9CVUZGRVJfTElTVCBDdXJyTmJsID0gTmV0QnVmZmVyTGlzdHM7CisgICAgICAgIHdoaWxlIChDdXJyTmJsKQorICAgICAgICB7CisgICAgICAgICAgICBORVRfQlVGRkVSX0xJU1RfU1RBVFVTKEN1cnJOYmwpID0gTkRJU19TVEFUVVNfUEFVU0VEOworICAgICAgICAgICAgQ3Vyck5ibCA9IE5FVF9CVUZGRVJfTElTVF9ORVhUX05CTChDdXJyTmJsKTsKKyAgICAgICAgfQorICAgICAgICBOZGlzRlNlbmROZXRCdWZmZXJMaXN0c0NvbXBsZXRlKAorICAgICAgICAgICAgcEZpbHRlci0+RmlsdGVySGFuZGxlLAorICAgICAgICAgICAgTmV0QnVmZmVyTGlzdHMsCisgICAgICAgICAgICBEaXNwYXRjaExldmVsID8gTkRJU19TRU5EX0NPTVBMRVRFX0ZMQUdTX0RJU1BBVENIX0xFVkVMIDogMAorICAgICAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1JBRElPX01PREUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluZGljYXRlIGEgbmV3IE5CTCB0byBwcm9jZXNzIG9uIG91ciB3b3JrZXIgdGhyZWFkCisgICAgICAgICAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3TmV0QnVmZmVyTGlzdHMoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBEaXNwYXRjaExldmVsLAorICAgICAgICAgICAgICAgIE5ldEJ1ZmZlckxpc3RzCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFBORVRfQlVGRkVSX0xJU1QgQ3Vyck5ibCA9IE5ldEJ1ZmZlckxpc3RzOworICAgICAgICAgICAgd2hpbGUgKEN1cnJOYmwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUE5FVF9CVUZGRVIgQ3Vyck5iID0gTkVUX0JVRkZFUl9MSVNUX0ZJUlNUX05CKEN1cnJOYmwpOworICAgICAgICAgICAgICAgIHdoaWxlIChDdXJyTmIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdEx3ZkNtZFNlbmRJcDZQYWNrZXRBc3luYyhwRmlsdGVyLCBEaXNwYXRjaExldmVsLCBDdXJyTmIsIFRSVUUpOworICAgICAgICAgICAgICAgICAgICBDdXJyTmIgPSBORVRfQlVGRkVSX05FWFRfTkIoQ3Vyck5iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBORVRfQlVGRkVSX0xJU1RfU1RBVFVTKEN1cnJOYmwpID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICBDdXJyTmJsID0gTkVUX0JVRkZFUl9MSVNUX05FWFRfTkJMKEN1cnJOYmwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBOZGlzRlNlbmROZXRCdWZmZXJMaXN0c0NvbXBsZXRlKAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPkZpbHRlckhhbmRsZSwKKyAgICAgICAgICAgICAgICBOZXRCdWZmZXJMaXN0cywKKyAgICAgICAgICAgICAgICBEaXNwYXRjaExldmVsID8gTkRJU19TRU5EX0NPTVBMRVRFX0ZMQUdTX0RJU1BBVENIX0xFVkVMIDogMAorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZWxlYXNlIHRoZSBkYXRhIHBhdGggcmVmIG5vdworICAgICAgICBFeFJlbGVhc2VSdW5kb3duUHJvdGVjdGlvbigmcEZpbHRlci0+RXh0ZXJuYWxSZWZzKTsKKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RBVEFfUEFUSCk7Cit9CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK1ZPSUQKK0ZpbHRlckNhbmNlbFNlbmROZXRCdWZmZXJMaXN0cygKKyAgICBORElTX0hBTkRMRSAgICAgICAgICAgICBGaWx0ZXJNb2R1bGVDb250ZXh0LAorICAgIFBWT0lEICAgICAgICAgICAgICAgICAgIENhbmNlbElkCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgVGhpcyBmdW5jdGlvbiBjYW5jZWxzIGFueSBORVRfQlVGRkVSX0xJU1RzIHBlbmRlZCBpbiB0aGUgZmlsdGVyIGFuZCB0aGVuCisgICAgY2FsbHMgdGhlIE5kaXNGQ2FuY2VsU2VuZE5ldEJ1ZmZlckxpc3RzIHRvIHByb3BhZ2F0ZSB0aGUgY2FuY2VsIG9wZXJhdGlvbi4KKworICAgIElmIHlvdXIgZHJpdmVyIGRvZXMgbm90IHF1ZXVlIGFueSBzZW5kIE5CTHMsIHlvdSBtYXkgb21pdCB0aGlzIHJvdXRpbmUuCisgICAgTkRJUyB3aWxsIHByb3BhZ2F0ZSB0aGUgY2FuY2VsYXRpb24gb24geW91ciBiZWhhbGYgbW9yZSBlZmZpY2llbnRseS4KKworQXJndW1lbnRzOgorCisgICAgRmlsdGVyTW9kdWxlQ29udGV4dCAgICAgIC0gb3VyIGZpbHRlciBjb250ZXh0IGFyZWEuCisgICAgQ2FuY2VsSWQgICAgICAgICAgICAgICAgIC0gYW4gaWRlbnRpZmllciBmb3IgYWxsIE5CTHMgdGhhdCBzaG91bGQgYmUgZGVxdWV1ZWQKKworKi8KK3sKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSAoUE1TX0ZJTFRFUilGaWx0ZXJNb2R1bGVDb250ZXh0OworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwLCBDYW5jZWxJZDogJXAiLCBGaWx0ZXJNb2R1bGVDb250ZXh0LCBDYW5jZWxJZCk7CisKKyAgICAvLyBPbmx5IGNhbmNlbCBpZiB3ZSBhcmUgJ1RocmVhZCBvbiBIb3N0Jywgb3RoZXJ3aXNlIHdlIGRvIGV2ZXJ5dGhpbmcgaW5saW5lCisgICAgaWYgKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1JBRElPX01PREUpCisgICAgeworICAgICAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV0QnVmZmVyTGlzdHNDYW5jZWxsZWQocEZpbHRlciwgQ2FuY2VsSWQpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9EQVRBX1BBVEgpOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitGaWx0ZXJSZXR1cm5OZXRCdWZmZXJMaXN0cygKKyAgICBORElTX0hBTkRMRSAgICAgICAgIEZpbHRlck1vZHVsZUNvbnRleHQsCisgICAgUE5FVF9CVUZGRVJfTElTVCAgICBOZXRCdWZmZXJMaXN0cywKKyAgICBVTE9ORyAgICAgICAgICAgICAgIFJldHVybkZsYWdzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRmlsdGVyUmV0dXJuTmV0QnVmZmVyTGlzdHMgaGFuZGxlci4KKyAgICBGaWx0ZXJSZXR1cm5OZXRCdWZmZXJMaXN0cyBpcyBhbiBvcHRpb25hbCBmdW5jdGlvbi4gSWYgcHJvdmlkZWQsIE5ESVMgY2FsbHMKKyAgICBGaWx0ZXJSZXR1cm5OZXRCdWZmZXJMaXN0cyB0byByZXR1cm4gdGhlIG93bmVyc2hpcCBvZiBvbmUgb3IgbW9yZSBOZXRCdWZmZXJMaXN0cworICAgIGFuZCB0aGVpciBlbWJlZGRlZCBOZXRCdWZmZXJzIHRvIHRoZSBmaWx0ZXIgZHJpdmVyLiBJZiB0aGlzIGhhbmRsZXIgaXMgTlVMTCwgTkRJUworICAgIHdpbGwgc2tpcCBjYWxsaW5nIHRoaXMgZmlsdGVyIHdoZW4gcmV0dXJuaW5nIE5ldEJ1ZmZlckxpc3RzIHRvIHRoZSB1bmRlcmx5aW5nCisgICAgbWluaXBvcnQgYW5kIHdpbGwgY2FsbCB0aGUgbmV4dCBsb3dlciBkcml2ZXIgaW4gdGhlIHN0YWNrLiBBIGZpbHRlciB0aGF0IGRvZXNuJ3QKKyAgICBwcm92aWRlIGEgRmlsdGVyUmV0dXJuTmV0QnVmZmVyTGlzdHMgaGFuZGxlciBjYW5ub3Qgb3JpZ2luYXRlIGEgcmVjZWl2ZSBpbmRpY2F0aW9uCisgICAgb24gaXRzIG93bi4KKworQXJndW1lbnRzOgorCisgICAgRmlsdGVySW5zdGFuY2VDb250ZXh0ICAgICAgIC0gb3VyIGZpbHRlciBjb250ZXh0IGFyZWEKKyAgICBOZXRCdWZmZXJMaXN0cyAgICAgICAgICAgICAgLSBhIGxpbmtlZCBsaXN0IG9mIE5ldEJ1ZmZlckxpc3RzIHRoYXQgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciBkcml2ZXIgaW5kaWNhdGVkIGluIGEgcHJldmlvdXMgY2FsbCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5kaXNGSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMKKyAgICBSZXR1cm5GbGFncyAgICAgICAgICAgICAgICAgLSBmbGFncyBzcGVjaWZ5aW5nIGlmIHRoZSBjYWxsZXIgaXMgYXQgRElTUEFUQ0hfTEVWRUwKKworLS0qLworeworICAgIFBNU19GSUxURVIgICAgICAgICAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKFJldHVybkZsYWdzKTsKKyAgICAKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAsIE5CTDogJXAiLCBwRmlsdGVyLCBOZXRCdWZmZXJMaXN0cyk7CisKKyAgICBQTkVUX0JVRkZFUl9MSVNUIEN1cnJOYmwgPSBOZXRCdWZmZXJMaXN0czsKKyAgICB3aGlsZSAoQ3Vyck5ibCkKKyAgICB7CisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhDdXJyTmJsLT5TdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICJOQkwgZmFpbGVkIG9uIHJldHVybjogJSFTVEFUVVMhIiwgQ3Vyck5ibC0+U3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIFBORVRfQlVGRkVSX0xJU1QgTmJsVG9GcmVlID0gQ3Vyck5ibDsKKyAgICAgICAgUE5FVF9CVUZGRVIgTmJUb0ZyZWUgPSBORVRfQlVGRkVSX0xJU1RfRklSU1RfTkIoTmJsVG9GcmVlKTsKKworICAgICAgICBDdXJyTmJsID0gTkVUX0JVRkZFUl9MSVNUX05FWFRfTkJMKEN1cnJOYmwpOworICAgICAgICBORVRfQlVGRkVSX0xJU1RfTkVYVF9OQkwoTmJsVG9GcmVlKSA9IE5VTEw7CisKKyAgICAgICAgTmRpc0FkdmFuY2VOZXRCdWZmZXJEYXRhU3RhcnQoTmJUb0ZyZWUsIE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoTmJUb0ZyZWUpLCBUUlVFLCBOVUxMKTsKKyAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXJMaXN0KE5ibFRvRnJlZSk7CisgICAgfQorICAgIAorICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9EQVRBX1BBVEgpOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitGaWx0ZXJSZWNlaXZlTmV0QnVmZmVyTGlzdHMoCisgICAgTkRJU19IQU5ETEUgICAgICAgICBGaWx0ZXJNb2R1bGVDb250ZXh0LAorICAgIFBORVRfQlVGRkVSX0xJU1QgICAgTmV0QnVmZmVyTGlzdHMsCisgICAgTkRJU19QT1JUX05VTUJFUiAgICBQb3J0TnVtYmVyLAorICAgIFVMT05HICAgICAgICAgICAgICAgTnVtYmVyT2ZOZXRCdWZmZXJMaXN0cywKKyAgICBVTE9ORyAgICAgICAgICAgICAgIFJlY2VpdmVGbGFncworICAgICkKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIEZpbGVyUmVjZWl2ZU5ldEJ1ZmZlckxpc3RzIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBmaWx0ZXIgZHJpdmVycy4KKyAgICBJZiBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgcmVjZWl2ZSBpbmRpY2F0aW9ucyBtYWRlIGJ5IHVuZGVybHlpbmcKKyAgICBOSUMgb3IgbG93ZXIgbGV2ZWwgZmlsdGVyIGRyaXZlcnMuIFRoaXMgZnVuY3Rpb24gIGNhbiBhbHNvIGJlIGNhbGxlZCBhcyBhCisgICAgcmVzdWx0IG9mIGxvb3BiYWNrLiBJZiB0aGlzIGhhbmRsZXIgaXMgTlVMTCwgTkRJUyB3aWxsIHNraXAgY2FsbGluZyB0aGlzCisgICAgZmlsdGVyIHdoZW4gcHJvY2Vzc2luZyBhIHJlY2VpdmUgaW5kaWNhdGlvbiBhbmQgd2lsbCBjYWxsIHRoZSBuZXh0IGhpZ2hlcgorICAgIGRyaXZlciBpbiB0aGUgc3RhY2suIEEgZmlsdGVyIHRoYXQgZG9lc24ndCBwcm92aWRlIGEKKyAgICBGaWx0ZXJSZWNlaXZlTmV0QnVmZmVyTGlzdHMgaGFuZGxlciBjYW5ub3QgcHJvdmlkZSBhCisgICAgRmlsdGVyUmV0dXJuTmV0QnVmZmVyTGlzdHMgaGFuZGxlciBhbmQgY2Fubm90IGEgaW5pdGlhdGUgYW4gb3JpZ2luYWwgcmVjZWl2ZQorICAgIGluZGljYXRpb24gb24gaXRzIG93bi4KKworQXJndW1lbnRzOgorCisgICAgRmlsdGVyTW9kdWxlQ29udGV4dCAgICAgIC0gb3VyIGZpbHRlciBjb250ZXh0IGFyZWEuCisgICAgTmV0QnVmZmVyTGlzdHMgICAgICAgICAgIC0gYSBsaW5rZWQgbGlzdCBvZiBOZXRCdWZmZXJMaXN0cworICAgIFBvcnROdW1iZXIgICAgICAgICAgICAgICAtIFBvcnQgb24gd2hpY2ggdGhlIHJlY2VpdmUgaXMgaW5kaWNhdGVkCisgICAgUmVjZWl2ZUZsYWdzICAgICAgICAgICAgIC0KKworTi5CLjogSXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIHRoZSBSZWNlaXZlRmxhZ3MgaW4gTkRJU19URVNUX1JFQ0VJVkVfQ0FOTk9UX1BFTkQuCisgICAgVGhpcyBjb250cm9scyB3aGV0aGVyIHRoZSByZWNlaXZlIGluZGljYXRpb24gaXMgYW4gc3luY2hyb25vdXMgb3IKKyAgICBhc3luY2hyb25vdXMgZnVuY3Rpb24gY2FsbC4KKworLS0qLworeworCisgICAgUE1TX0ZJTFRFUiAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisgICAgQk9PTEVBTiAgICAgRGlzcGF0Y2hMZXZlbCA9IE5ESVNfVEVTVF9SRUNFSVZFX0FUX0RJU1BBVENIX0xFVkVMKFJlY2VpdmVGbGFncyk7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKFBvcnROdW1iZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoTnVtYmVyT2ZOZXRCdWZmZXJMaXN0cyk7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAsIE5CTDogJXAiLCBGaWx0ZXJNb2R1bGVDb250ZXh0LCBOZXRCdWZmZXJMaXN0cyk7CisKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBOQkwvTkIgYW5kIGdyYWIgdGhlIGRhdGEgYXMgYSBjb250aWd1b3VzIGJ1ZmZlciB0bworICAgIC8vIGluZGljYXRlIHRvIHRoZSBTcGluZWwgY29tbWFuZCBsYXllci4KKyAgICBQTkVUX0JVRkZFUl9MSVNUIEN1cnJOYmwgPSBOZXRCdWZmZXJMaXN0czsKKyAgICB3aGlsZSAoQ3Vyck5ibCkKKyAgICB7CisgICAgICAgIFBORVRfQlVGRkVSIEN1cnJOYiA9IE5FVF9CVUZGRVJfTElTVF9GSVJTVF9OQihDdXJyTmJsKTsKKyAgICAgICAgd2hpbGUgKEN1cnJOYikKKyAgICAgICAgeworICAgICAgICAgICAgUFVDSEFSIEJ1ZmZlciA9IChQVUNIQVIpTmRpc0dldERhdGFCdWZmZXIoQ3Vyck5iLCBDdXJyTmItPkRhdGFMZW5ndGgsIE5VTEwsIDEsIDApOworICAgICAgICAgICAgaWYgKEJ1ZmZlciA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEJ1ZmZlciA9IChQVUNIQVIpRklMVEVSX0FMTE9DX01FTShwRmlsdGVyLT5GaWx0ZXJIYW5kbGUsIEN1cnJOYi0+RGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKEJ1ZmZlciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUFVDSEFSIF9CdWZmZXIgPSAoUFVDSEFSKU5kaXNHZXREYXRhQnVmZmVyKEN1cnJOYiwgQ3Vyck5iLT5EYXRhTGVuZ3RoLCBCdWZmZXIsIDEsIDApOworICAgICAgICAgICAgICAgICAgICBOVF9BU1NFUlQoX0J1ZmZlciA9PSBCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoX0J1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3RMd2ZDbWRSZWN2ZWl2ZShwRmlsdGVyLCBEaXNwYXRjaExldmVsLCBCdWZmZXIsIEN1cnJOYi0+RGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgRklMVEVSX0ZSRUVfTUVNKEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90THdmQ21kUmVjdmVpdmUocEZpbHRlciwgRGlzcGF0Y2hMZXZlbCwgQnVmZmVyLCBDdXJyTmItPkRhdGFMZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ3Vyck5iID0gTkVUX0JVRkZFUl9ORVhUX05CKEN1cnJOYik7CisgICAgICAgIH0KKworICAgICAgICBORVRfQlVGRkVSX0xJU1RfU1RBVFVTKEN1cnJOYmwpID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgQ3Vyck5ibCA9IE5FVF9CVUZGRVJfTElTVF9ORVhUX05CTChDdXJyTmJsKTsKKyAgICB9CisKKyAgICBpZiAoTkRJU19URVNUX1JFQ0VJVkVfQ0FOX1BFTkQoUmVjZWl2ZUZsYWdzKSkKKyAgICB7CisgICAgICAgIE5kaXNGUmV0dXJuTmV0QnVmZmVyTGlzdHMoCisgICAgICAgICAgICBwRmlsdGVyLT5GaWx0ZXJIYW5kbGUsCisgICAgICAgICAgICBOZXRCdWZmZXJMaXN0cywKKyAgICAgICAgICAgIERpc3BhdGNoTGV2ZWwgPyBORElTX1JFVFVSTl9GTEFHU19ESVNQQVRDSF9MRVZFTCA6IDAKKyAgICAgICAgICAgICk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RBVEFfUEFUSCk7Cit9CisKKy8vIENhbGxiYWNrIHJlY2VpdmVkIGZyb20gT3BlblRocmVhZCB3aGVuIGl0IGhhcyBhbiBJUHY2IHBhY2tldCByZWFkeSBmb3IKKy8vIGRlbGl2ZXJ5IHRvIFRDUElQLgordm9pZCAKK290THdmUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2soCisgICAgX0luXyBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgIF9Jbl8gdm9pZCAqYUNvbnRleHQKKyAgICApCit7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpYUNvbnRleHQ7CisgICAgdWludDE2X3QgbWVzc2FnZUxlbmd0aCA9IG90TWVzc2FnZUdldExlbmd0aChhTWVzc2FnZSk7CisgICAgUE5FVF9CVUZGRVJfTElTVCBOZXRCdWZmZXJMaXN0ID0gTlVMTDsKKyAgICBQTkVUX0JVRkZFUiBOZXRCdWZmZXIgPSBOVUxMOworICAgIE5ESVNfU1RBVFVTIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgUFVDSEFSIERhdGFCdWZmZXIgPSBOVUxMOworICAgIGludCBCeXRlc1JlYWQgPSAwOworICAgIElQVjZfSEVBREVSKiB2NkhlYWRlcjsKKworI2lmZGVmIEZPUkNFX1NZTkNIUk9OT1VTX1JFQ0VJVkUKKyAgICBLSVJRTCBpcnFsOworI2VuZGlmCisKKyAgICAvLyBDcmVhdGUgdGhlIE5ldEJ1ZmZlckxpc3QKKyAgICBOZXRCdWZmZXJMaXN0ID0KKyAgICAgICAgTmRpc0FsbG9jYXRlTmV0QnVmZmVyQW5kTmV0QnVmZmVyTGlzdCgKKyAgICAgICAgICAgIHBGaWx0ZXItPmNtZE5ibFBvb2wsICAgICAgICAgICAgLy8gUG9vbEhhbmRsZQorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250ZXh0U2l6ZQorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250ZXh0QmFja0ZpbGwKKyAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWRsQ2hhaW4KKyAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YU9mZnNldAorICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhTGVuZ3RoCisgICAgICAgICAgICApOworICAgIGlmIChOZXRCdWZmZXJMaXN0ID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGNyZWF0ZSBSZWN2IE5ldEJ1ZmZlckxpc3QiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGZsYWcgdG8gaW5kaWNhdGUgaXRzIGEgSVB2NiBwYWNrZXQKKyAgICBOZGlzU2V0TmJsRmxhZyhOZXRCdWZmZXJMaXN0LCBORElTX05CTF9GTEFHU19JU19JUFY2KTsKKyAgICBORVRfQlVGRkVSX0xJU1RfSU5GTyhOZXRCdWZmZXJMaXN0LCBOZXRCdWZmZXJMaXN0RnJhbWVUeXBlKSA9CisgICAgICAgIFVsb25nVG9QdHIoUnRsVXNob3J0Qnl0ZVN3YXAoRVRIRVJORVRfVFlQRV9JUFY2KSk7CisKKyAgICAvLyBJbml0aWFsaXplIE5ldEJ1ZmZlciBmaWVsZHMKKyAgICBOZXRCdWZmZXIgPSBORVRfQlVGRkVSX0xJU1RfRklSU1RfTkIoTmV0QnVmZmVyTGlzdCk7CisgICAgTkVUX0JVRkZFUl9DVVJSRU5UX01ETChOZXRCdWZmZXIpID0gTlVMTDsKKyAgICBORVRfQlVGRkVSX0NVUlJFTlRfTURMX09GRlNFVChOZXRCdWZmZXIpID0gMDsKKyAgICBORVRfQlVGRkVSX0RBVEFfTEVOR1RIKE5ldEJ1ZmZlcikgPSAwOworICAgIE5FVF9CVUZGRVJfREFUQV9PRkZTRVQoTmV0QnVmZmVyKSA9IDA7CisgICAgTkVUX0JVRkZFUl9GSVJTVF9NREwoTmV0QnVmZmVyKSA9IE5VTEw7CisKKyAgICAvLyBBbGxvY2F0ZSB0aGUgTmV0QnVmZmVyIGZvciBTZW5kTmV0QnVmZmVyTGlzdAorICAgIFN0YXR1cyA9IE5kaXNSZXRyZWF0TmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgbWVzc2FnZUxlbmd0aCwgMCwgTlVMTCk7CisgICAgaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgIHsKKyAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXJMaXN0KE5ldEJ1ZmZlckxpc3QpOworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBhbGxvY2F0ZSBOQiBmb3IgUmVjdiBOZXRCdWZmZXJMaXN0LCAlIU5ESVNfU1RBVFVTISIsIFN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBkYXRhIGJ1ZmZlciB0byB3cml0ZSB0bworICAgIERhdGFCdWZmZXIgPSBOZGlzR2V0RGF0YUJ1ZmZlcihOZXRCdWZmZXIsIG1lc3NhZ2VMZW5ndGgsIE5VTEwsIDEsIDApOworICAgIE5UX0FTU0VSVChEYXRhQnVmZmVyKTsKKyAgICBpZiAoRGF0YUJ1ZmZlciA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgTmRpc0FkdmFuY2VOZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBtZXNzYWdlTGVuZ3RoLCBUUlVFLCBOVUxMKTsKKyAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXJMaXN0KE5ldEJ1ZmZlckxpc3QpOworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBnZXQgY29udGlndW91cyBkYXRhIGJ1ZmZlciBmb3IgUmVjdiBOZXRCdWZmZXJMaXN0Iik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gUmVhZCB0aGUgYnl0ZXMgdG8gdGhlIGJ1ZmZlcgorICAgIEJ5dGVzUmVhZCA9IG90TWVzc2FnZVJlYWQoYU1lc3NhZ2UsIDAsIERhdGFCdWZmZXIsIG1lc3NhZ2VMZW5ndGgpOworICAgIE5UX0FTU0VSVChCeXRlc1JlYWQgPT0gKGludCltZXNzYWdlTGVuZ3RoKTsKKyAgICBpZiAoQnl0ZXNSZWFkICE9IChpbnQpbWVzc2FnZUxlbmd0aCkKKyAgICB7CisgICAgICAgIE5kaXNBZHZhbmNlTmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgbWVzc2FnZUxlbmd0aCwgVFJVRSwgTlVMTCk7CisgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyTGlzdChOZXRCdWZmZXJMaXN0KTsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gcmVhZCBtZXNzYWdlIGJ1ZmZlciBmb3IgUmVjdiBOZXRCdWZmZXJMaXN0Iik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgdjZIZWFkZXIgPSAoSVBWNl9IRUFERVIqKURhdGFCdWZmZXI7CisgICAgCisgICAgLy8gRmlsdGVyIG1lc3NhZ2VzIHRvIGFkZHJlc3NlcyB3ZSBleHBvc2UKKyAgICBpZiAoIUlONl9JU19BRERSX01VTFRJQ0FTVCgmdjZIZWFkZXItPkRlc3RpbmF0aW9uQWRkcmVzcykgJiYKKyAgICAgICAgb3RMd2ZGaW5kQ2FjaGVkQWRkckluZGV4KHBGaWx0ZXIsICZ2NkhlYWRlci0+RGVzdGluYXRpb25BZGRyZXNzKSA9PSAtMSkKKyAgICB7CisgICAgICAgIE5kaXNBZHZhbmNlTmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgbWVzc2FnZUxlbmd0aCwgVFJVRSwgTlVMTCk7CisgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyTGlzdChOZXRCdWZmZXJMaXN0KTsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCBkcm9wcGluZyBpbnRlcm5hbCBhZGRyZXNzIG1lc3NhZ2UuIiwgcEZpbHRlcik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gRmlsdGVyIGludGVybmFsIFRocmVhZCBtZXNzYWdlcworICAgIGlmICh2NkhlYWRlci0+TmV4dEhlYWRlciA9PSBJUFBST1RPX1VEUCAmJgorICAgICAgICBtZXNzYWdlTGVuZ3RoID49IHNpemVvZihJUFY2X0hFQURFUikgKyBzaXplb2YoVURQSGVhZGVyKSAmJgorICAgICAgICBtZW1jbXAoJnBGaWx0ZXItPm90TGlua0xvY2FsQWRkciwgJnY2SGVhZGVyLT5EZXN0aW5hdGlvbkFkZHJlc3MsIHNpemVvZihJTjZfQUREUikpID09IDApCisgICAgeworICAgICAgICAvLyBDaGVjayBmb3IgTUxFIG1lc3NhZ2UKKyAgICAgICAgVURQSGVhZGVyKiBVZHBIZWFkZXIgPSAoVURQSGVhZGVyKikodjZIZWFkZXIgKyAxKTsKKyAgICAgICAgaWYgKFVkcEhlYWRlci0+RGVzdGluYXRpb25Qb3J0ID09IFVkcEhlYWRlci0+U291cmNlUG9ydCAmJgorICAgICAgICAgICAgVWRwSGVhZGVyLT5EZXN0aW5hdGlvblBvcnQgPT0gUnRsVXNob3J0Qnl0ZVN3YXAoMTk3ODgpKSAvLyBNTEUgUG9ydAorICAgICAgICB7CisgICAgICAgICAgICBOZGlzQWR2YW5jZU5ldEJ1ZmZlckRhdGFTdGFydChOZXRCdWZmZXIsIG1lc3NhZ2VMZW5ndGgsIFRSVUUsIE5VTEwpOworICAgICAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXJMaXN0KE5ldEJ1ZmZlckxpc3QpOworICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCBkcm9wcGluZyBNTEUgbWVzc2FnZS4iLCBwRmlsdGVyKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwLCBJUDZfUkVDVjogJXAgOiAlIUlQVjZBRERSISA9PiAlIUlQVjZBRERSISAoJXUgYnl0ZXMpIiwgCisgICAgICAgICAgICAgICBwRmlsdGVyLCBOZXRCdWZmZXJMaXN0LCAmdjZIZWFkZXItPlNvdXJjZUFkZHJlc3MsICZ2NkhlYWRlci0+RGVzdGluYXRpb25BZGRyZXNzLAorICAgICAgICAgICAgICAgbWVzc2FnZUxlbmd0aCk7CisKKyNpZmRlZiBMT0dfQlVGRkVSUworICAgIG90TG9nQnVmZmVyKERhdGFCdWZmZXIsIG1lc3NhZ2VMZW5ndGgpOworI2VuZGlmCisKKyNpZmRlZiBGT1JDRV9TWU5DSFJPTk9VU19SRUNFSVZFCisgICAgaXJxbCA9IEtmUmFpc2VJcnFsKERJU1BBVENIX0xFVkVMKTsKKworICAgIGlmIChtZXNzYWdlTGVuZ3RoID09IDI0OCkgLy8gTWFnaWMgbGVuZ3RoIHVzZWQgZm9yIFRBRUYgdGVzdCBwYWNrZXRzCisgICAgeworICAgICAgICBEYmdCcmVha1BvaW50KCk7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBJbmRpY2F0ZSB0aGUgTkJMIHVwCisgICAgTmRpc0ZJbmRpY2F0ZVJlY2VpdmVOZXRCdWZmZXJMaXN0cygKKyAgICAgICAgcEZpbHRlci0+RmlsdGVySGFuZGxlLAorICAgICAgICBOZXRCdWZmZXJMaXN0LAorICAgICAgICBORElTX0RFRkFVTFRfUE9SVF9OVU1CRVIsCisgICAgICAgIDEsCisjaWZkZWYgRk9SQ0VfU1lOQ0hST05PVVNfUkVDRUlWRQorICAgICAgICBORElTX1JFQ0VJVkVfRkxBR1NfUkVTT1VSQ0VTIHwgTkRJU19SRUNFSVZFX0ZMQUdTX0RJU1BBVENIX0xFVkVMCisjZWxzZQorICAgICAgICAwCisjZW5kaWYKKyAgICAgICAgKTsKKyAgICAKKyNpZmRlZiBGT1JDRV9TWU5DSFJPTk9VU19SRUNFSVZFCisgICAgS2VMb3dlcklycWwoaXJxbCk7CisgICAgRmlsdGVyUmV0dXJuTmV0QnVmZmVyTGlzdHMocEZpbHRlciwgTmV0QnVmZmVyTGlzdCwgMCk7CisjZW5kaWYKKworZXJyb3I6CisKKyAgICBvdE1lc3NhZ2VGcmVlKGFNZXNzYWdlKTsKK30KKworLy8gQ2FsbGVkIGluIHJlc3BvbnNlIHRvIHJlY2VpdmluZyBhIFNwaW5lbCBJcDYgcGFja2V0IGNvbW1hbmQKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkIAorb3RMd2ZUdW5SZWNlaXZlSXA2UGFja2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBEaXNwYXRjaExldmVsLAorICAgIF9Jbl8gQk9PTEVBTiBTZWN1cmUsCisgICAgX0luX3JlYWRzX2J5dGVzXyhCdWZmZXJMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIEJ1ZmZlciwKKyAgICBfSW5fIFVJTlQgQnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIFBORVRfQlVGRkVSX0xJU1QgTmV0QnVmZmVyTGlzdCA9IE5VTEw7CisgICAgUE5FVF9CVUZGRVIgTmV0QnVmZmVyID0gTlVMTDsKKyAgICBQVUNIQVIgRGF0YUJ1ZmZlciA9IE5VTEw7CisgICAgSVBWNl9IRUFERVIqIHY2SGVhZGVyOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihTZWN1cmUpOyAvLyBUT0RPIC0gV2hhdCBzaG91bGQgd2UgZG8gd2l0aCB1bnNlY3VyZWQgcGFja2V0cz8KKworICAgIE5ldEJ1ZmZlckxpc3QgPQorICAgICAgICBOZGlzQWxsb2NhdGVOZXRCdWZmZXJBbmROZXRCdWZmZXJMaXN0KAorICAgICAgICAgICAgcEZpbHRlci0+Y21kTmJsUG9vbCwgICAgICAgICAgICAvLyBQb29sSGFuZGxlCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHRTaXplCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHRCYWNrRmlsbAorICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZGxDaGFpbgorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhT2Zmc2V0CisgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGFMZW5ndGgKKyAgICAgICAgICAgICk7CisgICAgaWYgKE5ldEJ1ZmZlckxpc3QgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGNyZWF0ZSBjb21tYW5kIE5ldEJ1ZmZlckxpc3QiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIFNldCB0aGUgZmxhZyB0byBpbmRpY2F0ZSBpdHMgYSBJUHY2IHBhY2tldAorICAgIE5kaXNTZXROYmxGbGFnKE5ldEJ1ZmZlckxpc3QsIE5ESVNfTkJMX0ZMQUdTX0lTX0lQVjYpOworICAgIE5FVF9CVUZGRVJfTElTVF9JTkZPKE5ldEJ1ZmZlckxpc3QsIE5ldEJ1ZmZlckxpc3RGcmFtZVR5cGUpID0KKyAgICAgICAgVWxvbmdUb1B0cihSdGxVc2hvcnRCeXRlU3dhcChFVEhFUk5FVF9UWVBFX0lQVjYpKTsKKworICAgIC8vIEluaXRpYWxpemUgTmV0QnVmZmVyIGZpZWxkcworICAgIE5ldEJ1ZmZlciA9IE5FVF9CVUZGRVJfTElTVF9GSVJTVF9OQihOZXRCdWZmZXJMaXN0KTsKKyAgICBORVRfQlVGRkVSX0NVUlJFTlRfTURMKE5ldEJ1ZmZlcikgPSBOVUxMOworICAgIE5FVF9CVUZGRVJfQ1VSUkVOVF9NRExfT0ZGU0VUKE5ldEJ1ZmZlcikgPSAwOworICAgIE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoTmV0QnVmZmVyKSA9IDA7CisgICAgTkVUX0JVRkZFUl9EQVRBX09GRlNFVChOZXRCdWZmZXIpID0gMDsKKyAgICBORVRfQlVGRkVSX0ZJUlNUX01ETChOZXRCdWZmZXIpID0gTlVMTDsKKworICAgIC8vIEFsbG9jYXRlIHRoZSBOZXRCdWZmZXIgZm9yIE5ldEJ1ZmZlckxpc3QKKyAgICBpZiAoTmRpc1JldHJlYXROZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBCdWZmZXJMZW5ndGgsIDAsIE5VTEwpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgeworICAgICAgICBOZXRCdWZmZXIgPSBOVUxMOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgTkIgZm9yIGNvbW1hbmQgTmV0QnVmZmVyTGlzdCwgJXUgYnl0ZXMiLCBCdWZmZXJMZW5ndGgpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciBmb3IgdGhlIGhlYWRlciBkYXRhCisgICAgRGF0YUJ1ZmZlciA9IChQVUNIQVIpTmRpc0dldERhdGFCdWZmZXIoTmV0QnVmZmVyLCBCdWZmZXJMZW5ndGgsIE5VTEwsIDEsIDApOworICAgIE5UX0FTU0VSVChEYXRhQnVmZmVyKTsKKyAgICAKKyAgICAvLyBDb3B5IHRoZSBkYXRhIG92ZXIKKyAgICBSdGxDb3B5TWVtb3J5KERhdGFCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyTGVuZ3RoKTsKKworICAgIHY2SGVhZGVyID0gKElQVjZfSEVBREVSKilEYXRhQnVmZmVyOworCisgICAgLy8gRmlsdGVyIG1lc3NhZ2VzIHRvIGFkZHJlc3NlcyB3ZSBleHBvc2UKKyAgICBpZiAoIUlONl9JU19BRERSX01VTFRJQ0FTVCgmdjZIZWFkZXItPkRlc3RpbmF0aW9uQWRkcmVzcykgJiYKKyAgICAgICAgb3RMd2ZGaW5kQ2FjaGVkQWRkckluZGV4KHBGaWx0ZXIsICZ2NkhlYWRlci0+RGVzdGluYXRpb25BZGRyZXNzKSA9PSAtMSkKKyAgICB7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAgZHJvcHBpbmcgaW50ZXJuYWwgYWRkcmVzcyBtZXNzYWdlLiIsIHBGaWx0ZXIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgSVA2X1JFQ1Y6ICVwIDogJSFJUFY2QUREUiEgPT4gJSFJUFY2QUREUiEgKCV1IGJ5dGVzKSIsIAorICAgICAgICAgICAgICAgcEZpbHRlciwgTmV0QnVmZmVyTGlzdCwgJnY2SGVhZGVyLT5Tb3VyY2VBZGRyZXNzLCAmdjZIZWFkZXItPkRlc3RpbmF0aW9uQWRkcmVzcywKKyAgICAgICAgICAgICAgIEJ1ZmZlckxlbmd0aCk7CisKKyNpZmRlZiBMT0dfQlVGRkVSUworICAgIG90TG9nQnVmZmVyKERhdGFCdWZmZXIsIEJ1ZmZlckxlbmd0aCk7CisjZW5kaWYKKworICAgIC8vIFNlbmQgdGhlIE5CTCBkb3duCisgICAgTmRpc0ZJbmRpY2F0ZVJlY2VpdmVOZXRCdWZmZXJMaXN0cygKKyAgICAgICAgcEZpbHRlci0+RmlsdGVySGFuZGxlLCAKKyAgICAgICAgTmV0QnVmZmVyTGlzdCwgCisgICAgICAgIE5ESVNfREVGQVVMVF9QT1JUX05VTUJFUiwKKyAgICAgICAgMSwKKyAgICAgICAgRGlzcGF0Y2hMZXZlbCA/IE5ESVNfUkVDRUlWRV9GTEFHU19ESVNQQVRDSF9MRVZFTCA6IDApOworCisgICAgLy8gQ2xlYXIgbG9jYWwgdmFyaWFibGUgYmVjYXVzZSB3ZSBkb24ndCBvd24gdGhlIE5CTCBhbnkgbW9yZQorICAgIE5ldEJ1ZmZlckxpc3QgPSBOVUxMOworCitleGl0OgorCisgICAgaWYgKE5ldEJ1ZmZlckxpc3QpCisgICAgeworICAgICAgICBpZiAoTmV0QnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBOZGlzQWR2YW5jZU5ldEJ1ZmZlckRhdGFTdGFydChOZXRCdWZmZXIsIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCwgVFJVRSwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXJMaXN0KE5ldEJ1ZmZlckxpc3QpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kZXZpY2UuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTE4OGIxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2RldmljZS5jCkBAIC0wLDAgKzEsNjkwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgImRldmljZS50bWgiCisKKy8vIElvQ29udHJvbCBEZXZpY2UgT2JqZWN0IGZyb20gSW9DcmVhdGVEZXZpY2VTZWN1cmUKK1BERVZJQ0VfT0JKRUNUIElvRGV2aWNlT2JqZWN0ID0gTlVMTDsKKworLy8gR2xvYmFsIGNvbnRleHQgZm9yIGRldmljZSBjb250cm9sIGNhbGxiYWNrcworUE9UTFdGX0RFVklDRV9FWFRFTlNJT04gRmlsdGVyRGV2aWNlRXh0ZW5zaW9uID0gTlVMTDsKKworLyoKKworUG93ZXJzaGVsbCBzY3JpcHQgdG8gZ2VuZXJhdGUgc2VjdXJpdHkgZGVzY2lwdG9yczoKKworJHNkZGwgPSAiRDpQKEE7O0dBOzs7U1kpKEE7O0dBOzs7TlMpKEE7O0dBOzs7QkEpKEE7O0dBOzs7V0QpKEE7O0dBOzs7Uy0xLTE1LTMtMykiCiskYmxvYiA9IChbd21pY2xhc3NdIldpbjMyX1NlY3VyaXR5RGVzY3JpcHRvckhlbHBlciIpLlNERExUb0JpbmFyeVNEKCRzZGRsKS5CaW5hcnlTRAorJHN0cmluZyA9IFtCaXRDb252ZXJ0ZXJdOjpUb1N0cmluZygkYmxvYikKKyRzdHJpbmcgPSAkc3RyaW5nIC1yZXBsYWNlICctJywgJycKKyRzdHJpbmcgPSAkc3RyaW5nIC1yZXBsYWNlICcoLi4pKC4uKSguLikoLi4pJywgJzB4JDQkMyQyJDEsICcKKyRzdHJpbmcgLXJlcGxhY2UgJyguezEwfSwgLnsxMH0sIC57MTB9LCAuezEwfSwpICcsICIkJmBuIgorCisqLworY29uc3QgdW5zaWduZWQgbG9uZyBjX3NkVGhyZWFkTHdmW10gPQoreworICAgIDB4OTAwNDAwMDEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAxNCwgMHgwMDc0MDAwMiwgMHgwMDAwMDAwNSwgMHgwMDE0MDAwMCwKKyAgICAweDEwMDAwMDAwLCAweDAwMDAwMTAxLCAweDA1MDAwMDAwLCAweDAwMDAwMDEyLAorICAgIDB4MDAxNDAwMDAsIDB4MTAwMDAwMDAsIDB4MDAwMDAxMDEsIDB4MDUwMDAwMDAsCisgICAgMHgwMDAwMDAxNCwgMHgwMDE4MDAwMCwgMHgxMDAwMDAwMCwgMHgwMDAwMDIwMSwKKyAgICAweDA1MDAwMDAwLCAweDAwMDAwMDIwLCAweDAwMDAwMjIwLCAweDAwMTQwMDAwLAorICAgIDB4MTAwMDAwMDAsIDB4MDAwMDAxMDEsIDB4MDEwMDAwMDAsIDB4MDAwMDAwMDAsCisgICAgMHgwMDE4MDAwMCwgMHgxMDAwMDAwMCwgMHgwMDAwMDIwMSwgMHgwRjAwMDAwMCwKKyAgICAweDAwMDAwMDAzLCAweDAwMDAwMDAzCit9OworCitfTm9fY29tcGV0aW5nX3RocmVhZF8KK0lOSVRDT0RFCitORElTX1NUQVRVUworb3RMd2ZSZWdpc3RlckRldmljZSgKKyAgICBWT0lECisgICAgKQoreworICAgIE5UU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICBVTklDT0RFX1NUUklORyAgICAgICAgICAgICAgICAgIERldmljZU5hbWU7CisgICAgVU5JQ09ERV9TVFJJTkcgICAgICAgICAgICAgICAgICBEZXZpY2VMaW5rVW5pY29kZVN0cmluZzsKKyAgICBQREVWSUNFX09CSkVDVCAgICAgICAgICAgICAgICAgIERldmljZU9iamVjdDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBOVF9BU1NFUlQoRmlsdGVyRGV2aWNlRXh0ZW5zaW9uID09IE5VTEwpOworCisgICAgTmRpc0luaXRVbmljb2RlU3RyaW5nKCZEZXZpY2VOYW1lLCBOVERFVklDRV9TVFJJTkcpOworICAgIE5kaXNJbml0VW5pY29kZVN0cmluZygmRGV2aWNlTGlua1VuaWNvZGVTdHJpbmcsIExJTktOQU1FX1NUUklORyk7CisKKyAgICBTdGF0dXMgPSBJb0NyZWF0ZURldmljZVNlY3VyZShGaWx0ZXJEcml2ZXJPYmplY3QsICAgICAgICAgICAgICAgICAgICAgLy8gRHJpdmVyT2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE9UTFdGX0RFVklDRV9FWFRFTlNJT04pLCAgICAgICAgIC8vIERldmljZUV4dGVuc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXZpY2VOYW1lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXZpY2VOYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9ERVZJQ0VfTkVUV09SSywgICAgICAgICAgICAgICAgICAgIC8vIERldmljZVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX0RFVklDRV9TRUNVUkVfT1BFTiwgICAgICAgICAgICAgICAgLy8gRGV2aWNlQ2hhcmFjdGVyaXN0aWNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1c2l2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTRERMX0RFVk9CSl9LRVJORUxfT05MWSwgICAgICAgICAgICAgICAvLyBzZWN1cml0eSBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlY3VyaXR5IG92ZXJyaWRlIGRldmljZSBjbGFzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXZpY2VPYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXZpY2VPYmplY3QKKworICAgIGlmIChOVF9TVUNDRVNTKFN0YXR1cykpCisgICAgeworICAgICAgICBEZXZpY2VPYmplY3QtPkZsYWdzICY9IH5ET19ERVZJQ0VfSU5JVElBTElaSU5HOworICAgICAgICBTdGF0dXMgPSBJb0NyZWF0ZVN5bWJvbGljTGluaygmRGV2aWNlTGlua1VuaWNvZGVTdHJpbmcsICZEZXZpY2VOYW1lKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJb0NyZWF0ZVN5bWJvbGljTGluayBmYWlsZWQsICUhU1RBVFVTISIsIFN0YXR1cyk7CisgICAgICAgICAgICBJb0RlbGV0ZURldmljZShEZXZpY2VPYmplY3QpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRmlsdGVyRGV2aWNlRXh0ZW5zaW9uID0gKFBPVExXRl9ERVZJQ0VfRVhURU5TSU9OKURldmljZU9iamVjdC0+RGV2aWNlRXh0ZW5zaW9uOworICAgICAgICAgICAgUnRsWmVyb01lbW9yeShGaWx0ZXJEZXZpY2VFeHRlbnNpb24sIHNpemVvZihPVExXRl9ERVZJQ0VfRVhURU5TSU9OKSk7CisKKyAgICAgICAgICAgIEZpbHRlckRldmljZUV4dGVuc2lvbi0+U2lnbmF0dXJlID0gJ0ZURFInOworICAgICAgICAgICAgRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5IYW5kbGUgPSBGaWx0ZXJEcml2ZXJIYW5kbGU7CisKKyAgICAgICAgICAgIE5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkxvY2spOworICAgICAgICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkNsaWVudExpc3QpOworCisgICAgICAgICAgICAjcHJhZ21hIHB1c2gKKyAgICAgICAgICAgICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjI4MTY4KSAvLyBUaGUgZnVuY3Rpb24gJ290THdmRGlzcGF0Y2gnIGRvZXMgbm90IGhhdmUgYSBfRGlzcGF0Y2hfdHlwZV8gYW5ub3RhdGlvbiBtYXRjaGluZyBkaXNwYXRjaCB0YWJsZSBwb3NpdGlvbiAqCisgICAgICAgICAgICBGaWx0ZXJEcml2ZXJPYmplY3QtPk1ham9yRnVuY3Rpb25bSVJQX01KX0NSRUFURV0gPSBvdEx3ZkRpc3BhdGNoOworICAgICAgICAgICAgRmlsdGVyRHJpdmVyT2JqZWN0LT5NYWpvckZ1bmN0aW9uW0lSUF9NSl9DTEVBTlVQXSA9IG90THdmRGlzcGF0Y2g7CisgICAgICAgICAgICBGaWx0ZXJEcml2ZXJPYmplY3QtPk1ham9yRnVuY3Rpb25bSVJQX01KX0NMT1NFXSA9IG90THdmRGlzcGF0Y2g7CisgICAgICAgICAgICBGaWx0ZXJEcml2ZXJPYmplY3QtPk1ham9yRnVuY3Rpb25bSVJQX01KX0RFVklDRV9DT05UUk9MXSA9IG90THdmRGV2aWNlSW9Db250cm9sOworICAgICAgICAgICAgI3ByYWdtYSBwb3AKKworICAgICAgICAgICAgSEFORExFIGZpbGVIYW5kbGU7CisgICAgICAgICAgICBTdGF0dXMgPSBPYk9wZW5PYmplY3RCeVBvaW50ZXIoRGV2aWNlT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9CSl9LRVJORUxfSEFORExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfREFDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZUhhbmRsZSk7CisgICAgICAgICAgICBpZiAoTlRfU1VDQ0VTUyhTdGF0dXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IFp3U2V0U2VjdXJpdHlPYmplY3QoZmlsZUhhbmRsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNMX1NFQ1VSSVRZX0lORk9STUFUSU9OLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQU0VDVVJJVFlfREVTQ1JJUFRPUiljX3NkVGhyZWFkTHdmKTsKKworICAgICAgICAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhTdGF0dXMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJad1NldFNlY3VyaXR5T2JqZWN0IGZhaWxlZCwgJSFTVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBad0Nsb3NlKGZpbGVIYW5kbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiT2JPcGVuT2JqZWN0QnlQb2ludGVyIGZhaWxlZCwgJSFTVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSW9EZXZpY2VPYmplY3QgPSBEZXZpY2VPYmplY3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJb0NyZWF0ZURldmljZVNlY3VyZSBmYWlsZWQsICUhU1RBVFVTISIsIFN0YXR1cyk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfREVGQVVMVCwgU3RhdHVzKTsKKworICAgIHJldHVybiAoTkRJU19TVEFUVVMpU3RhdHVzOworfQorCitQSVJQCitvdEx3ZkRldmljZUNsaWVudENsZWFudXAoCisgICAgUE9UTFdGX0RFVklDRV9DTElFTlQgRGV2aWNlQ2xpZW50CisgICAgKQoreworICAgIFBJUlAgSXJwVG9DYW5jZWwgPSBOVUxMOworCisgICAgLy8gQ2xlYW4gdGhlIEZpbGVPYmplY3QgY29udGV4dAorICAgIERldmljZUNsaWVudC0+RmlsZU9iamVjdC0+RnNDb250ZXh0MiA9IE5VTEw7CisKKyAgICAvLyBSZWxlYXNlIHBlbmRpbmcgSVJQCisgICAgaWYgKERldmljZUNsaWVudC0+UGVuZGluZ05vdGlmaWNhdGlvbklSUCkKKyAgICB7CisgICAgICAgIElycFRvQ2FuY2VsID0gRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uSVJQOworICAgICAgICBEZXZpY2VDbGllbnQtPlBlbmRpbmdOb3RpZmljYXRpb25JUlAgPSBOVUxMOworICAgIH0KKworICAgIC8vIEZyZWUgYWxsIHBlbmRpbmcgbm90aWZpY2F0aW9ucworICAgIE5UX0FTU0VSVChEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvblNpemUgPD0gT1RMV0ZfTUFYX1BFTkRJTkdfTk9USUZJQ0FUSU9OU19QRVJfQ0xJRU5UKTsKKyAgICBmb3IgKFVDSEFSIGkgPSAwOyBpIDwgRGV2aWNlQ2xpZW50LT5Ob3RpZmljYXRpb25TaXplOyBpKyspCisgICAgeworICAgICAgICBVQ0hBUiBpbmRleCA9IChEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvbk9mZnNldCArIGkpICUgT1RMV0ZfTUFYX1BFTkRJTkdfTk9USUZJQ0FUSU9OU19QRVJfQ0xJRU5UOworICAgICAgICBvdEx3ZlJlbGVhc2VOb3RpZmljYXRpb24oRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uc1tpbmRleF0pOworICAgIH0KKworICAgIHJldHVybiBJcnBUb0NhbmNlbDsKK30KKworX05vX2NvbXBldGluZ190aHJlYWRfCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkRlcmVnaXN0ZXJEZXZpY2UoCisgICAgVk9JRAorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgaWYgKElvRGV2aWNlT2JqZWN0ICE9IE5VTEwpCisgICAgeworICAgICAgICBOVF9BU1NFUlQoRmlsdGVyRGV2aWNlRXh0ZW5zaW9uKTsKKyAgICAgICAgTmRpc0ZyZWVTcGluTG9jaygmRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5Mb2NrKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsZWFuIHVwIGFsbCBwZW5kaW5nIGNsaWVudHMKKyAgICAgICAgUExJU1RfRU5UUlkgTGluayA9IEZpbHRlckRldmljZUV4dGVuc2lvbi0+Q2xpZW50TGlzdC5GbGluazsKKyAgICAgICAgd2hpbGUgKExpbmsgIT0gJkZpbHRlckRldmljZUV4dGVuc2lvbi0+Q2xpZW50TGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgUE9UTFdGX0RFVklDRV9DTElFTlQgRGV2aWNlQ2xpZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfREVWSUNFX0NMSUVOVCwgTGluayk7CisgICAgICAgICAgICBQSVJQIElycFRvQ2FuY2VsID0gTlVMTDsKKworICAgICAgICAgICAgLy8gU2V0IG5leHQgbGluaworICAgICAgICAgICAgTGluayA9IExpbmstPkZsaW5rOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gY2xlYW4gdXAgYW55IGxlZnQgb3ZlcnMgZnJvbSB0aGUgZGV2aWNlIGNsaWVudAorICAgICAgICAgICAgSXJwVG9DYW5jZWwgPSBvdEx3ZkRldmljZUNsaWVudENsZWFudXAoRGV2aWNlQ2xpZW50KTsKKworICAgICAgICAgICAgLy8gQ29tcGxldGUgdGhlIHBlbmRpbmcgSVJQIHNpbmNlIHdlIGFyZSBzaHV0dGluZyBkb3duCisgICAgICAgICAgICBpZiAoSXJwVG9DYW5jZWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQmVmb3JlIHdlIGFyZSBhbGxvd2VkIHRvIGNvbXBsZXRlIHRoZSBwZW5kaW5nIElSUCwgd2UgbXVzdCByZW1vdmUgdGhlIGNhbmNlbCByb3V0aW5lCisgICAgICAgICAgICAgICAgS0lSUUwgaXJxbDsKKyAgICAgICAgICAgICAgICBJb0FjcXVpcmVDYW5jZWxTcGluTG9jaygmaXJxbCk7CisgICAgICAgICAgICAgICAgSW9TZXRDYW5jZWxSb3V0aW5lKElycFRvQ2FuY2VsLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBJb1JlbGVhc2VDYW5jZWxTcGluTG9jayhpcnFsKTsKKworICAgICAgICAgICAgICAgIElycFRvQ2FuY2VsLT5Jb1N0YXR1cy5TdGF0dXMgPSBTVEFUVVNfQ0FOQ0VMTEVEOworICAgICAgICAgICAgICAgIElycFRvQ2FuY2VsLT5Jb1N0YXR1cy5JbmZvcm1hdGlvbiA9IDA7CisgICAgICAgICAgICAgICAgSW9Db21wbGV0ZVJlcXVlc3QoSXJwVG9DYW5jZWwsIElPX05PX0lOQ1JFTUVOVCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGV2aWNlIGNsaWVudCBmcm9tIHRoZSBsaXN0CisgICAgICAgICAgICBSZW1vdmVFbnRyeUxpc3QoJkRldmljZUNsaWVudC0+TGluayk7CisKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZGV2aWNlIGNsaWVudAorICAgICAgICAgICAgTmRpc0ZyZWVNZW1vcnkoRGV2aWNlQ2xpZW50LCAwLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIElvRGVsZXRlRGV2aWNlKElvRGV2aWNlT2JqZWN0KTsKKyAgICB9CisKKyAgICBJb0RldmljZU9iamVjdCA9IE5VTEw7CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK05UU1RBVFVTCitvdEx3ZkRpc3BhdGNoKAorICAgIFBERVZJQ0VfT0JKRUNUICAgICAgIERldmljZU9iamVjdCwKKyAgICBQSVJQICAgICAgICAgICAgICAgICBJcnAKKyAgICApCit7CisgICAgUElPX1NUQUNLX0xPQ0FUSU9OICAgICAgSXJwU3RhY2s7CisgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgUElSUCAgICAgICAgICAgICAgICAgICAgSXJwVG9DYW5jZWwgPSBOVUxMOworICAgIFBPVExXRl9ERVZJQ0VfQ0xJRU5UICAgIERldmljZUNsaWVudCA9IE5VTEw7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKERldmljZU9iamVjdCk7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0lPQ1RMKTsKKworICAgIElycFN0YWNrID0gSW9HZXRDdXJyZW50SXJwU3RhY2tMb2NhdGlvbihJcnApOworCisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5Mb2NrKTsKKworICAgIHN3aXRjaCAoSXJwU3RhY2stPk1ham9yRnVuY3Rpb24pCisgICAgeworICAgICAgICBjYXNlIElSUF9NSl9DUkVBVEU6CisgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9JT0NUTCwgIkNsaWVudCAlcCBhdHRhY2hlZC4iLCBJcnBTdGFjay0+RmlsZU9iamVjdCk7CisKKyAgICAgICAgICAgIGlmIChGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkNsaWVudExpc3RTaXplID49IE9UTFdGX01BWF9DTElFTlRTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9JT0NUTCwgIkFscmVhZHkgaGF2ZSBtYXggY2xpZW50cyEiKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBTVEFUVVNfVE9PX01BTllfU0VTU0lPTlM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIERldmljZUNsaWVudCA9IEZJTFRFUl9BTExPQ19ERVZJQ0VfQ0xJRU5UKCk7CisgICAgICAgICAgICBpZiAoRGV2aWNlQ2xpZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJ0bFplcm9NZW1vcnkoRGV2aWNlQ2xpZW50LCBzaXplb2YoT1RMV0ZfREVWSUNFX0NMSUVOVCkpOworICAgICAgICAgICAgICAgIERldmljZUNsaWVudC0+RmlsZU9iamVjdCA9IElycFN0YWNrLT5GaWxlT2JqZWN0OworCisgICAgICAgICAgICAgICAgTlRfQVNTRVJUKElycFN0YWNrLT5GaWxlT2JqZWN0LT5Gc0NvbnRleHQyID09IE5VTEwpOworICAgICAgICAgICAgICAgIElycFN0YWNrLT5GaWxlT2JqZWN0LT5Gc0NvbnRleHQyID0gRGV2aWNlQ2xpZW50OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEluc2VydCBpbnRvIHRoZSBjbGllbnQgbGlzdAorICAgICAgICAgICAgICAgIEluc2VydFRhaWxMaXN0KCZGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkNsaWVudExpc3QsICZEZXZpY2VDbGllbnQtPkxpbmspOworICAgICAgICAgICAgICAgIEZpbHRlckRldmljZUV4dGVuc2lvbi0+Q2xpZW50TGlzdFNpemUrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSVJQX01KX0NMRUFOVVA6CisgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9JT0NUTCwgIkNsaWVudCAlcCBjbGVhbmluZyB1cC4iLCBJcnBTdGFjay0+RmlsZU9iamVjdCk7CisKKyAgICAgICAgICAgIERldmljZUNsaWVudCA9IChQT1RMV0ZfREVWSUNFX0NMSUVOVClJcnBTdGFjay0+RmlsZU9iamVjdC0+RnNDb250ZXh0MjsKKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGNsZWFuIHVwIGFueSBsZWZ0IG92ZXJzIGZyb20gdGhlIGRldmljZSBjbGllbnQKKyAgICAgICAgICAgIElycFRvQ2FuY2VsID0gb3RMd2ZEZXZpY2VDbGllbnRDbGVhbnVwKERldmljZUNsaWVudCk7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGV2aWNlIGNsaWVudCBmcm9tIHRoZSBsaXN0CisgICAgICAgICAgICBSZW1vdmVFbnRyeUxpc3QoJkRldmljZUNsaWVudC0+TGluayk7CisgICAgICAgICAgICBGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkNsaWVudExpc3RTaXplLS07CisKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZGV2aWNlIGNsaWVudAorICAgICAgICAgICAgTmRpc0ZyZWVNZW1vcnkoRGV2aWNlQ2xpZW50LCAwLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSVJQX01KX0NMT1NFOgorICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfSU9DVEwsICJDbGllbnQgJXAgZGV0YXRjaGVkLiIsIElycFN0YWNrLT5GaWxlT2JqZWN0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkxvY2spOworCisgICAgLy8gQ2FuY2VsIHRoZSBwZW5kaW5nIG5vdGlmaWNhdGlvbiBJUlAgaWYgc2V0CisgICAgaWYgKElycFRvQ2FuY2VsKQorICAgIHsKKyAgICAgICAgLy8gQ29tcGxldGUgdGhlIHBlbmRpbmcgSVJQCisgICAgICAgIElycFRvQ2FuY2VsLT5Jb1N0YXR1cy5TdGF0dXMgPSBTVEFUVVNfQ0FOQ0VMTEVEOworICAgICAgICBJcnBUb0NhbmNlbC0+SW9TdGF0dXMuSW5mb3JtYXRpb24gPSAwOworICAgICAgICBJb0NvbXBsZXRlUmVxdWVzdChJcnBUb0NhbmNlbCwgSU9fTk9fSU5DUkVNRU5UKTsKKyAgICB9CisKKyAgICBJcnAtPklvU3RhdHVzLlN0YXR1cyA9IFN0YXR1czsKKyAgICBJb0NvbXBsZXRlUmVxdWVzdChJcnAsIElPX05PX0lOQ1JFTUVOVCk7CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9JT0NUTCwgU3RhdHVzKTsKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK05UU1RBVFVTCitvdEx3ZkRldmljZUlvQ29udHJvbCgKKyAgICBQREVWSUNFX09CSkVDVCAgICAgICAgRGV2aWNlT2JqZWN0LAorICAgIFBJUlAgICAgICAgICAgICAgICAgICBJcnAKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgQk9PTEVBTiBDb21wbGV0ZUlSUCA9IFRSVUU7CisKKyAgICBQVk9JRCAgICAgICAgICAgICAgIElvQnVmZmVyID0gSXJwLT5Bc3NvY2lhdGVkSXJwLlN5c3RlbUJ1ZmZlcjsKKworICAgIFBJT19TVEFDS19MT0NBVElPTiAgSXJwU3AgPSBJb0dldEN1cnJlbnRJcnBTdGFja0xvY2F0aW9uKElycCk7CisgICAgVUxPTkcgICAgICAgICAgICAgICBJbnB1dEJ1ZmZlckxlbmd0aCA9IElycFNwLT5QYXJhbWV0ZXJzLkRldmljZUlvQ29udHJvbC5JbnB1dEJ1ZmZlckxlbmd0aDsKKyAgICBVTE9ORyAgICAgICAgICAgICAgIE91dHB1dEJ1ZmZlckxlbmd0aCA9IElycFNwLT5QYXJhbWV0ZXJzLkRldmljZUlvQ29udHJvbC5PdXRwdXRCdWZmZXJMZW5ndGg7CisgICAgVUxPTkcgICAgICAgICAgICAgICBJb0NvbnRyb2xDb2RlID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLklvQ29udHJvbENvZGU7CisKKyAgICBVTE9ORyAgICAgICAgICAgICAgIEZ1bmNDb2RlID0gKElvQ29udHJvbENvZGUgPj4gMikgJiAweEZGRjsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfSU9DVEwsICIlcCIsIElycFNwLT5GaWxlT2JqZWN0KTsKKworI2lmIERCRworICAgIEFTU0VSVCgoKFBPVExXRl9ERVZJQ0VfRVhURU5TSU9OKURldmljZU9iamVjdC0+RGV2aWNlRXh0ZW5zaW9uKS0+U2lnbmF0dXJlID09ICdGVERSJyk7CisjZWxzZQorICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoRGV2aWNlT2JqZWN0KTsKKyNlbmRpZgorCisgICAgLy8gV2Ugb25seSBhbGxvdyBQQVNTSVZFX0xFVkVMIGNhbGxzCisgICAgaWYgKEtlR2V0Q3VycmVudElycWwoKSA+IFBBU1NJVkVfTEVWRUwpCisgICAgeworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9JT0NUTCwgIkZpbHRlckRldmljZUlvQ29udHJvbCBjYWxsZWQgaGlnaGVyIHRoYW4gUEFTU0lWRS4iKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX05PVF9TVVBQT1JURUQ7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoSW9CdWZmZXIsIE91dHB1dEJ1ZmZlckxlbmd0aCk7CisgICAgICAgIE91dHB1dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKEZ1bmNDb2RlID49IE1JTl9PVExXRl9JT0NUTF9GVU5DX0NPREUgJiYgRnVuY0NvZGUgPD0gTUFYX09UTFdGX0lPQ1RMX0ZVTkNfQ09ERSkKKyAgICB7CisgICAgICAgIENvbXBsZXRlSVJQID0gRkFMU0U7CisgICAgICAgIHN0YXR1cyA9IG90THdmSW9DdGxPcGVuVGhyZWFkQ29udHJvbChJcnApOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8vIENoZWNrIHRoZSBJb0NvbnRyb2xDb2RlIHRvIGRldGVybWluZSB3aGljaCBJT0NUTCB3ZSBhcmUgcHJvY2Vzc2luZworICAgIHN3aXRjaCAoSW9Db250cm9sQ29kZSkKKyAgICB7CisgICAgICAgIGNhc2UgSU9DVExfT1RMV0ZfUVVFUllfTk9USUZJQ0FUSU9OOgorICAgICAgICAgICAgQ29tcGxldGVJUlAgPSBGQUxTRTsKKyAgICAgICAgICAgIHN0YXR1cyA9IG90THdmUXVlcnlOZXh0Tm90aWZpY2F0aW9uKElycCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPQ1RMX09UTFdGX0VOVU1FUkFURV9ERVZJQ0VTOgorICAgICAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgICAgICBvdEx3ZklvQ3RsRW51bWVyYXRlSW50ZXJmYWNlcygKKyAgICAgICAgICAgICAgICAgICAgSW9CdWZmZXIsIElucHV0QnVmZmVyTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBJb0J1ZmZlciwgJk91dHB1dEJ1ZmZlckxlbmd0aAorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJT0NUTF9PVExXRl9RVUVSWV9ERVZJQ0U6CisgICAgICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgICAgIG90THdmSW9DdGxRdWVyeUludGVyZmFjZSgKKyAgICAgICAgICAgICAgICAgICAgSW9CdWZmZXIsIElucHV0QnVmZmVyTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBJb0J1ZmZlciwgJk91dHB1dEJ1ZmZlckxlbmd0aAorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19OT1RfSU1QTEVNRU5URUQ7CisgICAgICAgICAgICBSdGxaZXJvTWVtb3J5KElvQnVmZmVyLCBPdXRwdXRCdWZmZXJMZW5ndGgpOworICAgICAgICAgICAgT3V0cHV0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworZXJyb3I6CisKKyAgICBpZiAoQ29tcGxldGVJUlApCisgICAgeworICAgICAgICBJcnAtPklvU3RhdHVzLlN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAgSXJwLT5Jb1N0YXR1cy5JbmZvcm1hdGlvbiA9IE91dHB1dEJ1ZmZlckxlbmd0aDsKKworICAgICAgICBJb0NvbXBsZXRlUmVxdWVzdChJcnAsIElPX05PX0lOQ1JFTUVOVCk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfSU9DVEwsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitQTVNfRklMVEVSCitvdEx3ZkZpbmRBbmRSZWZJbnRlcmZhY2UoCisgICAgX0luXyBQR1VJRCAgSW50ZXJmYWNlR3VpZAorICAgICkKK3sKKyAgICBQTVNfRklMVEVSIHBPdXRwdXQgPSBOVUxMOworCisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgZm9yIChQTElTVF9FTlRSWSBMaW5rID0gRmlsdGVyTW9kdWxlTGlzdC5GbGluazsgTGluayAhPSAmRmlsdGVyTW9kdWxlTGlzdDsgTGluayA9IExpbmstPkZsaW5rKQorICAgIHsKKyAgICAgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgTVNfRklMVEVSLCBGaWx0ZXJNb2R1bGVMaW5rKTsKKworICAgICAgICBpZiAocEZpbHRlci0+U3RhdGUgPT0gRmlsdGVyUnVubmluZyAmJgorICAgICAgICAgICAgbWVtY21wKEludGVyZmFjZUd1aWQsICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkLCBzaXplb2YoR1VJRCkpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChFeEFjcXVpcmVSdW5kb3duUHJvdGVjdGlvbigmcEZpbHRlci0+RXh0ZXJuYWxSZWZzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwT3V0cHV0ID0gcEZpbHRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgcmV0dXJuIHBPdXRwdXQ7Cit9CisKKy8vCisvLyBOb3RpZmljYXRpb24gRnVuY3Rpb25zCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZSZWxlYXNlTm90aWZpY2F0aW9uKAorICAgIF9Jbl8gUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeQorICAgICkKK3sKKyAgICBpZiAoUnRsRGVjcmVtZW50UmVmZXJlbmNlQ291bnQoJk5vdGlmRW50cnktPlJlZkNvdW50KSkKKyAgICB7CisgICAgICAgIE5kaXNGcmVlTWVtb3J5KE5vdGlmRW50cnksIDAsIDApOworICAgIH0KK30KKworLy8gSW5kaWNhdGVzIGEgbmV3IG5vdGlmaWNhdGlvbgorX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmSW5kaWNhdGVOb3RpZmljYXRpb24oCisgICAgX0luXyBQRklMVEVSX05PVElGSUNBVElPTl9FTlRSWSBOb3RpZkVudHJ5CisgICAgKQoreworICAgIFBJUlAgSXJwc1RvQ29tcGxldGVbT1RMV0ZfTUFYX0NMSUVOVFNdID0gezB9OworICAgIFVDSEFSIElycE9mZnNldCA9IDA7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0lPQ1RMKTsKKworICAgIC8vIEluaXRpYWxpemUgd2l0aCBhIGxvY2FsIHJlZgorICAgIE5vdGlmRW50cnktPlJlZkNvdW50ID0gMTsKKworICAgIGlmIChGaWx0ZXJEZXZpY2VFeHRlbnNpb24gPT0gTlVMTCkgZ290byBlcnJvcjsKKworICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJkZpbHRlckRldmljZUV4dGVuc2lvbi0+TG9jayk7CisKKyAgICAvLyBQZW5kIHRoZSBub3RpZmljYXRpb24gZm9yIGVhY2ggY2xpZW50CisgICAgUExJU1RfRU5UUlkgTGluayA9IEZpbHRlckRldmljZUV4dGVuc2lvbi0+Q2xpZW50TGlzdC5GbGluazsKKyAgICB3aGlsZSAoTGluayAhPSAmRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5DbGllbnRMaXN0KQorICAgIHsKKyAgICAgICAgUE9UTFdGX0RFVklDRV9DTElFTlQgRGV2aWNlQ2xpZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfREVWSUNFX0NMSUVOVCwgTGluayk7CisKKyAgICAgICAgLy8gU2V0IG5leHQgbGluaworICAgICAgICBMaW5rID0gTGluay0+Rmxpbms7CisgICAgICAgIAorICAgICAgICBLSVJRTCBpcnFsOworICAgICAgICBJb0FjcXVpcmVDYW5jZWxTcGluTG9jaygmaXJxbCk7CisKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG90aGVyIHBlbmRpbmcgbm90aWZpY2F0aW9ucyBvciB3ZSBkb24ndCBoYXZlIGEgcGVuZGluZyBJUlAgc2F2ZWQKKyAgICAgICAgLy8gdGhlbiBqdXN0IGdvIGFoZWFkIGFuZCBhZGQgdGhlIG5vdGlmaWNhdGlvbiB0byB0aGUgbGlzdAorICAgICAgICBOVF9BU1NFUlQoRGV2aWNlQ2xpZW50LT5Ob3RpZmljYXRpb25TaXplIDw9IE9UTFdGX01BWF9QRU5ESU5HX05PVElGSUNBVElPTlNfUEVSX0NMSUVOVCk7CisgICAgICAgIGlmIChEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvblNpemUgIT0gMCB8fAorICAgICAgICAgICAgRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uSVJQID09IE5VTEwKKyAgICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXh0IGluZGV4CisgICAgICAgICAgICBVQ0hBUiBJbmRleCA9IChEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvbk9mZnNldCArIERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uU2l6ZSkgJSBPVExXRl9NQVhfUEVORElOR19OT1RJRklDQVRJT05TX1BFUl9DTElFTlQ7CisKKyAgICAgICAgICAgIC8vIEFkZCBhZGRpdGlvbmFsIHJlZiB0byB0aGUgbm90aWYKKyAgICAgICAgICAgIFJ0bEluY3JlbWVudFJlZmVyZW5jZUNvdW50KCZOb3RpZkVudHJ5LT5SZWZDb3VudCk7CisKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBhdCB0aGUgbWF4IGFscmVhZHksIHJlbGVhc2UgdGhlIG9sZGVzdAorICAgICAgICAgICAgaWYgKERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uU2l6ZSA9PSBPVExXRl9NQVhfUEVORElOR19OT1RJRklDQVRJT05TX1BFUl9DTElFTlQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nV2FybmluZyhEUklWRVJfSU9DVEwsICJEcm9wcGluZyBvbGQgbm90aWZpY2F0aW9uISIpOworICAgICAgICAgICAgICAgIG90THdmUmVsZWFzZU5vdGlmaWNhdGlvbihEZXZpY2VDbGllbnQtPlBlbmRpbmdOb3RpZmljYXRpb25zW0RldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uT2Zmc2V0XSk7CisgICAgICAgICAgICAgICAgRGV2aWNlQ2xpZW50LT5Ob3RpZmljYXRpb25PZmZzZXQgPSAoRGV2aWNlQ2xpZW50LT5Ob3RpZmljYXRpb25PZmZzZXQgKyAxKSAlIE9UTFdGX01BWF9QRU5ESU5HX05PVElGSUNBVElPTlNfUEVSX0NMSUVOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvblNpemUrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ29weSB0aGUgbm90aWZpY2F0aW9uIHRvIHRoZSBuZXh0IHNwYWNlCisgICAgICAgICAgICBEZXZpY2VDbGllbnQtPlBlbmRpbmdOb3RpZmljYXRpb25zW0luZGV4XSA9IE5vdGlmRW50cnk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBCZWZvcmUgd2UgYXJlIGFsbG93ZWQgdG8gY29tcGxldGUgdGhlIHBlbmRpbmcgSVJQLCB3ZSBtdXN0IHJlbW92ZSB0aGUgY2FuY2VsIHJvdXRpbmUKKyAgICAgICAgICAgIElvU2V0Q2FuY2VsUm91dGluZShEZXZpY2VDbGllbnQtPlBlbmRpbmdOb3RpZmljYXRpb25JUlAsIE5VTEwpOworCisgICAgICAgICAgICBJcnBzVG9Db21wbGV0ZVtJcnBPZmZzZXRdID0gRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uSVJQOworICAgICAgICAgICAgSXJwT2Zmc2V0Kys7CisKKyAgICAgICAgICAgIERldmljZUNsaWVudC0+UGVuZGluZ05vdGlmaWNhdGlvbklSUCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJlbGVhc2UgdGhlIGNhbmNlbCBzcGluIGxvY2sKKyAgICAgICAgSW9SZWxlYXNlQ2FuY2VsU3BpbkxvY2soaXJxbCk7CisgICAgfQorCisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5Mb2NrKTsKKworICAgIC8vIENvbXBsZXRlIGFueSBJUlBzIG5vdywgb3V0c2lkZSB0aGUgbG9jaworICAgIGZvciAoVUNIQVIgaSA9IDA7IGkgPCBJcnBPZmZzZXQ7IGkrKykKKyAgICB7CisgICAgICAgIFBJUlAgSXJwVG9Db21wbGV0ZSA9IElycHNUb0NvbXBsZXRlW2ldOworCisgICAgICAgIC8vIENvcHkgdGhlIG5vdGlmaWNhdGlvbiBwYXlsb2FkCisgICAgICAgIFBWT0lEIElvQnVmZmVyID0gSXJwVG9Db21wbGV0ZS0+QXNzb2NpYXRlZElycC5TeXN0ZW1CdWZmZXI7CisgICAgICAgIG1lbWNweShJb0J1ZmZlciwgJk5vdGlmRW50cnktPk5vdGlmLCBzaXplb2YoT1RMV0ZfTk9USUZJQ0FUSU9OKSk7CisgICAgICAgIElycFRvQ29tcGxldGUtPklvU3RhdHVzLkluZm9ybWF0aW9uID0gc2l6ZW9mKE9UTFdGX05PVElGSUNBVElPTik7CisKKyAgICAgICAgLy8gQ29tcGxldGUgdGhlIElSUAorICAgICAgICBJcnBUb0NvbXBsZXRlLT5Jb1N0YXR1cy5TdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgSW9Db21wbGV0ZVJlcXVlc3QoSXJwVG9Db21wbGV0ZSwgSU9fTk9fSU5DUkVNRU5UKTsKKyAgICB9CisKK2Vycm9yOgorICAgIAorICAgIC8vIFJlbGVhc2UgbG9jYWwgcmVmIG9uIHRoZSBub3RpZmljYXRpb24KKyAgICBvdEx3ZlJlbGVhc2VOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfSU9DVEwpOworfQorCitEUklWRVJfQ0FOQ0VMIG90THdmUXVlcnlOb3RpZmljYXRpb25DYW5jZWxsZWQ7CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK1ZPSUQKK290THdmUXVlcnlOb3RpZmljYXRpb25DYW5jZWxsZWQoCisgICAgX0lub3V0XyBQREVWSUNFX09CSkVDVCBEZXZpY2VPYmplY3QsCisgICAgX0lub3V0XyBfSVJRTF91c2VzX2NhbmNlbF8gc3RydWN0IF9JUlAgKklycAorKQoreworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoRGV2aWNlT2JqZWN0KTsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfSU9DVEwpOworICAgIAorICAgIFBJT19TVEFDS19MT0NBVElPTiBJcnBTcCA9IElvR2V0Q3VycmVudElycFN0YWNrTG9jYXRpb24oSXJwKTsKKyAgICBQT1RMV0ZfREVWSUNFX0NMSUVOVCBEZXZpY2VDbGllbnQgPSAoUE9UTFdGX0RFVklDRV9DTElFTlQpSXJwU3AtPkZpbGVPYmplY3QtPkZzQ29udGV4dDI7CisKKyAgICBpZiAoRGV2aWNlQ2xpZW50KQorICAgIHsKKyAgICAgICAgRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uSVJQID0gTlVMTDsKKyAgICB9CisKKyAgICBJb1JlbGVhc2VDYW5jZWxTcGluTG9jayhJcnAtPkNhbmNlbElycWwpOworCisgICAgSXJwLT5Jb1N0YXR1cy5TdGF0dXMgPSBTVEFUVVNfQ0FOQ0VMTEVEOworICAgIElycC0+SW9TdGF0dXMuSW5mb3JtYXRpb24gPSAwOworICAgIElvQ29tcGxldGVSZXF1ZXN0KElycCwgSU9fTk9fSU5DUkVNRU5UKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9JT0NUTCk7Cit9CisKKy8vIFF1ZXJpZXMgdGhlIG5leHQgbm90aWZpY2F0aW9uCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmUXVlcnlOZXh0Tm90aWZpY2F0aW9uKAorICAgIF9Jbl8gUElSUCBJcnAKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgUE9UTFdGX0RFVklDRV9DTElFTlQgRGV2aWNlQ2xpZW50ID0gTlVMTDsKKyAgICBQRklMVEVSX05PVElGSUNBVElPTl9FTlRSWSBOb3RpZkVudHJ5ID0gTlVMTDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfSU9DVEwpOworCisgICAgUElPX1NUQUNLX0xPQ0FUSU9OIElycFNwID0gSW9HZXRDdXJyZW50SXJwU3RhY2tMb2NhdGlvbihJcnApOworICAgIFVMT05HIE91dHB1dEJ1ZmZlckxlbmd0aCA9IElycFNwLT5QYXJhbWV0ZXJzLkRldmljZUlvQ29udHJvbC5PdXRwdXRCdWZmZXJMZW5ndGg7CisKKyAgICAvLyBWYWxpZGF0ZSB3ZSBoYXZlIGEgYmlnIGVub3VnaCBidWZmZXIKKyAgICBpZiAoT3V0cHV0QnVmZmVyTGVuZ3RoIDwgc2l6ZW9mKE9UTFdGX05PVElGSUNBVElPTikpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KElycC0+QXNzb2NpYXRlZElycC5TeXN0ZW1CdWZmZXIsIE91dHB1dEJ1ZmZlckxlbmd0aCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICAKKyAgICBEZXZpY2VDbGllbnQgPSAoUE9UTFdGX0RFVklDRV9DTElFTlQpSXJwU3AtPkZpbGVPYmplY3QtPkZzQ29udGV4dDI7CisgICAgaWYgKERldmljZUNsaWVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0RFVklDRV9OT1RfUkVBRFk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5Mb2NrKTsKKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vdGlmaWNhdGlvbnMgYXZhaWxhYmxlCisgICAgaWYgKERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gU2V0IHRoZSBjYW5jZWwgcm91dGluZQorICAgICAgICBJb1NldENhbmNlbFJvdXRpbmUoSXJwLCBvdEx3ZlF1ZXJ5Tm90aWZpY2F0aW9uQ2FuY2VsbGVkKTsKKworICAgICAgICAvLyBNYXJrIHRoZSBJcnAgYXMgcGVuZGluZworICAgICAgICBJb01hcmtJcnBQZW5kaW5nKElycCk7CisKKyAgICAgICAgLy8gU2F2ZSB0aGUgSVJQIHRvIGNvbXBsZXRlIGxhdGVyLCB3aGVuIHdlIGhhdmUgYSBub3RpZmljYXRpb24KKyAgICAgICAgRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uSVJQID0gSXJwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBHZXQgdGhlIG5vdGlmaWNhdGlvbgorICAgICAgICBOb3RpZkVudHJ5ID0gRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uc1tEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvbk9mZnNldF07CisgICAgICAgIERldmljZUNsaWVudC0+UGVuZGluZ05vdGlmaWNhdGlvbnNbRGV2aWNlQ2xpZW50LT5Ob3RpZmljYXRpb25PZmZzZXRdID0gTlVMTDsKKworICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIG9mZnNldCBhbmQgZGVjcmVtZW50IHRoZSBzaXplCisgICAgICAgIERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uT2Zmc2V0ID0gKERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uT2Zmc2V0ICsgMSkgJSBPVExXRl9NQVhfUEVORElOR19OT1RJRklDQVRJT05TX1BFUl9DTElFTlQ7CisgICAgICAgIERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uU2l6ZS0tOworICAgIH0KKworICAgIE5kaXNSZWxlYXNlU3BpbkxvY2soJkZpbHRlckRldmljZUV4dGVuc2lvbi0+TG9jayk7CisKKyAgICAvLyBJZiB3ZSBmb3VuZCBhIG5vdGlmaWNhdGlvbiwgY29tcGxldGUgdGhlIElSUCB3aXRoIGl0CisgICAgaWYgKE5vdGlmRW50cnkpCisgICAgeworICAgICAgICAvLyBDb3B5IHRoZSBub3RpZmljYXRpb24gcGF5bG9hZAorICAgICAgICBQVk9JRCBJb0J1ZmZlciA9IElycC0+QXNzb2NpYXRlZElycC5TeXN0ZW1CdWZmZXI7CisgICAgICAgIG1lbWNweShJb0J1ZmZlciwgJk5vdGlmRW50cnktPk5vdGlmLCBzaXplb2YoT1RMV0ZfTk9USUZJQ0FUSU9OKSk7CisgICAgICAgIElycC0+SW9TdGF0dXMuSW5mb3JtYXRpb24gPSBzaXplb2YoT1RMV0ZfTk9USUZJQ0FUSU9OKTsKKworICAgICAgICAvLyBGcmVlIHRoZSBub3RpZmljYXRpb24KKyAgICAgICAgb3RMd2ZSZWxlYXNlTm90aWZpY2F0aW9uKE5vdGlmRW50cnkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBPdGhlcndpc2UsIHNldCBzdGF0dXMgdG8gaW5kaWNhdGUgd2UgYXJlIHBlbmRpbmcgdGhlIElSUAorICAgICAgICBzdGF0dXMgPSBTVEFUVVNfUEVORElORzsKKyAgICB9CisKK2Vycm9yOgorCisgICAgLy8gQ29tcGxldGUgdGhlIElSUCBpZiB3ZSBhcmVuJ3QgcGVuZGluZworICAgIGlmIChzdGF0dXMgIT0gU1RBVFVTX1BFTkRJTkcpCisgICAgeworICAgICAgICBJcnAtPklvU3RhdHVzLlN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAgSW9Db21wbGV0ZVJlcXVlc3QoSXJwLCBJT19OT19JTkNSRU1FTlQpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0lPQ1RMLCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kZXZpY2UuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmJhNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2RldmljZS5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgZGV2aWNlIElPQ1RMIGludGVyZmFjZS4KKyAqLworCisjaWZuZGVmIF9ERVZJQ0VfSAorI2RlZmluZSBfREVWSUNFX0gKKworLy8KKy8vIFRoZSBmaWx0ZXIgbmVlZHMgdG8gaGFuZGxlIElPQ1RSTHMKKy8vCisjZGVmaW5lIExJTktOQU1FX1NUUklORyAgICAgICAgICAgICBMIlxcRG9zRGV2aWNlc1xcb3RMd2YiCisjZGVmaW5lIE5UREVWSUNFX1NUUklORyAgICAgICAgICAgICBMIlxcRGV2aWNlXFxvdEx3ZiIKKworLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBjbGllbnRzIHN1cHBvcnRlZAorI2RlZmluZSBPVExXRl9NQVhfQ0xJRU5UUyAgIDEwCisKKy8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBub3RpZmljYXRpb25zIGFsbG93ZWQgdG8gYmUgcGVuZGVkLCBwZXIgY2xpZW50CisjZGVmaW5lIE9UTFdGX01BWF9QRU5ESU5HX05PVElGSUNBVElPTlNfUEVSX0NMSUVOVCAgMTAwCisKKy8vIENvbnRleHQgZm9yIElPIERldmljZSBDb250cm9sIGNhbGxiYWNrcwordHlwZWRlZiBzdHJ1Y3QgX09UTFdGX0RFVklDRV9FWFRFTlNJT04KK3sKKyAgICBVTE9ORyAgICAgICAgICAgU2lnbmF0dXJlOworICAgIE5ESVNfSEFORExFICAgICBIYW5kbGU7CisKKyAgICBORElTX1NQSU5fTE9DSyAgTG9jazsKKyAgICBfR3VhcmRlZF9ieV8oTG9jaykKKyAgICBMSVNUX0VOVFJZICAgICAgQ2xpZW50TGlzdDsKKyAgICBVTE9ORyAgICAgICAgICAgQ2xpZW50TGlzdFNpemU7CisKK30gT1RMV0ZfREVWSUNFX0VYVEVOU0lPTiwgKlBPVExXRl9ERVZJQ0VfRVhURU5TSU9OOworCisvLyBOb3RpZmljYXRpb24gc3RydWN0dXJlCit0eXBlZGVmIHN0cnVjdCBfRklMVEVSX05PVElGSUNBVElPTl9FTlRSWQoreworICAgIFJUTF9SRUZFUkVOQ0VfQ09VTlQgUmVmQ291bnQ7CisgICAgT1RMV0ZfTk9USUZJQ0FUSU9OICBOb3RpZjsKKworfSBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZLCAqUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlk7CisKKy8vIFRhZyBmb3IgYWxsb2NhdGluZyBub3RpZmljYXRpb24gc3RydWN0dXJlcyAnVE50ZgorI2RlZmluZSBGSUxURVJfTk9USUZfQUxMT0NfVEFHICdmdE5UJworCisvLyBIZWxwZXIgdG8gYWxsb2NhdGUgYSBuZXcgbm90aWZpY2F0aW9uIGVudHJ5CisjZGVmaW5lIEZJTFRFUl9BTExPQ19OT1RJRihfcEZpbHRlcikgXAorICAgIChQRklMVEVSX05PVElGSUNBVElPTl9FTlRSWSlOZGlzQWxsb2NhdGVNZW1vcnlXaXRoVGFnUHJpb3JpdHkoX3BGaWx0ZXItPkZpbHRlckhhbmRsZSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpLCBGSUxURVJfTk9USUZfQUxMT0NfVEFHLCBOb3JtYWxQb29sUHJpb3JpdHkpCisKKy8vIENvbnRleHQgZm9yIElPIERldmljZSBDb250cm9sIGNsaWVudHMKK3R5cGVkZWYgc3RydWN0IF9PVExXRl9ERVZJQ0VfQ0xJRU5UCit7CisgICAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICAgIExpbms7CisgICAgUEZJTEVfT0JKRUNUICAgICAgICAgICAgICAgIEZpbGVPYmplY3Q7CisgICAgUElSUCAgICAgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdOb3RpZmljYXRpb25JUlA7CisgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgIFBlbmRpbmdOb3RpZmljYXRpb25zW09UTFdGX01BWF9QRU5ESU5HX05PVElGSUNBVElPTlNfUEVSX0NMSUVOVF07CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbk9mZnNldDsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uU2l6ZTsKKworfSBPVExXRl9ERVZJQ0VfQ0xJRU5ULCAqUE9UTFdGX0RFVklDRV9DTElFTlQ7CisKKy8vIEhlbHBlciB0byBhbGxvY2F0ZSBhIG5ldyBEZXZpY2UgQ29udHJvbCBjbGllbnQKKyNkZWZpbmUgRklMVEVSX0FMTE9DX0RFVklDRV9DTElFTlQoKSBcCisgICAgKFBPVExXRl9ERVZJQ0VfQ0xJRU5UKU5kaXNBbGxvY2F0ZU1lbW9yeVdpdGhUYWdQcmlvcml0eShGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkhhbmRsZSwgc2l6ZW9mKE9UTFdGX0RFVklDRV9DTElFTlQpLCBGSUxURVJfTk9USUZfQUxMT0NfVEFHLCBOb3JtYWxQb29sUHJpb3JpdHkpCisKK3N0YXRpY19hc3NlcnQoCisgICAgKDEgPDwgKHNpemVvZihVQ0hBUikgKiA4KSkgPiBPVExXRl9NQVhfUEVORElOR19OT1RJRklDQVRJT05TX1BFUl9DTElFTlQsIAorICAgICJUeXBlIG9mIE5vdGlmaWNhdGlvbk9mZnNldCBtdXN0IGJlIGJpZyBlbm91Z2ggZm9yIE9UTFdGX01BWF9QRU5ESU5HX05PVElGSUNBVElPTlNfUEVSX0NMSUVOVCIKKyAgICApOworCisvLyBHbG9iYWwgY29udGV4dCBmb3IgZGV2aWNlIGNvbnRyb2wgY2FsbGJhY2tzCitleHRlcm4gUE9UTFdGX0RFVklDRV9FWFRFTlNJT04gRmlsdGVyRGV2aWNlRXh0ZW5zaW9uOworCisvLworLy8gRnVuY3Rpb24gcHJvdG90eXBlcworLy8KKworLy8gUmVnaXN0ZXJzIGZvciBJbyBDb250cm9sIGNhbGxiYWNrcworX05vX2NvbXBldGluZ190aHJlYWRfCitJTklUQ09ERQorTkRJU19TVEFUVVMKK290THdmUmVnaXN0ZXJEZXZpY2UoCisgICAgVk9JRAorICAgICk7CisKKy8vIFVucmVnaXN0ZXJzIGZvciBJbyBDb250cm9sIENhbGxiYWNrcworX05vX2NvbXBldGluZ190aHJlYWRfCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkRlcmVnaXN0ZXJEZXZpY2UoCisgICAgVk9JRAorICAgICk7CisKKy8vIENhbGxiYWNrIGZvciBnZW5lcmFsIGNvbnRyb2wgSVJQcworRFJJVkVSX0RJU1BBVENIIG90THdmRGlzcGF0Y2g7CisKKy8vIENhbGxiYWNrIGZvciBJT0NUTHMKK0RSSVZFUl9ESVNQQVRDSCBvdEx3ZkRldmljZUlvQ29udHJvbDsKKworLy8gQXR0ZW1wdHMgdG8gZmluZCBhbmQgYWRkIGEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgaW50ZXJmYWNlCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitQTVNfRklMVEVSCitvdEx3ZkZpbmRBbmRSZWZJbnRlcmZhY2UoCisgICAgX0luXyBQR1VJRCAgSW50ZXJmYWNlR3VpZAorICAgICk7CisKKy8vCisvLyBOb3RpZmljYXRpb24gVHlwZSBhbmQgRnVuY3Rpb25zCisvLworCisvLyBJbmRpY2F0ZXMgYSBuZXcgbm90aWZpY2F0aW9uCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZJbmRpY2F0ZU5vdGlmaWNhdGlvbigKKyAgICBfSW5fIFBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZIE5vdGlmRW50cnkKKyAgICApOworCisvLyBRdWVyaWVzIHRoZSBuZXh0IG5vdGlmaWNhdGlvbgorX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlF1ZXJ5TmV4dE5vdGlmaWNhdGlvbigKKyAgICBfSW5fIFBJUlAgSXJwCisgICAgKTsKKworLy8gUmVsZWFzZSBhIHJlZiBvbiB0aGUgbm90aWZpY2F0aW9uCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZSZWxlYXNlTm90aWZpY2F0aW9uKAorICAgIF9Jbl8gUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeQorICAgICk7CisKKyNlbmRpZiAvLyBfREVWSUNFX0gKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kcml2ZXIuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDIxMGUxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2RyaXZlci5jCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgImRyaXZlci50bWgiCisKKy8vCisvLyBHbG9iYWwgdmFyaWFibGVzCisvLworCisvLyBHbG9iYWwgRHJpdmVyIE9iamVjdCBmcm9tIERyaXZlckVudHJ5CitQRFJJVkVSX09CSkVDVCAgICAgIEZpbHRlckRyaXZlck9iamVjdCA9IE5VTEw7CisKKy8vIE5ESVMgRmlsdGVyIGhhbmRsZSBmcm9tIE5kaXNGUmVnaXN0ZXJGaWx0ZXJEcml2ZXIKK05ESVNfSEFORExFICAgICAgICAgRmlsdGVyRHJpdmVySGFuZGxlID0gTlVMTDsKKworLy8gR2xvYmFsIGxpc3Qgb2YgVEhSRUFEX0ZJTFRFUiBpbnN0YW5jZXMKK05ESVNfU1BJTl9MT0NLICAgICAgRmlsdGVyTGlzdExvY2s7CitMSVNUX0VOVFJZICAgICAgICAgIEZpbHRlck1vZHVsZUxpc3Q7CisKKy8vIENhY2hlZCBwZXJmb3JtYW5jZSBmcmVxdWVuY3kgb2YgdGhlIHN5c3RlbQorTEFSR0VfSU5URUdFUiAgICAgICBGaWx0ZXJQZXJmb3JtYW5jZUZyZXF1ZW5jeTsKKworSU5JVENPREUKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK05UU1RBVFVTCitEcml2ZXJFbnRyeSgKKyAgICBfSW5fIFBEUklWRVJfT0JKRUNUICAgICBEcml2ZXJPYmplY3QsCisgICAgX0luXyBQVU5JQ09ERV9TVFJJTkcgICAgUmVnaXN0cnlQYXRoCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRmlyc3QgZW50cnkgcG9pbnQgdG8gYmUgY2FsbGVkLCB3aGVuIHRoaXMgZHJpdmVyIGlzIGxvYWRlZC4KKyAgICBSZWdpc3RlciB3aXRoIE5ESVMgYXMgYSBmaWx0ZXIgZHJpdmVyIGFuZCBjcmVhdGUgYSBkZXZpY2UKKyAgICBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHVzZXItbW9kZS4KKworQXJndW1lbnRzOgorCisgICAgRHJpdmVyT2JqZWN0IC0gcG9pbnRlciB0byB0aGUgc3lzdGVtJ3MgZHJpdmVyIG9iamVjdCBzdHJ1Y3R1cmUKKyAgICBmb3IgdGhpcyBkcml2ZXIKKworICAgIFJlZ2lzdHJ5UGF0aCAtIHN5c3RlbSdzIHJlZ2lzdHJ5IHBhdGggZm9yIHRoaXMgZHJpdmVyCisKK1JldHVybiBWYWx1ZToKKworICAgIFNUQVRVU19TVUNDRVNTIGlmIGFsbCBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsLCBTVEFUVVNfWFhYCisgICAgZXJyb3IgY29kZSBpZiBub3QuCisKKy0tKi8KK3sKKyAgICBORElTX1NUQVRVUyBTdGF0dXM7CisKKyAgICAvLyBJbml0aWFsaXplIFdQUCBsb2dnaW5nCisgICAgV1BQX0lOSVRfVFJBQ0lORyhEcml2ZXJPYmplY3QsIFJlZ2lzdHJ5UGF0aCk7CisKKyAgICAvLyBTYXZlIGdsb2JhbCBEcml2ZXJPYmplY3QKKyAgICBGaWx0ZXJEcml2ZXJPYmplY3QgPSBEcml2ZXJPYmplY3Q7CisKKyAgICAvLyBTZXQgdGhlIGRyaXZlciB1bmxvYWQgaGFuZGxlcgorICAgIERyaXZlck9iamVjdC0+RHJpdmVyVW5sb2FkID0gRHJpdmVyVW5sb2FkOworCisgICAgLy8gQ2FjaGUgcGVyZm9ybWFuY2UgY291bnRlciBmcmVxdWVuY3kKKyAgICAoVk9JRClLZVF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZGaWx0ZXJQZXJmb3JtYW5jZUZyZXF1ZW5jeSk7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJSZWdpc3RyeTogJVMiLCBSZWdpc3RyeVBhdGgtPkJ1ZmZlcik7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgTkRJU19GSUxURVJfRFJJVkVSX0NIQVJBQ1RFUklTVElDUyAgRkNoYXJzID0gCisgICAgICAgIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBORElTX09CSkVDVF9UWVBFX0ZJTFRFUl9EUklWRVJfQ0hBUkFDVEVSSVNUSUNTLAorI2lmIE5ESVNfU1VQUE9SVF9ORElTNjEKKyAgICAgICAgICAgICAgICBORElTX0ZJTFRFUl9DSEFSQUNURVJJU1RJQ1NfUkVWSVNJT05fMiwKKyNlbHNlCisgICAgICAgICAgICAgICAgTkRJU19GSUxURVJfQ0hBUkFDVEVSSVNUSUNTX1JFVklTSU9OXzEsCisjZW5kaWYKKyAgICAgICAgICAgICAgICBzaXplb2YoTkRJU19GSUxURVJfRFJJVkVSX0NIQVJBQ1RFUklTVElDUykKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBORElTX0ZJTFRFUl9NQUpPUl9WRVJTSU9OLAorICAgICAgICAgICAgTkRJU19GSUxURVJfTUlOT1JfVkVSU0lPTiwKKyAgICAgICAgICAgIDEsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIFJUTF9DT05TVEFOVF9TVFJJTkcoRklMVEVSX0ZSSUVORExZX05BTUUpLAorICAgICAgICAgICAgUlRMX0NPTlNUQU5UX1NUUklORyhGSUxURVJfVU5JUVVFX05BTUUpLAorICAgICAgICAgICAgUlRMX0NPTlNUQU5UX1NUUklORyhGSUxURVJfU0VSVklDRV9OQU1FKSwKKworICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBGaWx0ZXJBdHRhY2gsCisgICAgICAgICAgICBGaWx0ZXJEZXRhY2gsCisgICAgICAgICAgICBGaWx0ZXJSZXN0YXJ0LAorICAgICAgICAgICAgRmlsdGVyUGF1c2UsCisgICAgICAgICAgICBGaWx0ZXJTZW5kTmV0QnVmZmVyTGlzdHMsCisgICAgICAgICAgICBGaWx0ZXJTZW5kTmV0QnVmZmVyTGlzdHNDb21wbGV0ZSwKKyAgICAgICAgICAgIEZpbHRlckNhbmNlbFNlbmROZXRCdWZmZXJMaXN0cywKKyAgICAgICAgICAgIEZpbHRlclJlY2VpdmVOZXRCdWZmZXJMaXN0cywKKyAgICAgICAgICAgIEZpbHRlclJldHVybk5ldEJ1ZmZlckxpc3RzLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBGaWx0ZXJTdGF0dXMsCisjaWYgKE5ESVNfU1VQUE9SVF9ORElTNjEpCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisjZW5kaWYKKyAgICAgICAgfTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbml0aWFsaXplIGdsb2JhbCB2YXJpYWJsZXMKKyAgICAgICAgLy8KKyAgICAgICAgTmRpc0FsbG9jYXRlU3BpbkxvY2soJkZpbHRlckxpc3RMb2NrKTsKKyAgICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZGaWx0ZXJNb2R1bGVMaXN0KTsKKyAgICAgICAgCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmaWx0ZXIgd2l0aCBORElTCisgICAgICAgIC8vCisgICAgICAgIFN0YXR1cyA9IAorICAgICAgICAgICAgTmRpc0ZSZWdpc3RlckZpbHRlckRyaXZlcigKKyAgICAgICAgICAgICAgICBEcml2ZXJPYmplY3QsCisgICAgICAgICAgICAgICAgKE5ESVNfSEFORExFKUZpbHRlckRyaXZlck9iamVjdCwKKyAgICAgICAgICAgICAgICAmRkNoYXJzLAorICAgICAgICAgICAgICAgICZGaWx0ZXJEcml2ZXJIYW5kbGUKKyAgICAgICAgICAgICAgICApOworICAgICAgICBpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiUmVnaXN0ZXIgZmlsdGVyIGRyaXZlciBmYWlsZWQsICUhTkRJU19TVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGRldmljZSBJT0NUTCBpbnRlcmZhY2UKKyAgICAgICAgLy8KKyAgICAgICAgU3RhdHVzID0gb3RMd2ZSZWdpc3RlckRldmljZSgpOworICAgICAgICBpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiUmVnaXN0ZXIgZGV2aWNlIGZvciB0aGUgZmlsdGVyIGRyaXZlciBmYWlsZWQsICUhTkRJU19TVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IHdoaWxlIChGQUxTRSk7CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIFN0YXR1cyk7CisKKyAgICBpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgeworICAgICAgICBpZiAoRmlsdGVyRHJpdmVySGFuZGxlKQorICAgICAgICB7CisgICAgICAgICAgICBOZGlzRkRlcmVnaXN0ZXJGaWx0ZXJEcml2ZXIoRmlsdGVyRHJpdmVySGFuZGxlKTsKKyAgICAgICAgICAgIEZpbHRlckRyaXZlckhhbmRsZSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgV1BQX0NMRUFOVVAoRHJpdmVyT2JqZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gU3RhdHVzOworfQorCitQQUdFRFgKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK1ZPSUQKK0RyaXZlclVubG9hZCgKKyAgICBfSW5fIFBEUklWRVJfT0JKRUNUICAgICBEcml2ZXJPYmplY3QKKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBGaWx0ZXIgZHJpdmVyJ3MgdW5sb2FkIHJvdXRpbmUuCisgICAgRGVyZWdpc3RlciB0aGUgZHJpdmVyIGZyb20gTkRJUy4KKworQXJndW1lbnRzOgorCisgICAgRHJpdmVyT2JqZWN0IC0gcG9pbnRlciB0byB0aGUgc3lzdGVtJ3MgZHJpdmVyIG9iamVjdCBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyBkcml2ZXIKKworUmV0dXJuIFZhbHVlOgorCisgICAgTk9ORQorCistLSovCit7CisgICAgUEFHRURfQ09ERSgpOworICAgIAorICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICAvLworICAgIC8vIENsZWFuIHVwIHRoZSBkZXZpY2UgSU9DVEwgaW50ZXJmYWNlCisgICAgLy8KKyAgICBvdEx3ZkRlcmVnaXN0ZXJEZXZpY2UoKTsKKworICAgIC8vCisgICAgLy8gRGVyZWdpc3RlciB0aGUgTkRJUyBmaWx0ZXIKKyAgICAvLworICAgIE5kaXNGRGVyZWdpc3RlckZpbHRlckRyaXZlcihGaWx0ZXJEcml2ZXJIYW5kbGUpOworICAgIEZpbHRlckRyaXZlckhhbmRsZSA9IE5VTEw7CisKKyAgICAvLyBWYWxpZGF0ZSB3ZSBoYXZlIG5vIG91dHN0YW5kaW5nIGZpbHRlciBpbnN0YW5jZXMKKyAgICBOVF9BU1NFUlQoSXNMaXN0RW1wdHkoJkZpbHRlck1vZHVsZUxpc3QpKTsKKworICAgIC8vCisgICAgLy8gQ2xlYW4gdXAgZ2xvYmFsIHZhcmlhYmxlcworICAgIC8vCisgICAgTmRpc0ZyZWVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworCisgICAgLy8KKyAgICAvLyBDbGVhbiB1cCBXUFAgbG9nZ2luZworICAgIC8vCisgICAgV1BQX0NMRUFOVVAoRHJpdmVyT2JqZWN0KTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kcml2ZXIuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kcml2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGMxY2QwCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2RyaXZlci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0b3AtbGV2ZWwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZm9yIGRyaXZlciBpbml0aWFsaXphdGlvbgorICogIGFuZCBjbGVhbiB1cC4KKyAqLworCisjaWZuZGVmIF9EUklWRVJfSAorI2RlZmluZSBfRFJJVkVSX0gKKworLy8gTGVnYWwgdmFsdWVzIGluY2x1ZGU6CisvLyAgICA2LjAgIEF2YWlsYWJsZSBzdGFydGluZyB3aXRoIFdpbmRvd3MgVmlzdGEgUlRNCisvLyAgICA2LjEgIEF2YWlsYWJsZSBzdGFydGluZyB3aXRoIFdpbmRvd3MgVmlzdGEgU1AxIC8gV2luZG93cyBTZXJ2ZXIgMjAwOAorLy8gICAgNi4yMCBBdmFpbGFibGUgc3RhcnRpbmcgd2l0aCBXaW5kb3dzIDcgLyBXaW5kb3dzIFNlcnZlciAyMDA4IFIyCisvLyAgICA2LjMwIEF2YWlsYWJsZSBzdGFydGluZyB3aXRoIFdpbmRvd3MgOCAvIFdpbmRvd3MgU2VydmVyICI4IgorI2RlZmluZSBGSUxURVJfTUFKT1JfTkRJU19WRVJTSU9OICAgNgorCisjaWYgZGVmaW5lZChORElTNjApCisjZGVmaW5lIEZJTFRFUl9NSU5PUl9ORElTX1ZFUlNJT04gICAwCisjZWxpZiBkZWZpbmVkKE5ESVM2MjApCisjZGVmaW5lIEZJTFRFUl9NSU5PUl9ORElTX1ZFUlNJT04gICAyMAorI2VsaWYgZGVmaW5lZChORElTNjMwKQorI2RlZmluZSBGSUxURVJfTUlOT1JfTkRJU19WRVJTSU9OICAgMzAKKyNlbmRpZgorCisvLworLy8gR2xvYmFsIHZhcmlhYmxlcworLy8KKworLy8gR2xvYmFsIERyaXZlciBPYmplY3QgZnJvbSBEcml2ZXJFbnRyeQorZXh0ZXJuIFBEUklWRVJfT0JKRUNUICAgICAgRmlsdGVyRHJpdmVyT2JqZWN0OworCisvLyBORElTIEZpbHRlciBoYW5kbGUgZnJvbSBOZGlzRlJlZ2lzdGVyRmlsdGVyRHJpdmVyCitleHRlcm4gTkRJU19IQU5ETEUgICAgICAgICBGaWx0ZXJEcml2ZXJIYW5kbGU7CisKKy8vIElvQ29udHJvbCBEZXZpY2UgT2JqZWN0IGZyb20gSW9DcmVhdGVEZXZpY2VTZWN1cmUKK2V4dGVybiBQREVWSUNFX09CSkVDVCAgICAgIElvRGV2aWNlT2JqZWN0OworCisvLyBHbG9iYWwgbGlzdCBvZiBUSFJFQURfRklMVEVSIGluc3RhbmNlcworZXh0ZXJuIE5ESVNfU1BJTl9MT0NLICAgICAgRmlsdGVyTGlzdExvY2s7CitleHRlcm4gTElTVF9FTlRSWSAgICAgICAgICBGaWx0ZXJNb2R1bGVMaXN0OworCisvLyBDYWNoZWQgcGVyZm9ybWFuY2UgZnJlcXVlbmN5IG9mIHRoZSBzeXN0ZW0KK2V4dGVybiBMQVJHRV9JTlRFR0VSICAgICAgIEZpbHRlclBlcmZvcm1hbmNlRnJlcXVlbmN5OworCisjZGVmaW5lIEZJTFRFUl9GUklFTkRMWV9OQU1FICAgICAgICBMIk9wZW5UaHJlYWQgTkRJUyBMaWdodFdlaWdodCBGaWx0ZXIiCisjZGVmaW5lIEZJTFRFUl9VTklRVUVfTkFNRSAgICAgICAgICBMIntCM0EzODQ1QS0xNjRFLTQ3MjctQjEyRS0zMkI4RENFMUY2Q0R9IiAvL3VuaXF1ZSBuYW1lLCBxdWlkIG5hbWUKKyNkZWZpbmUgRklMVEVSX1NFUlZJQ0VfTkFNRSAgICAgICAgIEwiT1RMV0YiCisKKy8vCisvLyBGdW5jdGlvbiBwcm90b3R5cGVzCisvLworSU5JVENPREUgRFJJVkVSX0lOSVRJQUxJWkUgRHJpdmVyRW50cnk7CisKK1BBR0VEWCBEUklWRVJfVU5MT0FEIERyaXZlclVubG9hZDsKKworI2VuZGlmIC8vIF9EUklWRVJfSApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2V2ZW50cHJvY2Vzc2luZy5jIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2V2ZW50cHJvY2Vzc2luZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOWVlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvZXZlbnRwcm9jZXNzaW5nLmMKQEAgLTAsMCArMSwxMTE0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25zIGZvciBjcmVhdGluZyBuZXcgbm90aWZpY2F0aW9ucyBmb3IgSU9DVEwgY2xpZW50cy4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgImV2ZW50cHJvY2Vzc2luZy50bWgiCisKK3R5cGVkZWYgc3RydWN0IF9PVExXRl9BRERSX0VWRU5UCit7CisgICAgTElTVF9FTlRSWSAgICAgICAgICAgICAgTGluazsKKyAgICBNSUJfTk9USUZJQ0FUSU9OX1RZUEUgICBOb3RpZmljYXRpb25UeXBlOworICAgIElONl9BRERSICAgICAgICAgICAgICAgIEFkZHJlc3M7CisKK30gT1RMV0ZfQUREUl9FVkVOVCwgKlBPVExXRl9BRERSX0VWRU5UOworCit0eXBlZGVmIHN0cnVjdCBfT1RMV0ZfTkJMX0VWRU5UCit7CisgICAgTElTVF9FTlRSWSAgICAgICAgICBMaW5rOworICAgIFBORVRfQlVGRkVSX0xJU1QgICAgTmV0QnVmZmVyTGlzdHM7CisKK30gT1RMV0ZfTkJMX0VWRU5ULCAqUE9UTFdGX05CTF9FVkVOVDsKKwordHlwZWRlZiBzdHJ1Y3QgX09UTFdGX01BQ19GUkFNRV9FVkVOVAoreworICAgIExJU1RfRU5UUlkgICAgICAgICAgTGluazsKKyAgICB1aW50OF90ICAgICAgICAgICAgIEJ1ZmZlckxlbmd0aDsKKyAgICB1aW50OF90ICAgICAgICAgICAgIEJ1ZmZlclswXTsKKworfSBPVExXRl9NQUNfRlJBTUVfRVZFTlQsICpQT1RMV0ZfTUFDX0ZSQU1FX0VWRU5UOworCisKK0tTVEFSVF9ST1VUSU5FIG90THdmRXZlbnRXb3JrZXJUaHJlYWQ7CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZkNvbXBsZXRlTkJMcygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gICAgICAgICAgICAgICAgRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIFBORVRfQlVGRkVSX0xJU1QgICAgICAgTmV0QnVmZmVyTGlzdHMsCisgICAgX0luXyBOVFNUQVRVUyAgICAgICAgICAgICAgIFN0YXR1cworICAgICk7CisKKy8vIFN0YXJ0cyB0aGUgZXZlbnQgcXVldWUgcHJvY2Vzc2luZworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmRXZlbnRQcm9jZXNzaW5nU3RhcnQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgSEFORExFICAgdGhyZWFkSGFuZGxlID0gTlVMTDsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIkZpbHRlcjogJXAsIFRpbWVJbmNyZW1lbnQgPSAldSIsIHBGaWx0ZXIsIEtlUXVlcnlUaW1lSW5jcmVtZW50KCkpOworICAgIAorICAgIHBGaWx0ZXItPk5leHRBbGFybVRpY2tDb3VudC5RdWFkUGFydCA9IDA7CisKKyAgICBOVF9BU1NFUlQocEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWQgPT0gTlVMTCk7CisgICAgaWYgKHBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkICE9IE5VTEwpCisgICAgeworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfQUxSRUFEWV9SRUdJU1RFUkVEOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSB0byByZXNldCB0aGUgbmVjZXNzYXJ5IGV2ZW50cworICAgIEtlUmVzZXRFdmVudCgmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRTdG9wRXZlbnQpOworICAgIEtlUmVzZXRFdmVudCgmcEZpbHRlci0+U2VuZE5ldEJ1ZmZlckxpc3RDb21wbGV0ZSk7CisgICAgS2VSZXNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZEVuZXJneVNjYW5Db21wbGV0ZSk7CisKKyAgICAvLyBTdGFydCB0aGUgd29ya2VyIHRocmVhZAorICAgIHN0YXR1cyA9IFBzQ3JlYXRlU3lzdGVtVGhyZWFkKAorICAgICAgICAgICAgICAgICZ0aHJlYWRIYW5kbGUsICAgICAgICAgICAgICAgICAgLy8gVGhyZWFkSGFuZGxlCisgICAgICAgICAgICAgICAgVEhSRUFEX0FMTF9BQ0NFU1MsICAgICAgICAgICAgICAvLyBEZXNpcmVkQWNjZXNzCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3RBdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzSGFuZGxlCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGllbnRJZAorICAgICAgICAgICAgICAgIG90THdmRXZlbnRXb3JrZXJUaHJlYWQsICAgICAgICAgLy8gU3RhcnRSb3V0aW5lCisgICAgICAgICAgICAgICAgcEZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydENvbnRleHQKKyAgICAgICAgICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJQc0NyZWF0ZVN5c3RlbVRocmVhZCBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gR3JhYiB0aGUgb2JqZWN0IHJlZmVyZW5jZSB0byB0aGUgd29ya2VyIHRocmVhZAorICAgIHN0YXR1cyA9IE9iUmVmZXJlbmNlT2JqZWN0QnlIYW5kbGUoCisgICAgICAgICAgICAgICAgdGhyZWFkSGFuZGxlLAorICAgICAgICAgICAgICAgIFRIUkVBRF9BTExfQUNDRVNTLAorICAgICAgICAgICAgICAgICpQc1RocmVhZFR5cGUsCisgICAgICAgICAgICAgICAgS2VybmVsTW9kZSwKKyAgICAgICAgICAgICAgICAmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWQsCisgICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgICk7CisgICAgaWYgKCFOVF9WRVJJRllNU0coIk9iUmVmZXJlbmNlT2JqZWN0QnlIYW5kbGUgY2FuJ3QgZmFpbCB3aXRoIGEgdmFsaWQga2VybmVsIGhhbmRsZSIsIE5UX1NVQ0NFU1Moc3RhdHVzKSkpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIk9iUmVmZXJlbmNlT2JqZWN0QnlIYW5kbGUgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFN0b3BFdmVudCwgSU9fTk9fSU5DUkVNRU5ULCBGQUxTRSk7CisgICAgfQorCisgICAgWndDbG9zZSh0aHJlYWRIYW5kbGUpOworCitlcnJvcjoKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgRXhTZXRUaW1lclJlc29sdXRpb24oMCwgRkFMU0UpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvLyBTdG9wcyB0aGUgZXZlbnQgcXVldWUgcHJvY2Vzc2luZworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdTdG9wKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyCisgICAgKQoreworICAgIFBMSVNUX0VOVFJZIExpbmsgPSBOVUxMOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyOiAlcCIsIHBGaWx0ZXIpOworCisgICAgLy8gQnkgdGhpcyBwb2ludCwgd2UgaGF2ZSBkaXNhYmxlZCB0aGUgRGF0YSBQYXRoLCBzbyBubyBtb3JlIAorICAgIC8vIE5CTHMgc2hvdWxkIGJlIHF1ZXVlZCB1cC4KKworICAgIC8vIENsZWFuIHVwIHdvcmtlciB0aHJlYWQKKyAgICBpZiAocEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWQpCisgICAgeworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiU3RvcHBpbmcgZXZlbnQgcHJvY2Vzc2luZyB3b3JrZXIgdGhyZWFkIGFuZCB3YWl0aW5nIGZvciBpdCB0byBjb21wbGV0ZS4iKTsKKworICAgICAgICAvLyBTZW5kIGV2ZW50IHRvIHNodXRkb3duIHdvcmtlciB0aHJlYWQKKyAgICAgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRTdG9wRXZlbnQsIDAsIEZBTFNFKTsKKworICAgICAgICAvLyBXYWl0IGZvciB3b3JrZXIgdGhyZWFkIHRvIGZpbmlzaAorICAgICAgICBLZVdhaXRGb3JTaW5nbGVPYmplY3QoCisgICAgICAgICAgICBwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZCwKKyAgICAgICAgICAgIEV4ZWN1dGl2ZSwKKyAgICAgICAgICAgIEtlcm5lbE1vZGUsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICk7CisKKyAgICAgICAgLy8gRnJlZSB3b3JrZXIgdGhyZWFkCisgICAgICAgIE9iRGVyZWZlcmVuY2VPYmplY3QocEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWQpOworICAgICAgICBwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZCA9IE5VTEw7CisKKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkV2ZW50IHByb2Nlc3Npbmcgd29ya2VyIHRocmVhZCBjbGVhbmVkIHVwLiIpOworICAgIH0KKworICAgIC8vIENsZWFuIHVwIGFueSBsZWZ0IG92ZXIgZXZlbnRzCisgICAgaWYgKHBGaWx0ZXItPkFkZHJlc3NDaGFuZ2VzSGVhZC5GbGluaykKKyAgICB7CisgICAgICAgIExpbmsgPSBwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlc0hlYWQuRmxpbms7CisgICAgICAgIHdoaWxlIChMaW5rICE9ICZwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlc0hlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFBPVExXRl9BRERSX0VWRU5UIEV2ZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfQUREUl9FVkVOVCwgTGluayk7CisgICAgICAgICAgICBMaW5rID0gTGluay0+Rmxpbms7CisKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZXZlbnQKKyAgICAgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENsZWFuIHVwIGFueSBsZWZ0IG92ZXIgZXZlbnRzCisgICAgaWYgKHBGaWx0ZXItPk5CTHNIZWFkLkZsaW5rKQorICAgIHsKKyAgICAgICAgTGluayA9IHBGaWx0ZXItPk5CTHNIZWFkLkZsaW5rOworICAgICAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+TkJMc0hlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFBPVExXRl9OQkxfRVZFTlQgRXZlbnQgPSBDT05UQUlOSU5HX1JFQ09SRChMaW5rLCBPVExXRl9OQkxfRVZFTlQsIExpbmspOworICAgICAgICAgICAgTGluayA9IExpbmstPkZsaW5rOworCisgICAgICAgICAgICBvdEx3ZkNvbXBsZXRlTkJMcyhwRmlsdGVyLCBGQUxTRSwgRXZlbnQtPk5ldEJ1ZmZlckxpc3RzLCBTVEFUVVNfQ0FOQ0VMTEVEKTsKKworICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBldmVudAorICAgICAgICAgICAgTmRpc0ZyZWVNZW1vcnkoRXZlbnQsIDAsIDApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2xlYW4gdXAgYW55IGxlZnQgb3ZlciBldmVudHMKKyAgICBpZiAocEZpbHRlci0+TWFjRnJhbWVzSGVhZC5GbGluaykKKyAgICB7CisgICAgICAgIExpbmsgPSBwRmlsdGVyLT5NYWNGcmFtZXNIZWFkLkZsaW5rOworICAgICAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+TWFjRnJhbWVzSGVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgUE9UTFdGX01BQ19GUkFNRV9FVkVOVCBFdmVudCA9IENPTlRBSU5JTkdfUkVDT1JEKExpbmssIE9UTFdGX01BQ19GUkFNRV9FVkVOVCwgTGluayk7CisgICAgICAgICAgICBMaW5rID0gTGluay0+Rmxpbms7CisKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZXZlbnQKKyAgICAgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJlaW5pdGlhbGl6ZSB0aGUgbGlzdCBoZWFkCisgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlc0hlYWQpOworICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+TkJMc0hlYWQpOworICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+TWFjRnJhbWVzSGVhZCk7CisgICAgCisgICAgaWYgKHBGaWx0ZXItPkV2ZW50SXJwTGlzdEhlYWQuRmxpbmspCisgICAgeworICAgICAgICBGSUxURVJfQUNRVUlSRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBGQUxTRSk7CisKKyAgICAgICAgLy8gQ2xlYW4gdXAgYW55IGxlZnQgb3ZlciBJUlBzCisgICAgICAgIExpbmsgPSBwRmlsdGVyLT5FdmVudElycExpc3RIZWFkLkZsaW5rOworICAgICAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+RXZlbnRJcnBMaXN0SGVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgUElSUCBJcnAgPSBDT05UQUlOSU5HX1JFQ09SRChMaW5rLCBJUlAsIFRhaWwuT3ZlcmxheS5MaXN0RW50cnkpOworICAgICAgICAgICAgTGluayA9IExpbmstPkZsaW5rOworICAgICAgICAKKyAgICAgICAgICAgIC8vIEJlZm9yZSB3ZSBhcmUgYWxsb3dlZCB0byBjb21wbGV0ZSB0aGUgcGVuZGluZyBJUlAsIHdlIG11c3QgcmVtb3ZlIHRoZSBjYW5jZWwgcm91dGluZQorICAgICAgICAgICAgS0lSUUwgaXJxbDsKKyAgICAgICAgICAgIElvQWNxdWlyZUNhbmNlbFNwaW5Mb2NrKCZpcnFsKTsKKyAgICAgICAgICAgIElvU2V0Q2FuY2VsUm91dGluZShJcnAsIE5VTEwpOworICAgICAgICAgICAgSW9SZWxlYXNlQ2FuY2VsU3BpbkxvY2soaXJxbCk7CisKKyAgICAgICAgICAgIElycC0+SW9TdGF0dXMuU3RhdHVzID0gU1RBVFVTX0NBTkNFTExFRDsKKyAgICAgICAgICAgIElycC0+SW9TdGF0dXMuSW5mb3JtYXRpb24gPSAwOworICAgICAgICAgICAgSW9Db21wbGV0ZVJlcXVlc3QoSXJwLCBJT19OT19JTkNSRU1FTlQpOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIFJlaW5pdGlhbGl6ZSB0aGUgbGlzdCBoZWFkCisgICAgICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+RXZlbnRJcnBMaXN0SGVhZCk7CisgICAgCisgICAgICAgIEZJTFRFUl9SRUxFQVNFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIEZBTFNFKTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKKy8vIFVwZGF0ZXMgdGhlIHdhaXQgdGltZSBmb3IgdGhlIGFsYXJtCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3V2FpdFRpbWUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICAgICAgICAgIHdhaXRUaW1lCisgICAgKQoreworICAgIEJPT0xFQU4gRmlyZVVwZGF0ZUV2ZW50ID0gVFJVRTsKKyAgICAKKyAgICAvLyBDYW5jZWwgcHJldmlvdXMgdGltZXIKKyAgICBpZiAoRXhDYW5jZWxUaW1lcihwRmlsdGVyLT5FdmVudEhpZ2hQcmVjaXNpb25UaW1lciwgTlVMTCkpCisgICAgeworICAgICAgICBwRmlsdGVyLT5FdmVudFRpbWVyU3RhdGUgPSBPVF9FVkVOVF9USU1FUl9OT1RfUlVOTklORzsKKyAgICB9CisKKyAgICBpZiAod2FpdFRpbWUgPT0gKFVMT05HKSgtMSkpCisgICAgeworICAgICAgICAvLyBJZ25vcmUgaWYgd2UgYXJlIGFscmVhZHkgc3RvcHBlZAorICAgICAgICBpZiAocEZpbHRlci0+TmV4dEFsYXJtVGlja0NvdW50LlF1YWRQYXJ0ID09IDApIHJldHVybjsKKyAgICAgICAgcEZpbHRlci0+TmV4dEFsYXJtVGlja0NvdW50LlF1YWRQYXJ0ID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHdhaXRUaW1lID09IDApCisgICAgICAgIHsKKyNpZmRlZiBERUJVR19USU1JTkcKKyAgICAgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJFdmVudCBwcm9jZXNzaW5nIHVwZGF0aW5nIHRvIGZpcmUgdGltZXIgaW1tZWRpYXRlbHkuIik7CisjZW5kaWYKKyAgICAgICAgICAgIHBGaWx0ZXItPkV2ZW50VGltZXJTdGF0ZSA9IE9UX0VWRU5UX1RJTUVSX0ZJUkVEOworICAgICAgICAgICAgcEZpbHRlci0+TmV4dEFsYXJtVGlja0NvdW50LlF1YWRQYXJ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh3YWl0VGltZSAqIDEwMDAwbGwgPCAoS2VRdWVyeVRpbWVJbmNyZW1lbnQoKSAtIDMwMDAwKSkKKyAgICAgICAgeworI2lmZGVmIERFQlVHX1RJTUlORworICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkV2ZW50IHByb2Nlc3Npbmcgc3RhcnRpbmcgaGlnaCBwcmVjaXNpb24gdGltZXIgZm9yICV1IG1zLiIsIHdhaXRUaW1lKTsKKyNlbmRpZgorICAgICAgICAgICAgcEZpbHRlci0+RXZlbnRUaW1lclN0YXRlID0gT1RfRVZFTlRfVElNRVJfUlVOTklORzsKKyAgICAgICAgICAgIHBGaWx0ZXItPk5leHRBbGFybVRpY2tDb3VudC5RdWFkUGFydCA9IDA7CisgICAgICAgICAgICBGaXJlVXBkYXRlRXZlbnQgPSBGQUxTRTsKKyAgICAgICAgICAgIEV4U2V0VGltZXIocEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIsIHdhaXRUaW1lICogLTEwMDAwbGwsIDAsIE5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworCisgICAgICAgICAgICBVTE9ORyBUaWNrV2FpdFRpbWUgPSAod2FpdFRpbWUgKiAxMDAwMGxsKSAvIEtlUXVlcnlUaW1lSW5jcmVtZW50KCk7CisgICAgICAgICAgICBpZiAoVGlja1dhaXRUaW1lID09IDApIFRpY2tXYWl0VGltZSA9IDE7CisjaWZkZWYgREVCVUdfVElNSU5HCisgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiRXZlbnQgcHJvY2Vzc2luZyB1cGRhdGluZyB3YWl0IHRpY2tzIHRvICV1LiIsIFRpY2tXYWl0VGltZSk7CisjZW5kaWYKKworICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lIHRvIGJlICd3YWl0VGltZScgbXMgZnJvbSAnbm93Jywgc2F2ZWQgaW4gVGlja0NvdW50cworICAgICAgICAgICAgS2VRdWVyeVRpY2tDb3VudCgmcEZpbHRlci0+TmV4dEFsYXJtVGlja0NvdW50KTsKKyAgICAgICAgICAgIHBGaWx0ZXItPk5leHRBbGFybVRpY2tDb3VudC5RdWFkUGFydCArPSBUaWNrV2FpdFRpbWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gSW5kaWNhdGUgZXZlbnQgdG8gd29ya2VyIHRocmVhZCB0byB1cGRhdGUgdGhlIHdhaXQgdGltZQorICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkV2FpdFRpbWVVcGRhdGVkLCAwLCBGQUxTRSk7Cit9CisKKy8vIEluZGljYXRlcyBhbm90aGVyIHRhc2tsZXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3VGFza2xldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlcgorICAgICkKK3sKKyAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NUYXNrbGV0cywgMCwgRkFMU0UpOworfQorCisvLyBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIGFuIEFkZHJlc3MgY2hhbmdlIHRvIHByb2Nlc3MKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVBZGRyZXNzQ2hhbmdlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gTUlCX05PVElGSUNBVElPTl9UWVBFICBOb3RpZmljYXRpb25UeXBlLAorICAgIF9Jbl8gUElONl9BRERSICAgICAgICAgICAgICBwQWRkcgorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXI6ICVwIiwgcEZpbHRlcik7CisKKyAgICBOVF9BU1NFUlQocEZpbHRlci0+RGV2aWNlU3RhdHVzID09IE9UTFdGX0RFVklDRV9TVEFUVVNfUkFESU9fTU9ERSk7CisKKyAgICBQT1RMV0ZfQUREUl9FVkVOVCBFdmVudCA9IEZJTFRFUl9BTExPQ19NRU0ocEZpbHRlci0+RmlsdGVySGFuZGxlLCBzaXplb2YoT1RMV0ZfQUREUl9FVkVOVCkpOworICAgIGlmIChFdmVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgTG9nV2FybmluZyhEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBhbGxvYyBuZXcgT1RMV0ZfQUREUl9FVkVOVCIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFdmVudC0+Tm90aWZpY2F0aW9uVHlwZSA9IE5vdGlmaWNhdGlvblR5cGU7CisgICAgICAgIEV2ZW50LT5BZGRyZXNzID0gKnBBZGRyOworCisgICAgICAgIC8vIEFkZCB0aGUgZXZlbnQgdG8gdGhlIHF1ZXVlCisgICAgICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJnBGaWx0ZXItPkV2ZW50c0xvY2spOworICAgICAgICBJbnNlcnRUYWlsTGlzdCgmcEZpbHRlci0+QWRkcmVzc0NoYW5nZXNIZWFkLCAmRXZlbnQtPkxpbmspOworICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5FdmVudHNMb2NrKTsKKworICAgICAgICAvLyBTZXQgdGhlIGV2ZW50IHRvIGluZGljYXRlIHdlIGhhdmUgYSBuZXcgYWRkcmVzcyB0byBwcm9jZXNzCisgICAgICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0FkZHJlc3NDaGFuZ2VzLCAwLCBGQUxTRSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCisvLyBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIGEgTmV0QnVmZmVyTGlzdHMgdG8gcHJvY2VzcworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVOZXdOZXRCdWZmZXJMaXN0cygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gICAgICAgICAgICAgICAgRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIFBORVRfQlVGRkVSX0xJU1QgICAgICAgTmV0QnVmZmVyTGlzdHMKKyAgICApCit7CisgICAgUE9UTFdGX05CTF9FVkVOVCBFdmVudCA9IEZJTFRFUl9BTExPQ19NRU0ocEZpbHRlci0+RmlsdGVySGFuZGxlLCBzaXplb2YoT1RMV0ZfTkJMX0VWRU5UKSk7CisgICAgaWYgKEV2ZW50ID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9EQVRBX1BBVEgsICJGYWlsZWQgdG8gYWxsb2MgbmV3IE9UTFdGX05CTF9FVkVOVCIpOworICAgICAgICBvdEx3ZkNvbXBsZXRlTkJMcyhwRmlsdGVyLCBEaXNwYXRjaExldmVsLCBOZXRCdWZmZXJMaXN0cywgU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXZlbnQtPk5ldEJ1ZmZlckxpc3RzID0gTmV0QnVmZmVyTGlzdHM7CisKKyAgICAvLyBBZGQgdGhlIGV2ZW50IHRvIHRoZSBxdWV1ZQorICAgIEZJTFRFUl9BQ1FVSVJFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIERpc3BhdGNoTGV2ZWwpOworICAgIEluc2VydFRhaWxMaXN0KCZwRmlsdGVyLT5OQkxzSGVhZCwgJkV2ZW50LT5MaW5rKTsKKyAgICBGSUxURVJfUkVMRUFTRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBEaXNwYXRjaExldmVsKTsKKyAgICAKKyAgICAvLyBTZXQgdGhlIGV2ZW50IHRvIGluZGljYXRlIHdlIGhhdmUgYSBuZXcgTkJMIHRvIHByb2Nlc3MKKyAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NOQkxzLCAwLCBGQUxTRSk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3TWFjRnJhbWVDb21tYW5kKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiAgICAgICAgICAgICAgICBEaXNwYXRjaExldmVsLAorICAgIF9Jbl9yZWFkc19ieXRlc18oQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgIGNvbnN0IHVpbnQ4X3QqICAgICAgICAgQnVmZmVyLAorICAgIF9Jbl8gdWludDhfdCAgICAgICAgICAgICAgICBCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgUE9UTFdGX01BQ19GUkFNRV9FVkVOVCBFdmVudCA9IEZJTFRFUl9BTExPQ19NRU0ocEZpbHRlci0+RmlsdGVySGFuZGxlLCBGSUVMRF9PRkZTRVQoT1RMV0ZfTUFDX0ZSQU1FX0VWRU5ULCBCdWZmZXIpICsgQnVmZmVyTGVuZ3RoKTsKKyAgICBpZiAoRXZlbnQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RBVEFfUEFUSCwgIkZhaWxlZCB0byBhbGxvYyBuZXcgT1RMV0ZfTUFDX0ZSQU1FX0VWRU5UIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFdmVudC0+QnVmZmVyTGVuZ3RoID0gQnVmZmVyTGVuZ3RoOworICAgIG1lbWNweShFdmVudC0+QnVmZmVyLCBCdWZmZXIsIEJ1ZmZlckxlbmd0aCk7CisKKyAgICAvLyBBZGQgdGhlIGV2ZW50IHRvIHRoZSBxdWV1ZQorICAgIEZJTFRFUl9BQ1FVSVJFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIERpc3BhdGNoTGV2ZWwpOworICAgIEluc2VydFRhaWxMaXN0KCZwRmlsdGVyLT5NYWNGcmFtZXNIZWFkLCAmRXZlbnQtPkxpbmspOworICAgIEZJTFRFUl9SRUxFQVNFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIERpc3BhdGNoTGV2ZWwpOworICAgIAorICAgIC8vIFNldCB0aGUgZXZlbnQgdG8gaW5kaWNhdGUgd2UgaGF2ZSBhIG5ldyBNYWMgRnJhbWUgdG8gcHJvY2VzcworICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc01hY0ZyYW1lcywgMCwgRkFMU0UpOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdJbmRpY2F0ZU5ldEJ1ZmZlckxpc3RzQ2FuY2VsbGVkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUFZPSUQgICAgICAgICAgICAgICAgICBDYW5jZWxJZAorICAgICkKK3sKKyAgICBQTElTVF9FTlRSWSBMaW5rID0gTlVMTDsKKyAgICBMSVNUX0VOVFJZIENhbmNlbExpc3QgPSB7MH07CisgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZDYW5jZWxMaXN0KTsKKyAgICAKKyAgICAvLyBCdWlsZCB1cCBhIGxvY2FsIGxpc3Qgb2YgYWxsIE5CTHMgdGhhdCBuZWVkIHRvIGJlIGNhbmNlbGxlZAorICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJnBGaWx0ZXItPkV2ZW50c0xvY2spOworICAgIExpbmsgPSBwRmlsdGVyLT5OQkxzSGVhZC5GbGluazsKKyAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+TkJMc0hlYWQpCisgICAgeworICAgICAgICBQT1RMV0ZfTkJMX0VWRU5UIEV2ZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfTkJMX0VWRU5ULCBMaW5rKTsKKyAgICAgICAgTGluayA9IExpbmstPkZsaW5rOworCisgICAgICAgIGlmIChORElTX0dFVF9ORVRfQlVGRkVSX0xJU1RfQ0FOQ0VMX0lEKEV2ZW50LT5OZXRCdWZmZXJMaXN0cykgPT0gQ2FuY2VsSWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlbW92ZUVudHJ5TGlzdCgmRXZlbnQtPkxpbmspOworICAgICAgICAgICAgSW5zZXJ0VGFpbExpc3QoJkNhbmNlbExpc3QsICZFdmVudC0+TGluayk7CisgICAgICAgIH0KKyAgICB9CisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmcEZpbHRlci0+RXZlbnRzTG9jayk7CisgICAgCisgICAgLy8gQ2FuY2VsIGFsbCB0aGUgTkJMcworICAgIExpbmsgPSBDYW5jZWxMaXN0LkZsaW5rOworICAgIHdoaWxlIChMaW5rICE9ICZDYW5jZWxMaXN0KQorICAgIHsKKyAgICAgICAgUE9UTFdGX05CTF9FVkVOVCBFdmVudCA9IENPTlRBSU5JTkdfUkVDT1JEKExpbmssIE9UTFdGX05CTF9FVkVOVCwgTGluayk7CisgICAgICAgIExpbmsgPSBMaW5rLT5GbGluazsKKworICAgICAgICBvdEx3ZkNvbXBsZXRlTkJMcyhwRmlsdGVyLCBGQUxTRSwgRXZlbnQtPk5ldEJ1ZmZlckxpc3RzLCBTVEFUVVNfQ0FOQ0VMTEVEKTsKKworICAgICAgICAvLyBEZWxldGUgdGhlIGV2ZW50CisgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICB9Cit9CisKKy8vIENvbXBsZXRlcyB0aGUgTmV0QnVmZmVyTGlzdHMgaW4gdGhlIGV2ZW50CitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZDb21wbGV0ZU5CTHMoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOICAgICAgICAgICAgICAgIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBQTkVUX0JVRkZFUl9MSVNUICAgICAgIE5ldEJ1ZmZlckxpc3RzLAorICAgIF9Jbl8gTlRTVEFUVVMgICAgICAgICAgICAgICBTdGF0dXMKKyAgICApCit7CisgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAib3RMd2ZDb21wbGV0ZU5CTHMsIEZpbHRlcjolcCwgTkJMOiVwLCBTdGF0dXM6JSFTVEFUVVMhIiwgcEZpbHRlciwgTmV0QnVmZmVyTGlzdHMsIFN0YXR1cyk7CisKKyAgICAvLyBTZXQgdGhlIHN0YXR1cyBmb3IgYWxsIHRoZSBOQkxzCisgICAgUE5FVF9CVUZGRVJfTElTVCBDdXJyTmJsID0gTmV0QnVmZmVyTGlzdHM7CisgICAgd2hpbGUgKEN1cnJOYmwpCisgICAgeworICAgICAgICBORVRfQlVGRkVSX0xJU1RfU1RBVFVTKEN1cnJOYmwpID0gU3RhdHVzOworICAgICAgICBDdXJyTmJsID0gTkVUX0JVRkZFUl9MSVNUX05FWFRfTkJMKEN1cnJOYmwpOworICAgIH0KKworICAgIE5UX0FTU0VSVChOZXRCdWZmZXJMaXN0cyk7CisKKyAgICAvLyBJbmRpY2F0ZSB0aGUgY29tcGxldGlvbgorICAgIE5kaXNGU2VuZE5ldEJ1ZmZlckxpc3RzQ29tcGxldGUoCisgICAgICAgIHBGaWx0ZXItPkZpbHRlckhhbmRsZSwKKyAgICAgICAgTmV0QnVmZmVyTGlzdHMsCisgICAgICAgIERpc3BhdGNoTGV2ZWwgPyBORElTX1NFTkRfQ09NUExFVEVfRkxBR1NfRElTUEFUQ0hfTEVWRUwgOiAwCisgICAgICAgICk7Cit9CisKK19GdW5jdGlvbl9jbGFzc18oRFJJVkVSX0NBTkNFTCkKK19SZXF1aXJlc19sb2NrX2hlbGRfKF9HbG9iYWxfY2FuY2VsX3NwaW5fbG9ja18pCitfUmVsZWFzZXNfbG9ja18oX0dsb2JhbF9jYW5jZWxfc3Bpbl9sb2NrXykKK19JUlFMX3JlcXVpcmVzX21pbl8oRElTUEFUQ0hfTEVWRUwpCitfSVJRTF9yZXF1aXJlc18oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0NhbmNlbElycCgKKyAgICBfSW5vdXRfIHN0cnVjdCBfREVWSUNFX09CSkVDVCAqRGV2aWNlT2JqZWN0LAorICAgIF9Jbm91dF8gX0lSUUxfdXNlc19jYW5jZWxfIHN0cnVjdCBfSVJQICpJcnAKKyAgICApCit7CisgICAgUElSUCBJcnBUb0NhbmNlbCA9IE5VTEw7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKERldmljZU9iamVjdCk7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0lPQ1RMLCAiSXJwPSVwIiwgSXJwKTsKKworICAgIElvUmVsZWFzZUNhbmNlbFNwaW5Mb2NrKElycC0+Q2FuY2VsSXJxbCk7CisKKyAgICAvLworICAgIC8vIFNlYXJjaCBmb3IgYSBxdWV1ZWQgdXAgSXJwIGFuZCBjYW5jZWwgaXQgaWYgd2UgZmluZCBpdAorICAgIC8vCisKKyAgICBOZGlzQWNxdWlyZVNwaW5Mb2NrKCZGaWx0ZXJMaXN0TG9jayk7CisKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBmaWx0ZXIgaW5zdGFuY2UKKyAgICBmb3IgKFBMSVNUX0VOVFJZIExpbmsgPSBGaWx0ZXJNb2R1bGVMaXN0LkZsaW5rOyBMaW5rICE9ICZGaWx0ZXJNb2R1bGVMaXN0OyBMaW5rID0gTGluay0+RmxpbmspCisgICAgeworICAgICAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBDT05UQUlOSU5HX1JFQ09SRChMaW5rLCBNU19GSUxURVIsIEZpbHRlck1vZHVsZUxpbmspOworICAgICAgICAgICAgCisgICAgICAgIEZJTFRFUl9BQ1FVSVJFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIFRSVUUpOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBxdWV1ZWQgSVJQcyBmb3IgdGhlIGZpbHRlcgorICAgICAgICBQTElTVF9FTlRSWSBJcnBMaW5rID0gcEZpbHRlci0+RXZlbnRJcnBMaXN0SGVhZC5GbGluazsKKyAgICAgICAgd2hpbGUgKElycExpbmsgIT0gJnBGaWx0ZXItPkV2ZW50SXJwTGlzdEhlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFBJUlAgUXVldWVkSXJwID0gQ09OVEFJTklOR19SRUNPUkQoSXJwTGluaywgSVJQLCBUYWlsLk92ZXJsYXkuTGlzdEVudHJ5KTsKKyAgICAgICAgICAgIElycExpbmsgPSBJcnBMaW5rLT5GbGluazsKKworICAgICAgICAgICAgLy8gSWYgd2UgZmluZCBpdCwgcmVtb3ZlIGZyb20gdGhlIGFuZCBwcmVwYXJlIHRvIGNvbXBsZXRlIGl0CisgICAgICAgICAgICBpZiAoUXVldWVkSXJwID09IElycCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSZW1vdmVFbnRyeUxpc3QoJlF1ZXVlZElycC0+VGFpbC5PdmVybGF5Lkxpc3RFbnRyeSk7CisgICAgICAgICAgICAgICAgSXJwVG9DYW5jZWwgPSBRdWV1ZWRJcnA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBGSUxURVJfUkVMRUFTRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBUUlVFKTsKKworICAgICAgICBpZiAoSXJwVG9DYW5jZWwpIGJyZWFrOworICAgIH0KKworICAgIE5kaXNSZWxlYXNlU3BpbkxvY2soJkZpbHRlckxpc3RMb2NrKTsKKworICAgIGlmIChJcnBUb0NhbmNlbCkKKyAgICB7CisgICAgICAgIElycFRvQ2FuY2VsLT5Jb1N0YXR1cy5TdGF0dXMgPSBTVEFUVVNfQ0FOQ0VMTEVEOworICAgICAgICBJcnBUb0NhbmNlbC0+SW9TdGF0dXMuSW5mb3JtYXRpb24gPSAwOworICAgICAgICBJb0NvbXBsZXRlUmVxdWVzdChJcnBUb0NhbmNlbCwgSU9fTk9fSU5DUkVNRU5UKTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfSU9DVEwpOworfQorCisvLyBRdWV1ZXMgYW4gSXJwIGZvciBwcm9jZXNzaW5nCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlSXJwKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICBJcnAKKyAgICApCit7CisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9JT0NUTCwgIklycD0lcCIsIElycCk7CisKKyAgICAvLyBNYXJrIHRoZSBJcnAgYXMgcGVuZGluZworICAgIElvTWFya0lycFBlbmRpbmcoSXJwKTsKKyAgICAKKyAgICBGSUxURVJfQUNRVUlSRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBGQUxTRSk7CisKKyAgICAvLyBTZXQgdGhlIGNhbmNlbCByb3V0aW5lIGZvciB0aGUgSXJwCisgICAgSW9TZXRDYW5jZWxSb3V0aW5lKElycCwgb3RMd2ZFdmVudFByb2Nlc3NpbmdDYW5jZWxJcnApOworCisgICAgLy8gUXVldWUgdGhlIElycCB1cCBmb3IgcHJvY2Vzc2luZworICAgIEluc2VydFRhaWxMaXN0KCZwRmlsdGVyLT5FdmVudElycExpc3RIZWFkLCAmSXJwLT5UYWlsLk92ZXJsYXkuTGlzdEVudHJ5KTsKKworICAgIEZJTFRFUl9SRUxFQVNFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIEZBTFNFKTsKKyAgICAKKyAgICAvLyBTZXQgdGhlIGV2ZW50IHRvIGluZGljYXRlIHdlIGhhdmUgYW4gSXJwIHRvIHByb2Nlc3MKKyAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NJcnAsIDAsIEZBTFNFKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9JT0NUTCk7Cit9CisKKy8vIFByb2Nlc3NlcyB0aGUgbmV4dCBPcGVuVGhyZWFkIElvQ3RsIElycAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdOZXh0SXJwKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIFBJUlAgSXJwID0gTlVMTDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfSU9DVEwpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIC8vIFJlc2V0IHBvaW50ZXIKKyAgICAgICAgSXJwID0gTlVMTDsKKworICAgICAgICAvLyBHZXQgdGhlIG5leHQgSXJwIGluIHRoZSBxdWV1ZQorICAgICAgICBGSUxURVJfQUNRVUlSRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBGQUxTRSk7CisgICAgICAgIGlmICghSXNMaXN0RW1wdHkoJnBGaWx0ZXItPkV2ZW50SXJwTGlzdEhlYWQpKQorICAgICAgICB7CisgICAgICAgICAgICBQTElTVF9FTlRSWSBMaW5rID0gUmVtb3ZlSGVhZExpc3QoJnBGaWx0ZXItPkV2ZW50SXJwTGlzdEhlYWQpOworICAgICAgICAgICAgSXJwID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgSVJQLCBUYWlsLk92ZXJsYXkuTGlzdEVudHJ5KTsKKworICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGNhbmNlbCByb3V0aW5lIHNpbmNlIHdlIGFyZSBwcm9jZXNzaW5nIHRoaXMgbm93CisgICAgICAgICAgICBLSVJRTCBpcnFsOworICAgICAgICAgICAgSW9BY3F1aXJlQ2FuY2VsU3BpbkxvY2soJmlycWwpOworICAgICAgICAgICAgSW9TZXRDYW5jZWxSb3V0aW5lKElycCwgTlVMTCk7CisgICAgICAgICAgICBJb1JlbGVhc2VDYW5jZWxTcGluTG9jayhpcnFsKTsKKyAgICAgICAgfQorICAgICAgICBGSUxURVJfUkVMRUFTRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBGQUxTRSk7CisKKyAgICAgICAgaWYgKElycCkKKyAgICAgICAgeyAgICAKKyAgICAgICAgICAgIG90THdmQ29tcGxldGVPcGVuVGhyZWFkSXJwKHBGaWx0ZXIsIElycCk7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKElycCk7CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfSU9DVEwpOworfQorCisvLyBJbmRpY2F0ZXMgYSBlbmVyZ3kgc2NhbiB3YXMgY29tcGxldGVkCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdJbmRpY2F0ZUVuZXJneVNjYW5SZXN1bHQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBDSEFSICAgICAgIE1heFJzc2kKKyAgICApCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9JT0NUTCk7CisKKyAgICAvLyBDYWNoZSB0aGUgUnNzaQorICAgIHBGaWx0ZXItPm90TGFzdEVuZXJneVNjYW5NYXhSc3NpID0gTWF4UnNzaTsKKyAgICAKKyAgICAvLyBTZXQgdGhlIGV2ZW50IHRvIGluZGljYXRlIHdlIHNob3VsZCBpbmRpY2F0ZSB0aGUgc3RhdGUgYmFjayB0byBPcGVuVGhyZWFkCisgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRFbmVyZ3lTY2FuQ29tcGxldGUsIDAsIEZBTFNFKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9JT0NUTCk7Cit9CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjb3B5IGRhdGEgb3V0IG9mIGEgTkVUX0JVRkZFUgorX19mb3JjZWlubGluZQorTlRTVEFUVVMKK0NvcHlEYXRhQnVmZmVyKAorICAgIF9Jbl8gUE5FVF9CVUZGRVIgICAgICAgICAgICBOZXRCdWZmZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICAgICAgICAgIFNpemUsCisgICAgX091dF93cml0ZXNfYnl0ZXNfYWxsXyhTaXplKSAKKyAgICAgICAgIFBWT0lEICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb24KKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICAvLyBSZWFkIHRoZSBkYXRhIG91dCBvZiB0aGUgTmV0QnVmZmVyCisgICAgUFZPSUQgbWVtID0gTmRpc0dldERhdGFCdWZmZXIoTmV0QnVmZmVyLCBTaXplLCBEZXN0aW5hdGlvbiwgMSwgMCk7CisgICAgaWYgKG1lbSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgTlRfQVNTRVJUKEZBTFNFKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gSWYgd2UgZ2V0IGEgZGlmZmVyZW50IG91dHB1dCBtZW1vcnkgYWRkcmVzcywgdGhlbiBjb3B5IHRoYXQgZGF0YSB0byBEZXN0aW5hdGlvbjsKKyAgICAvLyBvdGhlcndpc2UsIGl0IHdhcyBhbHJlYWR5IGNvcGllZCB0aGVyZQorICAgIGlmIChtZW0gIT0gRGVzdGluYXRpb24pCisgICAgeworICAgICAgICBSdGxDb3B5TWVtb3J5KERlc3RpbmF0aW9uLCBtZW0sIFNpemUpOworICAgIH0KKworZXJyb3I6CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfRnVuY3Rpb25fY2xhc3NfKEVYVF9DQUxMQkFDSykKK19JUlFMX3JlcXVpcmVzXyhESVNQQVRDSF9MRVZFTCkKK19JUlFMX3JlcXVpcmVzX3NhbWVfCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ1RpbWVyKAorICAgIF9Jbl8gUEVYX1RJTUVSIFRpbWVyLAorICAgIF9Jbl9vcHRfIFBWT0lEIENvbnRleHQKKyAgICApCit7CisgICAgaWYgKENvbnRleHQgPT0gTlVMTCkgcmV0dXJuOworCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpQ29udGV4dDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKFRpbWVyKTsKKyAgICAKKyNpZmRlZiBERUJVR19USU1JTkcKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiRXZlbnQgcHJvY2Vzc2luZyBoaWdoIHByZWNpc2lvbiB0aW1lciBmaXJlZC4iKTsKKyNlbmRpZgorCisgICAgcEZpbHRlci0+RXZlbnRUaW1lclN0YXRlID0gT1RfRVZFTlRfVElNRVJfRklSRUQ7CisKKyAgICAvLyBJbmRpY2F0ZSBldmVudCB0byB3b3JrZXIgdGhyZWFkIHRvIHVwZGF0ZSB0aGUgd2FpdCB0aW1lCisgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRXYWl0VGltZVVwZGF0ZWQsIDAsIEZBTFNFKTsKK30KKworLy8gV29ya2VyIHRocmVhZCBmb3IgcHJvY2Vzc2luZyBhbGwgZXZlbnRzCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitvdEx3ZkV2ZW50V29ya2VyVGhyZWFkKAorICAgIFBWT0lEICAgQ29udGV4dAorICAgICkKK3sKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSAoUE1TX0ZJTFRFUilDb250ZXh0OworICAgIE5UX0FTU0VSVChwRmlsdGVyKTsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQS0VWRU5UIFdhaXRFdmVudHNbXSA9IAorICAgIHsgCisgICAgICAgICZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFN0b3BFdmVudCwKKyAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc05CTHMsCisgICAgICAgICZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NNYWNGcmFtZXMsCisgICAgICAgICZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFdhaXRUaW1lVXBkYXRlZCwKKyAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc1Rhc2tsZXRzLAorICAgICAgICAmcEZpbHRlci0+U2VuZE5ldEJ1ZmZlckxpc3RDb21wbGV0ZSwKKyAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0lycCwKKyAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0FkZHJlc3NDaGFuZ2VzLAorICAgICAgICAmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRFbmVyZ3lTY2FuQ29tcGxldGUKKyAgICB9OworCisgICAgS1dBSVRfQkxPQ0sgV2FpdEJsb2Nrc1tBUlJBWVNJWkUoV2FpdEV2ZW50cyldID0geyAwIH07CisKKyAgICAvLyBTcGFjZSB0byBwcm9jZXNzaW5nIGJ1ZmZlcnMKKyAgICBjb25zdCBVTE9ORyBNZXNzYWdlQnVmZmVyU2l6ZSA9IDEyODA7CisgICAgUFVDSEFSIE1lc3NhZ2VCdWZmZXIgPSBGSUxURVJfQUxMT0NfTUVNKHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgTWVzc2FnZUJ1ZmZlclNpemUpOworICAgIGlmIChNZXNzYWdlQnVmZmVyID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREFUQV9QQVRILCAiRmFpbGVkIHRvIGFsbG9jYXRlIDEyODAgYnl0ZXMgZm9yIE1lc3NhZ2VCdWZmZXIhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBERUJVR19BTExPQworICAgIC8vIEluaXRpYWxpemUgdGhlIGxpc3QgaGVhZCBmb3IgYWxsb2NhdGlvbnMKKyAgICBJbml0aWFsaXplTGlzdEhlYWQoJnBGaWx0ZXItPm90T3V0U3RhbmRpbmdBbGxvY2F0aW9ucyk7CisKKyAgICAvLyBDYWNoZSB0aGUgVGhyZWFkIElECisgICAgcEZpbHRlci0+b3RUaHJlYWRJZCA9IFBzR2V0Q3VycmVudFRocmVhZElkKCk7CisjZW5kaWYKKworICAgIC8vIEluaXRpYWxpemUgdGhlIHJhZGlvIGxheWVyCisgICAgb3RMd2ZSYWRpb0luaXQocEZpbHRlcik7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIG90SW5zdGFuY2UgYW5kIGFsbG9jYXRlIGl0CisgICAgcEZpbHRlci0+b3RJbnN0YW5jZVNpemUgPSAwOworICAgIChWT0lEKW90SW5zdGFuY2VJbml0KE5VTEwsICZwRmlsdGVyLT5vdEluc3RhbmNlU2l6ZSk7CisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPm90SW5zdGFuY2VTaXplICE9IDApOworCisgICAgLy8gQWRkIHNwYWNlIGZvciBhIHBvaW50ZXIgYmFjayB0byB0aGUgZmlsdGVyCisgICAgcEZpbHRlci0+b3RJbnN0YW5jZVNpemUgKz0gc2l6ZW9mKFBNU19GSUxURVIpOworCisgICAgLy8gQWxsb2NhdGUgdGhlIGJ1ZmZlcgorICAgIHBGaWx0ZXItPm90SW5zdGFuY2VCdWZmZXIgPSAoUFVDSEFSKUZJTFRFUl9BTExPQ19NRU0ocEZpbHRlci0+RmlsdGVySGFuZGxlLCAoVUxPTkcpcEZpbHRlci0+b3RJbnN0YW5jZVNpemUpOworICAgIGlmIChwRmlsdGVyID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGFsbG9jYXRlIG90SW5zdGFuY2UgYnVmZmVyLCAweCV4IGJ5dGVzIiwgKFVMT05HKXBGaWx0ZXItPm90SW5zdGFuY2VTaXplKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBSdGxaZXJvTWVtb3J5KHBGaWx0ZXItPm90SW5zdGFuY2VCdWZmZXIsIHBGaWx0ZXItPm90SW5zdGFuY2VTaXplKTsKKworICAgIC8vIFN0b3JlIHRoZSBwb2ludGVyIGFuZCBkZWNyZW1lbnQgdGhlIHNpemUKKyAgICBtZW1jcHkocEZpbHRlci0+b3RJbnN0YW5jZUJ1ZmZlciwgJnBGaWx0ZXIsIHNpemVvZihQTVNfRklMVEVSKSk7CisgICAgcEZpbHRlci0+b3RJbnN0YW5jZVNpemUgLT0gc2l6ZW9mKFBNU19GSUxURVIpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgT3BlblRocmVhZCBsaWJyYXJ5CisgICAgcEZpbHRlci0+b3RDYWNoZWRSb2xlID0gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ7CisgICAgcEZpbHRlci0+b3RDdHggPSBvdEluc3RhbmNlSW5pdChwRmlsdGVyLT5vdEluc3RhbmNlQnVmZmVyICsgc2l6ZW9mKFBNU19GSUxURVIpLCAmcEZpbHRlci0+b3RJbnN0YW5jZVNpemUpOworICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdEN0eCk7CisgICAgaWYgKHBGaWx0ZXItPm90Q3R4ID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIm90SW5zdGFuY2VJbml0IGZhaWxlZCwgb3RJbnN0YW5jZVNpemUgPSAldSBieXRlcyIsIChVTE9ORylwRmlsdGVyLT5vdEluc3RhbmNlU2l6ZSk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgb3VyIGhlbHBlciBmdW5jdGlvbiByZXR1cm5zIHRoZSByaWdodCBwb2ludGVyIGZvciB0aGUgZmlsdGVyLCBnaXZlbiB0aGUgb3BlbnRocmVhZCBpbnN0YW5jZQorICAgIE5UX0FTU0VSVChvdEN0eFRvRmlsdGVyKHBGaWx0ZXItPm90Q3R4KSA9PSBwRmlsdGVyKTsKKworICAgIC8vIERpc2FibGUgSWNtcCAocGluZykgaGFuZGxpbmcKKyAgICBvdEljbXA2U2V0RWNob0VuYWJsZWQocEZpbHRlci0+b3RDdHgsIEZBTFNFKTsKKworICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyB3aXRoIE9wZW5UaHJlYWQKKyAgICBvdFNldFN0YXRlQ2hhbmdlZENhbGxiYWNrKHBGaWx0ZXItPm90Q3R4LCBvdEx3ZlN0YXRlQ2hhbmdlZENhbGxiYWNrLCBwRmlsdGVyKTsKKyAgICBvdElwNlNldFJlY2VpdmVDYWxsYmFjayhwRmlsdGVyLT5vdEN0eCwgb3RMd2ZSZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjaywgcEZpbHRlcik7CisKKyAgICAvLyBRdWVyeSB0aGUgY3VycmVudCBhZGRyZXNzZXMgZnJvbSBUQ1BJUCBhbmQgY2FjaGUgdGhlbQorICAgICh2b2lkKW90THdmSW5pdGlhbGl6ZUFkZHJlc3NlcyhwRmlsdGVyKTsKKworICAgIC8vIEluaXRpYWx6ZSBtZWRpYSBjb25uZWN0IHN0YXRlIHRvIGRpc2Nvbm5lY3RlZAorICAgIG90THdmSW5kaWNhdGVMaW5rU3RhdGUocEZpbHRlciwgTWVkaWFDb25uZWN0U3RhdGVEaXNjb25uZWN0ZWQpOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisgICAgICAgIGlmIChwRmlsdGVyLT5OZXh0QWxhcm1UaWNrQ291bnQuUXVhZFBhcnQgPT0gMCkKKyAgICAgICAgeworI2lmZGVmIERFQlVHX1RJTUlORworICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkV2ZW50IFByb2Nlc3Npbmcgd2FpdGluZyBmb3IgbmV4dCBldmVudC4iKTsKKyNlbmRpZgorCisgICAgICAgICAgICAvLyBXYWl0IGZvciBldmVudCB0byBzdG9wIG9yIHByb2Nlc3MgZXZlbnQgdG8gZmlyZQorICAgICAgICAgICAgc3RhdHVzID0gS2VXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKEFSUkFZU0laRShXYWl0RXZlbnRzKSwgKFBWT0lEKilXYWl0RXZlbnRzLCBXYWl0QW55LCBFeGVjdXRpdmUsIEtlcm5lbE1vZGUsIEZBTFNFLCBOVUxMLCBXYWl0QmxvY2tzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIExBUkdFX0lOVEVHRVIgU3lzdGVtVGlja0NvdW50OworICAgICAgICAgICAgS2VRdWVyeVRpY2tDb3VudCgmU3lzdGVtVGlja0NvdW50KTsKKworICAgICAgICAgICAgaWYgKHBGaWx0ZXItPk5leHRBbGFybVRpY2tDb3VudC5RdWFkUGFydCA+IFN5c3RlbVRpY2tDb3VudC5RdWFkUGFydCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHJlbGF0aXZlIChuZWdhdGl2ZSkgdGltZSB0byB3YWl0IG9uCisgICAgICAgICAgICAgICAgTEFSR0VfSU5URUdFUiBUaW1lb3V0OworICAgICAgICAgICAgICAgIFRpbWVvdXQuUXVhZFBhcnQgPSAoU3lzdGVtVGlja0NvdW50LlF1YWRQYXJ0IC0gcEZpbHRlci0+TmV4dEFsYXJtVGlja0NvdW50LlF1YWRQYXJ0KSAqIEtlUXVlcnlUaW1lSW5jcmVtZW50KCk7CisgICAgICAgICAgICAgICAgCisjaWZkZWYgREVCVUdfVElNSU5HCisgICAgICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkV2ZW50IFByb2Nlc3Npbmcgd2FpdGluZyBmb3IgbmV4dCBldmVudCwgd2l0aCB0aW1lb3V0LCAlZCBtcy4iLCAoaW50KShUaW1lb3V0LlF1YWRQYXJ0IC8gLTEwMDAwKSk7CisjZW5kaWYKKworICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIGV2ZW50IHRvIHN0b3Agb3IgcHJvY2VzcyBldmVudCB0byBmaXJlIG9yIHRpbWVvdXQKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBLZVdhaXRGb3JNdWx0aXBsZU9iamVjdHMoQVJSQVlTSVpFKFdhaXRFdmVudHMpLCAoUFZPSUQqKVdhaXRFdmVudHMsIFdhaXRBbnksIEV4ZWN1dGl2ZSwgS2VybmVsTW9kZSwgRkFMU0UsICZUaW1lb3V0LCBXYWl0QmxvY2tzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyNpZmRlZiBERUJVR19USU1JTkcKKyAgICAgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiRXZlbnQgUHJvY2Vzc2luZyBydW5uaW5nIGltbWVkaWF0ZWx5LiIpOworI2VuZGlmCisKKyAgICAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHdhaXQKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfVElNRU9VVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGl0IGlzIHRoZSBmaXJzdCBldmVudCwgdGhlbiB3ZSBhcmUgc2h1dHRpbmcgZG93bi4gRXhpdCBsb29wIGFuZCB0ZXJtaW5hdGUgdGhyZWFkCisgICAgICAgIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIlJlY2VpdmVkIGV2ZW50IHdvcmtlciB0aHJlYWQgc2h1dGRvd24gZXZlbnQuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyNpZmRlZiBERUJVR19USU1JTkcKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkV2ZW50IFByb2Nlc3Npbmcgc3RhdHVzPTB4JXgiLCBzdGF0dXMpOworI2VuZGlmCisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRXZlbnQgZmlyZWQgdG8gcHJvY2VzcyBldmVudHMKKyAgICAgICAgLy8KKworICAgICAgICBpZiAoc3RhdHVzID09IFNUQVRVU19USU1FT1VUIHx8IAorICAgICAgICAgICAgKHBGaWx0ZXItPkV2ZW50VGltZXJTdGF0ZSA9PSBPVF9FVkVOVF9USU1FUl9GSVJFRCAmJiBzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDMpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBSZXNldCB0aGUgd2FpdCB0aW1lb3V0CisgICAgICAgICAgICBwRmlsdGVyLT5OZXh0QWxhcm1UaWNrQ291bnQuUXVhZFBhcnQgPSAwOworICAgICAgICAgICAgcEZpbHRlci0+RXZlbnRUaW1lclN0YXRlID0gT1RfRVZFTlRfVElNRVJfTk9UX1JVTk5JTkc7CisKKyAgICAgICAgICAgIC8vIEluZGljYXRlIHRvIE9wZW5UaHJlYWQgdGhhdCB0aGUgYWxhcm0gaGFzIGZpcmVkCisgICAgICAgICAgICBvdFBsYXRBbGFybUZpcmVkKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDEpIC8vIEV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc05CTHMgZmlyZWQKKyAgICAgICAgeworICAgICAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUgcXVldWUgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMKKyAgICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUE9UTFdGX05CTF9FVkVOVCBFdmVudCA9IE5VTEw7CisgICAgICAgICAgICAgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmcEZpbHRlci0+RXZlbnRzTG9jayk7CisKKyAgICAgICAgICAgICAgICAvLyBKdXN0IGdldCB0aGUgZmlyc3QgaXRlbSwgaWYgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgaWYgKCFJc0xpc3RFbXB0eSgmcEZpbHRlci0+TkJMc0hlYWQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUExJU1RfRU5UUlkgTGluayA9IFJlbW92ZUhlYWRMaXN0KCZwRmlsdGVyLT5OQkxzSGVhZCk7CisgICAgICAgICAgICAgICAgICAgIEV2ZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfTkJMX0VWRU5ULCBMaW5rKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5FdmVudHNMb2NrKTsKKworICAgICAgICAgICAgICAgIC8vIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB3ZSBoYXZlIGVtcHRpZWQgdGhlIHF1ZXVlCisgICAgICAgICAgICAgICAgaWYgKEV2ZW50ID09IE5VTEwpIGJyZWFrOworCisgICAgICAgICAgICAgICAgTlRfQVNTRVJUKEV2ZW50LT5OZXRCdWZmZXJMaXN0cyk7CisgICAgICAgICAgICAgICAgTlRTVEFUVVMgTmJsU3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisKKyAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBldmVudAorICAgICAgICAgICAgICAgIFBORVRfQlVGRkVSX0xJU1QgQ3Vyck5ibCA9IEV2ZW50LT5OZXRCdWZmZXJMaXN0czsKKyAgICAgICAgICAgICAgICB3aGlsZSAoQ3Vyck5ibCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUE5FVF9CVUZGRVIgQ3Vyck5iID0gTkVUX0JVRkZFUl9MSVNUX0ZJUlNUX05CKEN1cnJOYmwpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoQ3Vyck5iICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5UX0FTU0VSVChORVRfQlVGRkVSX0RBVEFfTEVOR1RIKEN1cnJOYikgPD0gTWVzc2FnZUJ1ZmZlclNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoQ3Vyck5iKSA8PSBNZXNzYWdlQnVmZmVyU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb3B5IE5CIGRhdGEgaW50byBtZXNzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5UX1NVQ0NFU1MoQ29weURhdGFCdWZmZXIoQ3Vyck5iLCBORVRfQlVGRkVSX0RBVEFfTEVOR1RIKEN1cnJOYiksIE1lc3NhZ2VCdWZmZXIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBtZXNzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90TWVzc2FnZSAqbWVzc2FnZSA9IG90SXA2TmV3TWVzc2FnZShwRmlsdGVyLT5vdEN0eCwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0byB0aGUgbWVzc2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBvdE1lc3NhZ2VBcHBlbmQobWVzc2FnZSwgTWVzc2FnZUJ1ZmZlciwgKHVpbnQxNl90KU5FVF9CVUZGRVJfREFUQV9MRU5HVEgoQ3Vyck5iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREFUQV9QQVRILCAib3RBcHBlbmRNZXNzYWdlIGZhaWxlZCB3aXRoICUhb3RFcnJvciEiLCBlcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RNZXNzYWdlRnJlZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2X0hFQURFUiogdjZIZWFkZXIgPSAoSVBWNl9IRUFERVIqKU1lc3NhZ2VCdWZmZXI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwLCBJUDZfU0VORDogJXAgOiAlIUlQVjZBRERSISA9PiAlIUlQVjZBRERSISAoJXUgYnl0ZXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZpbHRlciwgQ3Vyck5ibCwgJnY2SGVhZGVyLT5Tb3VyY2VBZGRyZXNzLCAmdjZIZWFkZXItPkRlc3RpbmF0aW9uQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUX0JVRkZFUl9EQVRBX0xFTkdUSChDdXJyTmIpKTsKKworI2lmZGVmIExPR19CVUZGRVJTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RMb2dCdWZmZXIoTWVzc2FnZUJ1ZmZlciwgTkVUX0JVRkZFUl9EQVRBX0xFTkdUSChDdXJyTmIpKTsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VuZCBtZXNzYWdlIChpdCB3aWxsIGZyZWUgJ21lc3NhZ2UnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gb3RJcDZTZW5kKHBGaWx0ZXItPm90Q3R4LCBtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9EQVRBX1BBVEgsICJvdFNlbmRJcDZEYXRhZ3JhbSBmYWlsZWQgd2l0aCAlIW90RXJyb3IhIiwgZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYmxTdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREFUQV9QQVRILCAib3ROZXdJUHY2TWVzc2FnZSBmYWlsZWQhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJOYiA9IE5FVF9CVUZGRVJfTkVYVF9OQihDdXJyTmIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgQ3Vyck5ibCA9IE5FVF9CVUZGRVJfTElTVF9ORVhUX05CTChDdXJyTmJsKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoRXZlbnQtPk5ldEJ1ZmZlckxpc3RzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGxldGUgdGhlIE5CTHMKKyAgICAgICAgICAgICAgICAgICAgb3RMd2ZDb21wbGV0ZU5CTHMocEZpbHRlciwgRkFMU0UsIEV2ZW50LT5OZXRCdWZmZXJMaXN0cywgTmJsU3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGcmVlIHRoZSBldmVudAorICAgICAgICAgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDIpIC8vIEV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc01hY0ZyYW1lcyBmaXJlZAorICAgICAgICB7CisgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBxdWV1ZSB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcworICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQT1RMV0ZfTUFDX0ZSQU1FX0VWRU5UIEV2ZW50ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwRmlsdGVyLT5FdmVudHNMb2NrKTsKKworICAgICAgICAgICAgICAgIC8vIEp1c3QgZ2V0IHRoZSBmaXJzdCBpdGVtLCBpZiBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBpZiAoIUlzTGlzdEVtcHR5KCZwRmlsdGVyLT5NYWNGcmFtZXNIZWFkKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFBMSVNUX0VOVFJZIExpbmsgPSBSZW1vdmVIZWFkTGlzdCgmcEZpbHRlci0+TWFjRnJhbWVzSGVhZCk7CisgICAgICAgICAgICAgICAgICAgIEV2ZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfTUFDX0ZSQU1FX0VWRU5ULCBMaW5rKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5FdmVudHNMb2NrKTsKKworICAgICAgICAgICAgICAgIC8vIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB3ZSBoYXZlIGVtcHRpZWQgdGhlIHF1ZXVlCisgICAgICAgICAgICAgICAgaWYgKEV2ZW50ID09IE5VTEwpIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgaW5pdGlhbCBsZW5ndGggdmFsdWUgYW5kIHZhbGlkYXRlCisgICAgICAgICAgICAgICAgdWludDE2X3QgcGFja2V0TGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgICBFdmVudC0+QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQtPkJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRMZW5ndGgpICYmCisgICAgICAgICAgICAgICAgICAgIHBhY2tldExlbmd0aCA8PSBzaXplb2YocEZpbHRlci0+b3RSZWNlaXZlTWVzc2FnZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgRXZlbnQtPkJ1ZmZlckxlbmd0aCA+IHNpemVvZih1aW50MTZfdCkgKyBwYWNrZXRMZW5ndGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tTGVuZ3RoID0gKHVpbnQ4X3QpcGFja2V0TGVuZ3RoOworCisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgb2Zmc2V0ID0gMjsKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCBsZW5ndGggPSBFdmVudC0+QnVmZmVyTGVuZ3RoIC0gMjsKKworICAgICAgICAgICAgICAgICAgICBpZiAocGFja2V0TGVuZ3RoICE9IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmcEZpbHRlci0+b3RSZWNlaXZlTWVzc2FnZSwgRXZlbnQtPkJ1ZmZlciArIG9mZnNldCwgcGFja2V0TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC09IHBGaWx0ZXItPm90UmVjZWl2ZUZyYW1lLm1MZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBvdEVycm9yIGVycm9yQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgaW50OF90IG5vaXNlRmxvb3IgPSAtMTI4OworICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBmbGFncyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudC0+QnVmZmVyICsgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUyggLy8gUEhZLWRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgLy8gODAyLjE1LjQgY2hhbm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAvLyA4MDIuMTUuNCBMUUkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKCAvLyBWZW5kb3ItZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBGaWx0ZXItPm90UmVjZWl2ZUZyYW1lLm1Qb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbm9pc2VGbG9vciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBGaWx0ZXItPm90UmVjZWl2ZUZyYW1lLm1DaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tTHFpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvckNvZGUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdEx3ZlJhZGlvUmVjZWl2ZUZyYW1lKHBGaWx0ZXIsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGcmVlIHRoZSBldmVudAorICAgICAgICAgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDMpIC8vIEV2ZW50V29ya2VyVGhyZWFkV2FpdFRpbWVVcGRhdGVkIGZpcmVkCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8sIHRoZSBuZXh0IHRpbWUgd2Ugd2FpdCwgd2Ugd2lsbCBiZSB1c2luZyB0aGUgdXBkYXRlZCB0aW1lCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFNUQVRVU19XQUlUXzAgKyA0KSAvLyBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NUYXNrbGV0cyBmaXJlZAorICAgICAgICB7CisgICAgICAgICAgICAvLyBQcm9jZXNzIGFsbCB0YXNrbGV0cyB0aGF0IHdlcmUgaW5kaWNhdGVkIHRvIHVzIGZyb20gT3BlblRocmVhZAorICAgICAgICAgICAgb3RUYXNrbGV0c1Byb2Nlc3MocEZpbHRlci0+b3RDdHgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBTVEFUVVNfV0FJVF8wICsgNSkgLy8gU2VuZE5ldEJ1ZmZlckxpc3RDb21wbGV0ZSBmaXJlZAorICAgICAgICB7CisgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNvbXBsZXRpb24gb2YgdGhlIE5CTCBzZW5kCisgICAgICAgICAgICBvdEx3ZlJhZGlvVHJhbnNtaXRGcmFtZURvbmUocEZpbHRlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFNUQVRVU19XQUlUXzAgKyA2KSAvLyBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NJcnAgZmlyZWQKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUHJvY2VzcyBhbnkgSVJQcyB0aGF0IHdlcmUgcGVuZGVkCisgICAgICAgICAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ05leHRJcnAocEZpbHRlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFNUQVRVU19XQUlUXzAgKyA3KSAvLyBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NBZGRyZXNzQ2hhbmdlcyBmaXJlZAorICAgICAgICB7CisgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBxdWV1ZSB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcworICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQT1RMV0ZfQUREUl9FVkVOVCBFdmVudCA9IE5VTEw7CisgICAgICAgICAgICAgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmcEZpbHRlci0+RXZlbnRzTG9jayk7CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgaXRlbSwgaWYgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgaWYgKCFJc0xpc3RFbXB0eSgmcEZpbHRlci0+QWRkcmVzc0NoYW5nZXNIZWFkKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFBMSVNUX0VOVFJZIExpbmsgPSBSZW1vdmVIZWFkTGlzdCgmcEZpbHRlci0+QWRkcmVzc0NoYW5nZXNIZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgRXZlbnQgPSBDT05UQUlOSU5HX1JFQ09SRChMaW5rLCBPVExXRl9BRERSX0VWRU5ULCBMaW5rKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5FdmVudHNMb2NrKTsKKworICAgICAgICAgICAgICAgIC8vIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB3ZSBoYXZlIGVtcHRpZWQgdGhlIHF1ZXVlCisgICAgICAgICAgICAgICAgaWYgKEV2ZW50ID09IE5VTEwpIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGFkZHJlc3MgY2hhbmdlIG9uIHRoZSBPcGVudGhyZWFkIHRocmVhZAorICAgICAgICAgICAgICAgIG90THdmRXZlbnRQcm9jZXNzaW5nQWRkcmVzc0NoYW5nZWQocEZpbHRlciwgRXZlbnQtPk5vdGlmaWNhdGlvblR5cGUsICZFdmVudC0+QWRkcmVzcyk7CisKKyAgICAgICAgICAgICAgICAvLyBGcmVlIHRoZSBldmVudAorICAgICAgICAgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDgpIC8vIEV2ZW50V29ya2VyVGhyZWFkRW5lcmd5U2NhbkNvbXBsZXRlIGZpcmVkCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluZGljYXRlIGVuZXJneSBzY2FuIGNvbXBsZXRlCisgICAgICAgICAgICBvdFBsYXRSYWRpb0VuZXJneVNjYW5Eb25lKHBGaWx0ZXItPm90Q3R4LCBwRmlsdGVyLT5vdExhc3RFbmVyZ3lTY2FuTWF4UnNzaSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiVW5leHBlY3RlZCB3YWl0IHJlc3VsdCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGhhdmUgYSBmcmFtZSByZWFkeSB0byB0cmFuc21pdCwgZG8gaXQgbm93IGlmIHdlIGFyZSBhbGxvd2VkIHRvIHRyYW5zbWl0CisgICAgICAgIGlmIChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQgJiYgIXBGaWx0ZXItPlNlbmRQZW5kaW5nKQorICAgICAgICB7CisgICAgICAgICAgICBvdEx3ZlJhZGlvVHJhbnNtaXRGcmFtZShwRmlsdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKworICAgIG90THdmUmVsZWFzZUluc3RhbmNlKHBGaWx0ZXIpOworCisgICAgaWYgKHBGaWx0ZXItPm90SW5zdGFuY2VCdWZmZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIE5kaXNGcmVlTWVtb3J5KHBGaWx0ZXItPm90SW5zdGFuY2VCdWZmZXIsIDAsIDApOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKKworICAgIEZJTFRFUl9GUkVFX01FTShNZXNzYWdlQnVmZmVyKTsKKworICAgIFBzVGVybWluYXRlU3lzdGVtVGhyZWFkKFNUQVRVU19TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9maWx0ZXIuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9maWx0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWQzMmZkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2ZpbHRlci5jCkBAIC0wLDAgKzEsODQ4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgImZpbHRlci50bWgiCisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBxdWVyeSB0aGUgQ29tcGFydG1lbnRJRCBvZiBhIE5ldHdvcmsgSW50ZXJmYWNlCitDT01QQVJUTUVOVF9JRCAKK0dldEludGVyZmFjZUNvbXBhcnRtZW50SUQoCisgICAgX0luXyBQSUZfTFVJRCBwTmV0THVpZAorICAgICkKK3sgIAorICAgIENPTVBBUlRNRU5UX0lEIENvbXBhcnRtZW50SUQgPSBVTlNQRUNJRklFRF9DT01QQVJUTUVOVF9JRDsgIAorCisgICAgTlRTVEFUVVMgU3RhdHVzID0KKyAgICAgICAgTnNpR2V0UGFyYW1ldGVyKAorICAgICAgICAgICAgTnNpQWN0aXZlLAorICAgICAgICAgICAgJk5QSV9NU19ORElTX01PRFVMRUlELAorICAgICAgICAgICAgTmRpc05zaU9iamVjdEludGVyZmFjZUluZm9ybWF0aW9uLAorICAgICAgICAgICAgcE5ldEx1aWQsIHNpemVvZigqcE5ldEx1aWQpLAorICAgICAgICAgICAgTnNpU3RydWN0Um9EeW5hbWljLAorICAgICAgICAgICAgJkNvbXBhcnRtZW50SUQsIHNpemVvZihDb21wYXJ0bWVudElEKSwKKyAgICAgICAgICAgIEZJRUxEX09GRlNFVChORElTX05TSV9JTlRFUkZBQ0VfSU5GT1JNQVRJT05fUk9ELCBDb21wYXJ0bWVudElkKQorICAgICAgICAgICAgKTsKKworICAgIHJldHVybiAoTlRfU1VDQ0VTUyhTdGF0dXMpID8gQ29tcGFydG1lbnRJRCA6IERFRkFVTFRfQ09NUEFSVE1FTlRfSUQpOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitORElTX1NUQVRVUworRmlsdGVyQXR0YWNoKAorICAgIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgTmRpc0ZpbHRlckhhbmRsZSwKKyAgICBORElTX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgIEZpbHRlckRyaXZlckNvbnRleHQsCisgICAgUE5ESVNfRklMVEVSX0FUVEFDSF9QQVJBTUVURVJTICBBdHRhY2hQYXJhbWV0ZXJzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRmlsdGVyIGF0dGFjaCByb3V0aW5lLgorICAgIENyZWF0ZSBmaWx0ZXIncyBjb250ZXh0LCBhbGxvY2F0ZSBOZXRCdWZmZXJMaXN0cyBhbmQgTmV0QnVmZmVyIHBvb2xzIGFuZCBhbnkKKyAgICBvdGhlciByZXNvdXJjZXMsIGFuZCByZWFkIGNvbmZpZ3VyYXRpb24gaWYgbmVlZGVkLgorCitBcmd1bWVudHM6CisKKyAgICBOZGlzRmlsdGVySGFuZGxlIC0gU3BlY2lmeSBhIGhhbmRsZSBpZGVudGlmeWluZyB0aGlzIGluc3RhbmNlIG9mIHRoZSBmaWx0ZXIuIEZpbHRlckF0dGFjaAorICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgc2F2ZSB0aGlzIGhhbmRsZS4gSXQgaXMgYSByZXF1aXJlZCAgcGFyYW1ldGVyIGluIHN1YnNlcXVlbnQgY2FsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgdG8gTmRpc0Z4eHggZnVuY3Rpb25zLgorICAgIEZpbHRlckRyaXZlckNvbnRleHQgLSBGaWx0ZXIgZHJpdmVyIGNvbnRleHQgcGFzc2VkIHRvIE5kaXNGUmVnaXN0ZXJGaWx0ZXJEcml2ZXIuCisKKyAgICBBdHRhY2hQYXJhbWV0ZXJzIC0gYXR0YWNoIHBhcmFtZXRlcnMKKworUmV0dXJuIFZhbHVlOgorCisgICAgTkRJU19TVEFUVVNfU1VDQ0VTUzogRmlsdGVyQXR0YWNoIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemUgZGF0YSBzdHJ1Y3R1cmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgZmlsdGVyIGluc3RhbmNlLgorICAgIE5ESVNfU1RBVFVTX1JFU09VUkNFUzogRmlsdGVyQXR0YWNoIGZhaWxlZCBkdWUgdG8gaW5zdWZmaWNpZW50IHJlc291cmNlcy4KKyAgICBORElTX1NUQVRVU19GQUlMVVJFOiBGaWx0ZXJBdHRhY2ggY291bGQgbm90IHNldCB1cCB0aGlzIGluc3RhbmNlIG9mIHRoaXMgZmlsdGVyIGFuZCBpdCBoYXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgTmRpc1dyaXRlRXJyb3JMb2dFbnRyeSB3aXRoIHBhcmFtZXRlcnMgc3BlY2lmeWluZyB0aGUgcmVhc29uIGZvciBmYWlsdXJlLgorCitOLkIuOiAgRklMVEVSIGNhbiB1c2UgTmRpc1JlZ2lzdGVyRGV2aWNlRXggdG8gY3JlYXRlIGEgZGV2aWNlLCBzbyB0aGUgdXBwZXIgCisgICAgbGF5ZXIgY2FuIHNlbmQgSXJwcyB0byB0aGUgZmlsdGVyLgorCistLSovCit7CisgICAgUE1TX0ZJTFRFUiAgICAgICAgICAgICAgcEZpbHRlciA9IE5VTEw7CisgICAgTkRJU19TVEFUVVMgICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICBOdFN0YXR1czsKKyAgICBORElTX0ZJTFRFUl9BVFRSSUJVVEVTICBGaWx0ZXJBdHRyaWJ1dGVzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFNpemU7CisgICAgQ09NUEFSVE1FTlRfSUQgICAgICAgICAgT3JpZ2luYWxDb21wYXJ0bWVudElEOworICAgIE9CSkVDVF9BVFRSSUJVVEVTICAgICAgIE9iamVjdEF0dHJpYnV0ZXMgPSB7MH07CisKKyAgICBjb25zdCBVTE9ORyBSZWdLZXlPZmZzZXQgPSBBUlJBWVNJWkUoTCJcXFJFR0lTVFJZXFxNQUNISU5FXFxTWVNURU1cXEN1cnJlbnRDb250cm9sU2V0XFxTZXJ2aWNlc1xcb3Rsd2ZcXFBhcmFtZXRlcnNcXE5kaXNBZGFwdGVyc1xcIikgLSAxOworICAgIERFQ0xBUkVfQ09OU1RfVU5JQ09ERV9TVFJJTkcoUmVnS2V5UGF0aCwgTCJcXFJFR0lTVFJZXFxNQUNISU5FXFxTWVNURU1cXEN1cnJlbnRDb250cm9sU2V0XFxTZXJ2aWNlc1xcb3Rsd2ZcXFBhcmFtZXRlcnNcXE5kaXNBZGFwdGVyc1xcezAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMH0iKTsKKyAgICBSdGxDb3B5TWVtb3J5KFJlZ0tleVBhdGguQnVmZmVyICsgUmVnS2V5T2Zmc2V0LCBBdHRhY2hQYXJhbWV0ZXJzLT5CYXNlTWluaXBvcnROYW1lLT5CdWZmZXIgKyA4LCBzaXplb2YoTCJ7MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfSIpKTsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgQVNTRVJUKEZpbHRlckRyaXZlckNvbnRleHQgPT0gKE5ESVNfSEFORExFKUZpbHRlckRyaXZlck9iamVjdCk7CisgICAgICAgIGlmIChGaWx0ZXJEcml2ZXJDb250ZXh0ICE9IChORElTX0hBTkRMRSlGaWx0ZXJEcml2ZXJPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBWZXJpZnkgdGhlIG1lZGlhIHR5cGUgaXMgc3VwcG9ydGVkLiAgVGhpcyBpcyBhIGxhc3QgcmVzb3J0OyB0aGUKKyAgICAgICAgLy8gdGhlIGZpbHRlciBzaG91bGQgbmV2ZXIgaGF2ZSBiZWVuIGJvdW5kIHRvIGFuIHVuc3VwcG9ydGVkIG1pbmlwb3J0CisgICAgICAgIC8vIHRvIGJlZ2luIHdpdGguCisgICAgICAgIGlmIChBdHRhY2hQYXJhbWV0ZXJzLT5NaW5pcG9ydE1lZGlhVHlwZSAhPSBOZGlzTWVkaXVtSVApCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiVW5zdXBwb3J0ZWQgbWVkaWEgdHlwZSwgMHgleC4iLCAoVUxPTkcpQXR0YWNoUGFyYW1ldGVycy0+TWluaXBvcnRNZWRpYVR5cGUpOworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNpemUgPSBzaXplb2YoTVNfRklMVEVSKSArICBBdHRhY2hQYXJhbWV0ZXJzLT5CYXNlTWluaXBvcnRJbnN0YW5jZU5hbWUtPkxlbmd0aDsKKworICAgICAgICBwRmlsdGVyID0gKFBNU19GSUxURVIpRklMVEVSX0FMTE9DX01FTShOZGlzRmlsdGVySGFuZGxlLCBTaXplKTsKKyAgICAgICAgaWYgKHBGaWx0ZXIgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nV2FybmluZyhEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBhbGxvY2F0ZSBjb250ZXh0IHN0cnVjdHVyZSwgMHgleCBieXRlcyIsIFNpemUpOworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBOZGlzWmVyb01lbW9yeShwRmlsdGVyLCBzaXplb2YoTVNfRklMVEVSKSk7CisKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIk9wZW5pbmcgaW50ZXJmYWNlIHJlZ2lzdHJ5IGtleSAlUyIsIFJlZ0tleVBhdGguQnVmZmVyKTsKKworICAgICAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcygKKyAgICAgICAgICAgICZPYmplY3RBdHRyaWJ1dGVzLAorICAgICAgICAgICAgKFBVTklDT0RFX1NUUklORykmUmVnS2V5UGF0aCwKKyAgICAgICAgICAgIE9CSl9DQVNFX0lOU0VOU0lUSVZFIHwgT0JKX0tFUk5FTF9IQU5ETEUsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgLy8gT3BlbiB0aGUgcmVnaXN0cnkga2V5CisgICAgICAgIE50U3RhdHVzID0gWndPcGVuS2V5KCZwRmlsdGVyLT5JbnRlcmZhY2VSZWdLZXksIEtFWV9BTExfQUNDRVNTLCAmT2JqZWN0QXR0cmlidXRlcyk7CisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhOdFN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndPcGVuS2V5IGZhaWxlZCB0byBvcGVuICVTLCAlIVNUQVRVUyEiLCBSZWdLZXlQYXRoLkJ1ZmZlciwgTnRTdGF0dXMpOworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRm9ybWF0IG9mICJcREVWSUNFXHs1QkE5MEM0OS0wRDdFLTQ1NUItOEQzQi02MTRGNjcxNEEyMTJ9IgorICAgICAgICBBdHRhY2hQYXJhbWV0ZXJzLT5CYXNlTWluaXBvcnROYW1lLT5CdWZmZXIgKz0gODsKKyAgICAgICAgQXR0YWNoUGFyYW1ldGVycy0+QmFzZU1pbmlwb3J0TmFtZS0+TGVuZ3RoIC09IDggKiBzaXplb2YoV0NIQVIpOworICAgICAgICBOdFN0YXR1cyA9IFJ0bEdVSURGcm9tU3RyaW5nKEF0dGFjaFBhcmFtZXRlcnMtPkJhc2VNaW5pcG9ydE5hbWUsICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkKTsKKyAgICAgICAgQXR0YWNoUGFyYW1ldGVycy0+QmFzZU1pbmlwb3J0TmFtZS0+QnVmZmVyIC09IDg7CisgICAgICAgIEF0dGFjaFBhcmFtZXRlcnMtPkJhc2VNaW5pcG9ydE5hbWUtPkxlbmd0aCArPSA4ICogc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKE50U3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gY29udmVydCBGaWx0ZXJNb2R1bGVHdWlkTmFtZSB0byBhIEdVSUQsICUhU1RBVFVTISIsIE50U3RhdHVzKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZUZyaWVuZGx5TmFtZS5MZW5ndGggPSBwRmlsdGVyLT5JbnRlcmZhY2VGcmllbmRseU5hbWUuTWF4aW11bUxlbmd0aCA9IEF0dGFjaFBhcmFtZXRlcnMtPkJhc2VNaW5pcG9ydEluc3RhbmNlTmFtZS0+TGVuZ3RoOworICAgICAgICBwRmlsdGVyLT5JbnRlcmZhY2VGcmllbmRseU5hbWUuQnVmZmVyID0gKFBXU1RSKSgoUFVDSEFSKXBGaWx0ZXIgKyBzaXplb2YoTVNfRklMVEVSKSk7CisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBGaWx0ZXItPkludGVyZmFjZUZyaWVuZGx5TmFtZS5CdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2hQYXJhbWV0ZXJzLT5CYXNlTWluaXBvcnRJbnN0YW5jZU5hbWUtPkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZUZyaWVuZGx5TmFtZS5MZW5ndGgpOworCisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZUluZGV4ID0gQXR0YWNoUGFyYW1ldGVycy0+QmFzZU1pbmlwb3J0SWZJbmRleDsKKyAgICAgICAgcEZpbHRlci0+SW50ZXJmYWNlTHVpZCA9IEF0dGFjaFBhcmFtZXRlcnMtPkJhc2VNaW5pcG9ydE5ldEx1aWQ7CisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZUNvbXBhcnRtZW50SUQgPSBVTlNQRUNJRklFRF9DT01QQVJUTUVOVF9JRDsKKyAgICAgICAgcEZpbHRlci0+RmlsdGVySGFuZGxlID0gTmRpc0ZpbHRlckhhbmRsZTsKKworICAgICAgICBOZGlzWmVyb01lbW9yeSgmRmlsdGVyQXR0cmlidXRlcywgc2l6ZW9mKE5ESVNfRklMVEVSX0FUVFJJQlVURVMpKTsKKyAgICAgICAgRmlsdGVyQXR0cmlidXRlcy5IZWFkZXIuUmV2aXNpb24gPSBORElTX0ZJTFRFUl9BVFRSSUJVVEVTX1JFVklTSU9OXzE7CisgICAgICAgIEZpbHRlckF0dHJpYnV0ZXMuSGVhZGVyLlNpemUgPSBzaXplb2YoTkRJU19GSUxURVJfQVRUUklCVVRFUyk7CisgICAgICAgIEZpbHRlckF0dHJpYnV0ZXMuSGVhZGVyLlR5cGUgPSBORElTX09CSkVDVF9UWVBFX0ZJTFRFUl9BVFRSSUJVVEVTOworICAgICAgICBGaWx0ZXJBdHRyaWJ1dGVzLkZsYWdzID0gMDsKKworICAgICAgICBORElTX0RFQ0xBUkVfRklMVEVSX01PRFVMRV9DT05URVhUKE1TX0ZJTFRFUik7CisgICAgICAgIFN0YXR1cyA9IE5kaXNGU2V0QXR0cmlidXRlcyhOZGlzRmlsdGVySGFuZGxlLCBwRmlsdGVyLCAmRmlsdGVyQXR0cmlidXRlcyk7CisgICAgICAgIGlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gc2V0IGF0dHJpYnV0ZXMsICUhTkRJU19TVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmlsdGVyIGluaXRpYWxseSBpbiBQYXVzZWQgc3RhdGUKKyAgICAgICAgcEZpbHRlci0+U3RhdGUgPSBGaWx0ZXJQYXVzZWQ7CisKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBydW5kb3ducyB0byBkaXNhYmxlZCB3aXRoIG5vIGFjdGl2ZSByZWZlcmVuY2VzCisgICAgICAgIHBGaWx0ZXItPkV4dGVybmFsUmVmcy5Db3VudCA9IEVYX1JVTkRPV05fQUNUSVZFOworICAgICAgICBwRmlsdGVyLT5jbWRSdW5kb3duLkNvdW50ID0gRVhfUlVORE9XTl9BQ1RJVkU7CisKKyAgICAgICAgLy8gUXVlcnkgdGhlIGNvbXBhcnRtZW50IElEIGZvciB0aGlzIGludGVyZmFjZSB0byB1c2UgZm9yIHRoZSBJUCBzdGFjaworICAgICAgICBwRmlsdGVyLT5JbnRlcmZhY2VDb21wYXJ0bWVudElEID0gR2V0SW50ZXJmYWNlQ29tcGFydG1lbnRJRCgmcEZpbHRlci0+SW50ZXJmYWNlTHVpZCk7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBpcyBpbiBDb21wYXJ0bWVudCAldSIsICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkLCAoVUxPTkcpcEZpbHRlci0+SW50ZXJmYWNlQ29tcGFydG1lbnRJRCk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGFyZSBpbiB0aGUgcmlnaHQgY29tcGFydG1lbnQKKyAgICAgICAgKFZPSUQpb3RMd2ZTZXRDb21wYXJ0bWVudChwRmlsdGVyLCAmT3JpZ2luYWxDb21wYXJ0bWVudElEKTsKKworICAgICAgICAvLyBSZWdpc3RlciBmb3IgYWRkcmVzcyBjaGFuZ2VkIG5vdGlmaWNhdGlvbnMKKyAgICAgICAgTnRTdGF0dXMgPSAKKyAgICAgICAgICAgIE5vdGlmeVVuaWNhc3RJcEFkZHJlc3NDaGFuZ2UoCisgICAgICAgICAgICAgICAgQUZfSU5FVDYsCisgICAgICAgICAgICAgICAgb3RMd2ZBZGRyZXNzQ2hhbmdlQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAmcEZpbHRlci0+QWRkcmVzc0NoYW5nZUhhbmRsZQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjb21wYXJ0bWVudCwgbm93IHRoYXQgd2UgaGF2ZSB0aGUgdGFibGUKKyAgICAgICAgb3RMd2ZSZXZlcnRDb21wYXJ0bWVudChPcmlnaW5hbENvbXBhcnRtZW50SUQpOworCisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhOdFN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiTm90aWZ5VW5pY2FzdElwQWRkcmVzc0NoYW5nZSBmYWlsZWQsICUhU1RBVFVTISIsIE50U3RhdHVzKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCBGaWx0ZXIgdG8gZ2xvYmFsIGxpc3Qgb2YgVGhyZWFkIEZpbHRlcnMKKyAgICAgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworICAgICAgICBJbnNlcnRUYWlsTGlzdCgmRmlsdGVyTW9kdWxlTGlzdCwgJnBGaWx0ZXItPkZpbHRlck1vZHVsZUxpbmspOworICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZGaWx0ZXJMaXN0TG9jayk7CisKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkNyZWF0ZWQgRmlsdGVyOiAlcCIsIHBGaWx0ZXIpOworCisgICAgfSB3aGlsZSAoRkFMU0UpOworCisgICAgLy8gQ2xlYW4gdXAgb24gZmFpbHVyZQorICAgIGlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGlmIChwRmlsdGVyICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlSGFuZGxlICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2FuY2VsTWliQ2hhbmdlTm90aWZ5MihwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlSGFuZGxlID0gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTmRpc0ZyZWVNZW1vcnkocEZpbHRlciwgMCwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIFN0YXR1cyk7CisKKyAgICByZXR1cm4gU3RhdHVzOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitGaWx0ZXJEZXRhY2goCisgICAgTkRJU19IQU5ETEUgICAgIEZpbHRlck1vZHVsZUNvbnRleHQKKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBGaWx0ZXIgZGV0YWNoIHJvdXRpbmUuCisgICAgVGhpcyBpcyBhIHJlcXVpcmVkIGZ1bmN0aW9uIHRoYXQgd2lsbCBkZWFsbG9jYXRlIGFsbCB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBkdXJpbmcKKyAgICBGaWx0ZXJBdHRhY2guIE5ESVMgY2FsbHMgRmlsdGVyQXR0YWNoIHRvIHJlbW92ZSBhIGZpbHRlciBpbnN0YW5jZSBmcm9tIGEgZmlsdGVyIHN0YWNrLgorCitBcmd1bWVudHM6CisKKyAgICBGaWx0ZXJNb2R1bGVDb250ZXh0IC0gcG9pbnRlciB0byB0aGUgZmlsdGVyIGNvbnRleHQgYXJlYS4KKworUmV0dXJuIFZhbHVlOgorICAgIE5vbmUuCisKK05PVEU6IENhbGxlZCBhdCBQQVNTSVZFX0xFVkVMIGFuZCB0aGUgZmlsdGVyIGlzIGluIHBhdXNlZCBzdGF0ZQorCistLSovCit7CisgICAgUE1TX0ZJTFRFUiAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXI6ICVwIiwgRmlsdGVyTW9kdWxlQ29udGV4dCk7CisKKyAgICAvLyBGaWx0ZXIgbXVzdCBiZSBpbiBwYXVzZWQgc3RhdGUgYW5kIHByZXR0eSBtdWNoIGluYWN0aXZlCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPlN0YXRlID09IEZpbHRlclBhdXNlZCk7CisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1VOSU5USUFMSVpFRCk7CisKKyAgICAvLworICAgIC8vIERldGFjaCBtdXN0IG5vdCBmYWlsLCBzbyBkbyBub3QgcHV0IGFueSBjb2RlIGhlcmUgdGhhdCBjYW4gcG9zc2libHkgZmFpbC4KKyAgICAvLworCisgICAgLy8gUmVtb3ZlIHRoaXMgRmlsdGVyIGZyb20gdGhlIGdsb2JhbCBsaXN0CisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworICAgIFJlbW92ZUVudHJ5TGlzdCgmcEZpbHRlci0+RmlsdGVyTW9kdWxlTGluayk7CisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgLy8gVW5yZWdpc3RlciBmcm9tIGFkZHJlc3MgY2hhbmdlIG5vdGlmaWNhdGlvbnMKKyAgICBDYW5jZWxNaWJDaGFuZ2VOb3RpZnkyKHBGaWx0ZXItPkFkZHJlc3NDaGFuZ2VIYW5kbGUpOworICAgIHBGaWx0ZXItPkFkZHJlc3NDaGFuZ2VIYW5kbGUgPSBOVUxMOworCisgICAgLy8gQ2xvc2UgdGhlIHJlZ2lzdHJ5IGtleQorICAgIGlmIChwRmlsdGVyLT5JbnRlcmZhY2VSZWdLZXkpCisgICAgeworICAgICAgICBad0Nsb3NlKHBGaWx0ZXItPkludGVyZmFjZVJlZ0tleSk7CisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZVJlZ0tleSA9IE5VTEw7CisgICAgfQorCisgICAgLy8gRnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZAorICAgIE5kaXNGcmVlTWVtb3J5KHBGaWx0ZXIsIDAsIDApOworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCisvLyBJbmRpY2F0ZXMgYW4gaW50ZXJmYWNlIHN0YXRlIGNoYW5nZSBoYXMgdGFrZW4gcGxhY2UgKHVzZWQgZm9yIGludGVyZmFjZSBhcnJpdmFsL3JlbW92YWwpCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZOb3RpZnlEZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2UoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOICAgICAgICAgICAgICAgIGZBdmFpbGFibGUKKyAgICApCit7CisgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICBpZiAoTm90aWZFbnRyeSkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuSW50ZXJmYWNlR3VpZCA9IHBGaWx0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLk5vdGlmVHlwZSA9IE9UTFdGX05PVElGX0RFVklDRV9BVkFJTEFCSUxJVFk7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkRldmljZUF2YWlsYWJpbGl0eVBheWxvYWQuQXZhaWxhYmxlID0gZkF2YWlsYWJsZTsKKworICAgICAgICBvdEx3ZkluZGljYXRlTm90aWZpY2F0aW9uKE5vdGlmRW50cnkpOworICAgIH0KK30KKworUEFHRUQKK05UU1RBVFVTCitHZXRSZWdEV09SRFZhbHVlKAorICAgIF9Jbl8gIFBNU19GSUxURVIgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyAgUENXU1RSICAgICAgICAgICAgVmFsdWVOYW1lLAorICAgIF9PdXRfIFBVTE9ORyAgICAgICAgICAgIFZhbHVlRGF0YQorKQoreworICAgIE5UU1RBVFVTICAgICAgICAgICAgc3RhdHVzOworICAgIFVMT05HICAgICAgICAgICAgICAgcmVzdWx0TGVuZ3RoOworICAgIFVDSEFSICAgICAgICAgICAgICAga2V5YnVmWzEyOF0gPSB7MH07CisgICAgVU5JQ09ERV9TVFJJTkcgICAgICBVVmFsdWVOYW1lOworCisgICAgUEFHRURfQ09ERSgpOworCisgICAgUnRsSW5pdFVuaWNvZGVTdHJpbmcoJlVWYWx1ZU5hbWUsIFZhbHVlTmFtZSk7CisKKyAgICBzdGF0dXMgPSBad1F1ZXJ5VmFsdWVLZXkoCisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZVJlZ0tleSwKKyAgICAgICAgJlVWYWx1ZU5hbWUsCisgICAgICAgIEtleVZhbHVlRnVsbEluZm9ybWF0aW9uLAorICAgICAgICBrZXlidWYsCisgICAgICAgIHNpemVvZihrZXlidWYpLAorICAgICAgICAmcmVzdWx0TGVuZ3RoKTsKKworICAgIGlmIChOVF9TVUNDRVNTKHN0YXR1cykpIAorICAgIHsKKyAgICAgICAgUEtFWV9WQUxVRV9GVUxMX0lORk9STUFUSU9OIGtleUluZm8gPSAoUEtFWV9WQUxVRV9GVUxMX0lORk9STUFUSU9OKWtleWJ1ZjsKKworICAgICAgICBpZiAoa2V5SW5mby0+VHlwZSAhPSBSRUdfRFdPUkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUl9NSVg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqVmFsdWVEYXRhID0gKigoVUxPTkcgVU5BTElHTkVEICopKGtleWJ1ZiArIGtleUluZm8tPkRhdGFPZmZzZXQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK1BBR0VECitOVFNUQVRVUworU2V0UmVnRFdPUkRWYWx1ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQQ1dTVFIgICAgICAgICBWYWx1ZU5hbWUsCisgICAgX0luXyBVTE9ORyAgICAgICAgICBWYWx1ZURhdGEKKykKK3sKKyAgICBOVFNUQVRVUyAgICAgICAgICAgIHN0YXR1czsKKyAgICBVTklDT0RFX1NUUklORyAgICAgIFVWYWx1ZU5hbWU7CisKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBSdGxJbml0VW5pY29kZVN0cmluZygmVVZhbHVlTmFtZSwgVmFsdWVOYW1lKTsKKworICAgIHN0YXR1cyA9IFp3U2V0VmFsdWVLZXkoCisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZVJlZ0tleSwKKyAgICAgICAgJlVWYWx1ZU5hbWUsCisgICAgICAgIDAsCisgICAgICAgIFJFR19EV09SRCwKKyAgICAgICAgKFBWT0lEKSZWYWx1ZURhdGEsCisgICAgICAgIHNpemVvZihWYWx1ZURhdGEpKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK05ESVNfU1RBVFVTCitGaWx0ZXJSZXN0YXJ0KAorICAgIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgRmlsdGVyTW9kdWxlQ29udGV4dCwKKyAgICBQTkRJU19GSUxURVJfUkVTVEFSVF9QQVJBTUVURVJTIFJlc3RhcnRQYXJhbWV0ZXJzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRmlsdGVyIHJlc3RhcnQgcm91dGluZS4KKyAgICBTdGFydCB0aGUgZGF0YXBhdGggLSBiZWdpbiBzZW5kaW5nIGFuZCByZWNlaXZpbmcgTkJMcy4KKworQXJndW1lbnRzOgorCisgICAgRmlsdGVyTW9kdWxlQ29udGV4dCAtIHBvaW50ZXIgdG8gdGhlIGZpbHRlciBjb250ZXh0IHN0dWN0dXJlLgorICAgIFJlc3RhcnRQYXJhbWV0ZXJzICAgLSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXN0YXJ0IG9wZXJhdGlvbi4KKworUmV0dXJuIFZhbHVlOgorCisgICAgTkRJU19TVEFUVVNfU1VDQ0VTUzogaWYgZmlsdGVyIHJlc3RhcnRzIHN1Y2Nlc3NmdWxseQorICAgIE5ESVNfU1RBVFVTX1hYWDogT3RoZXJ3aXNlLgorCistLSovCit7CisgICAgTlRTVEFUVVMgICAgICAgICAgICBOdFN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIE5ESVNfU1RBVFVTICAgICAgICAgTmRpc1N0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgUE1TX0ZJTFRFUiAgICAgICAgICBwRmlsdGVyID0gKFBNU19GSUxURVIpRmlsdGVyTW9kdWxlQ29udGV4dDsKKyAgICBQVk9JRCAgICAgICAgICAgICAgIFNwaW5lbENhcHNEYXRhQnVmZmVyID0gTlVMTDsKKyAgICBjb25zdCB1aW50OF90KiAgICAgIFNwaW5lbENhcHNQdHIgPSBOVUxMOworICAgIHNwaW5lbF9zaXplX3QgICAgICAgU3BpbmVsQ2Fwc0xlbiA9IDA7CisgICAgTkxfSU5URVJGQUNFX0tFWSAgICBrZXkgPSB7MH07CisgICAgTkxfSU5URVJGQUNFX1JXICAgICBpbnRlcmZhY2VSdzsKKyAgICBVTE9ORyAgICAgICAgICAgICAgIFRocmVhZE9uSG9zdCA9IFRSVUU7CisKKyAgICBQTkRJU19SRVNUQVJUX0dFTkVSQUxfQVRUUklCVVRFUyBOZGlzR2VuZXJhbEF0dHJpYnV0ZXM7CisgICAgUE5ESVNfUkVTVEFSVF9BVFRSSUJVVEVTICAgICAgICAgTmRpc1Jlc3RhcnRBdHRyaWJ1dGVzOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyOiAlcCIsIEZpbHRlck1vZHVsZUNvbnRleHQpOworCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPlN0YXRlID09IEZpbHRlclBhdXNlZCk7CisKKyAgICBOZGlzUmVzdGFydEF0dHJpYnV0ZXMgPSBSZXN0YXJ0UGFyYW1ldGVycy0+UmVzdGFydEF0dHJpYnV0ZXM7CisKKyAgICAvLworICAgIC8vIElmIE5kaXNSZXN0YXJ0QXR0cmlidXRlcyBpcyBub3QgTlVMTCwgdGhlbiB0aGUgZmlsdGVyIGNhbiBtb2RpZnkgZ2VuZXJpYyAKKyAgICAvLyBhdHRyaWJ1dGVzIGFuZCBhZGQgbmV3IG1lZGlhIHNwZWNpZmljIGluZm8gYXR0cmlidXRlcyBhdCB0aGUgZW5kLiAKKyAgICAvLyBPdGhlcndpc2UsIGlmIE5kaXNSZXN0YXJ0QXR0cmlidXRlcyBpcyBOVUxMLCB0aGUgZmlsdGVyIHNob3VsZCBub3QgdHJ5IHRvIAorICAgIC8vIG1vZGlmeS9hZGQgYXR0cmlidXRlcy4KKyAgICAvLworICAgIGlmIChOZGlzUmVzdGFydEF0dHJpYnV0ZXMgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIEFTU0VSVChOZGlzUmVzdGFydEF0dHJpYnV0ZXMtPk9pZCA9PSBPSURfR0VOX01JTklQT1JUX1JFU1RBUlRfQVRUUklCVVRFUyk7CisKKyAgICAgICAgTmRpc0dlbmVyYWxBdHRyaWJ1dGVzID0gKFBORElTX1JFU1RBUlRfR0VORVJBTF9BVFRSSUJVVEVTKU5kaXNSZXN0YXJ0QXR0cmlidXRlcy0+RGF0YTsKKworICAgICAgICAvLworICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjaGFuZ2UgYW55IGF0dHJpYnV0ZXMuIEZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgLy8gZHJpdmVyIGNhbiBjaGFuZ2UgdGhlIGN1cnJlbnQgTUFDIGFkZHJlc3MgaGVyZS4gT3IgdGhlIGRyaXZlciBjYW4gYWRkCisgICAgICAgIC8vIG1lZGlhIHNwZWNpZmljIGluZm8gYXR0cmlidXRlcy4KKyAgICAgICAgLy8KKyAgICAgICAgTmRpc0dlbmVyYWxBdHRyaWJ1dGVzLT5Mb29rYWhlYWRTaXplID0gMTI4OworICAgIH0KKworICAgIC8vIEluaXRpYWxpemUgdGhlIFNwaW5lbCBjb21tYW5kIHByb2Nlc3NpbmcKKyAgICBOZGlzU3RhdHVzID0gb3RMd2ZDbWRJbml0aWFsaXplKHBGaWx0ZXIpOworICAgIGlmIChOZGlzU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIm90THdmQ21kSW5pdGlhbGl6ZSBmYWlsZWQsICUhTkRJU19TVEFUVVMhIiwgTmRpc1N0YXR1cyk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBRdWVyeSB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcworICAgIE50U3RhdHVzID0gb3RMd2ZDbWRHZXRQcm9wKHBGaWx0ZXIsICZTcGluZWxDYXBzRGF0YUJ1ZmZlciwgU1BJTkVMX1BST1BfQ0FQUywgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywgJlNwaW5lbENhcHNQdHIsICZTcGluZWxDYXBzTGVuKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1MoTnRTdGF0dXMpKQorICAgIHsKKyAgICAgICAgTmRpc1N0YXR1cyA9IE5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQ7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIHF1ZXJ5IFNQSU5FTF9QUk9QX0NBUFMsICUhU1RBVFVTISIsIE50U3RhdHVzKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIEl0ZXJhdGUgYW5kIHByb2Nlc3MgcmV0dXJuZWQgY2FwYWJpbGl0aWVzCisgICAgTlRfQVNTRVJUKFNwaW5lbENhcHNEYXRhQnVmZmVyKTsKKyAgICB3aGlsZSAoU3BpbmVsQ2Fwc0xlbiA+IDApCisgICAgeworICAgICAgICBVTE9ORyBTcGluZWxDYXAgPSAwOworICAgICAgICBzcGluZWxfc3NpemVfdCBsZW4gPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKFNwaW5lbENhcHNQdHIsIFNwaW5lbENhcHNMZW4sIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLCAmU3BpbmVsQ2FwKTsKKyAgICAgICAgaWYgKGxlbiA8IDEpIGJyZWFrOworICAgICAgICBTcGluZWxDYXBzTGVuIC09IChzcGluZWxfc2l6ZV90KWxlbjsKKyAgICAgICAgU3BpbmVsQ2Fwc1B0ciArPSBsZW47CisKKyAgICAgICAgc3dpdGNoIChTcGluZWxDYXApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBTUElORUxfQ0FQX01BQ19SQVc6CisgICAgICAgICAgICBwRmlsdGVyLT5EZXZpY2VDYXBhYmlsaXRpZXMgfD0gT1RMV0ZfREVWSUNFX0NBUF9SQURJTzsKKyAgICAgICAgICAgIHBGaWx0ZXItPkRldmljZUNhcGFiaWxpdGllcyB8PSBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX0FDS19USU1FT1VUOworICAgICAgICAgICAgcEZpbHRlci0+RGV2aWNlQ2FwYWJpbGl0aWVzIHw9IE9UTFdGX0RFVklDRV9DQVBfUkFESU9fTUFDX1JFVFJZX0FORF9DT0xMSVNJT05fQVZPSURBTkNFOworICAgICAgICAgICAgcEZpbHRlci0+RGV2aWNlQ2FwYWJpbGl0aWVzIHw9IE9UTFdGX0RFVklDRV9DQVBfUkFESU9fRU5FUkdZX1NDQU47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTUElORUxfQ0FQX05FVF9USFJFQURfMV8wOgorICAgICAgICAgICAgcEZpbHRlci0+RGV2aWNlQ2FwYWJpbGl0aWVzIHw9IE9UTFdGX0RFVklDRV9DQVBfVEhSRUFEXzFfMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIHN0YXRlIGluZGljYXRpbmcgd2hlcmUgd2Ugc2hvdWxkIGJlIHJ1bm5pbmcgdGhlIFRocmVhZCBsb2dpYyAoSG9zdCBvciBEZXZpY2UpLgorICAgIGlmICghTlRfU1VDQ0VTUyhHZXRSZWdEV09SRFZhbHVlKHBGaWx0ZXIsIEwiUnVuT25Ib3N0IiwgJlRocmVhZE9uSG9zdCkpKQorICAgIHsKKyAgICAgICAgLy8gRGVmYXVsdCB0byBydW5uaW5nIG9uIHRoZSBob3N0IGlmIHRoZSBrZXkgaXNuJ3QgcHJlc2VudAorICAgICAgICBUaHJlYWRPbkhvc3QgPSBUUlVFOworICAgICAgICBTZXRSZWdEV09SRFZhbHVlKHBGaWx0ZXIsIEwiUnVuT25Ib3N0IiwgVGhyZWFkT25Ib3N0KTsKKyAgICB9CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyOiAlcCBpbml0aWFsaXppbmcgVGhyZWFkT25Ib3N0PSVkIiwgRmlsdGVyTW9kdWxlQ29udGV4dCwgVGhyZWFkT25Ib3N0KTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIHByb2Nlc3NpbmcgbG9naWMKKyAgICBpZiAoVGhyZWFkT25Ib3N0KQorICAgIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoZSBkZXZpY2UgaGFzIHRoZSBjYXBhYmlsaXRpZXMgdG8gc3VwcG9ydCByYXcgcmFkaW8gY29tbWFuZHMKKyAgICAgICAgaWYgKChwRmlsdGVyLT5EZXZpY2VDYXBhYmlsaXRpZXMgJiBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBzdGFydCBiZWNhdXNlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgcmF3IHJhZGlvIGNvbW1hbmRzIik7CisgICAgICAgICAgICBOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIHBGaWx0ZXItPkRldmljZVN0YXR1cyA9IE9UTFdGX0RFVklDRV9TVEFUVVNfUkFESU9fTU9ERTsKKyAgICAgICAgTnRTdGF0dXMgPSBvdEx3ZkluaXRpYWxpemVUaHJlYWRNb2RlKHBGaWx0ZXIpOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoTnRTdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIm90THdmSW5pdGlhbGl6ZVRocmVhZE1vZGUgZmFpbGVkLCAlIVNUQVRVUyEiLCBOdFN0YXR1cyk7CisgICAgICAgICAgICBOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgICAgIHBGaWx0ZXItPkRldmljZVN0YXR1cyA9IE9UTFdGX0RFVklDRV9TVEFUVVNfVU5JTlRJQUxJWkVEOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIEVuc3VyZSB0aGUgZGV2aWNlIGhhcyB0aGUgY2FwYWJpbGl0aWVzIHRvIHN1cHBvcnQgVGhyZWFkIGNvbW1hbmRzCisgICAgICAgIGlmICgocEZpbHRlci0+RGV2aWNlQ2FwYWJpbGl0aWVzICYgT1RMV0ZfREVWSUNFX0NBUF9USFJFQURfMV8wKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBzdGFydCBiZWNhdXNlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgdGhyZWFkIGNvbW1hbmRzIik7CisgICAgICAgICAgICBOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIHBGaWx0ZXItPkRldmljZVN0YXR1cyA9IE9UTFdGX0RFVklDRV9TVEFUVVNfVEhSRUFEX01PREU7CisgICAgICAgIE50U3RhdHVzID0gb3RMd2ZUdW5Jbml0aWFsaXplKHBGaWx0ZXIpOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoTnRTdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIm90THdmSW5pdGlhbGl6ZVR1bm5lbE1vZGUgZmFpbGVkLCAlIVNUQVRVUyEiLCBOdFN0YXR1cyk7CisgICAgICAgICAgICBOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgICAgIHBGaWx0ZXItPkRldmljZVN0YXR1cyA9IE9UTFdGX0RFVklDRV9TVEFUVVNfVU5JTlRJQUxJWkVEOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIERBRCBhbmQgTmVpZ2hib3IgYWR2ZXJ0aXNlbWVudHMKKyAgICAvLworICAgIGtleS5MdWlkID0gcEZpbHRlci0+SW50ZXJmYWNlTHVpZDsKKyAgICBObEluaXRpYWxpemVJbnRlcmZhY2VSdygmaW50ZXJmYWNlUncpOworICAgIGludGVyZmFjZVJ3LkRhZFRyYW5zbWl0cyA9IDA7CisgICAgaW50ZXJmYWNlUncuU2VuZFVuc29saWNpdGVkTmVpZ2hib3JBZHZlcnRpc2VtZW50T25EYWQgPSBGQUxTRTsKKyAgCisgICAgTnRTdGF0dXMgPQorICAgICAgICBOc2lTZXRBbGxQYXJhbWV0ZXJzKAorICAgICAgICAgICAgTnNpQWN0aXZlLAorICAgICAgICAgICAgTnNpU2V0RGVmYXVsdCwKKyAgICAgICAgICAgICZOUElfTVNfSVBWNl9NT0RVTEVJRCwKKyAgICAgICAgICAgIE5sSW50ZXJmYWNlT2JqZWN0LAorICAgICAgICAgICAgJmtleSwKKyAgICAgICAgICAgIHNpemVvZihrZXkpLAorICAgICAgICAgICAgJmludGVyZmFjZVJ3LAorICAgICAgICAgICAgc2l6ZW9mKGludGVyZmFjZVJ3KSk7CisgICAgaWYgKCFOVF9TVUNDRVNTKE50U3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiTnNpU2V0QWxsUGFyYW1ldGVycyAoTmxJbnRlcmZhY2VPYmplY3QpIGZhaWxlZCwgJSFTVEFUVVMhIiwgTnRTdGF0dXMpOworICAgICAgICBOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBleHRlcm5hbCByZWZlcmVuY2VzIHRvIHRoZSBmaWx0ZXIKKyAgICAvLworICAgIEV4UmVJbml0aWFsaXplUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPkV4dGVybmFsUmVmcyk7CisKKyAgICAvLworICAgIC8vIElmIGV2ZXJ5dGhpbmcgaXMgT0ssIHNldCB0aGUgZmlsdGVyIGluIHJ1bm5pbmcgc3RhdGUuCisgICAgLy8KKyAgICBwRmlsdGVyLT5TdGF0ZSA9IEZpbHRlclJ1bm5pbmc7IC8vIHdoZW4gc3VjY2Vzc2Z1bAorICAgIG90THdmTm90aWZ5RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlKHBGaWx0ZXIsIFRSVUUpOworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBhcnJpdmFsLCBGaWx0ZXI9JXAiLCAmcEZpbHRlci0+SW50ZXJmYWNlR3VpZCwgcEZpbHRlcik7CisKK2V4aXQ6CisKKyAgICAvLworICAgIC8vIEVuc3VyZSB0aGUgc3RhdGUgaXMgUGF1c2VkIGlmIHJlc3RhcnQgZmFpbGVkLgorICAgIC8vCisgICAgaWYgKE5kaXNTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHBGaWx0ZXItPlN0YXRlID0gRmlsdGVyUGF1c2VkOworCisgICAgICAgIGlmIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19SQURJT19NT0RFKQorICAgICAgICB7CisgICAgICAgICAgICBvdEx3ZlVuaW5pdGlhbGl6ZVRocmVhZE1vZGUocEZpbHRlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocEZpbHRlci0+RGV2aWNlU3RhdHVzID09IE9UTFdGX0RFVklDRV9TVEFUVVNfVEhSRUFEX01PREUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90THdmVHVuVW5pbml0aWFsaXplKHBGaWx0ZXIpOworICAgICAgICB9CisKKyAgICAgICAgcEZpbHRlci0+RGV2aWNlU3RhdHVzID0gT1RMV0ZfREVWSUNFX1NUQVRVU19VTklOVElBTElaRUQ7CisKKyAgICAgICAgLy8gQ2xlYW4gdXAgU3BpbmVsIGNvbW1hbmQgcHJvY2Vzc2luZworICAgICAgICBvdEx3ZkNtZFVuaW5pdGlhbGl6ZShwRmlsdGVyKTsKKyAgICB9CisKKyAgICAvLyBGcmVlIHRoZSBidWZmZXIgZm9yIHRoZSBjYXBhYmlsaXRpZXMgd2UgcXVlcmllZAorICAgIGlmIChTcGluZWxDYXBzRGF0YUJ1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgRklMVEVSX0ZSRUVfTUVNKFNwaW5lbENhcHNEYXRhQnVmZmVyKTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIE5kaXNTdGF0dXMpOworICAgIHJldHVybiBOZGlzU3RhdHVzOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitORElTX1NUQVRVUworRmlsdGVyUGF1c2UoCisgICAgTkRJU19IQU5ETEUgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJNb2R1bGVDb250ZXh0LAorICAgIFBORElTX0ZJTFRFUl9QQVVTRV9QQVJBTUVURVJTICAgUGF1c2VQYXJhbWV0ZXJzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRmlsdGVyIHBhdXNlIHJvdXRpbmUuCisgICAgQ29tcGxldGUgYWxsIHRoZSBvdXRzdGFuZGluZyBzZW5kcyBhbmQgcXVldWVkIHNlbmRzLAorICAgIHdhaXQgZm9yIGFsbCB0aGUgb3V0c3RhbmRpbmcgcmVjdnMgdG8gYmUgcmV0dXJuZWQKKyAgICBhbmQgcmV0dXJuIGFsbCB0aGUgcXVldWVkIHJlY2VpdmVzLgorCitBcmd1bWVudHM6CisKKyAgICBGaWx0ZXJNb2R1bGVDb250ZXh0IC0gcG9pbnRlciB0byB0aGUgZmlsdGVyIGNvbnRleHQgc3R1Y3R1cmUKKyAgICBQYXVzZVBhcmFtZXRlcnMgICAgIC0gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGF1c2UKKworUmV0dXJuIFZhbHVlOgorCisgICAgTkRJU19TVEFUVVNfU1VDQ0VTUyBpZiBmaWx0ZXIgcGF1c2VzIHN1Y2Nlc3NmdWxseSwgTkRJU19TVEFUVVNfUEVORElORworICAgIGlmIG5vdC4gIE5vIG90aGVyIHJldHVybiB2YWx1ZSBpcyBhbGxvd2VkIChwYXVzZSBtdXN0IHN1Y2NlZWQsIGV2ZW50dWFsbHkpLgorCitOLkIuOiBXaGVuIHRoZSBmaWx0ZXIgaXMgaW4gUGF1c2luZyBzdGF0ZSwgaXQgY2FuIHN0aWxsIHByb2Nlc3MgT0lEIHJlcXVlc3RzLCAKKyAgICBjb21wbGV0ZSBzZW5kaW5nLCBhbmQgcmV0dXJuaW5nIHBhY2tldHMgdG8gTkRJUywgYW5kIGFsc28gaW5kaWNhdGUgc3RhdHVzLgorICAgIEFmdGVyIHRoaXMgZnVuY3Rpb24gY29tcGxldGVzLCB0aGUgZmlsdGVyIG11c3Qgbm90IGF0dGVtcHQgdG8gc2VuZCBvciAKKyAgICByZWNlaXZlIHBhY2tldHMsIGJ1dCBpdCBtYXkgc3RpbGwgcHJvY2VzcyBPSUQgcmVxdWVzdHMgYW5kIHN0YXR1cyAKKyAgICBpbmRpY2F0aW9ucy4KKworLS0qLworeworICAgIFBNU19GSUxURVIgICAgICBwRmlsdGVyID0gKFBNU19GSUxURVIpKEZpbHRlck1vZHVsZUNvbnRleHQpOworICAgIE5ESVNfU1RBVFVTICAgICBTdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoUGF1c2VQYXJhbWV0ZXJzKTsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIkZpbHRlcjogJXAiLCBGaWx0ZXJNb2R1bGVDb250ZXh0KTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBmbGFnIHRoYXQgdGhlIGZpbHRlciBpcyBnb2luZyB0byBwYXVzZQorICAgIC8vCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPlN0YXRlID09IEZpbHRlclJ1bm5pbmcpOworICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJkZpbHRlckxpc3RMb2NrKTsKKyAgICBwRmlsdGVyLT5TdGF0ZSA9IEZpbHRlclBhdXNpbmc7CisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgLy8KKyAgICAvLyBTZW5kIGZpbmFsIG5vdGlmaWNhdGlvbiBvZiBpbnRlcmZhY2UgcmVtb3ZhbAorICAgIC8vCisgICAgb3RMd2ZOb3RpZnlEZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2UocEZpbHRlciwgRkFMU0UpOworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISByZW1vdmFsLiIsICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSBleHRlcm5hbCByZWZlcmVuY2VzIGFuZCB3YWl0IGZvciBleGlzdGluZyBjYWxscyB0byBjb21wbGV0ZQorICAgIC8vCisgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkRpc2FibGluZyBhbmQgd2FpdGluZyBmb3IgZXh0ZXJuYWwgcmVmZXJlbmNlcyB0byByZWxlYXNlIik7CisgICAgRXhXYWl0Rm9yUnVuZG93blByb3RlY3Rpb25SZWxlYXNlKCZwRmlsdGVyLT5FeHRlcm5hbFJlZnMpOworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJFeHRlcm5hbCByZWZlcmVuY2VzIHJlbGVhc2VkLiIpOworCisgICAgLy8KKyAgICAvLyBDbGVhbiB1cCBiYXNlZCBvbiB0aGUgZGV2aWNlIG1vZGUKKyAgICAvLworICAgIGlmIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19SQURJT19NT0RFKQorICAgIHsKKyAgICAgICAgb3RMd2ZVbmluaXRpYWxpemVUaHJlYWRNb2RlKHBGaWx0ZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19USFJFQURfTU9ERSkKKyAgICB7CisgICAgICAgIG90THdmVHVuVW5pbml0aWFsaXplKHBGaWx0ZXIpOworICAgIH0KKworICAgIHBGaWx0ZXItPkRldmljZVN0YXR1cyA9IE9UTFdGX0RFVklDRV9TVEFUVVNfVU5JTlRJQUxJWkVEOworCisgICAgLy8KKyAgICAvLyBDbGVhbiB1cCB0aGUgU3BpbmVsIGNvbW1hbmQgcHJvY2Vzc2luZworICAgIC8vCisgICAgb3RMd2ZDbWRVbmluaXRpYWxpemUocEZpbHRlcik7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgc3RhdGUgYmFjayB0byBQYXVzZWQgbm93IHRoYXQgd2UgYXJlIGRvbmUKKyAgICAvLworICAgIHBGaWx0ZXItPlN0YXRlID0gRmlsdGVyUGF1c2VkOworCisgICAgTG9nRnVuY0V4aXRORElTKERSSVZFUl9ERUZBVUxULCBTdGF0dXMpOworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK1ZPSUQKK0ZpbHRlclN0YXR1cygKKyAgICBORElTX0hBTkRMRSAgICAgICAgICAgICBGaWx0ZXJNb2R1bGVDb250ZXh0LAorICAgIFBORElTX1NUQVRVU19JTkRJQ0FUSU9OIFN0YXR1c0luZGljYXRpb24KKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBTdGF0dXMgaW5kaWNhdGlvbiBoYW5kbGVyCisKK0FyZ3VtZW50czoKKworICAgIEZpbHRlck1vZHVsZUNvbnRleHQgICAgIC0gb3VyIGZpbHRlciBjb250ZXh0CisgICAgU3RhdHVzSW5kaWNhdGlvbiAgICAgICAgLSB0aGUgc3RhdHVzIGJlaW5nIGluZGljYXRlZAorCitOT1RFOiBjYWxsZWQgYXQgPD0gRElTUEFUQ0hfTEVWRUwKKworICBGSUxURVIgZHJpdmVyIG1heSBjYWxsIE5kaXNGSW5kaWNhdGVTdGF0dXMgdG8gZ2VuZXJhdGUgYSBzdGF0dXMgaW5kaWNhdGlvbiB0bworICBhbGwgaGlnaGVyIGxheWVyIG1vZHVsZXMuCisKKy0tKi8KK3sKKyAgICBQTVNfRklMVEVSICAgICAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXI6ICVwLCBJbmRpY2F0ZVN0YXR1czogJTh4IiwgRmlsdGVyTW9kdWxlQ29udGV4dCwgU3RhdHVzSW5kaWNhdGlvbi0+U3RhdHVzQ29kZSk7CisKKyAgICBpZiAoU3RhdHVzSW5kaWNhdGlvbi0+U3RhdHVzQ29kZSA9PSBORElTX1NUQVRVU19MSU5LX1NUQVRFKQorICAgIHsKKyAgICAgICAgUE5ESVNfTElOS19TVEFURSBMaW5rU3RhdGUgPSAoUE5ESVNfTElOS19TVEFURSlTdGF0dXNJbmRpY2F0aW9uLT5TdGF0dXNCdWZmZXI7CisKKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlcjogJXAsIE1lZGlhQ29ubmVjdFN0YXRlOiAldSIsIEZpbHRlck1vZHVsZUNvbnRleHQsIExpbmtTdGF0ZS0+TWVkaWFDb25uZWN0U3RhdGUpOworCisgICAgICAgIC8vIENhY2hlIHRoZSBsaW5rIHN0YXRlIGZyb20gdGhlIG1pbmlwb3J0CisgICAgICAgIG1lbWNweSgmcEZpbHRlci0+TWluaXBvcnRMaW5rU3RhdGUsIExpbmtTdGF0ZSwgc2l6ZW9mKE5ESVNfTElOS19TVEFURSkpOworICAgIH0KKworICAgIE5kaXNGSW5kaWNhdGVTdGF0dXMocEZpbHRlci0+RmlsdGVySGFuZGxlLCBTdGF0dXNJbmRpY2F0aW9uKTsKKyAgICAKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKKy8vIEluZGljYXRlIGEgY2hhbmdlIG9mIHRoZSBsaW5rIHN0YXRlCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZJbmRpY2F0ZUxpbmtTdGF0ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBORElTX01FRElBX0NPTk5FQ1RfU1RBVEUgICBNZWRpYVN0YXRlCisgICAgKQoreworICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IHN0YXRlLCBqdXN0IHJldHVybgorICAgIGlmIChwRmlsdGVyLT5NaW5pcG9ydExpbmtTdGF0ZS5NZWRpYUNvbm5lY3RTdGF0ZSA9PSBNZWRpYVN0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5ESVNfU1RBVFVTX0lORElDQVRJT04gU3RhdHVzSW5kaWNhdGlvbiA9IHswfTsKKyAgCisgICAgU3RhdHVzSW5kaWNhdGlvbi5IZWFkZXIuVHlwZSA9IE5ESVNfT0JKRUNUX1RZUEVfU1RBVFVTX0lORElDQVRJT047ICAKKyAgICBTdGF0dXNJbmRpY2F0aW9uLkhlYWRlci5SZXZpc2lvbiA9IE5ESVNfU1RBVFVTX0lORElDQVRJT05fUkVWSVNJT05fMTsgIAorICAgIFN0YXR1c0luZGljYXRpb24uSGVhZGVyLlNpemUgPSBzaXplb2YoTkRJU19TVEFUVVNfSU5ESUNBVElPTik7ICAKKyAgICBTdGF0dXNJbmRpY2F0aW9uLlNvdXJjZUhhbmRsZSA9IHBGaWx0ZXItPkZpbHRlckhhbmRsZTsgIAorICAgICAgCisgICAgU3RhdHVzSW5kaWNhdGlvbi5TdGF0dXNDb2RlID0gTkRJU19TVEFUVVNfTElOS19TVEFURTsgIAorICAgIFN0YXR1c0luZGljYXRpb24uU3RhdHVzQnVmZmVyID0gJnBGaWx0ZXItPk1pbmlwb3J0TGlua1N0YXRlOyAgCisgICAgU3RhdHVzSW5kaWNhdGlvbi5TdGF0dXNCdWZmZXJTaXplID0gc2l6ZW9mKHBGaWx0ZXItPk1pbmlwb3J0TGlua1N0YXRlKTsgIAorICAgICAgCisgICAgcEZpbHRlci0+TWluaXBvcnRMaW5rU3RhdGUuTWVkaWFDb25uZWN0U3RhdGUgPSBNZWRpYVN0YXRlOworICAgIAorICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBuZXcgbWVkaWEgc3RhdGU6ICV1IiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsIE1lZGlhU3RhdGUpOworICAKKyAgICBOZGlzRkluZGljYXRlU3RhdHVzKHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgJlN0YXR1c0luZGljYXRpb24pOyAgCit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlNldENvbXBhcnRtZW50KAorICAgIF9Jbl8gIFBNU19GSUxURVIgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICBfT3V0XyBDT01QQVJUTUVOVF9JRCogICAgICAgICAgIHBPcmlnaW5hbENvbXBhcnRtZW50CisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2V0cyB0aGUgY3VycmVudCB0aHJlYWQncyBjb21wYXJ0bWVudCBJRCB0byBtYXRjaCB0aGUgZmlsdGVyIGluc3RhbmNlLgorCistLSovCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICAvLyBNYWtlIHN1cmUgd2UgYXJlIGluIHRoZSByaWdodCBjb21wYXJ0bWVudAorICAgICpwT3JpZ2luYWxDb21wYXJ0bWVudCA9IE5kaXNHZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZCgpOworICAgIGlmICgqcE9yaWdpbmFsQ29tcGFydG1lbnQgIT0gcEZpbHRlci0+SW50ZXJmYWNlQ29tcGFydG1lbnRJRCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IE5kaXNTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZChwRmlsdGVyLT5JbnRlcmZhY2VDb21wYXJ0bWVudElEKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiTmRpc1NldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgICpwT3JpZ2luYWxDb21wYXJ0bWVudCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKnBPcmlnaW5hbENvbXBhcnRtZW50ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZlJldmVydENvbXBhcnRtZW50KAorICAgIF9Jbl8gQ09NUEFSVE1FTlRfSUQgICAgICAgICAgICAgT3JpZ2luYWxDb21wYXJ0bWVudAorICAgICkKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFJlc2V0cyB0aGUgY3VycmVudCB0aHJlYWQncyBjb21wYXJ0bWVudCBJRC4KKworLS0qLworeworICAgIC8vIFJldmVydCB0aGUgY29tcGFydG1lbnQgaWYgaXQgaXMgc2V0CisgICAgaWYgKE9yaWdpbmFsQ29tcGFydG1lbnQgIT0gMCkKKyAgICB7CisgICAgICAgIChWT0lEKU5kaXNTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZChPcmlnaW5hbENvbXBhcnRtZW50KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvZmlsdGVyLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhYjc4MgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9maWx0ZXIuaApAQCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIG90THdmIEZpbHRlciBpbnN0YW5jZS4KKyAqLworCisjaWZuZGVmIF9GSUxUX0gKKyNkZWZpbmUgX0ZJTFRfSAorCisvLyBUaGUgbWF4aW11bSBhbGxvd2VkIGFkZHJlc3NlcyBhbiBPcGVuVGhyZWFkIGludGVyZmFjZQorI2lmIChPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQgJiYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSKQorI2RlZmluZSBPVF9NQVhfQUREUkVTU0VTICg0ICsgT1BFTlRIUkVBRF9DT05GSUdfTlVNX1NMQUFDX0FERFJFU1NFUyArIDIgKiBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUykKKyNlbGlmIChPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSKQorI2RlZmluZSBPVF9NQVhfQUREUkVTU0VTICg0ICsgT1BFTlRIUkVBRF9DT05GSUdfTlVNX1NMQUFDX0FERFJFU1NFUyArIE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTKQorI2Vsc2UKKyNkZWZpbmUgT1RfTUFYX0FERFJFU1NFUyAoNCArIE9QRU5USFJFQURfQ09ORklHX05VTV9TTEFBQ19BRERSRVNTRVMpCisjZW5kaWYKKworI2RlZmluZSBPVExXRl9BTExPQ19UQUcgJ21GdG8nIC8vIG90Rm0KKworI2RlZmluZSBGSUxURVJfQUxMT0NfTUVNKF9OZGlzSGFuZGxlLCBfU2l6ZSkgXAorICAgIE5kaXNBbGxvY2F0ZU1lbW9yeVdpdGhUYWdQcmlvcml0eShfTmRpc0hhbmRsZSwgX1NpemUsIE9UTFdGX0FMTE9DX1RBRywgTG93UG9vbFByaW9yaXR5KQorI2RlZmluZSBGSUxURVJfRlJFRV9NRU0oX3BNZW0pICAgICAgTmRpc0ZyZWVNZW1vcnkoX3BNZW0sIDAsIDApCisjZGVmaW5lIEZJTFRFUl9JTklUX0xPQ0soX3BMb2NrKSAgICBOZGlzQWxsb2NhdGVTcGluTG9jayhfcExvY2spCisjZGVmaW5lIEZJTFRFUl9GUkVFX0xPQ0soX3BMb2NrKSAgICBOZGlzRnJlZVNwaW5Mb2NrKF9wTG9jaykKKworLy8gSGVscGVyIGZvciBsb2NraW5nIGFuIE5ESVMgbG9jaworI2RlZmluZSBGSUxURVJfQUNRVUlSRV9MT0NLKF9wTG9jaywgRGlzcGF0Y2hMZXZlbCkgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChEaXNwYXRjaExldmVsKSB7IE5kaXNEcHJBY3F1aXJlU3BpbkxvY2soX3BMb2NrKTsgfSAgXAorICAgIGVsc2UgICAgICAgICAgICAgICB7IE5kaXNBY3F1aXJlU3BpbkxvY2soX3BMb2NrKTsgICAgfSAgXAorfQorCisvLyBIZWxwZXIgZm9yIHJlbGVhc2luZyBhbiBORElTIGxvY2sKKyNkZWZpbmUgRklMVEVSX1JFTEVBU0VfTE9DSyhfcExvY2ssIERpc3BhdGNoTGV2ZWwpICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoRGlzcGF0Y2hMZXZlbCkgeyBOZGlzRHByUmVsZWFzZVNwaW5Mb2NrKF9wTG9jayk7IH0gIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgeyBOZGlzUmVsZWFzZVNwaW5Mb2NrKF9wTG9jayk7ICAgIH0gIFwKK30KKworLy8KKy8vIEVudW0gb2YgZmlsdGVyJ3Mgc3RhdGVzCisvLyBGaWx0ZXIgY2FuIG9ubHkgYmUgaW4gb25lIHN0YXRlIGF0IG9uZSB0aW1lCisvLwordHlwZWRlZiBlbnVtIF9GSUxURVJfU1RBVEUKK3sKKyAgICBGaWx0ZXJTdGF0ZVVuc3BlY2lmaWVkLAorICAgIEZpbHRlclBhdXNpbmcsCisgICAgRmlsdGVyUGF1c2VkLAorICAgIEZpbHRlclJ1bm5pbmcsCit9IEZJTFRFUl9TVEFURTsKKworLy8gRmxhZ3MgZm9yIHRoZSBkaWZmZXJlbnQgZGV2aWNlIGNhcGFiaWxpdGllcwordHlwZWRlZiBlbnVtIE9UTFdGX0RFVklDRV9DQVBBQklMSVRZCit7CisgICAgLy8gRGV2aWNlIHN1cHBvcnRzIHJhdyBSYWRpbyBjb21tYW5kcworICAgIE9UTFdGX0RFVklDRV9DQVBfUkFESU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAorCisgICAgLy8gRGV2aWNlIHN1cHBvcnRzIEFjayB0aW1lb3V0cyBpbnRlcm5hbGx5CisgICAgT1RMV0ZfREVWSUNFX0NBUF9SQURJT19BQ0tfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEsCisKKyAgICAvLyBEZXZpY2Ugc3VwcG9ydHMgTUFDIHJldHJ5IGxvZ2ljIGFuZCB0aW1lcnM7IGFzIHdlbGwgYXMgY29sbGlzaW9uIGF2b2lkYW5jZS4KKyAgICBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX01BQ19SRVRSWV9BTkRfQ09MTElTSU9OX0FWT0lEQU5DRSAgICA9IDEgPDwgMiwKKworICAgIC8vIERldmljZSBzdXBwb3J0cyB0aGUgZW5lcmd5IHNjYW4gY29tbWFuZC4KKyAgICBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX0VORVJHWV9TQ0FOICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKworICAgIC8vIERldmljZSBzdXBwb3J0IE5ldCAmIFRocmVhZCBjb21tYW5kcy4KKyAgICBPVExXRl9ERVZJQ0VfQ0FQX1RIUkVBRF8xXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTYsCisKK30gT1RMV0ZfREVWSUNFX0NBUEFCSUxJVFk7CisKKy8vIEZsYWdzIGZvciB0aGUgZGlmZmVyZW50IGRldmljZSBjYXBhYmlsaXRpZXMKK3R5cGVkZWYgZW51bSBPVExXRl9ERVZJQ0VfU1RBVFVTCit7CisgICAgT1RMV0ZfREVWSUNFX1NUQVRVU19VTklOVElBTElaRUQsICAgLy8gTm90IHlldCBpbml0aWFsemllZC4KKyAgICBPVExXRl9ERVZJQ0VfU1RBVFVTX1JBRElPX01PREUsICAgICAvLyBUaGUgZGV2aWNlIGlzIGp1c3Qgb3BlcmF0aW5nIGFzIGEgc2ltcGxlIHJhZGlvLgorICAgIE9UTFdGX0RFVklDRV9TVEFUVVNfVEhSRUFEX01PREUgICAgIC8vIFRoZSBkZXZpY2UgaXMgbWFuYWdpbmcgdGhlIFRocmVhZCBzdGFjay4KKworfSBPVExXRl9ERVZJQ0VfU1RBVFVTOworCisjZGVmaW5lIE9UX0VWRU5UX1RJTUVSX05PVF9SVU5OSU5HICAwCisjZGVmaW5lIE9UX0VWRU5UX1RJTUVSX1JVTk5JTkcgICAgICAxCisjZGVmaW5lIE9UX0VWRU5UX1RJTUVSX0ZJUkVEICAgICAgICAyCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19QTEFURk9STV9NRVNTQUdFX01BTkFHRU1FTlQKKwordHlwZWRlZiBzdHJ1Y3QgQnVmZmVyUG9vbAoreworICAgIHN0cnVjdCBCdWZmZXJQb29sKiBOZXh0OworICAgIHVpbnQ4X3QgQnVmZmVyc1swXTsKKworfSBCdWZmZXJQb29sOworCitlbnVtCit7CisgICAga1BhZ2VTaXplICAgICAgICAgICAgICAgID0gUEFHRV9TSVpFLAorICAgIGtQYWdlc1BlckJ1ZmZlclBvb2wgICAgICA9IDEsCisgICAga01heFBhZ2VzRm9yQnVmZmVyUG9vbHMgID0gNjQsCisgICAga01heEJ5dGVzRm9yQnVmZmVyUG9vbHMgID0ga1BhZ2VTaXplICoga01heFBhZ2VzRm9yQnVmZmVyUG9vbHMsCisKKyAgICBrRXN0aW1hdGVkQnVmZmVyU2l6ZSAgICAgPSAxMjgsICAgICAgICAgLy8gc2l6ZW9mKG90OjpCdWZmZXIpCisgICAga0VzdGltYXRlZEJ1ZmZlclBvb2xTaXplID0gKChrUGFnZVNpemUgKiBrUGFnZXNQZXJCdWZmZXJQb29sKSAtIHNpemVvZihCdWZmZXJQb29sKSkgLyBrRXN0aW1hdGVkQnVmZmVyU2l6ZSwKKyAgICBrRXN0aW1hdGVkTWF4QnVmZmVycyAgICAgPSBrTWF4UGFnZXNGb3JCdWZmZXJQb29scyAqIGtFc3RpbWF0ZWRCdWZmZXJQb29sU2l6ZQorfTsKKworI2VuZGlmCisKKy8vCisvLyBEZWZpbmUgdGhlIGZpbHRlciBzdHJ1Y3QKKy8vCit0eXBlZGVmIHN0cnVjdCBfTVNfRklMVEVSCit7CisgICAgLy8gRW50cnkgaW4gdGhlIGdsb2JhbCBsaXN0IG9mIEZpbHRlciBpbnN0YW5jZXMKKyAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAgIEZpbHRlck1vZHVsZUxpbms7CisKKyAgICAvLyBORElTIEhhbmRsZSBmb3IgdGhlIEZpbHRlciBpbnN0YW5jZQorICAgIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgRmlsdGVySGFuZGxlOworCisgICAgLy8gQ3VycmVudCBzdGF0ZSAoUnVubmluZyBvciBub3QpIG9mIHRoZSBGaWx0ZXIgaW5zdGFuY2UKKyAgICBGSUxURVJfU1RBVEUgICAgICAgICAgICAgICAgICAgIFN0YXRlOworCisgICAgLy8gSGFuZGxlIGZvciB1bmljYXN0IElQIGFkZHJlc3Mgbm90aWZpY2F0aW9ucworICAgIEhBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc0NoYW5nZUhhbmRsZTsKKworICAgIC8vCisgICAgLy8gSW50ZXJmYWNlIHZhcmlhYmxlcworICAgIC8vCisgICAgR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VHdWlkOworICAgIE5FVF9JRklOREVYICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlSW5kZXg7CisgICAgTkVUX0xVSUQgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VMdWlkOworICAgIENPTVBBUlRNRU5UX0lEICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlQ29tcGFydG1lbnRJRDsKKyAgICBORElTX1NUUklORyAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZUZyaWVuZGx5TmFtZTsKKyAgICBIQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVJlZ0tleTsKKworICAgIC8vCisgICAgLy8gTWluaXBvcnQgTGluayBTdGF0ZQorICAgIC8vCisgICAgTkRJU19MSU5LX1NUQVRFICAgICAgICAgICAgICAgICBNaW5pcG9ydExpbmtTdGF0ZTsKKworICAgIC8vCisgICAgLy8gRXh0ZXJuYWwgcmVmZXJlbmNlcyBtYW5hZ2VtZW50CisgICAgLy8gICBVc2VkIGZvciBJT0NUTHMsIFNlbmROQkxzLCBhbmQgQWRkcmVzcyBDaGFuZ2VkIGNhbGxiYWNrcworICAgIC8vCisgICAgRVhfUlVORE9XTl9SRUYgICAgICAgICAgICAgICAgICBFeHRlcm5hbFJlZnM7CisKKyAgICAvLworICAgIC8vIFNwaW5lbCBDb21tYW5kIFN0YXRlCisgICAgLy8KKyAgICBFWF9SVU5ET1dOX1JFRiAgICAgICAgICAgICAgICAgIGNtZFJ1bmRvd247CisgICAgTkRJU19TUElOX0xPQ0sgICAgICAgICAgICAgICAgICBjbWRMb2NrOworICAgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgY21kSGFuZGxlcnM7CisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRUSURzSW5Vc2U7CisgICAgc3BpbmVsX3RpZF90ICAgICAgICAgICAgICAgICAgICBjbWROZXh0VElEOworICAgIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgY21kTmJsUG9vbDsKKyNpZmRlZiBDT01NQU5EX0lOSVRfUkVUUlkKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZEluaXRUcnlDb3VudDsKKyNlbmRpZgorICAgIG90UGxhdFJlc2V0UmVhc29uICAgICAgICAgICAgICAgY21kUmVzZXRSZWFzb247CisgICAgS0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRSZXNldENvbXBsZXRlRXZlbnQ7CisKKyAgICAvLworICAgIC8vIERldmljZSBDYXBhYmlsaXRpZXMgLyBTdGF0ZQorICAgIC8vCisgICAgT1RMV0ZfREVWSUNFX0NBUEFCSUxJVFkgICAgICAgICBEZXZpY2VDYXBhYmlsaXRpZXM7CisgICAgT1RMV0ZfREVWSUNFX1NUQVRVUyAgICAgICAgICAgICBEZXZpY2VTdGF0dXM7CisKKyAgICAvLworICAgIC8vIE9wZW5UaHJlYWQgYWRkcmVzc2VzCisgICAgLy8KKyAgICBJTjZfQUREUiAgICAgICAgICAgICAgICAgICAgb3RDYWNoZWRBZGRyW09UX01BWF9BRERSRVNTRVNdOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBvdENhY2hlZEFkZHJDb3VudDsKKyAgICBJTjZfQUREUiAgICAgICAgICAgICAgICAgICAgb3RMaW5rTG9jYWxBZGRyOworICAgIG90TmV0aWZBZGRyZXNzICAgICAgICAgICAgICBvdEF1dG9BZGRyZXNzZXNbT1BFTlRIUkVBRF9DT05GSUdfTlVNX1NMQUFDX0FERFJFU1NFU107CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisgICAgb3REaGNwQWRkcmVzcyAgICAgICAgICAgICAgIG90RGhjcEFkZHJlc3Nlc1tPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFU107CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKKyAgICB1bmlvbgorICAgIHsKKyAgICBzdHJ1Y3QgLy8gVGhyZWFkIE1vZGUgVmFyaWFibGVzCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBPcGVuVGhyZWFkIEV2ZW50IHByb2Nlc3NpbmcKKyAgICAgICAgLy8KKyAgICAgICAgUFZPSUQgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50V29ya2VyVGhyZWFkOworICAgICAgICBLRVZFTlQgICAgICAgICAgICAgICAgICAgICAgRXZlbnRXb3JrZXJUaHJlYWRTdG9wRXZlbnQ7CisgICAgICAgIEtFVkVOVCAgICAgICAgICAgICAgICAgICAgICBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NBZGRyZXNzQ2hhbmdlczsKKyAgICAgICAgS0VWRU5UICAgICAgICAgICAgICAgICAgICAgIEV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc05CTHM7CisgICAgICAgIEtFVkVOVCAgICAgICAgICAgICAgICAgICAgICBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NNYWNGcmFtZXM7CisgICAgICAgIE5ESVNfU1BJTl9MT0NLICAgICAgICAgICAgICBFdmVudHNMb2NrOworICAgICAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgQWRkcmVzc0NoYW5nZXNIZWFkOworICAgICAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgTkJMc0hlYWQ7CisgICAgICAgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICBNYWNGcmFtZXNIZWFkOworICAgICAgICBMQVJHRV9JTlRFR0VSICAgICAgICAgICAgICAgTmV4dEFsYXJtVGlja0NvdW50OworICAgICAgICBLRVZFTlQgICAgICAgICAgICAgICAgICAgICAgRXZlbnRXb3JrZXJUaHJlYWRXYWl0VGltZVVwZGF0ZWQ7CisgICAgICAgIEtFVkVOVCAgICAgICAgICAgICAgICAgICAgICBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NUYXNrbGV0czsKKyAgICAgICAgUEVYX1RJTUVSICAgICAgICAgICAgICAgICAgIEV2ZW50SGlnaFByZWNpc2lvblRpbWVyOworICAgICAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRUaW1lclN0YXRlOworICAgICAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgRXZlbnRJcnBMaXN0SGVhZDsKKyAgICAgICAgS0VWRU5UICAgICAgICAgICAgICAgICAgICAgIEV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0lycDsKKyAgICAgICAgS0VWRU5UICAgICAgICAgICAgICAgICAgICAgIEV2ZW50V29ya2VyVGhyZWFkRW5lcmd5U2NhbkNvbXBsZXRlOworCisgICAgICAgIC8vCisgICAgICAgIC8vIE9wZW5UaHJlYWQgU2V0dGluZ3MgTWFuYWdlbWVudAorICAgICAgICAvLworICAgICAgICBIQU5ETEUgICAgICAgICAgICAgICAgICAgICAgb3RTZXR0aW5nc1JlZ0tleTsKKworICAgICAgICAvLworICAgICAgICAvLyBPcGVuVGhyZWFkIHN0YXRlIG1hbmFnZW1lbnQKKyAgICAgICAgLy8KKyAgICAgICAgb3REZXZpY2VSb2xlICAgICAgICAgICAgICAgIG90Q2FjaGVkUm9sZTsKKworICAgICAgICAvLworICAgICAgICAvLyBPcGVuVGhyZWFkIGRhdGEgcGF0aCBzdGF0ZQorICAgICAgICAvLworICAgICAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgU2VuZFBlbmRpbmc7CisgICAgICAgIEtFVkVOVCAgICAgICAgICAgICAgICAgICAgICBTZW5kTmV0QnVmZmVyTGlzdENvbXBsZXRlOworICAgIAorICAgICAgICAvLworICAgICAgICAvLyBPcGVuVGhyZWFkIHJhZGlvIHZhcmlhYmxlcworICAgICAgICAvLworICAgICAgICBvdFJhZGlvQ2FwcyAgICAgICAgICAgICAgICAgb3RSYWRpb0NhcGFiaWxpdGllczsKKyAgICAgICAgb3RSYWRpb1N0YXRlICAgICAgICAgICAgICAgIG90UmFkaW9TdGF0ZTsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIG90Q3VycmVudExpc3RlbkNoYW5uZWw7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICBvdFJlY2VpdmVNZXNzYWdlW09UX1JBRElPX0ZSQU1FX01BWF9TSVpFXTsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIG90VHJhbnNtaXRNZXNzYWdlW09UX1JBRElPX0ZSQU1FX01BWF9TSVpFXTsKKyAgICAgICAgb3RSYWRpb0ZyYW1lICAgICAgICAgICAgICAgIG90UmVjZWl2ZUZyYW1lOworICAgICAgICBvdFJhZGlvRnJhbWUgICAgICAgICAgICAgICAgb3RUcmFuc21pdEZyYW1lOworICAgICAgICBvdEVycm9yICAgICAgICAgICAgICAgICAgICAgb3RMYXN0VHJhbnNtaXRFcnJvcjsKKyAgICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIG90TGFzdFRyYW5zbWl0RnJhbWVQZW5kaW5nOworICAgICAgICBDSEFSICAgICAgICAgICAgICAgICAgICAgICAgb3RMYXN0RW5lcmd5U2Nhbk1heFJzc2k7CisKKyAgICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIG90UHJvbWlzY3VvdXM7CisgICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBvdFBhbklEOworICAgICAgICB1aW50NjRfdCAgICAgICAgICAgICAgICAgICAgb3RGYWN0b3J5QWRkcmVzczsKKyAgICAgICAgdWludDY0X3QgICAgICAgICAgICAgICAgICAgIG90RXh0ZW5kZWRBZGRyZXNzOworICAgICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgb3RTaG9ydEFkZHJlc3M7CisKKyAgICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIG90UGVuZGluZ01hY09mZmxvYWRFbmFibGVkOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UCisgICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBvdEJ1ZmZlclNpemU7ICAgICAgICAgICAgICAgLy8gQnl0ZXMgaW4gYSBzaW5nbGUgYnVmZmVyCisgICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBvdEJ1ZmZlclBvb2xCeXRlU2l6ZTsgICAgICAgLy8gQnl0ZXMgaW4gYSBidWZmZXIgcG9vbAorICAgICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgb3RCdWZmZXJQb29sQnVmZmVyQ291bnQ7ICAgIC8vIE51bWJlciBvZiBidWZmZXJzIGluIGEgcG9vbAorICAgICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgb3RCdWZmZXJzTGVmdDsgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBidWZmZXJzIGxlZnQgdG8gcmV0dXJuCisgICAgICAgIEJ1ZmZlclBvb2wqICAgICAgICAgICAgICAgICBvdEJ1ZmZlclBvb2xIZWFkOyAgICAgICAgICAgLy8gTGlzdCBvZiBidWZmZXIgcG9vbHMKKyAgICAgICAgb3RNZXNzYWdlKiAgICAgICAgICAgICAgICAgIG90RnJlZUJ1ZmZlcnM7ICAgICAgICAgICAgICAvLyBMaXN0IG9mIGJ1ZmZlcnMgdG8gcmV0dXJuCisjZW5kaWYKKworI2lmIERFQlVHX0FMTE9DCisgICAgICAgIC8vIFVzZWQgZm9yIHRyYWNraW5nIG1lbW9yeSBhbGxvY2F0aW9ucworICAgICAgICBIQU5ETEUgICAgICAgICAgICAgICAgICAgICAgb3RUaHJlYWRJZDsKKyAgICAgICAgdm9sYXRpbGUgTE9ORyAgICAgICAgICAgICAgIG90T3V0c3RhbmRpbmdBbGxvY2F0aW9uQ291bnQ7CisgICAgICAgIHZvbGF0aWxlIExPTkcgICAgICAgICAgICAgICBvdE91dHN0YW5kaW5nTWVtb3J5QWxsb2NhdGVkOworICAgICAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgb3RPdXRTdGFuZGluZ0FsbG9jYXRpb25zOworICAgICAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgb3RBbGxvY2F0aW9uSUQ7CisjZW5kaWYKKworICAgICAgICAvLworICAgICAgICAvLyBPcGVuVGhyZWFkIEpvaW5lciBWZW5kb3IgSW5mbworICAgICAgICAvLworICAgICAgICBjaGFyIG90VmVuZG9yTmFtZVtPUEVOVEhSRUFEX1ZFTkRPUl9OQU1FX01BWF9MRU5HVEggKyAxXTsKKyAgICAgICAgY2hhciBvdFZlbmRvck1vZGVsW09QRU5USFJFQURfVkVORE9SX01PREVMX01BWF9MRU5HVEggKyAxXTsKKyAgICAgICAgY2hhciBvdFZlbmRvclN3VmVyc2lvbltPUEVOVEhSRUFEX1ZFTkRPUl9TV19WRVJTSU9OX01BWF9MRU5HVEggKyAxXTsKKyAgICAgICAgY2hhciBvdFZlbmRvckRhdGFbT1BFTlRIUkVBRF9WRU5ET1JfREFUQV9NQVhfTEVOR1RIICsgMV07CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3BlblRocmVhZCBjb250ZXh0IGJ1ZmZlcgorICAgICAgICAvLworICAgICAgICBvdEluc3RhbmNlKiAgICAgICAgICAgICAgICAgb3RDdHg7CisgICAgICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICBvdEluc3RhbmNlU2l6ZTsKKyAgICAgICAgUFVDSEFSICAgICAgICAgICAgICAgICAgICAgIG90SW5zdGFuY2VCdWZmZXI7CisgICAgfTsKKyAgICBzdHJ1Y3QgLy8gVHVubmVsIE1vZGUgVmFyaWFibGVzCisgICAgeworICAgICAgICBQVk9JRCAgICAgICAgICAgICAgICAgICAgICAgVHVuV29ya2VyVGhyZWFkOworICAgICAgICBLRVZFTlQgICAgICAgICAgICAgICAgICAgICAgVHVuV29ya2VyVGhyZWFkU3RvcEV2ZW50OworICAgICAgICBLRVZFTlQgICAgICAgICAgICAgICAgICAgICAgVHVuV29ya2VyVGhyZWFkQWRkcmVzc0NoYW5nZWRFdmVudDsKKyAgICB9OworICAgIH07CisKK30gTVNfRklMVEVSLCAqIFBNU19GSUxURVI7CisKKy8vCisvLyBORElTIEZpbHRlciBGdW5jdGlvbnMKKy8vCisKK0ZJTFRFUl9BVFRBQ0ggRmlsdGVyQXR0YWNoOworRklMVEVSX0RFVEFDSCBGaWx0ZXJEZXRhY2g7CitGSUxURVJfUkVTVEFSVCBGaWx0ZXJSZXN0YXJ0OworRklMVEVSX1BBVVNFIEZpbHRlclBhdXNlOworRklMVEVSX1NUQVRVUyBGaWx0ZXJTdGF0dXM7CitGSUxURVJfU0VORF9ORVRfQlVGRkVSX0xJU1RTIEZpbHRlclNlbmROZXRCdWZmZXJMaXN0czsKK0ZJTFRFUl9SRVRVUk5fTkVUX0JVRkZFUl9MSVNUUyBGaWx0ZXJSZXR1cm5OZXRCdWZmZXJMaXN0czsKK0ZJTFRFUl9TRU5EX05FVF9CVUZGRVJfTElTVFNfQ09NUExFVEUgRmlsdGVyU2VuZE5ldEJ1ZmZlckxpc3RzQ29tcGxldGU7CitGSUxURVJfUkVDRUlWRV9ORVRfQlVGRkVSX0xJU1RTIEZpbHRlclJlY2VpdmVOZXRCdWZmZXJMaXN0czsKK0ZJTFRFUl9DQU5DRUxfU0VORF9ORVRfQlVGRkVSX0xJU1RTIEZpbHRlckNhbmNlbFNlbmROZXRCdWZmZXJMaXN0czsKKworLy8KKy8vIExpbmsgU3RhdGUgRnVuY3Rpb25zCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZJbmRpY2F0ZUxpbmtTdGF0ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBORElTX01FRElBX0NPTk5FQ1RfU1RBVEUgICBNZWRpYVN0YXRlCisgICAgKTsKKworLy8KKy8vIENvbXBhcnRtZW50IEZ1bmN0aW9ucworLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmU2V0Q29tcGFydG1lbnQoCisgICAgX0luXyAgUE1TX0ZJTFRFUiAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgIF9PdXRfIENPTVBBUlRNRU5UX0lEKiAgICAgICAgICAgcE9yaWdpbmFsQ29tcGFydG1lbnQKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZlJldmVydENvbXBhcnRtZW50KAorICAgIF9Jbl8gQ09NUEFSVE1FTlRfSUQgICAgICAgICAgICAgT3JpZ2luYWxDb21wYXJ0bWVudAorICAgICk7CisKKy8vCisvLyBBZGRyZXNzIEZ1bmN0aW9ucworLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorTkVUSU9BUElfQVBJXyAKK290THdmQWRkcmVzc0NoYW5nZUNhbGxiYWNrKAorICAgIF9Jbl8gUFZPSUQgQ2FsbGVyQ29udGV4dCwKKyAgICBfSW5fb3B0XyBQTUlCX1VOSUNBU1RJUEFERFJFU1NfUk9XIFJvdywKKyAgICBfSW5fIE1JQl9OT1RJRklDQVRJT05fVFlQRSBOb3RpZmljYXRpb25UeXBlCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdBZGRyZXNzQ2hhbmdlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIE1JQl9OT1RJRklDQVRJT05fVFlQRSAgTm90aWZpY2F0aW9uVHlwZSwKKyAgICBfSW5fIFBJTjZfQUREUiAgICAgICAgICAgICAgcEFkZHIKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUyAKK290THdmSW5pdGlhbGl6ZUFkZHJlc3NlcygKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQgCitvdEx3ZlJhZGlvQWRkcmVzc2VzVXBkYXRlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQgCitvdEx3ZlR1bkFkZHJlc3Nlc1VwZGF0ZWQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuLAorICAgIF9PdXRfIHVpbnQzMl90ICphTm90aWZGbGFncworICAgICk7CisKK2ludCAKK290THdmRmluZENhY2hlZEFkZHJJbmRleCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwgCisgICAgX0luXyBQSU42X0FERFIgYWRkcgorICAgICk7CisKKy8vCisvLyBUdW5uZWwgTG9naWMgRnVuY3Rpb25zCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitORElTX1NUQVRVUyAKK290THdmSW5pdGlhbGl6ZVR1bm5lbE1vZGUoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCit2b2lkIAorb3RMd2ZVbmluaXRpYWxpemVUdW5uZWxNb2RlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKTsKKworLy8KKy8vIExvZ2dpbmcgSGVscGVyCisvLworCisjaWZkZWYgTE9HX0JVRkZFUlMKK3ZvaWQKK290TG9nQnVmZmVyKAorICAgIF9Jbl9yZWFkc19ieXRlc18oQnVmZmVyTGVuZ3RoKSBQVUNIQVIgQnVmZmVyLAorICAgIF9Jbl8gICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9ORyAgQnVmZmVyTGVuZ3RoCisgICAgKTsKKyNlbmRpZgorCisvLworLy8gRGVidWcgSGVscGVycworLy8KKworI2lmIERFQlVHX0FMTE9DCisKK3R5cGVkZWYgc3RydWN0IF9PVF9BTExPQworeworICAgIExJU1RfRU5UUlkgTGluazsKKyAgICBMT05HIExlbmd0aDsKKyAgICBVTE9ORyBJRDsKK30gT1RfQUxMT0M7CisKK1BNU19GSUxURVIKK290THdmRmluZEZyb21DdXJyZW50VGhyZWFkKCk7CisKKyNlbmRpZgorCisjZW5kaWYgIC8vX0ZJTFRfSApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2ZpbHRlci5yYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9maWx0ZXIucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5YWQyYwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9maWx0ZXIucmMKQEAgLTAsMCArMSw0MCBAQAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxudHZlcnAuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiB0aGUgZm9sbG93aW5nIGxpbmVzIGFyZSBzcGVjaWZpYyB0byB0aGlzIGZpbGUgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBWRVJfRklMRVRZUEUsIFZFUl9GSUxFU1VCVFlQRSwgVkVSX0ZJTEVERVNDUklQVElPTl9TVFIKKyAqIGFuZCBWRVJfSU5URVJOQUxOQU1FX1NUUiBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyBDT01NT04uVkVSCisgKiBUaGUgc3RyaW5ncyBkb24ndCBuZWVkIGEgJ1wwJywgc2luY2UgY29tbW9uLnZlciBoYXMgdGhlbS4KKyAqLworI2RlZmluZSAgICBWRVJfRklMRVRZUEUgICAgVkZUX0RSVgorLyogcG9zc2libGUgdmFsdWVzOiAgICAgICAgVkZUX1VOS05PV04KKyAgICAgICAgICAgICAgICBWRlRfQVBQCisgICAgICAgICAgICAgICAgVkZUX0RMTAorICAgICAgICAgICAgICAgIFZGVF9EUlYKKyAgICAgICAgICAgICAgICBWRlRfRk9OVAorICAgICAgICAgICAgICAgIFZGVF9WWEQKKyAgICAgICAgICAgICAgICBWRlRfU1RBVElDX0xJQgorKi8KKyNkZWZpbmUgICAgVkVSX0ZJTEVTVUJUWVBFICAgIFZGVDJfRFJWX05FVFdPUksKKy8qIHBvc3NpYmxlIHZhbHVlcyAgICAgICAgVkZUMl9VTktOT1dOCisgICAgICAgICAgICAgICAgVkZUMl9EUlZfUFJJTlRFUgorICAgICAgICAgICAgICAgIFZGVDJfRFJWX0tFWUJPQVJECisgICAgICAgICAgICAgICAgVkZUMl9EUlZfTEFOR1VBR0UKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9ESVNQTEFZCisgICAgICAgICAgICAgICAgVkZUMl9EUlZfTU9VU0UKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9ORVRXT1JLCisgICAgICAgICAgICAgICAgVkZUMl9EUlZfU1lTVEVNCisgICAgICAgICAgICAgICAgVkZUMl9EUlZfSU5TVEFMTEFCTEUKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9TT1VORAorICAgICAgICAgICAgICAgIFZGVDJfRFJWX0NPTU0KKyovCisjZGVmaW5lIFZFUl9GSUxFREVTQ1JJUFRJT05fU1RSICAgICAib3RMd2YgTkRJUyA2LjAgRmlsdGVyIERyaXZlciIKKyNkZWZpbmUgVkVSX0lOVEVSTkFMTkFNRV9TVFIgICAgICAgICJvdEx3Zi5zeXMiCisjZGVmaW5lIFZFUl9PUklHSU5BTEZJTEVOQU1FX1NUUiAgICAib3RMd2Yuc3lzIgorI2RlZmluZSBWRVJfTEFOR05FVVRSQUwKKworI2luY2x1ZGUgImNvbW1vbi52ZXIiCisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9pb2NvbnRyb2wuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9pb2NvbnRyb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWIzNDNkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2lvY29udHJvbC5jCkBAIC0wLDAgKzEsNjI2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInByZWNvbXAuaCIKKyNpbmNsdWRlICJpb2NvbnRyb2wudG1oIgorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICBJcnAKKyAgICApOworCit0eXBlZGVmIHN0cnVjdCBfT1RMV0ZfSU9DVExfSEFORExFUgoreworICAgIGNvbnN0IGNoYXIqICAgICAgICAgICAgIE5hbWU7CisgICAgT1RMV0ZfT1RfSU9DVExfRlVOQyogICAgb3RGdW5jOworICAgIE9UTFdGX1RVTl9JT0NUTF9GVU5DKiAgIHR1bkZ1bmM7Cit9IE9UTFdGX0lPQ1RMX0hBTkRMRVI7CisKK09UTFdGX0lPQ1RMX0hBTkRMRVIgSW9DdGxzW10gPQoreworICAgIHsgIklPQ1RMX09UTFdGX09UX0VOQUJMRUQiLCAgICAgICAgICAgICAgICAgICAgIE5VTEwgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9JTlRFUkZBQ0UiLCAgICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdEludGVyZmFjZSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9USFJFQUQiLCAgICAgICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFRocmVhZCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9BQ1RJVkVfU0NBTiIsICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdEFjdGl2ZVNjYW4pIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfRElTQ09WRVIiLCAgICAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3REaXNjb3ZlcikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9DSEFOTkVMIiwgICAgICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdENoYW5uZWwpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ0hJTERfVElNRU9VVCIsICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RDaGlsZFRpbWVvdXQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfRVhURU5ERURfQUREUkVTUyIsICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RFeHRlbmRlZEFkZHJlc3MpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfRVhURU5ERURfUEFOSUQiLCAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RFeHRlbmRlZFBhbklkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0xFQURFUl9STE9DIiwgICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TGVhZGVyUmxvYykgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9MSU5LX01PREUiLCAgICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdExpbmtNb2RlKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX01BU1RFUl9LRVkiLCAgICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TWFzdGVyS2V5KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX01FU0hfTE9DQUxfRUlEIiwgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TWVzaExvY2FsRWlkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX01FU0hfTE9DQUxfUFJFRklYIiwgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TWVzaExvY2FsUHJlZml4KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX05FVFdPUktfREFUQV9MRUFERVIiLCAgICAgICAgIE5VTEwgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9ORVRXT1JLX0RBVEFfTE9DQUwiLCAgICAgICAgICBOVUxMIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfTkVUV09SS19OQU1FIiwgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3ROZXR3b3JrTmFtZSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9QQU5fSUQiLCAgICAgICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFBhbklkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1JPVVRFUl9ST0xMX0VOQUJMRUQiLCAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90Um91dGVyUm9sbEVuYWJsZWQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfU0hPUlRfQUREUkVTUyIsICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RTaG9ydEFkZHJlc3MpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfVU5JQ0FTVF9BRERSRVNTRVMiLCAgICAgICAgICAgTlVMTCB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0FDVElWRV9EQVRBU0VUIiwgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90QWN0aXZlRGF0YXNldCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9QRU5ESU5HX0RBVEFTRVQiLCAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdFBlbmRpbmdEYXRhc2V0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0xPQ0FMX0xFQURFUl9XRUlHSFQiLCAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TG9jYWxMZWFkZXJXZWlnaHQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQUREX0JPUkRFUl9ST1VURVIiLCAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RBZGRCb3JkZXJSb3V0ZXIpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUkVNT1ZFX0JPUkRFUl9ST1VURVIiLCAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSZW1vdmVCb3JkZXJSb3V0ZXIpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQUREX0VYVEVSTkFMX1JPVVRFIiwgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RBZGRFeHRlcm5hbFJvdXRlKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1JFTU9WRV9FWFRFUk5BTF9ST1VURSIsICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90UmVtb3ZlRXh0ZXJuYWxSb3V0ZSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9TRU5EX1NFUlZFUl9EQVRBIiwgICAgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdFNlbmRTZXJ2ZXJEYXRhKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NPTlRFWFRfSURfUkVVU0VfREVMQVkiLCAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90Q29udGV4dElkUmV1c2VEZWxheSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiIsICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdEtleVNlcXVlbmNlQ291bnRlcikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9ORVRXT1JLX0lEX1RJTUVPVVQiLCAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdE5ldHdvcmtJZFRpbWVvdXQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIiwgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1JFTEVBU0VfUk9VVEVSX0lEIiwgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90UmVsZWFzZVJvdXRlcklkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX01BQ19XSElURUxJU1RfRU5BQkxFRCIsICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TWFjV2hpdGVsaXN0RW5hYmxlZCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9BRERfTUFDX1dISVRFTElTVCIsICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdEFkZE1hY1doaXRlbGlzdCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9SRU1PVkVfTUFDX1dISVRFTElTVCIsICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFJlbW92ZU1hY1doaXRlbGlzdCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9NQUNfV0hJVEVMSVNUX0VOVFJZIiwgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdE1hY1doaXRlbGlzdEVudHJ5KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NMRUFSX01BQ19XSElURUxJU1QiLCAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90Q2xlYXJNYWNXaGl0ZWxpc3QpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfREVWSUNFX1JPTEUiLCAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3REZXZpY2VSb2xlKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NISUxEX0lORk9fQllfSUQiLCAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90Q2hpbGRJbmZvQnlJZCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9DSElMRF9JTkZPX0JZX0lOREVYIiwgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdENoaWxkSW5mb0J5SW5kZXgpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfRUlEX0NBQ0hFX0VOVFJZIiwgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RFaWRDYWNoZUVudHJ5KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0xFQURFUl9EQVRBIiwgICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90TGVhZGVyRGF0YSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9MRUFERVJfUk9VVEVSX0lEIiwgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdExlYWRlclJvdXRlcklkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0xFQURFUl9XRUlHSFQiLCAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TGVhZGVyV2VpZ2h0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX05FVFdPUktfREFUQV9WRVJTSU9OIiwgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TmV0d29ya0RhdGFWZXJzaW9uKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1BBUlRJVElPTl9JRCIsICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90UGFydGl0aW9uSWQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUkxPQzE2IiwgICAgICAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSbG9jMTYpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUk9VVEVSX0lEX1NFUVVFTkNFIiwgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RSb3V0ZXJJZFNlcXVlbmNlKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1JPVVRFUl9JTkZPIiwgICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90Um91dGVySW5mbykgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT04iLCBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFN0YWJsZU5ldHdvcmtEYXRhVmVyc2lvbikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9NQUNfQkxBQ0tMSVNUX0VOQUJMRUQiLCAgICAgICBSRUZfSU9DVExfRlVOQyhvdE1hY0JsYWNrbGlzdEVuYWJsZWQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQUREX01BQ19CTEFDS0xJU1QiLCAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RBZGRNYWNCbGFja2xpc3QpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUkVNT1ZFX01BQ19CTEFDS0xJU1QiLCAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RSZW1vdmVNYWNCbGFja2xpc3QpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfTUFDX0JMQUNLTElTVF9FTlRSWSIsICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RNYWNCbGFja2xpc3RFbnRyeSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9DTEVBUl9NQUNfQkxBQ0tMSVNUIiwgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdENsZWFyTWFjQmxhY2tsaXN0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX01BWF9UUkFOU01JVF9QT1dFUiIsICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90TWF4VHJhbnNtaXRQb3dlcikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9ORVhUX09OX01FU0hfUFJFRklYIiwgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdE5leHRPbk1lc2hQcmVmaXgpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUE9MTF9QRVJJT0QiLCAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RQb2xsUGVyaW9kKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0xPQ0FMX0xFQURFUl9QQVJUSVRJT05fSUQiLCAgIFJFRl9JT0NUTF9GVU5DKG90TG9jYWxMZWFkZXJQYXJ0aXRpb25JZCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9BU1NJR05fTElOS19RVUFMSVRZIiwgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdEFzc2lnbkxpbmtRdWFsaXR5KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1BMQVRGT1JNX1JFU0VUIiwgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90UGxhdGZvcm1SZXNldCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9QQVJFTlRfSU5GTyIsICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFBhcmVudEluZm8pIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfU0lOR0xFVE9OIiwgICAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RTaW5nbGV0b24pIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfTUFDX0NPVU5URVJTIiwgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RNYWNDb3VudGVycykgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9NQVhfQ0hJTERSRU4iLCAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdE1heENoaWxkcmVuKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX1NUQVJUIiwgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyU3RhcnQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfU1RPUCIsICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJTdG9wKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0pPSU5FUl9TVEFSVCIsICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90Sm9pbmVyU3RhcnQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfSk9JTkVSX1NUT1AiLCAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RKb2luZXJTdG9wKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0ZBQ1RPUllfRVVJNjQiLCAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90RmFjdG9yeUFzc2lnbmVkSWVlZUV1aTY0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0hBU0hfTUFDX0FERFJFU1MiLCAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90SGFzaE1hY0FkZHJlc3MpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQiLCAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ09NTUlTU0lPTkVSX1BBTklEX1FVRVJZIiwgICAgUkVGX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJQYW5JZFF1ZXJ5KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NPTU1JU1NJT05FUl9FTkVSR1lfU0NBTiIsICAgIFJFRl9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyRW5lcmd5U2NhbikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUiIsICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFJvdXRlclNlbGVjdGlvbkppdHRlcikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9KT0lORVJfVURQX1BPUlQiLCAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdEpvaW5lclVkcFBvcnQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfU0VORF9ESUFHTk9TVElDX0dFVCIsICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RTZW5kRGlhZ25vc3RpY0dldCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9TRU5EX0RJQUdOT1NUSUNfUkVTRVQiLCAgICAgICBSRUZfSU9DVExfRlVOQyhvdFNlbmREaWFnbm9zdGljUmVzZXQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfQUREX0pPSU5FUiIsICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJBZGRKb2luZXIpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfUkVNT1ZFX0pPSU5FUiIsICAgUkVGX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJSZW1vdmVKb2luZXIpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfUFJPVklTSU9OSU5HX1VSTCIsIFJFRl9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyUHJvdmlzaW9uaW5nVXJsKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX0FOTk9VTkNFX0JFR0lOIiwgIFJFRl9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9FTkVSR1lfU0NBTiIsICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdEVuZXJneVNjYW4pIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfU0VORF9BQ1RJVkVfR0VUIiwgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RTZW5kQWN0aXZlR2V0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1NFTkRfQUNUSVZFX1NFVCIsICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90U2VuZEFjdGl2ZVNldCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9TRU5EX1BFTkRJTkdfR0VUIiwgICAgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdFNlbmRQZW5kaW5nR2V0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1NFTkRfUEVORElOR19TRVQiLCAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90U2VuZFBlbmRpbmdTZXQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfU0VORF9NR01UX0NPTU1JU1NJT05FUl9HRVQiLCAgUkVGX0lPQ1RMX0ZVTkMob3RTZW5kTWdtdENvbW1pc3Npb25lckdldCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9TRU5EX01HTVRfQ09NTUlTU0lPTkVSX1NFVCIsICBSRUZfSU9DVExfRlVOQyhvdFNlbmRNZ210Q29tbWlzc2lvbmVyU2V0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0tFWV9TV0lUQ0hfR1VBUkRUSU1FIiwgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90S2V5U3dpdGNoR3VhcmR0aW1lKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0ZBQ1RPUllfUkVTRVQiLCAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90RmFjdG9yeVJlc2V0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1RIUkVBRF9BVVRPX1NUQVJUIiwgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90VGhyZWFkQXV0b1N0YXJ0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1BSRUZFUlJFRF9ST1VURVJfSUQiLCAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90VGhyZWFkUHJlZmVycmVkUm91dGVySWQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUFNLQyIsICAgICAgICAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RQU0tjKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1BBUkVOVF9QUklPUklUWSIsICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90UGFyZW50UHJpb3JpdHkpIH0sCit9OworCitzdGF0aWNfYXNzZXJ0KEFSUkFZU0laRShJb0N0bHMpID09IChNQVhfT1RMV0ZfSU9DVExfRlVOQ19DT0RFIC0gTUlOX09UTFdGX0lPQ1RMX0ZVTkNfQ09ERSkgKyAxLAorICAgICAgICAgICAgICAiVGhlIElvQ3RsIHN0cmluZ3Mgc2hvdWxkIGJlIHVwIHRvIGRhdGUgd2l0aCB0aGUgYWN0dWFsIElvQ3RsIGxpc3QuIik7CisKK2NvbnN0IGNoYXIqCitJb0N0bFN0cmluZygKKyAgICBVTE9ORyBJb0NvbnRyb2xDb2RlCispCit7CisgICAgVUxPTkcgRnVuY0NvZGUgPSAoKElvQ29udHJvbENvZGUgPj4gMikgJiAweEZGRikgLSAxMDA7CisgICAgcmV0dXJuIEZ1bmNDb2RlIDwgQVJSQVlTSVpFKElvQ3RscykgPyBJb0N0bHNbRnVuY0NvZGVdLk5hbWUgOiAiVU5LTk9XTiBJT0NUTCI7Cit9CisKKy8vIEhhbmRsZXMgcXVlcmllcyBmb3IgdGhlIGN1cnJlbnQgbGlzdCBvZiBUaHJlYWQgaW50ZXJmYWNlcworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxFbnVtZXJhdGVJbnRlcmZhY2VzKAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICBVTE9ORyBOZXdPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFBPVExXRl9JTlRFUkZBQ0VfTElTVCBwSW50ZXJmYWNlTGlzdCA9IChQT1RMV0ZfSU5URVJGQUNFX0xJU1QpT3V0QnVmZmVyOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0lPQ1RMKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0byB6ZXJvIG91dCB0aGUgb3V0cHV0IGZpcnN0CisgICAgUnRsWmVyb01lbW9yeShPdXRCdWZmZXIsICpPdXRCdWZmZXJMZW5ndGgpOworCisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgdGhlIGZpcnN0IHVpbnQxNl90CisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPCBzaXplb2YodWludDE2X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggaW50ZXJmYWNlIGFuZCBidWlsZCB1cCB0aGUgbGlzdCBvZiBydW5uaW5nIGludGVyZmFjZXMKKyAgICBmb3IgKFBMSVNUX0VOVFJZIExpbmsgPSBGaWx0ZXJNb2R1bGVMaXN0LkZsaW5rOyBMaW5rICE9ICZGaWx0ZXJNb2R1bGVMaXN0OyBMaW5rID0gTGluay0+RmxpbmspCisgICAgeworICAgICAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBDT05UQUlOSU5HX1JFQ09SRChMaW5rLCBNU19GSUxURVIsIEZpbHRlck1vZHVsZUxpbmspOworICAgICAgICBpZiAocEZpbHRlci0+U3RhdGUgIT0gRmlsdGVyUnVubmluZykgY29udGludWU7CisKKyAgICAgICAgUEdVSUQgcEludGVyZmFjZUd1aWQgPSAmcEludGVyZmFjZUxpc3QtPkludGVyZmFjZUd1aWRzW3BJbnRlcmZhY2VMaXN0LT5jSW50ZXJmYWNlR3VpZHNdOworICAgICAgICBwSW50ZXJmYWNlTGlzdC0+Y0ludGVyZmFjZUd1aWRzKys7CisKKyAgICAgICAgTmV3T3V0QnVmZmVyTGVuZ3RoID0KKyAgICAgICAgICAgIEZJRUxEX09GRlNFVChPVExXRl9JTlRFUkZBQ0VfTElTVCwgSW50ZXJmYWNlR3VpZHMpICsKKyAgICAgICAgICAgIHBJbnRlcmZhY2VMaXN0LT5jSW50ZXJmYWNlR3VpZHMgKiBzaXplb2YoR1VJRCk7CisKKyAgICAgICAgaWYgKE5ld091dEJ1ZmZlckxlbmd0aCA8PSAqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqcEludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKE5ld091dEJ1ZmZlckxlbmd0aCA+ICpPdXRCdWZmZXJMZW5ndGgpCisgICAgeworICAgICAgICBOZXdPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoVVNIT1JUKTsKKyAgICB9CisKK2Vycm9yOgorCisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IE5ld091dEJ1ZmZlckxlbmd0aDsKKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0lPQ1RMLCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworLy8gSGFuZGxlcyBxdWVyaWVzIGZvciB0aGUgZGV0YWlscyBvZiBhIHNwZWNpZmljIFRocmVhZCBpbnRlcmZhY2UKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsUXVlcnlJbnRlcmZhY2UoCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIFVMT05HICAgIE5ld091dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0lPQ1RMKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBmaXJzdCBVU0hPUlQKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPCBzaXplb2YoR1VJRCkgfHwgKk91dEJ1ZmZlckxlbmd0aCA8IHNpemVvZihPVExXRl9ERVZJQ0UpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgUEdVSUQgcEludGVyZmFjZUd1aWQgPSAoUEdVSUQpSW5CdWZmZXI7CisgICAgUE9UTFdGX0RFVklDRSBwRGV2aWNlID0gKFBPVExXRl9ERVZJQ0UpT3V0QnVmZmVyOworCisgICAgLy8gTG9vayB1cCB0aGUgaW50ZXJmYWNlCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RMd2ZGaW5kQW5kUmVmSW50ZXJmYWNlKHBJbnRlcmZhY2VHdWlkKTsKKyAgICBpZiAocEZpbHRlciA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0RFVklDRV9ET0VTX05PVF9FWElTVDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBOZXdPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoT1RMV0ZfREVWSUNFKTsKKyAgICBwRGV2aWNlLT5Db21wYXJ0bWVudElEID0gcEZpbHRlci0+SW50ZXJmYWNlQ29tcGFydG1lbnRJRDsKKworICAgIC8vIFJlbGVhc2UgdGhlIHJlZiBvbiB0aGUgaW50ZXJmYWNlCisgICAgRXhSZWxlYXNlUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPkV4dGVybmFsUmVmcyk7CisKK2Vycm9yOgorCisgICAgaWYgKE5ld091dEJ1ZmZlckxlbmd0aCA8ICpPdXRCdWZmZXJMZW5ndGgpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KChQVUNIQVIpT3V0QnVmZmVyICsgTmV3T3V0QnVmZmVyTGVuZ3RoLCAqT3V0QnVmZmVyTGVuZ3RoIC0gTmV3T3V0QnVmZmVyTGVuZ3RoKTsKKyAgICB9CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gTmV3T3V0QnVmZmVyTGVuZ3RoOworCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfSU9DVEwsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvLyBIYW5kbGVzIElPVENMcyBmb3IgT3BlblRocmVhZCBjb250cm9sCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bE9wZW5UaHJlYWRDb250cm9sKAorICAgIF9Jbl8gUElSUCBJcnAKKyAgICApCit7CisgICAgTlRTVEFUVVMgICBzdGF0dXMgPSBTVEFUVVNfUEVORElORzsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBOVUxMOworCisgICAgUElPX1NUQUNLX0xPQ0FUSU9OIElycFNwID0gSW9HZXRDdXJyZW50SXJwU3RhY2tMb2NhdGlvbihJcnApOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9JT0NUTCk7CisKKyAgICBpZiAoSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLklucHV0QnVmZmVyTGVuZ3RoIDwgc2l6ZW9mKEdVSUQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIHBGaWx0ZXIgPSBvdEx3ZkZpbmRBbmRSZWZJbnRlcmZhY2UoKFBHVUlEKUlycC0+QXNzb2NpYXRlZElycC5TeXN0ZW1CdWZmZXIpOworICAgIGlmIChwRmlsdGVyID09IE5VTEwpCisgICAgeworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfREVWSUNFX0RPRVNfTk9UX0VYSVNUOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19SQURJT19NT0RFKQorICAgIHsKKyAgICAgICAgLy8gUGVuZCB0aGUgSXJwIGZvciBwcm9jZXNzaW5nIG9uIHRoZSBPcGVuVGhyZWFkIGV2ZW50IHByb2Nlc3NpbmcgdGhyZWFkCisgICAgICAgIG90THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVJcnAocEZpbHRlciwgSXJwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gb3RMd2ZUdW5Jb0N0bChwRmlsdGVyLCBJcnApOworICAgIH0KKworICAgIC8vIFJlbGVhc2Ugb3VyIHJlZiBvbiB0aGUgZmlsdGVyCisgICAgRXhSZWxlYXNlUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPkV4dGVybmFsUmVmcyk7CisKK2Vycm9yOgorCisgICAgLy8gQ29tcGxldGUgdGhlIElSUCBpZiB3ZSBhcmVuJ3QgcGVuZGluZyAoaW5kaWNhdGVzIHdlIGZhaWxlZCkKKyAgICBpZiAoc3RhdHVzICE9IFNUQVRVU19QRU5ESU5HKQorICAgIHsKKyAgICAgICAgTlRfQVNTRVJUKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUyk7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoSXJwLT5Bc3NvY2lhdGVkSXJwLlN5c3RlbUJ1ZmZlciwgSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLk91dHB1dEJ1ZmZlckxlbmd0aCk7CisgICAgICAgIElycC0+SW9TdGF0dXMuU3RhdHVzID0gc3RhdHVzOworICAgICAgICBJb0NvbXBsZXRlUmVxdWVzdChJcnAsIElPX05PX0lOQ1JFTUVOVCk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfSU9DVEwsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvLyBIYW5kbGVzIElycCBmb3IgSU9UQ0xzIGZvciBPcGVuVGhyZWFkIGNvbnRyb2wgb24gdGhlIE9wZW5UaHJlYWQgdGhyZWFkCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkNvbXBsZXRlT3BlblRocmVhZElycCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICBJcnAKKyAgICApCit7CisgICAgUElPX1NUQUNLX0xPQ0FUSU9OICBJcnBTcCA9IElvR2V0Q3VycmVudElycFN0YWNrTG9jYXRpb24oSXJwKTsKKworICAgIFBVQ0hBUiBJbkJ1ZmZlciA9IChQVUNIQVIpSXJwLT5Bc3NvY2lhdGVkSXJwLlN5c3RlbUJ1ZmZlciArIHNpemVvZihHVUlEKTsKKyAgICBQVk9JRCBPdXRCdWZmZXIgPSBJcnAtPkFzc29jaWF0ZWRJcnAuU3lzdGVtQnVmZmVyOworCisgICAgVUxPTkcgSW5CdWZmZXJMZW5ndGggPSBJcnBTcC0+UGFyYW1ldGVycy5EZXZpY2VJb0NvbnRyb2wuSW5wdXRCdWZmZXJMZW5ndGggLSBzaXplb2YoR1VJRCk7CisgICAgVUxPTkcgT3V0QnVmZmVyTGVuZ3RoID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLk91dHB1dEJ1ZmZlckxlbmd0aDsKKyAgICBVTE9ORyBJb0NvbnRyb2xDb2RlID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLklvQ29udHJvbENvZGU7CisKKyAgICBVTE9ORyBPcmlnT3V0QnVmZmVyTGVuZ3RoID0gT3V0QnVmZmVyTGVuZ3RoOworCisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX05PVF9JTVBMRU1FTlRFRDsKKworICAgIFVMT05HIEZ1bmNDb2RlID0gKChJb0NvbnRyb2xDb2RlID4+IDIpICYgMHhGRkYpIC0gMTAwOworICAgIGlmIChGdW5jQ29kZSA8IEFSUkFZU0laRShJb0N0bHMpKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfSU9DVEwsICJQcm9jZXNzaW5nIElycD0lcCwgZm9yICVzIChJbjoldSxPdXQ6JXUpIiwKKyAgICAgICAgICAgICAgICAgICAgSXJwLCBJb0N0bHNbRnVuY0NvZGVdLk5hbWUsIEluQnVmZmVyTGVuZ3RoLCBPdXRCdWZmZXJMZW5ndGgpOworCisgICAgICAgIGlmIChJb0N0bHNbRnVuY0NvZGVdLm90RnVuYykKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gSW9DdGxzW0Z1bmNDb2RlXS5vdEZ1bmMocEZpbHRlciwgSW5CdWZmZXIsIEluQnVmZmVyTGVuZ3RoLCBPdXRCdWZmZXIsICZPdXRCdWZmZXJMZW5ndGgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0lPQ1RMLCAiQ29tcGxldGluZyBJcnA9JXAsIHdpdGggJSFTVEFUVVMhIGZvciAlcyAoT3V0OiV1KSIsCisgICAgICAgICAgICAgICAgICAgIElycCwgc3RhdHVzLCBJb0N0bHNbRnVuY0NvZGVdLk5hbWUsIE91dEJ1ZmZlckxlbmd0aCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgLy8gQ2xlYXIgYW55IGxlZnRvdmVyIG91dHB1dCBidWZmZXIKKyAgICBpZiAoT3V0QnVmZmVyTGVuZ3RoIDwgT3JpZ091dEJ1ZmZlckxlbmd0aCkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoKFBVQ0hBUilPdXRCdWZmZXIgKyBPdXRCdWZmZXJMZW5ndGgsIE9yaWdPdXRCdWZmZXJMZW5ndGggLSBPdXRCdWZmZXJMZW5ndGgpOworICAgIH0KKworICAgIC8vIENvbXBsZXRlIHRoZSBJUlAKKyAgICBJcnAtPklvU3RhdHVzLkluZm9ybWF0aW9uID0gT3V0QnVmZmVyTGVuZ3RoOworICAgIElycC0+SW9TdGF0dXMuU3RhdHVzID0gc3RhdHVzOworICAgIElvQ29tcGxldGVSZXF1ZXN0KElycCwgSU9fTk9fSU5DUkVNRU5UKTsKK30KKworLy8gSGFuZGxlcyBJcnAgZm9yIElPVENMcyBmb3IgT3BlblRocmVhZCBjb250cm9sIG9uIHRoZSBPcGVuVGhyZWFkIHRocmVhZAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGwoCisgICAgX0luXyBQTVNfRklMVEVSICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgSXJwCisgICAgKQoreworICAgIFBJT19TVEFDS19MT0NBVElPTiAgSXJwU3AgPSBJb0dldEN1cnJlbnRJcnBTdGFja0xvY2F0aW9uKElycCk7CisKKyAgICBQVUNIQVIgSW5CdWZmZXIgPSAoUFVDSEFSKUlycC0+QXNzb2NpYXRlZElycC5TeXN0ZW1CdWZmZXIgKyBzaXplb2YoR1VJRCk7CisgICAgVUxPTkcgSW5CdWZmZXJMZW5ndGggPSBJcnBTcC0+UGFyYW1ldGVycy5EZXZpY2VJb0NvbnRyb2wuSW5wdXRCdWZmZXJMZW5ndGggLSBzaXplb2YoR1VJRCk7CisgICAgVUxPTkcgT3V0QnVmZmVyTGVuZ3RoID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLk91dHB1dEJ1ZmZlckxlbmd0aDsKKyAgICBVTE9ORyBJb0NvbnRyb2xDb2RlID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLklvQ29udHJvbENvZGU7CisKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfTk9UX0lNUExFTUVOVEVEOworCisgICAgVUxPTkcgRnVuY0NvZGUgPSAoKElvQ29udHJvbENvZGUgPj4gMikgJiAweEZGRikgLSAxMDA7CisgICAgaWYgKEZ1bmNDb2RlIDwgQVJSQVlTSVpFKElvQ3RscykpCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9JT0NUTCwgIlByb2Nlc3NpbmcgSXJwPSVwLCBmb3IgJXMgKEluOiV1LE91dDoldSkiLAorICAgICAgICAgICAgICAgICAgICBJcnAsIElvQ3Rsc1tGdW5jQ29kZV0uTmFtZSwgSW5CdWZmZXJMZW5ndGgsIE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICAgICAgaWYgKElvQ3Rsc1tGdW5jQ29kZV0udHVuRnVuYykKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gSW9DdGxzW0Z1bmNDb2RlXS50dW5GdW5jKHBGaWx0ZXIsIElycCwgSW5CdWZmZXIsIEluQnVmZmVyTGVuZ3RoLCBPdXRCdWZmZXJMZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0lPQ1RMLCAiQ29tcGxldGluZyBJcnA9JXAsIHdpdGggJSFTVEFUVVMhIGZvciAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBJcnAsIHN0YXR1cywgSW9DdGxzW0Z1bmNDb2RlXS5OYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfUEVORElORzsKKworICAgICAgICAvLyBNYXJrIHRoZSBJcnAgYXMgcGVuZGluZworICAgICAgICBJb01hcmtJcnBQZW5kaW5nKElycCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RJbnRlcmZhY2UoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIEJPT0xFQU4gSXNFbmFibGVkID0gKihCT09MRUFOKilJbkJ1ZmZlcjsKKyAgICAgICAgaWYgKElzRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG91ciBhZGRyZXNzZXMgYXJlIGluIHN5bmMKKyAgICAgICAgICAgICh2b2lkKW90THdmSW5pdGlhbGl6ZUFkZHJlc3NlcyhwRmlsdGVyKTsKKyAgICAgICAgICAgIG90THdmUmFkaW9BZGRyZXNzZXNVcGRhdGVkKHBGaWx0ZXIpOworCX0KKworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RJcDZTZXRFbmFibGVkKHBGaWx0ZXItPm90Q3R4LCBJc0VuYWJsZWQpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgKihCT09MRUFOKilPdXRCdWZmZXIgPSBvdElwNklzRW5hYmxlZChwRmlsdGVyLT5vdEN0eCkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdEludGVyZmFjZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIEJPT0xFQU4gSXNFbmFibGVkID0gKihCT09MRUFOKilJbkJ1ZmZlcjsKKyAgICAgICAgaWYgKElzRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG91ciBhZGRyZXNzZXMgYXJlIGluIHN5bmMKKyAgICAgICAgICAgICh2b2lkKW90THdmSW5pdGlhbGl6ZUFkZHJlc3NlcyhwRmlsdGVyKTsKKworICAgICAgICAgICAgLy8gU3luYyB0aGUgY3VycmVudCBhZGRyZXNzZXMKKyAgICAgICAgICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPlR1bldvcmtlclRocmVhZEFkZHJlc3NDaGFuZ2VkRXZlbnQsIElPX05PX0lOQ1JFTUVOVCwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfSUZfVVAsCisgICAgICAgICAgICAgICAgc2l6ZW9mKEJPT0xFQU4pLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgSXNFbmFibGVkKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290SW50ZXJmYWNlX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfSUZfVVAsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RJbnRlcmZhY2VfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX05FVF9JRl9VUCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfQk9PTF9TLCAoQk9PTEVBTiopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihCT09MRUFOKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290VGhyZWFkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICBCT09MRUFOIElzRW5hYmxlZCA9ICooQk9PTEVBTiopSW5CdWZmZXI7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdFRocmVhZFNldEVuYWJsZWQocEZpbHRlci0+b3RDdHgsIElzRW5hYmxlZCkpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICAqKEJPT0xFQU4qKU91dEJ1ZmZlciA9IChvdFRocmVhZEdldERldmljZVJvbGUocEZpbHRlci0+b3RDdHgpID4gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQpID8gVFJVRSA6IEZBTFNFOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RUaHJlYWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX05FVF9TVEFDS19VUCwKKyAgICAgICAgICAgICAgICBzaXplb2YoQk9PTEVBTiksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICAqKEJPT0xFQU4qKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290VGhyZWFkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfU1RBQ0tfVVAsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RUaHJlYWRfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX05FVF9TVEFDS19VUCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfQk9PTF9TLCAoQk9PTEVBTiopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihCT09MRUFOKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290QWN0aXZlU2NhbigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZih1aW50MTZfdCkpCisgICAgeworICAgICAgICB1aW50MzJfdCBhU2NhbkNoYW5uZWxzID0gKih1aW50MzJfdCopSW5CdWZmZXI7CisgICAgICAgIHVpbnQxNl90IGFTY2FuRHVyYXRpb24gPSAqKHVpbnQxNl90KikoSW5CdWZmZXIgKyBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RMaW5rQWN0aXZlU2NhbigKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICBhU2NhbkNoYW5uZWxzLAorICAgICAgICAgICAgICAgIGFTY2FuRHVyYXRpb24sCisgICAgICAgICAgICAgICAgb3RMd2ZBY3RpdmVTY2FuQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgcEZpbHRlcikKKyAgICAgICAgICAgICk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgICooQk9PTEVBTiopT3V0QnVmZmVyID0gb3RMaW5rSXNBY3RpdmVTY2FuSW5Qcm9ncmVzcyhwRmlsdGVyLT5vdEN0eCkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdEFjdGl2ZVNjYW4oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKHVpbnQxNl90KSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGFTY2FuQ2hhbm5lbHMgPSAqKHVpbnQzMl90KilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDE2X3QgYVNjYW5EdXJhdGlvbiA9ICoodWludDE2X3QqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICB1aW50OF90IGFTY2FuU3RhdGUgPSBTUElORUxfU0NBTl9TVEFURV9CRUFDT047CisKKyAgICAgICAgLy8gVE9ETyAtIFNlbmQgZG93biBzY2FuIGNoYW5uZWwgJiBkdXJhdGlvbiBmaXJzdAorICAgICAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFTY2FuQ2hhbm5lbHMpOworICAgICAgICBzdGF0dXMgPSBvdEx3ZkNtZFNldFByb3AocEZpbHRlciwgU1BJTkVMX1BST1BfTUFDX1NDQU5fTUFTSywgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLCBhU2NhbkR1cmF0aW9uKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIGdvdG8gZXJyb3I7CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURSwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgYVNjYW5TdGF0ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdEFjdGl2ZVNjYW5fSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCitlcnJvcjoKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdEFjdGl2ZVNjYW5fSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFKQorICAgIHsKKyAgICAgICAgdWludDhfdCBhU2NhblN0YXRlID0gMDsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLCAmYVNjYW5TdGF0ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICooQk9PTEVBTiopT3V0QnVmZmVyID0gKGFTY2FuU3RhdGUgPT0gU1BJTkVMX1NDQU5fU1RBVEVfQkVBQ09OKSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEVuZXJneVNjYW4oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDE2X3QpKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgYVNjYW5DaGFubmVscyA9ICoodWludDMyX3QqKUluQnVmZmVyOworICAgICAgICB1aW50MTZfdCBhU2NhbkR1cmF0aW9uID0gKih1aW50MTZfdCopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgIG90TGlua0VuZXJneVNjYW4oCisgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgYVNjYW5DaGFubmVscywKKyAgICAgICAgICAgICAgICBhU2NhbkR1cmF0aW9uLAorICAgICAgICAgICAgICAgIG90THdmRW5lcmd5U2NhbkNhbGxiYWNrLAorICAgICAgICAgICAgICAgIHBGaWx0ZXIpCisgICAgICAgICAgICApOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICAqKEJPT0xFQU4qKU91dEJ1ZmZlciA9IG90TGlua0lzRW5lcmd5U2NhbkluUHJvZ3Jlc3MocEZpbHRlci0+b3RDdHgpID8gVFJVRSA6IEZBTFNFOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RFbmVyZ3lTY2FuKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZih1aW50MTZfdCkpCisgICAgeworICAgICAgICB1aW50MzJfdCBhU2NhbkNoYW5uZWxzID0gKih1aW50MzJfdCopSW5CdWZmZXI7CisgICAgICAgIHVpbnQxNl90IGFTY2FuRHVyYXRpb24gPSAqKHVpbnQxNl90KikoSW5CdWZmZXIgKyBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgdWludDhfdCBhU2NhblN0YXRlID0gU1BJTkVMX1NDQU5fU1RBVEVfRU5FUkdZOworCisgICAgICAgIC8vIFRPRE8gLSBTZW5kIGRvd24gc2NhbiBjaGFubmVsICYgZHVyYXRpb24gZmlyc3QKKyAgICAgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhU2NhbkNoYW5uZWxzKTsKKyAgICAgICAgc3RhdHVzID0gb3RMd2ZDbWRTZXRQcm9wKHBGaWx0ZXIsIFNQSU5FTF9QUk9QX01BQ19TQ0FOX01BU0ssIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywgYVNjYW5EdXJhdGlvbik7CisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKSBnb3RvIGVycm9yOworCisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1NDQU5fU1RBVEUsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgIGFTY2FuU3RhdGUpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RFbmVyZ3lTY2FuX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURSwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworZXJyb3I6CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RFbmVyZ3lTY2FuX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgYVNjYW5TdGF0ZSA9IDA7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgJmFTY2FuU3RhdGUpKQorICAgICAgICB7CisgICAgICAgICAgICAqKEJPT0xFQU4qKU91dEJ1ZmZlciA9IChhU2NhblN0YXRlID09IFNQSU5FTF9TQ0FOX1NUQVRFX0VORVJHWSkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3REaXNjb3ZlcigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YoYm9vbCkpCisgICAgeworICAgICAgICB1aW50MzJfdCBhU2NhbkNoYW5uZWxzID0gKih1aW50MzJfdCopSW5CdWZmZXI7CisgICAgICAgIHVpbnQxNl90IGFQYW5pZCA9ICoodWludDE2X3QqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBib29sIGFKb2luZXIgPSAqKHVpbnQ4X3QqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDE2X3QpKTsKKyAgICAgICAgYm9vbCBhRW5hYmxlRXVpNjRGaWx0ZXJpbmcgPSAqKHVpbnQ4X3QqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RUaHJlYWREaXNjb3ZlcigKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICBhU2NhbkNoYW5uZWxzLAorICAgICAgICAgICAgICAgIGFQYW5pZCwKKyAgICAgICAgICAgICAgICBhSm9pbmVyLAorICAgICAgICAgICAgICAgIGFFbmFibGVFdWk2NEZpbHRlcmluZywKKyAgICAgICAgICAgICAgICBvdEx3ZkRpc2NvdmVyQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgcEZpbHRlcikKKyAgICAgICAgICAgICk7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgKihCT09MRUFOKilPdXRCdWZmZXIgPSBvdFRocmVhZElzRGlzY292ZXJJblByb2dyZXNzKHBGaWx0ZXItPm90Q3R4KSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihCT09MRUFOKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q2hhbm5lbCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKG90TGlua1NldENoYW5uZWwocEZpbHRlci0+b3RDdHgsICoodWludDhfdCopSW5CdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdExpbmtHZXRDaGFubmVsKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290Q2hhbm5lbCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfUEhZX0NIQU4sCisgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICoodWludDhfdCopSW5CdWZmZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RDaGFubmVsX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9QSFlfQ0hBTiwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdENoYW5uZWxfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1BIWV9DSEFOKQorICAgIHsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLCAodWludDhfdCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q2hpbGRUaW1lb3V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgb3RUaHJlYWRTZXRDaGlsZFRpbWVvdXQocEZpbHRlci0+b3RDdHgsICoodWludDMyX3QqKUluQnVmZmVyKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkpCisgICAgeworICAgICAgICAqKHVpbnQzMl90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldENoaWxkVGltZW91dChwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RDaGlsZFRpbWVvdXQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfVElNRU9VVCwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDMyX3QpLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUywKKyAgICAgICAgICAgICAgICAqKHVpbnQzMl90KilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RDaGlsZFRpbWVvdXRfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9DSElMRF9USU1FT1VULAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290Q2hpbGRUaW1lb3V0X0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfVElNRU9VVCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsICh1aW50MzJfdCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEV4dGVuZGVkQWRkcmVzcygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RMaW5rU2V0RXh0ZW5kZWRBZGRyZXNzKHBGaWx0ZXItPm90Q3R4LCAob3RFeHRBZGRyZXNzKilJbkJ1ZmZlcikpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIG90TGlua0dldEV4dGVuZGVkQWRkcmVzcyhwRmlsdGVyLT5vdEN0eCksIHNpemVvZihvdEV4dEFkZHJlc3MpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdEV4dEFkZHJlc3MpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RFeHRlbmRlZEFkZHJlc3MoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfSFdBRERSLAorICAgICAgICAgICAgICAgIHNpemVvZihvdEV4dEFkZHJlc3MpLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TLAorICAgICAgICAgICAgICAgIChvdEV4dEFkZHJlc3MqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdEV4dEFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RFeHRlbmRlZEFkZHJlc3NfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX0hXQUREUiwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdEV4dGVuZGVkQWRkcmVzc19IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfSFdBRERSKQorICAgIHsKKyAgICAgICAgc3BpbmVsX2V1aTY0X3QgKmRhdGEgPSBOVUxMOworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsICZkYXRhKSAmJiBkYXRhICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIGRhdGEsIHNpemVvZihvdEV4dEFkZHJlc3MpKTsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RFeHRBZGRyZXNzKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290RXh0ZW5kZWRQYW5JZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0ZW5kZWRQYW5JZCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRTZXRFeHRlbmRlZFBhbklkKHBGaWx0ZXItPm90Q3R4LCAodWludDhfdCopSW5CdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0ZW5kZWRQYW5JZCkpCisgICAgeworICAgICAgICBtZW1jcHkoT3V0QnVmZmVyLCBvdFRocmVhZEdldEV4dGVuZGVkUGFuSWQocEZpbHRlci0+b3RDdHgpLCBzaXplb2Yob3RFeHRlbmRlZFBhbklkKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RFeHRlbmRlZFBhbklkKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290RXh0ZW5kZWRQYW5JZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdEV4dGVuZGVkUGFuSWQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfWFBBTklELAorICAgICAgICAgICAgICAgIHNpemVvZihvdEV4dGVuZGVkUGFuSWQpICsgc2l6ZW9mKHVpbnQxNl90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgIChvdEV4dGVuZGVkUGFuSWQqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgIHNpemVvZihvdEV4dGVuZGVkUGFuSWQpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdEV4dGVuZGVkUGFuSWQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RFeHRlbmRlZFBhbklkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfWFBBTklELAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290RXh0ZW5kZWRQYW5JZF9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfTkVUX1hQQU5JRCkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgKmRhdGEgPSBOVUxMOworICAgICAgICBzcGluZWxfc2l6ZV90IGFFeHRQYW5JZExlbjsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsICZkYXRhLCAmYUV4dFBhbklkTGVuKSAmJiBkYXRhICE9IE5VTEwgJiYKKyAgICAgICAgICAgIGFFeHRQYW5JZExlbiA9PSBzaXplb2Yob3RFeHRlbmRlZFBhbklkKSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KE91dEJ1ZmZlciwgZGF0YSwgc2l6ZW9mKG90RXh0ZW5kZWRQYW5JZCkpOworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdEV4dGVuZGVkUGFuSWQpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RGYWN0b3J5QXNzaWduZWRJZWVlRXVpNjQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIG90TGlua0dldEZhY3RvcnlBc3NpZ25lZEllZWVFdWk2NChwRmlsdGVyLT5vdEN0eCwgKG90RXh0QWRkcmVzcyopT3V0QnVmZmVyKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdEV4dEFkZHJlc3MpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RIYXNoTWFjQWRkcmVzcygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdEV4dEFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgb3RMaW5rR2V0Sm9pbmVySWQocEZpbHRlci0+b3RDdHgsIChvdEV4dEFkZHJlc3MqKU91dEJ1ZmZlcik7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RFeHRBZGRyZXNzKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TGVhZGVyUmxvYygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNkFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKG90VGhyZWFkR2V0TGVhZGVyUmxvYyhwRmlsdGVyLT5vdEN0eCwgKG90SXA2QWRkcmVzcyopT3V0QnVmZmVyKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RJcDZBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RMZWFkZXJSbG9jKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90SXA2QWRkcmVzcykpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9MRUFERVJfQUREUiwKKyAgICAgICAgICAgICAgICBzaXplb2Yob3RJcDZBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUywKKyAgICAgICAgICAgICAgICAob3RJcDZBZGRyZXNzKilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RJcDZBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290TGVhZGVyUmxvY19IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX0xFQURFUl9BRERSLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TGVhZGVyUmxvY19IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfVEhSRUFEX0xFQURFUl9BRERSKQorICAgIHsKKyAgICAgICAgc3BpbmVsX2lwdjZhZGRyX3QgKmRhdGEgPSBOVUxMOworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MsICZkYXRhKSAmJiBkYXRhICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIGRhdGEsIHNpemVvZihzcGluZWxfaXB2NmFkZHJfdCkpOworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdElwNkFkZHJlc3MpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RMaW5rTW9kZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihvdExpbmtNb2RlQ29uZmlnKSA9PSA0LCAiVGhlIHNpemUgb2Ygb3RMaW5rTW9kZUNvbmZpZyBzaG91bGQgYmUgNCBieXRlcyIpOworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RMaW5rTW9kZUNvbmZpZykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRTZXRMaW5rTW9kZShwRmlsdGVyLT5vdEN0eCwgKihvdExpbmtNb2RlQ29uZmlnKilJbkJ1ZmZlcikpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RMaW5rTW9kZUNvbmZpZykpCisgICAgeworICAgICAgICAqKG90TGlua01vZGVDb25maWcqKU91dEJ1ZmZlciA9IG90VGhyZWFkR2V0TGlua01vZGUocEZpbHRlci0+b3RDdHgpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TGlua01vZGVDb25maWcpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworZW51bQoreworICAgIGtUaHJlYWRNb2RlX1J4T25XaGVuSWRsZSAgICAgICAgPSAoMSA8PCAzKSwKKyAgICBrVGhyZWFkTW9kZV9TZWN1cmVEYXRhUmVxdWVzdCAgID0gKDEgPDwgMiksCisgICAga1RocmVhZE1vZGVfRnVsbEZ1bmN0aW9uRGV2aWNlICA9ICgxIDw8IDEpLAorICAgIGtUaHJlYWRNb2RlX0Z1bGxOZXR3b3JrRGF0YSAgICAgPSAoMSA8PCAwKSwKK307CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TGlua01vZGUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RMaW5rTW9kZUNvbmZpZykpCisgICAgeworICAgICAgICBjb25zdCBvdExpbmtNb2RlQ29uZmlnKiBhTGlua01vZGUgPSAob3RMaW5rTW9kZUNvbmZpZyopSW5CdWZmZXI7CisgICAgICAgIHVpbnQ4X3QgbnVtZXJpY19tb2RlID0gMDsKKworICAgICAgICBpZiAoYUxpbmtNb2RlLT5tUnhPbldoZW5JZGxlKSAgICAgICBudW1lcmljX21vZGUgfD0ga1RocmVhZE1vZGVfUnhPbldoZW5JZGxlOworICAgICAgICBpZiAoYUxpbmtNb2RlLT5tU2VjdXJlRGF0YVJlcXVlc3RzKSBudW1lcmljX21vZGUgfD0ga1RocmVhZE1vZGVfU2VjdXJlRGF0YVJlcXVlc3Q7CisgICAgICAgIGlmIChhTGlua01vZGUtPm1EZXZpY2VUeXBlKSAgICAgICAgIG51bWVyaWNfbW9kZSB8PSBrVGhyZWFkTW9kZV9GdWxsRnVuY3Rpb25EZXZpY2U7CisgICAgICAgIGlmIChhTGlua01vZGUtPm1OZXR3b3JrRGF0YSkgICAgICAgIG51bWVyaWNfbW9kZSB8PSBrVGhyZWFkTW9kZV9GdWxsTmV0d29ya0RhdGE7CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfTU9ERSwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgbnVtZXJpY19tb2RlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdExpbmtNb2RlQ29uZmlnKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290TGlua01vZGVfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9NT0RFLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TGlua01vZGVfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1RIUkVBRF9NT0RFKQorICAgIHsKKwkJdWludDhfdCBudW1lcmljX21vZGUgPSAwOworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsICZudW1lcmljX21vZGUpKQorICAgICAgICB7CisgICAgICAgICAgICBvdExpbmtNb2RlQ29uZmlnKiBhTGlua01vZGUgPSAob3RMaW5rTW9kZUNvbmZpZyopT3V0QnVmZmVyOworCisgICAgICAgICAgICBhTGlua01vZGUtPm1SeE9uV2hlbklkbGUgPSAoKG51bWVyaWNfbW9kZSAmIGtUaHJlYWRNb2RlX1J4T25XaGVuSWRsZSkgPT0ga1RocmVhZE1vZGVfUnhPbldoZW5JZGxlKTsKKyAgICAgICAgICAgIGFMaW5rTW9kZS0+bVNlY3VyZURhdGFSZXF1ZXN0cyA9ICgobnVtZXJpY19tb2RlICYga1RocmVhZE1vZGVfU2VjdXJlRGF0YVJlcXVlc3QpID09IGtUaHJlYWRNb2RlX1NlY3VyZURhdGFSZXF1ZXN0KTsKKyAgICAgICAgICAgIGFMaW5rTW9kZS0+bURldmljZVR5cGUgPSAoKG51bWVyaWNfbW9kZSAmIGtUaHJlYWRNb2RlX0Z1bGxGdW5jdGlvbkRldmljZSkgPT0ga1RocmVhZE1vZGVfRnVsbEZ1bmN0aW9uRGV2aWNlKTsKKyAgICAgICAgICAgIGFMaW5rTW9kZS0+bU5ldHdvcmtEYXRhID0gKChudW1lcmljX21vZGUgJiBrVGhyZWFkTW9kZV9GdWxsTmV0d29ya0RhdGEpID09IGtUaHJlYWRNb2RlX0Z1bGxOZXR3b3JrRGF0YSk7CisKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RMaW5rTW9kZUNvbmZpZyk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdE1hc3RlcktleSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90TWFzdGVyS2V5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdFRocmVhZFNldE1hc3RlcktleShwRmlsdGVyLT5vdEN0eCwgKG90TWFzdGVyS2V5KilJbkJ1ZmZlcikpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RNYXN0ZXJLZXkpKQorICAgIHsKKyAgICAgICAgY29uc3Qgb3RNYXN0ZXJLZXkqIGFNYXN0ZXJLZXkgPSBvdFRocmVhZEdldE1hc3RlcktleShwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIGFNYXN0ZXJLZXksIHNpemVvZihvdE1hc3RlcktleSkpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TWFzdGVyS2V5KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TWFzdGVyS2V5KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90TWFzdGVyS2V5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX01BU1RFUl9LRVksCisgICAgICAgICAgICAgICAgc2l6ZW9mKG90TWFzdGVyS2V5KSArIHNpemVvZih1aW50MTZfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgICAob3RNYXN0ZXJLZXkqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgIHNpemVvZihvdE1hc3RlcktleSkpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90TWFzdGVyS2V5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290TWFzdGVyS2V5X0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfTUFTVEVSX0tFWSwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE1hc3RlcktleV9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfTkVUX01BU1RFUl9LRVkpCisgICAgeworICAgICAgICB1aW50OF90ICpkYXRhID0gTlVMTDsKKyAgICAgICAgc3BpbmVsX3NpemVfdCBhS2V5TGVuZ3RoOworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywgJmRhdGEsICZhS2V5TGVuZ3RoKSAmJiBkYXRhICE9IE5VTEwgJiYKKyAgICAgICAgICAgIGFLZXlMZW5ndGggPT0gc2l6ZW9mKG90TWFzdGVyS2V5KSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KE91dEJ1ZmZlciwgZGF0YSwgc2l6ZW9mKG90TWFzdGVyS2V5KSk7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TWFzdGVyS2V5KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290UFNLYygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UFNLYykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRTZXRQU0tjKHBGaWx0ZXItPm90Q3R4LCBJbkJ1ZmZlcikpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RQU0tjKSkKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFQU0tjID0gb3RUaHJlYWRHZXRQU0tjKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgbWVtY3B5KE91dEJ1ZmZlciwgYVBTS2MsIHNpemVvZihvdFBTS2MpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdFBTS2MpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RQU0tjKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UFNLYykpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX05FVF9QU0tDLAorICAgICAgICAgICAgICAgIHNpemVvZihvdFBTS2MpICsgc2l6ZW9mKHVpbnQxNl90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgIChvdFBTS2MqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgIE9UX1BTS0NfTUFYX1NJWkUpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UFNLYykpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFBTS2NfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX05FVF9QU0tDLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UFNLY19IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfTkVUX1BTS0MpCisgICAgeworICAgICAgICB1aW50OF90ICpkYXRhID0gTlVMTDsKKyAgICAgICAgc3BpbmVsX3NpemVfdCBhUFNLY0xlbmd0aDsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsICZkYXRhLCAmYVBTS2NMZW5ndGgpICYmIGRhdGEgIT0gTlVMTCAmJgorICAgICAgICAgICAgYVBTS2NMZW5ndGggPT0gc2l6ZW9mKG90UFNLYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIGRhdGEsIHNpemVvZihvdFBTS2MpKTsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RQU0tjKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TWVzaExvY2FsRWlkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90SXA2QWRkcmVzcykpCisgICAgeworICAgICAgICBtZW1jcHkoT3V0QnVmZmVyLCAgb3RUaHJlYWRHZXRNZXNoTG9jYWxFaWQocEZpbHRlci0+b3RDdHgpLCBzaXplb2Yob3RJcDZBZGRyZXNzKSk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE1lc2hMb2NhbEVpZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNkFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RNZXNoTG9jYWxFaWRfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX0lQVjZfTUxfQUREUiwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE1lc2hMb2NhbEVpZF9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfSVBWNl9NTF9BRERSKQorICAgIHsKKyAgICAgICAgc3BpbmVsX2lwdjZhZGRyX3QgKmRhdGEgPSBOVUxMOworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MsICZkYXRhKSAmJiBkYXRhICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIGRhdGEsIHNpemVvZihzcGluZWxfaXB2NmFkZHJfdCkpOworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdElwNkFkZHJlc3MpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RNZXNoTG9jYWxQcmVmaXgoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1lc2hMb2NhbFByZWZpeCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRTZXRNZXNoTG9jYWxQcmVmaXgocEZpbHRlci0+b3RDdHgsIEluQnVmZmVyKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1lc2hMb2NhbFByZWZpeCkpCisgICAgeworICAgICAgICBtZW1jcHkoT3V0QnVmZmVyLCBvdFRocmVhZEdldE1lc2hMb2NhbFByZWZpeChwRmlsdGVyLT5vdEN0eCksIHNpemVvZihvdE1lc2hMb2NhbFByZWZpeCkpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TWVzaExvY2FsUHJlZml4KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KSkKKyAgICB7CisgICAgICAgIG90SXA2QWRkcmVzcyBhQWRkcmVzcyA9IHswfTsKKyAgICAgICAgbWVtY3B5KCZhQWRkcmVzcywgSW5CdWZmZXIsIHNpemVvZihvdE1lc2hMb2NhbFByZWZpeCkpOworCisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfSVBWNl9NTF9QUkVGSVgsCisgICAgICAgICAgICAgICAgc2l6ZW9mKG90SXA2QWRkcmVzcyksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MsCisgICAgICAgICAgICAgICAgJmFBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1lc2hMb2NhbFByZWZpeCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdE1lc2hMb2NhbFByZWZpeF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfSVBWNl9NTF9QUkVGSVgsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RNZXNoTG9jYWxQcmVmaXhfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX0lQVjZfTUxfUFJFRklYKQorICAgIHsKKyAgICAgICAgaWYgKERhdGFMZW5ndGggPj0gc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KE91dEJ1ZmZlciwgRGF0YSwgc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KSk7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8vIG90THdmSW9DdGxfb3ROZXR3b3JrRGF0YUxlYWRlcgorCisvLyBvdEx3ZklvQ3RsX290TmV0d29ya0RhdGFMb2NhbAorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdE5ldHdvcmtOYW1lKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3ROZXR3b3JrTmFtZSkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRTZXROZXR3b3JrTmFtZShwRmlsdGVyLT5vdEN0eCwgKGNoYXIqKUluQnVmZmVyKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE5ldHdvcmtOYW1lKSkKKyAgICB7CisgICAgICAgIHN0cmNweV9zKChjaGFyKilPdXRCdWZmZXIsIHNpemVvZihvdE5ldHdvcmtOYW1lKSwgb3RUaHJlYWRHZXROZXR3b3JrTmFtZShwRmlsdGVyLT5vdEN0eCkpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TmV0d29ya05hbWUpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3ROZXR3b3JrTmFtZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE5ldHdvcmtOYW1lKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX05FVFdPUktfTkFNRSwKKyAgICAgICAgICAgICAgICBzaXplb2Yob3RJcDZBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVVRGOF9TLAorICAgICAgICAgICAgICAgIChvdE5ldHdvcmtOYW1lKilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3ROZXR3b3JrTmFtZSkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdE5ldHdvcmtOYW1lX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfTkVUV09SS19OQU1FLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TmV0d29ya05hbWVfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX05FVF9ORVRXT1JLX05BTUUpCisgICAgeworICAgICAgICBjb25zdCBjaGFyICpkYXRhID0gTlVMTDsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VVEY4X1MsICZkYXRhKSAmJiBkYXRhICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmNweV9zKE91dEJ1ZmZlciwgc2l6ZW9mKG90TmV0d29ya05hbWUpLCBkYXRhKTsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3ROZXR3b3JrTmFtZSk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFBhbklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RQYW5JZCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RMaW5rU2V0UGFuSWQocEZpbHRlci0+b3RDdHgsICoob3RQYW5JZCopSW5CdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UGFuSWQpKQorICAgIHsKKyAgICAgICAgKihvdFBhbklkKilPdXRCdWZmZXIgPSBvdExpbmtHZXRQYW5JZChwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RQYW5JZCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFBhbklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UGFuSWQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfMTVfNF9QQU5JRCwKKyAgICAgICAgICAgICAgICBzaXplb2Yob3RQYW5JZCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICoob3RQYW5JZCopSW5CdWZmZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UGFuSWQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RQYW5JZF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDXzE1XzRfUEFOSUQsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RQYW5JZF9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfTUFDXzE1XzRfUEFOSUQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLCAob3RQYW5JZCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdFBhbklkKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Um91dGVyUm9sbEVuYWJsZWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0Um91dGVyUm9sZUVuYWJsZWQocEZpbHRlci0+b3RDdHgsICooQk9PTEVBTiopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgKihCT09MRUFOKilPdXRCdWZmZXIgPSBvdFRocmVhZElzUm91dGVyUm9sZUVuYWJsZWQocEZpbHRlci0+b3RDdHgpID8gVFJVRSA6IEZBTFNFOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RSb3V0ZXJSb2xsRW5hYmxlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQsCisgICAgICAgICAgICAgICAgc2l6ZW9mKEJPT0xFQU4pLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgKihCT09MRUFOKilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFJvdXRlclJvbGxFbmFibGVkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFJvdXRlclJvbGxFbmFibGVkX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfQk9PTF9TLCAoQk9PTEVBTiopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihCT09MRUFOKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290U2hvcnRBZGRyZXNzKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90U2hvcnRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgICoob3RTaG9ydEFkZHJlc3MqKU91dEJ1ZmZlciA9IG90TGlua0dldFNob3J0QWRkcmVzcyhwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RTaG9ydEFkZHJlc3MpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RTaG9ydEFkZHJlc3MoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RTaG9ydEFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RTaG9ydEFkZHJlc3NfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ18xNV80X1NBRERSLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290U2hvcnRBZGRyZXNzX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9NQUNfMTVfNF9TQUREUikKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsIChvdFNob3J0QWRkcmVzcyopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdFNob3J0QWRkcmVzcyk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvLyBvdEx3ZklvQ3RsX290VW5pY2FzdEFkZHJlc3NlcworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEFjdGl2ZURhdGFzZXQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3REYXRhc2V0U2V0QWN0aXZlKHBGaWx0ZXItPm90Q3R4LCAob3RPcGVyYXRpb25hbERhdGFzZXQqKUluQnVmZmVyKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3REYXRhc2V0R2V0QWN0aXZlKHBGaWx0ZXItPm90Q3R4LCAob3RPcGVyYXRpb25hbERhdGFzZXQqKU91dEJ1ZmZlcikpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RQZW5kaW5nRGF0YXNldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdERhdGFzZXRTZXRQZW5kaW5nKHBGaWx0ZXItPm90Q3R4LCAob3RPcGVyYXRpb25hbERhdGFzZXQqKUluQnVmZmVyKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3REYXRhc2V0R2V0UGVuZGluZyhwRmlsdGVyLT5vdEN0eCwgKG90T3BlcmF0aW9uYWxEYXRhc2V0KilPdXRCdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TG9jYWxMZWFkZXJXZWlnaHQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0TG9jYWxMZWFkZXJXZWlnaHQocEZpbHRlci0+b3RDdHgsICoodWludDhfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldExlYWRlcldlaWdodChwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdExvY2FsTGVhZGVyV2VpZ2h0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgKih1aW50OF90KilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdExvY2FsTGVhZGVyV2VpZ2h0X0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdExvY2FsTGVhZGVyV2VpZ2h0X0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgKHVpbnQ4X3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEFkZEJvcmRlclJvdXRlcigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90Qm9yZGVyUm91dGVyQ29uZmlnKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdEJvcmRlclJvdXRlckFkZE9uTWVzaFByZWZpeChwRmlsdGVyLT5vdEN0eCwgKG90Qm9yZGVyUm91dGVyQ29uZmlnKilJbkJ1ZmZlcikpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK2NvbnN0IHVpbnQ4X3Qga1ByZWZlcmVuY2VPZmZzZXQgPSA2OworLy9jb25zdCB1aW50OF90IGtQcmVmZXJlbmNlTWFzayA9IDMgPDwga1ByZWZlcmVuY2VPZmZzZXQ7Citjb25zdCB1aW50OF90IGtQcmVmZXJyZWRGbGFnID0gMSA8PCA1OworY29uc3QgdWludDhfdCBrU2xhYWNGbGFnID0gMSA8PCA0OworY29uc3QgdWludDhfdCBrRGhjcEZsYWcgPSAxIDw8IDM7Citjb25zdCB1aW50OF90IGtDb25maWd1cmVGbGFnID0gMSA8PCAyOworY29uc3QgdWludDhfdCBrRGVmYXVsdFJvdXRlRmxhZyA9IDEgPDwgMTsKK2NvbnN0IHVpbnQ4X3Qga09uTWVzaEZsYWcgPSAxIDw8IDA7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290QWRkQm9yZGVyUm91dGVyKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90Qm9yZGVyUm91dGVyQ29uZmlnKSkKKyAgICB7CisgICAgICAgIGNvbnN0IG90Qm9yZGVyUm91dGVyQ29uZmlnICphQ29uZmlnID0gKG90Qm9yZGVyUm91dGVyQ29uZmlnKilJbkJ1ZmZlcjsKKworICAgICAgICBvdElwNkFkZHJlc3MgcHJlZml4ID0gezB9OworICAgICAgICBtZW1jcHlfcygmcHJlZml4LCBzaXplb2YocHJlZml4KSwgJmFDb25maWctPm1QcmVmaXgubVByZWZpeCwgYUNvbmZpZy0+bVByZWZpeC5tTGVuZ3RoKTsKKworICAgICAgICB1aW50OF90IGZsYWdzID0gKHVpbnQ4X3QpKGFDb25maWctPm1QcmVmZXJlbmNlIDw8IGtQcmVmZXJlbmNlT2Zmc2V0KTsKKyAgICAgICAgaWYgKGFDb25maWctPm1TbGFhYykgICAgICAgIGZsYWdzIHw9IGtTbGFhY0ZsYWc7CisgICAgICAgIGlmIChhQ29uZmlnLT5tRGhjcCkgICAgICAgICBmbGFncyB8PSBrRGhjcEZsYWc7CisgICAgICAgIGlmIChhQ29uZmlnLT5tQ29uZmlndXJlKSAgICBmbGFncyB8PSBrQ29uZmlndXJlRmxhZzsKKyAgICAgICAgaWYgKGFDb25maWctPm1EZWZhdWx0Um91dGUpIGZsYWdzIHw9IGtEZWZhdWx0Um91dGVGbGFnOworICAgICAgICBpZiAoYUNvbmZpZy0+bU9uTWVzaCkgICAgICAgZmxhZ3MgfD0ga09uTWVzaEZsYWc7CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfT05fTUVTSF9ORVRTLAorICAgICAgICAgICAgICAgIHNpemVvZihvdElwNkFkZHJlc3MpICsgMyAqIHNpemVvZih1aW50OF90KSwKKyAgICAgICAgICAgICAgICAiNkNiQyIsCisgICAgICAgICAgICAgICAgJnByZWZpeCwKKyAgICAgICAgICAgICAgICBhQ29uZmlnLT5tUHJlZml4Lm1MZW5ndGgsCisgICAgICAgICAgICAgICAgYUNvbmZpZy0+bVN0YWJsZSwKKyAgICAgICAgICAgICAgICBmbGFncyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSZW1vdmVCb3JkZXJSb3V0ZXIoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNlByZWZpeCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RCb3JkZXJSb3V0ZXJSZW1vdmVPbk1lc2hQcmVmaXgocEZpbHRlci0+b3RDdHgsIChvdElwNlByZWZpeCopSW5CdWZmZXIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFJlbW92ZUJvcmRlclJvdXRlcigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXJMZW5ndGgpOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNlByZWZpeCkpCisgICAgeworICAgICAgICBjb25zdCBvdElwNlByZWZpeCAqYVByZWZpeCA9IChvdElwNlByZWZpeCopSW5CdWZmZXI7CisKKyAgICAgICAgb3RJcDZBZGRyZXNzIHByZWZpeCA9IHswfTsKKyAgICAgICAgbWVtY3B5X3MoJnByZWZpeCwgc2l6ZW9mKHByZWZpeCksICZhUHJlZml4LT5tUHJlZml4LCBhUHJlZml4LT5tTGVuZ3RoKTsKKworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFMsCisgICAgICAgICAgICAgICAgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgIjZDIiwKKyAgICAgICAgICAgICAgICAmcHJlZml4LAorICAgICAgICAgICAgICAgIGFQcmVmaXgtPm1MZW5ndGgpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290QWRkRXh0ZXJuYWxSb3V0ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0ZXJuYWxSb3V0ZUNvbmZpZykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RCb3JkZXJSb3V0ZXJBZGRSb3V0ZShwRmlsdGVyLT5vdEN0eCwgKG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyopSW5CdWZmZXIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdEFkZEV4dGVybmFsUm91dGUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyTGVuZ3RoKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RCb3JkZXJSb3V0ZXJDb25maWcpKQorICAgIHsKKyAgICAgICAgY29uc3Qgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcgPSAob3RCb3JkZXJSb3V0ZXJDb25maWcqKUluQnVmZmVyOworCisgICAgICAgIG90SXA2QWRkcmVzcyBwcmVmaXggPSB7MH07CisgICAgICAgIG1lbWNweV9zKCZwcmVmaXgsIHNpemVvZihwcmVmaXgpLCAmYUNvbmZpZy0+bVByZWZpeC5tUHJlZml4LCBhQ29uZmlnLT5tUHJlZml4Lm1MZW5ndGgpOworCisgICAgICAgIHVpbnQ4X3QgZmxhZ3MgPSAodWludDhfdCkoYUNvbmZpZy0+bVByZWZlcmVuY2UgPDwga1ByZWZlcmVuY2VPZmZzZXQpOworICAgICAgICBpZiAoYUNvbmZpZy0+bVNsYWFjKSAgICAgICAgZmxhZ3MgfD0ga1NsYWFjRmxhZzsKKyAgICAgICAgaWYgKGFDb25maWctPm1EaGNwKSAgICAgICAgIGZsYWdzIHw9IGtEaGNwRmxhZzsKKyAgICAgICAgaWYgKGFDb25maWctPm1Db25maWd1cmUpICAgIGZsYWdzIHw9IGtDb25maWd1cmVGbGFnOworICAgICAgICBpZiAoYUNvbmZpZy0+bURlZmF1bHRSb3V0ZSkgZmxhZ3MgfD0ga0RlZmF1bHRSb3V0ZUZsYWc7CisgICAgICAgIGlmIChhQ29uZmlnLT5tT25NZXNoKSAgICAgICBmbGFncyB8PSBrT25NZXNoRmxhZzsKKworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9PRkZfTUVTSF9ST1VURVMsCisgICAgICAgICAgICAgICAgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyAzICogc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICAgICAgICAgICI2Q2JDIiwKKyAgICAgICAgICAgICAgICAmcHJlZml4LAorICAgICAgICAgICAgICAgIGFDb25maWctPm1QcmVmaXgubUxlbmd0aCwKKyAgICAgICAgICAgICAgICBhQ29uZmlnLT5tU3RhYmxlLAorICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFJlbW92ZUV4dGVybmFsUm91dGUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNlByZWZpeCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RCb3JkZXJSb3V0ZXJSZW1vdmVSb3V0ZShwRmlsdGVyLT5vdEN0eCwgKG90SXA2UHJlZml4KilJbkJ1ZmZlcikpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UmVtb3ZlRXh0ZXJuYWxSb3V0ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXJMZW5ndGgpOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNlByZWZpeCkpCisgICAgeworICAgICAgICBjb25zdCBvdElwNlByZWZpeCAqYVByZWZpeCA9IChvdElwNlByZWZpeCopSW5CdWZmZXI7CisKKyAgICAgICAgb3RJcDZBZGRyZXNzIHByZWZpeCA9IHswfTsKKyAgICAgICAgbWVtY3B5X3MoJnByZWZpeCwgc2l6ZW9mKHByZWZpeCksICZhUHJlZml4LT5tUHJlZml4LCBhUHJlZml4LT5tTGVuZ3RoKTsKKworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9PRkZfTUVTSF9ST1VURVMsCisgICAgICAgICAgICAgICAgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgIjZDIiwKKyAgICAgICAgICAgICAgICAmcHJlZml4LAorICAgICAgICAgICAgICAgIGFQcmVmaXgtPm1MZW5ndGgpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290U2VuZFNlcnZlckRhdGEoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKG90Qm9yZGVyUm91dGVyUmVnaXN0ZXIocEZpbHRlci0+b3RDdHgpKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q29udGV4dElkUmV1c2VEZWxheSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0Q29udGV4dElkUmV1c2VEZWxheShwRmlsdGVyLT5vdEN0eCwgKih1aW50MzJfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgICoodWludDMyX3QqKU91dEJ1ZmZlciA9IG90VGhyZWFkR2V0Q29udGV4dElkUmV1c2VEZWxheShwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RDb250ZXh0SWRSZXVzZURlbGF5KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVksCisgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICAgKih1aW50MzJfdCopSW5CdWZmZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290Q29udGV4dElkUmV1c2VEZWxheV9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVksCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RDb250ZXh0SWRSZXVzZURlbGF5X0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWSkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsICh1aW50MzJfdCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEtleVNlcXVlbmNlQ291bnRlcigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQzMl90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MzJfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRLZXlTZXF1ZW5jZUNvdW50ZXIocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290S2V5U2VxdWVuY2VDb3VudGVyKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSLAorICAgICAgICAgICAgICAgIHNpemVvZih1aW50MzJfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgICoodWludDMyX3QqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdEtleVNlcXVlbmNlQ291bnRlcl9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290S2V5U2VxdWVuY2VDb3VudGVyX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLCAodWludDMyX3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3ROZXR3b3JrSWRUaW1lb3V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBvdFRocmVhZFNldE5ldHdvcmtJZFRpbWVvdXQocEZpbHRlci0+b3RDdHgsICoodWludDhfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldE5ldHdvcmtJZFRpbWVvdXQocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3ROZXR3b3JrSWRUaW1lb3V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfTkVUV09SS19JRF9USU1FT1VULAorICAgICAgICAgICAgICAgIHNpemVvZih1aW50OF90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290TmV0d29ya0lkVGltZW91dF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX05FVFdPUktfSURfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE5ldHdvcmtJZFRpbWVvdXRfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1RIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsICh1aW50OF90KilPdXRCdWZmZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBvdFRocmVhZFNldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQocEZpbHRlci0+b3RDdHgsICoodWludDhfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xELAorICAgICAgICAgICAgICAgIHNpemVvZih1aW50OF90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290Um91dGVyVXBncmFkZVRocmVzaG9sZF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFJvdXRlclVwZ3JhZGVUaHJlc2hvbGRfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1RIUkVBRF9ST1VURVJfVVBHUkFERV9USFJFU0hPTEQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsICh1aW50OF90KilPdXRCdWZmZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgICoodWludDhfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgKih1aW50OF90KilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFJvdXRlckRvd25ncmFkZVRocmVzaG9sZF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xELAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290Um91dGVyRG93bmdyYWRlVGhyZXNob2xkX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsICh1aW50OF90KilPdXRCdWZmZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSZWxlYXNlUm91dGVySWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdFRocmVhZFJlbGVhc2VSb3V0ZXJJZChwRmlsdGVyLT5vdEN0eCwgKih1aW50OF90KilJbkJ1ZmZlcikpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UmVsZWFzZVJvdXRlcklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRSwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfQUNUSVZFX1JPVVRFUl9JRFMsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICoodWludDhfdCopSW5CdWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TWFjV2hpdGVsaXN0RW5hYmxlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgQk9PTEVBTiBhRW5hYmxlZCA9ICooQk9PTEVBTiopSW5CdWZmZXI7CisgICAgICAgIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQocEZpbHRlci0+b3RDdHgsIGFFbmFibGVkKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgICooQk9PTEVBTiopT3V0QnVmZmVyID0gb3RMaW5rSXNXaGl0ZWxpc3RFbmFibGVkKHBGaWx0ZXItPm90Q3R4KSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TWFjV2hpdGVsaXN0RW5hYmxlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1dISVRFTElTVF9FTkFCTEVELAorICAgICAgICAgICAgICAgIHNpemVvZihCT09MRUFOKSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICooQk9PTEVBTiopSW5CdWZmZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RNYWNXaGl0ZWxpc3RFbmFibGVkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfV0hJVEVMSVNUX0VOQUJMRUQsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RNYWNXaGl0ZWxpc3RFbmFibGVkX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9NQUNfV0hJVEVMSVNUX0VOQUJMRUQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywgKEJPT0xFQU4qKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEFkZE1hY1doaXRlbGlzdCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykgKyBzaXplb2YoaW50OF90KSkKKyAgICB7CisgICAgICAgIGludDhfdCBhUnNzaSA9ICooaW50OF90KikoSW5CdWZmZXIgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSk7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdExpbmtBZGRXaGl0ZWxpc3RSc3NpKHBGaWx0ZXItPm90Q3R4LCAodWludDhfdCopSW5CdWZmZXIsIGFSc3NpKSk7CisgICAgfQorICAgIGVsc2UgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdEV4dEFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKG90TGlua0FkZFdoaXRlbGlzdChwRmlsdGVyLT5vdEN0eCwgKHVpbnQ4X3QqKUluQnVmZmVyKSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworI2RlZmluZSBSU1NJX09WRVJSSURFX0RJU0FCTEVEICAgICAgICAxMjcgLy8gVXNlZCBmb3IgUFJPUF9NQUNfV0hJVEVMSVNUCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290QWRkTWFjV2hpdGVsaXN0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykpCisgICAgeworICAgICAgICBpbnQ4X3QgYVJzc2kgPSBSU1NJX09WRVJSSURFX0RJU0FCTEVEOworICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykgKyBzaXplb2YoaW50OF90KSkKKyAgICAgICAgeworICAgICAgICAgICAgYVJzc2kgPSAqKGludDhfdCopKEluQnVmZmVyICsgc2l6ZW9mKG90RXh0QWRkcmVzcykpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfV0hJVEVMSVNULAorICAgICAgICAgICAgICAgIHNpemVvZihvdEV4dEFkZHJlc3MpICsgc2l6ZW9mKGludDhfdCksCisgICAgICAgICAgICAgICAgIkVjIiwKKyAgICAgICAgICAgICAgICAob3RFeHRBZGRyZXNzKilJbkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAmYVJzc2kpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290UmVtb3ZlTWFjV2hpdGVsaXN0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIG90TGlua1JlbW92ZVdoaXRlbGlzdChwRmlsdGVyLT5vdEN0eCwgKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RSZW1vdmVNYWNXaGl0ZWxpc3QoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyTGVuZ3RoKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9SRU1PVkUsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1dISVRFTElTVCwKKyAgICAgICAgICAgICAgICBzaXplb2Yob3RFeHRBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICAiRSIsCisgICAgICAgICAgICAgICAgKG90RXh0QWRkcmVzcyopSW5CdWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TWFjV2hpdGVsaXN0RW50cnkoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSAmJgorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1hY1doaXRlbGlzdEVudHJ5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgIG90TGlua0dldFdoaXRlbGlzdEVudHJ5KAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICoodWludDhfdCopSW5CdWZmZXIsCisgICAgICAgICAgICAgICAgKG90TWFjV2hpdGVsaXN0RW50cnkqKU91dEJ1ZmZlcikKKyAgICAgICAgICAgICk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RNYWNXaGl0ZWxpc3RFbnRyeSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q2xlYXJNYWNXaGl0ZWxpc3QoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBvdExpbmtDbGVhcldoaXRlbGlzdChwRmlsdGVyLT5vdEN0eCk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdENsZWFyTWFjV2hpdGVsaXN0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICBzdGF0dXMgPQorICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19XSElURUxJU1QsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdERldmljZVJvbGUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIG90RGV2aWNlUm9sZSByb2xlID0gKih1aW50OF90KilJbkJ1ZmZlcjsKKworICAgICAgICBJbkJ1ZmZlckxlbmd0aCAtPSBzaXplb2YodWludDhfdCk7CisgICAgICAgIEluQnVmZmVyID0gSW5CdWZmZXIgKyBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgaWYgKHJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgICAgICAgICBvdFRocmVhZEJlY29tZUxlYWRlcihwRmlsdGVyLT5vdEN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICAgICAgICAgIG90VGhyZWFkQmVjb21lUm91dGVyKHBGaWx0ZXItPm90Q3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyb2xlID09IE9UX0RFVklDRV9ST0xFX0NISUxEKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgICAgICAgICBvdFRocmVhZEJlY29tZUNoaWxkKHBGaWx0ZXItPm90Q3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyb2xlID09IE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgICAgICAgICBvdFRocmVhZEJlY29tZURldGFjaGVkKHBGaWx0ZXItPm90Q3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9ICh1aW50OF90KW90VGhyZWFkR2V0RGV2aWNlUm9sZShwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdERldmljZVJvbGUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBvdERldmljZVJvbGUgcm9sZSA9ICoodWludDhfdCopSW5CdWZmZXI7CisgICAgICAgIHVpbnQ4X3Qgc3BpbmVsX3JvbGUgPSBTUElORUxfTkVUX1JPTEVfREVUQUNIRUQ7CisKKyAgICAgICAgc3dpdGNoIChyb2xlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgICAgICBzcGluZWxfcm9sZSA9IFNQSU5FTF9ORVRfUk9MRV9DSElMRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgICAgIHNwaW5lbF9yb2xlID0gU1BJTkVMX05FVF9ST0xFX1JPVVRFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgICAgIHNwaW5lbF9yb2xlID0gU1BJTkVMX05FVF9ST0xFX0xFQURFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfUk9MRSwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgc3BpbmVsX3JvbGUpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3REZXZpY2VSb2xlX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfUk9MRSwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdERldmljZVJvbGVfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX05FVF9ST0xFKQorICAgIHsKKwkJdWludDhfdCBzcGluZWxfcm9sZSA9IDA7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgJnNwaW5lbF9yb2xlKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzcGluZWxfcm9sZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjYXNlIFNQSU5FTF9ORVRfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9IE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTUElORUxfTkVUX1JPTEVfQ0hJTEQ6CisgICAgICAgICAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBPVF9ERVZJQ0VfUk9MRV9DSElMRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1BJTkVMX05FVF9ST0xFX1JPVVRFUjoKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9IE9UX0RFVklDRV9ST0xFX1JPVVRFUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1BJTkVMX05FVF9ST0xFX0xFQURFUjoKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9IE9UX0RFVklDRV9ST0xFX0xFQURFUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q2hpbGRJbmZvQnlJZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQxNl90KSAmJgorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdENoaWxkSW5mbykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICBvdFRocmVhZEdldENoaWxkSW5mb0J5SWQoCisgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgKih1aW50MTZfdCopSW5CdWZmZXIsCisgICAgICAgICAgICAgICAgKG90Q2hpbGRJbmZvKilPdXRCdWZmZXIpCisgICAgICAgICAgICApOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90Q2hpbGRJbmZvKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RDaGlsZEluZm9CeUluZGV4KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkgJiYKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RDaGlsZEluZm8pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RUaHJlYWRHZXRDaGlsZEluZm9CeUluZGV4KAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICoodWludDhfdCopSW5CdWZmZXIsCisgICAgICAgICAgICAgICAgKG90Q2hpbGRJbmZvKilPdXRCdWZmZXIpCisgICAgICAgICAgICApOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90Q2hpbGRJbmZvKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RFaWRDYWNoZUVudHJ5KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkgJiYKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFaWRDYWNoZUVudHJ5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgIG90VGhyZWFkR2V0RWlkQ2FjaGVFbnRyeSgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgIChvdEVpZENhY2hlRW50cnkqKU91dEJ1ZmZlcikKKyAgICAgICAgICAgICk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RFaWRDYWNoZUVudHJ5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RMZWFkZXJEYXRhKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90TGVhZGVyRGF0YSkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRHZXRMZWFkZXJEYXRhKHBGaWx0ZXItPm90Q3R4LCAob3RMZWFkZXJEYXRhKilPdXRCdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdExlYWRlckRhdGEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdExlYWRlclJvdXRlcklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldExlYWRlclJvdXRlcklkKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TGVhZGVyUm91dGVySWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdExlYWRlclJvdXRlcklkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfTEVBREVSX1JJRCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdExlYWRlclJvdXRlcklkX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfTEVBREVSX1JJRCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgKHVpbnQ4X3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdExlYWRlcldlaWdodCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgICoodWludDhfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRMZWFkZXJXZWlnaHQocEZpbHRlci0+b3RDdHgpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RMZWFkZXJXZWlnaHQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdExlYWRlcldlaWdodF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX0xFQURFUl9XRUlHSFQsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RMZWFkZXJXZWlnaHRfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1RIUkVBRF9MRUFERVJfV0VJR0hUKQorICAgIHsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLCAodWludDhfdCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TmV0d29ya0RhdGFWZXJzaW9uKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdE5ldERhdGFHZXRWZXJzaW9uKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TmV0d29ya0RhdGFWZXJzaW9uKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3ROZXR3b3JrRGF0YVZlcnNpb25fSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEFfVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE5ldHdvcmtEYXRhVmVyc2lvbl9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfVEhSRUFEX05FVFdPUktfREFUQV9WRVJTSU9OKQorICAgIHsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLCAodWludDhfdCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290UGFydGl0aW9uSWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MzJfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRQYXJ0aXRpb25JZChwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RQYXJ0aXRpb25JZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFBhcnRpdGlvbklkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfUEFSVElUSU9OX0lELAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UGFydGl0aW9uSWRfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX05FVF9QQVJUSVRJT05fSUQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLCAodWludDMyX3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSbG9jMTYoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDE2X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MTZfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRSbG9jMTYocEZpbHRlci0+b3RDdHgpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UmxvYzE2KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQxNl90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290UmxvYzE2X0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfUkxPQzE2LAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UmxvYzE2X0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfUkxPQzE2KQorICAgIHsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywgKHVpbnQxNl90KilPdXRCdWZmZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Um91dGVySWRTZXF1ZW5jZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgICoodWludDhfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRSb3V0ZXJJZFNlcXVlbmNlKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Um91dGVySW5mbygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQxNl90KSAmJgorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdFJvdXRlckluZm8pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RUaHJlYWRHZXRSb3V0ZXJJbmZvKAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICoodWludDE2X3QqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgIChvdFJvdXRlckluZm8qKU91dEJ1ZmZlcikKKyAgICAgICAgICAgICk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RSb3V0ZXJJbmZvKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RTdGFibGVOZXR3b3JrRGF0YVZlcnNpb24oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9IG90TmV0RGF0YUdldFN0YWJsZVZlcnNpb24ocEZpbHRlci0+b3RDdHgpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RTdGFibGVOZXR3b3JrRGF0YVZlcnNpb24oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFN0YWJsZU5ldHdvcmtEYXRhVmVyc2lvbl9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFN0YWJsZU5ldHdvcmtEYXRhVmVyc2lvbl9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTikKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgKHVpbnQ4X3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdE1hY0JsYWNrbGlzdEVuYWJsZWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIEJPT0xFQU4gYUVuYWJsZWQgPSAqKEJPT0xFQU4qKUluQnVmZmVyOworICAgICAgICBvdExpbmtTZXRCbGFja2xpc3RFbmFibGVkKHBGaWx0ZXItPm90Q3R4LCBhRW5hYmxlZCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICAqKEJPT0xFQU4qKU91dEJ1ZmZlciA9IG90TGlua0lzQmxhY2tsaXN0RW5hYmxlZChwRmlsdGVyLT5vdEN0eCkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEFkZE1hY0JsYWNrbGlzdCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RMaW5rQWRkQmxhY2tsaXN0KHBGaWx0ZXItPm90Q3R4LCAodWludDhfdCopSW5CdWZmZXIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFJlbW92ZU1hY0JsYWNrbGlzdCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykpCisgICAgeworICAgICAgICBvdExpbmtSZW1vdmVCbGFja2xpc3QocEZpbHRlci0+b3RDdHgsICh1aW50OF90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TWFjQmxhY2tsaXN0RW50cnkoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSAmJgorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1hY0JsYWNrbGlzdEVudHJ5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgIG90TGlua0dldEJsYWNrbGlzdEVudHJ5KAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICoodWludDhfdCopSW5CdWZmZXIsCisgICAgICAgICAgICAgICAgKG90TWFjQmxhY2tsaXN0RW50cnkqKU91dEJ1ZmZlcikKKyAgICAgICAgICAgICk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RNYWNCbGFja2xpc3RFbnRyeSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q2xlYXJNYWNCbGFja2xpc3QoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBvdExpbmtDbGVhckJsYWNrbGlzdChwRmlsdGVyLT5vdEN0eCk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdE1heFRyYW5zbWl0UG93ZXIoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgb3RMaW5rU2V0TWF4VHJhbnNtaXRQb3dlcihwRmlsdGVyLT5vdEN0eCwgKihpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKihpbnQ4X3QqKU91dEJ1ZmZlciA9IG90TGlua0dldE1heFRyYW5zbWl0UG93ZXIocEZpbHRlci0+b3RDdHgpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKGludDhfdCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdE5leHRPbk1lc2hQcmVmaXgoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSArIHNpemVvZih1aW50OF90KSAmJgorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSArIHNpemVvZihvdEJvcmRlclJvdXRlckNvbmZpZykpCisgICAgeworICAgICAgICBCT09MRUFOIGFMb2NhbCA9ICooQk9PTEVBTiopSW5CdWZmZXI7CisgICAgICAgIHVpbnQ4X3QgYUl0ZXJhdG9yID0gKih1aW50OF90KikoSW5CdWZmZXIgKyBzaXplb2YoQk9PTEVBTikpOworICAgICAgICBvdEJvcmRlclJvdXRlckNvbmZpZyogYUNvbmZpZyA9IChvdEJvcmRlclJvdXRlckNvbmZpZyopKChQVUNIQVIpT3V0QnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgaWYgKGFMb2NhbCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgICAgIG90Qm9yZGVyUm91dGVyR2V0TmV4dE9uTWVzaFByZWZpeCgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgICAgICZhSXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgIGFDb25maWcpCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICBvdE5ldERhdGFHZXROZXh0T25NZXNoUHJlZml4KAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAgICAgJmFJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgYUNvbmZpZykKKyAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RCb3JkZXJSb3V0ZXJDb25maWcpOworICAgICAgICBpZiAoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9IGFJdGVyYXRvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFBvbGxQZXJpb2QoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkpCisgICAgeworICAgICAgICBvdExpbmtTZXRQb2xsUGVyaW9kKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQzMl90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MzJfdCopT3V0QnVmZmVyID0gb3RMaW5rR2V0UG9sbFBlcmlvZChwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RMb2NhbExlYWRlclBhcnRpdGlvbklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgb3RUaHJlYWRTZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQzMl90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MzJfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEFzc2lnbkxpbmtRdWFsaXR5KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSArIHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIG90TGlua1NldEFzc2lnbkxpbmtRdWFsaXR5KAorICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAodWludDhfdCopSW5CdWZmZXIsCisgICAgICAgICAgICAqKHVpbnQ4X3QqKShJbkJ1ZmZlciArIHNpemVvZihvdEV4dEFkZHJlc3MpKSk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykgJiYKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RMaW5rR2V0QXNzaWduTGlua1F1YWxpdHkoCisgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgICh1aW50OF90KilPdXRCdWZmZXIpCisgICAgICAgICAgICApOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RQbGF0Zm9ybVJlc2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgb3RJbnN0YW5jZVJlc2V0KHBGaWx0ZXItPm90Q3R4KTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290RmFjdG9yeVJlc2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgb3RJbnN0YW5jZUZhY3RvcnlSZXNldChwRmlsdGVyLT5vdEN0eCk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFBsYXRmb3JtUmVzZXQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyTGVuZ3RoKTsKKworICAgIHN0YXR1cyA9CisgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBTUElORUxfQ01EX1JFU0VULAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290UGFyZW50SW5mbygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKG90Um91dGVySW5mbykgPT0gMjAsICJUaGUgc2l6ZSBvZiBvdFJvdXRlckluZm8gc2hvdWxkIGJlIDIwIGJ5dGVzIik7CisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90Um91dGVySW5mbykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRHZXRQYXJlbnRJbmZvKHBGaWx0ZXItPm90Q3R4LCAob3RSb3V0ZXJJbmZvKilPdXRCdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdFJvdXRlckluZm8pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFBhcmVudEluZm8oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RSb3V0ZXJJbmZvKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290UGFyZW50SW5mb19IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1BBUkVOVCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFBhcmVudEluZm9fSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1RIUkVBRF9QQVJFTlQpCisgICAgeworICAgICAgICBvdFJvdXRlckluZm8qIGFSb3V0ZXJJbmZvID0gKG90Um91dGVySW5mbyopT3V0QnVmZmVyOworICAgICAgICBSdGxaZXJvTWVtb3J5KGFSb3V0ZXJJbmZvLCBzaXplb2Yob3RSb3V0ZXJJbmZvKSk7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCAiRVMiLCAmYVJvdXRlckluZm8tPm1FeHRBZGRyZXNzLm04LCAmYVJvdXRlckluZm8tPm1SbG9jMTYpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RTaW5nbGV0b24oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICAqKEJPT0xFQU4qKU91dEJ1ZmZlciA9IG90VGhyZWFkSXNTaW5nbGV0b24ocEZpbHRlci0+b3RDdHgpID8gVFJVRSA6IEZBTFNFOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RNYWNDb3VudGVycygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1hY0NvdW50ZXJzKSkKKyAgICB7CisgICAgICAgIG1lbWNweV9zKE91dEJ1ZmZlciwgKk91dEJ1ZmZlckxlbmd0aCwgb3RMaW5rR2V0Q291bnRlcnMocEZpbHRlci0+b3RDdHgpLCBzaXplb2Yob3RNYWNDb3VudGVycykpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TWFjQ291bnRlcnMpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RNYXhDaGlsZHJlbigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgb3RUaHJlYWRTZXRNYXhBbGxvd2VkQ2hpbGRyZW4ocEZpbHRlci0+b3RDdHgsICoodWludDhfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldE1heEFsbG93ZWRDaGlsZHJlbihwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE1heENoaWxkcmVuKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfQ09VTlRfTUFYLAorICAgICAgICAgICAgICAgIHNpemVvZih1aW50OF90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290TWF4Q2hpbGRyZW5fSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9DSElMRF9DT1VOVF9NQVgsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RNYXhDaGlsZHJlbl9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfVEhSRUFEX0NISUxEX0NPVU5UX01BWCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgKHVpbnQ4X3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdENvbW1pc3Npb25lclN0YXJ0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKworICAgIHJldHVybiBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RDb21taXNzaW9uZXJTdGFydChwRmlsdGVyLT5vdEN0eCkpOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdENvbW1pc3Npb25lclN0b3AoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RDb21taXNzaW9uZXJTdG9wKHBGaWx0ZXItPm90Q3R4KSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEpvaW5lclN0YXJ0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdENvbW1pc3Npb25Db25maWcpKQorICAgIHsKKyAgICAgICAgb3RDb21taXNzaW9uQ29uZmlnICphQ29uZmlnID0gKG90Q29tbWlzc2lvbkNvbmZpZyopSW5CdWZmZXI7CisKKyNkZWZpbmUgSXNOb3ROdWxsVGVybWluYXRlZChidWYpIChzdHJubGVuKGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IHNpemVvZihidWYpKQorCisgICAgICAgIGlmIChJc05vdE51bGxUZXJtaW5hdGVkKGFDb25maWctPlBTS2QpIHx8CisgICAgICAgICAgICBJc05vdE51bGxUZXJtaW5hdGVkKGFDb25maWctPlByb3Zpc2lvbmluZ1VybCkgfHwKKyAgICAgICAgICAgIElzTm90TnVsbFRlcm1pbmF0ZWQoYUNvbmZpZy0+VmVuZG9yTmFtZSkgfHwKKyAgICAgICAgICAgIElzTm90TnVsbFRlcm1pbmF0ZWQoYUNvbmZpZy0+VmVuZG9yTW9kZWwpIHx8CisgICAgICAgICAgICBJc05vdE51bGxUZXJtaW5hdGVkKGFDb25maWctPlZlbmRvclN3VmVyc2lvbikgfHwKKyAgICAgICAgICAgIElzTm90TnVsbFRlcm1pbmF0ZWQoYUNvbmZpZy0+VmVuZG9yRGF0YSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmNweV9zKHBGaWx0ZXItPm90VmVuZG9yTmFtZSwgc2l6ZW9mKHBGaWx0ZXItPm90VmVuZG9yTmFtZSksIGFDb25maWctPlZlbmRvck5hbWUpOworICAgICAgICAgICAgc3RyY3B5X3MocEZpbHRlci0+b3RWZW5kb3JNb2RlbCwgc2l6ZW9mKHBGaWx0ZXItPm90VmVuZG9yTW9kZWwpLCBhQ29uZmlnLT5WZW5kb3JNb2RlbCk7CisgICAgICAgICAgICBzdHJjcHlfcyhwRmlsdGVyLT5vdFZlbmRvclN3VmVyc2lvbiwgc2l6ZW9mKHBGaWx0ZXItPm90VmVuZG9yU3dWZXJzaW9uKSwgYUNvbmZpZy0+VmVuZG9yU3dWZXJzaW9uKTsKKyAgICAgICAgICAgIHN0cmNweV9zKHBGaWx0ZXItPm90VmVuZG9yRGF0YSwgc2l6ZW9mKHBGaWx0ZXItPm90VmVuZG9yRGF0YSksIGFDb25maWctPlZlbmRvckRhdGEpOworCisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3RKb2luZXJTdGFydCgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgICAgIGFDb25maWctPlBTS2QsCisgICAgICAgICAgICAgICAgICAgIGFDb25maWctPlByb3Zpc2lvbmluZ1VybCwKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RWZW5kb3JOYW1lLAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdFZlbmRvck1vZGVsLAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdFZlbmRvclN3VmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RWZW5kb3JEYXRhWzBdID09ICdcMCcgPyBOVUxMIDogcEZpbHRlci0+b3RWZW5kb3JEYXRhLAorICAgICAgICAgICAgICAgICAgICBvdEx3ZkpvaW5lckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEpvaW5lclN0b3AoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RKb2luZXJTdG9wKHBGaWx0ZXItPm90Q3R4KSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdENvbW1pc3Npb25lclBhbklkUXVlcnkoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKG90SXA2QWRkcmVzcykpCisgICAgeworICAgICAgICB1aW50MTZfdCBhUGFuSWQgPSAqKHVpbnQxNl90KilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDMyX3QgYUNoYW5uZWxNYXNrID0gKih1aW50MzJfdCopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MgPSAob3RJcDZBZGRyZXNzKikoSW5CdWZmZXIgKyBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKHVpbnQzMl90KSk7CisKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RDb21taXNzaW9uZXJQYW5JZFF1ZXJ5KAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgIGFQYW5JZCwKKyAgICAgICAgICAgICAgICBhQ2hhbm5lbE1hc2ssCisgICAgICAgICAgICAgICAgYUFkZHJlc3MsCisgICAgICAgICAgICAgICAgb3RMd2ZDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2ssCisgICAgICAgICAgICAgICAgcEZpbHRlcikKKyAgICAgICAgICAgICk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RDb21taXNzaW9uZXJFbmVyZ3lTY2FuKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQxNl90KSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2Yob3RJcDZBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGFDaGFubmVsTWFzayA9ICoodWludDMyX3QqKUluQnVmZmVyOworICAgICAgICB1aW50OF90IGFDb3VudCA9ICoodWludDhfdCopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIHVpbnQxNl90IGFQZXJpb2QgPSAqKHVpbnQxNl90KikoSW5CdWZmZXIgKyBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgdWludDE2X3QgYVNjYW5EdXJhdGlvbiA9ICoodWludDE2X3QqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDE2X3QpKTsKKyAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcyA9IChvdElwNkFkZHJlc3MqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKHVpbnQxNl90KSk7CisKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RDb21taXNzaW9uZXJFbmVyZ3lTY2FuKAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgIGFDaGFubmVsTWFzaywKKyAgICAgICAgICAgICAgICBhQ291bnQsCisgICAgICAgICAgICAgICAgYVBlcmlvZCwKKyAgICAgICAgICAgICAgICBhU2NhbkR1cmF0aW9uLAorICAgICAgICAgICAgICAgIGFBZGRyZXNzLAorICAgICAgICAgICAgICAgIG90THdmQ29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0Q2FsbGJhY2ssCisgICAgICAgICAgICAgICAgcEZpbHRlcikKKyAgICAgICAgICAgICk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgICoodWludDhfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUiwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgKih1aW50OF90KilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFJvdXRlclNlbGVjdGlvbkppdHRlcl9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290Um91dGVyU2VsZWN0aW9uSml0dGVyX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVIpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsICh1aW50OF90KilPdXRCdWZmZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RKb2luZXJVZHBQb3J0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDE2X3QpKQorICAgIHsKKyAgICAgICAgb3RUaHJlYWRTZXRKb2luZXJVZHBQb3J0KHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQxNl90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDE2X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MTZfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRKb2luZXJVZHBQb3J0KHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDE2X3QpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFNlbmREaWFnbm9zdGljR2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RJcDZBZGRyZXNzKSArIHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MgPSAob3RJcDZBZGRyZXNzKilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDhfdCBhQ291bnQgPSAqKHVpbnQ4X3QqKShJbkJ1ZmZlciArIHNpemVvZihvdElwNkFkZHJlc3MpKTsKKyAgICAgICAgUFVDSEFSIGFUbHZUeXBlcyA9IEluQnVmZmVyICsgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNkFkZHJlc3MpICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3RUaHJlYWRTZW5kRGlhZ25vc3RpY0dldCgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgICAgIGFBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICBhVGx2VHlwZXMsCisgICAgICAgICAgICAgICAgICAgIGFDb3VudCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RTZW5kRGlhZ25vc3RpY1Jlc2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RJcDZBZGRyZXNzKSArIHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MgPSAob3RJcDZBZGRyZXNzKilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDhfdCBhQ291bnQgPSAqKHVpbnQ4X3QqKShJbkJ1ZmZlciArIHNpemVvZihvdElwNkFkZHJlc3MpKTsKKyAgICAgICAgUFVDSEFSIGFUbHZUeXBlcyA9IEluQnVmZmVyICsgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNkFkZHJlc3MpICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3RUaHJlYWRTZW5kRGlhZ25vc3RpY1Jlc2V0KAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAgICAgYUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgYUNvdW50KQorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdENvbW1pc3Npb25lckFkZEpvaW5lcigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIGNvbnN0IFVMT05HIGFQU0tkQnVmZmVyTGVuZ3RoID0gSW5CdWZmZXJMZW5ndGggLSBzaXplb2YodWludDhfdCkgLSBzaXplb2Yob3RFeHRBZGRyZXNzKSAtIHNpemVvZih1aW50MzJfdCk7CisKKyAgICAgICAgaWYgKGFQU0tkQnVmZmVyTGVuZ3RoIDw9IE9QRU5USFJFQURfUFNLX01BWF9MRU5HVEggKyAxKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50OF90IGFFeHRBZGRyZXNzVmFsaWQgPSAqKHVpbnQ4X3QqKUluQnVmZmVyOworICAgICAgICAgICAgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcyA9IGFFeHRBZGRyZXNzVmFsaWQgPT0gMCA/IE5VTEwgOiAob3RFeHRBZGRyZXNzKikoSW5CdWZmZXIgKyBzaXplb2YodWludDhfdCkpOworICAgICAgICAgICAgY2hhciAqYVBTS2QgPSAoY2hhciopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKG90RXh0QWRkcmVzcykpOworICAgICAgICAgICAgdWludDMyX3QgYVRpbWVvdXQgPSAqKHVpbnQzMl90KikoSW5CdWZmZXIgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSArIGFQU0tkQnVmZmVyTGVuZ3RoKTsKKworICAgICAgICAgICAgLy8gRW5zdXJlIGFQU0tkIGlzIE5VTEwgdGVybWluYXRlZCBpbiB0aGUgYnVmZmVyCisgICAgICAgICAgICBpZiAoc3RybmxlbihhUFNLZCwgYVBTS2RCdWZmZXJMZW5ndGgpIDwgYVBTS2RCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKG90Q29tbWlzc2lvbmVyQWRkSm9pbmVyKAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwgYUV4dEFkZHJlc3MsIGFQU0tkLCBhVGltZW91dCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RDb21taXNzaW9uZXJSZW1vdmVKb2luZXIoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKG90RXh0QWRkcmVzcykpCisgICAgeworICAgICAgICB1aW50OF90IGFFeHRBZGRyZXNzVmFsaWQgPSAqKHVpbnQ4X3QqKUluQnVmZmVyOworICAgICAgICBjb25zdCBvdEV4dEFkZHJlc3MgKmFFeHRBZGRyZXNzID0gYUV4dEFkZHJlc3NWYWxpZCA9PSAwID8gTlVMTCA6IChvdEV4dEFkZHJlc3MqKShJbkJ1ZmZlciArIHNpemVvZih1aW50OF90KSk7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdENvbW1pc3Npb25lclJlbW92ZUpvaW5lcigKKyAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LCBhRXh0QWRkcmVzcykpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q29tbWlzc2lvbmVyUHJvdmlzaW9uaW5nVXJsKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoIDw9IE9QRU5USFJFQURfUFJPVl9VUkxfTUFYX0xFTkdUSCArIDEpCisgICAgeworICAgICAgICBjaGFyICphUHJvdmlzaW9uaW5nVXJsID0gSW5CdWZmZXJMZW5ndGggPiAxID8gKGNoYXIqKUluQnVmZmVyIDogTlVMTDsKKworICAgICAgICAvLyBFbnN1cmUgYVByb3Zpc2lvbmluZ1VybCBpcyBlbXB0eSBvciBOVUxMIHRlcm1pbmF0ZWQgaW4gdGhlIGJ1ZmZlcgorICAgICAgICBpZiAoYVByb3Zpc2lvbmluZ1VybCA9PSBOVUxMIHx8CisgICAgICAgICAgICBzdHJubGVuKGFQcm92aXNpb25pbmdVcmwsIEluQnVmZmVyTGVuZ3RoKSA8IEluQnVmZmVyTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RDb21taXNzaW9uZXJTZXRQcm92aXNpb25pbmdVcmwoCisgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsIGFQcm92aXNpb25pbmdVcmwpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2Yob3RJcDZBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGFDaGFubmVsTWFzayA9ICoodWludDMyX3QqKUluQnVmZmVyOworICAgICAgICB1aW50OF90IGFDb3VudCA9ICoodWludDhfdCopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIHVpbnQxNl90IGFQZXJpb2QgPSAqKHVpbnQxNl90KikoSW5CdWZmZXIgKyBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcyA9IChvdElwNkFkZHJlc3MqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDE2X3QpKTsKKworICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCkgKyBhQ291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICBvdENvbW1pc3Npb25lckFubm91bmNlQmVnaW4oCisgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICAgICBhQ2hhbm5lbE1hc2ssCisgICAgICAgICAgICAgICAgICAgIGFDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgYVBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgYUFkZHJlc3MpCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290U2VuZEFjdGl2ZUdldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgdWludDhfdCBhTGVuZ3RoID0gKih1aW50OF90KilJbkJ1ZmZlcjsKKyAgICAgICAgUFVDSEFSIGFUbHZUeXBlcyA9IGFMZW5ndGggPT0gMCA/IE5VTEwgOiBJbkJ1ZmZlciArIHNpemVvZih1aW50OF90KTsKKworICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RJcDZBZGRyZXNzICphQWRkcmVzcyA9IE5VTEw7CisgICAgICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCArIHNpemVvZihvdElwNkFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGFBZGRyZXNzID0gKG90SXA2QWRkcmVzcyopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICBvdERhdGFzZXRTZW5kTWdtdEFjdGl2ZUdldCgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgYUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgYUFkZHJlc3MpCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290U2VuZEFjdGl2ZVNldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSArIHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICphRGF0YXNldCA9IChvdE9wZXJhdGlvbmFsRGF0YXNldCopSW5CdWZmZXI7CisgICAgICAgIHVpbnQ4X3QgYUxlbmd0aCA9ICoodWludDhfdCopKEluQnVmZmVyICsgc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSk7CisgICAgICAgIFBVQ0hBUiBhVGx2VHlwZXMgPSBhTGVuZ3RoID09IDAgPyBOVUxMIDogSW5CdWZmZXIgKyBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpICsgc2l6ZW9mKHVpbnQ4X3QpOworCisgICAgICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgICAgIG90RGF0YXNldFNlbmRNZ210QWN0aXZlU2V0KAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAgICAgYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgYUxlbmd0aCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RTZW5kUGVuZGluZ0dldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgdWludDhfdCBhTGVuZ3RoID0gKih1aW50OF90KilJbkJ1ZmZlcjsKKyAgICAgICAgUFVDSEFSIGFUbHZUeXBlcyA9IGFMZW5ndGggPT0gMCA/IE5VTEwgOiBJbkJ1ZmZlciArIHNpemVvZih1aW50OF90KTsKKworICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RJcDZBZGRyZXNzICphQWRkcmVzcyA9IE5VTEw7CisgICAgICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCArIHNpemVvZihvdElwNkFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGFBZGRyZXNzID0gKG90SXA2QWRkcmVzcyopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICBvdERhdGFzZXRTZW5kTWdtdFBlbmRpbmdHZXQoCisgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICAgICBhVGx2VHlwZXMsCisgICAgICAgICAgICAgICAgICAgIGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGFBZGRyZXNzKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFNlbmRQZW5kaW5nU2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpICsgc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0ID0gKG90T3BlcmF0aW9uYWxEYXRhc2V0KilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDhfdCBhTGVuZ3RoID0gKih1aW50OF90KikoSW5CdWZmZXIgKyBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpKTsKKyAgICAgICAgUFVDSEFSIGFUbHZUeXBlcyA9IGFMZW5ndGggPT0gMCA/IE5VTEwgOiBJbkJ1ZmZlciArIHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkgKyBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkgKyBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nU2V0KAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAgICAgYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgYUxlbmd0aCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RTZW5kTWdtdENvbW1pc3Npb25lckdldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgdWludDhfdCBhTGVuZ3RoID0gKih1aW50OF90KilJbkJ1ZmZlcjsKKyAgICAgICAgUFVDSEFSIGFUbHZzID0gYUxlbmd0aCA9PSAwID8gTlVMTCA6IEluQnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpOworCisgICAgICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3RDb21taXNzaW9uZXJTZW5kTWdtdEdldCgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgICAgIGFUbHZzLAorICAgICAgICAgICAgICAgICAgICBhTGVuZ3RoKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFNlbmRNZ210Q29tbWlzc2lvbmVyU2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkgKyBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBjb25zdCBvdENvbW1pc3Npb25pbmdEYXRhc2V0ICphRGF0YXNldCA9IChvdENvbW1pc3Npb25pbmdEYXRhc2V0KilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDhfdCBhTGVuZ3RoID0gKih1aW50OF90KikoSW5CdWZmZXIgKyBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkpOworICAgICAgICBQVUNIQVIgYVRsdnMgPSBhTGVuZ3RoID09IDAgPyBOVUxMIDogSW5CdWZmZXIgKyBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkgKyBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdENvbW1pc3Npb25pbmdEYXRhc2V0KSArIHNpemVvZih1aW50OF90KSArIGFMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICBvdENvbW1pc3Npb25lclNlbmRNZ210U2V0KAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAgICAgYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgIGFUbHZzLAorICAgICAgICAgICAgICAgICAgICBhTGVuZ3RoKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEtleVN3aXRjaEd1YXJkdGltZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0S2V5U3dpdGNoR3VhcmRUaW1lKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQzMl90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MzJfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRLZXlTd2l0Y2hHdWFyZFRpbWUocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290S2V5U3dpdGNoR3VhcmR0aW1lKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FLAorICAgICAgICAgICAgICAgIHNpemVvZih1aW50MzJfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgICoodWludDMyX3QqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdEtleVN3aXRjaEd1YXJkdGltZV9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290S2V5U3dpdGNoR3VhcmR0aW1lX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9ORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUUpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLCAodWludDMyX3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RUaHJlYWRBdXRvU3RhcnQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3RUaHJlYWRTZXRBdXRvU3RhcnQoCisgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICAgICAqKEJPT0xFQU4qKUluQnVmZmVyICE9IEZBTFNFKQorICAgICAgICAgICAgKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgKihCT09MRUFOKilPdXRCdWZmZXIgPSBvdFRocmVhZEdldEF1dG9TdGFydChwRmlsdGVyLT5vdEN0eCkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFRocmVhZFByZWZlcnJlZFJvdXRlcklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgICAgIG90VGhyZWFkU2V0UHJlZmVycmVkUm91dGVySWQoCisgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKUluQnVmZmVyICE9IEZBTFNFKQorICAgICAgICAgICAgKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RQYXJlbnRQcmlvcml0eSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKGludDhfdCkpCisgICAgeworICAgICAgICBvdFRocmVhZFNldFBhcmVudFByaW9yaXR5KHBGaWx0ZXItPm90Q3R4LCAqKGludDhfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKGludDhfdCkpCisgICAgeworICAgICAgICAqKHVpbnQxNl90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldFBhcmVudFByaW9yaXR5KHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoaW50OF90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2lvY29udHJvbC5oIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2lvY29udHJvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZWI3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvaW9jb250cm9sLmgKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0lPQ09OVFJPTF9ICisjZGVmaW5lIF9JT0NPTlRST0xfSAorCisvLworLy8gRnVuY3Rpb24gcHJvdG90eXBlIGZvciBnZW5lcmFsIElvIENvbnRyb2wgZnVuY3Rpb25zCisvLworCit0eXBlZGVmIAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK09UTFdGX0lPQ1RMX0ZVTkMoCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKTsKKworLy8KKy8vIEdlbmVyYWwgSW8gQ29udHJvbCBGdW5jdGlvbnMKKy8vCisKKy8vIEhhbmRsZXMgcXVlcmllcyBmb3IgdGhlIGN1cnJlbnQgbGlzdCBvZiBUaHJlYWQgaW50ZXJmYWNlcworT1RMV0ZfSU9DVExfRlVOQyBvdEx3ZklvQ3RsRW51bWVyYXRlSW50ZXJmYWNlczsKKworLy8gSGFuZGxlcyBxdWVyaWVzIGZvciB0aGUgZGV0YWlscyBvZiBhIHNwZWNpZmljIFRocmVhZCBpbnRlcmZhY2UKK09UTFdGX0lPQ1RMX0ZVTkMgb3RMd2ZJb0N0bFF1ZXJ5SW50ZXJmYWNlOworCisvLyBIYW5kbGVzIElPVENMcyBmb3IgT3BlblRocmVhZCBjb250cm9sCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bE9wZW5UaHJlYWRDb250cm9sKAorICAgIF9Jbl8gUElSUCBJcnAKKyAgICApOworCisvLyBIYW5kbGVzIElycCBmb3IgSU9UQ0xzIGZvciBPcGVuVGhyZWFkIGNvbnRyb2wgb24gdGhlIE9wZW5UaHJlYWQgdGhyZWFkCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkNvbXBsZXRlT3BlblRocmVhZElycCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICBJcnAKKyAgICApOworCisvLyBIZWxwZXIgZm9yIGNvbnZlcnRpbmcgSW9DdGwgdG8gc3RyaW5nCitjb25zdCBjaGFyKgorSW9DdGxTdHJpbmcoCisgICAgVUxPTkcgSW9Db250cm9sQ29kZQorICAgICk7CisKKy8vCisvLyBGdW5jdGlvbiBwcm90b3R5cGUgZm9yIE9wZW5UaHJlYWQgSW8gQ29udHJvbCBmdW5jdGlvbnMKKy8vCisKK3R5cGVkZWYgCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworT1RMV0ZfT1RfSU9DVExfRlVOQygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICk7CisKK3R5cGVkZWYgCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworT1RMV0ZfVFVOX0lPQ1RMX0ZVTkMoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApOworCit0eXBlZGVmCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKKyhTUElORUxfSVJQX0NNRF9IQU5ETEVSKSgKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKTsKKworI2RlZmluZSBERUNMX0lPQ1RMX0ZVTkMoWCkgXAorICAgIE9UTFdGX09UX0lPQ1RMX0ZVTkMgb3RMd2ZJb0N0bF8jI1gKKworI2RlZmluZSBERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4oWCkgXAorICAgIE9UTFdGX09UX0lPQ1RMX0ZVTkMgb3RMd2ZJb0N0bF8jI1g7IFwKKyAgICBPVExXRl9UVU5fSU9DVExfRlVOQyBvdEx3ZlR1bklvQ3RsXyMjWAorCisjZGVmaW5lIERFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIoWCkgXAorICAgIE9UTFdGX09UX0lPQ1RMX0ZVTkMgb3RMd2ZJb0N0bF8jI1g7IFwKKyAgICBPVExXRl9UVU5fSU9DVExfRlVOQyBvdEx3ZlR1bklvQ3RsXyMjWDsgXAorICAgIFNQSU5FTF9JUlBfQ01EX0hBTkRMRVIgb3RMd2ZUdW5Jb0N0bF8jI1gjI19IYW5kbGVyCisKKyNkZWZpbmUgUkVGX0lPQ1RMX0ZVTkMoWCkgb3RMd2ZJb0N0bF8jI1ggLCBOVUxMCisKKyNkZWZpbmUgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4oWCkgb3RMd2ZJb0N0bF8jI1ggLCBvdEx3ZlR1bklvQ3RsXyMjWAorCitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90SW50ZXJmYWNlKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RUaHJlYWQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdEFjdGl2ZVNjYW4pOworREVDTF9JT0NUTF9GVU5DKG90RGlzY292ZXIpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdENoYW5uZWwpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdENoaWxkVGltZW91dCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90RXh0ZW5kZWRBZGRyZXNzKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RFeHRlbmRlZFBhbklkKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RMZWFkZXJSbG9jKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RMaW5rTW9kZSk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90TWFzdGVyS2V5KTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RNZXNoTG9jYWxFaWQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdE1lc2hMb2NhbFByZWZpeCk7CisvL0RFQ0xfSU9DVExfRlVOQyhvdE5ldHdvcmtEYXRhTGVhZGVyKTsKKy8vREVDTF9JT0NUTF9GVU5DKG90TmV0d29ya0RhdGFMb2NhbCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90TmV0d29ya05hbWUpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdFBhbklkKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RSb3V0ZXJSb2xsRW5hYmxlZCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90U2hvcnRBZGRyZXNzKTsKK0RFQ0xfSU9DVExfRlVOQyhvdEFjdGl2ZURhdGFzZXQpOworREVDTF9JT0NUTF9GVU5DKG90UGVuZGluZ0RhdGFzZXQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdExvY2FsTGVhZGVyV2VpZ2h0KTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTihvdEFkZEJvcmRlclJvdXRlcik7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSZW1vdmVCb3JkZXJSb3V0ZXIpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOKG90QWRkRXh0ZXJuYWxSb3V0ZSk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSZW1vdmVFeHRlcm5hbFJvdXRlKTsKK0RFQ0xfSU9DVExfRlVOQyhvdFNlbmRTZXJ2ZXJEYXRhKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RDb250ZXh0SWRSZXVzZURlbGF5KTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RLZXlTZXF1ZW5jZUNvdW50ZXIpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdE5ldHdvcmtJZFRpbWVvdXQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOKG90UmVsZWFzZVJvdXRlcklkKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RNYWNXaGl0ZWxpc3RFbmFibGVkKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTihvdEFkZE1hY1doaXRlbGlzdCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSZW1vdmVNYWNXaGl0ZWxpc3QpOworREVDTF9JT0NUTF9GVU5DKG90TWFjV2hpdGVsaXN0RW50cnkpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOKG90Q2xlYXJNYWNXaGl0ZWxpc3QpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdERldmljZVJvbGUpOworREVDTF9JT0NUTF9GVU5DKG90Q2hpbGRJbmZvQnlJZCk7CitERUNMX0lPQ1RMX0ZVTkMob3RDaGlsZEluZm9CeUluZGV4KTsKK0RFQ0xfSU9DVExfRlVOQyhvdEVpZENhY2hlRW50cnkpOworREVDTF9JT0NUTF9GVU5DKG90TGVhZGVyRGF0YSk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90TGVhZGVyUm91dGVySWQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdExlYWRlcldlaWdodCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90TmV0d29ya0RhdGFWZXJzaW9uKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RQYXJ0aXRpb25JZCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90UmxvYzE2KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFJvdXRlcklkU2VxdWVuY2UpOworREVDTF9JT0NUTF9GVU5DKG90Um91dGVySW5mbyk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90U3RhYmxlTmV0d29ya0RhdGFWZXJzaW9uKTsKK0RFQ0xfSU9DVExfRlVOQyhvdE1hY0JsYWNrbGlzdEVuYWJsZWQpOworREVDTF9JT0NUTF9GVU5DKG90QWRkTWFjQmxhY2tsaXN0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFJlbW92ZU1hY0JsYWNrbGlzdCk7CitERUNMX0lPQ1RMX0ZVTkMob3RNYWNCbGFja2xpc3RFbnRyeSk7CitERUNMX0lPQ1RMX0ZVTkMob3RDbGVhck1hY0JsYWNrbGlzdCk7CitERUNMX0lPQ1RMX0ZVTkMob3RNYXhUcmFuc21pdFBvd2VyKTsKK0RFQ0xfSU9DVExfRlVOQyhvdE5leHRPbk1lc2hQcmVmaXgpOworREVDTF9JT0NUTF9GVU5DKG90UG9sbFBlcmlvZCk7CitERUNMX0lPQ1RMX0ZVTkMob3RMb2NhbExlYWRlclBhcnRpdGlvbklkKTsKK0RFQ0xfSU9DVExfRlVOQyhvdEFzc2lnbkxpbmtRdWFsaXR5KTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTihvdFBsYXRmb3JtUmVzZXQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdFBhcmVudEluZm8pOworREVDTF9JT0NUTF9GVU5DKG90U2luZ2xldG9uKTsKK0RFQ0xfSU9DVExfRlVOQyhvdE1hY0NvdW50ZXJzKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RNYXhDaGlsZHJlbik7CitERUNMX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJTdGFydCk7CitERUNMX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJTdG9wKTsKK0RFQ0xfSU9DVExfRlVOQyhvdEpvaW5lclN0YXJ0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdEpvaW5lclN0b3ApOworREVDTF9JT0NUTF9GVU5DKG90RmFjdG9yeUFzc2lnbmVkSWVlZUV1aTY0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdEhhc2hNYWNBZGRyZXNzKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQpOworREVDTF9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyUGFuSWRRdWVyeSk7CitERUNMX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJFbmVyZ3lTY2FuKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIpOworREVDTF9JT0NUTF9GVU5DKG90Sm9pbmVyVWRwUG9ydCk7CitERUNMX0lPQ1RMX0ZVTkMob3RTZW5kRGlhZ25vc3RpY0dldCk7CitERUNMX0lPQ1RMX0ZVTkMob3RTZW5kRGlhZ25vc3RpY1Jlc2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdENvbW1pc3Npb25lckFkZEpvaW5lcik7CitERUNMX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJSZW1vdmVKb2luZXIpOworREVDTF9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyUHJvdmlzaW9uaW5nVXJsKTsKK0RFQ0xfSU9DVExfRlVOQyhvdENvbW1pc3Npb25lckFubm91bmNlQmVnaW4pOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdEVuZXJneVNjYW4pOworREVDTF9JT0NUTF9GVU5DKG90U2VuZEFjdGl2ZUdldCk7CitERUNMX0lPQ1RMX0ZVTkMob3RTZW5kQWN0aXZlU2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFNlbmRQZW5kaW5nR2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFNlbmRQZW5kaW5nU2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFNlbmRNZ210Q29tbWlzc2lvbmVyR2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFNlbmRNZ210Q29tbWlzc2lvbmVyU2V0KTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RLZXlTd2l0Y2hHdWFyZHRpbWUpOworREVDTF9JT0NUTF9GVU5DKG90RmFjdG9yeVJlc2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFRocmVhZEF1dG9TdGFydCk7CitERUNMX0lPQ1RMX0ZVTkMob3RUaHJlYWRQcmVmZXJyZWRSb3V0ZXJJZCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90UFNLYyk7CitERUNMX0lPQ1RMX0ZVTkMob3RQYXJlbnRQcmlvcml0eSk7CisKKyNlbmRpZiAvLyBfSU9DT05UUk9MX0gKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9uc2loZWxwZXIuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9uc2loZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzgzMTk5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL25zaWhlbHBlci5oCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdmFyaW91cyB0eXBlcyBhbmQgZnVuY3Rpb24gcmVxdWlyZWQgdG8gdXNlIE5TSSB0bworICogIHF1ZXJ5IGFuIGludGVyZmFjZSdzIGNvbXBhcnRtZW50IElELgorICovCisKKyNpZm5kZWYgX05TSV9IRUxQRVJfSAorI2RlZmluZSBfTlNJX0hFTFBFUl9ICisKKyNkZWZpbmUgTlNJU1RBVFVTIE5UU1RBVFVTCisKK3R5cGVkZWYgZW51bSBfTlNJX1NUT1JFIHsKKyAgICBOc2lQZXJzaXN0ZW50LAorICAgIC8vIFBlcnNpc3RzIGFzIGxvbmcgYXMgbW9kdWxlIGV4aXN0cy4KKyAgICBOc2lBY3RpdmUsCisgICAgTnNpQm90aCwKKyAgICBOc2lDdXJyZW50LAorICAgIE5zaUJvb3RGaXJtd2FyZVRhYmxlCit9IE5TSV9TVE9SRTsKKwordHlwZWRlZiBlbnVtIF9OU0lfU0VUX0FDVElPTiB7ICAKKyAgICBOc2lTZXREZWZhdWx0LCAgCisgICAgTnNpU2V0Q3JlYXRlT25seSwgIAorICAgIE5zaVNldENyZWF0ZU9yU2V0LCAgCisgICAgTnNpU2V0RGVsZXRlLCAgCisgICAgTnNpU2V0UmVzZXQsICAKKyAgICBOc2lTZXRDbGVhciwgIAorICAgIE5zaVNldENyZWF0ZU9yU2V0V2l0aFJlZmVyZW5jZSwgIAorICAgIE5zaVNldERlbGV0ZVdpdGhSZWZlcmVuY2UsICAKK30gTlNJX1NFVF9BQ1RJT047ICAKKwordHlwZWRlZiBlbnVtIF9OU0lfU1RSVUNUX1RZUEUgeworICAgIE5zaVN0cnVjdFJ3LAorICAgIE5zaVN0cnVjdFJvRHluYW1pYywKKyAgICBOc2lTdHJ1Y3RSb1N0YXRpYywKKyAgICBOc2lNYXhpbXVtU3RydWN0VHlwZQorfSBOU0lfU1RSVUNUX1RZUEU7CisKK3R5cGVkZWYgc3RydWN0IF9OTF9JTlRFUkZBQ0VfS0VZIHsgIAorICAgIElGX0xVSUQgTHVpZDsgIAorfSBOTF9JTlRFUkZBQ0VfS0VZLCAqUE5MX0lOVEVSRkFDRV9LRVk7ICAKKwordHlwZWRlZiBlbnVtIF9OTF9UWVBFX09GX0lOVEVSRkFDRSB7ICAKKyAgICBJbnRlcmZhY2VBbGxvd0FsbCA9IDAsICAKKyAgICBJbnRlcmZhY2VEaXNhbGxvd1VuaWNhc3QsICAKKyAgICBJbnRlcmZhY2VEaXNhbGxvd011bHRpY2FzdCwgIAorICAgIEludGVyZmFjZURpc2FsbG93QWxsLCAgCisgICAgSW50ZXJmYWNlVW5jaGFuZ2VkID0gLTEgIAorfSBOTF9UWVBFX09GX0lOVEVSRkFDRTsgIAorICAKK3R5cGVkZWYgZW51bSBfTkxfRE9NQUlOX05FVFdPUktfTE9DQVRJT04geyAgCisgICAgRG9tYWluTmV0d29ya0xvY2F0aW9uUmVtb3RlID0gMCwgICAvLyBjb25uZWN0IHRvIGEgZG9tYWluIG5ldHdvcmsgcmVtb3RlbHkgdmlhIERBIGkuZS4gb3V0c2lkZSBjb3JwIG5ldHdvcmsuICAKKyAgICBEb21haW5OZXR3b3JrQ2F0ZWdvcnlMaW5rID0gMSwgICAgIC8vIGNvbm5lY3QgdG8gYSBkb21haW4gbmV0d29yayBkaXJlY3RseSBpLmUuIGluc2lkZSBjb3JwIG5ldHdvcmsuICAKKyAgICBEb21haW5OZXR3b3JrVW5jaGFuZ2VkID0gLTEgIAorfSBOTF9ET01BSU5fTkVUV09SS19MT0NBVElPTjsgIAorICAKK3R5cGVkZWYgZW51bSBfTkxfRE9NQUlOX1RZUEUgeyAgCisgICAgRG9tYWluVHlwZU5vbkRvbWFpbk5ldHdvcmsgPSAwLCAgICAvLyBjb25uZWN0ZWQgdG8gbm9uLWRvbWFpbiBuZXR3b3JrLiAgCisgICAgRG9tYWluVHlwZURvbWFpbk5ldHdvcmsgPSAxLCAgICAgICAvLyBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrIHRoYXQgaGFzIGFjdGl2ZSBkaXJlY3RvcnkuICAKKyAgICBEb21haW5UeXBlRG9tYWluQXV0aGVudGljYXRlZCA9IDIsIC8vIGNvbm5lY3RlZCB0byBBRCBuZXR3b3JrIGFuZCBtYWNoaW5lIGlzIGF1dGhlbnRpY2F0ZWQgYWdhaW5zdCBpdC4gIAorICAgIERvbWFpblR5cGVVbmNoYW5nZWQgPSAtMSAgCit9IE5MX0RPTUFJTl9UWVBFOyAgCisgIAordHlwZWRlZiBlbnVtIF9OTF9JTlRFUkZBQ0VfRUNOX0NBUEFCSUxJVFkgeyAgCisgICAgTmxJbnRlcmZhY2VFY25VbmNoYW5nZWQgPSAtMSwgIAorICAgIE5sSW50ZXJmYWNlRWNuRGlzYWJsZWQgPSAwLCAgCisgICAgTmxJbnRlcmZhY2VFY25Vc2VFY3QxID0gMSwgIAorICAgIE5sSW50ZXJmYWNlRWNuVXNlRWN0MCA9IDIsICAKKyAgICBObEludGVyZmFjZUVjbkFwcERlY2lkZSA9IDMgIAorfSBOTF9JTlRFUkZBQ0VfRUNOX0NBUEFCSUxJVFksICpQTkxfSU5URVJGQUNFX0VDTl9DQVBBQklMSVRZOyAgCisgIAordHlwZWRlZiBlbnVtIF9OTF9JTlRFUk5FVF9DT05ORUNUSVZJVFlfU1RBVFVTIHsgIAorICAgIE5sTm9JbnRlcm5ldENvbm5lY3Rpdml0eSwgIAorICAgIE5sTm9JbnRlcm5ldERuc1Jlc29sdXRpb25TdWNjZWVkZWQsICAKKyAgICBObEludGVybmV0Q29ubmVjdGl2aXR5RGV0ZWN0ZWQsICAKKyAgICBObEludGVybmV0Q29ubmVjdGl2aXR5VW5rbm93biA9IC0xICAKK30gTkxfSU5URVJORVRfQ09OTkVDVElWSVRZX1NUQVRVUywgKlBOTF9JTlRFUk5FVF9DT05ORUNUSVZJVFlfU1RBVFVTOyAgCisKK3R5cGVkZWYgdW5pb24gX0lQX0FERFJFU1NfU1RPUkFHRSB7ICAKKyAgICBJTl9BRERSIElwdjQ7ICAKKyAgICBJTjZfQUREUiBJcHY2OyAgCisgICAgVUNIQVIgQnVmZmVyW3NpemVvZihJTjZfQUREUildOyAgCit9IElQX0FERFJFU1NfU1RPUkFHRSwgKlBJUF9BRERSRVNTX1NUT1JBR0U7ICAKKwordHlwZWRlZiBzdHJ1Y3QgX05MX0lOVEVSRkFDRV9SVyB7ICAKKyAgICBCT09MRUFOIEFkdmVydGlzaW5nRW5hYmxlZDsgIAorICAgIEJPT0xFQU4gRm9yd2FyZGluZ0VuYWJsZWQ7ICAKKyAgICBCT09MRUFOIE11bHRpY2FzdEZvcndhcmRpbmdFbmFibGVkOyAgCisgICAgQk9PTEVBTiBXZWFrSG9zdFNlbmQ7ICAKKyAgICBCT09MRUFOIFdlYWtIb3N0UmVjZWl2ZTsgIAorICAgIEJPT0xFQU4gVXNlTmVpZ2hib3JVbnJlYWNoYWJpbGl0eURldGVjdGlvbjsgIAorICAgIEJPT0xFQU4gVXNlQXV0b21hdGljTWV0cmljOworICAgIEJPT0xFQU4gVXNlWmVyb0Jyb2FkY2FzdEFkZHJlc3M7ICAKKyAgICBCT09MRUFOIFVzZUJyb2FkY2FzdEZvclJvdXRlckRpc2NvdmVyeTsgIAorICAgIEJPT0xFQU4gRGhjcFJvdXRlckRpc2NvdmVyeUVuYWJsZWQ7ICAKKyAgICBCT09MRUFOIE1hbmFnZWRBZGRyZXNzQ29uZmlndXJhdGlvblN1cHBvcnRlZDsgIAorICAgIEJPT0xFQU4gT3RoZXJTdGF0ZWZ1bENvbmZpZ3VyYXRpb25TdXBwb3J0ZWQ7ICAKKyAgICBCT09MRUFOIEFkdmVydGlzZURlZmF1bHRSb3V0ZTsgIAorICAgIE5MX05FVFdPUktfQ0FURUdPUlkgTmV0d29ya0NhdGVnb3J5OyAgCisgICAgTkxfUk9VVEVSX0RJU0NPVkVSWV9CRUhBVklPUiBSb3V0ZXJEaXNjb3ZlcnlCZWhhdmlvcjsgIAorICAgIE5MX1RZUEVfT0ZfSU5URVJGQUNFIFR5cGVPZkludGVyZmFjZTsgIAorICAgIFVMT05HIE1ldHJpYzsgIAorICAgIFVMT05HIEJhc2VSZWFjaGFibGVUaW1lOyAgICAvLyBCYXNlIGZvciByYW5kb20gUmVhY2hhYmxlVGltZSAoaW4gbXMpLiAgCisgICAgVUxPTkcgUmV0cmFuc21pdFRpbWU7ICAgICAgIC8vIE5laWdoYm9yIFNvbGljaXRhdGlvbiB0aW1lb3V0IChpbiBtcykuICAKKyAgICBVTE9ORyBQYXRoTXR1RGlzY292ZXJ5VGltZW91dDsgLy8gUGF0aCBNVFUgZGlzY292ZXJ5IHRpbWVvdXQgKGluIG1zKS4gIAorICAgIFVMT05HIERhZFRyYW5zbWl0czsgICAgICAgICAvLyBEdXBBZGRyRGV0ZWN0VHJhbnNtaXRzIGluIFJGQyAyNDYyLiAgCisgICAgTkxfTElOS19MT0NBTF9BRERSRVNTX0JFSEFWSU9SIExpbmtMb2NhbEFkZHJlc3NCZWhhdmlvcjsgIAorICAgIFVMT05HIExpbmtMb2NhbEFkZHJlc3NUaW1lb3V0OyAvLyBJbiBtcy4gIAorICAgIFVMT05HIFpvbmVJbmRpY2VzW1Njb3BlTGV2ZWxDb3VudF07IC8vIFpvbmUgcGFydCBvZiBhIFNDT1BFX0lELiAgCisgICAgVUxPTkcgTmxNdHU7ICAKKyAgICBVTE9ORyBTaXRlUHJlZml4TGVuZ3RoOyAgCisgICAgVUxPTkcgTXVsdGljYXN0Rm9yd2FyZGluZ0hvcExpbWl0OyAgCisgICAgVUxPTkcgQ3VycmVudEhvcExpbWl0OyAKKyAgICBJUF9BRERSRVNTX1NUT1JBR0UgTGlua0xvY2FsQWRkcmVzczsgIAorICAgIEJPT0xFQU4gRGlzYWJsZURlZmF1bHRSb3V0ZXM7ICAKKyAgICBVTE9ORyBBZHZlcnRpc2VkUm91dGVyTGlmZXRpbWU7ICAKKyAgICBCT09MRUFOIFNlbmRVbnNvbGljaXRlZE5laWdoYm9yQWR2ZXJ0aXNlbWVudE9uRGFkOyAgCisgICAgQk9PTEVBTiBMaW1pdGVkTGlua0Nvbm5lY3Rpdml0eTsgIAorICAgIEJPT0xFQU4gRm9yY2VBUlBORFBhdHRlcm47ICAKKyAgICBCT09MRUFOIEVuYWJsZURpcmVjdE1BQ1BhdHRlcm47ICAKKyAgICBCT09MRUFOIEVuYWJsZVdvbDsgIAorICAgIEJPT0xFQU4gRm9yY2VUdW5uZWxpbmc7ICAKKyAgICBOTF9ET01BSU5fTkVUV09SS19MT0NBVElPTiBEb21haW5OZXR3b3JrTG9jYXRpb247ICAKKyAgICBVTE9OR0xPTkcgUmFuZG9taXplZEVwb2NoOyAgCisgICAgTkxfSU5URVJGQUNFX0VDTl9DQVBBQklMSVRZIEVjbkNhcGFiaWxpdHk7ICAKKyAgICBOTF9ET01BSU5fVFlQRSBEb21haW5UeXBlOyAgCisgICAgR1VJRCBOZXR3b3JrU2lnbmF0dXJlOyAgCisgICAgTkxfSU5URVJORVRfQ09OTkVDVElWSVRZX1NUQVRVUyBJbnRlcm5ldENvbm5lY3Rpdml0eURldGVjdGVkOyAgCisgICAgQk9PTEVBTiBQcm94eURldGVjdGVkOyAgCisgICAgVUxPTkcgRGFkUmV0cmFuc21pdFRpbWU7ICAKKyAgICBCT09MRUFOIFByZWZpeFNoYXJpbmc7ICAKKyAgICBCT09MRUFOIERpc2FibGVVbmNvbnN0cmFpbmVkUm91dGVMb29rdXA7ICAKKyAgICBVTE9ORyBOZXR3b3JrQ29udGV4dDsgIAorICAgIEJPT0xFQU4gUmVzZXRBdXRvY29uZmlndXJhdGlvbk9uT3BlclN0YXR1c0Rvd247ICAgCisgICAgQk9PTEVBTiBDbGFtcE1zc0VuYWJsZWQ7ICAKKyAgCit9IE5MX0lOVEVSRkFDRV9SVywgKlBOTF9JTlRFUkZBQ0VfUlc7ICAKKworX19pbmxpbmUgIAorVk9JRCAgCitObEluaXRpYWxpemVJbnRlcmZhY2VSdyggIAorICAgIElOIE9VVCBQTkxfSU5URVJGQUNFX1JXIFJ3ICAKKyAgICApICAKK3sgIAorICAgIC8vICAKKyAgICAvLyBJbml0aWFsaXplIGFsbCBmaWVsZHMgdG8gdmFsdWVzIHRoYXQgaW5kaWNhdGUgIm5vIGNoYW5nZSIuICAKKyAgICAvLyAgCisgICAgbWVtc2V0KFJ3LCAweGZmLCBzaXplb2YoKlJ3KSk7ICAKKyAgICBSdy0+QmFzZVJlYWNoYWJsZVRpbWUgPSAwOyAgCisgICAgUnctPlJldHJhbnNtaXRUaW1lID0gMDsgIAorICAgIFJ3LT5QYXRoTXR1RGlzY292ZXJ5VGltZW91dCA9IDA7ICAKKyAgICBSdy0+TmxNdHUgPSAwOyAgCisgICAgUnctPkRhZFJldHJhbnNtaXRUaW1lID0gMDsgIAorfSAgCisKK3R5cGVkZWYgZW51bSB7ICAKKyAgICBObEJlc3RSb3V0ZU9iamVjdCwgIAorICAgIE5sQ29tcGFydG1lbnRGb3J3YXJkaW5nT2JqZWN0LCAgCisgICAgTmxDb21wYXJ0bWVudE9iamVjdCwgIAorICAgIE5sQ29udHJvbFByb3RvY29sT2JqZWN0LCAgCisgICAgTmxFY2hvUmVxdWVzdE9iamVjdCwgIAorICAgIE5sRWNob1NlcXVlbmNlUmVxdWVzdE9iamVjdCwgIAorICAgIE5sR2xvYmFsT2JqZWN0LCAgCisgICAgTmxJbnRlcmZhY2VPYmplY3QsICAKKyAgICBObExvY2FsQW55Y2FzdEFkZHJlc3NPYmplY3QsICAKKyAgICBObExvY2FsTXVsdGljYXN0QWRkcmVzc09iamVjdCwgIAorICAgIE5sTG9jYWxVbmljYXN0QWRkcmVzc09iamVjdCwgIAorICAgIE5sTmVpZ2hib3JPYmplY3QsICAKKyAgICBObFBhdGhPYmplY3QsICAKKyAgICBObFBvdGVudGlhbFJvdXRlck9iamVjdCwgIAorICAgIE5sUHJlZml4UG9saWN5T2JqZWN0LCAgCisgICAgTmxQcm94eU5laWdoYm9yT2JqZWN0LCAgCisgICAgTmxSb3V0ZU9iamVjdCwgIAorICAgIE5sU2l0ZVByZWZpeE9iamVjdCwgIAorICAgIE5sU3ViSW50ZXJmYWNlT2JqZWN0LCAgCisgICAgTmxXYWtlVXBQYXR0ZXJuT2JqZWN0LCAgCisgICAgTmxSZXNvbHZlTmVpZ2hib3JPYmplY3QsICAKKyAgICBObFNvcnRBZGRyZXNzZXNPYmplY3QsICAKKyAgICBObE1mZU9iamVjdCwgIAorICAgIE5sTWZlTm90aWZ5T2JqZWN0LCAgCisgICAgTmxJbnRlcmZhY2VIb3BPYmplY3QsICAKKyAgICBObEludGVyZmFjZVVucHJpdmlsZWdlZE9iamVjdCwgIAorICAgIE5sVHVubmVsUGh5c2ljYWxJbnRlcmZhY2VPYmplY3QsICAKKyAgICBObExvY2FsaXR5T2JqZWN0LCAgCisgICAgTmxMb2NhbGl0eURhdGFPYmplY3QsICAKKyAgICBObExvY2FsaXR5UHJpdmF0ZU9iamVjdCwgIAorICAgIE5sTG9jYWxCb3R0bGVuZWNrT2JqZWN0LCAgCisgICAgTmxUaW1lck9iamVjdCwgIAorICAgIE5sRGlzY29ubmVjdEludGVyZmFjZSwgIAorICAgIE5sTWF4aW11bU9iamVjdCAgCit9IE5MX09CSkVDVF9UWVBFLCAqUE5MX09CSkVDVF9UWVBFOyAgCisKK05TSVNUQVRVUworTnNpR2V0UGFyYW1ldGVyKAorICAgIF9faW4gTlNJX1NUT1JFIFN0b3JlLAorICAgIF9faW4gUE5QSV9NT0RVTEVJRCBNb2R1bGVJZCwKKyAgICBfX2luIFVMT05HIE9iamVjdEluZGV4LAorICAgIF9faW5fYmNvdW50X29wdChLZXlTdHJ1Y3RMZW5ndGgpIFBWT0lEIEtleVN0cnVjdCwKKyAgICBfX2luIFVMT05HIEtleVN0cnVjdExlbmd0aCwKKyAgICBfX2luIE5TSV9TVFJVQ1RfVFlQRSBTdHJ1Y3RUeXBlLAorICAgIF9fb3V0X2Jjb3VudChQYXJhbWV0ZXJMZW4pIFBWT0lEIFBhcmFtZXRlciwKKyAgICBfX2luIFVMT05HIFBhcmFtZXRlckxlbiwKKyAgICBfX2luIFVMT05HIFBhcmFtZXRlck9mZnNldAorICAgICk7CisKK05TSVNUQVRVUyAgCitOc2lTZXRBbGxQYXJhbWV0ZXJzKCAgCisgICAgX19pbiBOU0lfU1RPUkUgICAgICBTdG9yZSwgIAorICAgIF9faW4gTlNJX1NFVF9BQ1RJT04gQWN0aW9uLCAgCisgICAgX19pbiBQTlBJX01PRFVMRUlEICBNb2R1bGVJZCwgIAorICAgIF9faW4gVUxPTkcgICAgICAgICAgT2JqZWN0SW5kZXgsICAKKyAgICBfX2luX2Jjb3VudF9vcHQoS2V5U3RydWN0TGVuZ3RoKSBQVk9JRCBLZXlTdHJ1Y3QsICAKKyAgICBfX2luIFVMT05HICAgICAgICAgIEtleVN0cnVjdExlbmd0aCwgIAorICAgIF9faW5fYmNvdW50X29wdChSd1BhcmFtZXRlclN0cnVjdExlbmd0aCkgUFZPSUQgUndQYXJhbWV0ZXJTdHJ1Y3QsICAKKyAgICBfX2luIFVMT05HICAgICAgICAgIFJ3UGFyYW1ldGVyU3RydWN0TGVuZ3RoICAKKyAgICApOyAgCisKK2V4dGVybiBDT05TVCBOUElfTU9EVUxFSUQgTlBJX01TX05ESVNfTU9EVUxFSUQ7CisKK3R5cGVkZWYgZW51bSBfTkRJU19OU0lfT0JKRUNUX0lOREVYCit7CisgICAgTmRpc05zaU9iamVjdEludGVyZmFjZUluZm9ybWF0aW9uLAorICAgIE5kaXNOc2lPYmplY3RJbnRlcmZhY2VFbnVtLAorICAgIE5kaXNOc2lPYmplY3RJbnRlcmZhY2VMb29rVXAsCisgICAgTmRpc05zaU9iamVjdElmUmN2QWRkcmVzcywKKyAgICBOZGlzTnNpT2JqZWN0U3RhY2tJZkVudHJ5LAorICAgIE5kaXNOc2lPYmplY3RJbnZlcnRlZElmU3RhY2tFbnRyeSwKKyAgICBOZGlzTnNpT2JqZWN0TmV0d29yaywKKyAgICBOZGlzTnNpT2JqZWN0Q29tcGFydG1lbnQsCisgICAgTmRpc05zaU9iamVjdFRocmVhZCwKKyAgICBOZGlzTnNpT2JqZWN0U2Vzc2lvbiwKKyAgICBOZGlzTnNpT2JqZWN0SW50ZXJmYWNlUGVyc2lzdCwKKyAgICBOZGlzTnNpT2JqZWN0Q29tcGFydG1lbnRMb29rdXAsCisgICAgTmRpc05zaU9iamVjdEludGVyZmFjZUluZm9ybWF0aW9uUmF3LAorICAgIE5kaXNOc2lPYmplY3RJbnRlcmZhY2VFbnVtUmF3LAorICAgIE5kaXNOc2lPYmplY3RTdGFja0lmRW51bSwKKyAgICBOZGlzTnNpT2JqZWN0SW50ZXJmYWNlSXNvbGF0aW9uSW5mbywKKyAgICBOZGlzTnNpT2JqZWN0Sm9iLAorICAgIE5kaXNOc2lPYmplY3RNYXhpbXVtCit9IE5ESVNfTlNJX09CSkVDVF9JTkRFWCwgKlBORElTX05TSV9PQkpFQ1RfSU5ERVg7CisKK3R5cGVkZWYgc3RydWN0IF9ORElTX05TSV9JTlRFUkZBQ0VfSU5GT1JNQVRJT05fUlcKK3sKKyAgICAvLyBydyBmaWVsZHMKKyAgICBHVUlEICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya0d1aWQ7CisgICAgTkVUX0lGX0FETUlOX1NUQVRVUyAgICAgICAgIGlmQWRtaW5TdGF0dXM7CisgICAgTkRJU19JRl9DT1VOVEVEX1NUUklORyAgICAgIGlmQWxpYXM7CisgICAgTkRJU19JRl9QSFlTSUNBTF9BRERSRVNTICAgIGlmUGh5c0FkZHJlc3M7CisgICAgTkRJU19JRl9DT1VOVEVEX1NUUklORyAgICAgIGlmTDJOZXR3b3JrSW5mbzsKK31ORElTX05TSV9JTlRFUkZBQ0VfSU5GT1JNQVRJT05fUlcsICpQTkRJU19OU0lfSU5URVJGQUNFX0lORk9STUFUSU9OX1JXOworCisjZGVmaW5lIE5ESVNfU0laRU9GX05TSV9JTlRFUkZBQ0VfSU5GT1JNQVRJT05fUldfUkVWSVNJT05fMSAgICAgIFwKKyAgICAgICAgUlRMX1NJWkVPRl9USFJPVUdIX0ZJRUxEKE5ESVNfTlNJX0lOVEVSRkFDRV9JTkZPUk1BVElPTl9SVywgaWZQaHlzQWRkcmVzcykKKwordHlwZWRlZiBORElTX0lOVEVSRkFDRV9JTkZPUk1BVElPTiBORElTX05TSV9JTlRFUkZBQ0VfSU5GT1JNQVRJT05fUk9ELCAqUE5ESVNfTlNJX0lOVEVSRkFDRV9JTkZPUk1BVElPTl9ST0Q7CisKKy8vCisvLyBDb3BpZWQgZnJvbSBuZGlzY29tcC5oCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorRVhQT1JUCitDT01QQVJUTUVOVF9JRAorTmRpc0dldFRocmVhZE9iamVjdENvbXBhcnRtZW50SWQoCisgICAgX0luXyBQRVRIUkVBRCBUaHJlYWRPYmplY3QKKyAgICApOworCitfSVJRTF9yZXF1aXJlc18oUEFTU0lWRV9MRVZFTCkKK0VYUE9SVAorTlRTVEFUVVMKK05kaXNTZXRUaHJlYWRPYmplY3RDb21wYXJ0bWVudElkKAorICAgIF9Jbl8gUEVUSFJFQUQgVGhyZWFkT2JqZWN0LAorICAgIF9Jbl8gTkVUX0lGX0NPTVBBUlRNRU5UX0lEIENvbXBhcnRtZW50SWQKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorX19pbmxpbmUKK0NPTVBBUlRNRU5UX0lECitOZGlzR2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoCisgICAgVk9JRAorICAgICkKK3sKKyAgICByZXR1cm4gTmRpc0dldFRocmVhZE9iamVjdENvbXBhcnRtZW50SWQoUHNHZXRDdXJyZW50VGhyZWFkKCkpOworfQorCitfSVJRTF9yZXF1aXJlc18oUEFTU0lWRV9MRVZFTCkKK19faW5saW5lCitOVFNUQVRVUworTmRpc1NldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKAorICAgIF9Jbl8gQ09NUEFSVE1FTlRfSUQgQ29tcGFydG1lbnRJZAorICAgICkKK3sKKyAgICByZXR1cm4KKyAgICAgICAgTmRpc1NldFRocmVhZE9iamVjdENvbXBhcnRtZW50SWQoUHNHZXRDdXJyZW50VGhyZWFkKCksIENvbXBhcnRtZW50SWQpOworfQorCisjZW5kaWYgLy8gX05TSV9IRUxQRVJfSApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL290THdmLmluZiBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9vdEx3Zi5pbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5MGEyNAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9vdEx3Zi5pbmYKQEAgLTAsMCArMSwxMDYgQEAKKzsKKzsgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKzsgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCis7Cis7ICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKzsgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorOyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKzsgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzsgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cis7ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCis7ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorOyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCis7ICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworOyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCis7Cis7ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKzsgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKzsgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCis7ICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCis7ICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCis7ICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorOyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCis7ICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorOyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKzsgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCis7ICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKzsKKworW1ZlcnNpb25dCitTaWduYXR1cmUgICAgICAgICAgID0gIiRXaW5kb3dzIE5UJCIKK0NsYXNzICAgICAgICAgICAgICAgPSBOZXRTZXJ2aWNlCitDbGFzc0dVSUQgICAgICAgICAgID0gezREMzZFOTc0LUUzMjUtMTFDRS1CRkMxLTA4MDAyQkUxMDMxOH0KK1Byb3ZpZGVyICAgICAgICAgICAgPSAlT3BlblRocmVhZCUKK0RyaXZlclZlciAgICAgICAgICAgPSAKK1BucExvY2tEb3duICAgICAgICAgPSAxCitDYXRhbG9nRmlsZSAgICAgICAgID0gb3RMd2YuY2F0CisKK1tNYW51ZmFjdHVyZXJdCislT3BlblRocmVhZCUgICAgICAgID0gT3BlblRocmVhZCxOVCRBUkNIJAorCitbT3BlblRocmVhZC5OVCRBUkNIJF0KKyVvdGx3Zi5EZXZpY2VEZXNjJSAgPSBvdGx3Zi5uZGksIG90THdmCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IE9wZW5UaHJlYWQgTkRJUyBGaWx0ZXIgRHJpdmVyCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW290bHdmLm5kaV0KK0NoYXJhY3RlcmlzdGljcyAgICAgPSAweDQwMDAwCitOZXRDZmdJbnN0YW5jZUlkICAgID0gIntCM0EzODQ1QS0xNjRFLTQ3MjctQjEyRS0zMkI4RENFMUY2Q0R9IgorQWRkUmVnICAgICAgICAgICAgICA9IG90bHdmLlJlZworQ29weWZpbGVzICAgICAgICAgICA9IG90THdmLkNvcHlGaWxlcworCitbb3Rsd2YubmRpLlNlcnZpY2VzXQorQWRkU2VydmljZSAgICAgICAgICA9IG90THdmLCAsIG90bHdmLlNlcnZpY2UKKworW290bHdmLm5kaS5SZW1vdmUuU2VydmljZXNdCis7IFRoZSBTUFNWQ0lOU1RfU1RPUFNFUlZJQ0UgZmxhZyBpbnN0cnVjdHMgU0NNIHRvIHN0b3AgdGhlIE5UIHNlcnZpY2UKKzsgYmVmb3JlIHVuaW5zdGFsbGluZyB0aGUgZHJpdmVyLgorRGVsU2VydmljZSAgICAgICAgICA9ICAgb3RMd2YsICAweDIwMCA7IFNQU1ZDSU5TVF9TVE9QU0VSVklDRQorCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBPcGVuVGhyZWFkIE5ESVMgRmlsdGVyIENvbW1vbgorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tvdGx3Zi5SZWddCitIS1IsIE5kaSwgICAgICAgICAgICAgICBTZXJ2aWNlLCAgICAgICAgICAgICwgICAgICAgICAgICJvdEx3ZiIKK0hLUiwgTmRpLCAgICAgICAgICAgICAgIENvU2VydmljZXMsICAgICAgICAgMHgwMDAxMDAwMCwgIm90THdmIgorSEtSLCBOZGksICAgICAgICAgICAgICAgRmlsdGVyQ2xhc3MsICAgICAgICAsICAgICAgICAgICBtc19tZWRpdW1fY29udmVydGVyX3RvcAorSEtSLCBOZGksICAgICAgICAgICAgICAgRmlsdGVyVHlwZSwgICAgICAgICAweDAwMDEwMDAxLCAweDAwMDAwMDAyCitIS1IsIE5kaSwgICAgICAgICAgICAgICBGaWx0ZXJSdW5UeXBlLCAgICAgIDB4MDAwMTAwMDEsIDB4MDAwMDAwMDIgICA7T1BUSU9OQUwgZmlsdGVyIAorSEtSLCBOZGlcSW50ZXJmYWNlcywgICAgVXBwZXJSYW5nZSwgICAgICAgICAsICAgICAgICAgICAibm91cHBlciIKK0hLUiwgTmRpXEludGVyZmFjZXMsICAgIExvd2VyUmFuZ2UsICAgICAgICAgLCAgICAgICAgICAgIm5vbG93ZXIiCitIS1IsIE5kaVxJbnRlcmZhY2VzLCAgICBGaWx0ZXJNZWRpYVR5cGVzLCAgICwgICAgICAgICAgICI4MDIuMTUuNCIKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgRHJpdmVyIGFuZCBTZXJ2aWNlIFNlY3Rpb24KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbb3RMd2YuQ29weUZpbGVzXQorb3RMd2Yuc3lzLCwsMgorCitbb3Rsd2YuU2VydmljZV0KK0Rpc3BsYXlOYW1lICAgICAgICAgPSAlb3Rsd2YuU2VydmljZS5EaXNwTmFtZSUKK1NlcnZpY2VUeXBlICAgICAgICAgPSAxIDtTRVJWSUNFX0tFUk5FTF9EUklWRVIKK1N0YXJ0VHlwZSAgICAgICAgICAgPSAxIDtTRVJWSUNFX1NZU1RFTV9TVEFSVAorRXJyb3JDb250cm9sICAgICAgICA9IDEgO1NFUlZJQ0VfRVJST1JfTk9STUFMCitTZXJ2aWNlQmluYXJ5ICAgICAgID0gJTEyJVxvdEx3Zi5zeXMKK0xvYWRPcmRlckdyb3VwICAgICAgPSBORElTCitEZXNjcmlwdGlvbiAgICAgICAgID0gJW90bHdmLkRldmljZURlc2MlCisKK1tTb3VyY2VEaXNrc05hbWVzXQorMSA9ICVvdGx3Zi5EZXZpY2VEZXNjJSwiIiwsCisKK1tTb3VyY2VEaXNrc0ZpbGVzXQorOyBUT0RPOiBJbmNsdWRlIGFueSByZWxhdGVkIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZCB3aXRoIHlvdXIgZHJpdmVyLgorb3RMd2Yuc3lzID0gMQorCitbRGVzdGluYXRpb25EaXJzXQorRGVmYXVsdERlc3REaXIgPSAxMgorb3RMd2YuQ29weUZpbGVzID0gMTIKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgTG9jYWxpemFibGUgU3RyaW5ncworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tTdHJpbmdzXQorT3BlblRocmVhZCAgICAgICAgICAgICAgPSAiT3BlblRocmVhZCIKK290bHdmLkRldmljZURlc2MgICAgICAgID0gIk9wZW5UaHJlYWQgTkRJUyBMaWdodFdlaWdodCBGaWx0ZXIiCitvdGx3Zi5TZXJ2aWNlLkRpc3BOYW1lICA9ICJPcGVuVGhyZWFkIE5ESVMgTGlnaHRXZWlnaHQgRmlsdGVyIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3ByZWNvbXAuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9wcmVjb21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlYjBkNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9wcmVjb21wLmMKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgInByZWNvbXAuaCIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9wcmVjb21wLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvcHJlY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZWY5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvcHJlY29tcC5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBQcmVjb21waWxlZCBoZWFkZXIgZm9yIG90THdmIHByb2plY3QuCisgKi8KKworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDIwMSkgIC8vIG5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2VkIDogbmFtZWxlc3Mgc3RydWN0L3VuaW9uCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjA0KSAgLy8gbm9uc3RhbmRhcmQgZXh0ZW5zaW9uIHVzZWQgOiBub24tY29uc3RhbnQgYWdncmVnYXRlIGluaXRpYWxpemVyCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZToyODE3NSkgLy8gVGhlICdNYWpvckZ1bmN0aW9uJyBtZW1iZXIgb2YgX0RSSVZFUl9PQkpFQ1Qgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBieSBhIGRyaXZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBY2Nlc3MgdG8gdGhpcyBtZW1iZXIgbWF5IGJlIHBlcm1pdHRlZCBmb3IgY2VydGFpbiBjbGFzc2VzIG9mIGRyaXZlcnMuCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZToyODMwMSkgLy8gTm8gYW5ub3RhdGlvbnMgZm9yIGZpcnN0IGRlY2xhcmF0aW9uIG9mICoKKworI2luY2x1ZGUgPG50aWZzLmg+CisjaW5jbHVkZSA8bmRpcy5oPgorI2luY2x1ZGUgPHdkbXNlYy5oPgorI2luY2x1ZGUgPHJ0bHJlZmNvdW50Lmg+CisjaW5jbHVkZSA8bmV0aW9kZWYuaD4KKyNpbmNsdWRlIDxuc2loZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXRpb2FwaS5oPgorI2luY2x1ZGUgPGJjcnlwdC5oPgorCitWT0lEICAKK1J0bENvcHlCdWZmZXJUb01kbCggIAorICAgIF9Jbl9yZWFkc19ieXRlc18oQnl0ZXNUb0NvcHkpIENPTlNUIFZPSUQgKkJ1ZmZlciwgIAorICAgIF9Jbm91dF8gUE1ETCBNZGxDaGFpbiwgIAorICAgIF9Jbl8gU0laRV9UIE1kbE9mZnNldCwgIAorICAgIF9Jbl8gU0laRV9UIEJ5dGVzVG9Db3B5LCAgCisgICAgX091dF8gU0laRV9UKiBCeXRlc0NvcGllZCAgCisgICAgKTsKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkLXdpbmRvd3MtY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvYm9yZGVyX3JvdXRlci5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvZGF0YXNldF9mdGQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3RocmVhZF9mdGQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2ljbXA2Lmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9pcDYuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3Rhc2tsZXQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbW1pc3Npb25lci5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvam9pbmVyLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9kaGNwNl9zZXJ2ZXIuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RoY3A2X2NsaWVudC5oPgorI2luY2x1ZGUgPGNvbW1vbi9jb2RlX3V0aWxzLmhwcD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmctd2luZG93cy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9zZXR0aW5ncy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWVzc2FnZXBvb2wuaD4KKyNpbmNsdWRlIDxuY3Avc3BpbmVsLmg+CisKKyNpbmNsdWRlIDxvdEx3ZklvY3RsLmg+CisKKyNpZmRlZiBfS0VSTkVMX01PREUKKyNkZWZpbmUgQ09ERV9TRUcoc2VnbWVudCkgX19kZWNsc3BlYyhjb2RlX3NlZyhzZWdtZW50KSkKKyNlbHNlCisjZGVmaW5lIENPREVfU0VHKHNlZ21lbnQpIAorI2VuZGlmCisKKyNkZWZpbmUgUEFHRUQgQ09ERV9TRUcoIlBBR0UiKSBfSVJRTF9hbHdheXNfZnVuY3Rpb25fbWF4XyhQQVNTSVZFX0xFVkVMKQorI2RlZmluZSBQQUdFRFggQ09ERV9TRUcoIlBBR0UiKQorI2RlZmluZSBJTklUQ09ERSBDT0RFX1NFRygiSU5JVCIpCisKK3R5cGVkZWYgc3RydWN0IF9NU19GSUxURVIgTVNfRklMVEVSLCAqUE1TX0ZJTFRFUjsKKworI3ByYWdtYSBwYWNrKHB1c2gpCisjcHJhZ21hIHBhY2soMSkKKwordHlwZWRlZiBzdHJ1Y3QgVURQSGVhZGVyCit7CisgICAgVVNIT1JUIFNvdXJjZVBvcnQ7CisgICAgVVNIT1JUIERlc3RpbmF0aW9uUG9ydDsKKyAgICBVU0hPUlQgVG90YWxMZW5ndGg7CisgICAgVVNIT1JUIENoZWNrc3VtOworCit9IFVEUEhlYWRlcjsKKworI3ByYWdtYSBwYWNrKHBvcCkKKworLy8jZGVmaW5lIERFQlVHX1RJTUlORworLy8jZGVmaW5lIERFQlVHX0FMTE9DCisjZGVmaW5lIExPR19CVUZGRVJTCisvLyNkZWZpbmUgRk9SQ0VfU1lOQ0hST05PVVNfUkVDRUlWRQorI2RlZmluZSBDT01NQU5EX0lOSVRfUkVUUlkKKworI2luY2x1ZGUgImRyaXZlci5oIgorI2luY2x1ZGUgImRldmljZS5oIgorI2luY2x1ZGUgImlvY29udHJvbC5oIgorI2luY2x1ZGUgInJhZGlvLmgiCisjaW5jbHVkZSAiZmlsdGVyLmgiCisjaW5jbHVkZSAiY29tbWFuZC5oIgorI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgInR1bm5lbC5oIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3JhZGlvLmMgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGMyNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3JhZGlvLmMKQEAgLTAsMCArMSw5MzAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBsb2dnaW5nIGZ1bmN0aW9uIHJlcXVpcmVkIGZvciB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICovCisKKyNpbmNsdWRlICJwcmVjb21wLmgiCisjaW5jbHVkZSAicmFkaW8udG1oIgorCit2b2lkIAorTG9nTWFjKAorICAgIF9Jbl8gUENTVFIgc3pEaXIsCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgVUxPTkcgZnJhbWVMZW5ndGgsCisgICAgX0luX3JlYWRzX2J5dGVzXyhmcmFtZUxlbmd0aCkgUFVDSEFSIGZyYW1lCisgICAgKTsKKworY29uc3QgY2hhciBNYWNTZW5kW10gPSAiTUFDX1NFTkQiOworY29uc3QgY2hhciBNYWNSZWN2W10gPSAiTUFDX1JFQ1YiOworCisjZGVmaW5lIExvZ01hY1NlbmQocEZpbHRlciwgZnJhbWVMZW5ndGgsIGZyYW1lKSBMb2dNYWMoTWFjU2VuZCwgcEZpbHRlciwgZnJhbWVMZW5ndGgsIGZyYW1lKQorI2RlZmluZSBMb2dNYWNSZWN2KHBGaWx0ZXIsIGZyYW1lTGVuZ3RoLCBmcmFtZSkgTG9nTWFjKE1hY1JlY3YsIHBGaWx0ZXIsIGZyYW1lTGVuZ3RoLCBmcmFtZSkKKwordm9pZCAKK290UGxhdFJlc2V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgKKyAgICApCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiSW50ZXJmYWNlICUhR1VJRCEgcmVzZXR0aW5nLi4uIiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQpOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgKHZvaWQpb3RMd2ZDbWRSZXNldERldmljZShwRmlsdGVyLCBUUlVFKTsKKworICAgIC8vIEZpbmFsaXplIHByZXZpb3VzIE9wZW5UaHJlYWQgaW5zdGFuY2UKKyAgICBvdEx3ZlJlbGVhc2VJbnN0YW5jZShwRmlsdGVyKTsKKworICAgIC8vIFJlc2V0IHJhZGlvIGxheWVyCisgICAgcEZpbHRlci0+b3RSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CisgICAgcEZpbHRlci0+b3RDdXJyZW50TGlzdGVuQ2hhbm5lbCA9IDB4RkY7CisgICAgcEZpbHRlci0+b3RQcm9taXNjdW91cyA9IGZhbHNlOworICAgIHBGaWx0ZXItPm90UGVuZGluZ01hY09mZmxvYWRFbmFibGVkID0gRkFMU0U7CisKKyAgICAvLyBSZWluaXRpYWxpemUgdGhlIE9wZW5UaHJlYWQgbGlicmFyeQorICAgIHBGaWx0ZXItPm90Q2FjaGVkUm9sZSA9IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOworICAgIHBGaWx0ZXItPm90Q3R4ID0gb3RJbnN0YW5jZUluaXQocEZpbHRlci0+b3RJbnN0YW5jZUJ1ZmZlciArIHNpemVvZihQTVNfRklMVEVSKSwgJnBGaWx0ZXItPm90SW5zdGFuY2VTaXplKTsKKyAgICBBU1NFUlQocEZpbHRlci0+b3RDdHgpOworCisgICAgLy8gTWFrZSBzdXJlIG91ciBoZWxwZXIgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmlnaHQgcG9pbnRlciBmb3IgdGhlIGZpbHRlciwgZ2l2ZW4gdGhlIG9wZW50aHJlYWQgaW5zdGFuY2UKKyAgICBOVF9BU1NFUlQob3RDdHhUb0ZpbHRlcihwRmlsdGVyLT5vdEN0eCkgPT0gcEZpbHRlcik7CisKKyAgICAvLyBEaXNhYmxlIEljbXAgKHBpbmcpIGhhbmRsaW5nCisgICAgb3RJY21wNlNldEVjaG9FbmFibGVkKHBGaWx0ZXItPm90Q3R4LCBGQUxTRSk7CisKKyAgICAvLyBSZWdpc3RlciBjYWxsYmFja3Mgd2l0aCBPcGVuVGhyZWFkCisgICAgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhwRmlsdGVyLT5vdEN0eCwgb3RMd2ZTdGF0ZUNoYW5nZWRDYWxsYmFjaywgcEZpbHRlcik7CisgICAgb3RJcDZTZXRSZWNlaXZlQ2FsbGJhY2socEZpbHRlci0+b3RDdHgsIG90THdmUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2ssIHBGaWx0ZXIpOworCisgICAgLy8gUXVlcnkgdGhlIGN1cnJlbnQgYWRkcmVzc2VzIGZyb20gVENQSVAgYW5kIGNhY2hlIHRoZW0KKyAgICAodm9pZClvdEx3ZkluaXRpYWxpemVBZGRyZXNzZXMocEZpbHRlcik7CisKKyAgICAvLyBJbml0aWFsemUgbWVkaWEgY29ubmVjdCBzdGF0ZSB0byBkaXNjb25uZWN0ZWQKKyAgICBvdEx3ZkluZGljYXRlTGlua1N0YXRlKHBGaWx0ZXIsIE1lZGlhQ29ubmVjdFN0YXRlRGlzY29ubmVjdGVkKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworb3RQbGF0UmVzZXRSZWFzb24gCitvdFBsYXRHZXRSZXNldFJlYXNvbigKKyAgICBfSW5fIG90SW5zdGFuY2UgKm90Q3R4CisgICAgKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgcmV0dXJuIHBGaWx0ZXItPmNtZFJlc2V0UmVhc29uOworfQorCitWT0lEIAorb3RMd2ZSYWRpb0dldEZhY3RvcnlBZGRyZXNzKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1czsKKyAgICBQVk9JRCBTcGluZWxCdWZmZXIgPSBOVUxMOworICAgIHVpbnQ4X3QgKmh3QWRkcmVzcyA9IE5VTEw7CisKKyAgICBSdGxaZXJvTWVtb3J5KCZwRmlsdGVyLT5vdEZhY3RvcnlBZGRyZXNzLCBzaXplb2YocEZpbHRlci0+b3RGYWN0b3J5QWRkcmVzcykpOworCisgICAgLy8gUXVlcnkgdGhlIE1QIGZvciB0aGUgYWRkcmVzcworICAgIHN0YXR1cyA9CisgICAgICAgIG90THdmQ21kR2V0UHJvcCgKKyAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAmU3BpbmVsQnVmZmVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfSFdBRERSLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAmaHdBZGRyZXNzCisgICAgICAgICk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykgfHwgaHdBZGRyZXNzID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkdldCBTUElORUxfUFJPUF9IV0FERFIgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTlRfQVNTRVJUKFNwaW5lbEJ1ZmZlcik7CisgICAgbWVtY3B5KCZwRmlsdGVyLT5vdEZhY3RvcnlBZGRyZXNzLCBod0FkZHJlc3MsIHNpemVvZihwRmlsdGVyLT5vdEZhY3RvcnlBZGRyZXNzKSk7CisgICAgRklMVEVSX0ZSRUVfTUVNKFNwaW5lbEJ1ZmZlcik7CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiSW50ZXJmYWNlICUhR1VJRCEgY2FjaGVkIGZhY3RvcnkgRXh0ZW5kZWQgTWFjIEFkZHJlc3M6ICVsbFgiLCAmcEZpbHRlci0+SW50ZXJmYWNlR3VpZCwgcEZpbHRlci0+b3RGYWN0b3J5QWRkcmVzcyk7Cit9CisKK1ZPSUQgCitvdEx3ZlJhZGlvSW5pdCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1JBRElPX01PREUpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgT3BlblRocmVhZCByYWRpbyBjYXBhYmlsaXR5IGZsYWdzCisgICAgcEZpbHRlci0+b3RSYWRpb0NhcGFiaWxpdGllcyA9IDA7CisgICAgaWYgKChwRmlsdGVyLT5EZXZpY2VDYXBhYmlsaXRpZXMgJiBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX0FDS19USU1FT1VUKSAhPSAwKQorICAgICAgICBwRmlsdGVyLT5vdFJhZGlvQ2FwYWJpbGl0aWVzIHw9IE9UX1JBRElPX0NBUFNfQUNLX1RJTUVPVVQ7CisgICAgaWYgKChwRmlsdGVyLT5EZXZpY2VDYXBhYmlsaXRpZXMgJiBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX01BQ19SRVRSWV9BTkRfQ09MTElTSU9OX0FWT0lEQU5DRSkgIT0gMCkKKyAgICAgICAgcEZpbHRlci0+b3RSYWRpb0NhcGFiaWxpdGllcyB8PSBPVF9SQURJT19DQVBTX1RSQU5TTUlUX1JFVFJJRVM7CisgICAgaWYgKChwRmlsdGVyLT5EZXZpY2VDYXBhYmlsaXRpZXMgJiBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX0VORVJHWV9TQ0FOKSAhPSAwKQorICAgICAgICBwRmlsdGVyLT5vdFJhZGlvQ2FwYWJpbGl0aWVzIHw9IE9UX1JBRElPX0NBUFNfRU5FUkdZX1NDQU47CisKKyAgICBwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRDsKKyAgICBwRmlsdGVyLT5vdEN1cnJlbnRMaXN0ZW5DaGFubmVsID0gMHhGRjsKKyAgICBwRmlsdGVyLT5vdFByb21pc2N1b3VzID0gZmFsc2U7CisKKyAgICBwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tUHNkdSA9IHBGaWx0ZXItPm90UmVjZWl2ZU1lc3NhZ2U7CisgICAgcEZpbHRlci0+b3RUcmFuc21pdEZyYW1lLm1Qc2R1ID0gcEZpbHRlci0+b3RUcmFuc21pdE1lc3NhZ2U7CisgICAgCisgICAgcEZpbHRlci0+b3RQZW5kaW5nTWFjT2ZmbG9hZEVuYWJsZWQgPSBGQUxTRTsKKworICAgIC8vIENhY2hlIHRoZSBmYWN0b3J5IGFkZHJlc3MKKyAgICBvdEx3ZlJhZGlvR2V0RmFjdG9yeUFkZHJlc3MocEZpbHRlcik7CisgICAgCisgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCBSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQuIiwgcEZpbHRlcik7CisgICAgCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCit2b2lkIG90UGxhdFJhZGlvR2V0SWVlZUV1aTY0KG90SW5zdGFuY2UgKm90Q3R4LCB1aW50OF90ICphSWVlZUV1aTY0KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgbWVtY3B5KGFJZWVlRXVpNjQsICZwRmlsdGVyLT5vdEZhY3RvcnlBZGRyZXNzLCBzaXplb2YoVUxPTkdMT05HKSk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQYW5JZChfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCB1aW50MTZfdCBwYW5pZCkKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworICAgIE5UU1RBVFVTIHN0YXR1czsKKworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBzZXQgUGFuSUQ6ICVYIiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsIHBhbmlkKTsKKworICAgIHBGaWx0ZXItPm90UGFuSUQgPSBwYW5pZDsKKworICAgIGlmIChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQgJiYKKyAgICAgICAgcEZpbHRlci0+b3RQYW5JRCAhPSAweEZGRkYpCisgICAgeworICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ18xNV80X1BBTklELAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICBwYW5pZAorICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX01BQ18xNV80X1BBTklEIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCB1aW50OF90ICphZGRyZXNzKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgTlRTVEFUVVMgc3RhdHVzOworICAgIHNwaW5lbF9ldWk2NF90IGV4dEFkZHI7CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiSW50ZXJmYWNlICUhR1VJRCEgc2V0IEV4dGVuZGVkIE1hYyBBZGRyZXNzOiAlbGxYIiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsICooVUxPTkdMT05HKilhZGRyZXNzKTsKKworICAgIHBGaWx0ZXItPm90RXh0ZW5kZWRBZGRyZXNzID0gKihVTE9OR0xPTkcqKWFkZHJlc3M7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE9UX0VYVF9BRERSRVNTX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIGV4dEFkZHIuYnl0ZXNbaV0gPSBhZGRyZXNzWzcgLSBpXTsKKyAgICB9CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDXzE1XzRfTEFERFIsCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUywKKyAgICAgICAgICAgICZleHRBZGRyCisgICAgICAgICk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlNldCBTUElORUxfUFJPUF9NQUNfMTVfNF9MQUREUiBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorfQorCit2b2lkIG90UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIHVpbnQxNl90IGFkZHJlc3MpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKyAgICBOVFNUQVRVUyBzdGF0dXM7CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiSW50ZXJmYWNlICUhR1VJRCEgc2V0IFNob3J0IE1hYyBBZGRyZXNzOiAlWCIsICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkLCBhZGRyZXNzKTsKKworICAgIHBGaWx0ZXItPm90U2hvcnRBZGRyZXNzID0gYWRkcmVzczsKKworICAgIGlmIChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpCisgICAgeworICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ18xNV80X1NBRERSLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICBhZGRyZXNzCisgICAgICAgICAgICApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDXzE1XzRfU0FERFIgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UHJvbWlzY3VvdXMoX0luXyBvdEluc3RhbmNlICpvdEN0eCwgYm9vbCBhRW5hYmxlKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgcEZpbHRlci0+b3RQcm9taXNjdW91cyA9IChCT09MRUFOKWFFbmFibGU7CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1BST01JU0NVT1VTX01PREUsCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgIGFFbmFibGUgIT0gMCA/IFNQSU5FTF9NQUNfUFJPTUlTQ1VPVVNfTU9ERV9ORVRXT1JLIDogU1BJTkVMX01BQ19QUk9NSVNDVU9VU19NT0RFX09GRgorICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDX1BST01JU0NVT1VTX01PREUgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KK30KKworYm9vbCBvdFBsYXRSYWRpb0lzRW5hYmxlZChfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgcmV0dXJuIHBGaWx0ZXItPm90UmFkaW9TdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRDsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0VuYWJsZShfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA8PSBPVF9SQURJT19TVEFURV9TTEVFUCk7CisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA+IE9UX1JBRElPX1NUQVRFX1NMRUVQKSByZXR1cm4gT1RfRVJST1JfQlVTWTsKKworICAgIHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX1BIWV9FTkFCTEVELAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgIFRSVUUKKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX1BIWV9FTkFCTEVEICh0cnVlKSBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorCisgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCBSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfU0xFRVAuIiwgcEZpbHRlcik7CisKKyAgICBpZiAocEZpbHRlci0+b3RQYW5JRCAhPSAweEZGRkYpCisgICAgeworICAgICAgICAvLyBJbmRpY2F0ZSBQQU5JRCB0byB0aGUgbWluaXBvcnQKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ18xNV80X1BBTklELAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdFBhbklECisgICAgICAgICAgICApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDXzE1XzRfUEFOSUQgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSW5kaWNhdGUgU2hvcnQgYWRkcmVzcyB0byB0aGUgbWluaXBvcnQKKyAgICBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDXzE1XzRfU0FERFIsCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICBwRmlsdGVyLT5vdFNob3J0QWRkcmVzcworICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDXzE1XzRfU0FERFIgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIHJldHVybiBOVF9TVUNDRVNTKHN0YXR1cykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfRkFJTEVEOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgLy8gRmlyc3QgbWFrZSBzdXJlIHdlIGFyZSBpbiB0aGUgU2xlZXAgc3RhdGUgaWYgd2Ugd2VyZW4ndCBhbHJlYWR5CisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA+IE9UX1JBRElPX1NUQVRFX1NMRUVQKQorICAgIHsKKyAgICAgICAgKHZvaWQpb3RQbGF0UmFkaW9TbGVlcChvdEN0eCk7CisgICAgfQorCisgICAgcEZpbHRlci0+b3RSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfUEhZX0VOQUJMRUQsCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgRkFMU0UKKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX1BIWV9FTkFCTEVEIChmYWxzZSkgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVELiIsIHBGaWx0ZXIpOworCisgICAgcmV0dXJuIE5UX1NVQ0NFU1Moc3RhdHVzKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9GQUlMRUQ7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9TbGVlcChfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICAvLyBJZiB3ZSB3ZXJlIGluIHRoZSB0cmFuc21pdCBzdGF0ZSwgY2FuY2VsIHRoZSB0cmFuc21pdAorICAgIGlmIChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQpCisgICAgeworICAgICAgICBwRmlsdGVyLT5vdExhc3RUcmFuc21pdEVycm9yID0gT1RfRVJST1JfQUJPUlQ7CisgICAgICAgIG90THdmUmFkaW9UcmFuc21pdEZyYW1lRG9uZShwRmlsdGVyKTsKKyAgICB9CisKKyAgICBpZiAocEZpbHRlci0+b3RSYWRpb1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX1NMRUVQKQorICAgIHsKKyAgICAgICAgcEZpbHRlci0+b3RSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfU0xFRVA7CisgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQLiIsIHBGaWx0ZXIpOworCisgICAgICAgIC8vIEluZGljYXRlIHRvIHRoZSBtaW5pcG9ydAorICAgICAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRCwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgIEZBTFNFCisgICAgICAgICAgICApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRCAoZmFsc2UpIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvUmVjZWl2ZShfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCB1aW50OF90IGFDaGFubmVsKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCk7CisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCkgcmV0dXJuIE9UX0VSUk9SX0JVU1k7CisgICAgCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwIiwgcEZpbHRlcik7CisKKyAgICAvLyBVcGRhdGUgY3VycmVudCBjaGFubmVsIGlmIGRpZmZlcmVudAorICAgIGlmIChwRmlsdGVyLT5vdEN1cnJlbnRMaXN0ZW5DaGFubmVsICE9IGFDaGFubmVsKQorICAgIHsKKyAgICAgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgICAgIE5UX0FTU0VSVChhQ2hhbm5lbCA+PSAxMSAmJiBhQ2hhbm5lbCA8PSAyNik7CisKKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCBuZXcgTGlzdGVuIENoYW5uZWwgPSAldS4iLCBwRmlsdGVyLCBhQ2hhbm5lbCk7CisgICAgICAgIHBGaWx0ZXItPm90Q3VycmVudExpc3RlbkNoYW5uZWwgPSBhQ2hhbm5lbDsKKworICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1BIWV9DSEFOLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgIGFDaGFubmVsCisgICAgICAgICAgICApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfUEhZX0NIQU4gZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gT25seSB0cmFuc2l0aW9uIHRvIHRoZSByZWNlaXZlIHN0YXRlIGlmIHdlIHdlcmUgc2xlZXBpbmc7IG90aGVyd2lzZSB3ZQorICAgIC8vIGFyZSBhbHJlYWR5IGluIHJlY2VpdmUgb3IgdHJhbnNtaXQgc3RhdGUuCisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9TTEVFUCkKKyAgICB7CisgICAgICAgIHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUuIiwgcEZpbHRlcik7CisKKyAgICAgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQsCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICBUUlVFCisgICAgICAgICAgICApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRCAodHJ1ZSkgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBldmVudCB0byBpbmRpY2F0ZSB3ZSBjYW4gcHJvY2VzcyBOQkxzCisgICAgICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc05CTHMsIDAsIEZBTFNFKTsKKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RBVEFfUEFUSCk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RSYWRpb0ZyYW1lICpvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKyAgICByZXR1cm4gJnBGaWx0ZXItPm90VHJhbnNtaXRGcmFtZTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwRmlsdGVyKTsKKyAgICByZXR1cm4gMDsKK30KKworb3RSYWRpb0NhcHMgb3RQbGF0UmFkaW9HZXRDYXBzKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICByZXR1cm4gb3RDdHhUb0ZpbHRlcihvdEN0eCktPm90UmFkaW9DYXBhYmlsaXRpZXM7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9HZXRQcm9taXNjdW91cyhfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgcmV0dXJuIHBGaWx0ZXItPm90UHJvbWlzY3VvdXM7Cit9CisKK1ZPSUQgCitvdEx3ZlJhZGlvUmVjZWl2ZUZyYW1lKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gb3RFcnJvciBlcnJvckNvZGUKKyAgICApCit7ICAgIAorICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tQ2hhbm5lbCA+PSAxMSAmJiBwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tQ2hhbm5lbCA8PSAyNik7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAiLCBwRmlsdGVyKTsKKworICAgIExvZ01hY1JlY3YocEZpbHRlciwgcEZpbHRlci0+b3RSZWNlaXZlRnJhbWUubUxlbmd0aCwgcEZpbHRlci0+b3RSZWNlaXZlRnJhbWUubVBzZHUpOworCisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA+IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEKQorICAgIHsKKyAgICAgICAgb3RQbGF0UmFkaW9SZWNlaXZlRG9uZShwRmlsdGVyLT5vdEN0eCwgJnBGaWx0ZXItPm90UmVjZWl2ZUZyYW1lLCBlcnJvckNvZGUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICJNYWMgZnJhbWUgZHJvcHBlZC4iKTsKKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RBVEFfUEFUSCk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCBfSW5fIG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFGcmFtZSk7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAiLCBwRmlsdGVyKTsKKworICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRSk7CisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPSBPVF9SQURJT19TVEFURV9UUkFOU01JVDsKKyAgICAKKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCBSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQuIiwgcEZpbHRlcik7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXRNc2coRFJJVkVSX0RBVEFfUEFUSCwgIiV1IiwgZXJyb3IpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitWT0lEIG90THdmUmFkaW9UcmFuc21pdEZyYW1lKF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyKQoreworICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQpOworCisgICAgTG9nTWFjU2VuZChwRmlsdGVyLCBwRmlsdGVyLT5vdFRyYW5zbWl0RnJhbWUubUxlbmd0aCwgcEZpbHRlci0+b3RUcmFuc21pdEZyYW1lLm1Qc2R1KTsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCIsIHBGaWx0ZXIpOworCisgICAgb3RMd2ZDbWRTZW5kTWFjRnJhbWVBc3luYyhwRmlsdGVyLCAmcEZpbHRlci0+b3RUcmFuc21pdEZyYW1lKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9EQVRBX1BBVEgpOworfQorCitWT0lEIAorb3RMd2ZSYWRpb1RyYW5zbWl0RnJhbWVEb25lKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCIsIHBGaWx0ZXIpOworCisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkKKyAgICB7CisgICAgICAgIHBGaWx0ZXItPlNlbmRQZW5kaW5nID0gRkFMU0U7CisKKyAgICAgICAgLy8gTm93IHRoYXQgd2UgYXJlIGNvbXBsZXRpbmcgYSBzZW5kLCBmYWxsIGJhY2sgdG8gcmVjZWl2ZSBzdGF0ZSBhbmQgc2V0IHRoZSBldmVudAorICAgICAgICBwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIFJhZGlvU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFLiIsIHBGaWx0ZXIpOworICAgICAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NOQkxzLCAwLCBGQUxTRSk7CisKKyAgICAgICAgaWYgKHBGaWx0ZXItPm90TGFzdFRyYW5zbWl0RXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJgorICAgICAgICAgICAgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvciAhPSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFICYmCisgICAgICAgICAgICBwRmlsdGVyLT5vdExhc3RUcmFuc21pdEVycm9yICE9IE9UX0VSUk9SX05PX0FDSykKKyAgICAgICAgeworICAgICAgICAgICAgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX0FCT1JUOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCgocEZpbHRlci0+b3RUcmFuc21pdEZyYW1lLm1Qc2R1WzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkgPT0gMCkgfHwKKyAgICAgICAgICAgIHBGaWx0ZXItPm90TGFzdFRyYW5zbWl0RXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgb3RQbGF0UmFkaW9UeERvbmUocEZpbHRlci0+b3RDdHgsICZwRmlsdGVyLT5vdFRyYW5zbWl0RnJhbWUsIE5VTEwsIHBGaWx0ZXItPm90TGFzdFRyYW5zbWl0RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3RQbGF0UmFkaW9UeERvbmUocEZpbHRlci0+b3RDdHgsICZwRmlsdGVyLT5vdFRyYW5zbWl0RnJhbWUsICZwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZSwgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREFUQV9QQVRIKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0VuYWJsZVNyY01hdGNoKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworCisgICAgLy8gSWdub3JlIGlmIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IHN0YXRlCisgICAgaWYgKGFFbmFibGUgPT0gcEZpbHRlci0+b3RQZW5kaW5nTWFjT2ZmbG9hZEVuYWJsZWQpIHJldHVybjsKKworICAgIC8vIENhY2hlIHRoZSBuZXcgdmFsdWUKKyAgICBwRmlsdGVyLT5vdFBlbmRpbmdNYWNPZmZsb2FkRW5hYmxlZCA9IGFFbmFibGUgPyBUUlVFIDogRkFMU0U7CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVELAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgIChhRW5hYmxlID8gVFJVRSA6IEZBTFNFKQorICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICB9Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaFNob3J0RW50cnkoX0luXyBvdEluc3RhbmNlICpvdEN0eCwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRJbnNlcnRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgYVNob3J0QWRkcmVzcworICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJbnNlcnQgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIHJldHVybiBOVF9TVUNDRVNTKHN0YXR1cykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfRkFJTEVEOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRJbnNlcnRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICBhRXh0QWRkcmVzcworICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJbnNlcnQgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIHJldHVybiBOVF9TVUNDRVNTKHN0YXR1cykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfRkFJTEVEOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkoX0luXyBvdEluc3RhbmNlICpvdEN0eCwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRSZW1vdmVQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgYVNob3J0QWRkcmVzcworICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJSZW1vdmUgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIHJldHVybiBOVF9TVUNDRVNTKHN0YXR1cykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfRkFJTEVEOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJ5KF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFJlbW92ZVByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMsCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUywKKyAgICAgICAgICAgIGFFeHRBZGRyZXNzCisgICAgICAgICk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlJlbW92ZSBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUyBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorCisgICAgcmV0dXJuIE5UX1NVQ0NFU1Moc3RhdHVzKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9GQUlMRUQ7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyaWVzKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKworICAgIC8vIEluZGljYXRlIHRvIHRoZSBtaW5pcG9ydAorICAgIE5UU1RBVFVTIHN0YXR1cyA9CisgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUywKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cmllcyhfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMsCisgICAgICAgICAgICBOVUxMCisgICAgICAgICk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlNldCBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUyBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCB1aW50OF90IGFTY2FuQ2hhbm5lbCwgdWludDE2X3QgYVNjYW5EdXJhdGlvbikKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworCisgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX01BU0ssCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgIGFTY2FuQ2hhbm5lbAorICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDX1NDQU5fTUFTSyBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1BFUklPRCwKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgIGFTY2FuRHVyYXRpb24KKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX01BQ19TQ0FOX1BFUklPRCBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICBTUElORUxfU0NBTl9TVEFURV9FTkVSR1kKKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKK2Vycm9yOgorCisgICAgcmV0dXJuIE5UX1NVQ0NFU1Moc3RhdHVzKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9GQUlMRUQ7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXREZWZhdWx0VHhQb3dlcihfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCBpbnQ4X3QgYVBvd2VyKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX1BIWV9UWF9QT1dFUiwKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MsCisgICAgICAgICAgICBhUG93ZXIKKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX1BIWV9UWF9QT1dFUiBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorfQorCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkoX0luXyBvdEluc3RhbmNlICpvdEN0eCkKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworICAgIE5UU1RBVFVTIHN0YXR1czsKKyAgICBpbnQ4X3QgcmVjZWl2ZVNlbnNpdGl2aXR5OworCisgICAgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRHZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBTUElORUxfUFJPUF9QSFlfUlhfU0VOU0lUSVZJVFksCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TLAorICAgICAgICAgICAgJnJlY2VpdmVTZW5zaXRpdml0eQorICAgICAgICApOworCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkdldCBTUElORUxfUFJPUF9QSFlfUlhfU0VOU0lUSVZJVFksIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIC0xMDA7ICAvLyByZXR1cm4gZGVmYXVsdCB2YWx1ZSAtMTAwZEJtCisgICAgfQorCisgICAgcmV0dXJuIHJlY2VpdmVTZW5zaXRpdml0eTsKK30KKworaW5saW5lIFVTSE9SVCBnZXREc3RTaG9ydEFkZHJlc3MoY29uc3QgVUNIQVIgKmZyYW1lKQoreworICAgIHJldHVybiAoKChVU0hPUlQpZnJhbWVbSUVFRTgwMjE1NF9EU1RBRERSX09GRlNFVCArIDFdKSA8PCA4KSB8IGZyYW1lW0lFRUU4MDIxNTRfRFNUQUREUl9PRkZTRVRdOworfQorCitpbmxpbmUgVVNIT1JUIGdldFNyY1Nob3J0QWRkcmVzcyhVTE9ORyBmcmFtZUxlbmd0aCwgX0luX3JlYWRzX2J5dGVzXyhmcmFtZUxlbmd0aCkgUFVDSEFSIGZyYW1lLCBVTE9ORyBvZmZzZXQpCit7CisgICAgcmV0dXJuIChvZmZzZXQgKyAxIDwgZnJhbWVMZW5ndGgpID8gKCgoKFVTSE9SVClmcmFtZVtvZmZzZXQgKyAxXSkgPDwgOCkgfCBmcmFtZVtvZmZzZXRdKSA6IDA7Cit9CisKK2lubGluZSBVTE9OR0xPTkcgZ2V0RHN0RXh0QWRkcmVzcyhjb25zdCBVQ0hBUiAqZnJhbWUpCit7CisgICAgcmV0dXJuICooVUxPTkdMT05HKikoZnJhbWUgKyBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUKTsKK30KKworaW5saW5lIFVMT05HTE9ORyBnZXRTcmNFeHRBZGRyZXNzKFVMT05HIGZyYW1lTGVuZ3RoLCBfSW5fcmVhZHNfYnl0ZXNfKGZyYW1lTGVuZ3RoKSBQVUNIQVIgZnJhbWUsIFVMT05HIG9mZnNldCkKK3sKKyAgICByZXR1cm4gKG9mZnNldCArIDcgPCBmcmFtZUxlbmd0aCkgPyAoKihVTE9OR0xPTkcqKShmcmFtZSArIG9mZnNldCkpIDogMDsKK30KKwordm9pZCAKK0xvZ01hYygKKyAgICBfSW5fIFBDU1RSIHN6RGlyLAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIFVMT05HIGZyYW1lTGVuZ3RoLAorICAgIF9Jbl9yZWFkc19ieXRlc18oZnJhbWVMZW5ndGgpIFBVQ0hBUiBmcmFtZQorICAgICkKK3sKKyAgICBpZiAoZnJhbWVMZW5ndGggPCA2KSByZXR1cm47CisKKyAgICBOVF9BU1NFUlQoZnJhbWUpOworCisgICAgVUNIQVIgQWNrUmVxdWVzdGVkID0gKGZyYW1lWzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkgIT0gMCA/IDEgOiAwOworICAgIFVDSEFSIEZyYW1lUGVuZGluZyA9IChmcmFtZVswXSAmIElFRUU4MDIxNTRfRlJBTUVfUEVORElORykgIT0gMCA/IDEgOiAwOworCisgICAgc3dpdGNoIChmcmFtZVsxXSAmIChJRUVFODAyMTU0X0RTVF9BRERSX01BU0sgfCBJRUVFODAyMTU0X1NSQ19BRERSX01BU0spKQorICAgIHsKKyAgICBjYXNlIElFRUU4MDIxNTRfRFNUX0FERFJfTk9ORSB8IElFRUU4MDIxNTRfU1JDX0FERFJfTk9ORToKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6IG51bGwgPT4gbnVsbCAoJXUgYnl0ZXMsIEFja1JlcT0ldSwgRnJhbWVQZW5kaW5nPSV1KSIsIAorICAgICAgICAgICAgcEZpbHRlciwgc3pEaXIsIGZyYW1lTGVuZ3RoLCBBY2tSZXF1ZXN0ZWQsIEZyYW1lUGVuZGluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9OT05FIHwgSUVFRTgwMjE1NF9TUkNfQUREUl9TSE9SVDoKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6ICVYID0+IG51bGwgKCV1IGJ5dGVzLCBBY2tSZXE9JXUsIEZyYW1lUGVuZGluZz0ldSkiLCAKKyAgICAgICAgICAgIHBGaWx0ZXIsIHN6RGlyLCBnZXRTcmNTaG9ydEFkZHJlc3MoZnJhbWVMZW5ndGgsIGZyYW1lLCBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUKSwgZnJhbWVMZW5ndGgsIEFja1JlcXVlc3RlZCwgRnJhbWVQZW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRUVFODAyMTU0X0RTVF9BRERSX05PTkUgfCBJRUVFODAyMTU0X1NSQ19BRERSX0VYVDoKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6ICVsbFggPT4gbnVsbCAoJXUgYnl0ZXMsIEFja1JlcT0ldSwgRnJhbWVQZW5kaW5nPSV1KSIsIAorICAgICAgICAgICAgcEZpbHRlciwgc3pEaXIsIGdldFNyY0V4dEFkZHJlc3MoZnJhbWVMZW5ndGgsIGZyYW1lLCBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUKSwgZnJhbWVMZW5ndGgsIEFja1JlcXVlc3RlZCwgRnJhbWVQZW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9TSE9SVCB8IElFRUU4MDIxNTRfU1JDX0FERFJfTk9ORToKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6IG51bGwgPT4gJVggKCV1IGJ5dGVzLCBBY2tSZXE9JXUsIEZyYW1lUGVuZGluZz0ldSkiLCAKKyAgICAgICAgICAgIHBGaWx0ZXIsIHN6RGlyLCBnZXREc3RTaG9ydEFkZHJlc3MoZnJhbWUpLCBmcmFtZUxlbmd0aCwgQWNrUmVxdWVzdGVkLCBGcmFtZVBlbmRpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElFRUU4MDIxNTRfRFNUX0FERFJfU0hPUlQgfCBJRUVFODAyMTU0X1NSQ19BRERSX1NIT1JUOgorICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwLCAlczogJVggPT4gJVggKCV1IGJ5dGVzLCBBY2tSZXE9JXUsIEZyYW1lUGVuZGluZz0ldSkiLCAKKyAgICAgICAgICAgIHBGaWx0ZXIsIHN6RGlyLCBnZXRTcmNTaG9ydEFkZHJlc3MoZnJhbWVMZW5ndGgsIGZyYW1lLCBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUKzIpLCBnZXREc3RTaG9ydEFkZHJlc3MoZnJhbWUpLCBmcmFtZUxlbmd0aCwgQWNrUmVxdWVzdGVkLCBGcmFtZVBlbmRpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElFRUU4MDIxNTRfRFNUX0FERFJfU0hPUlQgfCBJRUVFODAyMTU0X1NSQ19BRERSX0VYVDoKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6ICVsbFggPT4gJVggKCV1IGJ5dGVzLCBBY2tSZXE9JXUsIEZyYW1lUGVuZGluZz0ldSkiLCAKKyAgICAgICAgICAgIHBGaWx0ZXIsIHN6RGlyLCBnZXRTcmNFeHRBZGRyZXNzKGZyYW1lTGVuZ3RoLCBmcmFtZSwgSUVFRTgwMjE1NF9EU1RBRERSX09GRlNFVCsyKSwgZ2V0RHN0U2hvcnRBZGRyZXNzKGZyYW1lKSwgZnJhbWVMZW5ndGgsIEFja1JlcXVlc3RlZCwgRnJhbWVQZW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9FWFQgfCBJRUVFODAyMTU0X1NSQ19BRERSX05PTkU6CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAsICVzOiBudWxsID0+ICVsbFggKCV1IGJ5dGVzLCBBY2tSZXE9JXUsIEZyYW1lUGVuZGluZz0ldSkiLCAKKyAgICAgICAgICAgIHBGaWx0ZXIsIHN6RGlyLCBnZXREc3RFeHRBZGRyZXNzKGZyYW1lKSwgZnJhbWVMZW5ndGgsIEFja1JlcXVlc3RlZCwgRnJhbWVQZW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRUVFODAyMTU0X0RTVF9BRERSX0VYVCB8IElFRUU4MDIxNTRfU1JDX0FERFJfU0hPUlQ6CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAsICVzOiAlWCA9PiAlbGxYICgldSBieXRlcywgQWNrUmVxPSV1LCBGcmFtZVBlbmRpbmc9JXUpIiwgCisgICAgICAgICAgICBwRmlsdGVyLCBzekRpciwgZ2V0U3JjU2hvcnRBZGRyZXNzKGZyYW1lTGVuZ3RoLCBmcmFtZSwgSUVFRTgwMjE1NF9EU1RBRERSX09GRlNFVCs4KSwgZ2V0RHN0RXh0QWRkcmVzcyhmcmFtZSksIGZyYW1lTGVuZ3RoLCBBY2tSZXF1ZXN0ZWQsIEZyYW1lUGVuZGluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9FWFQgfCBJRUVFODAyMTU0X1NSQ19BRERSX0VYVDoKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6ICVsbFggPT4gJWxsWCAoJXUgYnl0ZXMsIEFja1JlcT0ldSwgRnJhbWVQZW5kaW5nPSV1KSIsIAorICAgICAgICAgICAgcEZpbHRlciwgc3pEaXIsIGdldFNyY0V4dEFkZHJlc3MoZnJhbWVMZW5ndGgsIGZyYW1lLCBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUKzgpLCBnZXREc3RFeHRBZGRyZXNzKGZyYW1lKSwgZnJhbWVMZW5ndGgsIEFja1JlcXVlc3RlZCwgRnJhbWVQZW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorI2lmZGVmIExPR19CVUZGRVJTCisgICAgb3RMb2dCdWZmZXIoZnJhbWUsIGZyYW1lTGVuZ3RoKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3JhZGlvLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvcmFkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTBkNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3JhZGlvLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIE9wZW5UaHJlYWQgcmFkaW8gaW50ZXJmYWNlLgorICovCisKKyNpZm5kZWYgX09UTFdGX1JBRElPX0gKKyNkZWZpbmUgX09UTFdGX1JBRElPX0gKKworZW51bQoreworICAgIElFRUU4MDIxNTRfTUlOX0xFTkdUSCAgICAgICAgID0gNSwKKyAgICBJRUVFODAyMTU0X01BWF9MRU5HVEggICAgICAgICA9IDEyNywKKyAgICBJRUVFODAyMTU0X0FDS19MRU5HVEggICAgICAgICA9IDUsCisKKyAgICBJRUVFODAyMTU0X0JST0FEQ0FTVCAgICAgICAgICA9IDB4ZmZmZiwKKworICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9BQ0sgICAgID0gMiA8PCAwLAorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQUNDTUQgID0gMyA8PCAwLAorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLICAgID0gNyA8PCAwLAorCisgICAgSUVFRTgwMjE1NF9TRUNVUklUWV9FTkFCTEVEICAgPSAxIDw8IDMsCisgICAgSUVFRTgwMjE1NF9GUkFNRV9QRU5ESU5HICAgICAgPSAxIDw8IDQsCisgICAgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCAgICAgICAgPSAxIDw8IDUsCisgICAgSUVFRTgwMjE1NF9QQU5JRF9DT01QUkVTU0lPTiAgPSAxIDw8IDYsCisKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX05PTkUgICAgICA9IDAgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX1NIT1JUICAgICA9IDIgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX0VYVCAgICAgICA9IDMgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX01BU0sgICAgICA9IDMgPDwgMiwKKworICAgIElFRUU4MDIxNTRfU1JDX0FERFJfTk9ORSAgICAgID0gMCA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfU0hPUlQgICAgID0gMiA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfRVhUICAgICAgID0gMyA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfTUFTSyAgICAgID0gMyA8PCA2LAorCisgICAgSUVFRTgwMjE1NF9EU05fT0ZGU0VUICAgICAgICAgPSAyLAorICAgIElFRUU4MDIxNTRfRFNUUEFOX09GRlNFVCAgICAgID0gMywKKyAgICBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUICAgICA9IDUsCisKKyAgICBJRUVFODAyMTU0X1NFQ19MRVZFTF9NQVNLICAgICA9IDcgPDwgMCwKKworICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMCAgICAgID0gMCA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMSAgICAgID0gMSA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMiAgICAgID0gMiA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMyAgICAgID0gMyA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfTUFTSyAgID0gMyA8PCAzLAorCisgICAgSUVFRTgwMjE1NF9NQUNDTURfREFUQV9SRVEgICAgPSA0LAorfTsKKworLy8gSW5pdGlhbGl6ZXMgdGhlIHJhZGlvIGxheWVyCitWT0lEIG90THdmUmFkaW9Jbml0KF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyKTsKKworLy8gSW5kaWNhdGVzIGEgcmVjZWl2ZWQgZnJhbWUgZnJvbSB0aGUgcmFkaW8gbGF5ZXIKK1ZPSUQgb3RMd2ZSYWRpb1JlY2VpdmVGcmFtZShfSW5fIFBNU19GSUxURVIgcEZpbHRlciwgX0luXyBvdEVycm9yIGVycm9yQ29kZSk7CisKKy8vIEluZGljYXRlcyB0aGUgdHJhbnNtaXQgZnJhbWUgaXMgcmVhZHkgdG8gc2VuZCB0byB0aGUgcmFkaW8gbGF5ZXIKK1ZPSUQgb3RMd2ZSYWRpb1RyYW5zbWl0RnJhbWUoX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIpOworCisvLyBJbmRpY2F0ZXMgdGhlIHRyYW5zbWl0IGZyYW1lIGZpbmlzaGVkIHNlbmRpbmcKK1ZPSUQgb3RMd2ZSYWRpb1RyYW5zbWl0RnJhbWVEb25lKF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyKTsKKworI2VuZGlmICAvL19PVExXRl9SQURJT19ICmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2Yvc2V0dGluZ3MuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9zZXR0aW5ncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYWVmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2Yvc2V0dGluZ3MuYwpAQCAtMCwwICsxLDYwOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHNldHRpbmdzIGZ1bmN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIE9wZW5UaHJlYWQgbGlicmFyeS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgInNldHRpbmdzLnRtaCIKKwordm9pZCBvdFBsYXRTZXR0aW5nc0luaXQob3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKworICAgIERFQ0xBUkVfQ09OU1RfVU5JQ09ERV9TVFJJTkcoU3ViS2V5TmFtZSwgTCJPcGVuVGhyZWFkIik7CisKKyAgICBPQkpFQ1RfQVRUUklCVVRFUyBhdHRyaWJ1dGVzOworICAgIFVMT05HIGRpc3Bvc2l0aW9uOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIEluaXRpYWxpemVPYmplY3RBdHRyaWJ1dGVzKAorICAgICAgICAmYXR0cmlidXRlcywKKyAgICAgICAgKFBVTklDT0RFX1NUUklORykmU3ViS2V5TmFtZSwKKyAgICAgICAgT0JKX0NBU0VfSU5TRU5TSVRJVkUgfCBPQkpfS0VSTkVMX0hBTkRMRSwKKyAgICAgICAgcEZpbHRlci0+SW50ZXJmYWNlUmVnS2V5LAorICAgICAgICBOVUxMKTsKKworICAgIC8vIENyZWF0ZS9PcGVuIHRoZSAnT3BlblRocmVhZCcgc3ViIGtleQorICAgIE5UU1RBVFVTIHN0YXR1cyA9CisgICAgICAgIFp3Q3JlYXRlS2V5KAorICAgICAgICAgICAgJnBGaWx0ZXItPm90U2V0dGluZ3NSZWdLZXksCisgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUywKKyAgICAgICAgICAgICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBSRUdfT1BUSU9OX05PTl9WT0xBVElMRSwKKyAgICAgICAgICAgICZkaXNwb3NpdGlvbik7CisKKyAgICBOVF9BU1NFUlQoTlRfU1VDQ0VTUyhzdGF0dXMpKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndDcmVhdGVLZXkgZm9yICdPcGVuVGhyZWFkJyBrZXkgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKwordWludDE2X3QgRmlsdGVyQ291bnRTZXR0aW5ncyhfSW5fIFBNU19GSUxURVIgcEZpbHRlciwgdWludDE2X3QgYUtleSkKK3sKKyAgICBIQU5ETEUgcmVnS2V5ID0gTlVMTDsKKyAgICBPQkpFQ1RfQVRUUklCVVRFUyBhdHRyaWJ1dGVzOworICAgIERFQ0xBUkVfVU5JQ09ERV9TVFJJTkdfU0laRShOYW1lLCA4KTsKKyAgICBVQ0hBUiBJbmZvQnVmZmVyWzEyOF0gPSB7MH07CisgICAgUEtFWV9GVUxMX0lORk9STUFUSU9OIHBJbmZvID0gKFBLRVlfRlVMTF9JTkZPUk1BVElPTilJbmZvQnVmZmVyOworICAgIFVMT05HIEluZm9MZW5ndGggPSBzaXplb2YoSW5mb0J1ZmZlcik7CisKKyAgICAvLyBDb252ZXJ0ICdhS2V5JyB0byBhIHN0cmluZworICAgIFJ0bEludGVnZXJUb1VuaWNvZGVTdHJpbmcoKFVMT05HKWFLZXksIDE2LCAmTmFtZSk7CisKKyAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcygKKyAgICAgICAgJmF0dHJpYnV0ZXMsCisgICAgICAgICZOYW1lLAorICAgICAgICBPQkpfQ0FTRV9JTlNFTlNJVElWRSB8IE9CSl9LRVJORUxfSEFORExFLAorICAgICAgICBwRmlsdGVyLT5vdFNldHRpbmdzUmVnS2V5LAorICAgICAgICBOVUxMKTsKKworICAgIC8vIE9wZW4gdGhlIHJlZ2lzdHJ5IGtleQorICAgIE5UU1RBVFVTIHN0YXR1cyA9CisgICAgICAgIFp3T3BlbktleSgKKyAgICAgICAgICAgICZyZWdLZXksCisgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUywKKyAgICAgICAgICAgICZhdHRyaWJ1dGVzKTsKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgLy8gS2V5IGRvZXNuJ3QgZXhpc3QsIHJldHVybiBhIGNvdW50IG9mIDAKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBRdWVyeSB0aGUga2V5IGluZm8gZnJvbSB0aGUgcmVnaXN0cnkKKyAgICBzdGF0dXMgPQorICAgICAgICBad1F1ZXJ5S2V5KAorICAgICAgICAgICAgcmVnS2V5LAorICAgICAgICAgICAgS2V5VmFsdWVGdWxsSW5mb3JtYXRpb24sCisgICAgICAgICAgICBwSW5mbywKKyAgICAgICAgICAgIEluZm9MZW5ndGgsCisgICAgICAgICAgICAmSW5mb0xlbmd0aCk7CisKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndRdWVyeUtleSBmb3IgJVMgdmFsdWUgZmFpbGVkLCAlIVNUQVRVUyEiLCBOYW1lLkJ1ZmZlciwgc3RhdHVzKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKK2Vycm9yOgorCisgICAgaWYgKHJlZ0tleSkgWndDbG9zZShyZWdLZXkpOworCisgICAgcmV0dXJuICh1aW50MTZfdClwSW5mby0+VmFsdWVzOworfQorCitOVFNUQVRVUyBGaWx0ZXJSZWFkU2V0dGluZyhfSW5fIFBNU19GSUxURVIgcEZpbHRlciwgdWludDE2X3QgYUtleSwgaW50IGFJbmRleCwgdWludDhfdCAqYVZhbHVlLCB1aW50MTZfdCAqYVZhbHVlTGVuZ3RoKQoreworICAgIEhBTkRMRSByZWdLZXkgPSBOVUxMOworICAgIE9CSkVDVF9BVFRSSUJVVEVTIGF0dHJpYnV0ZXM7CisgICAgREVDTEFSRV9VTklDT0RFX1NUUklOR19TSVpFKE5hbWUsIDIwKTsKKyAgICBQS0VZX1ZBTFVFX1BBUlRJQUxfSU5GT1JNQVRJT04gcEluZm8gPSBOVUxMOworICAgIFVMT05HIEluZm9MZW5ndGggPSBzaXplb2YoKnBJbmZvKSArICphVmFsdWVMZW5ndGg7CisKKyAgICAvLyBDb252ZXJ0ICdhS2V5JyB0byBhIHN0cmluZworICAgIFJ0bEludGVnZXJUb1VuaWNvZGVTdHJpbmcoKFVMT05HKWFLZXksIDE2LCAmTmFtZSk7CisKKyAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcygKKyAgICAgICAgJmF0dHJpYnV0ZXMsCisgICAgICAgICZOYW1lLAorICAgICAgICBPQkpfQ0FTRV9JTlNFTlNJVElWRSB8IE9CSl9LRVJORUxfSEFORExFLAorICAgICAgICBwRmlsdGVyLT5vdFNldHRpbmdzUmVnS2V5LAorICAgICAgICBOVUxMKTsKKworICAgIC8vIE9wZW4gdGhlIHJlZ2lzdHJ5IGtleQorICAgIE5UU1RBVFVTIHN0YXR1cyA9CisgICAgICAgIFp3T3BlbktleSgKKyAgICAgICAgICAgICZyZWdLZXksCisgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUywKKyAgICAgICAgICAgICZhdHRyaWJ1dGVzKTsKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgLy8gS2V5IGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBDb252ZXJ0ICdhSW5kZXgnIHRvIGEgc3RyaW5nCisgICAgUnRsSW50ZWdlclRvVW5pY29kZVN0cmluZygoVUxPTkcpYUluZGV4LCAxNiwgJk5hbWUpOworCisgICAgLy8gQWxsb2NhdGUgYnVmZmVyIGZvciBxdWVyeQorICAgIHBJbmZvID0gRklMVEVSX0FMTE9DX01FTShwRmlsdGVyLT5GaWx0ZXJIYW5kbGUsIEluZm9MZW5ndGgpOworICAgIGlmIChwSW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gUXVlcnkgdGhlIGRhdGEKKyAgICBzdGF0dXMgPSBad1F1ZXJ5VmFsdWVLZXkoCisgICAgICAgIHJlZ0tleSwKKyAgICAgICAgJk5hbWUsCisgICAgICAgIEtleVZhbHVlUGFydGlhbEluZm9ybWF0aW9uLAorICAgICAgICBwSW5mbywKKyAgICAgICAgSW5mb0xlbmd0aCwKKyAgICAgICAgJkluZm9MZW5ndGgpOworCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiWndRdWVyeVZhbHVlS2V5IGZvciAlUyB2YWx1ZSBmYWlsZWQsICUhU1RBVFVTISIsIE5hbWUuQnVmZmVyLCBzdGF0dXMpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIE5UX0FTU0VSVCgqYVZhbHVlTGVuZ3RoID49IHBJbmZvLT5EYXRhTGVuZ3RoKTsKKyAgICAqYVZhbHVlTGVuZ3RoID0gKHVpbnQxNl90KXBJbmZvLT5EYXRhTGVuZ3RoOworICAgIGlmIChhVmFsdWUpCisgICAgeworICAgICAgICBtZW1jcHkoYVZhbHVlLCBwSW5mby0+RGF0YSwgcEluZm8tPkRhdGFMZW5ndGgpOworICAgIH0KKworZXJyb3I6CisKKyAgICBpZiAocEluZm8pIEZJTFRFUl9GUkVFX01FTShwSW5mbyk7CisgICAgaWYgKHJlZ0tleSkgWndDbG9zZShyZWdLZXkpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworTlRTVEFUVVMgRmlsdGVyV3JpdGVTZXR0aW5nKF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLCB1aW50MTZfdCBhS2V5LCBpbnQgYUluZGV4LCBjb25zdCB1aW50OF90ICphVmFsdWUsIHVpbnQxNl90IGFWYWx1ZUxlbmd0aCkKK3sKKyAgICBIQU5ETEUgcmVnS2V5ID0gTlVMTDsKKyAgICBPQkpFQ1RfQVRUUklCVVRFUyBhdHRyaWJ1dGVzOworICAgIERFQ0xBUkVfVU5JQ09ERV9TVFJJTkdfU0laRShOYW1lLCAyMCk7CisKKyAgICAvLyBDb252ZXJ0ICdhS2V5JyB0byBhIHN0cmluZworICAgIFJ0bEludGVnZXJUb1VuaWNvZGVTdHJpbmcoKFVMT05HKWFLZXksIDE2LCAmTmFtZSk7CisKKyAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcygKKyAgICAgICAgJmF0dHJpYnV0ZXMsCisgICAgICAgICZOYW1lLAorICAgICAgICBPQkpfQ0FTRV9JTlNFTlNJVElWRSB8IE9CSl9LRVJORUxfSEFORExFLAorICAgICAgICBwRmlsdGVyLT5vdFNldHRpbmdzUmVnS2V5LAorICAgICAgICBOVUxMKTsKKworICAgIC8vIENyZWF0ZS9PcGVuIHRoZSByZWdpc3RyeSBrZXkKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBad0NyZWF0ZUtleSgKKyAgICAgICAgICAgICZyZWdLZXksCisgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUywKKyAgICAgICAgICAgICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBSRUdfT1BUSU9OX05PTl9WT0xBVElMRSwKKyAgICAgICAgICAgIE5VTEwpOworCisgICAgTlRfQVNTRVJUKE5UX1NVQ0NFU1Moc3RhdHVzKSk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlp3Q3JlYXRlS2V5IGZvciAlUyBrZXkgZmFpbGVkLCAlIVNUQVRVUyEiLCBOYW1lLkJ1ZmZlciwgc3RhdHVzKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBDb252ZXJ0ICdhSW5kZXgnIHRvIGEgc3RyaW5nCisgICAgUnRsSW50ZWdlclRvVW5pY29kZVN0cmluZygoVUxPTkcpYUluZGV4LCAxNiwgJk5hbWUpOworCisgICAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIHJlZ2lzdHJ5CisgICAgc3RhdHVzID0KKyAgICAgICAgWndTZXRWYWx1ZUtleSgKKyAgICAgICAgICAgIHJlZ0tleSwKKyAgICAgICAgICAgICZOYW1lLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIFJFR19CSU5BUlksCisgICAgICAgICAgICAoUFZPSUQpYVZhbHVlLAorICAgICAgICAgICAgYVZhbHVlTGVuZ3RoKTsKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJad1NldFZhbHVlS2V5IGZvciAlUyB2YWx1ZSBmYWlsZWQsICUhU1RBVFVTISIsIE5hbWUuQnVmZmVyLCBzdGF0dXMpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworZXJyb3I6CisKKyAgICBpZiAocmVnS2V5KSBad0Nsb3NlKHJlZ0tleSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitOVFNUQVRVUyBGaWx0ZXJEZWxldGVTZXR0aW5nKF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLCB1aW50MTZfdCBhS2V5LCBpbnQgYUluZGV4KQoreworICAgIEhBTkRMRSByZWdLZXkgPSBOVUxMOworICAgIE9CSkVDVF9BVFRSSUJVVEVTIGF0dHJpYnV0ZXM7CisgICAgREVDTEFSRV9VTklDT0RFX1NUUklOR19TSVpFKE5hbWUsIDIwKTsKKworICAgIC8vIENvbnZlcnQgJ2FLZXknIHRvIGEgc3RyaW5nCisgICAgUnRsSW50ZWdlclRvVW5pY29kZVN0cmluZygoVUxPTkcpYUtleSwgMTYsICZOYW1lKTsKKworICAgIEluaXRpYWxpemVPYmplY3RBdHRyaWJ1dGVzKAorICAgICAgICAmYXR0cmlidXRlcywKKyAgICAgICAgJk5hbWUsCisgICAgICAgIE9CSl9DQVNFX0lOU0VOU0lUSVZFIHwgT0JKX0tFUk5FTF9IQU5ETEUsCisgICAgICAgIHBGaWx0ZXItPm90U2V0dGluZ3NSZWdLZXksCisgICAgICAgIE5VTEwpOworCisgICAgLy8gT3BlbiB0aGUgcmVnaXN0cnkga2V5CisgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgWndPcGVuS2V5KAorICAgICAgICAgICAgJnJlZ0tleSwKKyAgICAgICAgICAgIEtFWV9BTExfQUNDRVNTLAorICAgICAgICAgICAgJmF0dHJpYnV0ZXMpOworCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICAvLyBLZXkgZG9lc24ndCBleGlzdAorICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8vIElmICdhSW5kZXgnIGlzIC0xIHRoZW4gZGVsZXRlIHRoZSB3aG9sZSBrZXksIG90aGVyd2lzZSBkZWxldGUgdGhlIGluZGl2aWR1YWwgdmFsdWUKKyAgICBpZiAoYUluZGV4ID09IC0xKQorICAgIHsKKyAgICAgICAgLy8gRGVsZXRlIHRoZSByZWdpc3RyeSBrZXkKKyAgICAgICAgc3RhdHVzID0gWndEZWxldGVLZXkocmVnS2V5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVUNIQVIgS2V5SW5mb0J1ZmZlclsxMjhdID0geyAwIH07CisgICAgICAgIFBLRVlfRlVMTF9JTkZPUk1BVElPTiBwS2V5SW5mbyA9IChQS0VZX0ZVTExfSU5GT1JNQVRJT04pS2V5SW5mb0J1ZmZlcjsKKyAgICAgICAgVUxPTkcgS2V5SW5mb0xlbmd0aCA9IHNpemVvZihLZXlJbmZvQnVmZmVyKTsKKworICAgICAgICAvLyBXaGVuIGRlbGV0aW5nIGFuIGluZGl2aWR1YWwgdmFsdWUsIHNpbmNlIG9yZGVyIGRvZXNuJ3QgbWF0dGVyLCB3ZSB3aWxsIGFjdHVhbGx5CisgICAgICAgIC8vIGNvcHkgdGhlIGxhc3QgdmFsdWUgb3ZlciB0aGUgb25lIGJlaW5nIGRlbGV0ZWQgYW5kIHRoZW4gZGVsZXRlIHRoZSBsYXN0IHZhbHVlOyBzbworICAgICAgICAvLyB3ZSBtYWludGFpbiBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBudW1iZXJlZCB2YWx1ZXMKKworICAgICAgICAvLyBRdWVyeSB0aGUgbnVtYmVyIG9mIHZhbHVlcworICAgICAgICAvLyBOb3RlOiBDYW4ndCB1c2UgaGVscGVyIGZ1bmN0aW9uIGJlY2F1c2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBrZXkgb3BlbgorICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgWndRdWVyeUtleSgKKyAgICAgICAgICAgICAgICByZWdLZXksCisgICAgICAgICAgICAgICAgS2V5VmFsdWVGdWxsSW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgcEtleUluZm8sCisgICAgICAgICAgICAgICAgS2V5SW5mb0xlbmd0aCwKKyAgICAgICAgICAgICAgICAmS2V5SW5mb0xlbmd0aCk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndRdWVyeUtleSBmb3IgJVMgdmFsdWUgZmFpbGVkLCAlIVNUQVRVUyEiLCBOYW1lLkJ1ZmZlciwgc3RhdHVzKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKFVMT05HKWFJbmRleCA+PSBwS2V5SW5mby0+VmFsdWVzKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGRlbGV0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbGlzdAorICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX09CSkVDVF9OQU1FX05PVF9GT1VORDsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocEtleUluZm8tPlZhbHVlcyA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEZWxldGluZyB0aGUgb25seSB2YWx1ZSBvbiB0aGUga2V5LCBnbyBhaGVhZCBhbmQgZGVsZXRlIHRoZSBlbnRpcmUga2V5CisgICAgICAgICAgICBzdGF0dXMgPSBad0RlbGV0ZUtleShyZWdLZXkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBLZXlJbmZvLT5WYWx1ZXMgLSAxICE9IChVTE9ORylhSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZW4ndCBkZWxldGluZyB0aGUgbGFzdCB2YWx1ZSBzbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIGxhc3QgdmFsdWUKKyAgICAgICAgICAgIC8vIG92ZXIgdGhpcyBvbmUsIGFuZCB0aGVuIGRlbGV0ZSB0aGUgbGFzdCBvbmUuCisKKyAgICAgICAgICAgIFBLRVlfVkFMVUVfUEFSVElBTF9JTkZPUk1BVElPTiBwVmFsdWVJbmZvID0gTlVMTDsKKyAgICAgICAgICAgIFVMT05HIFZhbHVlSW5mb0xlbmd0aCA9IDA7CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgcEtleUluZm8tPlZhbHVlcy0xIHRvIGEgc3RyaW5nCisgICAgICAgICAgICBSdGxJbnRlZ2VyVG9Vbmljb2RlU3RyaW5nKHBLZXlJbmZvLT5WYWx1ZXMgLSAxLCAxNiwgJk5hbWUpOworCisgICAgICAgICAgICAvLyBRdWVyeSB0aGUga2V5IGRhdGEgYnVmZmVyIHNpemUKKyAgICAgICAgICAgIHN0YXR1cyA9IFp3UXVlcnlWYWx1ZUtleSgKKyAgICAgICAgICAgICAgICByZWdLZXksCisgICAgICAgICAgICAgICAgJk5hbWUsCisgICAgICAgICAgICAgICAgS2V5VmFsdWVQYXJ0aWFsSW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgcFZhbHVlSW5mbywKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICZWYWx1ZUluZm9MZW5ndGgpOworCisgICAgICAgICAgICBOVF9BU1NFUlQoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gU1RBVFVTX0JVRkZFUl9UT09fU01BTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIlp3UXVlcnlWYWx1ZUtleSBmb3IgJVMgdmFsdWUgZmFpbGVkLCAlIVNUQVRVUyEiLCBOYW1lLkJ1ZmZlciwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwVmFsdWVJbmZvID0gRklMVEVSX0FMTE9DX01FTShwRmlsdGVyLT5GaWx0ZXJIYW5kbGUsIFZhbHVlSW5mb0xlbmd0aCk7CisgICAgICAgICAgICBpZiAocFZhbHVlSW5mbyA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFF1ZXJ5IHRoZSBkYXRhIGJ1ZmZlcgorICAgICAgICAgICAgc3RhdHVzID0gWndRdWVyeVZhbHVlS2V5KAorICAgICAgICAgICAgICAgIHJlZ0tleSwKKyAgICAgICAgICAgICAgICAmTmFtZSwKKyAgICAgICAgICAgICAgICBLZXlWYWx1ZVBhcnRpYWxJbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAgICBwVmFsdWVJbmZvLAorICAgICAgICAgICAgICAgIFZhbHVlSW5mb0xlbmd0aCwKKyAgICAgICAgICAgICAgICAmVmFsdWVJbmZvTGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJad1F1ZXJ5VmFsdWVLZXkgZm9yICVTIHZhbHVlIGZhaWxlZCwgJSFTVEFUVVMhIiwgTmFtZS5CdWZmZXIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBEZWxldGUgdGhlIHJlZ2lzdHJ5IHZhbHVlCisgICAgICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgICAgIFp3RGVsZXRlVmFsdWVLZXkoCisgICAgICAgICAgICAgICAgICAgIHJlZ0tleSwKKyAgICAgICAgICAgICAgICAgICAgJk5hbWUpOworCisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlp3RGVsZXRlVmFsdWVLZXkgZm9yICVTIHZhbHVlIGZhaWxlZCwgJSFTVEFUVVMhIiwgTmFtZS5CdWZmZXIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDb252ZXJ0ICdhSW5kZXgnIHRvIGEgc3RyaW5nCisgICAgICAgICAgICBSdGxJbnRlZ2VyVG9Vbmljb2RlU3RyaW5nKChVTE9ORylhSW5kZXgsIDE2LCAmTmFtZSk7CisKKyAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSByZWdpc3RyeSBrZXkgd2UgYXJlIGRlbGV0aW5nCisgICAgICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgICAgIFp3U2V0VmFsdWVLZXkoCisgICAgICAgICAgICAgICAgICAgIHJlZ0tleSwKKyAgICAgICAgICAgICAgICAgICAgJk5hbWUsCisgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgIFJFR19CSU5BUlksCisgICAgICAgICAgICAgICAgICAgIChQVk9JRClwVmFsdWVJbmZvLT5EYXRhLAorICAgICAgICAgICAgICAgICAgICBwVmFsdWVJbmZvLT5EYXRhTGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJad1NldFZhbHVlS2V5IGZvciAlUyB2YWx1ZSBmYWlsZWQsICUhU1RBVFVTISIsIE5hbWUuQnVmZmVyLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgICAgIH0KKworICAgICAgICBjbGVhbnVwOgorCisgICAgICAgICAgICBpZiAocFZhbHVlSW5mbykgRklMVEVSX0ZSRUVfTUVNKHBWYWx1ZUluZm8pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRGVsZXRpbmcgdGhlIGxhc3QgdmFsdWUgaW4gdGhlIGxpc3QgKGJ1dCBub3QgdGhlIG9ubHkgdmFsdWUpCisgICAgICAgICAgICAvLyBKdXN0IGRlbGV0ZSB0aGUgdmFsdWUgZGlyZWN0bHkuIE5vIG5lZWQgdG8gY29weSBhbnkgb3RoZXJzLgorCisgICAgICAgICAgICAvLyBDb252ZXJ0ICdhSW5kZXgnIHRvIGEgc3RyaW5nCisgICAgICAgICAgICBSdGxJbnRlZ2VyVG9Vbmljb2RlU3RyaW5nKChVTE9ORylhSW5kZXgsIDE2LCAmTmFtZSk7CisKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgcmVnaXN0cnkgdmFsdWUKKyAgICAgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICAgICAgWndEZWxldGVWYWx1ZUtleSgKKyAgICAgICAgICAgICAgICAgICAgcmVnS2V5LAorICAgICAgICAgICAgICAgICAgICAmTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKK2Vycm9yOgorCisgICAgaWYgKHJlZ0tleSkgWndDbG9zZShyZWdLZXkpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIob3RDdHgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7Cit9CisKK290RXJyb3Igb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2Uob3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihvdEN0eCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0FiYW5kb25DaGFuZ2Uob3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihvdEN0eCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0dldChvdEluc3RhbmNlICpvdEN0eCwgdWludDE2X3QgYUtleSwgaW50IGFJbmRleCwgdWludDhfdCAqYVZhbHVlLCB1aW50MTZfdCAqYVZhbHVlTGVuZ3RoKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSAKKyAgICAgICAgRmlsdGVyUmVhZFNldHRpbmcoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgIGFJbmRleCwKKyAgICAgICAgICAgIGFWYWx1ZSwKKyAgICAgICAgICAgIGFWYWx1ZUxlbmd0aCk7CisKKyAgICByZXR1cm4gTlRfU1VDQ0VTUyhzdGF0dXMpID8gT1RfRVJST1JfTk9ORSA6IE9UX0VSUk9SX05PVF9GT1VORDsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc1NldChvdEluc3RhbmNlICpvdEN0eCwgdWludDE2X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlLCB1aW50MTZfdCBhVmFsdWVMZW5ndGgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKworICAgIE5UU1RBVFVTIHN0YXR1cyA9IAorICAgICAgICBGaWx0ZXJXcml0ZVNldHRpbmcoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBhVmFsdWUsCisgICAgICAgICAgICBhVmFsdWVMZW5ndGgpOworCisgICAgcmV0dXJuIE5UX1NVQ0NFU1Moc3RhdHVzKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9GQUlMRUQ7Cit9CisKK290RXJyb3Igb3RQbGF0U2V0dGluZ3NBZGQob3RJbnN0YW5jZSAqb3RDdHgsIHVpbnQxNl90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZSwgdWludDE2X3QgYVZhbHVlTGVuZ3RoKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICB1aW50MTZfdCBjb3VudCA9IEZpbHRlckNvdW50U2V0dGluZ3MocEZpbHRlciwgYUtleSk7CisKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBGaWx0ZXJXcml0ZVNldHRpbmcoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgYVZhbHVlLAorICAgICAgICAgICAgYVZhbHVlTGVuZ3RoKTsKKworICAgIHJldHVybiBOVF9TVUNDRVNTKHN0YXR1cykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfRkFJTEVEOworfQorCitvdEVycm9yIG90UGxhdFNldHRpbmdzRGVsZXRlKG90SW5zdGFuY2UgKm90Q3R4LCB1aW50MTZfdCBhS2V5LCBpbnQgYUluZGV4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBGaWx0ZXJEZWxldGVTZXR0aW5nKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICBhSW5kZXgpOworCisgICAgcmV0dXJuIE5UX1NVQ0NFU1Moc3RhdHVzKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9GQUlMRUQ7Cit9CisKK3ZvaWQgb3RQbGF0U2V0dGluZ3NXaXBlKG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgLy8gRGVsZXRlIGFsbCBzdWJrZXlzIG9mICdPcGVuVGhyZWFkJworICAgIGlmIChwRmlsdGVyLT5vdFNldHRpbmdzUmVnS2V5KQorICAgIHsKKyAgICAgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIFVMT05HIGluZGV4ID0gMDsKKyAgICAgICAgVUNIQVIga2V5SW5mb1tzaXplb2YoS0VZX0JBU0lDX0lORk9STUFUSU9OKSArIDY0XTsKKworICAgICAgICB3aGlsZSAoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBVTE9ORyBzaXplID0gc2l6ZW9mKGtleUluZm8pOworICAgICAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgICAgICBad0VudW1lcmF0ZUtleSgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RTZXR0aW5nc1JlZ0tleSwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIEtleUJhc2ljSW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGtleUluZm8sCisgICAgICAgICAgICAgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICZzaXplKTsKKworICAgICAgICAgICAgYm9vbCBkZWxldGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEhBTkRMRSBzdWJLZXkgPSBOVUxMOworICAgICAgICAgICAgICAgIE9CSkVDVF9BVFRSSUJVVEVTIGF0dHJpYnV0ZXM7CisgICAgICAgICAgICAgICAgUEtFWV9CQVNJQ19JTkZPUk1BVElPTiBwS2V5SW5mbyA9IChQS0VZX0JBU0lDX0lORk9STUFUSU9OKWtleUluZm87CisKKyAgICAgICAgICAgICAgICBVTklDT0RFX1NUUklORyBzdWJLZXlOYW1lID0gCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAoVVNIT1JUKXBLZXlJbmZvLT5OYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAoVVNIT1JUKXBLZXlJbmZvLT5OYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBwS2V5SW5mby0+TmFtZQorICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICAgICAgJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICZzdWJLZXlOYW1lLAorICAgICAgICAgICAgICAgICAgICBPQkpfQ0FTRV9JTlNFTlNJVElWRSB8IE9CSl9LRVJORUxfSEFORExFLAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdFNldHRpbmdzUmVnS2V5LAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhlIHN1YiBrZXkKKyAgICAgICAgICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICBad09wZW5LZXkoCisgICAgICAgICAgICAgICAgICAgICAgICAmc3ViS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0FMTF9BQ0NFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAmYXR0cmlidXRlcyk7CisKKyAgICAgICAgICAgICAgICBpZiAoTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBrZXkKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gWndEZWxldGVLZXkoc3ViS2V5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndEZWxldGVLZXkgZm9yIHN1YmtleSBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIGhhbmRsZQorICAgICAgICAgICAgICAgICAgICBad0Nsb3NlKHN1YktleSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndPcGVuS2V5IGZvciBzdWJrZXkgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT25seSBpbmNyZW1lbnQgaW5kZXggaWYgd2UgZGlkbid0IGRlbGV0ZQorICAgICAgICAgICAgaWYgKCFkZWxldGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvdGhyZWFkLmMgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvdGhyZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEzOWY0NQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi90aHJlYWQuYwpAQCAtMCwwICsxLDgyMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIFRocmVhZCBtb2RlIChSYWRpbyBNaW5pcG9ydCkgZnVuY3Rpb25zIHJlcXVpcmVkIGZvciB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICovCisKKyNpbmNsdWRlICJwcmVjb21wLmgiCisjaW5jbHVkZSAidGhyZWFkLnRtaCIKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTkRJU19TVEFUVVMgCitvdEx3ZkluaXRpYWxpemVUaHJlYWRNb2RlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIE5ESVNfU1RBVFVTIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPkRldmljZUNhcGFiaWxpdGllcyAmIE9UTFdGX0RFVklDRV9DQVBfUkFESU8pOworCisgICAgZG8KKyAgICB7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPlNlbmROZXRCdWZmZXJMaXN0Q29tcGxldGUsCisgICAgICAgICAgICBTeW5jaHJvbml6YXRpb25FdmVudCwgLy8gYXV0by1jbGVhcmluZyBldmVudAorICAgICAgICAgICAgRkFMU0UgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGluaXRpYWxseSBub24tc2lnbmFsbGVkCisgICAgICAgICAgICApOworCisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGV2ZW50IHByb2Nlc3NpbmcKKyAgICAgICAgcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWQgPSBOVUxMOworICAgICAgICBOZGlzQWxsb2NhdGVTcGluTG9jaygmcEZpbHRlci0+RXZlbnRzTG9jayk7CisgICAgICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+QWRkcmVzc0NoYW5nZXNIZWFkKTsKKyAgICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZwRmlsdGVyLT5OQkxzSGVhZCk7CisgICAgICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+TWFjRnJhbWVzSGVhZCk7CisgICAgICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+RXZlbnRJcnBMaXN0SGVhZCk7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkU3RvcEV2ZW50LAorICAgICAgICAgICAgU3luY2hyb25pemF0aW9uRXZlbnQsIC8vIGF1dG8tY2xlYXJpbmcgZXZlbnQKKyAgICAgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAvLyBldmVudCBpbml0aWFsbHkgbm9uLXNpZ25hbGxlZAorICAgICAgICAgICAgKTsKKyAgICAgICAgS2VJbml0aWFsaXplRXZlbnQoCisgICAgICAgICAgICAmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRXYWl0VGltZVVwZGF0ZWQsCisgICAgICAgICAgICBTeW5jaHJvbml6YXRpb25FdmVudCwgLy8gYXV0by1jbGVhcmluZyBldmVudAorICAgICAgICAgICAgRkFMU0UgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGluaXRpYWxseSBub24tc2lnbmFsbGVkCisgICAgICAgICAgICApOworICAgICAgICBLZUluaXRpYWxpemVFdmVudCgKKyAgICAgICAgICAgICZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NUYXNrbGV0cywKKyAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbkV2ZW50LCAvLyBhdXRvLWNsZWFyaW5nIGV2ZW50CisgICAgICAgICAgICBGQUxTRSAgICAgICAgICAgICAgICAgLy8gZXZlbnQgaW5pdGlhbGx5IG5vbi1zaWduYWxsZWQKKyAgICAgICAgICAgICk7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0FkZHJlc3NDaGFuZ2VzLAorICAgICAgICAgICAgU3luY2hyb25pemF0aW9uRXZlbnQsIC8vIGF1dG8tY2xlYXJpbmcgZXZlbnQKKyAgICAgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAvLyBldmVudCBpbml0aWFsbHkgbm9uLXNpZ25hbGxlZAorICAgICAgICAgICAgKTsKKyAgICAgICAgS2VJbml0aWFsaXplRXZlbnQoCisgICAgICAgICAgICAmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRQcm9jZXNzTkJMcywKKyAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbkV2ZW50LCAvLyBhdXRvLWNsZWFyaW5nIGV2ZW50CisgICAgICAgICAgICBGQUxTRSAgICAgICAgICAgICAgICAgLy8gZXZlbnQgaW5pdGlhbGx5IG5vbi1zaWduYWxsZWQKKyAgICAgICAgICAgICk7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc01hY0ZyYW1lcywKKyAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbkV2ZW50LCAvLyBhdXRvLWNsZWFyaW5nIGV2ZW50CisgICAgICAgICAgICBGQUxTRSAgICAgICAgICAgICAgICAgLy8gZXZlbnQgaW5pdGlhbGx5IG5vbi1zaWduYWxsZWQKKyAgICAgICAgICAgICk7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0lycCwKKyAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbkV2ZW50LCAvLyBhdXRvLWNsZWFyaW5nIGV2ZW50CisgICAgICAgICAgICBGQUxTRSAgICAgICAgICAgICAgICAgLy8gZXZlbnQgaW5pdGlhbGx5IG5vbi1zaWduYWxsZWQKKyAgICAgICAgICAgICk7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkRW5lcmd5U2NhbkNvbXBsZXRlLAorICAgICAgICAgICAgU3luY2hyb25pemF0aW9uRXZlbnQsIC8vIGF1dG8tY2xlYXJpbmcgZXZlbnQKKyAgICAgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAvLyBldmVudCBpbml0aWFsbHkgbm9uLXNpZ25hbGxlZAorICAgICAgICAgICAgKTsKKyAgICAgICAgcEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIgPSAKKyAgICAgICAgICAgIEV4QWxsb2NhdGVUaW1lcigKKyAgICAgICAgICAgICAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ1RpbWVyLCAKKyAgICAgICAgICAgICAgICBwRmlsdGVyLCAKKyAgICAgICAgICAgICAgICBFWF9USU1FUl9ISUdIX1JFU09MVVRJT04KKyAgICAgICAgICAgICAgICApOworICAgICAgICBpZiAocEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgdGltZXIhIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFF1ZXJ5IHRoZSBpbnRlcmZhY2Ugc3RhdGUgKGJlc3QgZWZmb3J0LCBzaW5jZSBpdCBtaWdodCBub3QgYmUgc3VwcG9ydGVkKQorICAgICAgICBCT09MRUFOIElmVXAgPSBGQUxTRTsKKyAgICAgICAgU3RhdHVzID0gb3RMd2ZDbWRHZXRQcm9wKHBGaWx0ZXIsIE5VTEwsIFNQSU5FTF9QUk9QX05FVF9JRl9VUCwgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywgJklmVXApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBxdWVyeSBTUElORUxfUFJPUF9JTlRFUkZBQ0VfVFlQRSwgJSFTVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBOVF9BU1NFUlQoSWZVcCA9PSBGQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBldmVudCBwcm9jZXNzaW5nIHRocmVhZAorICAgICAgICBpZiAoIU5UX1NVQ0NFU1Mob3RMd2ZFdmVudFByb2Nlc3NpbmdTdGFydChwRmlsdGVyKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IHdoaWxlIChGQUxTRSk7CisKKyAgICBpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgeworICAgICAgICAvLyBTdG9wIGV2ZW50IHByb2Nlc3NpbmcgdGhyZWFkCisgICAgICAgIG90THdmRXZlbnRQcm9jZXNzaW5nU3RvcChwRmlsdGVyKTsKKworICAgICAgICAvLyBTdG9wIGFuZCBmcmVlIHRoZSB0aW1lcgorICAgICAgICBpZiAocEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4RGVsZXRlVGltZXIocEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIsIFRSVUUsIEZBTFNFLCBOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TkRJUyhEUklWRVJfREVGQVVMVCwgU3RhdHVzKTsKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgCitvdEx3ZlVuaW5pdGlhbGl6ZVRocmVhZE1vZGUoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIC8vIFN0b3AgZXZlbnQgcHJvY2Vzc2luZyB0aHJlYWQKKyAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ1N0b3AocEZpbHRlcik7CisgICAgCisgICAgLy8gRnJlZSB0aW1lcgorICAgIGlmIChwRmlsdGVyLT5FdmVudEhpZ2hQcmVjaXNpb25UaW1lcikKKyAgICB7CisgICAgICAgIEV4RGVsZXRlVGltZXIocEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIsIFRSVUUsIEZBTFNFLCBOVUxMKTsKKyAgICAgICAgcEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIgPSBOVUxMOworICAgIH0KKworICAgIC8vIENsb3NlIGhhbmRsZSB0byBzZXR0aW5ncyByZWdpc3RyeSBrZXkKKyAgICBpZiAocEZpbHRlci0+b3RTZXR0aW5nc1JlZ0tleSkKKyAgICB7CisgICAgICAgIFp3Q2xvc2UocEZpbHRlci0+b3RTZXR0aW5nc1JlZ0tleSk7CisgICAgICAgIHBGaWx0ZXItPm90U2V0dGluZ3NSZWdLZXkgPSBOVUxMOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworI2lmIERFQlVHX0FMTE9DCitQTVNfRklMVEVSCitvdEx3ZkZpbmRGcm9tQ3VycmVudFRocmVhZCgpCit7CisgICAgUE1TX0ZJTFRFUiBwT3V0cHV0ID0gTlVMTDsKKyAgICBIQU5ETEUgQ3VyVGhyZWFkSWQgPSBQc0dldEN1cnJlbnRUaHJlYWRJZCgpOworCisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgZm9yIChQTElTVF9FTlRSWSBMaW5rID0gRmlsdGVyTW9kdWxlTGlzdC5GbGluazsgTGluayAhPSAmRmlsdGVyTW9kdWxlTGlzdDsgTGluayA9IExpbmstPkZsaW5rKQorICAgIHsKKyAgICAgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgTVNfRklMVEVSLCBGaWx0ZXJNb2R1bGVMaW5rKTsKKworICAgICAgICBpZiAocEZpbHRlci0+b3RUaHJlYWRJZCA9PSBDdXJUaHJlYWRJZCkKKyAgICAgICAgeworICAgICAgICAgICAgcE91dHB1dCA9IHBGaWx0ZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIE5kaXNSZWxlYXNlU3BpbkxvY2soJkZpbHRlckxpc3RMb2NrKTsKKworICAgIE5UX0FTU0VSVChwT3V0cHV0KTsKKyAgICByZXR1cm4gcE91dHB1dDsKK30KKyNlbmRpZgorCisjZGVmaW5lIE9UUExBVF9DQUxMT0NfVEFHICdPVERNJworI2RlZmluZSBCVUZGRVJfUE9PTF9UQUcgJ09UQlAnCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQKK290THdmUmVsZWFzZUluc3RhbmNlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBpZiAocEZpbHRlci0+b3RDdHggIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90SW5zdGFuY2VGaW5hbGl6ZShwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgIHBGaWx0ZXItPm90Q3R4ID0gTlVMTDsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorCisgICAgICAgIC8vIEZyZWUgYWxsIHRoZSBwb29scyBhcyB0aGVyZSBzaG91bGQgYmUgbm8gb3V0c3RhbmRpbmcKKyAgICAgICAgLy8gcmVmZXJlbmNlcyB0byB0aGUgYnVmZmVycyBhbnkgbW9yZS4KKyAgICAgICAgQnVmZmVyUG9vbCAqY3VyUG9vbCA9IHBGaWx0ZXItPm90QnVmZmVyUG9vbEhlYWQ7CisgICAgICAgIHdoaWxlIChjdXJQb29sICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclBvb2wgKm5leHRQb29sID0gY3VyUG9vbC0+TmV4dDsKKyAgICAgICAgICAgIEV4RnJlZVBvb2xXaXRoVGFnKGN1clBvb2wsIEJVRkZFUl9QT09MX1RBRyk7CisgICAgICAgICAgICBjdXJQb29sID0gbmV4dFBvb2w7CisgICAgICAgIH0KKworI2VuZGlmCisKKyNpZiBERUJVR19BTExPQworCisgICAgICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdE91dHN0YW5kaW5nQWxsb2NhdGlvbkNvdW50ID09IDApOworICAgICAgICBOVF9BU1NFUlQocEZpbHRlci0+b3RPdXRzdGFuZGluZ01lbW9yeUFsbG9jYXRlZCA9PSAwKTsKKyAgICAgICAgUExJU1RfRU5UUlkgTGluayA9IHBGaWx0ZXItPm90T3V0U3RhbmRpbmdBbGxvY2F0aW9ucy5GbGluazsKKyAgICAgICAgd2hpbGUgKExpbmsgIT0gJnBGaWx0ZXItPm90T3V0U3RhbmRpbmdBbGxvY2F0aW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgT1RfQUxMT0MqIEFsbG9jSGVhZGVyID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RfQUxMT0MsIExpbmspOworICAgICAgICAgICAgTGluayA9IExpbmstPkZsaW5rOworCisgICAgICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiTGVha2VkIEFsbG9jIElEOiV1IiwgQWxsb2NIZWFkZXItPklEKTsKKworICAgICAgICAgICAgRXhGcmVlUG9vbFdpdGhUYWcoQWxsb2NIZWFkZXIsIE9UUExBVF9DQUxMT0NfVEFHKTsKKyAgICAgICAgfQorCisjZW5kaWYKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKKy8vCisvLyBPcGVuVGhyZWFkIFBsYXRmb3JtIGZ1bmN0aW9ucworLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQordm9pZCAqb3RQbGF0Q0FsbG9jKHNpemVfdCBhTnVtLCBzaXplX3QgYVNpemUpCit7CisgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IGFOdW0gKiBhU2l6ZTsKKyNpZiBERUJVR19BTExPQworICAgIHRvdGFsU2l6ZSArPSBzaXplb2YoT1RfQUxMT0MpOworI2VuZGlmCisgICAgUFZPSUQgbWVtID0gRXhBbGxvY2F0ZVBvb2xXaXRoVGFnKFBhZ2VkUG9vbCwgdG90YWxTaXplLCBPVFBMQVRfQ0FMTE9DX1RBRyk7CisgICAgaWYgKG1lbSkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkobWVtLCB0b3RhbFNpemUpOworI2lmIERFQlVHX0FMTE9DCisgICAgICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90THdmRmluZEZyb21DdXJyZW50VGhyZWFkKCk7CisgICAgICAgIC8vTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIm90UGxhdEFsbG9jKCV1KSA9IElEOiV1ICVwIiwgKFVMT05HKXRvdGFsU2l6ZSwgcEZpbHRlci0+b3RBbGxvY2F0aW9uSUQsIG1lbSk7CisKKyAgICAgICAgT1RfQUxMT0MqIEFsbG9jSGVhZGVyID0gKE9UX0FMTE9DKiltZW07CisgICAgICAgIEFsbG9jSGVhZGVyLT5MZW5ndGggPSAoTE9ORyl0b3RhbFNpemU7CisgICAgICAgIEFsbG9jSGVhZGVyLT5JRCA9IHBGaWx0ZXItPm90QWxsb2NhdGlvbklEKys7CisgICAgICAgIEluc2VydFRhaWxMaXN0KCZwRmlsdGVyLT5vdE91dFN0YW5kaW5nQWxsb2NhdGlvbnMsICZBbGxvY0hlYWRlci0+TGluayk7CisKKyAgICAgICAgSW50ZXJsb2NrZWRJbmNyZW1lbnQoJnBGaWx0ZXItPm90T3V0c3RhbmRpbmdBbGxvY2F0aW9uQ291bnQpOworICAgICAgICBJbnRlcmxvY2tlZEFkZCgmcEZpbHRlci0+b3RPdXRzdGFuZGluZ01lbW9yeUFsbG9jYXRlZCwgQWxsb2NIZWFkZXItPkxlbmd0aCk7CisgICAgICAgIAorICAgICAgICBtZW0gPSAoUFVDSEFSKShtZW0pICsgc2l6ZW9mKE9UX0FMTE9DKTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gbWVtOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCit2b2lkIG90UGxhdEZyZWUoX0luX29wdF8gdm9pZCAqYVB0cikKK3sKKyAgICBpZiAoYVB0ciA9PSBOVUxMKSByZXR1cm47CisjaWYgREVCVUdfQUxMT0MKKyAgICBhUHRyID0gKFBVQ0hBUikoYVB0cikgLSBzaXplb2YoT1RfQUxMT0MpOworICAgIC8vTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIm90UGxhdEZyZWUoJXApIiwgYVB0cik7CisgICAgT1RfQUxMT0MqIEFsbG9jSGVhZGVyID0gKE9UX0FMTE9DKilhUHRyOworCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RMd2ZGaW5kRnJvbUN1cnJlbnRUaHJlYWQoKTsKKyAgICBJbnRlcmxvY2tlZERlY3JlbWVudCgmcEZpbHRlci0+b3RPdXRzdGFuZGluZ0FsbG9jYXRpb25Db3VudCk7CisgICAgSW50ZXJsb2NrZWRBZGQoJnBGaWx0ZXItPm90T3V0c3RhbmRpbmdNZW1vcnlBbGxvY2F0ZWQsIC1BbGxvY0hlYWRlci0+TGVuZ3RoKTsKKyAgICBSZW1vdmVFbnRyeUxpc3QoJkFsbG9jSGVhZGVyLT5MaW5rKTsKKyNlbmRpZgorICAgIEV4RnJlZVBvb2xXaXRoVGFnKGFQdHIsIE9UUExBVF9DQUxMT0NfVEFHKTsKK30KKworI2lmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitCdWZmZXJQb29sKiBBbGxvY0J1ZmZlclBvb2woX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIpCit7CisgICAgLy8gQWxsb2NhdGUgdGhlIG1lbW9yeQorICAgIEJ1ZmZlclBvb2wqIGJ1ZlBvb2wgPSAoQnVmZmVyUG9vbCopRXhBbGxvY2F0ZVBvb2xXaXRoVGFnKFBhZ2VkUG9vbCwgcEZpbHRlci0+b3RCdWZmZXJQb29sQnl0ZVNpemUsIEJVRkZFUl9QT09MX1RBRyk7CisgICAgaWYgKGJ1ZlBvb2wgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgbmV3IGJ1ZmZlciBwb29sISIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvLyBaZXJvIG91dCB0aGUgbWVtb3J5CisgICAgUnRsWmVyb01lbW9yeShidWZQb29sLCBwRmlsdGVyLT5vdEJ1ZmZlclBvb2xCeXRlU2l6ZSk7CisKKyAgICAvLyBTZXQgYWxsIG1OZXh0IGZvciB0aGUgYnVmZmVycworICAgIG90TWVzc2FnZSogcHJldkJ1ZiA9IChvdE1lc3NhZ2UqKWJ1ZlBvb2wtPkJ1ZmZlcnM7CisgICAgZm9yICh1aW50MTZfdCBpID0gMTsgaSA8IHBGaWx0ZXItPm90QnVmZmVyUG9vbEJ1ZmZlckNvdW50OyBpKyspCisgICAgeworICAgICAgICBvdE1lc3NhZ2UqIGN1ckJ1ZiA9CisgICAgICAgICAgICAob3RNZXNzYWdlKikmYnVmUG9vbC0+QnVmZmVyc1tpICogcEZpbHRlci0+b3RCdWZmZXJTaXplXTsKKworICAgICAgICBwcmV2QnVmLT5tTmV4dCA9IGN1ckJ1ZjsKKyAgICAgICAgcHJldkJ1ZiA9IGN1ckJ1ZjsKKyAgICB9CisKKyAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiQWxsb2NhdGVkIG5ldyBidWZmZXIgcG9vbCAoJWQgYnl0ZXMpISIsIHBGaWx0ZXItPm90QnVmZmVyUG9vbEJ5dGVTaXplKTsKKworICAgIHJldHVybiBidWZQb29sOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitvdE1lc3NhZ2UqIEdldE5leHRGcmVlQnVmZmVyRnJvbVBvb2woX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIpCit7CisgICAgLy8gSW1tZWRpYXRlbHkgcmV0dXJuIGlmIHdlIGhhdmUgaGl0IG91ciBsaW1pdAorICAgIGlmIChwRmlsdGVyLT5vdEJ1ZmZlcnNMZWZ0ID09IDApIHJldHVybiBOVUxMOworCisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgZnJlZSBidWZmZXJzIGxlZnQsIGFsbG9jYXRlIGFub3RoZXIgcG9vbAorICAgIGlmIChwRmlsdGVyLT5vdEZyZWVCdWZmZXJzID09IE5VTEwpCisgICAgeworICAgICAgICBCdWZmZXJQb29sICpuZXdQb29sID0gQWxsb2NCdWZmZXJQb29sKHBGaWx0ZXIpOworICAgICAgICBpZiAobmV3UG9vbCA9PSBOVUxMKSByZXR1cm4gTlVMTDsgLy8gT3V0IG9mIHBoeXNpY2FsIG1lbW9yeQorCisgICAgICAgIC8vIFB1c2ggb24gdG9wIG9mIHRoZSBwb29sIGxpc3QKKyAgICAgICAgbmV3UG9vbC0+TmV4dCA9IHBGaWx0ZXItPm90QnVmZmVyUG9vbEhlYWQ7CisgICAgICAgIHBGaWx0ZXItPm90QnVmZmVyUG9vbEhlYWQgPSBuZXdQb29sOworCisgICAgICAgIC8vIFNldCB0aGUgZnJlZSBidWZmZXIgbGlzdAorICAgICAgICBwRmlsdGVyLT5vdEZyZWVCdWZmZXJzID0gKG90TWVzc2FnZSopbmV3UG9vbC0+QnVmZmVyczsKKyAgICB9CisKKyAgICAvLyBQb3AgdGhlIHRvcCBmcmVlIGJ1ZmZlcgorICAgIG90TWVzc2FnZSogYnVmZmVyID0gcEZpbHRlci0+b3RGcmVlQnVmZmVyczsKKyAgICBwRmlsdGVyLT5vdEZyZWVCdWZmZXJzID0gcEZpbHRlci0+b3RGcmVlQnVmZmVycy0+bU5leHQ7CisgICAgcEZpbHRlci0+b3RCdWZmZXJzTGVmdC0tOworICAgIGJ1ZmZlci0+bU5leHQgPSBOVUxMOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgb3RQbGF0TWVzc2FnZVBvb2xJbml0KF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIHVpbnQxNl90IGFNaW5OdW1GcmVlQnVmZmVycywgc2l6ZV90IGFCdWZmZXJTaXplKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoYU1pbk51bUZyZWVCdWZmZXJzKTsKKworICAgIC8vIEluaXRpYWxpemUgcGFyYW1ldGVycworICAgIHBGaWx0ZXItPm90QnVmZmVyU2l6ZSA9ICh1aW50MTZfdClhQnVmZmVyU2l6ZTsKKyAgICBwRmlsdGVyLT5vdEJ1ZmZlclBvb2xCeXRlU2l6ZSA9ICh1aW50MTZfdCkoa1BhZ2VTaXplICoga1BhZ2VzUGVyQnVmZmVyUG9vbCk7CisgICAgcEZpbHRlci0+b3RCdWZmZXJQb29sQnVmZmVyQ291bnQgPSAodWludDE2X3QpKChwRmlsdGVyLT5vdEJ1ZmZlclBvb2xCeXRlU2l6ZSAtIHNpemVvZihCdWZmZXJQb29sKSkgLyBhQnVmZmVyU2l6ZSk7CisgICAgcEZpbHRlci0+b3RCdWZmZXJzTGVmdCA9IGtNYXhQYWdlc0ZvckJ1ZmZlclBvb2xzICogcEZpbHRlci0+b3RCdWZmZXJQb29sQnVmZmVyQ291bnQ7CisKKyAgICAvLyBBbGxvY2F0ZSBmaXJzdCBwb29sCisgICAgcEZpbHRlci0+b3RCdWZmZXJQb29sSGVhZCA9IEFsbG9jQnVmZmVyUG9vbChwRmlsdGVyKTsKKyAgICBBU1NFUlQocEZpbHRlci0+b3RCdWZmZXJQb29sSGVhZCk7IC8vIFNob3VsZCB0aGlzIEFQSSBhbGxvdyBmb3IgZmFpbHVyZSA/Pz8KKworICAgIC8vIFNldCBpbml0aWFsIGZyZWUgYnVmZmVyIGxpc3QKKyAgICBwRmlsdGVyLT5vdEZyZWVCdWZmZXJzID0gKG90TWVzc2FnZSopcEZpbHRlci0+b3RCdWZmZXJQb29sSGVhZC0+QnVmZmVyczsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorb3RNZXNzYWdlICpvdFBsYXRNZXNzYWdlUG9vbE5ldyhfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgcmV0dXJuIEdldE5leHRGcmVlQnVmZmVyRnJvbVBvb2wocEZpbHRlcik7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgb3RQbGF0TWVzc2FnZVBvb2xGcmVlKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIF9Jbl8gb3RNZXNzYWdlICphQnVmZmVyKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICAvLyBQdXQgYnVmZmVyIGJhY2sgb24gdGhlIGxpc3QKKyAgICBhQnVmZmVyLT5tTmV4dCA9IHBGaWx0ZXItPm90RnJlZUJ1ZmZlcnM7CisgICAgcEZpbHRlci0+b3RGcmVlQnVmZmVycyA9IGFCdWZmZXI7CisgICAgcEZpbHRlci0+b3RCdWZmZXJzTGVmdCsrOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCit1aW50MTZfdCBvdFBsYXRNZXNzYWdlUG9vbE51bUZyZWVCdWZmZXJzKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKyAgICByZXR1cm4gcEZpbHRlci0+b3RCdWZmZXJzTGVmdDsKK30KKworI2VuZGlmCisKK3VpbnQzMl90IG90UGxhdFJhbmRvbUdldCgpCit7CisgICAgTEFSR0VfSU5URUdFUiBDb3VudGVyID0gS2VRdWVyeVBlcmZvcm1hbmNlQ291bnRlcihOVUxMKTsKKyAgICByZXR1cm4gKHVpbnQzMl90KVJ0bFJhbmRvbUV4KCZDb3VudGVyLkxvd1BhcnQpOworfQorCitvdEVycm9yIG90UGxhdFJhbmRvbUdldFRydWUodWludDhfdCAqYU91dHB1dCwgdWludDE2X3QgYU91dHB1dExlbmd0aCkKK3sKKyAgICAvLyBKdXN0IHVzZSB0aGUgc3lzdGVtLXByZWZlcnJlZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBhbGdvcml0aG0KKyAgICBOVFNUQVRVUyBzdGF0dXMgPSAKKyAgICAgICAgQkNyeXB0R2VuUmFuZG9tKAorICAgICAgICAgICAgTlVMTCwgCisgICAgICAgICAgICBhT3V0cHV0LCAKKyAgICAgICAgICAgIChVTE9ORylhT3V0cHV0TGVuZ3RoLCAKKyAgICAgICAgICAgIEJDUllQVF9VU0VfU1lTVEVNX1BSRUZFUlJFRF9STkcKKyAgICAgICAgICAgICk7CisgICAgTlRfQVNTRVJUKE5UX1NVQ0NFU1Moc3RhdHVzKSk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkJDcnlwdEdlblJhbmRvbSBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9GQUlMRUQ7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgb3RUYXNrbGV0c1NpZ25hbFBlbmRpbmcoX0luXyBvdEluc3RhbmNlICpvdEN0eCkKK3sKKyAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAib3RUYXNrbGV0c1NpZ25hbFBlbmRpbmciKTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKyAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3VGFza2xldChwRmlsdGVyKTsKK30KKworLy8gUHJvY2VzcyBhIHJvbGUgc3RhdGUgY2hhbmdlCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZQcm9jZXNzUm9sZVN0YXRlQ2hhbmdlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyCisgICAgKQoreworICAgIG90RGV2aWNlUm9sZSBwcmV2Um9sZSA9IHBGaWx0ZXItPm90Q2FjaGVkUm9sZTsKKyAgICBwRmlsdGVyLT5vdENhY2hlZFJvbGUgPSBvdFRocmVhZEdldERldmljZVJvbGUocEZpbHRlci0+b3RDdHgpOworICAgIGlmIChwcmV2Um9sZSA9PSBwRmlsdGVyLT5vdENhY2hlZFJvbGUpIHJldHVybjsKKworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBuZXcgcm9sZTogJSFvdERldmljZVJvbGUhIiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsIHBGaWx0ZXItPm90Q2FjaGVkUm9sZSk7CisKKyAgICAvLyBNYWtlIHN1cmUgd2UgYXJlIGluIHRoZSBjb3JyZWN0IG1lZGlhIGNvbm5lY3Qgc3RhdGUKKyAgICBvdEx3ZkluZGljYXRlTGlua1N0YXRlKAorICAgICAgICBwRmlsdGVyLCAKKyAgICAgICAgSXNBdHRhY2hlZChwRmlsdGVyLT5vdENhY2hlZFJvbGUpID8gCisgICAgICAgICAgICBNZWRpYUNvbm5lY3RTdGF0ZUNvbm5lY3RlZCA6IAorICAgICAgICAgICAgTWVkaWFDb25uZWN0U3RhdGVEaXNjb25uZWN0ZWQpOworfQorCit2b2lkIG90THdmU3RhdGVDaGFuZ2VkQ2FsbGJhY2sodWludDMyX3QgYUZsYWdzLCBfSW5fIHZvaWQgKmFDb250ZXh0KQoreworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSAoUE1TX0ZJTFRFUilhQ29udGV4dDsKKyAgICBQRklMVEVSX05PVElGSUNBVElPTl9FTlRSWSBOb3RpZkVudHJ5ID0gRklMVEVSX0FMTE9DX05PVElGKHBGaWx0ZXIpOworCisgICAgLy8KKyAgICAvLyBQcm9jZXNzIHRoZSBub3RpZmljYXRpb24gaW50ZXJuYWxseQorICAgIC8vCisKKyAgICBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfSVA2X0FERFJFU1NfQURERUQpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfSVA2X0FERFJFU1NfQURERUQiLCBwRmlsdGVyKTsKKyAgICAgICAgb3RMd2ZSYWRpb0FkZHJlc3Nlc1VwZGF0ZWQocEZpbHRlcik7CisgICAgfQorCisgICAgaWYgKChhRmxhZ3MgJiBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX1JFTU9WRUQpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfSVA2X0FERFJFU1NfUkVNT1ZFRCIsIHBGaWx0ZXIpOworICAgICAgICBvdEx3ZlJhZGlvQWRkcmVzc2VzVXBkYXRlZChwRmlsdGVyKTsKKyAgICB9CisKKyAgICBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfQURERUQpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfQURERUQiLCBwRmlsdGVyKTsKKyAgICAgICAgb3RMd2ZSYWRpb0FkZHJlc3Nlc1VwZGF0ZWQocEZpbHRlcik7CisgICAgfQorCisgICAgaWYgKChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9STE9DX1JFTU9WRUQpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfUkVNT1ZFRCIsIHBGaWx0ZXIpOworICAgICAgICBvdEx3ZlJhZGlvQWRkcmVzc2VzVXBkYXRlZChwRmlsdGVyKTsKKyAgICB9CisKKyAgICBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX1JPTEUpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfVEhSRUFEX1JPTEUiLCBwRmlsdGVyKTsKKyAgICAgICAgb3RMd2ZQcm9jZXNzUm9sZVN0YXRlQ2hhbmdlKHBGaWx0ZXIpOworICAgIH0KKworICAgIGlmICgoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUEFSVElUSU9OX0lEKSAhPSAwKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCByZWNlaXZlZCBPVF9DSEFOR0VEX1RIUkVBRF9QQVJUSVRJT05fSUQiLCBwRmlsdGVyKTsKKyAgICB9CisKKyAgICBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX0tFWV9TRVFVRU5DRV9DT1VOVEVSKSAhPSAwKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCByZWNlaXZlZCBPVF9DSEFOR0VEX1RIUkVBRF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiIsIHBGaWx0ZXIpOworICAgIH0KKworICAgIGlmICgoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfQ0hJTERfQURERUQpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX0FEREVEIiwgcEZpbHRlcik7CisgICAgfQorCisgICAgaWYgKChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9DSElMRF9SRU1PVkVEKSAhPSAwKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCByZWNlaXZlZCBPVF9DSEFOR0VEX1RIUkVBRF9DSElMRF9SRU1PVkVEIiwgcEZpbHRlcik7CisgICAgfQorCisgICAgaWYgKChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKSAhPSAwKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCByZWNlaXZlZCBPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBIiwgcEZpbHRlcik7CisgICAgICAgIG90SXA2U2xhYWNVcGRhdGUocEZpbHRlci0+b3RDdHgsIHBGaWx0ZXItPm90QXV0b0FkZHJlc3NlcywgQVJSQVlTSVpFKHBGaWx0ZXItPm90QXV0b0FkZHJlc3NlcyksIG90SXA2Q3JlYXRlUmFuZG9tSWlkLCBOVUxMKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorICAgICAgICBvdERoY3A2U2VydmVyVXBkYXRlKHBGaWx0ZXItPm90Q3R4KTsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKyAgICAgICAgb3REaGNwNkNsaWVudFVwZGF0ZShwRmlsdGVyLT5vdEN0eCwgcEZpbHRlci0+b3REaGNwQWRkcmVzc2VzLCBBUlJBWVNJWkUocEZpbHRlci0+b3REaGNwQWRkcmVzc2VzKSwgTlVMTCk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorICAgIH0KKworICAgIGlmICgoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfTUxfQUREUikgIT0gMCkKKyAgICB7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgcmVjZWl2ZWQgT1RfQ0hBTkdFRF9USFJFQURfTUxfQUREUiIsIHBGaWx0ZXIpOworICAgIH0KKyAgICAKKyAgICAvLworICAgIC8vIFF1ZXVlIHRoZSBub3RpZmljYXRpb24gZm9yIGNsaWVudHMKKyAgICAvLworCisgICAgaWYgKE5vdGlmRW50cnkpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KE5vdGlmRW50cnksIHNpemVvZihGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZKSk7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Ob3RpZlR5cGUgPSBPVExXRl9OT1RJRl9TVEFURV9DSEFOR0U7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLlN0YXRlQ2hhbmdlUGF5bG9hZC5GbGFncyA9IGFGbGFnczsKKworICAgICAgICBvdEx3ZkluZGljYXRlTm90aWZpY2F0aW9uKE5vdGlmRW50cnkpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKwordm9pZCBvdEx3ZkFjdGl2ZVNjYW5DYWxsYmFjayhfSW5fIG90QWN0aXZlU2NhblJlc3VsdCAqYVJlc3VsdCwgX0luXyB2b2lkICphQ29udGV4dCkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpYUNvbnRleHQ7CisgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICBpZiAoTm90aWZFbnRyeSkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuSW50ZXJmYWNlR3VpZCA9IHBGaWx0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLk5vdGlmVHlwZSA9IE9UTFdGX05PVElGX0FDVElWRV9TQ0FOOworCisgICAgICAgIGlmIChhUmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5WYWxpZCA9IFRSVUU7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5SZXN1bHRzID0gKmFSZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5WYWxpZCA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvdEx3ZkluZGljYXRlTm90aWZpY2F0aW9uKE5vdGlmRW50cnkpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKwordm9pZCBvdEx3ZkVuZXJneVNjYW5DYWxsYmFjayhfSW5fIG90RW5lcmd5U2NhblJlc3VsdCAqYVJlc3VsdCwgX0luXyB2b2lkICphQ29udGV4dCkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpYUNvbnRleHQ7CisgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICBpZiAoTm90aWZFbnRyeSkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuSW50ZXJmYWNlR3VpZCA9IHBGaWx0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLk5vdGlmVHlwZSA9IE9UTFdGX05PVElGX0VORVJHWV9TQ0FOOworCisgICAgICAgIGlmIChhUmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5WYWxpZCA9IFRSVUU7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5SZXN1bHRzID0gKmFSZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5WYWxpZCA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvdEx3ZkluZGljYXRlTm90aWZpY2F0aW9uKE5vdGlmRW50cnkpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKwordm9pZCBvdEx3ZkRpc2NvdmVyQ2FsbGJhY2soX0luXyBvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIF9Jbl8gdm9pZCAqYUNvbnRleHQpCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IChQTVNfRklMVEVSKWFDb250ZXh0OworICAgIFBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZIE5vdGlmRW50cnkgPSBGSUxURVJfQUxMT0NfTk9USUYocEZpbHRlcik7CisgICAgaWYgKE5vdGlmRW50cnkpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KE5vdGlmRW50cnksIHNpemVvZihGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZKSk7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Ob3RpZlR5cGUgPSBPVExXRl9OT1RJRl9ESVNDT1ZFUjsKKworICAgICAgICBpZiAoYVJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuRGlzY292ZXJQYXlsb2FkLlZhbGlkID0gVFJVRTsKKyAgICAgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkRpc2NvdmVyUGF5bG9hZC5SZXN1bHRzID0gKmFSZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5EaXNjb3ZlclBheWxvYWQuVmFsaWQgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgb3RMd2ZJbmRpY2F0ZU5vdGlmaWNhdGlvbihOb3RpZkVudHJ5KTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK3ZvaWQgb3RMd2ZDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjayh1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIGNvbnN0IHVpbnQ4X3QgKmFFbmVyZ3lMaXN0LCB1aW50OF90IGFFbmVyZ3lMaXN0TGVuZ3RoLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworICAgIAorICAgIFBNU19GSUxURVIgcEZpbHRlciA9IChQTVNfRklMVEVSKWFDb250ZXh0OworICAgIFBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZIE5vdGlmRW50cnkgPSBGSUxURVJfQUxMT0NfTk9USUYocEZpbHRlcik7CisgICAgaWYgKE5vdGlmRW50cnkpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KE5vdGlmRW50cnksIHNpemVvZihGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZKSk7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Ob3RpZlR5cGUgPSBPVExXRl9OT1RJRl9DT01NSVNTSU9ORVJfRU5FUkdZX1JFUE9SVDsKKworICAgICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIHJlcG9ydHMgaWYgbmVjZXNzYXJ5CisgICAgICAgIGlmIChhRW5lcmd5TGlzdExlbmd0aCA+IE1BWF9FTkVSR1lfUkVQT1JUX0xFTkdUSCkgYUVuZXJneUxpc3RMZW5ndGggPSBNQVhfRU5FUkdZX1JFUE9SVF9MRU5HVEg7CisgICAgICAgIAorICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRQYXlsb2FkLkNoYW5uZWxNYXNrID0gYUNoYW5uZWxNYXNrOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRQYXlsb2FkLkVuZXJneUxpc3RMZW5ndGggPSBhRW5lcmd5TGlzdExlbmd0aDsKKyAgICAgICAgbWVtY3B5KE5vdGlmRW50cnktPk5vdGlmLkNvbW1pc3Npb25lckVuZXJneVJlcG9ydFBheWxvYWQuRW5lcmd5TGlzdCwgYUVuZXJneUxpc3QsIGFFbmVyZ3lMaXN0TGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCit2b2lkIG90THdmQ29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrKHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCBfSW5fIHZvaWQgKmFDb250ZXh0KQoreworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpYUNvbnRleHQ7CisgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICBpZiAoTm90aWZFbnRyeSkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuSW50ZXJmYWNlR3VpZCA9IHBGaWx0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLk5vdGlmVHlwZSA9IE9UTFdGX05PVElGX0NPTU1JU1NJT05FUl9QQU5JRF9RVUVSWTsKKyAgICAgICAgCisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkNvbW1pc3Npb25lclBhbklkUXVlcnlQYXlsb2FkLlBhbklkID0gYVBhbklkOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Db21taXNzaW9uZXJQYW5JZFF1ZXJ5UGF5bG9hZC5DaGFubmVsTWFzayA9IGFDaGFubmVsTWFzazsKKyAgICAgICAgCisgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCit2b2lkIG90THdmSm9pbmVyQ2FsbGJhY2sob3RFcnJvciBhRXJyb3IsIF9Jbl8gdm9pZCAqYUNvbnRleHQpCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IChQTVNfRklMVEVSKWFDb250ZXh0OworICAgIFBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZIE5vdGlmRW50cnkgPSBGSUxURVJfQUxMT0NfTk9USUYocEZpbHRlcik7CisgICAgaWYgKE5vdGlmRW50cnkpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KE5vdGlmRW50cnksIHNpemVvZihGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZKSk7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Ob3RpZlR5cGUgPSBPVExXRl9OT1RJRl9KT0lORVJfQ09NUExFVEU7CisKKyAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuSm9pbmVyQ29tcGxldGVQYXlsb2FkLkVycm9yID0gYUVycm9yOworCisgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQordm9pZAorb3RMd2ZUaHJlYWRWYWx1ZUlzKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBEaXNwYXRjaExldmVsLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3Qga2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18odmFsdWVfZGF0YV9sZW4pIGNvbnN0IHVpbnQ4X3QqIHZhbHVlX2RhdGFfcHRyLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCB2YWx1ZV9kYXRhX2xlbgorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJbJXBdIHJlY2VpdmVkIFZhbHVlIGZvciAlcyIsIHBGaWx0ZXIsIHNwaW5lbF9wcm9wX2tleV90b19jc3RyKGtleSkpOworCisgICAgaWYgKGtleSA9PSBTUElORUxfUFJPUF9NQUNfRU5FUkdZX1NDQU5fUkVTVUxUKQorICAgIHsKKyAgICAgICAgdWludDhfdCBzY2FuQ2hhbm5lbDsKKyAgICAgICAgaW50OF90IG1heFJzc2k7CisgICAgICAgIHNwaW5lbF9zc2l6ZV90IHJldDsKKworICAgICAgICByZXQgPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgdmFsdWVfZGF0YV9wdHIsCisgICAgICAgICAgICB2YWx1ZV9kYXRhX2xlbiwKKyAgICAgICAgICAgICJDYyIsCisgICAgICAgICAgICAmc2NhbkNoYW5uZWwsCisgICAgICAgICAgICAmbWF4UnNzaSk7CisKKyAgICAgICAgTlRfQVNTRVJUKHJldCA+IDApOworICAgICAgICBpZiAocmV0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlcjogJXAsIGNvbXBsZXRlZCBlbmVyZ3kgc2NhbjogUnNzaTolZCIsIHBGaWx0ZXIsIG1heFJzc2kpOworICAgICAgICAgICAgb3RMd2ZFdmVudFByb2Nlc3NpbmdJbmRpY2F0ZUVuZXJneVNjYW5SZXN1bHQocEZpbHRlciwgbWF4UnNzaSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoa2V5ID09IFNQSU5FTF9QUk9QX1NUUkVBTV9SQVcpCisgICAgeworICAgICAgICBpZiAodmFsdWVfZGF0YV9sZW4gPCAyNTYpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVOZXdNYWNGcmFtZUNvbW1hbmQoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBEaXNwYXRjaExldmVsLAorICAgICAgICAgICAgICAgIHZhbHVlX2RhdGFfcHRyLAorICAgICAgICAgICAgICAgICh1aW50OF90KXZhbHVlX2RhdGFfbGVuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfU1RSRUFNX0RFQlVHKQorICAgIHsKKyAgICAgICAgY29uc3QgdWludDhfdCogb3V0cHV0ID0gTlVMTDsKKyAgICAgICAgVUlOVCBvdXRwdXRfbGVuID0gMDsKKyAgICAgICAgc3BpbmVsX3NzaXplX3QgcmV0OworCisgICAgICAgIHJldCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICB2YWx1ZV9kYXRhX3B0ciwKKyAgICAgICAgICAgIHZhbHVlX2RhdGFfbGVuLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICZvdXRwdXQsCisgICAgICAgICAgICAmb3V0cHV0X2xlbik7CisKKyAgICAgICAgTlRfQVNTRVJUKHJldCA+IDApOworICAgICAgICBpZiAocmV0ID4gMCAmJiBvdXRwdXQgJiYgb3V0cHV0X2xlbiA8PSAoVUlOVClyZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdHJubGVuKChjaGFyKilvdXRwdXQsIG91dHB1dF9sZW4pICE9IG91dHB1dF9sZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkRFVklDRTogJXMiLCAoY2hhciopb3V0cHV0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG91dHB1dF9sZW4gPCAxMjgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hhciBzdHJPdXRwdXRbMTI4XSA9IHsgMCB9OworICAgICAgICAgICAgICAgIG1lbWNweShzdHJPdXRwdXQsIG91dHB1dCwgb3V0cHV0X2xlbik7CisgICAgICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkRFVklDRTogJXMiLCBzdHJPdXRwdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQordm9pZAorb3RMd2ZUaHJlYWRWYWx1ZUluc2VydGVkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBEaXNwYXRjaExldmVsLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3Qga2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18odmFsdWVfZGF0YV9sZW4pIGNvbnN0IHVpbnQ4X3QqIHZhbHVlX2RhdGFfcHRyLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCB2YWx1ZV9kYXRhX2xlbgorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJbJXBdIHJlY2VpdmVkIFZhbHVlIEluc2VydGVkIGZvciAlcyIsIHBGaWx0ZXIsIHNwaW5lbF9wcm9wX2tleV90b19jc3RyKGtleSkpOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwRmlsdGVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKERpc3BhdGNoTGV2ZWwpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoa2V5KTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHZhbHVlX2RhdGFfcHRyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHZhbHVlX2RhdGFfbGVuKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi90aHJlYWQuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi90aHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjIxYjM0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3RocmVhZC5oCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIGZvciB0aGUgb3RMd2YgRmlsdGVyIFRocmVhZCBtb2RlLgorICovCisKKyNpZm5kZWYgX1RIUkVBRF9IXworI2RlZmluZSBfVEhSRUFEX0hfCisKKy8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGFuIG90SW5zdGFuY2UgcG9pbnRlciB0byBhIE1TX0ZJTFRFUiBwb2ludGVyCitfX2lubGluZSBQTVNfRklMVEVSIG90Q3R4VG9GaWx0ZXIoX0luXyBvdEluc3RhbmNlKiBvdEN0eCkKK3sKKyAgICByZXR1cm4gKihQTVNfRklMVEVSKikoKFBVQ0hBUilvdEN0eCAtIHNpemVvZihQTVNfRklMVEVSKSk7Cit9CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBpbmRpY2F0ZSBpZiBhIHJvbGUgbWVhbnMgaXQgaXMgYXR0YWNoZWQgb3Igbm90CitfaW5saW5lIEJPT0xFQU4gSXNBdHRhY2hlZChfSW5fIG90RGV2aWNlUm9sZSByb2xlKQoreworICAgIHJldHVybiByb2xlID4gT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ7Cit9CisKKy8vCisvLyBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05ESVNfU1RBVFVTIAorb3RMd2ZJbml0aWFsaXplVGhyZWFkTW9kZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgCitvdEx3ZlVuaW5pdGlhbGl6ZVRocmVhZE1vZGUoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApOworCisvLworLy8gQ2xlYW4gdXAgb3RJbnN0YW5jZQorLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQordm9pZAorb3RMd2ZSZWxlYXNlSW5zdGFuY2UoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApOworCisvLworLy8gRXZlbnQgUHJvY2Vzc2luZyBGdW5jdGlvbnMKKy8vCisKK0VYVF9DQUxMQkFDSyBvdEx3ZkV2ZW50UHJvY2Vzc2luZ1RpbWVyOworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZFdmVudFByb2Nlc3NpbmdTdGFydCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nU3RvcCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVOZXdXYWl0VGltZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFVMT05HICAgICAgICAgICAgICAgICAgd2FpdFRpbWUKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3VGFza2xldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVBZGRyZXNzQ2hhbmdlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gTUlCX05PVElGSUNBVElPTl9UWVBFICBOb3RpZmljYXRpb25UeXBlLAorICAgIF9Jbl8gUElONl9BRERSICAgICAgICAgICAgICBwQWRkcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3TmV0QnVmZmVyTGlzdHMoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOICAgICAgICAgICAgICAgIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBQTkVUX0JVRkZFUl9MSVNUICAgICAgIE5ldEJ1ZmZlckxpc3RzCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVOZXdNYWNGcmFtZUNvbW1hbmQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOICAgICAgICAgICAgICAgIERpc3BhdGNoTGV2ZWwsCisgICAgX0luX3JlYWRzX2J5dGVzXyhCdWZmZXJMZW5ndGgpIAorICAgICAgICAgY29uc3QgdWludDhfdCogICAgICAgICBCdWZmZXIsCisgICAgX0luXyB1aW50OF90ICAgICAgICAgICAgICAgIEJ1ZmZlckxlbmd0aAorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV0QnVmZmVyTGlzdHNDYW5jZWxsZWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQVk9JRCAgICAgICAgICAgICAgICAgIENhbmNlbElkCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdJbmRpY2F0ZUlycCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgSXJwCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVFbmVyZ3lTY2FuUmVzdWx0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQ0hBUiAgICAgICBNYXhSc3NpCisgICAgKTsKKworLy8KKy8vIE9wZW5UaHJlYWQgY2FsbGJhY2tzCisvLworCit2b2lkIG90THdmU3RhdGVDaGFuZ2VkQ2FsbGJhY2sodWludDMyX3QgYUZsYWdzLCBfSW5fIHZvaWQgKmFDb250ZXh0KTsKK3ZvaWQgb3RMd2ZSZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjayhfSW5fIG90TWVzc2FnZSAqYU1lc3NhZ2UsIF9Jbl8gdm9pZCAqYUNvbnRleHQpOwordm9pZCBvdEx3ZkFjdGl2ZVNjYW5DYWxsYmFjayhfSW5fIG90QWN0aXZlU2NhblJlc3VsdCAqYVJlc3VsdCwgX0luXyB2b2lkICphQ29udGV4dCk7Cit2b2lkIG90THdmRW5lcmd5U2NhbkNhbGxiYWNrKF9Jbl8gb3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0LCBfSW5fIHZvaWQgKmFDb250ZXh0KTsKK3ZvaWQgb3RMd2ZEaXNjb3ZlckNhbGxiYWNrKF9Jbl8gb3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0LCBfSW5fIHZvaWQgKmFDb250ZXh0KTsKK3ZvaWQgb3RMd2ZDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjayh1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIGNvbnN0IHVpbnQ4X3QgKmFFbmVyZ3lMaXN0LCB1aW50OF90IGFFbmVyZ3lMaXN0TGVuZ3RoLCB2b2lkICphQ29udGV4dCk7Cit2b2lkIG90THdmQ29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrKHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCBfSW5fIHZvaWQgKmFDb250ZXh0KTsKK3ZvaWQgb3RMd2ZKb2luZXJDYWxsYmFjayhvdEVycm9yIGFFcnJvciwgX0luXyB2b2lkICphQ29udGV4dCk7CisKKy8vCisvLyBWYWx1ZSBDYWxsYmFja3MKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkCitvdEx3ZlRocmVhZFZhbHVlSXMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBrZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK3ZvaWQKK290THdmVGhyZWFkVmFsdWVJbnNlcnRlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IGtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKHZhbHVlX2RhdGFfbGVuKSBjb25zdCB1aW50OF90KiB2YWx1ZV9kYXRhX3B0ciwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgdmFsdWVfZGF0YV9sZW4KKyAgICApOworCisjZW5kaWYgIC8vX1RIUkVBRF9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3R1bm5lbC5jIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3R1bm5lbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MGY2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvdHVubmVsLmMKQEAgLTAsMCArMSw2NzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBUdW5uZWwgbW9kZSAoVGhyZWFkIE1pbmlwb3J0KSBmdW5jdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBPcGVuVGhyZWFkIGxpYnJhcnkuCisgKi8KKworI2luY2x1ZGUgInByZWNvbXAuaCIKKyNpbmNsdWRlICJ0dW5uZWwudG1oIgorCitLU1RBUlRfUk9VVElORSBvdEx3ZlR1bldvcmtlclRocmVhZDsKKworU1BJTkVMX0NNRF9IQU5ETEVSIG90THdmSXJwQ29tbWFuZEhhbmRsZXI7CisKK3R5cGVkZWYgc3RydWN0IF9TUElORUxfSVJQX0NNRF9DT05URVhUCit7CisgICAgUE1TX0ZJTFRFUiAgICAgICAgICAgICAgcEZpbHRlcjsKKyAgICBQSVJQICAgICAgICAgICAgICAgICAgICBJcnA7CisgICAgU1BJTkVMX0lSUF9DTURfSEFORExFUiAqSGFuZGxlcjsKKyAgICBzcGluZWxfdGlkX3QgICAgICAgICAgICB0aWQ7Cit9IFNQSU5FTF9JUlBfQ01EX0NPTlRFWFQ7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05ESVNfU1RBVFVTIAorb3RMd2ZUdW5Jbml0aWFsaXplKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIE5ESVNfU1RBVFVTIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgSEFORExFIHRocmVhZEhhbmRsZSA9IE5VTEw7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPkRldmljZUNhcGFiaWxpdGllcyAmIE9UTFdGX0RFVklDRV9DQVBfVEhSRUFEXzFfMCk7CisgICAgCisgICAgS2VJbml0aWFsaXplRXZlbnQoCisgICAgICAgICZwRmlsdGVyLT5UdW5Xb3JrZXJUaHJlYWRTdG9wRXZlbnQsCisgICAgICAgIFN5bmNocm9uaXphdGlvbkV2ZW50LCAvLyBhdXRvLWNsZWFyaW5nIGV2ZW50CisgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAvLyBldmVudCBpbml0aWFsbHkgbm9uLXNpZ25hbGxlZAorICAgICAgICApOworICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAmcEZpbHRlci0+VHVuV29ya2VyVGhyZWFkQWRkcmVzc0NoYW5nZWRFdmVudCwKKyAgICAgICAgU3luY2hyb25pemF0aW9uRXZlbnQsIC8vIGF1dG8tY2xlYXJpbmcgZXZlbnQKKyAgICAgICAgRkFMU0UgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGluaXRpYWxseSBub24tc2lnbmFsbGVkCisgICAgICAgICk7CisKKyAgICAvLyBTdGFydCB0aGUgd29ya2VyIHRocmVhZAorICAgIFN0YXR1cyA9IFBzQ3JlYXRlU3lzdGVtVGhyZWFkKAorICAgICAgICAgICAgICAgICZ0aHJlYWRIYW5kbGUsICAgICAgICAgICAgICAgICAgLy8gVGhyZWFkSGFuZGxlCisgICAgICAgICAgICAgICAgVEhSRUFEX0FMTF9BQ0NFU1MsICAgICAgICAgICAgICAvLyBEZXNpcmVkQWNjZXNzCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3RBdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzSGFuZGxlCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGllbnRJZAorICAgICAgICAgICAgICAgIG90THdmVHVuV29ya2VyVGhyZWFkLCAgICAgICAgICAgLy8gU3RhcnRSb3V0aW5lCisgICAgICAgICAgICAgICAgcEZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydENvbnRleHQKKyAgICAgICAgICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhTdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJQc0NyZWF0ZVN5c3RlbVRocmVhZCBmYWlsZWQsICUhU1RBVFVTISIsIFN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gR3JhYiB0aGUgb2JqZWN0IHJlZmVyZW5jZSB0byB0aGUgd29ya2VyIHRocmVhZAorICAgIFN0YXR1cyA9IE9iUmVmZXJlbmNlT2JqZWN0QnlIYW5kbGUoCisgICAgICAgICAgICAgICAgdGhyZWFkSGFuZGxlLAorICAgICAgICAgICAgICAgIFRIUkVBRF9BTExfQUNDRVNTLAorICAgICAgICAgICAgICAgICpQc1RocmVhZFR5cGUsCisgICAgICAgICAgICAgICAgS2VybmVsTW9kZSwKKyAgICAgICAgICAgICAgICAmcEZpbHRlci0+VHVuV29ya2VyVGhyZWFkLAorICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICApOworICAgIGlmICghTlRfVkVSSUZZTVNHKCJPYlJlZmVyZW5jZU9iamVjdEJ5SGFuZGxlIGNhbid0IGZhaWwgd2l0aCBhIHZhbGlkIGtlcm5lbCBoYW5kbGUiLCBOVF9TVUNDRVNTKFN0YXR1cykpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJPYlJlZmVyZW5jZU9iamVjdEJ5SGFuZGxlIGZhaWxlZCwgJSFTVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+VHVuV29ya2VyVGhyZWFkU3RvcEV2ZW50LCBJT19OT19JTkNSRU1FTlQsIEZBTFNFKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgdG8gZW5hYmxlIFJMT0MgcGFzc3Rocm91Z2gKKyAgICBTdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JMT0MxNl9ERUJVR19QQVNTVEhSVSwKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICBUUlVFCisgICAgICAgICk7CisgICAgaWYgKCFOVF9TVUNDRVNTKFN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkVuYWJsaW5nIFJMT0MgcGFzcyB0aHJvdWdoIGZhaWxlZCwgJSFTVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBUT0RPIC0gUXVlcnkgb3RoZXIgdmFsdWVzIGFuZCBjYXBhYmlsaXRpZXMKKworZXJyb3I6CisKKyAgICBpZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKyAgICB7CisgICAgICAgIG90THdmVHVuVW5pbml0aWFsaXplKHBGaWx0ZXIpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TkRJUyhEUklWRVJfREVGQVVMVCwgU3RhdHVzKTsKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgCitvdEx3ZlR1blVuaW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgLy8gQ2xlYW4gdXAgd29ya2VyIHRocmVhZAorICAgIGlmIChwRmlsdGVyLT5UdW5Xb3JrZXJUaHJlYWQpCisgICAgeworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiU3RvcHBpbmcgdHVubmVsIHdvcmtlciB0aHJlYWQgYW5kIHdhaXRpbmcgZm9yIGl0IHRvIGNvbXBsZXRlLiIpOworCisgICAgICAgIC8vIFNlbmQgZXZlbnQgdG8gc2h1dGRvd24gd29ya2VyIHRocmVhZAorICAgICAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5UdW5Xb3JrZXJUaHJlYWRTdG9wRXZlbnQsIDAsIEZBTFNFKTsKKworICAgICAgICAvLyBXYWl0IGZvciB3b3JrZXIgdGhyZWFkIHRvIGZpbmlzaAorICAgICAgICBLZVdhaXRGb3JTaW5nbGVPYmplY3QoCisgICAgICAgICAgICBwRmlsdGVyLT5UdW5Xb3JrZXJUaHJlYWQsCisgICAgICAgICAgICBFeGVjdXRpdmUsCisgICAgICAgICAgICBLZXJuZWxNb2RlLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICApOworCisgICAgICAgIC8vIEZyZWUgd29ya2VyIHRocmVhZAorICAgICAgICBPYkRlcmVmZXJlbmNlT2JqZWN0KHBGaWx0ZXItPlR1bldvcmtlclRocmVhZCk7CisgICAgICAgIHBGaWx0ZXItPlR1bldvcmtlclRocmVhZCA9IE5VTEw7CisKKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIlR1bm5lbCB3b3JrZXIgdGhyZWFkIGNsZWFuZWQgdXAuIik7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCisvLyBXb3JrZXIgdGhyZWFkIGZvciBwcm9jZXNzaW5nIGFsbCB0dW5uZWwgZXZlbnRzCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitvdEx3ZlR1bldvcmtlclRocmVhZCgKKyAgICBQVk9JRCAgIENvbnRleHQKKyAgICApCit7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpQ29udGV4dDsKKyAgICBOVF9BU1NFUlQocEZpbHRlcik7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEtFVkVOVCBXYWl0RXZlbnRzW10gPSAKKyAgICB7IAorICAgICAgICAmcEZpbHRlci0+VHVuV29ya2VyVGhyZWFkU3RvcEV2ZW50LAorICAgICAgICAmcEZpbHRlci0+VHVuV29ya2VyVGhyZWFkQWRkcmVzc0NoYW5nZWRFdmVudAorICAgIH07CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgICAvLyBXYWl0IGZvciBldmVudCB0byBzdG9wIG9yIHByb2Nlc3MgZXZlbnQgdG8gZmlyZQorICAgICAgICBOVFNUQVRVUyBzdGF0dXMgPSAKKyAgICAgICAgICAgIEtlV2FpdEZvck11bHRpcGxlT2JqZWN0cygKKyAgICAgICAgICAgICAgICBBUlJBWVNJWkUoV2FpdEV2ZW50cyksIAorICAgICAgICAgICAgICAgIChQVk9JRCopV2FpdEV2ZW50cywgCisgICAgICAgICAgICAgICAgV2FpdEFueSwgCisgICAgICAgICAgICAgICAgRXhlY3V0aXZlLCAKKyAgICAgICAgICAgICAgICBLZXJuZWxNb2RlLCAKKyAgICAgICAgICAgICAgICBGQUxTRSwgCisgICAgICAgICAgICAgICAgTlVMTCwgCisgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgLy8gSWYgaXQgaXMgdGhlIGZpcnN0IGV2ZW50LCB0aGVuIHdlIGFyZSBzaHV0dGluZyBkb3duLiBFeGl0IGxvb3AgYW5kIHRlcm1pbmF0ZSB0aHJlYWQKKyAgICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUVVNfV0FJVF8wKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiUmVjZWl2ZWQgdHVubmVsIHdvcmtlciB0aHJlYWQgc2h1dGRvd24gZXZlbnQuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDEpIC8vIFR1bldvcmtlclRocmVhZEFkZHJlc3NDaGFuZ2VkRXZlbnQgZmlyZWQKKyAgICAgICAgeworICAgICAgICAgICAgUFZPSUQgRGF0YUJ1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2YWx1ZV9kYXRhX3B0ciA9IE5VTEw7CisgICAgICAgICAgICBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUXVlcnkgdGhlIGN1cnJlbnQgYWRkcmVzc2VzCisgICAgICAgICAgICBzdGF0dXMgPSAKKyAgICAgICAgICAgICAgICBvdEx3ZkNtZEdldFByb3AoCisgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICZEYXRhQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9JUFY2X0FERFJFU1NfVEFCTEUsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsCisgICAgICAgICAgICAgICAgICAgICZ2YWx1ZV9kYXRhX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgJnZhbHVlX2RhdGFfbGVuKTsKKyAgICAgICAgICAgIGlmIChOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgYU5vdGlmRmxhZ3MgPSAwOworICAgICAgICAgICAgICAgIG90THdmVHVuQWRkcmVzc2VzVXBkYXRlZChwRmlsdGVyLCB2YWx1ZV9kYXRhX3B0ciwgdmFsdWVfZGF0YV9sZW4sICZhTm90aWZGbGFncyk7CisKKyAgICAgICAgICAgICAgICAvLyBTZW5kIG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgICAgIGlmIChhTm90aWZGbGFncyAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5vdGlmRW50cnkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuTm90aWZUeXBlID0gT1RMV0ZfTk9USUZfU1RBVEVfQ0hBTkdFOworICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuU3RhdGVDaGFuZ2VQYXlsb2FkLkZsYWdzID0gYU5vdGlmRmxhZ3M7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nV2FybmluZyhEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBxdWVyeSBhZGRyZXNzZXMsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChEYXRhQnVmZmVyKSBGSUxURVJfRlJFRV9NRU0oRGF0YUJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiVW5leHBlY3RlZCB3YWl0IHJlc3VsdCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBzVGVybWluYXRlU3lzdGVtVGhyZWFkKFNUQVRVU19TVUNDRVNTKTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmSXJwQ29tbWFuZEhhbmRsZXIoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBQVk9JRCBDb250ZXh0LAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aAorICAgICkKK3sKKyAgICBTUElORUxfSVJQX0NNRF9DT05URVhUKiBDbWRDb250ZXh0ID0gKFNQSU5FTF9JUlBfQ01EX0NPTlRFWFQqKUNvbnRleHQ7CisgICAgUElPX1NUQUNLX0xPQ0FUSU9OICBJcnBTcCA9IElvR2V0Q3VycmVudElycFN0YWNrTG9jYXRpb24oQ21kQ29udGV4dC0+SXJwKTsKKyAgICAKKyAgICBVTE9ORyBJb0NvbnRyb2xDb2RlID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLklvQ29udHJvbENvZGU7CisgICAgUFZPSUQgT3V0QnVmZmVyID0gQ21kQ29udGV4dC0+SXJwLT5Bc3NvY2lhdGVkSXJwLlN5c3RlbUJ1ZmZlcjsKKyAgICBVTE9ORyBPdXRCdWZmZXJMZW5ndGggPSBJcnBTcC0+UGFyYW1ldGVycy5EZXZpY2VJb0NvbnRyb2wuT3V0cHV0QnVmZmVyTGVuZ3RoOworICAgIFVMT05HIE9yaWdPdXRCdWZmZXJMZW5ndGggPSBPdXRCdWZmZXJMZW5ndGg7CisKKyAgICBOVFNUQVRVUyBzdGF0dXM7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBGaWx0ZXIpOworCisgICAgLy8gQ2xlYXIgdGhlIGNhbmNlbCByb3V0aW5lCisgICAgSW9TZXRDYW5jZWxSb3V0aW5lKENtZENvbnRleHQtPklycCwgTlVMTCk7CisgICAgCisgICAgaWYgKERhdGEgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19DQU5DRUxMRUQ7CisgICAgICAgIE91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKENvbW1hbmQgPT0gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTICYmIEtleSA9PSBTUElORUxfUFJPUF9MQVNUX1NUQVRVUykKKyAgICB7CisgICAgICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxfc3RhdHVzID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICAgICAgc3BpbmVsX3NzaXplX3QgcGFja2VkX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgImkiLCAmc3BpbmVsX3N0YXR1cyk7CisgICAgICAgIGlmIChwYWNrZWRfbGVuIDwgMCB8fCAoVUxPTkcpcGFja2VkX2xlbiA+IERhdGFMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKFNwaW5lbFN0YXR1c1RvVGhyZWFkRXJyb3Ioc3BpbmVsX3N0YXR1cykpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKENtZENvbnRleHQtPkhhbmRsZXIpCisgICAgeworICAgICAgICBzdGF0dXMgPSBDbWRDb250ZXh0LT5IYW5kbGVyKEtleSwgRGF0YSwgRGF0YUxlbmd0aCwgT3V0QnVmZmVyLCAmT3V0QnVmZmVyTGVuZ3RoKTsKKyAgICB9CisgICAgZWxzZSAvLyBObyBoYW5kbGVyLCBzbyBubyBvdXRwdXQKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICBPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIC8vIENsZWFyIGFueSBsZWZ0b3ZlciBvdXRwdXQgYnVmZmVyCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA8IE9yaWdPdXRCdWZmZXJMZW5ndGgpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KChQVUNIQVIpT3V0QnVmZmVyICsgT3V0QnVmZmVyTGVuZ3RoLCBPcmlnT3V0QnVmZmVyTGVuZ3RoIC0gT3V0QnVmZmVyTGVuZ3RoKTsKKyAgICB9CisKKyAgICBMb2dWZXJib3NlKERSSVZFUl9JT0NUTCwgIkNvbXBsZXRpbmcgSXJwPSVwLCB3aXRoICUhU1RBVFVTISBmb3IgJXMgKE91dDoldSkiLCAKKyAgICAgICAgICAgICAgICBDbWRDb250ZXh0LT5JcnAsIHN0YXR1cywgSW9DdGxTdHJpbmcoSW9Db250cm9sQ29kZSksIE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICAvLyBDb21wbGV0ZSB0aGUgSVJQCisgICAgQ21kQ29udGV4dC0+SXJwLT5Jb1N0YXR1cy5JbmZvcm1hdGlvbiA9IE91dEJ1ZmZlckxlbmd0aDsKKyAgICBDbWRDb250ZXh0LT5JcnAtPklvU3RhdHVzLlN0YXR1cyA9IHN0YXR1czsKKyAgICBJb0NvbXBsZXRlUmVxdWVzdChDbWRDb250ZXh0LT5JcnAsIElPX05PX0lOQ1JFTUVOVCk7CisKKyAgICBGSUxURVJfRlJFRV9NRU0oQ29udGV4dCk7Cit9CisKK19GdW5jdGlvbl9jbGFzc18oRFJJVkVSX0NBTkNFTCkKK19SZXF1aXJlc19sb2NrX2hlbGRfKF9HbG9iYWxfY2FuY2VsX3NwaW5fbG9ja18pCitfUmVsZWFzZXNfbG9ja18oX0dsb2JhbF9jYW5jZWxfc3Bpbl9sb2NrXykKK19JUlFMX3JlcXVpcmVzX21pbl8oRElTUEFUQ0hfTEVWRUwpCitfSVJRTF9yZXF1aXJlc18oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZlR1bkNhbmNlbElycCgKKyAgICBfSW5vdXRfIHN0cnVjdCBfREVWSUNFX09CSkVDVCAqRGV2aWNlT2JqZWN0LAorICAgIF9Jbm91dF8gX0lSUUxfdXNlc19jYW5jZWxfIHN0cnVjdCBfSVJQICpJcnAKKyAgICApCit7CisgICAgUElPX1NUQUNLX0xPQ0FUSU9OIElycFN0YWNrID0gSW9HZXRDdXJyZW50SXJwU3RhY2tMb2NhdGlvbihJcnApOworICAgIFNQSU5FTF9JUlBfQ01EX0NPTlRFWFQqIENtZENvbnRleHQgPSAoU1BJTkVMX0lSUF9DTURfQ09OVEVYVCopSXJwU3RhY2stPkNvbnRleHQ7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKERldmljZU9iamVjdCk7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0lPQ1RMLCAiSXJwPSVwIiwgSXJwKTsKKworICAgIElvUmVsZWFzZUNhbmNlbFNwaW5Mb2NrKElycC0+Q2FuY2VsSXJxbCk7CisKKyAgICAvLyBUcnkgdG8gY2FuY2VsIHBlbmRpbmcgY29tbWFuZAorICAgIG90THdmQ21kQ2FuY2VsKAorICAgICAgICBDbWRDb250ZXh0LT5wRmlsdGVyLCAKKyAgICAgICAgKElycC0+Q2FuY2VsSXJxbCA9PSBESVNQQVRDSF9MRVZFTCkgPyBUUlVFIDogRkFMU0UsIAorICAgICAgICBDbWRDb250ZXh0LT50aWQpOworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0lPQ1RMKTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQIElycCwKKyAgICBfSW5fb3B0XyBTUElORUxfSVJQX0NNRF9IQU5ETEVSICpIYW5kbGVyLAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gVUxPTkcgTWF4RGF0YUxlbmd0aCwKKyAgICBfSW5fb3B0XyBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgCisgICAgLi4uCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIFNQSU5FTF9JUlBfQ01EX0NPTlRFWFQgKnBDb250ZXh0ID0gTlVMTDsKKyAgICBQSU9fU1RBQ0tfTE9DQVRJT04gSXJwU3RhY2sgPSBJb0dldEN1cnJlbnRJcnBTdGFja0xvY2F0aW9uKElycCk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgc3RydWN0dXJlCisgICAgcENvbnRleHQgPSBGSUxURVJfQUxMT0NfTUVNKHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgc2l6ZW9mKFNQSU5FTF9JUlBfQ01EX0NPTlRFWFQpKTsKKyAgICBpZiAocENvbnRleHQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGFsbG9jYXRlIGlycCBjbWQgY29udGV4dCIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcENvbnRleHQtPnBGaWx0ZXIgPSBwRmlsdGVyOworICAgIHBDb250ZXh0LT5JcnAgPSBJcnA7CisgICAgcENvbnRleHQtPkhhbmRsZXIgPSBIYW5kbGVyOworCisgICAgTlRfQVNTRVJUKElycFN0YWNrLT5Db250ZXh0ID09IE5VTEwpOworICAgIElycFN0YWNrLT5Db250ZXh0ID0gcENvbnRleHQ7CisKKyAgICAvLyBTZXQgdGhlIGNhbmNlbCByb3V0aW5lCisgICAgSW9TZXRDYW5jZWxSb3V0aW5lKElycCwgb3RMd2ZUdW5DYW5jZWxJcnApOworICAgIAorICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBwYWNrX2Zvcm1hdCk7CisgICAgc3RhdHVzID0gCisgICAgICAgIG90THdmQ21kU2VuZEFzeW5jVigKKyAgICAgICAgICAgIHBGaWx0ZXIsIAorICAgICAgICAgICAgb3RMd2ZJcnBDb21tYW5kSGFuZGxlciwgCisgICAgICAgICAgICBwQ29udGV4dCwgCisgICAgICAgICAgICAmcENvbnRleHQtPnRpZCwKKyAgICAgICAgICAgIENvbW1hbmQsIAorICAgICAgICAgICAgS2V5LCAKKyAgICAgICAgICAgIE1heERhdGFMZW5ndGgsIAorICAgICAgICAgICAgcGFja19mb3JtYXQsIAorICAgICAgICAgICAgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgLy8gUmVtb3ZlIHRoZSBoYW5kbGVyIGVudHJ5IGZyb20gdGhlIGxpc3QKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIC8vIENsZWFyIHRoZSBjYW5jZWwgcm91dGluZQorICAgICAgICBJb1NldENhbmNlbFJvdXRpbmUoSXJwLCBOVUxMKTsKKworICAgICAgICBGSUxURVJfRlJFRV9NRU0ocENvbnRleHQpOworICAgIH0KKworZXhpdDoKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkCitvdEx3ZlR1blZhbHVlSXMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBrZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuCisgICAgKQoreworICAgIHVpbnQzMl90IGFOb3RpZkZsYWdzID0gMDsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIlslcF0gcmVjZWl2ZWQgVmFsdWUgZm9yICVzIiwgcEZpbHRlciwgc3BpbmVsX3Byb3Bfa2V5X3RvX2NzdHIoa2V5KSk7CisKKyAgICBpZiAoa2V5ID09IFNQSU5FTF9QUk9QX05FVF9ST0xFKQorICAgIHsKKyAgICAgICAgdWludDhfdCB2YWx1ZTsKKyAgICAgICAgc3BpbmVsX2RhdGF0eXBlX3VucGFjayh2YWx1ZV9kYXRhX3B0ciwgdmFsdWVfZGF0YV9sZW4sIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLCAmdmFsdWUpOworCisgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBuZXcgc3BpbmVsIHJvbGU6ICV1IiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsIHZhbHVlKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgYXJlIGluIHRoZSBjb3JyZWN0IG1lZGlhIGNvbm5lY3Qgc3RhdGUKKyAgICAgICAgb3RMd2ZJbmRpY2F0ZUxpbmtTdGF0ZSgKKyAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICB2YWx1ZSA+IFNQSU5FTF9ORVRfUk9MRV9ERVRBQ0hFRCA/CisgICAgICAgICAgICBNZWRpYUNvbm5lY3RTdGF0ZUNvbm5lY3RlZCA6CisgICAgICAgICAgICBNZWRpYUNvbm5lY3RTdGF0ZURpc2Nvbm5lY3RlZCk7CisKKyAgICAgICAgLy8gU2V0IGZsYWcgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHNlbmQgYSBub3RpZmljYXRpb24KKyAgICAgICAgYU5vdGlmRmxhZ3MgPSBPVF9DSEFOR0VEX1RIUkVBRF9ST0xFOworICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfSVBWNl9MTF9BRERSKQorICAgIHsKKyAgICAgICAgLy8gU2V0IGZsYWcgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHNlbmQgYSBub3RpZmljYXRpb24KKyAgICAgICAgYU5vdGlmRmxhZ3MgPSBPVF9DSEFOR0VEX1RIUkVBRF9MTF9BRERSOworICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfSVBWNl9NTF9BRERSKQorICAgIHsKKyAgICAgICAgLy8gU2V0IGZsYWcgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHNlbmQgYSBub3RpZmljYXRpb24KKyAgICAgICAgYU5vdGlmRmxhZ3MgPSBPVF9DSEFOR0VEX1RIUkVBRF9NTF9BRERSOworICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfTkVUX1BBUlRJVElPTl9JRCkKKyAgICB7CisgICAgICAgIC8vIFNldCBmbGFnIHRvIGluZGljYXRlIHdlIHNob3VsZCBzZW5kIGEgbm90aWZpY2F0aW9uCisgICAgICAgIGFOb3RpZkZsYWdzID0gT1RfQ0hBTkdFRF9USFJFQURfUEFSVElUSU9OX0lEOworICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSKQorICAgIHsKKyAgICAgICAgLy8gU2V0IGZsYWcgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHNlbmQgYSBub3RpZmljYXRpb24KKyAgICAgICAgYU5vdGlmRmxhZ3MgPSBPVF9DSEFOR0VEX1RIUkVBRF9LRVlfU0VRVUVOQ0VfQ09VTlRFUjsKKyAgICB9CisgICAgZWxzZSBpZiAoa2V5ID09IFNQSU5FTF9QUk9QX0lQVjZfQUREUkVTU19UQUJMRSkKKyAgICB7CisgICAgICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPlR1bldvcmtlclRocmVhZEFkZHJlc3NDaGFuZ2VkRXZlbnQsIElPX05PX0lOQ1JFTUVOVCwgRkFMU0UpOworICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfVEhSRUFEX0NISUxEX1RBQkxFKQorICAgIHsKKyAgICAgICAgLy8gVE9ETyAtIFVwZGF0ZSBjYWNoZWQgY2hpbGRyZW4KKyAgICAgICAgLy8gVE9ETyAtIFNlbmQgbm90aWZpY2F0aW9uCisgICAgfQorICAgIGVsc2UgaWYgKGtleSA9PSBTUElORUxfUFJPUF9USFJFQURfT05fTUVTSF9ORVRTKQorICAgIHsKKyAgICAgICAgLy8gVE9ETyAtIFNsYWFjCisKKyAgICAgICAgLy8gU2V0IGZsYWcgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHNlbmQgYSBub3RpZmljYXRpb24KKyAgICAgICAgYU5vdGlmRmxhZ3MgPSBPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBOworICAgIH0KKyAgICBlbHNlIGlmICgoa2V5ID09IFNQSU5FTF9QUk9QX1NUUkVBTV9ORVQpIHx8IChrZXkgPT0gU1BJTkVMX1BST1BfU1RSRUFNX05FVF9JTlNFQ1VSRSkpCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90KiBmcmFtZV9wdHIgPSBOVUxMOworICAgICAgICBVSU5UIGZyYW1lX2xlbiA9IDA7CisgICAgICAgIHNwaW5lbF9zc2l6ZV90IHJldDsKKworICAgICAgICByZXQgPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgdmFsdWVfZGF0YV9wdHIsCisgICAgICAgICAgICB2YWx1ZV9kYXRhX2xlbiwKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1dMRU5fUyBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgJmZyYW1lX3B0ciwKKyAgICAgICAgICAgICZmcmFtZV9sZW4sCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgTlRfQVNTRVJUKHJldCA+IDApOworICAgICAgICBpZiAocmV0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMd2ZUdW5SZWNlaXZlSXA2UGFja2V0KAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgRGlzcGF0Y2hMZXZlbCwKKyAgICAgICAgICAgICAgICAoU1BJTkVMX1BST1BfU1RSRUFNX05FVF9JTlNFQ1VSRSA9PSBrZXkpID8gRkFMU0UgOiBUUlVFLAorICAgICAgICAgICAgICAgIGZyYW1lX3B0ciwKKyAgICAgICAgICAgICAgICBmcmFtZV9sZW4pOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGtleSA9PSBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURSkKKyAgICB7CisgICAgICAgIC8vIFRPRE8gLSBJZiBwZW5kaW5nIHNjYW4sIHNlbmQgbm90aWZpY2F0aW9uIG9mIGNvbXBsZXRpb24KKyAgICB9CisgICAgZWxzZSBpZiAoa2V5ID09IFNQSU5FTF9QUk9QX1NUUkVBTV9SQVcpCisgICAgeworICAgICAgICAvLyBNYXkgYmUgdXNlZCBpbiB0aGUgZnV0dXJlCisgICAgfQorICAgIGVsc2UgaWYgKGtleSA9PSBTUElORUxfUFJPUF9TVFJFQU1fREVCVUcpCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90KiBvdXRwdXQgPSBOVUxMOworICAgICAgICBVSU5UIG91dHB1dF9sZW4gPSAwOworICAgICAgICBzcGluZWxfc3NpemVfdCByZXQ7CisKKyAgICAgICAgcmV0ID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgIHZhbHVlX2RhdGFfcHRyLAorICAgICAgICAgICAgdmFsdWVfZGF0YV9sZW4sCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgJm91dHB1dCwKKyAgICAgICAgICAgICZvdXRwdXRfbGVuKTsKKworICAgICAgICBOVF9BU1NFUlQocmV0ID4gMCk7CisgICAgICAgIGlmIChyZXQgPiAwICYmIG91dHB1dCAmJiBvdXRwdXRfbGVuIDw9IChVSU5UKXJldCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0cm5sZW4oKGNoYXIqKW91dHB1dCwgb3V0cHV0X2xlbikgIT0gb3V0cHV0X2xlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiREVWSUNFOiAlcyIsIChjaGFyKilvdXRwdXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0X2xlbiA8IDEyOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGFyIHN0ck91dHB1dFsxMjhdID0geyAwIH07CisgICAgICAgICAgICAgICAgbWVtY3B5KHN0ck91dHB1dCwgb3V0cHV0LCBvdXRwdXRfbGVuKTsKKyAgICAgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiREVWSUNFOiAlcyIsIHN0ck91dHB1dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZW5kIG5vdGlmaWNhdGlvbgorICAgIGlmIChhTm90aWZGbGFncyAhPSAwKQorICAgIHsKKyAgICAgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICAgICAgaWYgKE5vdGlmRW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuTm90aWZUeXBlID0gT1RMV0ZfTk9USUZfU1RBVEVfQ0hBTkdFOworICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuU3RhdGVDaGFuZ2VQYXlsb2FkLkZsYWdzID0gYU5vdGlmRmxhZ3M7CisKKyAgICAgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkCitvdEx3ZlR1blZhbHVlSW5zZXJ0ZWQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBrZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIlslcF0gcmVjZWl2ZWQgVmFsdWUgSW5zZXJ0ZWQgZm9yICVzIiwgcEZpbHRlciwgc3BpbmVsX3Byb3Bfa2V5X3RvX2NzdHIoa2V5KSk7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBGaWx0ZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoRGlzcGF0Y2hMZXZlbCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUih2YWx1ZV9kYXRhX3B0cik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUih2YWx1ZV9kYXRhX2xlbik7CisKKyAgICBpZiAoa2V5ID09IFNQSU5FTF9QUk9QX01BQ19TQ0FOX0JFQUNPTikKKyAgICB7CisgICAgICAgIFBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZIE5vdGlmRW50cnkgPSBGSUxURVJfQUxMT0NfTk9USUYocEZpbHRlcik7CisgICAgICAgIGlmIChOb3RpZkVudHJ5KQorICAgICAgICB7CisgICAgICAgICAgICBSdGxaZXJvTWVtb3J5KE5vdGlmRW50cnksIHNpemVvZihGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZKSk7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5JbnRlcmZhY2VHdWlkID0gcEZpbHRlci0+SW50ZXJmYWNlR3VpZDsKKyAgICAgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLk5vdGlmVHlwZSA9IE9UTFdGX05PVElGX0FDVElWRV9TQ0FOOworICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuQWN0aXZlU2NhblBheWxvYWQuVmFsaWQgPSBUUlVFOworCisgICAgICAgICAgICBjb25zdCB1aW50OF90ICphRXh0QWRkciA9IE5VTEw7CisgICAgICAgICAgICBjb25zdCB1aW50OF90ICphRXh0UGFuSWQgPSBOVUxMOworICAgICAgICAgICAgY29uc3QgY2hhciAqYU5ldHdvcmtOYW1lID0gTlVMTDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB4cGFuaWRfbGVuID0gMDsKKworICAgICAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgIHZhbHVlX2RhdGFfcHRyLAorICAgICAgICAgICAgICAgIHZhbHVlX2RhdGFfbGVuLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9NQUNfU0NBTl9SRVNVTFRfUygKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMXzgwMl8xNV80X0RBVEFUWVBFX01BQ19TQ0FOX1JFU1VMVF9WMV9TLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfTkVUX0RBVEFUWVBFX01BQ19TQ0FOX1JFU1VMVF9WMV9TCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAmTm90aWZFbnRyeS0+Tm90aWYuQWN0aXZlU2NhblBheWxvYWQuUmVzdWx0cy5tQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAmTm90aWZFbnRyeS0+Tm90aWYuQWN0aXZlU2NhblBheWxvYWQuUmVzdWx0cy5tUnNzaSwKKyAgICAgICAgICAgICAgICAmYUV4dEFkZHIsCisgICAgICAgICAgICAgICAgTlVMTCwgLy8gc2FkZHIgKGRvbid0IGNhcmUpCisgICAgICAgICAgICAgICAgJk5vdGlmRW50cnktPk5vdGlmLkFjdGl2ZVNjYW5QYXlsb2FkLlJlc3VsdHMubVBhbklkLAorICAgICAgICAgICAgICAgICZOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5SZXN1bHRzLm1McWksCisgICAgICAgICAgICAgICAgTlVMTCwgLy8gcHJvdG8gKGRvbid0IGNhcmUpCisgICAgICAgICAgICAgICAgTlVMTCwgLy8gZmxhZ3MgKGRvbid0IGNhcmUpCisgICAgICAgICAgICAgICAgJmFOZXR3b3JrTmFtZSwKKyAgICAgICAgICAgICAgICAmYUV4dFBhbklkLAorICAgICAgICAgICAgICAgICZ4cGFuaWRfbGVuCisgICAgICAgICAgICApICYmCisgICAgICAgICAgICAgICAgYUV4dEFkZHIgIT0gTlVMTCAmJiBhRXh0UGFuSWQgIT0gTlVMTCAmJiBhTmV0d29ya05hbWUgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgIHhwYW5pZF9sZW4gPT0gT1RfRVhUX1BBTl9JRF9TSVpFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lbWNweV9zKE5vdGlmRW50cnktPk5vdGlmLkFjdGl2ZVNjYW5QYXlsb2FkLlJlc3VsdHMubUV4dEFkZHJlc3MubTgsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5SZXN1bHRzLm1FeHRBZGRyZXNzLm04KSwKKyAgICAgICAgICAgICAgICAgICAgYUV4dEFkZHIsIHNpemVvZihvdEV4dEFkZHJlc3MpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHlfcyhOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5SZXN1bHRzLm1FeHRlbmRlZFBhbklkLm04LAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoTm90aWZFbnRyeS0+Tm90aWYuQWN0aXZlU2NhblBheWxvYWQuUmVzdWx0cy5tRXh0ZW5kZWRQYW5JZC5tOCksCisgICAgICAgICAgICAgICAgICAgIGFFeHRQYW5JZCwgc2l6ZW9mKG90RXh0ZW5kZWRQYW5JZCkpOworICAgICAgICAgICAgICAgIHN0cmNweV9zKE5vdGlmRW50cnktPk5vdGlmLkFjdGl2ZVNjYW5QYXlsb2FkLlJlc3VsdHMubU5ldHdvcmtOYW1lLm04LAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoTm90aWZFbnRyeS0+Tm90aWYuQWN0aXZlU2NhblBheWxvYWQuUmVzdWx0cy5tTmV0d29ya05hbWUubTgpLAorICAgICAgICAgICAgICAgICAgICBhTmV0d29ya05hbWUpOworICAgICAgICAgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRklMVEVSX0ZSRUVfTUVNKE5vdGlmRW50cnkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGtleSA9PSBTUElORUxfUFJPUF9NQUNfRU5FUkdZX1NDQU5fUkVTVUxUKQorICAgIHsKKyAgICAgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICAgICAgaWYgKE5vdGlmRW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuTm90aWZUeXBlID0gT1RMV0ZfTk9USUZfRU5FUkdZX1NDQU47CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5WYWxpZCA9IFRSVUU7CisKKyAgICAgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICB2YWx1ZV9kYXRhX3B0ciwKKyAgICAgICAgICAgICAgICB2YWx1ZV9kYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAiQ2MiLAorICAgICAgICAgICAgICAgICZOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5SZXN1bHRzLm1DaGFubmVsLAorICAgICAgICAgICAgICAgICZOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5SZXN1bHRzLm1NYXhSc3NpCisgICAgICAgICAgICApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRklMVEVSX0ZSRUVfTUVNKE5vdGlmRW50cnkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3R1bm5lbC5oIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3R1bm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMTEyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvdHVubmVsLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBmdW5jdGlvbnMgZm9yIHRoZSBvdEx3ZiBGaWx0ZXIgVHVubmVsIG1vZGUuCisgKi8KKworI2lmbmRlZiBfVFVOTkVMX0hfCisjZGVmaW5lIF9UVU5ORUxfSF8KKworLy8KKy8vIEluaXRpYWxpemF0aW9uCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitORElTX1NUQVRVUyAKK290THdmVHVuSW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgCitvdEx3ZlR1blVuaW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKKy8vCisvLyBJcnAgQ29tbWFuZHMKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCBJcnAsCisgICAgX0luX29wdF8gU1BJTkVMX0lSUF9DTURfSEFORExFUiAqSGFuZGxlciwKKyAgICBfSW5fIFVJTlQgQ29tbWFuZCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fIFVMT05HIE1heERhdGFMZW5ndGgsCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIC4uLgorICAgICk7CisKKy8vCisvLyBWYWx1ZSBDYWxsYmFja3MKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkCitvdEx3ZlR1blZhbHVlSXMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBrZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK3ZvaWQKK290THdmVHVuVmFsdWVJbnNlcnRlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IGtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKHZhbHVlX2RhdGFfbGVuKSBjb25zdCB1aW50OF90KiB2YWx1ZV9kYXRhX3B0ciwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgdmFsdWVfZGF0YV9sZW4KKyAgICApOworCisvLyBDYWxsZWQgaW4gcmVzcG9uc2UgdG8gcmVjZWl2aW5nIGEgU3BpbmVsIElwNiBwYWNrZXQgY29tbWFuZAorX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK3ZvaWQgCitvdEx3ZlR1blJlY2VpdmVJcDZQYWNrZXQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBCT09MRUFOIFNlY3VyZSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEJ1ZmZlckxlbmd0aCkgY29uc3QgdWludDhfdCogQnVmZmVyLAorICAgIF9Jbl8gVUlOVCBCdWZmZXJMZW5ndGgKKyAgICApOworCisjZW5kaWYgIC8vX1RVTk5FTF9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290Tm9kZUFwaS9kbGxtYWluLmNwcCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdE5vZGVBcGkvZGxsbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhZTJmNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdE5vZGVBcGkvZGxsbWFpbi5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInByZWNvbXAuaCIKKyNpbmNsdWRlICJkbGxtYWluLnRtaCIKKworQk9PTCAKK19fc3RkY2FsbCAKK0RsbE1haW4oCisgICAgSElOU1RBTkNFIGhpbnN0RGxsLCAKKyAgICBEV09SRCBkd1JlYXNvbiwgCisgICAgTFBWT0lEIC8qIGxwdlJlc2VydmVkICovCisgICAgKQoreworICAgIHN3aXRjaCAoZHdSZWFzb24pCisgICAgeworICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgorICAgICAgICBEaXNhYmxlVGhyZWFkTGlicmFyeUNhbGxzKGhpbnN0RGxsKTsKKyAgICAgICAgV1BQX0lOSVRfVFJBQ0lORyhMIm90Tm9kZUFwaSIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgorICAgICAgICBVbmxvYWQoKTsKKyAgICAgICAgV1BQX0NMRUFOVVAoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgorICAgIGNhc2UgRExMX1RIUkVBRF9ERVRBQ0g6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3ROb2RlQXBpL290Tm9kZUFwaS5jcHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3ROb2RlQXBpL290Tm9kZUFwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxNDEyZAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdE5vZGVBcGkvb3ROb2RlQXBpLmNwcApAQCAtMCwwICsxLDIzNzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwcmVjb21wLmgiCisjaW5jbHVkZSAib3ROb2RlQXBpLnRtaCIKKworI2RlZmluZSBERUJVR19QSU5HIDEKKworI2RlZmluZSBHVUlEX0ZPUk1BVCAieyUwOGxYLSUwNGhYLSUwNGhYLSUwMmhoWCUwMmhoWC0lMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFh9IgorI2RlZmluZSBHVUlEX0FSRyhndWlkKSBndWlkLkRhdGExLCBndWlkLkRhdGEyLCBndWlkLkRhdGEzLCBndWlkLkRhdGE0WzBdLCBndWlkLkRhdGE0WzFdLCBndWlkLkRhdGE0WzJdLCBndWlkLkRhdGE0WzNdLCBndWlkLkRhdGE0WzRdLCBndWlkLkRhdGE0WzVdLCBndWlkLkRhdGE0WzZdLCBndWlkLkRhdGE0WzddCisKK3R5cGVkZWYgRFdPUkQgKCpmcF9vdHZtcE9wZW5IYW5kbGUpKF9PdXRfIEhBTkRMRSogcGhhbmRsZSk7Cit0eXBlZGVmIFZPSUQgICgqZnBfb3R2bXBDbG9zZUhhbmRsZSkoX0luXyBIQU5ETEUgaGFuZGxlKTsKK3R5cGVkZWYgRFdPUkQgKCpmcF9vdHZtcEFkZFZpcnR1YWxCdXMpKF9Jbl8gSEFORExFIGhhbmRsZSwgX0lub3V0XyBVTE9ORyogcEJ1c051bWJlciwgX091dF8gVUxPTkcqIHBJZkluZGV4KTsKK3R5cGVkZWYgRFdPUkQgKCpmcF9vdHZtcFJlbW92ZVZpcnR1YWxCdXMpKF9Jbl8gSEFORExFIGhhbmRsZSwgVUxPTkcgQnVzTnVtYmVyKTsKK3R5cGVkZWYgRFdPUkQgKCpmcF9vdHZtcFNldEFkYXB0ZXJUb3BvbG9neUd1aWQpKF9Jbl8gSEFORExFIGhhbmRsZSwgRFdPUkQgQnVzTnVtYmVyLCBfSW5fIGNvbnN0IEdVSUQqIHBUb3BvbG9neUd1aWQpOwordHlwZWRlZiB2b2lkICgqZnBfb3R2bXBMaXN0ZW5lckNhbGxiYWNrKShfSW5fb3B0XyBQVk9JRCBhQ29udGV4dCwgX0luXyBVTE9ORyBTb3VyY2VJbnRlcmZhY2VJbmRleCwgX0luX3JlYWRzX2J5dGVzXyhGcmFtZUxlbmd0aCkgUFVDSEFSIEZyYW1lQnVmZmVyLCBfSW5fIFVDSEFSIEZyYW1lTGVuZ3RoLCBfSW5fIFVDSEFSIENoYW5uZWwpOwordHlwZWRlZiBIQU5ETEUgKCpmcF9vdHZtcExpc3RlbmVyQ3JlYXRlKShfSW5fIGNvbnN0IEdVSUQqIHBBZGFwdGVyVG9wb2xvZ3lHdWlkKTsKK3R5cGVkZWYgdm9pZCAoKmZwX290dm1wTGlzdGVuZXJEZXN0cm95KShfSW5fb3B0XyBIQU5ETEUgcEhhbmRsZSk7Cit0eXBlZGVmIHZvaWQoKmZwX290dm1wTGlzdGVuZXJSZWdpc3RlcikoX0luXyBIQU5ETEUgcEhhbmRsZSwgX0luX29wdF8gZnBfb3R2bXBMaXN0ZW5lckNhbGxiYWNrIENhbGxiYWNrLCBfSW5fb3B0XyBQVk9JRCBDb250ZXh0KTsKKworZnBfb3R2bXBPcGVuSGFuZGxlICAgICAgICAgICAgICBvdHZtcE9wZW5IYW5kbGUgPSBudWxscHRyOworZnBfb3R2bXBDbG9zZUhhbmRsZSAgICAgICAgICAgICBvdHZtcENsb3NlSGFuZGxlID0gbnVsbHB0cjsKK2ZwX290dm1wQWRkVmlydHVhbEJ1cyAgICAgICAgICAgb3R2bXBBZGRWaXJ0dWFsQnVzID0gbnVsbHB0cjsKK2ZwX290dm1wUmVtb3ZlVmlydHVhbEJ1cyAgICAgICAgb3R2bXBSZW1vdmVWaXJ0dWFsQnVzID0gbnVsbHB0cjsKK2ZwX290dm1wU2V0QWRhcHRlclRvcG9sb2d5R3VpZCAgb3R2bXBTZXRBZGFwdGVyVG9wb2xvZ3lHdWlkID0gbnVsbHB0cjsKK2ZwX290dm1wTGlzdGVuZXJDcmVhdGUgICAgICAgICAgb3R2bXBMaXN0ZW5lckNyZWF0ZSA9IG51bGxwdHI7CitmcF9vdHZtcExpc3RlbmVyRGVzdHJveSAgICAgICAgIG90dm1wTGlzdGVuZXJEZXN0cm95ID0gbnVsbHB0cjsKK2ZwX290dm1wTGlzdGVuZXJSZWdpc3RlciAgICAgICAgb3R2bXBMaXN0ZW5lclJlZ2lzdGVyID0gbnVsbHB0cjsKKworSE1PRFVMRSBnVm1wTW9kdWxlID0gbnVsbHB0cjsKK0hBTkRMRSAgZ1ZtcEhhbmRsZSA9IG51bGxwdHI7CisKK1VMT05HIGdOZXh0QnVzTnVtYmVyID0gMTsKK0dVSUQgZ1RvcG9sb2d5R3VpZCA9IHswfTsKKwordm9sYXRpbGUgTE9ORyBnTnVtYmVyT2ZJbnRlcmZhY2VzID0gMDsKK0NSSVRJQ0FMX1NFQ1RJT04gZ0NTOwordmVjdG9yPG90Tm9kZSo+IGdOb2RlczsKK0hBTkRMRSBnRGV2aWNlQXJyaXZhbEV2ZW50ID0gbnVsbHB0cjsKKworb3RBcGlJbnN0YW5jZSAqZ0FwaUluc3RhbmNlID0gbnVsbHB0cjsKKworX1N1Y2Nlc3NfKHJldHVybiA9PSBPVF9FUlJPUl9OT05FKQorb3RFcnJvciBvdE5vZGVQYXJzZVByZWZpeChjb25zdCBjaGFyICphU3RyUHJlZml4LCBfT3V0XyBvdElwNlByZWZpeCAqYVByZWZpeCkKK3sKKyAgICBjaGFyICpwcmVmaXhMZW5ndGhTdHI7CisgICAgY2hhciAqZW5kcHRyOworCisgICAgaWYgKChwcmVmaXhMZW5ndGhTdHIgPSAoY2hhciopc3RyY2hyKGFTdHJQcmVmaXgsICcvJykpID09IE5VTEwpCisgICAgeworICAgICAgICBwcmludGYoImludmFsaWQgcHJlZml4ICglcykhXHJcbiIsIGFTdHJQcmVmaXgpOworICAgICAgICByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIH0KKworICAgICpwcmVmaXhMZW5ndGhTdHIrKyA9ICdcMCc7CisgICAgCisgICAgYXV0byBlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYVN0clByZWZpeCwgJmFQcmVmaXgtPm1QcmVmaXgpOworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJpcGFkZHIgKCVzKSB0byBzdHJpbmcgZmFpbGVkLCAweCV4IVxyXG4iLCBhU3RyUHJlZml4LCBlcnJvcik7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICBhUHJlZml4LT5tTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RydG9sKHByZWZpeExlbmd0aFN0ciwgJmVuZHB0ciwgMCkpOworICAgIAorICAgIGlmICgqZW5kcHRyICE9ICdcMCcpCisgICAgeworICAgICAgICBwcmludGYoImludmFsaWQgcHJlZml4IGVuZGluZyAoJXMpIVxyXG4iLCBhU3RyUHJlZml4KTsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX1BBUlNFOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit2b2lkIE9UQ0FMTCBvdE5vZGVEZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYUFkZGVkLCBjb25zdCBHVUlEICosIHZvaWQgKikKK3sKKyAgICBpZiAoYUFkZGVkKSBTZXRFdmVudChnRGV2aWNlQXJyaXZhbEV2ZW50KTsKK30KKworb3RBcGlJbnN0YW5jZSogR2V0QXBpSW5zdGFuY2UoKQoreworICAgIGlmIChnQXBpSW5zdGFuY2UgPT0gbnVsbHB0cikKKyAgICB7IAorICAgICAgICBXU0FEQVRBIHdzYURhdGE7CisgICAgICAgIGludCByZXN1bHQgPSBXU0FTdGFydHVwKE1BS0VXT1JEKDIsIDIpLCAmd3NhRGF0YSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxlZCFcclxuIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGdBcGlJbnN0YW5jZSA9IG90QXBpSW5pdCgpOworICAgICAgICBpZiAoZ0FwaUluc3RhbmNlID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50Zigib3RBcGlJbml0IGZhaWxlZCFcclxuIik7CisgICAgICAgICAgICBVbmxvYWQoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKworICAgICAgICBnVm1wTW9kdWxlID0gTG9hZExpYnJhcnkoVEVYVCgib3R2bXBhcGkuZGxsIikpOworICAgICAgICBpZiAoZ1ZtcE1vZHVsZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIkxvYWRMaWJyYXJ5KFwib3R2bXBhcGlcIikgZmFpbGVkIVxyXG4iKTsKKyAgICAgICAgICAgIFVubG9hZCgpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBvdHZtcE9wZW5IYW5kbGUgICAgICAgICAgICAgPSAoZnBfb3R2bXBPcGVuSGFuZGxlKUdldFByb2NBZGRyZXNzKGdWbXBNb2R1bGUsICJvdHZtcE9wZW5IYW5kbGUiKTsKKyAgICAgICAgb3R2bXBDbG9zZUhhbmRsZSAgICAgICAgICAgID0gKGZwX290dm1wQ2xvc2VIYW5kbGUpR2V0UHJvY0FkZHJlc3MoZ1ZtcE1vZHVsZSwgIm90dm1wQ2xvc2VIYW5kbGUiKTsKKyAgICAgICAgb3R2bXBBZGRWaXJ0dWFsQnVzICAgICAgICAgID0gKGZwX290dm1wQWRkVmlydHVhbEJ1cylHZXRQcm9jQWRkcmVzcyhnVm1wTW9kdWxlLCAib3R2bXBBZGRWaXJ0dWFsQnVzIik7CisgICAgICAgIG90dm1wUmVtb3ZlVmlydHVhbEJ1cyAgICAgICA9IChmcF9vdHZtcFJlbW92ZVZpcnR1YWxCdXMpR2V0UHJvY0FkZHJlc3MoZ1ZtcE1vZHVsZSwgIm90dm1wUmVtb3ZlVmlydHVhbEJ1cyIpOworICAgICAgICBvdHZtcFNldEFkYXB0ZXJUb3BvbG9neUd1aWQgPSAoZnBfb3R2bXBTZXRBZGFwdGVyVG9wb2xvZ3lHdWlkKUdldFByb2NBZGRyZXNzKGdWbXBNb2R1bGUsICJvdHZtcFNldEFkYXB0ZXJUb3BvbG9neUd1aWQiKTsKKyAgICAgICAgb3R2bXBMaXN0ZW5lckNyZWF0ZSAgICAgICAgID0gKGZwX290dm1wTGlzdGVuZXJDcmVhdGUpR2V0UHJvY0FkZHJlc3MoZ1ZtcE1vZHVsZSwgIm90dm1wTGlzdGVuZXJDcmVhdGUiKTsKKyAgICAgICAgb3R2bXBMaXN0ZW5lckRlc3Ryb3kgICAgICAgID0gKGZwX290dm1wTGlzdGVuZXJEZXN0cm95KUdldFByb2NBZGRyZXNzKGdWbXBNb2R1bGUsICJvdHZtcExpc3RlbmVyRGVzdHJveSIpOworICAgICAgICBvdHZtcExpc3RlbmVyUmVnaXN0ZXIgICAgICAgPSAoZnBfb3R2bXBMaXN0ZW5lclJlZ2lzdGVyKUdldFByb2NBZGRyZXNzKGdWbXBNb2R1bGUsICJvdHZtcExpc3RlbmVyUmVnaXN0ZXIiKTsKKworICAgICAgICBhc3NlcnQob3R2bXBPcGVuSGFuZGxlKTsKKyAgICAgICAgYXNzZXJ0KG90dm1wQ2xvc2VIYW5kbGUpOworICAgICAgICBhc3NlcnQob3R2bXBBZGRWaXJ0dWFsQnVzKTsKKyAgICAgICAgYXNzZXJ0KG90dm1wUmVtb3ZlVmlydHVhbEJ1cyk7CisgICAgICAgIGFzc2VydChvdHZtcFNldEFkYXB0ZXJUb3BvbG9neUd1aWQpOworICAgICAgICBhc3NlcnQob3R2bXBMaXN0ZW5lckNyZWF0ZSk7CisgICAgICAgIGFzc2VydChvdHZtcExpc3RlbmVyRGVzdHJveSk7CisgICAgICAgIGFzc2VydChvdHZtcExpc3RlbmVyUmVnaXN0ZXIpOworCisgICAgICAgIGlmIChvdHZtcE9wZW5IYW5kbGUgPT0gbnVsbHB0cikgcHJpbnRmKCJvdHZtcE9wZW5IYW5kbGUgaXMgbnVsbCFcclxuIik7CisgICAgICAgIGlmIChvdHZtcENsb3NlSGFuZGxlID09IG51bGxwdHIpIHByaW50Zigib3R2bXBDbG9zZUhhbmRsZSBpcyBudWxsIVxyXG4iKTsKKyAgICAgICAgaWYgKG90dm1wQWRkVmlydHVhbEJ1cyA9PSBudWxscHRyKSBwcmludGYoIm90dm1wQWRkVmlydHVhbEJ1cyBpcyBudWxsIVxyXG4iKTsKKyAgICAgICAgaWYgKG90dm1wUmVtb3ZlVmlydHVhbEJ1cyA9PSBudWxscHRyKSBwcmludGYoIm90dm1wUmVtb3ZlVmlydHVhbEJ1cyBpcyBudWxsIVxyXG4iKTsKKyAgICAgICAgaWYgKG90dm1wU2V0QWRhcHRlclRvcG9sb2d5R3VpZCA9PSBudWxscHRyKSBwcmludGYoIm90dm1wU2V0QWRhcHRlclRvcG9sb2d5R3VpZCBpcyBudWxsIVxyXG4iKTsKKyAgICAgICAgaWYgKG90dm1wTGlzdGVuZXJDcmVhdGUgPT0gbnVsbHB0cikgcHJpbnRmKCJvdHZtcExpc3RlbmVyQ3JlYXRlIGlzIG51bGwhXHJcbiIpOworICAgICAgICBpZiAob3R2bXBMaXN0ZW5lckRlc3Ryb3kgPT0gbnVsbHB0cikgcHJpbnRmKCJvdHZtcExpc3RlbmVyRGVzdHJveSBpcyBudWxsIVxyXG4iKTsKKyAgICAgICAgaWYgKG90dm1wTGlzdGVuZXJSZWdpc3RlciA9PSBudWxscHRyKSBwcmludGYoIm90dm1wTGlzdGVuZXJSZWdpc3RlciBpcyBudWxsIVxyXG4iKTsKKworICAgICAgICAoVk9JRClvdHZtcE9wZW5IYW5kbGUoJmdWbXBIYW5kbGUpOworICAgICAgICBpZiAoZ1ZtcEhhbmRsZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIm90dm1wT3BlbkhhbmRsZSBmYWlsZWQhXHJcbiIpOworICAgICAgICAgICAgVW5sb2FkKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc3RhdHVzID0gVXVpZENyZWF0ZSgmZ1RvcG9sb2d5R3VpZCk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiVXVpZENyZWF0ZSBmYWlsZWQsIDB4JXghXHJcbiIsIHN0YXR1cyk7CisgICAgICAgICAgICBVbmxvYWQoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBvZmZzZXQgPSBnZXRlbnYoIklOU1RBTkNFIik7CisgICAgICAgIGlmIChvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdOZXh0QnVzTnVtYmVyID0gKGF0b2kob2Zmc2V0KSAqIDMyKSAlIDEwMDAgKyAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3JhbmQoZ1RvcG9sb2d5R3VpZC5EYXRhMSk7CisgICAgICAgICAgICBnTmV4dEJ1c051bWJlciA9IHJhbmQoKSAlIDEwMDAgKyAxOworICAgICAgICB9CisKKyAgICAgICAgZ0RldmljZUFycml2YWxFdmVudCA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIEZBTFNFLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICAgICAgLy8gU2V0IGNhbGxiYWNrIHRvIHdhaXQgZm9yIGRldmljZSBhcnJpdmFsIG5vdGlmaWNhdGlvbnMKKyAgICAgICAgb3RTZXREZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkQ2FsbGJhY2soZ0FwaUluc3RhbmNlLCBvdE5vZGVEZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkLCBudWxscHRyKTsKKworICAgICAgICBwcmludGYoIk5ldyB0b3BvbG9neSBjcmVhdGVkXHJcbiIgR1VJRF9GT1JNQVQgIiBbJWRdXHJcblxyXG4iLCBHVUlEX0FSRyhnVG9wb2xvZ3lHdWlkKSwgZ05leHRCdXNOdW1iZXIpOworICAgIH0KKworICAgIEludGVybG9ja2VkSW5jcmVtZW50KCZnTnVtYmVyT2ZJbnRlcmZhY2VzKTsKKworICAgIHJldHVybiBnQXBpSW5zdGFuY2U7Cit9CisKK3ZvaWQgUmVsZWFzZUFwaUluc3RhbmNlKCkKK3sKKyAgICBpZiAoMCA9PSBJbnRlcmxvY2tlZERlY3JlbWVudCgmZ051bWJlck9mSW50ZXJmYWNlcykpCisgICAgeworICAgICAgICAvLyBVbmluaXRpYWxpemUgZXZlcnl0aGluZyBlbHNlIGlmIHRoaXMgaXMgdGhlIGxhc3QgcmVmCisgICAgICAgIFVubG9hZCgpOworICAgIH0KK30KKwordm9pZCBVbmxvYWQoKQoreworICAgIGlmIChnTnVtYmVyT2ZJbnRlcmZhY2VzICE9IDApCisgICAgeworICAgICAgICBwcmludGYoIlVubG9hZGVkIHdpdGggJWQgb3V0c3RhbmRpbmcgbm9kZXMhXHJcbiIsIGdOdW1iZXJPZkludGVyZmFjZXMpOworICAgIH0KKworICAgIGlmIChnQXBpSW5zdGFuY2UpCisgICAgeworICAgICAgICBvdFNldERldmljZUF2YWlsYWJpbGl0eUNoYW5nZWRDYWxsYmFjayhnQXBpSW5zdGFuY2UsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgIGlmIChnRGV2aWNlQXJyaXZhbEV2ZW50ICE9IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKGdEZXZpY2VBcnJpdmFsRXZlbnQpOworICAgICAgICAgICAgZ0RldmljZUFycml2YWxFdmVudCA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ1ZtcEhhbmRsZSAhPSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBvdHZtcENsb3NlSGFuZGxlKGdWbXBIYW5kbGUpOworICAgICAgICAgICAgZ1ZtcEhhbmRsZSA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ1ZtcE1vZHVsZSAhPSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBGcmVlTGlicmFyeShnVm1wTW9kdWxlKTsKKyAgICAgICAgICAgIGdWbXBNb2R1bGUgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZnQ1MpOworCisgICAgICAgIG90QXBpRmluYWxpemUoZ0FwaUluc3RhbmNlKTsKKyAgICAgICAgZ0FwaUluc3RhbmNlID0gbnVsbHB0cjsKKworICAgICAgICBXU0FDbGVhbnVwKCk7CisKKyAgICAgICAgcHJpbnRmKCJUb3BvbG9neSBkZXN0cm95ZWRcclxuIik7CisgICAgfQorfQorCitpbnQgSGV4MkJpbihjb25zdCBjaGFyICphSGV4LCB1aW50OF90ICphQmluLCB1aW50MTZfdCBhQmluTGVuZ3RoKQoreworICAgIHNpemVfdCBoZXhMZW5ndGggPSBzdHJsZW4oYUhleCk7CisgICAgY29uc3QgY2hhciAqaGV4RW5kID0gYUhleCArIGhleExlbmd0aDsKKyAgICB1aW50OF90ICpjdXIgPSBhQmluOworICAgIHVpbnQ4X3QgbnVtQ2hhcnMgPSBoZXhMZW5ndGggJiAxOworICAgIHVpbnQ4X3QgYnl0ZSA9IDA7CisKKyAgICBpZiAoKGhleExlbmd0aCArIDEpIC8gMiA+IGFCaW5MZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgd2hpbGUgKGFIZXggPCBoZXhFbmQpCisgICAgeworICAgICAgICBpZiAoJ0EnIDw9ICphSGV4ICYmICphSGV4IDw9ICdGJykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAxMCArICgqYUhleCAtICdBJyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoJ2EnIDw9ICphSGV4ICYmICphSGV4IDw9ICdmJykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAxMCArICgqYUhleCAtICdhJyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoJzAnIDw9ICphSGV4ICYmICphSGV4IDw9ICc5JykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAqYUhleCAtICcwJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGFIZXgrKzsKKyAgICAgICAgbnVtQ2hhcnMrKzsKKworICAgICAgICBpZiAobnVtQ2hhcnMgPj0gMikKKyAgICAgICAgeworICAgICAgICAgICAgbnVtQ2hhcnMgPSAwOworICAgICAgICAgICAgKmN1cisrID0gYnl0ZTsKKyAgICAgICAgICAgIGJ5dGUgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSA8PD0gNDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGN1ciAtIGFCaW4pOworfQorCit0eXBlZGVmIHN0cnVjdCBvdFBpbmdIYW5kbGVyCit7CisgICAgb3ROb2RlKiAgICAgICAgIG1QYXJlbnROb2RlOworICAgIGJvb2wgICAgICAgICAgICBtQWN0aXZlOworICAgIG90SXA2QWRkcmVzcyAgICBtQWRkcmVzczsKKyAgICBTT0NLRVQgICAgICAgICAgbVNvY2tldDsKKyAgICBDSEFSICAgICAgICAgICAgbVJlY3ZCdWZmZXJbMTUwMF07CisgICAgV1NBT1ZFUkxBUFBFRCAgIG1PdmVybGFwcGVkOworICAgIFBUUF9XQUlUICAgICAgICBtVGhyZWFkcG9vbFdhaXQ7CisgICAgV1NBQlVGICAgICAgICAgIG1XU0FSZWN2QnVmZmVyOworICAgIERXT1JEICAgICAgICAgICBtTnVtQnl0ZXNSZWNlaXZlZDsKKyAgICBTT0NLQUREUl9JTjYgICAgbVNvdXJjZUFkZHI2OworICAgIGludCAgICAgICAgICAgICBtU291cmNlQWRkcjZMZW47CisKK30gb3RQaW5nSGFuZGxlcjsKKwordHlwZWRlZiBzdHJ1Y3Qgb3ROb2RlCit7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgbUlkOworICAgIERXT1JEICAgICAgICAgICAgICAgICAgIG1CdXNJbmRleDsKKyAgICBEV09SRCAgICAgICAgICAgICAgICAgICBtSW50ZXJmYWNlSW5kZXg7CisgICAgb3RJbnN0YW5jZSogICAgICAgICAgICAgbUluc3RhbmNlOworICAgIEhBTkRMRSAgICAgICAgICAgICAgICAgIG1FbmVyZ3lTY2FuRXZlbnQ7CisgICAgSEFORExFICAgICAgICAgICAgICAgICAgbVBhbklkQ29uZmxpY3RFdmVudDsKKyAgICBDUklUSUNBTF9TRUNUSU9OICAgICAgICBtQ1M7CisgICAgdmVjdG9yPG90UGluZ0hhbmRsZXIqPiAgbVBpbmdIYW5kbGVyczsKKyAgICB2ZWN0b3I8dm9pZCo+ICAgICAgICAgICBtTWVtb3J5VG9GcmVlOworfSBvdE5vZGU7CisKK2NvbnN0IGNoYXIqIG90RGV2aWNlUm9sZVRvU3RyaW5nKG90RGV2aWNlUm9sZSByb2xlKQoreworICAgIHN3aXRjaCAocm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDogcmV0dXJuICJkaXNhYmxlZCI7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDogcmV0dXJuICJkZXRhY2hlZCI7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDogICAgcmV0dXJuICJjaGlsZCI7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6ICAgcmV0dXJuICJyb3V0ZXIiOworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOiAgIHJldHVybiAibGVhZGVyIjsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImludmFsaWQiOworICAgIH0KK30KKworY29uc3QgVVNIT1JUIENlcnRpZmljYXRpb25QaW5nUG9ydCA9IGh0b25zKDEyMzQ1KTsKKworY29uc3QgSU42X0FERFIgTGlua0xvY2FsQWxsTm9kZXNBZGRyZXNzICAgID0geyB7IDB4RkYsIDB4MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MDEgfSB9OworY29uc3QgSU42X0FERFIgTGlua0xvY2FsQWxsUm91dGVyc0FkZHJlc3MgID0geyB7IDB4RkYsIDB4MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MDIgfSB9OworY29uc3QgSU42X0FERFIgUmVhbG1Mb2NhbEFsbE5vZGVzQWRkcmVzcyAgID0geyB7IDB4RkYsIDB4MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MDEgfSB9OworY29uc3QgSU42X0FERFIgUmVhbG1Mb2NhbEFsbFJvdXRlcnNBZGRyZXNzID0geyB7IDB4RkYsIDB4MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MDIgfSB9OworY29uc3QgSU42X0FERFIgUmVhbG1Mb2NhbFNwZWNpYWxBZGRyZXNzICAgID0geyB7IDB4RkYsIDB4MzMsIDAsIDB4NDAsIDB4ZmQsIDB4ZGUsIDB4YWQsIDAsIDB4YmUsIDB4ZWYsIDAsIDAsIDAsIDAsIDAsIDB4MDEgfSB9OworCit2b2lkCitDQUxMQkFDSyAKK1BpbmdIYW5kbGVyUmVjdkNhbGxiYWNrKAorICAgIF9Jbm91dF8gICAgIFBUUF9DQUxMQkFDS19JTlNUQU5DRSAvKiBJbnN0YW5jZSAqLywKKyAgICBfSW5vdXRfb3B0XyBQVk9JRCAgICAgICAgICAgICAgICAgQ29udGV4dCwKKyAgICBfSW5vdXRfICAgICBQVFBfV0FJVCAgICAgICAgICAgICAgLyogV2FpdCAqLywKKyAgICBfSW5fICAgICAgICBUUF9XQUlUX1JFU1VMVCAgICAgICAgLyogV2FpdFJlc3VsdCAqLworICAgICkKK3sKKyAgICBvdFBpbmdIYW5kbGVyICphUGluZ0hhbmRsZXIgPSAob3RQaW5nSGFuZGxlciopQ29udGV4dDsKKyAgICBpZiAoYVBpbmdIYW5kbGVyID09IE5VTEwpIHJldHVybjsKKyAgICAKKyAgICAvLyBHZXQgdGhlIHJlc3VsdCBvZiB0aGUgSU8gb3BlcmF0aW9uCisgICAgRFdPUkQgY2JUcmFuc2ZlcnJlZCA9IDA7CisgICAgRFdPUkQgZHdGbGFncyA9IDA7CisgICAgaWYgKCFXU0FHZXRPdmVybGFwcGVkUmVzdWx0KAorICAgICAgICAgICAgYVBpbmdIYW5kbGVyLT5tU29ja2V0LAorICAgICAgICAgICAgJmFQaW5nSGFuZGxlci0+bU92ZXJsYXBwZWQsCisgICAgICAgICAgICAmY2JUcmFuc2ZlcnJlZCwKKyAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAmZHdGbGFncykpCisgICAgeworICAgICAgICBpbnQgcmVzdWx0ID0gV1NBR2V0TGFzdEVycm9yKCk7CisgICAgICAgIC8vIE9ubHkgbG9nIGlmIHdlIGFyZSBzaHV0dGluZyBkb3duCisgICAgICAgIGlmIChyZXN1bHQgIT0gV1NBRU5PVFNPQ0sgJiYgcmVzdWx0ICE9IEVSUk9SX09QRVJBVElPTl9BQk9SVEVEKQorICAgICAgICAgICAgcHJpbnRmKCJXU0FHZXRPdmVybGFwcGVkUmVzdWx0IGZhaWxlZCwgMHgleFxyXG4iLCByZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IHJlc3VsdDsKKworICAgIC8vIE1ha2Ugc3VyZSBpdCBkaWRuJ3QgY29tZSBmcm9tIG91ciBhZGRyZXNzCisgICAgaWYgKG1lbWNtcCgmYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjYuc2luNl9hZGRyLCAmYVBpbmdIYW5kbGVyLT5tQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSkgIT0gMCkKKyAgICB7CisgICAgICAgIGJvb2wgc2hvdWxkUmVwbHkgPSB0cnVlOworCisgICAgICAgIC8vIFRPRE8gLSBGaXggdGhpcyBoYWNrLi4uCisgICAgICAgIGF1dG8gUmVjdkRlc3QgPSAoY29uc3Qgb3RJcDZBZGRyZXNzKilhUGluZ0hhbmRsZXItPm1SZWN2QnVmZmVyOworICAgICAgICBpZiAobWVtY21wKFJlY3ZEZXN0LCAmTGlua0xvY2FsQWxsUm91dGVyc0FkZHJlc3MsIHNpemVvZihJTjZfQUREUikpID09IDAgfHwKKyAgICAgICAgICAgIG1lbWNtcChSZWN2RGVzdCwgJlJlYWxtTG9jYWxBbGxSb3V0ZXJzQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBSb2xlID0gb3RUaHJlYWRHZXREZXZpY2VSb2xlKGFQaW5nSGFuZGxlci0+bVBhcmVudE5vZGUtPm1JbnN0YW5jZSk7CisgICAgICAgICAgICBpZiAoUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIgJiYgUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIpCisgICAgICAgICAgICAgICAgc2hvdWxkUmVwbHkgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRSZXBseSkKKyAgICAgICAgeworI2lmIERFQlVHX1BJTkcKKyAgICAgICAgICAgIENIQVIgc3pJcEFkZHJlc3NbNDZdID0geyAwIH07CisgICAgICAgICAgICBSdGxJcHY2QWRkcmVzc1RvU3RyaW5nQSgmYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjYuc2luNl9hZGRyLCBzeklwQWRkcmVzcyk7CisgICAgICAgICAgICBwcmludGYoIiVkOiByZWNlaXZlZCBwaW5nICglZCBieXRlcykgZnJvbSAlc1xyXG4iLCBhUGluZ0hhbmRsZXItPm1QYXJlbnROb2RlLT5tSWQsIGNiVHJhbnNmZXJyZWQsIHN6SXBBZGRyZXNzKTsKKyNlbmRpZgorCisgICAgICAgICAgICAvLyBTZW5kIHRoZSByZWNlaXZlZCBkYXRhIGJhY2sKKyAgICAgICAgICAgIHJlc3VsdCA9IAorICAgICAgICAgICAgICAgIHNlbmR0bygKKyAgICAgICAgICAgICAgICAgICAgYVBpbmdIYW5kbGVyLT5tU29ja2V0LCAKKyAgICAgICAgICAgICAgICAgICAgYVBpbmdIYW5kbGVyLT5tUmVjdkJ1ZmZlciwgY2JUcmFuc2ZlcnJlZCwgMCwgCisgICAgICAgICAgICAgICAgICAgIChTT0NLQUREUiopJmFQaW5nSGFuZGxlci0+bVNvdXJjZUFkZHI2LCBhUGluZ0hhbmRsZXItPm1Tb3VyY2VBZGRyNkxlbgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJzZW5kdG8gZmFpbGVkLCAweCV4XHJcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBTdGFydCB0aGUgb3Rwb29sIHdhaXRpbmcgb24gdGhlIG92ZXJsYXBwZWQgZXZlbnQKKyAgICBTZXRUaHJlYWRwb29sV2FpdChhUGluZ0hhbmRsZXItPm1UaHJlYWRwb29sV2FpdCwgYVBpbmdIYW5kbGVyLT5tT3ZlcmxhcHBlZC5oRXZlbnQsIG51bGxwdHIpOworCisgICAgLy8gUG9zdCBhbm90aGVyIHJlY3YKKyAgICBkd0ZsYWdzID0gTVNHX1BBUlRJQUw7CisgICAgYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjZMZW4gPSBzaXplb2YoYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjYpOworICAgIHJlc3VsdCA9IAorICAgICAgICBXU0FSZWN2RnJvbSgKKyAgICAgICAgICAgIGFQaW5nSGFuZGxlci0+bVNvY2tldCwgCisgICAgICAgICAgICAmYVBpbmdIYW5kbGVyLT5tV1NBUmVjdkJ1ZmZlciwgMSwgJmFQaW5nSGFuZGxlci0+bU51bUJ5dGVzUmVjZWl2ZWQsICZkd0ZsYWdzLCAKKyAgICAgICAgICAgIChTT0NLQUREUiopJmFQaW5nSGFuZGxlci0+bVNvdXJjZUFkZHI2LCAmYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjZMZW4sIAorICAgICAgICAgICAgJmFQaW5nSGFuZGxlci0+bU92ZXJsYXBwZWQsIG51bGxwdHIKKyAgICAgICAgICAgICk7CisgICAgaWYgKHJlc3VsdCAhPSBTT0NLRVRfRVJST1IpCisgICAgeworICAgICAgICAvLyBOb3QgcGVuZGluZywgc28gbWFudWFsbHkgdHJpZ2dlciB0aGUgZXZlbnQgZm9yIHRoZSBUaHJlYWRwb29sIHRvIGV4ZWN1dGUKKyAgICAgICAgU2V0RXZlbnQoYVBpbmdIYW5kbGVyLT5tT3ZlcmxhcHBlZC5oRXZlbnQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBXU0FfSU9fUEVORElORykKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJXU0FSZWN2RnJvbSBmYWlsZWQsIDB4JXhcclxuIiwgcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBJc01lc2hMb2NhbEVJRChvdE5vZGUgKmFOb2RlLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKQoreworICAgIGF1dG8gTUxfRUlEID0gb3RUaHJlYWRHZXRNZXNoTG9jYWxFaWQoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgaWYgKE1MX0VJRCA9PSBudWxscHRyKSByZXR1cm4gZmFsc2U7CisgICAgYm9vbCByZXN1bHQgPSBtZW1jbXAoTUxfRUlELT5tRmllbGRzLm04LCBhQWRkcmVzcy0+bUZpZWxkcy5tOCwgc2l6ZW9mKG90SXA2QWRkcmVzcykpID09IDA7CisgICAgb3RGcmVlTWVtb3J5KE1MX0VJRCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBBZGRQaW5nSGFuZGxlcihvdE5vZGUgKmFOb2RlLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKQoreworICAgIG90UGluZ0hhbmRsZXIgKmFQaW5nSGFuZGxlciA9IG5ldyBvdFBpbmdIYW5kbGVyKCk7CisgICAgYVBpbmdIYW5kbGVyLT5tUGFyZW50Tm9kZSA9IGFOb2RlOworICAgIGFQaW5nSGFuZGxlci0+bUFkZHJlc3MgPSAqYUFkZHJlc3M7CisgICAgYVBpbmdIYW5kbGVyLT5tU29ja2V0ID0gSU5WQUxJRF9TT0NLRVQ7CisgICAgYVBpbmdIYW5kbGVyLT5tT3ZlcmxhcHBlZC5oRXZlbnQgPSBDcmVhdGVFdmVudChudWxscHRyLCBGQUxTRSwgRkFMU0UsIG51bGxwdHIpOworICAgIGFQaW5nSGFuZGxlci0+bVdTQVJlY3ZCdWZmZXIgPSB7IDE1MDAsIGFQaW5nSGFuZGxlci0+bVJlY3ZCdWZmZXIgfTsKKyAgICBhUGluZ0hhbmRsZXItPm1BY3RpdmUgPSB0cnVlOworICAgIGFQaW5nSGFuZGxlci0+bVRocmVhZHBvb2xXYWl0ID0gCisgICAgICAgIENyZWF0ZVRocmVhZHBvb2xXYWl0KAorICAgICAgICAgICAgUGluZ0hhbmRsZXJSZWN2Q2FsbGJhY2ssCisgICAgICAgICAgICBhUGluZ0hhbmRsZXIsCisgICAgICAgICAgICBudWxscHRyCisgICAgICAgICAgICApOworICAgIAorICAgIFNPQ0tBRERSX0lONiBhZGRyNiA9IHsgMCB9OworICAgIGFkZHI2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgYWRkcjYuc2luNl9wb3J0ID0gQ2VydGlmaWNhdGlvblBpbmdQb3J0OworICAgIG1lbWNweSgmYWRkcjYuc2luNl9hZGRyLCBhQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSk7CisgICAgCisjaWYgREVCVUdfUElORworICAgIENIQVIgc3pJcEFkZHJlc3NbNDZdID0geyAwIH07CisgICAgUnRsSXB2NkFkZHJlc3NUb1N0cmluZ0EoJmFkZHI2LnNpbjZfYWRkciwgc3pJcEFkZHJlc3MpOworCisgICAgcHJpbnRmKCIlZDogc3RhcnRpbmcgcGluZyBoYW5kbGVyIGZvciAlc1xyXG4iLCBhTm9kZS0+bUlkLCBzeklwQWRkcmVzcyk7CisjZW5kaWYKKworICAgIC8vIFB1dCB0aGUgY3VycmVudCB0aGVhZCBpbiB0aGUgY29ycmVjdCBjb21wYXJ0bWVudAorICAgIGJvb2wgUmV2ZXJ0Q29tcGFydG1lbnRPbkV4aXQgPSBmYWxzZTsKKyAgICBVTE9ORyBPcmlnaW5hbENvbXBhcnRtZW50SUQgPSBHZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZCgpOworICAgIGlmIChPcmlnaW5hbENvbXBhcnRtZW50SUQgIT0gb3RHZXRDb21wYXJ0bWVudElkKGFOb2RlLT5tSW5zdGFuY2UpKQorICAgIHsKKyAgICAgICAgRFdPUkQgZHdFcnJvciA9IEVSUk9SX1NVQ0NFU1M7CisgICAgICAgIGlmICgoZHdFcnJvciA9IFNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKG90R2V0Q29tcGFydG1lbnRJZChhTm9kZS0+bUluc3RhbmNlKSkpICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiU2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQgZmFpbGVkLCAweCV4XHJcbiIsIGR3RXJyb3IpOworICAgICAgICB9CisgICAgICAgIFJldmVydENvbXBhcnRtZW50T25FeGl0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0OworICAgIERXT1JEIEZsYWcgPSBGQUxTRTsKKyAgICBJUFY2X01SRVEgTUNSZWc7CisgICAgTUNSZWcuaXB2Nm1yX2ludGVyZmFjZSA9IG90R2V0RGV2aWNlSWZJbmRleChhTm9kZS0+bUluc3RhbmNlKTsKKworICAgIGlmIChhUGluZ0hhbmRsZXItPm1PdmVybGFwcGVkLmhFdmVudCA9PSBudWxscHRyIHx8CisgICAgICAgIGFQaW5nSGFuZGxlci0+bVRocmVhZHBvb2xXYWl0ID09IG51bGxwdHIpCisgICAgeworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIAorICAgIC8vIENyZWF0ZSB0aGUgc29ja2V0CisgICAgYVBpbmdIYW5kbGVyLT5tU29ja2V0ID0gV1NBU29ja2V0VyhBRl9JTkVUNiwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsIE5VTEwsIDAsIFdTQV9GTEFHX09WRVJMQVBQRUQpOworICAgIGlmIChhUGluZ0hhbmRsZXItPm1Tb2NrZXQgPT0gSU5WQUxJRF9TT0NLRVQpCisgICAgeworICAgICAgICBwcmludGYoIldTQVNvY2tldCBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gQmluZCB0aGUgc29ja2V0IHRvIHRoZSBhZGRyZXNzCisgICAgcmVzdWx0ID0gYmluZChhUGluZ0hhbmRsZXItPm1Tb2NrZXQsIChzb2NrYWRkciopJmFkZHI2LCBzaXplb2YoYWRkcjYpKTsKKyAgICBpZiAocmVzdWx0ID09IFNPQ0tFVF9FUlJPUikKKyAgICB7CisgICAgICAgIHByaW50ZigiYmluZCBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIAorICAgIC8vIEJsb2NrIG91ciBvd24gc2VuZHMgZnJvbSBnZXR0aW5nIGNhbGxlZCBhcyByZWNlaXZlcworICAgIHJlc3VsdCA9IHNldHNvY2tvcHQoYVBpbmdIYW5kbGVyLT5tU29ja2V0LCBJUFBST1RPX0lQVjYsIElQVjZfTVVMVElDQVNUX0xPT1AsIChjaGFyICopJkZsYWcsIHNpemVvZihGbGFnKSk7CisgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgeworICAgICAgICBwcmludGYoInNldHNvY2tvcHQgKElQVjZfTVVMVElDQVNUX0xPT1ApIGZhaWxlZCwgMHgleFxyXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBCaW5kIHRvIHRoZSBtdWx0aWNhc3QgYWRkcmVzc2VzCisgICAgaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmYWRkcjYuc2luNl9hZGRyKSkKKyAgICB7CisgICAgICAgIC8vIEFsbCBub2RlcyBhZGRyZXNzCisgICAgICAgIE1DUmVnLmlwdjZtcl9tdWx0aWFkZHIgPSBMaW5rTG9jYWxBbGxOb2Rlc0FkZHJlc3M7CisgICAgICAgIHJlc3VsdCA9IHNldHNvY2tvcHQoYVBpbmdIYW5kbGVyLT5tU29ja2V0LCBJUFBST1RPX0lQVjYsIElQVjZfQUREX01FTUJFUlNISVAsIChjaGFyICopJk1DUmVnLCBzaXplb2YoTUNSZWcpKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50Zigic2V0c29ja29wdCAoSVBWNl9BRERfTUVNQkVSU0hJUCkgZmFpbGVkLCAweCV4XHJcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCByb3V0ZXJzIGFkZHJlc3MKKyAgICAgICAgTUNSZWcuaXB2Nm1yX211bHRpYWRkciA9IExpbmtMb2NhbEFsbFJvdXRlcnNBZGRyZXNzOworICAgICAgICByZXN1bHQgPSBzZXRzb2Nrb3B0KGFQaW5nSGFuZGxlci0+bVNvY2tldCwgSVBQUk9UT19JUFY2LCBJUFY2X0FERF9NRU1CRVJTSElQLCAoY2hhciAqKSZNQ1JlZywgc2l6ZW9mKE1DUmVnKSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gU09DS0VUX0VSUk9SKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoInNldHNvY2tvcHQgKElQVjZfQUREX01FTUJFUlNISVApIGZhaWxlZCwgMHgleFxyXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoSXNNZXNoTG9jYWxFSUQoYU5vZGUsIGFBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIC8vIEFsbCBub2RlcyBhZGRyZXNzCisgICAgICAgIE1DUmVnLmlwdjZtcl9tdWx0aWFkZHIgPSBSZWFsbUxvY2FsQWxsTm9kZXNBZGRyZXNzOworICAgICAgICByZXN1bHQgPSBzZXRzb2Nrb3B0KGFQaW5nSGFuZGxlci0+bVNvY2tldCwgSVBQUk9UT19JUFY2LCBJUFY2X0FERF9NRU1CRVJTSElQLCAoY2hhciAqKSZNQ1JlZywgc2l6ZW9mKE1DUmVnKSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gU09DS0VUX0VSUk9SKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoInNldHNvY2tvcHQgKElQVjZfQUREX01FTUJFUlNISVApIGZhaWxlZCwgMHgleFxyXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFsbCByb3V0ZXJzIGFkZHJlc3MKKyAgICAgICAgTUNSZWcuaXB2Nm1yX211bHRpYWRkciA9IFJlYWxtTG9jYWxBbGxSb3V0ZXJzQWRkcmVzczsKKyAgICAgICAgcmVzdWx0ID0gc2V0c29ja29wdChhUGluZ0hhbmRsZXItPm1Tb2NrZXQsIElQUFJPVE9fSVBWNiwgSVBWNl9BRERfTUVNQkVSU0hJUCwgKGNoYXIgKikmTUNSZWcsIHNpemVvZihNQ1JlZykpOworICAgICAgICBpZiAocmVzdWx0ID09IFNPQ0tFVF9FUlJPUikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJzZXRzb2Nrb3B0IChJUFY2X0FERF9NRU1CRVJTSElQKSBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBTcGVjaWFsIHJlYWxtIGxvY2FsIGFkZHJlc3MKKyAgICAgICAgTUNSZWcuaXB2Nm1yX211bHRpYWRkciA9IFJlYWxtTG9jYWxTcGVjaWFsQWRkcmVzczsKKyAgICAgICAgcmVzdWx0ID0gc2V0c29ja29wdChhUGluZ0hhbmRsZXItPm1Tb2NrZXQsIElQUFJPVE9fSVBWNiwgSVBWNl9BRERfTUVNQkVSU0hJUCwgKGNoYXIgKikmTUNSZWcsIHNpemVvZihNQ1JlZykpOworICAgICAgICBpZiAocmVzdWx0ID09IFNPQ0tFVF9FUlJPUikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJzZXRzb2Nrb3B0IChJUFY2X0FERF9NRU1CRVJTSElQKSBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFN0YXJ0IHRoZSBvdHBvb2wgd2FpdGluZyBvbiB0aGUgb3ZlcmxhcHBlZCBldmVudAorICAgIFNldFRocmVhZHBvb2xXYWl0KGFQaW5nSGFuZGxlci0+bVRocmVhZHBvb2xXYWl0LCBhUGluZ0hhbmRsZXItPm1PdmVybGFwcGVkLmhFdmVudCwgbnVsbHB0cik7CisKKyAgICAvLyBTdGFydCB0aGUgcmVjZWl2ZQorICAgIEZsYWcgPSBNU0dfUEFSVElBTDsKKyAgICBhUGluZ0hhbmRsZXItPm1Tb3VyY2VBZGRyNkxlbiA9IHNpemVvZihhUGluZ0hhbmRsZXItPm1Tb3VyY2VBZGRyNik7CisgICAgcmVzdWx0ID0gCisgICAgICAgIFdTQVJlY3ZGcm9tKAorICAgICAgICAgICAgYVBpbmdIYW5kbGVyLT5tU29ja2V0LCAKKyAgICAgICAgICAgICZhUGluZ0hhbmRsZXItPm1XU0FSZWN2QnVmZmVyLCAxLCAmYVBpbmdIYW5kbGVyLT5tTnVtQnl0ZXNSZWNlaXZlZCwgJkZsYWcsIAorICAgICAgICAgICAgKFNPQ0tBRERSKikmYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjYsICZhUGluZ0hhbmRsZXItPm1Tb3VyY2VBZGRyNkxlbiwgCisgICAgICAgICAgICAmYVBpbmdIYW5kbGVyLT5tT3ZlcmxhcHBlZCwgbnVsbHB0cgorICAgICAgICAgICAgKTsKKyAgICBpZiAocmVzdWx0ICE9IFNPQ0tFVF9FUlJPUikKKyAgICB7CisgICAgICAgIC8vIE5vdCBwZW5kaW5nLCBzbyBtYW51YWxseSB0cmlnZ2VyIHRoZSBldmVudCBmb3IgdGhlIFRocmVhZHBvb2wgdG8gZXhlY3V0ZQorICAgICAgICBTZXRFdmVudChhUGluZ0hhbmRsZXItPm1PdmVybGFwcGVkLmhFdmVudCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IFdTQUdldExhc3RFcnJvcigpOworICAgICAgICBpZiAocmVzdWx0ICE9IFdTQV9JT19QRU5ESU5HKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIldTQVJlY3ZGcm9tIGZhaWxlZCwgMHgleFxyXG4iLCByZXN1bHQpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgYU5vZGUtPm1QaW5nSGFuZGxlcnMucHVzaF9iYWNrKGFQaW5nSGFuZGxlcik7CisgICAgYVBpbmdIYW5kbGVyID0gbnVsbHB0cjsKKworZXhpdDoKKyAgICAKKyAgICAvLyBSZXZlcnQgdGhlIGNvbXBhcm1lbnQgaWYgbmVjZXNzYXJ5CisgICAgaWYgKFJldmVydENvbXBhcnRtZW50T25FeGl0KQorICAgIHsKKyAgICAgICAgKFZPSUQpU2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoT3JpZ2luYWxDb21wYXJ0bWVudElEKTsKKyAgICB9CisKKyAgICAvLyBDbGVhbiB1cCBwaW5nIGhhbmRsZXIgaWYgbmVjZXNzYXJ5CisgICAgaWYgKGFQaW5nSGFuZGxlcikKKyAgICB7CisgICAgICAgIGlmIChhUGluZ0hhbmRsZXItPm1UaHJlYWRwb29sV2FpdCAhPSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYVBpbmdIYW5kbGVyLT5tU29ja2V0ICE9IElOVkFMSURfU09DS0VUKSAKKyAgICAgICAgICAgICAgICBjbG9zZXNvY2tldChhUGluZ0hhbmRsZXItPm1Tb2NrZXQpOworICAgICAgICAgICAgV2FpdEZvclRocmVhZHBvb2xXYWl0Q2FsbGJhY2tzKGFQaW5nSGFuZGxlci0+bVRocmVhZHBvb2xXYWl0LCBUUlVFKTsKKyAgICAgICAgICAgIENsb3NlVGhyZWFkcG9vbFdhaXQoYVBpbmdIYW5kbGVyLT5tVGhyZWFkcG9vbFdhaXQpOworICAgICAgICB9CisgICAgICAgIGlmIChhUGluZ0hhbmRsZXItPm1PdmVybGFwcGVkLmhFdmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgQ2xvc2VIYW5kbGUoYVBpbmdIYW5kbGVyLT5tT3ZlcmxhcHBlZC5oRXZlbnQpOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBhUGluZ0hhbmRsZXI7CisgICAgfQorfQorCit2b2lkIEhhbmRsZUFkZHJlc3NDaGFuZ2VzKG90Tm9kZSAqYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBhdXRvIGFkZHJzID0gb3RJcDZHZXRVbmljYXN0QWRkcmVzc2VzKGFOb2RlLT5tSW5zdGFuY2UpOworCisgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmFOb2RlLT5tQ1MpOworICAgICAgICAKKyAgICAvLyBJbnZhbGlkYXRlIGFsbCBoYW5kbGVycworICAgIGZvciAoVUxPTkcgaSA9IDA7IGkgPCBhTm9kZS0+bVBpbmdIYW5kbGVycy5zaXplKCk7IGkrKykKKyAgICAgICAgYU5vZGUtPm1QaW5nSGFuZGxlcnNbaV0tPm1BY3RpdmUgPSBmYWxzZTsKKworICAgIC8vIFNlYXJjaCBmb3IgbWF0Y2hlcworICAgIGZvciAoYXV0byBhZGRyID0gYWRkcnM7IGFkZHI7IGFkZHIgPSBhZGRyLT5tTmV4dCkKKyAgICB7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChVTE9ORyBpID0gMDsgaSA8IGFOb2RlLT5tUGluZ0hhbmRsZXJzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgaWYgKCFhTm9kZS0+bVBpbmdIYW5kbGVyc1tpXS0+bUFjdGl2ZSAmJgorICAgICAgICAgICAgICAgIG1lbWNtcCgmYWRkci0+bUFkZHJlc3MsICZhTm9kZS0+bVBpbmdIYW5kbGVyc1tpXS0+bUFkZHJlc3MsIHNpemVvZihvdElwNkFkZHJlc3MpKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhTm9kZS0+bVBpbmdIYW5kbGVyc1tpXS0+bUFjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGlmICghZm91bmQpIEFkZFBpbmdIYW5kbGVyKGFOb2RlLCAmYWRkci0+bUFkZHJlc3MpOworICAgIH0KKworICAgIHZlY3RvcjxvdFBpbmdIYW5kbGVyKj4gcGluZ0hhbmRsZXJzVG9EZWxldGU7CisgICAgICAgIAorICAgIC8vIFJlbGVhc2UgYWxsIGxlZnQgb3ZlciBoYW5kbGVycworICAgIGZvciAoaW50IGkgPSBhTm9kZS0+bVBpbmdIYW5kbGVycy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkKKyAgICAgICAgaWYgKGFOb2RlLT5tUGluZ0hhbmRsZXJzW2ldLT5tQWN0aXZlID09IGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGFQaW5nSGFuZGxlciA9IGFOb2RlLT5tUGluZ0hhbmRsZXJzW2ldOworCisjaWYgREVCVUdfUElORworICAgICAgICAgICAgQ0hBUiBzeklwQWRkcmVzc1s0Nl0gPSB7IDAgfTsKKyAgICAgICAgICAgIFJ0bElwdjZBZGRyZXNzVG9TdHJpbmdBKChQSU42X0FERFIpJmFQaW5nSGFuZGxlci0+bUFkZHJlc3MsIHN6SXBBZGRyZXNzKTsKKyAgICAgICAgICAgIHByaW50ZigiJWQ6IHJlbW92aW5nIHBpbmcgaGFuZGxlciBmb3IgJXNcclxuIiwgYU5vZGUtPm1JZCwgc3pJcEFkZHJlc3MpOworI2VuZGlmCisKKyAgICAgICAgICAgIGFOb2RlLT5tUGluZ0hhbmRsZXJzLmVyYXNlKGFOb2RlLT5tUGluZ0hhbmRsZXJzLmJlZ2luKCkgKyBpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNodXRkb3duKGFQaW5nSGFuZGxlci0+bVNvY2tldCwgU0RfQk9USCk7CisgICAgICAgICAgICBjbG9zZXNvY2tldChhUGluZ0hhbmRsZXItPm1Tb2NrZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBwaW5nSGFuZGxlcnNUb0RlbGV0ZS5wdXNoX2JhY2soYVBpbmdIYW5kbGVyKTsKKyAgICAgICAgfQorCisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJmFOb2RlLT5tQ1MpOworCisgICAgZm9yIGVhY2ggKGF1dG8gYVBpbmdIYW5kbGVyIGluIHBpbmdIYW5kbGVyc1RvRGVsZXRlKQorICAgIHsKKyAgICAgICAgV2FpdEZvclRocmVhZHBvb2xXYWl0Q2FsbGJhY2tzKGFQaW5nSGFuZGxlci0+bVRocmVhZHBvb2xXYWl0LCBUUlVFKTsKKyAgICAgICAgQ2xvc2VUaHJlYWRwb29sV2FpdChhUGluZ0hhbmRsZXItPm1UaHJlYWRwb29sV2FpdCk7CisgICAgICAgIENsb3NlSGFuZGxlKGFQaW5nSGFuZGxlci0+bU92ZXJsYXBwZWQuaEV2ZW50KTsKKworICAgICAgICBkZWxldGUgYVBpbmdIYW5kbGVyOworICAgIH0KKworICAgIGlmIChhZGRycykgb3RGcmVlTWVtb3J5KGFkZHJzKTsKKworICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKwordm9pZCBPVENBTEwgb3ROb2RlU3RhdGVDaGFuZ2VkQ2FsbGJhY2sodWludDMyX3QgYUZsYWdzLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworICAgIG90Tm9kZSogYU5vZGUgPSAob3ROb2RlKilhQ29udGV4dDsKKworICAgIGlmICgoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUk9MRSkgIT0gMCkKKyAgICB7CisgICAgICAgIGF1dG8gUm9sZSA9IG90VGhyZWFkR2V0RGV2aWNlUm9sZShhTm9kZS0+bUluc3RhbmNlKTsKKyAgICAgICAgcHJpbnRmKCIlZDogbmV3IHJvbGU6ICVzXHJcbiIsIGFOb2RlLT5tSWQsIG90RGV2aWNlUm9sZVRvU3RyaW5nKFJvbGUpKTsKKyAgICB9CisKKyAgICBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfSVA2X0FERFJFU1NfQURERUQpICE9IDAgfHwgKGFGbGFncyAmIE9UX0NIQU5HRURfSVA2X0FERFJFU1NfUkVNT1ZFRCkgIT0gMCB8fAorICAgICAgICAoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUkxPQ19BRERFRCkgIT0gMCB8fCAoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUkxPQ19SRU1PVkVEKSAhPSAwKQorICAgIHsKKyAgICAgICAgSGFuZGxlQWRkcmVzc0NoYW5nZXMoYU5vZGUpOworICAgIH0KKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVMb2coY29uc3QgY2hhciAqYU1lc3NhZ2UpCit7CisgICAgTG9nSW5mbyhPVF9BUEksICIlcyIsIGFNZXNzYWdlKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIG90Tm9kZSogT1RDQUxMIG90Tm9kZUluaXQodWludDMyX3QgaWQpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIGF1dG8gQXBpSW5zdGFuY2UgPSBHZXRBcGlJbnN0YW5jZSgpOworICAgIGlmIChBcGlJbnN0YW5jZSA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJHZXRBcGlJbnN0YW5jZSBmYWlsZWQhXHJcbiIpOworICAgICAgICBvdExvZ0Z1bmNFeGl0TXNnKCJHZXRBcGlJbnN0YW5jZSBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCBCdXNBZGRlZCA9IGZhbHNlOworICAgIERXT1JEIG5ld0J1c0luZGV4OworICAgIE5FVF9JRklOREVYIGlmSW5kZXggPSB7fTsKKyAgICBORVRfTFVJRCBpZkx1aWQgPSB7fTsKKyAgICBHVUlEIGlmR3VpZCA9IHt9OworICAgIG90Tm9kZSAqbm9kZSA9IG51bGxwdHI7CisgICAgCisgICAgRFdPUkQgZHdFcnJvcjsKKyAgICBEV09SRCB0cmllcyA9IDA7CisgICAgd2hpbGUgKHRyaWVzIDwgMTAwMCkKKyAgICB7CisgICAgICAgIG5ld0J1c0luZGV4ID0gKGdOZXh0QnVzTnVtYmVyICsgdHJpZXMpICUgMTAwMDsKKyAgICAgICAgaWYgKG5ld0J1c0luZGV4ID09IDApIG5ld0J1c0luZGV4Kys7CisKKyAgICAgICAgZHdFcnJvciA9IG90dm1wQWRkVmlydHVhbEJ1cyhnVm1wSGFuZGxlLCAmbmV3QnVzSW5kZXgsICZpZkluZGV4KTsKKyAgICAgICAgaWYgKGR3RXJyb3IgPT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgQnVzQWRkZWQgPSB0cnVlOworICAgICAgICAgICAgZ05leHRCdXNOdW1iZXIgPSBuZXdCdXNJbmRleCArIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkd0Vycm9yID09IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSIHx8IGR3RXJyb3IgPT0gRVJST1JfRklMRV9OT1RfRk9VTkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyaWVzKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIm90dm1wQWRkVmlydHVhbEJ1cyBmYWlsZWQsIDB4JXghXHJcbiIsIGR3RXJyb3IpOworICAgICAgICAgICAgb3RMb2dGdW5jRXhpdE1zZygib3R2bXBBZGRWaXJ0dWFsQnVzIGZhaWxlZCIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0cmllcyA9PSAxMDAwKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdHZtcEFkZFZpcnR1YWxCdXMgZmFpbGVkIHRvIGZpbmQgYW4gZW1wdHkgYnVzIVxyXG4iKTsKKyAgICAgICAgb3RMb2dGdW5jRXhpdE1zZygib3R2bXBBZGRWaXJ0dWFsQnVzIGZhaWxlZCB0byBmaW5kIGFuIGVtcHR5IGJ1cyIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmICgoZHdFcnJvciA9IG90dm1wU2V0QWRhcHRlclRvcG9sb2d5R3VpZChnVm1wSGFuZGxlLCBuZXdCdXNJbmRleCwgJmdUb3BvbG9neUd1aWQpKSAhPSBFUlJPUl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdHZtcFNldEFkYXB0ZXJUb3BvbG9neUd1aWQgZmFpbGVkLCAweCV4IVxyXG4iLCBkd0Vycm9yKTsKKyAgICAgICAgb3RMb2dGdW5jRXhpdE1zZygib3R2bXBTZXRBZGFwdGVyVG9wb2xvZ3lHdWlkIGZhaWxlZCIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChFUlJPUl9TVUNDRVNTICE9IENvbnZlcnRJbnRlcmZhY2VJbmRleFRvTHVpZChpZkluZGV4LCAmaWZMdWlkKSkKKyAgICB7CisgICAgICAgIHByaW50ZigiQ29udmVydEludGVyZmFjZUluZGV4VG9MdWlkKCV1KSBmYWlsZWQhXHJcbiIsIGlmSW5kZXgpOworICAgICAgICBvdExvZ0Z1bmNFeGl0TXNnKCJDb252ZXJ0SW50ZXJmYWNlSW5kZXhUb0x1aWQgZmFpbGVkIik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKEVSUk9SX1NVQ0NFU1MgIT0gQ29udmVydEludGVyZmFjZUx1aWRUb0d1aWQoJmlmTHVpZCwgJmlmR3VpZCkpCisgICAgeworICAgICAgICBwcmludGYoIkNvbnZlcnRJbnRlcmZhY2VMdWlkVG9HdWlkIGZhaWxlZCFcclxuIik7CisgICAgICAgIG90TG9nRnVuY0V4aXRNc2coIkNvbnZlcnRJbnRlcmZhY2VMdWlkVG9HdWlkIGZhaWxlZCIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8vIEtlZXAgdHJ5aW5nIGZvciB1cCB0byAzMCBzZWNvbmRzCisgICAgYXV0byBTdGFydFRpY2sgPSBHZXRUaWNrQ291bnQ2NCgpOworICAgIG90SW5zdGFuY2UgKmluc3RhbmNlID0gbnVsbHB0cjsKKyAgICBkbworICAgIHsKKyAgICAgICAgaW5zdGFuY2UgPSBvdEluc3RhbmNlSW5pdChBcGlJbnN0YW5jZSwgJmlmR3VpZCk7CisgICAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxscHRyKSBicmVhazsKKworICAgICAgICBhdXRvIHdhaXRUaW1lTXMgPSAoMzAgKiAxMDAwIC0gKExPTkdMT05HKShHZXRUaWNrQ291bnQ2NCgpIC0gU3RhcnRUaWNrKSk7CisgICAgICAgIGlmICh3YWl0VGltZU1zIDw9IDApIGJyZWFrOworICAgICAgICBhdXRvIHdhaXRSZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGdEZXZpY2VBcnJpdmFsRXZlbnQsIChEV09SRCl3YWl0VGltZU1zKTsKKyAgICAgICAgaWYgKHdhaXRSZXN1bHQgIT0gV0FJVF9PQkpFQ1RfMCkgYnJlYWs7CisKKyAgICB9IHdoaWxlICh0cnVlKTsKKworICAgIGlmIChpbnN0YW5jZSA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdEluc3RhbmNlSW5pdCBmYWlsZWQhXHJcbiIpOworICAgICAgICBvdExvZ0Z1bmNFeGl0TXNnKCJvdEluc3RhbmNlSW5pdCBmYWlsZWQiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBHVUlEIERldmljZUd1aWQgPSBvdEdldERldmljZUd1aWQoaW5zdGFuY2UpOworICAgIHVpbnQzMl90IENvbXBhcnRtZW50ID0gb3RHZXRDb21wYXJ0bWVudElkKGluc3RhbmNlKTsKKworICAgIG5vZGUgPSBuZXcgb3ROb2RlKCk7CisgICAgcHJpbnRmKCIlZDogTmV3IERldmljZSAiIEdVSURfRk9STUFUICIgaW4gY29tcGFydG1lbnQgJWRcclxuIiwgaWQsIEdVSURfQVJHKERldmljZUd1aWQpLCBDb21wYXJ0bWVudCk7CisKKyAgICBub2RlLT5tSWQgPSBpZDsKKyAgICBub2RlLT5tSW50ZXJmYWNlSW5kZXggPSBpZkluZGV4OworICAgIG5vZGUtPm1CdXNJbmRleCA9IG5ld0J1c0luZGV4OworICAgIG5vZGUtPm1JbnN0YW5jZSA9IGluc3RhbmNlOworCisgICAgbm9kZS0+bUVuZXJneVNjYW5FdmVudCA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIFRSVUUsIEZBTFNFLCBudWxscHRyKTsKKyAgICBub2RlLT5tUGFuSWRDb25mbGljdEV2ZW50ID0gQ3JlYXRlRXZlbnQobnVsbHB0ciwgVFJVRSwgRkFMU0UsIG51bGxwdHIpOworCisgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmdDUyk7CisgICAgZ05vZGVzLnB1c2hfYmFjayhub2RlKTsKKyAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKworICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJm5vZGUtPm1DUyk7CisKKyAgICAvLyBSZXNldCBhbnkgcHJldmlvdXNseSBzYXZlZCBzZXR0aW5ncworICAgIG90SW5zdGFuY2VGYWN0b3J5UmVzZXQoaW5zdGFuY2UpOworCisgICAgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhpbnN0YW5jZSwgb3ROb2RlU3RhdGVDaGFuZ2VkQ2FsbGJhY2ssIG5vZGUpOworCisgICAgSGFuZGxlQWRkcmVzc0NoYW5nZXMobm9kZSk7CisKKyAgICBvdExvZ0Z1bmNFeGl0TXNnKCJzdWNjZXNzLiBbJWRdID0gJSFHVUlEISIsIGlkLCAmRGV2aWNlR3VpZCk7CisKK2Vycm9yOgorCisgICAgaWYgKG5vZGUgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGlmIChCdXNBZGRlZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3R2bXBSZW1vdmVWaXJ0dWFsQnVzKGdWbXBIYW5kbGUsIG5ld0J1c0luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIFJlbGVhc2VBcGlJbnN0YW5jZSgpOworICAgIH0KKworICAgIHJldHVybiBub2RlOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlRmluYWxpemUob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworICAgIGlmIChhTm9kZSAhPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlZDogUmVtb3ZpbmcgRGV2aWNlXHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgICAgIC8vIEZyZWUgYW55IG1lbW9yeSB0aGF0IHdlIGFsbG9jYXRlZCBub3cKKyAgICAgICAgZm9yIGVhY2ggKGF1dG8gbWVtIGluIGFOb2RlLT5tTWVtb3J5VG9GcmVlKQorICAgICAgICAgICAgZnJlZShtZW0pOworCisgICAgICAgIC8vIENsZWFuIHVwIGNhbGxiYWNrcworICAgICAgICBDbG9zZUhhbmRsZShhTm9kZS0+bVBhbklkQ29uZmxpY3RFdmVudCk7CisgICAgICAgIENsb3NlSGFuZGxlKGFOb2RlLT5tRW5lcmd5U2NhbkV2ZW50KTsKKyAgICAgICAgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhhTm9kZS0+bUluc3RhbmNlLCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGdOb2Rlcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGdOb2Rlc1tpXSA9PSBhTm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnTm9kZXMuZXJhc2UoZ05vZGVzLmJlZ2luKCkgKyBpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKworICAgICAgICAvLyBGcmVlIHRoZSBpbnN0YW5jZQorICAgICAgICBvdEZyZWVNZW1vcnkoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgICAgIGFOb2RlLT5tSW5zdGFuY2UgPSBudWxscHRyOworCisgICAgICAgIC8vIEZyZWUgdGhlIHBpbmcgaGFuZGxlcnMKKyAgICAgICAgSGFuZGxlQWRkcmVzc0NoYW5nZXMoYU5vZGUpOworICAgICAgICBhc3NlcnQoYU5vZGUtPm1QaW5nSGFuZGxlcnMuc2l6ZSgpID09IDApOworICAgICAgICBpZiAoYU5vZGUtPm1QaW5nSGFuZGxlcnMuc2l6ZSgpICE9IDApIHByaW50ZigiJWQgbGVmdCBvdmVyIHBpbmcgaGFuZGxlcnMhISEiLCAoaW50KWFOb2RlLT5tUGluZ0hhbmRsZXJzLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBEZWxldGVDcml0aWNhbFNlY3Rpb24oJmFOb2RlLT5tQ1MpOworCisgICAgICAgIC8vIERlbGV0ZSB0aGUgdmlydHVhbCBidXMKKyAgICAgICAgb3R2bXBSZW1vdmVWaXJ0dWFsQnVzKGdWbXBIYW5kbGUsIGFOb2RlLT5tQnVzSW5kZXgpOworICAgICAgICBkZWxldGUgYU5vZGU7CisgICAgICAgIAorICAgICAgICBSZWxlYXNlQXBpSW5zdGFuY2UoKTsKKyAgICB9CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0TW9kZShvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphTW9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAlcyIsIGFOb2RlLT5tSWQsIGFNb2RlKTsKKyAgICBwcmludGYoIiVkOiBtb2RlICVzXHJcbiIsIGFOb2RlLT5tSWQsIGFNb2RlKTsKKworICAgIG90TGlua01vZGVDb25maWcgbGlua01vZGUgPSB7MH07CisKKyAgICBjb25zdCBjaGFyICppbmRleCA9IGFNb2RlOworICAgIHdoaWxlICgqaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKCppbmRleCkKKyAgICAgICAgeworICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIGxpbmtNb2RlLm1SeE9uV2hlbklkbGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgbGlua01vZGUubVNlY3VyZURhdGFSZXF1ZXN0cyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICBsaW5rTW9kZS5tRGV2aWNlVHlwZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICBsaW5rTW9kZS5tTmV0d29ya0RhdGEgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCsrOworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gb3RUaHJlYWRTZXRMaW5rTW9kZShhTm9kZS0+bUluc3RhbmNlLCBsaW5rTW9kZSk7CisgICAgCisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVJbnRlcmZhY2VVcChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogaWZjb25maWcgdXBcclxuIiwgYU5vZGUtPm1JZCk7CisKKyAgICBhdXRvIGVycm9yID0gb3RJcDZTZXRFbmFibGVkKGFOb2RlLT5tSW5zdGFuY2UsIHRydWUpOworICAgIAorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVJbnRlcmZhY2VEb3duKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBpZmNvbmZpZyBkb3duXHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgKHZvaWQpb3RJcDZTZXRFbmFibGVkKGFOb2RlLT5tSW5zdGFuY2UsIGZhbHNlKTsKKyAgICAKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVUaHJlYWRTdGFydChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogdGhyZWFkIHN0YXJ0XHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgYXV0byBlcnJvciA9IG90VGhyZWFkU2V0RW5hYmxlZChhTm9kZS0+bUluc3RhbmNlLCB0cnVlKTsKKyAgICAKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlVGhyZWFkU3RvcChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogdGhyZWFkIHN0b3BcclxuIiwgYU5vZGUtPm1JZCk7CisKKyAgICAodm9pZClvdFRocmVhZFNldEVuYWJsZWQoYU5vZGUtPm1JbnN0YW5jZSwgZmFsc2UpOworICAgIAorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNvbW1pc3Npb25lclN0YXJ0KG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBjb21taXNzaW9uZXIgc3RhcnRcclxuIiwgYU5vZGUtPm1JZCk7CisKKyAgICBhdXRvIGVycm9yID0gb3RDb21taXNzaW9uZXJTdGFydChhTm9kZS0+bUluc3RhbmNlKTsKKyAgICAKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQ29tbWlzc2lvbmVySm9pbmVyQWRkKG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFFeHRBZGRyLCBjb25zdCBjaGFyICphUFNLZCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAlcyAlcyIsIGFOb2RlLT5tSWQsIGFFeHRBZGRyLCBhUFNLZCk7CisgICAgcHJpbnRmKCIlZDogY29tbWlzc2lvbmVyIGpvaW5lciBhZGQgJXMgJXNcclxuIiwgYU5vZGUtPm1JZCwgYUV4dEFkZHIsIGFQU0tkKTsKKworICAgIGNvbnN0IHVpbnQzMl90IGtEZWZhdWx0Sm9pbmVyVGltZW91dCA9IDEyMDsKKworICAgIG90RXJyb3IgZXJyb3I7CisgICAgCisgICAgaWYgKHN0cmNtcChhRXh0QWRkciwgIioiKSA9PSAwKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdENvbW1pc3Npb25lckFkZEpvaW5lcihhTm9kZS0+bUluc3RhbmNlLCBudWxscHRyLCBhUFNLZCwga0RlZmF1bHRKb2luZXJUaW1lb3V0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RFeHRBZGRyZXNzIGV4dEFkZHI7CisgICAgICAgIGlmIChIZXgyQmluKGFFeHRBZGRyLCBleHRBZGRyLm04LCBzaXplb2YoZXh0QWRkcikpICE9IHNpemVvZihleHRBZGRyKSkKKyAgICAgICAgICAgIHJldHVybiBPVF9FUlJPUl9QQVJTRTsKKworICAgICAgICBlcnJvciA9IG90Q29tbWlzc2lvbmVyQWRkSm9pbmVyKGFOb2RlLT5tSW5zdGFuY2UsICZleHRBZGRyLCBhUFNLZCwga0RlZmF1bHRKb2luZXJUaW1lb3V0KTsKKyAgICB9CisgICAgCisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNvbW1pc3Npb25lclN0b3Aob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IGNvbW1pc3Npb25lciBzdG9wXHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgKHZvaWQpb3RDb21taXNzaW9uZXJTdG9wKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIAorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUpvaW5lclN0YXJ0KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFQU0tkLCBjb25zdCBjaGFyICphUHJvdmlzaW9uaW5nVXJsKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdICVzICVzIiwgYU5vZGUtPm1JZCwgYVBTS2QsIGFQcm92aXNpb25pbmdVcmwpOworICAgIHByaW50ZigiJWQ6IGpvaW5lciBzdGFydCAlcyAlc1xyXG4iLCBhTm9kZS0+bUlkLCBhUFNLZCwgYVByb3Zpc2lvbmluZ1VybCk7CisKKyAgICAvLyBUT0RPOiBoYW5kbGUgdGhlIGpvaW5lciBjb21wbGV0aW9uIGNhbGxiYWNrCisgICAgYXV0byBlcnJvciA9IG90Sm9pbmVyU3RhcnQoYU5vZGUtPm1JbnN0YW5jZSwgYVBTS2QsIGFQcm92aXNpb25pbmdVcmwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIAorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVKb2luZXJTdG9wKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBqb2luZXIgc3RvcFxyXG4iLCBhTm9kZS0+bUlkKTsKKworICAgICh2b2lkKW90Sm9pbmVyU3RvcChhTm9kZS0+bUluc3RhbmNlKTsKKyAgICAKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVDbGVhcldoaXRlbGlzdChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogd2hpdGVsaXN0IGNsZWFyXHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgb3RMaW5rQ2xlYXJXaGl0ZWxpc3QoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlRW5hYmxlV2hpdGVsaXN0KG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiB3aGl0ZWxpc3QgZW5hYmxlXHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgb3RMaW5rU2V0V2hpdGVsaXN0RW5hYmxlZChhTm9kZS0+bUluc3RhbmNlLCB0cnVlKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVEaXNhYmxlV2hpdGVsaXN0KG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiB3aGl0ZWxpc3QgZGlzYWJsZVxyXG4iLCBhTm9kZS0+bUlkKTsKKworICAgIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQoYU5vZGUtPm1JbnN0YW5jZSwgZmFsc2UpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUFkZFdoaXRlbGlzdChvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphRXh0QWRkciwgaW50OF90IGFSc3NpKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgaWYgKGFSc3NpID09IDApCisgICAgICAgIHByaW50ZigiJWQ6IHdoaXRlbGlzdCBhZGQgJXNcclxuIiwgYU5vZGUtPm1JZCwgYUV4dEFkZHIpOworICAgIGVsc2UgcHJpbnRmKCIlZDogd2hpdGVsaXN0IGFkZCAlcyAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhRXh0QWRkciwgYVJzc2kpOworCisgICAgdWludDhfdCBleHRBZGRyWzhdOworICAgIGlmIChIZXgyQmluKGFFeHRBZGRyLCBleHRBZGRyLCBzaXplb2YoZXh0QWRkcikpICE9IHNpemVvZihleHRBZGRyKSkKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX1BBUlNFOworCisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBpZiAoYVJzc2kgPT0gMCkKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RMaW5rQWRkV2hpdGVsaXN0KGFOb2RlLT5tSW5zdGFuY2UsIGV4dEFkZHIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IG90TGlua0FkZFdoaXRlbGlzdFJzc2koYU5vZGUtPm1JbnN0YW5jZSwgZXh0QWRkciwgYVJzc2kpOworICAgIH0KKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlUmVtb3ZlV2hpdGVsaXN0KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFFeHRBZGRyKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogd2hpdGVsaXN0IHJlbW92ZSAlc1xyXG4iLCBhTm9kZS0+bUlkLCBhRXh0QWRkcik7CisKKyAgICB1aW50OF90IGV4dEFkZHJbOF07CisgICAgaWYgKEhleDJCaW4oYUV4dEFkZHIsIGV4dEFkZHIsIHNpemVvZihleHRBZGRyKSkgIT0gc2l6ZW9mKGV4dEFkZHIpKQorICAgICAgICByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgb3RMaW5rUmVtb3ZlV2hpdGVsaXN0KGFOb2RlLT5tSW5zdGFuY2UsIGV4dEFkZHIpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIHVpbnQxNl90IE9UQ0FMTCBvdE5vZGVHZXRBZGRyMTYob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RUaHJlYWRHZXRSbG9jMTYoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgcHJpbnRmKCIlZDogcmxvYzE2XHJcbiUwNHhcclxuIiwgYU5vZGUtPm1JZCwgcmVzdWx0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXRIYXNoTWFjQWRkcmVzcyhvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgb3RFeHRBZGRyZXNzIGFIYXNoTWFjQWRkcmVzcyA9IHt9OworICAgIG90TGlua0dldEpvaW5lcklkKGFOb2RlLT5tSW5zdGFuY2UsICZhSGFzaE1hY0FkZHJlc3MpOworICAgIGNoYXIqIHN0ciA9IChjaGFyKiltYWxsb2MoMTgpOworICAgIGlmIChzdHIgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGFOb2RlLT5tTWVtb3J5VG9GcmVlLnB1c2hfYmFjayhzdHIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykKKyAgICAgICAgICAgIHNwcmludGZfcyhzdHIgKyBpICogMiwgMTggLSAoMiAqIGkpLCAiJTAyeCIsIGFIYXNoTWFjQWRkcmVzcy5tOFtpXSk7CisgICAgICAgIHByaW50ZigiJWQ6IGhhc2htYWNhZGRyXHJcbiVzXHJcbiIsIGFOb2RlLT5tSWQsIHN0cik7CisgICAgfQorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gc3RyOworfQorCitPVE5PREVBUEkgY29uc3QgY2hhciogT1RDQUxMIG90Tm9kZUdldEFkZHI2NChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgYXV0byBleHRBZGRyID0gb3RMaW5rR2V0RXh0ZW5kZWRBZGRyZXNzKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIGNoYXIqIHN0ciA9IChjaGFyKiltYWxsb2MoMTgpOworICAgIGlmIChzdHIgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGFOb2RlLT5tTWVtb3J5VG9GcmVlLnB1c2hfYmFjayhzdHIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykKKyAgICAgICAgICAgIHNwcmludGZfcyhzdHIgKyBpICogMiwgMTggLSAoMiAqIGkpLCAiJTAyeCIsIGV4dEFkZHJbaV0pOworICAgICAgICBwcmludGYoIiVkOiBleHRhZGRyXHJcbiVzXHJcbiIsIGFOb2RlLT5tSWQsIHN0cik7CisgICAgfQorICAgIG90RnJlZU1lbW9yeShleHRBZGRyKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHN0cjsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldENoYW5uZWwob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IGNoYW5uZWwgJWRcclxuIiwgYU5vZGUtPm1JZCwgYUNoYW5uZWwpOworICAgIGF1dG8gcmVzdWx0ID0gb3RMaW5rU2V0Q2hhbm5lbChhTm9kZS0+bUluc3RhbmNlLCBhQ2hhbm5lbCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSB1aW50OF90IE9UQ0FMTCBvdE5vZGVHZXRDaGFubmVsKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90TGlua0dldENoYW5uZWwoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgcHJpbnRmKCIlZDogY2hhbm5lbFxyXG4lZFxyXG4iLCBhTm9kZS0+bUlkLCByZXN1bHQpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0TWFzdGVya2V5KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFNYXN0ZXJrZXkpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gJXMiLCBhTm9kZS0+bUlkLCBhTWFzdGVya2V5KTsKKyAgICBwcmludGYoIiVkOiBtYXN0ZXJrZXkgJXNcclxuIiwgYU5vZGUtPm1JZCwgYU1hc3RlcmtleSk7CisKKyAgICBpbnQga2V5TGVuZ3RoOworICAgIG90TWFzdGVyS2V5IGtleTsKKyAgICBpZiAoKGtleUxlbmd0aCA9IEhleDJCaW4oYU1hc3RlcmtleSwga2V5Lm04LCBzaXplb2Yoa2V5Lm04KSkpICE9IE9UX01BU1RFUl9LRVlfU0laRSkKKyAgICB7CisgICAgICAgIHByaW50ZigiaW52YWxpZCBsZW5ndGgga2V5ICVkXHJcbiIsIGtleUxlbmd0aCk7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9QQVJTRTsKKyAgICB9CisKKyAgICBhdXRvIGVycm9yID0gb3RUaHJlYWRTZXRNYXN0ZXJLZXkoYU5vZGUtPm1JbnN0YW5jZSwgJmtleSk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXRNYXN0ZXJrZXkob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gYU1hc3RlcktleSA9IG90VGhyZWFkR2V0TWFzdGVyS2V5KGFOb2RlLT5tSW5zdGFuY2UpOworICAgIHVpbnQ4X3Qgc3RyTGVuZ3RoID0gMipzaXplb2Yob3RNYXN0ZXJLZXkpICsgMTsKKyAgICBjaGFyKiBzdHIgPSAoY2hhciopbWFsbG9jKHN0ckxlbmd0aCk7CisgICAgaWYgKHN0ciAhPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgYU5vZGUtPm1NZW1vcnlUb0ZyZWUucHVzaF9iYWNrKHN0cik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKG90TWFzdGVyS2V5KTsgaSsrKQorICAgICAgICAgICAgc3ByaW50Zl9zKHN0ciArIGkgKiAyLCBzdHJMZW5ndGggLSAoMiAqIGkpLCAiJTAyeCIsIGFNYXN0ZXJLZXktPm04W2ldKTsKKyAgICAgICAgcHJpbnRmKCIlZDogbWFzdGVya2V5XHJcbiVzXHJcbiIsIGFOb2RlLT5tSWQsIHN0cik7CisgICAgfQorICAgIG90RnJlZU1lbW9yeShhTWFzdGVyS2V5KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHN0cjsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFBTS2Mob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVBTS2MpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gJXMiLCBhTm9kZS0+bUlkLCBhUFNLYyk7CisgICAgcHJpbnRmKCIlZDogcHNrYyAlc1xyXG4iLCBhTm9kZS0+bUlkLCBhUFNLYyk7CisKKyAgICB1aW50OF90IHBza2NbT1RfUFNLQ19NQVhfU0laRV07CisgICAgaWYgKEhleDJCaW4oYVBTS2MsIHBza2MsIHNpemVvZihwc2tjKSkgIT0gT1RfUFNLQ19NQVhfU0laRSkKKyAgICB7CisgICAgICAgIHByaW50ZigiaW52YWxpZCBwc2tjICVzXHJcbiIsIGFQU0tjKTsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX1BBUlNFOworICAgIH0KKworICAgIGF1dG8gZXJyb3IgPSBvdFRocmVhZFNldFBTS2MoYU5vZGUtPm1JbnN0YW5jZSwgcHNrYyk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXRQU0tjKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBhdXRvIGFQU0tjID0gb3RUaHJlYWRHZXRQU0tjKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIHVpbnQ4X3Qgc3RyTGVuZ3RoID0gMiAqIE9UX1BTS0NfTUFYX1NJWkUgKyAxOworICAgIGNoYXIqIHN0ciA9IChjaGFyKiltYWxsb2Moc3RyTGVuZ3RoKTsKKyAgICBpZiAoc3RyICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBhTm9kZS0+bU1lbW9yeVRvRnJlZS5wdXNoX2JhY2soc3RyKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBPVF9QU0tDX01BWF9TSVpFOyBpKyspCisgICAgICAgICAgICBzcHJpbnRmX3Moc3RyICsgaSAqIDIsIHN0ckxlbmd0aCAtICgyICogaSksICIlMDJ4IiwgYVBTS2NbaV0pOworICAgICAgICBwcmludGYoIiVkOiBwc2tjXHJcbiVzXHJcbiIsIGFOb2RlLT5tSWQsIHN0cik7CisgICAgfQorICAgIG90RnJlZU1lbW9yeShhUFNLYyk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBzdHI7Cit9CisKK09UTk9ERUFQSSB1aW50MzJfdCBPVENBTEwgb3ROb2RlR2V0S2V5U2VxdWVuY2VDb3VudGVyKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90VGhyZWFkR2V0S2V5U2VxdWVuY2VDb3VudGVyKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIHByaW50ZigiJWQ6IGtleXNlcXVlbmNlXHJcbiVkXHJcbiIsIGFOb2RlLT5tSWQsIHJlc3VsdCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRLZXlTZXF1ZW5jZUNvdW50ZXIob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVNlcXVlbmNlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDoga2V5c2VxdWVuY2UgY291bnRlciAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhU2VxdWVuY2UpOworICAgIG90VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyKGFOb2RlLT5tSW5zdGFuY2UsIGFTZXF1ZW5jZSk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0S2V5U3dpdGNoR3VhcmRUaW1lKG90Tm9kZSogYU5vZGUsIHVpbnQzMl90IGFLZXlTd2l0Y2hHdWFyZFRpbWUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBrZXlzZXF1ZW5jZSBndWFyZHRpbWUgJWRcclxuIiwgYU5vZGUtPm1JZCwgYUtleVN3aXRjaEd1YXJkVGltZSk7CisgICAgb3RUaHJlYWRTZXRLZXlTd2l0Y2hHdWFyZFRpbWUoYU5vZGUtPm1JbnN0YW5jZSwgYUtleVN3aXRjaEd1YXJkVGltZSk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0TmV0d29ya0lkVGltZW91dChvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFUaW1lb3V0KQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogbmV0d29ya2lkdGltZW91dCAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhVGltZW91dCk7CisgICAgb3RUaHJlYWRTZXROZXR3b3JrSWRUaW1lb3V0KGFOb2RlLT5tSW5zdGFuY2UsIGFUaW1lb3V0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXROZXR3b3JrTmFtZShvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphTmFtZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IG5ldHdvcmtuYW1lICVzXHJcbiIsIGFOb2RlLT5tSWQsIGFOYW1lKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90VGhyZWFkU2V0TmV0d29ya05hbWUoYU5vZGUtPm1JbnN0YW5jZSwgYU5hbWUpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgY29uc3QgY2hhciogT1RDQUxMIG90Tm9kZUdldE5ldHdvcmtOYW1lKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90VGhyZWFkR2V0TmV0d29ya05hbWUoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgYU5vZGUtPm1NZW1vcnlUb0ZyZWUucHVzaF9iYWNrKChjaGFyKilyZXN1bHQpOworICAgIHByaW50ZigiJWQ6IG5ldHdvcmtuYW1lXHJcbiVzXHJcbiIsIGFOb2RlLT5tSWQsIHJlc3VsdCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSB1aW50MTZfdCBPVENBTEwgb3ROb2RlR2V0UGFuSWQob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RMaW5rR2V0UGFuSWQoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgcHJpbnRmKCIlZDogcGFuaWRcclxuMHglMDR4XHJcbiIsIGFOb2RlLT5tSWQsIHJlc3VsdCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRQYW5JZChvdE5vZGUqIGFOb2RlLCB1aW50MTZfdCBhUGFuSWQpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBwYW5pZCAweCUwNHhcclxuIiwgYU5vZGUtPm1JZCwgYVBhbklkKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90TGlua1NldFBhbklkKGFOb2RlLT5tSW5zdGFuY2UsIGFQYW5JZCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSB1aW50MzJfdCBPVENBTEwgb3ROb2RlR2V0UGFydGl0aW9uSWQob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RUaHJlYWRHZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIHByaW50ZigiJWQ6IGxlYWRlcnBhcnRpdGlvbmlkXHJcbjB4JTA0eFxyXG4iLCBhTm9kZS0+bUlkLCByZXN1bHQpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0UGFydGl0aW9uSWQob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVBhcnRpdGlvbklkKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogbGVhZGVycGFydGl0aW9uaWQgMHglMDR4XHJcbiIsIGFOb2RlLT5tSWQsIGFQYXJ0aXRpb25JZCk7CisgICAgb3RUaHJlYWRTZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKGFOb2RlLT5tSW5zdGFuY2UsIGFQYXJ0aXRpb25JZCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFUaHJlc2hvbGQpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiByb3V0ZXJ1cGdyYWRldGhyZXNob2xkICVkXHJcbiIsIGFOb2RlLT5tSWQsIGFUaHJlc2hvbGQpOworICAgIG90VGhyZWFkU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChhTm9kZS0+bUluc3RhbmNlLCBhVGhyZXNob2xkKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhVGhyZXNob2xkKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogcm91dGVyZG93bmdyYWRldGhyZXNob2xkICVkXHJcbiIsIGFOb2RlLT5tSWQsIGFUaHJlc2hvbGQpOworICAgIG90VGhyZWFkU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKGFOb2RlLT5tSW5zdGFuY2UsIGFUaHJlc2hvbGQpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlbGVhc2VSb3V0ZXJJZChvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFSb3V0ZXJJZCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IHJlbGVhc2Vyb3V0ZXJpZCAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhUm91dGVySWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RUaHJlYWRSZWxlYXNlUm91dGVySWQoYU5vZGUtPm1JbnN0YW5jZSwgYVJvdXRlcklkKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXRTdGF0ZShvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgYXV0byByb2xlID0gb3RUaHJlYWRHZXREZXZpY2VSb2xlKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIGF1dG8gcmVzdWx0ID0gX3N0cmR1cChvdERldmljZVJvbGVUb1N0cmluZyhyb2xlKSk7CisgICAgYU5vZGUtPm1NZW1vcnlUb0ZyZWUucHVzaF9iYWNrKHJlc3VsdCk7CisgICAgcHJpbnRmKCIlZDogc3RhdGVcclxuJXNcclxuIiwgYU5vZGUtPm1JZCwgcmVzdWx0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFN0YXRlKG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFTdGF0ZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IHN0YXRlICVzXHJcbiIsIGFOb2RlLT5tSWQsIGFTdGF0ZSk7CisKKyAgICBvdEVycm9yIGVycm9yOworICAgIGlmIChzdHJjbXAoYVN0YXRlLCAiZGV0YWNoZWQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFRocmVhZEJlY29tZURldGFjaGVkKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYVN0YXRlLCAiY2hpbGQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFRocmVhZEJlY29tZUNoaWxkKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYVN0YXRlLCAicm91dGVyIikgPT0gMCkKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RUaHJlYWRCZWNvbWVSb3V0ZXIoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhU3RhdGUsICJsZWFkZXIiKSA9PSAwKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFRocmVhZEJlY29tZUxlYWRlcihhTm9kZS0+bUluc3RhbmNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgfQorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK09UTk9ERUFQSSB1aW50MzJfdCBPVENBTEwgb3ROb2RlR2V0VGltZW91dChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgYXV0byByZXN1bHQgPSBvdFRocmVhZEdldENoaWxkVGltZW91dChhTm9kZS0+bUluc3RhbmNlKTsKKyAgICBwcmludGYoIiVkOiBjaGlsZHRpbWVvdXRcclxuJWRcclxuIiwgYU5vZGUtPm1JZCwgcmVzdWx0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFRpbWVvdXQob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBjaGlsZHRpbWVvdXQgJWRcclxuIiwgYU5vZGUtPm1JZCwgYVRpbWVvdXQpOworICAgIG90VGhyZWFkU2V0Q2hpbGRUaW1lb3V0KGFOb2RlLT5tSW5zdGFuY2UsIGFUaW1lb3V0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSB1aW50OF90IE9UQ0FMTCBvdE5vZGVHZXRXZWlnaHQob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RUaHJlYWRHZXRMZWFkZXJXZWlnaHQoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgcHJpbnRmKCIlZDogbGVhZGVyd2VpZ2h0XHJcbiVkXHJcbiIsIGFOb2RlLT5tSWQsIHJlc3VsdCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRXZWlnaHQob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhV2VpZ2h0KQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogbGVhZGVyd2VpZ2h0ICVkXHJcbiIsIGFOb2RlLT5tSWQsIGFXZWlnaHQpOworICAgIG90VGhyZWFkU2V0TG9jYWxMZWFkZXJXZWlnaHQoYU5vZGUtPm1JbnN0YW5jZSwgYVdlaWdodCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQWRkSXBBZGRyKG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFBZGRyKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogYWRkIGlwYWRkciAlc1xyXG4iLCBhTm9kZS0+bUlkLCBhQWRkcik7CisKKyAgICBvdE5ldGlmQWRkcmVzcyBhQWRkcmVzczsKKyAgICBhdXRvIGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhQWRkciwgJmFBZGRyZXNzLm1BZGRyZXNzKTsKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkgcmV0dXJuIGVycm9yOworCisgICAgYUFkZHJlc3MubVByZWZpeExlbmd0aCA9IDY0OworICAgIGFBZGRyZXNzLm1QcmVmZXJyZWQgPSB0cnVlOworICAgIGFBZGRyZXNzLm1WYWxpZCA9IHRydWU7CisgICAgYXV0byByZXN1bHQgPSBvdElwNkFkZFVuaWNhc3RBZGRyZXNzKGFOb2RlLT5tSW5zdGFuY2UsICZhQWRkcmVzcyk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB1aW50MTZfdCBTd2FwMTYodWludDE2X3QgdikKK3sKKyAgICByZXR1cm4KKyAgICAgICAgKCgodiAmIDB4MDBmZlUpIDw8IDgpICYgMHhmZjAwKSB8CisgICAgICAgICgoKHYgJiAweGZmMDBVKSA+PiA4KSAmIDB4MDBmZik7Cit9CisKK09UTk9ERUFQSSBjb25zdCBjaGFyKiBPVENBTEwgb3ROb2RlR2V0QWRkcnMob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IGlwYWRkclxyXG4iLCBhTm9kZS0+bUlkKTsKKworICAgIGF1dG8gYWRkcnMgPSBvdElwNkdldFVuaWNhc3RBZGRyZXNzZXMoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgaWYgKGFkZHJzID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgY2hhciogc3RyID0gKGNoYXIqKW1hbGxvYyg1MTIpOworICAgIGlmIChzdHIgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGFOb2RlLT5tTWVtb3J5VG9GcmVlLnB1c2hfYmFjayhzdHIpOworICAgICAgICBSdGxaZXJvTWVtb3J5KHN0ciwgNTEyKTsKKworICAgICAgICBjaGFyKiBjdXIgPSBzdHI7CisgICAgCisgICAgICAgIGZvciAoY29uc3Qgb3ROZXRpZkFkZHJlc3MgKmFkZHIgPSBhZGRyczsgYWRkcjsgYWRkciA9IGFkZHItPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY3VyICE9IHN0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqY3VyID0gJ1xuJzsKKyAgICAgICAgICAgICAgICBjdXIrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byBsYXN0ID0gY3VyOworCisgICAgICAgICAgICBjdXIgKz0gCisgICAgICAgICAgICAgICAgc3ByaW50Zl9zKAorICAgICAgICAgICAgICAgICAgICBjdXIsIDUxMiAtIChjdXIgLSBzdHIpLAorICAgICAgICAgICAgICAgICAgICAiJXg6JXg6JXg6JXg6JXg6JXg6JXg6JXgiLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMF0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMV0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMl0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbM10pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNF0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNV0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNl0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbN10pKTsKKworICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLCBsYXN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG90RnJlZU1lbW9yeShhZGRycyk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworCisgICAgcmV0dXJuIHN0cjsKK30KKworT1ROT0RFQVBJIHVpbnQzMl90IE9UQ0FMTCBvdE5vZGVHZXRDb250ZXh0UmV1c2VEZWxheShvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgYXV0byByZXN1bHQgPSBvdFRocmVhZEdldENvbnRleHRJZFJldXNlRGVsYXkoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgcHJpbnRmKCIlZDogY29udGV4dHJldXNlZGVsYXlcclxuJWRcclxuIiwgYU5vZGUtPm1JZCwgcmVzdWx0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldENvbnRleHRSZXVzZURlbGF5KG90Tm9kZSogYU5vZGUsIHVpbnQzMl90IGFEZWxheSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAlZCIsIGFOb2RlLT5tSWQsIGFEZWxheSk7CisgICAgcHJpbnRmKCIlZDogY29udGV4dHJldXNlZGVsYXkgJWRcclxuIiwgYU5vZGUtPm1JZCwgYURlbGF5KTsKKyAgICBvdFRocmVhZFNldENvbnRleHRJZFJldXNlRGVsYXkoYU5vZGUtPm1JbnN0YW5jZSwgYURlbGF5KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVBZGRQcmVmaXgob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVByZWZpeCwgY29uc3QgY2hhciAqYUZsYWdzLCBjb25zdCBjaGFyICphUHJlZmVyZW5jZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IHByZWZpeCBhZGQgJXMgJXMgJXNcclxuIiwgYU5vZGUtPm1JZCwgYVByZWZpeCwgYUZsYWdzLCBhUHJlZmVyZW5jZSk7CisKKyAgICBvdEJvcmRlclJvdXRlckNvbmZpZyBjb25maWcgPSB7MH07CisKKyAgICBhdXRvIGVycm9yID0gb3ROb2RlUGFyc2VQcmVmaXgoYVByZWZpeCwgJmNvbmZpZy5tUHJlZml4KTsKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkgcmV0dXJuIGVycm9yOworICAgIAorICAgIGNvbnN0IGNoYXIgKmluZGV4ID0gYUZsYWdzOworICAgIHdoaWxlICgqaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKCppbmRleCkKKyAgICAgICAgeworICAgICAgICBjYXNlICdwJzoKKyAgICAgICAgICAgIGNvbmZpZy5tUHJlZmVycmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgIGNvbmZpZy5tU2xhYWMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgY29uZmlnLm1EaGNwID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgIGNvbmZpZy5tQ29uZmlndXJlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIGNvbmZpZy5tRGVmYXVsdFJvdXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgIGNvbmZpZy5tT25NZXNoID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAgIGNvbmZpZy5tU3RhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4Kys7CisgICAgfQorICAgIAorICAgIGlmIChzdHJjbXAoYVByZWZlcmVuY2UsICJoaWdoIikgPT0gMCkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tUHJlZmVyZW5jZSA9IE9UX1JPVVRFX1BSRUZFUkVOQ0VfSElHSDsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFQcmVmZXJlbmNlLCAibWVkIikgPT0gMCkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tUHJlZmVyZW5jZSA9IE9UX1JPVVRFX1BSRUZFUkVOQ0VfTUVEOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYVByZWZlcmVuY2UsICJsb3ciKSA9PSAwKQorICAgIHsKKyAgICAgICAgY29uZmlnLm1QcmVmZXJlbmNlID0gT1RfUk9VVEVfUFJFRkVSRU5DRV9MT1c7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgfQorCisgICAgYXV0byByZXN1bHQgPSBvdEJvcmRlclJvdXRlckFkZE9uTWVzaFByZWZpeChhTm9kZS0+bUluc3RhbmNlLCAmY29uZmlnKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlbW92ZVByZWZpeChvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphUHJlZml4KQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisKKyAgICBvdElwNlByZWZpeCBwcmVmaXg7CisgICAgYXV0byBlcnJvciA9IG90Tm9kZVBhcnNlUHJlZml4KGFQcmVmaXgsICZwcmVmaXgpOworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKSByZXR1cm4gZXJyb3I7CisKKyAgICBhdXRvIHJlc3VsdCA9IG90Qm9yZGVyUm91dGVyUmVtb3ZlT25NZXNoUHJlZml4KGFOb2RlLT5tSW5zdGFuY2UsICZwcmVmaXgpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQWRkUm91dGUob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVByZWZpeCwgY29uc3QgY2hhciAqYVByZWZlcmVuY2UpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBvdEV4dGVybmFsUm91dGVDb25maWcgY29uZmlnID0gezB9OworCisgICAgYXV0byBlcnJvciA9IG90Tm9kZVBhcnNlUHJlZml4KGFQcmVmaXgsICZjb25maWcubVByZWZpeCk7CisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpIHJldHVybiBlcnJvcjsKKyAgICAKKyAgICBpZiAoc3RyY21wKGFQcmVmZXJlbmNlLCAiaGlnaCIpID09IDApCisgICAgeworICAgICAgICBjb25maWcubVByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX0hJR0g7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhUHJlZmVyZW5jZSwgIm1lZCIpID09IDApCisgICAgeworICAgICAgICBjb25maWcubVByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX01FRDsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFQcmVmZXJlbmNlLCAibG93IikgPT0gMCkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tUHJlZmVyZW5jZSA9IE9UX1JPVVRFX1BSRUZFUkVOQ0VfTE9XOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gb3RCb3JkZXJSb3V0ZXJBZGRSb3V0ZShhTm9kZS0+bUluc3RhbmNlLCAmY29uZmlnKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlbW92ZVJvdXRlKG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFQcmVmaXgpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKworICAgIG90SXA2UHJlZml4IHByZWZpeDsKKyAgICBhdXRvIGVycm9yID0gb3ROb2RlUGFyc2VQcmVmaXgoYVByZWZpeCwgJnByZWZpeCk7CisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpIHJldHVybiBlcnJvcjsKKworICAgIGF1dG8gcmVzdWx0ID0gb3RCb3JkZXJSb3V0ZXJSZW1vdmVSb3V0ZShhTm9kZS0+bUluc3RhbmNlLCAmcHJlZml4KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlZ2lzdGVyTmV0ZGF0YShvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogcmVnaXN0ZXJuZXRkYXRhXHJcbiIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RCb3JkZXJSb3V0ZXJSZWdpc3RlcihhTm9kZS0+bUluc3RhbmNlKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBPVENBTEwgb3ROb2RlQ29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0Q2FsbGJhY2sodWludDMyX3QgYUNoYW5uZWxNYXNrLCBjb25zdCB1aW50OF90ICphRW5lcmd5TGlzdCwgdWludDhfdCBhRW5lcmd5TGlzdExlbmd0aCwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3ROb2RlKiBhTm9kZSA9IChvdE5vZGUqKWFDb250ZXh0OworCisgICAgcHJpbnRmKCJFbmVyZ3k6IDB4JTA4eFxyXG4iLCBhQ2hhbm5lbE1hc2spOworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGFFbmVyZ3lMaXN0TGVuZ3RoOyBpKyspCisgICAgICAgIHByaW50ZigiJWQgIiwgYUVuZXJneUxpc3RbaV0pOworICAgIHByaW50ZigiXHJcbiIpOworCisgICAgU2V0RXZlbnQoYU5vZGUtPm1FbmVyZ3lTY2FuRXZlbnQpOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlRW5lcmd5U2NhbihvdE5vZGUqIGFOb2RlLCB1aW50MzJfdCBhTWFzaywgdWludDhfdCBhQ291bnQsIHVpbnQxNl90IGFQZXJpb2QsIHVpbnQxNl90IGFEdXJhdGlvbiwgY29uc3QgY2hhciAqYUFkZHIpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBlbmVyZ3kgc2NhbiAweCV4ICVkICVkICVkICVzXHJcbiIsIGFOb2RlLT5tSWQsIGFNYXNrLCBhQ291bnQsIGFQZXJpb2QsIGFEdXJhdGlvbiwgYUFkZHIpOworCisgICAgb3RJcDZBZGRyZXNzIGFkZHJlc3MgPSB7MH07CisgICAgYXV0byBlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYUFkZHIsICZhZGRyZXNzKTsKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIHByaW50Zigib3RJcDZBZGRyZXNzRnJvbVN0cmluZyglcykgZmFpbGVkLCAweCV4IVxyXG4iLCBhQWRkciwgZXJyb3IpOworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorICAgIAorICAgIFJlc2V0RXZlbnQoYU5vZGUtPm1FbmVyZ3lTY2FuRXZlbnQpOworCisgICAgZXJyb3IgPSBvdENvbW1pc3Npb25lckVuZXJneVNjYW4oYU5vZGUtPm1JbnN0YW5jZSwgYU1hc2ssIGFDb3VudCwgYVBlcmlvZCwgYUR1cmF0aW9uLCAmYWRkcmVzcywgb3ROb2RlQ29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0Q2FsbGJhY2ssIGFOb2RlKTsKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIHByaW50Zigib3RDb21taXNzaW9uZXJFbmVyZ3lTY2FuIGZhaWxlZCwgMHgleCFcclxuIiwgZXJyb3IpOworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgYXV0byByZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGFOb2RlLT5tRW5lcmd5U2NhbkV2ZW50LCA4MDAwKSA9PSBXQUlUX09CSkVDVF8wID8gT1RfRVJST1JfTk9ORSA6IE9UX0VSUk9SX05PVF9GT1VORDsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBPVENBTEwgb3ROb2RlQ29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrKHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdE5vZGUqIGFOb2RlID0gKG90Tm9kZSopYUNvbnRleHQ7CisgICAgcHJpbnRmKCJDb25mbGljdDogMHglMDR4LCAweCUwOHhcclxuIiwgYVBhbklkLCBhQ2hhbm5lbE1hc2spOworICAgIFNldEV2ZW50KGFOb2RlLT5tUGFuSWRDb25mbGljdEV2ZW50KTsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVBhbklkUXVlcnkob3ROb2RlKiBhTm9kZSwgdWludDE2X3QgYVBhbklkLCB1aW50MzJfdCBhTWFzaywgY29uc3QgY2hhciAqYUFkZHIpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBwYW5pZCBxdWVyeSAweCUwNHggMHgleCAlc1xyXG4iLCBhTm9kZS0+bUlkLCBhUGFuSWQsIGFNYXNrLCBhQWRkcik7CisKKyAgICBvdElwNkFkZHJlc3MgYWRkcmVzcyA9IHswfTsKKyAgICBhdXRvIGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhQWRkciwgJmFkZHJlc3MpOworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdElwNkFkZHJlc3NGcm9tU3RyaW5nKCVzKSBmYWlsZWQsIDB4JXghXHJcbiIsIGFBZGRyLCBlcnJvcik7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisgICAgCisgICAgUmVzZXRFdmVudChhTm9kZS0+bVBhbklkQ29uZmxpY3RFdmVudCk7CisKKyAgICBlcnJvciA9IG90Q29tbWlzc2lvbmVyUGFuSWRRdWVyeShhTm9kZS0+bUluc3RhbmNlLCBhUGFuSWQsIGFNYXNrLCAmYWRkcmVzcywgb3ROb2RlQ29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrLCBhTm9kZSk7CisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBwcmludGYoIm90Q29tbWlzc2lvbmVyUGFuSWRRdWVyeSBmYWlsZWQsIDB4JXghXHJcbiIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdChhTm9kZS0+bVBhbklkQ29uZmxpY3RFdmVudCwgODAwMCkgPT0gV0FJVF9PQkpFQ1RfMCA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBjb25zdCBjaGFyKiBPVENBTEwgb3ROb2RlU2NhbihvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhTm9kZSk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitPVE5PREVBUEkgdWludDMyX3QgT1RDQUxMIG90Tm9kZVBpbmcob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYUFkZHIsIHVpbnQxNl90IGFTaXplLCB1aW50MzJfdCBhTWluUmVwbGllcywgdWludDE2X3QgYVRpbWVvdXQpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gJXMgKCVkIGJ5dGVzKSIsIGFOb2RlLT5tSWQsIGFBZGRyLCBhU2l6ZSk7CisgICAgcHJpbnRmKCIlZDogcGluZyAlcyAoJWQgYnl0ZXMpXHJcbiIsIGFOb2RlLT5tSWQsIGFBZGRyLCBhU2l6ZSk7CisKKyAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBkZXN0aW5hdGlvbiBhZGRyZXNzCisgICAgb3RJcDZBZGRyZXNzIG90RGVzdGluYXRpb25BZGRyZXNzID0gezB9OworICAgIGF1dG8gZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFBZGRyLCAmb3REZXN0aW5hdGlvbkFkZHJlc3MpOworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdElwNkFkZHJlc3NGcm9tU3RyaW5nKCVzKSBmYWlsZWQhXHJcbiIsIGFBZGRyKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIC8vIEdldCBNTC1FSUQgYXMgc291cmNlIGFkZHJlc3MgZm9yIHBpbmcKKyAgICBhdXRvIG90U291cmNlQWRkcmVzcyA9IG90VGhyZWFkR2V0TWVzaExvY2FsRWlkKGFOb2RlLT5tSW5zdGFuY2UpOworCisgICAgc29ja2FkZHJfaW42IFNvdXJjZUFkZHJlc3MgPSB7IEFGX0lORVQ2LCAoVVNIT1JUKShDZXJ0aWZpY2F0aW9uUGluZ1BvcnQgKyAxKSB9OworICAgIHNvY2thZGRyX2luNiBEZXN0aW5hdGlvbkFkZHJlc3MgPSB7IEFGX0lORVQ2LCBDZXJ0aWZpY2F0aW9uUGluZ1BvcnQgfTsKKworICAgIG1lbWNweSgmU291cmNlQWRkcmVzcy5zaW42X2FkZHIsIG90U291cmNlQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSk7CisgICAgbWVtY3B5KCZEZXN0aW5hdGlvbkFkZHJlc3Muc2luNl9hZGRyLCAmb3REZXN0aW5hdGlvbkFkZHJlc3MsIHNpemVvZihJTjZfQUREUikpOworCisgICAgb3RGcmVlTWVtb3J5KG90U291cmNlQWRkcmVzcyk7CisgICAgb3RTb3VyY2VBZGRyZXNzID0gbnVsbHB0cjsKKyAgICAKKyAgICAvLyBQdXQgdGhlIGN1cnJlbnQgdGhlYWQgaW4gdGhlIGNvcnJlY3QgY29tcGFydG1lbnQKKyAgICBib29sIFJldmVydENvbXBhcnRtZW50T25FeGl0ID0gZmFsc2U7CisgICAgVUxPTkcgT3JpZ2luYWxDb21wYXJ0bWVudElEID0gR2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoKTsKKyAgICBpZiAoT3JpZ2luYWxDb21wYXJ0bWVudElEICE9IG90R2V0Q29tcGFydG1lbnRJZChhTm9kZS0+bUluc3RhbmNlKSkKKyAgICB7CisgICAgICAgIERXT1JEIGR3RXJyb3IgPSBFUlJPUl9TVUNDRVNTOworICAgICAgICBpZiAoKGR3RXJyb3IgPSBTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZChvdEdldENvbXBhcnRtZW50SWQoYU5vZGUtPm1JbnN0YW5jZSkpKSAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIlNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkIGZhaWxlZCwgMHgleFxyXG4iLCBkd0Vycm9yKTsKKyAgICAgICAgfQorICAgICAgICBSZXZlcnRDb21wYXJ0bWVudE9uRXhpdCA9IHRydWU7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9IDA7CisKKyAgICBhdXRvIFNlbmRCdWZmZXIgPSAoUENIQVIpbWFsbG9jKGFTaXplKTsKKyAgICBhdXRvIFJlY3ZCdWZmZXIgPSAoUENIQVIpbWFsbG9jKGFTaXplKTsKKworICAgIFdTQUJVRiBXU0FSZWN2QnVmZmVyID0geyBhU2l6ZSwgUmVjdkJ1ZmZlciB9OworICAgIAorICAgIFdTQU9WRVJMQVBQRUQgT3ZlcmxhcHBlZCA9IHsgMCB9OworICAgIE92ZXJsYXBwZWQuaEV2ZW50ID0gV1NBQ3JlYXRlRXZlbnQoKTsKKworICAgIERXT1JEIG51bWJlck9mUmVwbGllcyA9IDA7CisgICAgYm9vbCBpc1BlbmRpbmcgPSBmYWxzZTsKKyAgICBEV09SRCBGbGFnczsKKyAgICBEV09SRCBjYlJlY2VpdmVkOworICAgIGludCBjYkRlc3RpbmF0aW9uQWRkcmVzcyA9IHNpemVvZihEZXN0aW5hdGlvbkFkZHJlc3MpOworICAgIERXT1JEIGhvcExpbWl0ID0gNjQ7CisKKyAgICBTT0NLRVQgU29ja2V0ID0gV1NBU29ja2V0VyhBRl9JTkVUNiwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsIE5VTEwsIDAsIFdTQV9GTEFHX09WRVJMQVBQRUQpOworICAgIGlmIChTb2NrZXQgPT0gSU5WQUxJRF9TT0NLRVQpCisgICAgeworICAgICAgICBwcmludGYoIldTQVNvY2tldCBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gQmluZCB0aGUgc29ja2V0IHRvIHRoZSBhZGRyZXNzCisgICAgcmVzdWx0ID0gYmluZChTb2NrZXQsIChzb2NrYWRkciopJlNvdXJjZUFkZHJlc3MsIHNpemVvZihTb3VyY2VBZGRyZXNzKSk7CisgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgeworICAgICAgICBwcmludGYoImJpbmQgZmFpbGVkLCAweCV4XHJcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICAKKyAgICAvLyBTZXQgdGhlIG11bHRpY2FzdCBob3AgbGltaXQgdG8gNjQKKyAgICByZXN1bHQgPSBzZXRzb2Nrb3B0KFNvY2tldCwgSVBQUk9UT19JUFY2LCBJUFY2X01VTFRJQ0FTVF9IT1BTLCAoY2hhciAqKSZob3BMaW1pdCwgc2l6ZW9mKGhvcExpbWl0KSk7CisgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgeworICAgICAgICBwcmludGYoInNldHNvY2tvcHQgKElQVjZfTVVMVElDQVNUX0hPUFMpIGZhaWxlZCwgMHgleFxyXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBzZW5kIGJ1ZmZlciBwYXR0ZXJuLgorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhU2l6ZTsgaSsrKQorICAgICAgICBTZW5kQnVmZmVyW2ldID0gKGNoYXIpKCdhJyArIChpICUgMjMpKTsKKworICAgIC8vIEhhY2sgdG8gcmV0cmlldmUgZGVzdGluYXRpb24gb24gb3RoZXIgZW5kCisgICAgbWVtY3B5X3MoU2VuZEJ1ZmZlciwgYVNpemUsICZvdERlc3RpbmF0aW9uQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSk7CisKKyAgICAvLyBTZW5kIHRoZSBidWZmZXIKKyAgICByZXN1bHQgPSBzZW5kdG8oU29ja2V0LCBTZW5kQnVmZmVyLCBhU2l6ZSwgMCwgKFNPQ0tBRERSKikmRGVzdGluYXRpb25BZGRyZXNzLCBzaXplb2YoRGVzdGluYXRpb25BZGRyZXNzKSk7CisgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgeworICAgICAgICBwcmludGYoInNlbmR0byBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgYXV0byBTdGFydFRpY2sgPSBHZXRUaWNrQ291bnQ2NCgpOworICAgIAorICAgIHdoaWxlIChudW1iZXJPZlJlcGxpZXMgPCBhTWluUmVwbGllcykKKyAgICB7CisgICAgICAgIEZsYWdzID0gMDsgLy9NU0dfUEFSVElBTDsKKyAgICAgICAgcmVzdWx0ID0gV1NBUmVjdkZyb20oU29ja2V0LCAmV1NBUmVjdkJ1ZmZlciwgMSwgJmNiUmVjZWl2ZWQsICZGbGFncywgKFNPQ0tBRERSKikmRGVzdGluYXRpb25BZGRyZXNzLCAmY2JEZXN0aW5hdGlvbkFkZHJlc3MsICZPdmVybGFwcGVkLCBOVUxMKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFdTQUdldExhc3RFcnJvcigpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBXU0FfSU9fUEVORElORykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpc1BlbmRpbmcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiV1NBUmVjdkZyb20gZmFpbGVkLCAweCV4XHJcbiIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzUGVuZGluZykKKyAgICAgICAgeworICAgICAgICAgICAgLy9wcmludGYoIndhaXRpbmcgZm9yIGNvbXBsZXRpb24gZXZlbnQuLi5cclxuIik7CisgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgcmVjZWl2ZSB0byBjb21wbGV0ZQorICAgICAgICAgICAgVUxPTkdMT05HIGVsYXBzZWQgPSAoR2V0VGlja0NvdW50NjQoKSAtIFN0YXJ0VGljayk7CisgICAgICAgICAgICByZXN1bHQgPSBXU0FXYWl0Rm9yTXVsdGlwbGVFdmVudHMoMSwgJk92ZXJsYXBwZWQuaEV2ZW50LCBUUlVFLCAoRFdPUkQpKGFUaW1lb3V0IC0gbWluKGFUaW1lb3V0LCBlbGFwc2VkKSksIFRSVUUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBXU0FfV0FJVF9USU1FT1VUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJyZWN2IHRpbWVvdXRcclxuIik7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IFdTQV9XQUlUX0ZBSUxFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoInJlY3YgZmFpbGVkXHJcbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IFdTQUdldE92ZXJsYXBwZWRSZXN1bHQoU29ja2V0LCAmT3ZlcmxhcHBlZCwgJmNiUmVjZWl2ZWQsIFRSVUUsICZGbGFncyk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiV1NBR2V0T3ZlcmxhcHBlZFJlc3VsdCBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbnVtYmVyT2ZSZXBsaWVzKys7CisgICAgfQorCitleGl0OgorICAgIAorICAgIC8vIFJldmVydCB0aGUgY29tcGFybWVudCBpZiBuZWNlc3NhcnkKKyAgICBpZiAoUmV2ZXJ0Q29tcGFydG1lbnRPbkV4aXQpCisgICAgeworICAgICAgICAoVk9JRClTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZChPcmlnaW5hbENvbXBhcnRtZW50SUQpOworICAgIH0KKworICAgIGZyZWUoUmVjdkJ1ZmZlcik7CisgICAgZnJlZShTZW5kQnVmZmVyKTsKKworICAgIFdTQUNsb3NlRXZlbnQoT3ZlcmxhcHBlZC5oRXZlbnQpOworCisgICAgaWYgKFNvY2tldCAhPSBJTlZBTElEX1NPQ0tFVCkgY2xvc2Vzb2NrZXQoU29ja2V0KTsKKworICAgIG90TG9nRnVuY0V4aXQoKTsKKworICAgIHJldHVybiBudW1iZXJPZlJlcGxpZXM7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhUm91dGVySml0dGVyKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdICVkIiwgYU5vZGUtPm1JZCwgYVJvdXRlckppdHRlcik7CisgICAgcHJpbnRmKCIlZDogcm91dGVyc2VsZWN0aW9uaml0dGVyICVkXHJcbiIsIGFOb2RlLT5tSWQsIGFSb3V0ZXJKaXR0ZXIpOworICAgIG90VGhyZWFkU2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKGFOb2RlLT5tSW5zdGFuY2UsIGFSb3V0ZXJKaXR0ZXIpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNvbW1pc3Npb25lckFubm91bmNlQmVnaW4ob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCB1aW50OF90IGFDb3VudCwgdWludDE2X3QgYVBlcmlvZCwgY29uc3QgY2hhciAqYUFkZHIpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gMHglMDh4ICVkICVkICVzIiwgYU5vZGUtPm1JZCwgYUNoYW5uZWxNYXNrLCBhQ291bnQsIGFQZXJpb2QsIGFBZGRyKTsKKyAgICBwcmludGYoIiVkOiBjb21taXNzaW9uZXIgYW5ub3VuY2UgMHglMDh4ICVkICVkICVzXHJcbiIsIGFOb2RlLT5tSWQsIGFDaGFubmVsTWFzaywgYUNvdW50LCBhUGVyaW9kLCBhQWRkcik7CisKKyAgICBvdElwNkFkZHJlc3MgYUFkZHJlc3M7CisgICAgYXV0byBlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYUFkZHIsICZhQWRkcmVzcyk7CisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpIHJldHVybiBlcnJvcjsKKworICAgIGF1dG8gcmVzdWx0ID0gb3RDb21taXNzaW9uZXJBbm5vdW5jZUJlZ2luKGFOb2RlLT5tSW5zdGFuY2UsIGFDaGFubmVsTWFzaywgYUNvdW50LCBhUGVyaW9kLCAmYUFkZHJlc3MpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0QWN0aXZlRGF0YXNldChvdE5vZGUqIGFOb2RlLCB1aW50NjRfdCBhVGltZXN0YW1wLCB1aW50MTZfdCBhUGFuSWQsIHVpbnQxNl90IGFDaGFubmVsLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXkpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gMHglbGxYICVkICVkIiwgYU5vZGUtPm1JZCwgYVRpbWVzdGFtcCwgYVBhbklkLCBhQ2hhbm5lbCk7CisgICAgcHJpbnRmKCIlZDogZGF0YXNldCBzZXQgYWN0aXZlIDB4JWxsWCAlZCAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhVGltZXN0YW1wLCBhUGFuSWQsIGFDaGFubmVsKTsKKworICAgIG90T3BlcmF0aW9uYWxEYXRhc2V0IGFEYXRhc2V0ID0ge307CisKKyAgICBhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gYVRpbWVzdGFtcDsKKyAgICBhRGF0YXNldC5tSXNBY3RpdmVUaW1lc3RhbXBTZXQgPSB0cnVlOworCisgICAgaWYgKGFQYW5JZCAhPSAwKQorICAgIHsKKyAgICAgICAgYURhdGFzZXQubVBhbklkID0gYVBhbklkOworICAgICAgICBhRGF0YXNldC5tSXNQYW5JZFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFDaGFubmVsICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbCA9IGFDaGFubmVsOworICAgICAgICBhRGF0YXNldC5tSXNDaGFubmVsU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYUNoYW5uZWxNYXNrICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbE1hc2tQYWdlMCA9IGFDaGFubmVsTWFzazsKKyAgICAgICAgYURhdGFzZXQubUlzQ2hhbm5lbE1hc2tQYWdlMFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFNYXN0ZXJLZXkgIT0gTlVMTCAmJiBzdHJsZW4oYU1hc3RlcktleSkgIT0gMCkKKyAgICB7CisgICAgICAgIGludCBrZXlMZW5ndGg7CisgICAgICAgIGlmICgoa2V5TGVuZ3RoID0gSGV4MkJpbihhTWFzdGVyS2V5LCBhRGF0YXNldC5tTWFzdGVyS2V5Lm04LCBzaXplb2YoYURhdGFzZXQubU1hc3RlcktleSkpKSAhPSBPVF9NQVNURVJfS0VZX1NJWkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiaW52YWxpZCBsZW5ndGgga2V5ICVkXHJcbiIsIGtleUxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfUEFSU0U7CisgICAgICAgIH0KKyAgICAgICAgYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRvIHJlc3VsdCA9IG90RGF0YXNldFNldEFjdGl2ZShhTm9kZS0+bUluc3RhbmNlLCAmYURhdGFzZXQpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0UGVuZGluZ0RhdGFzZXQob3ROb2RlKiBhTm9kZSwgdWludDY0X3QgYUFjdGl2ZVRpbWVzdGFtcCwgdWludDY0X3QgYVBlbmRpbmdUaW1lc3RhbXAsIHVpbnQxNl90IGFQYW5JZCwgdWludDE2X3QgYUNoYW5uZWwpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gMHglbGxYIDB4JWxsWCAlZCAlZCIsIGFOb2RlLT5tSWQsIGFBY3RpdmVUaW1lc3RhbXAsIGFQZW5kaW5nVGltZXN0YW1wLCBhUGFuSWQsIGFDaGFubmVsKTsKKyAgICBwcmludGYoIiVkOiBkYXRhc2V0IHNldCBwZW5kaW5nIDB4JWxsWCAweCVsbFggJWQgJWRcclxuIiwgYU5vZGUtPm1JZCwgYUFjdGl2ZVRpbWVzdGFtcCwgYVBlbmRpbmdUaW1lc3RhbXAsIGFQYW5JZCwgYUNoYW5uZWwpOworCisgICAgb3RPcGVyYXRpb25hbERhdGFzZXQgYURhdGFzZXQgPSB7fTsKKworICAgIGlmIChhQWN0aXZlVGltZXN0YW1wICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gYUFjdGl2ZVRpbWVzdGFtcDsKKyAgICAgICAgYURhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYVBlbmRpbmdUaW1lc3RhbXAgIT0gMCkKKyAgICB7CisgICAgICAgIGFEYXRhc2V0Lm1QZW5kaW5nVGltZXN0YW1wID0gYVBlbmRpbmdUaW1lc3RhbXA7CisgICAgICAgIGFEYXRhc2V0Lm1Jc1BlbmRpbmdUaW1lc3RhbXBTZXQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChhUGFuSWQgIT0gMCkKKyAgICB7CisgICAgICAgIGFEYXRhc2V0Lm1QYW5JZCA9IGFQYW5JZDsKKyAgICAgICAgYURhdGFzZXQubUlzUGFuSWRTZXQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChhQ2hhbm5lbCAhPSAwKQorICAgIHsKKyAgICAgICAgYURhdGFzZXQubUNoYW5uZWwgPSBhQ2hhbm5lbDsKKyAgICAgICAgYURhdGFzZXQubUlzQ2hhbm5lbFNldCA9IHRydWU7CisgICAgfQorCisgICAgYXV0byByZXN1bHQgPSBvdERhdGFzZXRTZXRQZW5kaW5nKGFOb2RlLT5tSW5zdGFuY2UsICZhRGF0YXNldCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZW5kUGVuZGluZ1NldChvdE5vZGUqIGFOb2RlLCB1aW50NjRfdCBhQWN0aXZlVGltZXN0YW1wLCB1aW50NjRfdCBhUGVuZGluZ1RpbWVzdGFtcCwgdWludDMyX3QgYURlbGF5VGltZXIsIHVpbnQxNl90IGFQYW5JZCwgdWludDE2X3QgYUNoYW5uZWwsIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXksIGNvbnN0IGNoYXIgKmFNZXNoTG9jYWwsIGNvbnN0IGNoYXIgKmFOZXR3b3JrTmFtZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAweCVsbFggMHglbGxYICVkICVkIiwgYU5vZGUtPm1JZCwgYUFjdGl2ZVRpbWVzdGFtcCwgYVBlbmRpbmdUaW1lc3RhbXAsIGFQYW5JZCwgYUNoYW5uZWwpOworICAgIHByaW50ZigiJWQ6IGRhdGFzZXQgc2VuZCBwZW5kaW5nIDB4JWxsWCAweCVsbFggJWQgJWRcclxuIiwgYU5vZGUtPm1JZCwgYUFjdGl2ZVRpbWVzdGFtcCwgYVBlbmRpbmdUaW1lc3RhbXAsIGFQYW5JZCwgYUNoYW5uZWwpOworCisgICAgb3RPcGVyYXRpb25hbERhdGFzZXQgYURhdGFzZXQgPSB7fTsKKworICAgIGlmIChhQWN0aXZlVGltZXN0YW1wICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gYUFjdGl2ZVRpbWVzdGFtcDsKKyAgICAgICAgYURhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYVBlbmRpbmdUaW1lc3RhbXAgIT0gMCkKKyAgICB7CisgICAgICAgIGFEYXRhc2V0Lm1QZW5kaW5nVGltZXN0YW1wID0gYVBlbmRpbmdUaW1lc3RhbXA7CisgICAgICAgIGFEYXRhc2V0Lm1Jc1BlbmRpbmdUaW1lc3RhbXBTZXQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChhRGVsYXlUaW1lciAhPSAwKQorICAgIHsKKyAgICAgICAgYURhdGFzZXQubURlbGF5ID0gYURlbGF5VGltZXI7CisgICAgICAgIGFEYXRhc2V0Lm1Jc0RlbGF5U2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYVBhbklkICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tUGFuSWQgPSBhUGFuSWQ7CisgICAgICAgIGFEYXRhc2V0Lm1Jc1BhbklkU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYUNoYW5uZWwgIT0gMCkKKyAgICB7CisgICAgICAgIGFEYXRhc2V0Lm1DaGFubmVsID0gYUNoYW5uZWw7CisgICAgICAgIGFEYXRhc2V0Lm1Jc0NoYW5uZWxTZXQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChhTWFzdGVyS2V5ICE9IE5VTEwgJiYgc3RybGVuKGFNYXN0ZXJLZXkpICE9IDApCisgICAgeworICAgICAgICBpbnQga2V5TGVuZ3RoOworICAgICAgICBpZiAoKGtleUxlbmd0aCA9IEhleDJCaW4oYU1hc3RlcktleSwgYURhdGFzZXQubU1hc3RlcktleS5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1NYXN0ZXJLZXkpKSkgIT0gT1RfTUFTVEVSX0tFWV9TSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImludmFsaWQgbGVuZ3RoIGtleSAlZFxyXG4iLCBrZXlMZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX1BBUlNFOworICAgICAgICB9CisgICAgICAgIGFEYXRhc2V0Lm1Jc01hc3RlcktleVNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFNZXNoTG9jYWwgIT0gTlVMTCAmJiBzdHJsZW4oYU1lc2hMb2NhbCkgIT0gMCkKKyAgICB7CisgICAgICAgIG90SXA2QWRkcmVzcyBwcmVmaXg7CisgICAgICAgIGF1dG8gZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFNZXNoTG9jYWwsICZwcmVmaXgpOworICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkgcmV0dXJuIGVycm9yOworICAgICAgICBtZW1jcHkoYURhdGFzZXQubU1lc2hMb2NhbFByZWZpeC5tOCwgcHJlZml4Lm1GaWVsZHMubTgsIHNpemVvZihhRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04KSk7CisgICAgICAgIGFEYXRhc2V0Lm1Jc01lc2hMb2NhbFByZWZpeFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFOZXR3b3JrTmFtZSAhPSBOVUxMICYmIHN0cmxlbihhTmV0d29ya05hbWUpICE9IDApCisgICAgeworICAgICAgICBzdHJjcHlfcyhhRGF0YXNldC5tTmV0d29ya05hbWUubTgsIHNpemVvZihhRGF0YXNldC5tTmV0d29ya05hbWUubTgpLCBhTmV0d29ya05hbWUpOworICAgICAgICBhRGF0YXNldC5tSXNOZXR3b3JrTmFtZVNldCA9IHRydWU7CisgICAgfQorCisgICAgYXV0byByZXN1bHQgPSBvdERhdGFzZXRTZW5kTWdtdFBlbmRpbmdTZXQoYU5vZGUtPm1JbnN0YW5jZSwgJmFEYXRhc2V0LCBudWxscHRyLCAwKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNlbmRBY3RpdmVTZXQob3ROb2RlKiBhTm9kZSwgdWludDY0X3QgYUFjdGl2ZVRpbWVzdGFtcCwgdWludDE2X3QgYVBhbklkLCB1aW50MTZfdCBhQ2hhbm5lbCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCBjb25zdCBjaGFyICphRXh0UGFuSWQsIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXksIGNvbnN0IGNoYXIgKmFNZXNoTG9jYWwsIGNvbnN0IGNoYXIgKmFOZXR3b3JrTmFtZSwgY29uc3QgY2hhciAqYUJpbmFyeSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAweCVsbFggJWQgJWQiLCBhTm9kZS0+bUlkLCBhQWN0aXZlVGltZXN0YW1wLCBhUGFuSWQsIGFDaGFubmVsKTsKKyAgICBwcmludGYoIiVkOiBkYXRhc2V0IHNlbmQgYWN0aXZlIDB4JWxsWCAlZCAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhQWN0aXZlVGltZXN0YW1wLCBhUGFuSWQsIGFDaGFubmVsKTsKKworICAgIG90T3BlcmF0aW9uYWxEYXRhc2V0IGFEYXRhc2V0ID0ge307CisgICAgdWludDhfdCB0bHZzWzEyOF07CisgICAgdWludDhfdCB0bHZzTGVuZ3RoID0gMDsKKworICAgIGlmIChhQWN0aXZlVGltZXN0YW1wICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gYUFjdGl2ZVRpbWVzdGFtcDsKKyAgICAgICAgYURhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGFQYW5JZCAhPSAwKQorICAgIHsKKyAgICAgICAgYURhdGFzZXQubVBhbklkID0gYVBhbklkOworICAgICAgICBhRGF0YXNldC5tSXNQYW5JZFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFDaGFubmVsICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbCA9IGFDaGFubmVsOworICAgICAgICBhRGF0YXNldC5tSXNDaGFubmVsU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYUNoYW5uZWxNYXNrICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbE1hc2tQYWdlMCA9IGFDaGFubmVsTWFzazsKKyAgICAgICAgYURhdGFzZXQubUlzQ2hhbm5lbE1hc2tQYWdlMFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFFeHRQYW5JZCAhPSBOVUxMICYmIHN0cmxlbihhRXh0UGFuSWQpICE9IDApCisgICAgeworICAgICAgICBpbnQga2V5TGVuZ3RoOworICAgICAgICBpZiAoKGtleUxlbmd0aCA9IEhleDJCaW4oYUV4dFBhbklkLCBhRGF0YXNldC5tRXh0ZW5kZWRQYW5JZC5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkKSkpICE9IE9UX0VYVF9QQU5fSURfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJpbnZhbGlkIGxlbmd0aCBleHQgcGFuIGlkICVkXHJcbiIsIGtleUxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfUEFSU0U7CisgICAgICAgIH0KKyAgICAgICAgYURhdGFzZXQubUlzRXh0ZW5kZWRQYW5JZFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFNYXN0ZXJLZXkgIT0gTlVMTCAmJiBzdHJsZW4oYU1hc3RlcktleSkgIT0gMCkKKyAgICB7CisgICAgICAgIGludCBrZXlMZW5ndGg7CisgICAgICAgIGlmICgoa2V5TGVuZ3RoID0gSGV4MkJpbihhTWFzdGVyS2V5LCBhRGF0YXNldC5tTWFzdGVyS2V5Lm04LCBzaXplb2YoYURhdGFzZXQubU1hc3RlcktleSkpKSAhPSBPVF9NQVNURVJfS0VZX1NJWkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiaW52YWxpZCBsZW5ndGgga2V5ICVkXHJcbiIsIGtleUxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfUEFSU0U7CisgICAgICAgIH0KKyAgICAgICAgYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYU1lc2hMb2NhbCAhPSBOVUxMICYmIHN0cmxlbihhTWVzaExvY2FsKSAhPSAwKQorICAgIHsKKyAgICAgICAgb3RJcDZBZGRyZXNzIHByZWZpeDsKKyAgICAgICAgYXV0byBlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYU1lc2hMb2NhbCwgJnByZWZpeCk7CisgICAgICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKSByZXR1cm4gZXJyb3I7CisgICAgICAgIG1lbWNweShhRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04LCBwcmVmaXgubUZpZWxkcy5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1NZXNoTG9jYWxQcmVmaXgubTgpKTsKKyAgICAgICAgYURhdGFzZXQubUlzTWVzaExvY2FsUHJlZml4U2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYU5ldHdvcmtOYW1lICE9IE5VTEwgJiYgc3RybGVuKGFOZXR3b3JrTmFtZSkgIT0gMCkKKyAgICB7CisgICAgICAgIHN0cmNweV9zKGFEYXRhc2V0Lm1OZXR3b3JrTmFtZS5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1OZXR3b3JrTmFtZS5tOCksIGFOZXR3b3JrTmFtZSk7CisgICAgICAgIGFEYXRhc2V0Lm1Jc05ldHdvcmtOYW1lU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYUJpbmFyeSAhPSBOVUxMICYmIHN0cmxlbihhQmluYXJ5KSAhPSAwKQorICAgIHsKKyAgICAgICAgaW50IGxlbmd0aDsKKyAgICAgICAgaWYgKChsZW5ndGggPSBIZXgyQmluKGFCaW5hcnksdGx2cywgc2l6ZW9mKHRsdnMpKSkgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImludmFsaWQgbGVuZ3RoIHRsdnMgJWRcclxuIiwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBPVF9FUlJPUl9QQVJTRTsKKyAgICAgICAgfQorICAgICAgICB0bHZzTGVuZ3RoID0gKHVpbnQ4X3QpbGVuZ3RoOworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gb3REYXRhc2V0U2VuZE1nbXRBY3RpdmVTZXQoYU5vZGUtPm1JbnN0YW5jZSwgJmFEYXRhc2V0LCB0bHZzTGVuZ3RoID09IDAgPyBudWxscHRyIDogdGx2cywgdGx2c0xlbmd0aCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRNYXhDaGlsZHJlbihvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFNYXhDaGlsZHJlbikKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAlZCIsIGFOb2RlLT5tSWQsIGFNYXhDaGlsZHJlbik7CisgICAgcHJpbnRmKCIlZDogY2hpbGRtYXggJWRcclxuIiwgYU5vZGUtPm1JZCwgYU1heENoaWxkcmVuKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90VGhyZWFkU2V0TWF4QWxsb3dlZENoaWxkcmVuKGFOb2RlLT5tSW5zdGFuY2UsIGFNYXhDaGlsZHJlbik7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3R5cGVkZWYgc3RydWN0IG90TWFjRnJhbWVFbnRyeQoreworICAgIG90TWFjRnJhbWUgIEZyYW1lOworICAgIExJU1RfRU5UUlkgIExpbms7Cit9IG90TWFjRnJhbWVFbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3Qgb3RMaXN0ZW5lcgoreworICAgIEhBTkRMRSAgICAgICAgICAgICAgbUxpc3RlbmVyOworICAgIENSSVRJQ0FMX1NFQ1RJT04gICAgbUNTOworICAgIEhBTkRMRSAgICAgICAgICAgICAgbVN0b3BFdmVudDsKKyAgICBIQU5ETEUgICAgICAgICAgICAgIG1GcmFtZXNVcGRhdGVkRXZlbnQ7CisgICAgTElTVF9FTlRSWSAgICAgICAgICBtRnJhbWVzOyAvLyBMaXN0IG9mIG90TWFjRnJhbWVFbnRyeQorfSBvdExpc3RlbmVyOworCit2b2lkCitvdExpc3RlbmVyQ2FsbGJhY2soCisgICAgX0luX29wdF8gUFZPSUQgYUNvbnRleHQsCisgICAgX0luXyBVTE9ORyBTb3VyY2VJbnRlcmZhY2VJbmRleCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEZyYW1lTGVuZ3RoKSBQVUNIQVIgRnJhbWVCdWZmZXIsCisgICAgX0luXyBVQ0hBUiBGcmFtZUxlbmd0aCwKKyAgICBfSW5fIFVDSEFSIENoYW5uZWwKKykKK3sKKyAgICBvdExpc3RlbmVyKiBhTGlzdGVuZXIgPSAob3RMaXN0ZW5lciopYUNvbnRleHQ7CisgICAgYXNzZXJ0KGFMaXN0ZW5lcik7CisKKyAgICBpZiAoRnJhbWVMZW5ndGgpCisgICAgeworICAgICAgICBvdE1hY0ZyYW1lRW50cnkqIGVudHJ5ID0gbmV3IG90TWFjRnJhbWVFbnRyeTsKKyAgICAgICAgZW50cnktPkZyYW1lLmJ1ZmZlclswXSA9IENoYW5uZWw7CisgICAgICAgIG1lbWNweV9zKGVudHJ5LT5GcmFtZS5idWZmZXIgKyAxLCBzaXplb2YoZW50cnktPkZyYW1lLmJ1ZmZlcikgLSAxLCBGcmFtZUJ1ZmZlciwgRnJhbWVMZW5ndGgpOworICAgICAgICBlbnRyeS0+RnJhbWUubGVuZ3RoID0gRnJhbWVMZW5ndGggKyAxOworICAgICAgICBlbnRyeS0+RnJhbWUubm9kZWlkID0gKHVpbnQzMl90KS0xOworCisgICAgICAgIC8vIExvb2sgdXAgdGhlIE5vZGUgSUQgZnJvbSBieSBpbnRlcmZhY2UgZ3VpZAorICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGdOb2Rlcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGdOb2Rlc1tpXS0+bUludGVyZmFjZUluZGV4ID09IFNvdXJjZUludGVyZmFjZUluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudHJ5LT5GcmFtZS5ub2RlaWQgPSBnTm9kZXNbaV0tPm1JZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKworICAgICAgICAvLyBQdXNoIHRoZSBmcmFtZSBvbiB0aGUgbGlzdCB0byBwcm9jZXNzCisgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZhTGlzdGVuZXItPm1DUyk7CisgICAgICAgIEluc2VydFRhaWxMaXN0KCZhTGlzdGVuZXItPm1GcmFtZXMsICZlbnRyeS0+TGluayk7CisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhTGlzdGVuZXItPm1DUyk7CisKKyAgICAgICAgLy8gU2V0IGV2ZW50IGluZGljYXRpbmcgd2UgaGF2ZSBhIG5ldyBmcmFtZSB0byBwcm9jZXNzCisgICAgICAgIFNldEV2ZW50KGFMaXN0ZW5lci0+bUZyYW1lc1VwZGF0ZWRFdmVudCk7CisgICAgfQorfQorCitPVE5PREVBUEkgb3RMaXN0ZW5lciogT1RDQUxMIG90TGlzdGVuZXJJbml0KHVpbnQzMl90IC8qIG5vZGVpZCAqLykKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgYXV0byBBcGlJbnN0YW5jZSA9IEdldEFwaUluc3RhbmNlKCk7CisgICAgaWYgKEFwaUluc3RhbmNlID09IG51bGxwdHIpCisgICAgeworICAgICAgICBwcmludGYoIkdldEFwaUluc3RhbmNlIGZhaWxlZCFcclxuIik7CisgICAgICAgIG90TG9nRnVuY0V4aXRNc2coIkdldEFwaUluc3RhbmNlIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBvdExpc3RlbmVyICpsaXN0ZW5lciA9IG5ldyBvdExpc3RlbmVyKCk7CisgICAgYXNzZXJ0KGxpc3RlbmVyKTsKKworICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJmxpc3RlbmVyLT5tQ1MpOworICAgIGxpc3RlbmVyLT5tU3RvcEV2ZW50ID0gQ3JlYXRlRXZlbnQobnVsbHB0ciwgVFJVRSwgRkFMU0UsIG51bGxwdHIpOworICAgIGxpc3RlbmVyLT5tRnJhbWVzVXBkYXRlZEV2ZW50ID0gQ3JlYXRlRXZlbnQobnVsbHB0ciwgRkFMU0UsIEZBTFNFLCBudWxscHRyKTsKKyAgICBJbml0aWFsaXplTGlzdEhlYWQoJmxpc3RlbmVyLT5tRnJhbWVzKTsKKworICAgIC8vIENyZWF0ZSB0aGUgbGlzdGVuZXIKKyAgICBsaXN0ZW5lci0+bUxpc3RlbmVyID0gb3R2bXBMaXN0ZW5lckNyZWF0ZSgmZ1RvcG9sb2d5R3VpZCk7CisgICAgaWYgKGxpc3RlbmVyLT5tTGlzdGVuZXIgPT0gbnVsbHB0cikgZ290byBlcnJvcjsKKworICAgIC8vIFJlZ2lzdGVyIGZvciBjYWxsYmFja3MKKyAgICBvdHZtcExpc3RlbmVyUmVnaXN0ZXIobGlzdGVuZXItPm1MaXN0ZW5lciwgb3RMaXN0ZW5lckNhbGxiYWNrLCBsaXN0ZW5lcik7CisKKyAgICBwcmludGYoIlM6IFNuaWZmZXIgc3RhcnRlZFxyXG4iKTsKKworZXJyb3I6CisKKyAgICAvLyBDbGVhbiB1cCBvbiBmYWlsdXJlCisgICAgaWYgKGxpc3RlbmVyKQorICAgIHsKKyAgICAgICAgaWYgKGxpc3RlbmVyLT5tTGlzdGVuZXIgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgb3RMaXN0ZW5lckZpbmFsaXplKGxpc3RlbmVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG90TG9nRnVuY0V4aXQoKTsKKworICAgIHJldHVybiBsaXN0ZW5lcjsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90TGlzdGVuZXJGaW5hbGl6ZShvdExpc3RlbmVyKiBhTGlzdGVuZXIpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIGlmIChhTGlzdGVuZXIgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIC8vIFNldCBzdG9wIGV2ZW50IHRvIHByZXZlbnQgY2FuY2VsIGFueSBwZW5kaW5nIG90TGlzdGVuZXJSZWFkIGNhbGxzCisgICAgICAgIFNldEV2ZW50KGFMaXN0ZW5lci0+bVN0b3BFdmVudCk7CisKKyAgICAgICAgaWYgKGFMaXN0ZW5lci0+bUxpc3RlbmVyKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVbnJlZ2lzdGVycyAoYW5kIHdhaXRzIGZvciBjYWxsYmFja3MgdG8gY29tcGxldGUpIGFuZCBjbGVhbnMgdXAgdGhlIGhhbmRsZQorICAgICAgICAgICAgb3R2bXBMaXN0ZW5lckRlc3Ryb3koYUxpc3RlbmVyLT5tTGlzdGVuZXIpOworICAgICAgICAgICAgYUxpc3RlbmVyLT5tTGlzdGVuZXIgPSBudWxscHRyOworCisgICAgICAgICAgICAvLyBDbGVhbiB1cCBsZWZ0IG92ZXIgZnJhbWVzCisgICAgICAgICAgICBQTElTVF9FTlRSWSBMaW5rID0gYUxpc3RlbmVyLT5tRnJhbWVzLkZsaW5rOworICAgICAgICAgICAgd2hpbGUgKExpbmsgIT0gJmFMaXN0ZW5lci0+bUZyYW1lcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdE1hY0ZyYW1lRW50cnkgKmVudHJ5ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgb3RNYWNGcmFtZUVudHJ5LCBMaW5rKTsKKyAgICAgICAgICAgICAgICBMaW5rID0gTGluay0+Rmxpbms7CisgICAgICAgICAgICAgICAgZGVsZXRlIGVudHJ5OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcmludGYoIlM6IFNuaWZmZXIgc3RvcHBlZFxyXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENsZWFuIHVwIGV2ZXJ5dGhpbmcgZWxzZQorICAgICAgICBDbG9zZUhhbmRsZShhTGlzdGVuZXItPm1GcmFtZXNVcGRhdGVkRXZlbnQpOworICAgICAgICBhTGlzdGVuZXItPm1GcmFtZXNVcGRhdGVkRXZlbnQgPSBudWxscHRyOworICAgICAgICBDbG9zZUhhbmRsZShhTGlzdGVuZXItPm1TdG9wRXZlbnQpOworICAgICAgICBhTGlzdGVuZXItPm1TdG9wRXZlbnQgPSBudWxscHRyOworICAgICAgICBEZWxldGVDcml0aWNhbFNlY3Rpb24oJmFMaXN0ZW5lci0+bUNTKTsKKyAgICAgICAgZGVsZXRlIGFMaXN0ZW5lcjsKKworICAgICAgICBSZWxlYXNlQXBpSW5zdGFuY2UoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90TGlzdGVuZXJSZWFkKG90TGlzdGVuZXIqIGFMaXN0ZW5lciwgb3RNYWNGcmFtZSAqYUZyYW1lKQoreworICAgIGRvCisgICAgeworICAgICAgICBib29sIGV4aXQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZhTGlzdGVuZXItPm1DUyk7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBlbmRpbmcgZnJhbWUsIHJldHVybiBpdCBub3cKKyAgICAgICAgaWYgKCFJc0xpc3RFbXB0eSgmYUxpc3RlbmVyLT5tRnJhbWVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgUExJU1RfRU5UUlkgTGluayA9IFJlbW92ZUhlYWRMaXN0KCZhTGlzdGVuZXItPm1GcmFtZXMpOworICAgICAgICAgICAgb3RNYWNGcmFtZUVudHJ5ICplbnRyeSA9IENPTlRBSU5JTkdfUkVDT1JEKExpbmssIG90TWFjRnJhbWVFbnRyeSwgTGluayk7CisgICAgICAgICAgICAqYUZyYW1lID0gZW50cnktPkZyYW1lOworICAgICAgICAgICAgZGVsZXRlIGVudHJ5OworICAgICAgICAgICAgZXhpdCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYUxpc3RlbmVyLT5tQ1MpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4aXQpIGJyZWFrOworICAgICAgICAKKyAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHNodXRkb3duIG9yIGZyYW1lcyB1cGRhdGVkIGV2ZW50CisgICAgICAgIGF1dG8gd2FpdFJlc3VsdCA9IFdhaXRGb3JNdWx0aXBsZU9iamVjdHMoMiwgJmFMaXN0ZW5lci0+bVN0b3BFdmVudCwgRkFMU0UsIElORklOSVRFKTsKKworICAgICAgICBpZiAod2FpdFJlc3VsdCA9PSBXQUlUX09CSkVDVF8wICsgMSkgLy8gbUZyYW1lc1VwZGF0ZWRFdmVudAorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8vIG1TdG9wRXZlbnQKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfSB3aGlsZSAodHJ1ZSk7CisKKyAgICAvL3ByaW50ZigiUzogU25pZmZlciByZWFkICVkIGJ5dGVzIGZyb20gbm9kZSAlZFxyXG4iLCBhRnJhbWUtPmxlbmd0aCwgYUZyYW1lLT5ub2RlaWQpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3ROb2RlQXBpL3ByZWNvbXAuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdE5vZGVBcGkvcHJlY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MWQ1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3ROb2RlQXBpL3ByZWNvbXAuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5udC5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MyaXBkZWYuaD4KKyNpbmNsdWRlIDxJUEhscEFwaS5oPgorI2luY2x1ZGUgPG1zdGNwaXAuaD4KKyNpbmNsdWRlIDxycGMuaD4KKyNpbmNsdWRlIDxycGNkY2UuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPHR1cGxlPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisvLyBEZWZpbmUgdG8gZXhwb3J0IG5lY2Vzc2FyeSBmdW5jdGlvbnMKKyNkZWZpbmUgT1RETEwKKyNkZWZpbmUgT1ROT0RFQVBJIEVYVEVSTl9DIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9ib3JkZXJfcm91dGVyLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9kYXRhc2V0X2Z0ZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdGhyZWFkX2Z0ZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvY29tbWlzc2lvbmVyLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9qb2luZXIuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmctd2luZG93cy5oPgorI2luY2x1ZGUgPG90Tm9kZS5oPgorCit2b2lkIFVubG9hZCgpOworCitGT1JDRUlOTElORQorVk9JRAorSW5pdGlhbGl6ZUxpc3RIZWFkKAorICAgIF9PdXRfIFBMSVNUX0VOVFJZIExpc3RIZWFkCisgICAgKQoreworICAgIExpc3RIZWFkLT5GbGluayA9IExpc3RIZWFkLT5CbGluayA9IExpc3RIZWFkOworfQorCitGT1JDRUlOTElORQorUExJU1RfRU5UUlkKK1JlbW92ZUhlYWRMaXN0KAorICAgIF9Jbm91dF8gUExJU1RfRU5UUlkgTGlzdEhlYWQKKyAgICApCisKK3sKKworICAgIFBMSVNUX0VOVFJZIEVudHJ5OworICAgIFBMSVNUX0VOVFJZIE5leHRFbnRyeTsKKyAgICBFbnRyeSA9IExpc3RIZWFkLT5GbGluazsKKyAgICBOZXh0RW50cnkgPSBFbnRyeS0+Rmxpbms7CisgICAgTGlzdEhlYWQtPkZsaW5rID0gTmV4dEVudHJ5OworICAgIE5leHRFbnRyeS0+QmxpbmsgPSBMaXN0SGVhZDsKKyAgICByZXR1cm4gRW50cnk7Cit9CisKK0ZPUkNFSU5MSU5FCitWT0lECitJbnNlcnRUYWlsTGlzdCgKKyAgICBfSW5vdXRfIFBMSVNUX0VOVFJZIExpc3RIZWFkLAorICAgIF9PdXRfIF9fZHJ2X2FsaWFzZXNNZW0gUExJU1RfRU5UUlkgRW50cnkKKyAgICApCit7CisKKyAgICBQTElTVF9FTlRSWSBQcmV2RW50cnk7CisgICAgUHJldkVudHJ5ID0gTGlzdEhlYWQtPkJsaW5rOworICAgIEVudHJ5LT5GbGluayA9IExpc3RIZWFkOworICAgIEVudHJ5LT5CbGluayA9IFByZXZFbnRyeTsKKyAgICBQcmV2RW50cnktPkZsaW5rID0gRW50cnk7CisgICAgTGlzdEhlYWQtPkJsaW5rID0gRW50cnk7Cit9CisKK19NdXN0X2luc3BlY3RfcmVzdWx0XworQk9PTEVBTgorQ0ZPUkNFSU5MSU5FCitJc0xpc3RFbXB0eSgKKyAgICBfSW5fIGNvbnN0IExJU1RfRU5UUlkgKiBMaXN0SGVhZAorICAgICkKK3sKKyAgICByZXR1cm4gKEJPT0xFQU4pKExpc3RIZWFkLT5GbGluayA9PSBMaXN0SGVhZCk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvYWRhcHRlci5jcHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvYWRhcHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgzNjU0OQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9hZGFwdGVyLmNwcApAQCAtMCwwICsxLDU0NyBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGNvZGUgdG8gbWFuYWdlIHRoZSBORVRBREFQVEVSIG9iamVjdCBmb3IgdGhlCisgKiAgIG5ldHdvcmsgYWRhcHRlci4KKyAqLworCisjaW5jbHVkZSAicGNoLmhwcCIKKyNpbmNsdWRlICJhZGFwdGVyLnRtaCIKKworUEFHRUQKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05ESVNfU1RBVFVTCitBZGFwdGVySW5pdGlhbGl6ZSgKKyAgICBfSW5fIE5ESVNfSEFORExFICAgICAgICAgICAgICAgIE1pbmlwb3J0QWRhcHRlckhhbmRsZSwKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0CisgICAgKQorLyorKyAKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBBZGFwdGVySW5pdGlhbGl6ZSBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgTmV0d29yayBBZGFwdGVyCisgICAgYXQgdGhlIHRpbWUgb2YgUG5wIEFkZCBkZXZpY2UuIAorIAorICAgIFRoaXMgcm91dGluZSBpbml0aWFsaXplcyB0aGUgY29udGV4dCBvZiB0aGUgYWRhcHRlciBvYmplY3QKKyAKK0FyZ3VtZW50czoKKyAKKyAgICBNaW5pcG9ydEFkYXB0ZXJIYW5kbGUgLSBIYW5kbGUgdG8gdGhlIE5ESVMgTWluaXBvcnQgQWRhcHRlciBvYmplY3QuCisgCisgICAgQWRhcHRlckNvbnRleHQgLSBUaGUgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIGFkYXB0ZXIKKworUmV0dXJuIFZhbHVlOgorCisgICAgTlRTVEFUVVMgLSBBIGZhaWx1cmUgaGVyZSB3aWxsIGluZGljYXRlIGEgZmF0YWwgZXJyb3IgaW4gdGhlIGRyaXZlci4KKworLS0qLworeworICAgIE5ESVNfU1RBVFVTIFN0YXR1czsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQQUdFRF9DT0RFKCk7CisgICAgCisgICAgZG8KKyAgICB7CisgICAgICAgIE5ESVNfTUlOSVBPUlRfQURBUFRFUl9SRUdJU1RSQVRJT05fQVRUUklCVVRFUyBBZGFwdGVyUmVnaXN0cmF0aW9uID0geyAwIH07CisgICAgICAgIE5ESVNfTUlOSVBPUlRfQURBUFRFUl9HRU5FUkFMX0FUVFJJQlVURVMgQWRhcHRlckdlbmVyYWwgPSB7IDAgfTsKKyAgICAgICAgTkRJU19QTV9DQVBBQklMSVRJRVMgUG1DYXBhYmlsaXRpZXMgPSB7IDAgfTsKKyAgICAgICAgCisgICAgICAgIC8vCisgICAgICAgIC8vIEZpcnN0LCBzZXQgdGhlIHJlZ2lzdHJhdGlvbiBhdHRyaWJ1dGVzLgorICAgICAgICAvLworICAgICAgICBBZGFwdGVyUmVnaXN0cmF0aW9uLkhlYWRlci5UeXBlID0gTkRJU19PQkpFQ1RfVFlQRV9NSU5JUE9SVF9BREFQVEVSX1JFR0lTVFJBVElPTl9BVFRSSUJVVEVTOworICAgICAgICBBZGFwdGVyUmVnaXN0cmF0aW9uLkhlYWRlci5TaXplID0gc2l6ZW9mKEFkYXB0ZXJSZWdpc3RyYXRpb24pOworICAgICAgICBBZGFwdGVyUmVnaXN0cmF0aW9uLkhlYWRlci5SZXZpc2lvbiA9IE5ESVNfTUlOSVBPUlRfQURBUFRFUl9SRUdJU1RSQVRJT05fQVRUUklCVVRFU19SRVZJU0lPTl8yOworCisgICAgICAgIEFkYXB0ZXJSZWdpc3RyYXRpb24uTWluaXBvcnRBZGFwdGVyQ29udGV4dCA9IEFkYXB0ZXJDb250ZXh0OworICAgICAgICBBZGFwdGVyUmVnaXN0cmF0aW9uLkF0dHJpYnV0ZUZsYWdzID0gTkRJU19NSU5JUE9SVF9BVFRSSUJVVEVTX1NVUlBSSVNFX1JFTU9WRV9PSyB8IE5ESVNfTUlOSVBPUlRfQVRUUklCVVRFU19ORElTX1dETSB8IE5ESVNfTUlOSVBPUlRfQVRUUklCVVRFU19OT19QQVVTRV9PTl9TVVNQRU5EOworICAgICAgICBBZGFwdGVyUmVnaXN0cmF0aW9uLkludGVyZmFjZVR5cGUgPSBOZGlzSW50ZXJmYWNlUE5QQnVzOworCisgICAgICAgIE5ESVNfREVDTEFSRV9NSU5JUE9SVF9BREFQVEVSX0NPTlRFWFQoX09UVE1QX0FEQVBURVJfQ09OVEVYVCk7CisgICAgICAgIFN0YXR1cyA9IE5kaXNNU2V0TWluaXBvcnRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgTWluaXBvcnRBZGFwdGVySGFuZGxlLAorICAgICAgICAgICAgKFBORElTX01JTklQT1JUX0FEQVBURVJfQVRUUklCVVRFUykmQWRhcHRlclJlZ2lzdHJhdGlvbik7CisKKyAgICAgICAgaWYgKE5ESVNfU1RBVFVTX1NVQ0NFU1MgIT0gU3RhdHVzKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlslcF0gTmRpc1NldE9wdGlvbmFsSGFuZGxlcnMgU3RhdHVzICUhTkRJU19TVEFUVVMhIiwgQWRhcHRlckNvbnRleHQsIFN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIE5leHQsIHNldCB0aGUgZ2VuZXJhbCBhdHRyaWJ1dGVzLgorICAgICAgICAvLworCisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLkhlYWRlci5UeXBlID0gTkRJU19PQkpFQ1RfVFlQRV9NSU5JUE9SVF9BREFQVEVSX0dFTkVSQUxfQVRUUklCVVRFUzsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuSGVhZGVyLlNpemUgPSBORElTX1NJWkVPRl9NSU5JUE9SVF9BREFQVEVSX0dFTkVSQUxfQVRUUklCVVRFU19SRVZJU0lPTl8yOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5IZWFkZXIuUmV2aXNpb24gPSBORElTX01JTklQT1JUX0FEQVBURVJfR0VORVJBTF9BVFRSSUJVVEVTX1JFVklTSU9OXzI7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3BlY2lmeSB0aGUgbWVkaXVtIHR5cGUgdGhhdCB0aGUgTklDIGNhbiBzdXBwb3J0IGJ1dCBub3QKKyAgICAgICAgLy8gbmVjZXNzYXJpbHkgdGhlIG1lZGl1bSB0eXBlIHRoYXQgdGhlIE5JQyBjdXJyZW50bHkgdXNlcy4KKyAgICAgICAgLy8KKyAgICAgICAgQWRhcHRlckdlbmVyYWwuTWVkaWFUeXBlID0gTklDX01FRElVTV9UWVBFOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFNwZWNpZml5IG1lZGl1bSB0eXBlIHRoYXQgdGhlIE5JQyBjdXJyZW50bHkgdXNlcy4KKyAgICAgICAgLy8KKyAgICAgICAgQWRhcHRlckdlbmVyYWwuUGh5c2ljYWxNZWRpdW1UeXBlID0gTmRpc1BoeXNpY2FsTWVkaXVtTmF0aXZlODAyXzE1XzQ7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgaGF2ZSB0byBsaWUgYWJvdXQgdGhlIE1UVSwgc28gdGhhdCBUQ1BJUCB3aWxsIGJpbmQgdG8gdXMuCisgICAgICAgIC8vIFNwZWNpZmljYWxseSwgd2UgaGF2ZSB0byByZWx5IHRoYXQgdGhlIFRocmVhZEx3ZiB3aWxsIGZyYWdtZW50CisgICAgICAgIC8vIHRoZSBwYWNrZXRzIGFwcHJvcHJpYXRlbHkuCisgICAgICAgIC8vCisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLk10dVNpemUgPSBIV19NQVhfRlJBTUVfU0laRTsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuTWF4WG1pdExpbmtTcGVlZCA9IE5JQ19SRUNWX1hNSVRfU1BFRUQ7CisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLlhtaXRMaW5rU3BlZWQgPSBOSUNfUkVDVl9YTUlUX1NQRUVEOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5NYXhSY3ZMaW5rU3BlZWQgPSBOSUNfUkVDVl9YTUlUX1NQRUVEOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5SY3ZMaW5rU3BlZWQgPSBOSUNfUkVDVl9YTUlUX1NQRUVEOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5NZWRpYUNvbm5lY3RTdGF0ZSA9IE1lZGlhQ29ubmVjdFN0YXRlQ29ubmVjdGVkOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5NZWRpYUR1cGxleFN0YXRlID0gTWVkaWFEdXBsZXhTdGF0ZUZ1bGw7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoZSBOSUMgY2FuIHByb3ZpZGUgYXMgbG9va2FoZWFkIGRhdGEuCisgICAgICAgIC8vIElmIHRoYXQgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIHNpemUgb2YgdGhlIGxvb2thaGVhZCBidWZmZXIKKyAgICAgICAgLy8gc3VwcG9ydGVkIGJ5IGJvdW5kIHByb3RvY29scywgTkRJUyB3aWxsIGNhbGwgTWluaXBvcnRPaWRSZXF1ZXN0IHRvCisgICAgICAgIC8vIHNldCB0aGUgc2l6ZSBvZiB0aGUgbG9va2FoZWFkIGJ1ZmZlciBwcm92aWRlZCBieSB0aGUgbWluaXBvcnQgZHJpdmVyCisgICAgICAgIC8vIHRvIHRoZSBtaW5pbXVtIG9mIHRoZSBtaW5pcG9ydCBkcml2ZXIgYW5kIHByb3RvY29sKHMpIHZhbHVlcy4gSWYgdGhlCisgICAgICAgIC8vIGRyaXZlciBhbHdheXMgaW5kaWNhdGVzIHVwIGZ1bGwgcGFja2V0cyB3aXRoCisgICAgICAgIC8vIE5kaXNNSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMsIGl0IHNob3VsZCBzZXQgdGhpcyB2YWx1ZSB0byB0aGUKKyAgICAgICAgLy8gbWF4aW11bSB0b3RhbCBmcmFtZSBzaXplLCB3aGljaCBleGNsdWRlcyB0aGUgaGVhZGVyLgorICAgICAgICAvLworICAgICAgICAvLyBVcHBlci1sYXllciBkcml2ZXJzIGV4YW1pbmUgbG9va2FoZWFkIGRhdGEgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYQorICAgICAgICAvLyBwYWNrZXQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvb2thaGVhZCBkYXRhIGlzIGludGVuZGVkIGZvcgorICAgICAgICAvLyBvbmUgb3IgbW9yZSBvZiB0aGVpciBjbGllbnRzLiBJZiB0aGUgdW5kZXJseWluZyBkcml2ZXIgc3VwcG9ydHMKKyAgICAgICAgLy8gbXVsdGlwYWNrZXQgcmVjZWl2ZSBpbmRpY2F0aW9ucywgYm91bmQgcHJvdG9jb2xzIGFyZSBnaXZlbiBmdWxsIG5ldAorICAgICAgICAvLyBwYWNrZXRzIG9uIGV2ZXJ5IGluZGljYXRpb24uIENvbnNlcXVlbnRseSwgdGhpcyB2YWx1ZSBpcyBpZGVudGljYWwKKyAgICAgICAgLy8gdG8gdGhhdCByZXR1cm5lZCBmb3IgT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkUuCisgICAgICAgIC8vCisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLkxvb2thaGVhZFNpemUgPSBIV19NQVhfRlJBTUVfU0laRTsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuUG93ZXJNYW5hZ2VtZW50Q2FwYWJpbGl0aWVzID0gTlVMTDsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuTWFjT3B0aW9ucyA9IE5JQ19NQUNfT1BUSU9OUzsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuU3VwcG9ydGVkUGFja2V0RmlsdGVycyA9IE5JQ19TVVBQT1JURURfRklMVEVSUzsKKworICAgICAgICAvLworICAgICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0aGUgTklDIGRyaXZlciBjYW4gbWFuYWdlLgorICAgICAgICAvLyBUaGlzIGxpc3QgaXMgZ2xvYmFsIGZvciBhbGwgcHJvdG9jb2xzIGJvdW5kIHRvIChvciBhYm92ZSkgdGhlIE5JQy4KKyAgICAgICAgLy8gQ29uc2VxdWVudGx5LCBhIHByb3RvY29sIGNhbiByZWNlaXZlIE5ESVNfU1RBVFVTX01VTFRJQ0FTVF9GVUxMIGZyb20KKyAgICAgICAgLy8gdGhlIE5JQyBkcml2ZXIgd2hlbiBhdHRlbXB0aW5nIHRvIHNldCB0aGUgbXVsdGljYXN0IGFkZHJlc3MgbGlzdCwKKyAgICAgICAgLy8gZXZlbiBpZiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBsaXN0IGlzIGxlc3MgdGhhbiB0aGUKKyAgICAgICAgLy8gbnVtYmVyIG9yaWdpbmFsbHkgcmV0dXJuZWQgZm9yIHRoaXMgcXVlcnkuCisgICAgICAgIC8vCisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLk1heE11bHRpY2FzdExpc3RTaXplID0gTklDX01BWF9NQ0FTVF9MSVNUOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5NYWNBZGRyZXNzTGVuZ3RoID0gTklDX01BQ0FERFJfU0laRTsKKworICAgICAgICAvLworICAgICAgICAvLyBSZXR1cm4gdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBOSUMgYnVybnQgaW4gdGhlIGhhcmR3YXJlLgorICAgICAgICAvLworICAgICAgICBtZW1jcHkoQWRhcHRlckdlbmVyYWwuUGVybWFuZW50TWFjQWRkcmVzcywgJkFkYXB0ZXJDb250ZXh0LT5FeHRlbmRlZEFkZHJlc3MsIHNpemVvZihBZGFwdGVyQ29udGV4dC0+RXh0ZW5kZWRBZGRyZXNzKSk7CisgICAgICAgIG1lbWNweShBZGFwdGVyR2VuZXJhbC5DdXJyZW50TWFjQWRkcmVzcywgJkFkYXB0ZXJDb250ZXh0LT5FeHRlbmRlZEFkZHJlc3MsIHNpemVvZihBZGFwdGVyQ29udGV4dC0+RXh0ZW5kZWRBZGRyZXNzKSk7CisKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuUmVjdlNjYWxlQ2FwYWJpbGl0aWVzID0gTlVMTDsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuQWNjZXNzVHlwZSA9IE5FVF9JRl9BQ0NFU1NfQlJPQURDQVNUOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5EaXJlY3Rpb25UeXBlID0gTkVUX0lGX0RJUkVDVElPTl9TRU5EUkVDRUlWRTsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuQ29ubmVjdGlvblR5cGUgPSBORVRfSUZfQ09OTkVDVElPTl9ERURJQ0FURUQ7CisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLklmVHlwZSA9IElGX1RZUEVfSUVFRTgwMjE1NDsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuSWZDb25uZWN0b3JQcmVzZW50ID0gVFJVRTsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuU3VwcG9ydGVkU3RhdGlzdGljcyA9IE5JQ19TVVBQT1JURURfU1RBVElTVElDUzsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuU3VwcG9ydGVkUGF1c2VGdW5jdGlvbnMgPSBOZGlzUGF1c2VGdW5jdGlvbnNVbnN1cHBvcnRlZDsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuRGF0YUJhY2tGaWxsU2l6ZSA9IDA7CisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLkNvbnRleHRCYWNrRmlsbFNpemUgPSAwOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBTdXBwb3J0ZWRPaWRMaXN0IGlzIGFuIGFycmF5IG9mIE9JRHMgZm9yIG9iamVjdHMgdGhhdCB0aGUKKyAgICAgICAgLy8gdW5kZXJseWluZyBkcml2ZXIgb3IgaXRzIE5JQyBzdXBwb3J0cy4gIE9iamVjdHMgaW5jbHVkZSBnZW5lcmFsLAorICAgICAgICAvLyBtZWRpYS1zcGVjaWZpYywgYW5kIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIG9iamVjdHMuIE5ESVMgZm9yd2FyZHMgYQorICAgICAgICAvLyBzdWJzZXQgb2YgdGhlIHJldHVybmVkIGxpc3QgdG8gcHJvdG9jb2xzIHRoYXQgbWFrZSB0aGlzIHF1ZXJ5LiBUaGF0CisgICAgICAgIC8vIGlzLCBORElTIGZpbHRlcnMgYW55IHN1cHBvcnRlZCBzdGF0aXN0aWNzIE9JRHMgb3V0IG9mIHRoZSBsaXN0CisgICAgICAgIC8vIGJlY2F1c2UgcHJvdG9jb2xzIG5ldmVyIG1ha2Ugc3RhdGlzdGljcyBxdWVyaWVzLgorICAgICAgICAvLworICAgICAgICBBZGFwdGVyR2VuZXJhbC5TdXBwb3J0ZWRPaWRMaXN0ID0gTklDU3VwcG9ydGVkT2lkczsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuU3VwcG9ydGVkT2lkTGlzdExlbmd0aCA9IFNpemVPZk5JQ1N1cHBvcnRlZE9pZHM7CisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLkF1dG9OZWdvdGlhdGlvbkZsYWdzID0gTkRJU19MSU5LX1NUQVRFX0RVUExFWF9BVVRPX05FR09USUFURUQ7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IHRoZSBwb3dlciBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcy4gQWxsIDAgYmFzaWNhbGx5IG1lYW5zIHdlIGRvbid0CisgICAgICAgIC8vIHN1cHBvcnQgRHggZm9yIGFueXRoaW5nLgorICAgICAgICAvLworCisgICAgICAgIFBtQ2FwYWJpbGl0aWVzLkhlYWRlci5UeXBlID0gTkRJU19PQkpFQ1RfVFlQRV9ERUZBVUxUOworICAgICAgICBQbUNhcGFiaWxpdGllcy5IZWFkZXIuU2l6ZSA9IE5ESVNfU0laRU9GX05ESVNfUE1fQ0FQQUJJTElUSUVTX1JFVklTSU9OXzI7CisgICAgICAgIFBtQ2FwYWJpbGl0aWVzLkhlYWRlci5SZXZpc2lvbiA9IE5ESVNfUE1fQ0FQQUJJTElUSUVTX1JFVklTSU9OXzI7CisKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuUG93ZXJNYW5hZ2VtZW50Q2FwYWJpbGl0aWVzRXggPSAmUG1DYXBhYmlsaXRpZXM7CisKKyAgICAgICAgU3RhdHVzID0gTmRpc01TZXRNaW5pcG9ydEF0dHJpYnV0ZXMoCisgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJIYW5kbGUsCisgICAgICAgICAgICAoUE5ESVNfTUlOSVBPUlRfQURBUFRFUl9BVFRSSUJVVEVTKSZBZGFwdGVyR2VuZXJhbCk7CisKKyAgICAgICAgaWYgKE5ESVNfU1RBVFVTX1NVQ0NFU1MgIT0gU3RhdHVzKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlslcF0gTmRpc1NldE9wdGlvbmFsSGFuZGxlcnMgZmFpbGVkICUhTkRJU19TVEFUVVMhIiwgQWRhcHRlckNvbnRleHQsIFN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoRkFMU0UpOworCisgICAgTG9nRnVuY0V4aXRORElTKERSSVZFUl9ERUZBVUxULCBTdGF0dXMpOworCisgICAgcmV0dXJuIFN0YXR1czsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzXyhQQVNTSVZFX0xFVkVMKQorVk9JRAorQWRhcHRlclVuaW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0CisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBTZXJpYWxVbmluaXRpYWxpemUoQWRhcHRlckNvbnRleHQpOworCisgICAgaWYgKEFkYXB0ZXJDb250ZXh0LT5EZXZpY2UpCisgICAgeworICAgICAgICBXZGZPYmplY3REZWxldGUoQWRhcHRlckNvbnRleHQtPkRldmljZSk7CisgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5EZXZpY2UgPSBudWxscHRyOworICAgIH0KKworICAgIE5kaXNGcmVlTWVtb3J5KEFkYXB0ZXJDb250ZXh0LCAwLCAwKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzXyggUEFTU0lWRV9MRVZFTCApCitfRnVuY3Rpb25fY2xhc3NfKCBNSU5JUE9SVF9SRVNUQVJUICkKK05ESVNfU1RBVFVTCitNUFJlc3RhcnQoCisgICAgX0luXyAgTkRJU19IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQsCisgICAgX0luXyAgUE5ESVNfTUlOSVBPUlRfUkVTVEFSVF9QQVJBTUVURVJTICAgICAgIC8qIFJlc3RhcnRQYXJhbWV0ZXJzICovCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgV2hlbiBhIG1pbmlwb3J0IHJlY2VpdmVzIGEgcmVzdGFydCByZXF1ZXN0LCBpdCBlbnRlcnMgaW50byBhIFJlc3RhcnRpbmcKKyAgICBzdGF0ZS4gIFRoZSBtaW5pcG9ydCBtYXkgYmVnaW4gaW5kaWNhdGluZyByZWNlaXZlZCBkYXRhIChlLmcuLCB1c2luZworICAgIE5kaXNNSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMpLCBoYW5kbGluZyBzdGF0dXMgaW5kaWNhdGlvbnMsIGFuZAorICAgIHByb2Nlc3NpbmcgT0lEIHJlcXVlc3RzIGluIHRoZSBSZXN0YXJ0aW5nIHN0YXRlLiAgSG93ZXZlciwgbm8gc2VuZHMgd2lsbCBiZQorICAgIHJlcXVlc3RlZCB3aGlsZSB0aGUgbWluaXBvcnQgaXMgaW4gdGhlIFJlc3RhcnRpbmcgc3RhdGUuCisKKyAgICBPbmNlIHRoZSBtaW5pcG9ydCBpcyByZWFkeSB0byBzZW5kIGRhdGEsIGl0IGhhcyBlbnRlcmVkIHRoZSBSdW5uaW5nIHN0YXRlLgorICAgIFRoZSBtaW5pcG9ydCBpbmZvcm1zIE5ESVMgdGhhdCBpdCBpcyBpbiB0aGUgUnVubmluZyBzdGF0ZSBieSByZXR1cm5pbmcKKyAgICBORElTX1NUQVRVU19TVUNDRVNTIGZyb20gdGhpcyBNaW5pcG9ydFJlc3RhcnQgZnVuY3Rpb247IG9yIGlmIHRoaXMgZnVuY3Rpb24KKyAgICBoYXMgYWxyZWFkeSByZXR1cm5lZCBORElTX1NUQVRVU19QRU5ESU5HLCBieSBjYWxsaW5nIE5kaXNNUmVzdGFydENvbXBsZXRlLgorCisKKyAgICBNaW5pcG9ydFJlc3RhcnQgcnVucyBhdCBJUlFMID0gUEFTU0lWRV9MRVZFTC4KKworQXJndW1lbnRzOgorCisgICAgTWluaXBvcnRBZGFwdGVyQ29udGV4dCAgUG9pbnRlciB0byB0aGUgQWRhcHRlcgorICAgIFJlc3RhcnRQYXJhbWV0ZXJzICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXN0YXJ0IG9wZXJhdGlvbgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBJZiB0aGUgbWluaXBvcnQgaXMgYWJsZSB0byBpbW1lZGlhdGVseSBlbnRlciB0aGUgUnVubmluZyBzdGF0ZSwgaXQgc2hvdWxkCisgICAgcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1MuCisKKyAgICBJZiB0aGUgbWluaXBvcnQgaXMgc3RpbGwgaW4gdGhlIFJlc3RhcnRpbmcgc3RhdGUsIGl0IHNob3VsZCByZXR1cm4KKyAgICBORElTX1NUQVRVU19QRU5ESU5HIG5vdywgYW5kIGNhbGwgTmRpc01SZXN0YXJ0Q29tcGxldGUgd2hlbiB0aGUgbWluaXBvcnQKKyAgICBoYXMgZW50ZXJlZCB0aGUgUnVubmluZyBzdGF0ZS4KKworICAgIE90aGVyIE5ESVNfU1RBVFVTIGNvZGVzIGluZGljYXRlIGVycm9ycy4gIElmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLCB0aGUKKyAgICBtaW5pcG9ydCBtdXN0IHJldHVybiB0byB0aGUgUGF1c2VkIHN0YXRlIChpLmUuLCBzdG9wIGluZGljYXRpbmcgcmVjZWl2ZXMpLgorCistLSovCisKK3sKKyAgICBORElTX1NUQVRVUyBzdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgQWRhcHRlckNvbnRleHQgPSAoUE9UVE1QX0FEQVBURVJfQ09OVEVYVClNaW5pcG9ydEFkYXB0ZXJDb250ZXh0OworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIC8vIFNldCB0aGUgcnVubmluZyBmbGFnCisgICAgQWRhcHRlckNvbnRleHQtPklzUnVubmluZyA9IHRydWU7CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfKCBQQVNTSVZFX0xFVkVMICkKK19GdW5jdGlvbl9jbGFzc18oIE1JTklQT1JUX1BBVVNFICkKK05ESVNfU1RBVFVTCitNUFBhdXNlKAorICAgIF9Jbl8gIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0LAorICAgIF9Jbl8gIFBORElTX01JTklQT1JUX1BBVVNFX1BBUkFNRVRFUlMgICAvKiBNaW5pcG9ydFBhdXNlUGFyYW1ldGVycyAqLworICAgICkKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFdoZW4gYSBtaW5pcG9ydCByZWNlaXZlcyBhIHBhdXNlIHJlcXVlc3QsIGl0IGVudGVycyBpbnRvIGEgUGF1c2luZyBzdGF0ZS4KKyAgICBUaGUgbWluaXBvcnQgc2hvdWxkIG5vdCBpbmRpY2F0ZSB1cCBhbnkgbW9yZSBuZXR3b3JrIGRhdGEuICBBbnkgcGVuZGluZworICAgIHNlbmQgcmVxdWVzdHMgbXVzdCBiZSBjb21wbGV0ZWQsIGFuZCBuZXcgcmVxdWVzdHMgbXVzdCBiZSByZWplY3RlZCB3aXRoCisgICAgTkRJU19TVEFUVVNfUEFVU0VELgorCisgICAgT25jZSBhbGwgc2VuZHMgaGF2ZSBiZWVuIGNvbXBsZXRlZCBhbmQgYWxsIHJlY2lldmUgTkJMcyBoYXZlIHJldHVybmVkIHRvCisgICAgdGhlIG1pbmlwb3J0LCB0aGUgbWluaXBvcnQgZW50ZXJzIHRoZSBQYXVzZWQgc3RhdGUuCisKKyAgICBXaGlsZSBwYXVzZWQsIHRoZSBtaW5pcG9ydCBjYW4gc3RpbGwgc2VydmljZSBpbnRlcnJ1cHRzIGZyb20gdGhlIGhhcmR3YXJlCisgICAgKHRvLCBmb3IgZXhhbXBsZSwgY29udGludWUgdG8gaW5kaWNhdGUgTkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVAorICAgIG5vdGlmaWNhdGlvbnMpLgorCisgICAgVGhlIG1pbmlwb3J0IG11c3QgY29udGludWUgdG8gYmUgYWJsZSB0byBoYW5kbGUgc3RhdHVzIGluZGljYXRpb25zIGFuZCBPSUQKKyAgICByZXF1ZXN0cy4gIE1pbmlwb3J0UGF1c2UgaXMgZGlmZmVyZW50IGZyb20gTWluaXBvcnRIYWx0IGJlY2F1c2UsIGluCisgICAgZ2VuZXJhbCwgdGhlIE1pbmlwb3J0UGF1c2Ugb3BlcmF0aW9uIHdvbid0IHJlbGVhc2UgYW55IHJlc291cmNlcy4KKyAgICBNaW5pcG9ydFBhdXNlIG11c3Qgbm90IGF0dGVtcHQgdG8gYWNxdWlyZSBhbnkgcmVzb3VyY2VzIHdoZXJlIGFsbG9jYXRpb24KKyAgICBjYW4gZmFpbCwgc2luY2UgTWluaXBvcnRQYXVzZSBpdHNlbGYgbXVzdCBub3QgZmFpbC4KKworCisgICAgTWluaXBvcnRQYXVzZSBydW5zIGF0IElSUUwgPSBQQVNTSVZFX0xFVkVMLgorCitBcmd1bWVudHM6CisKKyAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICBQb2ludGVyIHRvIHRoZSBBZGFwdGVyCisgICAgTWluaXBvcnRQYXVzZVBhcmFtZXRlcnMgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhdXNlIG9wZXJhdGlvbgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBJZiB0aGUgbWluaXBvcnQgaXMgYWJsZSB0byBpbW1lZGlhdGVseSBlbnRlciB0aGUgUGF1c2VkIHN0YXRlLCBpdCBzaG91bGQKKyAgICByZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUy4KKworICAgIElmIHRoZSBtaW5pcG9ydCBtdXN0IHdhaXQgZm9yIHNlbmQgY29tcGxldGlvbnMgb3IgcGVuZGluZyByZWNlaXZlIE5CTHMsIGl0CisgICAgc2hvdWxkIHJldHVybiBORElTX1NUQVRVU19QRU5ESU5HIG5vdywgYW5kIGNhbGwgTkRJU01QYXVzZUNvbXBsZXRlIHdoZW4gdGhlCisgICAgbWluaXBvcnQgaGFzIGVudGVyZWQgdGhlIFBhdXNlZCBzdGF0ZS4KKworICAgIE5vIG90aGVyIHJldHVybiB2YWx1ZSBpcyBwZXJtaXR0ZWQuICBUaGUgcGF1c2Ugb3BlcmF0aW9uIG11c3Qgbm90IGZhaWwuCisKKy0tKi8KK3sKKyAgICBORElTX1NUQVRVUyBzdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgQWRhcHRlckNvbnRleHQgPSAoUE9UVE1QX0FEQVBURVJfQ09OVEVYVClNaW5pcG9ydEFkYXB0ZXJDb250ZXh0OworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKyAgICAKKyAgICAvLyBDbGVhciB0aGUgZmxhZyB0byBpbmRpY2F0ZSB3ZSBhcmUgbm8gbG9uZ2VyIHJ1bm5pbmcKKyAgICBBZGFwdGVyQ29udGV4dC0+SXNSdW5uaW5nID0gZmFsc2U7CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitWT0lECitNUFNlbmROZXRCdWZmZXJMaXN0cygKKyAgICBfSW5fICBORElTX0hBTkRMRSAgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0LAorICAgIF9Jbl8gIFBORVRfQlVGRkVSX0xJU1QgICAgICAgIE5ldEJ1ZmZlckxpc3RzLAorICAgIF9Jbl8gIE5ESVNfUE9SVF9OVU1CRVIgICAgICAgIC8qIFBvcnROdW1iZXIgKi8sCisgICAgX0luXyAgVUxPTkcgICAgICAgICAgICAgICAgICAgU2VuZEZsYWdzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2VuZCBQYWNrZXQgQXJyYXkgaGFuZGxlci4gQ2FsbGVkIGJ5IE5ESVMgd2hlbmV2ZXIgYSBwcm90b2NvbAorICAgIGJvdW5kIHRvIG91ciBtaW5pcG9ydCBzZW5kcyBvbmUgb3IgbW9yZSBwYWNrZXRzLgorCisgICAgVGhlIGlucHV0IHBhY2tldCBkZXNjcmlwdG9yIHBvaW50ZXJzIGhhdmUgYmVlbiBvcmRlcmVkIGFjY29yZGluZworICAgIHRvIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgcGFja2V0cyBzaG91bGQgYmUgc2VudCBvdmVyIHRoZSBuZXR3b3JrCisgICAgYnkgdGhlIHByb3RvY29sIGRyaXZlciB0aGF0IHNldCB1cCB0aGUgcGFja2V0IGFycmF5LiBUaGUgTkRJUworICAgIGxpYnJhcnkgcHJlc2VydmVzIHRoZSBwcm90b2NvbC1kZXRlcm1pbmVkIG9yZGVyaW5nIHdoZW4gaXQgc3VibWl0cworICAgIGVhY2ggcGFja2V0IGFycmF5IHRvIE1pbmlwb3J0U2VuZFBhY2tldHMKKworICAgIEFzIGEgZGVzZXJpYWxpemVkIGRyaXZlciwgd2UgYXJlIHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGluY29taW5nIHNlbmQKKyAgICBwYWNrZXRzIGluIG91ciBpbnRlcm5hbCBxdWV1ZSB1bnRpbCB0aGV5IGNhbiBiZSB0cmFuc21pdHRlZCBvdmVyIHRoZQorICAgIG5ldHdvcmsgYW5kIGZvciBwcmVzZXJ2aW5nIHRoZSBwcm90b2NvbC1kZXRlcm1pbmVkIG9yZGVyaW5nIG9mIHBhY2tldAorICAgIGRlc2NyaXB0b3JzIGluY29taW5nIHRvIGl0cyBNaW5pcG9ydFNlbmRQYWNrZXRzIGZ1bmN0aW9uLgorICAgIEEgZGVzZXJpYWxpemVkIG1pbmlwb3J0IGRyaXZlciBtdXN0IGNvbXBsZXRlIGVhY2ggaW5jb21pbmcgc2VuZCBwYWNrZXQKKyAgICB3aXRoIE5kaXNNU2VuZENvbXBsZXRlLCBhbmQgaXQgY2Fubm90IGNhbGwgTmRpc01TZW5kUmVzb3VyY2VzQXZhaWxhYmxlLgorCisgICAgUnVucyBhdCBJUlFMIDw9IERJU1BBVENIX0xFVkVMCisKK0FyZ3VtZW50czoKKworICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgTmV0QnVmZmVyTGlzdHMgICAgICAgICAgICAgIEhlYWQgb2YgYSBsaXN0IG9mIE5CTHMgdG8gc2VuZAorICAgIFBvcnROdW1iZXIgICAgICAgICAgICAgICAgICBBIG1pbmlwb3J0IGFkYXB0ZXIgcG9ydC4gIERlZmF1bHQgaXMgMC4KKyAgICBTZW5kRmxhZ3MgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBmbGFncyBmb3IgdGhlIHNlbmQgb3BlcmF0aW9uCisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuICBXcml0ZSBzdGF0dXMgZGlyZWN0bHkgaW50byBlYWNoIE5CTCB3aXRoIHRoZSBORVRfQlVGRkVSX0xJU1RfU1RBVFVTCisgICAgbWFjcm8uCisKKy0tKi8KK3sKKyAgICBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0ID0gKFBPVFRNUF9BREFQVEVSX0NPTlRFWFQpTWluaXBvcnRBZGFwdGVyQ29udGV4dDsKKyAgICBQTkVUX0JVRkZFUl9MSVNUIEZhaWxlZE5ibHMgPSBOVUxMOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiTmV0QnVmZmVyTGlzdDogJXAiLCBOZXRCdWZmZXJMaXN0cyk7CisKKyAgICBQTkVUX0JVRkZFUl9MSVNUIEN1cnJOYmwgPSBOZXRCdWZmZXJMaXN0czsKKyAgICB3aGlsZSAoQ3Vyck5ibCkKKyAgICB7CisgICAgICAgIFBORVRfQlVGRkVSX0xJU1QgTmV4dE5ibCA9IEN1cnJOYmwtPk5leHQ7CisgICAgICAgIEN1cnJOYmwtPk5leHQgPSBOVUxMOworCisgICAgICAgIC8vIE9ubHkgYWxsb3cgb25lIE5CIHBlciBOQkwKKyAgICAgICAgaWYgKEN1cnJOYmwtPkZpcnN0TmV0QnVmZmVyID09IE5VTEwgfHwKKyAgICAgICAgICAgIEN1cnJOYmwtPkZpcnN0TmV0QnVmZmVyLT5OZXh0ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEN1cnJOYmwtPlN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSB0byBxdWV1ZSB1cCBmb3Igc2VuZAorICAgICAgICAgICAgTlRTVEFUVVMgc3RhdHVzID0gU2VyaWFsU2VuZERhdGEoQWRhcHRlckNvbnRleHQsIEN1cnJOYmwpOworCisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIEN1cnJOYmwtPlN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEN1cnJOYmwgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2Ugc3RpbGwgaGF2ZSB0aGUgQ3Vyck5ibCwgaXQgZmFpbGVkLCBzbyBtb3ZlIGl0IHRvIHRoZSBmYWlsdXJlIGxpc3QKKyAgICAgICAgaWYgKEN1cnJOYmwpIHsKKyAgICAgICAgICAgIEN1cnJOYmwtPk5leHQgPSBGYWlsZWROYmxzOworICAgICAgICAgICAgRmFpbGVkTmJscyA9IEN1cnJOYmw7CisgICAgICAgIH0KKworICAgICAgICBDdXJyTmJsID0gTmV4dE5ibDsKKyAgICB9CisgICAgCisgICAgLy8gQ29tcGxldGUgYW55IGZhaWx1cmVzCisgICAgaWYgKEZhaWxlZE5ibHMpIHsKKyAgICAgICAgTmRpc01TZW5kTmV0QnVmZmVyTGlzdHNDb21wbGV0ZShBZGFwdGVyQ29udGV4dC0+QWRhcHRlciwgRmFpbGVkTmJscywgKFNlbmRGbGFncyAmIE5ESVNfU0VORF9DT01QTEVURV9GTEFHU19ESVNQQVRDSF9MRVZFTCkpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworVk9JRAorTVBDYW5jZWxTZW5kKAorICAgIF9Jbl8gIE5ESVNfSEFORExFICAgICAvKiBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICovLAorICAgIF9Jbl8gIFBWT0lEICAgICAgICAgICAvKiBDYW5jZWxJZCAqLworICAgICkKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIE1pbmlwb3J0Q2FuY2VsU2VuZCBjYW5jZWxzIHRoZSB0cmFuc21pc3Npb24gb2YgYWxsIE5FVF9CVUZGRVJfTElTVHMgdGhhdAorICAgIGFyZSBtYXJrZWQgd2l0aCBhIHNwZWNpZmllZCBjYW5jZWxsYXRpb24gaWRlbnRpZmllci4gTWluaXBvcnQgZHJpdmVycworICAgIHRoYXQgcXVldWUgc2VuZCBwYWNrZXRzIGZvciBtb3JlIHRoYW4gb25lIHNlY29uZCBzaG91bGQgZXhwb3J0IHRoaXMKKyAgICBoYW5kbGVyLiBXaGVuIGEgcHJvdG9jb2wgZHJpdmVyIG9yIGludGVybWVkaWF0ZSBkcml2ZXIgY2FsbHMgdGhlCisgICAgTmRpc0NhbmNlbFNlbmROZXRCdWZmZXJMaXN0cyBmdW5jdGlvbiwgTkRJUyBjYWxscyB0aGUgTWluaXBvcnRDYW5jZWxTZW5kCisgICAgZnVuY3Rpb24gb2YgdGhlIGFwcHJvcHJpYXRlIGxvd2VyLWxldmVsIGRyaXZlciAobWluaXBvcnQgZHJpdmVyIG9yCisgICAgaW50ZXJtZWRpYXRlIGRyaXZlcikgb24gdGhlIGJpbmRpbmcuCisKKyAgICBSdW5zIGF0IElSUUwgPD0gRElTUEFUQ0hfTEVWRUwuCisKK0FyZ3VtZW50czoKKworICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgQ2FuY2VsSWQgICAgICAgICAgICAgICAgICAgIEFsbCB0aGUgcGFja2V0cyB3aXRoIHRoaXMgSWQgc2hvdWxkIGJlIGNhbmNlbGxlZAorCitSZXR1cm4gVmFsdWU6CisKKyAgICBOb25lLgorCistLSovCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworVk9JRAorTVBSZXR1cm5OZXRCdWZmZXJMaXN0cygKKyAgICBfSW5fICBORElTX0hBTkRMRSAgICAgICAvKiBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICovLAorICAgIF9Jbl8gIFBORVRfQlVGRkVSX0xJU1QgIE5ldEJ1ZmZlckxpc3RzLAorICAgIF9Jbl8gIFVMT05HICAgICAgICAgICAgIC8qIFJldHVybkZsYWdzICovCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgTkRJUyBNaW5pcG9ydCBlbnRyeSBwb2ludCBjYWxsZWQgd2hlbmV2ZXIgcHJvdG9jb2xzIGFyZSBkb25lIHdpdGggb25lIG9yCisgICAgTkJMcyB0aGF0IHdlIGluZGljYXRlZCB1cCB3aXRoIE5kaXNNSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMuCisKKyAgICBOb3RlIHRoYXQgdGhlIGxpc3Qgb2YgTkJMcyBtYXkgYmUgY2hhaW5lZCB0b2dldGhlciBmcm9tIG11bHRpcGxlIHNlcGFyYXRlCisgICAgbGlzdHMgdGhhdCB3ZXJlIGluZGljYXRlZCB1cCBpbmRpdmlkdWFsbHkuCisKK0FyZ3VtZW50czoKKworICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgTmV0QnVmZmVyTGlzdHMgICAgICAgICAgICAgIE5CTHMgYmVpbmcgcmV0dXJuZWQKKyAgICBSZXR1cm5GbGFncyAgICAgICAgICAgICAgICAgTWF5IGNvbnRhaW4gdGhlIE5ESVNfUkVUVVJOX0ZMQUdTX0RJU1BBVENIX0xFVkVMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcsIHdoaWNoIGlmIGlzIHNldCwgaW5kaWNhdGVzIHdlIGNhbiBnZXQgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbCBwZXJmIHdpbiBieSBub3QgY2hlY2tpbmcgb3IgcmFpc2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRTAorCitSZXR1cm4gVmFsdWU6CisKKyAgICBOb25lLgorCistLSovCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIE5ldEJ1ZmZlckxpc3RzCisgICAgZm9yIChQTkVUX0JVRkZFUl9MSVNUIHBOYmxOZXh0LCBwTmJsID0gTmV0QnVmZmVyTGlzdHM7IHBOYmw7IHBOYmwgPSBwTmJsTmV4dCkKKyAgICB7CisgICAgICAgIC8vIFNhdmUgbmV4dCB0byB0ZW1wb3JhcnkgYW5kIGNsZWFyIG1lbWJlciB2YXJpYWJsZQorICAgICAgICBwTmJsTmV4dCA9IE5FVF9CVUZGRVJfTElTVF9ORVhUX05CTChwTmJsKTsKKyAgICAgICAgTkVUX0JVRkZFUl9MSVNUX05FWFRfTkJMKHBOYmwpID0gTlVMTDsKKworICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBOZXRidWZmZXJzCisgICAgICAgIGZvciAoUE5FVF9CVUZGRVIgcE5iTmV4dCwgcE5iID0gTkVUX0JVRkZFUl9MSVNUX0ZJUlNUX05CKHBOYmwpOyBwTmI7IHBOYiA9IHBOYk5leHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBOYk5leHQgPSBORVRfQlVGRkVSX05FWFRfTkIocE5iKTsKKyAgICAgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyKHBOYik7CisgICAgICAgIH0KKworICAgICAgICBOZGlzRnJlZU5ldEJ1ZmZlckxpc3QocE5ibCk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2FkYXB0ZXIuaHBwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2FkYXB0ZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNTExNzEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvYWRhcHRlci5ocHAKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgSGVhZGVyIGZpbGUgZm9yIHRoZSByb3V0aW5lcyByZWxhdGVkIHRvIE5FVEFEQVBURVIgT2JqZWN0IGZvciB0aGUgCisgKiAgIE5ldHdvcmsgQWRhcHRlcgorICovCisKKyNkZWZpbmUgTklDX1RBR19SRUNWX05CTCAoKFVMT05HKSdyTVZUJykgIC8vIFRWTXIKKyNkZWZpbmUgT1RUTVBfQURBUFRFUl9DT05URVhUX1NJR05BVFVSRSAncGRBdCcKKworLy8gVGhlIG1heGltdW0gc2l6ZSBvZiBvbmUgU3BpbmVsIGNvbW1hbmQgLyBzZXJpYWwgcGFja2V0CisjZGVmaW5lIE1BWF9TUElORUxfQ09NTUFORF9MRU5HVEggICAgIDEzMDAKKwordHlwZWRlZiBzdHJ1Y3QgX1NFUklBTF9TRU5EX0lURU0KK3sKKyAgICBMSVNUX0VOVFJZICAgICAgICAgIExpbms7CisgICAgUE5FVF9CVUZGRVJfTElTVCAgICBOZXRCdWZmZXJMaXN0OworICAgIFdERk1FTU9SWSAgICAgICAgICAgV2RmTWVtb3J5OworICAgIFVMT05HICAgICAgICAgICAgICAgRW5jb2RlZEJ1ZmZlckxlbmd0aDsKKyAgICBfRmllbGRfc2l6ZV9ieXRlc18oRW5jb2RlZEJ1ZmZlckxlbmd0aCkKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIEVuY29kZWRCdWZmZXJbMF07CisKK30gU0VSSUFMX1NFTkRfSVRFTSwgKlBTRVJJQUxfU0VORF9JVEVNOworCitjb25zdCBVTE9ORyBTRVJJQUxfU0VORF9JVEVNX1NJWkUgPSBGSUVMRF9PRkZTRVQoU0VSSUFMX1NFTkRfSVRFTSwgRW5jb2RlZEJ1ZmZlcik7CisKK3R5cGVkZWYgc3RydWN0IF9PVFRNUF9BREFQVEVSX0NPTlRFWFQgeworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOworCisjaWZkZWYgT1RUTVBfTEVHQUNZCisgICAgTkRJU19IQU5ETEUgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyOworI2Vsc2UKKyAgICAvLworICAgIC8vIEhhbmRsZSB0byB0aGUgTkVUQURBUFRFUiBvYmplY3QgZm9yIHRoaXMgY29udGV4dAorICAgIC8vCisgICAgTkVUQURBUFRFUiAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyOworI2VuZGlmCisKKyAgICAvLworICAgIC8vIEhhbmRsZSB0byB0aGUgY29ycmVzcG9uZGluZyBXREZERVZJQ0UKKyAgICAvLworICAgIFdERkRFVklDRSAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlOworCisgICAgLy8gRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgZGF0YSBwYXRoIGlzIGVuYWJsZWQKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzQ29ubmVjdGVkOworCisgICAgLy8gRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgQWRhcHRlciBoYXMgYmVlbiBzdGFydGVkIG9yIG5vdAorICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNSdW5uaW5nOworICAgIAorI2lmZGVmIE9UVE1QX0xFR0FDWQorICAgIFBHTE9CQUxTICAgICAgICAgICAgICAgICAgICAgICAgcEdsb2JhbHM7CisjZWxzZQorICAgIC8vIFJlY2VpdmUgcGFja2V0IHBvb2wKKyAgICBORVRCVUZGRVJMSVNUQ09MTEVDVElPTiAgICAgICAgIFJlY2VpdmVDb2xsZWN0aW9uOworI2VuZGlmCisgICAgCisgICAgVUxPTkdMT05HICAgICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZEFkZHJlc3M7IC8vIFRPRE8gLSBDYWNoZQorCisgICAgLy8KKyAgICAvLyBTZXJpYWwgRGV2aWNlCisgICAgLy8KKworICAgIFdERklPVEFSR0VUICAgICAgICAgICAgICAgICAgICAgV2RmSW9UYXJnZXQ7CisKKyAgICBXREZTUElOTE9DSyAgICAgICAgICAgICAgICAgICAgIFNlbmRMb2NrOworICAgIF9HdWFyZGVkX2J5XyhTZW5kTG9jaykKKyAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAgIFNlbmRRdWV1ZTsKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmRRdWV1ZVJ1bm5pbmc7CisgICAgV0RGV09SS0lURU0gICAgICAgICAgICAgICAgICAgICBTZW5kV29ya0l0ZW07CisgICAgCisgICAgV0RGV09SS0lURU0gICAgICAgICAgICAgICAgICAgICBSZWN2V29ya0l0ZW07CisgICAgV0RGUkVRVUVTVCAgICAgICAgICAgICAgICAgICAgICBSZWN2UmVhZFJlcXVlc3Q7CisKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3ZCdWZmZXJbTUFYX1NQSU5FTF9DT01NQU5EX0xFTkdUSCAqIDJdOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjdkJ1ZmZlckxlbmd0aDsKKworICAgIC8vCisgICAgLy8gTklDIGNvbmZpZ3VyYXRpb24gLSBUaGlzIGluZm9ybWF0aW9uIGlzIHF1ZXJpZWQgYnkgdGhlIHByb3RvY29sIGRyaXZlcnMuCisgICAgLy8gU2luY2UgdGhpcyBzYW1wbGUgZm9jdXNlcyBvbiBkZW1vbnN0cmF0aW5nIHRoZSBORElTIFdERiBtb2RlbCwgCisgICAgLy8gaXQgZG9lc24ndCBtb2RpZnkgYW55IHRoZXNlIHZhbHVlcyBkdXJpbmcgcnVudGltZS4KKyAgICAvLyBQbGVhc2UgbG9vayBhdCB0aGUgbmV0dm1pbmk2MzAgc2FtcGxlIHRvIHNlZSBob3cgdGhlc2UgdmFsdWVzIGNhbiBiZSBzZXQKKyAgICAvLyBhbmQgdXBkYXRlZAorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFBhY2tldEZpbHRlcjsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICB1bExvb2thaGVhZDsKKyAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICB1bExpbmtTZW5kU3BlZWQ7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgdWxMaW5rUmVjdlNwZWVkOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVsTWF4QnVzeVNlbmRzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVsTWF4QnVzeVJlY3ZzOworCisgICAgLy8KKyAgICAvLyBTdGF0aXN0aWNzIC0gCisgICAgLy8gU2luY2UgdGhpcyBzYW1wbGUgZm9jdXNlcyBvbiBkZW1vbnN0cmF0aW5nIHRoZSBORElTIFdERiBtb2RlbCwgCisgICAgLy8gaXQgZG9lc24ndCBtb2RpZnkgYW55IHRoZXNlIHZhbHVlcyBkdXJpbmcgcnVudGltZS4KKyAgICAvLyBQbGVhc2UgbG9vayBhdCB0aGUgbmV0dm1pbmk2MzAgc2FtcGxlIHRvIHNlZSBob3cgdGhlc2UgdmFsdWVzIGNhbiBiZSBzZXQKKyAgICAvLyBhbmQgdXBkYXRlZAorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLworCisgICAgLy8gUGFja2V0IGNvdW50cworICAgIFVMT05HNjQgICAgICAgICAgICAgICAgIEZyYW1lc1J4RGlyZWN0ZWQ7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgRnJhbWVzUnhNdWx0aWNhc3Q7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgRnJhbWVzUnhCcm9hZGNhc3Q7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgRnJhbWVzVHhEaXJlY3RlZDsKKyAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICBGcmFtZXNUeE11bHRpY2FzdDsKKyAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICBGcmFtZXNUeEJyb2FkY2FzdDsKKworICAgIC8vIEJ5dGUgY291bnRzCisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgQnl0ZXNSeERpcmVjdGVkOworICAgIFVMT05HNjQgICAgICAgICAgICAgICAgIEJ5dGVzUnhNdWx0aWNhc3Q7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgQnl0ZXNSeEJyb2FkY2FzdDsKKyAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICBCeXRlc1R4RGlyZWN0ZWQ7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgQnl0ZXNUeE11bHRpY2FzdDsKKyAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICBCeXRlc1R4QnJvYWRjYXN0OworCisgICAgLy8gQ291bnQgb2YgdHJhbnNtaXQgZXJyb3JzCisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgVHhBYm9ydEV4Y2Vzc0NvbGxpc2lvbnM7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgVHhMYXRlQ29sbGlzaW9uczsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBUeERtYVVuZGVycnVuOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFR4TG9zdENSUzsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBUeE9LQnV0RGVmZXJyZWQ7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgT25lUmV0cnk7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTW9yZVRoYW5PbmVSZXRyeTsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBUb3RhbFJldHJpZXM7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgVHJhbnNtaXRGYWlsdXJlc090aGVyOworCisgICAgLy8gQ291bnQgb2YgcmVjZWl2ZSBlcnJvcnMKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSeENyY0Vycm9yczsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSeEFsaWdubWVudEVycm9yczsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSeFJlc291cmNlRXJyb3JzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFJ4RG1hT3ZlcnJ1bkVycm9yczsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSeENkdEZyYW1lczsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSeFJ1bnRFcnJvcnM7CisKK30gT1RUTVBfQURBUFRFUl9DT05URVhULCAqUE9UVE1QX0FEQVBURVJfQ09OVEVYVDsKKworV0RGX0RFQ0xBUkVfQ09OVEVYVF9UWVBFX1dJVEhfTkFNRShPVFRNUF9BREFQVEVSX0NPTlRFWFQsIEdldEFkYXB0ZXJDb250ZXh0KTsKKwordHlwZWRlZiBzdHJ1Y3QgX1dERl9ERVZJQ0VfSU5GTworeworICAgIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgQWRhcHRlckNvbnRleHQ7CisKK30gV0RGX0RFVklDRV9JTkZPLCAqUFdERl9ERVZJQ0VfSU5GTzsKKworV0RGX0RFQ0xBUkVfQ09OVEVYVF9UWVBFX1dJVEhfTkFNRShXREZfREVWSUNFX0lORk8sIEdldFdkZkRldmljZUluZm8pOworCisjaWZkZWYgT1RUTVBfTEVHQUNZCisKK1BBR0VEIE1JTklQT1JUX1BBVVNFICAgICAgICAgICAgICAgICAgICBNUFBhdXNlOworUEFHRUQgTUlOSVBPUlRfUkVTVEFSVCAgICAgICAgICAgICAgICAgIE1QUmVzdGFydDsKKworTUlOSVBPUlRfU0VORF9ORVRfQlVGRkVSX0xJU1RTICAgICAgICAgIE1QU2VuZE5ldEJ1ZmZlckxpc3RzOworTUlOSVBPUlRfUkVUVVJOX05FVF9CVUZGRVJfTElTVFMgICAgICAgIE1QUmV0dXJuTmV0QnVmZmVyTGlzdHM7CitNSU5JUE9SVF9DQU5DRUxfU0VORCAgICAgICAgICAgICAgICAgICAgTVBDYW5jZWxTZW5kOworCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTkRJU19TVEFUVVMKK0FkYXB0ZXJJbml0aWFsaXplKAorICAgIF9Jbl8gTkRJU19IQU5ETEUgICAgICAgICAgICAgICAgTWluaXBvcnRBZGFwdGVySGFuZGxlLAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQKKyAgICApOworCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfKFBBU1NJVkVfTEVWRUwpCitWT0lECitBZGFwdGVyVW5pbml0aWFsaXplKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQKKyAgICApOworCisjZWxzZQorCitQQUdFRCBFVlRfTkVUX0FEQVBURVJfU0VUX0NBUEFCSUxJVElFUyAgRXZ0QWRhcHRlclNldENhcGFiaWxpdGllczsKK1BBR0VEIEVWVF9ORVRfQURBUFRFUl9TVEFSVCAgICAgICAgICAgICBFdnRBZGFwdGVyU3RhcnQ7CitQQUdFRCBFVlRfTkVUX0FEQVBURVJfUEFVU0UgICAgICAgICAgICAgRXZ0QWRhcHRlclBhdXNlOworCitFVlRfTkVUX0FEQVBURVJfU0VORF9ORVRfQlVGRkVSX0xJU1RTICAgRXZ0QWRhcHRlclNlbmROZXRCdWZmZXJMaXN0czsKKworUEFHRUQKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitBZGFwdGVySW5pdGlhbGl6ZSgKKyAgICBfSW5fIE5FVEFEQVBURVIgICAgICAgICAgICAgQWRhcHRlciwKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyBQT1RUTVBfREVWSUNFX0NPTlRFWFQgIERldmljZUNvbnRleHQKKyAgICApOworCisjZW5kaWYKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorQWRhcHRlckluZGljYXRlRW5lcmd5U2NhbkNvbXBsZXRlKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCBBZGFwdGVyQ29udGV4dCwKKyAgICBfSW5fIE5ESVNfU1RBVFVTICAgICAgICAgICAgU3RhdHVzCisgICAgKTsKKworRVhUX0NBTExCQUNLIEFkYXB0ZXJFbmVyZ3lTY2FuVGltZXJDYWxsYmFjazsKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9kZXZpY2UuY3BwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2RldmljZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3NjE5YwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9kZXZpY2UuY3BwCkBAIC0wLDAgKzEsMzgzIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgY29kZSB0byBtYW5hZ2UgdGhlIFdERkRFVklDRSBvYmplY3QgZm9yIHRoZQorICogICBuZXR3b3JrIGFkYXB0ZXIuCisgKi8KKworI2luY2x1ZGUgPGluaXRndWlkLmg+CisjaW5jbHVkZSAicGNoLmhwcCIKKyNpbmNsdWRlICJkZXZpY2UudG1oIgorCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfKCBQQVNTSVZFX0xFVkVMICkKK19GdW5jdGlvbl9jbGFzc18oIE1JTklQT1JUX0lOSVRJQUxJWkUgKQorTkRJU19TVEFUVVMKK01QSW5pdGlhbGl6ZUV4KAorICAgIF9Jbl8gIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJIYW5kbGUsCisgICAgX0luXyAgTkRJU19IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgIE1pbmlwb3J0RHJpdmVyQ29udGV4dCwKKyAgICBfSW5fICBQTkRJU19NSU5JUE9SVF9JTklUX1BBUkFNRVRFUlMgICAgLyogTWluaXBvcnRJbml0UGFyYW1ldGVycyAqLworICAgICkKKy8qKysKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBUaGUgTWluaXBvcnRJbml0aWFsaXplIGZ1bmN0aW9uIGlzIGEgcmVxdWlyZWQgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIGEKKyAgICBOSUMgKG9yIHZpcnR1YWwgTklDKSBmb3IgbmV0d29yayBJL08gb3BlcmF0aW9ucywgY2xhaW1zIGFsbCBoYXJkd2FyZQorICAgIHJlc291cmNlcyBuZWNlc3NhcnkgdG8gdGhlIE5JQyBpbiB0aGUgcmVnaXN0cnksIGFuZCBhbGxvY2F0ZXMgcmVzb3VyY2VzCisgICAgdGhlIGRyaXZlciBuZWVkcyB0byBjYXJyeSBvdXQgbmV0d29yayBJL08gb3BlcmF0aW9ucy4KKworICAgIE1pbmlwb3J0SW5pdGlhbGl6ZSBydW5zIGF0IElSUUwgPSBQQVNTSVZFX0xFVkVMLgorCitBcmd1bWVudHM6CisKK1JldHVybiBWYWx1ZToKKworICAgIE5ESVNfU1RBVFVTX3h4eCBjb2RlCisKKy0tKi8KK3sKKyAgICBORElTX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworICAgIFBHTE9CQUxTICAgICAgICAgICAgICAgIHBHbG9iYWxzID0gKFBHTE9CQUxTKU1pbmlwb3J0RHJpdmVyQ29udGV4dDsKKyAgICBQREVWSUNFX09CSkVDVCAgICAgICAgICBwUGRvID0gbnVsbHB0cjsKKyAgICBQREVWSUNFX09CSkVDVCAgICAgICAgICBwRmRvID0gbnVsbHB0cjsKKyAgICBQREVWSUNFX09CSkVDVCAgICAgICAgICBwTmV4dERldmljZU9iamVjdCA9IG51bGxwdHI7CisgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTICAgYXR0cmlidXRlczsKKyAgICBXREZERVZJQ0UgICAgICAgICAgICAgICBkZXZpY2UgPSBudWxscHRyOworICAgIFBPVFRNUF9ERVZJQ0VfQ09OVEVYVCAgIGRldmljZUNvbnRleHQgPSBudWxscHRyOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIGRvCisgICAgeworICAgICAgICBORElTX01JTklQT1JUX0FEQVBURVJfUkVHSVNUUkFUSU9OX0FUVFJJQlVURVMgQWRhcHRlclJlZ2lzdHJhdGlvbiA9IHsgMCB9OworICAgICAgICBORElTX01JTklQT1JUX0FEQVBURVJfR0VORVJBTF9BVFRSSUJVVEVTIEFkYXB0ZXJHZW5lcmFsID0geyAwIH07CisgICAgICAgIE5ESVNfUE1fQ0FQQUJJTElUSUVTIFBtQ2FwYWJpbGl0aWVzID0geyAwIH07CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTmRpc01HZXREZXZpY2VQcm9wZXJ0eSBmdW5jdGlvbiBlbmFibGVzIHVzIHRvIGdldCB0aGU6CisgICAgICAgIC8vIFBETyAtIGNyZWF0ZWQgYnkgdGhlIGJ1cyBkcml2ZXIgdG8gcmVwcmVzZW50IG91ciBkZXZpY2UuCisgICAgICAgIC8vIEZETyAtIGNyZWF0ZWQgYnkgTkRJUyB0byByZXByZXNlbnQgb3VyIG1pbmlwb3J0IGFzIGEgZnVuY3Rpb24KKyAgICAgICAgLy8gICAgICAgICAgICAgIGRyaXZlci4KKyAgICAgICAgLy8gTmV4dERldmljZU9iamVjdCAtIGRldmljZW9iamVjdCBvZiBhbm90aGVyIGRyaXZlciAoZmlsdGVyKQorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgYXR0YWNoZWQgdG8gdXMgYXQgdGhlIGJvdHRvbS4KKyAgICAgICAgLy8gU2luY2Ugb3VyIGRyaXZlciBpcyB0YWxraW5nIHRvIE5ESVNQUk9ULCB0aGUgTmV4dERldmljZU9iamVjdAorICAgICAgICAvLyBpcyBub3QgdXNlZnVsLiBCdXQgaWYgd2Ugd2VyZSB0byB0YWxrIHRvIGEgZHJpdmVyIHRoYXQgd2UKKyAgICAgICAgLy8gYXJlIGF0dGFjaGVkIHRvIGFzIHBhcnQgb2YgdGhlIGRldmljZXN0YWNrIHRoZW4gTmV4dERldmljZU9iamVjdAorICAgICAgICAvLyB3b3VsZCBiZSBvdXIgdGFyZ2V0IERldmljZU9iamVjdCBmb3Igc2VuZGluZyByZWFkL3dyaXRlIFJlcXVlc3RzLgorICAgICAgICAvLworCisgICAgICAgIE5kaXNNR2V0RGV2aWNlUHJvcGVydHkoCisgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJIYW5kbGUsCisgICAgICAgICAgICAmcFBkbywKKyAgICAgICAgICAgICZwRmRvLAorICAgICAgICAgICAgJnBOZXh0RGV2aWNlT2JqZWN0LAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIG51bGxwdHIpOworCisgICAgICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFU19JTklUX0NPTlRFWFRfVFlQRSgmYXR0cmlidXRlcywgT1RUTVBfREVWSUNFX0NPTlRFWFQpOworCisgICAgICAgIE5UU1RBVFVTIG50U3RhdHVzID0gV2RmRGV2aWNlTWluaXBvcnRDcmVhdGUoCisgICAgICAgICAgICBwR2xvYmFscy0+V2RmRHJpdmVyLAorICAgICAgICAgICAgJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICBwRmRvLAorICAgICAgICAgICAgcE5leHREZXZpY2VPYmplY3QsCisgICAgICAgICAgICBwUGRvLAorICAgICAgICAgICAgJmRldmljZSk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKG50U3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZEZXZpY2VNaW5pcG9ydENyZWF0ZSBmYWlsZWQgJSFTVEFUVVMhIiwgbnRTdGF0dXMpOworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gR2V0IFdERiBtaW5pcG9ydCBkZXZpY2UgY29udGV4dC4KKyAgICAgICAgLy8KKyAgICAgICAgZGV2aWNlQ29udGV4dCA9IEdldERldmljZUNvbnRleHQoZGV2aWNlKTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+U2lnbmF0dXJlID0gT1RUTVBfREVWSUNFX0NPTlRFWFRfU0lHTkFUVVJFOworICAgICAgICBkZXZpY2VDb250ZXh0LT5EZXZpY2UgPSBkZXZpY2U7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWxsb2NhdGUgYWRhcHRlciBjb250ZXh0IHN0cnVjdHVyZSBhbmQgaW5pdGlhbGl6ZSBhbGwgdGhlCisgICAgICAgIC8vIG1lbW9yeSByZXNvdXJjZXMgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBwYWNrZXRzLgorICAgICAgICAvLworICAgICAgICBkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dCA9IChQT1RUTVBfQURBUFRFUl9DT05URVhUKU5kaXNBbGxvY2F0ZU1lbW9yeVdpdGhUYWdQcmlvcml0eSgKKyAgICAgICAgICAgIHBHbG9iYWxzLT5oRHJpdmVyLCAKKyAgICAgICAgICAgIHNpemVvZihPVFRNUF9BREFQVEVSX0NPTlRFWFQpLCAKKyAgICAgICAgICAgIE9UVE1QX0FEQVBURVJfQ09OVEVYVF9TSUdOQVRVUkUsCisgICAgICAgICAgICBOb3JtYWxQb29sUHJpb3JpdHkpOworCisgICAgICAgIGlmIChkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dCA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIk5kaXNBbGxvY2F0ZU1lbW9yeVdpdGhUYWdQcmlvcml0eSBmYWlsZWQiKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSdGxaZXJvTWVtb3J5KGRldmljZUNvbnRleHQtPkFkYXB0ZXJDb250ZXh0LCBzaXplb2YoT1RUTVBfQURBUFRFUl9DT05URVhUKSk7CisgICAgICAgIGRldmljZUNvbnRleHQtPkFkYXB0ZXJDb250ZXh0LT5TaWduYXR1cmUgPSBPVFRNUF9BREFQVEVSX0NPTlRFWFRfU0lHTkFUVVJFOworICAgICAgICBkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dC0+QWRhcHRlciA9IE1pbmlwb3J0QWRhcHRlckhhbmRsZTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+QWRhcHRlckNvbnRleHQtPkRldmljZSA9IGRldmljZUNvbnRleHQtPkRldmljZTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+QWRhcHRlckNvbnRleHQtPnBHbG9iYWxzID0gcEdsb2JhbHM7CisKKyAgICAgICAgU3RhdHVzID0gQWRhcHRlckluaXRpYWxpemUoCisgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJIYW5kbGUsCisgICAgICAgICAgICBkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dCk7CisKKyAgICAgICAgaWYgKE5ESVNfU1RBVFVTX1NVQ0NFU1MgIT0gU3RhdHVzKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkFkYXB0ZXJJbml0aWFsaXplIGZhaWxlZCAlIU5ESVNfU1RBVFVTISIsIFN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG50U3RhdHVzID0gU2VyaWFsSW5pdGlhbGl6ZShkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dCk7CisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhudFN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0YXJ0IHRoZSByZWFkIGxvb3AKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIlN0YXJ0aW5nIHJlY3Ygd29ya2VyIik7CisgICAgICAgIFdkZldvcmtJdGVtRW5xdWV1ZShkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dC0+UmVjdldvcmtJdGVtKTsKKworICAgIH0gd2hpbGUgKEZBTFNFKTsKKworICAgIGlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGlmIChkZXZpY2VDb250ZXh0ICYmIGRldmljZUNvbnRleHQtPkFkYXB0ZXJDb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBBZGFwdGVyVW5pbml0aWFsaXplKGRldmljZUNvbnRleHQtPkFkYXB0ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIGRldmljZUNvbnRleHQtPkFkYXB0ZXJDb250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TkRJUyhEUklWRVJfREVGQVVMVCwgU3RhdHVzKTsKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK1BBR0VECitWT0lECitNUEhhbHRFeCgKKyAgICBfSW5fICBORElTX0hBTkRMRSAgICAgICAgICAgTWluaXBvcnRBZGFwdGVyQ29udGV4dCwKKyAgICBfSW5fICBORElTX0hBTFRfQUNUSU9OICAgICAgSGFsdEFjdGlvbgorICAgICkKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIEhhbHQgaGFuZGxlciBpcyBjYWxsZWQgd2hlbiBORElTIHJlY2VpdmVzIElSUF9NTl9TVE9QX0RFVklDRSwKKyAgICBJUlBfTU5fU1VQUklTRV9SRU1PVkUgb3IgSVJQX01OX1JFTU9WRV9ERVZJQ0UgcmVxdWVzdHMgZnJvbSB0aGUgUE5QCisgICAgbWFuYWdlci4gSGVyZSwgdGhlIGRyaXZlciBzaG91bGQgZnJlZSBhbGwgdGhlIHJlc291cmNlcyBhY3F1aXJlZCBpbgorICAgIE1pbmlwb3J0SW5pdGlhbGl6ZSBhbmQgc3RvcCBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlLiBORElTIHdpbGwgbm90IHN1Ym1pdAorICAgIGFueSBmdXJ0aGVyIHJlcXVlc3Qgb25jZSB0aGlzIGhhbmRsZXIgaXMgaW52b2tlZC4KKworICAgIDEpIEZyZWUgYW5kIHVubWFwIGFsbCBJL08gcmVzb3VyY2VzLgorICAgIDIpIERpc2FibGUgaW50ZXJydXB0IGFuZCBkZXJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyLgorICAgIDMpIERlcmVnaXN0ZXIgc2h1dGRvd24gaGFuZGxlciByZWdzaXRlcmVkIGJ5CisgICAgICAgIE5kaXNNUmVnaXN0ZXJBZGFwdGVyU2h1dGRvd25IYW5kbGVyIC4KKyAgICA0KSBDYW5jZWwgYWxsIHF1ZXVlZCB1cCB0aW1lciBjYWxsYmFja3MuCisgICAgNSkgRmluYWxseSB3YWl0IGluZGVmaW5pdGVseSBmb3IgYWxsIHRoZSBvdXRzdGFuZGluZyByZWNlaXZlCisgICAgICAgIHBhY2tldHMgaW5kaWNhdGVkIHRvIHRoZSBwcm90b2NvbCB0byByZXR1cm4uCisKKyAgICBNaW5pcG9ydEhhbHQgcnVucyBhdCBJUlFMID0gUEFTU0lWRV9MRVZFTC4KKworCitBcmd1bWVudHM6CisKKyAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICBQb2ludGVyIHRvIHRoZSBBZGFwdGVyCisgICAgSGFsdEFjdGlvbiAgVGhlIHJlYXNvbiBmb3IgaGFsdGluZyB0aGUgYWRhcHRlcgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBOb25lLgorCistLSovCit7CisgICAgUE9UVE1QX0FEQVBURVJfQ09OVEVYVCBBZGFwdGVyQ29udGV4dCA9IChQT1RUTVBfQURBUFRFUl9DT05URVhUKU1pbmlwb3J0QWRhcHRlckNvbnRleHQ7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEFHRURfQ09ERSgpOworCisgICAgLy8KKyAgICAvLyBDYWxsIFNodXRkb3duIGhhbmRsZXIgdG8gZGlzYWJsZSBpbnRlcnJ1cHQgYW5kIHR1cm4gdGhlIGhhcmR3YXJlIG9mZgorICAgIC8vIGJ5IGlzc3VpbmcgYSBmdWxsIHJlc2V0CisgICAgLy8KKyAgICBpZiAoSGFsdEFjdGlvbiAhPSBOZGlzSGFsdERldmljZVN1cnByaXNlUmVtb3ZlZCkKKyAgICB7CisgICAgICAgIE1QU2h1dGRvd25FeChNaW5pcG9ydEFkYXB0ZXJDb250ZXh0LCBOZGlzU2h1dGRvd25Qb3dlck9mZik7CisgICAgfQorCisgICAgQWRhcHRlclVuaW5pdGlhbGl6ZShBZGFwdGVyQ29udGV4dCk7CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK1ZPSUQKK01QU2h1dGRvd25FeCgKKyAgICBfSW5fICBORElTX0hBTkRMRSAgICAgICAgICAgLyogTWluaXBvcnRBZGFwdGVyQ29udGV4dCAqLywKKyAgICBfSW5fICBORElTX1NIVVRET1dOX0FDVElPTiAgLyogU2h1dGRvd25BY3Rpb24gKi8KKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBUaGUgTWluaXBvcnRTaHV0ZG93bkV4IGhhbmRsZXIgcmVzdG9yZXMgaGFyZHdhcmUgdG8gaXRzIGluaXRpYWwgc3RhdGUgd2hlbgorICAgIHRoZSBzeXN0ZW0gaXMgc2h1dCBkb3duLCB3aGV0aGVyIGJ5IHRoZSB1c2VyIG9yIGJlY2F1c2UgYW4gdW5yZWNvdmVyYWJsZQorICAgIHN5c3RlbSBlcnJvciBvY2N1cnJlZC4gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgTklDIGlzIGluIGEga25vd24KKyAgICBzdGF0ZSBhbmQgcmVhZHkgdG8gYmUgcmVpbml0aWFsaXplZCB3aGVuIHRoZSBtYWNoaW5lIGlzIHJlYm9vdGVkIGFmdGVyCisgICAgYSBzeXN0ZW0gc2h1dGRvd24gb2NjdXJzIGZvciBhbnkgcmVhc29uLCBpbmNsdWRpbmcgYSBjcmFzaCBkdW1wLgorCisgICAgSGVyZSBqdXN0IGRpc2FibGUgdGhlIGludGVycnVwdCBhbmQgc3RvcCB0aGUgRE1BIGVuZ2luZS4gIERvIG5vdCBmcmVlCisgICAgbWVtb3J5IHJlc291cmNlcyBvciB3YWl0IGZvciBhbnkgcGFja2V0IHRyYW5zZmVycyB0byBjb21wbGV0ZS4gIERvIG5vdCBjYWxsCisgICAgaW50byBORElTIGF0IHRoaXMgdGltZS4KKworICAgIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhcmliaXRyYXJ5IElSUUwsIGluY2x1ZGluZyBpbiB0aGUgY29udGV4dCBvZiBhCisgICAgYnVnY2hlY2suCisKK0FyZ3VtZW50czoKKworICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICBTaHV0ZG93bkFjdGlvbiAgVGhlIHJlYXNvbiB3aHkgTkRJUyBjYWxsZWQgdGhlIHNodXRkb3duIGZ1bmN0aW9uCisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuCisKKy0tKi8KK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitQQUdFRAorVk9JRAorTVBEZXZpY2VQbnBFdmVudE5vdGlmeSgKKyAgICBfSW5fICBORElTX0hBTkRMRSAgICAgICAgICAgICAvKiBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICovLAorICAgIF9Jbl8gIFBORVRfREVWSUNFX1BOUF9FVkVOVCAgIE5ldERldmljZVBuUEV2ZW50CisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgUnVucyBhdCBJUlFMID0gUEFTU0lWRV9MRVZFTCBpbiB0aGUgY29udGV4dCBvZiBzeXN0ZW0gdGhyZWFkLgorCitBcmd1bWVudHM6CisKKyAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorICAgIE5ldERldmljZVBuUEV2ZW50ICAgICAgICAgICBTZWxmLWV4cGxhbmF0b3J5CisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuCisKKy0tKi8KK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEFHRURfQ09ERSgpOworCisgICAgc3dpdGNoIChOZXREZXZpY2VQblBFdmVudC0+RGV2aWNlUG5QRXZlbnQpCisgICAgeworICAgIGNhc2UgTmRpc0RldmljZVBuUEV2ZW50UXVlcnlSZW1vdmVkOgorICAgICAgICAvLworICAgICAgICAvLyBDYWxsZWQgd2hlbiBORElTIHJlY2VpdmVzIElSUF9NTl9RVUVSWV9SRU1PVkVfREVWSUNFLgorICAgICAgICAvLworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiTVBQblBFdmVudE5vdGlmeTogTmRpc0RldmljZVBuUEV2ZW50UXVlcnlSZW1vdmVkIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOZGlzRGV2aWNlUG5QRXZlbnRSZW1vdmVkOgorICAgICAgICAvLworICAgICAgICAvLyBDYWxsZWQgd2hlbiBORElTIHJlY2VpdmVzIElSUF9NTl9SRU1PVkVfREVWSUNFLgorICAgICAgICAvLyBORElTIGNhbGxzIE1pbmlwb3J0SGFsdCBmdW5jdGlvbiBhZnRlciB0aGlzIGNhbGwgcmV0dXJucy4KKyAgICAgICAgLy8KKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIk1QUG5QRXZlbnROb3RpZnk6IE5kaXNEZXZpY2VQblBFdmVudFJlbW92ZWQiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5kaXNEZXZpY2VQblBFdmVudFN1cnByaXNlUmVtb3ZlZDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ2FsbGVkIHdoZW4gTkRJUyByZWNlaXZlcyBJUlBfTU5fU1VQUklTRV9SRU1PVkFMLgorICAgICAgICAvLyBORElTIGNhbGxzIE1pbmlwb3J0SGFsdCBmdW5jdGlvbiBhZnRlciB0aGlzIGNhbGwgcmV0dXJucy4KKyAgICAgICAgLy8KKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIk1QRGV2aWNlUG5wRXZlbnROb3RpZnk6IE5kaXNEZXZpY2VQblBFdmVudFN1cnByaXNlUmVtb3ZlZCIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTmRpc0RldmljZVBuUEV2ZW50UXVlcnlTdG9wcGVkOgorICAgICAgICAvLworICAgICAgICAvLyBDYWxsZWQgd2hlbiBORElTIHJlY2VpdmVzIElSUF9NTl9RVUVSWV9TVE9QX0RFVklDRS4gPz8KKyAgICAgICAgLy8KKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIk1QUG5QRXZlbnROb3RpZnk6IE5kaXNEZXZpY2VQblBFdmVudFF1ZXJ5U3RvcHBlZCIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTmRpc0RldmljZVBuUEV2ZW50U3RvcHBlZDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ2FsbGVkIHdoZW4gTkRJUyByZWNlaXZlcyBJUlBfTU5fU1RPUF9ERVZJQ0UuCisgICAgICAgIC8vIE5ESVMgY2FsbHMgTWluaXBvcnRIYWx0IGZ1bmN0aW9uIGFmdGVyIHRoaXMgY2FsbCByZXR1cm5zLgorICAgICAgICAvLworICAgICAgICAvLworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiTVBQblBFdmVudE5vdGlmeTogTmRpc0RldmljZVBuUEV2ZW50U3RvcHBlZCIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTmRpc0RldmljZVBuUEV2ZW50UG93ZXJQcm9maWxlQ2hhbmdlZDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWZ0ZXIgaW5pdGlhbGl6aW5nIGEgbWluaXBvcnQgZHJpdmVyIGFuZCBhZnRlciBtaW5pcG9ydCBkcml2ZXIKKyAgICAgICAgLy8gcmVjZWl2ZXMgYW4gT0lEX1BOUF9TRVRfUE9XRVIgbm90aWZpY2F0aW9uIHRoYXQgc3BlY2lmaWVzCisgICAgICAgIC8vIGEgZGV2aWNlIHBvd2VyIHN0YXRlIG9mIE5kaXNEZXZpY2VTdGF0ZUQwICh0aGUgcG93ZXJlZC1vbiBzdGF0ZSksCisgICAgICAgIC8vIE5ESVMgY2FsbHMgdGhlIG1pbmlwb3J0J3MgTWluaXBvcnRQblBFdmVudE5vdGlmeSBmdW5jdGlvbiB3aXRoCisgICAgICAgIC8vIFBuUEV2ZW50IHNldCB0byBOZGlzRGV2aWNlUG5QRXZlbnRQb3dlclByb2ZpbGVDaGFuZ2VkLgorICAgICAgICAvLworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiTVBEZXZpY2VQbnBFdmVudE5vdGlmeTogTmRpc0RldmljZVBuUEV2ZW50UG93ZXJQcm9maWxlQ2hhbmdlZCIpOworCisgICAgICAgIGlmIChOZXREZXZpY2VQblBFdmVudC0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPT0gc2l6ZW9mKCBVTE9ORyApKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBVTE9ORyBOZGlzUG93ZXJQcm9maWxlID0gKigoY29uc3QgVUxPTkcgKilOZXREZXZpY2VQblBFdmVudC0+SW5mb3JtYXRpb25CdWZmZXIpOworCisgICAgICAgICAgICBpZiAoTmRpc1Bvd2VyUHJvZmlsZSA9PSBOZGlzUG93ZXJQcm9maWxlQmF0dGVyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiVGhlIGhvc3Qgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYmF0dGVyeSBwb3dlciIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoTmRpc1Bvd2VyUHJvZmlsZSA9PSBOZGlzUG93ZXJQcm9maWxlQWNPbkxpbmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIlRoZSBob3N0IHN5c3RlbSBpcyBydW5uaW5nIG9uIEFDIHBvd2VyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIk1QRGV2aWNlUG5wRXZlbnROb3RpZnk6IHVua25vd24gUG5QIGV2ZW50IDB4JXhcbiIsIE5ldERldmljZVBuUEV2ZW50LT5EZXZpY2VQblBFdmVudCk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2RldmljZS5ocHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvZGV2aWNlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2E5ZWYyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2RldmljZS5ocHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBIZWFkZXIgZmlsZSBmb3IgdGhlIHJvdXRpbmVzIHJlbGF0ZWQgdG8gV0RGREVWSUNFIHJlcHJlc2VudGluZyB0aGUKKyAqICAgTmV0d29yayBBZGFwdGVyCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNkZWZpbmUgT1RUTVBfREVWSUNFX0NPTlRFWFRfU0lHTkFUVVJFICd2ZUR0JwordHlwZWRlZiBzdHJ1Y3QgX09UVE1QX0RFVklDRV9DT05URVhUIHsKKyAgICAvLworICAgIC8vIFNpZ25hdHVyZSBmb3IgU2FuaXR5IENoZWNrLgorICAgIC8vCisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7CisKKyAgICAvLworICAgIC8vIEhhbmRsZSB0byB0aGUgV0RGREVWSUNFIG9mIHdoaWNoIHRoaXMgaXMgdGhlIGNvbnRleHQKKyAgICAvLworICAgIFdERkRFVklDRSAgICAgICAgICAgICAgICAgRGV2aWNlOworCisgICAgLy8KKyAgICAvLyBQb2ludGVyIHRvIHRoZSBDb250ZXh0IG9mIHRoZSBjb3JyZXNwb25kaW5nIE5FVEFEQVBURVIgb2JqZWN0CisgICAgLy8KKyAgICBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0OworCit9IE9UVE1QX0RFVklDRV9DT05URVhULCAqUE9UVE1QX0RFVklDRV9DT05URVhUOworCitXREZfREVDTEFSRV9DT05URVhUX1RZUEVfV0lUSF9OQU1FKE9UVE1QX0RFVklDRV9DT05URVhULCBHZXREZXZpY2VDb250ZXh0KTsKKworZXh0ZXJuICJDIiB7CisjaWZkZWYgT1RUTVBfTEVHQUNZCitQQUdFRCBNSU5JUE9SVF9JTklUSUFMSVpFICAgICAgICAgICAgICAgICAgICBNUEluaXRpYWxpemVFeDsKK1BBR0VEIE1JTklQT1JUX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSGFsdEV4OworTUlOSVBPUlRfU0hVVERPV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBTaHV0ZG93bkV4OworUEFHRUQgTUlOSVBPUlRfREVWSUNFX1BOUF9FVkVOVF9OT1RJRlkgICAgICAgTVBEZXZpY2VQbnBFdmVudE5vdGlmeTsKKyNlbHNlCitQQUdFRCBFVlRfV0RGX0RSSVZFUl9ERVZJQ0VfQUREICAgICAgICAgICAgICBFdnREcml2ZXJEZXZpY2VBZGQ7CitQQUdFRCBFVlRfV0RGX0RFVklDRV9EMF9FWElUICAgICAgICAgICAgICAgICBFdnREZXZpY2VEMEV4aXQ7CitQQUdFRCBFVlRfV0RGX0RFVklDRV9QUkVQQVJFX0hBUkRXQVJFICAgICAgICBFdnREZXZpY2VQcmVwYXJlSGFyZHdhcmU7CitQQUdFRCBFVlRfV0RGX0RFVklDRV9SRUxFQVNFX0hBUkRXQVJFICAgICAgICBFdnREZXZpY2VSZWxlYXNlSGFyZHdhcmU7CitQQUdFRCBFVlRfV0RGX0RFVklDRV9TRUxGX01BTkFHRURfSU9fSU5JVCAgICBFdnREZXZpY2VTZWxmTWFuYWdlZElvSW5pdDsKK1BBR0VEIEVWVF9XREZfREVWSUNFX1NFTEZfTUFOQUdFRF9JT19DTEVBTlVQIEV2dERldmljZVNlbGZNYW5hZ2VkSW9DbGVhbnVwOworRVZUX1dERl9ERVZJQ0VfRDBfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgRXZ0RGV2aWNlRDBFbnRyeTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2RyaXZlci5jcHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvZHJpdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDhkZjgyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2RyaXZlci5jcHAKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBtb2R1bGUgaGFzIGNvZGUgdG8gZGVhbCB3aXRoIGxvYWRpbmcgYW5kIHVubG9hZGluZyBvZiB0aGUgZHJpdmVyIAorICovCisKKyNpbmNsdWRlICJwY2guaHBwIgorI2luY2x1ZGUgImRyaXZlci50bWgiCisKKyNpZmRlZiBPVFRNUF9MRUdBQ1kKK3N0YXRpYyBHTE9CQUxTIEdsb2JhbERhdGEgPSB7IDAgfTsKKyNlbmRpZgorCitJTklUQ09ERQorZXh0ZXJuICJDIgorTlRTVEFUVVMKK0RyaXZlckVudHJ5ICgKKyAgICBfSW5fIFBEUklWRVJfT0JKRUNUICAgRHJpdmVyT2JqZWN0LAorICAgIF9Jbl8gUFVOSUNPREVfU1RSSU5HICBSZWdpc3RyeVBhdGgKKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgRHJpdmVyRW50cnkgaW5pdGlhbGl6ZXMgdGhlIGRyaXZlciBhbmQgaXMgdGhlIGZpcnN0IHJvdXRpbmUgY2FsbGVkIGJ5IHRoZQorICAgIHN5c3RlbSBhZnRlciB0aGUgZHJpdmVyIGlzIGxvYWRlZC4gRHJpdmVyRW50cnkgc3BlY2lmaWVzIHRoZSBvdGhlciBlbnRyeQorICAgIHBvaW50cyBpbiB0aGUgZnVuY3Rpb24gZHJpdmVyLCBzdWNoIGFzIEV2dERldmljZSBhbmQgRHJpdmVyVW5sb2FkLgorCitQYXJhbWV0ZXJzIERlc2NyaXB0aW9uOgorCisgICAgRHJpdmVyT2JqZWN0IC0gcmVwcmVzZW50cyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGZ1bmN0aW9uIGRyaXZlciB0aGF0IGlzIGxvYWRlZAorICAgIGludG8gbWVtb3J5LiBEcml2ZXJFbnRyeSBtdXN0IGluaXRpYWxpemUgbWVtYmVycyBvZiBEcml2ZXJPYmplY3QgYmVmb3JlIGl0CisgICAgcmV0dXJucyB0byB0aGUgY2FsbGVyLiBEcml2ZXJPYmplY3QgaXMgYWxsb2NhdGVkIGJ5IHRoZSBzeXN0ZW0gYmVmb3JlIHRoZQorICAgIGRyaXZlciBpcyBsb2FkZWQsIGFuZCBpdCBpcyByZWxlYXNlZCBieSB0aGUgc3lzdGVtIGFmdGVyIHRoZSBzeXN0ZW0gdW5sb2FkcworICAgIHRoZSBmdW5jdGlvbiBkcml2ZXIgZnJvbSBtZW1vcnkuCisKKyAgICBSZWdpc3RyeVBhdGggLSByZXByZXNlbnRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcGF0aCBpbiB0aGUgUmVnaXN0cnkuCisgICAgVGhlIGZ1bmN0aW9uIGRyaXZlciBjYW4gdXNlIHRoZSBwYXRoIHRvIHN0b3JlIGRyaXZlciByZWxhdGVkIGRhdGEgYmV0d2VlbgorICAgIHJlYm9vdHMuIFRoZSBwYXRoIGRvZXMgbm90IHN0b3JlIGhhcmR3YXJlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEuCisKK1JldHVybiBWYWx1ZToKKworICAgIEEgc3VjY2VzcyBzdGF0dXMgYXMgZGV0ZXJtaW5lZCBieSBOVF9TVUNDRVNTIG1hY3JvLCBpZiBzdWNjZXNzZnVsLiAKKyAKKy0tKi8KK3sKKyAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIFdERl9EUklWRVJfQ09ORklHICAgICAgICAgICAgICAgICAgICBjb25maWc7CisjaWZkZWYgT1RUTVBfTEVHQUNZCisgICAgTkRJU19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIG5kaXNTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworICAgIE5ESVNfTUlOSVBPUlRfRFJJVkVSX0NIQVJBQ1RFUklTVElDUyBNUENoYXIgPSB7IDAgfTsKKyAgICBORVRfQlVGRkVSX0xJU1RfUE9PTF9QQVJBTUVURVJTICAgICAgTmJsUGFyYW1zID0geyAwIH07CisgICAgTkVUX0JVRkZFUl9QT09MX1BBUkFNRVRFUlMgICAgICAgICAgIE5iUGFyYW1zID0geyAwIH07CisjZW5kaWYKKworICAgIFdQUF9JTklUX1RSQUNJTkcoRHJpdmVyT2JqZWN0LCBSZWdpc3RyeVBhdGgpOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIC8vCisgICAgLy8gQ3JlYXRlIHRoZSBXZGZEcml2ZXIgT2JqZWN0IAorICAgIC8vCisgICAgV0RGX0RSSVZFUl9DT05GSUdfSU5JVCgmY29uZmlnLCBXREZfTk9fRVZFTlRfQ0FMTEJBQ0spOworCisjaWZkZWYgT1RUTVBfTEVHQUNZCisgICAgLy8KKyAgICAvLyBTZXQgV2RmRHJpdmVySW5pdE5vRGlzcGF0Y2hPdmVycmlkZSBmbGFnIHRvIHRlbGwgdGhlIGZyYW1ld29yaworICAgIC8vIG5vdCB0byBwcm92aWRlIGRpc3BhdGNoIHJvdXRpbmVzIGZvciB0aGUgZHJpdmVyLiBJbiBvdGhlciB3b3JkcywKKyAgICAvLyB0aGUgZnJhbWV3b3JrIG11c3Qgbm90IGludGVyY2VwdCBJUlBzIHRoYXQgdGhlIEkvTyBtYW5hZ2VyIGhhcworICAgIC8vIGRpcmVjdGVkIHRvIHRoZSBkcml2ZXIuIEluIHRoaXMgY2FzZSwgaXQgd2lsbCBiZSBoYW5kbGVkIGJ5IE5ESVMKKyAgICAvLyBwb3J0IGRyaXZlci4KKyAgICAvLworICAgIGNvbmZpZy5Ecml2ZXJJbml0RmxhZ3MgfD0gV2RmRHJpdmVySW5pdE5vRGlzcGF0Y2hPdmVycmlkZTsKKyNlbHNlCisgICAgY29uZmlnLkV2dERyaXZlckRldmljZUFkZCA9IEV2dERyaXZlckRldmljZUFkZDsKKyAgICBjb25maWcuRXZ0RHJpdmVyVW5sb2FkID0gRXZ0RHJpdmVyVW5sb2FkOworI2VuZGlmCisKKyAgICBzdGF0dXMgPSBXZGZEcml2ZXJDcmVhdGUoRHJpdmVyT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RyeVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdERl9OT19PQkpFQ1RfQVRUUklCVVRFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbmZpZywKKyNpZmRlZiBPVFRNUF9MRUdBQ1kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdsb2JhbERhdGEuV2RmRHJpdmVyCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiV2RmRHJpdmVyQ3JlYXRlIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgCisjaWZkZWYgT1RUTVBfTEVHQUNZCisgICAgTVBDaGFyLkhlYWRlci5UeXBlID0gTkRJU19PQkpFQ1RfVFlQRV9NSU5JUE9SVF9EUklWRVJfQ0hBUkFDVEVSSVNUSUNTOworICAgIE1QQ2hhci5IZWFkZXIuUmV2aXNpb24gPSBORElTX01JTklQT1JUX0RSSVZFUl9DSEFSQUNURVJJU1RJQ1NfUkVWSVNJT05fMjsKKyAgICBNUENoYXIuSGVhZGVyLlNpemUgPSBORElTX1NJWkVPRl9NSU5JUE9SVF9EUklWRVJfQ0hBUkFDVEVSSVNUSUNTX1JFVklTSU9OXzI7CisKKyAgICAvLyBWZXJzaW9uIFN1ZmYKKyAgICBNUENoYXIuTWFqb3JOZGlzVmVyc2lvbiA9IE5ESVNfTUlOSVBPUlRfTUFKT1JfVkVSU0lPTjsKKyAgICBNUENoYXIuTWlub3JOZGlzVmVyc2lvbiA9IE5ESVNfTUlOSVBPUlRfTUlOT1JfVkVSU0lPTjsKKyAgICBNUENoYXIuTWFqb3JEcml2ZXJWZXJzaW9uID0gTklDX1ZFTkRPUl9EUklWRVJfVkVSU0lPTl9NQUpPUjsKKyAgICBNUENoYXIuTWlub3JEcml2ZXJWZXJzaW9uID0gTklDX1ZFTkRPUl9EUklWRVJfVkVSU0lPTl9NSU5PUjsKKworICAgIE1QQ2hhci5Jbml0aWFsaXplSGFuZGxlckV4ID0gTVBJbml0aWFsaXplRXg7CisgICAgTVBDaGFyLkhhbHRIYW5kbGVyRXggPSBNUEhhbHRFeDsKKyAgICBNUENoYXIuVW5sb2FkSGFuZGxlciA9IE1QRHJpdmVyVW5sb2FkOworICAgIE1QQ2hhci5QYXVzZUhhbmRsZXIgPSBNUFBhdXNlOworICAgIE1QQ2hhci5SZXN0YXJ0SGFuZGxlciA9IE1QUmVzdGFydDsKKyAgICBNUENoYXIuT2lkUmVxdWVzdEhhbmRsZXIgPSBNUE9pZFJlcXVlc3Q7CisgICAgTVBDaGFyLlNlbmROZXRCdWZmZXJMaXN0c0hhbmRsZXIgPSBNUFNlbmROZXRCdWZmZXJMaXN0czsKKyAgICBNUENoYXIuUmV0dXJuTmV0QnVmZmVyTGlzdHNIYW5kbGVyID0gTVBSZXR1cm5OZXRCdWZmZXJMaXN0czsKKyAgICBNUENoYXIuQ2FuY2VsU2VuZEhhbmRsZXIgPSBNUENhbmNlbFNlbmQ7CisgICAgTVBDaGFyLkRldmljZVBuUEV2ZW50Tm90aWZ5SGFuZGxlciA9IE1QRGV2aWNlUG5wRXZlbnROb3RpZnk7CisgICAgTVBDaGFyLlNodXRkb3duSGFuZGxlckV4ID0gTVBTaHV0ZG93bkV4OworICAgIE1QQ2hhci5DYW5jZWxPaWRSZXF1ZXN0SGFuZGxlciA9IE1QQ2FuY2VsT2lkUmVxdWVzdDsKKworICAgIG5kaXNTdGF0dXMgPSBOZGlzTVJlZ2lzdGVyTWluaXBvcnREcml2ZXIoRHJpdmVyT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0cnlQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdsb2JhbERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTVBDaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdsb2JhbERhdGEuaERyaXZlcik7CisgICAgaWYgKG5kaXNTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiTmRpc01SZWdpc3Rlck1pbmlwb3J0RHJpdmVyIGZhaWxlZCAlIU5ESVNfU1RBVFVTISIsIG5kaXNTdGF0dXMpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNTRlVMOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIE5ibFBhcmFtcy5IZWFkZXIuVHlwZSA9IE5ESVNfT0JKRUNUX1RZUEVfREVGQVVMVDsKKyAgICBOYmxQYXJhbXMuSGVhZGVyLlJldmlzaW9uID0gTkVUX0JVRkZFUl9MSVNUX1BPT0xfUEFSQU1FVEVSU19SRVZJU0lPTl8xOworICAgIE5ibFBhcmFtcy5IZWFkZXIuU2l6ZSA9IE5ESVNfU0laRU9GX05FVF9CVUZGRVJfTElTVF9QT09MX1BBUkFNRVRFUlNfUkVWSVNJT05fMTsKKyAgICBOYmxQYXJhbXMuUG9vbFRhZyA9IE5JQ19UQUdfUkVDVl9OQkw7CisgICAgR2xvYmFsRGF0YS5oTmJsUG9vbCA9IE5kaXNBbGxvY2F0ZU5ldEJ1ZmZlckxpc3RQb29sKEdsb2JhbERhdGEuaERyaXZlciwgJk5ibFBhcmFtcyk7CisgICAgaWYgKEdsb2JhbERhdGEuaE5ibFBvb2wgPT0gMCkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiTmRpc0FsbG9jYXRlTmV0QnVmZmVyTGlzdFBvb2wgZmFpbGVkIik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIE5iUGFyYW1zLkhlYWRlci5UeXBlID0gTkRJU19PQkpFQ1RfVFlQRV9ERUZBVUxUOworICAgIE5iUGFyYW1zLkhlYWRlci5SZXZpc2lvbiA9IE5FVF9CVUZGRVJfUE9PTF9QQVJBTUVURVJTX1JFVklTSU9OXzE7CisgICAgTmJQYXJhbXMuSGVhZGVyLlNpemUgPSBORElTX1NJWkVPRl9ORVRfQlVGRkVSX1BPT0xfUEFSQU1FVEVSU19SRVZJU0lPTl8xOworICAgIE5iUGFyYW1zLlBvb2xUYWcgPSBOSUNfVEFHX1JFQ1ZfTkJMOworICAgIE5iUGFyYW1zLkRhdGFTaXplID0gTUFYX1NQSU5FTF9DT01NQU5EX0xFTkdUSDsKKyAgICBHbG9iYWxEYXRhLmhOYlBvb2wgPSBOZGlzQWxsb2NhdGVOZXRCdWZmZXJQb29sKEdsb2JhbERhdGEuaERyaXZlciwgJk5iUGFyYW1zKTsKKyAgICBpZiAoR2xvYmFsRGF0YS5oTmJQb29sID09IDApCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIk5kaXNBbGxvY2F0ZU5ldEJ1ZmZlckxpc3RQb29sIGZhaWxlZCIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisjZW5kaWYKKworZXJyb3I6CisKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgCisgICAgeworI2lmZGVmIE9UVE1QX0xFR0FDWQorICAgICAgICBNUERyaXZlclVubG9hZChEcml2ZXJPYmplY3QpOworI2Vsc2UKKyAgICAgICAgV1BQX0NMRUFOVVAoRHJpdmVyT2JqZWN0KTsKKyNlbmRpZgorICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworI2lmZGVmIE9UVE1QX0xFR0FDWQorCitQQUdFRAorX1VzZV9kZWNsX2Fubm90YXRpb25zXworVk9JRAorTVBEcml2ZXJVbmxvYWQoCisgICAgX0luXyBQRFJJVkVSX09CSkVDVCBEcml2ZXJPYmplY3QKKyAgICApCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgTVBEcml2ZXJVbmxvYWQgd2lsbCBjbGVhbiB1cCB0aGUgV1BQIHJlc291cmNlcyB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAgICBmb3IgdGhpcyBkcml2ZXIuCisKK0FyZ3VtZW50czoKKworICAgIERyaXZlck9iamVjdCAtIEhhbmRsZSB0byBhIGZyYW1ld29yayBkcml2ZXIgb2JqZWN0IGNyZWF0ZWQgaW4gRHJpdmVyRW50cnkKKworLS0qLworeworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBpZiAoR2xvYmFsRGF0YS5XZGZEcml2ZXIpCisgICAgeworICAgICAgICBOVF9BU1NFUlQoR2xvYmFsRGF0YS5XZGZEcml2ZXIgPT0gV2RmR2V0RHJpdmVyKCkpOworICAgICAgICBXZGZEcml2ZXJNaW5pcG9ydFVubG9hZChHbG9iYWxEYXRhLldkZkRyaXZlcik7CisgICAgICAgIEdsb2JhbERhdGEuV2RmRHJpdmVyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoR2xvYmFsRGF0YS5oTmJsUG9vbCkKKyAgICB7CisgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyTGlzdFBvb2woR2xvYmFsRGF0YS5oTmJsUG9vbCk7CisgICAgICAgIEdsb2JhbERhdGEuaE5ibFBvb2wgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChHbG9iYWxEYXRhLmhEcml2ZXIpCisgICAgeworICAgICAgICBOZGlzTURlcmVnaXN0ZXJNaW5pcG9ydERyaXZlcihHbG9iYWxEYXRhLmhEcml2ZXIpOworICAgICAgICBHbG9iYWxEYXRhLmhEcml2ZXIgPSBudWxscHRyOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKKworI3ByYWdtYSB3YXJuaW5nKHN1cHByZXNzOiAyNTAyNCkgLy8gRGFuZ2Vyb3VzIGNhc3QKKyAgICBXUFBfQ0xFQU5VUChEcml2ZXJPYmplY3QpOworfQorCisjZWxzZQorCitQQUdFRAorVk9JRAorRXZ0RHJpdmVyVW5sb2FkKAorICAgIFdERkRSSVZFUiBEcml2ZXIKKyAgICApCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRXZ0RHJpdmVyVW5sb2FkIHdpbGwgY2xlYW4gdXAgdGhlIFdQUCByZXNvdXJjZXMgdGhhdCB3YXMgYWxsb2NhdGVkCisgICAgZm9yIHRoaXMgZHJpdmVyLgorCitBcmd1bWVudHM6CisKKyAgICBEcml2ZXIgLSBIYW5kbGUgdG8gYSBmcmFtZXdvcmsgZHJpdmVyIG9iamVjdCBjcmVhdGVkIGluIERyaXZlckVudHJ5CisKKy0tKi8KK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEFHRURfQ09ERSgpOworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworICAgIFdQUF9DTEVBTlVQKFdkZkRyaXZlcldkbUdldERyaXZlck9iamVjdChEcml2ZXIpKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvZHJpdmVyLmhwcCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9kcml2ZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2M2U2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvZHJpdmVyLmhwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIEhlYWRlciBmaWxlIGZvciB0aGUgRHJpdmVyIExvYWQgLyBVbmxvYWQgcm91dGluZXMKKyAqLworCisjcHJhZ21hIG9uY2UKKworZXh0ZXJuICJDIiB7CitEUklWRVJfSU5JVElBTElaRSBEcml2ZXJFbnRyeTsKK30KKworI2lmZGVmIE9UVE1QX0xFR0FDWQorUEFHRUQgTUlOSVBPUlRfVU5MT0FEIE1QRHJpdmVyVW5sb2FkOworCit0eXBlZGVmIHN0cnVjdCBfR0xPQkFMUworeworICAgIFdERkRSSVZFUiAgICAgICAgV2RmRHJpdmVyOworICAgIE5ESVNfSEFORExFICAgICAgaERyaXZlcjsKKyAgICBORElTX0hBTkRMRSAgICAgIGhOYmxQb29sOworICAgIE5ESVNfSEFORExFICAgICAgaE5iUG9vbDsKK30gR0xPQkFMUywgKlBHTE9CQUxTOworI2Vsc2UKK1BBR0VEIEVWVF9XREZfRFJJVkVSX1VOTE9BRCBFdnREcml2ZXJVbmxvYWQ7CisjZW5kaWYKKworLy8KKy8vIE93biBWZXJzaW9uCisvLworI2RlZmluZSBOSUNfVkVORE9SX0RSSVZFUl9WRVJTSU9OX01BSk9SICAxCisjZGVmaW5lIE5JQ19WRU5ET1JfRFJJVkVSX1ZFUlNJT05fTUlOT1IgIDAKKyNkZWZpbmUgTklDX1ZFTkRPUl9EUklWRVJfVkVSU0lPTiAoKE5JQ19WRU5ET1JfRFJJVkVSX1ZFUlNJT05fTUFKT1IgPDwgMTYpIHwgTklDX1ZFTkRPUl9EUklWRVJfVkVSU0lPTl9NSU5PUikKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9oYXJkd2FyZS5ocHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvaGFyZHdhcmUuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZGYzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvaGFyZHdhcmUuaHBwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgbW9kdWxlIGRlZmluZXMgY29uc3RhbnRzIHRoYXQgZGVzY3JpYmUgcGh5c2ljYWwgY2hhcmFjdGVyaXN0aWNzIGFuZAorICogICBsaW1pdHMgb2YgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZm5kZWYgSUZfVFlQRV9JRUVFODAyMTU0CisjZGVmaW5lIElGX1RZUEVfSUVFRTgwMjE1NCAgICAgICAgICAgICAgICAgIDI1OSAvLyBJRUVFIDgwMi4xNS40IFdQQU4gaW50ZXJmYWNlCisjZGVmaW5lIE5kaXNQaHlzaWNhbE1lZGl1bU5hdGl2ZTgwMl8xNV80ICAgIChORElTX1BIWVNJQ0FMX01FRElVTSkyMAorI2VuZGlmCisKKy8vCisvLyBMaW5rIGxheWVyIGFkZHJlc3NpbmcKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworCisvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gYSBoYXJkd2FyZSBhZGRyZXNzLiAgODAyLjE1LjQgdXNlcyA4IGJ5dGUgYWRkcmVzc2VzLgorI2RlZmluZSBOSUNfTUFDQUREUl9TSVpFICAgICAgICAgICAgICAgICAgIDgKKworLy8KKy8vIEZyYW1lcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisKKyNkZWZpbmUgSFdfTUFYX0ZSQU1FX1NJWkUgICAgICAgICAgICAgICAgICAxMjgwCisKKy8vCisvLyBNZWRpdW0gcHJvcGVydGllcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisKKyNkZWZpbmUgTklDX01FRElVTV9UWVBFICAgICAgICAgICAgICAgICAgICBOZGlzTWVkaXVtSVAKKworLy8gQ2xhaW0gdG8gYmUgMjUwa2JwcyBkdXBsZXgKKyNkZWZpbmUgS0lMT0JJVFNfUEVSX1NFQ09ORCAgICAgICAgICAgICAgICAxMDAwVUxMCisjZGVmaW5lIE1FR0FCSVRTX1BFUl9TRUNPTkQgICAgICAgICAgICAgICAgMTAwMDAwMFVMTAorI2RlZmluZSBOSUNfUkVDVl9YTUlUX1NQRUVEICAgICAgICAgICAgICAgICgyNTBVTEwqS0lMT0JJVFNfUEVSX1NFQ09ORCkKKworLy8KKy8vIEhhcmR3YXJlIGxpbWl0cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisKKy8vIE1heCBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUKKyNkZWZpbmUgTklDX01BWF9NQ0FTVF9MSVNUICAgICAgICAgICAgICAgICAzMgorCisvLyBNYXhpbXVtIG51bWJlciBvZiB1bmNvbXBsZXRlZCBzZW5kcyB0aGF0IGEgc2luZ2xlIGFkYXB0ZXIgd2lsbCBwZXJtaXQKKyNkZWZpbmUgTklDX01BWF9CVVNZX1NFTkRTICAgICAgICAgICAgICAgICAxMDI0CisKKy8vIE1heGltdW0gbnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMgdGhhdCBjYW4gYmUgaW4gdGhlIE9TIGF0IGFueSB0aW1lCisvLyAoQWxzbyBrbm93biBhcyB0aGUgcmVjZWl2ZSBwb29sIHNpemUpCisjZGVmaW5lIE5JQ19NQVhfT1VUU1RBTkRJTkdfUkVDRUlWRVMgICAgICAgMzIKKworCisvLworLy8gUGh5c2ljYWwgYWRhcHRlciBwcm9wZXJ0aWVzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKworLy8gQ2hhbmdlIHRvIHlvdXIgY29tcGFueSBuYW1lIGluc3RlYWQgb2YgdXNpbmcgT3BlblRocmVhZAorI2RlZmluZSBOSUNfVkVORE9SX0RFU0MgICAgICAgICAgICAgICAgICAgICJPcGVuVGhyZWFkIgorCisvLyBIaWdoZXN0IGJ5dGUgaXMgdGhlIE5JQyBieXRlIHBsdXMgdGhyZWUgdmVuZG9yIGJ5dGVzLiBUaGlzIGlzIG5vcm1hbGx5CisvLyBvYnRhaW5lZCBmcm9tIHRoZSBOSUMuCisjZGVmaW5lIE5JQ19WRU5ET1JfSUQgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorCisjaWZkZWYgT1RUTVBfTEVHQUNZCisjZGVmaW5lIE5JQ19TVVBQT1JURURfRklMVEVSUyAoIFwKKyAgICAgICAgICAgICAgICBORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVEICAgIHwgXAorICAgICAgICAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfTVVMVElDQVNUICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QgICB8IFwKKyAgICAgICAgICAgICAgICBORElTX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTIHwgXAorICAgICAgICAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCkKKyNlbHNlCisjZGVmaW5lIE5JQ19TVVBQT1JURURfRklMVEVSUyAoTkVUX1BBQ0tFVF9GSUxURVJfVFlQRVNfRkxBR1MpICggXAorICAgICAgICAgICAgICAgIE5FVF9QQUNLRVRfRklMVEVSX1RZUEVfRElSRUNURUQgICB8IFwKKyAgICAgICAgICAgICAgICBORVRfUEFDS0VUX0ZJTFRFUl9UWVBFX01VTFRJQ0FTVCAgfCBcCisgICAgICAgICAgICAgICAgTkVUX1BBQ0tFVF9GSUxURVJfVFlQRV9CUk9BRENBU1QgIHwgXAorICAgICAgICAgICAgICAgIE5FVF9QQUNLRVRfRklMVEVSX1RZUEVfUFJPTUlTQ1VPVVMgfCBcCisgICAgICAgICAgICAgICAgTkVUX1BBQ0tFVF9GSUxURVJfVFlQRV9BTExfTVVMVElDQVNUKQorI2VuZGlmCisKKy8vCisvLyBTcGVjaWZ5IGEgYml0bWFzayB0aGF0IGRlZmluZXMgb3B0aW9uYWwgcHJvcGVydGllcyBvZiB0aGUgTklDLgorLy8gVGhpcyBtaW5pcG9ydCBpbmRpY2F0ZXMgcmVjZWl2ZSB3aXRoIE5kaXNNSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMKKy8vIGZ1bmN0aW9uLiAgU3VjaCBhIGRyaXZlciBzaG91bGQgc2V0IHRoaXMgTkRJU19NQUNfT1BUSU9OX1RSQU5TRkVSU19OT1RfUEVORAorLy8gZmxhZy4KKy8vCisvLyBORElTX01BQ19PUFRJT05fTk9fTE9PUEJBQ0sgdGVsbHMgTkRJUyB0aGF0IE5JQyBoYXMgbm8gaW50ZXJuYWwKKy8vIGxvb3BiYWNrIHN1cHBvcnQgc28gTkRJUyB3aWxsIG1hbmFnZSBsb29wYmFja3Mgb24gYmVoYWxmIG9mCisvLyB0aGlzIGRyaXZlci4KKy8vCisvLyBORElTX01BQ19PUFRJT05fQ09QWV9MT09LQUhFQURfREFUQSB0ZWxscyB0aGUgcHJvdG9jb2wgdGhhdAorLy8gb3VyIHJlY2VpdmUgYnVmZmVyIGlzIG5vdCBvbiBhIGRldmljZS1zcGVjaWZpYyBjYXJkLiBJZgorLy8gTkRJU19NQUNfT1BUSU9OX0NPUFlfTE9PS0FIRUFEX0RBVEEgaXMgbm90IHNldCwgbXVsdGktYnVmZmVyCisvLyBpbmRpY2F0aW9ucyBhcmUgY29waWVkIHRvIGEgc2luZ2xlIGZsYXQgYnVmZmVyLgorLy8KKyNkZWZpbmUgTklDX01BQ19PUFRJT05TIChcCisgICAgICAgICAgICAgICAgTkRJU19NQUNfT1BUSU9OX0NPUFlfTE9PS0FIRUFEX0RBVEEgfCBcCisgICAgICAgICAgICAgICAgTkRJU19NQUNfT1BUSU9OX1RSQU5TRkVSU19OT1RfUEVORCAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19NQUNfT1BUSU9OX05PX0xPT1BCQUNLICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19NQUNfT1BUSU9OXzgwMjFQX1BSSU9SSVRZICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19NQUNfT1BUSU9OXzgwMjFRX1ZMQU4pCisKKy8vIE5ESVMgNi54IG1pbmlwb3J0cyBtdXN0IHN1cHBvcnQgYWxsIGNvdW50ZXJzIGluIE9JRF9HRU5fU1RBVElTVElDUy4KKyNkZWZpbmUgTklDX1NVUFBPUlRFRF9TVEFUSVNUSUNTIChcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0RJUkVDVEVEX0ZSQU1FU19SQ1YgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX01VTFRJQ0FTVF9GUkFNRVNfUkNWICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JST0FEQ0FTVF9GUkFNRVNfUkNWICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JZVEVTX1JDViAgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX1JDVl9ESVNDQVJEUyAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX1JDVl9FUlJPUiAgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0RJUkVDVEVEX0ZSQU1FU19YTUlUICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX01VTFRJQ0FTVF9GUkFNRVNfWE1JVCAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JST0FEQ0FTVF9GUkFNRVNfWE1JVCAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JZVEVTX1hNSVQgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX1hNSVRfRVJST1IgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX1hNSVRfRElTQ0FSRFMgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0RJUkVDVEVEX0JZVEVTX1JDViAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX01VTFRJQ0FTVF9CWVRFU19SQ1YgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JST0FEQ0FTVF9CWVRFU19SQ1YgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0RJUkVDVEVEX0JZVEVTX1hNSVQgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX01VTFRJQ0FTVF9CWVRFU19YTUlUICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JST0FEQ0FTVF9CWVRFU19YTUlUKQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2hkbGMuY3BwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2hkbGMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZGM5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvaGRsYy5jcHAKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYW4gSERMQy1saXRlIGVuY29kZXIgYW5kIGRlY29kZXIuCisgKi8KKworI2luY2x1ZGUgInBjaC5ocHAiCisjaW5jbHVkZSAiaGRsYy50bWgiCisKKy8qKgorICogRkNTIGxvb2t1cCB0YWJsZQorICovCitlbnVtCit7CisgICAga0luaXRGY3MgPSAweGZmZmYsICAvLy88IEluaXRpYWwgRkNTIHZhbHVlLgorICAgIGtHb29kRmNzID0gMHhmMGI4LCAgLy8vPCBHb29kIEZDUyB2YWx1ZS4KK307CisKK3N0YXRpYyBib29sCitoZGxjX2J5dGVfbmVlZHNfZXNjYXBlKFVDSEFSIGJ5dGUpCit7CisgICAgc3dpdGNoIChieXRlKSAKKyAgICB7CisgICAgY2FzZSBIZGxjWE9uOgorICAgIGNhc2UgSGRsY1hPZmY6CisgICAgY2FzZSBIZGxjRXNjYXBlU2VxdWVuY2U6CisgICAgY2FzZSBIZGxjRmxhZ1NlcXVlbmNlOgorICAgIGNhc2UgSGRsY1NwZWNpYWw6CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLyoqCisgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIGFuIEZDUy4KKyAqCisgKiBAcGFyYW1baW5dICBhRmNzICAgVGhlIEZDUyB0byB1cGRhdGUuCisgKiBAcGFyYW1baW5dICBhQnl0ZSAgVGhlIGlucHV0IGJ5dGUgdmFsdWUuCisgKgorICogQHJldHVybnMgVGhlIHVwZGF0ZWQgRkNTLgorICovCitVU0hPUlQgVXBkYXRlRmNzKFVTSE9SVCBhRmNzLCBVQ0hBUiBhQnl0ZSkKK3sKKyAgICBjb25zdCBVU0hPUlQgc0Zjc1RhYmxlWzI1Nl0gPQorICAgIHsKKyAgICAgICAgMHgwMDAwLCAweDExODksIDB4MjMxMiwgMHgzMjliLCAweDQ2MjQsIDB4NTdhZCwgMHg2NTM2LCAweDc0YmYsCisgICAgICAgIDB4OGM0OCwgMHg5ZGMxLCAweGFmNWEsIDB4YmVkMywgMHhjYTZjLCAweGRiZTUsIDB4ZTk3ZSwgMHhmOGY3LAorICAgICAgICAweDEwODEsIDB4MDEwOCwgMHgzMzkzLCAweDIyMWEsIDB4NTZhNSwgMHg0NzJjLCAweDc1YjcsIDB4NjQzZSwKKyAgICAgICAgMHg5Y2M5LCAweDhkNDAsIDB4YmZkYiwgMHhhZTUyLCAweGRhZWQsIDB4Y2I2NCwgMHhmOWZmLCAweGU4NzYsCisgICAgICAgIDB4MjEwMiwgMHgzMDhiLCAweDAyMTAsIDB4MTM5OSwgMHg2NzI2LCAweDc2YWYsIDB4NDQzNCwgMHg1NWJkLAorICAgICAgICAweGFkNGEsIDB4YmNjMywgMHg4ZTU4LCAweDlmZDEsIDB4ZWI2ZSwgMHhmYWU3LCAweGM4N2MsIDB4ZDlmNSwKKyAgICAgICAgMHgzMTgzLCAweDIwMGEsIDB4MTI5MSwgMHgwMzE4LCAweDc3YTcsIDB4NjYyZSwgMHg1NGI1LCAweDQ1M2MsCisgICAgICAgIDB4YmRjYiwgMHhhYzQyLCAweDllZDksIDB4OGY1MCwgMHhmYmVmLCAweGVhNjYsIDB4ZDhmZCwgMHhjOTc0LAorICAgICAgICAweDQyMDQsIDB4NTM4ZCwgMHg2MTE2LCAweDcwOWYsIDB4MDQyMCwgMHgxNWE5LCAweDI3MzIsIDB4MzZiYiwKKyAgICAgICAgMHhjZTRjLCAweGRmYzUsIDB4ZWQ1ZSwgMHhmY2Q3LCAweDg4NjgsIDB4OTllMSwgMHhhYjdhLCAweGJhZjMsCisgICAgICAgIDB4NTI4NSwgMHg0MzBjLCAweDcxOTcsIDB4NjAxZSwgMHgxNGExLCAweDA1MjgsIDB4MzdiMywgMHgyNjNhLAorICAgICAgICAweGRlY2QsIDB4Y2Y0NCwgMHhmZGRmLCAweGVjNTYsIDB4OThlOSwgMHg4OTYwLCAweGJiZmIsIDB4YWE3MiwKKyAgICAgICAgMHg2MzA2LCAweDcyOGYsIDB4NDAxNCwgMHg1MTlkLCAweDI1MjIsIDB4MzRhYiwgMHgwNjMwLCAweDE3YjksCisgICAgICAgIDB4ZWY0ZSwgMHhmZWM3LCAweGNjNWMsIDB4ZGRkNSwgMHhhOTZhLCAweGI4ZTMsIDB4OGE3OCwgMHg5YmYxLAorICAgICAgICAweDczODcsIDB4NjIwZSwgMHg1MDk1LCAweDQxMWMsIDB4MzVhMywgMHgyNDJhLCAweDE2YjEsIDB4MDczOCwKKyAgICAgICAgMHhmZmNmLCAweGVlNDYsIDB4ZGNkZCwgMHhjZDU0LCAweGI5ZWIsIDB4YTg2MiwgMHg5YWY5LCAweDhiNzAsCisgICAgICAgIDB4ODQwOCwgMHg5NTgxLCAweGE3MWEsIDB4YjY5MywgMHhjMjJjLCAweGQzYTUsIDB4ZTEzZSwgMHhmMGI3LAorICAgICAgICAweDA4NDAsIDB4MTljOSwgMHgyYjUyLCAweDNhZGIsIDB4NGU2NCwgMHg1ZmVkLCAweDZkNzYsIDB4N2NmZiwKKyAgICAgICAgMHg5NDg5LCAweDg1MDAsIDB4Yjc5YiwgMHhhNjEyLCAweGQyYWQsIDB4YzMyNCwgMHhmMWJmLCAweGUwMzYsCisgICAgICAgIDB4MThjMSwgMHgwOTQ4LCAweDNiZDMsIDB4MmE1YSwgMHg1ZWU1LCAweDRmNmMsIDB4N2RmNywgMHg2YzdlLAorICAgICAgICAweGE1MGEsIDB4YjQ4MywgMHg4NjE4LCAweDk3OTEsIDB4ZTMyZSwgMHhmMmE3LCAweGMwM2MsIDB4ZDFiNSwKKyAgICAgICAgMHgyOTQyLCAweDM4Y2IsIDB4MGE1MCwgMHgxYmQ5LCAweDZmNjYsIDB4N2VlZiwgMHg0Yzc0LCAweDVkZmQsCisgICAgICAgIDB4YjU4YiwgMHhhNDAyLCAweDk2OTksIDB4ODcxMCwgMHhmM2FmLCAweGUyMjYsIDB4ZDBiZCwgMHhjMTM0LAorICAgICAgICAweDM5YzMsIDB4Mjg0YSwgMHgxYWQxLCAweDBiNTgsIDB4N2ZlNywgMHg2ZTZlLCAweDVjZjUsIDB4NGQ3YywKKyAgICAgICAgMHhjNjBjLCAweGQ3ODUsIDB4ZTUxZSwgMHhmNDk3LCAweDgwMjgsIDB4OTFhMSwgMHhhMzNhLCAweGIyYjMsCisgICAgICAgIDB4NGE0NCwgMHg1YmNkLCAweDY5NTYsIDB4NzhkZiwgMHgwYzYwLCAweDFkZTksIDB4MmY3MiwgMHgzZWZiLAorICAgICAgICAweGQ2OGQsIDB4YzcwNCwgMHhmNTlmLCAweGU0MTYsIDB4OTBhOSwgMHg4MTIwLCAweGIzYmIsIDB4YTIzMiwKKyAgICAgICAgMHg1YWM1LCAweDRiNGMsIDB4NzlkNywgMHg2ODVlLCAweDFjZTEsIDB4MGQ2OCwgMHgzZmYzLCAweDJlN2EsCisgICAgICAgIDB4ZTcwZSwgMHhmNjg3LCAweGM0MWMsIDB4ZDU5NSwgMHhhMTJhLCAweGIwYTMsIDB4ODIzOCwgMHg5M2IxLAorICAgICAgICAweDZiNDYsIDB4N2FjZiwgMHg0ODU0LCAweDU5ZGQsIDB4MmQ2MiwgMHgzY2ViLCAweDBlNzAsIDB4MWZmOSwKKyAgICAgICAgMHhmNzhmLCAweGU2MDYsIDB4ZDQ5ZCwgMHhjNTE0LCAweGIxYWIsIDB4YTAyMiwgMHg5MmI5LCAweDgzMzAsCisgICAgICAgIDB4N2JjNywgMHg2YTRlLCAweDU4ZDUsIDB4NDk1YywgMHgzZGUzLCAweDJjNmEsIDB4MWVmMSwgMHgwZjc4CisgICAgfTsKKyAgICByZXR1cm4gKGFGY3MgPj4gOCkgXiBzRmNzVGFibGVbKGFGY3MgXiBhQnl0ZSkgJiAweGZmXTsKK30KKworVUxPTkcKK0hkbGNDb21wdXRlRW5jb2RlZEJ5dGVMZW5ndGgoCisgICAgX0luXyBVQ0hBUiAgICAgICAgICBhQnl0ZQorICAgICkKK3sKKyAgICByZXR1cm4gaGRsY19ieXRlX25lZWRzX2VzY2FwZShhQnl0ZSkgPyAyIDogMTsKK30KKworVUxPTkcKK0hkbGNDb21wdXRlRW5jb2RlZExlbmd0aCgKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERlY29kZWRCdWZmZXJMZW5ndGgpIAorICAgICAgICAgUFVDSEFSICAgICAgICAgRGVjb2RlZEJ1ZmZlciwKKyAgICBfSW5fIFVMT05HICAgICAgICAgIERlY29kZWRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgVVNIT1JUIEZjcyA9IGtJbml0RmNzOworICAgIFVMT05HIExlbmd0aCA9IDI7IC8vIFN0YXJ0IGFuZCBlbmQgc2VxdWVuY2UKKyAgICAKKyAgICBmb3IgKFVMT05HIGkgPSAwOyBpIDwgRGVjb2RlZEJ1ZmZlckxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgTGVuZ3RoICs9IEhkbGNDb21wdXRlRW5jb2RlZEJ5dGVMZW5ndGgoRGVjb2RlZEJ1ZmZlcltpXSk7CisgICAgICAgIEZjcyA9IFVwZGF0ZUZjcyhGY3MsIERlY29kZWRCdWZmZXJbaV0pOworICAgIH0KKyAgICAKKyAgICBGY3MgXj0gMHhmZmZmOworICAgIAorICAgIExlbmd0aCArPSBIZGxjQ29tcHV0ZUVuY29kZWRCeXRlTGVuZ3RoKEZjcyAmIDB4ZmYpOworICAgIExlbmd0aCArPSBIZGxjQ29tcHV0ZUVuY29kZWRCeXRlTGVuZ3RoKEZjcyA+PiA4KTsKKworICAgIHJldHVybiBMZW5ndGg7Cit9CisKK2Jvb2wKK0hkbGNFbmNvZGVCeXRlKAorICAgIF9Jbl8gICAgVUNIQVIgICAgICAgYUJ5dGUsCisgICAgX0lub3V0XyBVTE9ORyYgICAgICBPZmZzZXQsCisgICAgX0luXyAgICBVTE9ORyAgICAgICBFbmNvZGVkQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXyhFbmNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgIEVuY29kZWRCdWZmZXIKKyAgICApCit7CisgICAgaWYgKGhkbGNfYnl0ZV9uZWVkc19lc2NhcGUoYUJ5dGUpKQorICAgIHsKKyAgICAgICAgaWYgKE9mZnNldCArIDIgPiBFbmNvZGVkQnVmZmVyTGVuZ3RoKSByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRW5jb2RlZEJ1ZmZlcltPZmZzZXQrK10gPSBIZGxjRXNjYXBlU2VxdWVuY2U7CisgICAgICAgIEVuY29kZWRCdWZmZXJbT2Zmc2V0KytdID0gKGFCeXRlIF4gMHgyMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChPZmZzZXQgKyAxID4gRW5jb2RlZEJ1ZmZlckxlbmd0aCkgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEVuY29kZWRCdWZmZXJbT2Zmc2V0KytdID0gYUJ5dGU7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK19TdWNjZXNzXyhyZXR1cm4gPT0gdHJ1ZSkKK2Jvb2wKK0hkbGNFbmNvZGVCdWZmZXIoCisgICAgX0luX3JlYWRzX2J5dGVzXyhEZWNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgIFBVQ0hBUiAgICAgICAgIERlY29kZWRCdWZmZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICBEZWNvZGVkQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXyhFbmNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgIFBVQ0hBUiAgICAgICAgIEVuY29kZWRCdWZmZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICBFbmNvZGVkQnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIFVTSE9SVCBGY3MgPSBrSW5pdEZjczsKKyAgICBVTE9ORyBPZmZzZXQgPSAwOworICAgIGJvb2wgQ29tcGxldGUgPSBmYWxzZTsKKworICAgIGlmIChPZmZzZXQgKyAxID4gRW5jb2RlZEJ1ZmZlckxlbmd0aCkgZ290byBlcnJvcjsKKyAgICBFbmNvZGVkQnVmZmVyW09mZnNldCsrXSA9IEhkbGNGbGFnU2VxdWVuY2U7CisKKyAgICBmb3IgKFVMT05HIGkgPSAwOyBpIDwgRGVjb2RlZEJ1ZmZlckxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgVUNIQVIgYUJ5dGUgPSBEZWNvZGVkQnVmZmVyW2ldOworCisgICAgICAgIGlmICghSGRsY0VuY29kZUJ5dGUoYUJ5dGUsIE9mZnNldCwgRW5jb2RlZEJ1ZmZlckxlbmd0aCwgRW5jb2RlZEJ1ZmZlcikpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBGY3MgPSBVcGRhdGVGY3MoRmNzLCBhQnl0ZSk7CisgICAgfQorICAgIAorICAgIEZjcyBePSAweGZmZmY7CisgICAgCisgICAgaWYgKCFIZGxjRW5jb2RlQnl0ZShGY3MgJiAweGZmLCBPZmZzZXQsIEVuY29kZWRCdWZmZXJMZW5ndGgsIEVuY29kZWRCdWZmZXIpIHx8CisgICAgICAgICFIZGxjRW5jb2RlQnl0ZShGY3MgPj4gOCwgICBPZmZzZXQsIEVuY29kZWRCdWZmZXJMZW5ndGgsIEVuY29kZWRCdWZmZXIpKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIAorICAgIGlmIChPZmZzZXQgKyAxID4gRW5jb2RlZEJ1ZmZlckxlbmd0aCkgZ290byBlcnJvcjsKKyAgICBFbmNvZGVkQnVmZmVyW09mZnNldCsrXSA9IEhkbGNGbGFnU2VxdWVuY2U7CisKKyAgICBOVF9BU1NFUlQoT2Zmc2V0ID09IEVuY29kZWRCdWZmZXJMZW5ndGgpOworICAgIENvbXBsZXRlID0gdHJ1ZTsKKworZXJyb3I6CisKKyAgICByZXR1cm4gQ29tcGxldGU7Cit9CisKK2VudW0gSGRsY0RlY29kZVN0YXRlCit7CisgICAga1N0YXRlTm9TeW5jID0gMCwKKyAgICBrU3RhdGVTeW5jLAorICAgIGtTdGF0ZUVzY2FwZWQsCit9OworCitfU3VjY2Vzc18ocmV0dXJuID09IHRydWUpCitib29sCitIZGxjRGVjb2RlQnVmZmVyKAorICAgIF9Jbl9yZWFkc19ieXRlc18oKkVuY29kZWRCdWZmZXJMZW5ndGgpIAorICAgICAgICAgICAgUFVDSEFSICAgICAgRW5jb2RlZEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgIEVuY29kZWRCdWZmZXJMZW5ndGgsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICBEZWNvZGVkQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzX29wdF8oKkRlY29kZWRCdWZmZXJMZW5ndGgpIAorICAgICAgICAgICAgUFVDSEFSICAgICAgRGVjb2RlZEJ1ZmZlciwKKyAgICBfT3V0XyAgIGJvb2wqICAgICAgIElzR29vZAorICAgICkKK3sKKyAgICBVQ0hBUiBieXRlOworICAgIEhkbGNEZWNvZGVTdGF0ZSBzdGF0ZSA9IGtTdGF0ZU5vU3luYzsKKyAgICBVTE9ORyBEZWNvZGVkTGVuZ3RoID0gMDsKKyAgICBVU0hPUlQgRmNzID0ga0luaXRGY3M7CisKKyAgICBmb3IgKFVMT05HIGkgPSAwOyBpIDwgKkVuY29kZWRCdWZmZXJMZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIGJ5dGUgPSBFbmNvZGVkQnVmZmVyW2ldOworCisgICAgICAgIHN3aXRjaCAoc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2Uga1N0YXRlTm9TeW5jOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChieXRlID09IEhkbGNGbGFnU2VxdWVuY2UpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIG91dHB1dCBmb3IganVuayBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICpFbmNvZGVkQnVmZmVyTGVuZ3RoID0gaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBvdXRwdXQgJ0lzR29vZCcgZmxhZyBiYXNlZCBvbiBGQ1MKKyAgICAgICAgICAgICAgICAgICAgICAgICpJc0dvb2QgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGtTdGF0ZVN5bmM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIGtTdGF0ZVN5bmM6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChieXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBIZGxjRXNjYXBlU2VxdWVuY2U6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0ga1N0YXRlRXNjYXBlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSGRsY0ZsYWdTZXF1ZW5jZToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQgd2Fzbid0IGVub3VnaCBidWZmZXIgdG8gYmUgYSBjb21wbGV0ZSBzZXF1ZW5jZSwgbWF5YmUgd2UgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY3R1YWxseSBiZXR3ZWVuIHNlcXVlbmNlcy4gTGVhdmUgdGhlIHRyYWlsaW5nIGVzY2FwZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IHNpemVvZihVU0hPUlQpICsgMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIG91dHB1dCBlbmNvZGVkIGJ1ZmZlciBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRW5jb2RlZEJ1ZmZlckxlbmd0aCA9IGk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSXNHb29kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBvdXRwdXQgZW5jb2RlZCBidWZmZXIgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkVuY29kZWRCdWZmZXJMZW5ndGggPSBpICsgMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZGVjb2RlZCBidWZmZXIgbGVuZ3RoIChzdWJ0cmFjdCAyIGZvciB0aGUgRkNTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpEZWNvZGVkQnVmZmVyTGVuZ3RoID0gRGVjb2RlZExlbmd0aCAtIDI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIG91dHB1dCAnSXNHb29kJyBmbGFnIGJhc2VkIG9uIEZDUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJc0dvb2QgPSAoRmNzID09IGtHb29kRmNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRmNzID0gVXBkYXRlRmNzKEZjcywgYnl0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBEZWNvZGVkTGVuZ3RoKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRGVjb2RlZEJ1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKkRlY29kZWRCdWZmZXJMZW5ndGggPj0gRGVjb2RlZExlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZWRCdWZmZXJbRGVjb2RlZExlbmd0aCAtIDFdID0gYnl0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Uga1N0YXRlRXNjYXBlZDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCAqRW5jb2RlZEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJ5dGUgXj0gMHgyMDsKKyAgICAgICAgICAgICAgICAgICAgRmNzID0gVXBkYXRlRmNzKEZjcywgYnl0ZSk7CisgICAgICAgICAgICAgICAgICAgIERlY29kZWRMZW5ndGgrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERlY29kZWRCdWZmZXIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqRGVjb2RlZEJ1ZmZlckxlbmd0aCA+PSBEZWNvZGVkTGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZWRCdWZmZXJbRGVjb2RlZExlbmd0aCAtIDFdID0gYnl0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0ga1N0YXRlU3luYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90IGVub3VnaCBidWZmZXIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvaGRsYy5ocHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvaGRsYy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3MzM5NAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9oZGxjLmhwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgYW4gSERMQy1saXRlIGVuY29kZXIgYW5kIGRlY29kZXIuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK2VudW0KK3sKKyAgICBIZGxjWE9uICAgICAgICAgICAgPSAweDExLAorICAgIEhkbGNYT2ZmICAgICAgICAgICA9IDB4MTMsCisgICAgSGRsY0ZsYWdTZXF1ZW5jZSAgID0gMHg3ZSwgIC8vLzwgSERMQyBGbGFnIHZhbHVlCisgICAgSGRsY0VzY2FwZVNlcXVlbmNlID0gMHg3ZCwgIC8vLzwgSERMQyBFc2NhcGUgdmFsdWUKKyAgICBIZGxjU3BlY2lhbCAgICAgICAgPSAweEY4Cit9OworCitVTE9ORworSGRsY0NvbXB1dGVFbmNvZGVkTGVuZ3RoKAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGVjb2RlZEJ1ZmZlckxlbmd0aCkgCisgICAgICAgICBQVUNIQVIgICAgICAgICBEZWNvZGVkQnVmZmVyLAorICAgIF9Jbl8gVUxPTkcgICAgICAgICAgRGVjb2RlZEJ1ZmZlckxlbmd0aAorICAgICk7CisKK19TdWNjZXNzXyhyZXR1cm4gPT0gdHJ1ZSkKK2Jvb2wKK0hkbGNFbmNvZGVCdWZmZXIoCisgICAgX0luX3JlYWRzX2J5dGVzXyhEZWNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgIFBVQ0hBUiAgICAgICAgIERlY29kZWRCdWZmZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICBEZWNvZGVkQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXyhFbmNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgIFBVQ0hBUiAgICAgICAgIEVuY29kZWRCdWZmZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICBFbmNvZGVkQnVmZmVyTGVuZ3RoCisgICAgKTsKKworX1N1Y2Nlc3NfKHJldHVybiA9PSB0cnVlKQorYm9vbAorSGRsY0RlY29kZUJ1ZmZlcigKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKCpFbmNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgIEVuY29kZWRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICBFbmNvZGVkQnVmZmVyTGVuZ3RoLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgRGVjb2RlZEJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc19vcHRfKCpEZWNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgIERlY29kZWRCdWZmZXIsCisgICAgX091dF8gICBib29sKiAgICAgICBJc0dvb2QKKyAgICApOwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL29pZC5jcHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvb2lkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTM0YzlhCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL29pZC5jcHAKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwY2guaHBwIgorI2luY2x1ZGUgIm9pZC50bWgiCisKK3RlbXBsYXRlPHR5cGVuYW1lIF9EYXR1bT4KK1BBR0VEIE5ESVNfU1RBVFVTIFJlcXVlc3RRdWVyeSggX0luXyBQTkRJU19PSURfUkVRVUVTVCBPaWRSZXF1ZXN0LCBjb25zdCBfRGF0dW0gJiB2YWx1ZSApOworCisjZGVmaW5lIFZFUklGWV9ORElTX09CSkVDVF9IRUFERVIoX2hlYWRlciwgX3R5cGUsIF9yZXZpc2lvbiwgX3NpemUpIFwKKyAgICAoKChfaGVhZGVyKS5UeXBlID09IF90eXBlKSAmJiBcCisgICAgICgoX2hlYWRlcikuUmV2aXNpb24gPj0gX3JldmlzaW9uKSAmJiBcCisgICAgICgoX2hlYWRlcikuU2l6ZSA+PSBfc2l6ZSkpCisKKyNkZWZpbmUgVkVSSUZZX05ESVNfT0JKRUNUX0hFQURFUl9QVFIoX2hlYWRlciwgX3R5cGUsIF9yZXZpc2lvbiwgX3NpemUpIFwKKyAgICAoKChfaGVhZGVyKS0+VHlwZSA9PSBfdHlwZSkgJiYgXAorICAgICAoKF9oZWFkZXIpLT5SZXZpc2lvbiA+PSBfcmV2aXNpb24pICYmIFwKKyAgICAgKChfaGVhZGVyKS0+U2l6ZSA+PSBfc2l6ZSkpCisKKyNkZWZpbmUgVkVSSUZZX05ESVNfUkVRVUVTVF9PQkpFQ1RfSEVBREVSKF9idWZmZXIsIF90eXBlLCBfcmV2aXNpb24sIF9zaXplKSBcCisgICAgVkVSSUZZX05ESVNfT0JKRUNUX0hFQURFUl9QVFIocmVpbnRlcnByZXRfY2FzdDxQTkRJU19PQkpFQ1RfSEVBREVSPihfYnVmZmVyKSwgX3R5cGUsIF9yZXZpc2lvbiwgX3NpemUpCisKKyNkZWZpbmUgQVNTSUdOX05ESVNfT0JKRUNUX0hFQURFUihfaGVhZGVyLCBfdHlwZSwgX3JldmlzaW9uLCBfc2l6ZSkgXAorICAgIChfaGVhZGVyKS5UeXBlID0gX3R5cGU7IFwKKyAgICAoX2hlYWRlcikuUmV2aXNpb24gPSBfcmV2aXNpb247IFwKKyAgICAoX2hlYWRlcikuU2l6ZSA9IF9zaXplOyAKKworI2RlZmluZSBBU1NJR05fTkRJU19PQkpFQ1RfSEVBREVSX1BUUihfaGVhZGVyLCBfdHlwZSwgX3JldmlzaW9uLCBfc2l6ZSkgXAorICAgIChfaGVhZGVyKS0+VHlwZSA9IF90eXBlOyBcCisgICAgKF9oZWFkZXIpLT5SZXZpc2lvbiA9IF9yZXZpc2lvbjsgXAorICAgIChfaGVhZGVyKS0+U2l6ZSA9IF9zaXplOyAKKworLy8KKy8vIExpc3Qgb2YgU3VwcG9ydGVkIE9JRHMuCisvLworTkRJU19PSUQgTklDU3VwcG9ydGVkT2lkc1tdID0KK3sKKyAgICAvLyBHZW5lcmFsCisgICAgT0lEX0dFTl9DVVJSRU5UX0xPT0tBSEVBRCwKKyAgICBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiwKKyAgICBPSURfR0VOX0lOVEVSUlVQVF9NT0RFUkFUSU9OLAorICAgIE9JRF9HRU5fTElOS19QQVJBTUVURVJTLCAgIC8vIFRPRE86IE1hbmRhdG9yeSBTZXQKKyAgICBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRSwKKyAgICBPSURfR0VOX1JDVl9PSywKKyAgICBPSURfR0VOX1JFQ0VJVkVfQkxPQ0tfU0laRSwKKyAgICBPSURfR0VOX1JFQ0VJVkVfQlVGRkVSX1NQQUNFLAorICAgIE9JRF9HRU5fU1RBVElTVElDUywKKyAgICBPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkUsCisgICAgT0lEX0dFTl9UUkFOU01JVF9CVUZGRVJfU1BBQ0UsCisgICAgT0lEX0dFTl9WRU5ET1JfRFJJVkVSX1ZFUlNJT04sCisgICAgT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT04sCisgICAgT0lEX0dFTl9WRU5ET1JfSUQsCisgICAgT0lEX0dFTl9YTUlUX09LLAorICAgIE9JRF9HRU5fTElOS19QQVJBTUVURVJTLCAgICAvLyBUT0RPOiBNYW5kYXRvcnkgU2V0CisKKyAgICAvLyA4MDIuMyBTcGVjaWZpYworICAgIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MsCisgICAgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTLAorICAgIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVCwKKyAgICBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkUsCisgICAgT0lEXzgwMl8zX1JDVl9FUlJPUl9BTElHTk1FTlQsCisgICAgT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTiwKKyAgICBPSURfODAyXzNfWE1JVF9NT1JFX0NPTExJU0lPTlMsCisKKyAgICAvLyBQblAgU3R1ZmYKKyAgICBPSURfUE5QX0NBUEFCSUxJVElFUywgICAgICAgICAgICAgICAgLy8gT3B0aW9uYWwKKyAgICBPSURfUE5QX1FVRVJZX1BPV0VSLCAgICAgICAgICAgICAgICAgLy8gT3B0aW9uYWwKKyAgICAKKyAgICAvLyBPcGVuVGhyZWFkIFN0dWZmCisgICAgT0lEX09UX0NBUEFCSUxJVElFUywKK307CisKK2NvbnN0IFVMT05HIFNpemVPZk5JQ1N1cHBvcnRlZE9pZHMgPSBzaXplb2YoTklDU3VwcG9ydGVkT2lkcyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9EYXR1bT4KK1BBR0VECitORElTX1NUQVRVUyBSZXF1ZXN0UXVlcnkoIF9Jbl8gUE5ESVNfT0lEX1JFUVVFU1QgT2lkUmVxdWVzdCwgY29uc3QgX0RhdHVtICYgdmFsdWUgKQoreworICAgIFBBR0VEX0NPREUoKTsKKyAgICBOVF9BU1NFUlQoIChPaWRSZXF1ZXN0LT5SZXF1ZXN0VHlwZSA9PSBOZGlzUmVxdWVzdFF1ZXJ5SW5mb3JtYXRpb24pIHx8CisgICAgICAgIChPaWRSZXF1ZXN0LT5SZXF1ZXN0VHlwZSA9PSBOZGlzUmVxdWVzdFF1ZXJ5U3RhdGlzdGljcykgKTsKKworICAgIGlmIChPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoIDwgc2l6ZW9mKCBfRGF0dW0gKSkKKyAgICB7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNOZWVkZWQgPSBzaXplb2YoIF9EYXR1bSApOworICAgICAgICBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkJ5dGVzV3JpdHRlbiA9IDA7CisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19JTlZBTElEX0xFTkdUSDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc05lZWRlZCA9IHNpemVvZiggX0RhdHVtICk7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNXcml0dGVuID0gc2l6ZW9mKCBfRGF0dW0gKTsKKyAgICAgICAgX0RhdHVtICogcERhdGEgPSByZWludGVycHJldF9jYXN0PF9EYXR1bSAqPihPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyKTsKKyAgICAgICAgKnBEYXRhID0gdmFsdWU7CisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworICAgIH0KK30KKworUEFHRUQKK05ESVNfU1RBVFVTIFJlcXVlc3RRdWVyeTMyb3I2NCggX0luXyBQTkRJU19PSURfUkVRVUVTVCBPaWRSZXF1ZXN0LCBjb25zdCBVTE9ORzY0IHZhbHVlICkKK3sKKyAgICBQQUdFRF9DT0RFKCk7CisgICAgTlRfQVNTRVJUKCAoT2lkUmVxdWVzdC0+UmVxdWVzdFR5cGUgPT0gTmRpc1JlcXVlc3RRdWVyeUluZm9ybWF0aW9uKSB8fAorICAgICAgICAoT2lkUmVxdWVzdC0+UmVxdWVzdFR5cGUgPT0gTmRpc1JlcXVlc3RRdWVyeVN0YXRpc3RpY3MpICk7CisKKyAgICBpZiAoT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5JbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoIFVMT05HNjQgKSkKKyAgICB7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNOZWVkZWQgPSBzaXplb2YoIFVMT05HNjQgKTsKKyAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc1dyaXR0ZW4gPSBzaXplb2YoIFVMT05HNjQgKTsKKyAgICAgICAgUFVMT05HNjQgcERhdGEgPSByZWludGVycHJldF9jYXN0PFBVTE9ORzY0PihPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyKTsKKyAgICAgICAgKnBEYXRhID0gdmFsdWU7CisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlIGlmIChPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoID49IHNpemVvZiggVUxPTkcgKSkKKyAgICB7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNOZWVkZWQgPSBzaXplb2YoIFVMT05HICk7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNXcml0dGVuID0gc2l6ZW9mKCBVTE9ORyApOworICAgICAgICBQVUxPTkcgcERhdGEgPSByZWludGVycHJldF9jYXN0PFBVTE9ORz4oT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5JbmZvcm1hdGlvbkJ1ZmZlcik7CisgICAgICAgICpwRGF0YSA9IChVTE9ORyl2YWx1ZTsKKyAgICAgICAgcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNOZWVkZWQgPSBzaXplb2YoIFVMT05HNjQgKTsKKyAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc1dyaXR0ZW4gPSAwOworICAgICAgICByZXR1cm4gTkRJU19TVEFUVVNfSU5WQUxJRF9MRU5HVEg7CisgICAgfQorfQorCitQQUdFRAorTkRJU19TVEFUVVMgUmVxdWVzdFF1ZXJ5VGhyZWFkQ2FwYWJpbGl0aWVzKF9Jbl8gUE5ESVNfT0lEX1JFUVVFU1QgT2lkUmVxdWVzdCkKK3sKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBPVF9DQVBBQklMSVRJRVMgY2FwcyA9IHsgMCB9OworICAgIEFTU0lHTl9ORElTX09CSkVDVF9IRUFERVIoY2Fwcy5IZWFkZXIsIE5ESVNfT0JKRUNUX1RZUEVfREVGQVVMVCwgT1RfQ0FQQUJJTElUSUVTX1JFVklTSU9OXzEsIFNJWkVPRl9PVF9DQVBBQklMSVRJRVNfUkVWSVNJT05fMSk7CisgICAgY2Fwcy5NaW5pcG9ydE1vZGUgPSBPVF9NUF9NT0RFX1RIUkVBRDsgICAgLy8gVGhyZWFkIFR1bm5lbCBtb2RlCisgICAgCisgICAgaWYgKE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uSW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPCBTSVpFT0ZfT1RfQ0FQQUJJTElUSUVTX1JFVklTSU9OXzEpCisgICAgeworICAgICAgICBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkJ5dGVzTmVlZGVkID0gU0laRU9GX09UX0NBUEFCSUxJVElFU19SRVZJU0lPTl8xOworICAgICAgICBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkJ5dGVzV3JpdHRlbiA9IDA7CisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19JTlZBTElEX0xFTkdUSDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc05lZWRlZCA9IFNJWkVPRl9PVF9DQVBBQklMSVRJRVNfUkVWSVNJT05fMTsKKyAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc1dyaXR0ZW4gPSBTSVpFT0ZfT1RfQ0FQQUJJTElUSUVTX1JFVklTSU9OXzE7CisgICAgICAgIG1lbWNweShPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyLCAmY2FwcywgU0laRU9GX09UX0NBUEFCSUxJVElFU19SRVZJU0lPTl8xKTsKKyAgICAgICAgcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorfQorCitQQUdFRAorTkRJU19TVEFUVVMgUmVxdWVzdFF1ZXJ5R2VuU3RhdGlzdGljcyhfSW5fIFBORElTX09JRF9SRVFVRVNUIE9pZFJlcXVlc3QsIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCBBZGFwdGVyQ29udGV4dCkKK3sKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBORElTX1NUQVRJU1RJQ1NfSU5GTyBzdGF0aXN0aWNzID0geyAwIH07CisgICAgQVNTSUdOX05ESVNfT0JKRUNUX0hFQURFUihzdGF0aXN0aWNzLkhlYWRlciwgTkRJU19PQkpFQ1RfVFlQRV9ERUZBVUxULCBORElTX1NJWkVPRl9TVEFUSVNUSUNTX0lORk9fUkVWSVNJT05fMSwgTkRJU19TVEFUSVNUSUNTX0lORk9fUkVWSVNJT05fMSk7CisKKyAgICBzdGF0aXN0aWNzLlN1cHBvcnRlZFN0YXRpc3RpY3MgPSBOSUNfU1VQUE9SVEVEX1NUQVRJU1RJQ1M7CisKKyAgICAvKiBCeXRlcyBpbiAqLworICAgIHN0YXRpc3RpY3MuaWZIQ0luT2N0ZXRzID0gQWRhcHRlckNvbnRleHQtPkJ5dGVzUnhEaXJlY3RlZCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhcHRlckNvbnRleHQtPkJ5dGVzUnhNdWx0aWNhc3QgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5CeXRlc1J4QnJvYWRjYXN0OworCisgICAgc3RhdGlzdGljcy5pZkhDSW5VY2FzdE9jdGV0cyA9IEFkYXB0ZXJDb250ZXh0LT5CeXRlc1J4RGlyZWN0ZWQ7ICAgICAgICAgICAgCisgICAgc3RhdGlzdGljcy5pZkhDSW5NdWx0aWNhc3RPY3RldHMgPSBBZGFwdGVyQ29udGV4dC0+Qnl0ZXNSeE11bHRpY2FzdDsgICAgICAgICAgICAKKyAgICBzdGF0aXN0aWNzLmlmSENJbkJyb2FkY2FzdE9jdGV0cyA9IEFkYXB0ZXJDb250ZXh0LT5CeXRlc1J4QnJvYWRjYXN0OworCisgICAgLyogUGFja2V0cyBpbiAqLworICAgIHN0YXRpc3RpY3MuaWZIQ0luVWNhc3RQa3RzID0gQWRhcHRlckNvbnRleHQtPkZyYW1lc1J4RGlyZWN0ZWQ7ICAgICAgICAgICAgCisgICAgc3RhdGlzdGljcy5pZkhDSW5NdWx0aWNhc3RQa3RzID0gQWRhcHRlckNvbnRleHQtPkZyYW1lc1J4TXVsdGljYXN0OyAgICAgICAgICAgIAorICAgIHN0YXRpc3RpY3MuaWZIQ0luQnJvYWRjYXN0UGt0cyA9IEFkYXB0ZXJDb250ZXh0LT5GcmFtZXNSeEJyb2FkY2FzdDsKKworICAgIC8qIEVycm9ycyBpbiAqLworICAgIHN0YXRpc3RpY3MuaWZJbkVycm9ycyA9IEFkYXB0ZXJDb250ZXh0LT5SeENyY0Vycm9ycyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5SeEFsaWdubWVudEVycm9ycyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5SeERtYU92ZXJydW5FcnJvcnMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+UnhSdW50RXJyb3JzOworCisgICAgc3RhdGlzdGljcy5pZkluRGlzY2FyZHMgPSBBZGFwdGVyQ29udGV4dC0+UnhSZXNvdXJjZUVycm9yczsgICAgICAgICAgICAKKworICAgIC8qIEJ5dGVzIG91dCAqLworICAgIHN0YXRpc3RpY3MuaWZIQ091dE9jdGV0cyA9IEFkYXB0ZXJDb250ZXh0LT5CeXRlc1R4RGlyZWN0ZWQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+Qnl0ZXNUeE11bHRpY2FzdCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5CeXRlc1R4QnJvYWRjYXN0OworCisgICAgc3RhdGlzdGljcy5pZkhDT3V0VWNhc3RPY3RldHMgPSBBZGFwdGVyQ29udGV4dC0+Qnl0ZXNUeERpcmVjdGVkOyAgICAgICAgICAgIAorICAgIHN0YXRpc3RpY3MuaWZIQ091dE11bHRpY2FzdE9jdGV0cyA9IEFkYXB0ZXJDb250ZXh0LT5CeXRlc1R4TXVsdGljYXN0OyAgICAgICAgICAgIAorICAgIHN0YXRpc3RpY3MuaWZIQ091dEJyb2FkY2FzdE9jdGV0cyA9IEFkYXB0ZXJDb250ZXh0LT5CeXRlc1R4QnJvYWRjYXN0OworCisgICAgLyogUGFja2V0cyBvdXQgKi8KKyAgICBzdGF0aXN0aWNzLmlmSENPdXRVY2FzdFBrdHMgPSBBZGFwdGVyQ29udGV4dC0+RnJhbWVzVHhEaXJlY3RlZDsgICAgICAgICAgICAKKyAgICBzdGF0aXN0aWNzLmlmSENPdXRNdWx0aWNhc3RQa3RzID0gQWRhcHRlckNvbnRleHQtPkZyYW1lc1R4TXVsdGljYXN0OyAgICAgICAgICAgIAorICAgIHN0YXRpc3RpY3MuaWZIQ091dEJyb2FkY2FzdFBrdHMgPSBBZGFwdGVyQ29udGV4dC0+RnJhbWVzVHhCcm9hZGNhc3Q7CisKKyAgICAvKiBFcnJvcnMgb3V0ICovCisgICAgc3RhdGlzdGljcy5pZk91dEVycm9ycyA9IEFkYXB0ZXJDb250ZXh0LT5UeEFib3J0RXhjZXNzQ29sbGlzaW9ucyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+VHhEbWFVbmRlcnJ1biArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+VHhMb3N0Q1JTICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5UeExhdGVDb2xsaXNpb25zKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhcHRlckNvbnRleHQtPlRyYW5zbWl0RmFpbHVyZXNPdGhlcjsKKworICAgIHN0YXRpc3RpY3MuaWZPdXREaXNjYXJkcyA9IDBVTEw7CisgICAgCisgICAgcmV0dXJuIFJlcXVlc3RRdWVyeShPaWRSZXF1ZXN0LCBzdGF0aXN0aWNzKTsKK30KKworUEFHRUQgCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitORElTX1NUQVRVUworTVBPaWRSZXF1ZXN0KAorICAgIF9Jbl8gIE5ESVNfSEFORExFICAgICAgICAgICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQsCisgICAgX0luXyAgUE5ESVNfT0lEX1JFUVVFU1QgICAgICAgT2lkUmVxdWVzdAorICAgICkKK3sKKyAgICBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0ID0gKFBPVFRNUF9BREFQVEVSX0NPTlRFWFQpTWluaXBvcnRBZGFwdGVyQ29udGV4dDsKKyAgICBORElTX1NUQVRVUyBzdGF0dXMgPSBORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEOworICAgIGJvb2wgZkZhaWxFeHBlY3RlZCA9IGZhbHNlOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIHN3aXRjaCAoT2lkUmVxdWVzdC0+UmVxdWVzdFR5cGUpCisgICAgeworICAgIGNhc2UgTmRpc1JlcXVlc3RTZXRJbmZvcm1hdGlvbjoKKyAgICAgICAgc3dpdGNoIChPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLk9pZCkKKyAgICAgICAgeworICAgICAgICBjYXNlIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVDoKKyAgICAgICAgICAgIC8vIFRPRE86IENoZWNrIHdpdGggSmVmZnJleSBob3cgdG8gYmV0dGVyIGhhbmRsZSB0aGlzCisgICAgICAgICAgICBzdGF0dXMgPSBORElTX1NUQVRVU19NVUxUSUNBU1RfRlVMTDsKKyAgICAgICAgICAgIGZGYWlsRXhwZWN0ZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBGYWtlIGl0IHVudGlsIHdlIG1ha2UgaXQgOikKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IGJpbmQgdW5sZXNzIHdlIHJlcG9ydCBzdWNjZXNzIGZvciB0aGVzZSBPSURzCisgICAgICAgICAgICAvLworICAgICAgICBjYXNlIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSOgorICAgICAgICBjYXNlIE9JRF9QTV9BRERfV09MX1BBVFRFUk46CisgICAgICAgIGNhc2UgT0lEX1BNX1JFTU9WRV9XT0xfUEFUVEVSTjoKKyAgICAgICAgY2FzZSBPSURfR0VOX0NVUlJFTlRfTE9PS0FIRUFEOgorICAgICAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMKKyAgICAgICAgICAgIHN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gRXhwbGljaXRseSBub3Qgc3VwcG9ydGVkCisgICAgICAgIGNhc2UgT0lEX0dFTl9JTlRFUlJVUFRfTU9ERVJBVElPTjoKKyAgICAgICAgICAgIHN0YXR1cyA9IE5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQ7CisgICAgICAgICAgICBmRmFpbEV4cGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyBVbmtub3duCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzdGF0dXMgPSBORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOZGlzUmVxdWVzdFF1ZXJ5SW5mb3JtYXRpb246CisgICAgY2FzZSBOZGlzUmVxdWVzdFF1ZXJ5U3RhdGlzdGljczoKKyAgICAgICAgc3dpdGNoIChPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLk9pZCkKKyAgICAgICAgeworICAgICAgICBjYXNlIE9JRF9HRU5fSU5URVJSVVBUX01PREVSQVRJT046CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IE5ESVNfSU5URVJSVVBUX01PREVSQVRJT05fUEFSQU1FVEVSUyBuaW1wID0geworICAgICAgICAgICAgICAgICAgICB7IE5ESVNfT0JKRUNUX1RZUEVfREVGQVVMVCwgTkRJU19JTlRFUlJVUFRfTU9ERVJBVElPTl9QQVJBTUVURVJTX1JFVklTSU9OXzEsIE5ESVNfU0laRU9GX0lOVEVSUlVQVF9NT0RFUkFUSU9OX1BBUkFNRVRFUlNfUkVWSVNJT05fMSB9LAorICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICBOZGlzSW50ZXJydXB0TW9kZXJhdGlvbk5vdFN1cHBvcnRlZCB9OworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFJlcXVlc3RRdWVyeSggT2lkUmVxdWVzdCwgbmltcCApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgT0lEX0dFTl9SQ1ZfT0s6CisgICAgICAgICAgICBzdGF0dXMgPSBSZXF1ZXN0UXVlcnkzMm9yNjQoIE9pZFJlcXVlc3QsIEFkYXB0ZXJDb250ZXh0LT5GcmFtZXNSeEJyb2FkY2FzdAorICAgICAgICAgICAgICAgICAgICAgKyBBZGFwdGVyQ29udGV4dC0+RnJhbWVzUnhNdWx0aWNhc3QKKyAgICAgICAgICAgICAgICAgICAgICsgQWRhcHRlckNvbnRleHQtPkZyYW1lc1J4RGlyZWN0ZWQgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkU6CisgICAgICAgIGNhc2UgT0lEX0dFTl9UUkFOU01JVF9CTE9DS19TSVpFOgorICAgICAgICBjYXNlIE9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFOgorICAgICAgICAgICAgc3RhdHVzID0gUmVxdWVzdFF1ZXJ5PFVMT05HPiggT2lkUmVxdWVzdCwgSFdfTUFYX0ZSQU1FX1NJWkUgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT0lEX0dFTl9SRUNFSVZFX0JVRkZFUl9TUEFDRToKKyAgICAgICAgICAgIHN0YXR1cyA9IFJlcXVlc3RRdWVyeTxVTE9ORz4oIE9pZFJlcXVlc3QsIEhXX01BWF9GUkFNRV9TSVpFICogQWRhcHRlckNvbnRleHQtPnVsTWF4QnVzeVJlY3ZzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9JRF9HRU5fU1RBVElTVElDUzoKKyAgICAgICAgICAgIHN0YXR1cyA9IFJlcXVlc3RRdWVyeUdlblN0YXRpc3RpY3MoT2lkUmVxdWVzdCwgQWRhcHRlckNvbnRleHQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPSURfR0VOX1RSQU5TTUlUX0JVRkZFUl9TUEFDRToKKyAgICAgICAgICAgIHN0YXR1cyA9IFJlcXVlc3RRdWVyeTxVTE9ORz4oIE9pZFJlcXVlc3QsIEhXX01BWF9GUkFNRV9TSVpFICogQWRhcHRlckNvbnRleHQtPnVsTWF4QnVzeVNlbmRzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9JRF9HRU5fVkVORE9SX0RFU0NSSVBUSU9OOgorICAgICAgICBjYXNlIE9JRF9HRU5fVkVORE9SX0RSSVZFUl9WRVJTSU9OOgorICAgICAgICBjYXNlIE9JRF9HRU5fVkVORE9SX0lEOgorICAgICAgICAgICAgaWYgKE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uSW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPCBzaXplb2YoTklDX1ZFTkRPUl9ERVNDKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkJ5dGVzTmVlZGVkID0gc2l6ZW9mKCBOSUNfVkVORE9SX0RFU0MgKTsKKyAgICAgICAgICAgICAgICBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkJ5dGVzV3JpdHRlbiA9IDA7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gTkRJU19TVEFUVVNfSU5WQUxJRF9MRU5HVEg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc05lZWRlZCA9IHNpemVvZiggTklDX1ZFTkRPUl9ERVNDICk7CisgICAgICAgICAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc1dyaXR0ZW4gPSBzaXplb2YoIE5JQ19WRU5ET1JfREVTQyApOworICAgICAgICAgICAgICAgIG1lbWNweShPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyLCBOSUNfVkVORE9SX0RFU0MsIHNpemVvZihOSUNfVkVORE9SX0RFU0MpKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPSURfR0VOX1hNSVRfT0s6CisgICAgICAgICAgICBzdGF0dXMgPSBSZXF1ZXN0UXVlcnkzMm9yNjQoIE9pZFJlcXVlc3QsIEFkYXB0ZXJDb250ZXh0LT5GcmFtZXNUeEJyb2FkY2FzdAorICAgICAgICAgICAgICAgICAgICAgKyBBZGFwdGVyQ29udGV4dC0+RnJhbWVzVHhNdWx0aWNhc3QKKyAgICAgICAgICAgICAgICAgICAgICsgQWRhcHRlckNvbnRleHQtPkZyYW1lc1R4RGlyZWN0ZWQgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUzoKKyAgICAgICAgICAgIHN0YXR1cyA9IFJlcXVlc3RRdWVyeSggT2lkUmVxdWVzdCwgQWRhcHRlckNvbnRleHQtPkV4dGVuZGVkQWRkcmVzcyApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1M6CisgICAgICAgICAgICBzdGF0dXMgPSBSZXF1ZXN0UXVlcnkoIE9pZFJlcXVlc3QsIEFkYXB0ZXJDb250ZXh0LT5FeHRlbmRlZEFkZHJlc3MgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT0lEX1BOUF9DQVBBQklMSVRJRVM6CisgICAgICAgICAgICAvLyBXZSBkbyBub3Qgc3VwcG9ydCBsb3cgcG93ZXIKKyAgICAgICAgICAgIHN0YXR1cyA9IE5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQ7CisgICAgICAgICAgICBmRmFpbEV4cGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT0lEX1BOUF9RVUVSWV9QT1dFUjoKKyAgICAgICAgICAgIHN0YXR1cyA9IE5ESVNfU1RBVFVTX05PVF9BQ0NFUFRFRDsKKyAgICAgICAgICAgIGZGYWlsRXhwZWN0ZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPSURfT1RfQ0FQQUJJTElUSUVTOgorICAgICAgICAgICAgc3RhdHVzID0gUmVxdWVzdFF1ZXJ5VGhyZWFkQ2FwYWJpbGl0aWVzKCBPaWRSZXF1ZXN0ICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3RhdHVzID0gTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTmRpc1JlcXVlc3RNZXRob2Q6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN0YXR1cyA9IE5ESVNfU1RBVFVTX0lOVkFMSURfT0lEOworICAgICAgICBicmVhazsKKworICAgIH0KKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKCBPaWRSZXF1ZXN0ICk7CisKKyAgICBpZiAoIWZGYWlsRXhwZWN0ZWQgJiYgKHN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSkKKyAgICB7CisgICAgICAgIExvZ0Z1bmNFeGl0TXNnKERSSVZFUl9ERUZBVUxULCAiIFR5cGU6JXUgT2lkOiV1IFN0YXR1czolIU5ESVNfU1RBVFVTISIsIE9pZFJlcXVlc3QtPlJlcXVlc3RUeXBlLCBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLk9pZCwgc3RhdHVzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gQnkgbm90IHVzaW5nIExvZ0Z1bmNFeGl0TkRJUywgdGhpcyB3b24ndCBnZXQgYXV0by1wcm9tb3RlZCB0byBhIHdhcm5pbmcgb24gbm9uLTAgc3RhdHVzZXMKKyAgICAgICAgTG9nRnVuY0V4aXRNc2coRFJJVkVSX0RFRkFVTFQsICIgVHlwZToldSBPaWQ6JXUgU3RhdHVzOiUhTkRJU19TVEFUVVMhIiwgT2lkUmVxdWVzdC0+UmVxdWVzdFR5cGUsIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uT2lkLCBzdGF0dXMpOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitNUENhbmNlbE9pZFJlcXVlc3QoCisgICAgX0luXyAgTkRJU19IQU5ETEUgICAgICAgICAgICAgLyogTWluaXBvcnRBZGFwdGVyQ29udGV4dCAqLywKKyAgICBfSW5fICBQVk9JRCAgICAgICAgICAgICAgICAgICAvKiBwUmVxdWVzdElkICovCispCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9vaWQuaHBwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL29pZC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5YjEyMgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9vaWQuaHBwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgSGVhZGVyIGZpbGUgZm9yIHRoZSByb3V0aW5lcyByZWxhdGVkIHRvIE9JRHMKKyAqLworCitleHRlcm4gTkRJU19PSUQgTklDU3VwcG9ydGVkT2lkc1tdOworZXh0ZXJuIGNvbnN0IFVMT05HIFNpemVPZk5JQ1N1cHBvcnRlZE9pZHM7CisKKyNpZmRlZiBPVFRNUF9MRUdBQ1kKKworUEFHRUQgTUlOSVBPUlRfT0lEX1JFUVVFU1QgTVBPaWRSZXF1ZXN0OworTUlOSVBPUlRfQ0FOQ0VMX09JRF9SRVFVRVNUIE1QQ2FuY2VsT2lkUmVxdWVzdDsKKworI2Vsc2UKKworRVZUX05FVF9SRVFVRVNUX1FVRVJZX0RBVEEgRXZ0UXVlcnlVbG9uZzsKK0VWVF9ORVRfUkVRVUVTVF9RVUVSWV9EQVRBIEV2dFF1ZXJ5R2VuVmVuZG9yRGVzY3JpcHRpb247CitFVlRfTkVUX1JFUVVFU1RfUVVFUllfREFUQSBFdnRRdWVyeUFkZHJlc3M7CitFVlRfTkVUX1JFUVVFU1RfUVVFUllfREFUQSBFdnRRdWVyeUdlblN0YXRpc3RpY3M7CitFVlRfTkVUX1JFUVVFU1RfUVVFUllfREFUQSBFdnRRdWVyeUdlbkludGVycnVwdE1vZGVyYXRpb247CitFVlRfTkVUX1JFUVVFU1RfUVVFUllfREFUQSBFdnRRdWVyeUdlblhtaXRSY3ZPazsKKworRVZUX05FVF9SRVFVRVNUX1FVRVJZX0RBVEEgRXZ0UXVlcnlUaHJlYWRDYXBhYmlsaXRpZXM7CisKK0VWVF9ORVRfUkVRVUVTVF9ERUZBVUxUX1NFVF9EQVRBIEV2dERlZmF1bHRTZXREYXRhOworCitORElTX1NUQVRVUworQWRhcHRlclNldEluZm9ybWF0aW9uKAorICAgIF9Jbl8gIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyAgUE5ESVNfT0lEX1JFUVVFU1QgICAgICAgICBOZGlzU2V0UmVxdWVzdCk7CisKK05ESVNfU1RBVFVTCitBZGFwdGVyUXVlcnlJbmZvcm1hdGlvbigKKyAgICBfSW5fICAgIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgIEFkYXB0ZXJDb250ZXh0LAorICAgIF9Jbm91dF8gUE5ESVNfT0lEX1JFUVVFU1QgICAgICAgTmRpc1F1ZXJ5UmVxdWVzdAorICAgICk7CisKK1BBR0VECitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworQWRkRGVmYXVsdFJlcXVlc3RTZXF1ZW50aWFsUXVldWUoCisgICAgX0luXyAgICBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0CisgICAgKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9vdHRtcC5pbmYgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvb3R0bXAuaW5mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTFhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvb3R0bXAuaW5mCkBAIC0wLDAgKzEsMTIxIEBACis7Cis7ICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCis7ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorOworOyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cis7ICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKzsgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cis7ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCis7ICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorOyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorOyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzsgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorOyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKzsgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorOworOyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCis7ICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCis7ICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorOyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorOyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorOyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKzsgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworOyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKzsgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCis7ICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorOyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCis7CisKK1tWZXJzaW9uXQorU2lnbmF0dXJlICAgICAgICAgICA9ICIkV2luZG93cyBOVCQiCitDbGFzcyAgICAgICAgICAgICAgID0gTmV0CitDbGFzc0dVSUQgICAgICAgICAgID0gezRkMzZlOTcyLWUzMjUtMTFjZS1iZmMxLTA4MDAyYmUxMDMxOH0KK1Byb3ZpZGVyICAgICAgICAgICAgPSAlT3BlblRocmVhZCUKK0RyaXZlclZlciAgICAgICAgICAgPSAKK1BucExvY2tEb3duICAgICAgICAgPSAxCitDYXRhbG9nRmlsZSAgICAgICAgID0gb3R0bXAuY2F0CisKK1tNYW51ZmFjdHVyZXJdCislT3BlblRocmVhZCUgICAgICAgID0gT3BlblRocmVhZCxOVCRBUkNIJAorCitbT3BlblRocmVhZC5OVCRBUkNIJF0KKyVvdHRtcC5EZXZpY2VEZXNjJSAgPSBvdHRtcC5uZGksIHJvb3Rcb3R0bXAgOyBSb290IGVudW1lcmF0ZWQKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgT3BlblRocmVhZCBUdW5uZWwgVGhyZWFkIEFkYXB0ZXIKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbb3R0bXAubmRpXQorQ2hhcmFjdGVyaXN0aWNzICAgICA9IDB4NCA7IE5DRl9QSFlTSUNBTAorKklmVHlwZSAgICAgICAgICAgICA9IDI1OSA7IElGX1RZUEVfSUVFRTgwMjE1NAorKk1lZGlhVHlwZSAgICAgICAgICA9IDE5ICA7IE5kaXNNZWRpdW1JUAorKlBoeXNpY2FsTWVkaWFUeXBlICA9IDIwICA7IE5kaXNQaHlzaWNhbE1lZGl1bU5hdGl2ZTgwMl8xNV80CisqSWZDb25uZWN0b3JQcmVzZW50ID0gMAorKkFjY2Vzc1R5cGUgICAgICAgICA9IDIgICA7IE5FVF9JRl9BQ0NFU1NfQlJPQURDQVNUCisqQ29ubmVjdGlvblR5cGUgICAgID0gMSAgIDsgTkVUX0lGX0NPTk5FQ1RJT05fUEFTU0lWRQorKkRpcmVjdGlvblR5cGUgICAgICA9IDAgICA7IE5FVF9JRl9ESVJFQ1RJT05fU0VORFJFQ0VJVkUKK0FkZFJlZyAgICAgICAgICAgICAgPSBvdHRtcC5SZWcKK0NvcHlGaWxlcyAgICAgICAgICAgPSBvdHRtcC5Db3B5RmlsZXMKKworW290dG1wLm5kaS5TZXJ2aWNlc10KK0FkZFNlcnZpY2UgICAgICAgICAgPSBvdHRtcCwgMiwgb3R0bXAuU2VydmljZSwgb3R0bXAuRXZlbnRMb2cKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgT3BlblRocmVhZCBUdW5uZWwgTWluaXBvcnQgQ29tbW9uCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW290dG1wLlJlZ10KK0hLUiwgICAgLCAgICAgICAgICAgICAgICAgICAgICAgICBCdXNOdW1iZXIsICAgICAgICAgICAwLCAiMCIgCitIS1IsIE5kaSwgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZSwgICAgICAgICAgICAgMCwgIm90dG1wIgorSEtSLCBOZGlcSW50ZXJmYWNlcywgICAgICAgICAgICAgIFVwcGVyUmFuZ2UsICAgICAgICAgIDAsICJmbHBwNiIKK0hLUiwgTmRpXEludGVyZmFjZXMsICAgICAgICAgICAgICBMb3dlclJhbmdlLCAgICAgICAgICAwLCAiODAyLjE1LjQiCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IFdERiBTZWN0aW9uCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW290dG1wLm5kaS5XZGZdCitLbWRmU2VydmljZSAgICAgICAgID0gb3R0bXAsIG90dG1wLndkZnNlY3QKKworW290dG1wLndkZnNlY3RdCitLbWRmTGlicmFyeVZlcnNpb24gID0gJEtNREZWRVJTSU9OJAorCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBEcml2ZXIgYW5kIFNlcnZpY2UgU2VjdGlvbgorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tvdHRtcC5Db3B5RmlsZXNdCitvdHRtcC5zeXMsLCwyCisKK1tvdHRtcC5TZXJ2aWNlXQorRGlzcGxheU5hbWUgICAgICAgID0gJW90dG1wLlNlcnZpY2UuRGlzcE5hbWUlCitTZXJ2aWNlVHlwZSAgICAgICAgPSAxIDslU0VSVklDRV9LRVJORUxfRFJJVkVSJQorU3RhcnRUeXBlICAgICAgICAgID0gMyA7JVNFUlZJQ0VfREVNQU5EX1NUQVJUJQorRXJyb3JDb250cm9sICAgICAgID0gMSA7JVNFUlZJQ0VfRVJST1JfTk9STUFMJQorU2VydmljZUJpbmFyeSAgICAgID0gJTEyJVxvdHRtcC5zeXMKK0xvYWRPcmRlckdyb3VwICAgICA9IE5ESVMKK0FkZFJlZyAgICAgICAgICAgICA9IFRleHRNb2RlRmxhZ3MuUmVnCitEZXNjcmlwdGlvbiAgICAgICAgPSAlb3R0bXAuRGV2aWNlRGVzYyUKKworW290dG1wLkV2ZW50TG9nXQorQWRkUmVnICAgICAgICAgICAgID0gb3R0bXAuQWRkRXZlbnRMb2cuUmVnCisKK1tvdHRtcC5BZGRFdmVudExvZy5SZWddCitIS1IsICwgRXZlbnRNZXNzYWdlRmlsZSwgMHgwMDAyMDAwMCwgIiUlU3lzdGVtUm9vdCUlXFN5c3RlbTMyXG5ldGV2ZW50LmRsbCIKK0hLUiwgLCBUeXBlc1N1cHBvcnRlZCwgICAweDAwMDEwMDAxLCA3CisKK1tUZXh0TW9kZUZsYWdzLlJlZ10KK0hLUiwgLCBUZXh0TW9kZUZsYWdzLCAgICAweDAwMDEwMDAxLCAweDAwMDEKKworW1NvdXJjZURpc2tzTmFtZXNdCisxID0gJW90dG1wLkRldmljZURlc2MlLCwsIiIKKworW1NvdXJjZURpc2tzRmlsZXNdCitvdHRtcC5zeXMgPSAxLCwKKworW0Rlc3RpbmF0aW9uRGlyc10KK290dG1wLkNvcHlGaWxlcyA9IDEyCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IExvY2FsaXphYmxlIFN0cmluZ3MKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbU3RyaW5nc10KK09wZW5UaHJlYWQgICAgICAgICAgICAgID0gIk9wZW5UaHJlYWQiICAgICAgICAgICAgICAgICAgICAgIAorb3R0bXAuRGV2aWNlRGVzYyAgICAgICAgPSAiT3BlblRocmVhZCBUdW5uZWwgVGhyZWFkIEFkYXB0ZXIiCitvdHRtcC5TZXJ2aWNlLkRpc3BOYW1lICA9ICJPcGVuVGhyZWFkIFR1bm5lbCBNaW5pcG9ydCIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9vdHRtcC5yYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9vdHRtcC5yYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmE3YzM4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL290dG1wLnJjCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPG50dmVycC5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIHNwZWNpZmljIHRvIHRoaXMgZmlsZSAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFZFUl9GSUxFVFlQRSwgVkVSX0ZJTEVTVUJUWVBFLCBWRVJfRklMRURFU0NSSVBUSU9OX1NUUgorICogYW5kIFZFUl9JTlRFUk5BTE5BTUVfU1RSIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIENPTU1PTi5WRVIKKyAqIFRoZSBzdHJpbmdzIGRvbid0IG5lZWQgYSAnXDAnLCBzaW5jZSBjb21tb24udmVyIGhhcyB0aGVtLgorICovCisjZGVmaW5lICAgIFZFUl9GSUxFVFlQRSAgICBWRlRfRFJWCisvKiBwb3NzaWJsZSB2YWx1ZXM6ICAgICAgICBWRlRfVU5LTk9XTgorICAgICAgICAgICAgICAgIFZGVF9BUFAKKyAgICAgICAgICAgICAgICBWRlRfRExMCisgICAgICAgICAgICAgICAgVkZUX0RSVgorICAgICAgICAgICAgICAgIFZGVF9GT05UCisgICAgICAgICAgICAgICAgVkZUX1ZYRAorICAgICAgICAgICAgICAgIFZGVF9TVEFUSUNfTElCCisqLworI2RlZmluZSAgICBWRVJfRklMRVNVQlRZUEUgICAgVkZUMl9EUlZfTkVUV09SSworLyogcG9zc2libGUgdmFsdWVzICAgICAgICBWRlQyX1VOS05PV04KKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9QUklOVEVSCisgICAgICAgICAgICAgICAgVkZUMl9EUlZfS0VZQk9BUkQKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9MQU5HVUFHRQorICAgICAgICAgICAgICAgIFZGVDJfRFJWX0RJU1BMQVkKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9NT1VTRQorICAgICAgICAgICAgICAgIFZGVDJfRFJWX05FVFdPUksKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9TWVNURU0KKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9JTlNUQUxMQUJMRQorICAgICAgICAgICAgICAgIFZGVDJfRFJWX1NPVU5ECisgICAgICAgICAgICAgICAgVkZUMl9EUlZfQ09NTQorKi8KKyNkZWZpbmUgVkVSX0ZJTEVERVNDUklQVElPTl9TVFIgICAgICJPcGVuVGhyZWFkIFR1bm5lbCBNaW5pcG9ydCIKKyNkZWZpbmUgVkVSX0lOVEVSTkFMTkFNRV9TVFIgICAgICAgICJPVFRNUC5TWVMiCisKKworI2luY2x1ZGUgImNvbW1vbi52ZXIiICAgLy8gTlQ1LjAgdmVyc2lvbiBmaWxlLgorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvcGNoLmhwcCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9wY2guaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzkxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvcGNoLmhwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorLy8KKy8vIHN5c3RlbSBoZWFkZXJzCisvLworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxudHZlcnAuaD4KKyNpbmNsdWRlIDxudGRkay5oPgorI2luY2x1ZGUgPG50c3Ryc2FmZS5oPgorI2luY2x1ZGUgPG50aW50c2FmZS5oPgorI2luY2x1ZGUgPG5kaXMuaD4KKyNpbmNsdWRlIDxXcHBSZWNvcmRlci5oPgorI2luY2x1ZGUgPHdkZi5oPgorI2lmbmRlZiBPVFRNUF9MRUdBQ1kKKyNpbmNsdWRlIDxuZXRhZGFwdGVyY3guaD4KKyNlbmRpZgorI2luY2x1ZGUgPFdkZk1pbmlwb3J0Lmg+CisjaW5jbHVkZSA8d2RtLmg+CisjaW5jbHVkZSA8bnRkZHNlci5oPgorfQorCisvLyBJbnRlbGxpc2Vuc2UgZGVmaW5pdGlvbiBmb3IgRGJnUmFpc2VBc3NlcnRpb25GYWlsdXJlIGJlY2F1c2UgZm9yIHNvbWUgcmVhc29uIFZpc3VhbCBTdHVkaW8gY2FuJ3QKKy8vIGZpbmQgaXQuCisjaWZkZWYgX19JTlRFTExJU0VOU0VfXworI2RlZmluZSBEYmdSYWlzZUFzc2VydGlvbkZhaWx1cmUoKSAoKHZvaWQpIDApCisjZW5kaWYKKworI2luY2x1ZGUgIm90T0lELmgiCisgCisjZGVmaW5lIENPREVfU0VHKHNlZykgX19kZWNsc3BlYyhjb2RlX3NlZyhzZWcpKQorI2RlZmluZSBJTklUQ09ERSBDT0RFX1NFRygiSU5JVCIpICAKKyNkZWZpbmUgUEFHRUQgIENPREVfU0VHKCJQQUdFIikKKwordHlwZWRlZiBzdHJ1Y3QgX09UVE1QX0FEQVBURVJfQ09OVEVYVCAqUE9UVE1QX0FEQVBURVJfQ09OVEVYVDsKK3R5cGVkZWYgc3RydWN0IF9PVFRNUF9ERVZJQ0VfQ09OVEVYVCAqUE9UVE1QX0RFVklDRV9DT05URVhUOworCisjaW5jbHVkZSAiaGFyZHdhcmUuaHBwIgorI2luY2x1ZGUgImhkbGMuaHBwIgorI2luY2x1ZGUgImRyaXZlci5ocHAiCisjaW5jbHVkZSAiYWRhcHRlci5ocHAiCisjaW5jbHVkZSAiZGV2aWNlLmhwcCIKKyNpbmNsdWRlICJzZXJpYWwuaHBwIgorI2luY2x1ZGUgIm9pZC5ocHAiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLXdpbmRvd3MuaCIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9zZXJpYWwuY3BwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL3NlcmlhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4NWQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9zZXJpYWwuY3BwCkBAIC0wLDAgKzEsMTMwOCBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5ocHAiCisjaW5jbHVkZSAic2VyaWFsLnRtaCIKKworUEFHRUQKK19Ob19jb21wZXRpbmdfdGhyZWFkXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbEluaXRpYWxpemUoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dAorICAgICkKKy8qKysKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBTZXJpYWxJbml0aWFsaXplIGF0dGVtcHRzIHRvIGZpbmQgYW5kIG9wZW4gdGhlIGZpcnN0IENPTSBwb3J0IGF2YWlsYWJsZSwgd2l0aAorICAgIHRoZSBhc3N1bXB0aW9uIHRoYXQgaXQgc2hvdWxkIGJlIGZvciB0aGUgVGhyZWFkIGRldmljZS4KKworQXJndW1lbnRzOgorCisgICAgQWRhcHRlckNvbnRleHQgLSBoYW5kbGUgdG8gYSBPVFRNUCBBZGFwdGVyCisKK1JldHVybiBWYWx1ZToKKworICAgIE5UU1RBVFVTICAgIC0gQSBmYWlsdXJlIGhlcmUgd2lsbCBpbmRpY2F0ZSB0aGUgc2VyaWFsIENPTSBwb3J0IHdhcyBub3QgYWJsZQorICAgICAgICAgICAgICAgICAgdG8gYmUgb3BlbmVkLgorLS0qLworeworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19VTlNVQ0NFU1NGVUw7CisgICAgUFdTVFIgU3ltYm9saWNMaW5rTGlzdCA9IE5VTEw7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworICAgIAorICAgIFBBR0VEX0NPREUoKTsKKyAgICAKKyAgICBkbworICAgIHsKKyAgICAgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTIGF0dHIgPSB7IDAgfTsKKyAgICAgICAgV0RGX1dPUktJVEVNX0NPTkZJRyBjb25maWcgPSB7IDAgfTsKKworICAgICAgICAvLworICAgICAgICAvLyBTZW5kIFF1ZXVlIFZhcmlhYmxlcworICAgICAgICAvLworCisgICAgICAgIEluaXRpYWxpemVMaXN0SGVhZCgmQWRhcHRlckNvbnRleHQtPlNlbmRRdWV1ZSk7CisgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5TZW5kUXVldWVSdW5uaW5nID0gZmFsc2U7CisKKyAgICAgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTX0lOSVQoJmF0dHIpOworICAgICAgICBhdHRyLlBhcmVudE9iamVjdCA9IEFkYXB0ZXJDb250ZXh0LT5EZXZpY2U7CisgICAgICAgIHN0YXR1cyA9IFdkZlNwaW5Mb2NrQ3JlYXRlKCZhdHRyLCAmQWRhcHRlckNvbnRleHQtPlNlbmRMb2NrKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZTcGluTG9ja0NyZWF0ZShsb2NrU2VuZCkgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFU19JTklUX0NPTlRFWFRfVFlQRSgmYXR0ciwgV0RGX0RFVklDRV9JTkZPKTsKKyAgICAgICAgYXR0ci5QYXJlbnRPYmplY3QgPSBBZGFwdGVyQ29udGV4dC0+RGV2aWNlOworICAgICAgICBXREZfV09SS0lURU1fQ09ORklHX0lOSVQoJmNvbmZpZywgU2VyaWFsU2VuZExvb3ApOworCisgICAgICAgIHN0YXR1cyA9IFdkZldvcmtJdGVtQ3JlYXRlKCZjb25maWcsICZhdHRyLCAmQWRhcHRlckNvbnRleHQtPlNlbmRXb3JrSXRlbSk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiV2RmV29ya0l0ZW1DcmVhdGUoU2VyaWFsU2VuZExvb3ApIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgR2V0V2RmRGV2aWNlSW5mbyhBZGFwdGVyQ29udGV4dC0+U2VuZFdvcmtJdGVtKS0+QWRhcHRlckNvbnRleHQgPSBBZGFwdGVyQ29udGV4dDsKKworICAgICAgICAvLworICAgICAgICAvLyBSZWNlaXZlIFZhcmlhYmxlcworICAgICAgICAvLworCisgICAgICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFU19JTklUX0NPTlRFWFRfVFlQRSgmYXR0ciwgV0RGX0RFVklDRV9JTkZPKTsKKyAgICAgICAgYXR0ci5QYXJlbnRPYmplY3QgPSBBZGFwdGVyQ29udGV4dC0+RGV2aWNlOworICAgICAgICBXREZfV09SS0lURU1fQ09ORklHX0lOSVQoJmNvbmZpZywgU2VyaWFsUmVjdkxvb3ApOworCisgICAgICAgIHN0YXR1cyA9IFdkZldvcmtJdGVtQ3JlYXRlKCZjb25maWcsICZhdHRyLCAmQWRhcHRlckNvbnRleHQtPlJlY3ZXb3JrSXRlbSk7CisgICAgICAgIAorICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZXb3JrSXRlbUNyZWF0ZShTZXJpYWxSZWN2TG9vcCkgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIEdldFdkZkRldmljZUluZm8oQWRhcHRlckNvbnRleHQtPlJlY3ZXb3JrSXRlbSktPkFkYXB0ZXJDb250ZXh0ID0gQWRhcHRlckNvbnRleHQ7CisKKyAgICAgICAgLy8gUXVlcnkgdGhlIHN5c3RlbSBmb3IgZGV2aWNlIHdpdGggU0VSSUFMIGludGVyZmFjZQorICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgSW9HZXREZXZpY2VJbnRlcmZhY2VzKAorICAgICAgICAgICAgICAgICZHVUlEX0RFVklOVEVSRkFDRV9DT01QT1JULAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAmU3ltYm9saWNMaW5rTGlzdCAgIC8vIExpc3Qgb2Ygc3ltYm9saWMgbmFtZXM7IHNlcGFyYXRlIGJ5IE5VTEwsIEVPTCB3aXRoIE5VTEwrTlVMTC4KKyAgICAgICAgICAgICk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiSW9HZXREZXZpY2VJbnRlcmZhY2VzIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgYSBDT00gcG9ydCBmb3VuZAorICAgICAgICBOVF9BU1NFUlQoU3ltYm9saWNMaW5rTGlzdCk7CisgICAgICAgIGlmICgqU3ltYm9saWNMaW5rTGlzdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfREVWSUNFX05PVF9DT05ORUNURUQ7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIk5vIENPTSBwb3J0cyBmb3VuZCEiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyNpZiBEQkcKKyAgICAgICAgZm9yIChQQ1dTVFIgc3ltID0gU3ltYm9saWNMaW5rTGlzdDsgKnN5bSAhPSBOVUxMOyBzeW0gKz0gd2NzbGVuKHN5bSkgKyAxKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiU3ltYm9saWMgTmFtZSBmb3VuZDogJXdzIiwgc3ltKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgLy8gVHJ5IHRvIG9wZW4gZWFjaCBzZXJpYWwgcG9ydCB1bnRpbCB3ZSBnZXQgdGhhdCBvbmUgd29ya3Mgb3Igd2UgZXhoYXVzdCB0aGVtIGFsbAorICAgICAgICBmb3IgKFBDV1NUUiBzeW0gPSBTeW1ib2xpY0xpbmtMaXN0OyAqc3ltICE9IE5VTEw7IHN5bSArPSB3Y3NsZW4oc3ltKSArIDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHRhcmdldAorICAgICAgICAgICAgc3RhdHVzID0gU2VyaWFsSW5pdGlhbGl6ZVRhcmdldChBZGFwdGVyQ29udGV4dCwgc3ltKTsKKworICAgICAgICAgICAgLy8gQnJlYWsgb24gc3VjY2VzcworICAgICAgICAgICAgaWYgKE5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKKyAgICAvLyBDbGVhbiB1cCBvbiBmYWlsdXJlCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgU2VyaWFsVW5pbml0aWFsaXplKEFkYXB0ZXJDb250ZXh0KTsKKyAgICB9CisKKyAgICBpZiAoU3ltYm9saWNMaW5rTGlzdCkgeworICAgICAgICBFeEZyZWVQb29sKFN5bWJvbGljTGlua0xpc3QpOworICAgICAgICBTeW1ib2xpY0xpbmtMaXN0ID0gTlVMTDsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK1NlcmlhbFVuaW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0CisgICAgKQorLyorKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFNlcmlhbFVuaW5pdGlhbGl6ZSBjbGVhbnMgdXAgYW55IGNhY2hlZCBXZGYgSW9UYXJnZXQgY3JlYXRlZCBmcm9tIFNlcmlhbEluaXRpYWxpemUuCisKK0FyZ3VtZW50czoKKworICAgIEFkYXB0ZXJDb250ZXh0IC0gaGFuZGxlIHRvIGEgT1RUTVAgQWRhcHRlcgorLS0qLworeworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgUEFHRURfQ09ERSgpOworCisgICAgLy8gVE9ETyAtIENsZWFuIHVwIHdvcmsgaXRlbQorCisgICAgLy8gVE9ETyAtIENsZWFuIHVwIHNlbmQgcXVldWUKKworICAgIFNlcmlhbFVuaW5pdGlhbGl6ZVRhcmdldChBZGFwdGVyQ29udGV4dCk7CisKKyAgICBpZiAoQWRhcHRlckNvbnRleHQtPlJlY3ZXb3JrSXRlbSkgeworICAgICAgICBXZGZXb3JrSXRlbUZsdXNoKEFkYXB0ZXJDb250ZXh0LT5SZWN2V29ya0l0ZW0pOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworUEFHRUQKK19Ob19jb21wZXRpbmdfdGhyZWFkXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbEluaXRpYWxpemVUYXJnZXQoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dCwKKyAgICBfSW5fIFBDV1NUUiAgICAgICAgICAgICAgICAgICAgIFRhcmdldE5hbWUKKykKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNTRlVMOworICAgIFdERklPVEFSR0VUIHRlbXBUYXJnZXQgPSBXREZfTk9fSEFORExFOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIGRvCisgICAgeworICAgICAgICBERUNMQVJFX1VOSUNPREVfU1RSSU5HX1NJWkUoUG9ydE5hbWUsIDY0KTsgLy8gTWF4aW11bSBuYW1lIGxlbmd0aCBvZiB0aGUgZGV2aWNlIHBhdGggdG8gYSBzZXJpYWwgcG9ydAorICAgICAgICBXREZfSU9fVEFSR0VUX09QRU5fUEFSQU1TIG9wZW5QYXJhbXMgPSB7IDAgfTsKKyAgICAgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTIGF0dHIgPSB7IDAgfTsKKworICAgICAgICAvLyBDcmVhdGUgdGhlIFdkZiBJb1RhcmdldAorICAgICAgICBzdGF0dXMgPSBXZGZJb1RhcmdldENyZWF0ZShBZGFwdGVyQ29udGV4dC0+RGV2aWNlLCBXREZfTk9fT0JKRUNUX0FUVFJJQlVURVMsICZ0ZW1wVGFyZ2V0KTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZJb1RhcmdldENyZWF0ZSBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHJ5IHRoZSBDT00gcG9ydAorICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiT3BlbmluZyBkZXZpY2U6ICV3cyIsIFRhcmdldE5hbWUpOworICAgICAgICBSdGxJbml0VW5pY29kZVN0cmluZygmUG9ydE5hbWUsIFRhcmdldE5hbWUpOworICAgICAgICBXREZfSU9fVEFSR0VUX09QRU5fUEFSQU1TX0lOSVRfT1BFTl9CWV9OQU1FKAorICAgICAgICAgICAgJm9wZW5QYXJhbXMsCisgICAgICAgICAgICAmUG9ydE5hbWUsCisgICAgICAgICAgICBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFKTsKKworICAgICAgICAvLyBPcGVuIHRoZSBwb3J0IG9uIHRoZSB0YXJnZXQKKyAgICAgICAgc3RhdHVzID0gV2RmSW9UYXJnZXRPcGVuKHRlbXBUYXJnZXQsICZvcGVuUGFyYW1zKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZJb1RhcmdldE9wZW4oJXdaKSBmYWlsZWQgJSFTVEFUVVMhIiwgJlBvcnROYW1lLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBBZGFwdGVyQ29udGV4dC0+V2RmSW9UYXJnZXQgPSB0ZW1wVGFyZ2V0OworICAgICAgICB0ZW1wVGFyZ2V0ID0gV0RGX05PX0hBTkRMRTsKKworICAgICAgICBXREZfT0JKRUNUX0FUVFJJQlVURVNfSU5JVF9DT05URVhUX1RZUEUoJmF0dHIsIFdERl9ERVZJQ0VfSU5GTyk7CisgICAgICAgIGF0dHIuUGFyZW50T2JqZWN0ID0gQWRhcHRlckNvbnRleHQtPkRldmljZTsKKworICAgICAgICBzdGF0dXMgPSBXZGZSZXF1ZXN0Q3JlYXRlKCZhdHRyLCBBZGFwdGVyQ29udGV4dC0+V2RmSW9UYXJnZXQsICZBZGFwdGVyQ29udGV4dC0+UmVjdlJlYWRSZXF1ZXN0KTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZSZXF1ZXN0Q3JlYXRlIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBUcnkgdG8gY29uZmlndXJlIHRoZSB0YXJnZXQKKyAgICAgICAgc3RhdHVzID0gU2VyaWFsQ29uZmlndXJlKEFkYXB0ZXJDb250ZXh0KTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXJpYWxDb25maWd1cmUgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoZmFsc2UpOworCisgICAgLy8gQ2xlYW4gdXAgb24gZmFpbHVyZQorICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgIFNlcmlhbFVuaW5pdGlhbGl6ZVRhcmdldChBZGFwdGVyQ29udGV4dCk7CisgICAgfQorCisgICAgaWYgKHRlbXBUYXJnZXQpIHsKKyAgICAgICAgV2RmSW9UYXJnZXRDbG9zZSh0ZW1wVGFyZ2V0KTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK1NlcmlhbFVuaW5pdGlhbGl6ZVRhcmdldCgKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0CispCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2VyaWFsVW5pbml0aWFsaXplVGFyZ2V0IGNsZWFucyB1cCBhbnkgY2FjaGVkIFdkZiBJb1RhcmdldCBjcmVhdGVkIGZyb20gU2VyaWFsSW5pdGlhbGl6ZVRhcmdldC4KKworQXJndW1lbnRzOgorCisgICAgQWRhcHRlckNvbnRleHQgLSBoYW5kbGUgdG8gYSBPVFRNUCBBZGFwdGVyCistLSovCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIGlmIChBZGFwdGVyQ29udGV4dC0+V2RmSW9UYXJnZXQpIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2RmSW9UYXJnZXRTdG9wIHdpbGwgY2FuY2VsIGFsbCB0aGUgb3V0c3RhbmRpbmcgSS9PIGFuZCB3YWl0CisgICAgICAgIC8vIGZvciB0aGVtIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcuIFdkZklvVGFyZ2V0U3RvcCAgd2l0aCB0aGUKKyAgICAgICAgLy8gYWN0aW9uIHR5cGUgV2RmSW9UYXJnZXRDYW5jZWxTZW50SW8gY2FuIGJlIGNhbGxlZCBhdCBJUlFMIFBBU1NJVkVfTEVWRUwgb25seS4KKyAgICAgICAgLy8KKyAgICAgICAgV2RmSW9UYXJnZXRTdG9wKEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCwgV2RmSW9UYXJnZXRDYW5jZWxTZW50SW8pOworICAgICAgICBXZGZJb1RhcmdldENsb3NlKEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCk7CisgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCA9IE5VTEw7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitfTXVzdF9pbnNwZWN0X3Jlc3VsdF8KK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitGT1JDRUlOTElORQorU2VyaWFsU2VuZElvY3RsKAorICAgIF9Jbl8gICAgIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0LAorICAgIF9Jbl8gICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIElvY3RsQ29kZSwKKyAgICBfSW5fb3B0XyBQV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TICBSZXF1ZXN0T3B0aW9ucyA9IE5VTEwsCisgICAgX0luX29wdF8gUFdERl9NRU1PUllfREVTQ1JJUFRPUiAgICAgSW5wdXRCdWZmZXIgPSBXREZfTk9fSEFORExFLAorICAgIF9Jbl9vcHRfIFBXREZfTUVNT1JZX0RFU0NSSVBUT1IgICAgIE91dHB1dEJ1ZmZlciA9IFdERl9OT19IQU5ETEUsCisgICAgX091dF9vcHRfIFBVTE9OR19QVFIgICAgICAgICAgICAgICAgQnl0ZXNSZXR1cm5lZCA9IE5VTEwKKyAgICApCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgSGVscGVyL1dyYXBwZXIgZnVuY3Rpb24gZm9yIFdkZklvVGFyZ2V0U2VuZElvY3RsU3luY2hyb25vdXNseS4KKworLS0qLworeworICAgIHJldHVybiBXZGZJb1RhcmdldFNlbmRJb2N0bFN5bmNocm9ub3VzbHkoCisgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+V2RmSW9UYXJnZXQsIAorICAgICAgICAgICAgV0RGX05PX0hBTkRMRSwgCisgICAgICAgICAgICBJb2N0bENvZGUsIAorICAgICAgICAgICAgSW5wdXRCdWZmZXIsIAorICAgICAgICAgICAgT3V0cHV0QnVmZmVyLCAKKyAgICAgICAgICAgIFJlcXVlc3RPcHRpb25zLCAKKyAgICAgICAgICAgIEJ5dGVzUmV0dXJuZWQpOworfQorCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbENvbmZpZ3VyZSgKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0CisgICAgKQorLyorKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFNlcmlhbEluaXRpYWxpemUgYXR0ZW1wdHMgdG8gZmluZCBhbmQgb3BlbiB0aGUgZmlyc3QgQ09NIHBvcnQgYXZhaWxhYmxlLCB3aXRoCisgICAgdGhlIGFzc3VtcHRpb24gdGhhdCBpdCBzaG91bGQgYmUgZm9yIHRoZSBUaHJlYWQgZGV2aWNlLgorCitBcmd1bWVudHM6CisKKyAgICBBZGFwdGVyQ29udGV4dCAtIGhhbmRsZSB0byBhIE9UVE1QIEFkYXB0ZXIKKworUmV0dXJuIFZhbHVlOgorCisgICAgTlRTVEFUVVMgICAgLSBBIGZhaWx1cmUgaGVyZSB3aWxsIGluZGljYXRlIHRoZSBzZXJpYWwgQ09NIHBvcnQgd2FzIG5vdCBhYmxlCisgICAgICAgICAgICAgICAgICB0byBiZSBjb25maWd1cmVkIGFzIGRlc2lyZWQuCistLSovCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKyAgICBXREZfTUVNT1JZX0RFU0NSSVBUT1IgaW5wdXREZXNjOworICAgIFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OUyB3cnNvID0geworICAgICAgICBzaXplb2YoV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TKSwKKyAgICAgICAgV0RGX1JFUVVFU1RfU0VORF9PUFRJT05fVElNRU9VVCB8IFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OX1NZTkNIUk9OT1VTLAorICAgICAgICBXREZfUkVMX1RJTUVPVVRfSU5fU0VDKDEpIC8vIE5vdGhpbmcgc2hvdWxkIHRha2UgbW9yZSB0aGFuIGEgc2Vjb25kIHRvIGNvbXBsZXRlCisgICAgfTsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgUEFHRURfQ09ERSgpOworICAgIAorICAgIGRvCisgICAgeworICAgICAgICAvLyBJbml0aWFsIHJlc2V0IG9mIHRoZSBkZXZpY2UKKyAgICAgICAgc3RhdHVzID0gU2VyaWFsU2VuZElvY3RsKEFkYXB0ZXJDb250ZXh0LCBJT0NUTF9TRVJJQUxfUkVTRVRfREVWSUNFLCAmd3Jzbyk7CisgICAgICAgIAorICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJT0NUTF9TRVJJQUxfUkVTRVRfREVWSUNFIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyA4IGJpdHMsIG5vIHBhcml0eSwgMSBzdG9wIGJpdAorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBTRVJJQUxfTElORV9DT05UUk9MIHNsYyA9IHsgU1RPUF9CSVRfMSwgTk9fUEFSSVRZLCA4IH07CisgICAgICAgICAgICBXREZfTUVNT1JZX0RFU0NSSVBUT1JfSU5JVF9CVUZGRVIoJmlucHV0RGVzYywgKFBWT0lEKSZzbGMsIHNpemVvZihzbGMpKTsKKworICAgICAgICAgICAgc3RhdHVzID0gU2VyaWFsU2VuZElvY3RsKEFkYXB0ZXJDb250ZXh0LCBJT0NUTF9TRVJJQUxfU0VUX0xJTkVfQ09OVFJPTCwgJndyc28sICZpbnB1dERlc2MpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAgIklPQ1RMX1NFUklBTF9TRVRfTElORV9DT05UUk9MIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFhvbiBhbmQgWG9mZiBjaGFyYWN0ZXJzCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFNFUklBTF9DSEFSUyBzYyA9IHsgMCwgMCwgMCwgMCwgMHgxMSwgMHgxMyB9OworICAgICAgICAgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SX0lOSVRfQlVGRkVSKCZpbnB1dERlc2MsIChQVk9JRCkmc2MsIHNpemVvZihzYykpOworCisgICAgICAgICAgICBzdGF0dXMgPSBTZXJpYWxTZW5kSW9jdGwoQWRhcHRlckNvbnRleHQsIElPQ1RMX1NFUklBTF9TRVRfQ0hBUlMsICZ3cnNvLCAmaW5wdXREZXNjKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIklPQ1RMX1NFUklBTF9TRVRfQ0hBUlMgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBCYXVkIHJhdGUKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgU0VSSUFMX0JBVURfUkFURSBzYnIgPSB7IDExNTIwMCB9OworICAgICAgICAgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SX0lOSVRfQlVGRkVSKCZpbnB1dERlc2MsIChQVk9JRCkmc2JyLCBzaXplb2Yoc2JyKSk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1NFVF9CQVVEX1JBVEUsICZ3cnNvLCAmaW5wdXREZXNjKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIklPQ1RMX1NFUklBTF9TRVRfQkFVRF9SQVRFIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKnsKKyAgICAgICAgICAgIC8vIE9ubHkgc2VuZCBpZiBDVFMgaXMgc2V0LCBTZXQgUlRTIGJlZm9yZSBzZW5kaW5nCisgICAgICAgICAgICBjb25zdCBTRVJJQUxfSEFOREZMT1cgc2hmID0gCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU0VSSUFMX0NUU19IQU5EU0hBS0UsIFNFUklBTF9SVFNfQ09OVFJPTCwKKyAgICAgICAgICAgICAgICBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RILCBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RICisgICAgICAgICAgICB9OworICAgICAgICAgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SX0lOSVRfQlVGRkVSKCZpbnB1dERlc2MsIChQVk9JRCkmc2hmLCBzaXplb2Yoc2hmKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1NFVF9IQU5ERkxPVywgJndyc28sICZpbnB1dERlc2MpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiSU9DVExfU0VSSUFMX1NFVF9IQU5ERkxPVyBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAvLyBicmVhazsgSWdub3JlIGZvciBub3cKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1NFVF9YT04sICZ3cnNvKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJT0NUTF9TRVJJQUxfU0VUX1hPTiBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0gU2VyaWFsU2VuZElvY3RsKEFkYXB0ZXJDb250ZXh0LCBJT0NUTF9TRVJJQUxfU0VUX1JUUywgJndyc28pOworICAgICAgICAKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiSU9DVExfU0VSSUFMX1NFVF9SVFMgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1NFVF9EVFIsICZ3cnNvKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJT0NUTF9TRVJJQUxfU0VUX0RUUiBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Ki8KKworICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBTRVJJQUxfVElNRU9VVFMgc3RvID0geworICAgICAgICAgICAgICAgIDEsIDAsIDAsICAgICAgLy8gT24gcmVhZCwgb25seSB0aW1lb3V0IGlmIG1vcmUgdGhhbiAxbXMgKmJldHdlZW4qIGJ5dGVzICh3YWl0IGZvcmV2ZXIgZm9yIGZpcnN0IGJ5dGUpCisgICAgICAgICAgICAgICAgMSwgMTAgICAgICAgICAvLyBXcml0ZSB0aW1lcyBvdXQgYWZ0ZXIgKDFtcyAqIG4tYnl0ZXMpICsgKDEwbXMpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SX0lOSVRfQlVGRkVSKCZpbnB1dERlc2MsIChQVk9JRCkmc3RvLCBzaXplb2Yoc3RvKSk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1NFVF9USU1FT1VUUywgJndyc28sICZpbnB1dERlc2MpOworICAgICAgICAKKyAgICAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJT0NUTF9TRVJJQUxfU0VUX1RJTUVPVVRTIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0gU2VyaWFsRmx1c2hBbmRDaGVja1N0YXR1cyhBZGFwdGVyQ29udGV4dCk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2VyaWFsRmx1c2hBbmRDaGVja1N0YXR1cyBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzXyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbENoZWNrU3RhdHVzKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyBib29sICAgICAgICAgICAgICAgICAgICAgICBEYXRhRXhwZWN0ZWQKKyAgICApCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2VyaWFsQ2hlY2tTdGF0dXMgdmFsaWRhdGVzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgc2VyaWFsIENPTSBwb3J0LgorCitBcmd1bWVudHM6CisKKyAgICBBZGFwdGVyQ29udGV4dCAtIGhhbmRsZSB0byBhIE9UVE1QIEFkYXB0ZXIKKworUmV0dXJuIFZhbHVlOgorCisgICAgTlRTVEFUVVMgICAgLSBBIGZhaWx1cmUgaGVyZSB3aWxsIGluZGljYXRlIHRoZSBzZXJpYWwgQ09NIHBvcnQgaXMgbm90IGluIGFuCisgICAgICAgICAgICAgICAgICBleHBlY3RlZCBzdGF0ZS4KKy0tKi8KK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNTRlVMOworICAgIFdERl9NRU1PUllfREVTQ1JJUFRPUiBvdXRwdXREZXNjOworICAgIFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OUyB3cnNvID0geworICAgICAgICBzaXplb2YoV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TKSwKKyAgICAgICAgV0RGX1JFUVVFU1RfU0VORF9PUFRJT05fVElNRU9VVCB8IFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OX1NZTkNIUk9OT1VTLAorICAgICAgICBXREZfUkVMX1RJTUVPVVRfSU5fU0VDKDEpIC8vIE5vdGhpbmcgc2hvdWxkIHRha2UgbW9yZSB0aGFuIGEgc2Vjb25kIHRvIGNvbXBsZXRlCisgICAgfTsKKyAgICBVTE9OR19QVFIgYnl0ZXNSZXR1cm5lZCA9IDA7CisgICAgU0VSSUFMX1NUQVRVUyBzcyA9IHsgMCB9OworICAgIFdERl9NRU1PUllfREVTQ1JJUFRPUl9JTklUX0JVRkZFUigmb3V0cHV0RGVzYywgKFBWT0lEKSZzcywgc2l6ZW9mKHNzKSk7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEFHRURfQ09ERSgpOworCisgICAgLy8gQ2hlY2sgdG8gZW5zdXJlIHdlIGFyZSByZWFkeSB0byBzZW5kCisgICAgc3RhdHVzID0gU2VyaWFsU2VuZElvY3RsKEFkYXB0ZXJDb250ZXh0LCBJT0NUTF9TRVJJQUxfR0VUX0NPTU1TVEFUVVMsICZ3cnNvLCBXREZfTk9fSEFORExFLCAmb3V0cHV0RGVzYywgJmJ5dGVzUmV0dXJuZWQpOworCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIAorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJT0NUTF9TRVJJQUxfR0VUX0NPTU1TVEFUVVMgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzUmV0dXJuZWQgPj0gc2l6ZW9mKHNzKSkgCisgICAgeworICAgICAgICBpZiAoc3MuSG9sZFJlYXNvbnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzcy5Ib2xkUmVhc29ucyAhPSBTRVJJQUxfVFhfV0FJVElOR19GT1JfQ1RTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiSG9sZFJlYXNvbnMgaXMgd3JvbmcgKHNob3VsZCBvbmx5IGJlIENUUywgYnV0IGlzICV4KSIsIHNzLkhvbGRSZWFzb25zICk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfREVWSUNFX1NUQVRFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIURhdGFFeHBlY3RlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkFkYXB0ZXIgYWxyZWFkeSBoYXMgZGF0YSBvbiBpbml0IT8hPyEiKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9TVEFURV9UUkFOU0lUSU9OOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzcy5FcnJvcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJVbmV4cGVjdGVkIEVycm9yICV4Iiwgc3MuRXJyb3JzKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19VTlNVQ0NFU1NGVUw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzXyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbEZsdXNoQW5kQ2hlY2tTdGF0dXMoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dAorICAgICkKKy8qKysKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBTZXJpYWxGbHVzaEFuZENoZWNrU3RhdHVzIGZsdXNoZWQgYW5kIHZhbGlkYXRlcyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHNlcmlhbCBDT00gcG9ydC4KKworQXJndW1lbnRzOgorCisgICAgQWRhcHRlckNvbnRleHQgLSBoYW5kbGUgdG8gYSBPVFRNUCBBZGFwdGVyCisKK1JldHVybiBWYWx1ZToKKworICAgIE5UU1RBVFVTICAgIC0gQSBmYWlsdXJlIGhlcmUgd2lsbCBpbmRpY2F0ZSB0aGUgc2VyaWFsIENPTSBwb3J0IGlzIG5vdCBpbiBhbgorICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgc3RhdGUuCistLSovCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SIGlucHV0RGVzYzsKKyAgICAgICAgV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TIHdyc28gPSB7CisgICAgICAgICAgICBzaXplb2YoV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TKSwKKyAgICAgICAgICAgIFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OX1RJTUVPVVQgfCBXREZfUkVRVUVTVF9TRU5EX09QVElPTl9TWU5DSFJPTk9VUywKKyAgICAgICAgICAgIFdERl9SRUxfVElNRU9VVF9JTl9TRUMoMSkgLy8gTm90aGluZyBzaG91bGQgdGFrZSBtb3JlIHRoYW4gYSBzZWNvbmQgdG8gY29tcGxldGUKKyAgICAgICAgfTsKKyAgICAgICAgY29uc3QgVUxPTkcgZmxhZ3MgPSBTRVJJQUxfUFVSR0VfUlhBQk9SVCB8IFNFUklBTF9QVVJHRV9SWENMRUFSIHwgU0VSSUFMX1BVUkdFX1RYQUJPUlQgfCBTRVJJQUxfUFVSR0VfVFhDTEVBUjsKKworICAgICAgICBXREZfTUVNT1JZX0RFU0NSSVBUT1JfSU5JVF9CVUZGRVIoJmlucHV0RGVzYywgKFBWT0lEKSZmbGFncywgc2l6ZW9mKGZsYWdzKSk7CisgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1BVUkdFLCAmd3JzbywgJmlucHV0RGVzYyk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiSU9DVExfU0VSSUFMX1BVUkdFIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzdGF0dXMgPSBTZXJpYWxTZW5kSW9jdGwoQWRhcHRlckNvbnRleHQsIElPQ1RMX1NFUklBTF9DTEVBUl9TVEFUUywgJndyc28pOworCisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIklPQ1RMX1NFUklBTF9DTEVBUl9TVEFUUyBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0gU2VyaWFsQ2hlY2tTdGF0dXMoQWRhcHRlckNvbnRleHQsIGZhbHNlKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7ICFOVF9TVUNDRVNTKHN0YXR1cykgJiYgaSA8IDIwOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIE5kaXNNU2xlZXAoMSk7IC8vIGp1c3Qgc2xlZXAgZW5vdWdoIHRvIGdpdmUgdXAgb3VyIHF1YW50dW0KKyAgICAgICAgICAgIHN0YXR1cyA9IFNlcmlhbENoZWNrU3RhdHVzKEFkYXB0ZXJDb250ZXh0LCBmYWxzZSk7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKGZhbHNlKTsKKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorYm9vbAorU2VyaWFsUHVzaFNlbmQoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0LAorICAgIF9Jbl8gUFNFUklBTF9TRU5EX0lURU0gICAgICBTZW5kSXRlbQorICAgICkKK3sKKyAgICBXZGZTcGluTG9ja0FjcXVpcmUoQWRhcHRlckNvbnRleHQtPlNlbmRMb2NrKTsKKyAgICAKKyAgICAvLyBTdGFydCB0aGUgd29yayBpdGVtIHVwIGlmIGl0J3Mgbm90IGFscmVhZHkgcnVubmluZworICAgIGlmICghQWRhcHRlckNvbnRleHQtPlNlbmRRdWV1ZVJ1bm5pbmcpCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiU3RhcnRpbmcgU2VuZCBXb3JrIEl0ZW0iKTsKKyAgICAgICAgQWRhcHRlckNvbnRleHQtPlNlbmRRdWV1ZVJ1bm5pbmcgPSB0cnVlOworICAgICAgICBXZGZXb3JrSXRlbUVucXVldWUoQWRhcHRlckNvbnRleHQtPlNlbmRXb3JrSXRlbSk7CisgICAgfQorCisgICAgLy8gSW5zZXJ0IHRoZSBuZXcgaXRlbSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0CisgICAgSW5zZXJ0VGFpbExpc3QoJkFkYXB0ZXJDb250ZXh0LT5TZW5kUXVldWUsICZTZW5kSXRlbS0+TGluayk7CisKKyAgICBXZGZTcGluTG9ja1JlbGVhc2UoQWRhcHRlckNvbnRleHQtPlNlbmRMb2NrKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorUFNFUklBTF9TRU5EX0lURU0KK1NlcmlhbFBvcFNlbmQoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0CisgICAgKQoreworICAgIFBMSVNUX0VOVFJZIGN1cnJlbnQgPSBOVUxMOworCisgICAgLy8gR3JhYiB0aGUgaGVhZCBvZiB0aGUgbGlzdAorICAgIC8vIENhcmVmdWwsIHRoaXMgbWlnaHQgaGF2ZSBnb3R0ZW4gYWJvcnRlZCwgbGVhdmluZyB0aGUgbGlzdCBlbXB0eQorICAgIFdkZlNwaW5Mb2NrQWNxdWlyZShBZGFwdGVyQ29udGV4dC0+U2VuZExvY2spOworCisgICAgaWYgKCFJc0xpc3RFbXB0eSgmQWRhcHRlckNvbnRleHQtPlNlbmRRdWV1ZSkpCisgICAgeworICAgICAgICBjdXJyZW50ID0gUmVtb3ZlSGVhZExpc3QoJkFkYXB0ZXJDb250ZXh0LT5TZW5kUXVldWUpOworICAgIH0KKyAgICBpZiAoY3VycmVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgLy8gRG8gdGhpcyB1bmRlciB0aGUgbG9jaywgYnV0IHRoZSBzdGF0ZSBpcyBjb25zdW1lZCBvdXRzaWRlIHRoZSBsb2NrCisgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5TZW5kUXVldWVSdW5uaW5nID0gZmFsc2U7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJTZW5kIFdvcmsgSXRlbSBDb21wbGV0ZSIpOworICAgIH0KKworICAgIFdkZlNwaW5Mb2NrUmVsZWFzZShBZGFwdGVyQ29udGV4dC0+U2VuZExvY2spOworCisgICAgcmV0dXJuIGN1cnJlbnQgPyBDT05UQUlOSU5HX1JFQ09SRChjdXJyZW50LCBTRVJJQUxfU0VORF9JVEVNLCBMaW5rKSA6IE5VTEw7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworU2VyaWFsU2VuZERhdGEoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dCwKKyAgICBfSW5fIFBORVRfQlVGRkVSX0xJU1QgICAgICAgICAgIE5ldEJ1ZmZlckxpc3QKKyAgICApCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2VyaWFsU2VuZERhdGEgZW5jb2RlcyBhbmQgcXVldWVzIHVwIHRoZSBkYXRhIHRvIGJlIHNlbnQgb3ZlciB0aGUgc2VyaWFsIENPTSBwb3J0LgorCitBcmd1bWVudHM6CisKKyAgICBBZGFwdGVyQ29udGV4dCAtIGhhbmRsZSB0byBhIE9UVE1QIEFkYXB0ZXIKKworICAgIE5ldEJ1ZmZlckxpc3RzIC0gYSBzaW5nbGUgTkVUX0JVRkZFUl9MSVNUIG9iamVjdCwgY29udGFpbmluZyBhIHNpZ25sZSBORVRfQlVGRkVSIGZvciAKKyAgICAgICAgICAgICAgICAgICAgIFNwaW5lbCB0dW5uZWwgY29tbWFuZHMuCisKKyAgICBEaXNwYXRjaExldmVsICAtIGZsYWcgaW5kaWNhdGluZyBpZiB3ZSBhcmUgcnVubmluZyBhdCBkaXNwYXRjaCBvciBub3QKKworUmV0dXJuIFZhbHVlOgorCisgICAgTlRTVEFUVVMgICAgLSBBIGZhaWx1cmUgaGVyZSB3aWxsIGluZGljYXRlIHdlIGVpdGhlciBmYWlsZWQgdG8gZW5jb2RlIG9yIHF1ZXVlIHRoZSBkYXRhLgorLS0qLworeworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFUyBhdHRyaWJ1dGVzOworICAgIFdERk1FTU9SWSBXZGZNZW1CdWZmZXIgPSBOVUxMOworICAgIFBTRVJJQUxfU0VORF9JVEVNIFNlbmRJdGVtID0gTlVMTDsKKyAgICBQVUNIQVIgRGVjb2RlZEJ1ZmZlciA9IE5VTEw7CisgICAgVUxPTkcgRGVjb2RlZEJ1ZmZlckxlbmd0aCA9IE5ldEJ1ZmZlckxpc3QtPkZpcnN0TmV0QnVmZmVyLT5EYXRhTGVuZ3RoOworICAgIFVMT05HIEVuY29kZWRCdWZmZXJMZW5ndGg7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIC8vIEdldCB0aGUgZGVjb2RlZCBidWZmZXIgZnJvbSB0aGUgTkJML05CLiBXZSByZXF1aXJlZAorICAgICAgICAvLyB0aGUgdXNlIG9mIGNvbnRpZ3VvdXMgYnVmZmVycy4KKyAgICAgICAgRGVjb2RlZEJ1ZmZlciA9IChQVUNIQVIpTmRpc0dldERhdGFCdWZmZXIoTmV0QnVmZmVyTGlzdC0+Rmlyc3ROZXRCdWZmZXIsIERlY29kZWRCdWZmZXJMZW5ndGgsIE5VTEwsIDEsIDApOworICAgICAgICBpZiAoRGVjb2RlZEJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIlNlbmRpbmcgJXUgZGVjb2RlZCBieXRlcyIsIERlY29kZWRCdWZmZXJMZW5ndGgpOworICAgICAgICBEdW1wQnVmZmVyKERlY29kZWRCdWZmZXIsIERlY29kZWRCdWZmZXJMZW5ndGgpOworCisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYnVmZmVyIHNpemUgcmVxdWlyZWQKKyAgICAgICAgRW5jb2RlZEJ1ZmZlckxlbmd0aCA9IEhkbGNDb21wdXRlRW5jb2RlZExlbmd0aChEZWNvZGVkQnVmZmVyLCBEZWNvZGVkQnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFsbG9jYXRlIHRoZSBtZW1vcnkKKyAgICAgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTX0lOSVQoJmF0dHJpYnV0ZXMpOworICAgICAgICBhdHRyaWJ1dGVzLlBhcmVudE9iamVjdCA9IEFkYXB0ZXJDb250ZXh0LT5EZXZpY2U7CisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhzdXBwcmVzczogMjgxNjApIC8vIFBhcmFtIDMgY291bGQgYmUgMAorICAgICAgICBzdGF0dXMgPSBXZGZNZW1vcnlDcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICBOb25QYWdlZFBvb2xOeCwKKyAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgU0VSSUFMX1NFTkRfSVRFTV9TSVpFICsgRW5jb2RlZEJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgJldkZk1lbUJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgKFBWT0lEKikmU2VuZEl0ZW0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyNwcmFnbWEgd2FybmluZyhwb3ApCisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJXZGZNZW1vcnlDcmVhdGUgKCV1IGJ5dGVzKSBmYWlsZWQgJSFTVEFUVVMhIiwgKFNFUklBTF9TRU5EX0lURU1fU0laRSArIEVuY29kZWRCdWZmZXJMZW5ndGgpLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFNlbmRJdGVtLT5OZXRCdWZmZXJMaXN0ID0gTmV0QnVmZmVyTGlzdDsKKyAgICAgICAgU2VuZEl0ZW0tPldkZk1lbW9yeSA9IFdkZk1lbUJ1ZmZlcjsKKyAgICAgICAgU2VuZEl0ZW0tPkVuY29kZWRCdWZmZXJMZW5ndGggPSBFbmNvZGVkQnVmZmVyTGVuZ3RoOworCisgICAgICAgIC8vIEVuY29kZSBkYXRhCisgICAgICAgIGlmICghSGRsY0VuY29kZUJ1ZmZlcihEZWNvZGVkQnVmZmVyLCBEZWNvZGVkQnVmZmVyTGVuZ3RoLCBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlciwgRW5jb2RlZEJ1ZmZlckxlbmd0aCkpIHsKKyAgICAgICAgICAgIE5UX0FTU0VSVChGQUxTRSk7IC8vIFNob3VsZCBuZXZlciBmYWlsLCB1bmxlc3Mgd2UgaGF2ZSBhIGJ1ZyBpbiB0aGUgbGVuZ3RoIGNvbXB1dGF0aW9uCisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gUXVldWUgZGF0YSB0byBiZSBzZW50IG91dAorICAgICAgICBpZiAoIVNlcmlhbFB1c2hTZW5kKEFkYXB0ZXJDb250ZXh0LCBTZW5kSXRlbSkpIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19ERVZJQ0VfTk9UX1JFQURZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKGZhbHNlKTsKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgIGlmIChXZGZNZW1CdWZmZXIpIHsKKyAgICAgICAgICAgIFdkZk9iamVjdERlbGV0ZShXZGZNZW1CdWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfREVGQVVMVCwgc3RhdHVzKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK1BBR0VECitfRnVuY3Rpb25fY2xhc3NfKEVWVF9XREZfV09SS0lURU0pCitfSVJRTF9yZXF1aXJlc19zYW1lXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorU2VyaWFsU2VuZExvb3AoCisgICAgX0luXyBXREZXT1JLSVRFTSBXb3JrSXRlbQorICAgICkKKy8qKysKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBTZXJpYWxTZW5kTG9vcCBoYW5kbGVzIHRoZSBhY3R1YWwgc2VuZGluZyBvZiBkYXRhIG92ZXIgdGhlIHNlcmlhbCBDT00gcG9ydC4KKworQXJndW1lbnRzOgorCisgICAgV29ya0l0ZW0gLSBoYW5kbGUgdG8gYSBXZGYgRGV2aWNlIEluZm8gb2JqZWN0IGZvciB0aGUgQWRhcHRlciBjb250ZXh0CisKKy0tKi8KK3sKKyAgICBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0ID0gR2V0V2RmRGV2aWNlSW5mbyhXb3JrSXRlbSktPkFkYXB0ZXJDb250ZXh0OworICAgIFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OUyB3cnNvID0geworICAgICAgICBzaXplb2YoV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TKSwKKyAgICAgICAgV0RGX1JFUVVFU1RfU0VORF9PUFRJT05fVElNRU9VVCB8IFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OX1NZTkNIUk9OT1VTLAorICAgICAgICBXREZfUkVMX1RJTUVPVVRfSU5fU0VDKDEpIC8vIE5vdGhpbmcgc2hvdWxkIHRha2UgbW9yZSB0aGFuIGEgc2Vjb25kIHRvIGNvbXBsZXRlCisgICAgfTsKKyAgICBXREZNRU1PUllfT0ZGU0VUIG9mZnNldCA9IHsgMCB9OworICAgIFBTRVJJQUxfU0VORF9JVEVNIFNlbmRJdGVtID0gTlVMTDsKKyAgICBXREZfTUVNT1JZX0RFU0NSSVBUT1Igd21kOworICAgIE5UU1RBVFVTIHN0YXR1czsKKworICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFUyBBdHRyaWJ1dGVzOworICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFU19JTklUKCZBdHRyaWJ1dGVzKTsKKyAgICBBdHRyaWJ1dGVzLlBhcmVudE9iamVjdCA9IEFkYXB0ZXJDb250ZXh0LT5EZXZpY2U7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEFHRURfQ09ERSgpOworCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhzdXBwcmVzczogNjM4NykgLy8gUGFyYW0gMiBpcyBOVUxMCisgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SX0lOSVRfSEFORExFKCZ3bWQsIE5VTEwsICZvZmZzZXQpOworI3ByYWdtYSB3YXJuaW5nKHBvcCkKKworICAgIHdoaWxlIChOVUxMICE9IChTZW5kSXRlbSA9IFNlcmlhbFBvcFNlbmQoQWRhcHRlckNvbnRleHQpKSkKKyAgICB7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJTZW5kaW5nICV1IGVuY29kZWQgYnl0ZXMiLCBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlckxlbmd0aCk7CisgICAgICAgIER1bXBCdWZmZXIoU2VuZEl0ZW0tPkVuY29kZWRCdWZmZXIsIFNlbmRJdGVtLT5FbmNvZGVkQnVmZmVyTGVuZ3RoKTsKKworICAgICAgICBpZiAoU2VuZEl0ZW0tPkVuY29kZWRCdWZmZXJMZW5ndGggPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBvZmZzZXQuQnVmZmVyTGVuZ3RoID0gU2VuZEl0ZW0tPkVuY29kZWRCdWZmZXJMZW5ndGg7CisgICAgICAgICAgICBzdGF0dXMgPSAKKyAgICAgICAgICAgICAgICBXZGZNZW1vcnlDcmVhdGVQcmVhbGxvY2F0ZWQoCisgICAgICAgICAgICAgICAgICAgICZBdHRyaWJ1dGVzLCAKKyAgICAgICAgICAgICAgICAgICAgU2VuZEl0ZW0tPkVuY29kZWRCdWZmZXIsIAorICAgICAgICAgICAgICAgICAgICBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlckxlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICZ3bWQudS5IYW5kbGVUeXBlLk1lbW9yeSk7CisKKyAgICAgICAgICAgIGlmICghTlRfU1VDQ0VTUyggc3RhdHVzICkpIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIldkZklvVGFyZ2V0U2VuZFdyaXRlU3luY2hyb25vdXNseSAoJXUgYnl0ZXMpIGZhaWxlZCAlIVNUQVRVUyEiLCBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlckxlbmd0aCwgc3RhdHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTZW5kIHRoZSBidWZmZXIgb3V0CisgICAgICAgICAgICAgICAgc3RhdHVzID0gV2RmSW9UYXJnZXRTZW5kV3JpdGVTeW5jaHJvbm91c2x5KEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCwgTlVMTCwgJndtZCwgTlVMTCwgJndyc28sIE5VTEwpOworCisgICAgICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKCBzdGF0dXMgKSkgeworICAgICAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIldkZklvVGFyZ2V0U2VuZFdyaXRlU3luY2hyb25vdXNseSAoJXUgYnl0ZXMpIGZhaWxlZCAlIVNUQVRVUyEiLCBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlckxlbmd0aCwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBXZGZPYmplY3REZWxldGUod21kLnUuSGFuZGxlVHlwZS5NZW1vcnkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29tcGxldGUgdGhlIE5ldEJ1ZmZlckxpc3QKKyAgICAgICAgU2VuZEl0ZW0tPk5ldEJ1ZmZlckxpc3QtPlN0YXR1cyA9IHN0YXR1czsKKyNpZmRlZiBPVFRNUF9MRUdBQ1kKKyAgICAgICAgTmRpc01TZW5kTmV0QnVmZmVyTGlzdHNDb21wbGV0ZShBZGFwdGVyQ29udGV4dC0+QWRhcHRlciwgU2VuZEl0ZW0tPk5ldEJ1ZmZlckxpc3QsIDApOworI2Vsc2UKKyAgICAgICAgTmV0QnVmZmVyTGlzdHNDb21wbGV0ZVNlbmQoU2VuZEl0ZW0tPk5ldEJ1ZmZlckxpc3QpOworI2VuZGlmCisKKyAgICAgICAgLy8gSGFjayB0byBzbGVlcCAxIG1zIHBlciA1IGJ5dGVzIHNlbnQKKyAgICAgICAgTmRpc01TbGVlcCgxMDAwICogKDEgKyBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlckxlbmd0aCAvIDUpKTsKKworICAgICAgICAvLyBDbGVhbnVwCisgICAgICAgIFdkZk9iamVjdERlbGV0ZShTZW5kSXRlbS0+V2RmTWVtb3J5KTsKKyAgICB9OworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitQQUdFRAorX0Z1bmN0aW9uX2NsYXNzXyhFVlRfV0RGX1dPUktJVEVNKQorX0lSUUxfcmVxdWlyZXNfc2FtZV8KK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK1NlcmlhbFJlY3ZMb29wKAorICAgIF9Jbl8gV0RGV09SS0lURU0gV29ya0l0ZW0KKyAgICApCit7CisgICAgUE9UVE1QX0FEQVBURVJfQ09OVEVYVCBBZGFwdGVyQ29udGV4dCA9IEdldFdkZkRldmljZUluZm8oV29ya0l0ZW0pLT5BZGFwdGVyQ29udGV4dDsKKyAgICBXREZNRU1PUlkgbWVtID0geyAwIH07CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIGRvCisgICAgeworICAgICAgICBXREZSRVFVRVNUICYgcmVxdWVzdCA9IEFkYXB0ZXJDb250ZXh0LT5SZWN2UmVhZFJlcXVlc3Q7CisKKyAgICAgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTIGF0dHJpYnV0ZXM7CisgICAgICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFU19JTklUKCZhdHRyaWJ1dGVzKTsKKyAgICAgICAgYXR0cmlidXRlcy5QYXJlbnRPYmplY3QgPSBBZGFwdGVyQ29udGV4dC0+RGV2aWNlOworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgV2RmTWVtb3J5Q3JlYXRlUHJlYWxsb2NhdGVkKAorICAgICAgICAgICAgICAgICZhdHRyaWJ1dGVzLCAKKyAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlciArIEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyTGVuZ3RoLCAKKyAgICAgICAgICAgICAgICBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RILCAKKyAgICAgICAgICAgICAgICAmbWVtKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZNZW1vcnlDcmVhdGVGcm9tTG9va2FzaWRlIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzdGF0dXMgPSBXZGZJb1RhcmdldEZvcm1hdFJlcXVlc3RGb3JSZWFkKEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCwgcmVxdWVzdCwgbWVtLCBOVUxMLCBOVUxMKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZJb1RhcmdldEZvcm1hdFJlcXVlc3RGb3JSZWFkIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBXZGZSZXF1ZXN0U2V0Q29tcGxldGlvblJvdXRpbmUocmVxdWVzdCwgU2VyaWFsUmVjdkNvbXBsZXRlLCBBZGFwdGVyQ29udGV4dCk7CisgICAgICAgICAgICBpZiAoV2RmUmVxdWVzdFNlbmQocmVxdWVzdCwgQWRhcHRlckNvbnRleHQtPldkZklvVGFyZ2V0LCBXREZfTk9fU0VORF9PUFRJT05TKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTZW5kIHN1Y2NlZWRlZCwgbm8gY2xlYW51cAorICAgICAgICAgICAgICAgIG1lbSA9IE5VTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFdkZlJlcXVlc3RHZXRTdGF0dXMocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIldkZlJlcXVlc3RTZW5kIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBXREZfUkVRVUVTVF9SRVVTRV9QQVJBTVMgcmV1c2VQYXJhbXMgPSB7IDAgfTsKKyAgICAgICAgICAgIFdERl9SRVFVRVNUX1JFVVNFX1BBUkFNU19JTklUKCZyZXVzZVBhcmFtcywgV0RGX1JFUVVFU1RfUkVVU0VfTk9fRkxBR1MsIFNUQVRVU19TVUNDRVNTKTsKKworICAgICAgICAgICAgLy8gcmVmcmVzaCB0aGUgcmVxdWVzdCBzbyBpdCBpcyByZWFkeSB0byByZXVzZQorICAgICAgICAgICAgc3RhdHVzID0gV2RmUmVxdWVzdFJldXNlKHJlcXVlc3QsICZyZXVzZVBhcmFtcyk7CisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBOVF9BU1NFUlQoTlRfU1VDQ0VTUyhzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIldkZlJlcXVlc3RSZXVzZSBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoZmFsc2UpOworCisgICAgaWYgKG1lbSkgeworICAgICAgICBXZGZPYmplY3REZWxldGUobWVtKTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitfV2hlbl8ocmV0dXJuPT0wLF9BdF8oKnBOZXRCdWZmZXJMaXN0LCBfX2Rydl9hbGxvY2F0ZXNNZW0obWVtKSkpCitfV2hlbl8ocmV0dXJuPT0wLF9BdF8oKCpwTmV0QnVmZmVyTGlzdCktPkZpcnN0TmV0QnVmZmVyLCBfX2Rydl9hbGxvY2F0ZXNNZW0obWVtKSkpCitOVFNUQVRVUworU2VyaWFsQWxsb2NhdGVOZXRCdWZmZXJMaXN0KAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyBVTE9ORyAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJMZW5ndGgsCisgICAgX091dF8gUE5FVF9CVUZGRVJfTElTVCAgICAgICAgICpwTmV0QnVmZmVyTGlzdAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICBQTkVUX0JVRkZFUl9MSVNUIE5ldEJ1ZmZlckxpc3QgPSBOVUxMOworICAgIFBORVRfQlVGRkVSIE5ldEJ1ZmZlciA9IE5VTEw7CisKKyAgICBkbworICAgIHsKKworI2lmZGVmIE9UVE1QX0xFR0FDWQorICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgTmV0QnVmZmVyTGlzdAorICAgICAgICBOZXRCdWZmZXJMaXN0ID0gTmRpc0FsbG9jYXRlTmV0QnVmZmVyTGlzdChBZGFwdGVyQ29udGV4dC0+cEdsb2JhbHMtPmhOYmxQb29sLCAwLCAwKTsKKworICAgICAgICBpZiAoTmV0QnVmZmVyTGlzdCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsb2NhdGUgdGhlIE5ldEJ1ZmZlcgorICAgICAgICBOZXRCdWZmZXJMaXN0LT5GaXJzdE5ldEJ1ZmZlciA9IE5kaXNBbGxvY2F0ZU5ldEJ1ZmZlck1kbEFuZERhdGEoQWRhcHRlckNvbnRleHQtPnBHbG9iYWxzLT5oTmJQb29sKTsKKworICAgICAgICBpZiAoTmV0QnVmZmVyTGlzdC0+Rmlyc3ROZXRCdWZmZXIgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgLy8gR3JhYiBhIE5ldEJ1ZmZlckxpc3QgZnJvbSB0aGUgY29sbGVjdGlvbgorICAgICAgICBzdGF0dXMgPSBOZXRCdWZmZXJMaXN0Q29sbGVjdGlvblJldHJpZXZlTmJscyhBZGFwdGVyQ29udGV4dC0+UmVjZWl2ZUNvbGxlY3Rpb24sIDEsICZOZXRCdWZmZXJMaXN0KTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIE5ESVNfU1RBVFVTIG5kaXNTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgICAgICBOZXRCdWZmZXIgPSBOZXRCdWZmZXJMaXN0LT5GaXJzdE5ldEJ1ZmZlcjsKKworICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBidWZmZXIgYWxsb2NhdGVkIHlldCwgZ28gYWhlYWQgYW5kIGFsbG9jYXRlIHRoZSBtYXgKKyAgICAgICAgaWYgKE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoTmV0QnVmZmVyKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgbWF4IGJ1ZmZlciBzaXplCisgICAgICAgICAgICBuZGlzU3RhdHVzID0gTmRpc1JldHJlYXROZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RILCAwLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChuZGlzU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJOZGlzUmV0cmVhdE5ldEJ1ZmZlckRhdGFTdGFydCBmYWlsZWQgJSFORElTX1NUQVRVUyEiLCBuZGlzU3RhdHVzKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEJ5IHRoaXMgcG9pbnQsIHdlIHNob3VsZCBoYXZlIGEgTmV0QnVmZmVyIHdpdGggYSBjb250aWd1b3VzIG1lbW9yeSBibG9jayBvZiBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RIIGJ5dGVzLAorICAgICAgICAvLyB0aG91Z2ggaXQncyBvZmZzZXQgY291bGQgYmUgYW55d2hlcmUgaW4gdGhlIGJ1ZmZlciwgZnJvbSB3aGVuIGl0IHdhcyBwcmV2aW91c2x5IHVzZWQuCisKKyAgICAgICAgLy8gQWRqdXN0IGJ1ZmZlciBsZW5ndGggdG8gZml0IHRoZSByZXF1ZXN0ZWQgbGVuZ3RoCisgICAgICAgIGlmIChORVRfQlVGRkVSX0RBVEFfTEVOR1RIKE5ldEJ1ZmZlcikgPiBCdWZmZXJMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5kaXNBZHZhbmNlTmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgTkVUX0JVRkZFUl9EQVRBX0xFTkdUSChOZXRCdWZmZXIpIC0gQnVmZmVyTGVuZ3RoLCBGQUxTRSwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoTkVUX0JVRkZFUl9EQVRBX0xFTkdUSChOZXRCdWZmZXIpIDwgQnVmZmVyTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBuZGlzU3RhdHVzID0gTmRpc1JldHJlYXROZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBCdWZmZXJMZW5ndGggLSBORVRfQlVGRkVSX0RBVEFfTEVOR1RIKE5ldEJ1ZmZlciksIDAsIE5VTEwpOworICAgICAgICAgICAgTlRfQVNTRVJUKG5kaXNTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisgICAgICAgICAgICBpZiAobmRpc1N0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBvdXRwdXQKKyAgICAgICAgKnBOZXRCdWZmZXJMaXN0ID0gTmV0QnVmZmVyTGlzdDsKKworICAgIH0gd2hpbGUgKEZBTFNFKTsKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyNpZmRlZiBPVFRNUF9MRUdBQ1kKKyAgICAgICAgaWYgKE5ldEJ1ZmZlcikgTmRpc0ZyZWVOZXRCdWZmZXIoTmV0QnVmZmVyKTsKKyAgICAgICAgaWYgKE5ldEJ1ZmZlckxpc3QpIE5kaXNGcmVlTmV0QnVmZmVyTGlzdChOZXRCdWZmZXJMaXN0KTsKKyNlbHNlCisgICAgICAgIGlmIChOZXRCdWZmZXJMaXN0KSBOZXRCdWZmZXJMaXN0c0Rpc2NhcmRSZWNlaXZlKE5ldEJ1ZmZlckxpc3QpOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0Z1bmN0aW9uX2NsYXNzXyhFVlRfV0RGX1JFUVVFU1RfQ09NUExFVElPTl9ST1VUSU5FKQorX0lSUUxfcmVxdWlyZXNfc2FtZV8KK1ZPSUQKK1NlcmlhbFJlY3ZDb21wbGV0ZSgKKyAgICBfSW5fIFdERlJFUVVFU1QgUmVxdWVzdCwKKyAgICBfSW5fIFdERklPVEFSR0VUIFRhcmdldCwKKyAgICBfSW5fIFBXREZfUkVRVUVTVF9DT01QTEVUSU9OX1BBUkFNUyBQYXJhbXMsCisgICAgX0luXyBXREZDT05URVhUIENvbnRleHQKKyAgICApCit7CisgICAgUE9UVE1QX0FEQVBURVJfQ09OVEVYVCBBZGFwdGVyQ29udGV4dCA9IChQT1RUTVBfQURBUFRFUl9DT05URVhUKUNvbnRleHQ7CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoVGFyZ2V0KTsgLy8gRXhjZXB0IGZvciBhbiBhc3NlcnQKKyAgICBOVF9BU1NFUlQoKFRhcmdldCA9PSBBZGFwdGVyQ29udGV4dC0+V2RmSW9UYXJnZXQpIHx8IChXREZfTk9fSEFORExFID09IEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCkpOworICAgIE5UX0FTU0VSVChSZXF1ZXN0ID09IEFkYXB0ZXJDb250ZXh0LT5SZWN2UmVhZFJlcXVlc3QpOworCisgICAgV0RGTUVNT1JZIG1lbSA9IFBhcmFtcy0+UGFyYW1ldGVycy5SZWFkLkJ1ZmZlcjsKKyAgICBOVF9BU1NFUlQobWVtKTsKKworICAgIHN0YXR1cyA9IFdkZlJlcXVlc3RHZXRTdGF0dXMoUmVxdWVzdCk7CisgICAgaWYgKE5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIE5UX0FTU0VSVChQYXJhbXMtPlR5cGUgPT0gV2RmUmVxdWVzdFR5cGVSZWFkKTsKKyAgICAgICAgTlRfQVNTRVJUKFBhcmFtcy0+UGFyYW1ldGVycy5SZWFkLk9mZnNldCA9PSAwKTsKKworICAgICAgICBzaXplX3QgTWVtb3J5TGVuZ3RoID0gMDsKKyAgICAgICAgTlRfQVNTRVJUKEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyICsgQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggPT0gKFBVQ0hBUilXZGZNZW1vcnlHZXRCdWZmZXIobWVtLCAmTWVtb3J5TGVuZ3RoKSk7CisgICAgICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoTWVtb3J5TGVuZ3RoKTsKKworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiUmVjZWl2ZWQgJXUgZW5jb2RlZCBieXRlcyIsIChVTE9ORylQYXJhbXMtPklvU3RhdHVzLkluZm9ybWF0aW9uKTsKKyAgICAgICAgRHVtcEJ1ZmZlcihBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlciArIEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyTGVuZ3RoLCAoVUxPTkcpUGFyYW1zLT5Jb1N0YXR1cy5JbmZvcm1hdGlvbik7CisKKyAgICAgICAgQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggKz0gKFVMT05HKVBhcmFtcy0+SW9TdGF0dXMuSW5mb3JtYXRpb247CisgICAgICAgIAorICAgICAgICAvLyBEZWNvZGUgYW5kIHJlY2VpdmUKKyAgICAgICAgVUxPTkcgUmVhZE9mZnNldCA9IDA7CisgICAgICAgIHdoaWxlIChBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlckxlbmd0aCA+IFJlYWRPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFBhcnNlLCB2YWxpZGF0ZSBhbmQgY29tcHV0ZSB0aGUgZGVjb2RlZCBidWZmZXIgc2l6ZSByZXF1aXJlbWVudHMKKyAgICAgICAgICAgIFVMT05HIFVzZWRFbmNvZGVkQnVmZmVyTGVuZ3RoID0gQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggLSBSZWFkT2Zmc2V0OworICAgICAgICAgICAgVUxPTkcgRGVjb2RlZEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgICAgICAgICBib29sIEhhc0dvb2RCdWZmZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wgSGFzQ29tcGxldGVCdWZmZXIgPSAKKyAgICAgICAgICAgICAgICBIZGxjRGVjb2RlQnVmZmVyKAorICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlciArIFJlYWRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICZVc2VkRW5jb2RlZEJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgJkRlY29kZWRCdWZmZXJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICZIYXNHb29kQnVmZmVyKTsKKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgdXNlZCBtb3JlIGJ1ZmZlciB0aGFuIGF2YWlsYWJsZQorICAgICAgICAgICAgTlRfQVNTRVJUKFVzZWRFbmNvZGVkQnVmZmVyTGVuZ3RoIDw9IEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyTGVuZ3RoIC0gUmVhZE9mZnNldCk7CisKKyAgICAgICAgICAgIC8vIERpZCB3ZSBoYXZlIGEgY29tcGxldGUgKHN0YXJ0IGFuZCBlbmQgc2VxdWVuY2UgY2hhcnMpIGJ1ZmZlcj8KKyAgICAgICAgICAgIGlmICghSGFzQ29tcGxldGVCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggLT0gUmVhZE9mZnNldDsKKworICAgICAgICAgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJCdWZmZXJpbmcgJXUgaW5jb21wbGV0ZSBieXRlcyIsIEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBOVF9BU1NFUlQoQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggPCBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RIKTsKKworICAgICAgICAgICAgICAgIG1lbW1vdmVfcyhBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlciwgc2l6ZW9mKEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyICsgUmVhZE9mZnNldCwgQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFdhcyB0aGUgYnVmZmVyIHRvbyBzaG9ydCBvciBkaWQgaXQncyBGQ1Mgbm90IG1hdGNoPworICAgICAgICAgICAgICAgIGlmIChIYXNHb29kQnVmZmVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTlRfQVNTRVJUKFVzZWRFbmNvZGVkQnVmZmVyTGVuZ3RoIDw9IE1BWF9TUElORUxfQ09NTUFORF9MRU5HVEgpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEFsbG9jYXRlIHRoZSBOZXRCdWZmZXJMaXN0ICYgTmV0QnVmZmVyIHRvIGRlY29kZSB0aGUgZGF0YSB0bworICAgICAgICAgICAgICAgICAgICBQTkVUX0JVRkZFUl9MSVNUIE5ldEJ1ZmZlckxpc3QgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBTZXJpYWxBbGxvY2F0ZU5ldEJ1ZmZlckxpc3QoQWRhcHRlckNvbnRleHQsIERlY29kZWRCdWZmZXJMZW5ndGgsICZOZXRCdWZmZXJMaXN0KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBQTkVUX0JVRkZFUiBOZXRCdWZmZXIgPSBOZXRCdWZmZXJMaXN0LT5GaXJzdE5ldEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5UX0FTU0VSVChEZWNvZGVkQnVmZmVyTGVuZ3RoID09IE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoTmV0QnVmZmVyKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBwb2ludGVyIHRvIGNvbnRpZ3VvdXMgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICBQVUNIQVIgRGVjb2RlZEJ1ZmZlciA9IChQVUNIQVIpTmRpc0dldERhdGFCdWZmZXIoTmV0QnVmZmVyLCBEZWNvZGVkQnVmZmVyTGVuZ3RoLCBOVUxMLCAxLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5UX0FTU0VSVChEZWNvZGVkQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEZWNvZGVkQnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc0NvbXBsZXRlQnVmZmVyID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhkbGNEZWNvZGVCdWZmZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlciArIFJlYWRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNlZEVuY29kZWRCdWZmZXJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVjb2RlZEJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZWRCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSGFzR29vZEJ1ZmZlcik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVF9BU1NFUlQoSGFzQ29tcGxldGVCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5UX0FTU0VSVChIYXNHb29kQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVF9BU1NFUlQoRGVjb2RlZEJ1ZmZlckxlbmd0aCA9PSBORVRfQlVGRkVSX0RBVEFfTEVOR1RIKE5ldEJ1ZmZlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiUmVjZWl2ZWQgJXUgZGVjb2RlZCBieXRlcyIsIERlY29kZWRCdWZmZXJMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1bXBCdWZmZXIoRGVjb2RlZEJ1ZmZlciwgRGVjb2RlZEJ1ZmZlckxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHVwIHRoZSBuZXcgTkJMIHdlIGp1c3QgY3JlYXRlZAorI2lmZGVmIE9UVE1QX0xFR0FDWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5kaXNNSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5BZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRCdWZmZXJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORElTX0RFRkFVTFRfUE9SVF9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0QnVmZmVyTGlzdHNDb21wbGV0ZVJlY2VpdmUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldEJ1ZmZlckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ESVNfREVGQVVMVF9QT1JUX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisjaWZkZWYgT1RUTVBfTEVHQUNZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXIoTmV0QnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZGlzRnJlZU5ldEJ1ZmZlckxpc3QoTmV0QnVmZmVyTGlzdCk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldEJ1ZmZlckxpc3RzRGlzY2FyZFJlY2VpdmUoTmV0QnVmZmVyTGlzdCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRHJvcHBpbmcgJXUgYmFkIGJ5dGVzIiwgVXNlZEVuY29kZWRCdWZmZXJMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBEdW1wQnVmZmVyKEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyICsgUmVhZE9mZnNldCwgVXNlZEVuY29kZWRCdWZmZXJMZW5ndGgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciB1c2VkIGRhdGEKKyAgICAgICAgICAgICAgICBSZWFkT2Zmc2V0ICs9IFVzZWRFbmNvZGVkQnVmZmVyTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgcmVhZCBhbGwgdGhlIGJ1ZmZlciwgc28gcmVzZXQgdGhlIGxlbmd0aAorICAgICAgICBpZiAoQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggPT0gUmVhZE9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggPSAwOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiUmVhZCByZXF1ZXN0IGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIFdkZk9iamVjdERlbGV0ZShtZW0pOworCisgICAgaWYgKHN0YXR1cyAhPSBTVEFUVVNfREVMRVRFX1BFTkRJTkcpCisgICAgeworICAgICAgICBXREZfUkVRVUVTVF9SRVVTRV9QQVJBTVMgcmV1c2VQYXJhbXMgPSB7IDAgfTsKKyAgICAgICAgV0RGX1JFUVVFU1RfUkVVU0VfUEFSQU1TX0lOSVQoJnJldXNlUGFyYW1zLCBXREZfUkVRVUVTVF9SRVVTRV9OT19GTEFHUywgU1RBVFVTX1NVQ0NFU1MpOworICAgICAgICBzdGF0dXMgPSBXZGZSZXF1ZXN0UmV1c2UoUmVxdWVzdCwgJnJldXNlUGFyYW1zKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5UX0FTU0VSVChOVF9TVUNDRVNTKHN0YXR1cykpOworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZSZXF1ZXN0UmV1c2UgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJTdGFydGluZyByZWN2IHdvcmtlciIpOworICAgICAgICBXZGZXb3JrSXRlbUVucXVldWUoQWRhcHRlckNvbnRleHQtPlJlY3ZXb3JrSXRlbSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitWT0lEIAorRHVtcExpbmUoCisgICAgX0luX3JlYWRzX2J5dGVzXyhhTGVuZ3RoKSBQQ1VDSEFSIGFCdWYsIAorICAgIF9Jbl8gc2l6ZV90IGFMZW5ndGgKKyAgICApCit7CisgICAgY2hhciBidWZbODBdID0gezB9OworICAgIGNoYXIgKmN1ciA9IGJ1ZjsKKworICAgIHNwcmludGZfcyhjdXIsIHNpemVvZihidWYpIC0gKGN1ciAtIGJ1ZiksICJ8Iik7CisgICAgY3VyICs9IDE7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2OyBpKyspCisgICAgeworICAgICAgICBpZiAoaSA8IGFMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNwcmludGZfcyhjdXIsIHNpemVvZihidWYpIC0gKGN1ciAtIGJ1ZiksICIgJTAyWCIsIGFCdWZbaV0pOworICAgICAgICAgICAgY3VyICs9IDM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzcHJpbnRmX3MoY3VyLCBzaXplb2YoYnVmKSAtIChjdXIgLSBidWYpLCAiIC4uIik7CisgICAgICAgICAgICBjdXIgKz0gMzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKChpICsgMSkgJSA4KSkKKyAgICAgICAgeworICAgICAgICAgICAgc3ByaW50Zl9zKGN1ciwgc2l6ZW9mKGJ1ZikgLSAoY3VyIC0gYnVmKSwgIiB8Iik7CisgICAgICAgICAgICBjdXIgKz0gMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNwcmludGZfcyhjdXIsIHNpemVvZihidWYpIC0gKGN1ciAtIGJ1ZiksICIgIik7CisgICAgY3VyICs9IDE7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2OyBpKyspCisgICAgeworICAgICAgICBpZiAoaSA8IGFMZW5ndGggJiYgaXNwcmludCgweDdmICYgYUJ1ZltpXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IDB4N2YgJiBhQnVmW2ldOworICAgICAgICAgICAgc3ByaW50Zl9zKGN1ciwgc2l6ZW9mKGJ1ZikgLSAoY3VyIC0gYnVmKSwgIiVjIiwgYyk7CisgICAgICAgICAgICBjdXIgKz0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNwcmludGZfcyhjdXIsIHNpemVvZihidWYpIC0gKGN1ciAtIGJ1ZiksICIuIik7CisgICAgICAgICAgICBjdXIgKz0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICIlcyIsIGJ1Zik7Cit9CisKK1ZPSUQgCitEdW1wQnVmZmVyKAorICAgIF9Jbl9yZWFkc19ieXRlc18oYUxlbmd0aCkgUENVQ0hBUiBhQnVmLCAKKyAgICBfSW5fIHNpemVfdCBhTGVuZ3RoCisgICAgKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYUxlbmd0aDsgaSArPSAxNikKKyAgICB7CisgICAgICAgIER1bXBMaW5lKGFCdWYgKyBpLCAoYUxlbmd0aCAtIGkpIDwgMTYgPyAoYUxlbmd0aCAtIGkpIDogMTYpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9zZXJpYWwuaHBwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL3NlcmlhbC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1ODE5MgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9zZXJpYWwuaHBwCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworUEFHRUQKK19Ob19jb21wZXRpbmdfdGhyZWFkXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbEluaXRpYWxpemUoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dAorICAgICk7CisKK1BBR0VECitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitTZXJpYWxVbmluaXRpYWxpemUoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dAorICAgICk7CisKK1BBR0VECitfTm9fY29tcGV0aW5nX3RocmVhZF8KK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitTZXJpYWxJbml0aWFsaXplVGFyZ2V0KAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyBQQ1dTVFIgICAgICAgICAgICAgICAgICAgICBUYXJnZXROYW1lCispOworCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorU2VyaWFsVW5pbml0aWFsaXplVGFyZ2V0KAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQKKyk7CisKK1BBR0VECitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworU2VyaWFsQ29uZmlndXJlKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQKKyAgICApOworCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworU2VyaWFsQ2hlY2tTdGF0dXMoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dCwKKyAgICBfSW5fIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIERhdGFFeHBlY3RlZAorICAgICk7CisKK1BBR0VECitfSVJRTF9yZXF1aXJlc18oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitTZXJpYWxGbHVzaEFuZENoZWNrU3RhdHVzKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbFNlbmREYXRhKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyBQTkVUX0JVRkZFUl9MSVNUICAgICAgICAgICBOZXRCdWZmZXJMaXN0cworICAgICk7CisKK1BBR0VECitfRnVuY3Rpb25fY2xhc3NfKEVWVF9XREZfV09SS0lURU0pCitfSVJRTF9yZXF1aXJlc19zYW1lXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorU2VyaWFsU2VuZExvb3AoCisgICAgX0luXyBXREZXT1JLSVRFTSAgICAgICAgICAgICAgICBXb3JrSXRlbQorICAgICk7CisKK1BBR0VECitfRnVuY3Rpb25fY2xhc3NfKEVWVF9XREZfV09SS0lURU0pCitfSVJRTF9yZXF1aXJlc19zYW1lXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorU2VyaWFsUmVjdkxvb3AoCisgICAgX0luXyBXREZXT1JLSVRFTSAgICAgICAgICAgICAgICBXb3JrSXRlbQorICAgICk7CisKK19GdW5jdGlvbl9jbGFzc18oRVZUX1dERl9SRVFVRVNUX0NPTVBMRVRJT05fUk9VVElORSkKK19JUlFMX3JlcXVpcmVzX3NhbWVfCitWT0lECitTZXJpYWxSZWN2Q29tcGxldGUoCisgICAgX0luXyBXREZSRVFVRVNUICAgICAgICAgICAgICAgICBSZXF1ZXN0LAorICAgIF9Jbl8gV0RGSU9UQVJHRVQgICAgICAgICAgICAgICAgVGFyZ2V0LAorICAgIF9Jbl8gUFdERl9SRVFVRVNUX0NPTVBMRVRJT05fUEFSQU1TIFBhcmFtcywKKyAgICBfSW5fIFdERkNPTlRFWFQgICAgICAgICAgICAgICAgIENvbnRleHQKKyAgICApOworCitWT0lEIAorRHVtcEJ1ZmZlcigKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKGFMZW5ndGgpIFBDVUNIQVIgYUJ1ZiwgCisgICAgX0luXyBzaXplX3QgICAgICAgICAgICAgICAgICAgICBhTGVuZ3RoCisgICAgKTsKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDJiMjE0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOTcgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworIyBBbHdheXMgcGFja2FnZSAoZS5nLiBmb3IgJ21ha2UgZGlzdCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitESVNUX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY2MyNTM4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2MyNjUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGExNTAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWZyMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZW1zayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAga3c0MXogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbnJmNTI4NDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcG9zaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXRpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIEFsd2F5cyBidWlsZCAoZS5nLiBmb3IgJ21ha2UgYWxsJykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICB1dGlscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNTM4CitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBjYzI1MzgKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNjUwCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBjYzI2NTAKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfREExNTAwMAorU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gZGExNTAwMAorZW5kaWYKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19FRlIzMgorU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gZWZyMzIKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfRU1TSworU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gZW1zaworZW5kaWYKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19LVzQxWgorU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0ga3c0MXoKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfTlJGNTI4NDAKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IG5yZjUyODQwCitlbmRpZgorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBwb3NpeAorZW5kaWYKKworIyBBbHdheXMgcHJldHR5IChlLmcuIGZvciAnbWFrZSBwcmV0dHknKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworUFJFVFRZX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGNjMjUzOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNjMjY1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRhMTUwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVmcjMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVtc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGt3NDF6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5yZjUyODQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBvc2l4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHV0aWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L01ha2VmaWxlLmFtIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWMzMmYwCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDY2IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGlib3BlbnRocmVhZC1jYzI1MzguYQorCitsaWJvcGVudGhyZWFkX2NjMjUzOF9hX0NQUEZMQUdTICAgICAgICAgICA9IFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfY2MyNTM4X2FfU09VUkNFUyAgICAgICAgICAgID0gXAorICAgIGFsYXJtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmxhc2guYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtaXNjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByYW5kb20uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXJ0dXAtZ2NjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdWFydC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKK2xpYm9wZW50aHJlYWRfY2MyNTM4X2FfU09VUkNFUyAgICAgICAgICAgKz0gXAorICAgIGRpYWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY2MyNTM4LXJlZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS1jYzI1MzguaCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJvbS11dGlsaXR5LmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitEYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IC0KK2xpYm9wZW50aHJlYWRfY2MyNTM4X2FfTElCQUREICAgICAgICAgICAgID0gXAorICAgICQoc2hlbGwgZmluZCAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL3V0aWxzICQoRGFzaCl0eXBlIGYgJChEYXNoKW5hbWUgIioubyIpCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9SRUFETUUubWQgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGUwYzU4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9SRUFETUUubWQKQEAgLTAsMCArMSw5MyBAQAorIyBPcGVuVGhyZWFkIG9uIENDMjUzOCBFeGFtcGxlCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGV4YW1wbGUgcGxhdGZvcm0gZHJpdmVycyBmb3IgdGhlIFtUZXhhcworSW5zdHJ1bWVudHMgQ0MyNTM4XVtjYzI1MzhdLgorCitbY2MyNTM4XTogaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC9DQzI1MzgKKworVGhlIGV4YW1wbGUgcGxhdGZvcm0gZHJpdmVycyBhcmUgaW50ZW5kZWQgdG8gcHJlc2VudCB0aGUgbWluaW1hbCBjb2RlCituZWNlc3NhcnkgdG8gc3VwcG9ydCBPcGVuVGhyZWFkLiAgQXMgYSByZXN1bHQsIHRoZSBleGFtcGxlIHBsYXRmb3JtCitkcml2ZXJzIGRvIG5vdCBuZWNlc3NhcmlseSBoaWdobGlnaHQgdGhlIHBsYXRmb3JtJ3MgZnVsbCBjYXBhYmlsaXRpZXMuCisKKyMjIFRvb2xjaGFpbgorCitEb3dubG9hZCBhbmQgaW5zdGFsbCB0aGUgW0dOVSB0b29sY2hhaW4gZm9yIEFSTQorQ29ydGV4LU1dW2dudS10b29sY2hhaW5dLgorCitbZ251LXRvb2xjaGFpbl06IGh0dHBzOi8vbGF1bmNocGFkLm5ldC9nY2MtYXJtLWVtYmVkZGVkCisKKyMjIEJ1aWxkaW5nCisKK0luIGEgQmFzaCB0ZXJtaW5hbCwgZm9sbG93IHRoZXNlIGluc3RydWN0aW9ucyB0byBidWlsZCB0aGUgY2MyNTM4IGV4YW1wbGVzLgorCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtY2MyNTM4CitgYGAKKworIyMgRmxhc2ggQmluYXJpZXMKKworSWYgdGhlIGJ1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRoZSBgZWxmYCBmaWxlcyBtYXkgYmUgZm91bmQgaW4KK2A8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQvY2MyNTM4L2JpbmAuCisKK1RvIGZsYXNoIHRoZSBpbWFnZXMgd2l0aCBbRmxhc2ggUHJvZ3JhbW1lciAyXVt0aS1mbGFzaC1wcm9ncmFtbWVyLTJdLAordGhlIGZpbGVzIG11c3QgaGF2ZSB0aGUgYCouZWxmYCBleHRlbnNpb24uCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4vb3V0cHV0L2NjMjUzOC9iaW4KKyQgY3Agb3QtY2xpIG90LWNsaS5lbGYKK2BgYAorCitUbyBsb2FkIHRoZSBpbWFnZXMgd2l0aCB0aGUgW3NlcmlhbCBib290bG9hZGVyXVt0aS1jYzI1MzgtYm9vdGxvYWRlcl0sCit0aGUgaW1hZ2VzIG11c3QgYmUgY29udmVydGVkIHRvIGBiaW5gLiBUaGlzIGlzIGRvbmUgdXNpbmcKK2Bhcm0tbm9uZS1lYWJpLW9iamNvcHlgCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4vb3V0cHV0L2NjMjUzOC9iaW4KKyQgYXJtLW5vbmUtZWFiaS1vYmpjb3B5IC1PIGJpbmFyeSBvdC1jbGkgb3QtY2xpLmJpbgorYGBgCisKK1RoZSBbY2MyNTM4LWJzbC5weSBzY3JpcHRdW2NjMjUzOC1ic2wtdG9vbF0gcHJvdmlkZXMgYSBjb252ZW5pZW50CittZXRob2QgZm9yIGZsYXNoaW5nIGEgQ0MyNTM4IHZpYSB0aGUgVUFSVC4gVG8gZW50ZXIgdGhlIGJvb3Rsb2FkZXIKK2JhY2tkb29yIGZvciBmbGFzaGluZywgaG9sZCBkb3duIFNFTEVDVCBmb3IgQ0MyNTM4REsgKGNvcnJlc3BvbmRzIHRvCitsb2dpYyAnMCcpIHdoaWxlIHlvdSBwcmVzcyB0aGUgUmVzZXQgYnV0dG9uLgorCitbdGktZmxhc2gtcHJvZ3JhbW1lci0yXTogaHR0cDovL3d3dy50aS5jb20vdG9vbC9mbGFzaC1wcm9ncmFtbWVyCitbdGktY2MyNTM4LWJvb3Rsb2FkZXJdOiBodHRwOi8vd3d3LnRpLmNvbS9saXQvYW4vc3dyYTQ2NmEvc3dyYTQ2NmEucGRmCitbY2MyNTM4LWJzbC10b29sXTogaHR0cHM6Ly9naXRodWIuY29tL0plbG1lclQvY2MyNTM4LWJzbAorCisjIyBJbnRlcmFjdAorCisxLiBPcGVuIHRlcm1pbmFsIHRvIGAvZGV2L3R0eVVTQjFgIChzZXJpYWwgcG9ydCBzZXR0aW5nczogMTE1MjAwIDgtTi0xKS4KKzIuIFR5cGUgYGhlbHBgIGZvciBsaXN0IG9mIGNvbW1hbmRzLgorCitgYGBiYXNoCis+IGhlbHAKK2hlbHAKK2NoYW5uZWwKK2NoaWxkdGltZW91dAorY29udGV4dHJldXNlZGVsYXkKK2V4dGFkZHIKK2V4dHBhbmlkCitpcGFkZHIKK2tleXNlcXVlbmNlCitsZWFkZXJ3ZWlnaHQKK21hc3RlcmtleQorbW9kZQorbmV0ZGF0YXJlZ2lzdGVyCituZXR3b3JraWR0aW1lb3V0CituZXR3b3JrbmFtZQorcGFuaWQKK3BpbmcKK3ByZWZpeAorcmVsZWFzZXJvdXRlcmlkCitybG9jMTYKK3JvdXRlCityb3V0ZXJ1cGdyYWRldGhyZXNob2xkCitzY2FuCitzdGFydAorc3RhdGUKK3N0b3AKK3doaXRlbGlzdAorYGBgCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2FsYXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyZjNhYgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvYWxhcm0uYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgdGhlIGFsYXJtLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tY2MyNTM4LmgiCisKK2VudW0KK3sKKyAgICBrU3lzdGVtQ2xvY2sgPSAzMjAwMDAwMCwgIC8vLzwgTUh6CisgICAga1RpY2tzUGVyU2VjID0gMTAwMCwgICAgICAvLy88IFRpY2tzIHBlciBzZWNvbmQKK307CisKK3N0YXRpYyB1aW50MzJfdCBzQ291bnRlciA9IDA7CitzdGF0aWMgdWludDMyX3Qgc0FsYXJtVDAgPSAwOworc3RhdGljIHVpbnQzMl90IHNBbGFybUR0ID0gMDsKK3N0YXRpYyBib29sIHNJc1J1bm5pbmcgPSBmYWxzZTsKKwordm9pZCBjYzI1MzhBbGFybUluaXQodm9pZCkKK3sKKyAgICBIV1JFRyhOVklDX1NUX1JFTE9BRCkgPSBrU3lzdGVtQ2xvY2sgLyBrVGlja3NQZXJTZWM7CisgICAgSFdSRUcoTlZJQ19TVF9DVFJMKSA9IE5WSUNfU1RfQ1RSTF9DTEtfU1JDIHwgTlZJQ19TVF9DVFJMX0lOVEVOIHwgTlZJQ19TVF9DVFJMX0VOQUJMRTsKK30KKwordWludDMyX3Qgb3RQbGF0QWxhcm1HZXROb3codm9pZCkKK3sKKyAgICByZXR1cm4gc0NvdW50ZXI7Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdGFydEF0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgdDAsIHVpbnQzMl90IGR0KQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzQWxhcm1UMCA9IHQwOworICAgIHNBbGFybUR0ID0gZHQ7CisgICAgc0lzUnVubmluZyA9IHRydWU7Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc0lzUnVubmluZyA9IGZhbHNlOworfQorCit2b2lkIGNjMjUzOEFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgdWludDMyX3QgZXhwaXJlczsKKyAgICBib29sIGZpcmUgPSBmYWxzZTsKKworICAgIGlmIChzSXNSdW5uaW5nKQorICAgIHsKKyAgICAgICAgZXhwaXJlcyA9IHNBbGFybVQwICsgc0FsYXJtRHQ7CisKKyAgICAgICAgaWYgKHNBbGFybVQwIDw9IHNDb3VudGVyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXhwaXJlcyA+PSBzQWxhcm1UMCAmJiBleHBpcmVzIDw9IHNDb3VudGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpcmUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGV4cGlyZXMgPj0gc0FsYXJtVDAgfHwgZXhwaXJlcyA8PSBzQ291bnRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaXJlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaXJlKQorICAgICAgICB7CisgICAgICAgICAgICBzSXNSdW5uaW5nID0gZmFsc2U7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90UGxhdERpYWdBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXRBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK30KKwordm9pZCBTeXNUaWNrX0hhbmRsZXIoKQoreworICAgIHNDb3VudGVyKys7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC1yZWcuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvY2MyNTM4LXJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWM4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC1yZWcuaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgQ0MyNTM4IHJlZ2lzdGVyIGRlZmluaXRpb25zLgorICoKKyAqLworCisjaWZuZGVmIENDMjUzOF9SRUdfSF8KKyNkZWZpbmUgQ0MyNTM4X1JFR19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgSFdSRUcoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSh4KSkpCisKKyNkZWZpbmUgTlZJQ19TVF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RTAwMEUwMTAgIC8vIFN5c1RpY2sgQ29udHJvbCBhbmQgU3RhdHVzCisjZGVmaW5lIE5WSUNfU1RfUkVMT0FEICAgICAgICAgICAgICAgICAgICAgICAgICAweEUwMDBFMDE0ICAvLyBTeXNUaWNrIFJlbG9hZCBWYWx1ZSBSZWdpc3RlcgorI2RlZmluZSBOVklDX0VOMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFMDAwRTEwMCAgLy8gSW50ZXJydXB0IDAtMzEgU2V0IEVuYWJsZQorCisjZGVmaW5lIE5WSUNfU1RfQ1RSTF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwICAvLyBDb3VudCBGbGFnCisjZGVmaW5lIE5WSUNfU1RfQ1RSTF9DTEtfU1JDICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICAvLyBDbG9jayBTb3VyY2UKKyNkZWZpbmUgTlZJQ19TVF9DVFJMX0lOVEVOICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgIC8vIEludGVycnVwdCBFbmFibGUKKyNkZWZpbmUgTlZJQ19TVF9DVFJMX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIEVuYWJsZQorCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ01BVENIX0VOICAgICAgICAgICAgICAgICAweDAwMDAwMDAxICAvLyBTUkNNQVRDSC5TUkNfTUFUQ0hfRU4oMSkKKyNkZWZpbmUgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfQVVUT1BFTkQgICAgICAgICAgIDB4MDAwMDAwMDIgIC8vIFNSQ01BVENILkFVVE9QRU5EKDEpCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ01BVENIX1BFTkRfREFUQVJFUV9PTkxZICAweDAwMDAwMDA0ICAvLyBTUkNNQVRDSC5QRU5EX0RBVEFSRVFfT05MWSgxKQorCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ01BVENIX0VOQUJMRV9TVEFUVVNfU0laRSAzICAgICAgICAgICAvLyBOdW0gb2YgcmVnaXN0ZXIgZm9yIHNvdXJjZSBtYXRjaCBlbmFibGUgc3RhdHVzCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ01BVENIX1NIT1JUX0VOVFJJRVMgICAgICAyNCAgICAgICAgICAvLyAyNCBzaG9ydCBhZGRyZXNzIGVudHJpZXMgaW4gbWF4aW11bQorI2RlZmluZSBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUklFUyAgICAgICAgMTIgICAgICAgICAgLy8gMTIgZXh0ZW5kZWQgYWRkcmVzcyBlbnRyaWVzIGluIG1heGltdW0KKyNkZWZpbmUgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfU0hPUlRfRU5UUllfT0ZGU0VUIDQgICAgICAgICAgIC8vIGFkZHJlc3Mgb2Zmc2V0IGZvciBvbmUgc2hvcnQgYWRkcmVzcyBlbnRyeQorI2RlZmluZSBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUllfT0ZGU0VUICAgOCAgICAgICAgICAgLy8gYWRkcmVzcyBvZmZzZXQgZm9yIG9uZSBleHRlbmRlZCBhZGRyZXNzIGVudHJ5CisKKyNkZWZpbmUgSU5UX1VBUlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxICAgICAgICAgIC8vIFVBUlQwIFJ4IGFuZCBUeAorCisjZGVmaW5lIElFRUVfRVVJNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjgwMDI4ICAvLyBBZGRyZXNzIG9mIElFRUUgRVVJLTY0IGFkZHJlc3MKKworI2RlZmluZSBSRkNPUkVfRkZTTV9TUkNBRERSRVNTX1RBQkxFICAgICAgICAgICAgMHg0MDA4ODQwMCAgLy8gU291cmNlIEFkZHJlc3MgVGFibGUKKworI2RlZmluZSBSRkNPUkVfRkZTTV9TUkNFWFRQRU5ERU4wICAgICAgICAgICAgICAgMHg0MDA4ODU5MCAgLy8gRW5hYmxlL0Rpc2FibGUgYXV0b21hdGljIHBlbmRpbmcgcGVyIGV4dGVuZGVkIGFkZHJlc3MKKyNkZWZpbmUgUkZDT1JFX0ZGU01fU1JDU0hPUlRQRU5ERU4wICAgICAgICAgICAgIDB4NDAwODg1OUMgIC8vIEVuYWJsZS9EaXNhYmxlIGF1dG9tYXRpYyBwZW5kaW5nIHBlciBzaG9ydCBhZGRyZXNzCisjZGVmaW5lIFJGQ09SRV9GRlNNX0VYVF9BRERSMCAgICAgICAgICAgICAgICAgICAweDQwMDg4NUE4ICAvLyBMb2NhbCBhZGRyZXNzIGluZm9ybWF0aW9uCisjZGVmaW5lIFJGQ09SRV9GRlNNX1BBTl9JRDAgICAgICAgICAgICAgICAgICAgICAweDQwMDg4NUM4ICAvLyBMb2NhbCBhZGRyZXNzIGluZm9ybWF0aW9uCisjZGVmaW5lIFJGQ09SRV9GRlNNX1BBTl9JRDEgICAgICAgICAgICAgICAgICAgICAweDQwMDg4NUNDICAvLyBMb2NhbCBhZGRyZXNzIGluZm9ybWF0aW9uCisjZGVmaW5lIFJGQ09SRV9GRlNNX1NIT1JUX0FERFIwICAgICAgICAgICAgICAgICAweDQwMDg4NUQwICAvLyBMb2NhbCBhZGRyZXNzIGluZm9ybWF0aW9uCisjZGVmaW5lIFJGQ09SRV9GRlNNX1NIT1JUX0FERFIxICAgICAgICAgICAgICAgICAweDQwMDg4NUQ0ICAvLyBMb2NhbCBhZGRyZXNzIGluZm9ybWF0aW9uCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUZJTFQwICAgICAgICAgICAgICAgICAgICAweDQwMDg4NjAwICAvLyBUaGUgZnJhbWUgZmlsdGVyaW5nIGZ1bmN0aW9uCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ01BVENIICAgICAgICAgICAgICAgICAgICAweDQwMDg4NjA4ICAvLyBTb3VyY2UgYWRkcmVzcyBtYXRjaGluZyBhbmQgcGVuZGluZyBiaXRzCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ1NIT1JURU4wICAgICAgICAgICAgICAgICAweDQwMDg4NjBDICAvLyBTaG9ydCBhZGRyZXNzIG1hdGNoaW5nCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ0VYVEVOMCAgICAgICAgICAgICAgICAgICAweDQwMDg4NjE4ICAvLyBFeHRlbmRlZCBhZGRyZXNzIG1hdGNoaW5nCisKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlJNQ1RSTDAgICAgICAgICAgICAgICAgICAgIDB4NDAwODg2MjQgIC8vIEZyYW1lIGhhbmRsaW5nCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUNUUkwxICAgICAgICAgICAgICAgICAgICAweDQwMDg4NjI4ICAvLyBGcmFtZSBoYW5kbGluZworI2RlZmluZSBSRkNPUkVfWFJFR19SWEVOQUJMRSAgICAgICAgICAgICAgICAgICAgMHg0MDA4ODYyQyAgLy8gUlggZW5hYmxpbmcKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlJFUUNUUkwgICAgICAgICAgICAgICAgICAgIDB4NDAwODg2M0MgIC8vIENvbnRyb2xzIHRoZSBSRiBmcmVxdWVuY3kKKyNkZWZpbmUgUkZDT1JFX1hSRUdfVFhQT1dFUiAgICAgICAgICAgICAgICAgICAgIDB4NDAwODg2NDAgIC8vIENvbnRyb2xzIHRoZSBvdXRwdXQgcG93ZXIKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlNNU1RBVDEgICAgICAgICAgICAgICAgICAgIDB4NDAwODg2NEMgIC8vIFJhZGlvIHN0YXR1cyByZWdpc3RlcgorI2RlZmluZSBSRkNPUkVfWFJFR19GSUZPUENUUkwgICAgICAgICAgICAgICAgICAgMHg0MDA4ODY1MCAgLy8gRklGT1AgdGhyZXNob2xkCisjZGVmaW5lIFJGQ09SRV9YUkVHX0NDQUNUUkwwICAgICAgICAgICAgICAgICAgICAweDQwMDg4NjU4ICAvLyBDQ0EgdGhyZXNob2xkCisjZGVmaW5lIFJGQ09SRV9YUkVHX1JTU0lTVEFUICAgICAgICAgICAgICAgICAgICAweDQwMDg4NjY0ICAvLyBSU1NJIHZhbGlkIHN0YXR1cyByZWdpc3RlcgorI2RlZmluZSBSRkNPUkVfWFJFR19BR0NDVFJMMSAgICAgICAgICAgICAgICAgICAgMHg0MDA4ODZDOCAgLy8gQUdDIHJlZmVyZW5jZSBsZXZlbAorI2RlZmluZSBSRkNPUkVfWFJFR19UWEZJTFRDRkcgICAgICAgICAgICAgICAgICAgMHg0MDA4ODdFOCAgLy8gVFggZmlsdGVyIGNvbmZpZ3VyYXRpb24KKyNkZWZpbmUgUkZDT1JFX1hSRUdfUkZSTkQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwODg2OUMgIC8vIFJhbmRvbSBkYXRhCisjZGVmaW5lIFJGQ09SRV9TRlJfUkZEQVRBICAgICAgICAgICAgICAgICAgICAgICAweDQwMDg4ODI4ICAvLyBUaGUgVFggRklGTyBhbmQgUlggRklGTworI2RlZmluZSBSRkNPUkVfU0ZSX1JGRVJSRiAgICAgICAgICAgICAgICAgICAgICAgMHg0MDA4ODgyQyAgLy8gUkYgZXJyb3IgaW50ZXJydXB0IGZsYWdzCisjZGVmaW5lIFJGQ09SRV9TRlJfUkZJUlFGMCAgICAgICAgICAgICAgICAgICAgICAweDQwMDg4ODM0ICAvLyBSRiBpbnRlcnJ1cHQgZmxhZ3MKKyNkZWZpbmUgUkZDT1JFX1NGUl9SRlNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwODg4MzggIC8vIFJGIENTTUEtQ0Evc3Ryb2JlIHByb2Nlc3NvcgorCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUZJTFQwX0ZSQU1FX0ZJTFRFUl9FTiAgICAweDAwMDAwMDAxICAvLyBFbmFibGVzIGZyYW1lIGZpbHRlcmluZworCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUNUUkwwX0FVVE9BQ0sgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUNUUkwwX0FVVE9DUkMgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUNUUkwwX0lORklOSVRZX1JYICAgICAgICAweDAwMDAwMDA4CisKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlJNQ1RSTDFfUEVORElOR19PUiAgICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBSRkNPUkVfWFJFR19SRlJORF9JUk5EICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX1RYX0FDVElWRSAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX0NDQSAgICAgICAgICAgICAgICAweDAwMDAwMDEwICAvLyBDbGVhciBjaGFubmVsIGFzc2Vzc21lbnQKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlNNU1RBVDFfU0ZEICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlNNU1RBVDFfRklGT1AgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlNNU1RBVDFfRklGTyAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKworI2RlZmluZSBSRkNPUkVfWFJFR19SU1NJU1RBVF9SU1NJX1ZBTElEICAgICAgICAgMHgwMDAwMDAwMSAgLy8gUlNTSSB2YWx1ZSBpcyB2YWxpZC4KKworI2RlZmluZSBSRkNPUkVfU0ZSX1JGRVJSRl9SWE9WRVJGICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLy8gUlggRklGTyBvdmVyZmxvd2VkLgorCisjZGVmaW5lIFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9SWE9OICAgICAgICAgICAgICAweEUzICAgICAgICAvLyBJbnN0cnVjdGlvbiBzZXQgUlggb24KKyNkZWZpbmUgUkZDT1JFX1NGUl9SRlNUX0lOU1RSX1RYT04gICAgICAgICAgICAgIDB4RTkgICAgICAgIC8vIEluc3RydWN0aW9uIHNldCBUWCBvbgorI2RlZmluZSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfUkZPRkYgICAgICAgICAgICAgMHhFRiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gc2V0IFJGIG9mZgorI2RlZmluZSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hSWCAgICAgICAgICAgMHhFRCAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gc2V0IGZsdXNoIHJ4IGJ1ZmZlcgorI2RlZmluZSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hUWCAgICAgICAgICAgMHhFRSAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gc2V0IGZsdXNoIHR4IGJ1ZmZlcgorCisjZGVmaW5lIEFOQV9SRUdTX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMEQ2MDAwICAvLyBBTkFfUkVHUworI2RlZmluZSBBTkFfUkVHU19PX0lWQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLy8gQW5hbG9nIGNvbnRyb2wgcmVnaXN0ZXIKKworI2RlZmluZSBTWVNfQ1RSTF9DTE9DS19DVFJMICAgICAgICAgICAgICAgICAgICAgMHg0MDBEMjAwMCAgLy8gVGhlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIKKyNkZWZpbmUgU1lTX0NUUkxfU1lTRElWXzMyTUhaICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIFN5c19kaXYgZm9yIHN5c2NsayAzMk1IegorI2RlZmluZSBTWVNfQ1RSTF9DTE9DS19DVFJMX0FNUF9ERVQgICAgICAgICAgICAgMHgwMDIwMDAwMAorCisjZGVmaW5lIFNZU19DVFJMX1BXUkRCRyAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMEQyMDc0CisjZGVmaW5lIFNZU19DVFJMX1BXUkRCR19GT1JDRV9XQVJNX1JFU0VUICAgICAgICAweDAwMDAwMDA4CisKKyNkZWZpbmUgU1lTX0NUUkxfUkNHQ1VBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwMjgKKyNkZWZpbmUgU1lTX0NUUkxfU0NHQ1VBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwMkMKKyNkZWZpbmUgU1lTX0NUUkxfRENHQ1VBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwMzAKKyNkZWZpbmUgU1lTX0NUUkxfSV9NQVAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwOTgKKyNkZWZpbmUgU1lTX0NUUkxfUkNHQ1JGQyAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwQTgKKyNkZWZpbmUgU1lTX0NUUkxfU0NHQ1JGQyAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwQUMKKyNkZWZpbmUgU1lTX0NUUkxfRENHQ1JGQyAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwQjAKKyNkZWZpbmUgU1lTX0NUUkxfRU1VT1ZSICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwQjQKKworI2RlZmluZSBTWVNfQ1RSTF9SQ0dDUkZDX1JGQzAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTWVNfQ1RSTF9TQ0dDUkZDX1JGQzAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTWVNfQ1RSTF9EQ0dDUkZDX1JGQzAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIFNZU19DVFJMX0lfTUFQX0FMVE1BUCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKyNkZWZpbmUgU1lTX0NUUkxfUkNHQ1VBUlRfVUFSVDAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1lTX0NUUkxfU0NHQ1VBUlRfVUFSVDAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1lTX0NUUkxfRENHQ1VBUlRfVUFSVDAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworI2RlZmluZSBJT0NfUEEwX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBENDAwMCAgLy8gUGVyaXBoZXJhbCBzZWxlY3QgY29udHJvbAorI2RlZmluZSBJT0NfUEExX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBENDAwNCAgLy8gUGVyaXBoZXJhbCBzZWxlY3QgY29udHJvbAorI2RlZmluZSBJT0NfVUFSVFJYRF9VQVJUMCAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBENDEwMAorCisjZGVmaW5lIElPQ19QQTBfT1ZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMEQ0MDgwCisjZGVmaW5lIElPQ19QQTFfT1ZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMEQ0MDg0CisKKyNkZWZpbmUgSU9DX01VWF9PVVRfU0VMX1VBUlQwX1RYRCAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworI2RlZmluZSBJT0NfT1ZFUlJJREVfT0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOCAgLy8gUEFEIENvbmZpZyBPdmVycmlkZSBPdXRwdXQgRW5hYmxlCisjZGVmaW5lIElPQ19PVkVSUklERV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwICAvLyBQQUQgQ29uZmlnIE92ZXJyaWRlIERpc2FibGVkCisKKyNkZWZpbmUgVUFSVDBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMEMwMDAKKyNkZWZpbmUgR1BJT19BX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDkwMDAgIC8vIEdQSU8KKworI2RlZmluZSBHUElPX09fRElSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX09fQUZTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQyMAorCisjZGVmaW5lIEdQSU9fUElOXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxICAvLyBHUElPIHBpbiAwCisjZGVmaW5lIEdQSU9fUElOXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyICAvLyBHUElPIHBpbiAxCisKKyNkZWZpbmUgVUFSVF9PX0RSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIFVBUlQgZGF0YQorI2RlZmluZSBVQVJUX09fRlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOCAgLy8gVUFSVCBmbGFnCisjZGVmaW5lIFVBUlRfT19JQlJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIFVBUlRfT19GQlJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIFVBUlRfT19MQ1JIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisjZGVmaW5lIFVBUlRfT19DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwICAvLyBVQVJUIGNvbnRyb2wKKyNkZWZpbmUgVUFSVF9PX0lNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzggIC8vIFVBUlQgaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgVUFSVF9PX01JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAgIC8vIFVBUlQgbWFza2VkIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgVUFSVF9PX0lDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQgIC8vIFVBUlQgaW50ZXJydXB0IGNsZWFyCisjZGVmaW5lIFVBUlRfT19DQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkM4ICAvLyBVQVJUIGNsb2NrIGNvbmZpZ3VyYXRpb24KKworI2RlZmluZSBVQVJUX0ZSX1JYRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMCAgLy8gVUFSVCByZWNlaXZlIEZJRk8gZW1wdHkKKyNkZWZpbmUgVUFSVF9GUl9UWEZGICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAgIC8vIFVBUlQgdHJhbnNtaXQgRklGTyBmdWxsCisjZGVmaW5lIFVBUlRfRlJfUlhGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwICAvLyBVQVJUIHJlY2VpdmUgRklGTyBmdWxsCisKKyNkZWZpbmUgVUFSVF9DT05GSUdfV0xFTl84ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAgIC8vIDggYml0IGRhdGEKKyNkZWZpbmUgVUFSVF9DT05GSUdfU1RPUF9PTkUgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIE9uZSBzdG9wIGJpdAorI2RlZmluZSBVQVJUX0NPTkZJR19QQVJfTk9ORSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAgLy8gTm8gcGFyaXR5CisKKyNkZWZpbmUgVUFSVF9DVExfVUFSVEVOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIFVBUlQgZW5hYmxlCisjZGVmaW5lIFVBUlRfQ1RMX1RYRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwICAvLyBVQVJUIHRyYW5zbWl0IGVuYWJsZQorI2RlZmluZSBVQVJUX0NUTF9SWEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMCAgLy8gVUFSVCByZWNlaXZlIGVuYWJsZQorCisjZGVmaW5lIFVBUlRfSU1fUlhJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwICAvLyBVQVJUIHJlY2VpdmUgaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgVUFSVF9JTV9SVElNICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAgIC8vIFVBUlQgcmVjZWl2ZSB0aW1lLW91dCBpbnRlcnJ1cHQKKworI2RlZmluZSBTT0NfQURDX0FEQ0NPTjEgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBENzAwMCAgLy8gQURDIENvbnRyb2wKKyNkZWZpbmUgU09DX0FEQ19STkRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDcwMTQgIC8vIFJORyBsb3cgZGF0YQorI2RlZmluZSBTT0NfQURDX1JOREggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBENzAxOCAgLy8gUk5HIGhpZ2ggZGF0YQorCisjZGVmaW5lIFNPQ19BRENfQURDQ09OMV9SQ1RSTDAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICAvLyBBRENDT04xIFJDVFJMIGJpdCAwCisjZGVmaW5lIFNPQ19BRENfQURDQ09OMV9SQ1RSTDEgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4ICAvLyBBRENDT04xIFJDVFJMIGJpdCAxCisKKyNkZWZpbmUgRkxBU0hfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAgIC8vIEZsYXNoIGJhc2UgYWRkcmVzcworI2RlZmluZSBGTEFTSF9DVFJMX0ZDVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBEMzAwOCAgLy8gRmxhc2ggY29udHJvbAorI2RlZmluZSBGTEFTSF9DVFJMX0RJRUNGRzAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBEMzAxNCAgLy8gRmxhc2ggaW5mb3JtYXRpb24KKworI2VuZGlmCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC5sZCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvY2MyNTM4LmxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZWMxNjgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC5sZApAQCAtMCwwICsxLDk2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIEdDQyBsaW5rZXIgc2NyaXB0IGZvciBDQzI1MzguCisgKi8KKworTUVNT1JZCit7CisgIEZMQVNIIChyeCkgOiAgICAgICAgICAgT1JJR0lOID0gMHgwMDIwMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAweDAwMDdGRkQ0CisgIEZMQVNIX0NDQSAocngpIDogICAgICAgT1JJR0lOID0gMHgwMDI3RkZENCwgICAgICAgICAgICBMRU5HVEggPSAweDJDCisgIFNSQU0gKHJ3eCkgOiAgICAgICAgICAgT1JJR0lOID0gMHgyMDAwMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAzMksKK30KKworRU5UUlkoZmxhc2hfY2NhX2xvY2tfcGFnZSkKK1NFQ1RJT05TCit7CisgICAgLnRleHQgOiBBTElHTig0KQorICAgIHsKKyAgICAgICAgX3RleHQgPSAuOworICAgICAgICAqKC52ZWN0b3JzKQorICAgICAgICAqKC50ZXh0KikKKyAgICAgICAgKigucm9kYXRhKikKKyAgICAgICAgS0VFUCgqKC5pbml0KSkKKyAgICAgICAgS0VFUCgqKC5maW5pKSkKKyAgICAgICAgX2V0ZXh0ID0gLjsKKyAgICB9ID4gRkxBU0g9IDAKKworICAgIC5pbml0X2FycmF5IDoKKyAgICB7CisgICAgICAgIF9pbml0X2FycmF5ID0gLjsKKyAgICAgICAgS0VFUCgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgICAgICBLRUVQKCooLmluaXRfYXJyYXkqKSkKKyAgICAgICAgX2Vpbml0X2FycmF5ID0gLjsKKyAgICB9ID4gRkxBU0gKKworICAgIC5BUk0uZXhpZHggOiBBTElHTig0KQorICAgIHsKKyAgICAgICAgKiguQVJNLmV4aWR4KikKKyAgICB9ID4gRkxBU0gKKworICAgIC5kYXRhIDogQUxJR04oNCkKKyAgICB7CisgICAgICAgIF9kYXRhID0gLjsKKyAgICAgICAgKiguZGF0YSopCisgICAgICAgIF9lZGF0YSA9IC47CisgICAgfSA+IFNSQU0gQVQgPiBGTEFTSAorICAgIF9sZGF0YSA9IExPQURBRERSKC5kYXRhKTsKKworICAgIC5ic3MgOiBBTElHTig0KQorICAgIHsKKyAgICAgICAgX2JzcyA9IC47CisgICAgICAgICooLmJzcyopCisgICAgICAgICooQ09NTU9OKQorICAgICAgICBfZWJzcyA9IC47CisgICAgfSA+IFNSQU0KKworICAgIF9oZWFwID0gLjsKKyAgICBlbmQgPSAuOworCisgICAgLnN0YWNrIDogQUxJR04oNCkKKyAgICB7CisgICAgICAgICooLnN0YWNrKQorICAgIH0gPiBTUkFNCisKKyAgICAuZmxhc2hjY2EgOgorICAgIHsKKyAgICAgICAgS0VFUCgqKC5mbGFzaF9jY2EpKQorICAgIH0gPiBGTEFTSF9DQ0EKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvZGlhZy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9kaWFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmMjM0YgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvZGlhZy5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tY2MyNTM4LmgiCisKKy8qKgorICogRGlhZ25vc3RpY3MgbW9kZSB2YXJpYWJsZXMuCisgKgorICovCitzdGF0aWMgYm9vbCBzRGlhZ01vZGUgPSBmYWxzZTsKKwordm9pZCBvdFBsYXREaWFnUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKQoreworICAgIC8vIEFkZCBtb3JlIHBsYXJmb3JtIHNwZWNpZmljIGRpYWdub3N0aWNzIGZlYXR1cmVzIGhlcmUuCisgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgImRpYWcgZmVhdHVyZSAnJXMnIGlzIG5vdCBzdXBwb3J0ZWRcclxuIiwgYXJndlswXSk7CisgICAgKHZvaWQpIGFyZ2M7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKK30KKwordm9pZCBvdFBsYXREaWFnTW9kZVNldChib29sIGFNb2RlKQoreworICAgIHNEaWFnTW9kZSA9IGFNb2RlOworfQorCitib29sIG90UGxhdERpYWdNb2RlR2V0KCkKK3sKKyAgICByZXR1cm4gc0RpYWdNb2RlOworfQorCit2b2lkIG90UGxhdERpYWdDaGFubmVsU2V0KHVpbnQ4X3QgYUNoYW5uZWwpCit7CisgICAgKHZvaWQpIGFDaGFubmVsOworfQorCit2b2lkIG90UGxhdERpYWdUeFBvd2VyU2V0KGludDhfdCBhVHhQb3dlcikKK3sKKyAgICAodm9pZCkgYVR4UG93ZXI7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ1JhZGlvUmVjZWl2ZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKyAgICAodm9pZCkgYUZyYW1lOworICAgICh2b2lkKSBhRXJyb3I7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ0FsYXJtQ2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmNzk0MQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvZmxhc2guYwpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tY2MyNTM4LmgiCisjaW5jbHVkZSAicm9tLXV0aWxpdHkuaCIKKyNpbmNsdWRlICJ1dGlscy9jb2RlX3V0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvZmxhc2guaCIKKworI2RlZmluZSBGTEFTSF9DVFJMX0ZDVExfQlVTWSAgIDB4MDAwMDAwODAKKworZW51bQoreworICAgIEZMQVNIX1BBR0VfU0laRSA9IDB4ODAwLAorfTsKKworc3RhdGljIG90RXJyb3Igcm9tU3RhdHVzVG9UaHJlYWQoaW50MzJfdCBhU3RhdHVzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgc3dpdGNoIChhU3RhdHVzKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIC0xOgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIC0yOgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0FCT1JUOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoSW5pdCh2b2lkKQoreworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoR2V0U2l6ZSh2b2lkKQoreworICAgIHVpbnQzMl90IHJlZyA9IChIV1JFRyhGTEFTSF9DVFJMX0RJRUNGRzApICYgMHgwMDAwMDA3MCkgPj4gNDsKKworICAgIHJldHVybiByZWcgPyAoMHgyMDAwMCAqIHJlZykgOiAweDEwMDAwOworfQorCitvdEVycm9yIHV0aWxzRmxhc2hFcmFzZVBhZ2UodWludDMyX3QgYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgaW50MzJfdCBzdGF0dXM7CisgICAgdWludDMyX3QgYWRkcmVzczsKKworICAgIG90RVhQRUNUX0FDVElPTihhQWRkcmVzcyA8IHV0aWxzRmxhc2hHZXRTaXplKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGFkZHJlc3MgPSBGTEFTSF9CQVNFICsgYUFkZHJlc3MgLSAoYUFkZHJlc3MgJiAoRkxBU0hfUEFHRV9TSVpFIC0gMSkpOworICAgIHN0YXR1cyA9IFJPTV9QYWdlRXJhc2UoYWRkcmVzcywgRkxBU0hfUEFHRV9TSVpFKTsKKyAgICBlcnJvciA9IHJvbVN0YXR1c1RvVGhyZWFkKHN0YXR1cyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIHV0aWxzRmxhc2hTdGF0dXNXYWl0KHVpbnQzMl90IGFUaW1lb3V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQzMl90IHN0YXJ0ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKyAgICB1aW50MzJfdCBidXN5ID0gMTsKKworICAgIHdoaWxlIChidXN5ICYmICgob3RQbGF0QWxhcm1HZXROb3coKSAtIHN0YXJ0KSA8IGFUaW1lb3V0KSkKKyAgICB7CisgICAgICAgIGJ1c3kgPSBIV1JFRyhGTEFTSF9DVFJMX0ZDVEwpICYgRkxBU0hfQ1RSTF9GQ1RMX0JVU1k7CisgICAgfQorCisgICAgb3RFWFBFQ1RfQUNUSU9OKCFidXN5LCBlcnJvciA9IE9UX0VSUk9SX0JVU1kpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaFdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgaW50MzJfdCBzdGF0dXM7CisgICAgdWludDMyX3QgYnVzeSA9IDE7CisgICAgdWludDMyX3QgKmRhdGE7CisgICAgdWludDMyX3Qgc2l6ZSA9IDA7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oKChhQWRkcmVzcyArIGFTaXplKSA8IHV0aWxzRmxhc2hHZXRTaXplKCkpICYmCisgICAgICAgICAgICAgICAgICAgICghKGFBZGRyZXNzICYgMykpICYmICghKGFTaXplICYgMykpLCBhU2l6ZSA9IDApOworCisgICAgZGF0YSA9ICh1aW50MzJfdCAqKShhRGF0YSk7CisKKyAgICB3aGlsZSAoc2l6ZSA8IGFTaXplKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gUk9NX1Byb2dyYW1GbGFzaChkYXRhLCBhQWRkcmVzcyArIEZMQVNIX0JBU0UsIDQpOworCisgICAgICAgIHdoaWxlIChidXN5KQorICAgICAgICB7CisgICAgICAgICAgICBidXN5ID0gSFdSRUcoRkxBU0hfQ1RSTF9GQ1RMKSAmIEZMQVNIX0NUUkxfRkNUTF9CVVNZOworICAgICAgICB9CisKKyAgICAgICAgb3RFWFBFQ1Qocm9tU3RhdHVzVG9UaHJlYWQoc3RhdHVzKSA9PSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgc2l6ZSArPSA0OworICAgICAgICBkYXRhKys7CisgICAgICAgIGFBZGRyZXNzICs9IDQ7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBzaXplOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoUmVhZCh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHVpbnQzMl90IHNpemUgPSAwOworCisgICAgb3RFWFBFQ1QoKGFBZGRyZXNzICsgYVNpemUpIDwgdXRpbHNGbGFzaEdldFNpemUoKSk7CisKKyAgICB3aGlsZSAoc2l6ZSA8IGFTaXplKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgcmVnID0gSFdSRUcoYUFkZHJlc3MgKyBGTEFTSF9CQVNFKTsKKyAgICAgICAgdWludDhfdCAqYnl0ZSA9ICh1aW50OF90ICopJnJlZzsKKyAgICAgICAgdWludDhfdCBtYXhJbmRleCA9IDQ7CisKKyAgICAgICAgaWYgKHNpemUgPT0gKGFTaXplIC0gYVNpemUgJSA0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbWF4SW5kZXggPSBhU2l6ZSAlIDQ7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQ4X3QgaW5kZXggPSAwOyBpbmRleCA8IG1heEluZGV4OyBpbmRleCsrLCBieXRlKyssIGFEYXRhKyspCisgICAgICAgIHsKKyAgICAgICAgICAgICphRGF0YSA9ICpieXRlOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZSArPSBtYXhJbmRleDsKKyAgICAgICAgYUFkZHJlc3MgKz0gbWF4SW5kZXg7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBzaXplOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9taXNjLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjdjYzM4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9taXNjLmMKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaD4KKworI2luY2x1ZGUgInBsYXRmb3JtLWNjMjUzOC5oIgorCit2b2lkIG90UGxhdFJlc2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgSFdSRUcoU1lTX0NUUkxfUFdSREJHKSA9IFNZU19DVFJMX1BXUkRCR19GT1JDRV9XQVJNX1JFU0VUOworfQorCitvdFBsYXRSZXNldFJlYXNvbiBvdFBsYXRHZXRSZXNldFJlYXNvbihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIC8vIFRPRE86IFdyaXRlIG1lIQorICAgIHJldHVybiBPVF9QTEFUX1JFU0VUX1JFQVNPTl9QT1dFUl9PTjsKK30KKwordm9pZCBvdFBsYXRXYWtlSG9zdCh2b2lkKQoreworICAgIC8vIFRPRE86IGltcGxlbWVudCBhbiBvcGVyYXRpb24gdG8gd2FrZSB0aGUgaG9zdCBmcm9tIHNsZWVwIHN0YXRlLgorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9vcGVudGhyZWFkLWNvcmUtY2MyNTM4LWNvbmZpZy5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9vcGVudGhyZWFkLWNvcmUtY2MyNTM4LWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzA3NjgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L29wZW50aHJlYWQtY29yZS1jYzI1MzgtY29uZmlnLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgY2MyNTM4IGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGNvbnN0YW50cyBmb3IgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9DQzI1MzhfQ09ORklHX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ09SRV9DQzI1MzhfQ09ORklHX0hfCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUCisgKgorICogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIGRlZmF1bHQgbG9nIG91dHB1dC4KKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVCAgICAgICAgICAgIDEKKworIC8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUCisgICoKKyAgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc29mdHdhcmUgQUNLIHRpbWVvdXQgbG9naWMuCisgICoKKyAgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUICAgICAgICAgIDEKKworIC8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKyAgKgorICAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSByZXRyYW5zbWlzc2lvbiBsb2dpYy4KKyAgKgorICAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVCAgICAgICAgICAgMQorCisgLyoqCisgICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4KKyAgKgorICAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSBlbmVyZ3kgc2Nhbm5pbmcgbG9naWMuCisgICoKKyAgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOICAgICAgICAgIDEKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPUkVfQ0MyNTM4X0NPTkZJR19IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9wbGF0Zm9ybS1jYzI1MzguaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvcGxhdGZvcm0tY2MyNTM4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzYWQxYQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvcGxhdGZvcm0tY2MyNTM4LmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVycy4KKyAqCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9DQzI1MzhfSF8KKyNkZWZpbmUgUExBVEZPUk1fQ0MyNTM4X0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNjMjUzOC1yZWcuaCIKKworLy8gR2xvYmFsIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlCitleHRlcm4gb3RJbnN0YW5jZSAqc0luc3RhbmNlOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGFsYXJtIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBjYzI1MzhBbGFybUluaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbGFybSBkcml2ZXIgcHJvY2Vzc2luZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgY2MyNTM4QWxhcm1Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcmFkaW8gc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGNjMjUzOFJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHJhZGlvIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBjYzI1MzhSYWRpb1Byb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSByYW5kb20gbnVtYmVyIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBjYzI1MzhSYW5kb21Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgVUFSVCBkcml2ZXIgcHJvY2Vzc2luZy4KKyAqCisgKi8KK3ZvaWQgY2MyNTM4VWFydFByb2Nlc3Modm9pZCk7CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fQ0MyNTM4X0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3BsYXRmb3JtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmOTdjYQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDU4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXplcnMuCisgKi8KKworI2luY2x1ZGUgInBsYXRmb3JtLWNjMjUzOC5oIgorCitvdEluc3RhbmNlICpzSW5zdGFuY2U7CisKK3ZvaWQgUGxhdGZvcm1Jbml0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgY2MyNTM4QWxhcm1Jbml0KCk7CisgICAgY2MyNTM4UmFuZG9tSW5pdCgpOworICAgIGNjMjUzOFJhZGlvSW5pdCgpOworCisgICAgKHZvaWQpYXJnYzsKKyAgICAodm9pZClhcmd2OworfQorCit2b2lkIFBsYXRmb3JtUHJvY2Vzc0RyaXZlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHNJbnN0YW5jZSA9IGFJbnN0YW5jZTsKKworICAgIC8vIHNob3VsZCBzbGVlcCBhbmQgd2FpdCBmb3IgaW50ZXJydXB0cyBoZXJlCisKKyAgICBjYzI1MzhVYXJ0UHJvY2VzcygpOworICAgIGNjMjUzOFJhZGlvUHJvY2VzcyhhSW5zdGFuY2UpOworICAgIGNjMjUzOEFsYXJtUHJvY2VzcyhhSW5zdGFuY2UpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9yYWRpby5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9yYWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDNmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3JhZGlvLmMKQEAgLTAsMCArMSw4NDUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHJhZGlvIGNvbW11bmljYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisKKyNpbmNsdWRlICJwbGF0Zm9ybS1jYzI1MzguaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCitlbnVtCit7CisgICAgSUVFRTgwMjE1NF9NSU5fTEVOR1RIID0gNSwKKyAgICBJRUVFODAyMTU0X01BWF9MRU5HVEggPSAxMjcsCisgICAgSUVFRTgwMjE1NF9BQ0tfTEVOR1RIID0gNSwKKyAgICBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfTUFTSyA9IDB4NywKKyAgICBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfQUNLID0gMHgyLAorICAgIElFRUU4MDIxNTRfRlJBTUVfUEVORElORyA9IDEgPDwgNCwKKyAgICBJRUVFODAyMTU0X0FDS19SRVFVRVNUID0gMSA8PCA1LAorICAgIElFRUU4MDIxNTRfRFNOX09GRlNFVCA9IDIsCit9OworCitlbnVtCit7CisgICAgQ0MyNTM4X1JTU0lfT0ZGU0VUID0gNzMsCisgICAgQ0MyNTM4X0NSQ19CSVRfTUFTSyA9IDB4ODAsCisgICAgQ0MyNTM4X0xRSV9CSVRfTUFTSyA9IDB4N2YsCit9OworCitlbnVtCit7CisgICAgQ0MyNTM4X1JFQ0VJVkVfU0VOU0lUSVZJVFkgPSAtMTAwLCAvLyBkQm0KK307CisKK3R5cGVkZWYgc3RydWN0IFR4UG93ZXJUYWJsZQoreworICAgIGludDhfdCAgbVR4UG93ZXJWYWw7CisgICAgdWludDhfdCBtVHhQb3dlclJlZzsKK30gVHhQb3dlclRhYmxlOworCisvLyBUaGUgdHJhbnNtaXQgcG93ZXIgdGFibGUsIHRoZSB2YWx1ZXMgYXJlIGZyb20gU21hcnRSRiBTdHVkaW8gMi40LjAKK3N0YXRpYyBjb25zdCBUeFBvd2VyVGFibGUgc1R4UG93ZXJUYWJsZVtdID0KK3sKKyAgICB7ICA3LCAweEZGIH0sCisgICAgeyAgNSwgMHhFRCB9LAorICAgIHsgIDMsIDB4RDUgfSwKKyAgICB7ICAxLCAweEM1IH0sCisgICAgeyAgMCwgMHhCNiB9LAorICAgIHsgLTEsIDB4QjAgfSwKKyAgICB7IC0zLCAweEExIH0sCisgICAgeyAtNSwgMHg5MSB9LAorICAgIHsgLTcsIDB4ODggfSwKKyAgICB7IC05LCAweDcyIH0sCisgICAgeyAtMTEsIDB4NjIgfSwKKyAgICB7IC0xMywgMHg1OCB9LAorICAgIHsgLTE1LCAweDQyIH0sCisgICAgeyAtMjQsIDB4MDAgfSwKK307CisKK3N0YXRpYyBvdFJhZGlvRnJhbWUgc1RyYW5zbWl0RnJhbWU7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNSZWNlaXZlRnJhbWU7CitzdGF0aWMgb3RFcnJvciBzVHJhbnNtaXRFcnJvcjsKK3N0YXRpYyBvdEVycm9yIHNSZWNlaXZlRXJyb3I7CisKK3N0YXRpYyB1aW50OF90IHNUcmFuc21pdFBzZHVbSUVFRTgwMjE1NF9NQVhfTEVOR1RIXTsKK3N0YXRpYyB1aW50OF90IHNSZWNlaXZlUHNkdVtJRUVFODAyMTU0X01BWF9MRU5HVEhdOworc3RhdGljIHVpbnQ4X3Qgc0NoYW5uZWwgPSAwOworc3RhdGljIGludDhfdCBzVHhQb3dlciA9IDA7CisKK3N0YXRpYyBvdFJhZGlvU3RhdGUgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CitzdGF0aWMgYm9vbCBzSXNSZWNlaXZlckVuYWJsZWQgPSBmYWxzZTsKKwordm9pZCBlbmFibGVSZWNlaXZlcih2b2lkKQoreworICAgIGlmICghc0lzUmVjZWl2ZXJFbmFibGVkKQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJFbmFibGluZyByZWNlaXZlciIsIE5VTEwpOworCisgICAgICAgIC8vIGZsdXNoIHJ4ZmlmbworICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX0ZMVVNIUlg7CisgICAgICAgIEhXUkVHKFJGQ09SRV9TRlJfUkZTVCkgPSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hSWDsKKworICAgICAgICAvLyBlbmFibGUgcmVjZWl2ZXIKKyAgICAgICAgSFdSRUcoUkZDT1JFX1NGUl9SRlNUKSA9IFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9SWE9OOworICAgICAgICBzSXNSZWNlaXZlckVuYWJsZWQgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBkaXNhYmxlUmVjZWl2ZXIodm9pZCkKK3sKKyAgICBpZiAoc0lzUmVjZWl2ZXJFbmFibGVkKQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJEaXNhYmxpbmcgcmVjZWl2ZXIiLCBOVUxMKTsKKworICAgICAgICB3aGlsZSAoSFdSRUcoUkZDT1JFX1hSRUdfRlNNU1RBVDEpICYgUkZDT1JFX1hSRUdfRlNNU1RBVDFfVFhfQUNUSVZFKTsKKworICAgICAgICAvLyBmbHVzaCByeGZpZm8KKyAgICAgICAgSFdSRUcoUkZDT1JFX1NGUl9SRlNUKSA9IFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9GTFVTSFJYOworICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX0ZMVVNIUlg7CisKKyAgICAgICAgaWYgKEhXUkVHKFJGQ09SRV9YUkVHX1JYRU5BQkxFKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkaXNhYmxlIHJlY2VpdmVyCisgICAgICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX1JGT0ZGOworICAgICAgICB9CisKKyAgICAgICAgc0lzUmVjZWl2ZXJFbmFibGVkID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIHNldENoYW5uZWwodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBpZiAoc0NoYW5uZWwgIT0gYUNoYW5uZWwpCisgICAgeworICAgICAgICBib29sIGVuYWJsZWQgPSBmYWxzZTsKKworICAgICAgICBpZiAoc0lzUmVjZWl2ZXJFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBkaXNhYmxlUmVjZWl2ZXIoKTsKKyAgICAgICAgICAgIGVuYWJsZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJDaGFubmVsPSVkIiwgYUNoYW5uZWwpOworCisgICAgICAgIEhXUkVHKFJGQ09SRV9YUkVHX0ZSRVFDVFJMKSA9IDExICsgKGFDaGFubmVsIC0gMTEpICogNTsKKyAgICAgICAgc0NoYW5uZWwgPSBhQ2hhbm5lbDsKKworICAgICAgICBpZiAoZW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgZW5hYmxlUmVjZWl2ZXIoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBzZXRUeFBvd2VyKGludDhfdCBhVHhQb3dlcikKK3sKKyAgICB1aW50OF90IGkgPSAwOworCisgICAgaWYgKHNUeFBvd2VyICE9IGFUeFBvd2VyKQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJUeFBvd2VyPSVkIiwgYVR4UG93ZXIpOworCisgICAgICAgIGZvciAoaSA9IHNpemVvZihzVHhQb3dlclRhYmxlKSAvIHNpemVvZihUeFBvd2VyVGFibGUpIC0gMTsgaSA+IDA7IGktLSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFUeFBvd2VyIDwgc1R4UG93ZXJUYWJsZVtpXS5tVHhQb3dlclZhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEhXUkVHKFJGQ09SRV9YUkVHX1RYUE9XRVIpID0gc1R4UG93ZXJUYWJsZVtpXS5tVHhQb3dlclJlZzsKKyAgICAgICAgc1R4UG93ZXIgPSBhVHhQb3dlcjsKKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9HZXRJZWVlRXVpNjQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphSWVlZUV1aTY0KQoreworICAgIHVpbnQ4X3QgKmV1aTY0ID0gKHVpbnQ4X3QgKilJRUVFX0VVSTY0OworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IE9UX0VYVF9BRERSRVNTX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIGFJZWVlRXVpNjRbaV0gPSBldWk2NFs3IC0gaV07CisgICAgfQorfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhUGFuaWQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJQQU5JRD0lWCIsIGFQYW5pZCk7CisKKyAgICBIV1JFRyhSRkNPUkVfRkZTTV9QQU5fSUQwKSA9IGFQYW5pZCAmIDB4RkY7CisgICAgSFdSRUcoUkZDT1JFX0ZGU01fUEFOX0lEMSkgPSBhUGFuaWQgPj4gODsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiRXh0QWRkcj0lWCVYJVglWCVYJVglWCVYIiwKKyAgICAgICAgICAgICAgICAgIGFBZGRyZXNzWzddLCBhQWRkcmVzc1s2XSwgYUFkZHJlc3NbNV0sIGFBZGRyZXNzWzRdLCBhQWRkcmVzc1szXSwKKyAgICAgICAgICAgICAgICAgIGFBZGRyZXNzWzJdLCBhQWRkcmVzc1sxXSwgYUFkZHJlc3NbMF0pOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspCisgICAgeworICAgICAgICAoKHZvbGF0aWxlIHVpbnQzMl90ICopUkZDT1JFX0ZGU01fRVhUX0FERFIwKVtpXSA9IGFBZGRyZXNzW2ldOworICAgIH0KK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiU2hvcnRBZGRyPSVYIiwgYUFkZHJlc3MpOworCisgICAgSFdSRUcoUkZDT1JFX0ZGU01fU0hPUlRfQUREUjApID0gYUFkZHJlc3MgJiAweEZGOworICAgIEhXUkVHKFJGQ09SRV9GRlNNX1NIT1JUX0FERFIxKSA9IGFBZGRyZXNzID4+IDg7Cit9CisKK3ZvaWQgY2MyNTM4UmFkaW9Jbml0KHZvaWQpCit7CisgICAgc1RyYW5zbWl0RnJhbWUubUxlbmd0aCA9IDA7CisgICAgc1RyYW5zbWl0RnJhbWUubVBzZHUgPSBzVHJhbnNtaXRQc2R1OworICAgIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA9IDA7CisgICAgc1JlY2VpdmVGcmFtZS5tUHNkdSA9IHNSZWNlaXZlUHNkdTsKKworICAgIC8vIGVuYWJsZSBjbG9jaworICAgIEhXUkVHKFNZU19DVFJMX1JDR0NSRkMpID0gU1lTX0NUUkxfUkNHQ1JGQ19SRkMwOworICAgIEhXUkVHKFNZU19DVFJMX1NDR0NSRkMpID0gU1lTX0NUUkxfU0NHQ1JGQ19SRkMwOworICAgIEhXUkVHKFNZU19DVFJMX0RDR0NSRkMpID0gU1lTX0NUUkxfRENHQ1JGQ19SRkMwOworCisgICAgLy8gVGFibGUgMjMtNy4KKyAgICBIV1JFRyhSRkNPUkVfWFJFR19BR0NDVFJMMSkgPSAweDE1OworICAgIEhXUkVHKFJGQ09SRV9YUkVHX1RYRklMVENGRykgPSAweDA5OworICAgIEhXUkVHKEFOQV9SRUdTX0JBU0UgKyBBTkFfUkVHU19PX0lWQ1RSTCkgPSAweDBiOworCisgICAgSFdSRUcoUkZDT1JFX1hSRUdfQ0NBQ1RSTDApID0gMHhmODsKKyAgICBIV1JFRyhSRkNPUkVfWFJFR19GSUZPUENUUkwpID0gSUVFRTgwMjE1NF9NQVhfTEVOR1RIOworCisgICAgSFdSRUcoUkZDT1JFX1hSRUdfRlJNQ1RSTDApID0gUkZDT1JFX1hSRUdfRlJNQ1RSTDBfQVVUT0NSQyB8IFJGQ09SRV9YUkVHX0ZSTUNUUkwwX0FVVE9BQ0s7CisKKyAgICAvLyBkZWZhdWx0OiBTUkNNQVRDSC5TUkNfTUFUQ0hfRU4oMSksIFNSQ01BVENILkFVVE9QRU5EKDEpLAorICAgIC8vIFNSQ01BVENILlBFTkRfREFUQVJFUV9PTkxZKDEpLCBSRkNPUkVfWFJFR19GUk1DVFJMMV9QRU5ESU5HX09SKDApCisKKyAgICBIV1JFRyhSRkNPUkVfWFJFR19UWFBPV0VSKSA9IHNUeFBvd2VyVGFibGVbMF0ubVR4UG93ZXJSZWc7CisgICAgc1R4UG93ZXIgPSBzVHhQb3dlclRhYmxlWzBdLm1UeFBvd2VyVmFsOworCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJJbml0aWFsaXplZCIsIE5VTEwpOworfQorCitib29sIG90UGxhdFJhZGlvSXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpID8gdHJ1ZSA6IGZhbHNlOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5hYmxlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBpZiAoIW90UGxhdFJhZGlvSXNFbmFibGVkKGFJbnN0YW5jZSkpCisgICAgeworICAgICAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlN0YXRlPU9UX1JBRElPX1NUQVRFX1NMRUVQIiwgTlVMTCk7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKG90UGxhdFJhZGlvSXNFbmFibGVkKGFJbnN0YW5jZSkpCisgICAgeworICAgICAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlN0YXRlPU9UX1JBRElPX1NUQVRFX0RJU0FCTEVEIiwgTlVMTCk7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvU2xlZXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfU0xFRVAgfHwgc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUpCisgICAgeworICAgICAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlN0YXRlPU9UX1JBRElPX1NUQVRFX1NMRUVQIiwgTlVMTCk7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfU0xFRVA7CisgICAgICAgIGRpc2FibGVSZWNlaXZlcigpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1JlY2VpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFDaGFubmVsKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpCisgICAgeworICAgICAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlN0YXRlPU9UX1JBRElPX1NUQVRFX1JFQ0VJVkUiLCBOVUxMKTsKKworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgIHNldENoYW5uZWwoYUNoYW5uZWwpOworICAgICAgICBzUmVjZWl2ZUZyYW1lLm1DaGFubmVsID0gYUNoYW5uZWw7CisgICAgICAgIGVuYWJsZVJlY2VpdmVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvVHJhbnNtaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUpCisgICAgeworICAgICAgICBpbnQgaTsKKworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUOworICAgICAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAgICAgd2hpbGUgKEhXUkVHKFJGQ09SRV9YUkVHX0ZTTVNUQVQxKSAmIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX1RYX0FDVElWRSk7CisKKyAgICAgICAgLy8gZmx1c2ggdHhmaWZvCisgICAgICAgIEhXUkVHKFJGQ09SRV9TRlJfUkZTVCkgPSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hUWDsKKyAgICAgICAgSFdSRUcoUkZDT1JFX1NGUl9SRlNUKSA9IFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9GTFVTSFRYOworCisgICAgICAgIC8vIGZyYW1lIGxlbmd0aAorICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGREFUQSkgPSBhRnJhbWUtPm1MZW5ndGg7CisKKyAgICAgICAgLy8gZnJhbWUgZGF0YQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYUZyYW1lLT5tTGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEhXUkVHKFJGQ09SRV9TRlJfUkZEQVRBKSA9IGFGcmFtZS0+bVBzZHVbaV07CisgICAgICAgIH0KKworICAgICAgICBzZXRDaGFubmVsKGFGcmFtZS0+bUNoYW5uZWwpOworICAgICAgICBzZXRUeFBvd2VyKGFGcmFtZS0+bVBvd2VyKTsKKworICAgICAgICB3aGlsZSAoKEhXUkVHKFJGQ09SRV9YUkVHX0ZTTVNUQVQxKSAmIDEpID09IDApOworCisgICAgICAgIC8vIHdhaXQgZm9yIHZhbGlkIHJzc2kKKyAgICAgICAgd2hpbGUgKChIV1JFRyhSRkNPUkVfWFJFR19SU1NJU1RBVCkgJiBSRkNPUkVfWFJFR19SU1NJU1RBVF9SU1NJX1ZBTElEKSA9PSAwKTsKKworICAgICAgICBvdEVYUEVDVF9BQ1RJT04oKChIV1JFRyhSRkNPUkVfWFJFR19GU01TVEFUMSkgJiBSRkNPUkVfWFJFR19GU01TVEFUMV9DQ0EpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgISgoSFdSRUcoUkZDT1JFX1hSRUdfRlNNU1RBVDEpICYgUkZDT1JFX1hSRUdfRlNNU1RBVDFfU0ZEKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFKTsKKworICAgICAgICAvLyBiZWdpbiB0cmFuc21pdAorICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX1RYT047CisKKyAgICAgICAgd2hpbGUgKEhXUkVHKFJGQ09SRV9YUkVHX0ZTTVNUQVQxKSAmIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX1RYX0FDVElWRSk7CisKKyAgICAgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJUcmFuc21pdHRlZCAlZCBieXRlcyIsIGFGcmFtZS0+bUxlbmd0aCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RSYWRpb0ZyYW1lICpvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuICZzVHJhbnNtaXRGcmFtZTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAwOworfQorCitvdFJhZGlvQ2FwcyBvdFBsYXRSYWRpb0dldENhcHMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfUkFESU9fQ0FQU19OT05FOworfQorCitib29sIG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gKEhXUkVHKFJGQ09SRV9YUkVHX0ZSTUZJTFQwKSAmIFJGQ09SRV9YUkVHX0ZSTUZJTFQwX0ZSQU1FX0ZJTFRFUl9FTikgPT0gMDsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiUHJvbWlzY3VvdXNNb2RlPSVkIiwgYUVuYWJsZSA/IDEgOiAwKTsKKworICAgIGlmIChhRW5hYmxlKQorICAgIHsKKyAgICAgICAgSFdSRUcoUkZDT1JFX1hSRUdfRlJNRklMVDApICY9IH5SRkNPUkVfWFJFR19GUk1GSUxUMF9GUkFNRV9GSUxURVJfRU47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEhXUkVHKFJGQ09SRV9YUkVHX0ZSTUZJTFQwKSB8PSBSRkNPUkVfWFJFR19GUk1GSUxUMF9GUkFNRV9GSUxURVJfRU47CisgICAgfQorfQorCit2b2lkIHJlYWRGcmFtZSh2b2lkKQoreworICAgIHVpbnQ4X3QgbGVuZ3RoOworICAgIHVpbnQ4X3QgY3JjQ29ycjsKKyAgICBpbnQgaTsKKworICAgIG90RVhQRUNUKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFIHx8IHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9UUkFOU01JVCk7CisgICAgb3RFWFBFQ1QoKEhXUkVHKFJGQ09SRV9YUkVHX0ZTTVNUQVQxKSAmIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX0ZJRk9QKSAhPSAwKTsKKworICAgIC8vIHJlYWQgbGVuZ3RoCisgICAgbGVuZ3RoID0gSFdSRUcoUkZDT1JFX1NGUl9SRkRBVEEpOworICAgIG90RVhQRUNUKElFRUU4MDIxNTRfTUlOX0xFTkdUSCA8PSBsZW5ndGggJiYgbGVuZ3RoIDw9IElFRUU4MDIxNTRfTUFYX0xFTkdUSCk7CisKKyAgICAvLyByZWFkIHBzZHUKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKQorICAgIHsKKyAgICAgICAgc1JlY2VpdmVGcmFtZS5tUHNkdVtpXSA9IEhXUkVHKFJGQ09SRV9TRlJfUkZEQVRBKTsKKyAgICB9CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qb3dlciA9IChpbnQ4X3QpSFdSRUcoUkZDT1JFX1NGUl9SRkRBVEEpIC0gQ0MyNTM4X1JTU0lfT0ZGU0VUOworICAgIGNyY0NvcnIgPSBIV1JFRyhSRkNPUkVfU0ZSX1JGREFUQSk7CisKKyAgICBpZiAoY3JjQ29yciAmIENDMjUzOF9DUkNfQklUX01BU0spCisgICAgeworICAgICAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPSBsZW5ndGg7CisgICAgICAgIHNSZWNlaXZlRnJhbWUubUxxaSA9IGNyY0NvcnIgJiBDQzI1MzhfTFFJX0JJVF9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyByZXNldHMgcnhmaWZvCisgICAgICAgIEhXUkVHKFJGQ09SRV9TRlJfUkZTVCkgPSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hSWDsKKyAgICAgICAgSFdSRUcoUkZDT1JFX1NGUl9SRlNUKSA9IFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9GTFVTSFJYOworCisgICAgICAgIG90TG9nRGViZ1BsYXQoc0luc3RhbmNlLCAiRHJvcHBpbmcgJWQgcmVjZWl2ZWQgYnl0ZXMgKEludmFsaWQgQ1JDKSIsIGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gY2hlY2sgZm9yIHJ4ZmlmbyBvdmVyZmxvdworICAgIGlmICgoSFdSRUcoUkZDT1JFX1hSRUdfRlNNU1RBVDEpICYgUkZDT1JFX1hSRUdfRlNNU1RBVDFfRklGT1ApICE9IDAgJiYKKyAgICAgICAgKEhXUkVHKFJGQ09SRV9YUkVHX0ZTTVNUQVQxKSAmIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX0ZJRk8pID09IDApCisgICAgeworICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX0ZMVVNIUlg7CisgICAgICAgIEhXUkVHKFJGQ09SRV9TRlJfUkZTVCkgPSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hSWDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIGNjMjUzOFJhZGlvUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmVhZEZyYW1lKCk7CisKKyAgICBpZiAoKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFICYmIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA+IDApIHx8CisgICAgICAgIChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQgJiYgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID4gSUVFRTgwMjE1NF9BQ0tfTEVOR1RIKSkKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXREaWFnUmFkaW9SZWNlaXZlRG9uZShhSW5zdGFuY2UsICZzUmVjZWl2ZUZyYW1lLCBzUmVjZWl2ZUVycm9yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc2lnbmFsIE1BQyBsYXllciBmb3IgZWFjaCByZWNlaXZlZCBmcmFtZSBpZiBwcm9taXNjb3VzIGlzIGVuYWJsZWQKKyAgICAgICAgICAgIC8vIG90aGVyd2lzZSBvbmx5IHNpZ25hbCBNQUMgbGF5ZXIgZm9yIG5vbi1BQ0sgZnJhbWUKKyAgICAgICAgICAgIGlmICgoKEhXUkVHKFJGQ09SRV9YUkVHX0ZSTUZJTFQwKSAmIFJGQ09SRV9YUkVHX0ZSTUZJTFQwX0ZSQU1FX0ZJTFRFUl9FTikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAoc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID4gSUVFRTgwMjE1NF9BQ0tfTEVOR1RIKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlJlY2VpdmVkICVkIGJ5dGVzIiwgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlRnJhbWUsIHNSZWNlaXZlRXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkKKyAgICB7CisgICAgICAgIGlmIChzVHJhbnNtaXRFcnJvciAhPSBPVF9FUlJPUl9OT05FIHx8IChzVHJhbnNtaXRGcmFtZS5tUHNkdVswXSAmIElFRUU4MDIxNTRfQUNLX1JFUVVFU1QpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzVHJhbnNtaXRFcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90TG9nRGViZ1BsYXQoc0luc3RhbmNlLCAiVHJhbnNtaXQgZmFpbGVkIEVycm9yQ29kZT0lZCIsIHNUcmFuc21pdEVycm9yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworICAgICAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RQbGF0RGlhZ1JhZGlvVHJhbnNtaXREb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCBzVHJhbnNtaXRFcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgTlVMTCwgc1RyYW5zbWl0RXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNSZWNlaXZlRnJhbWUubUxlbmd0aCA9PSBJRUVFODAyMTU0X0FDS19MRU5HVEggJiYKKyAgICAgICAgICAgICAgICAgKHNSZWNlaXZlRnJhbWUubVBzZHVbMF0gJiBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfTUFTSykgPT0gSUVFRTgwMjE1NF9GUkFNRV9UWVBFX0FDSyAmJgorICAgICAgICAgICAgICAgICAoc1JlY2VpdmVGcmFtZS5tUHNkdVtJRUVFODAyMTU0X0RTTl9PRkZTRVRdID09IHNUcmFuc21pdEZyYW1lLm1Qc2R1W0lFRUU4MDIxNTRfRFNOX09GRlNFVF0pKQorICAgICAgICB7CisgICAgICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworCisgICAgICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgJnNSZWNlaXZlRnJhbWUsIHNUcmFuc21pdEVycm9yKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA9IDA7Cit9CisKK3ZvaWQgUkZDb3JlUnhUeEludEhhbmRsZXIodm9pZCkKK3sKKyAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGSVJRRjApID0gMDsKK30KKwordm9pZCBSRkNvcmVFcnJJbnRIYW5kbGVyKHZvaWQpCit7CisgICAgSFdSRUcoUkZDT1JFX1NGUl9SRkVSUkYpID0gMDsKK30KKwordWludDMyX3QgZ2V0U3JjTWF0Y2hFbnRyaWVzRW5hYmxlU3RhdHVzKGJvb2wgYVNob3J0KQoreworICAgIHVpbnQzMl90IHN0YXR1cyA9IDA7CisgICAgdWludDMyX3QgKmFkZHIgPSBhU2hvcnQgPyAodWludDMyX3QgKikgUkZDT1JFX1hSRUdfU1JDU0hPUlRFTjAgOiAodWludDMyX3QgKikgUkZDT1JFX1hSRUdfU1JDRVhURU4wOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfRU5BQkxFX1NUQVRVU19TSVpFOyBpKyspCisgICAgeworICAgICAgICBzdGF0dXMgfD0gSFdSRUcoYWRkcisrKSA8PCAoaSAqIDgpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK2ludDhfdCBmaW5kU3JjTWF0Y2hTaG9ydEVudHJ5KGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisgICAgdWludDE2X3Qgc2hvcnRBZGRyOworICAgIHVpbnQzMl90IGJpdE1hc2s7CisgICAgdWludDMyX3QgKmFkZHIgPSBOVUxMOworICAgIHVpbnQzMl90IHN0YXR1cyA9IGdldFNyY01hdGNoRW50cmllc0VuYWJsZVN0YXR1cyh0cnVlKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IFJGQ09SRV9YUkVHX1NSQ01BVENIX1NIT1JUX0VOVFJJRVM7IGkrKykKKyAgICB7CisgICAgICAgIGJpdE1hc2sgPSAweDAwMDAwMDAxIDw8IGk7CisKKyAgICAgICAgaWYgKChzdGF0dXMgJiBiaXRNYXNrKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGFkZHIgPSAodWludDMyX3QgKilSRkNPUkVfRkZTTV9TUkNBRERSRVNTX1RBQkxFICsgKGkgKiBSRkNPUkVfWFJFR19TUkNNQVRDSF9TSE9SVF9FTlRSWV9PRkZTRVQpOworCisgICAgICAgIHNob3J0QWRkciA9IEhXUkVHKGFkZHIgKyAyKTsKKyAgICAgICAgc2hvcnRBZGRyIHw9IEhXUkVHKGFkZHIgKyAzKSA8PCA4OworCisgICAgICAgIGlmICgoc2hvcnRBZGRyID09IGFTaG9ydEFkZHJlc3MpKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRyeSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlbnRyeTsKK30KKworaW50OF90IGZpbmRTcmNNYXRjaEV4dEVudHJ5KGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgIGludDhfdCBlbnRyeSA9IC0xOworICAgIHVpbnQzMl90IGJpdE1hc2s7CisgICAgdWludDMyX3QgKmFkZHIgPSBOVUxMOworICAgIHVpbnQzMl90IHN0YXR1cyA9IGdldFNyY01hdGNoRW50cmllc0VuYWJsZVN0YXR1cyhmYWxzZSk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgdWludDhfdCBqID0gMDsKKyAgICAgICAgYml0TWFzayA9IDB4MDAwMDAwMDEgPDwgMiAqIGk7CisKKyAgICAgICAgaWYgKChzdGF0dXMgJiBiaXRNYXNrKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGFkZHIgPSAodWludDMyX3QgKilSRkNPUkVfRkZTTV9TUkNBRERSRVNTX1RBQkxFICsgKGkgKiBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUllfT0ZGU0VUKTsKKworICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKG90RXh0QWRkcmVzcyk7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEhXUkVHKGFkZHIgKyBqKSAhPSBhRXh0QWRkcmVzc1tqXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChqID09IHNpemVvZihvdEV4dEFkZHJlc3MpKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRyeSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlbnRyeTsKK30KKwordm9pZCBzZXRTcmNNYXRjaEVudHJ5RW5hYmxlU3RhdHVzKGJvb2wgYVNob3J0LCB1aW50OF90IGFFbnRyeSwgYm9vbCBhRW5hYmxlKQoreworICAgIHVpbnQ4X3QgZW50cnkgPSBhU2hvcnQgPyBhRW50cnkgOiAoMiAqIGFFbnRyeSk7CisgICAgdWludDhfdCBpbmRleCA9IGVudHJ5IC8gODsKKyAgICB1aW50MzJfdCAqYWRkckVuID0gYVNob3J0ID8gKHVpbnQzMl90ICopUkZDT1JFX1hSRUdfU1JDU0hPUlRFTjAgOiAodWludDMyX3QgKilSRkNPUkVfWFJFR19TUkNFWFRFTjA7CisgICAgdWludDMyX3QgKmFkZHJBdXRvUGVuZEVuID0gYVNob3J0ID8gKHVpbnQzMl90ICopUkZDT1JFX0ZGU01fU1JDU0hPUlRQRU5ERU4wIDogKHVpbnQzMl90ICopUkZDT1JFX0ZGU01fU1JDRVhUUEVOREVOMDsKKyAgICB1aW50MzJfdCBiaXRNYXNrID0gMHgwMDAwMDAwMTsKKworICAgIGlmIChhRW5hYmxlKQorICAgIHsKKyAgICAgICAgSFdSRUcoYWRkckVuICsgaW5kZXgpIHw9IChiaXRNYXNrKSA8PCAoZW50cnkgJSA4KTsKKyAgICAgICAgSFdSRUcoYWRkckF1dG9QZW5kRW4gKyBpbmRleCkgfD0gKGJpdE1hc2spIDw8IChlbnRyeSAlIDgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBIV1JFRyhhZGRyRW4gKyBpbmRleCkgJj0gfigoYml0TWFzaykgPDwgKGVudHJ5ICUgOCkpOworICAgICAgICBIV1JFRyhhZGRyQXV0b1BlbmRFbiArIGluZGV4KSAmPSB+KChiaXRNYXNrKSA8PCAoZW50cnkgJSA4KSk7CisgICAgfQorfQorCitpbnQ4X3QgZmluZFNyY01hdGNoQXZhaWxFbnRyeShib29sIGFTaG9ydCkKK3sKKyAgICBpbnQ4X3QgZW50cnkgPSAtMTsKKyAgICB1aW50MzJfdCBiaXRNYXNrOworICAgIHVpbnQzMl90IHNob3J0RW5hYmxlU3RhdHVzID0gZ2V0U3JjTWF0Y2hFbnRyaWVzRW5hYmxlU3RhdHVzKHRydWUpOworICAgIHVpbnQzMl90IGV4dEVuYWJsZVN0YXR1cyA9IGdldFNyY01hdGNoRW50cmllc0VuYWJsZVN0YXR1cyhmYWxzZSk7CisKKyAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlNob3J0IGVuYWJsZSBzdGF0dXM6IDB4JXgiLCBzaG9ydEVuYWJsZVN0YXR1cyk7CisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJFeHQgZW5hYmxlIHN0YXR1czogMHgleCIsIGV4dEVuYWJsZVN0YXR1cyk7CisKKyAgICBpZiAoYVNob3J0KQorICAgIHsKKyAgICAgICAgYml0TWFzayA9IDB4MDAwMDAwMDE7CisKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfU0hPUlRfRU5UUklFUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKGV4dEVuYWJsZVN0YXR1cyAmIGJpdE1hc2spID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChzaG9ydEVuYWJsZVN0YXR1cyAmIGJpdE1hc2spID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGkgJSAyID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXh0RW5hYmxlU3RhdHVzID0gZXh0RW5hYmxlU3RhdHVzID4+IDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNob3J0RW5hYmxlU3RhdHVzID0gc2hvcnRFbmFibGVTdGF0dXMgPj4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiaXRNYXNrID0gMHgwMDAwMDAwMzsKKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUklFUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKChleHRFbmFibGVTdGF0dXMgfCBzaG9ydEVuYWJsZVN0YXR1cykgJiBiaXRNYXNrKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudHJ5ID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXh0RW5hYmxlU3RhdHVzID0gZXh0RW5hYmxlU3RhdHVzID4+IDI7CisgICAgICAgICAgICBzaG9ydEVuYWJsZVN0YXR1cyA9IHNob3J0RW5hYmxlU3RhdHVzID4+IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9FbmFibGVTcmNNYXRjaChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdExvZ0luZm9QbGF0KHNJbnN0YW5jZSwgIkVuYWJsZVNyY01hdGNoPSVkIiwgYUVuYWJsZSA/IDEgOiAwKTsKKworICAgIGlmIChhRW5hYmxlKQorICAgIHsKKyAgICAgICAgLy8gb25seSBzZXQgRnJhbWVQZW5kaW5nIHdoZW4gYWNrIGZvciBkYXRhIHBvbGwgaWYgdGhlcmUgYXJlIHF1ZXVlZCBtZXNzYWdlcworICAgICAgICAvLyBmb3IgZW50cmllcyBpbiB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICAgICAgICBIV1JFRyhSRkNPUkVfWFJFR19GUk1DVFJMMSkgJj0gflJGQ09SRV9YUkVHX0ZSTUNUUkwxX1BFTkRJTkdfT1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIHNldCBGcmFtZVBlbmRpbmcgZm9yIGFsbCBhY2suCisgICAgICAgIEhXUkVHKFJGQ09SRV9YUkVHX0ZSTUNUUkwxKSB8PSBSRkNPUkVfWFJFR19GUk1DVFJMMV9QRU5ESU5HX09SOworICAgIH0KK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0FkZFNyY01hdGNoU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgaW50OF90IGVudHJ5ID0gZmluZFNyY01hdGNoQXZhaWxFbnRyeSh0cnVlKTsKKyAgICB1aW50MzJfdCAqYWRkciA9ICh1aW50MzJfdCAqKVJGQ09SRV9GRlNNX1NSQ0FERFJFU1NfVEFCTEU7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJBZGQgU2hvcnRBZGRyIGVudHJ5OiAlZCIsIGVudHJ5KTsKKworICAgIG90RVhQRUNUX0FDVElPTihlbnRyeSA+PSAwLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgYWRkciArPSAoZW50cnkgKiBSRkNPUkVfWFJFR19TUkNNQVRDSF9TSE9SVF9FTlRSWV9PRkZTRVQpOworCisgICAgSFdSRUcoYWRkcisrKSA9IEhXUkVHKFJGQ09SRV9GRlNNX1BBTl9JRDApOworICAgIEhXUkVHKGFkZHIrKykgPSBIV1JFRyhSRkNPUkVfRkZTTV9QQU5fSUQxKTsKKyAgICBIV1JFRyhhZGRyKyspID0gYVNob3J0QWRkcmVzcyAmIDB4RkY7CisgICAgSFdSRUcoYWRkcisrKSA9IGFTaG9ydEFkZHJlc3MgPj4gODsKKworICAgIHNldFNyY01hdGNoRW50cnlFbmFibGVTdGF0dXModHJ1ZSwgKHVpbnQ4X3QpKGVudHJ5KSwgdHJ1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGludDhfdCBlbnRyeSA9IGZpbmRTcmNNYXRjaEF2YWlsRW50cnkoZmFsc2UpOworICAgIHVpbnQzMl90ICphZGRyID0gKHVpbnQzMl90ICopUkZDT1JFX0ZGU01fU1JDQUREUkVTU19UQUJMRTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIkFkZCBFeHRBZGRyIGVudHJ5OiAlZCIsIGVudHJ5KTsKKworICAgIG90RVhQRUNUX0FDVElPTihlbnRyeSA+PSAwLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgYWRkciArPSAoZW50cnkgKiBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUllfT0ZGU0VUKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHNpemVvZihvdEV4dEFkZHJlc3MpOyBpKyspCisgICAgeworICAgICAgICBIV1JFRyhhZGRyKyspID0gYUV4dEFkZHJlc3NbaV07CisgICAgfQorCisgICAgc2V0U3JjTWF0Y2hFbnRyeUVuYWJsZVN0YXR1cyhmYWxzZSwgKHVpbnQ4X3QpKGVudHJ5KSwgdHJ1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGludDhfdCBlbnRyeSA9IGZpbmRTcmNNYXRjaFNob3J0RW50cnkoYVNob3J0QWRkcmVzcyk7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJDbGVhciBTaG9ydEFkZHIgZW50cnk6ICVkIiwgZW50cnkpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGVudHJ5ID49IDAsIGVycm9yID0gT1RfRVJST1JfTk9fQUREUkVTUyk7CisKKyAgICBzZXRTcmNNYXRjaEVudHJ5RW5hYmxlU3RhdHVzKHRydWUsICh1aW50OF90KShlbnRyeSksIGZhbHNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBpbnQ4X3QgZW50cnkgPSBmaW5kU3JjTWF0Y2hFeHRFbnRyeShhRXh0QWRkcmVzcyk7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJDbGVhciBFeHRBZGRyIGVudHJ5OiAlZCIsIGVudHJ5KTsKKworICAgIG90RVhQRUNUX0FDVElPTihlbnRyeSA+PSAwLCBlcnJvciA9IE9UX0VSUk9SX05PX0FERFJFU1MpOworCisgICAgc2V0U3JjTWF0Y2hFbnRyeUVuYWJsZVN0YXR1cyhmYWxzZSwgKHVpbnQ4X3QpKGVudHJ5KSwgZmFsc2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQzMl90ICphZGRyRW4gPSAodWludDMyX3QgKilSRkNPUkVfWFJFR19TUkNTSE9SVEVOMDsKKyAgICB1aW50MzJfdCAqYWRkckF1dG9QZW5kRW4gPSAodWludDMyX3QgKilSRkNPUkVfRkZTTV9TUkNTSE9SVFBFTkRFTjA7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJDbGVhciBTaG9ydEFkZHIgZW50cmllcyIsIE5VTEwpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfRU5BQkxFX1NUQVRVU19TSVpFOyBpKyspCisgICAgeworICAgICAgICBIV1JFRyhhZGRyRW4rKykgPSAwOworICAgICAgICBIV1JFRyhhZGRyQXV0b1BlbmRFbisrKSA9IDA7CisgICAgfQorfQorCit2b2lkIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQzMl90ICphZGRyRW4gPSAodWludDMyX3QgKilSRkNPUkVfWFJFR19TUkNFWFRFTjA7CisgICAgdWludDMyX3QgKmFkZHJBdXRvUGVuZEVuID0gKHVpbnQzMl90ICopUkZDT1JFX0ZGU01fU1JDRVhUUEVOREVOMDsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIkNsZWFyIEV4dEFkZHIgZW50cmllcyIsIE5VTEwpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfRU5BQkxFX1NUQVRVU19TSVpFOyBpKyspCisgICAgeworICAgICAgICBIV1JFRyhhZGRyRW4rKykgPSAwOworICAgICAgICBIV1JFRyhhZGRyQXV0b1BlbmRFbisrKSA9IDA7CisgICAgfQorfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhU2NhbkNoYW5uZWw7CisgICAgKHZvaWQpYVNjYW5EdXJhdGlvbjsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0RGVmYXVsdFR4UG93ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYVBvd2VyKQoreworICAgIC8vIFRPRE86IENyZWF0ZSBhIHByb3BlciBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBkcml2ZXIuCisgICAgKHZvaWQpYUluc3RhbmNlOworICAgICh2b2lkKWFQb3dlcjsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UmVjZWl2ZVNlbnNpdGl2aXR5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIENDMjUzOF9SRUNFSVZFX1NFTlNJVElWSVRZOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9yYW5kb20uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvcmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1YzkyZgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvcmFuZG9tLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgInBsYXRmb3JtLWNjMjUzOC5oIgorI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworc3RhdGljIHZvaWQgZ2VuZXJhdGVSYW5kb20odWludDhfdCAqYU91dHB1dCwgdWludDE2X3QgYU91dHB1dExlbmd0aCkKK3sKKyAgICBIV1JFRyhTT0NfQURDX0FEQ0NPTjEpICY9IH4oU09DX0FEQ19BRENDT04xX1JDVFJMMSB8IFNPQ19BRENfQURDQ09OMV9SQ1RSTDApOworICAgIEhXUkVHKFNZU19DVFJMX1JDR0NSRkMpID0gU1lTX0NUUkxfUkNHQ1JGQ19SRkMwOworCisgICAgd2hpbGUgKEhXUkVHKFNZU19DVFJMX1JDR0NSRkMpICE9IFNZU19DVFJMX1JDR0NSRkNfUkZDMCk7CisKKyAgICBIV1JFRyhSRkNPUkVfWFJFR19GUk1DVFJMMCkgPSBSRkNPUkVfWFJFR19GUk1DVFJMMF9JTkZJTklUWV9SWDsKKyAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX1JYT047CisKKyAgICB3aGlsZSAoIUhXUkVHKFJGQ09SRV9YUkVHX1JTU0lTVEFUKSAmIFJGQ09SRV9YUkVHX1JTU0lTVEFUX1JTU0lfVkFMSUQpOworCisgICAgZm9yICh1aW50MTZfdCBpbmRleCA9IDA7IGluZGV4IDwgYU91dHB1dExlbmd0aDsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIGFPdXRwdXRbaW5kZXhdID0gMDsKKworICAgICAgICBmb3IgKHVpbnQ4X3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgOCAqIHNpemVvZih1aW50OF90KTsgb2Zmc2V0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGFPdXRwdXRbaW5kZXhdIDw8PSAxOworICAgICAgICAgICAgYU91dHB1dFtpbmRleF0gfD0gKEhXUkVHKFJGQ09SRV9YUkVHX1JGUk5EKSAmIFJGQ09SRV9YUkVHX1JGUk5EX0lSTkQpOworICAgICAgICB9CisgICAgfQorCisgICAgSFdSRUcoUkZDT1JFX1NGUl9SRlNUKSA9IFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9SRk9GRjsKK30KKwordm9pZCBjYzI1MzhSYW5kb21Jbml0KHZvaWQpCit7CisgICAgdWludDE2X3Qgc2VlZCA9IDA7CisKKyAgICB3aGlsZSAoc2VlZCA9PSAweDAwMDAgfHwgc2VlZCA9PSAweDgwMDMpCisgICAgeworICAgICAgICBnZW5lcmF0ZVJhbmRvbSgodWludDhfdCAqKSZzZWVkLCBzaXplb2Yoc2VlZCkpOworICAgIH0KKworICAgIEhXUkVHKFNPQ19BRENfUk5ETCkgPSAoc2VlZCA+PiA4KSAmIDB4ZmY7CisgICAgSFdSRUcoU09DX0FEQ19STkRMKSA9IHNlZWQgJiAweGZmOworfQorCit1aW50MzJfdCBvdFBsYXRSYW5kb21HZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCByYW5kb20gPSAwOworCisgICAgSFdSRUcoU09DX0FEQ19BRENDT04xKSB8PSBTT0NfQURDX0FEQ0NPTjFfUkNUUkwwOworICAgIHJhbmRvbSA9IEhXUkVHKFNPQ19BRENfUk5ETCkgfCAoSFdSRUcoU09DX0FEQ19STkRIKSA8PCA4KTsKKworICAgIEhXUkVHKFNPQ19BRENfQURDQ09OMSkgfD0gU09DX0FEQ19BRENDT04xX1JDVFJMMDsKKyAgICByYW5kb20gfD0gKChIV1JFRyhTT0NfQURDX1JOREwpIHwgKEhXUkVHKFNPQ19BRENfUk5ESCkgPDwgOCkpIDw8IDE2KTsKKworICAgIHJldHVybiByYW5kb207Cit9CisKK290RXJyb3Igb3RQbGF0UmFuZG9tR2V0VHJ1ZSh1aW50OF90ICphT3V0cHV0LCB1aW50MTZfdCBhT3V0cHV0TGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgY2hhbm5lbCA9IDA7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oYU91dHB1dCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgaWYgKG90UGxhdFJhZGlvSXNFbmFibGVkKHNJbnN0YW5jZSkpCisgICAgeworICAgICAgICBjaGFubmVsID0gMTEgKyAoSFdSRUcoUkZDT1JFX1hSRUdfRlJFUUNUUkwpIC0gMTEpIC8gNTsKKyAgICAgICAgb3RQbGF0UmFkaW9TbGVlcChzSW5zdGFuY2UpOworICAgICAgICBvdFBsYXRSYWRpb0Rpc2FibGUoc0luc3RhbmNlKTsKKyAgICB9CisKKyAgICBnZW5lcmF0ZVJhbmRvbShhT3V0cHV0LCBhT3V0cHV0TGVuZ3RoKTsKKworICAgIGlmIChjaGFubmVsKQorICAgIHsKKyAgICAgICAgY2MyNTM4UmFkaW9Jbml0KCk7CisgICAgICAgIG90UGxhdFJhZGlvRW5hYmxlKHNJbnN0YW5jZSk7CisgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZShzSW5zdGFuY2UsIGNoYW5uZWwpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3JvbS11dGlsaXR5LmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3JvbS11dGlsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5ODIzNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1Mzgvcm9tLXV0aWxpdHkuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJPTV9VVElMSVRZX0hfCisjZGVmaW5lIFJPTV9VVElMSVRZX0hfCisKKyNkZWZpbmUgUk9NX0FQSV9UQUJMRV9BRERSIDB4MDAwMDAwNDgKKwordHlwZWRlZiB1aW50MzJfdCAoKiB2b2xhdGlsZSBGUFRSX0NSQzMyX1QpKHVpbnQ4X3QgKiAvKnBEYXRhKi8sIHVpbnQzMl90IC8qYnl0ZUNvdW50Ki8pOwordHlwZWRlZiB1aW50MzJfdCAoKiB2b2xhdGlsZSBGUFRSX0dFVEZMU0laRV9UKSh2b2lkKTsKK3R5cGVkZWYgdWludDMyX3QgKCogdm9sYXRpbGUgRlBUUl9HRVRDSElQSURfVCkodm9pZCk7Cit0eXBlZGVmIGludDMyX3QgKCogdm9sYXRpbGUgRlBUUl9QQUdFRVJBU0VfVCkodWludDMyX3QgLypGbGFzaEFkZHIqLywgdWludDMyX3QgLypTaXplKi8pOwordHlwZWRlZiBpbnQzMl90ICgqIHZvbGF0aWxlIEZQVFJfUFJPR0ZMQVNIX1QpKHVpbnQzMl90ICogLypwUmFtRGF0YSovLCB1aW50MzJfdCAvKkZsYXNoQWRyKi8sIHVpbnQzMl90IC8qQnl0ZUNvdW50Ki8pOwordHlwZWRlZiB2b2lkICgqIHZvbGF0aWxlIEZQVFJfUkVTRVRERVZfVCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKigqIHZvbGF0aWxlIEZQVFJfTUVNU0VUX1QpKHZvaWQgKiAvKnMqLywgaW50MzJfdCAvKmMqLywgdWludDMyX3QgLypuKi8pOwordHlwZWRlZiB2b2lkICooKiB2b2xhdGlsZSBGUFRSX01FTUNQWV9UKSh2b2lkICogLypzMSovLCBjb25zdCB2b2lkICogLypzMiovLCB1aW50MzJfdCAvKm4qLyk7Cit0eXBlZGVmIGludDMyX3QgKCogdm9sYXRpbGUgRlBUUl9NRU1DTVBfVCkoY29uc3Qgdm9pZCAqIC8qczEqLywgY29uc3Qgdm9pZCAqIC8qczIqLywgdWludDMyX3QgLypuKi8pOwordHlwZWRlZiB2b2lkICooKiB2b2xhdGlsZSBGUFRSX01FTU1PVkVfVCkodm9pZCAqIC8qczEqLywgY29uc3Qgdm9pZCAqIC8qczIqLywgdWludDMyX3QgLypuKi8pOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZQVFJfQ1JDMzJfVCAgICAgICAgQ3JjMzI7CisgICAgRlBUUl9HRVRGTFNJWkVfVCAgICBHZXRGbGFzaFNpemU7CisgICAgRlBUUl9HRVRDSElQSURfVCAgICBHZXRDaGlwSWQ7CisgICAgRlBUUl9QQUdFRVJBU0VfVCAgICBQYWdlRXJhc2U7CisgICAgRlBUUl9QUk9HRkxBU0hfVCAgICBQcm9ncmFtRmxhc2g7CisgICAgRlBUUl9SRVNFVERFVl9UICAgICBSZXNldERldmljZTsKKyAgICBGUFRSX01FTVNFVF9UICAgICAgIG1lbXNldDsKKyAgICBGUFRSX01FTUNQWV9UICAgICAgIG1lbWNweTsKKyAgICBGUFRSX01FTUNNUF9UICAgICAgIG1lbWNtcDsKKyAgICBGUFRSX01FTU1PVkVfVCAgICAgIG1lbW1vdmU7Cit9IFJPTV9BUElfVDsKKworI2RlZmluZSBQX1JPTV9BUEkgICAgICAgICAgICAgICgoUk9NX0FQSV9UKikgUk9NX0FQSV9UQUJMRV9BRERSKQorCisjZGVmaW5lIFJPTV9DcmMzMihhLGIpICAgICAgICAgIFBfUk9NX0FQSS0+Q3JjMzIoYSxiKQorI2RlZmluZSBST01fR2V0Rmxhc2hTaXplKCkgICAgICBQX1JPTV9BUEktPkdldEZsYXNoU2l6ZSgpCisjZGVmaW5lIFJPTV9HZXRDaGlwSWQoKSAgICAgICAgIFBfUk9NX0FQSS0+R2V0Q2hpcElkKCkKKyNkZWZpbmUgUk9NX1BhZ2VFcmFzZShhLGIpICAgICAgUF9ST01fQVBJLT5QYWdlRXJhc2UoYSxiKQorI2RlZmluZSBST01fUHJvZ3JhbUZsYXNoKGEsYixjKSBQX1JPTV9BUEktPlByb2dyYW1GbGFzaChhLGIsYykKKyNkZWZpbmUgUk9NX1Jlc2V0RGV2aWNlKCkgICAgICAgUF9ST01fQVBJLT5SZXNldERldmljZSgpCisjZGVmaW5lIFJPTV9NZW1zZXQoYSxiLGMpICAgICAgIFBfUk9NX0FQSS0+bWVtc2V0KGEsYixjKQorI2RlZmluZSBST01fTWVtY3B5KGEsYixjKSAgICAgICBQX1JPTV9BUEktPm1lbWNweShhLGIsYykKKyNkZWZpbmUgUk9NX01lbWNtcChhLGIsYykgICAgICAgUF9ST01fQVBJLT5tZW1jbXAoYSxiLGMpCisjZGVmaW5lIFJPTV9NZW1tb3ZlKGEsYixjKSAgICAgIFBfUk9NX0FQSS0+bWVtbW92ZShhLGIsYykKKworI2VuZGlmICAvLyBST01fVVRJTElUWV9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9zdGFydHVwLWdjYy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9zdGFydHVwLWdjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZjI4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3N0YXJ0dXAtZ2NjLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgZ2NjLXNwZWNpZmljIHN0YXJ0dXAgY29kZSBmb3IgdGhlIGNjMjUzOC4KKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJjYzI1MzgtcmVnLmgiCisKK2V4dGVybiB1aW50OF90IF9sZGF0YTsKK2V4dGVybiB1aW50OF90IF9kYXRhOworZXh0ZXJuIHVpbnQ4X3QgX2VkYXRhOworZXh0ZXJuIHVpbnQ4X3QgX2JzczsKK2V4dGVybiB1aW50OF90IF9lYnNzOworZXh0ZXJuIHVpbnQ4X3QgX2luaXRfYXJyYXk7CitleHRlcm4gdWludDhfdCBfZWluaXRfYXJyYXk7CisKK19fZXh0ZW5zaW9uX18gdHlwZWRlZiBpbnQgX19ndWFyZCBfX2F0dHJpYnV0ZV9fKChtb2RlKF9fRElfXykpKTsKK2ludCBfX2N4YV9ndWFyZF9hY3F1aXJlKF9fZ3VhcmQgKmcpIHsgcmV0dXJuICEqKGNoYXIgKikoZyk7IH0KK3ZvaWQgX19jeGFfZ3VhcmRfcmVsZWFzZShfX2d1YXJkICpnKSB7ICooY2hhciAqKWcgPSAxOyB9Cit2b2lkIF9fY3hhX2d1YXJkX2Fib3J0KF9fZ3VhcmQgKmcpIHsgKHZvaWQpZzsgfQordm9pZCBfX2N4YV9wdXJlX3ZpcnR1YWwodm9pZCkgeyB3aGlsZSAoMSk7IH0KKwordm9pZCBJbnREZWZhdWx0SGFuZGxlcih2b2lkKTsKK3ZvaWQgUmVzZXRIYW5kbGVyKHZvaWQpOworCitleHRlcm4gdm9pZCBTeXNUaWNrX0hhbmRsZXIodm9pZCk7CitleHRlcm4gdm9pZCBVQVJUMEludEhhbmRsZXIodm9pZCk7CitleHRlcm4gdm9pZCBSRkNvcmVSeFR4SW50SGFuZGxlcih2b2lkKTsKK2V4dGVybiB2b2lkIFJGQ29yZUVyckludEhhbmRsZXIodm9pZCk7CitleHRlcm4gdm9pZCBtYWluKHZvaWQpOworCitzdGF0aWMgdWludDY0X3Qgc3RhY2tbNTEyXSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuc3RhY2siKSkpOworCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIudmVjdG9ycyIpLCB1c2VkKSkKK3ZvaWQgKCpjb25zdCB2ZWN0b3JzW10pKHZvaWQpID0KK3sKKyAgICAodm9pZCAoKikodm9pZCkpKCh1bnNpZ25lZCBsb25nKXN0YWNrICsgc2l6ZW9mKHN0YWNrKSksICAgLy8gSW5pdGlhbCBTdGFjayBQb2ludGVyCisgICAgUmVzZXRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgVGhlIHJlc2V0IGhhbmRsZXIKKyAgICBSZXNldEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvLyAyIFRoZSBOTUkgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgIC8vIDMgVGhlIGhhcmQgZmF1bHQgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA0IFRoZSBNUFUgZmF1bHQgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA1IFRoZSBidXMgZmF1bHQgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA2IFRoZSB1c2FnZSBmYXVsdCBoYW5kbGVyCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDcgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gOCBSZXNlcnZlZAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA5IFJlc2VydmVkCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwIFJlc2VydmVkCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDExIFNWQ2FsbCBoYW5kbGVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDEyIERlYnVnIG1vbml0b3IgaGFuZGxlcgorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMyBSZXNlcnZlZAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAxNCBUaGUgUGVuZFNWIGhhbmRsZXIKKyAgICBTeXNUaWNrX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTUgVGhlIFN5c1RpY2sgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAxNiBHUElPIFBvcnQgQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAxNyBHUElPIFBvcnQgQgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAxOCBHUElPIFBvcnQgQworICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAxOSBHUElPIFBvcnQgRAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyMCBub25lCisgICAgVUFSVDBJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIxIFVBUlQwIFJ4IGFuZCBUeAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAyMiBVQVJUMSBSeCBhbmQgVHgKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMjMgU1NJMCBSeCBhbmQgVHgKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMjQgSTJDIE1hc3RlciBhbmQgU2xhdmUKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjUgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjYgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjcgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjggUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjkgUmVzZXJ2ZWQKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMzAgQURDIFNlcXVlbmNlIDAKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzEgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzIgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzMgUmVzZXJ2ZWQKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMzQgV2F0Y2hkb2cgdGltZXIsIHRpbWVyIDAKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMzUgVGltZXIgMCBzdWJ0aW1lciBBCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDM2IFRpbWVyIDAgc3VidGltZXIgQgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAzNyBUaW1lciAxIHN1YnRpbWVyIEEKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMzggVGltZXIgMSBzdWJ0aW1lciBCCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDM5IFRpbWVyIDIgc3VidGltZXIgQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA0MCBUaW1lciAyIHN1YnRpbWVyIEIKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gNDEgQW5hbG9nIENvbXBhcmF0b3IgMAorICAgIFJGQ29yZVJ4VHhJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAvLyA0MiBSRkNvcmUgUngvVHgKKyAgICBSRkNvcmVFcnJJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgLy8gNDMgUkZDb3JlIEVycm9yCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDQ0IEljZVBpY2sKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gNDUgRkxBU0ggQ29udHJvbAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA0NiBBRVMKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gNDcgUEtBCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDQ4IFNsZWVwIFRpbWVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDQ5IE1hY1RpbWVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDUwIFNTSTEgUnggYW5kIFR4CisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDUxIFRpbWVyIDMgc3VidGltZXIgQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA1MiBUaW1lciAzIHN1YnRpbWVyIEIKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTMgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTQgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTUgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTYgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTcgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTggUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTkgUmVzZXJ2ZWQKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gNjAgVVNCIDI1MzgKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNjEgUmVzZXJ2ZWQKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gNjIgdURNQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA2MyB1RE1BIEVycm9yCit9OworCit2b2lkIEludERlZmF1bHRIYW5kbGVyKHZvaWQpCit7CisgICAgd2hpbGUgKDEpOworfQorCisjZGVmaW5lIEZMQVNIX0NDQV9CT09UTERSX0NGR19ESVNBQkxFICAgICAgICAgICAweEVGRkZGRkZGIC8vLzwgRGlzYWJsZSBiYWNrZG9vciBmdW5jdGlvbgorI2RlZmluZSBGTEFTSF9DQ0FfQk9PVExEUl9DRkdfRU5BQkxFICAgICAgICAgICAgMHhGMEZGRkZGRiAvLy88IEVuYWJsZSBiYWNrZG9vciBmdW5jdGlvbgorI2RlZmluZSBGTEFTSF9DQ0FfQk9PVExEUl9DRkdfQUNUSVZFX0hJR0ggICAgICAgMHgwODAwMDAwMCAvLy88IFNlbGVjdGVkIHBpbiBvbiBwYWQgQSBhY3RpdmUgaGlnaAorI2RlZmluZSBGTEFTSF9DQ0FfQk9PVExEUl9DRkdfUE9SVF9BX1BJTl9NICAgICAgMHgwNzAwMDAwMCAvLy88IFNlbGVjdGVkIHBpbiBvbiBwYWQgQSBtYXNrCisjZGVmaW5lIEZMQVNIX0NDQV9CT09UTERSX0NGR19QT1JUX0FfUElOX1MgICAgICAyNCAgICAgICAgIC8vLzwgU2VsZWN0ZWQgcGluIG9uIHBhZCBBIHNoaWZ0CisjZGVmaW5lIEZMQVNIX0NDQV9JTUFHRV9WQUxJRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8vLzwgSW5kaWNhdGVzIHZhbGlkIGltYWdlIGluIGZsYXNoCisKKyNkZWZpbmUgRkxBU0hfQ0NBX0NPTkZfQk9PVExEUl9CQUNLRE9PUl9QT1JUX0FfUElOICAzICAgICAgLy8vPCBTZWxlY3QgQnV0dG9uIG9uIFNtYXJ0UkYwNiBFdmFsIEJvYXJkCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgdWkzMkJvb3RsZHJDZmc7CisgICAgdWludDMyX3QgdWkzMkltYWdlVmFsaWQ7CisgICAgdWludDMyX3QgdWkzMkltYWdlVmVjdG9yQWRkcjsKKyAgICB1aW50OF90ICB1aThsb2NrWzMyXTsKK30gZmxhc2hfY2NhX2xvY2tfcGFnZV90OworCitfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmZsYXNoY2NhIiksIHVzZWQpKQorY29uc3QgZmxhc2hfY2NhX2xvY2tfcGFnZV90IGZsYXNoX2NjYV9sb2NrX3BhZ2UgPQoreworICAgIEZMQVNIX0NDQV9CT09UTERSX0NGR19FTkFCTEUgfCAoRkxBU0hfQ0NBX0NPTkZfQk9PVExEUl9CQUNLRE9PUl9QT1JUX0FfUElOIDw8IEZMQVNIX0NDQV9CT09UTERSX0NGR19QT1JUX0FfUElOX1MpLAorICAgIEZMQVNIX0NDQV9JTUFHRV9WQUxJRCwKKyAgICAodWludDMyX3QpICZ2ZWN0b3JzLAorICAgIHsKKyAgICAgICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKyAgICAgICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKyAgICAgICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKyAgICAgICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRgorICAgIH0KK307CisKK3R5cGVkZWYgdm9pZCAoKmluaXRfZm5fdCkodm9pZCk7CisKK3ZvaWQgUmVzZXRIYW5kbGVyKHZvaWQpCit7CisgICAgSFdSRUcoU1lTX0NUUkxfRU1VT1ZSKSA9IDB4RkY7CisKKyAgICAvLyBjb25maWd1cmUgY2xvY2tzCisgICAgSFdSRUcoU1lTX0NUUkxfQ0xPQ0tfQ1RSTCkgfD0gU1lTX0NUUkxfQ0xPQ0tfQ1RSTF9BTVBfREVUOworICAgIEhXUkVHKFNZU19DVFJMX0NMT0NLX0NUUkwpID0gU1lTX0NUUkxfU1lTRElWXzMyTUhaOworCisgICAgLy8gYWx0ZXJuYXRlIG1hcAorICAgIEhXUkVHKFNZU19DVFJMX0lfTUFQKSB8PSBTWVNfQ1RSTF9JX01BUF9BTFRNQVA7CisKKyAgICAvLyBjb3B5IHRoZSBkYXRhIHNlZ21lbnQgaW5pdGlhbGl6ZXJzIGZyb20gZmxhc2ggdG8gU1JBTQorICAgIG1lbWNweSgmX2RhdGEsICZfbGRhdGEsICZfZWRhdGEgLSAmX2RhdGEpOworCisgICAgLy8gemVyby1maWxsIHRoZSBic3Mgc2VnbWVudAorICAgIG1lbXNldCgmX2JzcywgMCwgJl9lYnNzIC0gJl9ic3MpOworCisgICAgLy8gQysrIHJ1bnRpbWUgaW5pdGlhbGl6YXRpb24gKEJTUywgRGF0YSwgcmVsb2NhdGlvbiwgZXRjLikKKyAgICBpbml0X2ZuX3QgKmZwOworCisgICAgZm9yIChmcCA9IChpbml0X2ZuX3QgKikmX2luaXRfYXJyYXk7IGZwIDwgKGluaXRfZm5fdCAqKSZfZWluaXRfYXJyYXk7IGZwKyspCisgICAgeworICAgICAgICAoKmZwKSgpOworICAgIH0KKworICAgIC8vIGNhbGwgdGhlIGFwcGxpY2F0aW9uJ3MgZW50cnkgcG9pbnQKKyAgICBtYWluKCk7CisKKyAgICAvLyBlbmQgaGVyZSBpZiBtYWluKCkgcmV0dXJucworICAgIHdoaWxlICgxKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvdWFydC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExMzE5YwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvdWFydC5jCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBVQVJUIGNvbW11bmljYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworI2luY2x1ZGUgInBsYXRmb3JtLWNjMjUzOC5oIgorI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworZW51bQoreworICAgIGtQbGF0Zm9ybUNsb2NrID0gMzIwMDAwMDAsCisgICAga0JhdWRSYXRlID0gMTE1MjAwLAorICAgIGtSZWNlaXZlQnVmZmVyU2l6ZSA9IDEyOCwKK307CisKK2V4dGVybiB2b2lkIFVBUlQwSW50SGFuZGxlcih2b2lkKTsKKworc3RhdGljIHZvaWQgcHJvY2Vzc1JlY2VpdmUodm9pZCk7CitzdGF0aWMgdm9pZCBwcm9jZXNzVHJhbnNtaXQodm9pZCk7CisKK3N0YXRpYyBjb25zdCB1aW50OF90ICpzVHJhbnNtaXRCdWZmZXIgPSBOVUxMOworc3RhdGljIHVpbnQxNl90IHNUcmFuc21pdExlbmd0aCA9IDA7CisKK3R5cGVkZWYgc3RydWN0IFJlY3ZCdWZmZXIKK3sKKyAgICAvLyBUaGUgZGF0YSBidWZmZXIKKyAgICB1aW50OF90IG1CdWZmZXJba1JlY2VpdmVCdWZmZXJTaXplXTsKKyAgICAvLyBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBpdGVtIHdyaXR0ZW4gdG8gdGhlIGxpc3QuCisgICAgdWludDE2X3QgbUhlYWQ7CisgICAgLy8gVGhlIG9mZnNldCBvZiB0aGUgbmV4dCBpdGVtIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGxpc3QuCisgICAgdWludDE2X3QgbVRhaWw7Cit9IFJlY3ZCdWZmZXI7CisKK3N0YXRpYyBSZWN2QnVmZmVyIHNSZWNlaXZlOworCitvdEVycm9yIG90UGxhdFVhcnRFbmFibGUodm9pZCkKK3sKKyAgICB1aW50MzJfdCBkaXY7CisKKyAgICBzUmVjZWl2ZS5tSGVhZCA9IDA7CisgICAgc1JlY2VpdmUubVRhaWwgPSAwOworCisgICAgLy8gY2xvY2sKKyAgICBIV1JFRyhTWVNfQ1RSTF9SQ0dDVUFSVCkgPSBTWVNfQ1RSTF9SQ0dDVUFSVF9VQVJUMDsKKyAgICBIV1JFRyhTWVNfQ1RSTF9TQ0dDVUFSVCkgPSBTWVNfQ1RSTF9TQ0dDVUFSVF9VQVJUMDsKKyAgICBIV1JFRyhTWVNfQ1RSTF9EQ0dDVUFSVCkgPSBTWVNfQ1RSTF9EQ0dDVUFSVF9VQVJUMDsKKworICAgIEhXUkVHKFVBUlQwX0JBU0UgKyBVQVJUX09fQ0MpID0gMDsKKworICAgIC8vIHR4IHBpbgorICAgIEhXUkVHKElPQ19QQTFfU0VMKSA9IElPQ19NVVhfT1VUX1NFTF9VQVJUMF9UWEQ7CisgICAgSFdSRUcoSU9DX1BBMV9PVkVSKSA9IElPQ19PVkVSUklERV9PRTsKKyAgICBIV1JFRyhHUElPX0FfQkFTRSArIEdQSU9fT19BRlNFTCkgfD0gR1BJT19QSU5fMTsKKworICAgIC8vIHJ4IHBpbgorICAgIEhXUkVHKElPQ19QQTBfU0VMKSA9IElPQ19VQVJUUlhEX1VBUlQwOworICAgIEhXUkVHKElPQ19QQTBfT1ZFUikgPSBJT0NfT1ZFUlJJREVfRElTOworICAgIEhXUkVHKEdQSU9fQV9CQVNFICsgR1BJT19PX0FGU0VMKSB8PSBHUElPX1BJTl8wOworCisgICAgSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19DVEwpID0gMDsKKworICAgIC8vIGJhdWQgcmF0ZQorICAgIGRpdiA9ICgoKGtQbGF0Zm9ybUNsb2NrICogOCkgLyBrQmF1ZFJhdGUpICsgMSkgLyAyOworICAgIEhXUkVHKFVBUlQwX0JBU0UgKyBVQVJUX09fSUJSRCkgPSBkaXYgLyA2NDsKKyAgICBIV1JFRyhVQVJUMF9CQVNFICsgVUFSVF9PX0ZCUkQpID0gZGl2ICUgNjQ7CisgICAgSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19MQ1JIKSA9IFVBUlRfQ09ORklHX1dMRU5fOCB8IFVBUlRfQ09ORklHX1NUT1BfT05FIHwgVUFSVF9DT05GSUdfUEFSX05PTkU7CisKKyAgICAvLyBjb25maWd1cmUgaW50ZXJydXB0cworICAgIEhXUkVHKFVBUlQwX0JBU0UgKyBVQVJUX09fSU0pIHw9IFVBUlRfSU1fUlhJTSB8IFVBUlRfSU1fUlRJTTsKKworICAgIC8vIGVuYWJsZQorICAgIEhXUkVHKFVBUlQwX0JBU0UgKyBVQVJUX09fQ1RMKSA9IFVBUlRfQ1RMX1VBUlRFTiB8IFVBUlRfQ1RMX1RYRSB8IFVBUlRfQ1RMX1JYRTsKKworICAgIC8vIGVuYWJsZSBpbnRlcnJ1cHRzCisgICAgSFdSRUcoTlZJQ19FTjApID0gMSA8PCAoKElOVF9VQVJUMCAtIDE2KSAmIDMxKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFVhcnREaXNhYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0VWFydFNlbmQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG90RVhQRUNUX0FDVElPTihzVHJhbnNtaXRCdWZmZXIgPT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworICAgIHNUcmFuc21pdEJ1ZmZlciA9IGFCdWY7CisgICAgc1RyYW5zbWl0TGVuZ3RoID0gYUJ1Zkxlbmd0aDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgcHJvY2Vzc1JlY2VpdmUodm9pZCkKK3sKKyAgICAvLyBDb3B5IHRhaWwgdG8gcHJldmVudCBtdWx0aXBsZSByZWFkcworICAgIHVpbnQxNl90IHRhaWwgPSBzUmVjZWl2ZS5tVGFpbDsKKworICAgIC8vIElmIHRoZSBkYXRhIHdyYXBzIGFyb3VuZCwgcHJvY2VzcyB0aGUgZmlyc3QgcGFydAorICAgIGlmIChzUmVjZWl2ZS5tSGVhZCA+IHRhaWwpCisgICAgeworICAgICAgICBvdFBsYXRVYXJ0UmVjZWl2ZWQoc1JlY2VpdmUubUJ1ZmZlciArIHNSZWNlaXZlLm1IZWFkLCBrUmVjZWl2ZUJ1ZmZlclNpemUgLSBzUmVjZWl2ZS5tSGVhZCk7CisKKyAgICAgICAgLy8gUmVzZXQgdGhlIGJ1ZmZlciBtSGVhZCBiYWNrIHRvIHplcm8uCisgICAgICAgIHNSZWNlaXZlLm1IZWFkID0gMDsKKyAgICB9CisKKyAgICAvLyBGb3IgYW55IGRhdGEgcmVtYWluaW5nLCBwcm9jZXNzIGl0CisgICAgaWYgKHNSZWNlaXZlLm1IZWFkICE9IHRhaWwpCisgICAgeworICAgICAgICBvdFBsYXRVYXJ0UmVjZWl2ZWQoc1JlY2VpdmUubUJ1ZmZlciArIHNSZWNlaXZlLm1IZWFkLCB0YWlsIC0gc1JlY2VpdmUubUhlYWQpOworCisgICAgICAgIC8vIFNldCBtSGVhZCB0byB0aGUgbG9jYWwgdGFpbCB3ZSBoYXZlIGNhY2hlZAorICAgICAgICBzUmVjZWl2ZS5tSGVhZCA9IHRhaWw7CisgICAgfQorfQorCit2b2lkIHByb2Nlc3NUcmFuc21pdCh2b2lkKQoreworICAgIG90RVhQRUNUKHNUcmFuc21pdEJ1ZmZlciAhPSBOVUxMKTsKKworICAgIGZvciAoOyBzVHJhbnNtaXRMZW5ndGggPiAwOyBzVHJhbnNtaXRMZW5ndGgtLSkKKyAgICB7CisgICAgICAgIHdoaWxlIChIV1JFRyhVQVJUMF9CQVNFICsgVUFSVF9PX0ZSKSAmIFVBUlRfRlJfVFhGRik7CisKKyAgICAgICAgSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19EUikgPSAqc1RyYW5zbWl0QnVmZmVyKys7CisgICAgfQorCisgICAgc1RyYW5zbWl0QnVmZmVyID0gTlVMTDsKKyAgICBvdFBsYXRVYXJ0U2VuZERvbmUoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgY2MyNTM4VWFydFByb2Nlc3Modm9pZCkKK3sKKyAgICBwcm9jZXNzUmVjZWl2ZSgpOworICAgIHByb2Nlc3NUcmFuc21pdCgpOworfQorCit2b2lkIFVBUlQwSW50SGFuZGxlcih2b2lkKQoreworICAgIHVpbnQzMl90IG1pczsKKyAgICB1aW50OF90IGJ5dGU7CisKKyAgICBtaXMgPSBIV1JFRyhVQVJUMF9CQVNFICsgVUFSVF9PX01JUyk7CisgICAgSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19JQ1IpID0gbWlzOworCisgICAgaWYgKG1pcyAmIChVQVJUX0lNX1JYSU0gfCBVQVJUX0lNX1JUSU0pKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCEoSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19GUikgJiBVQVJUX0ZSX1JYRkUpKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlID0gSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19EUik7CisKKyAgICAgICAgICAgIC8vIFdlIGNhbiBvbmx5IHdyaXRlIGlmIGluY3JlbWVudGluZyBtVGFpbCBkb2Vzbid0IGVxdWFsIG1IZWFkCisgICAgICAgICAgICBpZiAoc1JlY2VpdmUubUhlYWQgIT0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc1JlY2VpdmUubUJ1ZmZlcltzUmVjZWl2ZS5tVGFpbF0gPSBieXRlOworICAgICAgICAgICAgICAgIHNSZWNlaXZlLm1UYWlsID0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL01ha2VmaWxlLmFtIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTYyNDZhCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDc2IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgID0gbGlib3BlbnRocmVhZC1jYzI2NTAuYQorCitsaWJvcGVudGhyZWFkX2NjMjY1MF9hX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvZXhhbXBsZXMvcGxhdGZvcm1zICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUgICAgXAorICAgICQoTUJFRFRMU19DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2NjMjY1MF9hX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBhbGFybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWlzYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhZGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFuZG9tLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1YXJ0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNyeXB0by9zaGEyNTZfYWx0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY3J5cHRvL2Flc19hbHQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYzI2NTBfY2NmZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNjMjY1MF9zdGFydHVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2NjMjY1MF9hX0RFUEVOREVOQ0lFUyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9nY2MvZHJpdmVybGliLmEgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworbGlib3BlbnRocmVhZF9jYzI2NTBfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgZGlhZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorCitub2luc3RfSEVBREVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBwbGF0Zm9ybS1jYzI2NTAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAtCitsaWJvcGVudGhyZWFkX2NjMjY1MF9hX0xJQkFERCAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKHNoZWxsIGZpbmQgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscyAkKERhc2gpdHlwZSBmICQoRGFzaCluYW1lICIqLm8iKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvUkVBRE1FLm1kIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzZDFiYwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTM5IEBACisjIE9wZW5UaHJlYWQgb24gQ0MyNjUwIEV4YW1wbGUKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciB0aGUgW1RleGFzCitJbnN0cnVtZW50cyBDQzI2NTBdW2NjMjY1MF0uCisKK1RoZSBleGFtcGxlIHBsYXRmb3JtIGRyaXZlcnMgYXJlIGludGVuZGVkIHRvIHByZXNlbnQgdGhlIG1pbmltYWwgY29kZSBuZWNlc3NhcnkKK3RvIHN1cHBvcnQgT3BlblRocmVhZC4gQXMgYSByZXN1bHQsIHRoZSBleGFtcGxlIHBsYXRmb3JtIGRyaXZlcnMgZG8gbm90CituZWNlc3NhcmlseSBoaWdobGlnaHQgdGhlIHBsYXRmb3JtJ3MgZnVsbCBjYXBhYmlsaXRpZXMuIFRoZSBwbGF0Zm9ybQorYWJzdHJhY3Rpb24gbGF5ZXIgd2FzIGJ1aWxkIGZvciB0aGUgW0NDMjY1MCBMQVVOQ0hYTF1bY2MyNjUwLWxhdW5jaHhsXSwgdXNhZ2UKK29uIG90aGVyIGJvYXJkcyB3aXRoIGEgQ0MyNjUwIHdpbGwgcmVxdWlyZSBjaGFuZ2VzIHRvIHRoZSBwZXJpcGhlcmFsIGRyaXZlcnMuCisKK0R1ZSB0byBmbGFzaCBzaXplIGxpbWl0YXRpb25zLCBzb21lIGZlYXR1cmVzIG9mIE9wZW5UaHJlYWQgYXJlIG5vdCBzdXBwb3J0ZWQgb24KK3RoZSBbVGV4YXMgSW5zdHJ1bWVudHMgQ0MyNjUwXVtjYzI2NTBdLiBUaGlzIHBsYXRmb3JtIGlzIGludGVuZGVkIGZvcgorZXhwcmltZW50YXRpb24gYW5kIGV4cGxvcmF0aW9uIG9mIE9wZW5UaHJlYWQsIG5vdCBhIHByb2R1Y3Rpb24gcmVhZHkKK2Vudmlyb25tZW50LiBUZXhhcyBJbnN0cnVtZW50cyByZWNvbW1lbmRzIGZ1dHVyZSBUSSBTb0NzIGZvciBwcm9kdWN0aW9uLgorCitCdWlsZGluZyB3aXRoIGdjYyA1LjQgaXMgcmVjb21tZW5kZWQgZHVlIHRvIGdlbmVyYXRlZCBjb2RlIHNpemUgY29uY2VybnMuCisKK0FsbCB0aHJlZSBjb25maWd1cmF0aW9ucyB3ZXJlIHRlc3RlZCB3aXRoIGBhcm0tbm9uZS1lYWJpLWdjYyA1LjQuMSAyMDE2MDYwOQorKHJlbGVhc2UpYCBvbiBbdGhpcyBjb21taXRdW3Rlc3RlZC1jb21taXRdLiBUaGUgYXV0b21hdGljIGludGVncmF0aW9uIGJ1aWxkcyBoYXZlIHNpbmNlCitiZWVuIGxpbWl0ZWQgdG8gb25seSB0aGUgYGNsaS1tdGRgIGNvbmZpZ3VyYXRpb24gdG8gbGltaXQgdGhlIGltcGFjdCBvbiBwdWxsCityZXF1ZXN0cy4KKworW2NjMjY1MF06IGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvQ0MyNjUwCitbY2MyNjUwLWxhdW5jaHhsXTogaHR0cDovL3d3dy50aS5jb20vdG9vbC9MYXVuY2h4bC1jYzI2NTAKK1t0ZXN0ZWQtY29tbWl0XTogaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9jb21taXQvZTg2MTEyOTFkNjVlOGFkMjhkNzdhNzY0NTY5NWM1MzUyNTA0YzNkZAorCisjIyBCdWlsZCBFbnZpcm9ubWVudAorCitCdWlsZGluZyB0aGUgZXhhbXBsZXMgZm9yIHRoZSBjYzI2NTAgcmVxdWlyZXMgW0dOVSBBdXRvQ29uZl1bZ251LWF1dG9jb25mXSwKK1tHTlUgQXV0b01ha2VdW2dudS1hdXRvbWFrZV0sIFtQeXRob25dW3B5dGhvbl0sIGFuZCB0aGUKK1tBUk0gZ2NjIHRvb2xjaGFpbl1bYXJtLXRvb2xjaGFpbl0uCisKK1dpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgYXJtIHRvb2xjaGFpbiwgbW9zdCBvZiB0aGVzZSB0b29scyBhcmUgaW5zdGFsbGVkIGJ5CitkZWZhdWx0IG9uIG1vZGVybiBQb3NpeCBzeXN0ZW1zLiBXaW5kb3dzIGRvZXMgbm90IGhhdmUgdGhlc2UgdG9vbHMgaW5zdGFsbGVkIGJ5CitkZWZhdWx0LCBhbmQgdGhlIGJvb3RzdHJhcCBzY3JpcHQgcmVxdWlyZXMgYSBQb3NpeCBvciBNU1lTIGVudmlyb25tZW50IHRvIHJ1bi4KK0l0IGlzIHBvc3NpYmxlIHRvIHNldHVwIGFuIE1TWVMgZW52aXJvbm1lbnQgaW5zaWRlIG9mIFdpbmRvd3MgdXNpbmcgdG9vbHMgc3VjaAorYXMgW0N5Z3dpbl1bY3lnd2luXSBvciBbTWluR1ddW21pbmd3XSBidXQgaXQgaXMgcmVjb21tZW5kZWQgdG8gc2V0dXAgYSBMaW51eCBWTQorZm9yIGJ1aWxkaW5nIG9uIGEgV2luZG93cyBzeXN0ZW0uIEZvciBoZWxwIHNldHRpbmcgdXAgVmlydHVhbEJveCB3aXRoIFVidW50dSwKK2NvbnN1bHQgdGhpcyBbY29tbXVuaXR5IGhlbHAgd2lraSBhcnRpY2xlXVt1YnVudHUtd2lraS12aXJ0dWFsYm94XS4KKworW2dudS1hdXRvY29uZl06IGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYKK1tnbnUtYXV0b21ha2VdOiBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9tYWtlCitbcHl0aG9uXTogaHR0cHM6Ly93d3cucHl0aG9uLm9yZworW2FybS10b29sY2hhaW5dOiBodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZAorW2N5Z3dpbl06IGh0dHBzOi8vd3d3LmN5Z3dpbi5jb20KK1ttaW5nd106IGh0dHA6Ly93d3cubWluZ3cub3JnCitbdWJ1bnR1LXdpa2ktdmlydHVhbGJveF06IGh0dHBzOi8vaGVscC51YnVudHUuY29tL2NvbW11bml0eS9WaXJ0dWFsQm94CisKKworIyMgQnVpbGRpbmcKKworSW4gYSBCYXNoIHRlcm1pbmFsLCBmb2xsb3cgdGhlc2UgaW5zdHJ1Y3Rpb25zIHRvIGJ1aWxkIHRoZSBjYzI2NTAgZXhhbXBsZXMuCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4KKyQgLi9ib290c3RyYXAKKyQgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1jYzI2NTAKK2BgYAorCisjIyBGbGFzaCBCaW5hcmllcworCitJZiB0aGUgYnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdGhlIGBlbGZgIGZpbGVzIG1heSBiZSBmb3VuZCBpbgorYDxwYXRoLXRvLW9wZW50aHJlYWQ+L291dHB1dC9jYzI2NTAvYmluYC4KKworVG8gZmxhc2ggdGhlIGltYWdlcyB3aXRoIFtGbGFzaCBQcm9ncmFtbWVyIDJdW3RpLWZsYXNoLXByb2dyYW1tZXItMl0sIHRoZSBmaWxlcworbXVzdCBoYXZlIHRoZSBgKi5lbGZgIGV4dGVuc2lvbi4KK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4vb3V0cHV0L2NjMjY1MC9iaW4KKyQgY3Agb3QtY2xpIG90LWNsaS5lbGYKK2BgYAorCitUbyBsb2FkIHRoZSBpbWFnZXMgd2l0aCB0aGUgW3NlcmlhbCBib290bG9hZGVyXVt0aS1jYzI2NTAtYm9vdGxvYWRlcl0sIHRoZQoraW1hZ2VzIG11c3QgYmUgY29udmVydGVkIHRvIGBiaW5gLiBUaGlzIGlzIGRvbmUgdXNpbmcgYGFybS1ub25lLWVhYmktb2JqY29weWAKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4vb3V0cHV0L2NjMjY1MC9iaW4KKyQgYXJtLW5vbmUtZWFiaS1vYmpjb3B5IC1PIGJpbmFyeSBvdC1jbGkgb3QtY2xpLmJpbgorYGBgCitUaGUgW2NjMjUzOC1ic2wucHkgc2NyaXB0XVtjYzI1MzgtYnNsLXRvb2xdIHByb3ZpZGVzIGEgY29udmVuaWVudCBtZXRob2QKK2ZvciBmbGFzaGluZyBhIENDMjY1MCB2aWEgdGhlIFVBUlQuIFRvIGVudGVyIHRoZSBib290bG9hZGVyIGJhY2tkb29yIGZvciBmbGFzaGluZywKK2hvbGQgZG93biBCVE4tMSBvbiBDQzI2NTAgTGF1Y2hQYWQgb3IgU0VMRUNUIGZvciBDQzI2NTBESyAoY29ycmVzcG9uZHMgdG8gbG9naWMgJzAnKQord2hpbGUgeW91IHByZXNzIHRoZSBSZXNldCBidXR0b24uCisKK1t0aS1mbGFzaC1wcm9ncmFtbWVyLTJdOiBodHRwOi8vd3d3LnRpLmNvbS90b29sL2ZsYXNoLXByb2dyYW1tZXIKK1t0aS1jYzI2NTAtYm9vdGxvYWRlcl06IGh0dHA6Ly93d3cudGkuY29tL2xpdC9hbi9zd3JhNDY2YS9zd3JhNDY2YS5wZGYKK1tjYzI1MzgtYnNsLXRvb2xdOiBodHRwczovL2dpdGh1Yi5jb20vSmVsbWVyVC9jYzI1MzgtYnNsCisKKyMjIEludGVyYWN0CisKKyMjIyBDTEkgZXhhbXBsZQorCisxLiBXaXRoIGEgdGVybWluYWwgY2xpZW50IChwdXR0eSwgbWluaWNvbSwgZXRjLikgb3BlbiB0aGUgY29tIHBvcnQgYXNzb2NpYXRlZAorICAgd2l0aCB0aGUgY2MyNjUwIFVBUlQuIFRoZSBzZXJpYWwgcG9ydCBzZXR0aW5ncyBhcmU6CisgICAgKiAxMTUyMDAgYmF1ZAorICAgICogOCBkYXRhIGJpdHMKKyAgICAqIG5vIHBhcml0eSBiaXQKKyAgICAqIDEgc3RvcCBiaXQKKzIuIFR5cGUgYGhlbHBgIGZvciBhIGxpc3Qgb2YgY29tbWFuZHMKKzMuIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBbQ0xJIFJFQURNRV1bY2xpLXJlYWRtZV0gZm9yIGluc3RydWN0aW9ucyBvbgorICAgc2V0dGluZyB1cCBhIG5ldHdvcmsKKworW2NsaS1yZWFkbWVdOiAuLi8uLi8uLi9zcmMvY2xpL1JFQURNRS5tZAorCitgYGBiYXNoCis+IGhlbHAKK2hlbHAKK2NoYW5uZWwKK2NoaWxkdGltZW91dAorY29udGV4dHJldXNlZGVsYXkKK2V4dGFkZHIKK2V4dHBhbmlkCitpcGFkZHIKK2tleXNlcXVlbmNlCitsZWFkZXJ3ZWlnaHQKK21hc3RlcmtleQorbW9kZQorbmV0ZGF0YXJlZ2lzdGVyCituZXR3b3JraWR0aW1lb3V0CituZXR3b3JrbmFtZQorcGFuaWQKK3BpbmcKK3ByZWZpeAorcmVsZWFzZXJvdXRlcmlkCitybG9jMTYKK3JvdXRlCityb3V0ZXJ1cGdyYWRldGhyZXNob2xkCitzY2FuCitzdGFydAorc3RhdGUKK3N0b3AKK3doaXRlbGlzdAorYGBgCisKKyMjIyBOQ1AgZXhhbXBsZQorCitSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgW3dwYW50dW5kXVt3cGFudHVuZF0gcHJvamVjdCBmb3IgYnVpbGQKK2luc3RydWN0aW9ucyBhbmQgdXNhZ2UgaW5mb3JtYXRpb24uCisKK1t3cGFudHVuZF06IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL3dwYW50dW5kCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2FsYXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmZmU5YwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvYWxhcm0uYwpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl9ydGMuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2RpYWcuaD4KKworLyoqCisgKiAvTk9URTogd2UgY291bGQgdXNlIHN5c3RpY2ssIGJ1dCB0aGF0IHdvdWxkIHNhY3JpZmljZSBhdGxlYXN0IGEgZmV3IG9wcworICogZXZlcnkgbXMsIGFuZCBub3QgcnVuIHdoZW4gdGhlIHByb2Nlc3NvciBpcyBzbGVlcGluZy4KKyAqLworCitzdGF0aWMgdWludDMyX3Qgc1RpbWUwICAgICA9IDA7CitzdGF0aWMgdWludDMyX3Qgc0FsYXJtVGltZSA9IDA7CitzdGF0aWMgYm9vbCAgICAgc0lzUnVubmluZyA9IGZhbHNlOworCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0tY2MyNjUwLmgKKyAqLwordm9pZCBjYzI2NTBBbGFybUluaXQodm9pZCkKK3sKKyAgICAvKgorICAgICAqIE5PVEU6IHRoaXMgd2lsbCBub3QgZW5hYmxlIHRoZSBpbmRpdmlkdWFsIHJ0YyBhbGFybSBjaGFubmVscworICAgICAqLworICAgIEFPTlJUQ0VuYWJsZSgpOworICAgIHNJc1J1bm5pbmcgPSB0cnVlOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vYWxhcm0uaAorICovCit1aW50MzJfdCBvdFBsYXRBbGFybUdldE5vdyh2b2lkKQoreworICAgIC8qCisgICAgICogVGhpcyBpcyBjdXJyZW50IHZhbHVlIG9mIFJUQyBhcyBpdCBhcHBlYXJzIGluIHRoZSByZWdpc3Rlci4KKyAgICAgKiBXaXRoIHNlY29uZHMgYXMgdGhlIHVwcGVyIDMyIGJ5dGVzIGFuZCBmcmFjdGlvbnMgb2YgYSBzZWNvbmQgYXMgdGhlCisgICAgICogbG93ZXIgMzIgYnl0ZXMgPDMyLjMyPi4KKyAgICAgKi8KKyAgICB1aW50NjRfdCBydGNWYWwgPSBBT05SVENDdXJyZW50NjRCaXRWYWx1ZUdldCgpOworICAgIHJldHVybiAoKHJ0Y1ZhbCAqIDEwMDApID4+IDMyKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL2FsYXJtLmgKKyAqLwordm9pZCBvdFBsYXRBbGFybVN0YXJ0QXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhVDAsIHVpbnQzMl90IGFEdCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc1RpbWUwID0gYVQwOworICAgIHNBbGFybVRpbWUgPSBhRHQ7CisgICAgc0lzUnVubmluZyA9IHRydWU7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9hbGFybS5oCisgKi8KK3ZvaWQgb3RQbGF0QWxhcm1TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc0lzUnVubmluZyA9IGZhbHNlOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0tY2MyNjUwLmgKKyAqLwordm9pZCBjYzI2NTBBbGFybVByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQzMl90IG9mZnNldFRpbWU7CisKKyAgICBpZiAoc0lzUnVubmluZykKKyAgICB7CisgICAgICAgIC8qIHVuc2luZ2VkIHN1YnRyYWN0aW9uIHdpbGwgcmVzdWx0IGluIHRoZSBhYnNvbHV0ZSBvZmZzZXQgKi8KKyAgICAgICAgb2Zmc2V0VGltZSA9IG90UGxhdEFsYXJtR2V0Tm93KCkgLSBzVGltZTA7CisKKyAgICAgICAgaWYgKHNBbGFybVRpbWUgPD0gb2Zmc2V0VGltZSkKKyAgICAgICAgeworICAgICAgICAgICAgc0lzUnVubmluZyA9IGZhbHNlOworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworICAgICAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RQbGF0RGlhZ0FsYXJtRmlyZWQoYUluc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RQbGF0QWxhcm1GaXJlZChhSW5zdGFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NjMjY1MF9jY2ZnLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NjMjY1MF9jY2ZnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxZmE0NwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY2MyNjUwX2NjZmcuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogQ29uZmlndXJlIHRoZSBDdXN0b21lciBDb25maWd1cmF0aW9uIEFyZWEuCisgKi8KKworLy8gZW5hYmxlIGJvb3Rsb2FkZXIgYmFja2Rvb3IKKyNkZWZpbmUgU0VUX0NDRkdfQkxfQ09ORklHX0JPT1RMT0FERVJfRU5BQkxFICAgICAgICAgICAgMHhDNSAgICAgICAvLyBFbmFibGUgUk9NIGJvb3QgbG9hZGVyCisKKyNkZWZpbmUgU0VUX0NDRkdfQkxfQ09ORklHX0JMX0xFVkVMICAgICAgICAgICAgICAgICAgICAgMHgwICAgICAgICAvLyBBY3RpdmUgbG93IHRvIG9wZW4gYm9vdCBsb2FkZXIgYmFja2Rvb3IKKworI2RlZmluZSBTRVRfQ0NGR19CTF9DT05GSUdfQkxfUElOX05VTUJFUiAgICAgICAgICAgICAgICAweDBEICAgICAgIC8vIERJTzEzIChCVE4tMSBidXR0b24pIG9uIENDMjY1MCBMYXVuY2hQYWQgQm9hcmQgZm9yIGJvb3QgbG9hZGVyIGJhY2tkb29yCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0JMX0NPTkZJR19CTF9QSU5fTlVNQkVSICAgICAgICAgICAgIDB4MEIgICAgICAgLy8gRElPMTEgKFNFTEVDVCBidXR0b24pIG9uIENDMjY1MERLIChRRk40OC83KjcpIGZvciBib290IGxvYWRlciBiYWNrZG9vcgorCisjZGVmaW5lIFNFVF9DQ0ZHX0JMX0NPTkZJR19CTF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDB4QzUgICAgICAgLy8gRW5hYmxlZCBib290IGxvYWRlciBiYWNrZG9vcgorCisjZGVmaW5lIFNFVF9DQ0ZHX0lNQUdFX1ZBTElEX0NPTkZfSU1BR0VfVkFMSUQgICAgICAgICAgIDB4MDAwMDAwMDAgLy8gRmxhc2ggaW1hZ2UgaXMgdmFsaWQKKworLyoKKyAqIEluY2x1ZGUgdGhlIGRlZmF1bHQgY2NmZyBzdHJ1Y3QgYW5kIGNvbmZpZ3VyYXRpb24gY29kZS4KKyAqLworI2luY2x1ZGUgPHN0YXJ0dXBfZmlsZXMvY2NmZy5jPgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jYzI2NTBfcmFkaW8uaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY2MyNjUwX3JhZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyOGFmNwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY2MyNjUwX3JhZGlvLmgKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0MyNjUwX1JBRElPX0hfCisjZGVmaW5lIENDMjY1MF9SQURJT19IXworCisjaW5jbHVkZSA8ZHJpdmVybGliL3JmX2llZWVfY21kLmg+CisKK2VudW0KK3sKKyAgICBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfTUFTSyAgICAgICAgPSAweDcsICAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYpIFBTRFUuRkNGLmZyYW1lVHlwZQorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9BQ0sgICAgICAgICA9IDB4MiwgICAgIC8vLzwgKElFRUUgODAyLjE1LjQtMjAwNikgZnJhbWUgdHlwZTogQUNLCisgICAgSUVFRTgwMjE1NF9GUkFNRV9QRU5ESU5HICAgICAgICAgID0gKDE8PDQpLCAgLy8vPCAoSUVFRSA4MDIuMTUuNC0yMDA2KSBQU0RVLkZDRi5iRnJhbWVQZW5kaW5nCisgICAgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCAgICAgICAgICAgID0gKDE8PDUpLCAgLy8vPCAoSUVFRSA4MDIuMTUuNC0yMDA2KSBQU0RVLkZDRi5iQVIKKyAgICBJRUVFODAyMTU0X0RTTl9PRkZTRVQgICAgICAgICAgICAgPSAyLCAgICAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYpIFBTRFUuc2VxdWVuY2VOdW1iZXIKKyAgICBJRUVFODAyMTU0X01BQ19NSU5fQkUgICAgICAgICAgICAgPSAxLCAgICAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYpIG1hY01pbkJFCisgICAgSUVFRTgwMjE1NF9NQUNfTUFYX0JFICAgICAgICAgICAgID0gNSwgICAgICAgLy8vPCAoSUVFRSA4MDIuMTUuNC0yMDA2KSBtYWNNYXhCRQorICAgIElFRUU4MDIxNTRfTUFDX01BWF9DU01BX0JBQ0tPRkZTICA9IDQsICAgICAgIC8vLzwgKElFRUUgODAyLjE1LjQtMjAwNikgbWFjTWF4Q1NNQUJhY2tvZmZzCisgICAgSUVFRTgwMjE1NF9NQUNfTUFYX0ZSQU1FU19SRVRSSUVTID0gMywgICAgICAgLy8vPCAoSUVFRSA4MDIuMTUuNC0yMDA2KSBtYWNNYXhGcmFtZVJldHJpZXMKKyAgICBJRUVFODAyMTU0X0FfVUlOVF9CQUNLT0ZGX1BFUklPRCAgPSAyMCwgICAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYgNy40LjEpIE1BQyBjb25zdGFudHMKKyAgICBJRUVFODAyMTU0X0FfVFVSTkFST1VORF9USU1FICAgICAgPSAxMiwgICAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYgNi40LjEpIFBIWSBjb25zdGFudHMKKyAgICBJRUVFODAyMTU0X1BIWV9TSFJfRFVSQVRJT04gICAgICAgPSAxMCwKKyAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYgNi40LjIpIFBIWSBQSUIgYXR0cmlidXRlLCBzcGVjaWZpY2FsbHkgdGhlIE8tUVBTSyBQSFkKKyAgICBJRUVFODAyMTU0X1BIWV9TWU1CT0xTX1BFUl9PQ1RFVCAgPSAyLAorICAgIC8vLzwgKElFRUUgODAyLjE1LjQtMjAwNiA2LjQuMikgUEhZIFBJQiBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSB0aGUgTy1RUFNLIFBIWQorICAgIElFRUU4MDIxNTRfTUFDX0FDS19XQUlUX0RVUkFUSU9OICA9IChJRUVFODAyMTU0X0FfVUlOVF9CQUNLT0ZGX1BFUklPRCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElFRUU4MDIxNTRfQV9UVVJOQVJPVU5EX1RJTUUgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVFRTgwMjE1NF9QSFlfU0hSX0RVUkFUSU9OICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDYgKiBJRUVFODAyMTU0X1BIWV9TWU1CT0xTX1BFUl9PQ1RFVCkpLAorICAgIC8vLzwgKElFRUUgODAyLjE1LjQtMjAwNiA3LjQuMikgbWFjQWNrV2FpdER1cmF0aW9uIFBJQiBhdHRyaWJ1dGUKKyAgICBJRUVFODAyMTU0X1NZTUJPTFNfUEVSX1NFQyAgICAgICAgPSA2MjUwMCAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYgNi41LjMuMikgTy1RUFNLIHN5bWJvbCByYXRlCit9OworCitlbnVtCit7CisgICAgQ0MyNjUwX1JBVF9USUNLU19QRVJfU0VDICAgICAgICAgID0gNDAwMDAwMCwgLy8vPCA0TUh6IGNsb2NrCisgICAgQ0MyNjUwX0lOVkFMSURfUlNTSSAgICAgICAgICAgICAgID0gMTI3LAorICAgIENDMjY1MF9VTktOT1dOX0VVSTY0ICAgICAgICAgICAgICA9IDB4RkYsCisgICAgLy8vPCBJZiB0aGUgRVVJNjQgcmVhZCBmcm9tIHRoZSBjY2ZnIGlzIGFsbCBvbmVzIHRoZW4gdGhlIGN1c3RvbWVyIGRpZCBub3Qgc2V0IHRoZSBhZGRyZXNzCit9OworCisvKioKKyAqIFRYIFBvd2VyIGRCbSBsb29rdXAgdGFibGUgLSB2YWx1ZXMgZnJvbSBTbWFydFJGIFN0dWRpbworICovCit0eXBlZGVmIHN0cnVjdCBvdXRwdXRfY29uZmlnCit7CisgICAgaW50ICAgICAgZGJtOworICAgIHVpbnQxNl90IHZhbHVlOworfSBvdXRwdXRfY29uZmlnX3Q7CisKK3N0YXRpYyBjb25zdCBvdXRwdXRfY29uZmlnX3QgcmdPdXRwdXRQb3dlcltdID0KK3sKKyAgICB7ICAgNSwgMHg5MzMwfSwKKyAgICB7ICAgNCwgMHg5MzI0fSwKKyAgICB7ICAgMywgMHg1YTFjfSwKKyAgICB7ICAgMiwgMHg0ZTE4fSwKKyAgICB7ICAgMSwgMHg0MjE0fSwKKyAgICB7ICAgMCwgMHgzMTYxfSwKKyAgICB7ICAtMywgMHgyNTU4fSwKKyAgICB7ICAtNiwgMHgxZDUyfSwKKyAgICB7ICAtOSwgMHgxOTRlfSwKKyAgICB7IC0xMiwgMHgxNDRifSwKKyAgICB7IC0xNSwgMHgwY2NifSwKKyAgICB7IC0xOCwgMHgwY2M5fSwKKyAgICB7IC0yMSwgMHgwY2M3fSwKK307CisKKyNkZWZpbmUgT1VUUFVUX0NPTkZJR19DT1VOVCAoc2l6ZW9mKHJnT3V0cHV0UG93ZXIpIC8gc2l6ZW9mKHJnT3V0cHV0UG93ZXJbMF0pKQorCisvKiBNYXggYW5kIE1pbiBPdXRwdXQgUG93ZXIgaW4gZEJtICovCisjZGVmaW5lIE9VVFBVVF9QT1dFUl9NSU4gICAgIChyZ091dHB1dFBvd2VyW09VVFBVVF9DT05GSUdfQ09VTlQgLSAxXS5kYm0pCisjZGVmaW5lIE9VVFBVVF9QT1dFUl9NQVggICAgIChyZ091dHB1dFBvd2VyWzBdLmRibSkKKyNkZWZpbmUgT1VUUFVUX1BPV0VSX1VOS05PV04gMHhGRkZGCisKKy8qKgorICogcmV0dXJuIHZhbHVlIHVzZWQgd2hlbiBzZWFyY2hpbmcgdGhlIHNvdXJjZSBtYXRjaCBhcnJheQorICovCisjZGVmaW5lIENDMjY1MF9TUkNfTUFUQ0hfTk9ORSAweEZGCisKKy8qKgorICogbnVtYmVyIG9mIGV4dGVuZGVkIGFkZHJlc3NlcyB1c2VkIGZvciBzb3VyY2UgbWF0Y2hpbmcKKyAqLworI2RlZmluZSBDQzI2NTBfRVhUQUREX1NSQ19NQVRDSF9OVU0gMTAKKworLyoqCisgKiBzdHJ1Y3R1cmUgZm9yIHNvdXJjZSBtYXRjaGluZyBleHRlbmRlZCBhZGRyZXNzZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg0KSkpIGV4dF9zcmNfbWF0Y2hfZGF0YQoreworICAgIHVpbnQzMl90IHNyY01hdGNoRW5bKChDQzI2NTBfRVhUQUREX1NSQ19NQVRDSF9OVU0gKyAzMSkgLyAzMildOworICAgIHVpbnQzMl90IHNyY1BlbmRFblsoKENDMjY1MF9FWFRBRERfU1JDX01BVENIX05VTSArIDMxKSAvIDMyKV07CisgICAgdWludDY0X3QgZXh0QWRkckVudFtDQzI2NTBfRVhUQUREX1NSQ19NQVRDSF9OVU1dOworfSBleHRfc3JjX21hdGNoX2RhdGFfdDsKKworLyoqCisgKiBudW1iZXIgb2Ygc2hvcnQgYWRkcmVzc2VzIHVzZWQgZm9yIHNvdXJjZSBtYXRjaGluZworICovCisjZGVmaW5lIENDMjY1MF9TSE9SVEFERF9TUkNfTUFUQ0hfTlVNIDEwCisKKy8qKgorICogc3RydWN0dXJlIGZvciBzb3VyY2UgbWF0Y2hpbmcgc2hvcnQgYWRkcmVzc2VzCisgKi8KK3R5cGVkZWYgc3RydWN0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKSBzaG9ydF9zcmNfbWF0Y2hfZGF0YQoreworICAgIHVpbnQzMl90IHNyY01hdGNoRW5bKChDQzI2NTBfU0hPUlRBRERfU1JDX01BVENIX05VTSArIDMxKSAvIDMyKV07CisgICAgdWludDMyX3Qgc3JjUGVuZEVuWygoQ0MyNjUwX1NIT1JUQUREX1NSQ19NQVRDSF9OVU0gKyAzMSkgLyAzMildOworICAgIHJmY19zaG9ydEFkZHJFbnRyeV90IGV4dEFkZHJFbnRbQ0MyNjUwX1NIT1JUQUREX1NSQ19NQVRDSF9OVU1dOworfSBzaG9ydF9zcmNfbWF0Y2hfZGF0YV90OworCisvKioKKyAqIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGluIHJlY2VpdmUgc3RydWN0CisgKgorICogZGVmaW5lZCBpbiBUYWJsZSAyMy0xMCBvZiB0aGUgY2MyNnh4IFRSTQorICovCisjZGVmaW5lIERBVEFfRU5UUllfTEVOU1pfQllURSAxCisKKy8qKgorICogYWRkcmVzcyB0eXBlIGZvciBAcmVmIHJmQ29yZU1vZGlmeVNvdXJjZU1hdGNoRW50cnkoKQorICovCit0eXBlZGVmIGVudW0gY2MyNjUwX2FkZHJlc3MKK3sKKyAgICBTSE9SVF9BRERSRVNTID0gMSwKKyAgICBFWFRfQUREUkVTUyAgID0gMCwKK30gY2MyNjUwX2FkZHJlc3NfdDsKKworLyoqCisgKiBUaGlzIGVudW0gcmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYSByYWRpby4KKyAqIEluaXRpYWxseSwgYSByYWRpbyBpcyBpbiB0aGUgRGlzYWJsZWQgc3RhdGUuCisgKgorICogVGhlIGZvbGxvd2luZyBhcmUgdmFsaWQgcmFkaW8gc3RhdGUgdHJhbnNpdGlvbnMgZm9yIHRoZSBjYzI2NTA6CisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUmFkaW8gT04pCisgKiAgKy0tLS0tLS0tLS0rICBFbmFibGUoKSAgKy0tLS0tLS0rICBSZWNlaXZlKCkgICArLS0tLS0tLS0tKyAgIFRyYW5zbWl0KCkgICstLS0tLS0tLS0tKworICogIHwgICAgICAgICAgfC0tLS0tLS0tLS0tPnwgICAgICAgfC0tLS0tLS0tLS0tLS0+fCAgICAgICAgIHwtLS0tLS0tLS0tLS0tLT58ICAgICAgICAgIHwKKyAqICB8IERpc2FibGVkIHwgICAgICAgICAgICB8IFNsZWVwIHwgICAgICAgICAgICAgIHwgUmVjZWl2ZSB8ICAgICAgICAgICAgICAgfCBUcmFuc21pdCB8CisgKiAgfCAgICAgICAgICB8PC0tLS0tLS0tLS0tfCAgICAgICB8PC0tLS0tLS0tLS0tLS18ICAgICAgICAgfDwtLS0tLS0tLS0tLS0tLXwgICAgICAgICAgfAorICogICstLS0tLS0tLS0tKyAgRGlzYWJsZSgpIHwgICAgICAgfCAgIFNsZWVwKCkgICAgfCAgICAgICAgIHw8LS0gIFJlY2VpdmUoKSArLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgKFJhZGlvIE9GRikgICstLS0tLS0tLS0rICAgXCAgICAgICAgICAgfCB0cmFuc21pdAorICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXC0tLS0tXCAgICB8IGNvbXBsZXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8IEVuZXJneVNjYW4oKSArLS0tLS0tLS0rICAgICAgICAgICAgfCAgIFYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwtLS0tLS0tLS0tLS0tPnwgICAgICAgIHwgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgfCBFZFNjYW4gfCAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8PC0tLS0tLS0tLS0tLS18ICAgICAgICB8ICAgICAgfCBUcmFuc21pdENvbXBsZXRlIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgIHNpZ25hbCBFRCAgIHwgICAgICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgc2NhbiBkb25lICAgKy0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogVGhlc2Ugc3RhdGVzIHNsaWdodGx5IGRpZmZlciBmcm9tIHRoZSBzdGF0ZXMgaW4gXHJlZiBpbmNsdWRlL3BsYXRmb3JtL3JhZGlvLmguCisgKiBUaGUgYWRkaXRpb25hbCBzdGF0ZXMgdGhlIHBoeSBjYW4gYmUgaW4gYXJlIGR1ZSB0byB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZQorICogb2YgdGhlIENNMCByYWRpbyBjb3JlLgorICoKKyAqIHwgc3RhdGUgICAgICAgICAgICB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAqIHwgRGlzYWJsZWQgICAgICAgICB8IFRoZSByZmNvcmUgcG93ZXJkb21haW4gaXMgb2ZmIGFuZCB0aGUgUkZDUEUgaXMgb2ZmIHwKKyAqIHwgU2xlZXAgICAgICAgICAgICB8IFRoZSBSRkNPUkUgUEQgaXMgb24sIGFuZCB0aGUgUkZDUEUgaXMgaW4gSUVFRSBtb2RlIHwKKyAqIHwgUmVjZWl2ZSAgICAgICAgICB8IFRoZSBSRkNQRSBpcyBydW5uaW5nIGEgQ01EX0lFRUVfUlggICAgICAgICAgICAgICAgIHwKKyAqIHwgVHJhbnNtaXQgICAgICAgICB8IFRoZSBSRkNQRSBpcyBydW5uaW5nIGEgdHJhbnNtaXQgY29tbWFuZCBzdHJpbmcgICAgIHwKKyAqIHwgVHJhbnNtaXRDb21wbGV0ZSB8IFRoZSB0cmFuc21pdCBjb21tYW5kIHN0cmluZyBoYXMgY29tcGxldGVkICAgICAgICAgIHwKKyAqIHwgRWRTY2FuICAgICAgICAgICB8IFRoZSBSRkNQRSBpcyBydW5uaW5nIGEgQ01EX0lFRUVfRURfU0NBTiAgICAgICAgICAgIHwKKyAqCisgKiBcbm90ZSBUaGUgUkFUIHN0YXJ0IGFuZCBSYWRpbyBTZXR1cCBjb21tYW5kcyBtYXkgYmUgbW92ZWQgdG8gdGhlIFJlY2VpdmUoKQorICogICAgICAgYW5kIEVuZXJneVNjYW4oKSB0cmFuc2l0aW9ucyBpbiB0aGUgZnV0dXJlLgorICovCit0eXBlZGVmIGVudW0gY2MyNjUwX1BoeVN0YXRlCit7CisgICAgY2MyNjUwX3N0YXRlRGlzYWJsZWQgPSAwLAorICAgIGNjMjY1MF9zdGF0ZVNsZWVwLAorICAgIGNjMjY1MF9zdGF0ZVJlY2VpdmUsCisgICAgY2MyNjUwX3N0YXRlRWRTY2FuLAorICAgIGNjMjY1MF9zdGF0ZVRyYW5zbWl0LAorICAgIGNjMjY1MF9zdGF0ZVRyYW5zbWl0Q29tcGxldGUsCit9IGNjMjY1MF9QaHlTdGF0ZTsKKworI2VuZGlmIC8qIENDMjY1MF9SQURJT19IXyAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jYzI2NTBfc3RhcnR1cC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jYzI2NTBfc3RhcnR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMGI1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NjMjY1MF9zdGFydHVwLmMKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEluY2x1ZGUgdGhlIHN0YW5kYXJkIHN0YXJ0dXAgZmlsZXMgZm9yIHRoZSBnY2MgdG9vbGNoYWluCisgKi8KKyNpbmNsdWRlIDxzdGFydHVwX2ZpbGVzL3N0YXJ0dXBfZ2NjLmM+CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NyeXB0by9hZXNfYWx0LmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NyeXB0by9hZXNfYWx0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5OTRjYQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL2Flc19hbHQuYwpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJtYmVkdGxzL2Flcy5oIgorI2luY2x1ZGUgImFlc19hbHQuaCIKKworI2lmZGVmIE1CRURUTFNfQUVTX0FMVAorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NyeXB0by5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9wcmNtLmg+CisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorCisjZGVmaW5lIENDMjY1MF9BRVNfS0VZX1VOVVNFRCAoLTEpCisjZGVmaW5lIENDMjY1MF9BRVNfQ1RYX01BR0lDICAoMHg3RSkKKworLyoqCisgKiBiaXRtYXAgb2Ygd2hpY2gga2V5IHN0b3JlcyBhcmUgY3VycmVudGx5IHVzZWQKKyAqLworc3RhdGljIHVpbnQ4X3Qgc1VzZWRLZXlzID0gMDsKKworLyoqCisgKiBudW1iZXIgb2YgYWN0aXZlIGNvbnRleHRzLCB1c2VkIGZvciBwb3dlciBvbi9vZmYgb2YgdGhlIGNyeXB0byBjb3JlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc1JlZk51bSA9IDA7CisKK3ZvaWQgbWJlZHRsc19hZXNfaW5pdChtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgpCit7CisgICAgaWYgKHNSZWZOdW0rKyA9PSAwKQorICAgIHsKKyAgICAgICAgLyogZW5hYmxlIHRoZSBjcnlwdG8gY29yZSAqLworICAgICAgICAvKiBUaGUgVFJORyBzaG91bGQgYWxyZWFkeSBiZSBydW5uaW5nIGJlZm9yZSB3ZSBldmVyIGFzayB0aGUgQUVTIGNvcmUKKyAgICAgICAgICogdG8gZG8gYW55dGhpbmcsIGlmIHRoZXJlIGlzIGFueSBzY2VuYXJpbyB0aGF0IHRoZSBUUk5HIHBvd2VycyBvZmYKKyAgICAgICAgICogdGhlIHBlcmlwaGVyYWwgcG93ZXIgZG9tYWluIHVzZSB0aGlzIGNvZGUgdG8gcmVwb3dlciBpdAorCisgICAgICAgIFBSQ01Qb3dlckRvbWFpbk9uKFBSQ01fRE9NQUlOX1BFUklQSCk7CisgICAgICAgIHdoaWxlIChQUkNNUG93ZXJEb21haW5TdGF0dXMoUFJDTV9ET01BSU5fUEVSSVBIKSAhPSBQUkNNX0RPTUFJTl9QT1dFUl9PTik7CisgICAgICAgICovCisgICAgICAgIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlKFBSQ01fUEVSSVBIX0NSWVBUTyk7CisgICAgICAgIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUoUFJDTV9QRVJJUEhfQ1JZUFRPKTsKKyAgICAgICAgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUoUFJDTV9QRVJJUEhfQ1JZUFRPKTsKKyAgICAgICAgUFJDTUxvYWRTZXQoKTsKKworICAgICAgICB3aGlsZSAoIVBSQ01Mb2FkR2V0KCkpOworCisgICAgfQorCisgICAgY3R4LT5tYWdpYyA9IENDMjY1MF9BRVNfQ1RYX01BR0lDOworICAgIGN0eC0+a2V5X2lkeCA9IENDMjY1MF9BRVNfS0VZX1VOVVNFRDsKK30KKwordm9pZCBtYmVkdGxzX2Flc19mcmVlKG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCkKK3sKKyAgICBvdEVYUEVDVChjdHgtPm1hZ2ljID09IENDMjY1MF9BRVNfQ1RYX01BR0lDKTsKKworICAgIGlmIChjdHgtPmtleV9pZHggIT0gQ0MyNjUwX0FFU19LRVlfVU5VU0VEKQorICAgIHsKKyAgICAgICAgc1VzZWRLZXlzICY9IH4oMSA8PCBjdHgtPmtleV9pZHgpOworICAgIH0KKworICAgIGlmICgtLXNSZWZOdW0gPT0gMCkKKyAgICB7CisgICAgICAgIC8qIGRpc2FibGUgdGhlIGNyeXB0byBjb3JlICovCisgICAgICAgIC8qIFRoZSBUUk5HIGNvcmUgbmVlZHMgdGhlIHBlcmlwaGVyYWwgcG93ZXIgZG9tYWluIHBvd2VyZWQgb24gdG8KKyAgICAgICAgICogZnVuY3Rpb24uIGlmIHRoZXJlIGlzIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBwb3dlciBkb21haW4gbXVzdCBiZQorICAgICAgICAgKiBwb3dlcmVkIG9mZiwgdXNlIHRoaXMgY29kZSB0byBkbyBzby4KKworICAgICAgICBQUkNNUG93ZXJEb21haW5PZmYoUFJDTV9ET01BSU5fUEVSSVBIKTsKKyAgICAgICAgd2hpbGUgKFBSQ01Qb3dlckRvbWFpblN0YXR1cyhQUkNNX0RPTUFJTl9QRVJJUEgpICE9IFBSQ01fRE9NQUlOX1BPV0VSX09GRik7CisgICAgICAgICovCisgICAgICAgIFBSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZShQUkNNX1BFUklQSF9DUllQVE8pOworICAgICAgICBQUkNNUGVyaXBoZXJhbFNsZWVwRGlzYWJsZShQUkNNX1BFUklQSF9DUllQVE8pOworICAgICAgICBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcERpc2FibGUoUFJDTV9QRVJJUEhfQ1JZUFRPKTsKKyAgICAgICAgUFJDTUxvYWRTZXQoKTsKKworICAgICAgICB3aGlsZSAoIVBSQ01Mb2FkR2V0KCkpOworCisgICAgfQorCisgICAgbWVtc2V0KCh2b2lkICopY3R4LCAweDAwLCBzaXplb2YoY3R4KSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitpbnQgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyhtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgaW50IGtleWJpdHMpCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfaWR4OworICAgIGludCByZXR2YWwgPSAwOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGN0eC0+bWFnaWMgPT0gQ0MyNjUwX0FFU19DVFhfTUFHSUMsIHJldHZhbCA9IC0xKTsKKworICAgIGlmIChjdHgtPmtleV9pZHggIT0gQ0MyNjUwX0FFU19LRVlfVU5VU0VEKQorICAgIHsKKyAgICAgICAgc1VzZWRLZXlzICY9IH4oMSA8PCBjdHgtPmtleV9pZHgpOworICAgIH0KKworICAgIC8qIG91ciBoYXJkd2FyZSBvbmx5IHN1cHBvcnRzIDEyOCBiaXQga2V5cyAqLworICAgIG90RVhQRUNUX0FDVElPTihrZXliaXRzID09IDEyOHUsIHJldHZhbCA9IE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0tFWV9MRU5HVEgpOworCisgICAgZm9yIChrZXlfaWR4ID0gMDsgKChzVXNlZEtleXMgPj4ga2V5X2lkeCkgJiAweDAxKSAhPSAwICYmIGtleV9pZHggPCA4OyBrZXlfaWR4KyspOworCisgICAgLyogd2UgaGF2ZSBubyBtb3JlIHJvb20gZm9yIHRoaXMga2V5ICovCisgICAgb3RFWFBFQ1RfQUNUSU9OKGtleV9pZHggPCA4LCByZXR2YWwgPSAtMik7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oQ1JZUFRPQWVzTG9hZEtleSgodWludDMyX3QgKilrZXksIGtleV9pZHgpID09IEFFU19TVUNDRVNTLAorICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RIKTsKKworICAgIHNVc2VkS2V5cyB8PSAoMSA8PCBrZXlfaWR4KTsKKyAgICBjdHgtPmtleV9pZHggPSBrZXlfaWR4OworZXhpdDoKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitpbnQgbWJlZHRsc19hZXNfc2V0a2V5X2RlYyhtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgaW50IGtleWJpdHMpCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfaWR4OworICAgIGludCByZXR2YWwgPSAwOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGN0eC0+bWFnaWMgPT0gQ0MyNjUwX0FFU19DVFhfTUFHSUMsIHJldHZhbCA9IC0xKTsKKworICAgIGlmIChjdHgtPmtleV9pZHggIT0gQ0MyNjUwX0FFU19LRVlfVU5VU0VEKQorICAgIHsKKyAgICAgICAgc1VzZWRLZXlzICY9IH4oMSA8PCBjdHgtPmtleV9pZHgpOworICAgIH0KKworICAgIC8qIG91ciBoYXJkd2FyZSBvbmx5IHN1cHBvcnRzIDEyOCBiaXQga2V5cyAqLworICAgIG90RVhQRUNUX0FDVElPTihrZXliaXRzID09IDEyOHUsIHJldHZhbCA9IE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0tFWV9MRU5HVEgpOworCisgICAgZm9yIChrZXlfaWR4ID0gMDsgKChzVXNlZEtleXMgPj4ga2V5X2lkeCkgJiAweDAxKSAhPSAwICYmIGtleV9pZHggPCA4OyBrZXlfaWR4KyspOworCisgICAgLyogd2UgaGF2ZSBubyBtb3JlIHJvb20gZm9yIHRoaXMga2V5ICovCisgICAgb3RFWFBFQ1RfQUNUSU9OKGtleV9pZHggPCA4LCByZXR2YWwgPSAtMik7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oQ1JZUFRPQWVzTG9hZEtleSgodWludDMyX3QgKilrZXksIGtleV9pZHgpID09IEFFU19TVUNDRVNTLAorICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RIKTsKKworICAgIHNVc2VkS2V5cyB8PSAoMSA8PCBrZXlfaWR4KTsKKyAgICBjdHgtPmtleV9pZHggPSBrZXlfaWR4OworZXhpdDoKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMtRUNCIGJsb2NrIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQUVTX0VOQ1JZUFQgb3IgTUJFRFRMU19BRVNfREVDUllQVAorICogXHBhcmFtIGlucHV0ICAgIDE2LWJ5dGUgaW5wdXQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICAxNi1ieXRlIG91dHB1dCBibG9jaworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2VjYihtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsIGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdKQoreworICAgIGludCByZXR2YWwgPSAtMTsKKworICAgIHJldHZhbCA9IENSWVBUT0Flc0VjYigodWludDMyX3QgKilpbnB1dCwgKHVpbnQzMl90ICopb3V0cHV0LCBjdHgtPmtleV9pZHgsIG1vZGUgPT0gTUJFRFRMU19BRVNfRU5DUllQVCwgZmFsc2UpOworICAgIG90RVhQRUNUKHJldHZhbCA9PSBBRVNfU1VDQ0VTUyk7CisKKyAgICB3aGlsZSAoKHJldHZhbCA9IENSWVBUT0Flc0VjYlN0YXR1cygpKSA9PSAgQUVTX0RNQV9CU1kpOworCisgICAgQ1JZUFRPQWVzRWNiRmluaXNoKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0FMVCAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jcnlwdG8vYWVzX2FsdC5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jcnlwdG8vYWVzX2FsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDljZDkKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NyeXB0by9hZXNfYWx0LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTUJFRFRMU19BRVNfQUxUX0gKKyNkZWZpbmUgTUJFRFRMU19BRVNfQUxUX0gKKworI2lmbmRlZiBNQkVEVExTX0NPTkZJR19GSUxFCisjaW5jbHVkZSAiY2MyNjUwLW1iZWR0bHMtY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZmRlZiBNQkVEVExTX0FFU19BTFQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQ4X3QgICAgIG1hZ2ljOworICAgIHNpZ25lZCBjaGFyIGtleV9pZHg7Cit9IG1iZWR0bHNfYWVzX2NvbnRleHQ7CisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgQUVTIGNvbnRleHQKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IEFFUyBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19hZXNfaW5pdChtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgpOworCisvKioKKyAqIEBicmllZiAgICAgICAgICBDbGVhciBBRVMgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19hZXNfZnJlZShtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgpOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMga2V5IHNjaGVkdWxlIChlbmNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgIGVuY3J5cHRpb24ga2V5CisgKiBccGFyYW0ga2V5Yml0cyAgbXVzdCBiZSAxMjgsIDE5MiBvciAyNTYKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMpOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMga2V5IHNjaGVkdWxlIChkZWNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgIGRlY3J5cHRpb24ga2V5CisgKiBccGFyYW0ga2V5Yml0cyAgbXVzdCBiZSAxMjgsIDE5MiBvciAyNTYKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2Flc19zZXRrZXlfZGVjKG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMpOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMtRUNCIGJsb2NrIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQUVTX0VOQ1JZUFQgb3IgTUJFRFRMU19BRVNfREVDUllQVAorICogXHBhcmFtIGlucHV0ICAgIDE2LWJ5dGUgaW5wdXQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICAxNi1ieXRlIG91dHB1dCBibG9jaworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2VjYihtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsIGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0FMVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19BRVNfQUxUX0ggKi8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL2NjMjY1MC1tYmVkdGxzLWNvbmZpZy5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jcnlwdG8vY2MyNjUwLW1iZWR0bHMtY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwZjMyNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL2NjMjY1MC1tYmVkdGxzLWNvbmZpZy5oCkBAIC0wLDAgKzEsMjU0MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNQkVEVExTX0NPTkZJR19ICisjZGVmaW5lIE1CRURUTFNfQ09ORklHX0gKKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaD4KKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSkKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNlbmRpZgorCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IFN5c3RlbSBzdXBwb3J0CisgKgorICogVGhpcyBzZWN0aW9uIHNldHMgc3lzdGVtIHNwZWNpZmljIHNldHRpbmdzLgorICogXHsKKyAqLworCisvKioKKyAqIFxkZWYgTUJFRFRMU19IQVZFX0FTTQorICoKKyAqIFRoZSBjb21waWxlciBoYXMgc3VwcG9ydCBmb3IgYXNtKCkuCisgKgorICogUmVxdWlyZXMgc3VwcG9ydCBmb3IgYXNtKCkgaW4gY29tcGlsZXIuCisgKgorICogVXNlZCBpbjoKKyAqICAgICAgbGlicmFyeS90aW1pbmcuYworICogICAgICBsaWJyYXJ5L3BhZGxvY2suYworICogICAgICBpbmNsdWRlL21iZWR0bHMvYm5fbXVsLmgKKyAqCisgKiBDb21tZW50IHRvIGRpc2FibGUgdGhlIHVzZSBvZiBhc3NlbWJseSBjb2RlLgorICovCisjZGVmaW5lIE1CRURUTFNfSEFWRV9BU00KKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRV9TU0UyCisgKgorICogQ1BVIHN1cHBvcnRzIFNTRTIgaW5zdHJ1Y3Rpb24gc2V0LgorICoKKyAqIFVuY29tbWVudCBpZiB0aGUgQ1BVIHN1cHBvcnRzIFNTRTIgKElBLTMyIHNwZWNpZmljKS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfSEFWRV9TU0UyCisKKy8qKgorICogXGRlZiBNQkVEVExTX0hBVkVfVElNRQorICoKKyAqIFN5c3RlbSBoYXMgdGltZS5oIGFuZCB0aW1lKCkuCisgKiBUaGUgdGltZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGNvcnJlY3QsIG9ubHkgdGltZSBkaWZmZXJlbmNlcyBhcmUgdXNlZCwKKyAqIGJ5IGNvbnRyYXN0IHdpdGggTUJFRFRMU19IQVZFX1RJTUVfREFURQorICoKKyAqIENvbW1lbnQgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCB0aW1lIGZ1bmN0aW9ucworICovCisvLyNkZWZpbmUgTUJFRFRMU19IQVZFX1RJTUUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRV9USU1FX0RBVEUKKyAqCisgKiBTeXN0ZW0gaGFzIHRpbWUuaCBhbmQgdGltZSgpLCBnbXRpbWUoKSBhbmQgdGhlIGNsb2NrIGlzIGNvcnJlY3QuCisgKiBUaGUgdGltZSBuZWVkcyB0byBiZSBjb3JyZWN0IChub3QgbmVjZXNhcmlseSB2ZXJ5IGFjY3VyYXRlLCBidXQgYXQgbGVhc3QKKyAqIHRoZSBkYXRlIHNob3VsZCBiZSBjb3JyZWN0KS4gVGhpcyBpcyB1c2VkIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgcGVyaW9kIG9mCisgKiBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisgKgorICogQ29tbWVudCBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgY29ycmVjdCBjbG9jay4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfSEFWRV9USU1FX0RBVEUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZCisgKgorICogRW5hYmxlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBsYXllci4KKyAqCisgKiBCeSBkZWZhdWx0IG1iZWQgVExTIHVzZXMgdGhlIHN5c3RlbS1wcm92aWRlZCBjYWxsb2MoKSBhbmQgZnJlZSgpLgorICogVGhpcyBhbGxvd3MgZGlmZmVyZW50IGFsbG9jYXRvcnMgKHNlbGYtaW1wbGVtZW50ZWQgb3IgcHJvdmlkZWQpIHRvIGJlCisgKiBwcm92aWRlZCB0byB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIuCisgKgorICogRW5hYmxpbmcgTUJFRFRMU19QTEFURk9STV9NRU1PUlkgd2l0aG91dCB0aGUKKyAqIE1CRURUTFNfUExBVEZPUk1fe0ZSRUUsQ0FMTE9DfV9NQUNST3Mgd2lsbCBwcm92aWRlCisgKiAibWJlZHRsc19wbGF0Zm9ybV9zZXRfY2FsbG9jX2ZyZWUoKSIgYWxsb3dpbmcgeW91IHRvIHNldCBhbiBhbHRlcm5hdGl2ZSBjYWxsb2MoKSBhbmQKKyAqIGZyZWUoKSBmdW5jdGlvbiBwb2ludGVyIGF0IHJ1bnRpbWUuCisgKgorICogRW5hYmxpbmcgTUJFRFRMU19QTEFURk9STV9NRU1PUlkgYW5kIHNwZWNpZnlpbmcKKyAqIE1CRURUTFNfUExBVEZPUk1fe0NBTExPQyxGUkVFfV9NQUNST3Mgd2lsbCBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0aGUKKyAqIGFsdGVybmF0ZSBmdW5jdGlvbiBhdCBjb21waWxlIHRpbWUuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUExBVEZPUk1fQworICoKKyAqIEVuYWJsZSB0aGlzIGxheWVyIHRvIGFsbG93IHVzZSBvZiBhbHRlcm5hdGl2ZSBtZW1vcnkgYWxsb2NhdG9ycy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX01FTU9SWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TCisgKgorICogRG8gbm90IGFzc2lnbiBzdGFuZGFyZCBmdW5jdGlvbnMgaW4gdGhlIHBsYXRmb3JtIGxheWVyIChlLmcuIGNhbGxvYygpIHRvCisgKiBNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MgYW5kIHByaW50ZigpIHRvIE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URikKKyAqCisgKiBUaGlzIG1ha2VzIHN1cmUgdGhlcmUgYXJlIG5vIGxpbmtpbmcgZXJyb3JzIG9uIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0CisgKiB0aGVzZSBmdW5jdGlvbnMuIFlvdSB3aWxsIEhBVkUgdG8gcHJvdmlkZSBhbHRlcm5hdGl2ZXMsIGVpdGhlciBhdCBydW50aW1lCisgKiB2aWEgdGhlIHBsYXRmb3JtX3NldF94eHgoKSBmdW5jdGlvbnMgb3IgYXQgY29tcGlsZSB0aW1lIGJ5IHNldHRpbmcKKyAqIHRoZSBNQkVEVExTX1BMQVRGT1JNX1NURF9YWFggZGVmaW5lcywgb3IgZW5hYmxpbmcgYQorICogTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8uCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUExBVEZPUk1fQworICoKKyAqIFVuY29tbWVudCB0byBwcmV2ZW50IGRlZmF1bHQgYXNzaWdubWVudCBvZiBzdGFuZGFyZCBmdW5jdGlvbnMgaW4gdGhlCisgKiBwbGF0Zm9ybSBsYXllci4KKyAqLworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQKKyAqCisgKiBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQ6IFVuY29tbWVudCBhIG1hY3JvIHRvIGxldCBtYmVkIFRMUyBzdXBwb3J0IHRoZQorICogZnVuY3Rpb24gaW4gdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGxheWVyLgorICoKKyAqIEV4YW1wbGU6IEluIGNhc2UgeW91IHVuY29tbWVudCBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQsIG1iZWQgVExTIHdpbGwKKyAqIHByb3ZpZGUgYSBmdW5jdGlvbiAibWJlZHRsc19wbGF0Zm9ybV9zZXRfcHJpbnRmKCkiIHRoYXQgYWxsb3dzIHlvdSB0byBzZXQgYW4KKyAqIGFsdGVybmF0aXZlIHByaW50ZiBmdW5jdGlvbiBwb2ludGVyLgorICoKKyAqIEFsbCB0aGVzZSBkZWZpbmUgcmVxdWlyZSBNQkVEVExTX1BMQVRGT1JNX0MgdG8gYmUgZGVmaW5lZCEKKyAqCisgKiBcbm90ZSBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCBpcyByZXF1aXJlZCBvbiBXaW5kb3dzOworICogaXQgd2lsbCBiZSBlbmFibGVkIGF1dG9tYXRpY2FsbHkgYnkgY2hlY2tfY29uZmlnLmgKKyAqCisgKiBcd2FybmluZyBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQgY2Fubm90IGJlIGRlZmluZWQgYXQgdGhlIHNhbWUgdGltZSBhcworICogTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8hCisgKgorICogVW5jb21tZW50IGEgbWFjcm8gdG8gZW5hYmxlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBzcGVjaWZpYyBiYXNlCisgKiBwbGF0Zm9ybSBmdW5jdGlvbgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9FWElUX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HCisgKgorICogTWFyayBkZXByZWNhdGVkIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZXkgZ2VuZXJhdGUgYSB3YXJuaW5nIGlmIHVzZWQuCisgKiBGdW5jdGlvbnMgZGVwcmVjYXRlZCBpbiBvbmUgdmVyc2lvbiB3aWxsIHVzdWFsbHkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dAorICogdmVyc2lvbi4gWW91IGNhbiBlbmFibGUgdGhpcyB0byBoZWxwIHlvdSBwcmVwYXJlIHRoZSB0cmFuc2l0aW9uIHRvIGEgbmV3CisgKiBtYWpvciB2ZXJzaW9uIGJ5IG1ha2luZyBzdXJlIHlvdXIgY29kZSBpcyBub3QgdXNpbmcgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgb25seSB3b3JrcyB3aXRoIEdDQyBhbmQgQ2xhbmcuIFdpdGggb3RoZXIgY29tcGlsZXJzLCB5b3UgbWF5IHdhbnQgdG8KKyAqIHVzZSBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRAorICoKKyAqIFVuY29tbWVudCB0byBnZXQgd2FybmluZ3Mgb24gdXNpbmcgZGVwcmVjYXRlZCBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKKyAqCisgKiBSZW1vdmUgZGVwcmVjYXRlZCBmdW5jdGlvbnMgc28gdGhhdCB0aGV5IGdlbmVyYXRlIGFuIGVycm9yIGlmIHVzZWQuCisgKiBGdW5jdGlvbnMgZGVwcmVjYXRlZCBpbiBvbmUgdmVyc2lvbiB3aWxsIHVzdWFsbHkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dAorICogdmVyc2lvbi4gWW91IGNhbiBlbmFibGUgdGhpcyB0byBoZWxwIHlvdSBwcmVwYXJlIHRoZSB0cmFuc2l0aW9uIHRvIGEgbmV3CisgKiBtYWpvciB2ZXJzaW9uIGJ5IG1ha2luZyBzdXJlIHlvdXIgY29kZSBpcyBub3QgdXNpbmcgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqIFVuY29tbWVudCB0byBnZXQgZXJyb3JzIG9uIHVzaW5nIGRlcHJlY2F0ZWQgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKKworLyogXH0gbmFtZSBTRUNUSU9OOiBTeXN0ZW0gc3VwcG9ydCAqLworCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IG1iZWQgVExTIGZlYXR1cmUgc3VwcG9ydAorICoKKyAqIFRoaXMgc2VjdGlvbiBzZXRzIHN1cHBvcnQgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIG9yIGFyZSBub3QgbmVlZGVkCisgKiB3aXRoaW4gdGhlIG1vZHVsZXMgdGhhdCBhcmUgZW5hYmxlZC4KKyAqIFx7CisgKi8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfVElNSU5HX0FMVAorICoKKyAqIFVuY29tbWVudCB0byBwcm92aWRlIHlvdXIgb3duIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCksCisgKiBtYmVkdGxzX3RpbWluZ19nZXRfdGltZXIoKSwgbWJlZHRsc19zZXRfYWxhcm0oKSwgbWJlZHRsc19zZXQvZ2V0X2RlbGF5KCkKKyAqCisgKiBPbmx5IHdvcmtzIGlmIHlvdSBoYXZlIE1CRURUTFNfVElNSU5HX0MgZW5hYmxlZC4KKyAqCisgKiBZb3Ugd2lsbCBuZWVkIHRvIHByb3ZpZGUgYSBoZWFkZXIgInRpbWluZ19hbHQuaCIgYW5kIGFuIGltcGxlbWVudGF0aW9uIGF0CisgKiBjb21waWxlIHRpbWUuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1RJTUlOR19BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTX0FMVAorICoKKyAqIE1CRURUTFNfX01PRFVMRV9OQU1FX19BTFQ6IFVuY29tbWVudCBhIG1hY3JvIHRvIGxldCBtYmVkIFRMUyB1c2UgeW91cgorICogYWx0ZXJuYXRlIGNvcmUgaW1wbGVtZW50YXRpb24gb2YgYSBzeW1tZXRyaWMgY3J5cHRvIG9yIGhhc2ggbW9kdWxlIChlLmcuCisgKiBwbGF0Zm9ybSBzcGVjaWZpYyBhc3NlbWJseSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb25zKS4gS2VlcCBpbiBtaW5kIHRoYXQKKyAqIHRoZSBmdW5jdGlvbiBwcm90b3R5cGVzIHNob3VsZCByZW1haW4gdGhlIHNhbWUuCisgKgorICogVGhpcyByZXBsYWNlcyB0aGUgd2hvbGUgbW9kdWxlLiBJZiB5b3Ugb25seSB3YW50IHRvIHJlcGxhY2Ugb25lIG9mIHRoZQorICogZnVuY3Rpb25zLCB1c2Ugb25lIG9mIHRoZSBNQkVEVExTX19GVU5DVElPTl9OQU1FX19BTFQgZmxhZ3MuCisgKgorICogRXhhbXBsZTogSW4gY2FzZSB5b3UgdW5jb21tZW50IE1CRURUTFNfQUVTX0FMVCwgbWJlZCBUTFMgd2lsbCBubyBsb25nZXIKKyAqIHByb3ZpZGUgdGhlICJzdHJ1Y3QgbWJlZHRsc19hZXNfY29udGV4dCIgZGVmaW5pdGlvbiBhbmQgb21pdCB0aGUgYmFzZSBmdW5jdGlvbgorICogZGVjbGFyYXRpb25zIGFuZCBpbXBsZW1lbnRhdGlvbnMuICJhZXNfYWx0LmgiIHdpbGwgYmUgaW5jbHVkZWQgZnJvbQorICogImFlcy5oIiB0byBpbmNsdWRlIHRoZSBuZXcgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCisgKgorICogVW5jb21tZW50IGEgbWFjcm8gdG8gZW5hYmxlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZworICogbW9kdWxlLgorICovCisjZGVmaW5lIE1CRURUTFNfQUVTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQVJDNF9BTFQKKy8vI2RlZmluZSBNQkVEVExTX0JMT1dGSVNIX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQ0FNRUxMSUFfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19ERVNfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19YVEVBX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQyX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQ0X0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQ1X0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUklQRU1EMTYwX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBMV9BTFQKKyNkZWZpbmUgTUJFRFRMU19TSEEyNTZfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19TSEE1MTJfQUxUCisKKy8qKgorICogXGRlZiBNQkVEVExTX01EMl9QUk9DRVNTX0FMVAorICoKKyAqIE1CRURUTFNfX0ZVTkNUSU9OX05BTUVfX0FMVDogVW5jb21tZW50IGEgbWFjcm8gdG8gbGV0IG1iZWQgVExTIHVzZSB5b3UKKyAqIGFsdGVybmF0ZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIHN5bW1ldHJpYyBjcnlwdG8gb3IgaGFzaCBmdW5jdGlvbi4gS2VlcCBpbgorICogbWluZCB0aGF0IGZ1bmN0aW9uIHByb3RvdHlwZXMgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4KKyAqCisgKiBUaGlzIHJlcGxhY2VzIG9ubHkgb25lIGZ1bmN0aW9uLiBUaGUgaGVhZGVyIGZpbGUgZnJvbSBtYmVkIFRMUyBpcyBzdGlsbAorICogdXNlZCwgaW4gY29udHJhc3QgdG8gdGhlIE1CRURUTFNfX01PRFVMRV9OQU1FX19BTFQgZmxhZ3MuCisgKgorICogRXhhbXBsZTogSW4gY2FzZSB5b3UgdW5jb21tZW50IE1CRURUTFNfU0hBMjU2X1BST0NFU1NfQUxULCBtYmVkIFRMUyB3aWxsCisgKiBubyBsb25nZXIgcHJvdmlkZSB0aGUgbWJlZHRsc19zaGExX3Byb2Nlc3MoKSBmdW5jdGlvbiwgYnV0IGl0IHdpbGwgc3RpbGwgcHJvdmlkZQorICogdGhlIG90aGVyIGZ1bmN0aW9uICh1c2luZyB5b3VyIG1iZWR0bHNfc2hhMV9wcm9jZXNzKCkgZnVuY3Rpb24pIGFuZCB0aGUgZGVmaW5pdGlvbgorICogb2YgbWJlZHRsc19zaGExX2NvbnRleHQsIHNvIHlvdXIgaW1wbGVtZW50YXRpb24gb2YgbWJlZHRsc19zaGExX3Byb2Nlc3MgbXVzdCBiZSBjb21wYXRpYmxlCisgKiB3aXRoIHRoaXMgZGVmaW5pdGlvbi4KKyAqCisgKiBOb3RlOiBpZiB5b3UgdXNlIHRoZSBBRVNfeHh4X0FMVCBtYWNyb3MsIHRoZW4gaXMgaXMgcmVjb21tZW5kZWQgdG8gYWxzbyBzZXQKKyAqIE1CRURUTFNfQUVTX1JPTV9UQUJMRVMgaW4gb3JkZXIgdG8gaGVscCB0aGUgbGlua2VyIGdhcmJhZ2UtY29sbGVjdCB0aGUgQUVTCisgKiB0YWJsZXMuCisgKgorICogVW5jb21tZW50IGEgbWFjcm8gdG8gZW5hYmxlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZworICogZnVuY3Rpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01EMl9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQ0X1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19NRDVfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX1JJUEVNRDE2MF9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBMV9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBMjU2X1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19TSEE1MTJfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX0RFU19TRVRLRVlfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19ERVNfQ1JZUFRfRUNCX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfREVTM19DUllQVF9FQ0JfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19BRVNfU0VUS0VZX0VOQ19BTFQKKy8vI2RlZmluZSBNQkVEVExTX0FFU19TRVRLRVlfREVDX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQUVTX0VOQ1JZUFRfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19BRVNfREVDUllQVF9BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBsZXQgbWJlZCBUTFMgdXNlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIGEKKyAqIGhhcmR3YXJlIGVudHJvcHkgY29sbGVjdG9yLgorICoKKyAqIFlvdXIgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgXGMgbWJlZHRsc19oYXJkd2FyZV9wb2xsKCksIGhhdmUgdGhlIHNhbWUKKyAqIHByb3RvdHlwZSBhcyBkZWNsYXJlZCBpbiBlbnRyb3B5X3BvbGwuaCwgYW5kIGFjY2VwdCBOVUxMIGFzIGZpcnN0IGFyZ3VtZW50LgorICoKKyAqIFVuY29tbWVudCB0byB1c2UgeW91ciBvd24gaGFyZHdhcmUgZW50cm9weSBjb2xsZWN0b3IuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworICoKKyAqIFN0b3JlIHRoZSBBRVMgdGFibGVzIGluIFJPTS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBzdG9yZSB0aGUgQUVTIHRhYmxlcyBpbiBST00uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkKKyAqCisgKiBVc2UgbGVzcyBST00gZm9yIHRoZSBDYW1lbGxpYSBpbXBsZW1lbnRhdGlvbiAoc2F2ZXMgYWJvdXQgNzY4IGJ5dGVzKS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byB1c2UgbGVzcyBtZW1vcnkgZm9yIENhbWVsbGlhLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisgKgorICogRW5hYmxlIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlIChDQkMpIGZvciBzeW1tZXRyaWMgY2lwaGVycy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorICoKKyAqIEVuYWJsZSBDaXBoZXIgRmVlZGJhY2sgbW9kZSAoQ0ZCKSBmb3Igc3ltbWV0cmljIGNpcGhlcnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKKyAqCisgKiBFbmFibGUgQ291bnRlciBCbG9jayBDaXBoZXIgbW9kZSAoQ1RSKSBmb3Igc3ltbWV0cmljIGNpcGhlcnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKKyAqCisgKiBFbmFibGUgTlVMTCBjaXBoZXIuCisgKiBXYXJuaW5nOiBPbmx5IGRvIHNvIHdoZW4geW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBUaGlzIGFsbG93cyBmb3IKKyAqIGVuY3J5cHRpb24gb3IgY2hhbm5lbHMgd2l0aG91dCBhbnkgc2VjdXJpdHkhCisgKgorICogUmVxdWlyZXMgTUJFRFRMU19FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMgYXMgd2VsbCB0byBlbmFibGUKKyAqIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9OVUxMX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfTUQ1CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZW5hYmxlIHRoZSBOVUxMIGNpcGhlciBhbmQgY2lwaGVyc3VpdGVzCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworICoKKyAqIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWFhYOiBVbmNvbW1lbnQgb3IgY29tbWVudCBtYWNyb3MgdG8gYWRkIHN1cHBvcnQgZm9yCisgKiBzcGVjaWZpYyBwYWRkaW5nIG1vZGVzIGluIHRoZSBjaXBoZXIgbGF5ZXIgd2l0aCBjaXBoZXIgbW9kZXMgdGhhdCBzdXBwb3J0CisgKiBwYWRkaW5nIChlLmcuIENCQykKKyAqCisgKiBJZiB5b3UgZGlzYWJsZSBhbGwgcGFkZGluZyBtb2Rlcywgb25seSBmdWxsIGJsb2NrcyBjYW4gYmUgdXNlZCB3aXRoIENCQy4KKyAqCisgKiBFbmFibGUgcGFkZGluZyBtb2RlcyBpbiB0aGUgY2lwaGVyIGxheWVyLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTCisgKgorICogRW5hYmxlIHdlYWsgY2lwaGVyc3VpdGVzIGluIFNTTCAvIFRMUy4KKyAqIFdhcm5pbmc6IE9ubHkgZG8gc28gd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuIFRoaXMgYWxsb3dzIGZvcgorICogY2hhbm5lbHMgd2l0aCB2aXJ0dWFsbHkgbm8gc2VjdXJpdHkgYXQgYWxsIQorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlczoKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfREVTX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0RFU19DQkNfU0hBCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZW5hYmxlIHdlYWsgY2lwaGVyc3VpdGVzCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMKKyAqCisgKiBSZW1vdmUgUkM0IGNpcGhlcnN1aXRlcyBieSBkZWZhdWx0IGluIFNTTCAvIFRMUy4KKyAqIFRoaXMgZmxhZyByZW1vdmVzIHRoZSBjaXBoZXJzdWl0ZXMgYmFzZWQgb24gUkM0IGZyb20gdGhlIGRlZmF1bHQgbGlzdCBhcworICogcmV0dXJuZWQgYnkgbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoKS4gSG93ZXZlciwgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8KKyAqIGVuYWJsZSAoc29tZSBvZikgdGhlbSB3aXRoIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCkgYnkgaW5jbHVkaW5nIHRoZW0KKyAqIGV4cGxpY2l0bHkuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcmVtb3ZlIFJDNCBjaXBoZXJzdWl0ZXMgYnkgZGVmYXVsdC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorICoKKyAqIE1CRURUTFNfRUNQX1hYWFhfRU5BQkxFRDogRW5hYmxlcyBzcGVjaWZpYyBjdXJ2ZXMgd2l0aGluIHRoZSBFbGxpcHRpYyBDdXJ2ZQorICogbW9kdWxlLiAgQnkgZGVmYXVsdCBhbGwgc3VwcG9ydGVkIGN1cnZlcyBhcmUgZW5hYmxlZC4KKyAqCisgKiBDb21tZW50IG1hY3JvcyB0byBkaXNhYmxlIHRoZSBjdXJ2ZSBhbmQgZnVuY3Rpb25zIGZvciBpdAorICovCisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVECisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNQX05JU1RfT1BUSU0KKyAqCisgKiBFbmFibGUgc3BlY2lmaWMgJ21vZHVsbyBwJyByb3V0aW5lcyBmb3IgZWFjaCBOSVNUIHByaW1lLgorICogRGVwZW5kaW5nIG9uIHRoZSBwcmltZSBhbmQgYXJjaGl0ZWN0dXJlLCBtYWtlcyBvcGVyYXRpb25zIDQgdG8gOCB0aW1lcworICogZmFzdGVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIGN1cnZlLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIE5JU1QgY3VydmVzIG9wdGltaXNhdGlvbi4KKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9OSVNUX09QVElNCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKKyAqCisgKiBFbmFibGUgZGV0ZXJtaW5pc3RpYyBFQ0RTQSAoUkZDIDY5NzkpLgorICogU3RhbmRhcmQgRUNEU0EgaXMgImZyYWdpbGUiIGluIHRoZSBzZW5zZSB0aGF0IGxhY2sgb2YgZW50cm9weSB3aGVuIHNpZ25pbmcKKyAqIG1heSByZXN1bHQgaW4gYSBjb21wcm9taXNlIG9mIHRoZSBsb25nLXRlcm0gc2lnbmluZyBrZXkuIFRoaXMgaXMgYXZvaWRlZCBieQorICogdGhlIGRldGVybWluaXN0aWMgdmFyaWFudC4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19ITUFDX0RSQkdfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIGRldGVybWluaXN0aWMgRUNEU0EuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBQU0sgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIERIRS1QU0sgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0RITV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESEUtUFNLIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgUlNBLVBTSyBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUlNBX0MsIE1CRURUTFNfUEtDUzFfVjE1LAorICogICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIFJTQS1vbmx5IGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19SU0FfQywgTUJFRFRMU19QS0NTMV9WMTUsCisgKiAgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X01ENQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgREhFLVJTQSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfREhNX0MsIE1CRURUTFNfUlNBX0MsIE1CRURUTFNfUEtDUzFfVjE1LAorICogICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0RIRS1SU0EgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDREhfQywgTUJFRFRMU19SU0FfQywgTUJFRFRMU19QS0NTMV9WMTUsCisgKiAgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIEVDREhFLUVDRFNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MsIE1CRURUTFNfRUNEU0FfQywgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DLAorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESC1FQ0RTQSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNESF9DLCBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIEVDREgtUlNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MsIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNKUEFLRSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogXHdhcm5pbmcgVGhpcyBpcyBjdXJyZW50bHkgZXhwZXJpbWVudGFsLiBFQyBKLVBBS0Ugc3VwcG9ydCBpcyBiYXNlZCBvbiB0aGUKKyAqIFRocmVhZCB2MS4wLjAgc3BlY2lmaWNhdGlvbjsgaW5jb21wYXRpYmxlIGNoYW5nZXMgdG8gdGhlIHNwZWNpZmljYXRpb24KKyAqIG1pZ2h0IHN0aWxsIGhhcHBlbi4gRm9yIHRoaXMgcmVhc29uLCB0aGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNKUEFLRV9DCisgKiAgICAgICAgICAgTUJFRFRMU19TSEEyNTZfQworICogICAgICAgICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNKUEFLRV9XSVRIX0FFU18xMjhfQ0NNXzgKKyAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQKKyAqCisgKiBFbmhhbmNlIHN1cHBvcnQgZm9yIHJlYWRpbmcgRUMga2V5cyB1c2luZyB2YXJpYW50cyBvZiBTRUMxIG5vdCBhbGxvd2VkIGJ5CisgKiBSRkMgNTkxNSBhbmQgUkZDIDU0ODAuCisgKgorICogQ3VycmVudGx5IHRoaXMgbWVhbnMgcGFyc2luZyB0aGUgU3BlY2lmaWVkRUNEb21haW4gY2hvaWNlIG9mIEVDCisgKiBwYXJhbWV0ZXJzIChvbmx5IGtub3duIGdyb3VwcyBhcmUgc3VwcG9ydGVkLCBub3QgYXJiaXRyYXJ5IGRvbWFpbnMsIHRvCisgKiBhdm9pZCB2YWxpZGF0aW9uIGlzc3VlcykuCisgKgorICogRGlzYWJsZSBpZiB5b3Ugb25seSBuZWVkIHRvIHN1cHBvcnQgUkZDIDU5MTUgKyA1NDgwIGtleSBmb3JtYXRzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS19QQVJTRV9FQ19FWFRFTkRFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWQorICoKKyAqIEVuYWJsZSBhIGR1bW15IGVycm9yIGZ1bmN0aW9uIHRvIG1ha2UgdXNlIG9mIG1iZWR0bHNfc3RyZXJyb3IoKSBpbgorICogdGhpcmQgcGFydHkgbGlicmFyaWVzIGVhc2llciB3aGVuIE1CRURUTFNfRVJST1JfQyBpcyBkaXNhYmxlZAorICogKG5vIGVmZmVjdCB3aGVuIE1CRURUTFNfRVJST1JfQyBpcyBlbmFibGVkKS4KKyAqCisgKiBZb3UgY2FuIHNhZmVseSBkaXNhYmxlIHRoaXMgaWYgTUJFRFRMU19FUlJPUl9DIGlzIGVuYWJsZWQsIG9yIGlmIHlvdSdyZQorICogbm90IHVzaW5nIG1iZWR0bHNfc3RyZXJyb3IoKSBvciBlcnJvcl9zdHJlcnJvcigpIGluIHlvdXIgYXBwbGljYXRpb24uCisgKgorICogRGlzYWJsZSBpZiB5b3UgcnVuIGludG8gbmFtZSBjb25mbGljdHMgYW5kIHdhbnQgdG8gcmVhbGx5IHJlbW92ZSB0aGUKKyAqIG1iZWR0bHNfc3RyZXJyb3IoKQorICovCisvLyNkZWZpbmUgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19HRU5QUklNRQorICoKKyAqIEVuYWJsZSB0aGUgcHJpbWUtbnVtYmVyIGdlbmVyYXRpb24gY29kZS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CSUdOVU1fQworICovCisvLyNkZWZpbmUgTUJFRFRMU19HRU5QUklNRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19GU19JTworICoKKyAqIEVuYWJsZSBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlIGZpbGVzeXN0ZW0uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0ZTX0lPCisKKy8qKgorICogXGRlZiBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCisgKgorICogRG8gbm90IGFkZCBkZWZhdWx0IGVudHJvcHkgc291cmNlcy4gVGhlc2UgYXJlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYywKKyAqIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayBhbmQgSEFWRUdFIGJhc2VkIHBvbGwgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgaXMgdXNlZnVsIHRvIGhhdmUgbW9yZSBjb250cm9sIG92ZXIgdGhlIGFkZGVkIGVudHJvcHkgc291cmNlcyBpbiBhbgorICogYXBwbGljYXRpb24uCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcHJldmVudCBsb2FkaW5nIG9mIGRlZmF1bHQgZW50cm9weSBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCisKKy8qKgorICogXGRlZiBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkKKyAqCisgKiBEbyBub3QgdXNlIGJ1aWx0LWluIHBsYXRmb3JtIGVudHJvcHkgZnVuY3Rpb25zLgorICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0CisgKiBzdGFuZGFyZHMgbGlrZSB0aGUgL2Rldi91cmFuZG9tIG9yIFdpbmRvd3MgQ3J5cHRvQVBJLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgdGhlIGJ1aWx0LWluIHBsYXRmb3JtIGVudHJvcHkgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FTlRST1BZX0ZPUkNFX1NIQTI1NgorICoKKyAqIEZvcmNlIHRoZSBlbnRyb3B5IGFjY3VtdWxhdG9yIHRvIHVzZSBhIFNIQS0yNTYgYWNjdW11bGF0b3IgaW5zdGVhZCBvZiB0aGUKKyAqIGRlZmF1bHQgU0hBLTUxMiBiYXNlZCBvbmUgKGlmIGJvdGggYXJlIGF2YWlsYWJsZSkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU0hBMjU2X0MKKyAqCisgKiBPbiAzMi1iaXQgc3lzdGVtcyBTSEEtMjU2IGNhbiBiZSBtdWNoIGZhc3RlciB0aGFuIFNIQS01MTIuIFVzZSB0aGlzIG9wdGlvbgorICogaWYgeW91IGhhdmUgcGVyZm9ybWFuY2UgY29uY2VybnMuCisgKgorICogVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgaWYgYm90aCBNQkVEVExTX1NIQTI1Nl9DIGFuZAorICogTUJFRFRMU19TSEE1MTJfQyBhcmUgZGVmaW5lZC4gT3RoZXJ3aXNlIHRoZSBhdmFpbGFibGUgaGFzaCBtb2R1bGUgaXMgdXNlZC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9GT1JDRV9TSEEyNTYKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUVNT1JZX0RFQlVHCisgKgorICogRW5hYmxlIGRlYnVnZ2luZyBvZiBidWZmZXIgYWxsb2NhdG9yIG1lbW9yeSBpc3N1ZXMuIEF1dG9tYXRpY2FsbHkgcHJpbnRzCisgKiAodG8gc3RkZXJyKSBhbGwgKGZhdGFsKSBtZXNzYWdlcyBvbiBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMuIEVuYWJsZXMKKyAqIGZ1bmN0aW9uIGZvciAnZGVidWcgb3V0cHV0JyBvZiBhbGxvY2F0ZWQgbWVtb3J5LgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGxldCB0aGUgYnVmZmVyIGFsbG9jYXRvciBwcmludCBvdXQgZXJyb3IgbWVzc2FnZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01FTU9SWV9ERUJVRworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFCisgKgorICogSW5jbHVkZSBiYWNrdHJhY2UgaW5mb3JtYXRpb24gd2l0aCBlYWNoIGFsbG9jYXRlZCBibG9jay4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MKKyAqICAgICAgICAgICBHTElCQy1jb21wYXRpYmxlIGJhY2t0cmFjZSgpIGFuIGJhY2t0cmFjZV9zeW1ib2xzKCkgc3VwcG9ydAorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGluY2x1ZGUgYmFja3RyYWNlIGluZm9ybWF0aW9uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUCisgKgorICogU3VwcG9ydCBleHRlcm5hbCBwcml2YXRlIFJTQSBrZXlzIChlZyBmcm9tIGEgSFNNKSBpbiB0aGUgUEsgbGF5ZXIuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgcHJpdmF0ZSBSU0Ega2V5cy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLQ1MxX1YxNQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBQS0NTIzEgdjEuNSBlbmNvZGluZy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19SU0FfQworICoKKyAqIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBQS0NTIzEgdjEuNSBvcGVyYXRpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS0NTMV9WMTUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzFfVjIxCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFBLQ1MjMSB2Mi4xIGVuY29kaW5nLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01EX0MsIE1CRURUTFNfUlNBX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgUlNBRVMtT0FFUCBhbmQgUlNBU1NBLVBTUyBvcGVyYXRpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS0NTMV9WMjEKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUlNBX05PX0NSVAorICoKKyAqIERvIG5vdCB1c2UgdGhlIENoaW5lc2UgUmVtYWluZGVyIFRoZW9yZW0gZm9yIHRoZSBSU0EgcHJpdmF0ZSBvcGVyYXRpb24uCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSB0aGUgdXNlIG9mIENSVCBpbiBSU0EuCisgKgorICovCisvLyNkZWZpbmUgTUJFRFRMU19SU0FfTk9fQ1JUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NFTEZfVEVTVAorICoKKyAqIEVuYWJsZSB0aGUgY2hlY2t1cCBmdW5jdGlvbnMgKCpfc2VsZl90ZXN0KS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU0VMRl9URVNUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NIQTI1Nl9TTUFMTEVSCisgKgorICogRW5hYmxlIGFuIGltcGxlbWVudGF0aW9uIG9mIFNIQS0yNTYgdGhhdCBoYXMgbG93ZXIgUk9NIGZvb3RwcmludCBidXQgYWxzbworICogbG93ZXIgcGVyZm9ybWFuY2UuCisgKgorICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgbWVhbnQgdG8gYmUgYSByZWFzb25uYWJsZSBjb21wcm9taXNlIGJldHdlZW4KKyAqIHBlcmZvcm1hbmNlIGFuZCBzaXplLiBUaGlzIHZlcnNpb24gb3B0aW1pemVzIG1vcmUgYWdncmVzc2l2ZWx5IGZvciBzaXplIGF0CisgKiB0aGUgZXhwZW5zZSBvZiBwZXJmb3JtYW5jZS4gRWcgb24gQ29ydGV4LU00IGl0IHJlZHVjZXMgdGhlIHNpemUgb2YKKyAqIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MoKSBmcm9tIH4yS0IgdG8gfjAuNUtCIGZvciBhIHBlcmZvcm1hbmNlIGhpdCBvZiBhYm91dAorICogMzAlLgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgdGhlIHNtYWxsZXIgaW1wbGVtZW50YXRpb24gb2YgU0hBMjU2LgorICovCisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X1NNQUxMRVIKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0FFQURfUkFORE9NX0lWCisgKgorICogR2VuZXJhdGUgYSByYW5kb20gSVYgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIHJlY29yZCBzZXF1ZW5jZSBudW1iZXIgYXMgYQorICogbm9uY2UgZm9yIGNpcGhlcnN1aXRlcyB1c2luZyBhbmQgQUVBRCBhbGdvcml0aG0gKEdDTSBvciBDQ00pLgorICoKKyAqIFVzaW5nIHRoZSBzZXF1ZW5jZSBudW1iZXIgaXMgZ2VuZXJhbGx5IHJlY29tbWVuZGVkLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGFsd2F5cyB1c2UgcmFuZG9tIElWcyB3aXRoIEFFQUQgY2lwaGVyc3VpdGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQUVBRF9SQU5ET01fSVYKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUworICoKKyAqIEVuYWJsZSBzZW5kaW5nIG9mIGFsZXJ0IG1lc3NhZ2VzIGluIGNhc2Ugb2YgZW5jb3VudGVyZWQgZXJyb3JzIGFzIHBlciBSRkMuCisgKiBJZiB5b3UgY2hvb3NlIG5vdCB0byBzZW5kIHRoZSBhbGVydCBtZXNzYWdlcywgbWJlZCBUTFMgY2FuIHN0aWxsIGNvbW11bmljYXRlCisgKiB3aXRoIG90aGVyIHNlcnZlcnMsIG9ubHkgZGVidWdnaW5nIG9mIGZhaWx1cmVzIGlzIGhhcmRlci4KKyAqCisgKiBUaGUgYWR2YW50YWdlIG9mIG5vdCBzZW5kaW5nIGFsZXJ0IG1lc3NhZ2VzLCBpcyB0aGF0IG5vIGluZm9ybWF0aW9uIGlzIGdpdmVuCisgKiBhYm91dCByZWFzb25zIGZvciBmYWlsdXJlcyB0aHVzIHByZXZlbnRpbmcgYWR2ZXJzYXJpZXMgb2YgZ2FpbmluZyBpbnRlbC4KKyAqCisgKiBFbmFibGUgc2VuZGluZyBvZiBhbGwgYWxlcnQgbWVzc2FnZXMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfREVCVUdfQUxMCisgKgorICogRW5hYmxlIHRoZSBkZWJ1ZyBtZXNzYWdlcyBpbiBTU0wgbW9kdWxlIGZvciBhbGwgaXNzdWVzLgorICogRGVidWcgbWVzc2FnZXMgaGF2ZSBiZWVuIGRpc2FibGVkIGluIHNvbWUgcGxhY2VzIHRvIHByZXZlbnQgdGltaW5nCisgKiBhdHRhY2tzIGR1ZSB0byAodW5iYWxhbmNlZCkgZGVidWdnaW5nIGZ1bmN0aW9uIGNhbGxzLgorICoKKyAqIElmIHlvdSBuZWVkIGFsbCBlcnJvciByZXBvcnRpbmcgeW91IHNob3VsZCBlbmFibGUgdGhpcyBkdXJpbmcgZGVidWdnaW5nLAorICogYnV0IHJlbW92ZSB0aGlzIGZvciBwcm9kdWN0aW9uIHNlcnZlcnMgdGhhdCBzaG91bGQgbG9nIGFzIHdlbGwuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcmVwb3J0IGFsbCBkZWJ1ZyBtZXNzYWdlcyBvbiBlcnJvcnMgaW50cm9kdWNpbmcKKyAqIGEgdGltaW5nIHNpZGUtY2hhbm5lbC4KKyAqCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfREVCVUdfQUxMCisKKy8qKiBcZGVmIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgRW5jcnlwdC10aGVuLU1BQywgUkZDIDczNjYuCisgKgorICogVGhpcyBhbGxvd3MgcGVlcnMgdGhhdCBib3RoIHN1cHBvcnQgaXQgdG8gdXNlIGEgbW9yZSByb2J1c3QgcHJvdGVjdGlvbiBmb3IKKyAqIGNpcGhlcnN1aXRlcyB1c2luZyBDQkMsIHByb3ZpZGluZyBkZWVwIHJlc2lzdGFuY2UgYWdhaW5zdCB0aW1pbmcgYXR0YWNrcworICogb24gdGhlIHBhZGRpbmcgb3IgdW5kZXJseWluZyBjaXBoZXIuCisgKgorICogVGhpcyBvbmx5IGFmZmVjdHMgQ0JDIGNpcGhlcnN1aXRlcywgYW5kIGlzIHVzZWxlc3MgaWYgbm9uZSBpcyBkZWZpbmVkLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19UTFMxICAgIG9yCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xICBvcgorICogICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIEVuY3J5cHQtdGhlbi1NQUMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMKKworLyoqIFxkZWYgTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVAorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBFeHRlbmRlZCBNYXN0ZXIgU2VjcmV0LCBha2EgU2Vzc2lvbiBIYXNoCisgKiAoZHJhZnQtaWV0Zi10bHMtc2Vzc2lvbi1oYXNoLTAyKS4KKyAqCisgKiBUaGlzIHdhcyBpbnRyb2R1Y2VkIGFzICJ0aGUgcHJvcGVyIGZpeCIgdG8gdGhlIFRyaXBsZSBIYW5kc2hha2UgZmFtaWxpeSBvZgorICogYXR0YWNrcywgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRvIGFsd2F5cyB1c2UgaXQgKGV2ZW4gaWYgeW91IGRpc2FibGUKKyAqIHJlbmVnb3RpYXRpb24pLCBzaW5jZSBpdCBhY3R1YWxseSBmaXhlcyBhIG1vcmUgZnVuZGFtZW50YWwgaXNzdWUgaW4gdGhlCisgKiBvcmlnaW5hbCBTU0wvVExTIGRlc2lnbiwgYW5kIGhhcyBpbXBsaWNhdGlvbnMgYmV5b25kIFRyaXBsZSBIYW5kc2hha2UuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX1RMUzEgICAgb3IKKyAqICAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgIG9yCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgRXh0ZW5kZWQgTWFzdGVyIFNlY3JldC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgRkFMTEJBQ0tfU0NTViAoZHJhZnQtaWV0Zi10bHMtZG93bmdyYWRlLXNjc3YtMDApLgorICoKKyAqIEZvciBzZXJ2ZXJzLCBpdCBpcyByZWNvbW1lbmRlZCB0byBhbHdheXMgZW5hYmxlIHRoaXMsIHVubGVzcyB5b3Ugc3VwcG9ydAorICogb25seSBvbmUgdmVyc2lvbiBvZiBUTFMsIG9yIGtub3cgZm9yIHN1cmUgdGhhdCBub25lIG9mIHlvdXIgY2xpZW50cworICogaW1wbGVtZW50cyBhIGZhbGxiYWNrIHN0cmF0ZWd5LgorICoKKyAqIEZvciBjbGllbnRzLCB5b3Ugb25seSBuZWVkIHRoaXMgaWYgeW91J3JlIHVzaW5nIGEgZmFsbGJhY2sgc3RyYXRlZ3ksIHdoaWNoCisgKiBpcyBub3QgcmVjb21tZW5kZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCB1bmxlc3MgeW91IGFic29sdXRlbHkgbmVlZCBpdCB0bworICogaW50ZXJvcGVyYXRlIHdpdGggYnVnZ3kgKHZlcnNpb24taW50b2xlcmFudCkgc2VydmVycy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBGQUxMQkFDS19TQ1NWCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwKKyAqCisgKiBFbmFibGUgaG9va2luZyBmdW5jdGlvbnMgaW4gU1NMIG1vZHVsZSBmb3IgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mCisgKiBpbmRpdmlkdWFsIHJlY29yZHMuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZW5hYmxlIGhvb2tpbmcgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORworICoKKyAqIEVuYWJsZSAxL24tMSByZWNvcmQgc3BsaXR0aW5nIGZvciBDQkMgbW9kZSBpbiBTU0x2MyBhbmQgVExTIDEuMC4KKyAqCisgKiBUaGlzIGlzIGEgY291bnRlcm1lYXN1cmUgdG8gdGhlIEJFQVNUIGF0dGFjaywgd2hpY2ggYWxzbyBtaW5pbWl6ZXMgdGhlIHJpc2sKKyAqIG9mIGludGVyb3BlcmFiaWxpdHkgaXNzdWVzIGNvbXBhcmVkIHRvIHNlbmRpbmcgMC1sZW5ndGggcmVjb3Jkcy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSAxL24tMSByZWNvcmQgc3BsaXR0aW5nLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04KKyAqCisgKiBEaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyByZW5lZ290aWF0aW9uLgorICoKKyAqIFRoZSB0d28gbWFpbiB1c2VzIG9mIHJlbmVnb3RpYXRpb24gYXJlICgxKSByZWZyZXNoIGtleXMgb24gbG9uZy1saXZlZAorICogY29ubmVjdGlvbnMgYW5kICgyKSBjbGllbnQgYXV0aGVudGljYXRpb24gYWZ0ZXIgdGhlIGluaXRpYWwgaGFuZHNoYWtlLgorICogSWYgeW91IGRvbid0IG5lZWQgcmVuZWdvdGlhdGlvbiwgaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gZGlzYWJsZSBpdCwgc2luY2UKKyAqIGl0IGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCBzZWN1cml0eSBpc3N1ZXMgaW4gdGhlIHBhc3QgYW5kIGlzIGVhc3kgdG8KKyAqIG1pc3VzZS9taXN1bmRlcnN0YW5kLgorICoKKyAqIENvbW1lbnQgdGhpcyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHJlbmVnb3RpYXRpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8KKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgcmVjZWl2aW5nIGFuZCBwYXJzaW5nIFNTTHYyIENsaWVudCBIZWxsbyBtZXNzYWdlcyBmb3IgdGhlCisgKiBTU0wgU2VydmVyIG1vZHVsZSAoTUJFRFRMU19TU0xfU1JWX0MpLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBTU0x2MiBDbGllbnQgSGVsbG8gbWVzc2FnZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFCisgKgorICogUGljayB0aGUgY2lwaGVyc3VpdGUgYWNjb3JkaW5nIHRvIHRoZSBjbGllbnQncyBwcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBvdXJzCisgKiBpbiB0aGUgU1NMIFNlcnZlciBtb2R1bGUgKE1CRURUTFNfU1NMX1NSVl9DKS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byByZXNwZWN0IGNsaWVudCdzIGNpcGhlcnN1aXRlIG9yZGVyCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSAorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNjA2NiBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiBpbiBTU0wuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgdGhlIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBTU0wgMy4wLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01ENV9DCisgKiAgICAgICAgICAgTUJFRFRMU19TSEExX0MKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBTU0wgMy4wCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19TU0wzCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9QUk9UT19UTFMxCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjAuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTUQ1X0MKKyAqICAgICAgICAgICBNQkVEVExTX1NIQTFfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjAKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX1RMUzEKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4xIChhbmQgRFRMUyAxLjAgaWYgRFRMUyBpcyBlbmFibGVkKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRDVfQworICogICAgICAgICAgIE1CRURUTFNfU0hBMV9DCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgVExTIDEuMSAvIERUTFMgMS4wCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4yIChhbmQgRFRMUyAxLjIgaWYgRFRMUyBpcyBlbmFibGVkKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TSEExX0Mgb3IgTUJFRFRMU19TSEEyNTZfQyBvciBNQkVEVExTX1NIQTUxMl9DCisgKiAgICAgICAgICAgKERlcGVuZHMgb24gY2lwaGVyc3VpdGVzKQorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjIgLyBEVExTIDEuMgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBEVExTIChhbGwgYXZhaWxhYmxlIHZlcnNpb25zKS4KKyAqCisgKiBFbmFibGUgdGhpcyBhbmQgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xIHRvIGVuYWJsZSBEVExTIDEuMCwKKyAqIGFuZC9vciB0aGlzIGFuZCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgdG8gZW5hYmxlIERUTFMgMS4yLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKKyAqICAgICAgICBvciBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBEVExTCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfQUxQTgorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNzMwMSBBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBOZWdvdGlhdGlvbi4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBBTFBOLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQUxQTgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgYW50aS1yZXBsYXkgbWVjaGFuaXNtIGluIERUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1RMU19DCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworICoKKyAqIFx3YXJuaW5nIERpc2FibGluZyB0aGlzIGlzIG9mdGVuIGEgc2VjdXJpdHkgcmlzayEKKyAqIFNlZSBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYW50aV9yZXBsYXkoKSBmb3IgZGV0YWlscy4KKyAqCisgKiBDb21tZW50IHRoaXMgdG8gZGlzYWJsZSBhbnRpLXJlcGxheSBpbiBEVExTLgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIEhlbGxvVmVyaWZ5UmVxdWVzdCBvbiBEVExTIHNlcnZlcnMuCisgKgorICogVGhpcyBmZWF0dXJlIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBwcmV2ZW50IERUTFMgc2VydmVycyBiZWluZyB1c2VkIGFzCisgKiBhbXBsaWZpZXJzIGluIERvUyBhdHRhY2tzIGFnYWluc3Qgb3RoZXIgaG9zdHMuIEl0IHNob3VsZCBhbHdheXMgYmUgZW5hYmxlZAorICogdW5sZXNzIHlvdSBrbm93IGZvciBzdXJlIGFtcGxpZmljYXRpb24gY2Fubm90IGJlIGEgcHJvYmxlbSBpbiB0aGUKKyAqIGVudmlyb25tZW50IGluIHdoaWNoIHlvdXIgc2VydmVyIG9wZXJhdGVzLgorICoKKyAqIFx3YXJuaW5nIERpc2FibGluZyB0aGlzIGNhbiBiYSBhIHNlY3VyaXR5IHJpc2shIChzZWUgYWJvdmUpCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKyAqCisgKiBDb21tZW50IHRoaXMgdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBIZWxsb1ZlcmlmeVJlcXVlc3QuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UKKyAqCisgKiBFbmFibGUgc2VydmVyLXNpZGUgc3VwcG9ydCBmb3IgY2xpZW50cyB0aGF0IHJlY29ubmVjdCBmcm9tIHRoZSBzYW1lIHBvcnQuCisgKgorICogU29tZSBjbGllbnRzIHVuZXhwZWN0ZWRseSBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgdHJ5IHRvIHJlY29ubmVjdCB1c2luZyB0aGUKKyAqIHNhbWUgc291cmNlIHBvcnQuIFRoaXMgbmVlZHMgc3BlY2lhbCBzdXBwb3J0IGZyb20gdGhlIHNlcnZlciB0byBoYW5kbGUgdGhlCisgKiBuZXcgY29ubmVjdGlvbiBzZWN1cmVseSwgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gNC4yLjggb2YgUkZDIDYzNDcuIFRoaXMKKyAqIGZsYWcgZW5hYmxlcyB0aGF0IHN1cHBvcnQuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgY2xpZW50cyByZXVzaW5nIHRoZSBzb3VyY2UgcG9ydC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIGEgbGltaXQgb2YgcmVjb3JkcyB3aXRoIGJhZCBNQUMuCisgKgorICogU2VlIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19iYWRtYWNfbGltaXQoKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TU0xfUFJPVE9fRFRMUworICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNTA3NyBzZXNzaW9uIHRpY2tldHMgaW4gU1NMLgorICogQ2xpZW50LXNpZGUsIHByb3ZpZGVzIGZ1bGwgc3VwcG9ydCBmb3Igc2Vzc2lvbiB0aWNrZXRzIChtYWludGFpbmFuY2Ugb2YgYQorICogc2Vzc2lvbiBzdG9yZSByZW1haW5zIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgYXBwbGljYXRpb24sIHRob3VnaCkuCisgKiBTZXJ2ZXItc2lkZSwgeW91IGFsc28gbmVlZCB0byBwcm92aWRlIGNhbGxiYWNrcyBmb3Igd3JpdGluZyBhbmQgcGFyc2luZworICogdGlja2V0cywgaW5jbHVkaW5nIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBhbmQga2V5IG1hbmFnZW1lbnQuIEV4YW1wbGUKKyAqIGNhbGxiYWNrcyBhcmUgcHJvdmlkZWQgYnkgTUJFRFRMU19TU0xfVElDS0VUX0MuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgU1NMIHNlc3Npb24gdGlja2V0cworICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBleHBvcnRpbmcga2V5IGJsb2NrIGFuZCBtYXN0ZXIgc2VjcmV0LgorICogVGhpcyBpcyByZXF1aXJlZCBmb3IgY2VydGFpbiB1c2VycyBvZiBUTFMsIGUuZy4gRUFQLVRMUy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBrZXkgZXhwb3J0CisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04KKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUkZDIDYwNjYgc2VydmVyIG5hbWUgaW5kaWNhdGlvbiAoU05JKSBpbiBTU0wuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHNlcnZlciBuYW1lIGluZGljYXRpb24gaW4gU1NMCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNjA2NiB0cnVuY2F0ZWQgSE1BQyBpbiBTU0wuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgdHJ1bmNhdGVkIEhNQUMgaW4gU1NMCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19USFJFQURJTkdfQUxUCisgKgorICogUHJvdmlkZSB5b3VyIG93biBhbHRlcm5hdGUgdGhyZWFkaW5nIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1RIUkVBRElOR19DCisgKgorICogVW5jb21tZW50IHRoaXMgdG8gYWxsb3cgeW91ciBvd24gYWx0ZXJuYXRlIHRocmVhZGluZyBpbXBsZW1lbnRhdGlvbi4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEhSRUFESU5HX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRAorICoKKyAqIEVuYWJsZSB0aGUgcHRocmVhZCB3cmFwcGVyIGxheWVyIGZvciB0aGUgdGhyZWFkaW5nIGxheWVyLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1RIUkVBRElOR19DCisgKgorICogVW5jb21tZW50IHRoaXMgdG8gZW5hYmxlIHB0aHJlYWQgbXV0ZXhlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUworICoKKyAqIEFsbG93IHJ1bi10aW1lIGNoZWNraW5nIG9mIGNvbXBpbGUtdGltZSBlbmFibGVkIGZlYXR1cmVzLiBUaHVzIGFsbG93aW5nIHVzZXJzCisgKiB0byBjaGVjayBhdCBydW4tdGltZSBpZiB0aGUgbGlicmFyeSBpcyBmb3IgaW5zdGFuY2UgY29tcGlsZWQgd2l0aCB0aHJlYWRpbmcKKyAqIHN1cHBvcnQgdmlhIG1iZWR0bHNfdmVyc2lvbl9jaGVja19mZWF0dXJlKCkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfVkVSU0lPTl9DCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgcnVuLXRpbWUgY2hlY2tpbmcgYW5kIHNhdmUgUk9NIHNwYWNlCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMworICoKKyAqIElmIHNldCwgdGhlIFg1MDkgcGFyc2VyIHdpbGwgbm90IGJyZWFrLW9mZiB3aGVuIHBhcnNpbmcgYW4gWDUwOSBjZXJ0aWZpY2F0ZQorICogYW5kIGVuY291bnRlcmluZyBhbiBleHRlbnNpb24gaW4gYSB2MSBvciB2MiBjZXJ0aWZpY2F0ZS4KKyAqCisgKiBVbmNvbW1lbnQgdG8gcHJldmVudCBhbiBlcnJvci4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgorICoKKyAqIElmIHNldCwgdGhlIFg1MDkgcGFyc2VyIHdpbGwgbm90IGJyZWFrLW9mZiB3aGVuIHBhcnNpbmcgYW4gWDUwOSBjZXJ0aWZpY2F0ZQorICogYW5kIGVuY291bnRlcmluZyBhbiB1bmtub3duIGNyaXRpY2FsIGV4dGVuc2lvbi4KKyAqCisgKiBcd2FybmluZyBEZXBlbmRpbmcgb24geW91ciBQS0kgdXNlLCBlbmFibGluZyB0aGlzIGNhbiBiZSBhIHNlY3VyaXR5IHJpc2shCisgKgorICogVW5jb21tZW50IHRvIHByZXZlbnQgYW4gZXJyb3IuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQUxMT1dfVU5TVVBQT1JURURfQ1JJVElDQUxfRVhURU5TSU9OCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCisgKgorICogRW5hYmxlIHZlcmlmaWNhdGlvbiBvZiB0aGUga2V5VXNhZ2UgZXh0ZW5zaW9uIChDQSBhbmQgbGVhZiBjZXJ0aWZpY2F0ZXMpLgorICoKKyAqIERpc2FibGluZyB0aGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoIG1pcy1pc3N1ZWQgYW5kL29yIG1pc3VzZWQKKyAqIChpbnRlcm1lZGlhdGUpIENBIGFuZCBsZWFmIGNlcnRpZmljYXRlcy4KKyAqCisgKiBcd2FybmluZyBEZXBlbmRpbmcgb24geW91ciBQS0kgdXNlLCBkaXNhYmxpbmcgdGhpcyBjYW4gYmUgYSBzZWN1cml0eSByaXNrIQorICoKKyAqIENvbW1lbnQgdG8gc2tpcCBrZXlVc2FnZSBjaGVja2luZyBmb3IgYm90aCBDQSBhbmQgbGVhZiBjZXJ0aWZpY2F0ZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFCisgKgorICogRW5hYmxlIHZlcmlmaWNhdGlvbiBvZiB0aGUgZXh0ZW5kZWRLZXlVc2FnZSBleHRlbnNpb24gKGxlYWYgY2VydGlmaWNhdGVzKS4KKyAqCisgKiBEaXNhYmxpbmcgdGhpcyBhdm9pZHMgcHJvYmxlbXMgd2l0aCBtaXMtaXNzdWVkIGFuZC9vciBtaXN1c2VkIGNlcnRpZmljYXRlcy4KKyAqCisgKiBcd2FybmluZyBEZXBlbmRpbmcgb24geW91ciBQS0kgdXNlLCBkaXNhYmxpbmcgdGhpcyBjYW4gYmUgYSBzZWN1cml0eSByaXNrIQorICoKKyAqIENvbW1lbnQgdG8gc2tpcCBleHRlbmRlZEtleVVzYWdlIGNoZWNraW5nIGZvciBjZXJ0aWZpY2F0ZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUCisgKgorICogRW5hYmxlIHBhcnNpbmcgYW5kIHZlcmlmaWNhdGlvbiBvZiBYLjUwOSBjZXJ0aWZpY2F0ZXMsIENSTHMgYW5kIENTUlMKKyAqIHNpZ25lZCB3aXRoIFJTQVNTQS1QU1MgKGFrYSBQS0NTIzEgdjIuMSkuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FsbG93IHVzaW5nIFJTQVNTQS1QU1MgaW4gY2VydGlmaWNhdGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19aTElCX1NVUFBPUlQKKyAqCisgKiBJZiBzZXQsIHRoZSBTU0wvVExTIG1vZHVsZSB1c2VzIFpMSUIgdG8gc3VwcG9ydCBjb21wcmVzc2lvbiBhbmQKKyAqIGRlY29tcHJlc3Npb24gb2YgcGFja2V0IGRhdGEuCisgKgorICogXHdhcm5pbmcgVExTLWxldmVsIGNvbXByZXNzaW9uIE1BWSBSRURVQ0UgU0VDVVJJVFkhIFNlZSBmb3IgZXhhbXBsZSB0aGUKKyAqIENSSU1FIGF0dGFjay4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uLCB5b3Ugc2hvdWxkIGV4YW1pbmUgd2l0aCBjYXJlIGlmCisgKiBDUklNRSBvciBzaW1pbGFyIGV4cGxvaXRzIG1heSBiZSBhIGFwcGxpY2FibGUgdG8geW91ciB1c2UgY2FzZS4KKyAqCisgKiBcbm90ZSBDdXJyZW50bHkgY29tcHJlc3Npb24gY2FuJ3QgYmUgdXNlZCB3aXRoIERUTFMuCisgKgorICogVXNlZCBpbjogbGlicmFyeS9zc2xfdGxzLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFRoaXMgZmVhdHVyZSByZXF1aXJlcyB6bGliIGxpYnJhcnkgYW5kIGhlYWRlcnMgdG8gYmUgcHJlc2VudC4KKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHVzZSBvZiBaTElCCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1pMSUJfU1VQUE9SVAorLyogXH0gbmFtZSBTRUNUSU9OOiBtYmVkIFRMUyBmZWF0dXJlIHN1cHBvcnQgKi8KKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBtYmVkIFRMUyBtb2R1bGVzCisgKgorICogVGhpcyBzZWN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50aXJlIG1vZHVsZXMgaW4gbWJlZCBUTFMKKyAqIFx7CisgKi8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTTklfQworICoKKyAqIEVuYWJsZSBBRVMtTkkgc3VwcG9ydCBvbiB4ODYtNjQuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hZXNuaS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2Flcy5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfSEFWRV9BU00KKyAqCisgKiBUaGlzIG1vZHVsZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgQUVTLU5JIGluc3RydWN0aW9ucyBvbiB4ODYtNjQKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQUVTTklfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19BRVNfQworICoKKyAqIEVuYWJsZSB0aGUgQUVTIGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2Flcy5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS9wZW0uYworICogICAgICAgICAgbGlicmFyeS9jdHJfZHJiZy5jCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICoKKyAqIFBFTV9QQVJTRSB1c2VzIEFFUyBmb3IgZGVjcnlwdGluZyBlbmNyeXB0ZWQga2V5cy4KKyAqLworI2RlZmluZSBNQkVEVExTX0FFU19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FSQzRfQworICoKKyAqIEVuYWJsZSB0aGUgQVJDRk9VUiBzdHJlYW0gY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYXJjNC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X01ENQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQVJDNF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FTTjFfUEFSU0VfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBBU04xIHBhcnNlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2FzbjEuYworICogQ2FsbGVyOiAgbGlicmFyeS94NTA5LmMKKyAqICAgICAgICAgIGxpYnJhcnkvZGhtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtjczEyLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtjczUuYworICogICAgICAgICAgbGlicmFyeS9wa3BhcnNlLmMKKyAqLworI2RlZmluZSBNQkVEVExTX0FTTjFfUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19BU04xX1dSSVRFX0MKKyAqCisgKiBFbmFibGUgdGhlIGdlbmVyaWMgQVNOMSB3cml0ZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hc24xd3JpdGUuYworICogQ2FsbGVyOiAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3Brd3JpdGUuYworICogICAgICAgICAgbGlicmFyeS94NTA5X2NyZWF0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDl3cml0ZV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDl3cml0ZV9jc3IuYworICovCisjZGVmaW5lIE1CRURUTFNfQVNOMV9XUklURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0JBU0U2NF9DCisgKgorICogRW5hYmxlIHRoZSBCYXNlNjQgbW9kdWxlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYmFzZTY0LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGVtLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgUEVNIHN1cHBvcnQgKHJlcXVpcmVkIGJ5IFguNTA5KS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQkFTRTY0X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQklHTlVNX0MKKyAqCisgKiBFbmFibGUgdGhlIG11bHRpLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9iaWdudW0uYworICogQ2FsbGVyOiAgbGlicmFyeS9kaG0uYworICogICAgICAgICAgbGlicmFyeS9lY3AuYworICogICAgICAgICAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3JzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBSU0EsIERITSBhbmQgRUNDIChFQ0RILCBFQ0RTQSkgc3VwcG9ydC4KKyAqLworI2RlZmluZSBNQkVEVExTX0JJR05VTV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0JMT1dGSVNIX0MKKyAqCisgKiBFbmFibGUgdGhlIEJsb3dmaXNoIGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2Jsb3dmaXNoLmMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQkxPV0ZJU0hfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DQU1FTExJQV9DCisgKgorICogRW5hYmxlIHRoZSBDYW1lbGxpYSBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jYW1lbGxpYS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0FNRUxMSUFfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DQ01fQworICoKKyAqIEVuYWJsZSB0aGUgQ291bnRlciB3aXRoIENCQy1NQUMgKENDTSkgbW9kZSBmb3IgMTI4LWJpdCBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jY20uYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FFU19DIG9yIE1CRURUTFNfQ0FNRUxMSUFfQworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIEFFUy1DQ00gY2lwaGVyc3VpdGVzLCBpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsLgorICovCisjZGVmaW5lIE1CRURUTFNfQ0NNX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0VSVFNfQworICoKKyAqIEVuYWJsZSB0aGUgdGVzdCBjZXJ0aWZpY2F0ZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jZXJ0cy5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBmb3IgdGVzdGluZyAoc3NsX2NsaWVudC9zZXJ2ZXIpLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19DRVJUU19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIGNpcGhlciBsYXllci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2NpcGhlci5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBjaXBoZXIgd3JhcHBlcnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DVFJfRFJCR19DCisgKgorICogRW5hYmxlIHRoZSBDVFJfRFJCRyBBRVMtMjU2LWJhc2VkIHJhbmRvbSBnZW5lcmF0b3IuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jdHJfZHJiZy5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQUVTX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgQ1RSX0RSQkcgQUVTLTI1NiByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqLworI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREVCVUdfQworICoKKyAqIEVuYWJsZSB0aGUgZGVidWcgZnVuY3Rpb25zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZGVidWcuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGRlYnVnZ2luZyBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19ERUJVR19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0RFU19DCisgKgorICogRW5hYmxlIHRoZSBERVMgYmxvY2sgY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZGVzLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGVtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Rscy5jCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICoKKyAqIFBFTV9QQVJTRSB1c2VzIERFUy8zREVTIGZvciBkZWNyeXB0aW5nIGVuY3J5cHRlZCBrZXlzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19ERVNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ESE1fQworICoKKyAqIEVuYWJsZSB0aGUgRGlmZmllLUhlbGxtYW4tTWVya2xlIG1vZHVsZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2RobS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcga2V5IGV4Y2hhbmdlczoKKyAqICAgICAgREhFLVJTQSwgREhFLVBTSworICovCisvLyNkZWZpbmUgTUJFRFRMU19ESE1fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ0RIX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIERpZmZpZS1IZWxsbWFuIGxpYnJhcnkuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9lY2RoLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBrZXkgZXhjaGFuZ2VzOgorICogICAgICBFQ0RIRS1FQ0RTQSwgRUNESEUtUlNBLCBESEUtUFNLCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNQX0MKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRUNESF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDRFNBX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIERTQSBsaWJyYXJ5LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZWNkc2EuYworICogQ2FsbGVyOgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBrZXkgZXhjaGFuZ2VzOgorICogICAgICBFQ0RIRS1FQ0RTQQorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDUF9DLCBNQkVEVExTX0FTTjFfV1JJVEVfQywgTUJFRFRMU19BU04xX1BBUlNFX0MKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRUNEU0FfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ0pQQUtFX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIEotUEFLRSBsaWJyYXJ5LgorICoKKyAqIFx3YXJuaW5nIFRoaXMgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbC4gRUMgSi1QQUtFIHN1cHBvcnQgaXMgYmFzZWQgb24gdGhlCisgKiBUaHJlYWQgdjEuMC4wIHNwZWNpZmljYXRpb247IGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpY2F0aW9uCisgKiBtaWdodCBzdGlsbCBoYXBwZW4uIEZvciB0aGlzIHJlYXNvbiwgdGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZWNqcGFrZS5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGtleSBleGNoYW5nZXM6CisgKiAgICAgIEVDSlBBS0UKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ1BfQywgTUJFRFRMU19NRF9DCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ0pQQUtFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNQX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIG92ZXIgR0YocCkgbGlicmFyeS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2VjcC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2VjZGguYworICogICAgICAgICAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L2VjanBha2UuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JJR05VTV9DIGFuZCBhdCBsZWFzdCBvbmUgTUJFRFRMU19FQ1BfRFBfWFhYX0VOQUJMRUQKKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VOVFJPUFlfQworICoKKyAqIEVuYWJsZSB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZW50cm9weSBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZW50cm9weS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU0hBNTEyX0Mgb3IgTUJFRFRMU19TSEEyNTZfQworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZ2VuZXJpYyBlbnRyb3B5IHBvb2wKKyAqLworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FUlJPUl9DCisgKgorICogRW5hYmxlIGVycm9yIGNvZGUgdG8gZXJyb3Igc3RyaW5nIGNvbnZlcnNpb24uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9lcnJvci5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBtYmVkdGxzX3N0cmVycm9yKCkuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VSUk9SX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfR0NNX0MKKyAqCisgKiBFbmFibGUgdGhlIEdhbG9pcy9Db3VudGVyIE1vZGUgKEdDTSkgZm9yIEFFUy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2djbS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQUVTX0Mgb3IgTUJFRFRMU19DQU1FTExJQV9DCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgQUVTLUdDTSBhbmQgQ0FNRUxMSUEtR0NNIGNpcGhlcnN1aXRlcywgaWYgb3RoZXIKKyAqIHJlcXVpc2l0ZXMgYXJlIGVuYWJsZWQgYXMgd2VsbC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfR0NNX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRUdFX0MKKyAqCisgKiBFbmFibGUgdGhlIEhBVkVHRSByYW5kb20gZ2VuZXJhdG9yLgorICoKKyAqIFdhcm5pbmc6IHRoZSBIQVZFR0UgcmFuZG9tIGdlbmVyYXRvciBpcyBub3Qgc3VpdGFibGUgZm9yIHZpcnR1YWxpemVkCisgKiAgICAgICAgICBlbnZpcm9ubWVudHMKKyAqCisgKiBXYXJuaW5nOiB0aGUgSEFWRUdFIHJhbmRvbSBnZW5lcmF0b3IgaXMgZGVwZW5kZW50IG9uIHRpbWluZyBhbmQgc3BlY2lmaWMKKyAqICAgICAgICAgIHByb2Nlc3NvciB0cmFpdHMuIEl0IGlzIHRoZXJlZm9yZSBub3QgYWR2aXNlZCB0byB1c2UgSEFWRUdFIGFzCisgKiAgICAgICAgICB5b3VyIGFwcGxpY2F0aW9ucyBwcmltYXJ5IHJhbmRvbSBnZW5lcmF0b3Igb3IgcHJpbWFyeSBlbnRyb3B5IHBvb2wKKyAqICAgICAgICAgIGlucHV0LiBBcyBhIHNlY29uZGFyeSBpbnB1dCB0byB5b3VyIGVudHJvcHkgcG9vbCwgaXQgSVMgYWJsZSBhZGQKKyAqICAgICAgICAgIHRoZSAobGltaXRlZCkgZXh0cmEgZW50cm9weSBpdCBwcm92aWRlcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2hhdmVnZS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfVElNSU5HX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHRoZSBIQVZFR0UgcmFuZG9tIGdlbmVyYXRvci4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfSEFWRUdFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfSE1BQ19EUkJHX0MKKyAqCisgKiBFbmFibGUgdGhlIEhNQUNfRFJCRyByYW5kb20gZ2VuZXJhdG9yLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvaG1hY19kcmJnLmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRF9DCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSB0aGUgSE1BQ19EUkJHIHJhbmRvbSBudW1iZXIgZ2VlcmF0b3IuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRF9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIG1lc3NhZ2UgZGlnZXN0IGxheWVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKiBDYWxsZXI6CisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSBnZW5lcmljIG1lc3NhZ2UgZGlnZXN0IHdyYXBwZXJzLgorICovCisjZGVmaW5lIE1CRURUTFNfTURfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRDJfQworICoKKyAqIEVuYWJsZSB0aGUgTUQyIGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19tZDIuYworICogQ2FsbGVyOgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgKHJhcmUpIE1EMi1zaWduZWQgWC41MDkgY2VydHMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01EMl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX01ENF9DCisgKgorICogRW5hYmxlIHRoZSBNRDQgaGFzaCBhbGdvcml0aG0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX21kNC5jCisgKiBDYWxsZXI6CisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciAocmFyZSkgTUQ0LXNpZ25lZCBYLjUwOSBjZXJ0cy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUQ0X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUQ1X0MKKyAqCisgKiBFbmFibGUgdGhlIE1ENSBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfbWQ1LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BlbS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBTU0wvVExTIGFuZCBYLjUwOS4KKyAqIFBFTV9QQVJTRSB1c2VzIE1ENSBmb3IgZGVjcnlwdGluZyBlbmNyeXB0ZWQga2V5cy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUQ1X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisgKgorICogRW5hYmxlIHRoZSBidWZmZXIgYWxsb2NhdG9yIGltcGxlbWVudGF0aW9uIHRoYXQgbWFrZXMgdXNlIG9mIGEgKHN0YWNrKQorICogYmFzZWQgYnVmZmVyIHRvICdhbGxvY2F0ZScgZHluYW1pYyBtZW1vcnkuIChyZXBsYWNlcyBjYWxsb2MoKSBhbmQgZnJlZSgpCisgKiBjYWxscykKKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21lbW9yeV9idWZmZXJfYWxsb2MuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BMQVRGT1JNX0MKKyAqICAgICAgICAgICBNQkVEVExTX1BMQVRGT1JNX01FTU9SWSAodG8gdXNlIGl0IHdpdGhpbiBtYmVkIFRMUykKKyAqCisgKiBFbmFibGUgdGhpcyBtb2R1bGUgdG8gZW5hYmxlIHRoZSBidWZmZXIgbWVtb3J5IGFsbG9jYXRvci4KKyAqLworI2RlZmluZSBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ORVRfQworICoKKyAqIEVuYWJsZSB0aGUgVENQIGFuZCBVRFAgb3ZlciBJUHY2L0lQdjQgbmV0d29ya2luZyByb3V0aW5lcy4KKyAqCisgKiBcbm90ZSBUaGlzIG1vZHVsZSBvbmx5IHdvcmtzIG9uIFBPU0lYL1VuaXggKGluY2x1ZGluZyBMaW51eCwgQlNEIGFuZCBPUyBYKQorICogYW5kIFdpbmRvd3MuIEZvciBvdGhlciBwbGF0Zm9ybXMsIHlvdSdsbCB3YW50IHRvIGRpc2FibGUgaXQsIGFuZCB3cml0ZSB5b3VyCisgKiBvd24gbmV0d29ya2luZyBjYWxsYmFja3MgdG8gYmUgcGFzc2VkIHRvIFxjIG1iZWR0bHNfc3NsX3NldF9iaW8oKS4KKyAqCisgKiBcbm90ZSBTZWUgYWxzbyBvdXIgS25vd2xlZGdlIEJhc2UgYXJ0aWNsZSBhYm91dCBwb3J0aW5nIHRvIGEgbmV3CisgKiBlbnZpcm9ubWVudDoKKyAqIGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiL2hvdy10by9ob3ctZG8taS1wb3J0LW1iZWQtdGxzLXRvLWEtbmV3LWVudmlyb25tZW50LU9TCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9uZXQuYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIG5ldHdvcmtpbmcgcm91dGluZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX05FVF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX09JRF9DCisgKgorICogRW5hYmxlIHRoZSBPSUQgZGF0YWJhc2UuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9vaWQuYworICogQ2FsbGVyOiAgbGlicmFyeS9hc24xd3JpdGUuYworICogICAgICAgICAgbGlicmFyeS9wa2NzNS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BrcGFyc2UuYworICogICAgICAgICAgbGlicmFyeS9wa3dyaXRlLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcnNhLmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDlfY3JlYXRlLmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2NybC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOXdyaXRlX2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOXdyaXRlX2Nzci5jCisgKgorICogVGhpcyBtb2R1bGVzIHRyYW5zbGF0ZXMgYmV0d2VlbiBPSURzIGFuZCBpbnRlcm5hbCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QQURMT0NLX0MKKyAqCisgKiBFbmFibGUgVklBIFBhZGxvY2sgc3VwcG9ydCBvbiB4ODYuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wYWRsb2NrLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvYWVzLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19IQVZFX0FTTQorICoKKyAqIFRoaXMgbW9kdWxlcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBWSUEgUGFkTG9jayBvbiB4ODYuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BBRExPQ0tfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QRU1fUEFSU0VfQworICoKKyAqIEVuYWJsZSBQRU0gZGVjb2RpbmcgLyBwYXJzaW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGVtLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvZGhtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtwYXJzZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcmwuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2Nzci5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQkFTRTY0X0MKKyAqCisgKiBUaGlzIG1vZHVsZXMgYWRkcyBzdXBwb3J0IGZvciBkZWNvZGluZyAvIHBhcnNpbmcgUEVNIGZpbGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QRU1fUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QRU1fV1JJVEVfQworICoKKyAqIEVuYWJsZSBQRU0gZW5jb2RpbmcgLyB3cml0aW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGVtLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGt3cml0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDl3cml0ZV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDl3cml0ZV9jc3IuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JBU0U2NF9DCisgKgorICogVGhpcyBtb2R1bGVzIGFkZHMgc3VwcG9ydCBmb3IgZW5jb2RpbmcgLyB3cml0aW5nIFBFTSBmaWxlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEVNX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBwdWJsaWMgKGFzeW1ldHJpYykga2V5IGxheWVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGsuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1JTQV9DIG9yIE1CRURUTFNfRUNQX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGdlbmVyaWMgcHVibGljIGtleSB3cmFwcGVycy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BLX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfUEFSU0VfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBwdWJsaWMgKGFzeW1ldHJpYykga2V5IHBhcnNlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3BrcGFyc2UuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2Nzci5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUEtfQworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBwdWJsaWMga2V5IHBhcnNlIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BLX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfV1JJVEVfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBwdWJsaWMgKGFzeW1ldHJpYykga2V5IHdyaXRlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3Brd3JpdGUuYworICogQ2FsbGVyOiAgbGlicmFyeS94NTA5d3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BLX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGdlbmVyaWMgcHVibGljIGtleSB3cml0ZSBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BLX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzVfQworICoKKyAqIEVuYWJsZSBQS0NTIzUgZnVuY3Rpb25zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGtjczUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01EX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQS0NTIzUgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS0NTNV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLQ1MxMV9DCisgKgorICogRW5hYmxlIHdyYXBwZXIgZm9yIFBLQ1MjMTEgc21hcnRjYXJkIHN1cHBvcnQuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa2NzMTEuYworICogQ2FsbGVyOiAgbGlicmFyeS9way5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUEtfQworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgU1NML1RMUyBQS0NTICMxMSBzbWFydGNhcmQgc3VwcG9ydC4KKyAqIFJlcXVpcmVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgUEtDUyMxMSBoZWxwZXIgbGlicmFyeSAobGlicGtjczExLWhlbHBlcikKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtDUzExX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzEyX0MKKyAqCisgKiBFbmFibGUgUEtDUyMxMiBQQkUgZnVuY3Rpb25zLgorICogQWRkcyBhbGdvcml0aG1zIGZvciBwYXJzaW5nIFBLQ1MjOCBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlzCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa2NzMTIuYworICogQ2FsbGVyOiAgbGlicmFyeS9wa3BhcnNlLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19BU04xX1BBUlNFX0MsIE1CRURUTFNfQ0lQSEVSX0MsIE1CRURUTFNfTURfQworICogQ2FuIHVzZTogIE1CRURUTFNfQVJDNF9DCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBQS0NTIzEyIGZ1bmN0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtDUzEyX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fQworICoKKyAqIEVuYWJsZSB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIgdGhhdCBhbGxvd3MgeW91IHRvIHJlLWFzc2lnbgorICogZnVuY3Rpb25zIGxpa2UgY2FsbG9jKCksIGZyZWUoKSwgc25wcmludGYoKSwgcHJpbnRmKCksIGZwcmludGYoKSwgZXhpdCgpLgorICoKKyAqIEVuYWJsaW5nIE1CRURUTFNfUExBVEZPUk1fQyBlbmFibGVzIHRvIHVzZSBvZiBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQKKyAqIG9yIE1CRURUTFNfUExBVEZPUk1fWFhYX01BQ1JPIGRpcmVjdGl2ZXMsIGFsbG93aW5nIHRoZSBmdW5jdGlvbnMgbWVudGlvbmVkCisgKiBhYm92ZSB0byBiZSBzcGVjaWZpZWQgYXQgcnVudGltZSBvciBjb21waWxlIHRpbWUgcmVzcGVjdGl2ZWx5LgorICoKKyAqIFxub3RlIFRoaXMgYWJzdHJhY3Rpb24gbGF5ZXIgbXVzdCBiZSBlbmFibGVkIG9uIFdpbmRvd3MgKGluY2x1ZGluZyBNU1lTMikKKyAqIGFzIG90aGVyIG1vZHVsZSByZWx5IG9uIGl0IGZvciBhIGZpeGVkIHNucHJpbnRmIGltcGxlbWVudGF0aW9uLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGxhdGZvcm0uYworICogQ2FsbGVyOiAgTW9zdCBvdGhlciAuYyBmaWxlcworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgYWJzdHJhY3Rpb24gb2YgY29tbW9uIChsaWJjKSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1JJUEVNRDE2MF9DCisgKgorICogRW5hYmxlIHRoZSBSSVBFTUQtMTYwIGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19yaXBlbWQxNjAuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX21kLmMKKyAqCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1JJUEVNRDE2MF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1JTQV9DCisgKgorICogRW5hYmxlIHRoZSBSU0EgcHVibGljLWtleSBjcnlwdG9zeXN0ZW0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9yc2EuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS94NTA5LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcga2V5IGV4Y2hhbmdlczoKKyAqICAgICAgUlNBLCBESEUtUlNBLCBFQ0RIRS1SU0EsIFJTQS1QU0sKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CSUdOVU1fQywgTUJFRFRMU19PSURfQworICovCisvLyNkZWZpbmUgTUJFRFRMU19SU0FfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TSEExX0MKKyAqCisgKiBFbmFibGUgdGhlIFNIQTEgY3J5cHRvZ3JhcGhpYyBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfc2hhMS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogICAgICAgICAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS94NTA5d3JpdGVfY3J0LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUyBhbmQgU0hBMS1zaWduZWQgY2VydGlmaWNhdGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TSEExX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU0hBMjU2X0MKKyAqCisgKiBFbmFibGUgdGhlIFNIQS0yMjQgYW5kIFNIQS0yNTYgY3J5cHRvZ3JhcGhpYyBoYXNoIGFsZ29yaXRobXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3NoYTI1Ni5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2VudHJvcHkuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX21kLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFNIQS0yMjQgYW5kIFNIQS0yNTYuCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgdGhlIFNTTC9UTFMgMS4yIFBSRiBmdW5jdGlvbi4KKyAqLworI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NIQTUxMl9DCisgKgorICogRW5hYmxlIHRoZSBTSEEtMzg0IGFuZCBTSEEtNTEyIGNyeXB0b2dyYXBoaWMgaGFzaCBhbGdvcml0aG1zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19zaGE1MTIuYworICogQ2FsbGVyOiAgbGlicmFyeS9lbnRyb3B5LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFNIQS0zODQgYW5kIFNIQS01MTIuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NIQTUxMl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DQUNIRV9DCisgKgorICogRW5hYmxlIHNpbXBsZSBTU0wgY2FjaGUgaW1wbGVtZW50YXRpb24uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfY2FjaGUuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9DQUNIRV9DCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DT09LSUVfQworICoKKyAqIEVuYWJsZSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBEVExTIGNvb2tpZXMgZm9yIGhlbGxvIHZlcmlmaWNhdGlvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF9jb29raWUuYworICogQ2FsbGVyOgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0NPT0tJRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9USUNLRVRfQworICoKKyAqIEVuYWJsZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBUTFMgc2VydmVyLXNpZGUgY2FsbGJhY2tzIGZvciBzZXNzaW9uIHRpY2tldHMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfdGlja2V0LmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19DSVBIRVJfQworICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfVElDS0VUX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0NMSV9DCisgKgorICogRW5hYmxlIHRoZSBTU0wvVExTIGNsaWVudCBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvc3NsX2NsaS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1RMU19DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFNTTC9UTFMgY2xpZW50IHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0xJX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NSVl9DCisgKgorICogRW5hYmxlIHRoZSBTU0wvVExTIHNlcnZlciBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvc3NsX3Nydi5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1RMU19DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFNTTC9UTFMgc2VydmVyIHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfU1JWX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1RMU19DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIFNTTC9UTFMgY29kZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF90bHMuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQ0lQSEVSX0MsIE1CRURUTFNfTURfQworICogICAgICAgICAgIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlIE1CRURUTFNfU1NMX1BST1RPX1hYWCBkZWZpbmVzCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFNTTC9UTFMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVEhSRUFESU5HX0MKKyAqCisgKiBFbmFibGUgdGhlIHRocmVhZGluZyBhYnN0cmFjdGlvbiBsYXllci4KKyAqIEJ5IGRlZmF1bHQgbWJlZCBUTFMgYXNzdW1lcyBpdCBpcyB1c2VkIGluIGEgbm9uLXRocmVhZGVkIGVudmlyb25tZW50IG9yIHRoYXQKKyAqIGNvbnRleHRzIGFyZSBub3Qgc2hhcmVkIGJldHdlZW4gdGhyZWFkcy4gSWYgeW91IGRvIGludGVuZCB0byB1c2UgY29udGV4dHMKKyAqIGJldHdlZW4gdGhyZWFkcywgeW91IHdpbGwgbmVlZCB0byBlbmFibGUgdGhpcyBsYXllciB0byBwcmV2ZW50IHJhY2UKKyAqIGNvbmRpdGlvbnMuIFNlZSBhbHNvIG91ciBLbm93bGVkZ2UgQmFzZSBhcnRpY2xlIGFib3V0IHRocmVhZGluZzoKKyAqIGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiL2RldmVsb3BtZW50L3RocmVhZC1zYWZldHktYW5kLW11bHRpLXRocmVhZGluZworICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvdGhyZWFkaW5nLmMKKyAqCisgKiBUaGlzIGFsbG93cyBkaWZmZXJlbnQgdGhyZWFkaW5nIGltcGxlbWVudGF0aW9ucyAoc2VsZi1pbXBsZW1lbnRlZCBvcgorICogcHJvdmlkZWQpLgorICoKKyAqIFlvdSB3aWxsIGhhdmUgdG8gZW5hYmxlIGVpdGhlciBNQkVEVExTX1RIUkVBRElOR19BTFQgb3IKKyAqIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQuCisgKgorICogRW5hYmxlIHRoaXMgbGF5ZXIgdG8gYWxsb3cgdXNlIG9mIG11dGV4ZXMgd2l0aGluIG1iZWQgVExTCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1RIUkVBRElOR19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1RJTUlOR19DCisgKgorICogRW5hYmxlIHRoZSBzZW1pLXBvcnRhYmxlIHRpbWluZyBpbnRlcmZhY2UuCisgKgorICogXG5vdGUgVGhlIHByb3ZpZGVkIGltcGxlbWVudGF0aW9uIG9ubHkgd29ya3Mgb24gUE9TSVgvVW5peCAoaW5jbHVkaW5nIExpbnV4LAorICogQlNEIGFuZCBPUyBYKSBhbmQgV2luZG93cy4gT24gb3RoZXIgcGxhdGZvcm1zLCB5b3UgY2FuIGVpdGhlciBkaXNhYmxlIHRoYXQKKyAqIG1vZHVsZSBhbmQgcHJvdmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGNhbGxiYWNrcyBuZWVkZWQgYnkKKyAqIFxjIG1iZWR0bHNfc3NsX3NldF90aW1lcl9jYigpIGZvciBEVExTLCBvciBsZWF2ZSBpdCBlbmFibGVkIGFuZCBwcm92aWRlCisgKiB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgd2hvbGUgbW9kdWxlIGJ5IHNldHRpbmcKKyAqIFxjIE1CRURUTFNfVElNSU5HX0FMVCBpbiB0aGUgY3VycmVudCBmaWxlLgorICoKKyAqIFxub3RlIFNlZSBhbHNvIG91ciBLbm93bGVkZ2UgQmFzZSBhcnRpY2xlIGFib3V0IHBvcnRpbmcgdG8gYSBuZXcKKyAqIGVudmlyb25tZW50OgorICogaHR0cHM6Ly90bHMubWJlZC5vcmcva2IvaG93LXRvL2hvdy1kby1pLXBvcnQtbWJlZC10bHMtdG8tYS1uZXctZW52aXJvbm1lbnQtT1MKKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3RpbWluZy5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2hhdmVnZS5jCisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0aGUgSEFWRUdFIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19USU1JTkdfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19WRVJTSU9OX0MKKyAqCisgKiBFbmFibGUgcnVuLXRpbWUgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3ZlcnNpb24uYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHJ1bi10aW1lIHZlcnNpb24gaW5mb3JtYXRpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogRW5hYmxlIFguNTA5IGNvcmUgZm9yIHVzaW5nIGNlcnRpZmljYXRlcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3g1MDkuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3JsLmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jc3IuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FTTjFfUEFSU0VfQywgTUJFRFRMU19CSUdOVU1fQywgTUJFRFRMU19PSURfQywKKyAqICAgICAgICAgICBNQkVEVExTX1BLX1BBUlNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgdGhlIFguNTA5IHBhcnNpbmcgbW9kdWxlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9VU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogRW5hYmxlIFguNTA5IGNlcnRpZmljYXRlIHBhcnNpbmcuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFguNTA5IGNlcnRpZmljYXRlIHBhcnNpbmcuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQworICoKKyAqIEVuYWJsZSBYLjUwOSBDUkwgcGFyc2luZy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcmwuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFguNTA5IENSTCBwYXJzaW5nLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MKKyAqCisgKiBFbmFibGUgWC41MDkgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0IChDU1IpIHBhcnNpbmcuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqIENhbGxlcjogIGxpYnJhcnkveDUwOV9jcnRfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfVVNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGZvciByZWFkaW5nIFguNTA5IGNlcnRpZmljYXRlIHJlcXVlc3QuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DUkVBVEVfQworICoKKyAqIEVuYWJsZSBYLjUwOSBjb3JlIGZvciBjcmVhdGluZyBjZXJ0aWZpY2F0ZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS94NTA5X2NyZWF0ZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQklHTlVNX0MsIE1CRURUTFNfT0lEX0MsIE1CRURUTFNfUEtfV1JJVEVfQworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHRoZSBiYXNpcyBmb3IgY3JlYXRpbmcgWC41MDkgY2VydGlmaWNhdGVzIGFuZCBDU1JzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSRUFURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MKKyAqCisgKiBFbmFibGUgY3JlYXRpbmcgWC41MDkgY2VydGlmaWNhdGVzLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkveDUwOV9jcnRfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgY2VydGlmaWNhdGUgY3JlYXRpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQworICoKKyAqIEVuYWJsZSBjcmVhdGluZyBYLjUwOSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3RzIChDU1IpLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkveDUwOV9jc3Jfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgY2VydGlmaWNhdGUgcmVxdWVzdCB3cml0aW5nLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0NTUl9XUklURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1hURUFfQworICoKKyAqIEVuYWJsZSB0aGUgWFRFQSBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS94dGVhLmMKKyAqIENhbGxlcjoKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWFRFQV9DCisKKy8qIFx9IG5hbWUgU0VDVElPTjogbWJlZCBUTFMgbW9kdWxlcyAqLworCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyAqCisgKiBUaGlzIHNlY3Rpb24gYWxsb3dzIGZvciB0aGUgc2V0dGluZyBvZiBtb2R1bGUgc3BlY2lmaWMgc2l6ZXMgYW5kCisgKiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZQorICogcmVsZXZhbnQgaGVhZGVyIGZpbGVzIGFuZCBzaG91bGQgc3VmZmljZSBmb3IgdGhlIHJlZ3VsYXIgdXNlIGNhc2VzLgorICoKKyAqIE91ciBhZHZpY2UgaXMgdG8gZW5hYmxlIG9wdGlvbnMgYW5kIGNoYW5nZSB0aGVpciB2YWx1ZXMgaGVyZQorICogb25seSBpZiB5b3UgaGF2ZSBhIGdvb2QgcmVhc29uIGFuZCBrbm93IHRoZSBjb25zZXF1ZW5jZXMuCisgKgorICogUGxlYXNlIGNoZWNrIHRoZSByZXNwZWN0aXZlIGhlYWRlciBmaWxlIGZvciBkb2N1bWVudGF0aW9uIG9uIHRoZXNlCisgKiBwYXJhbWV0ZXJzICh0byBwcmV2ZW50IGR1cGxpY2F0ZSBkb2N1bWVudGF0aW9uKS4KKyAqIFx7CisgKi8KKworLyogTVBJIC8gQklHTlVNIG9wdGlvbnMgKi8KKyNkZWZpbmUgTUJFRFRMU19NUElfV0lORE9XX1NJWkUgICAgICAgICAgICAxIC8qKjwgTWF4aW11bSB3aW5kb3dzIHNpemUgdXNlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19NUElfTUFYX1NJWkUgICAgICAgICAgICAzMiAvKio8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGZvciB1c2FibGUgTVBJcy4gKi8KKworLyogQ1RSX0RSQkcgb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4gICAgICAgICAgICAgICA0OCAvKio8IEFtb3VudCBvZiBlbnRyb3B5IHVzZWQgcGVyIHNlZWQgYnkgZGVmYXVsdCAoNDggd2l0aCBTSEEtNTEyLCAzMiB3aXRoIFNIQS0yNTYpICovCisvLyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19SRVNFRURfSU5URVJWQUwgICAgICAgIDEwMDAwIC8qKjwgSW50ZXJ2YWwgYmVmb3JlIHJlc2VlZCBpcyBwZXJmb3JtZWQgYnkgZGVmYXVsdCAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfTUFYX0lOUFVUICAgICAgICAgICAgICAgIDI1NiAvKio8IE1heGltdW0gbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW5wdXQgYnl0ZXMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX01BWF9SRVFVRVNUICAgICAgICAgICAgIDEwMjQgLyoqPCBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgcGVyIGNhbGwgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUICAgICAgICAgICAzODQgLyoqPCBNYXhpbXVtIHNpemUgb2YgKHJlKXNlZWQgYnVmZmVyICovCisKKy8qIEhNQUNfRFJCRyBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfUkVTRUVEX0lOVEVSVkFMICAgMTAwMDAgLyoqPCBJbnRlcnZhbCBiZWZvcmUgcmVzZWVkIGlzIHBlcmZvcm1lZCBieSBkZWZhdWx0ICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfTUFYX0lOUFVUICAgICAgICAgICAyNTYgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBhZGRpdGlvbmFsIGlucHV0IGJ5dGVzICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfTUFYX1JFUVVFU1QgICAgICAgIDEwMjQgLyoqPCBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgcGVyIGNhbGwgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVCAgICAgIDM4NCAvKio8IE1heGltdW0gc2l6ZSBvZiAocmUpc2VlZCBidWZmZXIgKi8KKworLyogRUNQIG9wdGlvbnMgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfTUFYX0JJVFMgICAgICAgICAgICAgMjU2IC8qKjwgTWF4aW11bSBiaXQgc2l6ZSBvZiBncm91cHMgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUgICAgICAgICAgICAyIC8qKjwgTWF4aW11bSB3aW5kb3cgc2l6ZSB1c2VkICovCisjZGVmaW5lIE1CRURUTFNfRUNQX0ZJWEVEX1BPSU5UX09QVElNICAgICAgMCAvKio8IEVuYWJsZSBmaXhlZC1wb2ludCBzcGVlZC11cCAqLworCisvKiBFbnRyb3B5IG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfTUFYX1NPVVJDRVMgICAgICAgICAgICAgICAgMjAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBzb3VyY2VzIHN1cHBvcnRlZCAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NQVhfR0FUSEVSICAgICAgICAgICAgICAgIDEyOCAvKio8IE1heGltdW0gYW1vdW50IHJlcXVlc3RlZCBmcm9tIGVudHJvcHkgc291cmNlcyAqLworCisvKiBNZW1vcnkgYnVmZmVyIGFsbG9jYXRvciBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEUgICAgICA0IC8qKjwgQWxpZ24gb24gbXVsdGlwbGVzIG9mIHRoaXMgdmFsdWUgKi8KKworLyogUGxhdGZvcm0gb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX01FTV9IRFIgICA8c3RkbGliLmg+IC8qKjwgSGVhZGVyIHRvIGluY2x1ZGUgaWYgTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TIGlzIGRlZmluZWQuIERvbid0IGRlZmluZSBpZiBubyBoZWFkZXIgaXMgbmVlZGVkLiAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQyAgICAgICAgY2FsbG9jIC8qKjwgRGVmYXVsdCBhbGxvY2F0b3IgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRlJFRSAgICAgICAgICAgIGZyZWUgLyoqPCBEZWZhdWx0IGZyZWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVCAgICAgICAgICAgIGV4aXQgLyoqPCBEZWZhdWx0IGV4aXQgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfVElNRSAgICAgICAgICAgIHRpbWUgLyoqPCBEZWZhdWx0IHRpbWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URiAgICAgIGZwcmludGYgLyoqPCBEZWZhdWx0IGZwcmludGYgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfUFJJTlRGICAgICAgICBwcmludGYgLyoqPCBEZWZhdWx0IHByaW50ZiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8qIE5vdGU6IHlvdXIgc25wcmludGYgbXVzdCBjb3JyZWNsdHkgemVyby10ZXJtaW5hdGUgdGhlIGJ1ZmZlciEgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URiAgICBzbnByaW50ZiAvKio8IERlZmF1bHQgc25wcmludGYgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVF9TVUNDRVNTICAgICAgIDAgLyoqPCBEZWZhdWx0IGV4aXQgdmFsdWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVF9GQUlMVVJFICAgICAgIDEgLyoqPCBEZWZhdWx0IGV4aXQgdmFsdWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisKKy8qIFRvIFVzZSBGdW5jdGlvbiBNYWNyb3MgTUJFRFRMU19QTEFURk9STV9DIG11c3QgYmUgZW5hYmxlZCAqLworLyogTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8gYW5kIE1CRURUTFNfUExBVEZPUk1fWFhYX0FMVCBjYW5ub3QgYm90aCBiZSBkZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9DQUxMT0NfTUFDUk8gICAgICAgIGNhbGxvYyAvKio8IERlZmF1bHQgYWxsb2NhdG9yIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTyAgICAgICAgICAgIGZyZWUgLyoqPCBEZWZhdWx0IGZyZWUgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9FWElUX01BQ1JPICAgICAgICAgICAgZXhpdCAvKio8IERlZmF1bHQgZXhpdCBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1RJTUVfTUFDUk8gICAgICAgICAgICB0aW1lIC8qKjwgRGVmYXVsdCB0aW1lIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fVElNRV9UWVBFX01BQ1JPICAgICB1aW50MzJfdCAvKio8IERlZmF1bHQgdGltZSBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfTUFDUk8gICAgICBmcHJpbnRmIC8qKjwgRGVmYXVsdCBmcHJpbnRmIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX01BQ1JPICAgICAgICBwcmludGYgLyoqPCBEZWZhdWx0IHByaW50ZiBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8qIE5vdGU6IHlvdXIgc25wcmludGYgbXVzdCBjb3JyZWNsdHkgemVyby10ZXJtaW5hdGUgdGhlIGJ1ZmZlciEgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPICAgIHNucHJpbnRmIC8qKjwgRGVmYXVsdCBzbnByaW50ZiBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKworLyogU1NMIENhY2hlIG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX1RJTUVPVVQgICAgICAgODY0MDAgLyoqPCAxIGRheSAgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX01BWF9FTlRSSUVTICAgICAgNTAgLyoqPCBNYXhpbXVtIGVudHJpZXMgaW4gY2FjaGUgKi8KKworLyogU1NMIG9wdGlvbnMgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICAgICAgICAgICAgIDc2OCAvKio8IE1heGl1bSBmcmFnbWVudCBsZW5ndGggaW4gYnl0ZXMsIGRldGVybWluZXMgdGhlIHNpemUgb2YgZWFjaCBvZiB0aGUgdHdvIGludGVybmFsIEkvTyBidWZmZXJzICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfREVGQVVMVF9USUNLRVRfTElGRVRJTUUgICAgIDg2NDAwIC8qKjwgTGlmZXRpbWUgb2Ygc2Vzc2lvbiB0aWNrZXRzIChpZiBlbmFibGVkKSAqLworLy8jZGVmaW5lIE1CRURUTFNfUFNLX01BWF9MRU4gICAgICAgICAgICAgICAzMiAvKio8IE1heCBzaXplIG9mIFRMUyBwcmUtc2hhcmVkIGtleXMsIGluIGJ5dGVzIChkZWZhdWx0IDI1NiBiaXRzKSAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0NPT0tJRV9USU1FT1VUICAgICAgICA2MCAvKio8IERlZmF1bHQgZXhwaXJhdGlvbiBkZWxheSBvZiBEVExTIGNvb2tpZXMsIGluIHNlY29uZHMgaWYgSEFWRV9USU1FLCBvciBpbiBudW1iZXIgb2YgY29va2llcyBpc3N1ZWQgKi8KKworLyoqCisgKiBDb21wbGV0ZSBsaXN0IG9mIGNpcGhlcnN1aXRlcyB0byB1c2UsIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCisgKgorICogXHdhcm5pbmcgTm8gZGVwZW5kZW5jeSBjaGVja2luZyBpcyBkb25lIG9uIHRoYXQgZmllbGQhIFRoaXMgb3B0aW9uIGNhbiBvbmx5CisgKiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBzZXQgb2YgYXZhaWxhYmxlIGNpcGhlcnN1aXRlcy4gSXQgaXMgeW91cgorICogcmVzcG9uc2liaWxpdHkgdG8gbWFrZSBzdXJlIHRoZSBuZWVkZWQgbW9kdWxlcyBhcmUgYWN0aXZlLgorICoKKyAqIFVzZSB0aGlzIHRvIHNhdmUgYSBmZXcgaHVuZHJlZCBieXRlcyBvZiBST00gKGRlZmF1bHQgb3JkZXJpbmcgb2YgYWxsCisgKiBhdmFpbGFibGUgY2lwaGVyc3VpdGVzKSBhbmQgYSBmZXcgdG8gYSBmZXcgaHVuZHJlZCBieXRlcyBvZiBSQU0uCisgKgorICogVGhlIHZhbHVlIGJlbG93IGlzIG9ubHkgYW4gZXhhbXBsZSwgbm90IHRoZSBkZWZhdWx0LgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUyBNQkVEVExTX1RMU19FQ0pQQUtFX1dJVEhfQUVTXzEyOF9DQ01fOAorCisvKiBYNTA5IG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQSAgIDggICAvKio8IE1heGltdW0gbnVtYmVyIG9mIGludGVybWVkaWF0ZSBDQXMgaW4gYSB2ZXJpZmljYXRpb24gY2hhaW4uICovCisKKy8qIFx9IG5hbWUgU0VDVElPTjogTW9kdWxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLworCisjaWYgZGVmaW5lZChUQVJHRVRfTElLRV9NQkVEKQorI2luY2x1ZGUgIm1iZWR0bHMvdGFyZ2V0X2NvbmZpZy5oIgorI2VuZGlmCisKKy8qCisgKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIGFueSBwcmV2aW91cyBkZWZhdWx0LgorICoKKyAqIFVzZSB0d28gbWFjcm8gbmFtZXMgZm9yIHRoYXQsIGFzOgorICogLSB3aXRoIHlvdHRhIHRoZSBwcmVmaXggWU9UVEFfQ0ZHXyBpcyBmb3JjZWQKKyAqIC0gd2l0aG91dCB5b3R0YSBpcyBsb29rcyB3ZWlyZCB0byBoYXZlIGEgWU9UVEEgcHJlZml4LgorICovCisjaWYgZGVmaW5lZChZT1RUQV9DRkdfTUJFRFRMU19VU0VSX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgWU9UVEFfQ0ZHX01CRURUTFNfVVNFUl9DT05GSUdfRklMRQorI2VsaWYgZGVmaW5lZChNQkVEVExTX1VTRVJfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSBNQkVEVExTX1VTRVJfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9jaGVja19jb25maWcuaCIKKworI2VuZGlmIC8qIE1CRURUTFNfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL3NoYTI1Nl9hbHQuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL3NoYTI1Nl9hbHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjNlNzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jcnlwdG8vc2hhMjU2X2FsdC5jCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAic2hhMjU2X2FsdC5oIgorCisjaWZkZWYgTUJFRFRMU19TSEEyNTZfQUxUCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoqCisgKiBkb2N1bWVudGVkIGluIHNoYTI1Nl9hbHQuaAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2luaXQobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4KQoreworICAgIG1lbXNldCgodm9pZCAqKWN0eCwgMHgwMCwgc2l6ZW9mKGN0eCkpOworfQorCisvKioKKyAqIGRvY3VtZW50ZWQgaW4gc2hhMjU2X2FsdC5oCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfZnJlZShtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgpCit7CisgICAgbWVtc2V0KCh2b2lkICopY3R4LCAweDAwLCBzaXplb2YoY3R4KSk7Cit9CisKKy8qKgorICogZG9jdW1lbnRlZCBpbiBzaGEyNTZfYWx0LmgKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl9jbG9uZShtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpkc3QsIGNvbnN0IG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKnNyYykKK3sKKyAgICAqZHN0ID0gKnNyYzsKK30KKworLyoqCisgKiBkb2N1bWVudGVkIGluIHNoYTI1Nl9hbHQuaAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cyhtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGludCBpczIyNCkKK3sKKyAgICBTSEEyNTZfaW5pdGlhbGl6ZShjdHgpOworCisgICAgaWYgKGlzMjI0ICE9IDApCisgICAgeworICAgICAgICAvKiBTSEEtMjI0ICovCisgICAgICAgIGN0eC0+c3RhdGVbMF0gPSAweEMxMDU5RUQ4OworICAgICAgICBjdHgtPnN0YXRlWzFdID0gMHgzNjdDRDUwNzsKKyAgICAgICAgY3R4LT5zdGF0ZVsyXSA9IDB4MzA3MEREMTc7CisgICAgICAgIGN0eC0+c3RhdGVbM10gPSAweEY3MEU1OTM5OworICAgICAgICBjdHgtPnN0YXRlWzRdID0gMHhGRkMwMEIzMTsKKyAgICAgICAgY3R4LT5zdGF0ZVs1XSA9IDB4Njg1ODE1MTE7CisgICAgICAgIGN0eC0+c3RhdGVbNl0gPSAweDY0Rjk4RkE3OworICAgICAgICBjdHgtPnN0YXRlWzddID0gMHhCRUZBNEZBNDsKKyAgICB9Cit9CisKKy8qKgorICogZG9jdW1lbnRlZCBpbiBzaGEyNTZfYWx0LmgKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl91cGRhdGUobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4pCit7CisgICAgU0hBMjU2X2V4ZWN1dGUoY3R4LCAodWludDhfdCAqKWlucHV0LCAodWludDMyX3QpaWxlbik7Cit9CisKK2NoYXIgKndvcmthcm91bmRfY2MyNjUwX3JvbTsKKworLyoqCisgKiBkb2N1bWVudGVkIGluIHNoYTI1Nl9hbHQuaAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaChtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzMyXSkKK3sKKyAgICAvKiB3b3JrYXJvdW5kIGZvciBlcnJvciBpbiBjb3B5IHN1YnJvdXRpbmUgb2YgU0hBMjU2IFJPTSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgKiBBbGxvY2F0ZSBhbiBleHRyYSA2NCBieXRlcyBvbiB0aGUgc3RhY2sgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYnVmZmVyCisgICAgICogcm9vbS4gVGhpcyBjb3VsZCBiZSBvcHRvbWl6ZWQgb3V0IGlmIHlvdSBuZXZlciBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aAorICAgICAqIGEgY2FsbCBzdGFjayBzaG9ydGVyIHRoYW4gMTYgd29yZHMsIGFwcHJveC4gOCBzdGFjayBmcmFtZXMuCisgICAgICoKKyAgICAgKiBUaGUgc2ltcGxlIGRlc2NyaXB0aW9uIGlzIHRoaXM6CisgICAgICogICAgSWYgdGhlIHN0YWNrIHBvaW50ZXIgaXMgd2l0aGluIDY0Ynl0ZXMgb2YgdGhlIGVuZCBvZiBSQU0KKyAgICAgKiAgICB0aGUgYnVnIGV4cG9zZXMgaXQgc2VsZi4KKyAgICAgKiAgICBJZiB0aGUgc3RhY2sgcG9pbnRlciBpcyBtb3JlIHRoZW4gNjRieXRlcyBmcm9tIGVuZCBvZiBSQU0KKyAgICAgKiAgICBUaGVyZSBpcyBubyBidWcuLi4KKyAgICAgKiBTb2x1dGlvbjoKKyAgICAgKiAgICBNYWtlIGEgNjRieXRlIGJ1ZmZlciBvbiB0aGUgc3RhY2suLgorICAgICAqICAgIEFuZCBmb3JjZSB0aGUgY29tcGlsZXIgdG8gdGhpbmsgaXQgcmVxdWlyZXMgdGhpcyBidWZmZXIuCisgICAgICovCisgICAgY2hhciBidWZmZXJbIDY0IF07CisgICAgd29ya2Fyb3VuZF9jYzI2NTBfcm9tID0gJmJ1ZmZlclswXTsKKyAgICBTSEEyNTZfb3V0cHV0KGN0eCwgKHVpbnQ4X3QgKilvdXRwdXQpOworICAgIHJldHVybjsKK30KKworLyoqCisgKiBkb2N1bWVudGVkIGluIHNoYTI1Nl9hbHQuaAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdKQoreworICAgIFNIQTI1Nl9leGVjdXRlKGN0eCwgKHVpbnQ4X3QgKilkYXRhLCBzaXplb2YodW5zaWduZWQgY2hhcikgKiA2NCk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9BTFQgKi8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL3NoYTI1Nl9hbHQuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL3NoYTI1Nl9hbHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjc0ZWIyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jcnlwdG8vc2hhMjU2X2FsdC5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1CRURUTFNfU0hBMjU2X0FMVF9ICisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X0FMVF9ICisKKyNpZm5kZWYgTUJFRFRMU19DT05GSUdfRklMRQorI2luY2x1ZGUgImNjMjY1MC1tYmVkdGxzLWNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWZkZWYgTUJFRFRMU19TSEEyNTZfQUxUCisKKyNpbmNsdWRlICJkcml2ZXJsaWIvcm9tX2NyeXB0by5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGJyaWVmIHRyYW5zbGF0aW5nIHRoZSBtYmVkdGxzIFNIQTI1NiB3b3Jrc3BhY2UgdG8gdGhlIGNjMjY1MCBTSEEyNTYgd29ya3NwYWNlLgorICovCit0eXBlZGVmIFNIQTI1Nl9tZW1vcnlfdCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0OworCisvKioKKyAqIEBicmllZiBJbml0aWFsaXplIFNIQS0yNTYgY29udGV4dAorICoKKyAqIEBwYXJhbSBbaW4sb3V0XSBjdHggU0hBLTI1NiBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfaW5pdChtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgpOworCisvKioKKyAqIEBicmllZiBDbGVhciBTSEEtMjU2IGNvbnRleHQKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IFNIQS0yNTYgY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfZnJlZShtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgpOworCisvKioKKyAqIEBicmllZiBDbG9uZSAodGhlIHN0YXRlIG9mKSBhIFNIQS0yNTYgY29udGV4dAorICoKKyAqIEBwYXJhbSBbb3V0XSBkc3QgVGhlIGRlc3RpbmF0aW9uIGNvbnRleHQKKyAqIEBwYXJhbSBbaW5dIHNyYyBUaGUgY29udGV4dCB0byBiZSBjbG9uZWQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl9jbG9uZShtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKnNyYyk7CisKKy8qKgorICogQGJyaWVmIFNIQS0yNTYgY29udGV4dCBzZXR1cAorICoKKyAqIEBwYXJhbSBbaW4sb3V0XSBjdHggY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogQHBhcmFtIFtpbl0gaXMyMjQgMCA9IHVzZSBTSEEyNTYsIDEgPSB1c2UgU0hBMjI0CisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfc3RhcnRzKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgaW50IGlzMjI0KTsKKworLyoqCisgKiBAYnJpZWYgU0hBLTI1NiBwcm9jZXNzIGJ1ZmZlcgorICoKKyAqIEBwYXJhbSBbaW4sb3V0XSBjdHggU0hBLTI1NiBjb250ZXh0CisgKiBAcGFyYW0gW2luXSBpbnB1dCBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIEBwYXJhbSBbaW5dIGlsZW4gbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfdXBkYXRlKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuKTsKKworLyoqCisgKiBAYnJpZWYgU0hBLTI1NiBmaW5hbCBkaWdlc3QKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IFNIQS0yNTYgY29udGV4dAorICogQHBhcmFtIFtvdXRdIG91dHB1dCBTSEEtMjI0LzI1NiBjaGVja3N1bSByZXN1bHQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl9maW5pc2gobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIG91dHB1dFszMl0pOworCisvKiBJbnRlcm5hbCB1c2UgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfcHJvY2VzcyhtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVs2NF0pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQUxUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9BTFRfSCAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9kaWFnLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2RpYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTkyODVmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9kaWFnLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oPgorCisKKy8qKgorICogRGlhZ25vc3RpY3MgbW9kZSB2YXJpYWJsZXMuCisgKgorICovCitzdGF0aWMgYm9vbCBzRGlhZ01vZGUgPSBmYWxzZTsKKwordm9pZCBvdFBsYXREaWFnUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKQoreworICAgIC8vIEFkZCBtb3JlIHBsYXJmb3JtIHNwZWNpZmljIGRpYWdub3N0aWNzIGZlYXR1cmVzIGhlcmUuCisgICAgaWYgKGFyZ2MgPiAxKQorICAgIHsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgImRpYWcgZmVhdHVyZSAnJXMnIGlzIG5vdCBzdXBwb3J0ZWRcclxuIiwgYXJndlswXSk7CisgICAgfQorCisgICAgKHZvaWQpIGFyZ2M7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKK30KKwordm9pZCBvdFBsYXREaWFnTW9kZVNldChib29sIGFNb2RlKQoreworICAgIHNEaWFnTW9kZSA9IGFNb2RlOworfQorCitib29sIG90UGxhdERpYWdNb2RlR2V0KCkKK3sKKyAgICByZXR1cm4gc0RpYWdNb2RlOworfQorCit2b2lkIG90UGxhdERpYWdDaGFubmVsU2V0KHVpbnQ4X3QgYUNoYW5uZWwpCit7CisgICAgKHZvaWQpIGFDaGFubmVsOworfQorCit2b2lkIG90UGxhdERpYWdUeFBvd2VyU2V0KGludDhfdCBhVHhQb3dlcikKK3sKKyAgICAodm9pZCkgYVR4UG93ZXI7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ1JhZGlvUmVjZWl2ZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKyAgICAodm9pZCkgYUZyYW1lOworICAgICh2b2lkKSBhRXJyb3I7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ0FsYXJtQ2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhYTEyMwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvZmxhc2guYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicGxhdGZvcm0tY2MyNjUwLmgiCisKKy8qKgorICogQHdhcm5pbmcgdGhpcyBmaWxlIG9ubHkgaW1wbGVtZW50cyBzdHVicyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGxzLiBUaGVyZSBpcworICogbm90IGVub3VnaCBzcGFjZSBvbiB0aGUgY2MyNjUwIHRvIHN1cHBvcnQgTlYgYXMgYW4gU29DLgorICovCisKK290RXJyb3IgdXRpbHNGbGFzaEluaXQodm9pZCkKK3sKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoR2V0U2l6ZSh2b2lkKQoreworICAgIHJldHVybiAwOworfQorCitvdEVycm9yIHV0aWxzRmxhc2hFcmFzZVBhZ2UodWludDMyX3QgYUFkZHJlc3MpCit7CisgICAgKHZvaWQpYUFkZHJlc3M7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoU3RhdHVzV2FpdCh1aW50MzJfdCBhVGltZW91dCkKK3sKKyAgICAodm9pZClhVGltZW91dDsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaFdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgKHZvaWQpYUFkZHJlc3M7CisgICAgKHZvaWQpYURhdGE7CisgICAgKHZvaWQpYVNpemU7CisgICAgcmV0dXJuIDA7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hSZWFkKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgKHZvaWQpYUFkZHJlc3M7CisgICAgKHZvaWQpYURhdGE7CisgICAgKHZvaWQpYVNpemU7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL21pc2MuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjA0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL21pc2MuYwpAQCAtMCwwICsxLDc2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zeXNfY3RybC5oPgorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vbWlzYy5oCisgKi8KK3ZvaWQgb3RQbGF0UmVzZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBTeXNDdHJsU3lzdGVtUmVzZXQoKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL21pc2MuaAorICovCitvdFBsYXRSZXNldFJlYXNvbiBvdFBsYXRHZXRSZXNldFJlYXNvbihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgc3dpdGNoIChTeXNDdHJsUmVzZXRTb3VyY2VHZXQoKSkKKyAgICB7CisgICAgY2FzZSBSU1RTUkNfUFdSX09OOgorICAgICAgICByZXR1cm4gT1RfUExBVF9SRVNFVF9SRUFTT05fUE9XRVJfT047CisKKyAgICBjYXNlIFJTVFNSQ19QSU5fUkVTRVQ6CisgICAgICAgIHJldHVybiBPVF9QTEFUX1JFU0VUX1JFQVNPTl9FWFRFUk5BTDsKKworICAgIGNhc2UgUlNUU1JDX1ZERFNfTE9TUzoKKyAgICBjYXNlIFJTVFNSQ19WRERfTE9TUzoKKyAgICBjYXNlIFJTVFNSQ19WRERSX0xPU1M6CisgICAgY2FzZSBSU1RTUkNfQ0xLX0xPU1M6CisgICAgICAgIHJldHVybiBPVF9QTEFUX1JFU0VUX1JFQVNPTl9DUkFTSDsKKworICAgIGNhc2UgUlNUU1JDX1dBUk1SRVNFVDoKKyAgICBjYXNlIFJTVFNSQ19TWVNSRVNFVDoKKyAgICBjYXNlIFJTVFNSQ19XQUtFVVBfRlJPTV9TSFVURE9XTjoKKyAgICAgICAgcmV0dXJuIE9UX1BMQVRfUkVTRVRfUkVBU09OX1NPRlRXQVJFOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIE9UX1BMQVRfUkVTRVRfUkVBU09OX1VOS05PV047CisgICAgfQorfQorCit2b2lkIG90UGxhdFdha2VIb3N0KHZvaWQpCit7CisgICAgLy8gVE9ETzogaW1wbGVtZW50IGFuIG9wZXJhdGlvbiB0byB3YWtlIHRoZSBob3N0IGZyb20gc2xlZXAgc3RhdGUuCit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL29wZW50aHJlYWQtY29yZS1jYzI2NTAtY29uZmlnLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL29wZW50aHJlYWQtY29yZS1jYzI2NTAtY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzZjdiOQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvb3BlbnRocmVhZC1jb3JlLWNjMjY1MC1jb25maWcuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9DQzI2NTBfQ09ORklHX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ09SRV9DQzI2NTBfQ09ORklHX0hfCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTCisgKgorICogVGhlIG51bWJlciBvZiBtZXNzYWdlIGJ1ZmZlcnMgaW4gYnVmZmVyIHBvb2wKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTIDMyCisKKy8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTEVHQUNZX1RSQU5TTUlUX0RPTkUKKyAgKgorICAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHVzZSBsZWdhY3kgdHJhbnNtaXQgZG9uZS4KKyAgKgorICAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MRUdBQ1lfVFJBTlNNSVRfRE9ORSAxCisKKyNlbmRpZiAvKiBPUEVOVEhSRUFEX0NPUkVfQ0MyNjUwX0NPTkZJR19IXyAqLworCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3BsYXRmb3JtLWNjMjY1MC5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9wbGF0Zm9ybS1jYzI2NTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODI2NmVkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9wbGF0Zm9ybS1jYzI2NTAuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBMQVRGT1JNX0hfCisjZGVmaW5lIFBMQVRGT1JNX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJvcGVudGhyZWFkL3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gR2xvYmFsIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlCitleHRlcm4gb3RJbnN0YW5jZSAqc0luc3RhbmNlOworCisvKioKKyAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBhbGFybSBzZXJ2aWNlIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqCisgKi8KK3ZvaWQgY2MyNjUwQWxhcm1Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIGFsYXJtIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqLwordm9pZCBjYzI2NTBBbGFybVByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgcmFkaW8gc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGNjMjY1MFJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyByYWRpbyBkcml2ZXIgcHJvY2Vzc2luZy4KKyAqCisgKi8KK3ZvaWQgY2MyNjUwUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIHJhbmRvbSBudW1iZXIgc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGNjMjY1MFJhbmRvbUluaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBtZXRob2QgcGVyZm9ybXMgcmFkaW8gZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICovCit2b2lkIGNjMjY1MFVhcnRQcm9jZXNzKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFBMQVRGT1JNX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3BsYXRmb3JtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4YmMzMQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDY5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSAicGxhdGZvcm0tY2MyNjUwLmgiCisKK2V4dGVybiBjb25zdCBjaGFyIF9fY2NmZ1tdOworCitjb25zdCBjaGFyICpkdW1teV9jY2ZnX3JlZiA9ICgoY29uc3QgY2hhciAqKSgmKF9fY2NmZ1swXSkpKTsKKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtLWNjMjY1MC5oCisgKi8KK3ZvaWQgUGxhdGZvcm1Jbml0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgKHZvaWQpIGFyZ2M7CisgICAgKHZvaWQpIGFyZ3Y7CisKKyAgICB3aGlsZSAoZHVtbXlfY2NmZ19yZWYgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgKiBUaGlzIHByb3ZpZGVzIGEgY29kZSByZWZlcmVuY2UgdG8gdGhlIGN1c3RvbWVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAqIGFyZWEgb2YgdGhlIGZsYXNoLCBvdGhlcndpc2UgdGhlIGRhdGEgaXMgc2tpcHBlZCBieSB0aGUKKyAgICAgICAgICAqIGxpbmtlciBhbmQgbm90IHB1dCBpbnRvIHRoZSBmaW5hbCBmbGFzaCBpbWFnZS4KKyAgICAgICAgICAqLworICAgIH0KKworICAgIGNjMjY1MEFsYXJtSW5pdCgpOworICAgIGNjMjY1MFJhbmRvbUluaXQoKTsKKyAgICBjYzI2NTBSYWRpb0luaXQoKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtLWNjMjY1MC5oCisgKi8KK3ZvaWQgUGxhdGZvcm1Qcm9jZXNzRHJpdmVycyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgLy8gc2hvdWxkIHNsZWVwIGFuZCB3YWl0IGZvciBpbnRlcnJ1cHRzIGhlcmUKKworICAgIGNjMjY1MFVhcnRQcm9jZXNzKCk7CisgICAgY2MyNjUwUmFkaW9Qcm9jZXNzKGFJbnN0YW5jZSk7CisgICAgY2MyNjUwQWxhcm1Qcm9jZXNzKGFJbnN0YW5jZSk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3JhZGlvLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3JhZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjMzFiNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvcmFkaW8uYwpAQCAtMCwwICsxLDE4NjUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisjaW5jbHVkZSAiY2MyNjUwX3JhZGlvLmgiCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+IC8qIHRvIHNlZWQgdGhlIENTTUEtQ0EgZnVuY2l0b24gKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9wcmNtLmg+CisjaW5jbHVkZSA8aW5jL2h3X3ByY20uaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ZjZmcxLmg+CisjaW5jbHVkZSA8aW5jL2h3X2NjZmcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZjLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL29zYy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9kYXRhX2VudHJ5Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3JmX21haWxib3guaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZfY29tbW9uX2NtZC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9pZWVlX21haWxib3guaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZfaWVlZV9jbWQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvY2hpcGluZm8uaD4KKworZW51bQoreworICAgIENDMjY1MF9SRUNFSVZFX1NFTlNJVElWSVRZID0gLTEwMCwgIC8vIGRCbQorfTsKKworLyogcGh5IHN0YXRlIGFzIGRlZmluZWQgYnkgb3BlbnRocmVhZCAqLworc3RhdGljIHZvbGF0aWxlIGNjMjY1MF9QaHlTdGF0ZSBzU3RhdGU7CisKK3N0YXRpYyBvdXRwdXRfY29uZmlnX3QgY29uc3QgKnNDdXJyZW50T3V0cHV0UG93ZXIgPSAmKHJnT3V0cHV0UG93ZXJbT1VUUFVUX0NPTkZJR19DT1VOVCAtIDFdKTsKKworLyogT3ZlcnJpZGVzIGZvciBJRUVFIDgwMi4xNS40LCBkaWZmZXJlbnRpYWwgbW9kZSAqLworc3RhdGljIHVpbnQzMl90IHNJRUVFT3ZlcnJpZGVzW10gPQoreworICAgIDB4MDAzNTQwMzgsIC8qIFN5bnRoOiBTZXQgUlRSSU0gKFBPVEFJTFJFU1RSSU0pIHRvIDUgKi8KKyAgICAweDQwMDE0MDJELCAvKiBTeW50aDogQ29ycmVjdCBDS1ZEIGxhdGVuY3kgc2V0dGluZyAoYWRkcmVzcykgKi8KKyAgICAweDAwNjA4NDAyLCAvKiBTeW50aDogQ29ycmVjdCBDS1ZEIGxhdGVuY3kgc2V0dGluZyAodmFsdWUpICovCisgICAgMHgwMDA3ODRBMywgLyogU3ludGg6IFNldCBGUkVGID0gMy40MyBNSHogKDI0IE1IeiAvIDcpICovCisgICAgMHhBNDdFMDU4MywgLyogU3ludGg6IFNldCBsb29wIGJhbmR3aWR0aCBhZnRlciBsb2NrIHRvIDgwIGtIeiAoSzIpICovCisgICAgMHhFQUUwMDYwMywgLyogU3ludGg6IFNldCBsb29wIGJhbmR3aWR0aCBhZnRlciBsb2NrIHRvIDgwIGtIeiAoSzMsIExTQikgKi8KKyAgICAweDAwMDEwNjIzLCAvKiBTeW50aDogU2V0IGxvb3AgYmFuZHdpZHRoIGFmdGVyIGxvY2sgdG8gODAga0h6IChLMywgTVNCKSAqLworICAgIDB4MDAyQjUwREMsIC8qIEFkanVzdCBBR0MgREMgZmlsdGVyICovCisgICAgMHgwNTAwMDI0MywgLyogSW5jcmVhc2Ugc3ludGggcHJvZ3JhbW1pbmcgdGltZW91dCAqLworICAgIDB4MDAyMDgyQzMsIC8qIEluY3JlYXNlIHN5bnRoIHByb2dyYW1taW5nIHRpbWVvdXQgKi8KKyAgICAweEZGRkZGRkZGLCAvKiBFbmQgb2Ygb3ZlcnJpZGUgbGlzdCAqLworfTsKKworLyoKKyAqIHN0YXR1cyBvZiB0aGUgcGVuZGluZyBiaXQgb2YgdGhlIGxhc3QgYWNrIHBhY2tldCBmb3VuZCBieSB0aGUKKyAqIHNUcmFuc21pdFJ4QWNrQ21kIHJhZGlvIGNvbW1hbmQKKyAqCisgKiB1c2VkIHRvIHBhc3MgZGF0YSBmcm9tIHRoZSByYWRpbyBzdGF0ZSBJU1IgdG8gdGhlIHByb2Nlc3NpbmcgbG9vcAorICovCitzdGF0aWMgdm9sYXRpbGUgYm9vbCBzUmVjZWl2ZWRBY2tQZW5kaW5nQml0ID0gZmFsc2U7CisKKy8qCisgKiBudW1iZXIgb2YgcmV0cnkgY291bnRzIGxlZnQgdG8gdGhlIGN1cnJlbnRseSB0cmFuc21pdHRpbmcgZnJhbWUKKyAqCisgKiBpbml0aWFsaXplZCB3aGVuIGEgZnJhbWUgaXMgcGFzc2VkIHRvIGJlIHNlbnQgb3ZlciB0aGUgYWlyLCBhbmQgZGVjcmVtZW50ZWQKKyAqIGJ5IHRoZSByYWRpbyBJU1IgZXZlcnkgdGltZSB0aGUgdHJhbnNtaXQgY29tbWFuZCBzdHJpbmcgZmFpbHMgdG8gcmVjZWl2ZSBhCisgKiBjb3JyZXNwb25kaW5nIGFjaworICovCitzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNUcmFuc21pdFJldHJ5Q291bnQgPSAwOworCisvKgorICogb2Zmc2V0IG9mIHRoZSByYWRpbyB0aW1lciBmcm9tIHRoZSBydGMKKyAqCisgKiB1c2VkIHdoZW4gd2Ugc3RhcnQgYW5kIHN0b3AgdGhlIFJBVAorICovCitzdGF0aWMgdWludDMyX3Qgc1JhdE9mZnNldCA9IDA7CisKKy8qCisgKiByYWRpbyBjb21tYW5kIHN0cnVjdHVyZXMgdGhhdCBydW4gb24gdGhlIENNMAorICovCitzdGF0aWMgdm9sYXRpbGUgcmZjX0NNRF9TWU5DX1NUQVJUX1JBVF90ICAgICBzU3RhcnRSYXRDbWQ7CitzdGF0aWMgdm9sYXRpbGUgcmZjX0NNRF9SQURJT19TRVRVUF90ICAgICAgICBzUmFkaW9TZXR1cENtZDsKKworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfRlNfUE9XRVJET1dOX3QgICAgICAgc0ZzUG93ZXJkb3duQ21kOworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfU1lOQ19TVE9QX1JBVF90ICAgICAgc1N0b3BSYXRDbWQ7CisKK3N0YXRpYyB2b2xhdGlsZSByZmNfQ01EX0NMRUFSX1JYX3QgICAgICAgICAgIHNDbGVhclJlY2VpdmVRdWV1ZUNtZDsKK3N0YXRpYyB2b2xhdGlsZSByZmNfQ01EX0lFRUVfTU9EX0ZJTFRfdCAgICAgIHNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kOworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfSUVFRV9NT0RfU1JDX01BVENIX3Qgc01vZGlmeVJlY2VpdmVTcmNNYXRjaENtZDsKKworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfSUVFRV9FRF9TQ0FOX3QgICAgICAgc0VkU2NhbkNtZDsKKworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfSUVFRV9SWF90ICAgICAgICAgICAgc1JlY2VpdmVDbWQ7CisKK3N0YXRpYyB2b2xhdGlsZSByZmNfQ01EX0lFRUVfQ1NNQV90ICAgICAgICAgIHNDc21hY2FCYWNrb2ZmQ21kOworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfSUVFRV9UWF90ICAgICAgICAgICAgc1RyYW5zbWl0Q21kOworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfSUVFRV9SWF9BQ0tfdCAgICAgICAgc1RyYW5zbWl0UnhBY2tDbWQ7CisKK3N0YXRpYyB2b2xhdGlsZSBleHRfc3JjX21hdGNoX2RhdGFfdCAgICAgICAgIHNTcmNNYXRjaEV4dERhdGE7CitzdGF0aWMgdm9sYXRpbGUgc2hvcnRfc3JjX21hdGNoX2RhdGFfdCAgICAgICBzU3JjTWF0Y2hTaG9ydERhdGE7CisKKy8qIHN0cnVjdCBjb250YWluaW5nIHJhZGlvIHN0YXRzICovCitzdGF0aWMgcmZjX2llZWVSeE91dHB1dF90IHNSZlN0YXRzOworCisjZGVmaW5lIFJYX0JVRl9TSVpFIDE0NAorLyogdHdvIHJlY2VpdmUgYnVmZmVycyBlbnRyaWVzIHdpdGggcm9vbSBmb3IgMSBtYXggSUVFRTgwMi4xNS40IGZyYW1lIGluIGVhY2ggKi8KK3N0YXRpYyB1aW50OF90IHNSeEJ1ZjBbUlhfQlVGX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKK3N0YXRpYyB1aW50OF90IHNSeEJ1ZjFbUlhfQlVGX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKKworLyogVGhlIFJYIERhdGEgUXVldWUgKi8KK3N0YXRpYyBkYXRhUXVldWVfdCBzUnhEYXRhUXVldWUgPSB7IDAgfTsKKworLyogb3BlbnRocmVhZCBkYXRhIHByaW1hdGl2ZXMgKi8KK3N0YXRpYyBvdFJhZGlvRnJhbWUgc1RyYW5zbWl0RnJhbWU7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNSZWNlaXZlRnJhbWU7CitzdGF0aWMgb3RFcnJvciBzVHJhbnNtaXRFcnJvcjsKK3N0YXRpYyBvdEVycm9yIHNSZWNlaXZlRXJyb3I7CisKK3N0YXRpYyB1aW50OF90IHNUcmFuc21pdFBzZHVbT1RfUkFESU9fRlJBTUVfTUFYX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKSA7CitzdGF0aWMgdWludDhfdCBzUmVjZWl2ZVBzZHVbT1RfUkFESU9fRlJBTUVfTUFYX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKSA7CisKKy8qKgorICogSW50ZXJydXB0IGhhbmRsZXJzIGZvcndhcmQgZGVjbGFyZWQgZm9yIHJlZ2lzdGVyIGZ1bmN0aW9uCisgKi8KK3ZvaWQgUkZDQ1BFMEludEhhbmRsZXIodm9pZCk7Cit2b2lkIFJGQ0NQRTFJbnRIYW5kbGVyKHZvaWQpOworCisvKioKKyAqIEBicmllZiBpbml0aWFsaXplIHRoZSBSWC9UWCBidWZmZXJzCisgKgorICogWmVyb3Mgb3V0IHRoZSByZWNlaXZlIGFuZCB0cmFuc21pdCBidWZmZXJzIGFuZCBzZXRzIHVwIHRoZSBkYXRhIHN0cnVjdHVyZXMKKyAqIG9mIHRoZSByZWNlaXZlIHF1ZXVlLgorICovCitzdGF0aWMgdm9pZCByZkNvcmVJbml0QnVmcyh2b2lkKQoreworICAgIHJmY19kYXRhRW50cnlfdCAqZW50cnk7CisgICAgbWVtc2V0KHNSeEJ1ZjAsIDB4MDAsIFJYX0JVRl9TSVpFKTsKKyAgICBtZW1zZXQoc1J4QnVmMSwgMHgwMCwgUlhfQlVGX1NJWkUpOworCisgICAgZW50cnkgPSAocmZjX2RhdGFFbnRyeV90ICopc1J4QnVmMDsKKyAgICBlbnRyeS0+cE5leHRFbnRyeSA9IHNSeEJ1ZjE7CisgICAgZW50cnktPmNvbmZpZy5sZW5TeiA9IERBVEFfRU5UUllfTEVOU1pfQllURTsKKyAgICBlbnRyeS0+bGVuZ3RoID0gc2l6ZW9mKHNSeEJ1ZjApIC0gc2l6ZW9mKHJmY19kYXRhRW50cnlfdCk7CisKKyAgICBlbnRyeSA9IChyZmNfZGF0YUVudHJ5X3QgKilzUnhCdWYxOworICAgIGVudHJ5LT5wTmV4dEVudHJ5ID0gc1J4QnVmMDsKKyAgICBlbnRyeS0+Y29uZmlnLmxlblN6ID0gREFUQV9FTlRSWV9MRU5TWl9CWVRFOworICAgIGVudHJ5LT5sZW5ndGggPSBzaXplb2Yoc1J4QnVmMCkgLSBzaXplb2YocmZjX2RhdGFFbnRyeV90KTsKKworICAgIHNUcmFuc21pdEZyYW1lLm1Qc2R1ID0gc1RyYW5zbWl0UHNkdTsKKyAgICBzVHJhbnNtaXRGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qc2R1ID0gc1JlY2VpdmVQc2R1OworICAgIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA9IDA7Cit9CisKKy8qKgorICogQGJyaWVmIGluaXRpYWxpemUgdGhlIFJYIGNvbW1hbmQgc3RydWN0dXJlCisgKgorICogU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZWNlaXZlIGNvbW1hbmQgc3RydWN0dXJlLgorICovCitzdGF0aWMgdm9pZCByZkNvcmVJbml0UmVjZWl2ZVBhcmFtcyh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCByZmNfQ01EX0lFRUVfUlhfdCBjUmVjZWl2ZUNtZCA9CisgICAgeworICAgICAgICAuY29tbWFuZE5vICAgICAgICAgICAgICAgICAgPSBDTURfSUVFRV9SWCwKKyAgICAgICAgLnN0YXR1cyAgICAgICAgICAgICAgICAgICAgID0gSURMRSwKKyAgICAgICAgLnBOZXh0T3AgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAgICAgLnN0YXJ0VGltZSAgICAgICAgICAgICAgICAgID0gMHUsCisgICAgICAgIC5zdGFydFRyaWdnZXIgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC50cmlnZ2VyVHlwZSAgICAgICAgICAgID0gVFJJR19OT1csCisgICAgICAgIH0sCisgICAgICAgIC5jb25kaXRpb24gICAgICAgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgIC5ydWxlICAgICAgICAgICAgICAgICAgID0gQ09ORF9ORVZFUiwKKyAgICAgICAgfSwKKyAgICAgICAgLmNoYW5uZWwgICAgICAgICAgICAgICAgICAgID0gT1RfUkFESU9fQ0hBTk5FTF9NSU4sCisgICAgICAgIC5yeENvbmZpZyAgICAgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC5iQXV0b0ZsdXNoQ3JjICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5iQXV0b0ZsdXNoSWduICAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5iSW5jbHVkZVBoeUhkciAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5iSW5jbHVkZUNyYyAgICAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5iQXBwZW5kUnNzaSAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5iQXBwZW5kQ29yckNyYyAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5iQXBwZW5kU3JjSW5kICAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5iQXBwZW5kVGltZXN0YW1wICAgICAgID0gMCwKKyAgICAgICAgfSwKKyAgICAgICAgLmZyYW1lRmlsdE9wdCAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLmZyYW1lRmlsdEVuICAgICAgICAgICAgPSAxLAorICAgICAgICAgICAgLmZyYW1lRmlsdFN0b3AgICAgICAgICAgPSAxLAorICAgICAgICAgICAgLmF1dG9BY2tFbiAgICAgICAgICAgICAgPSAxLAorICAgICAgICAgICAgLnNsb3R0ZWRBY2tFbiAgICAgICAgICAgPSAwLAorICAgICAgICAgICAgLmF1dG9QZW5kRW4gICAgICAgICAgICAgPSAwLAorICAgICAgICAgICAgLmRlZmF1bHRQZW5kICAgICAgICAgICAgPSAwLAorICAgICAgICAgICAgLmJQZW5kRGF0YVJlcU9ubHkgICAgICAgPSAwLAorICAgICAgICAgICAgLmJQYW5Db29yZCAgICAgICAgICAgICAgPSAwLAorICAgICAgICAgICAgLm1heEZyYW1lVmVyc2lvbiAgICAgICAgPSAzLAorICAgICAgICAgICAgLmJTdHJpY3RMZW5GaWx0ZXIgICAgICAgPSAxLAorICAgICAgICB9LAorICAgICAgICAuZnJhbWVUeXBlcyAgICAgICAgICAgICAgICAgPQorICAgICAgICB7CisgICAgICAgICAgICAuYkFjY2VwdEZ0MEJlYWNvbiAgICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0MURhdGEgICAgICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0MkFjayAgICAgICAgICA9IDAsCisgICAgICAgICAgICAuYkFjY2VwdEZ0M01hY0NtZCAgICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0NFJlc2VydmVkICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0NVJlc2VydmVkICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0NlJlc2VydmVkICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0N1Jlc2VydmVkICAgICA9IDEsCisgICAgICAgIH0sCisgICAgICAgIC5jY2FPcHQgICAgICAgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC5jY2FFbkVuZXJneSAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5jY2FFbkNvcnIgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5jY2FFblN5bmMgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5jY2FDb3JyT3AgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5jY2FTeW5jT3AgICAgICAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5jY2FDb3JyVGhyICAgICAgICAgICAgID0gMywKKyAgICAgICAgfSwKKyAgICAgICAgLmNjYVJzc2lUaHIgICAgICAgICAgICAgICAgID0gLTkwLAorICAgICAgICAuZW5kVHJpZ2dlciAgICAgICAgICAgICAgICAgPQorICAgICAgICB7CisgICAgICAgICAgICAudHJpZ2dlclR5cGUgICAgICAgICAgICA9IFRSSUdfTkVWRVIsCisgICAgICAgIH0sCisgICAgICAgIC5lbmRUaW1lICAgICAgICAgICAgICAgICAgICA9IDB1LAorICAgIH07CisgICAgc1JlY2VpdmVDbWQgPSBjUmVjZWl2ZUNtZDsKKworICAgIHNSZWNlaXZlQ21kLnBSeFEgICAgPSAmc1J4RGF0YVF1ZXVlOworICAgIHNSZWNlaXZlQ21kLnBPdXRwdXQgPSAmc1JmU3RhdHM7CisKKyAgICBzUmVjZWl2ZUNtZC5udW1TaG9ydEVudHJpZXMgPSBDQzI2NTBfU0hPUlRBRERfU1JDX01BVENIX05VTTsKKyAgICBzUmVjZWl2ZUNtZC5wU2hvcnRFbnRyeUxpc3QgPSAodm9pZCAqKSZzU3JjTWF0Y2hTaG9ydERhdGE7CisKKyAgICBzUmVjZWl2ZUNtZC5udW1FeHRFbnRyaWVzID0gQ0MyNjUwX0VYVEFERF9TUkNfTUFUQ0hfTlVNOworICAgIHNSZWNlaXZlQ21kLnBFeHRFbnRyeUxpc3QgPSAodWludDMyX3QgKikmc1NyY01hdGNoRXh0RGF0YTsKK30KKworLyoqCisgKiBAYnJpZWYgc2VuZHMgdGhlIGRpcmVjdCBhYm9ydCBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgY29tbWFuZCBzdGF0dXMgcmVnaXN0ZXIKKyAqIEByZXR2YWwgQ01EU1RBX0RvbmUgdGhlIGNvbW1hbmQgY29tcGxldGVkIGNvcnJlY3RseQorICovCitzdGF0aWMgdWludF9mYXN0OF90IHJmQ29yZUV4ZWN1dGVBYm9ydENtZCh2b2lkKQoreworICAgIHJldHVybiAoUkZDRG9vcmJlbGxTZW5kVG8oQ01EUl9ESVJfQ01EKENNRF9BQk9SVCkpICYgMHhGRik7Cit9CisKKy8qKgorICogQGJyaWVmIHNlbmRzIHRoZSBkaXJlY3QgcGluZyBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlCisgKgorICogQ2hlY2sgdGhhdCB0aGUgUmFkaW8gY29yZSBpcyBhbGl2ZSBhbmQgYWJsZSB0byByZXNwb25kIHRvIGNvbW1hbmRzLgorICoKKyAqIEByZXR1cm4gdGhlIHZhbHVlIGZyb20gdGhlIGNvbW1hbmQgc3RhdHVzIHJlZ2lzdGVyCisgKiBAcmV0dmFsIENNRFNUQV9Eb25lIHRoZSBjb21tYW5kIGNvbXBsZXRlZCBjb3JyZWN0bHkKKyAqLworc3RhdGljIHVpbnRfZmFzdDhfdCByZkNvcmVFeGVjdXRlUGluZ0NtZCh2b2lkKQoreworICAgIHJldHVybiAoUkZDRG9vcmJlbGxTZW5kVG8oQ01EUl9ESVJfQ01EKENNRF9QSU5HKSkgJiAweEZGKTsKK30KKworLyoqCisgKiBAYnJpZWYgc2VuZHMgdGhlIGltbWVkaWF0ZSBjbGVhciByeCBxdWV1ZSBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlCisgKgorICogVXNlcyB0aGUgcmFkaW8gY29yZSB0byBtYXJrIGFsbCBvZiB0aGUgZW50cmllcyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSBhcworICogcGVuZGluZy4gVGhpcyBpcyB1c2VkIGluc3RlYWQgb2YgY2xlYXJpbmcgdGhlIGVudHJpZXMgbWFudWFsbHkgdG8gYXZvaWQgcmFjZQorICogY29uZGl0aW9ucyBiZXR3ZWVuIHRoZSBtYWluIHByb2Nlc3NvciBhbmQgdGhlIHJhZGlvIGNvcmUuCisgKgorICogQHBhcmFtIFtpbl0gYVF1ZXVlIGEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBxdWV1ZSB0byBiZSBjbGVhcmVkCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgY29tbWFuZCBzdGF0dXMgcmVnaXN0ZXIKKyAqIEByZXR2YWwgQ01EU1RBX0RvbmUgdGhlIGNvbW1hbmQgY29tcGxldGVkIGNvcnJlY3RseQorICovCitzdGF0aWMgdWludF9mYXN0OF90IHJmQ29yZUNsZWFyUmVjZWl2ZVF1ZXVlKGRhdGFRdWV1ZV90ICphUXVldWUpCit7CisgICAgLyogbWVtc2V0IHNraXBwZWQgYmVjYXVzZSBzQ2xlYXJSZWNlaXZlUXVldWVDbWQgaGFzIG9ubHkgMiBtZW1iZXJzIGFuZCBwYWRkaW5nICovCisgICAgc0NsZWFyUmVjZWl2ZVF1ZXVlQ21kLmNvbW1hbmRObyA9IENNRF9DTEVBUl9SWDsKKyAgICBzQ2xlYXJSZWNlaXZlUXVldWVDbWQucFF1ZXVlID0gYVF1ZXVlOworCisgICAgcmV0dXJuIChSRkNEb29yYmVsbFNlbmRUbygodWludDMyX3QpJnNDbGVhclJlY2VpdmVRdWV1ZUNtZCkgJiAweEZGKTsKK30KKworLyoqCisgKiBAYnJpZWYgZW5hYmxlL2Rpc2FibGUgZmlsdGVyaW5nCisgKgorICogVXNlcyB0aGUgcmFkaW8gY29yZSB0byBhbHRlciB0aGUgY3VycmVudCBydW5uaW5nIFJYIGNvbW1hbmQgZmlsdGVyaW5nCisgKiBvcHRpb25zLiBUaGlzIGVuc3VyZXMgdGhlcmUgaXMgbm8gYWNjZXNzIGZhdWx0IGJldHdlZW4gdGhlIENNMyBhbmQgQ00wIGZvcgorICogdGhlIFJYIGNvbW1hbmQuCisgKgorICogVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIHR5cGUgb2YgZnJhbWVzIHRvIGJlIGZpbHRlcmVkIHRoZSBzYW1lIGFzIHRoZQorICogcmVjZWl2ZSBjb21tYW5kLgorICoKKyAqIEBub3RlIEFuIElFRUUgUlggY29tbWFuZCAqbXVzdCogYmUgcnVubmluZyB3aGlsZSB0aGlzIGNvbW1hbmQgZXhlY3V0ZXMuCisgKgorICogQHBhcmFtIFtpbl0gYUVuYWJsZSBUUlVFOiBlbmFibGUgZnJhbWUgZmlsdGVyaW5nLCBGQUxTRTogZGlzYWJsZSBmcmFtZSBmaWx0ZXJpbmcKKyAqCisgKiBAcmV0dXJuIHRoZSB2YWx1ZSBmcm9tIHRoZSBjb21tYW5kIHN0YXR1cyByZWdpc3RlcgorICogQHJldHZhbCBDTURTVEFfRG9uZSB0aGUgY29tbWFuZCBjb21wbGV0ZWQgY29ycmVjdGx5CisgKi8KK3N0YXRpYyB1aW50X2Zhc3Q4X3QgcmZDb3JlTW9kaWZ5UnhGcmFtZUZpbHRlcihib29sIGFFbmFibGUpCit7CisgICAgLyogbWVtc2V0IHNraXBwZWQgYmVjYXVzZSBzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZCBoYXMgb25seSAzIG1lbWJlcnMgKi8KKyAgICBzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZC5jb21tYW5kTm8gPSBDTURfSUVFRV9NT0RfRklMVDsKKyAgICAvKiBjb3B5IGN1cnJlbnQgZnJhbWUgZmlsdGVyaW5nIGFuZCBmcmFtZSB0eXBlcyBmcm9tIHJ1bm5pbmcgUlggY29tbWFuZCAqLworICAgIG1lbWNweSgodm9pZCAqKSZzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZC5uZXdGcmFtZUZpbHRPcHQsICh2b2lkICopJnNSZWNlaXZlQ21kLmZyYW1lRmlsdE9wdCwKKyAgICAgICAgICAgc2l6ZW9mKHNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kLm5ld0ZyYW1lRmlsdE9wdCkpOworICAgIG1lbWNweSgodm9pZCAqKSZzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZC5uZXdGcmFtZVR5cGVzLCAodm9pZCAqKSZzUmVjZWl2ZUNtZC5mcmFtZVR5cGVzLAorICAgICAgICAgICBzaXplb2Yoc01vZGlmeVJlY2VpdmVGaWx0ZXJDbWQubmV3RnJhbWVUeXBlcykpOworCisgICAgc01vZGlmeVJlY2VpdmVGaWx0ZXJDbWQubmV3RnJhbWVGaWx0T3B0LmZyYW1lRmlsdEVuID0gYUVuYWJsZSA/IDEgOiAwOworCisgICAgcmV0dXJuIChSRkNEb29yYmVsbFNlbmRUbygodWludDMyX3QpJnNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kKSAmIDB4RkYpOworfQorCisvKioKKyAqIEBicmllZiBlbmFibGUvZGlzYWJsZSBhdXRvUGVuZAorICoKKyAqIFVzZXMgdGhlIHJhZGlvIGNvcmUgdG8gYWx0ZXIgdGhlIGN1cnJlbnQgcnVubmluZyBSWCBjb21tYW5kIGZpbHRlcmluZworICogb3B0aW9ucy4gVGhpcyBlbnN1cmVzIHRoZXJlIGlzIG5vIGFjY2VzcyBmYXVsdCBiZXR3ZWVuIHRoZSBDTTMgYW5kIENNMCBmb3IKKyAqIHRoZSBSWCBjb21tYW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSB0eXBlIG9mIGZyYW1lcyB0byBiZSBmaWx0ZXJlZCB0aGUgc2FtZSBhcyB0aGUKKyAqIHJlY2VpdmUgY29tbWFuZC4KKyAqCisgKiBAbm90ZSBBbiBJRUVFIFJYIGNvbW1hbmQgKm11c3QqIGJlIHJ1bm5pbmcgd2hpbGUgdGhpcyBjb21tYW5kIGV4ZWN1dGVzLgorICoKKyAqIEBwYXJhbSBbaW5dIGFFbmFibGUgVFJVRTogZW5hYmxlIGF1dG9QZW5kLCBGQUxTRTogZGlzYWJsZSBhdXRvUGVuZAorICoKKyAqIEByZXR1cm4gdGhlIHZhbHVlIGZyb20gdGhlIGNvbW1hbmQgc3RhdHVzIHJlZ2lzdGVyCisgKiBAcmV0dmFsIENNRFNUQV9Eb25lIHRoZSBjb21tYW5kIGNvbXBsZXRlZCBjb3JyZWN0bHkKKyAqLworc3RhdGljIHVpbnRfZmFzdDhfdCByZkNvcmVNb2RpZnlSeEF1dG9QZW5kKGJvb2wgYUVuYWJsZSkKK3sKKyAgICAvKiBtZW1zZXQgc2tpcHBlZCBiZWNhdXNlIHNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kIGhhcyBvbmx5IDMgbWVtYmVycyAqLworICAgIHNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kLmNvbW1hbmRObyA9IENNRF9JRUVFX01PRF9GSUxUOworICAgIC8qIGNvcHkgY3VycmVudCBmcmFtZSBmaWx0ZXJpbmcgYW5kIGZyYW1lIHR5cGVzIGZyb20gcnVubmluZyBSWCBjb21tYW5kICovCisgICAgbWVtY3B5KCh2b2lkICopJnNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kLm5ld0ZyYW1lRmlsdE9wdCwgKHZvaWQgKikmc1JlY2VpdmVDbWQuZnJhbWVGaWx0T3B0LAorICAgICAgICAgICBzaXplb2Yoc01vZGlmeVJlY2VpdmVGaWx0ZXJDbWQubmV3RnJhbWVGaWx0T3B0KSk7CisgICAgbWVtY3B5KCh2b2lkICopJnNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kLm5ld0ZyYW1lVHlwZXMsICh2b2lkICopJnNSZWNlaXZlQ21kLmZyYW1lVHlwZXMsCisgICAgICAgICAgIHNpemVvZihzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZC5uZXdGcmFtZVR5cGVzKSk7CisKKyAgICBzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZC5uZXdGcmFtZUZpbHRPcHQuYXV0b1BlbmRFbiA9IGFFbmFibGUgPyAxIDogMDsKKworICAgIHJldHVybiAoUkZDRG9vcmJlbGxTZW5kVG8oKHVpbnQzMl90KSZzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZCkgJiAweEZGKTsKK30KKworLyoqCisgKiBAYnJpZWYgc2VuZHMgdGhlIGltbWVkaWF0ZSBtb2RpZnkgc291cmNlIG1hdGNoaW5nIGNvbW1hbmQgdG8gdGhlIHJhZGlvIGNvcmUKKyAqCisgKiBVc2VzIHRoZSByYWRpbyBjb3JlIHRvIGFsdGVyIHRoZSBjdXJyZW50IHNvdXJjZSBtYXRjaGluZyBwYXJhbWV0ZXJzIHVzZWQgYnkKKyAqIHRoZSBydW5uaW5nIFJYIGNvbW1hbmQuIFRoaXMgZW5zdXJlcyB0aGVyZSBpcyBubyBhY2Nlc3MgZmF1bHQgYmV0d2VlbiB0aGUKKyAqIENNMyBhbmQgQ00wLCBhbmQgZW5zdXJlcyB0aGF0IHRoZSBSWCBjb21tYW5kIGhhcyBjb2hlc2l2ZSB2aWV3IG9mIHRoZSBkYXRhLgorICogVGhlIENNMyBtYXkgbWFrZSBhbHRlcmF0aW9ucyB0byB0aGUgc291cmNlIG1hdGNoaW5nIGVudHJpZXMgaWYgdGhlIGVudHJ5IGlzCisgKiBtYXJrZWQgYXMgZGlzYWJsZWQuCisgKgorICogQG5vdGUgQW4gSUVFRSBSWCBjb21tYW5kICptdXN0KiBiZSBydW5uaW5nIHdoaWxlIHRoaXMgY29tbWFuZCBleGVjdXRlcy4KKyAqCisgKiBAcGFyYW0gW2luXSBhRW50cnlObyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IHRvIGFsdGVyCisgKiBAcGFyYW0gW2luXSBhVHlwZSBUUlVFOiB0aGUgZW50cnkgaXMgYSBzaG9ydCBhZGRyZXNzLCBGQUxTRTogdGhlIGVudHJ5IGlzIGFuIGV4dGVuZGVkIGFkZHJlc3MKKyAqIEBwYXJhbSBbaW5dIGFFbmFibGUgd2hldGhlciB0aGUgZ2l2ZW4gZW50cnkgaXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZAorICoKKyAqIEByZXR1cm4gdGhlIHZhbHVlIGZyb20gdGhlIGNvbW1hbmQgc3RhdHVzIHJlZ2lzdGVyCisgKiBAcmV0dmFsIENNRFNUQV9Eb25lIHRoZSBjb21tYW5kIGNvbXBsZXRlZCBjb3JyZWN0bHkKKyAqLworc3RhdGljIHVpbnRfZmFzdDhfdCByZkNvcmVNb2RpZnlTb3VyY2VNYXRjaEVudHJ5KHVpbnQ4X3QgYUVudHJ5Tm8sIGNjMjY1MF9hZGRyZXNzX3QgYVR5cGUsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAvKiBtZW1zZXQga2VwdCB0byBzYXZlIDYwIGJ5dGVzIG9mIHRleHQgc3BhY2UsIGdjYyBjYW4ndCBvcHRpbWl6ZSB0aGUKKyAgICAgKiBmb2xsb3dpbmcgYml0ZmllbGQgb3BlcmF0aW9uIGlmIGl0IGRvZXNuJ3Qga25vdyB0aGUgZmllbGRzIGFyZSB6ZXJvCisgICAgICogYWxyZWFkeS4KKyAgICAgKi8KKyAgICBtZW1zZXQoKHZvaWQgKikmc01vZGlmeVJlY2VpdmVTcmNNYXRjaENtZCwgMCwgc2l6ZW9mKHNNb2RpZnlSZWNlaXZlU3JjTWF0Y2hDbWQpKTsKKworICAgIHNNb2RpZnlSZWNlaXZlU3JjTWF0Y2hDbWQuY29tbWFuZE5vID0gQ01EX0lFRUVfTU9EX1NSQ19NQVRDSDsKKworICAgIC8qIHdlIG9ubHkgdXNlIHNvdXJjZSBtYXRjaGluZyBmb3IgcGVuZGluZyBkYXRhIGJpdCwgc28gZW5hYmxpbmcgYW5kCisgICAgICogcGVuZGluZyBhcmUgdGhlIHNhbWUgdG8gdXMuCisgICAgICovCisgICAgaWYgKGFFbmFibGUpCisgICAgeworICAgICAgICBzTW9kaWZ5UmVjZWl2ZVNyY01hdGNoQ21kLm9wdGlvbnMuYkVuYWJsZSA9IDE7CisgICAgICAgIHNNb2RpZnlSZWNlaXZlU3JjTWF0Y2hDbWQub3B0aW9ucy5zcmNQZW5kID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc01vZGlmeVJlY2VpdmVTcmNNYXRjaENtZC5vcHRpb25zLmJFbmFibGUgPSAwOworICAgICAgICBzTW9kaWZ5UmVjZWl2ZVNyY01hdGNoQ21kLm9wdGlvbnMuc3JjUGVuZCA9IDA7CisgICAgfQorCisgICAgc01vZGlmeVJlY2VpdmVTcmNNYXRjaENtZC5vcHRpb25zLmVudHJ5VHlwZSA9IGFUeXBlOworICAgIHNNb2RpZnlSZWNlaXZlU3JjTWF0Y2hDbWQuZW50cnlObyA9IGFFbnRyeU5vOworCisgICAgcmV0dXJuIChSRkNEb29yYmVsbFNlbmRUbygodWludDMyX3QpJnNNb2RpZnlSZWNlaXZlU3JjTWF0Y2hDbWQpICYgMHhGRik7Cit9CisKKy8qKgorICogQGJyaWVmIHdhbGtzIHRoZSBzaG9ydCBhZGRyZXNzIHNvdXJjZSBtYXRjaCBsaXN0IHRvIGZpbmQgYW4gYWRkcmVzcworICoKKyAqIEBwYXJhbSBbaW5dIGFkZHJlc3MgdGhlIHNob3J0IGFkZHJlc3MgdG8gc2VhcmNoIGZvcgorICoKKyAqIEByZXR1cm4gdGhlIGluZGV4IHdoZXJlIHRoZSBhZGRyZXNzIHdhcyBmb3VuZAorICogQHJldHZhbCBDQzI2NTBfU1JDX01BVENIX05PTkUgdGhlIGFkZHJlc3Mgd2FzIG5vdCBmb3VuZAorICovCitzdGF0aWMgdWludDhfdCByZkNvcmVGaW5kU2hvcnRTcmNNYXRjaElkeChjb25zdCB1aW50MTZfdCBhQWRkcmVzcykKK3sKKyAgICB1aW50OF90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQ0MyNjUwX1NIT1JUQUREX1NSQ19NQVRDSF9OVU07IGkrKykKKyAgICB7CisgICAgICAgIGlmIChzU3JjTWF0Y2hTaG9ydERhdGEuZXh0QWRkckVudFtpXS5zaG9ydEFkZHIgPT0gYUFkZHJlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIENDMjY1MF9TUkNfTUFUQ0hfTk9ORTsKK30KKworLyoqCisgKiBAYnJpZWYgd2Fsa3MgdGhlIHNob3J0IGFkZHJlc3Mgc291cmNlIG1hdGNoIGxpc3QgdG8gZmluZCBhbiBlbXB0eSBzbG90CisgKgorICogQHJldHVybiB0aGUgaW5kZXggb2YgYW4gdW51c2VkIGFkZHJlc3Mgc2xvdAorICogQHJldHZhbCBDQzI2NTBfU1JDX01BVENIX05PTkUgbm8gdW51c2VkIHNsb3RzIGF2YWlsYWJsZQorICovCitzdGF0aWMgdWludDhfdCByZkNvcmVGaW5kRW1wdHlTaG9ydFNyY01hdGNoSWR4KHZvaWQpCit7CisgICAgdWludDhfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IENDMjY1MF9TSE9SVEFERF9TUkNfTUFUQ0hfTlVNOyBpKyspCisgICAgeworICAgICAgICBpZiAoKHNTcmNNYXRjaFNob3J0RGF0YS5zcmNNYXRjaEVuW2kgLyAzMl0gJiAoMSA8PCAoaSAlIDMyKSkpID09IDB1KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBDQzI2NTBfU1JDX01BVENIX05PTkU7Cit9CisKKy8qKgorICogQGJyaWVmIHdhbGtzIHRoZSBleHQgYWRkcmVzcyBzb3VyY2UgbWF0Y2ggbGlzdCB0byBmaW5kIGFuIGFkZHJlc3MKKyAqCisgKiBAcGFyYW0gW2luXSBhZGRyZXNzIHRoZSBleHQgYWRkcmVzcyB0byBzZWFyY2ggZm9yCisgKgorICogQHJldHVybiB0aGUgaW5kZXggd2hlcmUgdGhlIGFkZHJlc3Mgd2FzIGZvdW5kCisgKiBAcmV0dmFsIENDMjY1MF9TUkNfTUFUQ0hfTk9ORSB0aGUgYWRkcmVzcyB3YXMgbm90IGZvdW5kCisgKi8KK3N0YXRpYyB1aW50OF90IHJmQ29yZUZpbmRFeHRTcmNNYXRjaElkeChjb25zdCB1aW50NjRfdCAqYUFkZHJlc3MpCit7CisgICAgdWludDhfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IENDMjY1MF9FWFRBRERfU1JDX01BVENIX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNTcmNNYXRjaEV4dERhdGEuZXh0QWRkckVudFtpXSA9PSAqYUFkZHJlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIENDMjY1MF9TUkNfTUFUQ0hfTk9ORTsKK30KKworLyoqCisgKiBAYnJpZWYgd2Fsa3MgdGhlIGV4dCBhZGRyZXNzIHNvdXJjZSBtYXRjaCBsaXN0IHRvIGZpbmQgYW4gZW1wdHkgc2xvdAorICoKKyAqIEByZXR1cm4gdGhlIGluZGV4IG9mIGFuIHVudXNlZCBhZGRyZXNzIHNsb3QKKyAqIEByZXR2YWwgQ0MyNjUwX1NSQ19NQVRDSF9OT05FIG5vIHVudXNlZCBzbG90cyBhdmFpbGFibGUKKyAqLworc3RhdGljIHVpbnQ4X3QgcmZDb3JlRmluZEVtcHR5RXh0U3JjTWF0Y2hJZHgodm9pZCkKK3sKKyAgICB1aW50OF90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQ0MyNjUwX0VYVEFERF9TUkNfTUFUQ0hfTlVNOyBpKyspCisgICAgeworICAgICAgICBpZiAoKHNTcmNNYXRjaEV4dERhdGEuc3JjTWF0Y2hFbltpIC8gMzJdICYgKDEgPDwgKGkgJSAzMikpKSAhPSAwdSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gQ0MyNjUwX1NSQ19NQVRDSF9OT05FOworfQorCisvKioKKyAqIEBicmllZiBzZW5kcyB0aGUgdHggY29tbWFuZCB0byB0aGUgcmFkaW8gY29yZQorICoKKyAqIFNlbmRzIHRoZSBwYWNrZXQgdG8gdGhlIHJhZGlvIGNvcmUgdG8gYmUgc2VudCBhc3luY2hyb25vdXNseS4KKyAqCisgKiBAcGFyYW0gW2luXSBhUHNkdSBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgc2VudAorICogQG5vdGUgdGhpcyAqbXVzdCogYmUgNCBieXRlIGFsaWduZWQgYW5kIG5vdCBpbmNsdWRlIHRoZSBGQ1MsIHRoYXQgaXMKKyAqIGNhbGN1bGF0ZWQgaW4gaGFyZHdhcmUuCisgKiBAcGFyYW0gW2luXSBhTGVuIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgZGF0YSBwb2ludGVkIHRvIGJ5IHBzZHUuCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgY29tbWFuZCBzdGF0dXMgcmVnaXN0ZXIKKyAqIEByZXR2YWwgQ01EU1RBX0RvbmUgdGhlIGNvbW1hbmQgY29tcGxldGVkIGNvcnJlY3RseQorICovCitzdGF0aWMgdWludF9mYXN0OF90IHJmQ29yZVNlbmRUcmFuc21pdENtZCh1aW50OF90ICphUHNkdSwgdWludDhfdCBhTGVuKQoreworICAgIHN0YXRpYyBjb25zdCByZmNfQ01EX0lFRUVfQ1NNQV90IGNDc21hY2FCYWNrb2ZmQ21kID0KKyAgICB7CisgICAgICAgIC5jb21tYW5kTm8gICAgICAgICAgICAgICAgICA9IENNRF9JRUVFX0NTTUEsCisgICAgICAgIC5zdGF0dXMgICAgICAgICAgICAgICAgICAgICA9IElETEUsCisgICAgICAgIC5zdGFydFRyaWdnZXIgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC50cmlnZ2VyVHlwZSAgICAgICAgICAgID0gVFJJR19OT1csCisgICAgICAgIH0sCisgICAgICAgIC5jb25kaXRpb24gICAgICAgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgIC5ydWxlICAgICAgICAgICAgICAgICAgID0gQ09ORF9BTFdBWVMsCisgICAgICAgIH0sCisgICAgICAgIC5tYWNNYXhCRSAgICAgICAgICAgICAgICAgICA9IElFRUU4MDIxNTRfTUFDX01BWF9CRSwKKyAgICAgICAgLm1hY01heENTTUFCYWNrb2ZmcyAgICAgICAgID0gSUVFRTgwMjE1NF9NQUNfTUFYX0NTTUFfQkFDS09GRlMsCisgICAgICAgIC5jc21hQ29uZmlnICAgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC5pbml0Q1cgICAgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5iU2xvdHRlZCAgICAgICAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5yeE9mZk1vZGUgICAgICAgICAgICAgID0gMCwKKyAgICAgICAgfSwKKyAgICAgICAgLk5CICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAgICAgLkJFICAgICAgICAgICAgICAgICAgICAgICAgID0gSUVFRTgwMjE1NF9NQUNfTUlOX0JFLAorICAgICAgICAucmVtYWluaW5nUGVyaW9kcyAgICAgICAgICAgPSAwLAorICAgICAgICAuZW5kVHJpZ2dlciAgICAgICAgICAgICAgICAgPQorICAgICAgICB7CisgICAgICAgICAgICAudHJpZ2dlclR5cGUgICAgICAgICAgICA9IFRSSUdfTkVWRVIsCisgICAgICAgIH0sCisgICAgICAgIC5lbmRUaW1lICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDAsCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgcmZjX0NNRF9JRUVFX1RYX3QgY1RyYW5zbWl0Q21kID0KKyAgICB7CisgICAgICAgIC5jb21tYW5kTm8gICAgICAgICAgICAgICAgICA9IENNRF9JRUVFX1RYLAorICAgICAgICAuc3RhdHVzICAgICAgICAgICAgICAgICAgICAgPSBJRExFLAorICAgICAgICAuc3RhcnRUcmlnZ2VyICAgICAgICAgICAgICAgPQorICAgICAgICB7CisgICAgICAgICAgICAudHJpZ2dlclR5cGUgICAgICAgICAgICA9IFRSSUdfTk9XLAorICAgICAgICB9LAorICAgICAgICAuY29uZGl0aW9uICAgICAgICAgICAgICAgICAgPSB7CisgICAgICAgICAgICAucnVsZSAgICAgICAgICAgICAgICAgICA9IENPTkRfTkVWRVIsCisgICAgICAgIH0sCisgICAgICAgIC5wTmV4dE9wICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgcmZjX0NNRF9JRUVFX1JYX0FDS190IGNUcmFuc21pdFJ4QWNrQ21kID0KKyAgICB7CisgICAgICAgIC5jb21tYW5kTm8gICAgICAgICAgICAgICAgICA9IENNRF9JRUVFX1JYX0FDSywKKyAgICAgICAgLnN0YXR1cyAgICAgICAgICAgICAgICAgICAgID0gSURMRSwKKyAgICAgICAgLnN0YXJ0VHJpZ2dlciAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX05PVywKKyAgICAgICAgfSwKKyAgICAgICAgLmVuZFRyaWdnZXIgICAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX1JFTF9TVEFSVCwKKyAgICAgICAgICAgIC5wYXN0VHJpZyAgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgfSwKKyAgICAgICAgLmNvbmRpdGlvbiAgICAgICAgICAgICAgICAgID0geworICAgICAgICAgICAgLnJ1bGUgICAgICAgICAgICAgICAgICAgPSBDT05EX05FVkVSLAorICAgICAgICB9LAorICAgICAgICAucE5leHRPcCAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgICAgICAvKiBudW1iZXIgb2YgUkFUIHRpY2tzIHRvIHdhaXQgYmVmb3JlIGNsYWltaW5nIHdlIGhhdmVuJ3QgcmVjZWl2ZWQgYW4gYWNrICovCisgICAgICAgIC5lbmRUaW1lICAgICAgICAgICAgICAgICAgICA9ICgoSUVFRTgwMjE1NF9NQUNfQUNLX1dBSVRfRFVSQVRJT04gKiBDQzI2NTBfUkFUX1RJQ0tTX1BFUl9TRUMpIC8gSUVFRTgwMjE1NF9TWU1CT0xTX1BFUl9TRUMpLAorICAgIH07CisKKyAgICAvKiByZXNldCByZXRyeSBjb3VudCAqLworICAgIHNUcmFuc21pdFJldHJ5Q291bnQgPSAwOworCisgICAgc0NzbWFjYUJhY2tvZmZDbWQgICAgICAgICAgICAgICA9IGNDc21hY2FCYWNrb2ZmQ21kOworICAgIC8qIGluaXRpYWxpemUgdGhlIHJhbmRvbSBzdGF0ZSB3aXRoIGEgdHJ1ZSByYW5kb20gc2VlZCBmb3IgdGhlIHJhZGlvIGNvcmUncworICAgICAqIHBzdWRvIHJuZyAqLworICAgIHNDc21hY2FCYWNrb2ZmQ21kLnJhbmRvbVN0YXRlICAgPSBvdFBsYXRSYW5kb21HZXQoKTsKKyAgICBzQ3NtYWNhQmFja29mZkNtZC5wTmV4dE9wICAgICAgID0gKHJmY19yYWRpb09wX3QgKikgJnNUcmFuc21pdENtZDsKKworICAgIHNUcmFuc21pdENtZCA9IGNUcmFuc21pdENtZDsKKyAgICAvKiBubyBuZWVkIHRvIGxvb2sgZm9yIGFuIGFjayBpZiB0aGUgdHggb3BlcmF0aW9uIHdhcyBzdG9wcGVkICovCisgICAgc1RyYW5zbWl0Q21kLnBheWxvYWRMZW4gPSBhTGVuOworICAgIHNUcmFuc21pdENtZC5wUGF5bG9hZCA9IGFQc2R1OworCisgICAgaWYgKGFQc2R1WzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkKKyAgICB7CisgICAgICAgIC8qIHNldHVwIHRoZSByZWNlaXZlIGFjayBjb21tYW5kIHRvIGZvbGxvdyB0aGUgdHggY29tbWFuZCAqLworICAgICAgICBzVHJhbnNtaXRDbWQuY29uZGl0aW9uLnJ1bGUgPSBDT05EX1NUT1BfT05fRkFMU0U7CisgICAgICAgIHNUcmFuc21pdENtZC5wTmV4dE9wID0gKHJmY19yYWRpb09wX3QgKikgJnNUcmFuc21pdFJ4QWNrQ21kOworCisgICAgICAgIHNUcmFuc21pdFJ4QWNrQ21kID0gY1RyYW5zbWl0UnhBY2tDbWQ7CisgICAgICAgIHNUcmFuc21pdFJ4QWNrQ21kLnNlcU5vID0gYVBzZHVbSUVFRTgwMjE1NF9EU05fT0ZGU0VUXTsKKyAgICB9CisKKyAgICByZXR1cm4gKFJGQ0Rvb3JiZWxsU2VuZFRvKCh1aW50MzJfdCkmc0NzbWFjYUJhY2tvZmZDbWQpICYgMHhGRik7Cit9CisKKy8qKgorICogQGJyaWVmIHNlbmRzIHRoZSByeCBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlCisgKgorICogU2VuZHMgdGhlIHByZS1idWlsdCByZWNlaXZlIGNvbW1hbmQgdG8gdGhlIHJhZGlvIGNvcmUuIFRoaXMgc2V0cyB1cCB0aGUKKyAqIHJhZGlvIHRvIHJlY2VpdmUgcGFja2V0cyBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluIHRoZSBnbG9iYWwgcnggY29tbWFuZC4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFsdGVyIGFueSBvZiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgcnggY29tbWFuZC4KKyAqIEl0IGlzIG9ubHkgY29uY2VybmVkIHdpdGggc2VuZGluZyB0aGUgY29tbWFuZCB0byB0aGUgcmFkaW8gY29yZS4gU2VlIEByZWYKKyAqIG90UGxhdFJhZGlvU2V0UGFuSWQgZm9yIGFuIGV4YW1wbGUgb2YgaG93IHRoZSByeCBzZXR0aW5ncyBhcmUgc2V0IGNoYW5nZWQuCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgY29tbWFuZCBzdGF0dXMgcmVnaXN0ZXIKKyAqIEByZXR2YWwgQ01EU1RBX0RvbmUgdGhlIGNvbW1hbmQgY29tcGxldGVkIGNvcnJlY3RseQorICovCitzdGF0aWMgdWludF9mYXN0OF90IHJmQ29yZVNlbmRSZWNlaXZlQ21kKHZvaWQpCit7CisgICAgc1JlY2VpdmVDbWQuc3RhdHVzID0gSURMRTsKKyAgICByZXR1cm4gKFJGQ0Rvb3JiZWxsU2VuZFRvKCh1aW50MzJfdCkmc1JlY2VpdmVDbWQpICYgMHhGRik7Cit9CisKK3N0YXRpYyB1aW50X2Zhc3Q4X3QgcmZDb3JlU2VuZEVkU2NhbkNtZCh1aW50OF90IGFDaGFubmVsLCB1aW50MTZfdCBhRHVycmF0aW9uKQoreworICAgIHN0YXRpYyBjb25zdCByZmNfQ01EX0lFRUVfRURfU0NBTl90IGNFZFNjYW5DbWQgPQorICAgIHsKKyAgICAgICAgLmNvbW1hbmRObyAgICAgICAgICAgICAgICAgID0gQ01EX0lFRUVfRURfU0NBTiwKKyAgICAgICAgLnN0YXJ0VHJpZ2dlciAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX05PVywKKyAgICAgICAgfSwKKyAgICAgICAgLmNvbmRpdGlvbiAgICAgICAgICAgICAgICAgID0geworICAgICAgICAgICAgLnJ1bGUgICAgICAgICAgICAgICAgICAgPSBDT05EX05FVkVSLAorICAgICAgICB9LAorICAgICAgICAuY2NhT3B0ICAgICAgICAgICAgICAgICAgICAgPQorICAgICAgICB7CisgICAgICAgICAgICAuY2NhRW5FbmVyZ3kgICAgICAgICAgICA9IDEsCisgICAgICAgICAgICAuY2NhRW5Db3JyICAgICAgICAgICAgICA9IDEsCisgICAgICAgICAgICAuY2NhRW5TeW5jICAgICAgICAgICAgICA9IDEsCisgICAgICAgICAgICAuY2NhQ29yck9wICAgICAgICAgICAgICA9IDEsCisgICAgICAgICAgICAuY2NhU3luY09wICAgICAgICAgICAgICA9IDAsCisgICAgICAgICAgICAuY2NhQ29yclRociAgICAgICAgICAgICA9IDMsCisgICAgICAgIH0sCisgICAgICAgIC5jY2FSc3NpVGhyICAgICAgICAgICAgICAgICA9IC05MCwKKyAgICAgICAgLmVuZFRyaWdnZXIgICAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX1JFTF9TVEFSVCwKKyAgICAgICAgICAgIC5wYXN0VHJpZyAgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgfSwKKyAgICB9OworICAgIHNFZFNjYW5DbWQgPSBjRWRTY2FuQ21kOworCisgICAgc0VkU2NhbkNtZC5jaGFubmVsID0gYUNoYW5uZWw7CisKKyAgICAvKiBkdXJyYXRpb24gaXMgaW4gbXMgKi8KKyAgICBzRWRTY2FuQ21kLmVuZFRpbWUgPSBhRHVycmF0aW9uICogKENDMjY1MF9SQVRfVElDS1NfUEVSX1NFQyAvIDEwMDApOworCisgICAgcmV0dXJuIChSRkNEb29yYmVsbFNlbmRUbygodWludDMyX3QpJnNFZFNjYW5DbWQpICYgMHhGRik7Cit9CisKKy8qKgorICogQGJyaWVmIGVuYWJsZXMgdGhlIGNwZTAgYW5kIGNwZTEgcmFkaW8gaW50ZXJydXB0cworICoKKyAqIEVuYWJsZXMgdGhlIEByZWYgSVJRX0xBU1RfQ09NTUFORF9ET05FIGFuZCBAcmVmIElSUV9MQVNUX0ZHX0NPTU1BTkRfRE9ORSB0bworICogYmUgaGFuZGxlZCBieSB0aGUgQHJlZiBSRkNDUEUwSW50SGFuZGxlciBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworc3RhdGljIHZvaWQgcmZDb3JlU2V0dXBJbnQodm9pZCkKK3sKKyAgICBib29sIGludGVycnVwdHNXZXJlRGlzYWJsZWQ7CisKKyAgICAvKiBXZSBhcmUgYWxyZWFkeSB0dXJuZWQgb24gYnkgdGhlIGNhbGxlciwgc28gdGhpcyBzaG91bGQgbm90IGhhcHBlbiAqLworICAgIGlmICghUFJDTVJmUmVhZHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnRlcnJ1cHRzV2VyZURpc2FibGVkID0gSW50TWFzdGVyRGlzYWJsZSgpOworCisgICAgLyogU2V0IGFsbCBpbnRlcnJ1cHQgY2hhbm5lbHMgdG8gQ1BFMCBjaGFubmVsLCBlcnJvciB0byBDUEUxICovCisgICAgSFdSRUcoUkZDX0RCRUxMX05PTkJVRl9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJU0wpID0gSVJRX0lOVEVSTkFMX0VSUk9SOworICAgIEhXUkVHKFJGQ19EQkVMTF9OT05CVUZfQkFTRSArIFJGQ19EQkVMTF9PX1JGQ1BFSUVOKSA9IElSUV9MQVNUX0NPTU1BTkRfRE9ORSB8IElSUV9MQVNUX0ZHX0NPTU1BTkRfRE9ORTsKKworICAgIEludFJlZ2lzdGVyKElOVF9SRkNfQ1BFXzAsIFJGQ0NQRTBJbnRIYW5kbGVyKTsKKyAgICBJbnRSZWdpc3RlcihJTlRfUkZDX0NQRV8xLCBSRkNDUEUxSW50SGFuZGxlcik7CisgICAgSW50UGVuZENsZWFyKElOVF9SRkNfQ1BFXzApOworICAgIEludFBlbmRDbGVhcihJTlRfUkZDX0NQRV8xKTsKKyAgICBJbnRFbmFibGUoSU5UX1JGQ19DUEVfMCk7CisgICAgSW50RW5hYmxlKElOVF9SRkNfQ1BFXzEpOworCisgICAgaWYgKCFpbnRlcnJ1cHRzV2VyZURpc2FibGVkKQorICAgIHsKKyAgICAgICAgSW50TWFzdGVyRW5hYmxlKCk7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiBkaXNhYmxlcyBhbmQgY2xlYXJzIHRoZSBjcGUwIGFuZCBjcGUxIHJhZGlvIGludGVycnVwdHMKKyAqLworc3RhdGljIHZvaWQgcmZDb3JlU3RvcEludCh2b2lkKQoreworICAgIGJvb2wgaW50ZXJydXB0c1dlcmVEaXNhYmxlZDsKKworICAgIGludGVycnVwdHNXZXJlRGlzYWJsZWQgPSBJbnRNYXN0ZXJEaXNhYmxlKCk7CisKKyAgICAvKiBjbGVhciBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisgICAgSFdSRUcoUkZDX0RCRUxMX05PTkJVRl9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJRkcpID0gMHgwOworICAgIEhXUkVHKFJGQ19EQkVMTF9OT05CVUZfQkFTRSArIFJGQ19EQkVMTF9PX1JGQ1BFSUVOKSA9IDB4MDsKKworICAgIEludFVucmVnaXN0ZXIoSU5UX1JGQ19DUEVfMCk7CisgICAgSW50VW5yZWdpc3RlcihJTlRfUkZDX0NQRV8xKTsKKyAgICBJbnRQZW5kQ2xlYXIoSU5UX1JGQ19DUEVfMCk7CisgICAgSW50UGVuZENsZWFyKElOVF9SRkNfQ1BFXzEpOworICAgIEludERpc2FibGUoSU5UX1JGQ19DUEVfMCk7CisgICAgSW50RGlzYWJsZShJTlRfUkZDX0NQRV8xKTsKKworICAgIGlmICghaW50ZXJydXB0c1dlcmVEaXNhYmxlZCkKKyAgICB7CisgICAgICAgIEludE1hc3RlckVuYWJsZSgpOworICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgU2V0cyB0aGUgbW9kZSBmb3IgdGhlIHJhZGlvIGNvcmUgdG8gSUVFRSA4MDIuMTUuNAorICovCitzdGF0aWMgdm9pZCByZkNvcmVTZXRNb2RlU2VsZWN0KHZvaWQpCit7CisgICAgc3dpdGNoIChDaGlwSW5mb19HZXRDaGlwVHlwZSgpKQorICAgIHsKKyAgICBjYXNlIENISVBfVFlQRV9DQzI2NTA6CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19SRkNNT0RFU0VMKSA9IFBSQ01fUkZDTU9ERVNFTF9DVVJSX01PREU1OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ0hJUF9UWVBFX0NDMjYzMDoKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX1JGQ01PREVTRUwpID0gUFJDTV9SRkNNT0RFU0VMX0NVUlJfTU9ERTI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogVGhpcyBjb2RlIG11c3QgYmUgcnVuIG9uIGEgdmFsaWQgY2MyNnh4IGNoaXAgKi8KKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiB0dXJucyBvbiB0aGUgcmFkaW8gY29yZQorICoKKyAqIFNldHMgdXAgdGhlIHBvd2VyIGFuZCByZXNvdXJjZXMgZm9yIHRoZSByYWRpbyBjb3JlLgorICogLSBzd2l0Y2hlcyB0aGUgaGlnaCBmcmVxdWVuY3kgY2xvY2sgdG8gdGhlIHhvc2MgY3J5c3RhbAorICogLSBzZXRzIHRoZSBtb2RlIGZvciB0aGUgcmFkaW8gY29yZSB0byBJRUVFIDgwMi4xNS40CisgKiAtIGluaXRpYWxpemVzIHRoZSByeCBidWZmZXJzIGFuZCBjb21tYW5kCisgKiAtIHBvd2VycyBvbiB0aGUgcmFkaW8gY29yZSBwb3dlciBkb21haW4KKyAqIC0gZW5hYmxlcyB0aGUgcmFkaW8gY29yZSBwb3dlciBkb21haW4KKyAqIC0gc2V0cyB1cCB0aGUgaW50ZXJydXB0cworICogLSBzZW5kcyB0aGUgcGluZyBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlIHRvIG1ha2Ugc3VyZSBpdCBpcyBydW5uaW5nCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgcGluZyBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlCisgKiBAcmV0dmFsIENNRFNUQV9Eb25lIHRoZSByYWRpbyBjb3JlIGlzIGFsaXZlIGFuZCByZXNwb25kaW5nCisgKi8KK3N0YXRpYyB1aW50X2Zhc3Q4X3QgcmZDb3JlUG93ZXJPbih2b2lkKQoreworICAgIGJvb2wgaW50ZXJydXB0c1dlcmVEaXNhYmxlZDsKKworICAgIC8qIFJlcXVlc3QgdGhlIEhGIFhPU0MgYXMgdGhlIHNvdXJjZSBmb3IgdGhlIEhGIGNsb2NrLiBOZWVkZWQgYmVmb3JlIHdlIGNhbgorICAgICAqIHVzZSB0aGUgRlMuIFRoaXMgd2lsbCBvbmx5IHJlcXVlc3QsIGl0IHdpbGwgX25vdF8gcGVyZm9ybSB0aGUgc3dpdGNoLgorICAgICAqLworICAgIGlmIChPU0NDbG9ja1NvdXJjZUdldChPU0NfU1JDX0NMS19IRikgIT0gT1NDX1hPU0NfSEYpCisgICAgeworICAgICAgICAvKiBSZXF1ZXN0IHRvIHN3aXRjaCB0byB0aGUgY3J5c3RhbCB0byBlbmFibGUgcmFkaW8gb3BlcmF0aW9uLiBJdCB0YWtlcyBhCisgICAgICAgICAqIHdoaWxlIGZvciB0aGUgWFRBTCB0byBiZSByZWFkeSBzbyBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgdGhlIGFjdHVhbAorICAgICAgICAgKiBzd2l0Y2gsIHdlIGRvIG90aGVyIHN0dWZmIHdoaWxlIHRoZSBYT1NDIGlzIGdldHRpbmcgcmVhZHkuCisgICAgICAgICAqLworICAgICAgICBPU0NDbG9ja1NvdXJjZVNldChPU0NfU1JDX0NMS19NRiB8IE9TQ19TUkNfQ0xLX0hGLCBPU0NfWE9TQ19IRik7CisgICAgfQorCisgICAgcmZDb3JlU2V0TW9kZVNlbGVjdCgpOworCisgICAgLyogU2V0IG9mIFJGIENvcmUgZGF0YSBxdWV1ZS4gQ2lyY3VsYXIgYnVmZmVyLCBubyBsYXN0IGVudHJ5ICovCisgICAgc1J4RGF0YVF1ZXVlLnBDdXJyRW50cnkgPSBzUnhCdWYwOworICAgIHNSeERhdGFRdWV1ZS5wTGFzdEVudHJ5ID0gTlVMTDsKKworICAgIHJmQ29yZUluaXRCdWZzKCk7CisKKyAgICAvKgorICAgICAqIFRyaWdnZXIgYSBzd2l0Y2ggdG8gdGhlIFhPU0MsIHNvIHRoYXQgd2UgY2FuIHN1YnNlcXVlbnRseSB1c2UgdGhlIFJGIEZTCisgICAgICogVGhpcyB3aWxsIGJsb2NrIHVudGlsIHRoZSBYT1NDIGlzIGFjdHVhbGx5IHJlYWR5LCBidXQgZ2l2ZSBob3cgd2UKKyAgICAgKiByZXF1ZXN0ZWQgaXQgZWFybHkgb24sIHRoaXMgd29uJ3QgYmUgdG9vIGxvbmcgYSB3YWl0LgorICAgICAqIFRoaXMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBSQVQuCisgICAgICovCisgICAgaWYgKE9TQ0Nsb2NrU291cmNlR2V0KE9TQ19TUkNfQ0xLX0hGKSAhPSBPU0NfWE9TQ19IRikKKyAgICB7CisgICAgICAgIC8qIFN3aXRjaCB0aGUgSEYgY2xvY2sgc291cmNlIChjYzI2eHh3YXJlIGV4ZWN1dGVzIHRoaXMgZnJvbSBST00pICovCisgICAgICAgIE9TQ0hmU291cmNlU3dpdGNoKCk7CisgICAgfQorCisgICAgaW50ZXJydXB0c1dlcmVEaXNhYmxlZCA9IEludE1hc3RlckRpc2FibGUoKTsKKworICAgIC8qIEVuYWJsZSBSRiBDb3JlIHBvd2VyIGRvbWFpbiAqLworICAgIFBSQ01Qb3dlckRvbWFpbk9uKFBSQ01fRE9NQUlOX1JGQ09SRSk7CisKKyAgICB3aGlsZSAoUFJDTVBvd2VyRG9tYWluU3RhdHVzKFBSQ01fRE9NQUlOX1JGQ09SRSkgIT0gUFJDTV9ET01BSU5fUE9XRVJfT04pOworCisgICAgUFJDTURvbWFpbkVuYWJsZShQUkNNX0RPTUFJTl9SRkNPUkUpOworICAgIFBSQ01Mb2FkU2V0KCk7CisKKyAgICB3aGlsZSAoIVBSQ01Mb2FkR2V0KCkpOworCisgICAgcmZDb3JlU2V0dXBJbnQoKTsKKworICAgIGlmICghaW50ZXJydXB0c1dlcmVEaXNhYmxlZCkKKyAgICB7CisgICAgICAgIEludE1hc3RlckVuYWJsZSgpOworICAgIH0KKworICAgIC8qIExldCBDUEUgYm9vdCAqLworICAgIEhXUkVHKFJGQ19QV1JfTk9OQlVGX0JBU0UgKyBSRkNfUFdSX09fUFdNQ0xLRU4pID0gKFJGQ19QV1JfUFdNQ0xLRU5fUkZDX00gfCBSRkNfUFdSX1BXTUNMS0VOX0NQRV9NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX0NQRVJBTV9NKTsKKworICAgIC8qIFNlbmQgcGluZyAodG8gdmVyaWZ5IFJGQ29yZSBpcyByZWFkeSBhbmQgYWxpdmUpICovCisgICAgcmV0dXJuIHJmQ29yZUV4ZWN1dGVQaW5nQ21kKCk7Cit9CisKKy8qKgorICogQGJyaWVmIHR1cm5zIG9mZiB0aGUgcmFkaW8gY29yZQorICoKKyAqIFN3aXRjaGVzIG9mZiB0aGUgcG93ZXIgYW5kIHJlc291cmNlcyBmb3IgdGhlIHJhZGlvIGNvcmUuCisgKiAtIGRpc2FibGVzIHRoZSBpbnRlcnJ1cHRzCisgKiAtIGRpc2FibGVzIHRoZSByYWRpbyBjb3JlIHBvd2VyIGRvbWFpbgorICogLSBwb3dlcnMgb2ZmIHRoZSByYWRpbyBjb3JlIHBvd2VyIGRvbWFpbgorICogLSBzd2l0Y2hlcyB0aGUgaGlnaCBmcmVxdWVuY3kgY2xvY2sgdG8gdGhlIHJjb3NjIHRvIHNhdmUgcG93ZXIKKyAqLworc3RhdGljIHZvaWQgcmZDb3JlUG93ZXJPZmYodm9pZCkKK3sKKyAgICByZkNvcmVTdG9wSW50KCk7CisKKyAgICBQUkNNRG9tYWluRGlzYWJsZShQUkNNX0RPTUFJTl9SRkNPUkUpOworICAgIFBSQ01Mb2FkU2V0KCk7CisKKyAgICB3aGlsZSAoIVBSQ01Mb2FkR2V0KCkpOworCisgICAgUFJDTVBvd2VyRG9tYWluT2ZmKFBSQ01fRE9NQUlOX1JGQ09SRSk7CisKKyAgICB3aGlsZSAoUFJDTVBvd2VyRG9tYWluU3RhdHVzKFBSQ01fRE9NQUlOX1JGQ09SRSkgIT0gUFJDTV9ET01BSU5fUE9XRVJfT0ZGKTsKKworICAgIGlmIChPU0NDbG9ja1NvdXJjZUdldChPU0NfU1JDX0NMS19IRikgIT0gT1NDX1JDT1NDX0hGKQorICAgIHsKKyAgICAgICAgLyogUmVxdWVzdCB0byBzd2l0Y2ggdG8gdGhlIFJDIG9zYyBmb3IgbG93IHBvd2VyIG1vZGUuICovCisgICAgICAgIE9TQ0Nsb2NrU291cmNlU2V0KE9TQ19TUkNfQ0xLX01GIHwgT1NDX1NSQ19DTEtfSEYsIE9TQ19SQ09TQ19IRik7CisgICAgICAgIC8qIFN3aXRjaCB0aGUgSEYgY2xvY2sgc291cmNlIChjYzI2eHh3YXJlIGV4ZWN1dGVzIHRoaXMgZnJvbSBST00pICovCisgICAgICAgIE9TQ0hmU291cmNlU3dpdGNoKCk7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiBzZW5kcyB0aGUgc2V0dXAgY29tbWFuZCBzdHJpbmcgdG8gdGhlIHJhZGlvIGNvcmUKKyAqCisgKiBFbmFibGVzIHRoZSBjbG9jayBsaW5lIGZyb20gdGhlIFJUQyB0byB0aGUgUkYgY29yZSBSQVQuIEVuYWJsZXMgdGhlIFJBVAorICogdGltZXIgYW5kIHNldHMgdXAgdGhlIHJhZGlvIGluIElFRUUgbW9kZS4KKyAqCisgKiBAcmV0dXJuIHRoZSB2YWx1ZSBmcm9tIHRoZSBjb21tYW5kIHN0YXR1cyByZWdpc3RlcgorICogQHJldHZhbCBDTURTVEFfRG9uZSB0aGUgY29tbWFuZCB3YXMgcmVjZWl2ZWQKKyAqLworc3RhdGljIHVpbnRfZmFzdDE2X3QgcmZDb3JlU2VuZEVuYWJsZUNtZCh2b2lkKQoreworICAgIHVpbnQ4X3QgcmV0OworICAgIGJvb2wgaW50ZXJydXB0c1dlcmVEaXNhYmxlZDsKKyAgICBzdGF0aWMgY29uc3QgcmZjX0NNRF9TWU5DX1NUQVJUX1JBVF90IGNTdGFydFJhdENtZCA9CisgICAgeworICAgICAgICAuY29tbWFuZE5vICAgICAgICAgICAgICAgICAgPSBDTURfU1lOQ19TVEFSVF9SQVQsCisgICAgICAgIC5zdGFydFRyaWdnZXIgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC50cmlnZ2VyVHlwZSAgICAgICAgICAgID0gVFJJR19OT1csCisgICAgICAgIH0sCisgICAgICAgIC5jb25kaXRpb24gICAgICAgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgIC5ydWxlICAgICAgICAgICAgICAgICAgID0gQ09ORF9TVE9QX09OX0ZBTFNFLAorICAgICAgICB9LAorICAgIH07CisgICAgc3RhdGljIGNvbnN0IHJmY19DTURfUkFESU9fU0VUVVBfdCBjUmFkaW9TZXR1cENtZCA9CisgICAgeworICAgICAgICAuY29tbWFuZE5vICAgICAgICAgICAgICAgICAgPSBDTURfUkFESU9fU0VUVVAsCisgICAgICAgIC5zdGFydFRyaWdnZXIgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC50cmlnZ2VyVHlwZSAgICAgICAgICAgID0gVFJJR19OT1csCisgICAgICAgIH0sCisgICAgICAgIC5jb25kaXRpb24gICAgICAgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgIC5ydWxlICAgICAgICAgICAgICAgICAgID0gQ09ORF9ORVZFUiwKKyAgICAgICAgfSwKKyAgICAgICAgLm1vZGUgICAgICAgICAgICAgICAgICAgICAgID0gMSwgLy8gSUVFRSA4MDIuMTUuNCBtb2RlCisgICAgfTsKKyAgICAvKiB0dXJuIG9uIHRoZSBjbG9jayBsaW5lIHRvIHRoZSByYWRpbyBjb3JlICovCisgICAgSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DVEwsIEFPTl9SVENfQ1RMX1JUQ19VUERfRU5fQklUTikgPSAxOworCisgICAgLyogaW5pdGlhbGl6ZSB0aGUgcmF0IHN0YXJ0IGNvbW1hbmQgKi8KKyAgICBzU3RhcnRSYXRDbWQgICAgICAgICA9IGNTdGFydFJhdENtZDsKKyAgICBzU3RhcnRSYXRDbWQucE5leHRPcCA9IChyZmNfcmFkaW9PcF90ICopICZzUmFkaW9TZXR1cENtZDsKKyAgICBzU3RhcnRSYXRDbWQucmF0MCAgICA9IHNSYXRPZmZzZXQ7CisKKyAgICAvKiBpbml0aWFsaXplIHJhZGlvIHNldHVwIGNvbW1hbmQgKi8KKyAgICBzUmFkaW9TZXR1cENtZCAgICAgICAgICAgICAgPSBjUmFkaW9TZXR1cENtZDsKKyAgICAvKiBpbml0YWxseSBzZXQgdGhlIHJhZGlvIHR4IHBvd2VyIHRvIHRoZSBtYXggKi8KKyAgICBzUmFkaW9TZXR1cENtZC50eFBvd2VyICAgICAgPSBzQ3VycmVudE91dHB1dFBvd2VyLT52YWx1ZTsKKyAgICBzUmFkaW9TZXR1cENtZC5wUmVnT3ZlcnJpZGUgPSBzSUVFRU92ZXJyaWRlczsKKworICAgIGludGVycnVwdHNXZXJlRGlzYWJsZWQgPSBJbnRNYXN0ZXJEaXNhYmxlKCk7CisKKyAgICBpZiAoKHJldCA9IChSRkNEb29yYmVsbFNlbmRUbygodWludDMyX3QpJnNTdGFydFJhdENtZCkgJiAweEZGKSkgIT0gQ01EU1RBX0RvbmUpCisgICAgeworICAgICAgICBpZiAoIWludGVycnVwdHNXZXJlRGlzYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEludE1hc3RlckVuYWJsZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAvKiBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBDTTAgdG8gc3RvcCBleGVjdXRpbmcgKi8KKyAgICB3aGlsZSAoKEhXUkVHKFJGQ19EQkVMTF9OT05CVUZfQkFTRSArIFJGQ19EQkVMTF9PX1JGQ1BFSUZHKSAmIElSUV9MQVNUX0NPTU1BTkRfRE9ORSkgPT0gMHgwMCk7CisKKyAgICBpZiAoIWludGVycnVwdHNXZXJlRGlzYWJsZWQpCisgICAgeworICAgICAgICBJbnRNYXN0ZXJFbmFibGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc1JhZGlvU2V0dXBDbWQuc3RhdHVzOworfQorCisvKioKKyAqIEBicmllZiBzZW5kcyB0aGUgc2h1dGRvd24gY29tbWFuZCBzdHJpbmcgdG8gdGhlIHJhZGlvIGNvcmUKKyAqCisgKiBQb3dlcnMgZG93biB0aGUgZnJlcXVlbmN5IHN5bnRoZXNpemVyIGFuZCBzdG9wcyB0aGUgUkFULgorICoKKyAqIEBub3RlIHN5bmNocm9ub3VzbHkgd2FpdHMgdW50aWwgdGhlIGNvbW1hbmQgc3RyaW5nIGNvbXBsZXRlcy4KKyAqCisgKiBAcmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIFJBVCBzdG9wIGNvbW1hbmQKKyAqIEByZXR2YWwgRE9ORV9PSyB0aGUgY29tbWFuZCBzdHJpbmcgZXhlY3V0ZWQgcHJvcGVybHkKKyAqLworc3RhdGljIHVpbnRfZmFzdDE2X3QgcmZDb3JlU2VuZERpc2FibGVDbWQodm9pZCkKK3sKKyAgICB1aW50OF90IGRvb3JiZWxsUmV0OworICAgIGJvb2wgaW50ZXJydXB0c1dlcmVEaXNhYmxlZDsKKyAgICBzdGF0aWMgY29uc3QgcmZjX0NNRF9GU19QT1dFUkRPV05fdCBjRnNQb3dlcmRvd25DbWQgPQorICAgIHsKKyAgICAgICAgLmNvbW1hbmRObyAgICAgICAgICAgICAgICAgID0gQ01EX0ZTX1BPV0VSRE9XTiwKKyAgICAgICAgLnN0YXJ0VHJpZ2dlciAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX05PVywKKyAgICAgICAgfSwKKyAgICAgICAgLmNvbmRpdGlvbiAgICAgICAgICAgICAgICAgID0geworICAgICAgICAgICAgLnJ1bGUgICAgICAgICAgICAgICAgICAgPSBDT05EX0FMV0FZUywKKyAgICAgICAgfSwKKyAgICB9OworICAgIHN0YXRpYyBjb25zdCByZmNfQ01EX1NZTkNfU1RPUF9SQVRfdCBjU3RvcFJhdENtZCA9CisgICAgeworICAgICAgICAuY29tbWFuZE5vICAgICAgICAgICAgICAgICAgPSBDTURfU1lOQ19TVE9QX1JBVCwKKyAgICAgICAgLnN0YXJ0VHJpZ2dlciAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX05PVywKKyAgICAgICAgfSwKKyAgICAgICAgLmNvbmRpdGlvbiAgICAgICAgICAgICAgICAgID0geworICAgICAgICAgICAgLnJ1bGUgICAgICAgICAgICAgICAgICAgPSBDT05EX05FVkVSLAorICAgICAgICB9LAorICAgIH07CisKKyAgICBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NUTCwgQU9OX1JUQ19DVExfUlRDX1VQRF9FTl9CSVROKSA9IDE7CisKKyAgICAvKiBpbml0aWFsaXplIHRoZSBjb21tYW5kIHRvIHBvd2VyIGRvd24gdGhlIGZyZXF1ZW5jeSBzeW50aCAqLworICAgIHNGc1Bvd2VyZG93bkNtZCA9IGNGc1Bvd2VyZG93bkNtZDsKKyAgICBzRnNQb3dlcmRvd25DbWQucE5leHRPcCA9IChyZmNfcmFkaW9PcF90ICopJnNTdG9wUmF0Q21kOworCisgICAgc1N0b3BSYXRDbWQgPSBjU3RvcFJhdENtZDsKKworICAgIGludGVycnVwdHNXZXJlRGlzYWJsZWQgPSBJbnRNYXN0ZXJEaXNhYmxlKCk7CisKKyAgICBIV1JFRyhSRkNfREJFTExfTk9OQlVGX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgPSB+SVJRX0xBU1RfQ09NTUFORF9ET05FOworCisgICAgZG9vcmJlbGxSZXQgPSAoUkZDRG9vcmJlbGxTZW5kVG8oKHVpbnQzMl90KSZzRnNQb3dlcmRvd25DbWQpICYgMHhGRik7CisKKyAgICBpZiAoZG9vcmJlbGxSZXQgIT0gQ01EU1RBX0RvbmUpCisgICAgeworICAgICAgICBpZiAoIWludGVycnVwdHNXZXJlRGlzYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEludE1hc3RlckVuYWJsZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRvb3JiZWxsUmV0OworICAgIH0KKworICAgIC8qIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgdGhlIENNMCB0byBzdG9wICovCisgICAgd2hpbGUgKChIV1JFRyhSRkNfREJFTExfTk9OQlVGX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgJiBJUlFfTEFTVF9DT01NQU5EX0RPTkUpID09IDB4MDApOworCisgICAgaWYgKCFpbnRlcnJ1cHRzV2VyZURpc2FibGVkKQorICAgIHsKKyAgICAgICAgSW50TWFzdGVyRW5hYmxlKCk7CisgICAgfQorCisgICAgaWYgKHNTdG9wUmF0Q21kLnN0YXR1cyA9PSBET05FX09LKQorICAgIHsKKyAgICAgICAgc1JhdE9mZnNldCA9IHNTdG9wUmF0Q21kLnJhdDA7CisgICAgfQorCisgICAgcmV0dXJuIHNTdG9wUmF0Q21kLnN0YXR1czsKK30KKworLyoqCisgKiBlcnJvciBpbnRlcnJ1cHQgaGFuZGxlcgorICovCit2b2lkIFJGQ0NQRTFJbnRIYW5kbGVyKHZvaWQpCit7CisgICAgLyogQ2xlYXIgSU5URVJOQUxfRVJST1IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBIV1JFRyhSRkNfREJFTExfTk9OQlVGX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgPSAweDdGRkZGRkZGOworfQorCisvKioKKyAqIGNvbW1hbmQgZG9uZSBoYW5kbGVyCisgKi8KK3ZvaWQgUkZDQ1BFMEludEhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoSFdSRUcoUkZDX0RCRUxMX05PTkJVRl9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJRkcpICYgSVJRX0xBU1RfQ09NTUFORF9ET05FKQorICAgIHsKKyAgICAgICAgSFdSRUcoUkZDX0RCRUxMX05PTkJVRl9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJRkcpID0gfklSUV9MQVNUX0NPTU1BTkRfRE9ORTsKKworICAgICAgICBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVJlY2VpdmUgJiYKKyAgICAgICAgICAgIHNSZWNlaXZlQ21kLnN0YXR1cyAhPSBBQ1RJVkUgJiYKKyAgICAgICAgICAgIHNSZWNlaXZlQ21kLnN0YXR1cyAhPSBJRUVFX1NVU1BFTkRFRCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogdGhlIHJ4IGNvbW1hbmQgd2FzIHByb2JhYmx5IGFib3J0ZWQgdG8gY2hhbmdlIHRoZSBjaGFubmVsICovCisgICAgICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVTbGVlcDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzU3RhdGUgPT0gY2MyNjUwX3N0YXRlRWRTY2FuKQorICAgICAgICB7CisgICAgICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVTbGVlcDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChIV1JFRyhSRkNfREJFTExfTk9OQlVGX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgJiBJUlFfTEFTVF9GR19DT01NQU5EX0RPTkUpCisgICAgeworICAgICAgICBIV1JFRyhSRkNfREJFTExfTk9OQlVGX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgPSB+SVJRX0xBU1RfRkdfQ09NTUFORF9ET05FOworCisgICAgICAgIGlmIChzU3RhdGUgPT0gY2MyNjUwX3N0YXRlVHJhbnNtaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzVHJhbnNtaXRDbWQucFBheWxvYWRbMF0gJiBJRUVFODAyMTU0X0FDS19SRVFVRVNUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHdlIGFyZSBsb29raW5nIGZvciBhbiBhY2sgKi8KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNUcmFuc21pdFJ4QWNrQ21kLnN0YXR1cykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBJRUVFX0RPTkVfVElNRU9VVDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNUcmFuc21pdFJldHJ5Q291bnQgPCBJRUVFODAyMTU0X01BQ19NQVhfRlJBTUVTX1JFVFJJRVMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlLXN1Ym1pdCB0aGUgdHggY29tbWFuZCBjaGFpbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgc1RyYW5zbWl0UmV0cnlDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgUkZDRG9vcmJlbGxTZW5kVG8oKHVpbnQzMl90KSZzQ3NtYWNhQmFja29mZkNtZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX05PX0FDSzsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpZ25hbCBwb2xsaW5nIGZ1bmN0aW9uIHdlIGFyZSBkb25lIHRyYW5zbWl0dGluZywgd2UgZmFpbGVkIHRvIHNlbmQgdGhlIHBhY2tldCAqLworICAgICAgICAgICAgICAgICAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlVHJhbnNtaXRDb21wbGV0ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJRUVFX0RPTkVfQUNLOgorICAgICAgICAgICAgICAgICAgICBzUmVjZWl2ZWRBY2tQZW5kaW5nQml0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgLyogc2lnbmFsIHBvbGxpbmcgZnVuY3Rpb24gd2UgYXJlIGRvbmUgdHJhbnNtaXR0aW5nICovCisgICAgICAgICAgICAgICAgICAgIHNTdGF0ZSA9IGNjMjY1MF9zdGF0ZVRyYW5zbWl0Q29tcGxldGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJRUVFX0RPTkVfQUNLUEVORDoKKyAgICAgICAgICAgICAgICAgICAgc1JlY2VpdmVkQWNrUGVuZGluZ0JpdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgLyogc2lnbmFsIHBvbGxpbmcgZnVuY3Rpb24gd2UgYXJlIGRvbmUgdHJhbnNtaXR0aW5nICovCisgICAgICAgICAgICAgICAgICAgIHNTdGF0ZSA9IGNjMjY1MF9zdGF0ZVRyYW5zbWl0Q29tcGxldGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQ7CisgICAgICAgICAgICAgICAgICAgIC8qIHNpZ25hbCBwb2xsaW5nIGZ1bmN0aW9uIHdlIGFyZSBkb25lIHRyYW5zbWl0dGluZyAqLworICAgICAgICAgICAgICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVUcmFuc21pdENvbXBsZXRlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogVGhlIFRYIGNvbW1hbmQgd2FzIGVpdGhlciBzdG9wcGVkIG9yIHdlIGFyZSBub3QgbG9va2luZyBmb3IKKyAgICAgICAgICAgICAgICAgKiBhbiBhY2sgKi8KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNUcmFuc21pdENtZC5zdGF0dXMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgSUVFRV9ET05FX09LOgorICAgICAgICAgICAgICAgICAgICBzUmVjZWl2ZWRBY2tQZW5kaW5nQml0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIElFRUVfRE9ORV9USU1FT1VUOgorICAgICAgICAgICAgICAgICAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJRUVFX0VSUk9SX05PX1NFVFVQOgorICAgICAgICAgICAgICAgIGNhc2UgSUVFRV9FUlJPUl9OT19GUzoKKyAgICAgICAgICAgICAgICBjYXNlIElFRUVfRVJST1JfU1lOVEhfUFJPRzoKKyAgICAgICAgICAgICAgICAgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgSUVFRV9FUlJPUl9UWFVORjoKKyAgICAgICAgICAgICAgICAgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfR0VORVJJQzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogc2lnbmFsIHBvbGxpbmcgZnVuY3Rpb24gd2UgYXJlIGRvbmUgdHJhbnNtaXR0aW5nICovCisgICAgICAgICAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlVHJhbnNtaXRDb21wbGV0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtLWNjMjY1MC5oCisgKi8KK3ZvaWQgY2MyNjUwUmFkaW9Jbml0KHZvaWQpCit7CisgICAgLyogUG9wdWxhdGUgdGhlIFJYIHBhcmFtZXRlcnMgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyAqLworICAgIHJmQ29yZUluaXRSZWNlaXZlUGFyYW1zKCk7CisKKyAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVEaXNhYmxlZDsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLworb3RFcnJvciBvdFBsYXRSYWRpb0VuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVTbGVlcCkKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZURpc2FibGVkKQorICAgIHsKKyAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHJmQ29yZVBvd2VyT24oKSA9PSBDTURTVEFfRG9uZSwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgICAgICBvdEVYUEVDVF9BQ1RJT04ocmZDb3JlU2VuZEVuYWJsZUNtZCgpID09IERPTkVfT0ssIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlU2xlZXA7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX0ZBSUxFRCkKKyAgICB7CisgICAgICAgIHJmQ29yZVBvd2VyT2ZmKCk7CisgICAgICAgIHNTdGF0ZSA9IGNjMjY1MF9zdGF0ZURpc2FibGVkOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLworYm9vbCBvdFBsYXRSYWRpb0lzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAoc1N0YXRlICE9IGNjMjY1MF9zdGF0ZURpc2FibGVkKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLworb3RFcnJvciBvdFBsYXRSYWRpb0Rpc2FibGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9CVVNZOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzU3RhdGUgPT0gY2MyNjUwX3N0YXRlRGlzYWJsZWQpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorICAgIGVsc2UgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVTbGVlcCkKKyAgICB7CisgICAgICAgIHJmQ29yZVNlbmREaXNhYmxlQ21kKCk7CisgICAgICAgIC8qIHdlIGRvbid0IHdhbnQgdG8gZmFpbCBpZiB0aGlzIGNvbW1hbmQgc3RyaW5nIGRvZXNuJ3Qgd29yaywganVzdCB0dXJuCisgICAgICAgICAqIG9mZiB0aGUgd2hvbGUgY29yZQorICAgICAgICAgKi8KKyAgICAgICAgcmZDb3JlUG93ZXJPZmYoKTsKKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlRGlzYWJsZWQ7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9FbmVyZ3lTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVTbGVlcCkKKyAgICB7CisgICAgICAgIHNTdGF0ZSA9IGNjMjY1MF9zdGF0ZUVkU2NhbjsKKyAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHJmQ29yZVNlbmRFZFNjYW5DbWQoYVNjYW5DaGFubmVsLCBhU2NhbkR1cmF0aW9uKSA9PSBDTURTVEFfRG9uZSwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLwordm9pZCBvdFBsYXRSYWRpb1NldERlZmF1bHRUeFBvd2VyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFQb3dlcikKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBvdXRwdXRfY29uZmlnX3QgY29uc3QgKnBvd2VyQ2ZnID0gJihyZ091dHB1dFBvd2VyWzBdKTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBmb3IgKGkgPSAxOyBpIDwgT1VUUFVUX0NPTkZJR19DT1VOVDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHJnT3V0cHV0UG93ZXJbaV0uZGJtID49IGFQb3dlcikKKyAgICAgICAgeworICAgICAgICAgICAgcG93ZXJDZmcgPSAmKHJnT3V0cHV0UG93ZXJbaV0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzQ3VycmVudE91dHB1dFBvd2VyID0gcG93ZXJDZmc7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9SZWNlaXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfQlVTWTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVNsZWVwKQorICAgIHsKKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlUmVjZWl2ZTsKKworICAgICAgICAvKiBpbml0aWFsaXplIHRoZSByZWNlaXZlIGNvbW1hbmQKKyAgICAgICAgICogWFhYOiBubyBtZW1zZXQgaGVyZSBiZWNhdXNlIHdlIGFzc3VtZSBpbml0IGhhcyBiZWVuIGNhbGxlZCBhbmQgd2UKKyAgICAgICAgICogICAgICBtYXkgaGF2ZSBjaGFuZ2VkIHNvbWUgdmFsdWVzIGluIHRoZSByeCBjb21tYW5kCisgICAgICAgICAqLworICAgICAgICBzUmVjZWl2ZUNtZC5jaGFubmVsID0gYUNoYW5uZWw7CisgICAgICAgIG90RVhQRUNUX0FDVElPTihyZkNvcmVTZW5kUmVjZWl2ZUNtZCgpID09IENNRFNUQV9Eb25lLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVJlY2VpdmUpCisgICAgeworICAgICAgICBpZiAoc1JlY2VpdmVDbWQuc3RhdHVzID09IEFDVElWRSAmJiBzUmVjZWl2ZUNtZC5jaGFubmVsID09IGFDaGFubmVsKQorICAgICAgICB7CisgICAgICAgICAgICAvKiB3ZSBhcmUgYWxyZWFkeSBydW5uaW5nIG9uIHRoZSByaWdodCBjaGFubmVsICovCisgICAgICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVSZWNlaXZlOworICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogd2UgaGF2ZSBlaXRoZXIgbm90IGZhbGxlbiBiYWNrIGludG8gb3VyIHJlY2VpdmUgY29tbWFuZCBvcgorICAgICAgICAgICAgICogd2UgYXJlIHJ1bm5pbmcgb24gdGhlIHdyb25nIGNoYW5uZWwuIEVpdGhlciB3YXkgYXNzdW1lIHRoZQorICAgICAgICAgICAgICogY2FsbGVyIGNvcnJlY3RseSBjYWxsZWQgdXMgYW5kIGFib3J0IGFsbCBydW5uaW5nIGNvbW1hbmRzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBvdEVYUEVDVF9BQ1RJT04ocmZDb3JlRXhlY3V0ZUFib3J0Q21kKCkgPT0gQ01EU1RBX0RvbmUsIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKworICAgICAgICAgICAgLyogYW55IGZyYW1lcyBpbiB0aGUgcXVldWUgd2lsbCBiZSBmb3IgdGhlIG9sZCBjaGFubmVsICovCisgICAgICAgICAgICBvdEVYUEVDVF9BQ1RJT04ocmZDb3JlQ2xlYXJSZWNlaXZlUXVldWUoJnNSeERhdGFRdWV1ZSkgPT0gQ01EU1RBX0RvbmUsIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKworICAgICAgICAgICAgc1JlY2VpdmVDbWQuY2hhbm5lbCA9IGFDaGFubmVsOworICAgICAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHJmQ29yZVNlbmRSZWNlaXZlQ21kKCkgPT0gQ01EU1RBX0RvbmUsIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKworICAgICAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlUmVjZWl2ZTsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9TbGVlcChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVTbGVlcCkKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVJlY2VpdmUpCisgICAgeworICAgICAgICBpZiAocmZDb3JlRXhlY3V0ZUFib3J0Q21kKCkgIT0gQ01EU1RBX0RvbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfQlVTWTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIHNTdGF0ZSA9IGNjMjY1MF9zdGF0ZVNsZWVwOworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitvdFJhZGlvRnJhbWUgKm90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gJnNUcmFuc21pdEZyYW1lOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitvdEVycm9yIG90UGxhdFJhZGlvVHJhbnNtaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfQlVTWTsKKworICAgIGlmIChzU3RhdGUgPT0gY2MyNjUwX3N0YXRlUmVjZWl2ZSkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgaXMgdGhlIGVhc2llc3Qgd2F5IHRvIHNldHVwIHRoZSBmcmVxdWVuY3kgc3ludGhlc2l6ZXIuCisgICAgICAgICAqIEFuZCB3ZSBhcmUgc3VwcG9zZWQgdG8gZmFsbCBpbnRvIHRoZSByZWNlaXZlIHN0YXRlIGFmdGVyd2FyZHMuCisgICAgICAgICAqLworICAgICAgICBlcnJvciA9IG90UGxhdFJhZGlvUmVjZWl2ZShhSW5zdGFuY2UsIGFGcmFtZS0+bUNoYW5uZWwpOworCisgICAgICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVUcmFuc21pdDsKKworICAgICAgICAgICAgLyogcmVtb3ZpbmcgMiBieXRlcyBvZiBDUkMgcGxhY2Vob2xkZXIgYmVjYXVzZSB3ZSBnZW5lcmF0ZSB0aGF0IGluIGhhcmR3YXJlICovCisgICAgICAgICAgICBvdEVYUEVDVF9BQ1RJT04ocmZDb3JlU2VuZFRyYW5zbWl0Q21kKGFGcmFtZS0+bVBzZHUsIGFGcmFtZS0+bUxlbmd0aCAtIDIpID09IENNRFNUQV9Eb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICBzVHJhbnNtaXRFcnJvciA9IGVycm9yOworICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBzUmZTdGF0cy5tYXhSc3NpOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitvdFJhZGlvQ2FwcyBvdFBsYXRSYWRpb0dldENhcHMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfUkFESU9fQ0FQU19BQ0tfVElNRU9VVCB8IE9UX1JBRElPX0NBUFNfRU5FUkdZX1NDQU4gfCBPVF9SQURJT19DQVBTX1RSQU5TTUlUX1JFVFJJRVM7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9FbmFibGVTcmNNYXRjaChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1JlY2VpdmVDbWQuc3RhdHVzID09IEFDVElWRSB8fCBzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gSUVFRV9TVVNQRU5ERUQpCisgICAgeworICAgICAgICAvKiB3ZSBoYXZlIGEgcnVubmluZyBvciBiYWNrZ3JvdW5kZWQgcnggY29tbWFuZCAqLworICAgICAgICByZkNvcmVNb2RpZnlSeEF1dG9QZW5kKGFFbmFibGUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBpZiB3ZSBhcmUgcHJvbWlzY3VvdXMsIHRoZW4gZnJhbWUgZmlsdGVyaW5nIHNob3VsZCBiZSBkaXNhYmxlZCAqLworICAgICAgICBzUmVjZWl2ZUNtZC5mcmFtZUZpbHRPcHQuYXV0b1BlbmRFbiA9IGFFbmFibGUgPyAxIDogMDsKKyAgICB9Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICB1aW50OF90IGlkeCA9IHJmQ29yZUZpbmRTaG9ydFNyY01hdGNoSWR4KGFTaG9ydEFkZHJlc3MpOworCisgICAgaWYgKGlkeCA9PSBDQzI2NTBfU1JDX01BVENIX05PTkUpCisgICAgeworICAgICAgICAvKiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QgYWxyZWFkeSwgYWRkIGl0ICovCisgICAgICAgIG90RVhQRUNUX0FDVElPTigoaWR4ID0gcmZDb3JlRmluZEVtcHR5U2hvcnRTcmNNYXRjaElkeCgpKSAhPSBDQzI2NTBfU1JDX01BVENIX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICBzU3JjTWF0Y2hTaG9ydERhdGEuZXh0QWRkckVudFtpZHhdLnNob3J0QWRkciA9IGFTaG9ydEFkZHJlc3M7CisgICAgICAgIHNTcmNNYXRjaFNob3J0RGF0YS5leHRBZGRyRW50W2lkeF0ucGFuSWQgPSBzUmVjZWl2ZUNtZC5sb2NhbFBhbklEOworICAgIH0KKworICAgIGlmIChzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gQUNUSVZFIHx8IHNSZWNlaXZlQ21kLnN0YXR1cyA9PSBJRUVFX1NVU1BFTkRFRCkKKyAgICB7CisgICAgICAgIC8qIHdlIGhhdmUgYSBydW5uaW5nIG9yIGJhY2tncm91bmRlZCByeCBjb21tYW5kICovCisgICAgICAgIG90RVhQRUNUX0FDVElPTihyZkNvcmVNb2RpZnlTb3VyY2VNYXRjaEVudHJ5KGlkeCwgU0hPUlRfQUREUkVTUywgdHJ1ZSkgPT0gQ01EU1RBX0RvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIHdlIGFyZSBub3QgcnVubmluZywgc28gd2UgbXVzdCB1cGRhdGUgdGhlIHZhbHVlcyBvdXJzZWx2ZXMgKi8KKyAgICAgICAgc1NyY01hdGNoU2hvcnREYXRhLnNyY1BlbmRFbltpZHggLyAzMl0gfD0gKDEgPDwgKGlkeCAlIDMyKSk7CisgICAgICAgIHNTcmNNYXRjaFNob3J0RGF0YS5zcmNNYXRjaEVuW2lkeCAvIDMyXSB8PSAoMSA8PCAoaWR4ICUgMzIpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICB1aW50OF90IGlkeDsKKyAgICBvdEVYUEVDVF9BQ1RJT04oKGlkeCA9IHJmQ29yZUZpbmRTaG9ydFNyY01hdGNoSWR4KGFTaG9ydEFkZHJlc3MpKSAhPSBDQzI2NTBfU1JDX01BVENIX05PTkUsCisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQUREUkVTUyk7CisKKyAgICBpZiAoc1JlY2VpdmVDbWQuc3RhdHVzID09IEFDVElWRSB8fCBzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gSUVFRV9TVVNQRU5ERUQpCisgICAgeworICAgICAgICAvKiB3ZSBoYXZlIGEgcnVubmluZyBvciBiYWNrZ3JvdW5kZWQgcnggY29tbWFuZCAqLworICAgICAgICBvdEVYUEVDVF9BQ1RJT04ocmZDb3JlTW9kaWZ5U291cmNlTWF0Y2hFbnRyeShpZHgsIFNIT1JUX0FERFJFU1MsIGZhbHNlKSA9PSBDTURTVEFfRG9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogd2UgYXJlIG5vdCBydW5uaW5nLCBzbyB3ZSBtdXN0IHVwZGF0ZSB0aGUgdmFsdWVzIG91cnNlbHZlcyAqLworICAgICAgICBzU3JjTWF0Y2hTaG9ydERhdGEuc3JjUGVuZEVuW2lkeCAvIDMyXSAmPSB+KDEgPDwgKGlkeCAlIDMyKSk7CisgICAgICAgIHNTcmNNYXRjaFNob3J0RGF0YS5zcmNNYXRjaEVuW2lkeCAvIDMyXSAmPSB+KDEgPDwgKGlkeCAlIDMyKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLworb3RFcnJvciBvdFBsYXRSYWRpb0FkZFNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgdWludDhfdCBpZHggPSByZkNvcmVGaW5kRXh0U3JjTWF0Y2hJZHgoKHVpbnQ2NF90ICopYUV4dEFkZHJlc3MpOworCisgICAgaWYgKGlkeCA9PSBDQzI2NTBfU1JDX01BVENIX05PTkUpCisgICAgeworICAgICAgICAvKiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QgYWxyZWFkeSwgYWRkIGl0ICovCisgICAgICAgIG90RVhQRUNUX0FDVElPTigoaWR4ID0gcmZDb3JlRmluZEVtcHR5RXh0U3JjTWF0Y2hJZHgoKSkgIT0gQ0MyNjUwX1NSQ19NQVRDSF9OT05FLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICBzU3JjTWF0Y2hFeHREYXRhLmV4dEFkZHJFbnRbaWR4XSA9ICooKHVpbnQ2NF90ICopYUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIGlmIChzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gQUNUSVZFIHx8IHNSZWNlaXZlQ21kLnN0YXR1cyA9PSBJRUVFX1NVU1BFTkRFRCkKKyAgICB7CisgICAgICAgIC8qIHdlIGhhdmUgYSBydW5uaW5nIG9yIGJhY2tncm91bmRlZCByeCBjb21tYW5kICovCisgICAgICAgIG90RVhQRUNUX0FDVElPTihyZkNvcmVNb2RpZnlTb3VyY2VNYXRjaEVudHJ5KGlkeCwgRVhUX0FERFJFU1MsIHRydWUpID09IENNRFNUQV9Eb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiB3ZSBhcmUgbm90IHJ1bm5pbmcsIHNvIHdlIG11c3QgdXBkYXRlIHRoZSB2YWx1ZXMgb3Vyc2VsdmVzICovCisgICAgICAgIHNTcmNNYXRjaEV4dERhdGEuc3JjUGVuZEVuW2lkeCAvIDMyXSB8PSAoMSA8PCAoaWR4ICUgMzIpKTsKKyAgICAgICAgc1NyY01hdGNoRXh0RGF0YS5zcmNNYXRjaEVuW2lkeCAvIDMyXSB8PSAoMSA8PCAoaWR4ICUgMzIpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHVpbnQ4X3QgaWR4OworICAgIG90RVhQRUNUX0FDVElPTigoaWR4ID0gcmZDb3JlRmluZEV4dFNyY01hdGNoSWR4KCh1aW50NjRfdCAqKWFFeHRBZGRyZXNzKSkgIT0gQ0MyNjUwX1NSQ19NQVRDSF9OT05FLAorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0FERFJFU1MpOworCisgICAgaWYgKHNSZWNlaXZlQ21kLnN0YXR1cyA9PSBBQ1RJVkUgfHwgc1JlY2VpdmVDbWQuc3RhdHVzID09IElFRUVfU1VTUEVOREVEKQorICAgIHsKKyAgICAgICAgLyogd2UgaGF2ZSBhIHJ1bm5pbmcgb3IgYmFja2dyb3VuZGVkIHJ4IGNvbW1hbmQgKi8KKyAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHJmQ29yZU1vZGlmeVNvdXJjZU1hdGNoRW50cnkoaWR4LCBFWFRfQUREUkVTUywgZmFsc2UpID09IENNRFNUQV9Eb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiB3ZSBhcmUgbm90IHJ1bm5pbmcsIHNvIHdlIG11c3QgdXBkYXRlIHRoZSB2YWx1ZXMgb3Vyc2VsdmVzICovCisgICAgICAgIHNTcmNNYXRjaEV4dERhdGEuc3JjUGVuZEVuW2lkeF0gPSAwdTsKKyAgICAgICAgc1NyY01hdGNoRXh0RGF0YS5zcmNNYXRjaEVuW2lkeF0gPSAwdTsKKyAgICAgICAgc1NyY01hdGNoRXh0RGF0YS5zcmNQZW5kRW5baWR4IC8gMzJdICY9IH4oMSA8PCAoaWR4ICUgMzIpKTsKKyAgICAgICAgc1NyY01hdGNoRXh0RGF0YS5zcmNNYXRjaEVuW2lkeCAvIDMyXSAmPSB+KDEgPDwgKGlkeCAlIDMyKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorKi8KK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1JlY2VpdmVDbWQuc3RhdHVzID09IEFDVElWRSB8fCBzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gSUVFRV9TVVNQRU5ERUQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQ0MyNjUwX1NIT1JUQUREX1NSQ19NQVRDSF9OVU07IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgLyogd2UgaGF2ZSBhIHJ1bm5pbmcgb3IgYmFja2dyb3VuZGVkIHJ4IGNvbW1hbmQgKi8KKyAgICAgICAgICAgIG90RVhQRUNUKHJmQ29yZU1vZGlmeVNvdXJjZU1hdGNoRW50cnkoaSwgU0hPUlRfQUREUkVTUywgZmFsc2UpID09IENNRFNUQV9Eb25lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiB3ZSBhcmUgbm90IHJ1bm5pbmcsIHNvIHdlIGNhbiBlcmFzZSB0aGVtIG91cnNlbHZlcyAqLworICAgICAgICBtZW1zZXQoKHZvaWQgKikmc1NyY01hdGNoU2hvcnREYXRhLCAwLCBzaXplb2Yoc1NyY01hdGNoU2hvcnREYXRhKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworLyoqCisqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorKi8KK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgaWYgKHNSZWNlaXZlQ21kLnN0YXR1cyA9PSBBQ1RJVkUgfHwgc1JlY2VpdmVDbWQuc3RhdHVzID09IElFRUVfU1VTUEVOREVEKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IENDMjY1MF9FWFRBRERfU1JDX01BVENIX05VTTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICAvKiB3ZSBoYXZlIGEgcnVubmluZyBvciBiYWNrZ3JvdW5kZWQgcnggY29tbWFuZCAqLworICAgICAgICAgICAgb3RFWFBFQ1QocmZDb3JlTW9kaWZ5U291cmNlTWF0Y2hFbnRyeShpLCBFWFRfQUREUkVTUywgZmFsc2UpID09IENNRFNUQV9Eb25lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiB3ZSBhcmUgbm90IHJ1bm5pbmcsIHNvIHdlIGNhbiBlcmFzZSB0aGVtIG91cnNlbHZlcyAqLworICAgICAgICBtZW1zZXQoKHZvaWQgKikmc1NyY01hdGNoRXh0RGF0YSwgMCwgc2l6ZW9mKHNTcmNNYXRjaEV4dERhdGEpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitib29sIG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAvKiB3ZSBhcmUgcHJvbWlzY3VvdXMgaWYgd2UgYXJlIG5vdCBmaWx0ZXJpbmcgKi8KKyAgICByZXR1cm4gc1JlY2VpdmVDbWQuZnJhbWVGaWx0T3B0LmZyYW1lRmlsdEVuID09IDA7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1JlY2VpdmVDbWQuc3RhdHVzID09IEFDVElWRSB8fCBzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gSUVFRV9TVVNQRU5ERUQpCisgICAgeworICAgICAgICAvKiB3ZSBoYXZlIGEgcnVubmluZyBvciBiYWNrZ3JvdW5kZWQgcnggY29tbWFuZCAqLworICAgICAgICAvKiBpZiB3ZSBhcmUgcHJvbWlzY3VvdXMsIHRoZW4gZnJhbWUgZmlsdGVyaW5nIHNob3VsZCBiZSBkaXNhYmxlZCAqLworICAgICAgICByZkNvcmVNb2RpZnlSeEZyYW1lRmlsdGVyKCFhRW5hYmxlKTsKKyAgICAgICAgLyogWFhYIHNob3VsZCB3ZSBkdW1wIGFueSBxdWV1ZWQgbWVzc2FnZXMgPyAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBpZiB3ZSBhcmUgcHJvbWlzY3VvdXMsIHRoZW4gZnJhbWUgZmlsdGVyaW5nIHNob3VsZCBiZSBkaXNhYmxlZCAqLworICAgICAgICBzUmVjZWl2ZUNtZC5mcmFtZUZpbHRPcHQuZnJhbWVGaWx0RW4gPSBhRW5hYmxlID8gMCA6IDE7CisgICAgfQorfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCit2b2lkIG90UGxhdFJhZGlvR2V0SWVlZUV1aTY0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCAqYUllZWVFdWk2NCkKK3sKKyAgICB1aW50OF90ICpldWk2NDsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICAvKiBUaGUgSUVFRSBNQUMgYWRkcmVzcyBjYW4gYmUgc3RvcmVkIHR3byBwbGFjZXMuIFdlIGNoZWNrIHRoZSBDdXN0b21lcgorICAgICAqIENvbmZpZ3VyYXRpb24gd2FzIG5vdCBzZXQgYmVmb3JlIGRlZmF1bHRpbmcgdG8gdGhlIEZhY3RvcnkKKyAgICAgKiBDb25maWd1cmF0aW9uLgorICAgICAqLworICAgIGV1aTY0ID0gKHVpbnQ4X3QgKikoQ0NGR19CQVNFICsgQ0NGR19PX0lFRUVfTUFDXzApOworCisgICAgZm9yIChpID0gMDsgaSA8IE9UX0VYVF9BRERSRVNTX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChldWk2NFtpXSAhPSBDQzI2NTBfVU5LTk9XTl9FVUk2NCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaSA+PSBPVF9FWFRfQUREUkVTU19TSVpFKQorICAgIHsKKyAgICAgICAgLyogVGhlIGNjZmcgYWRkcmVzcyB3YXMgYWxsIDB4RkYsIHN3aXRjaCB0byB0aGUgZmNmZyAqLworICAgICAgICBldWk2NCA9ICh1aW50OF90ICopKEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX01BQ18xNV80XzApOworICAgIH0KKworICAgIC8qIFRoZSBJRUVFIE1BQyBhZGRyZXNzIGlzIHN0b3JlZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGJpZyBlbmRpYW4pLgorICAgICAqIFRoZSBjYWxsZXIgc2VlbXMgdG8gd2FudCB0aGUgYWRkcmVzcyBzdG9yZWQgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQsCisgICAgICogd2hpY2ggaXMgYmFja3dhcmRzIG9mIHRoZSBjb252ZW50aW9ucyBzZXR1cCBieSBAcmVmCisgICAgICogb3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MuIG90UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzIGFzc3VtZXMKKyAgICAgKiB0aGF0IHRoZSBhZGRyZXNzIGJlaW5nIHBhc3NlZCB0byBpdCBpcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGJpZworICAgICAqIGVuZGlhbiksIHNvIHRoZSBjYWxsZXIgb2Ygb3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MgbXVzdCBzd2FwIHRoZQorICAgICAqIGVuZGlhbm5lc3MgYmVmb3JlIGNhbGxpbmcuCisgICAgICoKKyAgICAgKiBJdCBtYXkgYmUgZWFzaWVyIHRvIGhhdmUgdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHN0b3JlIHRoZSBJRUVFCisgICAgICogYWRkcmVzcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGJpZyBlbmRpYW4pLgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBPVF9FWFRfQUREUkVTU19TSVpFOyBpKyspCisgICAgeworICAgICAgICBhSWVlZUV1aTY0W2ldID0gZXVpNjRbKE9UX0VYVF9BRERSRVNTX1NJWkUgLSAxKSAtIGldOworICAgIH0KK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqCisgKiBAbm90ZSBpdCBpcyBlbnRpcmVseSBwb3NzaWJsZSBmb3IgdGhpcyBmdW5jdGlvbiB0byBmYWlsLCBidXQgdGhlcmUgaXMgbm8KKyAqIHZhbGlkIHdheSB0byByZXR1cm4gdGhhdCBlcnJvciBzaW5jZSB0aGUgZnVuY2l0b24gcHJvdG90eXBlIHdhcyBjaGFuZ2VkLgorICovCit2b2lkIG90UGxhdFJhZGlvU2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhUGFuaWQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgLyogWFhYOiBpZiB0aGUgcGFuIGlkIGlzIHRoZSBicm9hZGNhc3QgcGFuIGlkICgweEZGRkYpIHRoZSBhdXRvIGFjayB3aWxsCisgICAgICogbm90IHdvcmsuIFRoaXMgaXMgZHVlIHRvIHRoZSBkZXNpZ24gb2YgdGhlIENNMCBhbmQgZm9sbG93cyBJRUVFIDgwMi4xNS40CisgICAgICovCisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVSZWNlaXZlKQorICAgIHsKKyAgICAgICAgb3RFWFBFQ1QocmZDb3JlRXhlY3V0ZUFib3J0Q21kKCkgPT0gQ01EU1RBX0RvbmUpOworICAgICAgICBzUmVjZWl2ZUNtZC5sb2NhbFBhbklEID0gYVBhbmlkOworICAgICAgICBvdEVYUEVDVChyZkNvcmVDbGVhclJlY2VpdmVRdWV1ZSgmc1J4RGF0YVF1ZXVlKSA9PSBDTURTVEFfRG9uZSk7CisgICAgICAgIG90RVhQRUNUKHJmQ29yZVNlbmRSZWNlaXZlQ21kKCkgPT0gQ01EU1RBX0RvbmUpOworICAgICAgICAvKiB0aGUgaW50ZXJydXB0IGZyb20gYWJvcnQgY2hhbmdlZCBvdXIgc3RhdGUgdG8gc2xlZXAgKi8KKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlUmVjZWl2ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1N0YXRlICE9IGNjMjY1MF9zdGF0ZVRyYW5zbWl0KQorICAgIHsKKyAgICAgICAgc1JlY2VpdmVDbWQubG9jYWxQYW5JRCA9IGFQYW5pZDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICoKKyAqIEBub3RlIGl0IGlzIGVudGlyZWx5IHBvc3NpYmxlIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGZhaWwsIGJ1dCB0aGVyZSBpcyBubworICogdmFsaWQgd2F5IHRvIHJldHVybiB0aGF0IGVycm9yIHNpbmNlIHRoZSBmdW5jaXRvbiBwcm90b3R5cGUgd2FzIGNoYW5nZWQuCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphQWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICAvKiBYWFg6IGFzc3VtaW5nIGxpdHRsZSBlbmRpYW4gZm9ybWF0ICovCisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVSZWNlaXZlKQorICAgIHsKKyAgICAgICAgb3RFWFBFQ1QocmZDb3JlRXhlY3V0ZUFib3J0Q21kKCkgPT0gQ01EU1RBX0RvbmUpOworICAgICAgICBzUmVjZWl2ZUNtZC5sb2NhbEV4dEFkZHIgPSAqKCh1aW50NjRfdCAqKShhQWRkcmVzcykpOworICAgICAgICBvdEVYUEVDVChyZkNvcmVDbGVhclJlY2VpdmVRdWV1ZSgmc1J4RGF0YVF1ZXVlKSA9PSBDTURTVEFfRG9uZSk7CisgICAgICAgIG90RVhQRUNUKHJmQ29yZVNlbmRSZWNlaXZlQ21kKCkgPT0gQ01EU1RBX0RvbmUpOworICAgICAgICAvKiB0aGUgaW50ZXJydXB0IGZyb20gYWJvcnQgY2hhbmdlZCBvdXIgc3RhdGUgdG8gc2xlZXAgKi8KKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlUmVjZWl2ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1N0YXRlICE9IGNjMjY1MF9zdGF0ZVRyYW5zbWl0KQorICAgIHsKKyAgICAgICAgc1JlY2VpdmVDbWQubG9jYWxFeHRBZGRyID0gKigodWludDY0X3QgKikoYUFkZHJlc3MpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICoKKyAqIEBub3RlIGl0IGlzIGVudGlyZWx5IHBvc3NpYmxlIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGZhaWwsIGJ1dCB0aGVyZSBpcyBubworICogdmFsaWQgd2F5IHRvIHJldHVybiB0aGF0IGVycm9yIHNpbmNlIHRoZSBmdW5jaXRvbiBwcm90b3R5cGUgd2FzIGNoYW5nZWQuCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhQWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVJlY2VpdmUpCisgICAgeworICAgICAgICBvdEVYUEVDVChyZkNvcmVFeGVjdXRlQWJvcnRDbWQoKSA9PSBDTURTVEFfRG9uZSk7CisgICAgICAgIHNSZWNlaXZlQ21kLmxvY2FsU2hvcnRBZGRyID0gYUFkZHJlc3M7CisgICAgICAgIG90RVhQRUNUKHJmQ29yZUNsZWFyUmVjZWl2ZVF1ZXVlKCZzUnhEYXRhUXVldWUpID09IENNRFNUQV9Eb25lKTsKKyAgICAgICAgb3RFWFBFQ1QocmZDb3JlU2VuZFJlY2VpdmVDbWQoKSA9PSBDTURTVEFfRG9uZSk7CisgICAgICAgIC8qIHRoZSBpbnRlcnJ1cHQgZnJvbSBhYm9ydCBjaGFuZ2VkIG91ciBzdGF0ZSB0byBzbGVlcCAqLworICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVSZWNlaXZlOworICAgIH0KKyAgICBlbHNlIGlmIChzU3RhdGUgIT0gY2MyNjUwX3N0YXRlVHJhbnNtaXQpCisgICAgeworICAgICAgICBzUmVjZWl2ZUNtZC5sb2NhbFNob3J0QWRkciA9IGFBZGRyZXNzOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKKy8qKgorICogQGJyaWVmIHNlYXJjaCB0aGUgcmVjZWl2ZSBxdWV1ZSBmb3IgdW5wcm9jZXNzZWQgbWVzc2FnZXMKKyAqCisgKiBMb29wIHRocm91Z2ggdGhlIHJlY2VpdmUgcXVldWUgc3RydWN0dXJlIGxvb2tpbmcgZm9yIGRhdGEgZW50cmllcyB0aGF0IHRoZQorICogcmFkaW8gY29yZSBoYXMgbWFya2VkIGFzIGZpbmlzaGVkLiBUaGVuIHBsYWNlIHRob3NlIGluIEByZWYgc1JlY2VpdmVGcmFtZQorICogYW5kIG1hcmsgYW55IGVycm9ycyBpbiBAcmVmIHNSZWNlaXZlRXJyb3IuCisgKi8KK3N0YXRpYyB2b2lkIHJlYWRGcmFtZSh2b2lkKQoreworICAgIHJmY19pZWVlUnhDb3JyQ3JjX3QgKmNyY0NvcnI7CisgICAgdWludDhfdCByc3NpOworICAgIHJmY19kYXRhRW50cnlHZW5lcmFsX3QgKnN0YXJ0RW50cnkgPSAocmZjX2RhdGFFbnRyeUdlbmVyYWxfdCAqKXNSeERhdGFRdWV1ZS5wQ3VyckVudHJ5OworICAgIHJmY19kYXRhRW50cnlHZW5lcmFsX3QgKmN1ckVudHJ5ID0gc3RhcnRFbnRyeTsKKworICAgIC8qIGxvb3AgdGhyb3VnaCByZWNlaXZlIHF1ZXVlICovCisgICAgZG8KKyAgICB7CisgICAgICAgIHVpbnQ4X3QgKnBheWxvYWQgPSAmKGN1ckVudHJ5LT5kYXRhKTsKKworICAgICAgICBpZiAoc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID09IDAgJiYgY3VyRW50cnktPnN0YXR1cyA9PSBEQVRBX0VOVFJZX0ZJTklTSEVEKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50OF90IGxlbiA9IHBheWxvYWRbMF07CisgICAgICAgICAgICAvKiBnZXQgdGhlIGluZm9ybWF0aW9uIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGZyYW1lLgorICAgICAgICAgICAgICogVGhpcyBhcnJheSBhY2Nlc3MgbG9va3MgbGlrZSBpdCBpcyBhIGZlbmNlcG9zdCBlcnJvciwgYnV0IHRoZQorICAgICAgICAgICAgICogZmlyc3QgYnl0ZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgZm9sbG93LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjcmNDb3JyID0gKHJmY19pZWVlUnhDb3JyQ3JjX3QgKikmcGF5bG9hZFtsZW5dOworICAgICAgICAgICAgcnNzaSA9IHBheWxvYWRbbGVuIC0gMV07CisKKyAgICAgICAgICAgIGlmIChjcmNDb3JyLT5zdGF0dXMuYkNyY0VyciA9PSAwICYmIChsZW4gLSAyKSA8IE9UX1JBRElPX0ZSQU1FX01BWF9TSVpFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA9IGxlbjsKKyAgICAgICAgICAgICAgICBtZW1jcHkoc1JlY2VpdmVGcmFtZS5tUHNkdSwgJihwYXlsb2FkWzFdKSwgbGVuIC0gMik7CisgICAgICAgICAgICAgICAgc1JlY2VpdmVGcmFtZS5tQ2hhbm5lbCA9IHNSZWNlaXZlQ21kLmNoYW5uZWw7CisgICAgICAgICAgICAgICAgc1JlY2VpdmVGcmFtZS5tUG93ZXIgPSByc3NpOworICAgICAgICAgICAgICAgIHNSZWNlaXZlRnJhbWUubUxxaSA9IGNyY0NvcnItPnN0YXR1cy5jb3JyOworICAgICAgICAgICAgICAgIHNSZWNlaXZlRXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNSZWNlaXZlRXJyb3IgPSBPVF9FUlJPUl9GQ1M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1ckVudHJ5LT5zdGF0dXMgPSBEQVRBX0VOVFJZX1BFTkRJTkc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjdXJFbnRyeS0+c3RhdHVzID09IERBVEFfRU5UUllfVU5GSU5JU0hFRCkKKyAgICAgICAgeworICAgICAgICAgICAgY3VyRW50cnktPnN0YXR1cyA9IERBVEFfRU5UUllfUEVORElORzsKKyAgICAgICAgfQorCisgICAgICAgIGN1ckVudHJ5ID0gKHJmY19kYXRhRW50cnlHZW5lcmFsX3QgKikoY3VyRW50cnktPnBOZXh0RW50cnkpOworICAgIH0KKyAgICB3aGlsZSAoY3VyRW50cnkgIT0gc3RhcnRFbnRyeSk7CisKKyAgICByZXR1cm47Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS1jYzI2NTAuaAorICovCit2b2lkIGNjMjY1MFJhZGlvUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVFZFNjYW4pCisgICAgeworICAgICAgICBpZiAoc0VkU2NhbkNtZC5zdGF0dXMgPT0gSUVFRV9ET05FX09LKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXRSYWRpb0VuZXJneVNjYW5Eb25lKGFJbnN0YW5jZSwgc0VkU2NhbkNtZC5tYXhSc3NpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzRWRTY2FuQ21kLnN0YXR1cyA9PSBBQ1RJVkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvRW5lcmd5U2NhbkRvbmUoYUluc3RhbmNlLCBDQzI2NTBfSU5WQUxJRF9SU1NJKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzU3RhdGUgPT0gY2MyNjUwX3N0YXRlVHJhbnNtaXRDb21wbGV0ZSB8fCBzVHJhbnNtaXRFcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgLyogd2UgYXJlIG5vdCBsb29raW5nIGZvciBhbiBBQ0sgcGFja2V0LCBvciBmYWlsZWQgKi8KKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlUmVjZWl2ZTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdERpYWdSYWRpb1RyYW5zbWl0RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgc1RyYW5zbWl0RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHICovCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvVHJhbnNtaXREb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCBzUmVjZWl2ZWRBY2tQZW5kaW5nQml0LCBzVHJhbnNtaXRFcnJvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVJlY2VpdmUgfHwgc1N0YXRlID09IGNjMjY1MF9zdGF0ZVRyYW5zbWl0KQorICAgIHsKKyAgICAgICAgcmVhZEZyYW1lKCk7CisKKyAgICAgICAgaWYgKHNSZWNlaXZlRnJhbWUubUxlbmd0aCA+IDApCisgICAgICAgIHsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90UGxhdERpYWdSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlRnJhbWUsIHNSZWNlaXZlRXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIE9QRU5USFJFQURfRU5BQkxFX0RJQUcgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlRnJhbWUsIHNSZWNlaXZlRXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICB9Cit9CisKK2ludDhfdCBvdFBsYXRSYWRpb0dldFJlY2VpdmVTZW5zaXRpdml0eShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBDQzI2NTBfUkVDRUlWRV9TRU5TSVRJVklUWTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvcmFuZG9tLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3JhbmRvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMWQ5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3JhbmRvbS5jCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9wcmNtLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3RybmcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlIDxtYmVkdGxzL2VudHJvcHlfcG9sbC5oPgorCitlbnVtCit7CisgICAgQ0MyNjUwX1RSTkdfTUlOX1NBTVBMRVNfUEVSX0NZQ0xFID0gKDEgPDwgNiksCisgICAgQ0MyNjUwX1RSTkdfTUFYX1NBTVBMRVNfUEVSX0NZQ0xFID0gKDEgPDwgMjQpLAorICAgIENDMjY1MF9UUk5HX0NMT0NLU19QRVJfU0FNUExFICAgICA9IDAsCit9OworCisvKioKKyAqIFxub3RlIGlmIG1vcmUgdGhhbiAzMiBiaXRzIG9mIGVudHJvcHkgYXJlIG5lZWRlZCwgdGhlIFRSTkcgY29yZSBwcm9kdWNlcworICogNjQgYnl0ZXMgb2YgcmFuZG9tIGRhdGEsIHdlIGp1c3QgaWdub3JlIHRoZSB1cHBlciAzMiBieXRlcworICovCisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS1jYzI2NTAuaAorICovCit2b2lkIGNjMjY1MFJhbmRvbUluaXQodm9pZCkKK3sKKyAgICBQUkNNUG93ZXJEb21haW5PbihQUkNNX0RPTUFJTl9QRVJJUEgpOworCisgICAgd2hpbGUgKFBSQ01Qb3dlckRvbWFpblN0YXR1cyhQUkNNX0RPTUFJTl9QRVJJUEgpICE9IFBSQ01fRE9NQUlOX1BPV0VSX09OKTsKKworICAgIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlKFBSQ01fUEVSSVBIX1RSTkcpOworICAgIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUoUFJDTV9ET01BSU5fUEVSSVBIKTsKKyAgICBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcEVuYWJsZShQUkNNX0RPTUFJTl9QRVJJUEgpOworICAgIFBSQ01Mb2FkU2V0KCk7CisgICAgVFJOR0NvbmZpZ3VyZShDQzI2NTBfVFJOR19NSU5fU0FNUExFU19QRVJfQ1lDTEUsIENDMjY1MF9UUk5HX01BWF9TQU1QTEVTX1BFUl9DWUNMRSwgQ0MyNjUwX1RSTkdfQ0xPQ0tTX1BFUl9TQU1QTEUpOworICAgIFRSTkdFbmFibGUoKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhbmRvbS5oCisgKi8KK3VpbnQzMl90IG90UGxhdFJhbmRvbUdldCh2b2lkKQoreworICAgIHdoaWxlICghKFRSTkdTdGF0dXNHZXQoKSAmIFRSTkdfTlVNQkVSX1JFQURZKSk7CisKKyAgICByZXR1cm4gVFJOR051bWJlckdldChUUk5HX0xPV19XT1JEKTsKK30KKworLyoqCisgKiBGaWxsIGFuIGFyYml0cmFyeSBhcmVhIHdpdGggcmFuZG9tIGRhdGEKKyAqCisgKiBAcGFyYW0gW291dF0gYU91dHB1dCBhcmVhIHRvIHBsYWNlIHRoZSByYW5kb20gZGF0YQorICogQHBhcmFtIFtpbl0gYUxlbiBzaXplIG9mIHRoZSBhcmVhIHRvIHBsYWNlIHJhbmRvbSBkYXRhCisgKiBAcGFyYW0gW291dF0gb0xlbiBob3cgbXVjaCBvZiB0aGUgb3V0cHV0IHdhcyB3cml0dGVuIHRvCisgKgorICogQHJldHVybiBpbmRpY2F0aW9uIG9mIGVycm9yCisgKiBAcmV0dmFsIDAgbm8gZXJyb3Igb2NjdXJlZAorICovCitzdGF0aWMgaW50IFRSTkdQb2xsKHVuc2lnbmVkIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhTGVuKQoreworICAgIHNpemVfdCBsZW5ndGggPSAwOworICAgIHVuaW9uCisgICAgeworICAgICAgICB1aW50MzJfdCB1MzJbMl07CisgICAgICAgIHVpbnQ4X3QgdThbOF07CisgICAgfSBidWZmZXI7CisKKyAgICB3aGlsZSAobGVuZ3RoIDwgYUxlbikKKyAgICB7CisgICAgICAgIGlmIChsZW5ndGggJSA4ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdlJ3ZlIHJ1biB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKi8KKyAgICAgICAgICAgIHdoaWxlICghKFRSTkdTdGF0dXNHZXQoKSAmIFRSTkdfTlVNQkVSX1JFQURZKSk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBkb24ndCB1c2UgVFJOR051bWJlckdldCBoZXJlIGJlY2F1c2UgaXQgd2lsbCB0ZWxsIHRoZSBUUk5HIHRvCisgICAgICAgICAgICAgKiByZWZpbCB0aGUgZW50cm9weSBwb29sLCBpbnN0YWQgd2UgZG8gaXQgb3Vyc2VsZi4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgYnVmZmVyLnUzMlswXSA9IEhXUkVHKFRSTkdfQkFTRSArIFRSTkdfT19PVVQwKTsKKyAgICAgICAgICAgIGJ1ZmZlci51MzJbMV0gPSBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fT1VUMSk7CisgICAgICAgICAgICBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fSVJRRkxBR0NMUikgPSAweDE7CisgICAgICAgIH0KKworICAgICAgICBhT3V0cHV0W2xlbmd0aF0gPSBidWZmZXIudThbbGVuZ3RoICUgOF07CisKKyAgICAgICAgbGVuZ3RoKys7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhbmRvbS5oCisgKi8KK290RXJyb3Igb3RQbGF0UmFuZG9tR2V0VHJ1ZSh1aW50OF90ICphT3V0cHV0LCB1aW50MTZfdCBhT3V0cHV0TGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNpemVfdCBsZW5ndGggPSBhT3V0cHV0TGVuZ3RoOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGFPdXRwdXQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG90RVhQRUNUX0FDVElPTihUUk5HUG9sbCgodW5zaWduZWQgY2hhciAqKWFPdXRwdXQsIGxlbmd0aCkgIT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvdWFydC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgxMDRiZgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvdWFydC5jCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvdWFydC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9wcmNtLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2lvYy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zeXNfY3RybC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworLyoqCisgKiBcbm90ZSB0aGlzIHdpbGwgY29uZmlndXJlIHRoZSB1YXJ0IGZvciAxMTUyMDAgYmF1ZCA4LU4tMSwgbm8gSFcgZmxvdyBjb250cm9sCisgKiBSWCBwaW4gSU9JRF8yIFRYIHBpbiBJT0lEXzMKKyAqCisgKiBcbm90ZSBtYWtlIHN1cmUgdGhhdCBkYXRhIGJlaW5nIHNlbnQgaXMgbm90IGluIGEgdm9sYXRpbGUgYXJlYQorICovCisKK2VudW0KK3sKKyAgICBDQzI2NTBfUkVDVl9DSVJDX0JVRkZfU0laRSA9IDI1NiwKK307CisKK3N0YXRpYyB1aW50OF90IGNvbnN0ICpzU2VuZEJ1ZmZlciA9IE5VTEw7CitzdGF0aWMgdWludDE2X3QgICAgICAgc1NlbmRMZW4gICAgPSAwOworCitzdGF0aWMgdWludDhfdCAgICAgICAgc1JlY2VpdmVCdWZmZXJbQ0MyNjUwX1JFQ1ZfQ0lSQ19CVUZGX1NJWkVdOworc3RhdGljIHVpbnQxNl90ICAgICAgIHNSZWNlaXZlSGVhZElkeCA9IDA7CitzdGF0aWMgdWludDE2X3QgICAgICAgc1JlY2VpdmVUYWlsSWR4ID0gMDsKKwordm9pZCBVQVJUMF9pbnRIYW5kbGVyKHZvaWQpOworCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vdWFydC5oCisgKi8KK290RXJyb3Igb3RQbGF0VWFydEVuYWJsZSh2b2lkKQoreworICAgIFBSQ01Qb3dlckRvbWFpbk9uKFBSQ01fRE9NQUlOX1NFUklBTCk7CisKKyAgICB3aGlsZSAoUFJDTVBvd2VyRG9tYWluU3RhdHVzKFBSQ01fRE9NQUlOX1NFUklBTCkgIT0gUFJDTV9ET01BSU5fUE9XRVJfT04pOworCisgICAgUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUoUFJDTV9QRVJJUEhfVUFSVDApOworICAgIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUoUFJDTV9QRVJJUEhfVUFSVDApOworICAgIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlKFBSQ01fUEVSSVBIX1VBUlQwKTsKKyAgICBQUkNNTG9hZFNldCgpOworCisgICAgd2hpbGUgKCFQUkNNTG9hZEdldCgpKTsKKworICAgIElPQ1BpblR5cGVVYXJ0KFVBUlQwX0JBU0UsIElPSURfMiwgSU9JRF8zLCBJT0lEX1VOVVNFRCwgSU9JRF9VTlVTRUQpOworCisgICAgVUFSVENvbmZpZ1NldEV4cENsayhVQVJUMF9CQVNFLCBTeXNDdHJsQ2xvY2tHZXQoKSwgMTE1MjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgVUFSVF9DT05GSUdfV0xFTl84IHwgVUFSVF9DT05GSUdfU1RPUF9PTkUgfCBVQVJUX0NPTkZJR19QQVJfTk9ORSk7CisgICAgVUFSVEludEVuYWJsZShVQVJUMF9CQVNFLCBVQVJUX0lOVF9SWCB8IFVBUlRfSU5UX1JUKTsKKyAgICBVQVJUSW50UmVnaXN0ZXIoVUFSVDBfQkFTRSwgVUFSVDBfaW50SGFuZGxlcik7CisgICAgVUFSVEVuYWJsZShVQVJUMF9CQVNFKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3VhcnQuaAorICovCitvdEVycm9yIG90UGxhdFVhcnREaXNhYmxlKHZvaWQpCit7CisgICAgVUFSVERpc2FibGUoVUFSVDBfQkFTRSk7CisgICAgVUFSVEludFVucmVnaXN0ZXIoVUFSVDBfQkFTRSk7CisgICAgVUFSVEludERpc2FibGUoVUFSVDBfQkFTRSwgVUFSVF9JTlRfUlggfCBVQVJUX0lOVF9SVCk7CisgICAgSU9DUG9ydENvbmZpZ3VyZVNldChJT0lEXzIsIElPQ19QT1JUX0dQSU8sIElPQ19TVERfSU5QVVQpOworICAgIElPQ1BvcnRDb25maWd1cmVTZXQoSU9JRF8zLCBJT0NfUE9SVF9HUElPLCBJT0NfU1REX0lOUFVUKTsKKworICAgIFBSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZShQUkNNX1BFUklQSF9VQVJUMCk7CisgICAgUFJDTVBlcmlwaGVyYWxTbGVlcERpc2FibGUoUFJDTV9QRVJJUEhfVUFSVDApOworICAgIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRGlzYWJsZShQUkNNX1BFUklQSF9VQVJUMCk7CisgICAgUFJDTUxvYWRTZXQoKTsKKyAgICAvKioKKyAgICAgKiBcd2FybiB0aGlzIGFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgZGV2aWNlcyBiZWluZyB1c2VkIGluIHRoZQorICAgICAqIHNlcmlhbCBwb3dlciBkb21haW4KKyAgICAgKi8KKyAgICBQUkNNUG93ZXJEb21haW5PZmYoUFJDTV9ET01BSU5fU0VSSUFMKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3VhcnQuaAorICovCitvdEVycm9yIG90UGxhdFVhcnRTZW5kKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFWFBFQ1RfQUNUSU9OKHNTZW5kQnVmZmVyID09IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQlVTWSk7CisKKyAgICBzU2VuZEJ1ZmZlciA9IGFCdWY7CisgICAgc1NlbmRMZW4gPSBhQnVmTGVuZ3RoOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBAYnJpZWYgcHJvY2VzcyB0aGUgcmVjZWl2ZSBzaWRlIG9mIHRoZSBidWZmZXJzCisgKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NSZWNlaXZlKHZvaWQpCit7CisgICAgd2hpbGUgKHNSZWNlaXZlSGVhZElkeCAhPSBzUmVjZWl2ZVRhaWxJZHgpCisgICAgeworICAgICAgICB1aW50MTZfdCB0YWlsSWR4OworCisgICAgICAgIGlmIChzUmVjZWl2ZUhlYWRJZHggPCBzUmVjZWl2ZVRhaWxJZHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhaWxJZHggPSBzUmVjZWl2ZVRhaWxJZHg7CisgICAgICAgICAgICBvdFBsYXRVYXJ0UmVjZWl2ZWQoJihzUmVjZWl2ZUJ1ZmZlcltzUmVjZWl2ZUhlYWRJZHhdKSwgdGFpbElkeCAtIHNSZWNlaXZlSGVhZElkeCk7CisgICAgICAgICAgICBzUmVjZWl2ZUhlYWRJZHggPSB0YWlsSWR4OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdGFpbElkeCA9IENDMjY1MF9SRUNWX0NJUkNfQlVGRl9TSVpFOworICAgICAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKCYoc1JlY2VpdmVCdWZmZXJbc1JlY2VpdmVIZWFkSWR4XSksIHRhaWxJZHggLSBzUmVjZWl2ZUhlYWRJZHgpOworICAgICAgICAgICAgc1JlY2VpdmVIZWFkSWR4ID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgcHJvY2VzcyB0aGUgdHJhbnNtaXQgc2lkZSBvZiB0aGUgYnVmZmVycworICovCitzdGF0aWMgdm9pZCBwcm9jZXNzVHJhbnNtaXQodm9pZCkKK3sKKyAgICBvdEVYUEVDVChzU2VuZEJ1ZmZlciAhPSBOVUxMKTsKKworICAgIGZvciAoOyBzU2VuZExlbiA+IDA7IHNTZW5kTGVuLS0pCisgICAgeworICAgICAgICBVQVJUQ2hhclB1dChVQVJUMF9CQVNFLCAqc1NlbmRCdWZmZXIpOworICAgICAgICBzU2VuZEJ1ZmZlcisrOworICAgIH0KKworICAgIHNTZW5kQnVmZmVyID0gTlVMTDsKKyAgICBzU2VuZExlbiA9IDA7CisgICAgb3RQbGF0VWFydFNlbmREb25lKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0tY2MyNjUwLmgKKyAqLwordm9pZCBjYzI2NTBVYXJ0UHJvY2Vzcyh2b2lkKQoreworICAgIHByb2Nlc3NSZWNlaXZlKCk7CisgICAgcHJvY2Vzc1RyYW5zbWl0KCk7Cit9CisKKy8qKgorICogQGJyaWVmIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHVhcnQgaW50ZXJydXB0IHZlY3RvcgorICovCit2b2lkIFVBUlQwX2ludEhhbmRsZXIodm9pZCkKK3sKKyAgICB3aGlsZSAoVUFSVENoYXJzQXZhaWwoVUFSVDBfQkFTRSkpCisgICAgeworICAgICAgICB1aW50MzJfdCBjID0gVUFSVENoYXJHZXQoVUFSVDBfQkFTRSk7CisgICAgICAgIC8qIFhYWCBwcm9jZXNzIGVycm9yIGZsYWdzIGZvciB0aGlzIGNoYXJhY3RlciA/PyAqLworICAgICAgICBzUmVjZWl2ZUJ1ZmZlcltzUmVjZWl2ZVRhaWxJZHhdID0gKHVpbnQ4X3QpYzsKKyAgICAgICAgc1JlY2VpdmVUYWlsSWR4Kys7CisKKyAgICAgICAgaWYgKHNSZWNlaXZlVGFpbElkeCA+PSBDQzI2NTBfUkVDVl9DSVJDX0JVRkZfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgc1JlY2VpdmVUYWlsSWR4ID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NzBjMTMxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxMTUgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworbGliX0xJQlJBUklFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGlib3BlbnRocmVhZC1kYTE1MDAwLmEKKworbGlib3BlbnRocmVhZF9kYTE1MDAwX2FfQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMvY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9hZGFwdGVycy9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9pbmNsdWRlICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1pbmNsdWRlJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9jdXN0b21fY29uZmlnX3FzcGkuaCAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW5rbm93bi1wcmFnbWFzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tc2lnbi1jb21wYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW51c2VkLWZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tc2hhZG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdHlwZS1saW1pdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW51c2VkLXZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1mbm8tc3RyaWN0LWFsaWFzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUExBVEZPUk1fU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGFsYXJtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvZ2dpbmcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhZGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhbmRvbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZlY3Rvci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNzdGFydHVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVhcnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvcnRleC1tX2NzdGFydHVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXJ0dXAtZ2NjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsb2NrLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1pc2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRElBTE9HX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9zcmMvcXNwaV9hdXRvbW9kZS5jICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19xc3BpLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od190aW1lcjAuYyAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19ncGlvLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19jcG0uYyAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od190cm5nLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19yZi5jICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19oYXJkX2ZhdWx0LmMgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od193YXRjaGRvZy5jICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9zeXNfdGNzLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od191YXJ0LmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19vdHBjLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19mZW1fc2t5NjYxMTItMTEuYyAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19kbWEuYyAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9jb21tb24uYyAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9wb3dlci5jICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9kYXRhLmMgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9hZF9mdGRmX3BoeV9hcGkuYyAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9hZF9mdGRmLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9tYWluLmMgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGlib3BlbnRocmVhZF9kYTE1MDAwX2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoUExBVEZPUk1fU09VUkNFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoRElBTE9HX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGN1c3RvbV9jb25maWdfcXNwaS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLWRhMTUwMDAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUFJFVFRZX0ZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoUExBVEZPUk1fU09VUkNFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQobm9pbnN0X0hFQURFUlMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLQorbGlib3BlbnRocmVhZF9kYTE1MDAwX2FfTElCQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoc2hlbGwgZmluZCAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL3V0aWxzICQoRGFzaCl0eXBlIGYgJChEYXNoKW5hbWUgIioubyIpCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvUkVBRE1FLm1kIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmMGFlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9SRUFETUUubWQKQEAgLTAsMCArMSwxMzEgQEAKKyMgRGlhbG9nIE9wZW5UaHJlYWQgREExNTAwMCBFeGFtcGxlCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGV4YW1wbGUgcGxhdGZvcm0gZHJpdmVycyBmb3IgdGhlIFtEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTE1MDAwXVtkYTE1MDAwXQorCitbZGExNTAwMF06IGh0dHBzOi8vc3VwcG9ydC5kaWFsb2ctc2VtaWNvbmR1Y3Rvci5jb20vY29ubmVjdGl2aXR5L3Byb2R1Y3Qvb3BlbnRocmVhZC1zYW5kYm94CisKKyoqTk9URToqKiBFYWNoIFRocmVhZCBub2RlIHJlcXVpcmVzIGEgdW5pcXVlIEVVSS02NC4gIAorUGxlYXNlIG1ha2Ugc3VyZSBhbGwgVGhyZWFkIG5vZGVzIGluIHlvdXIgbmV0d29yayBoYXZlIGEgdW5pcXVlIEVVSS02NCBieSBzZXR0aW5nIEhBUkRDT0RFRF9OT0RFX0lEIGluIHJhZGlvLmMgdG8gYSB1bmlxdWUgdmFsdWUuCisKKyoqTk9URToqKiBDdXJyZW50IHZlcnNpb24gd29ya3Mgb25seSB3aXRoIERBMTUwMDAgcmV2LiBCQQorCisjIyBCdWlsZCBFeGFtcGxlcyAoSG93IHRvIGJ1aWxkIGFuZCBmbGFzaCk6CitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtZGExNTAwMCBjbGVhbgorJCBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWRhMTUwMDAKK2BgYAorCitFeGVjdXRlIHNjcmlwdCB0byBwcmVwYXJlIGltYWdlIGZvciBmbGFzaGluZzoKKworKipOT1RFOioqIFNjcmlwdCBpcyBiYXNlZCBvbiBEaWFsb2cgVG9vbHMgYmluYXJpZXMgY29tcGlsZWQgZm9yIHg4NiBMaW51eC4KKworYGBgYmFzaAorJCBjZCAuL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dUb29scworJCAuL2ltZ3ByZXAuc2gKK2BgYAorCitGbGFzaCBCaW5hcmllczoKKworKipOT1RFOioqIEZsYXNoaW5nIHByb2Nlc3MgcmVxdWlyZXMgSkxpbmtHREJTZXJ2ZXIuIFBsZWFzZSB2aXNpdCBodHRwczovL3d3dy5zZWdnZXIuY29tL2psaW5rLWdkYi1zZXJ2ZXIuaHRtbCBmb3IgZGV0YWlscy4KKworMS4gT3BlbiBhbm90aGVyIHRlcm1pbmFsIHdpbmRvdyBpbiBvcmRlciB0byBzdGFydCBnZGIgc2VydmVyLiBXcml0ZSB0aGUgY29tbWFuZCAoTGludXgpOgorCisgICBgYGBiYXNoCisgICAkIEpMaW5rR0RCU2VydmVyIC1pciAtaWYgc3dkIC1zcGVlZCBhdXRvIC1kZXZpY2UgQ29ydGV4LU0wIC1sb2d0b2ZpbGUgb24gLWxvY2FsaG9zdG9ubHkKKyAgIGBgYAorMi4gUmV0dXJuIHRvIHByZXZpb3VzIHRlcm1pbmFsIHdpbmRvdyBhbmQgZXhlY3V0ZSBhIGNvbW1hbmQgaW4gb3JkZXIgdG8gZmxhc2ggdGhlIGJvYXJkOgorCisgICBgYGBiYXNoCisgICAkIC4vY2xpX3Byb2dyYW1tZXIgZ2Ric2VydmVyIHdyaXRlX3FzcGlfZXhlYyAuLi8uLi8uLi9vdXRwdXQvZGExNTAwMC9iaW4vb3QtY2xpLWZ0ZC5iaW4KKyAgIGBgYAorCisjIyBJbnRlcmFjdDoKKworQm9hcmQgd2lsbCBpbmRpY2F0ZSBzdGF0ZSBvZiBkZXZpY2UgYWNjb3JkaW5nIHRvIExFRCBibGluayBzcGVlZC4KKworfCBGcmVxdWVuY3kgfCBSb2xlIHwKK3wgLS0tIHwgLS0tIHwKK3wgNUh6IHwgTGVhZGVyIHwKK3wgMkh6IHwgUm91dGVyIHwKK3wgMC41SHogfCBFbmQgRGV2aWNlIHwKKworCisxLiBPcGVuIHRlcm1pbmFsIHRvIC9kZXYvdHR5QUNNMCAoc2VyaWFsIHBvcnQgc2V0dGluZ3M6IDExNTIwMCA4LU4tMSkuCisyLiBUeXBlIGhlbHAgZm9yIGxpc3Qgb2YgY29tbWFuZHMKKworIyMgRXhhbXBsZXM6CisxLiBDcmVhdGUgVG9wb2xvZ3kgYW5kIGJlY29tZSBMZWFkZXIgb24gY2hhbm5lbCAxMy4KKyAgIGBgYAorICAgPiBjaGFubmVsIDEzCisgICBEb25lCisgICA+IHBhbmlkIDB4ZmFjZQorICAgRG9uZQorICAgPiBpZmNvbmZpZyB1cAorICAgRG9uZQorICAgPiB0aHJlYWQgc3RhcnQKKyAgIERvbmUKKyAgIGBgYAorICAgV2FpdCBhbmQgc2VlIHRoYXQgTEVEIHN0YXJ0ZWQgdG8gYmxpbmsgd2l0aCA1SHouCisgICAKKyAgIENoZWNrIG5vZGUgc3RhdGU6CisgICBgYGAKKyAgID4gc3RhdGUKKyAgIExlYWRlcgorICAgYGBgCisyLiBBdHRhY2ggUm91dGVyIGFuZCBwaW5nIExlYWRlciBNZXNoIExvY2FsIGFkZHJlc3MuCisKKyAgIE9wZW4gdGVybWluYWwgZm9yIHNlY29uZCBkZXZpY2UgL2Rldi90dHlBQ00xIGFuZCBpc3N1ZSBjb21tYW5kczoKKyAgIGBgYAorICAgPiBjaGFubmVsIDEzCisgICBEb25lCisgICA+IHBhbmlkIDB4ZmFjZQorICAgRG9uZQorICAgPiBpZmNvbmZpZyB1cAorICAgRG9uZQorICAgPiB0aHJlYWQgc3RhcnQKKyAgIGBgYAorCisgICBXYWl0IHVudGlsIExFRCBzdGFydCB0byBibGluay4gU2hvdWxkIGJsaW5rIHNsb3dlci4KKworICAgQ2hlY2sgbm9kZSBzdGF0ZToKKworICAgYGBgCisgICA+IHN0YXRlCisgICBSb3V0ZXIKKyAgIGBgYAorCisgICBMaXN0IGFkZHJlc3NlcyBvbiB0ZXJtaW5hbCB3aXRoIExlYWRlcjoKKworICAgYGBgICAKKyAgID4gaXBhZGRyCisgICBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDo0NDAwCisgICBmZGRlOmFkMDA6YmVlZjowOjkyZjU6OTg0NDo2N2FkOmEwYzkKKyAgIGZlODA6MDowOjA6MmMxMTphYmExOmVjYzE6OTZkYQorICAgYGBgCisKKyAgIFBpbmcgTGVhZGVyIGZyb20gUm91dGVyIHRlcm1pbmFsOgorCisgICBgYGAKKyAgID4gcGluZyBmZGRlOmFkMDA6YmVlZjowOjkyZjU6OTg0NDo2N2FkOmEwYzkKKyAgIDE2IGJ5dGVzIGZyb20gZmRkZTphZDAwOmJlZWY6MDo5MmY1Ojk4NDQ6NjdhZDphMGM5OiBpY21wX3NlcT0yIGhsaW09NjQgdGltZT0zNTltcworICAgYGBgCisKKyMjIFJlbWFya3MKKyogVmFsaWRhdGlvbgorCisgICBUaGUgREExNTAwMCBleGFtcGxlIGhhcyBiZWVuIHZhbGlkYXRlZCBieSBEaWFsb2cgU2VtaWNvbmR1Y3RvciB3aXRoIGNvbW1pdCBkMjUwMTA1IGluY2x1ZGVkLgorICAKKyogQnVpbGQgZW52aXJvbm1lbnQKKworICAgVGhlIERBMTUwMDAgZXhhbXBsZSBjb2RlIGFuZCBhbGwgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGhhdmUgYmVlbiBjb21wbGllZCB3aXRoIGdjYyB2ZXJzaW9uIDUuNC4wICgyMDE2MDYwOSkuCisgICAKKyMjIFRyb3VibGVzaG9vdGluZyAKKyogV2h5IGNhbuKAmXQgSSBzZWUgdGhlIFZDT00gcG9ydD8KKyAgIAorICAgVGhlIFNlZ2dlciBWaXJ0dWFsIENPTSBwb3J0IGNhbiBiZSBkaXNhYmxlZCBieSBzb2Z0d2FyZSBjb25maWd1cmF0aW9uLiBJZiB5b3UgY2FuIHNlZSB0aGUgU2VnZ2VyIAorICAgZHJpdmVyIHByb3Blcmx5IGluc3RhbGxlZCBidXQgdGhlIFZDT00gbm90IHNob3dpbmcgdXAgaW4gdGhlIGRldmljZSBtYW5hZ2VyLCBpdOKAmXMgcHJvYmFibHkgZGlzYWJsZWQKKyAgIGJ5IHNvZnR3YXJlLiBUbyByZS1lbmFibGUgaXQgeW91IGhhdmUgdG8gcnVuIEpMaW5rRXhlIGFuZCBpc3N1ZSB0aGUgY29tbWFuZCBgIHZjb20gZW5hYmxlYC5JdCBpcworICAgcmVxdWlyZWQgdG8gcG93ZXIgY3ljbGUgdGhlIGRldmljZSB0byBhcHBseSB0aGUgY2hhbmdlLiAKKyAKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9hbGFybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzM4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9hbGFybS5jCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyogQGZpbGUgYWxhcm0uYworKiBQbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgdGhlIGFsYXJtCisqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKworI2luY2x1ZGUgImh3X3RpbWVyMC5oIgorI2luY2x1ZGUgImh3X2dwaW8uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS1kYTE1MDAwLmgiCisKK3N0YXRpYyBib29sIHNJc1J1bm5pbmcgPSBmYWxzZTsKK3N0YXRpYyB1aW50MzJfdCBzQWxhcm0gPSAwOworc3RhdGljIHVpbnQzMl90IHNDb3VudGVyOwordm9sYXRpbGUgYm9vbCBzQWxhcm1GaXJlZCA9IGZhbHNlOworCitzdGF0aWMgdm9pZCB0aW1lcjBfaW50ZXJydXB0X2NiKHZvaWQpCit7CisgICAgc0NvdW50ZXIrKzsKK30KKwordm9pZCBkYTE1MDAwQWxhcm1Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBpZiAoKHNJc1J1bm5pbmcpICYmIChzQWxhcm0gPD0gc0NvdW50ZXIpKQorICAgIHsKKyAgICAgICAgc0lzUnVubmluZyA9IGZhbHNlOworICAgICAgICBvdFBsYXRBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgfQorfQorCit2b2lkIGRhMTUwMDBBbGFybUluaXQodm9pZCkKK3sKKyAgICBod190aW1lcjBfaW5pdChOVUxMKTsKKyAgICBod190aW1lcjBfc2V0X2Nsb2NrX3NvdXJjZShIV19USU1FUjBfQ0xLX1NSQ19GQVNUKTsKKyAgICBod190aW1lcjBfc2V0X3B3bV9tb2RlKEhXX1RJTUVSMF9NT0RFX1BXTSk7CisgICAgaHdfdGltZXIwX3NldF9mYXN0X2Nsb2NrX2RpdihIV19USU1FUjBfRkFTVF9DTEtfRElWXzQpOworICAgIGh3X3RpbWVyMF9zZXRfdDBfcmVsb2FkKDB4MDdEMCwgMHgwN0QwKTsKKyAgICBod190aW1lcjBfcmVnaXN0ZXJfaW50KHRpbWVyMF9pbnRlcnJ1cHRfY2IpOworICAgIGh3X3RpbWVyMF9zZXRfb25fY2xvY2tfZGl2KGZhbHNlKTsKK30KKwordWludDMyX3Qgb3RQbGF0QWxhcm1HZXROb3codm9pZCkKK3sKKyAgICByZXR1cm4gc0NvdW50ZXI7Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdGFydEF0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgdDAsIHVpbnQzMl90IGR0KQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzQWxhcm0gPSB0MCArIGR0OworICAgIHNJc1J1bm5pbmcgPSB0cnVlOworCisgICAgaWYgKHNDb3VudGVyID09IDApCisgICAgeworICAgICAgICBod190aW1lcjBfZW5hYmxlKCk7CisgICAgfQorCisKKyAgICBpZiAoc0lzUnVubmluZyA9PSBmYWxzZSkKKyAgICB7CisgICAgICAgIHNJc1J1bm5pbmcgPSB0cnVlOworICAgIH0KKworICAgIGh3X3RpbWVyMF91bmZyZWV6ZSgpOworfQorCit2b2lkIG90UGxhdEFsYXJtU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHNJc1J1bm5pbmcgPSBmYWxzZTsKKyAgICBod190aW1lcjBfZnJlZXplKCk7Cit9CisKKworCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9jbG9jay5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmNlMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY2xvY2suYwpAQCAtMCwwICsxLDYyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgICBjbG9jay5jCisgKiBDbG9jayBpbml0IGZvciBEaWFsb2cgZGExNTAwMC4KKyAqCisgKi8KKyNpbmNsdWRlICJzZGtfZGVmcy5oIgorI2luY2x1ZGUgImh3X2NwbS5oIgorI2luY2x1ZGUgImh3X3dhdGNoZG9nLmgiCisKK3ZvbGF0aWxlIHVpbnQ4X3QgeHRhbDE2X3NldHRsZWQgPSAwOworCitleHRlcm4gdm9pZCBYVEFMMTZSRFlfSGFuZGxlcih2b2lkKTsKKworLyogVGhlIGhpZ2hlc3QgaW50ZXJydXB0IHByaW9yaXR5IHRoYXQgY2FuIGJlIHVzZWQgYnkgYW55IGludGVycnVwdCBzZXJ2aWNlCisgICByb3V0aW5lIHRoYXQgbWFrZXMgY2FsbHMgdG8gaW50ZXJydXB0IHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucy4KKyAgIERPIE5PVCBDQUxMIElOVEVSUlVQVCBTQUZFIEZSRUVSVE9TIEFQSSBGVU5DVElPTlMgRlJPTSBBTlkgSU5URVJSVVBUCisgICBUSEFUIEhBUyBBIEhJR0hFUiBQUklPUklUWSBUSEFOIFRISVMhIChoaWdoZXIgcHJpb3JpdGllcyBhcmUgbG93ZXIKKyAgIG51bWVyaWMgdmFsdWVzIG9uIGFuIEFSTSBDb3J0ZXgtTSkuICovCisjZGVmaW5lIGNvbmZpZ0xJQlJBUllfTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDEKKwordm9pZCBzd2l0Y2hfdG9fcmMxNih2b2lkKQoreworICAgIGlmICghaHdfY3BtX2NoZWNrX3JjMTZfc3RhdHVzKCkpICAgICAgICAgICAgLy8gUkMxNiBpcyBkaXNhYmxlZAorICAgIHsKKyAgICAgICAgaHdfY3BtX2VuYWJsZV9yYzE2KCk7ICAgICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBSQzE2CisgICAgICAgIGh3X2NwbV9zaG9ydF9kZWxheSgpOyAgICAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIGl0IGlzIHN0YWJsZQorICAgIH0KKworICAgIC8vIGZhc3QgLS0+IHNsb3cgY2xvY2sgc3dpdGNoCisgICAgaHdfY3BtX3NldF9zeXNjbGsoU1lTX0NMS19JU19SQzE2KTsgICAgICAgICAvLyBTZXQgUkMxNiBhcyBzeXNfY2xrCisgICAgLy9jbV9hZGp1c3Rfb3RwX2FjY2Vzc190aW1pbmdzKCk7ICAgICAgICAgICAvLyBBZGp1c3QgT1RQIHRpbWluZ3MKK30KKworCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9jb3J0ZXgtbV9jc3RhcnR1cC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY29ydGV4LW1fY3N0YXJ0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYTI2ZWEwCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY29ydGV4LW1fY3N0YXJ0dXAuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisqIEBmaWxlICAgICBjb3J0ZXgtbV9jc3RhcnR1cC5jCisqIEFSTSBDb3J0ZXgtTSBnZW5lcmljIGNzdGFydHVwLgorKgorKiBTZXR1cCBSQU0gYXMgbmVlZGVkIGJhc2VkIG9uIEdDQyBsaW5rZXIgc2NyaXB0IHNlY3Rpb25zLgorKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorLy8jaW5jbHVkZSA8dG9vbC5oPgorI2RlZmluZSBfX05BS0VEICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCisjZGVmaW5lIF9fVVNFRCAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHVzZWQpKQorI2RlZmluZSBfX05PX1JFVFVSTiAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCisvLyBmb3J3YXJkIGRlY2xhcmF0aW9uCitleHRlcm4gdm9pZCBtYWluKHZvaWQpOworZXh0ZXJuIHZvaWQgX19jcHVfc3RhcnR1cCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fZ2NjX3Byb2dyYW1fc3RhcnQodm9pZCk7CisKK2V4dGVybiB1aW50MzJfdCBfc2RhdGE7ICAgICAgICAgICAgLy8gU3RhcnQgb2YgLmRhdGEgcmVnaW9uIGluIFJBTQorZXh0ZXJuIHVpbnQzMl90IF9lZGF0YTsgICAgICAgICAgICAvLyBFbmQgb2YgLmRhdGEgcmVnaW9uIGluIFJBTQorZXh0ZXJuIHVpbnQzMl90IF9fYnNzX3N0YXJ0X187CitleHRlcm4gdWludDMyX3QgX19ic3NfZW5kX187CitleHRlcm4gdWludDMyX3QgX19pbml0X2FycmF5X3N0YXJ0OworZXh0ZXJuIHVpbnQzMl90IF9faW5pdF9hcnJheV9lbmQ7CitleHRlcm4gdWludDMyX3QgX19yd2RhdGFfc3RhcnRfXzsgIC8vIEVuZCBvZiAudGV4dCByZWdpb24gaW4gRkxBU0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjc3RhcnR1cF9yd2RhdGEoKQoreworCisgICAgLy8gR2V0IHRoZSBhZGRyZXNzZXMgZm9yIHRoZSAuZGF0YSBzZWN0aW9uIChpbml0aWFsaXplZCBkYXRhIHNlY3Rpb24pCisgICAgdWludDMyX3QgKmRhdGFfcm9tID0gKHVpbnQzMl90ICopICZfX3J3ZGF0YV9zdGFydF9fOworICAgIHVpbnQzMl90ICpkYXRhX3JhbSA9ICh1aW50MzJfdCAqKSAmX3NkYXRhOworICAgIHVpbnQzMl90ICpkYXRhX3JhbV9lbmQgPSAodWludDMyX3QgKikgJl9lZGF0YTsKKworICAgIC8vIENvcHkgaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIFJPTSB0byBSQU0KKyAgICB3aGlsZSAoZGF0YV9yYW0gPCBkYXRhX3JhbV9lbmQpCisgICAgeworICAgICAgICAqZGF0YV9yYW0rKyA9ICpkYXRhX3JvbSsrOworICAgIH0KK30KKwordm9pZCBjc3RhcnR1cF9ic3MoKQoreworCisgICAgLyogQ2xlYXIgdGhlIHplcm8taW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uICovCisgICAgdWludDMyX3QgKmJzc19zdGFydCA9ICh1aW50MzJfdCAqKSAmX19ic3Nfc3RhcnRfXzsKKyAgICB1aW50MzJfdCAqYnNzX2VuZCAgID0gKHVpbnQzMl90ICopICZfX2Jzc19lbmRfXzsKKworICAgIHdoaWxlIChic3Nfc3RhcnQgPCBic3NfZW5kKQorICAgIHsKKyAgICAgICAgKmJzc19zdGFydCsrID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgY3N0YXJ0dXAodm9pZCkKK3sKKyAgICBjc3RhcnR1cF9yd2RhdGEoKTsKKyAgICBjc3RhcnR1cF9ic3MoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEFSTSBDb3J0ZXgtTSBTdGFydAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgYWxsIG9mIHRoZSBuZWVkZWQgc3RhcnR1cCByb3V0aW5lcyBhbmQgdGhlbgorICogYnJhbmNoZXMgdG8gdGhlIG1haW4gcHJvY2Vzcy4KKyAqCisgKiBUaGlzIGNvbnRhaW5zIHRoZSB2ZXJ5IGZpcnN0IGluc3RydWN0aW9ucyB0aGF0IGFyZSBydW4gb24gYm9vdC4KKyAqLwordm9pZCBfX1VTRUQgX19OQUtFRCBfX05PX1JFVFVSTiBfX2djY19wcm9ncmFtX3N0YXJ0KHZvaWQpCit7CisgICAgLy8gZWFybHkgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24gLSBjb25maWd1cmUgY2xvY2tzLCBldGMuCisgICAgX19jcHVfc3RhcnR1cCgpOworCisgICAgLy8gQy9DKysgcnVudGltZSBpbml0aWFsaXphdGlvbiAoQlNTLCBEYXRhLCByZWxvY2F0aW9uLCBldGMuKQorICAgIGNzdGFydHVwKCk7CisKKyAgICAvLyBUQkQgd2Ugc2hvdWxkIHBhc3MgcGFyYW1ldGVycyBoZXJlLgorICAgIG1haW4oKTsKKworICAgIC8vIE5vIGFjdGlvbnMgdG8gcGVyZm9ybSBhZnRlciB0aGlzIHNvIHdhaXQgZm9yZXZlcgorICAgIHdoaWxlICgxKTsKK30KKworCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9jc3RhcnR1cC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY3N0YXJ0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWQwZDkwCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY3N0YXJ0dXAuYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgICBjc3RhcnR1cC5jCisgKiBjc3RhcnR1cCBmb3IgRGlhbG9nIGRhMTUwMDAuCisgKiBDYWxsZWQgYnkgX19CT09UX1NUQVJUVVAgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvY2Vzc29yIG9uIGJvb3QuCisgKiBUaGUgY2FsbGVyIGlzIGFsaWFzZWQgaW4gdG9vbC5oIHRvIGEgY29tcGlsZXIgZGVwZW5kYW50IHZhbHVlOgorICogICBJQVI6IF9fbG93X2xldmVsX2luaXQKKyAqICAgR0NDOiBfX2djY19wcm9ncmFtX3N0YXJ0CisgKgorICogRm9yIENvcnRleC1NIGNvcmVzLCBjYWxsZWQgZnJvbSBjcHUvYXJtL2NvcnRleC1tL2Jvb3QvY3N0YXJ0dXAuYy4KKyAqLworCisjaW5jbHVkZSAic2RrX2RlZnMuaCIKKyNpbmNsdWRlICJic3AvaW5jbHVkZS9jb3JlX2NtMC5oIgorCit2b2lkIF9fY3B1X3N0YXJ0dXAodm9pZCkKK3sKKyAgICAvLyBTZXRXb3JkMTYoQ0xLX0FNQkFfUkVHLCAweDAwKTsgICAgICAgICAgICAgIC8vIHNldCBjbG9ja3MgKGhjbGsgYW5kIHBjbGsgKSAxNk1IegorICAgIC8vIFNldFdvcmQxNihTRVRfRlJFRVpFX1JFRyxGUlpfV0RPRyk7ICAgICAgICAgLy8gc3RvcCB3YXRjaGRvZworICAgIC8vIFNldEJpdHMxNihTWVNfQ1RSTF9SRUcsUEFEX0xBVENIX0VOLDEpOyAgICAgLy8gZW5hYmxlIHBhZHMKKyAgICBFTkFCTEVfREVCVUdHRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBkZWJ1Z2dlcgorICAgIC8vIFNldEJpdHMxNihQTVVfQ1RSTF9SRUcsIFBFUklQSF9TTEVFUCwwKTsgICAgLy8gZXhpdCBwZXJpcGhlcmFsIHBvd2VyIGRvd24KKyAgICAvLyBTZXRCaXRzMTYoUE1VX0NUUkxfUkVHLCBSRVRBSU5fUkFNLCBkZ19jb25maWdNRU1fUkVURU5USU9OX01PREUpOworICAgIC8vIFNldEJpdHMxNihBT05fU1BBUkVfUkVHLCBFTl9CQVRTWVNfUkVULCAxKTsgLy8gUG93ZXIgR1BJT3MgZHVyaW5nIHNsZWVwCit9CisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2N1c3RvbV9jb25maWdfcXNwaS5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY3VzdG9tX2NvbmZpZ19xc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjE4MWY0NgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2N1c3RvbV9jb25maWdfcXNwaS5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlIGN1c3RvbV9jb25maWdfcXNwaS5oCisgKiBDdXN0b20gY29uZmlndXJhdGlvbiBmaWxlIGZvciBGcmVlUlRPUyBhcHBsaWNhdGlvbnMgZXhlY3V0aW5nIGZyb20gUVNQSS4KKyAqLworCisjaWZuZGVmIENVU1RPTV9DT05GSUdfUVNQSV9IXworI2RlZmluZSBDVVNUT01fQ09ORklHX1FTUElfSF8KKworI2luY2x1ZGUgImJzcF9kZWZpbml0aW9ucy5oIgorCisjZGVmaW5lIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICAgICAgICAgICAgICAgICAgICAgQkxBQ0tfT1JDQV9JQ19SRVZfQgorI2RlZmluZSBkZ19jb25maWdCTEFDS19PUkNBX0lDX1NURVAgICAgICAgICAgICAgICAgICAgIEJMQUNLX09SQ0FfSUNfU1RFUF9BCisKKyN1bmRlZiBDT05GSUdfVVNFX0JMRQorI2RlZmluZSBDT05GSUdfVVNFX0ZUREYKKworI2RlZmluZSBfX0hFQVBfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMAorI2RlZmluZSBfX1NUQUNLX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorCisjZGVmaW5lIENPTkZJR19SRVRBUkdFVAorI2RlZmluZSBDT05GSUdfUkVUQVJHRVRfVUFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1VBUlQxCisKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0xQX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUF9DTEtfMzI3NjgKKyNkZWZpbmUgZGdfY29uZmlnRVhFQ19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RFX0lTX0NBQ0hFRAorI2RlZmluZSBkZ19jb25maWdDT0RFX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgIE5PTl9WT0xBVElMRV9JU19GTEFTSAorI2RlZmluZSBkZ19jb25maWdFWFRfQ1JZU1RBTF9GUkVRICAgICAgICAgICAgICAgICAgICAgIEVYVF9DUllTVEFMX0lTXzE2TQorCisjZGVmaW5lIGRnX2NvbmZpZ0lNQUdFX1NFVFVQICAgICAgICAgICAgICAgICAgICAgICAgICAgREVWRUxPUE1FTlRfTU9ERQorI2RlZmluZSBkZ19jb25maWdFTVVMQVRFX09UUF9DT1BZICAgICAgICAgICAgICAgICAgICAgICgwKQorCisjZGVmaW5lIGRnX2NvbmZpZ1VTRVJfQ0FOX1VTRV9USU1FUjEgICAgICAgICAgICAgICAgICAgKDApCisKKyNkZWZpbmUgZGdfY29uZmlnTUVNX1JFVEVOVElPTl9NT0RFICAgICAgICAgICAgICAgICAgICAoMHgxRikKKyNkZWZpbmUgZGdfY29uZmlnU0hVRkZMSU5HX01PREUgICAgICAgICAgICAgICAgICAgICAgICAoMHgzKQorCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9XRE9HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCisKKyNkZWZpbmUgZGdfY29uZmlnRkxBU0hfQ09OTkVDVEVEX1RPICAgICAgICAgICAgICAgICAgICAoRkxBU0hfQ09OTkVDVEVEX1RPXzFWOCkKKyNkZWZpbmUgZGdfY29uZmlnRkxBU0hfUE9XRVJfRE9XTiAgICAgICAgICAgICAgICAgICAgICAoMCkKKworI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICgxKQorI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICgxKQorCisjZGVmaW5lIGRnX2NvbmZpZ0JBVFRFUllfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgKEJBVFRFUllfVFlQRV9MSU1OMk80KQorI2RlZmluZSBkZ19jb25maWdCQVRURVJZX0NIQVJHRV9DVVJSRU5UICAgICAgICAgICAgICAgIDIgICAgICAgLy8gMzBtQQorI2RlZmluZSBkZ19jb25maWdCQVRURVJZX1BSRUNIQVJHRV9DVVJSRU5UICAgICAgICAgICAgIDIwICAgICAgLy8gMi4xbUEKKyNkZWZpbmUgZGdfY29uZmlnQkFUVEVSWV9DSEFSR0VfTlRDICAgICAgICAgICAgICAgICAgICAxICAgICAgIC8vIGRpc2FibGVkCisKKyNkZWZpbmUgZGdfY29uZmlnVVNFX1VTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9VU0JfQ0hBUkdFUiAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZ19jb25maWdBTExPV19DSEFSR0lOR19OT1RfRU5VTSAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBkZ19jb25maWdVU0VfUHJvREsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQorCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9TV19DVVJTT1IgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCisKKyNkZWZpbmUgZGdfY29uZmlnQ0FDSEVBQkxFX1FTUElfQVJFQV9MRU4gICAgICAgICAgICAgICBOVk1TX1BBUkFNX1BBUlRfc3RhcnQKKworI2RlZmluZSBkZ19jb25maWdGRU1fRExHX1JFRl9CT0FSRCAgICAgICAgICAgICAgICAgICAgICgxKQorI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhQICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQorCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19UUk5HICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCisKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1RJTUVSMCAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyAqIE9TIHNwZWNpZmljIGNvbmZpZworICovCisjZGVmaW5lIE9TX0JBUkVNRVRBTAorI2RlZmluZSBDUFVfREExNTAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyAqIFBlcmlwaGVyYWwgc3BlY2lmaWMgY29uZmlnCisgKi8KKyNkZWZpbmUgRlRERl9QSFlfQVBJCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19SRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIGRnX2NvbmZpZ1JGX0VOQUJMRV9SRUNBTElCUkFUSU9OICAgICAgICAgICAgICAgKDApCisjZGVmaW5lIEZUREZfTk9fQ1NMCisjZGVmaW5lIEZUREZfTk9fVFNDSAorI2RlZmluZSBGVERGX0xJVEUKKworI2RlZmluZSBkZ19jb25maWdGTEFTSF9BREFQVEVSICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBkZ19jb25maWdOVk1TX0FEQVBURVIgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBkZ19jb25maWdOVk1TX1ZFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBkZ19jb25maWdVU0VfV0RPRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorLyogSW5jbHVkZSBic3AgZGVmYXVsdCB2YWx1ZXMgKi8KKyNpbmNsdWRlICJic3BfZGVmYXVsdHMuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyAqIE9wZW4gVGhyZWFkIHNwZWNpZmljIGNvbmZpZworICovCisKKyNkZWZpbmUgU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAoMHg3QjAwMCkKKworI2VuZGlmIC8qIENVU1RPTV9DT05GSUdfUVNQSV9IXyAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvZGExNTAwMC5sZCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2RhMTUwMDAubGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTVjMWUyOAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2RhMTUwMDAubGQKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgUGVyaXBoZXJhbCBtZW1vcnkgbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK19CT09UTE9BREVSX1NJWkUgPSAwIDsKK19RU1BJX1NJWkUgPSAyMDQ4SyA7ICAgLyogbGQgZG9lc24ndCBhbGxvdyBkZWZpbmVzIHRvIGJlIHVzZWQgZm9yIE1FTU9SWSAqLworX0VYRV9TSVpFID0gMTA4SyA7ICAgICAvKiBJbiBSQU0gY29uZmlnLCByZXNlcnZlIHNwYWNlIGZvciB0aGUgZXhlY3V0YWJsZS4uLiAqLworX1RFWFRfU1RBUlQgPSAweDE0MCA7IAorCitNRU1PUlkKK3sKKyAgdmVjdG9yIChyeCkgOiAgICAgICAgT1JJR0lOID0gMHgwMDAwMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAweDBDMCAKKyAgbWFnaWMgKHIpIDogICAgICAgICAgT1JJR0lOID0gMHgwMDAwMDBDMCwgICAgICAgICAgICBMRU5HVEggPSAweDA4MCAgIC8qIHBhdGNoIHRhYmxlICovCisgIGZsYXNoIChyeCkgOiAgICAgICAgIE9SSUdJTiA9IDB4MDAwMDAxNDAsICAgICAgICAgICAgTEVOR1RIID0gMjA0OEsKKyAgcm9tIChyeCkgOiAgICAgICAgICAgT1JJR0lOID0gMHgwN0YwMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAyNTZLCisgIG90cCAocngpIDogICAgICAgICAgIE9SSUdJTiA9IDB4MDdGODAwMDAsICAgICAgICAgICAgTEVOR1RIID0gMjU2SworICByYW0gKHJ3eCkgOiAgICAgICAgICBPUklHSU4gPSAweDA3RkMwMDAwKzB4MTQwLCAgICAgIExFTkdUSCA9IDEyOEstMHgxNDAKKyAgY2FjaGVyYW0gKHJ3eCkgOiAgICAgT1JJR0lOID0gMHgwN0ZFMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAxNksKKyAgcXNwaSAocngpIDogICAgICAgICAgT1JJR0lOID0gMHgwODAwMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAyMDQ4SworfQorCisvKioKKyAqIEdDQyBsaW5rZXIgc2NyaXB0IGZvciBBUk0gQ29ydGV4LU0gbWljcm9jb250cm9sbGVycy4KKyAqLworCisvKgorRU5UUlkoX3N0YXJ0KQorKi8KK0VOVFJZKF9fZ2NjX3Byb2dyYW1fc3RhcnQpCisKKy8qCisgKiBSZXNlcnZlIG1lbW9yeSBmb3IgaGVhcCBhbmQgc3RhY2suIFRoZSBsaW5rZXIgd2lsbCBpc3N1ZSBhbiBlcnJvciBpZiB0aGVyZQorICogaXMgbm90IGVub3VnaCBtZW1vcnkuCisgKgorICogTk9URTogVGhlIHJlc2VydmVkIGhlYXAgYW5kIHN0YWNrIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGJzcyBjb2x1bW4gb2YgdGhlCisgKiBiaW51dGlscyBzaXplIGNvbW1hbmQuCisgKi8KK19oZWFwX3NpemUgPSAweDA7ICAgIC8qIHJlcXVpcmVkIGFtb3VudCBvZiBoZWFwICAqLworX3N0YWNrX3NpemUgPSAweDA7ICAgLyogcmVxdWlyZWQgYW1vdW50IG9mIHN0YWNrICovCisKKy8qCisgKiBUaGUgc3RhY2sgc3RhcnRzIGF0IHRoZSBlbmQgb2YgUkFNIGFuZCBncm93cyBkb3dud2FyZHMuIEZ1bGwtZGVzY2VuZGluZworICogc3RhY2s7IGRlY3JlbWVudCBmaXJzdCwgdGhlbiBzdG9yZS4KKyAqLworX19zdGFja19zdGFydF9fID0gT1JJR0lOKHJhbSkgKyBMRU5HVEgocmFtKTsKK19fc3RhY2tfZW5kX18gPSBfX3N0YWNrX3N0YXJ0X18gLSBfc3RhY2tfc2l6ZTsKKworRVhURVJOKF9fdmVjdG9yX3RhYmxlKQorCisKK1NFQ1RJT05TCit7CisgICAgLyogUmVzZXQgYW5kIElTUiB2ZWN0b3JzICovCisgICAgLmlzcl92ZWN0b3IgOgorICAgIHsKKyAgICAgICAgX19pc3JfdmVjdG9yX3N0YXJ0X18gPSAuOworCV9fY3MzX2ludGVycnVwdF92ZWN0b3IgPSBfX3ZlY3Rvcl90YWJsZTsKKyAgICAgICAgS0VFUCgqKC5pc3JfdmVjdG9yKSkgCisgICAgICAgIEFTU0VSVCguICE9IF9faXNyX3ZlY3Rvcl9zdGFydF9fLCAiVGhlIC5pc3JfdmVjdG9yIHNlY3Rpb24gaXMgZW1wdHkiKTsKKyAgICB9ID52ZWN0b3IKKworICAgIC8qIFNwZWNpYWwgY29uZmlndXJhdGlvbiBzZWN0aW9uIGZvciBzb21lIHByb2Nlc3NvcnMgKi8KKyAgICAubWFnaWMgOgorICAgIHsKKyAgICAgICAgS0VFUCgqKC5tYWdpYykpIAorICAgIH0gPm1hZ2ljCisKKyAgICAvKiBUZXh0IHNlY3Rpb24gKGNvZGUgYW5kIHJlYWQtb25seSBkYXRhKSAqLworICAgIC50ZXh0IDoKKyAgICB7CisJLiA9IF9URVhUX1NUQVJUOworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIF9zdGV4dCA9IC47CisgICAgICAgICooLnRleHQqKSAgIC8qIGNvZGUgKi8KKyAgICAgICAgX2V0ZXh0ID0gLjsKKworCV9fcm9kYXRhX3N0YXJ0X18gPSAuOworICAgICAgICAqKC5yb2RhdGEqKSAvKiByZWFkIG9ubHkgZGF0YSAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIE5vdGU6IE5vIEFSTS9UaHVtYiBpbnRlcndvcmtpbmcsIHNvIG5vIC5nbHVlXzcgb3IgLmdsdWVfN3Qgc2VjdGlvbnMKKyAgICAgICAgICovCisgICAgICAgICooLmN0b3JzKSAKKyAgICAgICAgKiguZHRvcnMpIAorCisgICAgICAgIC8qIFN0YXRpYyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzICovCisgICAgICAgIEtFRVAoKiguaW5pdCkpCisgICAgICAgIEtFRVAoKiguZmluaSkpCisJCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICB9ID5mbGFzaAorCisKKyAgICAvKgorICAgICAqIFN0YWNrIHVud2luZGluZyBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nIHNlY3Rpb25zLgorICAgICAqCisgICAgICogQVJNIGNvbXBpbGVycyBlbWl0IG9iamVjdCBmaWxlcyB3aXRoIC5BUk0uZXh0YWIgYW5kIC5BUk0uZXhpZHggc2VjdGlvbnMKKyAgICAgKiB3aGVuIHVzaW5nIEMrKyBleGNlcHRpb25zLiBBbHNvLCBhdCBsZWFzdCBHQ0MgZW1pdHMgdGhvc2Ugc2VjdGlvbnMgd2hlbgorICAgICAqIGRpdmlkaW5nIGxhcmdlIG51bWJlcnMgKDY0LWJpdCkgaW4gQy4gU28gd2UgaGF2ZSB0byBoYW5kbGUgdGhlbS4KKyAgICAgKgorICAgICAqIChBUk0gdXNlcyAuQVJNLmV4dGFiIGFuZCAuQVJNLmV4aWR4IGluc3RlYWQgb2YgdGhlIC5laF9mcmFtZSBzZWN0aW9uCisgICAgICogdXNlZCBvbiB4ODYuKQorICAgICAqLworICAgIC5BUk0uZXh0YWIgOiAvKiBleGNlcHRpb24gdW53aW5kaW5nIGluZm9ybWF0aW9uICovCisgICAgeworICAgICAgICAqKC5BUk0uZXh0YWIqKQorICAgIH0gPmZsYXNoCisgICAgLkFSTS5leGlkeCA6IC8qIGluZGV4IGVudHJpZXMgZm9yIHNlY3Rpb24gdW53aW5kaW5nICovCisgICAgeworICAgICAgICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgICAgICAgKiguQVJNLmV4aWR4KikKKyAgICAgICAgX19leGlkeF9lbmQgPSAuOworICAgIH0gPmZsYXNoCisKKworICAgIC8qCisgICAgICogSW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uLiBUaGlzIHNlY3Rpb24gaXMgcHJvZ3JhbW1lZCBpbnRvIEZMQVNIIChMTUEKKyAgICAgKiBhZGRyZXNzKSBhbmQgY29waWVkIHRvIFJBTSAoVk1BIGFkZHJlc3MpIGluIHN0YXJ0dXAgY29kZS4KKyAgICAgKi8gCisgICAgIC4gPSBBTElHTig0KTsKKyAgICAgX19yd2RhdGFfc3RhcnRfXyA9IC47ICAgIC8qIExNQSBhZGRyZXNzIGlzIF9zaWRhdGEgKGluIEZMQVNIKSAqLworICAgIC5kYXRhIDogQVQoX19yd2RhdGFfc3RhcnRfXykgCisgICAgeworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIF9zZGF0YSA9IC47IC8qIGRhdGEgc2VjdGlvbiBWTUEgYWRkcmVzcyAqLworICAgICAgICAqKHRleHRfcmV0YWluZWQpCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgKiguZGF0YSopCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX2VkYXRhID0gLjsKKyAgICB9ID5yYW0KKworCisgICAgLyogVW5pbml0aWFsaXplZCBkYXRhIHNlY3Rpb24gKHplcm9lZCBvdXQgYnkgc3RhcnR1cCBjb2RlKSAqLworICAgIC5ic3MgOgorICAgIHsKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICBfX2Jzc19zdGFydF9fID0gLjsKKyAgICAgICAgKiguYnNzKikKKyAgICAgICAgKihDT01NT04pCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX19ic3NfZW5kX18gPSAuOworCV9fZW5kX18gPSAuOworICAgIH0gPnJhbQorCisKKyAgICAvKgorICAgICAqIFJlc2VydmUgbWVtb3J5IGZvciBoZWFwIGFuZCBzdGFjay4gVGhlIGxpbmtlciB3aWxsIGlzc3VlIGFuIGVycm9yIGlmCisgICAgICogdGhlcmUgaXMgbm90IGVub3VnaCBtZW1vcnkuCisgICAgICovCisgICAgLl9oZWFwIDoKKyAgICB7CisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX3NoZWFwID0gLjsKKyAgICAgICAgLiA9IC4gKyBfaGVhcF9zaXplOworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIF9laGVhcCA9IC47CisgICAgfSA+cmFtCisKKyAgICAuX3N0YWNrIDoKKyAgICB7CisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgLiA9IC4gKyBfc3RhY2tfc2l6ZTsKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgIH0gPnJhbQorCit9CisKKy8qIE5pY2UgdG8gaGF2ZSAqLworX19pc3JfdmVjdG9yX3NpemVfXyA9IFNJWkVPRiguaXNyX3ZlY3Rvcik7CitfX3RleHRfc2l6ZV9fID0gU0laRU9GKC50ZXh0KTsKK19fZGF0YV9zaXplX18gPSBTSVpFT0YoLmRhdGEpOworX19ic3Nfc2l6ZV9fID0gU0laRU9GKC5ic3MpOworCitQUk9WSURFIChlbmQgPSAuKTsKKworCisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjRhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9mbGFzaC5jCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorCisjaW5jbHVkZSAiaHdfcXNwaS5oIgorI2luY2x1ZGUgInFzcGlfYXV0b21vZGUuaCIKKworI2RlZmluZSBGTEFTSF9TRUNUT1JfU0laRSAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgRkxBU0hfQlVGRkVSX1NJWkUgICAgICAgICAgICAgMHgyMDAwCisKKyNkZWZpbmUgVzI1UV9SRUFEX1NUQVRVU19SRUdJU1RFUjEgICAweDA1CisKKy8qIEVyYXNlL1dyaXRlIGluIHByb2dyZXNzICovCisjZGVmaW5lIFcyNVFfU1RBVFVTMV9CVVNZX0JJVCAgICAgICAgMAorI2RlZmluZSBXMjVRX1NUQVRVUzFfQlVTWV9NQVNLICAgICAgICgxIDw8IFcyNVFfU1RBVFVTMV9CVVNZX0JJVCkKKworc3RhdGljIHVpbnQzMl90IHNXYWl0U3RhdHVzVGltZW91dDsKKworUVNQSV9TRUNUSU9OIHN0YXRpYyAgdWludDhfdCBxc3BpX2dldF9lcmFzZV9zdGF0dXModm9pZCkKK3sKKyAgICBRU1BJQy0+UVNQSUNfQ0hDS0VSQVNFX1JFRyA9IDA7CisgICAgcmV0dXJuIEhXX1FTUElDX1JFR19HRVRGKEVSQVNFQ1RSTCwgRVJTX1NUQVRFKTsKK30KKwordm9sYXRpbGUgYm9vbCAgRGlzYWJsZUVyYXNlID0gZmFsc2U7CisKKy8vIEVyYXNlIFFTUEkgbWVtb3J5IHNlY3Rpb24gYXMgbm9uLWJsb2NraW5nIGZ1bmN0aW9uLiBSZW1lbWJlciB0byBjaGVjayB1dGlsc0ZsYXNoU3RhdHVzV2FpdCBiZWZvcmUgd3JpdGUgb3IgcmVhZCEhCitvdEVycm9yIHV0aWxzRmxhc2hFcmFzZVBhZ2UodWludDMyX3QgYUFkZHJlc3MpCit7CisKKyAgICB1aW50MzJfdCBmbGFzaF9vZmZzZXQgPSAoYUFkZHJlc3MpICYgfihGTEFTSF9TRUNUT1JfU0laRSAtIDEpOworCisgICAgaWYgKERpc2FibGVFcmFzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIHFzcGlfYXV0b21vZGVfaW5pdCgpOworICAgIHFzcGlfYXV0b21vZGVfZXJhc2VfZmxhc2hfc2VjdG9yKGZsYXNoX29mZnNldCk7CisKKyAgICBDQUNIRS0+Q0FDSEVfQ1RSTDFfUkVHID0gQ0FDSEVfQ0FDSEVfQ1RSTDFfUkVHX0NBQ0hFX0ZMVVNIX01zazsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCisKK3VpbnQzMl90IHV0aWxzRmxhc2hHZXRTaXplKHZvaWQpCit7CisKKyAgICByZXR1cm4gKHVpbnQzMl90KUZMQVNIX0JVRkZFUl9TSVpFOworfQorCitvdEVycm9yIHV0aWxzRmxhc2hTdGF0dXNXYWl0KHVpbnQzMl90IGFUaW1lb3V0KQoreworCisgICAgc1dhaXRTdGF0dXNUaW1lb3V0ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKworICAgIHdoaWxlIChxc3BpX2dldF9lcmFzZV9zdGF0dXMoKSAgJiYgKChvdFBsYXRBbGFybUdldE5vdygpIC0gc1dhaXRTdGF0dXNUaW1lb3V0KSA8IGFUaW1lb3V0KSk7CisKKyAgICBpZiAocXNwaV9nZXRfZXJhc2Vfc3RhdHVzKCkpCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfQlVTWTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorfQorCitvdEVycm9yIHV0aWxzRmxhc2hJbml0KHZvaWQpCit7CisgICAgcXNwaV9hdXRvbW9kZV9mbGFzaF9wb3dlcl91cCgpOworCisgICAgaWYgKHV0aWxzRmxhc2hTdGF0dXNXYWl0KDEwMDApID09IE9UX0VSUk9SX0JVU1kpCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfRkFJTEVEOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICB9Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworCisgICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgc2l6ZV90IHdyaXR0ZW47CisKKyAgICB3aGlsZSAob2Zmc2V0IDwgYVNpemUpCisgICAgeworICAgICAgICB3cml0dGVuID0gcXNwaV9hdXRvbW9kZV93cml0ZV9mbGFzaF9wYWdlKGFBZGRyZXNzICsgb2Zmc2V0LCBhRGF0YSArIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhU2l6ZSAtIG9mZnNldCk7CisgICAgICAgIG9mZnNldCArPSB3cml0dGVuOworICAgIH0KKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hSZWFkKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgbWVtY3B5KGFEYXRhLCAodm9pZCAqKShNRU1PUllfUVNQSUZfQkFTRSArIGFBZGRyZXNzKSwgYVNpemUpOworICAgIHJldHVybiBhU2l6ZTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2xvZ2dpbmcuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2xvZ2dpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTQwMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvbG9nZ2luZy5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorKiBAZmlsZSBsb2dnaW5nLmMKKyogUGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBsb2dnaW5nCisqCisqLworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oPgorCit2b2lkIG90UGxhdExvZyhvdExvZ0xldmVsIGFMb2dMZXZlbCwgb3RMb2dSZWdpb24gYUxvZ1JlZ2lvbiwgY29uc3QgY2hhciAqYUZvcm1hdCwgLi4uKQoreworICAgICh2b2lkKWFMb2dMZXZlbDsKKyAgICAodm9pZClhTG9nUmVnaW9uOworICAgICh2b2lkKWFGb3JtYXQ7Cit9CisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL21pc2MuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmE5YTcwCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvbWlzYy5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaD4KKworI2luY2x1ZGUgInNka19kZWZzLmgiCisKK3ZvaWQgb3RQbGF0UmVzZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBXRE9HLT5XQVRDSERPR19DVFJMX1JFRyB8PSAoMSA8PCAoV0RPR19XQVRDSERPR19DVFJMX1JFR19OTUlfUlNUX1BvcykpOworfQorCitvdFBsYXRSZXNldFJlYXNvbiBvdFBsYXRHZXRSZXNldFJlYXNvbihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBPVF9QTEFUX1JFU0VUX1JFQVNPTl9QT1dFUl9PTjsKK30KKwordm9pZCBvdFBsYXRXYWtlSG9zdCh2b2lkKQoreworICAgIC8vIFRPRE86IGltcGxlbWVudCBhbiBvcGVyYXRpb24gdG8gd2FrZSB0aGUgaG9zdCBmcm9tIHNsZWVwIHN0YXRlLgorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvb3BlbnRocmVhZC1jb3JlLWRhMTUwMDAtY29uZmlnLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9vcGVudGhyZWFkLWNvcmUtZGExNTAwMC1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWUxOGZkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvb3BlbnRocmVhZC1jb3JlLWRhMTUwMDAtY29uZmlnLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgREExNTAwMCBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBjb25zdGFudHMgZm9yIE9wZW5UaHJlYWQuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0NPUkVfREExNTAwMF9DT05GSUdfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT1JFX0RBMTUwMDBfQ09ORklHX0hfCisKKyNkZWZpbmUgU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUyAJCSgweDdCMDAwKQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVAorICoKKyAqIERlZmluZSB0byAxIHRvIGVuYWJsZSBkZWZhdWx0IGxvZyBvdXRwdXQuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQgICAgICAgICAgICAgMQorCisgLyoqCisgICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfQUNLX1RJTUVPVVQKKyAgKgorICAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSBBQ0sgdGltZW91dCBsb2dpYy4KKyAgKgorICAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfQUNLX1RJTUVPVVQgICAgICAgICAgIDAKKworIC8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKyAgKgorICAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSByZXRyYW5zbWlzc2lvbiBsb2dpYy4KKyAgKgorICAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVCAgICAgICAgICAgIDAKKworIC8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOCisgICoKKyAgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc29mdHdhcmUgZW5lcmd5IHNjYW5uaW5nIGxvZ2ljLgorICAqCisgICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTiAgICAgICAgICAgMQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09SRV9EQTE1MDAwX0NPTkZJR19IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcGxhdGZvcm0tZGExNTAwMC5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcGxhdGZvcm0tZGExNTAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI5NWFmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9wbGF0Zm9ybS1kYTE1MDAwLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9EQTE1MDAwX0hfCisjZGVmaW5lIFBMQVRGT1JNX0RBMTUwMDBfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSByYWRpbyBzZXJ2aWNlIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqCisgKi8KK3ZvaWQgZGExNTAwMFJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHJhZGlvIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBkYTE1MDAwUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgYWxhcm0gc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGRhMTUwMDBBbGFybUluaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbGFybSBkcml2ZXIgcHJvY2Vzc2luZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgZGExNTAwMEFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHJhbmRvbSBudW1iZXIgc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGRhMTUwMDBSYW5kb21Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgVUFSVCBkcml2ZXIgcHJvY2Vzc2luZy4KKyAqCisgKi8KK3ZvaWQgZGExNTAwMFVhcnRQcm9jZXNzKHZvaWQpOworCisjZW5kaWYgLyogUExBVEZPUk1fUExBVEZPUk1fREExNTAwMF9IXyAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcGxhdGZvcm0uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhMzYyYQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5pdGlhbGl6ZXJzLgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworI2luY2x1ZGUgInBsYXRmb3JtLWRhMTUwMDAuaCIKKworI2luY2x1ZGUgInNka19kZWZzLmgiCisjaW5jbHVkZSAiZnRkZi5oIgorI2luY2x1ZGUgImh3X2NwbS5oIgorI2luY2x1ZGUgImh3X2dwaW8uaCIKKyNpbmNsdWRlICJod19xc3BpLmgiCisjaW5jbHVkZSAiaHdfb3RwYy5oIgorI2luY2x1ZGUgImh3X3dhdGNoZG9nLmgiCisKK3N0YXRpYyBib29sIHNCbGluayA9IGZhbHNlOworc3RhdGljIGludCAgc01zQ291bnRlckluaXQ7CitzdGF0aWMgaW50ICBzTXNDb3VudGVyOworCisjZGVmaW5lIExFQURFUl9CTElOS19USU1FICAgICAoMjAwKQorI2RlZmluZSBST1VURVJfQkxJTktfVElNRSAgICAgKDUwMCkKKyNkZWZpbmUgQ0hJTERfQkxJTktfVElNRSAgICAgICgyMDAwKQorCisjZGVmaW5lIFNFVF9DTE9DS19UT185Nk1IWgorCitvdEluc3RhbmNlICpzSW5zdGFuY2U7CisKK3ZvaWQgQ2xrSW5pdCh2b2lkKQoreworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFhUQUwxNlJEWV9JUlFuKTsKKyAgICBOVklDX0VuYWJsZUlSUShYVEFMMTZSRFlfSVJRbik7ICAgICAgICAgICAgICAgICAvLyBBY3RpdmF0ZSBYVEFMMTYgUmVhZHkgSVJRCisgICAgaHdfY3BtX3NldF9kaXZuKGZhbHNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZXJuYWwgY3J5c3RhbCBpcyAxNk1IegorICAgIGh3X2NwbV9lbmFibGVfcmMzMmsoKTsKKyAgICBod19jcG1fbHBfc2V0X3JjMzJrKCk7CisgICAgaHdfY3BtX3NldF94dGFsMTZtX3NldHRsaW5nX3RpbWUoZGdfY29uZmlnWFRBTDE2X1NFVFRMRV9USU1FX1JDMzJLKTsKKyAgICBod19jcG1fZW5hYmxlX3h0YWwxNm0oKTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmFibGUgWFRBTDE2TQorICAgIGh3X2NwbV9jb25maWd1cmVfeHRhbDMya19waW5zKCk7ICAgICAgICAgICAgICAgIC8vIENvbmZpZ3VyZSBYVEFMMzJLIHBpbnMKKyAgICBod19jcG1fY29uZmlndXJlX3h0YWwzMmsoKTsgICAgICAgICAgICAgICAgICAgICAvLyBDb25maWd1cmUgWFRBTDMySworICAgIGh3X2NwbV9lbmFibGVfeHRhbDMyaygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBYVEFMMzJLCisgICAgaHdfd2F0Y2hkb2dfdW5mcmVlemUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgd2F0Y2hkb2cKKworICAgIHdoaWxlICghaHdfY3BtX2lzX3h0YWwxNm1fc3RhcnRlZCgpKTsgICAgICAgICAgIC8vIEJsb2NrIHVudGlsIFhUQUwxNk0gc3RhcnRzCisKKyAgICBod193YXRjaGRvZ19mcmVlemUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIHdhdGNoZG9nCisgICAgaHdfY3BtX3NldF9yZWNoYXJnZV9wZXJpb2QoKHVpbnQxNl90KWRnX2NvbmZpZ1NFVF9SRUNIQVJHRV9QRVJJT0QpOworICAgIGh3X3dhdGNoZG9nX3VuZnJlZXplKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHdhdGNoZG9nCisgICAgaHdfY3BtX3BsbF9zeXNfb24oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHVybiBvbiBQTEwKKyAgICBod193YXRjaGRvZ19mcmVlemUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIHdhdGNoZG9nCisKKyAgICBod19xc3BpX3NldF9kaXYoSFdfUVNQSV9ESVZfMik7ICAgICAgICAgICAgICAgICAvLyBTZXQgUVNQSSBkaXYgYnkgMgorCisgICAgaHdfY3BtX2Rpc2FibGVfcGxsX2RpdmlkZXIoKTsgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBkaXZpZGVyIChkaXYgYnkgMikKKyAgICBod19jcG1fc2V0X3N5c2NsayhTWVNfQ0xLX0lTX1BMTCk7CisgICAgaHdfY3BtX3NldF9oY2xrX2RpdihhaGJfZGl2Mik7CisgICAgaHdfY3BtX3NldF9wY2xrX2RpdigwKTsKKworICAgIGh3X290cGNfaW5pdCgpOworICAgIGh3X290cGNfc2V0X3NwZWVkKEhXX09UUENfU1lTX0NMS19GUkVRXzQ4KTsKK30KKworLyoKKyAqIEV4YW1wbGUgZnVuY3Rpb24uIEJsaW5rIExFRCBhY2NvcmRpbmcgdG8gbm9kZSBzdGF0ZQorICogTGVhZGVyICAgICAgIC0gNUh6CisgKiBSb3V0ZXIgICAgICAgLSAySHoKKyAqIENoaWxkICAgICAgICAtIDAuNUh6CisgKi8KKwordm9pZCBFeGFtcGxlUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3REZXZpY2VSb2xlICBkZXZSb2xlOworICAgIHN0YXRpYyBpbnQgICAgdGhyVmFsdWU7CisKKyAgICBkZXZSb2xlID0gb3RUaHJlYWRHZXREZXZpY2VSb2xlKGFJbnN0YW5jZSk7CisKKyAgICBpZiAoc0JsaW5rID09IGZhbHNlICYmIG90UGxhdEFsYXJtR2V0Tm93KCkgIT0gMCkKKyAgICB7CisgICAgICAgIHNNc0NvdW50ZXJJbml0ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKyAgICAgICAgc0JsaW5rID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzTXNDb3VudGVyID0gb3RQbGF0QWxhcm1HZXROb3coKSAtIHNNc0NvdW50ZXJJbml0OworCisgICAgc3dpdGNoIChkZXZSb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgdGhyVmFsdWUgPSBMRUFERVJfQkxJTktfVElNRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgdGhyVmFsdWUgPSBST1VURVJfQkxJTktfVElNRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICB0aHJWYWx1ZSA9IENISUxEX0JMSU5LX1RJTUU7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgdGhyVmFsdWUgPSAweDAwOworICAgIH0KKworICAgIGlmICgodGhyVmFsdWUgIT0gMHgwMCkgJiYgKHNNc0NvdW50ZXIgPj0gdGhyVmFsdWUpKQorICAgIHsKKyAgICAgICAgaHdfZ3Bpb190b2dnbGUoSFdfR1BJT19QT1JUXzEsIEhXX0dQSU9fUElOXzUpOworICAgICAgICBzTXNDb3VudGVySW5pdCA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgfQorCisgICAgaWYgKHRoclZhbHVlID09IDApCisgICAgeworICAgICAgICBod19ncGlvX3NldF9pbmFjdGl2ZShIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fNSk7CisgICAgfQorfQorCisKK3ZvaWQgUGxhdGZvcm1Jbml0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgLy8gSW5pdGlhbGl6ZSBTeXN0ZW0gQ2xvY2sKKyAgICBDbGtJbml0KCk7CisgICAgLy8gSW5pdGlhbGl6ZSBSYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgIGRhMTUwMDBSYW5kb21Jbml0KCk7CisgICAgLy8gSW5pdGlhbGl6ZSBBbGFybQorICAgIGRhMTUwMDBBbGFybUluaXQoKTsKKyAgICAvLyBJbml0aWFsaXplIFJhZGlvCisgICAgZGExNTAwMFJhZGlvSW5pdCgpOworICAgIC8vIGVuYWJsZSBpbnRlcnJ1cHRzCisgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CisKKyAgICAodm9pZClhcmdjOworICAgICh2b2lkKWFyZ3Y7Cit9CisKKwordm9pZCBQbGF0Zm9ybVByb2Nlc3NEcml2ZXJzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBzSW5zdGFuY2UgPSBhSW5zdGFuY2U7CisKKyAgICBkYTE1MDAwVWFydFByb2Nlc3MoKTsKKyAgICBkYTE1MDAwUmFkaW9Qcm9jZXNzKGFJbnN0YW5jZSk7CisgICAgZGExNTAwMEFsYXJtUHJvY2VzcyhhSW5zdGFuY2UpOworICAgIEV4YW1wbGVQcm9jZXNzKGFJbnN0YW5jZSk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9yYWRpby5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGZhYzVmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcmFkaW8uYwpAQCAtMCwwICsxLDU4OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisqIEBmaWxlIHJhZGlvLmNwcAorKiBQbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgcmFkaW8gY29tbXVuaWNhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tZGExNTAwMC5oIgorCisjaW5jbHVkZSAiYWRfZnRkZi5oIgorI2luY2x1ZGUgImFkX2Z0ZGZfcGh5X2FwaS5oIgorI2luY2x1ZGUgImh3X290cGMuaCIKKyNpbmNsdWRlICJod19yZi5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAicmVnbWFwLmgiCisKKyNkZWZpbmUgRkFDVE9SWV9URVNUX1RJTUVTVEFNUCAgICAgICgweDdGOEVBMDgpIC8vIFJlZ2lzdGVyIGhvbGRzIGEgdGltZXN0YW1wIG9mIGZhY290cnkgdGVzdCBvZiBhIGNoaXAKKyNkZWZpbmUgRkFDVE9SWV9URVNURVJfSUQgICAgICAgICAgICgweDdGOEVBMEMpIC8vIFJlZ2lzdGVyIGhvbGRzIHRlc3QgbWFjaGluZSBJRCB1c2VkIGZvciBmYWN0b3J5IHRlc3QKKworI2RlZmluZSBERUZBVUxUX0NIQU5ORUwgICAgICAgICAgICAgICAgICgxMSkKKworI2RlZmluZSBQUklWSUxFR0VEX0RBVEEgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oInByaXZpbGVnZWRfZGF0YV96aSIpKSkKKworI2RlZmluZSBJRUVFODAyMTU0X0FDS19MRU5HVEggICAgICAgICAgIDUKKyNkZWZpbmUgSUVFRTgwMjE1NF9GUkFNRV9UWVBFX01BU0sgICAgICAweDA3CisjZGVmaW5lIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9BQ0sgICAgICAgMHgwMgorI2RlZmluZSBJRUVFODAyMTU0X0ZSQU1FX1BFTkRJTkcgICAgICAgIDEgPDwgNAorI2RlZmluZSBJRUVFODAyMTU0X0FDS19SRVFVRVNUICAgICAgICAgIDEgPDwgNQorI2RlZmluZSBJRUVFODAyMTU0X0RTTl9PRkZTRVQgICAgICAgICAgIDIKKworI2RlZmluZSBSU1NJX1RBQkxFX1NJWkUgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRVVJNjRfVEFCTEVfU0laRSAgICAgICAgICAgICAgICA4CisKK2VudW0KK3sKKyAgICBEQTE1MDAwX1JFQ0VJVkVfU0VOU0lUSVZJVFkgPSAtMTAwLCAgLy8gZEJtCit9OworCitzdGF0aWMgdm9pZCAgICAgICAgICBkYTE1MDAwT3RwUmVhZCh2b2lkKTsKK3N0YXRpYyB1aW50OF90ICAgICAgIGV1aTY0W0VVSTY0X1RBQkxFX1NJWkVdID0gezB9OworCitzdGF0aWMgb3RJbnN0YW5jZSAgICpzVGhyZWFkSW5zdGFuY2U7CitzdGF0aWMgb3RSYWRpb1N0YXRlICBzUmFkaW9TdGF0ZSAgICAgICAgICAgICA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworc3RhdGljIG90UmFkaW9GcmFtZSAgc1JlY2VpdmVGcmFtZTsKK3N0YXRpYyBvdFJhZGlvRnJhbWUgIHNUcmFuc21pdEZyYW1lOworc3RhdGljIG90RXJyb3IgICAgICAgc1RyYW5zbWl0U3RhdHVzOworc3RhdGljIGJvb2wgICAgICAgICAgc0ZyYW1lUGVuZGluZyAgICAgICAgICAgPSBmYWxzZTsKK3N0YXRpYyBib29sICAgICAgICAgIHNSYWRpb1Byb21pc2N1b3VzICAgICAgID0gZmFsc2U7CitzdGF0aWMgYm9vbCAgICAgICAgICBzUnNzaUluaXQgICAgICAgICAgICAgICA9IHRydWU7CitzdGF0aWMgdWludDhfdCAgICAgICBzQ2hhbm5lbCAgICAgICAgICAgICAgICA9IERFRkFVTFRfQ0hBTk5FTDsKK3N0YXRpYyB1aW50OF90ICAgICAgIHNSc3NpQ3RyICAgICAgICAgICAgICAgID0gMDsKK3N0YXRpYyB1aW50MzJfdCAgICAgIHNTbGVlcEluaXREZWxheSAgICAgICAgID0gMDsKKworc3RhdGljIHVpbnQ4X3QgICAgICAgc1JlY2VpdmVQc2R1W09UX1JBRElPX0ZSQU1FX01BWF9TSVpFXTsKK3N0YXRpYyB1aW50OF90ICAgICAgIHNSc3NpVGFibGVbUlNTSV9UQUJMRV9TSVpFXTsKK3N0YXRpYyB1aW50OF90ICAgICAgIHNUcmFuc21pdFBzZHVbT1RfUkFESU9fRlJBTUVfTUFYX1NJWkVdOworCitQUklWSUxFR0VEX0RBVEEgc3RhdGljIHVpbnQ4X3Qgc0VuYWJsZVJYOworCitzdGF0aWMgdm9pZCBkYTE1MDAwT3RwUmVhZCh2b2lkKQoreworICAgIGh3X290cGNfaW5pdCgpOyAgICAgICAgIC8vIFN0YXJ0IGNsb2NrLgorICAgIGh3X290cGNfZGlzYWJsZSgpOyAgICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBpbiBzdGFuZGJ5IG1vZGUuCisgICAgaHdfb3RwY19pbml0KCk7ICAgICAgICAgLy8gUmVzdGFydCBjbG9jay4KKyAgICBod19vdHBjX21hbnVhbF9yZWFkX29uKGZhbHNlKTsKKworICAgIF9fRE1CKCk7CisgICAgdWludDMyX3QgKmZhY3RvcnlUZXN0VGltZVN0YW1wICA9ICh1aW50MzJfdCAqKSBGQUNUT1JZX1RFU1RfVElNRVNUQU1QOworICAgIHVpbnQzMl90ICpmYWN0b3J5VGVzdElkICAgICAgICAgPSAodWludDMyX3QgKikgRkFDVE9SWV9URVNURVJfSUQ7CisgICAgX19ETUIoKTsKKworICAgIGV1aTY0WzBdID0gMHg4MDsgICAgLy84MC1FQS1DQSBpcyBmb3IgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAgICBldWk2NFsxXSA9IDB4RUE7CisgICAgZXVpNjRbMl0gPSAweENBOworICAgIGV1aTY0WzNdID0gKCpmYWN0b3J5VGVzdElkICAgICAgICA+PiAgOCkgJiAweGZmOworICAgIGV1aTY0WzRdID0gKCpmYWN0b3J5VGVzdFRpbWVTdGFtcCA+PiAyNCkgJiAweGZmOworICAgIGV1aTY0WzVdID0gKCpmYWN0b3J5VGVzdFRpbWVTdGFtcCA+PiAxNikgJiAweGZmOworICAgIGV1aTY0WzZdID0gKCpmYWN0b3J5VGVzdFRpbWVTdGFtcCA+PiAgOCkgJiAweGZmOworICAgIGV1aTY0WzddID0gICpmYWN0b3J5VGVzdFRpbWVTdGFtcCAgICAgICAgJiAweGZmOworCisgICAgaHdfb3RwY19tYW51YWxfcmVhZF9vZmYoKTsKKyAgICBod19vdHBjX2Rpc2FibGUoKTsKK30KKwordm9pZCBkYTE1MDAwUmFkaW9Jbml0KHZvaWQpCit7CisgICAgLyogV2FrZSB1cCBwb3dlciBkb21haW5zICovCisgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBGVERGX1NMRUVQKTsKKworICAgIHdoaWxlIChSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIEZUREZfSVNfVVApID09IDB4MCk7CisKKyAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFJBRElPX1NMRUVQKTsKKworICAgIHdoaWxlIChSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFJBRF9JU19VUCkgPT0gMHgwKTsKKworICAgIFJFR19TRVRGKENSR19UT1AsIENMS19SQURJT19SRUcsIEZUREZfTUFDX0VOQUJMRSwgMSk7CisgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQ0xLX1JBRElPX1JFRywgRlRERl9NQUNfRElWLCAwKTsKKworICAgIGh3X3JmX3Bvd2Vyb24oKTsKKyAgICBod19yZl9zeXN0ZW1faW5pdCgpOworCisgICAgYWRfZnRkZl9pbml0X3BoeV9hcGkoKTsKKworICAgIGRhMTUwMDBPdHBSZWFkKCk7CisKKyAgICBzQ2hhbm5lbCAgICAgICAgICAgICA9IERFRkFVTFRfQ0hBTk5FTDsKKyAgICBzVHJhbnNtaXRGcmFtZS5tUHNkdSA9IHNUcmFuc21pdFBzZHU7CisgICAgc1JlY2VpdmVGcmFtZS5tUHNkdSAgPSBzUmVjZWl2ZVBzZHU7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9HZXRJZWVlRXVpNjQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphSWVlZUV1aTY0KQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBtZW1jcHkoYUllZWVFdWk2NCwgZXVpNjQsIEVVSTY0X1RBQkxFX1NJWkUpOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBwYW5pZCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBGVERGX3NldFZhbHVlKEZUREZfUElCX1BBTl9JRCwgJnBhbmlkKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgRlRERl9zZXRWYWx1ZShGVERGX1BJQl9FWFRFTkRFRF9BRERSRVNTLCBhZGRyZXNzKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgRlRERl9zZXRWYWx1ZShGVERGX1BJQl9TSE9SVF9BRERSRVNTLCAmYWRkcmVzcyk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9FbmFibGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQ4X3QgbWF4UmV0cmllczsKKworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90RVhQRUNUX0FDVElPTihzUmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIHNUaHJlYWRJbnN0YW5jZSA9IGFJbnN0YW5jZTsKKworICAgIHNFbmFibGVSWCA9IDE7CisgICAgRlRERl9zZXRWYWx1ZShGVERGX1BJQl9SWF9PTl9XSEVOX0lETEUsICZzRW5hYmxlUlgpOworICAgIEZUREZfc2V0VmFsdWUoRlRERl9QSUJfQ1VSUkVOVF9DSEFOTkVMLCAmc0NoYW5uZWwpOworICAgIG1heFJldHJpZXMgPSAwOworICAgIEZUREZfc2V0VmFsdWUoRlRERl9QSUJfTUFYX0ZSQU1FX1JFVFJJRVMsICZtYXhSZXRyaWVzKTsKKworICAgIEZUREZfQml0bWFwMzIgb3B0aW9ucyA9ICBGVERGX1RSQU5TUEFSRU5UX0VOQUJMRV9GQ1NfR0VORVJBVElPTjsKKyAgICBvcHRpb25zIHw9IEZUREZfVFJBTlNQQVJFTlRfV0FJVF9GT1JfQUNLOworICAgIG9wdGlvbnMgfD0gRlRERl9UUkFOU1BBUkVOVF9BVVRPX0FDSzsKKworICAgIEZUREZfZW5hYmxlVHJhbnNwYXJlbnRNb2RlKEZUREZfVFJVRSwgb3B0aW9ucyk7CisgICAgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhhSW5zdGFuY2UsIGZhbHNlKTsKKyAgICBzUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0Rpc2FibGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzRW5hYmxlUlggPSAwOworICAgIEZUREZfc2V0VmFsdWUoRlRERl9QSUJfUlhfT05fV0hFTl9JRExFLCAmc0VuYWJsZVJYKTsKKyAgICBhZF9mdGRmX3NsZWVwX3doZW5fcG9zc2libGUoRlRERl9UUlVFKTsKKworICAgIEZUREZfZnBwclJlc2V0KCk7CisKKyAgICBzUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9Jc0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHJldHVybiAoc1JhZGlvU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvU2xlZXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzUmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFICYmIHNTbGVlcEluaXREZWxheSA9PSAwKQorICAgIHsKKyAgICAgICAgc1NsZWVwSW5pdERlbGF5ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorICAgIGVsc2UgaWYgKChvdFBsYXRBbGFybUdldE5vdygpIC0gc1NsZWVwSW5pdERlbGF5KSA8IGRnX2NvbmZpZ0lOSVRJQUxfU0xFRVBfREVMQVlfVElNRSkKKyAgICB7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90RVhQRUNUX0FDVElPTihzUmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgc1JhZGlvU3RhdGUgPSBPVF9SQURJT19TVEFURV9TTEVFUDsKKyAgICBzRW5hYmxlUlggPSAwOworICAgIEZUREZfc2V0VmFsdWUoRlRERl9QSUJfUlhfT05fV0hFTl9JRExFLCAmc0VuYWJsZVJYKTsKKyAgICBhZF9mdGRmX3NsZWVwX3doZW5fcG9zc2libGUoRlRERl9UUlVFKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9SZWNlaXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1JhZGlvU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBhZF9mdGRmX3dha2VfdXAoKTsKKworICAgIHNFbmFibGVSWCA9IDA7CisgICAgRlRERl9zZXRWYWx1ZShGVERGX1BJQl9SWF9PTl9XSEVOX0lETEUsICZzRW5hYmxlUlgpOworCisgICAgc0NoYW5uZWwgPSBhQ2hhbm5lbDsKKyAgICBGVERGX3NldFZhbHVlKEZUREZfUElCX0NVUlJFTlRfQ0hBTk5FTCwgJmFDaGFubmVsKTsKKworICAgIHNFbmFibGVSWCA9IDE7CisgICAgRlRERl9zZXRWYWx1ZShGVERGX1BJQl9SWF9PTl9XSEVOX0lETEUsICZzRW5hYmxlUlgpOworICAgIHNSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9FbmFibGVTcmNNYXRjaChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYUVuYWJsZTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0FkZFNyY01hdGNoU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgZW50cnk7CisgICAgdWludDhfdCBlbnRyeUlkeDsKKworICAgIC8vIGNoZWNrIGlmIGFkZHJlc3MgYWxyZWFkeSBzdG9yZWQKKworICAgIG90RVhQRUNUKCFGVERGX2ZwcHJMb29rdXBTaG9ydEFkZHJlc3MoYVNob3J0QWRkcmVzcywgJmVudHJ5LCAmZW50cnlJZHgpKTsKKworICAgIG90RVhQRUNUX0FDVElPTihGVERGX2ZwcHJHZXRGcmVlU2hvcnRBZGRyZXNzKCZlbnRyeSwgJmVudHJ5SWR4KSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzcyhlbnRyeSwgZW50cnlJZHgsIGFTaG9ydEFkZHJlc3MpOworICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzc1ZhbGlkKGVudHJ5LCBlbnRyeUlkeCwgRlRERl9UUlVFKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0FkZFNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICB1aW50OF90IGVudHJ5OworICAgIEZUREZfRXh0QWRkcmVzcyBhZGRyOworICAgIHVpbnQzMl90IGFkZHJMOworICAgIHVpbnQ2NF90IGFkZHJIOworCisgICAgYWRkckwgPSAoYUV4dEFkZHJlc3NbM10gPDwgMjQpIHwgKGFFeHRBZGRyZXNzWzJdIDw8IDE2KSB8IChhRXh0QWRkcmVzc1sxXSA8PCA4KSB8IChhRXh0QWRkcmVzc1swXSA8PCAwKTsKKyAgICBhZGRySCA9IChhRXh0QWRkcmVzc1s3XSA8PCAyNCkgfCAoYUV4dEFkZHJlc3NbNl0gPDwgMTYpIHwgKGFFeHRBZGRyZXNzWzVdIDw8IDgpIHwgKGFFeHRBZGRyZXNzWzRdIDw8IDApOworICAgIGFkZHIgPSBhZGRyTCB8IChhZGRySCA8PCAzMik7CisKKyAgICAvLyBjaGVjayBpZiBhZGRyZXNzIGFscmVhZHkgc3RvcmVkCisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFWFBFQ1QoIUZUREZfZnBwckxvb2t1cEV4dEFkZHJlc3MoYWRkciwgJmVudHJ5KSk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oRlRERl9mcHByR2V0RnJlZUV4dEFkZHJlc3MoJmVudHJ5KSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIEZUREZfZnBwclNldEV4dEFkZHJlc3MoZW50cnksIGFkZHIpOworICAgIEZUREZfZnBwclNldEV4dEFkZHJlc3NWYWxpZChlbnRyeSwgRlRERl9UUlVFKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgZW50cnk7CisgICAgdWludDhfdCBlbnRyeUlkeDsKKworCisgICAgb3RFWFBFQ1RfQUNUSU9OKEZUREZfZnBwckxvb2t1cFNob3J0QWRkcmVzcyhhU2hvcnRBZGRyZXNzLCAmZW50cnksICZlbnRyeUlkeCksIGVycm9yID0gT1RfRVJST1JfTk9fQUREUkVTUyk7CisKKyAgICBGVERGX2ZwcHJTZXRTaG9ydEFkZHJlc3MoZW50cnksIGVudHJ5SWR4LCAwKTsKKyAgICBGVERGX2ZwcHJTZXRTaG9ydEFkZHJlc3NWYWxpZChlbnRyeSwgZW50cnlJZHgsIEZUREZfRkFMU0UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHVpbnQ4X3QgZW50cnk7CisgICAgRlRERl9FeHRBZGRyZXNzIGFkZHI7CisgICAgdWludDMyX3QgYWRkckw7CisgICAgdWludDY0X3QgYWRkckg7CisKKyAgICBhZGRyTCA9IChhRXh0QWRkcmVzc1szXSA8PCAyNCkgfCAoYUV4dEFkZHJlc3NbMl0gPDwgMTYpIHwgKGFFeHRBZGRyZXNzWzFdIDw8IDgpIHwgKGFFeHRBZGRyZXNzWzBdIDw8IDApOworICAgIGFkZHJIID0gKGFFeHRBZGRyZXNzWzddIDw8IDI0KSB8IChhRXh0QWRkcmVzc1s2XSA8PCAxNikgfCAoYUV4dEFkZHJlc3NbNV0gPDwgOCkgfCAoYUV4dEFkZHJlc3NbNF0gPDwgMCk7CisgICAgYWRkciA9IGFkZHJMIHwgKGFkZHJIIDw8IDMyKTsKKworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90RVhQRUNUX0FDVElPTihGVERGX2ZwcHJMb29rdXBFeHRBZGRyZXNzKGFkZHIsICZlbnRyeSksIGVycm9yID0gT1RfRVJST1JfTk9fQUREUkVTUyk7CisKKyAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzKGVudHJ5LCAwKTsKKyAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzVmFsaWQoZW50cnksIEZUREZfRkFMU0UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHVpbnQ4X3QgaSwgajsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IDQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEZUREZfZnBwckdldFNob3J0QWRkcmVzc1ZhbGlkKGksIGopKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzc1ZhbGlkKGksIGosIEZUREZfRkFMU0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHVpbnQ4X3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKEZUREZfZnBwckdldEV4dEFkZHJlc3NWYWxpZChpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9mcHByU2V0RXh0QWRkcmVzc1ZhbGlkKGksIEZUREZfRkFMU0UpOworICAgICAgICB9CisgICAgfQorfQorCitvdFJhZGlvRnJhbWUgKm90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHJldHVybiAmc1RyYW5zbWl0RnJhbWU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHVpbnQ4X3QgY3NtYVN1cHByZXNzOworCisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFWFBFQ1RfQUNUSU9OKHNSYWRpb1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgY3NtYVN1cHByZXNzID0gMDsKKyAgICBhZF9mdGRmX3NlbmRfZnJhbWVfc2ltcGxlKGFGcmFtZS0+bUxlbmd0aCwgYUZyYW1lLT5tUHNkdSwgYUZyYW1lLT5tQ2hhbm5lbCwgMCwgY3NtYVN1cHByZXNzKTsgLy9QcmlvIDAgZm9yIGFsbC4KKyAgICBzUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHVpbnQxNl90IHJlc3VsdCA9IDA7CisKKyAgICAvLyBmaWxsIHRhYmxlIHdpdGggc2FtZSB2YWx1ZSBmb3IgaW5pdAorICAgIGlmIChzUnNzaUluaXQpCisgICAgeworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBSU1NJX1RBQkxFX1NJWkU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgc1Jzc2lUYWJsZVtpXSA9IHNSZWNlaXZlRnJhbWUubUxxaTsKKyAgICAgICAgfQorCisgICAgICAgIHNSc3NpSW5pdCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBBU1NFUlRfRVJST1Ioc1Jzc2lDdHIgPCBSU1NJX1RBQkxFX1NJWkUpOworICAgICAgICBzUnNzaVRhYmxlW3NSc3NpQ3RyXSA9IHNSZWNlaXZlRnJhbWUubUxxaTsKKyAgICAgICAgc1Jzc2lDdHIrKzsKKworICAgICAgICBpZiAoc1Jzc2lDdHIgPj0gUlNTSV9UQUJMRV9TSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBzUnNzaUN0ciA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBhdmVyYWdlIG9mIDggbGFzdCBscWkKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBSU1NJX1RBQkxFX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIHJlc3VsdCArPSBzUnNzaVRhYmxlW2ldOworICAgIH0KKworICAgIHJlc3VsdCA9IHJlc3VsdCAvIFJTU0lfVEFCTEVfU0laRTsKKworICAgIC8vIEFwcHJveGltYXRpb24gdG8gZEIgc2NhbGUgYnkgZGl2aWRlIGJ5IDkKKyAgICByZXR1cm4gcmVzdWx0IC8gOTsKK30KKworb3RSYWRpb0NhcHMgb3RQbGF0UmFkaW9HZXRDYXBzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICByZXR1cm4gT1RfUkFESU9fQ0FQU19BQ0tfVElNRU9VVDsKK30KKworYm9vbCBvdFBsYXRSYWRpb0dldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICByZXR1cm4gc1JhZGlvUHJvbWlzY3VvdXM7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBGVERGX3NldFZhbHVlKEZUREZfUElCX1BST01JU0NVT1VTX01PREUsICZhRW5hYmxlKTsKKyAgICBzUmFkaW9Qcm9taXNjdW91cyA9IGFFbmFibGU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9FbmVyZ3lTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24pCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgICh2b2lkKWFTY2FuQ2hhbm5lbDsKKyAgICAodm9pZClhU2NhbkR1cmF0aW9uOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldERlZmF1bHRUeFBvd2VyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFQb3dlcikKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBGVERGX3NldFZhbHVlKEZUREZfUElCX1RYX1BPV0VSLCAmYVBvd2VyKTsKK30KKwordm9pZCBkYTE1MDAwUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgdWludDMyX3QgZnRkZkNlID0gKkZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfRlRERl9DRSk7CisKKyAgICBGVERGX2NvbmZpcm1MbWFjSW50ZXJydXB0KCk7CisKKyAgICBpZiAoZnRkZkNlICYgRlRERl9NU0tfUlhfQ0UpCisgICAgeworICAgICAgICBGVERGX3Byb2Nlc3NSeEV2ZW50KCk7CisgICAgfQorCisgICAgaWYgKGZ0ZGZDZSAmIEZUREZfTVNLX1RYX0NFKQorICAgIHsKKyAgICAgICAgRlRERl9wcm9jZXNzVHhFdmVudCgpOworICAgIH0KKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpmdGRmQ20gPSBGVERGX0dFVF9SRUdfQUREUihPTl9PRkZfUkVHTUFQX0ZUREZfQ00pOworICAgICpmdGRmQ20gPSBGVERGX01TS19UWF9DRSB8IEZUREZfTVNLX1JYX0NFIHwgRlRERl9NU0tfU1lNQk9MX1RNUl9DRTsKK30KKwordm9pZCBGVERGX3NlbmRGcmFtZVRyYW5zcGFyZW50Q29uZmlybSh2b2lkICpoYW5kbGUsIEZUREZfQml0bWFwMzIgc3RhdHVzKQoreworICAgICh2b2lkKWhhbmRsZTsKKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICBjYXNlIEZUREZfVFJBTlNQQVJFTlRfU0VORF9TVUNDRVNTRlVMOgorICAgICAgICBzVHJhbnNtaXRTdGF0dXMgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9UUkFOU1BBUkVOVF9DU01BQ0FfRkFJTFVSRToKKyAgICAgICAgc1RyYW5zbWl0U3RhdHVzID0gT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfVFJBTlNQQVJFTlRfTk9fQUNLOgorICAgICAgICBzVHJhbnNtaXRTdGF0dXMgPSBPVF9FUlJPUl9OT19BQ0s7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgc1RyYW5zbWl0U3RhdHVzID0gT1RfRVJST1JfQUJPUlQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHNSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKworICAgIGlmICgoKHNUcmFuc21pdEZyYW1lLm1Qc2R1WzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkgPT0gMCkgfHwgc1RyYW5zbWl0U3RhdHVzICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShzVGhyZWFkSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgTlVMTCwgc1RyYW5zbWl0U3RhdHVzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RQbGF0UmFkaW9UeERvbmUoc1RocmVhZEluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsICZzUmVjZWl2ZUZyYW1lLCBzVHJhbnNtaXRTdGF0dXMpOworICAgIH0KK30KKwordm9pZCBGVERGX3JjdkZyYW1lVHJhbnNwYXJlbnQoRlRERl9EYXRhTGVuZ3RoIGZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCAgICAgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9CaXRtYXAzMiAgIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTGlua1F1YWxpdHkgbHFpKQoreworICAgIHNSZWNlaXZlRnJhbWUubUNoYW5uZWwgICA9IHNDaGFubmVsOworICAgIHNSZWNlaXZlRnJhbWUubUxlbmd0aCAgICA9IGZyYW1lTGVuZ3RoOworICAgIHNSZWNlaXZlRnJhbWUubVBzZHUgICAgICA9IGZyYW1lOworICAgIHNSZWNlaXZlRnJhbWUubUxxaSAgICAgICA9IGxxaTsKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qb3dlciAgICAgPSBvdFBsYXRSYWRpb0dldFJzc2koc1RocmVhZEluc3RhbmNlKTsKKworICAgIGlmIChzUmFkaW9TdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCkKKyAgICB7CisgICAgICAgIHNSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKyAgICB9CisKKyAgICBpZiAoKHNSZWNlaXZlRnJhbWUubVBzZHVbMF0gICYgSUVFRTgwMjE1NF9GUkFNRV9UWVBFX01BU0spID09IElFRUU4MDIxNTRfRlJBTUVfVFlQRV9BQ0sgJiYKKyAgICAgICAgKChzUmVjZWl2ZUZyYW1lLm1Qc2R1WzBdICYgSUVFRTgwMjE1NF9GUkFNRV9QRU5ESU5HKSAhPSAwKSkKKyAgICB7CisgICAgICAgIHNGcmFtZVBlbmRpbmcgPSB0cnVlOworICAgIH0KKworICAgIGlmIChzdGF0dXMgPT0gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfU1VDQ0VTU0ZVTCkKKyAgICB7CisgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZURvbmUoc1RocmVhZEluc3RhbmNlLCAmc1JlY2VpdmVGcmFtZSwgT1RfRVJST1JfTk9ORSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZURvbmUoc1RocmVhZEluc3RhbmNlLCAmc1JlY2VpdmVGcmFtZSwgT1RfRVJST1JfQUJPUlQpOworICAgIH0KKworfQorCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gREExNTAwMF9SRUNFSVZFX1NFTlNJVElWSVRZOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcmFuZG9tLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmMwZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcmFuZG9tLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgKgorICogQHdhcm5pbmcKKyAqICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgYSB0cnVlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGFuZCBkb2VzIEBlbSBzYXRpc2Z5IHRoZSBUaHJlYWQgcmVxdWlyZW1lbnRzLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJwbGF0Zm9ybS1kYTE1MDAwLmgiCisjaW5jbHVkZSAiaHdfdHJuZy5oIgorI2luY2x1ZGUgInNka19kZWZzLmgiCisKKyNkZWZpbmUgSFdfVFJOR19SQU0gICAgICAgICAgICAgKDB4NDAwNDAwMDApCisKK3N0YXRpYyB1aW50MzJfdCBzU3RhdGUgPSAxOworc3RhdGljIHVpbnQzMl90IHNTZWVkOworCitpbnQgemhhbF9nZXRfZW50cm9weSh1aW50OF90ICpvdXRFbnRyb3B5LCBzaXplX3QgaW5TaXplKQoreworICAgIHVpbnQzMl90ICAgICAgICAgICAgcmFuZHdvcmQ7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAqcGJ1ZiAgICAgICAgICAgPSBvdXRFbnRyb3B5OworICAgIGNvbnN0IHNpemVfdCAgICAgICAgcmVxX3dvcmRzICAgICAgID0gaW5TaXplID4+IDI7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGJ1Zl9lbmQgICAgICAgPSBvdXRFbnRyb3B5ICsgaW5TaXplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnByZXFfd29yZHNfZW5kID0gKHVuc2lnbmVkIGNoYXIgKikoKCh1aW50MzJfdCAqKW91dEVudHJvcHkpICsgcmVxX3dvcmRzKTsKKyAgICBwdHJkaWZmX3QgICAgICAgICAgIHJlbWFpbmRlcl9ieXRlcyA9IHBidWZfZW5kIC0gcHJlcV93b3Jkc19lbmQ7CisKKyAgICBod190cm5nX2VuYWJsZShOVUxMKTsKKworICAgIGZvciAocGJ1ZiA9IG91dEVudHJvcHk7IHBidWYgPCBwcmVxX3dvcmRzX2VuZDsgcGJ1ZiArPSA0KQorICAgIHsKKyAgICAgICAgLyogV2FpdCBmb3IgYSByYW5kb20gd29yZCB0byBiZWNvbWUgYXZhaWxhYmxlIGluIHRoZSBUUk5HIEZJRk8uICovCisgICAgICAgIHdoaWxlICgoVFJORy0+VFJOR19GSUZPTFZMX1JFRyAmIFRSTkdfVFJOR19GSUZPTFZMX1JFR19UUk5HX0ZJRk9MVkxfTXNrKSA9PSAwKTsKKworICAgICAgICByYW5kd29yZCA9ICooKHZvbGF0aWxlIHVpbnQzMl90ICopSFdfVFJOR19SQU0pOworICAgICAgICBtZW1jcHkocGJ1ZiwgJnJhbmR3b3JkLCA0KTsKKyAgICB9CisKKyAgICBpZiAocmVtYWluZGVyX2J5dGVzKQorICAgIHsKKyAgICAgICAgd2hpbGUgKChUUk5HLT5UUk5HX0ZJRk9MVkxfUkVHICYgVFJOR19UUk5HX0ZJRk9MVkxfUkVHX1RSTkdfRklGT0xWTF9Nc2spID09IDApOworCisgICAgICAgIHJhbmR3b3JkID0gKigodm9sYXRpbGUgdWludDMyX3QgKilIV19UUk5HX1JBTSk7CisgICAgICAgIG1lbWNweShwYnVmLCAmcmFuZHdvcmQsIHJlbWFpbmRlcl9ieXRlcyk7CisgICAgfQorCisgICAgaHdfdHJuZ19kaXNhYmxlKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBkYTE1MDAwUmFuZG9tSW5pdCh2b2lkKQoreworICAgIHpoYWxfZ2V0X2VudHJvcHkoKHVpbnQ4X3QgKikmc1NlZWQsIHNpemVvZihzU2VlZCkpOworICAgIHNTdGF0ZSA9IHNTZWVkOworfQorCit1aW50MzJfdCBvdFBsYXRSYW5kb21HZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCBtbGNnOworICAgIHpoYWxfZ2V0X2VudHJvcHkoKHVpbnQ4X3QgKikmbWxjZywgc2l6ZW9mKG1sY2cpKTsKKyAgICByZXR1cm4gbWxjZzsKK30KKworb3RFcnJvciBvdFBsYXRSYW5kb21HZXRUcnVlKHVpbnQ4X3QgKmFPdXRwdXQsIHVpbnQxNl90IGFPdXRwdXRMZW5ndGgpCit7CisKKyAgICBmb3IgKHVpbnQxNl90IGxlbmd0aCA9IDA7IGxlbmd0aCA8IGFPdXRwdXRMZW5ndGg7IGxlbmd0aCsrKQorICAgIHsKKyAgICAgICAgYU91dHB1dFtsZW5ndGhdID0gKHVpbnQ4X3Qpb3RQbGF0UmFuZG9tR2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9zdGFydHVwLWdjYy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvc3RhcnR1cC1nY2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjBjNjM2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvc3RhcnR1cC1nY2MuYwpAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyogU3R1YnMgb3V0IGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgZ2VuZXJhbCBDKysgYmxvYXQKKyogZm9yIHN1aXRhYmlsaXR5IGZvciBlbWJlZGRlZCBlbnZpcm9ubWVudHMuCisqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK19fZXh0ZW5zaW9uX18gdHlwZWRlZiBpbnQgX19ndWFyZCBfX2F0dHJpYnV0ZV9fKChtb2RlKF9fRElfXykpKTsKK2V4dGVybiBpbnQgX19jeGFfZ3VhcmRfYWNxdWlyZShfX2d1YXJkICpnKTsKK2V4dGVybiB2b2lkIF9fY3hhX2d1YXJkX3JlbGVhc2UoX19ndWFyZCAqZyk7CitleHRlcm4gdm9pZCBfX2N4YV9ndWFyZF9hYm9ydChfX2d1YXJkICpnKTsKK2V4dGVybiB2b2lkIF9fY3hhX3B1cmVfdmlydHVhbCh2b2lkKTsKKworaW50IF9fY3hhX2d1YXJkX2FjcXVpcmUoX19ndWFyZCAqZykKK3sKKyAgICByZXR1cm4gISooY2hhciAqKShnKTsKK30KK3ZvaWQgX19jeGFfZ3VhcmRfcmVsZWFzZShfX2d1YXJkICpnKQoreworICAgICooY2hhciAqKWcgPSAxOworfQordm9pZCBfX2N4YV9ndWFyZF9hYm9ydChfX2d1YXJkICpnKQoreworICAgICh2b2lkKSBnOworfQordm9pZCBfX2N4YV9wdXJlX3ZpcnR1YWwodm9pZCkKK3sKKyAgICB3aGlsZSAoMSk7Cit9CisKK3ZvaWQgKl9fZHNvX2hhbmRsZTsKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3VhcnQuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2I5YjgzCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvdWFydC5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKworI2luY2x1ZGUgImh3X2dwaW8uaCIKKyNpbmNsdWRlICJod191YXJ0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0tZGExNTAwMC5oIgorCitzdGF0aWMgaW50IHNJbkZkOworc3RhdGljIGludCBzT3V0RmQ7Cit2b2lkIFVhcnRCdWZmQ2xlYXIodm9pZCk7CisKK290RXJyb3Igb3RQbGF0VWFydEVuYWJsZSh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVhcnRfY29uZmlnIHVhcnRfaW5pdCA9CisgICAgeworICAgICAgICAuYmF1ZF9yYXRlID0gSFdfVUFSVF9CQVVEUkFURV8xMTUyMDAsCisgICAgICAgIC5kYXRhICAgICAgPSBIV19VQVJUX0RBVEFCSVRTXzgsCisgICAgICAgIC5zdG9wICAgICAgPSBIV19VQVJUX1NUT1BCSVRTXzEsCisgICAgICAgIC5wYXJpdHkgICAgPSBIV19VQVJUX1BBUklUWV9OT05FLAorICAgICAgICAudXNlX2RtYSAgID0gMCwKKyAgICAgICAgLnVzZV9maWZvICA9IDEsCisgICAgICAgIC5yeF9kbWFfY2hhbm5lbCA9IEhXX0RNQV9DSEFOTkVMXzAsCisgICAgICAgIC50eF9kbWFfY2hhbm5lbCA9IEhXX0RNQV9DSEFOTkVMXzEsCisgICAgfTsKKworICAgIGh3X3VhcnRfaW5pdChDT05GSUdfUkVUQVJHRVRfVUFSVCwgJnVhcnRfaW5pdCk7CisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl8zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfVUFSVF9UWCk7CisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVF8yLCBIV19HUElPX1BJTl8zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfVUFSVF9SWCk7CisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl81LCBIV19HUElPX01PREVfT1VUUFVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkNfR1BJTyk7CisgICAgVWFydEJ1ZmZDbGVhcigpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFVhcnREaXNhYmxlKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBjbG9zZShzSW5GZCk7CisgICAgY2xvc2Uoc091dEZkKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworCit2b2lkIGRhMTUwMDBVYXJ0UHJvY2Vzcyh2b2lkKQoreworICAgIHVpbnQ4X3QgYUJ1ZjsKKworICAgIC8vIFdhaXQgdW50aWwgcmVjZWl2ZWQgZGF0YSBhcmUgYXZhaWxhYmxlCisgICAgaWYgKGh3X3VhcnRfcmVhZF9idWZfZW1wdHkoSFdfVUFSVDEpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlYWQgZWxlbWVudCBmcm9tIHRoZSByZWNlaXZlIEZJRk8KKyAgICBhQnVmID0gVUJBKEhXX1VBUlQxKS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHOworICAgIG90UGxhdFVhcnRSZWNlaXZlZCgmYUJ1ZiwgMSk7Cit9CisKKwordm9pZCBVYXJ0QnVmZkNsZWFyKHZvaWQpCit7CisKKyAgICB2b2xhdGlsZSB1aW50OF90IGFCdWY7CisKKyAgICB3aGlsZSAoaHdfdWFydF9yZWFkX2J1Zl9lbXB0eShIV19VQVJUMSkgPT0gMCkKKyAgICB7CisgICAgICAgIGFCdWYgKz0gVUJBKEhXX1VBUlQxKS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHOworICAgIH0KKworCit9CisKKworb3RFcnJvciBvdFBsYXRVYXJ0U2VuZChjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGh3X3VhcnRfd3JpdGVfYnVmZmVyKEhXX1VBUlQxLCBhQnVmLCBhQnVmTGVuZ3RoKTsKKworICAgIG90UGxhdFVhcnRTZW5kRG9uZSgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworCisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3ZlY3Rvci5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvdmVjdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlZGNjZQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3ZlY3Rvci5jCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyogQGZpbGUgICAgIGNwdS9kaWFsb2cvZGExNTAwMC9ib290L3ZlY3Rvci5jCisqIENwdUlycV9kYTE1eCAtLSBJUlEgZHJpdmVyIGZvciBBUk0gQ29ydGV4LU0gc2VyaWVzIGNvcmVzLgorKgorKi8KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdwZWRhbnRpYyIKKyNwcmFnbWEgbG9jYXRpb249Ii5pc3JfdmVjdG9yIgorCisjZGVmaW5lIF9fV0VBSyAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHdlYWspKQorI2RlZmluZSBfX1VTRUQgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSkKKyNkZWZpbmUgX19CT09UX1ZFQ1RPUiAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5pc3JfdmVjdG9yIikpKQorI2RlZmluZSBfX0JPT1RfU1RBQ0sgICAgICAgICAgICAgICAmX19zdGFja19zdGFydF9fCisjZGVmaW5lIF9fQk9PVF9TVEFSVFVQICAgICAgICAgICAgIF9fZ2NjX3Byb2dyYW1fc3RhcnQKKwordHlwZWRlZiB2b2lkICgqaXJxX2hhbmRsZXJfdCkodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IF9fc3RhY2tfc3RhcnRfX1tdOworZXh0ZXJuIHZvaWQgICAgICAgICBfX2djY19wcm9ncmFtX3N0YXJ0KHZvaWQpOworCisvLy8gRGVjbGFyYXRpb24gb2YgZGVmYXVsdCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCitzdGF0aWMgdm9pZCBoYWx0X2lzcih2b2lkKQoreworICAgIF9fYXNtKCJCS1BUIDI1NSIpOworCisgICAgd2hpbGUgKDEpOworfQorc3RhdGljIHZvaWQgZGVmYXVsdF9pc3Iodm9pZCkKK3sKKyAgICB3aGlsZSAoMSk7Cit9CisKKy8qIFRoZSBrZXJuZWwgaW50ZXJydXB0cyAtIGluIHRoZWlyIENNU0lTIGZvcm0uCisgICBUaGVzZSBtdXN0IGJlIGltcGxlbWVudGVkIGxvY2FsbHksIG9yIGNvbXBpbGVyIHdpbGwKKyAgIGdpdmUgY29uZmxpY3RpbmcgZGVmaW5pdGlvbiBmb3IgX192ZWN0b3JfdGFibGUuCisgKi8KK19fV0VBSyB2b2lkIE5NSV9IYW5kbGVyKCkgICAgICAgICAgICB7IH0KK19fV0VBSyB2b2lkIEhhcmRGYXVsdF9IYW5kbGVyKCkKK3sKKyAgICBoYWx0X2lzcigpOworfQorX19XRUFLIHZvaWQgU1ZDX0hhbmRsZXIoKQoreworICAgIGhhbHRfaXNyKCk7Cit9CitfX1dFQUsgdm9pZCBQZW5kU1ZfSGFuZGxlcigpCit7CisgICAgaGFsdF9pc3IoKTsKK30KK19fV0VBSyB2b2lkIFN5c1RpY2tfSGFuZGxlcigpCit7CisgICAgaGFsdF9pc3IoKTsKK30KKworX19XRUFLIHZvaWQgTWVtTWFuYWdlX0hhbmRsZXIoKQoreworICAgIGhhbHRfaXNyKCk7Cit9CitfX1dFQUsgdm9pZCBEZWJ1Z01vbl9IYW5kbGVyKCkKK3sKKyAgICBoYWx0X2lzcigpOworfQorX19XRUFLIHZvaWQgQnVzRmF1bHRfSGFuZGxlcigpCit7CisgICAgaGFsdF9pc3IoKTsKK30KKworLyogRGVmYXVsdCBoYW5kbGVycyBmb3Igb3RoZXIgREExNVggcGVyaXBoZXJhbCBpbnRlcnJ1cHRzLiAqLworX19XRUFLIHZvaWQgREVCVUdfSVJRSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsKK30KKworCitfX1dFQUsgdm9pZCBCTEVfV0FLRVVQX0xQX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qICAwICovCit9CitfX1dFQUsgdm9pZCBCTEVfR0VOX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qICAxICovCit9CitfX1dFQUsgdm9pZCBGVERGX1dBS0VVUF9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAgMiAqLworfQorX19XRUFLIHZvaWQgRlRERl9HRU5fSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogIDMgKi8KK30KK19fV0VBSyB2b2lkIFJGQ0FMX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qICA0ICovCit9CitfX1dFQUsgdm9pZCBDT0VYX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qICA1ICovCit9CitfX1dFQUsgdm9pZCBDUllQVE9fSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogIDYgKi8KK30KK19fV0VBSyB2b2lkIE1STV9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAgNyAqLworfQorX19XRUFLIHZvaWQgVUFSVF9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAgOCAqLworfQorX19XRUFLIHZvaWQgVUFSVDJfSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogIDkgKi8KK30KK19fV0VBSyB2b2lkIEkyQ19IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAxMCAqLworfQorX19XRUFLIHZvaWQgSTJDMl9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAxMSAqLworfQorX19XRUFLIHZvaWQgU1BJX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDEyICovCit9CitfX1dFQUsgdm9pZCBTUEkyX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDEzICovCit9CitfX1dFQUsgdm9pZCBBRENfSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMTQgKi8KK30KK19fV0VBSyB2b2lkIEtFWUJSRF9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAxNSAqLworfQorX19XRUFLIHZvaWQgSVJHRU5fSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMTYgKi8KK30KK19fV0VBSyB2b2lkIFdLVVBfR1BJT19IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAxNyAqLworfQorX19XRUFLIHZvaWQgU1dUSU0wX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDE4ICovCit9CitfX1dFQUsgdm9pZCBTV1RJTTFfSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMTkgKi8KK30KK19fV0VBSyB2b2lkIFFVQURFQ19IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAyMCAqLworfQorX19XRUFLIHZvaWQgVVNCX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDIxICovCit9CitfX1dFQUsgdm9pZCBQQ01fSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMjIgKi8KK30KK19fV0VBSyB2b2lkIFNSQ19JTl9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAyMyAqLworfQorX19XRUFLIHZvaWQgU1JDX09VVF9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAyNCAqLworfQorX19XRUFLIHZvaWQgVkJVU19IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAyNSAqLworfQorX19XRUFLIHZvaWQgRE1BX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDI2ICovCit9CitfX1dFQUsgdm9pZCBSRl9ESUFHX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDI3ICovCit9CitfX1dFQUsgdm9pZCBUUk5HX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDI4ICovCit9CitfX1dFQUsgdm9pZCBEQ0RDX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDI5ICovCit9CitfX1dFQUsgdm9pZCBYVEFMMTZSRFlfSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMzAgKi8KK30KK19fV0VBSyB2b2lkIFJFU0VSVkVEMzFfSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMzEgKi8KK30KKworCisKKworX19CT09UX1ZFQ1RPUiBfX1VTRUQKK2NvbnN0IGlycV9oYW5kbGVyX3QgX192ZWN0b3JfdGFibGVbXSA9Cit7CisgICAgLy8gQ29ydGV4LU0gdmVjdG9yIHRhYmxlCisgICAgKGlycV9oYW5kbGVyX3QpX19CT09UX1NUQUNLLCAgICAgICAgICAvL0lOVF9Jbml0aWFsX1N0YWNrX1BvaW50ZXIgICAgPSAwLCAgLy8gSW5pdGlhbCBTdGFjayBQb2ludGVyCisgICAgKGlycV9oYW5kbGVyX3QpX19CT09UX1NUQVJUVVAsICAgICAgICAvL0lOVF9Jbml0aWFsX1Byb2dyYW1fQ291bnRlciAgPSAxLCAgLy8gSW5pdGlhbCBQcm9ncmFtIENvdW50ZXIKKyAgICBOTUlfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSU5UX05NSSAgICAgICAgICAgICAgICAgICAgICA9IDIsICAvLyBOb24tbWFza2FibGUgSW50ZXJydXB0IChOTUkpCisgICAgSGFyZEZhdWx0X0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAvL0lOVF9IYXJkX0ZhdWx0ICAgICAgICAgICAgICAgPSAzLCAgLy8gSGFyZCBGYXVsdAorICAgIE1lbU1hbmFnZV9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgLy9JTlRfTWVtX01hbmFnZV9GYXVsdCAgICAgICAgID0gNCwgIC8vIE1lbU1hbmFnZSBGYXVsdAorICAgIEJ1c0ZhdWx0X0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy9JTlRfQnVzX0ZhdWx0ICAgICAgICAgICAgICAgID0gNSwgIC8vIEJ1cyBGYXVsdAorICAgIGRlZmF1bHRfaXNyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JTlRfVXNhZ2VfRmF1bHQgICAgICAgICAgICAgID0gNiwgIC8vIFVzYWdlIEZhdWx0CisgICAgZGVmYXVsdF9pc3IsICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lOVF9SZXNlcnZlZDcgICAgICAgICAgICAgICAgPSA3LCAgLy8gUmVzZXJ2ZWQgaW50ZXJydXB0IDcKKyAgICBkZWZhdWx0X2lzciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSU5UX1Jlc2VydmVkOCAgICAgICAgICAgICAgICA9IDgsICAvLyBSZXNlcnZlZCBpbnRlcnJ1cHQgOAorICAgIGRlZmF1bHRfaXNyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JTlRfUmVzZXJ2ZWQ5ICAgICAgICAgICAgICAgID0gOSwgIC8vIFJlc2VydmVkIGludGVycnVwdCA5CisgICAgZGVmYXVsdF9pc3IsICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lOVF9SZXNlcnZlZDEwICAgICAgICAgICAgICAgPSAxMCwgLy8gUmVzZXJ2ZWQgaW50ZXJydXB0IDEwCisgICAgU1ZDX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lOVF9TVkNhbGwgICAgICAgICAgICAgICAgICAgPSAxMSwgLy8gU3VwZXJ2aXNvciBjYWxsIChTVkNhbGwpCisgICAgRGVidWdNb25fSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvL0lOVF9EZWJ1Z01vbml0b3IgICAgICAgICAgICAgPSAxMiwgLy8gRGVidWcgTW9uaXRvcgorICAgIGRlZmF1bHRfaXNyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JTlRfUmVzZXJ2ZWQxMyAgICAgICAgICAgICAgID0gMTMsIC8vIFJlc2VydmVkIGludGVycnVwdCAxMworICAgIFBlbmRTVl9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy9JTlRfUGVuZGFibGVTcnZSZXEgICAgICAgICAgID0gMTQsIC8vIFBlbmRhYmxlIHJlcXVlc3QgZm9yIHN5c3RlbSBzZXJ2aWNlIChQZW5kYWJsZVNydlJlcSkKKyAgICBTeXNUaWNrX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vSU5UX1N5c1RpY2sgICAgICAgICAgICAgICAgICA9IDE1LCAvLyBTeXNUaWNrIEludGVycnVwdAorCisgICAgLy8gRGlhbG9nIERBMTUwMDAgdmVjdG9yIHRhYmxlCisgICAgQkxFX1dBS0VVUF9MUF9IYW5kbGVyLCAgICAgICAgICAgICAgICAvL0JMRV9XQUtFVVBfTFBfSVJRbiAgICAgICAgICAgPSAgIDAsIC8vIFdha2V1cCBmcm9tIFNsZWVwIGJ5IEJMRSBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBCTEVfR0VOX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vQkxFX0dFTl9JUlFuICAgICAgICAgICAgICAgICA9ICAgMSwgLy8gQkxFIEludGVycnVwdCByZXF1ZXN0LiBTb3VyY2VzOgorICAgIEZUREZfV0FLRVVQX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgLy9GVERGX1dBS0VVUF9JUlFuICAgICAgICAgICAgID0gICAyLCAvLyBXYWtldXAgZnJvbSBTbGVlcCBieSBGVERGIEludGVycnVwdCByZXF1ZXN0LgorICAgIEZUREZfR0VOX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy9GVERGX0dFTl9JUlFuICAgICAgICAgICAgICAgID0gICAzLCAvLyBGVERGIEludGVycnVwdCByZXF1ZXN0LiBTb3VyY2VzOgorICAgIFJGQ0FMX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgLy9SRkNBTF9JUlFuICAgICAgICAgICAgICAgICAgID0gICA0LCAvLyBSRiBDYWxpYnJhdGlvbiBJbnRlcnJ1cHQgcmVxdWVzdC4gR2VuZXJhdGVkIGJ5IHRoZSBEUEhZLgorICAgIENPRVhfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy9DT0VYX0lSUW4gICAgICAgICAgICAgICAgICAgID0gICA1LCAvLyBDb2V4IEludGVycnVwdCByZXF1ZXN0LgorICAgIENSWVBUT19IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy9DUllQVE9fSVJRbiAgICAgICAgICAgICAgICAgID0gICA2LCAvLyBDcnlwdG8gSW50ZXJydXB0IHJlcXVlc3QuIFNvdXJjZXM6CisgICAgTVJNX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvL01STV9JUlFuICAgICAgICAgICAgICAgICAgICAgPSAgIDcsIC8vIENhY2hlIE1pc3MgUmF0ZSBNb25pdG9yIEludGVycnVwdCByZXF1ZXN0LgorICAgIFVBUlRfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy9VQVJUX0lSUW4gICAgICAgICAgICAgICAgICAgID0gICA4LCAvLyBVQVJUIEludGVycnVwdCByZXF1ZXN0LgorICAgIFVBUlQyX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgLy9VQVJUMl9JUlFuICAgICAgICAgICAgICAgICAgID0gICA5LCAvLyBVQVJUMiBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBJMkNfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSTJDX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAxMCwgLy8gSTJDIEludGVycnVwdCByZXF1ZXN0LgorICAgIEkyQzJfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy9JMkMyX0lSUW4gICAgICAgICAgICAgICAgICAgID0gIDExLCAvLyBJMkMyIEludGVycnVwdCByZXF1ZXN0LgorICAgIFNQSV9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TUElfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDEyLCAvLyBTUEkgSW50ZXJydXB0IHJlcXVlc3QuCisgICAgU1BJMl9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvL1NQSTJfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAgMTMsIC8vIFNQSTIgSW50ZXJydXB0IHJlcXVlc3QuCisgICAgQURDX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvL0FEQ19JUlFuICAgICAgICAgICAgICAgICAgICAgPSAgMTQsIC8vIEFuYWxvZy1EaWdpdGFsIENvbnZlcnRlciBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBLRVlCUkRfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8vS0VZQlJEX0lSUW4gICAgICAgICAgICAgICAgICA9ICAxNSwgLy8gS2V5Ym9hcmQgc2Nhbm5lciBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBJUkdFTl9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgIC8vSVJHRU5fSVJRbiAgICAgICAgICAgICAgICAgICA9ICAxNiwgLy8gSW5mcmFSZWQgR2VuZXJhdG9yIEludGVycnVwdCByZXF1ZXN0LgorICAgIFdLVVBfR1BJT19IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgLy9XS1VQX0dQSU9fSVJRbiAgICAgICAgICAgICAgID0gIDE3LCAvLyBXYWtldXAgd2l0aC93aXRob3V0IGRlYm91bmNpbmcgSW50ZXJydXB0IHJlcXVlc3QgKHdoZW4gc3lzdGVtCisgICAgU1dUSU0wX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvL1NXVElNMF9JUlFuICAgICAgICAgICAgICAgICAgPSAgMTgsIC8vIFNXIFRpbWVyIEludGVycnVwdCByZXF1ZXN0IChUaW1lcjApLgorICAgIFNXVElNMV9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy9TV1RJTTFfSVJRbiAgICAgICAgICAgICAgICAgID0gIDE5LCAvLyBTVyBUaW1lciBJbnRlcnJ1cHQgcmVxdWVzdCAoVGltZXIxKS4KKyAgICBRVUFERUNfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8vUVVBREVDX0lSUW4gICAgICAgICAgICAgICAgICA9ICAyMCwgLy8gUXVhZHJhdHVyZSBEZWNvZGVyIEludGVycnVwdCByZXF1ZXN0LgorICAgIFVTQl9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9VU0JfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDIxLCAvLyBVU0IgZGV2aWNlIEZTIEludGVycnVwdCByZXF1ZXN0LgorICAgIFBDTV9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9QQ01fSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDIyLCAvLyBQQ00gSW50ZXJydXB0IHJlcXVlc3QuCisgICAgU1JDX0lOX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvL1NSQ19JTl9JUlFuICAgICAgICAgICAgICAgICAgPSAgMjMsIC8vIFNhbXBsZSBSYXRlIENvbnZlcnRlciBJbnB1dCBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBTUkNfT1VUX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vU1JDX09VVF9JUlFuICAgICAgICAgICAgICAgICA9ICAyNCwgLy8gU2FtcGxlIFJhdGUgQ29udmVydGVyIE91dHB1dCBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBWQlVTX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8vVkJVU19JUlFuICAgICAgICAgICAgICAgICAgICA9ICAyNSwgLy8gVkJVUyBwcmVzZW5jZSBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBETUFfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRE1BX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAyNiwgLy8gRE1BIEludGVycnVwdCByZXF1ZXN0LgorICAgIFJGX0RJQUdfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy9SRl9ESUFHX0lSUW4gICAgICAgICAgICAgICAgID0gIDI3LCAvLyBCYXNlYmFuZCBvciBSYWRpbyBEaWFnbm9zdGljcyBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBUUk5HX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8vVFJOR19JUlFuICAgICAgICAgICAgICAgICAgICA9ICAyOCwgLy8gVHJ1ZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24gSW50ZXJydXB0IHJlcXVlc3QuCisgICAgRENEQ19IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvL0RDRENfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAgMjksIC8vIERDREMgSW50ZXJydXB0IHJlcXVlc3QuIEdlbmVyYXRlZCB1cG9uIHRpbWUgb3V0IHRocmVzaG9sZCByZWFjaC4KKyAgICBYVEFMMTZSRFlfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgIC8vWFRBTDE2UkRZX0lSUW4gICAgICAgICAgICAgICA9ICAzMCwgLy8gSW5kaWNhdGVzIHRoYXQgWFRBTDE2IG9zY2lsbGF0b3IgaXMgdHJpbW1lZCBhbmQgc2V0dGxlZCBhbmQgY2FuCisgICAgREVCVUdfSVJRSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvL1JFU0VSVkVEMzFfSVJRbiAgICAgICAgICAgICAgPSAgMzEsIC8vIFJFU0VSVkVEMzEgSW50ZXJydXB0IHJlcXVlc3QuCit9OworCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4NDA3MQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDEyMyBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitsaWJfTElCUkFSSUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBsaWJvcGVudGhyZWFkLWVmcjMyLmEKKworIyBEbyBub3QgZW5hYmxlIC1XY29udmVyc2lvbiBmb3IgcmFpbAorb3ZlcnJpZGUgQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1XY29udmVyc2lvbiwkKENGTEFHUykpCitvdmVycmlkZSBDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSAkKGZpbHRlci1vdXQgLVdjb252ZXJzaW9uLCQoQ1hYRkxBR1MpKQorCisjIERvIG5vdCBlbmFibGUgLXBlZGFudGljLWVycm9ycyBmb3IgcmFpbAorb3ZlcnJpZGUgQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1wZWRhbnRpYy1lcnJvcnMsJChDRkxBR1MpKQorb3ZlcnJpZGUgQ1hYRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1wZWRhbnRpYy1lcnJvcnMsJChDWFhGTEFHUykpCisKK0VGUjMyTUdfU0RLX1NSQ0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xCisKK2xpYm9wZW50aHJlYWRfZWZyMzJfYV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIC1ERUZSMzJNRzEyUDQzMkYxMDI0R0wxMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLURfX1NUQVJUPW1haW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtRF9fU1RBUlRVUF9DTEVBUl9CU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjL2NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJChFRlIzMk1HX1NES19TUkNESVIpL3BsYXRmb3JtL3JhZGlvL3JhaWxfbGliL2NvbW1vbiAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKEVGUjMyTUdfU0RLX1NSQ0RJUikvcGxhdGZvcm0vcmFkaW8vcmFpbF9saWIvY2hpcC9lZnIzMiAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQoRUZSMzJNR19TREtfU1JDRElSKS9wbGF0Zm9ybS9yYWRpby9yYWlsX2xpYi9wcm90b2NvbC9pZWVlODAyMTU0ICAgICAgICAgXAorICAgIC1JJChFRlIzMk1HX1NES19TUkNESVIpL3BsYXRmb3JtL3JhZGlvL3JhaWxfbGliL2NoaXAvZWZyMzIvcmYvY29tbW9uL2NvcnRleCBcCisgICAgLUkkKEVGUjMyTUdfU0RLX1NSQ0RJUikvcGxhdGZvcm0vcmFkaW8vcmFpbF9saWIvaGFsL2VmcjMyICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQoRUZSMzJNR19TREtfU1JDRElSKS9oYXJkd2FyZS9raXQvY29tbW9uL2JzcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJChFRlIzMk1HX1NES19TUkNESVIpL2hhcmR3YXJlL2tpdC9FRlIzMk1HMTJfQlJENDE2MUEvY29uZmlnICAgICAgICAgICAgICBcCisgICAgLUkkKEVGUjMyTUdfU0RLX1NSQ0RJUikvcGxhdGZvcm0vQ01TSVMvSW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQoRUZSMzJNR19TREtfU1JDRElSKS9wbGF0Zm9ybS9EZXZpY2UvU2lsaWNvbkxhYnMvRUZSMzJNRzEyUC9JbmNsdWRlICAgICAgXAorICAgIC1JJChFRlIzMk1HX1NES19TUkNESVIpL3BsYXRmb3JtL2VtZHJ2L2NvbW1vbi9pbmMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKEVGUjMyTUdfU0RLX1NSQ0RJUikvcGxhdGZvcm0vZW1kcnYvdWFydGRydi9pbmMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQoRUZSMzJNR19TREtfU1JDRElSKS9wbGF0Zm9ybS9lbWRydi91c3RpbWVyL2luYyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJChFRlIzMk1HX1NES19TUkNESVIpL3BsYXRmb3JtL2VtZHJ2L2RtYWRydi9pbmMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKEVGUjMyTUdfU0RLX1NSQ0RJUikvcGxhdGZvcm0vZW1kcnYvcnRjZHJ2L2luYyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQoRUZSMzJNR19TREtfU1JDRElSKS9wbGF0Zm9ybS9lbWxpYi9pbmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitQTEFURk9STV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBhbGFybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9nZ2luZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtaXNjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByYW5kb20uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXJ0dXAtZ2NjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdWFydC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKK1BMQVRGT1JNX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIGRpYWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworbm9kaXN0X2xpYm9wZW50aHJlYWRfZWZyMzJfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvaGFyZHdhcmUva2l0L2NvbW1vbi9ic3AvYnNwX2JjYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL2hhcmR3YXJlL2tpdC9jb21tb24vYnNwL2JzcF9zdGsuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9EZXZpY2UvU2lsaWNvbkxhYnMvRUZSMzJNRzEyUC9Tb3VyY2Uvc3lzdGVtX2VmcjMybWcxMnAuYyAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vRGV2aWNlL1NpbGljb25MYWJzL0VGUjMyTUcxMlAvU291cmNlL0dDQy9zdGFydHVwX2VmcjMybWcxMnAuYyBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtZHJ2L3J0Y2Rydi9zcmMvcnRjZHJpdmVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9lbWRydi91c3RpbWVyL3NyYy91c3RpbWVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vZW1saWIvc3JjL2VtX2FkYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtbGliL3NyYy9lbV9jbXUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9lbWxpYi9zcmMvZW1fY29yZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vZW1saWIvc3JjL2VtX2VtdS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtbGliL3NyYy9lbV9ncGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9lbWxpYi9zcmMvZW1fcm11LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vZW1saWIvc3JjL2VtX3J0Y2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtbGliL3NyYy9lbV9zeXN0ZW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9lbWxpYi9zcmMvZW1fdGltZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vZW1saWIvc3JjL2VtX3VzYXJ0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtbGliL3NyYy9lbV9tc2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9lbWxpYi9zcmMvZW1fY3J5cHRvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK25vaW5zdF9IRUFERVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHBsYXRmb3JtLWVmcjMyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2VmcjMyX2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFBMQVRGT1JNX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUFJFVFRZX0ZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChQTEFURk9STV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0Rhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLQorbGlib3BlbnRocmVhZF9lZnIzMl9hX0xJQkFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMgJChEYXNoKXR5cGUgZiAkKERhc2gpbmFtZSAiKi5vIikKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvUkVBRE1FLm1kIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y4NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL1JFQURNRS5tZApAQCAtMCwwICsxLDE4OSBAQAorIyBPcGVuVGhyZWFkIG9uIEVGUjMyIEV4YW1wbGUKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciB0aGUgW1NpbGljb24gTGFicyBFRlIzMl1bZWZyMzJtZ10KK2Jhc2VkIG9uIFtFRlIzMuKEoiBNaWdodHkgR2Vja28gV2lyZWxlc3MgU3RhcnRlciBLaXRdW1NMV1NUSzYwMDBCXS4KKworW2VmcjMybWddOiBodHRwOi8vd3d3LnNpbGFicy5jb20vcHJvZHVjdHMvd2lyZWxlc3MvbWVzaC1uZXR3b3JraW5nL2VmcjMybWctbWlnaHR5LWdlY2tvLXppZ2JlZS10aHJlYWQtc29jCitbU0xXU1RLNjAwMEJdOiBodHRwOi8vd3d3LnNpbGFicy5jb20vcHJvZHVjdHMvZGV2ZWxvcG1lbnQtdG9vbHMvd2lyZWxlc3MvbWVzaC1uZXR3b3JraW5nL21pZ2h0eS1nZWNrby1zdGFydGVyLWtpdAorCitUaGUgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGFyZSBpbnRlbmRlZCB0byBwcmVzZW50IHRoZSBtaW5pbWFsIGNvZGUKK25lY2Vzc2FyeSB0byBzdXBwb3J0IE9wZW5UaHJlYWQuIFtFRlIzMk1HMTJQIFNvQ11bZWZyMzJtZzEycF0KK2hhcyByaWNoIG1lbW9yeSBhbmQgcGVyaXBoZXJhbCByZXNvdXJjZXMgd2hpY2ggY2FuIHN1cHBvcnQgYWxsIE9wZW5UaHJlYWQKK2NhcGFiaWxpdGllcy4gU2VlIHRoZSAiUnVuIHRoZSBleGFtcGxlIHdpdGggRUZSMzIgYm9hcmRzIiBzZWN0aW9uIGJlbG93Citmb3IgYW4gZXhhbXBsZSB1c2luZyBiYXNpYyBPcGVuVGhyZWFkIGNhcGFiaWxpdGllcy4KKworW2VmcjMybWcxMnBdOiBodHRwOi8vd3d3LnNpbGFicy5jb20vcHJvZHVjdHMvd2lyZWxlc3MvbWVzaC1uZXR3b3JraW5nL2VmcjMybWctbWlnaHR5LWdlY2tvLXppZ2JlZS10aHJlYWQtc29jL2RldmljZS5FRlIzMk1HMTJQNDMyRjEwMjRHTDEyNQorCisjIyBUb29sY2hhaW4KKworRG93bmxvYWQgYW5kIGluc3RhbGwgdGhlIFtHTlUgdG9vbGNoYWluIGZvciBBUk0gQ29ydGV4LU1dW2dudS10b29sY2hhaW5dLgorCitbZ251LXRvb2xjaGFpbl06IGh0dHBzOi8vbGF1bmNocGFkLm5ldC9nY2MtYXJtLWVtYmVkZGVkCisKKyMjIEJ1aWxkIEV4YW1wbGVzCisKKzEuIERvd25sb2FkIGFuZCBpbnN0YWxsIHRoZSBbU2ltcGxpY2l0eSBTdHVkaW9dW3NpbXBsaWNpdHlfc3R1ZGlvXS4KKworW3NpbXBsaWNpdHlfc3R1ZGlvXTogaHR0cDovL3d3dy5zaWxhYnMuY29tL3Byb2R1Y3RzL2RldmVsb3BtZW50LXRvb2xzL3NvZnR3YXJlL3NpbXBsaWNpdHktc3R1ZGlvCisKKzIuIEluc3RhbGwgRmxleCAoR2Vja28pIFNESyBpbmNsdWRpbmcgUkFJTCBMaWJyYXJ5IGZyb20gU2ltcGxpY2l0eSBTdHVkaW8uCisgICAtIENvbm5lY3QgRUZSMzJNRzEyUCBXaXJlbGVzcyBTdGFydGVyIEtpdCB0byBTaW1wbGljaXR5IFN0dWRpby4KKyAgIC0gRmluZCB0aGUgbGF0ZXN0IEZsZXggU0RLIGluIHRoZSBTb2Z0d2FyZSBVcGRhdGUgcGFnZSBhbmQgY2xpY2sgSW5zdGFsbC4KKyAgIC0gRmxleCBTREsgd2lsbCBiZSBpbnN0YWxsZWQgaW4gdGhlIHBhdGg6IGAvU2ltcGxpY2l0eVN0dWRpb192NC9kZXZlbG9wZXIvc2Rrcy9nZWNrb19zZGtfc3VpdGVgLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZywgYnVpbGRpbmcsIGFuZCBpbnN0YWxsaW5nIGFwcGxpY2F0aW9ucyBmb3IgdGhlIFdpcmVsZXNzIEdlY2tvIChFRlIzMikKK3BvcnRmb2xpbyB1c2luZyBSQUlMLCBzZWUgW0dldHRpbmcgU3RhcnRlZCB3aXRoIFJBSUwgTGlicmFyeSBxdWljayBzdGFydCBndWlkZV1bUVNHMTIxXS4gRm9yIG1vcmUgaW5mb3JtYXRpb24KK29uIFJBSUwsIHNlZSBbUmFkaW8gQWJzdHJhY3Rpb24gSW50ZXJmYWNlIExheWVyXVtyYWlsXS4KKworW1FTRzEyMV06IGh0dHA6Ly93d3cuc2lsYWJzLmNvbS9kb2N1bWVudHMvcHVibGljL3F1aWNrLXN0YXJ0LWd1aWRlcy9RU0cxMjEtRUZSMzItUkFJTC5wZGYKK1tyYWlsXTogaHR0cDovL3d3dy5zaWxhYnMuY29tL3Byb2R1Y3RzL2RldmVsb3BtZW50LXRvb2xzL3NvZnR3YXJlL3JhZGlvLWFic3RyYWN0aW9uLWludGVyZmFjZS1sYXllci1zZGsKKworMy4gQ29uZmlndXJlIHRoZSBwYXRoIHRvIEZsZXggU0RLIHNvdXJjZSBjb2RlLgorYGBgYmFzaAorJCBjZCA8cGF0aC10by1vcGVudGhyZWFkPi90aGlyZF9wYXJ0eQorJCBta2RpciBzaWxhYnMKKyQgY2QgPHBhdGgtdG8tU2ltcGxpY2l0eS1TdHVkaW8+L2RldmVsb3Blci9zZGtzCiskIGNwIC1yZiBnZWNrb19zZGtfc3VpdGUgPHBhdGgtdG8tb3BlbnRocmVhZD4vdGhpcmRfcGFydHkvc2lsYWJzLworYGBgCisKKzQuIEJ1aWxkIE9wZW5UaHJlYWQgRmlybXdhcmUgKENMSSBleGFtcGxlKSBvbiBFRlIzMiBwbGF0Zm9ybS4KK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4KKyQgLi9ib290c3RyYXAKKyQgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1lZnIzMgorYGBgCisKK0FmdGVyIGEgc3VjY2Vzc2Z1bCBidWlsZCwgdGhlIGBlbGZgIGZpbGVzIGFyZSBmb3VuZCBpbgorYDxwYXRoLXRvLW9wZW50aHJlYWQ+L291dHB1dC9lZnIzMi9iaW5gLgorCisjIyBGbGFzaCBCaW5hcmllcworCitDb21waWxlZCBiaW5hcmllcyBtYXkgYmUgZmxhc2hlZCBvbnRvIHRoZSBFRlIzMiB1c2luZyBbSkxpbmtHREJTZXJ2ZXJdW2psaW5rZ2Ric2VydmVyXS4KK0VGUjMyIFN0YXJ0ZXIga2l0IG1haW5ib2FyZCBpbnRlZ3JhdGVzIGFuIG9uLWJvYXJkIFNFR0dFUiBKLUxpbmsgZGVidWdnZXIuCisKK1tqbGlua2dkYnNlcnZlcl06IGh0dHBzOi8vd3d3LnNlZ2dlci5jb20vamxpbmstZ2RiLXNlcnZlci5odG1sCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tSkxpbmtHREJTZXJ2ZXI+CiskIHN1ZG8gLi9KTGlua0dEQlNlcnZlciAtaWYgc3dkIC1kZXZpY2UgRUZSMzJNRzEyUHh4eEYxMDI0CiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+L291dHB1dC9lZnIzMi9iaW4KKyQgYXJtLW5vbmUtZWFiaS1nZGIgb3QtY2xpLWZ0ZAorJCAoZ2RiKSB0YXJnZXQgcmVtb3RlIDEyNy4wLjAuMToyMzMxCiskIChnZGIpIGxvYWQKKyQgKGdkYikgbW9uaXRvciByZXNldAorJCAoZ2RiKSBjCitgYGAKKworTm90ZTogU3VwcG9ydCBmb3IgdGhlICJFRlIzMk1HMTJQeHh4RjEwMjQiIGRldmljZSB3YXMgYWRkZWQgdG8gSkxpbmtHREJTZXJ2ZXIgVjYuMTRkLgorCisjIyBSdW4gdGhlIGV4YW1wbGUgd2l0aCBFRlIzMiBib2FyZHMKKzEuIEZsYXNoIHR3byBFRlIzMiBib2FyZHMgd2l0aCB0aGUgYENMSSBleGFtcGxlYCBmaXJtd2FyZSAoYXMgc2hvd24gYWJvdmUpLgorMi4gT3BlbiB0ZXJtaW5hbCB0byBmaXJzdCBkZXZpY2UgYC9kZXYvdHR5QUNNMGAgKHNlcmlhbCBwb3J0IHNldHRpbmdzOiAxMTUyMDAgOC1OLTEpLgorICAgVHlwZSBgaGVscGAgZm9yIGEgbGlzdCBvZiBjb21tYW5kcy4KKworYGBgYmFzaAorPiBoZWxwCitoZWxwCitjaGFubmVsCitjaGlsZHRpbWVvdXQKK2NvbnRleHRyZXVzZWRlbGF5CitleHRhZGRyCitleHRwYW5pZAoraXBhZGRyCitrZXlzZXF1ZW5jZQorbGVhZGVyd2VpZ2h0CittYXN0ZXJrZXkKK21vZGUKK25ldGRhdGFyZWdpc3RlcgorbmV0d29ya2lkdGltZW91dAorbmV0d29ya25hbWUKK3BhbmlkCitwaW5nCitwcmVmaXgKK3JlbGVhc2Vyb3V0ZXJpZAorcmxvYzE2Cityb3V0ZQorcm91dGVydXBncmFkZXRocmVzaG9sZAorc2Nhbgorc3RhcnQKK3N0YXRlCitzdG9wCit3aGl0ZWxpc3QKK2BgYAorCiszLiBTdGFydCBhIFRocmVhZCBuZXR3b3JrIGFzIExlYWRlci4KKworYGBgYmFzaAorPiBwYW5pZCAweGZhY2UKK0RvbmUKKz4gaWZjb25maWcgdXAKK0RvbmUKKz4gdGhyZWFkIHN0YXJ0CitEb25lCisKK3dhaXQgYSBjb3VwbGUgb2Ygc2Vjb25kcy4uLgorCis+IHN0YXRlCitsZWFkZXIKK0RvbmUKK2BgYAorCis0LiBPcGVuIHRlcm1pbmFsIHRvIHNlY29uZCBkZXZpY2UgYC9kZXYvdHR5QUNNMWAgKHNlcmlhbCBwb3J0IHNldHRpbmdzOiAxMTUyMDAgOC1OLTEpCisgICBhbmQgYXR0YWNoIGl0IHRvIHRoZSBUaHJlYWQgbmV0d29yayBhcyBhIFJvdXRlci4KKworYGBgYmFzaAorPiBwYW5pZCAweGZhY2UKK0RvbmUKKz4gcm91dGVyc2VsZWN0aW9uaml0dGVyIDEKK0RvbmUKKz4gaWZjb25maWcgdXAKK0RvbmUKKz4gdGhyZWFkIHN0YXJ0CitEb25lCisKK3dhaXQgYSBjb3VwbGUgb2Ygc2Vjb25kcy4uLgorCis+IHN0YXRlCityb3V0ZXIKK0RvbmUKK2BgYAorCis1LiBMaXN0IGFsbCBJUHY2IGFkZHJlc3NlcyBvZiBMZWFkZXIuCisKK2BgYGJhc2gKKz4gaXBhZGRyCitmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpmYzAwCitmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDo4MDAKK2ZkZGU6YWQwMDpiZWVmOjA6NWI6M2JjZDpkZWZmOjc3ODYKK2ZlODA6MDowOjA6NjQ0Nzo2ZTEwOmNmNzplZTI5CitEb25lCitgYGAKKworNi4gU2VuZCBhbiBJQ01QdjYgcGluZyB0byBMZWFkZXIncyBNZXNoLUVJRCBJUHY2IGFkZHJlc3MuCisKK2BgYGJhc2gKKz4gcGluZyBmZGRlOmFkMDA6YmVlZjowOjViOjNiY2Q6ZGVmZjo3Nzg2Cis4IGJ5dGVzIGZyb20gZmRkZTphZDAwOmJlZWY6MDo1YjozYmNkOmRlZmY6Nzc4NjogaWNtcF9zZXE9MSBobGltPTY0IHRpbWU9MjRtcworYGBgCisKK1RoZSBhYm92ZSBleGFtcGxlIGRlbW9uc3RyYXRlcyBiYXNpYyBPcGVuVGhyZWFkIGNhcGFiaWxpdGllcy4gRW5hYmxlIG1vcmUgZmVhdHVyZXMvcm9sZXMgKGUuZy4gY29tbWlzc2lvbmVyLAoram9pbmVyLCBESENQdjYgU2VydmVyL0NsaWVudCwgZXRjLikgYnkgYXNzaWduaW5nIGNvbXBpbGUtb3B0aW9ucyBiZWZvcmUgY29tcGlsaW5nLgorCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtZWZyMzIgQ09NTUlTU0lPTkVSPTEgSk9JTkVSPTEgREhDUDZfQ0xJRU5UPTEgREhDUDZfU0VSVkVSPTEKK2BgYAorCitGb3IgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgY29tbWFuZHMsIHZpc2l0IFtPcGVuVGhyZWFkIENMSSBSZWZlcmVuY2UgUkVBRE1FLm1kXVtDTEldLgorIAorW0NMSV06IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvYmxvYi9tYXN0ZXIvc3JjL2NsaS9SRUFETUUubWQKKworIyMgVmVyaWZpY2F0aW9uCisKK1RoZSBmb2xsb3dpbmcgdG9vbGNoYWluIGhhcyBiZWVuIHVzZWQgZm9yIHRlc3RpbmcgYW5kIHZlcmlmaWNhdGlvbjoKKyAgIC0gZ2NjIHZlcnNpb24gNC45LjMKKworVGhlIEVGUjMyIGV4YW1wbGUgaGFzIGJlZW4gdmVyaWZpZWQgd2l0aCBmb2xsb3dpbmcgRmxleCBTREsvUkFJTCBMaWJyYXJ5IHZlcnNpb246CisgICAtIEZsZXggU0RLIHZlcnNpb24gMS4xLjEuMCwgUkFJTCBMaWJyYXJ5IHZlcnNpb24gMS41LjIKKyAgIC0gRmxleCBTREsgdmVyc2lvbiAxLjIuMC4wLCBSQUlMIExpYnJhcnkgdmVyc2lvbiAxLjYuMApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvYWxhcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDA2YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2FsYXJtLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBhbGFybS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworI2luY2x1ZGUgInJhaWwuaCIKKworc3RhdGljIHVpbnQzMl90IHNUaW1lckhpID0gMDsKK3N0YXRpYyB1aW50MzJfdCBzVGltZXJMbyA9IDA7CitzdGF0aWMgdWludDMyX3Qgc0FsYXJtVDAgPSAwOworc3RhdGljIHVpbnQzMl90IHNBbGFybUR0ID0gMDsKK3N0YXRpYyBib29sIHNJc1J1bm5pbmcgICA9IGZhbHNlOworCit2b2lkIGVmcjMyQWxhcm1Jbml0KHZvaWQpCit7Cit9CisKK3VpbnQzMl90IG90UGxhdEFsYXJtR2V0Tm93KHZvaWQpCit7CisgICAgdWludDMyX3QgdGltZXJfbG87CisKKyAgICB0aW1lcl9sbyA9IFJBSUxfR2V0VGltZSgpOworCisgICAgaWYgKHRpbWVyX2xvIDwgc1RpbWVyTG8pCisgICAgeworICAgICAgICBzVGltZXJIaSsrOworICAgIH0KKworICAgIHNUaW1lckxvID0gdGltZXJfbG87CisKKyAgICByZXR1cm4gKCgodWludDY0X3Qpc1RpbWVySGkgPDwgMzIpIHwgc1RpbWVyTG8pIC8gMTAwMDsKK30KKwordm9pZCBvdFBsYXRBbGFybVN0YXJ0QXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCB0MCwgdWludDMyX3QgZHQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHNBbGFybVQwID0gdDA7CisgICAgc0FsYXJtRHQgPSBkdDsKKyAgICBzSXNSdW5uaW5nID0gdHJ1ZTsKK30KKwordm9pZCBvdFBsYXRBbGFybVN0b3Aob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzSXNSdW5uaW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgZWZyMzJBbGFybVByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQzMl90IG5vdyA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgdWludDMyX3QgZXhwaXJlczsKKyAgICBib29sIGZpcmUgPSBmYWxzZTsKKworICAgIG90RVhQRUNUKHNJc1J1bm5pbmcpOworCisgICAgZXhwaXJlcyA9IHNBbGFybVQwICsgc0FsYXJtRHQ7CisKKyAgICBpZiAoc0FsYXJtVDAgPD0gbm93KQorICAgIHsKKyAgICAgICAgZmlyZSA9IChleHBpcmVzID49IHNBbGFybVQwICYmIGV4cGlyZXMgPD0gbm93KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZmlyZSA9IChleHBpcmVzID49IHNBbGFybVQwIHx8IGV4cGlyZXMgPD0gbm93KTsKKyAgICB9CisKKyAgICBpZiAoZmlyZSkKKyAgICB7CisgICAgICAgIHNJc1J1bm5pbmcgPSBmYWxzZTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworICAgICAgICBpZiAob3RQbGF0RGlhZ01vZGVHZXQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgb3RQbGF0RGlhZ0FsYXJtRmlyZWQoYUluc3RhbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgb3RQbGF0QWxhcm1GaXJlZChhSW5zdGFuY2UpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBSQUlMQ2JfVGltZXJFeHBpcmVkKHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvY3J5cHRvL2VmcjMyLW1iZWR0bHMtY29uZmlnLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvY3J5cHRvL2VmcjMyLW1iZWR0bHMtY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwOTNhMAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9jcnlwdG8vZWZyMzItbWJlZHRscy1jb25maWcuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZm5kZWYgRUZSMzJfTUJFRFRMU19DT05GSUdfSAorI2RlZmluZSBFRlIzMl9NQkVEVExTX0NPTkZJR19ICisKKyNpbmNsdWRlICJlbV9kZXZpY2UuaCIKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTX0FMVAorICoKKyAqIEVuYWJsZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZm9yIHRoZSBBRVMgYmxvY2sgY2lwaGVyCisgKgorICogTW9kdWxlOiAgc2xfY3J5cHRvL3NyYy9zbF9hZXMuYworICogICAgICAgICAgb3IKKyAqICAgICAgICAgIHNsX2NyeXB0by9zcmMvc2xjbF9hZXMuYyBpZiBNQkVEVExTX1NMQ0xfUExVR0lOUyBpcyBkZWZpbmVkLgorICoKKyAqIFNlZSBNQkVEVExTX0FFU19DIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCisjZGVmaW5lIE1CRURUTFNfQUVTX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ1BfREVWSUNFX0FMVAorICogXGRlZiBNQkVEVExTX0VDUF9ERVZJQ0VfQUxUCisgKiBcZGVmIE1CRURUTFNfRUNQX0RPVUJMRV9KQUNfQUxUCisgKiBcZGVmIE1CRURUTFNfRUNQX0RFVklDRV9BRERfTUlYRURfQUxUCisgKiBcZGVmIE1CRURUTFNfRUNQX05PUk1BTElaRV9KQUNfQUxUCisgKiBcZGVmIE1CRURUTFNfRUNQX05PUk1BTElaRV9KQUNfTUFOWV9BTFQKKyAqIFxkZWYgTUJFRFRMU19NUElfTU9EVUxBUl9ESVZJU0lPTl9BTFQKKyAqCisgKiBFbmFibGUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciB0aGUgZWxsaXB0aWMgY3VydmUgb3ZlciBHRihwKSBsaWJyYXJ5LgorICoKKyAqIE1vZHVsZTogIHNsX2NyeXB0by9zcmMvc2xfZWNwLmMKKyAqICAgICAgICAgIG9yCisgKiAgICAgICAgICBzbF9jcnlwdG8vc3JjL3NsY2xfZWNwLmMgaWYgTUJFRFRMU19TTENMX1BMVUdJTlMgaXMgZGVmaW5lZC4KKyAqIENhbGxlcjogIGxpYnJhcnkvZWNwLmMKKyAqICAgICAgICAgIGxpYnJhcnkvZWNkaC5jCisgKiAgICAgICAgICBsaWJyYXJ5L2VjZHNhLmMKKyAqICAgICAgICAgIGxpYnJhcnkvZWNqcGFrZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQklHTlVNX0MsIE1CRURUTFNfRUNQX0MgYW5kIGF0IGxlYXN0IG9uZQorICogTUJFRFRMU19FQ1BfRFBfWFhYX0VOQUJMRUQgYW5kIChDUllQVE9fQ09VTlQgPiAwKQorICovCisjaWYgZGVmaW5lZChDUllQVE9fQ09VTlQpICYmIChDUllQVE9fQ09VTlQgPiAwKQorI2RlZmluZSBNQkVEVExTX0VDUF9ERVZJQ0VfQUxUCisjZGVmaW5lIE1CRURUTFNfRUNQX0RPVUJMRV9KQUNfQUxUCisjZGVmaW5lIE1CRURUTFNfRUNQX0RFVklDRV9BRERfTUlYRURfQUxUCisjZGVmaW5lIE1CRURUTFNfRUNQX05PUk1BTElaRV9KQUNfQUxUCisjZGVmaW5lIE1CRURUTFNfRUNQX05PUk1BTElaRV9KQUNfTUFOWV9BTFQKKyNkZWZpbmUgTUJFRFRMU19NUElfTU9EVUxBUl9ESVZJU0lPTl9BTFQKKyNlbmRpZgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TSEEyNTZfQUxUCisgKgorICogRW5hYmxlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgdGhlIFNIQS0yMjQgYW5kIFNIQS0yNTYgY3J5cHRvZ3JhcGhpYworICogaGFzaCBhbGdvcml0aG1zLgorICoKKyAqIE1vZHVsZTogIHNsX2NyeXB0by9zcmMvc2xfc2hhMjU2LmMKKyAqICAgICAgICAgIG9yCisgKiAgICAgICAgICBzbF9jcnlwdG8vc3JjL3NsY2xfc2hhMjU2LmMgaWYgTUJFRFRMU19TTENMX1BMVUdJTlMgaXMgZGVmaW5lZC4KKyAqIENhbGxlcjogIGxpYnJhcnkvZW50cm9weS5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogICAgICAgICAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NIQTI1Nl9DIGFuZCAoQ1JZUFRPX0NPVU5UID4gMCkKKyAqIFNlZSBNQkVEVExTX1NIQTI1Nl9DIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCisjaWYgZGVmaW5lZChDUllQVE9fQ09VTlQpICYmIChDUllQVE9fQ09VTlQgPiAwKQorLy8jZGVmaW5lIE1CRURUTFNfU0hBMjU2X0FMVAorI2VuZGlmCisKKyNlbmRpZiAvLyBFRlIzMl9NQkVEVExTX0NPTkZJR19ICmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvZGlhZy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2RpYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzJkYjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2RpYWcuYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgZGlhZ25vc3RpY3MuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tZWZyMzIuaCIKKworLyoqCisgKiBEaWFnbm9zdGljcyBtb2RlIHZhcmlhYmxlcy4KKyAqCisgKi8KK3N0YXRpYyBib29sIHNEaWFnTW9kZSA9IGZhbHNlOworCit2b2lkIG90UGxhdERpYWdQcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgLy8gQWRkIG1vcmUgcGxhcmZvcm0gc3BlY2lmaWMgZGlhZ25vc3RpY3MgZmVhdHVyZXMgaGVyZS4KKyAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAiZGlhZyBmZWF0dXJlICclcycgaXMgbm90IHN1cHBvcnRlZFxyXG4iLCBhcmd2WzBdKTsKKyAgICAodm9pZCkgYXJnYzsKKyAgICAodm9pZCkgYUluc3RhbmNlOworfQorCit2b2lkIG90UGxhdERpYWdNb2RlU2V0KGJvb2wgYU1vZGUpCit7CisgICAgc0RpYWdNb2RlID0gYU1vZGU7Cit9CisKK2Jvb2wgb3RQbGF0RGlhZ01vZGVHZXQoKQoreworICAgIHJldHVybiBzRGlhZ01vZGU7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ0NoYW5uZWxTZXQodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICAodm9pZCkgYUNoYW5uZWw7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ1R4UG93ZXJTZXQoaW50OF90IGFUeFBvd2VyKQoreworICAgICh2b2lkKSBhVHhQb3dlcjsKK30KKwordm9pZCBvdFBsYXREaWFnUmFkaW9SZWNlaXZlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgICh2b2lkKSBhRnJhbWU7CisgICAgKHZvaWQpIGFFcnJvcjsKK30KKwordm9pZCBvdFBsYXREaWFnQWxhcm1DYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9mbGFzaC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiZDUyMQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9mbGFzaC5jCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgbm9uLXZvbGF0aWxlIHN0b3JhZ2UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL2ZsYXNoLmgiCisKKyNpbmNsdWRlICJlbV9tc2MuaCIKKworI2RlZmluZSBGTEFTSF9EQVRBX1VTRURfUEFHRVMgICAxMAorI2RlZmluZSBGTEFTSF9EQVRBX0VORF9BRERSICAgICAoRkxBU0hfQkFTRSArIEZMQVNIX1NJWkUpCisjZGVmaW5lIEZMQVNIX0RBVEFfU1RBUlRfQUREUiAgIChGTEFTSF9EQVRBX0VORF9BRERSIC0gKEZMQVNIX1BBR0VfU0laRSAqIEZMQVNIX0RBVEFfVVNFRF9QQUdFUykpCisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbWFwQWRkcmVzcyh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICByZXR1cm4gYUFkZHJlc3MgKyBGTEFTSF9EQVRBX1NUQVJUX0FERFI7Cit9CisKK3N0YXRpYyBvdEVycm9yIHJldHVyblR5cGVDb252ZXJ0KGludDMyX3QgYVN0YXR1cykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHN3aXRjaCAoYVN0YXR1cykKKyAgICB7CisgICAgY2FzZSBtc2NSZXR1cm5PazoKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgbXNjUmV0dXJuSW52YWxpZEFkZHI6CisgICAgY2FzZSBtc2NSZXR1cm5VbmFsaWduZWQ6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfRkFJTEVEOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoSW5pdCh2b2lkKQoreworICAgIE1TQ19Jbml0KCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hHZXRTaXplKHZvaWQpCit7CisgICAgcmV0dXJuIEZMQVNIX0RBVEFfRU5EX0FERFIgLSBGTEFTSF9EQVRBX1NUQVJUX0FERFI7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaEVyYXNlUGFnZSh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICBpbnQzMl90IHN0YXR1czsKKworICAgIHN0YXR1cyA9IE1TQ19FcmFzZVBhZ2UoKHVpbnQzMl90ICopbWFwQWRkcmVzcyhhQWRkcmVzcykpOworCisgICAgcmV0dXJuIHJldHVyblR5cGVDb252ZXJ0KHN0YXR1cyk7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaFN0YXR1c1dhaXQodWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisgICAgdWludDMyX3Qgc3RhcnQgPSBvdFBsYXRBbGFybUdldE5vdygpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmIChNU0MtPlNUQVRVUyAmIE1TQ19TVEFUVVNfV0RBVEFSRUFEWSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKGFUaW1lb3V0ICYmICgob3RQbGF0QWxhcm1HZXROb3coKSAtIHN0YXJ0KSA8IGFUaW1lb3V0KSk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHVpbnQzMl90IHJ2YWwgPSBhU2l6ZTsKKyAgICBpbnQzMl90IHN0YXR1czsKKworICAgIG90RVhQRUNUX0FDVElPTihhRGF0YSwgcnZhbCA9IDApOworICAgIG90RVhQRUNUX0FDVElPTigoKGFBZGRyZXNzICsgYVNpemUpIDwgdXRpbHNGbGFzaEdldFNpemUoKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCEoYUFkZHJlc3MgJiAzKSkgJiYgKCEoYVNpemUgJiAzKSksIHJ2YWwgPSAwKTsKKworICAgIHN0YXR1cyA9IE1TQ19Xcml0ZVdvcmQoKHVpbnQzMl90ICopbWFwQWRkcmVzcyhhQWRkcmVzcyksIGFEYXRhLCBhU2l6ZSk7CisgICAgb3RFWFBFQ1RfQUNUSU9OKHJldHVyblR5cGVDb252ZXJ0KHN0YXR1cykgPT0gT1RfRVJST1JfTk9ORSwgcnZhbCA9IDApOworCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoUmVhZCh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHVpbnQzMl90IHJ2YWwgPSBhU2l6ZTsKKyAgICB1aW50MzJfdCBwQWRkcmVzcyA9IG1hcEFkZHJlc3MoYUFkZHJlc3MpOworICAgIHVpbnQ4X3QgKmJ5dGUgPSBhRGF0YTsKKworICAgIG90RVhQRUNUX0FDVElPTihhRGF0YSwgcnZhbCA9IDApOworICAgIG90RVhQRUNUX0FDVElPTigoYUFkZHJlc3MgKyBhU2l6ZSkgPCB1dGlsc0ZsYXNoR2V0U2l6ZSgpLCBydmFsID0gMCk7CisKKyAgICB3aGlsZSAoYVNpemUtLSkKKyAgICB7CisgICAgICAgICpieXRlKysgPSAoKih1aW50OF90ICopKHBBZGRyZXNzKyspKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvbG9nZ2luZy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2xvZ2dpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTk3MWVlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2xvZ2dpbmcuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBsb2dnaW5nLgorICoKKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY2xpLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmg+CisKKyNpbmNsdWRlICJ1dGlscy9jb2RlX3V0aWxzLmgiCisKK3ZvaWQgb3RQbGF0TG9nKG90TG9nTGV2ZWwgYUxvZ0xldmVsLCBvdExvZ1JlZ2lvbiBhTG9nUmVnaW9uLCBjb25zdCBjaGFyICphRm9ybWF0LCAuLi4pCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0xJX0xPR0dJTkcKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgYUZvcm1hdCk7CisgICAgb3RDbGlMb2coYUxvZ0xldmVsLCBhTG9nUmVnaW9uLCBhRm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisjZWxzZQorICAgICh2b2lkKWFMb2dMZXZlbDsKKyAgICAodm9pZClhTG9nUmVnaW9uOworICAgICh2b2lkKWFGb3JtYXQ7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ0xJX0xPR0dJTkcKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9taXNjLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZjMyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvbWlzYy5jCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBtaXNjZWxsYW5lb3VzIGJlaGF2aW9ycy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tZWZyMzIuaCIKKyNpbmNsdWRlICJlbV9ybXUuaCIKKworc3RhdGljIHVpbnQzMl90IHNSZXNldENhdXNlOworCit2b2lkIGVmcjMyTWlzY0luaXQodm9pZCkKK3sKKyAgICAvLyBSZWFkIHRoZSBjYXVzZSBvZiBsYXN0IHJlc2V0LgorICAgIHNSZXNldENhdXNlID0gUk1VX1Jlc2V0Q2F1c2VHZXQoKTsKKworICAgIC8vIENsZWFyIHRoZSByZWdpc3RlciwgYXMgdGhlIGNhdXNlcyBjdW11bGF0ZSBvdmVyIHJlc2V0cy4KKyAgICBSTVVfUmVzZXRDYXVzZUNsZWFyKCk7Cit9CisKK3ZvaWQgb3RQbGF0UmVzZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBOVklDX1N5c3RlbVJlc2V0KCk7Cit9CisKK290UGxhdFJlc2V0UmVhc29uIG90UGxhdEdldFJlc2V0UmVhc29uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgb3RQbGF0UmVzZXRSZWFzb24gcmVhc29uOworCisgICAgaWYgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX1BPUlNUKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fUE9XRVJfT047CisgICAgfQorICAgIGVsc2UgaWYgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX1NZU1JFUVJTVCkKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX1NPRlRXQVJFOworICAgIH0KKyAgICBlbHNlIGlmIChzUmVzZXRDYXVzZSAmIFJNVV9SU1RDQVVTRV9XRE9HUlNUKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fV0FUQ0hET0c7CisgICAgfQorICAgIGVsc2UgaWYgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX0VYVFJTVCkKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX0VYVEVSTkFMOworICAgIH0KKyAgICBlbHNlIGlmIChzUmVzZXRDYXVzZSAmIFJNVV9SU1RDQVVTRV9MT0NLVVBSU1QpCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9GQVVMVDsKKyAgICB9CisgICAgZWxzZSBpZiAoKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX0FWRERCT0QpIHx8CisgICAgICAgICAgICAgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX0RFQ0JPRCkgIHx8CisgICAgICAgICAgICAgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX0RWRERCT0QpIHx8CisgICAgICAgICAgICAgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX0VNNFJTVCkpCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9BU1NFUlQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX1VOS05PV047CisgICAgfQorCisgICAgcmV0dXJuIHJlYXNvbjsKK30KKwordm9pZCBvdFBsYXRXYWtlSG9zdCh2b2lkKQoreworICAgIC8vIFRPRE86IGltcGxlbWVudCBhbiBvcGVyYXRpb24gdG8gd2FrZSB0aGUgaG9zdCBmcm9tIHNsZWVwIHN0YXRlLgorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL29wZW50aHJlYWQtY29yZS1lZnIzMi1jb25maWcuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9vcGVudGhyZWFkLWNvcmUtZWZyMzItY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmY2ZlOQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9vcGVudGhyZWFkLWNvcmUtZWZyMzItY29uZmlnLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGVmcjMyIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGNvbnN0YW50cworICogICBmb3IgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9FRlIzMl9DT05GSUdfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT1JFX0VGUjMyX0NPTkZJR19IXworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVAorICoKKyAqIERlZmluZSB0byAxIHRvIGVuYWJsZSBkZWZhdWx0IGxvZyBvdXRwdXQuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQgICAgICAgICAgICAxCisKKy8qCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCisgKgorICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIHJldHJhbnNtaXNzaW9uIGxvZ2ljLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVCAgICAgICAgICAgMQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOCisgKgorICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIGVuZXJneSBzY2FubmluZyBsb2dpYy4KKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOICAgICAgICAgIDEKKworLyoqCisgKiBAZGVmIFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1MKKyAqCisgKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHNldHRpbmdzLgorICoKKyAqLworI2RlZmluZSBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKioKKyAqIEBkZWYgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRQorICoKKyAqIFRoZSBwYWdlIHNpemUgb2Ygc2V0dGluZ3MuCisgKgorICovCisjZGVmaW5lIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMAorCisvKioKKyAqIEBkZWYgU0VUVElOR1NfQ09ORklHX1BBR0VfTlVNCisgKgorICogVGhlIHBhZ2UgbnVtYmVyIG9mIHNldHRpbmdzLgorICoKKyAqLworI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvKioKKyAqIEBkZWYgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9TSE9SVF9FTlRSWV9OVU0KKyAqCisgKiBUaGUgbnVtYmVyIG9mIHNob3J0IHNvdXJjZSBhZGRyZXNzIHRhYmxlIGVudHJpZXMuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfU0hPUlRfRU5UUllfTlVNICAgICAgICAgICAgICAgICA2CisKKy8qKgorICogQGRlZiBSQURJT19DT05GSUdfU1JDX01BVENIX0VYVF9FTlRSWV9OVU0KKyAqCisgKiBUaGUgbnVtYmVyIG9mIGV4dGVuZGVkIHNvdXJjZSBhZGRyZXNzIHRhYmxlIGVudHJpZXMuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRVhUX0VOVFJZX05VTSAgICAgICAgICAgICAgICAgICA2CisKKy8qKgorICogQGRlZiBSQURJT19DT05GSUdfWFhYCisgKgorICogVGhlIFJhZGlvIGNvbmZpZ3VyYXRpb24gQXV0by1nZW5lcmF0ZWQgYnkgU2ltcGxpY2l0eSBTdHVkaW8gKHJhaWxfY29uZmlnLmgpLgorICoKKyAqLworI2RlZmluZSBSQURJT19DT05GSUdfQkFTRV9GUkVRVUVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ1MDAwMDAwMFVMCisjZGVmaW5lIFJBRElPX0NPTkZJR19YVEFMX0ZSRVFVRU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODQwMDAwMFVMCisjZGVmaW5lIFJBRElPX0NPTkZJR19CSVRSQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMi40a2JwcyIKKyNkZWZpbmUgUkFESU9fQ09ORklHX01PRFVMQVRJT05fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICJGU0syIgorI2RlZmluZSBSQURJT19DT05GSUdfREVWSUFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEuMmtIeiIKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPUkVfRUZSMzJfQ09ORklHX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvcGxhdGZvcm0tZWZyMzIuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9wbGF0Zm9ybS1lZnIzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNmQ1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvcGxhdGZvcm0tZWZyMzIuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5pdGlhbGl6ZXJzLgorICoKKyAqLworCisjaWZuZGVmIFBMQVRGT1JNX0VGUjMyX0hfCisjZGVmaW5lIFBMQVRGT1JNX0VGUjMyX0hfCisKKyNpbmNsdWRlICJlbV9kZXZpY2UuaCIKKyNpbmNsdWRlICJlbV9zeXN0ZW0uaCIKKyNpbmNsdWRlICJjb3JlX2NtNC5oIgorCisvLyBHbG9iYWwgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUKK2V4dGVybiBvdEluc3RhbmNlICpzSW5zdGFuY2U7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgYWxhcm0gc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGVmcjMyQWxhcm1Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYWxhcm0gZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICovCit2b2lkIGVmcjMyQWxhcm1Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcmFkaW8gc2VydmljZSB1c2VkIGJ5IE9wZW5UaGVhZC4KKyAqCisgKi8KK3ZvaWQgZWZyMzJSYWRpb0luaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBkZWluaXRpYWxpemVzIHRoZSByYWRpbyBzZXJ2aWNlIHVzZWQgYnkgT3BlblRoZWFkLgorICoKKyAqLwordm9pZCBlZnIzMlJhZGlvRGVpbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgcmFkaW8gZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICovCit2b2lkIGVmcjMyUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBVQVJUIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqLwordm9pZCBlZnIzMlVhcnRQcm9jZXNzKHZvaWQpOworCisvKioKKyAqIEluaXRpYWxpemF0aW9uIG9mIE1pc2MgbW9kdWxlLgorICoKKyAqLwordm9pZCBlZnIzMk1pc2NJbml0KHZvaWQpOworCisvKioKKyAqIEluaXRpYWxpemF0aW9uIG9mIEFEQyBtb2R1bGUgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICoKKyAqLwordm9pZCBlZnIzMlJhbmRvbUluaXQodm9pZCk7CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fRUZSMzJfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9wbGF0Zm9ybS5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViMzM5NwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXplcnMuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0Lmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisKKyNpbmNsdWRlICJwYS5oIgorI2luY2x1ZGUgInB0aS5oIgorI2luY2x1ZGUgImJzcC5oIgorI2luY2x1ZGUgImVtX2VtdS5oIgorI2luY2x1ZGUgImVtX2NtdS5oIgorI2luY2x1ZGUgImVtX2NoaXAuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS1lZnIzMi5oIgorI2luY2x1ZGUgInJhaWwuaCIKKyNpbmNsdWRlICJyYWlsX2llZWU4MDIxNTQuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtZWZyMzItY29uZmlnLmgiCisKK290SW5zdGFuY2UgKnNJbnN0YW5jZTsKKwordm9pZCBIQUxfSW5pdCh2b2lkKTsKKwordm9pZCBQbGF0Zm9ybUluaXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICAodm9pZClhcmdjOworICAgICh2b2lkKWFyZ3Y7CisKKyAgICBDSElQX0luaXQoKTsKKyAgICBIQUxfSW5pdCgpOworICAgIEJTUF9Jbml0KEJTUF9JTklUX0JDQyk7CisKKyAgICBvdFBsYXRVYXJ0RW5hYmxlKCk7CisKKyAgICBSQUlMX0luaXRfdCByYWlsSW5pdFBhcmFtcyA9CisgICAgeworICAgICAgICAxMjgsIC8vIG1heFBhY2tldExlbmd0aDogVU5VU0VECisgICAgICAgIFJBRElPX0NPTkZJR19YVEFMX0ZSRVFVRU5DWSwKKyAgICAgICAgMAorICAgIH07CisgICAgUkFJTF9SZkluaXQoJnJhaWxJbml0UGFyYW1zKTsKKyAgICBSQUlMX1JmSWRsZSgpOworCisgICAgZWZyMzJBbGFybUluaXQoKTsKKyAgICBlZnIzMlJhZGlvSW5pdCgpOworICAgIGVmcjMyTWlzY0luaXQoKTsKKyAgICBlZnIzMlJhbmRvbUluaXQoKTsKK30KKwordm9pZCBQbGF0Zm9ybURlaW5pdCh2b2lkKQoreworICAgIGVmcjMyUmFkaW9EZWluaXQoKTsKK30KKwordm9pZCBQbGF0Zm9ybVByb2Nlc3NEcml2ZXJzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBzSW5zdGFuY2UgPSBhSW5zdGFuY2U7CisKKyAgICAvLyBzaG91bGQgc2xlZXAgYW5kIHdhaXQgZm9yIGludGVycnVwdHMgaGVyZQorCisgICAgZWZyMzJVYXJ0UHJvY2VzcygpOworICAgIGVmcjMyUmFkaW9Qcm9jZXNzKGFJbnN0YW5jZSk7CisgICAgZWZyMzJBbGFybVByb2Nlc3MoYUluc3RhbmNlKTsKK30KKwordm9pZCBoYWxJbml0Q2hpcFNwZWNpZmljKHZvaWQpCit7CisgICAgQ01VX0hGWE9Jbml0X1R5cGVEZWYgaGZ4b0luaXQgPSBDTVVfSEZYT0lOSVRfV1NUS19ERUZBVUxUOworICAgIFJBRElPX1BUSUluaXRfdCBwdGlJbml0ID0gUkFESU9fUFRJX0lOSVQ7CisgICAgUkFESU9fUEFJbml0X3QgcGFJbml0OworCisgICAgU1lTVEVNX0NoaXBSZXZpc2lvbl9UeXBlRGVmIGNoaXBSZXY7CisgICAgU1lTVEVNX0NoaXBSZXZpc2lvbkdldCgmY2hpcFJldik7CisKKyAgICAvLyBJbml0IERDREMgcmVndWxhdG9yIGFuZCBIRlhPIHdpdGggV1NUSyByYWRpbyBib2FyZCBzcGVjaWZpYyBwYXJhbWV0ZXJzCisgICAgLy8gZnJvbSBzMDI1X3N3XGtpdHNcU0xXU1RLNjEwMEFfRUZSMzJNR1xjb25maWdcYnNwY29uZmlnLmgKKyNpZmRlZiBFTVVfRENEQ0lOSVRfV1NUS19ERUZBVUxUCisgICAgRU1VX0RDRENJbml0X1R5cGVEZWYgZGNkY0luaXQgPSBFTVVfRENEQ0lOSVRfV1NUS19ERUZBVUxUOworICAgIEVNVV9EQ0RDSW5pdCgmZGNkY0luaXQpOworI2Vsc2UKKyAgICBFTVVfRENEQ1Bvd2VyT2ZmKCk7CisjZW5kaWYKKyAgICBDTVVfSEZYT0luaXQoJmhmeG9Jbml0KTsKKyAgICBTeXN0ZW1IRlhPQ2xvY2tTZXQoUkFESU9fQ09ORklHX1hUQUxfRlJFUVVFTkNZKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIFBhY2tldCBUcmFjZSBJbnRlcmZhY2UgKFBUSSkgdG8gbWF0Y2ggdGhlIGNvbmZpZ3VyYXRpb24gaW4KKyAgICAvLyB0aGUgYm9hcmQgaGVhZGVyCisgICAgUkFESU9fUFRJX0luaXQoJnB0aUluaXQpOworCisgICAgLyogU3dpdGNoIEhGQ0xLIHRvIEhGWE8gYW5kIGRpc2FibGUgSEZSQ08gKi8KKyAgICBDTVVfQ2xvY2tTZWxlY3RTZXQoY211Q2xvY2tfSEYsIGNtdVNlbGVjdF9IRlhPKTsKKyAgICBDTVVfT3NjaWxsYXRvckVuYWJsZShjbXVPc2NfSEZSQ08sIGZhbHNlLCBmYWxzZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBQQSBub3cgdGhhdCB0aGUgSEZYTyBpcyB1cCBhbmQgdGhlIHRpbWluZyBpcyBjb3JyZWN0CisjaWYgKFJBRElPX0NPTkZJR19CQVNFX0ZSRVFVRU5DWSA8IDEwMDAwMDAwMDBVTCkKKyAgICBwYUluaXQgPSAoUkFESU9fUEFJbml0X3QpIFJBRElPX1BBX1NVQkdJR19JTklUOworI2Vsc2UKKyAgICBwYUluaXQgPSAoUkFESU9fUEFJbml0X3QpIFJBRElPX1BBXzJQNF9JTklUOworI2VuZGlmCisKKyAgICBpZiAoIVJBRElPX1BBX0luaXQoJnBhSW5pdCkpCisgICAgeworICAgICAgICAvLyBFcnJvcjogVGhlIFBBIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZCBkdWUgdG8gYW4gaW1wcm9wZXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgLy8gUGxlYXNlIGVuc3VyZSB5b3VyIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWQgZm9yIHRoZSBzZWxlY3RlZCBwYXJ0LgorICAgICAgICB3aGlsZSAoMSk7CisgICAgfQorCisgICAgLy8gSW5pdGlhbGl6ZSBvdGhlciBjaGlwIGNsb2NrcworICAgIENNVV9Pc2NpbGxhdG9yRW5hYmxlKGNtdU9zY19MRlJDTywgdHJ1ZSwgdHJ1ZSk7CisgICAgQ01VX0Nsb2NrU2VsZWN0U2V0KGNtdUNsb2NrX0xGQSwgY211U2VsZWN0X0xGUkNPKTsKKyAgICBDTVVfQ2xvY2tTZWxlY3RTZXQoY211Q2xvY2tfTEZCLCBjbXVTZWxlY3RfTEZSQ08pOworICAgIENNVV9DbG9ja0VuYWJsZShjbXVDbG9ja19DT1JFTEUsIHRydWUpOworfQorCit2b2lkIEhBTF9Jbml0KHZvaWQpCit7CisgICAgaGFsSW5pdENoaXBTcGVjaWZpYygpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3JhZGlvLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTgyZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3JhZGlvLmMKQEAgLTAsMCArMSw4NDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHJhZGlvIGNvbW11bmljYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCisjaW5jbHVkZSAiZW1fY29yZS5oIgorI2luY2x1ZGUgImVtX3N5c3RlbS5oIgorI2luY2x1ZGUgInJhaWwuaCIKKyNpbmNsdWRlICJyYWlsX2llZWU4MDIxNTQuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtZWZyMzItY29uZmlnLmgiCisKK2VudW0KK3sKKyAgICBJRUVFODAyMTU0X01JTl9MRU5HVEggICAgICAgICAgICAgICAgPSA1LAorICAgIElFRUU4MDIxNTRfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICA9IDEyNywKKyAgICBJRUVFODAyMTU0X0FDS19MRU5HVEggICAgICAgICAgICAgICAgPSA1LAorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLICAgICAgICAgICA9IDB4NywKKyAgICBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfQUNLICAgICAgICAgICAgPSAweDIsCisgICAgSUVFRTgwMjE1NF9GUkFNRV9QRU5ESU5HICAgICAgICAgICAgID0gMSA8PCA0LAorICAgIElFRUU4MDIxNTRfQUNLX1JFUVVFU1QgICAgICAgICAgICAgICA9IDEgPDwgNSwKKyAgICBJRUVFODAyMTU0X0RTTl9PRkZTRVQgICAgICAgICAgICAgICAgPSAyLAorfTsKKworZW51bQoreworICAgIEVGUjMyX1JFQ0VJVkVfU0VOU0lUSVZJVFkgPSAtMTAwLCAgLy8gZEJtCit9OworCitzdGF0aWMgdWludDE2X3QgICAgICAgc1BhbklkICAgICAgICAgICAgID0gMDsKK3N0YXRpYyB1aW50OF90ICAgICAgICBzQ2hhbm5lbCAgICAgICAgICAgPSAwOworc3RhdGljIGJvb2wgICAgICAgICAgIHNUcmFuc21pdEJ1c3kgICAgICA9IGZhbHNlOworc3RhdGljIGJvb2wgICAgICAgICAgIHNQcm9taXNjdW91cyAgICAgICA9IGZhbHNlOworc3RhdGljIGJvb2wgICAgICAgICAgIHNJc1JlY2VpdmVyRW5hYmxlZCA9IGZhbHNlOworc3RhdGljIGJvb2wgICAgICAgICAgIHNJc1NyY01hdGNoRW5hYmxlZCA9IGZhbHNlOworc3RhdGljIG90UmFkaW9TdGF0ZSAgIHNTdGF0ZSAgICAgICAgICAgICA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworCitzdGF0aWMgdWludDhfdCAgICAgICAgc1JlY2VpdmVCdWZmZXJbSUVFRTgwMjE1NF9NQVhfTEVOR1RIICsgMSArIHNpemVvZihSQUlMX1J4UGFja2V0SW5mb190KV07CitzdGF0aWMgdWludDhfdCAgICAgICAgc1JlY2VpdmVQc2R1W0lFRUU4MDIxNTRfTUFYX0xFTkdUSF07CitzdGF0aWMgb3RSYWRpb0ZyYW1lICAgc1JlY2VpdmVGcmFtZTsKK3N0YXRpYyBvdEVycm9yICAgICAgICBzUmVjZWl2ZUVycm9yOworCitzdGF0aWMgb3RSYWRpb0ZyYW1lICAgc1RyYW5zbWl0RnJhbWU7CitzdGF0aWMgdWludDhfdCAgICAgICAgc1RyYW5zbWl0UHNkdVtJRUVFODAyMTU0X01BWF9MRU5HVEhdOworc3RhdGljIG90RXJyb3IgICAgICAgIHNUcmFuc21pdEVycm9yOworCit0eXBlZGVmIHN0cnVjdCAgICAgICAgc3JjTWF0Y2hFbnRyeQoreworICAgIHVpbnQxNl90IGNoZWNrc3VtOworICAgIGJvb2wgICAgIGFsbG9jYXRlZDsKK30gc1NyY01hdGNoRW50cnk7CisKK3N0YXRpYyBzU3JjTWF0Y2hFbnRyeSBzcmNNYXRjaFNob3J0RW50cnlbUkFESU9fQ09ORklHX1NSQ19NQVRDSF9TSE9SVF9FTlRSWV9OVU1dOworc3RhdGljIHNTcmNNYXRjaEVudHJ5IHNyY01hdGNoRXh0RW50cnlbUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FWFRfRU5UUllfTlVNXTsKKwordm9pZCBlZnIzMlJhZGlvSW5pdCh2b2lkKQoreworICAgIC8vIERhdGEgTWFuYWdlbWVudAorICAgIFJBSUxfRGF0YUNvbmZpZ190IHJhaWxEYXRhQ29uZmlnID0KKyAgICB7CisgICAgICAgIFRYX1BBQ0tFVF9EQVRBLAorICAgICAgICBSWF9QQUNLRVRfREFUQSwKKyAgICAgICAgUEFDS0VUX01PREUsCisgICAgICAgIFBBQ0tFVF9NT0RFLAorICAgIH07CisKKyAgICBSQUlMX0RhdGFDb25maWcoJnJhaWxEYXRhQ29uZmlnKTsKKworICAgIC8vIDgwMi4xNS40IGNvbmZpZ3VyYXRpb24KKyAgICBSQUlMX0lFRUU4MDIxNTRfQ29uZmlnX3QgY29uZmlnID0KKyAgICB7CisgICAgICAgIGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvbWlzY3VvdXNNb2RlCisgICAgICAgIGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXNQYW5Db29yZGluYXRvcgorICAgICAgICBSQUlMX0lFRUU4MDIxNTRfQUNDRVBUX1NUQU5EQVJEX0ZSQU1FUywgIC8vIGZyYW1lc01hc2sKKyAgICAgICAgUkFJTF9SRl9TVEFURV9SWCwgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0U3RhdGUKKyAgICAgICAgMTAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZGxlVGltZQorICAgICAgICAxOTIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHR1cm5hcm91bmRUaW1lCisgICAgICAgIDg5NCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNrVGltZW91dAorICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZHJlc3NlcworICAgIH07CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggID0gMDsKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qc2R1ICAgID0gc1JlY2VpdmVQc2R1OworICAgIHNUcmFuc21pdEZyYW1lLm1MZW5ndGggPSAwOworICAgIHNUcmFuc21pdEZyYW1lLm1Qc2R1ICAgPSBzVHJhbnNtaXRQc2R1OworCisgICAgaWYgKFJBSUxfSUVFRTgwMjE1NF8ycDRHSHpSYWRpb0NvbmZpZygpKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoUkFJTF9JRUVFODAyMTU0X0luaXQoJmNvbmZpZykpCisgICAgeworICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgIH0KKworICAgIFJBSUxfVHhQb3dlclNldChPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX01BWF9UUkFOU01JVF9QT1dFUik7CisKKyAgICBvdExvZ0luZm9QbGF0KHNJbnN0YW5jZSwgIkluaXRpYWxpemVkIiwgTlVMTCk7Cit9CisKK3ZvaWQgZWZyMzJSYWRpb0RlaW5pdCh2b2lkKQoreworICAgIFJBSUxfUmZJZGxlKCk7CisgICAgUkFJTF9JRUVFODAyMTU0X0RlaW5pdCgpOworfQorCit2b2lkIHNldENoYW5uZWwodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBib29sIGVuYWJsZWQgPSBmYWxzZTsKKworICAgIG90RVhQRUNUKHNDaGFubmVsICE9IGFDaGFubmVsKTsKKworICAgIGlmIChzSXNSZWNlaXZlckVuYWJsZWQpCisgICAgeworICAgICAgICBSQUlMX1JmSWRsZSgpOworICAgICAgICBlbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgc0lzUmVjZWl2ZXJFbmFibGVkID0gZmFsc2U7CisgICAgfQorCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJDaGFubmVsPSVkIiwgYUNoYW5uZWwpOworCisgICAgc0NoYW5uZWwgPSBhQ2hhbm5lbDsKKworICAgIGlmIChlbmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKFJBSUxfUnhTdGFydChhQ2hhbm5lbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBzSXNSZWNlaXZlckVuYWJsZWQgPSB0cnVlOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9HZXRJZWVlRXVpNjQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphSWVlZUV1aTY0KQoreworICAgIHVpbnQ2NF90IGV1aTY0OworICAgIHVpbnQ4X3QgKmV1aTY0UHRyID0gTlVMTDsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBldWk2NCA9IFNZU1RFTV9HZXRVbmlxdWUoKTsKKyAgICBldWk2NFB0ciA9ICh1aW50OF90ICopJmV1aTY0OworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgT1RfRVhUX0FERFJFU1NfU0laRTsgaSsrKQorICAgIHsKKyAgICAgICAgYUllZWVFdWk2NFtpXSA9IGV1aTY0UHRyWyhPVF9FWFRfQUREUkVTU19TSVpFIC0gMSkgLSBpXTsKKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQYW5JZCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdExvZ0luZm9QbGF0KHNJbnN0YW5jZSwgIlBBTklEPSVYIiwgYVBhbklkKTsKKworICAgIHNQYW5JZCA9IGFQYW5JZDsKKyAgICBSQUlMX0lFRUU4MDIxNTRfU2V0UGFuSWQoYVBhbklkKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiRXh0QWRkcj0lWCVYJVglWCVYJVglWCVYIiwKKyAgICAgICAgICAgICAgICAgIGFBZGRyZXNzWzddLCBhQWRkcmVzc1s2XSwgYUFkZHJlc3NbNV0sIGFBZGRyZXNzWzRdLAorICAgICAgICAgICAgICAgICAgYUFkZHJlc3NbM10sIGFBZGRyZXNzWzJdLCBhQWRkcmVzc1sxXSwgYUFkZHJlc3NbMF0pOworCisgICAgUkFJTF9JRUVFODAyMTU0X1NldExvbmdBZGRyZXNzKGFBZGRyZXNzKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiU2hvcnRBZGRyPSVYIiwgYUFkZHJlc3MpOworCisgICAgUkFJTF9JRUVFODAyMTU0X1NldFNob3J0QWRkcmVzcyhhQWRkcmVzcyk7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9Jc0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9FbmFibGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIENPUkVfREVDTEFSRV9JUlFfU1RBVEU7CisgICAgQ09SRV9FTlRFUl9DUklUSUNBTCgpOworCisgICAgb3RFWFBFQ1QoIW90UGxhdFJhZGlvSXNFbmFibGVkKGFJbnN0YW5jZSkpOworCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJTdGF0ZT1PVF9SQURJT19TVEFURV9TTEVFUCIsIE5VTEwpOworICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworCitleGl0OgorICAgIENPUkVfRVhJVF9DUklUSUNBTCgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgQ09SRV9ERUNMQVJFX0lSUV9TVEFURTsKKyAgICBDT1JFX0VOVEVSX0NSSVRJQ0FMKCk7CisKKyAgICBvdEVYUEVDVChvdFBsYXRSYWRpb0lzRW5hYmxlZChhSW5zdGFuY2UpKTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiU3RhdGU9T1RfUkFESU9fU1RBVEVfRElTQUJMRUQiLCBOVUxMKTsKKyAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRDsKKworZXhpdDoKKyAgICBDT1JFX0VYSVRfQ1JJVElDQUwoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1NsZWVwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBDT1JFX0RFQ0xBUkVfSVJRX1NUQVRFOworICAgIENPUkVfRU5URVJfQ1JJVElDQUwoKTsKKworICAgIG90RVhQRUNUX0FDVElPTigoc1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUKSAmJiAoc1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEKSwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiU3RhdGU9T1RfUkFESU9fU1RBVEVfU0xFRVAiLCBOVUxMKTsKKyAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9TTEVFUDsKKworICAgIGlmIChzSXNSZWNlaXZlckVuYWJsZWQpCisgICAgeworICAgICAgICBSQUlMX1JmSWRsZUV4dChSQUlMX0lETEUsIHRydWUpOworICAgICAgICBzSXNSZWNlaXZlckVuYWJsZWQgPSBmYWxzZTsKKyAgICB9CisKK2V4aXQ6CisgICAgQ09SRV9FWElUX0NSSVRJQ0FMKCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvUmVjZWl2ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoYW5uZWwpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgQ09SRV9ERUNMQVJFX0lSUV9TVEFURTsKKyAgICBDT1JFX0VOVEVSX0NSSVRJQ0FMKCk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJTdGF0ZT1PVF9SQURJT19TVEFURV9SRUNFSVZFIiwgTlVMTCk7CisgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKyAgICBzZXRDaGFubmVsKGFDaGFubmVsKTsKKyAgICBzUmVjZWl2ZUZyYW1lLm1DaGFubmVsID0gYUNoYW5uZWw7CisKKyAgICBpZiAoIXNJc1JlY2VpdmVyRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG90RVhQRUNUX0FDVElPTihSQUlMX1J4U3RhcnQoYUNoYW5uZWwpID09IFJBSUxfU1RBVFVTX05PX0VSUk9SLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisKKyAgICAgICAgc0lzUmVjZWl2ZXJFbmFibGVkID0gdHJ1ZTsKKyAgICB9CisKK2V4aXQ6CisgICAgQ09SRV9FWElUX0NSSVRJQ0FMKCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvVHJhbnNtaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBSQUlMX0NzbWFDb25maWdfdCBjc21hQ29uZmlnID0gUkFJTF9DU01BX0NPTkZJR184MDJfMTVfNF8yMDAzXzJwNF9HSHpfT1FQU0tfQ1NNQTsKKyAgICBSQUlMX1R4RGF0YV90IHR4RGF0YTsKKyAgICBSQUlMX1R4T3B0aW9uc190IHR4T3B0aW9uOworICAgIHVpbnQ4X3QgZnJhbWVbSUVFRTgwMjE1NF9NQVhfTEVOR1RIICsgMV07CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgQ09SRV9ERUNMQVJFX0lSUV9TVEFURTsKKyAgICBDT1JFX0VOVEVSX0NSSVRJQ0FMKCk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCkgJiYgKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9UUkFOU01JVCksCisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9UUkFOU01JVDsKKyAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc1RyYW5zbWl0QnVzeSA9IHRydWU7CisKKyAgICBmcmFtZVswXSA9IGFGcmFtZS0+bUxlbmd0aDsKKyAgICBtZW1jcHkoZnJhbWUgKyAxLCBhRnJhbWUtPm1Qc2R1LCBhRnJhbWUtPm1MZW5ndGgpOworICAgIHR4RGF0YS5kYXRhUHRyID0gZnJhbWU7CisgICAgdHhEYXRhLmRhdGFMZW5ndGggPSBhRnJhbWUtPm1MZW5ndGggLSAxOworCisgICAgdHhPcHRpb24ud2FpdEZvckFjayA9IChhRnJhbWUtPm1Qc2R1WzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkgPyB0cnVlIDogZmFsc2U7CisgICAgdHhPcHRpb24ucmVtb3ZlQ3JjICA9IGZhbHNlOworICAgIHR4T3B0aW9uLnN5bmNXb3JkSWQgPSAwOworCisgICAgUkFJTF9UeFBvd2VyU2V0KGFGcmFtZS0+bVBvd2VyKTsKKyAgICBzZXRDaGFubmVsKGFGcmFtZS0+bUNoYW5uZWwpOworICAgIFJBSUxfUmZJZGxlRXh0KFJBSUxfSURMRSwgdHJ1ZSk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oUkFJTF9UeERhdGFMb2FkKCZ0eERhdGEpID09IFJBSUxfU1RBVFVTX05PX0VSUk9SLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oUkFJTF9UeFN0YXJ0V2l0aE9wdGlvbnMoYUZyYW1lLT5tQ2hhbm5lbCwgJnR4T3B0aW9uLCBSQUlMX0NjYUNzbWEsICZjc21hQ29uZmlnKSA9PSBSQUlMX1NUQVRVU19OT19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworCitleGl0OgorICAgIENPUkVfRVhJVF9DUklUSUNBTCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RSYWRpb0ZyYW1lICpvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuICZzVHJhbnNtaXRGcmFtZTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAodWludDhfdCkoUkFJTF9SeEdldFJTU0koKSA+PiAyKTsKK30KKworb3RSYWRpb0NhcHMgb3RQbGF0UmFkaW9HZXRDYXBzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIE9UX1JBRElPX0NBUFNfQUNLX1RJTUVPVVQ7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9HZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBzUHJvbWlzY3VvdXM7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBzUHJvbWlzY3VvdXMgPSBhRW5hYmxlOworICAgIFJBSUxfSUVFRTgwMjE1NF9TZXRQcm9taXNjdW91c01vZGUoYUVuYWJsZSk7Cit9CisKK2ludDhfdCBmaW5kU3JjTWF0Y2hBdmFpbEVudHJ5KGJvb2wgYVNob3J0QWRkcmVzcykKK3sKKyAgICBpbnQ4X3QgZW50cnkgPSAtMTsKKworICAgIGlmIChhU2hvcnRBZGRyZXNzKQorICAgIHsKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9TSE9SVF9FTlRSWV9OVU07IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFzcmNNYXRjaFNob3J0RW50cnlbaV0uYWxsb2NhdGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudHJ5ID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBSQURJT19DT05GSUdfU1JDX01BVENIX0VYVF9FTlRSWV9OVU07IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFzcmNNYXRjaEV4dEVudHJ5W2ldLmFsbG9jYXRlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK2ludDhfdCBmaW5kU3JjTWF0Y2hTaG9ydEVudHJ5KGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisgICAgdWludDE2X3QgY2hlY2tzdW0gPSBhU2hvcnRBZGRyZXNzICsgc1BhbklkOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9TSE9SVF9FTlRSWV9OVU07IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjaGVja3N1bSA9PSBzcmNNYXRjaFNob3J0RW50cnlbaV0uY2hlY2tzdW0gJiYKKyAgICAgICAgICAgIHNyY01hdGNoU2hvcnRFbnRyeVtpXS5hbGxvY2F0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVudHJ5ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVudHJ5OworfQorCitpbnQ4X3QgZmluZFNyY01hdGNoRXh0RW50cnkoY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisgICAgdWludDE2X3QgY2hlY2tzdW0gPSBzUGFuSWQ7CisKKyAgICBjaGVja3N1bSArPSAodWludDE2X3QpYUV4dEFkZHJlc3NbMF0gfCAodWludDE2X3QpKGFFeHRBZGRyZXNzWzFdIDw8IDgpOworICAgIGNoZWNrc3VtICs9ICh1aW50MTZfdClhRXh0QWRkcmVzc1syXSB8ICh1aW50MTZfdCkoYUV4dEFkZHJlc3NbM10gPDwgOCk7CisgICAgY2hlY2tzdW0gKz0gKHVpbnQxNl90KWFFeHRBZGRyZXNzWzRdIHwgKHVpbnQxNl90KShhRXh0QWRkcmVzc1s1XSA8PCA4KTsKKyAgICBjaGVja3N1bSArPSAodWludDE2X3QpYUV4dEFkZHJlc3NbNl0gfCAodWludDE2X3QpKGFFeHRBZGRyZXNzWzddIDw8IDgpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FWFRfRU5UUllfTlVNOyBpKyspCisgICAgeworICAgICAgICBpZiAoY2hlY2tzdW0gPT0gc3JjTWF0Y2hFeHRFbnRyeVtpXS5jaGVja3N1bSAmJgorICAgICAgICAgICAgc3JjTWF0Y2hFeHRFbnRyeVtpXS5hbGxvY2F0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVudHJ5ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVudHJ5OworfQorCit2b2lkIGFkZFRvU3JjTWF0Y2hTaG9ydEluZGlyZWN0KHVpbnQ4X3QgZW50cnksIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgdWludDE2X3QgY2hlY2tzdW0gPSBhU2hvcnRBZGRyZXNzICsgc1BhbklkOworCisgICAgc3JjTWF0Y2hTaG9ydEVudHJ5W2VudHJ5XS5jaGVja3N1bSA9IGNoZWNrc3VtOworICAgIHNyY01hdGNoU2hvcnRFbnRyeVtlbnRyeV0uYWxsb2NhdGVkID0gdHJ1ZTsKK30KKwordm9pZCBhZGRUb1NyY01hdGNoRXh0SW5kaXJlY3QodWludDhfdCBlbnRyeSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgdWludDE2X3QgY2hlY2tzdW0gPSBzUGFuSWQ7CisKKyAgICBjaGVja3N1bSArPSAodWludDE2X3QpYUV4dEFkZHJlc3NbMF0gfCAodWludDE2X3QpKGFFeHRBZGRyZXNzWzFdIDw8IDgpOworICAgIGNoZWNrc3VtICs9ICh1aW50MTZfdClhRXh0QWRkcmVzc1syXSB8ICh1aW50MTZfdCkoYUV4dEFkZHJlc3NbM10gPDwgOCk7CisgICAgY2hlY2tzdW0gKz0gKHVpbnQxNl90KWFFeHRBZGRyZXNzWzRdIHwgKHVpbnQxNl90KShhRXh0QWRkcmVzc1s1XSA8PCA4KTsKKyAgICBjaGVja3N1bSArPSAodWludDE2X3QpYUV4dEFkZHJlc3NbNl0gfCAodWludDE2X3QpKGFFeHRBZGRyZXNzWzddIDw8IDgpOworCisgICAgc3JjTWF0Y2hFeHRFbnRyeVtlbnRyeV0uY2hlY2tzdW0gPSBjaGVja3N1bTsKKyAgICBzcmNNYXRjaEV4dEVudHJ5W2VudHJ5XS5hbGxvY2F0ZWQgPSB0cnVlOworfQorCit2b2lkIHJlbW92ZUZyb21TcmNNYXRjaFNob3J0SW5kaXJlY3QodWludDhfdCBlbnRyeSkKK3sKKyAgICBzcmNNYXRjaFNob3J0RW50cnlbZW50cnldLmFsbG9jYXRlZCA9IGZhbHNlOworICAgIG1lbXNldCgmc3JjTWF0Y2hTaG9ydEVudHJ5W2VudHJ5XS5jaGVja3N1bSwgMCwgc2l6ZW9mKHVpbnQxNl90KSk7Cit9CisKK3ZvaWQgcmVtb3ZlRnJvbVNyY01hdGNoRXh0SW5kaXJlY3QodWludDhfdCBlbnRyeSkKK3sKKyAgICBzcmNNYXRjaEV4dEVudHJ5W2VudHJ5XS5hbGxvY2F0ZWQgPSBmYWxzZTsKKyAgICBtZW1zZXQoJnNyY01hdGNoRXh0RW50cnlbZW50cnldLmNoZWNrc3VtLCAwLCBzaXplb2YodWludDE2X3QpKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0VuYWJsZVNyY01hdGNoKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIENPUkVfREVDTEFSRV9JUlFfU1RBVEU7CisgICAgQ09SRV9FTlRFUl9DUklUSUNBTCgpOworCisgICAgLy8gc2V0IEZyYW1lIFBlbmRpbmcgYml0IGZvciBhbGwgb3V0Z29pbmcgQUNLcyBpZiBhRW5hYmxlIGlzIGZhbHNlCisgICAgc0lzU3JjTWF0Y2hFbmFibGVkID0gYUVuYWJsZTsKKworICAgIENPUkVfRVhJVF9DUklUSUNBTCgpOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisKKyAgICBDT1JFX0RFQ0xBUkVfSVJRX1NUQVRFOworICAgIENPUkVfRU5URVJfQ1JJVElDQUwoKTsKKworICAgIGVudHJ5ID0gZmluZFNyY01hdGNoQXZhaWxFbnRyeSh0cnVlKTsKKyAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIkFkZCBTaG9ydEFkZHIgZW50cnk6ICVkIiwgZW50cnkpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGVudHJ5ID49IDAgJiYgZW50cnkgPCBSQURJT19DT05GSUdfU1JDX01BVENIX1NIT1JUX0VOVFJZX05VTSwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIGFkZFRvU3JjTWF0Y2hTaG9ydEluZGlyZWN0KGVudHJ5LCBhU2hvcnRBZGRyZXNzKTsKKworZXhpdDoKKyAgICBDT1JFX0VYSVRfQ1JJVElDQUwoKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaEV4dEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgQ09SRV9ERUNMQVJFX0lSUV9TVEFURTsKKyAgICBDT1JFX0VOVEVSX0NSSVRJQ0FMKCk7CisKKyAgICBlbnRyeSA9IGZpbmRTcmNNYXRjaEF2YWlsRW50cnkoZmFsc2UpOworICAgIG90TG9nRGViZ1BsYXQoc0luc3RhbmNlLCAiQWRkIEV4dEFkZHIgZW50cnk6ICVkIiwgZW50cnkpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGVudHJ5ID49IDAgJiYgZW50cnkgPCBSQURJT19DT05GSUdfU1JDX01BVENIX0VYVF9FTlRSWV9OVU0sCisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBhZGRUb1NyY01hdGNoRXh0SW5kaXJlY3QoZW50cnksIGFFeHRBZGRyZXNzKTsKKworZXhpdDoKKyAgICBDT1JFX0VYSVRfQ1JJVElDQUwoKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgQ09SRV9ERUNMQVJFX0lSUV9TVEFURTsKKyAgICBDT1JFX0VOVEVSX0NSSVRJQ0FMKCk7CisKKyAgICBlbnRyeSA9IGZpbmRTcmNNYXRjaFNob3J0RW50cnkoYVNob3J0QWRkcmVzcyk7CisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJDbGVhciBTaG9ydEFkZHIgZW50cnk6ICVkIiwgZW50cnkpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGVudHJ5ID49IDAgJiYgZW50cnkgPCBSQURJT19DT05GSUdfU1JDX01BVENIX1NIT1JUX0VOVFJZX05VTSwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19BRERSRVNTKTsKKworICAgIHJlbW92ZUZyb21TcmNNYXRjaFNob3J0SW5kaXJlY3QoZW50cnkpOworCitleGl0OgorICAgIENPUkVfRVhJVF9DUklUSUNBTCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGludDhfdCBlbnRyeSA9IC0xOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIENPUkVfREVDTEFSRV9JUlFfU1RBVEU7CisgICAgQ09SRV9FTlRFUl9DUklUSUNBTCgpOworCisgICAgZW50cnkgPSBmaW5kU3JjTWF0Y2hFeHRFbnRyeShhRXh0QWRkcmVzcyk7CisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJDbGVhciBFeHRBZGRyIGVudHJ5OiAlZCIsIGVudHJ5KTsKKworICAgIG90RVhQRUNUX0FDVElPTihlbnRyeSA+PSAwICYmIGVudHJ5IDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FWFRfRU5UUllfTlVNLAorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0FERFJFU1MpOworCisgICAgcmVtb3ZlRnJvbVNyY01hdGNoRXh0SW5kaXJlY3QoZW50cnkpOworCitleGl0OgorICAgIENPUkVfRVhJVF9DUklUSUNBTCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nRGViZ1BsYXQoc0luc3RhbmNlLCAiQ2xlYXIgU2hvcnRBZGRyIGVudHJpZXMiLCBOVUxMKTsKKworICAgIG1lbXNldChzcmNNYXRjaFNob3J0RW50cnksIDAsIHNpemVvZihzcmNNYXRjaFNob3J0RW50cnkpKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIkNsZWFyIEV4dEFkZHIgZW50cmllcyIsIE5VTEwpOworCisgICAgbWVtc2V0KHNyY01hdGNoRXh0RW50cnksIDAsIHNpemVvZihzcmNNYXRjaEV4dEVudHJ5KSk7Cit9CisKK3ZvaWQgUkFJTENiX0lFRUU4MDIxNTRfRGF0YVJlcXVlc3RDb21tYW5kKFJBSUxfSUVFRTgwMjE1NF9BZGRyZXNzX3QgKmFBZGRyZXNzKQoreworICAgIGlmIChzSXNTcmNNYXRjaEVuYWJsZWQpCisgICAgeworICAgICAgICBpZiAoKGFBZGRyZXNzLT5sZW5ndGggPT0gUkFJTF9JRUVFODAyMTU0X0xvbmdBZGRyZXNzICYmCisgICAgICAgICAgICAgZmluZFNyY01hdGNoRXh0RW50cnkoYUFkZHJlc3MtPmxvbmdBZGRyZXNzKSA+PSAwKSB8fAorICAgICAgICAgICAgKGFBZGRyZXNzLT5sZW5ndGggPT0gUkFJTF9JRUVFODAyMTU0X1Nob3J0QWRkcmVzcyAmJgorICAgICAgICAgICAgIGZpbmRTcmNNYXRjaFNob3J0RW50cnkoYUFkZHJlc3MtPnNob3J0QWRkcmVzcykgPj0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJBSUxfSUVFRTgwMjE1NF9TZXRGcmFtZVBlbmRpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAodm9pZClhQWRkcmVzczsKKyAgICAgICAgUkFJTF9JRUVFODAyMTU0X1NldEZyYW1lUGVuZGluZygpOworICAgIH0KK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0VuZXJneVNjYW4ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFTY2FuQ2hhbm5lbCwgdWludDE2X3QgYVNjYW5EdXJhdGlvbikKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYVNjYW5DaGFubmVsOworICAgICh2b2lkKWFTY2FuRHVyYXRpb247CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKwordm9pZCBSQUlMQ2JfVHhSYWRpb1N0YXR1cyh1aW50OF90IGFTdGF0dXMpCit7CisgICAgc3dpdGNoIChhU3RhdHVzKQorICAgIHsKKyAgICBjYXNlIFJBSUxfVFhfQ09ORklHX0NIQU5ORUxfQlVTWToKKyAgICAgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFOworICAgICAgICBzVHJhbnNtaXRCdXN5ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSQUlMX1RYX0NPTkZJR19UWF9BQk9SVEVEOgorICAgICAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX0FCT1JUOworICAgICAgICBzVHJhbnNtaXRCdXN5ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSQUlMX1RYX0NPTkZJR19CVUZGRVJfVU5ERVJGTE9XOgorICAgICAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX0FCT1JUOworICAgICAgICBzVHJhbnNtaXRCdXN5ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFJBSUxDYl9UeFBhY2tldFNlbnQoUkFJTF9UeFBhY2tldEluZm9fdCAqYVR4UGFja2V0SW5mbykKK3sKKyAgICAodm9pZClhVHhQYWNrZXRJbmZvOworICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzVHJhbnNtaXRCdXN5ID0gZmFsc2U7Cit9CisKK3ZvaWQgUkFJTENiX1J4UGFja2V0UmVjZWl2ZWQodm9pZCAqYVJ4UGFja2V0SGFuZGxlKQoreworICAgIFJBSUxfUnhQYWNrZXRJbmZvX3QgKnJ4UGFja2V0SW5mbzsKKyAgICB1aW50OF90IGxlbmd0aDsKKworICAgIHJ4UGFja2V0SW5mbyA9IChSQUlMX1J4UGFja2V0SW5mb190ICopYVJ4UGFja2V0SGFuZGxlOworCisgICAgLy8gY2hlY2sgcmVjdiBwYWNrZXQgYXBwZW5kZWQgaW5mbworICAgIG90RVhQRUNUKHJ4UGFja2V0SW5mbyAhPSBOVUxMICYmCisgICAgICAgICAgICAgcnhQYWNrZXRJbmZvLT5hcHBlbmRlZEluZm8uY3JjU3RhdHVzICYmCisgICAgICAgICAgICAgcnhQYWNrZXRJbmZvLT5hcHBlbmRlZEluZm8uZnJhbWVDb2RpbmdTdGF0dXMpOworCisgICAgbGVuZ3RoID0gcnhQYWNrZXRJbmZvLT5kYXRhTGVuZ3RoICsgMTsKKworICAgIC8vIGNoZWNrIHRoZSBsZW5ndGggaW4gcmVjdiBwYWNrZXQgaW5mbyBzdHJ1Y3R1cmUKKyAgICBvdEVYUEVDVChsZW5ndGggPT0gcnhQYWNrZXRJbmZvLT5kYXRhUHRyWzBdKTsKKworICAgIC8vIGNoZWNrIHRoZSBsZW5naHQgdmFsaWRpdHkgb2YgcmVjdiBwYWNrZXQKKyAgICBvdEVYUEVDVChsZW5ndGggPj0gSUVFRTgwMjE1NF9NSU5fTEVOR1RIICYmIGxlbmd0aCA8PSBJRUVFODAyMTU0X01BWF9MRU5HVEgpOworCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJSZWNlaXZlZCBkYXRhOiVkIiwgcnhQYWNrZXRJbmZvLT5kYXRhTGVuZ3RoKTsKKworICAgIG1lbWNweShzUmVjZWl2ZUZyYW1lLm1Qc2R1LCByeFBhY2tldEluZm8tPmRhdGFQdHIgKyAxLCByeFBhY2tldEluZm8tPmRhdGFMZW5ndGgpOworICAgIHNSZWNlaXZlRnJhbWUubVBvd2VyID0gcnhQYWNrZXRJbmZvLT5hcHBlbmRlZEluZm8ucnNzaUxhdGNoOworICAgIHNSZWNlaXZlRnJhbWUubUxxaSA9IHJ4UGFja2V0SW5mby0+YXBwZW5kZWRJbmZvLmxxaTsKKyAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPSBsZW5ndGg7CisgICAgc1JlY2VpdmVFcnJvciA9IE9UX0VSUk9SX05PTkU7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIGVmcjMyUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAvLyBlbnN1cmUgcHJvY2VzcyB3b3VsZCBub3QgYmUgYnJva2VuIGJ5CisgICAgLy8gdGhlIGluY29taW5nIGludGVycnVwdCB3aXRoIGhpZ2hlciBwcmlvcml0eQorICAgIENPUkVfREVDTEFSRV9JUlFfU1RBVEU7CisgICAgQ09SRV9FTlRFUl9DUklUSUNBTCgpOworCisgICAgaWYgKChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRSAmJiBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPiAwKSB8fAorICAgICAgICAoc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUICYmIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA+IElFRUU4MDIxNTRfQUNLX0xFTkdUSCkpCisgICAgeworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworICAgICAgICBpZiAob3RQbGF0RGlhZ01vZGVHZXQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgb3RQbGF0RGlhZ1JhZGlvUmVjZWl2ZURvbmUoYUluc3RhbmNlLCAmc1JlY2VpdmVGcmFtZSwgc1JlY2VpdmVFcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHNpZ25hbCBNQUMgbGF5ZXIgZm9yIGVhY2ggcmVjZWl2ZWQgZnJhbWUgaWYgcHJvbWlzY291cyBpcyBlbmFibGVkCisgICAgICAgICAgICAvLyBvdGhlcndpc2Ugb25seSBzaWduYWwgTUFDIGxheWVyIGZvciBub24tQUNLIGZyYW1lCisgICAgICAgICAgICBpZiAoc1Byb21pc2N1b3VzIHx8IHNSZWNlaXZlRnJhbWUubUxlbmd0aCA+IElFRUU4MDIxNTRfQUNLX0xFTkdUSCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdExvZ0luZm9QbGF0KHNJbnN0YW5jZSwgIlJlY2VpdmVkICVkIGJ5dGVzIiwgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlRnJhbWUsIHNSZWNlaXZlRXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9UUkFOU01JVCAmJiBzVHJhbnNtaXRCdXN5ID09IGZhbHNlKQorICAgIHsKKyAgICAgICAgaWYgKHNUcmFuc21pdEVycm9yICE9IE9UX0VSUk9SX05PTkUgfHwgKHNUcmFuc21pdEZyYW1lLm1Qc2R1WzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNUcmFuc21pdEVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJUcmFuc21pdCBmYWlsZWQgRXJyb3JDb2RlPSVkIiwgc1RyYW5zbWl0RXJyb3IpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgICAgICBpZiAob3RQbGF0RGlhZ01vZGVHZXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXREaWFnUmFkaW9UcmFuc21pdERvbmUoYUluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsIHNUcmFuc21pdEVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90UGxhdFJhZGlvVHhEb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCBOVUxMLCBzVHJhbnNtaXRFcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID09IElFRUU4MDIxNTRfQUNLX0xFTkdUSCAmJgorICAgICAgICAgICAgICAgICAoc1JlY2VpdmVGcmFtZS5tUHNkdVswXSAmIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLKSA9PSBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfQUNLICYmCisgICAgICAgICAgICAgICAgIChzUmVjZWl2ZUZyYW1lLm1Qc2R1W0lFRUU4MDIxNTRfRFNOX09GRlNFVF0gPT0gc1RyYW5zbWl0RnJhbWUubVBzZHVbSUVFRTgwMjE1NF9EU05fT0ZGU0VUXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisKKyAgICAgICAgICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiUmVjZWl2ZWQgQUNLOiVkIiwgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoKTsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvVHhEb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCAmc1JlY2VpdmVGcmFtZSwgc1RyYW5zbWl0RXJyb3IpOworICAgICAgICB9CisgICAgfQorCisgICAgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICBDT1JFX0VYSVRfQ1JJVElDQUwoKTsKK30KKwordm9pZCBSQUlMQ2JfUnhBY2tUaW1lb3V0KHZvaWQpCit7CisgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9OT19BQ0s7Cit9CisKK3ZvaWQgUkFJTENiX1JmUmVhZHkodm9pZCkKK3sKK30KKwordm9pZCBSQUlMQ2JfQ2FsTmVlZGVkKHZvaWQpCit7Cit9CisKK3ZvaWQgUkFJTENiX1J4UmFkaW9TdGF0dXModWludDhfdCBhU3RhdHVzKQoreworICAgICh2b2lkKWFTdGF0dXM7Cit9CisKK3ZvaWQgUkFJTENiX1JhZGlvU3RhdGVDaGFuZ2VkKHVpbnQ4X3QgYVN0YXRlKQoreworICAgICh2b2lkKWFTdGF0ZTsKK30KKwordm9pZCBSQUlMQ2JfUnNzaUF2ZXJhZ2VEb25lKGludDE2X3QgYXZnUnNzaSkKK3sKKyAgICAodm9pZClhdmdSc3NpOworfQorCit2b2lkIFJBSUxDYl9SeEZpZm9BbG1vc3RGdWxsKHVpbnQxNl90IGFCeXRlc0F2YWlsYWJsZSkKK3sKKyAgICAodm9pZClhQnl0ZXNBdmFpbGFibGU7Cit9CisKK3ZvaWQgUkFJTENiX1R4Rmlmb0FsbW9zdEVtcHR5KHVpbnQxNl90IGFTcGFjZUF2YWlsYWJsZSkKK3sKKyAgICAodm9pZClhU3BhY2VBdmFpbGFibGU7Cit9CisKK3ZvaWQgKlJBSUxDYl9BbGxvY2F0ZU1lbW9yeSh1aW50MzJfdCBhU2l6ZSkKK3sKKyAgICB1aW50OF90ICpwb2ludGVyID0gTlVMTDsKKyAgICBDT1JFX0RFQ0xBUkVfSVJRX1NUQVRFOworCisgICAgQ09SRV9FTlRFUl9DUklUSUNBTCgpOworCisgICAgb3RFWFBFQ1QoYVNpemUgPD0gKElFRUU4MDIxNTRfTUFYX0xFTkdUSCArIDEgKyBzaXplb2YoUkFJTF9SeFBhY2tldEluZm9fdCkpKTsKKworICAgIHBvaW50ZXIgPSBzUmVjZWl2ZUJ1ZmZlcjsKKworZXhpdDoKKyAgICBDT1JFX0VYSVRfQ1JJVElDQUwoKTsKKyAgICByZXR1cm4gcG9pbnRlcjsKK30KKwordm9pZCAqUkFJTENiX0JlZ2luV3JpdGVNZW1vcnkodm9pZCAqYUhhbmRsZSwgdWludDMyX3QgYU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICphdmFpbGFibGUpCit7CisgICAgKHZvaWQpYXZhaWxhYmxlOworICAgIHJldHVybiAoKHVpbnQ4X3QgKilhSGFuZGxlKSArIGFPZmZzZXQ7Cit9CisKK3ZvaWQgUkFJTENiX0VuZFdyaXRlTWVtb3J5KHZvaWQgKmFIYW5kbGUsIHVpbnQzMl90IGFPZmZzZXQsIHVpbnQzMl90IGFTaXplKQoreworICAgICh2b2lkKWFIYW5kbGU7CisgICAgKHZvaWQpYU9mZnNldDsKKyAgICAodm9pZClhU2l6ZTsKK30KKwordm9pZCBSQUlMQ2JfRnJlZU1lbW9yeSh2b2lkICphSGFuZGxlKQoreworICAgICh2b2lkKWFIYW5kbGU7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXREZWZhdWx0VHhQb3dlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUG93ZXIpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIFJBSUxfVHhQb3dlclNldChhUG93ZXIpOworfQorCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gRUZSMzJfUkVDRUlWRV9TRU5TSVRJVklUWTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9yYW5kb20uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjdiMzNmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3JhbmRvbS5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCisjaW5jbHVkZSAiZW1fYWRjLmgiCisjaW5jbHVkZSAiZW1fY211LmgiCisKK2VudW0KK3sKKyAgICBFRlIzMl9BRENfUkVGX0NMT0NLID0gNzAwMDAwMCwKK307CisKK3ZvaWQgZWZyMzJSYW5kb21Jbml0KHZvaWQpCit7CisgICAgLyogRW5hYmxlIEFEQyBDbG9jayAqLworICAgIENNVV9DbG9ja0VuYWJsZShjbXVDbG9ja19BREMwLCB0cnVlKTsKKyAgICBBRENfSW5pdF9UeXBlRGVmIGluaXQgPSBBRENfSU5JVF9ERUZBVUxUOworICAgIEFEQ19Jbml0U2luZ2xlX1R5cGVEZWYgc2luZ2xlSW5pdCA9IEFEQ19JTklUU0lOR0xFX0RFRkFVTFQ7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBBREMgd2l0aCB0aGUgcmVxdWlyZWQgdmFsdWVzICovCisgICAgaW5pdC50aW1lYmFzZSA9IEFEQ19UaW1lYmFzZUNhbGMoMCk7CisgICAgaW5pdC5wcmVzY2FsZSA9IEFEQ19QcmVzY2FsZUNhbGMoRUZSMzJfQURDX1JFRl9DTE9DSywgMCk7CisgICAgQURDX0luaXQoQURDMCwgJmluaXQpOworCisgICAgLyogSW5pdGlhbGl6ZSBmb3Igc2luZ2xlIGNvbnZlcnNpb24gc3BlY2lmaWMgdG8gUk5HICovCisgICAgc2luZ2xlSW5pdC5yZWZlcmVuY2UgPSBhZGNSZWZWRW50cm9weTsKKyAgICBzaW5nbGVJbml0LmRpZmYgPSB0cnVlOworICAgIHNpbmdsZUluaXQucG9zU2VsID0gYWRjUG9zU2VsVlNTOworICAgIHNpbmdsZUluaXQubmVnU2VsID0gYWRjTmVnU2VsVlNTOworICAgIEFEQ19Jbml0U2luZ2xlKEFEQzAsICZzaW5nbGVJbml0KTsKKworICAgIC8qIFNldCBWSU5BVFQgdG8gbWF4aW11bSB2YWx1ZSBhbmQgY2xlYXIgRklGTyAqLworICAgIEFEQzAtPlNJTkdMRUNUUkxYIHw9IF9BRENfU0lOR0xFQ1RSTFhfVklOQVRUX01BU0s7CisgICAgQURDMC0+U0lOR0xFRklGT0NMRUFSID0gQURDX1NJTkdMRUZJRk9DTEVBUl9TSU5HTEVGSUZPQ0xFQVI7Cit9CisKK3VpbnQzMl90IG90UGxhdFJhbmRvbUdldCh2b2lkKQoreworICAgIHVpbnQ4X3QgdG1wID0gMDsKKyAgICB1aW50MzJfdCByYW5kb20gPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCisgICAgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDM7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgQURDX1N0YXJ0KEFEQzAsIGFkY1N0YXJ0U2luZ2xlKTsKKworICAgICAgICAgICAgd2hpbGUgKChBREMwLT5JRiAmIEFEQ19JRl9TSU5HTEUpID09IDApOworCisgICAgICAgICAgICB0bXAgfD0gKChBRENfRGF0YVNpbmdsZUdldChBREMwKSAmIDB4MDcpIDw8IChqICogMykpOworICAgICAgICB9CisKKyAgICAgICAgcmFuZG9tIHw9ICh0bXAgJiAweGZmKSA8PCAoaSAqIDgpOworICAgIH0KKworICAgIHJldHVybiByYW5kb207Cit9CisKK290RXJyb3Igb3RQbGF0UmFuZG9tR2V0VHJ1ZSh1aW50OF90ICphT3V0cHV0LCB1aW50MTZfdCBhT3V0cHV0TGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGFPdXRwdXQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGZvciAodWludDE2X3QgbGVuZ3RoID0gMDsgbGVuZ3RoIDwgYU91dHB1dExlbmd0aDsgbGVuZ3RoKyspCisgICAgeworICAgICAgICBhT3V0cHV0W2xlbmd0aF0gPSAodWludDhfdClvdFBsYXRSYW5kb21HZXQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3N0YXJ0dXAtZ2NjLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvc3RhcnR1cC1nY2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzYwNzNiCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3N0YXJ0dXAtZ2NjLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBnY2Mtc3BlY2lmaWMgc3RhcnR1cCBjb2RlIGZvciB0aGUgZWZyMzIuCisgKi8KKworX19leHRlbnNpb25fXyB0eXBlZGVmIGludCBfX2d1YXJkIF9fYXR0cmlidXRlX18oKG1vZGUoX19ESV9fKSkpOworaW50IF9fY3hhX2d1YXJkX2FjcXVpcmUoX19ndWFyZCAqZykgeyByZXR1cm4gISooY2hhciAqKShnKTsgfQordm9pZCBfX2N4YV9ndWFyZF9yZWxlYXNlKF9fZ3VhcmQgKmcpIHsgKihjaGFyICopZyA9IDE7IH0KK3ZvaWQgX19jeGFfZ3VhcmRfYWJvcnQoX19ndWFyZCAqZykgeyAodm9pZClnOyB9Cit2b2lkIF9fY3hhX3B1cmVfdmlydHVhbCh2b2lkKSB7IHdoaWxlICgxKTsgfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3VhcnQuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2NDI1NQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi91YXJ0LmMKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIFVBUlQgY29tbXVuaWNhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vdWFydC5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCisjaW5jbHVkZSAiYnNwY29uZmlnLmgiCisjaW5jbHVkZSAiZW1fY211LmgiCisjaW5jbHVkZSAiZW1fZ3Bpby5oIgorI2luY2x1ZGUgImVtX3VzYXJ0LmgiCisKK2VudW0KK3sKKyAgICBrUGxhdGZvcm1DbG9jayAgICAgPSAzMjAwMDAwMCwKKyAgICBrQmF1ZFJhdGUgICAgICAgICAgPSAxMTUyMDAsCisgICAga1JlY2VpdmVCdWZmZXJTaXplID0gMTI4LAorfTsKKworc3RhdGljIHZvaWQgcHJvY2Vzc1JlY2VpdmUodm9pZCk7CitzdGF0aWMgdm9pZCBwcm9jZXNzVHJhbnNtaXQodm9pZCk7CisKK3N0YXRpYyBjb25zdCB1aW50OF90ICpzVHJhbnNtaXRCdWZmZXIgPSBOVUxMOworc3RhdGljIHVpbnQxNl90ICAgICAgIHNUcmFuc21pdExlbmd0aCA9IDA7CisKK3R5cGVkZWYgc3RydWN0IFJlY3ZCdWZmZXIKK3sKKyAgICAvLyBUaGUgZGF0YSBidWZmZXIKKyAgICB1aW50OF90IG1CdWZmZXJba1JlY2VpdmVCdWZmZXJTaXplXTsKKyAgICAvLyBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBpdGVtIHdyaXR0ZW4gdG8gdGhlIGxpc3QuCisgICAgdWludDE2X3QgbUhlYWQ7CisgICAgLy8gVGhlIG9mZnNldCBvZiB0aGUgbmV4dCBpdGVtIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGxpc3QuCisgICAgdWludDE2X3QgbVRhaWw7Cit9IFJlY3ZCdWZmZXI7CisKK3N0YXRpYyBSZWN2QnVmZmVyICAgICBzUmVjZWl2ZTsKKworb3RFcnJvciBvdFBsYXRVYXJ0RW5hYmxlKHZvaWQpCit7CisgICAgVVNBUlRfVHlwZURlZiAgICAgICAgICAgKnVzYXJ0ID0gVVNBUlQwOworICAgIFVTQVJUX0luaXRBc3luY19UeXBlRGVmIGluaXQgICA9IFVTQVJUX0lOSVRBU1lOQ19ERUZBVUxUOworCisgICAgc1JlY2VpdmUubUhlYWQgPSAwOworICAgIHNSZWNlaXZlLm1UYWlsID0gMDsKKworICAgIC8qIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrcyAqLworICAgIENNVV9DbG9ja0VuYWJsZShjbXVDbG9ja19IRlBFUiwgdHJ1ZSk7CisgICAgLyogQ29uZmlndXJlIEdQSU8gcGlucyAqLworICAgIENNVV9DbG9ja0VuYWJsZShjbXVDbG9ja19HUElPLCB0cnVlKTsKKworICAgIC8qIENvbmZpZ3VyZSBHUElPIHBpbiBmb3IgVUFSVCBUWCAqLworICAgIC8qIFRvIGF2b2lkIGZhbHNlIHN0YXJ0LCBjb25maWd1cmUgb3V0cHV0IGFzIGhpZ2guICovCisgICAgR1BJT19QaW5Nb2RlU2V0KEJTUF9CQ0NfVFhQT1JULCBCU1BfQkNDX1RYUElOLCBncGlvTW9kZVB1c2hQdWxsLCAxdSk7CisgICAgLyogQ29uZmlndXJlIEdQSU8gcGluIGZvciBVQVJUIFJYICovCisgICAgR1BJT19QaW5Nb2RlU2V0KEJTUF9CQ0NfUlhQT1JULCBCU1BfQkNDX1JYUElOLCBncGlvTW9kZUlucHV0LCAxdSk7CisKKyAgICAvKiBFbmFibGUgdGhlIHN3aXRjaCB0aGF0IGVuYWJsZXMgVUFSVCBjb21tdW5pY2F0aW9uLiAqLworICAgIEdQSU9fUGluTW9kZVNldChCU1BfQkNDX0VOQUJMRV9QT1JULCBCU1BfQkNDX0VOQUJMRV9QSU4sIGdwaW9Nb2RlUHVzaFB1bGwsIDF1KTsKKworICAgIENNVV9DbG9ja0VuYWJsZShjbXVDbG9ja19VU0FSVDAsIHRydWUpOworCisgICAgLyogQ29uZmlndXJlIFVTQVJUIGZvciBiYXNpYyBhc3luYyBvcGVyYXRpb24gKi8KKyAgICBpbml0LmVuYWJsZSA9IHVzYXJ0RGlzYWJsZTsKKyAgICBVU0FSVF9Jbml0QXN5bmModXNhcnQsICZpbml0KTsKKworICAgIC8qIEVuYWJsZSBwaW5zIGF0IGNvcnJlY3QgVUFSVC9VU0FSVCBsb2NhdGlvbi4gKi8KKyAgICB1c2FydC0+Uk9VVEVQRU4gPSBVU0FSVF9ST1VURVBFTl9SWFBFTiB8IFVTQVJUX1JPVVRFUEVOX1RYUEVOOworICAgIHVzYXJ0LT5ST1VURUxPQzAgPSAodXNhcnQtPlJPVVRFTE9DMCAmIH4oX1VTQVJUX1JPVVRFTE9DMF9UWExPQ19NQVNLIHwgX1VTQVJUX1JPVVRFTE9DMF9SWExPQ19NQVNLKSkKKyAgICAgICAgICAgICAgICAgICAgICAgfCAoX1VTQVJUX1JPVVRFTE9DMF9UWExPQ19MT0MwIDw8IF9VU0FSVF9ST1VURUxPQzBfVFhMT0NfU0hJRlQpCisgICAgICAgICAgICAgICAgICAgICAgIHwgKF9VU0FSVF9ST1VURUxPQzBfUlhMT0NfTE9DMCA8PCBfVVNBUlRfUk9VVEVMT0MwX1JYTE9DX1NISUZUKTsKKworICAgIC8qIENsZWFyIHByZXZpb3VzIFJYIGludGVycnVwdHMgKi8KKyAgICBVU0FSVF9JbnRDbGVhcih1c2FydCwgVVNBUlRfSUZfUlhEQVRBVik7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoVVNBUlQwX1JYX0lSUW4pOworCisgICAgLyogRW5hYmxlIFJYIGludGVycnVwdHMgKi8KKyAgICBVU0FSVF9JbnRFbmFibGUodXNhcnQsIFVTQVJUX0lGX1JYREFUQVYpOworICAgIE5WSUNfRW5hYmxlSVJRKFVTQVJUMF9SWF9JUlFuKTsKKworICAgIC8qIEZpbmFsbHkgZW5hYmxlIGl0ICovCisgICAgVVNBUlRfRW5hYmxlKHVzYXJ0LCB1c2FydEVuYWJsZSk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordm9pZCBVU0FSVDBfUlhfSVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmIChVU0FSVDAtPlNUQVRVUyAmIFVTQVJUX1NUQVRVU19SWERBVEFWKQorICAgIHsKKyAgICAgICAgdWludDhfdCBieXRlID0gVVNBUlRfUngoVVNBUlQwKTsKKworICAgICAgICAvLyBXZSBjYW4gb25seSB3cml0ZSBpZiBpbmNyZW1lbnRpbmcgbVRhaWwgZG9lc24ndCBlcXVhbCBtSGVhZAorICAgICAgICBpZiAoc1JlY2VpdmUubUhlYWQgIT0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNSZWNlaXZlLm1CdWZmZXJbc1JlY2VpdmUubVRhaWxdID0gYnl0ZTsKKyAgICAgICAgICAgIHNSZWNlaXZlLm1UYWlsID0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK290RXJyb3Igb3RQbGF0VWFydERpc2FibGUodm9pZCkKK3sKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCitvdEVycm9yIG90UGxhdFVhcnRTZW5kKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1RyYW5zbWl0QnVmZmVyID09IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQlVTWSk7CisKKyAgICBzVHJhbnNtaXRCdWZmZXIgPSBhQnVmOworICAgIHNUcmFuc21pdExlbmd0aCA9IGFCdWZMZW5ndGg7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIHByb2Nlc3NSZWNlaXZlKHZvaWQpCit7CisgICAgLy8gQ29weSB0YWlsIHRvIHByZXZlbnQgbXVsdGlwbGUgcmVhZHMKKyAgICB1aW50MTZfdCB0YWlsID0gc1JlY2VpdmUubVRhaWw7CisKKyAgICAvLyBJZiB0aGUgZGF0YSB3cmFwcyBhcm91bmQsIHByb2Nlc3MgdGhlIGZpcnN0IHBhcnQKKyAgICBpZiAoc1JlY2VpdmUubUhlYWQgPiB0YWlsKQorICAgIHsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKHNSZWNlaXZlLm1CdWZmZXIgKyBzUmVjZWl2ZS5tSGVhZCwga1JlY2VpdmVCdWZmZXJTaXplIC0gc1JlY2VpdmUubUhlYWQpOworCisgICAgICAgIC8vIFJlc2V0IHRoZSBidWZmZXIgbUhlYWQgYmFjayB0byB6ZXJvLgorICAgICAgICBzUmVjZWl2ZS5tSGVhZCA9IDA7CisgICAgfQorCisgICAgLy8gRm9yIGFueSBkYXRhIHJlbWFpbmluZywgcHJvY2VzcyBpdAorICAgIGlmIChzUmVjZWl2ZS5tSGVhZCAhPSB0YWlsKQorICAgIHsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKHNSZWNlaXZlLm1CdWZmZXIgKyBzUmVjZWl2ZS5tSGVhZCwgdGFpbCAtIHNSZWNlaXZlLm1IZWFkKTsKKworICAgICAgICAvLyBTZXQgbUhlYWQgdG8gdGhlIGxvY2FsIHRhaWwgd2UgaGF2ZSBjYWNoZWQKKyAgICAgICAgc1JlY2VpdmUubUhlYWQgPSB0YWlsOworICAgIH0KK30KKwordm9pZCBwcm9jZXNzVHJhbnNtaXQodm9pZCkKK3sKKyAgICBvdEVYUEVDVChzVHJhbnNtaXRCdWZmZXIgIT0gTlVMTCk7CisKKyAgICBmb3IgKDsgc1RyYW5zbWl0TGVuZ3RoID4gMDsgc1RyYW5zbWl0TGVuZ3RoLS0pCisgICAgeworICAgICAgICBVU0FSVF9UeChVU0FSVDAsICpzVHJhbnNtaXRCdWZmZXIrKyk7CisgICAgfQorCisgICAgc1RyYW5zbWl0QnVmZmVyID0gTlVMTDsKKyAgICBvdFBsYXRVYXJ0U2VuZERvbmUoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgZWZyMzJVYXJ0UHJvY2Vzcyh2b2lkKQoreworICAgIHByb2Nlc3NSZWNlaXZlKCk7CisgICAgcHJvY2Vzc1RyYW5zbWl0KCk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYmYwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE3MyBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitsaWJfTElCUkFSSUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxpYm9wZW50aHJlYWQtZW1zay5hCisKKyMgRG8gbm90IGVuYWJsZSAtV2NvbnZlcnNpb24gZm9yIGVtc2sKK292ZXJyaWRlIENGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1XY29udmVyc2lvbiwkKENGTEFHUykpCitvdmVycmlkZSBDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9ICQoZmlsdGVyLW91dCAtV2NvbnZlcnNpb24sJChDWFhGTEFHUykpCisKKyMgRG8gbm90IGVuYWJsZSAtcGVkYW50aWMtZXJyb3JzIGZvciBlbXNrCitvdmVycmlkZSBDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9ICQoZmlsdGVyLW91dCAtcGVkYW50aWMtZXJyb3JzLCQoQ0ZMQUdTKSkKK292ZXJyaWRlIENYWEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1wZWRhbnRpYy1lcnJvcnMsJChDWFhGTEFHUykpCisKKyMgRG8gbm90IGVuYWJsZSAtV2Vycm9yIGZvciBlbXNrCitvdmVycmlkZSBDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9ICQoZmlsdGVyLW91dCAtV2Vycm9yLCQoQ0ZMQUdTKSkKK292ZXJyaWRlIENYWEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1XZXJyb3IsJChDWFhGTEFHUykpCisKKyMgRG8gbm90IGVuYWJsZSAtV2Zvcm1hdCBmb3IgZW1zaworb3ZlcnJpZGUgQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSAkKGZpbHRlci1vdXQgLVdmb3JtYXQsJChDRkxBR1MpKQorb3ZlcnJpZGUgQ1hYRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSAkKGZpbHRlci1vdXQgLVdmb3JtYXQsJChDWFhGTEFHUykpCisKK0NPTU1PTkNQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjL2NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLVduby11bmtub3duLXByYWdtYXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW51c2VkLWZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLVduby11bnVzZWQtdmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8taW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtV25vLXVudXNlZC12YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLVduby11bnVzZWQtYnV0LXNldC12YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdHlwZS1saW1pdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtV25vLXNpZ24tY29tcGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLVduby11bnVzZWQtbGFiZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUExBVEZPUk1fU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBhbGFybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmxhc2guYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1pc2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhbmRvbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1YXJ0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcGxhdGZvcm0tZW1zay5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworU1lOT1BTWVNfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL3N0YXJ0dXAvYXJjX2N4eF9zdXBwb3J0LmMgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9zdGFydHVwL2FyY19zdGFydHVwLlMgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX2NhY2hlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL2FyY19leGNfYXNtLlMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9hcmNfZXhjZXB0aW9uLmMgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX3RpbWVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vZW1za19pbml0LmMgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL2Vtc2tfdGltZXIuYyAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXguYyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9ncGlvL2R3X2dwaW9fb2JqLmMgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9lbXNrX2dwaW8uYyAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3BtcmYvbXJmMjRqNDAuYyAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9wbXJmL3BtcmYuYyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svc3BpL2R3X3NwaV9vYmouYyAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaWZsYXNoL3NwaWZsYXNoLmMgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay91YXJ0L2R3X3VhcnRfb2JqLmMgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2JvYXJkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24veHByaW50Zi94cHJpbnRmLmMgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvY29tbW9uL2NvbnNvbGVfaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL2dwaW8vZHdfZ3Bpby5jICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpLmMgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvdWFydC9kd191YXJ0LmMgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfbWlzYy5jICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3NicmsuYyAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ19zeXNjYWxscy5jICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfdGFyZ2V0LmMgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZmF0ZnNfZGlyZW50LmMgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL21hbGxvYy5jICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi95YV9nZXRvcHQuYyAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGlib3BlbnRocmVhZF9lbXNrX2FfQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKENPTU1PTkNQUEZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2Vtc2tfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoUExBVEZPUk1fU09VUkNFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKFNZTk9QU1lTX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitub2luc3RfSEVBREVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL2Vtc2tfdGltZXIuaCAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXguaCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vbXV4X2hhbC5oICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9kd19ncGlvX29iai5oICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZW1za19ncGlvLmggICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9wbXJmL21yZjI0ajQwLmggICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svcG1yZi9wbXJmLmggICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaS9kd19zcGlfb2JqLmggICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9zcGlmbGFzaC9zcGlmbGFzaC5oICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svdWFydC9kd191YXJ0X29iai5oICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2Vtc2suaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9lbXNrX2hhcmR3YXJlLmggICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2NvbW1vbi94cHJpbnRmL3hwcmludGYuaCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24vY29uc29sZV9pby5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvZ3Bpby9kd19ncGlvLmggICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGkuaCAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpX2hhbC5oICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaV9oYWxfY2ZnLmggICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydC5oICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS91YXJ0L2R3X3VhcnRfaGFsLmggICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9jb21tb24uaCAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfZ3Bpby5oICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X3NwaS5oICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl91YXJ0LmggICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19hc21fY29tbW9uLmggICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfYnVpbHRpbi5oICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2NhY2hlLmggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19lbS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmggICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2ZlYXR1cmVfY29uZmlnLmggICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY190aW1lci5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2VtYkFSQ19lcnJvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9lbWJBUkNfdG9vbGNoYWluLmggICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmNfY29yZV9jb25maWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZW1iQVJDX0JTUF9jb25maWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9kaXJlbnQuaCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3N5c2NhbGxzLmggICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ190YXJnZXQuaCAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9mYXRmc19kaXJlbnQuaCAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIveWFfZ2V0b3B0LmggICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitQUkVUVFlfRklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoUExBVEZPUk1fU09VUkNFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0Rhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAtCisKK2xpYm9wZW50aHJlYWRfZW1za19hX0xJQkFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMgJChEYXNoKXR5cGUgZiAkKERhc2gpbmFtZSAiKi5vIikKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9SRUFETUUubWQgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhMzc4MgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL1JFQURNRS5tZApAQCAtMCwwICsxLDE1OCBAQAorIyBPcGVuVGhyZWFkIG9uIEVNU0sgRXhhbXBsZQorCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBleGFtcGxlIHBsYXRmb3JtIGRyaXZlcnMgZm9yIFN5bm9wc3lzIFtEZXNpZ25XYXJlwq4gQVJDwq4gRU1dW2FyY2VtXSBTdGFydGVyIEtpdCAyLjNbKEVNU0syLjMpXVtlbXNrMjNdIGFuZCBEaWdpbGVudCBbUG1vZCBSRjJdW3Btb2RyZjJdIGVxdWlwcGVkIHdpdGggdGhlIE1pY3JvY2hpcCBbTVJGMjRKNDBdW21yZjI0ajQwXSBJRUVFIDgwMi4xNS404oSiIDIuNEdIeiBSRiB0cmFuc2NlaXZlci4KKworW2FyY2VtXTogaHR0cHM6Ly93d3cuc3lub3BzeXMuY29tL2Rlc2lnbndhcmUtaXAvcHJvY2Vzc29yLXNvbHV0aW9ucy9hcmMtcHJvY2Vzc29ycy9hcmMtZW0tZmFtaWx5Lmh0bWwKKworW2Vtc2syM106IGh0dHBzOi8vd3d3LnN5bm9wc3lzLmNvbS9kdy9pcGRpci5waHA/ZHM9YXJjX2VtX3N0YXJ0ZXJfa2l0CisKK1twbW9kcmYyXTogaHR0cHM6Ly9yZWZlcmVuY2UuZGlnaWxlbnRpbmMuY29tL3JlZmVyZW5jZS9wbW9kL3Btb2RyZjIvc3RhcnQKKworW21yZjI0ajQwXTogaHR0cDovL3d3dy5taWNyb2NoaXAuY29tL3d3d3Byb2R1Y3RzL2VuL2VuMDI3NzUyCisKKyMjIE5vdGUKKworVGhlIEVNU0sgcGxhdGZvcm0gaXMgYSBjb25maWd1cmFibGUsIEZQR0EtYmFzZWQgc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxhdGZvcm0gZm9yIHRoZSBBUkMgRU0gUHJvY2Vzc29yIEZhbWlseS4gUGxlYXNlIG5vdGUgdGhhdDoKKworKiBUaGUgcGxhdGZvcm0gZG9lcyBub3QgY3VycmVudGx5IGZlYXR1cmUgYSBUcnVlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChUUk5HKSwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIGNlcnRpZmljYXRpb24gdG8gdGhlIFRocmVhZCBTcGVjaWZpY2F0aW9uLiBVc2VycyBsb29raW5nIHRvIGNlcnRpZnkgdGhlIE9wZW5UaHJlYWQgaW1wbGVtZW50YXRpb24gZm9yIHRoZWlyIG93biBBUkMtYmFzZWQgcGxhdGZvcm1zIHdpbGwgbmVlZCB0byBhZGQgYSBUUk5HIHRvIHRoZWlyIHBsYXRmb3JtIGFuZCBtb2RpZnkgb3VyIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBFTVNLIGFjY29yZGluZ2x5IGluIG9yZGVyIHRvIGFjaGlldmUgY2VydGlmaWNhdGlvbiBmb3IgdGhlaXIgcGxhdGZvcm0uCisqIFRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBjdXJyZW50bHkgY29udGFpbiBhIG9uLWNoaXAgRVVJNjQsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBhIG5ldHdvcmsgZGV2aWNlLiBVc2VycyB3aWxsIG5lZWQgdG8gYWRkIGEgdW5pcXVlIG51bWJlciBhcyBFVUk2NCBmb3IgdGhlaXIgb3duIEFSQy1iYXNlZCBwbGF0Zm9ybSBpbiBgPHBhdGgtdG8tb3BlbnRocmVhZD4vZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcmFkaW8uY2AuIEl0IGNhbiBiZSBzZXQgbWFudWFsbHkgb3IgbG9hZGVkIGZyb20gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKworIyMgVG9vbGNoYWluCisKK0Rvd25sb2FkIGFuZCBpbnN0YWxsIFtHTlUgdG9vbGNoYWluIGZvciBBUkMgRU1dW2dudS10b29sY2hhaW5dLgorCitbZ251LXRvb2xjaGFpbl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mb3NzLWZvci1zeW5vcHN5cy1kd2MtYXJjLXByb2Nlc3NvcnMvdG9vbGNoYWluL3RhZ3MKKworRG93bmxvYWQgYW5kIGluc3RhbGwgW0RpZ2lsZW50IEFkZXB0IFNvZnR3YXJlXVtkaWdpbGVudC1hZGVwdF0gZm9yIHRoZSBEaWdpbGVudCBKVEFHLVVTQiBjYWJsZS4KKworW2RpZ2lsZW50LWFkZXB0XTogaHR0cHM6Ly9zdG9yZS5kaWdpbGVudGluYy5jb20vZGlnaWxlbnQtYWRlcHQtMi1kb3dubG9hZC1vbmx5CisKKyMjIEJ1aWxkaW5nIHRoZSBleGFtcGxlcworCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtZW1zayBjbGVhbgorJCBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWVtc2sKK2BgYAorCitBZnRlciBhIHN1Y2Nlc3NmdWwgYnVpbGQsIHRoZSBgZWxmYCBmaWxlcyBjYW4gYmUgZm91bmQgaW4KK2A8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQvYXJjLWVsZjMyL2JpbmAuICBZb3UgY2FuIGNvbnZlcnQgdGhlbSB0byBgYmluYAorZmlsZXMgdXNpbmcgYGFyYy1lbGYzMi1vYmpjb3B5YDoKK2BgYGJhc2gKKyQgYXJjLWVsZjMyLW9iamNvcHkgLU8gYmluYXJ5IG90LWNsaS1mdGQgb3QtY2xpLWZ0ZC5iaW4KK2BgYAorCisjIyBCb290aW5nIHRoZSBiaW5hcmllcyBmcm9tIFNEIGNhcmQKKworZW1iQVJDIFtlbWJhcmNdIGlzIGFuIG9wZW4gc29mdHdhcmUgcGxhdGZvcm0gdG8gZmFjaWxpdGF0ZSB0aGUgZGV2ZWxvcG1lbnQgb2YgZW1iZWRkZWQgc3lzdGVtcyBiYXNlZCBvbiBBUkN2MiBwcm9jZXNzb3JzLiBEb3dubG9hZCBlbWJBUkMgW2VtYmFyY10gdG8gZ2VuZXJhdGUgYW5kIGZsYXNoIHRoZSBFTVNLIGJvb3Rsb2FkZXIgZnJvbSBzb3VyY2UgY29kZS4gU2VlIHRoZSBhcHBsaWNhdGlvbiBub3RlIFtVc2luZyBhIHNlY29uZGFyeSBib290bG9hZGVyIG9uIHRoZSBFTVNLXVtib290bG9hZGVyLWFwcG5vdGVdIGZvciBkZXRhaWxzLgorCitbZW1iYXJjXTogaHR0cHM6Ly9lbWJhcmMub3JnL2luZGV4Lmh0bWwKKworW2Jvb3Rsb2FkZXItYXBwbm90ZV06IGh0dHBzOi8vZW1iYXJjLm9yZy9wZGYvMjAxNTA3MTBfZW1iQVJDX2FwcGxpY2F0aW9uX25vdGVfc2Vjb25kYXJ5X2Jvb3Rsb2FkZXIucGRmCisKK01vZGlmeSB0aGUgZmlsZSBuYW1lIGBhcmMtZWxmMzItb3QtY2xpLWZ0ZC5iaW5gIHRvIGBib290LmJpbmAuIENvcHkgYGJvb3QuYmluYCB0byB0aGUgU0QgY2FyZC4gVGhlIEVNU0syLjMgaW5jbHVkZXMgYW4gU1BJIGZsYXNoIHN0b3JhZ2UgZGV2aWNlIHByZS1wcm9ncmFtbWVkIHdpdGggRlBHQSBpbWFnZXMgY29udGFpbmluZyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgb2YgRGVzaWduV2FyZcKuIEFSQyBFTSBjb3Jlcy4gU2V0IHBpbnMgMSBhbmQgNCBvZiBgU1cxYCBESVAgc3dpdGNoIGFuZCBwcmVzcyBgRlBHQSBjb25maWd1cmVgIGJ1dHRvbiB0byBjb25maWd1cmUgdGhlIEFSQyBFTTExRCBhbmQgc2Vjb25kYXJ5IGJvb3Rsb2FkZXIuCisKKyMjIFJ1bm5pbmcgdGhlIGV4YW1wbGUKKworMS4gUHJlcGFyZSB0d28gRU1TSzIuMyBib2FyZHMgYW5kIGNvcHkgdGhlIGBib290LmJpbmAgKENMSSBleGFtcGxlKSB0byB0aGUgRU1TSzIuMyBTRCBjYXJkIChhcyBzaG93biBhYm92ZSkuCisKKzIuIFRoZSBDTEkgZXhhbXBsZSB1c2VzIFVBUlQgY29ubmVjdGlvbi4gVG8gdmlldyByYXcgVUFSVCBvdXRwdXQsIHN0YXJ0IGEgdGVybWluYWwgZW11bGF0b3IgbGlrZSBUZXJhIFRlcm0gYW5kIFB1VFRZLiBDb25uZWN0IEVNU0sgSjcgdG8gdGhlIENPTSBwb3J0IHdpdGggdGhlIGZvbGxvd2luZyBzZXJpYWwgcG9ydCBzZXR0aW5nczoKKyAgICAtIEJhdWQgcmF0ZTogMTE1MjAwCisgICAgLSA4IGRhdGEgYml0cworICAgIC0gMSBzdG9wIGJpdAorICAgIC0gTm8gcGFyaXR5CisgICAgLSBObyBmbG93IGNvbnRyb2wKKworMy4gT3BlbiBhIHRlcm1pbmFsIGNvbm5lY3Rpb24gb24gdGhlIGZpcnN0IGJvYXJkLiBUaGUgYGJvb3QuYmluYCBpbiB0aGUgU0QgY2FyZCB3aWxsIGJlIGxvYWRlZCB0byB0aGUgRU1TSyBhZnRlciBhIGZldyBzZWNvbmRzLgorCisgYGBgYmFzaAorIE1SRjI0SjQwIEluaXQgc3RhcnRlZC4KKyBNUkYyNEo0MCBJbml0IGZpbmlzaGVkLgorIE5vZGUgTm8uIDoKKyBgYGAKKworNC4gU2V0IHRoZSBub2RlIG51bWJlciBtYW51YWxseS4gSW5wdXQgYDFgIGFuZCBwcmVzcyB0aGUgYEVudGVyYCBrZXkgaW4gdGhlIHRlcm1pbmFsIGVtdWxhdG9yLgorCisgYGBgYmFzaAorIE5vZGUgTm8uIDoxCisgT3BlblRocmVhZCBJbml0IEZpbmlzaGVkCisgYGBgCisKKzQuIFN0YXJ0IGEgbmV3IFRocmVhZCBuZXR3b3JrLgorCisgYGBgYmFzaAorID4gcGFuaWQgMHgxMjM0CisgRG9uZQorID4gaWZjb25maWcgdXAKKyBEb25lCisgPiB0aHJlYWQgc3RhcnQKKyBEb25lCisgYGBgCisKKzQuIEFmdGVyIGEgY291cGxlIG9mIHNlY29uZHMgdGhlIG5vZGUgd2lsbCBiZWNvbWUgYSBMZWFkZXIgb2YgdGhlIG5ldHdvcmsuCisKKyBgYGBiYXNoCisgPiBzdGF0ZQorIExlYWRlcgorIGBgYAorCis1LiBPcGVuIGEgdGVybWluYWwgY29ubmVjdGlvbiBhbmQgcmVzZXQgdGhlIHNlY29uZCBib2FyZC4gQWZ0ZXIgYSBmZXcgc2Vjb25kcywgaW5wdXQgYDJgIGFuZCBwcmVzcyB0aGUgYEVudGVyYCBrZXkgaW4gdGhlIHRlcm1pbmFsIGVtdWxhdG9yLgorCisgYGBgYmFzaAorIE1SRjI0SjQwIEluaXQgc3RhcnRlZC4KKyBNUkYyNEo0MCBJbml0IGZpbmlzaGVkLgorIE5vZGUgTm8uIDoyCisgT3BlblRocmVhZCBJbml0IEZpbmlzaGVkCisgYGBgCisKKzYuIEF0dGFjaCB0aGUgc2Vjb25kIG5vZGUgdG8gdGhlIG5ldHdvcmsuCisKKyBgYGBiYXNoCisgPiBwYW5pZCAweDEyMzQKKyBEb25lCisgPiBpZmNvbmZpZyB1cAorIERvbmUKKyA+IHRocmVhZCBzdGFydAorIERvbmUKKyBgYGAKKworNi4gQWZ0ZXIgYSBjb3VwbGUgb2Ygc2Vjb25kcyB0aGUgc2Vjb25kIG5vZGUgd2lsbCBhdHRhY2ggYW5kIGJlY29tZSBhIENoaWxkLgorCisgYGBgYmFzaAorID4gc3RhdGUKKyBDaGlsZAorIGBgYAorCis3LiBMaXN0IGFsbCBJUHY2IGFkZHJlc3NlcyBvZiB0aGUgZmlyc3QgYm9hcmQuCisKKyBgYGBiYXNoCisgPiBpcGFkZHIKKyBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpmYzAwCisgZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6ZWMwMAorIGZkZGU6YWQwMDpiZWVmOjA6NGY2ZTo3ZTUzOjY3Yzg6ZjViMAorIGZlODA6MDowOjA6YzQ2MjpmMTY1OjQ0ZWI6ZWY5ZgorIGBgYAorCis4LiBDaG9vc2Ugb25lIG9mIHRoZW0gYW5kIHNlbmQgYW4gSUNNUHY2IHBpbmcgZnJvbSB0aGUgc2Vjb25kIGJvYXJkLgorCisgYGBgYmFzaAorID4gcGluZyBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDplYzAwCisgOCBieXRlcyBmcm9tIGZkZGU6YWQwMDpiZWVmOjA6MDpmZjpmZTAwOmVjMDA6IGljbXBfc2VxPTEgaGxpbT02NCB0aW1lPTMwbXMKKyBgYGAKKworRm9yIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzLCB2aXNpdCBbT3BlblRocmVhZCBDTEkgUmVmZXJlbmNlIFJFQURNRS5tZF1bQ0xJXS4KKworW0NMSV06IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvYmxvYi9tYXN0ZXIvc3JjL2NsaS9SRUFETUUubWQKKworIyMgVmVyaWZpY2F0aW9uCisKK1RoZSBmb2xsb3dpbmcgaGFyZHdhcmUgaGF2ZSBiZWVuIHVzZWQgZm9yIHRlc3RpbiBhbmQgdmVyaWZpY2F0aW9uOgorICAtIEFSQyBFTTExRCBvbiBFTVNLMi4zCisgIC0gUG1vZCBSRjIKKworVGhlIGZvbGxvd2luZyB0b29sY2hhaW5zIGFuZCBzb2Z0d2FyZSBoYXZlIGJlZW4gdXNlZCBmb3IgdGVzdGluZyBhbmQgdmVyaWZpY2F0aW9uOgorICAtIGFyYy0yMDE2LjA5LXJlbGVhc2UKKyAgLSBlbWJBUkMgMjAxNi4wNQorCitUaGUgRU1TSyBleGFtcGxlIGhhcyBiZWVuIHZlcmlmaWVkIGJ5IFN5bm9wc3lzIHdpdGggY29tbWl0IGAwNjRhYmEyYC4KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9hbGFybS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzZTBkNjEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9hbGFybS5jCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgYWxhcm0uCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oIgorI2luY2x1ZGUgInBsYXRmb3JtLWVtc2suaCIKKworc3RhdGljIHVpbnQzMl90IHNDb3VudGVyID0gMDsKK3N0YXRpYyB1aW50MzJfdCBleHBpcmVzOworc3RhdGljIGJvb2wgc0lzUnVubmluZyA9IGZhbHNlOworCit2b2lkIGVtc2tBbGFybUluaXQodm9pZCkKK3sKKyAgICBzQ291bnRlciA9IE9TUF9HRVRfQ1VSX01TKCk7Cit9CisKK3VpbnQzMl90IG90UGxhdEFsYXJtR2V0Tm93KHZvaWQpCit7CisgICAgcmV0dXJuIChPU1BfR0VUX0NVUl9NUygpIC0gc0NvdW50ZXIpOworfQorCit2b2lkIG90UGxhdEFsYXJtU3RhcnRBdChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IHQwLCB1aW50MzJfdCBkdCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgZXhwaXJlcyA9IHQwICsgZHQ7CisgICAgc0lzUnVubmluZyA9IHRydWU7Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc0lzUnVubmluZyA9IGZhbHNlOworfQorCit2b2lkIGVtc2tBbGFybVVwZGF0ZVRpbWVvdXQoaW50MzJfdCAqYVRpbWVvdXQpCit7CisgICAgaW50MzJfdCByZW1haW5pbmc7CisKKyAgICBvdEVYUEVDVChhVGltZW91dCAhPSBOVUxMKTsKKworICAgIGlmIChzSXNSdW5uaW5nKQorICAgIHsKKyAgICAgICAgcmVtYWluaW5nID0gKGludDMyX3QpKGV4cGlyZXMgLSBvdFBsYXRBbGFybUdldE5vdygpKTsKKworICAgICAgICBpZiAocmVtYWluaW5nID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgKmFUaW1lb3V0ID0gcmVtYWluaW5nOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgKmFUaW1lb3V0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqYVRpbWVvdXQgPSAxMDAwMDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworCit9CisKK3ZvaWQgZW1za0FsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaW50MzJfdCByZW1haW5pbmc7CisKKyAgICBpZiAoc0lzUnVubmluZykKKyAgICB7CisgICAgICAgIHJlbWFpbmluZyA9IChpbnQzMl90KShleHBpcmVzIC0gb3RQbGF0QWxhcm1HZXROb3coKSk7CisKKyAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzSXNSdW5uaW5nID0gZmFsc2U7CisgICAgICAgICAgICBvdFBsYXRBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgICAgIH0KKworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svZW1zay5sZCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2Vtc2subGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTQwOTZiOAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2Vtc2subGQKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1NFQVJDSF9ESVIoLikKK0dST1VQKC4uLy4uLy4uL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2xpYm9wZW50aHJlYWQtZW1zay5hIGxpYmdjYy5hIGxpYmMuYSBsaWJub3N5cy5hKQorCitNRU1PUlkKK3sKKyBJQ0NNIDogT1JJR0lOID0gMHgwMDAwMDAwMCwgTEVOR1RIID0gMHgxMDAwMAorIERDQ00gOiBPUklHSU4gPSAweDgwMDAwMDAwLCBMRU5HVEggPSAweDEwMDAwCisgRVhUX1JBTSA6IE9SSUdJTiA9IDB4MTAwMDAwMDAsIExFTkdUSCA9IDB4ODAwMDAwMAorfQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAuaW5pdCA6CisgeworICBfZl9pbml0ID0gLjsKKyAgS0VFUCAoKiguaW5pdF92ZWN0b3IpKQorICBLRUVQICgqKC5pbml0X2Jvb3RzdHJhcCkpCisgIF9lX2luaXQgPSAuOworIH0gPiBFWFRfUkFNCisgLnZlY3RvciA6IEFMSUdOKDEwMjQpCisgeworICBfZl92ZWN0b3IgPSAuOworICAqKC52ZWN0b3IpCisgIF9lX3ZlY3RvciA9IC47CisgfSA+IEVYVF9SQU0KKyAudGV4dCA6IEFMSUdOKDQpCisgeworICBfZl90ZXh0ID0gLjsKKyAgKigudGV4dCAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICBfZV90ZXh0ID0gLjsKKyB9ID4gRVhUX1JBTQorIC5yb2RhdGEgOiBBTElHTig0KQorIHsKKyAgX2Zfcm9kYXRhID0gLjsKKyAgLiA9IEFMSUdOKDQpOworICBfX0NUT1JfTElTVF9fID0gLjsKKyAgTE9ORygoX19DVE9SX0VORF9fIC0gX19DVE9SX0xJU1RfXykgLyA0IC0gMikKKyAgS0VFUCgqKFNPUlRfQllfTkFNRSgiLmN0b3JzKiIpKSkKKyAgTE9ORygwKQorICBfX0NUT1JfRU5EX18gPSAuOworICAuID0gQUxJR04oNCk7CisgIF9faW5pdF9hcnJheV9zdGFydCA9IC47CisgIEtFRVAoKihTT1JUX0JZX05BTUUoIi5pbml0X2FycmF5KiIpKSkKKyAgX19pbml0X2FycmF5X2VuZCA9IC47CisgIC4gPSBBTElHTig0KTsKKyAgX19EVE9SX0xJU1RfXyA9IC47CisgIExPTkcoKF9fRFRPUl9FTkRfXyAtIF9fRFRPUl9MSVNUX18pIC8gNCAtIDIpCisgIEtFRVAoKihTT1JUX0JZX05BTUUoIi5kdG9ycyoiKSkpCisgIExPTkcoMCkKKyAgX19EVE9SX0VORF9fID0gLjsKKyAgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikKKyAgX2Vfcm9kYXRhID0gLjsKKyB9ID4gRVhUX1JBTQorIC5kYXRhIDogQUxJR04oNCkKKyB7CisgIF9mX2RhdGEgPSAuOworICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgIF9mX3NkYXRhID0gLjsKKyAgX19TREFUQV9CRUdJTl9fID0gLjsKKyAgKiguc2RhdGEgLnNkYXRhLiogLmdudS5saW5rb25jZS5zLiopCisgIF9lX3NkYXRhID0gLjsKKyAgX2VfZGF0YSA9IC47CisgfSA+IEVYVF9SQU0gQVQgPiBFWFRfUkFNCisgLmJzcyAoTk9MT0FEKSA6IEFMSUdOKDgpCisgeworICBQUk9WSURFIChfX3Nic3Nfc3RhcnQgPSAuKTsKKyAgUFJPVklERSAoX19fc2Jzc19zdGFydCA9IC4pOworICBfZl9ic3MgPSAuOworICBfZl9zYnNzID0gLjsKKyAgKiguZHluc2JzcykKKyAgKiguc2JzcyAuc2Jzcy4qIC5nbnUubGlua29uY2Uuc2IuKikKKyAgKiguc2NvbW1vbikKKyAgX2Vfc2JzcyA9IC47CisgIFBST1ZJREUgKF9fc2Jzc19lbmQgPSAuKTsKKyAgUFJPVklERSAoX19fc2Jzc19lbmQgPSAuKTsKKyAgKiguZHluYnNzKQorICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAqKENPTU1PTikKKyAgX2VfYnNzID0gLjsKKyB9ID4gRVhUX1JBTQorIC5zdGFjayAoTk9MT0FEKSA6CisgeworICAuID0gQUxJR04oNCk7CisgIF9mX3N0YWNrID0gLjsKKyAgLiA9IC4gKyA1MjQyODg7CisgIF9lX3N0YWNrID0gLjsKKyB9ID4gRVhUX1JBTQorIC5oZWFwIChOT0xPQUQpIDoKKyB7CisgIC4gPSBBTElHTig0KTsKKyAgX19zdGFydF9oZWFwID0gLiA7CisgIF9mX2hlYXAgPSAuOworICAuID0gLiArIDUyNDI4ODsKKyAgX2VfaGVhcCA9IC47CisgIF9fZW5kX2hlYXAgPSAuIDsKKyB9ID4gRVhUX1JBTQorIF9sb2FkX2FkZHJfdGV4dCA9IExPQURBRERSKC50ZXh0KTsKKyBfbG9hZF9hZGRyX3JvZGF0YSA9IExPQURBRERSKC5yb2RhdGEpOworIF9sb2FkX2FkZHJfZGF0YSA9IExPQURBRERSKC5kYXRhKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MGVkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9mbGFzaC5jCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBmbGFzaC4KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oIgorI2luY2x1ZGUgPHV0aWxzL2ZsYXNoLmg+CisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorI2luY2x1ZGUgInBsYXRmb3JtLWVtc2suaCIKKworLyoqCisgKiBFTVNLIEhBUyAxMjggTWJpdCAoMTYgTUIpIFNQSSBmbGFzaCBtZW1vcnkgKFdpbmJvbmQgVzI1UTEyOEJWKS4KKyAqIFRoZSBXaW5ib25kIFcyNVExMjhCViBhcnJheSBpcyBvcmdhbml6ZWQgaW50byA2NTUzNiBwcm9ncmFtbWFibGUgcGFnZXMgb2YKKyAqIDI1Ni1ieXRlIGVhY2guIFVwIHRvIDI1NiBieXRlcyBjYW4gYmUgcHJvZ3JhbW1lZCBhdCBhIHRpbWUuIFBhZ2VzIGNhbiBiZQorICogZXJhc2VkIGluIGdyb3VwcyBvZiAxNiAoNEtCIHNlY3RvciBlcmFzZSkuCisgKi8KKworLyoqCisgKiBFTVNLIFNQSWZsYXNoIG1lbW9yeSBtYXAgd2l0aCB1c2luZyBlbWJBUkMKKyAqIEZQR0EgaW1hZ2U6IGZyb20gMHgwMDAwIDAwMDAKKyAqIFNlY29uZGFyeSBib290bG9hZGVyOiBmcm9tIDB4MDA3OCAwMDAwCisgKiBBdmFpbGFibGUgZm9yIE9wZW5UaHJlYWQ6IGZyb20gMHgwMEZGIEQwMDAgdG8gMHgwMEZGIEVGRkYKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0ZMQVNIX0JBU0UgICAgICAgMHgwMGZmZDAwMAorI2RlZmluZSBPUEVOVEhSRUFEX0ZMQVNIX1NJWkUgICAgICAgMHgwMDAwMjAwMAorCisvKioKKyAqIERlZmluZSBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTLAorICogICAgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRSwgYW5kCisgKiAgICBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0gZm9yIEVNU0sKKyAqLworI2lmZGVmIFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1MKKyN1bmRlZiBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTCisjZW5kaWYgLy8gU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUworI2RlZmluZSBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTICAgIDB4MDBmZmUwMDAKKworI2lmZGVmIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkUKKyN1bmRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFCisjZW5kaWYgLy8gU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRQorI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFICAgRkxBU0hfU0VDVE9SX1NJWkUKKworI2lmZGVmIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTQorI3VuZGVmIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTQorI2VuZGlmIC8vIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTQorI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0gICAgMQorCitvdEVycm9yIHV0aWxzRmxhc2hJbml0KHZvaWQpCit7CisgICAgZmxhc2hfaW5pdCgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoR2V0U2l6ZSh2b2lkKQoreworICAgIHJldHVybiAodWludDMyX3QpRkxBU0hfU0VDVE9SX1NJWkU7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaEVyYXNlUGFnZSh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBpbnQzMl90IHN0YXR1czsKKworICAgIG90RVhQRUNUX0FDVElPTigoYUFkZHJlc3MgPj0gT1BFTlRIUkVBRF9GTEFTSF9CQVNFKSAmJiAoYUFkZHJlc3MgPCAoT1BFTlRIUkVBRF9GTEFTSF9CQVNFICsgT1BFTlRIUkVBRF9GTEFTSF9TSVpFIC0gMSkpLAorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAvKiBVc2UgMiBzZWN0b3JzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiwgY2Fubm90IGVyYXNlIHRoZSBhZGRyZXNzIG92ZXIgdGhlIGJvdW5kcnkgKi8KKyAgICBzdGF0dXMgPSBmbGFzaF9lcmFzZShhQWRkcmVzcywgRkxBU0hfU0VDVE9SX1NJWkUpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKHN0YXR1cyAhPSAtMSwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoU3RhdHVzV2FpdCh1aW50MzJfdCBhVGltZW91dCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MzJfdCBzdGFydCA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgYm9vbCBidXN5ID0gdHJ1ZTsKKyAgICB1aW50MzJfdCBzdGF0dXMgPSAweDAxOworCisgICAgd2hpbGUgKGJ1c3kgJiYgKChvdFBsYXRBbGFybUdldE5vdygpIC0gc3RhcnQpIDwgYVRpbWVvdXQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gZmxhc2hfcmVhZF9zdGF0dXMoKTsKKyAgICAgICAgYnVzeSA9ICBzdGF0dXMgJiAweDAxOworICAgIH0KKworICAgIG90RVhQRUNUX0FDVElPTighYnVzeSwgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIGludDMyX3Qgd3JpdHRlbl9zaXplID0gMDsKKyAgICB1aW50MzJfdCBzaXplID0gMDsKKworICAgIG90RVhQRUNUX0FDVElPTigoYUFkZHJlc3MgPj0gT1BFTlRIUkVBRF9GTEFTSF9CQVNFKSAmJgorICAgICAgICAgICAgICAgICAgICAoKGFBZGRyZXNzICsgYVNpemUpIDw9IE9QRU5USFJFQURfRkxBU0hfQkFTRSArIE9QRU5USFJFQURfRkxBU0hfU0laRSkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCEoYUFkZHJlc3MgJiAzKSkgJiYgKCEoYVNpemUgJiAzKSksIDspOworCisgICAgd3JpdHRlbl9zaXplID0gZmxhc2hfd3JpdGUoYUFkZHJlc3MsIGFTaXplLCBhRGF0YSk7CisKKyAgICBpZiAod3JpdHRlbl9zaXplIDwgMCkKKyAgICB7CisgICAgICAgIHNpemUgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplID0gKHVpbnQzMl90KXdyaXR0ZW5fc2l6ZTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHNpemU7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hSZWFkKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgaW50MzJfdCByZWFkX3NpemUgPSAwOworICAgIHVpbnQzMl90IHNpemUgPSAwOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKChhQWRkcmVzcyA+PSBPUEVOVEhSRUFEX0ZMQVNIX0JBU0UpICYmCisgICAgICAgICAgICAgICAgICAgICgoYUFkZHJlc3MgKyBhU2l6ZSkgPD0gT1BFTlRIUkVBRF9GTEFTSF9CQVNFICsgT1BFTlRIUkVBRF9GTEFTSF9TSVpFKSwgOyk7CisKKyAgICByZWFkX3NpemUgPSBmbGFzaF9yZWFkKGFBZGRyZXNzLCBhU2l6ZSwgYURhdGEpOworCisgICAgaWYgKHJlYWRfc2l6ZSA8IDApCisgICAgeworICAgICAgICBzaXplID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6ZSA9ICh1aW50MzJfdClyZWFkX3NpemU7CisgICAgfQorCisKK2V4aXQ6CisgICAgcmV0dXJuIHNpemU7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9sb2dnaW5nLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9sb2dnaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjQzNmE0MAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2xvZ2dpbmcuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBsb2dnaW5nLgorICoKKyAqLworCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmgiCisKK3ZvaWQgb3RQbGF0TG9nKG90TG9nTGV2ZWwgYUxvZ0xldmVsLCBvdExvZ1JlZ2lvbiBhTG9nUmVnaW9uLCBjb25zdCBjaGFyICphRm9ybWF0LCAuLi4pCit7CisgICAgKHZvaWQpYUxvZ0xldmVsOworICAgICh2b2lkKWFMb2dSZWdpb247CisgICAgKHZvaWQpYUZvcm1hdDsKK30KKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svbWlzYy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyOGYwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9taXNjLmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oIgorI2luY2x1ZGUgInBsYXRmb3JtLWVtc2suaCIKKwordm9pZCBvdFBsYXRSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgLy8gRGVmYXVsdAorICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBtcmYyNGo0MF9oYXJkX3Jlc2V0KCk7Cit9CisKK290UGxhdFJlc2V0UmVhc29uIG90UGxhdEdldFJlc2V0UmVhc29uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgLy8gVE9ETzogV3JpdGUgbWUhCisgICAgcmV0dXJuIE9UX1BMQVRfUkVTRVRfUkVBU09OX1BPV0VSX09OOworfQorCit2b2lkIG90UGxhdFdha2VIb3N0KHZvaWQpCit7CisgICAgLy8gVE9ETzogaW1wbGVtZW50IGFuIG9wZXJhdGlvbiB0byB3YWtlIHRoZSBob3N0IGZyb20gc2xlZXAgc3RhdGUuCit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9vcGVudGhyZWFkLWNvcmUtZW1zay1jb25maWcuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL29wZW50aHJlYWQtY29yZS1lbXNrLWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OGJkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9vcGVudGhyZWFkLWNvcmUtZW1zay1jb25maWcuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBFTVNLIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGNvbnN0YW50cyBmb3IgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9FTVNLX0NPTkZJR19IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPUkVfRU1TS19DT05GSUdfSF8KKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQKKyAqCisgKiBEZWZpbmUgdG8gMSB0byBlbmFibGUgZGVmYXVsdCBsb2cgb3V0cHV0LgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUICAgICAgICAgICAgIDEKKworIC8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUCisgICoKKyAgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc29mdHdhcmUgQUNLIHRpbWVvdXQgbG9naWMuCisgICoKKyAgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUICAgICAgICAgICAwCisKKyAvKioKKyAgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCisgICoKKyAgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc29mdHdhcmUgcmV0cmFuc21pc3Npb24gbG9naWMuCisgICoKKyAgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQgICAgICAgICAgICAwCisKKyAvKioKKyAgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorICAqCisgICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIGVuZXJneSBzY2FubmluZyBsb2dpYy4KKyAgKgorICAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4gICAgICAgICAgIDAKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPUkVfRU1TS19DT05GSUdfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3BsYXRmb3JtLWVtc2suaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3BsYXRmb3JtLWVtc2suaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTdkODRlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcGxhdGZvcm0tZW1zay5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXplcnMuCisgKgorICovCisKKyNpZm5kZWYgUExBVEZPUk1fRU1TS19IXworI2RlZmluZSBQTEFURk9STV9FTVNLX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSAib3BlbnRocmVhZC90eXBlcy5oIgorCisjaW5jbHVkZSAiYm9hcmQvYm9hcmQuaCIKKworLy8gR2xvYmFsIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlCitleHRlcm4gb3RJbnN0YW5jZSAqc0luc3RhbmNlOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGFsYXJtIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBlbXNrQWxhcm1Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB0aW1lIHJlbWFpbmluZyB1bnRpbCB0aGUgYWxhcm0gZmlyZXMuCisgKgorICogQHBhcmFtW291dF0gIGFUaW1ldmFsICBBIHBvaW50ZXIgdG8gdGltZXIgdmFsdWUuCisgKgorICovCit2b2lkIGVtc2tBbGFybVVwZGF0ZVRpbWVvdXQoaW50MzJfdCAqYVRpbWVvdXQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYWxhcm0gZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICovCit2b2lkIGVtc2tBbGFybVByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSByYWRpbyBzZXJ2aWNlIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqCisgKi8KK3ZvaWQgZW1za1JhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHJhZGlvIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqLwordm9pZCBlbXNrUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcmFuZG9tIG51bWJlciBzZXJ2aWNlIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqCisgKi8KK3ZvaWQgZW1za1JhbmRvbUluaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBVQVJUIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqLwordm9pZCBlbXNrVWFydFByb2Nlc3Modm9pZCk7CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fRU1TS19IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcGxhdGZvcm0uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWM3OWU0MAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5pdGlhbGl6ZXJzLgorICoKKyAqLworCisjaW5jbHVkZSAib3BlbnRocmVhZC9vcGVudGhyZWFkLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0tZW1zay5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgREJHKGZtdCwgLi4uKSAgIHByaW50ZihmbXQsICMjX19WQV9BUkdTX18pCisKK3ZvaWQgUGxhdGZvcm1Jbml0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgZW1za0FsYXJtSW5pdCgpOworICAgIGVtc2tSYWRpb0luaXQoKTsKKyAgICBlbXNrUmFuZG9tSW5pdCgpOworICAgIG90UGxhdFVhcnRFbmFibGUoKTsKKworICAgIERCRygiT3BlblRocmVhZCBJbml0IEZpbmlzaGVkXHJcbiIpOworCisgICAgKHZvaWQpYXJnYzsKKyAgICAodm9pZClhcmd2OworfQorCit2b2lkIFBsYXRmb3JtUHJvY2Vzc0RyaXZlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIC8vIHNJbnN0YW5jZSA9IGFJbnN0YW5jZTsKKworICAgIGVtc2tVYXJ0UHJvY2VzcygpOworICAgIGVtc2tSYWRpb1Byb2Nlc3MoYUluc3RhbmNlKTsKKyAgICBlbXNrQWxhcm1Qcm9jZXNzKGFJbnN0YW5jZSk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9yYWRpby5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGI3NzViCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcmFkaW8uYwpAQCAtMCwwICsxLDY3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgcmFkaW8gY29tbXVuaWNhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgIm9wZW50aHJlYWQvdHlwZXMuaCIKKworI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmgiCisjaW5jbHVkZSAicGxhdGZvcm0tZW1zay5oIgorCisjaW5jbHVkZSAiZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9ncGlvLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBEQkcoZm10LCAuLi4pICAgcHJpbnRmKGZtdCwgIyNfX1ZBX0FSR1NfXykKKworZW51bQoreworICAgIElFRUU4MDIxNTRfTUlOX0xFTkdUSCAgICAgICAgID0gNSwKKyAgICBJRUVFODAyMTU0X01BWF9MRU5HVEggICAgICAgICA9IDEyNywKKyAgICBJRUVFODAyMTU0X0FDS19MRU5HVEggICAgICAgICA9IDUsCisKKyAgICBJRUVFODAyMTU0X0JST0FEQ0FTVCAgICAgICAgICA9IDB4ZmZmZiwKKworICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9BQ0sgICAgID0gMiA8PCAwLAorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQUNDTUQgID0gMyA8PCAwLAorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLICAgID0gNyA8PCAwLAorCisgICAgSUVFRTgwMjE1NF9TRUNVUklUWV9FTkFCTEVEICAgPSAxIDw8IDMsCisgICAgSUVFRTgwMjE1NF9GUkFNRV9QRU5ESU5HICAgICAgPSAxIDw8IDQsCisgICAgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCAgICAgICAgPSAxIDw8IDUsCisgICAgSUVFRTgwMjE1NF9QQU5JRF9DT01QUkVTU0lPTiAgPSAxIDw8IDYsCisKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX05PTkUgICAgICA9IDAgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX1NIT1JUICAgICA9IDIgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX0VYVCAgICAgICA9IDMgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX01BU0sgICAgICA9IDMgPDwgMiwKKworICAgIElFRUU4MDIxNTRfU1JDX0FERFJfTk9ORSAgICAgID0gMCA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfU0hPUlQgICAgID0gMiA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfRVhUICAgICAgID0gMyA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfTUFTSyAgICAgID0gMyA8PCA2LAorCisgICAgSUVFRTgwMjE1NF9EU05fT0ZGU0VUICAgICAgICAgPSAyLAorICAgIElFRUU4MDIxNTRfRFNUUEFOX09GRlNFVCAgICAgID0gMywKKyAgICBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUICAgICA9IDUsCisKKyAgICBJRUVFODAyMTU0X1NFQ19MRVZFTF9NQVNLICAgICA9IDcgPDwgMCwKKworICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMCAgICAgID0gMCA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMSAgICAgID0gMSA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMiAgICAgID0gMiA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMyAgICAgID0gMyA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfTUFTSyAgID0gMyA8PCAzLAorCisgICAgSUVFRTgwMjE1NF9NQUNDTURfREFUQV9SRVEgICAgPSA0Cit9OworCitlbnVtCit7CisgICAgRU1TS19SRUNFSVZFX1NFTlNJVElWSVRZID0gLTEwMCwgIC8vIGRCbQorfTsKKworZW51bQoreworICAgIE1SRjI0SjQwX1JTU0lfT0ZGU0VUID0gOTAsCisgICAgTVJGMjRKNDBfUlNTSV9TTE9QRSA9IDUKK307CisKK3N0YXRpYyB2b2lkIHJhZGlvVHJhbnNtaXRNZXNzYWdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKK3N0YXRpYyBvdFJhZGlvRnJhbWUgc1RyYW5zbWl0RnJhbWU7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNSZWNlaXZlRnJhbWU7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNBY2tGcmFtZTsKKworc3RhdGljIG90RXJyb3Igc1RyYW5zbWl0RXJyb3I7CitzdGF0aWMgb3RFcnJvciBzUmVjZWl2ZUVycm9yOworCitzdGF0aWMgdWludDhfdCBzVHJhbnNtaXRQc2R1W0lFRUU4MDIxNTRfTUFYX0xFTkdUSF07CitzdGF0aWMgdWludDhfdCBzUmVjZWl2ZVBzZHVbSUVFRTgwMjE1NF9NQVhfTEVOR1RIXTsKK3N0YXRpYyB1aW50OF90IHNBY2tQc2R1W0lFRUU4MDIxNTRfTUFYX0xFTkdUSF07CisKK3N0YXRpYyBvdFJhZGlvU3RhdGUgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CitzdGF0aWMgYm9vbCBzSXNSZWNlaXZlckVuYWJsZWQgPSBmYWxzZTsKKworc3RhdGljIHZvbGF0aWxlIHVpbnQ4X3QgTXJmMjRTdGF0dXNUeCA9IDA7CitzdGF0aWMgdm9sYXRpbGUgdWludDhfdCBNcmYyNFN0YXR1c1J4ID0gMDsKK3N0YXRpYyB2b2xhdGlsZSB1aW50OF90IE1yZjI0U3RhdHVzU2VjID0gMDsKKworc3RhdGljIERFVl9TUElfUFRSIHBtcmZfc3BpX3B0cjsKK3N0YXRpYyBERVZfR1BJT19QVFIgcG1yZl9ncGlvX3B0cjsKK3N0YXRpYyB2b2lkIFJhZGlvSXNyKHZvaWQgKnB0cik7CisKKy8qIFZhcmlhYmxlcyBmb3IgdGVzdCAqLworc3RhdGljIHVpbnQzMl90IG51bUludGVycnVwdFJldiA9IDA7CitzdGF0aWMgdWludDMyX3QgbnVtSW50ZXJydXB0VHJhbnMgPSAwOworc3RhdGljIHVpbnQzMl90IG51bVJhZGlvUHJvY2VzcyA9IDA7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NlY3VyaXR5RW5hYmxlZChjb25zdCB1aW50OF90ICpmcmFtZSkKK3sKKyAgICByZXR1cm4gKGZyYW1lWzBdICYgSUVFRTgwMjE1NF9TRUNVUklUWV9FTkFCTEVEKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNBY2tSZXF1ZXN0ZWQoY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgcmV0dXJuIChmcmFtZVswXSAmIElFRUU4MDIxNTRfQUNLX1JFUVVFU1QpICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1BhbklkQ29tcHJlc3NlZChjb25zdCB1aW50OF90ICpmcmFtZSkKK3sKKyAgICByZXR1cm4gKGZyYW1lWzBdICYgSUVFRTgwMjE1NF9QQU5JRF9DT01QUkVTU0lPTikgIT0gMDsKK30KKworc3RhdGljIGlubGluZSB1aW50OF90IGdldEhlYWRMZW5ndGgoY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgdWludDhfdCBsZW5ndGggPSAwOworICAgIC8qIEZyYW1lIENvbnRyb2wtMiArIFNlcXVlbmNlIE51bWJlci0xICovCisgICAgbGVuZ3RoICs9IDIgKyAxOworCisgICAgLyogRGVzdGluYXRpb24gUEFOICsgQWRkcmVzcyAqLworICAgIHN3aXRjaCAoZnJhbWVbMV0gJiBJRUVFODAyMTU0X0RTVF9BRERSX01BU0spCisgICAgeworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9TSE9SVDoKKyAgICAgICAgbGVuZ3RoICs9IHNpemVvZihvdFBhbklkKSArIHNpemVvZihvdFNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJRUVFODAyMTU0X0RTVF9BRERSX0VYVDoKKyAgICAgICAgbGVuZ3RoICs9IHNpemVvZihvdFBhbklkKSArIHNpemVvZihvdEV4dEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKiBTb3VyY2UgUEFOICsgQWRkcmVzcyAqLworICAgIHN3aXRjaCAoZnJhbWVbMV0gJiBJRUVFODAyMTU0X1NSQ19BRERSX01BU0spCisgICAgeworICAgIGNhc2UgSUVFRTgwMjE1NF9TUkNfQUREUl9TSE9SVDoKKyAgICAgICAgaWYgKCFpc1BhbklkQ29tcHJlc3NlZChmcmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbmd0aCArPSBzaXplb2Yob3RQYW5JZCk7CisgICAgICAgIH0KKworICAgICAgICBsZW5ndGggKz0gc2l6ZW9mKG90U2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElFRUU4MDIxNTRfU1JDX0FERFJfRVhUOgorICAgICAgICBpZiAoIWlzUGFuSWRDb21wcmVzc2VkKGZyYW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgbGVuZ3RoICs9IHNpemVvZihvdFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIGxlbmd0aCArPSBzaXplb2Yob3RFeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBsZW5ndGggPSAwOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3ZvaWQgZW5hYmxlUmVjZWl2ZXIodm9pZCkKK3sKKyAgICBpZiAoIXNJc1JlY2VpdmVyRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1yZjI0ajQwX3J4Zmlmb19mbHVzaCgpOworICAgICAgICAvKiBhZGQgY29kZSB0byBlbmFibGUgcmVjZWl2ZXIgKHdha2V1cCkgKi8KKyAgICAgICAgc0lzUmVjZWl2ZXJFbmFibGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgZGlzYWJsZVJlY2VpdmVyKHZvaWQpCit7CisgICAgaWYgKHNJc1JlY2VpdmVyRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1yZjI0ajQwX3J4Zmlmb19mbHVzaCgpOworICAgICAgICAvKiBhZGQgY29kZSB0byBkaXNhYmxlIHJlY2VpdmVyIChzbGVlcCkgKi8KKyAgICAgICAgc0lzUmVjZWl2ZXJFbmFibGVkID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIHNldENoYW5uZWwodWludDhfdCBjaGFubmVsKQoreworICAgIG1yZjI0ajQwX3NldF9jaGFubmVsKChpbnQxNl90KShjaGFubmVsIC0gMTEpKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0dldEllZWVFdWk2NChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFJZWVlRXVpNjQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIC8qIHNob3VsZCBzZXQgaXQgbWFudWFsbHkgb3IgcHJlc2V0IGl0IGluIG1lbW9yeSAqLworICAgIGFJZWVlRXVpNjRbMF0gPSAweDAwOworICAgIGFJZWVlRXVpNjRbMV0gPSAweDUwOworICAgIGFJZWVlRXVpNjRbMl0gPSAweEMyOworICAgIGFJZWVlRXVpNjRbM10gPSAweEZGOworICAgIGFJZWVlRXVpNjRbNF0gPSAwWEZFOworICAgIGFJZWVlRXVpNjRbNV0gPSAwWDFEOworICAgIGFJZWVlRXVpNjRbNl0gPSAwWDMwOworICAgIGFJZWVlRXVpNjRbN10gPSAweDAwOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBwYW5pZCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgdWludDhfdCBwYW5bMl07CisKKyAgICBwYW5bMF0gPSAodWludDhfdCkocGFuaWQgJiAweEZGKTsKKyAgICBwYW5bMV0gPSAodWludDhfdCkocGFuaWQgPj4gOCk7CisgICAgbXJmMjRqNDBfc2V0X3BhbihwYW4pOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCAqYWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgbXJmMjRqNDBfc2V0X2V1aShhZGRyZXNzKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHVpbnQ4X3QgYWRkclsyXTsKKworICAgIGFkZHJbMF0gPSAodWludDhfdCkoYWRkcmVzcyAmIDB4RkYpOworICAgIGFkZHJbMV0gPSAodWludDhfdCkoYWRkcmVzcyA+PiA4KTsKKyAgICBtcmYyNGo0MF9zZXRfc2hvcnRfYWRkcihhZGRyKTsKK30KKwordm9pZCBlbXNrUmFkaW9Jbml0KHZvaWQpCit7CisgICAgREVWX0dQSU9fQklUX0lTUiBpc3I7CisgICAgREVWX0dQSU9fSU5UX0NGRyBpbnRfY2ZnOworCisgICAgaW50MzJfdCBlcmNkOworICAgIHVpbnQzMl90IHRlbXA7CisKKyAgICBzVHJhbnNtaXRGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICBzVHJhbnNtaXRGcmFtZS5tUHNkdSA9IHNUcmFuc21pdFBzZHU7CisgICAgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qc2R1ID0gc1JlY2VpdmVQc2R1OworICAgIHNBY2tGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICBzQWNrRnJhbWUubVBzZHUgPSBzQWNrUHNkdTsKKworICAgIHBtcmZfc3BpX3B0ciA9IHNwaV9nZXRfZGV2KEVNU0tfUE1SRl8wX1NQSV9JRCk7CisgICAgZXJjZCA9IHBtcmZfc3BpX3B0ci0+c3BpX29wZW4oREVWX01BU1RFUl9NT0RFLCBFTVNLX1BNUkZfMF9TUElGUkVRKTsKKworICAgIGlmICgoZXJjZCAhPSBFX09LKSAmJiAoZXJjZCAhPSBFX09QTkVEKSkKKyAgICB7CisgICAgICAgIERCRygiUG1vZFJGMiBTUEkgb3BlbiBlcnJvclxyXG4iKTsKKyAgICB9CisKKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfU0VUX0NMS19NT0RFLCBDT05WMlZPSUQoRU1TS19QTVJGXzBfU1BJQ0xLTU9ERSkpOworCisgICAgLypNUkYyNEo0MCB3YWtlcGluOm91dHB1dCwgcnN0cGluOm91dHB1dCwgSU5UX1BJTjppbnB1dCwgaW50ZXJydXB0ICovCisgICAgcG1yZl9ncGlvX3B0ciA9IGdwaW9fZ2V0X2RldihFTVNLX1BNUkZfMF9HUElPX0lEKTsKKyAgICBlcmNkID0gcG1yZl9ncGlvX3B0ci0+Z3Bpb19vcGVuKE1SRjI0SjQwX1dBS0VfUElOIHwgTVJGMjRKNDBfUlNUX1BJTik7CisKKyAgICBpZiAoKGVyY2QgIT0gRV9PSykgJiYgKGVyY2QgIT0gRV9PUE5FRCkpCisgICAgeworICAgICAgICBEQkcoIlBtb2RSRjIgQ1JUTCBwb3J0IG9wZW4gZXJyb3IiKTsKKyAgICB9CisKKyAgICBpZiAoZXJjZCA9PSBFX09QTkVEKQorICAgIHsKKyAgICAgICAgcG1yZl9ncGlvX3B0ci0+Z3Bpb19jb250cm9sKEdQSU9fQ01EX1NFVF9CSVRfRElSX09VVFBVVCwgKHZvaWQgKikoTVJGMjRKNDBfV0FLRV9QSU4gfCBNUkYyNEo0MF9SU1RfUElOKSk7CisgICAgICAgIHBtcmZfZ3Bpb19wdHItPmdwaW9fY29udHJvbChHUElPX0NNRF9TRVRfQklUX0RJUl9JTlBVVCwgKHZvaWQgKilNUkYyNEo0MF9JTlRfUElOKTsKKyAgICB9CisKKyAgICBwbXJmX2dwaW9fcHRyLT5ncGlvX2NvbnRyb2woR1BJT19DTURfRElTX0JJVF9JTlQsICh2b2lkICopTVJGMjRKNDBfSU5UX1BJTik7CisKKyAgICB0ZW1wID0gTVJGMjRKNDBfSU5UX1BJTjsKKyAgICBpbnRfY2ZnLmludF9iaXRfbWFzayA9IHRlbXA7CisgICAgaW50X2NmZy5pbnRfYml0X3R5cGUgPSBHUElPX0lOVF9CSVRTX0VER0VfVFJJRyh0ZW1wKTsKKyAgICBpbnRfY2ZnLmludF9iaXRfcG9sYXJpdHkgPSBHUElPX0lOVF9CSVRTX1BPTF9GQUxMX0VER0UodGVtcCk7CisgICAgaW50X2NmZy5pbnRfYml0X2RlYm91bmNlID0gR1BJT19JTlRfQklUU19ESVNfREVCT1VOQ0UodGVtcCk7CisgICAgcG1yZl9ncGlvX3B0ci0+Z3Bpb19jb250cm9sKEdQSU9fQ01EX1NFVF9CSVRfSU5UX0NGRywgKHZvaWQgKikoJmludF9jZmcpKTsKKworICAgIGlzci5pbnRfYml0X29mcyA9IE1SRjI0SjQwX0lOVF9QSU5fT0ZTOworICAgIGlzci5pbnRfYml0X2hhbmRsZXIgPSBSYWRpb0lzcjsKKyAgICBwbXJmX2dwaW9fcHRyLT5ncGlvX2NvbnRyb2woR1BJT19DTURfU0VUX0JJVF9JU1IsICh2b2lkICopKCZpc3IpKTsKKworICAgIC8qIGludGVycnVwdCBmb3IgbXJmMjRqNDAgaXMgZW5hYmxlZCBhdCB0aGUgZW5kIG9mIHRoZSBpbml0IHByb2Nlc3MgKi8KKyAgICBEQkcoIk1SRjI0SjQwIEluaXQgU3RhcnRlZFxyXG4iKTsKKyAgICBtcmYyNGo0MF9pbml0aWFsaXplKCk7CisgICAgREJHKCJNUkYyNEo0MCBJbml0IEZpbmlzaGVkXHJcbiIpOworCisgICAgcG1yZl9ncGlvX3B0ci0+Z3Bpb19jb250cm9sKEdQSU9fQ01EX0VOQV9CSVRfSU5ULCAodm9pZCAqKU1SRjI0SjQwX0lOVF9QSU4pOworCit9CisKK2Jvb2wgb3RQbGF0UmFkaW9Jc0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9FbmFibGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIGlmICghb3RQbGF0UmFkaW9Jc0VuYWJsZWQoYUluc3RhbmNlKSkKKyAgICB7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKG90UGxhdFJhZGlvSXNFbmFibGVkKGFJbnN0YW5jZSkpCisgICAgeworICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRDsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1NsZWVwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1NMRUVQIHx8IHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9TTEVFUDsKKyAgICAgICAgZGlzYWJsZVJlY2VpdmVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvUmVjZWl2ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoYW5uZWwpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEU7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgaWYgKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCkKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKyAgICAgICAgc2V0Q2hhbm5lbChhQ2hhbm5lbCk7CisgICAgICAgIHNSZWNlaXZlRnJhbWUubUNoYW5uZWwgPSBhQ2hhbm5lbDsKKyAgICAgICAgZW5hYmxlUmVjZWl2ZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhRnJhbWU7CisKKyAgICBpZiAoc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKworfQorCitvdFJhZGlvRnJhbWUgKm90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gJnNUcmFuc21pdEZyYW1lOworfQorCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSc3NpKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIDA7Cit9CisKK290UmFkaW9DYXBzIG90UGxhdFJhZGlvR2V0Q2FwcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBPVF9SQURJT19DQVBTX05PTkU7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9HZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAoYm9vbCkobXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWE1DUikgJiBNUkYyNEo0MF9QUk9NSSk7Cit9CisKKy8vIHNob3VsZCBiZSBjaGVja2VkIGFnYWluIHdpdGggQ0MyNTM4Cit2b2lkIG90UGxhdFJhZGlvU2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIG1yZjI0ajQwX3NldF9wcm9taXNjdW91cyh+YUVuYWJsZSk7Cit9CisKK3ZvaWQgcmVhZEZyYW1lKHZvaWQpCit7CisKKyAgICAvKiByZWFkQnVmZmVyCisgICAgICogMSBiaXQgLS0gNSB0byAxMjcgYml0cyAtLSAxIGJpdCAtLSAxYml0CisgICAgICogRnJhbWUgTGVuZ3RoIC0tIFBTRFUgKEhlYWRlciArIERhdGEgUGF5bG9hZCArIEZDUykgLS0gTFFJIC0tIFJTU0kKKyAgICAgKi8KKyAgICB1aW50OF90IHJlYWRCdWZmZXJbTVJGMjRKNDBfUlhGSUZPX1NJWkVdOworICAgIHVpbnQ4X3QgcmVhZFBscWkgPSAwOworICAgIHVpbnQ4X3QgcmVhZFJzc2kgPSAwOworCisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGludDE2X3QgaTsKKworICAgIG1lbXNldChyZWFkQnVmZmVyLCAwLCBNUkYyNEo0MF9SWEZJRk9fU0laRSk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUgfHwgc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlULCA7KTsKKyAgICBvdEVYUEVDVF9BQ1RJT04oTXJmMjRTdGF0dXNSeCwgOyk7CisKKyAgICBpZiAoTXJmMjRTdGF0dXNSeCA9PSAxKQorICAgIHsKKyAgICAgICAgTXJmMjRTdGF0dXNSeCA9IDA7CisgICAgfQorCisgICAgaWYgKE1yZjI0U3RhdHVzU2VjID09IDEpCisgICAgeworICAgICAgICBNcmYyNFN0YXR1c1NlYyA9IDA7CisgICAgfQorCisgICAgLyogUmVhZCBsZW5ndGggKi8KKyAgICBsZW5ndGggPSAodWludDE2X3QpbXJmMjRqNDBfcnhwa3RfaW50Y2IocmVhZEJ1ZmZlciwgJnJlYWRQbHFpLCAmcmVhZFJzc2kpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKElFRUU4MDIxNTRfTUlOX0xFTkdUSCA8PSBsZW5ndGggJiYgbGVuZ3RoIDw9IElFRUU4MDIxNTRfTUFYX0xFTkdUSCwgOyk7CisKKyAgICAvKiBSZWFkIFBTRFUgKi8KKyAgICBtZW1jcHkoc1JlY2VpdmVGcmFtZS5tUHNkdSwgcmVhZEJ1ZmZlciwgbGVuZ3RoIC0gMik7CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qb3dlciA9IChpbnQ4X3QpKHJlYWRSc3NpIC8gTVJGMjRKNDBfUlNTSV9TTE9QRSkgLSBNUkYyNEo0MF9SU1NJX09GRlNFVDsKKyAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPSAodWludDhfdCkgbGVuZ3RoOworICAgIHNSZWNlaXZlRnJhbWUubUxxaSA9IHJlYWRQbHFpOworCitleGl0OgorICAgIHJldHVybjsKKworfQorCit2b2lkIHJhZGlvVHJhbnNtaXRNZXNzYWdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgdWludDhfdCBoZWFkZXJfbGVuID0gMDsKKworICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzZXRDaGFubmVsKHNUcmFuc21pdEZyYW1lLm1DaGFubmVsKTsKKworICAgIHVpbnQ4X3QgcmVnID0gbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9UWE5DT04pOworCisgICAgaGVhZGVyX2xlbiA9IGdldEhlYWRMZW5ndGgoc1RyYW5zbWl0RnJhbWUubVBzZHUpOworCisgICAgaWYgKGlzQWNrUmVxdWVzdGVkKHNUcmFuc21pdEZyYW1lLm1Qc2R1KSkKKyAgICB7CisgICAgICAgIHJlZyB8PSBNUkYyNEo0MF9UWE5BQ0tSRVE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlZyAmPSB+KE1SRjI0SjQwX1RYTkFDS1JFUSk7CisgICAgfQorCisgICAgaWYgKGlzU2VjdXJpdHlFbmFibGVkKHNUcmFuc21pdEZyYW1lLm1Qc2R1KSkKKyAgICB7CisgICAgICAgIHJlZyB8PSBNUkYyNEo0MF9UWE5TRUNFTjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVnICY9IH4oTVJGMjRKNDBfVFhOU0VDRU4pOworICAgICAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9UWE5DT04sIG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhOQ09OKSAmICh+TVJGMjRKNDBfVFhOU0VDRU4pKTsKKyAgICB9CisKKyAgICBtcmYyNGo0MF90eGZpZm9fd3JpdGUoTVJGMjRKNDBfVFhORklGTywgc1RyYW5zbWl0RnJhbWUubVBzZHUsIGhlYWRlcl9sZW4sIChzVHJhbnNtaXRGcmFtZS5tTGVuZ3RoIC0gMikpOworCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhOQ09OLCByZWcgfCBNUkYyNEo0MF9UWE5UUklHKTsKKworICAgIGludDE2X3QgdHhfdGltZW91dCA9IDUwMDsKKyAgICBNcmYyNFN0YXR1c1R4ID0gMDsKKworICAgIHdoaWxlICgodHhfdGltZW91dCA+IDApICYmIChNcmYyNFN0YXR1c1R4ICE9IDEpKQorICAgIHsKKyAgICAgICAgbXJmMjRqNDBfZGVsYXlfbXMoMSk7CisgICAgICAgIHR4X3RpbWVvdXQtLTsKKworICAgICAgICBpZiAodHhfdGltZW91dCA8PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBEQkcoIlJhZGlvIFRyYW5zbWl0IFRpbWVvdXQhISEhISEhISEhISFcclxuIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgZW1za1JhZGlvUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgbnVtUmFkaW9Qcm9jZXNzKys7CisKKyAgICByZWFkRnJhbWUoKTsKKyAgICB1aW50OF90IHJlZyA9IG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhTVEFUKTsKKworICAgIGlmIChyZWcgJiBNUkYyNEo0MF9UWE5TVEFUKQorICAgIHsKKyAgICAgICAgREJHKCJUWCBNQUMgVGltZW91dCEhISEhIVxyXG4iKTsKKworICAgICAgICBpZiAocmVnICYgTVJGMjRKNDBfQ0NBRkFJTCkKKyAgICAgICAgeworICAgICAgICAgICAgREJHKCJDaGFubmVsIGJ1c3khISEhISFcclxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFKSAmJiAoc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID4gMCkpCisgICAgeworICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlRnJhbWUsIHNSZWNlaXZlRXJyb3IpOworICAgIH0KKworICAgIGlmIChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQpCisgICAgeworICAgICAgICByYWRpb1RyYW5zbWl0TWVzc2FnZShhSW5zdGFuY2UpOworCisgICAgICAgIGlmIChzVHJhbnNtaXRFcnJvciAhPSBPVF9FUlJPUl9OT05FIHx8IChzVHJhbnNtaXRGcmFtZS5tUHNkdVswXSAmIElFRUU4MDIxNTRfQUNLX1JFUVVFU1QpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgTlVMTCwgc1RyYW5zbWl0RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKE1yZjI0U3RhdHVzVHggPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgTXJmMjRTdGF0dXNUeCA9IDA7CisgICAgICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworICAgICAgICAgICAgb3RQbGF0UmFkaW9UeERvbmUoYUluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsICZzUmVjZWl2ZUZyYW1lLCBzVHJhbnNtaXRFcnJvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPSAwOworCit9CisKKy8qKgorICogXGJyaWVmIGlzciByb3V0aW5lIG9mIG1yZjI0ajQwCisgKiBccGFyYW1baW5dIHB0ciBwb2ludGVyIHRyYW5zZmVycmVkIGZyb21lIGludGVycnVwdCBlbnRyeQorICovCitzdGF0aWMgdm9pZCBSYWRpb0lzcih2b2lkICpwdHIpCit7CisgICAgdWludDhfdCBpbnRfc3RhdHVzID0gMDsKKworICAgIGludF9zdGF0dXMgPSBwbXJmX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfSU5UU1RBVCk7CisKKyAgICAvKiBhIGZyYW1lIGlzIHJlY2VpdmVkICovCisgICAgaWYgKGludF9zdGF0dXMgJiBNUkYyNEo0MF9SWElGKQorICAgIHsKKyAgICAgICAgbnVtSW50ZXJydXB0UmV2Kys7CisgICAgICAgIE1yZjI0U3RhdHVzUnggPSAxOworICAgIH0KKworICAgIC8qIGEgZnJhbWUgaXMgdHJhbnNtaXR0ZWQgKi8KKyAgICBpZiAoaW50X3N0YXR1cyAmIE1SRjI0SjQwX1RYTklGKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtcmYyNGo0MF90eHBrdF9pbnRjYigpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTVJGMjRKNDBfRUJVU1k6CisgICAgICAgICAgICAvKiBDaGFubmVsIGJ1c3kgKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTVJGMjRKNDBfRUlPOgorICAgICAgICAgICAgLyogQ2hhbm5lbCBpZGxlICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBudW1JbnRlcnJ1cHRUcmFucysrOworICAgICAgICAgICAgTXJmMjRTdGF0dXNUeCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGEgZnJhbWUgd2l0aCBzZWN1cml0eSBrZXkgcmVxdWVzdCBpcyByZWNlaXZlZCAqLworICAgIGlmIChpbnRfc3RhdHVzICYgTVJGMjRKNDBfU0VDSUYpCisgICAgeworICAgICAgICBNcmYyNFN0YXR1c1NlYyA9IDE7CisgICAgICAgIG1yZjI0ajQwX3NlY19pbnRjYihmYWxzZSk7CisgICAgfQorCit9CisKKy8qIENDMjUzOCBzdXBwb3J0cyBzb3VyY2UgYWRkcmVzcyBtYXRjaGluZyBmb3IgbG93IHBvd2VyIGNvbnN1bXB0aW9uCisgICBhbmQgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGluIE1SRjI0SjQwICovCit2b2lkIG90UGxhdFJhZGlvRW5hYmxlU3JjTWF0Y2gob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgICh2b2lkKWFFbmFibGU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhU2hvcnRBZGRyZXNzOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhRXh0QWRkcmVzczsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYVNob3J0QWRkcmVzczsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhRXh0QWRkcmVzczsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9FbmVyZ3lTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24pCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgICh2b2lkKWFTY2FuQ2hhbm5lbDsKKyAgICAodm9pZClhU2NhbkR1cmF0aW9uOworICAgIHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXREZWZhdWx0VHhQb3dlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUG93ZXIpCit7CisgICAgLy8gVE9ETzogQ3JlYXRlIGEgcHJvcGVyIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIGRyaXZlci4KKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYVBvd2VyOworfQorCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gRU1TS19SRUNFSVZFX1NFTlNJVElWSVRZOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcmFuZG9tLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNjA5MTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcmFuZG9tLmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgKgorICogQHdhcm5pbmcKKyAqICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgYSB0cnVlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGFuZCBkb2VzIEBlbSBzYXRpc2Z5IHRoZSBUaHJlYWQgcmVxdWlyZW1lbnRzLgorICoKKyAqLworCisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmgiCisjaW5jbHVkZSAicGxhdGZvcm0tZW1zay5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitzdGF0aWMgdW5zaWduZWQgaW50IHNlZWQ7CisKK3ZvaWQgZW1za1JhbmRvbUluaXQodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHByaW50ZigiTm9kZSBOby46Iik7CisgICAgc2NhbmYoIiVkIiwgJmkpOworICAgIHByaW50ZigiJWRcbiIsIGkpOworICAgIHNlZWQgPSAxMCArIGk7CisgICAgc3JhbmQoc2VlZCk7Cit9CisKK3VpbnQzMl90IG90UGxhdFJhbmRvbUdldCh2b2lkKQoreworCisgICAgcmV0dXJuICh1aW50MzJfdClyYW5kKCk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFuZG9tR2V0VHJ1ZSh1aW50OF90ICphT3V0cHV0LCB1aW50MTZfdCBhT3V0cHV0TGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgY2hhbm5lbCA9IDA7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oYU91dHB1dCAmJiBhT3V0cHV0TGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAvKiBkaXNhYmxlIHJhZGlvKi8KKyAgICBpZiAob3RQbGF0UmFkaW9Jc0VuYWJsZWQoc0luc3RhbmNlKSkKKyAgICB7CisgICAgICAgIGNoYW5uZWwgPSAobXJmMjRqNDBfcmVhZF9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JGQ09OMCkgPj4gNCkgKyAxMTsKKyAgICAgICAgb3RQbGF0UmFkaW9TbGVlcChzSW5zdGFuY2UpOworICAgICAgICBvdFBsYXRSYWRpb0Rpc2FibGUoc0luc3RhbmNlKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRIRSBJTVBMRU1FTlRBVElPTiBCRUxPVyBJUyBOT1QgQ09NUExJQU5UIFdJVEggVEhFIFRIUkVBRCBTUEVDSUZJQ0FUSU9OLgorICAgICAqCisgICAgICogUGxlYXNlIHNlZSBOb3RlIGluIGA8cGF0aC10by1vcGVudGhyZWFkPi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9SRUFETUUubWRgCisgICAgICogZm9yIFRSTkcgZmVhdHVyZXMgb24gRU1TSy4KKyAgICAgKi8KKyAgICBvdEVYUEVDVF9BQ1RJT04oYU91dHB1dCAmJiBhT3V0cHV0TGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBmb3IgKHVpbnQxNl90IGxlbmd0aCA9IDA7IGxlbmd0aCA8IGFPdXRwdXRMZW5ndGg7IGxlbmd0aCsrKQorICAgIHsKKyAgICAgICAgLyogR2V0IHJhbmRvbSBudW1iZXIgKi8KKyAgICAgICAgYU91dHB1dFtsZW5ndGhdID0gKHVpbnQ4X3Qpb3RQbGF0UmFuZG9tR2V0KCk7CisgICAgfQorCisgICAgLyogRW5hYmxlIHJhZGlvKi8KKyAgICBpZiAoY2hhbm5lbCkKKyAgICB7CisgICAgICAgIGVtc2tSYWRpb0luaXQoKTsKKyAgICAgICAgb3RQbGF0UmFkaW9FbmFibGUoc0luc3RhbmNlKTsKKyAgICAgICAgb3RQbGF0UmFkaW9SZWNlaXZlKHNJbnN0YW5jZSwgY2hhbm5lbCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3VhcnQuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDFkNGE4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svdWFydC5jCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBVQVJUIGNvbW11bmljYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQvdHlwZXMuaCIKKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0tZW1zay5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgREJHKGZtdCwgLi4uKSAgIHByaW50ZihmbXQsICMjX19WQV9BUkdTX18pCisKK2VudW0KK3sKKyAgICBrVWFydElkID0gQk9BUkRfQ09OU09MRV9VQVJUX0lELAorICAgIGtCYXVkUmF0ZSA9IEJPQVJEX0NPTlNPTEVfVUFSVF9CQVVELAorICAgIGtSZWNlaXZlQnVmZmVyU2l6ZSA9IDEyOCwKK307CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NSZWNlaXZlKHZvaWQpOworc3RhdGljIHZvaWQgcHJvY2Vzc1RyYW5zbWl0KHZvaWQpOworCitzdGF0aWMgY29uc3QgdWludDhfdCAqc1RyYW5zbWl0QnVmZmVyID0gTlVMTDsKK3N0YXRpYyB1aW50MTZfdCBzVHJhbnNtaXRMZW5ndGggPSAwOworCitzdGF0aWMgdWludDhfdCBzUmVjZWl2ZUJ1ZmZlcltrUmVjZWl2ZUJ1ZmZlclNpemVdOworc3RhdGljIHVpbnQxNl90IHNSZWNlaXZlSGVhZCA9IDA7CisKK3N0YXRpYyBERVZfVUFSVCAqY29uc29sZVVhcnQ7CisKK290RXJyb3Igb3RQbGF0VWFydEVuYWJsZSh2b2lkKQoreworICAgIGludDMyX3Qgc3RhdGVVYXJ0ID0gMDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfRFJPUDsKKworICAgIC8qIFVBUlQgaW4gZW1iQVJDICovCisgICAgY29uc29sZVVhcnQgPSB1YXJ0X2dldF9kZXYoQk9BUkRfQ09OU09MRV9VQVJUX0lEKTsKKworICAgIG90RVhQRUNUX0FDVElPTighKGNvbnNvbGVVYXJ0ID09IE5VTEwpLCBEQkcoIkNvbnNvbGUgVUFSVCBpcyBtaXNzaW5nLlxyXG4iKSk7CisKKyAgICBzdGF0ZVVhcnQgPSBjb25zb2xlVWFydC0+dWFydF9vcGVuKEJPQVJEX0NPTlNPTEVfVUFSVF9CQVVEKTsKKworICAgIGlmIChzdGF0ZVVhcnQgPT0gRV9PUE5FRCkKKyAgICB7CisgICAgICAgIGNvbnNvbGVVYXJ0LT51YXJ0X2NvbnRyb2woVUFSVF9DTURfU0VUX0JBVUQsICh2b2lkICopKEJPQVJEX0NPTlNPTEVfVUFSVF9CQVVEKSk7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgREJHKCJTZXQgQ29uc29sZSBVQVJUIEJhdWRyYXRlIHRvICVkLlxyXG4iLCBCT0FSRF9DT05TT0xFX1VBUlRfQkFVRCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRlVWFydCA9PSBFX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBEQkcoIk9wZW4gQ29uc29sZSBVQVJUIFN1Y2Nlc3NmdWxseS5cclxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERCRygiT3BlbiBDb25zb2xlIFVBUlQgRXJyb3IuXHJcbiIpOworICAgIH0KKworZXhpdDoKKworICAgIHJldHVybiBlcnJvcjsKKworfQorCitvdEVycm9yIG90UGxhdFVhcnREaXNhYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0VWFydFNlbmQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG90RVhQRUNUX0FDVElPTihzVHJhbnNtaXRCdWZmZXIgPT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworICAgIHNUcmFuc21pdEJ1ZmZlciA9IGFCdWY7CisgICAgc1RyYW5zbWl0TGVuZ3RoID0gYUJ1Zkxlbmd0aDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgcHJvY2Vzc1JlY2VpdmUodm9pZCkKK3sKKworICAgIGludDMyX3QgcmRBdmFpbCA9IDA7CisgICAgdWludDE2X3QgcmVtYWluaW5nOworCisgICAgY29uc29sZVVhcnQtPnVhcnRfY29udHJvbChVQVJUX0NNRF9HRVRfUlhBVkFJTCwgKHZvaWQgKikoJnJkQXZhaWwpKTsKKyAgICBvdEVYUEVDVF9BQ1RJT04ocmRBdmFpbCA+IDAsIDspOworCisgICAgcmVtYWluaW5nID0ga1JlY2VpdmVCdWZmZXJTaXplIC0gc1JlY2VpdmVIZWFkOworCisgICAgaWYgKHJkQXZhaWwgPj0gcmVtYWluaW5nKQorICAgIHsKKyAgICAgICAgY29uc29sZVVhcnQtPnVhcnRfcmVhZCgodm9pZCAqKShzUmVjZWl2ZUJ1ZmZlciArIHNSZWNlaXZlSGVhZCksICh1aW50MzJfdClyZW1haW5pbmcpOworICAgICAgICBvdFBsYXRVYXJ0UmVjZWl2ZWQoc1JlY2VpdmVCdWZmZXIgKyBzUmVjZWl2ZUhlYWQsIHJlbWFpbmluZyk7CisgICAgICAgIHNSZWNlaXZlSGVhZCA9IDA7CisgICAgICAgIHJkQXZhaWwgLT0gKGludDMyX3QpcmVtYWluaW5nOworICAgIH0KKworICAgIHdoaWxlIChyZEF2YWlsID49IGtSZWNlaXZlQnVmZmVyU2l6ZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGVVYXJ0LT51YXJ0X3JlYWQoKHZvaWQgKikoc1JlY2VpdmVCdWZmZXIgKyBzUmVjZWl2ZUhlYWQpLCAodWludDMyX3Qpa1JlY2VpdmVCdWZmZXJTaXplKTsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKHNSZWNlaXZlQnVmZmVyICsgc1JlY2VpdmVIZWFkLCBrUmVjZWl2ZUJ1ZmZlclNpemUpOworICAgICAgICByZEF2YWlsIC09IGtSZWNlaXZlQnVmZmVyU2l6ZTsKKyAgICB9CisKKyAgICBpZiAocmRBdmFpbCA+IDApCisgICAgeworICAgICAgICBjb25zb2xlVWFydC0+dWFydF9yZWFkKCh2b2lkICopKHNSZWNlaXZlQnVmZmVyICsgc1JlY2VpdmVIZWFkKSwgKHVpbnQzMl90KXJkQXZhaWwpOworICAgICAgICBvdFBsYXRVYXJ0UmVjZWl2ZWQoc1JlY2VpdmVCdWZmZXIgKyBzUmVjZWl2ZUhlYWQsIHJkQXZhaWwpOworICAgICAgICBzUmVjZWl2ZUhlYWQgKz0gKHVpbnQxNl90KXJkQXZhaWw7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBwcm9jZXNzVHJhbnNtaXQodm9pZCkKK3sKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1RyYW5zbWl0QnVmZmVyICE9IE5VTEwsIDspOworCisgICAgY29uc29sZVVhcnQtPnVhcnRfd3JpdGUoKHZvaWQgKilzVHJhbnNtaXRCdWZmZXIsIChpbnQzMl90KXNUcmFuc21pdExlbmd0aCk7CisKKyAgICBzVHJhbnNtaXRCdWZmZXIgPSBOVUxMOworICAgIG90UGxhdFVhcnRTZW5kRG9uZSgpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBlbXNrVWFydFByb2Nlc3Modm9pZCkKK3sKKyAgICBwcm9jZXNzUmVjZWl2ZSgpOworICAgIHByb2Nlc3NUcmFuc21pdCgpOworfQorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovTUtXNDFaNTEyeHh4NC5sZCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9NS1c0MVo1MTJ4eHg0LmxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5M2NiODAKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovTUtXNDFaNTEyeHh4NC5sZApAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBHQ0MgbGlua2VyIHNjcmlwdCBmb3IgTUtXNDFaNTEyeHh4NC4KKyAqLworIAorR1JPVVAgKAorICBsaWJtLmEKKykKKworLyogRW50cnkgUG9pbnQgKi8KK0VOVFJZKFJlc2V0X0hhbmRsZXIpCisKK0hFQVBfU0laRSAgPSBERUZJTkVEKF9faGVhcF9zaXplX18pICA/IF9faGVhcF9zaXplX18gIDogMHgwNDAwOworU1RBQ0tfU0laRSA9IERFRklORUQoX19zdGFja19zaXplX18pID8gX19zdGFja19zaXplX18gOiAweDA0MDA7CitNX1ZFQ1RPUl9SQU1fU0laRSA9IERFRklORUQoX19yYW1fdmVjdG9yX3RhYmxlX18pID8gMHgwMjAwIDogMHgwOworCisvKiBTcGVjaWZ5IHRoZSBtZW1vcnkgYXJlYXMgKi8KK01FTU9SWQoreworICBtX2ludGVycnVwdHMgICAgICAgICAgKFJYKSAgOiBPUklHSU4gPSAweDAwMDAwMDAwLCBMRU5HVEggPSAweDAwMDAwMjAwCisgIG1fZmxhc2hfY29uZmlnICAgICAgICAoUlgpICA6IE9SSUdJTiA9IDB4MDAwMDA0MDAsIExFTkdUSCA9IDB4MDAwMDAwMTAKKyAgbV90ZXh0ICAgICAgICAgICAgICAgIChSWCkgIDogT1JJR0lOID0gMHgwMDAwMDQxMCwgTEVOR1RIID0gMHgwMDA3RkJGMAorICBtX2RhdGEgICAgICAgICAgICAgICAgKFJXKSAgOiBPUklHSU4gPSAweDFGRkY4MDAwLCBMRU5HVEggPSAweDAwMDIwMDAwCit9CisKKy8qIERlZmluZSBvdXRwdXQgc2VjdGlvbnMgKi8KK1NFQ1RJT05TCit7CisgIC8qIFRoZSBzdGFydHVwIGNvZGUgZ29lcyBmaXJzdCBpbnRvIGludGVybmFsIGZsYXNoICovCisgIC5pbnRlcnJ1cHRzIDoKKyAgeworICAgIF9fVkVDVE9SX1RBQkxFID0gLjsKKyAgICAuID0gQUxJR04oNCk7CisgICAgS0VFUCgqKC5pc3JfdmVjdG9yKSkgICAgIC8qIFN0YXJ0dXAgY29kZSAqLworICAgIC4gPSBBTElHTig0KTsKKyAgfSA+IG1faW50ZXJydXB0cworCisgIC5mbGFzaF9jb25maWcgOgorICB7CisgICAgLiA9IEFMSUdOKDQpOworICAgIEtFRVAoKiguRmxhc2hDb25maWcpKSAgICAvKiBGbGFzaCBDb25maWd1cmF0aW9uIEZpZWxkIChGQ0YpICovCisgICAgLiA9IEFMSUdOKDQpOworICB9ID4gbV9mbGFzaF9jb25maWcKKworICAvKiBUaGUgcHJvZ3JhbSBjb2RlIGFuZCBvdGhlciBkYXRhIGdvZXMgaW50byBpbnRlcm5hbCBmbGFzaCAqLworICAudGV4dCA6CisgIHsKKyAgICAuID0gQUxJR04oNCk7CisgICAgKigudGV4dCkgICAgICAgICAgICAgICAgIC8qIC50ZXh0IHNlY3Rpb25zIChjb2RlKSAqLworICAgICooLnRleHQqKSAgICAgICAgICAgICAgICAvKiAudGV4dCogc2VjdGlvbnMgKGNvZGUpICovCisgICAgKigucm9kYXRhKSAgICAgICAgICAgICAgIC8qIC5yb2RhdGEgc2VjdGlvbnMgKGNvbnN0YW50cywgc3RyaW5ncywgZXRjLikgKi8KKyAgICAqKC5yb2RhdGEqKSAgICAgICAgICAgICAgLyogLnJvZGF0YSogc2VjdGlvbnMgKGNvbnN0YW50cywgc3RyaW5ncywgZXRjLikgKi8KKyAgICAqKC5nbHVlXzcpICAgICAgICAgICAgICAgLyogZ2x1ZSBhcm0gdG8gdGh1bWIgY29kZSAqLworICAgICooLmdsdWVfN3QpICAgICAgICAgICAgICAvKiBnbHVlIHRodW1iIHRvIGFybSBjb2RlICovCisgICAgKiguZWhfZnJhbWUpCisgICAgS0VFUCAoKiguaW5pdCkpCisgICAgS0VFUCAoKiguZmluaSkpCisgICAgLiA9IEFMSUdOKDQpOworICB9ID4gbV90ZXh0CisKKyAgLkFSTS5leHRhYiA6CisgIHsKKyAgICAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikKKyAgfSA+IG1fdGV4dAorCisgIC5BUk0gOgorICB7CisgICAgX19leGlkeF9zdGFydCA9IC47CisgICAgKiguQVJNLmV4aWR4KikKKyAgICBfX2V4aWR4X2VuZCA9IC47CisgIH0gPiBtX3RleHQKKworIC5jdG9ycyA6CisgIHsKKyAgICBfX0NUT1JfTElTVF9fID0gLjsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgZnJvbSB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFKCpjcnRlbmQ/Lm8gKmNydGVuZC5vKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgICBfX0NUT1JfRU5EX18gPSAuOworICB9ID4gbV90ZXh0CisKKyAgLmR0b3JzIDoKKyAgeworICAgIF9fRFRPUl9MSVNUX18gPSAuOworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUoKmNydGVuZD8ubyAqY3J0ZW5kLm8pIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICAgIF9fRFRPUl9FTkRfXyA9IC47CisgIH0gPiBtX3RleHQKKworICAucHJlaW5pdF9hcnJheSA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSopKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0gPiBtX3RleHQKKworICAuaW5pdF9hcnJheSA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5pbml0X2FycmF5KikpCisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfSA+IG1fdGV4dAorCisgIC5maW5pX2FycmF5IDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkqKSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9ID4gbV90ZXh0CisKKyAgX19ldGV4dCA9IC47ICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgZW5kIG9mIGNvZGUgKi8KKyAgX19EQVRBX1JPTSA9IC47IC8qIFN5bWJvbCBpcyB1c2VkIGJ5IHN0YXJ0dXAgZm9yIGRhdGEgaW5pdGlhbGl6YXRpb24gKi8KKworICAvKiByZXNlcnZlIE1UQiBtZW1vcnkgYXQgdGhlIGJlZ2lubmluZyBvZiBtX2RhdGEgKi8KKyAgLm10YiA6IC8qIE1UQiBidWZmZXIgYWRkcmVzcyBhcyBkZWZpbmVkIGJ5IHRoZSBoYXJkd2FyZSAqLworICB7CisgICAgLiA9IEFMSUdOKDgpOworICAgIF9tdGJfc3RhcnQgPSAuOworICAgIEtFRVAoKigubXRiX2J1ZikpIC8qIG5lZWQgdG8gS0VFUCBNaWNybyBUcmFjZSBCdWZmZXIgYXMgbm90IHJlZmVyZW5jZWQgYnkgYXBwbGljYXRpb24gKi8KKyAgICAuID0gQUxJR04oOCk7CisgICAgX210Yl9lbmQgPSAuOworICB9ID4gbV9kYXRhCisKKyAgLmludGVycnVwdHNfcmFtIDoKKyAgeworICAgIC4gPSBBTElHTig0KTsKKyAgICBfX1ZFQ1RPUl9SQU1fXyA9IC47CisgICAgX19pbnRlcnJ1cHRzX3JhbV9zdGFydF9fID0gLjsgLyogQ3JlYXRlIGEgZ2xvYmFsIHN5bWJvbCBhdCBkYXRhIHN0YXJ0ICovCisgICAgKigubV9pbnRlcnJ1cHRzX3JhbSkgICAgIC8qIFRoaXMgaXMgYSB1c2VyIGRlZmluZWQgc2VjdGlvbiAqLworICAgIC4gKz0gTV9WRUNUT1JfUkFNX1NJWkU7CisgICAgLiA9IEFMSUdOKDQpOworICAgIF9faW50ZXJydXB0c19yYW1fZW5kX18gPSAuOyAvKiBEZWZpbmUgYSBnbG9iYWwgc3ltYm9sIGF0IGRhdGEgZW5kICovCisgIH0gPiBtX2RhdGEKKworICBfX1ZFQ1RPUl9SQU0gPSBERUZJTkVEKF9fcmFtX3ZlY3Rvcl90YWJsZV9fKSA/IF9fVkVDVE9SX1JBTV9fIDogT1JJR0lOKG1faW50ZXJydXB0cyk7CisgIF9fUkFNX1ZFQ1RPUl9UQUJMRV9TSVpFX0JZVEVTID0gREVGSU5FRChfX3JhbV92ZWN0b3JfdGFibGVfXykgPyAoX19pbnRlcnJ1cHRzX3JhbV9lbmRfXyAtIF9faW50ZXJydXB0c19yYW1fc3RhcnRfXykgOiAweDA7CisKKyAgLmRhdGEgOiBBVChfX0RBVEFfUk9NKQorICB7CisgICAgLiA9IEFMSUdOKDQpOworICAgIF9fREFUQV9SQU0gPSAuOworICAgIF9fZGF0YV9zdGFydF9fID0gLjsgICAgICAvKiBjcmVhdGUgYSBnbG9iYWwgc3ltYm9sIGF0IGRhdGEgc3RhcnQgKi8KKyAgICAqKC5kYXRhKSAgICAgICAgICAgICAgICAgLyogLmRhdGEgc2VjdGlvbnMgKi8KKyAgICAqKC5kYXRhKikgICAgICAgICAgICAgICAgLyogLmRhdGEqIHNlY3Rpb25zICovCisgICAgS0VFUCgqKC5qY3IqKSkKKyAgICAuID0gQUxJR04oNCk7CisgICAgX19kYXRhX2VuZF9fID0gLjsgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgZGF0YSBlbmQgKi8KKyAgfSA+IG1fZGF0YQorCisgIF9fREFUQV9FTkQgPSBfX0RBVEFfUk9NICsgKF9fZGF0YV9lbmRfXyAtIF9fZGF0YV9zdGFydF9fKTsKKyAgdGV4dF9lbmQgPSBPUklHSU4obV90ZXh0KSArIExFTkdUSChtX3RleHQpOworICBBU1NFUlQoX19EQVRBX0VORCA8PSB0ZXh0X2VuZCwgInJlZ2lvbiBtX3RleHQgb3ZlcmZsb3dlZCB3aXRoIHRleHQgYW5kIGRhdGEiKQorCisgIC8qIFVuaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uICovCisgIC5ic3MgOgorICB7CisgICAgLyogVGhpcyBpcyB1c2VkIGJ5IHRoZSBzdGFydHVwIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIC5ic3Mgc2VjdGlvbiAqLworICAgIC4gPSBBTElHTig0KTsKKyAgICBfX1NUQVJUX0JTUyA9IC47CisgICAgX19ic3Nfc3RhcnRfXyA9IC47CisgICAgKiguYnNzKQorICAgICooLmJzcyopCisgICAgKihDT01NT04pCisgICAgLiA9IEFMSUdOKDQpOworICAgIF9fYnNzX2VuZF9fID0gLjsKKyAgICBfX0VORF9CU1MgPSAuOworICB9ID4gbV9kYXRhCisKKyAgLmhlYXAgOgorICB7CisgICAgLiA9IEFMSUdOKDgpOworICAgIF9fZW5kX18gPSAuOworICAgIFBST1ZJREUoZW5kID0gLik7CisgICAgX19IZWFwQmFzZSA9IC47CisgICAgLiArPSBIRUFQX1NJWkU7CisgICAgX19IZWFwTGltaXQgPSAuOworICAgIF9faGVhcF9saW1pdCA9IC47IC8qIEFkZCBmb3IgX3NicmsgKi8KKyAgfSA+IG1fZGF0YQorCisgIC5zdGFjayA6CisgIHsKKyAgICAuID0gQUxJR04oOCk7CisgICAgLiArPSBTVEFDS19TSVpFOworICB9ID4gbV9kYXRhCisKKyAgLyogSW5pdGlhbGl6ZXMgc3RhY2sgb24gdGhlIGVuZCBvZiBibG9jayAqLworICBfX1N0YWNrVG9wICAgPSBPUklHSU4obV9kYXRhKSArIExFTkdUSChtX2RhdGEpOworICBfX1N0YWNrTGltaXQgPSBfX1N0YWNrVG9wIC0gU1RBQ0tfU0laRTsKKyAgUFJPVklERShfX3N0YWNrID0gX19TdGFja1RvcCk7CisKKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7ICooLkFSTS5hdHRyaWJ1dGVzKSB9CisKKyAgQVNTRVJUKF9fU3RhY2tMaW1pdCA+PSBfX0hlYXBMaW1pdCwgInJlZ2lvbiBtX2RhdGEgb3ZlcmZsb3dlZCB3aXRoIHN0YWNrIGFuZCBoZWFwIikKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjllNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTEzIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgPSBsaWJvcGVudGhyZWFkLWt3NDF6LmEKKworbGlib3BlbnRocmVhZF9rdzQxel9hX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLURDUFVfTUtXNDFaNTEyVkhUNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvbnhwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtV25vLXVua25vd24tcHJhZ21hcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tc2lnbi1jb21wYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLVduby11bnVzZWQtZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tZW1wdHktYm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitQTEFURk9STV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBhbGFybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9nZ2luZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtaXNjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByYW5kb20uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVhcnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2t3NDF6X2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9zdGFydHVwX01LVzQxWjQuUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Nsb2NrX2NvbmZpZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvc3lzdGVtX01LVzQxWjQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbG9jay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2ZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ncGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BpdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHJuZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2RiZ19yYW1fY2FwdHVyZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZnNsX3hjdnIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9mc2xfeGN2cl90cmltLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2lmcl9yYWRpby5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2FudF9jb25maWcuYyAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfYmxlX2NvbmZpZy5jICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9jb21tb25fY29uZmlnLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHAzX2hfMHA1X2NvbmZpZy5jICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDVfaF8wcDMyX2NvbmZpZy5jIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwNV9oXzBwNV9jb25maWcuYyAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA1X2hfMHA3X2NvbmZpZy5jICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDVfaF8xcDBfY29uZmlnLmMgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwN19oXzBwNV9jb25maWcuYyAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnLmMgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfbXNrX2NvbmZpZy5jICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl96Z2JlX2NvbmZpZy5jICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworUExBVEZPUk1fU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgZGlhZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorCitsaWJvcGVudGhyZWFkX2t3NDF6X2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKFBMQVRGT1JNX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgcGxhdGZvcm0ta3c0MXouaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbG9ja19jb25maWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUFJFVFRZX0ZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChQTEFURk9STV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0Rhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLQorbGlib3BlbnRocmVhZF9rdzQxel9hX0xJQkFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMgJChEYXNoKXR5cGUgZiAkKERhc2gpbmFtZSAiKi5vIikKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovUkVBRE1FLm1kIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFiNTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L1JFQURNRS5tZApAQCAtMCwwICsxLDExMCBAQAorIyBPcGVuVGhyZWFkIG9uIE5YUChGcmVlc2NhbGUpIEtpbmV0aXMgTUtXNDFaNTEyIEV4YW1wbGUKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciB0aGUgW05YUChGcmVlc2NhbGUpIEtpbmV0aXMgTUtXNDFaNTEyXVtta3c0MXo1MTJdCitiYXNlZCBvbiBbRlJETS1LVzQxWl1bZnJkbS1rdzQxel0gaGFyZHdhcmUgcGxhdGZvcm0uCisKK1tta3c0MXo1MTJdOiBodHRwOi8vd3d3Lm54cC5jb20vcHJvZHVjdHMvbWljcm9jb250cm9sbGVycy1hbmQtcHJvY2Vzc29ycy9hcm0tcHJvY2Vzc29ycy9raW5ldGlzLWNvcnRleC1tLW1jdXMvdy1zZXJpZXMtd2lyZWxlc3MtbTAtcGx1cy1tNC9raW5ldGlzLWt3NDF6LTIuNC1naHotZHVhbC1tb2RlLWJsZS1hbmQtODAyLjE1LjQtd2lyZWxlc3MtcmFkaW8tbWljcm9jb250cm9sbGVyLW1jdS1iYXNlZC1vbi1hcm0tY29ydGV4LW0wLXBsdXMtY29yZTpLVzQxWgorW2ZyZG0ta3c0MXpdOiBodHRwOi8vd3d3Lm54cC5jb20vcHJvZHVjdHMvc29mdHdhcmUtYW5kLXRvb2xzL2hhcmR3YXJlLWRldmVsb3BtZW50LXRvb2xzL2ZyZWVkb20tZGV2ZWxvcG1lbnQtYm9hcmRzL254cC1mcmVlZG9tLWRldmVsb3BtZW50LWtpdC1mb3Ita2luZXRpcy1rdzQxei0zMXotMjF6LW1jdXM6RlJETS1LVzQxWgorCitUaGUgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGFyZSBpbnRlbmRlZCB0byBwcmVzZW50IHRoZSBtaW5pbWFsIGNvZGUKK25lY2Vzc2FyeSB0byBzdXBwb3J0IE9wZW5UaHJlYWQuICBBcyBhIHJlc3VsdCwgdGhlIGV4YW1wbGUgcGxhdGZvcm0KK2RyaXZlcnMgZG8gbm90IG5lY2Vzc2FyaWx5IGhpZ2hsaWdodCB0aGUgcGxhdGZvcm0ncyBmdWxsIGNhcGFiaWxpdGllcy4KKworIyMgVG9vbGNoYWluCisKK0Rvd25sb2FkIGFuZCBpbnN0YWxsIHRoZSBbR05VIHRvb2xjaGFpbiBmb3IgQVJNIENvcnRleC1NXVtnbnUtdG9vbGNoYWluXS4KKworW2dudS10b29sY2hhaW5dOiBodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZAorCisjIyBCdWlsZCBFeGFtcGxlcworCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUta3c0MXoKK2BgYAorCitBZnRlciBhIHN1Y2Nlc3NmdWwgYnVpbGQsIHRoZSBgZWxmYCBmaWxlcyBhcmUgZm91bmQgaW4KK2A8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQva3c0MXovYmluYC4gIFlvdSBjYW4gY29udmVydCB0aGVtIHRvIGBiaW5gCitmaWxlcyB1c2luZyBgYXJtLW5vbmUtZWFiaS1vYmpjb3B5YDoKK2BgYGJhc2gKKyQgYXJtLW5vbmUtZWFiaS1vYmpjb3B5IC1PIGJpbmFyeSBvdC1jbGktZnRkIG90LWNsaS1mdGQuYmluCitgYGAKKworIyMgRmxhc2ggQmluYXJpZXMKKworQ29tcGlsZWQgYmluYXJpZXMgbWF5IGJlIGZsYXNoZWQgb250byB0aGUgTUtXNDFaNTEyIHVzaW5nIGRyYWctYW5kLWRyb3AgaW50byB0aGUgYm9hcmQncyBNU0QgQm9vdGxvYWRlcgorIG9yIHRoZSBbTlhQKEZyZWVzY2FsZSkgVGVzdCBUb29sXVt0ZXN0LXRvb2xdIG9yIFtKVEFHIGludGVyZmFjZV1banRhZ10uIAorVGhlIFtOWFAoRnJlZXNjYWxlKSBUZXN0IFRvb2xdW3Rlc3QtdG9vbF0gcHJvdmlkZXMgYSBjb252ZW5pZW50IG1ldGhvZCBmb3IgZmxhc2hpbmcgYSBNS1c0MVo1MTIgdmlhIHRoZSBbSi1MaW5rXVtqbGlua10uCisKK1t0ZXN0LXRvb2xdOiBodHRwOi8vd3d3Lm54cC5jb20vd2ViYXBwL3Nwcy9kb3dubG9hZC9saWNlbnNlLmpzcD9jb2xDb2RlPVRFU1RUT09MX1NFVFVQCitbanRhZ106IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0pUQUcKK1tqbGlua106IGh0dHBzOi8vd3d3LnNlZ2dlci5jb20vamxpbmstc29mdHdhcmUuaHRtbAorCisjIyBSdW5uaW5nIHRoZSBleGFtcGxlCisKKzEuIFByZXBhcmUgdHdvIGJvYXJkcyB3aXRoIHRoZSBmbGFzaGVkIGBDTEkgRXhhbXBsZWAgKGFzIHNob3duIGFib3ZlKS4KKzIuIFRoZSBDTEkgZXhhbXBsZSB1c2VzIFVBUlQgY29ubmVjdGlvbi4gVG8gdmlldyByYXcgVUFSVCBvdXRwdXQsIHN0YXJ0IGEgdGVybWluYWwKKyAgIGVtdWxhdG9yIGxpa2UgUHVUVFkgYW5kIGNvbm5lY3QgdG8gdGhlIHVzZWQgQ09NIHBvcnQgd2l0aCB0aGUgZm9sbG93aW5nIFVBUlQgc2V0dGluZ3M6CisgICAgLSBCYXVkIHJhdGU6IDExNTIwMAorICAgIC0gOCBkYXRhIGJpdHMKKyAgICAtIDEgc3RvcCBiaXQKKyAgICAtIE5vIHBhcml0eQorICAgIC0gTm8gZmxvdyBjb250cm9sCisKKzMuIE9wZW4gYSB0ZXJtaW5hbCBjb25uZWN0aW9uIG9uIHRoZSBmaXJzdCBib2FyZCBhbmQgc3RhcnQgYSBuZXcgVGhyZWFkIG5ldHdvcmsuCisKKyBgYGBiYXNoCisgPiBwYW5pZCAweGFiY2QKKyBEb25lCisgPiBpZmNvbmZpZyB1cAorIERvbmUKKyA+IHRocmVhZCBzdGFydAorIERvbmUKKyBgYGAKKworNC4gQWZ0ZXIgYSBjb3VwbGUgb2Ygc2Vjb25kcyB0aGUgbm9kZSB3aWxsIGJlY29tZSBhIExlYWRlciBvZiB0aGUgbmV0d29yay4KKworIGBgYGJhc2gKKyA+IHN0YXRlCisgTGVhZGVyCisgYGBgCisKKzUuIE9wZW4gYSB0ZXJtaW5hbCBjb25uZWN0aW9uIG9uIHRoZSBzZWNvbmQgYm9hcmQgYW5kIGF0dGFjaCBhIG5vZGUgdG8gdGhlIG5ldHdvcmsuCisKKyBgYGBiYXNoCisgPiBwYW5pZCAweGFiY2QKKyBEb25lCisgPiBpZmNvbmZpZyB1cAorIERvbmUKKyA+IHRocmVhZCBzdGFydAorIERvbmUKKyBgYGAKKworNi4gQWZ0ZXIgYSBjb3VwbGUgb2Ygc2Vjb25kcyB0aGUgc2Vjb25kIG5vZGUgd2lsbCBhdHRhY2ggYW5kIGJlY29tZSBhIENoaWxkLgorCisgYGBgYmFzaAorID4gc3RhdGUKKyBDaGlsZAorIGBgYAorCis3LiBMaXN0IGFsbCBJUHY2IGFkZHJlc3NlcyBvZiB0aGUgZmlyc3QgYm9hcmQuCisKKyBgYGBiYXNoCisgPiBpcGFkZHIKKyBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpmYzAwCisgZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6OWMwMAorIGZkZGU6YWQwMDpiZWVmOjA6NGJjYjo3M2E1OjdjMjg6MzE4ZQorIGZlODA6MDowOjA6NWM5MTpjNjE6YjY3YzoyNzFjCisgYGBgCisKKzguIENob29zZSBvbmUgb2YgdGhlbSBhbmQgc2VuZCBhbiBJQ01QdjYgcGluZyBmcm9tIHRoZSBzZWNvbmQgYm9hcmQuCisKKyBgYGBiYXNoCisgPiBwaW5nIGZkZGU6YWQwMDpiZWVmOjA6MDpmZjpmZTAwOmZjMDAKKyAxNiBieXRlcyBmcm9tIGZkZGU6YWQwMDpiZWVmOjA6MDpmZjpmZTAwOmZjMDA6IGljbXBfc2VxPTEgaGxpbT02NCB0aW1lPThtcworIGBgYAorCitGb3IgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgY29tbWFuZHMsIHZpc2l0IFtPcGVuVGhyZWFkIENMSSBSZWZlcmVuY2UgUkVBRE1FLm1kXVtDTEldLgorCitbQ0xJXTogaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9ibG9iL21hc3Rlci9zcmMvY2xpL1JFQURNRS5tZApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovYWxhcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTY2MGJmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2FsYXJtLmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBhbGFybS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAiZnNsX2Nsb2NrLmgiCisjaW5jbHVkZSAiZnNsX3BpdC5oIgorCisjaW5jbHVkZSAib3BlbnRocmVhZC9vcGVudGhyZWFkLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9wbGF0Zm9ybS5oIgorI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL2RpYWcuaCIKKworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHNUaW1lICAgICAgPSAwOworc3RhdGljIHVpbnQzMl90ICAgICAgICAgIHNBbGFybVRpbWUgPSAwOworCit2b2lkIGt3NDF6QWxhcm1Jbml0KHZvaWQpCit7CisgICAgcGl0X2NvbmZpZ190IGNvbmZpZzsKKyAgICB1aW50MzJfdCBjb3VudCA9IChDTE9DS19HZXRCdXNDbGtGcmVxKCkgLyAxMDAwKSAtIDE7CisKKyAgICBQSVRfR2V0RGVmYXVsdENvbmZpZygmY29uZmlnKTsKKyAgICBQSVRfSW5pdChQSVQsICZjb25maWcpOworICAgIFBJVF9TZXRUaW1lclBlcmlvZChQSVQsIGtQSVRfQ2hubF8wLCBjb3VudCk7CisgICAgUElUX1N0YXJ0VGltZXIoUElULCBrUElUX0NobmxfMCk7CisKKyAgICBQSVRfRW5hYmxlSW50ZXJydXB0cyhQSVQsIGtQSVRfQ2hubF8wLCBrUElUX1RpbWVySW50ZXJydXB0RW5hYmxlKTsKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShQSVRfSVJRbik7CisgICAgTlZJQ19FbmFibGVJUlEoUElUX0lSUW4pOworfQorCit2b2lkIGt3NDF6QWxhcm1Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBpZiAoKHNBbGFybVRpbWUgIT0gMCkgJiYgKHNUaW1lID49IHNBbGFybVRpbWUpKQorICAgIHsKKyAgICAgICAgc0FsYXJtVGltZSA9IDA7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXREaWFnQWxhcm1GaXJlZChhSW5zdGFuY2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXRBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdGFydEF0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVQwLCB1aW50MzJfdCBhRHQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHNBbGFybVRpbWUgPSBhVDAgKyBhRHQ7Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc0FsYXJtVGltZSA9IDA7Cit9CisKK3VpbnQzMl90IG90UGxhdEFsYXJtR2V0Tm93KHZvaWQpCit7CisgICAgcmV0dXJuIHNUaW1lOworfQorCit2b2lkIFBJVF9JUlFIYW5kbGVyKHZvaWQpCit7CisgICAgUElUX0NsZWFyU3RhdHVzRmxhZ3MoUElULCBrUElUX0NobmxfMCwga1BJVF9UaW1lckZsYWcpOworICAgIHNUaW1lKys7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovZGlhZy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2RpYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODY0OGVmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2RpYWcuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgZGlhZ25vc3RpY3MuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9vcGVudGhyZWFkLmgiCisKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oIgorCisvKioKKyAqIERpYWdub3N0aWNzIG1vZGUgdmFyaWFibGVzLgorICoKKyAqLworc3RhdGljIGJvb2wgc0RpYWdNb2RlID0gZmFsc2U7CisKK3ZvaWQgb3RQbGF0RGlhZ1Byb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICAvLyBBZGQgbW9yZSBwbGFyZm9ybSBzcGVjaWZpYyBkaWFnbm9zdGljcyBmZWF0dXJlcyBoZXJlLgorICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJkaWFnIGZlYXR1cmUgJyVzJyBpcyBub3Qgc3VwcG9ydGVkXHJcbiIsIGFyZ3ZbMF0pOworICAgICh2b2lkKSBhcmdjOworICAgICh2b2lkKSBhSW5zdGFuY2U7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ01vZGVTZXQoYm9vbCBhTW9kZSkKK3sKKyAgICBzRGlhZ01vZGUgPSBhTW9kZTsKK30KKworYm9vbCBvdFBsYXREaWFnTW9kZUdldCgpCit7CisgICAgcmV0dXJuIHNEaWFnTW9kZTsKK30KKwordm9pZCBvdFBsYXREaWFnQ2hhbm5lbFNldCh1aW50OF90IGFDaGFubmVsKQoreworICAgICh2b2lkKSBhQ2hhbm5lbDsKK30KKwordm9pZCBvdFBsYXREaWFnVHhQb3dlclNldChpbnQ4X3QgYVR4UG93ZXIpCit7CisgICAgKHZvaWQpIGFUeFBvd2VyOworfQorCit2b2lkIG90UGxhdERpYWdSYWRpb1JlY2VpdmVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisgICAgKHZvaWQpIGFGcmFtZTsKKyAgICAodm9pZCkgYUVycm9yOworfQorCit2b2lkIG90UGxhdERpYWdBbGFybUNhbGxiYWNrKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWU4ZDAzCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2ZsYXNoLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorI2luY2x1ZGUgImZzbF9mbGFzaC5oIgorI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaCIKKyNpbmNsdWRlIDx1dGlscy9mbGFzaC5oPgorI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKworc3RhdGljIGZsYXNoX2NvbmZpZ190IHNGbGFzaENvbmZpZzsKKworb3RFcnJvciB1dGlsc0ZsYXNoSW5pdCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKEZMQVNIX0luaXQoJnNGbGFzaENvbmZpZykgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQ7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoR2V0U2l6ZSh2b2lkKQoreworICAgIHJldHVybiBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfU0laRTsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoRXJhc2VQYWdlKHVpbnQzMl90IGFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgc3RhdHVzID0gRkxBU0hfRXJhc2UoJnNGbGFzaENvbmZpZywgYUFkZHJlc3MsIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19TRUNUT1JfU0laRSwga0ZMQVNIX0FwaUVyYXNlS2V5KTsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0dXMgPT0ga1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvcikKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaFN0YXR1c1dhaXQodWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisgICAgdWludDMyX3Qgc3RhcnQgPSBvdFBsYXRBbGFybUdldE5vdygpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmIChGVEZBLT5GU1RBVCAmIEZURkFfRlNUQVRfQ0NJRl9NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoYVRpbWVvdXQgJiYgKChvdFBsYXRBbGFybUdldE5vdygpIC0gc3RhcnQpIDwgYVRpbWVvdXQpKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaFdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgaWYgKEZMQVNIX1Byb2dyYW0oJnNGbGFzaENvbmZpZywgYUFkZHJlc3MsICh1aW50MzJfdCAqKWFEYXRhLCBhU2l6ZSkgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgIHsKKyAgICAgICAgYVNpemUgPSAwOworICAgIH0KKworICAgIHJldHVybiBhU2l6ZTsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaFJlYWQodWludDMyX3QgYUFkZHJlc3MsIHVpbnQ4X3QgKmFEYXRhLCB1aW50MzJfdCBhU2l6ZSkKK3sKKyAgICBtZW1jcHkoYURhdGEsICh1aW50OF90ICopYUFkZHJlc3MsIGFTaXplKTsKKworICAgIHJldHVybiBhU2l6ZTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9sb2dnaW5nLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovbG9nZ2luZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlN2MzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovbG9nZ2luZy5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIGxvZ2dpbmcuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oIgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0NMSV9MT0dHSU5HCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisjaW5jbHVkZSA8Y2xpL2NsaS11YXJ0Lmg+CisjZW5kaWYKKwordm9pZCBvdFBsYXRMb2cob3RMb2dMZXZlbCBhTG9nTGV2ZWwsIG90TG9nUmVnaW9uIGFMb2dSZWdpb24sIGNvbnN0IGNoYXIgKmFGb3JtYXQsIC4uLikKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DTElfTE9HR0lORworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBhRm9ybWF0KTsKKyAgICBvdENsaUxvZyhhTG9nTGV2ZWwsIGFMb2dSZWdpb24sIGFGb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyNlbHNlCisgICAgKHZvaWQpYUxvZ0xldmVsOworICAgICh2b2lkKWFMb2dSZWdpb247CisgICAgKHZvaWQpYUZvcm1hdDsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DTElfTE9HR0lORworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L21pc2MuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1MTkyZQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9taXNjLmMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC90eXBlcy5oIgorI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oIgorCit2b2lkIG90UGxhdFJlc2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgTlZJQ19TeXN0ZW1SZXNldCgpOworCisgICAgd2hpbGUgKDEpIHt9Cit9CisKK290UGxhdFJlc2V0UmVhc29uIG90UGxhdEdldFJlc2V0UmVhc29uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgb3RQbGF0UmVzZXRSZWFzb24gcmVhc29uOworCisgICAgaWYgKFJDTS0+U1JTMCAmIFJDTV9TUlMwX1BPUl9NQVNLKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fUE9XRVJfT047CisgICAgfQorICAgIGVsc2UgaWYgKFJDTS0+U1JTMSAmIFJDTV9TUlMxX1NXX01BU0spCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9TT0ZUV0FSRTsKKyAgICB9CisgICAgZWxzZSBpZiAoUkNNLT5TUlMwICYgUkNNX1NSUzBfV0RPR19NQVNLKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fV0FUQ0hET0c7CisgICAgfQorICAgIGVsc2UgaWYgKFJDTS0+U1JTMCAmIFJDTV9TUlMwX1BJTl9NQVNLKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fRVhURVJOQUw7CisgICAgfQorICAgIGVsc2UgaWYgKChSQ00tPlNSUzAgJiBSQ01fU1JTMF9MT0NfTUFTSykgICAgIHx8CisgICAgICAgICAgICAgKFJDTS0+U1JTMSAmIFJDTV9TUlMxX1NBQ0tFUlJfTUFTSykgfHwKKyAgICAgICAgICAgICAoUkNNLT5TUlMxICYgUkNNX1NSUzFfTE9DS1VQX01BU0spKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fRkFVTFQ7CisgICAgfQorICAgIGVsc2UgaWYgKChSQ00tPlNSUzAgJiBSQ01fU1JTMF9XQUtFVVBfTUFTSykgIHx8CisgICAgICAgICAgICAgKFJDTS0+U1JTMCAmIFJDTV9TUlMwX0xWRF9NQVNLKSAgICAgfHwKKyAgICAgICAgICAgICAoUkNNLT5TUlMxICYgUkNNX1NSUzFfTURNX0FQX01BU0spKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fQVNTRVJUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9PVEhFUjsKKyAgICB9CisKKyAgICByZXR1cm4gcmVhc29uOworfQorCit2b2lkIG90UGxhdEFzc2VydEZhaWwoY29uc3QgY2hhciAqYUZpbGVuYW1lLCBpbnQgYUxpbmVOdW1iZXIpCit7CisgICAgKHZvaWQpYUZpbGVuYW1lOworICAgICh2b2lkKWFMaW5lTnVtYmVyOworfQorCit2b2lkIG90UGxhdFdha2VIb3N0KHZvaWQpCit7CisgICAgLy8gVE9ETzogaW1wbGVtZW50IGFuIG9wZXJhdGlvbiB0byB3YWtlIHRoZSBob3N0IGZyb20gc2xlZXAgc3RhdGUuCit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovb3BlbnRocmVhZC1jb3JlLWt3NDF6LWNvbmZpZy5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L29wZW50aHJlYWQtY29yZS1rdzQxei1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODAxYjg5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L29wZW50aHJlYWQtY29yZS1rdzQxei1jb25maWcuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBrdzQxeiBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBjb25zdGFudHMKKyAqICAgZm9yIE9wZW5UaHJlYWQuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0NPUkVfS1c0MVpfQ09ORklHX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ09SRV9LVzQxWl9DT05GSUdfSF8KKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQKKyAqCisgKiBEZWZpbmUgdG8gMSB0byBlbmFibGUgZGVmYXVsdCBsb2cgb3V0cHV0LgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUICAgICAgICAgICAgIDEKKworLyoqCisgKiBAZGVmIFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1MKKyAqCisgKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHNldHRpbmdzLgorICoKKyAqLworI2RlZmluZSBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAKKworLyoqCisgKiBAZGVmIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkUKKyAqCisgKiBUaGUgcGFnZSBzaXplIG9mIHNldHRpbmdzLgorICoKKyAqLworI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwCisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0KKyAqCisgKiBUaGUgcGFnZSBudW1iZXIgb2Ygc2V0dGluZ3MuCisgKgorICovCisjZGVmaW5lIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvKioKKyAqIEBkZWYgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FTlRSWV9OVU0KKyAqCisgKiBUaGUgbnVtYmVyIG9mIHNvdXJjZSBhZGRyZXNzIHRhYmxlIGVudHJpZXMuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRU5UUllfTlVNICAgICAgICAgICAgICAgICAgICAgICAgMTI4CisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVAorICoKKyAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSByZXRyYW5zbWlzc2lvbiBsb2dpYy4KKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQgICAgICAgICAgICAxCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT1JFX0tXNDFaX0NPTkZJR19IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3BsYXRmb3JtLWt3NDF6LmggYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovcGxhdGZvcm0ta3c0MXouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjU2ODI1Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3BsYXRmb3JtLWt3NDF6LmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVycy4KKyAqCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9LVzQxWl9IXworI2RlZmluZSBQTEFURk9STV9LVzQxWl9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkL3R5cGVzLmgiCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGFsYXJtIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBrdzQxekFsYXJtSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGFsYXJtIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBrdzQxekFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHJhZGlvIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBrdzQxelJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHJhZGlvIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBrdzQxelJhZGlvUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHJhbmRvbSBudW1iZXIgc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGt3NDF6UmFuZG9tSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIFVBUlQgZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICovCit2b2lkIGt3NDF6VWFydFByb2Nlc3Modm9pZCk7CisjZW5kaWYgIC8vIFBMQVRGT1JNX0tXNDFaX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovcGxhdGZvcm0uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNDc5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovcGxhdGZvcm0uYwpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVycy4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC90eXBlcy5oIgorI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vdWFydC5oIgorI2luY2x1ZGUgInBsYXRmb3JtLWt3NDF6LmgiCisjaW5jbHVkZSAiZnNsX2Nsb2NrLmgiCisjaW5jbHVkZSAiZnNsX3BvcnQuaCIKKyNpbmNsdWRlICJjbG9ja19jb25maWcuaCIKKworb3RJbnN0YW5jZSAqc0luc3RhbmNlOworCit2b2lkIFBsYXRmb3JtSW5pdChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIHVpbnQzMl90IHRlbXAsIHRlbXBUcmltOworICAgIHVpbnQ4X3QgcmV2SWQ7CisKKyAgICAvKiBlbmFibGUgY2xvY2sgZm9yIFBPUlRzICovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soa0NMT0NLX1BvcnRBKTsKKyAgICBDTE9DS19FbmFibGVDbG9jayhrQ0xPQ0tfUG9ydEIpOworICAgIENMT0NLX0VuYWJsZUNsb2NrKGtDTE9DS19Qb3J0Qyk7CisKKyAgICBTSU0tPlNDR0M2IHw9IChTSU1fU0NHQzZfRE1BTVVYX01BU0spOyAvKiBFbmFibGUgY2xvY2sgdG8gRE1BX01VWCAoU0lNIG1vZHVsZSkgKi8KKyAgICBTSU0tPlNDR0M3IHw9IChTSU1fU0NHQzdfRE1BX01BU0spOworCisgICAgLyogT2J0YWluIFJFViBJRCBmcm9tIFNJTSAqLworICAgIHJldklkID0gKHVpbnQ4X3QpKChTSU0tPlNESUQgJiBTSU1fU0RJRF9SRVZJRF9NQVNLKSA+PiBTSU1fU0RJRF9SRVZJRF9TSElGVCk7CisKKyAgICBpZiAocmV2SWQgPT0gMCkKKyAgICB7CisgICAgICAgIHRlbXBUcmltID0gUlNJTS0+QU5BX1RSSU07CisgICAgICAgIFJTSU0tPkFOQV9UUklNIHw9IFJTSU1fQU5BX1RSSU1fQkJfTERPX1hPX1RSSU1fTUFTSzsgLyogbWF4IHRyaW0gZm9yIEJCIExETyBmb3IgWE8gKi8KKyAgICB9CisKKyAgICAvKiBUdXJuIG9uIGNsb2NrcyBmb3IgdGhlIFhDVlIgKi8KKyAgICAvKiBFbmFibGUgUkYgT1NDIGluIFJTSU0gYW5kIHdhaXQgZm9yIHJlYWR5ICovCisgICAgdGVtcCA9IFJTSU0tPkNPTlRST0w7CisgICAgdGVtcCAmPSB+UlNJTV9DT05UUk9MX1JGX09TQ19FTl9NQVNLOworICAgIFJTSU0tPkNPTlRST0wgPSB0ZW1wIHwgUlNJTV9DT05UUk9MX1JGX09TQ19FTigxKTsKKyAgICAvKiBQcmV2ZW50IFhUQUxfT1VUX0VOIGZyb20gZ2VuZXJhdGluZyBYVEFMX09VVCByZXF1ZXN0ICovCisgICAgUlNJTS0+UkZfT1NDX0NUUkwgfD0gUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX09WUkRfRU5fTUFTSzsKKworICAgIC8qIHdhaXQgZm9yIFJGX09TQ19SRUFEWSAqLworICAgIHdoaWxlICgoUlNJTS0+Q09OVFJPTCAmIFJTSU1fQ09OVFJPTF9SRl9PU0NfUkVBRFlfTUFTSykgPT0gMCkge30KKworICAgIGlmIChyZXZJZCA9PSAwKQorICAgIHsKKyAgICAgICAgU0lNLT5TQ0dDNSB8PSBTSU1fU0NHQzVfUEhZRElHX01BU0s7CisgICAgICAgIFhDVlJfVFNNLT5PVlJEMCB8PSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkRfRU5fTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkRfTUFTSzsgLyogRm9yY2UgQURDIERBQyBMRE8gb24gdG8gcHJldmVudCBCR0FQIGZhaWx1cmUgKi8KKyAgICAgICAgLyogUmVzZXQgTERPIHRyaW0gc2V0dGluZ3MgKi8KKyAgICAgICAgUlNJTS0+QU5BX1RSSU0gPSB0ZW1wVHJpbTsKKyAgICB9LyogV29ya2Fyb3VuZCBmb3IgUmV2IDEuMCBYVEFMIHN0YXJ0dXAgYW5kIEFEQyBhbmFsb2cgZGlhZ25vc3RpY3MgY2lyY3VpdHJ5ICovCisKKyAgICAvKiBJbml0IGJvYXJkIGNsb2NrICovCisgICAgQk9BUkRfQm9vdENsb2NrUlVOKCk7CisKKyAgICBrdzQxekFsYXJtSW5pdCgpOworICAgIGt3NDF6UmFuZG9tSW5pdCgpOworICAgIGt3NDF6UmFkaW9Jbml0KCk7CisKKyAgICBvdFBsYXRVYXJ0RW5hYmxlKCk7CisKKyAgICAodm9pZClhcmdjOworICAgICh2b2lkKWFyZ3Y7Cit9CisKK3ZvaWQgUGxhdGZvcm1EZWluaXQodm9pZCkKK3sKK30KKwordm9pZCBQbGF0Zm9ybVByb2Nlc3NEcml2ZXJzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBzSW5zdGFuY2UgPSBhSW5zdGFuY2U7CisgICAga3c0MXpVYXJ0UHJvY2VzcygpOworICAgIGt3NDF6UmFkaW9Qcm9jZXNzKGFJbnN0YW5jZSk7CisgICAga3c0MXpBbGFybVByb2Nlc3MoYUluc3RhbmNlKTsKK30KKwordm9pZCBOTUlfSGFuZGxlcih2b2lkKQoreworICAgIC8qIENoYW5nZSBOTUkgUGluIE1VWCAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKGtDTE9DS19Qb3J0Qik7CisgICAgUE9SVF9TZXRQaW5NdXgoUE9SVEIsIDE4LCBrUE9SVF9NdXhBbHQyKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9yYWRpby5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3JhZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhMTU2MwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9yYWRpby5jCkBAIC0wLDAgKzEsOTUwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciByYWRpbyBjb21tdW5pY2F0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUta3c0MXotY29uZmlnLmgiCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmgiCisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorCisjZGVmaW5lIERPVUJMRV9CVUZGRVJJTkcgICAgICAgICAgICAgKDEpCisjZGVmaW5lIERFRkFVTFRfQ0hBTk5FTCAgICAgICAgICAgICAgKDExKQorI2RlZmluZSBERUZBVUxUX0NDQV9NT0RFICAgICAgICAgICAgIChYQ1ZSX0NDQV9NT0RFMV9jKQorI2RlZmluZSBJRUVFODAyMTU0X0FDS19SRVFVRVNUICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElFRUU4MDIxNTRfTUFYX0xFTkdUSCAgICAgICAgKDEyNykKKyNkZWZpbmUgSUVFRTgwMjE1NF9NSU5fTEVOR1RIICAgICAgICAoNSkKKyNkZWZpbmUgSUVFRTgwMjE1NF9BQ0tfTEVOR1RIICAgICAgICAoSUVFRTgwMjE1NF9NSU5fTEVOR1RIKQorI2RlZmluZSBJRUVFODAyMTU0X0ZSTV9DVExfTE9fT0ZGU0VUICgwKQorI2RlZmluZSBJRUVFODAyMTU0X0RTTl9PRkZTRVQgICAgICAgICgyKQorI2RlZmluZSBJRUVFODAyMTU0X0ZSTV9UWVBFX01BU0sgICAgICgweDcpCisjZGVmaW5lIElFRUU4MDIxNTRfRlJNX1RZUEVfQUNLICAgICAgKDB4MikKKyNkZWZpbmUgSUVFRTgwMjE1NF9UVVJOQVJPVU5EX0xFTiAgICAoMTIpCisjZGVmaW5lIElFRUU4MDIxNTRfQ0NBX0xFTiAgICAgICAgICAgKDgpCisjZGVmaW5lIElFRUU4MDIxNTRfUEhZX1NIUl9MRU4gICAgICAgKDEwKQorI2RlZmluZSBJRUVFODAyMTU0X0FDS19XQUlUICAgICAgICAgICg1NCkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVJfQUxMX01TS19NQVNLICAoWkxMX0lSUVNUU19UTVIxTVNLX01BU0sgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMTF9JUlFTVFNfVE1SMk1TS19NQVNLIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTExfSVJRU1RTX1RNUjNNU0tfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxMX0lSUVNUU19UTVI0TVNLX01BU0sgKQorCit0eXBlZGVmIGVudW0geGN2cl9zdGF0ZV90YWcKK3sKKyAgICBYQ1ZSX0lkbGVfYywKKyAgICBYQ1ZSX1JYX2MsCisgICAgWENWUl9UWF9jLAorICAgIFhDVlJfQ0NBX2MsCisgICAgWENWUl9UUl9jLAorICAgIFhDVlJfQ0NDQV9jLAorfSB4Y3ZyX3N0YXRlX3Q7CisKK3R5cGVkZWYgZW51bSB4Y3ZyX2NjYV90eXBlX3RhZworeworICAgIFhDVlJfRURfYywgICAgICAgICAgICAvKiBlbmVyZ3kgZGV0ZWN0IC0gQ0NBIGJpdCBub3QgYWN0aXZlLCBub3QgdG8gYmUgdXNlZCBmb3IgVCBhbmQgQ0NDQSBzZXF1ZW5jZXMgKi8KKyAgICBYQ1ZSX0NDQV9NT0RFMV9jLCAgICAgLyogZW5lcmd5IGRldGVjdCAtIENDQSBiaXQgQUNUSVZFICovCisgICAgU0NWUl9DQ0FfTU9ERTJfYywgICAgIC8qIDgwMi4xNS40IGNvbXBsaWFudCBzaWduYWwgZGV0ZWN0IC0gQ0NBIGJpdCBBQ1RJVkUgKi8KKyAgICBYQ1ZSX0NDQV9NT0RFM19jICAgICAgLyogODAyLjE1LjQgY29tcGxpYW50IHNpZ25hbCBkZXRlY3QgYW5kIGVuZXJneSBkZXRlY3QgLSBDQ0EgYml0IEFDVElWRSAqLworfSB4Y3ZyX2NjYV90eXBlX3Q7CisKK3N0YXRpYyBvdFJhZGlvU3RhdGUgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworc3RhdGljIHVpbnQxNl90ICAgICAgc1BhbklkOworc3RhdGljIHVpbnQ4X3QgICAgICAgc0V4dFNyY0FkZHJCaXRtYXBbKFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRU5UUllfTlVNICsgNykgLyA4XTsKK3N0YXRpYyB1aW50OF90ICAgICAgIHNDaGFubmVsOworc3RhdGljIGludDhfdCAgICAgICAgc01heEVEOworc3RhdGljIGludDhfdCAgICAgICAgc0F1dG9UeFB3ckxldmVsID0gMDsKKworLyogSVNSIFNpZ25hbGluZyBGbGFncyAqLworc3RhdGljIGJvb2wgICAgICAgICAgc1R4RG9uZSAgICAgPSBmYWxzZTsKK3N0YXRpYyBib29sICAgICAgICAgIHNSeERvbmUgICAgID0gZmFsc2U7CitzdGF0aWMgYm9vbCAgICAgICAgICBzRWRTY2FuRG9uZSA9IGZhbHNlOworc3RhdGljIG90RXJyb3IgICAgICAgc1R4U3RhdHVzOworCitzdGF0aWMgb3RSYWRpb0ZyYW1lICBzVHhGcmFtZTsKK3N0YXRpYyBvdFJhZGlvRnJhbWUgIHNSeEZyYW1lOworI2lmIERPVUJMRV9CVUZGRVJJTkcKK3N0YXRpYyB1aW50OF90ICAgICAgIHNSeERhdGFbT1RfUkFESU9fRlJBTUVfTUFYX1NJWkVdOworI2VuZGlmCisKKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCAgICAgICAgIHJmX2Fib3J0KHZvaWQpOworc3RhdGljIHhjdnJfc3RhdGVfdCByZl9nZXRfc3RhdGUodm9pZCk7CitzdGF0aWMgdm9pZCAgICAgICAgIHJmX3NldF9jaGFubmVsKHVpbnQ4X3QgY2hhbm5lbCk7CitzdGF0aWMgdm9pZCAgICAgICAgIHJmX3NldF90eF9wb3dlcihpbnQ4X3QgdHhfcG93ZXIpOworc3RhdGljIHVpbnQ4X3QgICAgICByZl9scWlfYWRqdXN0KHVpbnQ4X3QgaHdMcWkpOworc3RhdGljIGludDhfdCAgICAgICByZl9scWlfdG9fcnNzaSh1aW50OF90IGxxaSk7CitzdGF0aWMgdWludDMyX3QgICAgIHJmX2dldF90aW1lc3RhbXAodm9pZCk7CitzdGF0aWMgdm9pZCAgICAgICAgIHJmX3NldF90aW1lb3V0KHVpbnQzMl90IGFic190aW1lb3V0KTsKK3N0YXRpYyB1aW50MTZfdCAgICAgcmZfZ2V0X2FkZHJfY2hlY2tzdW0odWludDhfdCAqcEFkZHIsIGJvb2wgRXh0ZW5kZWRBZGRyLCB1aW50MTZfdCBQYW5JZCk7CitzdGF0aWMgb3RFcnJvciAgICAgIHJmX2FkZF9hZGRyX3RhYmxlX2VudHJ5KHVpbnQxNl90IGNoZWNrc3VtLCBib29sIGV4dGVuZGVkQWRkcik7CitzdGF0aWMgb3RFcnJvciAgICAgIHJmX3JlbW92ZV9hZGRyX3RhYmxlX2VudHJ5KHVpbnQxNl90IGNoZWNrc3VtKTsKK3N0YXRpYyBvdEVycm9yICAgICAgcmZfcmVtb3ZlX2FkZHJfdGFibGVfZW50cnlfaW5kZXgodWludDhfdCBpbmRleCk7CitzdGF0aWMgYm9vbCAgICAgICAgIHJmX3Byb2Nlc3NfcnhfZnJhbWUodm9pZCk7CisKK290UmFkaW9TdGF0ZSBvdFBsYXRSYWRpb0dldFN0YXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIHNTdGF0ZTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0dldEllZWVFdWk2NChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFJZWVlRXVpNjQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHVpbnQzMl90IGFkZHJMbzsKKyAgICB1aW50MzJfdCBhZGRySGk7CisKKyAgICBpZiAoKFJTSU0tPk1BQ19MU0IgPT0gMHhmZmZmZmZmZikgJiYgKFJTSU0tPk1BQ19NU0IgPT0gMHhmZikpCisgICAgeworICAgICAgICBhZGRyTG8gPSBTSU0tPlVJREw7CisgICAgICAgIGFkZHJIaSA9IFNJTS0+VUlETUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFkZHJMbyA9IFJTSU0tPk1BQ19MU0I7CisgICAgICAgIGFkZHJIaSA9IFJTSU0tPk1BQ19NU0I7CisgICAgfQorCisgICAgbWVtY3B5KGFJZWVlRXVpNjQsICZhZGRyTG8sIHNpemVvZihhZGRyTG8pKTsKKyAgICBtZW1jcHkoYUllZWVFdWk2NCArIHNpemVvZihhZGRyTG8pLCAmYWRkckhpLCBzaXplb2YoYWRkckhpKSk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQYW5JZCkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgc1BhbklkID0gYVBhbklkOworICAgIFpMTC0+TUFDU0hPUlRBRERSUzAgJj0gflpMTF9NQUNTSE9SVEFERFJTMF9NQUNQQU5JRDBfTUFTSzsKKyAgICBaTEwtPk1BQ1NIT1JUQUREUlMwIHw9IFpMTF9NQUNTSE9SVEFERFJTMF9NQUNQQU5JRDAoYVBhbklkKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFFeHRlbmRlZEFkZHJlc3MpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKyAgICB1aW50MzJfdCBhZGRyTG87CisgICAgdWludDMyX3QgYWRkckhpOworCisgICAgbWVtY3B5KCZhZGRyTG8sIGFFeHRlbmRlZEFkZHJlc3MsIHNpemVvZihhZGRyTG8pKTsKKyAgICBtZW1jcHkoJmFkZHJIaSwgYUV4dGVuZGVkQWRkcmVzcyArIHNpemVvZihhZGRyTG8pLCBzaXplb2YoYWRkckhpKSk7CisKKyAgICBaTEwtPk1BQ0xPTkdBRERSUzBfTFNCID0gYWRkckxvOworICAgIFpMTC0+TUFDTE9OR0FERFJTMF9NU0IgPSBhZGRySGk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBaTEwtPk1BQ1NIT1JUQUREUlMwICY9IH5aTExfTUFDU0hPUlRBRERSUzBfTUFDU0hPUlRBRERSUzBfTUFTSzsKKyAgICBaTEwtPk1BQ1NIT1JUQUREUlMwIHw9IFpMTF9NQUNTSE9SVEFERFJTMF9NQUNTSE9SVEFERFJTMChhU2hvcnRBZGRyZXNzKTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0VuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RFWFBFQ1QoIW90UGxhdFJhZGlvSXNFbmFibGVkKGFJbnN0YW5jZSkpOworCisgICAgWkxMLT5QSFlfQ1RSTCAmPSB+WkxMX1BIWV9DVFJMX1RSQ1ZfTVNLX01BU0s7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoUmFkaW9fMV9JUlFuKTsKKyAgICBOVklDX0VuYWJsZUlSUShSYWRpb18xX0lSUW4pOworCisgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfU0xFRVA7CisKK2V4aXQ6CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9EaXNhYmxlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVYUEVDVChvdFBsYXRSYWRpb0lzRW5hYmxlZChhSW5zdGFuY2UpKTsKKworICAgIE5WSUNfRGlzYWJsZUlSUShSYWRpb18xX0lSUW4pOworICAgIHJmX2Fib3J0KCk7CisgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CisKK2V4aXQ6CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9Jc0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisgICAgcmV0dXJuIHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRDsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1NsZWVwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVycm9yIHN0YXR1cyA9IE9UX0VSUk9SX05PTkU7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RVhQRUNUX0FDVElPTigoKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpKSwgc3RhdHVzID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICByZl9hYm9ydCgpOworICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworCitleGl0OgorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9SZWNlaXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBvdEVycm9yIHN0YXR1cyA9IE9UX0VSUk9SX05PTkU7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RVhQRUNUX0FDVElPTigoKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpKSwgc3RhdHVzID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworCisgICAgb3RFWFBFQ1QocmZfZ2V0X3N0YXRlKCkgIT0gWENWUl9SWF9jKTsKKworICAgIHJmX2Fib3J0KCk7CisKKyAgICAvKiBTZXQgUG93ZXIgbGV2ZWwgZm9yIGF1dG8gVFggKi8KKyAgICByZl9zZXRfdHhfcG93ZXIoc0F1dG9UeFB3ckxldmVsKTsKKyAgICByZl9zZXRfY2hhbm5lbChhQ2hhbm5lbCk7CisgICAgc1J4RnJhbWUubUNoYW5uZWwgPSBhQ2hhbm5lbDsKKworICAgIC8qIENsZWFyIGFsbCBJUlEgZmxhZ3MgKi8KKyAgICBaTEwtPklSUVNUUyA9IFpMTC0+SVJRU1RTOworICAgIC8qIFN0YXJ0IHRoZSBSWCBzZXF1ZW5jZSAqLworICAgIFpMTC0+UEhZX0NUUkwgfD0gWENWUl9SWF9jIDsKKworICAgIC8qIFVubWFzayBTRVEgaW50ZXJydXB0ICovCisgICAgWkxMLT5QSFlfQ1RSTCAmPSB+WkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLOworCitleGl0OgorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9FbmFibGVTcmNNYXRjaChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgaWYgKGFFbmFibGUpCisgICAgeworICAgICAgICBaTEwtPlNBTV9DVFJMIHw9IFpMTF9TQU1fQ1RSTF9TQVAwX0VOX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFpMTC0+U0FNX0NUUkwgJj0gflpMTF9TQU1fQ1RSTF9TQVAwX0VOX01BU0s7CisgICAgfQorfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgIHVpbnQxNl90IGNoZWNrc3VtID0gc1BhbklkICsgYVNob3J0QWRkcmVzczsKKworICAgIHJldHVybiByZl9hZGRfYWRkcl90YWJsZV9lbnRyeShjaGVja3N1bSwgZmFsc2UpOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisgICAgdWludDE2X3QgY2hlY2tzdW0gPSByZl9nZXRfYWRkcl9jaGVja3N1bSgodWludDhfdCAqKWFFeHRBZGRyZXNzLCB0cnVlLCBzUGFuSWQpOworCisgICAgcmV0dXJuIHJmX2FkZF9hZGRyX3RhYmxlX2VudHJ5KGNoZWNrc3VtLCB0cnVlKTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgIHVpbnQxNl90IGNoZWNrc3VtID0gc1BhbklkICsgYVNob3J0QWRkcmVzczsKKworICAgIHJldHVybiByZl9yZW1vdmVfYWRkcl90YWJsZV9lbnRyeShjaGVja3N1bSk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgIHVpbnQxNl90IGNoZWNrc3VtID0gcmZfZ2V0X2FkZHJfY2hlY2tzdW0oKHVpbnQ4X3QgKilhRXh0QWRkcmVzcywgdHJ1ZSwgc1BhbklkKTsKKworICAgIHJldHVybiByZl9yZW1vdmVfYWRkcl90YWJsZV9lbnRyeShjaGVja3N1bSk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgIHVpbnQzMl90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FTlRSWV9OVU07IGkrKykKKyAgICB7CisgICAgICAgIC8qIE9wdGltaXphdGlvbjogc0V4dFNyY0FkZHJCaXRtYXBbaSAvIDhdICYgKDEgPDwgKGkgJSA4KSkgKi8KKyAgICAgICAgaWYgKCEoc0V4dFNyY0FkZHJCaXRtYXBbaSA+PiAzXSAmICgxIDw8IChpICYgNykpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmZfcmVtb3ZlX2FkZHJfdGFibGVfZW50cnlfaW5kZXgoaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKyAgICB1aW50MzJfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRU5UUllfTlVNOyBpKyspCisgICAgeworICAgICAgICAvKiBPcHRpbWl6YXRpb246IHNFeHRTcmNBZGRyQml0bWFwW2kgLyA4XSAmICgxIDw8IChpICUgOCkpKi8KKyAgICAgICAgaWYgKHNFeHRTcmNBZGRyQml0bWFwW2kgPj4gM10gJiAoMSA8PCAoaSAmIDcpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmZfcmVtb3ZlX2FkZHJfdGFibGVfZW50cnlfaW5kZXgoaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK290UmFkaW9GcmFtZSAqb3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAmc1R4RnJhbWU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgIG90RXJyb3Igc3RhdHVzID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MzJfdCB0aW1lb3V0OworCisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RVhQRUNUX0FDVElPTigoKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpKSwgc3RhdHVzID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBpZiAocmZfZ2V0X3N0YXRlKCkgIT0gWENWUl9JZGxlX2MpCisgICAgeworICAgICAgICByZl9hYm9ydCgpOworICAgIH0KKworICAgIHJmX3NldF9jaGFubmVsKGFGcmFtZS0+bUNoYW5uZWwpOworICAgIHJmX3NldF90eF9wb3dlcihhRnJhbWUtPm1Qb3dlcik7CisKKyAgICAqKHVpbnQ4X3QgKilaTEwtPlBLVF9CVUZGRVJfVFggPSBhRnJhbWUtPm1MZW5ndGg7CisKKyAgICAvKiBTZXQgQ0NBIG1vZGUgKi8KKyAgICBaTEwtPlBIWV9DVFJMICY9IH5aTExfUEhZX0NUUkxfQ0NBVFlQRV9NQVNLOworICAgIFpMTC0+UEhZX0NUUkwgfD0gWkxMX1BIWV9DVFJMX0NDQVRZUEUoREVGQVVMVF9DQ0FfTU9ERSk7CisKKyAgICAvKiBDbGVhciBhbGwgSVJRIGZsYWdzICovCisgICAgWkxMLT5JUlFTVFMgPSBaTEwtPklSUVNUUzsKKworICAgIC8qIFBlcmZvcm0gYXV0b21hdGljIHJlY2VwdGlvbiBvZiBBQ0sgZnJhbWUsIGlmIHJlcXVpcmVkICovCisgICAgaWYgKGFGcmFtZS0+bVBzZHVbSUVFRTgwMjE1NF9GUk1fQ1RMX0xPX09GRlNFVF0gJiBJRUVFODAyMTU0X0FDS19SRVFVRVNUKQorICAgIHsKKyAgICAgICAgWkxMLT5QSFlfQ1RSTCB8PSBYQ1ZSX1RSX2M7CisgICAgICAgIC8qIFNldCBBQ0sgd2FpdCB0aW1lLW91dCAqLworICAgICAgICB0aW1lb3V0ICA9IHJmX2dldF90aW1lc3RhbXAoKTsKKyAgICAgICAgdGltZW91dCArPSAoKChYQ1ZSX1RTTS0+RU5EX09GX1NFUSAmIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1RYX1dVX01BU0spID4+CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVV9TSElGVCkgPj4gNCk7CisgICAgICAgIHRpbWVvdXQgKz0gSUVFRTgwMjE1NF9DQ0FfTEVOICsgSUVFRTgwMjE1NF9UVVJOQVJPVU5EX0xFTiArIElFRUU4MDIxNTRfUEhZX1NIUl9MRU4gKworICAgICAgICAgICAgICAgICAgICgxICsgYUZyYW1lLT5tTGVuZ3RoKSAqIE9UX1JBRElPX1NZTUJPTFNfUEVSX09DVEVUICsgSUVFRTgwMjE1NF9BQ0tfV0FJVDsKKyAgICAgICAgcmZfc2V0X3RpbWVvdXQodGltZW91dCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFpMTC0+UEhZX0NUUkwgfD0gWENWUl9UWF9jOworICAgIH0KKworICAgIHNUeFN0YXR1cyA9IE9UX0VSUk9SX05PTkU7CisgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQ7CisgICAgLyogVW5tYXNrIFNFUSBpbnRlcnJ1cHQgKi8KKyAgICBaTEwtPlBIWV9DVFJMICY9IH5aTExfUEhZX0NUUkxfU0VRTVNLX01BU0s7CisKK2V4aXQ6CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKyAgICByZXR1cm4gKFpMTC0+TFFJX0FORF9SU1NJICYgWkxMX0xRSV9BTkRfUlNTSV9SU1NJX01BU0spID4+IFpMTF9MUUlfQU5EX1JTU0lfUlNTSV9TSElGVDsKK30KKworb3RSYWRpb0NhcHMgb3RQbGF0UmFkaW9HZXRDYXBzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIE9UX1JBRElPX0NBUFNfQUNLX1RJTUVPVVQgfCBPVF9SQURJT19DQVBTX0VORVJHWV9TQ0FOOworfQorCitib29sIG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisgICAgcmV0dXJuIChaTEwtPlBIWV9DVFJMICYgWkxMX1BIWV9DVFJMX1BST01JU0NVT1VTX01BU0spID09IFpMTF9QSFlfQ1RSTF9QUk9NSVNDVU9VU19NQVNLOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIGlmIChhRW5hYmxlKQorICAgIHsKKyAgICAgICAgWkxMLT5QSFlfQ1RSTCB8PSBaTExfUEhZX0NUUkxfUFJPTUlTQ1VPVVNfTUFTSzsKKyAgICAgICAgLyogRlJNX1ZFUlsxMTo4XSA9IGIxMTExLiBBbnkgRnJhbWVWZXJzaW9uIGFjY2VwdGVkICovCisgICAgICAgIFpMTC0+UlhfRlJBTUVfRklMVEVSIHw9IChaTExfUlhfRlJBTUVfRklMVEVSX0ZSTV9WRVJfRklMVEVSX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ0tfRlRfTUFTSyAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMTF9SWF9GUkFNRV9GSUxURVJfTlNfRlRfTUFTSyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFpMTC0+UEhZX0NUUkwgJj0gflpMTF9QSFlfQ1RSTF9QUk9NSVNDVU9VU19NQVNLOworICAgICAgICAvKiBGUk1fVkVSWzExOjhdID0gYjAwMTEuIEFjY2VwdCBGcmFtZVZlcnNpb24gMCBhbmQgMSBwYWNrZXRzLCByZWplY3QgYWxsIG90aGVycyAqLworICAgICAgICAvKiBCZWFjb24sIERhdGEgYW5kIE1BQyBjb21tYW5kIGZyYW1lIHR5cGVzIGFjY2VwdGVkICovCisgICAgICAgIFpMTC0+UlhfRlJBTUVfRklMVEVSICY9IH4oWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GUk1fVkVSX0ZJTFRFUl9NQVNLICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTExfUlhfRlJBTUVfRklMVEVSX0FDS19GVF9NQVNLICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMTF9SWF9GUkFNRV9GSUxURVJfTlNfRlRfTUFTSyAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ1RJVkVfUFJPTUlTQ1VPVVNfTUFTSyk7CisgICAgICAgIFpMTC0+UlhfRlJBTUVfRklMVEVSIHw9IFpMTF9SWF9GUkFNRV9GSUxURVJfRlJNX1ZFUl9GSUxURVIoMyk7CisgICAgfQorfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uKQoreworICAgIG90RXJyb3Igc3RhdHVzID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MzJfdCB0aW1lb3V0OworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oKChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQpICYmCisgICAgICAgICAgICAgICAgICAgICAoc1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEKSksIHN0YXR1cyA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgaWYgKHJmX2dldF9zdGF0ZSgpICE9IFhDVlJfSWRsZV9jKQorICAgIHsKKyAgICAgICAgcmZfYWJvcnQoKTsKKyAgICB9CisKKyAgICBzTWF4RUQgPSAtMTI4OworICAgIHJmX3NldF9jaGFubmVsKGFTY2FuQ2hhbm5lbCk7CisgICAgLyogU2V0IENDQSB0eXBlIHRvIEVEIC0gRW5lcmd5IERldGVjdCAqLworICAgIFpMTC0+UEhZX0NUUkwgJj0gflpMTF9QSFlfQ1RSTF9DQ0FUWVBFX01BU0s7CisgICAgWkxMLT5QSFlfQ1RSTCB8PSBaTExfUEhZX0NUUkxfQ0NBVFlQRShYQ1ZSX0VEX2MpOworICAgIC8qIENsZWFyIGFsbCBJUlEgZmxhZ3MgKi8KKyAgICBaTEwtPklSUVNUUyA9IFpMTC0+SVJRU1RTOworICAgIC8qIFN0YXJ0IEVEIHNlcXVlbmNlICovCisgICAgWkxMLT5QSFlfQ1RSTCB8PSBYQ1ZSX0NDQV9jOworICAgIC8qIFVubWFzayBTRVEgaW50ZXJydXB0ICovCisgICAgWkxMLT5QSFlfQ1RSTCAmPSB+WkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLOworICAgIC8qIFNldCBTY2FuIHRpbWUtb3V0ICovCisgICAgdGltZW91dCAgPSByZl9nZXRfdGltZXN0YW1wKCk7CisgICAgdGltZW91dCArPSAoYVNjYW5EdXJhdGlvbiAqIDEwMDApIC8gT1RfUkFESU9fU1lNQk9MX1RJTUU7CisgICAgcmZfc2V0X3RpbWVvdXQodGltZW91dCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldERlZmF1bHRUeFBvd2VyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFQb3dlcikKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBzQXV0b1R4UHdyTGV2ZWwgPSBhUG93ZXI7Cit9CisKK2ludDhfdCBvdFBsYXRSYWRpb0dldFJlY2VpdmVTZW5zaXRpdml0eShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgcmV0dXJuIC0xMDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCByZl9hYm9ydCh2b2lkKQoreworICAgIC8qIE1hc2sgU0VRIGludGVycnVwdCAqLworICAgIFpMTC0+UEhZX0NUUkwgfD0gWkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLOworCisgICAgLyogRGlzYWJsZSB0aW1lciB0cmlnZ2VyIChmb3Igc2NoZWR1bGVkIFhDVlNFUSkgKi8KKyAgICBpZiAoWkxMLT5QSFlfQ1RSTCAmIFpMTF9QSFlfQ1RSTF9UTVJUUklHRU5fTUFTSykKKyAgICB7CisgICAgICAgIFpMTC0+UEhZX0NUUkwgJj0gflpMTF9QSFlfQ1RSTF9UTVJUUklHRU5fTUFTSzsKKworICAgICAgICAvKiBnaXZlIHRoZSBGU00gZW5vdWdoIHRpbWUgdG8gc3RhcnQgaWYgaXQgd2FzIHRyaWdnZXJlZCAqLworICAgICAgICB3aGlsZSAoKFhDVlJfTUlTQy0+WENWUl9DVFJMICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9DT1VOVF9NQVNLKSA9PSAwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBJZiBYQ1ZSIGlzIG5vdCBpZGxlLCBhYm9ydCBjdXJyZW50IFNFUSAqLworICAgIGlmIChaTEwtPlBIWV9DVFJMICYgWkxMX1BIWV9DVFJMX1hDVlNFUV9NQVNLKQorICAgIHsKKyAgICAgICAgWkxMLT5QSFlfQ1RSTCAmPSB+WkxMX1BIWV9DVFJMX1hDVlNFUV9NQVNLOworCisgICAgICAgIC8qIHdhaXQgZm9yIFNlcXVlbmNlIElkbGUgKGlmIG5vdCBhbHJlYWR5KSAqLworICAgICAgICB3aGlsZSAoWkxMLT5TRVFfU1RBVEUgJiBaTExfU0VRX1NUQVRFX1NFUV9TVEFURV9NQVNLKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTdG9wIHRpbWVycyAqLworICAgIFpMTC0+UEhZX0NUUkwgJj0gfihaTExfUEhZX0NUUkxfVE1SMkNNUF9FTl9NQVNLIHwgWkxMX1BIWV9DVFJMX1RNUjNDTVBfRU5fTUFTSyk7CisgICAgLyogQ2xlYXIgYWxsIFBQIElSUSBiaXRzIHRvIGF2b2lkIHVuZXhwZWN0ZWQgaW50ZXJydXB0cyggZG8gbm90IGNoYW5nZSBUTVIxIGFuZCBUTVI0IElSUSBzdGF0dXMgKSAqLworICAgIFpMTC0+SVJRU1RTICY9IH4oWkxMX0lSUVNUU19UTVIxSVJRX01BU0sgfCBaTExfSVJRU1RTX1RNUjRJUlFfTUFTSyk7Cit9CisKK3N0YXRpYyB4Y3ZyX3N0YXRlX3QgcmZfZ2V0X3N0YXRlKHZvaWQpCit7CisgICAgcmV0dXJuICh4Y3ZyX3N0YXRlX3QpKChaTEwtPlBIWV9DVFJMICYgWkxMX1BIWV9DVFJMX1hDVlNFUV9NQVNLKSA+PiBaTExfUEhZX0NUUkxfWENWU0VRX1NISUZUKTsKK30KKworc3RhdGljIHZvaWQgcmZfc2V0X2NoYW5uZWwodWludDhfdCBjaGFubmVsKQoreworICAgIGlmIChzQ2hhbm5lbCAhPSBjaGFubmVsKQorICAgIHsKKyAgICAgICAgWkxMLT5DSEFOTkVMX05VTTAgPSBjaGFubmVsOworICAgICAgICBzQ2hhbm5lbCA9IGNoYW5uZWw7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCByZl9zZXRfdHhfcG93ZXIoaW50OF90IHR4X3Bvd2VyKQoreworICAgIGlmICh0eF9wb3dlciA+IDIpCisgICAgeworICAgICAgICBaTEwtPlBBX1BXUiA9IDMwOworICAgIH0KKyAgICBlbHNlIGlmICh0eF9wb3dlciA+IDEpCisgICAgeworICAgICAgICBaTEwtPlBBX1BXUiA9IDI0OworICAgIH0KKyAgICBlbHNlIGlmICh0eF9wb3dlciA+IC0xKQorICAgIHsKKyAgICAgICAgWkxMLT5QQV9QV1IgPSAxODsKKyAgICB9CisgICAgZWxzZSBpZiAodHhfcG93ZXIgPiAtMykKKyAgICB7CisgICAgICAgIFpMTC0+UEFfUFdSID0gMTQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR4X3Bvd2VyID4gLTQpCisgICAgeworICAgICAgICBaTEwtPlBBX1BXUiA9IDEyOworICAgIH0KKyAgICBlbHNlIGlmICh0eF9wb3dlciA+IC02KQorICAgIHsKKyAgICAgICAgWkxMLT5QQV9QV1IgPSAxMDsKKyAgICB9CisgICAgZWxzZSBpZiAodHhfcG93ZXIgPiAtOCkKKyAgICB7CisgICAgICAgIFpMTC0+UEFfUFdSID0gODsKKyAgICB9CisgICAgZWxzZSBpZiAodHhfcG93ZXIgPiAtMTEpCisgICAgeworICAgICAgICBaTEwtPlBBX1BXUiA9IDY7CisgICAgfQorICAgIGVsc2UgaWYgKHR4X3Bvd2VyID4gLTE0KQorICAgIHsKKyAgICAgICAgWkxMLT5QQV9QV1IgPSA0OworICAgIH0KKyAgICBlbHNlIGlmICh0eF9wb3dlciA+IC0yMCkKKyAgICB7CisgICAgICAgIFpMTC0+UEFfUFdSID0gMjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgWkxMLT5QQV9QV1IgPSAwOworICAgIH0KK30KKworc3RhdGljIHVpbnQxNl90IHJmX2dldF9hZGRyX2NoZWNrc3VtKHVpbnQ4X3QgKnBBZGRyLCBib29sIEV4dGVuZGVkQWRkciwgdWludDE2X3QgUGFuSWQpCit7CisgICAgdWludDE2X3QgY2hlY2tzdW07CisKKyAgICAvKiBTaG9ydCBhZGRyZXNzICovCisgICAgY2hlY2tzdW0gID0gUGFuSWQ7CisgICAgY2hlY2tzdW0gKz0gKnBBZGRyKys7CisgICAgY2hlY2tzdW0gKz0gKHVpbnQxNl90KSgqcEFkZHIrKykgPDwgODsKKworICAgIGlmIChFeHRlbmRlZEFkZHIpCisgICAgeworICAgICAgICAvKiBFeHRlbmRlZCBhZGRyZXNzICovCisgICAgICAgIGNoZWNrc3VtICs9ICpwQWRkcisrOworICAgICAgICBjaGVja3N1bSArPSAoKHVpbnQxNl90KSgqcEFkZHIrKykpIDw8IDg7CisgICAgICAgIGNoZWNrc3VtICs9ICpwQWRkcisrOworICAgICAgICBjaGVja3N1bSArPSAoKHVpbnQxNl90KSgqcEFkZHIrKykpIDw8IDg7CisgICAgICAgIGNoZWNrc3VtICs9ICpwQWRkcisrOworICAgICAgICBjaGVja3N1bSArPSAoKHVpbnQxNl90KSgqcEFkZHIrKykpIDw8IDg7CisgICAgfQorCisgICAgcmV0dXJuIGNoZWNrc3VtOworfQorCitzdGF0aWMgb3RFcnJvciByZl9hZGRfYWRkcl90YWJsZV9lbnRyeSh1aW50MTZfdCBjaGVja3N1bSwgYm9vbCBleHRlbmRlZEFkZHIpCit7CisgICAgdWludDhfdCBpbmRleDsKKyAgICBvdEVycm9yIHN0YXR1czsKKworICAgIC8qIEZpbmQgZmlyc3QgZnJlZSBpbmRleCAqLworICAgIFpMTC0+U0FNX1RBQkxFID0gWkxMX1NBTV9UQUJMRV9GSU5EX0ZSRUVfSURYX01BU0s7CisKKyAgICB3aGlsZSAoWkxMLT5TQU1fVEFCTEUgJiBaTExfU0FNX1RBQkxFX1NBTV9CVVNZX01BU0spCisgICAgeworICAgIH0KKworICAgIGluZGV4ID0gKFpMTC0+U0FNX0ZSRUVfSURYICYgWkxMX1NBTV9GUkVFX0lEWF9TQVAwXzFTVF9GUkVFX0lEWF9NQVNLKSA+PiBaTExfU0FNX0ZSRUVfSURYX1NBUDBfMVNUX0ZSRUVfSURYX1NISUZUOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKChpbmRleCA8IFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRU5UUllfTlVNKSwgc3RhdHVzID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvKiBJbnNlcnQgdGhlIGNoZWNrc3VtIGF0IHRoZSBpbmRleCBmb3VuZCAqLworICAgIFpMTC0+U0FNX1RBQkxFID0gKCh1aW50MzJfdClpbmRleCA8PCBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9TSElGVCkgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCljaGVja3N1bSA8PCBaTExfU0FNX1RBQkxFX1NBTV9DSEVDS1NVTV9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgICAgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfV1JfTUFTSyB8IFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX0VOX01BU0s7CisKKyAgICBpZiAoZXh0ZW5kZWRBZGRyKQorICAgIHsKKyAgICAgICAgLyogT3B0aW1pemF0aW9uOiBzRXh0U3JjQWRkckJpdG1hcFtpbmRleCAvIDhdIHw9IDEgPDwgKGluZGV4ICUgOCk7ICovCisgICAgICAgIHNFeHRTcmNBZGRyQml0bWFwW2luZGV4ID4+IDNdIHw9IDEgPDwgKGluZGV4ICYgNyk7CisgICAgfQorCisgICAgc3RhdHVzID0gT1RfRVJST1JfTk9ORTsKKworZXhpdDoKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgb3RFcnJvciByZl9yZW1vdmVfYWRkcl90YWJsZV9lbnRyeSh1aW50MTZfdCBjaGVja3N1bSkKK3sKKyAgICBvdEVycm9yIHN0YXR1cyA9IE9UX0VSUk9SX05PX0FERFJFU1M7CisgICAgdWludDMyX3QgaSwgdGVtcDsKKworICAgIC8qIFNlYXJjaCBmb3IgYW4gZW50cnkgdG8gbWF0Y2ggdGhlIHByb3ZpZGVkIGNoZWNrc3VtICovCisgICAgZm9yIChpID0gMDsgaSA8IFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRU5UUllfTlVNOyBpKyspCisgICAgeworICAgICAgICBaTEwtPlNBTV9UQUJMRSA9IGkgPDwgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfU0hJRlQ7CisgICAgICAgIC8qIFJlYWQgY2hlY2tzdW0gbG9jYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ICovCisgICAgICAgIHRlbXAgPSAoWkxMLT5TQU1fVEFCTEUgJiBaTExfU0FNX1RBQkxFX1NBTV9DSEVDS1NVTV9NQVNLKSA+PiBaTExfU0FNX1RBQkxFX1NBTV9DSEVDS1NVTV9TSElGVDsKKworICAgICAgICBpZiAodGVtcCA9PSBjaGVja3N1bSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogUmVtb3ZlIHRoZSBlbnRyeSBmcm9tIHRoZSB0YWJsZSAqLworICAgICAgICAgICAgc3RhdHVzID0gcmZfcmVtb3ZlX2FkZHJfdGFibGVfZW50cnlfaW5kZXgoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBvdEVycm9yIHJmX3JlbW92ZV9hZGRyX3RhYmxlX2VudHJ5X2luZGV4KHVpbnQ4X3QgaW5kZXgpCit7CisgICAgb3RFcnJvciBzdGF0dXMgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGluZGV4IDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FTlRSWV9OVU0sIHN0YXR1cyA9IE9UX0VSUk9SX05PX0FERFJFU1MpOworCisgICAgWkxMLT5TQU1fVEFCTEUgPSAoKHVpbnQzMl90KTB4RkZGRiA8PCBaTExfU0FNX1RBQkxFX1NBTV9DSEVDS1NVTV9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClpbmRleCA8PCBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgICAgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfSU5WX01BU0sgfCBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9XUl9NQVNLOworCisgICAgLyogQ2xlYXIgYml0bWFwICovCisgICAgLyogT3B0aW1pemF0aW9uOiBzRXh0U3JjQWRkckJpdG1hcFtpbmRleCAvIDhdICY9IH4oMSA8PCAoaW5kZXggJSA4KSk7ICovCisgICAgc0V4dFNyY0FkZHJCaXRtYXBbaW5kZXggPj4gM10gJj0gfigxIDw8IChpbmRleCAmIDcpKTsKKworZXhpdDoKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdWludDhfdCByZl9scWlfYWRqdXN0KHVpbnQ4X3QgaHdMcWkpCit7CisgICAgaWYgKGh3THFpID49IDIyMCkKKyAgICB7CisgICAgICAgIGh3THFpID0gMjU1OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBod0xxaSA9ICg1MSAqIGh3THFpKSAvIDQ0OworICAgIH0KKworICAgIHJldHVybiBod0xxaTsKK30KKworc3RhdGljIGludDhfdCByZl9scWlfdG9fcnNzaSh1aW50OF90IGxxaSkKK3sKKyAgICBpbnQzMl90IHJzc2kgPSAoMzYgKiBscWkgLSA5ODM2KSAvIDEwOTsKKworICAgIHJldHVybiAoaW50OF90KXJzc2k7Cit9CisKK3N0YXRpYyB1aW50MzJfdCByZl9nZXRfdGltZXN0YW1wKHZvaWQpCit7CisgICAgcmV0dXJuIFpMTC0+RVZFTlRfVE1SID4+IFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX1NISUZUOworfQorCitzdGF0aWMgdm9pZCByZl9zZXRfdGltZW91dCh1aW50MzJfdCBhYnNfdGltZW91dCkKK3sKKyAgICB1aW50MzJfdCBpcnFTdHM7CisKKyAgICAvKiBEaXNhYmxlIFRNUjMgY29tcGFyZSAqLworICAgIFpMTC0+UEhZX0NUUkwgJj0gflpMTF9QSFlfQ1RSTF9UTVIzQ01QX0VOX01BU0s7CisgICAgLyogU2V0IHRpbWUtb3V0IHZhbHVlICovCisgICAgWkxMLT5UM0NNUCA9IGFic190aW1lb3V0OworICAgIC8qIEFrbm93bGVkZ2UgYW5kIHVubWFzayBUTVIzIElSUSAqLworICAgIGlycVN0cyAgPSBaTEwtPklSUVNUUyAmIFpMTF9JUlFTVFNfVE1SX0FMTF9NU0tfTUFTSzsKKyAgICBpcnFTdHMgJj0gflpMTF9JUlFTVFNfVE1SM01TS19NQVNLOworICAgIGlycVN0cyB8PSBaTExfSVJRU1RTX1RNUjNJUlFfTUFTSzsKKyAgICBaTEwtPklSUVNUUyA9IGlycVN0czsKKyAgICAvKiBFbmFibGUgVE1SMyBjb21wYXJlICovCisgICAgWkxMLT5QSFlfQ1RSTCB8PSBaTExfUEhZX0NUUkxfVE1SM0NNUF9FTl9NQVNLOworfQorCitzdGF0aWMgYm9vbCByZl9wcm9jZXNzX3J4X2ZyYW1lKHZvaWQpCit7CisgICAgdWludDhfdCB0ZW1wOworICAgIGJvb2wgc3RhdHVzID0gdHJ1ZTsKKworICAgIC8qIEdldCBSeCBsZW5ndGggKi8KKyAgICB0ZW1wID0gKFpMTC0+SVJRU1RTICYgWkxMX0lSUVNUU19SWF9GUkFNRV9MRU5HVEhfTUFTSykgPj4gWkxMX0lSUVNUU19SWF9GUkFNRV9MRU5HVEhfU0hJRlQ7CisKKyAgICAvKiBDaGVjayBpZiBmcmFtZSBpcyB2YWxpZCAqLworICAgIG90RVhQRUNUX0FDVElPTigoSUVFRTgwMjE1NF9NSU5fTEVOR1RIIDw9IHRlbXApICYmICh0ZW1wIDw9IElFRUU4MDIxNTRfTUFYX0xFTkdUSCksIHN0YXR1cyA9IGZhbHNlKTsKKworICAgIHNSeEZyYW1lLm1MZW5ndGggPSB0ZW1wOworICAgIHRlbXAgPSAoWkxMLT5MUUlfQU5EX1JTU0kgJiBaTExfTFFJX0FORF9SU1NJX0xRSV9WQUxVRV9NQVNLKSA+PiBaTExfTFFJX0FORF9SU1NJX0xRSV9WQUxVRV9TSElGVDsKKyAgICBzUnhGcmFtZS5tTHFpID0gcmZfbHFpX2FkanVzdCh0ZW1wKTsKKyAgICBzUnhGcmFtZS5tUG93ZXIgPSByZl9scWlfdG9fcnNzaShzUnhGcmFtZS5tTHFpKTsKKyNpZiBET1VCTEVfQlVGRkVSSU5HCisKKyAgICBmb3IgKHRlbXAgPSAwOyB0ZW1wIDwgc1J4RnJhbWUubUxlbmd0aCAtIDI7IHRlbXArKykKKyAgICB7CisgICAgICAgIHNSeERhdGFbdGVtcF0gPSAoKHVpbnQ4X3QgKilaTEwtPlBLVF9CVUZGRVJfUlgpW3RlbXBdOworICAgIH0KKworI2VuZGlmCisKK2V4aXQ6CisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBSYWRpb18xX0lSUUhhbmRsZXIodm9pZCkKK3sKKyAgICB4Y3ZyX3N0YXRlX3Qgc3RhdGUgPSByZl9nZXRfc3RhdGUoKTsKKyAgICB1aW50MzJfdCBpcnFTdGF0dXMgPSBaTEwtPklSUVNUUzsKKyAgICBpbnQ4X3QgdGVtcDsKKworICAgIFpMTC0+SVJRU1RTID0gaXJxU3RhdHVzOworCisgICAgLyogVE1SMyBJUlEgLSB0aW1lLW91dCAqLworICAgIGlmICgoaXJxU3RhdHVzICYgWkxMX0lSUVNUU19UTVIzSVJRX01BU0spICYmICghKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfVE1SM01TS19NQVNLKSkpCisgICAgeworICAgICAgICAvKiBTdG9wIFRNUjMgKi8KKyAgICAgICAgWkxMLT5JUlFTVFMgPSBpcnFTdGF0dXMgfCBaTExfSVJRU1RTX1RNUjNNU0tfTUFTSzsKKyAgICAgICAgWkxMLT5QSFlfQ1RSTCAmPSB+WkxMX1BIWV9DVFJMX1RNUjNDTVBfRU5fTUFTSzsKKworICAgICAgICBpZiAoc3RhdGUgPT0gWENWUl9DQ0FfYykKKyAgICAgICAgeworICAgICAgICAgICAgcmZfYWJvcnQoKTsKKyAgICAgICAgICAgIHNFZFNjYW5Eb25lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoc3RhdGUgPT0gWENWUl9UUl9jKSAmJiAhKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfUlhJUlFfTUFTSykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJmX2Fib3J0KCk7CisgICAgICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworICAgICAgICAgICAgc1R4U3RhdHVzID0gT1RfRVJST1JfTk9fQUNLOworICAgICAgICAgICAgc1R4RG9uZSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTZXF1ZW5jZSBkb25lIElSUSAqLworICAgIGlmICgoIShaTEwtPlBIWV9DVFJMICYgWkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLKSkgJiYgKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfU0VRSVJRX01BU0spKQorICAgIHsKKyAgICAgICAgLyogQ2xlYW51cCAqLworICAgICAgICBaTEwtPlBIWV9DVFJMICY9IH5aTExfUEhZX0NUUkxfWENWU0VRX01BU0s7CisgICAgICAgIFpMTC0+UEhZX0NUUkwgfD0gWkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLOworCisgICAgICAgIHN3aXRjaCAoc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBYQ1ZSX1JYX2M6CisgICAgICAgICAgICBzUnhEb25lID0gcmZfcHJvY2Vzc19yeF9mcmFtZSgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBYQ1ZSX1RSX2M6CisgICAgICAgICAgICBpZiAoKFpMTC0+UEhZX0NUUkwgJiBaTExfUEhZX0NUUkxfQ0NBQkZSVFhfTUFTSykgJiYgKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfQ0NBX01BU0spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNUeFN0YXR1cyA9IE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfUlhJUlFfTUFTSykgfHwKKyAgICAgICAgICAgICAgICAgICAgIChyZl9wcm9jZXNzX3J4X2ZyYW1lKCkgPT0gZmFsc2UpIHx8CisgICAgICAgICAgICAgICAgICAgICAoc1J4RnJhbWUubUxlbmd0aCAhPSBJRUVFODAyMTU0X0FDS19MRU5HVEgpIHx8CisgICAgICAgICAgICAgICAgICAgICAoKHNSeEZyYW1lLm1Qc2R1W0lFRUU4MDIxNTRfRlJNX0NUTF9MT19PRkZTRVRdICYgSUVFRTgwMjE1NF9GUk1fVFlQRV9NQVNLKSAhPSBJRUVFODAyMTU0X0ZSTV9UWVBFX0FDSykgfHwKKyAgICAgICAgICAgICAgICAgICAgIChzUnhGcmFtZS5tUHNkdVtJRUVFODAyMTU0X0RTTl9PRkZTRVRdICE9IHNUeEZyYW1lLm1Qc2R1W0lFRUU4MDIxNTRfRFNOX09GRlNFVF0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNUeFN0YXR1cyA9IE9UX0VSUk9SX05PX0FDSzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKyAgICAgICAgICAgIHNUeERvbmUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBYQ1ZSX1RYX2M6CisgICAgICAgICAgICBpZiAoKFpMTC0+UEhZX0NUUkwgJiBaTExfUEhZX0NUUkxfQ0NBQkZSVFhfTUFTSykgJiYgKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfQ0NBX01BU0spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNUeFN0YXR1cyA9IE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgICAgICBzVHhEb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWENWUl9DQ0FfYzoKKyAgICAgICAgICAgIHRlbXAgPSAoWkxMLT5MUUlfQU5EX1JTU0kgJiBaTExfTFFJX0FORF9SU1NJX0NDQTFfRURfRk5MX01BU0spID4+IFpMTF9MUUlfQU5EX1JTU0lfQ0NBMV9FRF9GTkxfU0hJRlQ7CisKKyAgICAgICAgICAgIGlmICh0ZW1wID4gc01heEVEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNNYXhFRCA9IHRlbXA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc0VkU2NhbkRvbmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogUmVzdGFydCBFRCAqLworICAgICAgICAgICAgICAgIHdoaWxlIChaTEwtPlNFUV9TVEFURSAmIFpMTF9TRVFfU1RBVEVfU0VRX1NUQVRFX01BU0spIHt9CisKKyAgICAgICAgICAgICAgICBaTEwtPklSUVNUUyA9IChaTEwtPklSUVNUUyAmIFpMTF9JUlFTVFNfVE1SX0FMTF9NU0tfTUFTSykgfCBaTExfSVJRU1RTX1NFUUlSUV9NQVNLOworICAgICAgICAgICAgICAgIFpMTC0+UEhZX0NUUkwgfD0gWENWUl9DQ0FfYzsKKyAgICAgICAgICAgICAgICBaTEwtPlBIWV9DVFJMICY9IH5aTExfUEhZX0NUUkxfU0VRTVNLX01BU0s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZl9hYm9ydCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFKSAmJiAocmZfZ2V0X3N0YXRlKCkgPT0gWENWUl9JZGxlX2MpKQorICAgIHsKKyAgICAgICAgLyogUmVzdGFydCBSWCAqLworICAgICAgICB3aGlsZSAoWkxMLT5TRVFfU1RBVEUgJiBaTExfU0VRX1NUQVRFX1NFUV9TVEFURV9NQVNLKSB7fQorCisgICAgICAgIFpMTC0+SVJRU1RTID0gWkxMLT5JUlFTVFM7CisgICAgICAgIFpMTC0+UEhZX0NUUkwgfD0gWENWUl9SWF9jOworICAgICAgICBaTEwtPlBIWV9DVFJMICY9IH5aTExfUEhZX0NUUkxfU0VRTVNLX01BU0s7CisgICAgfQorfQorCit2b2lkIGt3NDF6UmFkaW9Jbml0KHZvaWQpCit7CisgICAgWENWUl9Jbml0KFpJR0JFRV9NT0RFLCBEUl81MDBLQlBTKTsKKworICAgIC8qIERpc2FibGUgYWxsIHRpbWVycywgZW5hYmxlIEFVVE9BQ0sgYW5kIENDQSBiZWZvcmUgVFgsIG1hc2sgYWxsIGludGVycnVwdHMgKi8KKyAgICBaTEwtPlBIWV9DVFJMID0gWkxMX1BIWV9DVFJMX0NDQVRZUEUoREVGQVVMVF9DQ0FfTU9ERSkgfAorICAgICAgICAgICAgICAgICAgICBaTExfUEhZX0NUUkxfQ0NBQkZSVFhfTUFTSyAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIFpMTF9QSFlfQ1RSTF9UU01fTVNLX01BU0sgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgWkxMX1BIWV9DVFJMX1dBS0VfTVNLX01BU0sgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBaTExfUEhZX0NUUkxfQ1JDX01TS19NQVNLICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIFpMTF9QSFlfQ1RSTF9QTExfVU5MT0NLX01TS19NQVNLICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgWkxMX1BIWV9DVFJMX0ZJTFRFUkZBSUxfTVNLX01BU0sgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBaTExfUEhZX0NUUkxfUlhfV01SS19NU0tfTUFTSyAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIFpMTF9QSFlfQ1RSTF9DQ0FNU0tfTUFTSyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgWkxMX1BIWV9DVFJMX1JYTVNLX01BU0sgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBaTExfUEhZX0NUUkxfVFhNU0tfTUFTSyAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIFpMTF9QSFlfQ1RSTF9TRVFNU0tfTUFTSyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgWkxMX1BIWV9DVFJMX0FVVE9BQ0tfTUFTSyAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBaTExfUEhZX0NUUkxfVFJDVl9NU0tfTUFTSzsKKworICAgIC8qIENsZWFyIGFsbCBJUlEgZmxhZ3MgYW5kIGRpc2FibGUgYWxsIHRpbWVyIGludGVycnVwdHMgKi8KKyAgICBaTEwtPklSUVNUUyA9IFpMTC0+SVJRU1RTOworCisgICAgLyogIEZyYW1lIEZpbHRlcmluZworICAgIEZSTV9WRVJbNzo2XSA9IGIxMS4gQWNjZXB0IEZyYW1lVmVyc2lvbiAwIGFuZCAxIHBhY2tldHMsIHJlamVjdCBhbGwgb3RoZXJzICovCisgICAgWkxMLT5SWF9GUkFNRV9GSUxURVIgJj0gflpMTF9SWF9GUkFNRV9GSUxURVJfRlJNX1ZFUl9GSUxURVJfTUFTSzsKKyAgICBaTEwtPlJYX0ZSQU1FX0ZJTFRFUiA9IFpMTF9SWF9GUkFNRV9GSUxURVJfRlJNX1ZFUl9GSUxURVIoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9DTURfRlRfTUFTSyAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBaTExfUlhfRlJBTUVfRklMVEVSX0RBVEFfRlRfTUFTSyAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMTF9SWF9GUkFNRV9GSUxURVJfQUNLX0ZUX01BU0sgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9CRUFDT05fRlRfTUFTSzsKKworICAgIC8qIFNldCBwcmVzY2FsbGVyIHRvIG9idGFpbiAxIHN5bWJvbCAoMTZ1cykgdGltZWJhc2UgKi8KKyAgICBaTEwtPlRNUl9QUkVTQ0FMRSA9IDB4MDU7CisKKyAgICAvKiBTZXQgQ0NBIHRocmVzaG9sZCB0byAtNzUgZEJtICovCisgICAgWkxMLT5DQ0FfTFFJX0NUUkwgJj0gflpMTF9DQ0FfTFFJX0NUUkxfQ0NBMV9USFJFU0hfTUFTSzsKKyAgICBaTEwtPkNDQV9MUUlfQ1RSTCB8PSBaTExfQ0NBX0xRSV9DVFJMX0NDQTFfVEhSRVNIKC03NSk7CisKKyAgICAvKiBBZGp1c3QgTFFJIGNvbXBlbnNhdGlvbiAqLworICAgIFpMTC0+Q0NBX0xRSV9DVFJMICY9IH5aTExfQ0NBX0xRSV9DVFJMX0xRSV9PRkZTRVRfQ09NUF9NQVNLOworICAgIFpMTC0+Q0NBX0xRSV9DVFJMIHw9IFpMTF9DQ0FfTFFJX0NUUkxfTFFJX09GRlNFVF9DT01QKDk2KTsKKworICAgIC8qIEFkanVzdCBBQ0sgZGVsYXkgdG8gZnVsZmlsbCB0aGUgODAyLjE1LjQgdHVybmFyb3VuZCByZXF1aXJlbWVudHMgKi8KKyAgICBaTEwtPkFDS0RFTEFZICY9IH5aTExfQUNLREVMQVlfQUNLREVMQVlfTUFTSzsKKyAgICBaTEwtPkFDS0RFTEFZIHw9IFpMTF9BQ0tERUxBWV9BQ0tERUxBWSgtOCk7CisKKyAgICAvKiBDbGVhciBIVyBpbmRpcmVjdCBxdWV1ZSAqLworICAgIFpMTC0+U0FNX1RBQkxFIHw9IFpMTF9TQU1fVEFCTEVfSU5WQUxJREFURV9BTExfTUFTSzsKKworICAgIHJmX3NldF9jaGFubmVsKERFRkFVTFRfQ0hBTk5FTCk7CisgICAgcmZfc2V0X3R4X3Bvd2VyKDApOworCisgICAgc1R4RnJhbWUubUxlbmd0aCA9IDA7CisgICAgc1R4RnJhbWUubVBzZHUgPSAodWludDhfdCAqKVpMTC0+UEtUX0JVRkZFUl9UWCArIDE7CisgICAgc1J4RnJhbWUubUxlbmd0aCA9IDA7CisjaWYgRE9VQkxFX0JVRkZFUklORworICAgIHNSeEZyYW1lLm1Qc2R1ID0gc1J4RGF0YTsKKyNlbHNlCisgICAgc1J4RnJhbWUubVBzZHUgPSAodWludDhfdCAqKVpMTC0+UEtUX0JVRkZFUl9SWDsKKyNlbmRpZgorfQorCit2b2lkIGt3NDF6UmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBpZiAoc1R4RG9uZSkKKyAgICB7CisgICAgICAgIGlmIChzVHhGcmFtZS5tUHNkdVtJRUVFODAyMTU0X0ZSTV9DVExfTE9fT0ZGU0VUXSAmIElFRUU4MDIxNTRfQUNLX1JFUVVFU1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvVHhEb25lKGFJbnN0YW5jZSwgJnNUeEZyYW1lLCAmc1J4RnJhbWUsIHNUeFN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShhSW5zdGFuY2UsICZzVHhGcmFtZSwgTlVMTCwgc1R4U3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNUeERvbmUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc1J4RG9uZSkKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXREaWFnUmFkaW9SZWNlaXZlRG9uZShhSW5zdGFuY2UsICZzUnhGcmFtZSwgT1RfRVJST1JfTk9ORSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZURvbmUoYUluc3RhbmNlLCAmc1J4RnJhbWUsIE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisKKyAgICAgICAgc1J4RG9uZSA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChzRWRTY2FuRG9uZSkKKyAgICB7CisgICAgICAgIG90UGxhdFJhZGlvRW5lcmd5U2NhbkRvbmUoYUluc3RhbmNlLCBzTWF4RUQpOworICAgICAgICBzRWRTY2FuRG9uZSA9IGZhbHNlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9yYW5kb20uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmVhMjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3JhbmRvbS5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAiZnNsX3RybmcuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkL3R5cGVzLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaCIKKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisKK3ZvaWQga3c0MXpSYW5kb21Jbml0KHZvaWQpCit7CisgICAgdHJuZ19jb25maWdfdCBjb25maWc7CisgICAgdWludDMyX3Qgc2VlZDsKKworICAgIFRSTkdfR2V0RGVmYXVsdENvbmZpZygmY29uZmlnKTsKKyAgICBjb25maWcuZnJlcXVlbmN5Q291bnRMaW1pdC5taW5pbXVtID0gMHgwMDAwMDEwMDsKKyAgICBjb25maWcuZnJlcXVlbmN5Q291bnRMaW1pdC5tYXhpbXVtID0gMHgwMDBGMDAwMDsKKyAgICBjb25maWcucmluZ09zY0RpdiA9IGtUUk5HX1JpbmdPc2NEaXYwOworICAgIGNvbmZpZy5lbnRyb3B5RGVsYXkgPSAxMjAwOworCisgICAgb3RFWFBFQ1QoVFJOR19Jbml0KFRSTkcwLCAmY29uZmlnKSA9PSBrU3RhdHVzX1N1Y2Nlc3MpOworCisgICAgb3RFWFBFQ1QoVFJOR19HZXRSYW5kb21EYXRhKFRSTkcwLCAmc2VlZCwgc2l6ZW9mKHNlZWQpKSA9PSBrU3RhdHVzX1N1Y2Nlc3MpOworCisgICAgc3JhbmQoc2VlZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit1aW50MzJfdCBvdFBsYXRSYW5kb21HZXQodm9pZCkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90KXJhbmQoKTsKK30KKworb3RFcnJvciBvdFBsYXRSYW5kb21HZXRUcnVlKHVpbnQ4X3QgKmFPdXRwdXQsIHVpbnQxNl90IGFPdXRwdXRMZW5ndGgpCit7CisgICAgb3RFcnJvciBzdGF0dXMgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKChhT3V0cHV0ICE9IE5VTEwpLCBzdGF0dXMgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKFRSTkdfR2V0UmFuZG9tRGF0YShUUk5HMCwgYU91dHB1dCwgYU91dHB1dExlbmd0aCkgPT0ga1N0YXR1c19TdWNjZXNzLCBzdGF0dXMgPSBPVF9FUlJPUl9GQUlMRUQpOworCitleGl0OgorICAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovdWFydC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzAwZTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3VhcnQuYwpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgVUFSVCBjb21tdW5pY2F0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKyNpbmNsdWRlICJvcGVudGhyZWFkL3R5cGVzLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0LmgiCisKKyNpbmNsdWRlICJmc2xfY2xvY2suaCIKKyNpbmNsdWRlICJmc2xfcG9ydC5oIgorI2luY2x1ZGUgImZzbF9scHVhcnQuaCIKKworZW51bQoreworICAgIGtQbGF0Zm9ybUNsb2NrICAgICA9IDMyMDAwMDAwLAorICAgIGtCYXVkUmF0ZSAgICAgICAgICA9IDExNTIwMCwKKyAgICBrUmVjZWl2ZUJ1ZmZlclNpemUgPSAyNTYsCit9OworCitzdGF0aWMgdm9pZCBwcm9jZXNzUmVjZWl2ZSgpOworc3RhdGljIHZvaWQgcHJvY2Vzc1RyYW5zbWl0KCk7CisKK3N0YXRpYyBjb25zdCB1aW50OF90ICpzVHJhbnNtaXRCdWZmZXIgPSBOVUxMOworc3RhdGljIHVpbnQxNl90ICAgICAgIHNUcmFuc21pdExlbmd0aCA9IDA7CitzdGF0aWMgYm9vbCAgICAgICAgICAgc1RyYW5zbWl0RG9uZSAgID0gZmFsc2U7CisKK3R5cGVkZWYgc3RydWN0IFJlY3ZCdWZmZXIKK3sKKyAgICAvLyBUaGUgZGF0YSBidWZmZXIKKyAgICB1aW50OF90ICBtQnVmZmVyW2tSZWNlaXZlQnVmZmVyU2l6ZV07CisgICAgLy8gVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgaXRlbSB3cml0dGVuIHRvIHRoZSBsaXN0LgorICAgIHVpbnQxNl90IG1IZWFkOworICAgIC8vIFRoZSBvZmZzZXQgb2YgdGhlIG5leHQgaXRlbSB0byBiZSB3cml0dGVuIHRvIHRoZSBsaXN0LgorICAgIHVpbnQxNl90IG1UYWlsOworfSBSZWN2QnVmZmVyOworCitzdGF0aWMgUmVjdkJ1ZmZlciBzUmVjZWl2ZTsKKworb3RFcnJvciBvdFBsYXRVYXJ0RW5hYmxlKHZvaWQpCit7CisgICAgbHB1YXJ0X2NvbmZpZ190IGNvbmZpZzsKKworICAgIHNSZWNlaXZlLm1IZWFkID0gMDsKKyAgICBzUmVjZWl2ZS5tVGFpbCA9IDA7CisKKyAgICAvKiBQaW4gTVVYICovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soa0NMT0NLX1BvcnRDKTsKKyAgICBQT1JUX1NldFBpbk11eChQT1JUQywgNiwga1BPUlRfTXV4QWx0NCk7CisgICAgUE9SVF9TZXRQaW5NdXgoUE9SVEMsIDcsIGtQT1JUX011eEFsdDQpOworCisgICAgLyogU2V0IE9TQ0VSQ0xLIGFzIExQVUFSVCBSeC9UeCBjbG9jayAqLworICAgIENMT0NLX1NldExwdWFydENsb2NrKDIpOworCisgICAgTFBVQVJUX0dldERlZmF1bHRDb25maWcoJmNvbmZpZyk7CisgICAgY29uZmlnLmVuYWJsZVJ4ID0gMTsKKyAgICBjb25maWcuZW5hYmxlVHggPSAxOworICAgIGNvbmZpZy5iYXVkUmF0ZV9CcHMgPSBrQmF1ZFJhdGU7CisgICAgTFBVQVJUX0luaXQoTFBVQVJUMCwgJmNvbmZpZywga1BsYXRmb3JtQ2xvY2spOworICAgIExQVUFSVF9FbmFibGVJbnRlcnJ1cHRzKExQVUFSVDAsIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSk7CisKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShMUFVBUlQwX0lSUW4pOworICAgIE5WSUNfRW5hYmxlSVJRKExQVUFSVDBfSVJRbik7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRVYXJ0RGlzYWJsZSh2b2lkKQoreworICAgIE5WSUNfRGlzYWJsZUlSUShMUFVBUlQwX0lSUW4pOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFVhcnRTZW5kKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1RyYW5zbWl0QnVmZmVyID09IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQlVTWSk7CisKKyAgICBzVHJhbnNtaXRCdWZmZXIgPSBhQnVmICsgMTsKKyAgICBzVHJhbnNtaXRMZW5ndGggPSBhQnVmTGVuZ3RoIC0gMTsKKyAgICBzVHJhbnNtaXREb25lID0gZmFsc2U7CisgICAgTFBVQVJUX1dyaXRlQnl0ZShMUFVBUlQwLCAqYUJ1Zik7CisgICAgTFBVQVJUX0NsZWFyU3RhdHVzRmxhZ3MoTFBVQVJUMCwga0xQVUFSVF9UeERhdGFSZWdFbXB0eUZsYWcpOworICAgIExQVUFSVF9FbmFibGVJbnRlcnJ1cHRzKExQVUFSVDAsIGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlJbnRlcnJ1cHRFbmFibGUpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc1RyYW5zbWl0KHZvaWQpCit7CisgICAgaWYgKHNUcmFuc21pdEJ1ZmZlciAmJiBzVHJhbnNtaXREb25lKQorICAgIHsKKyAgICAgICAgc1RyYW5zbWl0RG9uZSA9IGZhbHNlOworICAgICAgICBzVHJhbnNtaXRCdWZmZXIgPSBOVUxMOworICAgICAgICBvdFBsYXRVYXJ0U2VuZERvbmUoKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQga3c0MXpVYXJ0UHJvY2Vzcyh2b2lkKQoreworICAgIHByb2Nlc3NSZWNlaXZlKCk7CisgICAgcHJvY2Vzc1RyYW5zbWl0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NSZWNlaXZlKHZvaWQpCit7CisgICAgLy8gQ29weSB0YWlsIHRvIHByZXZlbnQgbXVsdGlwbGUgcmVhZHMKKyAgICB1aW50MTZfdCB0YWlsID0gc1JlY2VpdmUubVRhaWw7CisKKyAgICBpZiAoc1JlY2VpdmUubUhlYWQgPiB0YWlsKQorICAgIHsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKHNSZWNlaXZlLm1CdWZmZXIgKyBzUmVjZWl2ZS5tSGVhZCwga1JlY2VpdmVCdWZmZXJTaXplIC0gc1JlY2VpdmUubUhlYWQpOworCisgICAgICAgIC8vIFJlc2V0IHRoZSBidWZmZXIgbUhlYWQgYmFjayB0byB6ZXJvCisgICAgICAgIHNSZWNlaXZlLm1IZWFkID0gMDsKKyAgICB9CisKKyAgICBpZiAoc1JlY2VpdmUubUhlYWQgIT0gdGFpbCkKKyAgICB7CisgICAgICAgIG90UGxhdFVhcnRSZWNlaXZlZChzUmVjZWl2ZS5tQnVmZmVyICsgc1JlY2VpdmUubUhlYWQsIHRhaWwgLSBzUmVjZWl2ZS5tSGVhZCk7CisKKyAgICAgICAgLy8gU2V0IG1IZWFkIHRvIHRoZSBsb2NhbCB0YWlsIHdlIGhhdmUgY2FjaGVkCisgICAgICAgIHNSZWNlaXZlLm1IZWFkID0gdGFpbDsKKyAgICB9Cit9CisKK3ZvaWQgTFBVQVJUMF9JUlFIYW5kbGVyKHZvaWQpCit7CisgICAgdWludDMyX3QgaW50ZXJydXB0cyA9IExQVUFSVF9HZXRFbmFibGVkSW50ZXJydXB0cyhMUFVBUlQwKTsKKyAgICB1aW50OF90IHJ4X2RhdGE7CisKKyAgICAvKiBDaGVjayBpZiBkYXRhIHdhcyByZWNlaXZlZCAqLworICAgIHdoaWxlIChMUFVBUlRfR2V0U3RhdHVzRmxhZ3MoTFBVQVJUMCkgJiAoa0xQVUFSVF9SeERhdGFSZWdGdWxsRmxhZykpCisgICAgeworICAgICAgICByeF9kYXRhID0gTFBVQVJUX1JlYWRCeXRlKExQVUFSVDApOworICAgICAgICBMUFVBUlRfQ2xlYXJTdGF0dXNGbGFncyhMUFVBUlQwLCBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxGbGFnKTsKKworICAgICAgICBpZiAoc1JlY2VpdmUubUhlYWQgIT0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNSZWNlaXZlLm1CdWZmZXJbc1JlY2VpdmUubVRhaWxdID0gcnhfZGF0YTsKKyAgICAgICAgICAgIHNSZWNlaXZlLm1UYWlsID0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDaGVjayBpZiBkYXRhIFR4IGhhcyBlbmQgKi8KKyAgICBpZiAoKExQVUFSVF9HZXRTdGF0dXNGbGFncyhMUFVBUlQwKSAmIGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlGbGFnKSAmJgorICAgICAgICAoaW50ZXJydXB0cyAmIGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlJbnRlcnJ1cHRFbmFibGUpKQorICAgIHsKKyAgICAgICAgaWYgKHNUcmFuc21pdExlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc1RyYW5zbWl0TGVuZ3RoLS07CisgICAgICAgICAgICBMUFVBUlRfV3JpdGVCeXRlKExQVUFSVDAsICpzVHJhbnNtaXRCdWZmZXIrKyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIXNUcmFuc21pdERvbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNUcmFuc21pdERvbmUgPSB0cnVlOworICAgICAgICAgICAgTFBVQVJUX0Rpc2FibGVJbnRlcnJ1cHRzKExQVUFSVDAsIGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlJbnRlcnJ1cHRFbmFibGUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKExQVUFSVF9HZXRTdGF0dXNGbGFncyhMUFVBUlQwKSAmIGtMUFVBUlRfUnhPdmVycnVuRmxhZykKKyAgICB7CisgICAgICAgIExQVUFSVF9DbGVhclN0YXR1c0ZsYWdzKExQVUFSVDAsIGtMUFVBUlRfUnhPdmVycnVuRmxhZyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL0RJQUcubWQgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvRElBRy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Y2NzBlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL0RJQUcubWQKQEAgLTAsMCArMSw4OSBAQAorIyMgRGlhZ25vc3RpYyBtb2R1bGUKKworblJGNTI4NDAgcG9ydCBleHRlbmRzIFtPcGVuVGhyZWFkIERpYWdub3N0aWNzIE1vZHVsZV1bRElBR10uCisKK05ldyBjb21tYW5kcyBhbGxvdyBmb3IgbW9yZSBhY2N1cmF0ZSBsb3cgbGV2ZWwgcmFkaW8gdGVzdGluZy4KKworIyMjIE5ldyBjb21tYW5kcworICogW2RpYWcgaWRdKCNkaWFnLWlkKQorICogW2RpYWcgbGlzdGVuXSgjZGlhZy1saXN0ZW4pCisgKiBbZGlhZyB0cmFuc21pdF0oI2RpYWctdHJhbnNtaXQpCisKKyMjIyBEaWFnbm9zdGljIHJhZGlvIHBhY2tldAorW2RpYWcgbGlzdGVuXSgjZGlhZy1saXN0ZW4pIGFuZCBbZGlhZyB0cmFuc21pdF0oI2RpYWctdHJhbnNtaXQpIHVzZSByYWRpbyBmcmFtZSBwYXlsb2FkIHNwZWNpZmllZCBiZWxvdy4KKworIGBgYGMKKyBzdHJ1Y3QgUGxhdGZvcm1EaWFnTWVzc2FnZQorIHsKKyAgICAgY29uc3QgY2hhciBtTWVzc2FnZURlc2NyaXB0b3JbMTFdOworICAgICB1aW50OF90IG1DaGFubmVsOworICAgICBpbnQxNl90IG1JRDsKKyAgICAgdWludDMyX3QgbUNudDsKKyB9OworIGBgYAorCitgbU1lc3NhZ2VEZXNjcmlwdG9yYCBpcyBjb25zdGFudCBzdHJpbmcgYCJEaWFnTWVzc2FnZSJgLjxiciAvPgorYG1DaGFubmVsYCBjb250YWlucyBjaGFubmVsIG51bWJlciBvbiB3aGljaCBwYWNrZXQgd2FzIHRyYW5zbWl0dGVkLjxiciAvPgorYG1JRGAgY29udGFpbnMgYm9hcmQgSUQgc2V0IHdpdGggW2RpYWcgaWRdKCNkaWFnLWlkKSBjb21tYW5kLjxiciAvPgorYG1DbnRgIGlzIGEgY291bnRlciBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIGJvYXJkIHRyYW5zbWl0cyBkaWFnbm9zdGljIHJhZGlvIHBhY2tldC4KKworSWYgW2xpc3Rlbl0oI2RpYWctbGlzdGVuKSBtb2RlIGlzIGVuYWJsZWQgYW5kIE9wZW5UaHJlYWQgd2FzIGJ1aWx0IHdpdGggYERFRkFVTFRfTE9HR0lOR2AgZmxhZywgSlNPTiBzdHJpbmcgaXMgcHJpbnRlZCBldmVyeSB0aW1lIGRpYWdub3N0aWMgcmFkaW8gcGFja2V0IGlzIHJlY2VpdmVkLgorCitgYGBKU09OCisgeyJGcmFtZSI6eworICAgIkxvY2FsQ2hhbm5lbCI6IjxsaXN0ZW5pbmcgYm9hcmQgY2hhbm5lbD4iLAorICAgIlJlbW90ZUNoYW5uZWwiOiI8bUNoYW5uZWw+IiwKKyAgICJDTlQiOiI8bUNudD4iLAorICAgIkxvY2FsSUQiOiI8bGlzdGVuaW5nIGJvYXJkIElEPiIsCisgICAiUmVtb3RlSUQiOiI8bUlEPiIsCisgICAiUlNTSSI6IjxwYWNrZXQgUlNTST4iCisgfX0KK2BgYAorCisjIyMgZGlhZyBpZAorR2V0IGJvYXJkIElELgorCisjIyMgZGlhZyBpZCBcPGlkXD4KK1NldCBib2FyZCBJRC4KKworVmFsdWUgcmFuZ2UgMCB0byAzMjc2Ny4KKworRGVmYXVsdDogYC0xYC4KKworIyMjIGRpYWcgbGlzdGVuCitHZXQgbGlzdGVuIHN0YXRlLgorCisjIyMgZGlhZyBsaXN0ZW4gXDxsaXN0ZW5cPgorU2V0IGxpc3RlbiBzdGF0ZS4KKworYDBgIGRpc2FibGUgbGlzdGVuIHN0YXRlLjxiciAvPgorYDFgIGVuYWJsZSBsaXN0ZW4gc3RhdGUuCisKK0RlZmF1bHQ6IGxpc3RlbiBkaXNhYmxlZC4KKworIyMjIGRpYWcgdHJhbnNtaXQKK0dldCBtZXNzYWdlcyBjb3VudCBhbmQgaW50ZXJ2YWwgYmV0d2VlbiB0aGVtIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCBhZnRlciBgZGlhZyB0cmFuc21pdCBzdGFydGAuCisKKyMjIyBkaWFnIHRyYW5zbWl0IGludGVydmFsIFw8aW50ZXJ2YWxcPgorU2V0IGludGVydmFsIGluIG1zIGJldHdlZW4gdHJhbnNtaXR0ZWQgbWVzc2FnZXMuCisKK1ZhbHVlIHJhbmdlIDEgdG8gNDI5NDk2NzI5NS4KKworRGVmYXVsdDogYDFgLgorCisjIyMgZGlhZyB0cmFuc21pdCBjb3VudCBcPGNvdW50XD4KK1NldCBudW1iZXIgb2YgbWVzc2FnZXMgdG8gYmUgdHJhbnNtaXR0ZWQuCisKK1ZhbHVlIHJhbmdlIDEgdG8gMjE0NzQ4MzY0NzxiciAvPgorb3I8YnIgLz4KK2AtMWAgY29udGludW91cyB0cmFuc21pc3Npb24uCisKK0RlZmF1bHQ6IGAxYAorCisjIyMgZGlhZyB0cmFuc21pdCBzdG9wCitTdG9wIG9uZ29pbmcgdHJhbnNtaXNzaW9uIHJlZ2FyZGxlc3Mgb2YgcmVtYWluaW5nIG51bWJlciBvZiBtZXNzYWdlcyB0byBiZSBzZW50LgorCisjIyMgZGlhZyB0cmFuc21pdCBzdGFydAorU3RhcnQgdHJhbnNtaXRpbmcgbWVzc2FnZXMgd2l0aCBzcGVjaWZpZWQgaW50ZXJ2YWwuCisKK1tESUFHXTogLi8uLi8uLi8uLi9zcmMvZGlhZy9SRUFETUUubWQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5ODY0NgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDIzNCBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgbGlib3BlbnRocmVhZC1ucmY1Mjg0MC5hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxpYm9wZW50aHJlYWQtbnJmNTI4NDAtc2RrLmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsaWJvcGVudGhyZWFkLW5yZjUyODQwLXNvZnRkZXZpY2Utc2RrLmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDT01NT05DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIC1EQ09ORklHX0dQSU9fQVNfUElOUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtRE5SRjUyODQwX1hYQUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjL2NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHNyY2RpcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvY2xvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zZWdnZXJfcnR0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitQTEFURk9STV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGFsYXJtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmbGFzaC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9nZ2luZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1pc2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdWFydC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLWNvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS1ucmY1LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhbmRvbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK1NJTkdMRVBIWV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgZmxhc2hfbm9zZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbl9kaXJlY3QuYyAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wX2RpcmVjdC5jICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9kaXJlY3QuYyAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL3NpbmdsZV9waHkvc2luZ2xlX3BoeS5jICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK1NJTkdMRVBIWV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLURSQUFMX1NJTkdMRV9QSFk9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworU09GVERFVklDRV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBmbGFzaF9zZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc29mdGRldmljZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNvZnRkZXZpY2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb25fc3dpLmMgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF9zd2kuYyAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3Rfc3dpLmMgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2kuYyAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvc29mdGRldmljZS9ucmZfcmFhbF9zb2Z0ZGV2aWNlLmMgICAgICAgXAorICAgICQoTlVMTCkKKworU09GVERFVklDRV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvc29mdGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EU09GVERFVklDRV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtRFMxNDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLURSQUFMX1NPRlRERVZJQ0U9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworUExBVEZPUk1fU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICBkaWFnLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworTk9SRElDU0VNSV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfbnZtYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2Uvc3lzdGVtX25yZjUyODQwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0LmMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXQuYyAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbi5jICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnLmMgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uYyAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcGliLmMgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlci5jICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zZWdnZXJfcnR0L1NFR0dFUl9SVFRfQ29uZi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL2djY19zdGFydHVwX25yZjUyODQwLlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbnJmNTI4NDBfYV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChDT01NT05DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoU0lOR0xFUEhZX0NQUEZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbnJmNTI4NDBfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChQTEFURk9STV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTk9SRElDU0VNSV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKFNJTkdMRVBIWV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2Nsb2NrL25yZl9kcnZfY2xvY2suYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGlib3BlbnRocmVhZF9ucmY1Mjg0MF9zZGtfYV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKENPTU1PTkNQUEZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChTSU5HTEVQSFlfQ1BQRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGlib3BlbnRocmVhZF9ucmY1Mjg0MF9zZGtfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFBMQVRGT1JNX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOT1JESUNTRU1JX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoU0lOR0xFUEhZX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbnJmNTI4NDBfc29mdGRldmljZV9zZGtfYV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChDT01NT05DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoU09GVERFVklDRV9DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbnJmNTI4NDBfc29mdGRldmljZV9zZGtfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChQTEFURk9STV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTk9SRElDU0VNSV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKFNPRlRERVZJQ0VfU09VUkNFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitub2luc3RfSEVBREVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9hcm1fbWF0aC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY21zaXNfYXJtY2NfVjYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2Ntc2lzX2FybWNjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jbXNpc19nY2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY29yZV9jbTQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2NvcmVfY21GdW5jLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jb3JlX2NtSW5zdHIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY29yZV9jbVNpbWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9jb21waWxlcl9hYnN0cmFjdGlvbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUxX3RvX25yZjUyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1MV90b19ucmY1Mjg0MC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmNTJfdG9fbnJmNTI4NDAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyODQwX2JpdGZpZWxkcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1Mjg0MF9wZXJpcGhlcmFscy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2Uvc3lzdGVtX25yZjUyODQwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9jbG9jay9ucmZfZHJ2X2Nsb2NrLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NC5oICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0LmggICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2NvbmZpZy5oICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9jb25zdC5oICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbi5oICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnLmggICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uaCAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZpY2F0aW9uLmggICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3BpYi5oICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wLmggICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJvY2VkdXJlc19kdXJhdGlvbi5oICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3QuaCAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuaCAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvbnJmX3JhYWxfYXBpLmggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL25yZl9yYWFsX2NvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9zb2Z0ZGV2aWNlL25yZl9yYWFsX3NvZnRkZXZpY2UuaCAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2Fzc2VydC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9jbG9jay5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfZ3Bpby5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2dwaW90ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9lZ3UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfbnZtYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3BlcmlwaGVyYWxzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9wcGkuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcmFkaW8uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3JuZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl91YXJ0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2Vyci5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfZ2F0dC5oICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2dhdHRjLmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXR0cy5oICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfaGNpLmggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2wyY2FwLmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9yYW5nZXMuaCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfdHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX2Vycm9yLmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9lcnJvcl9zZG0uaCAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfZXJyb3Jfc29jLmggICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX252aWMuaCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9zZG0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfc29jLmggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX3N2Yy5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZjUyL25yZl9tYnIuaCAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUFJFVFRZX0ZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFBMQVRGT1JNX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitEYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLQorCitsaWJvcGVudGhyZWFkX25yZjUyODQwX2FfTElCQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoc2hlbGwgZmluZCAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL3V0aWxzICQoRGFzaCl0eXBlIGYgJChEYXNoKW5hbWUgIioubyIpCisKK2xpYm9wZW50aHJlYWRfbnJmNTI4NDBfc2RrX2FfTElCQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMgJChEYXNoKXR5cGUgZiAkKERhc2gpbmFtZSAiKi5vIikKKworbGlib3BlbnRocmVhZF9ucmY1Mjg0MF9zb2Z0ZGV2aWNlX3Nka19hX0xJQkFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKHNoZWxsIGZpbmQgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscyAkKERhc2gpdHlwZSBmICQoRGFzaCluYW1lICIqLm8iKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9SRUFETUUubWQgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZDRlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTgxIEBACisjIE9wZW5UaHJlYWQgb24gblJGNTI4NDAgRXhhbXBsZQorCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBleGFtcGxlIHBsYXRmb3JtIGRyaXZlcnMgZm9yIFtOb3JkaWMgU2VtaWNvbmR1Y3RvciBuUkY1Mjg0MCBTb0NdW25SRjUyODQwXS4KKworW25SRjUyODQwXTogaHR0cHM6Ly93d3cubm9yZGljc2VtaS5jb20vZW5nL1Byb2R1Y3RzL25SRjUyODQwCisKK1RvIGZhY2lsaXRhdGUgVGhyZWFkIHByb2R1Y3RzIGRldmVsb3BtZW50IHdpdGggdGhlIG5SRjUyODQwIHBsYXRmb3JtLCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBwcm92aWRlcyA8aT5uUkY1IFNESyBmb3IgVGhyZWFkPC9pPi4gU2VlIFtOb3JkaWMgU2VtaWNvbmR1Y3RvcidzIG5SRjUgU0RLIGZvciBUaHJlYWRdW25SRjUtU0RLLXNlY3Rpb25dIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKworW25SRjUtU0RLLXNlY3Rpb25dOiAjbm9yZGljLXNlbWljb25kdWN0b3JzLW5yZjUtc2RrLWZvci10aHJlYWQKKworIyMgVG9vbGNoYWluCisKK0Rvd25sb2FkIGFuZCBpbnN0YWxsIFtHTlUgdG9vbGNoYWluIGZvciBBUk0gQ29ydGV4LU1dW2dudS10b29sY2hhaW5dLgorCitbZ251LXRvb2xjaGFpbl06IGh0dHBzOi8vbGF1bmNocGFkLm5ldC9nY2MtYXJtLWVtYmVkZGVkCisKKyMjIEJ1aWxkaW5nIHRoZSBleGFtcGxlcworCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtbnJmNTI4NDAKK2BgYAorCitBZnRlciBhIHN1Y2Nlc3NmdWwgYnVpbGQsIHRoZSBgZWxmYCBmaWxlcyBjYW4gYmUgZm91bmQgaW4KK2A8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQvbnJmNTI4NDAvYmluYC4gIFlvdSBjYW4gY29udmVydCB0aGVtIHRvIGBoZXhgCitmaWxlcyB1c2luZyBgYXJtLW5vbmUtZWFiaS1vYmpjb3B5YDoKK2BgYGJhc2gKKyQgYXJtLW5vbmUtZWFiaS1vYmpjb3B5IC1PIGloZXggb3QtY2xpLWZ0ZCBvdC1jbGktZnRkLmhleAorYGBgCisKKyMjIEZsYXNoaW5nIHRoZSBiaW5hcmllcworCitGbGFzaCB0aGUgY29tcGlsZWQgYmluYXJpZXMgb250byBuUkY1Mjg0MCB1c2luZyBgbnJmanByb2dgIHdoaWNoIGlzCitwYXJ0IG9mIHRoZSBbblJGNXggQ29tbWFuZCBMaW5lIFRvb2xzXVtuUkY1eC1Db21tYW5kLUxpbmUtVG9vbHNdLgorCitbblJGNXgtQ29tbWFuZC1MaW5lLVRvb2xzXTogaHR0cHM6Ly93d3cubm9yZGljc2VtaS5jb20vZW5nL1Byb2R1Y3RzL25SRjUyODQwI0Rvd25sb2FkcworCitgYGBiYXNoCiskIG5yZmpwcm9nIC1mIG5yZjUyIC0tY2hpcGVyYXNlIC0tcHJvZ3JhbSBvdXRwdXQvbnJmNTI4NDAvYmluL290LWNsaS1mdGQuaGV4IC0tcmVzZXQKK2BgYAorCisjIyBSdW5uaW5nIHRoZSBleGFtcGxlCisKKzEuIFByZXBhcmUgdHdvIGJvYXJkcyB3aXRoIHRoZSBmbGFzaGVkIGBDTEkgRXhhbXBsZWAgKGFzIHNob3duIGFib3ZlKS4KKzIuIFRoZSBDTEkgZXhhbXBsZSB1c2VzIFVBUlQgY29ubmVjdGlvbi4gVG8gdmlldyByYXcgVUFSVCBvdXRwdXQsIHN0YXJ0IGEgdGVybWluYWwKKyAgIGVtdWxhdG9yIGxpa2UgUHVUVFkgYW5kIGNvbm5lY3QgdG8gdGhlIHVzZWQgQ09NIHBvcnQgd2l0aCB0aGUgZm9sbG93aW5nIFVBUlQgc2V0dGluZ3M6CisgICAgLSBCYXVkIHJhdGU6IDExNTIwMAorICAgIC0gOCBkYXRhIGJpdHMKKyAgICAtIDEgc3RvcCBiaXQKKyAgICAtIE5vIHBhcml0eQorICAgIC0gSFcgZmxvdyBjb250cm9sOiBSVFMvQ1RTCisKKyAgIE9uIExpbnV4IHN5c3RlbSBhIHBvcnQgbmFtZSBzaG91bGQgYmUgY2FsbGVkIGUuZy4gYC9kZXYvdHR5QUNNMGAgb3IgYC9kZXYvdHR5QUNNMWAuCiszLiBPcGVuIGEgdGVybWluYWwgY29ubmVjdGlvbiBvbiB0aGUgZmlyc3QgYm9hcmQgYW5kIHN0YXJ0IGEgbmV3IFRocmVhZCBuZXR3b3JrLgorCisgYGBgYmFzaAorID4gcGFuaWQgMHhhYmNkCisgRG9uZQorID4gaWZjb25maWcgdXAKKyBEb25lCisgPiB0aHJlYWQgc3RhcnQKKyBEb25lCisgYGBgCisKKzQuIEFmdGVyIGEgY291cGxlIG9mIHNlY29uZHMgdGhlIG5vZGUgd2lsbCBiZWNvbWUgYSBMZWFkZXIgb2YgdGhlIG5ldHdvcmsuCisKKyBgYGBiYXNoCisgPiBzdGF0ZQorIExlYWRlcgorIGBgYAorCis1LiBPcGVuIGEgdGVybWluYWwgY29ubmVjdGlvbiBvbiB0aGUgc2Vjb25kIGJvYXJkIGFuZCBhdHRhY2ggYSBub2RlIHRvIHRoZSBuZXR3b3JrLgorCisgYGBgYmFzaAorID4gcGFuaWQgMHhhYmNkCisgRG9uZQorID4gaWZjb25maWcgdXAKKyBEb25lCisgPiB0aHJlYWQgc3RhcnQKKyBEb25lCisgYGBgCisKKzYuIEFmdGVyIGEgY291cGxlIG9mIHNlY29uZHMgdGhlIHNlY29uZCBub2RlIHdpbGwgYXR0YWNoIGFuZCBiZWNvbWUgYSBDaGlsZC4KKworIGBgYGJhc2gKKyA+IHN0YXRlCisgQ2hpbGQKKyBgYGAKKworNy4gTGlzdCBhbGwgSVB2NiBhZGRyZXNzZXMgb2YgdGhlIGZpcnN0IGJvYXJkLgorCisgYGBgYmFzaAorID4gaXBhZGRyCisgZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6ZmMwMAorIGZkZGU6YWQwMDpiZWVmOjA6MDpmZjpmZTAwOjljMDAKKyBmZGRlOmFkMDA6YmVlZjowOjRiY2I6NzNhNTo3YzI4OjMxOGUKKyBmZTgwOjA6MDowOjVjOTE6YzYxOmI2N2M6MjcxYworIGBgYAorCis4LiBDaG9vc2Ugb25lIG9mIHRoZW0gYW5kIHNlbmQgYW4gSUNNUHY2IHBpbmcgZnJvbSB0aGUgc2Vjb25kIGJvYXJkLgorCisgYGBgYmFzaAorID4gcGluZyBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpmYzAwCisgMTYgYnl0ZXMgZnJvbSBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpmYzAwOiBpY21wX3NlcT0xIGhsaW09NjQgdGltZT04bXMKKyBgYGAKKworRm9yIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzLCB2aXNpdCBbT3BlblRocmVhZCBDTEkgUmVmZXJlbmNlIFJFQURNRS5tZF1bQ0xJXS4KKworW0NMSV06IC4vLi4vLi4vLi4vc3JjL2NsaS9SRUFETUUubWQKKworIyMgTG9nZ2luZyBtb2R1bGUKKworQnkgZGVmYXVsdCwgdGhlIE9wZW5UaHJlYWQncyBsb2dnaW5nIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdG8gb3V0cHV0IGxvZ2dpbmcKK2luZm9ybWF0aW9uIG92ZXIgU0VHR0VSJ3MgUmVhbCBUaW1lIFRyYW5zZmVyIChSVFQpLgorCitSVFQgb3V0cHV0IGNhbiBiZSB2aWV3ZWQgaW4gdGhlIEotTGluayBSVFQgVmlld2VyLCB3aGljaCBpcyBhdmFpbGFibGUgZnJvbSBTRUdHRVIuCitUaGUgdmlld2VyIGlzIGFsc28gaW5jbHVkZWQgaW4gdGhlIG5SRiBUb29scy4gVG8gcmVhZCBvciB3cml0ZSBtZXNzYWdlcyBvdmVyIFJUVCwKK2Nvbm5lY3QgYW4gblJGNSBkZXZlbG9wbWVudCBib2FyZCB2aWEgVVNCIGFuZCBydW4gdGhlIEotTGluayBSVFQgVmlld2VyLgorCitTZWxlY3QgdGhlIGNvcnJlY3QgdGFyZ2V0IGRldmljZSAoblJGNTIpIGFuZCB0aGUgdGFyZ2V0IGludGVyZmFjZSAiU1dEIi4KKworVGhlIGludGVuZGVkIGxvZyBsZXZlbCBjYW4gYmUgc2V0IHVzaW5nIGBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUxgIGRlZmluZS4KKworIyMgRGlzYWJsaW5nIHRoZSBNYXNzIFN0b3JhZ2UgRGV2aWNlCisKK0R1ZSB0byBhIGtub3duIGlzc3VlIGluIFNlZ2dlcuKAmXMgSi1MaW5rIGZpcm13YXJlLCBkZXBlbmRpbmcgb24geW91ciB2ZXJzaW9uLCB5b3UgbWlnaHQgZXhwZXJpZW5jZSBkYXRhIGNvcnJ1cHRpb24gb3IgZHJvcHMgaWYgeW91IHVzZSB0aGUgc2VyaWFsIHBvcnQuIFlvdSBjYW4gYXZvaWQgdGhpcyBpc3N1ZSBieSBkaXNhYmxpbmcgdGhlIE1hc3MgU3RvcmFnZSBEZXZpY2U6CisKKyAtIE9uIExpbnV4IG9yIG1hY09TIChPUyBYKSwgb3BlbiBKTGlua0V4ZSBmcm9tIHRoZSB0ZXJtaW5hbC4KKyAtIE9uIE1pY3Jvc29mdCBXaW5kb3dzLCBvcGVuIHRoZSBKLUxpbmsgQ29tbWFuZGVyIGFwcGxpY2F0aW9uLgorCitSdW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOiBgTVNERGlzYWJsZWAKKworIyMgRGlhZ25vc3RpYyBtb2R1bGUKKworblJGNTI4NDAgcG9ydCBleHRlbmRzIFtPcGVuVGhyZWFkIERpYWdub3N0aWNzIE1vZHVsZV1bRElBR10uCisKK1lvdSBjYW4gcmVhZCBhYm91dCBhbGwgdGhlIGZlYXR1cmVzIFtoZXJlXVtuUkZESUFHXS4KKworW0RJQUddOiAuLy4uLy4uLy4uL3NyYy9kaWFnL1JFQURNRS5tZAorW25SRkRJQUddOiBESUFHLm1kCisKKyMjIFJhZGlvIGRyaXZlciBkb2N1bWVudGF0aW9uCisKK1RoZSByYWRpbyBkcml2ZXIgY29tZXMgd2l0aCBkb2N1bWVudGF0aW9uIHRoYXQgZGVzY3JpYmVzIHRoZSBvcGVyYXRpb24gb2Ygc3RhdGUKK21hY2hpbmVzIGluIHRoaXMgbW9kdWxlLiBUbyBvcGVuIHRoZSBgKi51bWxgIHNlcXVlbmNlIGRpYWdyYW1zLCB1c2UgW1BsYW50VU1MXVtQbGFudFVNTC11cmxdLgorCitbUGxhbnRVTUwtdXJsXTogaHR0cDovL3BsYW50dW1sLmNvbS8KKworIyMgVmVyaWZpY2F0aW9uCisKK1RoZSBmb2xsb3dpbmcgdG9vbGNoYWlucyBoYXZlIGJlZW4gdXNlZCBmb3IgdGVzdGluZyBhbmQgdmVyaWZpY2F0aW9uOgorICAtIGdjYyB2ZXJzaW9uIDQuOS4zCisgIC0gZ2NjIHZlcnNpb24gNi4yLjAKKworVGhlIG5SRjUyODQwIGV4YW1wbGUgaGFzIGJlZW4gdmVyaWZpZWQgYnkgTm9yZGljIFNlbWljb25kdWN0b3Igd2l0aCBmb2xsb3dpbmcgY29tbWl0czoKKyAgLSBgMDMwZWZiYWAgLSAyMi4wNC4yMDE3ICh0aGUgbmV3ZXN0IGNoZWNrZWQpCisgIC0gYGRlNDhhY2ZgIC0gMDIuMDMuMjAxNworICAtIGA1MGRiNThkYCAtIDIzLjAxLjIwMTcKKworIyBOb3JkaWMgU2VtaWNvbmR1Y3RvcidzIG5SRjUgU0RLIGZvciBUaHJlYWQKKworVGhlIFtuUkY1IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBmb3IgVGhyZWFkXVtuUkY1LVNESy1UaHJlYWRdIGhlbHBzIHlvdSB3aGVuIGRldmVsb3BpbmcgVGhyZWFkIHByb2R1Y3RzIHdpdGggTm9yZGljIFNlbWljb25kdWN0b3IncyBhZHZhbmNlZCBuUkY1Mjg0MCBTeXN0ZW0gb24gQ2hpcCAoU29DKS4KKworVGhlIDxpPm5SRjUgU0RLIGZvciBUaHJlYWQ8L2k+IGluY2x1ZGVzOgorIC0gYSBwcmUtYnVpbHQgT3BlblRocmVhZCBzdGFjayBmb3IgdGhlIE5vcmRpYyBuUkY1Mjg0MCBTb0Mgd2l0aCBBUk3CriBDcnlwdG9DZWxsLTMxMCBzdXBwb3J0LAorIC0gdW5pcXVlIHN1cHBvcnQgZm9yIERGVS1vdmVyLVRocmVhZCAoRGV2aWNlIEZpcm13YXJlIFVwZ3JhZGUpLAorIC0gZXhhbXBsZXMgdG8gZGVtb25zdHJhdGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gbm9kZXMgcGVyZm9ybWluZyBkaWZmZXJlbnQgVGhyZWFkIHJvbGVzIHdpdGggdGhlIHVzZSBvZiBPcGVuVGhyZWFkIGFuZCBidWlsdC1pbiBDb0FQIHByb3RvY29sLAorIC0gZXhhbXBsZXMgdG8gZGVtb25zdHJhdGUgbXVsdGlwcm90b2NvbCBzdXBwb3J0IGFuZCBzd2l0Y2hpbmcgYmV0d2VlbiBCTEUgcGVyaXBoZXJhbAorICBhbmQgVGhyZWFkIEZURCBhbmQgTVREIHJvbGVzLAorIC0gc3VwcG9ydCBmb3IgYW4gT3BlblRocmVhZCBOZXR3b3JrIENvLVByb2Nlc3NvciAoTkNQKSwKKyAtIEJvcmRlciBSb3V0ZXIgYW5kIGNsb3VkIGNvbm5lY3Rpdml0eSBleGFtcGxlLAorIC0gVGhyZWFkIG5hdGl2ZSBjb21taXNzaW9uaW5nIHdpdGggTkZDIGV4YW1wbGUsCisgLSByYW5nZSBvZiBQQyB0b29scyBpbmNsdWRpbmcgYSBUaHJlYWQgVG9wb2xvZ3kgTW9uaXRvciwKKyAtIHNvZnR3YXJlIG1vZHVsZXMgaW5oZXJpdGVkIGZyb20gdGhlIG5SRjUgU0RLIGUuZy4gcGVyaXBoZXJhbCBkcml2ZXJzLCBORkMgbGlicmFyaWVzIGV0Yy4KKworIyMjIyBJbXBvcnRhbnQgbm90aWNlCisKK0R1ZSB0byBsZWdhbCByZXN0cmljdGlvbnMgc3VwcG9ydCBmb3IgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgY3J5cHRvZ3JhcGh5IHV0aWxpemluZyBBUk0gQ3J5cHRvQ2VsbC0zMTAgaXMgb25seSBhdmFpbGFibGUgaW4gbWJlZFRMUyBsaWJyYXJ5IChsaWJtYmVkY3J5cHRvLmEpIHByb3ZpZGVkIHdpdGggdGhlwqA8aT5uUkY1IFNESyBmb3IgVGhyZWFkPC9pPi4gVGhlIGxpYnJhcnkgYXZhaWxhYmxlIGluIE9wZW5UaHJlYWQgcmVwb3NpdG9yeSBkb2VzIG5vdCBzdXBwb3J0IGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4gWW91IGNhbiBzdGlsbCB1c2UgaXQsIGJ1dCB0aGUgY29tbWlzc2lvbmluZyBwcm9jZWR1cmUgdGFrZXMgbXVjaCBtb3JlIHRpbWUgaW4gc3VjaCBjYXNlLiBGb3IgdGhlIGJlc3QgcGVyZm9ybWFuY2UgYW5kIHVzZXIgZXhwZXJpZW5jZSwgdXNlIHRoZSBsaWJyYXJ5IHByb3ZpZGVkIHdpdGggdGhlIFNESy4KKworW25SRjUtU0RLLVRocmVhZF06IGh0dHA6Ly93d3cubm9yZGljc2VtaS5jb20vZW5nL1Byb2R1Y3RzL25SRjUtU0RLLWZvci1UaHJlYWQKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9hbGFybS5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2FsYXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYwMzNhNwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9hbGFybS5jCkBAIC0wLDAgKzEsNDExIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgYWxhcm0uCisgKgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS91c2VjLWFsYXJtLmg+CisKKyNpbmNsdWRlICJwbGF0Zm9ybS1jb25maWcuaCIKKyNpbmNsdWRlICJjbXNpcy9jb3JlX2NtRnVuYy5oIgorCisjaW5jbHVkZSA8ZHJpdmVycy9jbG9jay9ucmZfZHJ2X2Nsb2NrLmg+CisjaW5jbHVkZSA8aGFsL25yZl9ydGMuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjZGVmaW5lIFJUQ19GUkVRVUVOQ1kgICAgICAgMzI3NjhVTEwKKworI2RlZmluZSBDRUlMX0RJVihBLCBCKSAgICAgICgoKEEpICsgKEIpIC0gMVVMTCkgLyAoQikpCisKKyNkZWZpbmUgVVNfUEVSX01TICAgICAgICAgICAxMDAwVUxMCisjZGVmaW5lIFVTX1BFUl9TICAgICAgICAgICAgMTAwMDAwMFVMTAorI2RlZmluZSBVU19QRVJfVElDSyAgICAgICAgIENFSUxfRElWKFVTX1BFUl9TLCBSVENfRlJFUVVFTkNZKQorCisjZGVmaW5lIE1TX1BFUl9TICAgICAgICAgICAgMTAwMFVMCisjZGVmaW5lIE1TX1BFUl9PVkVSRkxPVyAgICAgKDUxMlVMICogTVNfUEVSX1MpICAvLy88IFRpbWUgdGhhdCBoYXMgcGFzc2VkIGJldHdlZW4gb3ZlcmZsb3cgZXZlbnRzLiBPbiBmdWxsIFJUQyBzcGVlZCwgaXQgb2NjdXJzIGV2ZXJ5IDUxMiBzLgorCit0eXBlZGVmIGVudW0KK3sKKyAgICBrTXNUaW1lciwKKyAgICBrVXNUaW1lciwKKyAgICBrTnVtVGltZXJzCit9IEFsYXJtSW5kZXg7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdm9sYXRpbGUgYm9vbCBtRmlyZUFsYXJtOyAgIC8vLzwgSW5mb3JtYXRpb24gZm9yIHByb2Nlc3NpbmcgZnVuY3Rpb24sIHRoYXQgYWxhcm0gc2hvdWxkIGZpcmUuCisgICAgdWludDMyX3QgICAgICBtVGFyZ2V0VGltZTsgIC8vLzwgQWxhcm0gZmlyZSB0aW1lIChpbiBtaWxsaXNlY29uZCBmb3IgTXNUaW1lciwgaW4gbWljcm9zZWNvbmQgZm9yIFVzVGltZXIpCit9IEFsYXJtRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCAgICAgICAgbUNoYW5uZWxOdW1iZXI7CisgICAgdWludDMyX3QgICAgICAgIG1Db21wYXJlRXZlbnRNYXNrOworICAgIG5yZl9ydGNfZXZlbnRfdCBtQ29tcGFyZUV2ZW50OworICAgIG5yZl9ydGNfaW50X3QgICBtQ29tcGFyZUludDsKK30gQWxhcm1DaGFubmVsRGF0YTsKKworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHNUaW1lT2Zmc2V0ID0gMDsgIC8vLzwgVGltZSBvZmZzZXQgdG8ga2VlcCB0cmFjayBvZiBjdXJyZW50IHRpbWUgKGluIG1pbGxpc2Vjb25kKS4KK3N0YXRpYyBBbGFybURhdGEgc1RpbWVyRGF0YVtrTnVtVGltZXJzXTsgICAvLy88IERhdGEgb2YgdGhlIHRpbWVycy4KK3N0YXRpYyBjb25zdCBBbGFybUNoYW5uZWxEYXRhIHNDaGFubmVsRGF0YVtrTnVtVGltZXJzXSA9Cit7CisgICAgW2tNc1RpbWVyXSA9IHsKKyAgICAgICAgLm1DaGFubmVsTnVtYmVyICAgID0gMCwKKyAgICAgICAgLm1Db21wYXJlRXZlbnRNYXNrID0gUlRDX0VWVEVOX0NPTVBBUkUwX01zaywKKyAgICAgICAgLm1Db21wYXJlRXZlbnQgICAgID0gTlJGX1JUQ19FVkVOVF9DT01QQVJFXzAsCisgICAgICAgIC5tQ29tcGFyZUludCAgICAgICA9IE5SRl9SVENfSU5UX0NPTVBBUkUwX01BU0ssCisgICAgfSwKKyAgICBba1VzVGltZXJdID0geworICAgICAgICAubUNoYW5uZWxOdW1iZXIgICAgPSAxLAorICAgICAgICAubUNvbXBhcmVFdmVudE1hc2sgPSBSVENfRVZURU5fQ09NUEFSRTFfTXNrLAorICAgICAgICAubUNvbXBhcmVFdmVudCAgICAgPSBOUkZfUlRDX0VWRU5UX0NPTVBBUkVfMSwKKyAgICAgICAgLm1Db21wYXJlSW50ICAgICAgID0gTlJGX1JUQ19JTlRfQ09NUEFSRTFfTUFTSywKKyAgICB9Cit9OworCitzdGF0aWMgb3RQbGF0VXNlY0FsYXJtSGFuZGxlciBzVXNlY0hhbmRsZXIgPSBOVUxMOyAgLy8vPCBIYW5kbGVyIGNhbGxlZCB3aGVuIHVzZWMgYWxhcm0gZmlyZXMuCitzdGF0aWMgdm9pZCAqc1VzZWNDb250ZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgLy8vPCBUaGUgY29udGV4dCBpbmZvcm1hdGlvbiBwYXNzZWQgdG8gdGhlIHVzZWMgaGFuZGxlciBjYWxsYmFjay4KKworc3RhdGljIHZvaWQgSGFuZGxlT3ZlcmZsb3codm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgVGltZVRvVGlja3ModWludDMyX3QgYVRpbWUsIEFsYXJtSW5kZXggYUluZGV4KQoreworICAgIHVpbnQzMl90IHRpY2tzOworCisgICAgaWYgKGFJbmRleCA9PSBrTXNUaW1lcikKKyAgICB7CisgICAgICAgIHRpY2tzID0gKHVpbnQzMl90KUNFSUxfRElWKChhVGltZSAqIFVTX1BFUl9NUyAqIFJUQ19GUkVRVUVOQ1kpLCBVU19QRVJfUykgJiBSVENfQ0NfQ09NUEFSRV9Nc2s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHRpY2tzID0gKHVpbnQzMl90KUNFSUxfRElWKChhVGltZSAqICBSVENfRlJFUVVFTkNZKSwgVVNfUEVSX1MpICYgUlRDX0NDX0NPTVBBUkVfTXNrOworICAgIH0KKworICAgIHJldHVybiB0aWNrczsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdCBUaWNrc1RvVGltZSh1aW50MzJfdCBhVGlja3MpCit7CisgICAgcmV0dXJuIENFSUxfRElWKChVU19QRVJfUyAqICh1aW50NjRfdClhVGlja3MpLCBSVENfRlJFUVVFTkNZKTsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdCBBbGFybUdldEN1cnJlbnRUaW1lKCkKK3sKKyAgICB1aW50MzJfdCBydGNWYWx1ZTE7CisgICAgdWludDMyX3QgcnRjVmFsdWUyOworICAgIHVpbnQzMl90IG9mZnNldDsKKworICAgIHJ0Y1ZhbHVlMSA9IG5yZl9ydGNfY291bnRlcl9nZXQoUlRDX0lOU1RBTkNFKTsKKworICAgIF9fRE1CKCk7CisKKyAgICBvZmZzZXQgPSBzVGltZU9mZnNldDsKKworICAgIF9fRE1CKCk7CisKKyAgICBydGNWYWx1ZTIgPSBucmZfcnRjX2NvdW50ZXJfZ2V0KFJUQ19JTlNUQU5DRSk7CisKKyAgICBpZiAoKHJ0Y1ZhbHVlMiA8IHJ0Y1ZhbHVlMSkgfHwgKHJ0Y1ZhbHVlMSA9PSAwKSkKKyAgICB7CisgICAgICAgIC8vIE92ZXJmbG93IGRldGVjdGVkLiBBZGRpdGlvbmFsIGNvbmRpdGlvbiAocnRjVmFsdWUxID09IDApIGNvdmVycyBzaXR1YXRpb24gd2hlbiBvdmVyZmxvdyBvY2N1cnJlZCBpbgorICAgICAgICAvLyBpbnRlcnJ1cHQgc3RhdGUsIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHdhcyBlbnRlcmVkLiBCdXQgaW4gZ2VuZXJhbCwgdGhpcyBmdW5jdGlvbiBzaGFsbCBub3QgYmUgY2FsbGVkCisgICAgICAgIC8vIGZyb20gaW50ZXJydXB0IG90aGVyIHRoYW4gYWxhcm0gaW50ZXJydXB0LgorCisgICAgICAgIC8vIFdhaXQgYXQgbGVhc3QgMjAgY3ljbGVzLCB0byBlbnN1cmUgdGhhdCBpZiBpbnRlcnJ1cHQgaXMgZ29pbmcgdG8gYmUgY2FsbGVkLCBpdCB3aWxsIGJlIGNhbGxlZCBub3cuCisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIF9fTk9QKCk7CisgICAgICAgICAgICBfX05PUCgpOworICAgICAgICAgICAgX19OT1AoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBldmVudCBmbGFnIGlzIHN0aWxsIG9uLCBpdCBtZWFucyB0aGF0IHRoZSBpbnRlcnJ1cHQgd2FzIG5vdCBjYWxsZWQsIGFzIHdlIGFyZSBpbiBpbnRlcnJ1cHQgc3RhdGUuCisgICAgICAgIGlmIChucmZfcnRjX2V2ZW50X3BlbmRpbmcoUlRDX0lOU1RBTkNFLCBOUkZfUlRDX0VWRU5UX09WRVJGTE9XKSkKKyAgICAgICAgeworICAgICAgICAgICAgSGFuZGxlT3ZlcmZsb3coKTsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCA9IHNUaW1lT2Zmc2V0OworICAgIH0KKworICAgIHJldHVybiBVU19QRVJfTVMgKiAodWludDY0X3Qpb2Zmc2V0ICsgVGlja3NUb1RpbWUocnRjVmFsdWUyKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBBbGFybUdldEN1cnJlbnRUaW1lUnRjUHJvdGVjdGVkKEFsYXJtSW5kZXggYUluZGV4KQoreworICAgIHVpbnQ2NF90IHVzZWNUaW1lID0gQWxhcm1HZXRDdXJyZW50VGltZSgpICsgMiAqIFVTX1BFUl9USUNLOworICAgIHVpbnQzMl90IGN1cnJlbnRUaW1lOworCisgICAgaWYgKGFJbmRleCA9PSBrTXNUaW1lcikKKyAgICB7CisgICAgICAgIGN1cnJlbnRUaW1lID0gKHVpbnQzMl90KSh1c2VjVGltZSAvIFVTX1BFUl9NUyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGN1cnJlbnRUaW1lID0gKHVpbnQzMl90KXVzZWNUaW1lOworICAgIH0KKworICAgIHJldHVybiBjdXJyZW50VGltZTsKK30KKworc3RhdGljIGlubGluZSBib29sIEFsYXJtU2hhbGxTdHJpa2UodWludDMyX3QgYU5vdywgQWxhcm1JbmRleCBhSW5kZXgpCit7CisgICAgdWludDMyX3QgZGlmZiA9IGFOb3cgLSBzVGltZXJEYXRhW2FJbmRleF0ubVRhcmdldFRpbWU7CisKKyAgICAvLyBUaHJlZSBjYXNlczoKKyAgICAvLyAxKSBhTm93IGlzIGJlZm9yZSBtVGFyZ2V0VGltZSAgPT4gIERpZmZlcmVuY2UgaXMgbmVnYXRpdmUgKGxhc3QgYml0IG9mIGRpZmZlcmVuY2UgaXMgc2V0KSAgID0+IFJldHVybmluZyBmYWxzZS4KKyAgICAvLyAyKSBhTm93IGlzIHNhbWUgYXMgbVRhcmdldFRpbWUgPT4gIERpZmZlcmVuY2UgaXMgemVybyAgICAgKGxhc3QgYml0IG9mIGRpZmZlcmVuY2UgaXMgY2xlYXIpID0+IFJldHVybmluZyB0cnVlLgorICAgIC8vIDMpIGFOb3cgaXMgYWZ0ZXIgbVRhcmdldFRpbWUgICA9PiAgRGlmZmVyZW5jZSBpcyBwb3NpdGl2ZSAobGFzdCBiaXQgb2YgZGlmZmVyZW5jZSBpcyBjbGVhcikgPT4gUmV0dXJuaW5nIHRydWUuCisKKyAgICByZXR1cm4gISgoZGlmZiAmICgxVUwgPDwgMzEpKSAhPSAwKTsKK30KKworc3RhdGljIHZvaWQgSGFuZGxlQ29tcGFyZU1hdGNoKEFsYXJtSW5kZXggYUluZGV4LCBib29sIGFTa2lwQ2hlY2spCit7CisgICAgbnJmX3J0Y19ldmVudF9jbGVhcihSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVthSW5kZXhdLm1Db21wYXJlRXZlbnQpOworCisgICAgdWludDY0X3QgdXNlY1RpbWUgPSBBbGFybUdldEN1cnJlbnRUaW1lKCk7CisgICAgdWludDMyX3Qgbm93OworCisgICAgaWYgKGFJbmRleCA9PSBrTXNUaW1lcikKKyAgICB7CisgICAgICAgIG5vdyA9ICh1aW50MzJfdCkodXNlY1RpbWUgLyBVU19QRVJfTVMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBub3cgPSAodWludDMyX3QpdXNlY1RpbWU7CisgICAgfQorCisgICAgLy8gSW4gY2FzZSB0aGUgdGFyZ2V0IHRpbWUgd2FzIGxhcmdlciB0aGFuIHNpbmdsZSBvdmVyZmxvdywKKyAgICAvLyB3ZSBzaG91bGQgb25seSBzdHJpa2UgdGhlIHRpbWVyIG9uIGZpbmFsIGNvbXBhcmUgZXZlbnQuCisgICAgaWYgKGFTa2lwQ2hlY2sgfHwgQWxhcm1TaGFsbFN0cmlrZShub3csIGFJbmRleCkpCisgICAgeworICAgICAgICBucmZfcnRjX2V2ZW50X2Rpc2FibGUoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbYUluZGV4XS5tQ29tcGFyZUV2ZW50TWFzayk7CisgICAgICAgIG5yZl9ydGNfaW50X2Rpc2FibGUoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbYUluZGV4XS5tQ29tcGFyZUludCk7CisKKyAgICAgICAgc1RpbWVyRGF0YVthSW5kZXhdLm1GaXJlQWxhcm0gPSB0cnVlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgSGFuZGxlT3ZlcmZsb3codm9pZCkKK3sKKyAgICBucmZfcnRjX2V2ZW50X2NsZWFyKFJUQ19JTlNUQU5DRSwgTlJGX1JUQ19FVkVOVF9PVkVSRkxPVyk7CisKKyAgICAvLyBJbmNyZW1lbnQgY291bnRlciBvbiBvdmVyZmxvdy4KKyAgICBzVGltZU9mZnNldCA9IHNUaW1lT2Zmc2V0ICsgTVNfUEVSX09WRVJGTE9XOworfQorCitzdGF0aWMgdm9pZCBBbGFybVN0YXJ0QXQodWludDMyX3QgYVRhcmdldFRpbWUsIEFsYXJtSW5kZXggYUluZGV4KQoreworICAgIHVpbnQzMl90IHRhcmdldENvdW50ZXI7CisgICAgdWludDMyX3Qgbm93OworCisgICAgbnJmX3J0Y19pbnRfZGlzYWJsZShSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVthSW5kZXhdLm1Db21wYXJlSW50KTsKKyAgICBucmZfcnRjX2V2ZW50X2VuYWJsZShSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVthSW5kZXhdLm1Db21wYXJlRXZlbnRNYXNrKTsKKworICAgIHNUaW1lckRhdGFbYUluZGV4XS5tVGFyZ2V0VGltZSA9IGFUYXJnZXRUaW1lOworCisgICAgdGFyZ2V0Q291bnRlciA9IFRpbWVUb1RpY2tzKHNUaW1lckRhdGFbYUluZGV4XS5tVGFyZ2V0VGltZSwgYUluZGV4KTsKKworICAgIG5yZl9ydGNfY2Nfc2V0KFJUQ19JTlNUQU5DRSwgc0NoYW5uZWxEYXRhW2FJbmRleF0ubUNoYW5uZWxOdW1iZXIsIHRhcmdldENvdW50ZXIpOworCisgICAgbm93ID0gQWxhcm1HZXRDdXJyZW50VGltZVJ0Y1Byb3RlY3RlZChhSW5kZXgpOworCisgICAgaWYgKEFsYXJtU2hhbGxTdHJpa2Uobm93LCBhSW5kZXgpKQorICAgIHsKKyAgICAgICAgSGFuZGxlQ29tcGFyZU1hdGNoKGFJbmRleCwgdHJ1ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5yZl9ydGNfaW50X2VuYWJsZShSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVthSW5kZXhdLm1Db21wYXJlSW50KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEFsYXJtU3RvcChBbGFybUluZGV4IGFJbmRleCkKK3sKKyAgICBucmZfcnRjX2V2ZW50X2Rpc2FibGUoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbYUluZGV4XS5tQ29tcGFyZUV2ZW50TWFzayk7CisgICAgbnJmX3J0Y19pbnRfZGlzYWJsZShSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVthSW5kZXhdLm1Db21wYXJlSW50KTsKKyAgICBucmZfcnRjX2V2ZW50X2NsZWFyKFJUQ19JTlNUQU5DRSwgc0NoYW5uZWxEYXRhW2FJbmRleF0ubUNvbXBhcmVFdmVudCk7CisKKyAgICBzVGltZXJEYXRhW2FJbmRleF0ubUZpcmVBbGFybSA9IGZhbHNlOworfQorCit2b2lkIG5yZjVBbGFybUluaXQodm9pZCkKK3sKKyAgICBzVGltZU9mZnNldCA9IDA7CisgICAgbWVtc2V0KHNUaW1lckRhdGEsIDAsIHNpemVvZihzVGltZXJEYXRhKSk7CisKKyAgICAvLyBTZXR1cCBsb3cgZnJlcXVlbmN5IGNsb2NrLgorICAgIG5yZl9kcnZfY2xvY2tfbGZjbGtfcmVxdWVzdChOVUxMKTsKKworICAgIHdoaWxlICghbnJmX2Rydl9jbG9ja19sZmNsa19pc19ydW5uaW5nKCkpIHt9CisKKyAgICAvLyBTZXR1cCBSVEMgdGltZXIuCisgICAgTlZJQ19TZXRQcmlvcml0eShSVENfSVJRTiwgUlRDX0lSUV9QUklPUklUWSk7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoUlRDX0lSUU4pOworICAgIE5WSUNfRW5hYmxlSVJRKFJUQ19JUlFOKTsKKworICAgIG5yZl9ydGNfcHJlc2NhbGVyX3NldChSVENfSU5TVEFOQ0UsIDApOworCisgICAgbnJmX3J0Y19ldmVudF9jbGVhcihSVENfSU5TVEFOQ0UsIE5SRl9SVENfRVZFTlRfT1ZFUkZMT1cpOworICAgIG5yZl9ydGNfZXZlbnRfZW5hYmxlKFJUQ19JTlNUQU5DRSwgUlRDX0VWVEVOX09WUkZMV19Nc2spOworICAgIG5yZl9ydGNfaW50X2VuYWJsZShSVENfSU5TVEFOQ0UsIE5SRl9SVENfSU5UX09WRVJGTE9XX01BU0spOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGtOdW1UaW1lcnM7IGkrKykKKyAgICB7CisgICAgICAgIG5yZl9ydGNfZXZlbnRfY2xlYXIoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbaV0ubUNvbXBhcmVFdmVudCk7CisgICAgICAgIG5yZl9ydGNfZXZlbnRfZGlzYWJsZShSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVtpXS5tQ29tcGFyZUV2ZW50TWFzayk7CisgICAgICAgIG5yZl9ydGNfaW50X2Rpc2FibGUoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbaV0ubUNvbXBhcmVJbnQpOworICAgIH0KKworICAgIG5yZl9ydGNfdGFza190cmlnZ2VyKFJUQ19JTlNUQU5DRSwgTlJGX1JUQ19UQVNLX1NUQVJUKTsKK30KKwordm9pZCBucmY1QWxhcm1EZWluaXQodm9pZCkKK3sKKyAgICBucmZfcnRjX3Rhc2tfdHJpZ2dlcihSVENfSU5TVEFOQ0UsIE5SRl9SVENfVEFTS19TVE9QKTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBrTnVtVGltZXJzOyBpKyspCisgICAgeworICAgICAgICBucmZfcnRjX2V2ZW50X2NsZWFyKFJUQ19JTlNUQU5DRSwgc0NoYW5uZWxEYXRhW2ldLm1Db21wYXJlRXZlbnQpOworICAgICAgICBucmZfcnRjX2V2ZW50X2Rpc2FibGUoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbaV0ubUNvbXBhcmVFdmVudE1hc2spOworICAgICAgICBucmZfcnRjX2ludF9kaXNhYmxlKFJUQ19JTlNUQU5DRSwgc0NoYW5uZWxEYXRhW2ldLm1Db21wYXJlSW50KTsKKyAgICB9CisKKyAgICBucmZfcnRjX2ludF9kaXNhYmxlKFJUQ19JTlNUQU5DRSwgTlJGX1JUQ19JTlRfT1ZFUkZMT1dfTUFTSyk7CisgICAgbnJmX3J0Y19ldmVudF9kaXNhYmxlKFJUQ19JTlNUQU5DRSwgUlRDX0VWVEVOX09WUkZMV19Nc2spOworICAgIG5yZl9ydGNfZXZlbnRfY2xlYXIoUlRDX0lOU1RBTkNFLCBOUkZfUlRDX0VWRU5UX09WRVJGTE9XKTsKKworICAgIE5WSUNfRGlzYWJsZUlSUShSVENfSVJRTik7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoUlRDX0lSUU4pOworICAgIE5WSUNfU2V0UHJpb3JpdHkoUlRDX0lSUU4sIDApOworCisgICAgbnJmX2Rydl9jbG9ja19sZmNsa19yZWxlYXNlKCk7Cit9CisKK3ZvaWQgbnJmNUFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKHNUaW1lckRhdGFba01zVGltZXJdLm1GaXJlQWxhcm0pCisgICAgeworICAgICAgICBzVGltZXJEYXRhW2tNc1RpbWVyXS5tRmlyZUFsYXJtID0gZmFsc2U7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdERpYWdBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdEFsYXJtRmlyZWQoYUluc3RhbmNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzVGltZXJEYXRhW2tVc1RpbWVyXS5tRmlyZUFsYXJtKQorICAgIHsKKyAgICAgICAgc1RpbWVyRGF0YVtrVXNUaW1lcl0ubUZpcmVBbGFybSA9IGZhbHNlOworCisgICAgICAgIHNVc2VjSGFuZGxlcihzVXNlY0NvbnRleHQpOworICAgIH0KK30KKwordWludDMyX3Qgb3RQbGF0QWxhcm1HZXROb3codm9pZCkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90KShBbGFybUdldEN1cnJlbnRUaW1lKCkgLyBVU19QRVJfTVMpOworfQorCit2b2lkIG90UGxhdEFsYXJtU3RhcnRBdChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFUMCwgdWludDMyX3QgYUR0KQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICB1aW50MzJfdCB0YXJnZXRUaW1lID0gYVQwICsgYUR0OworCisgICAgQWxhcm1TdGFydEF0KHRhcmdldFRpbWUsIGtNc1RpbWVyKTsKK30KKwordm9pZCBvdFBsYXRBbGFybVN0b3Aob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIEFsYXJtU3RvcChrTXNUaW1lcik7Cit9CisKK3VpbnQzMl90IG90UGxhdFVzZWNBbGFybUdldE5vdyh2b2lkKQoreworICAgIHJldHVybiAodWludDMyX3QpQWxhcm1HZXRDdXJyZW50VGltZSgpOworfQorCit2b2lkIG90UGxhdFVzZWNBbGFybVN0YXJ0QXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhVDAsIHVpbnQzMl90IGFEdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdFBsYXRVc2VjQWxhcm1IYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgdWludDMyX3QgdGFyZ2V0VGltZSA9IGFUMCArIGFEdDsKKworICAgIEFsYXJtU3RhcnRBdCh0YXJnZXRUaW1lLCBrVXNUaW1lcik7CisKKyAgICBzVXNlY0hhbmRsZXIgPSBhSGFuZGxlcjsKKyAgICBzVXNlY0NvbnRleHQgPSBhQ29udGV4dDsKK30KKwordm9pZCBvdFBsYXRVc2VjQWxhcm1TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBBbGFybVN0b3Aoa1VzVGltZXIpOworfQorCit2b2lkIFJUQ19JUlFfSEFORExFUih2b2lkKQoreworICAgIC8vIEhhbmRsZSBvdmVyZmxvdy4KKyAgICBpZiAobnJmX3J0Y19ldmVudF9wZW5kaW5nKFJUQ19JTlNUQU5DRSwgTlJGX1JUQ19FVkVOVF9PVkVSRkxPVykpCisgICAgeworICAgICAgICBIYW5kbGVPdmVyZmxvdygpOworICAgIH0KKworICAgIC8vIEhhbmRsZSBjb21wYXJlIG1hdGNoLgorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBrTnVtVGltZXJzOyBpKyspCisgICAgeworICAgICAgICBpZiAobnJmX3J0Y19pbnRfaXNfZW5hYmxlZChSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVtpXS5tQ29tcGFyZUludCkgJiYKKyAgICAgICAgICAgIG5yZl9ydGNfZXZlbnRfcGVuZGluZyhSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVtpXS5tQ29tcGFyZUV2ZW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgSGFuZGxlQ29tcGFyZU1hdGNoKChBbGFybUluZGV4KWksIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9jcnlwdG8vbnJmNTI4NDAtbWJlZHRscy1jb25maWcuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9jcnlwdG8vbnJmNTI4NDAtbWJlZHRscy1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWJiOGRkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2NyeXB0by9ucmY1Mjg0MC1tYmVkdGxzLWNvbmZpZy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZpbmUgTUJFRFRMU19TSEEyNTZfQUxUCisKKyNpZiBkZWZpbmVkKF9fSUNDQVJNX18pCisgICAgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcz1QZTU0OSIpCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvY3J5cHRvL3NoYTI1Nl9hbHQuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9jcnlwdG8vc2hhMjU2X2FsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MjMzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvY3J5cHRvL3NoYTI1Nl9hbHQuaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNQkVEVExTX1NIQTI1Nl9BTFRfSAorI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9BTFRfSAorCisjaWZkZWYgTUJFRFRMU19TSEEyNTZfQUxUCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU0hBLTI1NiBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHVuaW9uCit7CisgICAgc3RydWN0CisgICAgeworICAgICAgICB1aW50MzJfdCB0b3RhbFsyXTsgICAgICAgICAgLyohPCBudW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkICAqLworICAgICAgICB1aW50MzJfdCBzdGF0ZVs4XTsgICAgICAgICAgLyohPCBpbnRlcm1lZGlhdGUgZGlnZXN0IHN0YXRlICAqLworICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07ICAgLyohPCBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZCAqLworICAgICAgICBpbnQgaXMyMjQ7ICAgICAgICAgICAgICAgICAgLyohPCAwID0+IFNIQS0yNTYsIGVsc2UgU0hBLTIyNCAqLworICAgIH07CisgICAgdWludDhfdCByZXNlcnZlZFsyNTZdOworfQorbWJlZHRsc19zaGEyNTZfY29udGV4dDsKKworLyoqCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSBTSEEtMjU2IGNvbnRleHQKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IFNIQS0yNTYgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2luaXQobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4KTsKKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgU0hBLTI1NiBjb250ZXh0CisgKgorICogQHBhcmFtIFtpbixvdXRdIGN0eCBTSEEtMjU2IGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2ZyZWUobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4KTsKKworLyoqCisgKiBAYnJpZWYgQ2xvbmUgKHRoZSBzdGF0ZSBvZikgYSBTSEEtMjU2IGNvbnRleHQKKyAqCisgKiBAcGFyYW0gW291dF0gZHN0IFRoZSBkZXN0aW5hdGlvbiBjb250ZXh0CisgKiBAcGFyYW0gW2luXSBzcmMgVGhlIGNvbnRleHQgdG8gYmUgY2xvbmVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfY2xvbmUobWJlZHRsc19zaGEyNTZfY29udGV4dCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpzcmMpOworCisvKioKKyAqIEBicmllZiBTSEEtMjU2IGNvbnRleHQgc2V0dXAKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIEBwYXJhbSBbaW5dIGlzMjI0IDAgPSB1c2UgU0hBMjU2LCAxID0gdXNlIFNIQTIyNAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cyhtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGludCBpczIyNCk7CisKKy8qKgorICogQGJyaWVmIFNIQS0yNTYgcHJvY2VzcyBidWZmZXIKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IFNIQS0yNTYgY29udGV4dAorICogQHBhcmFtIFtpbl0gaW5wdXQgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhCisgKiBAcGFyYW0gW2luXSBpbGVuIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZShtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbik7CisKKy8qKgorICogQGJyaWVmIFNIQS0yNTYgZmluYWwgZGlnZXN0CisgKgorICogQHBhcmFtIFtpbixvdXRdIGN0eCBTSEEtMjU2IGNvbnRleHQKKyAqIEBwYXJhbSBbb3V0XSBvdXRwdXQgU0hBLTIyNC8yNTYgY2hlY2tzdW0gcmVzdWx0CisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfZmluaXNoKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbMzJdKTsKKworLyogSW50ZXJuYWwgdXNlICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0FMVCAqLworCisvKiBNQkVEVExTX1NIQTI1Nl9BTFQgd2FzIHVzZWQgdG8gcmVkaWZpbmUgY29udGV4dCBzdHJ1Y3R1cmUuIFVuZGVmaW5lIGl0IG5vdyB0byBlbmFibGUgZGVmYXVsdCBtYmVkVExTIGltcGxlbWVudGF0aW9uLiAqLworI3VuZGVmIE1CRURUTFNfU0hBMjU2X0FMVAorCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQUxUX0ggKi8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9kaWFnLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvZGlhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYmYzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvZGlhZy5jCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisKKyNpbmNsdWRlIDxjb21tb24vbG9nZ2luZy5ocHA+CisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorCitzdHJ1Y3QgUGxhdGZvcm1EaWFnQ29tbWFuZAoreworICAgIGNvbnN0IGNoYXIgKm1OYW1lOworICAgIHZvaWQgKCptQ29tbWFuZCkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbik7Cit9OworCitzdHJ1Y3QgUGxhdGZvcm1EaWFnTWVzc2FnZQoreworICAgIGNvbnN0IGNoYXIgbU1lc3NhZ2VEZXNjcmlwdG9yWzExXTsKKyAgICB1aW50OF90IG1DaGFubmVsOworICAgIGludDE2X3QgbUlEOworICAgIHVpbnQzMl90IG1DbnQ7Cit9OworCisvKioKKyAqIERpYWdub3N0aWNzIG1vZGUgdmFyaWFibGVzLgorICoKKyAqLworc3RhdGljIGJvb2wgc0RpYWdNb2RlID0gZmFsc2U7CitzdGF0aWMgYm9vbCBzTGlzdGVuID0gZmFsc2U7CitzdGF0aWMgYm9vbCBzVHJhbnNtaXRBY3RpdmUgPSBmYWxzZTsKK3N0YXRpYyB1aW50OF90IHNDaGFubmVsID0gMjA7CitzdGF0aWMgaW50OF90IHNUeFBvd2VyID0gMDsKK3N0YXRpYyB1aW50MzJfdCBzVHhQZXJpb2QgPSAxOworc3RhdGljIGludDMyX3Qgc1R4Q291bnQgPSAwOworc3RhdGljIGludDMyX3Qgc1R4UmVxdWVzdGVkQ291bnQgPSAxOworc3RhdGljIGludDE2X3Qgc0lEID0gLTE7CitzdGF0aWMgc3RydWN0IFBsYXRmb3JtRGlhZ01lc3NhZ2Ugc0RpYWdNZXNzYWdlID0gey5tTWVzc2FnZURlc2NyaXB0b3IgPSAiRGlhZ01lc3NhZ2UiLCAubUNoYW5uZWwgPSAwLCAubUlEID0gMCwgLm1DbnQgPSAwfTsKKworc3RhdGljIG90RXJyb3IgcGFyc2VMb25nKGNoYXIgKmFyZ3YsIGxvbmcgKmFWYWx1ZSkKK3sKKyAgICBjaGFyICplbmRwdHI7CisgICAgKmFWYWx1ZSA9IHN0cnRvbChhcmd2LCAmZW5kcHRyLCAwKTsKKyAgICByZXR1cm4gKCplbmRwdHIgPT0gJ1wwJykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfUEFSU0U7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZEVycm9yUmVzdWx0KG90RXJyb3IgYUVycm9yLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICBpZiAoYUVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAiZmFpbGVkXHJcbnN0YXR1cyAlI3hcclxuIiwgYUVycm9yKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NMaXN0ZW4ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKG90UGxhdERpYWdNb2RlR2V0KCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgImxpc3RlbjogJXNcclxuIiwgc0xpc3RlbiA9PSB0cnVlID8gInllcyIgOiAibm8iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKworICAgICAgICBlcnJvciA9IHBhcnNlTG9uZyhhcmd2WzBdLCAmdmFsdWUpOworICAgICAgICBvdEVYUEVDVChlcnJvciA9PSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgc0xpc3RlbiA9IChib29sKSh2YWx1ZSk7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJzZXQgbGlzdGVuIHRvICVzXHJcbnN0YXR1cyAweCUwMnhcclxuIiwgc0xpc3RlbiA9PSB0cnVlID8gInllcyIgOiAibm8iLCBlcnJvcik7CisgICAgfQorCitleGl0OgorICAgIGFwcGVuZEVycm9yUmVzdWx0KGVycm9yLCBhT3V0cHV0LCBhT3V0cHV0TWF4TGVuKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc0lEKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKG90UGxhdERpYWdNb2RlR2V0KCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgIklEOiAlIiBQUklkMTYgIlxyXG4iLCBzSUQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBsb25nIHZhbHVlOworCisgICAgICAgIGVycm9yID0gcGFyc2VMb25nKGFyZ3ZbMF0sICZ2YWx1ZSk7CisgICAgICAgIG90RVhQRUNUKGVycm9yID09IE9UX0VSUk9SX05PTkUpOworICAgICAgICBvdEVYUEVDVF9BQ1RJT04odmFsdWUgPj0gMCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBzSUQgPSAoaW50MTZfdCkodmFsdWUpOworICAgICAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAic2V0IElEIHRvICUiIFBSSWQxNiAiXHJcbnN0YXR1cyAweCUwMnhcclxuIiwgc0lELCBlcnJvcik7CisgICAgfQorCitleGl0OgorICAgIGFwcGVuZEVycm9yUmVzdWx0KGVycm9yLCBhT3V0cHV0LCBhT3V0cHV0TWF4TGVuKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc1RyYW5zbWl0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG90RVhQRUNUX0FDVElPTihvdFBsYXREaWFnTW9kZUdldCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJ0cmFuc21pdCB3aWxsIHNlbmQgJSIgUFJJZDMyICIgZGlhZ25vc3RpYyBtZXNzYWdlcyB3aXRoICUiIFBSSXUzMgorICAgICAgICAgICAgICAgICAiIG1zIGludGVydmFsXHJcbnN0YXR1cyAweCUwMnhcclxuIiwKKyAgICAgICAgICAgICAgICAgc1R4UmVxdWVzdGVkQ291bnQsIHNUeFBlcmlvZCwgZXJyb3IpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInN0b3AiKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RQbGF0QWxhcm1TdG9wKGFJbnN0YW5jZSk7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJkaWFnbm9zdGljIG1lc3NhZ2UgdHJhbnNtaXNzaW9uIGlzIHN0b3BwZWRcclxuc3RhdHVzIDB4JTAyeFxyXG4iLCBlcnJvcik7CisgICAgICAgIHNUcmFuc21pdEFjdGl2ZSA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInN0YXJ0IikgPT0gMCkKKyAgICB7CisgICAgICAgIG90UGxhdEFsYXJtU3RvcChhSW5zdGFuY2UpOworICAgICAgICBzVHJhbnNtaXRBY3RpdmUgPSB0cnVlOworICAgICAgICBzVHhDb3VudCA9IHNUeFJlcXVlc3RlZENvdW50OworICAgICAgICB1aW50MzJfdCBub3cgPSBvdFBsYXRBbGFybUdldE5vdygpOworICAgICAgICBvdFBsYXRBbGFybVN0YXJ0QXQoYUluc3RhbmNlLCBub3csIHNUeFBlcmlvZCk7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJzZW5kaW5nICUiIFBSSWQzMiAiIGRpYWdub3N0aWMgbWVzc2FnZXMgd2l0aCAlIiBQUkl1MzIKKyAgICAgICAgICAgICAgICAgIiBtcyBpbnRlcnZhbFxyXG5zdGF0dXMgMHglMDJ4XHJcbiIsCisgICAgICAgICAgICAgICAgIHNUeFJlcXVlc3RlZENvdW50LCBzVHhQZXJpb2QsIGVycm9yKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJpbnRlcnZhbCIpID09IDApCisgICAgeworICAgICAgICBsb25nIHZhbHVlOworCisgICAgICAgIG90RVhQRUNUX0FDVElPTihhcmdjID09IDIsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICAgICBlcnJvciA9IHBhcnNlTG9uZyhhcmd2WzFdLCAmdmFsdWUpOworICAgICAgICBvdEVYUEVDVChlcnJvciA9PSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHZhbHVlID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBzVHhQZXJpb2QgPSAodWludDMyX3QpKHZhbHVlKTsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgInNldCBkaWFnbm9zdGljIG1lc3NhZ2VzIGludGVydmFsIHRvICUiIFBSSXUzMiAiIG1zXHJcbnN0YXR1cyAweCUwMnhcclxuIiwgc1R4UGVyaW9kLAorICAgICAgICAgICAgICAgICBlcnJvcik7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiY291bnQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKworICAgICAgICBvdEVYUEVDVF9BQ1RJT04oYXJnYyA9PSAyLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAgICAgZXJyb3IgPSBwYXJzZUxvbmcoYXJndlsxXSwgJnZhbHVlKTsKKyAgICAgICAgb3RFWFBFQ1QoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSk7CisgICAgICAgIG90RVhQRUNUX0FDVElPTigodmFsdWUgPiAwKSB8fCAodmFsdWUgPT0gLTEpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgICAgIHNUeFJlcXVlc3RlZENvdW50ID0gKHVpbnQzMl90KSh2YWx1ZSk7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJzZXQgZGlhZ25vc3RpYyBtZXNzYWdlcyBjb3VudCB0byAlIiBQUklkMzIgIlxyXG5zdGF0dXMgMHglMDJ4XHJcbiIsIHNUeFJlcXVlc3RlZENvdW50LAorICAgICAgICAgICAgICAgICBlcnJvcik7CisgICAgfQorCitleGl0OgorICAgIGFwcGVuZEVycm9yUmVzdWx0KGVycm9yLCBhT3V0cHV0LCBhT3V0cHV0TWF4TGVuKTsKK30KKworY29uc3Qgc3RydWN0IFBsYXRmb3JtRGlhZ0NvbW1hbmQgc0NvbW1hbmRzW10gPQoreworICAgIHsibGlzdGVuIiwgJnByb2Nlc3NMaXN0ZW4gfSwKKyAgICB7InRyYW5zbWl0IiwgJnByb2Nlc3NUcmFuc21pdCB9LAorICAgIHsiaWQiLCAmcHJvY2Vzc0lEIH0KK307CisKK3ZvaWQgb3RQbGF0RGlhZ1Byb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICB1aW50MzJfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChzdHJjbXAoYXJndlswXSwgc0NvbW1hbmRzW2ldLm1OYW1lKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzQ29tbWFuZHNbaV0ubUNvbW1hbmQoYUluc3RhbmNlLCBhcmdjIC0gMSwgYXJnYyA+IDEgPyAmYXJndlsxXSA6IE5VTEwsIGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaSA9PSBzaXplb2Yoc0NvbW1hbmRzKSAvIHNpemVvZihzQ29tbWFuZHNbMF0pKQorICAgIHsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgImRpYWcgZmVhdHVyZSAnJXMnIGlzIG5vdCBzdXBwb3J0ZWRcclxuIiwgYXJndlswXSk7CisgICAgfQorfQorCit2b2lkIG90UGxhdERpYWdNb2RlU2V0KGJvb2wgYU1vZGUpCit7CisgICAgc0RpYWdNb2RlID0gYU1vZGU7Cit9CisKK2Jvb2wgb3RQbGF0RGlhZ01vZGVHZXQoKQoreworICAgIHJldHVybiBzRGlhZ01vZGU7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ0NoYW5uZWxTZXQodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBzQ2hhbm5lbCA9IGFDaGFubmVsOworfQorCit2b2lkIG90UGxhdERpYWdUeFBvd2VyU2V0KGludDhfdCBhVHhQb3dlcikKK3sKKyAgICBzVHhQb3dlciA9IGFUeFBvd2VyOworfQorCit2b2lkIG90UGxhdERpYWdSYWRpb1JlY2VpdmVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBpZiAoc0xpc3RlbiAmJiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpKQorICAgIHsKKyAgICAgICAgaWYgKGFGcmFtZS0+bUxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IFBsYXRmb3JtRGlhZ01lc3NhZ2UpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3QgUGxhdGZvcm1EaWFnTWVzc2FnZSAqbWVzc2FnZSA9IChzdHJ1Y3QgUGxhdGZvcm1EaWFnTWVzc2FnZSAqKWFGcmFtZS0+bVBzZHU7CisKKyAgICAgICAgICAgIGlmIChzdHJuY21wKG1lc3NhZ2UtPm1NZXNzYWdlRGVzY3JpcHRvciwgIkRpYWdNZXNzYWdlIiwgMTEpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RQbGF0TG9nKE9UX0xPR19MRVZFTF9ERUJHLCBPVF9MT0dfUkVHSU9OX1BMQVRGT1JNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAie1wiRnJhbWVcIjp7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJMb2NhbENoYW5uZWxcIjoldSAsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJSZW1vdGVDaGFubmVsXCI6JXUsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJDTlRcIjolIiBQUkl1MzIgIiwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcIkxvY2FsSURcIjolIiBQUklkMTYgIiwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcIlJlbW90ZUlEXCI6JSIgUFJJZDE2ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJSU1NJXCI6JWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ9fVxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhRnJhbWUtPm1DaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLT5tQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+bUNudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLT5tSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFGcmFtZS0+bVBvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBvdFBsYXREaWFnQWxhcm1DYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKHNUcmFuc21pdEFjdGl2ZSkKKyAgICB7CisgICAgICAgIGlmICgoc1R4Q291bnQgPiAwKSB8fCAoc1R4Q291bnQgPT0gLTEpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFJhZGlvRnJhbWUgKnNUeFBhY2tldCA9IG90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIoYUluc3RhbmNlKTsKKworICAgICAgICAgICAgc1R4UGFja2V0LT5tTGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBQbGF0Zm9ybURpYWdNZXNzYWdlKTsKKyAgICAgICAgICAgIHNUeFBhY2tldC0+bUNoYW5uZWwgPSBzQ2hhbm5lbDsKKyAgICAgICAgICAgIHNUeFBhY2tldC0+bVBvd2VyID0gc1R4UG93ZXI7CisKKyAgICAgICAgICAgIHNEaWFnTWVzc2FnZS5tQ2hhbm5lbCA9IHNUeFBhY2tldC0+bUNoYW5uZWw7CisgICAgICAgICAgICBzRGlhZ01lc3NhZ2UubUlEID0gc0lEOworCisgICAgICAgICAgICBtZW1jcHkoc1R4UGFja2V0LT5tUHNkdSwgJnNEaWFnTWVzc2FnZSwgc2l6ZW9mKHN0cnVjdCBQbGF0Zm9ybURpYWdNZXNzYWdlKSk7CisgICAgICAgICAgICBvdFBsYXRSYWRpb1RyYW5zbWl0KGFJbnN0YW5jZSwgc1R4UGFja2V0KTsKKworICAgICAgICAgICAgc0RpYWdNZXNzYWdlLm1DbnQrKzsKKworICAgICAgICAgICAgaWYgKHNUeENvdW50ICE9IC0xKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNUeENvdW50LS07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnQzMl90IG5vdyA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgICAgICAgICBvdFBsYXRBbGFybVN0YXJ0QXQoYUluc3RhbmNlLCBub3csIHNUeFBlcmlvZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzVHJhbnNtaXRBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIG90UGxhdEFsYXJtU3RvcChhSW5zdGFuY2UpOworICAgICAgICAgICAgb3RQbGF0TG9nKE9UX0xPR19MRVZFTF9ERUJHLCBPVF9MT0dfUkVHSU9OX1BMQVRGT1JNLCAiVHJhbnNtaXQgZG9uZSIpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTgyYTJlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2ZsYXNoLmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8dXRpbHMvZmxhc2guaD4KKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisKKyNpbmNsdWRlICJwbGF0Zm9ybS1ucmY1LmgiCisKK2V4dGVybiB1aW50MzJfdCBfX2ZsYXNoX2RhdGFfc3RhcnQ7CitleHRlcm4gdWludDMyX3QgX19mbGFzaF9kYXRhX2VuZDsKKworI2RlZmluZSBGTEFTSF9QQUdFX0FERFJfTUFTSyAweEZGRkZGMDAwCisjZGVmaW5lIEZMQVNIX1BBR0VfU0laRSAgICAgIDQwOTYKKyNkZWZpbmUgRkxBU0hfU1RBUlRfQUREUiAgICAgKCh1aW50MzJfdCkmX19mbGFzaF9kYXRhX3N0YXJ0KQorI2RlZmluZSBGTEFTSF9FTkRfQUREUiAgICAgICAoKHVpbnQzMl90KSZfX2ZsYXNoX2RhdGFfZW5kKQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG1hcEFkZHJlc3ModWludDMyX3QgYUFkZHJlc3MpCit7CisgICAgcmV0dXJuIGFBZGRyZXNzICsgRkxBU0hfU1RBUlRfQUREUjsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoSW5pdCh2b2lkKQoreworICAgIC8vIEp1c3QgZW5zdXJlIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQuCisgICAgYXNzZXJ0KChGTEFTSF9TVEFSVF9BRERSICUgRkxBU0hfUEFHRV9TSVpFKSA9PSAwKTsKKyAgICBhc3NlcnQoKEZMQVNIX0VORF9BRERSICUgRkxBU0hfUEFHRV9TSVpFKSA9PSAwKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoR2V0U2l6ZSh2b2lkKQoreworICAgIHJldHVybiBGTEFTSF9FTkRfQUREUiAtIEZMQVNIX1NUQVJUX0FERFI7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaEVyYXNlUGFnZSh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdEVYUEVDVF9BQ1RJT04oYUFkZHJlc3MgPCB1dGlsc0ZsYXNoR2V0U2l6ZSgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IG5yZjVGbGFzaFBhZ2VFcmFzZShtYXBBZGRyZXNzKGFBZGRyZXNzICYgRkxBU0hfUEFHRV9BRERSX01BU0spKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaFN0YXR1c1dhaXQodWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisKKyAgICBpZiAoYVRpbWVvdXQgPT0gMCkKKyAgICB7CisgICAgICAgIGlmICghbnJmNUZsYXNoSXNCdXN5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aW50MzJfdCBzdGFydFRpbWUgPSBvdFBsYXRBbGFybUdldE5vdygpOworCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbnJmNUZsYXNoSXNCdXN5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlIChvdFBsYXRBbGFybUdldE5vdygpIC0gc3RhcnRUaW1lIDwgYVRpbWVvdXQpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaFdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgdWludDMyX3QgcmVzdWx0ID0gMDsKKyAgICBvdEVYUEVDVChhRGF0YSk7CisgICAgb3RFWFBFQ1QoYUFkZHJlc3MgPCB1dGlsc0ZsYXNoR2V0U2l6ZSgpKTsKKyAgICBvdEVYUEVDVChhU2l6ZSk7CisKKyAgICByZXN1bHQgPSBucmY1Rmxhc2hXcml0ZShtYXBBZGRyZXNzKGFBZGRyZXNzKSwgYURhdGEsIGFTaXplKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoUmVhZCh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHVpbnQzMl90IHJlc3VsdCA9IDA7CisgICAgb3RFWFBFQ1QoYURhdGEpOworICAgIG90RVhQRUNUKGFBZGRyZXNzIDwgdXRpbHNGbGFzaEdldFNpemUoKSk7CisKKyAgICBtZW1jcHkoYURhdGEsICh1aW50OF90ICopbWFwQWRkcmVzcyhhQWRkcmVzcyksIGFTaXplKTsKKyAgICByZXN1bHQgPSBhU2l6ZTsKKworZXhpdDoKKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2ZsYXNoX25vc2QuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9mbGFzaF9ub3NkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4YThkNwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9mbGFzaF9ub3NkLmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKyNpbmNsdWRlIDx1dGlscy9mbGFzaC5oPgorCisjaW5jbHVkZSAiaGFsL25yZl9udm1jLmgiCisjaW5jbHVkZSAicGxhdGZvcm0tbnJmNS5oIgorCitvdEVycm9yIG5yZjVGbGFzaFBhZ2VFcmFzZSh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICBucmZfbnZtY19wYWdlX2VyYXNlKGFBZGRyZXNzKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitib29sIG5yZjVGbGFzaElzQnVzeSh2b2lkKQoreworICAgIHJldHVybiBOUkZfTlZNQy0+UkVBRFkgIT0gTlZNQ19SRUFEWV9SRUFEWV9SZWFkeTsKK30KKwordWludDMyX3QgbnJmNUZsYXNoV3JpdGUodWludDMyX3QgYUFkZHJlc3MsIHVpbnQ4X3QgKmFEYXRhLCB1aW50MzJfdCBhU2l6ZSkKK3sKKyAgICBucmZfbnZtY193cml0ZV9ieXRlcyhhQWRkcmVzcywgYURhdGEsIGFTaXplKTsKKyAgICByZXR1cm4gYVNpemU7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvZmxhc2hfc2QuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9mbGFzaF9zZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OWQzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvZmxhc2hfc2QuYwpAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKworI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKyNpbmNsdWRlIDx1dGlscy9mbGFzaC5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tbnJmNS5oIgorI2luY2x1ZGUgInNvZnRkZXZpY2UuaCIKKworI2RlZmluZSBNSU4oYSwgYikgICAgICAgICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgRkxBU0hfUEFHRV9TSVpFICA0MDk2CisjZGVmaW5lIEZMQVNIX1RJTUVPVVQgICAgMTAwMAorCit0eXBlZGVmIGVudW0geworICAgIEZMQVNIX1NUQVRVU19JRExFLAorICAgIEZMQVNIX1NUQVRVU19QRU5ESU5HLAorICAgIEZMQVNIX1NUQVRVU19TVUNDRVNTLAorICAgIEZMQVNIX1NUQVRVU19GQUlMRUQKK30gU2RGbGFzaFN0YXR1czsKKworc3RhdGljIHZvbGF0aWxlIFNkRmxhc2hTdGF0dXMgc0ZsYXNoU3RhdHVzOworCit2b2lkIG5yZjVTZFNvY0ZsYXNoUHJvY2Vzcyh1aW50MzJfdCBhRXZ0SWQpCit7CisgICAgc3dpdGNoIChhRXZ0SWQpCisgICAgeworICAgIGNhc2UgTlJGX0VWVF9GTEFTSF9PUEVSQVRJT05fU1VDQ0VTUzoKKyAgICAgICAgaWYgKHNGbGFzaFN0YXR1cyA9PSBGTEFTSF9TVEFUVVNfUEVORElORykKKyAgICAgICAgeworICAgICAgICAgICAgc0ZsYXNoU3RhdHVzID0gRkxBU0hfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTlJGX0VWVF9GTEFTSF9PUEVSQVRJT05fRVJST1I6CisgICAgICAgIGlmIChzRmxhc2hTdGF0dXMgPT0gRkxBU0hfU1RBVFVTX1BFTkRJTkcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNGbGFzaFN0YXR1cyA9IEZMQVNIX1NUQVRVU19GQUlMRUQ7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIG90RXJyb3Igc2RGbGFzaFNpbmdsZVdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgdWludDMyX3QgcmV0dmFsOworICAgIHVpbnQzMl90IHN0YXJ0VGltZSA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisKKyAgICAvLyBFeHBlY3QgU290ZkRldmljZSBGbGFzaCBDb21wbGV0ZSBldmVudC4KKyAgICBzRmxhc2hTdGF0dXMgPSBGTEFTSF9TVEFUVVNfUEVORElORzsKKworICAgIHJldHZhbCA9IHNkX2ZsYXNoX3dyaXRlKCh1aW50MzJfdCAqKWFBZGRyZXNzLCAodWludDMyX3QgKilhRGF0YSwgYVNpemUpOworCisgICAgaWYgKHJldHZhbCA9PSBOUkZfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIC8vIFdhaXQgZm9yIFNvZnREZXZpY2UgRmxhc2ggQ29tcGxldGUgZXZlbnQuCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzRmxhc2hTdGF0dXMgIT0gRkxBU0hfU1RBVFVTX1BFTkRJTkcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG90UGxhdEFsYXJtR2V0Tm93KCkgLSBzdGFydFRpbWUgPCBGTEFTSF9USU1FT1VUKTsKKworICAgICAgICBpZiAoc0ZsYXNoU3RhdHVzICE9IEZMQVNIX1NUQVRVU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR2YWwgPSBOUkZfRVJST1JfSU5URVJOQUw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzRmxhc2hTdGF0dXMgPSBGTEFTSF9TVEFUVVNfSURMRTsKKworICAgIHJldHVybiBucmY1U2RFcnJvclRvT3RFcnJvcihyZXR2YWwpOworfQorCitvdEVycm9yIG5yZjVGbGFzaFBhZ2VFcmFzZSh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICB1aW50MzJfdCByZXR2YWw7CisgICAgdWludDMyX3Qgc3RhcnRUaW1lID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKworICAgIC8vIEV4cGVjdCBTb3RmRGV2aWNlIEZsYXNoIENvbXBsZXRlIGV2ZW50LgorICAgIHNGbGFzaFN0YXR1cyA9IEZMQVNIX1NUQVRVU19QRU5ESU5HOworCisgICAgcmV0dmFsID0gc2RfZmxhc2hfcGFnZV9lcmFzZShhQWRkcmVzcyAvIEZMQVNIX1BBR0VfU0laRSk7CisKKyAgICBpZiAocmV0dmFsID09IE5SRl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgLy8gV2FpdCBmb3IgU29mdERldmljZSBGbGFzaCBDb21wbGV0ZSBldmVudC4KKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNGbGFzaFN0YXR1cyAhPSBGTEFTSF9TVEFUVVNfUEVORElORykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAob3RQbGF0QWxhcm1HZXROb3coKSAtIHN0YXJ0VGltZSA8IEZMQVNIX1RJTUVPVVQpOworCisgICAgICAgIGlmIChzRmxhc2hTdGF0dXMgIT0gRkxBU0hfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHZhbCA9IE5SRl9FUlJPUl9JTlRFUk5BTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNGbGFzaFN0YXR1cyA9IEZMQVNIX1NUQVRVU19JRExFOworCisgICAgcmV0dXJuIG5yZjVTZEVycm9yVG9PdEVycm9yKHJldHZhbCk7Cit9CisKK2Jvb2wgbnJmNUZsYXNoSXNCdXN5KHZvaWQpCit7CisgICAgcmV0dXJuIHNGbGFzaFN0YXR1cyAhPSBGTEFTSF9TVEFUVVNfSURMRTsKK30KKwordWludDMyX3QgbnJmNUZsYXNoV3JpdGUodWludDMyX3QgYUFkZHJlc3MsIHVpbnQ4X3QgKmFEYXRhLCB1aW50MzJfdCBhU2l6ZSkKK3sKKyAgICBvdEVycm9yICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDMyX3QgcmVzdWx0ID0gMDsKKyAgICB1aW50MzJfdCByZW1haW5kZXIgPSAoYUFkZHJlc3MgJSBzaXplb2YodWludDMyX3QpKTsKKyAgICB1aW50MzJfdCBibG9ja1NpemU7CisgICAgdWludDMyX3QgYmxvY2tWYWx1ZTsKKworICAgIG90RVhQRUNUKHNGbGFzaFN0YXR1cyA9PSBGTEFTSF9TVEFUVVNfSURMRSk7CisKKyAgICAvLyBDaGVjayBpZiBAcCBhQWRkcmVzcyBpcyBhbGlnbmVkIHRvIGZ1bGwgd29yZCBzaXplLiBJZiBub3QsIG1ha2UgYWRkaXRpb25hbAorICAgIC8vIGZsYXNoIHdyaXRlIGF0IHRoZSBiZWdpbm5pbmcuCisgICAgaWYgKHJlbWFpbmRlcikKKyAgICB7CisgICAgICAgIGJsb2NrU2l6ZSAgPSBNSU4oKHNpemVvZih1aW50MzJfdCkgLSByZW1haW5kZXIpLCBhU2l6ZSk7CisgICAgICAgIGJsb2NrVmFsdWUgPSAweGZmZmZmZmZmOworCisgICAgICAgIG1lbWNweSgodWludDhfdCAqKSZibG9ja1ZhbHVlICsgcmVtYWluZGVyLCBhRGF0YSwgYmxvY2tTaXplKTsKKworICAgICAgICBlcnJvciA9IHNkRmxhc2hTaW5nbGVXcml0ZShhQWRkcmVzcyAtIHJlbWFpbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKikmYmxvY2tWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJsb2NrVmFsdWUpIC8gc2l6ZW9mKHVpbnQzMl90KSk7CisKKyAgICAgICAgb3RFWFBFQ1QoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSk7CisKKyAgICAgICAgYUFkZHJlc3MgKz0gYmxvY2tTaXplOworICAgICAgICBhRGF0YSAgICArPSBibG9ja1NpemU7CisgICAgICAgIGFTaXplICAgIC09IGJsb2NrU2l6ZTsKKyAgICAgICAgcmVzdWx0ICAgKz0gYmxvY2tTaXplOworICAgIH0KKworICAgIG90RVhQRUNUKGFTaXplKTsKKworICAgIC8vIFN0b3JlIHRoZSBtaWRkbGUgYmxvY2sgb2YgZGF0YS4KKyAgICByZW1haW5kZXIgPSBhU2l6ZSAlIHNpemVvZih1aW50MzJfdCk7CisgICAgYmxvY2tTaXplID0gYVNpemUgLSByZW1haW5kZXI7CisKKyAgICBlcnJvciA9IHNkRmxhc2hTaW5nbGVXcml0ZShhQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1NpemUgLyBzaXplb2YodWludDMyX3QpKTsKKworICAgIG90RVhQRUNUKGVycm9yID09IE9UX0VSUk9SX05PTkUpOworCisgICAgYUFkZHJlc3MgKz0gYmxvY2tTaXplOworICAgIGFEYXRhICAgICs9IGJsb2NrU2l6ZTsKKyAgICBhU2l6ZSAgICAtPSBibG9ja1NpemU7CisgICAgcmVzdWx0ICAgKz0gYmxvY2tTaXplOworCisgICAgLy8gU3RvcmUgYW55IGFkZGl0aW9uYWwgYnl0ZXMgdGhhdCBkaWRuJ3QgZml0IGludG8gbWlkZGxlIGJsb2NrLgorICAgIGlmIChyZW1haW5kZXIpCisgICAgeworICAgICAgICBibG9ja1ZhbHVlID0gMHhmZmZmZmZmZjsKKworICAgICAgICBtZW1jcHkoKHVpbnQ4X3QgKikmYmxvY2tWYWx1ZSwgYURhdGEsIHJlbWFpbmRlcik7CisKKyAgICAgICAgZXJyb3IgPSBzZEZsYXNoU2luZ2xlV3JpdGUoYUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopJmJsb2NrVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihibG9ja1ZhbHVlKSAvIHNpemVvZih1aW50MzJfdCkpOworCisgICAgICAgIG90RVhQRUNUKGVycm9yID09IE9UX0VSUk9SX05PTkUpOworCisgICAgICAgIHJlc3VsdCArPSByZW1haW5kZXI7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvbG9nZ2luZy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2xvZ2dpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjFkMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2xvZ2dpbmcuYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgbG9nZ2luZy4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tbnJmNS5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWYgKE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQgPT0gMCkKKyNpbmNsdWRlIDxzZWdnZXJfcnR0L1NFR0dFUl9SVFQuaD4KKworI2lmIChMT0dfUlRUX0NPTE9SX0VOQUJMRSA9PSAxKQorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9ERUZBVUxUICJceDFCWzBtIgorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9SRUQgICAgICJceDFCWzE7MzFtIgorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9HUkVFTiAgICJceDFCWzE7MzJtIgorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9ZRUxMT1cgICJceDFCWzE7MzNtIgorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9DWUFOICAgICJceDFCWzE7MzZtIgorI2Vsc2UgLy8gTE9HX1JUVF9DT0xPUl9FTkFCTEUgPT0gMQorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9ERUZBVUxUICIiCisjZGVmaW5lIFJUVF9DT0xPUl9DT0RFX1JFRCAgICAgIiIKKyNkZWZpbmUgUlRUX0NPTE9SX0NPREVfR1JFRU4gICAiIgorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9ZRUxMT1cgICIiCisjZGVmaW5lIFJUVF9DT0xPUl9DT0RFX0NZQU4gICAgIiIKKyNlbmRpZiAvLyBMT0dfUlRUX0NPTE9SX0VOQUJMRSA9PSAxCisKK3N0YXRpYyBib29sIHNMb2dJbml0aWFsaXplZCA9IGZhbHNlOworc3RhdGljIHVpbnQ4X3Qgc0xvZ0J1ZmZlcltMT0dfUlRUX0JVRkZFUl9TSVpFXTsKKworLyoqCisgKiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBjb2xvciBvZiBhIGdpdmVuIGxldmVsIGxvZy4KKyAqCisgKiBAcGFyYW1baW5dICBhTG9nTGV2ZWwgVGhlIGxvZyBsZXZlbC4KKyAqCisgKiBAcmV0dXJucyAgU3RyaW5nIHdpdGggYSBsb2cgbGV2ZWwgY29sb3IgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbGV2ZWxUb1N0cmluZyhvdExvZ0xldmVsIGFMb2dMZXZlbCkKK3sKKyAgICBzd2l0Y2ggKGFMb2dMZXZlbCkKKyAgICB7CisgICAgY2FzZSBPVF9MT0dfTEVWRUxfQ1JJVDoKKyAgICAgICAgcmV0dXJuIFJUVF9DT0xPUl9DT0RFX1JFRDsKKworICAgIGNhc2UgT1RfTE9HX0xFVkVMX1dBUk46CisgICAgICAgIHJldHVybiBSVFRfQ09MT1JfQ09ERV9ZRUxMT1c7CisKKyAgICBjYXNlIE9UX0xPR19MRVZFTF9JTkZPOgorICAgICAgICByZXR1cm4gUlRUX0NPTE9SX0NPREVfR1JFRU47CisKKyAgICBjYXNlIE9UX0xPR19MRVZFTF9ERUJHOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBSVFRfQ09MT1JfQ09ERV9ERUZBVUxUOworICAgIH0KK30KKworI2lmIChMT0dfVElNRVNUQU1QX0VOQUJMRSA9PSAxKQorLyoqCisgKiBGdW5jdGlvbiBmb3IgcHJpbnRpbmcgYWN0dWFsIHRpbWVzdGFtcC4KKyAqCisgKiBAcGFyYW1baW5vdXRdICBhTG9nU3RyaW5nIFBvaW50ZXIgdG8gdGhlIGxvZyBidWZmZXIuCisgKiBAcGFyYW1baW5dICAgICBhTWF4U2l6ZSAgIE1heGltdW0gc2l6ZSBvZiB0aGUgbG9nIGJ1ZmZlci4KKyAqCisgKiBAcmV0dXJucyAgTnVtYmVyIG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvIHRoZSBsb2cgYnVmZmVyLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGxvZ1RpbWVzdGFtcChjaGFyICphTG9nU3RyaW5nLCB1aW50MTZfdCBhTWF4U2l6ZSkKK3sKKyAgICByZXR1cm4gc25wcmludGYoYUxvZ1N0cmluZywgYU1heFNpemUsICIlc1slMDEwbGRdIiwgUlRUX0NPTE9SX0NPREVfQ1lBTiwKKyAgICAgICAgICAgICAgICAgICAgb3RQbGF0QWxhcm1HZXROb3coKSk7Cit9CisjZW5kaWYKKworLyoqCisgKiBGdW5jdGlvbiBmb3IgcHJpbnRpbmcgbG9nIGxldmVsLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIGFMb2dTdHJpbmcgIFBvaW50ZXIgdG8gbG9nIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gICAgIGFNYXhTaXplICAgIE1heGltdW0gc2l6ZSBvZiBsb2cgYnVmZmVyLgorICogQHBhcmFtW2luXSAgICAgYUxvZ0xldmVsICAgTG9nIGxldmVsLgorICoKKyAqIEByZXR1cm5zICBOdW1iZXIgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlIGxvZyBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgbG9nTGV2ZWwoY2hhciAqYUxvZ1N0cmluZywgdWludDE2X3QgYU1heFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90TG9nTGV2ZWwgYUxvZ0xldmVsKQoreworICAgIHJldHVybiBzbnByaW50ZihhTG9nU3RyaW5nLCBhTWF4U2l6ZSwgIiVzICIsIGxldmVsVG9TdHJpbmcoYUxvZ0xldmVsKSk7Cit9CisKK3ZvaWQgbnJmNUxvZ0luaXQoKQoreworICAgIGludCByZXMgPSBTRUdHRVJfUlRUX0NvbmZpZ1VwQnVmZmVyKExPR19SVFRfQlVGRkVSX0lOREVYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPR19SVFRfQlVGRkVSX05BTUUsIHNMb2dCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9HX1JUVF9CVUZGRVJfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUdHRVJfUlRUX01PREVfTk9fQkxPQ0tfVFJJTSk7CisgICAgb3RFWFBFQ1QocmVzID49IDApOworCisgICAgc0xvZ0luaXRpYWxpemVkID0gdHJ1ZTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgbnJmNUxvZ0RlaW5pdCgpCit7CisgICAgc0xvZ0luaXRpYWxpemVkID0gZmFsc2U7Cit9CisKK3ZvaWQgb3RQbGF0TG9nKG90TG9nTGV2ZWwgYUxvZ0xldmVsLCBvdExvZ1JlZ2lvbiBhTG9nUmVnaW9uLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUZvcm1hdCwgLi4uKQoreworICAgICh2b2lkKSBhTG9nUmVnaW9uOworCisgICAgdWludDE2X3QgbGVuZ3RoID0gMDsKKyAgICBjaGFyIGxvZ1N0cmluZ1tMT0dfUEFSU0VfQlVGRkVSX1NJWkUgKyAxXTsKKworICAgIG90RVhQRUNUKHNMb2dJbml0aWFsaXplZCA9PSB0cnVlKTsKKworI2lmIChMT0dfVElNRVNUQU1QX0VOQUJMRSA9PSAxKQorICAgIGxlbmd0aCArPSBsb2dUaW1lc3RhbXAobG9nU3RyaW5nLCBMT0dfUEFSU0VfQlVGRkVSX1NJWkUpOworI2VuZGlmCisKKyAgICAvLyBBZGQgbGV2ZWwgaW5mb3JtYXRpb24uCisgICAgbGVuZ3RoICs9IGxvZ0xldmVsKCZsb2dTdHJpbmdbbGVuZ3RoXSwgKExPR19QQVJTRV9CVUZGRVJfU0laRSAtIGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgIGFMb2dMZXZlbCk7CisKKyAgICAvLyBQYXJzZSB1c2VyIHN0cmluZy4KKyAgICB2YV9saXN0IHBhcmFtTGlzdDsKKyAgICB2YV9zdGFydChwYXJhbUxpc3QsIGFGb3JtYXQpOworICAgIGxlbmd0aCArPSB2c25wcmludGYoJmxvZ1N0cmluZ1tsZW5ndGhdLCAoTE9HX1BBUlNFX0JVRkZFUl9TSVpFIC0gbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFGb3JtYXQsIHBhcmFtTGlzdCk7CisgICAgbG9nU3RyaW5nW2xlbmd0aCsrXSA9ICdcbic7CisgICAgdmFfZW5kKHBhcmFtTGlzdCk7CisKKyAgICAvLyBXcml0ZSB1c2VyIGxvZyB0byB0aGUgUlRUIG1lbW9yeSBibG9jay4KKyAgICBTRUdHRVJfUlRUX1dyaXRlTm9Mb2NrKDAsIGxvZ1N0cmluZywgbGVuZ3RoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKKyNlbmRpZiAvLyAoT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVCA9PSAwKQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL21pc2MuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwNzQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9taXNjLmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9taXNjLmg+CisKKyNpbmNsdWRlIDxkZXZpY2UvbnJmLmg+CisKKyNpbmNsdWRlICJwbGF0Zm9ybS1ucmY1LmgiCisKKyNpZiBTT0ZUREVWSUNFX1BSRVNFTlQKKyNpbmNsdWRlICJzb2Z0ZGV2aWNlLmgiCisjZW5kaWYKKworc3RhdGljIHVpbnQzMl90IHNSZXNldFJlYXNvbjsKKworX19XRUFLIHZvaWQgbnJmNUNyeXB0b0luaXQodm9pZCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgd2VhayBzbyBpdCBjb3VsZCBiZSBvdmVycmlkZGVuIHdpdGggZXh0ZXJuYWwgaW1wbGVtZW50YXRpb24uCit9CisKK19fV0VBSyB2b2lkIG5yZjVDcnlwdG9EZWluaXQodm9pZCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgd2VhayBzbyBpdCBjb3VsZCBiZSBvdmVycmlkZGVuIHdpdGggZXh0ZXJuYWwgaW1wbGVtZW50YXRpb24uCit9CisKK3ZvaWQgbnJmNU1pc2NJbml0KHZvaWQpCit7CisjaWYgU09GVERFVklDRV9QUkVTRU5UCisgICAgc2RfcG93ZXJfcmVzZXRfcmVhc29uX2dldCgmc1Jlc2V0UmVhc29uKTsKKyAgICBzZF9wb3dlcl9yZXNldF9yZWFzb25fY2xyKDB4RkZGRkZGRkYpOworI2Vsc2UKKyAgICBzUmVzZXRSZWFzb24gPSBOUkZfUE9XRVItPlJFU0VUUkVBUzsKKyAgICBOUkZfUE9XRVItPlJFU0VUUkVBUyA9IDB4RkZGRkZGRkY7CisjZW5kaWYgLy8gU09GVERFVklDRV9QUkVTRU5UIAorfQorCit2b2lkIG5yZjVNaXNjRGVpbml0KHZvaWQpCit7CisgICAgLy8gSW50ZW50aW9uYWxseSBlbXB0eS4KK30KKwordm9pZCBvdFBsYXRSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIE5WSUNfU3lzdGVtUmVzZXQoKTsKK30KKworb3RQbGF0UmVzZXRSZWFzb24gb3RQbGF0R2V0UmVzZXRSZWFzb24ob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBvdFBsYXRSZXNldFJlYXNvbiByZWFzb247CisKKyAgICBpZiAoc1Jlc2V0UmVhc29uICYgUE9XRVJfUkVTRVRSRUFTX1JFU0VUUElOX01zaykKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX0VYVEVSTkFMOworICAgIH0KKyAgICBlbHNlIGlmIChzUmVzZXRSZWFzb24gJiBQT1dFUl9SRVNFVFJFQVNfRE9HX01zaykKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX1dBVENIRE9HOworICAgIH0KKyAgICBlbHNlIGlmIChzUmVzZXRSZWFzb24gJiBQT1dFUl9SRVNFVFJFQVNfU1JFUV9Nc2spCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9TT0ZUV0FSRTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1Jlc2V0UmVhc29uICYgUE9XRVJfUkVTRVRSRUFTX0xPQ0tVUF9Nc2spCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9GQVVMVDsKKyAgICB9CisgICAgZWxzZSBpZiAoKHNSZXNldFJlYXNvbiAmIFBPV0VSX1JFU0VUUkVBU19PRkZfTXNrKSAgICB8fAorICAgICAgICAgICAgIChzUmVzZXRSZWFzb24gJiBQT1dFUl9SRVNFVFJFQVNfTFBDT01QX01zaykgfHwKKyAgICAgICAgICAgICAoc1Jlc2V0UmVhc29uICYgUE9XRVJfUkVTRVRSRUFTX0RJRl9Nc2spICAgIHx8CisgICAgICAgICAgICAgKHNSZXNldFJlYXNvbiAmIFBPV0VSX1JFU0VUUkVBU19ORkNfTXNrKSAgICB8fAorICAgICAgICAgICAgIChzUmVzZXRSZWFzb24gJiBQT1dFUl9SRVNFVFJFQVNfVkJVU19Nc2spKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fT1RIRVI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX1BPV0VSX09OOworICAgIH0KKworICAgIHJldHVybiByZWFzb247Cit9CisKK3ZvaWQgb3RQbGF0V2FrZUhvc3Qodm9pZCkKK3sKKyAgICAvLyBUT0RPOiBpbXBsZW1lbnQgYW4gb3BlcmF0aW9uIHRvIHdha2UgdGhlIGhvc3QgZnJvbSBzbGVlcCBzdGF0ZS4KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9ucmY1Mjg0MC5sZCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9ucmY1Mjg0MC5sZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzBmZmZmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL25yZjUyODQwLmxkCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIEdDQyBsaW5rZXIgc2NyaXB0IGZvciBuUkY1Mjg0MC4KKyAqLworCitTRUFSQ0hfRElSKC4pCitHUk9VUCgtbGdjYyAtbGMgLWxub3N5cykKKworTUVNT1JZCit7CisgIEZMQVNIIChyeCkgOiBPUklHSU4gPSAweDAwMDAwMDAwLCBMRU5HVEggPSAweDEwMDAwMAorICBSQU0gKHJ3eCkgOiAgT1JJR0lOID0gMHgyMDAwMDAwMCwgTEVOR1RIID0gMHg0MDAwMAorfQorCitPVVRQVVRfRk9STUFUICgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWJpZ2FybSIsICJlbGYzMi1saXR0bGVhcm0iKQorCitFTlRSWShSZXNldF9IYW5kbGVyKQorCitGTEFTSF9QQUdFX1NJWkUgICAgICAgPSA0MDk2OworRkxBU0hfREFUQV9QQUdFU19VU0VEID0gNDsKKworU0VDVElPTlMKK3sKKyAgICAudGV4dCA6CisgICAgeworICAgICAgICBLRUVQKCooLmlzcl92ZWN0b3IpKQorICAgICAgICAqKC50ZXh0KikKKworICAgICAgICBLRUVQKCooLmluaXQpKQorICAgICAgICBLRUVQKCooLmZpbmkpKQorCisgICAgICAgIC8qIC5jdG9ycyAqLworICAgICAgICAqY3J0YmVnaW4ubyguY3RvcnMpCisgICAgICAgICpjcnRiZWdpbj8ubyguY3RvcnMpCisgICAgICAgICooRVhDTFVERV9GSUxFKCpjcnRlbmQ/Lm8gKmNydGVuZC5vKSAuY3RvcnMpCisgICAgICAgICooU09SVCguY3RvcnMuKikpCisgICAgICAgICooLmN0b3JzKQorCisgICAgICAgIC8qIC5kdG9ycyAqLworICAgICAgICAqY3J0YmVnaW4ubyguZHRvcnMpCisgICAgICAgICpjcnRiZWdpbj8ubyguZHRvcnMpCisgICAgICAgICooRVhDTFVERV9GSUxFKCpjcnRlbmQ/Lm8gKmNydGVuZC5vKSAuZHRvcnMpCisgICAgICAgICooU09SVCguZHRvcnMuKikpCisgICAgICAgICooLmR0b3JzKQorCisgICAgICAgICooLnJvZGF0YSopCisKKyAgICAgICAgS0VFUCgqKC5laF9mcmFtZSopKQorICAgIH0gPiBGTEFTSAorCisgICAgLkFSTS5leHRhYiA6CisgICAgeworICAgICAgICAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikKKyAgICB9ID4gRkxBU0gKKworICAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAgIC5BUk0uZXhpZHggOgorICAgIHsKKyAgICAgICAgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopCisgICAgfSA+IEZMQVNICisgICAgX19leGlkeF9lbmQgPSAuOworCisgICAgX19ldGV4dCA9IC47CisKKyAgICBucmZfcmFkaW9fYnVmZmVyIChOT0xPQUQpOgorICAgIHsKKyAgICAgICAgX19ucmZfcmFkaW9fYnVmZmVyX3N0YXJ0X18gPSAuOworICAgICAgICAqKG5yZl9yYWRpb19idWZmZXIqKQorICAgICAgICBfX25yZl9yYWRpb19idWZmZXJfZW5kX18gPSAuOworICAgIH0gPiBSQU0KKworICAgIC5kYXRhIDogQVQgKF9fZXRleHQpCisgICAgeworICAgICAgICBfX2RhdGFfc3RhcnRfXyA9IC47CisgICAgICAgICoodnRhYmxlKQorICAgICAgICAqKC5kYXRhKikKKworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIC8qIHByZWluaXQgZGF0YSAqLworICAgICAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgICAgIEtFRVAoKigucHJlaW5pdF9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBpbml0IGRhdGEgKi8KKyAgICAgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgICAgICBLRUVQKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgICAgIEtFRVAoKiguaW5pdF9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisKKworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIC8qIGZpbml0IGRhdGEgKi8KKyAgICAgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgICAgICBLRUVQKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgICAgIEtFRVAoKiguZmluaV9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisKKyAgICAgICAgS0VFUCgqKC5qY3IqKSkKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBBbGwgZGF0YSBlbmQgKi8KKyAgICAgICAgX19kYXRhX2VuZF9fID0gLjsKKworICAgIH0gPiBSQU0KKworICAgIC5ic3MgOgorICAgIHsKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICBfX2Jzc19zdGFydF9fID0gLjsKKyAgICAgICAgKiguYnNzKikKKyAgICAgICAgKihDT01NT04pCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX19ic3NfZW5kX18gPSAuOworICAgIH0gPiBSQU0KKworICAgIC5oZWFwIChDT1BZKToKKyAgICB7CisgICAgICAgIF9fSGVhcEJhc2UgPSAuOworICAgICAgICBfX2VuZF9fID0gLjsKKyAgICAgICAgUFJPVklERShlbmQgPSAuKTsKKyAgICAgICAgS0VFUCgqKC5oZWFwKikpCisgICAgICAgIF9fSGVhcExpbWl0ID0gLjsKKyAgICB9ID4gUkFNCisKKyAgICAvKiAuc3RhY2tfZHVtbXkgc2VjdGlvbiBkb2Vzbid0IGNvbnRhaW5zIGFueSBzeW1ib2xzLiBJdCBpcyBvbmx5CisgICAgICogdXNlZCBmb3IgbGlua2VyIHRvIGNhbGN1bGF0ZSBzaXplIG9mIHN0YWNrIHNlY3Rpb25zLCBhbmQgYXNzaWduCisgICAgICogdmFsdWVzIHRvIHN0YWNrIHN5bWJvbHMgbGF0ZXIgKi8KKyAgICAuc3RhY2tfZHVtbXkgKENPUFkpOgorICAgIHsKKyAgICAgICAgS0VFUCgqKC5zdGFjayopKQorICAgIH0gPiBSQU0KKworICAgIF9fZmxhc2hfZGF0YV9lbmQgPSAoT1JJR0lOKEZMQVNIKSArIExFTkdUSChGTEFTSCkpOworICAgIF9fZmxhc2hfZGF0YV9zdGFydCA9IChfX2ZsYXNoX2RhdGFfZW5kIC0gKEZMQVNIX1BBR0VfU0laRSAqIEZMQVNIX0RBVEFfUEFHRVNfVVNFRCkpOworCisgICAgLyogQXNzdXJlIHRoYXQgY29kZSBkb2VzIG5vdCBvdmVybGFwIGZsYXNoIGRhdGEgYXJlYS4qLworICAgIEFTU0VSVCgoX19mbGFzaF9kYXRhX3N0YXJ0ID49IF9fZXRleHQgKyBTSVpFT0YoLmRhdGEpKSwgIkVycm9yOiBDb2RlIG92ZXJsYXBzIGZsYXNoIGRhdGEgYXJlYS4iKQorCisgICAgLyogU2V0IHN0YWNrIHRvcCB0byBlbmQgb2YgUkFNLCBhbmQgc3RhY2sgbGltaXQgbW92ZSBkb3duIGJ5CisgICAgICogc2l6ZSBvZiBzdGFja19kdW1teSBzZWN0aW9uICovCisgICAgX19TdGFja1RvcCA9IE9SSUdJTihSQU0pICsgTEVOR1RIKFJBTSk7CisgICAgX19TdGFja0xpbWl0ID0gX19TdGFja1RvcCAtIFNJWkVPRiguc3RhY2tfZHVtbXkpOworICAgIFBST1ZJREUoX19zdGFjayA9IF9fU3RhY2tUb3ApOworCisgICAgLyogQ2hlY2sgaWYgZGF0YSArIGhlYXAgKyBzdGFjayBleGNlZWRzIFJBTSBsaW1pdCAqLworICAgIEFTU0VSVChfX1N0YWNrTGltaXQgPj0gX19IZWFwTGltaXQsICJyZWdpb24gUkFNIG92ZXJmbG93ZWQgd2l0aCBzdGFjayIpCit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvb3BlbnRocmVhZC1jb3JlLW5yZjUyODQwLWNvbmZpZy5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL29wZW50aHJlYWQtY29yZS1ucmY1Mjg0MC1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzMwNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL29wZW50aHJlYWQtY29yZS1ucmY1Mjg0MC1jb25maWcuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgbnJmNTI4NDAgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzCisgKiAgIGZvciBPcGVuVGhyZWFkLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9DT1JFX05SRjUyODQwX0NPTkZJR19IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPUkVfTlJGNTI4NDBfQ09ORklHX0hfCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTCisgKgorICogVGhlIG51bWJlciBvZiBtZXNzYWdlIGJ1ZmZlcnMgaW4gdGhlIGJ1ZmZlciBwb29sLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTICAgICAgICAgICAgICAgICAgIDEyOAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX1NUQVRFQ0hBTkdFX0hBTkRMRVJTCisgKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YXRlLWNoYW5nZWQgY2FsbGJhY2sgaGFuZGxlcnMgKHNldCB1c2luZyBgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjaygpYCkuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BWF9TVEFURUNIQU5HRV9IQU5ETEVSUyAgICAgICAgICAgICAgMworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfQUREUkVTU19DQUNIRV9FTlRSSUVTCisgKgorICogVGhlIG51bWJlciBvZiBFSUQtdG8tUkxPQyBjYWNoZSBlbnRyaWVzLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19BRERSRVNTX0NBQ0hFX0VOVFJJRVMgICAgICAgICAgICAgICAgIDIwCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUFJFTkRfTEVWRUwKKyAqCisgKiBEZWZpbmUgdG8gcHJlcGVuZCB0aGUgbG9nIGxldmVsIHRvIGFsbCBsb2cgbWVzc2FnZXMKKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfTEVWRUwgICAgICAgICAgICAgICAgICAgICAwCisKKyAvKioKKyAgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVAorICAqCisgICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIEFDSyB0aW1lb3V0IGxvZ2ljLgorICAqCisgICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVCAgICAgICAgICAgMQorCisgLyoqCisgICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVAorICAqCisgICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIHJldHJhbnNtaXNzaW9uIGxvZ2ljLgorICAqCisgICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUICAgICAgICAgICAgMQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorICoKKyAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBtaWNyb3NlY29uZCBiYWNrb2ZmIHRpbWVyIGltcGxlbWVudGVkIGluIHBsYXRmb3JtLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfUExBVEZPUk1fVVNFQ19CQUNLT0ZGX1RJTUVSICAgICAxCisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTCisgKgorICogVGhlIGJhc2UgYWRkcmVzcyBvZiBzZXR0aW5ncy4KKyAqCisgKi8KKyNkZWZpbmUgU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFCisgKgorICogVGhlIHBhZ2Ugc2l6ZSBvZiBzZXR0aW5ncy4KKyAqCisgKi8KKyNkZWZpbmUgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDk2CisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0KKyAqCisgKiBUaGUgcGFnZSBudW1iZXIgb2Ygc2V0dGluZ3MuCisgKgorICovCisjZGVmaW5lIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUJFRFRMU19IRUFQX1NJWkUKKyAqCisgKiBUaGUgc2l6ZSBvZiBtYmVkVExTIGhlYXAgYnVmZmVyIHdoZW4gRFRMUyBpcyBlbmFibGVkLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQkVEVExTX0hFQVBfU0laRSAgICAgICAgICAgICAgICAgICAgICg0MDk2ICogc2l6ZW9mKHZvaWQgKikpCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQkVEVExTX0hFQVBfU0laRV9OT19EVExTCisgKgorICogVGhlIHNpemUgb2YgbWJlZFRMUyBoZWFwIGJ1ZmZlciB3aGVuIERUTFMgaXMgZGlzYWJsZWQuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01CRURUTFNfSEVBUF9TSVpFX05PX0RUTFMgICAgICAgICAgICAgMjA0OAorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09SRV9OUkY1Mjg0MF9DT05GSUdfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9wbGF0Zm9ybS1jb25maWcuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9wbGF0Zm9ybS1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjY4MjQxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3BsYXRmb3JtLWNvbmZpZy5oCkBAIC0wLDAgKzEsMzQwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9DT05GSUdfSF8KKyNkZWZpbmUgUExBVEZPUk1fQ09ORklHX0hfCisKKyNpbmNsdWRlICJkZXZpY2UvbnJmLmgiCisjaW5jbHVkZSAiaGFsL25yZl91YXJ0LmgiCisjaW5jbHVkZSAiaGFsL25yZl9wZXJpcGhlcmFscy5oIgorI2luY2x1ZGUgImhhbC9ucmZfcmFkaW8uaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBVQVJUIERyaXZlciBDb25maWd1cmF0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAZGVmIFVBUlRfSU5TVEFOQ0UKKyAqCisgKiBVQVJUIEluc3RhbmNlLgorICoKKyAqLworI2RlZmluZSBVQVJUX0lOU1RBTkNFICBOUkZfVUFSVDAKKworLyoqCisgKiBAZGVmIFVBUlRfUEFSSVRZCisgKgorICogVUFSVCBQYXJpdHkgY29uZmlndXJhdGlvbi4KKyAqCisgKiBAYnJpZWYgUG9zc2libGUgdmFsdWVzOgorICogICAgICAgICBccmVmIE5SRl9VQVJUX1BBUklUWV9FWENMVURFRCAtIFBhcml0eSBiaXQgaXMgbm90IHByZXNlbnQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfUEFSSVRZX0lOQ0xVREVEIC0gUGFyaXR5IGJpdCBpcyBwcmVzZW50LgorICoKKyAqLworI2RlZmluZSBVQVJUX1BBUklUWSAgTlJGX1VBUlRfUEFSSVRZX0VYQ0xVREVECisKKy8qKgorICogQGRlZiBVQVJUX0hXRkMKKyAqCisgKiBVQVJUIEhhcmR3YXJlIEZsb3cgQ29udHJvbC4KKyAqCisgKiBAYnJpZWYgUG9zc2libGUgdmFsdWVzOgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0hXRkNfRU5BQkxFRCAtIEhXIEZsb3cgY29udHJvbCBlbmFibGVkLgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0hXRkNfRElTQUJMRUQgLSBIVyBGbG93IGNvbnRyb2wgZGlzYWJsZWQuCisgKgorICovCisjZGVmaW5lIFVBUlRfSFdGQyAgTlJGX1VBUlRfSFdGQ19FTkFCTEVECisKKy8qKgorICogQGRlZiBVQVJUX0JBVURSQVRFCisgKgorICogVUFSVCBCYXVkcmF0ZS4KKyAqCisgKiBAYnJpZWYgUG9zc2libGUgdmFsdWVzOgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0JBVURSQVRFXzEyMDAgLSAxMjAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMjQwMCAtIDI0MDAgYmF1ZC4KKyAqICAgICAgICAgXHJlZiBOUkZfVUFSVF9CQVVEUkFURV80ODAwIC0gNDgwMCBiYXVkLgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0JBVURSQVRFXzk2MDAgLSA5NjAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMTQ0MDAgLSAxNDQwMCBiYXVkLgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0JBVURSQVRFXzE5MjAwIC0gMTkyMDAgYmF1ZC4KKyAqICAgICAgICAgXHJlZiBOUkZfVUFSVF9CQVVEUkFURV8yODgwMCAtIDI4ODAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMzg0MDAgLSAzODQwMCBiYXVkLgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0JBVURSQVRFXzU3NjAwIC0gNTc2MDAgYmF1ZC4KKyAqICAgICAgICAgXHJlZiBOUkZfVUFSVF9CQVVEUkFURV83NjgwMCAtIDc2ODAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMTE1MjAwIC0gMTE1MjAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMjMwNDAwIC0gMjMwNDAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMjUwMDAwIC0gMjUwMDAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfNDYwODAwIC0gNDYwODAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfOTIxNjAwIC0gOTIxNjAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMTAwMDAwMCAtIDEwMDAwMDAgYmF1ZC4KKyAqCisgKi8KKyNkZWZpbmUgVUFSVF9CQVVEUkFURSAgTlJGX1VBUlRfQkFVRFJBVEVfMTE1MjAwCisKKy8qKgorICogIEBkZWYgVUFSVF9JUlFOCisgKgorICogVUFSVCBJbnRlcnJ1cHQgbnVtYmVyLgorICoKKyAqLworI2RlZmluZSBVQVJUX0lSUU4gIFVBUlRFMF9VQVJUMF9JUlFuCisKKy8qKgorICogQGRlZiBVQVJUX0lSUV9QUklPUklUWQorICoKKyAqIFVBUlQgSW50ZXJydXB0IHByaW9yaXR5LgorICoKKyAqLworI2RlZmluZSBVQVJUX0lSUV9QUklPUklUWSAgNgorCisvKioKKyAqIEBkZWYgVUFSVF9SWF9CVUZGRVJfU0laRQorICoKKyAqIFVBUlQgUmVjZWl2ZSBidWZmZXIgc2l6ZS4KKyAqCisgKi8KKyNkZWZpbmUgVUFSVF9SWF9CVUZGRVJfU0laRSAgMjU2CisKKy8qKgorICogQGRlZiBVQVJUX1BJTl9UWAorICoKKyAqIFVBUlQgVFggUGluLgorICoKKyAqLworI2RlZmluZSBVQVJUX1BJTl9UWCAgNgorCisvKioKKyAqIEBkZWYgVUFSVF9QSU5fUlgKKyAqCisgKiBVQVJUIFJYIFBpbi4KKyAqCisgKi8KKyNkZWZpbmUgVUFSVF9QSU5fUlggIDgKKworLyoqCisgKiBAZGVmIFVBUlRfUElOX0NUUworICoKKyAqIFVBUlQgQ1RTIFBpbi4KKyAqCisgKi8KKyNkZWZpbmUgVUFSVF9QSU5fQ1RTICA3CisKKy8qKgorICogQGRlZiBVQVJUX1BJTl9SVFMKKyAqCisgKiBVQVJUIFJUUyBQaW4uCisgKgorICovCisjZGVmaW5lIFVBUlRfUElOX1JUUyAgNQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gQWxhcm0gRHJpdmVyIENvbmZpZ3VyYXRpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEBkZWYgUlRDX0lOU1RBTkNFCisgKgorICogUlRDIEluc3RhbmNlLgorICoKKyAqLworI2RlZmluZSBSVENfSU5TVEFOQ0UgIE5SRl9SVEMyCisKKy8qKgorICogQGRlZiBSVENfSVJRX0hBTkRMRVIKKyAqCisgKiBSVEMgaW50ZXJydXB0IGhhbmRsZXIgbmFtZQorICoKKyAqLworI2RlZmluZSBSVENfSVJRX0hBTkRMRVIgIFJUQzJfSVJRSGFuZGxlcgorCisvKioKKyAqIEBkZWYgUlRDX0lSUU4KKyAqCisgKiBSVEMgSW50ZXJydXB0IG51bWJlci4KKyAqCisgKi8KKyNkZWZpbmUgUlRDX0lSUU4gIFJUQzJfSVJRbgorCisvKioKKyAqIEBkZWYgUlRDX0lSUV9QUklPUklUWQorICoKKyAqIFJUQyBJbnRlcnJ1cHQgcHJpb3JpdHkuCisgKgorICovCisjZGVmaW5lIFJUQ19JUlFfUFJJT1JJVFkgIDYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIERyaXZlciBDb25maWd1cmF0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAZGVmIFJOR19CVUZGRVJfU0laRQorICoKKyAqIFRydWUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgYnVmZmVyIHNpemUuCisgKgorICovCisjZGVmaW5lIFJOR19CVUZGRVJfU0laRSAgNjQKKworLyoqCisgKiBAZGVmIFJOR19JUlFfUFJJT1JJVFkKKyAqCisgKiBSTkcgSW50ZXJydXB0IHByaW9yaXR5LgorICoKKyAqLworI2RlZmluZSBSTkdfSVJRX1BSSU9SSVRZICA2CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBMb2cgbW9kdWxlIGNvbmZpZ3VyYXRpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEBkZWYgTE9HX1JUVF9CVUZGRVJfSU5ERVgKKyAqCisgKiBSVFQncyBidWZmZXIgaW5kZXguCisgKgorICovCisjZGVmaW5lIExPR19SVFRfQlVGRkVSX0lOREVYICAwCisKKy8qKgorICogQGRlZiBMT0dfUlRUX0JVRkZFUl9OQU1FCisgKgorICogUlRUJ3MgbmFtZS4KKyAqCisgKi8KKyNkZWZpbmUgTE9HX1JUVF9CVUZGRVJfTkFNRSAgIlRlcm1pbmFsIgorCisvKioKKyAqIEBkZWYgTE9HX1JUVF9CVUZGRVJfU0laRQorICoKKyAqIExPRyBSVFQncyBidWZmZXIgc2l6ZS4KKyAqCisgKi8KKyNkZWZpbmUgTE9HX1JUVF9CVUZGRVJfU0laRSAgMjU2CisKKy8qKgorICogQGRlZiBMT0dfUlRUX0NPTE9SX0VOQUJMRQorICoKKyAqIEVuYWJsZSBjb2xvcnMgb24gUlRUIFZpZXdlci4KKyAqCisgKi8KKyNkZWZpbmUgTE9HX1JUVF9DT0xPUl9FTkFCTEUgIDEKKworLyoqCisgKiBAZGVmIExPR19QQVJTRV9CVUZGRVJfU0laRQorICoKKyAqIExPRyBidWZmZXIgdXNlZCB0byBwYXJzZSBwcmludCBmb3JtYXQuIEl0IHdpbGwgYmUgbG9jYWxseSBhbGxvY2F0ZWQgb24gdGhlCisgKiBzdGFjay4KKyAqCisgKi8KKyNkZWZpbmUgTE9HX1BBUlNFX0JVRkZFUl9TSVpFICAxMjgKKworLyoqCisgKiBAZGVmIExPR19USU1FU1RBTVBfRU5BQkxFCisgKgorICogRW5hYmxlIHRpbWVzdGFtcCBpbiB0aGUgbG9ncy4KKyAqCisgKi8KKyNkZWZpbmUgTE9HX1RJTUVTVEFNUF9FTkFCTEUgIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIFJhZGlvIERyaXZlciBDb25maWd1cmF0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAZGVmIFJBRElPX0NDQV9NT0RFCisgKgorICogUkFESU8gQ0NBIE1vZGUuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NDQV9NT0RFICBOUkZfUkFESU9fQ0NBX01PREVfRUQKKworLyoqCisgKiBAZGVmIFJBRElPX0NDQV9FRF9USFJFU0hPTEQKKyAqCisgKiBSQURJTyBFbmVyZ3kgRGV0ZWN0aW9uIFRocmVzaG9sZC4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fQ0NBX0VEX1RIUkVTSE9MRCAgMHgyRAorCisvKioKKyAqIEBkZWYgUkFESU9fQ0NBX0NPUlJfVEhSRVNIT0xECisgKgorICogUkFESU8gQ29ycmVsYXRvciBUaHJlc2hvbGQuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NDQV9DT1JSX1RIUkVTSE9MRCAgMHgyRAorCisvKioKKyAqIEBkZWYgUkFESU9fQ0NBX0NPUlJfTElNSVQKKyAqCisgKiBSQURJTyBDb3JyZWxhdG9yIGxpbWl0LgorICoKKyAqLworI2RlZmluZSBSQURJT19DQ0FfQ09SUl9MSU1JVCAgMHgwMgorCisvKioKKyAqIEBkZWYgUkFESU9fSVJRX1BSSU9SSVRZCisgKgorICogUkFESU8gSW50ZXJydXB0IHByaW9yaXR5LgorICoKKyAqLworI2RlZmluZSBSQURJT19JUlFfUFJJT1JJVFkgIDAKKworLyoqCisgKiBAZGVmIFJBRElPX1BFTkRJTkdfU0hPUlRfQUREUkVTU0VTCisgKgorICogUkFESU8gTnVtYmVyIG9mIHNsb3RzIGNvbnRhaW5pbmcgc2hvcnQgYWRkcmVzc2VzIG9mIG5vZGVzIGZvciB3aGljaCBwZW5kaW5nIGRhdGEgaXMgc3RvcmVkLgorICoKKyAqLworI2RlZmluZSBSQURJT19QRU5ESU5HX1NIT1JUX0FERFJFU1NFUyAgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0NISUxEUkVOCisKKy8qKgorICogQGRlZiBSQURJT19QRU5ESU5HX0VYVEVOREVEX0FERFJFU1NFUworICoKKyAqIFJBRElPIE51bWJlciBvZiBzbG90cyBjb250YWluaW5nIGV4dGVuZGVkIGFkZHJlc3NlcyBvZiBub2RlcyBmb3Igd2hpY2ggcGVuZGluZyBkYXRhIGlzIHN0b3JlZC4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fUEVORElOR19FWFRFTkRFRF9BRERSRVNTRVMgIE9QRU5USFJFQURfQ09ORklHX01BWF9DSElMRFJFTgorCisvKioKKyAqIEBkZWYgUkFESU9fUlhfQlVGRkVSUworICoKKyAqIFJBRElPIE51bWJlciBvZiBidWZmZXJzIGluIHJlY2VpdmUgcXVldWUuCisgKgorICovCisjZGVmaW5lIFJBRElPX1JYX0JVRkZFUlMgIDE2CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fQ09ORklHX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcGxhdGZvcm0tbnJmNS5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3BsYXRmb3JtLW5yZjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjZmZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3BsYXRmb3JtLW5yZjUuaApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVycy4KKyAqCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9OUkY1X0hfCisjZGVmaW5lIFBMQVRGT1JNX05SRjVfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tY29uZmlnLmgiCisKKy8qKgorICogSW5pdGlhbGl6YXRpb24gb2YgVUFSVCBkcml2ZXIuCisgKgorICovCit2b2lkIG5yZjVVYXJ0SW5pdCh2b2lkKTsKKworLyoqCisgKiBEZWluaXRpYWxpemF0aW9uIG9mIFVBUlQgZHJpdmVyLgorICoKKyAqLwordm9pZCBucmY1VWFydERlaW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIFVBUlQgZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICovCit2b2lkIG5yZjVVYXJ0UHJvY2Vzcyh2b2lkKTsKKworLyoqCisgKiBJbml0aWFsaXphdGlvbiBvZiBBbGFybSBkcml2ZXIuCisgKgorICovCit2b2lkIG5yZjVBbGFybUluaXQodm9pZCk7CisKKy8qKgorICogRGVpbml0aWFsaXphdGlvbiBvZiBBbGFybSBkcml2ZXIuCisgKgorICovCit2b2lkIG5yZjVBbGFybURlaW5pdCh2b2lkKTsKKworLyoqCisgKiBGdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBBbGFybS4KKyAqCisgKi8KK3ZvaWQgbnJmNUFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEluaXRpYWxpemF0aW9uIG9mIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yLgorICoKKyAqLwordm9pZCBucmY1UmFuZG9tSW5pdCh2b2lkKTsKKworLyoqCisgKiBEZWluaXRpYWxpemF0aW9uIG9mIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yLgorICoKKyAqLwordm9pZCBucmY1UmFuZG9tRGVpbml0KHZvaWQpOworCisvKioKKyAqIEluaXRpYWxpemF0aW9uIG9mIExvZ2dlciBkcml2ZXIuCisgKgorICovCit2b2lkIG5yZjVMb2dJbml0KHZvaWQpOworCisvKioKKyAqIERlaW5pdGlhbGl6YXRpb24gb2YgTG9nZ2VyIGRyaXZlci4KKyAqCisgKi8KK3ZvaWQgbnJmNUxvZ0RlaW5pdCh2b2lkKTsKKworLyoqCisgKiBJbml0aWFsaXphdGlvbiBvZiBNaXNjIG1vZHVsZS4KKyAqCisgKi8KK3ZvaWQgbnJmNU1pc2NJbml0KHZvaWQpOworCisvKioKKyAqIERlaW5pdGlhbGl6YXRpb24gb2YgTWlzYyBtb2R1bGUuCisgKgorICovCit2b2lkIG5yZjVNaXNjRGVpbml0KHZvaWQpOworCisvKioKKyAqIEluaXRpYWxpemF0aW9uIG9mIFJhZGlvIGRyaXZlci4KKyAqCisgKi8KK3ZvaWQgbnJmNVJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBEZWluaXRpYWxpemF0aW9uIG9mIFJhZGlvIGRyaXZlci4KKyAqCisgKi8KK3ZvaWQgbnJmNVJhZGlvRGVpbml0KHZvaWQpOworCisvKioKKyAqIEZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIFJhZGlvLgorICoKKyAqLwordm9pZCBucmY1UmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogSW5pdGlhbGl6YXRpb24gb2YgaGFyZHdhcmUgY3J5cHRvIGVuZ2luZS4KKyAqCisgKi8KK3ZvaWQgbnJmNUNyeXB0b0luaXQodm9pZCk7CisKKy8qKgorICogRGVpbml0aWFsaXphdGlvbiBvZiBoYXJkd2FyZSBjcnlwdG8gZW5naW5lLgorICoKKyAqLwordm9pZCBucmY1Q3J5cHRvRGVpbml0KHZvaWQpOworCisvKioKKyAqIEZ1bmN0aW9uIGZvciBlcmFzaW5nIHBhZ2UgaW4gZmxhc2guCisgKgorICovCitvdEVycm9yIG5yZjVGbGFzaFBhZ2VFcmFzZSh1aW50MzJfdCBhQWRkcmVzcyk7CisKKy8qKgorICogRnVuY3Rpb24gZm9yIGNoZWNraW5nIHN0YXRlIG9mIGZsYXNoIGRyaXZlci4KKyAqCisgKi8KK2Jvb2wgbnJmNUZsYXNoSXNCdXN5KHZvaWQpOworCisvKioKKyAqIEZ1bmN0aW9uIGZvciB3cml0aW5nIGRhdGEgaW50byBmbGFzaC4KKyAqCisgKi8KK3VpbnQzMl90IG5yZjVGbGFzaFdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpOworCisjaWYgU09GVERFVklDRV9QUkVTRU5UCisvKioKKyAqIEZ1bmN0aW9uIGZvciB0cmFuc2xhdGluZyBTb2Z0RGV2aWNlIGVycm9yIGludG8gT3BlblRocmVhZCdzIG9uZS4KKyAqCisgKi8KK290RXJyb3IgbnJmNVNkRXJyb3JUb090RXJyb3IodWludDMyX3QgYVNkRXJyb3IpOworCisvKioKKyAqIEZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIFNvZnREZXZpY2UgU29DIGV2ZW50cyBpbiBmbGFzaCBtb2R1bGUuCisgKgorICovCit2b2lkIG5yZjVTZFNvY0ZsYXNoUHJvY2Vzcyh1aW50MzJfdCBhRXZ0SWQpOworI2VuZGlmIC8vIFNPRlRERVZJQ0VfUFJFU0VOVAorCisjZW5kaWYgIC8vIFBMQVRGT1JNX05SRjVfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9wbGF0Zm9ybS1zb2Z0ZGV2aWNlLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcGxhdGZvcm0tc29mdGRldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MDE3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcGxhdGZvcm0tc29mdGRldmljZS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBTb2Z0RGV2aWNlIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucy4KKyAqCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9TT0ZUREVWSUNFX0hfCisjZGVmaW5lIFBMQVRGT1JNX1NPRlRERVZJQ0VfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKiogQGJyaWVmIFJBQUwgU29mdGRldmljZSBkZWZhdWx0IHBhcmFtZXRlcnMuICovCisjZGVmaW5lIFBMQVRGT1JNX1NPRlRERVZJQ0VfUkFBTF9USU1FU0xPVF9ERUZBVUxUX0xFTkdUSCAgICAgICA2NDAwCisjZGVmaW5lIFBMQVRGT1JNX1NPRlRERVZJQ0VfUkFBTF9USU1FU0xPVF9ERUZBVUxUX0FMTE9DX0lURVJTICA1CisjZGVmaW5lIFBMQVRGT1JNX1NPRlRERVZJQ0VfUkFBTF9USU1FU0xPVF9ERUZBVUxUX1NBRkVfTUFSR0lOICA5MQorI2RlZmluZSBQTEFURk9STV9TT0ZUREVWSUNFX1JBQUxfVElNRVNMT1RfREVGQVVMVF9USU1FT1VUICAgICAgMTAwMDAwCisjZGVmaW5lIFBMQVRGT1JNX1NPRlRERVZJQ0VfUkFBTF9USU1FU0xPVF9ERUZBVUxUX01BWF9MRU5HVEggICAxMjAwMDAwMDAKKyNkZWZpbmUgUExBVEZPUk1fU09GVERFVklDRV9SQUFMX0RFRkFVTFRfTEZfQ0xLX0FDQ1VSQUNZX1BQTSAgIDI1CisKKy8qKiBAYnJpZWYgUkFBTCBTb2Z0ZGV2aWNlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgdGltZXNsb3RMZW5ndGg7ICAgICAvKio8IFRpbWVzbG90IGxlbmd0aCByZXF1ZXN0ZWQgYnkgdGhlIG1vZHVsZSBpbiBtaWNyb3NlY29uZHMuICovCisgICAgdWludDMyX3QgdGltZXNsb3RUaW1lb3V0OyAgICAvKio8IExvbmdlc3QgYWNjZXB0YWJsZSBkZWxheSB1bnRpbCB0aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3RlZCB0aW1lc2xvdCBpbiBtaWNyb3NlY29uZHMuICovCisgICAgdWludDMyX3QgdGltZXNsb3RNYXhMZW5ndGg7ICAvKio8IE1heGltdW0gc2luZ2xlIHRpbWVzbG90IGxlbmd0aCBjcmVhdGVkIGJ5IGV4dGVuc2lvbiBwcm9jZXNzaW5nIGluIG1pY3Jvc2Vjb25kcy4gKi8KKyAgICB1aW50MTZfdCB0aW1lc2xvdEFsbG9jSXRlcnM7IC8qKjwgTWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9uIG9mIGRpdmlkaW5nIHRpbWVzbG90X2xlbmd0aCBieSBmYWN0b3Igb2YgMiBwZXJmb3JtZWQgYnkgYXJiaXRlci4gKi8KKyAgICB1aW50MTZfdCB0aW1lc2xvdFNhZmVNYXJnaW47IC8qKjwgU2FmZSBtYXJnaW4gYmVmb3JlIHRpbWVzbG90IGlzIGZpbmlzaGVkIGFuZCBucmZfcmFhbF90aW1lc2xvdF9lbmRlZCBzaG91bGQgYmUgY2FsbGVkIGluIG1pY3Jvc2Vjb25kcy4gKi8KKyAgICB1aW50MTZfdCBsZkNsa0FjY3VyYWN5UHBtOyAgIC8qKjwgQ2xvY2sgYWNjdXJhY3kgaW4gcHBtIHVuaXQuICovCit9IFBsYXRmb3JtU29mdGRldmljZVJhYWxDb25maWdQYXJhbXM7CisKKy8qKgorICogRnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgU29mdERldmljZSBTb0MgZXZlbnRzLgorICoKKyAqLwordm9pZCBQbGF0Zm9ybVNvZnRkZXZpY2VTb2NFdnRIYW5kbGVyKHVpbnQzMl90IGFFdnRJZCk7CisKKy8qKgorICogRnVuY3Rpb24gdXNlZCB0byBzZXQgbm9uLWRlZmF1bHQgcGFyYW1ldGVycyBvZiBTb2Z0ZGV2aWNlIFJBQUwuCisgKgorICovCit2b2lkIFBsYXRmb3JtU29mdGRldmljZVJhYWxDb25maWcoY29uc3QgUGxhdGZvcm1Tb2Z0ZGV2aWNlUmFhbENvbmZpZ1BhcmFtcyAqYUNvbmZpZyk7CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fU09GVERFVklDRV9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3BsYXRmb3JtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjViYTQxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVycy4KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oPgorCisjaW5jbHVkZSA8ZHJpdmVycy9jbG9jay9ucmZfZHJ2X2Nsb2NrLmg+CisjaW5jbHVkZSAicGxhdGZvcm0tbnJmNS5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKwordm9pZCBfX2N4YV9wdXJlX3ZpcnR1YWwodm9pZCkgeyB3aGlsZSAoMSk7IH0KKwordm9pZCBQbGF0Zm9ybUluaXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICAodm9pZClhcmdjOworICAgICh2b2lkKWFyZ3Y7CisKKyAgICBucmZfZHJ2X2Nsb2NrX2luaXQoKTsKKworI2lmIChPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUID09IDApCisgICAgbnJmNUxvZ0luaXQoKTsKKyNlbmRpZgorICAgIG5yZjVBbGFybUluaXQoKTsKKyAgICBucmY1UmFuZG9tSW5pdCgpOworICAgIG5yZjVVYXJ0SW5pdCgpOworICAgIG5yZjVNaXNjSW5pdCgpOworICAgIG5yZjVDcnlwdG9Jbml0KCk7CisgICAgbnJmNVJhZGlvSW5pdCgpOworfQorCit2b2lkIFBsYXRmb3JtRGVpbml0KHZvaWQpCit7CisgICAgbnJmNVJhZGlvRGVpbml0KCk7CisgICAgbnJmNUNyeXB0b0RlaW5pdCgpOworICAgIG5yZjVNaXNjRGVpbml0KCk7CisgICAgbnJmNVVhcnREZWluaXQoKTsKKyAgICBucmY1UmFuZG9tRGVpbml0KCk7CisgICAgbnJmNUFsYXJtRGVpbml0KCk7CisjaWYgKE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQgPT0gMCkKKyAgICBucmY1TG9nRGVpbml0KCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF0Zm9ybVByb2Nlc3NEcml2ZXJzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBucmY1QWxhcm1Qcm9jZXNzKGFJbnN0YW5jZSk7CisgICAgbnJmNVJhZGlvUHJvY2VzcyhhSW5zdGFuY2UpOworICAgIG5yZjVVYXJ0UHJvY2VzcygpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3JhZGlvLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTMxMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3JhZGlvLmMKQEAgLTAsMCArMSw2NTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHJhZGlvIGNvbW11bmljYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorLy8gTlJGIHRvb2xzIHVzZSAjZGVmaW5lIFBBQ0tBR0UgLSBmb3Igb3RoZXIgcHVycG9zZXMKKy8vIGllOiB0aGUgcGh5c2ljYWwgcGFja2FnZSB0aGUgY2hpcCBjb21lcyBpbgorLy8gVGhpcyBjb25mbGljdHMgd2l0aCB0aGUgR05VIEF1dG9jb25mICJQQUNBS0dFIiBkZWZpbmUKKyN1bmRlZiBQQUNLQUdFCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxjb21tb24vY29kZV91dGlscy5ocHA+CisjaW5jbHVkZSA8cGxhdGZvcm0tY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oPgorCisjaW5jbHVkZSA8ZGV2aWNlL25yZi5oPgorI2luY2x1ZGUgPG5yZl9kcnZfcmFkaW84MDIxNTQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQtY29yZS1jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2RlZmluZSBTSE9SVF9BRERSRVNTX1NJWkUgICAgMgorI2RlZmluZSBFWFRFTkRFRF9BRERSRVNTX1NJWkUgOAorI2RlZmluZSBQRU5ESU5HX0JJVCAgICAgICAgICAgMHgxMAorCitlbnVtCit7CisgICAgTlJGNTI4NDBfUkVDRUlWRV9TRU5TSVRJVklUWSA9IC0xMDAsICAvLyBkQm0KK307CisKK3N0YXRpYyBib29sIHNEaXNhYmxlZDsKKworc3RhdGljIG90UmFkaW9GcmFtZSBzUmVjZWl2ZWRGcmFtZXNbUkFESU9fUlhfQlVGRkVSU107CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNUcmFuc21pdEZyYW1lOworCisjaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKworc3RhdGljIHVpbnQ4X3QgICAgICBzVHJhbnNtaXRQc2R1W09UX1JBRElPX0ZSQU1FX01BWF9TSVpFICsgMV0KK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIm5yZl9yYWRpb19idWZmZXIuc1RyYW5zbWlQc2R1IikpKTsKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorCisjcHJhZ21hIGxvY2F0aW9uPSJOUkZfUkFESU9fQlVGRkVSIgorc3RhdGljIHVpbnQ4X3QgICAgICBzVHJhbnNtaXRQc2R1W09UX1JBRElPX0ZSQU1FX01BWF9TSVpFICsgMV07CisKKyNlbmRpZgorCitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNBY2tGcmFtZTsKKworc3RhdGljIHVpbnQzMl90ICAgICBzRW5lcmd5RGV0ZWN0aW9uVGltZTsKK3N0YXRpYyB1aW50OF90ICAgICAgc0VuZXJneURldGVjdGlvbkNoYW5uZWw7CitzdGF0aWMgaW50OF90ICAgICAgIHNFbmVyZ3lEZXRlY3RlZDsKKwordHlwZWRlZiBlbnVtCit7CisgICAga1BlbmRpbmdFdmVudFNsZWVwLCAgICAgICAgICAgICAgICAvLyBSZXF1ZXN0ZWQgdG8gZW50ZXIgU2xlZXAgc3RhdGUuCisgICAga1BlbmRpbmdFdmVudEZyYW1lVHJhbnNtaXR0ZWQsICAgICAvLyBUcmFuc21pdHRlZCBmcmFtZSBhbmQgcmVjZWl2ZWQgQUNLIChpZiByZXF1ZXN0ZWQpLgorICAgIGtQZW5kaW5nRXZlbnRDaGFubmVsQWNjZXNzRmFpbHVyZSwgLy8gRmFpbGVkIHRvIHRyYW5zbWl0IGZyYW1lIChjaGFubmVsIGJ1c3kpLgorICAgIGtQZW5kaW5nRXZlbnRFbmVyZ3lEZXRlY3Rpb25TdGFydCwgLy8gUmVxdWVzdGVkIHRvIHN0YXJ0IEVuZXJneSBEZXRlY3Rpb24gcHJvY2VkdXJlLgorICAgIGtQZW5kaW5nRXZlbnRFbmVyZ3lEZXRlY3RlZCwgICAgICAgLy8gRW5lcmd5IERldGVjdGlvbiBmaW5pc2hlZC4KK30gUmFkaW9QZW5kaW5nRXZlbnRzOworCitzdGF0aWMgdWludDMyX3Qgc1BlbmRpbmdFdmVudHM7CisKK3N0YXRpYyB2b2lkIGRhdGFJbml0KHZvaWQpCit7CisgICAgc0Rpc2FibGVkID0gdHJ1ZTsKKworICAgIHNUcmFuc21pdEZyYW1lLm1Qc2R1ID0gc1RyYW5zbWl0UHNkdSArIDE7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgUkFESU9fUlhfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgc1JlY2VpdmVkRnJhbWVzW2ldLm1Qc2R1ID0gTlVMTDsKKyAgICB9CisKKyAgICBtZW1zZXQoJnNBY2tGcmFtZSwgMCwgc2l6ZW9mKHNBY2tGcmFtZSkpOworfQorCitzdGF0aWMgdm9pZCBjb252ZXJ0U2hvcnRBZGRyZXNzKHVpbnQ4X3QgKmFUbywgdWludDE2X3QgYUZyb20pCit7CisgICAgYVRvWzBdID0gKHVpbnQ4X3QpIGFGcm9tOworICAgIGFUb1sxXSA9ICh1aW50OF90KShhRnJvbSA+PiA4KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzUGVuZGluZ0V2ZW50U2V0KFJhZGlvUGVuZGluZ0V2ZW50cyBhRXZlbnQpCit7CisgICAgcmV0dXJuIHNQZW5kaW5nRXZlbnRzICYgKDFVTCA8PCBhRXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBzZXRQZW5kaW5nRXZlbnQoUmFkaW9QZW5kaW5nRXZlbnRzIGFFdmVudCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBwZW5kaW5nRXZlbnRzOworICAgIHVpbnQzMl90ICAgICAgICAgIGJpdFRvU2V0ID0gMVVMIDw8IGFFdmVudDsKKworICAgIGRvCisgICAgeworICAgICAgICBwZW5kaW5nRXZlbnRzID0gX19MRFJFWFcoKHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgKikmc1BlbmRpbmdFdmVudHMpOworICAgICAgICBwZW5kaW5nRXZlbnRzIHw9IGJpdFRvU2V0OworICAgIH0KKyAgICB3aGlsZSAoX19TVFJFWFcocGVuZGluZ0V2ZW50cywgKHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgKikmc1BlbmRpbmdFdmVudHMpKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRQZW5kaW5nRXZlbnQoUmFkaW9QZW5kaW5nRXZlbnRzIGFFdmVudCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBwZW5kaW5nRXZlbnRzOworICAgIHVpbnQzMl90ICAgICAgICAgIGJpdHNUb1JlbWFpbiA9IH4oMVVMIDw8IGFFdmVudCk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgcGVuZGluZ0V2ZW50cyA9IF9fTERSRVhXKCh1bnNpZ25lZCBsb25nIHZvbGF0aWxlICopJnNQZW5kaW5nRXZlbnRzKTsKKyAgICAgICAgcGVuZGluZ0V2ZW50cyAmPSBiaXRzVG9SZW1haW47CisgICAgfQorICAgIHdoaWxlIChfX1NUUkVYVyhwZW5kaW5nRXZlbnRzLCAodW5zaWduZWQgbG9uZyB2b2xhdGlsZSAqKSZzUGVuZGluZ0V2ZW50cykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJQZW5kaW5nRXZlbnRzKHZvaWQpCit7CisgICAgLy8gQ2xlYXIgcGVuZGluZyBldmVudHMgdGhhdCBjb3VsZCBjYXVzZSByYWNlIGluIHRoZSBNQUMgbGF5ZXIuCisgICAgdm9sYXRpbGUgdWludDMyX3QgcGVuZGluZ0V2ZW50czsKKyAgICB1aW50MzJfdCAgICAgICAgICBiaXRzVG9SZW1haW4gPSB+KDBVTCk7CisKKyAgICBiaXRzVG9SZW1haW4gJj0gfigxVUwgPDwga1BlbmRpbmdFdmVudEZyYW1lVHJhbnNtaXR0ZWQpOworICAgIGJpdHNUb1JlbWFpbiAmPSB+KDFVTCA8PCBrUGVuZGluZ0V2ZW50Q2hhbm5lbEFjY2Vzc0ZhaWx1cmUpOworCisgICAgYml0c1RvUmVtYWluICY9IH4oMVVMIDw8IGtQZW5kaW5nRXZlbnRTbGVlcCk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgcGVuZGluZ0V2ZW50cyA9IF9fTERSRVhXKCh1bnNpZ25lZCBsb25nIHZvbGF0aWxlICopJnNQZW5kaW5nRXZlbnRzKTsKKyAgICAgICAgcGVuZGluZ0V2ZW50cyAmPSBiaXRzVG9SZW1haW47CisgICAgfQorICAgIHdoaWxlIChfX1NUUkVYVyhwZW5kaW5nRXZlbnRzLCAodW5zaWduZWQgbG9uZyB2b2xhdGlsZSAqKSZzUGVuZGluZ0V2ZW50cykpOworfQorCit2b2lkIG90UGxhdFJhZGlvR2V0SWVlZUV1aTY0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCAqYUllZWVFdWk2NCkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgdWludDY0X3QgZmFjdG9yeUFkZHJlc3MgPSAodWludDY0X3QpTlJGX0ZJQ1ItPkRFVklDRUlEWzBdIDw8IDMyOworICAgIGZhY3RvcnlBZGRyZXNzIHw9ICBOUkZfRklDUi0+REVWSUNFSURbMV07CisKKyAgICBtZW1jcHkoYUllZWVFdWk2NCwgJmZhY3RvcnlBZGRyZXNzLCBzaXplb2YoZmFjdG9yeUFkZHJlc3MpKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBhbklkKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICB1aW50OF90IGFkZHJlc3NbU0hPUlRfQUREUkVTU19TSVpFXTsKKyAgICBjb252ZXJ0U2hvcnRBZGRyZXNzKGFkZHJlc3MsIGFQYW5JZCk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bhbl9pZF9zZXQoYWRkcmVzcyk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphRXh0ZW5kZWRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2V4dGVuZGVkX2FkZHJlc3Nfc2V0KGFFeHRlbmRlZEFkZHJlc3MpOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgdWludDhfdCBhZGRyZXNzW1NIT1JUX0FERFJFU1NfU0laRV07CisgICAgY29udmVydFNob3J0QWRkcmVzcyhhZGRyZXNzLCBhU2hvcnRBZGRyZXNzKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfc2hvcnRfYWRkcmVzc19zZXQoYWRkcmVzcyk7Cit9CisKK3ZvaWQgbnJmNVJhZGlvSW5pdCh2b2lkKQoreworICAgIGRhdGFJbml0KCk7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9pbml0KCk7Cit9CisKK3ZvaWQgbnJmNVJhZGlvRGVpbml0KHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9kZWluaXQoKTsKK30KKworb3RSYWRpb1N0YXRlIG90UGxhdFJhZGlvR2V0U3RhdGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBpZiAoc0Rpc2FibGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworICAgIH0KKworICAgIHN3aXRjaCAobnJmX2Rydl9yYWRpbzgwMjE1NF9zdGF0ZV9nZXQoKSkKKyAgICB7CisgICAgY2FzZSBOUkZfRFJWX1JBRElPODAyMTU0X1NUQVRFX1NMRUVQOgorICAgICAgICByZXR1cm4gT1RfUkFESU9fU1RBVEVfU0xFRVA7CisKKyAgICBjYXNlIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfUkVDRUlWRToKKyAgICBjYXNlIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfRU5FUkdZX0RFVEVDVElPTjoKKyAgICAgICAgcmV0dXJuIE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisKKyAgICBjYXNlIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfVFJBTlNNSVQ6CisgICAgICAgIHJldHVybiBPVF9SQURJT19TVEFURV9UUkFOU01JVDsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7IC8vIE1ha2Ugc3VyZSBkcml2ZXIgcmV0dXJuZWQgdmFsaWQgc3RhdGUuCisgICAgfQorCisgICAgcmV0dXJuIE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7IC8vIEl0IGlzIHRoZSBkZWZhdWx0IHN0YXRlLiBSZXR1cm4gaXQgaW4gY2FzZSBvZiB1bmtub3duLgorfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5hYmxlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIGlmIChzRGlzYWJsZWQpCisgICAgeworICAgICAgICBzRGlzYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEU7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBpZiAoIXNEaXNhYmxlZCkKKyAgICB7CisgICAgICAgIHNEaXNhYmxlZCA9IHRydWU7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworYm9vbCBvdFBsYXRSYWRpb0lzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIHJldHVybiAhc0Rpc2FibGVkOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvU2xlZXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9zbGVlcCgpKQorICAgIHsKKyAgICAgICAgY2xlYXJQZW5kaW5nRXZlbnRzKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsZWFyUGVuZGluZ0V2ZW50cygpOworICAgICAgICBzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudFNsZWVwKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1JlY2VpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFDaGFubmVsKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3JlY2VpdmUoYUNoYW5uZWwpOworICAgIGNsZWFyUGVuZGluZ0V2ZW50cygpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBhRnJhbWUtPm1Qc2R1Wy0xXSA9IGFGcmFtZS0+bUxlbmd0aDsKKworICAgIGlmIChucmZfZHJ2X3JhZGlvODAyMTU0X3RyYW5zbWl0KCZhRnJhbWUtPm1Qc2R1Wy0xXSwgYUZyYW1lLT5tQ2hhbm5lbCwgYUZyYW1lLT5tUG93ZXIsIHRydWUpKQorICAgIHsKKyAgICAgICAgY2xlYXJQZW5kaW5nRXZlbnRzKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsZWFyUGVuZGluZ0V2ZW50cygpOworICAgICAgICBzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudENoYW5uZWxBY2Nlc3NGYWlsdXJlKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RSYWRpb0ZyYW1lICpvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgcmV0dXJuICZzVHJhbnNtaXRGcmFtZTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIHJldHVybiBucmZfZHJ2X3JhZGlvODAyMTU0X3Jzc2lfbGFzdF9nZXQoKTsKK30KKworb3RSYWRpb0NhcHMgb3RQbGF0UmFkaW9HZXRDYXBzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgcmV0dXJuIE9UX1JBRElPX0NBUFNfRU5FUkdZX1NDQU47Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9HZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIHJldHVybiBucmZfZHJ2X3JhZGlvODAyMTU0X3Byb21pc2N1b3VzX2dldCgpOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcHJvbWlzY3VvdXNfc2V0KGFFbmFibGUpOworfQorCit2b2lkIG90UGxhdFJhZGlvRW5hYmxlU3JjTWF0Y2gob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfYXV0b19wZW5kaW5nX2JpdF9zZXQoYUVuYWJsZSk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgdWludDhfdCBzaG9ydEFkZHJlc3NbU0hPUlRfQUREUkVTU19TSVpFXTsKKyAgICBjb252ZXJ0U2hvcnRBZGRyZXNzKHNob3J0QWRkcmVzcywgYVNob3J0QWRkcmVzcyk7CisKKyAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9wZW5kaW5nX2JpdF9mb3JfYWRkcl9zZXQoc2hvcnRBZGRyZXNzLCBmYWxzZSkpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUzsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaEV4dEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9wZW5kaW5nX2JpdF9mb3JfYWRkcl9zZXQoYUV4dEFkZHJlc3MsIHRydWUpKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlM7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgdWludDhfdCBzaG9ydEFkZHJlc3NbU0hPUlRfQUREUkVTU19TSVpFXTsKKyAgICBjb252ZXJ0U2hvcnRBZGRyZXNzKHNob3J0QWRkcmVzcywgYVNob3J0QWRkcmVzcyk7CisKKyAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9wZW5kaW5nX2JpdF9mb3JfYWRkcl9jbGVhcihzaG9ydEFkZHJlc3MsIGZhbHNlKSkKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19BRERSRVNTOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgaWYgKG5yZl9kcnZfcmFkaW84MDIxNTRfcGVuZGluZ19iaXRfZm9yX2FkZHJfY2xlYXIoYUV4dEFkZHJlc3MsIHRydWUpKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0FERFJFU1M7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGVuZGluZ19iaXRfZm9yX2FkZHJfcmVzZXQoZmFsc2UpOworfQorCit2b2lkIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3BlbmRpbmdfYml0X2Zvcl9hZGRyX3Jlc2V0KHRydWUpOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBzRW5lcmd5RGV0ZWN0aW9uVGltZSAgICA9ICh1aW50MzJfdCkgYVNjYW5EdXJhdGlvbiAqIDEwMDBVTDsKKyAgICBzRW5lcmd5RGV0ZWN0aW9uQ2hhbm5lbCA9IGFTY2FuQ2hhbm5lbDsKKworICAgIGNsZWFyUGVuZGluZ0V2ZW50cygpOworCisgICAgaWYgKG5yZl9kcnZfcmFkaW84MDIxNTRfZW5lcmd5X2RldGVjdGlvbihhU2NhbkNoYW5uZWwsIHNFbmVyZ3lEZXRlY3Rpb25UaW1lKSkKKyAgICB7CisgICAgICAgIHJlc2V0UGVuZGluZ0V2ZW50KGtQZW5kaW5nRXZlbnRFbmVyZ3lEZXRlY3Rpb25TdGFydCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNldFBlbmRpbmdFdmVudChrUGVuZGluZ0V2ZW50RW5lcmd5RGV0ZWN0aW9uU3RhcnQpOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0RGVmYXVsdFR4UG93ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYVBvd2VyKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3R4X3Bvd2VyX3NldChhUG93ZXIpOworfQorCit2b2lkIG5yZjVSYWRpb1Byb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBSQURJT19SWF9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoc1JlY2VpdmVkRnJhbWVzW2ldLm1Qc2R1ICE9IE5VTEwpCisgICAgICAgIHsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90UGxhdERpYWdSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlZEZyYW1lc1tpXSwgT1RfRVJST1JfTk9ORSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlZEZyYW1lc1tpXSwgT1RfRVJST1JfTk9ORSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnQ4X3QgKmJ1ZmZlckFkZHJlc3MgPSAmc1JlY2VpdmVkRnJhbWVzW2ldLm1Qc2R1Wy0xXTsKKyAgICAgICAgICAgIHNSZWNlaXZlZEZyYW1lc1tpXS5tUHNkdSA9IE5VTEw7CisgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2J1ZmZlcl9mcmVlKGJ1ZmZlckFkZHJlc3MpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzUGVuZGluZ0V2ZW50U2V0KGtQZW5kaW5nRXZlbnRGcmFtZVRyYW5zbWl0dGVkKSkKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXREaWFnUmFkaW9UcmFuc21pdERvbmUoYUluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsIE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBvdFJhZGlvRnJhbWUgKmFja1B0ciA9IChzQWNrRnJhbWUubVBzZHUgPT0gTlVMTCkgPyBOVUxMIDogJnNBY2tGcmFtZTsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvVHhEb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCBhY2tQdHIsIE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNBY2tGcmFtZS5tUHNkdSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2J1ZmZlcl9mcmVlKHNBY2tGcmFtZS5tUHNkdSAtIDEpOworICAgICAgICAgICAgc0Fja0ZyYW1lLm1Qc2R1ID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHJlc2V0UGVuZGluZ0V2ZW50KGtQZW5kaW5nRXZlbnRGcmFtZVRyYW5zbWl0dGVkKTsKKyAgICB9CisKKyAgICBpZiAoaXNQZW5kaW5nRXZlbnRTZXQoa1BlbmRpbmdFdmVudENoYW5uZWxBY2Nlc3NGYWlsdXJlKSkKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXREaWFnUmFkaW9UcmFuc21pdERvbmUoYUluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsIE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgTlVMTCwgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICByZXNldFBlbmRpbmdFdmVudChrUGVuZGluZ0V2ZW50Q2hhbm5lbEFjY2Vzc0ZhaWx1cmUpOworICAgIH0KKworICAgIGlmIChpc1BlbmRpbmdFdmVudFNldChrUGVuZGluZ0V2ZW50RW5lcmd5RGV0ZWN0ZWQpKQorICAgIHsKKyAgICAgICAgb3RQbGF0UmFkaW9FbmVyZ3lTY2FuRG9uZShhSW5zdGFuY2UsIHNFbmVyZ3lEZXRlY3RlZCk7CisKKyAgICAgICAgcmVzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudEVuZXJneURldGVjdGVkKTsKKyAgICB9CisKKyAgICBpZiAoaXNQZW5kaW5nRXZlbnRTZXQoa1BlbmRpbmdFdmVudFNsZWVwKSkKKyAgICB7CisgICAgICAgIGlmIChucmZfZHJ2X3JhZGlvODAyMTU0X3NsZWVwKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc2V0UGVuZGluZ0V2ZW50KGtQZW5kaW5nRXZlbnRTbGVlcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNQZW5kaW5nRXZlbnRTZXQoa1BlbmRpbmdFdmVudEVuZXJneURldGVjdGlvblN0YXJ0KSkKKyAgICB7CisgICAgICAgIGlmIChucmZfZHJ2X3JhZGlvODAyMTU0X2VuZXJneV9kZXRlY3Rpb24oc0VuZXJneURldGVjdGlvbkNoYW5uZWwsIHNFbmVyZ3lEZXRlY3Rpb25UaW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudEVuZXJneURldGVjdGlvblN0YXJ0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlY2VpdmVkKHVpbnQ4X3QgKnBfZGF0YSwgaW50OF90IHBvd2VyLCBpbnQ4X3QgbHFpKQoreworICAgIG90UmFkaW9GcmFtZSAqcmVjZWl2ZWRGcmFtZSA9IE5VTEw7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgUkFESU9fUlhfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNSZWNlaXZlZEZyYW1lc1tpXS5tUHNkdSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICByZWNlaXZlZEZyYW1lID0gJnNSZWNlaXZlZEZyYW1lc1tpXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KHJlY2VpdmVkRnJhbWUgIT0gTlVMTCk7CisKKyAgICBtZW1zZXQocmVjZWl2ZWRGcmFtZSwgMCwgc2l6ZW9mKCpyZWNlaXZlZEZyYW1lKSk7CisKKyAgICByZWNlaXZlZEZyYW1lLT5tUHNkdSAgICA9ICZwX2RhdGFbMV07CisgICAgcmVjZWl2ZWRGcmFtZS0+bUxlbmd0aCAgPSBwX2RhdGFbMF07CisgICAgcmVjZWl2ZWRGcmFtZS0+bVBvd2VyICAgPSBwb3dlcjsKKyAgICByZWNlaXZlZEZyYW1lLT5tTHFpICAgICA9IGxxaTsKKyAgICByZWNlaXZlZEZyYW1lLT5tQ2hhbm5lbCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfY2hhbm5lbF9nZXQoKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3RyYW5zbWl0dGVkKHVpbnQ4X3QgKmFBY2tQc2R1LCBpbnQ4X3QgYVBvd2VyLCBpbnQ4X3QgYUxxaSkKK3sKKyAgICBpZiAoYUFja1BzZHUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHNBY2tGcmFtZS5tUHNkdSA9IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNBY2tGcmFtZS5tUHNkdSAgICA9ICZhQWNrUHNkdVsxXTsKKyAgICAgICAgc0Fja0ZyYW1lLm1MZW5ndGggID0gYUFja1BzZHVbMF07CisgICAgICAgIHNBY2tGcmFtZS5tUG93ZXIgICA9IGFQb3dlcjsKKyAgICAgICAgc0Fja0ZyYW1lLm1McWkgICAgID0gYUxxaTsKKyAgICAgICAgc0Fja0ZyYW1lLm1DaGFubmVsID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9jaGFubmVsX2dldCgpOworICAgIH0KKworICAgIHNldFBlbmRpbmdFdmVudChrUGVuZGluZ0V2ZW50RnJhbWVUcmFuc21pdHRlZCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9idXN5X2NoYW5uZWwodm9pZCkKK3sKKyAgICBzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudENoYW5uZWxBY2Nlc3NGYWlsdXJlKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2VuZXJneV9kZXRlY3RlZChpbnQ4X3QgcmVzdWx0KQoreworICAgIC8vIFRPRE86IENvcnJlY3QgUlNTSSBjYWxjdWxhdGlvbiBhZnRlciBsYWIgdGVzdHMuCisgICAgc0VuZXJneURldGVjdGVkID0gOTQgLSByZXN1bHQ7CisKKyAgICBzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudEVuZXJneURldGVjdGVkKTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UmVjZWl2ZVNlbnNpdGl2aXR5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIE5SRjUyODQwX1JFQ0VJVkVfU0VOU0lUSVZJVFk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcmFuZG9tLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyZDZmYgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9yYW5kb20uYwpAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKworI2luY2x1ZGUgInBsYXRmb3JtLW5yZjUuaCIKKworI2lmIFNPRlRERVZJQ0VfUFJFU0VOVAorI2luY2x1ZGUgInNvZnRkZXZpY2UuaCIKKyNlbHNlCisjaW5jbHVkZSA8aGFsL25yZl9ybmcuaD4KKworc3RhdGljIHVpbnQ4X3Qgc0J1ZmZlcltSTkdfQlVGRkVSX1NJWkVdOworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHNSZWFkUG9zaXRpb247CitzdGF0aWMgdm9sYXRpbGUgdWludDMyX3Qgc1dyaXRlUG9zaXRpb247CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgYnVmZmVyQ291bnQodm9pZCkKK3sKKyAgICB1aW50MzJfdCB3cml0ZVBvcyA9IHNXcml0ZVBvc2l0aW9uOworICAgIHJldHVybiB3cml0ZVBvcyAtIHNSZWFkUG9zaXRpb247Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBidWZmZXJJc0VtcHR5KHZvaWQpCit7CisgICAgcmV0dXJuIChidWZmZXJDb3VudCgpID09IDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYnVmZmVySXNVaW50MzJSZWFkeSh2b2lkKQoreworICAgIHJldHVybiAoYnVmZmVyQ291bnQoKSA+PSA0KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGJ1ZmZlcklzRnVsbCh2b2lkKQoreworICAgIHJldHVybiAoYnVmZmVyQ291bnQoKSA+PSBSTkdfQlVGRkVSX1NJWkUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyUHV0KHVpbnQ4X3QgdmFsKQoreworICAgIGlmICghYnVmZmVySXNGdWxsKCkpCisgICAgeworICAgICAgICBzQnVmZmVyWyhzV3JpdGVQb3NpdGlvbisrKSAlIFJOR19CVUZGRVJfU0laRV0gPSB2YWw7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgYnVmZmVyR2V0KCkKK3sKKyAgICB1aW50OF90IHJldFZhbCA9IDA7CisKKyAgICBpZiAoIWJ1ZmZlcklzRW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHNCdWZmZXJbc1JlYWRQb3NpdGlvbisrICUgUk5HX0JVRkZFUl9TSVpFXTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGJ1ZmZlckdldFVpbnQzMigpCit7CisgICAgdWludDMyX3QgcmV0VmFsID0gMDsKKworICAgIGlmIChidWZmZXJJc1VpbnQzMlJlYWR5KCkpCisgICAgeworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgNDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICByZXRWYWwgPDw9IDg7CisgICAgICAgICAgICByZXRWYWwgfD0gYnVmZmVyR2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmF0b3JTdGFydCh2b2lkKQoreworICAgIG5yZl9ybmdfZXZlbnRfY2xlYXIoTlJGX1JOR19FVkVOVF9WQUxSRFkpOworICAgIG5yZl9ybmdfaW50X2VuYWJsZShOUkZfUk5HX0lOVF9WQUxSRFlfTUFTSyk7CisgICAgbnJmX3JuZ190YXNrX3RyaWdnZXIoTlJGX1JOR19UQVNLX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgZ2VuZXJhdG9yU3RvcCh2b2lkKQoreworICAgIG5yZl9ybmdfaW50X2Rpc2FibGUoTlJGX1JOR19JTlRfVkFMUkRZX01BU0spOworICAgIG5yZl9ybmdfdGFza190cmlnZ2VyKE5SRl9STkdfVEFTS19TVE9QKTsKK30KKwordm9pZCBSTkdfSVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmIChucmZfcm5nX2V2ZW50X2dldChOUkZfUk5HX0VWRU5UX1ZBTFJEWSkgJiYKKyAgICAgICAgbnJmX3JuZ19pbnRfZ2V0KE5SRl9STkdfSU5UX1ZBTFJEWV9NQVNLKSkKKyAgICB7CisgICAgICAgIG5yZl9ybmdfZXZlbnRfY2xlYXIoTlJGX1JOR19FVkVOVF9WQUxSRFkpOworCisgICAgICAgIGJ1ZmZlclB1dChucmZfcm5nX3JhbmRvbV92YWx1ZV9nZXQoKSk7CisKKyAgICAgICAgaWYgKGJ1ZmZlcklzRnVsbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBnZW5lcmF0b3JTdG9wKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYgLy8gU09GVERFVklDRV9QUkVTRU5UCisKK3ZvaWQgbnJmNVJhbmRvbUluaXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCBzZWVkID0gMDsKKworI2lmIFNPRlRERVZJQ0VfUFJFU0VOVAorICAgIHVpbnQzMl90IHJldHZhbDsKKworICAgIGRvCisgICAgeworICAgICAgICAvLyBXYWl0IGZvciB0aGUgZmlyc3QgcmFuZG9taXplZCA0IGJ5dGVzLCB0byByYW5kb21pemUgc29mdHdhcmUgZ2VuZXJhdG9yIHNlZWQuCisgICAgICAgIHJldHZhbCA9IHNkX3JhbmRfYXBwbGljYXRpb25fdmVjdG9yX2dldCgodWludDhfdCAqKSZzZWVkLCBzaXplb2Yoc2VlZCkpOworICAgIH0KKyAgICB3aGlsZSAocmV0dmFsICE9IE5SRl9TVUNDRVNTICYmIHNlZWQgPT0gMCk7CisKKyNlbHNlIC8vIFNPRlRERVZJQ0VfUFJFU0VOVAorICAgIG1lbXNldChzQnVmZmVyLCAwLCBzaXplb2Yoc0J1ZmZlcikpOworICAgIHNSZWFkUG9zaXRpb24gPSAwOworICAgIHNXcml0ZVBvc2l0aW9uID0gMDsKKworICAgIE5WSUNfU2V0UHJpb3JpdHkoUk5HX0lSUW4sIFJOR19JUlFfUFJJT1JJVFkpOworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFJOR19JUlFuKTsKKyAgICBOVklDX0VuYWJsZUlSUShSTkdfSVJRbik7CisKKyAgICBucmZfcm5nX2Vycm9yX2NvcnJlY3Rpb25fZW5hYmxlKCk7CisgICAgbnJmX3JuZ19zaG9ydHNfZGlzYWJsZShOUkZfUk5HX1NIT1JUX1ZBTFJEWV9TVE9QX01BU0spOworICAgIGdlbmVyYXRvclN0YXJ0KCk7CisKKyAgICAvLyBXYWl0IGZvciB0aGUgZmlyc3QgcmFuZG9taXplZCA0IGJ5dGVzLCB0byByYW5kb21pemUgc29mdHdhcmUgZ2VuZXJhdG9yIHNlZWQuCisgICAgd2hpbGUgKCFidWZmZXJJc1VpbnQzMlJlYWR5KCkpIDsKKworICAgIHNlZWQgPSBidWZmZXJHZXRVaW50MzIoKTsKKyNlbmRpZiAvLyBTT0ZUREVWSUNFX1BSRVNFTlQKKworICAgIHNyYW5kKHNlZWQpOworfQorCit2b2lkIG5yZjVSYW5kb21EZWluaXQodm9pZCkKK3sKKyNpZm5kZWYgU09GVERFVklDRV9QUkVTRU5UCisgICAgZ2VuZXJhdG9yU3RvcCgpOworCisgICAgTlZJQ19EaXNhYmxlSVJRKFJOR19JUlFuKTsKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShSTkdfSVJRbik7CisgICAgTlZJQ19TZXRQcmlvcml0eShSTkdfSVJRbiwgMCk7CisjZW5kaWYgLy8gU09GVERFVklDRV9QUkVTRU5UCit9CisKK3VpbnQzMl90IG90UGxhdFJhbmRvbUdldCh2b2lkKQoreworICAgIHJldHVybiAodWludDMyX3QpcmFuZCgpOworfQorCitvdEVycm9yIG90UGxhdFJhbmRvbUdldFRydWUodWludDhfdCAqYU91dHB1dCwgdWludDE2X3QgYU91dHB1dExlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90ICBjb3B5TGVuZ3RoOworICAgIHVpbnQxNl90IGluZGV4ID0gMDsKKworICAgIG90RVhQRUNUX0FDVElPTihhT3V0cHV0ICYmIGFPdXRwdXRMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGRvCisgICAgeworI2lmIFNPRlRERVZJQ0VfUFJFU0VOVAorICAgICAgICBzZF9yYW5kX2FwcGxpY2F0aW9uX2J5dGVzX2F2YWlsYWJsZV9nZXQoJmNvcHlMZW5ndGgpOworI2Vsc2UgLy8gU09GVERFVklDRV9QUkVTRU5UCisgICAgICAgIGNvcHlMZW5ndGggPSAodWludDhfdClidWZmZXJDb3VudCgpOworI2VuZGlmIC8vIFNPRlRERVZJQ0VfUFJFU0VOVAorCisgICAgICAgIGlmIChjb3B5TGVuZ3RoID4gYU91dHB1dExlbmd0aCAtIGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBjb3B5TGVuZ3RoID0gYU91dHB1dExlbmd0aCAtIGluZGV4OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvcHlMZW5ndGggPiAwKQorICAgICAgICB7CisKKyNpZiBTT0ZUREVWSUNFX1BSRVNFTlQKKyAgICAgICAgICAgIHVpbnQzMl90IHJldHZhbCA9IHNkX3JhbmRfYXBwbGljYXRpb25fdmVjdG9yX2dldChhT3V0cHV0ICsgaW5kZXgsIGNvcHlMZW5ndGgpOworICAgICAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHJldHZhbCA9PSBOUkZfU1VDQ0VTUywgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworI2Vsc2UgLy8gU09GVERFVklDRV9QUkVTRU5UCisKKyAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3B5TGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYU91dHB1dFtpICsgaW5kZXhdID0gYnVmZmVyR2V0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdlbmVyYXRvclN0YXJ0KCk7CisjZW5kaWYgLy8gU09GVERFVklDRV9QUkVTRU5UCisKKyAgICAgICAgICAgIGluZGV4ICs9IGNvcHlMZW5ndGg7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKGluZGV4IDwgYU91dHB1dExlbmd0aCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3NvZnRkZXZpY2UuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9zb2Z0ZGV2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmNzdlNQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9zb2Z0ZGV2aWNlLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgc29mdGRldmljZSBoZWxwZXIgZnVuY3Rpb25zLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJzb2Z0ZGV2aWNlLmgiCisjaW5jbHVkZSAicGxhdGZvcm0tc29mdGRldmljZS5oIgorI2luY2x1ZGUgInBsYXRmb3JtLW5yZjUuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxucmZfcmFhbF9zb2Z0ZGV2aWNlLmg+CisKK290RXJyb3IgbnJmNVNkRXJyb3JUb090RXJyb3IodWludDMyX3QgYVNkRXJyb3IpCit7CisgICAgc3dpdGNoIChhU2RFcnJvcikKKyAgICB7CisgICAgY2FzZSBOUkZfU1VDQ0VTUzoKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOUkZfRVJST1JfSU5WQUxJRF9TVEFURToKKyAgICBjYXNlIE5SRl9FUlJPUl9CVVNZOgorICAgICAgICByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5SRl9FUlJPUl9JTlZBTElEX1BBUkFNOgorICAgIGNhc2UgTlJGX0VSUk9SX0lOVkFMSURfQUREUjoKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5SRl9FUlJPUl9OT19NRU06CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT19CVUZTOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTlJGX0VSUk9SX05PVF9GT1VORDoKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9GT1VORDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5SRl9FUlJPUl9OT1RfU1VQUE9SVEVEOgorICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9GQUlMRUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBQbGF0Zm9ybVNvZnRkZXZpY2VTb2NFdnRIYW5kbGVyKHVpbnQzMl90IGFFdnRJZCkKK3sKKyAgICBucmY1U2RTb2NGbGFzaFByb2Nlc3MoYUV2dElkKTsKKyAgICBucmZfcmFhbF9zb2Z0ZGV2aWNlX3NvY19ldnRfaGFuZGxlcihhRXZ0SWQpOworfQorCit2b2lkIFBsYXRmb3JtU29mdGRldmljZVJhYWxDb25maWcoY29uc3QgUGxhdGZvcm1Tb2Z0ZGV2aWNlUmFhbENvbmZpZ1BhcmFtcyAqYUNvbmZpZykKK3sKKyAgICBucmZfcmFhbF9zb2Z0ZGV2aWNlX2NmZ190IGNmZzsKKyAgICBtZW1zZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykpOworCisgICAgY2ZnLnRpbWVzbG90X2xlbmd0aCAgICAgID0gYUNvbmZpZy0+dGltZXNsb3RMZW5ndGg7CisgICAgY2ZnLnRpbWVzbG90X3RpbWVvdXQgICAgID0gYUNvbmZpZy0+dGltZXNsb3RUaW1lb3V0OworICAgIGNmZy50aW1lc2xvdF9tYXhfbGVuZ3RoICA9IGFDb25maWctPnRpbWVzbG90TWF4TGVuZ3RoOworICAgIGNmZy50aW1lc2xvdF9hbGxvY19pdGVycyA9IGFDb25maWctPnRpbWVzbG90QWxsb2NJdGVyczsKKyAgICBjZmcudGltZXNsb3Rfc2FmZV9tYXJnaW4gPSBhQ29uZmlnLT50aW1lc2xvdFNhZmVNYXJnaW47CisgICAgY2ZnLmxmX2Nsa19hY2N1cmFjeV9wcG0gID0gYUNvbmZpZy0+bGZDbGtBY2N1cmFjeVBwbTsKKworICAgIG5yZl9yYWFsX3NvZnRkZXZpY2VfY29uZmlnKCZjZmcpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3NvZnRkZXZpY2UuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9zb2Z0ZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhYWY1NQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9zb2Z0ZGV2aWNlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIGNvbW1vbiBTb2Z0RGV2aWNlIGhlYWRlcnMuCisgKgorICovCisKKyNpZm5kZWYgU09GVERFVklDRV9IXworI2RlZmluZSBTT0ZUREVWSUNFX0hfCisKKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHB1c2giKQorICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3JldHVybi10eXBlXCIiKQorICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VudXNlZC1wYXJhbWV0ZXJcIiIpCisgICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XcGVkYW50aWNcIiIpCisjZW5kaWYKKworI2luY2x1ZGUgPG5yZl9zdmMuaD4KKyNpbmNsdWRlIDxucmZfc2RtLmg+CisjaW5jbHVkZSA8bnJmX3NvYy5oPgorI2luY2x1ZGUgPG5yZl9udmljLmg+CisKKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHBvcCIpCisjZW5kaWYKKworI2VuZGlmICAvLyBTT0ZUREVWSUNFX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvdWFydC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTk1MzlmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3VhcnQuYwpAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgVUFSVCBjb21tdW5pY2F0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS90b29sY2hhaW4uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisKKyNpbmNsdWRlIDxkcml2ZXJzL2Nsb2NrL25yZl9kcnZfY2xvY2suaD4KKyNpbmNsdWRlIDxoYWwvbnJmX3VhcnQuaD4KKyNpbmNsdWRlIDxoYWwvbnJmX2dwaW8uaD4KKyNpbmNsdWRlICJwbGF0Zm9ybS1ucmY1LmgiCisKKy8qKgorICogIFVBUlQgVFggYnVmZmVyIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3QgKnNUcmFuc21pdEJ1ZmZlciA9IE5VTEw7CitzdGF0aWMgdWludDE2X3Qgc1RyYW5zbWl0TGVuZ3RoID0gMDsKK3N0YXRpYyBib29sIHNUcmFuc21pdERvbmUgPSAwOworCisvKioKKyAqICBVQVJUIFJYIHJpbmcgYnVmZmVyIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIHVpbnQ4X3Qgc1JlY2VpdmVCdWZmZXJbVUFSVF9SWF9CVUZGRVJfU0laRV07CitzdGF0aWMgdWludDE2X3Qgc1JlY2VpdmVIZWFkID0gMDsKK3N0YXRpYyB1aW50MTZfdCBzUmVjZWl2ZVRhaWwgPSAwOworCisvKioKKyAqIEZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBSWCBidWZmZXIgaXMgZnVsbC4KKyAqCisgKiBAcmV0dmFsIHRydWUgIFJYIGJ1ZmZlciBpcyBmdWxsLgorICogQHJldHZhbCBmYWxzZSBSWCBidWZmZXIgaXMgbm90IGZ1bGwuCisgKi8KK3N0YXRpYyBfX0lOTElORSBib29sIGlzUnhCdWZmZXJGdWxsKCkKK3sKKyAgICB1aW50MTZfdCBuZXh0ID0gKHNSZWNlaXZlSGVhZCArIDEpICUgVUFSVF9SWF9CVUZGRVJfU0laRTsKKyAgICByZXR1cm4gKG5leHQgPT0gc1JlY2VpdmVUYWlsKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgUlggYnVmZmVyIGlzIGVtcHR5LgorICoKKyAqIEByZXR2YWwgdHJ1ZSAgUlggYnVmZmVyIGlzIGVtcHR5LgorICogQHJldHZhbCBmYWxzZSBSWCBidWZmZXIgaXMgbm90IGVtcHR5LgorICovCitzdGF0aWMgX19JTkxJTkUgYm9vbCBpc1J4QnVmZmVyRW1wdHkoKQoreworICAgIHJldHVybiAoc1JlY2VpdmVIZWFkID09IHNSZWNlaXZlVGFpbCk7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZm9yIG5vdGlmeWluZyBhcHBsaWNhdGlvbiBhYm91dCBuZXcgYnl0ZXMgcmVjZWl2ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NSZWNlaXZlKHZvaWQpCit7CisgICAgLy8gU2V0IGhlYWQgcG9zaXRpb24gdG8gbm90IGJlIGNoYW5nZWQgZHVyaW5nIHJlYWQgcHJvY2VkdXJlLgorICAgIHVpbnQxNl90IGhlYWQgPSBzUmVjZWl2ZUhlYWQ7CisKKyAgICBvdEVYUEVDVChpc1J4QnVmZmVyRW1wdHkoKSA9PSBmYWxzZSk7CisKKyAgICAvLyBJbiBjYXNlIGhlYWQgcm9sbCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciwgbm90aWZ5IGFib3V0IGxlZnQKKyAgICAvLyBieXRlcyBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKyAgICBpZiAoaGVhZCA8IHNSZWNlaXZlVGFpbCkKKyAgICB7CisgICAgICAgIG90UGxhdFVhcnRSZWNlaXZlZCgmc1JlY2VpdmVCdWZmZXJbc1JlY2VpdmVUYWlsXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChVQVJUX1JYX0JVRkZFUl9TSVpFIC0gc1JlY2VpdmVUYWlsKSk7CisgICAgICAgIHNSZWNlaXZlVGFpbCA9IDA7CisgICAgfQorCisgICAgLy8gTm90aWZ5IGFib3V0IHJlY2VpdmVkIGJ5dGVzLgorICAgIGlmIChoZWFkID4gc1JlY2VpdmVUYWlsKQorICAgIHsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKCZzUmVjZWl2ZUJ1ZmZlcltzUmVjZWl2ZVRhaWxdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhlYWQgLSBzUmVjZWl2ZVRhaWwpKTsKKyAgICAgICAgc1JlY2VpdmVUYWlsID0gaGVhZDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGZvciBub3RpZnlpbmcgYXBwbGljYXRpb24gYWJvdXQgdHJhbnNtaXNzaW9uIGJlaW5nIGRvbmUuCisgKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NUcmFuc21pdCh2b2lkKQoreworICAgIG90RVhQRUNUKHNUcmFuc21pdEJ1ZmZlciAhPSBOVUxMKTsKKworICAgIGlmIChzVHJhbnNtaXREb25lKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXIgVHJhbnNtaXRpb24gdHJhbnNhY3Rpb24gYW5kIG5vdGlmeSBhcHBsaWNhdGlvbi4KKyAgICAgICAgc1RyYW5zbWl0QnVmZmVyID0gTlVMTDsKKyAgICAgICAgc1RyYW5zbWl0TGVuZ3RoID0gMDsKKyAgICAgICAgc1RyYW5zbWl0RG9uZSA9IGZhbHNlOworICAgICAgICBvdFBsYXRVYXJ0U2VuZERvbmUoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIG5yZjVVYXJ0UHJvY2Vzcyh2b2lkKQoreworICAgIHByb2Nlc3NSZWNlaXZlKCk7CisgICAgcHJvY2Vzc1RyYW5zbWl0KCk7Cit9CisKK3ZvaWQgbnJmNVVhcnRJbml0KHZvaWQpCit7CisgICAgLy8gU2V0IHVwIFRYIGFuZCBSWCBwaW5zLgorICAgIG5yZl9ncGlvX3Bpbl9zZXQoVUFSVF9QSU5fVFgpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoVUFSVF9QSU5fVFgpOworICAgIG5yZl9ncGlvX2NmZ19pbnB1dChVQVJUX1BJTl9SWCwgTlJGX0dQSU9fUElOX05PUFVMTCk7CisgICAgbnJmX3VhcnRfdHhyeF9waW5zX3NldChVQVJUX0lOU1RBTkNFLCBVQVJUX1BJTl9UWCwgVUFSVF9QSU5fUlgpOworCisjaWYgKFVBUlRfSFdGQyA9PSBOUkZfVUFSVF9IV0ZDX0VOQUJMRUQpCisgICAgLy8gU2V0IHVwIENUUyBhbmQgUlRTIHBpbnMuCisgICAgbnJmX2dwaW9fY2ZnX2lucHV0KFVBUlRfUElOX0NUUywgTlJGX0dQSU9fUElOX05PUFVMTCk7CisgICAgbnJmX2dwaW9fcGluX3NldChVQVJUX1BJTl9SVFMpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoVUFSVF9QSU5fUlRTKTsKKyAgICBucmZfdWFydF9od2ZjX3BpbnNfc2V0KFVBUlRfSU5TVEFOQ0UsIFVBUlRfUElOX1JUUywgVUFSVF9QSU5fQ1RTKTsKKyNlbmRpZgorCisgICAgLy8gQ29uZmlndXJlIGJhdWRyYXRlLgorICAgIG5yZl91YXJ0X2JhdWRyYXRlX3NldChVQVJUX0lOU1RBTkNFLCBVQVJUX0JBVURSQVRFKTsKKworICAgIC8vIENvbmZpZ3VyZSBwYXJpdHkgYW5kIGhhcmR3YXJlIGZsb3cgY29udHJvbC4KKyAgICBucmZfdWFydF9jb25maWd1cmUoVUFSVF9JTlNUQU5DRSwgVUFSVF9QQVJJVFksIFVBUlRfSFdGQyk7CisKKyAgICAvLyBDbGVhciBVQVJUIHNwZWNpZmljIGV2ZW50cy4KKyAgICBucmZfdWFydF9ldmVudF9jbGVhcihVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9FVkVOVF9UWERSRFkpOworICAgIG5yZl91YXJ0X2V2ZW50X2NsZWFyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX0VSUk9SKTsKKyAgICBucmZfdWFydF9ldmVudF9jbGVhcihVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9FVkVOVF9SWERSRFkpOworCisgICAgLy8gRW5hYmxlIGludGVycnVwdHMgZm9yIFRYLgorICAgIG5yZl91YXJ0X2ludF9lbmFibGUoVUFSVF9JTlNUQU5DRSwgTlJGX1VBUlRfSU5UX01BU0tfVFhEUkRZKTsKKworICAgIC8vIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciBSWC4KKyAgICBucmZfdWFydF9pbnRfZW5hYmxlKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0lOVF9NQVNLX1JYRFJEWSB8IE5SRl9VQVJUX0lOVF9NQVNLX0VSUk9SKTsKKworICAgIC8vIENvbmZpZ3VyZSBOVklDIHRvIGhhbmRsZSBVQVJUIGludGVycnVwdHMuCisgICAgTlZJQ19TZXRQcmlvcml0eShVQVJUX0lSUU4sIFVBUlRfSVJRX1BSSU9SSVRZKTsKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShVQVJUX0lSUU4pOworICAgIE5WSUNfRW5hYmxlSVJRKFVBUlRfSVJRTik7Cit9CisKK3ZvaWQgbnJmNVVhcnREZWluaXQodm9pZCkKK3sKKyAgICAvLyBEaXNhYmxlIE5WSUMgaW50ZXJydXB0LgorICAgIE5WSUNfRGlzYWJsZUlSUShVQVJUX0lSUU4pOworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFVBUlRfSVJRTik7CisgICAgTlZJQ19TZXRQcmlvcml0eShVQVJUX0lSUU4sIDApOworCisgICAgLy8gRGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBUWC4KKyAgICBucmZfdWFydF9pbnRfZGlzYWJsZShVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9JTlRfTUFTS19UWERSRFkpOworCisgICAgLy8gRGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBSWC4KKyAgICBucmZfdWFydF9pbnRfZGlzYWJsZShVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9JTlRfTUFTS19SWERSRFkgfCBOUkZfVUFSVF9JTlRfTUFTS19FUlJPUik7Cit9CisKK290RXJyb3Igb3RQbGF0VWFydEVuYWJsZSh2b2lkKQoreworICAgIC8vIFN0YXJ0IEhGQ0xLCisgICAgbnJmX2Rydl9jbG9ja19oZmNsa19yZXF1ZXN0KE5VTEwpOworCisgICAgd2hpbGUgKCFucmZfZHJ2X2Nsb2NrX2hmY2xrX2lzX3J1bm5pbmcoKSkge30KKworICAgIC8vIEVuYWJsZSBVQVJUIGluc3RhbmNlLCBhbmQgc3RhcnQgUlggb24gaXQuCisgICAgbnJmX3VhcnRfZW5hYmxlKFVBUlRfSU5TVEFOQ0UpOworICAgIG5yZl91YXJ0X3Rhc2tfdHJpZ2dlcihVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9UQVNLX1NUQVJUUlgpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0VWFydERpc2FibGUodm9pZCkKK3sKKyAgICAvLyBEaXNhYmxlIFVBUlQgaW5zdGFuY2UuCisgICAgbnJmX3VhcnRfZGlzYWJsZShVQVJUX0lOU1RBTkNFKTsKKworICAgIC8vIFJlbGVhc2UgSEYgY2xvY2suCisgICAgbnJmX2Rydl9jbG9ja19oZmNsa19yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRVYXJ0U2VuZChjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKHNUcmFuc21pdEJ1ZmZlciA9PSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0JVU1kpOworCisgICAgLy8gU2V0IHVwIHRyYW5zbWl0IGJ1ZmZlciBhbmQgaXRzIHNpemUgd2l0aG91dCBjb3VudGluZyBmaXJzdCB0cmlnZ2VyZWQgYnl0ZS4KKyAgICBzVHJhbnNtaXRCdWZmZXIgPSBhQnVmOworICAgIHNUcmFuc21pdExlbmd0aCA9IGFCdWZMZW5ndGggLSAxOworCisgICAgLy8gSW5pdGlhdGUgVHJhbnNtaXNzaW9uIHByb2Nlc3MuCisgICAgbnJmX3VhcnRfZXZlbnRfY2xlYXIoVUFSVF9JTlNUQU5DRSwgTlJGX1VBUlRfRVZFTlRfVFhEUkRZKTsKKyAgICBucmZfdWFydF90eGRfc2V0KFVBUlRfSU5TVEFOQ0UsICpzVHJhbnNtaXRCdWZmZXIrKyk7CisgICAgbnJmX3VhcnRfdGFza190cmlnZ2VyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX1RBU0tfU1RBUlRUWCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIEludGVycnVwdCBoYW5kbGVyIG9mIFVBUlQwIHBlcmlwaGVyaWFsLgorICovCit2b2lkIFVBUlRFMF9VQVJUMF9JUlFIYW5kbGVyKHZvaWQpCit7CisgICAgLy8gQ2hlY2sgaWYgYW55IGVycm9yIGhhcyBiZWVuIGRldGVjdGVkLgorICAgIGlmIChucmZfdWFydF9ldmVudF9jaGVjayhVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9FVkVOVF9FUlJPUikpCisgICAgeworICAgICAgICAvLyBDbGVhciBlcnJvciBldmVudCBhbmQgaWdub3JlIGVycm9ub3VzIGJ5dGUgaW4gUlhEIHJlZ2lzdGVyLgorICAgICAgICBucmZfdWFydF9ldmVudF9jbGVhcihVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9FVkVOVF9FUlJPUik7CisgICAgICAgIG5yZl91YXJ0X2V2ZW50X2NsZWFyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX1JYRFJEWSk7CisgICAgfQorICAgIGVsc2UgaWYgKG5yZl91YXJ0X2V2ZW50X2NoZWNrKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX1JYRFJEWSkpCisgICAgeworICAgICAgICAvLyBDbGVhciBSWERSRFkgZXZlbnQuCisgICAgICAgIG5yZl91YXJ0X2V2ZW50X2NsZWFyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX1JYRFJEWSk7CisKKyAgICAgICAgLy8gUmVhZCBieXRlIGZyb20gdGhlIFVBUlQgYnVmZmVyLgorICAgICAgICB1aW50OF90IGJ5dGUgPSBucmZfdWFydF9yeGRfZ2V0KFVBUlRfSU5TVEFOQ0UpOworCisgICAgICAgIGlmICghaXNSeEJ1ZmZlckZ1bGwoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc1JlY2VpdmVCdWZmZXJbc1JlY2VpdmVIZWFkXSA9IGJ5dGU7CisgICAgICAgICAgICBzUmVjZWl2ZUhlYWQgPSAoc1JlY2VpdmVIZWFkICsgMSkgJSBVQVJUX1JYX0JVRkZFUl9TSVpFOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG5yZl91YXJ0X2V2ZW50X2NoZWNrKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX1RYRFJEWSkpCisgICAgeworICAgICAgICAvLyBDbGVhciBUWERSRFkgZXZlbnQuCisgICAgICAgIG5yZl91YXJ0X2V2ZW50X2NsZWFyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX1RYRFJEWSk7CisKKyAgICAgICAgLy8gU2VuZCBhbnkgbW9yZSBieXRlcyBpZiBhdmFpbGFibGUgb3IgY2FsbCBhcHBsaWNhdGlvbiBhYm91dCBUWCBkb25lLgorICAgICAgICBpZiAoc1RyYW5zbWl0TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBucmZfdWFydF90eGRfc2V0KFVBUlRfSU5TVEFOQ0UsICpzVHJhbnNtaXRCdWZmZXIrKyk7CisgICAgICAgICAgICBzVHJhbnNtaXRMZW5ndGgtLTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNUcmFuc21pdERvbmUgPSB0cnVlOworICAgICAgICAgICAgbnJmX3VhcnRfdGFza190cmlnZ2VyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX1RBU0tfU1RPUFRYKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBUaGUgVUFSVCBkcml2ZXIgd2VhayBmdW5jdGlvbnMgZGVmaW5pdGlvbi4KKyAqCisgKi8KK09UX1RPT0xfV0VBSyB2b2lkIG90UGxhdFVhcnRTZW5kRG9uZSh2b2lkKQoreworfQorCitPVF9UT09MX1dFQUsgdm9pZCBvdFBsYXRVYXJ0UmVjZWl2ZWQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICAodm9pZClhQnVmOworICAgICh2b2lkKWFCdWZMZW5ndGg7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJkNGI5ZgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDc1IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGlib3BlbnRocmVhZC1wb3NpeC5hCisKK2xpYm9wZW50aHJlYWRfcG9zaXhfYV9DUFBGTEFHUyAgICAgICAgICAgID0gXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3JtcyAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjL2NvcmUgICAgICAgICAgICAgICAgXAorICAgIC1EX0dOVV9TT1VSQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX3Bvc2l4X2FfU09VUkNFUyAgICAgICAgICAgICA9IFwKKyAgICBhbGFybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1pc2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9nZ2luZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhZGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFuZG9tLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1YXJ0LXBvc2l4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCitsaWJvcGVudGhyZWFkX3Bvc2l4X2FfU09VUkNFUyAgICAgICAgICAgICs9IFwKKyAgICBkaWFnLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEkKK2xpYm9wZW50aHJlYWRfcG9zaXhfYV9TT1VSQ0VTICAgICAgICAgICAgKz0gXAorICAgIHNwaS1zdHVicy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgcGxhdGZvcm0tcG9zaXguaCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0Rhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLQorbGlib3BlbnRocmVhZF9wb3NpeF9hX0xJQkFERCAgICAgICAgICAgICAgPSBcCisgICAgJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMgJChEYXNoKXR5cGUgZiAkKERhc2gpbmFtZSAiKi5vIikKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKHdpbGRjYXJkICouZ2NkYSAqLmdjbm8pCitlbmRpZiAjIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvUkVBRE1FLm1kIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGM2ZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L1JFQURNRS5tZApAQCAtMCwwICsxLDU3IEBACisjIE9wZW5UaHJlYWQgb24gUE9TSVggRW11bGF0aW9uIEV4YW1wbGUKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciBQT1NJWCBlbXVsYXRpb24uCisKKyMjIEJ1aWxkIEV4YW1wbGVzCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4KKyQgLi9ib290c3RyYXAKKyQgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1wb3NpeAorYGBgCisKK0FmdGVyIGEgc3VjY2Vzc2Z1bCBidWlsZCwgdGhlIGBlbGZgIGZpbGVzIGFyZSBmb3VuZCBpbgorYDxwYXRoLXRvLW9wZW50aHJlYWQ+L291dHB1dC88cGxhdGZvcm0+L2JpbmAuCisKKyMjIAorCisjIyBJbnRlcmFjdAorCisxLiBTcGF3biB0aGUgcHJvY2VzczoKKworYGBgYmFzaAorJCBjZCA8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQvPHBsYXRmb3JtPi9iaW4KKyQgLi9vdC1jbGktZnRkIDEKK2BgYAorCisyLiBUeXBlIGBoZWxwYCBmb3IgbGlzdCBvZiBjb21tYW5kcy4KKworYGBgYmFzaAorPiBoZWxwCitoZWxwCitjaGFubmVsCitjaGlsZHRpbWVvdXQKK2NvbnRleHRyZXVzZWRlbGF5CitleHRhZGRyCitleHRwYW5pZAoraXBhZGRyCitrZXlzZXF1ZW5jZQorbGVhZGVyd2VpZ2h0CittYXN0ZXJrZXkKK21vZGUKK25ldGRhdGFyZWdpc3RlcgorbmV0d29ya2lkdGltZW91dAorbmV0d29ya25hbWUKK3BhbmlkCitwaW5nCitwcmVmaXgKK3JlbGVhc2Vyb3V0ZXJpZAorcmxvYzE2Cityb3V0ZQorcm91dGVydXBncmFkZXRocmVzaG9sZAorc2Nhbgorc3RhcnQKK3N0YXRlCitzdG9wCit3aGl0ZWxpc3QKK2BgYApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvYWxhcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzhkNDUxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L2FsYXJtLmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmg+CisKK3N0YXRpYyBib29sIHNfaXNfcnVubmluZyA9IGZhbHNlOworc3RhdGljIHVpbnQzMl90IHNfYWxhcm0gPSAwOworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHNfc3RhcnQ7CisKK3ZvaWQgcGxhdGZvcm1BbGFybUluaXQodm9pZCkKK3sKKyAgICBnZXR0aW1lb2ZkYXkoJnNfc3RhcnQsIE5VTEwpOworfQorCit1aW50MzJfdCBvdFBsYXRBbGFybUdldE5vdyh2b2lkKQoreworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisgICAgdGltZXJzdWIoJnR2LCAmc19zdGFydCwgJnR2KTsKKworICAgIHJldHVybiAodWludDMyX3QpKCh0di50dl9zZWMgKiAxMDAwKSArICh0di50dl91c2VjIC8gMTAwMCkpOworfQorCit2b2lkIG90UGxhdEFsYXJtU3RhcnRBdChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IHQwLCB1aW50MzJfdCBkdCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc19hbGFybSA9IHQwICsgZHQ7CisgICAgc19pc19ydW5uaW5nID0gdHJ1ZTsKK30KKwordm9pZCBvdFBsYXRBbGFybVN0b3Aob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzX2lzX3J1bm5pbmcgPSBmYWxzZTsKK30KKwordm9pZCBwbGF0Zm9ybUFsYXJtVXBkYXRlVGltZW91dChzdHJ1Y3QgdGltZXZhbCAqYVRpbWVvdXQpCit7CisgICAgaW50MzJfdCByZW1haW5pbmc7CisKKyAgICBpZiAoYVRpbWVvdXQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc19pc19ydW5uaW5nKQorICAgIHsKKyAgICAgICAgcmVtYWluaW5nID0gKGludDMyX3QpKHNfYWxhcm0gLSBvdFBsYXRBbGFybUdldE5vdygpKTsKKworICAgICAgICBpZiAocmVtYWluaW5nID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYVRpbWVvdXQtPnR2X3NlYyA9IHJlbWFpbmluZyAvIDEwMDA7CisgICAgICAgICAgICBhVGltZW91dC0+dHZfdXNlYyA9IChyZW1haW5pbmcgJSAxMDAwKSAqIDEwMDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhVGltZW91dC0+dHZfc2VjID0gMDsKKyAgICAgICAgICAgIGFUaW1lb3V0LT50dl91c2VjID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhVGltZW91dC0+dHZfc2VjID0gMTA7CisgICAgICAgIGFUaW1lb3V0LT50dl91c2VjID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgcGxhdGZvcm1BbGFybVByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIGludDMyX3QgcmVtYWluaW5nOworCisgICAgaWYgKHNfaXNfcnVubmluZykKKyAgICB7CisgICAgICAgIHJlbWFpbmluZyA9IChpbnQzMl90KShzX2FsYXJtIC0gb3RQbGF0QWxhcm1HZXROb3coKSk7CisKKyAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzX2lzX3J1bm5pbmcgPSBmYWxzZTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworICAgICAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RQbGF0RGlhZ0FsYXJtRmlyZWQoYUluc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90UGxhdEFsYXJtRmlyZWQoYUluc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9kaWFnLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvZGlhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZWM1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvZGlhZy5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworLyoqCisgKiBEaWFnbm9zdGljcyBtb2RlIHZhcmlhYmxlcy4KKyAqCisgKi8KK3N0YXRpYyBib29sIHNEaWFnTW9kZSA9IGZhbHNlOworCit2b2lkIG90UGxhdERpYWdQcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgLy8gQWRkIG1vcmUgcGxhcmZvcm0gc3BlY2lmaWMgZGlhZ25vc3RpY3MgZmVhdHVyZXMgaGVyZS4KKyAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAiZGlhZyBmZWF0dXJlICclcycgaXMgbm90IHN1cHBvcnRlZFxyXG4iLCBhcmd2WzBdKTsKKyAgICAodm9pZCkgYXJnYzsKKyAgICAodm9pZCkgYUluc3RhbmNlOworfQorCit2b2lkIG90UGxhdERpYWdNb2RlU2V0KGJvb2wgYU1vZGUpCit7CisgICAgc0RpYWdNb2RlID0gYU1vZGU7Cit9CisKK2Jvb2wgb3RQbGF0RGlhZ01vZGVHZXQoKQoreworICAgIHJldHVybiBzRGlhZ01vZGU7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ0NoYW5uZWxTZXQodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICAodm9pZCkgYUNoYW5uZWw7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ1R4UG93ZXJTZXQoaW50OF90IGFUeFBvd2VyKQoreworICAgICh2b2lkKSBhVHhQb3dlcjsKK30KKwordm9pZCBvdFBsYXREaWFnUmFkaW9SZWNlaXZlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgICh2b2lkKSBhRnJhbWU7CisgICAgKHZvaWQpIGFFcnJvcjsKK30KKwordm9pZCBvdFBsYXREaWFnQWxhcm1DYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9mbGFzaC13aW5kb3dzLXN0dWJzLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvZmxhc2gtd2luZG93cy1zdHVicy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NzY4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvZmxhc2gtd2luZG93cy1zdHVicy5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCitvdEVycm9yIHV0aWxzRmxhc2hJbml0KHZvaWQpCit7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaEdldFNpemUodm9pZCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoRXJhc2VQYWdlKHVpbnQzMl90IGFBZGRyZXNzKQoreworICAgIHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaFN0YXR1c1dhaXQodWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHJldHVybiAwOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoUmVhZCh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGE2MmFjCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L2ZsYXNoLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL2ZsYXNoLmgiCisKK3N0YXRpYyBpbnQgc0ZsYXNoRmQ7Cit1aW50MzJfdCBzRXJhc2VBZGRyZXNzOworCitlbnVtCit7CisgICAgRkxBU0hfU0laRSA9IDB4NDAwMDAsCisgICAgRkxBU0hfUEFHRV9TSVpFID0gMHg4MDAsCisgICAgRkxBU0hfUEFHRV9OVU0gPSAxMjgsCit9OworCitvdEVycm9yIHV0aWxzRmxhc2hJbml0KHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY2hhciBmaWxlTmFtZVsyMF07CisgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgYm9vbCBjcmVhdGUgPSBmYWxzZTsKKyAgICBjb25zdCBjaGFyICpvZmZzZXQgPSBnZXRlbnYoIlBPUlRfT0ZGU0VUIik7CisKKyAgICBtZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3QpKTsKKworICAgIGlmIChzdGF0KCJ0bXAiLCAmc3QpID09IC0xKQorICAgIHsKKyAgICAgICAgbWtkaXIoInRtcCIsIDA3NzcpOworICAgIH0KKworICAgIGlmIChvZmZzZXQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG9mZnNldCA9ICIwIjsKKyAgICB9CisKKyAgICBzbnByaW50ZihmaWxlTmFtZSwgc2l6ZW9mKGZpbGVOYW1lKSwgInRtcC8lc18lZC5mbGFzaCIsIG9mZnNldCwgTk9ERV9JRCk7CisKKyAgICBpZiAoYWNjZXNzKGZpbGVOYW1lLCAwKSkKKyAgICB7CisgICAgICAgIGNyZWF0ZSA9IHRydWU7CisgICAgfQorCisgICAgc0ZsYXNoRmQgPSBvcGVuKGZpbGVOYW1lLCBPX1JEV1IgfCBPX0NSRUFULCAwNjY2KTsKKyAgICBsc2VlayhzRmxhc2hGZCwgMCwgU0VFS19TRVQpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKHNGbGFzaEZkID49IDAsIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKworICAgIGlmIChjcmVhdGUpCisgICAgeworICAgICAgICBmb3IgKHVpbnQxNl90IGluZGV4ID0gMDsgaW5kZXggPCBGTEFTSF9QQUdFX05VTTsgaW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSB1dGlsc0ZsYXNoRXJhc2VQYWdlKGluZGV4ICogRkxBU0hfUEFHRV9TSVpFKTsKKyAgICAgICAgICAgIG90RVhQRUNUKGVycm9yID09IE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaEdldFNpemUodm9pZCkKK3sKKyAgICByZXR1cm4gRkxBU0hfU0laRTsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoRXJhc2VQYWdlKHVpbnQzMl90IGFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQzMl90IGFkZHJlc3M7CisgICAgdWludDhfdCBkdW1teVBhZ2VbIEZMQVNIX1NJWkUgXTsKKworICAgIG90RVhQRUNUX0FDVElPTihzRmxhc2hGZCA+PSAwLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgb3RFWFBFQ1RfQUNUSU9OKGFBZGRyZXNzIDwgRkxBU0hfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgLy8gR2V0IHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGZsYXNoIHBhZ2UgdGhhdCBpbmNsdWRlcyBhQWRkcmVzcworICAgIGFkZHJlc3MgPSBhQWRkcmVzcyAmICh+KHVpbnQzMl90KShGTEFTSF9QQUdFX1NJWkUgLSAxKSk7CisKKyAgICAvLyBzZXQgdGhlIHBhZ2UgdG8gdGhlIGVyYXNlZCBzdGF0ZS4KKyAgICBtZW1zZXQoKHZvaWQgKikoJmR1bW15UGFnZVswXSksIDB4ZmYsIEZMQVNIX1BBR0VfU0laRSk7CisKKyAgICAvLyBXcml0ZSB0aGUgcGFnZQorICAgIHNzaXplX3QgcjsKKyAgICByID0gIHB3cml0ZShzRmxhc2hGZCwgJihkdW1teVBhZ2VbMF0pLCBGTEFTSF9QQUdFX1NJWkUsIChvZmZfdClhZGRyZXNzKTsKKyAgICBvdEVYUEVDVF9BQ1RJT04oKChpbnQpcikgPT0gKChpbnQpKEZMQVNIX1BBR0VfU0laRSkpLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaFN0YXR1c1dhaXQodWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgKHZvaWQpYVRpbWVvdXQ7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHVpbnQzMl90IHJldCA9IDA7CisgICAgdWludDMyX3QgaW5kZXggPSAwOworICAgIHVpbnQ4X3QgYnl0ZTsKKworICAgIG90RVhQRUNUKHNGbGFzaEZkID49IDAgJiYgYUFkZHJlc3MgPCBGTEFTSF9TSVpFKTsKKworICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFTaXplOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgb3RFWFBFQ1QoKHJldCA9IHV0aWxzRmxhc2hSZWFkKGFBZGRyZXNzICsgaW5kZXgsICZieXRlLCAxKSkgPT0gMSk7CisgICAgICAgIC8vIFVzZSBiaXR3aXNlIEFORCB0byBlbXVsYXRlIHRoZSBiZWhhdmlvciBvZiBmbGFzaCBtZW1vcnkKKyAgICAgICAgYnl0ZSAmPSBhRGF0YVtpbmRleF07CisgICAgICAgIG90RVhQRUNUKChyZXQgPSAodWludDMyX3QpcHdyaXRlKHNGbGFzaEZkLCAmYnl0ZSwgMSwgKG9mZl90KShhQWRkcmVzcyArIGluZGV4KSkpID09IDEpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hSZWFkKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgdWludDMyX3QgcmV0ID0gMDsKKworICAgIG90RVhQRUNUKHNGbGFzaEZkID49IDAgJiYgYUFkZHJlc3MgPCBGTEFTSF9TSVpFKTsKKyAgICByZXQgPSAodWludDMyX3QpcHJlYWQoc0ZsYXNoRmQsIGFEYXRhLCBhU2l6ZSwgKG9mZl90KWFBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L2xvZ2dpbmcuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9sb2dnaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxYzFkNAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9sb2dnaW5nLmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBsYXRmb3JtLXBvc2l4LmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmg+CisKKyNpbmNsdWRlICJ1dGlscy9jb2RlX3V0aWxzLmgiCisKKy8vIE1hY3JvIHRvIGFwcGVuZCBjb250ZW50IHRvIGVuZCBvZiB0aGUgbG9nIHN0cmluZy4KKworI2RlZmluZSBMT0dfUFJJTlRGKC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2hhcnNXcml0dGVuID0gc25wcmludGYoJmxvZ1N0cmluZ1tvZmZzZXRdLCBzaXplb2YobG9nU3RyaW5nKSAtIG9mZnNldCAsIF9fVkFfQVJHU19fKTsgIFwKKyAgICBvdEVYUEVDVF9BQ1RJT04oY2hhcnNXcml0dGVuID49IDAsIGxvZ1N0cmluZ1tvZmZzZXRdID0gMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG9mZnNldCArPSAodW5zaWduZWQgaW50KWNoYXJzV3JpdHRlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgb3RFWFBFQ1RfQUNUSU9OKG9mZnNldCA8IHNpemVvZihsb2dTdHJpbmcpLCBsb2dTdHJpbmdbc2l6ZW9mKGxvZ1N0cmluZykgLTEgXSA9IDApCisKK3ZvaWQgb3RQbGF0TG9nKG90TG9nTGV2ZWwgYUxvZ0xldmVsLCBvdExvZ1JlZ2lvbiBhTG9nUmVnaW9uLCBjb25zdCBjaGFyICphRm9ybWF0LCAuLi4pCit7CisgICAgY2hhciBsb2dTdHJpbmdbNTEyXTsKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICAgIGludCBjaGFyc1dyaXR0ZW47CisgICAgdmFfbGlzdCBhcmdzOworCisgICAgb2Zmc2V0ID0gMDsKKworICAgIExPR19QUklOVEYoIlslZF0gIiwgTk9ERV9JRCk7CisKKyAgICB2YV9zdGFydChhcmdzLCBhRm9ybWF0KTsKKyAgICBjaGFyc1dyaXR0ZW4gPSB2c25wcmludGYoJmxvZ1N0cmluZ1tvZmZzZXRdLCBzaXplb2YobG9nU3RyaW5nKSAtIG9mZnNldCwgYUZvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGNoYXJzV3JpdHRlbiA+PSAwLCBsb2dTdHJpbmdbb2Zmc2V0XSA9IDApOworCitleGl0OgorI2lmbmRlZiBfV0lOMzIKKyAgICBzeXNsb2coTE9HX0NSSVQsICIlcyIsIGxvZ1N0cmluZyk7CisjZWxzZQorICAgIHByaW50ZigiJXNcclxuIiwgbG9nU3RyaW5nKTsKKyNlbmRpZgorCisgICAgKHZvaWQpYUxvZ0xldmVsOworICAgICh2b2lkKWFMb2dSZWdpb247Cit9CisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9taXNjLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZDQxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvbWlzYy5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9taXNjLmg+CisKKyNpZm5kZWYgX1dJTjMyCitleHRlcm4gaW50ICAgICAgZ0FyZ3VtZW50c0NvdW50OworZXh0ZXJuIGNoYXIgICAqKmdBcmd1bWVudHM7CisjZW5kaWYKKwordm9pZCBvdFBsYXRSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisjaWZuZGVmIF9XSU4zMgorICAgIGNoYXIgKmFyZ3ZbZ0FyZ3VtZW50c0NvdW50ICsgMV07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdBcmd1bWVudHNDb3VudDsgKytpKQorICAgIHsKKyAgICAgICAgYXJndltpXSA9IGdBcmd1bWVudHNbaV07CisgICAgfQorCisgICAgYXJndltnQXJndW1lbnRzQ291bnRdID0gTlVMTDsKKworICAgIHBsYXRmb3JtUmFkaW9EZWluaXQoKTsKKyAgICBwbGF0Zm9ybVVhcnRSZXN0b3JlKCk7CisKKyAgICBleGVjdnAoYXJndlswXSwgYXJndik7CisgICAgcGVycm9yKCJyZXNldCBmYWlsZWQiKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisjZWxzZQorICAgIC8vIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIG9uIHRoZSBXaW5kb3dzIHBsYXRmb3JtLgorI2VuZGlmIC8vIF9XSU4zMgorICAgICh2b2lkKWFJbnN0YW5jZTsKK30KKworb3RQbGF0UmVzZXRSZWFzb24gb3RQbGF0R2V0UmVzZXRSZWFzb24ob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfUExBVF9SRVNFVF9SRUFTT05fUE9XRVJfT047Cit9CisKK3ZvaWQgb3RQbGF0V2FrZUhvc3Qodm9pZCkKK3sKKyAgICAvLyBUT0RPOiBpbXBsZW1lbnQgYW4gb3BlcmF0aW9uIHRvIHdha2UgdGhlIGhvc3QgZnJvbSBzbGVlcCBzdGF0ZS4KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9vcGVudGhyZWFkLWNvcmUtcG9zaXgtY29uZmlnLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvb3BlbnRocmVhZC1jb3JlLXBvc2l4LWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDVkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvb3BlbnRocmVhZC1jb3JlLXBvc2l4LWNvbmZpZy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHBvc2l4IGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGNvbnN0YW50cworICogICBmb3IgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9QT1NJWF9DT05GSUdfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT1JFX1BPU0lYX0NPTkZJR19IXworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVAorICoKKyAqIERlZmluZSB0byAxIHRvIGVuYWJsZSBkZWZhdWx0IGxvZyBvdXRwdXQuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQgICAgICAgICAgICAgMQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09SRV9QT1NJWF9DT05GSUdfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9wbGF0Zm9ybS1wb3NpeC5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3BsYXRmb3JtLXBvc2l4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0MDQyNAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9wbGF0Zm9ybS1wb3NpeC5oCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSAocG9zaXggb3Igd2luZG93cykgcGxhdGZvcm0tc3BlY2lmaWMgaW5pdGlhbGl6ZXJzLgorICovCisKKyNpZm5kZWYgUExBVEZPUk1fUE9TSVhfSF8KKyNkZWZpbmUgUExBVEZPUk1fUE9TSVhfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2lmIF9XSU4zMgorI2luY2x1ZGUgPFdpblNvY2syLmg+CisjaW5jbHVkZSA8V1MydGNwaXAuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZGVmaW5lIFBPTEwgV1NBUG9sbAorI2RlZmluZSBzc2l6ZV90IGludAorI2luY2x1ZGUgPHRpbWUuaD4KKyNkZWZpbmUgbG9jYWx0aW1lIF9sb2NhbHRpbWUzMgorLy8gSW4gdXNlciBtb2RlLCBkZWZpbmUgc29tZSBMaW51eCBmdW5jdGlvbnMKK19fZm9yY2VpbmxpbmUgaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopCit7CisgICAgKHZvaWQpdHo7CisgICAgdHYtPnR2X3NlYyA9IF90aW1lMzIoTlVMTCk7CisgICAgdHYtPnR2X3VzZWMgPSAwOworICAgIHJldHVybiAwOworfQorX19mb3JjZWlubGluZSB2b2lkIHRpbWVyc3ViKHN0cnVjdCB0aW1ldmFsICphLCBzdHJ1Y3QgdGltZXZhbCAqYiwgc3RydWN0IHRpbWV2YWwgKnJlcykKK3sKKyAgICByZXMtPnR2X3NlYyA9IChsb25nKV9kaWZmdGltZTMyKGEtPnR2X3NlYywgYi0+dHZfc2VjKTsKKyAgICByZXMtPnR2X3VzZWMgPSAwOworfQorI2Vsc2UKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZGVmaW5lIFBPTEwgcG9sbAorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworLyoqCisgKiBVbmlxdWUgbm9kZSBJRC4KKyAqCisgKi8KK2V4dGVybiB1aW50MzJfdCBOT0RFX0lEOworCisvKioKKyAqIFdlbGwta25vd24gVW5pcXVlIElEIHVzZWQgYnkgYSBzaW11bGF0ZWQgcmFkaW8gdGhhdCBzdXBwb3J0cyBwcm9taXNjdW91cyBtb2RlLgorICoKKyAqLworZXh0ZXJuIHVpbnQzMl90IFdFTExLTk9XTl9OT0RFX0lEOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGFsYXJtIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybUFsYXJtSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdGltZSByZW1haW5pbmcgdW50aWwgdGhlIGFsYXJtIGZpcmVzLgorICoKKyAqIEBwYXJhbVtvdXRdICBhVGltZXZhbCAgQSBwb2ludGVyIHRvIHRoZSB0aW1ldmFsIHN0cnVjdC4KKyAqCisgKi8KK3ZvaWQgcGxhdGZvcm1BbGFybVVwZGF0ZVRpbWVvdXQoc3RydWN0IHRpbWV2YWwgKnR2KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGFsYXJtIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybUFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHJhZGlvIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybVJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGRlaW5pdGlhbGl6ZXMgdGhlIHJhZGlvIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybVJhZGlvRGVpbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldHMgd2l0aCBmaWxlIGRlc2NyaXB0b3JzIHVzZWQgYnkgdGhlIHJhZGlvIGRyaXZlci4KKyAqCisgKiBAcGFyYW1baW5vdXRdICBhUmVhZEZkU2V0ICAgQSBwb2ludGVyIHRvIHRoZSByZWFkIGZpbGUgZGVzY3JpcHRvcnMuCisgKiBAcGFyYW1baW5vdXRdICBhV3JpdGVGZFNldCAgQSBwb2ludGVyIHRvIHRoZSB3cml0ZSBmaWxlIGRlc2NyaXB0b3JzLgorICogQHBhcmFtW2lub3V0XSAgYU1heEZkICAgICAgIEEgcG9pbnRlciB0byB0aGUgbWF4IGZpbGUgZGVzY3JpcHRvci4KKyAqCisgKi8KK3ZvaWQgcGxhdGZvcm1SYWRpb1VwZGF0ZUZkU2V0KGZkX3NldCAqYVJlYWRGZFNldCwgZmRfc2V0ICphV3JpdGVGZFNldCwgaW50ICphTWF4RmQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgcmFkaW8gZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICovCit2b2lkIHBsYXRmb3JtUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcmFuZG9tIG51bWJlciBzZXJ2aWNlIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqCisgKi8KK3ZvaWQgcGxhdGZvcm1SYW5kb21Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldHMgd2l0aCBmaWxlIGRlc2NyaXB0b3JzIHVzZWQgYnkgdGhlIFVBUlQgZHJpdmVyLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIGFSZWFkRmRTZXQgICBBIHBvaW50ZXIgdG8gdGhlIHJlYWQgZmlsZSBkZXNjcmlwdG9ycy4KKyAqIEBwYXJhbVtpbm91dF0gIGFXcml0ZUZkU2V0ICBBIHBvaW50ZXIgdG8gdGhlIHdyaXRlIGZpbGUgZGVzY3JpcHRvcnMuCisgKiBAcGFyYW1baW5vdXRdICBhTWF4RmQgICAgICAgQSBwb2ludGVyIHRvIHRoZSBtYXggZmlsZSBkZXNjcmlwdG9yLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybVVhcnRVcGRhdGVGZFNldChmZF9zZXQgKmFSZWFkRmRTZXQsIGZkX3NldCAqYVdyaXRlRmRTZXQsIGZkX3NldCAqYUVycm9yRmRTZXQsIGludCAqYU1heEZkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHJhZGlvIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybVVhcnRQcm9jZXNzKHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgdGhlIFVhcnQuCisgKgorICovCit2b2lkIHBsYXRmb3JtVWFydFJlc3RvcmUodm9pZCk7CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fUE9TSVhfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9wbGF0Zm9ybS5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmMTQzNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXplcnMuCisgKi8KKworI2luY2x1ZGUgInBsYXRmb3JtLXBvc2l4LmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdGFza2xldC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKwordWludDMyX3QgTk9ERV9JRCA9IDE7Cit1aW50MzJfdCBXRUxMS05PV05fTk9ERV9JRCA9IDM0OworCisjaWZuZGVmIF9XSU4zMgoraW50ICAgICBnQXJndW1lbnRzQ291bnQgPSAwOworY2hhciAgKipnQXJndW1lbnRzID0gTlVMTDsKKyNlbmRpZgorCit2b2lkIFBsYXRmb3JtSW5pdChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGNoYXIgKmVuZHB0cjsKKworICAgIGlmIChhcmdjICE9IDIpCisgICAgeworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisjaWZuZGVmIF9XSU4zMgorICAgIG9wZW5sb2coYmFzZW5hbWUoYXJndlswXSksIExPR19QSUQsIExPR19VU0VSKTsKKyAgICBzZXRsb2dtYXNrKHNldGxvZ21hc2soMCkgJiBMT0dfVVBUTyhMT0dfTk9USUNFKSk7CisKKyAgICBnQXJndW1lbnRzQ291bnQgPSBhcmdjOworICAgIGdBcmd1bWVudHMgPSBhcmd2OworI2VuZGlmCisKKyAgICBOT0RFX0lEID0gKHVpbnQzMl90KXN0cnRvbChhcmd2WzFdLCAmZW5kcHRyLCAwKTsKKworICAgIGlmICgqZW5kcHRyICE9ICdcMCcpCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgTk9ERV9JRDogJXNcbiIsIGFyZ3ZbMV0pOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgcGxhdGZvcm1BbGFybUluaXQoKTsKKyAgICBwbGF0Zm9ybVJhZGlvSW5pdCgpOworICAgIHBsYXRmb3JtUmFuZG9tSW5pdCgpOworfQorCit2b2lkIFBsYXRmb3JtUHJvY2Vzc0RyaXZlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIGZkX3NldCByZWFkX2ZkczsKKyAgICBmZF9zZXQgd3JpdGVfZmRzOworICAgIGZkX3NldCBlcnJvcl9mZHM7CisgICAgaW50IG1heF9mZCA9IC0xOworICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgaW50IHJ2YWw7CisKKyAgICBGRF9aRVJPKCZyZWFkX2Zkcyk7CisgICAgRkRfWkVSTygmd3JpdGVfZmRzKTsKKyAgICBGRF9aRVJPKCZlcnJvcl9mZHMpOworCisgICAgcGxhdGZvcm1VYXJ0VXBkYXRlRmRTZXQoJnJlYWRfZmRzLCAmd3JpdGVfZmRzLCAmZXJyb3JfZmRzLCAmbWF4X2ZkKTsKKyAgICBwbGF0Zm9ybVJhZGlvVXBkYXRlRmRTZXQoJnJlYWRfZmRzLCAmd3JpdGVfZmRzLCAmbWF4X2ZkKTsKKyAgICBwbGF0Zm9ybUFsYXJtVXBkYXRlVGltZW91dCgmdGltZW91dCk7CisKKyAgICBpZiAoIW90VGFza2xldHNBcmVQZW5kaW5nKGFJbnN0YW5jZSkpCisgICAgeworICAgICAgICBydmFsID0gc2VsZWN0KG1heF9mZCArIDEsICZyZWFkX2ZkcywgJndyaXRlX2ZkcywgJmVycm9yX2ZkcywgJnRpbWVvdXQpOworCisgICAgICAgIGlmICgocnZhbCA8IDApICYmIChlcnJubyAhPSBFSU5UUikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcnJvcigic2VsZWN0Iik7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwbGF0Zm9ybVVhcnRQcm9jZXNzKCk7CisgICAgcGxhdGZvcm1SYWRpb1Byb2Nlc3MoYUluc3RhbmNlKTsKKyAgICBwbGF0Zm9ybUFsYXJtUHJvY2VzcyhhSW5zdGFuY2UpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3JhZGlvLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDdkMTdjCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3JhZGlvLmMKQEAgLTAsMCArMSw3NTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCitlbnVtCit7CisgICAgSUVFRTgwMjE1NF9NSU5fTEVOR1RIICAgICAgICAgPSA1LAorICAgIElFRUU4MDIxNTRfTUFYX0xFTkdUSCAgICAgICAgID0gMTI3LAorICAgIElFRUU4MDIxNTRfQUNLX0xFTkdUSCAgICAgICAgID0gNSwKKworICAgIElFRUU4MDIxNTRfQlJPQURDQVNUICAgICAgICAgID0gMHhmZmZmLAorCisgICAgSUVFRTgwMjE1NF9GUkFNRV9UWVBFX0FDSyAgICAgPSAyIDw8IDAsCisgICAgSUVFRTgwMjE1NF9GUkFNRV9UWVBFX01BQ0NNRCAgPSAzIDw8IDAsCisgICAgSUVFRTgwMjE1NF9GUkFNRV9UWVBFX01BU0sgICAgPSA3IDw8IDAsCisKKyAgICBJRUVFODAyMTU0X1NFQ1VSSVRZX0VOQUJMRUQgICA9IDEgPDwgMywKKyAgICBJRUVFODAyMTU0X0ZSQU1FX1BFTkRJTkcgICAgICA9IDEgPDwgNCwKKyAgICBJRUVFODAyMTU0X0FDS19SRVFVRVNUICAgICAgICA9IDEgPDwgNSwKKyAgICBJRUVFODAyMTU0X1BBTklEX0NPTVBSRVNTSU9OICA9IDEgPDwgNiwKKworICAgIElFRUU4MDIxNTRfRFNUX0FERFJfTk9ORSAgICAgID0gMCA8PCAyLAorICAgIElFRUU4MDIxNTRfRFNUX0FERFJfU0hPUlQgICAgID0gMiA8PCAyLAorICAgIElFRUU4MDIxNTRfRFNUX0FERFJfRVhUICAgICAgID0gMyA8PCAyLAorICAgIElFRUU4MDIxNTRfRFNUX0FERFJfTUFTSyAgICAgID0gMyA8PCAyLAorCisgICAgSUVFRTgwMjE1NF9TUkNfQUREUl9OT05FICAgICAgPSAwIDw8IDYsCisgICAgSUVFRTgwMjE1NF9TUkNfQUREUl9TSE9SVCAgICAgPSAyIDw8IDYsCisgICAgSUVFRTgwMjE1NF9TUkNfQUREUl9FWFQgICAgICAgPSAzIDw8IDYsCisgICAgSUVFRTgwMjE1NF9TUkNfQUREUl9NQVNLICAgICAgPSAzIDw8IDYsCisKKyAgICBJRUVFODAyMTU0X0RTTl9PRkZTRVQgICAgICAgICA9IDIsCisgICAgSUVFRTgwMjE1NF9EU1RQQU5fT0ZGU0VUICAgICAgPSAzLAorICAgIElFRUU4MDIxNTRfRFNUQUREUl9PRkZTRVQgICAgID0gNSwKKworICAgIElFRUU4MDIxNTRfU0VDX0xFVkVMX01BU0sgICAgID0gNyA8PCAwLAorCisgICAgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV8wICAgICAgPSAwIDw8IDMsCisgICAgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV8xICAgICAgPSAxIDw8IDMsCisgICAgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV8yICAgICAgPSAyIDw8IDMsCisgICAgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV8zICAgICAgPSAzIDw8IDMsCisgICAgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV9NQVNLICAgPSAzIDw8IDMsCisKKyAgICBJRUVFODAyMTU0X01BQ0NNRF9EQVRBX1JFUSAgICA9IDQsCit9OworCitlbnVtCit7CisgICAgUE9TSVhfUkVDRUlWRV9TRU5TSVRJVklUWSA9IC0xMDAsICAvLyBkQm0KK307CisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitzdHJ1Y3QgUmFkaW9NZXNzYWdlCit7CisgICAgdWludDhfdCBtQ2hhbm5lbDsKKyAgICB1aW50OF90IG1Qc2R1W09UX1JBRElPX0ZSQU1FX01BWF9TSVpFXTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCitzdGF0aWMgdm9pZCByYWRpb1RyYW5zbWl0KHN0cnVjdCBSYWRpb01lc3NhZ2UgKm1zZywgY29uc3Qgc3RydWN0IG90UmFkaW9GcmFtZSAqcGt0KTsKK3N0YXRpYyB2b2lkIHJhZGlvU2VuZE1lc3NhZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKK3N0YXRpYyB2b2lkIHJhZGlvU2VuZEFjayh2b2lkKTsKK3N0YXRpYyB2b2lkIHJhZGlvUHJvY2Vzc0ZyYW1lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKK3N0YXRpYyBvdFJhZGlvU3RhdGUgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CitzdGF0aWMgc3RydWN0IFJhZGlvTWVzc2FnZSBzUmVjZWl2ZU1lc3NhZ2U7CitzdGF0aWMgc3RydWN0IFJhZGlvTWVzc2FnZSBzVHJhbnNtaXRNZXNzYWdlOworc3RhdGljIHN0cnVjdCBSYWRpb01lc3NhZ2Ugc0Fja01lc3NhZ2U7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNSZWNlaXZlRnJhbWU7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNUcmFuc21pdEZyYW1lOworc3RhdGljIG90UmFkaW9GcmFtZSBzQWNrRnJhbWU7CisKK3N0YXRpYyB1aW50OF90IHNFeHRlbmRlZEFkZHJlc3NbT1RfRVhUX0FERFJFU1NfU0laRV07CitzdGF0aWMgdWludDE2X3Qgc1Nob3J0QWRkcmVzczsKK3N0YXRpYyB1aW50MTZfdCBzUGFuaWQ7CitzdGF0aWMgaW50IHNTb2NrRmQ7CitzdGF0aWMgYm9vbCBzUHJvbWlzY3VvdXMgPSBmYWxzZTsKK3N0YXRpYyBib29sIHNBY2tXYWl0ID0gZmFsc2U7CitzdGF0aWMgdWludDE2X3Qgc1BvcnRPZmZzZXQgPSAwOworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGcmFtZVR5cGVBY2soY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgcmV0dXJuIChmcmFtZVswXSAmIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLKSA9PSBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfQUNLOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGcmFtZVR5cGVNYWNDbWQoY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgcmV0dXJuIChmcmFtZVswXSAmIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLKSA9PSBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfTUFDQ01EOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTZWN1cml0eUVuYWJsZWQoY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgcmV0dXJuIChmcmFtZVswXSAmIElFRUU4MDIxNTRfU0VDVVJJVFlfRU5BQkxFRCkgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzQWNrUmVxdWVzdGVkKGNvbnN0IHVpbnQ4X3QgKmZyYW1lKQoreworICAgIHJldHVybiAoZnJhbWVbMF0gJiBJRUVFODAyMTU0X0FDS19SRVFVRVNUKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNQYW5JZENvbXByZXNzZWQoY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgcmV0dXJuIChmcmFtZVswXSAmIElFRUU4MDIxNTRfUEFOSURfQ09NUFJFU1NJT04pICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0RhdGFSZXF1ZXN0KGNvbnN0IHVpbnQ4X3QgKmZyYW1lKQoreworICAgIGNvbnN0IHVpbnQ4X3QgKmN1ciA9IGZyYW1lOworICAgIHVpbnQ4X3Qgc2VjdXJpdHlDb250cm9sOworICAgIGJvb2wgcnZhbDsKKworICAgIC8vIEZDRiArIERTTgorICAgIGN1ciArPSAyICsgMTsKKworICAgIG90RVhQRUNUX0FDVElPTihpc0ZyYW1lVHlwZU1hY0NtZChmcmFtZSksIHJ2YWwgPSBmYWxzZSk7CisKKyAgICAvLyBEZXN0aW5hdGlvbiBQQU4gKyBBZGRyZXNzCisgICAgc3dpdGNoIChmcmFtZVsxXSAmIElFRUU4MDIxNTRfRFNUX0FERFJfTUFTSykKKyAgICB7CisgICAgY2FzZSBJRUVFODAyMTU0X0RTVF9BRERSX1NIT1JUOgorICAgICAgICBjdXIgKz0gc2l6ZW9mKG90UGFuSWQpICsgc2l6ZW9mKG90U2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElFRUU4MDIxNTRfRFNUX0FERFJfRVhUOgorICAgICAgICBjdXIgKz0gc2l6ZW9mKG90UGFuSWQpICsgc2l6ZW9mKG90RXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcnZhbCA9IGZhbHNlOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gU291cmNlIFBBTiArIEFkZHJlc3MKKyAgICBzd2l0Y2ggKGZyYW1lWzFdICYgSUVFRTgwMjE1NF9TUkNfQUREUl9NQVNLKQorICAgIHsKKyAgICBjYXNlIElFRUU4MDIxNTRfU1JDX0FERFJfU0hPUlQ6CisgICAgICAgIGlmICghaXNQYW5JZENvbXByZXNzZWQoZnJhbWUpKQorICAgICAgICB7CisgICAgICAgICAgICBjdXIgKz0gc2l6ZW9mKG90UGFuSWQpOworICAgICAgICB9CisKKyAgICAgICAgY3VyICs9IHNpemVvZihvdFNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJRUVFODAyMTU0X1NSQ19BRERSX0VYVDoKKyAgICAgICAgaWYgKCFpc1BhbklkQ29tcHJlc3NlZChmcmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1ciArPSBzaXplb2Yob3RQYW5JZCk7CisgICAgICAgIH0KKworICAgICAgICBjdXIgKz0gc2l6ZW9mKG90RXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcnZhbCA9IGZhbHNlOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gU2VjdXJpdHkgQ29udHJvbCArIEZyYW1lIENvdW50ZXIgKyBLZXkgSWRlbnRpZmllcgorICAgIGlmIChpc1NlY3VyaXR5RW5hYmxlZChmcmFtZSkpCisgICAgeworICAgICAgICBzZWN1cml0eUNvbnRyb2wgPSAqY3VyOworCisgICAgICAgIGlmIChzZWN1cml0eUNvbnRyb2wgJiBJRUVFODAyMTU0X1NFQ19MRVZFTF9NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICBjdXIgKz0gMSArIDQ7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHNlY3VyaXR5Q29udHJvbCAmIElFRUU4MDIxNTRfS0VZX0lEX01PREVfTUFTSykKKyAgICAgICAgeworICAgICAgICBjYXNlIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMDoKKyAgICAgICAgICAgIGN1ciArPSAwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJRUVFODAyMTU0X0tFWV9JRF9NT0RFXzE6CisgICAgICAgICAgICBjdXIgKz0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV8yOgorICAgICAgICAgICAgY3VyICs9IDU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMzoKKyAgICAgICAgICAgIGN1ciArPSA5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb21tYW5kIElECisgICAgcnZhbCA9IGN1clswXSA9PSBJRUVFODAyMTU0X01BQ0NNRF9EQVRBX1JFUTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGlubGluZSB1aW50OF90IGdldERzbihjb25zdCB1aW50OF90ICpmcmFtZSkKK3sKKyAgICByZXR1cm4gZnJhbWVbSUVFRTgwMjE1NF9EU05fT0ZGU0VUXTsKK30KKworc3RhdGljIGlubGluZSBvdFBhbklkIGdldERzdFBhbihjb25zdCB1aW50OF90ICpmcmFtZSkKK3sKKyAgICByZXR1cm4gKG90UGFuSWQpKChmcmFtZVtJRUVFODAyMTU0X0RTVFBBTl9PRkZTRVQgKyAxXSA8PCA4KSB8IGZyYW1lW0lFRUU4MDIxNTRfRFNUUEFOX09GRlNFVF0pOworfQorCitzdGF0aWMgaW5saW5lIG90U2hvcnRBZGRyZXNzIGdldFNob3J0QWRkcmVzcyhjb25zdCB1aW50OF90ICpmcmFtZSkKK3sKKyAgICByZXR1cm4gKG90U2hvcnRBZGRyZXNzKSgoZnJhbWVbSUVFRTgwMjE1NF9EU1RBRERSX09GRlNFVCArIDFdIDw8IDgpIHwgZnJhbWVbSUVFRTgwMjE1NF9EU1RBRERSX09GRlNFVF0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0RXh0QWRkcmVzcyhjb25zdCB1aW50OF90ICpmcmFtZSwgb3RFeHRBZGRyZXNzICphZGRyZXNzKQoreworICAgIHNpemVfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihvdEV4dEFkZHJlc3MpOyBpKyspCisgICAgeworICAgICAgICBhZGRyZXNzLT5tOFtpXSA9IGZyYW1lW0lFRUU4MDIxNTRfRFNUQUREUl9PRkZTRVQgKyAoc2l6ZW9mKG90RXh0QWRkcmVzcykgLSAxIC0gaSldOworICAgIH0KK30KKworc3RhdGljIHVpbnQxNl90IGNyYzE2X2NpdHQodWludDE2X3QgYUZjcywgdWludDhfdCBhQnl0ZSkKK3sKKyAgICAvLyBDUkMtMTYvQ0NJVFQsIENSQy0xNi9DQ0lUVC1UUlVFLCBDUkMtQ0NJVFQKKyAgICAvLyB3aWR0aD0xNiBwb2x5PTB4MTAyMSBpbml0PTB4MDAwMCByZWZpbj10cnVlIHJlZm91dD10cnVlIHhvcm91dD0weDAwMDAgY2hlY2s9MHgyMTg5IG5hbWU9IktFUk1JVCIKKyAgICAvLyBodHRwOi8vcmV2ZW5nLnNvdXJjZWZvcmdlLm5ldC9jcmMtY2F0YWxvZ3VlLzE2Lmh0bSNjcmMuY2F0Lmtlcm1pdAorICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzRmNzVGFibGVbMjU2XSA9CisgICAgeworICAgICAgICAweDAwMDAsIDB4MTE4OSwgMHgyMzEyLCAweDMyOWIsIDB4NDYyNCwgMHg1N2FkLCAweDY1MzYsIDB4NzRiZiwKKyAgICAgICAgMHg4YzQ4LCAweDlkYzEsIDB4YWY1YSwgMHhiZWQzLCAweGNhNmMsIDB4ZGJlNSwgMHhlOTdlLCAweGY4ZjcsCisgICAgICAgIDB4MTA4MSwgMHgwMTA4LCAweDMzOTMsIDB4MjIxYSwgMHg1NmE1LCAweDQ3MmMsIDB4NzViNywgMHg2NDNlLAorICAgICAgICAweDljYzksIDB4OGQ0MCwgMHhiZmRiLCAweGFlNTIsIDB4ZGFlZCwgMHhjYjY0LCAweGY5ZmYsIDB4ZTg3NiwKKyAgICAgICAgMHgyMTAyLCAweDMwOGIsIDB4MDIxMCwgMHgxMzk5LCAweDY3MjYsIDB4NzZhZiwgMHg0NDM0LCAweDU1YmQsCisgICAgICAgIDB4YWQ0YSwgMHhiY2MzLCAweDhlNTgsIDB4OWZkMSwgMHhlYjZlLCAweGZhZTcsIDB4Yzg3YywgMHhkOWY1LAorICAgICAgICAweDMxODMsIDB4MjAwYSwgMHgxMjkxLCAweDAzMTgsIDB4NzdhNywgMHg2NjJlLCAweDU0YjUsIDB4NDUzYywKKyAgICAgICAgMHhiZGNiLCAweGFjNDIsIDB4OWVkOSwgMHg4ZjUwLCAweGZiZWYsIDB4ZWE2NiwgMHhkOGZkLCAweGM5NzQsCisgICAgICAgIDB4NDIwNCwgMHg1MzhkLCAweDYxMTYsIDB4NzA5ZiwgMHgwNDIwLCAweDE1YTksIDB4MjczMiwgMHgzNmJiLAorICAgICAgICAweGNlNGMsIDB4ZGZjNSwgMHhlZDVlLCAweGZjZDcsIDB4ODg2OCwgMHg5OWUxLCAweGFiN2EsIDB4YmFmMywKKyAgICAgICAgMHg1Mjg1LCAweDQzMGMsIDB4NzE5NywgMHg2MDFlLCAweDE0YTEsIDB4MDUyOCwgMHgzN2IzLCAweDI2M2EsCisgICAgICAgIDB4ZGVjZCwgMHhjZjQ0LCAweGZkZGYsIDB4ZWM1NiwgMHg5OGU5LCAweDg5NjAsIDB4YmJmYiwgMHhhYTcyLAorICAgICAgICAweDYzMDYsIDB4NzI4ZiwgMHg0MDE0LCAweDUxOWQsIDB4MjUyMiwgMHgzNGFiLCAweDA2MzAsIDB4MTdiOSwKKyAgICAgICAgMHhlZjRlLCAweGZlYzcsIDB4Y2M1YywgMHhkZGQ1LCAweGE5NmEsIDB4YjhlMywgMHg4YTc4LCAweDliZjEsCisgICAgICAgIDB4NzM4NywgMHg2MjBlLCAweDUwOTUsIDB4NDExYywgMHgzNWEzLCAweDI0MmEsIDB4MTZiMSwgMHgwNzM4LAorICAgICAgICAweGZmY2YsIDB4ZWU0NiwgMHhkY2RkLCAweGNkNTQsIDB4YjllYiwgMHhhODYyLCAweDlhZjksIDB4OGI3MCwKKyAgICAgICAgMHg4NDA4LCAweDk1ODEsIDB4YTcxYSwgMHhiNjkzLCAweGMyMmMsIDB4ZDNhNSwgMHhlMTNlLCAweGYwYjcsCisgICAgICAgIDB4MDg0MCwgMHgxOWM5LCAweDJiNTIsIDB4M2FkYiwgMHg0ZTY0LCAweDVmZWQsIDB4NmQ3NiwgMHg3Y2ZmLAorICAgICAgICAweDk0ODksIDB4ODUwMCwgMHhiNzliLCAweGE2MTIsIDB4ZDJhZCwgMHhjMzI0LCAweGYxYmYsIDB4ZTAzNiwKKyAgICAgICAgMHgxOGMxLCAweDA5NDgsIDB4M2JkMywgMHgyYTVhLCAweDVlZTUsIDB4NGY2YywgMHg3ZGY3LCAweDZjN2UsCisgICAgICAgIDB4YTUwYSwgMHhiNDgzLCAweDg2MTgsIDB4OTc5MSwgMHhlMzJlLCAweGYyYTcsIDB4YzAzYywgMHhkMWI1LAorICAgICAgICAweDI5NDIsIDB4MzhjYiwgMHgwYTUwLCAweDFiZDksIDB4NmY2NiwgMHg3ZWVmLCAweDRjNzQsIDB4NWRmZCwKKyAgICAgICAgMHhiNThiLCAweGE0MDIsIDB4OTY5OSwgMHg4NzEwLCAweGYzYWYsIDB4ZTIyNiwgMHhkMGJkLCAweGMxMzQsCisgICAgICAgIDB4MzljMywgMHgyODRhLCAweDFhZDEsIDB4MGI1OCwgMHg3ZmU3LCAweDZlNmUsIDB4NWNmNSwgMHg0ZDdjLAorICAgICAgICAweGM2MGMsIDB4ZDc4NSwgMHhlNTFlLCAweGY0OTcsIDB4ODAyOCwgMHg5MWExLCAweGEzM2EsIDB4YjJiMywKKyAgICAgICAgMHg0YTQ0LCAweDViY2QsIDB4Njk1NiwgMHg3OGRmLCAweDBjNjAsIDB4MWRlOSwgMHgyZjcyLCAweDNlZmIsCisgICAgICAgIDB4ZDY4ZCwgMHhjNzA0LCAweGY1OWYsIDB4ZTQxNiwgMHg5MGE5LCAweDgxMjAsIDB4YjNiYiwgMHhhMjMyLAorICAgICAgICAweDVhYzUsIDB4NGI0YywgMHg3OWQ3LCAweDY4NWUsIDB4MWNlMSwgMHgwZDY4LCAweDNmZjMsIDB4MmU3YSwKKyAgICAgICAgMHhlNzBlLCAweGY2ODcsIDB4YzQxYywgMHhkNTk1LCAweGExMmEsIDB4YjBhMywgMHg4MjM4LCAweDkzYjEsCisgICAgICAgIDB4NmI0NiwgMHg3YWNmLCAweDQ4NTQsIDB4NTlkZCwgMHgyZDYyLCAweDNjZWIsIDB4MGU3MCwgMHgxZmY5LAorICAgICAgICAweGY3OGYsIDB4ZTYwNiwgMHhkNDlkLCAweGM1MTQsIDB4YjFhYiwgMHhhMDIyLCAweDkyYjksIDB4ODMzMCwKKyAgICAgICAgMHg3YmM3LCAweDZhNGUsIDB4NThkNSwgMHg0OTVjLCAweDNkZTMsIDB4MmM2YSwgMHgxZWYxLCAweDBmNzgKKyAgICB9OworICAgIHJldHVybiAoYUZjcyA+PiA4KSBeIHNGY3NUYWJsZVsoYUZjcyBeIGFCeXRlKSAmIDB4ZmZdOworfQorCit2b2lkIG90UGxhdFJhZGlvR2V0SWVlZUV1aTY0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCAqYUllZWVFdWk2NCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgYUllZWVFdWk2NFswXSA9IDB4MTg7CisgICAgYUllZWVFdWk2NFsxXSA9IDB4YjQ7CisgICAgYUllZWVFdWk2NFsyXSA9IDB4MzA7CisgICAgYUllZWVFdWk2NFszXSA9IDB4MDA7CisgICAgYUllZWVFdWk2NFs0XSA9IChOT0RFX0lEID4+IDI0KSAmIDB4ZmY7CisgICAgYUllZWVFdWk2NFs1XSA9IChOT0RFX0lEID4+IDE2KSAmIDB4ZmY7CisgICAgYUllZWVFdWk2NFs2XSA9IChOT0RFX0lEID4+IDgpICYgMHhmZjsKKyAgICBhSWVlZUV1aTY0WzddID0gTk9ERV9JRCAmIDB4ZmY7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IHBhbmlkKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzUGFuaWQgPSBwYW5pZDsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2Yoc0V4dGVuZGVkQWRkcmVzcyk7IGkrKykKKyAgICB7CisgICAgICAgIHNFeHRlbmRlZEFkZHJlc3NbaV0gPSBhZGRyZXNzW3NpemVvZihzRXh0ZW5kZWRBZGRyZXNzKSAtIDEgLSBpXTsKKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzU2hvcnRBZGRyZXNzID0gYWRkcmVzczsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzUHJvbWlzY3VvdXMgPSBhRW5hYmxlOworfQorCit2b2lkIHBsYXRmb3JtUmFkaW9Jbml0KHZvaWQpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2luIHNvY2thZGRyOworICAgIGNoYXIgKm9mZnNldDsKKyAgICBtZW1zZXQoJnNvY2thZGRyLCAwLCBzaXplb2Yoc29ja2FkZHIpKTsKKyAgICBzb2NrYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworICAgIG9mZnNldCA9IGdldGVudigiUE9SVF9PRkZTRVQiKTsKKworICAgIGlmIChvZmZzZXQpCisgICAgeworICAgICAgICBjaGFyICplbmRwdHI7CisKKyAgICAgICAgc1BvcnRPZmZzZXQgPSAodWludDE2X3Qpc3RydG9sKG9mZnNldCwgJmVuZHB0ciwgMCk7CisKKyAgICAgICAgaWYgKCplbmRwdHIgIT0gJ1wwJykKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFBPUlRfT0ZGU0VUOiAlc1xuIiwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBzUG9ydE9mZnNldCAqPSBXRUxMS05PV05fTk9ERV9JRDsKKyAgICB9CisKKyAgICBpZiAoc1Byb21pc2N1b3VzKQorICAgIHsKKyAgICAgICAgc29ja2FkZHIuc2luX3BvcnQgPSBodG9ucyg5MDAwICsgc1BvcnRPZmZzZXQgKyBXRUxMS05PV05fTk9ERV9JRCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNvY2thZGRyLnNpbl9wb3J0ID0gaHRvbnMoOTAwMCArIHNQb3J0T2Zmc2V0ICsgTk9ERV9JRCk7CisgICAgfQorCisgICAgc29ja2FkZHIuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKworICAgIHNTb2NrRmQgPSAoaW50KXNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CisgICAgYmluZChzU29ja0ZkLCAoc3RydWN0IHNvY2thZGRyICopJnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpKTsKKworICAgIHNSZWNlaXZlRnJhbWUubVBzZHUgPSBzUmVjZWl2ZU1lc3NhZ2UubVBzZHU7CisgICAgc1RyYW5zbWl0RnJhbWUubVBzZHUgPSBzVHJhbnNtaXRNZXNzYWdlLm1Qc2R1OworICAgIHNBY2tGcmFtZS5tUHNkdSA9IHNBY2tNZXNzYWdlLm1Qc2R1OworfQorCit2b2lkIHBsYXRmb3JtUmFkaW9EZWluaXQodm9pZCkKK3sKKyAgICBjbG9zZShzU29ja0ZkKTsKK30KKworYm9vbCBvdFBsYXRSYWRpb0lzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAoc1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEKSA/IHRydWUgOiBmYWxzZTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0VuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKCFvdFBsYXRSYWRpb0lzRW5hYmxlZChhSW5zdGFuY2UpKQorICAgIHsKKyAgICAgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfU0xFRVA7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9EaXNhYmxlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBpZiAob3RQbGF0UmFkaW9Jc0VuYWJsZWQoYUluc3RhbmNlKSkKKyAgICB7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvU2xlZXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfU0xFRVAgfHwgc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1JlY2VpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFDaGFubmVsKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgIHNBY2tXYWl0ID0gZmFsc2U7CisgICAgICAgIHNSZWNlaXZlRnJhbWUubUNoYW5uZWwgPSBhQ2hhbm5lbDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYVJhZGlvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhUmFkaW87CisKKyAgICBpZiAoc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RSYWRpb0ZyYW1lICpvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuICZzVHJhbnNtaXRGcmFtZTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAwOworfQorCitvdFJhZGlvQ2FwcyBvdFBsYXRSYWRpb0dldENhcHMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfUkFESU9fQ0FQU19OT05FOworfQorCitib29sIG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gc1Byb21pc2N1b3VzOworfQorCit2b2lkIHJhZGlvUmVjZWl2ZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgc3NpemVfdCBydmFsID0gcmVjdmZyb20oc1NvY2tGZCwgKGNoYXIgKikmc1JlY2VpdmVNZXNzYWdlLCBzaXplb2Yoc1JlY2VpdmVNZXNzYWdlKSwgMCwgTlVMTCwgTlVMTCk7CisKKyAgICBpZiAocnZhbCA8IDApCisgICAgeworICAgICAgICBwZXJyb3IoInJlY3Zmcm9tIik7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPSAodWludDhfdCkocnZhbCAtIDEpOworCisgICAgaWYgKHNBY2tXYWl0ICYmCisgICAgICAgIHNUcmFuc21pdEZyYW1lLm1DaGFubmVsID09IHNSZWNlaXZlTWVzc2FnZS5tQ2hhbm5lbCAmJgorICAgICAgICBpc0ZyYW1lVHlwZUFjayhzUmVjZWl2ZUZyYW1lLm1Qc2R1KSAmJgorICAgICAgICBnZXREc24oc1JlY2VpdmVGcmFtZS5tUHNkdSkgPT0gZ2V0RHNuKHNUcmFuc21pdEZyYW1lLm1Qc2R1KSkKKyAgICB7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgIHNBY2tXYWl0ID0gZmFsc2U7CisKKyAgICAgICAgb3RQbGF0UmFkaW9UeERvbmUoYUluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsICZzUmVjZWl2ZUZyYW1lLCBPVF9FUlJPUl9OT05FKTsKKyAgICB9CisgICAgZWxzZSBpZiAoKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFIHx8IHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkgJiYKKyAgICAgICAgICAgICAoc1JlY2VpdmVGcmFtZS5tQ2hhbm5lbCA9PSBzUmVjZWl2ZU1lc3NhZ2UubUNoYW5uZWwpKQorICAgIHsKKyAgICAgICAgcmFkaW9Qcm9jZXNzRnJhbWUoYUluc3RhbmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgcmFkaW9TZW5kTWVzc2FnZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgc1RyYW5zbWl0TWVzc2FnZS5tQ2hhbm5lbCA9IHNUcmFuc21pdEZyYW1lLm1DaGFubmVsOworCisgICAgcmFkaW9UcmFuc21pdCgmc1RyYW5zbWl0TWVzc2FnZSwgJnNUcmFuc21pdEZyYW1lKTsKKworICAgIHNBY2tXYWl0ID0gaXNBY2tSZXF1ZXN0ZWQoc1RyYW5zbWl0RnJhbWUubVBzZHUpOworCisgICAgaWYgKCFzQWNrV2FpdCkKKyAgICB7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdERpYWdSYWRpb1RyYW5zbWl0RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgT1RfRVJST1JfTk9ORSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvVHhEb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCBOVUxMLCBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBwbGF0Zm9ybVJhZGlvVXBkYXRlRmRTZXQoZmRfc2V0ICphUmVhZEZkU2V0LCBmZF9zZXQgKmFXcml0ZUZkU2V0LCBpbnQgKmFNYXhGZCkKK3sKKyAgICBpZiAoYVJlYWRGZFNldCAhPSBOVUxMICYmIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQgfHwgc0Fja1dhaXQpKQorICAgIHsKKyAgICAgICAgRkRfU0VUKHNTb2NrRmQsIGFSZWFkRmRTZXQpOworCisgICAgICAgIGlmIChhTWF4RmQgIT0gTlVMTCAmJiAqYU1heEZkIDwgc1NvY2tGZCkKKyAgICAgICAgeworICAgICAgICAgICAgKmFNYXhGZCA9IHNTb2NrRmQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYVdyaXRlRmRTZXQgIT0gTlVMTCAmJiBzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQgJiYgIXNBY2tXYWl0KQorICAgIHsKKyAgICAgICAgRkRfU0VUKHNTb2NrRmQsIGFXcml0ZUZkU2V0KTsKKworICAgICAgICBpZiAoYU1heEZkICE9IE5VTEwgJiYgKmFNYXhGZCA8IHNTb2NrRmQpCisgICAgICAgIHsKKyAgICAgICAgICAgICphTWF4RmQgPSBzU29ja0ZkOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHBsYXRmb3JtUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBjb25zdCBpbnQgZmxhZ3MgPSBQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTEVSUiB8IFBPTExOVkFMIHwgUE9MTEhVUDsKKyAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxmZCA9IHsgc1NvY2tGZCwgZmxhZ3MsIDAgfTsKKworICAgIGlmIChQT0xMKCZwb2xsZmQsIDEsIDApID4gMCAmJiAocG9sbGZkLnJldmVudHMgJiBmbGFncykgIT0gMCkKKyAgICB7CisgICAgICAgIHJhZGlvUmVjZWl2ZShhSW5zdGFuY2UpOworICAgIH0KKworICAgIGlmIChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQgJiYgIXNBY2tXYWl0KQorICAgIHsKKyAgICAgICAgcmFkaW9TZW5kTWVzc2FnZShhSW5zdGFuY2UpOworICAgIH0KK30KKwordm9pZCByYWRpb1RyYW5zbWl0KHN0cnVjdCBSYWRpb01lc3NhZ2UgKm1zZywgY29uc3Qgc3RydWN0IG90UmFkaW9GcmFtZSAqcGt0KQoreworICAgIHVpbnQzMl90IGk7CisgICAgc3RydWN0IHNvY2thZGRyX2luIHNvY2thZGRyOworCisgICAgdWludDE2X3QgY3JjID0gMDsKKyAgICB1aW50MTZfdCBjcmNfb2Zmc2V0ID0gcGt0LT5tTGVuZ3RoIC0gc2l6ZW9mKHVpbnQxNl90KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBjcmNfb2Zmc2V0OyBpKyspCisgICAgeworICAgICAgICBjcmMgPSBjcmMxNl9jaXR0KGNyYywgbXNnLT5tUHNkdVtpXSk7CisgICAgfQorCisgICAgbXNnLT5tUHNkdVtjcmNfb2Zmc2V0XSA9IGNyYyAmIDB4ZmY7CisgICAgbXNnLT5tUHNkdVtjcmNfb2Zmc2V0ICsgMV0gPSBjcmMgPj4gODsKKworICAgIG1lbXNldCgmc29ja2FkZHIsIDAsIHNpemVvZihzb2NrYWRkcikpOworICAgIHNvY2thZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIGluZXRfcHRvbihBRl9JTkVULCAiMTI3LjAuMC4xIiwgJnNvY2thZGRyLnNpbl9hZGRyKTsKKworICAgIGZvciAoaSA9IDE7IGkgPD0gV0VMTEtOT1dOX05PREVfSUQ7IGkrKykKKyAgICB7CisgICAgICAgIHNzaXplX3QgcnZhbDsKKworICAgICAgICBpZiAoTk9ERV9JRCA9PSBpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHNvY2thZGRyLnNpbl9wb3J0ID0gaHRvbnMoOTAwMCArIHNQb3J0T2Zmc2V0ICsgaSk7CisgICAgICAgIHJ2YWwgPSBzZW5kdG8oc1NvY2tGZCwgKGNvbnN0IGNoYXIgKiltc2csIDEgKyBwa3QtPm1MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgMCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSk7CisKKyAgICAgICAgaWYgKHJ2YWwgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBwZXJyb3IoInJlY3Zmcm9tIik7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgcmFkaW9TZW5kQWNrKHZvaWQpCit7CisgICAgc0Fja0ZyYW1lLm1MZW5ndGggPSBJRUVFODAyMTU0X0FDS19MRU5HVEg7CisgICAgc0Fja01lc3NhZ2UubVBzZHVbMF0gPSBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfQUNLOworCisgICAgaWYgKGlzRGF0YVJlcXVlc3Qoc1JlY2VpdmVGcmFtZS5tUHNkdSkpCisgICAgeworICAgICAgICBzQWNrTWVzc2FnZS5tUHNkdVswXSB8PSBJRUVFODAyMTU0X0ZSQU1FX1BFTkRJTkc7CisgICAgfQorCisgICAgc0Fja01lc3NhZ2UubVBzZHVbMV0gPSAwOworICAgIHNBY2tNZXNzYWdlLm1Qc2R1WzJdID0gZ2V0RHNuKHNSZWNlaXZlRnJhbWUubVBzZHUpOworCisgICAgc0Fja01lc3NhZ2UubUNoYW5uZWwgPSBzUmVjZWl2ZUZyYW1lLm1DaGFubmVsOworCisgICAgcmFkaW9UcmFuc21pdCgmc0Fja01lc3NhZ2UsICZzQWNrRnJhbWUpOworfQorCit2b2lkIHJhZGlvUHJvY2Vzc0ZyYW1lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdFBhbklkIGRzdHBhbjsKKyAgICBvdFNob3J0QWRkcmVzcyBzaG9ydF9hZGRyZXNzOworICAgIG90RXh0QWRkcmVzcyBleHRfYWRkcmVzczsKKworICAgIG90RVhQRUNUX0FDVElPTihzUHJvbWlzY3VvdXMgPT0gZmFsc2UsIGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisKKyAgICBzd2l0Y2ggKHNSZWNlaXZlRnJhbWUubVBzZHVbMV0gJiBJRUVFODAyMTU0X0RTVF9BRERSX01BU0spCisgICAgeworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9OT05FOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9TSE9SVDoKKyAgICAgICAgZHN0cGFuID0gZ2V0RHN0UGFuKHNSZWNlaXZlRnJhbWUubVBzZHUpOworICAgICAgICBzaG9ydF9hZGRyZXNzID0gZ2V0U2hvcnRBZGRyZXNzKHNSZWNlaXZlRnJhbWUubVBzZHUpOworICAgICAgICBvdEVYUEVDVF9BQ1RJT04oKGRzdHBhbiA9PSBJRUVFODAyMTU0X0JST0FEQ0FTVCB8fCBkc3RwYW4gPT0gc1BhbmlkKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHNob3J0X2FkZHJlc3MgPT0gSUVFRTgwMjE1NF9CUk9BRENBU1QgfHwgc2hvcnRfYWRkcmVzcyA9PSBzU2hvcnRBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfQUJPUlQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9FWFQ6CisgICAgICAgIGRzdHBhbiA9IGdldERzdFBhbihzUmVjZWl2ZUZyYW1lLm1Qc2R1KTsKKyAgICAgICAgZ2V0RXh0QWRkcmVzcyhzUmVjZWl2ZUZyYW1lLm1Qc2R1LCAmZXh0X2FkZHJlc3MpOworICAgICAgICBvdEVYUEVDVF9BQ1RJT04oKGRzdHBhbiA9PSBJRUVFODAyMTU0X0JST0FEQ0FTVCB8fCBkc3RwYW4gPT0gc1BhbmlkKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgbWVtY21wKCZleHRfYWRkcmVzcywgc0V4dGVuZGVkQWRkcmVzcywgc2l6ZW9mKGV4dF9hZGRyZXNzKSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfQUJPUlQpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfQUJPUlQ7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qb3dlciA9IC0yMDsKKyAgICBzUmVjZWl2ZUZyYW1lLm1McWkgPSBPVF9SQURJT19MUUlfTk9ORTsKKworICAgIC8vIGdlbmVyYXRlIGFja25vd2xlZGdtZW50CisgICAgaWYgKGlzQWNrUmVxdWVzdGVkKHNSZWNlaXZlRnJhbWUubVBzZHUpKQorICAgIHsKKyAgICAgICAgcmFkaW9TZW5kQWNrKCk7CisgICAgfQorCitleGl0OgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgeworICAgICAgICBvdFBsYXREaWFnUmFkaW9SZWNlaXZlRG9uZShhSW5zdGFuY2UsIGVycm9yID09IE9UX0VSUk9SX05PTkUgPyAmc1JlY2VpdmVGcmFtZSA6IE5VTEwsIGVycm9yKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgZXJyb3IgPT0gT1RfRVJST1JfTk9ORSA/ICZzUmVjZWl2ZUZyYW1lIDogTlVMTCwgZXJyb3IpOworICAgIH0KK30KKwordm9pZCBvdFBsYXRSYWRpb0VuYWJsZVNyY01hdGNoKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhRW5hYmxlOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYVNob3J0QWRkcmVzczsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0FkZFNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYUV4dEFkZHJlc3M7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgICh2b2lkKWFTaG9ydEFkZHJlc3M7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYUV4dEFkZHJlc3M7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhU2NhbkNoYW5uZWw7CisgICAgKHZvaWQpYVNjYW5EdXJhdGlvbjsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0RGVmYXVsdFR4UG93ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYVBvd2VyKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhUG93ZXI7Cit9CisKK2ludDhfdCBvdFBsYXRSYWRpb0dldFJlY2VpdmVTZW5zaXRpdml0eShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBQT1NJWF9SRUNFSVZFX1NFTlNJVElWSVRZOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3JhbmRvbS5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3JhbmRvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMTIwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvcmFuZG9tLmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgKgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tcG9zaXguaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCitzdGF0aWMgdWludDMyX3Qgc1N0YXRlID0gMTsKKwordm9pZCBwbGF0Zm9ybVJhbmRvbUluaXQodm9pZCkKK3sKKyNpZiBfX1NBTklUSVpFX0FERFJFU1NfXyA9PSAwCisKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgZXJyb3IgPSBvdFBsYXRSYW5kb21HZXRUcnVlKCh1aW50OF90ICopJnNTdGF0ZSwgc2l6ZW9mKHNTdGF0ZSkpOworICAgIGFzc2VydChlcnJvciA9PSBPVF9FUlJPUl9OT05FKTsKKworI2Vsc2UgIC8vIF9fU0FOSVRJWkVfQUREUkVTU19fCisKKyAgICAvLyBNdWx0aXBseWluZyBOT0RFX0lEIGFzc3VyZXMgdGhhdCBubyB0d28gbm9kZXMgZ2V0cyB0aGUgc2FtZSBzZWVkIHdpdGhpbiBhbiBob3VyLgorICAgIHNTdGF0ZSA9ICh1aW50MzJfdCl0aW1lKE5VTEwpICsgKDM2MDAgKiBOT0RFX0lEKTsKKworI2VuZGlmICAvLyBfX1NBTklUSVpFX0FERFJFU1NfXworfQorCit1aW50MzJfdCBvdFBsYXRSYW5kb21HZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCBtbGNnLCBwLCBxOworICAgIHVpbnQ2NF90IHRtcHN0YXRlOworCisgICAgdG1wc3RhdGUgPSAodWludDY0X3QpMzM2MTQgKiAodWludDY0X3Qpc1N0YXRlOworICAgIHEgPSB0bXBzdGF0ZSAmIDB4ZmZmZmZmZmY7CisgICAgcSA9IHEgPj4gMTsKKyAgICBwID0gdG1wc3RhdGUgPj4gMzI7CisgICAgbWxjZyA9IHAgKyBxOworCisgICAgaWYgKG1sY2cgJiAweDgwMDAwMDAwKQorICAgIHsKKyAgICAgICAgbWxjZyAmPSAweDdmZmZmZmZmOworICAgICAgICBtbGNnKys7CisgICAgfQorCisgICAgc1N0YXRlID0gbWxjZzsKKworICAgIHJldHVybiBtbGNnOworfQorCitvdEVycm9yIG90UGxhdFJhbmRvbUdldFRydWUodWludDhfdCAqYU91dHB1dCwgdWludDE2X3QgYU91dHB1dExlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworI2lmIF9fU0FOSVRJWkVfQUREUkVTU19fID09IDAKKworICAgIEZJTEUgKmZpbGUgPSBOVUxMOworICAgIHNpemVfdCByZWFkTGVuZ3RoOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGFPdXRwdXQgJiYgYU91dHB1dExlbmd0aCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZmlsZSA9IGZvcGVuKCIvZGV2L3VyYW5kb20iLCAicmIiKTsKKyAgICBvdEVYUEVDVF9BQ1RJT04oZmlsZSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisKKyAgICByZWFkTGVuZ3RoID0gZnJlYWQoYU91dHB1dCwgMSwgYU91dHB1dExlbmd0aCwgZmlsZSk7CisgICAgb3RFWFBFQ1RfQUNUSU9OKHJlYWRMZW5ndGggPT0gYU91dHB1dExlbmd0aCwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworCitleGl0OgorCisgICAgaWYgKGZpbGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICB9CisKKyNlbHNlICAvLyBfX1NBTklUSVpFX0FERFJFU1NfXworCisgICAgLyoKKyAgICAgKiBUSEUgSU1QTEVNRU5UQVRJT04gQkVMT1cgSVMgTk9UIENPTVBMSUFOVCBXSVRIIFRIRSBUSFJFQUQgU1BFQ0lGSUNBVElPTi4KKyAgICAgKgorICAgICAqIEFkZHJlc3MgU2FuaXRpemVyIHRyaWdnZXJzIHRlc3QgZmFpbHVyZXMgd2hlbiByZWFkaW5nIHJhbmRvbQorICAgICAqIHZhbHVlcyBmcm9tIC9kZXYvdXJhbmRvbS4gIFRoZSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgKiBpbXBsZW1lbnRhdGlvbiBiZWxvdyBpcyBvbmx5IHVzZWQgdG8gZW5hYmxlIGNvbnRpbnVvdXMKKyAgICAgKiBpbnRlZ3JhdGlvbiBjaGVja3Mgd2l0aCBBZGRyZXNzIFNhbml0aXplciBlbmFibGVkLgorICAgICAqLworICAgIG90RVhQRUNUX0FDVElPTihhT3V0cHV0ICYmIGFPdXRwdXRMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGZvciAodWludDE2X3QgbGVuZ3RoID0gMDsgbGVuZ3RoIDwgYU91dHB1dExlbmd0aDsgbGVuZ3RoKyspCisgICAgeworICAgICAgICBhT3V0cHV0W2xlbmd0aF0gPSAodWludDhfdClvdFBsYXRSYW5kb21HZXQoKTsKKyAgICB9CisKK2V4aXQ6CisKKyNlbmRpZiAgLy8gX19TQU5JVElaRV9BRERSRVNTX18KKworICAgIHJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9zcGktc3R1YnMuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9zcGktc3R1YnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGRiOWYxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3NwaS1zdHVicy5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vc3BpLXNsYXZlLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0Lmg+CisKKy8vIFNwaS1zbGF2ZSBzdHVicworCitvdEVycm9yIG90UGxhdFNwaVNsYXZlRW5hYmxlKG90UGxhdFNwaVNsYXZlVHJhbnNhY3Rpb25Db21wbGV0ZUNhbGxiYWNrIGFDb21wbGV0ZUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdFBsYXRTcGlTbGF2ZVRyYW5zYWN0aW9uUHJvY2Vzc0NhbGxiYWNrIGFQcm9jZXNzQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KQoreworICAgICh2b2lkKWFDb21wbGV0ZUNhbGxiYWNrOworICAgICh2b2lkKWFQcm9jZXNzQ2FsbGJhY2s7CisgICAgKHZvaWQpYUNvbnRleHQ7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuTm8gU1BJIHN1cHBvcnQgZm9yIHBvc2l4IHBsYXRmb3JtLiIpOworICAgIGV4aXQoMCk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCit2b2lkIG90UGxhdFNwaVNsYXZlRGlzYWJsZSh2b2lkKQoreworfQorCitvdEVycm9yIG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKHVpbnQ4X3QgKmFPdXRwdXRCdWYsIHVpbnQxNl90IGFPdXRwdXRCdWZMZW4sIHVpbnQ4X3QgKmFJbnB1dEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUlucHV0QnVmTGVuLCBib29sIGFSZXF1ZXN0VHJhbnNhY3Rpb25GbGFnKQoreworICAgICh2b2lkKWFPdXRwdXRCdWY7CisgICAgKHZvaWQpYU91dHB1dEJ1ZkxlbjsKKyAgICAodm9pZClhSW5wdXRCdWY7CisgICAgKHZvaWQpYUlucHV0QnVmTGVuOworICAgICh2b2lkKWFSZXF1ZXN0VHJhbnNhY3Rpb25GbGFnOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworLy8gVWFydAorCit2b2lkIG90UGxhdFVhcnRTZW5kRG9uZSh2b2lkKQoreworfQorCit2b2lkIG90UGxhdFVhcnRSZWNlaXZlZChjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgICh2b2lkKWFCdWY7CisgICAgKHZvaWQpYUJ1Zkxlbmd0aDsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC91YXJ0LXBvc2l4LmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvdWFydC1wb3NpeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MjI1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvdWFydC1wb3NpeC5jCkBAIC0wLDAgKzEsMjg3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicGxhdGZvcm0tcG9zaXguaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworI2lmZGVmIE9QRU5USFJFQURfVEFSR0VUX0xJTlVYCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CitpbnQgcG9zaXhfb3BlbnB0KGludCBvZmxhZyk7CitpbnQgZ3JhbnRwdChpbnQgZmlsZGVzKTsKK2ludCB1bmxvY2twdChpbnQgZmQpOworY2hhciAqcHRzbmFtZShpbnQgZmQpOworI2VuZGlmICAvLyBPUEVOVEhSRUFEX1RBUkdFVF9MSU5VWAorCitzdGF0aWMgdWludDhfdCBzX3JlY2VpdmVfYnVmZmVyWzEyOF07CitzdGF0aWMgY29uc3QgdWludDhfdCAqc193cml0ZV9idWZmZXI7CitzdGF0aWMgdWludDE2X3Qgc193cml0ZV9sZW5ndGg7CitzdGF0aWMgaW50IHNfaW5fZmQ7CitzdGF0aWMgaW50IHNfb3V0X2ZkOworCitzdGF0aWMgc3RydWN0IHRlcm1pb3Mgb3JpZ2luYWxfc3RkaW5fdGVybWlvczsKK3N0YXRpYyBzdHJ1Y3QgdGVybWlvcyBvcmlnaW5hbF9zdGRvdXRfdGVybWlvczsKKworc3RhdGljIHZvaWQgcmVzdG9yZV9zdGRpbl90ZXJtaW9zKHZvaWQpCit7CisgICAgdGNzZXRhdHRyKHNfaW5fZmQsIFRDU0FGTFVTSCwgJm9yaWdpbmFsX3N0ZGluX3Rlcm1pb3MpOworfQorCitzdGF0aWMgdm9pZCByZXN0b3JlX3N0ZG91dF90ZXJtaW9zKHZvaWQpCit7CisgICAgdGNzZXRhdHRyKHNfb3V0X2ZkLCBUQ1NBRkxVU0gsICZvcmlnaW5hbF9zdGRvdXRfdGVybWlvcyk7Cit9CisKK3ZvaWQgcGxhdGZvcm1VYXJ0UmVzdG9yZSh2b2lkKQoreworICAgIHJlc3RvcmVfc3RkaW5fdGVybWlvcygpOworICAgIHJlc3RvcmVfc3Rkb3V0X3Rlcm1pb3MoKTsKKyAgICBkdXAyKHNfb3V0X2ZkLCBTVERPVVRfRklMRU5PKTsKK30KKworb3RFcnJvciBvdFBsYXRVYXJ0RW5hYmxlKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3RydWN0IHRlcm1pb3MgdGVybWlvczsKKworI2lmZGVmIE9QRU5USFJFQURfVEFSR0VUX0xJTlVYCisgICAgLy8gRW5zdXJlIHdlIHRlcm1pbmF0ZSB0aGlzIHByb2Nlc3MgaWYgdGhlCisgICAgLy8gcGFyZW50IHByb2Nlc3MgZGllcy4KKyAgICBwcmN0bChQUl9TRVRfUERFQVRIU0lHLCBTSUdIVVApOworI2VuZGlmCisKKyAgICBzX2luX2ZkID0gZHVwKFNURElOX0ZJTEVOTyk7CisgICAgc19vdXRfZmQgPSBkdXAoU1RET1VUX0ZJTEVOTyk7CisgICAgZHVwMihTVERFUlJfRklMRU5PLCBTVERPVVRfRklMRU5PKTsKKworICAgIC8vIFdlIG5lZWQgdGhpcyBzaWduYWwgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcworICAgIC8vIHByb2Nlc3MgdGVybWluYXRlcyBwcm9wZXJseS4KKyAgICBzaWduYWwoU0lHUElQRSwgU0lHX0RGTCk7CisKKyAgICBpZiAoaXNhdHR5KHNfaW5fZmQpKQorICAgIHsKKyAgICAgICAgdGNnZXRhdHRyKHNfaW5fZmQsICZvcmlnaW5hbF9zdGRpbl90ZXJtaW9zKTsKKyAgICAgICAgYXRleGl0KCZyZXN0b3JlX3N0ZGluX3Rlcm1pb3MpOworICAgIH0KKworICAgIGlmIChpc2F0dHkoc19vdXRfZmQpKQorICAgIHsKKyAgICAgICAgdGNnZXRhdHRyKHNfb3V0X2ZkLCAmb3JpZ2luYWxfc3Rkb3V0X3Rlcm1pb3MpOworICAgICAgICBhdGV4aXQoJnJlc3RvcmVfc3Rkb3V0X3Rlcm1pb3MpOworICAgIH0KKworICAgIGlmIChpc2F0dHkoc19pbl9mZCkpCisgICAgeworICAgICAgICAvLyBnZXQgY3VycmVudCBjb25maWd1cmF0aW9uCisgICAgICAgIG90RVhQRUNUX0FDVElPTih0Y2dldGF0dHIoc19pbl9mZCwgJnRlcm1pb3MpID09IDAsIHBlcnJvcigidGNnZXRhdHRyIik7IGVycm9yID0gT1RfRVJST1JfR0VORVJJQyk7CisKKyAgICAgICAgLy8gU2V0IHVwIHRoZSB0ZXJtaW9zIHNldHRpbmdzIGZvciByYXcgbW9kZS4gVGhpcyB0dXJucworICAgICAgICAvLyBvZmYgaW5wdXQvb3V0cHV0IHByb2Nlc3NpbmcsIGxpbmUgcHJvY2Vzc2luZywgYW5kIGNoYXJhY3RlciBwcm9jZXNzaW5nLgorICAgICAgICBjZm1ha2VyYXcoJnRlcm1pb3MpOworCisgICAgICAgIC8vIFNldCB1cCBvdXIgY2ZsYWdzIGZvciBsb2NhbCB1c2UuIFR1cm4gb24gaGFuZ3VwLW9uLWNsb3NlLgorICAgICAgICB0ZXJtaW9zLmNfY2ZsYWcgfD0gSFVQQ0wgfCBDUkVBRCB8IENMT0NBTDsKKworICAgICAgICAvLyAiTWluaW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBmb3Igbm9uY2Fub25pY2FsIHJlYWQiCisgICAgICAgIHRlcm1pb3MuY19jY1tWTUlOXSAgPSAxOworCisgICAgICAgIC8vICJUaW1lb3V0IGluIGRlY2lzZWNvbmRzIGZvciBub25jYW5vbmljYWwgcmVhZCIKKyAgICAgICAgdGVybWlvcy5jX2NjW1ZUSU1FXSA9IDA7CisKKyAgICAgICAgLy8gY29uZmlndXJlIGJhdWQgcmF0ZQorICAgICAgICBvdEVYUEVDVF9BQ1RJT04oY2ZzZXRpc3BlZWQoJnRlcm1pb3MsIEIxMTUyMDApID09IDAsIHBlcnJvcigiY2ZzZXRpc3BlZWQiKTsgZXJyb3IgPSBPVF9FUlJPUl9HRU5FUklDKTsKKworICAgICAgICAvLyBzZXQgY29uZmlndXJhdGlvbgorICAgICAgICBvdEVYUEVDVF9BQ1RJT04odGNzZXRhdHRyKHNfaW5fZmQsIFRDU0FOT1csICZ0ZXJtaW9zKSA9PSAwLCBwZXJyb3IoInRjc2V0YXR0ciIpOyBlcnJvciA9IE9UX0VSUk9SX0dFTkVSSUMpOworICAgIH0KKworICAgIGlmIChpc2F0dHkoc19vdXRfZmQpKQorICAgIHsKKyAgICAgICAgLy8gZ2V0IGN1cnJlbnQgY29uZmlndXJhdGlvbgorICAgICAgICBvdEVYUEVDVF9BQ1RJT04odGNnZXRhdHRyKHNfb3V0X2ZkLCAmdGVybWlvcykgPT0gMCwgcGVycm9yKCJ0Y2dldGF0dHIiKTsgZXJyb3IgPSBPVF9FUlJPUl9HRU5FUklDKTsKKworICAgICAgICAvLyBTZXQgdXAgdGhlIHRlcm1pb3Mgc2V0dGluZ3MgZm9yIHJhdyBtb2RlLiBUaGlzIHR1cm5zCisgICAgICAgIC8vIG9mZiBpbnB1dC9vdXRwdXQgcHJvY2Vzc2luZywgbGluZSBwcm9jZXNzaW5nLCBhbmQgY2hhcmFjdGVyIHByb2Nlc3NpbmcuCisgICAgICAgIGNmbWFrZXJhdygmdGVybWlvcyk7CisKKyAgICAgICAgLy8gQWJzb2x1dGVseSBvYmxpdGVyYXRlIGFsbCBvdXRwdXQgcHJvY2Vzc2luZy4KKyAgICAgICAgdGVybWlvcy5jX29mbGFnID0gMDsKKworICAgICAgICAvLyBTZXQgdXAgb3VyIGNmbGFncyBmb3IgbG9jYWwgdXNlLiBUdXJuIG9uIGhhbmd1cC1vbi1jbG9zZS4KKyAgICAgICAgdGVybWlvcy5jX2NmbGFnIHw9IEhVUENMIHwgQ1JFQUQgfCBDTE9DQUw7CisKKyAgICAgICAgLy8gY29uZmlndXJlIGJhdWQgcmF0ZQorICAgICAgICBvdEVYUEVDVF9BQ1RJT04oY2ZzZXRvc3BlZWQoJnRlcm1pb3MsIEIxMTUyMDApID09IDAsIHBlcnJvcigiY2ZzZXRvc3BlZWQiKTsgZXJyb3IgPSBPVF9FUlJPUl9HRU5FUklDKTsKKworICAgICAgICAvLyBzZXQgY29uZmlndXJhdGlvbgorICAgICAgICBvdEVYUEVDVF9BQ1RJT04odGNzZXRhdHRyKHNfb3V0X2ZkLCBUQ1NBTk9XLCAmdGVybWlvcykgPT0gMCwgcGVycm9yKCJ0Y3NldGF0dHIiKTsgZXJyb3IgPSBPVF9FUlJPUl9HRU5FUklDKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisKK2V4aXQ6CisgICAgY2xvc2Uoc19pbl9mZCk7CisgICAgY2xvc2Uoc19vdXRfZmQpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRVYXJ0RGlzYWJsZSh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgY2xvc2Uoc19pbl9mZCk7CisgICAgY2xvc2Uoc19vdXRfZmQpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFVhcnRTZW5kKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc193cml0ZV9sZW5ndGggPT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworICAgIHNfd3JpdGVfYnVmZmVyID0gYUJ1ZjsKKyAgICBzX3dyaXRlX2xlbmd0aCA9IGFCdWZMZW5ndGg7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIHBsYXRmb3JtVWFydFVwZGF0ZUZkU2V0KGZkX3NldCAqYVJlYWRGZFNldCwgZmRfc2V0ICphV3JpdGVGZFNldCwgZmRfc2V0ICphRXJyb3JGZFNldCwgaW50ICphTWF4RmQpCit7CisgICAgaWYgKGFSZWFkRmRTZXQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIEZEX1NFVChzX2luX2ZkLCBhUmVhZEZkU2V0KTsKKworICAgICAgICBpZiAoYUVycm9yRmRTZXQgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgRkRfU0VUKHNfaW5fZmQsIGFFcnJvckZkU2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhTWF4RmQgIT0gTlVMTCAmJiAqYU1heEZkIDwgc19pbl9mZCkKKyAgICAgICAgeworICAgICAgICAgICAgKmFNYXhGZCA9IHNfaW5fZmQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKGFXcml0ZUZkU2V0ICE9IE5VTEwpICYmIChzX3dyaXRlX2xlbmd0aCA+IDApKQorICAgIHsKKyAgICAgICAgRkRfU0VUKHNfb3V0X2ZkLCBhV3JpdGVGZFNldCk7CisKKyAgICAgICAgaWYgKGFFcnJvckZkU2V0ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZEX1NFVChzX291dF9mZCwgYUVycm9yRmRTZXQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFNYXhGZCAhPSBOVUxMICYmICphTWF4RmQgPCBzX291dF9mZCkKKyAgICAgICAgeworICAgICAgICAgICAgKmFNYXhGZCA9IHNfb3V0X2ZkOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHBsYXRmb3JtVWFydFByb2Nlc3Modm9pZCkKK3sKKyAgICBzc2l6ZV90IHJ2YWw7CisgICAgY29uc3QgaW50IGVycm9yX2ZsYWdzID0gUE9MTEVSUiB8IFBPTExOVkFMIHwgUE9MTEhVUDsKKyAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxmZFtdID0KKyAgICB7CisgICAgICAgIHsgc19pbl9mZCwgIFBPTExJTiAgfCBlcnJvcl9mbGFncywgMCB9LAorICAgICAgICB7IHNfb3V0X2ZkLCBQT0xMT1VUIHwgZXJyb3JfZmxhZ3MsIDAgfSwKKyAgICB9OworCisgICAgZXJybm8gPSAwOworCisgICAgcnZhbCA9IHBvbGwocG9sbGZkLCBzaXplb2YocG9sbGZkKSAvIHNpemVvZigqcG9sbGZkKSwgMCk7CisKKyAgICBpZiAocnZhbCA8IDApCisgICAgeworICAgICAgICBwZXJyb3IoInBvbGwiKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIGlmIChydmFsID4gMCkKKyAgICB7CisgICAgICAgIGlmICgocG9sbGZkWzBdLnJldmVudHMgJiBlcnJvcl9mbGFncykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcGVycm9yKCJzX2luX2ZkIik7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHBvbGxmZFsxXS5yZXZlbnRzICYgZXJyb3JfZmxhZ3MpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcnJvcigic19vdXRfZmQiKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwb2xsZmRbMF0ucmV2ZW50cyAmIFBPTExJTikKKyAgICAgICAgeworICAgICAgICAgICAgcnZhbCA9IHJlYWQoc19pbl9mZCwgc19yZWNlaXZlX2J1ZmZlciwgc2l6ZW9mKHNfcmVjZWl2ZV9idWZmZXIpKTsKKworICAgICAgICAgICAgaWYgKHJ2YWwgPD0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoInJlYWQiKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG90UGxhdFVhcnRSZWNlaXZlZChzX3JlY2VpdmVfYnVmZmVyLCAodWludDE2X3QpcnZhbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHNfd3JpdGVfbGVuZ3RoID4gMCkgJiYgKHBvbGxmZFsxXS5yZXZlbnRzICYgUE9MTE9VVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ2YWwgPSB3cml0ZShzX291dF9mZCwgc193cml0ZV9idWZmZXIsIHNfd3JpdGVfbGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKHJ2YWwgPD0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoIndyaXRlIik7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzX3dyaXRlX2J1ZmZlciArPSAodWludDE2X3QpcnZhbDsKKyAgICAgICAgICAgIHNfd3JpdGVfbGVuZ3RoIC09ICh1aW50MTZfdClydmFsOworCisgICAgICAgICAgICBpZiAoc193cml0ZV9sZW5ndGggPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXRVYXJ0U2VuZERvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC91YXJ0LXdpbmRvd3MuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC91YXJ0LXdpbmRvd3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJiYmE2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3VhcnQtd2luZG93cy5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicGxhdGZvcm0tcG9zaXguaCIKKworI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vdWFydC5oIgorI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworc3RhdGljIEhBTkRMRSBzX1dvcmtlclRocmVhZDsKK3N0YXRpYyBIQU5ETEUgc19TdG9wV29ya2VyRXZlbnQ7CisKK0RXT1JEIFdJTkFQSSAKK3dpbmRvd3NVYXJ0V29ya2VyVGhyZWFkKAorICAgIF9Jbl8gTFBWT0lEIGxwVGhyZWFkUGFyYW1ldGVyCisgICAgKQoreworICAgIERXT1JEIG9yaWdpbmFsQ29uc29sZU1vZGU7CisgICAgSEFORExFIHdhaXRIYW5kbGVzW10gPSB7IHNfU3RvcFdvcmtlckV2ZW50LCBHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSkgfTsKKyAgICB1aW50OF90IGNoOworICAgIAorICAgIC8vIENhY2hlIHRoZSBvcmlnaW5hbCBjb25zb2xlIG1vZGUKKyAgICBHZXRDb25zb2xlTW9kZSh3YWl0SGFuZGxlc1sxXSwgJm9yaWdpbmFsQ29uc29sZU1vZGUpOworCisgICAgLy8gRmFrZSB0aGUgZmlyc3QgbmV3IGxpbmUKKyAgICBjaCA9ICdcbic7CisgICAgb3RQbGF0VWFydFJlY2VpdmVkKCZjaCwgMSk7CisKKyAgICAvLyBXYWl0IGZvciBjb25zb2xlIGV2ZW50cworICAgIHdoaWxlIChXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKEFSUkFZU0laRSh3YWl0SGFuZGxlcyksIHdhaXRIYW5kbGVzLCBGQUxTRSwgSU5GSU5JVEUpID09IFdBSVRfT0JKRUNUXzAgKyAxKQorICAgIHsKKyAgICAgICAgRFdPUkQgbnVtYmVyT2ZFdmVudCA9IDA7CisgICAgICAgIGlmIChHZXROdW1iZXJPZkNvbnNvbGVJbnB1dEV2ZW50cyh3YWl0SGFuZGxlc1sxXSwgJm51bWJlck9mRXZlbnQpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKDsgbnVtYmVyT2ZFdmVudCA+IDA7IG51bWJlck9mRXZlbnQtLSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJTlBVVF9SRUNPUkQgcmVjb3JkOworICAgICAgICAgICAgICAgIERXT1JEIG51bVJlYWQ7CisgICAgICAgICAgICAgICAgaWYgKCFSZWFkQ29uc29sZUlucHV0KHdhaXRIYW5kbGVzWzFdLCAmcmVjb3JkLCAxLCAmbnVtUmVhZCkgfHwKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkLkV2ZW50VHlwZSAhPSBLRVlfRVZFTlQgfHwKKyAgICAgICAgICAgICAgICAgICAgIXJlY29yZC5FdmVudC5LZXlFdmVudC5iS2V5RG93bikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2ggPSAodWludDhfdClyZWNvcmQuRXZlbnQuS2V5RXZlbnQudUNoYXIuQXNjaWlDaGFyOworICAgICAgICAgICAgICAgIG90UGxhdFVhcnRSZWNlaXZlZCgmY2gsIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5PX0VSUk9SOworfQorCitvdEVycm9yIG90UGxhdFVhcnRFbmFibGUodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIC8vIENyZWF0ZSB0aGUgd29ya2VyIHRocmVhZCBzdG9wIGV2ZW50CisgICAgb3RFWFBFQ1RfQUNUSU9OKChzX1N0b3BXb3JrZXJFdmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9HRU5FUklDKTsKKworICAgIC8vIFN0YXJ0IHRoZSB3b3JrZXIgdGhyZWFkCisgICAgb3RFWFBFQ1RfQUNUSU9OKChzX1dvcmtlclRocmVhZCA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCB3aW5kb3dzVWFydFdvcmtlclRocmVhZCwgTlVMTCwgMCwgTlVMTCkpICE9IE5VTEwsCisJCSAgICBlcnJvciA9IE9UX0VSUk9SX0dFTkVSSUMpOworCisgICAgcmV0dXJuIGVycm9yOworCitleGl0OgorICAgIENsb3NlSGFuZGxlKHNfU3RvcFdvcmtlckV2ZW50KTsKKyAgICBzX1N0b3BXb3JrZXJFdmVudCA9IE5VTEw7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFVhcnREaXNhYmxlKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBTZXQgdGhlIHNodXRkb3duIGV2ZW50CisgICAgU2V0RXZlbnQoc19TdG9wV29ya2VyRXZlbnQpOworCisgICAgLy8gV2FpdCBmb3IgdGhlIHdvcmtlciB0byBjb21wZWx0ZQorICAgIFdhaXRGb3JTaW5nbGVPYmplY3Qoc19Xb3JrZXJUaHJlYWQsIElORklOSVRFKTsKKyAgICAKKyAgICBDbG9zZUhhbmRsZShzX1dvcmtlclRocmVhZCk7CisgICAgc19Xb3JrZXJUaHJlYWQgPSBOVUxMOworCisgICAgQ2xvc2VIYW5kbGUoc19TdG9wV29ya2VyRXZlbnQpOworICAgIHNfU3RvcFdvcmtlckV2ZW50ID0gTlVMTDsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRVYXJ0U2VuZChjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgRFdPUkQgZHdOdW1DaGFyc1dyaXR0ZW4gPSAwOworICAgIG90RVhQRUNUX0FDVElPTihXcml0ZUNvbnNvbGVBKEdldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSksIGFCdWYsIGFCdWZMZW5ndGgsICZkd051bUNoYXJzV3JpdHRlbiwgTlVMTCksCisJCSAgICBlcnJvciA9IE9UX0VSUk9SX0dFTkVSSUMpOworCisgICAgb3RQbGF0VWFydFNlbmREb25lKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIHBsYXRmb3JtVWFydFVwZGF0ZUZkU2V0KGZkX3NldCAqYVJlYWRGZFNldCwgZmRfc2V0ICphV3JpdGVGZFNldCwgZmRfc2V0ICphRXJyb3JGZFNldCwgaW50ICphTWF4RmQpCit7CisgICAgLy8gTm8tb3Agb24gV2luZG93cworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoYVJlYWRGZFNldCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhV3JpdGVGZFNldCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhRXJyb3JGZFNldCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhTWF4RmQpOworfQorCit2b2lkIHBsYXRmb3JtVWFydFByb2Nlc3Modm9pZCkKK3sKKyAgICAvLyBOby1vcCBvbiBXaW5kb3dzCit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlZGI4MAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDQ4IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxpYm9wZW50aHJlYWQtcGxhdGZvcm0tdXRpbHMuYQorCitsaWJvcGVudGhyZWFkX3BsYXRmb3JtX3V0aWxzX2FfQ1BQRkxBR1MgPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3JtcyAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX3BsYXRmb3JtX3V0aWxzX2FfU09VUkNFUyAgPSBcCisgICAgc2V0dGluZ3MuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitub2luc3RfSEVBREVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY29kZV91dGlscy5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmxhc2guaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscy9jb2RlX3V0aWxzLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvY29kZV91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNWU4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvY29kZV91dGlscy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIG1hY3JvcyBmb3IgdmFsaWRhdGluZyBydW50aW1lIGNvbmRpdGlvbnMuCisgKi8KKworI2lmbmRlZiBDT0RFX1VUSUxTX0gKKyNkZWZpbmUgQ09ERV9VVElMU19ICisKKy8qKgorICogIFRoaXMgY2hlY2tzIGZvciB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbiwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8KKyAqICBjb21tb25seSBiZSB0cnVlLCBhbmQgYnJhbmNoZXMgdG8gdGhlIGxvY2FsIGxhYmVsICdleGl0JyBpZiB0aGUKKyAqICBjb25kaXRpb24gaXMgZmFsc2UuCisgKgorICogIEBwYXJhbVtpbl0gIGFDb25kaXRpb24gIEEgQm9vbGVhbiBleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZC4KKyAqCisgKi8KKyNkZWZpbmUgb3RFWFBFQ1QoYUNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEoYUNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisvKioKKyAqICBUaGlzIGNoZWNrcyBmb3IgdGhlIHNwZWNpZmllZCBjb25kaXRpb24sIHdoaWNoIGlzIGV4cGVjdGVkIHRvCisgKiAgY29tbW9ubHkgYmUgdHJ1ZSwgYW5kIGJvdGggZXhlY3V0ZXMgQHAgYW5BY3Rpb24gYW5kIGJyYW5jaGVzIHRvCisgKiAgdGhlIGxvY2FsIGxhYmVsICdleGl0JyBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLgorICoKKyAqICBAcGFyYW1baW5dICBhQ29uZGl0aW9uICBBIEJvb2xlYW4gZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQuCisgKiAgQHBhcmFtW2luXSAgYUFjdGlvbiAgICAgQW4gZXhwcmVzc2lvbiBvciBibG9jayB0byBleGVjdXRlIHdoZW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uIGZhaWxzLgorICoKKyAqLworI2RlZmluZSBvdEVYUEVDVF9BQ1RJT04oYUNvbmRpdGlvbiwgYUFjdGlvbikgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIShhQ29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYUFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZ290byBleGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNlbmRpZiAgLy8gQ09ERV9VVElMU19ICmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvZmxhc2guaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscy9mbGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYTc0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvZmxhc2guaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBmbGFzaCBpbnRlcmZhY2UgdXNlZCBieSBzZXR0aW5ncy5jcHAuCisgKi8KKworI2lmbmRlZiBVVElMU19GTEFTSF9ICisjZGVmaW5lIFVUSUxTX0ZMQVNIX0gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogUGVyZm9ybSBhbnkgaW5pdGlhbGl6YXRpb24gZm9yIGZsYXNoIGRyaXZlci4KKyAqCisgKiBAcmV0dmFsIDo6T1RfRVJST1JfTk9ORSAgICBJbml0aWFsaXplIGZsYXNoIGRyaXZlciBzdWNjZXNzLgorICogQHJldHZhbCA6Ok9UX0VSUk9SX0ZBSUxFRCAgSW5pdGlhbGl6ZSBmbGFzaCBkcml2ZXIgZmFpbC4KKyAqLworb3RFcnJvciB1dGlsc0ZsYXNoSW5pdCh2b2lkKTsKKworLyoqCisgKiBHZXQgdGhlIHNpemUgb2YgZmxhc2ggdGhhdCBjYW4gYmUgcmVhZC93cml0ZSBieSB0aGUgY2FsbGVyLgorICogVGhlIHVzYWJsZSBmbGFzaCBzaXplIGlzIGFsd2F5cyB0aGUgbXVsdGlwbGUgb2YgZmxhc2ggcGFnZSBzaXplLgorICoKKyAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBmbGFzaC4KKyAqLwordWludDMyX3QgdXRpbHNGbGFzaEdldFNpemUodm9pZCk7CisKKy8qKgorICogRXJhc2Ugb25lIGZsYXNoIHBhZ2UgdGhhdCBpbmNsdWRlIHRoZSBpbnB1dCBhZGRyZXNzLgorICogVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmdW5jdGlvbi4gSXQgY2FuIHdvcmsgd2l0aCB1dGlsc0ZsYXNoU3RhdHVzV2FpdCB0byBjaGVjayB3aGVuIGVyYXNlIGlzIGRvbmUuCisgKgorICogVGhlIGZsYXNoIGFkZHJlc3Mgc3RhcnRzIGZyb20gMCwgYW5kIHRoaXMgZnVuY3Rpb24gbWFwcyB0aGUgaW5wdXQgYWRkcmVzcyB0byB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBmbGFzaCBmb3IgZXJhc2luZy4KKyAqIDAgaXMgYWx3YXlzIG1hcHBlZCB0byB0aGUgYmVnaW5uaW5nIG9mIG9uZSBmbGFzaCBwYWdlLgorICogVGhlIGlucHV0IGFkZHJlc3Mgc2hvdWxkIG5ldmVyIGJlIG1hcHBlZCB0byB0aGUgZmlybXdhcmUgc3BhY2Ugb3IgYW55IG90aGVyIHByb3RlY3RlZCBmbGFzaCBzcGFjZS4KKyAqCisgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGZsYXNoIHRvIGVyYXNlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgRXJhc2UgZmxhc2ggb3BlcmF0aW9uIGlzIHN0YXJ0ZWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgICAgICAgIEVyYXNlIGZsYXNoIG9wZXJhdGlvbiBpcyBub3Qgc3RhcnRlZC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICAgIGFBZGRyZXNzIGlzIG91dCBvZiByYW5nZSBvZiBmbGFzaCBvciBub3QgYWxpZ2VuZC4KKyAqLworb3RFcnJvciB1dGlsc0ZsYXNoRXJhc2VQYWdlKHVpbnQzMl90IGFBZGRyZXNzKTsKKworLyoqCisgICogQ2hlY2sgd2hldGhlciBmbGFzaCBpcyByZWFkeSBvciBidXN5LgorICAqCisgICogQHBhcmFtW2luXSAgYVRpbWVvdXQgIFRoZSBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgd2FpdGluZyBmb3IgdGhlIGZsYXNoIG9wZXJhdGlvbiB0byBiZSBkb25lIGFuZCBiZWNvbWUgcmVhZHkgYWdhaW4uCisgICogICAgICAgICAgICAgICAgICAgICAgIHplcm8gaW5kaWNhdGVzIHRoYXQgaXQgaXMgYSBwb2xsaW5nIGZ1bmN0aW9uLCBhbmQgcmV0dXJucyBjdXJyZW50IHN0YXR1cyBvZiBmbGFzaCBpbW1lZGlhdGVseS4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgbm9uLXplcm8gaW5kaWNhdGVzIHRoYXQgaXQgaXMgYmxvY2tpbmcgdGhlcmUgdW50aWwgdGhlIG9wZXJhdGlvbiBpcyBkb25lIGFuZCBiZWNvbWUgcmVhZHksIG9yIHRpbWVvdXQgZXhwaXJlcy4KKyAgKgorICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgRmxhc2ggaXMgcmVhZHkgZm9yIGFueSBvcGVyYXRpb24uCisgICogQHJldHZhbCBPVF9FUlJPUl9CVVNZICAgICAgICAgICBGbGFzaCBpcyBidXN5LgorICAqLworb3RFcnJvciB1dGlsc0ZsYXNoU3RhdHVzV2FpdCh1aW50MzJfdCBhVGltZW91dCk7CisKKy8qKgorICogV3JpdGUgZmxhc2guIFRoZSB3cml0ZSBvcGVyYXRpb24gb25seSBjbGVhcnMgYml0cywgYnV0IG5ldmVyIHNldCBiaXRzLgorICoKKyAqIFRoZSBmbGFzaCBhZGRyZXNzIHN0YXJ0cyBmcm9tIDAsIGFuZCB0aGlzIGZ1bmN0aW9uIG1hcHMgdGhlIGlucHV0IGFkZHJlc3MgdG8gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZmxhc2ggZm9yIHdyaXRpbmcuCisgKiAwIGlzIGFsd2F5cyBtYXBwZWQgdG8gdGhlIGJlZ2lubmluZyBvZiBvbmUgZmxhc2ggcGFnZS4KKyAqIFRoZSBpbnB1dCBhZGRyZXNzIHNob3VsZCBuZXZlciBiZSBtYXBwZWQgdG8gdGhlIGZpcm13YXJlIHNwYWNlIG9yIGFueSBvdGhlciBwcm90ZWN0ZWQgZmxhc2ggc3BhY2UuCisgKgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIFRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBmbGFzaCB0byB3cml0ZS4KKyAqIEBwYXJhbVtpbl0gIGFEYXRhICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZGF0YSB0byB3cml0ZS4KKyAqIEBwYXJhbVtpbl0gIGFTaXplICAgICBUaGUgc2l6ZSBvZiB0aGUgZGF0YSB0byB3cml0ZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgYWN0dWFsIHNpemUgb2Ygb2N0ZXRzIHdyaXRlIHRvIGZsYXNoLgorICogICAgICAgICAgSXQgaXMgZXhwZWN0ZWQgdGhlIHNhbWUgYXMgYVNpemUsIGFuZCBtYXkgYmUgbGVzcyB0aGFuIGFTaXplLgorICogICAgICAgICAgMCBpbmRpY2F0ZXMgdGhhdCBzb21ldGhpbmcgd3JvbmcgaGFwcGVucyB3aGVuIHdyaXRpbmcuCisgKi8KK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKTsKKworLyoqCisgKiBSZWFkIGZsYXNoLgorICoKKyAqIFRoZSBmbGFzaCBhZGRyZXNzIHN0YXJ0cyBmcm9tIDAsIGFuZCB0aGlzIGZ1bmN0aW9uIG1hcHMgdGhlIGlucHV0IGFkZHJlc3MgdG8gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZmxhc2ggZm9yIHJlYWRpbmcuCisgKiAwIGlzIGFsd2F5cyBtYXBwZWQgdG8gdGhlIGJlZ2lubmluZyBvZiBvbmUgZmxhc2ggcGFnZS4KKyAqIFRoZSBpbnB1dCBhZGRyZXNzIHNob3VsZCBuZXZlciBiZSBtYXBwZWQgdG8gdGhlIGZpcm13YXJlIHNwYWNlIG9yIGFueSBvdGhlciBwcm90ZWN0ZWQgZmxhc2ggc3BhY2UuCisgKgorICogQHBhcmFtW2luXSAgIGFBZGRyZXNzICBUaGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZmxhc2ggdG8gcmVhZC4KKyAqIEBwYXJhbVtPdXRdICBhRGF0YSAgICAgVGhlIHBvaW50ZXIgb2YgYnVmZmVyIGZvciByZWFkaW5nLgorICogQHBhcmFtW2luXSAgIGFTaXplICAgICBUaGUgc2l6ZSBvZiB0aGUgZGF0YSB0byByZWFkLgorICoKKyAqIEByZXR1cm5zIFRoZSBhY3R1YWwgc2l6ZSBvZiBvY3RldHMgcmVhZCB0byBidWZmZXIuCisgKiAgICAgICAgICBJdCBpcyBleHBlY3RlZCB0aGUgc2FtZSBhcyBhU2l6ZSwgYW5kIG1heSBiZSBsZXNzIHRoYW4gYVNpemUuCisgKiAgICAgICAgICAwIGluZGljYXRlcyB0aGF0IHNvbWV0aGluZyB3cm9uZyBoYXBwZW5zIHdoZW4gcmVhZGluZy4KKyAqLwordWludDMyX3QgdXRpbHNGbGFzaFJlYWQodWludDMyX3QgYUFkZHJlc3MsIHVpbnQ4X3QgKmFEYXRhLCB1aW50MzJfdCBhU2l6ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gVVRJTFNfRkxBU0hfSApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3V0aWxzL3NldHRpbmdzLmNwcCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscy9zZXR0aW5ncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExYzIyNQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscy9zZXR0aW5ncy5jcHAKQEAgLTAsMCArMSw0NjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIG5vbi12b2xhdGlsZSBzdG9yYWdlIG9mIHNldHRpbmdzLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQtY29yZS1jb25maWcuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQvdHlwZXMuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL3NldHRpbmdzLmgiCisKKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisKKyNpbmNsdWRlICJmbGFzaC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2VudW0KK3sKKyAgICBrQmxvY2tBZGRCZWdpbkZsYWcgPSAweDEsCisgICAga0Jsb2NrQWRkQ29tcGxldGVGbGFnID0gMHgwMiwKKyAgICBrQmxvY2tEZWxldGVGbGFnID0gMHgwNCwKKyAgICBrQmxvY2tJbmRleDBGbGFnID0gMHgwOCwKK307CisKK2VudW0KK3sKKyAgICBrU2V0dGluZ3NGbGFnU2l6ZSA9IDQsCisgICAga1NldHRpbmdzQmxvY2tEYXRhU2l6ZSA9IDI1NSwKKworICAgIGtTZXR0aW5nc0luU3dhcCA9IDB4YmU1Y2M1ZWYsCisgICAga1NldHRpbmdzSW5Vc2UgPSAweGJlNWNjNWVlLAorICAgIGtTZXR0aW5nc05vdFVzZSA9IDB4YmU1Y2M1ZWMsCit9OworCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorc3RydWN0IHNldHRpbmdzQmxvY2sKK3sKKyAgICB1aW50MTZfdCBrZXk7CisgICAgdWludDE2X3QgZmxhZzsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDE2X3QgcmVzZXJ2ZWQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworCisvKioKKyAqIEBkZWYgU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUworICoKKyAqIFRoZSBiYXNlIGFkZHJlc3Mgb2Ygc2V0dGluZ3MuCisgKgorICovCisjaWZuZGVmIFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1MKKyNkZWZpbmUgU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgzOTAwMAorI2VuZGlmICAvLyBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTCisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFCisgKgorICogVGhlIHBhZ2Ugc2l6ZSBvZiBzZXR0aW5ncy4KKyAqCisgKi8KKyNpZm5kZWYgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRQorI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFICAgICAgICAgICAgICAgICAgICAweDgwMAorI2VuZGlmICAvLyBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFCisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0KKyAqCisgKiBUaGUgcGFnZSBudW1iZXIgb2Ygc2V0dGluZ3MuCisgKgorICovCisjaWZuZGVmIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTQorI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0gICAgICAgICAgICAgICAgICAgICAyCisjZW5kaWYgIC8vIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTQorCitzdGF0aWMgdWludDMyX3Qgc1NldHRpbmdzQmFzZUFkZHJlc3M7CitzdGF0aWMgdWludDMyX3Qgc1NldHRpbmdzVXNlZFNpemU7CisKK3N0YXRpYyB1aW50MTZfdCBnZXRBbGlnbkxlbmd0aCh1aW50MTZfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuIChsZW5ndGggKyAzKSAmIDB4ZmZmYzsKK30KKworc3RhdGljIHZvaWQgc2V0U2V0dGluZ3NGbGFnKHVpbnQzMl90IGFCYXNlLCB1aW50MzJfdCBhRmxhZykKK3sKKyAgICB1dGlsc0ZsYXNoV3JpdGUoYUJhc2UsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmYUZsYWcpLCBzaXplb2YoYUZsYWcpKTsKK30KKworc3RhdGljIHZvaWQgaW5pdFNldHRpbmdzKHVpbnQzMl90IGFCYXNlLCB1aW50MzJfdCBhRmxhZykKK3sKKyAgICB1aW50MzJfdCBhZGRyZXNzID0gYUJhc2U7CisgICAgdWludDMyX3Qgc2V0dGluZ3NTaXplID0gU0VUVElOR1NfQ09ORklHX1BBR0VfTlVNID4gMSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRSAqIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTSAvIDIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkU7CisKKyAgICB3aGlsZSAoYWRkcmVzcyA8IChhQmFzZSArIHNldHRpbmdzU2l6ZSkpCisgICAgeworICAgICAgICB1dGlsc0ZsYXNoRXJhc2VQYWdlKGFkZHJlc3MpOworICAgICAgICB1dGlsc0ZsYXNoU3RhdHVzV2FpdCgxMDAwKTsKKyAgICAgICAgYWRkcmVzcyArPSBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFOworICAgIH0KKworICAgIHNldFNldHRpbmdzRmxhZyhhQmFzZSwgYUZsYWcpOworfQorCitzdGF0aWMgdWludDMyX3Qgc3dhcFNldHRpbmdzQmxvY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQzMl90IG9sZEJhc2UgPSBzU2V0dGluZ3NCYXNlQWRkcmVzczsKKyAgICB1aW50MzJfdCBzd2FwQWRkcmVzcyA9IG9sZEJhc2U7CisgICAgdWludDMyX3QgdXNlZFNpemUgPSBzU2V0dGluZ3NVc2VkU2l6ZTsKKyAgICB1aW50OF90IHBhZ2VOdW0gPSBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU07CisgICAgdWludDMyX3Qgc2V0dGluZ3NTaXplID0gcGFnZU51bSA+IDEgPyBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFICogcGFnZU51bSAvIDIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkU7CisKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdEVYUEVDVChwYWdlTnVtID4gMSk7CisKKyAgICBzU2V0dGluZ3NCYXNlQWRkcmVzcyA9IChzd2FwQWRkcmVzcyA9PSBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3dhcEFkZHJlc3MgKyBzZXR0aW5nc1NpemUpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1M7CisKKyAgICBpbml0U2V0dGluZ3Moc1NldHRpbmdzQmFzZUFkZHJlc3MsIHN0YXRpY19jYXN0PHVpbnQzMl90PihrU2V0dGluZ3NJblN3YXApKTsKKyAgICBzU2V0dGluZ3NVc2VkU2l6ZSA9IGtTZXR0aW5nc0ZsYWdTaXplOworICAgIHN3YXBBZGRyZXNzICs9IGtTZXR0aW5nc0ZsYWdTaXplOworCisgICAgd2hpbGUgKHN3YXBBZGRyZXNzIDwgKG9sZEJhc2UgKyB1c2VkU2l6ZSkpCisgICAgeworICAgICAgICBPVF9UT09MX1BBQ0tFRF9CRUdJTgorICAgICAgICBzdHJ1Y3QgYWRkU2V0dGluZ3NCbG9jaworICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3Qgc2V0dGluZ3NCbG9jayBibG9jazsKKyAgICAgICAgICAgIHVpbnQ4X3QgZGF0YVtrU2V0dGluZ3NCbG9ja0RhdGFTaXplXTsKKyAgICAgICAgfSBPVF9UT09MX1BBQ0tFRF9FTkQgYWRkQmxvY2s7CisgICAgICAgIGJvb2wgdmFsaWQgPSB0cnVlOworCisgICAgICAgIHV0aWxzRmxhc2hSZWFkKHN3YXBBZGRyZXNzLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmFkZEJsb2NrLmJsb2NrKSwgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSk7CisgICAgICAgIHN3YXBBZGRyZXNzICs9IHNpemVvZihzdHJ1Y3Qgc2V0dGluZ3NCbG9jayk7CisKKyAgICAgICAgaWYgKCEoYWRkQmxvY2suYmxvY2suZmxhZyAmIGtCbG9ja0FkZENvbXBsZXRlRmxhZykgJiYgKGFkZEJsb2NrLmJsb2NrLmZsYWcgJiBrQmxvY2tEZWxldGVGbGFnKSkKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgYWRkcmVzcyA9IHN3YXBBZGRyZXNzICsgZ2V0QWxpZ25MZW5ndGgoYWRkQmxvY2suYmxvY2subGVuZ3RoKTsKKworICAgICAgICAgICAgd2hpbGUgKGFkZHJlc3MgPCAob2xkQmFzZSArIHVzZWRTaXplKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2V0dGluZ3NCbG9jayBibG9jazsKKworICAgICAgICAgICAgICAgIHV0aWxzRmxhc2hSZWFkKGFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmYmxvY2spLCBzaXplb2YoYmxvY2spKTsKKworICAgICAgICAgICAgICAgIGlmICghKGJsb2NrLmZsYWcgJiBrQmxvY2tBZGRDb21wbGV0ZUZsYWcpICYmIChibG9jay5mbGFnICYga0Jsb2NrRGVsZXRlRmxhZykgJiYKKyAgICAgICAgICAgICAgICAgICAgIShibG9jay5mbGFnICYga0Jsb2NrSW5kZXgwRmxhZykgJiYgKGJsb2NrLmtleSA9PSBhZGRCbG9jay5ibG9jay5rZXkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYWRkcmVzcyArPSAoZ2V0QWxpZ25MZW5ndGgoYmxvY2subGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2V0dGluZ3NCbG9jaykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXRpbHNGbGFzaFJlYWQoc3dhcEFkZHJlc3MsIGFkZEJsb2NrLmRhdGEsIGdldEFsaWduTGVuZ3RoKGFkZEJsb2NrLmJsb2NrLmxlbmd0aCkpOworICAgICAgICAgICAgICAgIHV0aWxzRmxhc2hXcml0ZShzU2V0dGluZ3NCYXNlQWRkcmVzcyArIHNTZXR0aW5nc1VzZWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmFkZEJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QWxpZ25MZW5ndGgoYWRkQmxvY2suYmxvY2subGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2V0dGluZ3NCbG9jaykpOworICAgICAgICAgICAgICAgIHNTZXR0aW5nc1VzZWRTaXplICs9IChzaXplb2Yoc3RydWN0IHNldHRpbmdzQmxvY2spICsgZ2V0QWxpZ25MZW5ndGgoYWRkQmxvY2suYmxvY2subGVuZ3RoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYWRkQmxvY2suYmxvY2suZmxhZyA9PSAweGZmKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3YXBBZGRyZXNzICs9IGdldEFsaWduTGVuZ3RoKGFkZEJsb2NrLmJsb2NrLmxlbmd0aCk7CisgICAgfQorCisgICAgc2V0U2V0dGluZ3NGbGFnKHNTZXR0aW5nc0Jhc2VBZGRyZXNzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oa1NldHRpbmdzSW5Vc2UpKTsKKyAgICBzZXRTZXR0aW5nc0ZsYWcob2xkQmFzZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtTZXR0aW5nc05vdFVzZSkpOworCitleGl0OgorICAgIHJldHVybiBzZXR0aW5nc1NpemUgLSBzU2V0dGluZ3NVc2VkU2l6ZTsKK30KKworc3RhdGljIG90RXJyb3IgYWRkU2V0dGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFLZXksIGJvb2wgYUluZGV4MCwgY29uc3QgdWludDhfdCAqYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgT1RfVE9PTF9QQUNLRURfQkVHSU4KKyAgICBzdHJ1Y3QgYWRkU2V0dGluZ3NCbG9jaworICAgIHsKKyAgICAgICAgc3RydWN0IHNldHRpbmdzQmxvY2sgYmxvY2s7CisgICAgICAgIHVpbnQ4X3QgZGF0YVtrU2V0dGluZ3NCbG9ja0RhdGFTaXplXTsKKyAgICB9IE9UX1RPT0xfUEFDS0VEX0VORCBhZGRCbG9jazsKKyAgICB1aW50MzJfdCBzZXR0aW5nc1NpemUgPSBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0gPiAxID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFICogU0VUVElOR1NfQ09ORklHX1BBR0VfTlVNIC8gMiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRTsKKworICAgIGFkZEJsb2NrLmJsb2NrLmZsYWcgPSAweGZmOworICAgIGFkZEJsb2NrLmJsb2NrLmtleSA9IGFLZXk7CisKKyAgICBpZiAoYUluZGV4MCkKKyAgICB7CisgICAgICAgIGFkZEJsb2NrLmJsb2NrLmZsYWcgJj0gKH5rQmxvY2tJbmRleDBGbGFnKTsKKyAgICB9CisKKyAgICBhZGRCbG9jay5ibG9jay5mbGFnICY9ICh+a0Jsb2NrQWRkQmVnaW5GbGFnKTsKKyAgICBhZGRCbG9jay5ibG9jay5sZW5ndGggPSBhVmFsdWVMZW5ndGg7CisKKyAgICBpZiAoKHNTZXR0aW5nc1VzZWRTaXplICsgZ2V0QWxpZ25MZW5ndGgoYWRkQmxvY2suYmxvY2subGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2V0dGluZ3NCbG9jaykpID49CisgICAgICAgIHNldHRpbmdzU2l6ZSkKKyAgICB7CisgICAgICAgIG90RVhQRUNUX0FDVElPTihzd2FwU2V0dGluZ3NCbG9jayhhSW5zdGFuY2UpID49IChnZXRBbGlnbkxlbmd0aChhZGRCbG9jay5ibG9jay5sZW5ndGgpICsgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSksCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIH0KKworICAgIHV0aWxzRmxhc2hXcml0ZShzU2V0dGluZ3NCYXNlQWRkcmVzcyArIHNTZXR0aW5nc1VzZWRTaXplLAorICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmFkZEJsb2NrLmJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSk7CisKKyAgICBtZW1zZXQoYWRkQmxvY2suZGF0YSwgMHhmZiwga1NldHRpbmdzQmxvY2tEYXRhU2l6ZSk7CisgICAgbWVtY3B5KGFkZEJsb2NrLmRhdGEsIGFWYWx1ZSwgYWRkQmxvY2suYmxvY2subGVuZ3RoKTsKKworICAgIHV0aWxzRmxhc2hXcml0ZShzU2V0dGluZ3NCYXNlQWRkcmVzcyArIHNTZXR0aW5nc1VzZWRTaXplICsgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGFkZEJsb2NrLmRhdGEpLCBnZXRBbGlnbkxlbmd0aChhZGRCbG9jay5ibG9jay5sZW5ndGgpKTsKKworICAgIGFkZEJsb2NrLmJsb2NrLmZsYWcgJj0gKH5rQmxvY2tBZGRDb21wbGV0ZUZsYWcpOworICAgIHV0aWxzRmxhc2hXcml0ZShzU2V0dGluZ3NCYXNlQWRkcmVzcyArIHNTZXR0aW5nc1VzZWRTaXplLAorICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmFkZEJsb2NrLmJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSk7CisgICAgc1NldHRpbmdzVXNlZFNpemUgKz0gKHNpemVvZihzdHJ1Y3Qgc2V0dGluZ3NCbG9jaykgKyBnZXRBbGlnbkxlbmd0aChhZGRCbG9jay5ibG9jay5sZW5ndGgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKy8vIHNldHRpbmdzIEFQSQordm9pZCBvdFBsYXRTZXR0aW5nc0luaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQ4X3QgaW5kZXg7CisgICAgdWludDMyX3Qgc2V0dGluZ3NTaXplID0gU0VUVElOR1NfQ09ORklHX1BBR0VfTlVNID4gMSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRSAqIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTSAvIDIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkU7CisKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBzU2V0dGluZ3NCYXNlQWRkcmVzcyA9IFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1M7CisKKyAgICB1dGlsc0ZsYXNoSW5pdCgpOworCisgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGJsb2NrRmxhZzsKKworICAgICAgICBzU2V0dGluZ3NCYXNlQWRkcmVzcyArPSBzZXR0aW5nc1NpemUgKiBpbmRleDsKKyAgICAgICAgdXRpbHNGbGFzaFJlYWQoc1NldHRpbmdzQmFzZUFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmYmxvY2tGbGFnKSwgc2l6ZW9mKGJsb2NrRmxhZykpOworCisgICAgICAgIGlmIChibG9ja0ZsYWcgPT0ga1NldHRpbmdzSW5Vc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluZGV4ID09IDIpCisgICAgeworICAgICAgICBpbml0U2V0dGluZ3Moc1NldHRpbmdzQmFzZUFkZHJlc3MsIHN0YXRpY19jYXN0PHVpbnQzMl90PihrU2V0dGluZ3NJblVzZSkpOworICAgIH0KKworICAgIHNTZXR0aW5nc1VzZWRTaXplID0ga1NldHRpbmdzRmxhZ1NpemU7CisKKyAgICB3aGlsZSAoc1NldHRpbmdzVXNlZFNpemUgPCBzZXR0aW5nc1NpemUpCisgICAgeworICAgICAgICBzdHJ1Y3Qgc2V0dGluZ3NCbG9jayBibG9jazsKKworICAgICAgICB1dGlsc0ZsYXNoUmVhZChzU2V0dGluZ3NCYXNlQWRkcmVzcyArIHNTZXR0aW5nc1VzZWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmJsb2NrKSwgc2l6ZW9mKGJsb2NrKSk7CisKKyAgICAgICAgaWYgKCEoYmxvY2suZmxhZyAmIGtCbG9ja0FkZEJlZ2luRmxhZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNTZXR0aW5nc1VzZWRTaXplICs9IChnZXRBbGlnbkxlbmd0aChibG9jay5sZW5ndGgpICsgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0FiYW5kb25DaGFuZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0dldChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFLZXksIGludCBhSW5kZXgsIHVpbnQ4X3QgKmFWYWx1ZSwgdWludDE2X3QgKmFWYWx1ZUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgIHVpbnQzMl90IGFkZHJlc3MgPSBzU2V0dGluZ3NCYXNlQWRkcmVzcyArIGtTZXR0aW5nc0ZsYWdTaXplOworICAgIHVpbnQxNl90IHZhbHVlTGVuZ3RoID0gMDsKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgd2hpbGUgKGFkZHJlc3MgPCAoc1NldHRpbmdzQmFzZUFkZHJlc3MgKyBzU2V0dGluZ3NVc2VkU2l6ZSkpCisgICAgeworICAgICAgICBzdHJ1Y3Qgc2V0dGluZ3NCbG9jayBibG9jazsKKworICAgICAgICB1dGlsc0ZsYXNoUmVhZChhZGRyZXNzLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmJsb2NrKSwgc2l6ZW9mKGJsb2NrKSk7CisKKyAgICAgICAgaWYgKGJsb2NrLmtleSA9PSBhS2V5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIShibG9jay5mbGFnICYga0Jsb2NrSW5kZXgwRmxhZykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShibG9jay5mbGFnICYga0Jsb2NrQWRkQ29tcGxldGVGbGFnKSAmJiAoYmxvY2suZmxhZyAmIGtCbG9ja0RlbGV0ZUZsYWcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBhSW5kZXgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCByZWFkTGVuZ3RoID0gYmxvY2subGVuZ3RoOworCisgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgcGVyZm9ybSByZWFkIGlmIGFuIGlucHV0IGJ1ZmZlciB3YXMgcGFzc2VkIGluCisgICAgICAgICAgICAgICAgICAgIGlmIChhVmFsdWUgIT0gTlVMTCAmJiBhVmFsdWVMZW5ndGggIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRqdXN0IHJlYWQgbGVuZ3RoIGlmIGlucHV0IGJ1ZmZlciBsZW5ndGggaXMgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRMZW5ndGggPiAqYVZhbHVlTGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRMZW5ndGggPSAqYVZhbHVlTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB1dGlsc0ZsYXNoUmVhZChhZGRyZXNzICsgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSwgYVZhbHVlLCByZWFkTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHZhbHVlTGVuZ3RoID0gYmxvY2subGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFkZHJlc3MgKz0gKGdldEFsaWduTGVuZ3RoKGJsb2NrLmxlbmd0aCkgKyBzaXplb2Yoc3RydWN0IHNldHRpbmdzQmxvY2spKTsKKyAgICB9CisKKyAgICBpZiAoYVZhbHVlTGVuZ3RoICE9IE5VTEwpCisgICAgeworICAgICAgICAqYVZhbHVlTGVuZ3RoID0gdmFsdWVMZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFNldHRpbmdzU2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlLCB1aW50MTZfdCBhVmFsdWVMZW5ndGgpCit7CisgICAgcmV0dXJuIGFkZFNldHRpbmcoYUluc3RhbmNlLCBhS2V5LCB0cnVlLCBhVmFsdWUsIGFWYWx1ZUxlbmd0aCk7Cit9CisKK290RXJyb3Igb3RQbGF0U2V0dGluZ3NBZGQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWUsIHVpbnQxNl90IGFWYWx1ZUxlbmd0aCkKK3sKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgYm9vbCBpbmRleDA7CisKKyAgICBpbmRleDAgPSAob3RQbGF0U2V0dGluZ3NHZXQoYUluc3RhbmNlLCBhS2V5LCAwLCBOVUxMLCAmbGVuZ3RoKSA9PSBPVF9FUlJPUl9OT1RfRk9VTkQgPyB0cnVlIDogZmFsc2UpOworICAgIHJldHVybiBhZGRTZXR0aW5nKGFJbnN0YW5jZSwgYUtleSwgaW5kZXgwLCBhVmFsdWUsIGFWYWx1ZUxlbmd0aCk7Cit9CisKK290RXJyb3Igb3RQbGF0U2V0dGluZ3NEZWxldGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhS2V5LCBpbnQgYUluZGV4KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgdWludDMyX3QgYWRkcmVzcyA9IHNTZXR0aW5nc0Jhc2VBZGRyZXNzICsga1NldHRpbmdzRmxhZ1NpemU7CisgICAgaW50IGluZGV4ID0gMDsKKworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHdoaWxlIChhZGRyZXNzIDwgKHNTZXR0aW5nc0Jhc2VBZGRyZXNzICsgc1NldHRpbmdzVXNlZFNpemUpKQorICAgIHsKKyAgICAgICAgc3RydWN0IHNldHRpbmdzQmxvY2sgYmxvY2s7CisKKyAgICAgICAgdXRpbHNGbGFzaFJlYWQoYWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZibG9jayksIHNpemVvZihibG9jaykpOworCisgICAgICAgIGlmIChibG9jay5rZXkgPT0gYUtleSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCEoYmxvY2suZmxhZyAmIGtCbG9ja0luZGV4MEZsYWcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCEoYmxvY2suZmxhZyAmIGtCbG9ja0FkZENvbXBsZXRlRmxhZykgJiYgKGJsb2NrLmZsYWcgJiBrQmxvY2tEZWxldGVGbGFnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYUluZGV4ID09IGluZGV4IHx8IGFJbmRleCA9PSAtMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suZmxhZyAmPSAofmtCbG9ja0RlbGV0ZUZsYWcpOworICAgICAgICAgICAgICAgICAgICB1dGlsc0ZsYXNoV3JpdGUoYWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZibG9jayksIHNpemVvZihibG9jaykpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAxICYmIGFJbmRleCA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suZmxhZyAmPSAofmtCbG9ja0luZGV4MEZsYWcpOworICAgICAgICAgICAgICAgICAgICB1dGlsc0ZsYXNoV3JpdGUoYWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZibG9jayksIHNpemVvZihibG9jaykpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhZGRyZXNzICs9IChnZXRBbGlnbkxlbmd0aChibG9jay5sZW5ndGgpICsgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIG90UGxhdFNldHRpbmdzV2lwZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaW5pdFNldHRpbmdzKHNTZXR0aW5nc0Jhc2VBZGRyZXNzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oa1NldHRpbmdzSW5Vc2UpKTsKKyAgICBvdFBsYXRTZXR0aW5nc0luaXQoYUluc3RhbmNlKTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL01ha2VmaWxlLmFtIGIvaW5jbHVkZS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTYzYmViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDUxIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKKyMgQWx3YXlzIHBhY2thZ2UgKGUuZy4gZm9yICdtYWtlIGRpc3QnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworRElTVF9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIG9wZW50aHJlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBBbHdheXMgYnVpbGQgKGUuZy4gZm9yICdtYWtlIGFsbCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgb3BlbnRocmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIEFsd2F5cyBwcmV0dHkgKGUuZy4gZm9yICdtYWtlIHByZXR0eScpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitQUkVUVFlfU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgb3BlbnRocmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpbnN0YWxsLWhlYWRlcnM6IGluc3RhbGwtaW5jbHVkZUhFQURFUlMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OWI5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQtd2luZG93cy1jb25maWcuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBOQ1AgVUFSVCBpbnRlcmZhY2UuICovCisvLyBPbiB0aGUgY29tbWFuZCBsaW5lOiAjZGVmaW5lIE9QRU5USFJFQURfRU5BQkxFX05DUF9VQVJUIDAKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBOQ1AgU1BJIGludGVyZmFjZS4gKi8KKy8vIE9uIHRoZSBjb21tYW5kIGxpbmU6ICNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQSSAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgT3BlblRocmVhZAorICAgaW5zdGFuY2VzLiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZGVmYXVsdCBsb2cgb3V0cHV0LiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUIDEKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBjb21taXNzaW9uZXIgcm9sZS4gKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gdXNlIGRpYWdub3N0aWNzIG1vZHVsZSAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHIDAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGxlZ2FjeSBuZXR3b3JrLiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kgMAorCisvKiBEZWZpbmUgdG8gMSB0byBlbmFibGUgZHRscyBzdXBwb3J0LiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9EVExTIDEKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBqb2luZXIgcm9sZS4gKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSIDEKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBqYW0gZGV0ZWN0aW9uLiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OIDAKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIERIQ1B2NiBDbGllbnQuICovCisjZGVmaW5lIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVCAxCisKKy8qIERlZmluZSB0byAxIHRvIGVuYWJsZSBESENQdjYgU0VSVkVSLiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIgMQorCisvKiBEZWZpbmUgdG8gMSB0byBlbmFibGUgTUFDIHdoaXRlbGlzdC9ibGFja2xpc3QgZmVhdHVyZS4gKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVCAxCisKKy8qIERlZmluZSB0byAxIHRvIGVuYWJsZSBUTUYgcHJveHkgZmVhdHVyZS4gKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZIDAKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHJhdyBsaW5rLWxheWVyIEFQSS4gKi8KKyNpZmRlZiBfS0VSTkVMX01PREUKKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJIDAKKyNlbHNlCisjZGVmaW5lIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSSAxCisjZW5kaWYKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIEJvcmRlciBSb3V0ZXIgZmVhdHVyZS4gKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUiAxCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFICJvcGVudGhyZWFkIgorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIm9wZW50aHJlYWQtZGV2ZWxAZ29vZ2xlZ3JvdXBzLmNvbSIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX05BTUUgIk9QRU5USFJFQUQiCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIk9QRU5USFJFQUQgMC4wMS4wMCIKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIm9wZW50aHJlYWQiCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVVJMICJodHRwOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQiCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMC4wMS4wMCIKKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworI2RlZmluZSBWRVJTSU9OICIwLjAxLjAwIgorCisvKiBQbGF0Zm9ybSB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBMQVRGT1JNX0lORk8gIldpbmRvd3MiCisKKy8vIFdpbmRvd3MgS2VybmVsIG9ubHkgaGFzIHNwcmludGZfcworI2lmZGVmIF9LRVJORUxfTU9ERQorI2RlZmluZSBzbnByaW50ZiBzcHJpbnRmX3MKKyNlbmRpZiAvLyBfS0VSTkVMX01PREUKKworLy8gUmVkZWZpbmUgcmFuZCB0byByYW5kb20gZm9yIHRlc3QgY29kZQorI2RlZmluZSByYW5kb20gcmFuZAorCisvLyBEaXNhYmxlIGEgZmV3IHdhcm5pbmdzIHRoYXQgd2UgZG9uJ3QgY2FyZSBhYm91dAorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDIwMCkgIC8vIG5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2VkOiB6ZXJvLXNpemVkIGFycmF5IGluIHN0cnVjdC91bmlvbgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDIwMSkgIC8vIG5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2VkIDogbmFtZWxlc3Mgc3RydWN0L3VuaW9uCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjkxKSAgLy8gbm8gbWF0Y2hpbmcgb3BlcmF0b3IgZGVsZXRlIGZvdW5kCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0ODE1KSAgLy8gemVyby1zaXplZCBhcnJheSBpbiBzdGFjayBvYmplY3Qgd2lsbCBoYXZlIG5vIGVsZW1lbnRzCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvTWFrZWZpbGUuYW0gYi9pbmNsdWRlL29wZW50aHJlYWQvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjN2I5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDkwIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKKyMgQWx3YXlzIHBhY2thZ2UgKGUuZy4gZm9yICdtYWtlIGRpc3QnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworRElTVF9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHBsYXRmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBBbHdheXMgYnVpbGQgKGUuZy4gZm9yICdtYWtlIGFsbCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIEFsd2F5cyBwcmV0dHkgKGUuZy4gZm9yICdtYWtlIHByZXR0eScpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitQUkVUVFlfU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitvcGVudGhyZWFkX2hlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY2hpbGRfc3VwZXJ2aXNpb24uaCAgICAgICAgICAgICAgICAgICBcCisgICAgY2xpLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29hcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29tbWlzc2lvbmVyLmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29uZmlnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY3J5cHRvLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYm9yZGVyX3JvdXRlci5oICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGF0YXNldC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGF0YXNldF9mdGQuaCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGlhZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGhjcDZfY2xpZW50LmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGhjcDZfc2VydmVyLmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG5zLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWNtcDYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5zdGFuY2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaXA2LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgamFtX2RldGVjdGlvbi5oICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgam9pbmVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbGluay5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbGlua19yYXcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWVzc2FnZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmNwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmV0ZGF0YS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgb3BlbnRocmVhZC5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGFza2xldC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGhyZWFkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGhyZWFkX2Z0ZC5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdG1mX3Byb3h5LmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdWRwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitvcGVudGhyZWFkZGlyID0gJChpbmNsdWRlZGlyKS9vcGVudGhyZWFkCitkaXN0X29wZW50aHJlYWRfSEVBREVSUyA9ICQob3BlbnRocmVhZF9oZWFkZXJzKQorCitpbmNsdWRlX0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitpbnN0YWxsLWhlYWRlcnM6IGluc3RhbGwtaW5jbHVkZUhFQURFUlMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvYm9yZGVyX3JvdXRlci5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2JvcmRlcl9yb3V0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzg3MWY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2JvcmRlcl9yb3V0ZXIuaApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBCb3JkZXIgUm91dGVyIEFQSS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQk9SREVSX1JPVVRFUl9IXworI2RlZmluZSBPUEVOVEhSRUFEX0JPUkRFUl9ST1VURVJfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1ib3JkZXItcm91dGVyCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIGZ1bGwgb3Igc3RhYmxlIGNvcHkgb2YgdGhlIGxvY2FsIFRocmVhZCBOZXR3b3JrIERhdGEuCisgKgorICogQHBhcmFtW2luXSAgICAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgICAgYVN0YWJsZSAgICAgIFRSVUUgd2hlbiBjb3B5aW5nIHRoZSBzdGFibGUgdmVyc2lvbiwgRkFMU0Ugd2hlbiBjb3B5aW5nIHRoZSBmdWxsIHZlcnNpb24uCisgKiBAcGFyYW1bb3V0XSAgICBhRGF0YSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbm91dF0gIGFEYXRhTGVuZ3RoICBPbiBlbnRyeSwgc2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIgcG9pbnRlZCB0byBieSBAcCBhRGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBleGl0LCBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdEJvcmRlclJvdXRlckdldE5ldERhdGEob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFTdGFibGUsIHVpbnQ4X3QgKmFEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFEYXRhTGVuZ3RoKTsKKworLyoqCisgKiBBZGQgYSBib3JkZXIgcm91dGVyIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ29uZmlnICAgQSBwb2ludGVyIHRvIHRoZSBib3JkZXIgcm91dGVyIGNvbmZpZ3VyYXRpb24uCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgY29uZmlndXJhdGlvbiB0byB0aGUgbG9jYWwgbmV0d29yayBkYXRhLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIE9uZSBvciBtb3JlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB3ZXJlIGludmFsaWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgTm90IGVub3VnaCByb29tIGlzIGF2YWlsYWJsZSB0byBhZGQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqCisgKiBAc2Egb3RCb3JkZXJSb3V0ZXJSZW1vdmVPbk1lc2hQcmVmaXgKKyAqIEBzYSBvdEJvcmRlclJvdXRlclJlZ2lzdGVyCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Qm9yZGVyUm91dGVyQWRkT25NZXNoUHJlZml4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcpOworCisvKioKKyAqIFJlbW92ZSBhIGJvcmRlciByb3V0ZXIgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBsb2NhbCBuZXR3b3JrIGRhdGEuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVByZWZpeCAgIEEgcG9pbnRlciB0byBhbiBJUHY2IHByZWZpeC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBjb25maWd1cmF0aW9uIGZyb20gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqCisgKiBAc2Egb3RCb3JkZXJSb3V0ZXJBZGRPbk1lc2hQcmVmaXgKKyAqIEBzYSBvdEJvcmRlclJvdXRlclJlZ2lzdGVyCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Qm9yZGVyUm91dGVyUmVtb3ZlT25NZXNoUHJlZml4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZQcmVmaXggKmFQcmVmaXgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbmV4dCBPbiBNZXNoIFByZWZpeCBpbiB0aGUgbG9jYWwgTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhSXRlcmF0b3IgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhIGl0ZXJhdG9yIGNvbnRleHQuIFRvIGdldCB0aGUgZmlyc3Qgb24tbWVzaCBlbnRyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBzaG91bGQgYmUgc2V0IHRvIE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklULgorICogQHBhcmFtW291dF0gICAgYUNvbmZpZyAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIE9uIE1lc2ggUHJlZml4IGluZm9ybWF0aW9uIHdpbGwgYmUgcGxhY2VkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgZm91bmQgdGhlIG5leHQgT24gTWVzaCBwcmVmaXguCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgTm8gc3Vic2VxdWVudCBPbiBNZXNoIHByZWZpeCBleGlzdHMgaW4gdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdEJvcmRlclJvdXRlckdldE5leHRPbk1lc2hQcmVmaXgob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEJvcmRlclJvdXRlckNvbmZpZyAqYUNvbmZpZyk7CisKKy8qKgorICogQWRkIGFuIGV4dGVybmFsIHJvdXRlIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ29uZmlnICAgQSBwb2ludGVyIHRvIHRoZSBleHRlcm5hbCByb3V0ZSBjb25maWd1cmF0aW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBPbmUgb3IgbW9yZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgd2VyZSBpbnZhbGlkLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIE5vdCBlbm91Z2ggcm9vbSBpcyBhdmFpbGFibGUgdG8gYWRkIHRoZSBjb25maWd1cmF0aW9uIHRvIHRoZSBsb2NhbCBuZXR3b3JrIGRhdGEuCisgKgorICogQHNhIG90Qm9yZGVyUm91dGVyUmVtb3ZlUm91dGUKKyAqIEBzYSBvdEJvcmRlclJvdXRlclJlZ2lzdGVyCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Qm9yZGVyUm91dGVyQWRkUm91dGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdEV4dGVybmFsUm91dGVDb25maWcgKmFDb25maWcpOworCisvKioKKyAqIFJlbW92ZSBhbiBleHRlcm5hbCByb3V0ZSBjb25maWd1cmF0aW9uIGZyb20gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUHJlZml4ICAgQSBwb2ludGVyIHRvIGFuIElQdjYgcHJlZml4LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbG9jYWwgbmV0d29yayBkYXRhLgorICoKKyAqIEBzYSBvdEJvcmRlclJvdXRlckFkZFJvdXRlCisgKiBAc2Egb3RCb3JkZXJSb3V0ZXJSZWdpc3RlcgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdEJvcmRlclJvdXRlclJlbW92ZVJvdXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZQcmVmaXggKmFQcmVmaXgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbmV4dCBleHRlcm5hbCByb3V0ZSBpbiB0aGUgbG9jYWwgTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhSXRlcmF0b3IgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhIGl0ZXJhdG9yIGNvbnRleHQuIFRvIGdldCB0aGUgZmlyc3QgZXh0ZXJuYWwgcm91dGUgZW50cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIHNldCB0byBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVC4KKyAqIEBwYXJhbVtvdXRdICAgIGFDb25maWcgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBFeHRlcm5hbCBSb3V0ZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGZvdW5kIHRoZSBuZXh0IEV4dGVybmFsIFJvdXRlLgorICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE5vIHN1YnNlcXVlbnQgZXh0ZXJuYWwgcm91dGUgZW50cnkgZXhpc3RzIGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICoKKyAqLworb3RFcnJvciBvdEJvcmRlclJvdXRlckdldE5leHRSb3V0ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0d29ya0RhdGFJdGVyYXRvciAqYUl0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEV4dGVybmFsUm91dGVDb25maWcgKmFDb25maWcpOworCisvKioKKyAqIEltbWVkaWF0ZWx5IHJlZ2lzdGVyIHRoZSBsb2NhbCBuZXR3b3JrIGRhdGEgd2l0aCB0aGUgTGVhZGVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHF1ZXVlZCBhIFNlcnZlciBEYXRhIFJlcXVlc3QgbWVzc2FnZSBmb3IgZGVsaXZlcnkuCisgKgorICogQHNhIG90Qm9yZGVyUm91dGVyQWRkT25NZXNoUHJlZml4CisgKiBAc2Egb3RCb3JkZXJSb3V0ZXJSZW1vdmVPbk1lc2hQcmVmaXgKKyAqIEBzYSBvdEJvcmRlclJvdXRlckFkZFJvdXRlCisgKiBAc2Egb3RCb3JkZXJSb3V0ZXJSZW1vdmVSb3V0ZQorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdEJvcmRlclJvdXRlclJlZ2lzdGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0JPUkRFUl9ST1VURVJfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9jaGlsZF9zdXBlcnZpc2lvbi5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2NoaWxkX3N1cGVydmlzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3YzUzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9jaGlsZF9zdXBlcnZpc2lvbi5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBPZW5UaHJlYWQgQVBJIGZvciBjaGlsZCBzdXBlcnZpc2lvbiBmZWF0dXJlCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0NISUxEX1NVUEVSVklTSU9OX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ0hJTERfU1VQRVJWSVNJT05fSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkL3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OCisKKy8qKgorICogQGFkZHRvZ3JvdXAgYXBpLWNoaWxkLXN1cGVydmlzaW9uCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgY2hpbGQgc3VwZXJ2aXNpb24gZmVhdHVyZS4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIEdldCB0aGUgY2hpbGQgc3VwZXJ2aXNpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpLgorICoKKyAqIENoaWxkIHN1cGVydmlzaW9uIGZlYXR1cmUgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHBhcmVudCB0byBlbnN1cmUgdGhhdCBhIG1lc3NhZ2UgaXMgc2VudCB0byBlYWNoIHNsZWVweSBjaGlsZAorICogd2l0aGluIHRoZSBzdXBlcnZpc2lvbiBpbnRlcnZhbC4gSWYgdGhlcmUgaXMgbm8gdHJhbnNtaXNzaW9uIHRvIHRoZSBjaGlsZCB3aXRoaW4gdGhlIHN1cGVydmlzaW9uIGludGVydmFsLAorICogT3BlblRocmVhZCB3aWxsIGVucXVldWUgYW5kIHNlbmQgYSBzdXBlcnZpc2lvbiBtZXNzYWdlIChhIGRhdGEgbWVzc2FnZSB3aXRoIGVtcHR5IHBheWxvYWQpIHRvIHRoZSBjaGlsZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgIFRoZSBjaGlsZCBzdXBlcnZpc2lvbiBpbnRlcnZhbC4gWmVybyBpbmRpY2F0ZXMgdGhhdCBjaGlsZCBzdXBlcnZpc2lvbiBpcyBkaXNhYmxlZC4KKyAqCisgKi8KK3VpbnQxNl90IG90Q2hpbGRTdXBlcnZpc2lvbkdldEludGVydmFsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2V0IHRoZSBjaGlsZCBzdXBlcnZpc2lvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUludGVydmFsICAgICAgIFRoZSBzdXBlcnZpc2lvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykuIFplcm8gdG8gZGlzYWJsZSBzdXBlcnZpc2lvbiBvbiBwYXJlbnQuCisgKgorICovCit2b2lkIG90Q2hpbGRTdXBlcnZpc2lvblNldEludGVydmFsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUludGVydmFsKTsKKworLyoqCisgKiBHZXQgdGhlIHN1cGVydmlzaW9uIGNoZWNrIHRpbWVvdXQgaW50ZXJ2YWwgKGluIHNlY29uZHMpLgorICoKKyAqIElmIHRoZSBkZXZpY2UgaXMgYSBzbGVlcHkgY2hpbGQgYW5kIGl0IGRvZXMgbm90IGhlYXIgZnJvbSBpdHMgcGFyZW50IHdpdGhpbiB0aGUgc3BlY2lmaWVkIGNoZWNrIHRpbWVvdXQsIGl0IGluaXRpYXRlcworICogdGhlIHJlLWF0dGFjaCBwcm9jZXNzIChNTEUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QvUmVzcG9uc2UgZXhjaGFuZ2Ugd2l0aCBpdHMgcGFyZW50KS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgIFRoZSBzdXBlcnZpc2lvbiBjaGVjayB0aW1lb3V0LiBaZXJvIGluZGljYXRlcyB0aGF0IHN1cGVydmlzaW9uIGNoZWNrIG9uIHRoZSBjaGlsZCBpcyBkaXNhYmxlZC4KKyAqCisgKi8KK3VpbnQxNl90IG90Q2hpbGRTdXBlcnZpc2lvbkdldENoZWNrVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgc3VwZXJ2aXNpb24gY2hlY2sgdGltZW91dCBpbnRlcnZhbCAoaW4gc2Vjb25kcykuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVRpbWVvdXQgICAgICAgIFRoZSBjaGVjayB0aW1lb3V0IChpbiBzZWNvbmRzKS4gWmVybyB0byBkaXNhYmxlIHN1cGVydmlzaW9uIGNoZWNrIG9uIHRoZSBjaGlsZC4KKyAqCisgKi8KK3ZvaWQgb3RDaGlsZFN1cGVydmlzaW9uU2V0Q2hlY2tUaW1lb3V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVRpbWVvdXQpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT04KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NISUxEX1NVUEVSVklTSU9OX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvY2xpLmggYi9pbmNsdWRlL29wZW50aHJlYWQvY2xpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkMGE0NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9jbGkuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHRvcC1sZXZlbCBmdW5jdGlvbnMgZm9yIHRoZSBPcGVuVGhyZWFkIENMSSBzZXJ2ZXIuCisgKi8KKworI2lmbmRlZiBDTElfSF8KKyNkZWZpbmUgQ0xJX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1jbGkKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIHRoYXQgY29udHJvbCB0aGUgVGhyZWFkIHN0YWNrJ3MgZXhlY3V0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB0byBub3RpZnkgYWJvdXQgQ29uc29sZSBvdXRwdXQuCisgKgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgICAgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHdpdGggYW4gb3V0cHV0LgorICogQHBhcmFtW2luXSAgYUJ1Zkxlbmd0aCAgQSBsZW5ndGggb2YgdGhlIG91dHB1dCBkYXRhIHN0b3JlZCBpbiB0aGUgYnVmZmVyLgorICogQHBhcmFtW291dF0gYUNvbnRleHQgICAgQSB1c2VyIGNvbnRleHQgcG9pbnRlci4KKyAqCisgKiBAcmV0dXJucyAgICAgICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkIGJ5IHRoZSBjYWxsYmFjay4KKyAqCisgKi8KK3R5cGVkZWYgaW50ICgqb3RDbGlDb25zb2xlT3V0cHV0Q2FsbGJhY2spKGNvbnN0IGNoYXIgKmFCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQnVmTGVuZ3RoLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgQ0xJIENPTlNPTEUgbW9kdWxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgIEEgY2FsbGJhY2sgbWV0aG9kIGNhbGxlZCB0byBwcm9jZXNzIGNvbnNvbGUgb3V0cHV0LgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgQSB1c2VyIGNvbnRleHQgcG9pbnRlci4KKyAqCisgKi8KK3ZvaWQgb3RDbGlDb25zb2xlSW5pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90Q2xpQ29uc29sZU91dHB1dENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBmZWVkIGluIGEgY29uc29sZSBpbnB1dCBsaW5lLgorICoKKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlciB3aXRoIGFuIGlucHV0LgorICogQHBhcmFtW2luXSAgYUJ1Zkxlbmd0aCAgQSBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIuCisgKgorICovCit2b2lkIG90Q2xpQ29uc29sZUlucHV0TGluZShjaGFyICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKTsKKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBDTEkgVUFSVCBtb2R1bGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICovCit2b2lkIG90Q2xpVWFydEluaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9jb2FwLmggYi9pbmNsdWRlL29wZW50aHJlYWQvY29hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOWRjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvY29hcC5oCkBAIC0wLDAgKzEsNTUyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdG9wLWxldmVsIGZ1bmN0aW9ucyBmb3IgdGhlIE9wZW5UaHJlYWQgQ29BUCBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09BUF9IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPQVBfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1jb2FwCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgQ29BUCBjb21tdW5pY2F0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKyNkZWZpbmUgT1RfREVGQVVMVF9DT0FQX1BPUlQgIDU2ODMgIC8vLzwgRGVmYXVsdCBDb0FQIHBvcnQsIGFzIHNwZWNpZmllZCBpbiBSRkMgNzI1MgorCisvKioKKyAqIENvQVAgVHlwZSB2YWx1ZXMuCisgKgorICovCit0eXBlZGVmIGVudW0gb3RDb2FwVHlwZQoreworICAgIE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSAgICAgPSAweDAwLCAgLy8vPCBDb25maXJtYWJsZQorICAgIE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEUgPSAweDEwLCAgLy8vPCBOb24tY29uZmlybWFibGUKKyAgICBPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQgID0gMHgyMCwgIC8vLzwgQWNrbm93bGVkZ21lbnQKKyAgICBPVF9DT0FQX1RZUEVfUkVTRVQgICAgICAgICAgID0gMHgzMCwgIC8vLzwgUmVzZXQKK30gb3RDb2FwVHlwZTsKKworLyoqCisgKiBIZWxwZXIgbWFjcm8gdG8gZGVmaW5lIENvQVAgQ29kZSB2YWx1ZXMuCisgKgorICovCisjZGVmaW5lIE9UX0NPQVBfQ09ERShjLCBkKSAoKCgoYykgJiAweDcpIDw8IDUpIHwgKChkKSAmIDB4MWYpKQorCisvKioKKyAqIENvQVAgQ29kZSB2YWx1ZXMuCisgKgorICovCit0eXBlZGVmIGVudW0gb3RDb2FwQ29kZQoreworICAgIE9UX0NPQVBfQ09ERV9FTVBUWSAgICAgICAgICAgICAgID0gT1RfQ09BUF9DT0RFKDAsIDApLCAgLy8vPCBFbXB0eSBtZXNzYWdlIGNvZGUKKyAgICBPVF9DT0FQX0NPREVfR0VUICAgICAgICAgICAgICAgICA9IE9UX0NPQVBfQ09ERSgwLCAxKSwgIC8vLzwgR2V0CisgICAgT1RfQ09BUF9DT0RFX1BPU1QgICAgICAgICAgICAgICAgPSBPVF9DT0FQX0NPREUoMCwgMiksICAvLy88IFBvc3QKKyAgICBPVF9DT0FQX0NPREVfUFVUICAgICAgICAgICAgICAgICA9IE9UX0NPQVBfQ09ERSgwLCAzKSwgIC8vLzwgUHV0CisgICAgT1RfQ09BUF9DT0RFX0RFTEVURSAgICAgICAgICAgICAgPSBPVF9DT0FQX0NPREUoMCwgNCksICAvLy88IERlbGV0ZQorCisgICAgT1RfQ09BUF9DT0RFX1JFU1BPTlNFX01JTiAgICAgICAgPSBPVF9DT0FQX0NPREUoMiwgMCksICAvLy88IDIuMDAKKyAgICBPVF9DT0FQX0NPREVfQ1JFQVRFRCAgICAgICAgICAgICA9IE9UX0NPQVBfQ09ERSgyLCAxKSwgIC8vLzwgQ3JlYXRlZAorICAgIE9UX0NPQVBfQ09ERV9ERUxFVEVEICAgICAgICAgICAgID0gT1RfQ09BUF9DT0RFKDIsIDIpLCAgLy8vPCBEZWxldGVkCisgICAgT1RfQ09BUF9DT0RFX1ZBTElEICAgICAgICAgICAgICAgPSBPVF9DT0FQX0NPREUoMiwgMyksICAvLy88IFZhbGlkCisgICAgT1RfQ09BUF9DT0RFX0NIQU5HRUQgICAgICAgICAgICAgPSBPVF9DT0FQX0NPREUoMiwgNCksICAvLy88IENoYW5nZWQKKyAgICBPVF9DT0FQX0NPREVfQ09OVEVOVCAgICAgICAgICAgICA9IE9UX0NPQVBfQ09ERSgyLCA1KSwgIC8vLzwgQ29udGVudAorCisgICAgT1RfQ09BUF9DT0RFX0JBRF9SRVFVRVNUICAgICAgICAgPSBPVF9DT0FQX0NPREUoNCwgMCksICAvLy88IEJhZCBSZXF1ZXN0CisgICAgT1RfQ09BUF9DT0RFX1VOQVVUSE9SSVpFRCAgICAgICAgPSBPVF9DT0FQX0NPREUoNCwgMSksICAvLy88IFVuYXV0aG9yaXplZAorICAgIE9UX0NPQVBfQ09ERV9CQURfT1BUSU9OICAgICAgICAgID0gT1RfQ09BUF9DT0RFKDQsIDIpLCAgLy8vPCBCYWQgT3B0aW9uCisgICAgT1RfQ09BUF9DT0RFX0ZPUkJJRERFTiAgICAgICAgICAgPSBPVF9DT0FQX0NPREUoNCwgMyksICAvLy88IEZvcmJpZGRlbgorICAgIE9UX0NPQVBfQ09ERV9OT1RfRk9VTkQgICAgICAgICAgID0gT1RfQ09BUF9DT0RFKDQsIDQpLCAgLy8vPCBOb3QgRm91bmQKKyAgICBPVF9DT0FQX0NPREVfTUVUSE9EX05PVF9BTExPV0VEICA9IE9UX0NPQVBfQ09ERSg0LCA1KSwgIC8vLzwgTWV0aG9kIE5vdCBBbGxvd2VkCisgICAgT1RfQ09BUF9DT0RFX05PVF9BQ0NFUFRBQkxFICAgICAgPSBPVF9DT0FQX0NPREUoNCwgNiksICAvLy88IE5vdCBBY2NlcHRhYmxlCisgICAgT1RfQ09BUF9DT0RFX1BSRUNPTkRJVElPTl9GQUlMRUQgPSBPVF9DT0FQX0NPREUoNCwgMTIpLCAvLy88IFByZWNvbmRpdGlvbiBGYWlsZWQKKyAgICBPVF9DT0FQX0NPREVfUkVRVUVTVF9UT09fTEFSR0UgICA9IE9UX0NPQVBfQ09ERSg0LCAxMyksIC8vLzwgUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlCisgICAgT1RfQ09BUF9DT0RFX1VOU1VQUE9SVEVEX0ZPUk1BVCAgPSBPVF9DT0FQX0NPREUoNCwgMTUpLCAvLy88IFVuc3VwcG9ydGVkIENvbnRlbnQtRm9ybWF0CisKKyAgICBPVF9DT0FQX0NPREVfSU5URVJOQUxfRVJST1IgICAgICA9IE9UX0NPQVBfQ09ERSg1LCAwKSwgIC8vLzwgSW50ZXJuYWwgU2VydmVyIEVycm9yCisgICAgT1RfQ09BUF9DT0RFX05PVF9JTVBMRU1FTlRFRCAgICAgPSBPVF9DT0FQX0NPREUoNSwgMSksICAvLy88IE5vdCBJbXBsZW1lbnRlZAorICAgIE9UX0NPQVBfQ09ERV9CQURfR0FURVdBWSAgICAgICAgID0gT1RfQ09BUF9DT0RFKDUsIDIpLCAgLy8vPCBCYWQgR2F0ZXdheQorICAgIE9UX0NPQVBfQ09ERV9TRVJWSUNFX1VOQVZBSUxBQkxFID0gT1RfQ09BUF9DT0RFKDUsIDMpLCAgLy8vPCBTZXJ2aWNlIFVuYXZhaWxhYmxlCisgICAgT1RfQ09BUF9DT0RFX0dBVEVXQVlfVElNRU9VVCAgICAgPSBPVF9DT0FQX0NPREUoNSwgNCksICAvLy88IEdhdGV3YXkgVGltZW91dAorICAgIE9UX0NPQVBfQ09ERV9QUk9YWV9OT1RfU1VQUE9SVEVEID0gT1RfQ09BUF9DT0RFKDUsIDUpLCAgLy8vPCBQcm94eWluZyBOb3QgU3VwcG9ydGVkCit9IG90Q29hcENvZGU7CisKKy8qKgorICogQ29BUCBPcHRpb24gTnVtYmVycworICovCit0eXBlZGVmIGVudW0gb3RDb2FwT3B0aW9uVHlwZQoreworICAgIE9UX0NPQVBfT1BUSU9OX0lGX01BVENIICAgICAgID0gMSwgICAgLy8vPCBJZi1NYXRjaAorICAgIE9UX0NPQVBfT1BUSU9OX1VSSV9IT1NUICAgICAgID0gMywgICAgLy8vPCBVcmktSG9zdAorICAgIE9UX0NPQVBfT1BUSU9OX0VfVEFHICAgICAgICAgID0gNCwgICAgLy8vPCBFVGFnCisgICAgT1RfQ09BUF9PUFRJT05fSUZfTk9ORV9NQVRDSCAgPSA1LCAgICAvLy88IElmLU5vbmUtTWF0Y2gKKyAgICBPVF9DT0FQX09QVElPTl9PQlNFUlZFICAgICAgICA9IDYsICAgIC8vLzwgT2JzZXJ2ZQorICAgIE9UX0NPQVBfT1BUSU9OX1VSSV9QT1JUICAgICAgID0gNywgICAgLy8vPCBVcmktUG9ydAorICAgIE9UX0NPQVBfT1BUSU9OX0xPQ0FUSU9OX1BBVEggID0gOCwgICAgLy8vPCBMb2NhdGlvbi1QYXRoCisgICAgT1RfQ09BUF9PUFRJT05fVVJJX1BBVEggICAgICAgPSAxMSwgICAvLy88IFVyaS1QYXRoCisgICAgT1RfQ09BUF9PUFRJT05fQ09OVEVOVF9GT1JNQVQgPSAxMiwgICAvLy88IENvbnRlbnQtRm9ybWF0CisgICAgT1RfQ09BUF9PUFRJT05fTUFYX0FHRSAgICAgICAgPSAxNCwgICAvLy88IE1heC1BZ2UKKyAgICBPVF9DT0FQX09QVElPTl9VUklfUVVFUlkgICAgICA9IDE1LCAgIC8vLzwgVXJpLVF1ZXJ5CisgICAgT1RfQ09BUF9PUFRJT05fQUNDRVBUICAgICAgICAgPSAxNywgICAvLy88IEFjY2VwdAorICAgIE9UX0NPQVBfT1BUSU9OX0xPQ0FUSU9OX1FVRVJZID0gMjAsICAgLy8vPCBMb2NhdGlvbi1RdWVyeQorICAgIE9UX0NPQVBfT1BUSU9OX1BST1hZX1VSSSAgICAgID0gMzUsICAgLy8vPCBQcm94eS1VcmkKKyAgICBPVF9DT0FQX09QVElPTl9QUk9YWV9TQ0hFTUUgICA9IDM5LCAgIC8vLzwgUHJveHktU2NoZW1lCisgICAgT1RfQ09BUF9PUFRJT05fU0laRTEgICAgICAgICAgPSA2MCwgICAvLy88IFNpemUxCit9IG90Q29hcE9wdGlvblR5cGU7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIENvQVAgb3B0aW9uLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RDb2FwT3B0aW9uCit7CisgICAgdWludDE2X3QgICAgICAgbU51bWJlcjsgIC8vLzwgT3B0aW9uIE51bWJlcgorICAgIHVpbnQxNl90ICAgICAgIG1MZW5ndGg7ICAvLy88IE9wdGlvbiBMZW5ndGgKKyAgICBjb25zdCB1aW50OF90ICptVmFsdWU7ICAgLy8vPCBBIHBvaW50ZXIgdG8gdGhlIE9wdGlvbiBWYWx1ZQorfSBvdENvYXBPcHRpb247CisKKy8qKgorICogQ29BUCBDb250ZW50IEZvcm1hdCBjb2Rlcy4gIFRoZSBmdWxsIGxpc3QgaXMgZG9jdW1lbnRlZCBhdAorICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyNTIjcGFnZS05MgorICovCit0eXBlZGVmIGVudW0gb3RDb2FwT3B0aW9uQ29udGVudEZvcm1hdAoreworICAgIE9UX0NPQVBfT1BUSU9OX0NPTlRFTlRfRk9STUFUX1RFWFRfUExBSU4gICAgPSAwLCAgICAvLy88IHRleHQvcGxhaW4KKyAgICBPVF9DT0FQX09QVElPTl9DT05URU5UX0ZPUk1BVF9MSU5LX0ZPUk1BVCAgID0gNDAsICAgLy8vPCBhcHBsaWNhdGlvbi9saW5rLWZvcm1hdAorICAgIE9UX0NPQVBfT1BUSU9OX0NPTlRFTlRfRk9STUFUX1hNTCAgICAgICAgICAgPSA0MSwgICAvLy88IGFwcGxpY2F0aW9uL3htbAorICAgIE9UX0NPQVBfT1BUSU9OX0NPTlRFTlRfRk9STUFUX09DVEVUX1NUUkVBTSAgPSA0MiwgICAvLy88IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorICAgIE9UX0NPQVBfT1BUSU9OX0NPTlRFTlRfRk9STUFUX0VYSSAgICAgICAgICAgPSA0NywgICAvLy88IGFwcGxpY2F0aW9uL2V4aQorICAgIE9UX0NPQVBfT1BUSU9OX0NPTlRFTlRfRk9STUFUX0pTT04gICAgICAgICAgPSA1MCwgICAvLy88IGFwcGxpY2F0aW9uL2pzb24KK30gb3RDb2FwT3B0aW9uQ29udGVudEZvcm1hdDsKKworI2RlZmluZSBPVF9DT0FQX0hFQURFUl9NQVhfTEVOR1RIICAgICAgIDEyOCAgLy8vPCBNYXggQ29BUCBoZWFkZXIgbGVuZ3RoIChieXRlcykKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgQ29BUCBoZWFkZXIuCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdENvYXBIZWFkZXIKK3sKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgbVZlcnNpb25UeXBlVG9rZW47ICAgICAgICAgICAgICAvLy88IFRoZSBDb0FQIFZlcnNpb24sIFR5cGUsIGFuZCBUb2tlbiBMZW5ndGgKKyAgICAgICAgICAgIHVpbnQ4X3QgbUNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFRoZSBDb0FQIENvZGUKKyAgICAgICAgICAgIHVpbnQxNl90IG1NZXNzYWdlSWQ7ICAgICAgICAgICAgICAgICAgICAvLy88IFRoZSBDb0FQIE1lc3NhZ2UgSUQKKyAgICAgICAgfSBtRmllbGRzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBDb0FQIGJhc2UgaGVhZGVyCisgICAgICAgIHVpbnQ4X3QgbUJ5dGVzW09UX0NPQVBfSEVBREVSX01BWF9MRU5HVEhdOyAgLy8vPCBUaGUgcmF3IGJ5dGUgZW5jb2RpbmcgZm9yIHRoZSBDb0FQIGhlYWRlcgorICAgIH0gbUhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVGhlIENvQVAgaGVhZGVyIGVuY29kaW5nCisgICAgdWludDhfdCBtSGVhZGVyTGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBUaGUgQ29BUCBoZWFkZXIgbGVuZ3RoIChieXRlcykKKyAgICB1aW50MTZfdCBtT3B0aW9uTGFzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFRoZSBsYXN0IENvQVAgT3B0aW9uIE51bWJlciB2YWx1ZQorICAgIHVpbnQxNl90IG1GaXJzdE9wdGlvbk9mZnNldDsgICAgICAgICAgICAgICAgICAgIC8vLzwgVGhlIGJ5dGUgb2Zmc2V0IGZvciB0aGUgZmlyc3QgQ29BUCBPcHRpb24KKyAgICB1aW50MTZfdCBtTmV4dE9wdGlvbk9mZnNldDsgICAgICAgICAgICAgICAgICAgICAvLy88IFRoZSBieXRlIG9mZnNldCBmb3IgdGhlIG5leHQgQ29BUCBPcHRpb24KKyAgICBvdENvYXBPcHRpb24gbU9wdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEEgc3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBDb0FQIE9wdGlvbi4KK30gb3RDb2FwSGVhZGVyOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiBhIENvQVAgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgb3Igb24gdGhlIHJlcXVlc3QgdGltZW91dC4KKyAqCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICogQHBhcmFtW2luXSAgYUhlYWRlciAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIENvQVAgaGVhZGVyLiBOVUxMIGlmIG5vIHJlc3BvbnNlIHdhcyByZWNlaXZlZC4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIGJ1ZmZlciBjb250YWluaW5nIHRoZSByZXNwb25zZS4gTlVMTCBpZiBubyByZXNwb25zZSB3YXMgcmVjZWl2ZWQuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBpbmZvIGZvciBAcCBhTWVzc2FnZS4gTlVMTCBpZiBubyByZXNwb25zZSB3YXMgcmVjZWl2ZWQuCisgKiBAcGFyYW1baW5dICBhUmVzdWx0ICAgICAgIEEgcmVzdWx0IG9mIHRoZSBDb0FQIHRyYW5zYWN0aW9uLgorICoKKyAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgIEEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgIE9UX0VSUk9SX0FCT1JUICAgICAgICAgICAgIEEgQ29BUCB0cmFuc2FjdGlvbiB3YXMgcmVzZXRlZCBieSBwZWVyLgorICogQHJldHZhbCAgT1RfRVJST1JfUkVTUE9OU0VfVElNRU9VVCAgTm8gcmVzcG9uc2Ugb3IgYWNrbm93bGVkZ21lbnQgcmVjZWl2ZWQgZHVyaW5nIHRpbWVvdXQgcGVyaW9kLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3RDb2FwUmVzcG9uc2VIYW5kbGVyKSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIGEgQ29BUCByZXF1ZXN0IHdpdGggYSBnaXZlbiBVcmktUGF0aCBpcyByZWNlaXZlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgICAgICAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlLgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgaW5mbyBmb3IgQHAgYU1lc3NhZ2UuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdENvYXBSZXF1ZXN0SGFuZGxlcikodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBDb0FQIHJlc291cmNlLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RDb2FwUmVzb3VyY2UKK3sKKyAgICBjb25zdCBjaGFyICptVXJpUGF0aDsgICAgICAgICAgIC8vLzwgVGhlIFVSSSBQYXRoIHN0cmluZworICAgIG90Q29hcFJlcXVlc3RIYW5kbGVyIG1IYW5kbGVyOyAgLy8vPCBUaGUgY2FsbGJhY2sgZm9yIGhhbmRsaW5nIGEgcmVjZWl2ZWQgcmVxdWVzdAorICAgIHZvaWQgKm1Db250ZXh0OyAgICAgICAgICAgICAgICAgLy8vPCBBcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0CisgICAgc3RydWN0IG90Q29hcFJlc291cmNlICptTmV4dDsgICAvLy88IFRoZSBuZXh0IENvQVAgcmVzb3VyY2UgaW4gdGhlIGxpc3QKK30gb3RDb2FwUmVzb3VyY2U7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIENvQVAgaGVhZGVyLgorICoKKyAqIEBwYXJhbVtpbm91dF0gYUhlYWRlciAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlciB0byBpbml0aWFsaXplLgorICogQHBhcmFtW2luXSAgICBhVHlwZSAgICBDb0FQIG1lc3NhZ2UgdHlwZS4KKyAqIEBwYXJhbVtpbl0gICAgYUNvZGUgICAgQ29BUCBtZXNzYWdlIGNvZGUuCisgKgorICovCit2b2lkIG90Q29hcEhlYWRlckluaXQob3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdENvYXBUeXBlIGFUeXBlLCBvdENvYXBDb2RlIGFDb2RlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFRva2VuIHZhbHVlIGFuZCBsZW5ndGggaW4gYSBoZWFkZXIuCisgKgorICogQHBhcmFtW2lub3V0XSAgYUhlYWRlciAgICAgICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICogQHBhcmFtW2luXSAgICAgYVRva2VuICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFRva2VuIHZhbHVlLgorICogQHBhcmFtW2luXSAgICAgYVRva2VuTGVuZ3RoICBUaGUgTGVuZ3RoIG9mIEBwIGFUb2tlbi4KKyAqCisgKi8KK3ZvaWQgb3RDb2FwSGVhZGVyU2V0VG9rZW4ob3RDb2FwSGVhZGVyICphSGVhZGVyLCBjb25zdCB1aW50OF90ICphVG9rZW4sIHVpbnQ4X3QgYVRva2VuTGVuZ3RoKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFRva2VuIGxlbmd0aCBhbmQgcmFuZG9taXplcyBpdHMgdmFsdWUuCisgKgorICogQHBhcmFtW2lub3V0XSAgYUhlYWRlciAgICAgICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICogQHBhcmFtW2luXSAgICAgYVRva2VuTGVuZ3RoICBUaGUgTGVuZ3RoIG9mIGEgVG9rZW4gdG8gc2V0LgorICoKKyAqLwordm9pZCBvdENvYXBIZWFkZXJHZW5lcmF0ZVRva2VuKG90Q29hcEhlYWRlciAqYUhlYWRlciwgdWludDhfdCBhVG9rZW5MZW5ndGgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyB0aGUgQ29udGVudCBGb3JtYXQgQ29BUCBvcHRpb24gYXMgc3BlY2lmaWVkIGluCisgKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzI1MiNwYWdlLTkyLiAgVGhpcyAqbXVzdCogYmUgY2FsbGVkIGJlZm9yZQorICogc2V0dGluZyBvdENvYXBIZWFkZXJTZXRQYXlsb2FkTWFya2VyIGlmIGEgcGF5bG9hZCBpcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUKKyAqIG1lc3NhZ2UuCisgKgorICogVGhlIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgb3RDb2FwSGVhZGVyQXBwZW5kVWludE9wdGlvbiwKKyAqIGFuZCBpZiB0aGUgZGVzaXJlZCBmb3JtYXQgdHlwZSBjb2RlIGlzbid0IGxpc3RlZCBpbiBvdENvYXBPcHRpb25Db250ZW50Rm9ybWF0LAorICogdGhpcyBiYXNlIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgKgorICogQHBhcmFtW2lub3V0XSAgYUhlYWRlciAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqIEBwYXJhbVtpbl0gICAgIGFDb250ZW50Rm9ybWF0ICAgIE9uZSBvZiB0aGUgY29udGVudCBmb3JtYXRzIGxpc3RlZCBpbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RDb2FwT3B0aW9uQ29udGVudEZvcm1hdCBhYm92ZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGxhc3Qgb3B0aW9uIHR5cGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIG9wdGlvbiBsZW5ndGggZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUuCisgKi8KK290RXJyb3Igb3RDb2FwSGVhZGVyQXBwZW5kQ29udGVudEZvcm1hdE9wdGlvbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90Q29hcE9wdGlvbkNvbnRlbnRGb3JtYXQgYUNvbnRlbnRGb3JtYXQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhIENvQVAgb3B0aW9uIGluIGEgaGVhZGVyLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKiBAcGFyYW1baW5dICAgICBhT3B0aW9uICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgb3B0aW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIG9wdGlvbi4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb3B0aW9uIHR5cGUgaXMgbm90IGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBvcHRpb24gdHlwZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAqCisgKi8KK290RXJyb3Igb3RDb2FwSGVhZGVyQXBwZW5kT3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlciwgY29uc3Qgb3RDb2FwT3B0aW9uICphT3B0aW9uKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgYW4gdW5zaWduZWQgaW50ZWdlciBDb0FQIG9wdGlvbiBhcyBzcGVjaWZpZWQgaW4KKyAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjUyI3NlY3Rpb24tMy4yCisgKgorICogQHBhcmFtW2lub3V0XSAgYUhlYWRlciAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqIEBwYXJhbVtpbl0gICAgIGFOdW1iZXIgIFRoZSBDb0FQIE9wdGlvbiBudW1iZXIuCisgKiBAcGFyYW1baW5dICAgICBhVmFsdWUgICBUaGUgQ29BUCBPcHRpb24gdW5zaWduZWQgaW50ZWdlciB2YWx1ZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGxhc3Qgb3B0aW9uIHR5cGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIG9wdGlvbiBsZW5ndGggZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUuCisgKgorICovCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZFVpbnRPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyLCB1aW50MTZfdCBhTnVtYmVyLCB1aW50MzJfdCBhVmFsdWUpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhbiBPYnNlcnZlIG9wdGlvbi4KKyAqCisgKiBAcGFyYW1baW5vdXRdICBhSGVhZGVyICAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqIEBwYXJhbVtpbl0gICAgIGFPYnNlcnZlICBPYnNlcnZlIGZpZWxkIHZhbHVlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIG9wdGlvbi4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb3B0aW9uIHR5cGUgaXMgbm90IGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBvcHRpb24gdHlwZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAqLworb3RFcnJvciBvdENvYXBIZWFkZXJBcHBlbmRPYnNlcnZlT3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlciwgdWludDMyX3QgYU9ic2VydmUpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhbiBVcmktUGF0aCBvcHRpb24uCisgKgorICogQHBhcmFtW2lub3V0XSAgYUhlYWRlciAgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKiBAcGFyYW1baW5dICAgICBhVXJpUGF0aCAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGxhc3Qgb3B0aW9uIHR5cGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIG9wdGlvbiBsZW5ndGggZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUuCisgKgorICovCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZFVyaVBhdGhPcHRpb25zKG90Q29hcEhlYWRlciAqYUhlYWRlciwgY29uc3QgY2hhciAqYVVyaVBhdGgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhIE1heC1BZ2Ugb3B0aW9uLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIGFIZWFkZXIgICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICogQHBhcmFtW2luXSAgICAgYU1heEFnZSAgIFRoZSBNYXgtQWdlIHZhbHVlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIG9wdGlvbi4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb3B0aW9uIHR5cGUgaXMgbm90IGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBvcHRpb24gdHlwZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAqLworb3RFcnJvciBvdENvYXBIZWFkZXJBcHBlbmRNYXhBZ2VPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyLCB1aW50MzJfdCBhTWF4QWdlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgYSBzaW5nbGUgVXJpLVF1ZXJ5IG9wdGlvbi4KKyAqCisgKiBAcGFyYW1baW5vdXRdICBhSGVhZGVyICAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqIEBwYXJhbVtpbl0gICAgIGFVcmlRdWVyeSBBIHBvaW50ZXIgdG8gTlVMTC10ZXJtaW5hdGVkIHN0cmluZywgd2hpY2ggc2hvdWxkIGNvbnRhaW4gYSBzaW5nbGUga2V5PXZhbHVlIHBhaXIuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgb3B0aW9uLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBvcHRpb24gdHlwZSBpcyBub3QgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IG9wdGlvbiB0eXBlLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIFRoZSBvcHRpb24gbGVuZ3RoIGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplLgorICovCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZFVyaVF1ZXJ5T3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlciwgY29uc3QgY2hhciAqYVVyaVF1ZXJ5KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgUGF5bG9hZCBNYXJrZXIgaW5kaWNhdGluZyBiZWdpbm5pbmcgb2YgdGhlIHBheWxvYWQgdG8gdGhlIENvQVAgaGVhZGVyLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBQYXlsb2FkIE1hcmtlciBzdWNjZXNzZnVsbHkgYWRkZWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEhlYWRlciBQYXlsb2FkIE1hcmtlciBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAqCisgKi8KK3ZvaWQgb3RDb2FwSGVhZGVyU2V0UGF5bG9hZE1hcmtlcihvdENvYXBIZWFkZXIgKmFIZWFkZXIpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTWVzc2FnZSBJRCB2YWx1ZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSGVhZGVyICAgICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJZCAgVGhlIE1lc3NhZ2UgSUQgdmFsdWUuCisgKgorICovCit2b2lkIG90Q29hcEhlYWRlclNldE1lc3NhZ2VJZChvdENvYXBIZWFkZXIgKmFIZWFkZXIsIHVpbnQxNl90IGFNZXNzYWdlSWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgVHlwZSB2YWx1ZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSGVhZGVyICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICoKKyAqIEByZXR1cm5zIFRoZSBUeXBlIHZhbHVlLgorICoKKyAqLworb3RDb2FwVHlwZSBvdENvYXBIZWFkZXJHZXRUeXBlKGNvbnN0IG90Q29hcEhlYWRlciAqYUhlYWRlcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBDb2RlIHZhbHVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKgorICogQHJldHVybnMgVGhlIENvZGUgdmFsdWUuCisgKgorICovCitvdENvYXBDb2RlIG90Q29hcEhlYWRlckdldENvZGUoY29uc3Qgb3RDb2FwSGVhZGVyICphSGVhZGVyKTsKKworLyoqCisqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgTWVzc2FnZSBJRCB2YWx1ZS4KKyoKKyogQHBhcmFtW2luXSAgYUhlYWRlciAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyoKKyogQHJldHVybnMgVGhlIE1lc3NhZ2UgSUQgdmFsdWUuCisqCisqLwordWludDE2X3Qgb3RDb2FwSGVhZGVyR2V0TWVzc2FnZUlkKGNvbnN0IG90Q29hcEhlYWRlciAqYUhlYWRlcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBUb2tlbiBsZW5ndGguCisgKgorICogQHBhcmFtW2luXSAgYUhlYWRlciAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqCisgKiBAcmV0dXJucyBUaGUgVG9rZW4gbGVuZ3RoLgorICoKKyAqLwordWludDhfdCBvdENvYXBIZWFkZXJHZXRUb2tlbkxlbmd0aChjb25zdCBvdENvYXBIZWFkZXIgKmFIZWFkZXIpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFRva2VuIHZhbHVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBUb2tlbiB2YWx1ZS4KKyAqCisgKi8KK2NvbnN0IHVpbnQ4X3QgKm90Q29hcEhlYWRlckdldFRva2VuKGNvbnN0IG90Q29hcEhlYWRlciAqYUhlYWRlcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb3B0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvcHRpb24uIElmIG5vIG9wdGlvbiBpcyBwcmVzZW50IE5VTEwgcG9pbnRlciBpcyByZXR1cm5lZC4KKyAqCisgKi8KK2NvbnN0IG90Q29hcE9wdGlvbiAqb3RDb2FwSGVhZGVyR2V0Rmlyc3RPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG9wdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSGVhZGVyICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV4dCBvcHRpb24uIElmIG5vIG1vcmUgb3B0aW9ucyBhcmUgcHJlc2VudCBOVUxMIHBvaW50ZXIgaXMgcmV0dXJuZWQuCisgKgorICovCitjb25zdCBvdENvYXBPcHRpb24gKm90Q29hcEhlYWRlckdldE5leHRPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgbWVzc2FnZSB3aXRoIGEgQ29BUCBoZWFkZXIuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byBhIENvQVAgaGVhZGVyIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc3NhZ2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIG9yIE5VTEwgaWYgZmFpbGVkIHRvIGFsbG9jYXRlIG1lc3NhZ2UuCisgKgorICovCitvdE1lc3NhZ2UgKm90Q29hcE5ld01lc3NhZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdENvYXBIZWFkZXIgKmFIZWFkZXIpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBDb0FQIHJlcXVlc3QuCisgKgorICogSWYgYSByZXNwb25zZSBmb3IgYSByZXF1ZXN0IGlzIGV4cGVjdGVkLCByZXNwZWN0aXZlIGZ1bmN0aW9uIGFuZCBjb250ZXh0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4KKyAqIElmIG5vIHJlc3BvbnNlIGlzIGV4cGVjdGVkLCB0aGVzZSBhcmd1bWVudHMgc2hvdWxkIGJlIE5VTEwgcG9pbnRlcnMuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIHRvIHNlbmQuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBpbmZvIGFzc29jaWF0ZWQgd2l0aCBAcCBhTWVzc2FnZS4KKyAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgICAgQSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hhbGwgYmUgY2FsbGVkIG9uIHJlc3BvbnNlIHJlY2VwdGlvbiBvciB0aW1lb3V0LgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uIE1heSBiZSBOVUxMIGlmIG5vdCB1c2VkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICBTdWNjZXNzZnVsbHkgc2VudCBDb0FQIG1lc3NhZ2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgRmFpbGVkIHRvIGFsbG9jYXRlIHJldHJhbnNtaXNzaW9uIGRhdGEuCisgKgorICovCitvdEVycm9yIG90Q29hcFNlbmRSZXF1ZXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdENvYXBSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyB0aGUgQ29BUCBzZXJ2ZXIuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQb3J0ICAgICAgVGhlIGxvY2FsIFVEUCBwb3J0IHRvIGJpbmQgdG8uCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgQ29BUCBzZXJ2ZXIuCisgKgorICovCitvdEVycm9yIG90Q29hcFN0YXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBvcnQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc3RvcHMgdGhlIENvQVAgc2VydmVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgQ29BUCBzZXJ2ZXIuCisgKgorICovCitvdEVycm9yIG90Q29hcFN0b3Aob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSByZXNvdXJjZSB0byB0aGUgQ29BUCBzZXJ2ZXIuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFSZXNvdXJjZSAgQSBwb2ludGVyIHRvIHRoZSByZXNvdXJjZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCBAcCBhUmVzb3VyY2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgIFRoZSBAcCBhUmVzb3VyY2Ugd2FzIGFscmVhZHkgYWRkZWQuCisgKgorICovCitvdEVycm9yIG90Q29hcEFkZFJlc291cmNlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RDb2FwUmVzb3VyY2UgKmFSZXNvdXJjZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgcmVzb3VyY2UgZnJvbSB0aGUgQ29BUCBzZXJ2ZXIuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFSZXNvdXJjZSAgQSBwb2ludGVyIHRvIHRoZSByZXNvdXJjZS4KKyAqCisgKi8KK3ZvaWQgb3RDb2FwUmVtb3ZlUmVzb3VyY2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdENvYXBSZXNvdXJjZSAqYVJlc291cmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRlZmF1bHQgaGFuZGxlciBmb3IgdW5oYW5kbGVkIENvQVAgcmVxdWVzdHMuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgQSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hhbGwgYmUgY2FsbGVkIHdoZW4gYW4gdW5oYW5kbGVkIHJlcXVlc3QgYXJyaXZlcy4KKyAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLiBNYXkgYmUgTlVMTCBpZiBub3QgdXNlZC4KKyAqLwordm9pZCBvdENvYXBTZXREZWZhdWx0SGFuZGxlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIG90Q29hcFJlcXVlc3RIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIENvQVAgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcG9pbnRlciB0byB0aGUgQ29BUCByZXNwb25zZSB0byBzZW5kLgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIENvQVAgcmVzcG9uc2UgbWVzc2FnZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIHNlbmQgdGhlIENvQVAgcmVzcG9uc2UuCisgKgorICovCitvdEVycm9yIG90Q29hcFNlbmRSZXNwb25zZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAvKiBPUEVOVEhSRUFEX0NPQVBfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9jb21taXNzaW9uZXIuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9jb21taXNzaW9uZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODI0ZTJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2NvbW1pc3Npb25lci5oCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgdGhlIFRocmVhZCBDb21taXNzaW9uZXIgcm9sZS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09NTUlTU0lPTkVSX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ09NTUlTU0lPTkVSX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS90b29sY2hhaW4uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1jb21taXNzaW9uZXIKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciB0aGUgVGhyZWFkIENvbW1pc3Npb25lciByb2xlLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBlbnVtZXJhdGlvbiBkZWZpbmVzIHRoZSBDb21taXNzaW9uZXIgU3RhdGUuCisgKgorICovCit0eXBlZGVmIGVudW0gb3RDb21taXNzaW9uZXJTdGF0ZQoreworICAgIE9UX0NPTU1JU1NJT05FUl9TVEFURV9ESVNBQkxFRCA9IDAsIC8vLzwgQ29tbWlzc2lvbmVyIHJvbGUgaXMgZGlzYWJsZWQuCisgICAgT1RfQ09NTUlTU0lPTkVSX1NUQVRFX1BFVElUSU9OID0gMSwgLy8vPCBDdXJyZW50bHkgcGV0aXRpb25pbmcgdG8gYmVjb21lIGEgQ29tbWlzc2lvbmVyLgorICAgIE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUgICA9IDIsIC8vLzwgQ29tbWlzc2lvbmVyIHJvbGUgaXMgYWN0aXZlLgorfSBvdENvbW1pc3Npb25lclN0YXRlOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgVGhyZWFkIENvbW1pc3Npb25lciByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIENvbW1pc3Npb25lciByb2xlLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RDb21taXNzaW9uZXJTdGFydChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIFRocmVhZCBDb21taXNzaW9uZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBDb21taXNzaW9uZXIgcm9sZS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Q29tbWlzc2lvbmVyU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhIEpvaW5lciBlbnRyeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBKb2luZXIncyBleHRlbmRlZCBhZGRyZXNzIG9yIE5VTEwgZm9yIGFueSBKb2luZXIuCisgKiBAcGFyYW1baW5dICBhUFNLZCAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBQU0tkLgorICogQHBhcmFtW2luXSAgYVRpbWVvdXQgICAgICAgICAgICAgIEEgdGltZSBhZnRlciB3aGljaCBhIEpvaW5lciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQsIGluIHNlY29uZHMuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgSm9pbmVyLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIE5vIGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFkZCB0aGUgSm9pbmVyLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFFeHRBZGRyZXNzIG9yIEBwIGFQU0tkIGlzIGludmFsaWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgVGhlIGNvbW1pc3Npb25lciBpcyBub3QgYWN0aXZlLgorICoKKyAqIEBub3RlIE9ubHkgdXNlIHRoaXMgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIENvbW1pc3Npb25lciByb2xlIGJ5IG90Q29tbWlzc2lvbmVyU3RhcnQoKS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Q29tbWlzc2lvbmVyQWRkSm9pbmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFQU0tkLCB1aW50MzJfdCBhVGltZW91dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgSm9pbmVyIGVudHJ5LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyZXNzICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEpvaW5lcidzIGV4dGVuZGVkIGFkZHJlc3Mgb3IgTlVMTCBmb3IgYW55IEpvaW5lci4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIEpvaW5lci4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICAgICBUaGUgSm9pbmVyIHNwZWNpZmllZCBieSBAcCBhRXh0QWRkcmVzcyB3YXMgbm90IGZvdW5kLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFFeHRBZGRyZXNzIGlzIGludmFsaWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgVGhlIGNvbW1pc3Npb25lciBpcyBub3QgYWN0aXZlLgorICoKKyAqIEBub3RlIE9ubHkgdXNlIHRoaXMgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIENvbW1pc3Npb25lciByb2xlIGJ5IG90Q29tbWlzc2lvbmVyU3RhcnQoKS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Q29tbWlzc2lvbmVyUmVtb3ZlSm9pbmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcyk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBQcm92aXNpb25pbmcgVVJMLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQcm92aXNpb25pbmdVcmwgICAgICBBIHBvaW50ZXIgdG8gdGhlIFByb3Zpc2lvbmluZyBVUkwgKG1heSBiZSBOVUxMKS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgUHJvdmlzaW9uaW5nIFVSTC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBAcCBhUHJvdmlzaW9uaW5nVXJsIGlzIGludmFsaWQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdENvbW1pc3Npb25lclNldFByb3Zpc2lvbmluZ1VybChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IGNoYXIgKmFQcm92aXNpb25pbmdVcmwpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYW4gQW5ub3VuY2UgQmVnaW4gbWVzc2FnZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ2hhbm5lbE1hc2sgICAgICAgICAgVGhlIGNoYW5uZWwgbWFzayB2YWx1ZS4KKyAqIEBwYXJhbVtpbl0gIGFDb3VudCAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGVuZXJneSBtZWFzdXJlbWVudHMgcGVyIGNoYW5uZWwuCisgKiBAcGFyYW1baW5dICBhUGVyaW9kICAgICAgICAgICAgICAgVGhlIHRpbWUgYmV0d2VlbiBlbmVyZ3kgbWVhc3VyZW1lbnRzIChtaWxsaXNlY29uZHMpLgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgSVB2NiBkZXN0aW5hdGlvbi4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBBbm5vdW5jZSBCZWdpbiBtZXNzYWdlLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIHRvIGdlbmVyYXRlIGFuIEFubm91bmNlIEJlZ2luIG1lc3NhZ2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgVGhlIGNvbW1pc3Npb25lciBpcyBub3QgYWN0aXZlLgorICoKKyAqIEBub3RlIE9ubHkgdXNlIHRoaXMgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIENvbW1pc3Npb25lciByb2xlIGJ5IG90Q29tbWlzc2lvbmVyU3RhcnQoKS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Q29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFDaGFubmVsTWFzaywgdWludDhfdCBhQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gdGhlIENvbW1pc3Npb25lciByZWNlaXZlcyBhbiBFbmVyZ3kgUmVwb3J0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFDaGFubmVsTWFzayAgICAgICBUaGUgY2hhbm5lbCBtYXNrIHZhbHVlLgorICogQHBhcmFtW2luXSAgYUVuZXJneUxpc3QgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZW5lcmd5IG1lYXN1cmVtZW50IGxpc3QuCisgKiBAcGFyYW1baW5dICBhRW5lcmd5TGlzdExlbmd0aCAgTnVtYmVyIG9mIGVudHJpZXMgaW4gQHAgYUVuZXJneUxpc3RMZW5ndGguCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKE9UQ0FMTCAqb3RDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjaykodWludDMyX3QgYUNoYW5uZWxNYXNrLCBjb25zdCB1aW50OF90ICphRW5lcmd5TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFFbmVyZ3lMaXN0TGVuZ3RoLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhbiBFbmVyZ3kgU2NhbiBRdWVyeSBtZXNzYWdlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFDaGFubmVsTWFzayAgICAgICAgICBUaGUgY2hhbm5lbCBtYXNrIHZhbHVlLgorICogQHBhcmFtW2luXSAgYUNvdW50ICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZW5lcmd5IG1lYXN1cmVtZW50cyBwZXIgY2hhbm5lbC4KKyAqIEBwYXJhbVtpbl0gIGFQZXJpb2QgICAgICAgICAgICAgICBUaGUgdGltZSBiZXR3ZWVuIGVuZXJneSBtZWFzdXJlbWVudHMgKG1pbGxpc2Vjb25kcykuCisgKiBAcGFyYW1baW5dICBhU2NhbkR1cmF0aW9uICAgICAgICAgVGhlIHNjYW4gZHVyYXRpb24gZm9yIGVhY2ggZW5lcmd5IG1lYXN1cmVtZW50IChtaWxsaXNlY29uZHMpLgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgSVB2NiBkZXN0aW5hdGlvbi4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQgb24gcmVjZWl2aW5nIGFuIEVuZXJneSBSZXBvcnQgbWVzc2FnZS4KKyAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBFbmVyZ3kgU2NhbiBRdWVyeSBtZXNzYWdlLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIHRvIGdlbmVyYXRlIGFuIEVuZXJneSBTY2FuIFF1ZXJ5IG1lc3NhZ2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgVGhlIGNvbW1pc3Npb25lciBpcyBub3QgYWN0aXZlLgorICoKKyAqIEBub3RlIE9ubHkgdXNlIHRoaXMgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIENvbW1pc3Npb25lciByb2xlIGJ5IG90Q29tbWlzc2lvbmVyU3RhcnQoKS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Q29tbWlzc2lvbmVyRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFDaGFubmVsTWFzaywgdWludDhfdCBhQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVBlcmlvZCwgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiB0aGUgQ29tbWlzc2lvbmVyIHJlY2VpdmVzIGEgUEFOIElEIENvbmZsaWN0IG1lc3NhZ2UuCisgKgorICogQHBhcmFtW2luXSAgYVBhbklkICAgICAgICAgICAgIFRoZSBQQU4gSUQgdmFsdWUuCisgKiBAcGFyYW1baW5dICBhQ2hhbm5lbE1hc2sgICAgICAgVGhlIGNoYW5uZWwgbWFzayB2YWx1ZS4KKyAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgICAgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoT1RDQUxMICpvdENvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFjaykodWludDE2X3QgYVBhbklkLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgUEFOIElEIFF1ZXJ5IG1lc3NhZ2UuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVBhbklkICAgICAgICAgICAgICAgIFRoZSBQQU4gSUQgdG8gcXVlcnkuCisgKiBAcGFyYW1baW5dICBhQ2hhbm5lbE1hc2sgICAgICAgICAgVGhlIGNoYW5uZWwgbWFzayB2YWx1ZS4KKyAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIElQdjYgZGVzdGluYXRpb24uCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gY2FsbGVkIG9uIHJlY2VpdmluZyBhbiBFbmVyZ3kgUmVwb3J0IG1lc3NhZ2UuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBlbnF1ZXVlZCB0aGUgUEFOIElEIFF1ZXJ5IG1lc3NhZ2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgdG8gZ2VuZXJhdGUgYSBQQU4gSUQgUXVlcnkgbWVzc2FnZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSBUaGUgY29tbWlzc2lvbmVyIGlzIG5vdCBhY3RpdmUuCisgKgorICogQG5vdGUgT25seSB1c2UgdGhpcyBhZnRlciBzdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgQ29tbWlzc2lvbmVyIHJvbGUgYnkgb3RDb21taXNzaW9uZXJTdGFydCgpLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RDb21taXNzaW9uZXJQYW5JZFF1ZXJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBhbklkLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdENvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIE1HTVRfQ09NTUlTU0lPTkVSX0dFVC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVRsdnMgICAgICBBIHBvaW50ZXIgdG8gVExWcy4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgVGhlIGxlbmd0aCBvZiBUTFZzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VuZCB0aGUgbWVzaGNvcCBkYXRhc2V0IGNvbW1hbmQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSB0byBzZW5kLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RDb21taXNzaW9uZXJTZW5kTWdtdEdldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgTUdNVF9DT01NSVNTSU9ORVJfU0VULgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGF0YXNldCAgIEEgcG9pbnRlciB0byBjb21taXNzaW9uaW5nIGRhdGFzZXQuCisgKiBAcGFyYW1baW5dICBhVGx2cyAgICAgIEEgcG9pbnRlciB0byBUTFZzLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICBUaGUgbGVuZ3RoIG9mIFRMVnMuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZW5kIHRoZSBtZXNoY29wIGRhdGFzZXQgY29tbWFuZC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIHRvIHNlbmQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdENvbW1pc3Npb25lclNlbmRNZ210U2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RDb21taXNzaW9uaW5nRGF0YXNldCAqYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgQ29tbWlzc2lvbmVyIFNlc3Npb24gSUQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgY3VycmVudCBjb21taXNzaW9uZXIgc2Vzc2lvbiBpZC4KKyAqCisgKi8KK09UQVBJIHVpbnQxNl90IE9UQ0FMTCBvdENvbW1pc3Npb25lckdldFNlc3Npb25JZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgQ29tbWlzc2lvbmVyIFN0YXRlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCBPVF9DT01NSVNTSU9ORVJfU1RBVEVfRElTQUJMRUQgIENvbW1pc3Npb25lciBkaXNhYmxlZC4KKyAqIEByZXR2YWwgT1RfQ09NTUlTU0lPTkVSX1NUQVRFX1BFVElUSU9OICBCZWNvbWluZyB0aGUgY29tbWlzc2lvbmVyLgorICogQHJldHZhbCBPVF9DT01NSVNTSU9ORVJfU1RBVEVfQUNUSVZFICAgIENvbW1pc3Npb25lciBlbmFibGVkLgorICoKKyAqLworT1RBUEkgb3RDb21taXNzaW9uZXJTdGF0ZSBPVENBTEwgb3RDb21taXNzaW9uZXJHZXRTdGF0ZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBQU0tjLgorICoKKyAqIFBTS2MgaXMgdXNlZCB0byBlc3RhYmxpc2ggdGhlIENvbW1pc3Npb25lciBTZXNzaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUGFzc1BocmFzZSAgIFRoZSBjb21taXNzaW9uaW5nIHBhc3NwaHJhc2UuCisgKiBAcGFyYW1baW5dICBhTmV0d29ya05hbWUgIFRoZSBuZXR3b3JrIG5hbWUgZm9yIFBTS2MgY29tcHV0YXRpb24uCisgKiBAcGFyYW1baW5dICBhRXh0UGFuSWQgICAgIFRoZSBleHRlbmRlZCBwYW4gaWQgZm9yIFBTS2MgY29tcHV0YXRpb24uCisgKiBAcGFyYW1bb3V0XSBhUFNLYyAgICAgICAgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgZ2VuZXJhdGVkIFBTS2Mgd2lsbCBiZSBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBnZW5lcmF0ZSBQU0tjLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIElmIGFueSBvZiB0aGUgaW5wdXQgYXJndW1lbnRzIGlzIGludmFsaWQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdENvbW1pc3Npb25lckdlbmVyYXRlUFNLYyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IGNoYXIgKmFQYXNzUGhyYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYU5ldHdvcmtOYW1lLCBjb25zdCB1aW50OF90ICphRXh0UGFuSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphUFNLYyk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBlbmQgb2YgZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT01NSVNTSU9ORVJfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9jb25maWcuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjY3ZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2NvbmZpZy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBpbmNsdWRlcyByZXF1aXJlZCBkZWZpbmVzIGNvbmZpZyBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19IXworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRklMRQorICoKKyAqIFRoZSBPcGVuVGhyZWFkIGZlYXR1cmUgY29uZmlndXJhdGlvbiBmaWxlLgorICoKKyAqLworI2lmICFkZWZpbmVkKE9QRU5USFJFQURfQ09ORklHX0ZJTEUpCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0ZJTEUgPG9wZW50aHJlYWQtY29uZmlnLWdlbmVyaWMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSBPUEVOVEhSRUFEX0NPTkZJR19GSUxFCisKKyNlbmRpZiAvL09QRU5USFJFQURfQ09ORklHX0hfCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvY3J5cHRvLmggYi9pbmNsdWRlL29wZW50aHJlYWQvY3J5cHRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwYTQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9jcnlwdG8uaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIE9wZW5UaHJlYWQgY3J5cHRvIEMgQVBJcy4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ1JZUFRPX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ1JZUFRPX0hfCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktY3J5cHRvCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgZnVuY3Rpb25zLgorICoKKyAqIEB7CisgKgorICovCisKKyNkZWZpbmUgT1RfQ1JZUFRPX0hNQUNfU0hBX0hBU0hfU0laRSAgIDMyICAgLy8vPCBMZW5ndGggb2YgSE1BQyBTSEEgKGluIGJ5dGVzKS4KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIEhNQUMgY29tcHV0YXRpb24uCisgKgorICogQHBhcmFtW2luXSAgICAgYUtleSAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBrZXkuCisgKiBAcGFyYW1baW5dICAgICBhS2V5TGVuZ3RoICAgICBUaGUga2V5IGxlbmd0aCBpbiBieXRlcy4KKyAqIEBwYXJhbVtpbl0gICAgIGFCdWYgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtW2luXSAgICAgYUJ1Zkxlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiBAcCBhQnVmIGluIGJ5dGVzLgorICogQHBhcmFtW291dF0gICAgYUhhc2ggICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgaGFzaCBidWZmZXIuCisgKgorICovCit2b2lkIG90Q3J5cHRvSG1hY1NoYTI1NigKKyAgICBjb25zdCB1aW50OF90ICphS2V5LCB1aW50MTZfdCBhS2V5TGVuZ3RoLAorICAgIGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgsCisgICAgdWludDhfdCAqYUhhc2gpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIEFFUyBDQ00gY29tcHV0YXRpb24uCisgKgorICogQHBhcmFtW2luXSAgICAgYUtleSAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBrZXkuCisgKiBAcGFyYW1baW5dICAgICBhS2V5TGVuZ3RoICAgICBMZW5ndGggb2YgdGhlIGtleSBpbiBieXRlcy4KKyAqIEBwYXJhbVtpbl0gICAgIGFUYWdMZW5ndGggICAgIExlbmd0aCBvZiB0YWcgaW4gYnl0ZXMuCisgKiBAcGFyYW1baW5dICAgICBhTm9uY2UgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIG5vbmNlLgorICogQHBhcmFtW2luXSAgICAgYU5vbmNlTGVuZ3RoICAgTGVuZ3RoIG9mIG5vbmNlIGluIGJ5dGVzLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFIZWFkZXIgICAgICAgIEEgcG9pbnRlciB0byB0aGUgaGVhZGVyLgorICogQHBhcmFtW2luXSAgICAgYUhlYWRlckxlbmd0aCAgTGVuZ3RoIG9mIGhlYWRlciBpbiBieXRlcy4KKyAqCisgKiBAcGFyYW1baW5vdXRdICBhUGxhaW5UZXh0ICAgICBBIHBvaW50ZXIgdG8gdGhlIHBsYWludGV4dC4KKyAqIEBwYXJhbVtpbm91dF0gIGFDaXBoZXJUZXh0ICAgIEEgcG9pbnRlciB0byB0aGUgY2lwaGVydGV4dC4KKyAqIEBwYXJhbVtpbl0gICAgIGFMZW5ndGggICAgICAgIFBsYWludGV4dCBsZW5ndGggaW4gYnl0ZXMuCisgKiBAcGFyYW1baW5dICAgICBhRW5jcnlwdCAgICAgICBgdHJ1ZWAgb24gZW5jcnlwdCBhbmQgYGZhbHNlYCBvbiBkZWNyeXB0LgorICoKKyAqIEBwYXJhbVtvdXRdICAgIGFUYWcgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgdGFnLgorICoKKyAqLwordm9pZCBvdENyeXB0b0Flc0NjbSgKKyAgICBjb25zdCB1aW50OF90ICphS2V5LCB1aW50MTZfdCBhS2V5TGVuZ3RoLAorICAgIHVpbnQ4X3QgYVRhZ0xlbmd0aCwKKyAgICBjb25zdCB2b2lkICphTm9uY2UsIHVpbnQ4X3QgYU5vbmNlTGVuZ3RoLAorICAgIGNvbnN0IHZvaWQgKmFIZWFkZXIsIHVpbnQzMl90IGFIZWFkZXJMZW5ndGgsCisgICAgdm9pZCAqYVBsYWluVGV4dCwgdm9pZCAqYUNpcGhlclRleHQsIHVpbnQzMl90IGFMZW5ndGgsIGJvb2wgYUVuY3J5cHQsCisgICAgdm9pZCAqYVRhZyk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NSWVBUT19IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL2RhdGFzZXQuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9kYXRhc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjYjA4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9kYXRhc2V0LmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIE9wZW5UaHJlYWQgT3BlcmF0aW9uYWwgRGF0YXNldCBBUEkgKGZvciBib3RoIEZURCBhbmQgTVREKS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfREFUQVNFVF9IXworI2RlZmluZSBPUEVOVEhSRUFEX0RBVEFTRVRfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS10aHJlYWQtZ2VuZXJhbAorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBhIHZhbGlkIG5ldHdvcmsgaXMgcHJlc2VudCBpbiB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQgb3Igbm90LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUUlVFIGlmIGEgdmFsaWQgbmV0d29yayBpcyBwcmVzZW50IGluIHRoZSBBY3RpdmUgT3BlcmF0aW9uYWwgRGF0YXNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3REYXRhc2V0SXNDb21taXNzaW9uZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIEFjdGl2ZSBPcGVyYXRpb25hbCBEYXRhc2V0LgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1bb3V0XSAgYURhdGFzZXQgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQgd2lsbCBiZSBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIEFjdGl2ZSBPcGVyYXRpb25hbCBEYXRhc2V0LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFEYXRhc2V0IHdhcyBOVUxMLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3REYXRhc2V0R2V0QWN0aXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIFBlbmRpbmcgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFEYXRhc2V0ICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIFBlbmRpbmcgT3BlcmF0aW9uYWwgRGF0YXNldCB3aWxsIGJlIHBsYWNlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFEYXRhc2V0IHdhcyBOVUxMLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3REYXRhc2V0R2V0UGVuZGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90T3BlcmF0aW9uYWxEYXRhc2V0ICphRGF0YXNldCk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0RBVEFTRVRfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9kYXRhc2V0X2Z0ZC5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2RhdGFzZXRfZnRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5YTQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9kYXRhc2V0X2Z0ZC5oCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBPcGVuVGhyZWFkIE9wZXJhdGlvbmFsIERhdGFzZXQgQVBJIChGVEQgb25seSkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0RBVEFTRVRfRlREX0hfCisjZGVmaW5lIE9QRU5USFJFQURfREFUQVNFVF9GVERfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS10aHJlYWQtZ2VuZXJhbAorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBBY3RpdmUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGF0YXNldCAgQSBwb2ludGVyIHRvIHRoZSBBY3RpdmUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSB0byBzZXQgdGhlIEFjdGl2ZSBPcGVyYXRpb25hbCBEYXRzZXQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYURhdGFzZXQgd2FzIE5VTEwuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdERhdGFzZXRTZXRBY3RpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFEYXRhc2V0ICBBIHBvaW50ZXIgdG8gdGhlIFBlbmRpbmcgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgdG8gc2V0IHRoZSBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYURhdGFzZXQgd2FzIE5VTEwuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdERhdGFzZXRTZXRQZW5kaW5nKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIE1HTVRfQUNUSVZFX0dFVC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVRsdlR5cGVzICBBIHBvaW50ZXIgdG8gdGhlIFRMViBUeXBlcy4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgVGhlIGxlbmd0aCBvZiBUTFYgVHlwZXMuCisgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgIEEgcG9pbnRlciB0byB0aGUgSVB2NiBkZXN0aW5hdGlvbiwgaWYgaXQgaXMgTlVMTCwgd2lsbCB1c2UgTGVhZGVyIEFMT0MgYXMgZGVmYXVsdC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNlbmQgdGhlIG1lc2hjb3AgZGF0YXNldCBjb21tYW5kLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgdG8gc2VuZC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90RGF0YXNldFNlbmRNZ210QWN0aXZlR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYVRsdlR5cGVzLCB1aW50OF90IGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIE1HTVRfQUNUSVZFX1NFVC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYURhdGFzZXQgICBBIHBvaW50ZXIgdG8gb3BlcmF0aW9uYWwgZGF0YXNldC4KKyAqIEBwYXJhbVtpbl0gIGFUbHZzICAgICAgQSBwb2ludGVyIHRvIFRMVnMuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgIFRoZSBsZW5ndGggb2YgVExWcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNlbmQgdGhlIG1lc2hjb3AgZGF0YXNldCBjb21tYW5kLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgdG8gc2VuZC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90RGF0YXNldFNlbmRNZ210QWN0aXZlU2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBNR01UX1BFTkRJTkdfR0VULgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhVGx2VHlwZXMgIEEgcG9pbnRlciB0byB0aGUgVExWIFR5cGVzLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICBUaGUgbGVuZ3RoIG9mIFRMViBUeXBlcy4KKyAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICAgQSBwb2ludGVyIHRvIHRoZSBJUHY2IGRlc3RpbmF0aW9uLCBpZiBpdCBpcyBOVUxMLCB3aWxsIHVzZSBMZWFkZXIgQUxPQyBhcyBkZWZhdWx0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VuZCB0aGUgbWVzaGNvcCBkYXRhc2V0IGNvbW1hbmQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSB0byBzZW5kLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYVRsdlR5cGVzLCB1aW50OF90IGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcyk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBNR01UX1BFTkRJTkdfU0VULgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGF0YXNldCAgIEEgcG9pbnRlciB0byBvcGVyYXRpb25hbCBkYXRhc2V0LgorICogQHBhcmFtW2luXSAgYVRsdnMgICAgICBBIHBvaW50ZXIgdG8gVExWcy4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgVGhlIGxlbmd0aCBvZiBUTFZzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VuZCB0aGUgbWVzaGNvcCBkYXRhc2V0IGNvbW1hbmQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSB0byBzZW5kLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nU2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpOworCisvKioKKyAqIEdldCBtaW5pbWFsIGRlbGF5IHRpbWVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIHRoZSB2YWx1ZSBvZiBtaW5pbWFsIGRlbGF5IHRpbWVyIChpbiBtcykuCisgKgorICovCitPVEFQSSB1aW50MzJfdCBPVENBTEwgb3REYXRhc2V0R2V0RGVsYXlUaW1lck1pbmltYWwob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgbWluaW1hbCBkZWxheSB0aW1lci4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYURlbGF5VGltZXJNaW5pbWFsICBUaGUgdmFsdWUgb2YgbWluaW1hbCBkZWxheSB0aW1lciAoaW4gbXMpLgorICoKKyAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCBtaW5pbWFsIGRlbGF5IHRpbWVyLgorICogQHJldHZhbCAgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBJZiBAcCBhRGVsYXlUaW1lck1pbmltYWwgaXMgbm90IHZhbGlkLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3REYXRhc2V0U2V0RGVsYXlUaW1lck1pbmltYWwob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhRGVsYXlUaW1lck1pbmltYWwpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9EQVRBU0VUX0ZURF9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL2RoY3A2X2NsaWVudC5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2RoY3A2X2NsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZGZhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvZGhjcDZfY2xpZW50LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBUaHJlYWQgREhDUHY2IGNsaWVudC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfREhDUDZfQ0xJRU5UX0hfCisjZGVmaW5lIE9QRU5USFJFQURfREhDUDZfQ0xJRU5UX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktZGhjcDYKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBESENQdjYgYWRkcmVzcy4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90RGhjcEFkZHJlc3MKK3sKKyAgICBvdE5ldGlmQWRkcmVzcyBtQWRkcmVzczsgICAgICAgICAgICAvLy88IFRoZSBuZXR3b3JrIGludGVyZmFjZSBhZGRyZXNzLgorICAgIHVpbnQzMl90ICAgICAgIG1QcmVmZXJyZWRMaWZldGltZTsgIC8vLzwgVGhlIHByZWZlcnJlZCBsaWZldGltZS4KKyAgICB1aW50MzJfdCAgICAgICBtVmFsaWRMaWZldGltZTsgICAgICAvLy88IFRoZSB2YWxpZCBsaWZldGltZS4KK30gb3REaGNwQWRkcmVzczsKKworLyoqCisgKiBVcGRhdGUgYWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBJUHY2IGFkZHJlc3NlcyBmb3IgcHJlZml4ZXMgZnJvbSBjdXJyZW50IE5ldHdvcmsgRGF0YSB3aXRoIERIQ1AgcHJvY2VkdXJlLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3NlcyAgICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBJUHY2IGFkZHJlc3Nlcy4KKyAqIEBwYXJhbVtpbl0gICAgIGFOdW1BZGRyZXNzZXMgIFRoZSBudW1iZXIgb2Ygc2xvdHMgaW4gYUFkZHJlc3NlcyBhcnJheS4KKyAqIEBwYXJhbVtpbl0gICAgIGFDb250ZXh0ICAgICAgIEEgcG9pbnRlciB0byBkYXRhIHBhc3NlZCB0byBhSWlkQ3JlYXRlIGZ1bmN0aW9uLgorICoKKyAqLwordm9pZCBvdERoY3A2Q2xpZW50VXBkYXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3REaGNwQWRkcmVzcyAqYUFkZHJlc3NlcywgdWludDMyX3QgYU51bUFkZHJlc3Nlcywgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZW5kIG9mIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfREhDUDZfQ0xJRU5UX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvZGhjcDZfc2VydmVyLmggYi9pbmNsdWRlL29wZW50aHJlYWQvZGhjcDZfc2VydmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5ZmVmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9kaGNwNl9zZXJ2ZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgdGhlIFRocmVhZCBESENQdjYgc2VydmVyLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9ESENQNl9TRVJWRVJfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9ESENQNl9TRVJWRVJfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1kaGNwNgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVXBkYXRlcyBESENQIEFnZW50cyBhbmQgREhDUCBBbG9jcy4KKyAqCisgKiBAcGFyYW1baW5dICAgICBhSW5zdGFuY2UgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKi8KK3ZvaWQgb3REaGNwNlNlcnZlclVwZGF0ZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZW5kIG9mIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfREhDUDZfU0VSVkVSX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvZGlhZy5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2RpYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTk4NDRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2RpYWcuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHRvcC1sZXZlbCBmdW5jdGlvbnMgZm9yIHRoZSBPcGVuVGhyZWFkIGRpYWdub3N0aWNzIGxpYnJhcnkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0RJQUdfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9ESUFHX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktZmFjdG9yeS1kaWFnbm9zdGljcworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdCBjb250cm9sIHRoZSBUaHJlYWQgc3RhY2sncyBleGVjdXRpb24uCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBkaWFnbm9zdGljcyBtb2R1bGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gdGhlIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICovCit2b2lkIG90RGlhZ0luaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBhIGZhY3RvcnkgZGlhZ25vc3RpY3MgY29tbWFuZCBsaW5lLgorICoKKyAqIEBwYXJhbVtpbl0gIGFyZ2MgIFRoZSBhcmd1bWVudCBjb3VudGVyIG9mIGRpYWdub3N0aWNzIGNvbW1hbmQgbGluZS4KKyAqIEBwYXJhbVtpbl0gIGFyZ3YgIFRoZSBhcmd1bWVudCB2ZWN0b3Igb2YgZGlhZ25vc3RpY3MgY29tbWFuZCBsaW5lLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgb3V0cHV0IHN0cmluZy4KKyAqCisgKi8KK2NoYXIgKm90RGlhZ1Byb2Nlc3NDbWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgYSBmYWN0b3J5IGRpYWdub3N0aWNzIGNvbW1hbmQgbGluZS4KKyAqCisgKiBAcGFyYW1baW5dICBhU3RyaW5nICBBIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgc3RyaW5nLgorICoKKyAqLworY2hhciAqb3REaWFnUHJvY2Vzc0NtZExpbmUoY2hhciAqYVN0cmluZyk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGZhY3RvcnkgZGlhZ25vc3RpY3MgbW9kZSBpcyBlbmFibGVkLgorICoKKyAqIEByZXR1cm5zIFRSVUUgaWYgZmFjdG9yeSBkaWFnbm9zdGljcyBtb2RlIGlzIGVuYWJsZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKi8KK2Jvb2wgb3REaWFnSXNFbmFibGVkKHZvaWQpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9ESUFHX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvZG5zLmggYi9pbmNsdWRlL29wZW50aHJlYWQvZG5zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1Y2NmZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9kbnMuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHRvcC1sZXZlbCBkbnMgZnVuY3Rpb25zIGZvciB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9ETlNfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9ETlNfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL21lc3NhZ2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktZG5zCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgRE5TIGNvbW11bmljYXRpb24uCisgKgorICogQHsKKyAqCisgKi8KKworI2RlZmluZSBPVF9ETlNfTUFYX0hPU1ROQU1FX0xFTkdUSCA2MiAgLy8vPCBNYXhpbXVtIGFsbG93ZWQgaG9zdG5hbWUgbGVuZ3RoIChtYXhpbXVtIGxhYmVsIHNpemUgLSAxIGZvciBjb21wcmVzc2lvbikuCisKKyNkZWZpbmUgT1RfRE5TX0RFRkFVTFRfRE5TX1NFUlZFUl9JUCAgIjIwMDE6NDg2MDo0ODYwOjo4ODg4IiAvLy88IERlZmluZXMgZGVmYXVsdCBETlMgU2VydmVyIGFkZHJlc3MgLSBHb29nbGUgRE5TLgorI2RlZmluZSBPVF9ETlNfREVGQVVMVF9ETlNfU0VSVkVSX1BPUlQgNTMgICAgICAgICAgICAgICAgICAgIC8vLzwgRGVmaW5lcyBkZWZhdWx0IEROUyBTZXJ2ZXIgcG9ydC4KKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSBpbXBsZW1lbnRzIEROUyBRdWVyeSBwYXJhbWV0ZXJzLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3REbnNRdWVyeQoreworICAgIGNvbnN0IGNoYXIgICAgICAgICAgKm1Ib3N0bmFtZTsgICAgIC8vLzwgSWRlbnRpZmllcyBob3N0bmFtZSB0byBiZSBmb3VuZC4gSXQgc2hhbGwgbm90IGNoYW5nZSBkdXJpbmcgcmVzb2x2aW5nLgorICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKm1NZXNzYWdlSW5mbzsgIC8vLzwgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyByZWxhdGVkIHdpdGggRE5TIFNlcnZlci4KKyAgICBib29sICAgICAgICAgICAgICAgICBtTm9SZWN1cnNpb247ICAvLy88IElmIGNsZWFyZWQsIGl0IGRpcmVjdHMgbmFtZSBzZXJ2ZXIgdG8gcHVyc3VlIHRoZSBxdWVyeSByZWN1cnNpdmVseS4KK30gb3REbnNRdWVyeTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gYSBETlMgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuCisgKgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqIEBwYXJhbVtpbl0gIGFIb3N0bmFtZSAgSWRlbnRpZmllcyBob3N0bmFtZSByZWxhdGVkIHdpdGggRE5TIHJlc3BvbnNlLgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICBBIHBvaW50ZXIgdG8gdGhlIElQdjYgYWRkcmVzcyByZWNlaXZlZCBpbiBETlMgcmVzcG9uc2UuIE1heSBiZSBudWxsLgorICogQHBhcmFtW2luXSAgYVR0bCAgICAgICBTcGVjaWZpZXMgdGhlIG1heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoYXQgdGhlIHJlc291cmNlIHJlY29yZCBtYXkgYmUgY2FjaGVkLgorICogQHBhcmFtW2luXSAgYVJlc3VsdCAgICBBIHJlc3VsdCBvZiB0aGUgRE5TIHRyYW5zYWN0aW9uLgorICoKKyAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgIEEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseSBhbmQgSVB2NiBhZGRyZXNzIGlzIHByb3ZpZGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBAcCBhQWRkcmVzcy4KKyAqIEByZXR2YWwgIE9UX0VSUk9SX0FCT1JUICAgICAgICAgICAgIEEgRE5TIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkIGJ5IHN0YWNrLgorICogQHJldHZhbCAgT1RfRVJST1JfUkVTUE9OU0VfVElNRU9VVCAgTm8gRE5TIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkIHdpdGhpbiB0aW1lb3V0LgorICogQHJldHZhbCAgT1RfRVJST1JfTk9UX0ZPVU5EICAgICAgICAgQSByZXNwb25zZSB3YXMgcmVjZWl2ZWQgYnV0IG5vIElQdjYgYWRkcmVzcyBoYXMgYmVlbiBmb3VuZC4KKyAqIEByZXR2YWwgIE9UX0VSUk9SX0ZBSUxFRCAgICAgICAgICAgIEEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGJ1dCBzdGF0dXMgY29kZSBpcyBkaWZmZXJlbnQgdGhhbiBzdWNjZXNzLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3REbnNSZXNwb25zZUhhbmRsZXIpKHZvaWQgKmFDb250ZXh0LCBjb25zdCBjaGFyICphSG9zdG5hbWUsIG90SXA2QWRkcmVzcyAqYUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYVR0bCwgb3RFcnJvciBhUmVzdWx0KTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIEROUyBxdWVyeSBmb3IgQUFBQSAoSVB2NikgcmVjb3JkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVF1ZXJ5ICAgICAgQSBwb2ludGVyIHRvIHNwZWNpZnkgRE5TIHF1ZXJ5IHBhcmFtZXRlcnMuCisgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgICBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaGFsbCBiZSBjYWxsZWQgb24gcmVzcG9uc2UgcmVjZXB0aW9uIG9yIHRpbWUtb3V0LgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICoKKyAqLworb3RFcnJvciBvdERuc0NsaWVudFF1ZXJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3REbnNRdWVyeSAqYVF1ZXJ5LCBvdERuc1Jlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCk7CisjZW5kaWYKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRE5TX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvaWNtcDYuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9pY21wNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MjdhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvaWNtcDYuaApAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHRvcC1sZXZlbCBpY21wNiBmdW5jdGlvbnMgZm9yIHRoZSBPcGVuVGhyZWFkIGxpYnJhcnkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0lDTVA2X0hfCisjZGVmaW5lIE9QRU5USFJFQURfSUNNUDZfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1pY21wNgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdCBjb250cm9sIElDTVB2NiBjb21tdW5pY2F0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogSUNNUHY2IE1lc3NhZ2UgVHlwZXMKKyAqCisgKi8KK3R5cGVkZWYgZW51bSBvdEljbXA2VHlwZQoreworICAgIE9UX0lDTVA2X1RZUEVfRFNUX1VOUkVBQ0ggID0gMSwgICAgIC8vLzwgRGVzdGluYXRpb24gVW5yZWFjaGFibGUKKyAgICBPVF9JQ01QNl9UWVBFX0VDSE9fUkVRVUVTVCA9IDEyOCwgICAvLy88IEVjaG8gUmVxdWVzdAorICAgIE9UX0lDTVA2X1RZUEVfRUNIT19SRVBMWSAgID0gMTI5LCAgIC8vLzwgRWNobyBSZXBseQorfSBvdEljbXA2VHlwZTsKKworLyoqCisgKiBJQ01QdjYgTWVzc2FnZSBDb2RlcworICoKKyAqLwordHlwZWRlZiBlbnVtIG90SWNtcDZDb2RlCit7CisgICAgT1RfSUNNUDZfQ09ERV9EU1RfVU5SRUFDSF9OT19ST1VURSA9IDAsICAvLy88IERlc3RpbmF0aW9uIFVucmVhY2hhYmxlIE5vIFJvdXRlCit9IG90SWNtcDZDb2RlOworCisjZGVmaW5lIE9UX0lDTVA2X0hFQURFUl9EQVRBX1NJWkUgIDQgICAvLy88IFNpemUgb2YgYW4gbWVzc2FnZSBzcGVjaWZpYyBkYXRhIG9mIElDTVB2NiBIZWFkZXIuCisKKy8qKgorICogQHN0cnVjdCBvdEljbXA2SGVhZGVyCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhbiBJQ01QdjYgaGVhZGVyLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK3N0cnVjdCBvdEljbXA2SGVhZGVyCit7CisgICAgdWludDhfdCAgICAgIG1UeXBlOyAgICAgIC8vLzwgVHlwZQorICAgIHVpbnQ4X3QgICAgICBtQ29kZTsgICAgICAvLy88IENvZGUKKyAgICB1aW50MTZfdCAgICAgbUNoZWNrc3VtOyAgLy8vPCBDaGVja3N1bQorICAgIHVuaW9uCisgICAgeworICAgICAgICB1aW50OF90ICBtOFtPVF9JQ01QNl9IRUFERVJfREFUQV9TSVpFIC8gc2l6ZW9mKHVpbnQ4X3QpXTsKKyAgICAgICAgdWludDE2X3QgbTE2W09UX0lDTVA2X0hFQURFUl9EQVRBX1NJWkUgLyBzaXplb2YodWludDE2X3QpXTsKKyAgICAgICAgdWludDMyX3QgbTMyW09UX0lDTVA2X0hFQURFUl9EQVRBX1NJWkUgLyBzaXplb2YodWludDMyX3QpXTsKKyAgICB9IG1EYXRhOyAgICAgICAgICAgICAgICAgLy8vPCBNZXNzYWdlLXNwZWNpZmljIGRhdGEKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgdHlwZSByZXByZXNlbnRzIGFuIElDTVB2NiBoZWFkZXIuCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdEljbXA2SGVhZGVyIG90SWNtcDZIZWFkZXI7CisKKy8qKgorICogVGhpcyBjYWxsYmFjayBhbGxvd3MgT3BlblRocmVhZCB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIG9mIGEgcmVjZWl2ZWQgSUNNUHY2IG1lc3NhZ2UuCisgKgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgbWVzc2FnZS4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSBwb2ludGVyIHRvIG1lc3NhZ2UgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIEBwIGFNZXNzYWdlLgorICogQHBhcmFtW2luXSAgYUljbXBIZWFkZXIgICBBIHBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIElDTVB2NiBoZWFkZXIuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdEljbXA2UmVjZWl2ZUNhbGxiYWNrKSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJY21wNkhlYWRlciAqYUljbXBIZWFkZXIpOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIGltcGxlbWVudHMgSUNNUHY2IG1lc3NhZ2UgaGFuZGxlci4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90SWNtcDZIYW5kbGVyCit7CisgICAgb3RJY21wNlJlY2VpdmVDYWxsYmFjayAgbVJlY2VpdmVDYWxsYmFjazsgIC8vLzwgVGhlIElDTVB2NiByZWNlaXZlZCBjYWxsYmFjaworICAgIHZvaWQgICAgICAgICAgICAgICAgICAgKm1Db250ZXh0OyAgICAgICAgICAvLy88IEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICBzdHJ1Y3Qgb3RJY21wNkhhbmRsZXIgICptTmV4dDsgICAgICAgICAgICAgLy8vPCBBIHBvaW50ZXIgdG8gdGhlIG5leHQgaGFuZGxlciBpbiB0aGUgbGlzdC4KK30gb3RJY21wNkhhbmRsZXI7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgSUNNUHY2IEVjaG8gcHJvY2Vzc2luZyBpcyBlbmFibGVkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIFRSVUUgICBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGVuYWJsZWQuCisgKiBAcmV0dmFsIEZBTFNFICBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGRpc2FibGVkLgorICoKKyAqLworYm9vbCBvdEljbXA2SXNFY2hvRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB3aGV0aGVyIG9yIG5vdCBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUVuYWJsZWQgIFRSVUUgdG8gZW5hYmxlIElDTVB2NiBFY2hvIHByb2Nlc3NpbmcsIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKi8KK3ZvaWQgb3RJY21wNlNldEVjaG9FbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBoYW5kbGVyIHRvIHByb3ZpZGUgcmVjZWl2ZWQgSUNNUHY2IG1lc3NhZ2VzLgorICoKKyAqIEBub3RlIEEgaGFuZGxlciBzdHJ1Y3R1cmUgQHAgYUhhbmRsZXIgaGFzIHRvIGJlIHN0b3JlZCBpbiBwZXJzaXN0YW50IChzdGF0aWMpIG1lbW9yeS4KKyAqICAgICAgIE9wZW5UaHJlYWQgZG9lcyBub3QgbWFrZSBhIGNvcHkgb2YgaGFuZGxlciBzdHJ1Y3R1cmUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUhhbmRsZXIgIEEgcG9pbnRlciB0byBhIGhhbmRsZXIgY29uaXRhaW5pbmcgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbgorICogICAgICAgICAgICAgICAgICAgICAgIGFuIElDTVB2NiBtZXNzYWdlIGlzIHJlY2VpdmVkLgorICoKKyAqLworb3RFcnJvciBvdEljbXA2UmVnaXN0ZXJIYW5kbGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RJY21wNkhhbmRsZXIgKmFIYW5kbGVyKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIElDTVB2NiBFY2hvIFJlcXVlc3QgdmlhIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBidWZmZXIgY29udGFpbmluZyB0aGUgSUNNUHY2IHBheWxvYWQuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gIEEgcmVmZXJlbmNlIHRvIG1lc3NhZ2UgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIEBwIGFNZXNzYWdlLgorICogQHBhcmFtW2luXSAgYUlkZW50aWZpZXIgICBBbiBpZGVudGlmaWVyIHRvIGFpZCBpbiBtYXRjaGluZyBFY2hvIFJlcGxpZXMgdG8gdGhpcyBFY2hvIFJlcXVlc3QuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heSBiZSB6ZXJvLgorICoKKyAqLworb3RFcnJvciBvdEljbXA2U2VuZEVjaG9SZXF1ZXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIHVpbnQxNl90IGFJZGVudGlmaWVyKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfSUNNUDZfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9pbnN0YW5jZS5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2luc3RhbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0NmFkNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9pbnN0YW5jZS5oCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBJbnN0YW5jZSBBUEkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0lOU1RBTkNFX0hfCisjZGVmaW5lIE9QRU5USFJFQURfSU5TVEFOQ0VfSF8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGFkZHRvZ3JvdXAgYXBpLWluc3RhbmNlCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIE9wZW5UaHJlYWQgSW5zdGFuY2UuCisgKgorICogQHsKKyAqCisgKi8KKworI2lmZGVmIE9URExMCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICoKKyAqIEByZXR2YWwgb3RBcGlJbnN0YW5jZSogIFRoZSBuZXcgT3BlblRocmVhZCBjb250ZXh0IHN0cnVjdHVyZS4KKyAqCisgKiBAc2Egb3RBcGlGaW5hbGl6ZQorICoKKyAqLworT1RBUEkgb3RBcGlJbnN0YW5jZSAqT1RDQUxMIG90QXBpSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHVuaW5pdGlhbGl6ZXMgdGhlIE9wZW5UaHJlYWQgbGlicmFyeS4KKyAqCisgKiBDYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBPcGVuVGhyZWFkIGlzIG5vIGxvbmdlciBpbiB1c2UuCisgKgorICogQHBhcmFtW2luXSAgYUFwaUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBhcGkgaW5zdGFuY2UuCisgKgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdEFwaUZpbmFsaXplKG90QXBpSW5zdGFuY2UgKmFBcGlJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhbnkgbWVtb3J5IHJldHVybmVkL2FsbG9jYXRlZCBieSB0aGUgbGlicmFyeS4KKyAqCisgKiBAcGFyYW1baW5dIGFNZW0gIFRoZSBtZW1vcnkgdG8gZnJlZS4KKyAqCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90RnJlZU1lbW9yeShjb25zdCB2b2lkICphTWVtKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHRvIG5vdGlmeSBhZGRpdGlvbiBhbmQgcmVtb3ZhbCBvZiBPcGVuVGhyZWFkIGRldmljZXMuCisgKgorICogQHBhcmFtW2luXSAgYUFkZGVkICAgICAgIEEgZmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBkZXZpY2Ugd2FzIGFkZGVkIG9yIHJlbW92ZWQuCisgKiBAcGFyYW1baW5dICBhRGV2aWNlR3VpZCAgQSBHVUlEIGluZGljYXRpbmcgd2hpY2ggZGV2aWNlIHN0YXRlIGNoYW5nZWQuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKE9UQ0FMTCAqb3REZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkQ2FsbGJhY2spKGJvb2wgYUFkZGVkLCBjb25zdCBHVUlEICphRGV2aWNlR3VpZCwgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gaW5kaWNhdGUgT3BlblRocmVhZCBkZXZpY2VzIGNvbWUgYW5kIGdvLgorICoKKyAqIEBwYXJhbVtpbl0gIGFBcGlJbnN0YW5jZSAgICAgVGhlIE9wZW5UaHJlYWQgYXBpIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIHRoZSBzdGF0ZSBjaGFuZ2VzLgorICogQHBhcmFtW2luXSAgYUNvbnRleHRDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90U2V0RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrKG90QXBpSW5zdGFuY2UgKmFBcGlJbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBxdWVyeXMgdGhlIGxpc3Qgb2YgT3BlblRocmVhZCBkZXZpY2UgY29udGV4dHMgb24gdGhlIHN5c3RlbS4KKyAqCisgKiBAcGFyYW1baW5dICBhQXBpSW5zdGFuY2UgICAgIFRoZSBPcGVuVGhyZWFkIGFwaSBpbnN0YW5jZS4KKyAqCisgKiBAc2Egb3RGcmVlTWVtb3J5CisgKi8KK09UQVBJIG90RGV2aWNlTGlzdCAqT1RDQUxMIG90RW51bWVyYXRlRGV2aWNlcyhvdEFwaUluc3RhbmNlICphQXBpSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYW4gT3BlblRocmVhZCBjb250ZXh0IGZvciBhIGRldmljZS4KKyAqCisgKiBAcGFyYW1baW5dICBhQXBpSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGFwaSBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFEZXZpY2VHdWlkICAgVGhlIGRldmljZSBndWlkIHRvIGNyZWF0ZSBhbiBPcGVuVGhyZWFkIGNvbnRleHQgZm9yLgorICoKKyAqIEByZXR2YWwgb3RJbnN0YW5jZSogIFRoZSBuZXcgT3BlblRocmVhZCBkZXZpY2UgaW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZGV2aWNlLgorICoKKyAqIEBzYSBvdEZyZWVNZW1vcnkKKyAqCisgKi8KK09UQVBJIG90SW5zdGFuY2UgKk9UQ0FMTCBvdEluc3RhbmNlSW5pdChvdEFwaUluc3RhbmNlICphQXBpSW5zdGFuY2UsIGNvbnN0IEdVSUQgKmFEZXZpY2VHdWlkKTsKKworLyoqCisgKiBUaGlzIHF1ZXJpZXMgdGhlIFdpbmRvd3MgZGV2aWNlL2ludGVyZmFjZSBHVUlEIGZvciB0aGUgb3RDb250ZXh0LgorICoKKyAqIEBwYXJhbVtpbl0gYUNvbnRleHQgIFRoZSBPcGVuVGhyZWFkIGNvbnRleHQgc3RydWN0dXJlLgorICoKKyAqIEByZXR2YWwgR1VJRCAgVGhlIGRldmljZSBHVUlELgorICoKKyAqLworT1RBUEkgR1VJRCBPVENBTEwgb3RHZXREZXZpY2VHdWlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBxdWVyaWVzIHRoZSBXaW5kb3dzIGRldmljZS9pbnRlcmZhY2UgSWZJbmRleCBmb3IgdGhlIG90Q29udGV4dC4KKyAqCisgKiBAcGFyYW1baW5dIGFDb250ZXh0ICBUaGUgT3BlblRocmVhZCBjb250ZXh0IHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dmFsIHVpbnQzMl90ICBUaGUgZGV2aWNlIElmSW5kZXguCisgKgorICovCitPVEFQSSB1aW50MzJfdCBPVENBTEwgb3RHZXREZXZpY2VJZkluZGV4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBxdWVyaWVzIHRoZSBXaW5kb3dzIENvbXBhcnRtZW50IElEIGZvciB0aGUgb3RDb250ZXh0LgorICoKKyAqIEBwYXJhbVtpbl0gYUNvbnRleHQgIFRoZSBPcGVuVGhyZWFkIGNvbnRleHQgc3RydWN0dXJlLgorICoKKyAqIEByZXR2YWwgdWludDMyX3QgIFRoZSBjb21wYXJ0bWVudCBJRC4KKyAqCisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdEdldENvbXBhcnRtZW50SWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworI2Vsc2UgLy8gT1RETEwKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBPcGVuVGhyZWFkIGxpYnJhcnkuCisgKgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgT3BlblRocmVhZCBhbmQgcHJlcGFyZXMgaXQgZm9yIHN1YnNlcXVlbnQgT3BlblRocmVhZCBBUEkgY2FsbHMuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUKKyAqIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIGNhbGxzIHRvIE9wZW5UaHJlYWQuIEJ5IGRlZmF1bHQsIE9wZW5UaHJlYWQgaXMgaW5pdGlhbGl6ZWQgaW4gdGhlICdlbmFibGVkJyBzdGF0ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBhbmQgY2FuIG9ubHkgYmUgdXNlZCB3aGVuIHN1cHBvcnQgZm9yIG11bHRpcGxlIE9wZW5UaHJlYWQgaW5zdGFuY2VzIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgICBhSW5zdGFuY2VCdWZmZXIgICAgICBUaGUgYnVmZmVyIGZvciBPcGVuVGhyZWFkIHRvIHVzZSBmb3IgYWxsb2NhdGluZyB0aGUgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5vdXRdIGFJbnN0YW5jZUJ1ZmZlclNpemUgIE9uIGlucHV0LCB0aGUgc2l6ZSBvZiBhSW5zdGFuY2VCdWZmZXIuIE9uIG91dHB1dCwgaWYgbm90IGVub3VnaCBzcGFjZSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RJbnN0YW5jZSwgdGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCBmb3Igb3RJbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIG90SW5zdGFuY2UqICBUaGUgbmV3IE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqIEBzYSBvdENvbnRleHRGaW5hbGl6ZQorICoKKyAqLworb3RJbnN0YW5jZSAqb3RJbnN0YW5jZUluaXQodm9pZCAqYUluc3RhbmNlQnVmZmVyLCBzaXplX3QgKmFJbnN0YW5jZUJ1ZmZlclNpemUpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHN0YXRpYyBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIE9wZW5UaHJlYWQgbGlicmFyeS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIE9wZW5UaHJlYWQgYW5kIHByZXBhcmVzIGl0IGZvciBzdWJzZXF1ZW50IE9wZW5UaHJlYWQgQVBJIGNhbGxzLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlCisgKiBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBjYWxscyB0byBPcGVuVGhyZWFkLiBCeSBkZWZhdWx0LCBPcGVuVGhyZWFkIGlzIGluaXRpYWxpemVkIGluIHRoZSAnZW5hYmxlZCcgc3RhdGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYW5kIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBzdXBwb3J0IGZvciBtdWx0aXBsZSBPcGVuVGhyZWFkIGluc3RhbmNlcyBpcyBkaXNhYmxlZC4KKyAqCisgKiBAcmV0dmFsIFRoZSBuZXcgc2luZ2xlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLworb3RJbnN0YW5jZSAqb3RJbnN0YW5jZUluaXRTaW5nbGUodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIE9wZW5UaHJlYWQgaXMgbm8gbG9uZ2VyIGluIHVzZS4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKi8KK3ZvaWQgb3RJbnN0YW5jZUZpbmFsaXplKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKyNlbmRpZiAvLyBPVERMTAorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgdG8gbm90aWZ5IGNlcnRhaW4gY29uZmlndXJhdGlvbiBvciBzdGF0ZSBjaGFuZ2VzIHdpdGhpbiBPcGVuVGhyZWFkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGbGFncyAgICBBIGJpdC1maWVsZCBpbmRpY2F0aW5nIHNwZWNpZmljIHN0YXRlIHRoYXQgaGFzIGNoYW5nZWQuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKE9UQ0FMTCAqb3RTdGF0ZUNoYW5nZWRDYWxsYmFjaykodWludDMyX3QgYUZsYWdzLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBjYWxsYmFjayB0byBpbmRpY2F0ZSB3aGVuIGNlcnRhaW4gY29uZmlndXJhdGlvbiBvciBzdGF0ZSBjaGFuZ2VzIHdpdGhpbiBPcGVuVGhyZWFkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggY2VydGFpbiBjb25maWd1cmF0aW9uIG9yIHN0YXRlIGNoYW5nZXMuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgQWRkZWQgdGhlIGNhbGxiYWNrIHRvIHRoZSBsaXN0IG9mIGNhbGxiYWNrcy4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgQ291bGQgbm90IGFkZCB0aGUgY2FsbGJhY2sgZHVlIHRvIHJlc291cmNlIGNvbnN0cmFpbnRzLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2sgYUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgY2FsbGJhY2sgdG8gaW5kaWNhdGUgd2hlbiBjZXJ0YWluIGNvbmZpZ3VyYXRpb24gb3Igc3RhdGUgY2hhbmdlcyB3aXRoaW4gT3BlblRocmVhZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggY2VydGFpbiBjb25maWd1cmF0aW9uIG9yIHN0YXRlIGNoYW5nZXMuCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2tDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90UmVtb3ZlU3RhdGVDaGFuZ2VDYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2sgYUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIHRyaWdnZXJzIGEgcGxhdGZvcm0gcmVzZXQuCisgKgorICogVGhlIHJlc2V0IHByb2Nlc3MgZW5zdXJlcyB0aGF0IGFsbCB0aGUgT3BlblRocmVhZCBzdGF0ZS9pbmZvIChzdG9yZWQgaW4gdm9sYXRpbGUgbWVtb3J5KSBpcyBlcmFzZWQuIE5vdGUgdGhhdCB0aGUKKyAqIGBvdFBsYXRmb3JtUmVzZXRgIGRvZXMgbm90IGVyYXNlIGFueSBwZXJzaXN0ZW50IHN0YXRlL2luZm8gc2F2ZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90SW5zdGFuY2VSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIGRlbGV0ZXMgYWxsIHRoZSBzZXR0aW5ncyBzdG9yZWQgb24gbm9uLXZvbGF0aWxlIG1lbW9yeSwgYW5kIHRoZW4gdHJpZ2dlcnMgcGxhdGZvcm0gcmVzZXQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdEluc3RhbmNlRmFjdG9yeVJlc2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBlcmFzZXMgYWxsIHRoZSBPcGVuVGhyZWFkIHBlcnNpc3RlbnQgaW5mbyAobmV0d29yayBzZXR0aW5ncykgc3RvcmVkIG9uIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgKiBFcmFzZSBpcyBzdWNjZXNzZnVsIG9ubHkgaWYgdGhlIGRldmljZSBpcyBpbiBgZGlzYWJsZWRgIHN0YXRlL3JvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgQWxsIHBlcnNpc3RlbnQgaW5mby9zdGF0ZSB3YXMgZXJhc2VkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgRGV2aWNlIGlzIG5vdCBpbiBgZGlzYWJsZWRgIHN0YXRlL3JvbGUuCisgKgorICovCitvdEVycm9yIG90SW5zdGFuY2VFcmFzZVBlcnNpc3RlbnRJbmZvKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IGR5bmFtaWMgbG9nIGxldmVsLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyB0aGUgY3VycmVudGx5IHNldCBkeW5hbWljIGxvZyBsZXZlbC4KKyAqCisgKi8KK290TG9nTGV2ZWwgb3RHZXREeW5hbWljTG9nTGV2ZWwob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGR5bmFtaWMgbG9nIGxldmVsLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFMb2dMZXZlbCBUaGUgZHluYW1pYyBsb2cgbGV2ZWwuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgICAgVGhlIGxvZyBsZXZlbCB3YXMgY2hhbmdlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0RJU0FCTEVEX0ZFQVRVUkUgICBUaGUgZHluYW1pYyBsb2cgbGV2ZWwgZmVhdHVyZSBpcyBkaXNhYmxlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChAc2EgYE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0xPR19MRVZFTGAgY29uZmlndXJhdGlvbiBvcHRpb24pLgorICoKKyAqLworb3RFcnJvciBvdFNldER5bmFtaWNMb2dMZXZlbChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TG9nTGV2ZWwgYUxvZ0xldmVsKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfSU5TVEFOQ0VfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9pcDYuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9pcDYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDY0ZDcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2lwNi5oCkBAIC0wLDAgKzEsMzg3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBJUHY2IEFQSS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfSVA2X0hfCisjZGVmaW5lIE9QRU5USFJFQURfSVA2X0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL21lc3NhZ2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktaXA2CisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgSVB2NiBjb21tdW5pY2F0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBicmluZ3MgdXAgdGhlIElQdjYgaW50ZXJmYWNlLgorICoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBlbmFibGUvZGlzYWJsZSBJUHY2IGNvbW11bmljYXRpb24uCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dIGFFbmFibGVkICBUUlVFIHRvIGVuYWJsZSBJUHY2LCBGQUxTRSBvdGhlcndpc2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBlbmFibGVkIHRoZSBJUHY2IGludGVyZmFjZSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgaW50ZXJmYWNlIHdhcyBhbHJlYWR5IGVuYWJsZWQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdElwNlNldEVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBpbnRlcmZhY2UgaXMgdXAuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCBUUlVFICAgVGhlIElQdjYgaW50ZXJmYWNlIGlzIGVuYWJsZWQuCisgKiBAcmV0dmFsIEZBTFNFICBUaGUgSVB2NiBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuCisgKgorICovCitPVEFQSSBib29sIE9UQ0FMTCBvdElwNklzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEFkZCBhIE5ldHdvcmsgSW50ZXJmYWNlIEFkZHJlc3MgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisgKgorICogVGhlIHBhc3NlZCBpbiBpbnN0YW5jZSBAcCBhQWRkcmVzcyB3aWxsIGJlIGNvcGllZCBieSB0aGUgVGhyZWFkIGludGVyZmFjZS4gVGhlIFRocmVhZCBpbnRlcmZhY2Ugb25seQorICogc3VwcG9ydHMgYSBmaXhlZCBudW1iZXIgb2YgZXh0ZXJuYWxseSBhZGRlZCB1bmljYXN0IGFkZHJlc3Nlcy4gU2VlIE9QRU5USFJFQURfQ09ORklHX01BWF9FWFRfSVBfQUREUlMuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcG9pbnRlciB0byBhIE5ldHdvcmsgSW50ZXJmYWNlIEFkZHJlc3MuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCAob3IgdXBkYXRlZCkgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIEFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIElQIEFkZHJlc3MgaW5kaWNhdGVkIGJ5IEBwIGFBZGRyZXNzIGlzIGFuIGludGVybmFsIGFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIE5ldHdvcmsgSW50ZXJmYWNlIGlzIGFscmVhZHkgc3RvcmluZyB0aGUgbWF4aW11bSBhbGxvd2VkIGV4dGVybmFsIGFkZHJlc3Nlcy4KKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RJcDZBZGRVbmljYXN0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90TmV0aWZBZGRyZXNzICphQWRkcmVzcyk7CisKKy8qKgorICogUmVtb3ZlIGEgTmV0d29yayBJbnRlcmZhY2UgQWRkcmVzcyBmcm9tIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHBvaW50ZXIgdG8gYW4gSVAgQWRkcmVzcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIEFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIElQIEFkZHJlc3MgaW5kaWNhdGVkIGJ5IEBwIGFBZGRyZXNzIGlzIGFuIGludGVybmFsIGFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgICAgVGhlIElQIEFkZHJlc3MgaW5kaWNhdGVkIGJ5IEBwIGFBZGRyZXNzIHdhcyBub3QgZm91bmQuCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90SXA2UmVtb3ZlVW5pY2FzdEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKTsKKworLyoqCisgKiBHZXQgdGhlIGxpc3Qgb2YgSVB2NiBhZGRyZXNzZXMgYXNzaWduZWQgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgTmV0d29yayBJbnRlcmZhY2UgQWRkcmVzcy4KKyAqLworT1RBUEkgY29uc3Qgb3ROZXRpZkFkZHJlc3MgKk9UQ0FMTCBvdElwNkdldFVuaWNhc3RBZGRyZXNzZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTdWJzY3JpYmUgdGhlIFRocmVhZCBpbnRlcmZhY2UgdG8gYSBOZXR3b3JrIEludGVyZmFjZSBNdWx0aWNhc3QgQWRkcmVzcy4KKyAqCisgKiBUaGUgcGFzc2VkIGluIGluc3RhbmNlIEBwIGFBZGRyZXNzIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBUaHJlYWQgaW50ZXJmYWNlLiBUaGUgVGhyZWFkIGludGVyZmFjZSBvbmx5CisgKiBzdXBwb3J0cyBhIGZpeGVkIG51bWJlciBvZiBleHRlcm5hbGx5IGFkZGVkIG11bHRpY2FzdCBhZGRyZXNzZXMuIFNlZSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfRVhUX01VTFRJQ0FTVF9JUF9BRERSUy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSBwb2ludGVyIHRvIGFuIElQIEFkZHJlc3MuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzdWJzY3JpYmVkIHRvIHRoZSBOZXR3b3JrIEludGVyZmFjZSBNdWx0aWNhc3QgQWRkcmVzcy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgSVAgQWRkcmVzcyBpbmRpY2F0ZWQgYnkgQHAgYUFkZHJlc3MgaXMgaW52YWxpZCBhZGRyZXNzLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIFRoZSBOZXR3b3JrIEludGVyZmFjZSBpcyBhbHJlYWR5IHN0b3JpbmcgdGhlIG1heGltdW0gYWxsb3dlZCBleHRlcm5hbCBtdWx0aWNhc3QgYWRkcmVzc2VzLgorICovCitvdEVycm9yIG90SXA2U3Vic2NyaWJlTXVsdGljYXN0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpOworCisvKioKKyAqIFVuc3Vic2NyaWJlIHRoZSBUaHJlYWQgaW50ZXJmYWNlIHRvIGEgTmV0d29yayBJbnRlcmZhY2UgTXVsdGljYXN0IEFkZHJlc3MuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcG9pbnRlciB0byBhbiBJUCBBZGRyZXNzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIHRvIHRoZSBOZXR3b3JrIEludGVyZmFjZSBNdWx0aWNhc3QgQWRkcmVzcy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgSVAgQWRkcmVzcyBpbmRpY2F0ZWQgYnkgQHAgYUFkZHJlc3MgaXMgYW4gaW50ZXJuYWwgYWRkcmVzcy4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICAgICBUaGUgSVAgQWRkcmVzcyBpbmRpY2F0ZWQgYnkgQHAgYUFkZHJlc3Mgd2FzIG5vdCBmb3VuZC4KKyAqLworb3RFcnJvciBvdElwNlVuc3Vic2NyaWJlTXVsdGljYXN0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpOworCisvKioKKyAqIEdldCB0aGUgbGlzdCBvZiBJUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMgc3Vic2NyaWJlZCB0byB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBOZXR3b3JrIEludGVyZmFjZSBNdWx0aWNhc3QgQWRkcmVzcy4KKyAqLworY29uc3Qgb3ROZXRpZk11bHRpY2FzdEFkZHJlc3MgKm90SXA2R2V0TXVsdGljYXN0QWRkcmVzc2VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQ2hlY2sgaWYgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGUgaXMgZW5hYmxlZCBvbiB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHNhIG90SXA2U2V0TXVsdGljYXN0UHJvbWlzY3VvdXNFbmFibGVkCisgKi8KK2Jvb2wgb3RJcDZJc011bHRpY2FzdFByb21pc2N1b3VzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEVuYWJsZSBtdWx0aWNhc3QgcHJvbWlzY3VvdXMgbW9kZSBvbiB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUVuYWJsZWQgICBUUlVFIHRvIGVuYWJsZSBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgbW9kZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzYSBvdElwNklzTXVsdGljYXN0UHJvbWlzY3VvdXNFbmFibGVkCisgKi8KK3ZvaWQgb3RJcDZTZXRNdWx0aWNhc3RQcm9taXNjdW91c0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHRvIGNyZWF0ZSBJUHY2IElJRCBkdXJpbmcgU0xBQUMgcHJvY2VkdXJlLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhQWRkcmVzcyAgIEEgcG9pbnRlciB0byBzdHJ1Y3R1cmUgY29udGFpbmluZyBJUHY2IGFkZHJlc3MgZm9yIHdoaWNoIElJRCBpcyBiZWluZyBjcmVhdGVkLgorICogQHBhcmFtW2lub3V0XSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gY3JlYXRvci1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZWQgdmFsaWQgSUlEIGZvciBnaXZlbiBJUHY2IGFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lQNl9BRERSRVNTX0NSRUFUSU9OX0ZBSUxVUkUgIENyZWF0aW9uIG9mIHZhbGlkIElJRCBmb3IgZ2l2ZW4gSVB2NiBhZGRyZXNzIGZhaWxlZC4KKyAqCisgKi8KK3R5cGVkZWYgb3RFcnJvcigqb3RJcDZTbGFhY0lpZENyZWF0ZSkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3MsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBVcGRhdGUgYWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBJUHY2IGFkZHJlc3NlcyBmb3IgcHJlZml4ZXMgZnJvbSBjdXJyZW50IE5ldHdvcmsgRGF0YSB3aXRoIFNMQUFDIHByb2NlZHVyZS4KKyAqCisgKiBAcGFyYW1baW5dICAgICBhSW5zdGFuY2UgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbm91dF0gIGFBZGRyZXNzZXMgICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgSVB2NiBhZGRyZXNzZXMuCisgKiBAcGFyYW1baW5dICAgICBhTnVtQWRkcmVzc2VzICBUaGUgbnVtYmVyIG9mIHNsb3RzIGluIGFBZGRyZXNzZXMgYXJyYXkuCisgKiBAcGFyYW1baW5dICAgICBhSWlkQ3JlYXRlICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBjcmVhdGUgSVB2NiBJSURzLgorICogQHBhcmFtW2luXSAgICAgYUNvbnRleHQgICAgICAgQSBwb2ludGVyIHRvIGRhdGEgcGFzc2VkIHRvIGFJaWRDcmVhdGUgZnVuY3Rpb24uCisgKgorICovCit2b2lkIG90SXA2U2xhYWNVcGRhdGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3NlcywgdWludDMyX3QgYU51bUFkZHJlc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICBvdElwNlNsYWFjSWlkQ3JlYXRlIGFJaWRDcmVhdGUsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBDcmVhdGUgcmFuZG9tIElJRCBmb3IgZ2l2ZW4gSVB2NiBhZGRyZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3NlcyAgQSBwb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIElQdjYgYWRkcmVzcyBmb3Igd2hpY2ggSUlEIGlzIGJlaW5nIGNyZWF0ZWQuCisgKiBAcGFyYW1baW5dICAgICBhQ29udGV4dCAgICBBIHBvaW50ZXIgdG8gdW51c2VkIGRhdGEuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBDcmVhdGVkIHZhbGlkIElJRCBmb3IgZ2l2ZW4gSVB2NiBhZGRyZXNzLgorICoKKyAqLworb3RFcnJvciBvdElwNkNyZWF0ZVJhbmRvbUlpZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQWRkcmVzc2VzLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogQ3JlYXRlIElJRCBmb3IgZ2l2ZW4gSVB2NiBhZGRyZXNzIHVzaW5nIGV4dGVuZGVkIE1BQyBhZGRyZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3NlcyAgQSBwb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIElQdjYgYWRkcmVzcyBmb3Igd2hpY2ggSUlEIGlzIGJlaW5nIGNyZWF0ZWQuCisgKiBAcGFyYW1baW5dICAgICBhQ29udGV4dCAgICBBIHBvaW50ZXIgdG8gdW51c2VkIGRhdGEuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBDcmVhdGVkIHZhbGlkIElJRCBmb3IgZ2l2ZW4gSVB2NiBhZGRyZXNzLgorICoKKyAqLworb3RFcnJvciBvdElwNkNyZWF0ZU1hY0lpZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQWRkcmVzc2VzLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogQ3JlYXRlIHNlbWFudGljYWxseSBvcGFxdWUgSUlEIGZvciBnaXZlbiBJUHY2IGFkZHJlc3MuCisgKgorICogQHBhcmFtW2luXSAgICAgYUluc3RhbmNlICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhQWRkcmVzc2VzICBBIHBvaW50ZXIgdG8gc3RydWN0dXJlIGNvbnRhaW5pbmcgSVB2NiBhZGRyZXNzIGZvciB3aGljaCBJSUQgaXMgYmVpbmcgY3JlYXRlZC4KKyAqIEBwYXJhbVtpbm91dF0gIGFDb250ZXh0ICAgIEEgcG9pbnRlciB0byBhIG90U2VtYW50aWNhbGx5T3BhcXVlSWlkR2VuZXJhdG9yRGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZWQgdmFsaWQgSUlEIGZvciBnaXZlbiBJUHY2IGFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lQNl9BRERSRVNTX0NSRUFUSU9OX0ZBSUxVUkUgIENvdWxkIG5vdCBjcmVhdGUgdmFsaWQgSUlEIGZvciBnaXZlbiBJUHY2IGFkZHJlc3MuCisgKgorICovCitvdEVycm9yIG90SXA2Q3JlYXRlU2VtYW50aWNhbGx5T3BhcXVlSWlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzZXMsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBBbGxvY2F0ZSBhIG5ldyBtZXNzYWdlIGJ1ZmZlciBmb3Igc2VuZGluZyBhbiBJUHY2IG1lc3NhZ2UuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUxpbmtTZWN1cml0eUVuYWJsZWQgIFRSVUUgaWYgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlY3VyZWQgYXQgTGF5ZXIgMgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBidWZmZXIgb3IgTlVMTCBpZiBubyBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZS4KKyAqCisgKiBAc2Egb3RGcmVlTWVzc2FnZQorICovCitvdE1lc3NhZ2UgKm90SXA2TmV3TWVzc2FnZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUxpbmtTZWN1cml0eUVuYWJsZWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiBhbiBJUHY2IGRhdGFncmFtIGlzIHJlY2VpdmVkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIElQdjYgZGF0YWdyYW0uCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdElwNlJlY2VpdmVDYWxsYmFjaykob3RNZXNzYWdlICphTWVzc2FnZSwgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gcHJvdmlkZSByZWNlaXZlZCBJUHY2IGRhdGFncmFtcy4KKyAqCisgKiBCeSBkZWZhdWx0LCB0aGlzIGNhbGxiYWNrIGRvZXMgbm90IHBhc3MgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYy4gIFNlZSBvdElwNlNldFJlY2VpdmVGaWx0ZXJFbmFibGVkKCkgdG8KKyAqIGNoYW5nZSB0aGUgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYyBmaWx0ZXIgc2V0dGluZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYW4gSVB2NiBkYXRhZ3JhbSBpcyByZWNlaXZlZCBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCB0byBkaXNhYmxlIHRoZSBjYWxsYmFjay4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFja0NvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEBzYSBvdElwNklzUmVjZWl2ZUZpbHRlckVuYWJsZWQKKyAqIEBzYSBvdElwNlNldFJlY2VpdmVGaWx0ZXJFbmFibGVkCisgKgorICovCit2b2lkIG90SXA2U2V0UmVjZWl2ZUNhbGxiYWNrKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RJcDZSZWNlaXZlQ2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ2FsbGJhY2tDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBUaHJlYWQgY29udHJvbCB0cmFmZmljIGlzIGZpbHRlcmVkIG91dCB3aGVuIGRlbGl2ZXJpbmcgSVB2NiBkYXRhZ3JhbXMKKyAqIHZpYSB0aGUgY2FsbGJhY2sgc3BlY2lmaWVkIGluIG90SXA2U2V0UmVjZWl2ZUNhbGxiYWNrKCkuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zICBUUlVFIGlmIFRocmVhZCBjb250cm9sIHRyYWZmaWMgaXMgZmlsdGVyZWQgb3V0LCBGQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNhIG90SXA2U2V0UmVjZWl2ZUNhbGxiYWNrCisgKiBAc2Egb3RJcDZTZXRSZWNlaXZlRmlsdGVyRW5hYmxlZAorICoKKyAqLworYm9vbCBvdElwNklzUmVjZWl2ZUZpbHRlckVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgd2hldGhlciBvciBub3QgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYyBpcyBmaWx0ZXJlZCBvdXQgd2hlbiBkZWxpdmVyaW5nIElQdjYgZGF0YWdyYW1zCisgKiB2aWEgdGhlIGNhbGxiYWNrIHNwZWNpZmllZCBpbiBvdElwNlNldFJlY2VpdmVDYWxsYmFjaygpLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFbmFibGVkICBUUlVFIGlmIFRocmVhZCBjb250cm9sIHRyYWZmaWMgaXMgZmlsdGVyZWQgb3V0LCBGQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNhIG90SXA2U2V0UmVjZWl2ZUNhbGxiYWNrCisgKiBAc2Egb3RJc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkCisgKgorICovCit2b2lkIG90SXA2U2V0UmVjZWl2ZUZpbHRlckVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIElQdjYgZGF0YWdyYW0gdmlhIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIElQdjYgZGF0YWdyYW0uCisgKgorICovCitvdEVycm9yIG90SXA2U2VuZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TWVzc2FnZSAqYU1lc3NhZ2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhIHBvcnQgdG8gdGhlIGFsbG93ZWQgdW5zZWN1cmVkIHBvcnQgbGlzdC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUG9ydCAgICAgVGhlIHBvcnQgdmFsdWUuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBUaGUgcG9ydCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBhbGxvd2VkIHVuc2VjdXJlIHBvcnQgbGlzdC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgVGhlIHVuc2VjdXJlIHBvcnQgbGlzdCBpcyBmdWxsLgorICoKKyAqLworb3RFcnJvciBvdElwNkFkZFVuc2VjdXJlUG9ydChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQb3J0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBwb3J0IGZyb20gdGhlIGFsbG93ZWQgdW5zZWN1cmUgcG9ydCBsaXN0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQb3J0ICAgICBUaGUgcG9ydCB2YWx1ZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgVGhlIHBvcnQgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20gdGhlIGFsbG93ZWQgdW5zZWN1cmUgcG9ydCBsaXN0LgorICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIFRoZSBwb3J0IHdhcyBub3QgZm91bmQgaW4gdGhlIHVuc2VjdXJlIHBvcnQgbGlzdC4KKyAqCisgKi8KK290RXJyb3Igb3RJcDZSZW1vdmVVbnNlY3VyZVBvcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhUG9ydCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgdW5zZWN1cmUgcG9ydCBsaXN0LgorICoKKyAqIEBub3RlIFBvcnQgdmFsdWUgMCBpcyB1c2VkIHRvIGluZGljYXRlIGFuIGludmFsaWQgZW50cnkuCisgKgorICogQHBhcmFtW2luXSAgIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtvdXRdICBhTnVtRW50cmllcyAgVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBsaXN0LgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdW5zZWN1cmUgcG9ydCBsaXN0LgorICoKKyAqLworY29uc3QgdWludDE2X3QgKm90SXA2R2V0VW5zZWN1cmVQb3J0cyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFOdW1FbnRyaWVzKTsKKworLyoqCisgKiBUZXN0IGlmIHR3byBJUHY2IGFkZHJlc3NlcyBhcmUgdGhlIHNhbWUuCisgKgorICogQHBhcmFtW2luXSAgYSAgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBJUHY2IGFkZHJlc3MgdG8gY29tcGFyZS4KKyAqIEBwYXJhbVtpbl0gIGIgIEEgcG9pbnRlciB0byB0aGUgc2Vjb25kIElQdjYgYWRkcmVzcyB0byBjb21wYXJlLgorICoKKyAqIEByZXR2YWwgVFJVRSAgIFRoZSB0d28gSVB2NiBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lLgorICogQHJldHZhbCBGQUxTRSAgVGhlIHR3byBJUHY2IGFkZHJlc3NlcyBhcmUgbm90IHRoZSBzYW1lLgorICovCitPVEFQSSBib29sIE9UQ0FMTCBvdElwNklzQWRkcmVzc0VxdWFsKGNvbnN0IG90SXA2QWRkcmVzcyAqYSwgY29uc3Qgb3RJcDZBZGRyZXNzICpiKTsKKworLyoqCisgKiBDb252ZXJ0IGEgaHVtYW4tcmVhZGFibGUgSVB2NiBhZGRyZXNzIHN0cmluZyBpbnRvIGEgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gICBhU3RyaW5nICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZy4KKyAqIEBwYXJhbVtvdXRdICBhQWRkcmVzcyAgQSBwb2ludGVyIHRvIGFuIElQdjYgYWRkcmVzcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHBhcnNlZCB0aGUgc3RyaW5nLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEZhaWxlZCB0byBwYXJzZSB0aGUgc3RyaW5nLgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKmFTdHJpbmcsIG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJlZml4IG1hdGNoIGxlbmd0aCAoYml0cykgZm9yIHR3byBJUHY2IGFkZHJlc3Nlcy4KKyAqCisgKiBAcGFyYW1baW5dICBhRmlyc3QgICBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IElQdjYgYWRkcmVzcy4KKyAqIEBwYXJhbVtpbl0gIGFTZWNvbmQgIEEgcG9pbnRlciB0byB0aGUgc2Vjb25kIElQdjYgYWRkcmVzcy4KKyAqCisgKiBAcmV0dXJucyAgVGhlIHByZWZpeCBtYXRjaCBsZW5ndGggaW4gYml0cy4KKyAqCisgKi8KK09UQVBJIHVpbnQ4X3QgT1RDQUxMIG90SXA2UHJlZml4TWF0Y2goY29uc3Qgb3RJcDZBZGRyZXNzICphRmlyc3QsIGNvbnN0IG90SXA2QWRkcmVzcyAqYVNlY29uZCk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0lQNl9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL2phbV9kZXRlY3Rpb24uaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9qYW1fZGV0ZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4ZjU5YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9qYW1fZGV0ZWN0aW9uLmgKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIE9wZW5UaHJlYWQgQVBJIGZvciBqYW0gZGV0ZWN0aW9uIGZlYXR1cmUuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0pBTV9ERVRFQ1RJT05fSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9KQU1fREVURUNUSU9OX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisKKy8qKgorICogQGFkZHRvZ3JvdXAgYXBpLWphbS1kZXRlY3Rpb24KKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBzaWduYWwgamFtbWluZyBkZXRlY3Rpb24gZmVhdHVyZS4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgaWYgc2lnbmFsIGphbSBkZXRlY3Rpb24gaXMgZW5hYmxlZCBhbmQgYSBqYW0gaXMgZGV0ZWN0ZWQuCisgKgorICogQHBhcmFtW2luXSAgYUphbVN0YXRlIEN1cnJlbnQgamFtIHN0YXRlIChgdHJ1ZWAgaWYgamFtIGlzIGRldGVjdGVkLCBgZmFsc2VgIG90aGVyd2lzZSkuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdEphbURldGVjdGlvbkNhbGxiYWNrKShib29sIGFKYW1TdGF0ZSwgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFNldCB0aGUgSmFtIERldGVjdGlvbiBSU1NJIFRocmVzaG9sZCAoaW4gZEJtKS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUnNzaVRocmVzaG9sZCAgVGhlIFJTU0kgdGhyZXNob2xkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSB0aHJlc2hvbGQuCisgKgorICovCitvdEVycm9yIG90SmFtRGV0ZWN0aW9uU2V0UnNzaVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUnNzaVRocmVzaG9sZCk7CisKKy8qKgorICogR2V0IHRoZSBKYW0gRGV0ZWN0aW9uIFJTU0kgVGhyZXNob2xkIChpbiBkQm0pLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgSmFtIERldGVjdGlvbiBSU1NJIFRocmVzaG9sZC4KKyAqLworaW50OF90IG90SmFtRGV0ZWN0aW9uR2V0UnNzaVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgSmFtIERldGVjdGlvbiBEZXRlY3Rpb24gV2luZG93IChpbiBzZWNvbmRzKS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFXaW5kb3cgICAgICAgICAgICAgIFRoZSBKYW0gRGV0ZWN0aW9uIHdpbmRvdyAodmFsaWQgcmFuZ2UgaXMgMSB0byA2MykKKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgd2luZG93LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBnaXZlbiBpbnB1dCBwYXJhbWV0ZXIgbm90IHdpdGhpbiB2YWxpZCByYW5nZSAoMS02MykKKyAqCisgKi8KK290RXJyb3Igb3RKYW1EZXRlY3Rpb25TZXRXaW5kb3cob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFXaW5kb3cpOworCisvKioKKyAqIEdldCB0aGUgSmFtIERldGVjdGlvbiBEZXRlY3Rpb24gV2luZG93IChpbiBzZWNvbmRzKS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgSmFtIERldGVjdGlvbiBXaW5kb3cuCisgKi8KK3VpbnQ4X3Qgb3RKYW1EZXRlY3Rpb25HZXRXaW5kb3cob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIEphbSBEZXRlY3Rpb24gQnVzeSBQZXJpb2QgKGluIHNlY29uZHMpLgorICoKKyAqIFRoZSBudW1iZXIgb2YgYWdncmVnYXRlIHNlY29uZHMgd2l0aGluIHRoZSBkZXRlY3Rpb24gd2luZG93IHdoZXJlIHRoZSBSU1NJIG11c3QgYmUgYWJvdmUKKyAqIHRocmVzaG9sZCB0byB0cmlnZ2VyIGRldGVjdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFCdXN5UGVyaW9kICAgICAgICAgIFRoZSBKYW0gRGV0ZWN0aW9uIGJ1c3kgcGVyaW9kIChzaG91bGQgYmUgbm9uLXplcm8gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gSmFtIERldGVjdGlvbiBXaW5kb3cpCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIHdpbmRvdy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgZ2l2ZW4gaW5wdXQgaXMgbm90IHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UuCisgKgorICovCitvdEVycm9yIG90SmFtRGV0ZWN0aW9uU2V0QnVzeVBlcmlvZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUJ1c3lQZXJpb2QpOworCisvKioKKyAqIEdldCB0aGUgSmFtIERldGVjdGlvbiBCdXN5IFBlcmlvZCAoaW4gc2Vjb25kcykKKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgSmFtIERldGVjdGlvbiBCdXN5IFBlcmlvZAorICovCit1aW50OF90IG90SmFtRGV0ZWN0aW9uR2V0QnVzeVBlcmlvZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFN0YXJ0IHRoZSBqYW1taW5nIGRldGVjdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCB0byBub3RpZnkgb2YgamFtbWluZyBzdGF0ZSBjaGFuZ2UuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgamFtbWluZyBkZXRlY3Rpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgICBKYW0gZGV0ZWN0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQgYmVmb3JlLgorICoKKyAqLworb3RFcnJvciBvdEphbURldGVjdGlvblN0YXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RKYW1EZXRlY3Rpb25DYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBTdG9wIHRoZSBqYW1taW5nIGRldGVjdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgamFtbWluZyBkZXRlY3Rpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgICBKYW0gZGV0ZWN0aW9uIGlzIGFscmVhZHkgc3RvcHBlZC4KKyAqCisgKi8KK290RXJyb3Igb3RKYW1EZXRlY3Rpb25TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBKYW0gRGV0ZWN0aW9uIFN0YXR1cyAoZW5hYmxlZC9kaXNhYmxlZCkKKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgSmFtIERldGVjdGlvbiBzdGF0dXMgKHRydWUgaWYgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlKS4KKyAqLworYm9vbCBvdEphbURldGVjdGlvbklzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgSmFtIERldGVjdGlvbiBTdGF0ZQorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBKYW0gRGV0ZWN0aW9uIHN0YXRlIChgdHJ1ZWAgamFtIGlzIGRldGVjdGVkLCBgZmFsc2UnIG90aGVyd2lzZSkuCisgKi8KK2Jvb2wgb3RKYW1EZXRlY3Rpb25HZXRTdGF0ZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgY3VycmVudCBoaXN0b3J5IGJpdG1hcC4KKyAqCisgKiBUaGlzIHZhbHVlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgc3RhdGUgb2YgamFtbWluZyBkZXRlY3Rpb24KKyAqIG1vZHVsZSBmb3IgbW9uaXRvcmluZy9kZWJ1Z2dpbmcgcHVycG9zZS4gSXQgcmV0dXJucyBhIDY0LWJpdCB2YWx1ZSB3aGVyZQorICogZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lIHNlY29uZCBpbnRlcnZhbCBzdGFydGluZyB3aXRoIGJpdCAwIGZvciB0aGUKKyAqIG1vc3QgcmVjZW50IGludGVydmFsIGFuZCBiaXQgNjMgZm9yIHRoZSBvbGRlc3QgaW50ZXJ2YWxzICg2MyBzZWMgZWFybGllcikuCisgKiBUaGUgYml0IGlzIHNldCB0byAxIGlmIHRoZSBqYW1taW5nIGRldGVjdGlvbiBtb2R1bGUgb2JzZXJ2ZWQvZGV0ZWN0ZWQKKyAqIGhpZ2ggc2lnbmFsIGxldmVsIGR1cmluZyB0aGUgY29ycmVzcG9uZGluZyBvbmUgc2Vjb25kIGludGVydmFsLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGhpc3RvcnkgYml0bWFwLgorICovCit1aW50NjRfdCBvdEphbURldGVjdGlvbkdldEhpc3RvcnlCaXRtYXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0pBTV9ERVRFQ1RJT05fSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9qb2luZXIuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9qb2luZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTZkMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2pvaW5lci5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgdGhlIFRocmVhZCBKb2luZXIgcm9sZS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfSk9JTkVSX0hfCisjZGVmaW5lIE9QRU5USFJFQURfSk9JTkVSX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS90b29sY2hhaW4uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1qb2luZXIKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciB0aGUgVGhyZWFkIEpvaW5lciByb2xlLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB0byBub3RpZnkgdGhlIGNvbXBsZXRpb24gb2YgYSBqb2luIG9wZXJhdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRXJyb3IgICAgT1RfRVJST1JfTk9ORSBpZiB0aGUgam9pbiBwcm9jZXNzIHN1Y2NlZWRlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgICBPVF9FUlJPUl9TRUNVUklUWSBpZiB0aGUgam9pbiBwcm9jZXNzIGZhaWxlZCBkdWUgdG8gc2VjdXJpdHkgY3JlZGVudGlhbHMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgT1RfRVJST1JfTk9UX0ZPVU5EIGlmIG5vIGpvaW5hYmxlIG5ldHdvcmsgd2FzIGRpc2NvdmVyZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgT1RfRVJST1JfUkVTUE9OU0VfVElNRU9VVCBpZiBhIHJlc3BvbnNlIHRpbWVkIG91dC4KKyAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoT1RDQUxMICpvdEpvaW5lckNhbGxiYWNrKShvdEVycm9yIGFFcnJvciwgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgVGhyZWFkIEpvaW5lciByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVBTS2QgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBQU0tkLgorICogQHBhcmFtW2luXSAgYVByb3Zpc2lvbmluZ1VybCAgQSBwb2ludGVyIHRvIHRoZSBQcm92aXNpb25pbmcgVVJMIChtYXkgYmUgTlVMTCkuCisgKiBAcGFyYW1baW5dICBhVmVuZG9yTmFtZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFZlbmRvciBOYW1lIChtdXN0IGJlIHN0YXRpYykuCisgKiBAcGFyYW1baW5dICBhVmVuZG9yTW9kZWwgICAgICBBIHBvaW50ZXIgdG8gdGhlIFZlbmRvciBNb2RlbCAobXVzdCBiZSBzdGF0aWMpLgorICogQHBhcmFtW2luXSAgYVZlbmRvclN3VmVyc2lvbiAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgU1cgVmVyc2lvbiAobXVzdCBiZSBzdGF0aWMpLgorICogQHBhcmFtW2luXSAgYVZlbmRvckRhdGEgICAgICAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgRGF0YSAobXVzdCBiZSBzdGF0aWMpLgorICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgICAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgam9pbiBvcGVyYXRpb24gY29tcGxldGVzLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBDb21taXNzaW9uZXIgcm9sZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBAcCBhUFNLZCBvciBAcCBhUHJvdmlzaW9uaW5nVXJsIGlzIGludmFsaWQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdEpvaW5lclN0YXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgY2hhciAqYVBTS2QsIGNvbnN0IGNoYXIgKmFQcm92aXNpb25pbmdVcmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFWZW5kb3JOYW1lLCBjb25zdCBjaGFyICphVmVuZG9yTW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFWZW5kb3JTd1ZlcnNpb24sIGNvbnN0IGNoYXIgKmFWZW5kb3JEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEpvaW5lckNhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIFRocmVhZCBKb2luZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RKb2luZXJTdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBlbmQgb2YgZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9KT0lORVJfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9saW5rLmggYi9pbmNsdWRlL29wZW50aHJlYWQvbGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMWRjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvbGluay5oCkBAIC0wLDAgKzEsNTk5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBJRUVFIDgwMi4xNS40IExpbmsgTGF5ZXIgQVBJLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9MSU5LX0hfCisjZGVmaW5lIE9QRU5USFJFQURfTElOS19IXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1saW5rLWxpbmsKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIHRoYXQgY29udHJvbCBsaW5rLWxheWVyIGNvbmZpZ3VyYXRpb24uCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIGR1cmluZyBhbiBJRUVFIDgwMi4xNS40IEFjdGl2ZSBTY2FuIHdoZW4gYW4gSUVFRSA4MDIuMTUuNCBCZWFjb24gaXMgcmVjZWl2ZWQgb3IKKyAqIHRoZSBzY2FuIGNvbXBsZXRlcy4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVzdWx0ICAgQSB2YWxpZCBwb2ludGVyIHRvIHRoZSBiZWFjb24gaW5mb3JtYXRpb24gb3IgTlVMTCB3aGVuIHRoZSBhY3RpdmUgc2NhbiBjb21wbGV0ZXMuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKE9UQ0FMTCAqb3RIYW5kbGVBY3RpdmVTY2FuUmVzdWx0KShvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhbiBJRUVFIDgwMi4xNS40IEFjdGl2ZSBTY2FuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhU2NhbkNoYW5uZWxzICAgICBBIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyB3aGljaCBjaGFubmVscyB0byBzY2FuIChlLmcuIE9UX0NIQU5ORUxfMTFfTUFTSykuCisgKiBAcGFyYW1baW5dICBhU2NhbkR1cmF0aW9uICAgICBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc3BlbmQgc2Nhbm5pbmcgZWFjaCBjaGFubmVsLgorICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgICAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gY2FsbGVkIG9uIHJlY2VpdmluZyBhIGJlYWNvbiBvciBzY2FuIGNvbXBsZXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFja0NvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgQWNjZXB0ZWQgdGhlIEFjdGl2ZSBTY2FuIHJlcXVlc3QuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0JVU1kgIEFscmVhZHkgcGVyZm9ybWluZyBhbiBBY3RpdmUgU2Nhbi4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90TGlua0FjdGl2ZVNjYW4ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQgYUNhbGxiYWNrLCB2b2lkICphQ2FsbGJhY2tDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhbiBJRUVFIDgwMi4xNS40IEFjdGl2ZSBTY2FuIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyB0cnVlIGlmIGFuIElFRUUgODAyLjE1LjQgQWN0aXZlIFNjYW4gaXMgaW4gcHJvZ3Jlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3RMaW5rSXNBY3RpdmVTY2FuSW5Qcm9ncmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgZHVyaW5nIGFuIElFRUUgODAyLjE1LjQgRW5lcmd5IFNjYW4gd2hlbiB0aGUgcmVzdWx0IGZvciBhIGNoYW5uZWwgaXMgcmVhZHkgb3IgdGhlCisgKiBzY2FuIGNvbXBsZXRlcy4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVzdWx0ICAgQSB2YWxpZCBwb2ludGVyIHRvIHRoZSBlbmVyZ3kgc2NhbiByZXN1bHQgaW5mb3JtYXRpb24gb3IgTlVMTCB3aGVuIHRoZSBlbmVyZ3kgc2NhbiBjb21wbGV0ZXMuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKE9UQ0FMTCAqb3RIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0KShvdEVuZXJneVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhbiBJRUVFIDgwMi4xNS40IEVuZXJneSBTY2FuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhU2NhbkNoYW5uZWxzICAgICBBIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBvbiB3aGljaCBjaGFubmVscyB0byBwZXJmb3JtIGVuZXJneSBzY2FuLgorICogQHBhcmFtW2luXSAgYVNjYW5EdXJhdGlvbiAgICAgVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNwZW5kIHNjYW5uaW5nIGVhY2ggY2hhbm5lbC4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCB0byBwYXNzIG9uIHNjYW4gcmVzdWx0IG9uIGluZGljYXRlIHNjYW4gY29tcGxldGlvbi4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFja0NvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgQWNjZXB0ZWQgdGhlIEVuZXJneSBTY2FuIHJlcXVlc3QuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0JVU1kgIENvdWxkIG5vdCBzdGFydCB0aGUgZW5lcmd5IHNjYW4uCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdExpbmtFbmVyZ3lTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVNjYW5DaGFubmVscywgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0IGFDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYW4gSUVFRSA4MDIuMTUuNCBFbmVyZ3kgU2NhbiBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgdHJ1ZSBpZiBhbiBJRUVFIDgwMi4xNS40IEVuZXJneSBTY2FuIGlzIGluIHByb2dyZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICovCitPVEFQSSBib29sIE9UQ0FMTCBvdExpbmtJc0VuZXJneVNjYW5JblByb2dyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBlbnF1ZXVlcyBhbiBJRUVFIDgwMi4xNS40IERhdGEgUmVxdWVzdCBtZXNzYWdlIGZvciB0cmFuc21pc3Npb24uCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIGFuIElFRUUgODAyLjE1LjQgRGF0YSBSZXF1ZXN0IG1lc3NhZ2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgICAgIEFuIElFRUUgODAyLjE1LjQgRGF0YSBSZXF1ZXN0IG1lc3NhZ2UgaXMgYWxyZWFkeSBlbnF1ZXVlZC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgRGV2aWNlIGlzIG5vdCBpbiByeC1vZmYtd2hlbi1pZGxlIG1vZGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgIEluc3VmZmljaWVudCBtZXNzYWdlIGJ1ZmZlcnMgYXZhaWxhYmxlLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RMaW5rU2VuZERhdGFSZXF1ZXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYW4gSUVFRSA4MDIuMTUuNCBNQUMgaXMgaW4gdGhlIHRyYW5zbWl0IHN0YXRlLgorICoKKyAqIE1BQyBtb2R1bGUgaXMgaW4gdGhlIHRyYW5zbWl0IHN0YXRlIGR1cmluZyBDU01BL0NBIHByb2NlZHVyZSwgQ0NBLCBEYXRhLCBCZWFjb24gb3IgRGF0YSBSZXF1ZXN0IGZyYW1lIHRyYW5zbWlzc2lvbgorICogYW5kIHJlY2VpdmluZyBhbiBBQ0sgb2YgYSB0cmFuc21pdHRlZCBmcmFtZS4gTUFDIG1vZHVsZSBpcyBub3QgaW4gdGhlIHRyYW5zbWl0IHN0YXRlIGR1cmluZyB0cmFuc21pc3Npb24gb2YgYW4gQUNLCisgKiBmcmFtZSBvciBhIEJlYWNvbiBSZXF1ZXN0IGZyYW1lLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIHRydWUgaWYgYW4gSUVFRSA4MDIuMTUuNCBNQUMgaXMgaW4gdGhlIHRyYW5zbWl0IHN0YXRlLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICovCitPVEFQSSBib29sIE9UQ0FMTCBvdExpbmtJc0luVHJhbnNtaXRTdGF0ZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgSUVFRSA4MDIuMTUuNCBjaGFubmVsLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IGNoYW5uZWwuCisgKgorICogQHNhIG90TGlua1NldENoYW5uZWwKKyAqLworT1RBUEkgdWludDhfdCBPVENBTEwgb3RMaW5rR2V0Q2hhbm5lbChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgSUVFRSA4MDIuMTUuNCBjaGFubmVsCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc3VjY2VlZCB3aGVuIFRocmVhZCBwcm90b2NvbHMgYXJlIGRpc2FibGVkLiAgQSBzdWNjZXNzZnVsCisgKiBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGludmFsaWRhdGUgdGhlIEFjdGl2ZSBhbmQgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0cyBpbgorICogbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ2hhbm5lbCAgVGhlIElFRUUgODAyLjE1LjQgY2hhbm5lbC4KKyAqCisgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBjaGFubmVsLgorICogQHJldHZhbCAgT1RfRVJST1JfSU5WQUxJRF9BUkdTICAgSWYgQHAgYUNobmFuZWwgaXMgbm90IGluIHRoZSByYW5nZSBbMTEsIDI2XS4KKyAqIEByZXR2YWwgIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIFRocmVhZCBwcm90b2NvbHMgYXJlIGVuYWJsZWQuCisgKgorICogQHNhIG90TGlua0dldENoYW5uZWwKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RMaW5rU2V0Q2hhbm5lbChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoYW5uZWwpOworCisvKioKKyAqIEdldCB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqLworT1RBUEkgY29uc3QgdWludDhfdCAqT1RDQUxMIG90TGlua0dldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IHN1Y2NlZWQgd2hlbiBUaHJlYWQgcHJvdG9jb2xzIGFyZSBkaXNhYmxlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRlbmRlZEFkZHJlc3MgIEEgcG9pbnRlciB0byB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgICBAcCBhRXh0ZW5kZWRBZGRyZXNzIHdhcyBOVUxMLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaHJlYWQgcHJvdG9jb2xzIGFyZSBlbmFibGVkLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RMaW5rU2V0RXh0ZW5kZWRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0ZW5kZWRBZGRyZXNzKTsKKworLyoqCisgKiBHZXQgdGhlIGZhY3RvcnktYXNzaWduZWQgSUVFRSBFVUktNjQuCisgKgorICogQHBhcmFtW2luXSAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIHRoZSBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFFdWk2NCAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmYWN0b3J5LWFzc2lnbmVkIElFRUUgRVVJLTY0IGlzIHBsYWNlZC4KKyAqCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90TGlua0dldEZhY3RvcnlBc3NpZ25lZEllZWVFdWk2NChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90RXh0QWRkcmVzcyAqYUV1aTY0KTsKKworLyoqCisgKiBHZXQgdGhlIEpvaW5lciBJRC4KKyAqCisgKiBKb2luZXIgSUQgaXMgdGhlIGZpcnN0IDY0IGJpdHMgb2YgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgU0hBLTI1NiBvdmVyIGZhY3RvcnktYXNzaWduZWQKKyAqIElFRUUgRVVJLTY0LCB3aGljaCBpcyB1c2VkIGFzIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyBkdXJpbmcgY29tbWlzc2lvbmluZyBwcm9jZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFIYXNoTWFjQWRkcmVzcyAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIEhhc2ggTWFjIEFkZHJlc3MgaXMgcGxhY2VkLgorICoKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rR2V0Sm9pbmVySWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdEV4dEFkZHJlc3MgKmFIYXNoTWFjQWRkcmVzcyk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtYXhpbXVtIHRyYW5zbWl0IHBvd2VyIHNldHRpbmcgaW4gZEJtLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zICBUaGUgbWF4aW11bSB0cmFuc21pdCBwb3dlciBzZXR0aW5nLgorICoKKyAqLworT1RBUEkgaW50OF90IE9UQ0FMTCBvdExpbmtHZXRNYXhUcmFuc21pdFBvd2VyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtYXhpbXVtIHRyYW5zbWl0IHBvd2VyIGluIGRCbS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUG93ZXIgICAgVGhlIG1heGltdW0gdHJhbnNtaXQgcG93ZXIgaW4gZEJtLgorICoKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rU2V0TWF4VHJhbnNtaXRQb3dlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUG93ZXIpOworCisvKioKKyAqIEdldCB0aGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRC4KKyAqCisgKiBAc2Egb3RMaW5rU2V0UGFuSWQKKyAqLworT1RBUEkgb3RQYW5JZCBPVENBTEwgb3RMaW5rR2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIElFRUUgODAyLjE1LjQgUEFOIElELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IHN1Y2NlZWQgd2hlbiBUaHJlYWQgcHJvdG9jb2xzIGFyZSBkaXNhYmxlZC4gIEEgc3VjY2Vzc2Z1bAorICogY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBpbnZhbGlkYXRlIHRoZSBBY3RpdmUgYW5kIFBlbmRpbmcgT3BlcmF0aW9uYWwgRGF0YXNldHMgaW4KKyAqIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVBhbklkICAgIFRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIFBBTiBJRC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICAgSWYgYVBhbklkIGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAsIDY1NTM0XS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhyZWFkIHByb3RvY29scyBhcmUgZW5hYmxlZC4KKyAqCisgKiBAc2Egb3RMaW5rR2V0UGFuSWQKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RMaW5rU2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFBhbklkIGFQYW5JZCk7CisKKy8qKgorICogR2V0IHRoZSBkYXRhIHBvbGwgcGVyaW9kIG9mIHNsZWVweSBlbmQgZGV2aWNlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyAgVGhlIGRhdGEgcG9sbCBwZXJpb2Qgb2Ygc2xlZXB5IGVuZCBkZXZpY2UgaW4gbWlsbGlzZWNvbmRzLgorICoKKyAqIEBzYSBvdExpbmtTZXRQb2xsUGVyaW9kCisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdExpbmtHZXRQb2xsUGVyaW9kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2V0IHRoZSBkYXRhIHBvbGwgcGVyaW9kIGZvciBzbGVlcHkgZW5kIGRldmljZS4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgb25seSBwb2xsIHBlcmlvZCBvZiBzbGVlcHkgZW5kIGRldmljZS4gVG8gdXBkYXRlIGNoaWxkIHRpbWVvdXQgdGhlIGZ1bmN0aW9uCisgKiAgICAgICBvdFNldENoaWxkVGltZW91dCgpIHNoYWxsIGJlIGNhbGxlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUG9sbFBlcmlvZCAgZGF0YSBwb2xsIHBlcmlvZCBpbiBtaWxsaXNlY29uZHMuCisgKgorICogQHNhIG90TGlua0dldFBvbGxQZXJpb2QKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rU2V0UG9sbFBlcmlvZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFQb2xsUGVyaW9kKTsKKworLyoqCisgKiBHZXQgdGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IFNob3J0IEFkZHJlc3MuCisgKi8KK09UQVBJIG90U2hvcnRBZGRyZXNzIE9UQ0FMTCBvdExpbmtHZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBBZGQgYW4gSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzIHRvIHRoZSBNQUMgd2hpdGVsaXN0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyICBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUgTUFDIHdoaXRlbGlzdC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgTm8gYnVmZmVycyBhdmFpbGFibGUgZm9yIGEgbmV3IE1BQyB3aGl0ZWxpc3QgZW50cnkuCisgKgorICogQHNhIG90TGlua0FkZFdoaXRlbGlzdFJzc2kKKyAqIEBzYSBvdExpbmtSZW1vdmVXaGl0ZWxpc3QKKyAqIEBzYSBvdExpbmtDbGVhcldoaXRlbGlzdAorICogQHNhIG90TGlua0dldFdoaXRlbGlzdEVudHJ5CisgKiBAc2Egb3RMaW5rU2V0V2hpdGVsaXN0RW5hYmxlZAorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdExpbmtBZGRXaGl0ZWxpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcik7CisKKy8qKgorICogQWRkIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyB0byB0aGUgTUFDIHdoaXRlbGlzdCBhbmQgZml4IHRoZSBSU1NJIHZhbHVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyICBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqIEBwYXJhbVtpbl0gIGFSc3NpICAgICBUaGUgUlNTSSBpbiBkQm0gdG8gdXNlIHdoZW4gcmVjZWl2aW5nIG1lc3NhZ2VzIGZyb20gYUV4dEFkZHIuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIE1BQyB3aGl0ZWxpc3QuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIE5vIGJ1ZmZlcnMgYXZhaWxhYmxlIGZvciBhIG5ldyBNQUMgd2hpdGVsaXN0IGVudHJ5LgorICoKKyAqIEBzYSBvdExpbmtBZGRXaGl0ZWxpc3RSc3NpCisgKiBAc2Egb3RMaW5rUmVtb3ZlV2hpdGVsaXN0CisgKiBAc2Egb3RMaW5rQ2xlYXJXaGl0ZWxpc3QKKyAqIEBzYSBvdExpbmtHZXRXaGl0ZWxpc3RFbnRyeQorICogQHNhIG90TGlua0lzV2hpdGVsaXN0RW5hYmxlZAorICogQHNhIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RMaW5rQWRkV2hpdGVsaXN0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCBpbnQ4X3QgYVJzc2kpOworCisvKioKKyAqIFJlbW92ZSBhbiBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MgZnJvbSB0aGUgTUFDIHdoaXRlbGlzdC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkciAgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgKgorICogQHNhIG90TGlua0FkZFdoaXRlbGlzdAorICogQHNhIG90TGlua0FkZFdoaXRlbGlzdFJzc2kKKyAqIEBzYSBvdExpbmtDbGVhcldoaXRlbGlzdAorICogQHNhIG90TGlua0dldFdoaXRlbGlzdEVudHJ5CisgKiBAc2Egb3RMaW5rSXNXaGl0ZWxpc3RFbmFibGVkCisgKiBAc2Egb3RMaW5rU2V0V2hpdGVsaXN0RW5hYmxlZAorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdExpbmtSZW1vdmVXaGl0ZWxpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgTUFDIHdoaXRlbGlzdCBlbnRyeS4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgIGFJbmRleCAgICBBbiBpbmRleCBpbnRvIHRoZSBNQUMgd2hpdGVsaXN0IHRhYmxlLgorICogQHBhcmFtW291dF0gIGFFbnRyeSAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGluZm9ybWF0aW9uIGlzIHBsYWNlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgTUFDIHdoaXRlbGlzdCBlbnRyeS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBAcCBhSW5kZXggaXMgb3V0IG9mIGJvdW5kcyBvciBAcCBhRW50cnkgaXMgTlVMTC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90TGlua0dldFdoaXRlbGlzdEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhSW5kZXgsIG90TWFjV2hpdGVsaXN0RW50cnkgKmFFbnRyeSk7CisKKy8qKgorICogUmVtb3ZlIGFsbCBlbnRyaWVzIGZyb20gdGhlIE1BQyB3aGl0ZWxpc3QuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEBzYSBvdExpbmtBZGRXaGl0ZWxpc3QKKyAqIEBzYSBvdExpbmtBZGRXaGl0ZWxpc3RSc3NpCisgKiBAc2Egb3RMaW5rUmVtb3ZlV2hpdGVsaXN0CisgKiBAc2Egb3RMaW5rR2V0V2hpdGVsaXN0RW50cnkKKyAqIEBzYSBvdExpbmtJc1doaXRlbGlzdEVuYWJsZWQKKyAqIEBzYSBvdExpbmtTZXRXaGl0ZWxpc3RFbmFibGVkCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90TGlua0NsZWFyV2hpdGVsaXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogRW5hYmxlIE1BQyB3aGl0ZWxpc3QgZmlsdGVyaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRW5hYmxlZCAgIFRSVUUgdG8gZW5hYmxlIHRoZSB3aGl0ZWxpc3QsIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2Egb3RMaW5rQWRkV2hpdGVsaXN0CisgKiBAc2Egb3RMaW5rQWRkV2hpdGVsaXN0UnNzaQorICogQHNhIG90TGlua1JlbW92ZVdoaXRlbGlzdAorICogQHNhIG90TGlua0NsZWFyV2hpdGVsaXN0CisgKiBAc2Egb3RMaW5rR2V0V2hpdGVsaXN0RW50cnkKKyAqIEBzYSBvdExpbmtJc1doaXRlbGlzdEVuYWJsZWQKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rU2V0V2hpdGVsaXN0RW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBNQUMgd2hpdGVsaXN0IGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRSVUUgaWYgdGhlIE1BQyB3aGl0ZWxpc3QgaXMgZW5hYmxlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzYSBvdExpbmtBZGRXaGl0ZWxpc3QKKyAqIEBzYSBvdExpbmtBZGRXaGl0ZWxpc3RSc3NpCisgKiBAc2Egb3RMaW5rUmVtb3ZlV2hpdGVsaXN0CisgKiBAc2Egb3RMaW5rQ2xlYXJXaGl0ZWxpc3QKKyAqIEBzYSBvdExpbmtHZXRXaGl0ZWxpc3RFbnRyeQorICogQHNhIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQKKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3RMaW5rSXNXaGl0ZWxpc3RFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQWRkIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyB0byB0aGUgTUFDIGJsYWNrbGlzdC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkciAgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIE1BQyBibGFja2xpc3QuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIE5vIGJ1ZmZlcnMgYXZhaWxhYmxlIGZvciBhIG5ldyBNQUMgYmxhY2tsaXN0IGVudHJ5LgorICoKKyAqIEBzYSBvdExpbmtSZW1vdmVCbGFja2xpc3QKKyAqIEBzYSBvdExpbmtDbGVhckJsYWNrbGlzdAorICogQHNhIG90TGlua0dldEJsYWNrbGlzdEVudHJ5CisgKiBAc2Egb3RMaW5rSXNCbGFja2xpc3RFbmFibGVkCisgKiBAc2Egb3RMaW5rU2V0QmxhY2tsaXN0RW5hYmxlZAorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdExpbmtBZGRCbGFja2xpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcik7CisKKy8qKgorICogUmVtb3ZlIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyBmcm9tIHRoZSBNQUMgYmxhY2tsaXN0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyICBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqCisgKiBAc2Egb3RMaW5rQWRkQmxhY2tsaXN0CisgKiBAc2Egb3RMaW5rQ2xlYXJCbGFja2xpc3QKKyAqIEBzYSBvdExpbmtHZXRCbGFja2xpc3RFbnRyeQorICogQHNhIG90TGlua0lzQmxhY2tsaXN0RW5hYmxlZAorICogQHNhIG90TGlua1NldEJsYWNrbGlzdEVuYWJsZWQKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rUmVtb3ZlQmxhY2tsaXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHIpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIE1BQyBCbGFja2xpc3QgZW50cnkuCisgKgorICogQHBhcmFtW2luXSAgIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gICBhSW5kZXggICAgQW4gaW5kZXggaW50byB0aGUgTUFDIEJsYWNrbGlzdCB0YWJsZS4KKyAqIEBwYXJhbVtvdXRdICBhRW50cnkgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBpcyBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIE1BQyBCbGFja2xpc3QgZW50cnkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUluZGV4IGlzIG91dCBvZiBib3VuZHMgb3IgQHAgYUVudHJ5IGlzIE5VTEwuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdExpbmtHZXRCbGFja2xpc3RFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUluZGV4LCBvdE1hY0JsYWNrbGlzdEVudHJ5ICphRW50cnkpOworCisvKioKKyAqICBSZW1vdmUgYWxsIGVudHJpZXMgZnJvbSB0aGUgTUFDIEJsYWNrbGlzdC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHNhIG90TGlua0FkZEJsYWNrbGlzdAorICogQHNhIG90TGlua1JlbW92ZUJsYWNrbGlzdAorICogQHNhIG90TGlua0dldEJsYWNrbGlzdEVudHJ5CisgKiBAc2Egb3RMaW5rSXNCbGFja2xpc3RFbmFibGVkCisgKiBAc2Egb3RMaW5rU2V0QmxhY2tsaXN0RW5hYmxlZAorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdExpbmtDbGVhckJsYWNrbGlzdChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEVuYWJsZSBNQUMgQmxhY2tsaXN0IGZpbHRlcmluZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUVuYWJsZWQgICBUUlVFIHRvIGVuYWJsZSB0aGUgYmxhY2tsaXN0LCBGQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNhIG90TGlua0FkZEJsYWNrbGlzdAorICogQHNhIG90TGlua1JlbW92ZUJsYWNrbGlzdAorICogQHNhIG90TGlua0NsZWFyQmxhY2tsaXN0CisgKiBAc2Egb3RMaW5rR2V0QmxhY2tsaXN0RW50cnkKKyAqIEBzYSBvdExpbmtJc0JsYWNrbGlzdEVuYWJsZWQKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rU2V0QmxhY2tsaXN0RW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBNQUMgQmxhY2tsaXN0IGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRSVUUgaWYgdGhlIE1BQyBCbGFja2xpc3QgaXMgZW5hYmxlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzYSBvdExpbmtBZGRCbGFja2xpc3QKKyAqIEBzYSBvdExpbmtSZW1vdmVCbGFja2xpc3QKKyAqIEBzYSBvdExpbmtDbGVhckJsYWNrbGlzdAorICogQHNhIG90TGlua0dldEJsYWNrbGlzdEVudHJ5CisgKiBAc2Egb3RMaW5rU2V0QmxhY2tsaXN0RW5hYmxlZAorICoKKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3RMaW5rSXNCbGFja2xpc3RFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBhc3NpZ25lZCBsaW5rIHF1YWxpdHkgd2hpY2ggaXMgb24gdGhlIGxpbmsgdG8gYSBnaXZlbiBleHRlbmRlZCBhZGRyZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyICBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSBBIHBvaW50ZXIgdG8gdGhlIGFzc2lnbmVkIGxpbmsgcXVhbGl0eS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIGxpbmsgcXVhbGl0eSB0byBhTGlua1F1YWxpdHkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIE5vIGF0dGFjaGVkIGNoaWxkIG1hdGNoZXMgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIGFkZHJlc3MuCisgKgorICogQHNhIG90TGlua1NldEFzc2lnbkxpbmtRdWFsaXR5CisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90TGlua0dldEFzc2lnbkxpbmtRdWFsaXR5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphTGlua1F1YWxpdHkpOworCisvKioKKyAqIFNldCB0aGUgbGluayBxdWFsaXR5IHdoaWNoIGlzIG9uIHRoZSBsaW5rIHRvIGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkciAgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBsaW5rIHF1YWxpdHkgdG8gYmUgc2V0IG9uIHRoZSBsaW5rLgorICoKKyAqIEBzYSBvdExpbmtHZXRBc3NpZ25MaW5rUXVhbGl0eQorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdExpbmtTZXRBc3NpZ25MaW5rUXVhbGl0eShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCB1aW50OF90IGFMaW5rUXVhbGl0eSk7CisKKy8qKgorICogR2V0IHRoZSBNQUMgbGF5ZXIgY291bnRlcnMuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgTUFDIGxheWVyIGNvdW50ZXJzLgorICovCitPVEFQSSBjb25zdCBvdE1hY0NvdW50ZXJzICpPVENBTEwgb3RMaW5rR2V0Q291bnRlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gYW4gSUVFRSA4MDIuMTUuNCBmcmFtZSBpcyByZWNlaXZlZC4KKyAqCisgKiBAbm90ZSBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlciBGQ1MgcHJvY2Vzc2luZyBhbmQgQHAgYUZyYW1lIG1heSBub3QgY29udGFpbiB0aGUgYWN0dWFsIEZDUyB0aGF0IHdhcyByZWNlaXZlZC4KKyAqCisgKiBAbm90ZSBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBiZWZvcmUgSUVFRSA4MDIuMTUuNCBzZWN1cml0eSBwcm9jZXNzaW5nIGFuZCBtU2VjdXJpdHlWYWxpZCBpbiBAcCBhRnJhbWUgd2lsbAorICogYWx3YXlzIGJlIGZhbHNlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICBBIHBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIElFRUUgODAyLjE1LjQgZnJhbWUuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdExpbmtQY2FwQ2FsbGJhY2spKGNvbnN0IG90UmFkaW9GcmFtZSAqYUZyYW1lLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBjYWxsYmFjayB0byBwcm92aWRlIHJlY2VpdmVkIHJhdyBJRUVFIDgwMi4xNS40IGZyYW1lcy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQY2FwQ2FsbGJhY2sgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gcmVjZWl2aW5nIGFuIElFRUUgODAyLjE1LjQgbGluayBmcmFtZSBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCB0byBkaXNhYmxlIHRoZSBjYWxsYmFjay4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFja0NvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqLwordm9pZCBvdExpbmtTZXRQY2FwQ2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExpbmtQY2FwQ2FsbGJhY2sgYVBjYXBDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgcHJvbWlzY3VvdXMgbW9kZSBpcyBlbmFibGVkIGF0IHRoZSBsaW5rIGxheWVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIHRydWUgICBQcm9taXNjdW91cyBtb2RlIGlzIGVuYWJsZWQuCisgKiBAcmV0dmFsIGZhbHNlICBQcm9taXNjdW91cyBtb2RlIGlzIG5vdCBlbmFibGVkLgorICoKKyAqLworYm9vbCBvdExpbmtJc1Byb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBsaW5rIGxheWVyIHByb21pc2N1b3VzIG1vZGUuCisgKgorICogQG5vdGUgUHJvbWlzY3VvdXMgbW9kZSBtYXkgb25seSBiZSBlbmFibGVkIHdoZW4gdGhlIFRocmVhZCBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQcm9taXNjdW91cyAgdHJ1ZSB0byBlbmFibGUgcHJvbWlzY3VvdXMgbW9kZSwgb3IgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVuYWJsZWQgcHJvbWlzY3VvdXMgbW9kZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgQ291bGQgbm90IGVuYWJsZSBwcm9taXNjdW91cyBtb2RlIGJlY2F1c2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFRocmVhZCBpbnRlcmZhY2UgaXMgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rU2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFQcm9taXNjdW91cyk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0xJTktfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9saW5rX3Jhdy5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2xpbmtfcmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzMWViZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9saW5rX3Jhdy5oCkBAIC0wLDAgKzEsMzY1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHJhdyBPcGVuVGhyZWFkIElFRUUgODAyLjE1LjQgTGluayBMYXllciBBUEkuCisgKi8KKworI2lmbmRlZiBMSU5LX1JBV19IXworI2RlZmluZSBMSU5LX1JBV19IXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1saW5rLXJhdworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdCBjb250cm9sIHRoZSByYXcgbGluay1sYXllciBjb25maWd1cmF0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSByYXcgbGluay1sYXllci4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dIGFFbmFibGVkICAgICAgVFJVRSB0byBlbmFibGUgcmF3IGxpbmstbGF5ZXIsIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICBJZiB0aGUgZW5hYmxlIHN0YXRlIHdhcyBzdWNjZXNzZnVsbHkgc2V0LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgSWYgdGhlIE9wZW5UaHJlYWQgSXA2IGludGVyZmFjZSBpcyBhbHJlYWR5IGVuYWJsZWQuCisgKgorICovCitvdEVycm9yIG90TGlua1Jhd1NldEVuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSByYXcgbGluay1sYXllciBpcyBlbmFibGVkLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIHRydWUgICAgIFRoZSByYXcgbGluay1sYXllciBpcyBlbmFibGVkLgorICogQHJldHZhbCBmYWxzZSAgICBUaGUgcmF3IGxpbmstbGF5ZXIgaXMgZGlzYWJsZWQuCisgKgorICovCitib29sIG90TGlua1Jhd0lzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0IHRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRC4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSBhUGFuSWQgICAgICAgICBUaGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIElmIHN1Y2Nlc3NmdWwuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgICAgSWYgdGhlIHJhdyBsaW5rLWxheWVyIGlzbid0IGVuYWJsZWQuCisgKgorICovCitvdEVycm9yIG90TGlua1Jhd1NldFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBhbklkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRlbmRlZEFkZHJlc3MgIEEgcG9pbnRlciB0byB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICBJZiBzdWNjZXNzZnVsLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgIElmIHRoZSByYXcgbGluay1sYXllciBpc24ndCBlbmFibGVkLgorICoKKyAqLworb3RFcnJvciBvdExpbmtSYXdTZXRFeHRlbmRlZEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdEV4dEFkZHJlc3MgKmFFeHRlbmRlZEFkZHJlc3MpOworCisvKioKKyAqIFNldCB0aGUgU2hvcnQgQWRkcmVzcyBmb3IgYWRkcmVzcyBmaWx0ZXJpbmcuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gYVNob3J0QWRkcmVzcyAgVGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U2V0U2hvcnRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVNob3J0QWRkcmVzcyk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzdGF0dXMgb2YgcHJvbWlzY3VvdXMgbW9kZS4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCB0cnVlICAgICBQcm9taXNjdW91cyBtb2RlIGlzIGVuYWJsZWQuCisgKiBAcmV0dmFsIGZhbHNlICAgIFByb21pc2N1b3VzIG1vZGUgaXMgZGlzYWJsZWQuCisgKgorICovCitib29sIG90TGlua1Jhd0dldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIHByb21pc2N1b3VzIG1vZGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUVuYWJsZSAgICAgIEEgdmFsdWUgdG8gZW5hYmxlIG9yIGRpc2FibGUgcHJvbWlzY3VvdXMgbW9kZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpOworCisvKioKKyAqIFRyYW5zaXRpb24gdGhlIHJhZGlvIGZyb20gUmVjZWl2ZSB0byBTbGVlcC4KKyAqIFR1cm4gb2ZmIHRoZSByYWRpby4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSB0cmFuc2l0aW9uZWQgdG8gU2xlZXAuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0JVU1kgICAgICAgICAgICAgVGhlIHJhZGlvIHdhcyB0cmFuc21pdHRpbmcKKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBUaGUgcmFkaW8gd2FzIGRpc2FibGVkCisgKgorICovCitvdEVycm9yIG90TGlua1Jhd1NsZWVwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIG9uIHJlY2VpcHQgb2YgYSBJRUVFIDgwMi4xNS40IGZyYW1lLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIGZyYW1lIG9yIE5VTEwgaWYgdGhlIHJlY2VpdmUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLgorICogQHBhcmFtW2luXSAgYUVycm9yICAgICAgIE9UX0VSUk9SX05PTkUgd2hlbiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBmcmFtZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBPVF9FUlJPUl9BQk9SVCB3aGVuIHJlY2VwdGlvbiB3YXMgYWJvcnRlZCBhbmQgYSBmcmFtZSB3YXMgbm90IHJlY2VpdmVkLgorICoKKyAqLwordHlwZWRlZiB2b2lkIChPVENBTEwgKm90TGlua1Jhd1JlY2VpdmVEb25lKShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisKKy8qKgorICogVHJhbnNpdGlvbmluZyB0aGUgcmFkaW8gZnJvbSBTbGVlcCB0byBSZWNlaXZlLgorICogVHVybiBvbiB0aGUgcmFkaW8uCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUNoYW5uZWwgICAgIFRoZSBjaGFubmVsIHRvIHVzZSBmb3IgcmVjZWl2aW5nLgorICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBvbiByZWNlaXB0IG9mIGEgSUVFRSA4MDIuMTUuNCBmcmFtZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHRyYW5zaXRpb25lZCB0byBSZWNlaXZlLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgIFRoZSByYWRpbyB3YXMgZGlzYWJsZWQgb3IgdHJhbnNtaXR0aW5nLgorICoKKyAqLworb3RFcnJvciBvdExpbmtSYXdSZWNlaXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQ2hhbm5lbCwgb3RMaW5rUmF3UmVjZWl2ZURvbmUgYUNhbGxiYWNrKTsKKworLyoqCisgKiBUaGUgcmFkaW8gdHJhbnNpdGlvbnMgZnJvbSBUcmFuc21pdCB0byBSZWNlaXZlLgorICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHRyYW5zbWl0IGJ1ZmZlci4KKyAqCisgKiBUaGUgY2FsbGVyIGZvcm1zIHRoZSBJRUVFIDgwMi4xNS40IGZyYW1lIGluIHRoaXMgYnVmZmVyIHRoZW4gY2FsbHMgb3RMaW5rUmF3VHJhbnNtaXQoKQorICogdG8gcmVxdWVzdCB0cmFuc21pc3Npb24uCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdHJhbnNtaXQgYnVmZmVyIG9yIE5VTEwgaWYgdGhlIHJhdyBsaW5rLWxheWVyIGlzbid0IGVuYWJsZWQuCisgKgorICovCitvdFJhZGlvRnJhbWUgKm90TGlua1Jhd0dldFRyYW5zbWl0QnVmZmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIG9uIHJlY2VpcHQgb2YgYSBJRUVFIDgwMi4xNS40IGZyYW1lLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZnJhbWUgdGhhdCB3YXMgdHJhbnNtaXR0ZWQuCisgKiBAcGFyYW1baW5dICBhRnJhbWVQZW5kaW5nICAgIFRSVUUgaWYgYW4gQUNLIGZyYW1lIHdhcyByZWNlaXZlZCBhbmQgdGhlIEZyYW1lIFBlbmRpbmcgYml0IHdhcyBzZXQuCisgKiBAcGFyYW1baW5dICBhRXJyb3IgICAgICAgICAgIE9UX0VSUk9SX05PTkUgd2hlbiB0aGUgZnJhbWUgd2FzIHRyYW5zbWl0dGVkLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVF9FUlJPUl9OT19BQ0sgd2hlbiB0aGUgZnJhbWUgd2FzIHRyYW5zbWl0dGVkIGJ1dCBubyBBQ0sgd2FzIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgd2hlbiB0aGUgdHJhbnNtaXNzaW9uIGNvdWxkIG5vdCB0YWtlIHBsYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWUgdG8gYWN0aXZpdHkgb24gdGhlIGNoYW5uZWwuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UX0VSUk9SX0FCT1JUIHdoZW4gdHJhbnNtaXNzaW9uIHdhcyBhYm9ydGVkIGZvciBvdGhlciByZWFzb25zLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3RMaW5rUmF3VHJhbnNtaXREb25lKShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBib29sIGFGcmFtZVBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYUVycm9yKTsKKworLyoqCisgKiBUaGlzIG1ldGhvZCBiZWdpbnMgdGhlIHRyYW5zbWl0IHNlcXVlbmNlIG9uIHRoZSByYWRpby4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgZm9ybSB0aGUgSUVFRSA4MDIuMTUuNCBmcmFtZSBpbiB0aGUgYnVmZmVyIHByb3ZpZGVkIGJ5IG90TGlua1Jhd0dldFRyYW5zbWl0QnVmZmVyKCkgYmVmb3JlCisgKiByZXF1ZXN0aW5nIHRyYW5zbWlzc2lvbi4gIFRoZSBjaGFubmVsIGFuZCB0cmFuc21pdCBwb3dlciBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgb3RSYWRpb0ZyYW1lIHN0cnVjdHVyZS4KKyAqCisgKiBUaGUgdHJhbnNtaXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6CisgKiAxLiBUcmFuc2l0aW9uaW5nIHRoZSByYWRpbyB0byBUcmFuc21pdCBmcm9tIFJlY2VpdmUuCisgKiAyLiBUcmFuc21pdHMgdGhlIHBzZHUgb24gdGhlIGdpdmVuIGNoYW5uZWwgYW5kIGF0IHRoZSBnaXZlbiB0cmFuc21pdCBwb3dlci4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBmcmFtZSB0aGF0IHdhcyB0cmFuc21pdHRlZC4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQgb24gY29tcGxldGlvbiBvZiB0aGUgdHJhbnNtaXNzaW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgdHJhbnNpdGlvbmVkIHRvIFRyYW5zbWl0LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFIFRoZSByYWRpbyB3YXMgbm90IGluIHRoZSBSZWNlaXZlIHN0YXRlLgorICoKKyAqLworb3RFcnJvciBvdExpbmtSYXdUcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdExpbmtSYXdUcmFuc21pdERvbmUgYUNhbGxiYWNrKTsKKworLyoqCisgKiBHZXQgdGhlIG1vc3QgcmVjZW50IFJTU0kgbWVhc3VyZW1lbnQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBSU1NJIGluIGRCbSB3aGVuIGl0IGlzIHZhbGlkLiAxMjcgd2hlbiBSU1NJIGlzIGludmFsaWQuCisgKgorICovCitpbnQ4X3Qgb3RMaW5rUmF3R2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgcmFkaW8gY2FwYWJpbGl0aWVzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgcmFkaW8gY2FwYWJpbGl0eSBiaXQgdmVjdG9yLiBUaGUgc3RhY2sgZW5hYmxlcyBvciBkaXNhYmxlcyBzb21lIGZ1bmN0aW9ucyBiYXNlZCBvbiB0aGlzIHZhbHVlLgorICoKKyAqLworb3RSYWRpb0NhcHMgb3RMaW5rUmF3R2V0Q2FwcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBvbiByZWNlaXB0IG9mIGEgSUVFRSA4MDIuMTUuNCBmcmFtZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFbmVyZ3lTY2FuTWF4UnNzaSAgIFRoZSBtYXhpbXVtIFJTU0kgZW5jb3VudGVyZWQgb24gdGhlIHNjYW5uZWQgY2hhbm5lbC4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKm90TGlua1Jhd0VuZXJneVNjYW5Eb25lKShvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhRW5lcmd5U2Nhbk1heFJzc2kpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIGJlZ2lucyB0aGUgZW5lcmd5IHNjYW4gc2VxdWVuY2Ugb24gdGhlIHJhZGlvLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhU2NhbkNoYW5uZWwgICAgIFRoZSBjaGFubmVsIHRvIHBlcmZvcm0gdGhlIGVuZXJneSBzY2FuIG9uLgorICogQHBhcmFtW2luXSAgYVNjYW5EdXJhdGlvbiAgICBUaGUgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgZm9yIHRoZSBjaGFubmVsIHRvIGJlIHNjYW5uZWQuCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBvbiBjb21wbGV0aW9uIG9mIGEgc2Nhbm5lZCBjaGFubmVsLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCBzY2FubmluZyB0aGUgY2hhbm5lbC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEICBUaGUgcmFkaW8gZG9lc24ndCBzdXBwb3J0IGVuZXJneSBzY2FubmluZy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3RW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90TGlua1Jhd0VuZXJneVNjYW5Eb25lIGFDYWxsYmFjayk7CisKKy8qKgorICogRW5hYmxlL0Rpc2FibGUgc291cmNlIG1hdGNoIGZvciBBdXRvUGVuZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRW5hYmxlICAgICAgRW5hYmxlL2Rpc2FibGUgc291cmNlIG1hdGNoIGZvciBhdXRvbWF0aWNhbCBwZW5kaW5nLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICBJZiBzdWNjZXNzZnVsLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgIElmIHRoZSByYXcgbGluay1sYXllciBpc24ndCBlbmFibGVkLgorICoKKyAqLworb3RFcnJvciBvdExpbmtSYXdTcmNNYXRjaEVuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSk7CisKKy8qKgorICogQWRkaW5nIHNob3J0IGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVNob3J0QWRkcmVzcyAgICBUaGUgc2hvcnQgYWRkcmVzcyB0byBiZSBhZGRlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHNob3J0IGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICAgICBObyBhdmFpbGFibGUgZW50cnkgaW4gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hBZGRTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcyk7CisKKy8qKgorICogQWRkaW5nIGV4dGVuZGVkIGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUV4dEFkZHJlc3MgICAgICBUaGUgZXh0ZW5kZWQgYWRkcmVzcyB0byBiZSBhZGRlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIGV4dGVuZGVkIGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICAgICBObyBhdmFpbGFibGUgZW50cnkgaW4gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hBZGRFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKTsKKworLyoqCisgKiBSZW1vdmluZyBzaG9ydCBhZGRyZXNzIHRvIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFTaG9ydEFkZHJlc3MgICAgVGhlIHNob3J0IGFkZHJlc3MgdG8gYmUgcmVtb3ZlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgc2hvcnQgYWRkcmVzcyBmcm9tIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0FERFJFU1MgICAgICAgVGhlIHNob3J0IGFkZHJlc3MgaXMgbm90IGluIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hDbGVhclNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKTsKKworLyoqCisgKiBSZW1vdmluZyBleHRlbmRlZCBhZGRyZXNzIHRvIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUgb2YgdGhlIHJhZGlvLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgICAgIFRoZSBleHRlbmRlZCBhZGRyZXNzIHRvIGJlIHJlbW92ZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBleHRlbmRlZCBhZGRyZXNzIGZyb20gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQUREUkVTUyAgICAgICBUaGUgZXh0ZW5kZWQgYWRkcmVzcyBpcyBub3QgaW4gc291cmNlIG1hdGNoIHRhYmxlLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgIElmIHRoZSByYXcgbGluay1sYXllciBpc24ndCBlbmFibGVkLgorICoKKyAqLworb3RFcnJvciBvdExpbmtSYXdTcmNNYXRjaENsZWFyRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcyk7CisKKy8qKgorICogUmVtb3ZpbmcgYWxsIHRoZSBzaG9ydCBhZGRyZXNzZXMgZnJvbSB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hDbGVhclNob3J0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFJlbW92aW5nIGFsbCB0aGUgZXh0ZW5kZWQgYWRkcmVzc2VzIGZyb20gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIElmIHN1Y2Nlc3NmdWwuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgICAgSWYgdGhlIHJhdyBsaW5rLWxheWVyIGlzbid0IGVuYWJsZWQuCisgKgorICovCitvdEVycm9yIG90TGlua1Jhd1NyY01hdGNoQ2xlYXJFeHRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBMSU5LX1JBV19IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL21lc3NhZ2UuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9tZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2NmI5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9tZXNzYWdlLmgKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0b3AtbGV2ZWwgT3BlblRocmVhZCBBUElzIHJlbGF0ZWQgdG8gbWVzc2FnZSBidWZmZXIgYW5kIHF1ZXVlcy4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfTUVTU0FHRV9IXworI2RlZmluZSBPUEVOVEhSRUFEX01FU1NBR0VfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1tZXNzYWdlCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUgT3BlblRocmVhZCBtZXNzYWdlIGJ1ZmZlcnMKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIEZyZWUgYW4gYWxsb2NhdGVkIG1lc3NhZ2UgYnVmZmVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIGJ1ZmZlci4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBmcmVlZCB0aGUgbWVzc2FnZSBidWZmZXIuCisgKgorICogQHNhIG90TWVzc2FnZUFwcGVuZAorICogQHNhIG90TWVzc2FnZUdldExlbmd0aAorICogQHNhIG90TWVzc2FnZVNldExlbmd0aAorICogQHNhIG90TWVzc2FnZUdldE9mZnNldAorICogQHNhIG90TWVzc2FnZVNldE9mZnNldAorICogQHNhIG90TWVzc2FnZVJlYWQKKyAqIEBzYSBvdE1lc3NhZ2VXcml0ZQorICovCitvdEVycm9yIG90TWVzc2FnZUZyZWUob3RNZXNzYWdlICphTWVzc2FnZSk7CisKKy8qKgorICogR2V0IHRoZSBtZXNzYWdlIGxlbmd0aCBpbiBieXRlcy4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKgorICogQHJldHVybnMgVGhlIG1lc3NhZ2UgbGVuZ3RoIGluIGJ5dGVzLgorICoKKyAqIEBzYSBvdE1lc3NhZ2VGcmVlCisgKiBAc2Egb3RNZXNzYWdlQXBwZW5kCisgKiBAc2Egb3RNZXNzYWdlU2V0TGVuZ3RoCisgKiBAc2Egb3RNZXNzYWdlR2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlU2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlUmVhZAorICogQHNhIG90TWVzc2FnZVdyaXRlCisgKiBAc2Egb3RNZXNzYWdlU2V0TGVuZ3RoCisgKi8KK3VpbnQxNl90IG90TWVzc2FnZUdldExlbmd0aChvdE1lc3NhZ2UgKmFNZXNzYWdlKTsKKworLyoqCisgKiBTZXQgdGhlIG1lc3NhZ2UgbGVuZ3RoIGluIGJ5dGVzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICBBIGxlbmd0aCBpbiBieXRlcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIG1lc3NhZ2UgbGVuZ3RoLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBObyBhdmFpbGFibGUgYnVmZmVycyB0byBncm93IHRoZSBtZXNzYWdlLgorICoKKyAqIEBzYSBvdE1lc3NhZ2VGcmVlCisgKiBAc2Egb3RNZXNzYWdlQXBwZW5kCisgKiBAc2Egb3RNZXNzYWdlR2V0TGVuZ3RoCisgKiBAc2Egb3RNZXNzYWdlR2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlU2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlUmVhZAorICogQHNhIG90TWVzc2FnZVdyaXRlCisgKi8KK290RXJyb3Igb3RNZXNzYWdlU2V0TGVuZ3RoKG90TWVzc2FnZSAqYU1lc3NhZ2UsIHVpbnQxNl90IGFMZW5ndGgpOworCisvKioKKyAqIEdldCB0aGUgbWVzc2FnZSBvZmZzZXQgaW4gYnl0ZXMuCisgKgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcG9pbnRlciB0byBhIG1lc3NhZ2UgYnVmZmVyLgorICoKKyAqIEByZXR1cm5zIFRoZSBtZXNzYWdlIG9mZnNldCB2YWx1ZS4KKyAqCisgKiBAc2Egb3RNZXNzYWdlRnJlZQorICogQHNhIG90TWVzc2FnZUFwcGVuZAorICogQHNhIG90TWVzc2FnZUdldExlbmd0aAorICogQHNhIG90TWVzc2FnZVNldExlbmd0aAorICogQHNhIG90TWVzc2FnZVNldE9mZnNldAorICogQHNhIG90TWVzc2FnZVJlYWQKKyAqIEBzYSBvdE1lc3NhZ2VXcml0ZQorICovCit1aW50MTZfdCBvdE1lc3NhZ2VHZXRPZmZzZXQob3RNZXNzYWdlICphTWVzc2FnZSk7CisKKy8qKgorICogU2V0IHRoZSBtZXNzYWdlIG9mZnNldCBpbiBieXRlcy4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhT2Zmc2V0ICAgQW4gb2Zmc2V0IGluIGJ5dGVzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBtZXNzYWdlIG9mZnNldC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb2Zmc2V0IGlzIGJleW9uZCB0aGUgbWVzc2FnZSBsZW5ndGguCisgKgorICogQHNhIG90TWVzc2FnZUZyZWUKKyAqIEBzYSBvdE1lc3NhZ2VBcHBlbmQKKyAqIEBzYSBvdE1lc3NhZ2VHZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VTZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VHZXRPZmZzZXQKKyAqIEBzYSBvdE1lc3NhZ2VSZWFkCisgKiBAc2Egb3RNZXNzYWdlV3JpdGUKKyAqLworb3RFcnJvciBvdE1lc3NhZ2VTZXRPZmZzZXQob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgbGluayBzZWN1cml0eSBpcyBlbmFibGVkIGZvciB0aGUgbWVzc2FnZS4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKgorICogQHJldHZhbCBUUlVFICAgSWYgbGluayBzZWN1cml0eSBpcyBlbmFibGVkLgorICogQHJldHZhbCBGQUxTRSAgSWYgbGluayBzZWN1cml0eSBpcyBub3QgZW5hYmxlZC4KKyAqCisgKi8KK2Jvb2wgb3RNZXNzYWdlSXNMaW5rU2VjdXJpdHlFbmFibGVkKG90TWVzc2FnZSAqYU1lc3NhZ2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cy9mb3JjZXMgdGhlIG1lc3NhZ2UgdG8gYmUgZm9yd2FyZGVkIHVzaW5nIGRpcmVjdCB0cmFuc21pc3Npb24uCisgKiBEZWZhdWx0IHNldHRpbmcgZm9yIGEgbmV3IG1lc3NhZ2UgaXMgYGZhbHNlYC4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhRW5hYmxlZCAgSWYgYHRydWVgIG1lc3NhZ2Ugd2lsbCBiZSBmb3JjZWQgdG8gdXNlIGRpcmVjdCB0cmFuc21pc3Npb24uIElmIGBmYWxzZWAgbWVzc2FnZSB3aWxsCisgKiAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93IHRoZSBub3JtYWwgcHJvY2VkdXJlLgorICoKKyAqLwordm9pZCBvdE1lc3NhZ2VTZXREaXJlY3RUcmFuc21pc3Npb24ob3RNZXNzYWdlICphTWVzc2FnZSwgYm9vbCBhRW5hYmxlZCk7CisKKy8qKgorICogQXBwZW5kIGJ5dGVzIHRvIGEgbWVzc2FnZS4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGFwcGVuZC4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICBOdW1iZXIgb2YgYnl0ZXMgdG8gYXBwZW5kLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRvIHRoZSBtZXNzYWdlCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIE5vIGF2YWlsYWJsZSBidWZmZXJzIHRvIGdyb3cgdGhlIG1lc3NhZ2UuCisgKgorICogQHNhIG90TWVzc2FnZUZyZWUKKyAqIEBzYSBvdE1lc3NhZ2VHZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VTZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VHZXRPZmZzZXQKKyAqIEBzYSBvdE1lc3NhZ2VTZXRPZmZzZXQKKyAqIEBzYSBvdE1lc3NhZ2VSZWFkCisgKiBAc2Egb3RNZXNzYWdlV3JpdGUKKyAqLworb3RFcnJvciBvdE1lc3NhZ2VBcHBlbmQob3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgdm9pZCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCk7CisKKy8qKgorICogUmVhZCBieXRlcyBmcm9tIGEgbWVzc2FnZS4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhT2Zmc2V0ICAgQW4gb2Zmc2V0IGluIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0aGF0IG1lc3NhZ2UgYnl0ZXMgYXJlIHJlYWQgdG8uCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgKgorICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyByZWFkLgorICoKKyAqIEBzYSBvdE1lc3NhZ2VGcmVlCisgKiBAc2Egb3RNZXNzYWdlQXBwZW5kCisgKiBAc2Egb3RNZXNzYWdlR2V0TGVuZ3RoCisgKiBAc2Egb3RNZXNzYWdlU2V0TGVuZ3RoCisgKiBAc2Egb3RNZXNzYWdlR2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlU2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlV3JpdGUKKyAqLworaW50IG90TWVzc2FnZVJlYWQob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCwgdm9pZCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCk7CisKKy8qKgorICogV3JpdGUgYnl0ZXMgdG8gYSBtZXNzYWdlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFPZmZzZXQgICBBbiBvZmZzZXQgaW4gYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICAgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRoYXQgbWVzc2FnZSBieXRlcyBhcmUgd3JpdHRlbiBmcm9tLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgIE51bWJlciBvZiBieXRlcyB0byB3cml0ZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCisgKgorICogQHNhIG90TWVzc2FnZUZyZWUKKyAqIEBzYSBvdE1lc3NhZ2VBcHBlbmQKKyAqIEBzYSBvdE1lc3NhZ2VHZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VTZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VHZXRPZmZzZXQKKyAqIEBzYSBvdE1lc3NhZ2VTZXRPZmZzZXQKKyAqIEBzYSBvdE1lc3NhZ2VSZWFkCisgKi8KK2ludCBvdE1lc3NhZ2VXcml0ZShvdE1lc3NhZ2UgKmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCBjb25zdCB2b2lkICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoKTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIE9wZW5UaHJlYWQgbWVzc2FnZSBxdWV1ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB2b2lkICptRGF0YTsgICAgICAgICAgICAvLy88IE9wYXF1ZSBkYXRhIHVzZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uLgorfSBvdE1lc3NhZ2VRdWV1ZTsKKworLyoqCisgKgorICogSW5pdGlhbGl6ZSB0aGUgbWVzc2FnZSBxdWV1ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgY2FsbGVkIG9uY2UgYW5kIG9ubHkgb25jZSBmb3IgYSBgb3RNZXNzYWdlUXVldWVgIGluc3RhbmNlIGJlZm9yZSBhbnkgb3RoZXIgYG90TWVzc2FnZVF1ZXVlYAorICogZnVuY3Rpb25zLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIG90aGVyIHF1ZXVlIEFQSXMgYXJlIHVzZWQgd2l0aCBhbiBgb3RNZXNzYWdlUXVldWVgIGJlZm9yZSBpdCBiZWluZworICogaW5pdGlhbGl6ZWQgb3IgaWYgaXQgaXMgaW5pdGlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UuCisgKgorICogQHBhcmFtW2luXSAgYVF1ZXVlICAgICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIHF1ZXVlLgorICoKKyAqLwordm9pZCBvdE1lc3NhZ2VRdWV1ZUluaXQob3RNZXNzYWdlUXVldWUgKmFRdWV1ZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBhZGRzIGEgbWVzc2FnZSB0byB0aGUgZW5kIG9mIHRoZSBnaXZlbiBtZXNzYWdlIHF1ZXVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFRdWV1ZSAgICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgcXVldWUuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gYWRkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBtZXNzYWdlIHRvIHRoZSBxdWV1ZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIG1lc3NhZ2UgaXMgYWxyZWFkeSBlbnF1ZXVlZCBpbiBhIHF1ZXVlLgorICoKKyAqLworb3RFcnJvciBvdE1lc3NhZ2VRdWV1ZUVucXVldWUob3RNZXNzYWdlUXVldWUgKmFRdWV1ZSwgb3RNZXNzYWdlICphTWVzc2FnZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBtZXNzYWdlIHF1ZXVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFRdWV1ZSAgICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgcXVldWUuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gcmVtb3ZlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBxdWV1ZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGUgbWVzc2FnZSBpcyBub3QgZW5xdWV1ZWQgaW4gdGhpcyBxdWV1ZS4KKyAqCisgKi8KK290RXJyb3Igb3RNZXNzYWdlUXVldWVEZXF1ZXVlKG90TWVzc2FnZVF1ZXVlICphUXVldWUsIG90TWVzc2FnZSAqYU1lc3NhZ2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFRdWV1ZSAgICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIHF1ZXVlLgorICoKKyAqIEByZXR1cm5zICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYXQgdGhlIGhlYWQgb2YgcXVldWUgb3IgTlVMTCBpZiBxdWV1ZSBpcyBlbXB0eS4KKyAqCisgKi8KK290TWVzc2FnZSAqb3RNZXNzYWdlUXVldWVHZXRIZWFkKG90TWVzc2FnZVF1ZXVlICphUXVldWUpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgbWVzc2FnZSBpbiB0aGUgcXVldWUgYnkgaXRlcmF0aW5nIGZvcndhcmQgKGZyb20gaGVhZCB0byB0YWlsKS4KKyAqCisgKiBAcGFyYW1baW5dICBhUXVldWUgICAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBxdWV1ZS4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gY3VycmVudCBtZXNzYWdlIGJ1ZmZlci4KKyAqCisgKiBAcmV0dXJucyAgQSBwb2ludGVyIHRvIHRoZSBuZXh0IG1lc3NhZ2UgaW4gdGhlIHF1ZXVlIGFmdGVyIGBhTWVzc2FnZWAgb3IgTlVMTCBpZiBgYU1lc3NhZ2UgaXMgdGhlIHRhaWwgb2YgcXVldWUuCisgKiAgICAgICAgICAgTlVMTCBpcyByZXR1cm5lZCBpZiBgYU1lc3NhZ2VgIGlzIG5vdCBpbiB0aGUgcXVldWUgYGFRdWV1ZWAuCisgKgorICovCitvdE1lc3NhZ2UgKm90TWVzc2FnZVF1ZXVlR2V0TmV4dChvdE1lc3NhZ2VRdWV1ZSAqYVF1ZXVlLCBjb25zdCBvdE1lc3NhZ2UgKmFNZXNzYWdlKTsKKworLyoqCisgKiBHZXQgdGhlIE1lc3NhZ2UgQnVmZmVyIGluZm9ybWF0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIHRoZSBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFCdWZmZXJJbmZvICBBIHBvaW50ZXIgd2hlcmUgdGhlIG1lc3NhZ2UgYnVmZmVyIGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4uCisgKgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdE1lc3NhZ2VHZXRCdWZmZXJJbmZvKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RCdWZmZXJJbmZvICphQnVmZmVySW5mbyk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX01FU1NBR0VfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9uY3AuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9uY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2QxZDRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL25jcC5oCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdG9wLWxldmVsIGZ1bmN0aW9ucyBmb3IgdGhlIE9wZW5UaHJlYWQgTkNQIG1vZHVsZS4KKyAqLworCisjaWZuZGVmIE5DUF9IXworI2RlZmluZSBOQ1BfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1uY3AKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIHRoYXQgY29udHJvbCB0aGUgVGhyZWFkIHN0YWNrJ3MgZXhlY3V0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgTkNQLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBvdE5jcEluaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAYnJpZWYgU2VuZCBkYXRhIHRvIHRoZSBob3N0IHZpYSBhIHNwZWNpZmljIHN0cmVhbS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHNlbmQgdGhlIGdpdmVuIGRhdGEgdG8gdGhlIGhvc3QKKyAqIHVzaW5nIHRoZSBnaXZlbiBhU3RyZWFtSWQuIFRoaXMgaXMgdXNlZnVsIGZvciByZXBvcnRpbmcKKyAqIGVycm9yIG1lc3NhZ2VzLCBpbXBsZW1lbnRpbmcgZGVidWcvZGlhZ25vc3RpYyBjb25zb2xlcywKKyAqIGFuZCBwb3RlbnRpYWxseSBvdGhlciB0eXBlcyBvZiBkYXRhc3RyZWFtcy4KKyAqCisgKiBUaGUgd3JpdGUgZWl0aGVyIGlzIGFjY2VwdGVkIGluIGl0cyBlbnRpcmV0eSBvciByZWplY3RlZC4KKyAqIFBhcnRpYWwgd3JpdGVzIGFyZSBub3QgYXR0ZW1wdGVkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFTdHJlYW1JZCAgQSBudW1lcmljIGlkZW50aWZpZXIgZm9yIHRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uCisgKiAgICAgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAnMCcsIHdpbGwgZGVmYXVsdCB0byB0aGUgZGVidWcgc3RyZWFtLgorICogQHBhcmFtW2luXSAgYURhdGFQdHIgICBBIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZCBvbiB0aGUgc3RyZWFtLgorICogICAgICAgICAgICAgICAgICAgICAgICBJZiBhRGF0YUxlbiBpcyBub24temVybywgdGhpcyBwYXJhbSBNVVNUIE5PVCBiZSBOVUxMLgorICogQHBhcmFtW2luXSAgYURhdGFMZW4gICBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgZnJvbSBhRGF0YVB0ciB0byBzZW5kLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgIFRoZSBkYXRhIHdhcyBxdWV1ZWQgZm9yIGRlbGl2ZXJ5IHRvIHRoZSBob3N0LgorICogQHJldHZhbCBPVF9FUlJPUl9CVVNZICAgICAgICAgVGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIGNvbXBsZXRlIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuIFRoaXMgaXMgdXN1YWxseSBhIHRlbXBvcmFyeSBjb25kaXRpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyBUaGUgZ2l2ZW4gYVN0cmVhbUlkIHdhcyBpbnZhbGlkLgorKi8KK290RXJyb3Igb3ROY3BTdHJlYW1Xcml0ZShpbnQgYVN0cmVhbUlkLCBjb25zdCB1aW50OF90ICphRGF0YVB0ciwgaW50IGFEYXRhTGVuKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGVlay9Qb2tlIG1lbW9yeSBhY2Nlc3MgY29udHJvbCBkZWxlZ2F0ZXMKKworLyoqCisgKiBEZWZpbmVzIGRlbGVnYXRlIChmdW5jdGlvbiBwb2ludGVyKSB0eXBlIHRvIGNvbnRyb2wgYmVoYXZpb3Igb2YgcGVlay9wb2tlIG9wZXJhdGlvbi4KKyAqCisgKiBUaGlzIGRlbGVnYXRlIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBkZWNpZGUgd2hldGhlciB0byBhbGxvdyBwZWVrIG9yIHBva2Ugb2YgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLiBJdCBpcyB1c2VkCisgKiBpZiBOQ1Agc3VwcG9ydCBmb3IgcGVlay9wb2tlIGNvbW1hbmRzIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSBhQWRkcmVzcyAgICBTdGFydCBhZGRyZXNzIG9mIG1lbW9yeSByZWdpb24uCisgKiBAcGFyYW1baW5dIGFDb3VudCAgICAgIE51bWJlciBvZiBieXRlcyB0byBwZWVrIG9yIHBva2UuCisgKgorICogQHJldHVybnMgIFRSVUUgdG8gYWxsb3cgcGVlay9wb2tlIG9mIHRoZSBnaXZlbiBtZW1vcnkgcmVnaW9uLCBGQUxTRSBvdGhlcndpc2UuCisgKgorICovCit0eXBlZGVmIGJvb2wgKCpvdE5jcERlbGVnYXRlQWxsb3dQZWVrUG9rZSkodWludDMyX3QgYUFkZHJlc3MsIHVpbnQxNl90IGFDb3VudCk7CisKKy8qKgorICogVGhpcyBtZXRob2QgcmVnaXN0ZXJzIHBlZWsvcG9rZSBkZWxlZ2F0ZSBmdW5jdGlvbnMgd2l0aCBOQ1AgbW9kdWxlLgorICoKKyAqIFRoZSBkZWxlZ2F0ZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBOQ1AgbW9kdWxlIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGFsbG93IHBlZWsgb3IgcG9rZSBvZiBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uCisgKiBJZiB0aGUgZGVsZWdhdGUgcG9pbnRlciBpcyBzZXQgdG8gTlVMTCwgaXQgYWxsb3dzIHBlZWsvcG9rZSBvcGVyYXRpb24gZm9yIGFueSBhZGRyZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gYUFsbG93UGVla0RlbGVnYXRlICAgICAgRGVsZWdhdGUgZnVuY3Rpb24gcG9pbnRlciBmb3IgcGVlayBvcGVyYXRpb24uCisgKiBAcGFyYW1baW5dIGFBbGxvd1Bva2VEZWxlZ2F0ZSAgICAgIERlbGVnYXRlIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIHBva2Ugb3BlcmF0aW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgZGVsZWdhdGUgZnVuY3Rpb25zLgorICogQHJldHZhbCBPVF9FUlJPUl9ESVNBQkxFRF9GRUFUVVJFICBQZWVrL1Bva2UgZmVhdHVyZSBpcyBkaXNhYmxlZCAoYnkgYSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9uKS4KKyAqCisgKi8KK290RXJyb3Igb3ROY3BSZWdpc3RlclBlZWtQb2tlRGVsYWdhdGVzKG90TmNwRGVsZWdhdGVBbGxvd1BlZWtQb2tlIGFBbGxvd1BlZWtEZWxlZ2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90TmNwRGVsZWdhdGVBbGxvd1BlZWtQb2tlIGFBbGxvd1Bva2VEZWxlZ2F0ZSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExlZ2FjeSBuZXR3b3JrIEFQSXMKKworI2RlZmluZSBPVF9OQ1BfTEVHQUNZX1VMQV9QUkVGSVhfTEVOR1RIICAgIDggICAvLy88IExlZ2FjeSBVTEEgc2l6ZSAoaW4gYnl0ZXMpCisKKy8qKgorICogRGVmaW5lcyBoYW5kbGVyIChmdW5jdGlvbiBwb2ludGVyKSB0eXBlIGZvciBzdGFydGluZyBsZWdhY3kgbmV0d29yaworICoKKyAqIEludm9rZWQgdG8gc3RhcnQgdGhlIGxlZ2FjeSBuZXR3b3JrLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3ROY3BIYW5kbGVyU3RhcnRMZWdhY3kpKHZvaWQpOworCisvKioKKyAqIERlZmluZXMgaGFuZGxlciAoZnVuY3Rpb24gcG9pbnRlcikgdHlwZSBmb3Igc3RvcHBpbmcgbGVnYWN5IG5ldHdvcmsKKyAqCisgKiBJbnZva2VkIHRvIHN0b3AgdGhlIGxlZ2FjeSBuZXR3b3JrLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3ROY3BIYW5kbGVyU3RvcExlZ2FjeSkodm9pZCk7CisKKy8qKgorICogRGVmaW5lcyBoYW5kbGVyIChmdW5jdGlvbiBwb2ludGVyKSB0eXBlIGZvciBpbml0aWF0aW5nIGpvaW5pbmcgcHJvY2Vzcy4KKyAqCisgKiBAcGFyYW1baW5dIGFFeHRBZGRyZXNzICAgQSBwb2ludGVyIHRvIHRoZSBleHRlbmRlZCBhZGRyZXNzIGZvciB0aGUgbm9kZSB0byBqb2luCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgTlVMTCBpZiBkZXNpcmVkIHRvIGpvaW4gYW55IG5laWdoYm9yaW5nIG5vZGUuCisgKgorICogSW52b2tlZCB0byBpbml0aWF0ZSBhIGxlZ2FjeSBqb2luIHByb2NlZHVyZSB0byBhbnkgb3IgYSBzcGVjaWZpYyBub2RlLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3ROY3BIYW5kbGVySm9pbkxlZ2FjeU5vZGUpKGNvbnN0IG90RXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MpOworCisvKioKKyAqIERlZmluZXMgaGFuZGxlciAoZnVuY3Rpb24gcG9pbnRlcikgdHlwZSBmb3Igc2V0dGluZyB0aGUgbGVnYWN5IFVMQSBwcmVmaXguCisgKgorICogQHBhcmFtW2luXSBhVWxhUHJlZml4ICAgQSBwb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIHRoZSBsZWdhY3kgVUxBIHByZWZpeC4KKyAqCisgKiBJbnZva2VkIHRvIHNldCB0aGUgbGVnYWN5IFVMQSBwcmVmaXguCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdE5jcEhhbmRsZXJTZXRMZWdhY3lVbGFQcmVmaXgpKGNvbnN0IHVpbnQ4X3QgKmFVbGFQcmVmaXgpOworCisvKioKKyAqIERlZmluZXMgYSBzdHJ1Y3QgY29udGFpbmluZyBhbGwgdGhlIGxlZ2FjeSBoYW5kbGVycyAoZnVuY3Rpb24gcG9pbnRlcnMpLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3ROY3BMZWdhY3lIYW5kbGVycworeworICAgIG90TmNwSGFuZGxlclN0YXJ0TGVnYWN5ICAgICAgICAgbVN0YXJ0TGVnYWN5OyAgICAgICAgIC8vLzwgU3RhcnQgaGFuZGxlcgorICAgIG90TmNwSGFuZGxlclN0b3BMZWdhY3kgICAgICAgICAgbVN0b3BMZWdhY3k7ICAgICAgICAgIC8vLzwgU3RvcCBoYW5kbGVyCisgICAgb3ROY3BIYW5kbGVySm9pbkxlZ2FjeU5vZGUgICAgICBtSm9pbkxlZ2FjeU5vZGU7ICAgICAgLy8vPCBKb2luIGhhbmRsZXIKKyAgICBvdE5jcEhhbmRsZXJTZXRMZWdhY3lVbGFQcmVmaXggIG1TZXRMZWdhY3lVbGFQcmVmaXg7ICAvLy88IFNldCBVTEEgaGFuZGxlcgorfSBvdE5jcExlZ2FjeUhhbmRsZXJzOworCisvKioKKyAqIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBieSB0aGUgbGVnYWN5IHN0YWNrIHRvIG5vdGlmeSB0aGF0IGEgbmV3CisgKiBsZWdhY3kgbm9kZSBkaWQgam9pbiB0aGUgbmV0d29yay4KKyAqLwordm9pZCBvdE5jcEhhbmRsZUxlZ2FjeU5vZGVEaWRKb2luKGNvbnN0IG90RXh0QWRkcmVzcyAqYUV4dEFkZHIpOworCisvKioKKyAqIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBieSB0aGUgbGVnYWN5IHN0YWNrIHRvIG5vdGlmeSB0aGF0IHRoZQorICogbGVnYWN5IFVMQSBwcmVmaXggaGFzIGNoYW5nZWQuCisgKi8KK3ZvaWQgb3ROY3BIYW5kbGVEaWRSZWNlaXZlTmV3TGVnYWN5VWxhUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFVbGFQcmVmaXgpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIHJlZ2lzdGVycyBhIHNldCBvZiBsZWdhY3kgaGFuZGxlcnMgd2l0aCBOQ1AuCisgKgorICogVGhlIHNldCBvZiBoYW5kbGVycyBwcm92aWRlZCBieSB0aGUgc3RydWN0IEBwIGFIYW5kbGVycyBhcmUgdXNlZCBieQorICogTkNQIGNvZGUgdG8gc3RhcnQvc3RvcCBsZWdhY3kgbmV0d29yay4KKyAqIFRoZSBAcCBhSGFuZGxlcnMgY2FuIGJlIE5VTEwgdG8gZGlzYWJsZSBsZWdhY3kgc3VwcG9ydCBvbiBOQ1AuCisgKiBJbmRpdmlkdWFsIGhhbmRsZXJzIGluIHRoZSBnaXZlbiBoYW5kbGVycyBzdHJ1Y3QgY2FuIGFsc28gYmUgTlVMTC4KKyAqCisgKiBAcGFyYW1baW5dIGFIYW5kbGVycyAgICBBIHBvaW50ZXIgdG8gYSBoYW5kbGVyIHN0cnVjdC4KKyAqCisgKi8KK3ZvaWQgb3ROY3BSZWdpc3RlckxlZ2FjeUhhbmRsZXJzKGNvbnN0IG90TmNwTGVnYWN5SGFuZGxlcnMgKmFIYW5kbGVycyk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvbmV0ZGF0YS5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL25ldGRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzBkNDllCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL25ldGRhdGEuaApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIE9wZW5UaHJlYWQgTmV0d29yayBEYXRhIEFQSS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfTkVUREFUQV9IXworI2RlZmluZSBPUEVOVEhSRUFEX05FVERBVEFfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS10aHJlYWQtZ2VuZXJhbAorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBtZXRob2QgcHJvdmlkZXMgYSBmdWxsIG9yIHN0YWJsZSBjb3B5IG9mIHRoZSBMZWFkZXIncyBUaHJlYWQgTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gICAgIGFTdGFibGUgICAgICBUUlVFIHdoZW4gY29weWluZyB0aGUgc3RhYmxlIHZlcnNpb24sIEZBTFNFIHdoZW4gY29weWluZyB0aGUgZnVsbCB2ZXJzaW9uLgorICogQHBhcmFtW291dF0gICAgYURhdGEgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIuCisgKiBAcGFyYW1baW5vdXRdICBhRGF0YUxlbmd0aCAgT24gZW50cnksIHNpemUgb2YgdGhlIGRhdGEgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQHAgYURhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gZXhpdCwgbnVtYmVyIG9mIGNvcGllZCBieXRlcy4KKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3ROZXREYXRhR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhU3RhYmxlLCB1aW50OF90ICphRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphRGF0YUxlbmd0aCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBuZXh0IE9uIE1lc2ggUHJlZml4IGluIHRoZSBwYXJ0aXRpb24ncyBOZXR3b3JrIERhdGEuCisgKgorICogQHBhcmFtW2luXSAgICAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbm91dF0gIGFJdGVyYXRvciAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEgaXRlcmF0b3IgY29udGV4dC4gVG8gZ2V0IHRoZSBmaXJzdCBvbi1tZXNoIGVudHJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHNob3VsZCBiZSBzZXQgdG8gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQuCisgKiBAcGFyYW1bb3V0XSAgICBhQ29uZmlnICAgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgT24gTWVzaCBQcmVmaXggaW5mb3JtYXRpb24gd2lsbCBiZSBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCB0aGUgbmV4dCBPbiBNZXNoIHByZWZpeC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBObyBzdWJzZXF1ZW50IE9uIE1lc2ggcHJlZml4IGV4aXN0cyBpbiB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90TmV0RGF0YUdldE5leHRPbk1lc2hQcmVmaXgob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbmV4dCBleHRlcm5hbCByb3V0ZSBpbiB0aGUgcGFydGl0aW9uJ3MgTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhSXRlcmF0b3IgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhIGl0ZXJhdG9yIGNvbnRleHQuIFRvIGdldCB0aGUgZmlyc3QgZXh0ZXJuYWwgcm91dGUgZW50cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIHNldCB0byBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVC4KKyAqIEBwYXJhbVtvdXRdICAgIGFDb25maWcgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBFeHRlcm5hbCBSb3V0ZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGZvdW5kIHRoZSBuZXh0IEV4dGVybmFsIFJvdXRlLgorICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE5vIHN1YnNlcXVlbnQgZXh0ZXJuYWwgcm91dGUgZW50cnkgZXhpc3RzIGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICoKKyAqLworb3RFcnJvciBvdE5ldERhdGFHZXROZXh0Um91dGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyAqYUNvbmZpZyk7CisKKy8qKgorICogR2V0IHRoZSBOZXR3b3JrIERhdGEgVmVyc2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIE5ldHdvcmsgRGF0YSBWZXJzaW9uLgorICovCitPVEFQSSB1aW50OF90IE9UQ0FMTCBvdE5ldERhdGFHZXRWZXJzaW9uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBTdGFibGUgTmV0d29yayBEYXRhIFZlcnNpb24uCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBTdGFibGUgTmV0d29yayBEYXRhIFZlcnNpb24uCisgKi8KK09UQVBJIHVpbnQ4X3QgT1RDQUxMIG90TmV0RGF0YUdldFN0YWJsZVZlcnNpb24ob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfTkVUREFUQV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL29wZW50aHJlYWQuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9vcGVudGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwZThlYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9vcGVudGhyZWFkLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0b3AtbGV2ZWwgZnVuY3Rpb25zIGZvciB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9IXworI2RlZmluZSBPUEVOVEhSRUFEX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NyeXB0by5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvZGF0YXNldC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvaW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2lwNi5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvbGluay5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvbmV0ZGF0YS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdGFza2xldC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGRlZmdyb3VwIGFwaSAgQVBJCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSB0byB0aGUgT3BlblRocmVhZCBzdGFjay4KKyAqCisgKiBAeworICoKKyAqIEBkZWZncm91cCBhcGktZXhlY3V0aW9uIEV4ZWN1dGlvbgorICoKKyAqIEB7CisgKgorICogQGRlZmdyb3VwIGFwaS1pbnN0YW5jZSBJbnN0YW5jZQorICogQGRlZmdyb3VwIGFwaS10YXNrbGV0cyBUYXNrbGV0cworICoKKyAqIEB9CisgKgorICogQGRlZmdyb3VwIGFwaS1uZXQgSVB2NiBOZXR3b3JraW5nCisgKiBAeworICoKKyAqIEBkZWZncm91cCBhcGktZGhjcDYgREhDUHY2CisgKiBAYnJpZWYgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBESENQdjYgQ2xpZW50IGFuZCBTZXJ2ZXIuCisgKiBAZGVmZ3JvdXAgYXBpLWRucyAgIEROU3Y2CisgKiBAZGVmZ3JvdXAgYXBpLWljbXA2IElDTVB2NgorICogQGRlZmdyb3VwIGFwaS1pcDYgICBJUHY2CisgKiBAZGVmZ3JvdXAgYXBpLXVkcCAgIFVEUAorICoKKyAqIEB9CisgKgorICogQGRlZmdyb3VwIGFwaS1saW5rIExpbmsKKyAqCisgKiBAeworICoKKyAqIEBkZWZncm91cCBhcGktbGluay1saW5rIExpbmsKKyAqIEBkZWZncm91cCBhcGktbGluay1yYXcgIFJhdyBMaW5rCisgKgorICogQH0KKyAqCisgKiBAZGVmZ3JvdXAgYXBpLW1lc3NhZ2UgTWVzc2FnZQorICoKKyAqIEBkZWZncm91cCBhcGktdGhyZWFkIFRocmVhZAorICoKKyAqIEB7CisgKgorICogQGRlZmdyb3VwIGFwaS1ib3JkZXItcm91dGVyICBCb3JkZXIgUm91dGVyCisgKiBAZGVmZ3JvdXAgYXBpLWNvbW1pc3Npb25lciAgIENvbW1pc3Npb25lcgorICogQGRlZmdyb3VwIGFwaS10aHJlYWQtZ2VuZXJhbCBHZW5lcmFsCisgKiBAYnJpZWYgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBhbGwgVGhyZWFkIHJvbGVzLgorICogQGRlZmdyb3VwIGFwaS1qb2luZXIgICAgICAgICBKb2luZXIKKyAqIEBkZWZncm91cCBhcGktdGhyZWFkLXJvdXRlciAgUm91dGVyL0xlYWRlcgorICogQGJyaWVmIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgVGhyZWFkIFJvdXRlcnMgYW5kIExlYWRlcnMuCisgKiBAZGVmZ3JvdXAgYXBpLXRtZi1wcm94eSAgICAgIFRNRiBQcm94eQorICoKKyAqIEB9CisgKgorICogQGRlZmdyb3VwIGFwaS1hZGRvbnMgQWRkLU9ucworICoKKyAqIEB7CisgKgorICogQGRlZmdyb3VwIGFwaS1jaGlsZC1zdXBlcnZpc2lvbiAgIENoaWxkIFN1cGVydmlzaW9uCisgKiBAZGVmZ3JvdXAgYXBpLWNvYXAgICAgICAgICAgICAgICAgQ29BUAorICogQGRlZmdyb3VwIGFwaS1jbGkgICAgICAgICAgICAgICAgIENvbW1hbmQgTGluZSBJbnRlcmZhY2UKKyAqIEBkZWZncm91cCBhcGktY3J5cHRvICAgICAgICAgICAgICBDcnlwdG8KKyAqIEBkZWZncm91cCBhcGktZmFjdG9yeS1kaWFnbm9zdGljcyBGYWN0b3J5IERpYWdub3N0aWNzCisgKiBAZGVmZ3JvdXAgYXBpLWphbS1kZXRlY3Rpb24gICAgICAgSmFtIERldGVjdGlvbgorICogQGRlZmdyb3VwIGFwaS1uY3AgICAgICAgICAgICAgICAgIE5ldHdvcmsgQ28tUHJvY2Vzc29yCisgKgorICogQH0KKyAqCisgKiBAfQorICoKKyAqLworCisvKioKKyAqIEBkZWZncm91cCBwbGF0Zm9ybSAgUGxhdGZvcm0gQWJzdHJhY3Rpb24KKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gdXNlZCBieSB0aGUgT3BlblRocmVhZCBzdGFjay4KKyAqCisgKiBAeworICoKKyAqIEBkZWZncm91cCBwbGF0LWFsYXJtICAgICAgICAgICAgICAgQWxhcm0KKyAqIEBkZWZncm91cCBwbGF0LWZhY3RvcnktZGlhZ25vc3RpY3MgRmFjdG9yeSBEaWFnbm9zdGljcworICogQGRlZmdyb3VwIHBsYXQtbG9nZ2luZyAgICAgICAgICAgICBMb2dnaW5nCisgKiBAZGVmZ3JvdXAgcGxhdC1tZW1vcnkgICAgICAgICAgICAgIE1lbW9yeQorICogQGRlZmdyb3VwIHBsYXQtbWVzc2FnZXBvb2wgICAgICAgICBNZXNzYWdlIFBvb2wKKyAqIEBkZWZncm91cCBwbGF0LW1pc2MgICAgICAgICAgICAgICAgTWlzY2VsbGFuZW91cworICogQGRlZmdyb3VwIHBsYXQtcmFkaW8gICAgICAgICAgICAgICBSYWRpbworICogQGRlZmdyb3VwIHBsYXQtcmFuZG9tICAgICAgICAgICAgICBSYW5kb20KKyAqIEBkZWZncm91cCBwbGF0LXNldHRpbmdzICAgICAgICAgICAgU2V0dGluZ3MKKyAqIEBkZWZncm91cCBwbGF0LXNwaS1zbGF2ZSAgICAgICAgICAgU1BJIFNsYXZlCisgKiBAZGVmZ3JvdXAgcGxhdC10b29sY2hhaW4gICAgICAgICAgIFRvb2xjaGFpbgorICogQGRlZmdyb3VwIHBsYXQtdWFydCAgICAgICAgICAgICAgICBVQVJUCisgKgorICogQH0KKyAqCisgKi8KKworLyoqCisgKiBHZXQgdGhlIE9wZW5UaHJlYWQgdmVyc2lvbiBzdHJpbmcuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBPcGVuVGhyZWFkIHZlcnNpb24uCisgKgorICovCitPVEFQSSBjb25zdCBjaGFyICpPVENBTEwgb3RHZXRWZXJzaW9uU3RyaW5nKHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gY29udmVydHMgYW4gb3RFcnJvciBlbnVtIGludG8gYSBzdHJpbmcuCisgKgorICogQHBhcmFtW2luXSAgYUVycm9yICAgICBBbiBvdEVycm9yIGVudW0uCisgKgorICogQHJldHVybnMgIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG90RXJyb3IuCisgKgorICovCitPVEFQSSBjb25zdCBjaGFyICpPVENBTEwgb3RUaHJlYWRFcnJvclRvU3RyaW5nKG90RXJyb3IgYUVycm9yKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vTWFrZWZpbGUuYW0gYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhNzk2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDUzIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK290X3BsYXRmb3JtX2hlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgPVwKKyAgICBhbGFybS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkaWFnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtZW1vcnkuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtaXNjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsb2dnaW5nLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByYWRpby5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByYW5kb20uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1YXJ0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGktc2xhdmUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzZXR0aW5ncy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtZXNzYWdlcG9vbC5oICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0b29sY2hhaW4uaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2VjLWFsYXJtLmggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK290X3BsYXRmb3JtZGlyID0gJChpbmNsdWRlZGlyKS9vcGVudGhyZWFkL3BsYXRmb3JtCitkaXN0X290X3BsYXRmb3JtX0hFQURFUlMgPSAkKG90X3BsYXRmb3JtX2hlYWRlcnMpCisKK2luc3RhbGwtaGVhZGVyczogaW5zdGFsbC1pbmNsdWRlSEVBREVSUworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUwZWU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgdGhlIG1pbGxpc2Vjb25kIGFsYXJtIHNlcnZpY2UuCisgKi8KKworI2lmbmRlZiBBTEFSTV9IXworI2RlZmluZSBBTEFSTV9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBwbGF0LWFsYXJtCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgdGhlIGFsYXJtIHNlcnZpY2UuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBTZXQgdGhlIGFsYXJtIHRvIGZpcmUgYXQgQHAgYUR0IG1pbGxpc2Vjb25kcyBhZnRlciBAcCBhVDAuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gYVQwICAgICAgICBUaGUgcmVmZXJlbmNlIHRpbWUuCisgKiBAcGFyYW1baW5dIGFEdCAgICAgICAgVGhlIHRpbWUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGZyb20gQHAgYVQwLgorICovCit2b2lkIG90UGxhdEFsYXJtU3RhcnRBdChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFUMCwgdWludDMyX3QgYUR0KTsKKworLyoqCisgKiBTdG9wIHRoZSBhbGFybS4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICovCit2b2lkIG90UGxhdEFsYXJtU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgY3VycmVudCB0aW1lLgorICoKKyAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHRpbWUgaW4gbWlsbGlzZWNvbmRzLgorICovCit1aW50MzJfdCBvdFBsYXRBbGFybUdldE5vdyh2b2lkKTsKKworLyoqCisgKiBTaWduYWwgdGhhdCB0aGUgYWxhcm0gaGFzIGZpcmVkLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKi8KK2V4dGVybiB2b2lkIG90UGxhdEFsYXJtRmlyZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTaWduYWwgZGlhZ25vc3RpY3MgbW9kdWxlIHRoYXQgdGhlIGFsYXJtIGhhcyBmaXJlZC4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICovCitleHRlcm4gdm9pZCBvdFBsYXREaWFnQWxhcm1GaXJlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gQUxBUk1fSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmggYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNGIzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHBsYXRmb3JtIGRpYWcgaW50ZXJmYWNlLgorICoKKyAqLworCisjaWZuZGVmIERJQUdfSF8KKyNkZWZpbmUgRElBR19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGFkZHRvZ3JvdXAgcGxhdC1mYWN0b3J5LWRpYWdub3N0aWNzCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgZGlhZ25vc3RpY3MgZmVhdHVyZXMuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBhIGZhY3RvcnkgZGlhZ25vc3RpY3MgY29tbWFuZCBsaW5lLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICAgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2UgZm9yIGN1cnJlbnQgcmVxdWVzdC4KKyAqIEBwYXJhbVtpbl0gICBhcmdjICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGNvdW50ZXIgb2YgZGlhZ25vc3RpY3MgY29tbWFuZCBsaW5lLgorICogQHBhcmFtW2luXSAgIGFyZ3YgICAgICAgICAgICBUaGUgYXJndW1lbnQgdmVjdG9yIG9mIGRpYWdub3N0aWNzIGNvbW1hbmQgbGluZS4KKyAqIEBwYXJhbVtvdXRdICBhT3V0cHV0ICAgICAgICAgVGhlIGRpYWdub3N0aWNzIGV4ZWN1dGlvbiByZXN1bHQuCisgKiBAcGFyYW1baW5dICAgYU91dHB1dE1heExlbiAgIFRoZSBvdXRwdXQgYnVmZmVyIHNpemUuCisgKgorICovCit2b2lkIG90UGxhdERpYWdQcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcy9kaXNhYmxlcyB0aGUgZmFjdG9yeSBkaWFnbm9zdGljcyBtb2RlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFNb2RlICBUUlVFIHRvIGVuYWJsZSBkaWFnbm9zdGljcyBtb2RlLCBGQUxTRSBvdGhlcndpc2UuCisgKgorICovCit2b2lkIG90UGxhdERpYWdNb2RlU2V0KGJvb2wgYU1vZGUpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGZhY3RvcnkgZGlhZ25vc3RpY3MgbW9kZSBpcyBlbmFibGVkLgorICoKKyAqIEByZXR1cm5zIFRSVUUgaWYgZmFjdG9yeSBkaWFnbm9zdGljcyBtb2RlIGlzIGVuYWJsZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKi8KK2Jvb2wgb3RQbGF0RGlhZ01vZGVHZXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjaGFubmVsIHRvIHVzZSBmb3IgZmFjdG9yeSBkaWFnbm9zdGljcy4KKyAqCisgKiBAcGFyYW1baW5dICBhQ2hhbm5lbCAgVGhlIGNoYW5uZWwgdmFsdWUuCisgKgorICovCit2b2lkIG90UGxhdERpYWdDaGFubmVsU2V0KHVpbnQ4X3QgYUNoYW5uZWwpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdHJhbnNtaXQgcG93ZXIgdG8gdXNlIGZvciBmYWN0b3J5IGRpYWdub3N0aWNzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFUeFBvd2VyICBUaGUgdHJhbnNtaXQgcG93ZXIgdmFsdWUuCisgKgorICovCit2b2lkIG90UGxhdERpYWdUeFBvd2VyU2V0KGludDhfdCBhVHhQb3dlcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJlY2VpdmVkIHJhZGlvIGZyYW1lLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBmb3IgY3VycmVudCByZXF1ZXN0LgorICogQHBhcmFtW2luXSAgIGFGcmFtZSAgICAgIFRoZSByZWNlaXZlZCByYWRpbyBmcmFtZS4KKyAqIEBwYXJhbVtpbl0gICBhRXJyb3IgICAgICBUaGUgcmVjZWl2ZWQgcmFkaW8gZnJhbWUgc3RhdHVzLgorICoKKyAqLwordm9pZCBvdFBsYXREaWFnUmFkaW9SZWNlaXZlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIGFsYXJtIGV2ZW50LgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBmb3IgY3VycmVudCByZXF1ZXN0LgorICoKKyAqLwordm9pZCBvdFBsYXREaWFnQWxhcm1DYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZW5kIG9mIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLXdpbmRvd3MuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLXdpbmRvd3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjU1ZjBhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmctd2luZG93cy5oCkBAIC0wLDAgKzEsNTAwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgV1BQIFRyYWNpbmcgRGVmaW5pdGlvbnMuCisgKi8KKworI2lmbmRlZiBfTE9HR0lOR19XSU5ET1dTX0gKKyNkZWZpbmUgX0xPR0dJTkdfV0lORE9XU19ICisKKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfQ0VSVF9MT0cgMQorCisvLworLy8gVHJhY2luZyBEZWZpbml0aW9uczogezFBQTk4OTI2LTJFNDAtNDNEMS05RDgzLTM0QzZCRTgxNjM2NX0KKy8vCisKKyNkZWZpbmUgV1BQX0NPTlRST0xfR1VJRFMgXAorICAgIFdQUF9ERUZJTkVfQ09OVFJPTF9HVUlEKCBcCisgICAgICAgIE9wZW5UaHJlYWRHVUlELCAoMUFBOTg5MjYsMkU0MCw0M0QxLDlEODMsMzRDNkJFODE2MzY1KSwgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChEUklWRVJfREVGQVVMVCkgICAgICAvKiAweDAwMDAwMDAxICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoRFJJVkVSX0lPQ1RMKSAgICAgICAgLyogMHgwMDAwMDAwMiAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKERSSVZFUl9PSUQpICAgICAgICAgIC8qIDB4MDAwMDAwMDQgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChEUklWRVJfREFUQV9QQVRIKSAgICAvKiAweDAwMDAwMDA4ICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoT1RfQVBJKSAgICAgICAgICAgICAgLyogMHgwMDAwMDAxMCAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKE9UX01MRSkgICAgICAgICAgICAgIC8qIDB4MDAwMDAwMjAgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChPVF9BUlApICAgICAgICAgICAgICAvKiAweDAwMDAwMDQwICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoT1RfTkVURCkgICAgICAgICAgICAgLyogMHgwMDAwMDA4MCAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKE9UX0lDTVApICAgICAgICAgICAgIC8qIDB4MDAwMDAxMDAgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChPVF9JUFY2KSAgICAgICAgICAgICAvKiAweDAwMDAwMjAwICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoT1RfTUFDKSAgICAgICAgICAgICAgLyogMHgwMDAwMDQwMCAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKE9UX01FTSkgICAgICAgICAgICAgIC8qIDB4MDAwMDA4MDAgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChPVF9OQ1ApICAgICAgICAgICAgICAvKiAweDAwMDAxMDAwICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoT1RfTUVTSENPUCkgICAgICAgICAgLyogMHgwMDAwMjAwMCAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKE9UX0RFRkFVTFQpICAgICAgICAgIC8qIDB4MDAwMDQwMDAgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChPVF9NQkVEVExTKSAgICAgICAgICAvKiAweDAwMDA4MDAwICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoT1RfRFVNUCkgICAgICAgICAgICAgLyogMHgwMDAxMDAwMCAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKE9UX05ESUFHKSAgICAgICAgICAgIC8qIDB4MDAwMjAwMDAgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChPVF9DT0FQKSAgICAgICAgICAgICAvKiAweDAwMDQwMDAwICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoQVBJX0RFRkFVTFQpICAgICAgICAgLyogMHgwMDA4MDAwMCAqLyAgICBcCisgICAgICAgICkKKworI2RlZmluZSBXUFBfTEVWRUxfRkxBR1NfTE9HR0VSKGx2bCxmbGFnKSAgICAgICAgICAgICAgICAgICAgICAgIFdQUF9GTEFHX0xPR0dFUihmbGFnKQorI2RlZmluZSBXUFBfTEVWRUxfRkxBR1NfRVhQX0VOQUJMRUQoTEVWRUwsRkxBR1MsRVhQKSAgICAgICAgICAgIFdQUF9MRVZFTF9GTEFHU19FTkFCTEVEIChMRVZFTCxGTEFHUykKKyNkZWZpbmUgV1BQX0xFVkVMX0ZMQUdTX0NUWF9FTkFCTEVEKExFVkVMLEZMQUdTLENUWCkgICAgICAgICAgICBXUFBfTEVWRUxfRkxBR1NfRU5BQkxFRCAoTEVWRUwsRkxBR1MpCisjZGVmaW5lIFdQUF9MRVZFTF9GTEFHU19DVFhfRVhQX0VOQUJMRUQoTEVWRUwsRkxBR1MsQ1RYLEVYUCkgICAgV1BQX0xFVkVMX0ZMQUdTX0VOQUJMRUQgKExFVkVMLEZMQUdTKQorCisjZGVmaW5lIFdQUF9MRVZFTF9GTEFHU19FTkFCTEVEKGx2bCwgZmxhZykgXAorICAgIChXUFBfRkxBR19FTkFCTEVEKGZsYWcpICYmIFdQUF9DT05UUk9MKFdQUF9CSVRfICMjIGZsYWcpLkxldmVsID49IGx2bCkKKyNkZWZpbmUgV1BQX0xFVkVMX0ZMQUdTX0VYUF9MT0dHRVIoTEVWRUwsRkxBR1MsRVhQKSAgICAgICAgICAgICBXUFBfTEVWRUxfRkxBR1NfTE9HR0VSIChMRVZFTCxGTEFHUykKKyNkZWZpbmUgV1BQX0xFVkVMX0ZMQUdTX0NUWF9MT0dHRVIoTEVWRUwsRkxBR1MsQ1RYKSAgICAgICAgICAgICBXUFBfTEVWRUxfRkxBR1NfTE9HR0VSIChMRVZFTCxGTEFHUykKKyNkZWZpbmUgV1BQX0xFVkVMX0ZMQUdTX0NUWF9FWFBfTE9HR0VSKExFVkVMLEZMQUdTLENUWCxFWFApICAgICBXUFBfTEVWRUxfRkxBR1NfTE9HR0VSIChMRVZFTCxGTEFHUykKKworI2RlZmluZSBXUFBfTE9HSVBWNih4KSBXUFBfTE9HUEFJUigxNiwgKHgpKQorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBERUZJTkVfQ1BMWF9UWVBFKElQVjZBRERSLCBXUFBfTE9HSVBWNiwgSU42X0FERFIgKiwgSXRlbUlQVjZBZGRyLCAicyIsIF9JUFY2XywgMCk7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWChMb2dGdW5jRW50cnksICItLS0+ICUhRlVOQyEiKTsKKy8vIEZVTkMgTG9nRnVuY0VudHJ5e0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0V9KEZMQUdTKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYKExvZ0Z1bmNFbnRyeU1zZywgIi0tLT4gJSFGVU5DISUhU1BBQ0UhIik7CisvLyBGVU5DIExvZ0Z1bmNFbnRyeU1zZ3tMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFfShGTEFHUywgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVgoTG9nRnVuY0V4aXQsICI8LS0tICUhRlVOQyEiKTsKKy8vIEZVTkMgTG9nRnVuY0V4aXR7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRX0oRkxBR1MpOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVgoTG9nRnVuY0V4aXRNc2csICI8LS0tICUhRlVOQyElIVNQQUNFISIpOworLy8gRlVOQyBMb2dGdW5jRXhpdE1zZ3tMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFfShGTEFHUywgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVgoTG9nRnVuY0V4aXROVCwgIjwtLS0gJSFGVU5DISIpOworLy8gRlVOQyBMb2dGdW5jRXhpdE5Ue0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0V9KEZMQUdTLCBFWFApOworLy8gVVNFU1VGRklYKExvZ0Z1bmNFeGl0TlQsICIgJSFTVEFUVVMhIiwgRVhQKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYKExvZ0Z1bmNFeGl0TkRJUywgIjwtLS0gJSFGVU5DISIpOworLy8gRlVOQyBMb2dGdW5jRXhpdE5ESVN7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRX0oRkxBR1MsIEVYUCk7CisvLyBVU0VTVUZGSVgoTG9nRnVuY0V4aXRORElTLCAiICUhTkRJU19TVEFUVVMhIiwgRVhQKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYKExvZ0Z1bmNFeGl0V0lOLCAiPC0tLSAlIUZVTkMhIik7CisvLyBGVU5DIExvZ0Z1bmNFeGl0V0lOe0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0V9KEZMQUdTLCBFWFApOworLy8gVVNFU1VGRklYKExvZ0Z1bmNFeGl0V0lOLCAiICUhV0lORVJST1IhIiwgRVhQKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChMb2dFcnJvciwgIiAiKTsKKy8vIExvZ0Vycm9ye0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SfShGTEFHUywgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKExvZ1dhcm5pbmcsICIgIik7CisvLyBMb2dXYXJuaW5ne0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkd9KEZMQUdTLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAoTG9nSW5mbywgIiAiKTsKKy8vIExvZ0luZm97TEVWRUw9VFJBQ0VfTEVWRUxfSU5GT1JNQVRJT059KEZMQUdTLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAoTG9nVmVyYm9zZSwgIiAiKTsKKy8vIExvZ1ZlcmJvc2V7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRX0oRkxBR1MsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8KKy8vIEN1c3RvbSB0eXBlcworLy8KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gQ1VTVE9NX1RZUEUob3RFcnJvciwgSXRlbUVudW0oVGhyZWFkRXJyb3IpKTsKKy8vIENVU1RPTV9UWVBFKG90RGV2aWNlUm9sZSwgSXRlbUVudW0ob3REZXZpY2VSb2xlKSk7CisvLyBlbmRfd3BwCisKKy8vCisvLyBvdENvcmUgRGVmaW5pdGlvbnMKKy8vCisKKy8vID09QVBJPT0KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NyaXRBcGksICJbJXBdQVBJJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0QXBpe0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SLEZMQUdTPU9UX0FQSX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dXYXJuQXBpLCAiWyVwXUFQSSUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2FybkFwaXtMRVZFTD1UUkFDRV9MRVZFTF9XQVJOSU5HLEZMQUdTPU9UX0FQSX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvQXBpLCAiWyVwXUFQSSUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nSW5mb0FwaXtMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9BUEl9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nRGViZ0FwaSwgIlslcF1BUEklIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdBcGl7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRSxGTEFHUz1PVF9BUEl9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyA9PU5DUD09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dDcml0TmNwLCAiWyVwXU5DUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nQ3JpdE5jcHtMRVZFTD1UUkFDRV9MRVZFTF9FUlJPUixGTEFHUz1PVF9OQ1B9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nV2Fybk5jcCwgIlslcF1OQ1AlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ1dhcm5OY3B7TEVWRUw9VFJBQ0VfTEVWRUxfV0FSTklORyxGTEFHUz1PVF9OQ1B9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nSW5mb05jcCwgIlslcF1OQ1AlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0luZm9OY3B7TEVWRUw9VFJBQ0VfTEVWRUxfSU5GT1JNQVRJT04sRkxBR1M9T1RfTkNQfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdOY3AsICJbJXBdTkNQJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dEZWJnTmNwe0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfTkNQfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gPT1NRVNIQ09QPT0KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NyaXRNZXNoQ29QLCAiWyVwXU1FU0hDT1AlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0NyaXRNZXNoQ29Qe0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SLEZMQUdTPU9UX01FU0hDT1B9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nV2Fybk1lc2hDb1AsICJbJXBdTUVTSENPUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2Fybk1lc2hDb1B7TEVWRUw9VFJBQ0VfTEVWRUxfV0FSTklORyxGTEFHUz1PVF9NRVNIQ09QfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0luZm9NZXNoQ29QLCAiWyVwXU1FU0hDT1AlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0luZm9NZXNoQ29Qe0xFVkVMPVRSQUNFX0xFVkVMX0lORk9STUFUSU9OLEZMQUdTPU9UX01FU0hDT1B9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nRGViZ01lc2hDb1AsICJbJXBdTUVTSENPUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nRGViZ01lc2hDb1B7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRSxGTEFHUz1PVF9NRVNIQ09QfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NlcnRNZXNoQ29QLCAiWyVwXU1FU0hDT1AlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0NlcnRNZXNoQ29Qe0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfTUVTSENPUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09TUJFRFRMUz09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dDcml0TWJlZFRscywgIlslcF1NQkVEJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0TWJlZFRsc3tMRVZFTD1UUkFDRV9MRVZFTF9FUlJPUixGTEFHUz1PVF9NQkVEVExTfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5NYmVkVGxzLCAiWyVwXU1CRUQlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ1dhcm5NYmVkVGxze0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfTUJFRFRMU30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvTWJlZFRscywgIlslcF1NQkVEJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvTWJlZFRsc3tMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9NQkVEVExTfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdNYmVkVGxzLCAiWyVwXU1CRUQlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdNYmVkVGxze0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfTUJFRFRMU30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09TUxFPT0KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NyaXRNbGUsICJbJXBdTUxFJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0TWxle0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SLEZMQUdTPU9UX01MRX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dXYXJuTWxlLCAiWyVwXU1MRSUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2Fybk1sZXtMRVZFTD1UUkFDRV9MRVZFTF9XQVJOSU5HLEZMQUdTPU9UX01MRX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dXYXJuTWxlRXJyLCAiWyVwXU1MRSUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2Fybk1sZUVycntMRVZFTD1UUkFDRV9MRVZFTF9XQVJOSU5HLEZMQUdTPU9UX01MRX0oQ1RYLCBFWFAsIE1TRywgLi4uKTsKKy8vIFVTRVNVRkZJWChvdExvZ1dhcm5NbGVFcnIsICIsICUhb3RFcnJvciEiLCBFWFApOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nSW5mb01sZSwgIlslcF1NTEUlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0luZm9NbGV7TEVWRUw9VFJBQ0VfTEVWRUxfSU5GT1JNQVRJT04sRkxBR1M9T1RfTUxFfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdNbGUsICJbJXBdTUxFJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dEZWJnTWxle0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfTUxFfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gPT1BUlA9PQorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nQ3JpdEFycCwgIlslcF1BUlAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0NyaXRBcnB7TEVWRUw9VFJBQ0VfTEVWRUxfRVJST1IsRkxBR1M9T1RfQVJQfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5BcnAsICJbJXBdQVJQJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dXYXJuQXJwe0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfQVJQfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0luZm9BcnAsICJbJXBdQVJQJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvQXJwe0xFVkVMPVRSQUNFX0xFVkVMX0lORk9STUFUSU9OLEZMQUdTPU9UX0FSUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dEZWJnQXJwLCAiWyVwXUFSUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nRGViZ0FycHtMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFLEZMQUdTPU9UX0FSUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09TkVURD09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dDcml0TmV0RGF0YSwgIlslcF1ORVREJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0TmV0RGF0YXtMRVZFTD1UUkFDRV9MRVZFTF9FUlJPUixGTEFHUz1PVF9ORVREfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5OZXREYXRhLCAiWyVwXU5FVEQlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ1dhcm5OZXREYXRhe0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfTkVURH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvTmV0RGF0YSwgIlslcF1ORVREJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvTmV0RGF0YXtMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9ORVREfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdOZXREYXRhLCAiWyVwXU5FVEQlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdOZXREYXRhe0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfTkVURH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09SUNNUD09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dDcml0SWNtcCwgIlslcF1JQ01QJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0SWNtcHtMRVZFTD1UUkFDRV9MRVZFTF9FUlJPUixGTEFHUz1PVF9JQ01QfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5JY21wLCAiWyVwXUlDTVAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ1dhcm5JY21we0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfSUNNUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvSWNtcCwgIlslcF1JQ01QJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvSWNtcHtMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9JQ01QfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdJY21wLCAiWyVwXUlDTVAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdJY21we0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfSUNNUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09SVBWNj09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dDcml0SXA2LCAiWyVwXUlQNiUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nQ3JpdElwNntMRVZFTD1UUkFDRV9MRVZFTF9FUlJPUixGTEFHUz1PVF9JUFY2fShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5JcDYsICJbJXBdSVA2JSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dXYXJuSXA2e0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfSVBWNn0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvSXA2LCAiWyVwXUlQNiUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nSW5mb0lwNntMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9JUFY2fShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdJcDYsICJbJXBdSVA2JSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dEZWJnSXA2e0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfSVBWNn0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09TUFDPT0KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NyaXRNYWMsICJbJXBdTUFDJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0TWFje0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SLEZMQUdTPU9UX01BQ30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dXYXJuTWFjLCAiWyVwXU1BQyUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2Fybk1hY3tMRVZFTD1UUkFDRV9MRVZFTF9XQVJOSU5HLEZMQUdTPU9UX01BQ30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvTWFjLCAiWyVwXU1BQyUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nSW5mb01hY3tMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9NQUN9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nRGViZ01hYywgIlslcF1NQUMlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdNYWN7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRSxGTEFHUz1PVF9NQUN9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nRGViZ01hY0VyciwgIlslcF1NQUMlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdNYWNFcnJ7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRSxGTEFHUz1PVF9NQUN9KENUWCwgRVhQLCBNU0csIC4uLik7CisvLyBVU0VTVUZGSVgob3RMb2dEZWJnTWFjRXJyLCAiLCAlIW90RXJyb3IhIiwgRVhQKTsKKy8vIGVuZF93cHAKKworLy8gPT1NRU09PQorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nQ3JpdE1lbSwgIlslcF1NRU0lIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0NyaXRNZW17TEVWRUw9VFJBQ0VfTEVWRUxfRVJST1IsRkxBR1M9T1RfTUVNfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5NZW0sICJbJXBdTUVNJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dXYXJuTWVte0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfTUVNfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0luZm9NZW0sICJbJXBdTUVNJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvTWVte0xFVkVMPVRSQUNFX0xFVkVMX0lORk9STUFUSU9OLEZMQUdTPU9UX01FTX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dEZWJnTWVtLCAiWyVwXU1FTSUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nRGViZ01lbXtMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFLEZMQUdTPU9UX01FTX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09RFVNUD09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIG90TG9nRHVtcHtMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFLEZMQUdTPU9UX0RVTVB9KE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gPT1NRU09PQorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nQ3JpdE5ldERpYWcsICJbJXBdTkVURCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nQ3JpdE5ldERpYWd7TEVWRUw9VFJBQ0VfTEVWRUxfRVJST1IsRkxBR1M9T1RfTkRJQUd9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nV2Fybk5ldERpYWcsICJbJXBdTkVURCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2Fybk5ldERpYWd7TEVWRUw9VFJBQ0VfTEVWRUxfV0FSTklORyxGTEFHUz1PVF9ORElBR30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvTmV0RGlhZywgIlslcF1ORVREJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvTmV0RGlhZ3tMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9ORElBR30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dEZWJnTmV0RGlhZywgIlslcF1ORVREJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dEZWJnTmV0RGlhZ3tMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFLEZMQUdTPU9UX05ESUFHfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gPT1DT0FQPT0KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NyaXRDb2FwLCAiWyVwXUNPQVAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0NyaXRDb2Fwe0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SLEZMQUdTPU9UX0NPQVB9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nV2FybkNvYXAsICJbJXBdQ09BUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2FybkNvYXB7TEVWRUw9VFJBQ0VfTEVWRUxfV0FSTklORyxGTEFHUz1PVF9DT0FQfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0luZm9Db2FwLCAiWyVwXUNPQVAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0luZm9Db2Fwe0xFVkVMPVRSQUNFX0xFVkVMX0lORk9STUFUSU9OLEZMQUdTPU9UX0NPQVB9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nSW5mb0NvYXBFcnIsICJbJXBdQ09BUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nSW5mb0NvYXBFcnJ7TEVWRUw9VFJBQ0VfTEVWRUxfSU5GT1JNQVRJT04sRkxBR1M9T1RfQ09BUH0oQ1RYLCBFWFAsIE1TRywgLi4uKTsKKy8vIFVTRVNVRkZJWChvdExvZ0luZm9Db2FwRXJyLCAiLCAlIW90RXJyb3IhIiwgRVhQKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdDb2FwLCAiWyVwXUNPQVAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdDb2Fwe0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfQ09BUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09RlVOQz09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWChvdExvZ0Z1bmNFbnRyeSwgIi0tLT4gJSFGVU5DISIpOworLy8gRlVOQyBvdExvZ0Z1bmNFbnRyeXtMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFLEZMQUdTPU9UX0RFRkFVTFR9KC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWChvdExvZ0Z1bmNFbnRyeU1zZywgIi0tLT4gJSFGVU5DISUhU1BBQ0UhIik7CisvLyBGVU5DIG90TG9nRnVuY0VudHJ5TXNne0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfREVGQVVMVH0oTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVgob3RMb2dGdW5jRXhpdCwgIjwtLS0gJSFGVU5DISIpOworLy8gRlVOQyBvdExvZ0Z1bmNFeGl0e0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfREVGQVVMVH0oLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYKG90TG9nRnVuY0V4aXRNc2csICI8LS0tICUhRlVOQyElIVNQQUNFISIpOworLy8gRlVOQyBvdExvZ0Z1bmNFeGl0TXNne0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfREVGQVVMVH0oTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVgob3RMb2dGdW5jRXhpdEVyciwgIjwtLS0gJSFGVU5DISIpOworLy8gRlVOQyBvdExvZ0Z1bmNFeGl0RXJye0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfREVGQVVMVH0oRVhQKTsKKy8vIFVTRVNVRkZJWChvdExvZ0Z1bmNFeGl0RXJyLCAiICUhb3RFcnJvciEiLCBFWFApOworLy8gZW5kX3dwcAorCisjZW5kaWYgLy8gX0xPR0dJTkdfV0lORE9XU19ICmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDlhYjRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBkZWJ1ZyBsb2cgc2VydmljZS4KKyAqLworCisjaWZuZGVmIExPR0dJTkdfSF8KKyNkZWZpbmUgTE9HR0lOR19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBwbGF0LWxvZ2dpbmcKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgZGVidWcgbG9nIHNlcnZpY2UuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBMb2cgbGV2ZWxzLgorICovCisjZGVmaW5lIE9UX0xPR19MRVZFTF9OT05FICAwICAvLy88IE5vbmUKKyNkZWZpbmUgT1RfTE9HX0xFVkVMX0NSSVQgIDEgIC8vLzwgQ3JpdGljYWwKKyNkZWZpbmUgT1RfTE9HX0xFVkVMX1dBUk4gIDIgIC8vLzwgV2FybmluZworI2RlZmluZSBPVF9MT0dfTEVWRUxfSU5GTyAgMyAgLy8vPCBJbmZvCisjZGVmaW5lIE9UX0xPR19MRVZFTF9ERUJHICA0ICAvLy88IERlYnVnCisKK3R5cGVkZWYgdWludDhfdCBvdExvZ0xldmVsOworCisvKioKKyAqIFRoaXMgZW51bSByZXByZXNlbnRzIGxvZyByZWdpb25zLgorICoKKyAqLwordHlwZWRlZiBlbnVtIG90TG9nUmVnaW9uCit7CisgICAgT1RfTE9HX1JFR0lPTl9BUEkgICAgICA9IDEsICAvLy88IE9wZW5UaHJlYWQgQVBJCisgICAgT1RfTE9HX1JFR0lPTl9NTEUgICAgICA9IDIsICAvLy88IE1MRQorICAgIE9UX0xPR19SRUdJT05fQVJQICAgICAgPSAzLCAgLy8vPCBFSUQtdG8tUkxPQyBtYXBwaW5nLgorICAgIE9UX0xPR19SRUdJT05fTkVUX0RBVEEgPSA0LCAgLy8vPCBOZXR3b3JrIERhdGEKKyAgICBPVF9MT0dfUkVHSU9OX0lDTVAgICAgID0gNSwgIC8vLzwgSUNNUHY2CisgICAgT1RfTE9HX1JFR0lPTl9JUDYgICAgICA9IDYsICAvLy88IElQdjYKKyAgICBPVF9MT0dfUkVHSU9OX01BQyAgICAgID0gNywgIC8vLzwgSUVFRSA4MDIuMTUuNCBNQUMKKyAgICBPVF9MT0dfUkVHSU9OX01FTSAgICAgID0gOCwgIC8vLzwgTWVtb3J5CisgICAgT1RfTE9HX1JFR0lPTl9OQ1AgICAgICA9IDksICAvLy88IE5DUAorICAgIE9UX0xPR19SRUdJT05fTUVTSF9DT1AgPSAxMCwgLy8vPCBNZXNoIENvbW1pc3Npb25pbmcgUHJvdG9jb2wKKyAgICBPVF9MT0dfUkVHSU9OX05FVF9ESUFHID0gMTEsIC8vLzwgTmV0d29yayBEaWFnbm9zdGljCisgICAgT1RfTE9HX1JFR0lPTl9QTEFURk9STSA9IDEyLCAvLy88IFBsYXRmb3JtCisgICAgT1RfTE9HX1JFR0lPTl9DT0FQICAgICA9IDEzLCAvLy88IENvQVAKK30gb3RMb2dSZWdpb247CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBvdXRwdXRzIGxvZ3MuCisgKgorICogQHBhcmFtW2luXSAgYUxvZ0xldmVsICAgVGhlIGxvZyBsZXZlbC4KKyAqIEBwYXJhbVtpbl0gIGFMb2dSZWdpb24gIFRoZSBsb2cgcmVnaW9uLgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgICAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCit2b2lkIG90UGxhdExvZyhvdExvZ0xldmVsIGFMb2dMZXZlbCwgb3RMb2dSZWdpb24gYUxvZ1JlZ2lvbiwgY29uc3QgY2hhciAqYUZvcm1hdCwgLi4uKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIERFQlVHX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vbWVtb3J5LmggYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhZGE1OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9tZW1vcnkuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4KKyAqLworCisjaWZuZGVmIE1FTU9SWV9IXworI2RlZmluZSBNRU1PUllfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIHBsYXQtbWVtb3J5CisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4KKyAqCisgKiBAeworICoKKyAqLworCisvKgorICogT3BlblRocmVhZCBvbmx5IHJlcXVpcmVzIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gd2hlbiBzdXBwb3J0aW5nIG11bHRpcGxlIHNpbXVsdGFuZW91cyBpbnN0YW5jZXMsIGZvciBNYmVkVGxzLgorICovCisKKy8qKgorICogRHluYW1pY2FsbHkgYWxsb2NhdGVzIG5ldyBtZW1vcnkuIE9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgaXQsIHNob3VsZCBqdXN0IHJlZGlyZWN0IHRvIGNhbGxvYy4gRm9yCisgKiB0aG9zZSB0aGF0IGRvbid0IHN1cHBvcnQgY2FsbG9jLCBzaG91bGQgc3VwcG9ydCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5OgorICoKKyAqICAgIlRoZSBjYWxsb2MoKSBmdW5jdGlvbiBjb250aWd1b3VzbHkgYWxsb2NhdGVzIGVub3VnaCBzcGFjZSBmb3IgY291bnQgb2JqZWN0cyB0aGF0IGFyZSBzaXplIGJ5dGVzIG9mCisgKiAgIG1lbW9yeSBlYWNoIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gVGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgZmlsbGVkIHdpdGggYnl0ZXMKKyAqICAgb2YgdmFsdWUgemVyby4iCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYW5kIGNhbiBPTkxZIGJlIHVzZWQgb25seSB3aGVuIHN1cHBvcnQgZm9yIG11bHRpcGxlIE9wZW5UaHJlYWQgaW5zdGFuY2VzIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSBhTnVtICAgVGhlIG51bWJlciBvZiBibG9ja3MgdG8gYWxsb2NhdGUKKyAqIEBwYXJhbVtpbl0gYVNpemUgIFRoZSBzaXplIG9mIGVhY2ggYmxvY2sgdG8gYWxsb2NhdGUKKyAqCisgKiBAcmV0dmFsIHZvaWQqICBUaGUgcG9pbnRlciB0byB0aGUgZnJvbnQgb2YgdGhlIG1lbW9yeSBhbGxvY2F0ZWQKKyAqIEByZXR2YWwgTlVMTCAgIEZhaWxlZCB0byBhbGxvY2F0ZSB0aGUgbWVtb3J5IHJlcXVlc3RlZC4KKyAqLwordm9pZCAqb3RQbGF0Q0FsbG9jKHNpemVfdCBhTnVtLCBzaXplX3QgYVNpemUpOworCisvKioKKyAqIEZyZWVzIG1lbW9yeSB0aGF0IHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYW5kIGNhbiBPTkxZIGJlIHVzZWQgb25seSB3aGVuIHN1cHBvcnQgZm9yIG11bHRpcGxlIE9wZW5UaHJlYWQgaW5zdGFuY2VzIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSBhUHRyICBBIHBvaW50ZXIgdGhlIG1lbW9yeSBibG9ja3MgdG8gZnJlZS4gVGhlIHBvaW50ZXIgbWF5IGJlIE5VTEwuCisgKi8KK3ZvaWQgb3RQbGF0RnJlZSh2b2lkICphUHRyKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIERFQlVHX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vbWVzc2FnZXBvb2wuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9tZXNzYWdlcG9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YTdlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vbWVzc2FnZXBvb2wuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBtZXNzYWdlIHBvb2wuCisgKi8KKworI2lmbmRlZiBNRVNTQUdFUE9PTF9IXworI2RlZmluZSBNRVNTQUdFUE9PTF9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL21lc3NhZ2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKy8qKgorICogQGFkZHRvZ3JvdXAgcGxhdC1tZXNzYWdlcG9vbAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBtZXNzYWdlIHBvb2wuCisgKgorICogQHsKKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGltcGxlbWVudGVkIG1lc3NhZ2UgcG9vbC4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gYU1pbk51bUZyZWVCdWZmZXJzICAgQW4gdWludDE2IGNvbnRhaW5pbmcgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyZWUgYnVmZmVycyBkZXNpcmVkIGJ5IE9wZW5UaHJlYWQuCisgKiBAcGFyYW1baW5dIGFCdWZmZXJTaXplICAgICAgICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIGEgQnVmZmVyIG9iamVjdC4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0TWVzc2FnZVBvb2xJbml0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYU1pbk51bUZyZWVCdWZmZXJzLCBzaXplX3QgYUJ1ZmZlclNpemUpOworCisvKioKKyAqIEFsbG9jYXRlIGEgYnVmZmVyIGZyb20gdGhlIHBsYXRmb3JtIG1hbmFnZWQgYnVmZmVyIHBvb2wuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBCdWZmZXIgb3IgTlVMTCBpZiBubyBCdWZmZXJzIGFyZSBhdmFpbGFibGUuCisgKgorICovCitvdE1lc3NhZ2UgKm90UGxhdE1lc3NhZ2VQb29sTmV3KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGZyZWUgYSBCdWZmZXIgYmFjayB0byB0aGUgcGxhdGZvcm0gbWFuYWdlZCBidWZmZXIgcG9vbC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byB0aGUgT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFCdWZmZXIgICAgVGhlIEJ1ZmZlciB0byBmcmVlLgorICoKKyAqLwordm9pZCBvdFBsYXRNZXNzYWdlUG9vbEZyZWUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE1lc3NhZ2UgKmFCdWZmZXIpOworCisvKioKKyAqIEdldCB0aGUgbnVtYmVyIG9mIGZyZWUgYnVmZmVycy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byB0aGUgT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgY3VycmVudGx5IGZyZWUgYW5kIGF2YWlsYWJsZSB0byBPcGVuVGhyZWFkLgorICoKKyAqLwordWludDE2X3Qgb3RQbGF0TWVzc2FnZVBvb2xOdW1GcmVlQnVmZmVycyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisvKioKKyAqIEB9CisgKgorICovCisKKworI2VuZGlmICAvLyBNRVNTQUdFUE9PTF9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9taXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExNWMwZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9taXNjLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgcGxhdGZvcm0gYWJzdHJhY3Rpb25zIGZvciBtaXNjZWxsYW5lb3VzIGJlaGF2aW9ycy4KKyAqLworCisjaWZuZGVmIE9UX1BMQVRGT1JNX01JU0NfSAorI2RlZmluZSBPVF9QTEFURk9STV9NSVNDX0ggMQorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBwbGF0LW1pc2MKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgcGxhdGZvcm0gYWJzdHJhY3Rpb25zIGZvciBtaXNjZWxsYW5lb3VzIGJlaGF2aW9ycy4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBzb2Z0d2FyZSByZXNldCBvbiB0aGUgcGxhdGZvcm0sIGlmIHN1cHBvcnRlZC4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBvdFBsYXRSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIHJlc2V0IHJlYXNvbiBjb2Rlcy4KKyAqCisgKiBUaGVzZSBhcmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIFNwaW5lbCByZXNldCByZWFzb24gY29kZXMuCisgKgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBPVF9QTEFUX1JFU0VUX1JFQVNPTl9QT1dFUl9PTiAgICAgICA9IDAsCisgICAgT1RfUExBVF9SRVNFVF9SRUFTT05fRVhURVJOQUwgICAgICAgPSAxLAorICAgIE9UX1BMQVRfUkVTRVRfUkVBU09OX1NPRlRXQVJFICAgICAgID0gMiwKKyAgICBPVF9QTEFUX1JFU0VUX1JFQVNPTl9GQVVMVCAgICAgICAgICA9IDMsCisgICAgT1RfUExBVF9SRVNFVF9SRUFTT05fQ1JBU0ggICAgICAgICAgPSA0LAorICAgIE9UX1BMQVRfUkVTRVRfUkVBU09OX0FTU0VSVCAgICAgICAgID0gNSwKKyAgICBPVF9QTEFUX1JFU0VUX1JFQVNPTl9PVEhFUiAgICAgICAgICA9IDYsCisgICAgT1RfUExBVF9SRVNFVF9SRUFTT05fVU5LTk9XTiAgICAgICAgPSA3LAorICAgIE9UX1BMQVRfUkVTRVRfUkVBU09OX1dBVENIRE9HICAgICAgID0gOCwKKworICAgIE9UX1BMQVRfUkVTRVRfUkVBU09OX0NPVU5ULAorfSBvdFBsYXRSZXNldFJlYXNvbjsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlYXNvbiBmb3IgdGhlIGxhc3QgcGxhdGZvcm0gcmVzZXQuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK290UGxhdFJlc2V0UmVhc29uIG90UGxhdEdldFJlc2V0UmVhc29uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciBhc3NlcnQuCisgKgorICogQHBhcmFtW2luXSBhRmlsZW5hbWUgICAgVGhlIG5hbWUgb2YgdGhlIGZpbGUgd2hlcmUgdGhlIGFzc2VydCBvY2N1cnJlZC4KKyAqIEBwYXJhbVtpbl0gYUxpbmVOdW1iZXIgIFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZmlsZSB3aGVyZSB0aGUgYXNzZXJ0IG9jY3VycmVkLgorICoKKyAqLwordm9pZCBvdFBsYXRBc3NlcnRGYWlsKGNvbnN0IGNoYXIgKmFGaWxlbmFtZSwgaW50IGFMaW5lTnVtYmVyKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgcGxhdGZvcm0gc3BlY2lmaWMgb3BlcmF0aW9uIHRvIHdha2UgdGhlIGhvc3QgTUNVLgorICogVGhpcyBpcyB1c2VkIG9ubHkgZm9yIE5DUCBjb25maWd1cmF0aW9ucy4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0V2FrZUhvc3Qodm9pZCk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPVF9QTEFURk9STV9NSVNDX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1MTE0MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9wbGF0Zm9ybS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5pdGlhbGl6ZXJzLgorICovCisKKyNpZm5kZWYgUExBVEZPUk1fSF8KKyNkZWZpbmUgUExBVEZPUk1fSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYWxsIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLgorICoKKyAqLwordm9pZCBQbGF0Zm9ybUluaXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbGwgcGxhdGZvcm0tc3BlY2lmaWMgZGVpbml0aWFsaXphdGlvbi4KKyAqCisgKi8KK3ZvaWQgUGxhdGZvcm1EZWluaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbGwgcGxhdGZvcm0tc3BlY2lmaWMgcHJvY2Vzc2luZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgUGxhdGZvcm1Qcm9jZXNzRHJpdmVycyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGVuZCBvZiBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBQTEFURk9STV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmggYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODFjZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmgKQEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgcmFkaW8gaW50ZXJmYWNlIGZvciBPcGVuVGhyZWFkLgorICoKKyAqLworCisjaWZuZGVmIFJBRElPX0hfCisjZGVmaW5lIFJBRElPX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIHBsYXQtcmFkaW8KKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciByYWRpbyBjb21tdW5pY2F0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogQGRlZmdyb3VwIHJhZGlvLXR5cGVzIFR5cGVzCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgYSByYWRpbyBmcmFtZS4KKyAqCisgKiBAeworICoKKyAqLworCitlbnVtCit7CisgICAgT1RfUkFESU9fRlJBTUVfTUFYX1NJWkUgICAgICA9IDEyNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgYU1heFBIWVBhY2tldFNpemUgKElFRUUgODAyLjE1LjQtMjAwNikKKyAgICBPVF9SQURJT19DSEFOTkVMX01JTiAgICAgICAgID0gMTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCAyLjQgR0h6IElFRUUgODAyLjE1LjQtMjAwNgorICAgIE9UX1JBRElPX0NIQU5ORUxfTUFYICAgICAgICAgPSAyNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IDIuNCBHSHogSUVFRSA4MDIuMTUuNC0yMDA2CisgICAgT1RfUkFESU9fU1VQUE9SVEVEX0NIQU5ORUxTICA9IDB4ZmZmZiA8PCBPVF9SQURJT19DSEFOTkVMX01JTiwgIC8vLzwgMi40IEdIeiBJRUVFIDgwMi4xNS40LTIwMDYKKyAgICBPVF9SQURJT19TWU1CT0xTX1BFUl9PQ1RFVCAgID0gMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCAyLjQgR0h6IElFRUUgODAyLjE1LjQtMjAwNgorICAgIE9UX1JBRElPX0JJVF9SQVRFICAgICAgICAgICAgPSAyNTAwMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IDIuNCBHSHogSUVFRSA4MDIuMTUuNCAoa2lsb2JpdHMgcGVyIHNlY29uZCkKKworICAgIE9UX1JBRElPX0JJVFNfUEVSX09DVEVUICA9IDgsICAgICAgLy8vPCBOdW1iZXIgb2YgYml0cyBwZXIgb2N0ZXQKKyAgICBPVF9SQURJT19TWU1CT0xfVElNRSAgICAgPSAoKE9UX1JBRElPX0JJVFNfUEVSX09DVEVUIC8gT1RfUkFESU9fU1lNQk9MU19QRVJfT0NURVQpICogMTAwMDAwMCkgLyBPVF9SQURJT19CSVRfUkFURSwKKworICAgIE9UX1JBRElPX0xRSV9OT05FICAgICAgICA9IDAsICAgICAgLy8vPCBMUUkgbWVhc3VyZW1lbnQgbm90IHN1cHBvcnRlZAorICAgIE9UX1JBRElPX1JTU0lfSU5WQUxJRCAgICA9IDEyNywgICAgLy8vPCBJbnZhbGlkIG9yIHVua25vd24gUlNTSSB2YWx1ZQorfTsKKworLyoqCisgKiBUaGlzIGVudW0gcmVwcmVzZW50cyByYWRpbyBjYXBhYmlsaXRpZXMuCisgKgorICovCit0eXBlZGVmIGVudW0gb3RSYWRpb0NhcHMKK3sKKyAgICBPVF9SQURJT19DQVBTX05PTkUgICAgICAgICAgICAgID0gMCwgIC8vLzwgTm9uZQorICAgIE9UX1JBRElPX0NBUFNfQUNLX1RJTUVPVVQgICAgICAgPSAxLCAgLy8vPCBSYWRpbyBzdXBwb3J0cyBBY2tUaW1lIGV2ZW50CisgICAgT1RfUkFESU9fQ0FQU19FTkVSR1lfU0NBTiAgICAgICA9IDIsICAvLy88IFJhZGlvIHN1cHBvcnRzIEVuZXJneSBTY2FucworICAgIE9UX1JBRElPX0NBUFNfVFJBTlNNSVRfUkVUUklFUyAgPSA0LCAgLy8vPCBSYWRpbyBzdXBwb3J0cyB0cmFuc21pc3Npb24gcmV0cnkgbG9naWMgd2l0aCBjb2xsaXNpb24gYXZvaWRhbmNlIChDU01BKS4KKyAgICBPVF9SQURJT19DQVBTX0NTTUFfQkFDS09GRiAgICAgID0gOCwgIC8vLzwgUmFkaW8gc3VwcG9ydHMgQ1NNQSBiYWNrb2ZmIGZvciBmcmFtZSB0cmFuc21pc3Npb24gKGJ1dCBubyByZXRyeSkuCit9IG90UmFkaW9DYXBzOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gSUVFRSA4MDIuMTUuNCByYWRpbyBmcmFtZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RSYWRpb0ZyYW1lCit7CisgICAgdWludDhfdCAgKm1Qc2R1OyAgICAgICAgICAgIC8vLzwgVGhlIFBTRFUuCisgICAgdWludDhfdCAgbUxlbmd0aDsgICAgICAgICAgIC8vLzwgTGVuZ3RoIG9mIHRoZSBQU0RVLgorICAgIHVpbnQ4X3QgIG1DaGFubmVsOyAgICAgICAgICAvLy88IENoYW5uZWwgdXNlZCB0byB0cmFuc21pdC9yZWNlaXZlIHRoZSBmcmFtZS4KKyAgICBpbnQ4X3QgICBtUG93ZXI7ICAgICAgICAgICAgLy8vPCBUcmFuc21pdC9yZWNlaXZlIHBvd2VyIGluIGRCbS4KKyAgICB1aW50OF90ICBtTHFpOyAgICAgICAgICAgICAgLy8vPCBMaW5rIFF1YWxpdHkgSW5kaWNhdG9yIGZvciByZWNlaXZlZCBmcmFtZXMuCisgICAgdWludDhfdCAgbU1heFR4QXR0ZW1wdHM7ICAgIC8vLzwgTWF4IG51bWJlciBvZiB0cmFuc21pdCBhdHRlbXB0cyBmb3IgYW4gb3V0Ym91bmQgZnJhbWUuCisgICAgYm9vbCAgICAgbVNlY3VyaXR5VmFsaWQ6IDE7IC8vLzwgU2VjdXJpdHkgRW5hYmxlZCBmbGFnIGlzIHNldCBhbmQgZnJhbWUgcGFzc2VzIHNlY3VyaXR5IGNoZWNrcy4KKyAgICBib29sICAgICBtRGlkVFg6IDE7ICAgICAgICAgLy8vPCBTZXQgdG8gdHJ1ZSBpZiB0aGlzIGZyYW1lIHNlbnQgZnJvbSB0aGUgcmFkaW8uIElnbm9yZWQgYnkgcmFkaW8gZHJpdmVyLgorICAgIGJvb2wgICAgIG1Jc0FSZXR4OiAxOyAgICAgICAvLy88IFNldCB0byB0cnVlIGlmIHRoaXMgZnJhbWUgaXMgYSByZXRyYW5zbWlzc2lvbi4gU2hvdWxkIGJlIGlnbm9yZWQgYnkgcmFkaW8gZHJpdmVyLgorfSBvdFJhZGlvRnJhbWU7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYSByYWRpby4KKyAqIEluaXRpYWxseSwgYSByYWRpbyBpcyBpbiB0aGUgRGlzYWJsZWQgc3RhdGUuCisgKi8KK3R5cGVkZWYgZW51bSBvdFJhZGlvU3RhdGUKK3sKKyAgICBPVF9SQURJT19TVEFURV9ESVNBQkxFRCA9IDAsCisgICAgT1RfUkFESU9fU1RBVEVfU0xFRVAgICAgPSAxLAorICAgIE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUgID0gMiwKKyAgICBPVF9SQURJT19TVEFURV9UUkFOU01JVCA9IDMsCit9IG90UmFkaW9TdGF0ZTsKKworLyoqCisgKiBUaGUgZm9sbG93aW5nIGFyZSB2YWxpZCByYWRpbyBzdGF0ZSB0cmFuc2l0aW9uczoKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSYWRpbyBPTikKKyAqICArLS0tLS0tLS0tLSsgIEVuYWJsZSgpICArLS0tLS0tLSsgIFJlY2VpdmUoKSArLS0tLS0tLS0tKyAgIFRyYW5zbWl0KCkgICstLS0tLS0tLS0tKworICogIHwgICAgICAgICAgfC0tLS0tLS0tLS0tPnwgICAgICAgfC0tLS0tLS0tLS0tPnwgICAgICAgICB8LS0tLS0tLS0tLS0tLS0+fCAgICAgICAgICB8CisgKiAgfCBEaXNhYmxlZCB8ICAgICAgICAgICAgfCBTbGVlcCB8ICAgICAgICAgICAgfCBSZWNlaXZlIHwgICAgICAgICAgICAgICB8IFRyYW5zbWl0IHwKKyAqICB8ICAgICAgICAgIHw8LS0tLS0tLS0tLS18ICAgICAgIHw8LS0tLS0tLS0tLS18ICAgICAgICAgfDwtLS0tLS0tLS0tLS0tLXwgICAgICAgICAgfAorICogICstLS0tLS0tLS0tKyAgRGlzYWJsZSgpICstLS0tLS0tKyAgIFNsZWVwKCkgICstLS0tLS0tLS0rICAgUmVjZWl2ZSgpICAgKy0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSYWRpbyBPRkYpICAgICAgICAgICAgICAgICBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCBUcmFuc21pdERvbmUKKyAqLworCisvKioKKyAqIEB9CisgKgorICovCisKKy8qKgorICogQGRlZmdyb3VwIHJhZGlvLWNvbmZpZyBDb25maWd1cmF0aW9uCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgcmFkaW8gY29uZmlndXJhdGlvbi4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIEdldCB0aGUgZmFjdG9yeS1hc3NpZ25lZCBJRUVFIEVVSS02NCBmb3IgdGhpcyBpbnRlcmZhY2UuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW291dF0gYUllZWVFdWk2NCAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmYWN0b3J5LWFzc2lnbmVkIElFRUUgRVVJLTY0IHdpbGwgYmUgcGxhY2VkLgorICoKKyAqLwordm9pZCBvdFBsYXRSYWRpb0dldEllZWVFdWk2NChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFJZWVlRXVpNjQpOworCisvKioKKyAqIFNldCB0aGUgUEFOIElEIGZvciBhZGRyZXNzIGZpbHRlcmluZy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSBhUGFuSWQgICAgIFRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRC4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9TZXRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQYW5JZCk7CisKKy8qKgorICogU2V0IHRoZSBFeHRlbmRlZCBBZGRyZXNzIGZvciBhZGRyZXNzIGZpbHRlcmluZy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgICAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gYUV4dGVuZGVkQWRkcmVzcyAgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgKgorICovCit2b2lkIG90UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCAqYUV4dGVuZGVkQWRkcmVzcyk7CisKKy8qKgorICogU2V0IHRoZSBTaG9ydCBBZGRyZXNzIGZvciBhZGRyZXNzIGZpbHRlcmluZy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gYVNob3J0QWRkcmVzcyAgVGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisvKioKKyAqIEBkZWZncm91cCByYWRpby1vcGVyYXRpb24gT3BlcmF0aW9uCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgcmFkaW8gb3BlcmF0aW9ucy4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIEdldCBjdXJyZW50IHN0YXRlIG9mIHRoZSByYWRpby4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZXF1aXJlZCBieSBPcGVuVGhyZWFkLiBJdCBtYXkgYmUgdXNlZCBmb3IgZGVidWdnaW5nIGFuZC9vciBhcHBsaWNhdGlvbi1zcGVjaWZpYyBwdXJwb3Nlcy4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIG1heSBiZSBub3QgaW1wbGVtZW50ZWQuIEl0IGRvZXMgbm90IGFmZmVjdCBPcGVuVGhyZWFkLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiAgQ3VycmVudCBzdGF0ZSBvZiB0aGUgcmFkaW8uCisgKi8KK290UmFkaW9TdGF0ZSBvdFBsYXRSYWRpb0dldFN0YXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogRW5hYmxlIHRoZSByYWRpby4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVuYWJsZWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgIFRoZSByYWRpbyBjb3VsZCBub3QgYmUgZW5hYmxlZC4KKyAqLworb3RFcnJvciBvdFBsYXRSYWRpb0VuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIERpc2FibGUgdGhlIHJhZGlvLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgdHJhbnNpdGlvbmVkIHRvIERpc2FibGVkLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIENoZWNrIHdoZXRoZXIgcmFkaW8gaXMgZW5hYmxlZCBvciBub3QuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJucyBUUlVFIGlmIHRoZSByYWRpbyBpcyBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UuCisgKgorICovCitib29sIG90UGxhdFJhZGlvSXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVHJhbnNpdGlvbiB0aGUgcmFkaW8gZnJvbSBSZWNlaXZlIHRvIFNsZWVwLgorICogVHVybiBvZmYgdGhlIHJhZGlvLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSB0cmFuc2l0aW9uZWQgdG8gU2xlZXAuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0JVU1kgICAgICAgICAgVGhlIHJhZGlvIHdhcyB0cmFuc21pdHRpbmcKKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSBUaGUgcmFkaW8gd2FzIGRpc2FibGVkCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9TbGVlcChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRyYW5zaXRpb25pbmcgdGhlIHJhZGlvIGZyb20gU2xlZXAgdG8gUmVjZWl2ZS4KKyAqIFR1cm4gb24gdGhlIHJhZGlvLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUNoYW5uZWwgICBUaGUgY2hhbm5lbCB0byB1c2UgZm9yIHJlY2VpdmluZy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHRyYW5zaXRpb25lZCB0byBSZWNlaXZlLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFIFRoZSByYWRpbyB3YXMgZGlzYWJsZWQgb3IgdHJhbnNtaXR0aW5nLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvUmVjZWl2ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoYW5uZWwpOworCisvKioKKyAqIEVuYWJsZS9EaXNhYmxlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIGZlYXR1cmUuCisgKgorICogVGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIGZlYXR1cmUgY29udHJvbHMgaG93IHRoZSByYWRpbyBsYXllciBkZWNpZGVzIHRoZSAiZnJhbWUgcGVuZGluZyIgYml0IGZvciBhY2tzIHNlbnQgaW4KKyAqIHJlc3BvbnNlIHRvIGRhdGEgcmVxdWVzdCBjb21tYW5kcyBmcm9tIGNoaWxkcmVuLgorICoKKyAqIElmIGRpc2FibGVkLCB0aGUgcmFkaW8gbGF5ZXIgbXVzdCBzZXQgdGhlICJmcmFtZSBwZW5kaW5nIiBvbiBhbGwgYWNrcyB0byBkYXRhIHJlcXVlc3QgY29tbWFuZHMuCisgKgorICogSWYgZW5hYmxlZCwgdGhlIHJhZGlvIGxheWVyIHVzZXMgdGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHNldCBvciBjbGVhciB0aGUgImZyYW1lCisgKiBwZW5kaW5nIiBiaXQgaW4gYW4gYWNrIHRvIGEgZGF0YSByZXF1ZXN0IGNvbW1hbmQuCisgKgorICogVGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlIHByb3ZpZGVzIHRoZSBsaXN0IG9mIGNoaWxkcmVuIGZvciB3aGljaCB0aGVyZSBpcyBhIHBlbmRpbmcgZnJhbWUuIEVpdGhlciBhIHNob3J0CisgKiBhZGRyZXNzIG9yIGFuIGV4dGVuZGVkL2xvbmcgYWRkcmVzcyBjYW4gYmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFFbmFibGUgICAgIEVuYWJsZS9kaXNhYmxlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIGZlYXR1cmUuCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9FbmFibGVTcmNNYXRjaChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSk7CisKKy8qKgorICogQWRkIGEgc2hvcnQgYWRkcmVzcyB0byB0aGUgc291cmNlIGFkZHJlc3MgbWF0Y2ggdGFibGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYVNob3J0QWRkcmVzcyAgVGhlIHNob3J0IGFkZHJlc3MgdG8gYmUgYWRkZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHNob3J0IGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgIE5vIGF2YWlsYWJsZSBlbnRyeSBpbiB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcyk7CisKKy8qKgorICogQWRkIGFuIGV4dGVuZGVkIGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgVGhlIGV4dGVuZGVkIGFkZHJlc3MgdG8gYmUgYWRkZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIGV4dGVuZGVkIGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgIE5vIGF2YWlsYWJsZSBlbnRyeSBpbiB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKTsKKworLyoqCisgKiBSZW1vdmUgYSBzaG9ydCBhZGRyZXNzIGZyb20gdGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFTaG9ydEFkZHJlc3MgIFRoZSBzaG9ydCBhZGRyZXNzIHRvIGJlIHJlbW92ZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCBzaG9ydCBhZGRyZXNzIGZyb20gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQUREUkVTUyAgVGhlIHNob3J0IGFkZHJlc3MgaXMgbm90IGluIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKTsKKworLyoqCisgKiBSZW1vdmUgYW4gZXh0ZW5kZWQgYWRkcmVzcyBmcm9tIHRoZSBzb3VyY2UgYWRkcmVzcyBtYXRjaCB0YWJsZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUV4dEFkZHJlc3MgIFRoZSBleHRlbmRlZCBhZGRyZXNzIHRvIGJlIHJlbW92ZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgZXh0ZW5kZWQgYWRkcmVzcyBmcm9tIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0FERFJFU1MgIFRoZSBleHRlbmRlZCBhZGRyZXNzIGlzIG5vdCBpbiBzb3VyY2UgYWRkcmVzcyBtYXRjaCB0YWJsZS4KKyAqLworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKTsKKworLyoqCisgKiBDbGVhciBhbGwgc2hvcnQgYWRkcmVzc2VzIGZyb20gdGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQ2xlYXIgYWxsIHRoZSBleHRlbmRlZC9sb25nIGFkZHJlc3NlcyBmcm9tIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoZSByYWRpbyBkcml2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gbm90aWZ5IE9wZW5UaHJlYWQgb2YgYSByZWNlaXZlZCBmcmFtZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUZyYW1lICAgIEEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgZnJhbWUgb3IgTlVMTCBpZiB0aGUgcmVjZWl2ZSBvcGVyYXRpb24gZmFpbGVkLgorICogQHBhcmFtW2luXSAgYUVycm9yICAgIE9UX0VSUk9SX05PTkUgd2hlbiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBmcmFtZSwgT1RfRVJST1JfQUJPUlQgd2hlbiByZWNlcHRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICB3YXMgYWJvcnRlZCBhbmQgYSBmcmFtZSB3YXMgbm90IHJlY2VpdmVkLCBPVF9FUlJPUl9OT19CVUZTIHdoZW4gYSBmcmFtZSBjb3VsZCBub3QgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZCBkdWUgdG8gbGFjayBvZiByeCBidWZmZXIgc3BhY2UuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKTsKKworLyoqCisgKiBUaGUgcmFkaW8gdHJhbnNpdGlvbnMgZnJvbSBUcmFuc21pdCB0byBSZWNlaXZlLgorICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHRyYW5zbWl0IGJ1ZmZlci4KKyAqCisgKiBUaGUgY2FsbGVyIGZvcm1zIHRoZSBJRUVFIDgwMi4xNS40IGZyYW1lIGluIHRoaXMgYnVmZmVyIHRoZW4gY2FsbHMgb3RQbGF0UmFkaW9UcmFuc21pdCgpIHRvIHJlcXVlc3QgdHJhbnNtaXNzaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSB0cmFuc21pdCBidWZmZXIuCisgKgorICovCitvdFJhZGlvRnJhbWUgKm90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIG1ldGhvZCBiZWdpbnMgdGhlIHRyYW5zbWl0IHNlcXVlbmNlIG9uIHRoZSByYWRpby4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgZm9ybSB0aGUgSUVFRSA4MDIuMTUuNCBmcmFtZSBpbiB0aGUgYnVmZmVyIHByb3ZpZGVkIGJ5IG90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIoKSBiZWZvcmUKKyAqIHJlcXVlc3RpbmcgdHJhbnNtaXNzaW9uLiAgVGhlIGNoYW5uZWwgYW5kIHRyYW5zbWl0IHBvd2VyIGFyZSBhbHNvIGluY2x1ZGVkIGluIHRoZSBvdFJhZGlvRnJhbWUgc3RydWN0dXJlLgorICoKKyAqIFRoZSB0cmFuc21pdCBzZXF1ZW5jZSBjb25zaXN0cyBvZjoKKyAqIDEuIFRyYW5zaXRpb25pbmcgdGhlIHJhZGlvIHRvIFRyYW5zbWl0IGZyb20gUmVjZWl2ZS4KKyAqIDIuIFRyYW5zbWl0cyB0aGUgcHNkdSBvbiB0aGUgZ2l2ZW4gY2hhbm5lbCBhbmQgYXQgdGhlIGdpdmVuIHRyYW5zbWl0IHBvd2VyLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dIGFGcmFtZSAgICAgQSBwb2ludGVyIHRvIHRoZSBmcmFtZSB0aGF0IHdpbGwgYmUgdHJhbnNtaXR0ZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSB0cmFuc2l0aW9uZWQgdG8gVHJhbnNtaXQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgVGhlIHJhZGlvIHdhcyBub3QgaW4gdGhlIFJlY2VpdmUgc3RhdGUuCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lKTsKKworLyoqCisgKiBUaGUgcmFkaW8gZHJpdmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG5vdGlmeSBPcGVuVGhyZWFkIHRoYXQgdGhlIHRyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkLAorICogdGhpcyBjYWxsYmFjayBwYXNzIHVwIHRoZSBBQ0sgZnJhbWUsIG5ldyBhZGQgcGxhdGZvcm1zIHNob3VsZCB1c2UgdGhpcyBjYWxsYmFjayBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICAgQSBwb2ludGVyIHRvIHRoZSBmcmFtZSB0aGF0IHdhcyB0cmFuc21pdHRlZC4KKyAqIEBwYXJhbVtpbl0gIGFBY2tGcmFtZSAgQSBwb2ludGVyIHRvIHRoZSBBQ0sgZnJhbWUsIE5VTEwgaWYgbm8gQUNLIHdhcyByZWNlaXZlZC4KKyAqIEBwYXJhbVtpbl0gIGFFcnJvciAgICAgT1RfRVJST1JfTk9ORSB3aGVuIHRoZSBmcmFtZSB3YXMgdHJhbnNtaXR0ZWQsIE9UX0VSUk9SX05PX0FDSyB3aGVuIHRoZSBmcmFtZSB3YXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXR0ZWQgYnV0IG5vIEFDSyB3YXMgcmVjZWl2ZWQsIE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgd2hlbiB0aGUgdHJhbnNtaXNzaW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvdWxkIG5vdCB0YWtlIHBsYWNlIGR1ZSB0byBhY3Rpdml0eSBvbiB0aGUgY2hhbm5lbCwgT1RfRVJST1JfQUJPUlQgd2hlbiB0cmFuc21pc3Npb24gd2FzCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgZm9yIG90aGVyIHJlYXNvbnMuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXRSYWRpb1R4RG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdFJhZGlvRnJhbWUgKmFBY2tGcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYUVycm9yKTsKKworLyoqCisgKiBUaGUgcmFkaW8gZHJpdmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG5vdGlmeSBPcGVuVGhyZWFkIHRoYXQgdGhlIHRyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkLAorICogdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBkZXByZWNhdGVkLCBuZXcgYWRkIHBsYXRmcm9tcyBzaG91bGQgbm90IHVzZSB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZnJhbWUgdGhhdCB3YXMgdHJhbnNtaXR0ZWQuCisgKiBAcGFyYW1baW5dICBhRnJhbWVQZW5kaW5nICBUUlVFIGlmIGFuIEFDSyBmcmFtZSB3YXMgcmVjZWl2ZWQgYW5kIHRoZSBGcmFtZSBQZW5kaW5nIGJpdCB3YXMgc2V0LgorICogQHBhcmFtW2luXSAgYUVycm9yICAgICAgICAgT1RfRVJST1JfTk9ORSB3aGVuIHRoZSBmcmFtZSB3YXMgdHJhbnNtaXR0ZWQsIE9UX0VSUk9SX05PX0FDSyB3aGVuIHRoZSBmcmFtZSB3YXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0dGVkIGJ1dCBubyBBQ0sgd2FzIHJlY2VpdmVkLCBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFIHdoZW4gdGhlIHRyYW5zbWlzc2lvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bGQgbm90IHRha2UgcGxhY2UgZHVlIHRvIGFjdGl2aXR5IG9uIHRoZSBjaGFubmVsLCBPVF9FUlJPUl9BQk9SVCB3aGVuIHRyYW5zbWlzc2lvbiB3YXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgZm9yIG90aGVyIHJlYXNvbnMuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXRSYWRpb1RyYW5zbWl0RG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBib29sIGFGcmFtZVBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEVycm9yIGFFcnJvcik7CisKKy8qKgorICogR2V0IHRoZSBtb3N0IHJlY2VudCBSU1NJIG1lYXN1cmVtZW50LgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybnMgVGhlIFJTU0kgaW4gZEJtIHdoZW4gaXQgaXMgdmFsaWQuICAxMjcgd2hlbiBSU1NJIGlzIGludmFsaWQuCisgKi8KK2ludDhfdCBvdFBsYXRSYWRpb0dldFJzc2kob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBHZXQgdGhlIHJhZGlvIGNhcGFiaWxpdGllcy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm5zIFRoZSByYWRpbyBjYXBhYmlsaXR5IGJpdCB2ZWN0b3IuIFRoZSBzdGFjayBlbmFibGVzIG9yIGRpc2FibGVzIHNvbWUgZnVuY3Rpb25zIGJhc2VkIG9uIHRoaXMgdmFsdWUuCisgKi8KK290UmFkaW9DYXBzIG90UGxhdFJhZGlvR2V0Q2FwcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgcmFkaW8gVHggcG93ZXIgdXNlZCBmb3IgYXV0by1nZW5lcmF0ZWQgZnJhbWVzLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dIGFQb3dlciAgICAgVGhlIFR4IHBvd2VyIHRvIHVzZSBpbiBkQm0uCisgKgorICovCit2b2lkIG90UGxhdFJhZGlvU2V0RGVmYXVsdFR4UG93ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYVBvd2VyKTsKKworLyoqCisgKiBHZXQgdGhlIHN0YXR1cyBvZiBwcm9taXNjdW91cyBtb2RlLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHZhbCB0cnVlICAgUHJvbWlzY3VvdXMgbW9kZSBpcyBlbmFibGVkLgorICogQHJldHZhbCBmYWxzZSAgUHJvbWlzY3VvdXMgbW9kZSBpcyBkaXNhYmxlZC4KKyAqLworYm9vbCBvdFBsYXRSYWRpb0dldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogRW5hYmxlIG9yIGRpc2FibGUgcHJvbWlzY3VvdXMgbW9kZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUVuYWJsZSAgIEEgdmFsdWUgdG8gZW5hYmxlIG9yIGRpc2FibGUgcHJvbWlzY3VvdXMgbW9kZS4KKyAqLwordm9pZCBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKTsKKworLyoqCisgKiBUaGUgcmFkaW8gZHJpdmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG5vdGlmeSBPcGVuVGhyZWFkIGRpYWdub3N0aWNzIG1vZHVsZSB0aGF0IHRoZSB0cmFuc21pc3Npb24gaGFzIGNvbXBsZXRlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGZyYW1lIHRoYXQgd2FzIHRyYW5zbWl0dGVkLgorICogQHBhcmFtW2luXSAgYUVycm9yICAgICAgICAgT1RfRVJST1JfTk9ORSB3aGVuIHRoZSBmcmFtZSB3YXMgdHJhbnNtaXR0ZWQsIE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgd2hlbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiBjb3VsZCBub3QgdGFrZSBwbGFjZSBkdWUgdG8gYWN0aXZpdHkgb24gdGhlIGNoYW5uZWwsIE9UX0VSUk9SX0FCT1JUIHdoZW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiB3YXMgYWJvcnRlZCBmb3Igb3RoZXIgcmVhc29ucy4KKyAqCisgKi8KK2V4dGVybiB2b2lkIG90UGxhdERpYWdSYWRpb1RyYW5zbWl0RG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisKKy8qKgorICogVGhlIHJhZGlvIGRyaXZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBub3RpZnkgT3BlblRocmVhZCBkaWFnbm9zdGljcyBtb2R1bGUgb2YgYSByZWNlaXZlZCBmcmFtZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUZyYW1lICAgIEEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgZnJhbWUgb3IgTlVMTCBpZiB0aGUgcmVjZWl2ZSBvcGVyYXRpb24gZmFpbGVkLgorICogQHBhcmFtW2luXSAgYUVycm9yICAgIE9UX0VSUk9SX05PTkUgd2hlbiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBmcmFtZSwgT1RfRVJST1JfQUJPUlQgd2hlbiByZWNlcHRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICB3YXMgYWJvcnRlZCBhbmQgYSBmcmFtZSB3YXMgbm90IHJlY2VpdmVkLCBPVF9FUlJPUl9OT19CVUZTIHdoZW4gYSBmcmFtZSBjb3VsZCBub3QgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZCBkdWUgdG8gbGFjayBvZiByeCBidWZmZXIgc3BhY2UuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXREaWFnUmFkaW9SZWNlaXZlRG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisKKy8qKgorICogVGhpcyBtZXRob2QgYmVnaW5zIHRoZSBlbmVyZ3kgc2NhbiBzZXF1ZW5jZSBvbiB0aGUgcmFkaW8uCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dIGFTY2FuQ2hhbm5lbCAgIFRoZSBjaGFubmVsIHRvIHBlcmZvcm0gdGhlIGVuZXJneSBzY2FuIG9uLgorICogQHBhcmFtW2luXSBhU2NhbkR1cmF0aW9uICBUaGUgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgZm9yIHRoZSBjaGFubmVsIHRvIGJlIHNjYW5uZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHNjYW5uaW5nIHRoZSBjaGFubmVsLgorICogQHJldHZhbCBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQgIFRoZSByYWRpbyBkb2Vzbid0IHN1cHBvcnQgZW5lcmd5IHNjYW5uaW5nLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uKTsKKworLyoqCisgKiBUaGUgcmFkaW8gZHJpdmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG5vdGlmeSBPcGVuVGhyZWFkIHRoYXQgdGhlIGVuZXJneSBzY2FuIGlzIGNvbXBsZXRlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUVuZXJneVNjYW5NYXhSc3NpICBUaGUgbWF4aW11bSBSU1NJIGVuY291bnRlcmVkIG9uIHRoZSBzY2FubmVkIGNoYW5uZWwuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXRSYWRpb0VuZXJneVNjYW5Eb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFFbmVyZ3lTY2FuTWF4UnNzaSk7CisKKy8qKgorICogR2V0IHRoZSByYWRpbyByZWNlaXZlIHNlbnNpdGl2aXR5IHZhbHVlLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybnMgVGhlIHJhZGlvIHJlY2VpdmUgc2Vuc2l0aXZpdHkgdmFsdWUgaW4gZEJtLgorICovCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZW5kIG9mIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFJBRElPX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmggYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiZjg5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaApAQCAtMCwwICsxLDkwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLgorICovCisKKyNpZm5kZWYgUkFORE9NX0hfCisjZGVmaW5lIFJBTkRPTV9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBwbGF0LXJhbmRvbQorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIEdldCBhIDMyLWJpdCByYW5kb20gdmFsdWUuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW1wbGVtZW50ZWQgdXNpbmcgYSBwc3VlZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgKgorICogQHJldHVybnMgQSAzMi1iaXQgcmFuZG9tIHZhbHVlLgorICoKKyAqLwordWludDMyX3Qgb3RQbGF0UmFuZG9tR2V0KHZvaWQpOworCisvKioKKyAqIEdldCB0cnVlIHJhbmRvbSB2YWx1ZSBzZXF1ZW5jZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgaW1wbGVtZW50ZWQgdXNpbmcgYSB0cnVlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChUUk5HKS4KKyAqCisgKiBAcGFyYW1bb3V0XSAgYU91dHB1dCAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSB0cnVlIHJhbmRvbSB2YWx1ZXMgYXJlIHBsYWNlZC4gIE11c3Qgbm90IGJlIE5VTEwuCisgKiBAcGFyYW1baW5dICAgYU91dHB1dExlbmd0aCAgICAgICAgU2l6ZSBvZiBAcCBhQnVmZmVyLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgZmlsbGVkIEBwIGFCdWZmZXIgd2l0aCB0cnVlIHJhbmRvbSB2YWx1ZXMuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgICAgICAgIEZhaWxlZCB0byBmaWxsIEBwIGFCdWZmZXIgd2l0aCB0cnVlIHJhbmRvbSB2YWx1ZXMuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUJ1ZmZlciB3YXMgc2V0IHRvIE5VTEwuCisgKgorICovCitvdEVycm9yIG90UGxhdFJhbmRvbUdldFRydWUodWludDhfdCAqYU91dHB1dCwgdWludDE2X3QgYU91dHB1dExlbmd0aCk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBlbmQgb2YgZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gUkFORE9NX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vc2V0dGluZ3MuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9zZXR0aW5ncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NTI4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vc2V0dGluZ3MuaApAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3Igbm9uLXZvbGF0aWxlIHN0b3JhZ2Ugb2Ygc2V0dGluZ3MuCisgKi8KKworI2lmbmRlZiBPVF9QTEFURk9STV9TRVRUSU5HU19ICisjZGVmaW5lIE9UX1BMQVRGT1JNX1NFVFRJTkdTX0ggMQorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGFkZHRvZ3JvdXAgcGxhdC1zZXR0aW5ncworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIG5vbi12b2xhdGlsZSBzdG9yYWdlIG9mIHNldHRpbmdzLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogUGVyZm9ybXMgYW55IGluaXRpYWxpemF0aW9uIGZvciB0aGUgc2V0dGluZ3Mgc3Vic3lzdGVtLCBpZiBuZWNlc3NhcnkuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlCisgKiAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICovCit2b2lkIG90UGxhdFNldHRpbmdzSW5pdChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvLy8gQmVnaW4gYXRvbWljIGNoYW5nZSBzZXQKKy8qKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgYSBzZXF1ZW5jZSBvZiBjaGFuZ2VzCisgKiAgdGhhdCBzaG91bGQgYmUgbWFkZSBhdG9taWNhbGx5LgorICoKKyAqICBUaGlzIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIGBvdFBsYXRTZXR0aW5nc0NvbW1pdENoYW5nZSgpYCBhcmUgZGVzaWduZWQKKyAqICB0byBlbnN1cmUgYXRvbWljaXR5IG9mIGNoYW5nZXMgdG8gbXVsdGlwbGUgc2V0dGluZ3MuIE9uY2UKKyAqICB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCwgYW55IGNoYW5nZXMgbWFkZSB0byB0aGUgc2V0dGluZ3MKKyAqICBzdG9yZSBhcmUgb25seSBjb21taXR0ZWQgd2hlbiBgb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2UoKWAgaXMKKyAqICBjYWxsZWQuCisgKgorICogIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiBJZiBub3QKKyAqICBpbXBsZW1lbnRlZCwgaXQgc2hvdWxkIHJldHVybiBPVF9FUlJPUl9OT05FLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZQorICogICAgICAgICAgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqICBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgVGhlIHNldHRpbmdzIGNvbW1pdCBsb2NrIGhhcyBiZWVuIHNldC4KKyAqICBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgVGhlIGNvbW1pdCBsb2NrIGlzIGFscmVhZHkgc2V0LgorICoKKyAqICBAc2Egb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2UoKSwgb3RQbGF0U2V0dGluZ3NBYmFuZG9uQ2hhbmdlKCkKKyAqLworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8vLyBDb21taXQgYWxsIHNldHRpbmdzIGNoYW5nZXMgc2luY2UgcHJldmlvdXMgY2FsbCB0byBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkKKy8qKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgc2VxdWVuY2Ugb2YgY2hhbmdlcy4KKyAqICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBvcHRpb25hbC4gSWYgbm90CisgKiAgaW1wbGVtZW50ZWQsIGl0IHNob3VsZCByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVELgorICoKKyAqICBAcGFyYW1baW5dICBhSW5zdGFuY2UKKyAqICAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogIEByZXR2YWwgT1RfRVJST1JfTk9ORQorICogICAgICAgICAgVGhlIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvCisgKiAgICAgICAgICBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseQorICogICAgICAgICAgY29tbWl0dGVkLgorICogIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURQorICogICAgICAgICAgb3RQbGF0U2V0dGluZ3NCZWdpbkNoYW5nZSgpIGhhcyBub3QgYmVlbiBjYWxsZWQuCisgKiAgQHJldHZhbCBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQKKyAqICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0uCisgKgorICogIEBzYSBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCksIG90UGxhdFNldHRpbmdzQWJhbmRvbkNoYW5nZSgpCisgKi8KK290RXJyb3Igb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLy8vIEFiYW5kb24gYWxsIHNldHRpbmdzIGNoYW5nZXMgc2luY2UgcHJldmlvdXMgY2FsbCB0byBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkKKy8qKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBhIHNlcXVlbmNlIG9mIGNoYW5nZXMuCisgKiAgaW5zdGVhZCBvZiBvdFBsYXRTZXR0aW5nc0NvbW1pdENoYW5nZSgpLiBJZiBpbXBsZW1lbnRlZCwgaXQKKyAqICBjYXVzZXMgYWxsIGNoYW5nZXMgbWFkZSBzaW5jZSBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkgdG8gYmUKKyAqICByb2xsZWQgYmFjayBhbmQgYWJhbmRvbmVkLgorICoKKyAqICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBvcHRpb25hbC4gSWYgbm90CisgKiAgaW1wbGVtZW50ZWQsIGl0IHNob3VsZCByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVELgorICoKKyAqICBAcGFyYW1baW5dICBhSW5zdGFuY2UKKyAqICAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogIEByZXR2YWwgT1RfRVJST1JfTk9ORQorICogICAgICAgICAgVGhlIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvCisgKiAgICAgICAgICBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseQorICogICAgICAgICAgcm9sbGVkIGJhY2suCisgKiAgQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFCisgKiAgICAgICAgICBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkgaGFzIG5vdCBiZWVuIGNhbGxlZC4KKyAqICBAcmV0dmFsIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRAorICogICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4KKyAqCisgKiAgQHNhIG90UGxhdFNldHRpbmdzQmVnaW5DaGFuZ2UoKSwgb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2UoKQorICovCitvdEVycm9yIG90UGxhdFNldHRpbmdzQWJhbmRvbkNoYW5nZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvLy8gRmV0Y2hlcyB0aGUgdmFsdWUgb2YgYSBzZXR0aW5nCisvKiogVGhpcyBmdW5jdGlvbiBmZXRjaGVzIHRoZSB2YWx1ZSBvZiB0aGUgc2V0dGluZyBpZGVudGlmaWVkCisgKiAgYnkgYUtleSBhbmQgd3JpdGUgaXQgdG8gdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGFWYWx1ZS4KKyAqICBJdCB0aGVuIHdyaXRlcyB0aGUgbGVuZ3RoIHRvIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkKKyAqICBhVmFsdWVMZW5ndGguIFRoZSBpbml0aWFsIHZhbHVlIG9mIGFWYWx1ZUxlbmd0aCBpcyB0aGUKKyAqICBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIGFWYWx1ZS4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZgorICogIGEga2V5IHdpdGhvdXQgZmV0Y2hpbmcgdGhlIHZhbHVlIGJ5IHNldHRpbmcgYVZhbHVlIGFuZAorICogIGFWYWx1ZUxlbmd0aCB0byBOVUxMLiBZb3UgY2FuIGFsc28gY2hlY2sgdGhlIGxlbmd0aCBvZgorICogIHRoZSBzZXR0aW5nIHdpdGhvdXQgZmV0Y2hpbmcgaXQgYnkgc2V0dGluZyBvbmx5IGFWYWx1ZQorICogIHRvIE5VTEwuCisgKgorICogIE5vdGUgdGhhdCB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGltcGxlbWVudGF0aW9uIGlzIG5vdAorICogIHJlcXVpcmVkIHRvIG1haW50YWluIHRoZSBvcmRlciBvZiBzZXR0aW5ncyB3aXRoIG11bHRpcGxlCisgKiAgdmFsdWVzLiBUaGUgb3JkZXIgb2Ygc3VjaCB2YWx1ZXMgTUFZIGNoYW5nZSBhZnRlciBBTlkKKyAqICB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIHN0b3JlLgorICoKKyAqICBAcGFyYW1baW5dICAgICBhSW5zdGFuY2UKKyAqICAgICAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiAgQHBhcmFtW2luXSAgICAgYUtleQorICogICAgICAgICAgICAgICAgIFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0ZWQgc2V0dGluZy4KKyAqICBAcGFyYW1baW5dICAgICBhSW5kZXgKKyAqICAgICAgICAgICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNwZWNpZmljIGl0ZW0gdG8gZ2V0LgorICogIEBwYXJhbVtvdXRdICAgIGFWYWx1ZQorICogICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgdmFsdWUgb2YgdGhlIHNldHRpbmcKKyAqICAgICAgICAgICAgICAgICBzaG91bGQgYmUgd3JpdHRlbi4gTWF5IGJlIHNldCB0byBOVUxMIGlmIGp1c3QKKyAqICAgICAgICAgICAgICAgICB0ZXN0aW5nIGZvciB0aGUgcHJlc2VuY2Ugb3IgbGVuZ3RoIG9mIGEgc2V0dGluZy4KKyAqICBAcGFyYW1baW5vdXRdICBhVmFsdWVMZW5ndGgKKyAqICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUuIFdoZW4KKyAqICAgICAgICAgICAgICAgICBjYWxsZWQsIHRoaXMgcG9pbnRlciBzaG91bGQgcG9pbnQgdG8gYW4KKyAqICAgICAgICAgICAgICAgICBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG1heGltdW0gdmFsdWUgc2l6ZSB0aGF0CisgKiAgICAgICAgICAgICAgICAgY2FuIGJlIHdyaXR0ZW4gdG8gYVZhbHVlLiBBdCByZXR1cm4sIHRoZSBhY3R1YWwKKyAqICAgICAgICAgICAgICAgICBsZW5ndGggb2YgdGhlIHNldHRpbmcgaXMgd3JpdHRlbi4gVGhpcyBtYXkgYmUKKyAqICAgICAgICAgICAgICAgICBzZXQgdG8gTlVMTCBpZiBwZXJmb3JtaW5nIGEgcHJlc2VuY2UgY2hlY2suCisgKgorICogIEByZXR2YWwgT1RfRVJST1JfTk9ORQorICogICAgICAgICAgVGhlIGdpdmVuIHNldHRpbmcgd2FzIGZvdW5kIGFuZCBmZXRjaGVkIHN1Y2Nlc3NmdWxseS4KKyAqICBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORAorICogICAgICAgICAgVGhlIGdpdmVuIHNldHRpbmcgd2FzIG5vdCBmb3VuZCBpbiB0aGUgc2V0dGluZyBzdG9yZS4KKyAqICBAcmV0dmFsIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRAorICogICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4KKyAqLworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0dldChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFLZXksIGludCBhSW5kZXgsIHVpbnQ4X3QgKmFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKmFWYWx1ZUxlbmd0aCk7CisKKy8vLyBTZXRzIG9yIHJlcGxhY2VzIHRoZSB2YWx1ZSBvZiBhIHNldHRpbmcKKy8qKiBUaGlzIGZ1bmN0aW9uIHNldHMgb3IgcmVwbGFjZXMgdGhlIHZhbHVlIG9mIGEgc2V0dGluZworICogIGlkZW50aWZpZWQgYnkgYUtleS4gSWYgdGhlcmUgd2FzIG1vcmUgdGhhbiBvbmUKKyAqICB2YWx1ZSBwcmV2aW91c2x5IGFzc29jaWF0ZWQgd2l0aCBhS2V5LCB0aGVuIHRoZXkgYXJlCisgKiAgYWxsIGRlbGV0ZWQgYW5kIHJlcGxhY2VkIHdpdGggdGhpcyBzaW5nbGUgZW50cnkuCisgKgorICogIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBzdWNjZXNzZnVsbHkgbWF5IGNhdXNlIHVucmVsYXRlZAorICogIHNldHRpbmdzIHdpdGggbXVsdGlwbGUgdmFsdWVzIHRvIGJlIHJlb3JkZXJlZC4KKyAqCisgKiAgQHBhcmFtW2luXSAgYUluc3RhbmNlCisgKiAgICAgICAgICAgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogIEBwYXJhbVtpbl0gIGFLZXkKKyAqICAgICAgICAgICAgICBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2V0dGluZyB0byBjaGFuZ2UuCisgKiAgQHBhcmFtW291dF0gYVZhbHVlCisgKiAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNldHRpbmcKKyAqICAgICAgICAgICAgICBzaG91bGQgYmUgcmVhZCBmcm9tLiBNVVNUIE5PVCBiZSBOVUxMIGlmIGFWYWx1ZUxlbmd0aAorICogICAgICAgICAgICAgIGlzIG5vbi16ZXJvLgorICogIEBwYXJhbVtpbl0gIGFWYWx1ZUxlbmd0aAorICogICAgICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSBhVmFsdWUuCisgKiAgICAgICAgICAgICAgTWF5IGJlIHplcm8uCisgKgorICogIEByZXR2YWwgT1RfRVJST1JfTk9ORQorICogICAgICAgICAgVGhlIGdpdmVuIHNldHRpbmcgd2FzIGNoYW5nZWQgb3Igc3RhZ2VkLgorICogIEByZXR2YWwgT1RfRVJST1JfTk9UX0lNUExFTUVOVEVECisgKiAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLgorICovCitvdEVycm9yIG90UGxhdFNldHRpbmdzU2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlLCB1aW50MTZfdCBhVmFsdWVMZW5ndGgpOworCisvLy8gQWRkcyBhIHZhbHVlIHRvIGEgc2V0dGluZworLyoqIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgdmFsdWUgdG8gYSBzZXR0aW5nCisgKiAgaWRlbnRpZmllZCBieSBhS2V5LCB3aXRob3V0IHJlcGxhY2luZyBhbnkgZXhpc3RpbmcKKyAqICB2YWx1ZXMuCisgKgorICogIE5vdGUgdGhhdCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgcmVxdWlyZWQKKyAqICB0byBtYWludGFpbiB0aGUgb3JkZXIgb2YgdGhlIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aCBhCisgKiAgc3BlY2lmaWMga2V5LiBUaGUgYWRkZWQgdmFsdWUgbWF5IGJlIGFkZGVkIHRvIHRoZSBlbmQsCisgKiAgdGhlIGJlZ2lubmluZywgb3IgZXZlbiBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZS4gVGhlIG9yZGVyCisgKiAgb2YgYW55IHByZS1leGlzdGluZyB2YWx1ZXMgbWF5IGFsc28gY2hhbmdlLgorICoKKyAqICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IG1heSBjYXVzZSB1bnJlbGF0ZWQKKyAqICBzZXR0aW5ncyB3aXRoIG11bHRpcGxlIHZhbHVlcyB0byBiZSByZW9yZGVyZWQuCisgKgorICogQHBhcmFtW2luXSAgICAgYUluc3RhbmNlCisgKiAgICAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICAgICBhS2V5CisgKiAgICAgICAgICAgICAgICBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2V0dGluZyB0byBjaGFuZ2UuCisgKiBAcGFyYW1bb3V0XSAgICBhVmFsdWUKKyAqICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzZXR0aW5nCisgKiAgICAgICAgICAgICAgICBzaG91bGQgYmUgcmVhZCBmcm9tLiBNVVNUIE5PVCBiZSBOVUxMIGlmIGFWYWx1ZUxlbmd0aAorICogICAgICAgICAgICAgICAgaXMgbm9uLXplcm8uCisgKiBAcGFyYW1baW5vdXRdICBhVmFsdWVMZW5ndGgKKyAqICAgICAgICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSBhVmFsdWUuCisgKiAgICAgICAgICAgICAgICBNYXkgYmUgemVyby4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUKKyAqICAgICAgICAgVGhlIGdpdmVuIHNldHRpbmcgd2FzIGFkZGVkIG9yIHN0YWdlZCB0byBiZSBhZGRlZC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0lNUExFTUVOVEVECisgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0uCisgKi8KK290RXJyb3Igb3RQbGF0U2V0dGluZ3NBZGQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWUsIHVpbnQxNl90IGFWYWx1ZUxlbmd0aCk7CisKKy8vLyBSZW1vdmVzIGEgc2V0dGluZyBmcm9tIHRoZSBzZXR0aW5nIHN0b3JlCisvKiogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGEgc3BlY2lmaWMgdmFsdWUgZnJvbSB0aGUKKyAqICBzZXR0aW5nIGlkZW50aWZpZWQgYnkgYUtleSBmcm9tIHRoZSBzZXR0aW5ncyBzdG9yZS4KKyAqCisgKiAgTm90ZSB0aGF0IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGlzIG5vdCByZXF1aXJlZAorICogIHRvIG1haW50YWluIHRoZSBvcmRlciBvZiB0aGUgaXRlbXMgYXNzb2NpYXRlZCB3aXRoIGEKKyAqICBzcGVjaWZpYyBrZXkuCisgKgorICogIEBwYXJhbVtpbl0gYUluc3RhbmNlCisgKiAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiAgQHBhcmFtW2luXSBhS2V5CisgKiAgICAgICAgICAgICBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdGVkIHNldHRpbmcuCisgKiAgQHBhcmFtW2luXSBhSW5kZXgKKyAqICAgICAgICAgICAgIFRoZSBpbmRleCBvZiB0aGUgdmFsdWUgdG8gYmUgcmVtb3ZlZC4gSWYgc2V0IHRvCisgKiAgICAgICAgICAgICAtMSwgYWxsIHZhbHVlcyBmb3IgdGhpcyBhS2V5IHdpbGwgYmUgcmVtb3ZlZC4KKyAqCisgKiAgQHJldHZhbCBPVF9FUlJPUl9OT05FCisgKiAgICAgICAgICBUaGUgZ2l2ZW4ga2V5IGFuZCBpbmRleCB3YXMgZm91bmQgYW5kIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LgorICogIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5ECisgKiAgICAgICAgICBUaGUgZ2l2ZW4ga2V5IG9yIGluZGV4ICB3YXMgbm90IGZvdW5kIGluIHRoZSBzZXR0aW5nIHN0b3JlLgorICogIEByZXR2YWwgT1RfRVJST1JfTk9UX0lNUExFTUVOVEVECisgKiAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLgorICovCitvdEVycm9yIG90UGxhdFNldHRpbmdzRGVsZXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUtleSwgaW50IGFJbmRleCk7CisKKy8vLyBSZW1vdmVzIGFsbCBzZXR0aW5ncyBmcm9tIHRoZSBzZXR0aW5nIHN0b3JlCisvKiogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGFsbCBzZXR0aW5ncyBmcm9tIHRoZSBzZXR0aW5ncworICogIHN0b3JlLCByZXNldHRpbmcgaXQgdG8gaXRzIGluaXRpYWwgZmFjdG9yeSBzdGF0ZS4KKyAqCisgKiAgQHBhcmFtW2luXSBhSW5zdGFuY2UKKyAqICAgICAgICAgICAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqLwordm9pZCBvdFBsYXRTZXR0aW5nc1dpcGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9UX1BMQVRGT1JNX1NFVFRJTkdTX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9zcGktc2xhdmUuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9zcGktc2xhdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjFiNDNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3NwaS1zbGF2ZS5oCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlIHNwaS1zbGF2ZS5oCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgU1BJIHNsYXZlIGNvbW11bmljYXRpb24uCisgKi8KKworI2lmbmRlZiBTUElfU0xBVkVfSF8KKyNkZWZpbmUgU1BJX1NMQVZFX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIHBsYXQtc3BpLXNsYXZlCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgU1BJIHNsYXZlIGNvbW11bmljYXRpb24uCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBJbmRpY2F0ZXMgdGhhdCBhIFNQSSB0cmFuc2FjdGlvbiBoYXMgY29tcGxldGVkIHdpdGggdGhlIGdpdmVuIGxlbmd0aC4gVGhlIGRhdGEgd3JpdHRlbiB0byB0aGUgc2xhdmUgaGFzIGJlZW4gd3JpdHRlbgorICogdG8gdGhlIHBvaW50ZXIgaW5kaWNhdGVkIGJ5IHRoZSBgYUlucHV0QnVmYCBhcmd1bWVudCB0byB0aGUgcHJldmlvdXMgY2FsbCB0byBgb3RQbGF0U3BpU2xhdmVQcmVwYXJlVHJhbnNhY3Rpb24oKWAuCisgKgorICogT25jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgYG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKClgIGlzIGludmFsaWQgYW5kIG11c3QgYmUgY2FsbGVkIGFnYWluIGZvciB0aGUgbmV4dAorICogdHJhbnNhY3Rpb24gdG8gYmUgdmFsaWQuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgdHJhbnNhY3Rpb24sIGV2ZW4gaWYgYG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKClgCisgKiBoYXMgbm90IHlldCBiZWVuIGNhbGxlZC4gSW4gc3VjaCBjYXNlcywgYGFPdXRwdXRCdWZMZW5gIGFuZCBgYUlucHV0QnVmTGVuYCB3aWxsIGJlIHplcm8uCisgKgorICogVGhpcyBjYWxsYmFjayBjYW4gYmUgY2FsbGVkIGZyb20gSVNSIGNvbnRleHQuIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIGZ1bmN0aW9uIGluZGljYXRlcyBpZiBhbnkgZnVydGhlcgorICogcHJvY2Vzc2luZyBpcyByZXF1aXJlZC4gSWYgYFRSVUVgIGlzIHJldHVybmVkIHRoZSBwbGF0Zm9ybSBzcGktc2xhdmUgZHJpdmVyIGltcGxlbWVudGF0aW9uIG11c3QgaW52b2tlIHRoZQorICogdHJhbnNhY3Rpb24gcHJvY2VzcyBjYWxsYmFjayAoYGFQcm9jZXNzQ2FsbGJhY2tgIHNldCBpbiBgb3RQbGF0U3BpU2xhdmVFbmFibGUoKWApIHdoaWNoIHVubGlrZSB0aGlzIGNhbGxiYWNrIG11c3QgYmUKKyAqIGNhbGxlZCBmcm9tIHRoZSBzYW1lIE9TIGNvbnRleHQgdGhhdCBhbnkgb3RoZXIgT3BlblRocmVhZCBBUEkvY2FsbGJhY2sgaXMgY2FsbGVkLgorICoKKyAqIEBwYXJhbVtpbl0gYUNvbnRleHQgICAgICAgICAgIENvbnRleHQgcG9pbnRlciBwYXNzZWQgaW50byBgb3RQbGF0U3BpU2xhdmVFbmFibGUoKWAuCisgKiBAcGFyYW1baW5dIGFPdXRwdXRCdWYgICAgICAgICBWYWx1ZSBvZiBgYU91dHB1dEJ1ZmAgZnJvbSBsYXN0IGNhbGwgdG8gYG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKClgLgorICogQHBhcmFtW2luXSBhT3V0cHV0QnVmTGVuICAgICAgVmFsdWUgb2YgYGFPdXRwdXRCdWZMZW5gIGZyb20gbGFzdCBjYWxsIHRvIGBvdFBsYXRTcGlTbGF2ZVByZXBhcmVUcmFuc2FjdGlvbigpYC4KKyAqIEBwYXJhbVtpbl0gYUlucHV0QnVmICAgICAgICAgIFZhbHVlIG9mIGFJbnB1dEJ1ZiBmcm9tIGxhc3QgY2FsbCB0byBgb3RQbGF0U3BpU2xhdmVQcmVwYXJlVHJhbnNhY3Rpb24oKWAuCisgKiBAcGFyYW1baW5dIGFJbnB1dEJ1ZkxlbiAgICAgICBWYWx1ZSBvZiBhSW5wdXRCdWZMZW4gZnJvbSBsYXN0IGNhbGwgdG8gYG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKClgCisgKiBAcGFyYW1baW5dIGFUcmFuc2FjdGlvbkxlbmd0aCBMZW5ndGggb2YgdGhlIGNvbXBsZXRlZCB0cmFuc2FjdGlvbiwgaW4gYnl0ZXMuCisgKgorICogQHJldHVybnMgIFRSVUUgaWYgYWZ0ZXIgdGhpcyBjYWxsIHJldHVybnMgdGhlIHBsYXRmb3JtIHNob3VsZCBpbnZva2UgdGhlIHRoZSBwcm9jZXNzIGNhbGxiYWNrIGBhUHJvY2Vzc0NhbGxiYWNrYCwKKyAqICAgICAgICAgICBGQUxTRSBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIHByb2Nlc3MgYW5kIG5vIG5lZWQgdG8gaW52b2tlIHRoZSBwcm9jZXNzIGNhbGxiYWNrLgorICovCit0eXBlZGVmIGJvb2wgKCpvdFBsYXRTcGlTbGF2ZVRyYW5zYWN0aW9uQ29tcGxldGVDYWxsYmFjaykodm9pZCAqYUNvbnRleHQsIHVpbnQ4X3QgKmFPdXRwdXRCdWYsIHVpbnQxNl90IGFPdXRwdXRCdWZMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYUlucHV0QnVmLCB1aW50MTZfdCBhSW5wdXRCdWZMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVRyYW5zYWN0aW9uTGVuZ3RoKTsKKworCisvKioKKyAqIEludm9rZWQgYWZ0ZXIgYSB0cmFuc2FjdGlvbiBjb21wbGV0ZSBjYWxsYmFjayBpcyBjYWxsZWQgYW5kIHJldHVybnMgYFRSVUVgIHRvIGRvIGFueSBmdXJ0aGVyIHByb2Nlc3NpbmcgcmVxdWlyZWQuCisgKiBVbmxpa2UgYG90UGxhdFNwaVNsYXZlVHJhbnNhY3Rpb25Db21wbGV0ZUNhbGxiYWNrYCB3aGljaCBjYW4gYmUgY2FsbGVkIGZyb20gYW55IE9TIGNvbnRleHQgKGUuZy4sIElTUiksIHRoaXMKKyAqIGNhbGxiYWNrIE1VU1QgYmUgY2FsbGVkIGZyb20gdGhlIHNhbWUgT1MgY29udGV4dCBhcyBhbnkgb3RoZXIgT3BlblRocmVhZCBBUEkvY2FsbGJhY2suCisgKgorICogQHBhcmFtW2luXSBhQ29udGV4dCAgICAgICAgICAgQ29udGV4dCBwb2ludGVyIHBhc3NlZCBpbnRvIGBvdFBsYXRTcGlTbGF2ZUVuYWJsZSgpYC4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKm90UGxhdFNwaVNsYXZlVHJhbnNhY3Rpb25Qcm9jZXNzQ2FsbGJhY2spKHZvaWQgKmFDb250ZXh0KTsKKworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIFNQSSBzbGF2ZSBpbnRlcmZhY2UuCisKKyAqIE5vdGUgdGhhdCBTUEkgc2xhdmUgaXMgbm90IGZ1bGx5IHJlYWR5IHVudGlsIGEgdHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgdXNpbmcgYG90UGxhdFNQSVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKClgLgorICoKKyAqIElmIGBvdFBsYXRTUElTbGF2ZVByZXBhcmVUcmFuc2FjdGlvbigpIGlzIG5vdCBjYWxsZWQgYmVmb3JlIHRoZSBtYXN0ZXIgYmVnaW5zIGEgdHJhbnNhY3Rpb24sIHRoZSByZXN1bHRpbmcgU1BJCisgKiB0cmFuc2FjdGlvbiB3aWxsIHNlbmQgYWxsIGAweEZGYCBieXRlcyBhbmQgZGlzY2FyZCBhbGwgcmVjZWl2ZWQgYnl0ZXMuCisgKgorICogQHBhcmFtW2luXSBhQ29tcGxldGVDYWxsYmFjayAgUG9pbnRlciB0byB0cmFuc2FjdGlvbiBjb21wbGV0ZSBjYWxsYmFjay4KKyAqIEBwYXJhbVtpbl0gYVByb2Nlc3NDYWxsYmFjayAgIFBvaW50ZXIgdG8gcHJvY2VzcyBjYWxsYmFjay4KKyAqIEBwYXJhbVtpbl0gYUNvbnRleHQgICAgICAgICAgIENvbnRleHQgcG9pbnRlciB0byBiZSBwYXNzZWQgdG8gY2FsbGJhY2tzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVuYWJsZWQgdGhlIFNQSSBTbGF2ZSBpbnRlcmZhY2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgIFNQSSBTbGF2ZSBpbnRlcmZhY2UgaXMgYWxyZWFkeSBlbmFibGVkLgorICogQHJldHZhbCBPVF9FUlJPUl9GQUlMRUQgICBGYWlsZWQgdG8gZW5hYmxlIHRoZSBTUEkgU2xhdmUgaW50ZXJmYWNlLgorICoKKyAqLworb3RFcnJvciBvdFBsYXRTcGlTbGF2ZUVuYWJsZShvdFBsYXRTcGlTbGF2ZVRyYW5zYWN0aW9uQ29tcGxldGVDYWxsYmFjayBhQ29tcGxldGVDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RQbGF0U3BpU2xhdmVUcmFuc2FjdGlvblByb2Nlc3NDYWxsYmFjayBhUHJvY2Vzc0NhbGxiYWNrLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogU2h1dGRvd24gYW5kIGRpc2FibGUgdGhlIFNQSSBzbGF2ZSBpbnRlcmZhY2UuCisgKi8KK3ZvaWQgb3RQbGF0U3BpU2xhdmVEaXNhYmxlKHZvaWQpOworCisvKioKKyAqIFByZXBhcmUgZGF0YSBmb3IgdGhlIG5leHQgU1BJIHRyYW5zYWN0aW9uLiBEYXRhIHBvaW50ZXJzIE1VU1QgcmVtYWluIHZhbGlkIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0ZSBjYWxsYmFjaworICogaXMgY2FsbGVkIGJ5IHRoZSBTUEkgc2xhdmUgZHJpdmVyLCBvciB1bnRpbCBhZnRlciB0aGUgbmV4dCBjYWxsIHRvIGBvdFBsYXRTcGlTbGF2ZVByZXBhcmVUcmFuc2FjdGlvbigpYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgYmVmb3JlIHRoZSBTUEkgbWFzdGVyIGluaXRpYXRlcyB0aGUgdHJhbnNhY3Rpb24uIEVhY2ggKnN1Y2Nlc3NmdWwqIGNhbGwKKyAqIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZSB0aGUgcHJldmlvdXMgdmFsdWVzIGZyb20gZWFybGllciBjYWxscyB0byBiZSBkaXNjYXJkZWQuCisgKgorICogTm90IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhZnRlciBhIGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBpcyB0aGUgc2FtZSBhcyBpZiB0aGlzIGZ1bmN0aW9uIHdhcyBwcmV2aW91c2x5IGNhbGxlZCB3aXRoCisgKiBib3RoIGJ1ZmZlciBsZW5ndGhzIHNldCB0byB6ZXJvIGFuZCBgYVJlcXVlc3RUcmFuc2FjdGlvbkZsYWdgIHNldCB0byBgZmFsc2VgLgorICoKKyAqIE9uY2UgYGFPdXRwdXRCdWZMZW5gIGJ5dGVzIG9mIGBhT3V0cHV0QnVmYCBoYXMgYmVlbiBjbG9ja2VkIG91dCwgdGhlIE1JU08gcGluIHNoYWxsIGJlIHNldCBoaWdoIHVudGlsIHRoZSBtYXN0ZXIKKyAqIGZpbmlzaGVzIHRoZSBTUEkgdHJhbnNhY3Rpb24uIFRoaXMgaXMgdGhlIGZ1bmN0aW9uYWwgZXF1aXZhbGVudCBvZiBwYWRkaW5nIHRoZSBlbmQgb2YgYGFPdXRwdXRCdWZgIHdpdGggYDB4RkZgIGJ5dGVzCisgKiBvdXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgdHJhbnNhY3Rpb24uCisgKgorICogT25jZSBgYUlucHV0QnVmTGVuYCBieXRlcyBvZiBhSW5wdXRCdWYgaGF2ZSBiZWVuIGNsb2NrZWQgaW4gZnJvbSBNT1NJLCBhbGwgc3Vic2VxdWVudCB2YWx1ZXMgZnJvbSB0aGUgTU9TSSBwaW4gYXJlCisgKiBpZ25vcmVkIHVudGlsIHRoZSBTUEkgbWFzdGVyIGZpbmlzaGVzIHRoZSB0cmFuc2FjdGlvbi4KKyAqCisgKiBOb3RlIHRoYXQgZXZlbiBpZiBgYUlucHV0QnVmTGVuYCBvciBgYU91dHB1dEJ1ZkxlbmAgKG9yIGJvdGgpIGFyZSBleGhhdXN0ZWQgYmVmb3JlIHRoZSBTUEkgbWFzdGVyIGZpbmlzaGVzIGEKKyAqIHRyYW5zYWN0aW9uLCB0aGUgb25nb2luZyBzaXplIG9mIHRoZSB0cmFuc2FjdGlvbiBtdXN0IHN0aWxsIGJlIGtlcHQgdHJhY2sgb2YgdG8gYmUgcGFzc2VkIHRvIHRoZSB0cmFuc2FjdGlvbgorICogY29tcGxldGUgY2FsbGJhY2suIEZvciBleGFtcGxlLCBpZiBgYUlucHV0QnVmTGVuYCBpcyBlcXVhbCB0byAxMCBhbmQgYGFPdXRwdXRCdWZMZW5gIGVxdWFsIHRvIDIwIGFuZCB0aGUgU1BJIG1hc3RlcgorICogY2xvY2tzIG91dCAzMCBieXRlcywgdGhlIHZhbHVlIDMwIGlzIHBhc3NlZCB0byB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGUgY2FsbGJhY2suCisgKgorICogSWYgYSBgTlVMTGAgcG9pbnRlciBpcyBwYXNzZWQgaW4gYXMgYGFPdXRwdXRCdWZgIG9yIGBhSW5wdXRCdWZgIGl0IG1lYW5zIHRoYXQgdGhhdCBidWZmZXIgcG9pbnRlciBzaG91bGQgbm90IGNoYW5nZQorICogZnJvbSBpdHMgcHJldmlvdXMvY3VycmVudCB2YWx1ZS4gSW4gdGhpcyBjYXNlLCB0aGUgY29ycmVzcG9uZGluZyBsZW5ndGggYXJndW1lbnQgc2hvdWxkIGJlIGlnbm9yZWQuIEZvciBleGFtcGxlLAorICogYG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKE5VTEwsIDAsIGFJbnB1dEJ1ZiwgYUlucHV0TGVuLCBmYWxzZSlgIGNoYW5nZXMgdGhlIGlucHV0IGJ1ZmZlciBwb2ludGVyIGFuZCBpdHMKKyAqIGxlbmd0aCBidXQga2VlcHMgdGhlIG91dHB1dCBidWZmZXIgcG9pbnRlciBzYW1lIGFzIGJlZm9yZS4KKyAqCisgKiBBbnkgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdoaWxlIGEgdHJhbnNhY3Rpb24gaXMgaW4gcHJvZ3Jlc3Mgd2lsbCBjYXVzZSBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0byBiZSBpZ25vcmVkIGFuZCB0aGUKKyAqIHJldHVybiB2YWx1ZSB0byBiZSBgT1RfRVJST1JfQlVTWWAuCisgKgorICogQHBhcmFtW2luXSBhT3V0cHV0QnVmICAgICAgICAgICAgICBEYXRhIHRvIGJlIHdyaXR0ZW4gdG8gTUlTTyBwaW4KKyAqIEBwYXJhbVtpbl0gYU91dHB1dEJ1ZkxlbiAgICAgICAgICAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciwgaW4gYnl0ZXMKKyAqIEBwYXJhbVtpbl0gYUlucHV0QnVmICAgICAgICAgICAgICAgRGF0YSB0byBiZSByZWFkIGZyb20gTU9TSSBwaW4KKyAqIEBwYXJhbVtpbl0gYUlucHV0QnVmTGVuICAgICAgICAgICAgU2l6ZSBvZiB0aGUgaW5wdXQgYnVmZmVyLCBpbiBieXRlcworICogQHBhcmFtW2luXSBhUmVxdWVzdFRyYW5zYWN0aW9uRmxhZyBTZXQgdG8gdHJ1ZSBpZiBob3N0IGludGVycnVwdCBzaG91bGQgYmUgc2V0CisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBUcmFuc2FjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHByZXBhcmVkLgorICogQHJldHZhbCBPVF9FUlJPUl9CVVNZICAgICAgICAgICBBIHRyYW5zYWN0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgb3RQbGF0U3BpU2xhdmVFbmFibGUoKSBoYXNuJ3QgYmVlbiBjYWxsZWQuCisgKgorICovCitvdEVycm9yIG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKHVpbnQ4X3QgKmFPdXRwdXRCdWYsIHVpbnQxNl90IGFPdXRwdXRCdWZMZW4sIHVpbnQ4X3QgKmFJbnB1dEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUlucHV0QnVmTGVuLCBib29sIGFSZXF1ZXN0VHJhbnNhY3Rpb25GbGFnKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFNQSV9TTEFWRV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3Rvb2xjaGFpbi5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3Rvb2xjaGFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDZlNjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vdG9vbGNoYWluLmgKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGFkZHRvZ3JvdXAgcGxhdC10b29sY2hhaW4KKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgZGVmaW5lcyBhIHRvb2xjaGFpbiBhYnN0cmFjdGlvbiBsYXllciB0aHJvdWdoIG1hY3Jvcy4KKyAqCisgKiBVc2FnZToKKyAqCisgKiAgICBAY29kZQorICoKKyAqICAgIHR5cGVkZWYKKyAqICAgIE9UX1RPT0xfUEFDS0VEX0JFR0lOCisgKiAgICBzdHJ1Y3QKKyAqICAgIHsKKyAqICAgICAgICBjaGFyIG1GaWVsZDE7CisgKiAgICAgICAgdW5pb24KKyAqICAgICAgICB7CisgKiAgICAgICAgICAgIGNoYXIgbUZpZWxkMjsKKyAqICAgICAgICAgICAgbG9uZyBtRmllbGQzOworICogICAgICAgIH0gT1RfVE9PTF9QQUNLRURfRklFTEQ7CisgKiAgICB9IE9UX1RPT0xfUEFDS0VEX0VORCBwYWNrZWRfc3RydWN0X3Q7CisgKgorICogICAgQGVuZGNvZGUKKyAqCisgKiBAeworICoKKyAqLworCisjaWZuZGVmIFRPT0xDSEFJTl9IXworI2RlZmluZSBUT09MQ0hBSU5fSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qKgorICogQGRlZiBPVF9UT09MX1BBQ0tFRF9CRUdJTgorICoKKyAqIENvbXBpbGVyLXNwZWNpZmljIGluZGljYXRpb24gdGhhdCBhIGNsYXNzIG9yIHN0cnVjdCBtdXN0IGJlIGJ5dGUgcGFja2VkLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgT1RfVE9PTF9QQUNLRURfRklFTEQKKyAqCisgKiBJbmRpY2F0ZSB0byB0aGUgY29tcGlsZXIgYSBuZXN0ZWQgc3RydWN0IG9yIHVuaW9uIHRvIGJlIHBhY2tlZAorICogd2l0aGluIGJ5dGUgcGFja2VkIGNsYXNzIG9yIHN0cnVjdC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIE9UX1RPT0xfUEFDS0VEX0VORAorICoKKyAqIENvbXBpbGVyLXNwZWNpZmljIGluZGljYXRpb24gYXQgdGhlIGVuZCBvZiBhIGJ5dGUgcGFja2VkIGNsYXNzIG9yIHN0cnVjdC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIE9UX1RPT0xfQUxJR04KKyAqCisgKiBDb21waWxlci1zcGVjaWZpYyBhbGlnbm1lbnQgbW9kaWZpZXIuCisgKgorICovCisKKy8vID09PT09PT09PT09IFRPT0xDSEFJTiBTRUxFQ1RJT04gOiBTVEFSVCA9PT09PT09PT09PQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmluZWQoX19DQ19BUk0pIHx8IGRlZmluZWQoX19USV9BUk1fXykKKworLy8gaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9Db21tb24tVmFyaWFibGUtQXR0cmlidXRlcy5odG1sCisvLyBodHRwOi8vd3d3LmtlaWwuY29tL3N1cHBvcnQvbWFuL2RvY3MvYXJtY2MvYXJtY2NfY2hyMTM1OTEyNDk3MzQ4MC5odG0KKworI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9CRUdJTgorI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9GSUVMRCAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9FTkQgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2RlZmluZSBPVF9UT09MX1dFQUsgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKworI2RlZmluZSBPVF9UT09MX0FMSUdOKFgpCisKKyNlbGlmIGRlZmluZWQoX19JQ0NBUk1fXykgfHwgZGVmaW5lZChfX0lDQzgwNTFfXykKKworLy8gaHR0cDovL3N1cHAuaWFyLmNvbS9GaWxlc1B1YmxpYy9VUERJTkZPLzAwNDkxNi9hcm0vZG9jL0VXQVJNX0RldmVsb3BtZW50R3VpZGUuRU5VLnBkZgorCisjaW5jbHVkZSAiaW50cmluc2ljcy5oIgorCisjZGVmaW5lIE9UX1RPT0xfUEFDS0VEX0JFR0lOICAgICAgICAgICAgICAgIF9fcGFja2VkCisjZGVmaW5lIE9UX1RPT0xfUEFDS0VEX0ZJRUxECisjZGVmaW5lIE9UX1RPT0xfUEFDS0VEX0VORAorI2RlZmluZSBPVF9UT09MX1dFQUsgICAgICAgICAgICAgICAgICAgICAgICBfX3dlYWsKKworCisjZGVmaW5lIE9UX1RPT0xfQUxJR04oWCkKKworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKworI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9CRUdJTiAgICAgICAgICAgICAgICBfX3ByYWdtYShwYWNrKHB1c2gsMSkpCisjZGVmaW5lIE9UX1RPT0xfUEFDS0VEX0ZJRUxECisjZGVmaW5lIE9UX1RPT0xfUEFDS0VEX0VORCAgICAgICAgICAgICAgICAgIF9fcHJhZ21hKHBhY2socG9wKSkKKyNkZWZpbmUgT1RfVE9PTF9XRUFLCisKKworI2RlZmluZSBPVF9UT09MX0FMSUdOKFgpICAgICAgICAgICAgICAgICAgICBfX2RlY2xzcGVjKGFsaWduKDQpKQorCisjZWxpZiBkZWZpbmVkKF9fU0RDQykKKworLy8gU3RydWN0dXJlcyBhcmUgcGFja2VkIGJ5IGRlZmF1bHQgaW4gc2RjYywgYXMgaXQgcHJpbWFyaWx5IHRhcmdldHMgOC1iaXQgTUNVcy4KKworI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9CRUdJTgorI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9GSUVMRAorI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9FTkQKKyNkZWZpbmUgT1RfVE9PTF9XRUFLCisKKyNkZWZpbmUgT1RfVE9PTF9BTElHTihYKQorCisjZWxzZQorCisjZXJyb3IgIkVycm9yOiBObyB2YWxpZCBUb29sY2hhaW4gc3BlY2lmaWVkIgorCisvLyBTeW1ib2xzIGZvciBEb3h5Z2VuCisKKyNkZWZpbmUgT1RfVE9PTF9QQUNLRURfQkVHSU4KKyNkZWZpbmUgT1RfVE9PTF9QQUNLRURfRklFTEQKKyNkZWZpbmUgT1RfVE9PTF9QQUNLRURfRU5ECisjZGVmaW5lIE9UX1RPT0xfV0VBSworCisjZGVmaW5lIE9UX1RPT0xfQUxJR04oWCkKKworI2VuZGlmCisKKy8vID09PT09PT09PT09IFRPT0xDSEFJTiBTRUxFQ1RJT04gOiBFTkQgPT09PT09PT09PT0KKworLyoqCisgKiBAZGVmIE9UQVBJCisgKgorICogQ29tcGlsZXItc3BlY2lmaWMgbW9kaWZpZXIgZm9yIHB1YmxpYyBBUEkgZGVjbGFyYXRpb25zLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgT1RDQUxMCisgKgorICogQ29tcGlsZXItc3BlY2lmaWMgbW9kaWZpZXIgdG8gZXhwb3J0IGZ1bmN0aW9ucyBpbiBhIERMTC4KKyAqCisgKi8KKworI2lmZGVmIF9NU0NfVkVSCisKKyNpZmRlZiBfV0lONjQKKyNkZWZpbmUgT1RfQ0RFQ0wKKyNlbHNlCisjZGVmaW5lIE9UX0NERUNMIF9fY2RlY2wKKyNlbmRpZgorCisjZWxzZQorCisjZGVmaW5lIE9UX0NBTEwKKyNkZWZpbmUgT1RfQ0RFQ0wKKworI2VuZGlmCisKKyNpZmRlZiBPVERMTAorI2lmbmRlZiBPVEFQSQorI2RlZmluZSBPVEFQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorI2RlZmluZSBPVENBTEwgV0lOQVBJCisjZWxzZQorI2RlZmluZSBPVEFQSQorI2RlZmluZSBPVENBTEwKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgT1RfVU5VU0VEX1ZBUklBQkxFCisgKgorICogU3VwcHJlc3MgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgaW4gc3BlY2lmaWMgdG9vbGNoYWlucy4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIE9UX1VOUkVBQ0hBQkxFX0NPREUKKyAqCisgKiBTdXBwcmVzcyBVbnJlYWNoYWJsZSBjb2RlIHdhcm5pbmcgaW4gc3BlY2lmaWMgdG9vbGNoYWlucy4KKyAqCisgKi8KKworI2lmIGRlZmluZWQoX19JQ0NBUk1fXykKKworI2RlZmluZSBPVF9VTlVTRURfVkFSSUFCTEUoVkFSSUFCTEUpICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoJlZBUklBQkxFID09IE5VTEwpIHt9ICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBPVF9VTlJFQUNIQUJMRV9DT0RFKENPREUpICAgICAgIFwKKyAgICBfUHJhZ21hKCJkaWFnX3N1cHByZXNzPVBlMTExIikgICAgICBcCisgICAgQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9QcmFnbWEoImRpYWdfZGVmYXVsdD1QZTExMSIpCisKKyNlbHNlCisKKyNkZWZpbmUgT1RfVU5VU0VEX1ZBUklBQkxFKFZBUklBQkxFKSAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHZvaWQpKFZBUklBQkxFKTsgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyNkZWZpbmUgT1RfVU5SRUFDSEFCTEVfQ09ERShDT0RFKSAgQ09ERQorCisjZW5kaWYKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgLy8gVE9PTENIQUlOX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vdWFydC5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTZiZGIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIFVBUlQgY29tbXVuaWNhdGlvbi4KKyAqLworCisjaWZuZGVmIFVBUlRfSF8KKyNkZWZpbmUgVUFSVF9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBwbGF0LXVhcnQKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBVQVJUIGNvbW11bmljYXRpb24uCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBFbmFibGUgdGhlIFVBUlQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgIFN1Y2Nlc3NmdWxseSBlbmFibGVkIHRoZSBVQVJULgorICogQHJldHZhbCBPVF9FUlJPUl9GQUlMRUQgIEZhaWxlZCB0byBlbmFibGVkIHRoZSBVQVJULgorICoKKyAqLworb3RFcnJvciBvdFBsYXRVYXJ0RW5hYmxlKHZvaWQpOworCisvKioKKyAqIERpc2FibGUgdGhlIFVBUlQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgIFN1Y2Nlc3NmdWxseSBkaXNhYmxlZCB0aGUgVUFSVC4KKyAqIEByZXR2YWwgT1RfRVJST1JfRkFJTEVEICBGYWlsZWQgdG8gZGlzYWJsZSB0aGUgVUFSVC4KKyAqCisgKi8KK290RXJyb3Igb3RQbGF0VWFydERpc2FibGUodm9pZCk7CisKKy8qKgorICogU2VuZCBieXRlcyBvdmVyIHRoZSBVQVJULgorICoKKyAqIEBwYXJhbVtpbl0gYUJ1ZiAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gYUJ1Zkxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zbWl0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0cmFuc21pc3Npb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgRmFpbGVkIHRvIHN0YXJ0IHRoZSB0cmFuc21pc3Npb24uCisgKgorICovCitvdEVycm9yIG90UGxhdFVhcnRTZW5kKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworCisvKioKKyAqIFRoZSBVQVJUIGRyaXZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBub3RpZnkgT3BlblRocmVhZCB0aGF0IHRoZSByZXF1ZXN0ZWQgYnl0ZXMgaGF2ZSBiZWVuIHNlbnQuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXRVYXJ0U2VuZERvbmUodm9pZCk7CisKKy8qKgorICogVGhlIFVBUlQgZHJpdmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG5vdGlmeSBPcGVuVGhyZWFkIHRoYXQgYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLgorICoKKyAqLworZXh0ZXJuIHZvaWQgb3RQbGF0VWFydFJlY2VpdmVkKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gVUFSVF9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3VzZWMtYWxhcm0uaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS91c2VjLWFsYXJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3ZGQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS91c2VjLWFsYXJtLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBtaWNyb3NlY29uZCBhbGFybSBzZXJ2aWNlLgorICovCisKKyNpZm5kZWYgVVNFQ19BTEFSTV9IXworI2RlZmluZSBVU0VDX0FMQVJNX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIHBsYXQtYWxhcm0KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgZGVmaW5lcyB0aGUgY2FsbGJhY2sgZm9yIGluZGljYXRpbmcgd2hlbiB0aGUgYWxhcm0gaGFzIGV4cGlyZWQuCisgKgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKm90UGxhdFVzZWNBbGFybUhhbmRsZXIpKHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBTZXQgdGhlIGFsYXJtIHRvIGZpcmUgYXQgQHAgYUR0IG1pY3Jvc2Vjb25kcyBhZnRlciBAcCBhVDAuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICBhVDAgICAgICAgIFRoZSByZWZlcmVuY2UgdGltZS4KKyAqIEBwYXJhbVtpbl0gIGFEdCAgICAgICAgVGhlIHRpbWUgZGVsYXkgaW4gbWljcm9zZWNvbmRzIGZyb20gQHAgYVQwLgorICogQHBhcmFtW2luXSAgYUhhbmRsZXIgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSB0aW1lciBleHBpcmVzLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgKgorICovCit2b2lkIG90UGxhdFVzZWNBbGFybVN0YXJ0QXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhVDAsIHVpbnQzMl90IGFEdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdFBsYXRVc2VjQWxhcm1IYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogU3RvcCB0aGUgYWxhcm0uCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0VXNlY0FsYXJtU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgY3VycmVudCB0aW1lLgorICoKKyAqIEBwYXJhbVtvdXRdICBhTm93ICBUaGUgY3VycmVudCB0aW1lIGluIG1pY3Jvc2Vjb25kcy4KKyAqCisgKi8KK3VpbnQzMl90IG90UGxhdFVzZWNBbGFybUdldE5vdyh2b2lkKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFVTRUNfQUxBUk1fSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC90YXNrbGV0LmggYi9pbmNsdWRlL29wZW50aHJlYWQvdGFza2xldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOTE1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvdGFza2xldC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBBUEkgZm9yIFRhc2tsZXRzLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9UQVNLTEVUX0hfCisjZGVmaW5lIE9QRU5USFJFQURfVEFTS0xFVF9IXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGFkZHRvZ3JvdXAgYXBpLXRhc2tsZXRzCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIFRocmVhZCBzdGFjaydzIGV4ZWN1dGlvbi4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFJ1biBhbGwgcXVldWVkIE9wZW5UaHJlYWQgdGFza2xldHMgYXQgdGhlIHRpbWUgdGhpcyBpcyBjYWxsZWQuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKi8KK3ZvaWQgb3RUYXNrbGV0c1Byb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgT3BlblRocmVhZCBoYXMgdGFza2xldHMgcGVuZGluZy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGVyZSBhcmUgdGFza2xldHMgcGVuZGluZy4KKyAqIEByZXR2YWwgRkFMU0UgIElmIHRoZXJlIGFyZSBubyB0YXNrbGV0cyBwZW5kaW5nLgorICovCitib29sIG90VGFza2xldHNBcmVQZW5kaW5nKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogT3BlblRocmVhZCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIHRhc2tsZXQgcXVldWUgdHJhbnNpdGlvbnMgZnJvbSBlbXB0eSB0byBub24tZW1wdHkuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICovCitleHRlcm4gdm9pZCBvdFRhc2tsZXRzU2lnbmFsUGVuZGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9UQVNLTEVUX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvdGhyZWFkLmggYi9pbmNsdWRlL29wZW50aHJlYWQvdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc2OWM3MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC90aHJlYWQuaApAQCAtMCwwICsxLDU1NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIE9wZW5UaHJlYWQgVGhyZWFkIEFQSSAoZm9yIGJvdGggRlREIGFuZCBNVEQpLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9USFJFQURfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9USFJFQURfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbGluay5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS10aHJlYWQtZ2VuZXJhbAorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzdGFydHMgVGhyZWFkIHByb3RvY29sIG9wZXJhdGlvbi4KKyAqCisgKiBUaGUgaW50ZXJmYWNlIG11c3QgYmUgdXAgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dIGFFbmFibGVkICBUUlVFIGlmIFRocmVhZCBpcyBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCBUaHJlYWQgcHJvdG9jb2wgb3BlcmF0aW9uLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaGUgbmV0d29yayBpbnRlcmZhY2Ugd2FzIG5vdCBub3QgdXAuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNldEVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHF1ZXJpZXMgaWYgdGhlIFRocmVhZCBzdGFjayBpcyBjb25maWd1cmVkIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQgb24gcmVpbml0aWFsaXphdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIFRSVUUgICBJdCBpcyBjb25maWd1cmVkIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQuCisgKiBAcmV0dmFsIEZBTFNFICBJdCBpcyBub3QgY29uZmlndXJlZCB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0LgorICoKKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3RUaHJlYWRHZXRBdXRvU3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIFRocmVhZCBzdGFjayB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IG9uIHJlaW5pdGlhbGl6YXRpb24uCisgKiBJdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBjdXJyZW50IFRocmVhZCBzdGF0ZS4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gYVN0YXJ0QXV0b21hdGljYWxseSAgIFRSVUUgdG8gYXV0b21hdGljYWxseSBzdGFydDsgRkFMU0UgdG8gbm90IGF1dG9tYXRpY2FsbHkgc3RhcnQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNldEF1dG9TdGFydChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYVN0YXJ0QXV0b21hdGljYWxseSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBhIG5vZGUgaXMgdGhlIG9ubHkgcm91dGVyIG9uIHRoZSBuZXR3b3JrLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgVFJVRSAgIEl0IGlzIHRoZSBvbmx5IHJvdXRlciBpbiB0aGUgbmV0d29yay4KKyAqIEByZXR2YWwgRkFMU0UgIEl0IGlzIGEgY2hpbGQgb3IgaXMgbm90IGEgc2luZ2xlIHJvdXRlciBpbiB0aGUgbmV0d29yay4KKyAqCisgKi8KK09UQVBJIGJvb2wgT1RDQUxMIG90VGhyZWFkSXNTaW5nbGV0b24ob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhIFRocmVhZCBEaXNjb3Zlcnkgc2Nhbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVNjYW5DaGFubmVscyAgICAgICAgICBBIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyB3aGljaCBjaGFubmVscyB0byBzY2FuIChlLmcuIE9UX0NIQU5ORUxfMTFfTUFTSykuCisgKiBAcGFyYW1baW5dICBhUGFuSWQgICAgICAgICAgICAgICAgIFRoZSBQQU4gSUQgZmlsdGVyIChzZXQgdG8gQnJvYWRjYXN0IFBBTiB0byBkaXNhYmxlIGZpbHRlcikuCisgKiBAcGFyYW1baW5dICBhSm9pbmVyICAgICAgICAgICAgICAgIFZhbHVlIG9mIHRoZSBKb2luZXIgRmxhZyBpbiB0aGUgRGlzY292ZXJ5IFJlcXVlc3QgVExWLgorICogQHBhcmFtW2luXSAgYUVuYWJsZUV1aTY0RmlsdGVyaW5nICBUUlVFIHRvIGZpbHRlciByZXNwb25zZXMgb24gRVVJLTY0LCBGQUxTRSBvdGhlcndpc2UuCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBvbiByZWNlaXZpbmcgYW4gTUxFIERpc2NvdmVyeSBSZXNwb25zZSBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuIGNvbXBsZXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFja0NvbnRleHQgICAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBBY2NlcHRlZCB0aGUgVGhyZWFkIERpc2NvdmVyeSByZXF1ZXN0LgorICogQHJldHZhbCBPVF9FUlJPUl9CVVNZICBBbHJlYWR5IHBlcmZvcm1pbmcgYW4gVGhyZWFkIERpc2NvdmVyeS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkRGlzY292ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhUGFuSWQsIGJvb2wgYUpvaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRW5hYmxlRXVpNjRGaWx0ZXJpbmcsIG90SGFuZGxlQWN0aXZlU2NhblJlc3VsdCBhQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhbiBNTEUgVGhyZWFkIERpc2NvdmVyeSBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICovCitPVEFQSSBib29sIE9UQ0FMTCBvdFRocmVhZElzRGlzY292ZXJJblByb2dyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBUaHJlYWQgQ2hpbGQgVGltZW91dCB1c2VkIHdoZW4gb3BlcmF0aW5nIGluIHRoZSBDaGlsZCByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgVGhyZWFkIENoaWxkIFRpbWVvdXQgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0Q2hpbGRUaW1lb3V0CisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdFRocmVhZEdldENoaWxkVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgVGhyZWFkIENoaWxkIFRpbWVvdXQgdXNlZCB3aGVuIG9wZXJhdGluZyBpbiB0aGUgQ2hpbGQgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhVGltZW91dCAgVGhlIHRpbWVvdXQgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0Q2hpbGRUaW1lb3V0CisgKgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdFRocmVhZFNldENoaWxkVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFUaW1lb3V0KTsKKworLyoqCisgKiBHZXQgdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgUEFOIElELgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgUEFOIElELgorICoKKyAqIEBzYSBvdFRocmVhZFNldEV4dGVuZGVkUGFuSWQKKyAqLworT1RBUEkgY29uc3QgdWludDhfdCAqT1RDQUxMIG90VGhyZWFkR2V0RXh0ZW5kZWRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBQQU4gSUQuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2hpbGUgVGhyZWFkIHByb3RvY29scyBhcmUgZGlzYWJsZWQuICBBIHN1Y2Nlc3NmdWwKKyAqIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gaW52YWxpZGF0ZSB0aGUgQWN0aXZlIGFuZCBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXRzIGluCisgKiBub24tdm9sYXRpbGUgbWVtb3J5LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRlbmRlZFBhbklkICBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgUEFOIElELgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgRXh0ZW5kZWQgUEFOIElELgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaHJlYWQgcHJvdG9jb2xzIGFyZSBlbmFibGVkLgorICoKKyAqIEBzYSBvdFRocmVhZEdldEV4dGVuZGVkUGFuSWQKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRTZXRFeHRlbmRlZFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dGVuZGVkUGFuSWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIExlYWRlcidzIFJMT0MuCisgKgorICogQHBhcmFtW2luXSAgIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtvdXRdICBhTGVhZGVyUmxvYyAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBMZWFkZXIncyBSTE9DIHdpbGwgYmUgd3JpdHRlbi4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgVGhlIExlYWRlcidzIFJMT0Mgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvIEBwIGFMZWFkZXJSbG9jLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFMZWFkZXJSbG9jIHdhcyBOVUxMLgorICogQHJldHZhbCBPVF9FUlJPUl9ERVRBQ0hFRCAgICAgIE5vdCBjdXJyZW50bHkgYXR0YWNoZWQgdG8gYSBUaHJlYWQgUGFydGl0aW9uLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRHZXRMZWFkZXJSbG9jKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RJcDZBZGRyZXNzICphTGVhZGVyUmxvYyk7CisKKy8qKgorICogR2V0IHRoZSBNTEUgTGluayBNb2RlIGNvbmZpZ3VyYXRpb24uCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBNTEUgTGluayBNb2RlIGNvbmZpZ3VyYXRpb24uCisgKgorICogQHNhIG90VGhyZWFkU2V0TGlua01vZGUKKyAqLworT1RBUEkgb3RMaW5rTW9kZUNvbmZpZyBPVENBTEwgb3RUaHJlYWRHZXRMaW5rTW9kZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgTUxFIExpbmsgTW9kZSBjb25maWd1cmF0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFDb25maWcgICBBIHBvaW50ZXIgdG8gdGhlIExpbmsgTW9kZSBjb25maWd1cmF0aW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgTUxFIExpbmsgTW9kZSBjb25maWd1cmF0aW9uLgorICoKKyAqIEBzYSBvdFRocmVhZEdldExpbmtNb2RlCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkU2V0TGlua01vZGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExpbmtNb2RlQ29uZmlnIGFDb25maWcpOworCisvKioKKyAqIEdldCB0aGUgdGhyTWFzdGVyS2V5LgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUgdGhyTWFzdGVyS2V5LgorICoKKyAqIEBzYSBvdFRocmVhZFNldE1hc3RlcktleQorICovCitPVEFQSSBjb25zdCBvdE1hc3RlcktleSAqT1RDQUxMIG90VGhyZWFkR2V0TWFzdGVyS2V5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2V0IHRoZSB0aHJNYXN0ZXJLZXkuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc3VjY2VlZCB3aGVuIFRocmVhZCBwcm90b2NvbHMgYXJlIGRpc2FibGVkLiAgQSBzdWNjZXNzZnVsCisgKiBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGludmFsaWRhdGUgdGhlIEFjdGl2ZSBhbmQgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0cyBpbgorICogbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFLZXkgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSB0aHJNYXN0ZXJLZXkuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgdGhyTWFzdGVyS2V5LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgICAgSWYgYUtleUxlbmd0aCBpcyBsYXJnZXIgdGhhbiAxNi4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgIFRocmVhZCBwcm90b2NvbHMgYXJlIGVuYWJsZWQuCisgKgorICogQHNhIG90VGhyZWFkR2V0TWFzdGVyS2V5CisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkU2V0TWFzdGVyS2V5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RNYXN0ZXJLZXkgKmFLZXkpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIE1lc2ggTG9jYWwgRUlELgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIE1lc2ggTG9jYWwgRUlELgorICoKKyAqLworT1RBUEkgY29uc3Qgb3RJcDZBZGRyZXNzICpPVENBTEwgb3RUaHJlYWRHZXRNZXNoTG9jYWxFaWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBNZXNoIExvY2FsIFByZWZpeC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBNZXNoIExvY2FsIFByZWZpeC4KKyAqCisgKi8KK09UQVBJIGNvbnN0IHVpbnQ4X3QgKk9UQ0FMTCBvdFRocmVhZEdldE1lc2hMb2NhbFByZWZpeChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTWVzaCBMb2NhbCBQcmVmaXguCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc3VjY2VlZCB3aGVuIFRocmVhZCBwcm90b2NvbHMgYXJlIGRpc2FibGVkLiAgQSBzdWNjZXNzZnVsCisgKiBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGludmFsaWRhdGUgdGhlIEFjdGl2ZSBhbmQgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0cyBpbgorICogbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFNZXNoTG9jYWxQcmVmaXggIEEgcG9pbnRlciB0byB0aGUgTWVzaCBMb2NhbCBQcmVmaXguCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBNZXNoIExvY2FsIFByZWZpeC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhyZWFkIHByb3RvY29scyBhcmUgZW5hYmxlZC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkU2V0TWVzaExvY2FsUHJlZml4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYU1lc2hMb2NhbFByZWZpeCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBUaHJlYWQgbGluay1sb2NhbCBJUHY2IGFkZHJlc3MuCisgKgorICogVGhlIFRocmVhZCBsaW5rIGxvY2FsIGFkZHJlc3MgaXMgZGVyaXZlZCB1c2luZyBJRUVFODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyBhcyBJbnRlcmZhY2UgSWRlbnRpZmllci4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIFRocmVhZCBsaW5rLWxvY2FsIElQdjYgYWRkcmVzcy4KKyAqLworY29uc3Qgb3RJcDZBZGRyZXNzICpvdFRocmVhZEdldExpbmtMb2NhbElwNkFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBHZXQgdGhlIFRocmVhZCBOZXR3b3JrIE5hbWUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgVGhyZWFkIE5ldHdvcmsgTmFtZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXROZXR3b3JrTmFtZQorICovCitPVEFQSSBjb25zdCBjaGFyICpPVENBTEwgb3RUaHJlYWRHZXROZXR3b3JrTmFtZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgVGhyZWFkIE5ldHdvcmsgTmFtZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgb25seSBzdWNjZWVkIHdoZW4gVGhyZWFkIHByb3RvY29scyBhcmUgZGlzYWJsZWQuICBBIHN1Y2Nlc3NmdWwKKyAqIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gaW52YWxpZGF0ZSB0aGUgQWN0aXZlIGFuZCBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXRzIGluCisgKiBub24tdm9sYXRpbGUgbWVtb3J5LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhTmV0d29ya05hbWUgIEEgcG9pbnRlciB0byB0aGUgVGhyZWFkIE5ldHdvcmsgTmFtZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIFRocmVhZCBOZXR3b3JrIE5hbWUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIFRocmVhZCBwcm90b2NvbHMgYXJlIGVuYWJsZWQuCisgKgorICogQHNhIG90VGhyZWFkR2V0TmV0d29ya05hbWUKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRTZXROZXR3b3JrTmFtZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IGNoYXIgKmFOZXR3b3JrTmFtZSk7CisKKy8qKgorICogR2V0IHRoZSB0aHJLZXlTZXF1ZW5jZUNvdW50ZXIuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSB0aHJLZXlTZXF1ZW5jZUNvdW50ZXIgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyCisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdFRocmVhZEdldEtleVNlcXVlbmNlQ291bnRlcihvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgdGhyS2V5U2VxdWVuY2VDb3VudGVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUtleVNlcXVlbmNlQ291bnRlciAgVGhlIHRocktleVNlcXVlbmNlQ291bnRlciB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRHZXRLZXlTZXF1ZW5jZUNvdW50ZXIKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RUaHJlYWRTZXRLZXlTZXF1ZW5jZUNvdW50ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhS2V5U2VxdWVuY2VDb3VudGVyKTsKKworLyoqCisgKiBHZXQgdGhlIHRocktleVN3aXRjaEd1YXJkVGltZQorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgdGhyS2V5U3dpdGNoR3VhcmRUaW1lIHZhbHVlIChpbiBob3VycykuCisgKgorICogQHNhIG90VGhyZWFkU2V0S2V5U3dpdGNoR3VhcmRUaW1lCisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdFRocmVhZEdldEtleVN3aXRjaEd1YXJkVGltZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgdGhyS2V5U3dpdGNoR3VhcmRUaW1lCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhS2V5U3dpdGNoR3VhcmRUaW1lICBUaGUgdGhyS2V5U3dpdGNoR3VhcmRUaW1lIHZhbHVlIChpbiBob3VycykuCisgKgorICogQHNhIG90VGhyZWFkR2V0S2V5U3dpdGNoR3VhcmRUaW1lCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90VGhyZWFkU2V0S2V5U3dpdGNoR3VhcmRUaW1lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYUtleVN3aXRjaEd1YXJkVGltZSk7CisKKy8qKgorICogRGV0YWNoIGZyb20gdGhlIFRocmVhZCBuZXR3b3JrLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBkZXRhY2hlZCBmcm9tIHRoZSBUaHJlYWQgbmV0d29yay4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhyZWFkIGlzIGRpc2FibGVkLgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZEJlY29tZURldGFjaGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQXR0ZW1wdCB0byByZWF0dGFjaCBhcyBhIGNoaWxkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBiZWdpbiBhdHRlbXB0IHRvIGJlY29tZSBhIGNoaWxkLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaHJlYWQgaXMgZGlzYWJsZWQuCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkQmVjb21lQ2hpbGQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIG5leHQgbmVpZ2hib3IgaW5mb3JtYXRpb24uIEl0IGlzIHVzZWQgdG8gZ28gdGhyb3VnaCB0aGUgZW50cmllcyBvZgorICogdGhlIG5laWdoYm9yIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhSXRlcmF0b3IgIEEgcG9pbnRlciB0byB0aGUgaXRlcmF0b3IgY29udGV4dC4gVG8gZ2V0IHRoZSBmaXJzdCBuZWlnaGJvciBlbnRyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBzaG91bGQgYmUgc2V0IHRvIE9UX05FSUdIQk9SX0lORk9fSVRFUkFUT1JfSU5JVC4KKyAqIEBwYXJhbVtvdXRdICAgIGFJbmZvICAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBuZWlnaGJvciBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICBTdWNjZXNzZnVsbHkgZm91bmQgdGhlIG5leHQgbmVpZ2hib3IgZW50cnkgaW4gdGFibGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgICAgTm8gc3Vic2VxdWVudCBuZWlnaGJvciBlbnRyeSBleGlzdHMgaW4gdGhlIHRhYmxlLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFJdGVyYXRvciBvciBAcCBhSW5mbyB3YXMgTlVMTC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkR2V0TmV4dE5laWdoYm9ySW5mbyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmVpZ2hib3JJbmZvSXRlcmF0b3IgKmFJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdE5laWdoYm9ySW5mbyAqYUluZm8pOworCisvKioKKyAqIEdldCB0aGUgZGV2aWNlIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQgIFRoZSBUaHJlYWQgc3RhY2sgaXMgZGlzYWJsZWQuCisgKiBAcmV0dmFsIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEICBUaGUgZGV2aWNlIGlzIG5vdCBjdXJyZW50bHkgcGFydGljaXBhdGluZyBpbiBhIFRocmVhZCBuZXR3b3JrL3BhcnRpdGlvbi4KKyAqIEByZXR2YWwgT1RfREVWSUNFX1JPTEVfQ0hJTEQgICAgIFRoZSBkZXZpY2UgaXMgY3VycmVudGx5IG9wZXJhdGluZyBhcyBhIFRocmVhZCBDaGlsZC4KKyAqIEByZXR2YWwgT1RfREVWSUNFX1JPTEVfUk9VVEVSICAgIFRoZSBkZXZpY2UgaXMgY3VycmVudGx5IG9wZXJhdGluZyBhcyBhIFRocmVhZCBSb3V0ZXIuCisgKiBAcmV0dmFsIE9UX0RFVklDRV9ST0xFX0xFQURFUiAgICBUaGUgZGV2aWNlIGlzIGN1cnJlbnRseSBvcGVyYXRpbmcgYXMgYSBUaHJlYWQgTGVhZGVyLgorICovCitPVEFQSSBvdERldmljZVJvbGUgT1RDQUxMIG90VGhyZWFkR2V0RGV2aWNlUm9sZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0IHRoZSBUaHJlYWQgTGVhZGVyIERhdGEuCisgKgorICogQHBhcmFtW2luXSAgIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtvdXRdICBhTGVhZGVyRGF0YSAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBsZWFkZXIgZGF0YSBpcyBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIGxlYWRlciBkYXRhLgorICogQHJldHZhbCBPVF9FUlJPUl9ERVRBQ0hFRCAgICAgIE5vdCBjdXJyZW50bHkgYXR0YWNoZWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUxlYWRlckRhdGEgaXMgTlVMTC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkR2V0TGVhZGVyRGF0YShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TGVhZGVyRGF0YSAqYUxlYWRlckRhdGEpOworCisvKioKKyAqIEdldCB0aGUgTGVhZGVyJ3MgUm91dGVyIElELgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgTGVhZGVyJ3MgUm91dGVyIElELgorICovCitPVEFQSSB1aW50OF90IE9UQ0FMTCBvdFRocmVhZEdldExlYWRlclJvdXRlcklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBMZWFkZXIncyBXZWlnaHQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBMZWFkZXIncyBXZWlnaHQuCisgKi8KK09UQVBJIHVpbnQ4X3QgT1RDQUxMIG90VGhyZWFkR2V0TGVhZGVyV2VpZ2h0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBQYXJ0aXRpb24gSUQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBQYXJ0aXRpb24gSUQuCisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdFRocmVhZEdldFBhcnRpdGlvbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBSTE9DMTYuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBSTE9DMTYuCisgKi8KK09UQVBJIHVpbnQxNl90IE9UQ0FMTCBvdFRocmVhZEdldFJsb2MxNihvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoZSBmdW5jdGlvbiByZXRyaWV2ZXMgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYSBUaHJlYWQgUm91dGVyIGFzIHBhcmVudC4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFQYXJlbnRJbmZvICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIHBhcmVudCByb3V0ZXIgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRHZXRQYXJlbnRJbmZvKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSb3V0ZXJJbmZvICphUGFyZW50SW5mbyk7CisKKy8qKgorICogVGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgYXZlcmFnZSBSU1NJIGZvciB0aGUgVGhyZWFkIFBhcmVudC4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFQYXJlbnRSc3NpICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIHBhcmVudCByc3NpIHNob3VsZCBiZSBwbGFjZWQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZEdldFBhcmVudEF2ZXJhZ2VSc3NpKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90ICphUGFyZW50UnNzaSk7CisKKy8qKgorICogVGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgUlNTSSBvZiB0aGUgbGFzdCBwYWNrZXQgZnJvbSB0aGUgVGhyZWFkIFBhcmVudC4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFMYXN0UnNzaSAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGxhc3QgcnNzaSBzaG91bGQgYmUgcGxhY2VkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBSU1NJIGRhdGEuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgICAgICAgVW5hYmxlIHRvIGdldCBSU1NJIGRhdGEuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUxhc3RSc3NpIGlzIE5VTEwuCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkR2V0UGFyZW50TGFzdFJzc2kob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgKmFMYXN0UnNzaSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIE5ldHdvcmsgRGlhZ25vc3RpYyBHZXQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuCisgKgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIE5ldHdvcmsgRGlhZ25vc3RpYworICogICAgICAgICAgICAgICAgICAgICAgICAgICBHZXQgcmVzcG9uc2UgcGF5bG9hZC4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIGluZm8gZm9yIEBwIGFNZXNzYWdlLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKm90UmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFjaykob3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBjYWxsYmFjayB0byBwcm92aWRlIHJlY2VpdmVkIHJhdyBOZXR3b3JrIERpYWdub3N0aWMgR2V0IHJlc3BvbnNlIHBheWxvYWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIE5ldHdvcmsgRGlhZ25vc3RpYyBHZXQgcmVzcG9uc2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlY2VpdmVkIG9yIE5VTEwgdG8gZGlzYWJsZSB0aGUgY2FsbGJhY2suCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2tDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK3ZvaWQgb3RUaHJlYWRTZXRSZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrIGFDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpOworCisvKioKKyAqIFNlbmQgYSBOZXR3b3JrIERpYWdub3N0aWMgR2V0IHJlcXVlc3QuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGVzdGluYXRpb24gICBBIHBvaW50ZXIgdG8gZGVzdGluYXRpb24gYWRkcmVzcy4KKyAqIEBwYXJhbVtpbl0gIGFUbHZUeXBlcyAgICAgIEFuIGFycmF5IG9mIE5ldHdvcmsgRGlhZ25vc3RpYyBUTFYgdHlwZXMuCisgKiBAcGFyYW1baW5dICBhQ291bnQgICAgICAgICBOdW1iZXIgb2YgdHlwZXMgaW4gYVRsdlR5cGVzCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNlbmREaWFnbm9zdGljR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZBZGRyZXNzICphRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgYVRsdlR5cGVzW10sIHVpbnQ4X3QgYUNvdW50KTsKKworLyoqCisgKiBTZW5kIGEgTmV0d29yayBEaWFnbm9zdGljIFJlc2V0IHJlcXVlc3QuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGVzdGluYXRpb24gICBBIHBvaW50ZXIgdG8gZGVzdGluYXRpb24gYWRkcmVzcy4KKyAqIEBwYXJhbVtpbl0gIGFUbHZUeXBlcyAgICAgIEFuIGFycmF5IG9mIE5ldHdvcmsgRGlhZ25vc3RpYyBUTFYgdHlwZXMuIEN1cnJlbnRseSBvbmx5IFR5cGUgOSBpcyBhbGxvd2VkLgorICogQHBhcmFtW2luXSAgYUNvdW50ICAgICAgICAgTnVtYmVyIG9mIHR5cGVzIGluIGFUbHZUeXBlcworICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRTZW5kRGlhZ25vc3RpY1Jlc2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZBZGRyZXNzICphRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBhVGx2VHlwZXNbXSwgdWludDhfdCBhQ291bnQpOworCisvKioKKyAqIEdldCB0aGUgSVB2NiBjb3VudGVycy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgSVB2NiBjb3VudGVycy4KKyAqCisgKi8KK09UQVBJIGNvbnN0IG90SXBDb3VudGVycyAqT1RDQUxMIG90VGhyZWFkR2V0SXA2Q291bnRlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfVEhSRUFEX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvdGhyZWFkX2Z0ZC5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3RocmVhZF9mdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWZmZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3RocmVhZF9mdGQuaApAQCAtMCwwICsxLDQ2MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBUaHJlYWQgQVBJIChGVEQgb25seSkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX1RIUkVBRF9GVERfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9USFJFQURfRlREX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2xpbmsuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL21lc3NhZ2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktdGhyZWFkLXJvdXRlcgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGlsZHJlbiBjdXJyZW50bHkgYWxsb3dlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoaWxkcmVuIGN1cnJlbnRseSBhbGxvd2VkLgorICoKKyAqIEBzYSBvdFRocmVhZFNldE1heEFsbG93ZWRDaGlsZHJlbgorICovCitPVEFQSSB1aW50OF90IE9UQ0FMTCBvdFRocmVhZEdldE1heEFsbG93ZWRDaGlsZHJlbihvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hpbGRyZW4gY3VycmVudGx5IGFsbG93ZWQuCisgKgorICogVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IHdoZW4gVGhyZWFkIHByb3RvY29sIG9wZXJhdGlvbgorICogaGFzIGJlZW4gc3RvcHBlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYU1heENoaWxkcmVuICBUaGUgbWF4aW11bSBhbGxvd2VkIGNoaWxkcmVuLgorICoKKyAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIG1heC4KKyAqIEByZXR2YWwgIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgIElmIEBwIGFNYXhDaGlsZHJlbiBpcyBub3QgaW4gdGhlIHJhbmdlIFsxLCBPUEVOVEhSRUFEX0NPTkZJR19NQVhfQ0hJTERSRU5dLgorICogQHJldHZhbCAgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgSWYgVGhyZWFkIGlzbid0IHN0b3BwZWQuCisgKgorICogQHNhIG90VGhyZWFkR2V0TWF4QWxsb3dlZENoaWxkcmVuLCBvdFRocmVhZFN0b3AKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRTZXRNYXhBbGxvd2VkQ2hpbGRyZW4ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFNYXhDaGlsZHJlbik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFJvdXRlciBSb2xlIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBSb3V0ZXIgUm9sZSBpcyBlbmFibGVkLgorICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFJvdXRlciBSb2xlIGlzIG5vdCBlbmFibGVkLgorICoKKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3RUaHJlYWRJc1JvdXRlclJvbGVFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBSb3V0ZXIgUm9sZSBpcyBlbmFibGVkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFbmFibGVkICBUUlVFIGlmIHRoZSBSb3V0ZXIgUm9sZSBpcyBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UuCisgKgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdFRocmVhZFNldFJvdXRlclJvbGVFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCk7CisKKy8qKgorICogU2V0IHRoZSBwcmVmZXJyZWQgUm91dGVyIElkLgorICoKKyAqIFVwb24gYmVjb21pbmcgYSByb3V0ZXIvbGVhZGVyIHRoZSBub2RlIGF0dGVtcHRzIHRvIHVzZSB0aGlzIFJvdXRlciBJZC4gSWYgdGhlCisgKiBwcmVmZXJyZWQgUm91dGVyIElkIGlzIG5vdCBzZXQgb3IgaWYgaXQgY2FuIG5vdCBiZSB1c2VkLCBhIHJhbmRvbWx5IGdlbmVyYXRlZAorICogcm91dGVyIGlkIGlzIHBpY2tlZC4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IG9ubHkgd2hlbiB0aGUgZGV2aWNlIHJvbGUgaXMKKyAqIGVpdGhlciBkZXRhY2hlZCBvciBkaXNhYmxlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUm91dGVySWQgICAgVGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgQ291bGQgbm90IHNldCAocm9sZSBpcyBub3QgZGV0YWNoZWQgb3IgZGlzYWJsZWQpCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNldFByZWZlcnJlZFJvdXRlcklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhUm91dGVySWQpOworCisvKioKKyAqIEdldCB0aGUgVGhyZWFkIExlYWRlciBXZWlnaHQgdXNlZCB3aGVuIG9wZXJhdGluZyBpbiB0aGUgTGVhZGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBUaHJlYWQgTGVhZGVyIFdlaWdodCB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXRMZWFkZXJXZWlnaHQKKyAqLworT1RBUEkgdWludDhfdCBPVENBTEwgb3RUaHJlYWRHZXRMb2NhbExlYWRlcldlaWdodChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgVGhyZWFkIExlYWRlciBXZWlnaHQgdXNlZCB3aGVuIG9wZXJhdGluZyBpbiB0aGUgTGVhZGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVdlaWdodCAgIFRoZSBUaHJlYWQgTGVhZGVyIFdlaWdodCB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRHZXRMZWFkZXJXZWlnaHQKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RUaHJlYWRTZXRMb2NhbExlYWRlcldlaWdodChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVdlaWdodCk7CisKKy8qKgorICogR2V0IHRoZSBUaHJlYWQgTGVhZGVyIFBhcnRpdGlvbiBJZCB1c2VkIHdoZW4gb3BlcmF0aW5nIGluIHRoZSBMZWFkZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIFRocmVhZCBMZWFkZXIgUGFydGl0aW9uIElkIHZhbHVlLgorICoKKyAqLworT1RBUEkgdWludDMyX3QgT1RDQUxMIG90VGhyZWFkR2V0TG9jYWxMZWFkZXJQYXJ0aXRpb25JZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgVGhyZWFkIExlYWRlciBQYXJ0aXRpb24gSWQgdXNlZCB3aGVuIG9wZXJhdGluZyBpbiB0aGUgTGVhZGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQYXJ0aXRpb25JZCAgVGhlIFRocmVhZCBMZWFkZXIgUGFydGl0aW9uIElkIHZhbHVlLgorICoKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RUaHJlYWRTZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVBhcnRpdGlvbklkKTsKKworLyoqCisgKiBHZXQgdGhlIEpvaW5lciBVRFAgUG9ydC4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgSm9pbmVyIFVEUCBQb3J0IG51bWJlci4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXRKb2luZXJVZHBQb3J0CisgKi8KK09UQVBJIHVpbnQxNl90IE9UQ0FMTCBvdFRocmVhZEdldEpvaW5lclVkcFBvcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIEpvaW5lciBVRFAgUG9ydAorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFKb2luZXJVZHBQb3J0ICBUaGUgSm9pbmVyIFVEUCBQb3J0IG51bWJlci4KKyAqCisgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBKb2luZXIgVURQIFBvcnQuCisgKgorICogQHNhIG90VGhyZWFkR2V0Sm9pbmVyVWRwUG9ydAorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNldEpvaW5lclVkcFBvcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhSm9pbmVyVWRwUG9ydCk7CisKKy8qKgorICogU2V0IFN0ZWVyaW5nIGRhdGEgb3V0IG9mIGJhbmQKKyAqCisgKiBDb25maWd1cmF0aW9uIG9wdGlvbiBgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQmAgc2hvdWxkIGJlIHNldCB0byBlbmFibGUgc2V0dGluZyBvZiBzdGVlcmluZworICogZGF0YSBvdXQgb2YgYmFuZC4gT3RoZXJ3aXNlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYW5kIGl0IHJldHVybnMgYE9UX0VSUk9SX0RJU0FCTEVEX0ZFQVRVUkVgCisgKiBlcnJvci4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgICAgQWRkcmVzcyB1c2VkIHRvIHVwZGF0ZSB0aGUgc3RlZXJpbmcgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgemVyb3MgdG8gY2xlYXIgdGhlIHN0ZWVyaW5nIGRhdGEgKG5vIHN0ZWVyaW5nIGRhdGEpLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCAweEZGcyB0byBzZXQgc3RlZXJpbmcgZGF0YS9ibG9vbSBmaWx0ZXIgdG8gYWNjZXB0L2FsbG93IGFsbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHNwZWNpZmljIEVVSTY0IHdoaWNoIGlzIHRoZW4gYWRkZWQgdG8gY3VycmVudCBzdGVlcmluZyBkYXRhL2Jsb29tIGZpbHRlci4KKyAqCisgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0L3VwZGF0ZWQgdGhlIHN0ZWVyaW5nIGRhdGEuCisgKiBAcmV0dmFsICBPVF9FUlJPUl9ESVNBQkxFRF9GRUFUVVJFICBGZWF0dXJlIGlzIGRpc2FibGVkLCBub3QgY2FwYWJsZSBvZiBzZXR0aW5nIHN0ZWVyaW5nIGRhdGEgb3V0IG9mIGJhbmQuCisgKgorICovCitvdEVycm9yIG90VGhyZWFkU2V0U3RlZXJpbmdEYXRhKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcyk7CisKKy8qKgorICogR2V0IHRoZSBDT05URVhUX0lEX1JFVVNFX0RFTEFZIHBhcmFtZXRlciB1c2VkIGluIHRoZSBMZWFkZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIENPTlRFWFRfSURfUkVVU0VfREVMQVkgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0Q29udGV4dElkUmV1c2VEZWxheQorICovCitPVEFQSSB1aW50MzJfdCBPVENBTEwgb3RUaHJlYWRHZXRDb250ZXh0SWRSZXVzZURlbGF5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2V0IHRoZSBDT05URVhUX0lEX1JFVVNFX0RFTEFZIHBhcmFtZXRlciB1c2VkIGluIHRoZSBMZWFkZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGVsYXkgICAgVGhlIENPTlRFWFRfSURfUkVVU0VfREVMQVkgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkR2V0Q29udGV4dElkUmV1c2VEZWxheQorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdFRocmVhZFNldENvbnRleHRJZFJldXNlRGVsYXkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhRGVsYXkpOworCisvKioKKyAqIEdldCB0aGUgTkVUV09SS19JRF9USU1FT1VUIHBhcmFtZXRlciB1c2VkIGluIHRoZSBSb3V0ZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIE5FVFdPUktfSURfVElNRU9VVCB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXROZXR3b3JrSWRUaW1lb3V0CisgKi8KK09UQVBJIHVpbnQ4X3QgT1RDQUxMIG90VGhyZWFkR2V0TmV0d29ya0lkVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgTkVUV09SS19JRF9USU1FT1VUIHBhcmFtZXRlciB1c2VkIGluIHRoZSBMZWFkZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhVGltZW91dCAgVGhlIE5FVFdPUktfSURfVElNRU9VVCB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRHZXROZXR3b3JrSWRUaW1lb3V0CisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90VGhyZWFkU2V0TmV0d29ya0lkVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVRpbWVvdXQpOworCisvKioKKyAqIEdldCB0aGUgUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIHBhcmFtZXRlciB1c2VkIGluIHRoZSBSRUVEIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBST1VURVJfVVBHUkFERV9USFJFU0hPTEQgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZAorICovCitPVEFQSSB1aW50OF90IE9UQ0FMTCBvdFRocmVhZEdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIFJPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgTGVhZGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhVGhyZXNob2xkICBUaGUgUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIHZhbHVlLgorICoKKyAqIEBzYSBvdFRocmVhZEdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RUaHJlYWRTZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhVGhyZXNob2xkKTsKKworLyoqCisgKiBSZWxlYXNlIGEgUm91dGVyIElEIHRoYXQgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZSBkZXZpY2UgaW4gdGhlIExlYWRlciByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBSb3V0ZXIgSUQgdG8gcmVsZWFzZS4gVmFsaWQgcmFuZ2UgaXMgWzAsIDYyXS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZWxlYXNlZCB0aGUgUm91dGVyIElEIHNwZWNpZmllZCBieSBhUm91dGVySWQuCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkUmVsZWFzZVJvdXRlcklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhUm91dGVySWQpOworCisvKioKKyAqIEF0dGVtcHQgdG8gYmVjb21lIGEgcm91dGVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBiZWdpbiBhdHRlbXB0IHRvIGJlY29tZSBhIHJvdXRlci4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhyZWFkIGlzIGRpc2FibGVkLgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZEJlY29tZVJvdXRlcihvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEJlY29tZSBhIGxlYWRlciBhbmQgc3RhcnQgYSBuZXcgcGFydGl0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBiZWNhbWUgYSBsZWFkZXIgYW5kIHN0YXJ0ZWQgYSBuZXcgcGFydGl0aW9uLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaHJlYWQgaXMgZGlzYWJsZWQuCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkQmVjb21lTGVhZGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgUm91dGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkCisgKi8KK09UQVBJIHVpbnQ4X3QgT1RDQUxMIG90VGhyZWFkR2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2V0IHRoZSBST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgTGVhZGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhVGhyZXNob2xkICBUaGUgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkR2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90VGhyZWFkU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhVGhyZXNob2xkKTsKKworLyoqCisgKiBHZXQgdGhlIFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIHBhcmFtZXRlciB1c2VkIGluIHRoZSBSRUVEL1JvdXRlciByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBST1VURVJfU0VMRUNUSU9OX0pJVFRFUiB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIKKyAqLworT1RBUEkgdWludDhfdCBPVENBTEwgb3RUaHJlYWRHZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIHBhcmFtZXRlciB1c2VkIGluIHRoZSBSRUVEL1JvdXRlciByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVJvdXRlckppdHRlciAgVGhlIFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIHZhbHVlLgorICoKKyAqIEBzYSBvdFRocmVhZEdldFJvdXRlclNlbGVjdGlvbkppdHRlcgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdFRocmVhZFNldFJvdXRlclNlbGVjdGlvbkppdHRlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVJvdXRlckppdHRlcik7CisKKy8qKgorICogVGhlIGZ1bmN0aW9uIHJldGFpbnMgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYW4gYXR0YWNoZWQgQ2hpbGQgYnkgaXRzIENoaWxkIElEIG9yIFJMT0MxNi4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICAgYUNoaWxkSWQgICAgVGhlIENoaWxkIElEIG9yIFJMT0MxNiBmb3IgdGhlIGF0dGFjaGVkIGNoaWxkLgorICogQHBhcmFtW291dF0gIGFDaGlsZEluZm8gIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgY2hpbGQgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBAcCBhQ2hpbGRJbmZvIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZCB3aXRoIHRoZSBpbmZvIGZvciB0aGUgZ2l2ZW4gSUQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgICAgTm8gdmFsaWQgY2hpbGQgd2l0aCB0aGlzIENoaWxkIElELgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIElmIEBwIGFDaGlsZEluZm8gaXMgTlVMTC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkR2V0Q2hpbGRJbmZvQnlJZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFDaGlsZElkLCBvdENoaWxkSW5mbyAqYUNoaWxkSW5mbyk7CisKKy8qKgorICogVGhlIGZ1bmN0aW9uIHJldGFpbnMgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYW4gYXR0YWNoZWQgQ2hpbGQgYnkgdGhlIGludGVybmFsIHRhYmxlIGluZGV4LgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICAgYUNoaWxkSW5kZXggIFRoZSB0YWJsZSBpbmRleC4KKyAqIEBwYXJhbVtvdXRdICBhQ2hpbGRJbmZvICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBjaGlsZCBpbmZvcm1hdGlvbiBpcyBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIEBwIGFDaGlsZEluZm8gd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkIHdpdGggdGhlIGluZm8gZm9yIHRoZSBnaXZlbiBpbmRleC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICAgICAgICBObyB2YWxpZCBjaGlsZCBhdCB0aGlzIGluZGV4LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgICAgIEVpdGhlciBAcCBhQ2hpbGRJbmZvIGlzIE5VTEwsIG9yIEBwIGFDaGlsZEluZGV4IGlzIG91dCBvZiByYW5nZSAoaGlnaGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiBtYXggdGFibGUgaW5kZXgpLgorICoKKyAqIEBzYSBvdEdldE1heEFsbG93ZWRDaGlsZHJlbgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRHZXRDaGlsZEluZm9CeUluZGV4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQ2hpbGRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdENoaWxkSW5mbyAqYUNoaWxkSW5mbyk7CisKKy8qKgorICogR2V0IHRoZSBjdXJyZW50IFJvdXRlciBJRCBTZXF1ZW5jZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIFJvdXRlciBJRCBTZXF1ZW5jZS4KKyAqLworT1RBUEkgdWludDhfdCBPVENBTEwgb3RUaHJlYWRHZXRSb3V0ZXJJZFNlcXVlbmNlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhlIGZ1bmN0aW9uIHJldGFpbnMgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBUaHJlYWQgUm91dGVyLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICAgYVJvdXRlcklkICAgIFRoZSByb3V0ZXIgSUQgb3IgUkxPQzE2IGZvciBhIGdpdmVuIHJvdXRlci4KKyAqIEBwYXJhbVtvdXRdICBhUm91dGVySW5mbyAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSByb3V0ZXIgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRHZXRSb3V0ZXJJbmZvKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVJvdXRlcklkLCBvdFJvdXRlckluZm8gKmFSb3V0ZXJJbmZvKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgYW4gRUlEIGNhY2hlIGVudHJ5LgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICAgYUluZGV4ICAgIEFuIGluZGV4IGludG8gdGhlIEVJRCBjYWNoZSB0YWJsZS4KKyAqIEBwYXJhbVtvdXRdICBhRW50cnkgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBFSUQgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBFSUQgY2FjaGUgZW50cnkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUluZGV4IHdhcyBvdXQgb2YgYm91bmRzIG9yIEBwIGFFbnRyeSB3YXMgTlVMTC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkR2V0RWlkQ2FjaGVFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUluZGV4LCBvdEVpZENhY2hlRW50cnkgKmFFbnRyeSk7CisKKy8qKgorICogR2V0IHRoZSB0aHJQU0tjLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUgdGhyUFNLYy4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXRQU0tjCisgKi8KK09UQVBJIGNvbnN0IHVpbnQ4X3QgKk9UQ0FMTCBvdFRocmVhZEdldFBTS2Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIHRoclBTS2MuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc3VjY2VlZCB3aGVuIFRocmVhZCBwcm90b2NvbHMgYXJlIGRpc2FibGVkLiAgQSBzdWNjZXNzZnVsCisgKiBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGludmFsaWRhdGUgdGhlIEFjdGl2ZSBhbmQgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0cyBpbgorICogbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQU0tjICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSB0aHJQU0tjLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgdGhyUFNLYy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhyZWFkIHByb3RvY29scyBhcmUgZW5hYmxlZC4KKyAqCisgKiBAc2Egb3RUaHJlYWRHZXRQU0tjCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkU2V0UFNLYyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFQU0tjKTsKKworLyoqCisgKiBHZXQgdGhlIGFzc2lnbmVkIHBhcmVudCBwcmlvcml0eS4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIGFzc2lnbmVkIHBhcmVudCBwcmlvcml0eSB2YWx1ZSwgLTIgbWVhbnMgbm90IGFzc2lnbmVkLgorICoKKyAqIEBzYSBvdFRocmVhZFNldFBhcmVudFByaW9yaXR5CisgKi8KK09UQVBJIGludDhfdCBPVENBTEwgb3RUaHJlYWRHZXRQYXJlbnRQcmlvcml0eShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgcGFyZW50IHByaW9yaXR5LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUGFyZW50UHJpb3JpdHkgIFRoZSBwYXJlbnQgcHJpb3JpdHkgdmFsdWUuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBwYXJlbnQgcHJpb3JpdHkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgIElmIHRoZSBwYXJlbnQgcHJpb3JpdHkgdmFsdWUgaXMgbm90IGFtb25nIDEsIDAsIC0xIGFuZCAtMi4KKyAqCisgKiBAc2Egb3RUaHJlYWRHZXRQYXJlbnRQcmlvcml0eQorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNldFBhcmVudFByaW9yaXR5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFQYXJlbnRQcmlvcml0eSk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX1RIUkVBRF9GVERfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC90bWZfcHJveHkuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC90bWZfcHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTZhMjlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3RtZl9wcm94eS5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBPcGVuVGhyZWFkIEFQSSBmb3IgVE1GIFByb3h5IGZlYXR1cmUuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX1RNRl9QUk9YWV9IXworI2RlZmluZSBPUEVOVEhSRUFEX1RNRl9QUk9YWV9IXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS10bWYtcHJveHkKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBUTUYgcHJveHkgZmVhdHVyZS4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiBhIFRNRiBwYWNrZXQgZm9yIGhvc3QgaXMgcmVjZWl2ZWQuCisgKgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBNZXNzYWdlLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3RUbWZQcm94eVN0cmVhbUhhbmRsZXIpKG90TWVzc2FnZSAqYU1lc3NhZ2UsIHVpbnQxNl90IGFMb2NhdG9yLCB1aW50MTZfdCBhUG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogU3RhcnQgdGhlIFRNRiBwcm94eS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCB0byBkZWxpdmVyIFRNRiBwYWNrZXQgdG8gaG9zdC4KKyAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIFRNRiBwcm94eS4KKyAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgICAgQm9yZGVyIGFnZW50IHByb3h5IGhhcyBiZWVuIHN0YXJ0ZWQgYmVmb3JlLgorICoKKyAqLworb3RFcnJvciBvdFRtZlByb3h5U3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFRtZlByb3h5U3RyZWFtSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFN0b3AgdGhlIFRNRiBwcm94eS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgIFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBUTUYgcHJveHkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgIEJvcmRlciBhZ2VudCBwcm94eSBpcyBhbHJlYWR5IHN0b3BwZWQuCisgKgorICovCitvdEVycm9yIG90VG1mUHJveHlTdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2VuZCBwYWNrZXQgdGhyb3VnaCBUTUYgcHJveHkuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgTWVzc2FnZS4KKyAqIEBwYXJhbVtpbl0gIGFMb2NhdG9yICAgICAgICAgICAgIFJsb2Mgb2YgZGVzdGluYXRpb24uCisgKiBAcGFyYW1baW5dICBhUG9ydCAgICAgICAgICAgICAgICBQb3J0IG9mIGRlc3RpbmF0aW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VuZCB0aGUgbWVzc2FnZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBCb3JkZXIgYWdlbnQgcHJveHkgaXMgbm90IHN0YXJ0ZWQuCisgKgorICogQHdhcm5pbmcgTm8gbWF0dGVyIHRoZSBjYWxsIHN1Y2Nlc3Mgb3IgZmFpbCwgdGhlIG1lc3NhZ2UgaXMgZnJlZWQuCisgKgorICovCitvdEVycm9yIG90VG1mUHJveHlTZW5kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUxvY2F0b3IsIHVpbnQxNl90IGFQb3J0KTsKKworLyoqCisgKiBHZXQgdGhlIFRNRiBwcm94eSBzdGF0dXMgKGVuYWJsZWQvZGlzYWJsZWQpCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIFRNRiBwcm94eSBzdGF0dXMgKHRydWUgaWYgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlKS4KKyAqLworYm9vbCBvdFRtZlByb3h5SXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX1RNRl9QUk9YWV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3R5cGVzLmggYi9pbmNsdWRlL29wZW50aHJlYWQvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTQ5NzVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3R5cGVzLmgKQEAgLTAsMCArMSwxMDQ0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdHlwZXMgYW5kIHN0cnVjdHVyZXMgdXNlZCBpbiB0aGUgT3BlblRocmVhZCBsaWJyYXJ5IEFQSS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfVFlQRVNfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9UWVBFU19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2lmZGVmIE9URExMCisjaW5jbHVkZSA8Z3VpZGRlZi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3Rvb2xjaGFpbi5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyMTQpICAvLyBub25zdGFuZGFyZCBleHRlbnNpb24gdXNlZDogYml0IGZpZWxkIHR5cGVzIG90aGVyIHRoYW4gaW50CisjaWZkZWYgX0tFUk5FTF9NT0RFCisjaW5jbHVkZSA8bnRkZWYuaD4KKyNlbHNlCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisjZWxzZQorI2lmbmRlZiBDT05UQUlOSU5HX1JFQ09SRAorLyojcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdpbnZhbGlkLW9mZnNldG9mIgorI2RlZmluZSBDT05UQUlOSU5HX1JFQ09SRChhZGRyZXNzLCB0eXBlLCBmaWVsZCkgXAorICAgICgodHlwZSAqKSgodWludDhfdCopKGFkZHJlc3MpIC0gb2Zmc2V0b2YodHlwZSwgZmllbGQpKSkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wKi8KKyNkZWZpbmUgQkFTRSAweDEKKyNkZWZpbmUgbXlvZmZzZXRvZihzLG0pICgoKHNpemVfdCkmKCgocyopQkFTRSktPm0pKS1CQVNFKQorI2RlZmluZSBDT05UQUlOSU5HX1JFQ09SRChhZGRyZXNzLCB0eXBlLCBmaWVsZCkgXAorICAgICgodHlwZSAqKSgodWludDhfdCopKGFkZHJlc3MpIC0gbXlvZmZzZXRvZih0eXBlLCBmaWVsZCkpKQorI2VuZGlmIC8qIENPTlRBSU5JTkdfUkVDT1JEICovCisjZW5kaWYgLyogX1dJTjMyICovCisKKy8qKgorICogVGhpcyB0eXBlIHJlcHJlc2VudHMgdGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBvdEluc3RhbmNlIG90SW5zdGFuY2U7CisKKyNpZmRlZiBPVERMTAorCisvKioKKyAqIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSBoYW5kbGUgdG8gdGhlIE9wZW5UaHJlYWQgQVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBvdEFwaUluc3RhbmNlIG90QXBpSW5zdGFuY2U7CisKKy8qKgorICogVGhpcyB0eXBlIHJlcHJlc2VudHMgYSBsaXN0IG9mIGRldmljZSBHVUlEcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3REZXZpY2VMaXN0Cit7CisgICAgdWludDE2X3QgYURldmljZXNMZW5ndGg7CisgICAgR1VJRCAgICAgYURldmljZXNbMV07Cit9IG90RGV2aWNlTGlzdDsKKworI2VuZGlmCisKKy8qKgorICogVGhpcyBlbnVtZXJhdGlvbiByZXByZXNlbnRzIGVycm9yIGNvZGVzIHVzZWQgdGhyb3VnaG91dCBPcGVuVGhyZWFkLgorICovCit0eXBlZGVmIGVudW0gb3RFcnJvcgoreworICAgIC8qKgorICAgICAqIE5vIGVycm9yLgorICAgICAqLworICAgIE9UX0VSUk9SX05PTkUgPSAwLAorCisgICAgLyoqCisgICAgICogT3BlcmF0aW9uYWwgZmFpbGVkLgorICAgICAqLworICAgIE9UX0VSUk9SX0ZBSUxFRCA9IDEsCisKKyAgICAvKioKKyAgICAgKiBNZXNzYWdlIHdhcyBkcm9wcGVkLgorICAgICAqLworICAgIE9UX0VSUk9SX0RST1AgPSAyLAorCisgICAgLyoqCisgICAgICogSW5zdWZmaWNpZW50IGJ1ZmZlcnMuCisgICAgICovCisgICAgT1RfRVJST1JfTk9fQlVGUyA9IDMsCisKKyAgICAvKioKKyAgICAgKiBObyByb3V0ZSBhdmFpbGFibGUuCisgICAgICovCisgICAgT1RfRVJST1JfTk9fUk9VVEUgPSA0LAorCisgICAgLyoqCisgICAgICogU2VydmljZSBpcyBidXN5IGFuZCBjb3VsZCBub3Qgc2VydmljZSB0aGUgb3BlcmF0aW9uLgorICAgICAqLworICAgIE9UX0VSUk9SX0JVU1kgPSA1LAorCisgICAgLyoqCisgICAgICogRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2Ugb3IgYXJndW1lbnRzLgorICAgICAqLworICAgIE9UX0VSUk9SX1BBUlNFID0gNiwKKworICAgIC8qKgorICAgICAqIElucHV0IGFyZ3VtZW50cyBhcmUgaW52YWxpZC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9JTlZBTElEX0FSR1MgPSA3LAorCisgICAgLyoqCisgICAgICogU2VjdXJpdHkgY2hlY2tzIGZhaWxlZC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9TRUNVUklUWSA9IDgsCisKKyAgICAvKioKKyAgICAgKiBBZGRyZXNzIHJlc29sdXRpb24gcmVxdWlyZXMgYW4gYWRkcmVzcyBxdWVyeSBvcGVyYXRpb24uCisgICAgICovCisgICAgT1RfRVJST1JfQUREUkVTU19RVUVSWSA9IDksCisKKyAgICAvKioKKyAgICAgKiBBZGRyZXNzIGlzIG5vdCBpbiB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICAgICAqLworICAgIE9UX0VSUk9SX05PX0FERFJFU1MgPSAxMCwKKworICAgIC8qKgorICAgICAqIE9wZXJhdGlvbiB3YXMgYWJvcnRlZC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9BQk9SVCA9IDExLAorCisgICAgLyoqCisgICAgICogRnVuY3Rpb24gb3IgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQgPSAxMiwKKworICAgIC8qKgorICAgICAqIENhbm5vdCBjb21wbGV0ZSBkdWUgdG8gaW52YWxpZCBzdGF0ZS4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9JTlZBTElEX1NUQVRFID0gMTMsCisKKyAgICAvKioKKyAgICAgKiBObyBhY2tub3dsZWRnbWVudCB3YXMgcmVjZWl2ZWQgYWZ0ZXIgbWFjTWF4RnJhbWVSZXRyaWVzIChJRUVFIDgwMi4xNS40LTIwMDYpLgorICAgICAqLworICAgIE9UX0VSUk9SX05PX0FDSyA9IDE0LAorCisgICAgLyoqCisgICAgICogQSB0cmFuc21pc3Npb24gY291bGQgbm90IHRha2UgcGxhY2UgZHVlIHRvIGFjdGl2aXR5IG9uIHRoZSBjaGFubmVsLCBpLmUuLCB0aGUgQ1NNQS1DQSBtZWNoYW5pc20gaGFzIGZhaWxlZAorICAgICAqIChJRUVFIDgwMi4xNS40LTIwMDYpLgorICAgICAqLworICAgIE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgPSAxNSwKKworICAgIC8qKgorICAgICAqIE5vdCBjdXJyZW50bHkgYXR0YWNoZWQgdG8gYSBUaHJlYWQgUGFydGl0aW9uLgorICAgICAqLworICAgIE9UX0VSUk9SX0RFVEFDSEVEID0gMTYsCisKKyAgICAvKioKKyAgICAgKiBGQ1MgY2hlY2sgZmFpbHVyZSB3aGlsZSByZWNlaXZpbmcuCisgICAgICovCisgICAgT1RfRVJST1JfRkNTID0gMTcsCisKKyAgICAvKioKKyAgICAgKiBObyBmcmFtZSByZWNlaXZlZC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9OT19GUkFNRV9SRUNFSVZFRCA9IDE4LAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBmcmFtZSBmcm9tIGFuIHVua25vd24gbmVpZ2hib3IuCisgICAgICovCisgICAgT1RfRVJST1JfVU5LTk9XTl9ORUlHSEJPUiA9IDE5LAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBmcmFtZSBmcm9tIGFuIGludmFsaWQgc291cmNlIGFkZHJlc3MuCisgICAgICovCisgICAgT1RfRVJST1JfSU5WQUxJRF9TT1VSQ0VfQUREUkVTUyA9IDIwLAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBmcmFtZSBmaWx0ZXJlZCBieSB0aGUgd2hpdGVsaXN0LgorICAgICAqLworICAgIE9UX0VSUk9SX1dISVRFTElTVF9GSUxURVJFRCA9IDIxLAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBmcmFtZSBmaWx0ZXJlZCBieSB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBjaGVjay4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9ERVNUSU5BVElPTl9BRERSRVNTX0ZJTFRFUkVEID0gMjIsCisKKyAgICAvKioKKyAgICAgKiBUaGUgcmVxdWVzdGVkIGl0ZW0gY291bGQgbm90IGJlIGZvdW5kLgorICAgICAqLworICAgIE9UX0VSUk9SX05PVF9GT1VORCA9IDIzLAorCisgICAgLyoqCisgICAgICogVGhlIG9wZXJhdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgorICAgICAqLworICAgIE9UX0VSUk9SX0FMUkVBRFkgPSAyNCwKKworICAgIC8qKgorICAgICAqIFJlY2VpdmVkIGEgZnJhbWUgZmlsdGVyZWQgYnkgdGhlIGJsYWNrbGlzdC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9CTEFDS0xJU1RfRklMVEVSRUQgPSAyNSwKKworICAgIC8qKgorICAgICAqIFRoZSBjcmVhdGlvbiBvZiBJUHY2IGFkZHJlc3MgZmFpbGVkLgorICAgICAqLworICAgIE9UX0VSUk9SX0lQNl9BRERSRVNTX0NSRUFUSU9OX0ZBSUxVUkUgPSAyNiwKKworICAgIC8qKgorICAgICAqIE9wZXJhdGlvbiBwcmV2ZW50ZWQgYnkgbW9kZSBmbGFncworICAgICAqLworICAgIE9UX0VSUk9SX05PVF9DQVBBQkxFID0gMjcsCisKKyAgICAvKioKKyAgICAgKiBDb2FwIHJlc3BvbnNlIG9yIGFja25vd2xlZGdtZW50IG9yIEROUyByZXNwb25zZSBub3QgcmVjZWl2ZWQuCisgICAgICovCisgICAgT1RfRVJST1JfUkVTUE9OU0VfVElNRU9VVCA9IDI4LAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBkdXBsaWNhdGVkIGZyYW1lLgorICAgICAqLworICAgIE9UX0VSUk9SX0RVUExJQ0FURUQgPSAyOSwKKworICAgIC8qKgorICAgICAqIE1lc3NhZ2UgaXMgYmVpbmcgZHJvcHBlZCBmcm9tIHJlYXNzZW1ibHkgbGlzdCBkdWUgdG8gdGltZW91dC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9SRUFTU0VNQkxZX1RJTUVPVVQgPSAzMCwKKworICAgIC8qKgorICAgICAqIE1lc3NhZ2UgaXMgbm90IGEgVE1GIE1lc3NhZ2UuCisgICAgICovCisgICAgT1RfRVJST1JfTk9UX1RNRiA9IDMxLAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBub24tbG93cGFuIGRhdGEgZnJhbWUuCisgICAgICovCisgICAgT1RfRVJST1JfTk9UX0xPV1BBTl9EQVRBX0ZSQU1FID0gMzIsCisKKyAgICAvKioKKyAgICAgKiBBIGZlYXR1cmUvZnVuY3Rpb25hbGl0eSBkaXNhYmxlZCBieSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9ESVNBQkxFRF9GRUFUVVJFID0gMzMsCisKKyAgICAvKioKKyAgICAgKiBHZW5lcmljIGVycm9yIChzaG91bGQgbm90IHVzZSkuCisgICAgICovCisgICAgT1RfRVJST1JfR0VORVJJQyA9IDI1NSwKK30gb3RFcnJvcjsKKworI2RlZmluZSBPVF9JUDZfSUlEX1NJWkUgICAgICAgICAgICA4ICAgLy8vPCBTaXplIG9mIGFuIElQdjYgSW50ZXJmYWNlIElkZW50aWZpZXIgKGJ5dGVzKQorCisjZGVmaW5lIE9UX01BU1RFUl9LRVlfU0laRSAgICAgICAgIDE2ICAvLy88IFNpemUgb2YgdGhlIFRocmVhZCBNYXN0ZXIgS2V5IChieXRlcykKKworLyoqCisgKiBDb25jYXRlbmF0ZWQgTGlzdCBvZiBUeXBlIElkZW50aWZpZXJzIG9mIE90aGVyIERpYWdub3N0aWNzIFRMVnMgVXNlZCB0byBSZXF1ZXN0IG9yIFJlc2V0IE11bHRpcGxlIERpYWdub3N0aWMgVmFsdWVzLgorICovCisjZGVmaW5lIE9UX05FVFdPUktfRElBR05PU1RJQ19UWVBFTElTVF9UWVBFICAgICAgICAgIDE4CisKKyNkZWZpbmUgT1RfTkVUV09SS19ESUFHTk9TVElDX1RZUEVMSVNUX01BWF9FTlRSSUVTICAgMTkgIC8vLzwgTWF4aW11bSBOdW1iZXIgb2YgT3RoZXIgTmV0d29yayBEaWFnbm9zdGljIFRMViBUeXBlcworCisvKioKKyAqIEBzdHJ1Y3Qgb3RNYXN0ZXJLZXkKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgVGhyZWFkIE1hc3RlciBLZXkuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorc3RydWN0IG90TWFzdGVyS2V5Cit7CisgICAgdWludDhfdCBtOFtPVF9NQVNURVJfS0VZX1NJWkVdOyAgICAvLy88IEJ5dGUgdmFsdWVzCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIHR5cGUgcmVwcmVzZW50cyBhIFRocmVhZCBNYXN0ZXIgS2V5LgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RNYXN0ZXJLZXkgb3RNYXN0ZXJLZXk7CisKKyNkZWZpbmUgT1RfTkVUV09SS19OQU1FX01BWF9TSVpFICAgMTYgIC8vLzwgTWF4aW11bSBzaXplIG9mIHRoZSBUaHJlYWQgTmV0d29yayBOYW1lIGZpZWxkIChieXRlcykKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgTmV0d29yayBOYW1lLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3ROZXR3b3JrTmFtZQoreworICAgIGNoYXIgbThbT1RfTkVUV09SS19OQU1FX01BWF9TSVpFICsgMV07ICAvLy88IEJ5dGUgdmFsdWVzCit9IG90TmV0d29ya05hbWU7CisKKyNkZWZpbmUgT1RfRVhUX1BBTl9JRF9TSVpFICAgICAgICAgOCAgIC8vLzwgU2l6ZSBvZiBhIFRocmVhZCBQQU4gSUQgKGJ5dGVzKQorCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gRXh0ZW5kZWQgUEFOIElELgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RFeHRlbmRlZFBhbklkCit7CisgICAgdWludDhfdCBtOFtPVF9FWFRfUEFOX0lEX1NJWkVdOyAgIC8vLzwgQnl0ZSB2YWx1ZXMKK30gb3RFeHRlbmRlZFBhbklkOworCisjZGVmaW5lIE9UX01FU0hfTE9DQUxfUFJFRklYX1NJWkUgIDggIC8vLzwgU2l6ZSBvZiB0aGUgTWVzaCBMb2NhbCBQcmVmaXggKGJ5dGVzKQorCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBNZXNoIExvY2FsIFByZWZpeC4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90TWVzaExvY2FsUHJlZml4Cit7CisgICAgdWludDhfdCBtOFtPVF9NRVNIX0xPQ0FMX1BSRUZJWF9TSVpFXTsgIC8vLzwgQnl0ZSB2YWx1ZXMKK30gb3RNZXNoTG9jYWxQcmVmaXg7CisKKyNkZWZpbmUgT1RfUFNLQ19NQVhfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8vLzwgTWF4aW11bSBzaXplIG9mIHRoZSBQU0tjIChieXRlcykKKworI2RlZmluZSBPVF9DT01NSVNTSU9OSU5HX1BBU1NQSFJBU0VfTUlOX1NJWkUgICAgICAgICA2ICAgLy8vPCBNaW5pbXVtIHNpemUgb2YgdGhlIENvbW1pc3Npb25pbmcgUGFzc3BocmFzZQorI2RlZmluZSBPVF9DT01NSVNTSU9OSU5HX1BBU1NQSFJBU0VfTUFYX1NJWkUgICAgICAgICAyNTUgLy8vPCBNYXhpbXVtIHNpemUgb2YgdGhlIENvbW1pc3Npb25pbmcgUGFzc3BocmFzZQorCisvKioKKyAgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIFBTS2MuCisgICoKKyAgKi8KK3R5cGVkZWYgc3RydWN0IG90UFNLYworeworICAgIHVpbnQ4X3QgbThbT1RfUFNLQ19NQVhfU0laRV07ICAvLy88IEJ5dGUgdmFsdWVzCit9IG90UFNLYzsKKworLyoqCisgICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50IFNlY3VyaXR5IFBvbGljeS4KKyAgKgorICAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RTZWN1cml0eVBvbGljeQoreworICAgIHVpbnQxNl90IG1Sb3RhdGlvblRpbWU7ICAvLy88IFRoZSB2YWx1ZSBmb3IgdGhyS2V5Um90YXRpb24gaW4gdW5pdHMgb2YgaG91cnMKKyAgICB1aW50OF90IG1GbGFnczsgICAgICAgICAgLy8vPCBGbGFncyBhcyBkZWZpbmVkIGluIFRocmVhZCAxLjEgU2VjdGlvbiA4LjEwLjEuMTUKK30gb3RTZWN1cml0eVBvbGljeTsKKworLyoqCisgKiBUaGlzIGVudW1lcmF0aW9uIGRlZmluZXMgdGhlIFNlY3VyaXR5IFBvbGljeSBUTFYgZmxhZ3MuCisgKgorICovCitlbnVtCit7CisgICAgT1RfU0VDVVJJVFlfUE9MSUNZX09CVEFJTl9NQVNURVJfS0VZICAgICAgPSAxIDw8IDcsICAvLy88IE9idGFpbmluZyB0aGUgTWFzdGVyIEtleQorICAgIE9UX1NFQ1VSSVRZX1BPTElDWV9OQVRJVkVfQ09NTUlTU0lPTklORyAgID0gMSA8PCA2LCAgLy8vPCBOYXRpdmUgQ29tbWlzc2lvbmluZworICAgIE9UX1NFQ1VSSVRZX1BPTElDWV9ST1VURVJTICAgICAgICAgICAgICAgID0gMSA8PCA1LCAgLy8vPCBSb3V0ZXJzIGVuYWJsZWQKKyAgICBPVF9TRUNVUklUWV9QT0xJQ1lfRVhURVJOQUxfQ09NTUlTU0lPTkVSICA9IDEgPDwgNCwgIC8vLzwgRXh0ZXJuYWwgQ29tbWlzc2lvbmVyIGFsbG93ZWQKKyAgICBPVF9TRUNVUklUWV9QT0xJQ1lfQkVBQ09OUyAgICAgICAgICAgICAgICA9IDEgPDwgMywgIC8vLzwgQmVhY29ucyBlbmFibGVkCit9OworCisvKioKKyAgKiBUaGlzIHR5cGUgcmVwcmVzZW50cyBDaGFubmVsIE1hc2sgUGFnZSAwLgorICAqCisgICovCit0eXBlZGVmIHVpbnQzMl90IG90Q2hhbm5lbE1hc2tQYWdlMDsKKworLyoqCisgKiBUaGlzIHR5cGUgcmVwcmVzZW50cyB0aGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQuCisgKgorICovCit0eXBlZGVmIHVpbnQxNl90IG90UGFuSWQ7CisKKy8qKgorICogVGhpcyB0eXBlIHJlcHJlc2VudHMgdGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAqCisgKi8KK3R5cGVkZWYgdWludDE2X3Qgb3RTaG9ydEFkZHJlc3M7CisKKyNkZWZpbmUgT1RfRVhUX0FERFJFU1NfU0laRSAgICAgICAgOCAgIC8vLzwgU2l6ZSBvZiBhbiBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MgKGJ5dGVzKQorCisvKioKKyAqIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdEV4dEFkZHJlc3MKK3sKKyAgICB1aW50OF90IG04W09UX0VYVF9BRERSRVNTX1NJWkVdOyAgLy8vPCBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MgYnl0ZXMKK30gb3RFeHRBZGRyZXNzOworCisjZGVmaW5lIE9UX0lQNl9QUkVGSVhfU0laRSAgICAgICAgIDggICAvLy88IFNpemUgb2YgYW4gSVB2NiBwcmVmaXggKGJ5dGVzKQorI2RlZmluZSBPVF9JUDZfQUREUkVTU19TSVpFICAgICAgICAxNiAgLy8vPCBTaXplIG9mIGFuIElQdjYgYWRkcmVzcyAoYnl0ZXMpCisKKy8qKgorICogQHN0cnVjdCBvdElwNkFkZHJlc3MKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIElQdjYgYWRkcmVzcy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitzdHJ1Y3Qgb3RJcDZBZGRyZXNzCit7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIHVpbnQ4X3QgIG04W09UX0lQNl9BRERSRVNTX1NJWkVdOyAgICAgICAgICAgICAgICAgICAgICAvLy88IDgtYml0IGZpZWxkcworICAgICAgICB1aW50MTZfdCBtMTZbT1RfSVA2X0FERFJFU1NfU0laRSAvIHNpemVvZih1aW50MTZfdCldOyAgLy8vPCAxNi1iaXQgZmllbGRzCisgICAgICAgIHVpbnQzMl90IG0zMltPVF9JUDZfQUREUkVTU19TSVpFIC8gc2l6ZW9mKHVpbnQzMl90KV07ICAvLy88IDMyLWJpdCBmaWVsZHMKKyAgICB9IG1GaWVsZHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgSVB2NiBhY2Nlc3NvciBmaWVsZHMKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgdHlwZSByZXByZXNlbnRzIGFuIElQdjYgYWRkcmVzcy4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90SXA2QWRkcmVzcyBvdElwNkFkZHJlc3M7CisKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBsb2NhbCBhbmQgcGVlciBJUHY2IHNvY2tldCBhZGRyZXNzZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IG90TWVzc2FnZUluZm8KK3sKKyAgICBvdElwNkFkZHJlc3MgbVNvY2tBZGRyOyAgICAgLy8vPCBUaGUgbG9jYWwgSVB2NiBhZGRyZXNzLgorICAgIG90SXA2QWRkcmVzcyBtUGVlckFkZHI7ICAgICAvLy88IFRoZSBwZWVyIElQdjYgYWRkcmVzcy4KKyAgICB1aW50MTZfdCAgICAgbVNvY2tQb3J0OyAgICAgLy8vPCBUaGUgbG9jYWwgdHJhbnNwb3J0LWxheWVyIHBvcnQuCisgICAgdWludDE2X3QgICAgIG1QZWVyUG9ydDsgICAgIC8vLzwgVGhlIHBlZXIgdHJhbnNwb3J0LWxheWVyIHBvcnQuCisgICAgaW50OF90ICAgICAgIG1JbnRlcmZhY2VJZDsgIC8vLzwgQW4gSVB2NiBpbnRlcmZhY2UgaWRlbnRpZmllci4KKyAgICB1aW50OF90ICAgICAgbUhvcExpbWl0OyAgICAgLy8vPCBUaGUgSVB2NiBIb3AgTGltaXQuCisgICAgY29uc3Qgdm9pZCAgKm1MaW5rSW5mbzsgICAgIC8vLzwgQSBwb2ludGVyIHRvIGxpbmstc3BlY2lmaWMgaW5mb3JtYXRpb24uCit9IG90TWVzc2FnZUluZm87CisKKy8qKgorICogVGhpcyB0eXBlIHBvaW50cyB0byBhbiBPcGVuVGhyZWFkIG1lc3NhZ2UgYnVmZmVyLgorICovCit0eXBlZGVmIHN0cnVjdCBvdE1lc3NhZ2UKK3sKKyAgICBzdHJ1Y3Qgb3RNZXNzYWdlICptTmV4dDsgIC8vLzwgQSBwb2ludGVyIHRvIHRoZSBuZXh0IE1lc3NhZ2UgYnVmZmVyLgorfSBvdE1lc3NhZ2U7CisKKworI2RlZmluZSBPVF9QQU5JRF9CUk9BRENBU1QgICAweGZmZmYgICAgICAvLy88IElFRUUgODAyLjE1LjQgQnJvYWRjYXN0IFBBTiBJRAorCisjZGVmaW5lIE9UX0NIQU5ORUxfMTFfTUFTSyAgICgxIDw8IDExKSAgIC8vLzwgQ2hhbm5lbCAxMQorI2RlZmluZSBPVF9DSEFOTkVMXzEyX01BU0sgICAoMSA8PCAxMikgICAvLy88IENoYW5uZWwgMTIKKyNkZWZpbmUgT1RfQ0hBTk5FTF8xM19NQVNLICAgKDEgPDwgMTMpICAgLy8vPCBDaGFubmVsIDEzCisjZGVmaW5lIE9UX0NIQU5ORUxfMTRfTUFTSyAgICgxIDw8IDE0KSAgIC8vLzwgQ2hhbm5lbCAxNAorI2RlZmluZSBPVF9DSEFOTkVMXzE1X01BU0sgICAoMSA8PCAxNSkgICAvLy88IENoYW5uZWwgMTUKKyNkZWZpbmUgT1RfQ0hBTk5FTF8xNl9NQVNLICAgKDEgPDwgMTYpICAgLy8vPCBDaGFubmVsIDE2CisjZGVmaW5lIE9UX0NIQU5ORUxfMTdfTUFTSyAgICgxIDw8IDE3KSAgIC8vLzwgQ2hhbm5lbCAxNworI2RlZmluZSBPVF9DSEFOTkVMXzE4X01BU0sgICAoMSA8PCAxOCkgICAvLy88IENoYW5uZWwgMTgKKyNkZWZpbmUgT1RfQ0hBTk5FTF8xOV9NQVNLICAgKDEgPDwgMTkpICAgLy8vPCBDaGFubmVsIDE5CisjZGVmaW5lIE9UX0NIQU5ORUxfMjBfTUFTSyAgICgxIDw8IDIwKSAgIC8vLzwgQ2hhbm5lbCAyMAorI2RlZmluZSBPVF9DSEFOTkVMXzIxX01BU0sgICAoMSA8PCAyMSkgICAvLy88IENoYW5uZWwgMjEKKyNkZWZpbmUgT1RfQ0hBTk5FTF8yMl9NQVNLICAgKDEgPDwgMjIpICAgLy8vPCBDaGFubmVsIDIyCisjZGVmaW5lIE9UX0NIQU5ORUxfMjNfTUFTSyAgICgxIDw8IDIzKSAgIC8vLzwgQ2hhbm5lbCAyMworI2RlZmluZSBPVF9DSEFOTkVMXzI0X01BU0sgICAoMSA8PCAyNCkgICAvLy88IENoYW5uZWwgMjQKKyNkZWZpbmUgT1RfQ0hBTk5FTF8yNV9NQVNLICAgKDEgPDwgMjUpICAgLy8vPCBDaGFubmVsIDI1CisjZGVmaW5lIE9UX0NIQU5ORUxfMjZfTUFTSyAgICgxIDw8IDI2KSAgIC8vLzwgQ2hhbm5lbCAyNgorCisjZGVmaW5lIE9UX0NIQU5ORUxfQUxMICAgICAgIDB4ZmZmZmZmZmYgIC8vLzwgQWxsIGNoYW5uZWxzCisKKyNkZWZpbmUgT1RfU1RFRVJJTkdfREFUQV9NQVhfTEVOR1RIICAgICAgIDE2ICAvLy88IE1heCBzdGVlcmluZyBkYXRhIGxlbmd0aCAoYnl0ZXMpCisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgc3RlZXJpbmcgZGF0YS4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90U3RlZXJpbmdEYXRhCit7CisgICAgdWludDhfdCBtTGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBMZW5ndGggb2Ygc3RlZXJpbmcgZGF0YSAoYnl0ZXMpCisgICAgdWludDhfdCBtOFtPVF9TVEVFUklOR19EQVRBX01BWF9MRU5HVEhdOyAgLy8vPCBCeXRlIHZhbHVlcworfSBvdFN0ZWVyaW5nRGF0YTsKKworLyoqCisgKiBUaGlzIHN0cnVjdCByZXByZXNlbnRzIGEgcmVjZWl2ZWQgSUVFRSA4MDIuMTUuNCBCZWFjb24uCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdEFjdGl2ZVNjYW5SZXN1bHQKK3sKKyAgICBvdEV4dEFkZHJlc3MgICAgbUV4dEFkZHJlc3M7ICAgICAgLy8vPCBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MKKyAgICBvdE5ldHdvcmtOYW1lICAgbU5ldHdvcmtOYW1lOyAgICAgLy8vPCBUaHJlYWQgTmV0d29yayBOYW1lCisgICAgb3RFeHRlbmRlZFBhbklkIG1FeHRlbmRlZFBhbklkOyAgIC8vLzwgVGhyZWFkIEV4dGVuZGVkIFBBTiBJRAorICAgIG90U3RlZXJpbmdEYXRhICBtU3RlZXJpbmdEYXRhOyAgICAvLy88IFN0ZWVyaW5nIERhdGEKKyAgICB1aW50MTZfdCAgICAgICAgbVBhbklkOyAgICAgICAgICAgLy8vPCBJRUVFIDgwMi4xNS40IFBBTiBJRAorICAgIHVpbnQxNl90ICAgICAgICBtSm9pbmVyVWRwUG9ydDsgICAvLy88IEpvaW5lciBVRFAgUG9ydAorICAgIHVpbnQ4X3QgICAgICAgICBtQ2hhbm5lbDsgICAgICAgICAvLy88IElFRUUgODAyLjE1LjQgQ2hhbm5lbAorICAgIGludDhfdCAgICAgICAgICBtUnNzaTsgICAgICAgICAgICAvLy88IFJTU0kgKGRCbSkKKyAgICB1aW50OF90ICAgICAgICAgbUxxaTsgICAgICAgICAgICAgLy8vPCBMUUkKKyAgICB1bnNpZ25lZCBpbnQgICAgbVZlcnNpb24gOiA0OyAgICAgLy8vPCBWZXJzaW9uCisgICAgYm9vbCAgICAgICAgICAgIG1Jc05hdGl2ZSA6IDE7ICAgIC8vLzwgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnCisgICAgYm9vbCAgICAgICAgICAgIG1Jc0pvaW5hYmxlIDogMTsgIC8vLzwgSm9pbmluZyBQZXJtaXR0ZWQgZmxhZworfSBvdEFjdGl2ZVNjYW5SZXN1bHQ7CisKKy8qKgorICogVGhpcyBzdHJ1Y3QgcmVwcmVzZW50cyBhbiBlbmVyZ3kgc2NhbiByZXN1bHQuCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdEVuZXJneVNjYW5SZXN1bHQKK3sKKyAgICB1aW50OF90IG1DaGFubmVsOyAgICAgICAgICAgICAgICAvLy88IElFRUUgODAyLjE1LjQgQ2hhbm5lbAorICAgIGludDhfdCAgbU1heFJzc2k7ICAgICAgICAgICAgICAgIC8vLzwgVGhlIG1heCBSU1NJIChkQm0pCit9IG90RW5lcmd5U2NhblJlc3VsdDsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIEFjdGl2ZSBvciBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdE9wZXJhdGlvbmFsRGF0YXNldAoreworICAgIHVpbnQ2NF90ICAgICAgICAgICAgIG1BY3RpdmVUaW1lc3RhbXA7ICAgICAgICAgICAgLy8vPCBBY3RpdmUgVGltZXN0YW1wCisgICAgdWludDY0X3QgICAgICAgICAgICAgbVBlbmRpbmdUaW1lc3RhbXA7ICAgICAgICAgICAvLy88IFBlbmRpbmcgVGltZXN0YW1wCisgICAgb3RNYXN0ZXJLZXkgICAgICAgICAgbU1hc3RlcktleTsgICAgICAgICAgICAgICAgICAvLy88IE5ldHdvcmsgTWFzdGVyIEtleQorICAgIG90TmV0d29ya05hbWUgICAgICAgIG1OZXR3b3JrTmFtZTsgICAgICAgICAgICAgICAgLy8vPCBOZXR3b3JrIE5hbWUKKyAgICBvdEV4dGVuZGVkUGFuSWQgICAgICBtRXh0ZW5kZWRQYW5JZDsgICAgICAgICAgICAgIC8vLzwgRXh0ZW5kZWQgUEFOIElECisgICAgb3RNZXNoTG9jYWxQcmVmaXggICAgbU1lc2hMb2NhbFByZWZpeDsgICAgICAgICAgICAvLy88IE1lc2ggTG9jYWwgUHJlZml4CisgICAgdWludDMyX3QgICAgICAgICAgICAgbURlbGF5OyAgICAgICAgICAgICAgICAgICAgICAvLy88IERlbGF5IFRpbWVyCisgICAgb3RQYW5JZCAgICAgICAgICAgICAgbVBhbklkOyAgICAgICAgICAgICAgICAgICAgICAvLy88IFBBTiBJRAorICAgIHVpbnQxNl90ICAgICAgICAgICAgIG1DaGFubmVsOyAgICAgICAgICAgICAgICAgICAgLy8vPCBDaGFubmVsCisgICAgb3RQU0tjICAgICAgICAgICAgICAgbVBTS2M7ICAgICAgICAgICAgICAgICAgICAgICAvLy88IFBTS2MKKyAgICBvdFNlY3VyaXR5UG9saWN5ICAgICBtU2VjdXJpdHlQb2xpY3k7ICAgICAgICAgICAgIC8vLzwgU2VjdXJpdHkgUG9saWN5CisgICAgb3RDaGFubmVsTWFza1BhZ2UwICAgbUNoYW5uZWxNYXNrUGFnZTA7ICAgICAgICAgICAvLy88IENoYW5uZWwgTWFzayBQYWdlIDAKKworICAgIGJvb2wgICAgICAgICAgICAgICAgIG1Jc0FjdGl2ZVRpbWVzdGFtcFNldCA6IDE7ICAgLy8vPCBUUlVFIGlmIEFjdGl2ZSBUaW1lc3RhbXAgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzUGVuZGluZ1RpbWVzdGFtcFNldCA6IDE7ICAvLy88IFRSVUUgaWYgUGVuZGluZyBUaW1lc3RhbXAgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzTWFzdGVyS2V5U2V0IDogMTsgICAgICAgICAvLy88IFRSVUUgaWYgTmV0d29yayBNYXN0ZXIgS2V5IGlzIHNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgICAgICAgICAgICAgICAgIG1Jc05ldHdvcmtOYW1lU2V0IDogMTsgICAgICAgLy8vPCBUUlVFIGlmIE5ldHdvcmsgTmFtZSBpcyBzZXQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICBib29sICAgICAgICAgICAgICAgICBtSXNFeHRlbmRlZFBhbklkU2V0IDogMTsgICAgIC8vLzwgVFJVRSBpZiBFeHRlbmRlZCBQQU4gSUQgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzTWVzaExvY2FsUHJlZml4U2V0IDogMTsgICAvLy88IFRSVUUgaWYgTWVzaCBMb2NhbCBQcmVmaXggaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzRGVsYXlTZXQgOiAxOyAgICAgICAgICAgICAvLy88IFRSVUUgaWYgRGVsYXkgVGltZXIgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzUGFuSWRTZXQgOiAxOyAgICAgICAgICAgICAvLy88IFRSVUUgaWYgUEFOIElEIGlzIHNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgICAgICAgICAgICAgICAgIG1Jc0NoYW5uZWxTZXQgOiAxOyAgICAgICAgICAgLy8vPCBUUlVFIGlmIENoYW5uZWwgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzUFNLY1NldCA6IDE7ICAgICAgICAgICAgICAvLy88IFRSVUUgaWYgUFNLYyBpcyBzZXQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICBib29sICAgICAgICAgICAgICAgICBtSXNTZWN1cml0eVBvbGljeVNldCA6IDE7ICAgIC8vLzwgVFJVRSBpZiBTZWN1cml0eSBQb2xpY3kgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzQ2hhbm5lbE1hc2tQYWdlMFNldCA6IDE7ICAvLy88IFRSVUUgaWYgQ2hhbm5lbCBNYXNrIFBhZ2UgMCBpcyBzZXQsIEZBTFNFIG90aGVyd2lzZS4KK30gb3RPcGVyYXRpb25hbERhdGFzZXQ7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIENvbW1pc3Npb25pbmcgRGF0YXNldC4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90Q29tbWlzc2lvbmluZ0RhdGFzZXQKK3sKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgbUxvY2F0b3I7ICAgICAgICAgICAgICAgICAgIC8vLzwgQm9yZGVyIFJvdXRlciBSTE9DMTYKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgbVNlc3Npb25JZDsgICAgICAgICAgICAgICAgIC8vLzwgQ29tbWlzc2lvbmVyIFNlc3Npb24gSWQKKyAgICBvdFN0ZWVyaW5nRGF0YSAgICAgICAgbVN0ZWVyaW5nRGF0YTsgICAgICAgICAgICAgIC8vLzwgU3RlZXJpbmcgRGF0YQorICAgIHVpbnQxNl90ICAgICAgICAgICAgICBtSm9pbmVyVWRwUG9ydDsgICAgICAgICAgICAgLy8vPCBKb2luZXIgVURQIFBvcnQKKworICAgIGJvb2wgICAgICAgICAgICAgICAgICBtSXNMb2NhdG9yU2V0IDogMTsgICAgICAgICAgLy8vPCBUUlVFIGlmIEJvcmRlciBSb3V0ZXIgUkxPQzE2IGlzIHNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgICAgICAgICAgICAgICAgICBtSXNTZXNzaW9uSWRTZXQ6IDE7ICAgICAgICAgLy8vPCBUUlVFIGlmIENvbW1pc3Npb25lciBTZXNzaW9uIElkIGlzIHNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgICAgICAgICAgICAgICAgICBtSXNTdGVlcmluZ0RhdGFTZXQgOiAxOyAgICAgLy8vPCBUUlVFIGlmIFN0ZWVyaW5nIERhdGEgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgIG1Jc0pvaW5lclVkcFBvcnRTZXQgOiAxOyAgICAvLy88IFRSVUUgaWYgSm9pbmVyIFVEUCBQb3J0IGlzIHNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorfSBvdENvbW1pc3Npb25pbmdEYXRhc2V0OworCisvKioKKyAqIFRoaXMgZW51bWVyYXRpb24gcmVwcmVzZW50cyBtZXNoY29wIFRMViB0eXBlcy4KKyAqCisgKi8KK3R5cGVkZWYgZW51bSBvdE1lc2hjb3BUbHZUeXBlCit7CisgICAgT1RfTUVTSENPUF9UTFZfQ0hBTk5FTCAgICAgICAgICAgICAgICAgICA9IDAsICAgIC8vLzwgbWVzaGNvcCBDaGFubmVsIFRMVgorICAgIE9UX01FU0hDT1BfVExWX1BBTklEICAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAvLy88IG1lc2hjb3AgUGFuIElkIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0VYVFBBTklEICAgICAgICAgICAgICAgICAgPSAyLCAgICAvLy88IG1lc2hjb3AgRXh0ZW5kZWQgUGFuIElkIFRMVgorICAgIE9UX01FU0hDT1BfVExWX05FVFdPUktOQU1FICAgICAgICAgICAgICAgPSAzLCAgICAvLy88IG1lc2hjb3AgTmV0d29yayBOYW1lIFRMVgorICAgIE9UX01FU0hDT1BfVExWX1BTS0MgICAgICAgICAgICAgICAgICAgICAgPSA0LCAgICAvLy88IG1lc2hjb3AgUFNLYyBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9NQVNURVJLRVkgICAgICAgICAgICAgICAgID0gNSwgICAgLy8vPCBtZXNoY29wIE5ldHdvcmsgTWFzdGVyIEtleSBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9ORVRXT1JLX0tFWV9TRVFVRU5DRSAgICAgID0gNiwgICAgLy8vPCBtZXNoY29wIE5ldHdvcmsgS2V5IFNlcXVlbmNlIFRMVgorICAgIE9UX01FU0hDT1BfVExWX01FU0hMT0NBTFBSRUZJWCAgICAgICAgICAgPSA3LCAgICAvLy88IG1lc2hjb3AgTWVzaCBMb2NhbCBQcmVmaXggVExWCisgICAgT1RfTUVTSENPUF9UTFZfU1RFRVJJTkdfREFUQSAgICAgICAgICAgICA9IDgsICAgIC8vLzwgbWVzaGNvcCBTdGVlcmluZyBEYXRhIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0JPUkRFUl9BR0VOVF9STE9DICAgICAgICAgPSA5LCAgICAvLy88IG1lc2hjb3AgQm9yZGVyIEFnZW50IExvY2F0b3IgVExWCisgICAgT1RfTUVTSENPUF9UTFZfQ09NTUlTU0lPTkVSX0lEICAgICAgICAgICA9IDEwLCAgIC8vLzwgbWVzaGNvcCBDb21taXNzaW9uZXIgSUQgVExWCisgICAgT1RfTUVTSENPUF9UTFZfQ09NTV9TRVNTSU9OX0lEICAgICAgICAgICA9IDExLCAgIC8vLzwgbWVzaGNvcCBDb21taXNzaW9uZXIgU2Vzc2lvbiBJRCBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9TRUNVUklUWVBPTElDWSAgICAgICAgICAgID0gMTIsICAgLy8vPCBtZXNoY29wIFNlY3VyaXR5IFBvbGljeSBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9HRVQgICAgICAgICAgICAgICAgICAgICAgID0gMTMsICAgLy8vPCBtZXNoY29wIEdldCBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9BQ1RJVkVUSU1FU1RBTVAgICAgICAgICAgID0gMTQsICAgLy8vPCBtZXNoY29wIEFjdGl2ZSBUaW1lc3RhbXAgVExWCisgICAgT1RfTUVTSENPUF9UTFZfU1RBVEUgICAgICAgICAgICAgICAgICAgICA9IDE2LCAgIC8vLzwgbWVzaGNvcCBTdGF0ZSBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9KT0lORVJfRFRMUyAgICAgICAgICAgICAgID0gMTcsICAgLy8vPCBtZXNoY29wIEpvaW5lciBEVExTIEVuY2Fwc3VsYXRpb24gVExWCisgICAgT1RfTUVTSENPUF9UTFZfSk9JTkVSX1VEUF9QT1JUICAgICAgICAgICA9IDE4LCAgIC8vLzwgbWVzaGNvcCBKb2luZXIgVURQIFBvcnQgVExWCisgICAgT1RfTUVTSENPUF9UTFZfSk9JTkVSX0lJRCAgICAgICAgICAgICAgICA9IDE5LCAgIC8vLzwgbWVzaGNvcCBKb2luZXIgSUlEIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0pPSU5FUl9STE9DICAgICAgICAgICAgICAgPSAyMCwgICAvLy88IG1lc2hjb3AgSm9pbmVyIFJvdXRlciBMb2NhdG9yIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0pPSU5FUl9ST1VURVJfS0VLICAgICAgICAgPSAyMSwgICAvLy88IG1lc2hjb3AgSm9pbmVyIFJvdXRlciBLRUsgVExWCisgICAgT1RfTUVTSENPUF9UTFZfUFJPVklTSU9OSU5HX1VSTCAgICAgICAgICA9IDMyLCAgIC8vLzwgbWVzaGNvcCBQcm92aXNpb25pbmcgVVJMIFRMVgorICAgIE9UX01FU0hDT1BfVExWX1ZFTkRPUl9OQU1FX1RMViAgICAgICAgICAgPSAzMywgICAvLy88IG1lc2hjb3AgVmVuZG9yIE5hbWUgVExWCisgICAgT1RfTUVTSENPUF9UTFZfVkVORE9SX01PREVMX1RMViAgICAgICAgICA9IDM0LCAgIC8vLzwgbWVzaGNvcCBWZW5kb3IgTW9kZWwgVExWCisgICAgT1RfTUVTSENPUF9UTFZfVkVORE9SX1NXX1ZFUlNJT05fVExWICAgICA9IDM1LCAgIC8vLzwgbWVzaGNvcCBWZW5kb3IgU1cgVmVyc2lvbiBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9WRU5ET1JfREFUQV9UTFYgICAgICAgICAgID0gMzYsICAgLy8vPCBtZXNoY29wIFZlbmRvciBEYXRhIFRMVgorICAgIE9UX01FU0hDT1BfVExWX1ZFTkRPUl9TVEFDS19WRVJTSU9OX1RMViAgPSAzNywgICAvLy88IG1lc2hjb3AgVmVuZG9yIFN0YWNrIFZlcnNpb24gVExWCisgICAgT1RfTUVTSENPUF9UTFZfUEVORElOR1RJTUVTVEFNUCAgICAgICAgICA9IDUxLCAgIC8vLzwgbWVzaGNvcCBQZW5kaW5nIFRpbWVzdGFtcCBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9ERUxBWVRJTUVSICAgICAgICAgICAgICAgID0gNTIsICAgLy8vPCBtZXNoY29wIERlbGF5IFRpbWVyIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0NIQU5ORUxNQVNLICAgICAgICAgICAgICAgPSA1MywgICAvLy88IG1lc2hjb3AgQ2hhbm5lbCBNYXNrIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0NPVU5UICAgICAgICAgICAgICAgICAgICAgPSA1NCwgICAvLy88IG1lc2hjb3AgQ291bnQgVExWCisgICAgT1RfTUVTSENPUF9UTFZfUEVSSU9EICAgICAgICAgICAgICAgICAgICA9IDU1LCAgIC8vLzwgbWVzaGNvcCBQZXJpb2QgVExWCisgICAgT1RfTUVTSENPUF9UTFZfU0NBTl9EVVJBVElPTiAgICAgICAgICAgICA9IDU2LCAgIC8vLzwgbWVzaGNvcCBTY2FuIER1cmF0aW9uIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0VORVJHWV9MSVNUICAgICAgICAgICAgICAgPSA1NywgICAvLy88IG1lc2hjb3AgRW5lcmd5IExpc3QgVExWCisgICAgT1RfTUVTSENPUF9UTFZfRElTQ09WRVJZUkVRVUVTVCAgICAgICAgICA9IDEyOCwgIC8vLzwgbWVzaGNvcCBEaXNjb3ZlcnkgUmVxdWVzdCBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9ESVNDT1ZFUllSRVNQT05TRSAgICAgICAgID0gMTI5LCAgLy8vPCBtZXNoY29wIERpc2NvdmVyeSBSZXNwb25zZSBUTFYKK30gb3RNZXNoY29wVGx2VHlwZTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIE1MRSBMaW5rIE1vZGUgY29uZmlndXJhdGlvbi4KKyAqLworT1RfVE9PTF9BTElHTig0KQordHlwZWRlZiBzdHJ1Y3Qgb3RMaW5rTW9kZUNvbmZpZworeworICAgIC8qKgorICAgICAqIDEsIGlmIHRoZSBzZW5kZXIgaGFzIGl0cyByZWNlaXZlciBvbiB3aGVuIG5vdCB0cmFuc21pdHRpbmcuICAwLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtUnhPbldoZW5JZGxlIDogMTsKKworICAgIC8qKgorICAgICAqIDEsIGlmIHRoZSBzZW5kZXIgd2lsbCB1c2UgSUVFRSA4MDIuMTUuNCB0byBzZWN1cmUgYWxsIGRhdGEgcmVxdWVzdHMuICAwLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtU2VjdXJlRGF0YVJlcXVlc3RzIDogMTsKKworICAgIC8qKgorICAgICAqIDEsIGlmIHRoZSBzZW5kZXIgaXMgYW4gRkZELiAgMCwgb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgbURldmljZVR5cGUgOiAxOworCisgICAgLyoqCisgICAgICogMSwgaWYgdGhlIHNlbmRlciByZXF1aXJlcyB0aGUgZnVsbCBOZXR3b3JrIERhdGEuICAwLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtTmV0d29ya0RhdGEgOiAxOworfSBvdExpbmtNb2RlQ29uZmlnOworCisvKioKKyAqIFRoaXMgZW51bWVyYXRpb24gcmVwcmVzZW50cyBmbGFncyB0aGF0IGluZGljYXRlIHdoYXQgY29uZmlndXJhdGlvbiBvciBzdGF0ZSBoYXMgY2hhbmdlZCB3aXRoaW4gT3BlblRocmVhZC4KKyAqCisgKi8KK2VudW0KK3sKKyAgICBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX0FEREVEICAgICAgICAgICAgPSAxIDw8IDAsICAgLy8vPCBJUHY2IGFkZHJlc3Mgd2FzIGFkZGVkCisgICAgT1RfQ0hBTkdFRF9JUDZfQUREUkVTU19SRU1PVkVEICAgICAgICAgID0gMSA8PCAxLCAgIC8vLzwgSVB2NiBhZGRyZXNzIHdhcyByZW1vdmVkCisgICAgT1RfQ0hBTkdFRF9USFJFQURfUk9MRSAgICAgICAgICAgICAgICAgID0gMSA8PCAyLCAgIC8vLzwgUm9sZSAoZGlzYWJsZWQsIGRldGFjaGVkLCBjaGlsZCwgcm91dGVyLCBsZWFkZXIpIGNoYW5nZWQKKyAgICBPVF9DSEFOR0VEX1RIUkVBRF9MTF9BRERSICAgICAgICAgICAgICAgPSAxIDw8IDMsICAgLy8vPCBUaGUgbGluay1sb2NhbCBhZGRyZXNzIGNoYW5nZWQKKyAgICBPVF9DSEFOR0VEX1RIUkVBRF9NTF9BRERSICAgICAgICAgICAgICAgPSAxIDw8IDQsICAgLy8vPCBUaGUgbWVzaC1sb2NhbCBhZGRyZXNzIGNoYW5nZWQKKyAgICBPVF9DSEFOR0VEX1RIUkVBRF9STE9DX0FEREVEICAgICAgICAgICAgPSAxIDw8IDUsICAgLy8vPCBSTE9DIHdhcyBhZGRlZAorICAgIE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfUkVNT1ZFRCAgICAgICAgICA9IDEgPDwgNiwgICAvLy88IFJMT0Mgd2FzIHJlbW92ZWQKKyAgICBPVF9DSEFOR0VEX1RIUkVBRF9QQVJUSVRJT05fSUQgICAgICAgICAgPSAxIDw8IDcsICAgLy8vPCBQYXJ0aXRpb24gSUQgY2hhbmdlZAorICAgIE9UX0NIQU5HRURfVEhSRUFEX0tFWV9TRVFVRU5DRV9DT1VOVEVSICA9IDEgPDwgOCwgICAvLy88IFRocmVhZCBLZXkgU2VxdWVuY2UgY2hhbmdlZAorICAgIE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEgICAgICAgICAgICAgICA9IDEgPDwgOSwgICAvLy88IFRocmVhZCBOZXR3b3JrIERhdGEgY2hhbmdlZAorICAgIE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX0FEREVEICAgICAgICAgICA9IDEgPDwgMTAsICAvLy88IENoaWxkIHdhcyBhZGRlZAorICAgIE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX1JFTU9WRUQgICAgICAgICA9IDEgPDwgMTEsICAvLy88IENoaWxkIHdhcyByZW1vdmVkCit9OworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gSVB2NiBwcmVmaXguCisgKi8KK3R5cGVkZWYgc3RydWN0IG90SXA2UHJlZml4Cit7CisgICAgb3RJcDZBZGRyZXNzICBtUHJlZml4OyAgLy8vPCBUaGUgSVB2NiBwcmVmaXguCisgICAgdWludDhfdCAgICAgICBtTGVuZ3RoOyAgLy8vPCBUaGUgSVB2NiBwcmVmaXggbGVuZ3RoLgorfSBvdElwNlByZWZpeDsKKworI2RlZmluZSBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVCAgMCAgLy8vPCBJbml0aWFsaXplciBmb3Igb3ROZXR3b3JrRGF0YUl0ZXJhdG9yLgorCit0eXBlZGVmIHVpbnQ4X3Qgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yOyAgLy8vPCBVc2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCBOZXR3b3JrIERhdGEgaW5mb3JtYXRpb24uCisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIEJvcmRlciBSb3V0ZXIgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RCb3JkZXJSb3V0ZXJDb25maWcKK3sKKyAgICAvKioKKyAgICAgKiBUaGUgSVB2NiBwcmVmaXguCisgICAgICovCisgICAgb3RJcDZQcmVmaXggbVByZWZpeDsKKworICAgIC8qKgorICAgICAqIEEgMi1iaXQgc2lnbmVkIGludGVnZXIgaW5kaWNhdGluZyByb3V0ZXIgcHJlZmVyZW5jZSBhcyBkZWZpbmVkIGluIFJGQyA0MjkxLgorICAgICAqLworICAgIGludCBtUHJlZmVyZW5jZSA6IDI7CisKKyAgICAvKioKKyAgICAgKiBUUlVFLCBpZiBAcCBtUHJlZml4IGlzIHByZWZlcnJlZC4gIEZBTFNFLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtUHJlZmVycmVkIDogMTsKKworICAgIC8qKgorICAgICAqIFRSVUUsIGlmIEBwIG1QcmVmaXggc2hvdWxkIGJlIHVzZWQgZm9yIGFkZHJlc3MgYXV0b2NvbmZpZ3VyYXRpb24uICBGQUxTRSwgb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgbVNsYWFjIDogMTsKKworICAgIC8qKgorICAgICAqIFRSVUUsIGlmIHRoaXMgYm9yZGVyIHJvdXRlciBpcyBhIERIQ1B2NiBBZ2VudCB0aGF0IHN1cHBsaWVzIElQdjYgYWRkcmVzcyBjb25maWd1cmF0aW9uLiAgRkFMU0UsIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIG1EaGNwIDogMTsKKworICAgIC8qKgorICAgICAqIFRSVUUsIGlmIHRoaXMgYm9yZGVyIHJvdXRlciBpcyBhIERIQ1B2NiBBZ2VudCB0aGF0IHN1cHBsaWVzIG90aGVyIGNvbmZpZ3VyYXRpb24gZGF0YS4gIEZBTFNFLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtQ29uZmlndXJlIDogMTsKKworICAgIC8qKgorICAgICAqIFRSVUUsIGlmIHRoaXMgYm9yZGVyIHJvdXRlciBpcyBhIGRlZmF1bHQgcm91dGUgZm9yIEBwIG1QcmVmaXguICBGQUxTRSwgb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgbURlZmF1bHRSb3V0ZSA6IDE7CisKKyAgICAvKioKKyAgICAgKiBUUlVFLCBpZiB0aGlzIHByZWZpeCBpcyBjb25zaWRlcmVkIG9uLW1lc2guICBGQUxTRSwgb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgbU9uTWVzaCA6IDE7CisKKyAgICAvKioKKyAgICAgKiBUUlVFLCBpZiB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgY29uc2lkZXJlZCBTdGFibGUgTmV0d29yayBEYXRhLiAgRkFMU0UsIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIG1TdGFibGUgOiAxOworCisgICAgLyoqCisgICAgICogVGhlIEJvcmRlciBBZ2VudCBSbG9jLgorICAgICAqLworICAgIHVpbnQxNl90IG1SbG9jMTY7Cit9IG90Qm9yZGVyUm91dGVyQ29uZmlnOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gRXh0ZXJuYWwgUm91dGUgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RFeHRlcm5hbFJvdXRlQ29uZmlnCit7CisgICAgLyoqCisgICAgICogVGhlIHByZWZpeCBmb3IgdGhlIG9mZi1tZXNoIHJvdXRlLgorICAgICAqLworICAgIG90SXA2UHJlZml4IG1QcmVmaXg7CisKKyAgICAvKioKKyAgICAgKiBBIDItYml0IHNpZ25lZCBpbnRlZ2VyIGluZGljYXRpbmcgcm91dGVyIHByZWZlcmVuY2UgYXMgZGVmaW5lZCBpbiBSRkMgNDI5MS4KKyAgICAgKi8KKyAgICBpbnQgbVByZWZlcmVuY2UgOiAyOworCisgICAgLyoqCisgICAgICogVFJVRSwgaWYgdGhpcyBjb25maWd1cmF0aW9uIGlzIGNvbnNpZGVyZWQgU3RhYmxlIE5ldHdvcmsgRGF0YS4gIEZBTFNFLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtU3RhYmxlIDogMTsKKworICAgIC8qKgorICAgICAqIFRSVUUgaWYgdGhlIGV4dGVybmFsIHJvdXRlIGVudHJ5J3MgbmV4dCBob3AgaXMgdGhpcyBkZXZpY2UgaXRzZWxmIChpLmUuLCB0aGUgcm91dGUgd2FzIGFkZGVkIGVhcmxpZXIgYnkgdGhpcworICAgICAqIGRldmljZSkuIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIFRoaXMgdmFsdWUgaXMgaWdub3JlZCB3aGVuIGFkZGluZyBhbiBleHRlcm5hbCByb3V0ZS4gRm9yIGFueSBhZGRlZCByb3V0ZSB0aGUgbmV4dCBob3AgaXMgdGhpcyBkZXZpY2UuCisgICAgICovCisgICAgYm9vbCBtTmV4dEhvcElzVGhpc0RldmljZSA6IDE7CisKK30gb3RFeHRlcm5hbFJvdXRlQ29uZmlnOworCisvKioKKyAqIERlZmluZXMgdmFsaWQgdmFsdWVzIGZvciBtZW1iZXIgbVByZWZlcmVuY2UgaW4gb3RFeHRlcm5hbFJvdXRlQ29uZmlnIGFuZCBvdEJvcmRlclJvdXRlckNvbmZpZy4KKyAqLwordHlwZWRlZiBlbnVtIG90Um91dGVQcmVmZXJlbmNlCit7CisgICAgT1RfUk9VVEVfUFJFRkVSRU5DRV9MT1cgID0gLTEsICAvLy88IExvdyByb3V0ZSBwcmVmZXJlbmNlLgorICAgIE9UX1JPVVRFX1BSRUZFUkVOQ0VfTUVEICA9IDAsICAgLy8vPCBNZWRpdW0gcm91dGUgcHJlZmVyZW5jZS4KKyAgICBPVF9ST1VURV9QUkVGRVJFTkNFX0hJR0ggPSAxLCAgIC8vLzwgSGlnaCByb3V0ZSBwcmVmZXJlbmNlLgorfSBvdFJvdXRlUHJlZmVyZW5jZTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgd2hpdGVsaXN0IGVudHJ5LgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RNYWNXaGl0ZWxpc3RFbnRyeQoreworICAgIG90RXh0QWRkcmVzcyBtRXh0QWRkcmVzczsgICAgICAgLy8vPCBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MKKyAgICBpbnQ4X3QgICAgICAgbVJzc2k7ICAgICAgICAgICAgIC8vLzwgUlNTSSB2YWx1ZQorICAgIGJvb2wgICAgICAgICBtVmFsaWQgOiAxOyAgICAgICAgLy8vPCBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHdoaXRlbGlzdCBlbnRyeSBpcyB2YWxpZAorICAgIGJvb2wgICAgICAgICBtRml4ZWRSc3NpIDogMTsgICAgLy8vPCBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFJTU0kgdmFsdWUgaXMgZml4ZWQuCit9IG90TWFjV2hpdGVsaXN0RW50cnk7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGJsYWNrbGlzdCBlbnRyeS4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90TWFjQmxhY2tsaXN0RW50cnkKK3sKKyAgICBvdEV4dEFkZHJlc3MgbUV4dEFkZHJlc3M7ICAgICAgIC8vLzwgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzCisgICAgYm9vbCAgICAgICAgIG1WYWxpZDsgICAgICAgICAgICAvLy88IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgYmxhY2tsaXN0IGVudHJ5IGlzIHZhbGlkCit9IG90TWFjQmxhY2tsaXN0RW50cnk7CisKKy8qKgorICogUmVwcmVzZW50cyBhIFRocmVhZCBkZXZpY2Ugcm9sZS4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQgPSAwLCAgLy8vPCBUaGUgVGhyZWFkIHN0YWNrIGlzIGRpc2FibGVkLgorICAgIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEID0gMSwgIC8vLzwgTm90IGN1cnJlbnRseSBwYXJ0aWNpcGF0aW5nIGluIGEgVGhyZWFkIG5ldHdvcmsvcGFydGl0aW9uLgorICAgIE9UX0RFVklDRV9ST0xFX0NISUxEICAgID0gMiwgIC8vLzwgVGhlIFRocmVhZCBDaGlsZCByb2xlLgorICAgIE9UX0RFVklDRV9ST0xFX1JPVVRFUiAgID0gMywgIC8vLzwgVGhlIFRocmVhZCBSb3V0ZXIgcm9sZS4KKyAgICBPVF9ERVZJQ0VfUk9MRV9MRUFERVIgICA9IDQsICAvLy88IFRoZSBUaHJlYWQgTGVhZGVyIHJvbGUuCit9IG90RGV2aWNlUm9sZTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGZvciBhIG5laWdoYm9yaW5nIFRocmVhZCBub2RlCisgKgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIG90RXh0QWRkcmVzcyAgIG1FeHRBZGRyZXNzOyAgICAgICAgICAgIC8vLzwgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzCisgICAgdWludDMyX3QgICAgICAgbUFnZTsgICAgICAgICAgICAgICAgICAgLy8vPCBUaW1lIGxhc3QgaGVhcmQKKyAgICB1aW50MTZfdCAgICAgICBtUmxvYzE2OyAgICAgICAgICAgICAgICAvLy88IFJMT0MxNgorICAgIHVpbnQzMl90ICAgICAgIG1MaW5rRnJhbWVDb3VudGVyOyAgICAgIC8vLzwgTGluayBGcmFtZSBDb3VudGVyCisgICAgdWludDMyX3QgICAgICAgbU1sZUZyYW1lQ291bnRlcjsgICAgICAgLy8vPCBNTEUgRnJhbWUgQ291bnRlcgorICAgIHVpbnQ4X3QgICAgICAgIG1MaW5rUXVhbGl0eUluOyAgICAgICAgIC8vLzwgTGluayBRdWFsaXR5IEluCisgICAgaW50OF90ICAgICAgICAgbUF2ZXJhZ2VSc3NpOyAgICAgICAgICAgLy8vPCBBdmVyYWdlIFJTU0kKKyAgICBpbnQ4X3QgICAgICAgICBtTGFzdFJzc2k7ICAgICAgICAgICAgICAvLy88IExhc3Qgb2JzZXJ2ZWQgUlNTSQorICAgIGJvb2wgICAgICAgICAgIG1SeE9uV2hlbklkbGUgOiAxOyAgICAgIC8vLzwgcngtb24td2hlbi1pZGxlCisgICAgYm9vbCAgICAgICAgICAgbVNlY3VyZURhdGFSZXF1ZXN0IDogMTsgLy8vPCBTZWN1cmUgRGF0YSBSZXF1ZXN0cworICAgIGJvb2wgICAgICAgICAgIG1GdWxsRnVuY3Rpb24gOiAxOyAgICAgIC8vLzwgRnVsbCBGdW5jdGlvbiBEZXZpY2UKKyAgICBib29sICAgICAgICAgICBtRnVsbE5ldHdvcmtEYXRhIDogMTsgICAvLy88IEZ1bGwgTmV0d29yayBEYXRhCisgICAgYm9vbCAgICAgICAgICAgbUlzQ2hpbGQgOiAxOyAgICAgICAgICAgLy8vPCBJcyB0aGUgbmVpZ2hib3IgYSBjaGlsZAorfSBvdE5laWdoYm9ySW5mbzsKKworI2RlZmluZSBPVF9ORUlHSEJPUl9JTkZPX0lURVJBVE9SX0lOSVQgIDAgIC8vLzwgSW5pdGlhbGl6ZXIgZm9yIG90TmVpZ2hib3JJbmZvSXRlcmF0b3IuCisKK3R5cGVkZWYgaW50MTZfdCBvdE5laWdoYm9ySW5mb0l0ZXJhdG9yOyAgICAvLy88IFVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIG5laWdoYm9yIHRhYmxlLgorCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGRpYWdub3N0aWMgaW5mb3JtYXRpb24gZm9yIGEgVGhyZWFkIENoaWxkCisgKgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIG90RXh0QWRkcmVzcyAgIG1FeHRBZGRyZXNzOyAgICAgICAgICAgIC8vLzwgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzCisgICAgdWludDMyX3QgICAgICAgbVRpbWVvdXQ7ICAgICAgICAgICAgICAgLy8vPCBUaW1lb3V0CisgICAgdWludDMyX3QgICAgICAgbUFnZTsgICAgICAgICAgICAgICAgICAgLy8vPCBUaW1lIGxhc3QgaGVhcmQKKyAgICB1aW50MTZfdCAgICAgICBtUmxvYzE2OyAgICAgICAgICAgICAgICAvLy88IFJMT0MxNgorICAgIHVpbnQxNl90ICAgICAgIG1DaGlsZElkOyAgICAgICAgICAgICAgIC8vLzwgQ2hpbGQgSUQKKyAgICB1aW50OF90ICAgICAgICBtTmV0d29ya0RhdGFWZXJzaW9uOyAgICAvLy88IE5ldHdvcmsgRGF0YSBWZXJzaW9uCisgICAgdWludDhfdCAgICAgICAgbUxpbmtRdWFsaXR5SW47ICAgICAgICAgLy8vPCBMaW5rIFF1YWxpdHkgSW4KKyAgICBpbnQ4X3QgICAgICAgICBtQXZlcmFnZVJzc2k7ICAgICAgICAgICAvLy88IEF2ZXJhZ2UgUlNTSQorICAgIGludDhfdCAgICAgICAgIG1MYXN0UnNzaTsgICAgICAgICAgICAgIC8vLzwgTGFzdCBvYnNlcnZlZCBSU1NJCisgICAgYm9vbCAgICAgICAgICAgbVJ4T25XaGVuSWRsZSA6IDE7ICAgICAgLy8vPCByeC1vbi13aGVuLWlkbGUKKyAgICBib29sICAgICAgICAgICBtU2VjdXJlRGF0YVJlcXVlc3QgOiAxOyAvLy88IFNlY3VyZSBEYXRhIFJlcXVlc3RzCisgICAgYm9vbCAgICAgICAgICAgbUZ1bGxGdW5jdGlvbiA6IDE7ICAgICAgLy8vPCBGdWxsIEZ1bmN0aW9uIERldmljZQorICAgIGJvb2wgICAgICAgICAgIG1GdWxsTmV0d29ya0RhdGEgOiAxOyAgIC8vLzwgRnVsbCBOZXR3b3JrIERhdGEKK30gb3RDaGlsZEluZm87CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYSBUaHJlYWQgUm91dGVyCisgKgorICovCitPVF9UT09MX0FMSUdOKDQpCit0eXBlZGVmIHN0cnVjdAoreworICAgIG90RXh0QWRkcmVzcyAgIG1FeHRBZGRyZXNzOyAgICAgICAgICAgIC8vLzwgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzCisgICAgdWludDE2X3QgICAgICAgbVJsb2MxNjsgICAgICAgICAgICAgICAgLy8vPCBSTE9DMTYKKyAgICB1aW50OF90ICAgICAgICBtUm91dGVySWQ7ICAgICAgICAgICAgICAvLy88IFJvdXRlciBJRAorICAgIHVpbnQ4X3QgICAgICAgIG1OZXh0SG9wOyAgICAgICAgICAgICAgIC8vLzwgTmV4dCBob3AgdG8gcm91dGVyCisgICAgdWludDhfdCAgICAgICAgbVBhdGhDb3N0OyAgICAgICAgICAgICAgLy8vPCBQYXRoIGNvc3QgdG8gcm91dGVyCisgICAgdWludDhfdCAgICAgICAgbUxpbmtRdWFsaXR5SW47ICAgICAgICAgLy8vPCBMaW5rIFF1YWxpdHkgSW4KKyAgICB1aW50OF90ICAgICAgICBtTGlua1F1YWxpdHlPdXQ7ICAgICAgICAvLy88IExpbmsgUXVhbGl0eSBPdXQKKyAgICB1aW50OF90ICAgICAgICBtQWdlOyAgICAgICAgICAgICAgICAgICAvLy88IFRpbWUgbGFzdCBoZWFyZAorICAgIGJvb2wgICAgICAgICAgIG1BbGxvY2F0ZWQgOiAxOyAgICAgICAgIC8vLzwgUm91dGVyIElEIGFsbG9jYXRlZCBvciBub3QKKyAgICBib29sICAgICAgICAgICBtTGlua0VzdGFibGlzaGVkIDogMTsgICAvLy88IExpbmsgZXN0YWJsaXNoZWQgd2l0aCBSb3V0ZXIgSUQgb3Igbm90Cit9IG90Um91dGVySW5mbzsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIEVJRCBjYWNoZSBlbnRyeS4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90RWlkQ2FjaGVFbnRyeQoreworICAgIG90SXA2QWRkcmVzcyAgICBtVGFyZ2V0OyAgICAgICAgICAvLy88IFRhcmdldAorICAgIG90U2hvcnRBZGRyZXNzICBtUmxvYzE2OyAgICAgICAgICAvLy88IFJMT0MxNgorICAgIGJvb2wgICAgICAgICAgICBtVmFsaWQgOiAxOyAgICAgICAvLy88IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgY2FjaGUgZW50cnkgaXMgdmFsaWQKK30gb3RFaWRDYWNoZUVudHJ5OworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIFRocmVhZCBMZWFkZXIgRGF0YS4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90TGVhZGVyRGF0YQoreworICAgIHVpbnQzMl90IG1QYXJ0aXRpb25JZDsgICAgICAgICAgICAvLy88IFBhcnRpdGlvbiBJRAorICAgIHVpbnQ4X3QgbVdlaWdodGluZzsgICAgICAgICAgICAgICAvLy88IExlYWRlciBXZWlnaHQKKyAgICB1aW50OF90IG1EYXRhVmVyc2lvbjsgICAgICAgICAgICAgLy8vPCBGdWxsIE5ldHdvcmsgRGF0YSBWZXJzaW9uCisgICAgdWludDhfdCBtU3RhYmxlRGF0YVZlcnNpb247ICAgICAgIC8vLzwgU3RhYmxlIE5ldHdvcmsgRGF0YSBWZXJzaW9uCisgICAgdWludDhfdCBtTGVhZGVyUm91dGVySWQ7ICAgICAgICAgIC8vLzwgTGVhZGVyIFJvdXRlciBJRAorfSBvdExlYWRlckRhdGE7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgTUFDIGxheWVyIGNvdW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBvdE1hY0NvdW50ZXJzCit7CisgICAgdWludDMyX3QgbVR4VG90YWw7ICAgICAgICAgICAgICAgIC8vLzwgVGhlIHRvdGFsIG51bWJlciBvZiB0cmFuc21pc3Npb25zLgorICAgIHVpbnQzMl90IG1UeFVuaWNhc3Q7ICAgICAgICAgICAgICAvLy88IFRoZSB0b3RhbCBudW1iZXIgb2YgdW5pY2FzdCB0cmFuc21pc3Npb25zLgorICAgIHVpbnQzMl90IG1UeEJyb2FkY2FzdDsgICAgICAgICAgICAvLy88IFRoZSB0b3RhbCBudW1iZXIgb2YgYnJvYWRjYXN0IHRyYW5zbWlzc2lvbnMuCisgICAgdWludDMyX3QgbVR4QWNrUmVxdWVzdGVkOyAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiB0cmFuc21pc3Npb25zIHdpdGggYWNrIHJlcXVlc3QuCisgICAgdWludDMyX3QgbVR4QWNrZWQ7ICAgICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiB0cmFuc21pc3Npb25zIHRoYXQgd2VyZSBhY2tlZC4KKyAgICB1aW50MzJfdCBtVHhOb0Fja1JlcXVlc3RlZDsgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbnMgd2l0aG91dCBhY2sgcmVxdWVzdC4KKyAgICB1aW50MzJfdCBtVHhEYXRhOyAgICAgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIGRhdGEuCisgICAgdWludDMyX3QgbVR4RGF0YVBvbGw7ICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBkYXRhIHBvbGwuCisgICAgdWludDMyX3QgbVR4QmVhY29uOyAgICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBiZWFjb24uCisgICAgdWludDMyX3QgbVR4QmVhY29uUmVxdWVzdDsgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBiZWFjb24gcmVxdWVzdC4KKyAgICB1aW50MzJfdCBtVHhPdGhlcjsgICAgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIG90aGVyIHR5cGVzIG9mIGZyYW1lcy4KKyAgICB1aW50MzJfdCBtVHhSZXRyeTsgICAgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIHRpbWVzLgorICAgIHVpbnQzMl90IG1UeEVyckNjYTsgICAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgQ0NBIGZhaWx1cmUgdGltZXMuCisgICAgdWludDMyX3QgbVR4RXJyQWJvcnQ7ICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiBmcmFtZSB0cmFuc21pc3Npb24gZmFpbHVyZXMgZHVlIHRvIGFib3J0IGVycm9yLgorICAgIHVpbnQzMl90IG1SeFRvdGFsOyAgICAgICAgICAgICAgICAvLy88IFRoZSB0b3RhbCBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cy4KKyAgICB1aW50MzJfdCBtUnhVbmljYXN0OyAgICAgICAgICAgICAgLy8vPCBUaGUgdG90YWwgbnVtYmVyIG9mIHVuaWNhc3QgcGFja2V0cyByZWNlaXZlZC4KKyAgICB1aW50MzJfdCBtUnhCcm9hZGNhc3Q7ICAgICAgICAgICAgLy8vPCBUaGUgdG90YWwgbnVtYmVyIG9mIGJyb2FkY2FzdCBwYWNrZXRzIHJlY2VpdmVkLgorICAgIHVpbnQzMl90IG1SeERhdGE7ICAgICAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZGF0YS4KKyAgICB1aW50MzJfdCBtUnhEYXRhUG9sbDsgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIGRhdGEgcG9sbC4KKyAgICB1aW50MzJfdCBtUnhCZWFjb247ICAgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJlYWNvbi4KKyAgICB1aW50MzJfdCBtUnhCZWFjb25SZXF1ZXN0OyAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJlYWNvbiByZXF1ZXN0LgorICAgIHVpbnQzMl90IG1SeE90aGVyOyAgICAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgb3RoZXIgdHlwZXMgb2YgZnJhbWVzLgorICAgIHVpbnQzMl90IG1SeFdoaXRlbGlzdEZpbHRlcmVkOyAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyBmaWx0ZXJlZCBieSB3aGl0ZWxpc3QuCisgICAgdWludDMyX3QgbVJ4RGVzdEFkZHJGaWx0ZXJlZDsgICAgIC8vLzwgVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIGZpbHRlcmVkIGJ5IGRlc3RpbmF0aW9uIGNoZWNrLgorICAgIHVpbnQzMl90IG1SeER1cGxpY2F0ZWQ7ICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZHVwbGljYXRlZCBwYWNrZXRzLgorICAgIHVpbnQzMl90IG1SeEVyck5vRnJhbWU7ICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyB0aGF0IGRvIG5vdCBjb250YWluIGNvbnRlbnRzLgorICAgIHVpbnQzMl90IG1SeEVyclVua25vd25OZWlnaGJvcjsgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyBmcm9tIHVua25vd24gbmVpZ2hib3IuCisgICAgdWludDMyX3QgbVJ4RXJySW52YWxpZFNyY0FkZHI7ICAgIC8vLzwgVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIHdob3NlIHNvdXJjZSBhZGRyZXNzIGlzIGludmFsaWQuCisgICAgdWludDMyX3QgbVJ4RXJyU2VjOyAgICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIHdpdGggc2VjdXJpdHkgZXJyb3IuCisgICAgdWludDMyX3QgbVJ4RXJyRmNzOyAgICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIHdpdGggRkNTIGVycm9yLgorICAgIHVpbnQzMl90IG1SeEVyck90aGVyOyAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyB3aXRoIG90aGVyIGVycm9yLgorfSBvdE1hY0NvdW50ZXJzOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIElQIGxldmVsIGNvdW50ZXJzCisgKi8KK3R5cGVkZWYgc3RydWN0IG90SXBDb3VudGVycworeworICAgIHVpbnQzMl90IG1UeFN1Y2Nlc3M7ICAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgSVB2NiBwYWNrZXRzIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZC4KKyAgICB1aW50MzJfdCBtUnhTdWNjZXNzOyAgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIElQdjYgcGFja2V0cyBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQuCisgICAgdWludDMyX3QgbVR4RmFpbHVyZTsgICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiBJUHY2IHBhY2tldHMgZmFpbGVkIHRvIHRyYW5zbWl0LgorICAgIHVpbnQzMl90IG1SeEZhaWx1cmU7ICAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgSVB2NiBwYWNrZXRzIGZhaWxlZCB0byByZWNlaXZlLgorfSBvdElwQ291bnRlcnM7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgbWVzc2FnZSBidWZmZXIgaW5mb3JtYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IG90QnVmZmVySW5mbworeworICAgIHVpbnQxNl90IG1Ub3RhbEJ1ZmZlcnM7ICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcG9vbC4KKyAgICB1aW50MTZfdCBtRnJlZUJ1ZmZlcnM7ICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIGZyZWUgbWVzc2FnZSBidWZmZXJzLgorICAgIHVpbnQxNl90IG02bG9TZW5kTWVzc2FnZXM7ICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIDZsbyBzZW5kIHF1ZXVlLgorICAgIHVpbnQxNl90IG02bG9TZW5kQnVmZmVyczsgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgNmxvIHNlbmQgcXVldWUuCisgICAgdWludDE2X3QgbTZsb1JlYXNzZW1ibHlNZXNzYWdlczsgIC8vLzwgVGhlIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgNkxvV1BBTiByZWFzc2VtYmx5IHF1ZXVlLgorICAgIHVpbnQxNl90IG02bG9SZWFzc2VtYmx5QnVmZmVyczsgICAvLy88IFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgNkxvV1BBTiByZWFzc2VtYmx5IHF1ZXVlLgorICAgIHVpbnQxNl90IG1JcDZNZXNzYWdlczsgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIElQdjYgc2VuZCBxdWV1ZS4KKyAgICB1aW50MTZfdCBtSXA2QnVmZmVyczsgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIElQdjYgc2VuZCBxdWV1ZS4KKyAgICB1aW50MTZfdCBtTXBsTWVzc2FnZXM7ICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBNUEwgc2VuZCBxdWV1ZS4KKyAgICB1aW50MTZfdCBtTXBsQnVmZmVyczsgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIE1QTCBzZW5kIHF1ZXVlLgorICAgIHVpbnQxNl90IG1NbGVNZXNzYWdlczsgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIE1MRSBzZW5kIHF1ZXVlLgorICAgIHVpbnQxNl90IG1NbGVCdWZmZXJzOyAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgTUxFIHNlbmQgcXVldWUuCisgICAgdWludDE2X3QgbUFycE1lc3NhZ2VzOyAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgQVJQIHNlbmQgcXVldWUuCisgICAgdWludDE2X3QgbUFycEJ1ZmZlcnM7ICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBBUlAgc2VuZCBxdWV1ZS4KKyAgICB1aW50MTZfdCBtQ29hcE1lc3NhZ2VzOyAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBDb0FQIHNlbmQgcXVldWUuCisgICAgdWludDE2X3QgbUNvYXBCdWZmZXJzOyAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBDb0FQIHNlbmQgcXVldWUuCisgICAgdWludDE2X3QgbUNvYXBTZWN1cmVNZXNzYWdlczsgICAgIC8vLzwgVGhlIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgQ29BUCBzZWN1cmUgc2VuZCBxdWV1ZS4KKyAgICB1aW50MTZfdCBtQ29hcFNlY3VyZUJ1ZmZlcnM7ICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIENvQVAgc2VjdXJlIHNlbmQgcXVldWUuCit9IG90QnVmZmVySW5mbzsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIElQdjYgbmV0d29yayBpbnRlcmZhY2UgdW5pY2FzdCBhZGRyZXNzLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3ROZXRpZkFkZHJlc3MKK3sKKyAgICBvdElwNkFkZHJlc3MgICAgICAgICAgIG1BZGRyZXNzOyAgICAgICAgICAgICAgICAgLy8vPCBUaGUgSVB2NiB1bmljYXN0IGFkZHJlc3MuCisgICAgdWludDhfdCAgICAgICAgICAgICAgICBtUHJlZml4TGVuZ3RoOyAgICAgICAgICAgIC8vLzwgVGhlIFByZWZpeCBsZW5ndGguCisgICAgYm9vbCAgICAgICAgICAgICAgICAgICBtUHJlZmVycmVkIDogMTsgICAgICAgICAgIC8vLzwgVFJVRSBpZiB0aGUgYWRkcmVzcyBpcyBwcmVmZXJyZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICBib29sICAgICAgICAgICAgICAgICAgIG1WYWxpZCA6IDE7ICAgICAgICAgICAgICAgLy8vPCBUUlVFIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgICBtU2NvcGVPdmVycmlkZVZhbGlkIDogMTsgIC8vLzwgVFJVRSBpZiB0aGUgbVNjb3BlT3ZlcnJpZGUgdmFsdWUgaXMgdmFsaWQsIEZBTFNFIG90aGV3cmlzZS4KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgIG1TY29wZU92ZXJyaWRlIDogNDsgICAgICAgLy8vPCBUaGUgSVB2NiBzY29wZSBvZiB0aGlzIGFkZHJlc3MuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgICBtUmxvYyA6IDE7ICAgICAgICAgICAgICAgIC8vLzwgVFJVRSBpZiB0aGUgYWRkcmVzcyBpcyBhbiBSTE9DLCBGQUxTRSBvdGhlcndpc2UuCisgICAgc3RydWN0IG90TmV0aWZBZGRyZXNzICptTmV4dDsgICAgICAgICAgICAgICAgICAgIC8vLzwgQSBwb2ludGVyIHRvIHRoZSBuZXh0IG5ldHdvcmsgaW50ZXJmYWNlIGFkZHJlc3MuCit9IG90TmV0aWZBZGRyZXNzOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gSVB2NiBuZXR3b3JrIGludGVyZmFjZSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90TmV0aWZNdWx0aWNhc3RBZGRyZXNzCit7CisgICAgb3RJcDZBZGRyZXNzICAgICAgICAgICAgICAgICAgICBtQWRkcmVzczsgICAvLy88IFRoZSBJUHY2IG11bHRpY2FzdCBhZGRyZXNzLgorICAgIHN0cnVjdCBvdE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqbU5leHQ7ICAgICAgLy8vPCBBIHBvaW50ZXIgdG8gdGhlIG5leHQgbmV0d29yayBpbnRlcmZhY2UgbXVsdGljYXN0IGFkZHJlc3MuCit9IG90TmV0aWZNdWx0aWNhc3RBZGRyZXNzOworCisvKioKKyAqIFRoaXMgZW51bWVyYXRpb24gcmVwcmVzZW50cyB0aGUgbGlzdCBvZiBhbGxvd2FibGUgdmFsdWVzIGZvciBhbiBJbnRlcmZhY2VJZC4KKyAqLwordHlwZWRlZiBlbnVtIG90TmV0aWZJbnRlcmZhY2VJZAoreworICAgIE9UX05FVElGX0lOVEVSRkFDRV9JRF9USFJFQUQgPSAxLCAgLy8vPCBUaGUgVGhyZWFkIE5ldHdvcmsgaW50ZXJmYWNlIElELgorfSBvdE5ldGlmSW50ZXJmYWNlSWQ7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBkYXRhIHVzZWQgYnkgU2VtYW50aWNhbGx5IE9wYXF1ZSBJSUQgR2VuZXJhdG9yLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50OF90ICAgICAgICAqbUludGVyZmFjZUlkOyAgICAgICAgLy8vPCBTdHJpbmcgb2YgYnl0ZXMgcmVwcmVzZW50aW5nIGludGVyZmFjZSBJRC4gTGlrZSAiZXRoMCIgb3IgIndsYW4wIi4KKyAgICB1aW50OF90ICAgICAgICAgbUludGVyZmFjZUlkTGVuZ3RoOyAgLy8vPCBMZW5ndGggb2YgaW50ZXJmYWNlIElEIHN0cmluZy4KKworICAgIHVpbnQ4X3QgICAgICAgICptTmV0d29ya0lkOyAgICAgICAgICAvLy88IE5ldHdvcmsgSUQgKG9yIG5hbWUpLiBDYW4gYmUgbnVsbCBpZiBtTmV0d29ya0lkTGVuZ3RoIGlzIDAuCisgICAgdWludDhfdCAgICAgICAgIG1OZXR3b3JrSWRMZW5ndGg7ICAgIC8vLzwgTGVuZ3RoIG9mIE5ldHdvcmsgSUQgc3RyaW5nLgorCisgICAgdWludDhfdCAgICAgICAgIG1EYWRDb3VudGVyOyAgICAgICAgIC8vLzwgRHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIGNvdW50ZXIuCisKKyAgICB1aW50OF90ICAgICAgICAqbVNlY3JldEtleTsgICAgICAgICAgLy8vPCBTZWNyZXQga2V5IHVzZWQgdG8gY3JlYXRlIElJRC4gQ2Fubm90IGJlIG51bGwuCisgICAgdWludDE2X3QgICAgICAgIG1TZWNyZXRLZXlMZW5ndGg7ICAgIC8vLzwgU2VjcmV0IGtleSBsZW5ndGggaW4gYnl0ZXMuIFNob3VsZCBiZSBhdCBsZWFzdCAxNiBieXRlcyA9PSAxMjggYml0cy4KK30gb3RTZW1hbnRpY2FsbHlPcGFxdWVJaWRHZW5lcmF0b3JEYXRhOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gSVB2NiBzb2NrZXQgYWRkcmVzcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RTb2NrQWRkcgoreworICAgIG90SXA2QWRkcmVzcyBtQWRkcmVzczsgIC8vLzwgQW4gSVB2NiBhZGRyZXNzLgorICAgIHVpbnQxNl90ICAgICBtUG9ydDsgICAgIC8vLzwgQSB0cmFuc3BvcnQtbGF5ZXIgcG9ydC4KKyAgICBpbnQ4X3QgICAgICAgbVNjb3BlSWQ7ICAvLy88IEFuIElQdjYgc2NvcGUgaWRlbnRpZmllci4KK30gb3RTb2NrQWRkcjsKKworI2lmZGVmIE9URExMCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB0byBub3RpZnkgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgT3BlblRocmVhZCBkZXZpY2VzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFBZGRlZCAgICAgICBBIGZsYWcgaW5kaWNhdGluZyBpZiB0aGUgZGV2aWNlIHdhcyBhZGRlZCBvciByZW1vdmVkLgorICogQHBhcmFtW2luXSAgYURldmljZUd1aWQgIEEgR1VJRCBpbmRpY2F0aW5nIHdoaWNoIGRldmljZSBzdGF0ZSBjaGFuZ2VkLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqLwordHlwZWRlZiB2b2lkIChPVENBTEwgKm90RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrKShib29sIGFBZGRlZCwgY29uc3QgR1VJRCAqYURldmljZUd1aWQsIHZvaWQgKmFDb250ZXh0KTsKKworI2VuZGlmIC8vIE9URExMCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9UWVBFU19IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3VkcC5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3VkcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGM4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvdWRwLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBPcGVuVGhyZWFkIFVEUCBBUEkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX1VEUF9IXworI2RlZmluZSBPUEVOVEhSRUFEX1VEUF9IXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9tZXNzYWdlLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGFkZHRvZ3JvdXAgYXBpLXVkcAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdCBjb250cm9sIFVEUCBjb21tdW5pY2F0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjYWxsYmFjayBhbGxvd3MgT3BlblRocmVhZCB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIG9mIGEgcmVjZWl2ZWQgVURQIG1lc3NhZ2UuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdFVkcFJlY2VpdmUpKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBVRFAgc29ja2V0LgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RVZHBTb2NrZXQKK3sKKyAgICBvdFNvY2tBZGRyICAgICAgICAgICBtU29ja05hbWU7ICAvLy88IFRoZSBsb2NhbCBJUHY2IHNvY2tldCBhZGRyZXNzLgorICAgIG90U29ja0FkZHIgICAgICAgICAgIG1QZWVyTmFtZTsgIC8vLzwgVGhlIHBlZXIgSVB2NiBzb2NrZXQgYWRkcmVzcy4KKyAgICBvdFVkcFJlY2VpdmUgICAgICAgICBtSGFuZGxlcjsgICAvLy88IEEgZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgYXBwbGljYXRpb24gY2FsbGJhY2suCisgICAgdm9pZCAgICAgICAgICAgICAgICAqbUNvbnRleHQ7ICAgLy8vPCBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAgICB2b2lkICAgICAgICAgICAgICAgICptVHJhbnNwb3J0OyAvLy88IEEgcG9pbnRlciB0byB0aGUgdHJhbnNwb3J0IG9iamVjdCAoaW50ZXJuYWwgdXNlIG9ubHkpLgorICAgIHN0cnVjdCBvdFVkcFNvY2tldCAgKm1OZXh0OyAgICAgIC8vLzwgQSBwb2ludGVyIHRvIHRoZSBuZXh0IFVEUCBzb2NrZXQgKGludGVybmFsIHVzZSBvbmx5KS4KK30gb3RVZHBTb2NrZXQ7CisKKy8qKgorICogQWxsb2NhdGUgYSBuZXcgbWVzc2FnZSBidWZmZXIgZm9yIHNlbmRpbmcgYSBVRFAgbWVzc2FnZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhTGlua1NlY3VyaXR5RW5hYmxlZCAgVFJVRSBpZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgc2VjdXJlZCBhdCBMYXllciAyLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBidWZmZXIgb3IgTlVMTCBpZiBubyBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZS4KKyAqCisgKiBAc2Egb3RGcmVlTWVzc2FnZQorICoKKyAqLworb3RNZXNzYWdlICpvdFVkcE5ld01lc3NhZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFMaW5rU2VjdXJpdHlFbmFibGVkKTsKKworLyoqCisgKiBPcGVuIGEgVURQL0lQdjYgc29ja2V0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhU29ja2V0ICAgIEEgcG9pbnRlciB0byBhIFVEUCBzb2NrZXQgc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICBBIHBvaW50ZXIgdG8gdGhlIGFwcGxpY2F0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICBTdWNjZXNzZnVsbHkgb3BlbmVkIHRoZSBzb2NrZXQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgR2l2ZW4gc29ja2V0IHN0cnVjdHVyZSB3YXMgYWxyZWFkeSBvcGVuZWQuCisgKgorICogQHNhIG90VWRwTmV3TWVzc2FnZQorICogQHNhIG90VWRwQ2xvc2UKKyAqIEBzYSBvdFVkcEJpbmQKKyAqIEBzYSBvdFVkcENvbm5lY3QKKyAqIEBzYSBvdFVkcFNlbmQKKyAqCisgKi8KK290RXJyb3Igb3RVZHBPcGVuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RVZHBTb2NrZXQgKmFTb2NrZXQsIG90VWRwUmVjZWl2ZSBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBDbG9zZSBhIFVEUC9JUHY2IHNvY2tldC4KKyAqCisgKiBAcGFyYW1baW5dICBhU29ja2V0ICBBIHBvaW50ZXIgdG8gYSBVRFAgc29ja2V0IHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBjbG9zZWQgdGhlIHNvY2tldC4KKyAqCisgKiBAc2Egb3RVZHBOZXdNZXNzYWdlCisgKiBAc2Egb3RVZHBPcGVuCisgKiBAc2Egb3RVZHBCaW5kCisgKiBAc2Egb3RVZHBDb25uZWN0CisgKiBAc2Egb3RVZHBTZW5kCisgKgorICovCitvdEVycm9yIG90VWRwQ2xvc2Uob3RVZHBTb2NrZXQgKmFTb2NrZXQpOworCisvKioKKyAqIEJpbmQgYSBVRFAvSVB2NiBzb2NrZXQuCisgKgorICogQHBhcmFtW2luXSAgYVNvY2tldCAgICBBIHBvaW50ZXIgdG8gYSBVRFAgc29ja2V0IHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFTb2NrTmFtZSAgQSBwb2ludGVyIHRvIGFuIElQdjYgc29ja2V0IGFkZHJlc3Mgc3RydWN0dXJlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgQmluZCBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICogQHNhIG90VWRwTmV3TWVzc2FnZQorICogQHNhIG90VWRwT3BlbgorICogQHNhIG90VWRwQ29ubmVjdAorICogQHNhIG90VWRwQ2xvc2UKKyAqIEBzYSBvdFVkcFNlbmQKKyAqCisgKi8KK290RXJyb3Igb3RVZHBCaW5kKG90VWRwU29ja2V0ICphU29ja2V0LCBvdFNvY2tBZGRyICphU29ja05hbWUpOworCisvKioKKyAqIENvbm5lY3QgYSBVRFAvSVB2NiBzb2NrZXQuCisgKgorICogQHBhcmFtW2luXSAgYVNvY2tldCAgICBBIHBvaW50ZXIgdG8gYSBVRFAgc29ja2V0IHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFTb2NrTmFtZSAgQSBwb2ludGVyIHRvIGFuIElQdjYgc29ja2V0IGFkZHJlc3Mgc3RydWN0dXJlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgQ29ubmVjdCBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICogQHNhIG90VWRwTmV3TWVzc2FnZQorICogQHNhIG90VWRwT3BlbgorICogQHNhIG90VWRwQmluZAorICogQHNhIG90VWRwQ2xvc2UKKyAqIEBzYSBvdFVkcFNlbmQKKyAqCisgKi8KK290RXJyb3Igb3RVZHBDb25uZWN0KG90VWRwU29ja2V0ICphU29ja2V0LCBvdFNvY2tBZGRyICphU29ja05hbWUpOworCisvKioKKyAqIFNlbmQgYSBVRFAvSVB2NiBtZXNzYWdlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFTb2NrZXQgICAgICAgQSBwb2ludGVyIHRvIGEgVURQIHNvY2tldCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcG9pbnRlciB0byBhIG1lc3NhZ2UgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIGluZm8gc3RydWN0dXJlLgorICoKKyAqIEBzYSBvdFVkcE5ld01lc3NhZ2UKKyAqIEBzYSBvdFVkcE9wZW4KKyAqIEBzYSBvdFVkcENsb3NlCisgKiBAc2Egb3RVZHBCaW5kCisgKiBAc2Egb3RVZHBDb25uZWN0CisgKiBAc2Egb3RVZHBTZW5kCisgKgorICovCitvdEVycm9yIG90VWRwU2VuZChvdFVkcFNvY2tldCAqYVNvY2tldCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfVURQX0hfCmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyYjU4YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDY1IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKKyMgQWx3YXlzIHBhY2thZ2UgKGUuZy4gZm9yICdtYWtlIGRpc3QnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworRElTVF9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGNvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5jcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRpYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBBbHdheXMgYnVpbGQgKGUuZy4gZm9yICdtYWtlIGFsbCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9DTEkKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IGNsaQorZW5kaWYKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfTkNQCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBuY3AKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IGRpYWcKK2VuZGlmCisKKyMgQWx3YXlzIHByZXR0eSAoZS5nLiBmb3IgJ21ha2UgcHJldHR5JykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK1BSRVRUWV9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBjbGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvc3JjL2NsaS9NYWtlZmlsZS5hbSBiL3NyYy9jbGkvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzMWU0YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNjUgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgVGhpcyBsaWJyYXJ5IG9uIHRoZSBmYWNlIG9mIGl0LCBhcHBlYXJzIHRvIGJlIGlkZW50aWNhbAorIyBmb3IgYm90aCB0aGUgTVREIGFuZCBGVEQgdmFyaWVudHMsIGhvd2V2ZXIgLi4uCisjCisjIFRoZSBzb3VyY2UgY29kZSBoZXJlIGluY2x1ZGVzIG51bWVyb3VzIE9wZW5UaHJlYWQgaW50ZXJuYWwgaGVhZGVycy4KKyMgRHVlIHRvIHRoZSAiZG9taW5vLWVmZmVjdCIgb3RoZXIgaW50ZXJuYWwgaGVhZGVycyBhcmUgaW5jbHVkZWQuCisjCisjIEZvciBleGFtcGxlOgorIyAgICAgY2xpLmNwcCBpbmNsdWRlczogCisjICAgICAgICAgICAgc3JjL2NvcmUvb3BlbnRocmVhZC1pbnN0YW5jZS5oCisjIFdoaWNoIEluY2x1ZGVzOgorIyAgICAgICAgICAgIHNyYy9jb3JlL3RoZXJhZC90aHJlYWRfbmV0aWYuaHBwCisjIFdoaWNoIEluY2x1ZGVzOgorIyAgICAgICAgICAgIHNyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9tYW5hZ2VyLmhwcAorIyBXaGljaCBJbmNsdWRlczoKKyMgICAgICAgICAgICBzcmMvY29yZS90aHJlYWRuZXR3b3JrX2RhdGFfbGVhZGVyLmhwcAorIworIyBUaGF0IGhlYWRlciAoYW5kIG90aGVycykgaXMgZWl0aGVyIGFuIE1URCBvciBGVEQgY2xhc3MgZmxhdm9yLgorIworIyBUaGUgRlREIGZsYXZvciBoYXMgbWFueSBwcml2YXRlIGNvbXBvbmVudHMgKGNsYXNzIHZhcmlhYmxlcykuCisjIFRoZSBNVEQgZmxhdm9yIGhhcyBubyBwcml2YXRlIGNvbXBvbmVudHMuCisjCisjIEJvdHRvbSBsaW5lOiBUaGUgQ2xhc3Moc3RydWN0cykgYXJlIHRodXMgZGlmZmVyZW50IGluIHRoZSBkb3duc3RyZWFtIAorIyBsaWJzLiBBdCB0aGlzIGxldmVsIChpbiB0aGUgQ0xJLCBhbmQgbGlrZXdpc2UgaW4gdGhlIE5DUCkgdGhleSBhcmUgCisjIGZ1bmN0aW9uYWxseSBpZGVudGljYWwuCisjCisjIE9SSUdJTkFMTFkgKGhpc3RvcmljYWwgbm90ZSBhYm91dCBob3cgdGhpbmdzIGFyZS93aGVyZSBidWlsdCk6CisjCisjICAgICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIE1URCBhbmQgRlREIHdhcyBhIGRlZmluZS4uICAtRE9QRU5USFJFQURfTVRECisjICAgICBUaGVyZSB3YXMgbm8gIkZURCIgZGVmaW5lLCBpdCBpcy93YXMgYXNzdW1lZCB0aGF0IEZURCBpcyB0aGUgZGVmYXVsdC4KKyMKKyMgICAgIEhpc3RvcmljYWxseSB0aGlzIGxpYnJhcnkgLURPUEVOVEhSRUFEX01URCB3YXMgbm90IGRlZmluZWQvc2V0LgorIyAgICAgKGl0IGlzIHNldCB2aWEgYSBjb21tYW5kbGluZSBkZWZpbmUgaW4gJ2xpYi1vcGVudGhyZWFkJykKKyMKKyMgICAgIFRodXMsIHRoZSBleGlzdGluZyhwcmV2aW91cykgd2F5ICpUSElTKiBsaWJyYXJ5IHdhcyBjb21waWxlZCBpcworIyAgICAgZXhhY3RseSB0aGUgRlREIHBhdGguIE1lYW5pbmcgdGhlICJjbGkiIGxpYnJhcnkgYWx3YXlzIHNlZXMKKyMgICAgIHRoZSBGVEQgdmFyaWVudHMgb2YgdmFyaW91cyBoZWFkZXJzL2NsYXNzZXMuCisjCisjICAgICBUaGUgc2FtZSBpcyB0cnVlIG9mIHRoZSAibmNwIiBsaWJyYXJ5LgorIworIyBIT1dFVkVSIHRoZXJlIGFyZSB0d28gdmFyaWVudHMgb2YgdGhlIENMSSBhcHBsaWNhdGlvbiwgQ0xJLU1URAorIyBhbmQgQ0xJLUZURCAoYW5kIGxpa2V3aXNlLCB0d28gdmFyaWVudHMgb2YgdGhlIG5jcCBhcHBsaWNhdGlvbikKKyMgVGhlc2UgYXBwbGljYXRpb25zIGxpbmsgYWdhaW5zdCB0d28gZGlmZmVyZW50IE9wZW5UaHJlYWQgbGlicmFyaWVzLgorIworIyBXaGljaCBmbGF2b3IsIHlvdSBnZXQgZGVwZW5kcyB1cG9uIHdoaWNoIGxpYnJhcnk6ICJtdGQiIG9yICJmdGQiIGlzIGxpbmtlZC4KKyMKKyMgV2hpY2ggb24gdGhlIHN1cmZhY2UgYXBwZWFyIHRvIGxpbmsgZmluZSBhZ2FpbnN0IHRoZSBNVEQvRlREIGxpYnJhcnkuCisjCisjIEluIHRoaXMgZGVzY3JpcHRpb24vZXhhbXBsZSB3ZSBmb2N1cyBvbiB0aGUgICJuZXdvcmtfZGF0YV9sZWFkZXIiCisjIGhlYWRlciBmaWxlLiBUaGUgRlREIHZhcmllbnQgaGFzIG1hbnkgcHJpdmF0ZSB2YXJpYWJsZXMsIGZ1bmN0aW9ucworIyBhbmQgb3RoZXIgdGhpbmdzIG9mICJGVEQiIChpZTogZnVsbCkgaW1wbGVtZW50YXRpb24gaXRlbXMuCisjCisjIEluIGNvbnRyYXN0IHRoZSBNVEQgaXMgZ2VuZXJhbHkgc3R1YmJlZCBvdXQgd2l0aCBzdHViLWZ1bmN0aW9ucworIyBpbmxpbmVkIGluIHRoZSBoZWFkZXIgdGhhdCByZXR1cm4gImVycm9yIG5vdCBpbXBsZW1lbnRlZCIgb3Igc2ltaWxhci4KKyMKKyMgVGh1cyBpdCB3b3Jrcy4uLiBoZXJlIC4uLiBXaXRoIHRoaXMgZmlsZSBhbmQgdGhpcyBleGFtcGxlLgorIworIyBUaGUgdW5rbm93bjoKKyMgICAgV2hhdCBhYm91dCB0aGUgb3RoZXIgZmlsZXM/CisjICAgIFdoYXQgYWJvdXQgdGhlIG90aGVyIGMrKyBjbGFzc2VzPworIyAgICBJcyB0aGlzIHRydWUgYWx3YXlzPyBJcyB0aGlzIHJvYnVzdD8KKyMgICAgT3IgaXMgdGhlcmUgYSBoaWRkZW4gImdvdC15YSIgdGhhdCB3aWxsIHNuYWcgdGhlIG5leHQgcGVyc29uPworIworIyBUaGlzIGFsc28gZmFpbHMgc3RhdGljIGFuYWxpc3lzLCBjaGVja3MuCisjICAgIEFwcGxpY2F0aW9uIC0gd2l0aCBNVEQgdnJzIEZURCBjbGFzcy4KKyMgICAgTGlicmFyeSAjMSAgKGNsaS1saWIpIHdpdGggRlREIHNlbGVjdGVkLgorIyAgICBMaWJyYXJ5ICMyICAob3BlbnRocmVhZCkgd2l0aCB0d28gZGlmZmVyZW50IGNsYXNzIGZsYXZvcnMuCisjCisjIFRoZSBzdGF0aWMgYW5hbGlzeXMgdG9vbHMgd2lsbCBzYXk6ICJOT1BFIiBkaWZmZXJlbnQgY2xhc3NlcyEKKyMgUGVyaGFwcyB0aGlzIHdpbGwgY2hhbmdlIGlmL3doZW4gbm90aGluZyBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgJ210ZC1oZWFkZXInCisjCisjIEFkZGl0aW9uYWxseSwgdG9vbHMgdGhhdCBwZXJmb3JtICJ3aG9sZSBwcm9ncmFtIG9wdGltaXphdGlvbiIgd2lsbAorIyB0aHJvdyBlcnJvcnMgYmVjdWFzZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGRpZmZlciBncmVhdGx5LgorIworIyBIZW5jZSwgQ0xJIGxpYnJhcnkgKGFuZCBOQ1ApIG11c3QgZXhpc3QgaW4gdHdvIGZsYXZvcnMuCisjCisjIFVubGVzcyBhbmQgdW50aWwgdGhlc2UgbGlicmFyaWVzIGRvIG5vdCAiYWNjaWRlbnRseSIgc3VjayBpbgorIyBhICJmbGF2b3JlZCIgaGVhZGVyIGZpbGUgc29tZXdoZXJlLgorCitsaWJfTElCUkFSSUVTID0gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsaWJvcGVudGhyZWFkLWNsaS1tdGQuYSAgICAgICAgICAgXAorICAgIGxpYm9wZW50aHJlYWQtY2xpLWZ0ZC5hICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDUFBGTEFHU19DT01NT04gPSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgIFwKKyAgICAkKE9QRU5USFJFQURfVEFSR0VUX0RFRklORVMpICAgICAgXAorICAgICQoTlVMTCkKKworCitsaWJvcGVudGhyZWFkX2NsaV9tdGRfYV9DUFBGTEFHUyA9ICAgIFwKKyAgICAtRE9QRU5USFJFQURfTVREPTEgICAgICAgICAgICAgICAgXAorICAgICQoQ1BQRkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2NsaV9mdGRfYV9DUFBGTEFHUyA9ICAgIFwKKyAgICAtRE9QRU5USFJFQURfRlREPTEgICAgICAgICAgICAgICAgXAorICAgICQoQ1BQRkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitTT1VSQ0VTX0NPTU1PTiA9ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGkuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsaV9jb25zb2xlLmNwcCAgICAgICAgICAgICAgICAgICBcCisgICAgY2xpX2RhdGFzZXQuY3BwICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGlfdWFydC5jcHAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsaV9jb2FwLmNwcCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xpX3VkcC5jcHAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfY2xpX2Z0ZF9hX1NPVVJDRVMgPSAgICAgXAorICAgICQoU09VUkNFU19DT01NT04pICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2NsaV9tdGRfYV9TT1VSQ0VTID0gICAgIFwKKyAgICAkKFNPVVJDRVNfQ09NTU9OKSAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY2xpLmhwcCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGlfY29uc29sZS5ocHAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsaV9kYXRhc2V0LmhwcCAgICAgICAgICAgICAgICAgICBcCisgICAgY2xpX3VhcnQuaHBwICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGlfc2VydmVyLmhwcCAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsaV9jb2FwLmhwcCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xpX3VkcC5ocHAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKK0NMRUFORklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gJCh3aWxkY2FyZCAqLmdjZGEgKi5nY25vKQorZW5kaWYgIyBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvc3JjL2NsaS9SRUFETUUubWQgYi9zcmMvY2xpL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTQ0MGEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9SRUFETUUubWQKQEAgLTAsMCArMSwxNjk2IEBACisjIE9wZW5UaHJlYWQgQ0xJIFJlZmVyZW5jZQorCitUaGUgT3BlblRocmVhZCBDTEkgZXhwb3NlcyBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IEFQSXMgdmlhIGEKK2NvbW1hbmQgbGluZSBpbnRlcmZhY2UuIFVzZSB0aGUgQ0xJIHRvIHBsYXkgd2l0aCBPcGVuVGhyZWFkLCB3aGljaAorY2FuIGFsc28gYmUgdXNlZCB3aXRoIGFkZGl0aW9uYWwgYXBwbGljYXRpb24gY29kZS4gVGhlCitPcGVuVGhyZWFkIHRlc3Qgc2NyaXB0cyB1c2UgdGhlIENMSSB0byBleGVjdXRlIHRlc3QgY2FzZXMuCisKKyMjIE9wZW5UaHJlYWQgQ29tbWFuZCBMaXN0CisKKyogW2F1dG9zdGFydF0oI2F1dG9zdGFydCkKKyogW2JsYWNrbGlzdF0oI2JsYWNrbGlzdCkKKyogW2J1ZmZlcmluZm9dKCNidWZmZXJpbmZvKQorKiBbY2hhbm5lbF0oI2NoYW5uZWwpCisqIFtjaGlsZF0oI2NoaWxkLWxpc3QpCisqIFtjaGlsZG1heF0oI2NoaWxkbWF4KQorKiBbY2hpbGR0aW1lb3V0XSgjY2hpbGR0aW1lb3V0KQorKiBbY29hcF0oI2NvYXAtc3RhcnQpCisqIFtjb21taXNzaW9uZXJdKCNjb21taXNzaW9uZXItc3RhcnQtcHJvdmlzaW9uaW5ndXJsKQorKiBbY29udGV4dHJldXNlZGVsYXldKCNjb250ZXh0cmV1c2VkZWxheSkKKyogW2NvdW50ZXJdKCNjb3VudGVyKQorKiBbZGF0YXNldF0oI2RhdGFzZXQtaGVscCkKKyogW2RlbGF5dGltZXJtaW5dKCNkZWxheXRpbWVybWluKQorKiBbZGlzY292ZXJdKCNkaXNjb3Zlci1jaGFubmVsKQorKiBbZG5zXSgjZG5zLXJlc29sdmUtaG9zdG5hbWUtZG5zLXNlcnZlci1pcC1kbnMtc2VydmVyLXBvcnQpCisqIFtlaWRjYWNoZV0oI2VpZGNhY2hlKQorKiBbZXVpNjRdKCNldWk2NCkKKyogW2V4dGFkZHJdKCNleHRhZGRyKQorKiBbZXh0cGFuaWRdKCNleHRwYW5pZCkKKyogW2ZhY3RvcnlyZXNldF0oI2ZhY3RvcnlyZXNldCkKKyogW2hhc2htYWNhZGRyXSgjaGFzaG1hY2FkZHIpCisqIFtpZmNvbmZpZ10oI2lmY29uZmlnKQorKiBbaXBhZGRyXSgjaXBhZGRyKQorKiBbaXBtYWRkcl0oI2lwbWFkZHIpCisqIFtqb2luZXJdKCNqb2luZXItc3RhcnQtcHNrZC1wcm92aXNpb25pbmd1cmwpCisqIFtqb2luZXJwb3J0XSgjam9pbmVycG9ydC1wb3J0KQorKiBba2V5c2VxdWVuY2VdKCNrZXlzZXF1ZW5jZS1jb3VudGVyKQorKiBbbGVhZGVyZGF0YV0oI2xlYWRlcmRhdGEpCisqIFtsZWFkZXJwYXJ0aXRpb25pZF0oI2xlYWRlcnBhcnRpdGlvbmlkKQorKiBbbGVhZGVyd2VpZ2h0XSgjbGVhZGVyd2VpZ2h0KQorKiBbbGlua3F1YWxpdHldKCNsaW5rcXVhbGl0eS1leHRhZGRyKQorKiBbbWFzdGVya2V5XSgjbWFzdGVya2V5KQorKiBbbW9kZV0oI21vZGUpCisqIFtuZXRkYXRhcmVnaXN0ZXJdKCNuZXRkYXRhcmVnaXN0ZXIpCisqIFtuZXR3b3JrZGlhZ25vc3RpY10oI25ldHdvcmtkaWFnbm9zdGljLWdldC1hZGRyLXR5cGUtKQorKiBbbmV0d29ya2lkdGltZW91dF0oI25ldHdvcmtpZHRpbWVvdXQpCisqIFtuZXR3b3JrbmFtZV0oI25ldHdvcmtuYW1lKQorKiBbcGFuaWRdKCNwYW5pZCkKKyogW3BhcmVudF0oI3BhcmVudCkKKyogW3BhcmVudHByaW9yaXR5XSgjcGFyZW50cHJpb3JpdHkpCisqIFtwaW5nXSgjcGluZy1pcGFkZHItc2l6ZS1jb3VudC1pbnRlcnZhbCkKKyogW3BvbGxwZXJpb2RdKCNwb2xscGVyaW9kLXBvbGxwZXJpb2QpCisqIFtwcmVmaXhdKCNwcmVmaXgtYWRkLXByZWZpeC1wdmRjc3ItcHJmKQorKiBbcHJvbWlzY3VvdXNdKCNwcm9taXNjdW91cykKKyogW3JlbGVhc2Vyb3V0ZXJpZF0oI3JlbGVhc2Vyb3V0ZXJpZC1yb3V0ZXJpZCkKKyogW3Jlc2V0XSgjcmVzZXQpCisqIFtybG9jMTZdKCNybG9jMTYpCisqIFtyb3V0ZV0oI3JvdXRlLWFkZC1wcmVmaXgtcy1wcmYpCisqIFtyb3V0ZXJdKCNyb3V0ZXItbGlzdCkKKyogW3JvdXRlcmRvd25ncmFkZXRocmVzaG9sZF0oI3JvdXRlcmRvd25ncmFkZXRocmVzaG9sZCkKKyogW3JvdXRlcnJvbGVdKCNyb3V0ZXJyb2xlKQorKiBbcm91dGVyc2VsZWN0aW9uaml0dGVyXSgjcm91dGVyc2VsZWN0aW9uaml0dGVyKQorKiBbcm91dGVydXBncmFkZXRocmVzaG9sZF0oI3JvdXRlcnVwZ3JhZGV0aHJlc2hvbGQpCisqIFtzY2FuXSgjc2Nhbi1jaGFubmVsKQorKiBbc2luZ2xldG9uXSgjc2luZ2xldG9uKQorKiBbc3RhdGVdKCNzdGF0ZSkKKyogW3RocmVhZF0oI3RocmVhZC1zdGFydCkKKyogW3R4cG93ZXJtYXhdKCN0eHBvd2VybWF4KQorKiBbdmVyc2lvbl0oI3ZlcnNpb24pCisqIFt3aGl0ZWxpc3RdKCN3aGl0ZWxpc3QpCisqIFtkaWFnXSgjZGlhZykKKworIyMgT3BlblRocmVhZCBDb21tYW5kIERldGFpbHMKKworIyMjIGF1dG9zdGFydCB0cnVlCisKK0F1dG9tYXRpY2FsbHkgc3RhcnQgVGhyZWFkIG9uIGluaXRpYWxpemF0aW9uLgorCitgYGBiYXNoCis+IGF1dG9zdGFydCB0cnVlCitEb25lCitgYGAKKworIyMjIGF1dG9zdGFydCBmYWxzZQorCitEb24ndCBhdXRvbWF0aWNhbGx5IHN0YXJ0IFRocmVhZCBvbiBpbml0aWFsaXphdGlvbi4KKworYGBgYmFzaAorPiBhdXRvc3RhcnQgZmFsc2UKK0RvbmUKK2BgYAorCisjIyMgYXV0b3N0YXJ0CisKK1Nob3cgdGhlIHN0YXR1cyBvZiBhdXRvbWF0aWNhbGx5IHN0YXJ0aW5nIFRocmVhZCBvbiBpbml0aWFsaXphdGlvbi4KKworYGBgYmFzaAorPiBhdXRvc3RhcnQKK2ZhbHNlCitEb25lCitgYGAKKworIyMjIGJsYWNrbGlzdAorCitMaXN0IHRoZSBibGFja2xpc3QgZW50cmllcy4KKworYGBgYmFzaAorPiBibGFja2xpc3QKK0VuYWJsZWQKKzE2NmUwYTAwMDAwMDAwMDIKKzE2NmUwYTAwMDAwMDAwMDMKK0RvbmUKK2BgYAorCisjIyMgYmxhY2tsaXN0IGFkZCBcPGV4dGFkZHJcPgorCitBZGQgYW4gSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzIHRvIHRoZSBibGFja2xpc3QuCisKK2BgYGJhc2gKKz4gYmxhY2tsaXN0IGFkZCAxNjZlMGEwMDAwMDAwMDAyCitEb25lCitgYGAKKworIyMjIGJsYWNrbGlzdCBjbGVhcgorCitDbGVhciBhbGwgZW50cmllcyBmcm9tIHRoZSBibGFja2xpc3QuCisKK2BgYGJhc2gKKz4gYmxhY2tsaXN0IGNsZWFyCitEb25lCitgYGAKKworIyMjIGJsYWNrbGlzdCBkaXNhYmxlCisKK0Rpc2FibGUgTUFDIGJsYWNrbGlzdCBmaWx0ZXJpbmcuCisKK2BgYGJhc2gKKz4gYmxhY2tsaXN0IGRpc2FibGUKK0RvbmUKK2BgYAorCisjIyMgYmxhY2tsaXN0IGVuYWJsZQorCitFbmFibGUgTUFDIGJsYWNrbGlzdCBmaWx0ZXJpbmcuCisKK2BgYGJhc2gKKz4gYmxhY2tsaXN0IGVuYWJsZQorRG9uZQorYGBgCisKKyMjIyBibGFja2xpc3QgcmVtb3ZlIFw8ZXh0YWRkclw+CisKK1JlbW92ZSBhbiBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MgZnJvbSB0aGUgYmxhY2tsaXN0LgorCitgYGBiYXNoCis+IGJsYWNrbGlzdCByZW1vdmUgMTY2ZTBhMDAwMDAwMDAwMgorRG9uZQorYGBgCisKKyMjIyBidWZmZXJpbmZvCisKK1Nob3cgdGhlIGN1cnJlbnQgbWVzc2FnZSBidWZmZXIgaW5mb3JtYXRpb24uCisKK2BgYGJhc2gKKz4gYnVmZmVyaW5mbwordG90YWw6IDQwCitmcmVlOiA0MAorNmxvIHNlbmQ6IDAgMAorNmxvIHJlYXM6IDAgMAoraXA2OiAwIDAKK21wbDogMCAwCittbGU6IDAgMAorYXJwOiAwIDAKK2NvYXA6IDAgMAorRG9uZQorYGBgCisKKyMjIyBjaGFubmVsCisKK0dldCB0aGUgSUVFRSA4MDIuMTUuNCBDaGFubmVsIHZhbHVlLgorCitgYGBiYXNoCis+IGNoYW5uZWwKKzExCitEb25lCitgYGAKKworIyMjIGNoYW5uZWwgXDxjaGFubmVsXD4KKworU2V0IHRoZSBJRUVFIDgwMi4xNS40IENoYW5uZWwgdmFsdWUuCisKK2BgYGJhc2gKKz4gY2hhbm5lbCAxMQorRG9uZQorYGBgCisKKyMjIyBjaGlsZCBsaXN0CisKK0xpc3QgYXR0YWNoZWQgQ2hpbGQgSURzLgorCitgYGBiYXNoCis+IGNoaWxkIGxpc3QKKzEgMiAzIDYgNyA4CitEb25lCitgYGAKKworIyMjIGNoaWxkIHRhYmxlCisKK1ByaW50IHRhYmxlIG9mIGF0dGFjaGVkIGNoaWxkcmVuLgorCitgYGBiYXNoCis+IGNoaWxkIHRhYmxlCit8IElEICB8IFJMT0MxNiB8IFRpbWVvdXQgICAgfCBBZ2UgICAgICAgIHwgTFEgSW4gfCBDX1ZOIHxSfFN8RHxOfCBFeHRlbmRlZCBNQUMgICAgIHwKKystLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tKy0rLSstKy0rLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgIDEgfCAweGUwMDEgfCAgICAgICAgMjQwIHwgICAgICAgICA0NCB8ICAgICAzIHwgIDIzNyB8MXwxfDF8MXwgZDI4ZDdmODc1ODg4ZmNjYiB8Cit8ICAgMiB8IDB4ZTAwMiB8ICAgICAgICAyNDAgfCAgICAgICAgIDI3IHwgICAgIDMgfCAgMjM3IHwwfDF8MHwxfCBlMmIzNTQwNTkwYjBmZDg3IHwKK0RvbmUKK2BgYAorCisjIyMgY2hpbGQgXDxpZFw+CisKK1ByaW50IGRpYWdub3N0aWMgaW5mb3JtYXRpb24gZm9yIGFuIGF0dGFjaGVkIFRocmVhZCBDaGlsZC4gIFRoZSBgaWRgIG1heSBiZSBhIENoaWxkIElEIG9yIGFuIFJMT0MxNi4KKworYGBgYmFzaAorPiBjaGlsZCAxCitDaGlsZCBJRDogMQorUmxvYzogOWMwMQorRXh0IEFkZHI6IGUyYjM1NDA1OTBiMGZkODcKK01vZGU6IHJzbgorTmV0IERhdGE6IDE4NAorVGltZW91dDogMTAwCitBZ2U6IDAKK0xpbmsgUXVhbGl0eSBJbjogMworUlNTSTogLTIwCitEb25lCitgYGAKKworIyMjIGNoaWxkbWF4CisKK0dldCB0aGUgVGhyZWFkIG1heGltdW0gbnVtYmVyIG9mIGFsbG93ZWQgY2hpbGRyZW4uCisKK2BgYGJhc2gKKz4gY2hpbGRtYXgKKzUKK0RvbmUKK2BgYAorCisjIyMgY2hpbGRtYXggXDxjb3VudFw+CisKK1NldCB0aGUgVGhyZWFkIG1heGltdW0gbnVtYmVyIG9mIGFsbG93ZWQgY2hpbGRyZW4uCisKK2BgYGJhc2gKKz4gY2hpbGRtYXggMgorRG9uZQorYGBgCisKKyMjIyBjaGlsZHRpbWVvdXQKKworR2V0IHRoZSBUaHJlYWQgQ2hpbGQgVGltZW91dCB2YWx1ZS4KKworYGBgYmFzaAorPiBjaGlsZHRpbWVvdXQKKzMwMAorRG9uZQorYGBgCisKKyMjIyBjaGlsZHRpbWVvdXQgXDx0aW1lb3V0XD4KKworU2V0IHRoZSBUaHJlYWQgQ2hpbGQgVGltZW91dCB2YWx1ZS4KKworYGBgYmFzaAorPiBjaGlsZHRpbWVvdXQgMzAwCitEb25lCitgYGAKKworIyMjIGNvYXAgc3RhcnQKKworU3RhcnRzIHRoZSBhcHBsaWNhdGlvbiBjb2FwIHNlcnZpY2UuCisKK2BgYGJhc2gKKz4gY29hcCBzdGFydAorQ29hcCBzZXJ2aWNlIHN0YXJ0ZWQ6IERvbmUKK2BgYAorCisjIyMgY29hcCBzdG9wCisKK1N0b3BzIHRoZSBhcHBsaWNhdGlvbiBjb2FwIHNlcnZpY2UuCisKK2BgYGJhc2gKKz4gY29hcCBzdGFydAorQ29hcCBzZXJ2aWNlIHN0b3BwZWQ6IERvbmUKK2BgYAorCisjIyMgY29hcCByZXNvdXJjZSBcW3VyaS1wYXRoXF0KKworU2V0cyB0aGUgVVJJLVBhdGggZm9yIHRoZSB0ZXN0IHJlc291cmNlLgorCitgYGBiYXNoCis+IGNvYXAgcmVzb3VyY2UgdGVzdAorUmVzb3VyY2UgbmFtZSBpcyAndGVzdCc6IERvbmUKKz4gY29hcCByZXNvdXJjZQorUmVzb3VyY2UgbmFtZSBpcyAndGVzdCc6IERvbmUKK2BgYAorCisjIyMgY29hcCBcPG1ldGhvZFw+IFw8YWRkcmVzc1w+IFw8dXJpXD4gXFtwYXlsb2FkXF0gXFt0eXBlXF0KKworKiBtZXRob2Q6IENvQVAgbWV0aG9kIHRvIGJlIHVzZWQgKEdFVC9QVVQvUE9TVC9ERUxFVEUpLgorKiBhZGRyZXNzOiBJUCBhZGRyZXNzIG9mIHRoZSBDb0FQIHNlcnZlciB0byBxdWVyeS4KKyogdXJpOiBVUkkgU3RyaW5nIG9mIHRoZSByZXNvdXJjZSBvbiB0aGUgQ29BUCBzZXJ2ZXIuCisqIHBheWxvYWQ6IEluIGNhc2Ugb2YgUFVUL1BPU1QvREVMRVRFIGEgcGF5bG9hZCBjYW4gYmUgZW5jYXBzdWxhdGVkLgorKiB0eXBlOiBTd2l0Y2ggYmV0d2VlbiBjb25maXJtYWJsZSAoImNvbiIpIGFuZCBub24tY29uZmlybWFibGUgKGRlZmF1bHQpLgorCitgYGBiYXNoCis+IGNvYXAgZ2V0IGZkZGU6YWQwMDpiZWVmOjA6ZGJhYTpmMWQwOjhhZmI6MzBkYyB0ZXN0CitTZW5kaW5nIGNvYXAgbWVzc2FnZTogRG9uZQorUmVjZWl2ZWQgY29hcCByZXF1ZXN0IGZyb20gW2ZkZGU6YWQwMDpiZWVmOjA6ZGJhYTpmMWQwOjhhZmI6MzBkY106IEdFVAorY29hcCByZXNwb25zZSBzZW50IHN1Y2Nlc3NmdWxseSEKK1JlY2VpdmVkIGNvYXAgcmVzcG9uc2Ugd2l0aCBwYXlsb2FkOiAzMAorPiBjb2FwIHB1dCBmZGRlOmFkMDA6YmVlZjowOmRiYWE6ZjFkMDo4YWZiOjMwZGMgdGVzdCBub24tY29uIHNvbWVQYXlsb2FkCitTZW5kaW5nIGNvYXAgbWVzc2FnZTogRG9uZQorUmVjZWl2ZWQgY29hcCByZXF1ZXN0IGZyb20gW2ZkZGU6YWQwMDpiZWVmOjA6ZGJhYTpmMWQwOjhhZmI6MzBkY106IFBVVCB3aXRoIHBheWxvYWQ6IDczIDZmIDZkIDY1IDUwIDYxIDc5IDZjIDZmIDYxIDY0Cis+IGNvYXAgcHV0IGZkZGU6YWQwMDpiZWVmOjA6ZGJhYTpmMWQwOjhhZmI6MzBkYyB0ZXN0IGNvbiAxMjMKK1NlbmRpbmcgY29hcCBtZXNzYWdlOiBEb25lCitSZWNlaXZlZCBjb2FwIHJlcXVlc3QgZnJvbSBbZmRkZTphZDAwOmJlZWY6MDpkYmFhOmYxZDA6OGFmYjozMGRjXTogUFVUIHdpdGggcGF5bG9hZDogMzEgMzIgMzMKK2NvYXAgcmVzcG9uc2Ugc2VudCBzdWNjZXNzZnVsbHkhCitSZWNlaXZlZCBjb2FwIHJlc3BvbnNlCitgYGAKKworIyMjIGNvbW1pc3Npb25lciBzdGFydCBcPHByb3Zpc2lvbmluZ1VybFw+CisKK1N0YXJ0IHRoZSBDb21taXNzaW9uZXIgcm9sZS4KKworKiBwcm92aXNpb25pbmdVcmw6IFByb3Zpc2lvbmluZyBVUkwgZm9yIHRoZSBKb2luZXIgKG9wdGlvbmFsKS4KKworVGhpcyBjb21tYW5kIHdpbGwgY2F1c2UgdGhlIGRldmljZSB0byBzZW5kIExFQURfUEVUIGFuZCBMRUFEX0tBIG1lc3NhZ2VzLgorCitgYGBiYXNoCis+IGNvbW1pc3Npb25lciBzdGFydAorRG9uZQorYGBgCisKKyMjIyBjb21taXNzaW9uZXIgc3RvcAorCitTdG9wIHRoZSBDb21taXNzaW9uZXIgcm9sZS4KKworVGhpcyBjb21tYW5kIHdpbGwgY2F1c2UgdGhlIGRldmljZSB0byBzZW5kIExFQURfS0FbUmVqZWN0XSBtZXNzYWdlcy4KKworYGBgYmFzaAorPiBjb21taXNzaW9uZXIgc3RvcAorRG9uZQorYGBgCisKKyMjIyBjb21taXNzaW9uZXIgam9pbmVyIGFkZCBcPGhhc2htYWNhZGRyXD4gXDxwc2RrXD4KKworQWRkIGEgSm9pbmVyIGVudHJ5LgorCisqIGhhc2htYWNhZGRyOiBUaGUgRXh0ZW5kZWQgQWRkcmVzcyBvZiB0aGUgSm9pbmVyIG9yICcqJyB0byBtYXRjaCBhbnkgSm9pbmVyLgorKiBwc2tkOiBQcmUtU2hhcmVkIEtleSBmb3IgdGhlIEpvaW5lci4KKworYGBgYmFzaAorPiBjb21taXNzaW9uZXIgam9pbmVyIGFkZCBkNDVlNjRmYTgzZjgxY2Y3IFBTSworRG9uZQorYGBgCisKKyMjIyBjb21taXNzaW9uZXIgam9pbmVyIHJlbW92ZSBcPGhhc2htYWNhZGRyXD4KKworUmVtb3ZlIGEgSm9pbmVyIGVudHJ5LgorCisqIGhhc2htYWNhZGRyOiBUaGUgRXh0ZW5kZWQgQWRkcmVzcyBvZiB0aGUgSm9pbmVyIG9yICcqJyB0byBtYXRjaCBhbnkgSm9pbmVyLgorCitgYGBiYXNoCis+IGNvbW1pc3Npb25lciBqb2luZXIgcmVtb3ZlIGQ0NWU2NGZhODNmODFjZjcKK0RvbmUKK2BgYAorCisjIyMgY29tbWlzc2lvbmVyIHByb3Zpc2lvbmluZ3VybCBcPHByb3Zpc2lvbmluZ1VybFw+CisKK1NldCB0aGUgUHJvdmlzaW9uaW5nIFVSTC4KKworYGBgYmFzaAorPiBjb21taXNzaW9uZXIgcHJvdmlzaW9uaW5ndXJsIGh0dHA6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZAorRG9uZQorYGBgCisKKyMjIyBjb21taXNzaW9uZXIgZW5lcmd5IFw8bWFza1w+IFw8Y291bnRcPiBcPHBlcmlvZFw+IFw8c2NhbkR1cmF0aW9uXD4gXDxkZXN0aW5hdGlvblw+CisKK1NlbmQgYSBNR01UX0VEX1NDQU4gbWVzc2FnZS4KKworKiBtYXNrOiBCaXRtYXNrIGlkZW50aWZ5aW5nIGNoYW5uc2wgdG8gcGVyZm9ybSBJRUVFIDgwMi4xNS40IEVEIFNjYW5zLgorKiBjb3VudDogTnVtYmVyIG9mIElFRUUgODAyLjE1LjQgRUQgU2NhbnMgcGVyIGNoYW5uZWwuCisqIHBlcmlvZDogUGVyaW9kIGJldHdlZW4gc3VjY2Vzc2l2ZSBJRUVFIDgwMi4xNS40IEVEIFNjYW5zIChtaWxsaXNlY29uZHMpLgorKiBzY2FuRHVyYXRpb246IElFRUUgODAyLjE1LjQgU2NhbkR1cmF0aW9uIHRvIHVzZSB3aGVuIHBlcmZvcm1pbmcgYW4gSUVFRSA4MDIuMTUuNCBFRCBTY2FuIChtaWxsaXNlY29uZHMpLgorKiBkZXN0aW5hdGlvbjogSVB2NiBkZXN0aW5hdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKG1heSBiZSBtdWx0aWNhc3QpLgorCitUaGUgY29udGVudHMgb2YgTUdNVF9FRF9SRVBPUlQgbWVzc2FnZXMgKGkuZS4gQ2hhbm5lbCBNYXNrIGFuZCBFbmVyZ3kKK0xpc3QpIGFyZSBwcmludGVkIGFzIHRoZXkgYXJlIHJlY2VpdmVkLgorCitgYGBiYXNoCis+IGNvbW1pc3Npb25lciBlbmVyZ3kgMHgwMDA1MDAwMCAyIDMyIDEwMDAgZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6YzAwCitEb25lCitFbmVyZ3k6IDAwMDUwMDAwIDAgMCAwIDAKK2BgYAorCisjIyMgY29tbWlzc2lvbmVyIHBhbmlkIFw8cGFuaWRcPiBcPG1hc2tcPiBcPGRlc3RpbmF0aW9uXD4KKworU2VuZCBhIE1HTVRfUEFOSURfUVVFUlkgbWVzc2FnZS4KKworKiBwYW5pZDogUEFOIElEIHRvIGNoZWNrIGZvciBjb25mbGljdHMuCisqIG1hc2s6IEJpdG1hc2sgaWRlbnRpZnlpbmcgY2hhbm5lbHMgdG8gcGVyZm9ybSBJRUVFIDgwMi4xNS40IEFjdGl2ZSBTY2Fucy4KKyogZGVzdGluYXRpb246IElQdjYgZGVzdGluYXRpb24gZm9yIHRoZSBtZXNzYWdlIChtYXkgYmUgbXVsdGljYXN0KS4KKworVGhlIGNvbnRlbnRzIG9mIE1HTVRfUEFOSURfQ09ORkxJQ1QgbWVzc2FnZXMgKGkuZS4gUEFOIElEIGFuZCBDaGFubmVsCitNYXNrKSBhcmUgcHJpbnRlZCBhcyB0aGV5IGFyZSByZWNlaXZlZC4KKworYGBgYmFzaAorPiBjb21taXNzaW9uZXIgcGFuaWQgMHhkZWFkIDB4N2ZmZjgwMCBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpjMDAKK0RvbmUKK0NvbmZsaWN0OiBkZWFkLCAwMDAwMDgwMAorYGBgCisKKyMjIyBjb21taXNzaW9uZXIgc2Vzc2lvbmlkCisKK0dldCBjdXJyZW50IGNvbW1pc3Npb25lciBzZXNzaW9uIGlkLgorCitgYGBiYXNoCis+IGNvbW1pc3Npb25lciBzZXNzaW9uaWQKKzAKK0RvbmUKK2BgYAorCisjIyMgY29udGV4dHJldXNlZGVsYXkKKworR2V0IHRoZSBDT05URVhUX0lEX1JFVVNFX0RFTEFZIHZhbHVlLgorCitgYGBiYXNoCis+IGNvbnRleHRyZXVzZWRlbGF5CisxMQorRG9uZQorYGBgCisKKyMjIyBjb250ZXh0cmV1c2VkZWxheSBcPGRlbGF5XD4KKworU2V0IHRoZSBDT05URVhUX0lEX1JFVVNFX0RFTEFZIHZhbHVlLgorCitgYGBiYXNoCis+IGNvbnRleHRyZXVzZWRlbGF5IDExCitEb25lCitgYGAKKworIyMjIGNvdW50ZXIKKworR2V0IHRoZSBzdXBwb3J0ZWQgY291bnRlciBuYW1lcy4KKworYGBgYmFzaAorPmNvdW50ZXIKK21hYworRG9uZQorYGBgCisKKyMjIyBjb3VudGVyIFw8Y291bnRlcm5hbWVcPgorCitHZXQgdGhlIGNvdW50ZXIgdmFsdWUuCisKK2BgYGJhc2gKKz5jb3VudGVyIG1hYworVHhUb3RhbDogMTAKKyAgICBUeFVuaWNhc3Q6IDMKKyAgICBUeEJyb2FkY2FzdDogNworICAgIFR4QWNrUmVxdWVzdGVkOiAzCisgICAgVHhBY2tlZDogMworICAgIFR4Tm9BY2tSZXF1ZXN0ZWQ6IDcKKyAgICBUeERhdGE6IDEwCisgICAgVHhEYXRhUG9sbDogMAorICAgIFR4QmVhY29uOiAwCisgICAgVHhCZWFjb25SZXF1ZXN0OiAwCisgICAgVHhPdGhlcjogMAorICAgIFR4UmV0cnk6IDAKKyAgICBUeEVyckNjYTogMAorUnhUb3RhbDogMgorICAgIFJ4VW5pY2FzdDogMQorICAgIFJ4QnJvYWRjYXN0OiAxCisgICAgUnhEYXRhOiAyCisgICAgUnhEYXRhUG9sbDogMAorICAgIFJ4QmVhY29uOiAwCisgICAgUnhCZWFjb25SZXF1ZXN0OiAwCisgICAgUnhPdGhlcjogMAorICAgIFJ4V2hpdGVsaXN0RmlsdGVyZWQ6IDAKKyAgICBSeERlc3RBZGRyRmlsdGVyZWQ6IDAKKyAgICBSeER1cGxpY2F0ZWQ6IDAKKyAgICBSeEVyck5vRnJhbWU6IDAKKyAgICBSeEVyck5vVW5rbm93bk5laWdoYm9yOiAwCisgICAgUnhFcnJJbnZhbGlkU3JjQWRkcjogMAorICAgIFJ4RXJyU2VjOiAwCisgICAgUnhFcnJGY3M6IDAKKyAgICBSeEVyck90aGVyOiAwCitgYGAKKworIyMjIGRhdGFzZXQgaGVscAorCitQcmludCBtZXNoY29wIGRhdGFzZXQgaGVscCBtZW51LgorCitgYGBiYXNoCis+IGRhdGFzZXQgaGVscAoraGVscAorYWN0aXZlCithY3RpdmV0aW1lc3RhbXAKK2NoYW5uZWwKK2NoYW5uZWxtYXNrCitjbGVhcgorY29tbWl0CitkZWxheQorZXh0cGFuaWQKK21hc3RlcmtleQorbWVzaGxvY2FscHJlZml4CittZ210Z2V0Y29tbWFuZAorbWdtdHNldGNvbW1hbmQKK25ldHdvcmtuYW1lCitwYW5pZAorcGVuZGluZworcGVuZGluZ3RpbWVzdGFtcAorcHNrYworc2VjdXJpdHlwb2xpY3kKK0RvbmUKKz4KK2BgYAorCisjIyMgZGF0YXNldCBhY3RpdmUKKworUHJpbnQgbWVzaGNvcCBhY3RpdmUgb3BlcmF0aW9uYWwgZGF0YXNldC4KKworYGBgYmFzaAorPiBkYXRhc2V0IGFjdGl2ZQorQWN0aXZlIFRpbWVzdGFtcDogMAorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IGFjdGl2ZXRpbWVzdGFtcCBcPGFjdGl2ZXRpbWVzdGFtcFw+CisKK1NldCBhY3RpdmUgdGltZXN0YW1wLgorCitgYGBiYXNoCis+IGRhdGFzZXQgYWN0aXZlc3RhbXAgMTIzNDU2Nzg5CitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgY2hhbm5lbCBcPGNoYW5uZWxcPgorCitTZXQgY2hhbm5lbC4KKworYGBgYmFzaAorPiBkYXRhc2V0IGNoYW5uZWwgMTIKK0RvbmUKK2BgYAorCisjIyMgZGF0YXNldCBjaGFubmVsbWFzayBcPGNoYW5uZWxtYXNrXD4KKworU2V0IGNoYW5uZWwgbWFzay4KKworYGBgYmFzaAorPiBkYXRhc2V0IGNoYW5uZWxtYXNrIGUwZmYxZjAwCitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgY2xlYXIKKworUmVzZXQgb3BlcmF0aW9uYWwgZGF0YXNldCBidWZmZXIuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBjbGVhcgorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IGNvbW1pdCBcPGRhdGFzZXRcPgorCitDb21taXQgb3BlcmF0aW9uYWwgZGF0YXNldCBidWZmZXIgdG8gYWN0aXZlL3BlbmRpbmcgb3BlcmF0aW9uYWwgZGF0YXNldC4KKworYGBgYmFzaAorPiBkYXRhc2V0IGNvbW1pdCBhY3RpdmUKK0RvbmUKK2BgYAorCisjIyMgZGF0YXNldCBkZWxheSBcPGRlbGF5XD4KKworU2V0IGRlbGF5IHRpbWVyIHZhbHVlLgorCitgYGBiYXNoCis+IGRhdGFzZXQgZGVsYXkgMTAwMAorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IGV4dHBhbmlkIFw8ZXh0cGFuaWRcPgorCitTZXQgZXh0ZW5kZWQgcGFuaWQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBleHRwYW5pZCAwMDBkYjgwMTIzNDU2Nzg5CitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgbWFzdGVya2V5IFw8bWFzdGVya2V5XD4KKworU2V0IG1hc3RlciBrZXkuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBtYXN0ZXIgMTIzNDU2Nzg5MDEyMzQ1NgorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IG1lc2hsb2NhbHByZWZpeCBcPG1lc2hsb2NhbHByZWZpeFw+CisKK1NldCBtZXNoIGxvY2FsIHByZWZpeC4KKworYGBgYmFzaAorPiBkYXRhc2V0IG1lc2hsb2NhbHByZWZpeCBmZDAwOmRiODo6CitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgbWdtdGdldGNvbW1hbmQgYWN0aXZlIFxbYWRkcmVzcyBcPGRlc3RpbmF0aW9uXD5cXSBcW1RMVnMgbGlzdFxdIFxbYmluYXJ5XF0KKworU2VuZCBNR01UX0FDVElWRV9HRVQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBtZ210Z2V0Y29tbWFuZCBhY3RpdmUgYWRkcmVzcyBmZGRlOmFkMDA6YmVlZjowOjU1ODpmNTZiOmQ2ODg6Nzk5IGFjdGl2ZXRpbWVzdGFtcCAxMjMgYmluYXJ5IDAwMDEKK0RvbmUKK2BgYAorCisjIyMgZGF0YXNldCBtZ210c2V0Y29tbWFuZCBhY3RpdmUgXFtUTFYgVHlwZXMgbGlzdFxdIFxbYmluYXJ5XF0KKworU2VuZCBNR01UX0FDVElWRV9TRVQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBtZ210c2V0Y29tbWFuZCBhY3RpdmUgYWN0aXZldGltZXN0YW1wIGJpbmFyeSA4MjAxNTUKK0RvbmUKK2BgYAorCisjIyMgZGF0YXNldCBtZ210Z2V0Y29tbWFuZCBwZW5kaW5nIFxbYWRkcmVzcyBcPGRlc3RpbmF0aW9uXD5cXSBcW1RMVnMgbGlzdFxdIFxbYmluYXJ5XF0KKworU2VuZCBNR01UX1BFTkRJTkdfR0VULgorCitgYGBiYXNoCis+IGRhdGFzZXQgbWdtdGdldGNvbW1hbmQgcGVuZGluZyBhZGRyZXNzIGZkZGU6YWQwMDpiZWVmOjA6NTU4OmY1NmI6ZDY4ODo3OTkgYWN0aXZldGltZXN0YW1wIGJpbmFyeSAwMDAxCitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgbWdtdHNldGNvbW1hbmQgcGVuZGluZyBcW1RMViBUeXBlcyBsaXN0XF0gXFtiaW5hcnlcXQorCitTZW5kIE1HTVRfUEVORElOR19TRVQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBtZ210c2V0Y29tbWFuZCBwZW5kaW5nIGFjdGl2ZXRpbWVzdGFtcCBiaW5hcnkgODIwMTU1CitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgbmV0d29ya25hbWUgXDxuZXR3b3JrbmFtZVw+CisKK1NldCBuZXR3b3JrIG5hbWUuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBuZXR3b3JrbmFtZSBvcGVudGhyZWFkCitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgcGFuaWQgXDxwYW5pZFw+CisKK1NldCBwYW5pZC4KKworYGBgYmFzaAorPiBkYXRhc2V0IHBhbmlkIDB4MTIzNAorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IHBlbmRpbmcKKworUHJpbnQgbWVzaGNvcCBwZW5kaW5nIG9wZXJhdGlvbmFsIGRhdGFzZXQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBwZW5kaW5nCitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgcGVuZGluZ3RpbWVzdGFtcCBcPHBlbmRpbmd0aW1lc3RhbXBcPgorCitTZXQgcGVuZGluZyB0aW1lc3RhbXAuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBwZW5kaW5ndGltZXN0YW1wIDEyMzQ1Njc4OQorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IHBza2MgXDxwc2tjXD4KKworU2V0IHBza2Mgd2l0aCBoZXggZm9ybWF0LgorCitgYGBiYXNoCis+IGRhdGFzZXQgcHNrYyA2N2MwYzIwM2FhMGIwNDJiZmI1MzgxYzQ3YWVmNGQ5ZQorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IHNlY3VyaXR5cG9saWN5IFw8cm90YXRpb250aW1lXD4gXFtvbnJjYlxdCisKK1NldCBzZWN1cml0eSBwb2xpY3kuCisKKyogbzogT2J0YWluaW5nIHRoZSBNYXN0ZXIgS2V5IGZvciBvdXQtb2YtYmFuZCBjb21taXNzaW9uaW5nIGlzIGVuYWJsZWQuCisqIG46IE5hdGl2ZSBDb21taXNzaW9uaW5nIHVzaW5nIFBTS2MgaXMgYWxsb3dlZC4KKyogcjogVGhyZWFkIDEueCBSb3V0ZXJzIGFyZSBlbmFibGVkLgorKiBjOiBFeHRlcm5hbCBDb21taXNzaW9uZXIgYXV0aGVudGljYXRpb24gaXMgYWxsb3dlZCB1c2luZyBQU0tjLgorKiBiOiBUaHJlYWQgMS54IEJlYWNvbnMgYXJlIGVuYWJsZWQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBzZWN1cml0eXBvbGljeSA2NzIgb25yY2IKK0RvbmUKK2BgYAorCisjIyMgZGVsYXl0aW1lcm1pbgorCitHZXQgdGhlIG1pbmltYWwgZGVsYXkgdGltZXIgKGluIHNlY29uZHMpLgorCitgYGBiYXNoCis+IGRlbGF5dGltZXJtaW4KKzMwCitEb25lCitgYGAKKworIyMjIGRlbGF5dGltZXJtaW4gXDxkZWxheXRpbWVybWluXD4KKworU2V0IHRoZSBtaW5pbWFsIGRlbGF5IHRpbWVyIChpbiBzZWNvbmRzKS4KKworYGBgYmFzaAorPiBkZWxheXRpbWVybWluIDYwCitEb25lCitgYGAKKworIyMjIGRpc2NvdmVyIFxbY2hhbm5lbFxdCisKK1BlcmZvcm0gYW4gTUxFIERpc2NvdmVyeSBvcGVyYXRpb24uCisKKyogY2hhbm5lbDogVGhlIGNoYW5uZWwgdG8gZGlzY292ZXIgb24uICBJZiBubyBjaGFubmVsIGlzIHByb3ZpZGVkLCB0aGUgZGlzY292ZXJ5IHdpbGwgY292ZXIgYWxsIHZhbGlkIGNoYW5uZWxzLgorCitgYGBiYXNoCis+IGRpc2NvdmVyCit8IEogfCBOZXR3b3JrIE5hbWUgICAgIHwgRXh0ZW5kZWQgUEFOICAgICB8IFBBTiAgfCBNQUMgQWRkcmVzcyAgICAgIHwgQ2ggfCBkQm0gfCBMUUkgfAorKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLSstLS0tLSsKK3wgMCB8IE9wZW5UaHJlYWQgICAgICAgfCBkZWFkMDBiZWVmMDBjYWZlIHwgZmZmZiB8IGYxZDkyYTgyYzhkOGZlNDMgfCAxMSB8IC0yMCB8ICAgMCB8CitEb25lCitgYGAKKworIyMjIGRucyByZXNvbHZlIFw8aG9zdG5hbWVcPiBcW0ROUyBzZXJ2ZXIgSVBcXSBcW0ROUyBzZXJ2ZXIgcG9ydFxdCisKK1NlbmQgRE5TIFF1ZXJ5IHRvIG9idGFpbiBJUHY2IGFkZHJlc3MgZm9yIGdpdmVuIGhvc3RuYW1lLgorVGhlIGxhdHRlciB0d28gcGFyYW1ldGVycyBoYXZlIGZvbGxvd2luZyBkZWZhdWx0IHZhbHVlczoKKyAqIEROUyBzZXJ2ZXIgSVA6IDIwMDE6NDg2MDo0ODYwOjo4ODg4IChHb29nbGUgRE5TIFNlcnZlcikKKyAqIEROUyBzZXJ2ZXIgcG9ydDogNTMKKworYGBgYmFzaAorPiBkbnMgcmVzb2x2ZSBpcHY2Lmdvb2dsZS5jb20KKz4gRE5TIHJlc3BvbnNlIGZvciBpcHY2Lmdvb2dsZS5jb20gLSBbMmEwMDoxNDUwOjQwMWI6ODAxOjA6MDowOjIwMGVdIFRUTDogMzAwCitgYGAKKworIyMjIGVpZGNhY2hlCisKK1ByaW50IHRoZSBFSUQtdG8tUkxPQyBjYWNoZSBlbnRyaWVzLgorCitgYGBiYXNoCis+IGVpZGNhY2hlCitmZGRlOmFkMDA6YmVlZjowOmJiMTplYmQ2OmFkMTA6ZjMzIGFjMDAKK2ZkZGU6YWQwMDpiZWVmOjA6MTEwYTplMDQxOjgzOTk6MTdjZCA2MDAwCitEb25lCitgYGAKKworIyMjIGV1aTY0CisKK0dldCB0aGUgZmFjdG9yeS1hc3NpZ25lZCBJRUVFIEVVSS02NC4KKworYGBgYmFzaAorPiBldWk2NAorMDYxNWFhZTkwMDEyNGIwMAorRG9uZQorYGBgCisKKyMjIyBleHRhZGRyCisKK0dldCB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorCitgYGBiYXNoCis+IGV4dGFkZHIKK2RlYWQwMGJlZWYwMGNhZmUKK0RvbmUKK2BgYAorCisjIyMgZXh0YWRkciBcPGV4dGFkZHJcPgorCitTZXQgdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKworYGBgYmFzaAorPiBleHRhZGRyIGRlYWQwMGJlZWYwMGNhZmUKK2RlYWQwMGJlZWYwMGNhZmUKK0RvbmUKK2BgYAorCisjIyMgZXh0cGFuaWQKKworR2V0IHRoZSBUaHJlYWQgRXh0ZW5kZWQgUEFOIElEIHZhbHVlLgorCitgYGBiYXNoCis+IGV4dHBhbmlkCitkZWFkMDBiZWVmMDBjYWZlCitEb25lCitgYGAKKworIyMjIGV4dHBhbmlkIFw8ZXh0cGFuaWRcPgorCitTZXQgdGhlIFRocmVhZCBFeHRlbmRlZCBQQU4gSUQgdmFsdWUuCisKK2BgYGJhc2gKKz4gZXh0cGFuaWQgZGVhZDAwYmVlZjAwY2FmZQorRG9uZQorYGBgCisKKyMjIyBmYWN0b3J5cmVzZXQKK0RlbGV0ZSBhbGwgc3RvcmVkIHNldHRpbmdzLCBhbmQgc2lnbmFsIGEgcGxhdGZvcm0gcmVzZXQuCisKK2BgYGJhc2gKKz4gZmFjdG9yeXJlc2V0CitgYGAKKworIyMjIGhhc2htYWNhZGRyCisKK0dldCB0aGUgSGFzaE1hYyBhZGRyZXNzLgorCitgYGBiYXNoCis+IGhhc2htYWNhZGRyCitlMGIyMjBlYjdkOGRkYTdlCitEb25lCitgYGAKKworIyMjIGlmY29uZmlnCisKK1Nob3cgdGhlIHN0YXR1cyBvZiB0aGUgSVB2NiBpbnRlcmZhY2UuCisKK2BgYGJhc2gKKz4gaWZjb25maWcKK2Rvd24KK0RvbmUKK2BgYAorCisjIyMgaWZjb25maWcgdXAKKworQnJpbmcgdXAgdGhlIElQdjYgaW50ZXJmYWNlLgorCitgYGBiYXNoCis+IGlmY29uZmlnIHVwCitEb25lCitgYGAKKworIyMjIGlmY29uZmlnIGRvd24KKworQnJpbmcgZG93biB0aGUgSVB2NiBpbnRlcmZhY2UuCisKK2BgYGJhc2gKKz4gaWZjb25maWcgZG93bgorRG9uZQorYGBgCisKKyMjIyBpcGFkZHIKKworTGlzdCBhbGwgSVB2NiBhZGRyZXNzZXMgYXNzaWduZWQgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisKK2BgYGJhc2gKKz4gaXBhZGRyCitmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDowCitmZGRlOmFkMDA6YmVlZjowOjU1ODpmNTZiOmQ2ODg6Nzk5CitmZTgwOjA6MDowOmYzZDk6MmE4MjpjOGQ4OmZlNDMKK0RvbmUKK2BgYAorCisjIyMgaXBhZGRyIGFkZCBcPGlwYWRkclw+CisKK0FkZCBhbiBJUHY2IGFkZHJlc3MgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisKK2BgYGJhc2gKKz4gaXBhZGRyIGFkZCAyMDAxOjpkZWFkOmJlZWY6Y2FmZQorRG9uZQorYGBgCisKKyMjIyBpcGFkZHIgZGVsIFw8aXBhZGRyXD4KKworRGVsZXRlIGFuIElQdjYgYWRkcmVzcyBmcm9tIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorCitgYGBiYXNoCis+IGlwYWRkciBkZWwgMjAwMTo6ZGVhZDpiZWVmOmNhZmUKK0RvbmUKK2BgYAorCisjIyMgaXBtYWRkcgorCitMaXN0IGFsbCBJUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMgc3Vic2NyaWJlZCB0byB0aGUgVGhyZWFkIGludGVyZmFjZS4KKworYGBgYmFzaAorPiBpcG1hZGRyCitmZjA1OjA6MDowOjA6MDowOjEKK2ZmMzM6NDA6ZmRkZTphZDAwOmJlZWY6MDowOjEKK2ZmMzI6NDA6ZmRkZTphZDAwOmJlZWY6MDowOjEKK0RvbmUKK2BgYAorCisjIyMgaXBtYWRkciBhZGQgXDxpcGFkZHJcPgorCitTdWJzY3JpYmUgdGhlIFRocmVhZCBpbnRlcmZhY2UgdG8gdGhlIElQdjYgbXVsdGljYXN0IGFkZHJlc3MuCisKK2BgYGJhc2gKKz4gaXBtYWRkciBhZGQgZmYwNTo6MQorRG9uZQorYGBgCisKKyMjIyBpcG1hZGRyIGRlbCBcPGlwYWRkclw+CisKK1Vuc3Vic2NyaWJlIHRoZSBUaHJlYWQgaW50ZXJmYWNlIHRvIHRoZSBJUHY2IG11bHRpY2FzdCBhZGRyZXNzLgorCitgYGBiYXNoCis+IGlwbWFkZHIgZGVsIGZmMDU6OjEKK0RvbmUKK2BgYAorCisjIyMgaXBtYWRkciBwcm9taXNjdW91cworCitHZXQgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGUuCisKK2BgYGJhc2gKKz4gaXBtYWRkciBwcm9taXNjdW91cworRGlzYWJsZWQKK0RvbmUKK2BgYAorCisjIyMgaXBtYWRkciBwcm9taXNjdW91cyBlbmFibGUKKworRW5hYmxlIG11bHRpY2FzdCBwcm9taXNjdW91cyBtb2RlLgorCitgYGBiYXNoCis+IGlwbWFkZHIgcHJvbWlzY3VvdXMgZW5hYmxlCitEb25lCitgYGAKKworIyMjIGlwbWFkZHIgcHJvbWlzY3VvdXMgZGlzYWJsZQorCitEaXNhYmxlIG11bHRpY2FzdCBwcm9taXNjdW91cyBtb2RlLgorCitgYGBiYXNoCis+IGlwbWFkZHIgcHJvbWlzY3VvdXMgZGlzYWJsZQorRG9uZQorYGBgCisKKyMjIyBqb2luZXIgc3RhcnQgXDxwc2tkXD4gXDxwcm92aXNpb25pbmdVcmxcPgorCitTdGFydCB0aGUgSm9pbmVyIHJvbGUuCisKKyogcHNrZDogUHJlLVNoYXJlZCBLZXkgZm9yIHRoZSBKb2luZXIuCisqIHByb3Zpc2lvbmluZ1VybDogUHJvdmlzaW9uaW5nIFVSTCBmb3IgdGhlIEpvaW5lciAob3B0aW9uYWwpLgorCitUaGlzIGNvbW1hbmQgd2lsbCBjYXVzZSB0aGUgZGV2aWNlIHRvIHBlcmZvcm0gYW4gTUxFIERpc2NvdmVyeSBhbmQKK2luaXRpYXRlIHRoZSBUaHJlYWQgQ29tbWlzc2lvbmluZyBwcm9jZXNzLgorCitgYGBiYXNoCis+IGpvaW5lciBzdGFydCBQU0sKK0RvbmUKK2BgYAorCisjIyMgam9pbmVyIHN0b3AKKworU3RvcCB0aGUgSm9pbmVyIHJvbGUuCisKK2BgYGJhc2gKKz4gam9pbmVyIHN0b3AKK0RvbmUKK2BgYAorCisjIyMgam9pbmVycG9ydCBcPHBvcnRcPgorCitTZXQgdGhlIEpvaW5lciBwb3J0LgorCitgYGBiYXNoCis+IGpvaW5lcnBvcnQgMTAwMAorRG9uZQorYGBgCisKKyMjIyBrZXlzZXF1ZW5jZSBjb3VudGVyCisKK0dldCB0aGUgVGhyZWFkIEtleSBTZXF1ZW5jZSBDb3VudGVyLgorCitgYGBiYXNoCis+IGtleXNlcXVlbmNlIGNvdW50ZXIKKzEwCitEb25lCitgYGAKKworIyMjIGtleXNlcXVlbmNlIGNvdW50ZXIgXDxjb3VudGVyXD4KKworU2V0IHRoZSBUaHJlYWQgS2V5IFNlcXVlbmNlIENvdW50ZXIuCisKK2BgYGJhc2gKKz4ga2V5c2VxdWVuY2UgY291bnRlciAxMAorRG9uZQorYGBgCisKKyMjIyBrZXlzZXF1ZW5jZSBndWFyZHRpbWUKKworR2V0IFRocmVhZCBLZXkgU3dpdGNoIEd1YXJkIFRpbWUgKGluIGhvdXJzKQorCitgYGBiYXNoCis+IGtleXNlcXVlbmNlIGd1YXJkdGltZQorMAorRG9uZQorYGBgCisKKyMjIyBrZXlzZXF1ZW5jZSBndWFyZHRpbWUgXDxndWFyZHRpbWVcPgorCitTZXQgVGhyZWFkIEtleSBTd2l0Y2ggR3VhcmQgVGltZSAoaW4gaG91cnMpCiswIG1lYW5zIFRocmVhZCBLZXkgU3dpdGNoIGltZWRpYXRlbHkgaWYga2V5IGluZGV4IG1hdGNoCisKK2BgYGJhc2gKKz4ga2V5c2VxdWVuY2UgZ3VhcmR0aW1lIDAKK0RvbmUKK2BgYAorCisjIyMgbGVhZGVycGFydGl0aW9uaWQKKworR2V0IHRoZSBUaHJlYWQgTGVhZGVyIFBhcnRpdGlvbiBJRC4KKworYGBgYmFzaAorPiBsZWFkZXJwYXJ0aXRpb25pZAorNDI5NDk2NzI5NQorRG9uZQorYGBgCisKKyMjIyBsZWFkZXJwYXJ0aXRpb25pZCBcPHBhcnRpdGlvbmlkXD4KKworU2V0IHRoZSBUaHJlYWQgTGVhZGVyIFBhcnRpdGlvbiBJRC4KKworYGBgYmFzaAorPiBsZWFkZXJwYXJ0aXRpb25pZCAweGZmZmZmZmZmCitEb25lCitgYGAKKworIyMjIGxlYWRlcmRhdGEKKworU2hvdyB0aGUgVGhyZWFkIExlYWRlciBEYXRhLgorCitgYGBiYXNoCis+IGxlYWRlcmRhdGEKK1BhcnRpdGlvbiBJRDogMTA3Nzc0NDI0MAorV2VpZ2h0aW5nOiA2NAorRGF0YSBWZXJzaW9uOiAxMDkKK1N0YWJsZSBEYXRhIFZlcnNpb246IDIxMQorTGVhZGVyIFJvdXRlciBJRDogNjAKK0RvbmUKK2BgYAorCisjIyMgbGVhZGVyd2VpZ2h0CisKK0dldCB0aGUgVGhyZWFkIExlYWRlciBXZWlnaHQuCisKK2BgYGJhc2gKKz4gbGVhZGVyd2VpZ2h0CisxMjgKK0RvbmUKK2BgYAorCisjIyMgbGVhZGVyd2VpZ2h0IFw8d2VpZ2h0XD4KKworU2V0IHRoZSBUaHJlYWQgTGVhZGVyIFdlaWdodC4KKworYGBgYmFzaAorPiBsZWFkZXJ3ZWlnaHQgMTI4CitEb25lCitgYGAKKworIyMjIGxpbmtxdWFsaXR5IFw8ZXh0YWRkclw+CisKK0dldCB0aGUgbGluayBxdWFsaXR5IG9uIHRoZSBsaW5rIHRvIGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcy4KKworYGBgYmFzaAorPiBsaW5rcXVhbGl0eSAzNmMxZGQ3YTRmNTIwMWZmCiszCitEb25lCitgYGAKKworIyMjIGxpbmtxdWFsaXR5IFw8ZXh0YWRkclw+IFw8bGlua3F1YWxpdHlcPgorCitTZXQgdGhlIGxpbmsgcXVhbGl0eSBvbiB0aGUgbGluayB0byBhIGdpdmVuIGV4dGVuZGVkIGFkZHJlc3MuCisKK2BgYGJhc2gKKz4gbGlua3F1YWxpdHkgMzZjMWRkN2E0ZjUyMDFmZiAzCitEb25lCitgYGAKKworIyMjIG1hc3RlcmtleQorCitHZXQgdGhlIFRocmVhZCBNYXN0ZXIgS2V5IHZhbHVlLgorCitgYGBiYXNoCis+IG1hc3RlcmtleQorMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYKK0RvbmUKK2BgYAorCisjIyMgbWFzdGVya2V5IFw8a2V5XD4KKworU2V0IHRoZSBUaHJlYWQgTWFzdGVyIEtleSB2YWx1ZS4KKworYGBgYmFzaAorPiBtYXN0ZXJrZXkgMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYKK0RvbmUKK2BgYAorCisjIyMgbW9kZQorCitHZXQgdGhlIFRocmVhZCBEZXZpY2UgTW9kZSB2YWx1ZS4KKworKiByOiByeC1vbi13aGVuLWlkbGUKKyogczogU2VjdXJlIElFRUUgODAyLjE1LjQgZGF0YSByZXF1ZXN0cworKiBkOiBGdWxsIEZ1bmN0aW9uIERldmljZQorKiBuOiBGdWxsIE5ldHdvcmsgRGF0YQorCitgYGBiYXNoCis+IG1vZGUKK3JzZG4KK0RvbmUKK2BgYAorCisjIyMgbW9kZSBbcnNkbl0KKworU2V0IHRoZSBUaHJlYWQgRGV2aWNlIE1vZGUgdmFsdWUuCisKKyogcjogcngtb24td2hlbi1pZGxlCisqIHM6IFNlY3VyZSBJRUVFIDgwMi4xNS40IGRhdGEgcmVxdWVzdHMKKyogZDogRnVsbCBGdW5jdGlvbiBEZXZpY2UKKyogbjogRnVsbCBOZXR3b3JrIERhdGEKKworYGBgYmFzaAorPiBtb2RlIHJzZG4KK0RvbmUKK2BgYAorCisjIyMgbmV0ZGF0YXJlZ2lzdGVyCisKK1JlZ2lzdGVyIGxvY2FsIG5ldHdvcmsgZGF0YSB3aXRoIFRocmVhZCBMZWFkZXIuCisKK2BgYGJhc2gKKz4gbmV0ZGF0YXJlZ2lzdGVyCitEb25lCitgYGAKKworIyMjIG5ldHdvcmtkaWFnbm9zdGljIGdldCBcPGFkZHJcPiBcPHR5cGVcPiAuLgorCitTZW5kIG5ldHdvcmsgZGlhZ25vc3RpYyByZXF1ZXN0IHRvIHJldHJpZXZlIHRsdiBvZiBcPHR5cGVcPnMuCisKK0lmIFw8YWRkclw+IGlzIHVuaWNhc3QgYWRkcmVzcywgYERpYWdub3N0aWMgR2V0YCB3aWxsIGJlIHNlbnQuCitpZiBcPGFkZHJcPiBpcyBtdWx0aWNhc3QgYWRkcmVzcywgYERpYWdub3N0aWMgUXVlcnlgIHdpbGwgYmUgc2VudC4KKworYGBgYmFzaAorPiBuZXR3b3JrZGlhZ25vc3RpYyBnZXQgZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6ZjQwMCAwIDEgNgorRElBR19HRVQucnNwOiAwMDA4OGUxOGFkMTdhMjRiMGI3NDAxMDJmNDAwMDYwODQxZGNiODJkNDBiYWM2M2QKKworPiBuZXR3b3JrZGlhZ25vc3RpYyBnZXQgZmYwMjo6MSAwIDEKK0RJQUdfR0VULnJzcDogMDAwODU2N2UzMWE3OTY2N2E4Y2MwMTAyZjAwMAorRElBR19HRVQucnNwOiAwMDA4YWFhN2U1ODQ3NTllNGU2NDAxMDI1NDAwCitgYGAKKworIyMjIG5ldHdvcmtkaWFnbm9zdGljIHJlc2V0IFw8YWRkclw+IFw8dHlwZVw+IC4uCisKK1NlbmQgbmV0d29yayBkaWFnbm9zdGljIHJlcXVlc3QgdG8gcmVzZXQgXDxhZGRyXD4ncyB0bHYgb2YgXDx0eXBlXD5zLiBDdXJyZW50bHkgb25seSBgTUFDIENvdW50ZXJzYCg5KSBpcyBzdXBwb3J0ZWQuCisKK2BgYGJhc2gKKz4gZGlhZ25vc3RpYyByZXNldCBmZDAwOmRiODo6ZmY6ZmUwMDowIDkKK0RvbmUKK2BgYAorCisjIyMgbmV0d29ya2lkdGltZW91dAorCitHZXQgdGhlIE5FVFdPUktfSURfVElNRU9VVCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgUm91dGVyIHJvbGUuICAKKworYGBgYmFzaAorPiBuZXR3b3JraWR0aW1lb3V0CisxMjAKK0RvbmUKK2BgYAorCisjIyMgbmV0d29ya2lkdGltZW91dCBcPHRpbWVvdXRcPgorCitTZXQgdGhlIE5FVFdPUktfSURfVElNRU9VVCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgUm91dGVyIHJvbGUuICAKKworYGBgYmFzaAorPiBuZXR3b3JraWR0aW1lb3V0IDEyMAorRG9uZQorYGBgCisKKyMjIyBuZXR3b3JrbmFtZQorCitHZXQgdGhlIFRocmVhZCBOZXR3b3JrIE5hbWUuICAKKworYGBgYmFzaAorPiBuZXR3b3JrbmFtZQorT3BlblRocmVhZAorRG9uZQorYGBgCisKKyMjIyBuZXR3b3JrbmFtZSBcPG5hbWVcPgorCitTZXQgdGhlIFRocmVhZCBOZXR3b3JrIE5hbWUuICAKKworYGBgYmFzaAorPiBuZXR3b3JrbmFtZSBPcGVuVGhyZWFkCitEb25lCitgYGAKKworIyMjIHBhbmlkCisKK0dldCB0aGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQgdmFsdWUuCisKK2BgYGJhc2gKKz4gcGFuaWQKKzB4ZGVhZAorRG9uZQorYGBgCisKKyMjIyBwYW5pZCBcPHBhbmlkXD4KKworU2V0IHRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRCB2YWx1ZS4KKworYGBgYmFzaAorPiBwYW5pZCAweGRlYWQKK0RvbmUKK2BgYAorCisjIyMgcGFyZW50CisKK0dldCB0aGUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYSBUaHJlYWQgUm91dGVyIGFzIHBhcmVudC4KKworYGBgYmFzaAorPiBwYXJlbnQKK0V4dCBBZGRyOiBiZTE4NTdjNmMyMWRjZTU1CitSbG9jOiA1YzAwCitMaW5rIFF1YWxpdHkgSW46IDMKK0xpbmsgUXVhbGl0eSBPdXQ6IDMKK0FnZTogMjAKK0RvbmUKK2BgYAorCisjIyMgcGFyZW50cHJpb3JpdHkKKworR2V0IHRoZSBhc3NpZ25lZCBwYXJlbnQgcHJpb3JpdHkgdmFsdWUsIC0yIG1lYW5zIG5vdCBhc3NpZ25lZC4KKworYGBgYmFzaAorPiBwYXJlbnRwcmlvcml0eQorMQorRG9uZQorYGBgCisKKyMjIyBwYXJlbnRwcmlvcml0eSBcPHBhcmVudHByaW9yaXR5XD4KKworU2V0IHRoZSBhc3NpZ25lZCBwYXJlbnQgcHJpb3JpdHkgdmFsdWU6IDEsIDAsIC0xIG9yIC0yLgorCitgYGBiYXNoCis+IHBhcmVudHByaW9yaXR5IDEKK0RvbmUKK2BgYAorCisjIyMgcGluZyBcPGlwYWRkclw+IFtzaXplXSBbY291bnRdIFtpbnRlcnZhbF0KKworU2VuZCBhbiBJQ01QdjYgRWNobyBSZXF1ZXN0LgorCitgYGBiYXNoCis+IHBpbmcgZmRkZTphZDAwOmJlZWY6MDo1NTg6ZjU2YjpkNjg4Ojc5OQorMTYgYnl0ZXMgZnJvbSBmZGRlOmFkMDA6YmVlZjowOjU1ODpmNTZiOmQ2ODg6Nzk5OiBpY21wX3NlcT0xIGhsaW09NjQgdGltZT0yOG1zCitgYGAKKworIyMjIHBpbmcgc3RvcAorCitTdG9wIHNlbmRpbmcgSUNNUHY2IEVjaG8gUmVxdWVzdHMuCisKK2BgYGJhc2gKKz4gcGluZyBzdG9wCitEb25lCitgYGAKKworIyMjIHBvbGxwZXJpb2QKKworR2V0IHRoZSBjdXN0b21pemVkIGRhdGEgcG9sbCBwZXJpb2Qgb2Ygc2xlZXB5IGVuZCBkZXZpY2UgKHNlY29uZHMpLiBPbmx5IGZvciBjZXJ0aWZpY2F0aW9uIHRlc3QKKworYGBgYmFzaAorPiBwb2xscGVyaW9kCiswCitEb25lCitgYGAKKworIyMjIHBvbGxwZXJpb2QgXDxwb2xscGVyaW9kXD4KKworU2V0IHRoZSBjdXN0b21pemVkIGRhdGEgcG9sbCBwZXJpb2QgZm9yIHNsZWVweSBlbmQgZGV2aWNlIChzZWNvbmRzKS4gT25seSBmb3IgY2VydGlmaWNhdGlvbiB0ZXN0CisKK2BgYGJhc2gKKz4gcG9sbHBlcmlvZCAxMAorRG9uZQorYGBgCisKKyMjIyBwcmVmaXggYWRkIFw8cHJlZml4XD4gW3B2ZGNzcl0gW3ByZl0KKworQWRkIGEgdmFsaWQgcHJlZml4IHRvIHRoZSBOZXR3b3JrIERhdGEuCisKKyogcDogUHJlZmVycmVkIGZsYWcKKyogYTogU3RhdGVsZXNzIElQdjYgQWRkcmVzcyBBdXRvY29uZmlndXJhdGlvbiBmbGFnCisqIGQ6IERIQ1B2NiBJUHY2IEFkZHJlc3MgQ29uZmlndXJhdGlvbiBmbGFnCisqIGM6IERIQ1B2NiBPdGhlciBDb25maWd1cmF0aW9uIGZsYWcKKyogcjogRGVmYXVsdCBSb3V0ZSBmbGFnCisqIG86IE9uIE1lc2ggZmxhZworKiBzOiBTdGFibGUgZmxhZworKiBwcmY6IERlZmF1bHQgcm91dGVyIHByZWZlcmVuY2UsIHdoaWNoIG1heSBiZSAnaGlnaCcsICdtZWQnLCBvciAnbG93Jy4KKworYGBgYmFzaAorPiBwcmVmaXggYWRkIDIwMDE6ZGVhZDpiZWVmOmNhZmU6Oi82NCBwYXJvcyBtZWQKK0RvbmUKK2BgYAorCisjIyMgcHJlZml4IHJlbW92ZSBcPHByZWZpeFw+CisKK0ludmFsaWRhdGUgYSBwcmVmaXggaW4gdGhlIE5ldHdvcmsgRGF0YS4KKworYGBgYmFzaAorPiBwcmVmaXggcmVtb3ZlIDIwMDE6ZGVhZDpiZWVmOmNhZmU6Oi82NAorRG9uZQorYGBgCisKKyMjIyBwcm9taXNjdW91cworCitHZXQgcmFkaW8gcHJvbWlzY3VvdXMgcHJvcGVydHkuCisKK2BgYGJhc2gKKz4gcHJvbWlzY3VvdXMKK0Rpc2FibGVkCitEb25lCitgYGAKKworIyMjIHByb21pc2N1b3VzIGVuYWJsZQorCitFbmFibGUgcmFkaW8gcHJvbWlzY3VvdXMgb3BlcmF0aW9uIGFuZCBwcmludCByYXcgcGFja2V0IGNvbnRlbnQuCisKK2BgYGJhc2gKKz4gcHJvbWlzY3VvdXMgZW5hYmxlCitEb25lCitgYGAKKworIyMjIHByb21pc2N1b3VzIGRpc2FibGUKKworRGlzYWJsZSByYWRpbyBwcm9taXNjdW91cyBvcGVyYXRpb24uCisKK2BgYGJhc2gKKz4gcHJvbWlzY3VvdXMgZGlzYWJsZQorRG9uZQorYGBgCisKKyMjIyByZWxlYXNlcm91dGVyaWQgXDxyb3V0ZXJpZFw+CitSZWxlYXNlIGEgUm91dGVyIElEIHRoYXQgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZSBkZXZpY2UgaW4gdGhlIExlYWRlciByb2xlLgorCitgYGBiYXNoCis+IHJlbGVhc2Vyb3V0ZXJpZCAxNgorRG9uZQorYGBgCisKKyMjIyByZXNldAorU2lnbmFsIGEgcGxhdGZvcm0gcmVzZXQuCisKK2BgYGJhc2gKKz4gcmVzZXQKK2BgYAorCisjIyMgcmxvYzE2CisKK0dldCB0aGUgVGhyZWFkIFJMT0MxNiB2YWx1ZS4KKworYGBgYmFzaAorPiBybG9jMTYKKzB4ZGVhZAorRG9uZQorYGBgCisKKyMjIyByb3V0ZSBhZGQgXDxwcmVmaXhcPiBbc10gW3ByZl0KKworQWRkIGEgdmFsaWQgcHJlZml4IHRvIHRoZSBOZXR3b3JrIERhdGEuCisKKyogczogU3RhYmxlIGZsYWcKKyogcHJmOiBEZWZhdWx0IFJvdXRlciBQcmVmZXJlbmNlLCB3aGljaCBtYXkgYmU6ICdoaWdoJywgJ21lZCcsIG9yICdsb3cnLgorCitgYGBiYXNoCis+IHJvdXRlIGFkZCAyMDAxOmRlYWQ6YmVlZjpjYWZlOjovNjQgcyBtZWQKK0RvbmUKK2BgYAorCisjIyMgcm91dGUgcmVtb3ZlIFw8cHJlZml4XD4KKworSW52YWxpZGF0ZSBhIHByZWZpeCBpbiB0aGUgTmV0d29yayBEYXRhLgorCitgYGBiYXNoCis+IHJvdXRlIHJlbW92ZSAyMDAxOmRlYWQ6YmVlZjpjYWZlOjovNjQKK0RvbmUKK2BgYAorCisjIyMgcm91dGVyIGxpc3QKKworTGlzdCBhbGxvY2F0ZWQgUm91dGVyIElEcy4KKworYGBgYmFzaAorPiByb3V0ZXIgbGlzdAorOCAyNCA1MAorRG9uZQorYGBgCisKKyMjIyByb3V0ZXIgdGFibGUKKworUHJpbnQgdGFibGUgb2Ygcm91dGVycy4KKworYGBgYmFzaAorPiByb3V0ZXIgdGFibGUKK3wgSUQgfCBSTE9DMTYgfCBOZXh0IEhvcCB8IFBhdGggQ29zdCB8IExRIEluIHwgTFEgT3V0IHwgQWdlIHwgRXh0ZW5kZWQgTUFDICAgICB8CisrLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKworfCAyMSB8IDB4NTQwMCB8ICAgICAgIDIxIHwgICAgICAgICAwIHwgICAgIDMgfCAgICAgIDMgfCAgIDUgfCBkMjhkN2Y4NzU4ODhmY2NiIHwKK3wgNTYgfCAweGUwMDAgfCAgICAgICA1NiB8ICAgICAgICAgMCB8ICAgICAwIHwgICAgICAwIHwgMTgyIHwgZjJkOTJhODJjOGQ4ZmU0MyB8CitEb25lCitgYGAKKworIyMjIHJvdXRlciBcPGlkXD4KKworUHJpbnQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYSBUaHJlYWQgUm91dGVyLiAgVGhlIGBpZGAgbWF5IGJlIGEgUm91dGVyIElEIG9yIGFuIFJMT0MxNi4KKworYGBgYmFzaAorPiByb3V0ZXIgNTAKK0FsbG9jOiAxCitSb3V0ZXIgSUQ6IDUwCitSbG9jOiBjODAwCitOZXh0IEhvcDogYzgwMAorTGluazogMQorRXh0IEFkZHI6IGUyYjM1NDA1OTBiMGZkODcKK0Nvc3Q6IDAKK0xpbmsgUXVhbGl0eSBJbjogMworTGluayBRdWFsaXR5IE91dDogMworQWdlOiAzCitEb25lCitgYGAKKworYGBgYmFzaAorPiByb3V0ZXIgMHhjODAwCitBbGxvYzogMQorUm91dGVyIElEOiA1MAorUmxvYzogYzgwMAorTmV4dCBIb3A6IGM4MDAKK0xpbms6IDEKK0V4dCBBZGRyOiBlMmIzNTQwNTkwYjBmZDg3CitDb3N0OiAwCitMaW5rIFF1YWxpdHkgSW46IDMKK0xpbmsgUXVhbGl0eSBPdXQ6IDMKK0FnZTogNworRG9uZQorYGBgCisKKyMjIyByb3V0ZXJkb3duZ3JhZGV0aHJlc2hvbGQKKworR2V0IHRoZSBST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCB2YWx1ZS4KKworYGBgYmFzaAorPiByb3V0ZXJkb3duZ3JhZGV0aHJlc2hvbGQKKzIzCitEb25lCitgYGAKKworIyMjIHJvdXRlcmRvd25ncmFkZXRocmVzaG9sZCBcPHRocmVzaG9sZFw+CisKK1NldCB0aGUgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQgdmFsdWUuCisKK2BgYGJhc2gKKz4gcm91dGVyZG93bmdyYWRldGhyZXNob2xkIDIzCitEb25lCitgYGAKKworIyMjIHJvdXRlcnJvbGUKKworSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvdXRlciByb2xlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisKK2BgYGJhc2gKKz4gcm91dGVycm9sZQorRW5hYmxlZAorRG9uZQorYGBgCisKKyMjIyByb3V0ZXJyb2xlIGVuYWJsZQorCitFbmFibGUgdGhlIHJvdXRlciByb2xlLgorCitgYGBiYXNoCis+IHJvdXRlcnJvbGUgZW5hYmxlCitEb25lCitgYGAKKworIyMjIHJvdXRlcnJvbGUgZGlzYWJsZQorCitEaXNhYmxlIHRoZSByb3V0ZXIgcm9sZS4KKworYGBgYmFzaAorPiByb3V0ZXJyb2xlIGRpc2FibGUKK0RvbmUKK2BgYAorCisjIyMgcm91dGVyc2VsZWN0aW9uaml0dGVyCisKK0dldCB0aGUgUk9VVEVSX1NFTEVDVElPTl9KSVRURVIgdmFsdWUuCisKK2BgYGJhc2gKKz4gcm91dGVyc2VsZWN0aW9uaml0dGVyCisxMjAKK0RvbmUKK2BgYAorCisjIyMgcm91dGVyc2VsZWN0aW9uaml0dGVyIFw8aml0dGVyXD4KKworU2V0IHRoZSBST1VURVJfU0VMRUNUSU9OX0pJVFRFUiB2YWx1ZS4KKworYGBgYmFzaAorPiByb3V0ZXJzZWxlY3Rpb25qaXR0ZXIgMTIwCitEb25lCitgYGAKKworIyMjIHJvdXRlcnVwZ3JhZGV0aHJlc2hvbGQKKworR2V0IHRoZSBST1VURVJfVVBHUkFERV9USFJFU0hPTEQgdmFsdWUuCisKK2BgYGJhc2gKKz4gcm91dGVydXBncmFkZXRocmVzaG9sZAorMTYKK0RvbmUKK2BgYAorCisjIyMgcm91dGVydXBncmFkZXRocmVzaG9sZCBcPHRocmVzaG9sZFw+CisKK1NldCB0aGUgUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIHZhbHVlLgorCitgYGBiYXNoCis+IHJvdXRlcnVwZ3JhZGV0aHJlc2hvbGQgMTYKK0RvbmUKK2BgYAorCisjIyMgc2NhbiBcW2NoYW5uZWxcXQorCitQZXJmb3JtIGFuIElFRUUgODAyLjE1LjQgQWN0aXZlIFNjYW4uCisKKyogY2hhbm5lbDogVGhlIGNoYW5uZWwgdG8gc2NhbiBvbi4gIElmIG5vIGNoYW5uZWwgaXMgcHJvdmlkZWQsIHRoZSBhY3RpdmUgc2NhbiB3aWxsIGNvdmVyIGFsbCB2YWxpZCBjaGFubmVscy4KKworYGBgYmFzaAorPiBzY2FuCit8IEogfCBOZXR3b3JrIE5hbWUgICAgIHwgRXh0ZW5kZWQgUEFOICAgICB8IFBBTiAgfCBNQUMgQWRkcmVzcyAgICAgIHwgQ2ggfCBkQm0gfCBMUUkgfAorKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLSstLS0tLSsKK3wgMCB8IE9wZW5UaHJlYWQgICAgICAgfCBkZWFkMDBiZWVmMDBjYWZlIHwgZmZmZiB8IGYxZDkyYTgyYzhkOGZlNDMgfCAxMSB8IC0yMCB8ICAgMCB8CitEb25lCitgYGAKKworIyMjIHNpbmdsZXRvbgorUmV0dXJuIHRydWUgd2hlbiB0aGVyZSBhcmUgbm8gb3RoZXIgbm9kZXMgaW4gdGhlIG5ldHdvcmssIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuCisKK2BgYGJhc2gKKz4gc2luZ2xldG9uCit0cnVlIG9yIGZhbHNlCitEb25lCitgYGAKKworIyMjIHN0YXRlCitSZXR1cm4gc3RhdGUgb2YgY3VycmVudCBzdGF0ZS4KKworYGBgYmFzaAorPiBzdGF0ZQorb2ZmbGluZSwgZGlzYWJsZWQsIGRldGFjaGVkLCBjaGlsZCwgcm91dGVyIG9yIGxlYWRlcgorRG9uZQorYGBgCisKKyMjIyBzdGF0ZSA8c3RhdGU+CitUcnkgdG8gc3dpdGNoIHRvIHN0YXRlIGBkZXRhY2hlZGAsIGBjaGlsZGAsIGByb3V0ZXJgIG9yIGBsZWFkZXJgLgorCitgYGBiYXNoCis+IHN0YXRlIGxlYWRlcgorRG9uZQorYGBgCisKKyMjIyB0aHJlYWQgc3RhcnQKKworRW5hYmxlIFRocmVhZCBwcm90b2NvbCBvcGVyYXRpb24gYW5kIGF0dGFjaCB0byBhIFRocmVhZCBuZXR3b3JrLgorCitgYGBiYXNoCis+IHRocmVhZCBzdGFydAorRG9uZQorYGBgCisKKyMjIyB0aHJlYWQgc3RvcAorCitEaXNhYmxlIFRocmVhZCBwcm90b2NvbCBvcGVyYXRpb24gYW5kIGRldGFjaCBmcm9tIGEgVGhyZWFkIG5ldHdvcmsuCisKK2BgYGJhc2gKKz4gdGhyZWFkIHN0b3AKK0RvbmUKK2BgYAorCisjIyMgdHhwb3dlcm1heAorCitHZXQgdGhlIG1heGltdW0gdHJhbnNtaXQgcG93ZXIgaW4gZEJtLgorCitgYGBiYXNoCis+IHR4cG93ZXJtYXgKKy0xMCBkQm0KK0RvbmUKK2BgYAorCisjIyMgdHhwb3dlcm1heCBcPHR4cG93ZXJtYXhcPgorCitTZXQgdGhlIG1heGltdW0gdHJhbnNtaXQgcG93ZXIuCisKK2BgYGJhc2gKKz4gdHhwb3dlcm1heCAtMTAKK0RvbmUKK2BgYAorCisjIyMgdmVyc2lvbgorCitQcmludCB0aGUgYnVpbGQgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKworYGBgYmFzaAorPiB2ZXJzaW9uCitPUEVOVEhSRUFEL2dmNGYyZjA0OyBKdWwgIDEgMjAxNiAxNzowMDowOQorRG9uZQorYGBgCisKKyMjIyB3aGl0ZWxpc3QKKworTGlzdCB0aGUgd2hpdGVsaXN0IGVudHJpZXMuCisKK2BgYGJhc2gKKz4gd2hpdGVsaXN0CitFbmFibGVkCitlMmIzNTQwNTkwYjBmZDg3CitkMzhkN2Y4NzU4ODhmY2NiCitjNDY3YTkwYTIwNjBmYTBlCitEb25lCitgYGAKKworIyMjIHdoaXRlbGlzdCBhZGQgXDxleHRhZGRyXD4KKworQWRkIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyB0byB0aGUgd2hpdGVsaXN0LgorCitgYGBiYXNoCis+IHdoaXRlbGlzdCBhZGQgZGVhZDAwYmVlZjAwY2FmZQorRG9uZQorYGBgCisKKyMjIyB3aGl0ZWxpc3QgY2xlYXIKKworQ2xlYXIgYWxsIGVudHJpZXMgZnJvbSB0aGUgd2hpdGVsaXN0LgorCitgYGBiYXNoCis+IHdoaXRlbGlzdCBjbGVhcgorRG9uZQorYGBgCisKKyMjIyB3aGl0ZWxpc3QgZGlzYWJsZQorCitEaXNhYmxlIE1BQyB3aGl0ZWxpc3QgZmlsdGVyaW5nLgorCitgYGBiYXNoCis+IHdoaXRlbGlzdCBkaXNhYmxlCitEb25lCitgYGAKKworIyMjIHdoaXRlbGlzdCBlbmFibGUKKworRW5hYmxlIE1BQyB3aGl0ZWxpc3QgZmlsdGVyaW5nLgorCitgYGBiYXNoCis+IHdoaXRlbGlzdCBlbmFibGUKK0RvbmUKK2BgYAorCisjIyMgd2hpdGVsaXN0IHJlbW92ZSBcPGV4dGFkZHJcPgorCitSZW1vdmUgYW4gSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzIGZyb20gdGhlIHdoaXRlbGlzdC4KKworYGBgYmFzaAorPiB3aGl0ZWxpc3QgcmVtb3ZlIGRlYWQwMGJlZWYwMGNhZmUKK0RvbmUKK2BgYAorCisjIyMgZGlhZworCitEaWFnbm9zdGljcyBtb2R1bGUgaXMgZW5hYmxlZCBvbmx5IHdoZW4gYnVpbGRpbmcgT3BlblRocmVhZCB3aXRoIC0tZW5hYmxlLWRpYWcgb3B0aW9uLgorR28gW2RpYWdub3N0aWNzIG1vZHVsZV1bMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1sxXTouLi9kaWFnL1JFQURNRS5tZApkaWZmIC0tZ2l0IGEvc3JjL2NsaS9jbGkuY3BwIGIvc3JjL2NsaS9jbGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZjQ5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2xpL2NsaS5jcHAKQEAgLTAsMCArMSwzMTk2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBDTEkgaW50ZXJwcmV0ZXIuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjbGkuaHBwIgorCisjaWZkZWYgT1RETEwKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb21taXNzaW9uZXIuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2ljbXA2Lmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9qb2luZXIuaD4KKworI2lmIE9QRU5USFJFQURfRlRECisjaW5jbHVkZSA8b3BlbnRocmVhZC9kYXRhc2V0X2Z0ZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdGhyZWFkX2Z0ZC5oPgorI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisjaW5jbHVkZSA8b3BlbnRocmVhZC9ib3JkZXJfcm91dGVyLmg+CisjZW5kaWYKKworI2lmbmRlZiBPVERMTAorI2luY2x1ZGUgPG9wZW50aHJlYWQvZGhjcDZfY2xpZW50Lmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9kaGNwNl9zZXJ2ZXIuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RpYWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2ljbXA2Lmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0Lmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL25ldy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisjZW5kaWYKKworI2luY2x1ZGUgImNsaV9kYXRhc2V0LmhwcCIKKyNpbmNsdWRlICJjbGlfdWFydC5ocHAiCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisjaW5jbHVkZSAiY2xpX2NvYXAuaHBwIgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworCituYW1lc3BhY2UgQ2xpIHsKKworY29uc3Qgc3RydWN0IENvbW1hbmQgSW50ZXJwcmV0ZXI6OnNDb21tYW5kc1tdID0KK3sKKyAgICB7ICJoZWxwIiwgJkludGVycHJldGVyOjpQcm9jZXNzSGVscCB9LAorICAgIHsgImF1dG9zdGFydCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0F1dG9TdGFydCB9LAorICAgIHsgImJsYWNrbGlzdCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0JsYWNrbGlzdCB9LAorICAgIHsgImJ1ZmZlcmluZm8iLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NCdWZmZXJJbmZvIH0sCisgICAgeyAiY2hhbm5lbCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0NoYW5uZWwgfSwKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHsgImNoaWxkIiwgJkludGVycHJldGVyOjpQcm9jZXNzQ2hpbGQgfSwKKyAgICB7ICJjaGlsZG1heCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0NoaWxkTWF4IH0sCisjZW5kaWYKKyAgICB7ICJjaGlsZHRpbWVvdXQiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NDaGlsZFRpbWVvdXQgfSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisgICAgeyAiY29hcCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0NvYXAgfSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorICAgIHsgImNvbW1pc3Npb25lciIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0NvbW1pc3Npb25lciB9LAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB7ICJjb250ZXh0cmV1c2VkZWxheSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0NvbnRleHRJZFJldXNlRGVsYXkgfSwKKyNlbmRpZgorICAgIHsgImNvdW50ZXIiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NDb3VudGVycyB9LAorICAgIHsgImRhdGFzZXQiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NEYXRhc2V0IH0sCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB7ICJkZWxheXRpbWVybWluIiwgJkludGVycHJldGVyOjpQcm9jZXNzRGVsYXlUaW1lck1pbn0sCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisgICAgeyAiZGlhZyIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0RpYWcgfSwKKyNlbmRpZgorICAgIHsgImRpc2NvdmVyIiwgJkludGVycHJldGVyOjpQcm9jZXNzRGlzY292ZXIgfSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCisgICAgeyAiZG5zIiwgJkludGVycHJldGVyOjpQcm9jZXNzRG5zIH0sCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHsgImVpZGNhY2hlIiwgJkludGVycHJldGVyOjpQcm9jZXNzRWlkQ2FjaGUgfSwKKyNlbmRpZgorICAgIHsgImV1aTY0IiwgJkludGVycHJldGVyOjpQcm9jZXNzRXVpNjQgfSwKKyNpZmRlZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCisgICAgeyAiZXhpdCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0V4aXQgfSwKKyNlbmRpZgorICAgIHsgImV4dGFkZHIiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NFeHRBZGRyZXNzIH0sCisgICAgeyAiZXh0cGFuaWQiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NFeHRQYW5JZCB9LAorICAgIHsgImZhY3RvcnlyZXNldCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0ZhY3RvcnlSZXNldCB9LAorICAgIHsgImhhc2htYWNhZGRyIiwgJkludGVycHJldGVyOjpQcm9jZXNzSGFzaE1hY0FkZHJlc3MgfSwKKyAgICB7ICJpZmNvbmZpZyIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0lmY29uZmlnIH0sCisjaWZkZWYgT1RETEwKKyAgICB7ICJpbnN0YW5jZSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0luc3RhbmNlIH0sCisgICAgeyAiaW5zdGFuY2VsaXN0IiwgJkludGVycHJldGVyOjpQcm9jZXNzSW5zdGFuY2VMaXN0IH0sCisjZW5kaWYKKyAgICB7ICJpcGFkZHIiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NJcEFkZHIgfSwKKyNpZm5kZWYgT1RETEwKKyAgICB7ICJpcG1hZGRyIiwgJkludGVycHJldGVyOjpQcm9jZXNzSXBNdWx0aWNhc3RBZGRyIH0sCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKyAgICB7ICJqb2luZXIiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NKb2luZXIgfSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRlRECisgICAgeyAiam9pbmVycG9ydCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0pvaW5lclBvcnQgfSwKKyNlbmRpZgorICAgIHsgImtleXNlcXVlbmNlIiwgJkludGVycHJldGVyOjpQcm9jZXNzS2V5U2VxdWVuY2UgfSwKKyAgICB7ICJsZWFkZXJkYXRhIiwgJkludGVycHJldGVyOjpQcm9jZXNzTGVhZGVyRGF0YSB9LAorI2lmIE9QRU5USFJFQURfRlRECisgICAgeyAibGVhZGVycGFydGl0aW9uaWQiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NMZWFkZXJQYXJ0aXRpb25JZCB9LAorICAgIHsgImxlYWRlcndlaWdodCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0xlYWRlcldlaWdodCB9LAorI2VuZGlmCisgICAgeyAibGlua3F1YWxpdHkiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NMaW5rUXVhbGl0eSB9LAorICAgIHsgIm1hc3RlcmtleSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc01hc3RlcktleSB9LAorICAgIHsgIm1vZGUiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NNb2RlIH0sCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIHsgIm5ldGRhdGFyZWdpc3RlciIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtEYXRhUmVnaXN0ZXIgfSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKyAgICB7ICJuZXR3b3JrZGlhZ25vc3RpYyIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtEaWFnbm9zdGljIH0sCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQworI2lmIE9QRU5USFJFQURfRlRECisgICAgeyAibmV0d29ya2lkdGltZW91dCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtJZFRpbWVvdXQgfSwKKyNlbmRpZgorICAgIHsgIm5ldHdvcmtuYW1lIiwgJkludGVycHJldGVyOjpQcm9jZXNzTmV0d29ya05hbWUgfSwKKyAgICB7ICJwYW5pZCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1BhbklkIH0sCisgICAgeyAicGFyZW50IiwgJkludGVycHJldGVyOjpQcm9jZXNzUGFyZW50IH0sCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB7ICJwYXJlbnRwcmlvcml0eSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1BhcmVudFByaW9yaXR5IH0sCisjZW5kaWYKKyNpZm5kZWYgT1RETEwKKyAgICB7ICJwaW5nIiwgJkludGVycHJldGVyOjpQcm9jZXNzUGluZyB9LAorI2VuZGlmCisgICAgeyAicG9sbHBlcmlvZCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1BvbGxQZXJpb2QgfSwKKyNpZm5kZWYgT1RETEwKKyAgICB7ICJwcm9taXNjdW91cyIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1Byb21pc2N1b3VzIH0sCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgeyAicHJlZml4IiwgJkludGVycHJldGVyOjpQcm9jZXNzUHJlZml4IH0sCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHsgInBza2MiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NQU0tjIH0sCisgICAgeyAicmVsZWFzZXJvdXRlcmlkIiwgJkludGVycHJldGVyOjpQcm9jZXNzUmVsZWFzZVJvdXRlcklkIH0sCisjZW5kaWYKKyAgICB7ICJyZXNldCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1Jlc2V0IH0sCisgICAgeyAicmxvYzE2IiwgJkludGVycHJldGVyOjpQcm9jZXNzUmxvYzE2IH0sCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIHsgInJvdXRlIiwgJkludGVycHJldGVyOjpQcm9jZXNzUm91dGUgfSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRlRECisgICAgeyAicm91dGVyIiwgJkludGVycHJldGVyOjpQcm9jZXNzUm91dGVyIH0sCisgICAgeyAicm91dGVyZG93bmdyYWRldGhyZXNob2xkIiwgJkludGVycHJldGVyOjpQcm9jZXNzUm91dGVyRG93bmdyYWRlVGhyZXNob2xkIH0sCisgICAgeyAicm91dGVycm9sZSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1JvdXRlclJvbGUgfSwKKyAgICB7ICJyb3V0ZXJzZWxlY3Rpb25qaXR0ZXIiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIgfSwKKyAgICB7ICJyb3V0ZXJ1cGdyYWRldGhyZXNob2xkIiwgJkludGVycHJldGVyOjpQcm9jZXNzUm91dGVyVXBncmFkZVRocmVzaG9sZCB9LAorI2VuZGlmCisgICAgeyAic2NhbiIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1NjYW4gfSwKKyAgICB7ICJzaW5nbGV0b24iLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NTaW5nbGV0b24gfSwKKyAgICB7ICJzdGF0ZSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1N0YXRlIH0sCisgICAgeyAidGhyZWFkIiwgJkludGVycHJldGVyOjpQcm9jZXNzVGhyZWFkIH0sCisgICAgeyAidHhwb3dlcm1heCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1R4UG93ZXJNYXggfSwKKyAgICB7ICJ2ZXJzaW9uIiwgJkludGVycHJldGVyOjpQcm9jZXNzVmVyc2lvbiB9LAorICAgIHsgIndoaXRlbGlzdCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1doaXRlbGlzdCB9LAorfTsKKworI2lmZGVmIE9URExMCit1aW50MzJfdCBvdFBsYXRSYW5kb21HZXQodm9pZCkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90KXJhbmQoKTsKK30KKyNlbHNlCit2b2lkIG90RnJlZU1lbW9yeShjb25zdCB2b2lkICopCit7CisgICAgLy8gTm8tb3Agb24gc3lzdGVtcyBydW5uaW5nIE9wZW5UaHJlYWQgaW4tcHJvYworfQorI2VuZGlmCisKK3RlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBvdFB0cgoreworICAgIFQgKnB0cjsKK3B1YmxpYzoKKyAgICBvdFB0cihUICpfcHRyKSA6IHB0cihfcHRyKSB7IH0KKyAgICB+b3RQdHIoKSB7IGlmIChwdHIpIHsgb3RGcmVlTWVtb3J5KHB0cik7IH0gfQorICAgIFQgKmdldCgpIGNvbnN0IHsgcmV0dXJuIHB0cjsgfQorICAgIG9wZXJhdG9yIFQgKigpIGNvbnN0IHsgcmV0dXJuIHB0cjsgfQorICAgIFQgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBwdHI7IH0KK307CisKK3R5cGVkZWYgb3RQdHI8Y29uc3Qgb3RNYWNDb3VudGVycz4gb3RNYWNDb3VudGVyc1B0cjsKK3R5cGVkZWYgb3RQdHI8Y29uc3Qgb3ROZXRpZkFkZHJlc3M+IG90TmV0aWZBZGRyZXNzUHRyOwordHlwZWRlZiBvdFB0cjxjb25zdCB1aW50OF90PiBvdEJ1ZmZlclB0cjsKK3R5cGVkZWYgb3RQdHI8Y29uc3QgY2hhcj4gb3RTdHJpbmdQdHI7CisKK0ludGVycHJldGVyOjpJbnRlcnByZXRlcihvdEluc3RhbmNlICphSW5zdGFuY2UpOgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVAKKyAgICBtQ29hcCgqdGhpcyksCisjZW5kaWYKKyAgICBtU2VydmVyKE5VTEwpLAorI2lmZGVmIE9URExMCisgICAgbUFwaUluc3RhbmNlKG90QXBpSW5pdCgpKSwKKyAgICBtSW5zdGFuY2VJbmRleCgwKSwKKyNlbHNlCisgICAgbUxlbmd0aCg4KSwKKyAgICBtQ291bnQoMSksCisgICAgbUludGVydmFsKDEwMDApLAorICAgIG1QaW5nVGltZXIoYUluc3RhbmNlLT5tSXA2Lm1UaW1lclNjaGVkdWxlciwgJkludGVycHJldGVyOjpzX0hhbmRsZVBpbmdUaW1lciwgdGhpcyksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorICAgIG1SZXNvbHZpbmdJblByb2dyZXNzKDApLAorI2VuZGlmCisjZW5kaWYKKyAgICBtSW5zdGFuY2UoYUluc3RhbmNlKQoreworI2lmZGVmIE9URExMCisgICAgYXNzZXJ0KG1BcGlJbnN0YW5jZSk7CisgICAgQ2FjaGVJbnN0YW5jZXMoKTsKKyNlbHNlCisgICAgbWVtc2V0KG1TbGFhY0FkZHJlc3NlcywgMCwgc2l6ZW9mKG1TbGFhY0FkZHJlc3NlcykpOworICAgIG90U2V0U3RhdGVDaGFuZ2VkQ2FsbGJhY2sobUluc3RhbmNlLCAmSW50ZXJwcmV0ZXI6OnNfSGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQsIHRoaXMpOworI2lmIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKyAgICBvdFRocmVhZFNldFJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2sobUluc3RhbmNlLCAmSW50ZXJwcmV0ZXI6OnNfSGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlLCB0aGlzKTsKKyNlbmRpZgorCisgICAgbUljbXBIYW5kbGVyLm1SZWNlaXZlQ2FsbGJhY2sgPSBJbnRlcnByZXRlcjo6c19IYW5kbGVJY21wUmVjZWl2ZTsKKyAgICBtSWNtcEhhbmRsZXIubUNvbnRleHQgICAgICAgICA9IHRoaXM7CisgICAgb3RJY21wNlJlZ2lzdGVySGFuZGxlcihtSW5zdGFuY2UsICZtSWNtcEhhbmRsZXIpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisgICAgbWVtc2V0KG1EaGNwQWRkcmVzc2VzLCAwLCBzaXplb2YobURoY3BBZGRyZXNzZXMpKTsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCisgICAgbWVtc2V0KG1SZXNvbHZpbmdIb3N0bmFtZSwgMCwgc2l6ZW9mKG1SZXNvbHZpbmdIb3N0bmFtZSkpOworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKworI2VuZGlmCit9CisKK2ludCBJbnRlcnByZXRlcjo6SGV4MkJpbihjb25zdCBjaGFyICphSGV4LCB1aW50OF90ICphQmluLCB1aW50MTZfdCBhQmluTGVuZ3RoKQoreworICAgIHNpemVfdCBoZXhMZW5ndGggPSBzdHJsZW4oYUhleCk7CisgICAgY29uc3QgY2hhciAqaGV4RW5kID0gYUhleCArIGhleExlbmd0aDsKKyAgICB1aW50OF90ICpjdXIgPSBhQmluOworICAgIHVpbnQ4X3QgbnVtQ2hhcnMgPSBoZXhMZW5ndGggJiAxOworICAgIHVpbnQ4X3QgYnl0ZSA9IDA7CisKKyAgICBpZiAoKGhleExlbmd0aCArIDEpIC8gMiA+IGFCaW5MZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgd2hpbGUgKGFIZXggPCBoZXhFbmQpCisgICAgeworICAgICAgICBpZiAoJ0EnIDw9ICphSGV4ICYmICphSGV4IDw9ICdGJykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAxMCArICgqYUhleCAtICdBJyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoJ2EnIDw9ICphSGV4ICYmICphSGV4IDw9ICdmJykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAxMCArICgqYUhleCAtICdhJyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoJzAnIDw9ICphSGV4ICYmICphSGV4IDw9ICc5JykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAqYUhleCAtICcwJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGFIZXgrKzsKKyAgICAgICAgbnVtQ2hhcnMrKzsKKworICAgICAgICBpZiAobnVtQ2hhcnMgPj0gMikKKyAgICAgICAgeworICAgICAgICAgICAgbnVtQ2hhcnMgPSAwOworICAgICAgICAgICAgKmN1cisrID0gYnl0ZTsKKyAgICAgICAgICAgIGJ5dGUgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSA8PD0gNDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGN1ciAtIGFCaW4pOworfQorCit2b2lkIEludGVycHJldGVyOjpBcHBlbmRSZXN1bHQob3RFcnJvciBhRXJyb3IpIGNvbnN0Cit7CisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJEb25lXHJcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkVycm9yICVkOiAlc1xyXG4iLCBhRXJyb3IsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhhRXJyb3IpKTsKKyAgICB9Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6Ok91dHB1dEJ5dGVzKGNvbnN0IHVpbnQ4X3QgKmFCeXRlcywgdWludDhfdCBhTGVuZ3RoKSBjb25zdAoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYUxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlMDJ4IiwgYUJ5dGVzW2ldKTsKKyAgICB9Cit9CisKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlBhcnNlTG9uZyhjaGFyICphcmd2LCBsb25nICZ2YWx1ZSkKK3sKKyAgICBjaGFyICplbmRwdHI7CisgICAgdmFsdWUgPSBzdHJ0b2woYXJndiwgJmVuZHB0ciwgMCk7CisgICAgcmV0dXJuICgqZW5kcHRyID09ICdcMCcpID8gT1RfRVJST1JfTk9ORSA6IE9UX0VSUk9SX1BBUlNFOworfQorCitvdEVycm9yIEludGVycHJldGVyOjpQYXJzZVVuc2lnbmVkTG9uZyhjaGFyICphcmd2LCB1bnNpZ25lZCBsb25nICZ2YWx1ZSkKK3sKKyAgICBjaGFyICplbmRwdHI7CisgICAgdmFsdWUgPSBzdHJ0b3VsKGFyZ3YsICZlbmRwdHIsIDApOworICAgIHJldHVybiAoKmVuZHB0ciA9PSAnXDAnKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9QQVJTRTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0hlbHAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJXNcclxuIiwgc0NvbW1hbmRzW2ldLm1OYW1lKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzQXV0b1N0YXJ0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKG90VGhyZWFkR2V0QXV0b1N0YXJ0KG1JbnN0YW5jZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgidHJ1ZVxyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiZmFsc2VcclxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJ0cnVlIikgPT0gMCkKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RUaHJlYWRTZXRBdXRvU3RhcnQobUluc3RhbmNlLCB0cnVlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJmYWxzZSIpID09IDApCisgICAgeworICAgICAgICBlcnJvciA9IG90VGhyZWFkU2V0QXV0b1N0YXJ0KG1JbnN0YW5jZSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICB9CisKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzQmxhY2tsaXN0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RNYWNCbGFja2xpc3RFbnRyeSBlbnRyeTsKKyAgICBpbnQgYXJnY3VyID0gMDsKKyAgICB1aW50OF90IGV4dEFkZHJbOF07CisKKyAgICBpZiAoYXJnY3VyID49IGFyZ2MpCisgICAgeworICAgICAgICBpZiAob3RMaW5rSXNCbGFja2xpc3RFbmFibGVkKG1JbnN0YW5jZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRW5hYmxlZFxyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRGlzYWJsZWRcclxuIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3RMaW5rR2V0QmxhY2tsaXN0RW50cnkobUluc3RhbmNlLCBpLCAmZW50cnkpICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlbnRyeS5tVmFsaWQgPT0gZmFsc2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE91dHB1dEJ5dGVzKGVudHJ5Lm1FeHRBZGRyZXNzLm04LCBPVF9FWFRfQUREUkVTU19TSVpFKTsKKworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYXJnY3VyXSwgImFkZCIpID09IDApCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoKythcmdjdXIgPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KEhleDJCaW4oYXJndlthcmdjdXJdLCBleHRBZGRyLCBzaXplb2YoZXh0QWRkcikpID09IHNpemVvZihleHRBZGRyKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgb3RMaW5rQWRkQmxhY2tsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcik7CisgICAgICAgIFZlcmlmeU9yRXhpdChvdExpbmtBZGRCbGFja2xpc3QobUluc3RhbmNlLCBleHRBZGRyKSA9PSBPVF9FUlJPUl9OT05FLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYXJnY3VyXSwgImNsZWFyIikgPT0gMCkKKyAgICB7CisgICAgICAgIG90TGlua0NsZWFyQmxhY2tsaXN0KG1JbnN0YW5jZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJkaXNhYmxlIikgPT0gMCkKKyAgICB7CisgICAgICAgIG90TGlua1NldEJsYWNrbGlzdEVuYWJsZWQobUluc3RhbmNlLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJlbmFibGUiKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RMaW5rU2V0QmxhY2tsaXN0RW5hYmxlZChtSW5zdGFuY2UsIHRydWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlthcmdjdXJdLCAicmVtb3ZlIikgPT0gMCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCgrK2FyZ2N1ciA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBWZXJpZnlPckV4aXQoSGV4MkJpbihhcmd2W2FyZ2N1cl0sIGV4dEFkZHIsIHNpemVvZihleHRBZGRyKSkgPT0gc2l6ZW9mKGV4dEFkZHIpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgb3RMaW5rUmVtb3ZlQmxhY2tsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcik7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NCdWZmZXJJbmZvKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RCdWZmZXJJbmZvIGJ1ZmZlckluZm87CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKKworICAgIG90TWVzc2FnZUdldEJ1ZmZlckluZm8obUluc3RhbmNlLCAmYnVmZmVySW5mbyk7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInRvdGFsOiAlZFxyXG4iLCBidWZmZXJJbmZvLm1Ub3RhbEJ1ZmZlcnMpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiZnJlZTogJWRcclxuIiwgYnVmZmVySW5mby5tRnJlZUJ1ZmZlcnMpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiNmxvIHNlbmQ6ICVkICVkXHJcbiIsIGJ1ZmZlckluZm8ubTZsb1NlbmRNZXNzYWdlcywgYnVmZmVySW5mby5tNmxvU2VuZEJ1ZmZlcnMpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiNmxvIHJlYXM6ICVkICVkXHJcbiIsIGJ1ZmZlckluZm8ubTZsb1JlYXNzZW1ibHlNZXNzYWdlcywgYnVmZmVySW5mby5tNmxvUmVhc3NlbWJseUJ1ZmZlcnMpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiaXA2OiAlZCAlZFxyXG4iLCBidWZmZXJJbmZvLm1JcDZNZXNzYWdlcywgYnVmZmVySW5mby5tSXA2QnVmZmVycyk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJtcGw6ICVkICVkXHJcbiIsIGJ1ZmZlckluZm8ubU1wbE1lc3NhZ2VzLCBidWZmZXJJbmZvLm1NcGxCdWZmZXJzKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIm1sZTogJWQgJWRcclxuIiwgYnVmZmVySW5mby5tTWxlTWVzc2FnZXMsIGJ1ZmZlckluZm8ubU1sZUJ1ZmZlcnMpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiYXJwOiAlZCAlZFxyXG4iLCBidWZmZXJJbmZvLm1BcnBNZXNzYWdlcywgYnVmZmVySW5mby5tQXJwQnVmZmVycyk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJjb2FwOiAlZCAlZFxyXG4iLCBidWZmZXJJbmZvLm1Db2FwTWVzc2FnZXMsIGJ1ZmZlckluZm8ubUNvYXBCdWZmZXJzKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImNvYXAgc2VjdXJlOiAlZCAlZFxyXG4iLCBidWZmZXJJbmZvLm1Db2FwU2VjdXJlTWVzc2FnZXMsIGJ1ZmZlckluZm8ubUNvYXBTZWN1cmVCdWZmZXJzKTsKKworICAgIEFwcGVuZFJlc3VsdChPVF9FUlJPUl9OT05FKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0NoYW5uZWwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RMaW5rR2V0Q2hhbm5lbChtSW5zdGFuY2UpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBlcnJvciA9IG90TGlua1NldENoYW5uZWwobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NDaGlsZChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90Q2hpbGRJbmZvIGNoaWxkSW5mbzsKKyAgICB1aW50OF90IG1heENoaWxkcmVuOworICAgIGxvbmcgdmFsdWU7CisgICAgYm9vbCBpc1RhYmxlID0gZmFsc2U7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgaWYgKHN0cmNtcChhcmd2WzBdLCAibGlzdCIpID09IDAgfHwgKGlzVGFibGUgPSAoc3RyY21wKGFyZ3ZbMF0sICJ0YWJsZSIpID09IDApKSkKKyAgICB7CisgICAgICAgIGlmIChpc1RhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgSUQgIHwgUkxPQzE2IHwgVGltZW91dCAgICB8IEFnZSAgICAgICAgfCBMUSBJbiB8IENfVk4gfFJ8U3xEfE58IEV4dGVuZGVkIE1BQyAgICAgfFxyXG4iKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiKy0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0rLSstKy0rLSstLS0tLS0tLS0tLS0tLS0tLS0rXHJcbiIpOworICAgICAgICB9CisKKyAgICAgICAgbWF4Q2hpbGRyZW4gPSBvdFRocmVhZEdldE1heEFsbG93ZWRDaGlsZHJlbihtSW5zdGFuY2UpOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1heENoaWxkcmVuIDsgaSsrKQorICAgICAgICB7CisKKyAgICAgICAgICAgIHN3aXRjaCAob3RUaHJlYWRHZXRDaGlsZEluZm9CeUluZGV4KG1JbnN0YW5jZSwgaSwgJmNoaWxkSW5mbykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE9UX0VSUk9SX05PTkU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1RfRVJST1JfTk9UX0ZPVU5EOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoaWxkSW5mby5tVGltZW91dCA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGlzVGFibGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTNkICIsIGNoaWxkSW5mby5tQ2hpbGRJZCk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAweCUwNHggIiwgY2hpbGRJbmZvLm1SbG9jMTYpOworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTEwZCAiLCBjaGlsZEluZm8ubVRpbWVvdXQpOworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTEwZCAiLCBjaGlsZEluZm8ubUFnZSk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAlNWQgIiwgY2hpbGRJbmZvLm1MaW5rUXVhbGl0eUluKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8ICU0ZCAiLCBjaGlsZEluZm8ubU5ldHdvcmtEYXRhVmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCUxZCIsIGNoaWxkSW5mby5tUnhPbldoZW5JZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8JTFkIiwgY2hpbGRJbmZvLm1TZWN1cmVEYXRhUmVxdWVzdCk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCUxZCIsIGNoaWxkSW5mby5tRnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8JTFkIiwgY2hpbGRJbmZvLm1GdWxsTmV0d29ya0RhdGEpOworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgIik7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBzaXplb2YoY2hpbGRJbmZvLm1FeHRBZGRyZXNzKTsgaisrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiUwMngiLCBjaGlsZEluZm8ubUV4dEFkZHJlc3MubThbal0pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgfFxyXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZCAiLCBjaGlsZEluZm8ubUNoaWxkSWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkR2V0Q2hpbGRJbmZvQnlJZChtSW5zdGFuY2UsIHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZSksICZjaGlsZEluZm8pKTsKKworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiQ2hpbGQgSUQ6ICVkXHJcbiIsIGNoaWxkSW5mby5tQ2hpbGRJZCk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJSbG9jOiAlMDR4XHJcbiIsIGNoaWxkSW5mby5tUmxvYzE2KTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkV4dCBBZGRyOiAiKTsKKworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgc2l6ZW9mKGNoaWxkSW5mby5tRXh0QWRkcmVzcyk7IGorKykKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJTAyeCIsIGNoaWxkSW5mby5tRXh0QWRkcmVzcy5tOFtqXSk7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJNb2RlOiAiKTsKKworICAgIGlmIChjaGlsZEluZm8ubVJ4T25XaGVuSWRsZSkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiciIpOworICAgIH0KKworICAgIGlmIChjaGlsZEluZm8ubVNlY3VyZURhdGFSZXF1ZXN0KQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJzIik7CisgICAgfQorCisgICAgaWYgKGNoaWxkSW5mby5tRnVsbEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJkIik7CisgICAgfQorCisgICAgaWYgKGNoaWxkSW5mby5tRnVsbE5ldHdvcmtEYXRhKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJuIik7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIk5ldCBEYXRhOiAlZFxyXG4iLCBjaGlsZEluZm8ubU5ldHdvcmtEYXRhVmVyc2lvbik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJUaW1lb3V0OiAlZFxyXG4iLCBjaGlsZEluZm8ubVRpbWVvdXQpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiQWdlOiAlZFxyXG4iLCBjaGlsZEluZm8ubUFnZSk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJMaW5rIFF1YWxpdHkgSW46ICVkXHJcbiIsIGNoaWxkSW5mby5tTGlua1F1YWxpdHlJbik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJSU1NJOiAlZFxyXG4iLCBjaGlsZEluZm8ubUF2ZXJhZ2VSc3NpKTsKKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzQ2hpbGRNYXgoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RUaHJlYWRHZXRNYXhBbGxvd2VkQ2hpbGRyZW4obUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkU2V0TWF4QWxsb3dlZENoaWxkcmVuKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NDaGlsZFRpbWVvdXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RUaHJlYWRHZXRDaGlsZFRpbWVvdXQobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RUaHJlYWRTZXRDaGlsZFRpbWVvdXQobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVAKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0NvYXAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIGVycm9yID0gbUNvYXAuUHJvY2VzcyhhcmdjLCBhcmd2KTsKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NDb250ZXh0SWRSZXVzZURlbGF5KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkXHJcbiIsIG90VGhyZWFkR2V0Q29udGV4dElkUmV1c2VEZWxheShtSW5zdGFuY2UpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RUaHJlYWRTZXRDb250ZXh0SWRSZXVzZURlbGF5KG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NDb3VudGVycyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIm1hY1xyXG4iKTsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJEb25lXHJcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJtYWMiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBvdE1hY0NvdW50ZXJzUHRyIGNvdW50ZXJzKG90TGlua0dldENvdW50ZXJzKG1JbnN0YW5jZSkpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJUeFRvdGFsOiAlZFxyXG4iLCBjb3VudGVycy0+bVR4VG90YWwpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgVHhVbmljYXN0OiAlZFxyXG4iLCBjb3VudGVycy0+bVR4VW5pY2FzdCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBUeEJyb2FkY2FzdDogJWRcclxuIiwgY291bnRlcnMtPm1UeEJyb2FkY2FzdCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBUeEFja1JlcXVlc3RlZDogJWRcclxuIiwgY291bnRlcnMtPm1UeEFja1JlcXVlc3RlZCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBUeEFja2VkOiAlZFxyXG4iLCBjb3VudGVycy0+bVR4QWNrZWQpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgVHhOb0Fja1JlcXVlc3RlZDogJWRcclxuIiwgY291bnRlcnMtPm1UeE5vQWNrUmVxdWVzdGVkKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFR4RGF0YTogJWRcclxuIiwgY291bnRlcnMtPm1UeERhdGEpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgVHhEYXRhUG9sbDogJWRcclxuIiwgY291bnRlcnMtPm1UeERhdGFQb2xsKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFR4QmVhY29uOiAlZFxyXG4iLCBjb3VudGVycy0+bVR4QmVhY29uKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFR4QmVhY29uUmVxdWVzdDogJWRcclxuIiwgY291bnRlcnMtPm1UeEJlYWNvblJlcXVlc3QpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgVHhPdGhlcjogJWRcclxuIiwgY291bnRlcnMtPm1UeE90aGVyKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFR4UmV0cnk6ICVkXHJcbiIsIGNvdW50ZXJzLT5tVHhSZXRyeSk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBUeEVyckNjYTogJWRcclxuIiwgY291bnRlcnMtPm1UeEVyckNjYSk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlJ4VG90YWw6ICVkXHJcbiIsIGNvdW50ZXJzLT5tUnhUb3RhbCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeFVuaWNhc3Q6ICVkXHJcbiIsIGNvdW50ZXJzLT5tUnhVbmljYXN0KTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4QnJvYWRjYXN0OiAlZFxyXG4iLCBjb3VudGVycy0+bVJ4QnJvYWRjYXN0KTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4RGF0YTogJWRcclxuIiwgY291bnRlcnMtPm1SeERhdGEpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgUnhEYXRhUG9sbDogJWRcclxuIiwgY291bnRlcnMtPm1SeERhdGFQb2xsKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4QmVhY29uOiAlZFxyXG4iLCBjb3VudGVycy0+bVJ4QmVhY29uKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4QmVhY29uUmVxdWVzdDogJWRcclxuIiwgY291bnRlcnMtPm1SeEJlYWNvblJlcXVlc3QpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgUnhPdGhlcjogJWRcclxuIiwgY291bnRlcnMtPm1SeE90aGVyKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4V2hpdGVsaXN0RmlsdGVyZWQ6ICVkXHJcbiIsIGNvdW50ZXJzLT5tUnhXaGl0ZWxpc3RGaWx0ZXJlZCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeERlc3RBZGRyRmlsdGVyZWQ6ICVkXHJcbiIsIGNvdW50ZXJzLT5tUnhEZXN0QWRkckZpbHRlcmVkKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4RHVwbGljYXRlZDogJWRcclxuIiwgY291bnRlcnMtPm1SeER1cGxpY2F0ZWQpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgUnhFcnJOb0ZyYW1lOiAlZFxyXG4iLCBjb3VudGVycy0+bVJ4RXJyTm9GcmFtZSk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeEVyck5vVW5rbm93bk5laWdoYm9yOiAlZFxyXG4iLCBjb3VudGVycy0+bVJ4RXJyVW5rbm93bk5laWdoYm9yKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4RXJySW52YWxpZFNyY0FkZHI6ICVkXHJcbiIsIGNvdW50ZXJzLT5tUnhFcnJJbnZhbGlkU3JjQWRkcik7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeEVyclNlYzogJWRcclxuIiwgY291bnRlcnMtPm1SeEVyclNlYyk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeEVyckZjczogJWRcclxuIiwgY291bnRlcnMtPm1SeEVyckZjcyk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeEVyck90aGVyOiAlZFxyXG4iLCBjb3VudGVycy0+bVJ4RXJyT3RoZXIpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzRGF0YXNldChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgZXJyb3IgPSBEYXRhc2V0OjpQcm9jZXNzKG1JbnN0YW5jZSwgYXJnYywgYXJndiwgKm1TZXJ2ZXIpOworICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0RlbGF5VGltZXJNaW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkXHJcbiIsIChvdERhdGFzZXRHZXREZWxheVRpbWVyTWluaW1hbChtSW5zdGFuY2UpIC8gMTAwMCkpOworICAgIH0KKyAgICBlbHNlIGlmIChhcmdjID09IDEpCisgICAgeworICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VVbnNpZ25lZExvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90RGF0YXNldFNldERlbGF5VGltZXJNaW5pbWFsKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlICogMTAwMCkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0Rpc2NvdmVyKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDMyX3Qgc2NhbkNoYW5uZWxzID0gMDsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPiAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBzY2FuQ2hhbm5lbHMgPSAxIDw8IHZhbHVlOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZERpc2NvdmVyKG1JbnN0YW5jZSwgc2NhbkNoYW5uZWxzLCBPVF9QQU5JRF9CUk9BRENBU1QsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW50ZXJwcmV0ZXI6OnNfSGFuZGxlQWN0aXZlU2NhblJlc3VsdCwgdGhpcykpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCBKIHwgTmV0d29yayBOYW1lICAgICB8IEV4dGVuZGVkIFBBTiAgICAgfCBQQU4gIHwgTUFDIEFkZHJlc3MgICAgICB8IENoIHwgZEJtIHwgTFFJIHxcclxuIik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIrLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tKy0tLS0tK1xyXG4iKTsKKworICAgIHJldHVybjsKKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0RucyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgcG9ydCA9IE9UX0ROU19ERUZBVUxUX0ROU19TRVJWRVJfUE9SVDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIG90RG5zUXVlcnkgcXVlcnk7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgInJlc29sdmUiKSA9PSAwKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCFtUmVzb2x2aW5nSW5Qcm9ncmVzcywgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAxLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgICAgIFZlcmlmeU9yRXhpdChzdHJsZW4oYXJndlsxXSkgPCBPVF9ETlNfTUFYX0hPU1ROQU1FX0xFTkdUSCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgICAgIHN0cmNweShtUmVzb2x2aW5nSG9zdG5hbWUsIGFyZ3ZbMV0pOworCisgICAgICAgIG1lbXNldCgmbWVzc2FnZUluZm8sIDAsIHNpemVvZihtZXNzYWdlSW5mbykpOworICAgICAgICBtZXNzYWdlSW5mby5tSW50ZXJmYWNlSWQgPSBPVF9ORVRJRl9JTlRFUkZBQ0VfSURfVEhSRUFEOworCisgICAgICAgIGlmIChhcmdjID4gMikKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkuRnJvbVN0cmluZyhhcmd2WzJdKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVc2UgSVB2NiBhZGRyZXNzIG9mIGRlZmF1bHQgRE5TIHNlcnZlci4KKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLkZyb21TdHJpbmcoT1RfRE5TX0RFRkFVTFRfRE5TX1NFUlZFUl9JUCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZ2MgPiAzKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbM10sIHBvcnQpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KHN0YXRpY19jYXN0PHVpbnQxNl90Pihwb3J0KSk7CisKKyAgICAgICAgcXVlcnkubUhvc3RuYW1lICAgID0gbVJlc29sdmluZ0hvc3RuYW1lOworICAgICAgICBxdWVyeS5tTWVzc2FnZUluZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBvdE1lc3NhZ2VJbmZvICo+KCZtZXNzYWdlSW5mbyk7CisgICAgICAgIHF1ZXJ5Lm1Ob1JlY3Vyc2lvbiA9IGZhbHNlOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdERuc0NsaWVudFF1ZXJ5KG1JbnN0YW5jZSwgJnF1ZXJ5LCAmSW50ZXJwcmV0ZXI6OnNfSGFuZGxlRG5zUmVzcG9uc2UsIHRoaXMpKTsKKworICAgICAgICBtUmVzb2x2aW5nSW5Qcm9ncmVzcyA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OnNfSGFuZGxlRG5zUmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIGNvbnN0IGNoYXIgKmFIb3N0bmFtZSwgb3RJcDZBZGRyZXNzICphQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYVR0bCwgb3RFcnJvciBhUmVzdWx0KQoreworICAgIHN0YXRpY19jYXN0PEludGVycHJldGVyICo+KGFDb250ZXh0KS0+SGFuZGxlRG5zUmVzcG9uc2UoYUhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PElwNjo6QWRkcmVzcyAqPihhQWRkcmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVHRsLCBhUmVzdWx0KTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6SGFuZGxlRG5zUmVzcG9uc2UoY29uc3QgY2hhciAqYUhvc3RuYW1lLCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzLCB1aW50MzJfdCBhVHRsLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJETlMgcmVzcG9uc2UgZm9yICVzIC0gIiwgYUhvc3RuYW1lKTsKKworICAgIGlmIChhUmVzdWx0ID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlsleDoleDoleDoleDoleDoleDoleDoleF0gVFRMOiAlZFxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhQWRkcmVzcy5tRmllbGRzLm0xNlswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFBZGRyZXNzLm1GaWVsZHMubTE2WzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYUFkZHJlc3MubUZpZWxkcy5tMTZbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhQWRkcmVzcy5tRmllbGRzLm0xNlszXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFBZGRyZXNzLm1GaWVsZHMubTE2WzRdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYUFkZHJlc3MubUZpZWxkcy5tMTZbNV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhQWRkcmVzcy5tRmllbGRzLm0xNls2XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFBZGRyZXNzLm1GaWVsZHMubTE2WzddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUdGwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBBcHBlbmRSZXN1bHQoYVJlc3VsdCk7CisgICAgfQorCisgICAgbVJlc29sdmluZ0luUHJvZ3Jlc3MgPSBmYWxzZTsKK30KKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NFaWRDYWNoZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RWlkQ2FjaGVFbnRyeSBlbnRyeTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgOyBpKyspCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KG90VGhyZWFkR2V0RWlkQ2FjaGVFbnRyeShtSW5zdGFuY2UsIGksICZlbnRyeSkpOworCisgICAgICAgIGlmIChlbnRyeS5tVmFsaWQgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIleDoleDoleDoleDoleDoleDoleDoleCAlMDR4XHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGVudHJ5Lm1UYXJnZXQubUZpZWxkcy5tMTZbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihlbnRyeS5tVGFyZ2V0Lm1GaWVsZHMubTE2WzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoZW50cnkubVRhcmdldC5tRmllbGRzLm0xNlsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGVudHJ5Lm1UYXJnZXQubUZpZWxkcy5tMTZbM10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihlbnRyeS5tVGFyZ2V0Lm1GaWVsZHMubTE2WzRdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoZW50cnkubVRhcmdldC5tRmllbGRzLm0xNls1XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGVudHJ5Lm1UYXJnZXQubUZpZWxkcy5tMTZbNl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihlbnRyeS5tVGFyZ2V0Lm1GaWVsZHMubTE2WzddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lm1SbG9jMTYpOworICAgIH0KKworZXhpdDoKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworICAgIEFwcGVuZFJlc3VsdChPVF9FUlJPUl9OT05FKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0V1aTY0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFeHRBZGRyZXNzIGV4dEFkZHJlc3M7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA9PSAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90TGlua0dldEZhY3RvcnlBc3NpZ25lZEllZWVFdWk2NChtSW5zdGFuY2UsICZleHRBZGRyZXNzKTsKKyAgICBPdXRwdXRCeXRlcyhleHRBZGRyZXNzLm04LCBPVF9FWFRfQUREUkVTU19TSVpFKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKworZXhpdDoKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0V4dEFkZHJlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBvdEJ1ZmZlclB0ciBleHRBZGRyZXNzKG90TGlua0dldEV4dGVuZGVkQWRkcmVzcyhtSW5zdGFuY2UpKTsKKyAgICAgICAgT3V0cHV0Qnl0ZXMoZXh0QWRkcmVzcywgT1RfRVhUX0FERFJFU1NfU0laRSk7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdEV4dEFkZHJlc3MgZXh0QWRkcmVzczsKKworICAgICAgICBWZXJpZnlPckV4aXQoSGV4MkJpbihhcmd2WzBdLCBleHRBZGRyZXNzLm04LCBzaXplb2Yob3RFeHRBZGRyZXNzKSkgPj0gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgZXJyb3IgPSBvdExpbmtTZXRFeHRlbmRlZEFkZHJlc3MobUluc3RhbmNlLCAmZXh0QWRkcmVzcyk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKKyNpZmRlZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzRXhpdChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGV4aXQoMCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKK30KKyNlbmRpZgorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzRXh0UGFuSWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBvdEJ1ZmZlclB0ciBleHRQYW5JZChvdFRocmVhZEdldEV4dGVuZGVkUGFuSWQobUluc3RhbmNlKSk7CisgICAgICAgIE91dHB1dEJ5dGVzKGV4dFBhbklkLCBPVF9FWFRfUEFOX0lEX1NJWkUpOworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWludDhfdCBleHRQYW5JZFs4XTsKKworICAgICAgICBWZXJpZnlPckV4aXQoSGV4MkJpbihhcmd2WzBdLCBleHRQYW5JZCwgc2l6ZW9mKGV4dFBhbklkKSkgPj0gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgZXJyb3IgPSBvdFRocmVhZFNldEV4dGVuZGVkUGFuSWQobUluc3RhbmNlLCBleHRQYW5JZCk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NGYWN0b3J5UmVzZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEluc3RhbmNlRmFjdG9yeVJlc2V0KG1JbnN0YW5jZSk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0hhc2hNYWNBZGRyZXNzKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFeHRBZGRyZXNzIGhhc2hNYWNBZGRyZXNzOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdExpbmtHZXRKb2luZXJJZChtSW5zdGFuY2UsICZoYXNoTWFjQWRkcmVzcyk7CisgICAgT3V0cHV0Qnl0ZXMoaGFzaE1hY0FkZHJlc3MubTgsIE9UX0VYVF9BRERSRVNTX1NJWkUpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzSWZjb25maWcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBpZiAob3RJcDZJc0VuYWJsZWQobUluc3RhbmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ1cFxyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiZG93blxyXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInVwIikgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNlNldEVuYWJsZWQobUluc3RhbmNlLCB0cnVlKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiZG93biIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZTZXRFbmFibGVkKG1JbnN0YW5jZSwgZmFsc2UpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKworb3RFcnJvciBJbnRlcnByZXRlcjo6UHJvY2Vzc0lwQWRkckFkZChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgb3ROZXRpZkFkZHJlc3MgYUFkZHJlc3M7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlswXSwgJmFBZGRyZXNzLm1BZGRyZXNzKSk7CisgICAgYUFkZHJlc3MubVByZWZpeExlbmd0aCA9IDY0OworICAgIGFBZGRyZXNzLm1QcmVmZXJyZWQgPSB0cnVlOworICAgIGFBZGRyZXNzLm1WYWxpZCA9IHRydWU7CisgICAgZXJyb3IgPSBvdElwNkFkZFVuaWNhc3RBZGRyZXNzKG1JbnN0YW5jZSwgJmFBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NJcEFkZHJEZWwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIHN0cnVjdCBvdElwNkFkZHJlc3MgYWRkcmVzczsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2WzBdLCAmYWRkcmVzcykpOworICAgIGVycm9yID0gb3RJcDZSZW1vdmVVbmljYXN0QWRkcmVzcyhtSW5zdGFuY2UsICZhZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NJcEFkZHIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBvdE5ldGlmQWRkcmVzc1B0ciB1bmljYXN0QWRkcnMob3RJcDZHZXRVbmljYXN0QWRkcmVzc2VzKG1JbnN0YW5jZSkpOworCisgICAgICAgIGZvciAoY29uc3Qgb3ROZXRpZkFkZHJlc3MgKmFkZHIgPSB1bmljYXN0QWRkcnM7IGFkZHI7IGFkZHIgPSBhZGRyLT5tTmV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIleDoleDoleDoleDoleDoleDoleDoleFxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbM10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbN10pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJhZGQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc0lwQWRkckFkZChhcmdjIC0gMSwgYXJndiArIDEpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgImRlbCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQcm9jZXNzSXBBZGRyRGVsKGFyZ2MgLSAxLCBhcmd2ICsgMSkpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKKyNpZm5kZWYgT1RETEwKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NJcE11bHRpY2FzdEFkZHJBZGQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIHN0cnVjdCBvdElwNkFkZHJlc3MgYWRkcmVzczsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2WzBdLCAmYWRkcmVzcykpOworICAgIGVycm9yID0gb3RJcDZTdWJzY3JpYmVNdWx0aWNhc3RBZGRyZXNzKG1JbnN0YW5jZSwgJmFkZHJlc3MpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBJbnRlcnByZXRlcjo6UHJvY2Vzc0lwTXVsdGljYXN0QWRkckRlbChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgc3RydWN0IG90SXA2QWRkcmVzcyBhZGRyZXNzOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFyZ3ZbMF0sICZhZGRyZXNzKSk7CisgICAgZXJyb3IgPSBvdElwNlVuc3Vic2NyaWJlTXVsdGljYXN0QWRkcmVzcyhtSW5zdGFuY2UsICZhZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NNdWx0aWNhc3RQcm9taXNjdW91cyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIGlmIChvdElwNklzTXVsdGljYXN0UHJvbWlzY3VvdXNFbmFibGVkKG1JbnN0YW5jZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRW5hYmxlZFxyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRGlzYWJsZWRcclxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChhcmd2WzBdLCAiZW5hYmxlIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RJcDZTZXRNdWx0aWNhc3RQcm9taXNjdW91c0VuYWJsZWQobUluc3RhbmNlLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgImRpc2FibGUiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBvdElwNlNldE11bHRpY2FzdFByb21pc2N1b3VzRW5hYmxlZChtSW5zdGFuY2UsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzSXBNdWx0aWNhc3RBZGRyKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgZm9yIChjb25zdCBvdE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqYWRkciA9IG90SXA2R2V0TXVsdGljYXN0QWRkcmVzc2VzKG1JbnN0YW5jZSk7IGFkZHI7IGFkZHIgPSBhZGRyLT5tTmV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIleDoleDoleDoleDoleDoleDoleDoleFxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbM10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbN10pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJhZGQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc0lwTXVsdGljYXN0QWRkckFkZChhcmdjIC0gMSwgYXJndiArIDEpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgImRlbCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQcm9jZXNzSXBNdWx0aWNhc3RBZGRyRGVsKGFyZ2MgLSAxLCBhcmd2ICsgMSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAicHJvbWlzY3VvdXMiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc011bHRpY2FzdFByb21pc2N1b3VzKGFyZ2MgLSAxLCBhcmd2ICsgMSkpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0tleVNlcXVlbmNlKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID09IDEgfHwgYXJnYyA9PSAyLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgImNvdW50ZXIiKSA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFyZ2MgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdFRocmVhZEdldEtleVNlcXVlbmNlQ291bnRlcihtSW5zdGFuY2UpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlsxXSwgdmFsdWUpKTsKKyAgICAgICAgICAgIG90VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJndWFyZHRpbWUiKSA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFyZ2MgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdFRocmVhZEdldEtleVN3aXRjaEd1YXJkVGltZShtSW5zdGFuY2UpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlsxXSwgdmFsdWUpKTsKKyAgICAgICAgICAgIG90VGhyZWFkU2V0S2V5U3dpdGNoR3VhcmRUaW1lKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0xlYWRlckRhdGEoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIG90TGVhZGVyRGF0YSBsZWFkZXJEYXRhOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkR2V0TGVhZGVyRGF0YShtSW5zdGFuY2UsICZsZWFkZXJEYXRhKSk7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlBhcnRpdGlvbiBJRDogJXVcclxuIiwgbGVhZGVyRGF0YS5tUGFydGl0aW9uSWQpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiV2VpZ2h0aW5nOiAlZFxyXG4iLCBsZWFkZXJEYXRhLm1XZWlnaHRpbmcpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRGF0YSBWZXJzaW9uOiAlZFxyXG4iLCBsZWFkZXJEYXRhLm1EYXRhVmVyc2lvbik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJTdGFibGUgRGF0YSBWZXJzaW9uOiAlZFxyXG4iLCBsZWFkZXJEYXRhLm1TdGFibGVEYXRhVmVyc2lvbik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJMZWFkZXIgUm91dGVyIElEOiAlZFxyXG4iLCBsZWFkZXJEYXRhLm1MZWFkZXJSb3V0ZXJJZCk7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NMZWFkZXJQYXJ0aXRpb25JZChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIldVxyXG4iLCBvdFRocmVhZEdldExvY2FsTGVhZGVyUGFydGl0aW9uSWQobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZVVuc2lnbmVkTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBvdFRocmVhZFNldExvY2FsTGVhZGVyUGFydGl0aW9uSWQobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0xlYWRlcldlaWdodChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdFRocmVhZEdldExvY2FsTGVhZGVyV2VpZ2h0KG1JbnN0YW5jZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIG90VGhyZWFkU2V0TG9jYWxMZWFkZXJXZWlnaHQobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzTGlua1F1YWxpdHkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IGV4dEFkZHJlc3NbOF07CisgICAgdWludDhfdCBsaW5rUXVhbGl0eTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgVmVyaWZ5T3JFeGl0KEhleDJCaW4oYXJndlswXSwgZXh0QWRkcmVzcywgT1RfRVhUX0FERFJFU1NfU0laRSkgPj0gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoYXJnYyA9PSAxKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG90TGlua0dldEFzc2lnbkxpbmtRdWFsaXR5KG1JbnN0YW5jZSwgZXh0QWRkcmVzcywgJmxpbmtRdWFsaXR5KSA9PSBPVF9FUlJPUl9OT05FLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkXHJcbiIsIGxpbmtRdWFsaXR5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzFdLCB2YWx1ZSkpOworICAgICAgICBvdExpbmtTZXRBc3NpZ25MaW5rUXVhbGl0eShtSW5zdGFuY2UsIGV4dEFkZHJlc3MsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1BTS2MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90ICpjdXJyZW50UFNLYyA9IG90VGhyZWFkR2V0UFNLYyhtSW5zdGFuY2UpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgT1RfUFNLQ19NQVhfU0laRTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiUwMngiLCBjdXJyZW50UFNLY1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWludDhfdCBuZXdQU0tjW09UX1BTS0NfTUFYX1NJWkVdOworCisgICAgICAgIFZlcmlmeU9yRXhpdChIZXgyQmluKGFyZ3ZbMF0sIG5ld1BTS2MsIHNpemVvZihuZXdQU0tjKSkgPT0gT1RfUFNLQ19NQVhfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZFNldFBTS2MobUluc3RhbmNlLCBuZXdQU0tjKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc01hc3RlcktleShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG90QnVmZmVyUHRyIGtleShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4ob3RUaHJlYWRHZXRNYXN0ZXJLZXkobUluc3RhbmNlKSkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgT1RfTUFTVEVSX0tFWV9TSVpFOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJTAyeCIsIGtleVtpXSk7CisgICAgICAgIH0KKworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RNYXN0ZXJLZXkga2V5OworCisgICAgICAgIFZlcmlmeU9yRXhpdChIZXgyQmluKGFyZ3ZbMF0sIGtleS5tOCwgc2l6ZW9mKGtleS5tOCkpID09IE9UX01BU1RFUl9LRVlfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZFNldE1hc3RlcktleShtSW5zdGFuY2UsICZrZXkpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc01vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdExpbmtNb2RlQ29uZmlnIGxpbmtNb2RlOworCisgICAgbWVtc2V0KCZsaW5rTW9kZSwgMCwgc2l6ZW9mKG90TGlua01vZGVDb25maWcpKTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBsaW5rTW9kZSA9IG90VGhyZWFkR2V0TGlua01vZGUobUluc3RhbmNlKTsKKworICAgICAgICBpZiAobGlua01vZGUubVJ4T25XaGVuSWRsZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJyIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGlua01vZGUubVNlY3VyZURhdGFSZXF1ZXN0cykKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJzIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGlua01vZGUubURldmljZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiZCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpbmtNb2RlLm1OZXR3b3JrRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJuIik7CisgICAgICAgIH0KKworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChjaGFyICphcmcgPSBhcmd2WzBdOyAqYXJnICE9ICdcMCc7IGFyZysrKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKCphcmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICBsaW5rTW9kZS5tUnhPbldoZW5JZGxlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICAgICAgbGlua01vZGUubVNlY3VyZURhdGFSZXF1ZXN0cyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIGxpbmtNb2RlLm1EZXZpY2VUeXBlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgbGlua01vZGUubU5ldHdvcmtEYXRhID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkU2V0TGlua01vZGUobUluc3RhbmNlLCBsaW5rTW9kZSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtEYXRhUmVnaXN0ZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RCb3JkZXJSb3V0ZXJSZWdpc3RlcihtSW5zdGFuY2UpKTsKKworZXhpdDoKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKworI2lmIE9QRU5USFJFQURfRlRECit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzTmV0d29ya0lkVGltZW91dChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdFRocmVhZEdldE5ldHdvcmtJZFRpbWVvdXQobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RUaHJlYWRTZXROZXR3b3JrSWRUaW1lb3V0KG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtOYW1lKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgb3RTdHJpbmdQdHIgbmV0d29ya05hbWUob3RUaHJlYWRHZXROZXR3b3JrTmFtZShtSW5zdGFuY2UpKTsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlLipzXHJcbiIsIE9UX05FVFdPUktfTkFNRV9NQVhfU0laRSwgKGNvbnN0IGNoYXIgKiluZXR3b3JrTmFtZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZFNldE5ldHdvcmtOYW1lKG1JbnN0YW5jZSwgYXJndlswXSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUGFuSWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJTA0eFxyXG4iLCBvdExpbmtHZXRQYW5JZChtSW5zdGFuY2UpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBlcnJvciA9IG90TGlua1NldFBhbklkKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8b3RQYW5JZD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1BhcmVudChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90Um91dGVySW5mbyBwYXJlbnRJbmZvOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkR2V0UGFyZW50SW5mbyhtSW5zdGFuY2UsICZwYXJlbnRJbmZvKSk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJFeHQgQWRkcjogIik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihwYXJlbnRJbmZvLm1FeHRBZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlMDJ4IiwgcGFyZW50SW5mby5tRXh0QWRkcmVzcy5tOFtpXSk7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlJsb2M6ICV4XHJcbiIsIHBhcmVudEluZm8ubVJsb2MxNik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJMaW5rIFF1YWxpdHkgSW46ICVkXHJcbiIsIHBhcmVudEluZm8ubUxpbmtRdWFsaXR5SW4pOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiTGluayBRdWFsaXR5IE91dDogJWRcclxuIiwgcGFyZW50SW5mby5tTGlua1F1YWxpdHlPdXQpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiQWdlOiAlZFxyXG4iLCBwYXJlbnRJbmZvLm1BZ2UpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKworI2lmIE9QRU5USFJFQURfRlRECit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUGFyZW50UHJpb3JpdHkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RUaHJlYWRHZXRQYXJlbnRQcmlvcml0eShtSW5zdGFuY2UpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBlcnJvciA9IG90VGhyZWFkU2V0UGFyZW50UHJpb3JpdHkobUluc3RhbmNlLCBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZhbHVlKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBPVERMTAordm9pZCBJbnRlcnByZXRlcjo6c19IYW5kbGVJY21wUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdEljbXA2SGVhZGVyICphSWNtcEhlYWRlcikKK3sKKyAgICBzdGF0aWNfY2FzdDxJbnRlcnByZXRlciAqPihhQ29udGV4dCktPkhhbmRsZUljbXBSZWNlaXZlKCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpJY21wSGVhZGVyICo+KGFJY21wSGVhZGVyKSk7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OkhhbmRsZUljbXBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdEljbXA2SGVhZGVyICZhSWNtcEhlYWRlcikKK3sKKyAgICB1aW50MzJfdCB0aW1lc3RhbXAgPSAwOworCisgICAgVmVyaWZ5T3JFeGl0KGFJY21wSGVhZGVyLm1UeXBlID09IE9UX0lDTVA2X1RZUEVfRUNIT19SRVBMWSk7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkIGJ5dGVzIGZyb20gIiwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKSk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIleDoleDoleDoleDoleDoleDoleDoleCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNlsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbM10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzRdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls1XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbNl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzddKSk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCI6IGljbXBfc2VxPSVkIGhsaW09JWQiLCBIb3N0U3dhcDE2KGFJY21wSGVhZGVyLm1EYXRhLm0xNlsxXSksIGFNZXNzYWdlSW5mby5tSG9wTGltaXQpOworCisgICAgaWYgKGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZih1aW50MzJfdCksICZ0aW1lc3RhbXApID49CisgICAgICAgIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKHVpbnQzMl90KSkpCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiB0aW1lPSVkbXMiLCBUaW1lcjo6R2V0Tm93KCkgLSBIb3N0U3dhcDMyKHRpbWVzdGFtcCkpOworICAgIH0KKworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1BpbmcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IGluZGV4ID0gMTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgInN0b3AiKSA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKCFtUGluZ1RpbWVyLklzUnVubmluZygpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtUGluZ1RpbWVyLlN0b3AoKTsKKyAgICAgICAgfQorCisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoIW1QaW5nVGltZXIuSXNSdW5uaW5nKCksIGVycm9yID0gT1RfRVJST1JfQlVTWSk7CisKKyAgICBtZW1zZXQoJm1NZXNzYWdlSW5mbywgMCwgc2l6ZW9mKG1NZXNzYWdlSW5mbykpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5Gcm9tU3RyaW5nKGFyZ3ZbMF0pKTsKKyAgICBtTWVzc2FnZUluZm8ubUludGVyZmFjZUlkID0gT1RfTkVUSUZfSU5URVJGQUNFX0lEX1RIUkVBRDsKKworICAgIG1MZW5ndGggPSA4OworICAgIG1Db3VudCA9IDE7CisgICAgbUludGVydmFsID0gMTAwMDsKKworICAgIHdoaWxlIChpbmRleCA8IGFyZ2MpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbaW5kZXhdLCB2YWx1ZSkpOworCisgICAgICAgIHN3aXRjaCAoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbUxlbmd0aCA9ICh1aW50MTZfdCl2YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1Db3VudCA9ICh1aW50MTZfdCl2YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1JbnRlcnZhbCA9ICh1aW50MzJfdCl2YWx1ZTsKKyAgICAgICAgICAgIG1JbnRlcnZhbCA9IG1JbnRlcnZhbCAqIDEwMDA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4Kys7CisgICAgfQorCisgICAgSGFuZGxlUGluZ1RpbWVyKCk7CisKKyAgICByZXR1cm47CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6c19IYW5kbGVQaW5nVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVBpbmdUaW1lcigpOworfQorCit2b2lkIEludGVycHJldGVyOjpIYW5kbGVQaW5nVGltZXIoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQzMl90IHRpbWVzdGFtcCA9IEhvc3RTd2FwMzIoVGltZXI6OkdldE5vdygpKTsKKworICAgIG90TWVzc2FnZSAqbWVzc2FnZTsKKyAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICptZXNzYWdlSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IG90TWVzc2FnZUluZm8gKj4oJm1NZXNzYWdlSW5mbyk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBvdElwNk5ld01lc3NhZ2UobUluc3RhbmNlLCB0cnVlKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RNZXNzYWdlQXBwZW5kKG1lc3NhZ2UsICZ0aW1lc3RhbXAsIHNpemVvZih0aW1lc3RhbXApKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90TWVzc2FnZVNldExlbmd0aChtZXNzYWdlLCBtTGVuZ3RoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SWNtcDZTZW5kRWNob1JlcXVlc3QobUluc3RhbmNlLCBtZXNzYWdlLCBtZXNzYWdlSW5mbywgMSkpOworCisgICAgbUNvdW50LS07CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VGcmVlKG1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChtQ291bnQpCisgICAgeworICAgICAgICBtUGluZ1RpbWVyLlN0YXJ0KG1JbnRlcnZhbCk7CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NQb2xsUGVyaW9kKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkXHJcbiIsIChvdExpbmtHZXRQb2xsUGVyaW9kKG1JbnN0YW5jZSkgLyAxMDAwKSk7ICAvLyBtcy0+cworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIG90TGlua1NldFBvbGxQZXJpb2QobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUgKiAxMDAwKSk7ICAvLyBzLT5tcworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjaWZuZGVmIE9URExMCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUHJvbWlzY3VvdXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBpZiAob3RMaW5rSXNQcm9taXNjdW91cyhtSW5zdGFuY2UpICYmIG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMobUluc3RhbmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJFbmFibGVkXHJcbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJEaXNhYmxlZFxyXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJlbmFibGUiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBvdExpbmtTZXRQY2FwQ2FsbGJhY2sobUluc3RhbmNlLCAmc19IYW5kbGVMaW5rUGNhcFJlY2VpdmUsIHRoaXMpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90TGlua1NldFByb21pc2N1b3VzKG1JbnN0YW5jZSwgdHJ1ZSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiZGlzYWJsZSIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TGlua1NldFBjYXBDYWxsYmFjayhtSW5zdGFuY2UsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90TGlua1NldFByb21pc2N1b3VzKG1JbnN0YW5jZSwgZmFsc2UpKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpzX0hhbmRsZUxpbmtQY2FwUmVjZWl2ZShjb25zdCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8SW50ZXJwcmV0ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVMaW5rUGNhcFJlY2VpdmUoYUZyYW1lKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6SGFuZGxlTGlua1BjYXBSZWNlaXZlKGNvbnN0IG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0NDsgaSsrKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCI9Iik7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJbbGVuID0gJTN1XSIsIGFGcmFtZS0+bUxlbmd0aCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI4OyBpKyspCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIj0iKTsKKyAgICB9CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYUZyYW1lLT5tTGVuZ3RoOyBpICs9IDE2KQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8Iik7CisKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCAxNjsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSArIGogPCBhRnJhbWUtPm1MZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgJTAyWCIsIGFGcmFtZS0+bVBzZHVbaSArIGpdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAuLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8Iik7CisKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCAxNjsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSArIGogPCBhRnJhbWUtPm1MZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKDMxIDwgYUZyYW1lLT5tUHNkdVtpICsgal0gJiYgYUZyYW1lLT5tUHNkdVtpICsgal0gPCAxMjcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAlYyIsIGFGcmFtZS0+bVBzZHVbaSArIGpdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgPyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInxcclxuIik7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA4MzsgaSsrKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCItIik7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7Cit9CisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NQcmVmaXhBZGQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdEJvcmRlclJvdXRlckNvbmZpZyBjb25maWc7CisgICAgaW50IGFyZ2N1ciA9IDA7CisKKyAgICBtZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKG90Qm9yZGVyUm91dGVyQ29uZmlnKSk7CisKKyAgICBjaGFyICpwcmVmaXhMZW5ndGhTdHI7CisgICAgY2hhciAqZW5kcHRyOworCisgICAgaWYgKChwcmVmaXhMZW5ndGhTdHIgPSBzdHJjaHIoYXJndlthcmdjdXJdLCAnLycpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgICpwcmVmaXhMZW5ndGhTdHIrKyA9ICdcMCc7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2W2FyZ2N1cl0sICZjb25maWcubVByZWZpeC5tUHJlZml4KSk7CisKKyAgICBjb25maWcubVByZWZpeC5tTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RydG9sKHByZWZpeExlbmd0aFN0ciwgJmVuZHB0ciwgMCkpOworCisgICAgaWYgKCplbmRwdHIgIT0gJ1wwJykKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgYXJnY3VyKys7CisKKyAgICBmb3IgKDsgYXJnY3VyIDwgYXJnYzsgYXJnY3VyKyspCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbYXJnY3VyXSwgImhpZ2giKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb25maWcubVByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX0hJR0g7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYXJnY3VyXSwgIm1lZCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbmZpZy5tUHJlZmVyZW5jZSA9IE9UX1JPVVRFX1BSRUZFUkVOQ0VfTUVEOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJsb3ciKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb25maWcubVByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX0xPVzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY2hhciAqYXJnID0gYXJndlthcmdjdXJdOyAqYXJnICE9ICdcMCc7IGFyZysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoKmFyZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tUHJlZmVycmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLm1TbGFhYyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tRGhjcCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tQ29uZmlndXJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLm1EZWZhdWx0Um91dGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgJ28nOgorICAgICAgICAgICAgICAgICAgICBjb25maWcubU9uTWVzaCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tU3RhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGVycm9yID0gb3RCb3JkZXJSb3V0ZXJBZGRPbk1lc2hQcmVmaXgobUluc3RhbmNlLCAmY29uZmlnKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NQcmVmaXhSZW1vdmUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzdHJ1Y3Qgb3RJcDZQcmVmaXggcHJlZml4OworICAgIGludCBhcmdjdXIgPSAwOworCisgICAgbWVtc2V0KCZwcmVmaXgsIDAsIHNpemVvZihvdElwNlByZWZpeCkpOworCisgICAgY2hhciAqcHJlZml4TGVuZ3RoU3RyOworICAgIGNoYXIgKmVuZHB0cjsKKworICAgIGlmICgocHJlZml4TGVuZ3RoU3RyID0gc3RyY2hyKGFyZ3ZbYXJnY3VyXSwgJy8nKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICAqcHJlZml4TGVuZ3RoU3RyKysgPSAnXDAnOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlthcmdjdXJdLCAmcHJlZml4Lm1QcmVmaXgpKTsKKworICAgIHByZWZpeC5tTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RydG9sKHByZWZpeExlbmd0aFN0ciwgJmVuZHB0ciwgMCkpOworCisgICAgaWYgKCplbmRwdHIgIT0gJ1wwJykKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgZXJyb3IgPSBvdEJvcmRlclJvdXRlclJlbW92ZU9uTWVzaFByZWZpeChtSW5zdGFuY2UsICZwcmVmaXgpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NQcmVmaXhMaXN0KHZvaWQpCit7CisgICAgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgY29uZmlnOworCisgICAgd2hpbGUgKG90Qm9yZGVyUm91dGVyR2V0TmV4dE9uTWVzaFByZWZpeChtSW5zdGFuY2UsICZpdGVyYXRvciwgJmNvbmZpZykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJXg6JXg6JXg6JXg6Oi8lZCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihjb25maWcubVByZWZpeC5tUHJlZml4Lm1GaWVsZHMubTE2WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoY29uZmlnLm1QcmVmaXgubVByZWZpeC5tRmllbGRzLm0xNlsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGNvbmZpZy5tUHJlZml4Lm1QcmVmaXgubUZpZWxkcy5tMTZbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihjb25maWcubVByZWZpeC5tUHJlZml4Lm1GaWVsZHMubTE2WzNdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tUHJlZml4Lm1MZW5ndGgpOworCisgICAgICAgIGlmIChjb25maWcubVByZWZlcnJlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJwIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnLm1TbGFhYykKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJhIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnLm1EaGNwKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcubUNvbmZpZ3VyZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJjIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnLm1EZWZhdWx0Um91dGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiciIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmZpZy5tT25NZXNoKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIm8iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcubVN0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJzIik7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGNvbmZpZy5tUHJlZmVyZW5jZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE9UX1JPVVRFX1BSRUZFUkVOQ0VfTE9XOgorICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgbG93XHJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9ST1VURV9QUkVGRVJFTkNFX01FRDoKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiIG1lZFxyXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1RfUk9VVEVfUFJFRkVSRU5DRV9ISUdIOgorICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgaGlnaFxyXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NQcmVmaXgoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc1ByZWZpeExpc3QoKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiYWRkIikgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQcm9jZXNzUHJlZml4QWRkKGFyZ2MgLSAxLCBhcmd2ICsgMSkpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInJlbW92ZSIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc1ByZWZpeFJlbW92ZShhcmdjIC0gMSwgYXJndiArIDEpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NSZWxlYXNlUm91dGVySWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RUaHJlYWRSZWxlYXNlUm91dGVySWQobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpKTsKKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUmVzZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEluc3RhbmNlUmVzZXQobUluc3RhbmNlKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUmxvYzE2KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlMDR4XHJcbiIsIG90VGhyZWFkR2V0UmxvYzE2KG1JbnN0YW5jZSkpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRG9uZVxyXG4iKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorb3RFcnJvciBJbnRlcnByZXRlcjo6UHJvY2Vzc1JvdXRlQWRkKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFeHRlcm5hbFJvdXRlQ29uZmlnIGNvbmZpZzsKKyAgICBpbnQgYXJnY3VyID0gMDsKKworICAgIG1lbXNldCgmY29uZmlnLCAwLCBzaXplb2Yob3RFeHRlcm5hbFJvdXRlQ29uZmlnKSk7CisKKyAgICBjaGFyICpwcmVmaXhMZW5ndGhTdHI7CisgICAgY2hhciAqZW5kcHRyOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmICgocHJlZml4TGVuZ3RoU3RyID0gc3RyY2hyKGFyZ3ZbYXJnY3VyXSwgJy8nKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICAqcHJlZml4TGVuZ3RoU3RyKysgPSAnXDAnOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlthcmdjdXJdLCAmY29uZmlnLm1QcmVmaXgubVByZWZpeCkpOworCisgICAgY29uZmlnLm1QcmVmaXgubUxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0cnRvbChwcmVmaXhMZW5ndGhTdHIsICZlbmRwdHIsIDApKTsKKworICAgIGlmICgqZW5kcHRyICE9ICdcMCcpCisgICAgeworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworICAgIGFyZ2N1cisrOworCisgICAgZm9yICg7IGFyZ2N1ciA8IGFyZ2M7IGFyZ2N1cisrKQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJzIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnLm1TdGFibGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJoaWdoIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnLm1QcmVmZXJlbmNlID0gT1RfUk9VVEVfUFJFRkVSRU5DRV9ISUdIOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJtZWQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb25maWcubVByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX01FRDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndlthcmdjdXJdLCAibG93IikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnLm1QcmVmZXJlbmNlID0gT1RfUk9VVEVfUFJFRkVSRU5DRV9MT1c7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgfQorCisgICAgZXJyb3IgPSBvdEJvcmRlclJvdXRlckFkZFJvdXRlKG1JbnN0YW5jZSwgJmNvbmZpZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEludGVycHJldGVyOjpQcm9jZXNzUm91dGVSZW1vdmUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzdHJ1Y3Qgb3RJcDZQcmVmaXggcHJlZml4OworICAgIGludCBhcmdjdXIgPSAwOworCisgICAgbWVtc2V0KCZwcmVmaXgsIDAsIHNpemVvZihzdHJ1Y3Qgb3RJcDZQcmVmaXgpKTsKKyAgICBjaGFyICpwcmVmaXhMZW5ndGhTdHI7CisgICAgY2hhciAqZW5kcHRyOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmICgocHJlZml4TGVuZ3RoU3RyID0gc3RyY2hyKGFyZ3ZbYXJnY3VyXSwgJy8nKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICAqcHJlZml4TGVuZ3RoU3RyKysgPSAnXDAnOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlthcmdjdXJdLCAmcHJlZml4Lm1QcmVmaXgpKTsKKworICAgIHByZWZpeC5tTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RydG9sKHByZWZpeExlbmd0aFN0ciwgJmVuZHB0ciwgMCkpOworCisgICAgaWYgKCplbmRwdHIgIT0gJ1wwJykKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgZXJyb3IgPSBvdEJvcmRlclJvdXRlclJlbW92ZVJvdXRlKG1JbnN0YW5jZSwgJnByZWZpeCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUm91dGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJhZGQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFByb2Nlc3NSb3V0ZUFkZChhcmdjIC0gMSwgYXJndiArIDEpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJyZW1vdmUiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFByb2Nlc3NSb3V0ZVJlbW92ZShhcmdjIC0gMSwgYXJndiArIDEpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NSb3V0ZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdFJvdXRlckluZm8gcm91dGVySW5mbzsKKyAgICBsb25nIHZhbHVlOworICAgIGJvb2wgaXNUYWJsZSA9IGZhbHNlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgImxpc3QiKSA9PSAwIHx8IChpc1RhYmxlID0gKHN0cmNtcChhcmd2WzBdLCAidGFibGUiKSA9PSAwKSkpCisgICAgeworICAgICAgICBpZiAoaXNUYWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8IElEIHwgUkxPQzE2IHwgTmV4dCBIb3AgfCBQYXRoIENvc3QgfCBMUSBJbiB8IExRIE91dCB8IEFnZSB8IEV4dGVuZGVkIE1BQyAgICAgfFxyXG4iKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLStcclxuIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3RUaHJlYWRHZXRSb3V0ZXJJbmZvKG1JbnN0YW5jZSwgaSwgJnJvdXRlckluZm8pICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocm91dGVySW5mby5tQWxsb2NhdGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpc1RhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8ICUyZCAiLCByb3V0ZXJJbmZvLm1Sb3V0ZXJJZCk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAweCUwNHggIiwgcm91dGVySW5mby5tUmxvYzE2KTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8ICU4ZCAiLCByb3V0ZXJJbmZvLm1OZXh0SG9wKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8ICU5ZCAiLCByb3V0ZXJJbmZvLm1QYXRoQ29zdCk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAlNWQgIiwgcm91dGVySW5mby5tTGlua1F1YWxpdHlJbik7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAlNmQgIiwgcm91dGVySW5mby5tTGlua1F1YWxpdHlPdXQpOworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTNkICIsIHJvdXRlckluZm8ubUFnZSk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAiKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHNpemVvZihyb3V0ZXJJbmZvLm1FeHRBZGRyZXNzKTsgaisrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiUwMngiLCByb3V0ZXJJbmZvLm1FeHRBZGRyZXNzLm04W2pdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiIHxcclxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWQgIiwgaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZEdldFJvdXRlckluZm8obUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4odmFsdWUpLCAmcm91dGVySW5mbykpOworCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJBbGxvYzogJWRcclxuIiwgcm91dGVySW5mby5tQWxsb2NhdGVkKTsKKworICAgIGlmIChyb3V0ZXJJbmZvLm1BbGxvY2F0ZWQpCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlJvdXRlciBJRDogJWRcclxuIiwgcm91dGVySW5mby5tUm91dGVySWQpOworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlJsb2M6ICUwNHhcclxuIiwgcm91dGVySW5mby5tUmxvYzE2KTsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJOZXh0IEhvcDogJTA0eFxyXG4iLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4ocm91dGVySW5mby5tTmV4dEhvcCkgPDwgMTApOworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkxpbms6ICVkXHJcbiIsIHJvdXRlckluZm8ubUxpbmtFc3RhYmxpc2hlZCk7CisKKyAgICAgICAgaWYgKHJvdXRlckluZm8ubUxpbmtFc3RhYmxpc2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJFeHQgQWRkcjogIik7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgc2l6ZW9mKHJvdXRlckluZm8ubUV4dEFkZHJlc3MpOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlMDJ4Iiwgcm91dGVySW5mby5tRXh0QWRkcmVzcy5tOFtqXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJDb3N0OiAlZFxyXG4iLCByb3V0ZXJJbmZvLm1QYXRoQ29zdCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkxpbmsgUXVhbGl0eSBJbjogJWRcclxuIiwgcm91dGVySW5mby5tTGlua1F1YWxpdHlJbik7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkxpbmsgUXVhbGl0eSBPdXQ6ICVkXHJcbiIsIHJvdXRlckluZm8ubUxpbmtRdWFsaXR5T3V0KTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiQWdlOiAlZFxyXG4iLCByb3V0ZXJJbmZvLm1BZ2UpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RUaHJlYWRHZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RUaHJlYWRTZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUm91dGVyUm9sZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIGlmIChvdFRocmVhZElzUm91dGVyUm9sZUVuYWJsZWQobUluc3RhbmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJFbmFibGVkXHJcbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJEaXNhYmxlZFxyXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgImVuYWJsZSIpID09IDApCisgICAgeworICAgICAgICBvdFRocmVhZFNldFJvdXRlclJvbGVFbmFibGVkKG1JbnN0YW5jZSwgdHJ1ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiZGlzYWJsZSIpID09IDApCisgICAgeworICAgICAgICBvdFRocmVhZFNldFJvdXRlclJvbGVFbmFibGVkKG1JbnN0YW5jZSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUm91dGVyU2VsZWN0aW9uSml0dGVyKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkXHJcbiIsIG90VGhyZWFkR2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKG1JbnN0YW5jZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdCgwIDwgdmFsdWUgJiYgdmFsdWUgPCAyNTYsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICAgICAgb3RUaHJlYWRTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUm91dGVyVXBncmFkZVRocmVzaG9sZChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdFRocmVhZEdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RUaHJlYWRTZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1NjYW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MzJfdCBzY2FuQ2hhbm5lbHMgPSAwOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBpZiAoYXJnYyA+IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIHNjYW5DaGFubmVscyA9IDEgPDwgdmFsdWU7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8IEogfCBOZXR3b3JrIE5hbWUgICAgIHwgRXh0ZW5kZWQgUEFOICAgICB8IFBBTiAgfCBNQUMgQWRkcmVzcyAgICAgIHwgQ2ggfCBkQm0gfCBMUUkgfFxyXG4iKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIistLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rXHJcbiIpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdExpbmtBY3RpdmVTY2FuKG1JbnN0YW5jZSwgc2NhbkNoYW5uZWxzLCAwLCAmSW50ZXJwcmV0ZXI6OnNfSGFuZGxlQWN0aXZlU2NhblJlc3VsdCwgdGhpcykpOworCisgICAgcmV0dXJuOworCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK3ZvaWQgT1RDQUxMIEludGVycHJldGVyOjpzX0hhbmRsZUFjdGl2ZVNjYW5SZXN1bHQob3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0LCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxJbnRlcnByZXRlciAqPihhQ29udGV4dCktPkhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQoYVJlc3VsdCk7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OkhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQob3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0KQoreworICAgIGlmIChhUmVzdWx0ID09IE5VTEwpCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkRvbmVcclxuIik7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJWQgIiwgYVJlc3VsdC0+bUlzSm9pbmFibGUpOworCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8ICUtMTZzICIsIGFSZXN1bHQtPm1OZXR3b3JrTmFtZS5tOCk7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgIik7CisgICAgT3V0cHV0Qnl0ZXMoYVJlc3VsdC0+bUV4dGVuZGVkUGFuSWQubTgsIE9UX0VYVF9QQU5fSURfU0laRSk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgIik7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTA0eCB8ICIsIGFSZXN1bHQtPm1QYW5JZCk7CisgICAgT3V0cHV0Qnl0ZXMoYVJlc3VsdC0+bUV4dEFkZHJlc3MubTgsIE9UX0VYVF9BRERSRVNTX1NJWkUpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiIHwgJTJkICIsIGFSZXN1bHQtPm1DaGFubmVsKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTNkICIsIGFSZXN1bHQtPm1Sc3NpKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTNkIHxcclxuIiwgYVJlc3VsdC0+bUxxaSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzU2luZ2xldG9uKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAob3RUaHJlYWRJc1NpbmdsZXRvbihtSW5zdGFuY2UpKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ0cnVlXHJcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImZhbHNlXHJcbiIpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzU3RhdGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBzd2l0Y2ggKG90VGhyZWFkR2V0RGV2aWNlUm9sZShtSW5zdGFuY2UpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImRpc2FibGVkXHJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiZGV0YWNoZWRcclxuIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJjaGlsZFxyXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWYgT1BFTlRIUkVBRF9GVEQKKworICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgicm91dGVyXHJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImxlYWRlclxyXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImludmFsaWQgc3RhdGVcclxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJkZXRhY2hlZCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZEJlY29tZURldGFjaGVkKG1JbnN0YW5jZSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiY2hpbGQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RUaHJlYWRCZWNvbWVDaGlsZChtSW5zdGFuY2UpKTsKKyAgICAgICAgfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJyb3V0ZXIiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RUaHJlYWRCZWNvbWVSb3V0ZXIobUluc3RhbmNlKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJsZWFkZXIiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RUaHJlYWRCZWNvbWVMZWFkZXIobUluc3RhbmNlKSk7CisgICAgICAgIH0KKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1RocmVhZChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJzdGFydCIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RUaHJlYWRTZXRFbmFibGVkKG1JbnN0YW5jZSwgdHJ1ZSkpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInN0b3AiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkU2V0RW5hYmxlZChtSW5zdGFuY2UsIGZhbHNlKSk7CisgICAgfQorCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1R4UG93ZXJNYXgoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWQgZEJtXHJcbiIsIG90TGlua0dldE1heFRyYW5zbWl0UG93ZXIobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RMaW5rU2V0TWF4VHJhbnNtaXRQb3dlcihtSW5zdGFuY2UsIHN0YXRpY19jYXN0PGludDhfdD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1ZlcnNpb24oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdFN0cmluZ1B0ciB2ZXJzaW9uKG90R2V0VmVyc2lvblN0cmluZygpKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVzXHJcbiIsIChjb25zdCBjaGFyICopdmVyc2lvbik7CisgICAgQXBwZW5kUmVzdWx0KE9UX0VSUk9SX05PTkUpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0NvbW1pc3Npb25lcihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgInN0YXJ0IikgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvbW1pc3Npb25lclN0YXJ0KG1JbnN0YW5jZSkpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInN0b3AiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90Q29tbWlzc2lvbmVyU3RvcChtSW5zdGFuY2UpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJqb2luZXIiKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RFeHRBZGRyZXNzIGFkZHI7CisgICAgICAgIGNvbnN0IG90RXh0QWRkcmVzcyAqYWRkclB0cjsKKworICAgICAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDIsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIGlmIChzdHJjbXAoYXJndlsyXSwgIioiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBhZGRyUHRyID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChIZXgyQmluKGFyZ3ZbMl0sIGFkZHIubTgsIHNpemVvZihhZGRyKSkgPT0gc2l6ZW9mKGFkZHIpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGFkZHJQdHIgPSAmYWRkcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJjbXAoYXJndlsxXSwgImFkZCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAvLyBUaW1lb3V0IHBhcmFtZXRlciBpcyBvcHRpb25hbCAtIGlmIG5vdCBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0IHZhbHVlLgorICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0ga0RlZmF1bHRKb2luZXJUaW1lb3V0OworCisgICAgICAgICAgICBpZiAoYXJnYyA+IDQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlVW5zaWduZWRMb25nKGFyZ3ZbNF0sIHRpbWVvdXQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90Q29tbWlzc2lvbmVyQWRkSm9pbmVyKG1JbnN0YW5jZSwgYWRkclB0ciwgYXJndlszXSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRpbWVvdXQpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJyZW1vdmUiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RDb21taXNzaW9uZXJSZW1vdmVKb2luZXIobUluc3RhbmNlLCBhZGRyUHRyKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJwcm92aXNpb25pbmd1cmwiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90Q29tbWlzc2lvbmVyU2V0UHJvdmlzaW9uaW5nVXJsKG1JbnN0YW5jZSwgKGFyZ2MgPiAxKSA/IGFyZ3ZbMV0gOiBOVUxMKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiYW5ub3VuY2UiKSA9PSAwKQorICAgIHsKKyAgICAgICAgbG9uZyBtYXNrOworICAgICAgICBsb25nIGNvdW50OworICAgICAgICBsb25nIHBlcmlvZDsKKyAgICAgICAgb3RJcDZBZGRyZXNzIGFkZHJlc3M7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiA0LCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICAvLyBtYXNrCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlsxXSwgbWFzaykpOworCisgICAgICAgIC8vIGNvdW50CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlsyXSwgY291bnQpKTsKKworICAgICAgICAvLyBwZXJpb2QKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzNdLCBwZXJpb2QpKTsKKworICAgICAgICAvLyBkZXN0aW5hdGlvbgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2WzRdLCAmYWRkcmVzcykpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvbW1pc3Npb25lckFubm91bmNlQmVnaW4obUluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihtYXNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90Pihjb3VudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHBlcmlvZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJlc3MpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJlbmVyZ3kiKSA9PSAwKQorICAgIHsKKyAgICAgICAgbG9uZyBtYXNrOworICAgICAgICBsb25nIGNvdW50OworICAgICAgICBsb25nIHBlcmlvZDsKKyAgICAgICAgbG9uZyBzY2FuRHVyYXRpb247CisgICAgICAgIG90SXA2QWRkcmVzcyBhZGRyZXNzOworCisgICAgICAgIFZlcmlmeU9yRXhpdChhcmdjID4gNSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgLy8gbWFzaworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMV0sIG1hc2spKTsKKworICAgICAgICAvLyBjb3VudAorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMl0sIGNvdW50KSk7CisKKyAgICAgICAgLy8gcGVyaW9kCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlszXSwgcGVyaW9kKSk7CisKKyAgICAgICAgLy8gc2NhbiBkdXJhdGlvbgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbNF0sIHNjYW5EdXJhdGlvbikpOworCisgICAgICAgIC8vIGRlc3RpbmF0aW9uCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFyZ3ZbNV0sICZhZGRyZXNzKSk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90Q29tbWlzc2lvbmVyRW5lcmd5U2NhbihtSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1hc2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvdW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4ocGVyaW9kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4oc2NhbkR1cmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnByZXRlcjo6c19IYW5kbGVFbmVyZ3lSZXBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcykpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInBhbmlkIikgPT0gMCkKKyAgICB7CisgICAgICAgIGxvbmcgcGFuaWQ7CisgICAgICAgIGxvbmcgbWFzazsKKyAgICAgICAgb3RJcDZBZGRyZXNzIGFkZHJlc3M7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAzLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICAvLyBwYW5pZAorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMV0sIHBhbmlkKSk7CisKKyAgICAgICAgLy8gbWFzaworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMl0sIG1hc2spKTsKKworICAgICAgICAvLyBkZXN0aW5hdGlvbgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2WzNdLCAmYWRkcmVzcykpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvbW1pc3Npb25lclBhbklkUXVlcnkobUluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQxNl90PihwYW5pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1hc2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycHJldGVyOjpzX0hhbmRsZVBhbklkQ29uZmxpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcykpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgIm1nbXRnZXQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgdWludDhfdCB0bHZzWzMyXTsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKyAgICAgICAgaW50IGxlbmd0aCA9IDA7CisKKyAgICAgICAgZm9yICh1aW50OF90IGluZGV4ID0gMTsgaW5kZXggPCBhcmdjOyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIDwgc2l6ZW9mKHRsdnMpLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAibG9jYXRvciIpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGx2c1tsZW5ndGgrK10gPSBPVF9NRVNIQ09QX1RMVl9CT1JERVJfQUdFTlRfUkxPQzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgInNlc3Npb25pZCIpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGx2c1tsZW5ndGgrK10gPSBPVF9NRVNIQ09QX1RMVl9DT01NX1NFU1NJT05fSUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJzdGVlcmluZ2RhdGEiKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfU1RFRVJJTkdfREFUQTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgImpvaW5lcnVkcHBvcnQiKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfSk9JTkVSX1VEUF9QT1JUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiYmluYXJ5IikgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoKytpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8bG9uZz4oc3RybGVuKGFyZ3ZbaW5kZXhdKSArIDEpIC8gMjsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZSkgPD0gKHNpemVvZih0bHZzKSAtIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSksIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KEludGVycHJldGVyOjpIZXgyQmluKGFyZ3ZbaW5kZXhdLCB0bHZzICsgbGVuZ3RoLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4odmFsdWUpKSA+PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvbW1pc3Npb25lclNlbmRNZ210R2V0KG1JbnN0YW5jZSwgdGx2cywgc3RhdGljX2Nhc3Q8dWludDhfdD4obGVuZ3RoKSkpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgIm1nbXRzZXQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RDb21taXNzaW9uaW5nRGF0YXNldCBkYXRhc2V0OworICAgICAgICB1aW50OF90IHRsdnNbMzJdOworICAgICAgICBsb25nIHZhbHVlOworICAgICAgICBpbnQgbGVuZ3RoID0gMDsKKworICAgICAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIG1lbXNldCgmZGF0YXNldCwgMCwgc2l6ZW9mKGRhdGFzZXQpKTsKKworICAgICAgICBmb3IgKHVpbnQ4X3QgaW5kZXggPSAxOyBpbmRleCA8IGFyZ2M7IGluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgPCBzaXplb2YodGx2cyksIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAgICAgICAgIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJsb2NhdG9yIikgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoKytpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgICAgIGRhdGFzZXQubUlzTG9jYXRvclNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEludGVycHJldGVyOjpQYXJzZUxvbmcoYXJndltpbmRleF0sIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgZGF0YXNldC5tTG9jYXRvciA9IHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJzZXNzaW9uaWQiKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgrK2luZGV4IDwgYXJnYywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAgICAgZGF0YXNldC5tSXNTZXNzaW9uSWRTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbaW5kZXhdLCB2YWx1ZSkpOworICAgICAgICAgICAgICAgIGRhdGFzZXQubVNlc3Npb25JZCA9IHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJzdGVlcmluZ2RhdGEiKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgrK2luZGV4IDwgYXJnYywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAgICAgZGF0YXNldC5tSXNTdGVlcmluZ0RhdGFTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oKHN0cmxlbihhcmd2W2luZGV4XSkgKyAxKSAvIDIpOworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgPD0gT1RfU1RFRVJJTkdfREFUQV9NQVhfTEVOR1RILCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChJbnRlcnByZXRlcjo6SGV4MkJpbihhcmd2W2luZGV4XSwgZGF0YXNldC5tU3RlZXJpbmdEYXRhLm04LCBzdGF0aWNfY2FzdDx1aW50MTZfdD4obGVuZ3RoKSkgPj0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAgICAgZGF0YXNldC5tU3RlZXJpbmdEYXRhLm1MZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50OF90PihsZW5ndGgpOworICAgICAgICAgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJqb2luZXJ1ZHBwb3J0IikgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoKytpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgICAgIGRhdGFzZXQubUlzSm9pbmVyVWRwUG9ydFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEludGVycHJldGVyOjpQYXJzZUxvbmcoYXJndltpbmRleF0sIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgZGF0YXNldC5tSm9pbmVyVWRwUG9ydCA9IHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJiaW5hcnkiKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgrK2luZGV4IDwgYXJnYywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50Pigoc3RybGVuKGFyZ3ZbaW5kZXhdKSArIDEpIC8gMik7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSA8PSBzaXplb2YodGx2cyksIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KEludGVycHJldGVyOjpIZXgyQmluKGFyZ3ZbaW5kZXhdLCB0bHZzLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4obGVuZ3RoKSkgPj0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvbW1pc3Npb25lclNlbmRNZ210U2V0KG1JbnN0YW5jZSwgJmRhdGFzZXQsIHRsdnMsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCkpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJzZXNzaW9uaWQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdENvbW1pc3Npb25lckdldFNlc3Npb25JZChtSW5zdGFuY2UpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBPVENBTEwgSW50ZXJwcmV0ZXI6OnNfSGFuZGxlRW5lcmd5UmVwb3J0KHVpbnQzMl90IGFDaGFubmVsTWFzaywgY29uc3QgdWludDhfdCAqYUVuZXJneUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhRW5lcmd5TGlzdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxJbnRlcnByZXRlciAqPihhQ29udGV4dCktPkhhbmRsZUVuZXJneVJlcG9ydChhQ2hhbm5lbE1hc2ssIGFFbmVyZ3lMaXN0LCBhRW5lcmd5TGlzdExlbmd0aCk7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OkhhbmRsZUVuZXJneVJlcG9ydCh1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIGNvbnN0IHVpbnQ4X3QgKmFFbmVyZ3lMaXN0LCB1aW50OF90IGFFbmVyZ3lMaXN0TGVuZ3RoKQoreworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRW5lcmd5OiAlMDh4ICIsIGFDaGFubmVsTWFzayk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBhRW5lcmd5TGlzdExlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZCAiLCBhRW5lcmd5TGlzdFtpXSk7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7Cit9CisKK3ZvaWQgT1RDQUxMIEludGVycHJldGVyOjpzX0hhbmRsZVBhbklkQ29uZmxpY3QodWludDE2X3QgYVBhbklkLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PEludGVycHJldGVyICo+KGFDb250ZXh0KS0+SGFuZGxlUGFuSWRDb25mbGljdChhUGFuSWQsIGFDaGFubmVsTWFzayk7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OkhhbmRsZVBhbklkQ29uZmxpY3QodWludDE2X3QgYVBhbklkLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2spCit7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJDb25mbGljdDogJTA0eCwgJTA4eFxyXG4iLCBhUGFuSWQsIGFDaGFubmVsTWFzayk7Cit9CisKKyNlbmRpZiAvLyAgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0pvaW5lcihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgInN0YXJ0IikgPT0gMCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKnByb3Zpc2lvbmluZ1VybDsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAxLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgcHJvdmlzaW9uaW5nVXJsID0gKGFyZ2MgPiAyKSA/IGFyZ3ZbMl0gOiBOVUxMOworICAgICAgICBvdEpvaW5lclN0YXJ0KG1JbnN0YW5jZSwgYXJndlsxXSwgcHJvdmlzaW9uaW5nVXJsLAorICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0VfTkFNRSwgUExBVEZPUk1fSU5GTywgUEFDS0FHRV9WRVJTSU9OLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICZJbnRlcnByZXRlcjo6c19IYW5kbGVKb2luZXJDYWxsYmFjaywgdGhpcyk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAic3RvcCIpID09IDApCisgICAgeworICAgICAgICBvdEpvaW5lclN0b3AobUluc3RhbmNlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorCit2b2lkIE9UQ0FMTCBJbnRlcnByZXRlcjo6c19IYW5kbGVKb2luZXJDYWxsYmFjayhvdEVycm9yIGFFcnJvciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8SW50ZXJwcmV0ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVKb2luZXJDYWxsYmFjayhhRXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpIYW5kbGVKb2luZXJDYWxsYmFjayhvdEVycm9yIGFFcnJvcikKK3sKKyAgICBzd2l0Y2ggKGFFcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkpvaW4gc3VjY2Vzc1xyXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkpvaW4gZmFpbGVkIFslc11cclxuIiwgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGFFcnJvcikpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0pvaW5lclBvcnQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RUaHJlYWRHZXRKb2luZXJVZHBQb3J0KG1JbnN0YW5jZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIGVycm9yID0gb3RUaHJlYWRTZXRKb2luZXJVZHBQb3J0KG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbHVlKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1doaXRlbGlzdChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90TWFjV2hpdGVsaXN0RW50cnkgZW50cnk7CisgICAgaW50IGFyZ2N1ciA9IDA7CisgICAgdWludDhfdCBleHRBZGRyWzhdOworICAgIGludDhfdCByc3NpOworCisgICAgaWYgKGFyZ2N1ciA+PSBhcmdjKQorICAgIHsKKyAgICAgICAgaWYgKG90TGlua0lzV2hpdGVsaXN0RW5hYmxlZChtSW5zdGFuY2UpKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkVuYWJsZWRcclxuIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkRpc2FibGVkXHJcbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyA7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG90TGlua0dldFdoaXRlbGlzdEVudHJ5KG1JbnN0YW5jZSwgaSwgJmVudHJ5KSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZW50cnkubVZhbGlkID09IGZhbHNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBPdXRwdXRCeXRlcyhlbnRyeS5tRXh0QWRkcmVzcy5tOCwgT1RfRVhUX0FERFJFU1NfU0laRSk7CisKKyAgICAgICAgICAgIGlmIChlbnRyeS5tRml4ZWRSc3NpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICVkIiwgZW50cnkubVJzc2kpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlthcmdjdXJdLCAiYWRkIikgPT0gMCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCgrK2FyZ2N1ciA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBWZXJpZnlPckV4aXQoSGV4MkJpbihhcmd2W2FyZ2N1cl0sIGV4dEFkZHIsIHNpemVvZihleHRBZGRyKSkgPT0gc2l6ZW9mKGV4dEFkZHIpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICBpZiAoKythcmdjdXIgPCBhcmdjKQorICAgICAgICB7CisgICAgICAgICAgICByc3NpID0gc3RhdGljX2Nhc3Q8aW50OF90PihzdHJ0b2woYXJndlthcmdjdXJdLCBOVUxMLCAwKSk7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQob3RMaW5rQWRkV2hpdGVsaXN0UnNzaShtSW5zdGFuY2UsIGV4dEFkZHIsIHJzc2kpID09IE9UX0VSUk9SX05PTkUsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3RMaW5rQWRkV2hpdGVsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcik7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQob3RMaW5rQWRkV2hpdGVsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcikgPT0gT1RfRVJST1JfTk9ORSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYXJnY3VyXSwgImNsZWFyIikgPT0gMCkKKyAgICB7CisgICAgICAgIG90TGlua0NsZWFyV2hpdGVsaXN0KG1JbnN0YW5jZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJkaXNhYmxlIikgPT0gMCkKKyAgICB7CisgICAgICAgIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQobUluc3RhbmNlLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJlbmFibGUiKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RMaW5rU2V0V2hpdGVsaXN0RW5hYmxlZChtSW5zdGFuY2UsIHRydWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlthcmdjdXJdLCAicmVtb3ZlIikgPT0gMCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCgrK2FyZ2N1ciA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBWZXJpZnlPckV4aXQoSGV4MkJpbihhcmd2W2FyZ2N1cl0sIGV4dEFkZHIsIHNpemVvZihleHRBZGRyKSkgPT0gc2l6ZW9mKGV4dEFkZHIpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgb3RMaW5rUmVtb3ZlV2hpdGVsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcik7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzRGlhZyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIC8vIGFsbCBkaWFnbm9zdGljcyByZWxhdGVkIGZlYXR1cmVzIGFyZSBwcm9jZXNzZWQgd2l0aGluIGRpYWdub3N0aWNzIG1vZHVsZQorICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJXNcclxuIiwgb3REaWFnUHJvY2Vzc0NtZChhcmdjLCBhcmd2KSk7Cit9CisjZW5kaWYKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0xpbmUoY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCwgU2VydmVyICZhU2VydmVyKQoreworICAgIGNoYXIgKmFyZ3Zba01heEFyZ3NdOworICAgIGNoYXIgKmNtZDsKKyAgICB1aW50OF90IGFyZ2MgPSAwLCBpID0gMDsKKworICAgIG1TZXJ2ZXIgPSAmYVNlcnZlcjsKKworICAgIFZlcmlmeU9yRXhpdChhQnVmICE9IE5VTEwpOworCisgICAgZm9yICg7ICphQnVmID09ICcgJzsgYUJ1ZisrLCBhQnVmTGVuZ3RoLS0pOworCisgICAgZm9yIChjbWQgPSBhQnVmICsgMTsgKGNtZCA8IGFCdWYgKyBhQnVmTGVuZ3RoKSAmJiAoY21kICE9IE5VTEwpOyArK2NtZCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhcmdjIDwga01heEFyZ3MsCisgICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkVycm9yOiB0b28gbWFueSBhcmdzIChtYXggJWQpXHJcbiIsIGtNYXhBcmdzKSk7CisKKyAgICAgICAgaWYgKCpjbWQgPT0gJyAnIHx8ICpjbWQgPT0gJ1xyJyB8fCAqY21kID09ICdcbicpCisgICAgICAgIHsKKyAgICAgICAgICAgICpjbWQgPSAnXDAnOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCooY21kIC0gMSkgPT0gJ1wwJyAmJiAqY21kICE9ICcgJykKKyAgICAgICAgeworICAgICAgICAgICAgYXJndlthcmdjKytdID0gY21kOworICAgICAgICB9CisgICAgfQorCisgICAgY21kID0gYUJ1ZjsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKyAgICBWZXJpZnlPckV4aXQoKCFvdERpYWdJc0VuYWJsZWQoKSB8fCAoc3RyY21wKGNtZCwgImRpYWciKSA9PSAwKSksCisgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgidW5kZXIgZGlhZ25vc3RpY3MgbW9kZSwgZXhlY3V0ZSAnZGlhZyBzdG9wJyBiZWZvcmUgcnVubmluZyBhbnkgb3RoZXIgY29tbWFuZHMuXHJcbiIpKTsKKyNlbmRpZgorCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChzdHJjbXAoY21kLCBzQ29tbWFuZHNbaV0ubU5hbWUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgICh0aGlzLT4qc0NvbW1hbmRzW2ldLm1Db21tYW5kKShhcmdjLCBhcmd2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRXJyb3IgcHJvbXB0IGZvciB1bnN1cHBvcnRlZCBjb21tYW5kcworICAgIGlmIChpID09IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSkpCisgICAgeworICAgICAgICBBcHBlbmRSZXN1bHQoT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgT1RDQUxMIEludGVycHJldGVyOjpzX0hhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKHVpbnQzMl90IGFGbGFncywgdm9pZCAqYUNvbnRleHQpCit7CisjaWZkZWYgT1RETEwKKyAgICBvdENsaUNvbnRleHQgKmNsaUNvbnRleHQgPSBzdGF0aWNfY2FzdDxvdENsaUNvbnRleHQgKj4oYUNvbnRleHQpOworICAgIGNsaUNvbnRleHQtPm1JbnRlcnByZXRlci0+SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQoY2xpQ29udGV4dC0+bUluc3RhbmNlLCBhRmxhZ3MpOworI2Vsc2UKKyAgICBzdGF0aWNfY2FzdDxJbnRlcnByZXRlciAqPihhQ29udGV4dCktPkhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKGFGbGFncyk7CisjZW5kaWYKK30KKworI2lmZGVmIE9URExMCit2b2lkIEludGVycHJldGVyOjpIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZChvdEluc3RhbmNlICptSW5zdGFuY2UsIHVpbnQzMl90IGFGbGFncykKKyNlbHNlCit2b2lkIEludGVycHJldGVyOjpIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCh1aW50MzJfdCBhRmxhZ3MpCisjZW5kaWYKK3sKKyAgICBWZXJpZnlPckV4aXQoKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEpICE9IDApOworCisjaWZuZGVmIE9URExMCisgICAgb3RJcDZTbGFhY1VwZGF0ZShtSW5zdGFuY2UsIG1TbGFhY0FkZHJlc3Nlcywgc2l6ZW9mKG1TbGFhY0FkZHJlc3NlcykgLyBzaXplb2YobVNsYWFjQWRkcmVzc2VzWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgIG90SXA2Q3JlYXRlUmFuZG9tSWlkLCBOVUxMKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIKKyAgICBvdERoY3A2U2VydmVyVXBkYXRlKG1JbnN0YW5jZSk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisgICAgb3REaGNwNkNsaWVudFVwZGF0ZShtSW5zdGFuY2UsIG1EaGNwQWRkcmVzc2VzLCBzaXplb2YobURoY3BBZGRyZXNzZXMpIC8gc2l6ZW9mKG1EaGNwQWRkcmVzc2VzWzBdKSwgTlVMTCk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorI2VuZGlmCisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtEaWFnbm9zdGljKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3RydWN0IG90SXA2QWRkcmVzcyBhZGRyZXNzOworICAgIHVpbnQ4X3QgcGF5bG9hZFsyICsgT1RfTkVUV09SS19ESUFHTk9TVElDX1RZUEVMSVNUX01BWF9FTlRSSUVTXTsgIC8vIFR5cGVMaXN0IFR5cGUoMUIpLCBsZW4oMUIpLCB0eXBlIGxpc3QKKyAgICB1aW50OF90IHBheWxvYWRJbmRleCA9IDA7CisgICAgdWludDhfdCBwYXJhbUluZGV4ID0gMDsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMSArIDEsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlsxXSwgJmFkZHJlc3MpKTsKKworICAgIHBheWxvYWRJbmRleCA9IDI7CisgICAgcGFyYW1JbmRleCA9IDI7CisKKyAgICB3aGlsZSAocGFyYW1JbmRleCA8IGFyZ2MgJiYgcGF5bG9hZEluZGV4IDwgc2l6ZW9mKHBheWxvYWQpKQorICAgIHsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2W3BhcmFtSW5kZXgrK10sIHZhbHVlKSk7CisgICAgICAgIHBheWxvYWRbcGF5bG9hZEluZGV4KytdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworICAgIH0KKworICAgIHBheWxvYWRbMF0gPSBPVF9ORVRXT1JLX0RJQUdOT1NUSUNfVFlQRUxJU1RfVFlQRTsgIC8vIFR5cGVMaXN0IFRMViBUeXBlCisgICAgcGF5bG9hZFsxXSA9IHBheWxvYWRJbmRleCAtIDI7ICAvLyBsZW5ndGgKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgImdldCIpID09IDApCisgICAgeworICAgICAgICBvdFRocmVhZFNlbmREaWFnbm9zdGljR2V0KG1JbnN0YW5jZSwgJmFkZHJlc3MsIHBheWxvYWQsIHBheWxvYWRJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJyZXNldCIpID09IDApCisgICAgeworICAgICAgICBvdFRocmVhZFNlbmREaWFnbm9zdGljUmVzZXQobUluc3RhbmNlLCAmYWRkcmVzcywgcGF5bG9hZCwgcGF5bG9hZEluZGV4KTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURCB8fCBPUEVOVEhSRUFEX0VOQUJMRV9NVERfTkVUV09SS19ESUFHTk9TVElDCisKKyNpZm5kZWYgT1RETEwKK3ZvaWQgSW50ZXJwcmV0ZXI6OnNfSGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PEludGVycHJldGVyICo+KGFDb250ZXh0KS0+SGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6SGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICYpCit7CisgICAgdWludDhfdCBidWZbMTZdOworICAgIHVpbnQxNl90IGJ5dGVzVG9QcmludDsKKyAgICB1aW50MTZfdCBieXRlc1ByaW50ZWQgPSAwOworICAgIHVpbnQxNl90IGxlbmd0aCA9IGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkRJQUdfR0VULnJzcDogIik7CisKKyAgICB3aGlsZSAobGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIGJ5dGVzVG9QcmludCA9IChsZW5ndGggPCBzaXplb2YoYnVmKSkgPyBsZW5ndGggOiBzaXplb2YoYnVmKTsKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSArIGJ5dGVzUHJpbnRlZCwgYnl0ZXNUb1ByaW50LCBidWYpOworCisgICAgICAgIE91dHB1dEJ5dGVzKGJ1Ziwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYnl0ZXNUb1ByaW50KSk7CisKKyAgICAgICAgbGVuZ3RoICAgICAgIC09IGJ5dGVzVG9QcmludDsKKyAgICAgICAgYnl0ZXNQcmludGVkICs9IGJ5dGVzVG9QcmludDsKKyAgICB9CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKK30KKyNlbmRpZgorCitJbnRlcnByZXRlciAmSW50ZXJwcmV0ZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIEludGVycHJldGVyICZpbnRlcnByZXRlciA9ICpzdGF0aWNfY2FzdDxJbnRlcnByZXRlciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBJbnRlcnByZXRlciAmaW50ZXJwcmV0ZXIgPSBVYXJ0OjpzVWFydFNlcnZlci0+R2V0SW50ZXJwcmV0ZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGludGVycHJldGVyOworfQorCit9ICAvLyBuYW1lc3BhY2UgQ2xpCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jbGkvY2xpLmhwcCBiL3NyYy9jbGkvY2xpLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDRiOWFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9jbGkuaHBwCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIENMSSBpbnRlcnByZXRlci4KKyAqLworCisjaWZuZGVmIENMSV9IUFBfCisjZGVmaW5lIENMSV9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2lwNi5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdWRwLmg+CisKKyNpbmNsdWRlICJjbGkvY2xpX3NlcnZlci5ocHAiCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisjaW5jbHVkZSA8Y29hcC9jb2FwX2hlYWRlci5ocHA+CisjaW5jbHVkZSAiY2xpL2NsaV9jb2FwLmhwcCIKKyNlbmRpZgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb250ZXh0LmhwcCIKKworI2lmbmRlZiBPVERMTAorI2luY2x1ZGUgPG9wZW50aHJlYWQvZGhjcDZfY2xpZW50Lmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9kbnMuaD4KKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm5ldC9pY21wNi5ocHAiCisjZW5kaWYKKworI2lmZGVmIE9URExMCisjZGVmaW5lIE1BWF9DTElfT1RfSU5TVEFOQ0VTIDY0CisjZW5kaWYKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAbmFtZXNwYWNlIG90OjpDbGkKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBDTEkgaW50ZXJwcmV0ZXIuCisgKgorICovCituYW1lc3BhY2UgQ2xpIHsKKworY2xhc3MgSW50ZXJwcmV0ZXI7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIENMSSBjb21tYW5kLgorICoKKyAqLworc3RydWN0IENvbW1hbmQKK3sKKyAgICBjb25zdCBjaGFyICptTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgc3RyaW5nLgorICAgIHZvaWQgKEludGVycHJldGVyOjoqbUNvbW1hbmQpKGludCBhcmdjLCBjaGFyICphcmd2W10pOyAgLy8vPCBBIGZ1bmN0aW9uIHBvaW50ZXIgdG8gcHJvY2VzcyB0aGUgY29tbWFuZC4KK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBDTEkgaW50ZXJwcmV0ZXIuCisgKgorICovCitjbGFzcyBJbnRlcnByZXRlcgoreworICAgIGZyaWVuZCBjbGFzcyBDb2FwOworCitwdWJsaWM6CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvcgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgICAgICovCisgICAgSW50ZXJwcmV0ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGludGVycHJldHMgYSBDTEkgY29tbWFuZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byBhIHN0cmluZy4KKyAgICAgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW4gYnl0ZXMuCisgICAgICogQHBhcmFtW2luXSAgYVNlcnZlciAgICAgQSByZWZlcmVuY2UgdG8gdGhlIENMSSBzZXJ2ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFByb2Nlc3NMaW5lKGNoYXIgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgsIFNlcnZlciAmYVNlcnZlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwYXJzZXMgYW4gQVNDSUkgc3RyaW5nIGFzIGEgbG9uZy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhU3RyaW5nICBBIHBvaW50ZXIgdG8gdGhlIEFTQ0lJIHN0cmluZy4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYUxvbmcgICAgQSByZWZlcmVuY2UgdG8gd2hlcmUgdGhlIHBhcnNlZCBsb25nIGlzIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgIFN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlIEFTQ0lJIHN0cmluZy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX1BBUlNFICBDb3VsZCBub3QgcGFyc2UgdGhlIEFTQ0lJIHN0cmluZy4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIFBhcnNlTG9uZyhjaGFyICphU3RyaW5nLCBsb25nICZhTG9uZyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwYXJzZXMgYW4gQVNDSUkgc3RyaW5nIGFzIGFuIHVuc2lnbmVkIGxvbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYVN0cmluZyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEFTQ0lJIHN0cmluZy4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYVVuc2lnbmVkTG9uZyAgICBBIHJlZmVyZW5jZSB0byB3aGVyZSB0aGUgcGFyc2VkIHVuc2lnbmVkIGxvbmcgaXMgcGxhY2VkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgU3VjY2Vzc2Z1bGx5IHBhcnNlZCB0aGUgQVNDSUkgc3RyaW5nLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfUEFSU0UgIENvdWxkIG5vdCBwYXJzZSB0aGUgQVNDSUkgc3RyaW5nLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgUGFyc2VVbnNpZ25lZExvbmcoY2hhciAqYVN0cmluZywgdW5zaWduZWQgbG9uZyAmYVVuc2lnbmVkTG9uZyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyBhIGhleCBzdHJpbmcgdG8gYmluYXJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFIZXggICAgICAgIEEgcG9pbnRlciB0byB0aGUgaGV4IHN0cmluZy4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYUJpbiAgICAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaXMgcGxhY2VkLgorICAgICAqIEBwYXJhbVtpbl0gICBhQmluTGVuZ3RoICBNYXhpbXVtIGxlbmd0aCBvZiB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorICAgICAqLworICAgIHN0YXRpYyBpbnQgSGV4MkJpbihjb25zdCBjaGFyICphSGV4LCB1aW50OF90ICphQmluLCB1aW50MTZfdCBhQmluTGVuZ3RoKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4QXJncyA9IDMyLAorICAgICAgICBrTWF4QXV0b0FkZHJlc3NlcyA9IDgsCisgICAgICAgIGtEZWZhdWx0Sm9pbmVyVGltZW91dCA9IDEyMCwgICAgLy8vPCBEZWZhdWx0IHRpbWVvdXQgZm9yIEpvaW5lcnMsIGluIHNlY29uZHMuCisgICAgfTsKKworICAgIHZvaWQgQXBwZW5kUmVzdWx0KG90RXJyb3IgZXJyb3IpIGNvbnN0OworICAgIHZvaWQgT3V0cHV0Qnl0ZXMoY29uc3QgdWludDhfdCAqYUJ5dGVzLCB1aW50OF90IGFMZW5ndGgpIGNvbnN0OworCisgICAgdm9pZCBQcm9jZXNzSGVscChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NBdXRvU3RhcnQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzQnVmZmVySW5mbyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NCbGFja2xpc3QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzQ2hhbm5lbChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHZvaWQgUHJvY2Vzc0NoaWxkKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc0NoaWxkTWF4KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisgICAgdm9pZCBQcm9jZXNzQ2hpbGRUaW1lb3V0KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2lmIE9QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVAKKyAgICB2b2lkIFByb2Nlc3NDb2FwKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmICAvL09QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVAKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NDb21taXNzaW9uZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorI2lmIE9QRU5USFJFQURfRlRECisgICAgdm9pZCBQcm9jZXNzQ29udGV4dElkUmV1c2VEZWxheShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorICAgIHZvaWQgUHJvY2Vzc0NvdW50ZXJzKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc0RhdGFzZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NEZWxheVRpbWVyTWluKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworICAgIHZvaWQgUHJvY2Vzc0RpYWcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKyAgICB2b2lkIFByb2Nlc3NEaXNjb3ZlcihpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCisgICAgdm9pZCBQcm9jZXNzRG5zKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NFaWRDYWNoZShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorICAgIHZvaWQgUHJvY2Vzc0V1aTY0KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2lmZGVmIE9QRU5USFJFQURfRVhBTVBMRVNfUE9TSVgKKyAgICB2b2lkIFByb2Nlc3NFeGl0KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisgICAgdm9pZCBQcm9jZXNzRXh0QWRkcmVzcyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NFeHRQYW5JZChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NGYWN0b3J5UmVzZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzSGFzaE1hY0FkZHJlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzSWZjb25maWcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzSXBBZGRyKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIG90RXJyb3IgUHJvY2Vzc0lwQWRkckFkZChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBvdEVycm9yIFByb2Nlc3NJcEFkZHJEZWwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzSXBNdWx0aWNhc3RBZGRyKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2lmbmRlZiBPVERMTAorICAgIG90RXJyb3IgUHJvY2Vzc0lwTXVsdGljYXN0QWRkckFkZChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBvdEVycm9yIFByb2Nlc3NJcE11bHRpY2FzdEFkZHJEZWwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgb3RFcnJvciBQcm9jZXNzTXVsdGljYXN0UHJvbWlzY3VvdXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKyAgICB2b2lkIFByb2Nlc3NKb2luZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorI2lmIE9QRU5USFJFQURfRlRECisgICAgdm9pZCBQcm9jZXNzSm9pbmVyUG9ydChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorICAgIHZvaWQgUHJvY2Vzc0tleVNlcXVlbmNlKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc0xlYWRlckRhdGEoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NMZWFkZXJQYXJ0aXRpb25JZChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NMZWFkZXJXZWlnaHQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYKKyAgICB2b2lkIFByb2Nlc3NMaW5rUXVhbGl0eShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NNYXN0ZXJLZXkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzTW9kZShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgdm9pZCBQcm9jZXNzTmV0d29ya0RhdGFSZWdpc3RlcihpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKyAgICB2b2lkIFByb2Nlc3NOZXR3b3JrRGlhZ25vc3RpYyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURCB8fCBPUEVOVEhSRUFEX0VOQUJMRV9NVERfTkVUV09SS19ESUFHTk9TVElDCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NOZXR3b3JrSWRUaW1lb3V0KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisgICAgdm9pZCBQcm9jZXNzTmV0d29ya05hbWUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzUGFuSWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzUGFyZW50KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2lmIE9QRU5USFJFQURfRlRECisgICAgdm9pZCBQcm9jZXNzUGFyZW50UHJpb3JpdHkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYKKyAgICB2b2lkIFByb2Nlc3NQaW5nKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc1BvbGxQZXJpb2QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIHZvaWQgUHJvY2Vzc1ByZWZpeChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBvdEVycm9yIFByb2Nlc3NQcmVmaXhBZGQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgb3RFcnJvciBQcm9jZXNzUHJlZml4UmVtb3ZlKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIG90RXJyb3IgUHJvY2Vzc1ByZWZpeExpc3Qodm9pZCk7CisjZW5kaWYKKyAgICB2b2lkIFByb2Nlc3NQcm9taXNjdW91cyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHZvaWQgUHJvY2Vzc1BTS2MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzUmVsZWFzZVJvdXRlcklkKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisgICAgdm9pZCBQcm9jZXNzUmVzZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIHZvaWQgUHJvY2Vzc1JvdXRlKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIG90RXJyb3IgUHJvY2Vzc1JvdXRlQWRkKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIG90RXJyb3IgUHJvY2Vzc1JvdXRlUmVtb3ZlKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NSb3V0ZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzUm91dGVyRG93bmdyYWRlVGhyZXNob2xkKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc1JvdXRlclJvbGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzUm91dGVyU2VsZWN0aW9uSml0dGVyKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc1JvdXRlclVwZ3JhZGVUaHJlc2hvbGQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYKKyAgICB2b2lkIFByb2Nlc3NSbG9jMTYoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzU2NhbihpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NTaW5nbGV0b24oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzU3RhdGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzVGhyZWFkKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc1R4UG93ZXJNYXgoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzVmVyc2lvbihpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NXaGl0ZWxpc3QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKKyNpZmRlZiBPVERMTAorICAgIHZvaWQgUHJvY2Vzc0luc3RhbmNlTGlzdChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NJbnN0YW5jZShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorCisjaWZuZGVmIE9URExMCisgICAgc3RhdGljIHZvaWQgc19IYW5kbGVJY21wUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJY21wNkhlYWRlciAqYUljbXBIZWFkZXIpOworICAgIHN0YXRpYyB2b2lkIHNfSGFuZGxlUGluZ1RpbWVyKFRpbWVyICZhVGltZXIpOworI2VuZGlmCisgICAgc3RhdGljIHZvaWQgT1RDQUxMIHNfSGFuZGxlQWN0aXZlU2NhblJlc3VsdChvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KTsKKyAgICBzdGF0aWMgdm9pZCBPVENBTEwgc19IYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCh1aW50MzJfdCBhRmxhZ3MsIHZvaWQgKmFDb250ZXh0KTsKKyNpZm5kZWYgT1RETEwKKyAgICBzdGF0aWMgdm9pZCBzX0hhbmRsZUxpbmtQY2FwUmVjZWl2ZShjb25zdCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgdm9pZCAqYUNvbnRleHQpOworI2VuZGlmCisgICAgc3RhdGljIHZvaWQgT1RDQUxMIHNfSGFuZGxlRW5lcmd5UmVwb3J0KHVpbnQzMl90IGFDaGFubmVsTWFzaywgY29uc3QgdWludDhfdCAqYUVuZXJneUxpc3QsIHVpbnQ4X3QgYUVuZXJneUxpc3RMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDb250ZXh0KTsKKyAgICBzdGF0aWMgdm9pZCBPVENBTEwgc19IYW5kbGVQYW5JZENvbmZsaWN0KHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCB2b2lkICphQ29udGV4dCk7CisjaWZuZGVmIE9URExMCisgICAgc3RhdGljIHZvaWQgT1RDQUxMIHNfSGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYUNvbnRleHQpOworI2VuZGlmCisgICAgc3RhdGljIHZvaWQgT1RDQUxMIHNfSGFuZGxlSm9pbmVyQ2FsbGJhY2sob3RFcnJvciBhRXJyb3IsIHZvaWQgKmFDb250ZXh0KTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKyAgICBzdGF0aWMgdm9pZCBzX0hhbmRsZURuc1Jlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBjb25zdCBjaGFyICphSG9zdG5hbWUsIG90SXA2QWRkcmVzcyAqYUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhVHRsLCBvdEVycm9yIGFSZXN1bHQpOworI2VuZGlmCisKKyNpZm5kZWYgT1RETEwKKyAgICB2b2lkIEhhbmRsZUljbXBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdEljbXA2SGVhZGVyICZhSWNtcEhlYWRlcik7CisgICAgdm9pZCBIYW5kbGVQaW5nVGltZXIoKTsKKyNlbmRpZgorICAgIHZvaWQgSGFuZGxlQWN0aXZlU2NhblJlc3VsdChvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQpOworI2lmZGVmIE9URExMCisgICAgdm9pZCBIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFGbGFncyk7CisjZWxzZQorICAgIHZvaWQgSGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzKTsKKyNlbmRpZgorI2lmbmRlZiBPVERMTAorICAgIHZvaWQgSGFuZGxlTGlua1BjYXBSZWNlaXZlKGNvbnN0IG90UmFkaW9GcmFtZSAqYUZyYW1lKTsKKyNlbmRpZgorICAgIHZvaWQgSGFuZGxlRW5lcmd5UmVwb3J0KHVpbnQzMl90IGFDaGFubmVsTWFzaywgY29uc3QgdWludDhfdCAqYUVuZXJneUxpc3QsIHVpbnQ4X3QgYUVuZXJneUxpc3RMZW5ndGgpOworICAgIHZvaWQgSGFuZGxlUGFuSWRDb25mbGljdCh1aW50MTZfdCBhUGFuSWQsIHVpbnQzMl90IGFDaGFubmVsTWFzayk7CisjaWZuZGVmIE9URExMCisgICAgdm9pZCBIYW5kbGVEaWFnbm9zdGljR2V0UmVzcG9uc2UoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisjZW5kaWYKKyAgICB2b2lkIEhhbmRsZUpvaW5lckNhbGxiYWNrKG90RXJyb3IgYUVycm9yKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKyAgICB2b2lkIEhhbmRsZURuc1Jlc3BvbnNlKGNvbnN0IGNoYXIgKmFIb3N0bmFtZSwgSXA2OjpBZGRyZXNzICZhQWRkcmVzcywgdWludDMyX3QgYVR0bCwgb3RFcnJvciBhUmVzdWx0KTsKKyNlbmRpZgorCisgICAgc3RhdGljIEludGVycHJldGVyICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisKKyAgICBDb2FwIG1Db2FwOworCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21tYW5kIHNDb21tYW5kc1tdOworCisgICAgU2VydmVyICptU2VydmVyOworCisjaWZkZWYgT1RETEwKKworICAgIHZvaWQgQ2FjaGVJbnN0YW5jZXMoKTsKKworICAgIG90QXBpSW5zdGFuY2UgKm1BcGlJbnN0YW5jZTsKKworICAgIHN0cnVjdCBvdENsaUNvbnRleHQKKyAgICB7CisgICAgICAgIEludGVycHJldGVyICptSW50ZXJwcmV0ZXI7CisgICAgICAgIG90SW5zdGFuY2UgICptSW5zdGFuY2U7CisgICAgfTsKKyAgICBvdENsaUNvbnRleHQgbUluc3RhbmNlc1tNQVhfQ0xJX09UX0lOU1RBTkNFU107CisgICAgdWludDhfdCBtSW5zdGFuY2VzTGVuZ3RoOworICAgIHVpbnQ4X3QgbUluc3RhbmNlSW5kZXg7CisKKyNlbHNlCisKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1NZXNzYWdlSW5mbzsKKworICAgIHVpbnQxNl90IG1MZW5ndGg7CisgICAgdWludDE2X3QgbUNvdW50OworICAgIHVpbnQzMl90IG1JbnRlcnZhbDsKKyAgICBUaW1lciBtUGluZ1RpbWVyOworCisgICAgb3ROZXRpZkFkZHJlc3MgIG1TbGFhY0FkZHJlc3Nlc1tPUEVOVEhSRUFEX0NPTkZJR19OVU1fU0xBQUNfQUREUkVTU0VTXTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKyAgICBvdERoY3BBZGRyZXNzICBtRGhjcEFkZHJlc3Nlc1tPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFU107CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKKyAgICBvdEljbXA2SGFuZGxlciBtSWNtcEhhbmRsZXI7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorICAgIGJvb2wgbVJlc29sdmluZ0luUHJvZ3Jlc3M7CisgICAgY2hhciBtUmVzb2x2aW5nSG9zdG5hbWVbT1RfRE5TX01BWF9IT1NUTkFNRV9MRU5HVEhdOworI2VuZGlmCisKKyNlbmRpZgorCisgICAgb3RJbnN0YW5jZSAqbUluc3RhbmNlOworfTsKKworfSAgLy8gbmFtZXNwYWNlIENsaQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ0xJX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jbGkvY2xpX2NvYXAuY3BwIGIvc3JjL2NsaS9jbGlfY29hcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmNjY0OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvY2xpX2NvYXAuY3BwCkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgc2ltcGxlIENMSSBmb3IgdGhlIENvQVAgc2VydmljZS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVAKKworI2luY2x1ZGUgImNsaV9jb2FwLmhwcCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlICJjbGkvY2xpLmhwcCIKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDbGkgeworCit2b2lkIENvYXA6OlByaW50UGF5bG9hZChvdE1lc3NhZ2UgKmFNZXNzYWdlKSBjb25zdAoreworICAgIHVpbnQ4X3QgYnVmW2tNYXhCdWZmZXJTaXplXTsKKyAgICB1aW50MTZfdCBieXRlc1RvUHJpbnQ7CisgICAgdWludDE2X3QgYnl0ZXNQcmludGVkID0gMDsKKyAgICB1aW50MTZfdCBsZW5ndGggPSBvdE1lc3NhZ2VHZXRMZW5ndGgoYU1lc3NhZ2UpIC0gb3RNZXNzYWdlR2V0T2Zmc2V0KGFNZXNzYWdlKTsKKworICAgIGlmIChsZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiIHdpdGggcGF5bG9hZDogIik7CisKKyAgICAgICAgd2hpbGUgKGxlbmd0aCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGJ5dGVzVG9QcmludCA9IChsZW5ndGggPCBzaXplb2YoYnVmKSkgPyBsZW5ndGggOiBzaXplb2YoYnVmKTsKKyAgICAgICAgICAgIG90TWVzc2FnZVJlYWQoYU1lc3NhZ2UsIG90TWVzc2FnZUdldE9mZnNldChhTWVzc2FnZSkgKyBieXRlc1ByaW50ZWQsIGJ1ZiwgYnl0ZXNUb1ByaW50KTsKKworICAgICAgICAgICAgbUludGVycHJldGVyLk91dHB1dEJ5dGVzKGJ1Ziwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYnl0ZXNUb1ByaW50KSk7CisKKyAgICAgICAgICAgIGxlbmd0aCAgICAgICAtPSBieXRlc1RvUHJpbnQ7CisgICAgICAgICAgICBieXRlc1ByaW50ZWQgKz0gYnl0ZXNUb1ByaW50OworICAgICAgICB9CisgICAgfQorCisgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworfQorCitvdEVycm9yIENvYXA6OlByb2Nlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgaWYgKHN0cmNtcChhcmd2WzBdLCAic3RhcnQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90Q29hcFN0YXJ0KG1JbnRlcnByZXRlci5tSW5zdGFuY2UsIE9UX0RFRkFVTFRfQ09BUF9QT1JUKSk7CisgICAgICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIkNvYXAgc2VydmljZSBzdGFydGVkOiAiKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJzdG9wIikgPT0gMCkKKyAgICB7CisgICAgICAgIG90Q29hcFJlbW92ZVJlc291cmNlKG1JbnRlcnByZXRlci5tSW5zdGFuY2UsICZtUmVzb3VyY2UpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RDb2FwU3RvcChtSW50ZXJwcmV0ZXIubUluc3RhbmNlKSk7CisgICAgICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIkNvYXAgc2VydmljZSBzdG9wcGVkOiAiKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJyZXNvdXJjZSIpID09IDApCisgICAgeworICAgICAgICBtUmVzb3VyY2UubVVyaVBhdGggPSBtVXJpUGF0aDsKKyAgICAgICAgbVJlc291cmNlLm1Db250ZXh0ID0gdGhpczsKKyAgICAgICAgbVJlc291cmNlLm1IYW5kbGVyID0gJkNvYXA6OkhhbmRsZVNlcnZlclJlc3BvbnNlOworCisgICAgICAgIGlmIChhcmdjID4gMSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RybGNweShtVXJpUGF0aCwgYXJndlsxXSwga01heFVyaUxlbmd0aCk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RDb2FwQWRkUmVzb3VyY2UobUludGVycHJldGVyLm1JbnN0YW5jZSwgJm1SZXNvdXJjZSkpOworICAgICAgICB9CisKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiUmVzb3VyY2UgbmFtZSBpcyAnJXMnOiAiLCBtUmVzb3VyY2UubVVyaVBhdGgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFByb2Nlc3NSZXF1ZXN0KGFyZ2MsIGFyZ3YpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgT1RDQUxMIENvYXA6OkhhbmRsZVNlcnZlclJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Q29hcCAqPihhQ29udGV4dCktPkhhbmRsZVNlcnZlclJlc3BvbnNlKGFIZWFkZXIsIGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCit2b2lkIENvYXA6OkhhbmRsZVNlcnZlclJlc3BvbnNlKG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90Q29hcEhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBvdE1lc3NhZ2UgKnJlc3BvbnNlTWVzc2FnZTsKKyAgICBvdENvYXBDb2RlIHJlc3BvbnNlQ29kZSA9IE9UX0NPQVBfQ09ERV9FTVBUWTsKKyAgICBjaGFyIHJlc3BvbnNlQ29udGVudCA9ICcwJzsKKworICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIlJlY2VpdmVkIGNvYXAgcmVxdWVzdCBmcm9tIFsleDoleDoleDoleDoleDoleDoleDoleF06ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby0+bVNvY2tBZGRyLm1GaWVsZHMubTE2WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLT5tU29ja0FkZHIubUZpZWxkcy5tMTZbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhTWVzc2FnZUluZm8tPm1Tb2NrQWRkci5tRmllbGRzLm0xNlsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby0+bVNvY2tBZGRyLm1GaWVsZHMubTE2WzNdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLT5tU29ja0FkZHIubUZpZWxkcy5tMTZbNF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhTWVzc2FnZUluZm8tPm1Tb2NrQWRkci5tRmllbGRzLm0xNls1XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby0+bVNvY2tBZGRyLm1GaWVsZHMubTE2WzZdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLT5tU29ja0FkZHIubUZpZWxkcy5tMTZbN10pKTsKKworICAgIHN3aXRjaCAob3RDb2FwSGVhZGVyR2V0Q29kZShhSGVhZGVyKSkKKyAgICB7CisgICAgY2FzZSBPVF9DT0FQX0NPREVfR0VUOgorICAgICAgICBtSW50ZXJwcmV0ZXIubVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJHRVQiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0NPQVBfQ09ERV9ERUxFVEU6CisgICAgICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIkRFTEVURSIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfQ09BUF9DT0RFX1BVVDoKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiUFVUIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9DT0FQX0NPREVfUE9TVDoKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiUE9TVCIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIlVuZGVmaW5lZFxyXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFByaW50UGF5bG9hZChhTWVzc2FnZSk7CisKKyAgICBpZiAoKG90Q29hcEhlYWRlckdldFR5cGUoYUhlYWRlcikgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFKSB8fCBvdENvYXBIZWFkZXJHZXRDb2RlKGFIZWFkZXIpID09IE9UX0NPQVBfQ09ERV9HRVQpCisgICAgeworICAgICAgICBpZiAob3RDb2FwSGVhZGVyR2V0Q29kZShhSGVhZGVyKSA9PSBPVF9DT0FQX0NPREVfR0VUKQorICAgICAgICB7CisgICAgICAgICAgICByZXNwb25zZUNvZGUgPSBPVF9DT0FQX0NPREVfQ09OVEVOVDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3BvbnNlQ29kZSA9IE9UX0NPQVBfQ09ERV9WQUxJRDsKKyAgICAgICAgfQorCisgICAgICAgIG90Q29hcEhlYWRlckluaXQoJnJlc3BvbnNlSGVhZGVyLCBPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQsIHJlc3BvbnNlQ29kZSk7CisgICAgICAgIG90Q29hcEhlYWRlclNldE1lc3NhZ2VJZCgmcmVzcG9uc2VIZWFkZXIsIG90Q29hcEhlYWRlckdldE1lc3NhZ2VJZChhSGVhZGVyKSk7CisgICAgICAgIG90Q29hcEhlYWRlclNldFRva2VuKCZyZXNwb25zZUhlYWRlciwgb3RDb2FwSGVhZGVyR2V0VG9rZW4oYUhlYWRlciksIG90Q29hcEhlYWRlckdldFRva2VuTGVuZ3RoKGFIZWFkZXIpKTsKKworICAgICAgICBpZiAob3RDb2FwSGVhZGVyR2V0Q29kZShhSGVhZGVyKSA9PSBPVF9DT0FQX0NPREVfR0VUKQorICAgICAgICB7CisgICAgICAgICAgICBvdENvYXBIZWFkZXJTZXRQYXlsb2FkTWFya2VyKCZyZXNwb25zZUhlYWRlcik7CisgICAgICAgIH0KKworICAgICAgICByZXNwb25zZU1lc3NhZ2UgPSBvdENvYXBOZXdNZXNzYWdlKG1JbnRlcnByZXRlci5tSW5zdGFuY2UsICZyZXNwb25zZUhlYWRlcik7CisgICAgICAgIFZlcmlmeU9yRXhpdChyZXNwb25zZU1lc3NhZ2UgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgICAgICBpZiAob3RDb2FwSGVhZGVyR2V0Q29kZShhSGVhZGVyKSA9PSBPVF9DT0FQX0NPREVfR0VUKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RNZXNzYWdlQXBwZW5kKHJlc3BvbnNlTWVzc2FnZSwgJnJlc3BvbnNlQ29udGVudCwgc2l6ZW9mKHJlc3BvbnNlQ29udGVudCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvYXBTZW5kUmVzcG9uc2UobUludGVycHJldGVyLm1JbnN0YW5jZSwgcmVzcG9uc2VNZXNzYWdlLCBhTWVzc2FnZUluZm8pKTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiByZXNwb25zZU1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIkNhbm5vdCBzZW5kIGNvYXAgcmVzcG9uc2UgbWVzc2FnZTogRXJyb3IgJWQ6ICVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhlcnJvcikpOworICAgICAgICBvdE1lc3NhZ2VGcmVlKHJlc3BvbnNlTWVzc2FnZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHJlc3BvbnNlQ29kZSA+PSBPVF9DT0FQX0NPREVfUkVTUE9OU0VfTUlOKQorICAgIHsKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiY29hcCByZXNwb25zZSBzZW50IHN1Y2Nlc3NmdWxseSFcclxuIik7CisgICAgfQorfQorCitvdEVycm9yIENvYXA6OlByb2Nlc3NSZXF1ZXN0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBvdE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIG90Q29hcEhlYWRlciBoZWFkZXI7CisgICAgdWludDE2X3QgcGF5bG9hZExlbmd0aCA9IDA7CisKKyAgICAvLyBEZWZhdWx0IHBhcmFtZXRlcnMKKyAgICBjaGFyIGNvYXBVcmlba01heFVyaUxlbmd0aF0gPSAidGVzdCI7CisgICAgb3RDb2FwVHlwZSBjb2FwVHlwZSA9IE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEU7CisgICAgb3RDb2FwQ29kZSBjb2FwQ29kZSA9IE9UX0NPQVBfQ09ERV9HRVQ7CisgICAgb3RJcDZBZGRyZXNzIGNvYXBEZXN0aW5hdGlvbklwOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAvLyBDb0FQLUNvZGUKKyAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJnZXQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgY29hcENvZGUgPSBPVF9DT0FQX0NPREVfR0VUOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInBvc3QiKSA9PSAwKQorICAgIHsKKyAgICAgICAgY29hcENvZGUgPSBPVF9DT0FQX0NPREVfUE9TVDsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJwdXQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgY29hcENvZGUgPSBPVF9DT0FQX0NPREVfUFVUOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgImRlbGV0ZSIpID09IDApCisgICAgeworICAgICAgICBjb2FwQ29kZSA9IE9UX0NPQVBfQ09ERV9ERUxFVEU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgLy8gRGVzdGluYXRpb24gSVB2NiBhZGRyZXNzCisgICAgaWYgKGFyZ2MgPiAxKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlsxXSwgJmNvYXBEZXN0aW5hdGlvbklwKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgIH0KKworICAgIC8vIENvQVAtVVJJCisgICAgaWYgKGFyZ2MgPiAyKQorICAgIHsKKyAgICAgICAgc3RybGNweShjb2FwVXJpLCBhcmd2WzJdLCBrTWF4VXJpTGVuZ3RoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgfQorCisgICAgLy8gQ29BUC1UeXBlCisgICAgaWYgKGFyZ2MgPiAzKQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChhcmd2WzNdLCAiY29uIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29hcFR5cGUgPSBPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdENvYXBIZWFkZXJJbml0KCZoZWFkZXIsIGNvYXBUeXBlLCBjb2FwQ29kZSk7CisgICAgb3RDb2FwSGVhZGVyR2VuZXJhdGVUb2tlbigmaGVhZGVyLCBvdDo6Q29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RDb2FwSGVhZGVyQXBwZW5kVXJpUGF0aE9wdGlvbnMoJmhlYWRlciwgY29hcFVyaSkpOworCisgICAgaWYgKGFyZ2MgPiA0KQorICAgIHsKKyAgICAgICAgcGF5bG9hZExlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihzdHJsZW4oYXJndls0XSkpOworCisgICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RDb2FwSGVhZGVyU2V0UGF5bG9hZE1hcmtlcigmaGVhZGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1lc3NhZ2UgPSBvdENvYXBOZXdNZXNzYWdlKG1JbnRlcnByZXRlci5tSW5zdGFuY2UsICZoZWFkZXIpOworICAgIFZlcmlmeU9yRXhpdChtZXNzYWdlICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvLyBFbWJlZCBjb250ZW50IGludG8gbWVzc2FnZSBpZiBnaXZlbgorICAgIGlmIChwYXlsb2FkTGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdE1lc3NhZ2VBcHBlbmQobWVzc2FnZSwgYXJndls0XSwgcGF5bG9hZExlbmd0aCkpOworICAgIH0KKworICAgIG1lbXNldCgmbWVzc2FnZUluZm8sIDAsIHNpemVvZihtZXNzYWdlSW5mbykpOworICAgIG1lc3NhZ2VJbmZvLm1QZWVyQWRkciA9IGNvYXBEZXN0aW5hdGlvbklwOworICAgIG1lc3NhZ2VJbmZvLm1QZWVyUG9ydCA9IE9UX0RFRkFVTFRfQ09BUF9QT1JUOworICAgIG1lc3NhZ2VJbmZvLm1JbnRlcmZhY2VJZCA9IE9UX05FVElGX0lOVEVSRkFDRV9JRF9USFJFQUQ7CisKKyAgICBpZiAoKGNvYXBUeXBlID09IE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSkgfHwgKGNvYXBDb2RlID09IE9UX0NPQVBfQ09ERV9HRVQpKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdENvYXBTZW5kUmVxdWVzdChtSW50ZXJwcmV0ZXIubUluc3RhbmNlLCBtZXNzYWdlLCAmbWVzc2FnZUluZm8sICZDb2FwOjpIYW5kbGVDbGllbnRSZXNwb25zZSwgdGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RDb2FwU2VuZFJlcXVlc3QobUludGVycHJldGVyLm1JbnN0YW5jZSwgbWVzc2FnZSwgJm1lc3NhZ2VJbmZvLCBOVUxMLCBOVUxMKTsKKyAgICB9CisKKyAgICBtSW50ZXJwcmV0ZXIubVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJTZW5kaW5nIGNvYXAgcmVxdWVzdDogIik7CisKK2V4aXQ6CisKKyAgICBpZiAoKGVycm9yICE9IE9UX0VSUk9SX05PTkUpICYmIChtZXNzYWdlICE9IE5VTEwpKQorICAgIHsKKyAgICAgICAgb3RNZXNzYWdlRnJlZShtZXNzYWdlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgT1RDQUxMIENvYXA6OkhhbmRsZUNsaWVudFJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYUVycm9yKQoreworICAgIHN0YXRpY19jYXN0PENvYXAgKj4oYUNvbnRleHQpLT5IYW5kbGVDbGllbnRSZXNwb25zZShhSGVhZGVyLCBhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBhRXJyb3IpOworfQorCit2b2lkIENvYXA6OkhhbmRsZUNsaWVudFJlc3BvbnNlKG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBpZiAoYUVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtSW50ZXJwcmV0ZXIubVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJFcnJvciByZWNlaXZpbmcgY29hcCByZXNwb25zZSBtZXNzYWdlOiBFcnJvciAlZDogJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRXJyb3IsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhhRXJyb3IpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiUmVjZWl2ZWQgY29hcCByZXNwb25zZSIpOworICAgICAgICBQcmludFBheWxvYWQoYU1lc3NhZ2UpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSGVhZGVyKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2VJbmZvKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIENsaQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCmRpZmYgLS1naXQgYS9zcmMvY2xpL2NsaV9jb2FwLmhwcCBiL3NyYy9jbGkvY2xpX2NvYXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2ZmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2xpL2NsaV9jb2FwLmhwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgYSBzaW1wbGUgQ0xJIENvQVAgc2VydmVyIGFuZCBjbGllbnQuCisgKi8KKworI2lmbmRlZiBDTElfQ09BUF9IUFBfCisjZGVmaW5lIENMSV9DT0FQX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENsaSB7CisKK2NsYXNzIEludGVycHJldGVyOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgQ0xJIENvQVAgc2VydmVyIGFuZCBjbGllbnQuCisgKgorICovCitjbGFzcyBDb2FwCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IKKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnRlcnByZXRlciAgVGhlIENMSSBpbnRlcnByZXRlci4KKyAgICAgKgorICAgICAqLworICAgIENvYXAoSW50ZXJwcmV0ZXIgJmFJbnRlcnByZXRlcik6IG1JbnRlcnByZXRlcihhSW50ZXJwcmV0ZXIpIHsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW50ZXJwcmV0cyBhIGxpc3Qgb2YgQ0xJIGFyZ3VtZW50cy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFyZ2MgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYXJndi4KKyAgICAgKiBAcGFyYW1baW5dICBhcmd2ICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUHJvY2VzcyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4VXJpTGVuZ3RoID0gMzIsCisgICAgICAgIGtNYXhCdWZmZXJTaXplID0gMTYKKyAgICB9OworCisgICAgdm9pZCBQcmludFBheWxvYWQob3RNZXNzYWdlICphTWVzc2FnZSkgY29uc3Q7CisKKyAgICBvdEVycm9yIFByb2Nlc3NSZXF1ZXN0KGludCBhcmdjLCBjaGFyICphcmd2W10pOworCisgICAgc3RhdGljIHZvaWQgT1RDQUxMIEhhbmRsZVNlcnZlclJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVTZXJ2ZXJSZXNwb25zZShvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBPVENBTEwgSGFuZGxlQ2xpZW50UmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFFcnJvcik7CisgICAgdm9pZCBIYW5kbGVDbGllbnRSZXNwb25zZShvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYUVycm9yKTsKKworICAgIG90Q29hcFJlc291cmNlIG1SZXNvdXJjZTsKKyAgICBjaGFyIG1VcmlQYXRoW2tNYXhVcmlMZW5ndGhdOworCisgICAgSW50ZXJwcmV0ZXIgJm1JbnRlcnByZXRlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIENMSV9DT0FQX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jbGkvY2xpX2NvbnNvbGUuY3BwIGIvc3JjL2NsaS9jbGlfY29uc29sZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkxNzRhMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvY2xpX2NvbnNvbGUuY3BwCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBDTEkgc2VydmVyIG9uIHRoZSBDT05TT0xFIHNlcnZpY2UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjbGlfY29uc29sZS5ocHAiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJjbGkvY2xpLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbmV3LmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDbGkgeworCitzdGF0aWMgQ29uc29sZSAqc1NlcnZlcjsKKworc3RhdGljIG90REVGSU5FX0FMSUdORURfVkFSKHNDbGlDb25zb2xlUmF3LCBzaXplb2YoQ29uc29sZSksIHVpbnQ2NF90KTsKKworZXh0ZXJuICJDIiB2b2lkIG90Q2xpQ29uc29sZUluaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdENsaUNvbnNvbGVPdXRwdXRDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KQoreworICAgIHNTZXJ2ZXIgPSBuZXcoJnNDbGlDb25zb2xlUmF3KSBDb25zb2xlKGFJbnN0YW5jZSk7CisgICAgc1NlcnZlci0+U2V0T3V0cHV0Q2FsbGJhY2soYUNhbGxiYWNrKTsKKyAgICBzU2VydmVyLT5TZXRDb250ZXh0KGFDb250ZXh0KTsKK30KKworZXh0ZXJuICJDIiB2b2lkIG90Q2xpQ29uc29sZUlucHV0TGluZShjaGFyICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIHNTZXJ2ZXItPlJlY2VpdmVUYXNrKGFCdWYsIGFCdWZMZW5ndGgpOworfQorCitDb25zb2xlOjpDb25zb2xlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk6CisgICAgbUNhbGxiYWNrKE5VTEwpLAorICAgIG1Db250ZXh0KE5VTEwpLAorICAgIG1JbnRlcnByZXRlcihhSW5zdGFuY2UpCit7CisKK30KKwordm9pZCBDb25zb2xlOjpTZXRDb250ZXh0KHZvaWQgKmFDb250ZXh0KQoreworICAgIG1Db250ZXh0ID0gYUNvbnRleHQ7Cit9CisKK3ZvaWQgQ29uc29sZTo6U2V0T3V0cHV0Q2FsbGJhY2sob3RDbGlDb25zb2xlT3V0cHV0Q2FsbGJhY2sgYUNhbGxiYWNrKQoreworICAgIG1DYWxsYmFjayA9IGFDYWxsYmFjazsKK30KKwordm9pZCBDb25zb2xlOjpSZWNlaXZlVGFzayhjaGFyICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG1JbnRlcnByZXRlci5Qcm9jZXNzTGluZShhQnVmLCBhQnVmTGVuZ3RoLCAqdGhpcyk7Cit9CisKK2ludCBDb25zb2xlOjpPdXRwdXQoY29uc3QgY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICByZXR1cm4gbUNhbGxiYWNrKGFCdWYsIGFCdWZMZW5ndGgsIG1Db250ZXh0KTsKK30KKworaW50IENvbnNvbGU6Ok91dHB1dEZvcm1hdChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICBjaGFyIGJ1ZltrTWF4TGluZUxlbmd0aF07CisgICAgdmFfbGlzdCBhcDsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgcmV0dXJuIE91dHB1dChidWYsIHN0YXRpY19jYXN0PHVpbnQxNl90PihzdHJsZW4oYnVmKSkpOworfQorCit9ICAvLyBuYW1lc3BhY2UgQ2xpCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jbGkvY2xpX2NvbnNvbGUuaHBwIGIvc3JjL2NsaS9jbGlfY29uc29sZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxNTFlZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvY2xpX2NvbnNvbGUuaHBwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgYSBDTEkgc2VydmVyIG9uIHRoZSBDT05TT0xFIHNlcnZpY2UuCisgKi8KKworI2lmbmRlZiBDTElfQ09OU09MRV9IUFBfCisjZGVmaW5lIENMSV9DT05TT0xFX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY2xpLmg+CisKKyNpbmNsdWRlICJjbGkvY2xpLmhwcCIKKyNpbmNsdWRlICJjbGkvY2xpX3NlcnZlci5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgQ2xpIHsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIENMSSBzZXJ2ZXIgb24gdG9wIG9mIHRoZSBDT05TT0xFIHBsYXRmb3JtIGFic3RyYWN0aW9uLgorICoKKyAqLworY2xhc3MgQ29uc29sZTogcHVibGljIFNlcnZlcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqLworICAgIENvbnNvbGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRlbGl2ZXJzIHJhdyBjaGFyYWN0ZXJzIHRvIHRoZSBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVmICAgICAgICBBIHBvaW50ZXIgdG8gYSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYUJ1Zkxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBsYWNlZCBpbiB0aGUgb3V0cHV0IHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgaW50IE91dHB1dChjb25zdCBjaGFyICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRlbGl2ZXJzIGZvcm1hdHRlZCBvdXRwdXQgdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGbXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAgICAgKiBAcGFyYW1baW5dICAuLi4gICBBIHZhcmlhYmxlIGxpc3Qgb2YgYXJndW1lbnRzIHRvIGZvcm1hdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGluIHRoZSBvdXRwdXQgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgT3V0cHV0Rm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIGNvbnNvbGUgaGFzIHNvbWUgb3V0cHV0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgQSBwb2ludGVyIHRvIGEgY2FsbGJhY2sgbWV0aG9kLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRPdXRwdXRDYWxsYmFjayhvdENsaUNvbnNvbGVPdXRwdXRDYWxsYmFjayBhQ2FsbGJhY2spOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBhIGNvbnRleHQgdGhhdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBjYWxsYmFjay4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgQSBwb2ludGVyIHRvIGEgdXNlciBjb250ZXh0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb250ZXh0KHZvaWQgKmFDb250ZXh0KTsKKworICAgIHZvaWQgUmVjZWl2ZVRhc2soY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heExpbmVMZW5ndGggPSAxMjgsCisgICAgfTsKKworICAgIG90Q2xpQ29uc29sZU91dHB1dENhbGxiYWNrIG1DYWxsYmFjazsKKyAgICB2b2lkICptQ29udGV4dDsKKworICAgIEludGVycHJldGVyIG1JbnRlcnByZXRlcjsKKworfTsKKworfSAgLy8gbmFtZXNwYWNlIENsaQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ0xJX0NPTlNPTEVfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NsaS9jbGlfZGF0YXNldC5jcHAgYi9zcmMvY2xpL2NsaV9kYXRhc2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmZiMTYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9jbGlfZGF0YXNldC5jcHAKQEAgLTAsMCArMSw3NDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIENMSSBpbnRlcnByZXRlci4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImNsaV9kYXRhc2V0LmhwcCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaWYgT1BFTlRIUkVBRF9GVEQKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RhdGFzZXRfZnRkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImNsaS9jbGkuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENsaSB7CisKK2NvbnN0IERhdGFzZXRDb21tYW5kIERhdGFzZXQ6OnNDb21tYW5kc1tdID0KK3sKKyAgICB7ICJoZWxwIiwgJlByb2Nlc3NIZWxwIH0sCisgICAgeyAiYWN0aXZlIiwgJlByb2Nlc3NBY3RpdmUgfSwKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHsgImFjdGl2ZXRpbWVzdGFtcCIsICZQcm9jZXNzQWN0aXZlVGltZXN0YW1wIH0sCisgICAgeyAiY2hhbm5lbCIsICZQcm9jZXNzQ2hhbm5lbCB9LAorICAgIHsgImNoYW5uZWxtYXNrIiwgJlByb2Nlc3NDaGFubmVsTWFzayB9LAorICAgIHsgImNsZWFyIiwgJlByb2Nlc3NDbGVhciB9LAorICAgIHsgImNvbW1pdCIsICZQcm9jZXNzQ29tbWl0IH0sCisgICAgeyAiZGVsYXkiLCAmUHJvY2Vzc0RlbGF5IH0sCisgICAgeyAiZXh0cGFuaWQiLCAmUHJvY2Vzc0V4dFBhbklkIH0sCisgICAgeyAibWFzdGVya2V5IiwgJlByb2Nlc3NNYXN0ZXJLZXkgfSwKKyAgICB7ICJtZXNobG9jYWxwcmVmaXgiLCAmUHJvY2Vzc01lc2hMb2NhbFByZWZpeCB9LAorICAgIHsgIm1nbXRnZXRjb21tYW5kIiwgJlByb2Nlc3NNZ210R2V0Q29tbWFuZCB9LAorICAgIHsgIm1nbXRzZXRjb21tYW5kIiwgJlByb2Nlc3NNZ210U2V0Q29tbWFuZCB9LAorICAgIHsgIm5ldHdvcmtuYW1lIiwgJlByb2Nlc3NOZXR3b3JrTmFtZSB9LAorICAgIHsgInBhbmlkIiwgJlByb2Nlc3NQYW5JZCB9LAorI2VuZGlmCisgICAgeyAicGVuZGluZyIsICZQcm9jZXNzUGVuZGluZyB9LAorI2lmIE9QRU5USFJFQURfRlRECisgICAgeyAicGVuZGluZ3RpbWVzdGFtcCIsICZQcm9jZXNzUGVuZGluZ1RpbWVzdGFtcCB9LAorICAgIHsgInBza2MiLCAmUHJvY2Vzc1BTS2MgfSwKKyAgICB7ICJzZWN1cml0eXBvbGljeSIsICZQcm9jZXNzU2VjdXJpdHlQb2xpY3kgfSwKKyNlbmRpZgorfTsKKworU2VydmVyICpEYXRhc2V0OjpzU2VydmVyOworb3RPcGVyYXRpb25hbERhdGFzZXQgRGF0YXNldDo6c0RhdGFzZXQ7CisKK3ZvaWQgRGF0YXNldDo6T3V0cHV0Qnl0ZXMoY29uc3QgdWludDhfdCAqYUJ5dGVzLCB1aW50OF90IGFMZW5ndGgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIiUwMngiLCBhQnl0ZXNbaV0pOworICAgIH0KK30KKworb3RFcnJvciBEYXRhc2V0OjpQcmludChvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgaWYgKGFEYXRhc2V0Lm1Jc1BlbmRpbmdUaW1lc3RhbXBTZXQpCisgICAgeworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIlBlbmRpbmcgVGltZXN0YW1wOiAlZFxyXG4iLCBhRGF0YXNldC5tUGVuZGluZ1RpbWVzdGFtcCk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0FjdGl2ZVRpbWVzdGFtcFNldCkKKyAgICB7CisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiQWN0aXZlIFRpbWVzdGFtcDogJWRcclxuIiwgYURhdGFzZXQubUFjdGl2ZVRpbWVzdGFtcCk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0NoYW5uZWxTZXQpCisgICAgeworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIkNoYW5uZWw6ICVkXHJcbiIsIGFEYXRhc2V0Lm1DaGFubmVsKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzQ2hhbm5lbE1hc2tQYWdlMFNldCkKKyAgICB7CisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiQ2hhbm5lbCBNYXNrIFBhZ2UgMDogJXhcclxuIiwgYURhdGFzZXQubUNoYW5uZWxNYXNrUGFnZTApOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNEZWxheVNldCkKKyAgICB7CisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiRGVsYXk6ICVkXHJcbiIsIGFEYXRhc2V0Lm1EZWxheSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0V4dGVuZGVkUGFuSWRTZXQpCisgICAgeworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIkV4dCBQQU4gSUQ6ICIpOworICAgICAgICBPdXRwdXRCeXRlcyhhRGF0YXNldC5tRXh0ZW5kZWRQYW5JZC5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkKSk7CisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNNZXNoTG9jYWxQcmVmaXhTZXQpCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90ICpwcmVmaXggPSBhRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04OworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIk1lc2ggTG9jYWwgUHJlZml4OiAleDoleDoleDoleC82NFxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQxNl90PihwcmVmaXhbMF0pIDw8IDgpIHwgcHJlZml4WzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQxNl90PihwcmVmaXhbMl0pIDw8IDgpIHwgcHJlZml4WzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQxNl90PihwcmVmaXhbNF0pIDw8IDgpIHwgcHJlZml4WzVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQxNl90PihwcmVmaXhbNl0pIDw8IDgpIHwgcHJlZml4WzddKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0KQorICAgIHsKKyAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJNYXN0ZXIgS2V5OiAiKTsKKyAgICAgICAgT3V0cHV0Qnl0ZXMoYURhdGFzZXQubU1hc3RlcktleS5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1NYXN0ZXJLZXkpKTsKKyAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc05ldHdvcmtOYW1lU2V0KQorICAgIHsKKyAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJOZXR3b3JrIE5hbWU6ICIpOworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIiUuKnNcclxuIiwgc2l6ZW9mKGFEYXRhc2V0Lm1OZXR3b3JrTmFtZSksIGFEYXRhc2V0Lm1OZXR3b3JrTmFtZS5tOCk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc1BhbklkU2V0KQorICAgIHsKKyAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJQQU4gSUQ6IDB4JTA0eFxyXG4iLCBhRGF0YXNldC5tUGFuSWQpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNQU0tjU2V0KQorICAgIHsKKyAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJQU0tjOiAiKTsKKyAgICAgICAgT3V0cHV0Qnl0ZXMoYURhdGFzZXQubVBTS2MubTgsIHNpemVvZihhRGF0YXNldC5tUFNLYy5tOCkpOworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzU2VjdXJpdHlQb2xpY3lTZXQpCisgICAgeworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIlNlY3VyaXR5IFBvbGljeTogJWQsICIsIGFEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tUm90YXRpb25UaW1lKTsKKworICAgICAgICBpZiAoYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyAmIE9UX1NFQ1VSSVRZX1BPTElDWV9PQlRBSU5fTUFTVEVSX0tFWSkKKyAgICAgICAgeworICAgICAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJvIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyAmIE9UX1NFQ1VSSVRZX1BPTElDWV9OQVRJVkVfQ09NTUlTU0lPTklORykKKyAgICAgICAgeworICAgICAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyAmIE9UX1NFQ1VSSVRZX1BPTElDWV9ST1VURVJTKQorICAgICAgICB7CisgICAgICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoInIiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRGF0YXNldC5tU2VjdXJpdHlQb2xpY3kubUZsYWdzICYgT1RfU0VDVVJJVFlfUE9MSUNZX0VYVEVSTkFMX0NPTU1JU1NJT05FUikKKyAgICAgICAgeworICAgICAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJjIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyAmIE9UX1NFQ1VSSVRZX1BPTElDWV9CRUFDT05TKQorICAgICAgICB7CisgICAgICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoImIiKTsKKyAgICAgICAgfQorCisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdLCBTZXJ2ZXIgJmFTZXJ2ZXIpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBzU2VydmVyID0gJmFTZXJ2ZXI7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IFByaW50KHNEYXRhc2V0KSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplb2Yoc0NvbW1hbmRzKSAvIHNpemVvZihzQ29tbWFuZHNbMF0pOyBpKyspCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sIHNDb21tYW5kc1tpXS5tTmFtZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBzQ29tbWFuZHNbaV0ubUNvbW1hbmQoYUluc3RhbmNlLCBhcmdjIC0gMSwgYXJndiArIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NIZWxwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiJXNcclxuIiwgc0NvbW1hbmRzW2ldLm1OYW1lKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NBY3RpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90T3BlcmF0aW9uYWxEYXRhc2V0IGRhdGFzZXQ7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdERhdGFzZXRHZXRBY3RpdmUoYUluc3RhbmNlLCAmZGF0YXNldCkpOworICAgIGVycm9yID0gUHJpbnQoZGF0YXNldCk7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc1BlbmRpbmcob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90T3BlcmF0aW9uYWxEYXRhc2V0IGRhdGFzZXQ7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdERhdGFzZXRHZXRQZW5kaW5nKGFJbnN0YW5jZSwgJmRhdGFzZXQpKTsKKyAgICBlcnJvciA9IFByaW50KGRhdGFzZXQpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgcmV0dXJuIGVycm9yOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc0FjdGl2ZVRpbWVzdGFtcChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEludGVycHJldGVyOjpQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICBzRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICBzRGF0YXNldC5tSXNBY3RpdmVUaW1lc3RhbXBTZXQgPSB0cnVlOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NDaGFubmVsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSW50ZXJwcmV0ZXI6OlBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgIHNEYXRhc2V0Lm1DaGFubmVsID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbHVlKTsKKyAgICBzRGF0YXNldC5tSXNDaGFubmVsU2V0ID0gdHJ1ZTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpQcm9jZXNzQ2hhbm5lbE1hc2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgc0RhdGFzZXQubUNoYW5uZWxNYXNrUGFnZTAgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpOworICAgIHNEYXRhc2V0Lm1Jc0NoYW5uZWxNYXNrUGFnZTBTZXQgPSB0cnVlOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpQcm9jZXNzQ2xlYXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG1lbXNldCgmc0RhdGFzZXQsIDAsIHNpemVvZihzRGF0YXNldCkpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc0NvbW1pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgImFjdGl2ZSIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3REYXRhc2V0U2V0QWN0aXZlKGFJbnN0YW5jZSwgJnNEYXRhc2V0KSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAicGVuZGluZyIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3REYXRhc2V0U2V0UGVuZGluZyhhSW5zdGFuY2UsICZzRGF0YXNldCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpQcm9jZXNzRGVsYXkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgc0RhdGFzZXQubURlbGF5ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKKyAgICBzRGF0YXNldC5tSXNEZWxheVNldCA9IHRydWU7CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc0V4dFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IGV4dFBhbklkW09UX0VYVF9QQU5fSURfU0laRV07CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIFZlcmlmeU9yRXhpdChJbnRlcnByZXRlcjo6SGV4MkJpbihhcmd2WzBdLCBleHRQYW5JZCwgc2l6ZW9mKGV4dFBhbklkKSkgPj0gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBtZW1jcHkoc0RhdGFzZXQubUV4dGVuZGVkUGFuSWQubTgsIGV4dFBhbklkLCBzaXplb2Yoc0RhdGFzZXQubUV4dGVuZGVkUGFuSWQpKTsKKyAgICBzRGF0YXNldC5tSXNFeHRlbmRlZFBhbklkU2V0ID0gdHJ1ZTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpQcm9jZXNzTWFzdGVyS2V5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IGtleVtPVF9NQVNURVJfS0VZX1NJWkVdOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBWZXJpZnlPckV4aXQoKEludGVycHJldGVyOjpIZXgyQmluKGFyZ3ZbMF0sIGtleSwgc2l6ZW9mKGtleSkpKSA9PSBPVF9NQVNURVJfS0VZX1NJWkUsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgbWVtY3B5KHNEYXRhc2V0Lm1NYXN0ZXJLZXkubTgsIGtleSwgc2l6ZW9mKHNEYXRhc2V0Lm1NYXN0ZXJLZXkpKTsKKyAgICBzRGF0YXNldC5tSXNNYXN0ZXJLZXlTZXQgPSB0cnVlOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NNZXNoTG9jYWxQcmVmaXgob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90SXA2QWRkcmVzcyBwcmVmaXg7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFyZ3ZbMF0sICZwcmVmaXgpKTsKKworICAgIG1lbWNweShzRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04LCBwcmVmaXgubUZpZWxkcy5tOCwgc2l6ZW9mKHNEYXRhc2V0Lm1NZXNoTG9jYWxQcmVmaXgubTgpKTsKKyAgICBzRGF0YXNldC5tSXNNZXNoTG9jYWxQcmVmaXhTZXQgPSB0cnVlOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NOZXR3b3JrTmFtZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc2l6ZV90IGxlbmd0aDsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgVmVyaWZ5T3JFeGl0KChsZW5ndGggPSBzdHJsZW4oYXJndlswXSkpIDw9IE9UX05FVFdPUktfTkFNRV9NQVhfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBtZW1zZXQoJnNEYXRhc2V0Lm1OZXR3b3JrTmFtZSwgMCwgc2l6ZW9mKHNEYXRhc2V0Lm1OZXR3b3JrTmFtZSkpOworICAgIG1lbWNweShzRGF0YXNldC5tTmV0d29ya05hbWUubTgsIGFyZ3ZbMF0sIGxlbmd0aCk7CisgICAgc0RhdGFzZXQubUlzTmV0d29ya05hbWVTZXQgPSB0cnVlOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEludGVycHJldGVyOjpQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICBzRGF0YXNldC5tUGFuSWQgPSBzdGF0aWNfY2FzdDxvdFBhbklkPih2YWx1ZSk7CisgICAgc0RhdGFzZXQubUlzUGFuSWRTZXQgPSB0cnVlOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NQZW5kaW5nVGltZXN0YW1wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSW50ZXJwcmV0ZXI6OlBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgIHNEYXRhc2V0Lm1QZW5kaW5nVGltZXN0YW1wID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICBzRGF0YXNldC5tSXNQZW5kaW5nVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpQcm9jZXNzTWdtdFNldENvbW1hbmQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90T3BlcmF0aW9uYWxEYXRhc2V0IGRhdGFzZXQ7CisgICAgdWludDhfdCB0bHZzWzEyOF07CisgICAgbG9uZyB2YWx1ZTsKKyAgICBpbnQgbGVuZ3RoID0gMDsKKyAgICBvdElwNkFkZHJlc3MgcHJlZml4OworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG1lbXNldCgmZGF0YXNldCwgMCwgc2l6ZW9mKGRhdGFzZXQpKTsKKworICAgIGZvciAodWludDhfdCBpbmRleCA9IDE7IGluZGV4IDwgYXJnYzsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJhY3RpdmV0aW1lc3RhbXAiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoaW5kZXggPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGRhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbKytpbmRleF0sIHZhbHVlKSk7CisgICAgICAgICAgICBkYXRhc2V0Lm1BY3RpdmVUaW1lc3RhbXAgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgInBlbmRpbmd0aW1lc3RhbXAiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoaW5kZXggPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGRhdGFzZXQubUlzUGVuZGluZ1RpbWVzdGFtcFNldCA9IHRydWU7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSW50ZXJwcmV0ZXI6OlBhcnNlTG9uZyhhcmd2WysraW5kZXhdLCB2YWx1ZSkpOworICAgICAgICAgICAgZGF0YXNldC5tUGVuZGluZ1RpbWVzdGFtcCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAibWFzdGVya2V5IikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGluZGV4IDwgYXJnYywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICBkYXRhc2V0Lm1Jc01hc3RlcktleVNldCA9IHRydWU7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKGxlbmd0aCA9IEludGVycHJldGVyOjpIZXgyQmluKGFyZ3ZbKytpbmRleF0sIGRhdGFzZXQubU1hc3RlcktleS5tOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRhdGFzZXQubU1hc3RlcktleS5tOCkpKSA9PSBPVF9NQVNURVJfS0VZX1NJWkUsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJuZXR3b3JrbmFtZSIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgZGF0YXNldC5tSXNOZXR3b3JrTmFtZVNldCA9IHRydWU7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oc3RybGVuKGFyZ3ZbKytpbmRleF0pKSkgPD0gT1RfTkVUV09SS19OQU1FX01BWF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgbWVtc2V0KCZkYXRhc2V0Lm1OZXR3b3JrTmFtZSwgMCwgc2l6ZW9mKHNEYXRhc2V0Lm1OZXR3b3JrTmFtZSkpOworICAgICAgICAgICAgbWVtY3B5KGRhdGFzZXQubU5ldHdvcmtOYW1lLm04LCBhcmd2W2luZGV4XSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiZXh0cGFuaWQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoaW5kZXggPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGRhdGFzZXQubUlzRXh0ZW5kZWRQYW5JZFNldCA9IHRydWU7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoSW50ZXJwcmV0ZXI6OkhleDJCaW4oYXJndlsrK2luZGV4XSwgZGF0YXNldC5tRXh0ZW5kZWRQYW5JZC5tOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZGF0YXNldC5tRXh0ZW5kZWRQYW5JZC5tOCkpID49IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgImxvY2FscHJlZml4IikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGluZGV4IDwgYXJnYywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICBkYXRhc2V0Lm1Jc01lc2hMb2NhbFByZWZpeFNldCA9IHRydWU7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2WysraW5kZXhdLCAmcHJlZml4KSk7CisgICAgICAgICAgICBtZW1jcHkoZGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04LCBwcmVmaXgubUZpZWxkcy5tOCwgc2l6ZW9mKGRhdGFzZXQubU1lc2hMb2NhbFByZWZpeC5tOCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgImRlbGF5dGltZXIiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoaW5kZXggPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGRhdGFzZXQubUlzRGVsYXlTZXQgPSB0cnVlOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEludGVycHJldGVyOjpQYXJzZUxvbmcoYXJndlsrK2luZGV4XSwgdmFsdWUpKTsKKyAgICAgICAgICAgIGRhdGFzZXQubURlbGF5ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJwYW5pZCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgZGF0YXNldC5tSXNQYW5JZFNldCA9IHRydWU7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSW50ZXJwcmV0ZXI6OlBhcnNlTG9uZyhhcmd2WysraW5kZXhdLCB2YWx1ZSkpOworICAgICAgICAgICAgZGF0YXNldC5tUGFuSWQgPSBzdGF0aWNfY2FzdDxvdFBhbklkPih2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiY2hhbm5lbCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgZGF0YXNldC5tSXNDaGFubmVsU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbKytpbmRleF0sIHZhbHVlKSk7CisgICAgICAgICAgICBkYXRhc2V0Lm1DaGFubmVsID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJjaGFubmVsbWFzayIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgZGF0YXNldC5tSXNDaGFubmVsTWFza1BhZ2UwU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbKytpbmRleF0sIHZhbHVlKSk7CisgICAgICAgICAgICBkYXRhc2V0Lm1DaGFubmVsTWFza1BhZ2UwID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJiaW5hcnkiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKGluZGV4ICsgMSkgPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oKHN0cmxlbihhcmd2WysraW5kZXhdKSArIDEpIC8gMik7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIDw9IHNpemVvZih0bHZzKSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChJbnRlcnByZXRlcjo6SGV4MkJpbihhcmd2W2luZGV4XSwgdGx2cywgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGxlbmd0aCkpID49IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0cmNtcChhcmd2WzBdLCAiYWN0aXZlIikgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdERhdGFzZXRTZW5kTWdtdEFjdGl2ZVNldChhSW5zdGFuY2UsICZkYXRhc2V0LCB0bHZzLCBzdGF0aWNfY2FzdDx1aW50OF90PihsZW5ndGgpKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAicGVuZGluZyIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nU2V0KGFJbnN0YW5jZSwgJmRhdGFzZXQsIHRsdnMsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc01nbXRHZXRDb21tYW5kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdE9wZXJhdGlvbmFsRGF0YXNldCBkYXRhc2V0OworICAgIHVpbnQ4X3QgdGx2c1szMl07CisgICAgbG9uZyB2YWx1ZTsKKyAgICBpbnQgbGVuZ3RoID0gMDsKKyAgICBib29sIGRlc3RBZGRyU3BlY2lmaWVkID0gZmFsc2U7CisgICAgb3RJcDZBZGRyZXNzIGFkZHJlc3M7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgbWVtc2V0KCZkYXRhc2V0LCAwLCBzaXplb2YoZGF0YXNldCkpOworCisgICAgZm9yICh1aW50OF90IGluZGV4ID0gMTsgaW5kZXggPCBhcmdjOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSA8IHNpemVvZih0bHZzKSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiYWN0aXZldGltZXN0YW1wIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdGx2c1tsZW5ndGgrK10gPSBPVF9NRVNIQ09QX1RMVl9BQ1RJVkVUSU1FU1RBTVA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAicGVuZGluZ3RpbWVzdGFtcCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfUEVORElOR1RJTUVTVEFNUDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJtYXN0ZXJrZXkiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB0bHZzW2xlbmd0aCsrXSA9IE9UX01FU0hDT1BfVExWX01BU1RFUktFWTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJuZXR3b3JrbmFtZSIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfTkVUV09SS05BTUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiZXh0cGFuaWQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB0bHZzW2xlbmd0aCsrXSA9IE9UX01FU0hDT1BfVExWX0VYVFBBTklEOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgImxvY2FscHJlZml4IikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdGx2c1tsZW5ndGgrK10gPSBPVF9NRVNIQ09QX1RMVl9NRVNITE9DQUxQUkVGSVg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiZGVsYXl0aW1lciIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfREVMQVlUSU1FUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJwYW5pZCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfUEFOSUQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiY2hhbm5lbCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfQ0hBTk5FTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJiaW5hcnkiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKGluZGV4ICsgMSkgPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8bG9uZz4oc3RybGVuKGFyZ3ZbKytpbmRleF0pICsgMSkgLyAyOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWUpIDw9IChzaXplb2YodGx2cykgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkpLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KEludGVycHJldGVyOjpIZXgyQmluKGFyZ3ZbaW5kZXhdLCB0bHZzICsgbGVuZ3RoLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4odmFsdWUpKSA+PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgbGVuZ3RoICs9IHZhbHVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgImFkZHJlc3MiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoaW5kZXggPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFyZ3ZbKytpbmRleF0sICZhZGRyZXNzKSk7CisgICAgICAgICAgICBkZXN0QWRkclNwZWNpZmllZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0cmNtcChhcmd2WzBdLCAiYWN0aXZlIikgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdERhdGFzZXRTZW5kTWdtdEFjdGl2ZUdldChhSW5zdGFuY2UsIHRsdnMsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0QWRkclNwZWNpZmllZCA/ICZhZGRyZXNzIDogTlVMTCkpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInBlbmRpbmciKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90RGF0YXNldFNlbmRNZ210UGVuZGluZ0dldChhSW5zdGFuY2UsIHRsdnMsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEFkZHJTcGVjaWZpZWQgPyAmYWRkcmVzcyA6IE5VTEwpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc1BTS2Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQxNl90IGxlbmd0aDsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChzdHJsZW4oYXJndlswXSkgKyAxKSAvIDIpOworICAgIFZlcmlmeU9yRXhpdChsZW5ndGggPD0gT1RfUFNLQ19NQVhfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBWZXJpZnlPckV4aXQoSW50ZXJwcmV0ZXI6OkhleDJCaW4oYXJndlswXSwgc0RhdGFzZXQubVBTS2MubTggKyBPVF9QU0tDX01BWF9TSVpFIC0gbGVuZ3RoLCBsZW5ndGgpID09IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBzRGF0YXNldC5tSXNQU0tjU2V0ID0gdHJ1ZTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc1NlY3VyaXR5UG9saWN5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgc0RhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1Sb3RhdGlvblRpbWUgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4odmFsdWUpOworICAgIHNEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tRmxhZ3MgPSAwOworCisgICAgaWYgKGFyZ2MgPiAxKQorICAgIHsKKyAgICAgICAgZm9yIChjaGFyICphcmcgPSBhcmd2WzFdOyAqYXJnICE9ICdcMCc7IGFyZysrKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKCphcmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICBzRGF0YXNldC5tU2VjdXJpdHlQb2xpY3kubUZsYWdzIHw9IE9UX1NFQ1VSSVRZX1BPTElDWV9PQlRBSU5fTUFTVEVSX0tFWTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgc0RhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyB8PSBPVF9TRUNVUklUWV9QT0xJQ1lfTkFUSVZFX0NPTU1JU1NJT05JTkc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgICAgIHNEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tRmxhZ3MgfD0gT1RfU0VDVVJJVFlfUE9MSUNZX1JPVVRFUlM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgICAgIHNEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tRmxhZ3MgfD0gT1RfU0VDVVJJVFlfUE9MSUNZX0VYVEVSTkFMX0NPTU1JU1NJT05FUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgICAgICAgc0RhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyB8PSBPVF9TRUNVUklUWV9QT0xJQ1lfQkVBQ09OUzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc0RhdGFzZXQubUlzU2VjdXJpdHlQb2xpY3lTZXQgPSB0cnVlOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKworfSAgLy8gbmFtZXNwYWNlIENsaQorfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY2xpL2NsaV9kYXRhc2V0LmhwcCBiL3NyYy9jbGkvY2xpX2RhdGFzZXQuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNDY0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2xpL2NsaV9kYXRhc2V0LmhwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBDTEkgaW50ZXJwcmV0ZXIuCisgKi8KKworI2lmbmRlZiBDTElfREFUQVNFVF9IUFBfCisjZGVmaW5lIENMSV9EQVRBU0VUX0hQUF8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAiY2xpL2NsaV9zZXJ2ZXIuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENsaSB7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIENMSSBjb21tYW5kLgorICoKKyAqLworc3RydWN0IERhdGFzZXRDb21tYW5kCit7CisgICAgY29uc3QgY2hhciAqbU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBzdHJpbmcuCisgICAgb3RFcnJvcigqbUNvbW1hbmQpKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7ICAvLy88IEEgZnVuY3Rpb24gcG9pbnRlciB0byBwcm9jZXNzIHRoZSBjb21tYW5kLgorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIENMSSBpbnRlcnByZXRlci4KKyAqCisgKi8KK2NsYXNzIERhdGFzZXQKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnRlcnByZXRzIGEgbGlzdCBvZiBDTEkgYXJndW1lbnRzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYXJnYyAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhcmd2LgorICAgICAqIEBwYXJhbVtpbl0gIGFyZ3YgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10sIFNlcnZlciAmYVNlcnZlcik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgT3V0cHV0Qnl0ZXMoY29uc3QgdWludDhfdCAqYUJ5dGVzLCB1aW50OF90IGFMZW5ndGgpOworICAgIHN0YXRpYyBvdEVycm9yIFByaW50KG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCk7CisKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzSGVscChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHN0YXRpYyBvdEVycm9yIFByb2Nlc3NBY3RpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzQWN0aXZlVGltZXN0YW1wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc0NoYW5uZWwob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzQ2hhbm5lbE1hc2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzQ2xlYXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzQ29tbWl0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc0RlbGF5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc0V4dFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc01hc3RlcktleShvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHN0YXRpYyBvdEVycm9yIFByb2Nlc3NNZXNoTG9jYWxQcmVmaXgob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzTmV0d29ya05hbWUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzUGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzUGVuZGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHN0YXRpYyBvdEVycm9yIFByb2Nlc3NQZW5kaW5nVGltZXN0YW1wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc01nbXRTZXRDb21tYW5kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc01nbXRHZXRDb21tYW5kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc1BTS2Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzU2VjdXJpdHlQb2xpY3kob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKworICAgIHN0YXRpYyBjb25zdCBEYXRhc2V0Q29tbWFuZCBzQ29tbWFuZHNbXTsKKyAgICBzdGF0aWMgb3RPcGVyYXRpb25hbERhdGFzZXQgc0RhdGFzZXQ7CisgICAgc3RhdGljIFNlcnZlciAqc1NlcnZlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIENMSV9EQVRBU0VUX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jbGkvY2xpX2luc3RhbmNlLmNwcCBiL3NyYy9jbGkvY2xpX2luc3RhbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzc1OWVlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9jbGlfaW5zdGFuY2UuY3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBDTEkgaW50ZXJwcmV0ZXIgSW5zdGFuY2UgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgImNsaS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK25hbWVzcGFjZSBDbGkgeworCit2b2lkIEludGVycHJldGVyOjpDYWNoZUluc3RhbmNlcygpCit7CisgICAgaWYgKG1BcGlJbnN0YW5jZSkKKyAgICB7CisgICAgICAgIG90RGV2aWNlTGlzdCAqYURldmljZUxpc3QgPSBvdEVudW1lcmF0ZURldmljZXMobUFwaUluc3RhbmNlKTsKKyAgICAgICAgYXNzZXJ0KGFEZXZpY2VMaXN0KTsKKworICAgICAgICBtSW5zdGFuY2VzTGVuZ3RoID0gYURldmljZUxpc3QtPmFEZXZpY2VzTGVuZ3RoID4gTUFYX0NMSV9PVF9JTlNUQU5DRVMgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9DTElfT1RfSU5TVEFOQ0VTIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdClhRGV2aWNlTGlzdC0+YURldmljZXNMZW5ndGg7CisKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbUluc3RhbmNlc0xlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtSW5zdGFuY2VzW2ldLm1JbnRlcnByZXRlciA9IHRoaXM7CisgICAgICAgICAgICBtSW5zdGFuY2VzW2ldLm1JbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0KG1BcGlJbnN0YW5jZSwgJmFEZXZpY2VMaXN0LT5hRGV2aWNlc1tpXSk7CisgICAgICAgICAgICBhc3NlcnQobUluc3RhbmNlc1tpXS5tSW5zdGFuY2UpOworICAgICAgICAgICAgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhtSW5zdGFuY2VzW2ldLm1JbnN0YW5jZSwgJkludGVycHJldGVyOjpzX0hhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkLCAmbUluc3RhbmNlc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBvdEZyZWVNZW1vcnkoYURldmljZUxpc3QpOworCisgICAgICAgIGlmIChtSW5zdGFuY2VzTGVuZ3RoID4gMCkgeyBtSW5zdGFuY2UgPSBtSW5zdGFuY2VzWzBdLm1JbnN0YW5jZTsgfQorICAgIH0KK30KKworI2RlZmluZSBHVUlEX0ZPUk1BVCAieyUwOGxYLSUwNGhYLSUwNGhYLSUwMmhoWCUwMmhoWC0lMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFh9IgorI2RlZmluZSBHVUlEX0FSRyhndWlkKSBndWlkLkRhdGExLCBndWlkLkRhdGEyLCBndWlkLkRhdGEzLCBndWlkLkRhdGE0WzBdLCBndWlkLkRhdGE0WzFdLCBndWlkLkRhdGE0WzJdLCBndWlkLkRhdGE0WzNdLCBndWlkLkRhdGE0WzRdLCBndWlkLkRhdGE0WzVdLCBndWlkLkRhdGE0WzZdLCBndWlkLkRhdGE0WzddCisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NJbnN0YW5jZUxpc3QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkIGluc3RhbmNlcyBmb3VuZDpcclxuIiwgbUluc3RhbmNlc0xlbmd0aCk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtSW5zdGFuY2VzTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBHVUlEIGFEZXZpY2VHdWlkID0gb3RHZXREZXZpY2VHdWlkKG1JbnN0YW5jZXNbaV0ubUluc3RhbmNlKTsKKyAgICAgICAgdWludDMyX3QgYUNvbXBhcnRtZW50ID0gb3RHZXRDb21wYXJ0bWVudElkKG1JbnN0YW5jZXNbaV0ubUluc3RhbmNlKTsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJbJWRdICIgR1VJRF9GT1JNQVQgIiAoQ29tcGFydG1lbnQgJXUpXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBHVUlEX0FSRyhhRGV2aWNlR3VpZCksIGFDb21wYXJ0bWVudCk7CisgICAgfQorfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzSW5zdGFuY2UoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIGlmIChtSW5zdGFuY2UgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJObyBJbnN0YW5jZSBTZXRcclxuIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBHVUlEIGFEZXZpY2VHdWlkID0gb3RHZXREZXZpY2VHdWlkKG1JbnN0YW5jZSk7CisgICAgICAgICAgICB1aW50MzJfdCBhQ29tcGFydG1lbnQgPSBvdEdldENvbXBhcnRtZW50SWQobUluc3RhbmNlKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiWyVkXSAiIEdVSURfRk9STUFUICIgKENvbXBhcnRtZW50ICV1KVxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZUluZGV4LCBHVUlEX0FSRyhhRGV2aWNlR3VpZCksIGFDb21wYXJ0bWVudCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBWZXJpZnlPckV4aXQodmFsdWUgPj0gMCAmJiB2YWx1ZSA8IG1JbnN0YW5jZXNMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICAgICBtSW5zdGFuY2VJbmRleCA9ICh1aW50OF90KXZhbHVlOworICAgICAgICBtSW5zdGFuY2UgPSBtSW5zdGFuY2VzW21JbnN0YW5jZUluZGV4XS5tSW5zdGFuY2U7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NsaS9jbGlfc2VydmVyLmhwcCBiL3NyYy9jbGkvY2xpX3NlcnZlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZlNGI5YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvY2xpX3NlcnZlci5ocHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIGFkZGluZyBhIENMSSBjb21tYW5kIHRvIHRoZSBDTEkgc2VydmVyLgorICovCisKKyNpZm5kZWYgQ0xJX1NFUlZFUl9IUFBfCisjZGVmaW5lIENMSV9TRVJWRVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENsaSB7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBDTEkgc2VydmVyLgorICoKKyAqLworY2xhc3MgU2VydmVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVsaXZlcnMgcmF3IGNoYXJhY3RlcnMgdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGluIHRoZSBvdXRwdXQgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGludCBPdXRwdXQoY29uc3QgY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkgPSAwOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVsaXZlcnMgZm9ybWF0dGVkIG91dHB1dCB0byB0aGUgY2xpZW50LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZtdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICAgICAqIEBwYXJhbVtpbl0gIC4uLiAgIEEgdmFyaWFibGUgbGlzdCBvZiBhcmd1bWVudHMgdG8gZm9ybWF0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyBwbGFjZWQgaW4gdGhlIG91dHB1dCBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZpcnR1YWwgaW50IE91dHB1dEZvcm1hdChjb25zdCBjaGFyICpmbXQsIC4uLikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIENsaQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ0xJX1NFUlZFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY2xpL2NsaV91YXJ0LmNwcCBiL3NyYy9jbGkvY2xpX3VhcnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NzUwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2xpL2NsaV91YXJ0LmNwcApAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgQ0xJIHNlcnZlciBvbiB0aGUgVUFSVCBzZXJ2aWNlLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiY2xpX3VhcnQuaHBwIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jbGkuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworI2luY2x1ZGUgImNsaS9jbGkuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9uZXcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90YXNrbGV0LmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDbGkgeworCitzdGF0aWMgY29uc3QgY2hhciBzQ29tbWFuZFByb21wdFtdID0geyc+JywgJyAnfTsKK3N0YXRpYyBjb25zdCBjaGFyIHNFcmFzZVN0cmluZ1tdID0geydcYicsICcgJywgJ1xiJ307CitzdGF0aWMgY29uc3QgY2hhciBDUk5MW10gPSB7J1xyJywgJ1xuJ307CitVYXJ0ICpVYXJ0OjpzVWFydFNlcnZlcjsKKworc3RhdGljIG90REVGSU5FX0FMSUdORURfVkFSKHNDbGlVYXJ0UmF3LCBzaXplb2YoVWFydCksIHVpbnQ2NF90KTsKKworZXh0ZXJuICJDIiB2b2lkIG90Q2xpVWFydEluaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIFVhcnQ6OnNVYXJ0U2VydmVyID0gbmV3KCZzQ2xpVWFydFJhdykgVWFydChhSW5zdGFuY2UpOworfQorCitVYXJ0OjpVYXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk6CisgICAgbUludGVycHJldGVyKGFJbnN0YW5jZSkKK3sKKyAgICBtUnhMZW5ndGggPSAwOworICAgIG1UeEhlYWQgPSAwOworICAgIG1UeExlbmd0aCA9IDA7CisgICAgbVNlbmRMZW5ndGggPSAwOworCisgICAgb3RQbGF0VWFydEVuYWJsZSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgb3RQbGF0VWFydFJlY2VpdmVkKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgVWFydDo6c1VhcnRTZXJ2ZXItPlJlY2VpdmVUYXNrKGFCdWYsIGFCdWZMZW5ndGgpOworfQorCit2b2lkIFVhcnQ6OlJlY2VpdmVUYXNrKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgY29uc3QgdWludDhfdCAqZW5kOworCisgICAgZW5kID0gYUJ1ZiArIGFCdWZMZW5ndGg7CisKKyAgICBmb3IgKDsgYUJ1ZiA8IGVuZDsgYUJ1ZisrKQorICAgIHsKKyAgICAgICAgc3dpdGNoICgqYUJ1ZikKKyAgICAgICAgeworICAgICAgICBjYXNlICdccic6CisgICAgICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICAgIE91dHB1dChDUk5MLCBzaXplb2YoQ1JOTCkpOworCisgICAgICAgICAgICBpZiAobVJ4TGVuZ3RoID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUnhCdWZmZXJbbVJ4TGVuZ3RoXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgUHJvY2Vzc0NvbW1hbmQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgT3V0cHV0KHNDb21tYW5kUHJvbXB0LCBzaXplb2Yoc0NvbW1hbmRQcm9tcHQpKTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCisKKyAgICAgICAgY2FzZSAweDAzOiAvLyBBU0NJSSBmb3IgQ3RybC1DCisgICAgICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgIGNhc2UgJ1xiJzoKKyAgICAgICAgY2FzZSAxMjc6CisgICAgICAgICAgICBpZiAobVJ4TGVuZ3RoID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBPdXRwdXQoc0VyYXNlU3RyaW5nLCBzaXplb2Yoc0VyYXNlU3RyaW5nKSk7CisgICAgICAgICAgICAgICAgbVJ4QnVmZmVyWy0tbVJ4TGVuZ3RoXSA9ICdcMCc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAobVJ4TGVuZ3RoIDwga1J4QnVmZmVyU2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBPdXRwdXQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KGFCdWYpLCAxKTsKKyAgICAgICAgICAgICAgICBtUnhCdWZmZXJbbVJ4TGVuZ3RoKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmFCdWYpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworb3RFcnJvciBVYXJ0OjpQcm9jZXNzQ29tbWFuZCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKG1SeEJ1ZmZlclttUnhMZW5ndGggLSAxXSA9PSAnXG4nKQorICAgIHsKKyAgICAgICAgbVJ4QnVmZmVyWy0tbVJ4TGVuZ3RoXSA9ICdcMCc7CisgICAgfQorCisgICAgaWYgKG1SeEJ1ZmZlclttUnhMZW5ndGggLSAxXSA9PSAnXHInKQorICAgIHsKKyAgICAgICAgbVJ4QnVmZmVyWy0tbVJ4TGVuZ3RoXSA9ICdcMCc7CisgICAgfQorCisgICAgbUludGVycHJldGVyLlByb2Nlc3NMaW5lKG1SeEJ1ZmZlciwgbVJ4TGVuZ3RoLCAqdGhpcyk7CisKKyAgICBtUnhMZW5ndGggPSAwOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitpbnQgVWFydDo6T3V0cHV0KGNvbnN0IGNoYXIgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgdWludDE2X3QgcmVtYWluaW5nID0ga1R4QnVmZmVyU2l6ZSAtIG1UeExlbmd0aDsKKyAgICB1aW50MTZfdCB0YWlsOworCisgICAgaWYgKGFCdWZMZW5ndGggPiByZW1haW5pbmcpCisgICAgeworICAgICAgICBhQnVmTGVuZ3RoID0gcmVtYWluaW5nOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYUJ1Zkxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgdGFpbCA9IChtVHhIZWFkICsgbVR4TGVuZ3RoKSAlIGtUeEJ1ZmZlclNpemU7CisgICAgICAgIG1UeEJ1ZmZlclt0YWlsXSA9ICphQnVmKys7CisgICAgICAgIG1UeExlbmd0aCsrOworICAgIH0KKworICAgIFNlbmQoKTsKKworICAgIHJldHVybiBhQnVmTGVuZ3RoOworfQorCitpbnQgVWFydDo6T3V0cHV0Rm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIGNoYXIgYnVmW2tNYXhMaW5lTGVuZ3RoXTsKKyAgICB2YV9saXN0IGFwOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOworICAgIHZhX2VuZChhcCk7CisKKyAgICByZXR1cm4gT3V0cHV0KGJ1Ziwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHN0cmxlbihidWYpKSk7Cit9CisKK2ludCBVYXJ0OjpPdXRwdXRGb3JtYXRWKGNvbnN0IGNoYXIgKmFGbXQsIHZhX2xpc3QgYUFwKQoreworICAgIGNoYXIgYnVmW2tNYXhMaW5lTGVuZ3RoXTsKKworICAgIHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBhRm10LCBhQXApOworCisgICAgcmV0dXJuIE91dHB1dChidWYsIHN0YXRpY19jYXN0PHVpbnQxNl90PihzdHJsZW4oYnVmKSkpOworfQorCit2b2lkIFVhcnQ6OlNlbmQodm9pZCkKK3sKKyAgICBWZXJpZnlPckV4aXQobVNlbmRMZW5ndGggPT0gMCk7CisKKyAgICBpZiAobVR4TGVuZ3RoID4ga1R4QnVmZmVyU2l6ZSAtIG1UeEhlYWQpCisgICAgeworICAgICAgICBtU2VuZExlbmd0aCA9IGtUeEJ1ZmZlclNpemUgLSBtVHhIZWFkOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtU2VuZExlbmd0aCA9IG1UeExlbmd0aDsKKyAgICB9CisKKyAgICBpZiAobVNlbmRMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgb3RQbGF0VWFydFNlbmQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KG1UeEJ1ZmZlciArIG1UeEhlYWQpLCBtU2VuZExlbmd0aCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdFVhcnRTZW5kRG9uZSh2b2lkKQoreworICAgIFVhcnQ6OnNVYXJ0U2VydmVyLT5TZW5kRG9uZVRhc2soKTsKK30KKwordm9pZCBVYXJ0OjpTZW5kRG9uZVRhc2sodm9pZCkKK3sKKyAgICBtVHhIZWFkID0gKG1UeEhlYWQgKyBtU2VuZExlbmd0aCkgJSBrVHhCdWZmZXJTaXplOworICAgIG1UeExlbmd0aCAtPSBtU2VuZExlbmd0aDsKKyAgICBtU2VuZExlbmd0aCA9IDA7CisKKyAgICBTZW5kKCk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCit2b2lkIG90UGxhdExvZyhvdExvZ0xldmVsIGFMb2dMZXZlbCwgb3RMb2dSZWdpb24gYUxvZ1JlZ2lvbiwgY29uc3QgY2hhciAqYUZvcm1hdCwgLi4uKQoreworICAgIGlmIChOVUxMID09IFVhcnQ6OnNVYXJ0U2VydmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBhRm9ybWF0KTsKKyAgICBVYXJ0OjpzVWFydFNlcnZlci0+T3V0cHV0Rm9ybWF0VihhRm9ybWF0LCBhcmdzKTsKKyAgICBVYXJ0OjpzVWFydFNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFMb2dMZXZlbCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFMb2dSZWdpb24pOworfQorI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUCisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NsaS9jbGlfdWFydC5ocHAgYi9zcmMvY2xpL2NsaV91YXJ0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDYxZGJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9jbGlfdWFydC5ocHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBhIENMSSBzZXJ2ZXIgb24gdGhlIFVBUlQgc2VydmljZS4KKyAqLworCisjaWZuZGVmIENMSV9VQVJUX0hQUF8KKyNkZWZpbmUgQ0xJX1VBUlRfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY2xpL2NsaS5ocHAiCisjaW5jbHVkZSAiY2xpL2NsaV9zZXJ2ZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90YXNrbGV0LmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDbGkgeworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgQ0xJIHNlcnZlciBvbiB0b3Agb2YgdGhlIFVBUlQgcGxhdGZvcm0gYWJzdHJhY3Rpb24uCisgKgorICovCitjbGFzcyBVYXJ0OiBwdWJsaWMgU2VydmVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IKKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICAgICAqCisgICAgICovCisgICAgVWFydChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVsaXZlcnMgcmF3IGNoYXJhY3RlcnMgdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGluIHRoZSBvdXRwdXQgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGludCBPdXRwdXQoY29uc3QgY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBkZWxpdmVycyBmb3JtYXR0ZWQgb3V0cHV0IHRvIHRoZSBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRm10ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgICAgICogQHBhcmFtW2luXSAgLi4uICAgQSB2YXJpYWJsZSBsaXN0IG9mIGFyZ3VtZW50cyB0byBmb3JtYXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBsYWNlZCBpbiB0aGUgb3V0cHV0IHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgdmlydHVhbCBpbnQgT3V0cHV0Rm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRlbGl2ZXJzIGZvcm1hdHRlZCBvdXRwdXQgdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGbXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAgICAgKiBAcGFyYW1baW5dICBhQXAgICBBIHZhcmlhYmxlIGxpc3Qgb2YgYXJndW1lbnRzIGZvciBmb3JtYXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBsYWNlZCBpbiB0aGUgb3V0cHV0IHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgaW50IE91dHB1dEZvcm1hdFYoY29uc3QgY2hhciAqYUZtdCwgdmFfbGlzdCBhQXApOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJwcmV0ZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGludGVycHJldGVyIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIEludGVycHJldGVyICZHZXRJbnRlcnByZXRlcih2b2lkKSB7IHJldHVybiBtSW50ZXJwcmV0ZXI7IH0KKworICAgIHZvaWQgUmVjZWl2ZVRhc2soY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisgICAgdm9pZCBTZW5kRG9uZVRhc2sodm9pZCk7CisKKyAgICBzdGF0aWMgVWFydCAqc1VhcnRTZXJ2ZXI7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1J4QnVmZmVyU2l6ZSA9IDUxMiwKKyAgICAgICAga1R4QnVmZmVyU2l6ZSA9IDEwMjQsCisgICAgICAgIGtNYXhMaW5lTGVuZ3RoID0gMTI4LAorICAgIH07CisKKyAgICBvdEVycm9yIFByb2Nlc3NDb21tYW5kKHZvaWQpOworICAgIHZvaWQgU2VuZCh2b2lkKTsKKworICAgIGNoYXIgbVJ4QnVmZmVyW2tSeEJ1ZmZlclNpemVdOworICAgIHVpbnQxNl90IG1SeExlbmd0aDsKKworICAgIGNoYXIgbVR4QnVmZmVyW2tUeEJ1ZmZlclNpemVdOworICAgIHVpbnQxNl90IG1UeEhlYWQ7CisgICAgdWludDE2X3QgbVR4TGVuZ3RoOworCisgICAgdWludDE2X3QgbVNlbmRMZW5ndGg7CisKKyAgICBJbnRlcnByZXRlciBtSW50ZXJwcmV0ZXI7CisKKyAgICBmcmllbmQgY2xhc3MgSW50ZXJwcmV0ZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgQ2xpCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBDTElfVUFSVF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY2xpL2NsaV91ZHAuY3BwIGIvc3JjL2NsaS9jbGlfdWRwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjhhOTQzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9jbGlfdWRwLmNwcApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgQ0xJIHNlcnZlciBvbiBhIFVEUCBzb2NrZXQuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjbGlfdWRwLmhwcCIKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImNsaS9jbGkuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDbGkgeworCitVZHA6OlVkcChvdEluc3RhbmNlICphSW5zdGFuY2UsIEludGVycHJldGVyICphSW50ZXJwcmV0ZXIpOgorICAgIG1JbnN0YW5jZShhSW5zdGFuY2UpLAorICAgIG1JbnRlcnByZXRlcihhSW50ZXJwcmV0ZXIpCit7CisgICAgbWVtc2V0KCZtU29ja2V0LCAwLCBzaXplb2YobVNvY2tldCkpOworICAgIG1lbXNldCgmbVBlZXIsIDAsIHNpemVvZihtUGVlcikpOworfQorCitvdEVycm9yIFVkcDo6U3RhcnQodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgb3RTb2NrQWRkciBzb2NrYWRkcjsKKyAgICBtZW1zZXQoJnNvY2thZGRyLCAwLCBzaXplb2Yob3RTb2NrQWRkcikpOworICAgIHNvY2thZGRyLm1Qb3J0ID0gNzMzNTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFVkcE9wZW4obUluc3RhbmNlLCAmbVNvY2tldCwgJlVkcDo6SGFuZGxlVWRwUmVjZWl2ZSwgdGhpcykpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFVkcEJpbmQoJm1Tb2NrZXQsICZzb2NrYWRkcikpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBVZHA6OkhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxVZHAgKj4oYUNvbnRleHQpLT5IYW5kbGVVZHBSZWNlaXZlKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCit2b2lkIFVkcDo6SGFuZGxlVWRwUmVjZWl2ZShvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgdWludDE2X3QgcGF5bG9hZExlbmd0aCA9IG90TWVzc2FnZUdldExlbmd0aChhTWVzc2FnZSkgLSBvdE1lc3NhZ2VHZXRPZmZzZXQoYU1lc3NhZ2UpOworICAgIGNoYXIgYnVmWzUxMl07CisKKyAgICBWZXJpZnlPckV4aXQocGF5bG9hZExlbmd0aCA8PSBzaXplb2YoYnVmKSk7CisgICAgb3RNZXNzYWdlUmVhZChhTWVzc2FnZSwgb3RNZXNzYWdlR2V0T2Zmc2V0KGFNZXNzYWdlKSwgYnVmLCBwYXlsb2FkTGVuZ3RoKTsKKworICAgIGlmIChidWZbcGF5bG9hZExlbmd0aCAtIDFdID09ICdcbicpCisgICAgeworICAgICAgICBidWZbLS1wYXlsb2FkTGVuZ3RoXSA9ICdcMCc7CisgICAgfQorCisgICAgaWYgKGJ1ZltwYXlsb2FkTGVuZ3RoIC0gMV0gPT0gJ1xyJykKKyAgICB7CisgICAgICAgIGJ1ZlstLXBheWxvYWRMZW5ndGhdID0gJ1wwJzsKKyAgICB9CisKKyAgICBtUGVlciA9ICphTWVzc2FnZUluZm87CisKKyAgICBtSW50ZXJwcmV0ZXItPlByb2Nlc3NMaW5lKGJ1ZiwgcGF5bG9hZExlbmd0aCwgKnRoaXMpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworaW50IFVkcDo6T3V0cHV0KGNvbnN0IGNoYXIgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RNZXNzYWdlICptZXNzYWdlOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gb3RVZHBOZXdNZXNzYWdlKG1JbnN0YW5jZSwgdHJ1ZSkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90TWVzc2FnZVNldExlbmd0aChtZXNzYWdlLCBhQnVmTGVuZ3RoKSk7CisgICAgb3RNZXNzYWdlV3JpdGUobWVzc2FnZSwgMCwgYUJ1ZiwgYUJ1Zkxlbmd0aCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VWRwU2VuZCgmbVNvY2tldCwgbWVzc2FnZSwgJm1QZWVyKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VGcmVlKG1lc3NhZ2UpOworICAgICAgICBhQnVmTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gYUJ1Zkxlbmd0aDsKK30KKworaW50IFVkcDo6T3V0cHV0Rm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIGNoYXIgYnVmW2tNYXhMaW5lTGVuZ3RoXTsKKyAgICB2YV9saXN0IGFwOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOworICAgIHZhX2VuZChhcCk7CisKKyAgICByZXR1cm4gT3V0cHV0KGJ1Ziwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHN0cmxlbihidWYpKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NsaS9jbGlfdWRwLmhwcCBiL3NyYy9jbGkvY2xpX3VkcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1ZDc5NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvY2xpX3VkcC5ocHAKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBhIENMSSBzZXJ2ZXIgb24gYSBVRFAgc29ja2V0LgorICovCisKKyNpZm5kZWYgQ0xJX1VEUF9IUFBfCisjZGVmaW5lIENMSV9VRFBfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY2xpL2NsaS5ocHAiCisjaW5jbHVkZSAiY2xpL2NsaV9zZXJ2ZXIuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENsaSB7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBDTEkgc2VydmVyIG9uIHRvcCBvZiBhIFVEUCBzb2NrZXQuCisgKgorICovCitjbGFzcyBVZHA6IHB1YmxpYyBTZXJ2ZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvcgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgICAgICogQHBhcmFtW2luXSAgYUludGVycHJldGVyICBUaGUgSW50ZXJwcmV0ZXIgc3RydWN0dXJlLgorICAgICAqCisgICAgICovCisgICAgVWRwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgSW50ZXJwcmV0ZXIgKmFJbnRlcnByZXRlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgdGhlIENMSSBzZXJ2ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBzZXJ2ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0YXJ0KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVsaXZlcnMgcmF3IGNoYXJhY3RlcnMgdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGluIHRoZSBvdXRwdXQgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGludCBPdXRwdXQoY29uc3QgY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBkZWxpdmVycyBmb3JtYXR0ZWQgb3V0cHV0IHRvIHRoZSBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRm10ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgICAgICogQHBhcmFtW2luXSAgLi4uICAgQSB2YXJpYWJsZSBsaXN0IG9mIGFyZ3VtZW50cyB0byBmb3JtYXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBsYWNlZCBpbiB0aGUgb3V0cHV0IHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgdmlydHVhbCBpbnQgT3V0cHV0Rm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4TGluZUxlbmd0aCA9IDEyOCwKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVVkcFJlY2VpdmUob3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKworICAgIG90VWRwU29ja2V0IG1Tb2NrZXQ7CisgICAgb3RNZXNzYWdlSW5mbyBtUGVlcjsKKyAgICBvdEluc3RhbmNlICptSW5zdGFuY2U7CisgICAgSW50ZXJwcmV0ZXIgKm1JbnRlcnByZXRlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIENMSV9VRFBfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvTWFrZWZpbGUuYW0gYi9zcmMvY29yZS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODMzZGUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwzMjAgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworbGliX0xJQlJBUklFUyAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgbGlib3BlbnRocmVhZC1mdGQuYSAgICAgICAgICAgICAgIFwKKyAgICBsaWJvcGVudGhyZWFkLW10ZC5hICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ1BQRkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgIFwKKyAgICAtSSR7YWJzX3RvcF9zcmNkaXJ9L3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlIFwKKyAgICAkKE1CRURUTFNfQ1BQRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQoT1BFTlRIUkVBRF9UQVJHRVRfREVGSU5FUykgICAgICBcCisgICAgJChOVUxMKQorCisKK2xpYm9wZW50aHJlYWRfZnRkX2FfQ1BQRkxBR1MgICAgICAgID0gXAorICAgICQoQ1BQRkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICBcCisgICAgLURPUEVOVEhSRUFEX0ZURD0xICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbXRkX2FfQ1BQRkxBR1MgICAgICAgID0gXAorICAgICQoQ1BQRkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICBcCisgICAgLURPUEVOVEhSRUFEX01URD0xICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE5vdGUgdG8gbWFpbnRhaW5lci9kZXZlbG9wZXJzIGFib3V0ICJTT1VSQ0VTX0NPTU1PTiIKKyMKKyMgVGhlIHRyYWRpdGlvbmFsIG1ldGhvZCBmb3IgR05VIHN0eWxlIE1ha2VmaWxlLmFtIGZpbGVzCisjIGlzIHRvIGhhdmUgSUYgc3RhdGVtZW50cyB3aXRoaW4gdGhlIE1ha2VmaWxlCisjCisjIFRoZXNlIElGIHN0YXRlbWVudHMgd291bGQgYWRkIChvciBub3QgYWRkKSBjZXJ0YWluCisjIHNvdXJjZSBmaWxlcyBmcm9tIHRoZSBidWlsZC9saWJyYXJ5IGJlaW5nIGJ1aWx0LgorIworIyBJbiBnZW5lcmFsLCBJREVzIGRvIG5vdCBlYXNpbHkgc3VwcG9ydCB0aGlzLgorIyBTb21lIGRvLCBzb21lIGRvIG5vdCwgdGhvc2UgdGhhdCBkbyBzdXBwb3J0IGl0CisjIG9mdGVuIGRvIHNvIGluIGEgdmVyeSBkaWZmZXJlbnQgb3IgY29tcGxleCB3YXkuCisjIEJvdHRvbSBsaW5lOiBJdCBpcyBhIHZlcnkgbWl4ZWQgYmFnIG9mIHJlc3VsdHMuCisjCisjIFRodXMgd2UgYmVuZCB0byB0aGUgSURFcywgYW5kIGltcG9zZSB0aGVzZSBydWxlczoKKyMKKyMgUnVsZSAjMQorIyAgICAgQWxsIGNvZGUoZmlsZXMpIHNob3VsZCBiZSBjb21waWxlZAorIyAgICAgRXZlbiBpZiBpdCBpcyBub3QgdXNlZCBvciByZXF1aXJlZAorIworIyAgICAgRm9yIGV4YW1wbGU6IEluIHRoZSBNVEQgYnVpbGQsIHNvbWUgZmVhdHVyZXMKKyMgICAgIGFyZSBkaXNhYmxlZCBhbmQgdGh1cyBpbiB0aGUgdHJhZGl0aW9uYWwgc2NoZW1lCisjICAgICBzb3VyY2UgZmlsZXMgY291bGQgYmUgZXhjbHVkZWQgU09VUkNFU19DT01NT04KKyMgICAgIHZpYSBtYWtlZmlsZSBJRi9FTFNFL0VORElGIGNvbnN0cnVjdHMuCisjCisjICAgICBUaGlzIG1ha2VzIGl0IGltcG9zc2libHkgaGFyZCBmb3IgSURFcy4KKyMgICAgIFRodXMgd2UgY29tcGlsZSBldmVyeXRoaW5nLgorIworIyAgICAgQW5kIHRoZW4gcmVseSB1cG9uIFJ1bGUgIzIuCisjCisjIFJ1bGUgIzIKKyMgICAgIEZpbGVzIHRoYXQgYXJlIG5vdCByZXF1aXJlZCwgaW4gY2VydGFpbgorIyAgICAgY29uZmlndXJhdGlvbnMgcmVxdWlyZSBhcHByb3ByaWF0ZSB3cmFwcGVycworIyAgICAgU3VjaCBhcyAjaWYvI2Vsc2UvI2VuZGlmCisjCisjICAgICBUaGUgbmV0IHJlc3VsdCBpcyBzb3J0IG9mIGFuICJlbXB0eSB0cmFuc2xhdGlvbiB1bml0IgorIworCitTT1VSQ0VTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBhcGkvY29hcF9hcGkuY3BwICAgICAgICAgICAgICAgICAgXAorICAgIGFwaS9jb21taXNzaW9uZXJfYXBpLmNwcCAgICAgICAgICBcCisgICAgYXBpL2NoaWxkX3N1cGVydmlzaW9uX2FwaS5jcHAgICAgIFwKKyAgICBhcGkvY3J5cHRvX2FwaS5jcHAgICAgICAgICAgICAgICAgXAorICAgIGFwaS9ib3JkZXJfcm91dGVyX2FwaS5jcHAgICAgICAgICBcCisgICAgYXBpL2RhdGFzZXRfYXBpLmNwcCAgICAgICAgICAgICAgIFwKKyAgICBhcGkvZGF0YXNldF9mdGRfYXBpLmNwcCAgICAgICAgICAgXAorICAgIGFwaS9kaGNwNl9hcGkuY3BwICAgICAgICAgICAgICAgICBcCisgICAgYXBpL2RoY3A2X2FwaS5jcHAgICAgICAgICAgICAgICAgIFwKKyAgICBhcGkvZG5zX2FwaS5jcHAgICAgICAgICAgICAgICAgICAgXAorICAgIGFwaS9pY21wNl9hcGkuY3BwICAgICAgICAgICAgICAgICBcCisgICAgYXBpL2luc3RhbmNlX2FwaS5jcHAgICAgICAgICAgICAgIFwKKyAgICBhcGkvaXA2X2FwaS5jcHAgICAgICAgICAgICAgICAgICAgXAorICAgIGFwaS9qYW1fZGV0ZWN0aW9uX2FwaS5jcHAgICAgICAgICBcCisgICAgYXBpL2pvaW5lcl9hcGkuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBhcGkvbGlua19hcGkuY3BwICAgICAgICAgICAgICAgICAgXAorICAgIGFwaS9saW5rX3Jhd19hcGkuY3BwICAgICAgICAgICAgICBcCisgICAgYXBpL21lc3NhZ2VfYXBpLmNwcCAgICAgICAgICAgICAgIFwKKyAgICBhcGkvbmV0ZGF0YV9hcGkuY3BwICAgICAgICAgICAgICAgXAorICAgIGFwaS90YXNrbGV0X2FwaS5jcHAgICAgICAgICAgICAgICBcCisgICAgYXBpL3RocmVhZF9hcGkuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBhcGkvdGhyZWFkX2Z0ZF9hcGkuY3BwICAgICAgICAgICAgXAorICAgIGFwaS90bWZfcHJveHlfYXBpLmNwcCAgICAgICAgICAgICBcCisgICAgYXBpL3VkcF9hcGkuY3BwICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb2FwL2NvYXAuY3BwICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvYXAvY29hcF9oZWFkZXIuY3BwICAgICAgICAgICAgICBcCisgICAgY29hcC9jb2FwX3NlY3VyZS5jcHAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vY3JjMTYuY3BwICAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi9sb2dnaW5nLmNwcCAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL2xvY2F0b3IuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vbWVzc2FnZS5jcHAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi90YXNrbGV0LmNwcCAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL3RpbWVyLmNwcCAgICAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vdGx2cy5jcHAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi90cmlja2xlX3RpbWVyLmNwcCAgICAgICAgICBcCisgICAgY3J5cHRvL2Flc19jY20uY3BwICAgICAgICAgICAgICAgIFwKKyAgICBjcnlwdG8vYWVzX2VjYi5jcHAgICAgICAgICAgICAgICAgXAorICAgIGNyeXB0by9obWFjX3NoYTI1Ni5jcHAgICAgICAgICAgICBcCisgICAgY3J5cHRvL21iZWR0bHMuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBjcnlwdG8vcGJrZGYyX2NtYWMuY3BwICAgICAgICAgICAgXAorICAgIGNyeXB0by9zaGEyNTYuY3BwICAgICAgICAgICAgICAgICBcCisgICAgbWFjL21hYy5jcHAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWMvbWFjX2JsYWNrbGlzdC5jcHAgICAgICAgICAgICAgXAorICAgIG1hYy9tYWNfZnJhbWUuY3BwICAgICAgICAgICAgICAgICBcCisgICAgbWFjL21hY193aGl0ZWxpc3QuY3BwICAgICAgICAgICAgIFwKKyAgICBtZXNoY29wL2Fubm91bmNlX2JlZ2luX2NsaWVudC5jcHAgXAorICAgIG1lc2hjb3AvY29tbWlzc2lvbmVyLmNwcCAgICAgICAgICBcCisgICAgbWVzaGNvcC9kYXRhc2V0LmNwcCAgICAgICAgICAgICAgIFwKKyAgICBtZXNoY29wL2RhdGFzZXRfbG9jYWwuY3BwICAgICAgICAgXAorICAgIG1lc2hjb3AvZGF0YXNldF9tYW5hZ2VyLmNwcCAgICAgICBcCisgICAgbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfZnRkLmNwcCAgIFwKKyAgICBtZXNoY29wL2R0bHMuY3BwICAgICAgICAgICAgICAgICAgXAorICAgIG1lc2hjb3AvZW5lcmd5X3NjYW5fY2xpZW50LmNwcCAgICBcCisgICAgbWVzaGNvcC9qb2luZXIuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBtZXNoY29wL2pvaW5lcl9yb3V0ZXIuY3BwICAgICAgICAgXAorICAgIG1lc2hjb3AvbGVhZGVyLmNwcCAgICAgICAgICAgICAgICBcCisgICAgbWVzaGNvcC9wYW5pZF9xdWVyeV9jbGllbnQuY3BwICAgIFwKKyAgICBtZXNoY29wL3RpbWVzdGFtcC5jcHAgICAgICAgICAgICAgXAorICAgIG1lc2hjb3AvbWVzaGNvcF90bHZzLmNwcCAgICAgICAgICBcCisgICAgbmV0L2RoY3A2X2NsaWVudC5jcHAgICAgICAgICAgICAgIFwKKyAgICBuZXQvZGhjcDZfc2VydmVyLmNwcCAgICAgICAgICAgICAgXAorICAgIG5ldC9kbnNfY2xpZW50LmNwcCAgICAgICAgICAgICAgICBcCisgICAgbmV0L2ljbXA2LmNwcCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvaXA2LmNwcCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9pcDZfYWRkcmVzcy5jcHAgICAgICAgICAgICAgICBcCisgICAgbmV0L2lwNl9maWx0ZXIuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvaXA2X21wbC5jcHAgICAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9pcDZfcm91dGVzLmNwcCAgICAgICAgICAgICAgICBcCisgICAgbmV0L25ldGlmLmNwcCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvdWRwNi5jcHAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmNwcCAgICAgICBcCisgICAgdGhyZWFkL2Fubm91bmNlX2JlZ2luX3NlcnZlci5jcHAgIFwKKyAgICB0aHJlYWQvZGF0YV9wb2xsX21hbmFnZXIuY3BwICAgICAgXAorICAgIHRocmVhZC9lbmVyZ3lfc2Nhbl9zZXJ2ZXIuY3BwICAgICBcCisgICAgdGhyZWFkL2tleV9tYW5hZ2VyLmNwcCAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvbGlua19xdWFsaXR5LmNwcCAgICAgICAgICAgXAorICAgIHRocmVhZC9sb3dwYW4uY3BwICAgICAgICAgICAgICAgICBcCisgICAgdGhyZWFkL21lc2hfZm9yd2FyZGVyLmNwcCAgICAgICAgIFwKKyAgICB0aHJlYWQvbWxlLmNwcCAgICAgICAgICAgICAgICAgICAgXAorICAgIHRocmVhZC9tbGVfcm91dGVyLmNwcCAgICAgICAgICAgICBcCisgICAgdGhyZWFkL25ldHdvcmtfZGF0YS5jcHAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlci5jcHAgICAgXAorICAgIHRocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyX2Z0ZC5jcHAgXAorICAgIHRocmVhZC9uZXR3b3JrX2RhdGFfbG9jYWwuY3BwICAgICBcCisgICAgdGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpYy5jcHAgICAgIFwKKyAgICB0aHJlYWQvcGFuaWRfcXVlcnlfc2VydmVyLmNwcCAgICAgXAorICAgIHRocmVhZC9zcmNfbWF0Y2hfY29udHJvbGxlci5jcHAgICBcCisgICAgdGhyZWFkL3RocmVhZF9uZXRpZi5jcHAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvdG1mX3Byb3h5LmNwcCAgICAgICAgICAgICAgXAorICAgIHRocmVhZC90b3BvbG9neS5jcHAgICAgICAgICAgICAgICBcCisgICAgdXRpbHMvY2hpbGRfc3VwZXJ2aXNpb24uY3BwICAgICAgIFwKKyAgICB1dGlscy9qYW1fZGV0ZWN0b3IuY3BwICAgICAgICAgICAgXAorICAgIHV0aWxzL21pc3Npbmdfc3RybGNweS5jICAgICAgICAgICBcCisgICAgdXRpbHMvbWlzc2luZ19zdHJsY2F0LmMgICAgICAgICAgIFwKKyAgICB1dGlscy9taXNzaW5nX3N0cm5sZW4uYyAgICAgICAgICAgXAorICAgIHV0aWxzL3NsYWFjX2FkZHJlc3MuY3BwICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisKK2xpYm9wZW50aHJlYWRfbXRkX2FfU09VUkNFUyAgICAgICAgID0gXAorICAgICQoU09VUkNFU19DT01NT04pICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2Z0ZF9hX1NPVVJDRVMgICAgICAgICA9IFwKKyAgICAkKFNPVVJDRVNfQ09NTU9OKSAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworSEVBREVSU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgb3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oICAgICAgICAgIFwKKyAgICBvcGVudGhyZWFkLWNvcmUtZGVmYXVsdC1jb25maWcuaCAgXAorICAgIG9wZW50aHJlYWQtaW5zdGFuY2UuaCAgICAgICAgICAgICBcCisgICAgb3BlbnRocmVhZC1zaW5nbGUtaW5zdGFuY2UuaCAgICAgIFwKKyAgICBhcGkvbGlua19yYXcuaHBwICAgICAgICAgICAgICAgICAgXAorICAgIGNvYXAvY29hcC5ocHAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29hcC9jb2FwX2hlYWRlci5ocHAgICAgICAgICAgICAgIFwKKyAgICBjb2FwL2NvYXBfc2VjdXJlLmhwcCAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi9jb2RlX3V0aWxzLmhwcCAgICAgICAgICAgICBcCisgICAgY29tbW9uL2NvbnRleHQuaHBwICAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vY3JjMTYuaHBwICAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi9kZWJ1Zy5ocHAgICAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL2VuY29kaW5nLmhwcCAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vbG9jYXRvci5ocHAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi9sb2dnaW5nLmhwcCAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL21lc3NhZ2UuaHBwICAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vc2V0dGluZ3MuaHBwICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi9uZXcuaHBwICAgICAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL3Rhc2tsZXQuaHBwICAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vdGltZXIuaHBwICAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi90bHZzLmhwcCAgICAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL3RyaWNrbGVfdGltZXIuaHBwICAgICAgICAgIFwKKyAgICBjcnlwdG8vYWVzX2NjbS5ocHAgICAgICAgICAgICAgICAgXAorICAgIGNyeXB0by9hZXNfZWNiLmhwcCAgICAgICAgICAgICAgICBcCisgICAgY3J5cHRvL2htYWNfc2hhMjU2LmhwcCAgICAgICAgICAgIFwKKyAgICBjcnlwdG8vbWJlZHRscy5ocHAgICAgICAgICAgICAgICAgXAorICAgIGNyeXB0by9wYmtkZjJfY21hYy5oICAgICAgICAgICAgICBcCisgICAgY3J5cHRvL3NoYTI1Ni5ocHAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWMvbWFjLmhwcCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hYy9tYWNfYmxhY2tsaXN0LmhwcCAgICAgICAgICAgICBcCisgICAgbWFjL21hY19ibGFja2xpc3RfaW1wbC5ocHAgICAgICAgIFwKKyAgICBtYWMvbWFjX2JsYWNrbGlzdF9zdHViLmhwcCAgICAgICAgXAorICAgIG1hYy9tYWNfZnJhbWUuaHBwICAgICAgICAgICAgICAgICBcCisgICAgbWFjL21hY193aGl0ZWxpc3QuaHBwICAgICAgICAgICAgIFwKKyAgICBtYWMvbWFjX3doaXRlbGlzdF9pbXBsLmhwcCAgICAgICAgXAorICAgIG1hYy9tYWNfd2hpdGVsaXN0X3N0dWIuaHBwICAgICAgICBcCisgICAgbWVzaGNvcC9hbm5vdW5jZV9iZWdpbl9jbGllbnQuaHBwIFwKKyAgICBtZXNoY29wL2NvbW1pc3Npb25lci5ocHAgICAgICAgICAgXAorICAgIG1lc2hjb3AvZGF0YXNldC5ocHAgICAgICAgICAgICAgICBcCisgICAgbWVzaGNvcC9kYXRhc2V0X2xvY2FsLmhwcCAgICAgICAgIFwKKyAgICBtZXNoY29wL2RhdGFzZXRfbWFuYWdlci5ocHAgICAgICAgXAorICAgIG1lc2hjb3AvZGF0YXNldF9tYW5hZ2VyX2Z0ZC5ocHAgICBcCisgICAgbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfbXRkLmhwcCAgIFwKKyAgICBtZXNoY29wL2R0bHMuaHBwICAgICAgICAgICAgICAgICAgXAorICAgIG1lc2hjb3AvZW5lcmd5X3NjYW5fY2xpZW50LmhwcCAgICBcCisgICAgbWVzaGNvcC9qb2luZXIuaHBwICAgICAgICAgICAgICAgIFwKKyAgICBtZXNoY29wL2pvaW5lcl9yb3V0ZXIuaHBwICAgICAgICAgXAorICAgIG1lc2hjb3AvbGVhZGVyLmhwcCAgICAgICAgICAgICAgICBcCisgICAgbWVzaGNvcC9tZXNoY29wLmhwcCAgICAgICAgICAgICAgIFwKKyAgICBtZXNoY29wL3BhbmlkX3F1ZXJ5X2NsaWVudC5ocHAgICAgXAorICAgIG1lc2hjb3AvdGltZXN0YW1wLmhwcCAgICAgICAgICAgICBcCisgICAgbWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwICAgICAgICAgIFwKKyAgICBuZXQvZGhjcDYuaHBwICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9kaGNwNl9jbGllbnQuaHBwICAgICAgICAgICAgICBcCisgICAgbmV0L2RoY3A2X3NlcnZlci5ocHAgICAgICAgICAgICAgIFwKKyAgICBuZXQvZG5zX2NsaWVudC5ocHAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9kbnNfaGVhZGVycy5ocHAgICAgICAgICAgICAgICBcCisgICAgbmV0L2ljbXA2LmhwcCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvaXA2LmhwcCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9pcDZfYWRkcmVzcy5ocHAgICAgICAgICAgICAgICBcCisgICAgbmV0L2lwNl9oZWFkZXJzLmhwcCAgICAgICAgICAgICAgIFwKKyAgICBuZXQvaXA2X2ZpbHRlci5ocHAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9pcDZfbXBsLmhwcCAgICAgICAgICAgICAgICAgICBcCisgICAgbmV0L2lwNl9yb3V0ZXMuaHBwICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvbmV0aWYuaHBwICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9zb2NrZXQuaHBwICAgICAgICAgICAgICAgICAgICBcCisgICAgbmV0L3RjcC5ocHAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvdWRwNi5ocHAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmhwcCAgICAgICBcCisgICAgdGhyZWFkL2Fubm91bmNlX2JlZ2luX3NlcnZlci5ocHAgIFwKKyAgICB0aHJlYWQvZGF0YV9wb2xsX21hbmFnZXIuaHBwICAgICAgXAorICAgIHRocmVhZC9lbmVyZ3lfc2Nhbl9zZXJ2ZXIuaHBwICAgICBcCisgICAgdGhyZWFkL2tleV9tYW5hZ2VyLmhwcCAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvbGlua19xdWFsaXR5LmhwcCAgICAgICAgICAgXAorICAgIHRocmVhZC9sb3dwYW4uaHBwICAgICAgICAgICAgICAgICBcCisgICAgdGhyZWFkL21lc2hfZm9yd2FyZGVyLmhwcCAgICAgICAgIFwKKyAgICB0aHJlYWQvbWxlLmhwcCAgICAgICAgICAgICAgICAgICAgXAorICAgIHRocmVhZC9tbGVfY29uc3RhbnRzLmhwcCAgICAgICAgICBcCisgICAgdGhyZWFkL21sZV9yb3V0ZXIuaHBwICAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvbWxlX3JvdXRlcl9mdGQuaHBwICAgICAgICAgXAorICAgIHRocmVhZC9tbGVfcm91dGVyX210ZC5ocHAgICAgICAgICBcCisgICAgdGhyZWFkL21sZV90bHZzLmhwcCAgICAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvbmV0d29ya19kYXRhLmhwcCAgICAgICAgICAgXAorICAgIHRocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyLmhwcCAgICBcCisgICAgdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXJfZnRkLmhwcCBcCisgICAgdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXJfbXRkLmhwcCBcCisgICAgdGhyZWFkL25ldHdvcmtfZGF0YV9sb2NhbC5ocHAgICAgIFwKKyAgICB0aHJlYWQvbmV0d29ya19kYXRhX3RsdnMuaHBwICAgICAgXAorICAgIHRocmVhZC9wYW5pZF9xdWVyeV9zZXJ2ZXIuaHBwICAgICBcCisgICAgdGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpYy5ocHAgICAgIFwKKyAgICB0aHJlYWQvbmV0d29ya19kaWFnbm9zdGljX3RsdnMuaHBwIFwKKyAgICB0aHJlYWQvc3JjX21hdGNoX2NvbnRyb2xsZXIuaHBwICAgXAorICAgIHRocmVhZC90aHJlYWRfbmV0aWYuaHBwICAgICAgICAgICBcCisgICAgdGhyZWFkL3RocmVhZF90bHZzLmhwcCAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAgICAgICAgXAorICAgIHRocmVhZC90bWZfcHJveHkuaHBwICAgICAgICAgICAgICBcCisgICAgdGhyZWFkL3RvcG9sb2d5LmhwcCAgICAgICAgICAgICAgIFwKKyAgICB1dGlscy9jaGlsZF9zdXBlcnZpc2lvbi5ocHAgICAgICAgXAorICAgIHV0aWxzL3NsYWFjX2FkZHJlc3MuaHBwICAgICAgICAgICBcCisgICAgdXRpbHMvamFtX2RldGVjdG9yLmhwcCAgICAgICAgICAgIFwKKyAgICB1dGlscy93cmFwX3N0ZGJvb2wuaCAgICAgICAgICAgICAgXAorICAgIHV0aWxzL3dyYXBfc3RkaW50LmggICAgICAgICAgICAgICBcCisgICAgdXRpbHMvd3JhcF9zdHJpbmcuaCAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK25vaW5zdF9IRUFERVJTICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoSEVBREVSU19DT01NT04pICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitQUkVUVFlfRklMRVMgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFNPVVJDRVNfQ09NTU9OKSAgICAgICAgICAgICAgICAgXAorICAgICQoSEVBREVSU19DT01NT04pICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCitEYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IC0KK0NMRUFORklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9zcmMvY29yZSAkKERhc2gpbmFtZSAiKi5nY2RhIiAkKERhc2gpbyAkKERhc2gpbmFtZSAiKi5nY25vIikKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9ib3JkZXJfcm91dGVyX2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvYm9yZGVyX3JvdXRlcl9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMmM0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvYm9yZGVyX3JvdXRlcl9hcGkuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgQm9yZGVyIFJvdXRlciBBUEkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2JvcmRlcl9yb3V0ZXIuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCitvdEVycm9yIG90Qm9yZGVyUm91dGVyR2V0TmV0RGF0YShvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYVN0YWJsZSwgdWludDhfdCAqYURhdGEsIHVpbnQ4X3QgKmFEYXRhTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFEYXRhICE9IE5VTEwgJiYgYURhdGFMZW5ndGggIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLkdldE5ldHdvcmtEYXRhKGFTdGFibGUsIGFEYXRhLCAqYURhdGFMZW5ndGgpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdEJvcmRlclJvdXRlckFkZE9uTWVzaFByZWZpeChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90Qm9yZGVyUm91dGVyQ29uZmlnICphQ29uZmlnKQoreworICAgIHVpbnQ4X3QgZmxhZ3MgPSAwOworCisgICAgaWYgKGFDb25maWctPm1QcmVmZXJyZWQpCisgICAgeworICAgICAgICBmbGFncyB8PSBOZXR3b3JrRGF0YTo6Qm9yZGVyUm91dGVyRW50cnk6OmtQcmVmZXJyZWRGbGFnOworICAgIH0KKworICAgIGlmIChhQ29uZmlnLT5tU2xhYWMpCisgICAgeworICAgICAgICBmbGFncyB8PSBOZXR3b3JrRGF0YTo6Qm9yZGVyUm91dGVyRW50cnk6OmtTbGFhY0ZsYWc7CisgICAgfQorCisgICAgaWYgKGFDb25maWctPm1EaGNwKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gTmV0d29ya0RhdGE6OkJvcmRlclJvdXRlckVudHJ5OjprRGhjcEZsYWc7CisgICAgfQorCisgICAgaWYgKGFDb25maWctPm1Db25maWd1cmUpCisgICAgeworICAgICAgICBmbGFncyB8PSBOZXR3b3JrRGF0YTo6Qm9yZGVyUm91dGVyRW50cnk6OmtDb25maWd1cmVGbGFnOworICAgIH0KKworICAgIGlmIChhQ29uZmlnLT5tRGVmYXVsdFJvdXRlKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gTmV0d29ya0RhdGE6OkJvcmRlclJvdXRlckVudHJ5OjprRGVmYXVsdFJvdXRlRmxhZzsKKyAgICB9CisKKyAgICBpZiAoYUNvbmZpZy0+bU9uTWVzaCkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IE5ldHdvcmtEYXRhOjpCb3JkZXJSb3V0ZXJFbnRyeTo6a09uTWVzaEZsYWc7CisgICAgfQorCisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEYXRhTG9jYWwoKS5BZGRPbk1lc2hQcmVmaXgoYUNvbmZpZy0+bVByZWZpeC5tUHJlZml4Lm1GaWVsZHMubTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbmZpZy0+bVByZWZpeC5tTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb25maWctPm1QcmVmZXJlbmNlLCBmbGFncywgYUNvbmZpZy0+bVN0YWJsZSk7Cit9CisKK290RXJyb3Igb3RCb3JkZXJSb3V0ZXJSZW1vdmVPbk1lc2hQcmVmaXgob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdElwNlByZWZpeCAqYVByZWZpeCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLlJlbW92ZU9uTWVzaFByZWZpeChhUHJlZml4LT5tUHJlZml4Lm1GaWVsZHMubTgsIGFQcmVmaXgtPm1MZW5ndGgpOworfQorCitvdEVycm9yIG90Qm9yZGVyUm91dGVyR2V0TmV4dE9uTWVzaFByZWZpeChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0d29ya0RhdGFJdGVyYXRvciAqYUl0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUl0ZXJhdG9yICYmIGFDb25maWcsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLkdldE5leHRPbk1lc2hQcmVmaXgoYUl0ZXJhdG9yLCBhQ29uZmlnKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RCb3JkZXJSb3V0ZXJBZGRSb3V0ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyAqYUNvbmZpZykKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLkFkZEhhc1JvdXRlUHJlZml4KGFDb25maWctPm1QcmVmaXgubVByZWZpeC5tRmllbGRzLm04LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbmZpZy0+bVByZWZpeC5tTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbmZpZy0+bVByZWZlcmVuY2UsIGFDb25maWctPm1TdGFibGUpOworfQorCitvdEVycm9yIG90Qm9yZGVyUm91dGVyUmVtb3ZlUm91dGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdElwNlByZWZpeCAqYVByZWZpeCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLlJlbW92ZUhhc1JvdXRlUHJlZml4KGFQcmVmaXgtPm1QcmVmaXgubUZpZWxkcy5tOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFQcmVmaXgtPm1MZW5ndGgpOworfQorCitvdEVycm9yIG90Qm9yZGVyUm91dGVyR2V0TmV4dFJvdXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyAqYUNvbmZpZykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhSXRlcmF0b3IgJiYgYUNvbmZpZywgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXROZXR3b3JrRGF0YUxvY2FsKCkuR2V0TmV4dEV4dGVybmFsUm91dGUoYUl0ZXJhdG9yLCBhQ29uZmlnKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RCb3JkZXJSb3V0ZXJSZWdpc3RlcihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEYXRhTG9jYWwoKS5TZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbigpOworfQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9jaGlsZF9zdXBlcnZpc2lvbl9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2NoaWxkX3N1cGVydmlzaW9uX2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxMTMwZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9jaGlsZF9zdXBlcnZpc2lvbl9hcGkuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgY2hpbGQgc3VwZXJ2aXNpb24gQVBJLgorICovCisKKyNpbmNsdWRlICJvcGVudGhyZWFkL2NoaWxkX3N1cGVydmlzaW9uLmgiCisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OCisKK3VpbnQxNl90IG90Q2hpbGRTdXBlcnZpc2lvbkdldEludGVydmFsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Q2hpbGRTdXBlcnZpc29yKCkuR2V0U3VwZXJ2aXNpb25JbnRlcnZhbCgpOworfQorCit2b2lkIG90Q2hpbGRTdXBlcnZpc2lvblNldEludGVydmFsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUludGVydmFsKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENoaWxkU3VwZXJ2aXNvcigpLlNldFN1cGVydmlzaW9uSW50ZXJ2YWwoYUludGVydmFsKTsKK30KKwordWludDE2X3Qgb3RDaGlsZFN1cGVydmlzaW9uR2V0Q2hlY2tUaW1lb3V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0U3VwZXJ2aXNpb25MaXN0ZW5lcigpLkdldFRpbWVvdXQoKTsKK30KKwordm9pZCBvdENoaWxkU3VwZXJ2aXNpb25TZXRDaGVja1RpbWVvdXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhVGltZW91dCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRTdXBlcnZpc2lvbkxpc3RlbmVyKCkuU2V0VGltZW91dChhVGltZW91dCk7Cit9CisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT04KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9jb2FwX2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvY29hcF9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYzY3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvY29hcF9hcGkuY3BwCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIENvQVAgQVBJLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb2FwLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordm9pZCBvdENvYXBIZWFkZXJJbml0KG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RDb2FwVHlwZSBhVHlwZSwgb3RDb2FwQ29kZSBhQ29kZSkKK3sKKyAgICBDb2FwOjpIZWFkZXIgKmhlYWRlciA9IHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKTsKKyAgICBoZWFkZXItPkluaXQoYVR5cGUsIGFDb2RlKTsKK30KKwordm9pZCBvdENvYXBIZWFkZXJTZXRUb2tlbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIGNvbnN0IHVpbnQ4X3QgKmFUb2tlbiwgdWludDhfdCBhVG9rZW5MZW5ndGgpCit7CisgICAgc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5TZXRUb2tlbihhVG9rZW4sIGFUb2tlbkxlbmd0aCk7Cit9CisKK3ZvaWQgb3RDb2FwSGVhZGVyR2VuZXJhdGVUb2tlbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIHVpbnQ4X3QgYVRva2VuTGVuZ3RoKQoreworICAgIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+U2V0VG9rZW4oYVRva2VuTGVuZ3RoKTsKK30KKworb3RFcnJvciBvdENvYXBIZWFkZXJBcHBlbmRDb250ZW50Rm9ybWF0T3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RDb2FwT3B0aW9uQ29udGVudEZvcm1hdCBhQ29udGVudEZvcm1hdCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5BcHBlbmRDb250ZW50Rm9ybWF0T3B0aW9uKGFDb250ZW50Rm9ybWF0KTsKK30KKworb3RFcnJvciBvdENvYXBIZWFkZXJBcHBlbmRPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyLCBjb25zdCBvdENvYXBPcHRpb24gKmFPcHRpb24pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+QXBwZW5kT3B0aW9uKCpzdGF0aWNfY2FzdDxjb25zdCBDb2FwOjpIZWFkZXI6Ok9wdGlvbiAqPihhT3B0aW9uKSk7Cit9CisKK290RXJyb3Igb3RDb2FwSGVhZGVyQXBwZW5kVWludE9wdGlvbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIHVpbnQxNl90IGFOdW1iZXIsIHVpbnQzMl90IGFWYWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5BcHBlbmRVaW50T3B0aW9uKGFOdW1iZXIsIGFWYWx1ZSk7Cit9CisKK290RXJyb3Igb3RDb2FwSGVhZGVyQXBwZW5kT2JzZXJ2ZU9wdGlvbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIHVpbnQzMl90IGFPYnNlcnZlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciktPkFwcGVuZE9ic2VydmVPcHRpb24oYU9ic2VydmUpOworfQorCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZFVyaVBhdGhPcHRpb25zKG90Q29hcEhlYWRlciAqYUhlYWRlciwgY29uc3QgY2hhciAqYVVyaVBhdGgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+QXBwZW5kVXJpUGF0aE9wdGlvbnMoYVVyaVBhdGgpOworfQorCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZE1heEFnZU9wdGlvbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIHVpbnQzMl90IGFNYXhBZ2UpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+QXBwZW5kTWF4QWdlT3B0aW9uKGFNYXhBZ2UpOworfQorCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZFVyaVF1ZXJ5T3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlciwgY29uc3QgY2hhciAqYVVyaVF1ZXJ5KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciktPkFwcGVuZFVyaVF1ZXJ5T3B0aW9uKGFVcmlRdWVyeSk7Cit9CisKK3ZvaWQgb3RDb2FwSGVhZGVyU2V0UGF5bG9hZE1hcmtlcihvdENvYXBIZWFkZXIgKmFIZWFkZXIpCit7CisgICAgc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5TZXRQYXlsb2FkTWFya2VyKCk7Cit9CisKK3ZvaWQgb3RDb2FwSGVhZGVyU2V0TWVzc2FnZUlkKG90Q29hcEhlYWRlciAqYUhlYWRlciwgdWludDE2X3QgYU1lc3NhZ2VJZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5TZXRNZXNzYWdlSWQoYU1lc3NhZ2VJZCk7Cit9CisKK290Q29hcFR5cGUgb3RDb2FwSGVhZGVyR2V0VHlwZShjb25zdCBvdENvYXBIZWFkZXIgKmFIZWFkZXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+R2V0VHlwZSgpOworfQorCitvdENvYXBDb2RlIG90Q29hcEhlYWRlckdldENvZGUoY29uc3Qgb3RDb2FwSGVhZGVyICphSGVhZGVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciktPkdldENvZGUoKTsKK30KKwordWludDE2X3Qgb3RDb2FwSGVhZGVyR2V0TWVzc2FnZUlkKGNvbnN0IG90Q29hcEhlYWRlciAqYUhlYWRlcikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5HZXRNZXNzYWdlSWQoKTsKK30KKwordWludDhfdCBvdENvYXBIZWFkZXJHZXRUb2tlbkxlbmd0aChjb25zdCBvdENvYXBIZWFkZXIgKmFIZWFkZXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+R2V0VG9rZW5MZW5ndGgoKTsKK30KKworY29uc3QgdWludDhfdCAqb3RDb2FwSGVhZGVyR2V0VG9rZW4oY29uc3Qgb3RDb2FwSGVhZGVyICphSGVhZGVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciktPkdldFRva2VuKCk7Cit9CisKK2NvbnN0IG90Q29hcE9wdGlvbiAqb3RDb2FwSGVhZGVyR2V0Rmlyc3RPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBvdENvYXBPcHRpb24gKj4oc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5HZXRGaXJzdE9wdGlvbigpKTsKK30KKworY29uc3Qgb3RDb2FwT3B0aW9uICpvdENvYXBIZWFkZXJHZXROZXh0T3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlcikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qgb3RDb2FwT3B0aW9uICo+KHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+R2V0TmV4dE9wdGlvbigpKTsKK30KKworb3RNZXNzYWdlICpvdENvYXBOZXdNZXNzYWdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RDb2FwSGVhZGVyICphSGVhZGVyKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXIgIT0gTlVMTCwgbWVzc2FnZSA9IE5VTEwpOworICAgIG1lc3NhZ2UgPSBhSW5zdGFuY2UtPm1BcHBsaWNhdGlvbkNvYXAuTmV3TWVzc2FnZSgqKHN0YXRpY19jYXN0PGNvbnN0IENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSkpOworZXhpdDoKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKworb3RFcnJvciBvdENvYXBTZW5kUmVxdWVzdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3RDb2FwUmVzcG9uc2VIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tQXBwbGljYXRpb25Db2FwLlNlbmRNZXNzYWdlKAorICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSwKKyAgICAgICAgICAgICAgIGFIYW5kbGVyLCBhQ29udGV4dCk7Cit9CisKK290RXJyb3Igb3RDb2FwU3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhUG9ydCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tQXBwbGljYXRpb25Db2FwLlN0YXJ0KGFQb3J0KTsKK30KKworb3RFcnJvciBvdENvYXBTdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tQXBwbGljYXRpb25Db2FwLlN0b3AoKTsKK30KKworb3RFcnJvciBvdENvYXBBZGRSZXNvdXJjZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90Q29hcFJlc291cmNlICphUmVzb3VyY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bUFwcGxpY2F0aW9uQ29hcC5BZGRSZXNvdXJjZSgqc3RhdGljX2Nhc3Q8Q29hcDo6UmVzb3VyY2UgKj4oYVJlc291cmNlKSk7Cit9CisKK3ZvaWQgb3RDb2FwUmVtb3ZlUmVzb3VyY2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdENvYXBSZXNvdXJjZSAqYVJlc291cmNlKQoreworICAgIGFJbnN0YW5jZS0+bUFwcGxpY2F0aW9uQ29hcC5SZW1vdmVSZXNvdXJjZSgqc3RhdGljX2Nhc3Q8Q29hcDo6UmVzb3VyY2UgKj4oYVJlc291cmNlKSk7Cit9CisKK3ZvaWQgb3RDb2FwU2V0RGVmYXVsdEhhbmRsZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdENvYXBSZXF1ZXN0SGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgYUluc3RhbmNlLT5tQXBwbGljYXRpb25Db2FwLlNldERlZmF1bHRIYW5kbGVyKGFIYW5kbGVyLCBhQ29udGV4dCk7Cit9CisKK290RXJyb3Igb3RDb2FwU2VuZFJlc3BvbnNlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1BcHBsaWNhdGlvbkNvYXAuU2VuZE1lc3NhZ2UoCisgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL2NvbW1pc3Npb25lcl9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2NvbW1pc3Npb25lcl9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ODM2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvY29tbWlzc2lvbmVyX2FwaS5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgQ29tbWlzc2lvbmVyIEFQSS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29tbWlzc2lvbmVyLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKworI2lmIE9QRU5USFJFQURfRlREICYmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUgorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyU3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRDb21taXNzaW9uZXIoKS5TdGFydCgpOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvbW1pc3Npb25lcigpLlN0b3AoKTsKK30KKworb3RFcnJvciBvdENvbW1pc3Npb25lckFkZEpvaW5lcihvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90RXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MsIGNvbnN0IGNoYXIgKmFQU0tkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhVGltZW91dCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuQWRkSm9pbmVyKHN0YXRpY19jYXN0PGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAqPihhRXh0QWRkcmVzcyksIGFQU0tkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVRpbWVvdXQpOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyUmVtb3ZlSm9pbmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcykKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuUmVtb3ZlSm9pbmVyKHN0YXRpY19jYXN0PGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAqPihhRXh0QWRkcmVzcyksIDApOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyU2V0UHJvdmlzaW9uaW5nVXJsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgY2hhciAqYVByb3Zpc2lvbmluZ1VybCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuU2V0UHJvdmlzaW9uaW5nVXJsKGFQcm92aXNpb25pbmdVcmwpOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFDaGFubmVsTWFzaywgdWludDhfdCBhQ291bnQsIHVpbnQxNl90IGFQZXJpb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRDb21taXNzaW9uZXIoKS5tQW5ub3VuY2VCZWdpbi5TZW5kUmVxdWVzdChhQ2hhbm5lbE1hc2ssIGFDb3VudCwgYVBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6QWRkcmVzcyAqPihhQWRkcmVzcykpOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFDaGFubmVsTWFzaywgdWludDhfdCBhQ291bnQsIHVpbnQxNl90IGFQZXJpb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRDb21taXNzaW9uZXIoKS5tRW5lcmd5U2Nhbi5TZW5kUXVlcnkoYUNoYW5uZWxNYXNrLCBhQ291bnQsIGFQZXJpb2QsIGFTY2FuRHVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KGFBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDYWxsYmFjaywgYUNvbnRleHQpOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyUGFuSWRRdWVyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvbW1pc3Npb25lcigpLm1QYW5JZFF1ZXJ5LlNlbmRRdWVyeSgKKyAgICAgICAgICAgICAgIGFQYW5JZCwgYUNoYW5uZWxNYXNrLCAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KGFBZGRyZXNzKSwgYUNhbGxiYWNrLCBhQ29udGV4dCk7Cit9CisKK290RXJyb3Igb3RDb21taXNzaW9uZXJTZW5kTWdtdEdldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvbW1pc3Npb25lcigpLlNlbmRNZ210Q29tbWlzc2lvbmVyR2V0UmVxdWVzdChhVGx2cywgYUxlbmd0aCk7Cit9CisKK290RXJyb3Igb3RDb21taXNzaW9uZXJTZW5kTWdtdFNldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90Q29tbWlzc2lvbmluZ0RhdGFzZXQgKmFEYXRhc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvbW1pc3Npb25lcigpLlNlbmRNZ210Q29tbWlzc2lvbmVyU2V0UmVxdWVzdCgqYURhdGFzZXQsIGFUbHZzLCBhTGVuZ3RoKTsKK30KKwordWludDE2X3Qgb3RDb21taXNzaW9uZXJHZXRTZXNzaW9uSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRDb21taXNzaW9uZXIoKS5HZXRTZXNzaW9uSWQoKTsKK30KKworb3RDb21taXNzaW9uZXJTdGF0ZSBvdENvbW1pc3Npb25lckdldFN0YXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuR2V0U3RhdGUoKTsKK30KKworb3RFcnJvciBvdENvbW1pc3Npb25lckdlbmVyYXRlUFNLYyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IGNoYXIgKmFQYXNzUGhyYXNlLCBjb25zdCBjaGFyICphTmV0d29ya05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFFeHRQYW5JZCwgdWludDhfdCAqYVBTS2MpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvbW1pc3Npb25lcigpLkdlbmVyYXRlUFNLYyhhUGFzc1BocmFzZSwgYU5ldHdvcmtOYW1lLCBhRXh0UGFuSWQsIGFQU0tjKTsKK30KKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9jcnlwdG9fYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9jcnlwdG9fYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjJlYThkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL2NyeXB0b19hcGkuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgQ3J5cHRvIEFQSS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NyeXB0by5oPgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL2Flc19jY20uaHBwIgorI2luY2x1ZGUgImNyeXB0by9obWFjX3NoYTI1Ni5ocHAiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDo6Q3J5cHRvOworCit2b2lkIG90Q3J5cHRvSG1hY1NoYTI1NigKKyAgICBjb25zdCB1aW50OF90ICphS2V5LCB1aW50MTZfdCBhS2V5TGVuZ3RoLAorICAgIGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgsCisgICAgdWludDhfdCAqYUhhc2gpCit7CisgICAgSG1hY1NoYTI1NiBobWFjOworCisgICAgYXNzZXJ0KChhS2V5ICE9IE5VTEwpICYmIChhQnVmICE9IE5VTEwpICYmIChhSGFzaCAhPSBOVUxMKSk7CisKKyAgICBobWFjLlN0YXJ0KGFLZXksIGFLZXlMZW5ndGgpOworICAgIGhtYWMuVXBkYXRlKGFCdWYsIGFCdWZMZW5ndGgpOworICAgIGhtYWMuRmluaXNoKGFIYXNoKTsKK30KKwordm9pZCBvdENyeXB0b0Flc0NjbSgKKyAgICBjb25zdCB1aW50OF90ICphS2V5LCB1aW50MTZfdCBhS2V5TGVuZ3RoLAorICAgIHVpbnQ4X3QgYVRhZ0xlbmd0aCwKKyAgICBjb25zdCB2b2lkICphTm9uY2UsIHVpbnQ4X3QgYU5vbmNlTGVuZ3RoLAorICAgIGNvbnN0IHZvaWQgKmFIZWFkZXIsIHVpbnQzMl90IGFIZWFkZXJMZW5ndGgsCisgICAgdm9pZCAqYVBsYWluVGV4dCwgdm9pZCAqYUNpcGhlclRleHQsIHVpbnQzMl90IGFMZW5ndGgsIGJvb2wgYUVuY3J5cHQsCisgICAgdm9pZCAqYVRhZykKK3sKKyAgICBBZXNDY20gYWVzQ2NtOworICAgIHVpbnQ4X3QgdGFnTGVuZ3RoOworCisgICAgYXNzZXJ0KChhS2V5ICE9IE5VTEwpICYmIChhTm9uY2UgIT0gTlVMTCkgJiYgKGFQbGFpblRleHQgIT0gTlVMTCkgJiYgKGFDaXBoZXJUZXh0ICE9IE5VTEwpICYmIChhVGFnICE9IE5VTEwpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoYWVzQ2NtLlNldEtleShhS2V5LCBhS2V5TGVuZ3RoKSk7CisgICAgYWVzQ2NtLkluaXQoYUhlYWRlckxlbmd0aCwgYUxlbmd0aCwgYVRhZ0xlbmd0aCwgYU5vbmNlLCBhTm9uY2VMZW5ndGgpOworCisgICAgaWYgKGFIZWFkZXJMZW5ndGggIT0gMCkKKyAgICB7CisgICAgICAgIGFzc2VydChhSGVhZGVyICE9IE5VTEwpOworICAgICAgICBhZXNDY20uSGVhZGVyKGFIZWFkZXIsIGFIZWFkZXJMZW5ndGgpOworICAgIH0KKworICAgIGFlc0NjbS5QYXlsb2FkKGFQbGFpblRleHQsIGFDaXBoZXJUZXh0LCBhTGVuZ3RoLCBhRW5jcnlwdCk7CisgICAgYWVzQ2NtLkZpbmFsaXplKGFUYWcsICZ0YWdMZW5ndGgpOworCisgICAgYXNzZXJ0KGFUYWdMZW5ndGggPT0gdGFnTGVuZ3RoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvZGF0YXNldF9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2RhdGFzZXRfYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjBhMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL2RhdGFzZXRfYXBpLmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIE9wZXJhdGlvbmFsIERhdGFzZXQgQVBJIChmb3IgYm90aCBGVEQgYW5kIE1URCkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RhdGFzZXQuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCitib29sIG90RGF0YXNldElzQ29tbWlzc2lvbmVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdE9wZXJhdGlvbmFsRGF0YXNldCBkYXRhc2V0OworCisgICAgb3REYXRhc2V0R2V0QWN0aXZlKGFJbnN0YW5jZSwgJmRhdGFzZXQpOworCisgICAgaWYgKChkYXRhc2V0Lm1Jc01hc3RlcktleVNldCkgJiYgKGRhdGFzZXQubUlzTmV0d29ya05hbWVTZXQpICYmCisgICAgICAgIChkYXRhc2V0Lm1Jc0V4dGVuZGVkUGFuSWRTZXQpICYmIChkYXRhc2V0Lm1Jc1BhbklkU2V0KSAmJiAoZGF0YXNldC5tSXNDaGFubmVsU2V0KSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworb3RFcnJvciBvdERhdGFzZXRHZXRBY3RpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYURhdGFzZXQgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuR2V0TG9jYWwoKS5HZXQoKmFEYXRhc2V0KTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3REYXRhc2V0R2V0UGVuZGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90T3BlcmF0aW9uYWxEYXRhc2V0ICphRGF0YXNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhRGF0YXNldCAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuR2V0TG9jYWwoKS5HZXQoKmFEYXRhc2V0KTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvZGF0YXNldF9mdGRfYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9kYXRhc2V0X2Z0ZF9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNjBjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvZGF0YXNldF9mdGRfYXBpLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIE9wZXJhdGlvbmFsIERhdGFzZXQgQVBJIChGVEQgb25seSkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9kYXRhc2V0X2Z0ZC5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK290RXJyb3Igb3REYXRhc2V0U2V0QWN0aXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0KQoreworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBWZXJpZnlPckV4aXQoYURhdGFzZXQgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuU2V0KCphRGF0YXNldCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90RGF0YXNldFNldFBlbmRpbmcob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFZlcmlmeU9yRXhpdChhRGF0YXNldCAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuU2V0KCphRGF0YXNldCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90RGF0YXNldFNlbmRNZ210QWN0aXZlR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYVRsdlR5cGVzLCB1aW50OF90IGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5TZW5kR2V0UmVxdWVzdChhVGx2VHlwZXMsIGFMZW5ndGgsIGFBZGRyZXNzKTsKK30KKworb3RFcnJvciBvdERhdGFzZXRTZW5kTWdtdEFjdGl2ZVNldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICphRGF0YXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLlNlbmRTZXRSZXF1ZXN0KCphRGF0YXNldCwgYVRsdnMsIGFMZW5ndGgpOworfQorCitvdEVycm9yIG90RGF0YXNldFNlbmRNZ210UGVuZGluZ0dldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFUbHZUeXBlcywgdWludDhfdCBhTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcykKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5TZW5kR2V0UmVxdWVzdChhVGx2VHlwZXMsIGFMZW5ndGgsIGFBZGRyZXNzKTsKK30KKworb3RFcnJvciBvdERhdGFzZXRTZW5kTWdtdFBlbmRpbmdTZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVGx2cywgdWludDhfdCBhTGVuZ3RoKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLlNlbmRTZXRSZXF1ZXN0KCphRGF0YXNldCwgYVRsdnMsIGFMZW5ndGgpOworfQorCit1aW50MzJfdCBvdERhdGFzZXRHZXREZWxheVRpbWVyTWluaW1hbChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldExlYWRlcigpLkdldERlbGF5VGltZXJNaW5pbWFsKCk7Cit9CisKK290RXJyb3Igb3REYXRhc2V0U2V0RGVsYXlUaW1lck1pbmltYWwob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhRGVsYXlUaW1lck1pbmltYWwpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldExlYWRlcigpLlNldERlbGF5VGltZXJNaW5pbWFsKGFEZWxheVRpbWVyTWluaW1hbCk7Cit9CisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9kaGNwNl9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2RoY3A2X2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxYTE3MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9kaGNwNl9hcGkuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgREhDUHY2IEFQSS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RoY3A2X2NsaWVudC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9kaGNwNl9zZXJ2ZXIuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCit2b2lkIG90RGhjcDZDbGllbnRVcGRhdGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdERoY3BBZGRyZXNzICphQWRkcmVzc2VzLCB1aW50MzJfdCBhTnVtQWRkcmVzc2VzLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXREaGNwNkNsaWVudCgpLlVwZGF0ZUFkZHJlc3NlcyhhSW5zdGFuY2UsIGFBZGRyZXNzZXMsIGFOdW1BZGRyZXNzZXMsIGFDb250ZXh0KTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIKK3ZvaWQgb3REaGNwNlNlcnZlclVwZGF0ZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0RGhjcDZTZXJ2ZXIoKS5VcGRhdGVTZXJ2aWNlKCk7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL2Ruc19hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2Ruc19hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTY5NmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvZG5zX2FwaS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBVRFAgQVBJLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9kbnMuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorb3RFcnJvciBvdERuc0NsaWVudFF1ZXJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3REbnNRdWVyeSAqYVF1ZXJ5LCBvdERuc1Jlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0RG5zQ2xpZW50KCkuUXVlcnkoYVF1ZXJ5LCBhSGFuZGxlciwgYUNvbnRleHQpOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvaWNtcDZfYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9pY21wNl9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODNlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvaWNtcDZfYXBpLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIElDTVB2NiBBUEkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2ljbXA2Lmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKworYm9vbCBvdEljbXA2SXNFY2hvRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bUlwNi5tSWNtcC5Jc0VjaG9FbmFibGVkKCk7Cit9CisKK3ZvaWQgb3RJY21wNlNldEVjaG9FbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCkKK3sKKyAgICBhSW5zdGFuY2UtPm1JcDYubUljbXAuU2V0RWNob0VuYWJsZWQoYUVuYWJsZWQpOworfQorCitvdEVycm9yIG90SWNtcDZSZWdpc3RlckhhbmRsZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdEljbXA2SGFuZGxlciAqYUhhbmRsZXIpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bUlwNi5tSWNtcC5SZWdpc3RlckhhbmRsZXIoKnN0YXRpY19jYXN0PElwNjo6SWNtcEhhbmRsZXIgKj4oYUhhbmRsZXIpKTsKK30KKworb3RFcnJvciBvdEljbXA2U2VuZEVjaG9SZXF1ZXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIHVpbnQxNl90IGFJZGVudGlmaWVyKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1JcDYubUljbXAuU2VuZEVjaG9SZXF1ZXN0KCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFJZGVudGlmaWVyKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9pbnN0YW5jZV9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2luc3RhbmNlX2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmNGI1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9pbnN0YW5jZV9hcGkuY3BwCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIEluc3RhbmNlIEFQSS4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJpbnN0YW5jZV9hcGkudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvaW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3NldHRpbmdzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC1zaW5nbGUtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL25ldy5ocHAiCisKKyNpZiAhT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisKK3N0YXRpYyBvdERFRklORV9BTElHTkVEX1ZBUihzSW5zdGFuY2VSYXcsIHNpemVvZihvdEluc3RhbmNlKSwgdWludDY0X3QpOworb3RJbnN0YW5jZSAqc0luc3RhbmNlID0gTlVMTDsKKworb3RJbnN0YW5jZSAqb3RHZXRJbnN0YW5jZSh2b2lkKQoreworICAgIHJldHVybiBzSW5zdGFuY2U7Cit9CisKK290OjpUaHJlYWROZXRpZiAmb3RHZXRUaHJlYWROZXRpZih2b2lkKQoreworICAgIHJldHVybiBzSW5zdGFuY2UtPm1UaHJlYWROZXRpZjsKK30KKworb3Q6Ok1lc2hGb3J3YXJkZXIgJm90R2V0TWVzaEZvcndhcmRlcih2b2lkKQoreworICAgIHJldHVybiBzSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCk7Cit9CisKK290OjpUaW1lclNjaGVkdWxlciAmb3RHZXRUaW1lclNjaGVkdWxlcih2b2lkKQoreworICAgIHJldHVybiBzSW5zdGFuY2UtPm1JcDYubVRpbWVyU2NoZWR1bGVyOworfQorCitvdDo6VGFza2xldFNjaGVkdWxlciAmb3RHZXRUYXNrbGV0U2NoZWR1bGVyKHZvaWQpCit7CisgICAgcmV0dXJuIHNJbnN0YW5jZS0+bUlwNi5tVGFza2xldFNjaGVkdWxlcjsKK30KKworb3Q6OklwNjo6SXA2ICZvdEdldElwNih2b2lkKQoreworICAgIHJldHVybiBzSW5zdGFuY2UtPm1JcDY7Cit9CisjZW5kaWYgLy8gI2lmICFPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKworb3RJbnN0YW5jZTo6b3RJbnN0YW5jZSh2b2lkKSA6CisgICAgbVJlY2VpdmVJcDZEYXRhZ3JhbUNhbGxiYWNrKE5VTEwpLAorICAgIG1SZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFja0NvbnRleHQoTlVMTCksCisgICAgbUFjdGl2ZVNjYW5DYWxsYmFjayhOVUxMKSwKKyAgICBtQWN0aXZlU2NhbkNhbGxiYWNrQ29udGV4dChOVUxMKSwKKyAgICBtRW5lcmd5U2NhbkNhbGxiYWNrKE5VTEwpLAorICAgIG1FbmVyZ3lTY2FuQ2FsbGJhY2tDb250ZXh0KE5VTEwpLAorICAgIG1UaHJlYWROZXRpZihtSXA2KQorI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgICwgbUxpbmtSYXcoKnRoaXMpCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorICAgICwgbUFwcGxpY2F0aW9uQ29hcChtVGhyZWFkTmV0aWYpCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0xPR19MRVZFTAorICAgICwgbUxvZ0xldmVsKHN0YXRpY19jYXN0PG90TG9nTGV2ZWw+KE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCkpCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfTE9HX0xFVkVMCit7Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordm9pZCBvdEluc3RhbmNlUG9zdENvbnN0cnVjdG9yKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAvLyByZXN0b3JlIGRhdGFzZXRzIGFuZCBuZXR3b3JrIGluZm9ybWF0aW9uCisgICAgb3RQbGF0U2V0dGluZ3NJbml0KGFJbnN0YW5jZSk7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuUmVzdG9yZSgpOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0FVVE9fU1RBUlRfU1VQUE9SVAorCisgICAgLy8gSWYgYXV0byBzdGFydCBpcyBjb25maWd1cmVkLCBkbyB0aGF0IG5vdworICAgIGlmIChvdFRocmVhZEdldEF1dG9TdGFydChhSW5zdGFuY2UpKQorICAgIHsKKyAgICAgICAgaWYgKG90SXA2U2V0RW5hYmxlZChhSW5zdGFuY2UsIHRydWUpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE9ubHkgdHJ5IHRvIHN0YXJ0IFRocmVhZCBpZiB3ZSBjb3VsZCBicmluZyB1cCB0aGUgaW50ZXJmYWNlCisgICAgICAgICAgICBpZiAob3RUaHJlYWRTZXRFbmFibGVkKGFJbnN0YW5jZSwgdHJ1ZSkgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBCcmluZyB0aGUgaW50ZXJmYWNlIGRvd24gaWYgVGhyZWFkIGZhaWxlZCB0byBzdGFydAorICAgICAgICAgICAgICAgIG90SXA2U2V0RW5hYmxlZChhSW5zdGFuY2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmCit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKworb3RJbnN0YW5jZSAqb3RJbnN0YW5jZUluaXQodm9pZCAqYUluc3RhbmNlQnVmZmVyLCBzaXplX3QgKmFJbnN0YW5jZUJ1ZmZlclNpemUpCit7CisgICAgb3RJbnN0YW5jZSAqaW5zdGFuY2UgPSBOVUxMOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2VCdWZmZXJTaXplICE9IE5VTEwpOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBpbnB1dCBidWZmZXIgaXMgYmlnIGVub3VnaAorICAgIFZlcmlmeU9yRXhpdChzaXplb2Yob3RJbnN0YW5jZSkgPD0gKmFJbnN0YW5jZUJ1ZmZlclNpemUsICphSW5zdGFuY2VCdWZmZXJTaXplID0gc2l6ZW9mKG90SW5zdGFuY2UpKTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2VCdWZmZXIgIT0gTlVMTCk7CisKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIGNvbnRleHQKKyAgICBpbnN0YW5jZSA9IG5ldyhhSW5zdGFuY2VCdWZmZXIpb3RJbnN0YW5jZSgpOworCisgICAgLy8gRXhlY3V0ZSBwb3N0IGNvbnN0cnVjdG9yIG9wZXJhdGlvbnMKKyAgICBvdEluc3RhbmNlUG9zdENvbnN0cnVjdG9yKGluc3RhbmNlKTsKKworICAgIG90TG9nSW5mb0FwaShpbnN0YW5jZSwgIm90SW5zdGFuY2UgSW5pdGlhbGl6ZWQiKTsKKworZXhpdDoKKworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKyNlbHNlIC8vICNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKworb3RJbnN0YW5jZSAqb3RJbnN0YW5jZUluaXRTaW5nbGUodm9pZCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgVmVyaWZ5T3JFeGl0KHNJbnN0YW5jZSA9PSBOVUxMKTsKKworICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIGBzSW5zdGFuY2VgIHBvaW50ZXIgaXMgY29ycmVjdGx5IHNldAorICAgIC8vIGJlZm9yZSBhbnkgb2JqZWN0IGNvbnN0cnVjdG9yIGlzIGNhbGxlZC4KKyAgICBzSW5zdGFuY2UgPSByZWludGVycHJldF9jYXN0PG90SW5zdGFuY2UgKj4oJnNJbnN0YW5jZVJhdyk7CisKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIGNvbnRleHQKKyAgICBzSW5zdGFuY2UgPSBuZXcoJnNJbnN0YW5jZVJhdylvdEluc3RhbmNlKCk7CisKKyAgICAvLyBFeGVjdXRlIHBvc3QgY29uc3RydWN0b3Igb3BlcmF0aW9ucworICAgIG90SW5zdGFuY2VQb3N0Q29uc3RydWN0b3Ioc0luc3RhbmNlKTsKKworICAgIG90TG9nSW5mb0FwaShzSW5zdGFuY2UsICJvdEluc3RhbmNlIEluaXRpYWxpemVkIik7CisKK2V4aXQ6CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHNJbnN0YW5jZTsKK30KKworI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKwordm9pZCBvdEluc3RhbmNlRmluYWxpemUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICAvLyBFbnN1cmUgd2UgYXJlIGRpc2FibGVkCisgICAgKHZvaWQpb3RUaHJlYWRTZXRFbmFibGVkKGFJbnN0YW5jZSwgZmFsc2UpOworICAgICh2b2lkKW90SXA2U2V0RW5hYmxlZChhSW5zdGFuY2UsIGZhbHNlKTsKKworI2lmICFPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBzSW5zdGFuY2UgPSBOVUxMOworI2VuZGlmCisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK290RXJyb3Igb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ2FsbGJhY2tDb250ZXh0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBPUEVOVEhSRUFEX0NPTkZJR19NQVhfU1RBVEVDSEFOR0VfSEFORExFUlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhSW5zdGFuY2UtPm1OZXRpZkNhbGxiYWNrW2ldLklzRnJlZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBhSW5zdGFuY2UtPm1OZXRpZkNhbGxiYWNrW2ldLlNldChhQ2FsbGJhY2ssIGFDYWxsYmFja0NvbnRleHQpOworICAgICAgICAgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5SZWdpc3RlckNhbGxiYWNrKGFJbnN0YW5jZS0+bU5ldGlmQ2FsbGJhY2tbaV0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgb3RSZW1vdmVTdGF0ZUNoYW5nZUNhbGxiYWNrKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RTdGF0ZUNoYW5nZWRDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBPUEVOVEhSRUFEX0NPTkZJR19NQVhfU1RBVEVDSEFOR0VfSEFORExFUlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhSW5zdGFuY2UtPm1OZXRpZkNhbGxiYWNrW2ldLklzU2VydmluZyhhQ2FsbGJhY2ssIGFDYWxsYmFja0NvbnRleHQpKQorICAgICAgICB7CisgICAgICAgICAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5SZW1vdmVDYWxsYmFjayhhSW5zdGFuY2UtPm1OZXRpZkNhbGxiYWNrW2ldKTsKKyAgICAgICAgICAgIGFJbnN0YW5jZS0+bU5ldGlmQ2FsbGJhY2tbaV0uRnJlZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgb3RJbnN0YW5jZVJlc2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdFBsYXRSZXNldChhSW5zdGFuY2UpOworfQorCit2b2lkIG90SW5zdGFuY2VGYWN0b3J5UmVzZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90UGxhdFNldHRpbmdzV2lwZShhSW5zdGFuY2UpOworICAgIG90UGxhdFJlc2V0KGFJbnN0YW5jZSk7Cit9CisKK290RXJyb3Igb3RJbnN0YW5jZUVyYXNlUGVyc2lzdGVudEluZm8ob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG90VGhyZWFkR2V0RGV2aWNlUm9sZShhSW5zdGFuY2UpID09ICBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKyAgICBvdFBsYXRTZXR0aW5nc1dpcGUoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290TG9nTGV2ZWwgb3RHZXREeW5hbWljTG9nTGV2ZWwob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90TG9nTGV2ZWwgbG9nTGV2ZWw7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfRFlOQU1JQ19MT0dfTEVWRUwKKyAgICBsb2dMZXZlbCA9ICBhSW5zdGFuY2UtPm1Mb2dMZXZlbDsKKyNlbHNlCisgICAgbG9nTGV2ZWwgPSBzdGF0aWNfY2FzdDxvdExvZ0xldmVsPihPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUwpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworI2VuZGlmCisKKyAgICByZXR1cm4gbG9nTGV2ZWw7Cit9CisKK290RXJyb3Igb3RTZXREeW5hbWljTG9nTGV2ZWwob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExvZ0xldmVsIGFMb2dMZXZlbCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0xPR19MRVZFTAorICAgIGFJbnN0YW5jZS0+bUxvZ0xldmVsID0gYUxvZ0xldmVsOworI2Vsc2UKKyAgICBlcnJvciA9IE9UX0VSUk9SX0RJU0FCTEVEX0ZFQVRVUkU7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFMb2dMZXZlbCk7CisjZW5kaWYKKworICAgIHJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9pcDZfYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9pcDZfYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWQwOGNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL2lwNl9hcGkuY3BwCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIElQdjYgQVBJLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImlwNl9hcGkudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvaXA2Lmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgInV0aWxzL3NsYWFjX2FkZHJlc3MuaHBwIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK290RXJyb3Igb3RJcDZTZXRFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBpZiAoYUVuYWJsZWQpCisgICAgeworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgICAgICBWZXJpZnlPckV4aXQoIWFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuVXAoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCFhSW5zdGFuY2UtPm1MaW5rUmF3LklzRW5hYmxlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgICAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkRvd24oKTsKKyAgICB9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKK2V4aXQ6CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgb3RMb2dGdW5jRXhpdEVycihlcnJvcik7CisgICAgcmV0dXJuIGVycm9yOworfQorCitib29sIG90SXA2SXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuSXNVcCgpOworfQorCitjb25zdCBvdE5ldGlmQWRkcmVzcyAqb3RJcDZHZXRVbmljYXN0QWRkcmVzc2VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0VW5pY2FzdEFkZHJlc3NlcygpOworfQorCitvdEVycm9yIG90SXA2QWRkVW5pY2FzdEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdE5ldGlmQWRkcmVzcyAqYWRkcmVzcykKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuQWRkRXh0ZXJuYWxVbmljYXN0QWRkcmVzcygqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpOZXRpZlVuaWNhc3RBZGRyZXNzICo+KGFkZHJlc3MpKTsKK30KKworb3RFcnJvciBvdElwNlJlbW92ZVVuaWNhc3RBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZBZGRyZXNzICphZGRyZXNzKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5SZW1vdmVFeHRlcm5hbFVuaWNhc3RBZGRyZXNzKCpzdGF0aWNfY2FzdDxjb25zdCBJcDY6OkFkZHJlc3MgKj4oYWRkcmVzcykpOworfQorCitjb25zdCBvdE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqb3RJcDZHZXRNdWx0aWNhc3RBZGRyZXNzZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNdWx0aWNhc3RBZGRyZXNzZXMoKTsKK30KKworb3RFcnJvciBvdElwNlN1YnNjcmliZU11bHRpY2FzdEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5TdWJzY3JpYmVFeHRlcm5hbE11bHRpY2FzdCgqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KGFBZGRyZXNzKSk7Cit9CisKK290RXJyb3Igb3RJcDZVbnN1YnNjcmliZU11bHRpY2FzdEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5VbnN1YnNjcmliZUV4dGVybmFsTXVsdGljYXN0KCpzdGF0aWNfY2FzdDxjb25zdCBJcDY6OkFkZHJlc3MgKj4oYUFkZHJlc3MpKTsKK30KKworYm9vbCBvdElwNklzTXVsdGljYXN0UHJvbWlzY3VvdXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuSXNNdWx0aWNhc3RQcm9taXNjdW91c0VuYWJsZWQoKTsKK30KKwordm9pZCBvdElwNlNldE11bHRpY2FzdFByb21pc2N1b3VzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuU2V0TXVsdGljYXN0UHJvbWlzY3VvdXMoYUVuYWJsZWQpOworfQorCit2b2lkIG90SXA2U2xhYWNVcGRhdGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3NlcywgdWludDMyX3QgYU51bUFkZHJlc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICBvdElwNlNsYWFjSWlkQ3JlYXRlIGFJaWRDcmVhdGUsIHZvaWQgKmFDb250ZXh0KQoreworICAgIFV0aWxzOjpTbGFhYzo6VXBkYXRlQWRkcmVzc2VzKGFJbnN0YW5jZSwgYUFkZHJlc3NlcywgYU51bUFkZHJlc3NlcywgYUlpZENyZWF0ZSwgYUNvbnRleHQpOworfQorCitvdEVycm9yIG90SXA2Q3JlYXRlUmFuZG9tSWlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICByZXR1cm4gVXRpbHM6OlNsYWFjOjpDcmVhdGVSYW5kb21JaWQoYUluc3RhbmNlLCBhQWRkcmVzcywgYUNvbnRleHQpOworfQorCitvdEVycm9yIG90SXA2Q3JlYXRlTWFjSWlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzLCB2b2lkICopCit7CisgICAgbWVtY3B5KCZhQWRkcmVzcy0+bUFkZHJlc3MubUZpZWxkcy5tOFtPVF9JUDZfQUREUkVTU19TSVpFIC0gT1RfSVA2X0lJRF9TSVpFXSwKKyAgICAgICAgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpLCBPVF9JUDZfSUlEX1NJWkUpOworICAgIGFBZGRyZXNzLT5tQWRkcmVzcy5tRmllbGRzLm04W09UX0lQNl9BRERSRVNTX1NJWkUgLSBPVF9JUDZfSUlEX1NJWkVdIF49IDB4MDI7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdElwNkNyZWF0ZVNlbWFudGljYWxseU9wYXF1ZUlpZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQWRkcmVzcywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFV0aWxzOjpTZW1hbnRpY2FsbHlPcGFxdWVJaWRHZW5lcmF0b3IgKj4oYUNvbnRleHQpLT5DcmVhdGVJaWQoYUluc3RhbmNlLCBhQWRkcmVzcyk7Cit9CisKK3ZvaWQgb3RJcDZTZXRSZWNlaXZlQ2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdElwNlJlY2VpdmVDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpCit7CisgICAgYUluc3RhbmNlLT5tSXA2LlNldFJlY2VpdmVEYXRhZ3JhbUNhbGxiYWNrKGFDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dCk7Cit9CisKK2Jvb2wgb3RJcDZJc1JlY2VpdmVGaWx0ZXJFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tSXA2LklzUmVjZWl2ZUlwNkZpbHRlckVuYWJsZWQoKTsKK30KKwordm9pZCBvdElwNlNldFJlY2VpdmVGaWx0ZXJFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCkKK3sKKyAgICBhSW5zdGFuY2UtPm1JcDYuU2V0UmVjZWl2ZUlwNkZpbHRlckVuYWJsZWQoYUVuYWJsZWQpOworfQorCitvdEVycm9yIG90SXA2U2VuZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bUlwNi5TZW5kUmF3KCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEludGVyZmFjZUlkKCkpOworCisgICAgb3RMb2dGdW5jRXhpdEVycihlcnJvcik7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290TWVzc2FnZSAqb3RJcDZOZXdNZXNzYWdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhTGlua1NlY3VyaXR5RW5hYmxlZCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gYUluc3RhbmNlLT5tSXA2Lm1NZXNzYWdlUG9vbC5OZXcoTWVzc2FnZTo6a1R5cGVJcDYsIDApOworCisgICAgaWYgKG1lc3NhZ2UpCisgICAgeworICAgICAgICBtZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKGFMaW5rU2VjdXJpdHlFbmFibGVkKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKworb3RFcnJvciBvdElwNkFkZFVuc2VjdXJlUG9ydChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQb3J0KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRJcDZGaWx0ZXIoKS5BZGRVbnNlY3VyZVBvcnQoYVBvcnQpOworfQorCitvdEVycm9yIG90SXA2UmVtb3ZlVW5zZWN1cmVQb3J0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBvcnQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldElwNkZpbHRlcigpLlJlbW92ZVVuc2VjdXJlUG9ydChhUG9ydCk7Cit9CisKK2NvbnN0IHVpbnQxNl90ICpvdElwNkdldFVuc2VjdXJlUG9ydHMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphTnVtRW50cmllcykKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SXA2RmlsdGVyKCkuR2V0VW5zZWN1cmVQb3J0cygqYU51bUVudHJpZXMpOworfQorCitib29sIG90SXA2SXNBZGRyZXNzRXF1YWwoY29uc3Qgb3RJcDZBZGRyZXNzICphLCBjb25zdCBvdElwNkFkZHJlc3MgKmIpCit7CisgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6OkFkZHJlc3MgKj4oYSkgPT0gKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6QWRkcmVzcyAqPihiKTsKK30KKworb3RFcnJvciBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgb3RJcDZBZGRyZXNzICphZGRyZXNzKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJcDY6OkFkZHJlc3MgKj4oYWRkcmVzcyktPkZyb21TdHJpbmcoc3RyKTsKK30KKwordWludDhfdCBvdElwNlByZWZpeE1hdGNoKGNvbnN0IG90SXA2QWRkcmVzcyAqYUZpcnN0LCBjb25zdCBvdElwNkFkZHJlc3MgKmFTZWNvbmQpCit7CisgICAgdWludDhfdCBydmFsOworCisgICAgVmVyaWZ5T3JFeGl0KGFGaXJzdCAhPSBOVUxMICYmIGFTZWNvbmQgIT0gTlVMTCwgcnZhbCA9IDApOworCisgICAgcnZhbCA9IHN0YXRpY19jYXN0PGNvbnN0IElwNjo6QWRkcmVzcyAqPihhRmlyc3QpLT5QcmVmaXhNYXRjaCgqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KGFTZWNvbmQpKTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9qYW1fZGV0ZWN0aW9uX2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvamFtX2RldGVjdGlvbl9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YWQ4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvamFtX2RldGVjdGlvbl9hcGkuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgSmFtIERldGVjdGlvbiBBUEkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2phbV9kZXRlY3Rpb24uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCitvdEVycm9yIG90SmFtRGV0ZWN0aW9uU2V0UnNzaVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUnNzaVRocmVzaG9sZCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SmFtRGV0ZWN0b3IoKS5TZXRSc3NpVGhyZXNob2xkKGFSc3NpVGhyZXNob2xkKTsKK30KKworaW50OF90IG90SmFtRGV0ZWN0aW9uR2V0UnNzaVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEphbURldGVjdG9yKCkuR2V0UnNzaVRocmVzaG9sZCgpOworfQorCitvdEVycm9yIG90SmFtRGV0ZWN0aW9uU2V0V2luZG93KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhV2luZG93KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRKYW1EZXRlY3RvcigpLlNldFdpbmRvdyhhV2luZG93KTsKK30KKwordWludDhfdCBvdEphbURldGVjdGlvbkdldFdpbmRvdyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEphbURldGVjdG9yKCkuR2V0V2luZG93KCk7Cit9CisKK290RXJyb3Igb3RKYW1EZXRlY3Rpb25TZXRCdXN5UGVyaW9kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQnVzeVBlcmlvZCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SmFtRGV0ZWN0b3IoKS5TZXRCdXN5UGVyaW9kKGFCdXN5UGVyaW9kKTsKK30KKwordWludDhfdCBvdEphbURldGVjdGlvbkdldEJ1c3lQZXJpb2Qob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRKYW1EZXRlY3RvcigpLkdldEJ1c3lQZXJpb2QoKTsKK30KKworb3RFcnJvciBvdEphbURldGVjdGlvblN0YXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RKYW1EZXRlY3Rpb25DYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRKYW1EZXRlY3RvcigpLlN0YXJ0KGFDYWxsYmFjaywgYUNvbnRleHQpOworfQorCitvdEVycm9yIG90SmFtRGV0ZWN0aW9uU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEphbURldGVjdG9yKCkuU3RvcCgpOworfQorCitib29sIG90SmFtRGV0ZWN0aW9uSXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SmFtRGV0ZWN0b3IoKS5Jc0VuYWJsZWQoKTsKK30KKworYm9vbCBvdEphbURldGVjdGlvbkdldFN0YXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SmFtRGV0ZWN0b3IoKS5HZXRTdGF0ZSgpOworfQorCit1aW50NjRfdCBvdEphbURldGVjdGlvbkdldEhpc3RvcnlCaXRtYXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRKYW1EZXRlY3RvcigpLkdldEhpc3RvcnlCaXRtYXAoKTsKK30KKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvam9pbmVyX2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvam9pbmVyX2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhhMjdmZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9qb2luZXJfYXBpLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIEpvaW5lciBBUEkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2pvaW5lci5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKworb3RFcnJvciBvdEpvaW5lclN0YXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgY2hhciAqYVBTS2QsIGNvbnN0IGNoYXIgKmFQcm92aXNpb25pbmdVcmwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVZlbmRvck5hbWUsIGNvbnN0IGNoYXIgKmFWZW5kb3JNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphVmVuZG9yU3dWZXJzaW9uLCBjb25zdCBjaGFyICphVmVuZG9yRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICBvdEpvaW5lckNhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEpvaW5lcigpLlN0YXJ0KGFQU0tkLCBhUHJvdmlzaW9uaW5nVXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmVuZG9yTmFtZSwgYVZlbmRvck1vZGVsLCBhVmVuZG9yU3dWZXJzaW9uLCBhVmVuZG9yRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNhbGxiYWNrLCBhQ29udGV4dCk7Cit9CisKK290RXJyb3Igb3RKb2luZXJTdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Sm9pbmVyKCkuU3RvcCgpOworfQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL2xpbmtfYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9saW5rX2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlNWJiYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9saW5rX2FwaS5jcHAKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgTGluayBBUEkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2xpbmsuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCitzdGF0aWMgdm9pZCBIYW5kbGVBY3RpdmVTY2FuUmVzdWx0KHZvaWQgKmFDb250ZXh0LCBNYWM6OkZyYW1lICphRnJhbWUpOworc3RhdGljIHZvaWQgSGFuZGxlRW5lcmd5U2NhblJlc3VsdCh2b2lkICphQ29udGV4dCwgb3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0KTsKKwordWludDhfdCBvdExpbmtHZXRDaGFubmVsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0Q2hhbm5lbCgpOworfQorCitvdEVycm9yIG90TGlua1NldENoYW5uZWwob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFDaGFubmVsKQoreworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVELAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5TZXRDaGFubmVsKGFDaGFubmVsKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuQ2xlYXIoKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkNsZWFyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitjb25zdCB1aW50OF90ICpvdExpbmtHZXRFeHRlbmRlZEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpKTsKK30KKworb3RFcnJvciBvdExpbmtTZXRFeHRlbmRlZEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdEV4dEFkZHJlc3MgKmFFeHRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFFeHRBZGRyZXNzICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVELAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuU2V0RXh0QWRkcmVzcygqc3RhdGljX2Nhc3Q8Y29uc3QgTWFjOjpFeHRBZGRyZXNzICo+KGFFeHRBZGRyZXNzKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuVXBkYXRlTGlua0xvY2FsQWRkcmVzcygpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgb3RMaW5rR2V0RmFjdG9yeUFzc2lnbmVkSWVlZUV1aTY0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RFeHRBZGRyZXNzICphRXVpNjQpCit7CisgICAgb3RQbGF0UmFkaW9HZXRJZWVlRXVpNjQoYUluc3RhbmNlLCBhRXVpNjQtPm04KTsKK30KKwordm9pZCBvdExpbmtHZXRKb2luZXJJZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90RXh0QWRkcmVzcyAqYUhhc2hNYWNBZGRyZXNzKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldEhhc2hNYWNBZGRyZXNzKHN0YXRpY19jYXN0PE1hYzo6RXh0QWRkcmVzcyAqPihhSGFzaE1hY0FkZHJlc3MpKTsKK30KKworaW50OF90IG90TGlua0dldE1heFRyYW5zbWl0UG93ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRNYXhUcmFuc21pdFBvd2VyKCk7Cit9CisKK3ZvaWQgb3RMaW5rU2V0TWF4VHJhbnNtaXRQb3dlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUG93ZXIpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuU2V0TWF4VHJhbnNtaXRQb3dlcihhUG93ZXIpOworICAgIG90UGxhdFJhZGlvU2V0RGVmYXVsdFR4UG93ZXIoYUluc3RhbmNlLCBhUG93ZXIpOworfQorCitvdFBhbklkIG90TGlua0dldFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0UGFuSWQoKTsKK30KKworb3RFcnJvciBvdExpbmtTZXRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UGFuSWQgYVBhbklkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuU2V0UGFuSWQoYVBhbklkKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuQ2xlYXIoKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkNsZWFyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit1aW50MzJfdCBvdExpbmtHZXRQb2xsUGVyaW9kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldERhdGFQb2xsTWFuYWdlcigpLkdldEtlZXBBbGl2ZVBvbGxQZXJpb2QoKTsKK30KKwordm9pZCBvdExpbmtTZXRQb2xsUGVyaW9kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVBvbGxQZXJpb2QpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldERhdGFQb2xsTWFuYWdlcigpLlNldEV4dGVybmFsUG9sbFBlcmlvZChhUG9sbFBlcmlvZCk7Cit9CisKK290RXJyb3Igb3RMaW5rU2VuZERhdGFSZXF1ZXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldERhdGFQb2xsTWFuYWdlcigpLlNlbmREYXRhUG9sbCgpOworfQorCitvdFNob3J0QWRkcmVzcyBvdExpbmtHZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRTaG9ydEFkZHJlc3MoKTsKK30KKworb3RFcnJvciBvdExpbmtBZGRXaGl0ZWxpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRXaGl0ZWxpc3QoKS5BZGQoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTWFjOjpFeHRBZGRyZXNzICo+KGFFeHRBZGRyKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUzsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rQWRkV2hpdGVsaXN0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCBpbnQ4X3QgYVJzc2kpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RNYWNXaGl0ZWxpc3RFbnRyeSAqZW50cnk7CisKKyAgICBlbnRyeSA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFdoaXRlbGlzdCgpLkFkZCgqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBNYWM6OkV4dEFkZHJlc3MgKj4oYUV4dEFkZHIpKTsKKyAgICBWZXJpZnlPckV4aXQoZW50cnkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRXaGl0ZWxpc3QoKS5TZXRGaXhlZFJzc2koKmVudHJ5LCBhUnNzaSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIG90TGlua1JlbW92ZVdoaXRlbGlzdChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFdoaXRlbGlzdCgpLlJlbW92ZSgqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBNYWM6OkV4dEFkZHJlc3MgKj4oYUV4dEFkZHIpKTsKK30KKwordm9pZCBvdExpbmtDbGVhcldoaXRlbGlzdChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0V2hpdGVsaXN0KCkuQ2xlYXIoKTsKK30KKworb3RFcnJvciBvdExpbmtHZXRXaGl0ZWxpc3RFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUluZGV4LCBvdE1hY1doaXRlbGlzdEVudHJ5ICphRW50cnkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUVudHJ5ICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFdoaXRlbGlzdCgpLkdldEVudHJ5KGFJbmRleCwgKmFFbnRyeSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFdoaXRlbGlzdCgpLlNldEVuYWJsZWQoYUVuYWJsZWQpOworfQorCitib29sIG90TGlua0lzV2hpdGVsaXN0RW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFdoaXRlbGlzdCgpLklzRW5hYmxlZCgpOworfQorCitvdEVycm9yIG90TGlua0FkZEJsYWNrbGlzdChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldEJsYWNrbGlzdCgpLkFkZCgqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBNYWM6OkV4dEFkZHJlc3MgKj4oYUV4dEFkZHIpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBvdExpbmtSZW1vdmVCbGFja2xpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcikKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRCbGFja2xpc3QoKS5SZW1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTWFjOjpFeHRBZGRyZXNzICo+KGFFeHRBZGRyKSk7Cit9CisKK3ZvaWQgb3RMaW5rQ2xlYXJCbGFja2xpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldEJsYWNrbGlzdCgpLkNsZWFyKCk7Cit9CisKK290RXJyb3Igb3RMaW5rR2V0QmxhY2tsaXN0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFJbmRleCwgb3RNYWNCbGFja2xpc3RFbnRyeSAqYUVudHJ5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFFbnRyeSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRCbGFja2xpc3QoKS5HZXRFbnRyeShhSW5kZXgsICphRW50cnkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBvdExpbmtTZXRCbGFja2xpc3RFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRCbGFja2xpc3QoKS5TZXRFbmFibGVkKGFFbmFibGVkKTsKK30KKworYm9vbCBvdExpbmtJc0JsYWNrbGlzdEVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRCbGFja2xpc3QoKS5Jc0VuYWJsZWQoKTsKK30KKworb3RFcnJvciBvdExpbmtHZXRBc3NpZ25MaW5rUXVhbGl0eShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCB1aW50OF90ICphTGlua1F1YWxpdHkpCit7CisgICAgTWFjOjpFeHRBZGRyZXNzIGV4dEFkZHJlc3M7CisKKyAgICBtZW1zZXQoJmV4dEFkZHJlc3MsIDAsIHNpemVvZihleHRBZGRyZXNzKSk7CisgICAgbWVtY3B5KGV4dEFkZHJlc3MubTgsIGFFeHRBZGRyLCBPVF9FWFRfQUREUkVTU19TSVpFKTsKKworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRBc3NpZ25MaW5rUXVhbGl0eShleHRBZGRyZXNzLCAqYUxpbmtRdWFsaXR5KTsKK30KKwordm9pZCBvdExpbmtTZXRBc3NpZ25MaW5rUXVhbGl0eShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCB1aW50OF90IGFMaW5rUXVhbGl0eSkKK3sKKyAgICBNYWM6OkV4dEFkZHJlc3MgZXh0QWRkcmVzczsKKworICAgIG1lbXNldCgmZXh0QWRkcmVzcywgMCwgc2l6ZW9mKGV4dEFkZHJlc3MpKTsKKyAgICBtZW1jcHkoZXh0QWRkcmVzcy5tOCwgYUV4dEFkZHIsIE9UX0VYVF9BRERSRVNTX1NJWkUpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0QXNzaWduTGlua1F1YWxpdHkoZXh0QWRkcmVzcywgYUxpbmtRdWFsaXR5KTsKK30KKwordm9pZCBvdExpbmtTZXRQY2FwQ2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExpbmtQY2FwQ2FsbGJhY2sgYVBjYXBDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5TZXRQY2FwQ2FsbGJhY2soYVBjYXBDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dCk7Cit9CisKK2Jvb2wgb3RMaW5rSXNQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLklzUHJvbWlzY3VvdXMoKTsKK30KKworb3RFcnJvciBvdExpbmtTZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYVByb21pc2N1b3VzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgLy8gY2Fubm90IGVuYWJsZSBJRUVFIDgwMi4xNS40IHByb21pc2N1b3VzIG1vZGUgaWYgdGhlIFRocmVhZCBpbnRlcmZhY2UgaXMgZW5hYmxlZAorICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5Jc1VwKCkgPT0gZmFsc2UsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5TZXRQcm9taXNjdW91cyhhUHJvbWlzY3VvdXMpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworY29uc3Qgb3RNYWNDb3VudGVycyAqb3RMaW5rR2V0Q291bnRlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiAmYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0Q291bnRlcnMoKTsKK30KKworb3RFcnJvciBvdExpbmtBY3RpdmVTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVNjYW5DaGFubmVscywgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvdEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQgYUNhbGxiYWNrLCB2b2lkICphQ2FsbGJhY2tDb250ZXh0KQoreworICAgIGFJbnN0YW5jZS0+bUFjdGl2ZVNjYW5DYWxsYmFjayA9IGFDYWxsYmFjazsKKyAgICBhSW5zdGFuY2UtPm1BY3RpdmVTY2FuQ2FsbGJhY2tDb250ZXh0ID0gYUNhbGxiYWNrQ29udGV4dDsKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuQWN0aXZlU2NhbihhU2NhbkNoYW5uZWxzLCBhU2NhbkR1cmF0aW9uLCAmSGFuZGxlQWN0aXZlU2NhblJlc3VsdCwgYUluc3RhbmNlKTsKK30KKworYm9vbCBvdExpbmtJc0FjdGl2ZVNjYW5JblByb2dyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuSXNBY3RpdmVTY2FuSW5Qcm9ncmVzcygpOworfQorCit2b2lkIEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQodm9pZCAqYUNvbnRleHQsIE1hYzo6RnJhbWUgKmFGcmFtZSkKK3sKKyAgICBvdEluc3RhbmNlICphSW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxvdEluc3RhbmNlICo+KGFDb250ZXh0KTsKKyAgICBvdEFjdGl2ZVNjYW5SZXN1bHQgcmVzdWx0OworCisgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZSAhPSBOVUxMLCBhSW5zdGFuY2UtPm1BY3RpdmVTY2FuQ2FsbGJhY2soTlVMTCwgYUluc3RhbmNlLT5tQWN0aXZlU2NhbkNhbGxiYWNrQ29udGV4dCkpOworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkNvbnZlcnRCZWFjb25Ub0FjdGl2ZVNjYW5SZXN1bHQoYUZyYW1lLCByZXN1bHQpOworICAgIGFJbnN0YW5jZS0+bUFjdGl2ZVNjYW5DYWxsYmFjaygmcmVzdWx0LCBhSW5zdGFuY2UtPm1BY3RpdmVTY2FuQ2FsbGJhY2tDb250ZXh0KTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3Igb3RMaW5rRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFTY2FuQ2hhbm5lbHMsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgb3RIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0IGFDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCkKK3sKKyAgICBhSW5zdGFuY2UtPm1FbmVyZ3lTY2FuQ2FsbGJhY2sgPSBhQ2FsbGJhY2s7CisgICAgYUluc3RhbmNlLT5tRW5lcmd5U2NhbkNhbGxiYWNrQ29udGV4dCA9IGFDYWxsYmFja0NvbnRleHQ7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkVuZXJneVNjYW4oYVNjYW5DaGFubmVscywgYVNjYW5EdXJhdGlvbiwgJkhhbmRsZUVuZXJneVNjYW5SZXN1bHQsIGFJbnN0YW5jZSk7Cit9CisKK3ZvaWQgSGFuZGxlRW5lcmd5U2NhblJlc3VsdCh2b2lkICphQ29udGV4dCwgb3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0KQoreworICAgIG90SW5zdGFuY2UgKmFJbnN0YW5jZSA9IHN0YXRpY19jYXN0PG90SW5zdGFuY2UgKj4oYUNvbnRleHQpOworCisgICAgYUluc3RhbmNlLT5tRW5lcmd5U2NhbkNhbGxiYWNrKGFSZXN1bHQsIGFJbnN0YW5jZS0+bUVuZXJneVNjYW5DYWxsYmFja0NvbnRleHQpOworfQorCitib29sIG90TGlua0lzRW5lcmd5U2NhbkluUHJvZ3Jlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5Jc0VuZXJneVNjYW5JblByb2dyZXNzKCk7Cit9CisKK2Jvb2wgb3RMaW5rSXNJblRyYW5zbWl0U3RhdGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5Jc0luVHJhbnNtaXRTdGF0ZSgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL2xpbmtfcmF3LmhwcCBiL3NyYy9jb3JlL2FwaS9saW5rX3Jhdy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlZDYxMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9saW5rX3Jhdy5ocHAKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgUmF3IExpbmstTGF5ZXIgY2xhc3MuCisgKi8KKworI2lmbmRlZiBMSU5LX1JBV19IUFBfCisjZGVmaW5lIExJTktfUkFXX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbGlua19yYXcuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUIHx8IE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUIHx8IE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorI2RlZmluZSBPUEVOVEhSRUFEX0xJTktSQVdfVElNRVJfUkVRVUlSRUQgMQorI2Vsc2UKKyNkZWZpbmUgT1BFTlRIUkVBRF9MSU5LUkFXX1RJTUVSX1JFUVVJUkVEIDAKKyNlbmRpZgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBMaW5rUmF3Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTGlua1JhdyhvdEluc3RhbmNlICZhSW5zdGFuY2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZSByYXcgbGluay1sYXllciBpcyBlbmFibGVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0VuYWJsZWQoKSB7IHJldHVybiBtRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5hYmxlcy9kaXNhYmxlcyB0aGUgcmF3IGxpbmstbGF5ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEVuYWJsZWQoYm9vbCBhRW5hYmxlZCkgeyBtRW5hYmxlZCA9IGFFbmFibGVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHJhdyBsaW5rLWxheWVyLgorICAgICAqCisgICAgICovCisgICAgb3RSYWRpb0NhcHMgR2V0Q2FwcygpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RhcnRzIGEgKHJlY3VycmluZykgUmVjZWl2ZSBvbiB0aGUgbGluay1sYXllci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVjZWl2ZSh1aW50OF90IGFDaGFubmVsLCBvdExpbmtSYXdSZWNlaXZlRG9uZSBhQ2FsbGJhY2spOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW52b2tlcyB0aGUgbVJlY2VpdmVEb25lQ2FsbGJhY2ssIGlmIHNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW52b2tlUmVjZWl2ZURvbmUob3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyBhIChzaW5nbGUpIFRyYW5zbWl0IG9uIHRoZSBsaW5rLWxheWVyLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBUcmFuc21pdChvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RMaW5rUmF3VHJhbnNtaXREb25lIGFDYWxsYmFjayk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnZva2VzIHRoZSBtVHJhbnNtaXREb25lQ2FsbGJhY2ssIGlmIHNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW52b2tlVHJhbnNtaXREb25lKG90UmFkaW9GcmFtZSAqYUZyYW1lLCBib29sIGFGcmFtZVBlbmRpbmcsIG90RXJyb3IgYUVycm9yKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyBhIChzaW5nbGUpIEVuZXJ5IFNjYW4gb24gdGhlIGxpbmstbGF5ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEVuZXJneVNjYW4odWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sIG90TGlua1Jhd0VuZXJneVNjYW5Eb25lIGFDYWxsYmFjayk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnZva2VzIHRoZSBtRW5lcmd5U2NhbkRvbmVDYWxsYmFjaywgaWYgc2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbnZva2VFbmVyZ3lTY2FuRG9uZShpbnQ4X3QgYUVuZXJneVNjYW5NYXhSc3NpKTsKKworcHJpdmF0ZToKKyAgICBvdEVycm9yIERvVHJhbnNtaXQob3RSYWRpb0ZyYW1lICphRnJhbWUpOworICAgIHN0YXRpYyBMaW5rUmF3ICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICBvdEluc3RhbmNlICAgICAgICAgICAgICZtSW5zdGFuY2U7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgbUVuYWJsZWQ7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgbVJlY2VpdmVDaGFubmVsOworICAgIG90TGlua1Jhd1JlY2VpdmVEb25lICAgIG1SZWNlaXZlRG9uZUNhbGxiYWNrOworICAgIG90TGlua1Jhd1RyYW5zbWl0RG9uZSAgIG1UcmFuc21pdERvbmVDYWxsYmFjazsKKyAgICBvdExpbmtSYXdFbmVyZ3lTY2FuRG9uZSBtRW5lcmd5U2NhbkRvbmVDYWxsYmFjazsKKworI2lmIE9QRU5USFJFQURfTElOS1JBV19USU1FUl9SRVFVSVJFRAorCisgICAgZW51bSBUaW1lclJlYXNvbgorICAgIHsKKyAgICAgICAga1RpbWVyUmVhc29uTm9uZSwKKyAgICAgICAga1RpbWVyUmVhc29uQWNrVGltZW91dCwKKyAgICAgICAga1RpbWVyUmVhc29uUmV0cmFuc21pdFRpbWVvdXQsCisgICAgICAgIGtUaW1lclJlYXNvbkVuZXJneVNjYW5Db21wbGV0ZSwKKyAgICB9OworCisgICAgVGltZXIgICAgICAgICAgICAgICAgICAgbVRpbWVyOworICAgIFRpbWVyUmVhc29uICAgICAgICAgICAgIG1UaW1lclJlYXNvbjsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKHZvaWQgKmFDb250ZXh0KTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9MSU5LUkFXX1RJTUVSX1JFUVVJUkVECisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVAorCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgbVRyYW5zbWl0QXR0ZW1wdHM7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgbUNzbWFBdHRlbXB0czsKKworICAgIHZvaWQgU3RhcnRDc21hQmFja29mZih2b2lkKTsKKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4KKworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtJbnZhbGlkUnNzaVZhbHVlID0gMTI3CisgICAgfTsKKworICAgIFRhc2tsZXQgICAgICAgICAgICAgICAgIG1FbmVyZ3lTY2FuVGFzazsKKyAgICBpbnQ4X3QgICAgICAgICAgICAgICAgICBtRW5lcmd5U2NhblJzc2k7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVFbmVyZ3lTY2FuVGFzayhUYXNrbGV0ICZhVGFza2xldCk7CisgICAgdm9pZCBIYW5kbGVFbmVyZ3lTY2FuVGFzayh2b2lkKTsKKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorfTsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTElOS19SQVdfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL2xpbmtfcmF3X2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvbGlua19yYXdfYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTlhZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL2xpbmtfcmF3X2FwaS5jcHAKQEAgLTAsMCArMSw2MjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgTGluayBSYXcgQVBJLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VzZWMtYWxhcm0uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCitvdEVycm9yIG90TGlua1Jhd1NldEVuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoIWFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLklzVXAoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIG90TG9nSW5mb1BsYXQoYUluc3RhbmNlLCAiTGlua1JhdyBFbmFibGVkPSVkIiwgYUVuYWJsZWQgPyAxIDogMCk7CisKKyAgICBhSW5zdGFuY2UtPm1MaW5rUmF3LlNldEVuYWJsZWQoYUVuYWJsZWQpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworYm9vbCBvdExpbmtSYXdJc0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1MaW5rUmF3LklzRW5hYmxlZCgpOworfQorCitvdEVycm9yIG90TGlua1Jhd1NldFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBhbklkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdFBsYXRSYWRpb1NldFBhbklkKGFJbnN0YW5jZSwgYVBhbklkKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U2V0RXh0ZW5kZWRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0ZW5kZWRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgYnVmW3NpemVvZihvdEV4dEFkZHJlc3MpXTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2UtPm1MaW5rUmF3LklzRW5hYmxlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoYnVmKTsgaSsrKQorICAgIHsKKyAgICAgICAgYnVmW2ldID0gYUV4dGVuZGVkQWRkcmVzcy0+bThbNyAtIGldOworICAgIH0KKworICAgIG90UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzKGFJbnN0YW5jZSwgYnVmKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U2V0U2hvcnRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2UtPm1MaW5rUmF3LklzRW5hYmxlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgb3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3MoYUluc3RhbmNlLCBhU2hvcnRBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgb3RMaW5rUmF3R2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBvdFBsYXRSYWRpb0dldFByb21pc2N1b3VzKGFJbnN0YW5jZSk7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tTGlua1Jhdy5Jc0VuYWJsZWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIG90TG9nSW5mb1BsYXQoYUluc3RhbmNlLCAiTGlua1JhdyBQcm9taXNjdW91cz0lZCIsIGFFbmFibGUgPyAxIDogMCk7CisKKyAgICBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKGFJbnN0YW5jZSwgYUVuYWJsZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90TGlua1Jhd1NsZWVwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2UtPm1MaW5rUmF3LklzRW5hYmxlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgb3RMb2dJbmZvUGxhdChhSW5zdGFuY2UsICJMaW5rUmF3IFNsZWVwIik7CisKKyAgICBlcnJvciA9IG90UGxhdFJhZGlvU2xlZXAoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3UmVjZWl2ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoYW5uZWwsIG90TGlua1Jhd1JlY2VpdmVEb25lIGFDYWxsYmFjaykKK3sKKyAgICBvdExvZ0luZm9QbGF0KGFJbnN0YW5jZSwgIkxpbmtSYXcgUmVjdiAoQ2hhbm5lbCAlZCkiLCBhQ2hhbm5lbCk7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bUxpbmtSYXcuUmVjZWl2ZShhQ2hhbm5lbCwgYUNhbGxiYWNrKTsKK30KKworb3RSYWRpb0ZyYW1lICpvdExpbmtSYXdHZXRUcmFuc21pdEJ1ZmZlcihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RSYWRpb0ZyYW1lICpidWZmZXIgPSBOVUxMOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCkpOworCisgICAgYnVmZmVyID0gb3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcihhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBidWZmZXI7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3VHJhbnNtaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RMaW5rUmF3VHJhbnNtaXREb25lIGFDYWxsYmFjaykKK3sKKyAgICBvdExvZ0luZm9QbGF0KGFJbnN0YW5jZSwgIkxpbmtSYXcgVHJhbnNtaXQgKCVkIGJ5dGVzIG9uIGNoYW5uZWwgJWQpIiwgYUZyYW1lLT5tTGVuZ3RoLCBhRnJhbWUtPm1DaGFubmVsKTsKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tTGlua1Jhdy5UcmFuc21pdChhRnJhbWUsIGFDYWxsYmFjayk7Cit9CisKK2ludDhfdCBvdExpbmtSYXdHZXRSc3NpKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gb3RQbGF0UmFkaW9HZXRSc3NpKGFJbnN0YW5jZSk7Cit9CisKK290UmFkaW9DYXBzIG90TGlua1Jhd0dldENhcHMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1MaW5rUmF3LkdldENhcHMoKTsKK30KKworb3RFcnJvciBvdExpbmtSYXdFbmVyZ3lTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RMaW5rUmF3RW5lcmd5U2NhbkRvbmUgYUNhbGxiYWNrKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1MaW5rUmF3LkVuZXJneVNjYW4oYVNjYW5DaGFubmVsLCBhU2NhbkR1cmF0aW9uLCBhQ2FsbGJhY2spOworfQorCitvdEVycm9yIG90TGlua1Jhd1NyY01hdGNoRW5hYmxlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdFBsYXRSYWRpb0VuYWJsZVNyY01hdGNoKGFJbnN0YW5jZSwgYUVuYWJsZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90TGlua1Jhd1NyY01hdGNoQWRkU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tTGlua1Jhdy5Jc0VuYWJsZWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGVycm9yID0gb3RQbGF0UmFkaW9BZGRTcmNNYXRjaFNob3J0RW50cnkoYUluc3RhbmNlLCBhU2hvcnRBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hBZGRFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBlcnJvciA9IG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShhSW5zdGFuY2UsIGFFeHRBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hDbGVhclNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBlcnJvciA9IG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkoYUluc3RhbmNlLCBhU2hvcnRBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hDbGVhckV4dEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tTGlua1Jhdy5Jc0VuYWJsZWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGVycm9yID0gb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cnkoYUluc3RhbmNlLCBhRXh0QWRkcmVzcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90TGlua1Jhd1NyY01hdGNoQ2xlYXJTaG9ydEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJpZXMoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hDbGVhckV4dEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyaWVzKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCituYW1lc3BhY2Ugb3QgeworCitMaW5rUmF3OjpMaW5rUmF3KG90SW5zdGFuY2UgJmFJbnN0YW5jZSk6CisgICAgbUluc3RhbmNlKGFJbnN0YW5jZSksCisgICAgbUVuYWJsZWQoZmFsc2UpLAorICAgIG1SZWNlaXZlQ2hhbm5lbChPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX0NIQU5ORUwpLAorICAgIG1SZWNlaXZlRG9uZUNhbGxiYWNrKE5VTEwpLAorICAgIG1UcmFuc21pdERvbmVDYWxsYmFjayhOVUxMKSwKKyAgICBtRW5lcmd5U2NhbkRvbmVDYWxsYmFjayhOVUxMKQorI2lmIE9QRU5USFJFQURfTElOS1JBV19USU1FUl9SRVFVSVJFRAorICAgICwgbVRpbWVyKGFJbnN0YW5jZS5tSXA2Lm1UaW1lclNjaGVkdWxlciwgJkxpbmtSYXc6OkhhbmRsZVRpbWVyLCB0aGlzKQorICAgICwgbVRpbWVyUmVhc29uKGtUaW1lclJlYXNvbk5vbmUpCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9MSU5LUkFXX1RJTUVSX1JFUVVJUkVECisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOCisgICAgLCBtRW5lcmd5U2NhblRhc2soYUluc3RhbmNlLm1JcDYubVRhc2tsZXRTY2hlZHVsZXIsICZMaW5rUmF3OjpIYW5kbGVFbmVyZ3lTY2FuVGFzaywgdGhpcykKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4KK3sKKyAgICAvLyBRdWVyeSB0aGUgY2FwYWJpbGl0aWVzIHRvIGNoZWNrIGFzc2VydHMKKyAgICAodm9pZClHZXRDYXBzKCk7Cit9CisKK290UmFkaW9DYXBzIExpbmtSYXc6OkdldENhcHMoKQoreworICAgIG90UmFkaW9DYXBzIFJhZGlvQ2FwcyA9IG90UGxhdFJhZGlvR2V0Q2FwcygmbUluc3RhbmNlKTsKKworICAgIC8vIFRoZSByYWRpbyBzaG91bGRuJ3Qgc3VwcG9ydCBhIGNhcGFiaWxpdHkgaWYgaXQgaXMgYmVpbmcgY29tcGlsZQorICAgIC8vIHRpbWUgaW5jbHVkZWQgaW50byB0aGUgcmF3IGxpbmstbGF5ZXIgY29kZS4KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVAorICAgIGFzc2VydCgoUmFkaW9DYXBzICYgT1RfUkFESU9fQ0FQU19BQ0tfVElNRU9VVCkgPT0gMCk7CisgICAgUmFkaW9DYXBzID0gKG90UmFkaW9DYXBzKShSYWRpb0NhcHMgfCBPVF9SQURJT19DQVBTX0FDS19USU1FT1VUKTsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfQUNLX1RJTUVPVVQKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCisgICAgYXNzZXJ0KChSYWRpb0NhcHMgJiBPVF9SQURJT19DQVBTX1RSQU5TTUlUX1JFVFJJRVMpID09IDApOworICAgIFJhZGlvQ2FwcyA9IChvdFJhZGlvQ2FwcykoUmFkaW9DYXBzIHwgT1RfUkFESU9fQ0FQU19UUkFOU01JVF9SRVRSSUVTKTsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVAorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOCisgICAgYXNzZXJ0KChSYWRpb0NhcHMgJiBPVF9SQURJT19DQVBTX0VORVJHWV9TQ0FOKSA9PSAwKTsKKyAgICBSYWRpb0NhcHMgPSAob3RSYWRpb0NhcHMpKFJhZGlvQ2FwcyB8IE9UX1JBRElPX0NBUFNfRU5FUkdZX1NDQU4pOworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorCisgICAgcmV0dXJuIFJhZGlvQ2FwczsKK30KKworb3RFcnJvciBMaW5rUmF3OjpSZWNlaXZlKHVpbnQ4X3QgYUNoYW5uZWwsIG90TGlua1Jhd1JlY2VpdmVEb25lIGFDYWxsYmFjaykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKworICAgIGlmIChtRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1SZWNlaXZlQ2hhbm5lbCA9IGFDaGFubmVsOworICAgICAgICBtUmVjZWl2ZURvbmVDYWxsYmFjayA9IGFDYWxsYmFjazsKKyAgICAgICAgZXJyb3IgPSBvdFBsYXRSYWRpb1JlY2VpdmUoJm1JbnN0YW5jZSwgYUNoYW5uZWwpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBMaW5rUmF3OjpJbnZva2VSZWNlaXZlRG9uZShvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgaWYgKG1SZWNlaXZlRG9uZUNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ0luZm9QbGF0KCZtSW5zdGFuY2UsICJMaW5rUmF3IEludm9rZSBSZWNlaXZlIERvbmUgKCVkIGJ5dGVzKSIsIGFGcmFtZS0+bUxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ1dhcm5QbGF0KCZtSW5zdGFuY2UsICJMaW5rUmF3IEludm9rZSBSZWNlaXZlIERvbmUgKGVycj0weCV4KSIsIGFFcnJvcik7CisgICAgICAgIH0KKworICAgICAgICBtUmVjZWl2ZURvbmVDYWxsYmFjaygmbUluc3RhbmNlLCBhRnJhbWUsIGFFcnJvcik7CisgICAgfQorfQorCitvdEVycm9yIExpbmtSYXc6OlRyYW5zbWl0KG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdExpbmtSYXdUcmFuc21pdERvbmUgYUNhbGxiYWNrKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworCisgICAgaWYgKG1FbmFibGVkKQorICAgIHsKKyAgICAgICAgbVRyYW5zbWl0RG9uZUNhbGxiYWNrID0gYUNhbGxiYWNrOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKyAgICAgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFGcmFtZSk7CisgICAgICAgIG1UcmFuc21pdEF0dGVtcHRzID0gMDsKKyAgICAgICAgbUNzbWFBdHRlbXB0cyA9IDA7CisKKyAgICAgICAgLy8gU3RhcnQgdGhlIHRyYW5zbWlzc2lvbiBiYWNrbG9nIGxvZ2ljCisgICAgICAgIFN0YXJ0Q3NtYUJhY2tvZmYoKTsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworI2Vsc2UKKyAgICAgICAgLy8gTGV0IHRoZSBoYXJkd2FyZSBkbyB0aGUgdHJhbnNtaXNzaW9uIGxvZ2ljCisgICAgICAgIGVycm9yID0gRG9UcmFuc21pdChhRnJhbWUpOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExpbmtSYXc6OkRvVHJhbnNtaXQob3RSYWRpb0ZyYW1lICphRnJhbWUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IG90UGxhdFJhZGlvVHJhbnNtaXQoJm1JbnN0YW5jZSwgYUZyYW1lKTsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVAorCisgICAgLy8gSWYgd2UgYXJlIGltcGxlbWVudGluZyB0aGUgQUNLIHRpbWVvdXQgbG9naWMsIHN0YXJ0IGEgdGltZXIgaGVyZSAoaWYgQUNLIHJlcXVlc3QpCisgICAgLy8gdG8gZmlyZSBpZiB3ZSBkb24ndCBnZXQgYSB0cmFuc21pdCBkb25lIGNhbGxiYWNrIGluIHRpbWUuCisgICAgaWYgKHN0YXRpY19jYXN0PE1hYzo6RnJhbWUgKj4oYUZyYW1lKS0+R2V0QWNrUmVxdWVzdCgpKQorICAgIHsKKyAgICAgICAgb3RMb2dEZWJnUGxhdChhSW5zdGFuY2UsICJMaW5rUmF3IFN0YXJ0aW5nIEFja1RpbWVvdXQgVGltZXIiKTsKKyAgICAgICAgbVRpbWVyUmVhc29uID0ga1RpbWVyUmVhc29uQWNrVGltZW91dDsKKyAgICAgICAgbVRpbWVyLlN0YXJ0KE1hYzo6a0Fja1RpbWVvdXQpOworICAgIH0KKworI2VuZGlmCisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTGlua1Jhdzo6SW52b2tlVHJhbnNtaXREb25lKG90UmFkaW9GcmFtZSAqYUZyYW1lLCBib29sIGFGcmFtZVBlbmRpbmcsIG90RXJyb3IgYUVycm9yKQoreworICAgIG90TG9nRGViZ1BsYXQoYUluc3RhbmNlLCAiTGlua1JhdyBUcmFuc21pdCBEb25lIChlcnI9MHgleCkiLCBhRXJyb3IpOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUCisgICAgbVRpbWVyLlN0b3AoKTsKKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKworICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRSkKKyAgICB7CisgICAgICAgIGlmIChtQ3NtYUF0dGVtcHRzIDwgTWFjOjprTWF4Q1NNQUJhY2tvZmZzKQorICAgICAgICB7CisgICAgICAgICAgICBtQ3NtYUF0dGVtcHRzKys7CisgICAgICAgICAgICBTdGFydENzbWFCYWNrb2ZmKCk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUNzbWFBdHRlbXB0cyA9IDA7CisgICAgfQorCisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT19BQ0spCisgICAgeworICAgICAgICBpZiAobVRyYW5zbWl0QXR0ZW1wdHMgPCBhRnJhbWUtPm1NYXhUeEF0dGVtcHRzKQorICAgICAgICB7CisgICAgICAgICAgICBtVHJhbnNtaXRBdHRlbXB0cysrOworICAgICAgICAgICAgU3RhcnRDc21hQmFja29mZigpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisjZW5kaWYKKworICAgIC8vIFRyYW5zaXRpb24gYmFjayB0byByZWNlaXZlIHN0YXRlIG9uIHByZXZpb3VzIGNoYW5uZWwKKyAgICBvdFBsYXRSYWRpb1JlY2VpdmUoJm1JbnN0YW5jZSwgbVJlY2VpdmVDaGFubmVsKTsKKworICAgIGlmIChtVHJhbnNtaXREb25lQ2FsbGJhY2spCisgICAgeworICAgICAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TG9nSW5mb1BsYXQoYUluc3RhbmNlLCAiTGlua1JhdyBJbnZva2UgVHJhbnNtaXQgRG9uZSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3RMb2dXYXJuUGxhdChhSW5zdGFuY2UsICJMaW5rUmF3IEludm9rZSBUcmFuc21pdCBGYWlsZWQgKGVycj0weCV4KSIsIGFFcnJvcik7CisgICAgICAgIH0KKworICAgICAgICBtVHJhbnNtaXREb25lQ2FsbGJhY2soJm1JbnN0YW5jZSwgYUZyYW1lLCBhRnJhbWVQZW5kaW5nLCBhRXJyb3IpOworICAgICAgICBtVHJhbnNtaXREb25lQ2FsbGJhY2sgPSBOVUxMOworICAgIH0KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCitleGl0OgorICAgIHJldHVybjsKKyNlbmRpZgorfQorCitvdEVycm9yIExpbmtSYXc6OkVuZXJneVNjYW4odWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sIG90TGlua1Jhd0VuZXJneVNjYW5Eb25lIGFDYWxsYmFjaykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKworICAgIGlmIChtRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1FbmVyZ3lTY2FuRG9uZUNhbGxiYWNrID0gYUNhbGxiYWNrOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOCisgICAgICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBvbiB0aGUgc2NhbiBjaGFubmVsCisgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZSgmbUluc3RhbmNlLCBhU2NhbkNoYW5uZWwpOworCisgICAgICAgIC8vIFJlc2V0IHRoZSBSU1NJIHZhbHVlIGFuZCBzdGFydCBzY2FubmluZworICAgICAgICBtRW5lcmd5U2NhblJzc2kgPSBrSW52YWxpZFJzc2lWYWx1ZTsKKyAgICAgICAgbVRpbWVyUmVhc29uID0ga1RpbWVyUmVhc29uRW5lcmd5U2NhbkNvbXBsZXRlOworICAgICAgICBtVGltZXIuU3RhcnQoYVNjYW5EdXJhdGlvbik7CisgICAgICAgIG1FbmVyZ3lTY2FuVGFzay5Qb3N0KCk7CisjZWxzZQorICAgICAgICAvLyBEbyB0aGUgSFcgb2ZmbG9hZGVkIGVuZXJneSBzY2FuCisgICAgICAgIGVycm9yID0gb3RQbGF0UmFkaW9FbmVyZ3lTY2FuKCZtSW5zdGFuY2UsIGFTY2FuQ2hhbm5lbCwgYVNjYW5EdXJhdGlvbik7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTGlua1Jhdzo6SW52b2tlRW5lcmd5U2NhbkRvbmUoaW50OF90IGFFbmVyZ3lTY2FuTWF4UnNzaSkKK3sKKyAgICBpZiAobUVuZXJneVNjYW5Eb25lQ2FsbGJhY2spCisgICAgeworICAgICAgICBtRW5lcmd5U2NhbkRvbmVDYWxsYmFjaygmbUluc3RhbmNlLCBhRW5lcmd5U2Nhbk1heFJzc2kpOworICAgICAgICBtRW5lcmd5U2NhbkRvbmVDYWxsYmFjayA9IE5VTEw7CisgICAgfQorfQorCisjaWYgT1BFTlRIUkVBRF9MSU5LUkFXX1RJTUVSX1JFUVVJUkVECisKK3ZvaWQgTGlua1Jhdzo6SGFuZGxlVGltZXIodm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TGlua1JhdyAqPihhQ29udGV4dCktPkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgTGlua1Jhdzo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgTGlua1Jhdzo6SGFuZGxlVGltZXIodm9pZCkKK3sKKyAgICBUaW1lclJlYXNvbiB0aW1lclJlYXNvbiA9IG1UaW1lclJlYXNvbjsKKyAgICBtVGltZXJSZWFzb24gPSBrVGltZXJSZWFzb25Ob25lOworCisgICAgc3dpdGNoICh0aW1lclJlYXNvbikKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUCisKKyAgICBjYXNlIGtUaW1lclJlYXNvbkFja1RpbWVvdXQ6CisgICAgeworICAgICAgICAvLyBUcmFuc2l0aW9uIGJhY2sgdG8gcmVjZWl2ZSBzdGF0ZSBvbiBwcmV2aW91cyBjaGFubmVsCisgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZSgmbUluc3RhbmNlLCBtUmVjZWl2ZUNoYW5uZWwpOworCisgICAgICAgIC8vIEludm9rZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciB0cmFuc21pdAorICAgICAgICBJbnZva2VUcmFuc21pdERvbmUob3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcigmbUluc3RhbmNlKSwgZmFsc2UsIE9UX0VSUk9SX05PX0FDSyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVAorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKworICAgIGNhc2Uga1RpbWVyUmVhc29uUmV0cmFuc21pdFRpbWVvdXQ6CisgICAgeworICAgICAgICBvdFJhZGlvRnJhbWUgKmFGcmFtZSA9IG90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIoJm1JbnN0YW5jZSk7CisKKyAgICAgICAgLy8gU3RhcnQgdGhlICB0cmFuc21pdCBub3cKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IERvVHJhbnNtaXQoYUZyYW1lKTsKKworICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgSW52b2tlVHJhbnNtaXREb25lKGFGcmFtZSwgZmFsc2UsIGVycm9yKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4KKworICAgIGNhc2Uga1RpbWVyUmVhc29uRW5lcmd5U2NhbkNvbXBsZXRlOgorICAgIHsKKyAgICAgICAgLy8gSW52b2tlIGNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIHRoZSBlbmVyZ3kgc2NhbgorICAgICAgICBJbnZva2VFbmVyZ3lTY2FuRG9uZShtRW5lcmd5U2NhblJzc2kpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9MSU5LUkFXX1RJTUVSX1JFUVVJUkVECisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVAorCit2b2lkIExpbmtSYXc6OlN0YXJ0Q3NtYUJhY2tvZmYodm9pZCkKK3sKKyAgICB1aW50MzJfdCBiYWNrb2ZmRXhwb25lbnQgPSBNYWM6OmtNaW5CRSArIG1UcmFuc21pdEF0dGVtcHRzICsgbUNzbWFBdHRlbXB0czsKKyAgICB1aW50MzJfdCBiYWNrb2ZmOworCisgICAgaWYgKGJhY2tvZmZFeHBvbmVudCA+IE1hYzo6a01heEJFKQorICAgIHsKKyAgICAgICAgYmFja29mZkV4cG9uZW50ID0gTWFjOjprTWF4QkU7CisgICAgfQorCisgICAgYmFja29mZiA9IChvdFBsYXRSYW5kb21HZXQoKSAlICgxVUwgPDwgYmFja29mZkV4cG9uZW50KSk7CisgICAgYmFja29mZiAqPSAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1hYzo6a1VuaXRCYWNrb2ZmUGVyaW9kKSAqIE9UX1JBRElPX1NZTUJPTF9USU1FKTsKKworICAgIG90TG9nRGViZ1BsYXQoYUluc3RhbmNlLCAiTGlua1JhdyBTdGFydGluZyBSZXRyYW5zbWl0VGltZW91dCBUaW1lciAoJWQgbXMpIiwgYmFja29mZik7CisgICAgbVRpbWVyUmVhc29uID0ga1RpbWVyUmVhc29uUmV0cmFuc21pdFRpbWVvdXQ7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfUExBVEZPUk1fVVNFQ19CQUNLT0ZGX1RJTUVSCisgICAgb3RQbGF0VXNlY0FsYXJtU3RhcnRBdCgmbUluc3RhbmNlLCBvdFBsYXRVc2VjQWxhcm1HZXROb3coKSwgYmFja29mZiwgJkhhbmRsZVRpbWVyLCB0aGlzKTsKKyNlbHNlIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9QTEFURk9STV9VU0VDX0JBQ0tPRkZfVElNRVIKKyAgICBtVGltZXIuU3RhcnQoYmFja29mZiAvIDEwMDBVTCk7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorCit2b2lkIExpbmtSYXc6OkhhbmRsZUVuZXJneVNjYW5UYXNrKFRhc2tsZXQgJmFUYXNrbGV0KQoreworICAgIEdldE93bmVyKGFUYXNrbGV0KS5IYW5kbGVFbmVyZ3lTY2FuVGFzaygpOworfQorCit2b2lkIExpbmtSYXc6OkhhbmRsZUVuZXJneVNjYW5UYXNrKHZvaWQpCit7CisgICAgLy8gT25seSBwcm9jZXNzIHRhc2sgaWYgd2UgYXJlIHN0aWxsIGVuZXJneSBzY2FubmluZworICAgIGlmIChtVGltZXJSZWFzb24gPT0ga1RpbWVyUmVhc29uRW5lcmd5U2NhbkNvbXBsZXRlKQorICAgIHsKKyAgICAgICAgaW50OF90IHJzc2kgPSBvdFBsYXRSYWRpb0dldFJzc2koJm1JbnN0YW5jZSk7CisKKyAgICAgICAgLy8gT25seSBhcHBseSB0aGUgUlNTSSBpZiBpdCB3YXMgYSB2YWxpZCB2YWx1ZQorICAgICAgICBpZiAocnNzaSAhPSBrSW52YWxpZFJzc2lWYWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChtRW5lcmd5U2NhblJzc2kgPT0ga0ludmFsaWRSc3NpVmFsdWUpIHx8IChyc3NpID4gbUVuZXJneVNjYW5Sc3NpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRW5lcmd5U2NhblJzc2kgPSByc3NpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUG9zdCBhbm90aGVyIGluc3RhbmNlIG9mIHRoYSB0YXNrLCBzaW5jZSB3ZSBhcmUKKyAgICAgICAgLy8gc3RpbGwgZG9pbmcgdGhlIGVuZXJneSBzY2FuLgorICAgICAgICBtRW5lcmd5U2NhblRhc2suUG9zdCgpOworICAgIH0KK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorCitMaW5rUmF3ICZMaW5rUmF3OjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBMaW5rUmF3ICZsaW5rID0gKnN0YXRpY19jYXN0PExpbmtSYXcgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgTGlua1JhdyAmbGluayA9IG90R2V0SW5zdGFuY2UoKS0+bUxpbmtSYXc7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBsaW5rOworfQorCit9IC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvbWVzc2FnZV9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL21lc3NhZ2VfYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjAxNmYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL21lc3NhZ2VfYXBpLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBNZXNzYWdlIEFQSS4KKyAqLworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL21lc3NhZ2UuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCitvdEVycm9yIG90TWVzc2FnZUZyZWUob3RNZXNzYWdlICphTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSktPkZyZWUoKTsKK30KKwordWludDE2X3Qgb3RNZXNzYWdlR2V0TGVuZ3RoKG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpOworICAgIHJldHVybiBtZXNzYWdlLT5HZXRMZW5ndGgoKTsKK30KKworb3RFcnJvciBvdE1lc3NhZ2VTZXRMZW5ndGgob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgcmV0dXJuIG1lc3NhZ2UtPlNldExlbmd0aChhTGVuZ3RoKTsKK30KKwordWludDE2X3Qgb3RNZXNzYWdlR2V0T2Zmc2V0KG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpOworICAgIHJldHVybiBtZXNzYWdlLT5HZXRPZmZzZXQoKTsKK30KKworb3RFcnJvciBvdE1lc3NhZ2VTZXRPZmZzZXQob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgcmV0dXJuIG1lc3NhZ2UtPlNldE9mZnNldChhT2Zmc2V0KTsKK30KKworYm9vbCBvdE1lc3NhZ2VJc0xpbmtTZWN1cml0eUVuYWJsZWQob3RNZXNzYWdlICphTWVzc2FnZSkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgcmV0dXJuIG1lc3NhZ2UtPklzTGlua1NlY3VyaXR5RW5hYmxlZCgpOworfQorCit2b2lkIG90TWVzc2FnZVNldERpcmVjdFRyYW5zbWlzc2lvbihvdE1lc3NhZ2UgKmFNZXNzYWdlLCBib29sIGFFbmFibGVkKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKTsKKworICAgIGlmIChhRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPlNldERpcmVjdFRyYW5zbWlzc2lvbigpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtZXNzYWdlLT5DbGVhckRpcmVjdFRyYW5zbWlzc2lvbigpOworICAgIH0KK30KKworb3RFcnJvciBvdE1lc3NhZ2VBcHBlbmQob3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgdm9pZCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgcmV0dXJuIG1lc3NhZ2UtPkFwcGVuZChhQnVmLCBhTGVuZ3RoKTsKK30KKworaW50IG90TWVzc2FnZVJlYWQob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCwgdm9pZCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgcmV0dXJuIG1lc3NhZ2UtPlJlYWQoYU9mZnNldCwgYUxlbmd0aCwgYUJ1Zik7Cit9CisKK2ludCBvdE1lc3NhZ2VXcml0ZShvdE1lc3NhZ2UgKmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCBjb25zdCB2b2lkICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKTsKKyAgICByZXR1cm4gbWVzc2FnZS0+V3JpdGUoYU9mZnNldCwgYUxlbmd0aCwgYUJ1Zik7Cit9CisKK3ZvaWQgb3RNZXNzYWdlUXVldWVJbml0KG90TWVzc2FnZVF1ZXVlICphUXVldWUpCit7CisgICAgYVF1ZXVlLT5tRGF0YSA9IE5VTEw7Cit9CisKK290RXJyb3Igb3RNZXNzYWdlUXVldWVFbnF1ZXVlKG90TWVzc2FnZVF1ZXVlICphUXVldWUsIG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpOworICAgIE1lc3NhZ2VRdWV1ZSAqcXVldWUgPSBzdGF0aWNfY2FzdDxNZXNzYWdlUXVldWUgKj4oYVF1ZXVlKTsKKyAgICByZXR1cm4gcXVldWUtPkVucXVldWUoKm1lc3NhZ2UpOworfQorCitvdEVycm9yIG90TWVzc2FnZVF1ZXVlRGVxdWV1ZShvdE1lc3NhZ2VRdWV1ZSAqYVF1ZXVlLCBvdE1lc3NhZ2UgKmFNZXNzYWdlKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKTsKKyAgICBNZXNzYWdlUXVldWUgKnF1ZXVlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZVF1ZXVlICo+KGFRdWV1ZSk7CisgICAgcmV0dXJuIHF1ZXVlLT5EZXF1ZXVlKCptZXNzYWdlKTsKK30KKworb3RNZXNzYWdlICpvdE1lc3NhZ2VRdWV1ZUdldEhlYWQob3RNZXNzYWdlUXVldWUgKmFRdWV1ZSkKK3sKKyAgICBNZXNzYWdlUXVldWUgKnF1ZXVlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZVF1ZXVlICo+KGFRdWV1ZSk7CisgICAgcmV0dXJuIHF1ZXVlLT5HZXRIZWFkKCk7Cit9CisKK290TWVzc2FnZSAqb3RNZXNzYWdlUXVldWVHZXROZXh0KG90TWVzc2FnZVF1ZXVlICphUXVldWUsIGNvbnN0IG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgTWVzc2FnZSAqbmV4dDsKKyAgICBjb25zdCBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8Y29uc3QgTWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgTWVzc2FnZVF1ZXVlICpxdWV1ZSA9IHN0YXRpY19jYXN0PE1lc3NhZ2VRdWV1ZSAqPihhUXVldWUpOworCisgICAgVmVyaWZ5T3JFeGl0KG1lc3NhZ2UgIT0gTlVMTCwgbmV4dCA9IE5VTEwpOworICAgIFZlcmlmeU9yRXhpdChtZXNzYWdlLT5HZXRNZXNzYWdlUXVldWUoKSA9PSBxdWV1ZSwgbmV4dCA9IE5VTEwpOworICAgIG5leHQgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIG5leHQ7Cit9CisKK3ZvaWQgb3RNZXNzYWdlR2V0QnVmZmVySW5mbyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90QnVmZmVySW5mbyAqYUJ1ZmZlckluZm8pCit7CisgICAgYUJ1ZmZlckluZm8tPm1Ub3RhbEJ1ZmZlcnMgPSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTOworCisgICAgYUJ1ZmZlckluZm8tPm1GcmVlQnVmZmVycyA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldElwNigpLm1NZXNzYWdlUG9vbC5HZXRGcmVlQnVmZmVyQ291bnQoKTsKKworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5HZXRTZW5kUXVldWUoKS5HZXRJbmZvKGFCdWZmZXJJbmZvLT5tNmxvU2VuZE1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFCdWZmZXJJbmZvLT5tNmxvU2VuZEJ1ZmZlcnMpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldFJlYXNzZW1ibHlRdWV1ZSgpLkdldEluZm8oYUJ1ZmZlckluZm8tPm02bG9SZWFzc2VtYmx5TWVzc2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUJ1ZmZlckluZm8tPm02bG9SZWFzc2VtYmx5QnVmZmVycyk7CisKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuR2V0UmVzb2x2aW5nUXVldWUoKS5HZXRJbmZvKGFCdWZmZXJJbmZvLT5tQXJwTWVzc2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQnVmZmVySW5mby0+bUFycEJ1ZmZlcnMpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SXA2KCkuR2V0U2VuZFF1ZXVlKCkuR2V0SW5mbyhhQnVmZmVySW5mby0+bUlwNk1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUJ1ZmZlckluZm8tPm1JcDZCdWZmZXJzKTsKKworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldElwNigpLm1NcGwuR2V0QnVmZmVyZWRNZXNzYWdlU2V0KCkuR2V0SW5mbyhhQnVmZmVySW5mby0+bU1wbE1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQnVmZmVySW5mby0+bU1wbEJ1ZmZlcnMpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0TWVzc2FnZVF1ZXVlKCkuR2V0SW5mbyhhQnVmZmVySW5mby0+bU1sZU1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUJ1ZmZlckluZm8tPm1NbGVCdWZmZXJzKTsKKworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvYXAoKS5HZXRSZXF1ZXN0TWVzc2FnZXMoKS5HZXRJbmZvKGFCdWZmZXJJbmZvLT5tQ29hcE1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFCdWZmZXJJbmZvLT5tQ29hcEJ1ZmZlcnMpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL25ldGRhdGFfYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9uZXRkYXRhX2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiMzcwYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9uZXRkYXRhX2FwaS5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBOZXR3b3JrIERhdGEgQVBJLgorICovCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbmV0ZGF0YS5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK290RXJyb3Igb3ROZXREYXRhR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhU3RhYmxlLCB1aW50OF90ICphRGF0YSwgdWludDhfdCAqYURhdGFMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYURhdGEgIT0gTlVMTCAmJiBhRGF0YUxlbmd0aCAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldE5ldHdvcmtEYXRhKGFTdGFibGUsIGFEYXRhLCAqYURhdGFMZW5ndGgpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdE5ldERhdGFHZXROZXh0T25NZXNoUHJlZml4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUl0ZXJhdG9yICYmIGFDb25maWcsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXROZXh0T25NZXNoUHJlZml4KGFJdGVyYXRvciwgYUNvbmZpZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90TmV0RGF0YUdldE5leHRSb3V0ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0d29ya0RhdGFJdGVyYXRvciAqYUl0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RFeHRlcm5hbFJvdXRlQ29uZmlnICphQ29uZmlnKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJdGVyYXRvciAmJiBhQ29uZmlnLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0TmV4dEV4dGVybmFsUm91dGUoYUl0ZXJhdG9yLCBhQ29uZmlnKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQ4X3Qgb3ROZXREYXRhR2V0VmVyc2lvbihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldExlYWRlckRhdGFUbHYoKS5HZXREYXRhVmVyc2lvbigpOworfQorCit1aW50OF90IG90TmV0RGF0YUdldFN0YWJsZVZlcnNpb24ob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRMZWFkZXJEYXRhVGx2KCkuR2V0U3RhYmxlRGF0YVZlcnNpb24oKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS90YXNrbGV0X2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvdGFza2xldF9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjUzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvdGFza2xldF9hcGkuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgVGFza2xldCBBUEkuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAidGFza2xldF9hcGkudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3Rhc2tsZXQuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordm9pZCBvdFRhc2tsZXRzUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBhSW5zdGFuY2UtPm1JcDYubVRhc2tsZXRTY2hlZHVsZXIuUHJvY2Vzc1F1ZXVlZFRhc2tsZXRzKCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCitib29sIG90VGFza2xldHNBcmVQZW5kaW5nKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tSXA2Lm1UYXNrbGV0U2NoZWR1bGVyLkFyZVRhc2tsZXRzUGVuZGluZygpOworfQorCisjaWZuZGVmIF9NU0NfVkVSCitPVF9UT09MX1dFQUsgdm9pZCBvdFRhc2tsZXRzU2lnbmFsUGVuZGluZyhvdEluc3RhbmNlICopCit7Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL3RocmVhZF9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL3RocmVhZF9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OGNlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvdGhyZWFkX2FwaS5jcHAKQEAgLTAsMCArMSw0OTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgVGhyZWFkIEFQSSAoZm9yIGJvdGggRlREIGFuZCBNVEQpLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgInRocmVhZF9hcGkudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9zZXR0aW5ncy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vc2V0dGluZ3MuaHBwIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK3VpbnQzMl90IG90VGhyZWFkR2V0Q2hpbGRUaW1lb3V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0VGltZW91dCgpOworfQorCit2b2lkIG90VGhyZWFkU2V0Q2hpbGRUaW1lb3V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0VGltZW91dChhVGltZW91dCk7Cit9CisKK2NvbnN0IHVpbnQ4X3QgKm90VGhyZWFkR2V0RXh0ZW5kZWRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldEV4dGVuZGVkUGFuSWQoKTsKK30KKworb3RFcnJvciBvdFRocmVhZFNldEV4dGVuZGVkUGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0ZW5kZWRQYW5JZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IG1sUHJlZml4WzhdOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLlNldEV4dGVuZGVkUGFuSWQoYUV4dGVuZGVkUGFuSWQpOworCisgICAgbWxQcmVmaXhbMF0gPSAweGZkOworICAgIG1lbWNweShtbFByZWZpeCArIDEsIGFFeHRlbmRlZFBhbklkLCA1KTsKKyAgICBtbFByZWZpeFs2XSA9IDB4MDA7CisgICAgbWxQcmVmaXhbN10gPSAweDAwOworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldE1lc2hMb2NhbFByZWZpeChtbFByZWZpeCk7CisKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuQ2xlYXIoKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkNsZWFyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VGhyZWFkR2V0TGVhZGVyUmxvYyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFZlcmlmeU9yRXhpdChhQWRkcmVzcyAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldExlYWRlckFkZHJlc3MoKnN0YXRpY19jYXN0PElwNjo6QWRkcmVzcyAqPihhQWRkcmVzcykpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RMaW5rTW9kZUNvbmZpZyBvdFRocmVhZEdldExpbmtNb2RlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdExpbmtNb2RlQ29uZmlnIGNvbmZpZzsKKyAgICB1aW50OF90IG1vZGUgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXREZXZpY2VNb2RlKCk7CisKKyAgICBtZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKG90TGlua01vZGVDb25maWcpKTsKKworICAgIGlmIChtb2RlICYgTWxlOjpNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tUnhPbldoZW5JZGxlID0gMTsKKyAgICB9CisKKyAgICBpZiAobW9kZSAmIE1sZTo6TW9kZVRsdjo6a01vZGVTZWN1cmVEYXRhUmVxdWVzdCkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tU2VjdXJlRGF0YVJlcXVlc3RzID0gMTsKKyAgICB9CisKKyAgICBpZiAobW9kZSAmIE1sZTo6TW9kZVRsdjo6a01vZGVGRkQpCisgICAgeworICAgICAgICBjb25maWcubURldmljZVR5cGUgPSAxOworICAgIH0KKworICAgIGlmIChtb2RlICYgTWxlOjpNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tTmV0d29ya0RhdGEgPSAxOworICAgIH0KKworICAgIHJldHVybiBjb25maWc7Cit9CisKK290RXJyb3Igb3RUaHJlYWRTZXRMaW5rTW9kZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TGlua01vZGVDb25maWcgYUNvbmZpZykKK3sKKyAgICB1aW50OF90IG1vZGUgPSAwOworCisgICAgaWYgKGFDb25maWcubVJ4T25XaGVuSWRsZSkKKyAgICB7CisgICAgICAgIG1vZGUgfD0gTWxlOjpNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZTsKKyAgICB9CisKKyAgICBpZiAoYUNvbmZpZy5tU2VjdXJlRGF0YVJlcXVlc3RzKQorICAgIHsKKyAgICAgICAgbW9kZSB8PSBNbGU6Ok1vZGVUbHY6OmtNb2RlU2VjdXJlRGF0YVJlcXVlc3Q7CisgICAgfQorCisgICAgaWYgKGFDb25maWcubURldmljZVR5cGUpCisgICAgeworICAgICAgICBtb2RlIHw9IE1sZTo6TW9kZVRsdjo6a01vZGVGRkQ7CisgICAgfQorCisgICAgaWYgKGFDb25maWcubU5ldHdvcmtEYXRhKQorICAgIHsKKyAgICAgICAgbW9kZSB8PSBNbGU6Ok1vZGVUbHY6OmtNb2RlRnVsbE5ldHdvcmtEYXRhOworICAgIH0KKworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5TZXREZXZpY2VNb2RlKG1vZGUpOworfQorCitjb25zdCBvdE1hc3RlcktleSAqb3RUaHJlYWRHZXRNYXN0ZXJLZXkob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiAmYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldE1hc3RlcktleSgpOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0TWFzdGVyS2V5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RNYXN0ZXJLZXkgKmFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUtleSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldE1hc3RlcktleSgqYUtleSk7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkNsZWFyKCk7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5DbGVhcigpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworY29uc3Qgb3RJcDZBZGRyZXNzICpvdFRocmVhZEdldE1lc2hMb2NhbEVpZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuICZhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWw2NCgpOworfQorCitjb25zdCB1aW50OF90ICpvdFRocmVhZEdldE1lc2hMb2NhbFByZWZpeChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbFByZWZpeCgpOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0TWVzaExvY2FsUHJlZml4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYU1lc2hMb2NhbFByZWZpeCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldE1lc2hMb2NhbFByZWZpeChhTWVzaExvY2FsUHJlZml4KTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuQ2xlYXIoKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkNsZWFyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitjb25zdCBvdElwNkFkZHJlc3MgKm90VGhyZWFkR2V0TGlua0xvY2FsSXA2QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuICZhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRMaW5rTG9jYWxBZGRyZXNzKCk7Cit9CisKK2NvbnN0IGNoYXIgKm90VGhyZWFkR2V0TmV0d29ya05hbWUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXROZXR3b3JrTmFtZSgpOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0TmV0d29ya05hbWUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBjaGFyICphTmV0d29ya05hbWUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVELAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5TZXROZXR3b3JrTmFtZShhTmV0d29ya05hbWUpOworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5DbGVhcigpOworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuQ2xlYXIoKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQzMl90IG90VGhyZWFkR2V0S2V5U2VxdWVuY2VDb3VudGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpOworfQorCit2b2lkIG90VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYUtleVNlcXVlbmNlQ291bnRlcikKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRLZXlNYW5hZ2VyKCkuU2V0Q3VycmVudEtleVNlcXVlbmNlKGFLZXlTZXF1ZW5jZUNvdW50ZXIpOworfQorCit1aW50MzJfdCBvdFRocmVhZEdldEtleVN3aXRjaEd1YXJkVGltZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRLZXlTd2l0Y2hHdWFyZFRpbWUoKTsKK30KKwordm9pZCBvdFRocmVhZFNldEtleVN3aXRjaEd1YXJkVGltZShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFLZXlTd2l0Y2hHdWFyZFRpbWUpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldEtleVN3aXRjaEd1YXJkVGltZShhS2V5U3dpdGNoR3VhcmRUaW1lKTsKK30KKworb3RFcnJvciBvdFRocmVhZEJlY29tZURldGFjaGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuQmVjb21lRGV0YWNoZWQoKTsKK30KKworb3RFcnJvciBvdFRocmVhZEJlY29tZUNoaWxkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuQmVjb21lQ2hpbGQoTWxlOjprQXR0YWNoQW55KTsKK30KKworb3RFcnJvciBvdFRocmVhZEdldE5leHROZWlnaGJvckluZm8ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5laWdoYm9ySW5mb0l0ZXJhdG9yICphSXRlcmF0b3IsIG90TmVpZ2hib3JJbmZvICphSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdCgoYUluZm8gIT0gTlVMTCkgJiYgKGFJdGVyYXRvciAhPSBOVUxMKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXROZXh0TmVpZ2hib3JJbmZvKCphSXRlcmF0b3IsICphSW5mbyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdERldmljZVJvbGUgb3RUaHJlYWRHZXREZXZpY2VSb2xlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8b3REZXZpY2VSb2xlPihhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkpOworfQorCitvdEVycm9yIG90VGhyZWFkR2V0TGVhZGVyRGF0YShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TGVhZGVyRGF0YSAqYUxlYWRlckRhdGEpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFZlcmlmeU9yRXhpdChhTGVhZGVyRGF0YSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldExlYWRlckRhdGEoKmFMZWFkZXJEYXRhKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQ4X3Qgb3RUaHJlYWRHZXRMZWFkZXJSb3V0ZXJJZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldExlYWRlckRhdGFUbHYoKS5HZXRMZWFkZXJSb3V0ZXJJZCgpOworfQorCit1aW50OF90IG90VGhyZWFkR2V0TGVhZGVyV2VpZ2h0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0TGVhZGVyRGF0YVRsdigpLkdldFdlaWdodGluZygpOworfQorCit1aW50MzJfdCBvdFRocmVhZEdldFBhcnRpdGlvbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0TGVhZGVyRGF0YVRsdigpLkdldFBhcnRpdGlvbklkKCk7Cit9CisKK3VpbnQxNl90IG90VGhyZWFkR2V0UmxvYzE2KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0UmxvYzE2KCk7Cit9CisKK290RXJyb3Igb3RUaHJlYWRHZXRQYXJlbnRJbmZvKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSb3V0ZXJJbmZvICphUGFyZW50SW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBSb3V0ZXIgKnBhcmVudDsKKworICAgIFZlcmlmeU9yRXhpdChhUGFyZW50SW5mbyAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBwYXJlbnQgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRQYXJlbnQoKTsKKyAgICBtZW1jcHkoYVBhcmVudEluZm8tPm1FeHRBZGRyZXNzLm04LCAmcGFyZW50LT5HZXRFeHRBZGRyZXNzKCksIHNpemVvZihhUGFyZW50SW5mby0+bUV4dEFkZHJlc3MpKTsKKworICAgIGFQYXJlbnRJbmZvLT5tUmxvYzE2ICAgICAgICAgID0gcGFyZW50LT5HZXRSbG9jMTYoKTsKKyAgICBhUGFyZW50SW5mby0+bVJvdXRlcklkICAgICAgICA9IE1sZTo6TWxlOjpHZXRSb3V0ZXJJZChwYXJlbnQtPkdldFJsb2MxNigpKTsKKyAgICBhUGFyZW50SW5mby0+bU5leHRIb3AgICAgICAgICA9IHBhcmVudC0+R2V0TmV4dEhvcCgpOworICAgIGFQYXJlbnRJbmZvLT5tUGF0aENvc3QgICAgICAgID0gcGFyZW50LT5HZXRDb3N0KCk7CisgICAgYVBhcmVudEluZm8tPm1MaW5rUXVhbGl0eUluICAgPSBwYXJlbnQtPkdldExpbmtJbmZvKCkuR2V0TGlua1F1YWxpdHkoYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpKTsKKyAgICBhUGFyZW50SW5mby0+bUxpbmtRdWFsaXR5T3V0ICA9IHBhcmVudC0+R2V0TGlua1F1YWxpdHlPdXQoKTsKKyAgICBhUGFyZW50SW5mby0+bUFnZSAgICAgICAgICAgICA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFRpbWVyOjpNc2VjVG9TZWMoVGltZXI6OkdldE5vdygpIC0gcGFyZW50LT5HZXRMYXN0SGVhcmQoKSkpOworICAgIGFQYXJlbnRJbmZvLT5tQWxsb2NhdGVkICAgICAgID0gcGFyZW50LT5Jc0FsbG9jYXRlZCgpOworICAgIGFQYXJlbnRJbmZvLT5tTGlua0VzdGFibGlzaGVkID0gcGFyZW50LT5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RUaHJlYWRHZXRQYXJlbnRBdmVyYWdlUnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCAqYVBhcmVudFJzc2kpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgUm91dGVyICpwYXJlbnQ7CisKKyAgICBWZXJpZnlPckV4aXQoYVBhcmVudFJzc2kgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgcGFyZW50ID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0UGFyZW50KCk7CisgICAgKmFQYXJlbnRSc3NpID0gcGFyZW50LT5HZXRMaW5rSW5mbygpLkdldEF2ZXJhZ2VSc3MoKTsKKworICAgIFZlcmlmeU9yRXhpdCgqYVBhcmVudFJzc2kgIT0gT1RfUkFESU9fUlNTSV9JTlZBTElELCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VGhyZWFkR2V0UGFyZW50TGFzdFJzc2kob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgKmFMYXN0UnNzaSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBSb3V0ZXIgKnBhcmVudDsKKworICAgIFZlcmlmeU9yRXhpdChhTGFzdFJzc2kgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgcGFyZW50ID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0UGFyZW50KCk7CisgICAgKmFMYXN0UnNzaSA9IHBhcmVudC0+R2V0TGlua0luZm8oKS5HZXRMYXN0UnNzKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKmFMYXN0UnNzaSAhPSBPVF9SQURJT19SU1NJX0lOVkFMSUQsIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2NvbnN0IGNoYXIgKm90R2V0VmVyc2lvblN0cmluZyh2b2lkKQoreworICAgIC8qKgorICAgICAqIFBMQVRGT1JNX1ZFUlNJT05fQVRUUl9QUkVGSVggYW5kIFBMQVRGT1JNX1ZFUlNJT05fQVRUUl9TVUZGSVggYXJlCisgICAgICogaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBzcGVjaWZ5IGNvbXBpbGVyIGRpcmVjdGl2ZXMgdG8gaW5kaWNhdGUKKyAgICAgKiB3aGF0IGxpbmtlciBzZWN0aW9uIHRoZSBwbGF0Zm9ybSB2ZXJzaW9uIHN0cmluZyBzaG91bGQgYmUgc3RvcmVkLgorICAgICAqCisgICAgICogVGhpcyBpcyB1c2VmdWwgZm9yIHNwZWNpZnlpbmcgYW4gZXhhY3QgbG9jYWl0b24gb2Ygd2hlcmUgdGhlIHZlcnNpb24KKyAgICAgKiBzdHJpbmcgd2lsbCBiZSBsb2NhdGVkIHNvIHRoYXQgaXQgY2FuIGJlIGVhc2lseSByZXRyaWV2ZWQgZnJvbSB0aGUKKyAgICAgKiByYXcgZmlybXdhcmUgaW1hZ2UuCisgICAgICoKKyAgICAgKiBJZiBQTEFURk9STV9WRVJTSU9OX0FUVFJfUFJFRklYIGlzIHVuc3BlY2lmaWVkLCB0aGUga2V5d29yZCBgc3RhdGljYAorICAgICAqIGlzIHVzZWQgaW5zdGVhZC4KKyAgICAgKgorICAgICAqIElmIGJvdGggYXJlIHVuc3BlY2lmaWVkLCB0aGUgbG9jYXRpb24gb2YgdGhlIHN0cmluZyBpbiB0aGUgZmlybXdhcmUKKyAgICAgKiBpbWFnZSB3aWxsIGJlIHVuZGVmaW5lZCBhbmQgbWF5IGNoYW5nZS4KKyAgICAgKi8KKworI2lmZGVmIFBMQVRGT1JNX1ZFUlNJT05fQVRUUl9QUkVGSVgKKyAgICBQTEFURk9STV9WRVJTSU9OX0FUVFJfUFJFRklYCisjZWxzZQorICAgIHN0YXRpYworI2VuZGlmCisgICAgY29uc3QgY2hhciBzVmVyc2lvbltdID0KKyAgICAgICAgUEFDS0FHRV9OQU1FICIvIiBQQUNLQUdFX1ZFUlNJT04KKyNpZmRlZiAgUExBVEZPUk1fSU5GTworICAgICAgICAiOyAiIFBMQVRGT1JNX0lORk8KKyNlbmRpZgorI2lmIGRlZmluZWQoX19EQVRFX18pCisgICAgICAgICI7ICIgX19EQVRFX18gIiAiIF9fVElNRV9fCisjZW5kaWYKKyNpZmRlZiBQTEFURk9STV9WRVJTSU9OX0FUVFJfU1VGRklYCisgICAgICAgIFBMQVRGT1JNX1ZFUlNJT05fQVRUUl9TVUZGSVgKKyNlbmRpZgorICAgICAgICA7IC8vIFRyYWlsaW5nIHNlbWljb2xvbiB0byBlbmQgc3RhdGVtZW50LgorCisgICAgcmV0dXJuIHNWZXJzaW9uOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQwordm9pZCBvdFRocmVhZFNldFJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2sgYUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXROZXR3b3JrRGlhZ25vc3RpYygpLlNldFJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2soYUNhbGxiYWNrLCBhQ2FsbGJhY2tDb250ZXh0KTsKK30KKworb3RFcnJvciBvdFRocmVhZFNlbmREaWFnbm9zdGljR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZBZGRyZXNzICphRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBhVGx2VHlwZXNbXSwgdWludDhfdCBhQ291bnQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEaWFnbm9zdGljKCkuU2VuZERpYWdub3N0aWNHZXQoKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6QWRkcmVzcyAqPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhRGVzdGluYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ291bnQpOworfQorCitvdEVycm9yIG90VGhyZWFkU2VuZERpYWdub3N0aWNSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90SXA2QWRkcmVzcyAqYURlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBhVGx2VHlwZXNbXSwgdWludDhfdCBhQ291bnQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEaWFnbm9zdGljKCkuU2VuZERpYWdub3N0aWNSZXNldCgqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYURlc3RpbmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb3VudCk7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQworCitvdEVycm9yIG90VGhyZWFkU2V0RW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgaWYgKGFFbmFibGVkKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFBhbklkKCkgIT0gTWFjOjprUGFuSWRCcm9hZGNhc3QsCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgICAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlN0YXJ0KHRydWUsIGZhbHNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5TdG9wKHRydWUpOworICAgIH0KKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgb3RUaHJlYWRHZXRBdXRvU3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9BVVRPX1NUQVJUX1NVUFBPUlQKKyAgICB1aW50OF90IGF1dG9TdGFydCA9IDA7CisgICAgdWludDE2X3QgYXV0b1N0YXJ0TGVuZ3RoID0gc2l6ZW9mKGF1dG9TdGFydCk7CisKKyAgICBpZiAob3RQbGF0U2V0dGluZ3NHZXQoYUluc3RhbmNlLCBTZXR0aW5nczo6a0tleVRocmVhZEF1dG9TdGFydCwgMCwgJmF1dG9TdGFydCwgJmF1dG9TdGFydExlbmd0aCkgIT0KKyAgICAgICAgT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGF1dG9TdGFydCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIGF1dG9TdGFydCAhPSAwOworI2Vsc2UKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworb3RFcnJvciBvdFRocmVhZFNldEF1dG9TdGFydChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYVN0YXJ0QXV0b21hdGljYWxseSkKK3sKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfQVVUT19TVEFSVF9TVVBQT1JUCisgICAgdWludDhfdCBhdXRvU3RhcnQgPSBhU3RhcnRBdXRvbWF0aWNhbGx5ID8gMSA6IDA7CisgICAgcmV0dXJuIG90UGxhdFNldHRpbmdzU2V0KGFJbnN0YW5jZSwgU2V0dGluZ3M6OmtLZXlUaHJlYWRBdXRvU3RhcnQsICZhdXRvU3RhcnQsIHNpemVvZihhdXRvU3RhcnQpKTsKKyNlbHNlCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFTdGFydEF1dG9tYXRpY2FsbHkpOworICAgIHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7CisjZW5kaWYKK30KKworYm9vbCBvdFRocmVhZElzU2luZ2xldG9uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuSXNTaW5nbGV0b24oKTsKK30KKworb3RFcnJvciBvdFRocmVhZERpc2NvdmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVNjYW5DaGFubmVscywgdWludDE2X3QgYVBhbklkLCBib29sIGFKb2luZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRW5hYmxlRXVpNjRGaWx0ZXJpbmcsIG90SGFuZGxlQWN0aXZlU2NhblJlc3VsdCBhQ2FsbGJhY2ssIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkRpc2NvdmVyKGFTY2FuQ2hhbm5lbHMsIGFQYW5JZCwgYUpvaW5lciwgYUVuYWJsZUV1aTY0RmlsdGVyaW5nLCBhQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDYWxsYmFja0NvbnRleHQpOworfQorCitib29sIG90VGhyZWFkSXNEaXNjb3ZlckluUHJvZ3Jlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5Jc0Rpc2NvdmVySW5Qcm9ncmVzcygpOworfQorCitjb25zdCBvdElwQ291bnRlcnMgKm90VGhyZWFkR2V0SXA2Q291bnRlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiAmYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldENvdW50ZXJzKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvdGhyZWFkX2Z0ZF9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL3RocmVhZF9mdGRfYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjczMDRmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL3RocmVhZF9mdGRfYXBpLmNwcApAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIFRocmVhZCBBUEkgKEZURCBvbmx5KS4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJ0aHJlYWRfZnRkX2FwaS50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaWYgT1BFTlRIUkVBRF9GVEQKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdGhyZWFkX2Z0ZC5oPgorI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordWludDhfdCBvdFRocmVhZEdldE1heEFsbG93ZWRDaGlsZHJlbihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgdWludDhfdCBhTnVtQ2hpbGRyZW47CisKKyAgICAodm9pZClhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRDaGlsZHJlbigmYU51bUNoaWxkcmVuKTsKKworICAgIHJldHVybiBhTnVtQ2hpbGRyZW47Cit9CisKK290RXJyb3Igb3RUaHJlYWRTZXRNYXhBbGxvd2VkQ2hpbGRyZW4ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFNYXhDaGlsZHJlbikKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0TWF4QWxsb3dlZENoaWxkcmVuKGFNYXhDaGlsZHJlbik7Cit9CisKK2Jvb2wgb3RUaHJlYWRJc1JvdXRlclJvbGVFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuSXNSb3V0ZXJSb2xlRW5hYmxlZCgpOworfQorCit2b2lkIG90VGhyZWFkU2V0Um91dGVyUm9sZUVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldFJvdXRlclJvbGVFbmFibGVkKGFFbmFibGVkKTsKK30KKworb3RFcnJvciBvdFRocmVhZFNldFByZWZlcnJlZFJvdXRlcklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhUm91dGVySWQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldFByZWZlcnJlZFJvdXRlcklkKGFSb3V0ZXJJZCk7Cit9CisKK3VpbnQ4X3Qgb3RUaHJlYWRHZXRMb2NhbExlYWRlcldlaWdodChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldExlYWRlcldlaWdodCgpOworfQorCit2b2lkIG90VGhyZWFkU2V0TG9jYWxMZWFkZXJXZWlnaHQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFXZWlnaHQpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0TGVhZGVyV2VpZ2h0KGFXZWlnaHQpOworfQorCit1aW50MzJfdCBvdFRocmVhZEdldExvY2FsTGVhZGVyUGFydGl0aW9uSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRMZWFkZXJQYXJ0aXRpb25JZCgpOworfQorCit2b2lkIG90VGhyZWFkU2V0TG9jYWxMZWFkZXJQYXJ0aXRpb25JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFQYXJ0aXRpb25JZCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0TGVhZGVyUGFydGl0aW9uSWQoYVBhcnRpdGlvbklkKTsKK30KKwordWludDE2X3Qgb3RUaHJlYWRHZXRKb2luZXJVZHBQb3J0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Sm9pbmVyUm91dGVyKCkuR2V0Sm9pbmVyVWRwUG9ydCgpOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0Sm9pbmVyVWRwUG9ydChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFKb2luZXJVZHBQb3J0KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRKb2luZXJSb3V0ZXIoKS5TZXRKb2luZXJVZHBQb3J0KGFKb2luZXJVZHBQb3J0KTsKK30KKwordWludDMyX3Qgb3RUaHJlYWRHZXRDb250ZXh0SWRSZXVzZURlbGF5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRDb250ZXh0SWRSZXVzZURlbGF5KCk7Cit9CisKK3ZvaWQgb3RUaHJlYWRTZXRDb250ZXh0SWRSZXVzZURlbGF5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYURlbGF5KQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuU2V0Q29udGV4dElkUmV1c2VEZWxheShhRGVsYXkpOworfQorCit1aW50OF90IG90VGhyZWFkR2V0TmV0d29ya0lkVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldE5ldHdvcmtJZFRpbWVvdXQoKTsKK30KKwordm9pZCBvdFRocmVhZFNldE5ldHdvcmtJZFRpbWVvdXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFUaW1lb3V0KQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldE5ldHdvcmtJZFRpbWVvdXQoKHVpbnQ4X3QpYVRpbWVvdXQpOworfQorCit1aW50OF90IG90VGhyZWFkR2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQoKTsKK30KKwordm9pZCBvdFRocmVhZFNldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFUaHJlc2hvbGQpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChhVGhyZXNob2xkKTsKK30KKworb3RFcnJvciBvdFRocmVhZFJlbGVhc2VSb3V0ZXJJZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVJvdXRlcklkKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5SZWxlYXNlUm91dGVySWQoYVJvdXRlcklkKTsKK30KKworb3RFcnJvciBvdFRocmVhZEJlY29tZVJvdXRlcihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEU7CisKKyAgICBzd2l0Y2ggKGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuQmVjb21lUm91dGVyKFRocmVhZFN0YXR1c1Rsdjo6a0hhdmVDaGlsZElkUmVxdWVzdCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VGhyZWFkQmVjb21lTGVhZGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuQmVjb21lTGVhZGVyKCk7Cit9CisKK3VpbnQ4X3Qgb3RUaHJlYWRHZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoKTsKK30KKwordm9pZCBvdFRocmVhZFNldFJvdXRlckRvd25ncmFkZVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVRocmVzaG9sZCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5TZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoYVRocmVzaG9sZCk7Cit9CisKK3VpbnQ4X3Qgb3RUaHJlYWRHZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoKTsKK30KKwordm9pZCBvdFRocmVhZFNldFJvdXRlclNlbGVjdGlvbkppdHRlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVJvdXRlckppdHRlcikKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5TZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoYVJvdXRlckppdHRlcik7Cit9CisKK290RXJyb3Igb3RUaHJlYWRHZXRDaGlsZEluZm9CeUlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUNoaWxkSWQsIG90Q2hpbGRJbmZvICphQ2hpbGRJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFDaGlsZEluZm8gIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRDaGlsZEluZm9CeUlkKGFDaGlsZElkLCAqYUNoaWxkSW5mbyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VGhyZWFkR2V0Q2hpbGRJbmZvQnlJbmRleChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoaWxkSW5kZXgsIG90Q2hpbGRJbmZvICphQ2hpbGRJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFDaGlsZEluZm8gIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRDaGlsZEluZm9CeUluZGV4KGFDaGlsZEluZGV4LCAqYUNoaWxkSW5mbyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit1aW50OF90IG90VGhyZWFkR2V0Um91dGVySWRTZXF1ZW5jZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvdXRlcklkU2VxdWVuY2UoKTsKK30KKworb3RFcnJvciBvdFRocmVhZEdldFJvdXRlckluZm8ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhUm91dGVySWQsIG90Um91dGVySW5mbyAqYVJvdXRlckluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYVJvdXRlckluZm8gIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRSb3V0ZXJJbmZvKGFSb3V0ZXJJZCwgKmFSb3V0ZXJJbmZvKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RUaHJlYWRHZXRFaWRDYWNoZUVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhSW5kZXgsIG90RWlkQ2FjaGVFbnRyeSAqYUVudHJ5KQoreworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBWZXJpZnlPckV4aXQoYUVudHJ5ICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEFkZHJlc3NSZXNvbHZlcigpLkdldEVudHJ5KGFJbmRleCwgKmFFbnRyeSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0U3RlZXJpbmdEYXRhKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0U3RlZXJpbmdEYXRhKGFFeHRBZGRyZXNzKTsKKyNlbHNlCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFFeHRBZGRyZXNzKTsKKworICAgIGVycm9yID0gT1RfRVJST1JfRElTQUJMRURfRkVBVFVSRTsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorCisgICAgcmV0dXJuIGVycm9yOworfQorCitjb25zdCB1aW50OF90ICpvdFRocmVhZEdldFBTS2Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0UFNLYygpOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0UFNLYyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFQU0tjKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEtleU1hbmFnZXIoKS5TZXRQU0tjKGFQU0tjKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuQ2xlYXIoKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkNsZWFyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitpbnQ4X3Qgb3RUaHJlYWRHZXRQYXJlbnRQcmlvcml0eShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldEFzc2lnblBhcmVudFByaW9yaXR5KCk7Cit9CisKK290RXJyb3Igb3RUaHJlYWRTZXRQYXJlbnRQcmlvcml0eShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IGludDhfdCBhUGFyZW50UHJpb3JpdHkpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldEFzc2lnblBhcmVudFByaW9yaXR5KGFQYXJlbnRQcmlvcml0eSk7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL3RtZl9wcm94eV9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL3RtZl9wcm94eV9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNGQ5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvdG1mX3Byb3h5X2FwaS5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBUTUYgcHJveHkgQVBJLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdG1mX3Byb3h5Lmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisKKyNpZiBPUEVOVEhSRUFEX0ZURCAmJiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkKKworb3RFcnJvciBvdFRtZlByb3h5U3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFRtZlByb3h5U3RyZWFtSGFuZGxlciBhVG1mUHJveHlDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldFRtZlByb3h5KCkuU3RhcnQoYVRtZlByb3h5Q2FsbGJhY2ssIGFDb250ZXh0KTsKK30KKworb3RFcnJvciBvdFRtZlByb3h5U3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldFRtZlByb3h5KCkuU3RvcCgpOworfQorCitvdEVycm9yIG90VG1mUHJveHlTZW5kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYUxvY2F0b3IsIHVpbnQxNl90IGFQb3J0KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRUbWZQcm94eSgpLlNlbmQoKnN0YXRpY19jYXN0PG90OjpNZXNzYWdlICo+KGFNZXNzYWdlKSwgYUxvY2F0b3IsIGFQb3J0KTsKK30KKworYm9vbCBvdFRtZlByb3h5SXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0VG1mUHJveHkoKS5Jc0VuYWJsZWQoKTsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRlREICYmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL3VkcF9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL3VkcF9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNDU3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvdWRwX2FwaS5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgVURQIEFQSS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3VkcC5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK290TWVzc2FnZSAqb3RVZHBOZXdNZXNzYWdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhTGlua1NlY3VyaXR5RW5hYmxlZCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gYUluc3RhbmNlLT5tSXA2Lm1VZHAuTmV3TWVzc2FnZSgwKTsKKworICAgIGlmIChtZXNzYWdlKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+U2V0TGlua1NlY3VyaXR5RW5hYmxlZChhTGlua1NlY3VyaXR5RW5hYmxlZCk7CisgICAgfQorCisgICAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKK290RXJyb3Igb3RVZHBPcGVuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RVZHBTb2NrZXQgKmFTb2NrZXQsIG90VWRwUmVjZWl2ZSBhQ2FsbGJhY2ssIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBJcDY6OlVkcFNvY2tldCAqc29ja2V0ID0gc3RhdGljX2Nhc3Q8SXA2OjpVZHBTb2NrZXQgKj4oYVNvY2tldCk7CisKKyAgICBpZiAoc29ja2V0LT5tVHJhbnNwb3J0ID09IE5VTEwpCisgICAgeworICAgICAgICBzb2NrZXQtPm1UcmFuc3BvcnQgPSAmYUluc3RhbmNlLT5tSXA2Lm1VZHA7CisgICAgICAgIGVycm9yID0gc29ja2V0LT5PcGVuKGFDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VWRwQ2xvc2Uob3RVZHBTb2NrZXQgKmFTb2NrZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEU7CisgICAgSXA2OjpVZHBTb2NrZXQgKnNvY2tldCA9IHN0YXRpY19jYXN0PElwNjo6VWRwU29ja2V0ICo+KGFTb2NrZXQpOworCisgICAgaWYgKHNvY2tldC0+bVRyYW5zcG9ydCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBzb2NrZXQtPkNsb3NlKCk7CisKKyAgICAgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNvY2tldC0+bVRyYW5zcG9ydCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RVZHBCaW5kKG90VWRwU29ja2V0ICphU29ja2V0LCBvdFNvY2tBZGRyICphU29ja05hbWUpCit7CisgICAgSXA2OjpVZHBTb2NrZXQgKnNvY2tldCA9IHN0YXRpY19jYXN0PElwNjo6VWRwU29ja2V0ICo+KGFTb2NrZXQpOworICAgIHJldHVybiBzb2NrZXQtPkJpbmQoKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6U29ja0FkZHIgKj4oYVNvY2tOYW1lKSk7Cit9CisKK290RXJyb3Igb3RVZHBDb25uZWN0KG90VWRwU29ja2V0ICphU29ja2V0LCBvdFNvY2tBZGRyICphU29ja05hbWUpCit7CisgICAgSXA2OjpVZHBTb2NrZXQgKnNvY2tldCA9IHN0YXRpY19jYXN0PElwNjo6VWRwU29ja2V0ICo+KGFTb2NrZXQpOworICAgIHJldHVybiBzb2NrZXQtPkNvbm5lY3QoKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6U29ja0FkZHIgKj4oYVNvY2tOYW1lKSk7Cit9CisKK290RXJyb3Igb3RVZHBTZW5kKG90VWRwU29ja2V0ICphU29ja2V0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgSXA2OjpVZHBTb2NrZXQgKnNvY2tldCA9IHN0YXRpY19jYXN0PElwNjo6VWRwU29ja2V0ICo+KGFTb2NrZXQpOworICAgIHJldHVybiBzb2NrZXQtPlNlbmRUbygqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29hcC9jb2FwLmNwcCBiL3NyYy9jb3JlL2NvYXAvY29hcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzODBlYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvYXAvY29hcC5jcHAKQEAgLTAsMCArMSw5NDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImNvYXAudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImNvYXAuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvbW1vbiBjb2RlIGJhc2UgZm9yIENvQVAgY2xpZW50IGFuZCBzZXJ2ZXIuCisgKi8KKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDb2FwIHsKKworQ29hcDo6Q29hcChUaHJlYWROZXRpZiAmYU5ldGlmKToKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYU5ldGlmKSwKKyAgICBtU29ja2V0KGFOZXRpZi5HZXRJcDYoKS5tVWRwKSwKKyAgICBtUmV0cmFuc21pc3Npb25UaW1lcihhTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmQ29hcDo6SGFuZGxlUmV0cmFuc21pc3Npb25UaW1lciwgdGhpcyksCisgICAgbVJlc291cmNlcyhOVUxMKSwKKyAgICBtQ29udGV4dChOVUxMKSwKKyAgICBtSW50ZXJjZXB0b3IoTlVMTCksCisgICAgbVJlc3BvbnNlc1F1ZXVlKGFOZXRpZiksCisgICAgbURlZmF1bHRIYW5kbGVyKE5VTEwpLAorICAgIG1EZWZhdWx0SGFuZGxlckNvbnRleHQoTlVMTCkKK3sKKyAgICBtTWVzc2FnZUlkID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKK30KKworb3RFcnJvciBDb2FwOjpTdGFydCh1aW50MTZfdCBhUG9ydCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIElwNjo6U29ja0FkZHIgc29ja2FkZHI7CisgICAgc29ja2FkZHIubVBvcnQgPSBhUG9ydDsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtU29ja2V0Lk9wZW4oJkNvYXA6OkhhbmRsZVVkcFJlY2VpdmUsIHRoaXMpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNvY2tldC5CaW5kKHNvY2thZGRyKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIENvYXA6OlN0b3Aodm9pZCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gbVBlbmRpbmdSZXF1ZXN0cy5HZXRIZWFkKCk7CisgICAgTWVzc2FnZSAqbWVzc2FnZVRvUmVtb3ZlOworICAgIENvYXBNZXRhZGF0YSBjb2FwTWV0YWRhdGE7CisKKyAgICAvLyBSZW1vdmUgYWxsIHBlbmRpbmcgbWVzc2FnZXMuCisgICAgd2hpbGUgKG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2VUb1JlbW92ZSA9IG1lc3NhZ2U7CisgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisKKyAgICAgICAgY29hcE1ldGFkYXRhLlJlYWRGcm9tKCptZXNzYWdlVG9SZW1vdmUpOworICAgICAgICBGaW5hbGl6ZUNvYXBUcmFuc2FjdGlvbigqbWVzc2FnZVRvUmVtb3ZlLCBjb2FwTWV0YWRhdGEsIE5VTEwsIE5VTEwsIE5VTEwsIE9UX0VSUk9SX0FCT1JUKTsKKyAgICB9CisKKyAgICBtUmVzcG9uc2VzUXVldWUuRGVxdWV1ZUFsbFJlc3BvbnNlcygpOworCisgICAgcmV0dXJuIG1Tb2NrZXQuQ2xvc2UoKTsKK30KKworb3RFcnJvciBDb2FwOjpBZGRSZXNvdXJjZShSZXNvdXJjZSAmYVJlc291cmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChSZXNvdXJjZSAqY3VyID0gbVJlc291cmNlczsgY3VyOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChjdXIgIT0gJmFSZXNvdXJjZSwgZXJyb3IgPSBPVF9FUlJPUl9BTFJFQURZKTsKKyAgICB9CisKKyAgICBhUmVzb3VyY2UubU5leHQgPSBtUmVzb3VyY2VzOworICAgIG1SZXNvdXJjZXMgPSAmYVJlc291cmNlOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb2FwOjpSZW1vdmVSZXNvdXJjZShSZXNvdXJjZSAmYVJlc291cmNlKQoreworICAgIGlmIChtUmVzb3VyY2VzID09ICZhUmVzb3VyY2UpCisgICAgeworICAgICAgICBtUmVzb3VyY2VzID0gYVJlc291cmNlLkdldE5leHQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChSZXNvdXJjZSAqY3VyID0gbVJlc291cmNlczsgY3VyOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGN1ci0+bU5leHQgPT0gJmFSZXNvdXJjZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdXItPm1OZXh0ID0gYVJlc291cmNlLm1OZXh0OworICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICBhUmVzb3VyY2UubU5leHQgPSBOVUxMOworfQorCit2b2lkIENvYXA6OlNldERlZmF1bHRIYW5kbGVyKG90Q29hcFJlcXVlc3RIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBtRGVmYXVsdEhhbmRsZXIgPSBhSGFuZGxlcjsKKyAgICBtRGVmYXVsdEhhbmRsZXJDb250ZXh0ID0gYUNvbnRleHQ7Cit9CisKK01lc3NhZ2UgKkNvYXA6Ok5ld01lc3NhZ2UoY29uc3QgSGVhZGVyICZhSGVhZGVyLCB1aW50OF90IGFQcmlvcml0eSkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKworICAgIC8vIEVuc3VyZSB0aGF0IGhlYWRlciBoYXMgbWluaW11bSByZXF1aXJlZCBsZW5ndGguCisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXIuR2V0TGVuZ3RoKCkgPj0gSGVhZGVyOjprTWluSGVhZGVyTGVuZ3RoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG1Tb2NrZXQuTmV3TWVzc2FnZShhSGVhZGVyLkdldExlbmd0aCgpKSkgIT0gTlVMTCk7CisgICAgbWVzc2FnZS0+UHJlcGVuZChhSGVhZGVyLkdldEJ5dGVzKCksIGFIZWFkZXIuR2V0TGVuZ3RoKCkpOworICAgIG1lc3NhZ2UtPlNldE9mZnNldCgwKTsKKyAgICBtZXNzYWdlLT5TZXRQcmlvcml0eShhUHJpb3JpdHkpOworCitleGl0OgorICAgIHJldHVybiBtZXNzYWdlOworfQorCitvdEVycm9yIENvYXA6OlNlbmRNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG90Q29hcFJlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBIZWFkZXIgaGVhZGVyOworICAgIENvYXBNZXRhZGF0YSBjb2FwTWV0YWRhdGE7CisgICAgTWVzc2FnZSAqc3RvcmVkQ29weSA9IE5VTEw7CisgICAgdWludDE2X3QgY29weUxlbmd0aCA9IDA7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gaGVhZGVyLkZyb21NZXNzYWdlKGFNZXNzYWdlLCAwKSk7CisKKyAgICBpZiAoKGhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0FDS05PV0xFREdNRU5UIHx8IGhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX1JFU0VUKSAmJgorICAgICAgICBoZWFkZXIuR2V0Q29kZSgpICE9IE9UX0NPQVBfQ09ERV9FTVBUWSkKKyAgICB7CisgICAgICAgIG1SZXNwb25zZXNRdWV1ZS5FbnF1ZXVlUmVzcG9uc2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgfQorCisgICAgLy8gU2V0IE1lc3NhZ2UgSWQgaWYgaXQgd2FzIG5vdCBhbHJlYWR5IHNldC4KKyAgICBpZiAoaGVhZGVyLkdldE1lc3NhZ2VJZCgpID09IDApCisgICAgeworICAgICAgICBoZWFkZXIuU2V0TWVzc2FnZUlkKG1NZXNzYWdlSWQrKyk7CisgICAgICAgIGFNZXNzYWdlLldyaXRlKDAsIEhlYWRlcjo6a01pbkhlYWRlckxlbmd0aCwgaGVhZGVyLkdldEJ5dGVzKCkpOworICAgIH0KKworICAgIGlmIChoZWFkZXIuSXNDb25maXJtYWJsZSgpKQorICAgIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgY29weSBvZiBlbnRpcmUgbWVzc2FnZSBhbmQgZW5xdWV1ZSBpdC4KKyAgICAgICAgY29weUxlbmd0aCA9IGFNZXNzYWdlLkdldExlbmd0aCgpOworICAgIH0KKyAgICBlbHNlIGlmIChoZWFkZXIuSXNOb25Db25maXJtYWJsZSgpICYmIChhSGFuZGxlciAhPSBOVUxMKSkKKyAgICB7CisgICAgICAgIC8vIEFzIHdlIGRvIG5vdCByZXRyYW5zbWl0IG5vbiBjb25maXJtYWJsZSBtZXNzYWdlcywgY3JlYXRlIGEgY29weSBvZiBoZWFkZXIgb25seSwgZm9yIHRva2VuIGluZm9ybWF0aW9uLgorICAgICAgICBjb3B5TGVuZ3RoID0gaGVhZGVyLkdldExlbmd0aCgpOworICAgIH0KKworICAgIGlmIChjb3B5TGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIGNvYXBNZXRhZGF0YSA9IENvYXBNZXRhZGF0YShoZWFkZXIuSXNDb25maXJtYWJsZSgpLCBhTWVzc2FnZUluZm8sIGFIYW5kbGVyLCBhQ29udGV4dCk7CisgICAgICAgIFZlcmlmeU9yRXhpdCgoc3RvcmVkQ29weSA9IENvcHlBbmRFbnF1ZXVlTWVzc2FnZShhTWVzc2FnZSwgY29weUxlbmd0aCwgY29hcE1ldGFkYXRhKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmQoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgc3RvcmVkQ29weSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgRGVxdWV1ZU1lc3NhZ2UoKnN0b3JlZENvcHkpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBDb2FwOjpTZW5kKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgcmV0dXJuIG1Tb2NrZXQuU2VuZFRvKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCitvdEVycm9yIENvYXA6OlNlbmRFbXB0eU1lc3NhZ2UoSGVhZGVyOjpUeXBlIGFUeXBlLCBjb25zdCBIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgcmVzcG9uc2VIZWFkZXI7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQoYVJlcXVlc3RIZWFkZXIuR2V0VHlwZSgpID09IE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgcmVzcG9uc2VIZWFkZXIuSW5pdChhVHlwZSwgT1RfQ09BUF9DT0RFX0VNUFRZKTsKKyAgICByZXNwb25zZUhlYWRlci5TZXRNZXNzYWdlSWQoYVJlcXVlc3RIZWFkZXIuR2V0TWVzc2FnZUlkKCkpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzc2FnZShyZXNwb25zZUhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZCgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIENvYXA6OlNlbmRIZWFkZXJSZXNwb25zZShIZWFkZXI6OkNvZGUgYUNvZGUsIGNvbnN0IEhlYWRlciAmYVJlcXVlc3RIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSGVhZGVyIHJlc3BvbnNlSGVhZGVyOworICAgIEhlYWRlcjo6VHlwZSByZXF1ZXN0VHlwZTsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKworICAgIFZlcmlmeU9yRXhpdChhUmVxdWVzdEhlYWRlci5Jc1JlcXVlc3QoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgcmVxdWVzdFR5cGUgPSBhUmVxdWVzdEhlYWRlci5HZXRUeXBlKCk7CisKKyAgICBzd2l0Y2ggKHJlcXVlc3RUeXBlKQorICAgIHsKKyAgICBjYXNlIE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRToKKyAgICAgICAgcmVzcG9uc2VIZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQsIGFDb2RlKTsKKyAgICAgICAgcmVzcG9uc2VIZWFkZXIuU2V0TWVzc2FnZUlkKGFSZXF1ZXN0SGVhZGVyLkdldE1lc3NhZ2VJZCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEU6CisgICAgICAgIHJlc3BvbnNlSGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX05PTl9DT05GSVJNQUJMRSwgYUNvZGUpOworICAgICAgICByZXNwb25zZUhlYWRlci5TZXRNZXNzYWdlSWQobU1lc3NhZ2VJZCsrKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmVzcG9uc2VIZWFkZXIuU2V0VG9rZW4oYVJlcXVlc3RIZWFkZXIuR2V0VG9rZW4oKSwgYVJlcXVlc3RIZWFkZXIuR2V0VG9rZW5MZW5ndGgoKSk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNzYWdlKHJlc3BvbnNlSGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitDb2FwICZDb2FwOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBDb2FwICZjb2FwID0gKnN0YXRpY19jYXN0PENvYXAgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgQ29hcCAmY29hcCA9IG90R2V0VGhyZWFkTmV0aWYoKS5HZXRDb2FwKCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBjb2FwOworfQorCit2b2lkIENvYXA6OkhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIoKTsKK30KKwordm9pZCBDb2FwOjpIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKHZvaWQpCit7CisgICAgdWludDMyX3Qgbm93ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKyAgICB1aW50MzJfdCBuZXh0RGVsdGEgPSAweGZmZmZmZmZmOworICAgIENvYXBNZXRhZGF0YSBjb2FwTWV0YWRhdGE7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IG1QZW5kaW5nUmVxdWVzdHMuR2V0SGVhZCgpOworICAgIE1lc3NhZ2UgKm5leHRNZXNzYWdlID0gTlVMTDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgd2hpbGUgKG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5leHRNZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpOworICAgICAgICBjb2FwTWV0YWRhdGEuUmVhZEZyb20oKm1lc3NhZ2UpOworCisgICAgICAgIGlmIChjb2FwTWV0YWRhdGEuSXNMYXRlcihub3cpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG5leHQgZGVsYXkgYW5kIGNob29zZSB0aGUgbG93ZXN0LgorICAgICAgICAgICAgaWYgKGNvYXBNZXRhZGF0YS5tTmV4dFRpbWVyU2hvdCAtIG5vdyA8IG5leHREZWx0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZXh0RGVsdGEgPSBjb2FwTWV0YWRhdGEubU5leHRUaW1lclNob3QgLSBub3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGNvYXBNZXRhZGF0YS5tQ29uZmlybWFibGUpICYmCisgICAgICAgICAgICAgICAgIChjb2FwTWV0YWRhdGEubVJldHJhbnNtaXNzaW9uQ291bnQgPCBrTWF4UmV0cmFuc21pdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudCByZXRyYW5zbWlzc2lvbiBjb3VudGVyIGFuZCB0aW1lci4KKyAgICAgICAgICAgIGNvYXBNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25Db3VudCsrOworICAgICAgICAgICAgY29hcE1ldGFkYXRhLm1SZXRyYW5zbWlzc2lvblRpbWVvdXQgKj0gMjsKKyAgICAgICAgICAgIGNvYXBNZXRhZGF0YS5tTmV4dFRpbWVyU2hvdCA9IG5vdyArIGNvYXBNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25UaW1lb3V0OworICAgICAgICAgICAgY29hcE1ldGFkYXRhLlVwZGF0ZUluKCptZXNzYWdlKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcmV0cmFuc21pc3Npb24gdGltZSBpcyBsb3dlciB0aGFuIGN1cnJlbnQgbG93ZXN0LgorICAgICAgICAgICAgaWYgKGNvYXBNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25UaW1lb3V0IDwgbmV4dERlbHRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5leHREZWx0YSA9IGNvYXBNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25UaW1lb3V0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZXRyYW5zbWl0CisgICAgICAgICAgICBpZiAoIWNvYXBNZXRhZGF0YS5tQWNrbm93bGVkZ2VkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKGNvYXBNZXRhZGF0YS5tRGVzdGluYXRpb25BZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChjb2FwTWV0YWRhdGEubURlc3RpbmF0aW9uUG9ydCk7CisgICAgICAgICAgICAgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIoY29hcE1ldGFkYXRhLm1Tb3VyY2VBZGRyZXNzKTsKKworICAgICAgICAgICAgICAgIFNlbmRDb3B5KCptZXNzYWdlLCBtZXNzYWdlSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBObyBleHBlY3RlZCByZXNwb25zZSBvciBhY2tub3dsZWRnbWVudC4KKyAgICAgICAgICAgIEZpbmFsaXplQ29hcFRyYW5zYWN0aW9uKCptZXNzYWdlLCBjb2FwTWV0YWRhdGEsIE5VTEwsIE5VTEwsIE5VTEwsIE9UX0VSUk9SX1JFU1BPTlNFX1RJTUVPVVQpOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZSA9IG5leHRNZXNzYWdlOworICAgIH0KKworICAgIGlmIChuZXh0RGVsdGEgIT0gMHhmZmZmZmZmZikKKyAgICB7CisgICAgICAgIG1SZXRyYW5zbWlzc2lvblRpbWVyLlN0YXJ0KG5leHREZWx0YSk7CisgICAgfQorfQorCit2b2lkIENvYXA6OkZpbmFsaXplQ29hcFRyYW5zYWN0aW9uKE1lc3NhZ2UgJmFSZXF1ZXN0LCBjb25zdCBDb2FwTWV0YWRhdGEgJmFDb2FwTWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlciAqYVJlc3BvbnNlSGVhZGVyLCBNZXNzYWdlICphUmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KQoreworICAgIERlcXVldWVNZXNzYWdlKGFSZXF1ZXN0KTsKKworICAgIGlmIChhQ29hcE1ldGFkYXRhLm1SZXNwb25zZUhhbmRsZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGFDb2FwTWV0YWRhdGEubVJlc3BvbnNlSGFuZGxlcihhQ29hcE1ldGFkYXRhLm1SZXNwb25zZUNvbnRleHQsIGFSZXNwb25zZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXNwb25zZSwgYU1lc3NhZ2VJbmZvLCBhUmVzdWx0KTsKKyAgICB9Cit9CisKK290RXJyb3IgQ29hcDo6QWJvcnRUcmFuc2FjdGlvbihvdENvYXBSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBDb2FwTWV0YWRhdGEgY29hcE1ldGFkYXRhOworCisgICAgZm9yIChtZXNzYWdlID0gbVBlbmRpbmdSZXF1ZXN0cy5HZXRIZWFkKCk7IG1lc3NhZ2UgIT0gTlVMTDsgbWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGNvYXBNZXRhZGF0YS5SZWFkRnJvbSgqbWVzc2FnZSk7CisKKyAgICAgICAgaWYgKGNvYXBNZXRhZGF0YS5tUmVzcG9uc2VIYW5kbGVyID09IGFIYW5kbGVyICYmIGNvYXBNZXRhZGF0YS5tUmVzcG9uc2VDb250ZXh0ID09IGFDb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBEZXF1ZXVlTWVzc2FnZSgqbWVzc2FnZSk7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKworTWVzc2FnZSAqQ29hcDo6Q29weUFuZEVucXVldWVNZXNzYWdlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhQ29weUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb2FwTWV0YWRhdGEgJmFDb2FwTWV0YWRhdGEpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZUNvcHkgPSBOVUxMOworICAgIHVpbnQzMl90IGFsYXJtRmlyZVRpbWU7CisKKyAgICAvLyBDcmVhdGUgYSBtZXNzYWdlIGNvcHkgb2YgcmVxdWVzdGVkIHNpemUuCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlQ29weSA9IGFNZXNzYWdlLkNsb25lKGFDb3B5TGVuZ3RoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIC8vIEFwcGVuZCB0aGUgY29weSB3aXRoIHJldHJhbnNtaXNzaW9uIGRhdGEuCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFDb2FwTWV0YWRhdGEuQXBwZW5kVG8oKm1lc3NhZ2VDb3B5KSk7CisKKyAgICAvLyBTZXR1cCB0aGUgdGltZXIuCisgICAgaWYgKG1SZXRyYW5zbWlzc2lvblRpbWVyLklzUnVubmluZygpKQorICAgIHsKKyAgICAgICAgLy8gSWYgdGltZXIgaXMgYWxyZWFkeSBydW5uaW5nLCBjaGVjayBpZiBpdCBzaG91bGQgYmUgcmVzdGFydGVkIHdpdGggZWFybGllciBmaXJlIHRpbWUuCisgICAgICAgIGFsYXJtRmlyZVRpbWUgPSBtUmV0cmFuc21pc3Npb25UaW1lci5HZXRGaXJlVGltZSgpOworCisgICAgICAgIGlmIChhQ29hcE1ldGFkYXRhLklzRWFybGllcihhbGFybUZpcmVUaW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJldHJhbnNtaXNzaW9uVGltZXIuU3RhcnQoYUNvYXBNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25UaW1lb3V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtUmV0cmFuc21pc3Npb25UaW1lci5TdGFydChhQ29hcE1ldGFkYXRhLm1SZXRyYW5zbWlzc2lvblRpbWVvdXQpOworICAgIH0KKworICAgIC8vIEVucXVldWUgdGhlIG1lc3NhZ2UuCisgICAgbVBlbmRpbmdSZXF1ZXN0cy5FbnF1ZXVlKCptZXNzYWdlQ29weSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlQ29weSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZUNvcHktPkZyZWUoKTsKKyAgICAgICAgbWVzc2FnZUNvcHkgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtZXNzYWdlQ29weTsKK30KKwordm9pZCBDb2FwOjpEZXF1ZXVlTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBtUGVuZGluZ1JlcXVlc3RzLkRlcXVldWUoYU1lc3NhZ2UpOworCisgICAgaWYgKG1SZXRyYW5zbWlzc2lvblRpbWVyLklzUnVubmluZygpICYmIChtUGVuZGluZ1JlcXVlc3RzLkdldEhlYWQoKSA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIC8vIE5vIG1vcmUgcmVxdWVzdHMgcGVuZGluZywgc3RvcCB0aGUgdGltZXIuCisgICAgICAgIG1SZXRyYW5zbWlzc2lvblRpbWVyLlN0b3AoKTsKKyAgICB9CisKKyAgICAvLyBGcmVlIHRoZSBtZXNzYWdlIG1lbW9yeS4KKyAgICBhTWVzc2FnZS5GcmVlKCk7CisKKyAgICAvLyBObyBuZWVkIHRvIHdvcnJ5IHRoYXQgdGhlIGVhcmxpZXN0IHBlbmRpbmcgbWVzc2FnZSB3YXMgcmVtb3ZlZCAtCisgICAgLy8gdGhlIHRpbWVyIHdvdWxkIGp1c3Qgc2hvb3QgZWFybGllciBhbmQgdGhlbiBpdCdkIGJlIHNldHVwIGFnYWluLgorfQorCitvdEVycm9yIENvYXA6OlNlbmRDb3B5KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBNZXNzYWdlICptZXNzYWdlQ29weSA9IE5VTEw7CisKKyAgICAvLyBDcmVhdGUgYSBtZXNzYWdlIGNvcHkgZm9yIGxvd2VyIGxheWVycy4KKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2VDb3B5ID0gYU1lc3NhZ2UuQ2xvbmUoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoQ29hcE1ldGFkYXRhKSkpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvLyBTZW5kIHRoZSBjb3B5LgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kKCptZXNzYWdlQ29weSwgYU1lc3NhZ2VJbmZvKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlQ29weSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZUNvcHktPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK01lc3NhZ2UgKkNvYXA6OkZpbmRSZWxhdGVkUmVxdWVzdChjb25zdCBIZWFkZXIgJmFSZXNwb25zZUhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlciAmYVJlcXVlc3RIZWFkZXIsIENvYXBNZXRhZGF0YSAmYUNvYXBNZXRhZGF0YSkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gbVBlbmRpbmdSZXF1ZXN0cy5HZXRIZWFkKCk7CisKKyAgICB3aGlsZSAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgYUNvYXBNZXRhZGF0YS5SZWFkRnJvbSgqbWVzc2FnZSk7CisKKyAgICAgICAgaWYgKCgoYUNvYXBNZXRhZGF0YS5tRGVzdGluYXRpb25BZGRyZXNzID09IGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKSB8fAorICAgICAgICAgICAgIGFDb2FwTWV0YWRhdGEubURlc3RpbmF0aW9uQWRkcmVzcy5Jc011bHRpY2FzdCgpIHx8CisgICAgICAgICAgICAgYUNvYXBNZXRhZGF0YS5tRGVzdGluYXRpb25BZGRyZXNzLklzQW55Y2FzdFJvdXRpbmdMb2NhdG9yKCkpICYmCisgICAgICAgICAgICAoYUNvYXBNZXRhZGF0YS5tRGVzdGluYXRpb25Qb3J0ID09IGFNZXNzYWdlSW5mby5HZXRQZWVyUG9ydCgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRnJvbU1lc3NhZ2UgY2FuIHJldHVybiBPVF9FUlJPUl9QQVJTRSBpZiBvbmx5IHBhcnRpYWwgbWVzc2FnZSB3YXMgc3RvcmVkIChoZWFkZXIgb25seSksCisgICAgICAgICAgICAvLyBidXQgcGF5bG9hZCBtYXJrZXIgaXMgcHJlc2VudC4gQXNzdW1lLCB0aGF0IHN0b3JlZCBtZXNzYWdlcyBhcmUgYWx3YXlzIHZhbGlkLgorICAgICAgICAgICAgYVJlcXVlc3RIZWFkZXIuRnJvbU1lc3NhZ2UoKm1lc3NhZ2UsIHNpemVvZihDb2FwTWV0YWRhdGEpKTsKKworICAgICAgICAgICAgc3dpdGNoIChhUmVzcG9uc2VIZWFkZXIuR2V0VHlwZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBPVF9DT0FQX1RZUEVfUkVTRVQ6CisgICAgICAgICAgICBjYXNlIE9UX0NPQVBfVFlQRV9BQ0tOT1dMRURHTUVOVDoKKyAgICAgICAgICAgICAgICBpZiAoYVJlc3BvbnNlSGVhZGVyLkdldE1lc3NhZ2VJZCgpID09IGFSZXF1ZXN0SGVhZGVyLkdldE1lc3NhZ2VJZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRToKKyAgICAgICAgICAgIGNhc2UgT1RfQ09BUF9UWVBFX05PTl9DT05GSVJNQUJMRToKKyAgICAgICAgICAgICAgICBpZiAoYVJlc3BvbnNlSGVhZGVyLklzVG9rZW5FcXVhbChhUmVxdWVzdEhlYWRlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKwordm9pZCBDb2FwOjpIYW5kbGVVZHBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Q29hcCAqPihhQ29udGV4dCktPlJlY2VpdmUoKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIENvYXA6OlJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIEhlYWRlciBoZWFkZXI7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gaGVhZGVyLkZyb21NZXNzYWdlKGFNZXNzYWdlLCAwKSk7CisKKyAgICBpZiAoaGVhZGVyLklzUmVxdWVzdCgpKQorICAgIHsKKyAgICAgICAgUHJvY2Vzc1JlY2VpdmVkUmVxdWVzdChoZWFkZXIsIGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBQcm9jZXNzUmVjZWl2ZWRSZXNwb25zZShoZWFkZXIsIGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvcikKKyAgICB7CisgICAgICAgIG90TG9nSW5mb0NvYXBFcnIoR2V0TmV0aWYoKS5HZXRJbnN0YW5jZSgpLCBlcnJvciwgIlJlY2VpdmUgZmFpbGVkIik7CisgICAgfQorfQorCit2b2lkIENvYXA6OlByb2Nlc3NSZWNlaXZlZFJlc3BvbnNlKEhlYWRlciAmYVJlc3BvbnNlSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIEhlYWRlciByZXF1ZXN0SGVhZGVyOworICAgIENvYXBNZXRhZGF0YSBjb2FwTWV0YWRhdGE7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KGFSZXNwb25zZUhlYWRlci5HZXRMZW5ndGgoKSk7CisKKyAgICBtZXNzYWdlID0gRmluZFJlbGF0ZWRSZXF1ZXN0KGFSZXNwb25zZUhlYWRlciwgYU1lc3NhZ2VJbmZvLCByZXF1ZXN0SGVhZGVyLCBjb2FwTWV0YWRhdGEpOworCisgICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFSZXNwb25zZUhlYWRlci5HZXRUeXBlKCkpCisgICAgeworICAgIGNhc2UgT1RfQ09BUF9UWVBFX1JFU0VUOgorICAgICAgICBpZiAoYVJlc3BvbnNlSGVhZGVyLklzRW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgRmluYWxpemVDb2FwVHJhbnNhY3Rpb24oKm1lc3NhZ2UsIGNvYXBNZXRhZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCwgT1RfRVJST1JfQUJPUlQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIG5vbi1lbXB0eSByZXNldCBtZXNzYWdlcyAoUkZDIDcyNTIsIHAuIDQuMikuCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQ6CisgICAgICAgIGlmIChhUmVzcG9uc2VIZWFkZXIuSXNFbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBFbXB0eSBhY2tub3dsZWRnbWVudC4KKyAgICAgICAgICAgIGlmIChjb2FwTWV0YWRhdGEubUNvbmZpcm1hYmxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvYXBNZXRhZGF0YS5tQWNrbm93bGVkZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb2FwTWV0YWRhdGEuVXBkYXRlSW4oKm1lc3NhZ2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG1lc3NhZ2UgaWYgcmVzcG9uc2UgaXMgbm90IGV4cGVjdGVkLCBvdGhlcndpc2UgYXdhaXQgcmVzcG9uc2UuCisgICAgICAgICAgICBpZiAoY29hcE1ldGFkYXRhLm1SZXNwb25zZUhhbmRsZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEZXF1ZXVlTWVzc2FnZSgqbWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYVJlc3BvbnNlSGVhZGVyLklzUmVzcG9uc2UoKSAmJiBhUmVzcG9uc2VIZWFkZXIuSXNUb2tlbkVxdWFsKHJlcXVlc3RIZWFkZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBQaWdneWJhY2tlZCByZXNwb25zZS4KKyAgICAgICAgICAgIEZpbmFsaXplQ29hcFRyYW5zYWN0aW9uKCptZXNzYWdlLCBjb2FwTWV0YWRhdGEsICZhUmVzcG9uc2VIZWFkZXIsICZhTWVzc2FnZSwgJmFNZXNzYWdlSW5mbywgT1RfRVJST1JfTk9ORSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUgYWNrbm93bGVkZ21lbnRzIGNhcnJ5aW5nIHJlcXVlc3RzIChSRkMgNzI1MiwgcC4gNC4yKQorICAgICAgICAvLyBvciB3aXRoIG5vIHRva2VuIG1hdGNoIChSRkMgNzI1MiwgcC4gNS4zLjIpCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEU6CisgICAgICAgIC8vIFNlbmQgZW1wdHkgQUNLIGlmIGl0IGlzIGEgQ09OIG1lc3NhZ2UuCisgICAgICAgIFNlbmRBY2soYVJlc3BvbnNlSGVhZGVyLCBhTWVzc2FnZUluZm8pOworCisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAgICA7CisKKyAgICBjYXNlIE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEU6CisgICAgICAgIC8vIFNlcGFyYXRlIHJlc3BvbnNlLgorICAgICAgICBGaW5hbGl6ZUNvYXBUcmFuc2FjdGlvbigqbWVzc2FnZSwgY29hcE1ldGFkYXRhLCAmYVJlc3BvbnNlSGVhZGVyLCAmYU1lc3NhZ2UsICZhTWVzc2FnZUluZm8sIE9UX0VSUk9SX05PTkUpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChhUmVzcG9uc2VIZWFkZXIuSXNDb25maXJtYWJsZSgpIHx8IGFSZXNwb25zZUhlYWRlci5Jc05vbkNvbmZpcm1hYmxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWxseSBwYXJzZWQgYSBoZWFkZXIgYnV0IG5vIG1hdGNoaW5nIHJlcXVlc3Qgd2FzIGZvdW5kIC0gcmVqZWN0IHRoZSBtZXNzYWdlIGJ5IHNlbmRpbmcgcmVzZXQuCisgICAgICAgICAgICBTZW5kUmVzZXQoYVJlc3BvbnNlSGVhZGVyLCBhTWVzc2FnZUluZm8pOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvYXA6OlByb2Nlc3NSZWNlaXZlZFJlcXVlc3QoSGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIGNoYXIgdXJpUGF0aFtSZXNvdXJjZTo6a01heFJlY2VpdmVkVXJpUGF0aF0gPSAiIjsKKyAgICBjaGFyICpjdXJVcmlQYXRoID0gdXJpUGF0aDsKKyAgICBjb25zdCBIZWFkZXI6Ok9wdGlvbiAqY29hcE9wdGlvbjsKKyAgICBNZXNzYWdlICpjYWNoZWRSZXNwb25zZSA9IE5VTEw7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKworICAgIGlmIChtSW50ZXJjZXB0b3IgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtSW50ZXJjZXB0b3IoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbywgbUNvbnRleHQpKTsKKyAgICB9CisKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KGFIZWFkZXIuR2V0TGVuZ3RoKCkpOworCisgICAgc3dpdGNoIChtUmVzcG9uc2VzUXVldWUuR2V0TWF0Y2hlZFJlc3BvbnNlQ29weShhSGVhZGVyLCBhTWVzc2FnZUluZm8sICZjYWNoZWRSZXNwb25zZSkpCisgICAgeworICAgIGNhc2UgT1RfRVJST1JfTk9ORToKKyAgICAgICAgZXJyb3IgPSBTZW5kKCpjYWNoZWRSZXNwb25zZSwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgICAgIDsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzoKKyAgICAgICAgRXhpdE5vdygpOworCisgICAgY2FzZSBPVF9FUlJPUl9OT1RfRk9VTkQ6CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY29hcE9wdGlvbiA9IGFIZWFkZXIuR2V0Rmlyc3RPcHRpb24oKTsKKworICAgIHdoaWxlIChjb2FwT3B0aW9uICE9IE5VTEwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvYXBPcHRpb24tPm1OdW1iZXIpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPVF9DT0FQX09QVElPTl9VUklfUEFUSDoKKyAgICAgICAgICAgIGlmIChjdXJVcmlQYXRoICE9IHVyaVBhdGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmN1clVyaVBhdGgrKyA9ICcvJzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGNvYXBPcHRpb24tPm1MZW5ndGggPCBzaXplb2YodXJpUGF0aCkgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KGN1clVyaVBhdGggKyAxIC0gdXJpUGF0aCkpOworCisgICAgICAgICAgICBtZW1jcHkoY3VyVXJpUGF0aCwgY29hcE9wdGlvbi0+bVZhbHVlLCBjb2FwT3B0aW9uLT5tTGVuZ3RoKTsKKyAgICAgICAgICAgIGN1clVyaVBhdGggKz0gY29hcE9wdGlvbi0+bUxlbmd0aDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNvYXBPcHRpb24gPSBhSGVhZGVyLkdldE5leHRPcHRpb24oKTsKKyAgICB9CisKKyAgICBjdXJVcmlQYXRoWzBdID0gJ1wwJzsKKworICAgIGZvciAoY29uc3QgUmVzb3VyY2UgKnJlc291cmNlID0gbVJlc291cmNlczsgcmVzb3VyY2U7IHJlc291cmNlID0gcmVzb3VyY2UtPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChzdHJjbXAocmVzb3VyY2UtPm1VcmlQYXRoLCB1cmlQYXRoKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXNvdXJjZS0+SGFuZGxlUmVxdWVzdChhSGVhZGVyLCBhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtRGVmYXVsdEhhbmRsZXIpCisgICAgeworICAgICAgICBtRGVmYXVsdEhhbmRsZXIobURlZmF1bHRIYW5kbGVyQ29udGV4dCwgJmFIZWFkZXIsICZhTWVzc2FnZSwgJmFNZXNzYWdlSW5mbyk7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nSW5mb0NvYXBFcnIoR2V0TmV0aWYoKS5HZXRJbnN0YW5jZSgpLCBlcnJvciwgIkZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3QiKTsKKworICAgICAgICBpZiAoZXJyb3IgPT0gT1RfRVJST1JfTk9UX0ZPVU5EKQorICAgICAgICB7CisgICAgICAgICAgICBTZW5kTm90Rm91bmQoYUhlYWRlciwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYWNoZWRSZXNwb25zZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBjYWNoZWRSZXNwb25zZS0+RnJlZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuOworfQorCitDb2FwTWV0YWRhdGE6OkNvYXBNZXRhZGF0YShib29sIGFDb25maXJtYWJsZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RDb2FwUmVzcG9uc2VIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBtU291cmNlQWRkcmVzcyA9IGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpOworICAgIG1EZXN0aW5hdGlvblBvcnQgPSBhTWVzc2FnZUluZm8uR2V0UGVlclBvcnQoKTsKKyAgICBtRGVzdGluYXRpb25BZGRyZXNzID0gYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCk7CisgICAgbVJlc3BvbnNlSGFuZGxlciA9IGFIYW5kbGVyOworICAgIG1SZXNwb25zZUNvbnRleHQgPSBhQ29udGV4dDsKKyAgICBtUmV0cmFuc21pc3Npb25Db3VudCA9IDA7CisgICAgbVJldHJhbnNtaXNzaW9uVGltZW91dCA9IFRpbWVyOjpTZWNUb01zZWMoa0Fja1RpbWVvdXQpOworICAgIG1SZXRyYW5zbWlzc2lvblRpbWVvdXQgKz0gb3RQbGF0UmFuZG9tR2V0KCkgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRpbWVyOjpTZWNUb01zZWMoa0Fja1RpbWVvdXQpICoga0Fja1JhbmRvbUZhY3Rvck51bWVyYXRvciAvIGtBY2tSYW5kb21GYWN0b3JEZW5vbWluYXRvciAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZXI6OlNlY1RvTXNlYyhrQWNrVGltZW91dCkgKyAxKTsKKworICAgIGlmIChhQ29uZmlybWFibGUpCisgICAgeworICAgICAgICAvLyBTZXQgbmV4dCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0LgorICAgICAgICBtTmV4dFRpbWVyU2hvdCA9IFRpbWVyOjpHZXROb3coKSArIG1SZXRyYW5zbWlzc2lvblRpbWVvdXQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFNldCBvdmVyYWxsIHJlc3BvbnNlIHRpbWVvdXQuCisgICAgICAgIG1OZXh0VGltZXJTaG90ID0gVGltZXI6OkdldE5vdygpICsga01heFRyYW5zbWl0V2FpdDsKKyAgICB9CisKKyAgICBtQWNrbm93bGVkZ2VkID0gZmFsc2U7CisgICAgbUNvbmZpcm1hYmxlID0gYUNvbmZpcm1hYmxlOworfQorCitSZXNwb25zZXNRdWV1ZTo6UmVzcG9uc2VzUXVldWUoVGhyZWFkTmV0aWYgJmFOZXRpZik6CisgICAgbVRpbWVyKGFOZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZSZXNwb25zZXNRdWV1ZTo6SGFuZGxlVGltZXIsIHRoaXMpCit7Cit9CisKK290RXJyb3IgUmVzcG9uc2VzUXVldWU6OkdldE1hdGNoZWRSZXNwb25zZUNvcHkoY29uc3QgSGVhZGVyICZhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgKiphUmVzcG9uc2UpCit7CisgICAgb3RFcnJvciAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKyAgICBNZXNzYWdlICAgICAgICAgICAgICAgKm1lc3NhZ2U7CisgICAgRW5xdWV1ZWRSZXNwb25zZUhlYWRlciBlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyOworICAgIElwNjo6TWVzc2FnZUluZm8gICAgICAgbWVzc2FnZUluZm87CisgICAgSGVhZGVyICAgICAgICAgICAgICAgICBoZWFkZXI7CisKKyAgICBmb3IgKG1lc3NhZ2UgPSBtUXVldWUuR2V0SGVhZCgpOyBtZXNzYWdlICE9IE5VTEw7IG1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyLlJlYWRGcm9tKCptZXNzYWdlKTsKKyAgICAgICAgbWVzc2FnZUluZm8gPSBlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyLkdldE1lc3NhZ2VJbmZvKCk7CisKKyAgICAgICAgLy8gQ2hlY2sgc291cmNlIGVuZHBvaW50CisgICAgICAgIGlmIChtZXNzYWdlSW5mby5HZXRQZWVyUG9ydCgpICE9IGFNZXNzYWdlSW5mby5HZXRQZWVyUG9ydCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpICE9IGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIE1lc3NhZ2UgSWQKKyAgICAgICAgaWYgKGhlYWRlci5Gcm9tTWVzc2FnZSgqbWVzc2FnZSwgc2l6ZW9mKEVucXVldWVkUmVzcG9uc2VIZWFkZXIpKSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoZWFkZXIuR2V0TWVzc2FnZUlkKCkgIT0gYUhlYWRlci5HZXRNZXNzYWdlSWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAqYVJlc3BvbnNlID0gbWVzc2FnZS0+Q2xvbmUoKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCphUmVzcG9uc2UgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgICAgICBFbnF1ZXVlZFJlc3BvbnNlSGVhZGVyOjpSZW1vdmVGcm9tKCoqYVJlc3BvbnNlKTsKKworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgUmVzcG9uc2VzUXVldWU6OkdldE1hdGNoZWRSZXNwb25zZUNvcHkoY29uc3QgTWVzc2FnZSAmYVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAqKmFSZXNwb25zZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgIGhlYWRlcjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBoZWFkZXIuRnJvbU1lc3NhZ2UoYVJlcXVlc3QsIDApKTsKKworICAgIGVycm9yID0gR2V0TWF0Y2hlZFJlc3BvbnNlQ29weShoZWFkZXIsIGFNZXNzYWdlSW5mbywgYVJlc3BvbnNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgUmVzcG9uc2VzUXVldWU6OkVucXVldWVSZXNwb25zZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIEhlYWRlciAgICAgICAgICAgICAgICAgaGVhZGVyOworICAgIE1lc3NhZ2UgICAgICAgICAgICAgICAqY29weTsKKyAgICBFbnF1ZXVlZFJlc3BvbnNlSGVhZGVyIGVucXVldWVkUmVzcG9uc2VIZWFkZXIoYU1lc3NhZ2VJbmZvKTsKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgIG1lc3NhZ2VDb3VudDsKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgIGJ1ZmZlckNvdW50OworCisgICAgU3VjY2Vzc09yRXhpdChoZWFkZXIuRnJvbU1lc3NhZ2UoYU1lc3NhZ2UsIDApKTsKKworICAgIHN3aXRjaCAoR2V0TWF0Y2hlZFJlc3BvbnNlQ29weShhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCAmY29weSkpCisgICAgeworICAgIGNhc2UgT1RfRVJST1JfTk9UX0ZPVU5EOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9ORToKKyAgICAgICAgY29weS0+RnJlZSgpOworCisgICAgLy8gZmFsbCB0aHJvdWdoCisKKyAgICBjYXNlIE9UX0VSUk9SX05PX0JVRlM6CisgICAgZGVmYXVsdDoKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIG1RdWV1ZS5HZXRJbmZvKG1lc3NhZ2VDb3VudCwgYnVmZmVyQ291bnQpOworCisgICAgaWYgKG1lc3NhZ2VDb3VudCA+PSBrTWF4Q2FjaGVkUmVzcG9uc2VzKQorICAgIHsKKyAgICAgICAgRGVxdWV1ZU9sZGVzdFJlc3BvbnNlKCk7CisgICAgfQorCisgICAgY29weSA9IGFNZXNzYWdlLkNsb25lKCk7CisgICAgVmVyaWZ5T3JFeGl0KGNvcHkgIT0gTlVMTCk7CisKKyAgICBlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyLkFwcGVuZFRvKCpjb3B5KTsKKyAgICBtUXVldWUuRW5xdWV1ZSgqY29weSk7CisKKyAgICBpZiAoIW1UaW1lci5Jc1J1bm5pbmcoKSkKKyAgICB7CisgICAgICAgIG1UaW1lci5TdGFydChUaW1lcjo6U2VjVG9Nc2VjKGtFeGNoYW5nZUxpZmV0aW1lKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBSZXNwb25zZXNRdWV1ZTo6RGVxdWV1ZU9sZGVzdFJlc3BvbnNlKHZvaWQpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG1RdWV1ZS5HZXRIZWFkKCkpICE9IE5VTEwpOworICAgIERlcXVldWVSZXNwb25zZSgqbWVzc2FnZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIFJlc3BvbnNlc1F1ZXVlOjpEZXF1ZXVlQWxsUmVzcG9uc2VzKHZvaWQpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIHdoaWxlICgobWVzc2FnZSA9IG1RdWV1ZS5HZXRIZWFkKCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBEZXF1ZXVlUmVzcG9uc2UoKm1lc3NhZ2UpOworICAgIH0KK30KKworUmVzcG9uc2VzUXVldWUgJlJlc3BvbnNlc1F1ZXVlOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBSZXNwb25zZXNRdWV1ZSAmcXVldWUgPSAqc3RhdGljX2Nhc3Q8UmVzcG9uc2VzUXVldWUgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgUmVzcG9uc2VzUXVldWUgJnF1ZXVlID0gb3RHZXRUaHJlYWROZXRpZigpLkdldENvYXAoKS5tUmVzcG9uc2VzUXVldWU7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBxdWV1ZTsKK30KKwordm9pZCBSZXNwb25zZXNRdWV1ZTo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgUmVzcG9uc2VzUXVldWU6OkhhbmRsZVRpbWVyKHZvaWQpCit7CisgICAgTWVzc2FnZSAgICAgICAgICAgICAgICptZXNzYWdlOworICAgIEVucXVldWVkUmVzcG9uc2VIZWFkZXIgZW5xdWV1ZWRSZXNwb25zZUhlYWRlcjsKKworICAgIHdoaWxlICgobWVzc2FnZSA9IG1RdWV1ZS5HZXRIZWFkKCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyLlJlYWRGcm9tKCptZXNzYWdlKTsKKworICAgICAgICBpZiAoZW5xdWV1ZWRSZXNwb25zZUhlYWRlci5Jc0VhcmxpZXIoVGltZXI6OkdldE5vdygpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRGVxdWV1ZVJlc3BvbnNlKCptZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UaW1lci5TdGFydChlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyLkdldFJlbWFpbmluZ1RpbWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordWludDMyX3QgRW5xdWV1ZWRSZXNwb25zZUhlYWRlcjo6R2V0UmVtYWluaW5nVGltZSh2b2lkKSBjb25zdAoreworICAgIGludDMyX3QgcmVtYWluaW5nVGltZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG1EZXF1ZXVlVGltZSAtIFRpbWVyOjpHZXROb3coKSk7CisKKyAgICByZXR1cm4gcmVtYWluaW5nVGltZSA+PSAwID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlbWFpbmluZ1RpbWUpIDogMDsKK30KKworfSAgLy8gbmFtZXNwYWNlIENvYXAKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29hcC9jb2FwLmhwcCBiL3NyYy9jb3JlL2NvYXAvY29hcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjOWRiYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvYXAvY29hcC5ocHAKQEAgLTAsMCArMSw3MTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ09BUF9IUFBfCisjZGVmaW5lIENPQVBfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb2FwLmg+CisKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKyNpbmNsdWRlICJuZXQvbmV0aWYuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIENvQVAgY2xpZW50IGFuZCBzZXJ2ZXIgZnVuY3Rpb25hbGl0eS4KKyAqLworCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKKworbmFtZXNwYWNlIENvYXAgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtY29hcAorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogUHJvdG9jb2wgQ29uc3RhbnRzIChSRkMgNzI1MikuCisgKgorICovCitlbnVtCit7CisgICAga0Fja1RpbWVvdXQgICAgICAgICAgICAgICAgID0gT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9BQ0tfVElNRU9VVCwKKyAgICBrQWNrUmFuZG9tRmFjdG9yTnVtZXJhdG9yICAgPSBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19SQU5ET01fRkFDVE9SX05VTUVSQVRPUiwKKyAgICBrQWNrUmFuZG9tRmFjdG9yRGVub21pbmF0b3IgPSBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19SQU5ET01fRkFDVE9SX0RFTk9NSU5BVE9SLAorICAgIGtNYXhSZXRyYW5zbWl0ICAgICAgICAgICAgICA9IE9QRU5USFJFQURfQ09ORklHX0NPQVBfTUFYX1JFVFJBTlNNSVQsCisgICAga05TdGFydCAgICAgICAgICAgICAgICAgICAgID0gMSwKKyAgICBrRGVmYXVsdExlaXN1cmUgICAgICAgICAgICAgPSA1LAorICAgIGtQcm9iaW5nUmF0ZSAgICAgICAgICAgICAgICA9IDEsCisKKyAgICAvLyBOb3RlIHRoYXQgMiA8PCAoa01heFJldHJhbnNtaXQgLSAxKSBpcyBlcXVhbCB0byBrTWF4UmV0cmFuc21pdCBwb3dlciBvZiAyCisgICAga01heFRyYW5zbWl0U3BhbiAgICAgICAgICAgID0ga0Fja1RpbWVvdXQgKiAoKDIgPDwgKGtNYXhSZXRyYW5zbWl0IC0gMSkpIC0gMSkgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtBY2tSYW5kb21GYWN0b3JOdW1lcmF0b3IgLyBrQWNrUmFuZG9tRmFjdG9yRGVub21pbmF0b3IsCisgICAga01heFRyYW5zbWl0V2FpdCAgICAgICAgICAgID0ga0Fja1RpbWVvdXQgKiAoKDIgPDwga01heFJldHJhbnNtaXQpIC0gMSkgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtBY2tSYW5kb21GYWN0b3JOdW1lcmF0b3IgLyBrQWNrUmFuZG9tRmFjdG9yRGVub21pbmF0b3IsCisgICAga01heExhdGVuY3kgICAgICAgICAgICAgICAgID0gMTAwLAorICAgIGtQcm9jZXNzaW5nRGVsYXkgICAgICAgICAgICA9IGtBY2tUaW1lb3V0LAorICAgIGtNYXhSdHQgICAgICAgICAgICAgICAgICAgICA9IDIgKiBrTWF4TGF0ZW5jeSArIGtQcm9jZXNzaW5nRGVsYXksCisgICAga0V4Y2hhbmdlTGlmZXRpbWUgICAgICAgICAgID0ga01heFRyYW5zbWl0U3BhbiArIDIgKiAoa01heExhdGVuY3kpICsga1Byb2Nlc3NpbmdEZWxheSwKKyAgICBrTm9uTGlmZXRpbWUgICAgICAgICAgICAgICAgPSBrTWF4VHJhbnNtaXRTcGFuICsga01heExhdGVuY3kKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIG1ldGFkYXRhIHJlcXVpcmVkIGZvciBDb0FQIHJldHJhbnNtaXNzaW9uLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENvYXBNZXRhZGF0YQoreworICAgIGZyaWVuZCBjbGFzcyBDb2FwOworCitwdWJsaWM6CisKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yIGZvciB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQ29hcE1ldGFkYXRhKHZvaWQpOgorICAgICAgICBtRGVzdGluYXRpb25Qb3J0KDApLAorICAgICAgICBtUmVzcG9uc2VIYW5kbGVyKE5VTEwpLAorICAgICAgICBtUmVzcG9uc2VDb250ZXh0KE5VTEwpLAorICAgICAgICBtTmV4dFRpbWVyU2hvdCgwKSwKKyAgICAgICAgbVJldHJhbnNtaXNzaW9uVGltZW91dCgwKSwKKyAgICAgICAgbVJldHJhbnNtaXNzaW9uQ291bnQoMCksCisgICAgICAgIG1BY2tub3dsZWRnZWQoZmFsc2UpLAorICAgICAgICBtQ29uZmlybWFibGUoZmFsc2UpIHt9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0IHdpdGggc3BlY2lmaWMgdmFsdWVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbmZpcm1hYmxlICBJbmZvcm1hdGlvbiBpZiB0aGUgcmVxdWVzdCBpcyBjb25maXJtYWJsZSBvciBub3QuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBZGRyZXNzaW5nIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgICAgUG9pbnRlciB0byBhIGhhbmRsZXIgZnVuY3Rpb24gZm9yIHRoZSByZXNwb25zZS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgIENvbnRleHQgZm9yIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLgorICAgICAqCisgICAgICovCisgICAgQ29hcE1ldGFkYXRhKGJvb2wgYUNvbmZpcm1hYmxlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgIG90Q29hcFJlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyByZXF1ZXN0IGRhdGEgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgYnl0ZXMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlcnMgdG8gZ3JvdyB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVG8oTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCh0aGlzLCBzaXplb2YoKnRoaXMpKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVhZHMgcmVxdWVzdCBkYXRhIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBSZWFkRnJvbShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSkgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZigqdGhpcyksIHNpemVvZigqdGhpcyksIHRoaXMpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHJlcXVlc3QgZGF0YSBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXBkYXRlZC4KKyAgICAgKgorICAgICAqLworICAgIGludCBVcGRhdGVJbihNZXNzYWdlICZhTWVzc2FnZSkgY29uc3QgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuV3JpdGUoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoKnRoaXMpLCBzaXplb2YoKnRoaXMpLCB0aGlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGJlZm9yZSB0aGUgZ2l2ZW4gdGltZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBPdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc0VhcmxpZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1OZXh0VGltZXJTaG90KSA+IDApOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGFmdGVyIHRoZSBnaXZlbiB0aW1lLgorICAgICAqIEByZXR2YWwgRkFMU0UgIE90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzTGF0ZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1OZXh0VGltZXJTaG90KSA8IDApOyB9OworCitwcml2YXRlOgorICAgIElwNjo6QWRkcmVzcyAgICAgICAgICBtU291cmNlQWRkcmVzczsgICAgICAgICAvLy88IElQdjYgYWRkcmVzcyBvZiB0aGUgbWVzc2FnZSBzb3VyY2UuCisgICAgSXA2OjpBZGRyZXNzICAgICAgICAgIG1EZXN0aW5hdGlvbkFkZHJlc3M7ICAgIC8vLzwgSVB2NiBhZGRyZXNzIG9mIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uLgorICAgIHVpbnQxNl90ICAgICAgICAgICAgICBtRGVzdGluYXRpb25Qb3J0OyAgICAgICAvLy88IFVEUCBwb3J0IG9mIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uLgorICAgIG90Q29hcFJlc3BvbnNlSGFuZGxlciBtUmVzcG9uc2VIYW5kbGVyOyAgICAgICAvLy88IEEgZnVuY3Rpb24gcG9pbnRlciB0aGF0IGlzIGNhbGxlZCBvbiByZXNwb25zZSByZWNlcHRpb24uCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICptUmVzcG9uc2VDb250ZXh0OyAgICAgIC8vLzwgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgIHVpbnQzMl90ICAgICAgICAgICAgICBtTmV4dFRpbWVyU2hvdDsgICAgICAgICAvLy88IFRpbWUgd2hlbiB0aGUgdGltZXIgc2hvdWxkIHNob290IGZvciB0aGlzIG1lc3NhZ2UuCisgICAgdWludDMyX3QgICAgICAgICAgICAgIG1SZXRyYW5zbWlzc2lvblRpbWVvdXQ7IC8vLzwgRGVsYXkgdGhhdCBpcyBhcHBsaWVkIHRvIG5leHQgcmV0cmFuc21pc3Npb24uCisgICAgdWludDhfdCAgICAgICAgICAgICAgIG1SZXRyYW5zbWlzc2lvbkNvdW50OyAgIC8vLzwgTnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucy4KKyAgICBib29sICAgICAgICAgICAgICAgICAgbUFja25vd2xlZGdlZDogMTsgICAgICAgLy8vPCBJbmZvcm1hdGlvbiB0aGF0IHJlcXVlc3Qgd2FzIGFja25vd2xlZGdlZC4KKyAgICBib29sICAgICAgICAgICAgICAgICAgbUNvbmZpcm1hYmxlOiAxOyAgICAgICAgLy8vPCBJbmZvcm1hdGlvbiB0aGF0IG1lc3NhZ2UgaXMgY29uZmlybWFibGUuCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQ29BUCByZXNvdXJjZSBoYW5kbGluZy4KKyAqCisgKi8KK2NsYXNzIFJlc291cmNlIDogcHVibGljIG90Q29hcFJlc291cmNlCit7CisgICAgZnJpZW5kIGNsYXNzIENvYXA7CisKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4UmVjZWl2ZWRVcmlQYXRoID0gMzIsICAgLy8vPCBNYXhpbXVtIHN1cHBvcnRlZCBVUkkgcGF0aCBvbiByZWNlaXZlZCBtZXNzYWdlcy4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgcmVzb3VyY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVXJpUGF0aCAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyBmb3IgdGhlIFVyaS1QYXRoLgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBpcyBjYWxsZWQgd2hlbiByZWNlaXZpbmcgYSBDb0FQIG1lc3NhZ2UgZm9yIEBwIGFVcmlQYXRoLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICovCisgICAgUmVzb3VyY2UoY29uc3QgY2hhciAqYVVyaVBhdGgsIG90Q29hcFJlcXVlc3RIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkgeworICAgICAgICBtVXJpUGF0aCA9IGFVcmlQYXRoOworICAgICAgICBtSGFuZGxlciA9IGFIYW5kbGVyOworICAgICAgICBtQ29udGV4dCA9IGFDb250ZXh0OworICAgICAgICBtTmV4dCA9IE5VTEw7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgcmVzb3VyY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIFBvaW50ZXIgdG8gdGhlIG5leHQgcmVzb3VyY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBSZXNvdXJjZSAqR2V0TmV4dCh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZXNvdXJjZSAqPihtTmV4dCk7IH07CisKK3ByaXZhdGU6CisgICAgdm9pZCBIYW5kbGVSZXF1ZXN0KEhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykgY29uc3QgeworICAgICAgICBtSGFuZGxlcihtQ29udGV4dCwgJmFIZWFkZXIsICZhTWVzc2FnZSwgJmFNZXNzYWdlSW5mbyk7CisgICAgfQorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgbWV0YWRhdGEgcmVxdWlyZWQgZm9yIGNhY2hpbmcgQ29BUCByZXNwb25zZXMuCisgKgorICovCitjbGFzcyBFbnF1ZXVlZFJlc3BvbnNlSGVhZGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGluZyBlbXB0eSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBFbnF1ZXVlZFJlc3BvbnNlSGVhZGVyKHZvaWQpOiBtRGVxdWV1ZVRpbWUoMCksIG1NZXNzYWdlSW5mbygpIHt9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBjcmVhdGluZyBvYmplY3Qgd2l0aCB2YWxpZCBkZXF1ZXVlIHRpbWUgYW5kIG1lc3NhZ2UgaW5mby4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgVGhlIG1lc3NhZ2UgaW5mbyBjb250YWluaW5nIHNvdXJjZSBlbmRwb2ludCBpZGVudGlmaWNhdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIEVucXVldWVkUmVzcG9uc2VIZWFkZXIoY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKToKKyAgICAgICAgbURlcXVldWVUaW1lKFRpbWVyOjpHZXROb3coKSArIFRpbWVyOjpTZWNUb01zZWMoa0V4Y2hhbmdlTGlmZXRpbWUpKSwKKyAgICAgICAgbU1lc3NhZ2VJbmZvKGFNZXNzYWdlSW5mbykge30KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZCBtZXRhZGF0YSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBieXRlcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBhdmFpbGFibGUgYnVmZmVycyB0byBncm93IHRoZSBtZXNzYWdlLgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVG8oTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0IHsgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCh0aGlzLCBzaXplb2YoKnRoaXMpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVhZHMgcmVxdWVzdCBkYXRhIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBSZWFkRnJvbShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSkgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZigqdGhpcyksIHNpemVvZigqdGhpcyksIHRoaXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgbWV0YWRhdGEgZnJvbSB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIFJlbW92ZUZyb20oTWVzc2FnZSAmYU1lc3NhZ2UpIHsKKyAgICAgICAgYXNzZXJ0KGFNZXNzYWdlLlNldExlbmd0aChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZihFbnF1ZXVlZFJlc3BvbnNlSGVhZGVyKSkgPT0gT1RfRVJST1JfTk9ORSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYmVmb3JlIHRoZSBnaXZlbiB0aW1lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWUgIEEgdGltZSB0byBjb21wYXJlLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICogQHJldHZhbCBGQUxTRSAgT3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0VhcmxpZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1EZXF1ZXVlVGltZSkgPiAwKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIHdoaWNoIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBzZW50LgorICAgICAqCisgICAgICogQHJldHVybnMgIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIHdoaWNoIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBzZW50LgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0UmVtYWluaW5nVGltZSh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG1lc3NhZ2UgaW5mbyBvZiBjYWNoZWQgQ29BUCByZXNwb25zZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBUaGUgbWVzc2FnZSBpbmZvIG9mIHRoZSBjYWNoZWQgQ29BUCByZXNwb25zZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJkdldE1lc3NhZ2VJbmZvKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NZXNzYWdlSW5mbzsgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1EZXF1ZXVlVGltZTsKKyAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvIG1NZXNzYWdlSW5mbzsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBjYWNoZXMgQ29BUCByZXNwb25zZXMgdG8gaW1wbGVtZW50IG1lc3NhZ2UgZGVkdXBsaWNhdGlvbi4KKyAqCisgKi8KK2NsYXNzIFJlc3BvbnNlc1F1ZXVlCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRoYXQgQ29BUCBzZXJ2ZXIgc2hvdWxkIGJlIGFzc2lnbmVkIHRvLgorICAgICAqCisgICAgICovCisgICAgUmVzcG9uc2VzUXVldWUoVGhyZWFkTmV0aWYgJmFOZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBBZGQgZ2l2ZW4gcmVzcG9uc2UgdG8gdGhlIGNhY2hlLgorICAgICAqCisgICAgICogSWYgbWF0Y2hpbmcgcmVzcG9uc2UgKHRoZSBzYW1lIE1lc3NhZ2UgSUQsIHNvdXJjZSBlbmRwb2ludCBhZGRyZXNzIGFuZCBwb3J0KSBleGlzdHMgaW4gdGhlIGNhY2hlIGdpdmVuCisgICAgICogcmVzcG9uc2UgaXMgbm90IGFkZGVkLgorICAgICAqIFRoZSBDb0FQIHJlc3BvbnNlIGlzIGNvcGllZCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGNhY2hlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBUaGUgQ29BUCByZXNwb25zZSB0byBhZGQgdG8gdGhlIGNhY2hlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgVGhlIG1lc3NhZ2UgaW5mbyBjb3JyZXNwb25kaW5nIHRvIEBwIGFNZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBFbnF1ZXVlUmVzcG9uc2UoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgdGhlIG9sZGVzdCByZXNwb25zZSBmcm9tIHRoZSBjYWNoZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgRGVxdWV1ZU9sZGVzdFJlc3BvbnNlKHZvaWQpOworCisgICAgLyoqCisgICAgICogUmVtb3ZlIGFsbCByZXNwb25zZXMgZnJvbSB0aGUgY2FjaGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIERlcXVldWVBbGxSZXNwb25zZXModm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBjb3B5IG9mIENvQVAgcmVzcG9uc2UgZnJvbSB0aGUgY2FjaGUgdGhhdCBtYXRjaGVzIGdpdmVuIE1lc3NhZ2UgSUQgYW5kIHNvdXJjZSBlbmRwb2ludC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgICAgICAgVGhlIENvQVAgbWVzc2FnZSBoZWFkZXIgY29udGFpbmluZyBNZXNzYWdlIElELgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgVGhlIG1lc3NhZ2UgaW5mbyBjb250YWluaW5nIHNvdXJjZSBlbmRwb2ludCBhZGRyZXNzIGFuZCBwb3J0LgorICAgICAqIEBwYXJhbVtvdXRdIGFSZXNwb25zZSAgICAgQSBwb2ludGVyIHRvIGEgY29weSBvZiBhIGNhY2hlZCBDb0FQIHJlc3BvbnNlIG1hdGNoaW5nIGdpdmVuIGFyZ3VtZW50cy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBNYXRjaGluZyByZXNwb25zZSBmb3VuZCBhbmQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgYSBjb3B5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICBNYXRjaGluZyByZXNwb25zZSBmb3VuZCBidXQgdGhlcmUgaXMgbm90IHN1ZmZpY2llbnQgYnVmZmVyIHRvIGNyZWF0ZSBhIGNvcHkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE1hdGNoaW5nIHJlc3BvbnNlIG5vdCBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0TWF0Y2hlZFJlc3BvbnNlQ29weShjb25zdCBIZWFkZXIgJmFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAqKmFSZXNwb25zZSk7CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBjb3B5IG9mIENvQVAgcmVzcG9uc2UgZnJvbSB0aGUgY2FjaGUgdGhhdCBtYXRjaGVzIGdpdmVuIE1lc3NhZ2UgSUQgYW5kIHNvdXJjZSBlbmRwb2ludC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXF1ZXN0ICAgICAgVGhlIENvQVAgbWVzc2FnZSBjb250YWluaW5nIE1lc3NhZ2UgSUQuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBUaGUgbWVzc2FnZSBpbmZvIGNvbnRhaW5pbmcgc291cmNlIGVuZHBvaW50IGFkZHJlc3MgYW5kIHBvcnQuCisgICAgICogQHBhcmFtW291dF0gYVJlc3BvbnNlICAgICBBIHBvaW50ZXIgdG8gYSBjb3B5IG9mIGEgY2FjaGVkIENvQVAgcmVzcG9uc2UgbWF0Y2hpbmcgZ2l2ZW4gYXJndW1lbnRzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIE1hdGNoaW5nIHJlc3BvbnNlIGZvdW5kIGFuZCBzdWNjZXNzZnVsbHkgY3JlYXRlZCBhIGNvcHkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgIE1hdGNoaW5nIHJlc3BvbnNlIGZvdW5kIGJ1dCB0aGVyZSBpcyBub3Qgc3VmZmljaWVudCBidWZmZXIgdG8gY3JlYXRlIGEgY29weS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgTWF0Y2hpbmcgcmVzcG9uc2Ugbm90IGZvdW5kLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfUEFSU0UgICAgICBDb3VsZCBub3QgcGFyc2UgQ29BUCBoZWFkZXIgaW4gdGhlIHJlcXVlc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0TWF0Y2hlZFJlc3BvbnNlQ29weShjb25zdCBNZXNzYWdlICZhUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICoqYVJlc3BvbnNlKTsKKworICAgIC8qKgorICAgICAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgY2FjaGVkIENvQVAgcmVzcG9uc2VzIHF1ZXVlLgorICAgICAqCisgICAgICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIHRoZSBjYWNoZWQgQ29BUCByZXNwb25zZXMgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBNZXNzYWdlUXVldWUgJkdldFJlc3BvbnNlcyh2b2lkKSBjb25zdCB7IHJldHVybiBtUXVldWU7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4Q2FjaGVkUmVzcG9uc2VzID0gT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9TRVJWRVJfTUFYX0NBQ0hFRF9SRVNQT05TRVMsCisgICAgfTsKKworICAgIHZvaWQgRGVxdWV1ZVJlc3BvbnNlKE1lc3NhZ2UgJmFNZXNzYWdlKSB7IG1RdWV1ZS5EZXF1ZXVlKGFNZXNzYWdlKTsgYU1lc3NhZ2UuRnJlZSgpOyB9CisgICAgc3RhdGljIFJlc3BvbnNlc1F1ZXVlICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVUaW1lcih2b2lkKTsKKworICAgIE1lc3NhZ2VRdWV1ZSBtUXVldWU7CisgICAgVGltZXIgICAgICAgIG1UaW1lcjsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBDb0FQIGNsaWVudCBhbmQgc2VydmVyLgorICoKKyAqLworY2xhc3MgQ29hcDogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworICAgIGZyaWVuZCBjbGFzcyBSZXNwb25zZXNRdWV1ZTsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgYmVmb3JlIENvQVAgc2VydmVyIHByb2Nlc3NpbmcgYSBDb0FQIHBhY2tldHMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYU1lc3NhZ2UgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICBAIEBwYXJhbVtpbl0gICBhTWVzc2FnZUluZm8gICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgIGFDb250ZXh0ICAgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgIFNlcnZlciBzaG91bGQgY29udGludWUgcHJvY2Vzc2luZyB0aGlzIG1lc3NhZ2UsIG90aGVyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzIGluZGljYXRlcyB0aGUgc2VydmVyIHNob3VsZCBzdG9wIHByb2Nlc3NpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT1RfVE1GICAgIFRoZSBtZXNzYWdlIGlzIG5vdCBhIFRNRiBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiBvdEVycm9yKCogSW50ZXJjZXB0b3IpKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgICBBIHJlZmVyZW5jZSB0byB0aGUgTmV0aWYgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQ29hcChUaHJlYWROZXRpZiAmYU5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgQ29BUCBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvcnQgIFRoZSBsb2NhbCBVRFAgcG9ydCB0byBiaW5kIHRvLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgQ29BUCBzZXJ2aWNlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdGFydCh1aW50MTZfdCBhUG9ydCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyB0aGUgQ29BUCBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgQ29BUCBzZXJ2aWNlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvcnQgbnVtYmVyIHVzZWQgYnkgQ29BUCBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb3J0IG51bWJlci4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFBvcnQodm9pZCkgeyByZXR1cm4gbVNvY2tldC5HZXRTb2NrTmFtZSgpLm1Qb3J0OyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhIHJlc291cmNlIHRvIHRoZSBDb0FQIHNlcnZlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXNvdXJjZSAgQSByZWZlcmVuY2UgdG8gdGhlIHJlc291cmNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgQHAgYVJlc291cmNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIEBwIGFSZXNvdXJjZSB3YXMgYWxyZWFkeSBhZGRlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWRkUmVzb3VyY2UoUmVzb3VyY2UgJmFSZXNvdXJjZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgcmVzb3VyY2UgZnJvbSB0aGUgQ29BUCBzZXJ2ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmVzb3VyY2UgIEEgcmVmZXJlbmNlIHRvIHRoZSByZXNvdXJjZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVtb3ZlUmVzb3VyY2UoUmVzb3VyY2UgJmFSZXNvdXJjZSk7CisKKyAgICAvKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRlZmF1bHQgaGFuZGxlciBmb3IgdW5oYW5kbGVkIENvQVAgcmVxdWVzdHMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgIEEgZnVuY3Rpb24gcG9pbnRlciB0aGF0IHNoYWxsIGJlIGNhbGxlZCB3aGVuIGFuIHVuaGFuZGxlZCByZXF1ZXN0IGFycml2ZXMuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uIE1heSBiZSBOVUxMIGlmIG5vdCB1c2VkLgorICAgICAqLworICAgIHZvaWQgU2V0RGVmYXVsdEhhbmRsZXIob3RDb2FwUmVxdWVzdEhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgbWVzc2FnZSB3aXRoIGEgQ29BUCBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSGVhZGVyICAgICAgQSByZWZlcmVuY2UgdG8gYSBDb0FQIGhlYWRlciB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFQcm9yaXR5ICAgICBUaGUgbWVzc2FnZSBwcmlvcml0eSBsZXZlbC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBvciBOVUxMIGlmIGZhaWxlZCB0byBhbGxvY2F0ZSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqTmV3TWVzc2FnZShjb25zdCBIZWFkZXIgJmFIZWFkZXIsIHVpbnQ4X3QgYVByaW9yaXR5ID0ga0RlZmF1bHRDb2FwTWVzc2FnZVByaW9yaXR5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgQ29BUCBtZXNzYWdlLgorICAgICAqCisgICAgICogSWYgYSByZXNwb25zZSBmb3IgYSByZXF1ZXN0IGlzIGV4cGVjdGVkLCByZXNwZWN0aXZlIGZ1bmN0aW9uIGFuZCBjb250ZXh0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4KKyAgICAgKiBJZiBubyByZXNwb25zZSBpcyBleHBlY3RlZCwgdGhlc2UgYXJndW1lbnRzIHNob3VsZCBiZSBOVUxMIHBvaW50ZXJzLgorICAgICAqIElmIE1lc3NhZ2UgSWQgd2FzIG5vdCBzZXQgaW4gdGhlIGhlYWRlciAoZXF1YWwgdG8gMCksIHRoaXMgZnVuY3Rpb24gd2lsbCBhc3NpZ24gdW5pcXVlIE1lc3NhZ2UgSWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIHRvIHNlbmQuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSBpbmZvIGFzc29jaWF0ZWQgd2l0aCBAcCBhTWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgICAgIEEgZnVuY3Rpb24gcG9pbnRlciB0aGF0IHNoYWxsIGJlIGNhbGxlZCBvbiByZXNwb25zZSByZWNlcHRpb24gb3IgdGltZS1vdXQuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzZW50IENvQVAgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEZhaWxlZCB0byBhbGxvY2F0ZSByZXRyYW5zbWlzc2lvbiBkYXRhLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgb3RDb2FwUmVzcG9uc2VIYW5kbGVyIGFIYW5kbGVyID0gTlVMTCwgdm9pZCAqYUNvbnRleHQgPSBOVUxMKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgQ29BUCByZXNldCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlcXVlc3RIZWFkZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBDb0FQIEhlYWRlciB0aGF0IHdhcyB1c2VkIGluIENvQVAgcmVxdWVzdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gICAgVGhlIG1lc3NhZ2UgaW5mbyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb0FQIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBDb0FQIHJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBzZW5kIHRoZSBDb0FQIHJlc3BvbnNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgQHAgYVJlcXVlc3RIZWFkZXIgaGVhZGVyIGlzIG5vdCBvZiBjb25maXJtYWJsZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kUmVzZXQoSGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKSB7CisgICAgICAgIHJldHVybiBTZW5kRW1wdHlNZXNzYWdlKE9UX0NPQVBfVFlQRV9SRVNFVCwgYVJlcXVlc3RIZWFkZXIsIGFNZXNzYWdlSW5mbyk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGhlYWRlci1vbmx5IENvQVAgcmVzcG9uc2UgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb2RlICAgICAgICAgICBUaGUgQ29BUCBjb2RlIG9mIHRoaXMgcmVzcG9uc2UuCisgICAgICogQHBhcmFtW2luXSAgYVJlcXVlc3RIZWFkZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBDb0FQIEhlYWRlciB0aGF0IHdhcyB1c2VkIGluIENvQVAgcmVxdWVzdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gICAgVGhlIG1lc3NhZ2UgaW5mbyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb0FQIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBDb0FQIHJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBzZW5kIHRoZSBDb0FQIHJlc3BvbnNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgQHAgYVJlcXVlc3RIZWFkZXIgaGVhZGVyIGlzIG5vdCBvZiBjb25maXJtYWJsZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kSGVhZGVyUmVzcG9uc2UoSGVhZGVyOjpDb2RlIGFDb2RlLCBjb25zdCBIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBDb0FQIEFDSyBlbXB0eSBtZXNzYWdlIHdoaWNoIGlzIHVzZWQgaW4gU2VwYXJhdGUgUmVzcG9uc2UgZm9yIGNvbmZpcm1hYmxlIHJlcXVlc3RzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlcXVlc3RIZWFkZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBDb0FQIEhlYWRlciB0aGF0IHdhcyB1c2VkIGluIENvQVAgcmVxdWVzdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gICAgVGhlIG1lc3NhZ2UgaW5mbyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb0FQIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBDb0FQIHJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBzZW5kIHRoZSBDb0FQIHJlc3BvbnNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgQHAgYVJlcXVlc3RIZWFkZXIgaGVhZGVyIGlzIG5vdCBvZiBjb25maXJtYWJsZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kQWNrKEhlYWRlciAmYVJlcXVlc3RIZWFkZXIsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykgeworICAgICAgICByZXR1cm4gU2VuZEVtcHR5TWVzc2FnZShPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQsIGFSZXF1ZXN0SGVhZGVyLCBhTWVzc2FnZUluZm8pOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIENvQVAgQUNLIG1lc3NhZ2Ugb24gd2hpY2ggYSBkdW1teSBDb0FQIHJlc3BvbnNlIGlzIHBpZ2d5YmFja2VkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlcXVlc3RIZWFkZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBDb0FQIEhlYWRlciB0aGF0IHdhcyB1c2VkIGluIENvQVAgcmVxdWVzdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gICAgVGhlIG1lc3NhZ2UgaW5mbyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb0FQIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBDb0FQIHJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBzZW5kIHRoZSBDb0FQIHJlc3BvbnNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgQHAgYVJlcXVlc3RIZWFkZXIgaGVhZGVyIGlzIG5vdCBvZiBjb25maXJtYWJsZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kRW1wdHlBY2soY29uc3QgSGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKSB7CisgICAgICAgIHJldHVybiAoYVJlcXVlc3RIZWFkZXIuR2V0VHlwZSgpID09IE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSA/CisgICAgICAgICAgICAgICAgU2VuZEhlYWRlclJlc3BvbnNlKE9UX0NPQVBfQ09ERV9DSEFOR0VELCBhUmVxdWVzdEhlYWRlciwgYU1lc3NhZ2VJbmZvKSA6CisgICAgICAgICAgICAgICAgT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIGhlYWRlci1vbmx5IENvQVAgbWVzc2FnZSB0byBpbmRpY2F0ZSBubyByZXNvdXJjZSBtYXRjaGVkIGZvciB0aGUgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXF1ZXN0SGVhZGVyICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgQ29BUCBIZWFkZXIgdGhhdCB3YXMgdXNlZCBpbiBDb0FQIHJlcXVlc3QuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICAgICAgICAgIFRoZSBtZXNzYWdlIGluZm8gY29ycmVzcG9uZGluZyB0byB0aGUgQ29BUCByZXF1ZXN0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBDb0FQIHJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIHNlbmQgdGhlIENvQVAgcmVzcG9uc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmROb3RGb3VuZChjb25zdCBIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pIHsKKyAgICAgICAgcmV0dXJuIFNlbmRIZWFkZXJSZXNwb25zZShPVF9DT0FQX0NPREVfTk9UX0ZPVU5ELCBhUmVxdWVzdEhlYWRlciwgYU1lc3NhZ2VJbmZvKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhYm9ydHMgQ29BUCB0cmFuc2FjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGdpdmVuIGhhbmRsZXIgYW5kIGNvbnRleHQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgQSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBlbmRzLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGFib3J0ZWQgQ29BUCB0cmFuc2FjdGlvbnMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvQVAgdHJhbnNhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGdpdmVuIGhhbmRsZXIgd2FzIG5vdCBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWJvcnRUcmFuc2FjdGlvbihvdENvYXBSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgaW50ZXJjZXB0b3IgdG8gYmUgY2FsbGVkIGJlZm9yZSBwcm9jZXNzaW5nIGEgQ29BUCBwYWNrZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYUludGVyY2VwdG9yICAgIEEgcG9pbnRlciB0byB0aGUgaW50ZXJjZXB0b3IuCisgICAgICogQHBhcmFtW2luXSAgIGFDb250ZXh0ICAgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEludGVyY2VwdG9yKEludGVyY2VwdG9yIGFJbnRlcmNlcHRvciwgdm9pZCAqYUNvbnRleHQpIHsKKyAgICAgICAgbUludGVyY2VwdG9yID0gYUludGVyY2VwdG9yOworICAgICAgICBtQ29udGV4dCA9IGFDb250ZXh0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHJlcXVlc3QgbWVzc2FnZSBsaXN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIHJlcXVlc3QgbWVzc2FnZSBsaXN0LgorICAgICAqCisgICAgICovCisgICAgY29uc3QgTWVzc2FnZVF1ZXVlICZHZXRSZXF1ZXN0TWVzc2FnZXModm9pZCkgY29uc3QgeyByZXR1cm4gbVBlbmRpbmdSZXF1ZXN0czsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY2FjaGVkIHJlc3BvbnNlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgY2FjaGVkIHJlc3BvbnNlIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBNZXNzYWdlUXVldWUgJkdldENhY2hlZFJlc3BvbnNlcyh2b2lkKSBjb25zdCB7IHJldHVybiBtUmVzcG9uc2VzUXVldWUuR2V0UmVzcG9uc2VzKCk7IH0KKworcHJvdGVjdGVkOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmQgYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSB0byBzZW5kLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIG90RXJyb3IgU2VuZChNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlY2VpdmVzIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIHJlY2VpdmVkIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSBpbmZvIGFzc29jaWF0ZWQgd2l0aCBAcCBhTWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHZpcnR1YWwgdm9pZCBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgSXA2OjpVZHBTb2NrZXQgbVNvY2tldDsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrRGVmYXVsdENvYXBNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlOjprUHJpb3JpdHlMb3csCisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisKKyAgICBNZXNzYWdlICpDb3B5QW5kRW5xdWV1ZU1lc3NhZ2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFDb3B5TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb2FwTWV0YWRhdGEgJmFDb2FwTWV0YWRhdGEpOworICAgIHZvaWQgRGVxdWV1ZU1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIE1lc3NhZ2UgKkZpbmRSZWxhdGVkUmVxdWVzdChjb25zdCBIZWFkZXIgJmFSZXNwb25zZUhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBDb2FwTWV0YWRhdGEgJmFDb2FwTWV0YWRhdGEpOworICAgIHZvaWQgRmluYWxpemVDb2FwVHJhbnNhY3Rpb24oTWVzc2FnZSAmYVJlcXVlc3QsIGNvbnN0IENvYXBNZXRhZGF0YSAmYUNvYXBNZXRhZGF0YSwgSGVhZGVyICphUmVzcG9uc2VIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICphUmVzcG9uc2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKworICAgIHZvaWQgUHJvY2Vzc1JlY2VpdmVkUmVxdWVzdChIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIHZvaWQgUHJvY2Vzc1JlY2VpdmVkUmVzcG9uc2UoSGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIG90RXJyb3IgU2VuZENvcHkoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBTZW5kRW1wdHlNZXNzYWdlKEhlYWRlcjo6VHlwZSBhVHlwZSwgY29uc3QgSGVhZGVyICZhUmVxdWVzdEhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlUmV0cmFuc21pc3Npb25UaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyBDb2FwICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICBNZXNzYWdlUXVldWUgbVBlbmRpbmdSZXF1ZXN0czsKKyAgICB1aW50MTZfdCBtTWVzc2FnZUlkOworICAgIFRpbWVyIG1SZXRyYW5zbWlzc2lvblRpbWVyOworCisgICAgUmVzb3VyY2UgKm1SZXNvdXJjZXM7CisKKyAgICB2b2lkICAgICAgICAgICAqbUNvbnRleHQ7CisgICAgSW50ZXJjZXB0b3IgICAgbUludGVyY2VwdG9yOworICAgIFJlc3BvbnNlc1F1ZXVlIG1SZXNwb25zZXNRdWV1ZTsKKworICAgIG90Q29hcFJlcXVlc3RIYW5kbGVyIG1EZWZhdWx0SGFuZGxlcjsKKyAgICB2b2lkICptRGVmYXVsdEhhbmRsZXJDb250ZXh0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIENvYXAKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIENPQVBfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29hcC9jb2FwX2hlYWRlci5jcHAgYi9zcmMvY29yZS9jb2FwL2NvYXBfaGVhZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRkMmNmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29hcC9jb2FwX2hlYWRlci5jcHAKQEAgLTAsMCArMSw0NDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIENvQVAgaGVhZGVyIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjb2FwX2hlYWRlci5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENvYXAgeworCit2b2lkIEhlYWRlcjo6SW5pdCh2b2lkKQoreworICAgIG1IZWFkZXJMZW5ndGggPSBrTWluSGVhZGVyTGVuZ3RoOworICAgIG1PcHRpb25MYXN0ID0gMDsKKyAgICBtRmlyc3RPcHRpb25PZmZzZXQgPSAwOworICAgIG1OZXh0T3B0aW9uT2Zmc2V0ID0gMDsKKyAgICBtZW1zZXQoJm1PcHRpb24sIDAsIHNpemVvZihtT3B0aW9uKSk7CisgICAgbWVtc2V0KCZtSGVhZGVyLCAwLCBzaXplb2YobUhlYWRlcikpOworICAgIFNldFZlcnNpb24oa1ZlcnNpb24xKTsKK30KKwordm9pZCBIZWFkZXI6OkluaXQoVHlwZSBhVHlwZSwgQ29kZSBhQ29kZSkKK3sKKyAgICBJbml0KCk7CisgICAgU2V0VHlwZShhVHlwZSk7CisgICAgU2V0Q29kZShhQ29kZSk7Cit9CisKK290RXJyb3IgSGVhZGVyOjpGcm9tTWVzc2FnZShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU1ldGFkYXRhU2l6ZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfUEFSU0U7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDE2X3QgbGVuZ3RoID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKyAgICB1aW50OF90IHRva2VuTGVuZ3RoOworICAgIGJvb2wgZmlyc3RPcHRpb24gPSB0cnVlOworICAgIHVpbnQxNl90IG9wdGlvbkRlbHRhOworICAgIHVpbnQxNl90IG9wdGlvbkxlbmd0aDsKKworICAgIGxlbmd0aCAtPSBhTWV0YWRhdGFTaXplOworCisgICAgSW5pdCgpOworCisgICAgVmVyaWZ5T3JFeGl0KGxlbmd0aCA+PSBrVG9rZW5PZmZzZXQsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBrVG9rZW5PZmZzZXQsIG1IZWFkZXIubUJ5dGVzKTsKKyAgICBtSGVhZGVyTGVuZ3RoID0ga1Rva2VuT2Zmc2V0OworICAgIG9mZnNldCArPSBrVG9rZW5PZmZzZXQ7CisgICAgbGVuZ3RoIC09IGtUb2tlbk9mZnNldDsKKworICAgIFZlcmlmeU9yRXhpdChHZXRWZXJzaW9uKCkgPT0gMSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICB0b2tlbkxlbmd0aCA9IEdldFRva2VuTGVuZ3RoKCk7CisgICAgVmVyaWZ5T3JFeGl0KHRva2VuTGVuZ3RoIDw9IGtNYXhUb2tlbkxlbmd0aCAmJiB0b2tlbkxlbmd0aCA8PSBsZW5ndGgsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCB0b2tlbkxlbmd0aCwgbUhlYWRlci5tQnl0ZXMgKyBtSGVhZGVyTGVuZ3RoKTsKKyAgICBtSGVhZGVyTGVuZ3RoICs9IHRva2VuTGVuZ3RoOworICAgIG9mZnNldCArPSB0b2tlbkxlbmd0aDsKKyAgICBsZW5ndGggLT0gdG9rZW5MZW5ndGg7CisKKyAgICB3aGlsZSAobGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBrTWF4T3B0aW9uSGVhZGVyU2l6ZSwgbUhlYWRlci5tQnl0ZXMgKyBtSGVhZGVyTGVuZ3RoKTsKKworICAgICAgICBpZiAobUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aF0gPT0gMHhmZikKKyAgICAgICAgeworICAgICAgICAgICAgbUhlYWRlckxlbmd0aCArPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBsZW5ndGggLT0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgLy8gUkZDNzI1MjogVGhlIHByZXNlbmNlIG9mIGEgbWFya2VyIGZvbGxvd2VkIGJ5IGEgemVyby1sZW5ndGggcGF5bG9hZCBNVVNUIGJlIHByb2Nlc3NlZAorICAgICAgICAgICAgLy8gYXMgYSBtZXNzYWdlIGZvcm1hdCBlcnJvci4KKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChsZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaXJzdE9wdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgbUZpcnN0T3B0aW9uT2Zmc2V0ID0gbUhlYWRlckxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIG9wdGlvbkRlbHRhID0gbUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aF0gPj4gNDsKKyAgICAgICAgb3B0aW9uTGVuZ3RoID0gbUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aF0gJiAweGY7CisgICAgICAgIG1IZWFkZXJMZW5ndGggKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICBsZW5ndGggLT0gc2l6ZW9mKHVpbnQ4X3QpOworCisgICAgICAgIGlmIChvcHRpb25EZWx0YSA8IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZG8gbm90aGluZworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG9wdGlvbkRlbHRhID09IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgb3B0aW9uRGVsdGEgPSBrT3B0aW9uMUJ5dGVFeHRlbnNpb25PZmZzZXQgKyBtSGVhZGVyLm1CeXRlc1ttSGVhZGVyTGVuZ3RoXTsKKyAgICAgICAgICAgIG1IZWFkZXJMZW5ndGggKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIGxlbmd0aCAtPSBzaXplb2YodWludDhfdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAob3B0aW9uRGVsdGEgPT0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvcHRpb25EZWx0YSA9IGtPcHRpb24yQnl0ZUV4dGVuc2lvbk9mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQxNl90PigobUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aF0gPDwgOCkgfCBtSGVhZGVyLm1CeXRlc1ttSGVhZGVyTGVuZ3RoICsgMV0pOworICAgICAgICAgICAgbUhlYWRlckxlbmd0aCArPSBzaXplb2YodWludDE2X3QpOworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih1aW50MTZfdCk7CisgICAgICAgICAgICBsZW5ndGggLT0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3B0aW9uTGVuZ3RoIDwga09wdGlvbjFCeXRlRXh0ZW5zaW9uKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkbyBub3RoaW5nCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAob3B0aW9uTGVuZ3RoID09IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgb3B0aW9uTGVuZ3RoID0ga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0ICsgbUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aF07CisgICAgICAgICAgICBtSGVhZGVyTGVuZ3RoICs9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBsZW5ndGggLT0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG9wdGlvbkxlbmd0aCA9PSBrT3B0aW9uMkJ5dGVFeHRlbnNpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdGlvbkxlbmd0aCA9IGtPcHRpb24yQnl0ZUV4dGVuc2lvbk9mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKG1IZWFkZXIubUJ5dGVzW21IZWFkZXJMZW5ndGhdIDw8IDgpIHwgbUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aCArIDFdKTsKKyAgICAgICAgICAgIG1IZWFkZXJMZW5ndGggKz0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YodWludDE2X3QpOworICAgICAgICAgICAgbGVuZ3RoIC09IHNpemVvZih1aW50MTZfdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpcnN0T3B0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBtT3B0aW9uLm1OdW1iZXIgPSBvcHRpb25EZWx0YTsKKyAgICAgICAgICAgIG1PcHRpb24ubUxlbmd0aCA9IG9wdGlvbkxlbmd0aDsKKyAgICAgICAgICAgIG1PcHRpb24ubVZhbHVlID0gbUhlYWRlci5tQnl0ZXMgKyBtSGVhZGVyTGVuZ3RoOworICAgICAgICAgICAgbU5leHRPcHRpb25PZmZzZXQgPSBtSGVhZGVyTGVuZ3RoICsgb3B0aW9uTGVuZ3RoOworICAgICAgICAgICAgZmlyc3RPcHRpb24gPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeU9yRXhpdChvcHRpb25MZW5ndGggPD0gbGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIG9wdGlvbkxlbmd0aCwgbUhlYWRlci5tQnl0ZXMgKyBtSGVhZGVyTGVuZ3RoKTsKKyAgICAgICAgbUhlYWRlckxlbmd0aCArPSBzdGF0aWNfY2FzdDx1aW50OF90PihvcHRpb25MZW5ndGgpOworICAgICAgICBvZmZzZXQgKz0gb3B0aW9uTGVuZ3RoOworICAgICAgICBsZW5ndGggLT0gb3B0aW9uTGVuZ3RoOworICAgIH0KKworICAgIGlmIChsZW5ndGggPT0gMCkKKyAgICB7CisgICAgICAgIC8vIE5vIHBheWxvYWQgcHJlc2VudCAtIHJldHVybiBzdWNjZXNzLgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorCitleGl0OgorCisgICAgLy8gSW4gY2FzZSBhbnkgc3RlcCBmYWlsZWQsIHByZXZlbnQgYWNjZXNzIHRvIGNvcnJ1cHQgT3B0aW9uCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtRmlyc3RPcHRpb25PZmZzZXQgPSAwOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBIZWFkZXI6OkFwcGVuZE9wdGlvbihjb25zdCBPcHRpb24gJmFPcHRpb24pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCAqYnVmID0gbUhlYWRlci5tQnl0ZXMgKyBtSGVhZGVyTGVuZ3RoOworICAgIHVpbnQ4X3QgKmN1ciA9IGJ1ZiArIDE7CisgICAgdWludDE2X3Qgb3B0aW9uRGVsdGEgPSBhT3B0aW9uLm1OdW1iZXIgLSBtT3B0aW9uTGFzdDsKKyAgICB1aW50MTZfdCBvcHRpb25MZW5ndGg7CisKKyAgICAvLyBBc3N1cmUgdGhhdCBubyBvcHRpb24gaXMgaW5zZXJ0ZWQgb3V0IG9mIG9yZGVyLgorICAgIFZlcmlmeU9yRXhpdChhT3B0aW9uLm1OdW1iZXIgPj0gbU9wdGlvbkxhc3QsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgb3B0aW9uIHNpemUgYW5kIGNoZWNrIHRoZSBidWZmZXJzLgorICAgIG9wdGlvbkxlbmd0aCA9IDEgKyBhT3B0aW9uLm1MZW5ndGg7CisgICAgb3B0aW9uTGVuZ3RoICs9IG9wdGlvbkRlbHRhIDwga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0ID8gMCA6CisgICAgICAgICAgICAgICAgICAgIChvcHRpb25EZWx0YSA8IGtPcHRpb24yQnl0ZUV4dGVuc2lvbk9mZnNldCA/IDEgOiAyKTsKKyAgICBvcHRpb25MZW5ndGggKz0gYU9wdGlvbi5tTGVuZ3RoIDwga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0ID8gMCA6CisgICAgICAgICAgICAgICAgICAgIChhT3B0aW9uLm1MZW5ndGggPCBrT3B0aW9uMkJ5dGVFeHRlbnNpb25PZmZzZXQgPyAxIDogMik7CisgICAgVmVyaWZ5T3JFeGl0KG1IZWFkZXJMZW5ndGggKyBvcHRpb25MZW5ndGggPCBrTWF4SGVhZGVyTGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgLy8gSW5zZXJ0IG9wdGlvbiBkZWx0YS4KKyAgICBpZiAob3B0aW9uRGVsdGEgPCBrT3B0aW9uMUJ5dGVFeHRlbnNpb25PZmZzZXQpCisgICAgeworICAgICAgICAqYnVmID0gKG9wdGlvbkRlbHRhIDw8IE9wdGlvbjo6a09wdGlvbkRlbHRhT2Zmc2V0KSAmIE9wdGlvbjo6a09wdGlvbkRlbHRhTWFzazsKKyAgICB9CisgICAgZWxzZSBpZiAob3B0aW9uRGVsdGEgPCBrT3B0aW9uMkJ5dGVFeHRlbnNpb25PZmZzZXQpCisgICAgeworICAgICAgICAqYnVmIHw9IGtPcHRpb24xQnl0ZUV4dGVuc2lvbiA8PCBPcHRpb246OmtPcHRpb25EZWx0YU9mZnNldDsKKyAgICAgICAgKmN1cisrID0gKG9wdGlvbkRlbHRhIC0ga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0KSAmIDB4ZmY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpidWYgfD0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uIDw8IE9wdGlvbjo6a09wdGlvbkRlbHRhT2Zmc2V0OworICAgICAgICBvcHRpb25EZWx0YSAtPSBrT3B0aW9uMkJ5dGVFeHRlbnNpb25PZmZzZXQ7CisgICAgICAgICpjdXIrKyA9IG9wdGlvbkRlbHRhID4+IDg7CisgICAgICAgICpjdXIrKyA9IG9wdGlvbkRlbHRhICYgMHhmZjsKKyAgICB9CisKKyAgICAvLyBJbnNlcnQgb3B0aW9uIGxlbmd0aC4KKyAgICBpZiAoYU9wdGlvbi5tTGVuZ3RoIDwga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0KQorICAgIHsKKyAgICAgICAgKmJ1ZiB8PSBhT3B0aW9uLm1MZW5ndGg7CisgICAgfQorICAgIGVsc2UgaWYgKGFPcHRpb24ubUxlbmd0aCA8IGtPcHRpb24yQnl0ZUV4dGVuc2lvbk9mZnNldCkKKyAgICB7CisgICAgICAgICpidWYgfD0ga09wdGlvbjFCeXRlRXh0ZW5zaW9uOworICAgICAgICAqY3VyKysgPSAoYU9wdGlvbi5tTGVuZ3RoIC0ga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0KSAmIDB4ZmY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpidWYgfD0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uOworICAgICAgICBvcHRpb25MZW5ndGggPSBhT3B0aW9uLm1MZW5ndGggLSBrT3B0aW9uMkJ5dGVFeHRlbnNpb25PZmZzZXQ7CisgICAgICAgICpjdXIrKyA9IG9wdGlvbkxlbmd0aCA+PiA4OworICAgICAgICAqY3VyKysgPSBvcHRpb25MZW5ndGggJiAweGZmOworICAgIH0KKworICAgIC8vIEluc2VydCBvcHRpb24gdmFsdWUuCisgICAgbWVtY3B5KGN1ciwgYU9wdGlvbi5tVmFsdWUsIGFPcHRpb24ubUxlbmd0aCk7CisgICAgY3VyICs9IGFPcHRpb24ubUxlbmd0aDsKKworICAgIG1IZWFkZXJMZW5ndGggKz0gc3RhdGljX2Nhc3Q8dWludDhfdD4oY3VyIC0gYnVmKTsKKyAgICBtT3B0aW9uTGFzdCA9IGFPcHRpb24ubU51bWJlcjsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSGVhZGVyOjpBcHBlbmRVaW50T3B0aW9uKHVpbnQxNl90IGFOdW1iZXIsIHVpbnQzMl90IGFWYWx1ZSkKK3sKKyAgICBPcHRpb24gY29hcE9wdGlvbjsKKworICAgIGFWYWx1ZSA9IEVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzIoYVZhbHVlKTsKKyAgICBjb2FwT3B0aW9uLm1OdW1iZXIgPSBhTnVtYmVyOworICAgIGNvYXBPcHRpb24ubUxlbmd0aCA9IDQ7CisgICAgY29hcE9wdGlvbi5tVmFsdWUgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmFWYWx1ZSk7CisKKyAgICAvLyBza2lwIHByZWNlZGluZyB6ZXJvcworICAgIHdoaWxlIChjb2FwT3B0aW9uLm1WYWx1ZVswXSA9PSAwICYmIGNvYXBPcHRpb24ubUxlbmd0aCA+IDApCisgICAgeworICAgICAgICBjb2FwT3B0aW9uLm1WYWx1ZSsrOworICAgICAgICBjb2FwT3B0aW9uLm1MZW5ndGgtLTsKKyAgICB9CisKKyAgICByZXR1cm4gQXBwZW5kT3B0aW9uKGNvYXBPcHRpb24pOworfQorCitvdEVycm9yIEhlYWRlcjo6QXBwZW5kT2JzZXJ2ZU9wdGlvbih1aW50MzJfdCBhT2JzZXJ2ZSkKK3sKKyAgICByZXR1cm4gQXBwZW5kVWludE9wdGlvbihPVF9DT0FQX09QVElPTl9PQlNFUlZFLCBhT2JzZXJ2ZSAmIDB4RkZGRkZGKTsKK30KKworb3RFcnJvciBIZWFkZXI6OkFwcGVuZFVyaVBhdGhPcHRpb25zKGNvbnN0IGNoYXIgKmFVcmlQYXRoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGNvbnN0IGNoYXIgKmN1ciA9IGFVcmlQYXRoOworICAgIGNvbnN0IGNoYXIgKmVuZDsKKyAgICBIZWFkZXI6Ok9wdGlvbiBjb2FwT3B0aW9uOworCisgICAgY29hcE9wdGlvbi5tTnVtYmVyID0gT1RfQ09BUF9PUFRJT05fVVJJX1BBVEg7CisKKyAgICB3aGlsZSAoKGVuZCA9IHN0cmNocihjdXIsICcvJykpICE9IE5VTEwpCisgICAgeworICAgICAgICBjb2FwT3B0aW9uLm1MZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oZW5kIC0gY3VyKTsKKyAgICAgICAgY29hcE9wdGlvbi5tVmFsdWUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oY3VyKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE9wdGlvbihjb2FwT3B0aW9uKSk7CisgICAgICAgIGN1ciA9IGVuZCArIDE7CisgICAgfQorCisgICAgY29hcE9wdGlvbi5tTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHN0cmxlbihjdXIpKTsKKyAgICBjb2FwT3B0aW9uLm1WYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihjdXIpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRPcHRpb24oY29hcE9wdGlvbikpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBIZWFkZXI6OkFwcGVuZENvbnRlbnRGb3JtYXRPcHRpb24ob3RDb2FwT3B0aW9uQ29udGVudEZvcm1hdCBhQ29udGVudEZvcm1hdCkKK3sKKyAgICByZXR1cm4gQXBwZW5kVWludE9wdGlvbihPVF9DT0FQX09QVElPTl9DT05URU5UX0ZPUk1BVCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFDb250ZW50Rm9ybWF0KSk7Cit9CisKK290RXJyb3IgSGVhZGVyOjpBcHBlbmRNYXhBZ2VPcHRpb24odWludDMyX3QgYU1heEFnZSkKK3sKKyAgICByZXR1cm4gQXBwZW5kVWludE9wdGlvbihPVF9DT0FQX09QVElPTl9NQVhfQUdFLCBhTWF4QWdlKTsKK30KKworb3RFcnJvciBIZWFkZXI6OkFwcGVuZFVyaVF1ZXJ5T3B0aW9uKGNvbnN0IGNoYXIgKmFVcmlRdWVyeSkKK3sKKyAgICBPcHRpb24gY29hcE9wdGlvbjsKKworICAgIGNvYXBPcHRpb24ubU51bWJlciA9IE9UX0NPQVBfT1BUSU9OX1VSSV9RVUVSWTsKKyAgICBjb2FwT3B0aW9uLm1MZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oc3RybGVuKGFVcmlRdWVyeSkpOworICAgIGNvYXBPcHRpb24ubVZhbHVlICA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihhVXJpUXVlcnkpOworCisgICAgcmV0dXJuIEFwcGVuZE9wdGlvbihjb2FwT3B0aW9uKTsKK30KKworY29uc3QgSGVhZGVyOjpPcHRpb24gKkhlYWRlcjo6R2V0Rmlyc3RPcHRpb24odm9pZCkKK3sKKyAgICBjb25zdCBPcHRpb24gKnJ2YWwgPSBOVUxMOworCisgICAgVmVyaWZ5T3JFeGl0KG1GaXJzdE9wdGlvbk9mZnNldCA+IDApOworCisgICAgbWVtc2V0KCZtT3B0aW9uLCAwLCBzaXplb2YobU9wdGlvbikpOworICAgIG1OZXh0T3B0aW9uT2Zmc2V0ID0gbUZpcnN0T3B0aW9uT2Zmc2V0OworCisgICAgcnZhbCA9IEdldE5leHRPcHRpb24oKTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworY29uc3QgSGVhZGVyOjpPcHRpb24gKkhlYWRlcjo6R2V0TmV4dE9wdGlvbih2b2lkKQoreworICAgIE9wdGlvbiAqcnZhbCA9IE5VTEw7CisgICAgdWludDE2X3Qgb3B0aW9uRGVsdGE7CisgICAgdWludDE2X3Qgb3B0aW9uTGVuZ3RoOworCisgICAgVmVyaWZ5T3JFeGl0KG1OZXh0T3B0aW9uT2Zmc2V0IDwgbUhlYWRlckxlbmd0aCk7CisKKyAgICBvcHRpb25EZWx0YSA9IG1IZWFkZXIubUJ5dGVzW21OZXh0T3B0aW9uT2Zmc2V0XSA+PiA0OworICAgIG9wdGlvbkxlbmd0aCA9IG1IZWFkZXIubUJ5dGVzW21OZXh0T3B0aW9uT2Zmc2V0XSAmIDB4ZjsKKyAgICBtTmV4dE9wdGlvbk9mZnNldCArPSBzaXplb2YodWludDhfdCk7CisKKyAgICBpZiAob3B0aW9uRGVsdGEgPCBrT3B0aW9uMUJ5dGVFeHRlbnNpb24pCisgICAgeworICAgICAgICAvLyBkbyBub3RoaW5nCisgICAgfQorICAgIGVsc2UgaWYgKG9wdGlvbkRlbHRhID09IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICB7CisgICAgICAgIG9wdGlvbkRlbHRhID0ga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0ICsgbUhlYWRlci5tQnl0ZXNbbU5leHRPcHRpb25PZmZzZXRdOworICAgICAgICBtTmV4dE9wdGlvbk9mZnNldCArPSBzaXplb2YodWludDhfdCk7CisgICAgfQorICAgIGVsc2UgaWYgKG9wdGlvbkRlbHRhID09IGtPcHRpb24yQnl0ZUV4dGVuc2lvbikKKyAgICB7CisgICAgICAgIG9wdGlvbkRlbHRhID0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uT2Zmc2V0ICsKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKG1IZWFkZXIubUJ5dGVzW21OZXh0T3B0aW9uT2Zmc2V0XSA8PCA4KSB8IG1IZWFkZXIubUJ5dGVzW21OZXh0T3B0aW9uT2Zmc2V0ICsgMV0pOworICAgICAgICBtTmV4dE9wdGlvbk9mZnNldCArPSBzaXplb2YodWludDE2X3QpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgaWYgKG9wdGlvbkxlbmd0aCA8IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICB7CisgICAgICAgIC8vIGRvIG5vdGhpbmcKKyAgICB9CisgICAgZWxzZSBpZiAob3B0aW9uTGVuZ3RoID09IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICB7CisgICAgICAgIG9wdGlvbkxlbmd0aCA9IGtPcHRpb24xQnl0ZUV4dGVuc2lvbk9mZnNldCArIG1IZWFkZXIubUJ5dGVzW21OZXh0T3B0aW9uT2Zmc2V0XTsKKyAgICAgICAgbU5leHRPcHRpb25PZmZzZXQgKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgIH0KKyAgICBlbHNlIGlmIChvcHRpb25MZW5ndGggPT0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uKQorICAgIHsKKyAgICAgICAgb3B0aW9uTGVuZ3RoID0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uT2Zmc2V0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChtSGVhZGVyLm1CeXRlc1ttTmV4dE9wdGlvbk9mZnNldF0gPDwgOCkgfCBtSGVhZGVyLm1CeXRlc1ttTmV4dE9wdGlvbk9mZnNldCArIDFdKTsKKyAgICAgICAgbU5leHRPcHRpb25PZmZzZXQgKz0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIG1PcHRpb24ubU51bWJlciArPSBvcHRpb25EZWx0YTsKKyAgICBtT3B0aW9uLm1MZW5ndGggPSBvcHRpb25MZW5ndGg7CisgICAgbU9wdGlvbi5tVmFsdWUgPSBtSGVhZGVyLm1CeXRlcyArIG1OZXh0T3B0aW9uT2Zmc2V0OworICAgIG1OZXh0T3B0aW9uT2Zmc2V0ICs9IG9wdGlvbkxlbmd0aDsKKyAgICBydmFsID0gc3RhdGljX2Nhc3Q8SGVhZGVyOjpPcHRpb24gKj4oJm1PcHRpb24pOworCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitvdEVycm9yIEhlYWRlcjo6U2V0UGF5bG9hZE1hcmtlcih2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG1IZWFkZXJMZW5ndGggPCBrTWF4SGVhZGVyTGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIG1IZWFkZXIubUJ5dGVzW21IZWFkZXJMZW5ndGgrK10gPSAweGZmOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBIZWFkZXI6OlNldFRva2VuKHVpbnQ4X3QgYVRva2VuTGVuZ3RoKQoreworICAgIGFzc2VydChhVG9rZW5MZW5ndGggPD0ga01heFRva2VuTGVuZ3RoKTsKKworICAgIHVpbnQ4X3QgdG9rZW5ba01heFRva2VuTGVuZ3RoXSA9IHsgMCB9OworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYVRva2VuTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICB0b2tlbltpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKKyAgICB9CisKKyAgICBTZXRUb2tlbih0b2tlbiwgYVRva2VuTGVuZ3RoKTsKK30KKwordm9pZCBIZWFkZXI6OlNldERlZmF1bHRSZXNwb25zZUhlYWRlcihjb25zdCBIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyKQoreworICAgIEluaXQoT1RfQ09BUF9UWVBFX0FDS05PV0xFREdNRU5ULCBPVF9DT0FQX0NPREVfQ0hBTkdFRCk7CisgICAgU2V0TWVzc2FnZUlkKGFSZXF1ZXN0SGVhZGVyLkdldE1lc3NhZ2VJZCgpKTsKKyAgICBTZXRUb2tlbihhUmVxdWVzdEhlYWRlci5HZXRUb2tlbigpLCBhUmVxdWVzdEhlYWRlci5HZXRUb2tlbkxlbmd0aCgpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIENvYXAKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29hcC9jb2FwX2hlYWRlci5ocHAgYi9zcmMvY29yZS9jb2FwL2NvYXBfaGVhZGVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWFhNGUyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29hcC9jb2FwX2hlYWRlci5ocHAKQEAgLTAsMCArMSw0OTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBnZW5lcmF0aW5nIGFuZCBwcm9jZXNzaW5nIENvQVAgaGVhZGVycy4KKyAqLworCisjaWZuZGVmIENPQVBfSEVBREVSX0hQUF8KKyNkZWZpbmUgQ09BUF9IRUFERVJfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29hcC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBuYW1lc3BhY2Ugb3Q6OkNvYXAKKyAqIEBicmllZgorICogICBUaGlzIG5hbWVzcGFjZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgQ29BUC4KKyAqCisgKi8KK25hbWVzcGFjZSBDb2FwIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWNvYXAKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIENvQVAuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQ29BUCBoZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK2NsYXNzIEhlYWRlciA6IHB1YmxpYyBvdENvYXBIZWFkZXIKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVmVyc2lvbjEgICAgICAgICAgID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBWZXJzaW9uIDEKKyAgICAgICAga01pbkhlYWRlckxlbmd0aCAgICA9IDQsICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWluaW11bSBoZWFkZXIgbGVuZ3RoCisgICAgICAgIGtNYXhIZWFkZXJMZW5ndGggICAgPSBPVF9DT0FQX0hFQURFUl9NQVhfTEVOR1RILCAvLy88IE1heGltdW0gaGVhZGVyIGxlbmd0aAorICAgICAgICBrRGVmYXVsdFRva2VuTGVuZ3RoID0gMiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBEZWZhdWx0IHRva2VuIGxlbmd0aAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBDb0FQIFR5cGUgdmFsdWVzLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiBvdENvYXBUeXBlIFR5cGU7CisKKyAgICAvKioKKyAgICAgKiBDb0FQIENvZGUgdmFsdWVzLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiBvdENvYXBDb2RlIENvZGU7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgQ29BUCBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgQ29BUCBoZWFkZXIgd2l0aCBzcGVjaWZpYyBUeXBlIGFuZCBDb2RlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgIFRoZSBUeXBlIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb2RlICBUaGUgQ29kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdChUeXBlIGFUeXBlLCBDb2RlIGFDb2RlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHBhcnNlcyB0aGUgQ29BUCBoZWFkZXIgZnJvbSBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhTWV0YWRhdGFTaXplICBBIHNpemUgb2YgbWV0YWRhdGEgYXBwZW5kZWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICBTdWNjZXNzZnVsbHkgcGFyc2VkIHRoZSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfUEFSU0UgIEZhaWxlZCB0byBwYXJzZSB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRnJvbU1lc3NhZ2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFNZXRhZGF0YVNpemUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChtSGVhZGVyLm1GaWVsZHMubVZlcnNpb25UeXBlVG9rZW4gJiBrVmVyc2lvbk1hc2spID4+IGtWZXJzaW9uT2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlcnNpb24gIFRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRWZXJzaW9uKHVpbnQ4X3QgYVZlcnNpb24pIHsKKyAgICAgICAgbUhlYWRlci5tRmllbGRzLm1WZXJzaW9uVHlwZVRva2VuICY9IH5rVmVyc2lvbk1hc2s7CisgICAgICAgIG1IZWFkZXIubUZpZWxkcy5tVmVyc2lvblR5cGVUb2tlbiB8PSBhVmVyc2lvbiA8PCBrVmVyc2lvbk9mZnNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBUeXBlIEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhZGVyOjpUeXBlPihtSGVhZGVyLm1GaWVsZHMubVZlcnNpb25UeXBlVG9rZW4gJiBrVHlwZU1hc2spOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgIFRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUeXBlKFR5cGUgYVR5cGUpIHsKKyAgICAgICAgbUhlYWRlci5tRmllbGRzLm1WZXJzaW9uVHlwZVRva2VuICY9IH5rVHlwZU1hc2s7CisgICAgICAgIG1IZWFkZXIubUZpZWxkcy5tVmVyc2lvblR5cGVUb2tlbiB8PSBhVHlwZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDb2RlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENvZGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBDb2RlIEdldENvZGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZT4obUhlYWRlci5tRmllbGRzLm1Db2RlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ29kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb2RlICBUaGUgQ29kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q29kZShDb2RlIGFDb2RlKSB7IG1IZWFkZXIubUZpZWxkcy5tQ29kZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFDb2RlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTWVzc2FnZSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBNZXNzYWdlIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0TWVzc2FnZUlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUhlYWRlci5tRmllbGRzLm1NZXNzYWdlSWQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNZXNzYWdlIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJZCAgVGhlIE1lc3NhZ2UgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1lc3NhZ2VJZCh1aW50MTZfdCBhTWVzc2FnZUlkKSB7IG1IZWFkZXIubUZpZWxkcy5tTWVzc2FnZUlkID0gSG9zdFN3YXAxNihhTWVzc2FnZUlkKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVG9rZW4gbGVuZ3RoLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRva2VuIGxlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0VG9rZW5MZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gKG1IZWFkZXIubUZpZWxkcy5tVmVyc2lvblR5cGVUb2tlbiAmIGtUb2tlbkxlbmd0aE1hc2spID4+IGtUb2tlbkxlbmd0aE9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFRva2VuIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBUb2tlbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldFRva2VuKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1IZWFkZXIubUJ5dGVzICsga1Rva2VuT2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUb2tlbiB2YWx1ZSBhbmQgbGVuZ3RoLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRva2VuICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFRva2VuIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFUb2tlbkxlbmd0aCAgVGhlIExlbmd0aCBvZiBAcCBhVG9rZW4uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRva2VuKGNvbnN0IHVpbnQ4X3QgKmFUb2tlbiwgdWludDhfdCBhVG9rZW5MZW5ndGgpIHsKKyAgICAgICAgbUhlYWRlci5tRmllbGRzLm1WZXJzaW9uVHlwZVRva2VuID0gKG1IZWFkZXIubUZpZWxkcy5tVmVyc2lvblR5cGVUb2tlbiAmIH5rVG9rZW5MZW5ndGhNYXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYVRva2VuTGVuZ3RoIDw8IGtUb2tlbkxlbmd0aE9mZnNldCkgJiBrVG9rZW5MZW5ndGhNYXNrKTsKKyAgICAgICAgbWVtY3B5KG1IZWFkZXIubUJ5dGVzICsga1Rva2VuT2Zmc2V0LCBhVG9rZW4sIGFUb2tlbkxlbmd0aCk7CisgICAgICAgIG1IZWFkZXJMZW5ndGggKz0gYVRva2VuTGVuZ3RoOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFRva2VuIGxlbmd0aCBhbmQgcmFuZG9taXplcyBpdHMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVG9rZW5MZW5ndGggIFRoZSBMZW5ndGggb2YgYSBUb2tlbiB0byBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRva2VuKHVpbnQ4X3QgYVRva2VuTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqICBUaGlzIG1ldGhvZCBjaGVja3MgaWYgVG9rZW5zIGluIHR3byBDb0FQIGhlYWRlcnMgYXJlIGVxdWFsLgorICAgICAqCisgICAgICogIEBwYXJhbVtpbl0gIGFIZWFkZXIgIEEgaGVhZGVyIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0d28gVG9rZW5zIGFyZSBlcXVhbC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiBUb2tlbnMgZGlmZmVyIGluIGxlbmd0aCBvciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNUb2tlbkVxdWFsKGNvbnN0IEhlYWRlciAmYUhlYWRlcikgY29uc3QgeworICAgICAgICByZXR1cm4gKCh0aGlzLT5HZXRUb2tlbkxlbmd0aCgpID09IGFIZWFkZXIuR2V0VG9rZW5MZW5ndGgoKSkgJiYKKyAgICAgICAgICAgICAgICAobWVtY21wKHRoaXMtPkdldFRva2VuKCksIGFIZWFkZXIuR2V0VG9rZW4oKSwgdGhpcy0+R2V0VG9rZW5MZW5ndGgoKSkgPT0gMCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBDb0FQIG9wdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHN0cnVjdCBPcHRpb24gOiBwdWJsaWMgb3RDb2FwT3B0aW9uCisgICAgeworICAgICAgICAvKioKKyAgICAgICAgICogUHJvdG9jb2wgQ29uc3RhbnRzCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBlbnVtCisgICAgICAgIHsKKyAgICAgICAgICAgIGtPcHRpb25EZWx0YU9mZnNldCAgID0gNCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRGVsdGEgT2Zmc2V0CisgICAgICAgICAgICBrT3B0aW9uRGVsdGFNYXNrICAgICA9IDB4ZiA8PCBrT3B0aW9uRGVsdGFPZmZzZXQsICAvLy88IERlbHRhIE1hc2sKKyAgICAgICAgfTsKKworICAgICAgICAvKioKKyAgICAgICAgICogT3B0aW9uIE51bWJlcnMKKyAgICAgICAgICovCisgICAgICAgIHR5cGVkZWYgb3RDb2FwT3B0aW9uVHlwZSBUeXBlOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgQ29BUCBvcHRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhT3B0aW9uICBUaGUgQ29BUCBPcHRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBvcHRpb24gdHlwZSBpcyBub3QgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IG9wdGlvbiB0eXBlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kT3B0aW9uKGNvbnN0IE9wdGlvbiAmYU9wdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGFuIHVuc2lnbmVkIGludGVnZXIgQ29BUCBvcHRpb24gYXMgc3BlY2lmaWVkIGluCisgICAgICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyNTIjc2VjdGlvbi0zLjIKKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOdW1iZXIgIFRoZSBDb0FQIE9wdGlvbiBudW1iZXIuCisgICAgICogQHBhcmFtW2luXSAgYVZhbHVlICAgVGhlIENvQVAgT3B0aW9uIHVuc2lnbmVkIGludGVnZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBvcHRpb24gdHlwZSBpcyBub3QgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IG9wdGlvbiB0eXBlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVWludE9wdGlvbih1aW50MTZfdCBhTnVtYmVyLCB1aW50MzJfdCBhVmFsdWUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhbiBPYnNlcnZlIG9wdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFPYnNlcnZlICBPYnNlcnZlIGZpZWxkIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgb3B0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb3B0aW9uIHR5cGUgaXMgbm90IGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBvcHRpb24gdHlwZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIG9wdGlvbiBsZW5ndGggZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUuCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRPYnNlcnZlT3B0aW9uKHVpbnQzMl90IGFPYnNlcnZlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBVcmktUGF0aCBvcHRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVXJpUGF0aCAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIG9wdGlvbi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGxhc3Qgb3B0aW9uIHR5cGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIFRoZSBvcHRpb24gbGVuZ3RoIGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRVcmlQYXRoT3B0aW9ucyhjb25zdCBjaGFyICphVXJpUGF0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgQ29udGVudC1Gb3JtYXQgb3B0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRlbnRGb3JtYXQgIFRoZSBDb250ZW50IEZvcm1hdCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIG9wdGlvbi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGxhc3Qgb3B0aW9uIHR5cGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIFRoZSBvcHRpb24gbGVuZ3RoIGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRDb250ZW50Rm9ybWF0T3B0aW9uKG90Q29hcE9wdGlvbkNvbnRlbnRGb3JtYXQgYUNvbnRlbnRGb3JtYXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIE1heC1BZ2Ugb3B0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1heEFnZSAgVGhlIE1heC1BZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBvcHRpb24gdHlwZSBpcyBub3QgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IG9wdGlvbiB0eXBlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZE1heEFnZU9wdGlvbih1aW50MzJfdCBhTWF4QWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBzaW5nbGUgVXJpLVF1ZXJ5IG9wdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFVcmlRdWVyeSAgQSBwb2ludGVyIHRvIE5VTEwtdGVybWluYXRlZCBzdHJpbmcsIHdoaWNoIHNob3VsZCBjb250YWluIGEgc2luZ2xlIGtleT12YWx1ZSBwYWlyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgb3B0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb3B0aW9uIHR5cGUgaXMgbm90IGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBvcHRpb24gdHlwZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIG9wdGlvbiBsZW5ndGggZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUuCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRVcmlRdWVyeU9wdGlvbihjb25zdCBjaGFyICphVXJpUXVlcnkpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG9wdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb3B0aW9uLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgT3B0aW9uICpHZXRGaXJzdE9wdGlvbih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG9wdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV4dCBvcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBPcHRpb24gKkdldE5leHRPcHRpb24odm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIFBheWxvYWQgTWFya2VyIGluZGljYXRpbmcgYmVnaW5uaW5nIG9mIHRoZSBwYXlsb2FkIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgUGF5bG9hZCBNYXJrZXIgc3VjY2Vzc2Z1bGx5IGFkZGVkLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSGVhZGVyIFBheWxvYWQgTWFya2VyIGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRQYXlsb2FkTWFya2VyKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0Qnl0ZXModm9pZCkgY29uc3QgeyByZXR1cm4gbUhlYWRlci5tQnl0ZXM7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGhlYWRlciBsZW5ndGggaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgaGVhZGVyIGxlbmd0aCBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1IZWFkZXJMZW5ndGg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgYSBkZWZhdWx0IHJlc3BvbnNlIGhlYWRlciBiYXNlZCBvbiByZXF1ZXN0IGhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXF1ZXN0SGVhZGVyICBSZXF1ZXN0IGhlYWRlciB0byBiYXNlIG9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREZWZhdWx0UmVzcG9uc2VIZWFkZXIoY29uc3QgSGVhZGVyICZhUmVxdWVzdEhlYWRlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgYSBoZWFkZXIgaXMgYW4gZW1wdHkgbWVzc2FnZSBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBIZWFkZXIgaXMgYW4gZW1wdHkgbWVzc2FnZSBoZWFkZXIuCisgICAgICogQHJldHZhbCBGQUxTRSAgSGVhZGVyIGlzIG5vdCBhbiBlbXB0eSBtZXNzYWdlIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNFbXB0eSh2b2lkKSBjb25zdCB7IHJldHVybiAoR2V0Q29kZSgpID09IDApOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgaGVhZGVyIGlzIGEgcmVxdWVzdCBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBIZWFkZXIgaXMgYSByZXF1ZXN0IGhlYWRlci4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBIZWFkZXIgaXMgbm90IGEgcmVxdWVzdCBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUmVxdWVzdCh2b2lkKSBjb25zdCB7IHJldHVybiAoR2V0Q29kZSgpID49IE9UX0NPQVBfQ09ERV9HRVQgJiYgR2V0Q29kZSgpIDw9IE9UX0NPQVBfQ09ERV9ERUxFVEUpOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgaGVhZGVyIGlzIGEgcmVzcG9uc2UgaGVhZGVyLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSGVhZGVyIGlzIGEgcmVzcG9uc2UgaGVhZGVyLgorICAgICAqIEByZXR2YWwgRkFMU0UgIEhlYWRlciBpcyBub3QgYSByZXNwb25zZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUmVzcG9uc2Uodm9pZCkgY29uc3QgeyByZXR1cm4gKEdldENvZGUoKSA+PSBPVF9DT0FQX0NPREVfUkVTUE9OU0VfTUlOKTsgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGhlYWRlciBpcyBhIENPTiBtZXNzYWdlIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIEhlYWRlciBpcyBhIENPTiBtZXNzYWdlIGhlYWRlci4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBIZWFkZXIgaXMgbm90IGlzIGEgQ09OIG1lc3NhZ2UgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0NvbmZpcm1hYmxlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChHZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFKTsgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGhlYWRlciBpcyBhIE5PTiBtZXNzYWdlIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIEhlYWRlciBpcyBhIE5PTiBtZXNzYWdlIGhlYWRlci4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBIZWFkZXIgaXMgbm90IGlzIGEgTk9OIG1lc3NhZ2UgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc05vbkNvbmZpcm1hYmxlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChHZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX05PTl9DT05GSVJNQUJMRSk7IH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgYSBoZWFkZXIgaXMgYSBBQ0sgbWVzc2FnZSBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBIZWFkZXIgaXMgYSBBQ0sgbWVzc2FnZSBoZWFkZXIuCisgICAgICogQHJldHZhbCBGQUxTRSAgSGVhZGVyIGlzIG5vdCBpcyBhIEFDSyBtZXNzYWdlIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNBY2sodm9pZCkgY29uc3QgeyByZXR1cm4gKEdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQpOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgaGVhZGVyIGlzIGEgUlNUIG1lc3NhZ2UgaGVhZGVyLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSGVhZGVyIGlzIGEgUlNUIG1lc3NhZ2UgaGVhZGVyLgorICAgICAqIEByZXR2YWwgRkFMU0UgIEhlYWRlciBpcyBub3QgaXMgYSBSU1QgbWVzc2FnZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUmVzZXQodm9pZCkgY29uc3QgeyByZXR1cm4gKEdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfUkVTRVQpOyAgfTsKKworcHJpdmF0ZToKKyAgICAvKioKKyAgICAgKiBQcm90b2NvbCBDb25zdGFudHMgKFJGQyA3MjUyKS4KKyAgICAgKgorICAgICAqLworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtWZXJzaW9uTWFzayAgICAgICAgICAgICAgICA9IDB4YzAsICAvLy88IFZlcnNpb24gbWFzayBhcyBzcGVjaWZpZWQgKFJGQyA3MjUyKS4KKyAgICAgICAga1ZlcnNpb25PZmZzZXQgICAgICAgICAgICAgID0gNiwgICAgIC8vLzwgVmVyc2lvbiBvZmZzZXQgYXMgc3BlY2lmaWVkIChSRkMgNzI1MikuCisKKyAgICAgICAga1R5cGVNYXNrICAgICAgICAgICAgICAgICAgID0gMHgzMCwgIC8vLzwgVHlwZSBtYXNrIGFzIHNwZWNpZmllZCAoUkZDIDcyNTIpLgorCisgICAgICAgIGtUb2tlbkxlbmd0aE1hc2sgICAgICAgICAgICA9IDB4MGYsICAvLy88IFRva2VuIExlbmd0aCBtYXNrIGFzIHNwZWNpZmllZCAoUkZDIDcyNTIpLgorICAgICAgICBrVG9rZW5MZW5ndGhPZmZzZXQgICAgICAgICAgPSAwLCAgICAgLy8vPCBUb2tlbiBMZW5ndGggb2Zmc2V0IGFzIHNwZWNpZmllZCAoUkZDIDcyNTIpLgorICAgICAgICBrVG9rZW5PZmZzZXQgICAgICAgICAgICAgICAgPSA0LCAgICAgLy8vPCBUb2tlbiBvZmZzZXQgYXMgc3BlY2lmaWVkIChSRkMgNzI1MikuCisgICAgICAgIGtNYXhUb2tlbkxlbmd0aCAgICAgICAgICAgICA9IDgsICAgICAvLy88IE1heCB0b2tlbiBsZW5ndGggYXMgc3BlY2lmaWVkIChSRkMgNzI1MikuCisKKyAgICAgICAga01heE9wdGlvbkhlYWRlclNpemUgICAgICAgID0gNSwgICAgIC8vLzwgTWF4aW11bSBzaXplIG9mIGFuIE9wdGlvbiBoZWFkZXIKKworICAgICAgICBrT3B0aW9uMUJ5dGVFeHRlbnNpb24gICAgICAgPSAxMywgICAgLy8vPCBJbmRpY2F0ZXMgYSAxIGJ5dGUgZXh0ZW5zaW9uIChSRkMgNzI1MikuCisgICAgICAgIGtPcHRpb24yQnl0ZUV4dGVuc2lvbiAgICAgICA9IDE0LCAgICAvLy88IEluZGljYXRlcyBhIDEgYnl0ZSBleHRlbnNpb24gKFJGQyA3MjUyKS4KKworICAgICAgICBrT3B0aW9uMUJ5dGVFeHRlbnNpb25PZmZzZXQgPSAxMywgICAgLy8vPCBEZWx0YS9MZW5ndGggb2Zmc2V0IGFzIHNwZWNpZmllZCAoUkZDIDcyNTIpLgorICAgICAgICBrT3B0aW9uMkJ5dGVFeHRlbnNpb25PZmZzZXQgPSAyNjksICAgLy8vPCBEZWx0YS9MZW5ndGggb2Zmc2V0IGFzIHNwZWNpZmllZCAoUkZDIDcyNTIpLgorICAgIH07Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBDb2FwCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBDT0FQX0hFQURFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb2FwL2NvYXBfc2VjdXJlLmNwcCBiL3NyYy9jb3JlL2NvYXAvY29hcF9zZWN1cmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMTc2MzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb2FwL2NvYXBfc2VjdXJlLmNwcApAQCAtMCwwICsxLDMyNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiY29hcF9zZWN1cmUudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImNvYXBfc2VjdXJlLmhwcCIKKworI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2R0bHMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRFRMUworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBzZWN1cmUgQ29BUCBhZ2VudC4KKyAqLworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENvYXAgeworCitDb2FwU2VjdXJlOjpDb2FwU2VjdXJlKFRocmVhZE5ldGlmICZhTmV0aWYpOgorICAgIENvYXAoYU5ldGlmKSwKKyAgICBtQ29ubmVjdGVkQ2FsbGJhY2soTlVMTCksCisgICAgbUNvbm5lY3RlZENvbnRleHQoTlVMTCksCisgICAgbVRyYW5zcG9ydENhbGxiYWNrKE5VTEwpLAorICAgIG1UcmFuc3BvcnRDb250ZXh0KE5VTEwpLAorICAgIG1UcmFuc21pdE1lc3NhZ2UoTlVMTCksCisgICAgbVRyYW5zbWl0VGFzayhhTmV0aWYuR2V0SXA2KCkubVRhc2tsZXRTY2hlZHVsZXIsICZDb2FwU2VjdXJlOjpIYW5kbGVVZHBUcmFuc21pdCwgdGhpcykKK3sKK30KKworb3RFcnJvciBDb2FwU2VjdXJlOjpTdGFydCh1aW50MTZfdCBhUG9ydCwgVHJhbnNwb3J0Q2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBtVHJhbnNwb3J0Q2FsbGJhY2sgPSBhQ2FsbGJhY2s7CisgICAgbVRyYW5zcG9ydENvbnRleHQgPSBhQ29udGV4dDsKKworICAgIC8vIFBhc3NpbmcgbVRyYW5zcG9ydENhbGxiYWNrIG1lYW5zIHRoYXQgd2UgZG8gbm90IHdhbnQgdG8gdXNlIHNvY2tldAorICAgIC8vIHRvIHRyYW5zbWl0L3JlY2VpdmUgbWVzc2FnZXMsIHNvIGRvIG5vdCBvcGVuIGl0IGluIHRoYXQgY2FzZS4KKyAgICBpZiAobVRyYW5zcG9ydENhbGxiYWNrID09IE5VTEwpCisgICAgeworICAgICAgICBlcnJvciA9IENvYXA6OlN0YXJ0KGFQb3J0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgQ29hcFNlY3VyZTo6U3RvcCh2b2lkKQoreworICAgIGlmIChJc0Nvbm5lY3Rpb25BY3RpdmUoKSkKKyAgICB7CisgICAgICAgIERpc2Nvbm5lY3QoKTsKKyAgICB9CisKKyAgICBpZiAobVRyYW5zbWl0TWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVRyYW5zbWl0TWVzc2FnZS0+RnJlZSgpOworICAgICAgICBtVHJhbnNtaXRNZXNzYWdlID0gTlVMTDsKKyAgICB9CisKKyAgICBtVHJhbnNwb3J0Q2FsbGJhY2sgPSBOVUxMOworICAgIG1UcmFuc3BvcnRDb250ZXh0ID0gTlVMTDsKKworICAgIHJldHVybiBDb2FwOjpTdG9wKCk7Cit9CisKK290RXJyb3IgQ29hcFNlY3VyZTo6Q29ubmVjdChjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIENvbm5lY3RlZENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgbVBlZXJBZGRyZXNzID0gYU1lc3NhZ2VJbmZvOworICAgIG1Db25uZWN0ZWRDYWxsYmFjayA9IGFDYWxsYmFjazsKKyAgICBtQ29ubmVjdGVkQ29udGV4dCA9IGFDb250ZXh0OworCisgICAgcmV0dXJuIEdldE5ldGlmKCkuR2V0RHRscygpLlN0YXJ0KHRydWUsICZDb2FwU2VjdXJlOjpIYW5kbGVEdGxzQ29ubmVjdGVkLCAmQ29hcFNlY3VyZTo6SGFuZGxlRHRsc1JlY2VpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb2FwU2VjdXJlOjpIYW5kbGVEdGxzU2VuZCwgdGhpcyk7Cit9CisKK2Jvb2wgQ29hcFNlY3VyZTo6SXNDb25uZWN0aW9uQWN0aXZlKHZvaWQpCit7CisgICAgcmV0dXJuIEdldE5ldGlmKCkuR2V0RHRscygpLklzU3RhcnRlZCgpOworfQorCitib29sIENvYXBTZWN1cmU6OklzQ29ubmVjdGVkKHZvaWQpCit7CisgICAgcmV0dXJuIEdldE5ldGlmKCkuR2V0RHRscygpLklzQ29ubmVjdGVkKCk7Cit9CisKK290RXJyb3IgQ29hcFNlY3VyZTo6RGlzY29ubmVjdCh2b2lkKQoreworICAgIHJldHVybiBHZXROZXRpZigpLkdldER0bHMoKS5TdG9wKCk7Cit9CisKK01lc2hDb1A6OkR0bHMgJkNvYXBTZWN1cmU6OkdldER0bHModm9pZCkKK3sKKyAgICByZXR1cm4gR2V0TmV0aWYoKS5HZXREdGxzKCk7Cit9CisKK290RXJyb3IgQ29hcFNlY3VyZTo6U2V0UHNrKGNvbnN0IHVpbnQ4X3QgKmFQc2ssIHVpbnQ4X3QgYVBza0xlbmd0aCkKK3sKKyAgICByZXR1cm4gR2V0TmV0aWYoKS5HZXREdGxzKCkuU2V0UHNrKGFQc2ssIGFQc2tMZW5ndGgpOworfQorCitvdEVycm9yIENvYXBTZWN1cmU6OlNlbmRNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlLCBvdENvYXBSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIFZlcmlmeU9yRXhpdChJc0Nvbm5lY3RlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgZXJyb3IgPSBDb2FwOjpTZW5kTWVzc2FnZShhTWVzc2FnZSwgbVBlZXJBZGRyZXNzLCBhSGFuZGxlciwgYUNvbnRleHQpOworCitleGl0OgorICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBDb2FwU2VjdXJlOjpTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdENvYXBSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KQoreworICAgIHJldHVybiBDb2FwOjpTZW5kTWVzc2FnZShhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBhSGFuZGxlciwgYUNvbnRleHQpOworfQorCitvdEVycm9yIENvYXBTZWN1cmU6OlNlbmQoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2VJbmZvKTsKKyAgICByZXR1cm4gR2V0TmV0aWYoKS5HZXREdGxzKCkuU2VuZChhTWVzc2FnZSwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpOworfQorCit2b2lkIENvYXBTZWN1cmU6OlJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIGlmICghbmV0aWYuR2V0RHRscygpLklzU3RhcnRlZCgpKQorICAgIHsKKyAgICAgICAgSXA2OjpTb2NrQWRkciBzb2NrQWRkcjsKKyAgICAgICAgc29ja0FkZHIubUFkZHJlc3MgPSBhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKTsKKyAgICAgICAgc29ja0FkZHIubVBvcnQgPSBhTWVzc2FnZUluZm8uR2V0UGVlclBvcnQoKTsKKyAgICAgICAgbVNvY2tldC5Db25uZWN0KHNvY2tBZGRyKTsKKworICAgICAgICBtUGVlckFkZHJlc3MuU2V0UGVlckFkZHIoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworICAgICAgICBtUGVlckFkZHJlc3MuU2V0UGVlclBvcnQoYU1lc3NhZ2VJbmZvLkdldFBlZXJQb3J0KCkpOworCisgICAgICAgIGlmIChuZXRpZi5Jc1VuaWNhc3RBZGRyZXNzKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVBlZXJBZGRyZXNzLlNldFNvY2tBZGRyKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1QZWVyQWRkcmVzcy5TZXRTb2NrUG9ydChhTWVzc2FnZUluZm8uR2V0U29ja1BvcnQoKSk7CisKKyAgICAgICAgbmV0aWYuR2V0RHRscygpLlN0YXJ0KGZhbHNlLCBIYW5kbGVEdGxzQ29ubmVjdGVkLCBIYW5kbGVEdGxzUmVjZWl2ZSwgSGFuZGxlRHRsc1NlbmQsIHRoaXMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBPbmNlIERUTFMgc2Vzc2lvbiBpcyBzdGFydGVkLCBjb21tdW5pY2F0ZSBvbmx5IHdpdGggYSBwZWVyLgorICAgICAgICBWZXJpZnlPckV4aXQoKG1QZWVyQWRkcmVzcy5HZXRQZWVyQWRkcigpID09IGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKSAmJgorICAgICAgICAgICAgICAgICAgICAgKG1QZWVyQWRkcmVzcy5HZXRQZWVyUG9ydCgpID09IGFNZXNzYWdlSW5mby5HZXRQZWVyUG9ydCgpKSk7CisgICAgfQorCisgICAgbmV0aWYuR2V0RHRscygpLlNldENsaWVudElkKG1QZWVyQWRkcmVzcy5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtUGVlckFkZHJlc3MuR2V0UGVlckFkZHIoKS5tRmllbGRzKSk7CisgICAgbmV0aWYuR2V0RHRscygpLlJlY2VpdmUoYU1lc3NhZ2UsIGFNZXNzYWdlLkdldE9mZnNldCgpLCBhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIGFNZXNzYWdlLkdldE9mZnNldCgpKTsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK3ZvaWQgQ29hcFNlY3VyZTo6SGFuZGxlRHRsc0Nvbm5lY3RlZCh2b2lkICphQ29udGV4dCwgYm9vbCBhQ29ubmVjdGVkKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2FwU2VjdXJlICo+KGFDb250ZXh0KS0+SGFuZGxlRHRsc0Nvbm5lY3RlZChhQ29ubmVjdGVkKTsKK30KKwordm9pZCBDb2FwU2VjdXJlOjpIYW5kbGVEdGxzQ29ubmVjdGVkKGJvb2wgYUNvbm5lY3RlZCkKK3sKKyAgICBpZiAobUNvbm5lY3RlZENhbGxiYWNrICE9IE5VTEwpCisgICAgeworICAgICAgICBtQ29ubmVjdGVkQ2FsbGJhY2soYUNvbm5lY3RlZCwgbUNvbm5lY3RlZENvbnRleHQpOworICAgIH0KK30KKwordm9pZCBDb2FwU2VjdXJlOjpIYW5kbGVEdGxzUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29hcFNlY3VyZSAqPihhQ29udGV4dCktPkhhbmRsZUR0bHNSZWNlaXZlKGFCdWYsIGFMZW5ndGgpOworfQorCit2b2lkIENvYXBTZWN1cmU6OkhhbmRsZUR0bHNSZWNlaXZlKHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFMZW5ndGgpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gR2V0TmV0aWYoKS5HZXRJcDYoKS5tTWVzc2FnZVBvb2wuTmV3KE1lc3NhZ2U6OmtUeXBlSXA2LCAwKSkgIT0gTlVMTCk7CisgICAgU3VjY2Vzc09yRXhpdChtZXNzYWdlLT5BcHBlbmQoYUJ1ZiwgYUxlbmd0aCkpOworCisgICAgQ29hcDo6UmVjZWl2ZSgqbWVzc2FnZSwgbVBlZXJBZGRyZXNzKTsKKworZXhpdDoKKworICAgIGlmIChtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCitvdEVycm9yIENvYXBTZWN1cmU6OkhhbmRsZUR0bHNTZW5kKHZvaWQgKmFDb250ZXh0LCBjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoLCB1aW50OF90IGFNZXNzYWdlU3ViVHlwZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29hcFNlY3VyZSAqPihhQ29udGV4dCktPkhhbmRsZUR0bHNTZW5kKGFCdWYsIGFMZW5ndGgsIGFNZXNzYWdlU3ViVHlwZSk7Cit9CisKK290RXJyb3IgQ29hcFNlY3VyZTo6SGFuZGxlRHRsc1NlbmQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCwgdWludDhfdCBhTWVzc2FnZVN1YlR5cGUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgaWYgKG1UcmFuc21pdE1lc3NhZ2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCgobVRyYW5zbWl0TWVzc2FnZSA9IG1Tb2NrZXQuTmV3TWVzc2FnZSgwKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICAgICAgbVRyYW5zbWl0TWVzc2FnZS0+U2V0U3ViVHlwZShhTWVzc2FnZVN1YlR5cGUpOworICAgICAgICBtVHJhbnNtaXRNZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBTZXQgbWVzc2FnZSBzdWIgdHlwZSBpbiBjYXNlIEpvaW5lciBGaW5hbGl6ZSBSZXNwb25zZSBpcyBhcHBlbmRlZCB0byB0aGUgbWVzc2FnZS4KKyAgICBpZiAoYU1lc3NhZ2VTdWJUeXBlICE9IE1lc3NhZ2U6OmtTdWJUeXBlTm9uZSkKKyAgICB7CisgICAgICAgIG1UcmFuc21pdE1lc3NhZ2UtPlNldFN1YlR5cGUoYU1lc3NhZ2VTdWJUeXBlKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQobVRyYW5zbWl0TWVzc2FnZS0+QXBwZW5kKGFCdWYsIGFMZW5ndGgpID09IE9UX0VSUk9SX05PTkUsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBtVHJhbnNtaXRUYXNrLlBvc3QoKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1UcmFuc21pdE1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1UcmFuc21pdE1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb2FwU2VjdXJlOjpIYW5kbGVVZHBUcmFuc21pdChUYXNrbGV0ICZhVGFza2xldCkKK3sKKyAgICBHZXRPd25lcihhVGFza2xldCkuSGFuZGxlVWRwVHJhbnNtaXQoKTsKK30KKwordm9pZCBDb2FwU2VjdXJlOjpIYW5kbGVVZHBUcmFuc21pdCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIFZlcmlmeU9yRXhpdChtVHJhbnNtaXRNZXNzYWdlICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBpZiAobVRyYW5zcG9ydENhbGxiYWNrKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1UcmFuc3BvcnRDYWxsYmFjayhtVHJhbnNwb3J0Q29udGV4dCwgKm1UcmFuc21pdE1lc3NhZ2UsIG1QZWVyQWRkcmVzcykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNvY2tldC5TZW5kVG8oKm1UcmFuc21pdE1lc3NhZ2UsIG1QZWVyQWRkcmVzcykpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1UcmFuc21pdE1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1UcmFuc21pdE1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICBtVHJhbnNtaXRNZXNzYWdlID0gTlVMTDsKKworICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKworQ29hcFNlY3VyZSAmQ29hcFNlY3VyZTo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgQ29hcFNlY3VyZSAmY29hcCA9ICpzdGF0aWNfY2FzdDxDb2FwU2VjdXJlICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIENvYXBTZWN1cmUgJmNvYXAgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0Q29hcFNlY3VyZSgpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gY29hcDsKK30KKworfSAgLy8gbmFtZXNwYWNlIENvYXAKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfRFRMUwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29hcC9jb2FwX3NlY3VyZS5ocHAgYi9zcmMvY29yZS9jb2FwL2NvYXBfc2VjdXJlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWY3MmVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29hcC9jb2FwX3NlY3VyZS5ocHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ09BUF9TRUNVUkVfSFBQXworI2RlZmluZSBDT0FQX1NFQ1VSRV9IUFBfCisKKyNpbmNsdWRlICJjb2FwL2NvYXAuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvZHRscy5ocHAiCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgc2VjdXJlIENvQVAgYWdlbnQuCisgKi8KKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBDb2FwIHsKKworY2xhc3MgQ29hcFNlY3VyZTogcHVibGljIENvYXAKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCBvbmNlIERUTFMgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4KKyAgICAgICoKKyAgICAgICogQHBhcmFtW2luXSAgYUNvbm5lY3RlZCAgVFJVRSBpZiBhIGNvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgICoKKyAgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqQ29ubmVjdGVkQ2FsbGJhY2spKGJvb2wgYUNvbm5lY3RlZCwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIHNlY3VyZSBDb0FQIHNlcnZlciB3YW50IHRvIHNlbmQgZW5jcnlwdGVkIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIHRvIHNlbmQuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSBpbmZvIGFzc29jaWF0ZWQgd2l0aCBAcCBhTWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHR5cGVkZWYgb3RFcnJvcigqVHJhbnNwb3J0Q2FsbGJhY2spKHZvaWQgKmFDb250ZXh0LCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRoYXQgdGhlIHNlY3VyZSBDb0FQIGFnZW50IGlzIGJvdW5kIHRvLgorICAgICAqCisgICAgICovCisgICAgQ29hcFNlY3VyZShUaHJlYWROZXRpZiAmYU5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgc2VjdXJlIENvQVAgYWdlbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUG9ydCAgICAgIFRoZSBsb2NhbCBVRFAgcG9ydCB0byBiaW5kIHRvLgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gZm9yIHNlbmRpbmcgbWVzc2FnZXMuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBJZiBOVUxMLCB0aGUgbWVzc2FnZSBpcyBzZW50IGRpcmVjdGx5IHRvIHRoZSBzb2NrZXQuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBDb0FQIGFnZW50LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdGFydCh1aW50MTZfdCBhUG9ydCwgVHJhbnNwb3J0Q2FsbGJhY2sgYUNhbGxiYWNrID0gTlVMTCwgdm9pZCAqYUNvbnRleHQgPSBOVUxMKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSBzZWN1cmUgQ29BUCBhZ2VudC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHN0b3BwZWQgdGhlIHNlY3VyZSBDb0FQIGFnZW50LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgRFRMUyBzZXNzaW9uIHdpdGggYSBwZWVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHJlZmVyZW5jZSB0byBhbiBhZGRyZXNzIG9mIHRoZSBwZWVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIERUTFMgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgRFRMUyBjb25uZWN0aW9uLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBDb25uZWN0KGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgQ29ubmVjdGVkQ2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIERUTFMgc2Vzc2lvbiBpcyBhY3RpdmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgIElmIERUTFMgc2Vzc2lvbiBpcyBhY3RpdmUuCisgICAgICogQHJldHZhbCBGQUxTRSBJZiBEVExTIHNlc3Npb24gaXMgbm90IGFjdGl2ZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNDb25uZWN0aW9uQWN0aXZlKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBEVExTIHNlc3Npb24gaXMgY29ubmVjdGVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgVGhlIERUTFMgc2Vzc2lvbiBpcyBjb25uZWN0ZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgVGhlIERUTFMgc2Vzc2lvbiBpcyBub3QgY29ubmVjdGVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0Nvbm5lY3RlZCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSBEVExTIGNvbm5lY3Rpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBEVExTIGNvbm5lY3Rpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIERpc2Nvbm5lY3Qodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBEVExTIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgRFRMUyBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNoQ29QOjpEdGxzICZHZXREdGxzKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUFNLLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBTSyAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBQU0suCisgICAgICogQHBhcmFtW2luXSAgYVBza0xlbmd0aCAgVGhlIFBTSyBsZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgUFNLLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgUFNLIGlzIGludmFsaWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFBzayhjb25zdCB1aW50OF90ICphUHNrLCB1aW50OF90IGFQc2tMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBDb0FQIG1lc3NhZ2Ugb3ZlciBzZWN1cmUgRFRMUyBjb25uZWN0aW9uLgorICAgICAqCisgICAgICogSWYgYSByZXNwb25zZSBmb3IgYSByZXF1ZXN0IGlzIGV4cGVjdGVkLCByZXNwZWN0aXZlIGZ1bmN0aW9uIGFuZCBjb250ZXh0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4KKyAgICAgKiBJZiBubyByZXNwb25zZSBpcyBleHBlY3RlZCwgdGhlc2UgYXJndW1lbnRzIHNob3VsZCBiZSBOVUxMIHBvaW50ZXJzLgorICAgICAqIElmIE1lc3NhZ2UgSWQgd2FzIG5vdCBzZXQgaW4gdGhlIGhlYWRlciAoZXF1YWwgdG8gMCksIHRoaXMgZnVuY3Rpb24gd2lsbCBhc3NpZ24gdW5pcXVlIE1lc3NhZ2UgSWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIHRvIHNlbmQuCisgICAgICogQHBhcmFtW2luXSAgYUhhbmRsZXIgICAgICBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaGFsbCBiZSBjYWxsZWQgb24gcmVzcG9uc2UgcmVjZXB0aW9uIG9yIHRpbWUtb3V0LgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VudCBDb0FQIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgICBGYWlsZWQgdG8gYWxsb2NhdGUgcmV0cmFuc21pc3Npb24gZGF0YS4KKyAgICAgKiBAcmV0dmFrIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIERUTFMgY29ubmVjdGlvbiB3YXMgbm90IGluaXRpYWxpemVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgb3RDb2FwUmVzcG9uc2VIYW5kbGVyIGFIYW5kbGVyID0gTlVMTCwgdm9pZCAqYUNvbnRleHQgPSBOVUxMKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgQ29BUCBtZXNzYWdlIG92ZXIgc2VjdXJlIERUTFMgY29ubmVjdGlvbi4KKyAgICAgKgorICAgICAqIElmIGEgcmVzcG9uc2UgZm9yIGEgcmVxdWVzdCBpcyBleHBlY3RlZCwgcmVzcGVjdGl2ZSBmdW5jdGlvbiBhbmQgY29udGV4dCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQuCisgICAgICogSWYgbm8gcmVzcG9uc2UgaXMgZXhwZWN0ZWQsIHRoZXNlIGFyZ3VtZW50cyBzaG91bGQgYmUgTlVMTCBwb2ludGVycy4KKyAgICAgKiBJZiBNZXNzYWdlIElkIHdhcyBub3Qgc2V0IGluIHRoZSBoZWFkZXIgKGVxdWFsIHRvIDApLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXNzaWduIHVuaXF1ZSBNZXNzYWdlIElkIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSB0byBzZW5kLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUhhbmRsZXIgICAgICBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaGFsbCBiZSBjYWxsZWQgb24gcmVzcG9uc2UgcmVjZXB0aW9uIG9yIHRpbWUtb3V0LgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VudCBDb0FQIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgICBGYWlsZWQgdG8gYWxsb2NhdGUgcmV0cmFuc21pc3Npb24gZGF0YS4KKyAgICAgKiBAcmV0dmFrIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIERUTFMgY29ubmVjdGlvbiB3YXMgbm90IGluaXRpYWxpemVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgb3RDb2FwUmVzcG9uc2VIYW5kbGVyIGFIYW5kbGVyID0gTlVMTCwgdm9pZCAqYUNvbnRleHQgPSBOVUxMKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gcGFzcyBtZXNzYWdlcyB0byB0aGUgc2VjdXJlIENvQVAgc2VydmVyLgorICAgICAqIEl0IGNhbiBiZSB1c2VkIHdoZW4gbWVzc2FnZXMgYXJlIHJlY2VpdmVkIG90aGVyIHdheSB0aGF0IHZpYSBzZXJ2ZXIncyBzb2NrZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSByZWNlaXZlZCBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBvdEVycm9yIFNlbmQoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVEdGxzQ29ubmVjdGVkKHZvaWQgKmFDb250ZXh0LCBib29sIGFDb25uZWN0ZWQpOworICAgIHZvaWQgSGFuZGxlRHRsc0Nvbm5lY3RlZChib29sIGFDb25uZWN0ZWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlRHRsc1JlY2VpdmUodm9pZCAqYUNvbnRleHQsIHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFMZW5ndGgpOworICAgIHZvaWQgSGFuZGxlRHRsc1JlY2VpdmUodWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCk7CisKKyAgICBzdGF0aWMgb3RFcnJvciBIYW5kbGVEdGxzU2VuZCh2b2lkICphQ29udGV4dCwgY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCwgdWludDhfdCBhTWVzc2FnZVN1YlR5cGUpOworICAgIG90RXJyb3IgSGFuZGxlRHRsc1NlbmQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCwgdWludDhfdCBhTWVzc2FnZVN1YlR5cGUpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwVHJhbnNtaXQoVGFza2xldCAmYVRhc2tsZXQpOworICAgIHZvaWQgSGFuZGxlVWRwVHJhbnNtaXQodm9pZCk7CisKKyAgICBzdGF0aWMgQ29hcFNlY3VyZSAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgSXA2OjpNZXNzYWdlSW5mbyBtUGVlckFkZHJlc3M7CisgICAgQ29ubmVjdGVkQ2FsbGJhY2sgbUNvbm5lY3RlZENhbGxiYWNrOworICAgIHZvaWQgKm1Db25uZWN0ZWRDb250ZXh0OworICAgIFRyYW5zcG9ydENhbGxiYWNrIG1UcmFuc3BvcnRDYWxsYmFjazsKKyAgICB2b2lkICptVHJhbnNwb3J0Q29udGV4dDsKKyAgICBNZXNzYWdlICptVHJhbnNtaXRNZXNzYWdlOworICAgIFRhc2tsZXQgbVRyYW5zbWl0VGFzazsKK307CisKK30gIC8vIG5hbWVzcGFjZSBDb2FwCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBDT0FQX1NFQ1VSRV9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vY29kZV91dGlscy5ocHAgYi9zcmMvY29yZS9jb21tb24vY29kZV91dGlscy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkZTQxZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9jb2RlX3V0aWxzLmhwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgbWFjcm9zIGZvciB2YWxpZGF0aW5nIHJ1bnRpbWUgY29uZGl0aW9ucy4KKyAqLworCisjaWZuZGVmIENPREVfVVRJTFNfSFBQXworI2RlZmluZSBDT0RFX1VUSUxTX0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkYm9vbC5oIgorCisvLyBDYWxjdWxhdGVzIHRoZSBhbGlnbmVkIHZhcmlhYmxlIHNpemUuCisjZGVmaW5lIG90QUxJR05FRF9WQVJfU0laRShzaXplLCBhbGlnbl90eXBlKSAgICAgICAgICAgIFwKKyAgICAoKChzaXplKSArIChzaXplb2YgKGFsaWduX3R5cGUpIC0gMSkpIC8gc2l6ZW9mIChhbGlnbl90eXBlKSkKKworLy8gQWxsb2NhdGUgdGhlIHN0cnVjdHVyZSB1c2luZyAicmF3IiBzdG9yYWdlLgorI2RlZmluZSBvdERFRklORV9BTElHTkVEX1ZBUihuYW1lLCBzaXplLCBhbGlnbl90eXBlKSAgICAgICAgICAgIFwKKyAgICBhbGlnbl90eXBlIG5hbWVbKCgoc2l6ZSkgKyAoc2l6ZW9mIChhbGlnbl90eXBlKSAtIDEpKSAvIHNpemVvZiAoYWxpZ25fdHlwZSkpXQorCisvKioKKyAqICBUaGlzIGNoZWNrcyBmb3IgdGhlIHNwZWNpZmllZCBzdGF0dXMsIHdoaWNoIGlzIGV4cGVjdGVkIHRvCisgKiAgY29tbW9ubHkgYmUgc3VjY2Vzc2Z1bCwgYW5kIGJyYW5jaGVzIHRvIHRoZSBsb2NhbCBsYWJlbCAnZXhpdCcgaWYKKyAqICB0aGUgc3RhdHVzIGlzIHVuc3VjY2Vzc2Z1bC4KKyAqCisgKiAgQHBhcmFtW2luXSAgYVN0YXR1cyAgICAgQSBzY2FsYXIgc3RhdHVzIHRvIGJlIGV2YWx1YXRlZCBhZ2FpbnN0IHplcm8gKDApLgorICoKKyAqLworI2RlZmluZSBTdWNjZXNzT3JFeGl0KGFTdGF0dXMpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoKGFTdGF0dXMpICE9IDApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBnb3RvIGV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworLyoqCisgKiAgVGhpcyBjaGVja3MgZm9yIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9uLCB3aGljaCBpcyBleHBlY3RlZCB0bworICogIGNvbW1vbmx5IGJlIHRydWUsIGFuZCBib3RoIGV4ZWN1dGVzIEBhIC4uLiBhbmQgYnJhbmNoZXMgdG8gdGhlCisgKiAgbG9jYWwgbGFiZWwgJ2V4aXQnIGlmIHRoZSBjb25kaXRpb24gaXMgZmFsc2UuCisgKgorICogIEBwYXJhbVtpbl0gIGFDb25kaXRpb24gIEEgQm9vbGVhbiBleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZC4KKyAqICBAcGFyYW1baW5dICAuLi4gICAgICAgICBBbiBleHByZXNzaW9uIG9yIGJsb2NrIHRvIGV4ZWN1dGUgd2hlbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb24gZmFpbHMuCisgKgorICovCisjZGVmaW5lIFZlcmlmeU9yRXhpdChhQ29uZGl0aW9uLCAuLi4pICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghKGFDb25kaXRpb24pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBnb3RvIGV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKy8qKgorICogIFRoaXMgdW5jb25kaXRpb25hbGx5IGV4ZWN1dGVzIEBhIC4uLiBhbmQgYnJhbmNoZXMgdG8gdGhlIGxvY2FsCisgKiAgbGFiZWwgJ2V4aXQnLgorICoKKyAqICBAbm90ZSBUaGUgdXNlIG9mIHRoaXMgaW50ZXJmYWNlIGltcGxpZXMgbmVpdGhlciBzdWNjZXNzIG5vcgorICogICAgICAgIGZhaWx1cmUgZm9yIHRoZSBvdmVyYWxsIGV4aXQgc3RhdHVzIG9mIHRoZSBlbmNsb3NpbmcKKyAqICAgICAgICBmdW5jdGlvbiBib2R5LgorICoKKyAqICBAcGFyYW1baW5dICAuLi4gICAgICAgICBBbiBvcHRpb25hbCBleHByZXNzaW9uIG9yIGJsb2NrIHRvIGV4ZWN1dGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuCisgKgorICovCisjZGVmaW5lIEV4aXROb3coLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdvdG8gZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKy8qCisgKiBSdW4gdGhlIGBzdGF0ZW1lbnRgIGFuZCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZS4KKyAqCisgKiBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIGluZGljYXRlIHRoZSBpbnRlbnRpb24gb2YgZGV2ZWxvcGVyIHRoYXQKKyAqIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb24vbWV0aG9kIGNhbiBiZSBzYWZlbHkgaWdub3JlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhU3RhdGVtZW50ICBUaGUgZnVuY3Rpb24vbWV0aG9kIHRvIGV4ZWN1dGUuCisgKgorICovCisjZGVmaW5lIElnbm9yZVJldHVyblZhbHVlKGFTdGF0ZW1lbnQpICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChhU3RhdGVtZW50KSB7fSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2VuZGlmICAvLyBDT0RFX1VUSUxTX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NvbW1vbi9jb250ZXh0LmhwcCBiL3NyYy9jb3JlL2NvbW1vbi9jb250ZXh0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzZiNmUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29tbW9uL2NvbnRleHQuaHBwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFpbnRhaW5pbmcgYSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICovCisKKyNpZm5kZWYgQ09OVEVYVF9IUFBfCisjZGVmaW5lIENPTlRFWFRfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3Rvb2xjaGFpbi5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtY29udGV4dAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFpbnRhaW5pbmcgYSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGRlZmluaXRpb25zIGZvciBtYWludGFpbmluZyBhIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBpcyB1c2VkIGFzIGJhc2UgY2xhc3MgZm9yIG9iamVjdHMgdGhhdCBwcm92aWRlIGEgY2FsbGJhY2sgb3IgaGFuZGxlciAoZS5nLiwgVGltZXIgb3IgVGFza2xldCkuCisgKgorICovCitjbGFzcyBDb250ZXh0Cit7CitwdWJsaWM6CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCAqR2V0Q29udGV4dCh2b2lkKSBjb25zdCB7IHJldHVybiBtQ29udGV4dDsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBjb250ZXh0IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIENvbnRleHQodm9pZCAqYUNvbnRleHQpCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgICAgIDogbUNvbnRleHQoYUNvbnRleHQpCisjZW5kaWYKKyAgICB7CisgICAgICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisgICAgfQorCitwcml2YXRlOgorI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIHZvaWQgKm1Db250ZXh0OworI2VuZGlmCit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIENPTlRFWFRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL2NyYzE2LmNwcCBiL3NyYy9jb3JlL2NvbW1vbi9jcmMxNi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmYTZjNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9jcmMxNi5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBDUkMxNiBjb21wdXRhdGlvbnMuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjcmMxNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK0NyYzE2OjpDcmMxNihQb2x5bm9taWFsIGFQb2x5bm9taWFsKQoreworICAgIG1Qb2x5bm9taWFsID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFQb2x5bm9taWFsKTsKKyAgICBJbml0KCk7Cit9CisKK3ZvaWQgQ3JjMTY6OlVwZGF0ZSh1aW50OF90IGFCeXRlKQoreworICAgIHVpbnQ4X3QgaTsKKworICAgIG1DcmMgPSBtQ3JjIF4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFCeXRlIDw8IDgpOworICAgIGkgPSA4OworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmIChtQ3JjICYgMHg4MDAwKQorICAgICAgICB7CisgICAgICAgICAgICBtQ3JjID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG1DcmMgPDwgMSkgXiBtUG9seW5vbWlhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DcmMgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4obUNyYyA8PCAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoLS1pKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vY3JjMTYuaHBwIGIvc3JjL2NvcmUvY29tbW9uL2NyYzE2LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzMzYjYwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29tbW9uL2NyYzE2LmhwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgQ1JDMTYgY29tcHV0YXRpb25zLgorICovCisKKyNpZm5kZWYgQ1JDMTZfSFBQXworI2RlZmluZSBDUkMxNl9IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBDUkMxNiBjb21wdXRhdGlvbnMuCisgKgorICovCitjbGFzcyBDcmMxNgoreworcHVibGljOgorICAgIGVudW0gUG9seW5vbWlhbAorICAgIHsKKyAgICAgICAga0NjaXR0ID0gMHgxMDIxLCAgLy8vPCBDUkMxNl9DQ0lUVAorICAgICAgICBrQW5zaSAgPSAweDgwMDUsICAvLy88IENSQzE2LUFOU0kKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvbHlub21pYWwgIFRoZSBwb2x5bm9taWFsIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgQ3JjMTYoUG9seW5vbWlhbCBhUG9seW5vbWlhbCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgQ1JDMTYgY29tcHV0YXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtQ3JjID0gMDsgfQorCisgICAgLypjKgorICAgICAqIFRoaXMgbWV0aG9kIGZlZWRzIGEgYnl0ZSB2YWx1ZSBpbnRvIHRoZSBDUkMxNiBjb21wdXRhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCeXRlICBUaGUgYnl0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgVXBkYXRlKHVpbnQ4X3QgYUJ5dGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgY3VycmVudCBDUkMxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IENSQzE2IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1DcmM7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtUG9seW5vbWlhbDsKKyAgICB1aW50MTZfdCBtQ3JjOworfTsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ1JDMTZfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL2RlYnVnLmhwcCBiL3NyYy9jb3JlL2NvbW1vbi9kZWJ1Zy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkZmJiZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9kZWJ1Zy5ocHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBkZWJ1Z2dpbmcuCisgKi8KKworI2lmbmRlZiBERUJVR19IUFBfCisjZGVmaW5lIERFQlVHX0hQUF8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorCisjaWYgZGVmaW5lZChPUEVOVEhSRUFEX1RBUkdFVF9EQVJXSU4pIHx8IGRlZmluZWQoT1BFTlRIUkVBRF9UQVJHRVRfTElOVVgpCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2VsaWYgZGVmaW5lZChfS0VSTkVMX01PREUpCisKKyNpbmNsdWRlIDx3ZG0uaD4KKworI2RlZmluZSBhc3NlcnQoZXhwKSBcCisgICAgKCghKGV4cCkpID8gXAorICAgICAgICAoUnRsQXNzZXJ0KCAjZXhwLCBfX0ZJTEVfXywgX19MSU5FX18sIE5VTEwgKSxGQUxTRSkgOiBcCisgICAgICAgIFRSVUUpCisKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNlbGlmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX0FTU0VSVF9NQU5BR0VNRU5UCisKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaCIKKworI2RlZmluZSBhc3NlcnQoY29uZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICghKGNvbmQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgb3RQbGF0QXNzZXJ0RmFpbChfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgXAorICAgICAgd2hpbGUgKDEpIHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIGFzc2VydChjb25kKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCEoY29uZCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB3aGlsZSAoMSkge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyNlbmRpZgorCisjZW5kaWYgIC8vIERFQlVHX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NvbW1vbi9lbmNvZGluZy5ocHAgYi9zcmMvY29yZS9jb21tb24vZW5jb2RpbmcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNTVlODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vZW5jb2RpbmcuaHBwCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgYnl0ZS1vcmRlcmluZyBlbmNvZGluZy4KKyAqLworCisjaWZuZGVmIEVOQ09ESU5HX0hQUF8KKyNkZWZpbmUgRU5DT0RJTkdfSFBQXworCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBFbmNvZGluZyB7CisKK2lubGluZSB1aW50MTZfdCBTd2FwMTYodWludDE2X3QgdikKK3sKKyAgICByZXR1cm4KKyAgICAgICAgKCgodiAmIDB4MDBmZlUpIDw8IDgpICYgMHhmZjAwKSB8CisgICAgICAgICgoKHYgJiAweGZmMDBVKSA+PiA4KSAmIDB4MDBmZik7Cit9CisKK2lubGluZSB1aW50MzJfdCBTd2FwMzIodWludDMyX3QgdikKK3sKKyAgICByZXR1cm4KKyAgICAgICAgKCh2ICYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDB4MDAwMDAwZmZVTCkpIDw8IDI0KSB8CisgICAgICAgICgodiAmIHN0YXRpY19jYXN0PHVpbnQzMl90PigweDAwMDBmZjAwVUwpKSA8PCAgOCkgfAorICAgICAgICAoKHYgJiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oMHgwMGZmMDAwMFVMKSkgPj4gIDgpIHwKKyAgICAgICAgKCh2ICYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDB4ZmYwMDAwMDBVTCkpID4+IDI0KTsKK30KKworaW5saW5lIHVpbnQ2NF90IFN3YXA2NCh1aW50NjRfdCB2KQoreworICAgIHJldHVybgorICAgICAgICAoKHYgJiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMHgwMDAwMDAwMDAwMDAwMGZmVUxMKSkgPDwgNTYpIHwKKyAgICAgICAgKCh2ICYgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDB4MDAwMDAwMDAwMDAwZmYwMFVMTCkpIDw8IDQwKSB8CisgICAgICAgICgodiAmIHN0YXRpY19jYXN0PHVpbnQ2NF90PigweDAwMDAwMDAwMDBmZjAwMDBVTEwpKSA8PCAyNCkgfAorICAgICAgICAoKHYgJiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMHgwMDAwMDAwMGZmMDAwMDAwVUxMKSkgPDwgIDgpIHwKKyAgICAgICAgKCh2ICYgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDB4MDAwMDAwZmYwMDAwMDAwMFVMTCkpID4+ICA4KSB8CisgICAgICAgICgodiAmIHN0YXRpY19jYXN0PHVpbnQ2NF90PigweDAwMDBmZjAwMDAwMDAwMDBVTEwpKSA+PiAyNCkgfAorICAgICAgICAoKHYgJiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSkgPj4gNDApIHwKKyAgICAgICAgKCh2ICYgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkpID4+IDU2KTsKK30KKworaW5saW5lIHVpbnQzMl90IFJldmVyc2UzMih1aW50MzJfdCB2KQoreworICAgIHYgPSAoKHYgJiAweDU1NTU1NTU1KSA8PCAxKSAgfCAoKHYgJiAweGFhYWFhYWFhKSA+PiAxKTsKKyAgICB2ID0gKCh2ICYgMHgzMzMzMzMzMykgPDwgMikgIHwgKCh2ICYgMHhjY2NjY2NjYykgPj4gMik7CisgICAgdiA9ICgodiAmIDB4MGYwZjBmMGYpIDw8IDQpICB8ICgodiAmIDB4ZjBmMGYwZjApID4+IDQpOworICAgIHYgPSAoKHYgJiAweDAwZmYwMGZmKSA8PCA4KSAgfCAoKHYgJiAweGZmMDBmZjAwKSA+PiA4KTsKKyAgICB2ID0gKCh2ICYgMHgwMDAwZmZmZikgPDwgMTYpIHwgKCh2ICYgMHhmZmZmMDAwMCkgPj4gMTYpOworCisgICAgcmV0dXJuIHY7Cit9CisKKyNkZWZpbmUgQml0VmVjdG9yQnl0ZXMoeCkgICAgICAgICAgIFwKKyAgICAoKCh4KSArIChDSEFSX0JJVC0xKSkgLyBDSEFSX0JJVCkKKworbmFtZXNwYWNlIEJpZ0VuZGlhbiB7CisKKyNpZiBCWVRFX09SREVSX0JJR19FTkRJQU4KKworaW5saW5lIHVpbnQxNl90IEhvc3RTd2FwMTYodWludDE2X3QgdikgeyByZXR1cm4gdjsgfQoraW5saW5lIHVpbnQzMl90IEhvc3RTd2FwMzIodWludDMyX3QgdikgeyByZXR1cm4gdjsgfQoraW5saW5lIHVpbnQ2NF90IEhvc3RTd2FwNjQodWludDY0X3QgdikgeyByZXR1cm4gdjsgfQorCisjZWxzZSAvKiBCWVRFX09SREVSX0xJVFRMRV9FTkRJQU4gKi8KKworaW5saW5lIHVpbnQxNl90IEhvc3RTd2FwMTYodWludDE2X3QgdikgeyByZXR1cm4gU3dhcDE2KHYpOyB9CitpbmxpbmUgdWludDMyX3QgSG9zdFN3YXAzMih1aW50MzJfdCB2KSB7IHJldHVybiBTd2FwMzIodik7IH0KK2lubGluZSB1aW50NjRfdCBIb3N0U3dhcDY0KHVpbnQ2NF90IHYpIHsgcmV0dXJuIFN3YXA2NCh2KTsgfQorCisjZW5kaWYgIC8vIExJVFRMRV9FTkRJQU4KKworfSAgLy8gbmFtZXNwYWNlIEJpZ0VuZGlhbgorCituYW1lc3BhY2UgTGl0dGxlRW5kaWFuIHsKKworI2lmIEJZVEVfT1JERVJfQklHX0VORElBTgorCitpbmxpbmUgdWludDE2X3QgSG9zdFN3YXAxNih1aW50MTZfdCB2KSB7IHJldHVybiBTd2FwMTYodik7IH0KK2lubGluZSB1aW50MzJfdCBIb3N0U3dhcDMyKHVpbnQzMl90IHYpIHsgcmV0dXJuIFN3YXAzMih2KTsgfQoraW5saW5lIHVpbnQ2NF90IEhvc3RTd2FwNjQodWludDY0X3QgdikgeyByZXR1cm4gU3dhcDY0KHYpOyB9CisKKyNlbHNlIC8qIEJZVEVfT1JERVJfTElUVExFX0VORElBTiAqLworCitpbmxpbmUgdWludDE2X3QgSG9zdFN3YXAxNih1aW50MTZfdCB2KSB7IHJldHVybiB2OyB9CitpbmxpbmUgdWludDMyX3QgSG9zdFN3YXAzMih1aW50MzJfdCB2KSB7IHJldHVybiB2OyB9CitpbmxpbmUgdWludDY0X3QgSG9zdFN3YXA2NCh1aW50NjRfdCB2KSB7IHJldHVybiB2OyB9CisKKyNlbmRpZgorCit9ICAvLyBuYW1lc3BhY2UgTGl0dGxlRW5kaWFuCit9ICAvLyBuYW1lc3BhY2UgRW5jb2RpbmcKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEVOQ09ESU5HX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NvbW1vbi9sb2NhdG9yLmNwcCBiL3NyYy9jb3JlL2NvbW1vbi9sb2NhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE2NmI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29tbW9uL2xvY2F0b3IuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGxvY2F0b3IgY2xhc3MgZm9yIE9wZW5UaHJlYWQgb2JqZWN0cy4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJsb2NhdG9yLnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJsb2NhdG9yLmhwcCIKKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworCitvdEluc3RhbmNlICpUaHJlYWROZXRpZkxvY2F0b3I6OkdldEluc3RhbmNlKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90SW5zdGFuY2VGcm9tVGhyZWFkTmV0aWYoJkdldE5ldGlmKCkpOworfQorCitvdEluc3RhbmNlICpNZXNoRm9yd2FyZGVyTG9jYXRvcjo6R2V0SW5zdGFuY2Uodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3RJbnN0YW5jZUZyb21UaHJlYWROZXRpZigmR2V0TWVzaEZvcndhcmRlcigpLkdldE5ldGlmKCkpOworfQorCitvdEluc3RhbmNlICpUaW1lclNjaGVkdWxlckxvY2F0b3I6OkdldEluc3RhbmNlKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90SW5zdGFuY2VGcm9tSXA2KElwNjo6SXA2RnJvbVRpbWVyU2NoZWR1bGVyKCZHZXRUaW1lclNjaGVkdWxlcigpKSk7Cit9CisKK290SW5zdGFuY2UgKlRhc2tsZXRTY2hlZHVsZXJMb2NhdG9yOjpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBvdEluc3RhbmNlRnJvbUlwNihJcDY6OklwNkZyb21UYXNrbGV0U2NoZWR1bGVyKCZHZXRUYXNrbGV0U2NoZWR1bGVyKCkpKTsKK30KKworb3RJbnN0YW5jZSAqSXA2TG9jYXRvcjo6R2V0SW5zdGFuY2Uodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3RJbnN0YW5jZUZyb21JcDYoJkdldElwNigpKTsKK30KKworI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vbG9jYXRvci5ocHAgYi9zcmMvY29yZS9jb21tb24vbG9jYXRvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzODUyNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9sb2NhdG9yLmhwcApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGxvY2F0b3IgY2xhc3MgZm9yIE9wZW5UaHJlYWQgb2JqZWN0cy4KKyAqLworCisjaWZuZGVmIExPQ0FUT1JfSFBQXworI2RlZmluZSBMT0NBVE9SX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC1zaW5nbGUtaW5zdGFuY2UuaCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CitjbGFzcyBNZXNoRm9yd2FyZGVyOworY2xhc3MgVGFza2xldFNjaGVkdWxlcjsKK2NsYXNzIFRpbWVyU2NoZWR1bGVyOworbmFtZXNwYWNlIElwNiB7IGNsYXNzIElwNjsgfQorCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbG9jYXRvcgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbG9jYXRvciBiYXNlIGNsYXNzIGZvciBPcGVuVGhyZWFkIG9iamVjdHMuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIHRlbXBsYXRlIGNsYXNzIGltcGxlbWVudHMgdGhlIGJhc2UgbG9jYXRvciBmb3IgT3BlblRocmVhZCBvYmplY3RzLgorICoKKyAqLwordGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CitjbGFzcyBMb2NhdG9yCit7Citwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgbG9jYXRvci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFPYmplY3QgIEEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBMb2NhdG9yKFR5cGUgJmFPYmplY3QpCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgICAgIDogbUxvY2F0b3JPYmplY3QoYU9iamVjdCkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFPYmplY3QpOworICAgIH0KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIFR5cGUgJm1Mb2NhdG9yT2JqZWN0OworI2VuZGlmCit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGxvY2F0b3IgZm9yIFRocmVhZE5ldGlmIG9iamVjdC4KKyAqCisgKi8KK2NsYXNzIFRocmVhZE5ldGlmTG9jYXRvcjogcHJpdmF0ZSBMb2NhdG9yPFRocmVhZE5ldGlmPgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICAgQSByZWZlcmVuY2UgdG8gdGhlIHRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIFRocmVhZE5ldGlmICZHZXROZXRpZih2b2lkKSBjb25zdCB7IHJldHVybiBtTG9jYXRvck9iamVjdDsgfQorI2Vsc2UKKyAgICBUaHJlYWROZXRpZiAmR2V0TmV0aWYodm9pZCkgY29uc3QgeyByZXR1cm4gb3RHZXRUaHJlYWROZXRpZigpOyB9CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGZpbmFsaXplZC4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIG90SW5zdGFuY2UgKkdldEluc3RhbmNlKHZvaWQpIGNvbnN0OworI2Vsc2UKKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBvdEdldEluc3RhbmNlKCk7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgdGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOiBMb2NhdG9yKGFUaHJlYWROZXRpZikgeyB9Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGxvY2F0b3IgZm9yIE1lc2hGb3J3YXJkZXIgb2JqZWN0LgorICoKKyAqLworY2xhc3MgTWVzaEZvcndhcmRlckxvY2F0b3I6IHByaXZhdGUgTG9jYXRvcjxNZXNoRm9yd2FyZGVyPgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIE1lc2hGb3J3YXJkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgIEEgcmVmZXJlbmNlIHRvIHRoZSBNZXNoRm9yd2FyZGVyLgorICAgICAqCisgICAgICovCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgTWVzaEZvcndhcmRlciAmR2V0TWVzaEZvcndhcmRlcih2b2lkKSBjb25zdCB7IHJldHVybiBtTG9jYXRvck9iamVjdDsgfQorI2Vsc2UKKyAgICBNZXNoRm9yd2FyZGVyICZHZXRNZXNoRm9yd2FyZGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG90R2V0TWVzaEZvcndhcmRlcigpOyB9CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGZpbmFsaXplZC4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIG90SW5zdGFuY2UgKkdldEluc3RhbmNlKHZvaWQpIGNvbnN0OworI2Vsc2UKKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBvdEdldEluc3RhbmNlKCk7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc2hGb3J3YXJkZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBNZXNoRm9yd2FyZGVyLgorICAgICAqCisgICAgICovCisgICAgTWVzaEZvcndhcmRlckxvY2F0b3IoTWVzaEZvcndhcmRlciAmYU1lc2hGb3J3YXJkZXIpOiBMb2NhdG9yKGFNZXNoRm9yd2FyZGVyKSB7IH0KK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgbG9jYXRvciBmb3IgVGltZXJTY2hlZHVsZXIgb2JqZWN0LgorICoKKyAqLworY2xhc3MgVGltZXJTY2hlZHVsZXJMb2NhdG9yOiBwcml2YXRlIExvY2F0b3I8VGltZXJTY2hlZHVsZXI+Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVGltZXJTY2hlZHVsZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaW1lclNjaGVkdWxlci4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIFRpbWVyU2NoZWR1bGVyICZHZXRUaW1lclNjaGVkdWxlcih2b2lkKSBjb25zdCB7IHJldHVybiBtTG9jYXRvck9iamVjdDsgfQorI2Vsc2UKKyAgICBUaW1lclNjaGVkdWxlciAmR2V0VGltZXJTY2hlZHVsZXIodm9pZCkgY29uc3QgeyByZXR1cm4gb3RHZXRUaW1lclNjaGVkdWxlcigpOyB9CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGZpbmFsaXplZC4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIG90SW5zdGFuY2UgKkdldEluc3RhbmNlKHZvaWQpIGNvbnN0OworI2Vsc2UKKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBvdEdldEluc3RhbmNlKCk7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVyU2NoZWR1bGVyICBBIHJlZmVyZW5jZSB0byB0aGUgVGltZXJTY2hlZHVsZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBUaW1lclNjaGVkdWxlckxvY2F0b3IoVGltZXJTY2hlZHVsZXIgJmFUaW1lclNjaGVkdWxlcik6IExvY2F0b3IoYVRpbWVyU2NoZWR1bGVyKSB7IH0KK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgbG9jYXRvciBmb3IgVGFza2xldFNjaGVkdWxlciBvYmplY3QuCisgKgorICovCitjbGFzcyBUYXNrbGV0U2NoZWR1bGVyTG9jYXRvcjogcHJpdmF0ZSBMb2NhdG9yPFRhc2tsZXRTY2hlZHVsZXI+Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVGFza2xldFNjaGVkdWxlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICAgQSByZWZlcmVuY2UgdG8gdGhlIFRhc2tsZXRTY2hlZHVsZXIuCisgICAgICoKKyAgICAgKi8KKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBUYXNrbGV0U2NoZWR1bGVyICZHZXRUYXNrbGV0U2NoZWR1bGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Mb2NhdG9yT2JqZWN0OyB9CisjZWxzZQorICAgIFRhc2tsZXRTY2hlZHVsZXIgJkdldFRhc2tsZXRTY2hlZHVsZXIodm9pZCkgY29uc3QgeyByZXR1cm4gb3RHZXRUYXNrbGV0U2NoZWR1bGVyKCk7IH0KKyNlbmRpZgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgcGFyZW50IG90SW5zdGFuY2Ugc3RydWN0dXJlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZSwgb3IgTlVMTCBpZiB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gZmluYWxpemVkLgorICAgICAqCisgICAgICovCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgb3RJbnN0YW5jZSAqR2V0SW5zdGFuY2Uodm9pZCkgY29uc3Q7CisjZWxzZQorICAgIG90SW5zdGFuY2UgKkdldEluc3RhbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG90R2V0SW5zdGFuY2UoKTsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGFza2xldFNjaGVkdWxlciAgQSByZWZlcmVuY2UgdG8gdGhlIFRhc2tsZXRTY2hlZHVsZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBUYXNrbGV0U2NoZWR1bGVyTG9jYXRvcihUYXNrbGV0U2NoZWR1bGVyICZhVGFza2xldFNjaGVkdWxlcik6IExvY2F0b3IoYVRhc2tsZXRTY2hlZHVsZXIpIHsgfQorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBsb2NhdG9yIGZvciBJcDYgb2JqZWN0LgorICoKKyAqLworY2xhc3MgSXA2TG9jYXRvcjogcHJpdmF0ZSBMb2NhdG9yPElwNjo6SXA2PgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIElwNi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICAgQSByZWZlcmVuY2UgdG8gdGhlIElwNi4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIElwNjo6SXA2ICZHZXRJcDYodm9pZCkgY29uc3QgeyByZXR1cm4gbUxvY2F0b3JPYmplY3Q7IH0KKyNlbHNlCisgICAgSXA2OjpJcDYgJkdldElwNih2b2lkKSBjb25zdCB7IHJldHVybiBvdEdldElwNigpOyB9CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGZpbmFsaXplZC4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIG90SW5zdGFuY2UgKkdldEluc3RhbmNlKHZvaWQpIGNvbnN0OworI2Vsc2UKKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBvdEdldEluc3RhbmNlKCk7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlwNiAgQSByZWZlcmVuY2UgdG8gdGhlIElwNi4KKyAgICAgKgorICAgICAqLworICAgIElwNkxvY2F0b3IoSXA2OjpJcDYgJmFJcDYpOiBMb2NhdG9yKGFJcDYpIHsgfQorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgbG9jYXRvciBmb3IgIG90SW5zdGFuY2Ugb2JqZWN0CisgKgorICovCitjbGFzcyBJbnN0YW5jZUxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgcG9pbnRlciB0byB0aGUgcGFyZW50IG90SW5zdGFuY2Ugc3RydWN0dXJlLCBvciBOVUxMIGlmIHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBmaW5hbGl6ZWQuCisgICAgICoKKyAgICAgKi8KKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBtSW5zdGFuY2U7IH0KKyNlbHNlCisgICAgb3RJbnN0YW5jZSAqR2V0SW5zdGFuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gb3RHZXRJbnN0YW5jZSgpOyB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIHRoZSBvdEluc3RhbmNlLgorICAgICAqCisgICAgICovCisgICAgSW5zdGFuY2VMb2NhdG9yKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICAgICAgOiBtSW5zdGFuY2UoYUluc3RhbmNlKQorI2VuZGlmCisgICAgeworICAgICAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKyAgICB9CisKK3ByaXZhdGU6CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgb3RJbnN0YW5jZSAqbUluc3RhbmNlOworI2VuZGlmCit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIExPQ0FUT1JfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL2xvZ2dpbmcuY3BwIGIvc3JjL2NvcmUvY29tbW9uL2xvZ2dpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NGY1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vbG9nZ2luZy5jcHAKQEAgLTAsMCArMSw0MTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHRhc2tsZXQgc2NoZWR1bGVyLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImxvZ2dpbmcudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImxvZ2dpbmcuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisKKyNpZm5kZWYgV0lORE9XU19MT0dHSU5HCisjZGVmaW5lIG90TG9nRHVtcChhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9vdER5bmFtaWNMb2coYUluc3RhbmNlLCBhTG9nTGV2ZWwsIGFMb2dSZWdpb24sIGFGb3JtYXQgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1NVRkZJWCwgIyMgX19WQV9BUkdTX18pCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BLVF9EVU1QID09IDEKKy8qKgorICogVGhpcyBzdGF0aWMgbWV0aG9kIG91dHB1dHMgYSBsaW5lIG9mIHRoZSBtZW1vcnkgZHVtcC4KKyAqCisgKiBAcGFyYW1baW5dICBhTG9nTGV2ZWwgICBUaGUgbG9nIGxldmVsLgorICogQHBhcmFtW2luXSAgYUxvZ1JlZ2lvbiAgVGhlIGxvZyByZWdpb24uCisgKiBAcGFyYW1baW5dICBhQnVmICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgIE51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyLgorICoKKyAqLworc3RhdGljIHZvaWQgRHVtcExpbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExvZ0xldmVsIGFMb2dMZXZlbCwgb3RMb2dSZWdpb24gYUxvZ1JlZ2lvbiwgY29uc3Qgdm9pZCAqYUJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBhTGVuZ3RoKQoreworICAgIGNoYXIgYnVmWzgwXTsKKyAgICBjaGFyICpjdXIgPSBidWY7CisKKyAgICBzbnByaW50ZihjdXIsIHNpemVvZihidWYpIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjdXIgLSBidWYpLCAifCIpOworICAgIGN1ciArPSBzdHJsZW4oY3VyKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChpIDwgYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc25wcmludGYoY3VyLCBzaXplb2YoYnVmKSAtIHN0YXRpY19jYXN0PHNpemVfdD4oY3VyIC0gYnVmKSwgIiAlMDJYIiwgKCh1aW50OF90ICopKGFCdWYpKVtpXSk7CisgICAgICAgICAgICBjdXIgKz0gc3RybGVuKGN1cik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzbnByaW50ZihjdXIsIHNpemVvZihidWYpIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjdXIgLSBidWYpLCAiIC4uIik7CisgICAgICAgICAgICBjdXIgKz0gc3RybGVuKGN1cik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoISgoaSArIDEpICUgOCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNucHJpbnRmKGN1ciwgc2l6ZW9mKGJ1ZikgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KGN1ciAtIGJ1ZiksICIgfCIpOworICAgICAgICAgICAgY3VyICs9IHN0cmxlbihjdXIpOworICAgICAgICB9CisgICAgfQorCisgICAgc25wcmludGYoY3VyLCBzaXplb2YoYnVmKSAtIHN0YXRpY19jYXN0PHNpemVfdD4oY3VyIC0gYnVmKSwgIiAiKTsKKyAgICBjdXIgKz0gc3RybGVuKGN1cik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2OyBpKyspCisgICAgeworICAgICAgICBjaGFyIGMgPSAweDdmICYgKChjaGFyICopKGFCdWYpKVtpXTsKKworICAgICAgICBpZiAoaSA8IGFMZW5ndGggJiYgaXNwcmludChjKSkKKyAgICAgICAgeworICAgICAgICAgICAgc25wcmludGYoY3VyLCBzaXplb2YoYnVmKSAtIHN0YXRpY19jYXN0PHNpemVfdD4oY3VyIC0gYnVmKSwgIiVjIiwgYyk7CisgICAgICAgICAgICBjdXIgKz0gc3RybGVuKGN1cik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzbnByaW50ZihjdXIsIHNpemVvZihidWYpIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjdXIgLSBidWYpLCAiLiIpOworICAgICAgICAgICAgY3VyICs9IHN0cmxlbihjdXIpOworICAgICAgICB9CisgICAgfQorCisgICAgb3RMb2dEdW1wKCIlcyIsIGJ1Zik7CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKK30KKwordm9pZCBvdER1bXAob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExvZ0xldmVsIGFMb2dMZXZlbCwgb3RMb2dSZWdpb24gYUxvZ1JlZ2lvbiwgY29uc3QgY2hhciAqYUlkLCBjb25zdCB2b2lkICphQnVmLAorICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFMZW5ndGgpCit7CisgICAgc2l6ZV90IGlkbGVuID0gc3RybGVuKGFJZCk7CisgICAgY29uc3Qgc2l6ZV90IHdpZHRoID0gNzI7CisgICAgY2hhciBidWZbODBdOworICAgIGNoYXIgKmN1ciA9IGJ1ZjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKHdpZHRoIC0gaWRsZW4pIC8gMiAtIDU7IGkrKykKKyAgICB7CisgICAgICAgIHNucHJpbnRmKGN1ciwgc2l6ZW9mKGJ1ZikgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KGN1ciAtIGJ1ZiksICI9Iik7CisgICAgICAgIGN1ciArPSBzdHJsZW4oY3VyKTsKKyAgICB9CisKKyAgICBzbnByaW50ZihjdXIsIHNpemVvZihidWYpIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjdXIgLSBidWYpLCAiWyVzIGxlbj0lMDN1XSIsIGFJZCwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFMZW5ndGgpKTsKKyAgICBjdXIgKz0gc3RybGVuKGN1cik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICh3aWR0aCAtIGlkbGVuKSAvIDIgLSA0OyBpKyspCisgICAgeworICAgICAgICBzbnByaW50ZihjdXIsIHNpemVvZihidWYpIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjdXIgLSBidWYpLCAiPSIpOworICAgICAgICBjdXIgKz0gc3RybGVuKGN1cik7CisgICAgfQorCisgICAgb3RMb2dEdW1wKCIlcyIsIGJ1Zik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFMZW5ndGg7IGkgKz0gMTYpCisgICAgeworICAgICAgICBEdW1wTGluZShhSW5zdGFuY2UsIGFMb2dMZXZlbCwgYUxvZ1JlZ2lvbiwgKHVpbnQ4X3QgKikoYUJ1ZikgKyBpLCAoYUxlbmd0aCAtIGkpIDwgMTYgPyAoYUxlbmd0aCAtIGkpIDogMTYpOworICAgIH0KKworICAgIGN1ciA9IGJ1ZjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2lkdGg7IGkrKykKKyAgICB7CisgICAgICAgIHNucHJpbnRmKGN1ciwgc2l6ZW9mKGJ1ZikgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KGN1ciAtIGJ1ZiksICItIik7CisgICAgICAgIGN1ciArPSBzdHJsZW4oY3VyKTsKKyAgICB9CisKKyAgICBvdExvZ0R1bXAoIiVzIiwgYnVmKTsKK30KKyNlbHNlIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19QS1RfRFVNUAordm9pZCBvdER1bXAob3RJbnN0YW5jZSAqLCBvdExvZ0xldmVsLCBvdExvZ1JlZ2lvbiwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIGNvbnN0IHNpemVfdCkge30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUEtUX0RVTVAKKworI2lmZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX0xFVkVMCitjb25zdCBjaGFyICpvdExvZ0xldmVsVG9TdHJpbmcob3RMb2dMZXZlbCBhTGV2ZWwpCit7CisgICAgY29uc3QgY2hhciAqcmV0dmFsOworCisgICAgc3dpdGNoIChhTGV2ZWwpCisgICAgeworICAgIGNhc2UgT1RfTE9HX0xFVkVMX05PTkU6CisgICAgICAgIHJldHZhbCA9ICJOT05FIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19MRVZFTF9DUklUOgorICAgICAgICByZXR2YWwgPSAiQ1JJVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfTEVWRUxfV0FSTjoKKyAgICAgICAgcmV0dmFsID0gIldBUk4iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfTE9HX0xFVkVMX0lORk86CisgICAgICAgIHJldHZhbCA9ICJJTkZPIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19MRVZFTF9ERUJHOgorICAgICAgICByZXR2YWwgPSAiREVCRyI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dmFsID0gIi0tLS0iOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX1JFR0lPTgorCisjaWZkZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OCitjb25zdCBjaGFyICpvdExvZ1JlZ2lvblRvU3RyaW5nKG90TG9nUmVnaW9uIGFSZWdpb24pCit7CisgICAgY29uc3QgY2hhciAqcmV0dmFsOworCisgICAgc3dpdGNoIChhUmVnaW9uKQorICAgIHsKKyAgICBjYXNlIE9UX0xPR19SRUdJT05fQVBJOgorICAgICAgICByZXR2YWwgPSAiLUFQSS0tLS0tIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19SRUdJT05fTUxFOgorICAgICAgICByZXR2YWwgPSAiLU1MRS0tLS0tIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19SRUdJT05fQ09BUDoKKyAgICAgICAgcmV0dmFsID0gIi1DT0FQLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX0FSUDoKKyAgICAgICAgcmV0dmFsID0gIi1BUlAtLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX05FVF9EQVRBOgorICAgICAgICByZXR2YWwgPSAiLU4tREFUQS0tIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19SRUdJT05fSUNNUDoKKyAgICAgICAgcmV0dmFsID0gIi1JQ01QLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX0lQNjoKKyAgICAgICAgcmV0dmFsID0gIi1JUDYtLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX01BQzoKKyAgICAgICAgcmV0dmFsID0gIi1NQUMtLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX01FTToKKyAgICAgICAgcmV0dmFsID0gIi1NRU0tLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX05DUDoKKyAgICAgICAgcmV0dmFsID0gIi1OQ1AtLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX01FU0hfQ09QOgorICAgICAgICByZXR2YWwgPSAiLU1FU0gtQ1AtIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19SRUdJT05fTkVUX0RJQUc6CisgICAgICAgIHJldHZhbCA9ICItRElBRy0tLS0iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfTE9HX1JFR0lPTl9QTEFURk9STToKKyAgICAgICAgcmV0dmFsID0gIi1QTEFULS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dmFsID0gIi0tLS0tLS0tLSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OCisKK2NvbnN0IGNoYXIgKm90VGhyZWFkRXJyb3JUb1N0cmluZyhvdEVycm9yIGFFcnJvcikKK3sKKyAgICBjb25zdCBjaGFyICpyZXR2YWw7CisKKyAgICBzd2l0Y2ggKGFFcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICByZXR2YWwgPSAiTm9uZSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9GQUlMRUQ6CisgICAgICAgIHJldHZhbCA9ICJGYWlsZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRFJPUDoKKyAgICAgICAgcmV0dmFsID0gIkRyb3AiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzoKKyAgICAgICAgcmV0dmFsID0gIk5vQnVmcyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT19ST1VURToKKyAgICAgICAgcmV0dmFsID0gIk5vUm91dGUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQlVTWToKKyAgICAgICAgcmV0dmFsID0gIkJ1c3kiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfUEFSU0U6CisgICAgICAgIHJldHZhbCA9ICJQYXJzZSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9JTlZBTElEX0FSR1M6CisgICAgICAgIHJldHZhbCA9ICJJbnZhbGlkQXJncyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9TRUNVUklUWToKKyAgICAgICAgcmV0dmFsID0gIlNlY3VyaXR5IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0FERFJFU1NfUVVFUlk6CisgICAgICAgIHJldHZhbCA9ICJBZGRyZXNzUXVlcnkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQUREUkVTUzoKKyAgICAgICAgcmV0dmFsID0gIk5vQWRkcmVzcyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9BQk9SVDoKKyAgICAgICAgcmV0dmFsID0gIkFib3J0IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDoKKyAgICAgICAgcmV0dmFsID0gIk5vdEltcGxlbWVudGVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0lOVkFMSURfU1RBVEU6CisgICAgICAgIHJldHZhbCA9ICJJbnZhbGlkU3RhdGUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQUNLOgorICAgICAgICByZXR2YWwgPSAiTm9BY2siOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRToKKyAgICAgICAgcmV0dmFsID0gIkNoYW5uZWxBY2Nlc3NGYWlsdXJlIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0RFVEFDSEVEOgorICAgICAgICByZXR2YWwgPSAiRGV0YWNoZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRkNTOgorICAgICAgICByZXR2YWwgPSAiRmNzRXJyIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PX0ZSQU1FX1JFQ0VJVkVEOgorICAgICAgICByZXR2YWwgPSAiTm9GcmFtZVJlY2VpdmVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1VOS05PV05fTkVJR0hCT1I6CisgICAgICAgIHJldHZhbCA9ICJVbmtub3duTmVpZ2hib3IiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfSU5WQUxJRF9TT1VSQ0VfQUREUkVTUzoKKyAgICAgICAgcmV0dmFsID0gIkludmFsaWRTb3VyY2VBZGRyZXNzIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1dISVRFTElTVF9GSUxURVJFRDoKKyAgICAgICAgcmV0dmFsID0gIldoaXRlbGlzdEZpbHRlcmVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0RFU1RJTkFUSU9OX0FERFJFU1NfRklMVEVSRUQ6CisgICAgICAgIHJldHZhbCA9ICJEZXN0aW5hdGlvbkFkZHJlc3NGaWx0ZXJlZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT1RfRk9VTkQ6CisgICAgICAgIHJldHZhbCA9ICJOb3RGb3VuZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9BTFJFQURZOgorICAgICAgICByZXR2YWwgPSAiQWxyZWFkeSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9CTEFDS0xJU1RfRklMVEVSRUQ6CisgICAgICAgIHJldHZhbCA9ICJCbGFja2xpc3RGaWx0ZXJlZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9JUDZfQUREUkVTU19DUkVBVElPTl9GQUlMVVJFOgorICAgICAgICByZXR2YWwgPSAiSXB2NkFkZHJlc3NDcmVhdGlvbkZhaWx1cmUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9UX0NBUEFCTEU6CisgICAgICAgIHJldHZhbCA9ICJOb3RDYXBhYmxlIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1JFU1BPTlNFX1RJTUVPVVQ6CisgICAgICAgIHJldHZhbCA9ICJSZXNwb25zZVRpbWVvdXQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRFVQTElDQVRFRDoKKyAgICAgICAgcmV0dmFsID0gIkR1cGxpY2F0ZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfUkVBU1NFTUJMWV9USU1FT1VUOgorICAgICAgICByZXR2YWwgPSAiUmVhc3NlbWJseVRpbWVvdXQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9UX1RNRjoKKyAgICAgICAgcmV0dmFsID0gIk5vdFRtZiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT1RfTE9XUEFOX0RBVEFfRlJBTUU6CisgICAgICAgIHJldHZhbCA9ICJOb25Mb3dwYW5EYXRhRnJhbWUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRElTQUJMRURfRkVBVFVSRToKKyAgICAgICAgcmV0dmFsID0gIkRpc2FibGVkRmVhdHVyZSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9HRU5FUklDOgorICAgICAgICByZXR2YWwgPSAiR2VuZXJpY0Vycm9yIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR2YWwgPSAiVW5rbm93bkVycm9yVHlwZSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL2xvZ2dpbmcuaHBwIGIvc3JjL2NvcmUvY29tbW9uL2xvZ2dpbmcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMjAzMjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vbG9nZ2luZy5ocHAKQEAgLTAsMCArMSwxMzk1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIGRlYnVnZ2luZy4KKyAqLworCisjaWZuZGVmIExPR0dJTkdfSFBQXworI2RlZmluZSBMT0dHSU5HX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvaW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisKKyNpZmRlZiBXSU5ET1dTX0xPR0dJTkcKKyNpZmRlZiBfS0VSTkVMX01PREUKKyNpbmNsdWRlIDx3ZG0uaD4KKyNlbmRpZgorI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy13aW5kb3dzLmgiCisjaWZkZWYgV1BQX05BTUUKKyNpbmNsdWRlIFdQUF9OQU1FCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZm5kZWYgV0lORE9XU19MT0dHSU5HCisjZGVmaW5lIG90TG9nRnVuY0VudHJ5KCkKKyNkZWZpbmUgb3RMb2dGdW5jRW50cnlNc2coYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0Z1bmNFeGl0KCkKKyNkZWZpbmUgb3RMb2dGdW5jRXhpdE1zZyhhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90TG9nQ3JpdAorICoKKyAqIExvZ2dpbmcgYXQgbG9nIGxldmVsIGNyaXRpY2FsLgorICoKKyAqIEBwYXJhbVtpbl0gIGFSZWdpb24gIFRoZSBsb2cgcmVnaW9uLgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMID49IE9UX0xPR19MRVZFTF9DUklUCisjZGVmaW5lIG90TG9nQ3JpdChhSW5zdGFuY2UsIGFSZWdpb24sIGFGb3JtYXQsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9vdExvZ0Zvcm1hdHRlcihhSW5zdGFuY2UsIE9UX0xPR19MRVZFTF9DUklULCBhUmVnaW9uLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIG90TG9nQ3JpdChhSW5zdGFuY2UsIGFSZWdpb24sIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dXYXJuCisgKgorICogTG9nZ2luZyBhdCBsb2cgbGV2ZWwgd2FybmluZy4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVnaW9uICBUaGUgbG9nIHJlZ2lvbi4KKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCA+PSBPVF9MT0dfTEVWRUxfV0FSTgorI2RlZmluZSBvdExvZ1dhcm4oYUluc3RhbmNlLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfb3RMb2dGb3JtYXR0ZXIoYUluc3RhbmNlLCBPVF9MT0dfTEVWRUxfV0FSTiwgYVJlZ2lvbiwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ1dhcm4oYUluc3RhbmNlLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90TG9nSW5mbworICoKKyAqIExvZ2dpbmcgYXQgbG9nIGxldmVsIGluZm8uCisgKgorICogQHBhcmFtW2luXSAgYVJlZ2lvbiAgVGhlIGxvZyByZWdpb24uCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUwgPj0gT1RfTE9HX0xFVkVMX0lORk8KKyNkZWZpbmUgb3RMb2dJbmZvKGFJbnN0YW5jZSwgYVJlZ2lvbiwgYUZvcm1hdCwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX290TG9nRm9ybWF0dGVyKGFJbnN0YW5jZSwgT1RfTE9HX0xFVkVMX0lORk8sIGFSZWdpb24sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dJbmZvKGFJbnN0YW5jZSwgYVJlZ2lvbiwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0RlYmcKKyAqCisgKiBMb2dnaW5nIGF0IGxvZyBsZXZlbCBkZWJ1Zy4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVnaW9uICBUaGUgbG9nIHJlZ2lvbi4KKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCA+PSBPVF9MT0dfTEVWRUxfREVCRworI2RlZmluZSBvdExvZ0RlYmcoYUluc3RhbmNlLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfb3RMb2dGb3JtYXR0ZXIoYUluc3RhbmNlLCBPVF9MT0dfTEVWRUxfREVCRywgYVJlZ2lvbiwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ0RlYmcoYUluc3RhbmNlLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pCisjZW5kaWYKKworI2lmbmRlZiBXSU5ET1dTX0xPR0dJTkcKKworLyoqCisgKiBAZGVmIG90TG9nQ3JpdEFwaQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGNyaXRpY2FsIGZvciB0aGUgQVBJIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nV2FybkFwaQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIHdhcm5pbmcgZm9yIHRoZSBBUEkgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dJbmZvQXBpCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgaW5mbyBmb3IgdGhlIEFQSSByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ0RlYmdBcGkKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBkZWJ1ZyBmb3IgdGhlIEFQSSByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0FQSSA9PSAxCisjZGVmaW5lIG90TG9nQ3JpdEFwaShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9BUEksIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5BcGkoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fQVBJLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvQXBpKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0FQSSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ0FwaShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9BUEksIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0QXBpKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5BcGkoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nSW5mb0FwaShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnQXBpKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0NyaXRNZXNoQ29QCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgY3JpdGljYWwgZm9yIHRoZSBNTEUgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dXYXJuTWVzaENvUAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIHdhcm5pbmcgZm9yIHRoZSBNTEUgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dJbmZvTWVzaENvUAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBNTEUgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dEZWJnTWVzaENvUAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGRlYnVnIGZvciB0aGUgTUxFIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUxFID09IDEKKyNkZWZpbmUgb3RMb2dDcml0TWVzaENvUChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NRVNIX0NPUCwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nV2Fybk1lc2hDb1AoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUVTSF9DT1AsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0luZm9NZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01FU0hfQ09QLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dEZWJnTWVzaENvUChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NRVNIX0NPUCwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ0NyaXRNZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5NZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9NZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0RlYmdNZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgb3RMb2dDcml0TWJlZFRscyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0TWVzaENvUChhSW5zdGFuY2UsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5NYmVkVGxzKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm5NZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nSW5mb01iZWRUbHMoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nSW5mb01lc2hDb1AoYUluc3RhbmNlLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dEZWJnTWJlZFRscyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnTWVzaENvUChhSW5zdGFuY2UsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0TWxlCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgY3JpdGljYWwgZm9yIHRoZSBNTEUgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dXYXJuTWxlCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgd2FybmluZyBmb3IgdGhlIE1MRSByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ0luZm9NbGUKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBpbmZvIGZvciB0aGUgTUxFIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ01sZQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGRlYnVnIGZvciB0aGUgTUxFIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUxFID09IDEKKyNkZWZpbmUgb3RMb2dDcml0TWxlKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0NyaXQoYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01MRSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nV2Fybk1sZShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dXYXJuKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NTEUsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5NbGVFcnIoYUluc3RhbmNlLCBhRXJyb3IsIGFGb3JtYXQsIC4uLikgICAgICAgICAgICAgICAgICAgIFwKKyAgICBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01BQywgIkVycm9yICVzOiAiIGFGb3JtYXQsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhhRXJyb3IpLCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvTWxlKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01MRSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ01sZShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NTEUsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0TWxlKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5NbGUoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nV2Fybk1sZUVycihhSW5zdGFuY2UsIGFFcnJvciwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9NbGUoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nRGViZ01sZShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0QXJwCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgY3JpdGljYWwgZm9yIHRoZSBFSUQtdG8tUkxPQyBtYXBwaW5nIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nV2FybkFycAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIHdhcm5pbmcgZm9yIHRoZSBFSUQtdG8tUkxPQyBtYXBwaW5nIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nSW5mb0FycAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBFSUQtdG8tUkxPQyBtYXBwaW5nIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ0FycAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGRlYnVnIGZvciB0aGUgRUlELXRvLVJMT0MgbWFwcGluZyByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0FSUCA9PSAxCisjZGVmaW5lIG90TG9nQ3JpdEFycChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9BUlAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5BcnAoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fQVJQLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvQXJwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0FSUCwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ0FycChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9BUlAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0QXJwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5BcnAoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nSW5mb0FycChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnQXJwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0NyaXROZXREYXRhCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgY3JpdGljYWwgZm9yIHRoZSBOZXR3b3JrIERhdGEgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dXYXJuTmV0RGF0YQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIHdhcm5pbmcgZm9yIHRoZSBOZXR3b3JrIERhdGEgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dJbmZvTmV0RGF0YQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBOZXR3b3JrIERhdGEgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dEZWJnTmV0RGF0YQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGRlYnVnIGZvciB0aGUgTmV0d29yayBEYXRhIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTkVUREFUQSA9PSAxCisjZGVmaW5lIG90TG9nQ3JpdE5ldERhdGEoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTkVUX0RBVEEsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5OZXREYXRhKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX05FVF9EQVRBLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvTmV0RGF0YShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9ORVRfREFUQSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ05ldERhdGEoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTkVUX0RBVEEsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0TmV0RGF0YShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dXYXJuTmV0RGF0YShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dJbmZvTmV0RGF0YShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnTmV0RGF0YShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0SWNtcAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGNyaXRpY2FsIGZvciB0aGUgSUNNUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nV2FybkljbXAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCB3YXJuaW5nIGZvciB0aGUgSUNNUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nSW5mb0ljbXAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBpbmZvIGZvciB0aGUgSUNNUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ0ljbXAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBkZWJ1ZyBmb3IgdGhlIElDTVB2NiByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0lDTVAgPT0gMQorI2RlZmluZSBvdExvZ0NyaXRJY21wKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0NyaXQoYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lDTVAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5JY21wKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lDTVAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0luZm9JY21wKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lDTVAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0RlYmdJY21wKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0RlYmcoYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lDTVAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0SWNtcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dXYXJuSWNtcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dJbmZvSWNtcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnSWNtcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0SXA2CisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgY3JpdGljYWwgZm9yIHRoZSBJUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nV2FybklwNgorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIHdhcm5pbmcgZm9yIHRoZSBJUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nSW5mb0lwNgorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBJUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ0lwNgorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGRlYnVnIGZvciB0aGUgSVB2NiByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0lQNiA9PSAxCisjZGVmaW5lIG90TG9nQ3JpdElwNihhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9JUDYsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5JcDYoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSVA2LCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvSXA2KGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lQNiwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ0lwNihhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9JUDYsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0SXA2KGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5JcDYoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nSW5mb0lwNihhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnSXA2KGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0NyaXRNYWMKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBjcml0aWNhbCBmb3IgdGhlIE1BQyByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ1dhcm5NYWMKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCB3YXJuaW5nIGZvciB0aGUgTUFDIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nSW5mb01hYworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBNQUMgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dEZWJnTWFjCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgZGVidWcgZm9yIHRoZSBNQUMgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19NQUMgPT0gMQorI2RlZmluZSBvdExvZ0NyaXRNYWMoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUFDLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dXYXJuTWFjKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01BQywgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nSW5mb01hYyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NQUMsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0RlYmdNYWMoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUFDLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dEZWJnTWFjRXJyKGFJbnN0YW5jZSwgYUVycm9yLCBhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICBcCisgICAgb3RMb2dXYXJuKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NQUMsICJFcnJvciAlczogIiBhRm9ybWF0LCBvdFRocmVhZEVycm9yVG9TdHJpbmcoYUVycm9yKSwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ0NyaXRNYWMoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nV2Fybk1hYyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dJbmZvTWFjKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0RlYmdNYWMoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nRGViZ01hY0VycihhSW5zdGFuY2UsIGFFcnJvciwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0NyaXRNZW0KKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBjcml0aWNhbCBmb3IgdGhlIG1lbW9yeSByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ1dhcm5NZW0KKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCB3YXJuaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nSW5mb01lbQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBtZW1vcnkgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dEZWJnTWVtCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgZGVidWcgZm9yIHRoZSBtZW1vcnkgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19NRU0gPT0gMQorI2RlZmluZSBvdExvZ0NyaXRNZW0oYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUVNLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dXYXJuTWVtKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01FTSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nSW5mb01lbShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NRU0sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0RlYmdNZW0oYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUVNLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIG90TG9nQ3JpdE1lbShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dXYXJuTWVtKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9NZW0oYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nRGViZ01lbShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0TmV0RGlhZworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGNyaXRpY2FsIGZvciB0aGUgTkVURElBRyByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ1dhcm5OZXREaWFnCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgd2FybmluZyBmb3IgdGhlIE5FVERJQUcgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dJbmZvTmV0RGlhZworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBORVRESUFHIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ05ldERpYWcKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBkZWJ1ZyBmb3IgdGhlIE5FVERJQUcgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19ORVRESUFHID09IDEKKyNkZWZpbmUgb3RMb2dDcml0TmV0RGlhZyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9ORVRfRElBRywgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nV2Fybk5ldERpYWcoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTkVUX0RJQUcsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0luZm9OZXREaWFnKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX05FVF9ESUFHLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dEZWJnTmV0RGlhZyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9ORVRfRElBRywgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ0NyaXROZXREaWFnKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5OZXREaWFnKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9OZXREaWFnKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0RlYmdOZXREaWFnKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0NlcnQKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBub25lIGZvciB0aGUgY2VydGlmaWNhdGlvbiB0ZXN0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HCisjZGVmaW5lIG90TG9nQ2VydE1lc2hDb1AoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9vdExvZ0Zvcm1hdHRlcihhSW5zdGFuY2UsIE9UX0xPR19MRVZFTF9OT05FLCBPVF9MT0dfUkVHSU9OX01FU0hfQ09QLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIG90TG9nQ2VydE1lc2hDb1AoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZW5kaWYKKworLyoqCisqIEBkZWYgb3RMb2dDcml0UGxhdAorKgorKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBjcml0aWNhbCBmb3IgdGhlIFBsYXRmb3JtIHJlZ2lvbi4KKyoKKyogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyoKKyovCisKKy8qKgorKiBAZGVmIG90TG9nV2FyblBsYXQKKyoKKyogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgd2FybmluZyBmb3IgdGhlIFBsYXRmb3JtIHJlZ2lvbi4KKyoKKyogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyoKKyovCisKKy8qKgorKiBAZGVmIG90TG9nSW5mb1BsYXQKKyoKKyogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgaW5mbyBmb3IgdGhlIFBsYXRmb3JtIHJlZ2lvbi4KKyoKKyogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyoKKyovCisKKy8qKgorKiBAZGVmIG90TG9nRGViZ1BsYXQKKyoKKyogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgZGVidWcgZm9yIHRoZSBQbGF0Zm9ybSByZWdpb24uCisqCisqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisqCisqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19QTEFURk9STSA9PSAxCisjZGVmaW5lIG90TG9nQ3JpdFBsYXQoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fUExBVEZPUk0sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5QbGF0KGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX1BMQVRGT1JNLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvUGxhdChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9QTEFURk9STSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ1BsYXQoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fUExBVEZPUk0sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0UGxhdChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dXYXJuUGxhdChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dJbmZvUGxhdChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnUGxhdChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0Q29hcAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGNyaXRpY2FsIGZvciB0aGUgQ29BUCByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ1dhcm5Db2FwCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgd2FybmluZyBmb3IgdGhlIENvQVAgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dJbmZvQ29hcAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBDb0FQIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ0NvYXAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBkZWJ1ZyBmb3IgdGhlIENvQVAgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19DT0FQID09IDEKKyNkZWZpbmUgb3RMb2dDcml0Q29hcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9DT0FQLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dXYXJuQ29hcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dXYXJuKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9DT0FQLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvQ29hcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9DT0FQLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvQ29hcEVycihhSW5zdGFuY2UsIGFFcnJvciwgYUZvcm1hdCwgLi4uKSAgICAgICAgICAgICAgIFwKKyAgICBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0NPQVAsICJFcnJvciAlczogIiBhRm9ybWF0LCBvdFRocmVhZEVycm9yVG9TdHJpbmcoYUVycm9yKSwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ0NvYXAoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fQ09BUCwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ0NyaXRDb2FwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5Db2FwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9Db2FwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9Db2FwRXJyKGFJbnN0YW5jZSwgYUVycm9yLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nRGViZ0NvYXAoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZW5kaWYKKworI2VuZGlmIC8vIFdJTkRPV1NfTE9HR0lORworCisvKioKKyAqIEBkZWYgb3REdW1wQ3JpdAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGNyaXRpY2FsLgorICoKKyAqIEBwYXJhbVtpbl0gIGFSZWdpb24gIFRoZSBsb2cgcmVnaW9uLgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCA+PSBPVF9MT0dfTEVWRUxfQ1JJVAorI2RlZmluZSBvdER1bXBDcml0KGFJbnN0YW5jZSwgYVJlZ2lvbiwgYUlkLCBhQnVmLCBhTGVuZ3RoKSAgICAgICAgICAgICAgICAgIFwKKyAgICBvdER1bXAoYUluc3RhbmNlLCBPVF9MT0dfTEVWRUxfQ1JJVCwgYVJlZ2lvbiwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2Vsc2UKKyNkZWZpbmUgb3REdW1wQ3JpdChhSW5zdGFuY2UsIGFSZWdpb24sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3REdW1wV2FybgorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIHdhcm5pbmcuCisgKgorICogQHBhcmFtW2luXSAgYVJlZ2lvbiAgVGhlIGxvZyByZWdpb24uCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMID49IE9UX0xPR19MRVZFTF9XQVJOCisjZGVmaW5lIG90RHVtcFdhcm4oYUluc3RhbmNlLCBhUmVnaW9uLCBhSWQsIGFCdWYsIGFMZW5ndGgpICAgICAgICAgICAgICAgICAgXAorICAgIG90RHVtcChhSW5zdGFuY2UsIE9UX0xPR19MRVZFTF9XQVJOLCBhUmVnaW9uLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZWxzZQorI2RlZmluZSBvdER1bXBXYXJuKGFJbnN0YW5jZSwgYVJlZ2lvbiwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdER1bXBJbmZvCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgaW5mby4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVnaW9uICBUaGUgbG9nIHJlZ2lvbi4KKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUwgPj0gT1RfTE9HX0xFVkVMX0lORk8KKyNkZWZpbmUgb3REdW1wSW5mbyhhSW5zdGFuY2UsIGFSZWdpb24sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgICAgICAgICAgICAgICAgICBcCisgICAgb3REdW1wKGFJbnN0YW5jZSwgT1RfTE9HX0xFVkVMX0lORk8sIGFSZWdpb24sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNlbHNlCisjZGVmaW5lIG90RHVtcEluZm8oYUluc3RhbmNlLCBhUmVnaW9uLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90RHVtcERlYmcKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBkZWJ1Zy4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVnaW9uICBUaGUgbG9nIHJlZ2lvbi4KKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUwgPj0gT1RfTE9HX0xFVkVMX0RFQkcKKyNkZWZpbmUgb3REdW1wRGViZyhhSW5zdGFuY2UsIGFSZWdpb24sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgICAgICAgICAgICAgICAgICBcCisgICAgb3REdW1wKGFJbnN0YW5jZSwgT1RfTE9HX0xFVkVMX0RFQkcsIGFSZWdpb24sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNlbHNlCisjZGVmaW5lIG90RHVtcERlYmcoYUluc3RhbmNlLCBhUmVnaW9uLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90RHVtcENyaXROZXREYXRhCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBOZXR3b3JrIERhdGEuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wV2Fybk5ldERhdGEKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCB3YXJuaW5nIGFuZCByZWdpb24gTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90RHVtcEluZm9OZXREYXRhCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgaW5mbyBhbmQgcmVnaW9uIE5ldHdvcmsgRGF0YS4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBEZWJnTmV0RGF0YQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGRlYnVnIGFuZCByZWdpb24gTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTkVUREFUQSA9PSAxCisjZGVmaW5lIG90RHVtcENyaXROZXREYXRhKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9ORVRfREFUQSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuTmV0RGF0YShhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTkVUX0RBVEEsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wSW5mb05ldERhdGEoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcEluZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX05FVF9EQVRBLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcERlYmdOZXREYXRhKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9ORVRfREFUQSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2Vsc2UKKyNkZWZpbmUgb3REdW1wQ3JpdE5ldERhdGEoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5OZXREYXRhKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvTmV0RGF0YShhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ05ldERhdGEoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90RHVtcENyaXRNbGUKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBkZWJ1ZyBhbmQgcmVnaW9uIE1MRS4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBXYXJuTWxlCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgd2FybmluZyBhbmQgcmVnaW9uIE1MRS4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBJbmZvTWxlCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgaW5mbyBhbmQgcmVnaW9uIE1MRS4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBEZWJnTWxlCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBNTEUuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19NTEUgPT0gMQorI2RlZmluZSBvdER1bXBDcml0TWxlKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NTEUsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wV2Fybk1sZShhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUxFLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcEluZm9NbGUoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcEluZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01MRSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnTWxlKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NTEUsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNlbHNlCisjZGVmaW5lIG90RHVtcENyaXRNbGUoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5NbGUoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcEluZm9NbGUoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcERlYmdNbGUoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90RHVtcENyaXRBcnAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBkZWJ1ZyBhbmQgcmVnaW9uIEVJRC10by1STE9DIG1hcHBpbmcuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wV2FybkFycAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIHdhcm5pbmcgYW5kIHJlZ2lvbiBFSUQtdG8tUkxPQyBtYXBwaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90RHVtcEluZm9BcnAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBpbmZvIGFuZCByZWdpb24gRUlELXRvLVJMT0MgbWFwcGluZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBEZWJnQXJwCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBFSUQtdG8tUkxPQyBtYXBwaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfQVJQID09IDEKKyNkZWZpbmUgb3REdW1wQ3JpdEFycChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fQVJQLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5BcnAoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcFdhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0FSUCwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvQXJwKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9BUlAsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ0FycChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fQVJQLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZWxzZQorI2RlZmluZSBvdER1bXBDcml0QXJwKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuQXJwKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvQXJwKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnQXJwKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdER1bXBDcml0SWNtcAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGRlYnVnIGFuZCByZWdpb24gSUNNUHY2LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90RHVtcFdhcm5JY21wCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgd2FybmluZyBhbmQgcmVnaW9uIElDTVB2Ni4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBJbmZvSWNtcAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGluZm8gYW5kIHJlZ2lvbiBJQ01QdjYuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wRGViZ0ljbXAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBkZWJ1ZyBhbmQgcmVnaW9uIElDTVB2Ni4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0lDTVAgPT0gMQorI2RlZmluZSBvdER1bXBDcml0SWNtcChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSUNNUCwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuSWNtcChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSUNNUCwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvSWNtcChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wSW5mbyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSUNNUCwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnSWNtcChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSUNNUCwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2Vsc2UKKyNkZWZpbmUgb3REdW1wQ3JpdEljbXAoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5JY21wKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvSWNtcChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ0ljbXAoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90RHVtcENyaXRJcDYKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBkZWJ1ZyBhbmQgcmVnaW9uIElQdjYuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wV2FybklwNgorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIHdhcm5pbmcgYW5kIHJlZ2lvbiBJUHY2LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90RHVtcEluZm9JcDYKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBpbmZvIGFuZCByZWdpb24gSVB2Ni4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBEZWJnSXA2CisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBJUHY2LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfSVA2ID09IDEKKyNkZWZpbmUgb3REdW1wQ3JpdElwNihhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSVA2LCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5JcDYoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcFdhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lQNiwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvSXA2KGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9JUDYsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ0lwNihhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSVA2LCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZWxzZQorI2RlZmluZSBvdER1bXBDcml0SXA2KGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuSXA2KGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvSXA2KGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnSXA2KGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdER1bXBDcml0TWFjCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBNQUMuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wV2Fybk1hYworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIHdhcm5pbmcgYW5kIHJlZ2lvbiBNQUMuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wSW5mb01hYworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGluZm8gYW5kIHJlZ2lvbiBNQUMuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wRGViZ01hYworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGRlYnVnIGFuZCByZWdpb24gTUFDLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUFDID09IDEKKyNkZWZpbmUgb3REdW1wQ3JpdE1hYyhhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUFDLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5NYWMoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcFdhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01BQywgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvTWFjKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NQUMsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ01hYyhhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUFDLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZWxzZQorI2RlZmluZSBvdER1bXBDcml0TWFjKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuTWFjKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvTWFjKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnTWFjKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdER1bXBDcml0TWVtCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBtZW1vcnkuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wV2Fybk1lbQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIHdhcm5pbmcgYW5kIHJlZ2lvbiBtZW1vcnkuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wSW5mb01lbQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGluZm8gYW5kIHJlZ2lvbiBtZW1vcnkuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wRGViZ01lbQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGRlYnVnIGFuZCByZWdpb24gbWVtb3J5LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUVNID09IDEKKyNkZWZpbmUgb3REdW1wQ3JpdE1lbShhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUVNLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5NZW0oYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcFdhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01FTSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvTWVtKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NRU0sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ01lbShhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUVNLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZWxzZQorI2RlZmluZSBvdER1bXBDcml0TWVtKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuTWVtKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvTWVtKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnTWVtKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdER1bXBDZXJ0CisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgbm9uZSBmb3IgdGhlIGNlcnRpZmljYXRpb24gdGVzdC4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0VSVF9MT0cKKyNkZWZpbmUgb3REdW1wQ2VydE1lc2hDb1AoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpICAgICAgICAgICAgICAgICAgICBcCisgICAgb3REdW1wKGFJbnN0YW5jZSwgT1RfTE9HX0xFVkVMX05PTkUsIE9UX0xPR19SRUdJT05fTUVTSF9DT1AsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNlbHNlCisjZGVmaW5lIG90RHVtcENlcnRNZXNoQ29QKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogVGhpcyBtZXRob2QgZHVtcHMgYnl0ZXMgdG8gdGhlIGxvZyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZhc2hpb24uCisgKgorICogQHBhcmFtW2luXSAgYUxldmVsICAgVGhlIGxvZyBsZXZlbC4KKyAqIEBwYXJhbVtpbl0gIGFSZWdpb24gIFRoZSBsb2cgcmVnaW9uLgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLwordm9pZCBvdER1bXAob3RJbnN0YW5jZSAqYUludHNhbmNlLCBvdExvZ0xldmVsIGFMZXZlbCwgb3RMb2dSZWdpb24gYVJlZ2lvbiwgY29uc3QgY2hhciAqYUlkLCBjb25zdCB2b2lkICphQnVmLAorICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFMZW5ndGgpOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfTEVWRUwgPT0gMQorLyoqCisqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSBsb2cgbGV2ZWwgdmFsdWUgaW50byBhIHN0cmluZworKgorKiBAcGFyYW1baW5dICBhTGV2ZWwgIFRoZSBsb2cgbGV2ZWwuCisqCisqIEByZXR1cm5zIEEgY29uc3QgY2hhciBwb2ludGVyIHRvIHRoZSBDIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2cgbGV2ZWwuCisqCisqLworY29uc3QgY2hhciAqb3RMb2dMZXZlbFRvU3RyaW5nKG90TG9nTGV2ZWwgYUxldmVsKTsKKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OID09IDEKKy8qKgorICogVGhpcyBtZXRob2QgY29udmVydHMgdGhlIGxvZyByZWdpb24gdmFsdWUgaW50byBhIHN0cmluZworICoKKyAqIEBwYXJhbVtpbl0gIGFSZWdpb24gIFRoZSBsb2cgcmVnaW9uLgorICoKKyAqIEByZXR1cm5zIEEgY29uc3QgY2hhciBwb2ludGVyIHRvIHRoZSBDIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2cgcmVnaW9uLgorICoKKyAqLworY29uc3QgY2hhciAqb3RMb2dSZWdpb25Ub1N0cmluZyhvdExvZ1JlZ2lvbiBhUmVnaW9uKTsKKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfTEVWRUwgPT0gMQorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OID09IDEKKworLyoqCisgKiBMb2NhbC9wcml2YXRlIG1hY3JvIHRvIGZvcm1hdCB0aGUgbG9nIG1lc3NhZ2UKKyAqLworI2RlZmluZSBfb3RMb2dGb3JtYXR0ZXIoYUluc3RhbmNlLCBhTG9nTGV2ZWwsIGFSZWdpb24sIGFGb3JtYXQsIC4uLikgICAgICAgIFwKKyAgICBfb3REeW5hbWljTG9nKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFJbnN0YW5jZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhTG9nTGV2ZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYVJlZ2lvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJbJXNdJXM6ICIgYUZvcm1hdCBPUEVOVEhSRUFEX0NPTkZJR19MT0dfU1VGRklYLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBvdExvZ0xldmVsVG9TdHJpbmcoYUxvZ0xldmVsKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgb3RMb2dSZWdpb25Ub1N0cmluZyhhUmVnaW9uKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICMjIF9fVkFfQVJHU19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKworI2Vsc2UgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX1JFR0lPTgorCisvKioKKyogTG9jYWwvcHJpdmF0ZSBtYWNybyB0byBmb3JtYXQgdGhlIGxvZyBtZXNzYWdlCisqLworI2RlZmluZSBfb3RMb2dGb3JtYXR0ZXIoYUluc3RhbmMsIGFMb2dMZXZlbCwgYVJlZ2lvbiwgYUZvcm1hdCwgLi4uKSAgICAgICAgIFwKKyAgICBfb3REeW5hbWljTG9nKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFJbnN0YW5jZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhTG9nTGV2ZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYVJlZ2lvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJbJXNdOiAiIGFGb3JtYXQgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1NVRkZJWCwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBvdExvZ0xldmVsVG9TdHJpbmcoYUxvZ0xldmVsKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIyMgX19WQV9BUkdTX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKQorCisjZW5kaWYKKworI2Vsc2UgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX0xFVkVMCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUEVORF9SRUdJT04gPT0gMQorCisvKioKKyogTG9jYWwvcHJpdmF0ZSBtYWNybyB0byBmb3JtYXQgdGhlIGxvZyBtZXNzYWdlCisqLworI2RlZmluZSBfb3RMb2dGb3JtYXR0ZXIoYUluc3RhbmNlLCBhTG9nTGV2ZWwsIGFSZWdpb24sIGFGb3JtYXQsIC4uLikgICAgICAgIFwKKyAgICBfb3REeW5hbWljTG9nKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFJbnN0YW5jZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhTG9nTGV2ZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYVJlZ2lvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICIlczogIiBhRm9ybWF0IE9QRU5USFJFQURfQ09ORklHX0xPR19TVUZGSVgsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBvdExvZ1JlZ2lvblRvU3RyaW5nKGFSZWdpb24pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIyMgX19WQV9BUkdTX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKQorCisjZWxzZSAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OCisKKy8qKgorKiBMb2NhbC9wcml2YXRlIG1hY3JvIHRvIGZvcm1hdCB0aGUgbG9nIG1lc3NhZ2UKKyovCisjZGVmaW5lIF9vdExvZ0Zvcm1hdHRlcihhSW5zdGFjZSwgYUxvZ0xldmVsLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pICAgICAgICAgXAorICAgIF9vdER5bmFtaWNMb2coICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYUluc3RhbmNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFMb2dMZXZlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhUmVnaW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYUZvcm1hdCBPUEVOVEhSRUFEX0NPTkZJR19MT0dfU1VGRklYLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICMjIF9fVkFfQVJHU19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKworI2VuZGlmCisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUEVORF9SRUdJT04KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0xPR19MRVZFTCA9PSAxCisKKy8qKgorKiBMb2NhbC9wcml2YXRlIG1hY3JvIHRvIGR5bmFtaWNhbGx5IGZpbHRlciBsb2cgbGV2ZWwuCisqLworI2RlZmluZSBfb3REeW5hbWljTG9nKGFJbnN0YW5jZSwgYUxvZ0xldmVsLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChvdEdldER5bmFtaWNMb2dMZXZlbChhSW5zdGFuY2UpID49IGFMb2dMZXZlbCkgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX290UGxhdExvZyhhTG9nTGV2ZWwsIGFSZWdpb24sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKTsgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2Vsc2UgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfTE9HX0xFVkVMCisKKyNkZWZpbmUgX290RHluYW1pY0xvZyhhSW5zdGFuY2UsIGFMb2dMZXZlbCwgYVJlZ2lvbiwgYUZvcm1hdCwgLi4uKSAgICAgICAgICBcCisgICAgX290UGxhdExvZyhhTG9nTGV2ZWwsIGFSZWdpb24sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfTE9HX0xFVkVMCisKKy8qKgorICogYE9QRU5USFJFQURfQ09ORklHX1BMQVRfTE9HX0ZVTkNUSU9OYCBpcyBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIChzZWUgYG9wZW50aHJlYWQtY29yZS1kZWZhdWx0LWNvbmZpZy5oYCkgd2hpY2gKKyAqIHNwZWNpZmllcyB0aGUgZnVuY3Rpb24vbWFjcm8gdG8gYmUgdXNlZCBmb3IgbG9nZ2luZyBpbiBPcGVuVGhyZWFkLiBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byBgb3RQbGF0TG9nKClgLgorICovCisjZGVmaW5lIF9vdFBsYXRMb2coYUxvZ0xldmVsLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE9QRU5USFJFQURfQ09ORklHX1BMQVRfTE9HX0ZVTkNUSU9OKGFMb2dMZXZlbCwgYVJlZ2lvbiwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsKKyNlbmRpZgorCisjZW5kaWYgIC8vIExPR0dJTkdfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL21lc3NhZ2UuY3BwIGIvc3JjL2NvcmUvY29tbW9uL21lc3NhZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjODkwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vbWVzc2FnZS5jcHAKQEAgLTAsMCArMSwxMDUyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBtZXNzYWdlIGJ1ZmZlciBwb29sIGFuZCBtZXNzYWdlIGJ1ZmZlcnMuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAibWVzc2FnZS50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibWVzc2FnZS5ocHAiCisKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK01lc3NhZ2VQb29sOjpNZXNzYWdlUG9vbChvdEluc3RhbmNlICphSW5zdGFuY2UpIDoKKyAgICBJbnN0YW5jZUxvY2F0b3IoYUluc3RhbmNlKSwKKyAgICBtQWxsUXVldWUoKQoreworI2lmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorICAgIC8vIEluaXRpYWxpemUgUGxhdGZvcm0gYnVmZmVyIHBvb2wgbWFuYWdlbWVudC4KKyAgICBvdFBsYXRNZXNzYWdlUG9vbEluaXQoR2V0SW5zdGFuY2UoKSwga051bUJ1ZmZlcnMsIHNpemVvZihCdWZmZXIpKTsKKyNlbHNlCisgICAgbWVtc2V0KG1CdWZmZXJzLCAwLCBzaXplb2YobUJ1ZmZlcnMpKTsKKworICAgIG1GcmVlQnVmZmVycyA9IG1CdWZmZXJzOworCisgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGtOdW1CdWZmZXJzIC0gMTsgaSsrKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlcnNbaV0uU2V0TmV4dEJ1ZmZlcigmbUJ1ZmZlcnNbaSArIDFdKTsKKyAgICB9CisKKyAgICBtQnVmZmVyc1trTnVtQnVmZmVycyAtIDFdLlNldE5leHRCdWZmZXIoTlVMTCk7CisgICAgbU51bUZyZWVCdWZmZXJzID0ga051bUJ1ZmZlcnM7CisjZW5kaWYKK30KKworTWVzc2FnZSAqTWVzc2FnZVBvb2w6Ok5ldyh1aW50OF90IGFUeXBlLCB1aW50MTZfdCBhUmVzZXJ2ZWQpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxNZXNzYWdlICo+KE5ld0J1ZmZlcigpKSkgIT0gTlVMTCk7CisKKyAgICBtZW1zZXQobWVzc2FnZSwgMCwgc2l6ZW9mKCptZXNzYWdlKSk7CisgICAgbWVzc2FnZS0+U2V0TWVzc2FnZVBvb2wodGhpcyk7CisgICAgbWVzc2FnZS0+U2V0VHlwZShhVHlwZSk7CisgICAgbWVzc2FnZS0+U2V0UmVzZXJ2ZWQoYVJlc2VydmVkKTsKKyAgICBtZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKHRydWUpOworICAgIG1lc3NhZ2UtPlNldFByaW9yaXR5KGtEZWZhdWx0TWVzc2FnZVByaW9yaXR5KTsKKworICAgIGlmIChtZXNzYWdlLT5TZXRMZW5ndGgoMCkgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIEZyZWUobWVzc2FnZSk7CisgICAgICAgIG1lc3NhZ2UgPSBOVUxMOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKworb3RFcnJvciBNZXNzYWdlUG9vbDo6RnJlZShNZXNzYWdlICphTWVzc2FnZSkKK3sKKyAgICBhc3NlcnQoYU1lc3NhZ2UtPk5leHQoTWVzc2FnZUluZm86OmtMaXN0QWxsKSA9PSBOVUxMICYmCisgICAgICAgICAgIGFNZXNzYWdlLT5QcmV2KE1lc3NhZ2VJbmZvOjprTGlzdEFsbCkgPT0gTlVMTCk7CisKKyAgICBhc3NlcnQoYU1lc3NhZ2UtPk5leHQoTWVzc2FnZUluZm86OmtMaXN0SW50ZXJmYWNlKSA9PSBOVUxMICYmCisgICAgICAgICAgIGFNZXNzYWdlLT5QcmV2KE1lc3NhZ2VJbmZvOjprTGlzdEludGVyZmFjZSkgPT0gTlVMTCk7CisKKyAgICByZXR1cm4gRnJlZUJ1ZmZlcnMoc3RhdGljX2Nhc3Q8QnVmZmVyICo+KGFNZXNzYWdlKSk7Cit9CisKK0J1ZmZlciAqTWVzc2FnZVBvb2w6Ok5ld0J1ZmZlcih2b2lkKQoreworICAgIEJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorCisgICAgYnVmZmVyID0gc3RhdGljX2Nhc3Q8QnVmZmVyICo+KG90UGxhdE1lc3NhZ2VQb29sTmV3KEdldEluc3RhbmNlKCkpKTsKKworI2Vsc2UKKworICAgIGlmIChtRnJlZUJ1ZmZlcnMgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGJ1ZmZlciA9IG1GcmVlQnVmZmVyczsKKyAgICAgICAgbUZyZWVCdWZmZXJzID0gbUZyZWVCdWZmZXJzLT5HZXROZXh0QnVmZmVyKCk7CisgICAgICAgIGJ1ZmZlci0+U2V0TmV4dEJ1ZmZlcihOVUxMKTsKKyAgICAgICAgbU51bUZyZWVCdWZmZXJzLS07CisgICAgfQorCisjZW5kaWYKKworICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90TG9nSW5mb01lbShHZXRJbnN0YW5jZSgpLCAiTm8gYXZhaWxhYmxlIG1lc3NhZ2UgYnVmZmVyIik7CisgICAgfQorCisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworb3RFcnJvciBNZXNzYWdlUG9vbDo6RnJlZUJ1ZmZlcnMoQnVmZmVyICphQnVmZmVyKQoreworICAgIEJ1ZmZlciAqdG1wQnVmZmVyOworCisgICAgd2hpbGUgKGFCdWZmZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHRtcEJ1ZmZlciA9IGFCdWZmZXItPkdldE5leHRCdWZmZXIoKTsKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19QTEFURk9STV9NRVNTQUdFX01BTkFHRU1FTlQKKyAgICAgICAgb3RQbGF0TWVzc2FnZVBvb2xGcmVlKEdldEluc3RhbmNlKCksIGFCdWZmZXIpOworI2Vsc2UgLy8gT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UCisgICAgICAgIGFCdWZmZXItPlNldE5leHRCdWZmZXIobUZyZWVCdWZmZXJzKTsKKyAgICAgICAgbUZyZWVCdWZmZXJzID0gYUJ1ZmZlcjsKKyAgICAgICAgbU51bUZyZWVCdWZmZXJzKys7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UCisgICAgICAgIGFCdWZmZXIgPSB0bXBCdWZmZXI7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTWVzc2FnZVBvb2w6OlJlY2xhaW1CdWZmZXJzKGludCBhTnVtQnVmZmVycykKK3sKKyAgICB1aW50MTZfdCBudW1GcmVlQnVmZmVyczsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorICAgIG51bUZyZWVCdWZmZXJzID0gb3RQbGF0TWVzc2FnZVBvb2xOdW1GcmVlQnVmZmVycyhHZXRJbnN0YW5jZSgpKTsKKyNlbHNlCisgICAgbnVtRnJlZUJ1ZmZlcnMgPSBtTnVtRnJlZUJ1ZmZlcnM7CisjZW5kaWYKKworICAgIC8vRmlyc3QgY29tcGFyaXNvbiBpcyB0byBnZXQgYXJvdW5kIGlzc3VlcyB3aXRoIGNvbXBhcmluZworICAgIC8vc2lnbmVkIGFuZCB1bnNpZ25lZCBudW1iZXJzLCBpZiBhTnVtQnVmZmVycyBpcyBuZWdhdGl2ZSB0aGVuCisgICAgLy90aGUgc2Vjb25kIGNvbXBhcmlzb24gd29udCBiZSBhdHRlbXB0ZWQuCisgICAgaWYgKGFOdW1CdWZmZXJzIDwgMCB8fCBhTnVtQnVmZmVycyA8PSBudW1GcmVlQnVmZmVycykKKyAgICB7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9fQlVGUzsKKyAgICB9Cit9CisKK01lc3NhZ2UgKk1lc3NhZ2VQb29sOjpJdGVyYXRvcjo6TmV4dCh2b2lkKSBjb25zdAoreworICAgIE1lc3NhZ2UgKm5leHQ7CisKKyAgICBWZXJpZnlPckV4aXQobU1lc3NhZ2UgIT0gTlVMTCwgbmV4dCA9IE5VTEwpOworCisgICAgaWYgKG1NZXNzYWdlID09IG1NZXNzYWdlLT5HZXRNZXNzYWdlUG9vbCgpLT5HZXRBbGxNZXNzYWdlc1RhaWwoKS5HZXRNZXNzYWdlKCkpCisgICAgeworICAgICAgICBuZXh0ID0gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmV4dCA9IG1NZXNzYWdlLT5OZXh0KE1lc3NhZ2VJbmZvOjprTGlzdEFsbCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBuZXh0OworfQorCitNZXNzYWdlICpNZXNzYWdlUG9vbDo6SXRlcmF0b3I6OlByZXYodm9pZCkgY29uc3QKK3sKKyAgICBNZXNzYWdlICpwcmV2OworCisgICAgVmVyaWZ5T3JFeGl0KG1NZXNzYWdlICE9IE5VTEwsIHByZXYgPSBOVUxMKTsKKworICAgIGlmIChtTWVzc2FnZSA9PSBtTWVzc2FnZS0+R2V0TWVzc2FnZVBvb2woKS0+R2V0QWxsTWVzc2FnZXNIZWFkKCkuR2V0TWVzc2FnZSgpKQorICAgIHsKKyAgICAgICAgcHJldiA9IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHByZXYgPSBtTWVzc2FnZS0+UHJldihNZXNzYWdlSW5mbzo6a0xpc3RBbGwpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcHJldjsKK30KKworTWVzc2FnZVBvb2w6Okl0ZXJhdG9yIE1lc3NhZ2VQb29sOjpHZXRBbGxNZXNzYWdlc0hlYWQodm9pZCkgY29uc3QKK3sKKyAgICBNZXNzYWdlICpoZWFkOworICAgIE1lc3NhZ2UgKnRhaWw7CisKKyAgICB0YWlsID0gR2V0QWxsTWVzc2FnZXNUYWlsKCkuR2V0TWVzc2FnZSgpOworCisgICAgaWYgKHRhaWwgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGhlYWQgPSB0YWlsLT5OZXh0KE1lc3NhZ2VJbmZvOjprTGlzdEFsbCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGhlYWQgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBJdGVyYXRvcihoZWFkKTsKK30KKworb3RFcnJvciBNZXNzYWdlOjpSZXNpemVNZXNzYWdlKHVpbnQxNl90IGFMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBhZGQgYnVmZmVycworICAgIEJ1ZmZlciAqY3VyQnVmZmVyID0gdGhpczsKKyAgICBCdWZmZXIgKmxhc3RCdWZmZXI7CisgICAgdWludDE2X3QgY3VyTGVuZ3RoID0ga0hlYWRCdWZmZXJEYXRhU2l6ZTsKKworICAgIHdoaWxlIChjdXJMZW5ndGggPCBhTGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1ckJ1ZmZlci0+U2V0TmV4dEJ1ZmZlcihHZXRNZXNzYWdlUG9vbCgpLT5OZXdCdWZmZXIoKSk7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoY3VyQnVmZmVyLT5HZXROZXh0QnVmZmVyKCkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpOworICAgICAgICBjdXJMZW5ndGggKz0ga0J1ZmZlckRhdGFTaXplOworICAgIH0KKworICAgIC8vIHJlbW92ZSBidWZmZXJzCisgICAgbGFzdEJ1ZmZlciA9IGN1ckJ1ZmZlcjsKKyAgICBjdXJCdWZmZXIgPSBjdXJCdWZmZXItPkdldE5leHRCdWZmZXIoKTsKKyAgICBsYXN0QnVmZmVyLT5TZXROZXh0QnVmZmVyKE5VTEwpOworCisgICAgR2V0TWVzc2FnZVBvb2woKS0+RnJlZUJ1ZmZlcnMoY3VyQnVmZmVyKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzc2FnZTo6RnJlZSh2b2lkKQoreworICAgIHJldHVybiBHZXRNZXNzYWdlUG9vbCgpLT5GcmVlKHRoaXMpOworfQorCitNZXNzYWdlICpNZXNzYWdlOjpHZXROZXh0KHZvaWQpIGNvbnN0Cit7CisgICAgTWVzc2FnZSAqbmV4dDsKKyAgICBNZXNzYWdlICp0YWlsOworCisgICAgaWYgKG1CdWZmZXIubUhlYWQubUluZm8ubUluUHJpb3JpdHlRKQorICAgIHsKKyAgICAgICAgUHJpb3JpdHlRdWV1ZSAqcHJpb3JpdHlRdWV1ZSA9IEdldFByaW9yaXR5UXVldWUoKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHByaW9yaXR5UXVldWUgIT0gTlVMTCwgbmV4dCA9IE5VTEwpOworICAgICAgICB0YWlsID0gcHJpb3JpdHlRdWV1ZS0+R2V0VGFpbCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBNZXNzYWdlUXVldWUgKm1lc3NhZ2VRdWV1ZSA9IEdldE1lc3NhZ2VRdWV1ZSgpOworICAgICAgICBWZXJpZnlPckV4aXQobWVzc2FnZVF1ZXVlICE9IE5VTEwsIG5leHQgPSBOVUxMKTsKKyAgICAgICAgdGFpbCA9IG1lc3NhZ2VRdWV1ZS0+R2V0VGFpbCgpOworICAgIH0KKworICAgIG5leHQgPSAodGhpcyA9PSB0YWlsKSA/IE5VTEwgOiBOZXh0KE1lc3NhZ2VJbmZvOjprTGlzdEludGVyZmFjZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIG5leHQ7Cit9CisKK290RXJyb3IgTWVzc2FnZTo6U2V0TGVuZ3RoKHVpbnQxNl90IGFMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3QgdG90YWxMZW5ndGhSZXF1ZXN0ID0gR2V0UmVzZXJ2ZWQoKSArIGFMZW5ndGg7CisgICAgdWludDE2X3QgdG90YWxMZW5ndGhDdXJyZW50ID0gR2V0UmVzZXJ2ZWQoKSArIEdldExlbmd0aCgpOworICAgIGludCBidWZzID0gMDsKKworICAgIGlmICh0b3RhbExlbmd0aFJlcXVlc3QgPiBrSGVhZEJ1ZmZlckRhdGFTaXplKQorICAgIHsKKyAgICAgICAgYnVmcyA9ICgoKHRvdGFsTGVuZ3RoUmVxdWVzdCAtIGtIZWFkQnVmZmVyRGF0YVNpemUpIC0gMSkgLyBrQnVmZmVyRGF0YVNpemUpICsgMTsKKyAgICB9CisKKyAgICBpZiAodG90YWxMZW5ndGhDdXJyZW50ID4ga0hlYWRCdWZmZXJEYXRhU2l6ZSkKKyAgICB7CisgICAgICAgIGJ1ZnMgLT0gKCgodG90YWxMZW5ndGhDdXJyZW50IC0ga0hlYWRCdWZmZXJEYXRhU2l6ZSkgLSAxKSAvIGtCdWZmZXJEYXRhU2l6ZSkgKyAxOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBHZXRNZXNzYWdlUG9vbCgpLT5SZWNsYWltQnVmZmVycyhidWZzKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUmVzaXplTWVzc2FnZSh0b3RhbExlbmd0aFJlcXVlc3QpKTsKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1MZW5ndGggPSBhTGVuZ3RoOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDhfdCBNZXNzYWdlOjpHZXRCdWZmZXJDb3VudCh2b2lkKSBjb25zdAoreworICAgIHVpbnQ4X3QgcnZhbCA9IDE7CisKKyAgICBmb3IgKGNvbnN0IEJ1ZmZlciAqY3VyQnVmZmVyID0gR2V0TmV4dEJ1ZmZlcigpOyBjdXJCdWZmZXI7IGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpKQorICAgIHsKKyAgICAgICAgcnZhbCsrOworICAgIH0KKworICAgIHJldHVybiBydmFsOworfQorCitvdEVycm9yIE1lc3NhZ2U6Ok1vdmVPZmZzZXQoaW50IGFEZWx0YSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGFzc2VydChHZXRPZmZzZXQoKSArIGFEZWx0YSA8PSBHZXRMZW5ndGgoKSk7CisgICAgVmVyaWZ5T3JFeGl0KEdldE9mZnNldCgpICsgYURlbHRhIDw9IEdldExlbmd0aCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1PZmZzZXQgKz0gc3RhdGljX2Nhc3Q8aW50MTZfdD4oYURlbHRhKTsKKyAgICBhc3NlcnQobUJ1ZmZlci5tSGVhZC5tSW5mby5tT2Zmc2V0IDw9IEdldExlbmd0aCgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzc2FnZTo6U2V0T2Zmc2V0KHVpbnQxNl90IGFPZmZzZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBhc3NlcnQoYU9mZnNldCA8PSBHZXRMZW5ndGgoKSk7CisgICAgVmVyaWZ5T3JFeGl0KGFPZmZzZXQgPD0gR2V0TGVuZ3RoKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG1CdWZmZXIubUhlYWQubUluZm8ubU9mZnNldCA9IGFPZmZzZXQ7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitib29sIE1lc3NhZ2U6OklzU3ViVHlwZU1sZSh2b2lkKSBjb25zdAoreworICAgIGJvb2wgcnZhbCA9IGZhbHNlOworCisgICAgaWYgKG1CdWZmZXIubUhlYWQubUluZm8ubVN1YlR5cGUgPT0ga1N1YlR5cGVNbGVBbm5vdW5jZSB8fAorICAgICAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1TdWJUeXBlID09IGtTdWJUeXBlTWxlRGlzY292ZXJSZXF1ZXN0IHx8CisgICAgICAgIG1CdWZmZXIubUhlYWQubUluZm8ubVN1YlR5cGUgPT0ga1N1YlR5cGVNbGVEaXNjb3ZlclJlc3BvbnNlIHx8CisgICAgICAgIG1CdWZmZXIubUhlYWQubUluZm8ubVN1YlR5cGUgPT0ga1N1YlR5cGVNbGVDaGlsZFVwZGF0ZVJlcXVlc3QgfHwKKyAgICAgICAgbUJ1ZmZlci5tSGVhZC5tSW5mby5tU3ViVHlwZSA9PSBrU3ViVHlwZU1sZUdlbmVyYWwpCisgICAgeworICAgICAgICBydmFsID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBNZXNzYWdlOjpTZXRQcmlvcml0eSh1aW50OF90IGFQcmlvcml0eSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBQcmlvcml0eVF1ZXVlICpwcmlvcml0eVF1ZXVlID0gTlVMTDsKKworICAgIFZlcmlmeU9yRXhpdChhUHJpb3JpdHkgPCBrTnVtUHJpb3JpdGllcywgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgVmVyaWZ5T3JFeGl0KElzSW5BUXVldWUoKSwgbUJ1ZmZlci5tSGVhZC5tSW5mby5tUHJpb3JpdHkgPSBhUHJpb3JpdHkpOworICAgIFZlcmlmeU9yRXhpdChtQnVmZmVyLm1IZWFkLm1JbmZvLm1Qcmlvcml0eSAhPSBhUHJpb3JpdHkpOworCisgICAgaWYgKG1CdWZmZXIubUhlYWQubUluZm8ubUluUHJpb3JpdHlRKQorICAgIHsKKyAgICAgICAgcHJpb3JpdHlRdWV1ZSA9IG1CdWZmZXIubUhlYWQubUluZm8ubVF1ZXVlLm1Qcmlvcml0eTsKKyAgICAgICAgcHJpb3JpdHlRdWV1ZS0+RGVxdWV1ZSgqdGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEdldE1lc3NhZ2VQb29sKCktPkdldEFsbE1lc3NhZ2VzUXVldWUoKS0+UmVtb3ZlRnJvbUxpc3QoTWVzc2FnZUluZm86OmtMaXN0QWxsLCAqdGhpcyk7CisgICAgfQorCisgICAgbUJ1ZmZlci5tSGVhZC5tSW5mby5tUHJpb3JpdHkgPSBhUHJpb3JpdHk7CisKKyAgICBpZiAocHJpb3JpdHlRdWV1ZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpb3JpdHlRdWV1ZS0+RW5xdWV1ZSgqdGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEdldE1lc3NhZ2VQb29sKCktPkdldEFsbE1lc3NhZ2VzUXVldWUoKS0+QWRkVG9MaXN0KE1lc3NhZ2VJbmZvOjprTGlzdEFsbCwgKnRoaXMpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzc2FnZTo6QXBwZW5kKGNvbnN0IHZvaWQgKmFCdWYsIHVpbnQxNl90IGFMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3Qgb2xkTGVuZ3RoID0gR2V0TGVuZ3RoKCk7CisgICAgaW50IGJ5dGVzV3JpdHRlbjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZXRMZW5ndGgoR2V0TGVuZ3RoKCkgKyBhTGVuZ3RoKSk7CisgICAgYnl0ZXNXcml0dGVuID0gV3JpdGUob2xkTGVuZ3RoLCBhTGVuZ3RoLCBhQnVmKTsKKworICAgIGFzc2VydChieXRlc1dyaXR0ZW4gPT0gKGludClhTGVuZ3RoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYnl0ZXNXcml0dGVuKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzc2FnZTo6UHJlcGVuZChjb25zdCB2b2lkICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEJ1ZmZlciAqbmV3QnVmZmVyID0gTlVMTDsKKworICAgIHdoaWxlIChhTGVuZ3RoID4gR2V0UmVzZXJ2ZWQoKSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCgobmV3QnVmZmVyID0gR2V0TWVzc2FnZVBvb2woKS0+TmV3QnVmZmVyKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAgICAgbmV3QnVmZmVyLT5TZXROZXh0QnVmZmVyKEdldE5leHRCdWZmZXIoKSk7CisgICAgICAgIFNldE5leHRCdWZmZXIobmV3QnVmZmVyKTsKKworICAgICAgICBpZiAoR2V0UmVzZXJ2ZWQoKSA8IHNpemVvZihtQnVmZmVyLm1IZWFkLm1EYXRhKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ29weSBwYXlsb2FkIGZyb20gdGhlIGZpcnN0IGJ1ZmZlci4KKyAgICAgICAgICAgIG1lbWNweShuZXdCdWZmZXItPm1CdWZmZXIubUhlYWQubURhdGEgKyBHZXRSZXNlcnZlZCgpLCBtQnVmZmVyLm1IZWFkLm1EYXRhICsgR2V0UmVzZXJ2ZWQoKSwKKyAgICAgICAgICAgICAgICAgICBzaXplb2YobUJ1ZmZlci5tSGVhZC5tRGF0YSkgLSBHZXRSZXNlcnZlZCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIFNldFJlc2VydmVkKEdldFJlc2VydmVkKCkgKyBrQnVmZmVyRGF0YVNpemUpOworICAgIH0KKworICAgIFNldFJlc2VydmVkKEdldFJlc2VydmVkKCkgLSBhTGVuZ3RoKTsKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1MZW5ndGggKz0gYUxlbmd0aDsKKyAgICBTZXRPZmZzZXQoR2V0T2Zmc2V0KCkgKyBhTGVuZ3RoKTsKKworICAgIGlmIChhQnVmICE9IE5VTEwpCisgICAgeworICAgICAgICBXcml0ZSgwLCBhTGVuZ3RoLCBhQnVmKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1lc3NhZ2U6OlJlbW92ZUhlYWRlcih1aW50MTZfdCBhTGVuZ3RoKQoreworICAgIGFzc2VydChhTGVuZ3RoIDw9IG1CdWZmZXIubUhlYWQubUluZm8ubUxlbmd0aCk7CisKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1SZXNlcnZlZCArPSBhTGVuZ3RoOworICAgIG1CdWZmZXIubUhlYWQubUluZm8ubUxlbmd0aCAtPSBhTGVuZ3RoOworCisgICAgaWYgKG1CdWZmZXIubUhlYWQubUluZm8ubU9mZnNldCA+IGFMZW5ndGgpCisgICAgeworICAgICAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1PZmZzZXQgLT0gYUxlbmd0aDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUJ1ZmZlci5tSGVhZC5tSW5mby5tT2Zmc2V0ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordWludDE2X3QgTWVzc2FnZTo6UmVhZCh1aW50MTZfdCBhT2Zmc2V0LCB1aW50MTZfdCBhTGVuZ3RoLCB2b2lkICphQnVmKSBjb25zdAoreworICAgIEJ1ZmZlciAqY3VyQnVmZmVyOworICAgIHVpbnQxNl90IGJ5dGVzQ29waWVkID0gMDsKKyAgICB1aW50MTZfdCBieXRlc1RvQ29weTsKKworICAgIGlmIChhT2Zmc2V0ID49IEdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIGlmIChhT2Zmc2V0ICsgYUxlbmd0aCA+PSBHZXRMZW5ndGgoKSkKKyAgICB7CisgICAgICAgIGFMZW5ndGggPSBHZXRMZW5ndGgoKSAtIGFPZmZzZXQ7CisgICAgfQorCisgICAgYU9mZnNldCArPSBHZXRSZXNlcnZlZCgpOworCisgICAgLy8gc3BlY2lhbCBjYXNlIGZpcnN0IGJ1ZmZlcgorICAgIGlmIChhT2Zmc2V0IDwga0hlYWRCdWZmZXJEYXRhU2l6ZSkKKyAgICB7CisgICAgICAgIGJ5dGVzVG9Db3B5ID0ga0hlYWRCdWZmZXJEYXRhU2l6ZSAtIGFPZmZzZXQ7CisKKyAgICAgICAgaWYgKGJ5dGVzVG9Db3B5ID4gYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZXNUb0NvcHkgPSBhTGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KGFCdWYsIEdldEZpcnN0RGF0YSgpICsgYU9mZnNldCwgYnl0ZXNUb0NvcHkpOworCisgICAgICAgIGFMZW5ndGggLT0gYnl0ZXNUb0NvcHk7CisgICAgICAgIGJ5dGVzQ29waWVkICs9IGJ5dGVzVG9Db3B5OworICAgICAgICBhQnVmID0gc3RhdGljX2Nhc3Q8dWludDhfdCAqPihhQnVmKSArIGJ5dGVzVG9Db3B5OworCisgICAgICAgIGFPZmZzZXQgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhT2Zmc2V0IC09IGtIZWFkQnVmZmVyRGF0YVNpemU7CisgICAgfQorCisgICAgLy8gYWR2YW5jZSB0byBvZmZzZXQKKyAgICBjdXJCdWZmZXIgPSBHZXROZXh0QnVmZmVyKCk7CisKKyAgICB3aGlsZSAoYU9mZnNldCA+PSBrQnVmZmVyRGF0YVNpemUpCisgICAgeworICAgICAgICBhc3NlcnQoY3VyQnVmZmVyICE9IE5VTEwpOworCisgICAgICAgIGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpOworICAgICAgICBhT2Zmc2V0IC09IGtCdWZmZXJEYXRhU2l6ZTsKKyAgICB9CisKKyAgICAvLyBiZWdpbiBjb3B5CisgICAgd2hpbGUgKGFMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGN1ckJ1ZmZlciAhPSBOVUxMKTsKKworICAgICAgICBieXRlc1RvQ29weSA9IGtCdWZmZXJEYXRhU2l6ZSAtIGFPZmZzZXQ7CisKKyAgICAgICAgaWYgKGJ5dGVzVG9Db3B5ID4gYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZXNUb0NvcHkgPSBhTGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KGFCdWYsIGN1ckJ1ZmZlci0+R2V0RGF0YSgpICsgYU9mZnNldCwgYnl0ZXNUb0NvcHkpOworCisgICAgICAgIGFMZW5ndGggLT0gYnl0ZXNUb0NvcHk7CisgICAgICAgIGJ5dGVzQ29waWVkICs9IGJ5dGVzVG9Db3B5OworICAgICAgICBhQnVmID0gc3RhdGljX2Nhc3Q8dWludDhfdCAqPihhQnVmKSArIGJ5dGVzVG9Db3B5OworCisgICAgICAgIGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpOworICAgICAgICBhT2Zmc2V0ID0gMDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGJ5dGVzQ29waWVkOworfQorCitpbnQgTWVzc2FnZTo6V3JpdGUodWludDE2X3QgYU9mZnNldCwgdWludDE2X3QgYUxlbmd0aCwgY29uc3Qgdm9pZCAqYUJ1ZikKK3sKKyAgICBCdWZmZXIgKmN1ckJ1ZmZlcjsKKyAgICB1aW50MTZfdCBieXRlc0NvcGllZCA9IDA7CisgICAgdWludDE2X3QgYnl0ZXNUb0NvcHk7CisKKyAgICBhc3NlcnQoYU9mZnNldCArIGFMZW5ndGggPD0gR2V0TGVuZ3RoKCkpOworCisgICAgaWYgKGFPZmZzZXQgKyBhTGVuZ3RoID49IEdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgYUxlbmd0aCA9IEdldExlbmd0aCgpIC0gYU9mZnNldDsKKyAgICB9CisKKyAgICBhT2Zmc2V0ICs9IEdldFJlc2VydmVkKCk7CisKKyAgICAvLyBzcGVjaWFsIGNhc2UgZmlyc3QgYnVmZmVyCisgICAgaWYgKGFPZmZzZXQgPCBrSGVhZEJ1ZmZlckRhdGFTaXplKQorICAgIHsKKyAgICAgICAgYnl0ZXNUb0NvcHkgPSBrSGVhZEJ1ZmZlckRhdGFTaXplIC0gYU9mZnNldDsKKworICAgICAgICBpZiAoYnl0ZXNUb0NvcHkgPiBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlc1RvQ29weSA9IGFMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoR2V0Rmlyc3REYXRhKCkgKyBhT2Zmc2V0LCBhQnVmLCBieXRlc1RvQ29weSk7CisKKyAgICAgICAgYUxlbmd0aCAtPSBieXRlc1RvQ29weTsKKyAgICAgICAgYnl0ZXNDb3BpZWQgKz0gYnl0ZXNUb0NvcHk7CisgICAgICAgIGFCdWYgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90ICo+KGFCdWYpICsgYnl0ZXNUb0NvcHk7CisKKyAgICAgICAgYU9mZnNldCA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFPZmZzZXQgLT0ga0hlYWRCdWZmZXJEYXRhU2l6ZTsKKyAgICB9CisKKyAgICAvLyBhZHZhbmNlIHRvIG9mZnNldAorICAgIGN1ckJ1ZmZlciA9IEdldE5leHRCdWZmZXIoKTsKKworICAgIHdoaWxlIChhT2Zmc2V0ID49IGtCdWZmZXJEYXRhU2l6ZSkKKyAgICB7CisgICAgICAgIGFzc2VydChjdXJCdWZmZXIgIT0gTlVMTCk7CisKKyAgICAgICAgY3VyQnVmZmVyID0gY3VyQnVmZmVyLT5HZXROZXh0QnVmZmVyKCk7CisgICAgICAgIGFPZmZzZXQgLT0ga0J1ZmZlckRhdGFTaXplOworICAgIH0KKworICAgIC8vIGJlZ2luIGNvcHkKKyAgICB3aGlsZSAoYUxlbmd0aCA+IDApCisgICAgeworICAgICAgICBhc3NlcnQoY3VyQnVmZmVyICE9IE5VTEwpOworCisgICAgICAgIGJ5dGVzVG9Db3B5ID0ga0J1ZmZlckRhdGFTaXplIC0gYU9mZnNldDsKKworICAgICAgICBpZiAoYnl0ZXNUb0NvcHkgPiBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlc1RvQ29weSA9IGFMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoY3VyQnVmZmVyLT5HZXREYXRhKCkgKyBhT2Zmc2V0LCBhQnVmLCBieXRlc1RvQ29weSk7CisKKyAgICAgICAgYUxlbmd0aCAtPSBieXRlc1RvQ29weTsKKyAgICAgICAgYnl0ZXNDb3BpZWQgKz0gYnl0ZXNUb0NvcHk7CisgICAgICAgIGFCdWYgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90ICo+KGFCdWYpICsgYnl0ZXNUb0NvcHk7CisKKyAgICAgICAgY3VyQnVmZmVyID0gY3VyQnVmZmVyLT5HZXROZXh0QnVmZmVyKCk7CisgICAgICAgIGFPZmZzZXQgPSAwOworICAgIH0KKworICAgIHJldHVybiBieXRlc0NvcGllZDsKK30KKworaW50IE1lc3NhZ2U6OkNvcHlUbyh1aW50MTZfdCBhU291cmNlT2Zmc2V0LCB1aW50MTZfdCBhRGVzdGluYXRpb25PZmZzZXQsIHVpbnQxNl90IGFMZW5ndGgsIE1lc3NhZ2UgJmFNZXNzYWdlKSBjb25zdAoreworICAgIHVpbnQxNl90IGJ5dGVzQ29waWVkID0gMDsKKyAgICB1aW50MTZfdCBieXRlc1RvQ29weTsKKyAgICB1aW50OF90IGJ1ZlsxNl07CisKKyAgICB3aGlsZSAoYUxlbmd0aCA+IDApCisgICAgeworICAgICAgICBieXRlc1RvQ29weSA9IChhTGVuZ3RoIDwgc2l6ZW9mKGJ1ZikpID8gYUxlbmd0aCA6IHNpemVvZihidWYpOworCisgICAgICAgIFJlYWQoYVNvdXJjZU9mZnNldCwgYnl0ZXNUb0NvcHksIGJ1Zik7CisgICAgICAgIGFNZXNzYWdlLldyaXRlKGFEZXN0aW5hdGlvbk9mZnNldCwgYnl0ZXNUb0NvcHksIGJ1Zik7CisKKyAgICAgICAgYVNvdXJjZU9mZnNldCArPSBieXRlc1RvQ29weTsKKyAgICAgICAgYURlc3RpbmF0aW9uT2Zmc2V0ICs9IGJ5dGVzVG9Db3B5OworICAgICAgICBhTGVuZ3RoIC09IGJ5dGVzVG9Db3B5OworICAgICAgICBieXRlc0NvcGllZCArPSBieXRlc1RvQ29weTsKKyAgICB9CisKKyAgICByZXR1cm4gYnl0ZXNDb3BpZWQ7Cit9CisKK01lc3NhZ2UgKk1lc3NhZ2U6OkNsb25lKHVpbnQxNl90IGFMZW5ndGgpIGNvbnN0Cit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZUNvcHk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2VDb3B5ID0gR2V0TWVzc2FnZVBvb2woKS0+TmV3KEdldFR5cGUoKSwgR2V0UmVzZXJ2ZWQoKSkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2VDb3B5LT5TZXRMZW5ndGgoYUxlbmd0aCkpOworICAgIENvcHlUbygwLCAwLCBhTGVuZ3RoLCAqbWVzc2FnZUNvcHkpOworCisgICAgLy8gQ29weSBzZWxlY3RlZCBtZXNzYWdlIGluZm9ybWF0aW9uLgorICAgIG1lc3NhZ2VDb3B5LT5TZXRPZmZzZXQoR2V0T2Zmc2V0KCkpOworICAgIG1lc3NhZ2VDb3B5LT5TZXRJbnRlcmZhY2VJZChHZXRJbnRlcmZhY2VJZCgpKTsKKyAgICBtZXNzYWdlQ29weS0+U2V0U3ViVHlwZShHZXRTdWJUeXBlKCkpOworICAgIG1lc3NhZ2VDb3B5LT5TZXRQcmlvcml0eShHZXRQcmlvcml0eSgpKTsKKyAgICBtZXNzYWdlQ29weS0+U2V0TGlua1NlY3VyaXR5RW5hYmxlZChJc0xpbmtTZWN1cml0eUVuYWJsZWQoKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlQ29weSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZUNvcHktPkZyZWUoKTsKKyAgICAgICAgbWVzc2FnZUNvcHkgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtZXNzYWdlQ29weTsKK30KKworYm9vbCBNZXNzYWdlOjpHZXRDaGlsZE1hc2sodWludDhfdCBhQ2hpbGRJbmRleCkgY29uc3QKK3sKKyAgICBhc3NlcnQoYUNoaWxkSW5kZXggPCBzaXplb2YobUJ1ZmZlci5tSGVhZC5tSW5mby5tQ2hpbGRNYXNrKSAqIDgpOworICAgIHJldHVybiAobUJ1ZmZlci5tSGVhZC5tSW5mby5tQ2hpbGRNYXNrW2FDaGlsZEluZGV4IC8gOF0gJiAoMHg4MCA+PiAoYUNoaWxkSW5kZXggJSA4KSkpICE9IDA7Cit9CisKK3ZvaWQgTWVzc2FnZTo6Q2xlYXJDaGlsZE1hc2sodWludDhfdCBhQ2hpbGRJbmRleCkKK3sKKyAgICBhc3NlcnQoYUNoaWxkSW5kZXggPCBzaXplb2YobUJ1ZmZlci5tSGVhZC5tSW5mby5tQ2hpbGRNYXNrKSAqIDgpOworICAgIG1CdWZmZXIubUhlYWQubUluZm8ubUNoaWxkTWFza1thQ2hpbGRJbmRleCAvIDhdICY9IH4oMHg4MCA+PiAoYUNoaWxkSW5kZXggJSA4KSk7Cit9CisKK3ZvaWQgTWVzc2FnZTo6U2V0Q2hpbGRNYXNrKHVpbnQ4X3QgYUNoaWxkSW5kZXgpCit7CisgICAgYXNzZXJ0KGFDaGlsZEluZGV4IDwgc2l6ZW9mKG1CdWZmZXIubUhlYWQubUluZm8ubUNoaWxkTWFzaykgKiA4KTsKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1DaGlsZE1hc2tbYUNoaWxkSW5kZXggLyA4XSB8PSAweDgwID4+IChhQ2hpbGRJbmRleCAlIDgpOworfQorCitib29sIE1lc3NhZ2U6OklzQ2hpbGRQZW5kaW5nKHZvaWQpIGNvbnN0Cit7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihtQnVmZmVyLm1IZWFkLm1JbmZvLm1DaGlsZE1hc2spOyBpKyspCisgICAgeworICAgICAgICBpZiAobUJ1ZmZlci5tSGVhZC5tSW5mby5tQ2hpbGRNYXNrW2ldICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHRydWUpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCit1aW50MTZfdCBNZXNzYWdlOjpVcGRhdGVDaGVja3N1bSh1aW50MTZfdCBhQ2hlY2tzdW0sIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQxNl90IGFMZW5ndGgpIGNvbnN0Cit7CisgICAgQnVmZmVyICpjdXJCdWZmZXI7CisgICAgdWludDE2X3QgYnl0ZXNDb3ZlcmVkID0gMDsKKyAgICB1aW50MTZfdCBieXRlc1RvQ292ZXI7CisKKyAgICBhc3NlcnQoYU9mZnNldCArIGFMZW5ndGggPD0gR2V0TGVuZ3RoKCkpOworCisgICAgYU9mZnNldCArPSBHZXRSZXNlcnZlZCgpOworCisgICAgLy8gc3BlY2lhbCBjYXNlIGZpcnN0IGJ1ZmZlcgorICAgIGlmIChhT2Zmc2V0IDwga0hlYWRCdWZmZXJEYXRhU2l6ZSkKKyAgICB7CisgICAgICAgIGJ5dGVzVG9Db3ZlciA9IGtIZWFkQnVmZmVyRGF0YVNpemUgLSBhT2Zmc2V0OworCisgICAgICAgIGlmIChieXRlc1RvQ292ZXIgPiBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlc1RvQ292ZXIgPSBhTGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgYUNoZWNrc3VtID0gSXA2OjpJcDY6OlVwZGF0ZUNoZWNrc3VtKGFDaGVja3N1bSwgR2V0Rmlyc3REYXRhKCkgKyBhT2Zmc2V0LCBieXRlc1RvQ292ZXIpOworCisgICAgICAgIGFMZW5ndGggLT0gYnl0ZXNUb0NvdmVyOworICAgICAgICBieXRlc0NvdmVyZWQgKz0gYnl0ZXNUb0NvdmVyOworCisgICAgICAgIGFPZmZzZXQgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhT2Zmc2V0IC09IGtIZWFkQnVmZmVyRGF0YVNpemU7CisgICAgfQorCisgICAgLy8gYWR2YW5jZSB0byBvZmZzZXQKKyAgICBjdXJCdWZmZXIgPSBHZXROZXh0QnVmZmVyKCk7CisKKyAgICB3aGlsZSAoYU9mZnNldCA+PSBrQnVmZmVyRGF0YVNpemUpCisgICAgeworICAgICAgICBhc3NlcnQoY3VyQnVmZmVyICE9IE5VTEwpOworCisgICAgICAgIGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpOworICAgICAgICBhT2Zmc2V0IC09IGtCdWZmZXJEYXRhU2l6ZTsKKyAgICB9CisKKyAgICAvLyBiZWdpbiBjb3B5CisgICAgd2hpbGUgKGFMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGN1ckJ1ZmZlciAhPSBOVUxMKTsKKworICAgICAgICBieXRlc1RvQ292ZXIgPSBrQnVmZmVyRGF0YVNpemUgLSBhT2Zmc2V0OworCisgICAgICAgIGlmIChieXRlc1RvQ292ZXIgPiBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlc1RvQ292ZXIgPSBhTGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgYUNoZWNrc3VtID0gSXA2OjpJcDY6OlVwZGF0ZUNoZWNrc3VtKGFDaGVja3N1bSwgY3VyQnVmZmVyLT5HZXREYXRhKCkgKyBhT2Zmc2V0LCBieXRlc1RvQ292ZXIpOworCisgICAgICAgIGFMZW5ndGggLT0gYnl0ZXNUb0NvdmVyOworICAgICAgICBieXRlc0NvdmVyZWQgKz0gYnl0ZXNUb0NvdmVyOworCisgICAgICAgIGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpOworICAgICAgICBhT2Zmc2V0ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gYUNoZWNrc3VtOworfQorCit2b2lkIE1lc3NhZ2U6OlNldE1lc3NhZ2VRdWV1ZShNZXNzYWdlUXVldWUgKmFNZXNzYWdlUXVldWUpCit7CisgICAgbUJ1ZmZlci5tSGVhZC5tSW5mby5tUXVldWUubU1lc3NhZ2UgPSBhTWVzc2FnZVF1ZXVlOworICAgIG1CdWZmZXIubUhlYWQubUluZm8ubUluUHJpb3JpdHlRID0gZmFsc2U7Cit9CisKK3ZvaWQgTWVzc2FnZTo6U2V0UHJpb3JpdHlRdWV1ZShQcmlvcml0eVF1ZXVlICphUHJpb3JpdHlRdWV1ZSkKK3sKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1RdWV1ZS5tUHJpb3JpdHkgPSBhUHJpb3JpdHlRdWV1ZTsKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1JblByaW9yaXR5USA9IHRydWU7Cit9CisKK01lc3NhZ2VRdWV1ZTo6TWVzc2FnZVF1ZXVlKHZvaWQpCit7CisgICAgU2V0VGFpbChOVUxMKTsKK30KKwordm9pZCBNZXNzYWdlUXVldWU6OkFkZFRvTGlzdCh1aW50OF90IGFMaXN0LCBNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBNZXNzYWdlICpoZWFkOworCisgICAgYXNzZXJ0KChhTWVzc2FnZS5OZXh0KGFMaXN0KSA9PSBOVUxMKSAmJiAoYU1lc3NhZ2UuUHJldihhTGlzdCkgPT0gTlVMTCkpOworCisgICAgaWYgKEdldFRhaWwoKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgYU1lc3NhZ2UuTmV4dChhTGlzdCkgPSAmYU1lc3NhZ2U7CisgICAgICAgIGFNZXNzYWdlLlByZXYoYUxpc3QpID0gJmFNZXNzYWdlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBoZWFkID0gR2V0VGFpbCgpLT5OZXh0KGFMaXN0KTsKKworICAgICAgICBhTWVzc2FnZS5OZXh0KGFMaXN0KSA9IGhlYWQ7CisgICAgICAgIGFNZXNzYWdlLlByZXYoYUxpc3QpID0gR2V0VGFpbCgpOworCisgICAgICAgIGhlYWQtPlByZXYoYUxpc3QpID0gJmFNZXNzYWdlOworICAgICAgICBHZXRUYWlsKCktPk5leHQoYUxpc3QpID0gJmFNZXNzYWdlOworICAgIH0KKworICAgIFNldFRhaWwoJmFNZXNzYWdlKTsKK30KKwordm9pZCBNZXNzYWdlUXVldWU6OlJlbW92ZUZyb21MaXN0KHVpbnQ4X3QgYUxpc3QsIE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIGFzc2VydCgoYU1lc3NhZ2UuTmV4dChhTGlzdCkgIT0gTlVMTCkgJiYgKGFNZXNzYWdlLlByZXYoYUxpc3QpICE9IE5VTEwpKTsKKworICAgIGlmICgmYU1lc3NhZ2UgPT0gR2V0VGFpbCgpKQorICAgIHsKKyAgICAgICAgU2V0VGFpbChHZXRUYWlsKCktPlByZXYoYUxpc3QpKTsKKworICAgICAgICBpZiAoJmFNZXNzYWdlID09IEdldFRhaWwoKSkKKyAgICAgICAgeworICAgICAgICAgICAgU2V0VGFpbChOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFNZXNzYWdlLlByZXYoYUxpc3QpLT5OZXh0KGFMaXN0KSA9IGFNZXNzYWdlLk5leHQoYUxpc3QpOworICAgIGFNZXNzYWdlLk5leHQoYUxpc3QpLT5QcmV2KGFMaXN0KSA9IGFNZXNzYWdlLlByZXYoYUxpc3QpOworCisgICAgYU1lc3NhZ2UuUHJldihhTGlzdCkgPSBOVUxMOworICAgIGFNZXNzYWdlLk5leHQoYUxpc3QpID0gTlVMTDsKK30KKworTWVzc2FnZSAqTWVzc2FnZVF1ZXVlOjpHZXRIZWFkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChHZXRUYWlsKCkgPT0gTlVMTCkgPyBOVUxMIDogR2V0VGFpbCgpLT5OZXh0KE1lc3NhZ2VJbmZvOjprTGlzdEludGVyZmFjZSk7Cit9CisKK290RXJyb3IgTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KCFhTWVzc2FnZS5Jc0luQVF1ZXVlKCksIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisKKyAgICBhTWVzc2FnZS5TZXRNZXNzYWdlUXVldWUodGhpcyk7CisKKyAgICBBZGRUb0xpc3QoTWVzc2FnZUluZm86OmtMaXN0SW50ZXJmYWNlLCBhTWVzc2FnZSk7CisgICAgYU1lc3NhZ2UuR2V0TWVzc2FnZVBvb2woKS0+R2V0QWxsTWVzc2FnZXNRdWV1ZSgpLT5BZGRUb0xpc3QoTWVzc2FnZUluZm86OmtMaXN0QWxsLCBhTWVzc2FnZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1lc3NhZ2VRdWV1ZTo6RGVxdWV1ZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5HZXRNZXNzYWdlUXVldWUoKSA9PSB0aGlzLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICBSZW1vdmVGcm9tTGlzdChNZXNzYWdlSW5mbzo6a0xpc3RJbnRlcmZhY2UsIGFNZXNzYWdlKTsKKyAgICBhTWVzc2FnZS5HZXRNZXNzYWdlUG9vbCgpLT5HZXRBbGxNZXNzYWdlc1F1ZXVlKCktPlJlbW92ZUZyb21MaXN0KE1lc3NhZ2VJbmZvOjprTGlzdEFsbCwgYU1lc3NhZ2UpOworCisgICAgYU1lc3NhZ2UuU2V0TWVzc2FnZVF1ZXVlKE5VTEwpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBNZXNzYWdlUXVldWU6OkdldEluZm8odWludDE2X3QgJmFNZXNzYWdlQ291bnQsIHVpbnQxNl90ICZhQnVmZmVyQ291bnQpIGNvbnN0Cit7CisgICAgYU1lc3NhZ2VDb3VudCA9IDA7CisgICAgYUJ1ZmZlckNvdW50ID0gMDsKKworICAgIGZvciAoY29uc3QgTWVzc2FnZSAqbWVzc2FnZSA9IEdldEhlYWQoKTsgbWVzc2FnZSAhPSBOVUxMOyBtZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgYU1lc3NhZ2VDb3VudCsrOworICAgICAgICBhQnVmZmVyQ291bnQgKz0gbWVzc2FnZS0+R2V0QnVmZmVyQ291bnQoKTsKKyAgICB9Cit9CisKK1ByaW9yaXR5UXVldWU6OlByaW9yaXR5UXVldWUodm9pZCkKK3sKKyAgICBmb3IgKGludCBwcmlvcml0eSA9IDA7IHByaW9yaXR5IDwgTWVzc2FnZTo6a051bVByaW9yaXRpZXM7IHByaW9yaXR5KyspCisgICAgeworICAgICAgICBtVGFpbHNbcHJpb3JpdHldID0gTlVMTDsKKyAgICB9Cit9CisKK01lc3NhZ2UgKlByaW9yaXR5UXVldWU6OkZpbmRGaXJzdE5vbk51bGxUYWlsKHVpbnQ4X3QgYVN0YXJ0UHJpb3JpdHlMZXZlbCkgY29uc3QKK3sKKyAgICBNZXNzYWdlICp0YWlsID0gTlVMTDsKKyAgICB1aW50OF90IHByaW9yaXR5OworCisgICAgcHJpb3JpdHkgPSBhU3RhcnRQcmlvcml0eUxldmVsOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmIChtVGFpbHNbcHJpb3JpdHldICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhaWwgPSBtVGFpbHNbcHJpb3JpdHldOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwcmlvcml0eSA9IFByZXZQcmlvcml0eShwcmlvcml0eSk7CisgICAgfQorICAgIHdoaWxlIChwcmlvcml0eSAhPSBhU3RhcnRQcmlvcml0eUxldmVsKTsKKworICAgIHJldHVybiB0YWlsOworfQorCitNZXNzYWdlICpQcmlvcml0eVF1ZXVlOjpHZXRIZWFkKHZvaWQpIGNvbnN0Cit7CisgICAgTWVzc2FnZSAqdGFpbDsKKworICAgIHRhaWwgPSBGaW5kRmlyc3ROb25OdWxsVGFpbChNZXNzYWdlOjprTnVtUHJpb3JpdGllcyAtIDEpOworCisgICAgcmV0dXJuICh0YWlsID09IE5VTEwpID8gTlVMTCA6IHRhaWwtPk5leHQoTWVzc2FnZUluZm86OmtMaXN0SW50ZXJmYWNlKTsKK30KKworTWVzc2FnZSAqUHJpb3JpdHlRdWV1ZTo6R2V0SGVhZEZvclByaW9yaXR5KHVpbnQ4X3QgYVByaW9yaXR5KSBjb25zdAoreworICAgIE1lc3NhZ2UgKmhlYWQ7CisgICAgTWVzc2FnZSAqcHJldmlvdXNUYWlsOworCisgICAgaWYgKG1UYWlsc1thUHJpb3JpdHldICE9IE5VTEwpCisgICAgeworICAgICAgICBwcmV2aW91c1RhaWwgPSBGaW5kRmlyc3ROb25OdWxsVGFpbChQcmV2UHJpb3JpdHkoYVByaW9yaXR5KSk7CisKKyAgICAgICAgYXNzZXJ0KHByZXZpb3VzVGFpbCAhPSBOVUxMKTsKKworICAgICAgICBoZWFkID0gcHJldmlvdXNUYWlsLT5OZXh0KE1lc3NhZ2VJbmZvOjprTGlzdEludGVyZmFjZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGhlYWQgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBoZWFkOworfQorCitNZXNzYWdlICpQcmlvcml0eVF1ZXVlOjpHZXRUYWlsKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZpbmRGaXJzdE5vbk51bGxUYWlsKE1lc3NhZ2U6OmtOdW1Qcmlvcml0aWVzIC0gMSk7Cit9CisKK3ZvaWQgUHJpb3JpdHlRdWV1ZTo6QWRkVG9MaXN0KHVpbnQ4X3QgYUxpc3QsIE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIHVpbnQ4X3QgcHJpb3JpdHk7CisgICAgTWVzc2FnZSAqdGFpbDsKKyAgICBNZXNzYWdlICpuZXh0OworCisgICAgcHJpb3JpdHkgPSBhTWVzc2FnZS5HZXRQcmlvcml0eSgpOworCisgICAgdGFpbCA9IEZpbmRGaXJzdE5vbk51bGxUYWlsKHByaW9yaXR5KTsKKworICAgIGlmICh0YWlsICE9IE5VTEwpCisgICAgeworICAgICAgICBuZXh0ID0gdGFpbC0+TmV4dChhTGlzdCk7CisKKyAgICAgICAgYU1lc3NhZ2UuTmV4dChhTGlzdCkgPSBuZXh0OworICAgICAgICBhTWVzc2FnZS5QcmV2KGFMaXN0KSA9IHRhaWw7CisgICAgICAgIG5leHQtPlByZXYoYUxpc3QpID0gJmFNZXNzYWdlOworICAgICAgICB0YWlsLT5OZXh0KGFMaXN0KSA9ICZhTWVzc2FnZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYU1lc3NhZ2UuTmV4dChhTGlzdCkgPSAmYU1lc3NhZ2U7CisgICAgICAgIGFNZXNzYWdlLlByZXYoYUxpc3QpID0gJmFNZXNzYWdlOworICAgIH0KKworICAgIG1UYWlsc1twcmlvcml0eV0gPSAmYU1lc3NhZ2U7Cit9CisKK3ZvaWQgUHJpb3JpdHlRdWV1ZTo6UmVtb3ZlRnJvbUxpc3QodWludDhfdCBhTGlzdCwgTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgdWludDhfdCBwcmlvcml0eTsKKyAgICBNZXNzYWdlICp0YWlsOworCisgICAgcHJpb3JpdHkgPSBhTWVzc2FnZS5HZXRQcmlvcml0eSgpOworCisgICAgdGFpbCA9IG1UYWlsc1twcmlvcml0eV07CisKKyAgICBpZiAoJmFNZXNzYWdlID09IHRhaWwpCisgICAgeworICAgICAgICB0YWlsID0gdGFpbC0+UHJldihhTGlzdCk7CisKKyAgICAgICAgaWYgKCgmYU1lc3NhZ2UgPT0gdGFpbCkgfHwgKHRhaWwtPkdldFByaW9yaXR5KCkgIT0gcHJpb3JpdHkpKQorICAgICAgICB7CisgICAgICAgICAgICB0YWlsID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1UYWlsc1twcmlvcml0eV0gPSB0YWlsOworICAgIH0KKworICAgIGFNZXNzYWdlLk5leHQoYUxpc3QpLT5QcmV2KGFMaXN0KSA9IGFNZXNzYWdlLlByZXYoYUxpc3QpOworICAgIGFNZXNzYWdlLlByZXYoYUxpc3QpLT5OZXh0KGFMaXN0KSA9IGFNZXNzYWdlLk5leHQoYUxpc3QpOworICAgIGFNZXNzYWdlLk5leHQoYUxpc3QpID0gTlVMTDsKKyAgICBhTWVzc2FnZS5QcmV2KGFMaXN0KSA9IE5VTEw7Cit9CisKK290RXJyb3IgUHJpb3JpdHlRdWV1ZTo6RW5xdWV1ZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdCghYU1lc3NhZ2UuSXNJbkFRdWV1ZSgpLCBlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworCisgICAgYU1lc3NhZ2UuU2V0UHJpb3JpdHlRdWV1ZSh0aGlzKTsKKworICAgIEFkZFRvTGlzdChNZXNzYWdlSW5mbzo6a0xpc3RJbnRlcmZhY2UsIGFNZXNzYWdlKTsKKyAgICBhTWVzc2FnZS5HZXRNZXNzYWdlUG9vbCgpLT5HZXRBbGxNZXNzYWdlc1F1ZXVlKCktPkFkZFRvTGlzdChNZXNzYWdlSW5mbzo6a0xpc3RBbGwsIGFNZXNzYWdlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgUHJpb3JpdHlRdWV1ZTo6RGVxdWV1ZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5HZXRQcmlvcml0eVF1ZXVlKCkgPT0gdGhpcywgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgUmVtb3ZlRnJvbUxpc3QoTWVzc2FnZUluZm86OmtMaXN0SW50ZXJmYWNlLCBhTWVzc2FnZSk7CisgICAgYU1lc3NhZ2UuR2V0TWVzc2FnZVBvb2woKS0+R2V0QWxsTWVzc2FnZXNRdWV1ZSgpLT5SZW1vdmVGcm9tTGlzdChNZXNzYWdlSW5mbzo6a0xpc3RBbGwsIGFNZXNzYWdlKTsKKworICAgIGFNZXNzYWdlLlNldE1lc3NhZ2VRdWV1ZShOVUxMKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgUHJpb3JpdHlRdWV1ZTo6R2V0SW5mbyh1aW50MTZfdCAmYU1lc3NhZ2VDb3VudCwgdWludDE2X3QgJmFCdWZmZXJDb3VudCkgY29uc3QKK3sKKyAgICBhTWVzc2FnZUNvdW50ID0gMDsKKyAgICBhQnVmZmVyQ291bnQgPSAwOworCisgICAgZm9yIChjb25zdCBNZXNzYWdlICptZXNzYWdlID0gR2V0SGVhZCgpOyBtZXNzYWdlICE9IE5VTEw7IG1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBhTWVzc2FnZUNvdW50Kys7CisgICAgICAgIGFCdWZmZXJDb3VudCArPSBtZXNzYWdlLT5HZXRCdWZmZXJDb3VudCgpOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vbWVzc2FnZS5ocHAgYi9zcmMvY29yZS9jb21tb24vbWVzc2FnZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2ZTNlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9tZXNzYWdlLmhwcApAQCAtMCwwICsxLDExNDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgbWVzc2FnZSBidWZmZXIgcG9vbCBhbmQgbWVzc2FnZSBidWZmZXJzLgorICovCisKKyNpZm5kZWYgTUVTU0FHRV9IUFBfCisjZGVmaW5lIE1FU1NBR0VfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWVzc2FnZXBvb2wuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbWVzc2FnZQorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIG1lc3NhZ2UgYnVmZmVyIHBvb2wgYW5kIG1lc3NhZ2UgYnVmZmVycy4KKyAqCisgKiBAeworICoKKyAqLworCitlbnVtCit7CisgICAga051bUJ1ZmZlcnMgPSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTLAorICAgIGtCdWZmZXJTaXplID0gT1BFTlRIUkVBRF9DT05GSUdfTUVTU0FHRV9CVUZGRVJfU0laRSwKK307CisKK2NsYXNzIE1lc3NhZ2U7CitjbGFzcyBNZXNzYWdlUG9vbDsKK2NsYXNzIE1lc3NhZ2VRdWV1ZTsKK2NsYXNzIFByaW9yaXR5UXVldWU7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgbWV0ZGF0YSBhYm91dCBhIE1lc3NhZ2UuCisgKgorICovCitzdHJ1Y3QgTWVzc2FnZUluZm8KK3sKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTGlzdEFsbCAgICAgICAgPSAwLCAgICAgICAgICAgICAvLy88IElkZW50aWZpZXMgdGhlIGFsbCBtZXNzYWdlcyBsaXN0IChtYWludGFpbmVkIGJ5IHRoZSBNZXNzYWdlUG9vbCkuCisgICAgICAgIGtMaXN0SW50ZXJmYWNlICA9IDEsICAgICAgICAgICAgIC8vLzwgSWRlbnRpZmllcyB0aGUgbGlzdCBmb3IgcGVyLWludGVyZmFjZSBtZXNzYWdlIHF1ZXVlLgorICAgICAgICBrTnVtTGlzdHMgICAgICAgPSAyLCAgICAgICAgICAgICAvLy88IE51bWJlciBvZiBsaXN0cy4KKyAgICB9OworCisgICAgTWVzc2FnZSAgICAgICAgICptTmV4dFtrTnVtTGlzdHNdOyAgIC8vLzwgQSBwb2ludGVyIHRvIHRoZSBuZXh0IE1lc3NhZ2UgaW4gYSBkb3VibHkgbGlua2VkIGxpc3QuCisgICAgTWVzc2FnZSAgICAgICAgICptUHJldltrTnVtTGlzdHNdOyAgIC8vLzwgQSBwb2ludGVyIHRvIHRoZSBwcmV2aW91cyBNZXNzYWdlIGluIGEgZG91Ymx5IGxpbmtlZCBsaXN0LgorICAgIE1lc3NhZ2VQb29sICAgICAqbU1lc3NhZ2VQb29sOyAgICAgICAvLy88IElkZW50aWZpZXMgdGhlIG1lc3NhZ2UgcG9vbCBmb3IgdGhpcyBtZXNzYWdlLgorICAgIHVuaW9uCisgICAgeworICAgICAgICBNZXNzYWdlUXVldWUgICAgKm1NZXNzYWdlOyAgICAgICAvLy88IElkZW50aWZpZXMgdGhlIG1lc3NhZ2UgcXVldWUgKGlmIGFueSkgd2hlcmUgdGhpcyBtZXNzYWdlIGlzIHF1ZXVlZC4KKyAgICAgICAgUHJpb3JpdHlRdWV1ZSAgICptUHJpb3JpdHk7ICAgICAgLy8vPCBJZGVudGlmaWVzIHRoZSBwcmlvcml0eSBxdWV1ZSAoaWYgYW55KSB3aGVyZSB0aGlzIG1lc3NhZ2UgaXMgcXVldWVkLgorICAgIH0gbVF1ZXVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IElkZW50aWZpZXMgdGhlIHF1ZXVlIChpZiBhbnkpIHdoZXJlIHRoaXMgbWVzc2FnZSBpcyBxdWV1ZWQuCisKKyAgICB1aW50MTZfdCAgICAgICAgIG1SZXNlcnZlZDsgICAgICAgICAgLy8vPCBOdW1iZXIgb2YgaGVhZGVyIGJ5dGVzIHJlc2VydmVkIGZvciB0aGUgbWVzc2FnZS4KKyAgICB1aW50MTZfdCAgICAgICAgIG1MZW5ndGg7ICAgICAgICAgICAgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgd2l0aGluIHRoZSBtZXNzYWdlLgorICAgIHVpbnQxNl90ICAgICAgICAgbU9mZnNldDsgICAgICAgICAgICAvLy88IEEgYnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtZXNzYWdlLgorICAgIHVpbnQxNl90ICAgICAgICAgbURhdGFncmFtVGFnOyAgICAgICAvLy88IFRoZSBkYXRhZ3JhbSB0YWcgdXNlZCBmb3IgNkxvV1BBTiBmcmFnbWVudGF0aW9uLgorCisgICAgdWludDhfdCAgICAgICAgICBtQ2hpbGRNYXNrWzhdOyAgICAgIC8vLzwgQSBiaXQtdmVjdG9yIHRvIGluZGljYXRlIHdoaWNoIHNsZWVweSBjaGlsZHJlbiBuZWVkIHRvIHJlY2VpdmUgdGhpcy4KKyAgICB1aW50OF90ICAgICAgICAgIG1UaW1lb3V0OyAgICAgICAgICAgLy8vPCBTZWNvbmRzIHJlbWFpbmluZyBiZWZvcmUgZHJvcHBpbmcgdGhlIG1lc3NhZ2UuCisgICAgaW50OF90ICAgICAgICAgICBtSW50ZXJmYWNlSWQ7ICAgICAgIC8vLzwgVGhlIGludGVyZmFjZSBJRC4KKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgdWludDE2X3QgICAgIG1QYW5JZDsgICAgICAgICAgICAgLy8vPCBVc2VkIGZvciBNTEUgRGlzY292ZXIgUmVxdWVzdCBhbmQgUmVzcG9uc2UgbWVzc2FnZXMuCisgICAgICAgIHVpbnQ4X3QgICAgICBtQ2hhbm5lbDsgICAgICAgICAgIC8vLzwgVXNlZCBmb3IgTUxFIEFubm91bmNlLgorICAgIH0gbVBhbklkQ2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAvLy88IFVzZWQgZm9yIE1MRSBEaXNjb3ZlciBSZXF1ZXN0LCBSZXNwb25zZSwgYW5kIEFubm91bmNlIG1lc3NhZ2VzLgorCisgICAgdWludDhfdCAgICAgICAgICBtVHlwZSA6IDI7ICAgICAgICAgIC8vLzwgSWRlbnRpZmllcyB0aGUgdHlwZSBvZiBtZXNzYWdlLgorICAgIHVpbnQ4X3QgICAgICAgICAgbVN1YlR5cGUgOiA0OyAgICAgICAvLy88IElkZW50aWZpZXMgdGhlIG1lc3NhZ2Ugc3ViIHR5cGUuCisgICAgYm9vbCAgICAgICAgICAgICBtRGlyZWN0VHggOiAxOyAgICAgIC8vLzwgVXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIGEgZGlyZWN0IHRyYW5zbWlzc2lvbiBpcyByZXF1aXJlZC4KKyAgICBib29sICAgICAgICAgICAgIG1MaW5rU2VjdXJpdHkgOiAxOyAgLy8vPCBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgbGluayBzZWN1cml0eSBpcyBlbmFibGVkLgorICAgIHVpbnQ4X3QgICAgICAgICAgbVByaW9yaXR5IDogMjsgICAgICAvLy88IElkZW50aWZpZXMgdGhlIG1lc3NhZ2UgcHJpb3JpdHkgbGV2ZWwgKGxvd2VyIHZhbHVlIGlzIGhpZ2hlciBwcmlvcml0eSkuCisgICAgYm9vbCAgICAgICAgICAgICBtSW5Qcmlvcml0eVEgOiAxOyAgIC8vLzwgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lc3NhZ2UgaXMgcXVldWVkIGluIG5vcm1hbCBvciBwcmlvcml0eSBxdWV1ZS4KK307CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgTWVzc2FnZSBidWZmZXIuCisgKgorICovCitjbGFzcyBCdWZmZXIgOiBwdWJsaWMgOjpvdE1lc3NhZ2UKK3sKKyAgICBmcmllbmQgY2xhc3MgTWVzc2FnZTsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG1lc3NhZ2UgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBuZXh0IG1lc3NhZ2UgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgY2xhc3MgQnVmZmVyICpHZXROZXh0QnVmZmVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJ1ZmZlciAqPihtTmV4dCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgbWVzc2FnZSBidWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5leHRCdWZmZXIoY2xhc3MgQnVmZmVyICpidWYpIHsgbU5leHQgPSBzdGF0aWNfY2FzdDxvdE1lc3NhZ2UgKj4oYnVmKTsgfQorCitwcml2YXRlOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIG9mIGRhdGEgaW4gdGhlIGZpcnN0IG1lc3NhZ2UgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBkYXRhIGJ5dGUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90ICpHZXRGaXJzdERhdGEodm9pZCkgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tRGF0YTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgZGF0YSBpbiB0aGUgZmlyc3QgbWVzc2FnZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGRhdGEgYnl0ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEZpcnN0RGF0YSh2b2lkKSBjb25zdCB7IHJldHVybiBtQnVmZmVyLm1IZWFkLm1EYXRhOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgZGF0YSBieXRlIG9mIGEgc3Vic2VxdWVudCBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgZGF0YSBieXRlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCAqR2V0RGF0YSh2b2lkKSB7IHJldHVybiBtQnVmZmVyLm1EYXRhOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgZGF0YSBieXRlIG9mIGEgc3Vic2VxdWVudCBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgZGF0YSBieXRlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0RGF0YSh2b2lkKSBjb25zdCB7IHJldHVybiBtQnVmZmVyLm1EYXRhOyB9CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrQnVmZmVyRGF0YVNpemUgPSBrQnVmZmVyU2l6ZSAtIHNpemVvZihzdHJ1Y3Qgb3RNZXNzYWdlKSwKKyAgICAgICAga0hlYWRCdWZmZXJEYXRhU2l6ZSA9IGtCdWZmZXJEYXRhU2l6ZSAtIHNpemVvZihzdHJ1Y3QgTWVzc2FnZUluZm8pLAorICAgIH07CisKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIE1lc3NhZ2VJbmZvIG1JbmZvOworICAgICAgICAgICAgdWludDhfdCBtRGF0YVtrSGVhZEJ1ZmZlckRhdGFTaXplXTsKKyAgICAgICAgfSBtSGVhZDsKKyAgICAgICAgdWludDhfdCBtRGF0YVtrQnVmZmVyRGF0YVNpemVdOworICAgIH0gbUJ1ZmZlcjsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgbWVzc2FnZS4KKyAqCisgKi8KK2NsYXNzIE1lc3NhZ2U6IHB1YmxpYyBCdWZmZXIKK3sKKyAgICBmcmllbmQgY2xhc3MgTWVzc2FnZVBvb2w7CisgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VRdWV1ZTsKKyAgICBmcmllbmQgY2xhc3MgUHJpb3JpdHlRdWV1ZTsKKworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtUeXBlSXA2ICAgICAgICAgPSAwLCAgIC8vLzwgQSBmdWxsIHVuY29tcHJlc3NlZCBJUHY2IHBhY2tldAorICAgICAgICBrVHlwZTZsb3dwYW4gICAgID0gMSwgICAvLy88IEEgNmxvd3BhbiBmcmFtZQorICAgICAgICBrVHlwZU1hY0RhdGFQb2xsID0gMiwgICAvLy88IEEgTUFDIGRhdGEgcG9sbCBtZXNzYWdlCisgICAgICAgIGtUeXBlU3VwZXJ2aXNpb24gPSAzLCAgIC8vLzwgQSBjaGlsZCBzdXBlcnZpc2lvbiBmcmFtZS4KKyAgICB9OworCisgICAgZW51bQorICAgIHsKKyAgICAgICAga1N1YlR5cGVOb25lICAgICAgICAgICAgICAgICAgID0gMCwgIC8vLzwgTm9uZQorICAgICAgICBrU3ViVHlwZU1sZUFubm91bmNlICAgICAgICAgICAgPSAxLCAgLy8vPCBNTEUgQW5ub3VuY2UKKyAgICAgICAga1N1YlR5cGVNbGVEaXNjb3ZlclJlcXVlc3QgICAgID0gMiwgIC8vLzwgTUxFIERpc2NvdmVyIFJlcXVlc3QKKyAgICAgICAga1N1YlR5cGVNbGVEaXNjb3ZlclJlc3BvbnNlICAgID0gMywgIC8vLzwgTUxFIERpc2NvdmVyIFJlc3BvbnNlCisgICAgICAgIGtTdWJUeXBlSm9pbmVyRW50cnVzdCAgICAgICAgICA9IDQsICAvLy88IEpvaW5lciBFbnRydXN0CisgICAgICAgIGtTdWJUeXBlTXBsUmV0cmFuc21pc3Npb24gICAgICA9IDUsICAvLy88IE1QTCBuZXh0IHJldHJhbnNtaXNzaW9uIG1lc3NhZ2UKKyAgICAgICAga1N1YlR5cGVNbGVHZW5lcmFsICAgICAgICAgICAgID0gNiwgIC8vLzwgR2VuZXJhbCBNTEUKKyAgICAgICAga1N1YlR5cGVKb2luZXJGaW5hbGl6ZVJlc3BvbnNlID0gNywgIC8vLzwgSm9pbmVyIEZpbmFsaXplIFJlc3BvbnNlCisgICAgICAgIGtTdWJUeXBlTWxlQ2hpbGRVcGRhdGVSZXF1ZXN0ICA9IDgsICAvLy88IE1MRSBDaGlsZCBVcGRhdGUgUmVxdWVzdAorICAgIH07CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrUHJpb3JpdHlIaWdoICAgICAgID0gMCwgICAgLy8vPCBIaWdoIHByaW9yaXR5IGxldmVsLgorICAgICAgICBrUHJpb3JpdHlNZWRpdW0gICAgID0gMSwgICAgLy8vPCBNZWRpdW0gcHJpb3JpdHkgbGV2ZWwuCisgICAgICAgIGtQcmlvcml0eUxvdyAgICAgICAgPSAyLCAgICAvLy88IExvdyBwcmlvcml0eSBsZXZlbC4KKyAgICAgICAga1ByaW9yaXR5VmVyeUxvdyAgICA9IDMsICAgIC8vLzwgVmVyeSBsb3cgcHJpb3JpdHkgbGV2ZWwuCisKKyAgICAgICAga051bVByaW9yaXRpZXMgICAgICA9IDQsICAgIC8vLzwgTnVtYmVyIG9mIHByaW9yaXR5IGxldmVscy4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZnJlZXMgdGhpcyBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRnJlZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG1lc3NhZ2UgaW4gdGhlIHNhbWUgaW50ZXJmYWNlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5leHQgbWVzc2FnZSBpbiB0aGUgc2FtZSBpbnRlcmZhY2UgbGlzdCBvciBOVUxMIGlmIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlICpHZXROZXh0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBSZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBGYWlsZWQgdG8gZ3JvdyB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZSBiZWNhdXNlIGluc3VmZmljaWVudCBidWZmZXJzIHdlcmUgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRMZW5ndGgodWludDE2X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0QnVmZmVyQ291bnQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIGJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldE9mZnNldCh2b2lkKSBjb25zdCB7IHJldHVybiBtQnVmZmVyLm1IZWFkLm1JbmZvLm1PZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIG1vdmVzIHRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRGVsdGEgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbW92ZSB0aGUgY3VycmVudCBvZmZzZXQsIHdoaWNoIG1heSBiZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgbW92ZWQgdGhlIGJ5dGUgb2Zmc2V0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgcmVzdWx0aW5nIGJ5dGUgb2Zmc2V0IGlzIG5vdCB3aXRoaW4gdGhlIGV4aXN0aW5nIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIE1vdmVPZmZzZXQoaW50IGFEZWx0YSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhT2Zmc2V0ICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG1vdmUgdGhlIGN1cnJlbnQgb2Zmc2V0LCB3aGljaCBtYXkgYmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IG1vdmVkIHRoZSBieXRlIG9mZnNldC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIHJlcXVlc3RlZCBieXRlIG9mZnNldCBpcyBub3Qgd2l0aGluIHRoZSBleGlzdGluZyBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRPZmZzZXQodWludDE2X3QgYU9mZnNldCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tVHlwZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbWVzc2FnZSB0eXBlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgIFRoZSBtZXNzYWdlIHR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUodWludDhfdCBhVHlwZSkgeyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1UeXBlID0gYVR5cGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHN1YiB0eXBlIG9mIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHN1YiB0eXBlIG9mIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTdWJUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubVN1YlR5cGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG1lc3NhZ2Ugc3ViIHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU3ViVHlwZSAgVGhlIG1lc3NhZ2Ugc3ViIHR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN1YlR5cGUodWludDhfdCBhU3ViVHlwZSkgeyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1TdWJUeXBlID0gYVN1YlR5cGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1lc3NhZ2UgaXMgb2YgTUxFIHN1YnR5cGUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiBtZXNzYWdlIGlzIG9mIE1MRSBzdWJ0eXBlLgorICAgICAqIEByZXR2YWwgRkxBU0UgIElmIG1lc3NhZ2UgaXMgbm90IG9mIE1MRSBzdWJ0eXBlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1N1YlR5cGVNbGUodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBtZXNzYWdlIHByaW9yaXR5IGxldmVsLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHByaW9yaXR5IGxldmVsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFByaW9yaXR5KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubVByaW9yaXR5OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBtZXNzYWdlcyBwcmlvcml0eS4KKyAgICAgKiBJZiB0aGUgbWVzc2FnZSBpcyBhbHJlYWR5IHF1ZXVlZCBpbiBhIHByaW9yaXR5IHF1ZXVlLCBjaGFuZ2luZyB0aGUgcHJpb3JpdHkgZW5zdXJlcyB0bworICAgICAqIHVwZGF0ZSB0aGUgbWVzc2FnZSBpbiB0aGUgYXNzb2NpYXRlZCBxdWV1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcm9yaXR5ICBUaGUgbWVzc2FnZSBwcmlvcml0eSBsZXZlbC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgcHJpb3JpdHkgZm9yIHRoZSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICAgUHJpb3JpdHkgbGV2ZWwgaXMgbm90IGludmFsaWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFByaW9yaXR5KHVpbnQ4X3QgYVByaW9yaXR5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByZXBlbmRzIGJ5dGVzIHRvIHRoZSBmcm9udCBvZiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIE9uIHN1Y2Nlc3MsIHRoaXMgbWV0aG9kIGdyb3dzIHRoZSBtZXNzYWdlIGJ5IEBwIGFMZW5ndGggYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gYSBkYXRhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHByZXBlbmQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBwcmVwZW5kZWQgdGhlIGJ5dGVzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgTm90IGVub3VnaCByZXNlcnZlZCBieXRlcyBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUHJlcGVuZChjb25zdCB2b2lkICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgaGVhZGVyIGJ5dGVzIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgaGVhZGVyIGJ5dGVzIHRvIHJlbW92ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgaGVhZGVyIGJ5dGVzIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZUhlYWRlcih1aW50MTZfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYnl0ZXMgdG8gdGhlIGVuZCBvZiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIE9uIHN1Y2Nlc3MsIHRoaXMgbWV0aG9kIGdyb3dzIHRoZSBtZXNzYWdlIGJ5IEBwIGFMZW5ndGggYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gYSBkYXRhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFwcGVuZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBieXRlcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBhdmFpbGFibGUgYnVmZmVycyB0byBncm93IHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmQoY29uc3Qgdm9pZCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWFkcyBieXRlcyBmcm9tIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU9mZnNldCAgQnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtZXNzYWdlIHRvIGJlZ2luIHJlYWRpbmcuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgICAgICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIGEgZGF0YSBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBSZWFkKHVpbnQxNl90IGFPZmZzZXQsIHVpbnQxNl90IGFMZW5ndGgsIHZvaWQgKmFCdWYpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgd3JpdGVzIGJ5dGVzIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU9mZnNldCAgQnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtZXNzYWdlIHRvIGJlZ2luIHdyaXRpbmcuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlLgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorICAgICAqCisgICAgICovCisgICAgaW50IFdyaXRlKHVpbnQxNl90IGFPZmZzZXQsIHVpbnQxNl90IGFMZW5ndGgsIGNvbnN0IHZvaWQgKmFCdWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29waWVzIGJ5dGVzIGZyb20gb25lIG1lc3NhZ2UgdG8gYW5vdGhlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYVNvdXJjZU9mZnNldCAgICAgICBCeXRlIG9mZnNldCB3aXRoaW4gdGhlIHNvdXJjZSBtZXNzYWdlIHRvIGJlZ2luIHJlYWRpbmcuCisgICAgICogQHBhcmFtW2luXSBhRGVzdGluYXRpb25PZmZzZXQgIEJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgZGVzdGluYXRpb24gbWVzc2FnZSB0byBiZWdpbiB3cml0aW5nLgorICAgICAqIEBwYXJhbVtpbl0gYUxlbmd0aCAgICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4KKyAgICAgKiBAcGFyYW1baW5dIGFNZXNzYWdlICAgICAgICAgICAgTWVzc2FnZSB0byBjb3B5IHRvLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgQ29weVRvKHVpbnQxNl90IGFTb3VyY2VPZmZzZXQsIHVpbnQxNl90IGFEZXN0aW5hdGlvbk9mZnNldCwgdWludDE2X3QgYUxlbmd0aCwgTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgTWVzc2FnZS4gSXQgYWxsb2NhdGVzIHRoZSBuZXcgb25lCisgICAgICogZnJvbSB0aGUgc2FtZSBNZXNzYWdlIFBvbGwgYXMgdGhlIG9yaWdpbmFsIE1lc3NhZ2UgYW5kIGNvcGllcyBAcCBhTGVuZ3RoIG9jdGV0cyBvZiBhIHBheWxvYWQuCisgICAgICoKKyAgICAgKiBUaGUgYFR5cGVgLCBgU3ViVHlwZWAsIGBMaW5rU2VjdXJpdHlgIGFuZCBgUHJpb3JpdHlgIGZpZWxkcyBvbiB0aGUgY2xvbmVkIG1lc3NhZ2UgYXJlIGFsc28KKyAgICAgKiBjb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgb25lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhTGVuZ3RoICBOdW1iZXIgb2YgcGF5bG9hZCBieXRlcyB0byBjb3B5LgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIG9yIE5VTEwgaWYgaW5zdWZmaWNpZW50IG1lc3NhZ2UgYnVmZmVycyBhcmUgYXZhaWxhYmxlLgorICAgICAqLworICAgIE1lc3NhZ2UgKkNsb25lKHVpbnQxNl90IGFMZW5ndGgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgTWVzc2FnZS4gSXQgYWxsb2NhdGVzIHRoZSBuZXcgb25lCisgICAgICogZnJvbSB0aGUgc2FtZSBNZXNzYWdlIFBvbGwgYXMgdGhlIG9yaWdpbmFsIE1lc3NhZ2UgYW5kIGNvcGllcyBhIGZ1bGwgcGF5bG9hZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBvciBOVUxMIGlmIGluc3VmZmljaWVudCBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZS4KKyAgICAgKi8KKyAgICBNZXNzYWdlICpDbG9uZSh2b2lkKSBjb25zdCB7IHJldHVybiBDbG9uZShHZXRMZW5ndGgoKSk7IH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkYXRhZ3JhbSB0YWcgdXNlZCBmb3IgNkxvV1BBTiBmcmFnbWVudGF0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIDZMb1dQQU4gZGF0YWdyYW0gdGFnLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0RGF0YWdyYW1UYWcodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tRGF0YWdyYW1UYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGRhdGFncmFtIHRhZyB1c2VkIGZvciA2TG9XUEFOIGZyYWdtZW50YXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGFnICBUaGUgNkxvV1BBTiBkYXRhZ3JhbSB0YWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERhdGFncmFtVGFnKHVpbnQxNl90IGFUYWcpIHsgbUJ1ZmZlci5tSGVhZC5tSW5mby5tRGF0YWdyYW1UYWcgPSBhVGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtZXNzYWdlIGZvcndhcmRpbmcgaXMgc2NoZWR1bGVkIGZvciB0aGUgY2hpbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hpbGRJbmRleCAgVGhlIGluZGV4IGludG8gdGhlIGNoaWxkIHRhYmxlLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIG1lc3NhZ2UgaXMgc2NoZWR1bGVkIHRvIGJlIGZvcndhcmRlZCB0byB0aGUgY2hpbGQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIG1lc3NhZ2UgaXMgbm90IHNjaGVkdWxlZCB0byBiZSBmb3J3YXJkZWQgdG8gdGhlIGNoaWxkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBHZXRDaGlsZE1hc2sodWludDhfdCBhQ2hpbGRJbmRleCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1bnNjaGVkdWxlcyBmb3J3YXJkaW5nIG9mIHRoZSBtZXNzYWdlIHRvIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGlsZEluZGV4ICBUaGUgaW5kZXggaW50byB0aGUgY2hpbGQgdGFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyQ2hpbGRNYXNrKHVpbnQ4X3QgYUNoaWxkSW5kZXgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2NoZWR1bGVzIGZvcndhcmRpbmcgb2YgdGhlIG1lc3NhZ2UgdG8gdGhlIGNoaWxkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoaWxkSW5kZXggIFRoZSBpbmRleCBpbnRvIHRoZSBjaGlsZCB0YWJsZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q2hpbGRNYXNrKHVpbnQ4X3QgYUNoaWxkSW5kZXgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBmb3J3YXJkaW5nIGlzIHNjaGVkdWxlZCBmb3IgYXQgbGVhc3Qgb25lIGNoaWxkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgbWVzc2FnZSBmb3J3YXJkaW5nIGlzIHNjaGVkdWxlZCBmb3IgYXQgbGVhc3Qgb25lIGNoaWxkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIG1lc3NhZ2UgZm9yd2FyZGluZyBpcyBub3Qgc2NoZWR1bGVkIGZvciBhbnkgY2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQ2hpbGRQZW5kaW5nKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUVFRSA4MDIuMTUuNCBEZXN0aW5hdGlvbiBQQU4gSUQuCisgICAgICoKKyAgICAgKiBAbm90ZSBPbmx5IHVzZSB0aGlzIHdoZW4gc2VuZGluZyBNTEUgRGlzY292ZXIgUmVxdWVzdCBvciBSZXNwb25zZSBtZXNzYWdlcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IERlc3RpbmF0aW9uIFBBTiBJRC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFBhbklkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubVBhbklkQ2hhbm5lbC5tUGFuSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElFRUUgODAyLjE1LjQgRGVzdGluYXRpb24gUEFOIElELgorICAgICAqCisgICAgICogQG5vdGUgT25seSB1c2UgdGhpcyB3aGVuIHNlbmRpbmcgTUxFIERpc2NvdmVyIFJlcXVlc3Qgb3IgUmVzcG9uc2UgbWVzc2FnZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgIFRoZSBJRUVFIDgwMi4xNS40IERlc3RpbmF0aW9uIFBBTiBJRC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UGFuSWQodWludDE2X3QgYVBhbklkKSB7IG1CdWZmZXIubUhlYWQubUluZm8ubVBhbklkQ2hhbm5lbC5tUGFuSWQgPSBhUGFuSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgQ2hhbm5lbCB0byB1c2UgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgKgorICAgICAqIEBub3RlIE9ubHkgdXNlIHRoaXMgd2hlbiBzZW5kaW5nIE1MRSBBbm5vdW5jZSBtZXNzYWdlcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IENoYW5uZWwgdG8gdXNlIGZvciB0cmFuc21pc3Npb24uCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldENoYW5uZWwodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tUGFuSWRDaGFubmVsLm1DaGFubmVsOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJRUVFIDgwMi4xNS40IENoYW5uZWwgdG8gdXNlIGZvciB0cmFuc21pc3Npb24uCisgICAgICoKKyAgICAgKiBAbm90ZSBPbmx5IHVzZSB0aGlzIHdoZW4gc2VuZGluZyBNTEUgQW5ub3VuY2UgbWVzc2FnZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hhbm5lbCAgVGhlIElFRUUgODAyLjE1LjQgQ2hhbm5lbCB0byB1c2UgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q2hhbm5lbCh1aW50OF90IGFDaGFubmVsKSB7IG1CdWZmZXIubUhlYWQubUluZm8ubVBhbklkQ2hhbm5lbC5tQ2hhbm5lbCA9IGFDaGFubmVsOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0aW1lb3V0IHVzZWQgZm9yIDZMb1dQQU4gcmVhc3NlbWJseS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSB0aW1lIHJlbWFpbmluZyBpbiBzZWNvbmRzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRUaW1lb3V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubVRpbWVvdXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHRpbWVvdXQgdXNlZCBmb3IgNkxvV1BBTiByZWFzc2VtYmx5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVvdXQgIFRoZSB0aW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUaW1lb3V0KHVpbnQ4X3QgYVRpbWVvdXQpIHsgbUJ1ZmZlci5tSGVhZC5tSW5mby5tVGltZW91dCA9IGFUaW1lb3V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBpbnRlcmZhY2UgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgaW50ZXJmYWNlIElELgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldEludGVyZmFjZUlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubUludGVyZmFjZUlkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBpbnRlcmZhY2UgSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW50ZXJmYWNlSWQgIFRoZSBpbnRlcmZhY2UgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEludGVyZmFjZUlkKGludDhfdCBhSW50ZXJmYWNlSWQpIHsgbUJ1ZmZlci5tSGVhZC5tSW5mby5tSW50ZXJmYWNlSWQgPSBhSW50ZXJmYWNlSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgd2hldGhlciBvciBub3QgbWVzc2FnZSBmb3J3YXJkaW5nIGlzIHNjaGVkdWxlZCBmb3IgZGlyZWN0IHRyYW5zbWlzc2lvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIG1lc3NhZ2UgZm9yd2FyZGluZyBpcyBzY2hlZHVsZWQgZm9yIGRpcmVjdCB0cmFuc21pc3Npb24uCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgbWVzc2FnZSBmb3J3YXJkaW5nIGlzIG5vdCBzY2hlZHVsZWQgZm9yIGRpcmVjdCB0cmFuc21pc3Npb24uCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIEdldERpcmVjdFRyYW5zbWlzc2lvbih2b2lkKSBjb25zdCB7IHJldHVybiBtQnVmZmVyLm1IZWFkLm1JbmZvLm1EaXJlY3RUeDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdW5zY2hlZHVsZXMgZm9yd2FyZGluZyB1c2luZyBkaXJlY3QgdHJhbnNtaXNzaW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckRpcmVjdFRyYW5zbWlzc2lvbih2b2lkKSB7IG1CdWZmZXIubUhlYWQubUluZm8ubURpcmVjdFR4ID0gZmFsc2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNjaGVkdWxlcyBmb3J3YXJkaW5nIHVzaW5nIGRpcmVjdCB0cmFuc21pc3Npb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERpcmVjdFRyYW5zbWlzc2lvbih2b2lkKSB7IG1CdWZmZXIubUhlYWQubUluZm8ubURpcmVjdFR4ID0gdHJ1ZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGxpbmsgc2VjdXJpdHkgaXMgZW5hYmxlZCBmb3IgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiBsaW5rIHNlY3VyaXR5IGlzIGVuYWJsZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgbGluayBzZWN1cml0eSBpcyBub3QgZW5hYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNMaW5rU2VjdXJpdHlFbmFibGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubUxpbmtTZWN1cml0eTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB3aGV0aGVyIG9yIG5vdCBsaW5rIHNlY3VyaXR5IGlzIGVuYWJsZWQgZm9yIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVuYWJsZWQgIFRSVUUgaWYgbGluayBzZWN1cml0eSBpcyBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExpbmtTZWN1cml0eUVuYWJsZWQoYm9vbCBhRW5hYmxlZCkgeyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1MaW5rU2VjdXJpdHkgPSBhRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1cGRhdGUgYSBjaGVja3N1bSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGVja3N1bSAgSW5pdGlhbCBjaGVja3N1bSB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICBhT2Zmc2V0ICAgIEJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgbWVzc2FnZSB0byBiZWdpbiBjaGVja3N1bSBjb21wdXRhdGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgIE51bWJlciBvZiBieXRlcyB0byBjb21wdXRlIHRoZSBjaGVja3N1bSBvdmVyLgorICAgICAqCisgICAgICogQHJldHZhbCBUaGUgdXBkYXRlZCBjaGVja3N1bSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IFVwZGF0ZUNoZWNrc3VtKHVpbnQxNl90IGFDaGVja3N1bSwgdWludDE2X3QgYU9mZnNldCwgdWludDE2X3QgYUxlbmd0aCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBxdWV1ZSAoaWYgYW55KSB3aGVyZSB0aGlzIG1lc3NhZ2UgaXMgcXVldWVkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIHF1ZXVlIG9yIE5VTEwgaWYgbm90IGluIGFueSBtZXNzYWdlIHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZVF1ZXVlICpHZXRNZXNzYWdlUXVldWUodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gKCFtQnVmZmVyLm1IZWFkLm1JbmZvLm1JblByaW9yaXR5USkgPyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1RdWV1ZS5tTWVzc2FnZSA6IE5VTEw7CisgICAgfQorCitwcml2YXRlOgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgcG9vbCB0byB3aGljaCB0aGlzIG1lc3NhZ2UgYmVsb25ncworICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIHBvb2wuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlUG9vbCAqR2V0TWVzc2FnZVBvb2wodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tTWVzc2FnZVBvb2w7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG1lc3NhZ2UgcG9vbCB0aGlzIG1lc3NhZ2UgdG8gd2hpY2ggdGhpcyBtZXNzYWdlIGJlbG9uZ3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFNZXNzYWdlUG9vbCAgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIHBvb2wKKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWVzc2FnZVBvb2woTWVzc2FnZVBvb2wgKmFNZXNzYWdlUG9vbCkgeyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1NZXNzYWdlUG9vbCA9IGFNZXNzYWdlUG9vbDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG1lc3NhZ2UgaXMgZW5xdWV1ZWQgaW4gYW55IHF1ZXVlIChgTWVzc2FnZVF1ZXVlYCBvciBgUHJpb3JpdHlRdWV1ZWApLgorICAgICAqCisgICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBtZXNzYWdlIGlzIGluIGFueSBxdWV1ZSwgYGZhbHNlYCBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzSW5BUXVldWUodm9pZCkgY29uc3QgeyByZXR1cm4gKG1CdWZmZXIubUhlYWQubUluZm8ubVF1ZXVlLm1NZXNzYWdlICE9IE5VTEwpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBtZXNzYWdlIHF1ZXVlIGluZm9ybWF0aW9uIGZvciB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlUXVldWUgIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBxdWV1ZSB3aGVyZSB0aGlzIG1lc3NhZ2UgaXMgcXVldWVkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNZXNzYWdlUXVldWUoTWVzc2FnZVF1ZXVlICphTWVzc2FnZVF1ZXVlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwcmlvcml0eSBtZXNzYWdlIHF1ZXVlIChpZiBhbnkpIHdoZXJlIHRoaXMgbWVzc2FnZSBpcyBxdWV1ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIHByaW9yaXR5IHF1ZXVlIG9yIE5VTEwgaWYgbm90IGluIGFueSBwcmlvcml0eSBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIFByaW9yaXR5UXVldWUgKkdldFByaW9yaXR5UXVldWUodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gKG1CdWZmZXIubUhlYWQubUluZm8ubUluUHJpb3JpdHlRKSA/IG1CdWZmZXIubUhlYWQubUluZm8ubVF1ZXVlLm1Qcmlvcml0eSA6IE5VTEw7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbWVzc2FnZSBxdWV1ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJpb3JpdHlRdWV1ZSAgQSBwb2ludGVyIHRvIHRoZSBwcmlvcml0eSBxdWV1ZSB3aGVyZSB0aGlzIG1lc3NhZ2UgaXMgcXVldWVkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQcmlvcml0eVF1ZXVlKFByaW9yaXR5UXVldWUgKmFQcmlvcml0eVF1ZXVlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGBtTmV4dGAgcG9pbnRlciBmb3IgYSBnaXZlbiBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpc3QgIFRoZSBpbmRleCB0byB0aGUgbWVzc2FnZSBsaXN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIG1OZXh0IHBvaW50ZXIgZm9yIHRoZSBzcGVjaWZpZWQgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2UgKiZOZXh0KHVpbnQ4X3QgYUxpc3QpIHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubU5leHRbYUxpc3RdOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBgbU5leHRgIHBvaW50ZXIgZm9yIGEgZ2l2ZW4gbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaXN0ICBUaGUgaW5kZXggdG8gdGhlIG1lc3NhZ2UgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBtTmV4dCBwb2ludGVyIGZvciB0aGUgc3BlY2lmaWVkIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlICpjb25zdCAmTmV4dCh1aW50OF90IGFMaXN0KSBjb25zdCB7IHJldHVybiBtQnVmZmVyLm1IZWFkLm1JbmZvLm1OZXh0W2FMaXN0XTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYG1QcmV2YCBwb2ludGVyIGZvciBhIGdpdmVuIGxpc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlzdCAgVGhlIGluZGV4IHRvIHRoZSBtZXNzYWdlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgbVByZXYgcG9pbnRlciBmb3IgdGhlIHNwZWNpZmllZCBsaXN0LgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqJlByZXYodWludDhfdCBhTGlzdCkgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tUHJldlthTGlzdF07IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiByZXNlcnZlZCBoZWFkZXIgYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIHJlc2VydmVkIGhlYWRlciBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFJlc2VydmVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubVJlc2VydmVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBudW1iZXIgb2YgcmVzZXJ2ZWQgaGVhZGVyIGJ5dGVzLgorICAgICAqCisgICAgICogQHByYW1baW5dICBhUmVzZXJ2ZWRIZWFkZXIgIFRoZSBudW1iZXIgb2YgaGVhZGVyIGJ5dGVzIHRvIHJlc2VydmUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJlc2VydmVkKHVpbnQxNl90IGFSZXNlcnZlZEhlYWRlcikgeyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1SZXNlcnZlZCA9IGFSZXNlcnZlZEhlYWRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBvciBmcmVlcyBtZXNzYWdlIGJ1ZmZlcnMgdG8gbWVldCB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgbWVzc2FnZSBidWZmZXIgbmVlZHMgdG8gaGFuZGxlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgcmVzaXplZCB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIENvdWxkIG5vdCBncm93IHRoZSBtZXNzYWdlIGR1ZSB0byBpbnN1ZmZpY2llbnQgYXZhaWxhYmxlIG1lc3NhZ2UgYnVmZmVycy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVzaXplTWVzc2FnZSh1aW50MTZfdCBhTGVuZ3RoKTsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgbWVzc2FnZSBxdWV1ZS4KKyAqCisgKi8KK2NsYXNzIE1lc3NhZ2VRdWV1ZSA6IHB1YmxpYyBvdE1lc3NhZ2VRdWV1ZQoreworICAgIGZyaWVuZCBjbGFzcyBNZXNzYWdlOworICAgIGZyaWVuZCBjbGFzcyBQcmlvcml0eVF1ZXVlOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgbWVzc2FnZSBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2VRdWV1ZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqR2V0SGVhZCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBtZXNzYWdlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gYWRkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIG1lc3NhZ2UgdG8gdGhlIGxpc3QuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICBUaGUgbWVzc2FnZSBpcyBhbHJlYWR5IGVucXVldWVkIGluIGEgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRW5xdWV1ZShNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgbWVzc2FnZSBmcm9tIHRoZSBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIFRoZSBtZXNzYWdlIHRvIHJlbW92ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBsaXN0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGUgbWVzc2FnZSBpcyBub3QgZW5xdWV1ZWQgaW4gYSBsaXN0LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBEZXF1ZXVlKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBhbmQgYnVmZmVycyBlbnF1ZXVlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhTWVzc2FnZUNvdW50ICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgZW5xdWV1ZWQuCisgICAgICogQHBhcmFtW291dF0gIGFCdWZmZXJDb3VudCAgIFJldHVybnMgdGhlIG51bWJlciBvZiBidWZmZXJzIGVucXVldWVkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBHZXRJbmZvKHVpbnQxNl90ICZhTWVzc2FnZUNvdW50LCB1aW50MTZfdCAmYUJ1ZmZlckNvdW50KSBjb25zdDsKKworcHJpdmF0ZToKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHRhaWwgb2YgdGhlIGxpc3QgKGxhc3QgbWVzc2FnZSBpbiB0aGUgbGlzdCkKKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdGFpbCBvZiB0aGUgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2UgKkdldFRhaWwodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihtRGF0YSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldCB0aGUgdGFpbCBvZiB0aGUgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgdG8gc2V0IGFzIG5ldyB0YWlsLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUYWlsKE1lc3NhZ2UgKmFNZXNzYWdlKSB7IG1EYXRhID0gYU1lc3NhZ2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBtZXNzYWdlIHRvIGEgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaXN0SWQgICBUaGUgbGlzdCB0byBhZGQgQHAgYU1lc3NhZ2UgdG8uCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIFRoZSBtZXNzYWdlIHRvIGFkZCB0byBAcCBhTGlzdElkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBBZGRUb0xpc3QodWludDhfdCBhTGlzdElkLCBNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgbWVzc2FnZSBmcm9tIGEgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaXN0SWQgICBUaGUgbGlzdCB0byBhZGQgQHAgYU1lc3NhZ2UgdG8uCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIFRoZSBtZXNzYWdlIHRvIGFkZCB0byBAcCBhTGlzdElkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmVGcm9tTGlzdCh1aW50OF90IGFMaXN0SWQsIE1lc3NhZ2UgJmFNZXNzYWdlKTsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgcHJpb3JpdHkgcXVldWUuCisgKgorICovCitjbGFzcyBQcmlvcml0eVF1ZXVlCit7CisgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2U7CisgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VRdWV1ZTsKKyAgICBmcmllbmQgY2xhc3MgTWVzc2FnZVBvb2w7CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBwcmlvcml0eSBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIFByaW9yaXR5UXVldWUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2UgKkdldEhlYWQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG1lc3NhZ2UgZm9yIGEgZ2l2ZW4gcHJpb3JpdHkgbGV2ZWwuCisgICAgICAqCisgICAgICAqIEBwYXJhbVtpbl0gYVByaW9yaXR5ICAgUHJpb3JpdHkgbGV2ZWwuCisgICAgICAqCisgICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgbWVzc2FnZSB3aXRoIGdpdmVuIHByaW9yaXR5IGxldmVsIG9yIE5VTEwgaWYgdGhlcmUgaXMgbm8gbWVzc2FnZXMgd2l0aAorICAgICAgKiAgICAgICAgICB0aGlzIHByaW9yaXR5IGxldmVsLgorICAgICAgKgorICAgICAgKi8KKyAgICBNZXNzYWdlICpHZXRIZWFkRm9yUHJpb3JpdHkodWludDhfdCBhUHJpb3JpdHkpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhIG1lc3NhZ2UgdG8gdGhlIHF1ZXVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIFRoZSBtZXNzYWdlIHRvIGFkZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBtZXNzYWdlIHRvIHRoZSBsaXN0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIG1lc3NhZ2UgaXMgYWxyZWFkeSBlbnF1ZXVlZCBpbiBhIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEVucXVldWUoTWVzc2FnZSAmYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhIG1lc3NhZ2UgZnJvbSB0aGUgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBUaGUgbWVzc2FnZSB0byByZW1vdmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgbGlzdC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgVGhlIG1lc3NhZ2UgaXMgbm90IGVucXVldWVkIGluIGEgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRGVxdWV1ZShNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgYW5kIGJ1ZmZlcnMgZW5xdWV1ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYU1lc3NhZ2VDb3VudCAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGVucXVldWVkLgorICAgICAqIEBwYXJhbVtvdXRdICBhQnVmZmVyQ291bnQgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVmZmVycyBlbnF1ZXVlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgR2V0SW5mbyh1aW50MTZfdCAmYU1lc3NhZ2VDb3VudCwgdWludDE2X3QgJmFCdWZmZXJDb3VudCkgY29uc3Q7CisKK3ByaXZhdGU6CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0YWlsIG9mIHRoZSBsaXN0IChsYXN0IG1lc3NhZ2UgaW4gdGhlIGxpc3QpCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIHRhaWwgb2YgdGhlIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlICpHZXRUYWlsKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhIG1lc3NhZ2UgdG8gYSBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpc3RJZCAgIFRoZSBsaXN0IHRvIGFkZCBAcCBhTWVzc2FnZSB0by4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gYWRkIHRvIEBwIGFMaXN0SWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEFkZFRvTGlzdCh1aW50OF90IGFMaXN0SWQsIE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYSBtZXNzYWdlIGZyb20gYSBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpc3RJZCAgIFRoZSBsaXN0IHRvIGFkZCBAcCBhTWVzc2FnZSB0by4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gYWRkIHRvIEBwIGFMaXN0SWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlbW92ZUZyb21MaXN0KHVpbnQ4X3QgYUxpc3RJZCwgTWVzc2FnZSAmYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVjcmVhc2VzIChtb3ZlcyBiYWNrKSB0aGUgZ2l2ZW4gcHJpb3JpdHkgd2hpbGUgZW5zdXJpbmcgdG8gd3JhcCBmcm9tCisgICAgICogcHJpb3JpdHkgdmFsdWUgMCBiYWNrIHRvIGBrTnVtUHJpb3JpdGllc2AgLTEuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFQcmlvcml0eSAgQSBnaXZlbiBwcmlvcml0eSBsZXZlbAorICAgICAqCisgICAgICogQHJldHVybnMgRGVjcmVhc2VkL01vdmVkIGJhY2sgcHJpb3JpdHkgbGV2ZWwKKyAgICAgKi8KKyAgICB1aW50OF90IFByZXZQcmlvcml0eSh1aW50OF90IGFQcmlvcml0eSkgY29uc3QgeworICAgICAgICByZXR1cm4gKGFQcmlvcml0eSA9PSAwKSA/IChNZXNzYWdlOjprTnVtUHJpb3JpdGllcyAtIDEpIDogKGFQcmlvcml0eSAtIDEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgcHJpdmF0ZSBtZXRob2QgZmluZHMgdGhlIGZpcnN0IG5vbi1OVUxMIHRhaWwgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gcHJpb3JpdHkgbGV2ZWwgYW5kIG1vdmluZyBiYWNrLgorICAgICAqIEl0IHdyYXBzIGZyb20gcHJpb3JpdHkgdmFsdWUgMCBiYWNrIHRvIGBrTnVtUHJpb3JpdGllc2AgLTEuCisgICAgICoKKyAgICAgKiBhU3RhcnRQcmlvcml0eUxldmVsICBTdGFydGluZyBwcmlvcml0eSBsZXZlbC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBmaXJzdCBub24tTlVMTCB0YWlsIHBvaW50ZXIsIG9yIE5VTEwgaWYgYWxsIHRoZQorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqRmluZEZpcnN0Tm9uTnVsbFRhaWwodWludDhfdCBhU3RhcnRQcmlvcml0eUxldmVsKSBjb25zdDsKKworcHJpdmF0ZToKKworICAgIE1lc3NhZ2UgKm1UYWlsc1tNZXNzYWdlOjprTnVtUHJpb3JpdGllc107ICAgLy8vPCBUYWlsIHBvaW50ZXJzIGFzc29jaWF0ZWQgd2l0aCBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWxzLgorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBtZXNzYWdlIHBvb2wKKyAqCisgKi8KK2NsYXNzIE1lc3NhZ2VQb29sOiBwdWJsaWMgSW5zdGFuY2VMb2NhdG9yCit7CisgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2U7CisgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VRdWV1ZTsKKyAgICBmcmllbmQgY2xhc3MgUHJpb3JpdHlRdWV1ZTsKKworcHVibGljOgorCisgICAgLyoqCisgICAgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gaXRlcmF0b3IgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBxdWV1ZWQgbWVzc2FnZSBmcm9tIHRoaXMgcG9vbC4KKyAgICAqCisgICAgKi8KKyAgICBjbGFzcyBJdGVyYXRvcgorICAgIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VQb29sOworCisgICAgcHVibGljOgorICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyBhbiBlbXB0eSBpdGVyYXRvci4KKyAgICAgICAgICovCisgICAgICAgIEl0ZXJhdG9yKHZvaWQpIDogbU1lc3NhZ2UoTlVMTCkgeyB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgbWVzc2FnZSB3aXRoIHRoZSBpdGVyYXRvci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIGFzc29jaWF0ZWQgbWVzc2FnZSB3aXRoIHRoaXMgaXRlcmF0b3IuCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBNZXNzYWdlICpHZXRNZXNzYWdlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NZXNzYWdlOyB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgIGlmIHRoZSBpdGVyYXRvciBpcyBlbXB0eSAoaS5lLiwgYXNzb2NpYXRlZCB3aXRoIGEgTlVMTCBtZXNzYWdlKQorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGl0ZXJhdG9yIGlzIGVtcHR5LCBgZmFsc2VgIG90aGVyd2lzZS4KKyAgICAgICAgICovCisgICAgICAgIGJvb2wgSXNFbXB0eSh2b2lkKSBjb25zdCB7IHJldHVybiAobU1lc3NhZ2UgPT0gTlVMTCk7IH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGl0ZXJhdG9yIGhhcyBlbmRlZCAoYmV5b25kIHRoZSBsYXN0IG1lc3NhZ2Ugb24gbGlzdCkuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaXRlcmF0b3IgaGFzIGVuZGVkICwgYGZhbHNlYCBvdGhlcndpc2UuCisgICAgICAgICAqLworICAgICAgICBib29sIEhhc0VuZGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIElzRW1wdHkoKTsgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGl0ZXJhdG9yIGNvcnJlc3BvbmRpbmcgdG8gbmV4dCBtZXNzYWdlIG9uIHRoZSBsaXN0LgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJucyBBbiBpdGVyYXRvciBjb3JyZXNwb25kaW5nIHRvIG5leHQgbWVzc2FnZSBvbiB0aGUgbGlzdC4KKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIEl0ZXJhdG9yIEdldE5leHQodm9pZCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IoTmV4dCgpKTsgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGl0ZXJhdG9yIGNvcnJlc3BvbmRpbmcgdG8gcHJldmlvdXMgbWVzc2FnZSBvbiB0aGUgbGlzdC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybnMgQW4gaXRlcmF0b3IgY29ycmVzcG9uZGluZyB0byBwcmV2aW91cyBtZXNzYWdlIG9uIHRoZSBsaXN0LgorICAgICAgICAgKgorICAgICAgICAgKi8KKyAgICAgICAgSXRlcmF0b3IgR2V0UHJldih2b2lkKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcihQcmV2KCkpOyB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIG1vdmVzIHRoZSBjdXJyZW50IGl0ZXJhdG9yIHRvIHRoZSBuZXh0IG1lc3NhZ2Ugb24gdGhlIGxpc3QuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIGN1cnJlbnQgaXRlcmF0b3IuCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBJdGVyYXRvciAmR29Ub05leHQodm9pZCkgeyBtTWVzc2FnZSA9IE5leHQoKTsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIG1vdmVzIHRoZSBjdXJyZW50IGl0ZXJhdG9yIHRvIHRoZSBwcmV2aW91cyBtZXNzYWdlIG9uIHRoZSBsaXN0LgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byBjdXJyZW50IGl0ZXJhdG9yLgorICAgICAgICAgKgorICAgICAgICAgKi8KKyAgICAgICAgSXRlcmF0b3IgJkdvVG9QcmV2KHZvaWQpIHsgbU1lc3NhZ2UgPSBQcmV2KCk7IHJldHVybiAqdGhpczsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSXRlcmF0b3IoTWVzc2FnZSAqYU1lc3NhZ2UpIDogbU1lc3NhZ2UoYU1lc3NhZ2UpIHsgfQorICAgICAgICBNZXNzYWdlICpOZXh0KHZvaWQpIGNvbnN0OworICAgICAgICBNZXNzYWdlICpQcmV2KHZvaWQpIGNvbnN0OworCisgICAgICAgIE1lc3NhZ2UgKm1NZXNzYWdlOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlUG9vbChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBvYnRhaW4gYSBuZXcgbWVzc2FnZS4gVGhlIGRlZmF1bHQgcHJpb3JpdHkgYGtEZWZhdWx0TWVzc2FnZVByaW9yaXR5YAorICAgICAqIGlzIGFzc2lnbmVkIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgICAgICAgICAgIFRoZSBtZXNzYWdlIHR5cGUuCisgICAgICogQHBhcmFtW2luXSAgYVJlc2VydmVIZWFkZXIgIFRoZSBudW1iZXIgb2YgaGVhZGVyIGJ5dGVzIHRvIHJlc2VydmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2Ugb3IgTlVMTCBpZiBubyBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZS4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2UgKk5ldyh1aW50OF90IGFUeXBlLCB1aW50MTZfdCBhUmVzZXJ2ZUhlYWRlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGZyZWUgYSBtZXNzYWdlIGFuZCByZXR1cm4gYWxsIG1lc3NhZ2UgYnVmZmVycyB0byB0aGUgYnVmZmVyIHBvb2wuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gZnJlZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgZnJlZWQgdGhlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBtZXNzYWdlIGlzIGFscmVhZHkgZnJlZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEZyZWUoTWVzc2FnZSAqYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG1lc3NhZ2UgKGhlYWQpIGluIHRoZSBhbGwtbWVzc2FnZXMgbGlzdC4KKyAgICAgKiBNZXNzYWdlcyBhcmUgc29ydGVkIGJhc2VkIG9uIHRoZWlyIHByaW9yaXR5IChoZWFkIHdpdGggaGlnaGVzdCBwcmlvcml0eSkgYW5kIG9yZGVyIGJ5IHdoaWNoIHRoZXkgYXJlIGVucXVldWVkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgSXRlcmF0b3IgR2V0QWxsTWVzc2FnZXNIZWFkKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxhc3QgbWVzc2FnZSAoaGVhZCkgaW4gdGhlIGFsbC1tZXNzYWdlcyBsaXN0LgorICAgICAqIE1lc3NhZ2VzIGFyZSBzb3J0ZWQgYmFzZWQgb24gdGhlaXIgcHJpb3JpdHkgKGhlYWQgd2l0aCBoaWdoZXN0IHByaW9yaXR5KSBhbmQgb3JkZXIgYnkgd2hpY2ggdGhleSBhcmUgZW5xdWV1ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGxhc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIEl0ZXJhdG9yIEdldEFsbE1lc3NhZ2VzVGFpbCh2b2lkKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcihtQWxsUXVldWUuR2V0VGFpbCgpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyZWUgYnVmZmVycy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZnJlZSBidWZmZXJzLgorICAgICAqCisgICAgICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UCisgICAgdWludDE2X3QgR2V0RnJlZUJ1ZmZlckNvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG90UGxhdE1lc3NhZ2VQb29sTnVtRnJlZUJ1ZmZlcnMoR2V0SW5zdGFuY2UoKSk7IH0KKyNlbHNlCisgICAgdWludDE2X3QgR2V0RnJlZUJ1ZmZlckNvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1OdW1GcmVlQnVmZmVyczsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0RlZmF1bHRNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlOjprUHJpb3JpdHlMb3csCisgICAgfTsKKworICAgIEJ1ZmZlciAqTmV3QnVmZmVyKHZvaWQpOworICAgIG90RXJyb3IgRnJlZUJ1ZmZlcnMoQnVmZmVyICphQnVmZmVyKTsKKyAgICBvdEVycm9yIFJlY2xhaW1CdWZmZXJzKGludCBhTnVtQnVmZmVycyk7CisgICAgUHJpb3JpdHlRdWV1ZSAqR2V0QWxsTWVzc2FnZXNRdWV1ZSh2b2lkKSB7IHJldHVybiAmbUFsbFF1ZXVlOyB9CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19QTEFURk9STV9NRVNTQUdFX01BTkFHRU1FTlQgPT0gMAorICAgIHVpbnQxNl90IG1OdW1GcmVlQnVmZmVyczsKKyAgICBCdWZmZXIgICBtQnVmZmVyc1trTnVtQnVmZmVyc107CisgICAgQnVmZmVyICAgKm1GcmVlQnVmZmVyczsKKyNlbmRpZgorCisgICAgUHJpb3JpdHlRdWV1ZSBtQWxsUXVldWU7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1FU1NBR0VfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL25ldy5ocHAgYi9zcmMvY29yZS9jb21tb24vbmV3LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTk1MzgzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29tbW9uL25ldy5ocHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgbmV3IG9wZXJhdG9yIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE5FV19IUFBfCisjZGVmaW5lIE5FV19IUFBfCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vdG9vbGNoYWluLmg+CisKK2lubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpwKSB0aHJvdygpIHsgcmV0dXJuIHA7IH0KKworI2VuZGlmICAvLyBORVdfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL3NldHRpbmdzLmhwcCBiL3NyYy9jb3JlL2NvbW1vbi9zZXR0aW5ncy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyNDMxZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9zZXR0aW5ncy5ocHAKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgZGVidWdnaW5nLgorICovCisKKyNpZm5kZWYgU0VUVElOR1NfSFBQXworI2RlZmluZSBTRVRUSU5HU19IUFBfCisKKyNpbmNsdWRlICJ0aHJlYWQvbWxlLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBTZXR0aW5ncyB7CisKKy8qKgorICogUnVsZXMgZm9yIHVwZGF0aW5nIGV4aXN0aW5nIHZhbHVlIHN0cnVjdHVyZXMuCisgKgorICogMS4gTW9kaWZ5aW5nIGV4aXN0aW5nIG90UGxhdFNldHRpbmdzKiBrZXkgdmFsdWUgZmllbGRzIE1VU1Qgb25seSBiZQorICogICAgZG9uZSBieSBhcHBlbmRpbmcgbmV3IGZpZWxkcy4gIEV4aXN0aW5nIGZpZWxkcyBNVVNUIE5PVCBiZQorICogICAgZGVsZXRlZCBvciBtb2RpZmllZCBpbiBhbnkgd2F5LgorICoKKyAqIDIuIFRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAocm9sbGluZyBiYWNrIHRvIGFuIG9sZGVyCisgKiAgICBzb2Z0d2FyZSB2ZXJzaW9uKSwgY29kZSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIGtleSB2YWx1ZXMgTVVTVAorICogICAgcHJvY2VzcyBrZXkgdmFsdWVzIHRoYXQgaGF2ZSBsb25nZXIgbGVuZ3RoLiAgQWRkaXRpb25hbGx5LCBuZXdlcgorICogICAgdmVyc2lvbnMgTVVTVCB1cGRhdGUvbWFpbnRhaW4gdmFsdWVzIGluIGV4aXN0aW5nIGtleSB2YWx1ZQorICogICAgZmllbGRzLgorICoKKyAqIDMuIFRvIHN1cHBvcnQgZm9yd2FyZCBjb21wYXRpYmlsaXR5IChyb2xsaW5nIGZvcndhcmQgdG8gYSBuZXdlcgorICogICAgc29mdHdhcmUgdmVyc2lvbiksIGNvZGUgcmVhZGluZyBhbmQgcHJvY2Vzc2luZyBrZXkgdmFsdWVzIE1VU1QKKyAqICAgIHByb2Nlc3Mga2V5IHZhbHVlcyB0aGF0IGhhdmUgc2hvcnRlciBsZW5ndGguCisgKgorICogNC4gTmV3IEtleSBJRHMgbWF5IGJlIGRlZmluZWQgaW4gdGhlIGZ1dHVyZSB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nCisgKiAgICB0aGF0IHN1Y2gga2V5IHZhbHVlcyBhcmUgbm90IGJhY2t3YXJkIGNvbXBhdGlibGUuCisgKgorICovCisKKy8qKgorICogVGhpcyBlbnVtZXJhdGlvbiBkZWZpbmVzIHRoZSBrZXlzIG9mIHNldHRpbmdzCisgKgorICovCitlbnVtCit7CisgICAga0tleUFjdGl2ZURhdGFzZXQgICA9IDB4MDAwMSwgIC8vLzwgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQKKyAgICBrS2V5UGVuZGluZ0RhdGFzZXQgID0gMHgwMDAyLCAgLy8vPCBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXQKKyAgICBrS2V5TmV0d29ya0luZm8gICAgID0gMHgwMDAzLCAgLy8vPCBUaHJlYWQgbmV0d29yayBpbmZvcm1hdGlvbgorICAgIGtLZXlQYXJlbnRJbmZvICAgICAgPSAweDAwMDQsICAvLy88IFBhcmVudCBpbmZvcm1hdGlvbgorICAgIGtLZXlDaGlsZEluZm8gICAgICAgPSAweDAwMDUsICAvLy88IENoaWxkIGluZm9ybWF0aW9uCisgICAga0tleVRocmVhZEF1dG9TdGFydCA9IDB4MDAwNiwgIC8vLzwgQXV0by1zdGFydCBpbmZvcm1hdGlvbgorfTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBkZXZpY2UncyBvd24gbmV0d29yayBpbmZvcm1hdGlvbiBmb3Igc2V0dGluZ3Mgc3RvcmFnZS4KKyAqCisgKi8KK3N0cnVjdCBOZXR3b3JrSW5mbworeworICAgIHVpbnQ4X3QgICAgICAgICAgbVJvbGU7ICAgICAgICAgICAgICAgICAgICAvLy88IEN1cnJlbnQgVGhyZWFkIHJvbGUuCisgICAgdWludDhfdCAgICAgICAgICBtRGV2aWNlTW9kZTsgICAgICAgICAgICAgIC8vLzwgRGV2aWNlIG1vZGUgc2V0dGluZy4KKyAgICB1aW50MTZfdCAgICAgICAgIG1SbG9jMTY7ICAgICAgICAgICAgICAgICAgLy8vPCBSTE9DMTYKKyAgICB1aW50MzJfdCAgICAgICAgIG1LZXlTZXF1ZW5jZTsgICAgICAgICAgICAgLy8vPCBLZXkgU2VxdWVuY2UKKyAgICB1aW50MzJfdCAgICAgICAgIG1NbGVGcmFtZUNvdW50ZXI7ICAgICAgICAgLy8vPCBNTEUgRnJhbWUgQ291bnRlcgorICAgIHVpbnQzMl90ICAgICAgICAgbU1hY0ZyYW1lQ291bnRlcjsgICAgICAgICAvLy88IE1BQyBGcmFtZSBDb3VudGVyCisgICAgdWludDMyX3QgICAgICAgICBtUHJldmlvdXNQYXJ0aXRpb25JZDsgICAgIC8vLzwgUGFydGl0aW9uSWQKKyAgICBNYWM6OkV4dEFkZHJlc3MgIG1FeHRBZGRyZXNzOyAgICAgICAgICAgICAgLy8vPCBFeHRlbmRlZCBBZGRyZXNzCisgICAgdWludDhfdCAgICAgICAgICBtTWxJaWRbT1RfSVA2X0lJRF9TSVpFXTsgIC8vLzwgSUlEIGZyb20gTUwtRUlECit9OworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIHBhcmVudCBpbmZvcm1hdGlvbiBmb3Igc2V0dGluZ3Mgc3RvcmFnZS4KKyAqCisgKi8KK3N0cnVjdCBQYXJlbnRJbmZvCit7CisgICAgTWFjOjpFeHRBZGRyZXNzICBtRXh0QWRkcmVzczsgICAvLy88IEV4dGVuZGVkIEFkZHJlc3MKK307CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgY2hpbGQgaW5mb3JtYXRpb24gZm9yIHNldHRpbmdzIHN0b3JhZ2UuCisgKgorICovCitzdHJ1Y3QgQ2hpbGRJbmZvCit7CisgICAgTWFjOjpFeHRBZGRyZXNzICBtRXh0QWRkcmVzczsgICAgLy8vPCBFeHRlbmRlZCBBZGRyZXNzCisgICAgdWludDMyX3QgICAgICAgICBtVGltZW91dDsgICAgICAgLy8vPCBUaW1lb3V0CisgICAgdWludDE2X3QgICAgICAgICBtUmxvYzE2OyAgICAgICAgLy8vPCBSTE9DMTYKKyAgICB1aW50OF90ICAgICAgICAgIG1Nb2RlOyAgICAgICAgICAvLy88IFRoZSBNTEUgZGV2aWNlIG1vZGUKK307CisKK30gIC8vIG5hbWVzcGFjZSBTZXR0aW5ncworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gU0VUVElOR1NfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL3Rhc2tsZXQuY3BwIGIvc3JjL2NvcmUvY29tbW9uL3Rhc2tsZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YWQ5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vdGFza2xldC5jcHAKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHRhc2tsZXQgc2NoZWR1bGVyLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidGFza2xldC5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworVGFza2xldDo6VGFza2xldChUYXNrbGV0U2NoZWR1bGVyICZhU2NoZWR1bGVyLCBIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCk6CisgICAgVGFza2xldFNjaGVkdWxlckxvY2F0b3IoYVNjaGVkdWxlciksCisgICAgQ29udGV4dChhQ29udGV4dCksCisgICAgbUhhbmRsZXIoYUhhbmRsZXIpLAorICAgIG1OZXh0KE5VTEwpCit7Cit9CisKK290RXJyb3IgVGFza2xldDo6UG9zdCh2b2lkKQoreworICAgIHJldHVybiBHZXRUYXNrbGV0U2NoZWR1bGVyKCkuUG9zdCgqdGhpcyk7Cit9CisKK1Rhc2tsZXRTY2hlZHVsZXI6OlRhc2tsZXRTY2hlZHVsZXIodm9pZCk6CisgICAgbUhlYWQoTlVMTCksCisgICAgbVRhaWwoTlVMTCkKK3sKK30KKworb3RFcnJvciBUYXNrbGV0U2NoZWR1bGVyOjpQb3N0KFRhc2tsZXQgJmFUYXNrbGV0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG1UYWlsICE9ICZhVGFza2xldCAmJiBhVGFza2xldC5tTmV4dCA9PSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworCisgICAgaWYgKG1UYWlsID09IE5VTEwpCisgICAgeworICAgICAgICBtSGVhZCA9ICZhVGFza2xldDsKKyAgICAgICAgbVRhaWwgPSAmYVRhc2tsZXQ7CisgICAgICAgIG90VGFza2xldHNTaWduYWxQZW5kaW5nKGFUYXNrbGV0LkdldEluc3RhbmNlKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVGFpbC0+bU5leHQgPSAmYVRhc2tsZXQ7CisgICAgICAgIG1UYWlsID0gJmFUYXNrbGV0OworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK1Rhc2tsZXQgKlRhc2tsZXRTY2hlZHVsZXI6OlBvcFRhc2tsZXQodm9pZCkKK3sKKyAgICBUYXNrbGV0ICp0YXNrID0gbUhlYWQ7CisKKyAgICBpZiAodGFzayAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbUhlYWQgPSBtSGVhZC0+bU5leHQ7CisKKyAgICAgICAgaWYgKG1IZWFkID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UYWlsID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHRhc2stPm1OZXh0ID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gdGFzazsKK30KKwordm9pZCBUYXNrbGV0U2NoZWR1bGVyOjpQcm9jZXNzUXVldWVkVGFza2xldHModm9pZCkKK3sKKyAgICBUYXNrbGV0ICp0YWlsID0gbVRhaWw7CisgICAgVGFza2xldCAqY3VyOworCisgICAgd2hpbGUgKChjdXIgPSBQb3BUYXNrbGV0KCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBjdXItPlJ1blRhc2soKTsKKworICAgICAgICAvLyBvbmx5IHByb2Nlc3MgdGFza2xldHMgdGhhdCB3ZXJlIHF1ZXVlZCBhdCB0aGUgdGltZSB0aGlzIG1ldGhvZCB3YXMgY2FsbGVkCisgICAgICAgIGlmIChjdXIgPT0gdGFpbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1IZWFkICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RUYXNrbGV0c1NpZ25hbFBlbmRpbmcobUhlYWQtPkdldEluc3RhbmNlKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vdGFza2xldC5ocHAgYi9zcmMvY29yZS9jb21tb24vdGFza2xldC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmYjAyOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi90YXNrbGV0LmhwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRhc2tsZXRzIGFuZCB0aGUgdGFza2xldCBzY2hlZHVsZXIuCisgKi8KKworI2lmbmRlZiBUQVNLTEVUX0hQUF8KKyNkZWZpbmUgVEFTS0xFVF9IUFBfCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90YXNrbGV0Lmg+CisKKyNpbmNsdWRlICJjb21tb24vY29udGV4dC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUYXNrbGV0U2NoZWR1bGVyOworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtdGFza2xldAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGFza2xldHMgYW5kIHRoZSB0YXNrbGV0IHNjaGVkdWxlci4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByZXByZXNlbnQgYSB0YXNrbGV0LgorICoKKyAqLworY2xhc3MgVGFza2xldDogcHVibGljIFRhc2tsZXRTY2hlZHVsZXJMb2NhdG9yLCBwdWJsaWMgQ29udGV4dAoreworICAgIGZyaWVuZCBjbGFzcyBUYXNrbGV0U2NoZWR1bGVyOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIHRoZSB0YXNrbGV0IGlzIHJ1bi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUYXNrbGV0ICBBIHJlZmVyZW5jZSB0byB0aGUgdGFza2xldCBiZWluZyBydW4uCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIHZvaWQgKCpIYW5kbGVyKShUYXNrbGV0ICZhVGFza2xldCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSB0YXNrbGV0IGluc3RhbmNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNjaGVkdWxlciAgQSByZWZlcmVuY2UgdG8gdGhlIHRhc2tsZXQgc2NoZWR1bGVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHRhc2tsZXQgaXMgcnVuLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIFRhc2tsZXQoVGFza2xldFNjaGVkdWxlciAmYVNjaGVkdWxlciwgSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcHV0cyB0aGUgdGFza2xldCBvbiB0aGUgcnVuIHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBQb3N0KHZvaWQpOworCitwcml2YXRlOgorICAgIHZvaWQgUnVuVGFzayh2b2lkKSB7IG1IYW5kbGVyKCp0aGlzKTsgfQorCisgICAgSGFuZGxlciAgICAgICAgICAgbUhhbmRsZXI7CisgICAgVGFza2xldCAgICAgICAgICAqbU5leHQ7Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgdGFza2xldCBzY2hlZHVsZXIuCisgKgorICovCitjbGFzcyBUYXNrbGV0U2NoZWR1bGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgVGFza2xldFNjaGVkdWxlcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVucXVldWVzIGEgdGFza2xldCBpbnRvIHRoZSBydW4gcXVldWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGFza2xldCAgQSByZWZlcmVuY2UgdG8gdGhlIHRhc2tsZXQgdG8gZW5xdWV1ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSB0YXNrbGV0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIHRhc2tsZXQgd2FzIGFscmVhZHkgZW5xdWV1ZWQuCisgICAgICovCisgICAgb3RFcnJvciBQb3N0KFRhc2tsZXQgJmFUYXNrbGV0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgdGFza2xldHMgcGVuZGluZy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZXJlIGFyZSB0YXNrbGV0cyBwZW5kaW5nLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZXJlIGFyZSBubyB0YXNrbGV0cyBwZW5kaW5nLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBBcmVUYXNrbGV0c1BlbmRpbmcodm9pZCkgeyByZXR1cm4gbUhlYWQgIT0gTlVMTDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcHJvY2Vzc2VzIGFsbCB0YXNrbGV0cyBxdWV1ZWQgd2hlbiB0aGlzIGlzIGNhbGxlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUHJvY2Vzc1F1ZXVlZFRhc2tsZXRzKHZvaWQpOworCitwcml2YXRlOgorICAgIFRhc2tsZXQgKlBvcFRhc2tsZXQodm9pZCk7CisgICAgVGFza2xldCAqbUhlYWQ7CisgICAgVGFza2xldCAqbVRhaWw7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFRBU0tMRVRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL3RpbWVyLmNwcCBiL3NyYy9jb3JlL2NvbW1vbi90aW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0NTJkMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi90aW1lci5jcHAKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSBtdWx0aXBsZXhlZCB0aW1lciBzZXJ2aWNlIG9uIHRvcCBvZiB0aGUgYWxhcm0gYWJzdHJhY3Rpb24uCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAidGltZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInRpbWVyLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK1RpbWVyU2NoZWR1bGVyOjpUaW1lclNjaGVkdWxlcih2b2lkKToKKyAgICBtSGVhZChOVUxMKQoreworfQorCit2b2lkIFRpbWVyU2NoZWR1bGVyOjpBZGQoVGltZXIgJmFUaW1lcikKK3sKKyAgICBSZW1vdmUoYVRpbWVyKTsKKworICAgIGlmIChtSGVhZCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgbUhlYWQgPSAmYVRpbWVyOworICAgICAgICBhVGltZXIubU5leHQgPSBOVUxMOworICAgICAgICBTZXRBbGFybSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBUaW1lciAqcHJldiA9IE5VTEw7CisgICAgICAgIFRpbWVyICpjdXI7CisKKyAgICAgICAgZm9yIChjdXIgPSBtSGVhZDsgY3VyOyBjdXIgPSBjdXItPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYVRpbWVyLkRvZXNGaXJlQmVmb3JlKCpjdXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChwcmV2KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYVRpbWVyLm1OZXh0ID0gY3VyOworICAgICAgICAgICAgICAgICAgICBwcmV2LT5tTmV4dCA9ICZhVGltZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFUaW1lci5tTmV4dCA9IG1IZWFkOworICAgICAgICAgICAgICAgICAgICBtSGVhZCA9ICZhVGltZXI7CisgICAgICAgICAgICAgICAgICAgIFNldEFsYXJtKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByZXYgPSBjdXI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VyID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByZXYtPm1OZXh0ID0gJmFUaW1lcjsKKyAgICAgICAgICAgIGFUaW1lci5tTmV4dCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGltZXJTY2hlZHVsZXI6OlJlbW92ZShUaW1lciAmYVRpbWVyKQoreworICAgIFZlcmlmeU9yRXhpdChhVGltZXIubU5leHQgIT0gJmFUaW1lcik7CisKKyAgICBpZiAobUhlYWQgPT0gJmFUaW1lcikKKyAgICB7CisgICAgICAgIG1IZWFkID0gYVRpbWVyLm1OZXh0OworICAgICAgICBTZXRBbGFybSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKFRpbWVyICpjdXIgPSBtSGVhZDsgY3VyOyBjdXIgPSBjdXItPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY3VyLT5tTmV4dCA9PSAmYVRpbWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN1ci0+bU5leHQgPSBhVGltZXIubU5leHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhVGltZXIubU5leHQgPSAmYVRpbWVyOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBUaW1lclNjaGVkdWxlcjo6U2V0QWxhcm0odm9pZCkKK3sKKyAgICBpZiAobUhlYWQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90UGxhdEFsYXJtU3RvcChHZXRJcDYoKS0+R2V0SW5zdGFuY2UoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpbnQzMl90IG5vdyA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgICAgIHVpbnQzMl90IHJlbWFpbmluZyA9IElzU3RyaWN0bHlCZWZvcmUobm93LCBtSGVhZC0+bUZpcmVUaW1lKSA/IChtSGVhZC0+bUZpcmVUaW1lIC0gbm93KSA6IDA7CisKKyAgICAgICAgb3RQbGF0QWxhcm1TdGFydEF0KEdldElwNigpLT5HZXRJbnN0YW5jZSgpLCBub3csIHJlbWFpbmluZyk7CisgICAgfQorfQorCitleHRlcm4gIkMiIHZvaWQgb3RQbGF0QWxhcm1GaXJlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBhSW5zdGFuY2UtPm1JcDYubVRpbWVyU2NoZWR1bGVyLlByb2Nlc3NUaW1lcnMoKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK3ZvaWQgVGltZXJTY2hlZHVsZXI6OlByb2Nlc3NUaW1lcnModm9pZCkKK3sKKyAgICBUaW1lciAqdGltZXIgPSBtSGVhZDsKKworICAgIGlmICh0aW1lcikKKyAgICB7CisgICAgICAgIGlmICghSXNTdHJpY3RseUJlZm9yZShvdFBsYXRBbGFybUdldE5vdygpLCB0aW1lci0+bUZpcmVUaW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgUmVtb3ZlKCp0aW1lcik7CisgICAgICAgICAgICB0aW1lci0+RmlyZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFNldEFsYXJtKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU2V0QWxhcm0oKTsKKyAgICB9Cit9CisKK0lwNjo6SXA2ICpUaW1lclNjaGVkdWxlcjo6R2V0SXA2KHZvaWQpCit7CisgICAgcmV0dXJuIElwNjo6SXA2RnJvbVRpbWVyU2NoZWR1bGVyKHRoaXMpOworfQorCitib29sIFRpbWVyU2NoZWR1bGVyOjpJc1N0cmljdGx5QmVmb3JlKHVpbnQzMl90IGFUaW1lQSwgdWludDMyX3QgYVRpbWVCKQoreworICAgIHVpbnQzMl90IGRpZmYgPSBhVGltZUEgLSBhVGltZUI7CisKKyAgICAvLyBUaHJlZSBjYXNlczoKKyAgICAvLyAxKSBhVGltZUEgaXMgYmVmb3JlICBhVGltZUIgID0+ICBEaWZmZXJlbmNlIGlzIG5lZ2F0aXZlIChsYXN0IGJpdCBvZiBkaWZmZXJlbmNlIGlzIHNldCkgICA9PiBSZXR1cm5pbmcgdHJ1ZS4KKyAgICAvLyAyKSBhVGltZUEgaXMgc2FtZSBhcyBhVGltZUIgID0+ICBEaWZmZXJlbmNlIGlzIHplcm8gICAgIChsYXN0IGJpdCBvZiBkaWZmZXJlbmNlIGlzIGNsZWFyKSA9PiBSZXR1cm5pbmcgZmFsc2UuCisgICAgLy8gMykgYVRpbWVBIGlzIGFmdGVyICAgYVRpbWVCICA9PiAgRGlmZmVyZW5jZSBpcyBwb3NpdGl2ZSAobGFzdCBiaXQgb2YgZGlmZmVyZW5jZSBpcyBjbGVhcikgPT4gUmV0dXJuaW5nIGZhbHNlLgorCisgICAgcmV0dXJuICgoZGlmZiAmICgxVUwgPDwgMzEpKSAhPSAwKTsKK30KKworYm9vbCBUaW1lcjo6RG9lc0ZpcmVCZWZvcmUoY29uc3QgVGltZXIgJmFTZWNvbmRUaW1lcikKK3sKKyAgICBib29sIHJldHZhbDsKKyAgICB1aW50MzJfdCBub3cgPSBHZXROb3coKTsKKyAgICBib29sIGlzQmVmb3JlTm93ID0gVGltZXJTY2hlZHVsZXI6OklzU3RyaWN0bHlCZWZvcmUoR2V0RmlyZVRpbWUoKSwgbm93KTsKKworICAgIC8vIENoZWNrIGlmIG9uZSB0aW1lciBpcyBiZWZvcmUgYG5vd2AgYW5kIHRoZSBvdGhlciBvbmUgaXMgbm90LgorICAgIGlmIChUaW1lclNjaGVkdWxlcjo6SXNTdHJpY3RseUJlZm9yZShhU2Vjb25kVGltZXIuR2V0RmlyZVRpbWUoKSwgbm93KSAhPSBpc0JlZm9yZU5vdykKKyAgICB7CisgICAgICAgIC8vIE9uZSB0aW1lciBpcyBiZWZvcmUgYG5vd2AgYW5kIHRoZSBvdGhlciBvbmUgaXMgbm90LCBzbyBpZiB0aGlzIHRpbWVyJ3MgZmlyZSB0aW1lIGlzIGJlZm9yZSBgbm93YCB0aGVuCisgICAgICAgIC8vIHRoZSBzZWNvbmQgZmlyZSB0aW1lIHdvdWxkIGJlIGFmdGVyIGBub3dgIGFuZCB0aGlzIHRpbWVyIHdvdWxkIGZpcmUgYmVmb3JlIHRoZSBzZWNvbmQgdGltZXIuCisKKyAgICAgICAgcmV0dmFsID0gaXNCZWZvcmVOb3c7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIEJvdGggdGltZXJzIGFyZSBiZWZvcmUgYG5vd2Agb3IgYm90aCBhcmUgYWZ0ZXIgYG5vd2AuIEVpdGhlciB3YXkgdGhlIGRpZmZlcmVuY2UgaXMgZ3VhcmFudGVlZCB0byBiZSBsZXNzCisgICAgICAgIC8vIHRoYW4gYGtNYXhEdGAgc28gd2UgY2FuIHNhZmVseSBjb21wYXJlIHRoZSBmaXJlIHRpbWVzIGRpcmVjdGx5LgorCisgICAgICAgIHJldHZhbCA9IFRpbWVyU2NoZWR1bGVyOjpJc1N0cmljdGx5QmVmb3JlKEdldEZpcmVUaW1lKCksIGFTZWNvbmRUaW1lci5HZXRGaXJlVGltZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NvbW1vbi90aW1lci5ocHAgYi9zcmMvY29yZS9jb21tb24vdGltZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNWVmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vdGltZXIuaHBwCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIG11bHRpcGxleGVkIHRpbWVyIHNlcnZpY2UuCisgKi8KKworI2lmbmRlZiBUSU1FUl9IUFBfCisjZGVmaW5lIFRJTUVSX0hQUF8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2NvbnRleHQuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90YXNrbGV0LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworbmFtZXNwYWNlIElwNiB7IGNsYXNzIElwNjsgfQorCitjbGFzcyBUaW1lcjsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXRpbWVyCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgbXVsdGlwbGV4ZWQgdGltZXIgc2VydmljZS4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgdGltZXIgc2NoZWR1bGVyLgorICoKKyAqLworY2xhc3MgVGltZXJTY2hlZHVsZXIKK3sKKyAgICBmcmllbmQgY2xhc3MgVGltZXI7CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBUaW1lclNjaGVkdWxlcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSB0aW1lciBpbnN0YW5jZSB0byB0aGUgdGltZXIgc2NoZWR1bGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVyICBBIHJlZmVyZW5jZSB0byB0aGUgdGltZXIgaW5zdGFuY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEFkZChUaW1lciAmYVRpbWVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYSB0aW1lciBpbnN0YW5jZSB0byB0aGUgdGltZXIgc2NoZWR1bGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVyICBBIHJlZmVyZW5jZSB0byB0aGUgdGltZXIgaW5zdGFuY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlbW92ZShUaW1lciAmYVRpbWVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb2Nlc3NlcyB0aGUgcnVubmluZyB0aW1lcnMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFByb2Nlc3NUaW1lcnModm9pZCk7CisKK3ByaXZhdGU6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcGxhdGZvcm0gYWxhcm0gYmFzZWQgb24gdGltZXIgYXQgZnJvbnQgb2YgdGhlIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEFsYXJtKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgcGFyZW50IElwNiBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgcG9pbnRlciB0byB0aGUgcGFyZW50IElwNiBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKi8KKyAgICBJcDY6OklwNiAqR2V0SXA2KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIGNvbXBhcmVzIHR3byB0aW1lcyBhbmQgaW5kaWNhdGVzIGlmIHRoZSBmaXJzdCB0aW1lIGlzIHN0cmljdGx5IGJlZm9yZSAoZWFybGllcikgdGhhbiB0aGUKKyAgICAgKiBzZWNvbmQgdGltZS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGdpdmVuIHRpbWVzIHRvIGJlIHNtYWxsZXIgdGhhbiBrTWF4RHQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFUaW1lckEgICBUaGUgZmlyc3QgdGltZSBmb3IgY29tcGFyaXNvbi4KKyAgICAgKiBAcGFyYW1baW5dIGFUaW1lckIgICBUaGUgc2Vjb25kIHRpbWUgZm9yIGNvbXBhcmlzb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFICBpZiBhVGltZUEgaXMgYmVmb3JlIGFUaW1lQi4KKyAgICAgKiBAcmV0dXJucyBGQUxTRSBpZiBhVGltZUEgaXMgc2FtZSB0aW1lIG9yIGFmdGVyIGFUaW1lQi4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBib29sIElzU3RyaWN0bHlCZWZvcmUodWludDMyX3QgYVRpbWVBLCB1aW50MzJfdCBhVGltZUIpOworCisgICAgVGltZXIgKm1IZWFkOworfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSB0aW1lci4KKyAqCisgKi8KK2NsYXNzIFRpbWVyOiBwdWJsaWMgVGltZXJTY2hlZHVsZXJMb2NhdG9yLCBwdWJsaWMgQ29udGV4dAoreworICAgIGZyaWVuZCBjbGFzcyBUaW1lclNjaGVkdWxlcjsKKworcHVibGljOgorCisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heER0ID0gKDFVTCA8PCAzMSkgLSAxLCAgLy88IE1heGltdW0gcGVybWl0dGVkIHZhbHVlIGZvciBwYXJhbWV0ZXIgYGFEdGAgaW4gYFN0YXJ0YCBhbmQgYFN0YXJ0QXRgIG1ldGhvZC4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIHRoZSB0aW1lciBleHBpcmVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVyICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBleHBpcmVkIHRpbWVyIGluc3RhbmNlLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqSGFuZGxlcikoVGltZXIgJmFUaW1lcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSB0aW1lciBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTY2hlZHVsZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSB0aW1lciBzY2hlZHVsZXIuCisgICAgICogQHBhcmFtW2luXSAgYUhhbmRsZXIgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdGltZXIgZXhwaXJlcy4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBUaW1lcihUaW1lclNjaGVkdWxlciAmYVNjaGVkdWxlciwgSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOgorICAgICAgICBUaW1lclNjaGVkdWxlckxvY2F0b3IoYVNjaGVkdWxlciksCisgICAgICAgIENvbnRleHQoYUNvbnRleHQpLAorICAgICAgICBtSGFuZGxlcihhSGFuZGxlciksCisgICAgICAgIG1GaXJlVGltZSgwKSwKKyAgICAgICAgbU5leHQodGhpcykgeworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcmUgdGltZSBvZiB0aGUgdGltZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgZmlyZSB0aW1lIGluIG1pbGxpc2Vjb25kcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldEZpcmVUaW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1GaXJlVGltZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSB0aW1lciBpbnN0YW5jZSBpcyBydW5uaW5nLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIHRpbWVyIGlzIHJ1bm5pbmcuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIHRpbWVyIGlzIG5vdCBydW5uaW5nLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1J1bm5pbmcodm9pZCkgY29uc3QgeyByZXR1cm4gKG1OZXh0ICE9IHRoaXMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzY2hlZHVsZXMgdGhlIHRpbWVyIHRvIGZpcmUgYSBAcCBkdCBtaWxsaXNlY29uZHMgZnJvbSBub3cuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRHQgIFRoZSBleHBpcmUgdGltZSBpbiBtaWxsaXNlY29uZHMgZnJvbSBub3cuCisgICAgICogICAgICAgICAgICAgICAgICAoYUR0IG11c3QgYmUgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIGtNYXhEdCkuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFN0YXJ0KHVpbnQzMl90IGFEdCkgeyBTdGFydEF0KEdldE5vdygpLCBhRHQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzY2hlZHVsZXMgdGhlIHRpbWVyIHRvIGZpcmUgYXQgQHAgYUR0IG1pbGxpc2Vjb25kcyBmcm9tIEBwIGFUMC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUMCAgVGhlIHN0YXJ0IHRpbWUgaW4gbWlsbGlzZWNvbmRzLgorICAgICAqIEBwYXJhbVtpbl0gIGFEdCAgVGhlIGV4cGlyZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBmcm9tIEBwIGFUMC4KKyAgICAgKiAgICAgICAgICAgICAgICAgIChhRHQgbXVzdCBiZSBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8ga01heER0KS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RhcnRBdCh1aW50MzJfdCBhVDAsIHVpbnQzMl90IGFEdCkgeworICAgICAgICBhc3NlcnQoYUR0IDw9IGtNYXhEdCk7CisgICAgICAgIG1GaXJlVGltZSA9IGFUMCArIGFEdDsKKyAgICAgICAgR2V0VGltZXJTY2hlZHVsZXIoKS5BZGQoKnRoaXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSB0aW1lci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RvcCh2b2lkKSB7IEdldFRpbWVyU2NoZWR1bGVyKCkuUmVtb3ZlKCp0aGlzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBpbiBtaWxsaXNlY29uZHMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCB0aW1lIGluIG1pbGxpc2Vjb25kcy4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MzJfdCBHZXROb3codm9pZCkgeyByZXR1cm4gb3RQbGF0QWxhcm1HZXROb3coKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZ2l2ZW4gc2Vjb25kcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHVpbnQzMl90IFNlY1RvTXNlYyh1aW50MzJfdCBhU2Vjb25kcykgeyByZXR1cm4gYVNlY29uZHMgKiAxMDAwdTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGdpdmVuIG1pbGxpc2Vjb25kcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2Ygc2Vjb25kcy4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MzJfdCBNc2VjVG9TZWModWludDMyX3QgYU1pbGxpc2Vjb25kcykgeyByZXR1cm4gYU1pbGxpc2Vjb25kcyAvIDEwMDB1OyB9CisKK3ByaXZhdGU6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIGlmIHRoZSBmaXJlIHRpbWUgb2YgdGhpcyB0aW1lciBpcyBzdHJpY3RseSBiZWZvcmUgdGhlIGZpcmUgdGltZSBvZiBhIHNlY29uZCBnaXZlbiB0aW1lci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaW1lciAgIEEgcmVmZXJlbmNlIHRvIHRoZSBzZWNvbmQgdGltZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICBJZiB0aGUgZmlyZSB0aW1lIG9mIHRoaXMgdGltZXIgb2JqZWN0IGlzIHN0cmljdGx5IGJlZm9yZSBhVGltZXIncyBmaXJlIHRpbWUKKyAgICAgKiBAcmV0dmFsIEZBTFNFIElmIHRoZSBmaXJlIHRpbWUgb2YgdGhpcyB0aW1lciBvYmplY3QgaXMgdGhlIHNhbWUgb3IgYWZ0ZXIgYVRpbWVyJ3MgZmlyZSB0aW1lLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBEb2VzRmlyZUJlZm9yZShjb25zdCBUaW1lciAmYVRpbWVyKTsKKworICAgIHZvaWQgRmlyZWQodm9pZCkgeyBtSGFuZGxlcigqdGhpcyk7IH0KKworICAgIEhhbmRsZXIgICAgICAgICBtSGFuZGxlcjsKKyAgICB1aW50MzJfdCAgICAgICAgbUZpcmVUaW1lOworICAgIFRpbWVyICAgICAgICAgICptTmV4dDsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gVElNRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL3RsdnMuY3BwIGIvc3JjL2NvcmUvY29tbW9uL3RsdnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDViMDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vdGx2cy5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgY29tbW9uIG1ldGhvZHMgZm9yIG1hbmlwdWxhdGluZyBNTEUgVExWcy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInRsdnMuaHBwIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworb3RFcnJvciBUbHY6OkdldChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCBhVHlwZSwgdWludDE2X3QgYU1heExlbmd0aCwgVGx2ICZhVGx2KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgdWludDE2X3Qgb2Zmc2V0OworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEdldE9mZnNldChhTWVzc2FnZSwgYVR5cGUsIG9mZnNldCkpOworICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YoVGx2KSwgJmFUbHYpOworCisgICAgaWYgKGFNYXhMZW5ndGggPiBzaXplb2YoYVRsdikgKyBhVGx2LkdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgYU1heExlbmd0aCA9IHNpemVvZihhVGx2KSArIGFUbHYuR2V0TGVuZ3RoKCk7CisgICAgfQorCisgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIGFNYXhMZW5ndGgsICZhVGx2KTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgVGx2OjpHZXRPZmZzZXQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQ4X3QgYVR5cGUsIHVpbnQxNl90ICZhT2Zmc2V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDE2X3QgZW5kID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCk7CisgICAgVGx2IHRsdjsKKworICAgIHdoaWxlIChvZmZzZXQgPCBlbmQpCisgICAgeworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKFRsdiksICZ0bHYpOworCisgICAgICAgIC8vIHNraXAgZXh0ZW5kZWQgVExWCisgICAgICAgIGlmICh0bHYuR2V0TGVuZ3RoKCkgPT0ga0V4dGVuZGVkTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MTZfdCBsZW5ndGggPSAwOworCisgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHRsdik7CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKGxlbmd0aCksICZsZW5ndGgpOworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihsZW5ndGgpICsgSG9zdFN3YXAxNihsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRsdi5HZXRUeXBlKCkgPT0gYVR5cGUgJiYgKG9mZnNldCArIHNpemVvZih0bHYpICsgdGx2LkdldExlbmd0aCgpKSA8PSBlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHRsdikgKyB0bHYuR2V0TGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIFRsdjo6R2V0VmFsdWVPZmZzZXQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQ4X3QgYVR5cGUsIHVpbnQxNl90ICZhT2Zmc2V0LCB1aW50MTZfdCAmYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgIHVpbnQxNl90IG9mZnNldCA9IGFNZXNzYWdlLkdldE9mZnNldCgpOworICAgIHVpbnQxNl90IGVuZCA9IGFNZXNzYWdlLkdldExlbmd0aCgpOworCisgICAgd2hpbGUgKG9mZnNldCA8IGVuZCkKKyAgICB7CisgICAgICAgIFRsdiB0bHY7CisgICAgICAgIHVpbnQxNl90IGxlbmd0aDsKKworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHRsdik7CisKKyAgICAgICAgbGVuZ3RoID0gdGx2LkdldExlbmd0aCgpOworCisgICAgICAgIGlmIChsZW5ndGggPT0ga0V4dGVuZGVkTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKGxlbmd0aCksICZsZW5ndGgpOworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihsZW5ndGgpOworICAgICAgICAgICAgbGVuZ3RoID0gSG9zdFN3YXAxNihsZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRsdi5HZXRUeXBlKCkgPT0gYVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICBhTGVuZ3RoID0gbGVuZ3RoOworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisKKyAgICAgICAgb2Zmc2V0ICs9IGxlbmd0aDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NvbW1vbi90bHZzLmhwcCBiL3NyYy9jb3JlL2NvbW1vbi90bHZzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQzNTFlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29tbW9uL3RsdnMuaHBwCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgZ2VuZXJhdGluZyBhbmQgcHJvY2Vzc2luZyBNTEUgVExWcy4KKyAqLworCisjaWZuZGVmIFRMVlNfSFBQXworI2RlZmluZSBUTFZTX0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7Cit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAzMjsKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqLworICAgIFRsdih2b2lkKToKKyAgICAgICAgbVR5cGUoMCksCisgICAgICAgIG1MZW5ndGgoMCkge30KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0VHlwZSh2b2lkKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICBUaGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VHlwZSh1aW50OF90IGFUeXBlKSB7IG1UeXBlID0gYVR5cGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMZW5ndGgodWludDhfdCBhTGVuZ3RoKSB7IG1MZW5ndGggPSBhTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0b3RhbCBzaXplIGluY2x1ZGluZyBUeXBlLCBMZW5ndGgsIGFuZCBWYWx1ZSBmaWVsZHMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdG90YWwgc2l6ZSBpbmNsdWRlIFR5cGUsIExlbmd0aCwgYW5kIFZhbHVlIGZpZWxkcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0U2l6ZSh2b2lkKSBjb25zdCB7IHJldHVybiBzaXplb2YoVGx2KSArIG1MZW5ndGg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBWYWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90ICpHZXRWYWx1ZSh2b2lkKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4odGhpcykgKyBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldFZhbHVlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPih0aGlzKSArIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV4dCBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5leHQgVExWLgorICAgICAqCisgICAgICovCisgICAgVGx2ICpHZXROZXh0KHZvaWQpIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGx2ICo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPih0aGlzKSArIHNpemVvZigqdGhpcykgKyBtTGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV4dCBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5leHQgVExWLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgVGx2ICpHZXROZXh0KHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPih0aGlzKSArIHNpemVvZigqdGhpcykgKyBtTGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgcmVhZHMgdGhlIHJlcXVlc3RlZCBUTFYgb3V0IG9mIEBwIGFNZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gICBhVHlwZSAgICAgICBUaGUgVHlwZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICAgICAqIEBwYXJhbVtpbl0gICBhTWF4TGVuZ3RoICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZWFkLgorICAgICAqIEBwYXJhbVtvdXRdICBhVGx2ICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgVExWIHRoYXQgd2lsbCBiZSBjb3BpZWQgdG8uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGNvcGllZCB0aGUgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgVExWIHdpdGggVHlwZSBAcCBhVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIEdldChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCBhVHlwZSwgdWludDE2X3QgYU1heExlbmd0aCwgVGx2ICZhVGx2KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCBvYnRhaW5zIHRoZSBvZmZzZXQgb2YgYSBUTFYgd2l0aGluIEBwIGFNZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gICBhVHlwZSAgICAgICBUaGUgVHlwZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICAgICAqIEBwYXJhbVtvdXRdICBhT2Zmc2V0ICAgICBBIHJlZmVyZW5jZSB0byB0aGUgb2Zmc2V0IG9mIHRoZSBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGNvcGllZCB0aGUgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgVExWIHdpdGggVHlwZSBAcCBhVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIEdldE9mZnNldChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCBhVHlwZSwgdWludDE2X3QgJmFPZmZzZXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIGZpbmRzIHRoZSBvZmZzZXQgYW5kIGxlbmd0aCBvZiBhIGdpdmVuIFRMViB0eXBlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gICBhVHlwZSAgICAgICBUaGUgVHlwZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICAgICAqIEBwYXJhbVtvdXRdICBhT2Zmc2V0ICAgICBUaGUgb2Zmc2V0IHdoZXJlIHRoZSB2YWx1ZSBzdGFydHMuCisgICAgICogQHBhcmFtW291dF0gIGFMZW5ndGggICAgIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCB0aGUgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgVExWIHdpdGggVHlwZSBAcCBhVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIEdldFZhbHVlT2Zmc2V0KGNvbnN0IE1lc3NhZ2UgJmFNZXNhc2dlLCB1aW50OF90IGFUeXBlLCB1aW50MTZfdCAmYU9mZnNldCwgdWludDE2X3QgJmFMZW5ndGgpOworCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogTGVuZ3RoIHZhbHVlcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtFeHRlbmRlZExlbmd0aCA9IDI1NSwgLy8vPCBFeHRlbmRlZCBMZW5ndGggdmFsdWUKKyAgICB9OworCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVR5cGU7CisgICAgdWludDhfdCBtTGVuZ3RoOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBFeHRlbmRlZFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldExlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1MZW5ndGgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMZW5ndGgodWludDE2X3QgYUxlbmd0aCkgeyBUbHY6OlNldExlbmd0aChrRXh0ZW5kZWRMZW5ndGgpOyBtTGVuZ3RoID0gSG9zdFN3YXAxNihhTGVuZ3RoKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1MZW5ndGg7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gVExWU19IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vdHJpY2tsZV90aW1lci5jcHAgYi9zcmMvY29yZS9jb21tb24vdHJpY2tsZV90aW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxODczYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi90cmlja2xlX3RpbWVyLmNwcApAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgdHJpY2tsZSB0aW1lciBsb2dpYy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInRyaWNrbGVfdGltZXIuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworVHJpY2tsZVRpbWVyOjpUcmlja2xlVGltZXIoCisgICAgVGltZXJTY2hlZHVsZXIgJmFTY2hlZHVsZXIsCisjaWZkZWYgRU5BQkxFX1RSSUNLTEVfVElNRVJfU1VQUFJFU1NJT05fU1VQUE9SVAorICAgIHVpbnQzMl90IGFSZWR1bmRhbmN5Q29uc3RhbnQsCisjZW5kaWYKKyAgICBIYW5kbGVyIGFUcmFuc21pdEhhbmRsZXIsIEhhbmRsZXIgYUludGVydmFsRXhwaXJlZEhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KQorICAgIDoKKyAgICBUaW1lcihhU2NoZWR1bGVyLCBIYW5kbGVUaW1lckZpcmVkLCBhQ29udGV4dCksCisjaWZkZWYgRU5BQkxFX1RSSUNLTEVfVElNRVJfU1VQUFJFU1NJT05fU1VQUE9SVAorICAgIGsoYVJlZHVuZGFuY3lDb25zdGFudCksCisgICAgYygwKSwKKyNlbmRpZgorICAgIEltaW4oMCksCisgICAgSW1heCgwKSwKKyAgICBtTW9kZShrTW9kZU5vcm1hbCksCisgICAgSSgwKSwKKyAgICB0KDApLAorICAgIG1QaGFzZShrUGhhc2VEb3JtYW50KSwKKyAgICBtVHJhbnNtaXRIYW5kbGVyKGFUcmFuc21pdEhhbmRsZXIpLAorICAgIG1JbnRlcnZhbEV4cGlyZWRIYW5kbGVyKGFJbnRlcnZhbEV4cGlyZWRIYW5kbGVyKQoreworfQorCitib29sIFRyaWNrbGVUaW1lcjo6SXNSdW5uaW5nKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QaGFzZSAhPSBrUGhhc2VEb3JtYW50OworfQorCit2b2lkIFRyaWNrbGVUaW1lcjo6U3RhcnQodWludDMyX3QgYUludGVydmFsTWluLCB1aW50MzJfdCBhSW50ZXJ2YWxNYXgsIE1vZGUgYU1vZGUpCit7CisgICAgYXNzZXJ0KCFJc1J1bm5pbmcoKSk7CisKKyAgICAvLyBTZXQgdGhlIGludGVydmFsIGxpbWl0cyBhbmQgbW9kZQorICAgIEltaW4gPSBhSW50ZXJ2YWxNaW47CisgICAgSW1heCA9IGFJbnRlcnZhbE1heDsKKyAgICBtTW9kZSA9IGFNb2RlOworCisgICAgLy8gSW5pdGlhbGl6ZSBJIHRvIFtJbWluLCBJbWF4XQorICAgIGlmIChJbWluID09IEltYXgpCisgICAgeworICAgICAgICBJID0gSW1pbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgSSA9IEltaW4gKyBvdFBsYXRSYW5kb21HZXQoKSAlIChJbWF4IC0gSW1pbik7CisgICAgfQorCisgICAgLy8gU3RhcnQgYSBuZXcgaW50ZXJ2YWwKKyAgICBTdGFydE5ld0ludGVydmFsKCk7Cit9CisKK3ZvaWQgVHJpY2tsZVRpbWVyOjpTdG9wKHZvaWQpCit7CisgICAgbVBoYXNlID0ga1BoYXNlRG9ybWFudDsKKyAgICBUaW1lcjo6U3RvcCgpOworfQorCisjaWZkZWYgRU5BQkxFX1RSSUNLTEVfVElNRVJfU1VQUFJFU1NJT05fU1VQUE9SVAordm9pZCBUcmlja2xlVGltZXI6OkluZGljYXRlQ29uc2lzdGVudCh2b2lkKQoreworICAgIC8vIEluY3JlbWVudCBjb3VudGVyCisgICAgYysrOworfQorI2VuZGlmCisKK3ZvaWQgVHJpY2tsZVRpbWVyOjpJbmRpY2F0ZUluY29uc2lzdGVudCh2b2lkKQoreworICAgIC8vIE9ubHkgcmVsZXZhbnQgaWYgd2UgYXJlbid0IGFscmVhZHkgYXQgJ0knID09ICdJbWluJworICAgIGlmIChJc1J1bm5pbmcoKSAmJiBJICE9IEltaW4pCisgICAgeworICAgICAgICAvLyBSZXNldCBJIHRvIEltaW4KKyAgICAgICAgSSA9IEltaW47CisKKyAgICAgICAgLy8gU3RvcCB0aGUgZXhpc3RpbmcgdGltZXIKKyAgICAgICAgVGltZXI6OlN0b3AoKTsKKworICAgICAgICAvLyBTdGFydCBhIG5ldyBpbnRlcnZhbAorICAgICAgICBTdGFydE5ld0ludGVydmFsKCk7CisgICAgfQorfQorCit2b2lkIFRyaWNrbGVUaW1lcjo6U3RhcnROZXdJbnRlcnZhbCh2b2lkKQoreworICAgIC8vIFJlc2V0IHRoZSBjb3VudGVyIGFuZCB0aW1lciBwaGFzZQorCisjaWZkZWYgRU5BQkxFX1RSSUNLTEVfVElNRVJfU1VQUFJFU1NJT05fU1VQUE9SVAorICAgIGMgPSAwOworI2VuZGlmCisgICAgbVBoYXNlID0ga1BoYXNlVHJhbnNtaXQ7CisKKyAgICAvLyBJbml0aWFsaXplIHQKKyAgICBpZiAoSSA8IDIpCisgICAgeworICAgICAgICAvLyBJbW1lZGlhdGUgaW50ZXJ2YWwsIGp1c3Qgc2V0IHQgdG8gMAorICAgICAgICB0ID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAobU1vZGUgPT0ga01vZGVNUEwpCisgICAgeworICAgICAgICAvLyBJbml0aWFsaXplIHQgdG8gcmFuZG9tIHZhbHVlIGJldHdlZW4gKDAsIEldCisgICAgICAgIHQgPSBvdFBsYXRSYW5kb21HZXQoKSAlIEk7CisgICAgfQorICAgIGVsc2UgaWYgKG1Nb2RlID09IGtNb2RlUGxhaW5UaW1lcikKKyAgICB7CisgICAgICAgIC8vIEluaXRpYWxpemUgdCB0byBJLCB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHJhbmRvbWl6ZWQgaW4gU3RhcnQKKyAgICAgICAgdCA9IEk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIEluaXRpYWxpemUgdCB0byByYW5kb20gdmFsdWUgYmV0d2VlbiAoSS8yLCBJXQorICAgICAgICB0ID0gKEkgLyAyKSArIG90UGxhdFJhbmRvbUdldCgpICUgKEkgLyAyKTsKKyAgICB9CisKKyAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yICd0JyBtaWxsaXNlY29uZHMgZnJvbSBub3cKKyAgICBUaW1lcjo6U3RhcnQodCk7Cit9CisKK3ZvaWQgVHJpY2tsZVRpbWVyOjpIYW5kbGVUaW1lckZpcmVkKFRpbWVyICZhVGltZXIpCit7CisgICAgc3RhdGljX2Nhc3Q8VHJpY2tsZVRpbWVyICo+KCZhVGltZXIpLT5IYW5kbGVUaW1lckZpcmVkKCk7Cit9CisKK3ZvaWQgVHJpY2tsZVRpbWVyOjpIYW5kbGVUaW1lckZpcmVkKHZvaWQpCit7CisgICAgUGhhc2UgY3VyUGhhc2UgPSBtUGhhc2U7CisgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CisKKyAgICAvLyBEZWZhdWx0IHRoZSBjdXJyZW50IHN0YXRlIHRvIERvcm1hbnQKKyAgICBtUGhhc2UgPSBrUGhhc2VEb3JtYW50OworCisgICAgc3dpdGNoIChjdXJQaGFzZSkKKyAgICB7CisgICAgLy8gV2UgaGF2ZSBqdXN0IHJlYWNoZWQgdGltZSAndCcKKyAgICBjYXNlIGtQaGFzZVRyYW5zbWl0OgorICAgIHsKKyAgICAgICAgLy8gQXJlIHdlIG5vdCB1c2luZyByZWR1bmRhbmN5IG9yIGlzIHRoZSBjb3VudGVyIHN0aWxsIGxlc3MgdGhhbiBpdD8KKyNpZmRlZiBFTkFCTEVfVFJJQ0tMRV9USU1FUl9TVVBQUkVTU0lPTl9TVVBQT1JUCisgICAgICAgIGlmIChrID09IDAgfHwgYyA8IGspCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSW52b2tlIHRoZSB0cmFuc21pc3Npb24gY2FsbGJhY2sKKyAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gVHJhbnNtaXRGaXJlZCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGludGVydmFsIHRvIGVsYXBzZQorICAgICAgICBpZiAoc2hvdWxkQ29udGludWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBwbGFpbiB0aW1lciBtb2RlLCBqdXN0IHJhbmRvbWl6ZSBJIGFuZCByZXN0YXJ0IHRoZSBpbnRlcnZhbAorICAgICAgICAgICAgaWYgKG1Nb2RlID09IGtNb2RlUGxhaW5UaW1lcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIEkgdG8gW0ltaW4sIEltYXhdCisgICAgICAgICAgICAgICAgSSA9IEltaW4gKyBvdFBsYXRSYW5kb21HZXQoKSAlIChJbWF4IC0gSW1pbik7CisKKyAgICAgICAgICAgICAgICAvLyBTdGFydCBhIG5ldyBpbnRlcnZhbAorICAgICAgICAgICAgICAgIFN0YXJ0TmV3SW50ZXJ2YWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTdGFydCBuZXh0IHBoYXNlIG9mIHRoZSB0aW1lcgorICAgICAgICAgICAgICAgIG1QaGFzZSA9IGtQaGFzZUludGVydmFsOworCisgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIHRpbWUgZm9yICdJIC0gdCcgbWlsbGlzZWNvbmRzCisgICAgICAgICAgICAgICAgVGltZXI6OlN0YXJ0KEkgLSB0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIFdlIGhhdmUganVzdCByZWFjaGVkIHRpbWUgJ0knCisgICAgY2FzZSBrUGhhc2VJbnRlcnZhbDoKKyAgICB7CisgICAgICAgIC8vIERvdWJsZSAnSScgdG8gZ2V0IHRoZSBuZXcgaW50ZXJ2YWwgbGVuZ3RoCisgICAgICAgIHVpbnQzMl90IG5ld0kgPSBJID09IDAgPyAxIDogSSA8PCAxOworCisgICAgICAgIGlmIChuZXdJID4gSW1heCkgeyBuZXdJID0gSW1heDsgfQorCisgICAgICAgIEkgPSBuZXdJOworCisgICAgICAgIC8vIEludm9rZSB0aGUgaW50ZXJ2YWwgZXhwaXJhdGlvbiBjYWxsYmFjaworICAgICAgICBzaG91bGRDb250aW51ZSA9IEludGVydmFsRXhwaXJlZEZpcmVkKCk7CisKKyAgICAgICAgaWYgKHNob3VsZENvbnRpbnVlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTdGFydCBhIG5ldyBpbnRlcnZhbAorICAgICAgICAgICAgU3RhcnROZXdJbnRlcnZhbCgpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL3RyaWNrbGVfdGltZXIuaHBwIGIvc3JjL2NvcmUvY29tbW9uL3RyaWNrbGVfdGltZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzczOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vdHJpY2tsZV90aW1lci5ocHAKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgdHJpY2tsZSB0aW1lciBsb2dpYy4KKyAqLworCisjaWZuZGVmIFRSSUNLTEVfVElNRVJfSFBQXworI2RlZmluZSBUUklDS0xFX1RJTUVSX0hQUF8KKworI2luY2x1ZGUgImNvbW1vbi9jb250ZXh0LmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtdGltZXItdHJpY2tsZQorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIHRyaWNrbGUgdGltZXIgbG9naWMuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSB0cmlja2xlIHRpbWVyLgorICoKKyAqLworY2xhc3MgVHJpY2tsZVRpbWVyOiBwdWJsaWMgVGltZXIKK3sKK3B1YmxpYzoKKworICAgIC8qKgorICAgICAqIFJlcHJlc2VudHMgdGhlIG1vZGVzIG9mIG9wZXJhdGlvbiBmb3IgdGhlIFRyaWNrbGVUaW1lcgorICAgICAqLworICAgIHR5cGVkZWYgZW51bSBNb2RlCisgICAgeworICAgICAgICBrTW9kZU5vcm1hbCAgICAgPSAwLCAgLy8vPCBSdW5zIHRoZSBub3JtYWwgdHJpY2tsZSBsb2dpYy4KKyAgICAgICAga01vZGVQbGFpblRpbWVyID0gMSwgIC8vLzwgUnVucyBhIG5vcm1hbCB0aW1lciBiZXR3ZWVuIEltaW4gYW5kIEltYXguCisgICAgICAgIGtNb2RlTVBMICAgICAgICA9IDIsICAvLy88IFJ1bnMgdGhlIHRyaWNrbGUgbG9naWMgbW9kaWZpZWQgZm9yIE1QTC4KKyAgICB9IE1vZGU7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBleHBpcmVkIHRpbWVyLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIHRyaWNrbGUgdGltZXIgc2hvdWxkIGNvbnRpbnVlIHJ1bm5pbmcuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIHRyaWNrbGUgdGltZXIgc2hvdWxkIHN0b3AgcnVubmluZy4KKyAgICAgKi8KKyAgICB0eXBlZGVmIGJvb2wgKCpIYW5kbGVyKShUcmlja2xlVGltZXIgJmFUaW1lcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSB0cmlja2xlIHRpbWVyIGluc3RhbmNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNjaGVkdWxlciAgICAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSB0aW1lciBzY2hlZHVsZXIuCisgICAgICogQHBhcmFtW2luXSAgYVJlZHVuZGFuY3lDb25zdGFudCAgICAgIFRoZSByZWR1bmRhbmN5IGNvbnN0YW50IGZvciB0aGUgdGltZXIsIGsuCisgICAgICogQHBhcmFtW2luXSAgYVRyYW5zbWl0SGFuZGxlciAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdHJhbnNtaXNzaW9uIHNob3VsZCBvY2N1ci4KKyAgICAgKiBAcGFyYW1baW5dICBhSW50ZXJ2YWxFeHBpcmVkSGFuZGxlciAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGludGVydmFsIGV4cGlyZXMuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIFRyaWNrbGVUaW1lcihUaW1lclNjaGVkdWxlciAmYVNjaGVkdWxlciwKKyNpZmRlZiBFTkFCTEVfVFJJQ0tMRV9USU1FUl9TVVBQUkVTU0lPTl9TVVBQT1JUCisgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFSZWR1bmRhbmN5Q29uc3RhbnQsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgSGFuZGxlciBhVHJhbnNtaXRIYW5kbGVyLCBIYW5kbGVyIGFJbnRlcnZhbEV4cGlyZWRIYW5kbGVyLCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHRyaWNrbGUgdGltZXIgaW5zdGFuY2UgaXMgcnVubmluZy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSB0cmlja2xlIHRpbWVyIGlzIHJ1bm5pbmcuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIHRyaWNrbGUgdGltZXIgaXMgbm90IHJ1bm5pbmcuCisgICAgICovCisgICAgYm9vbCBJc1J1bm5pbmcodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydCB0aGUgdHJpY2tsZSB0aW1lci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnRlcnZhbE1pbiAgVGhlIG1pbmltdW0gaW50ZXJ2YWwgZm9yIHRoZSB0aW1lciwgSW1pbi4KKyAgICAgKiBAcGFyYW1baW5dICBhSW50ZXJ2YWxNYXggIFRoZSBtYXhpbXVtIGludGVydmFsIGZvciB0aGUgdGltZXIsIEltYXguCisgICAgICogQHBhcmFtW2luXSAgYU1vZGUgICAgICAgICBUaGUgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSB0aW1lci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RhcnQodWludDMyX3QgYUludGVydmFsTWluLCB1aW50MzJfdCBhSW50ZXJ2YWxNYXgsIE1vZGUgYU1vZGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RhcnQgdGhlIHRyaWNrbGUgdGltZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU3RhcnRUaW1lICAgIFRoZSBzdGFydCB0aW1lLgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnRlcnZhbE1pbiAgVGhlIG1pbmltdW0gaW50ZXJ2YWwgZm9yIHRoZSB0aW1lciwgSW1pbi4KKyAgICAgKiBAcGFyYW1baW5dICBhSW50ZXJ2YWxNYXggIFRoZSBtYXhpbXVtIGludGVydmFsIGZvciB0aGUgdGltZXIsIEltYXguCisgICAgICogQHBhcmFtW2luXSAgYU1vZGUgICAgICAgICBUaGUgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSB0aW1lci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RhcnRBdCh1aW50MzJfdCBhU3RhcnRUaW1lLCB1aW50MzJfdCBhSW50ZXJ2YWxNaW4sIHVpbnQzMl90IGFJbnRlcnZhbE1heCwgTW9kZSBhTW9kZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyB0aGUgdHJpY2tsZSB0aW1lci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RvcCh2b2lkKTsKKworI2lmZGVmIEVOQUJMRV9UUklDS0xFX1RJTUVSX1NVUFBSRVNTSU9OX1NVUFBPUlQKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgdG8gdGhlIHRyaWNrbGUgdGltZXIgYSAnY29uc2lzdGVudCcgc3RhdGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluZGljYXRlQ29uc2lzdGVudCh2b2lkKTsKKyNlbmRpZgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHRvIHRoZSB0cmlja2xlIHRpbWVyIGFuICdpbmNvbnNpc3RlbnQnIHN0YXRlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbmRpY2F0ZUluY29uc2lzdGVudCh2b2lkKTsKKworcHJpdmF0ZToKKyAgICBib29sIFRyYW5zbWl0RmlyZWQodm9pZCkgeyByZXR1cm4gbVRyYW5zbWl0SGFuZGxlcigqdGhpcyk7IH0KKyAgICBib29sIEludGVydmFsRXhwaXJlZEZpcmVkKHZvaWQpIHsgcmV0dXJuIG1JbnRlcnZhbEV4cGlyZWRIYW5kbGVyID8gbUludGVydmFsRXhwaXJlZEhhbmRsZXIoKnRoaXMpIDogdHJ1ZTsgfQorCisgICAgdm9pZCBTdGFydE5ld0ludGVydmFsKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXJGaXJlZChUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyRmlyZWQodm9pZCk7CisKKyAgICAvLyBTaGFkb3cgYmFzZSBjbGFzcyBtZXRob2QgdG8gZW5zdXJlIGl0IGlzIGhpZGRlbi4KKyAgICB2b2lkIFN0YXJ0QXQodm9pZCkgeyB9CisKKyAgICB0eXBlZGVmIGVudW0gUGhhc2UKKyAgICB7CisgICAgICAgIC8vLzwgSW5kaWNhdGVzIHdlIGFyZSBjdXJyZW50bHkgbm90IHJ1bm5pbmcKKyAgICAgICAga1BoYXNlRG9ybWFudCAgICA9IDEsCisgICAgICAgIC8vLzwgSW5kaWNhdGVzIHRoYXQgd2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgc2hvdWxkIGV2YWx1YXRlIGZvciB0cmFuc21pdCBjYWxsYmFja3MKKyAgICAgICAga1BoYXNlVHJhbnNtaXQgICA9IDIsCisgICAgICAgIC8vLzwgSW5kaWNhdGVzIHRoYXQgd2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgc2hvdWxkIHByb2Nlc3MgaW50ZXJ2YWwgZXhwaXJhdGlvbiBjYWxsYmFja3MKKyAgICAgICAga1BoYXNlSW50ZXJ2YWwgICA9IDMsCisgICAgfSBQaGFzZTsKKworI2lmZGVmIEVOQUJMRV9UUklDS0xFX1RJTUVSX1NVUFBSRVNTSU9OX1NVUFBPUlQKKyAgICAvLyBSZWR1bmRhbmN5IGNvbnN0YW50CisgICAgY29uc3QgdWludDMyX3QgazsKKworICAgIC8vIEEgY291bnRlciwga2VlcGluZyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mICJjb25zaXN0ZW50IiB0cmFuc21pc3Npb25zIHJlY2VpdmVkCisgICAgdWludDMyX3QgYzsKKyNlbmRpZgorCisgICAgLy8gTWluaW11bSBpbnRlcnZhbCBzaXplCisgICAgdWludDMyX3QgSW1pbjsKKyAgICAvLyBNYXhpbXVtIGludGVydmFsIHNpemUKKyAgICB1aW50MzJfdCBJbWF4OworICAgIC8vIFRoZSBtb2RlIG9mIG9wZXJhdGlvbgorICAgIE1vZGUgbU1vZGU7CisKKyAgICAvLyBUaGUgY3VycmVudCBpbnRlcnZhbCBzaXplIChpbiBtaWxsaXNlY29uZHMpCisgICAgdWludDMyX3QgSTsKKyAgICAvLyBUaGUgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSBpbnRvIHRoZSBpbnRlcnZhbCBhdCB3aGljaCB3ZSBzaG91bGQgdHJhbnNtaXQKKyAgICB1aW50MzJfdCB0OworCisgICAgLy8gVGhlIGN1cnJlbnQgdHJpY2tsZSBwaGFzZSBmb3IgdGhlIHRpbWVyCisgICAgUGhhc2UgbVBoYXNlOworCisgICAgLy8gQ2FsbGJhY2sgdmFyaWFibGVzCisgICAgSGFuZGxlciBtVHJhbnNtaXRIYW5kbGVyOworICAgIEhhbmRsZXIgbUludGVydmFsRXhwaXJlZEhhbmRsZXI7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFRSSUNLTEVfVElNRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY3J5cHRvL2Flc19jY20uY3BwIGIvc3JjL2NvcmUvY3J5cHRvL2Flc19jY20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjcxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jcnlwdG8vYWVzX2NjbS5jcHAKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgQUVTLUNDTS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImFlc19jY20uaHBwIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgQ3J5cHRvIHsKKworb3RFcnJvciBBZXNDY206OlNldEtleShjb25zdCB1aW50OF90ICphS2V5LCB1aW50MTZfdCBhS2V5TGVuZ3RoKQoreworICAgIG1FY2IuU2V0S2V5KGFLZXksIDggKiBhS2V5TGVuZ3RoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordm9pZCBBZXNDY206OkluaXQodWludDMyX3QgYUhlYWRlckxlbmd0aCwgdWludDMyX3QgYVBsYWluVGV4dExlbmd0aCwgdWludDhfdCBhVGFnTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYU5vbmNlLCB1aW50OF90IGFOb25jZUxlbmd0aCkKK3sKKyAgICBjb25zdCB1aW50OF90ICpub25jZUJ5dGVzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KGFOb25jZSk7CisgICAgdWludDhfdCBibG9ja0xlbmd0aCA9IDA7CisgICAgdWludDMyX3QgbGVuOworICAgIHVpbnQ4X3QgTDsKKyAgICB1aW50OF90IGk7CisKKyAgICAvLyBhVGFnTGVuZ3RoIG11c3QgYmUgZXZlbgorICAgIGFUYWdMZW5ndGggJj0gfjE7CisKKyAgICBpZiAoYVRhZ0xlbmd0aCA+IHNpemVvZihtQmxvY2spKQorICAgIHsKKyAgICAgICAgYVRhZ0xlbmd0aCA9IHNpemVvZihtQmxvY2spOworICAgIH0KKworICAgIEwgPSAwOworCisgICAgZm9yIChsZW4gPSBhUGxhaW5UZXh0TGVuZ3RoOyBsZW47IGxlbiA+Pj0gOCkKKyAgICB7CisgICAgICAgIEwrKzsKKyAgICB9CisKKyAgICBpZiAoTCA8PSAxKQorICAgIHsKKyAgICAgICAgTCA9IDI7CisgICAgfQorCisgICAgaWYgKGFOb25jZUxlbmd0aCA+IDEzKQorICAgIHsKKyAgICAgICAgYU5vbmNlTGVuZ3RoID0gMTM7CisgICAgfQorCisgICAgLy8gaW5jcmVhc2UgTCB0byBtYXRjaCBub25jZSBsZW4KKyAgICBpZiAoTCA8ICgxNSAtIGFOb25jZUxlbmd0aCkpCisgICAgeworICAgICAgICBMID0gMTUgLSBhTm9uY2VMZW5ndGg7CisgICAgfQorCisgICAgLy8gZGVjcmVhc2Ugbm9uY2VMZW5ndGggdG8gbWF0Y2ggTAorICAgIGlmIChhTm9uY2VMZW5ndGggPiAoMTUgLSBMKSkKKyAgICB7CisgICAgICAgIGFOb25jZUxlbmd0aCA9IDE1IC0gTDsKKyAgICB9CisKKyAgICAvLyBzZXR1cCBpbml0aWFsIGJsb2NrCisKKyAgICAvLyB3cml0ZSBmbGFncworICAgIG1CbG9ja1swXSA9IChzdGF0aWNfY2FzdDx1aW50OF90PigoYUhlYWRlckxlbmd0aCAhPSAwKSA8PCA2KSB8CisgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCgoYVRhZ0xlbmd0aCAtIDIpID4+IDEpIDw8IDMpIHwKKyAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4oTCAtIDEpKTsKKworICAgIC8vIHdyaXRlIG5vbmNlCisgICAgZm9yIChpID0gMDsgaSA8IGFOb25jZUxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgbUJsb2NrWzEgKyBpXSA9IG5vbmNlQnl0ZXNbaV07CisgICAgfQorCisgICAgLy8gd3JpdGUgbGVuCisgICAgbGVuID0gYVBsYWluVGV4dExlbmd0aDsKKworICAgIGZvciAoaSA9IHNpemVvZihtQmxvY2spIC0gMTsgaSA+IGFOb25jZUxlbmd0aDsgaS0tKQorICAgIHsKKyAgICAgICAgbUJsb2NrW2ldID0gbGVuICYgMHhmZjsKKyAgICAgICAgbGVuID4+PSA4OworICAgIH0KKworICAgIC8vIGVuY3J5cHQgaW5pdGlhbCBibG9jaworICAgIG1FY2IuRW5jcnlwdChtQmxvY2ssIG1CbG9jayk7CisKKyAgICAvLyBwcm9jZXNzIGhlYWRlcgorICAgIGlmIChhSGVhZGVyTGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIC8vIHByb2Nlc3MgbGVuZ3RoCisgICAgICAgIGlmIChhSGVhZGVyTGVuZ3RoIDwgKDY1NTM2VSAtIDI1NlUpKQorICAgICAgICB7CisgICAgICAgICAgICBtQmxvY2tbYmxvY2tMZW5ndGgrK10gXj0gYUhlYWRlckxlbmd0aCA+PiA4OworICAgICAgICAgICAgbUJsb2NrW2Jsb2NrTGVuZ3RoKytdIF49IGFIZWFkZXJMZW5ndGggPj4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1CbG9ja1tibG9ja0xlbmd0aCsrXSBePSAweGZmOworICAgICAgICAgICAgbUJsb2NrW2Jsb2NrTGVuZ3RoKytdIF49IDB4ZmU7CisgICAgICAgICAgICBtQmxvY2tbYmxvY2tMZW5ndGgrK10gXj0gYUhlYWRlckxlbmd0aCA+PiAyNDsKKyAgICAgICAgICAgIG1CbG9ja1tibG9ja0xlbmd0aCsrXSBePSBhSGVhZGVyTGVuZ3RoID4+IDE2OworICAgICAgICAgICAgbUJsb2NrW2Jsb2NrTGVuZ3RoKytdIF49IGFIZWFkZXJMZW5ndGggPj4gODsKKyAgICAgICAgICAgIG1CbG9ja1tibG9ja0xlbmd0aCsrXSBePSBhSGVhZGVyTGVuZ3RoID4+IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBpbml0IGNvdW50ZXIKKyAgICBtQ3RyWzBdID0gTCAtIDE7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYU5vbmNlTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBtQ3RyWzEgKyBpXSA9IG5vbmNlQnl0ZXNbaV07CisgICAgfQorCisgICAgZm9yIChpID0gaSArIDE7IGkgPCBzaXplb2YobUN0cik7IGkrKykKKyAgICB7CisgICAgICAgIG1DdHJbaV0gPSAwOworICAgIH0KKworICAgIG1Ob25jZUxlbmd0aCA9IGFOb25jZUxlbmd0aDsKKyAgICBtSGVhZGVyTGVuZ3RoID0gYUhlYWRlckxlbmd0aDsKKyAgICBtSGVhZGVyQ3VyID0gMDsKKyAgICBtUGxhaW5UZXh0TGVuZ3RoID0gYVBsYWluVGV4dExlbmd0aDsKKyAgICBtUGxhaW5UZXh0Q3VyID0gMDsKKyAgICBtQmxvY2tMZW5ndGggPSBibG9ja0xlbmd0aDsKKyAgICBtQ3RyTGVuZ3RoID0gc2l6ZW9mKG1DdHJQYWQpOworICAgIG1UYWdMZW5ndGggPSBhVGFnTGVuZ3RoOworfQorCit2b2lkIEFlc0NjbTo6SGVhZGVyKGNvbnN0IHZvaWQgKmFIZWFkZXIsIHVpbnQzMl90IGFIZWFkZXJMZW5ndGgpCit7CisgICAgY29uc3QgdWludDhfdCAqaGVhZGVyQnl0ZXMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oYUhlYWRlcik7CisKKyAgICBhc3NlcnQobUhlYWRlckN1ciArIGFIZWFkZXJMZW5ndGggPD0gbUhlYWRlckxlbmd0aCk7CisKKyAgICAvLyBwcm9jZXNzIGhlYWRlcgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhSGVhZGVyTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBpZiAobUJsb2NrTGVuZ3RoID09IHNpemVvZihtQmxvY2spKQorICAgICAgICB7CisgICAgICAgICAgICBtRWNiLkVuY3J5cHQobUJsb2NrLCBtQmxvY2spOworICAgICAgICAgICAgbUJsb2NrTGVuZ3RoID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIG1CbG9ja1ttQmxvY2tMZW5ndGgrK10gXj0gaGVhZGVyQnl0ZXNbaV07CisgICAgfQorCisgICAgbUhlYWRlckN1ciArPSBhSGVhZGVyTGVuZ3RoOworCisgICAgaWYgKG1IZWFkZXJDdXIgPT0gbUhlYWRlckxlbmd0aCkKKyAgICB7CisgICAgICAgIC8vIHByb2Nlc3MgcmVtYWluZGVyCisgICAgICAgIGlmIChtQmxvY2tMZW5ndGggIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbUVjYi5FbmNyeXB0KG1CbG9jaywgbUJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIG1CbG9ja0xlbmd0aCA9IDA7CisgICAgfQorfQorCit2b2lkIEFlc0NjbTo6UGF5bG9hZCh2b2lkICpwbGFpbnRleHQsIHZvaWQgKmNpcGhlcnRleHQsIHVpbnQzMl90IGxlbiwgYm9vbCBhRW5jcnlwdCkKK3sKKyAgICB1aW50OF90ICpwbGFpbnRleHRCeXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihwbGFpbnRleHQpOworICAgIHVpbnQ4X3QgKmNpcGhlcnRleHRCeXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjaXBoZXJ0ZXh0KTsKKyAgICB1aW50OF90IGJ5dGU7CisKKyAgICBhc3NlcnQobVBsYWluVGV4dEN1ciArIGxlbiA8PSBtUGxhaW5UZXh0TGVuZ3RoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ3RyTGVuZ3RoID09IDE2KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gc2l6ZW9mKG1DdHIpIC0gMTsgaiA+IG1Ob25jZUxlbmd0aDsgai0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgrK21DdHJbal0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1FY2IuRW5jcnlwdChtQ3RyLCBtQ3RyUGFkKTsKKyAgICAgICAgICAgIG1DdHJMZW5ndGggPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFFbmNyeXB0KQorICAgICAgICB7CisgICAgICAgICAgICBieXRlID0gcGxhaW50ZXh0Qnl0ZXNbaV07CisgICAgICAgICAgICBjaXBoZXJ0ZXh0Qnl0ZXNbaV0gPSBieXRlIF4gbUN0clBhZFttQ3RyTGVuZ3RoKytdOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSA9IGNpcGhlcnRleHRCeXRlc1tpXSBeIG1DdHJQYWRbbUN0ckxlbmd0aCsrXTsKKyAgICAgICAgICAgIHBsYWludGV4dEJ5dGVzW2ldID0gYnl0ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtQmxvY2tMZW5ndGggPT0gc2l6ZW9mKG1CbG9jaykpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FY2IuRW5jcnlwdChtQmxvY2ssIG1CbG9jayk7CisgICAgICAgICAgICBtQmxvY2tMZW5ndGggPSAwOworICAgICAgICB9CisKKyAgICAgICAgbUJsb2NrW21CbG9ja0xlbmd0aCsrXSBePSBieXRlOworICAgIH0KKworICAgIG1QbGFpblRleHRDdXIgKz0gbGVuOworCisgICAgaWYgKG1QbGFpblRleHRDdXIgPj0gbVBsYWluVGV4dExlbmd0aCkKKyAgICB7CisgICAgICAgIGlmIChtQmxvY2tMZW5ndGggIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbUVjYi5FbmNyeXB0KG1CbG9jaywgbUJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJlc2V0IGNvdW50ZXIKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSBtTm9uY2VMZW5ndGggKyAxOyBpIDwgc2l6ZW9mKG1DdHIpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DdHJbaV0gPSAwOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEFlc0NjbTo6RmluYWxpemUodm9pZCAqdGFnLCB1aW50OF90ICphVGFnTGVuZ3RoKQoreworICAgIHVpbnQ4X3QgKnRhZ0J5dGVzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KHRhZyk7CisKKyAgICBhc3NlcnQobVBsYWluVGV4dEN1ciA9PSBtUGxhaW5UZXh0TGVuZ3RoKTsKKworICAgIGlmIChtVGFnTGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIG1FY2IuRW5jcnlwdChtQ3RyLCBtQ3RyUGFkKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1UYWdMZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFnQnl0ZXNbaV0gPSBtQmxvY2tbaV0gXiBtQ3RyUGFkW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFUYWdMZW5ndGgpCisgICAgeworICAgICAgICAqYVRhZ0xlbmd0aCA9IG1UYWdMZW5ndGg7CisgICAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UgQ3J5cHRvCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NyeXB0by9hZXNfY2NtLmhwcCBiL3NyYy9jb3JlL2NyeXB0by9hZXNfY2NtLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDRjMmIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY3J5cHRvL2Flc19jY20uaHBwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgcGVyZm9ybWluZyBBRVMtQ0NNIGNvbXB1dGF0aW9ucy4KKyAqLworCisjaWZuZGVmIEFFU19DQ01fSFBQXworI2RlZmluZSBBRVNfQ0NNX0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjcnlwdG8vYWVzX2VjYi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgQ3J5cHRvIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXNlY3VyaXR5CisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQUVTIENDTSBjb21wdXRhdGlvbi4KKyAqCisgKi8KK2NsYXNzIEFlc0NjbQoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGtleS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXkgICAgICAgIEEgcG9pbnRlciB0byB0aGUga2V5LgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXlMZW5ndGggIExlbmd0aCBvZiB0aGUga2V5IGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRLZXkoY29uc3QgdWludDhfdCAqYUtleSwgdWludDE2X3QgYUtleUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgQUVTIENDTSBjb21wdXRhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFIZWFkZXJMZW5ndGggICAgIExlbmd0aCBvZiBoZWFkZXIgaW4gYnl0ZXMuCisgICAgICogQHBhcmFtW2luXSAgYVBsYWluVGV4dExlbmd0aCAgTGVuZ3RoIG9mIHBsYWludGV4dCBpbiBieXRlcy4KKyAgICAgKiBAcGFyYW1baW5dICBhVGFnTGVuZ3RoICAgICAgICBMZW5ndGggb2YgdGFnIGluIGJ5dGVzLgorICAgICAqIEBwYXJhbVtpbl0gIGFOb25jZSAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbm9uY2UuCisgICAgICogQHBhcmFtW2luXSAgYU5vbmNlTGVuZ3RoICAgICAgTGVuZ3RoIG9mIG5vbmNlIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHVpbnQzMl90IGFIZWFkZXJMZW5ndGgsIHVpbnQzMl90IGFQbGFpblRleHRMZW5ndGgsIHVpbnQ4X3QgYVRhZ0xlbmd0aCwKKyAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYU5vbmNlLCB1aW50OF90IGFOb25jZUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwcm9jZXNzZXMgdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgICAgICAgIEEgcG9pbnRlciB0byB0aGUgaGVhZGVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFIZWFkZXJMZW5ndGggIExlbmd0aCBvZiBoZWFkZXIgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEhlYWRlcihjb25zdCB2b2lkICphSGVhZGVyLCB1aW50MzJfdCBhSGVhZGVyTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb2Nlc3NlcyB0aGUgcGF5bG9hZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFQbGFpblRleHQgICBBIHBvaW50ZXIgdG8gdGhlIHBsYWludGV4dC4KKyAgICAgKiBAcGFyYW1baW5vdXRdICBhQ2lwaGVyVGV4dCAgQSBwb2ludGVyIHRvIHRoZSBjaXBoZXJ0ZXh0LgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFMZW5ndGggICAgICBQYXlsb2FkIGxlbmd0aCBpbiBieXRlcy4KKyAgICAgKiBAcGFyYW1baW5dICAgICBhRW5jcnlwdCAgICAgVFJVRSBvbiBlbmNyeXB0IGFuZCBGQUxTRSBvbiBkZWNyeXB0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBQYXlsb2FkKHZvaWQgKmFQbGFpblRleHQsIHZvaWQgKmFDaXBoZXJUZXh0LCB1aW50MzJfdCBhTGVuZ3RoLCBib29sIGFFbmNyeXB0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyB0aGUgdGFnLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFUYWcgICAgICAgIEEgcG9pbnRlciB0byB0aGUgdGFnLgorICAgICAqIEBwYXJhbVtvdXRdICBhVGFnTGVuZ3RoICBMZW5ndGggb2YgdGhlIHRhZyBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgRmluYWxpemUodm9pZCAqYVRhZywgdWludDhfdCAqYVRhZ0xlbmd0aCk7CisKK3ByaXZhdGU6CisgICAgQWVzRWNiIG1FY2I7CisgICAgdWludDhfdCBtQmxvY2tbQWVzRWNiOjprQmxvY2tTaXplXTsKKyAgICB1aW50OF90IG1DdHJbQWVzRWNiOjprQmxvY2tTaXplXTsKKyAgICB1aW50OF90IG1DdHJQYWRbQWVzRWNiOjprQmxvY2tTaXplXTsKKyAgICB1aW50OF90IG1Ob25jZUxlbmd0aDsKKyAgICB1aW50MzJfdCBtSGVhZGVyTGVuZ3RoOworICAgIHVpbnQzMl90IG1IZWFkZXJDdXI7CisgICAgdWludDMyX3QgbVBsYWluVGV4dExlbmd0aDsKKyAgICB1aW50MzJfdCBtUGxhaW5UZXh0Q3VyOworICAgIHVpbnQxNl90IG1CbG9ja0xlbmd0aDsKKyAgICB1aW50MTZfdCBtQ3RyTGVuZ3RoOworICAgIHVpbnQ4X3QgbVRhZ0xlbmd0aDsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIENyeXB0bworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQUVTX0NDTV9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jcnlwdG8vYWVzX2VjYi5jcHAgYi9zcmMvY29yZS9jcnlwdG8vYWVzX2VjYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiODQ3NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NyeXB0by9hZXNfZWNiLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIEFFUy1FQ0IuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJhZXNfZWNiLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDcnlwdG8geworCitBZXNFY2I6OkFlc0VjYigpCit7CisgICAgbWJlZHRsc19hZXNfaW5pdCgmbUNvbnRleHQpOworfQorCit2b2lkIEFlc0VjYjo6U2V0S2V5KGNvbnN0IHVpbnQ4X3QgKmFLZXksIHVpbnQxNl90IGFLZXlMZW5ndGgpCit7CisgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYygmbUNvbnRleHQsIGFLZXksIGFLZXlMZW5ndGgpOworfQorCit2b2lkIEFlc0VjYjo6RW5jcnlwdChjb25zdCB1aW50OF90IGFJbnB1dFtrQmxvY2tTaXplXSwgdWludDhfdCBhT3V0cHV0W2tCbG9ja1NpemVdKQoreworICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYigmbUNvbnRleHQsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIGFJbnB1dCwgYU91dHB1dCk7Cit9CisKK0Flc0VjYjo6fkFlc0VjYigpCit7CisgICAgbWJlZHRsc19hZXNfZnJlZSgmbUNvbnRleHQpOworfQorCit9ICAvLyBuYW1lc3BhY2UgQ3J5cHRvCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NyeXB0by9hZXNfZWNiLmhwcCBiL3NyYy9jb3JlL2NyeXB0by9hZXNfZWNiLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzIzY2QwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY3J5cHRvL2Flc19lY2IuaHBwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgcGVyZm9ybWluZyBBRVMtRUNCIGNvbXB1dGF0aW9ucy4KKyAqLworCisjaWZuZGVmIEFFU19FQ0JfSFBQXworI2RlZmluZSBBRVNfRUNCX0hQUF8KKworI2luY2x1ZGUgPG1iZWR0bHMvYWVzLmg+CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgQ3J5cHRvIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXNlY3VyaXR5CisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQUVTIEVDQiBjb21wdXRhdGlvbi4KKyAqCisgKi8KK2NsYXNzIEFlc0VjYgoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtCbG9ja1NpemUgPSAxNiwgIC8vLzwgQUVTLTEyOCBibG9jayBzaXplIChieXRlcykuCisgICAgfTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yIHRvIGluaXRpYWxpemUgdGhlIG1iZWR0bHNfYWVzX2NvbnRleHQuCisgICAgICoKKyAgICAgKi8KKyAgICBBZXNFY2IoKTsKKworICAgIC8qKgorICAgICAqIERlc3RydWN0b3IgdG8gZnJlZSB0aGUgbWJlZHRsc19hZXNfY29udGV4dC4KKyAgICAgKgorICAgICAqLworICAgIH5BZXNFY2IoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGtleS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXkgICAgICAgIEEgcG9pbnRlciB0byB0aGUga2V5LgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXlMZW5ndGggIFRoZSBrZXkgbGVuZ3RoIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRLZXkoY29uc3QgdWludDhfdCAqYUtleSwgdWludDE2X3QgYUtleUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBlbmNyeXB0cyBkYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFJbnB1dCAgIEEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyLgorICAgICAqIEBwYXJhbVtvdXRdICBhT3V0cHV0ICBBIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEVuY3J5cHQoY29uc3QgdWludDhfdCBhSW5wdXRba0Jsb2NrU2l6ZV0sIHVpbnQ4X3QgYU91dHB1dFtrQmxvY2tTaXplXSk7CisKK3ByaXZhdGU6CisgICAgbWJlZHRsc19hZXNfY29udGV4dCBtQ29udGV4dDsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIENyeXB0bworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQUVTX0VDQl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jcnlwdG8vaG1hY19zaGEyNTYuY3BwIGIvc3JjL2NvcmUvY3J5cHRvL2htYWNfc2hhMjU2LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODU3ZmIxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY3J5cHRvL2htYWNfc2hhMjU2LmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIEhNQUMgU0hBLTI1Ni4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImhtYWNfc2hhMjU2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDcnlwdG8geworCitIbWFjU2hhMjU2OjpIbWFjU2hhMjU2KCkKK3sKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRJbmZvID0gTlVMTDsKKyAgICBtYmVkdGxzX21kX2luaXQoJm1Db250ZXh0KTsKKyAgICBtZEluZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKE1CRURUTFNfTURfU0hBMjU2KTsKKyAgICBtYmVkdGxzX21kX3NldHVwKCZtQ29udGV4dCwgbWRJbmZvLCAxKTsKK30KKworSG1hY1NoYTI1Njo6fkhtYWNTaGEyNTYoKQoreworICAgIG1iZWR0bHNfbWRfZnJlZSgmbUNvbnRleHQpOworfQorCit2b2lkIEhtYWNTaGEyNTY6OlN0YXJ0KGNvbnN0IHVpbnQ4X3QgKmFLZXksIHVpbnQxNl90IGFLZXlMZW5ndGgpCit7CisgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cygmbUNvbnRleHQsIGFLZXksIGFLZXlMZW5ndGgpOworfQorCit2b2lkIEhtYWNTaGEyNTY6OlVwZGF0ZShjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoJm1Db250ZXh0LCBhQnVmLCBhQnVmTGVuZ3RoKTsKK30KKwordm9pZCBIbWFjU2hhMjU2OjpGaW5pc2godWludDhfdCBhSGFzaFtrSGFzaFNpemVdKQoreworICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goJm1Db250ZXh0LCBhSGFzaCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBDcnlwdG8KK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY3J5cHRvL2htYWNfc2hhMjU2LmhwcCBiL3NyYy9jb3JlL2NyeXB0by9obWFjX3NoYTI1Ni5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhMmViNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NyeXB0by9obWFjX3NoYTI1Ni5ocHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBwZXJmb3JtaW5nIEhNQUMgU0hBLTI1NiBjb21wdXRhdGlvbnMuCisgKi8KKworI2lmbmRlZiBITUFDX1NIQTI1Nl9IUFBfCisjZGVmaW5lIEhNQUNfU0hBMjU2X0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKKyNpbmNsdWRlIDxtYmVkdGxzL21kLmg+CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgQ3J5cHRvIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXNlY3VyaXR5CisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSE1BQyBTSEEtMjU2IGNvbXB1dGF0aW9uLgorICoKKyAqLworY2xhc3MgSG1hY1NoYTI1NgoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtIYXNoU2l6ZSA9IDMyLCAgLy8vPCBTSEEtMjU2IGhhc2ggc2l6ZSAoYnl0ZXMpCisgICAgfTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yIGZvciBpbml0aWFsaXphdGlvbiBvZiBtYmVkdGxzX21kX2NvbnRleHRfdC4KKyAgICAgKgorICAgICAqLworICAgIEhtYWNTaGEyNTYoKTsKKworICAgIC8qKgorICAgICAqIERlc3RydWN0b3IgZm9yIGZyZWVpbmcgb2YgbWJlZHRsc19tZF9jb250ZXh0X3QuCisgICAgICoKKyAgICAgKi8KKyAgICB+SG1hY1NoYTI1NigpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUga2V5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUtleSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBrZXkuCisgICAgICogQHBhcmFtW2luXSAgYUtleUxlbmd0aCAgVGhlIGtleSBsZW5ndGggaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFN0YXJ0KGNvbnN0IHVpbnQ4X3QgKmFLZXksIHVpbnQxNl90IGFLZXlMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5wdXRzIGJ5dGVzIGludG8gdGhlIEhNQUMgY29tcHV0YXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVmICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIEBwIGFCdWYgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFVwZGF0ZShjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZpbmFsaXplcyB0aGUgaGFzaCBjb21wdXRhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhSGFzaCAgQSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBGaW5pc2godWludDhfdCBhSGFzaFtrSGFzaFNpemVdKTsKKworcHJpdmF0ZToKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBtQ29udGV4dDsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIENyeXB0bworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gSE1BQ19TSEEyNTZfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY3J5cHRvL21iZWR0bHMuY3BwIGIvc3JjL2NvcmUvY3J5cHRvL21iZWR0bHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZWZmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jcnlwdG8vbWJlZHRscy5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgdXNlIG9mIG1iZWRUTFMuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJtYmVkdGxzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDcnlwdG8geworCitNYmVkVGxzOjpNYmVkVGxzKHZvaWQpCit7CisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQobU1lbW9yeSwgc2l6ZW9mKG1NZW1vcnkpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIENyeXB0bworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9jcnlwdG8vbWJlZHRscy5ocHAgYi9zcmMvY29yZS9jcnlwdG8vbWJlZHRscy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhZTExNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NyeXB0by9tYmVkdGxzLmhwcApAQCAtMCwwICsxLDg3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdXNpbmcgbWJlZFRMUy4KKyAqLworCisjaWZuZGVmIE9UX01CRURUTFNfSFBQXworI2RlZmluZSBPVF9NQkVEVExTX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxtYmVkdGxzL21lbW9yeV9idWZmZXJfYWxsb2MuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDcnlwdG8geworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtc2VjdXJpdHkKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBtYmVkVExTIG1lbW9yeS4KKyAqCisgKi8KK2NsYXNzIE1iZWRUbHMKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RUTFMKKyAgICAgICAga01lbW9yeVNpemUgPSBPUEVOVEhSRUFEX0NPTkZJR19NQkVEVExTX0hFQVBfU0laRSwgICAgICAgICAgLy8vPCBTaXplIG9mIG1lbW9yeSBidWZmZXIgKGJ5dGVzKS4KKyNlbHNlCisgICAgICAgIGtNZW1vcnlTaXplID0gT1BFTlRIUkVBRF9DT05GSUdfTUJFRFRMU19IRUFQX1NJWkVfTk9fRFRMUywgIC8vLzwgU2l6ZSBvZiBtZW1vcnkgYnVmZmVyIChieXRlcykuCisjZW5kaWYKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTWJlZFRscyh2b2lkKTsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBjaGFyIG1NZW1vcnlba01lbW9yeVNpemVdOworfTsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgQ3J5cHRvCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBPVF9NQkVEVExTX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NyeXB0by9wYmtkZjJfY21hYy5jcHAgYi9zcmMvY29yZS9jcnlwdG8vcGJrZGYyX2NtYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNjc2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jcnlwdG8vcGJrZGYyX2NtYWMuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgUEJLREYyIHVzaW5nIEFFUy1DTUFDLVBSRi0xMjgKKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInBia2RmMl9jbWFjLmgiCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8bWJlZHRscy9jbWFjLmg+CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKwordm9pZCBvdFBia2RmMkNtYWMoCisgICAgY29uc3QgdWludDhfdCAqYVBhc3N3b3JkLCB1aW50MTZfdCBhUGFzc3dvcmRMZW4sCisgICAgY29uc3QgdWludDhfdCAqYVNhbHQsIHVpbnQxNl90IGFTYWx0TGVuLAorICAgIHVpbnQzMl90IGFJdGVyYXRpb25Db3VudGVyLCB1aW50MTZfdCBhS2V5TGVuLAorICAgIHVpbnQ4X3QgKmFLZXkpCit7CisgICAgdWludDMyX3QgYmxvY2tDb3VudGVyID0gMDsKKyAgICB1aW50MTZfdCB1c2VMZW4gPSAwOworICAgIHVpbnQxNl90IHByZkJsb2NrTGVuID0gTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVg7CisgICAgdWludDhfdCBwcmZJbnB1dFtPVF9QQktERjJfU0FMVF9NQVhfTEVOICsgNF07IC8vIFNhbHQgfHwgSU5UKCksIGZvciBVMSBjYWxjdWxhdGlvbgorICAgIHVpbnQ4X3QgcHJmT3V0cHV0W01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKyAgICB1aW50OF90IGtleUJsb2NrW01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKyAgICB1aW50OF90ICprZXkgPSBhS2V5OworICAgIHVpbnQxNl90IGtleUxlbiA9IGFLZXlMZW47CisKKyAgICB3aGlsZSAoa2V5TGVuKQorICAgIHsKKyAgICAgICAgbWVtY3B5KHByZklucHV0LCBhU2FsdCwgYVNhbHRMZW4pOworCisgICAgICAgIGJsb2NrQ291bnRlcisrOworICAgICAgICBwcmZJbnB1dFthU2FsdExlbiArIDBdID0gKHVpbnQ4X3QpKGJsb2NrQ291bnRlciA+PiAyNCk7CisgICAgICAgIHByZklucHV0W2FTYWx0TGVuICsgMV0gPSAodWludDhfdCkoYmxvY2tDb3VudGVyID4+IDE2KTsKKyAgICAgICAgcHJmSW5wdXRbYVNhbHRMZW4gKyAyXSA9ICh1aW50OF90KShibG9ja0NvdW50ZXIgPj4gOCk7CisgICAgICAgIHByZklucHV0W2FTYWx0TGVuICsgM10gPSAodWludDhfdCkoYmxvY2tDb3VudGVyKTsKKworICAgICAgICAvLyBDYWxjdWxhdGUgVV8xCisgICAgICAgIG1iZWR0bHNfYWVzX2NtYWNfcHJmXzEyOChhUGFzc3dvcmQsIGFQYXNzd29yZExlbiwgcHJmSW5wdXQsIGFTYWx0TGVuICsgNCwgcHJmT3V0cHV0KTsKKyAgICAgICAgbWVtY3B5KGtleUJsb2NrLCBwcmZPdXRwdXQsIHByZkJsb2NrTGVuKTsKKworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgYUl0ZXJhdGlvbkNvdW50ZXI7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KHByZklucHV0LCBwcmZPdXRwdXQsIHByZkJsb2NrTGVuKTsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIFVfaQorICAgICAgICAgICAgbWJlZHRsc19hZXNfY21hY19wcmZfMTI4KGFQYXNzd29yZCwgYVBhc3N3b3JkTGVuLCBwcmZJbnB1dCwgcHJmQmxvY2tMZW4sIHByZk91dHB1dCk7CisKKyAgICAgICAgICAgIC8vIHhvcgorICAgICAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IHByZkJsb2NrTGVuOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAga2V5QmxvY2tbal0gXj0gcHJmT3V0cHV0W2pdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdXNlTGVuID0gKGtleUxlbiA8IHByZkJsb2NrTGVuKSA/IGtleUxlbiA6IHByZkJsb2NrTGVuOworICAgICAgICBtZW1jcHkoa2V5LCBrZXlCbG9jaywgdXNlTGVuKTsKKyAgICAgICAga2V5ICs9IHVzZUxlbjsKKyAgICAgICAga2V5TGVuIC09IHVzZUxlbjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NyeXB0by9wYmtkZjJfY21hYy5oIGIvc3JjL2NvcmUvY3J5cHRvL3Bia2RmMl9jbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5MWIwNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NyeXB0by9wYmtkZjJfY21hYy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBQQktERjIgdXNpbmcgQ01BQyBDIEFQSXMuCisgKi8KKworI2lmbmRlZiBQQktERjJfQ01BQ19IXworI2RlZmluZSBQQktERjJfQ01BQ19IXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRib29sLmgiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIE9UX1BCS0RGMl9TQUxUX01BWF9MRU4gMzAgIC8vIHNhbHQgcHJlZml4ICg2KSArIGV4dGVuZGVkIHBhbmlkICg4KSArIG5ldHdvcmsgbmFtZSAoMTYpCisKKy8qKgorICogVGhpcyBtZXRob2QgcGVyZm9ybSBQS0NTIzUgUEJLREYyIHVzaW5nIENNQUMgKEFFUy1DTUFDLVBSRi0xMjgpLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFQYXNzd29yZCAgICAgICAgICBQYXNzd29yZCB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIGtleS4KKyAqIEBwYXJhbVtpbl0gICAgIGFQYXNzd29yZExlbiAgICAgICBMZW5ndGggb2YgcGFzc3dvcmQuCisgKiBAcGFyYW1baW5dICAgICBhU2FsdCAgICAgICAgICAgICAgU2FsdCB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIGtleS4KKyAqIEBwYXJhbVtpbl0gICAgIGFTYWx0TGVuICAgICAgICAgICBMZW5ndGggb2Ygc2FsdC4KKyAqIEBwYXJhbVtpbl0gICAgIGFJdGVyYXRpb25Db3VudGVyICBJdGVyYXRpb24gY291bnQuCisgKiBAcGFyYW1baW5dICAgICBhS2V5TGVuICAgICAgICAgICAgTGVuZ3RoIG9mIGdlbmVyYXRlZCBrZXkgaW4gYnl0ZXMuCisgKiBAcGFyYW1bb3V0XSAgICBhS2V5ICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBnZW5lcmF0ZWQga2V5LgorICoKKyAqLwordm9pZCBvdFBia2RmMkNtYWMoCisgICAgY29uc3QgdWludDhfdCAqYVBhc3N3b3JkLCB1aW50MTZfdCBhUGFzc3dvcmRMZW4sCisgICAgY29uc3QgdWludDhfdCAqYVNhbHQsIHVpbnQxNl90IGFTYWx0TGVuLAorICAgIHVpbnQzMl90IGFJdGVyYXRpb25Db3VudGVyLCB1aW50MTZfdCBhS2V5TGVuLAorICAgIHVpbnQ4X3QgKmFLZXkpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFBCS0RGMl9DTUFDX0hfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jcnlwdG8vc2hhMjU2LmNwcCBiL3NyYy9jb3JlL2NyeXB0by9zaGEyNTYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNzhmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jcnlwdG8vc2hhMjU2LmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIFNIQS0yNTYuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJzaGEyNTYuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENyeXB0byB7CisKK1NoYTI1Njo6U2hhMjU2KCkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9pbml0KCZtQ29udGV4dCk7Cit9CisKK1NoYTI1Njo6flNoYTI1NigpCit7CisgICAgbWJlZHRsc19zaGEyNTZfZnJlZSgmbUNvbnRleHQpOworfQorCit2b2lkIFNoYTI1Njo6U3RhcnQodm9pZCkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoJm1Db250ZXh0LCAwKTsKK30KKwordm9pZCBTaGEyNTY6OlVwZGF0ZShjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSgmbUNvbnRleHQsIGFCdWYsIGFCdWZMZW5ndGgpOworfQorCit2b2lkIFNoYTI1Njo6RmluaXNoKHVpbnQ4X3QgYUhhc2hba0hhc2hTaXplXSkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9maW5pc2goJm1Db250ZXh0LCBhSGFzaCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBDcnlwdG8KK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY3J5cHRvL3NoYTI1Ni5ocHAgYi9zcmMvY29yZS9jcnlwdG8vc2hhMjU2LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDI5MmE5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY3J5cHRvL3NoYTI1Ni5ocHAKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBwZXJmb3JtaW5nIFNIQS0yNTYgY29tcHV0YXRpb25zLgorICovCisKKyNpZm5kZWYgU0hBMjU2X0hQUF8KKyNkZWZpbmUgU0hBMjU2X0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKKyNpbmNsdWRlIDxtYmVkdGxzL3NoYTI1Ni5oPgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENyeXB0byB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1zZWN1cml0eQorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNIQS0yNTYgY29tcHV0YXRpb24uCisgKgorICovCitjbGFzcyBTaGEyNTYKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrSGFzaFNpemUgPSAzMiwgIC8vLzwgU0hBLTI1NiBoYXNoIHNpemUgKGJ5dGVzKQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBmb3IgaW5pdGlhbGl6aW5nIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQuCisgICAgICoKKyAgICAgKi8KKyAgICBTaGEyNTYoKTsKKworICAgIC8qKgorICAgICAqIERlc3RydWN0b3IgZm9yIGZyZWVpbmcgbWJlZHRsc19zaGEyNTZfY29udGV4dC4KKyAgICAgKgorICAgICAqLworICAgIH5TaGEyNTYoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgU0hBLTI1NiBjb21wdXRhdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RhcnQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnB1dHMgYnl0ZXMgaW50byB0aGUgU0hBLTI1NiBjb21wdXRhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWZMZW5ndGggIFRoZSBsZW5ndGggb2YgQHAgYUJ1ZiBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgVXBkYXRlKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZmluYWxpemVzIHRoZSBoYXNoIGNvbXB1dGF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFIYXNoICBBIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEZpbmlzaCh1aW50OF90IGFIYXNoW2tIYXNoU2l6ZV0pOworCitwcml2YXRlOgorICAgIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgbUNvbnRleHQ7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBDcnlwdG8KK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFNIQTI1Nl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tYWMvbWFjLmNwcCBiL3NyYy9jb3JlL21hYy9tYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMDAwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tYWMvbWFjLmNwcApAQCAtMCwwICsxLDE4NDQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHN1YnNldCBvZiBJRUVFIDgwMi4xNS40IHByaW1pdGl2ZXMgcmVxdWlyZWQgZm9yIFRocmVhZC4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJtYWMudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm1hYy5ocHAiCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VzZWMtYWxhcm0uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjcnlwdG8vYWVzX2NjbS5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL3NoYTI1Ni5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAidGhyZWFkL2xpbmtfcXVhbGl0eS5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV9yb3V0ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXA2NDsKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNYWMgeworCitzdGF0aWMgY29uc3QgdWludDhfdCBzTW9kZTJLZXlbXSA9Cit7CisgICAgMHg3OCwgMHg1OCwgMHgxNiwgMHg4NiwgMHhmZCwgMHhiNCwgMHg1OCwgMHgwZiwgMHhiMCwgMHg5MiwgMHg1NCwgMHg2YSwgMHhlYywgMHhiZCwgMHgxNSwgMHg2NgorfTsKKworc3RhdGljIGNvbnN0IG90RXh0QWRkcmVzcyBzTW9kZTJFeHRBZGRyZXNzID0KK3sKKyAgICB7IDB4MzUsIDB4MDYsIDB4ZmUsIDB4YjgsIDB4MjMsIDB4ZDQsIDB4ODcsIDB4MTIgfSwKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IHNFeHRlbmRlZFBhbmlkSW5pdFtdID0gezB4ZGUsIDB4YWQsIDB4MDAsIDB4YmUsIDB4ZWYsIDB4MDAsIDB4Y2EsIDB4ZmV9Oworc3RhdGljIGNvbnN0IGNoYXIgc05ldHdvcmtOYW1lSW5pdFtdID0gIk9wZW5UaHJlYWQiOworCisjaWZkZWYgX1dJTjMyCitjb25zdCB1aW50MzJfdCBrTWluQmFja29mZlN1bSA9IGtNaW5CYWNrb2ZmICsgKGtVbml0QmFja29mZlBlcmlvZCAqT1RfUkFESU9fU1lNQk9MX1RJTUUgKiAoMSA8PCBrTWluQkUpKSAvIDEwMDA7Citjb25zdCB1aW50MzJfdCBrTWF4QmFja29mZlN1bSA9IGtNaW5CYWNrb2ZmICsgKGtVbml0QmFja29mZlBlcmlvZCAqT1RfUkFESU9fU1lNQk9MX1RJTUUgKiAoMSA8PCBrTWF4QkUpKSAvIDEwMDA7CitzdGF0aWNfYXNzZXJ0KGtNaW5CYWNrb2ZmU3VtID4gMCwgIlRoZSBtaW4gYmFja29mZiB2YWx1ZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8hIik7CisjZW5kaWYKKwordm9pZCBNYWM6OlN0YXJ0Q3NtYUJhY2tvZmYodm9pZCkKK3sKKyAgICBpZiAoUmFkaW9TdXBwb3J0c0NzbWFCYWNrb2ZmKCkpCisgICAgeworICAgICAgICAvLyBJZiB0aGUgcmFkaW8gc3VwcG9ydHMgQ1NNQSBiYWNrIG9mZiBsb2dpYywgaW1tZWRpYXRlbHkgc2NoZWR1bGUgdGhlIHNlbmQuCisgICAgICAgIEhhbmRsZUJlZ2luVHJhbnNtaXQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWludDMyX3QgYmFja29mZkV4cG9uZW50ID0ga01pbkJFICsgbVRyYW5zbWl0QXR0ZW1wdHMgKyBtQ3NtYUF0dGVtcHRzOworICAgICAgICB1aW50MzJfdCBiYWNrb2ZmOworCisgICAgICAgIGlmIChiYWNrb2ZmRXhwb25lbnQgPiBrTWF4QkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhY2tvZmZFeHBvbmVudCA9IGtNYXhCRTsKKyAgICAgICAgfQorCisgICAgICAgIGJhY2tvZmYgPSAob3RQbGF0UmFuZG9tR2V0KCkgJSAoMVVMIDw8IGJhY2tvZmZFeHBvbmVudCkpOworICAgICAgICBiYWNrb2ZmICo9IChzdGF0aWNfY2FzdDx1aW50MzJfdD4oa1VuaXRCYWNrb2ZmUGVyaW9kKSAqIE9UX1JBRElPX1NZTUJPTF9USU1FKTsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9QTEFURk9STV9VU0VDX0JBQ0tPRkZfVElNRVIKKyAgICAgICAgb3RQbGF0VXNlY0FsYXJtU3RhcnRBdChHZXRJbnN0YW5jZSgpLCBvdFBsYXRVc2VjQWxhcm1HZXROb3coKSwgYmFja29mZiwgJk1hYzo6SGFuZGxlQmVnaW5UcmFuc21pdCwgdGhpcyk7CisjZWxzZSAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfUExBVEZPUk1fVVNFQ19CQUNLT0ZGX1RJTUVSCisgICAgICAgIG1CYWNrb2ZmVGltZXIuU3RhcnQoYmFja29mZiAvIDEwMDBVTCk7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorICAgIH0KK30KKworTWFjOjpNYWMoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKGFUaHJlYWROZXRpZiksCisgICAgbU1hY1RpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZNYWM6OkhhbmRsZU1hY1RpbWVyLCB0aGlzKSwKKyNpZiAhT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorICAgIG1CYWNrb2ZmVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJk1hYzo6SGFuZGxlQmVnaW5UcmFuc21pdCwgdGhpcyksCisjZW5kaWYKKyAgICBtUmVjZWl2ZVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZNYWM6OkhhbmRsZVJlY2VpdmVUaW1lciwgdGhpcyksCisgICAgbVNob3J0QWRkcmVzcyhrU2hvcnRBZGRySW52YWxpZCksCisgICAgbVBhbklkKGtQYW5JZEJyb2FkY2FzdCksCisgICAgbUNoYW5uZWwoT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9DSEFOTkVMKSwKKyAgICBtTWF4VHJhbnNtaXRQb3dlcihPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX01BWF9UUkFOU01JVF9QT1dFUiksCisgICAgbVNlbmRIZWFkKE5VTEwpLAorICAgIG1TZW5kVGFpbChOVUxMKSwKKyAgICBtUmVjZWl2ZUhlYWQoTlVMTCksCisgICAgbVJlY2VpdmVUYWlsKE5VTEwpLAorICAgIG1PcGVyYXRpb24oa09wZXJhdGlvbk5vbmUpLAorICAgIG1CZWFjb25TZXF1ZW5jZShzdGF0aWNfY2FzdDx1aW50OF90PihvdFBsYXRSYW5kb21HZXQoKSkpLAorICAgIG1EYXRhU2VxdWVuY2Uoc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpKSwKKyAgICBtUnhPbldoZW5JZGxlKGZhbHNlKSwKKyAgICBtQ3NtYUF0dGVtcHRzKDApLAorICAgIG1UcmFuc21pdEF0dGVtcHRzKDApLAorICAgIG1UcmFuc21pdEJlYWNvbihmYWxzZSksCisgICAgbUJlYWNvbnNFbmFibGVkKGZhbHNlKSwKKyAgICBtUGVuZGluZ1NjYW5SZXF1ZXN0KGtTY2FuVHlwZU5vbmUpLAorICAgIG1TY2FuQ2hhbm5lbChPVF9SQURJT19DSEFOTkVMX01JTiksCisgICAgbVNjYW5DaGFubmVscygweGZmKSwKKyAgICBtU2NhbkR1cmF0aW9uKDApLAorICAgIG1TY2FuQ29udGV4dChOVUxMKSwKKyAgICBtQWN0aXZlU2NhbkhhbmRsZXIoTlVMTCksIC8vIGluaXRpYWxpemUgbUFjdGl2ZVNjYW5IYW5kbGVyIGFuZCBtRW5lcmd5U2NhbkhhbmRsZXIgdW5pb24KKyAgICBtRW5lcmd5U2NhbkN1cnJlbnRNYXhSc3NpKGtJbnZhbGlkUnNzaVZhbHVlKSwKKyAgICBtRW5lcmd5U2NhblNhbXBsZVJzc2lUYXNrKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGFza2xldFNjaGVkdWxlciwgJk1hYzo6SGFuZGxlRW5lcmd5U2NhblNhbXBsZVJzc2ksIHRoaXMpLAorICAgIG1QY2FwQ2FsbGJhY2soTlVMTCksCisgICAgbVBjYXBDYWxsYmFja0NvbnRleHQoTlVMTCksCisgICAgbVdoaXRlbGlzdCgpLAorICAgIG1CbGFja2xpc3QoKSwKKyAgICBtVHhGcmFtZShzdGF0aWNfY2FzdDxGcmFtZSAqPihvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKGFUaHJlYWROZXRpZi5HZXRJbnN0YW5jZSgpKSkpLAorICAgIG1LZXlJZE1vZGUyRnJhbWVDb3VudGVyKDApLAorI2lmIE9QRU5USFJFQURfQ09ORklHX1NUQVlfQVdBS0VfQkVUV0VFTl9GUkFHTUVOVFMKKyAgICBtRGVsYXlTbGVlcChmYWxzZSksCisjZW5kaWYKKyAgICBtV2FpdGluZ0ZvckRhdGEoZmFsc2UpCit7CisgICAgR2VuZXJhdGVFeHRBZGRyZXNzKCZtRXh0QWRkcmVzcyk7CisKKyAgICBtZW1zZXQoJm1Db3VudGVycywgMCwgc2l6ZW9mKG90TWFjQ291bnRlcnMpKTsKKworICAgIFNldEV4dGVuZGVkUGFuSWQoc0V4dGVuZGVkUGFuaWRJbml0KTsKKyAgICBTZXROZXR3b3JrTmFtZShzTmV0d29ya05hbWVJbml0KTsKKyAgICBTZXRQYW5JZChtUGFuSWQpOworICAgIFNldEV4dEFkZHJlc3MobUV4dEFkZHJlc3MpOworICAgIFNldFNob3J0QWRkcmVzcyhtU2hvcnRBZGRyZXNzKTsKKworICAgIG90UGxhdFJhZGlvRW5hYmxlKEdldEluc3RhbmNlKCkpOworfQorCitvdEVycm9yIE1hYzo6QWN0aXZlU2Nhbih1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLCBBY3RpdmVTY2FuSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTY2FuKGtTY2FuVHlwZUFjdGl2ZSwgYVNjYW5DaGFubmVscywgYVNjYW5EdXJhdGlvbiwgYUNvbnRleHQpKTsKKyAgICBtQWN0aXZlU2NhbkhhbmRsZXIgPSBhSGFuZGxlcjsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWFjOjpFbmVyZ3lTY2FuKHVpbnQzMl90IGFTY2FuQ2hhbm5lbHMsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sIEVuZXJneVNjYW5IYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNjYW4oa1NjYW5UeXBlRW5lcmd5LCBhU2NhbkNoYW5uZWxzLCBhU2NhbkR1cmF0aW9uLCBhQ29udGV4dCkpOworICAgIG1FbmVyZ3lTY2FuSGFuZGxlciA9IGFIYW5kbGVyOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNYWM6OlNjYW4oU2NhblR5cGUgYVNjYW5UeXBlLCB1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdCgobU9wZXJhdGlvbiAhPSBrT3BlcmF0aW9uQWN0aXZlU2NhbikgJiYgKG1PcGVyYXRpb24gIT0ga09wZXJhdGlvbkVuZXJneVNjYW4pICYmCisgICAgICAgICAgICAgICAgIChtUGVuZGluZ1NjYW5SZXF1ZXN0ID09IGtTY2FuVHlwZU5vbmUpLCBlcnJvciA9IE9UX0VSUk9SX0JVU1kpOworCisgICAgbVNjYW5Db250ZXh0ID0gYUNvbnRleHQ7CisgICAgbVNjYW5DaGFubmVscyA9IChhU2NhbkNoYW5uZWxzID09IDApID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtTY2FuQ2hhbm5lbHNBbGwpIDogYVNjYW5DaGFubmVsczsKKyAgICBtU2NhbkR1cmF0aW9uID0gKGFTY2FuRHVyYXRpb24gPT0gMCkgPyBzdGF0aWNfY2FzdDx1aW50MTZfdD4oa1NjYW5EdXJhdGlvbkRlZmF1bHQpIDogYVNjYW5EdXJhdGlvbjsKKworICAgIG1TY2FuQ2hhbm5lbCA9IE9UX1JBRElPX0NIQU5ORUxfTUlOOworICAgIG1TY2FuQ2hhbm5lbHMgPj49IE9UX1JBRElPX0NIQU5ORUxfTUlOOworCisgICAgd2hpbGUgKChtU2NhbkNoYW5uZWxzICYgMSkgPT0gMCkKKyAgICB7CisgICAgICAgIG1TY2FuQ2hhbm5lbHMgPj49IDE7CisgICAgICAgIG1TY2FuQ2hhbm5lbCsrOworICAgIH0KKworICAgIG1QZW5kaW5nU2NhblJlcXVlc3QgPSBhU2NhblR5cGU7CisgICAgU3RhcnRPcGVyYXRpb24oKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgTWFjOjpJc0FjdGl2ZVNjYW5JblByb2dyZXNzKHZvaWQpCit7CisgICAgcmV0dXJuIChtT3BlcmF0aW9uID09IGtPcGVyYXRpb25BY3RpdmVTY2FuKSB8fCAobVBlbmRpbmdTY2FuUmVxdWVzdCA9PSBrU2NhblR5cGVBY3RpdmUpOworfQorCitib29sIE1hYzo6SXNFbmVyZ3lTY2FuSW5Qcm9ncmVzcyh2b2lkKQoreworICAgIHJldHVybiAobU9wZXJhdGlvbiA9PSBrT3BlcmF0aW9uRW5lcmd5U2NhbikgfHwgKG1QZW5kaW5nU2NhblJlcXVlc3QgPT0ga1NjYW5UeXBlRW5lcmd5KTsKK30KKworYm9vbCBNYWM6OklzSW5UcmFuc21pdFN0YXRlKHZvaWQpCit7CisgICAgcmV0dXJuIChtT3BlcmF0aW9uID09IGtPcGVyYXRpb25UcmFuc21pdERhdGEpIHx8IChtT3BlcmF0aW9uID09IGtPcGVyYXRpb25UcmFuc21pdEJlYWNvbik7Cit9CisKK290RXJyb3IgTWFjOjpDb252ZXJ0QmVhY29uVG9BY3RpdmVTY2FuUmVzdWx0KEZyYW1lICphQmVhY29uRnJhbWUsIG90QWN0aXZlU2NhblJlc3VsdCAmYVJlc3VsdCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBBZGRyZXNzIGFkZHJlc3M7CisgICAgQmVhY29uICpiZWFjb24gPSBOVUxMOworICAgIEJlYWNvblBheWxvYWQgKmJlYWNvblBheWxvYWQgPSBOVUxMOworICAgIHVpbnQ4X3QgcGF5bG9hZExlbmd0aDsKKyAgICBjaGFyIHN0cmluZ0J1ZmZlcltCZWFjb25QYXlsb2FkOjprSW5mb1N0cmluZ1NpemVdOworCisgICAgbWVtc2V0KCZhUmVzdWx0LCAwLCBzaXplb2Yob3RBY3RpdmVTY2FuUmVzdWx0KSk7CisKKyAgICBWZXJpZnlPckV4aXQoYUJlYWNvbkZyYW1lICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIFZlcmlmeU9yRXhpdChhQmVhY29uRnJhbWUtPkdldFR5cGUoKSA9PSBGcmFtZTo6a0ZjZkZyYW1lQmVhY29uLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYUJlYWNvbkZyYW1lLT5HZXRTcmNBZGRyKGFkZHJlc3MpKTsKKyAgICBWZXJpZnlPckV4aXQoYWRkcmVzcy5tTGVuZ3RoID09IHNpemVvZihhZGRyZXNzLm1FeHRBZGRyZXNzKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgbWVtY3B5KCZhUmVzdWx0Lm1FeHRBZGRyZXNzLCAmYWRkcmVzcy5tRXh0QWRkcmVzcywgc2l6ZW9mKGFSZXN1bHQubUV4dEFkZHJlc3MpKTsKKworICAgIGFCZWFjb25GcmFtZS0+R2V0U3JjUGFuSWQoYVJlc3VsdC5tUGFuSWQpOworICAgIGFSZXN1bHQubUNoYW5uZWwgPSBhQmVhY29uRnJhbWUtPkdldENoYW5uZWwoKTsKKyAgICBhUmVzdWx0Lm1Sc3NpID0gYUJlYWNvbkZyYW1lLT5HZXRQb3dlcigpOworICAgIGFSZXN1bHQubUxxaSA9IGFCZWFjb25GcmFtZS0+R2V0THFpKCk7CisKKyAgICBwYXlsb2FkTGVuZ3RoID0gYUJlYWNvbkZyYW1lLT5HZXRQYXlsb2FkTGVuZ3RoKCk7CisKKyAgICBiZWFjb24gPSByZWludGVycHJldF9jYXN0PEJlYWNvbiAqPihhQmVhY29uRnJhbWUtPkdldFBheWxvYWQoKSk7CisgICAgYmVhY29uUGF5bG9hZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QmVhY29uUGF5bG9hZCAqPihiZWFjb24tPkdldFBheWxvYWQoKSk7CisKKyAgICBpZiAoKHBheWxvYWRMZW5ndGggPj0gKHNpemVvZigqYmVhY29uKSArIHNpemVvZigqYmVhY29uUGF5bG9hZCkpKSAmJiBiZWFjb24tPklzVmFsaWQoKSAmJiBiZWFjb25QYXlsb2FkLT5Jc1ZhbGlkKCkpCisgICAgeworICAgICAgICBhUmVzdWx0Lm1WZXJzaW9uID0gYmVhY29uUGF5bG9hZC0+R2V0UHJvdG9jb2xWZXJzaW9uKCk7CisgICAgICAgIGFSZXN1bHQubUlzSm9pbmFibGUgPSBiZWFjb25QYXlsb2FkLT5Jc0pvaW5pbmdQZXJtaXR0ZWQoKTsKKyAgICAgICAgYVJlc3VsdC5tSXNOYXRpdmUgPSBiZWFjb25QYXlsb2FkLT5Jc05hdGl2ZSgpOworICAgICAgICBtZW1jcHkoJmFSZXN1bHQubU5ldHdvcmtOYW1lLCBiZWFjb25QYXlsb2FkLT5HZXROZXR3b3JrTmFtZSgpLCBzaXplb2YoYVJlc3VsdC5tTmV0d29ya05hbWUpKTsKKyAgICAgICAgbWVtY3B5KCZhUmVzdWx0Lm1FeHRlbmRlZFBhbklkLCBiZWFjb25QYXlsb2FkLT5HZXRFeHRlbmRlZFBhbklkKCksIHNpemVvZihhUmVzdWx0Lm1FeHRlbmRlZFBhbklkKSk7CisgICAgfQorCisgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBCZWFjb24sICVzIiwgYmVhY29uUGF5bG9hZC0+VG9JbmZvU3RyaW5nKHN0cmluZ0J1ZmZlciwgc2l6ZW9mKHN0cmluZ0J1ZmZlcikpKTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShzdHJpbmdCdWZmZXIpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBNYWM6OlN0YXJ0RW5lcmd5U2Nhbih2b2lkKQoreworICAgIGlmICghKG90UGxhdFJhZGlvR2V0Q2FwcyhHZXRJbnN0YW5jZSgpKSAmIE9UX1JBRElPX0NBUFNfRU5FUkdZX1NDQU4pKQorICAgIHsKKyAgICAgICAgbUVuZXJneVNjYW5DdXJyZW50TWF4UnNzaSA9IGtJbnZhbGlkUnNzaVZhbHVlOworICAgICAgICBtTWFjVGltZXIuU3RhcnQobVNjYW5EdXJhdGlvbik7CisgICAgICAgIG1FbmVyZ3lTY2FuU2FtcGxlUnNzaVRhc2suUG9zdCgpOworICAgICAgICBSYWRpb1JlY2VpdmUobVNjYW5DaGFubmVsKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IG90UGxhdFJhZGlvRW5lcmd5U2NhbihHZXRJbnN0YW5jZSgpLCBtU2NhbkNoYW5uZWwsIG1TY2FuRHVyYXRpb24pOworCisgICAgICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBDYW5jZWwgc2NhbgorICAgICAgICAgICAgbUVuZXJneVNjYW5IYW5kbGVyKG1TY2FuQ29udGV4dCwgTlVMTCk7CisgICAgICAgICAgICBGaW5pc2hPcGVyYXRpb24oKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdFJhZGlvRW5lcmd5U2NhbkRvbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYUVuZXJneVNjYW5NYXhSc3NpKQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgaWYgKGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCkpCisgICAgeworICAgICAgICBhSW5zdGFuY2UtPm1MaW5rUmF3Lkludm9rZUVuZXJneVNjYW5Eb25lKGFFbmVyZ3lTY2FuTWF4UnNzaSk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICB7CisgICAgICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkVuZXJneVNjYW5Eb25lKGFFbmVyZ3lTY2FuTWF4UnNzaSk7CisgICAgfQorfQorCit2b2lkIE1hYzo6RW5lcmd5U2NhbkRvbmUoaW50OF90IGFFbmVyZ3lTY2FuTWF4UnNzaSkKK3sKKyAgICAvLyBUcmlnZ2VyIGEgZW5lcmd5IHNjYW4gaGFuZGxlciBjYWxsYmFjayBpZiBuZWNlc3NhcnkKKyAgICBpZiAoYUVuZXJneVNjYW5NYXhSc3NpICE9IGtJbnZhbGlkUnNzaVZhbHVlKQorICAgIHsKKyAgICAgICAgb3RFbmVyZ3lTY2FuUmVzdWx0IHJlc3VsdDsKKworICAgICAgICByZXN1bHQubUNoYW5uZWwgPSBtU2NhbkNoYW5uZWw7CisgICAgICAgIHJlc3VsdC5tTWF4UnNzaSA9IGFFbmVyZ3lTY2FuTWF4UnNzaTsKKyAgICAgICAgbUVuZXJneVNjYW5IYW5kbGVyKG1TY2FuQ29udGV4dCwgJnJlc3VsdCk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIHRvIHRoZSBuZXh0IHNjYW4gY2hhbm5lbAorICAgIGRvCisgICAgeworICAgICAgICBtU2NhbkNoYW5uZWxzID4+PSAxOworICAgICAgICBtU2NhbkNoYW5uZWwrKzsKKworICAgICAgICAvLyBJZiB3ZSBoYXZlIHNjYW5uZWQgYWxsIHRoZSBjaGFubmVscywgdGhlbiBmaXJlIHRoZSBmaW5hbCBjYWxsYmFjaworICAgICAgICAvLyBhbmQgc3RhcnQgdGhlIG5leHQgdHJhbnNtaXNzaW9uIHRhc2sKKyAgICAgICAgaWYgKG1TY2FuQ2hhbm5lbHMgPT0gMCB8fCBtU2NhbkNoYW5uZWwgPiBPVF9SQURJT19DSEFOTkVMX01BWCkKKyAgICAgICAgeworICAgICAgICAgICAgUmFkaW9SZWNlaXZlKG1DaGFubmVsKTsKKyAgICAgICAgICAgIG1FbmVyZ3lTY2FuSGFuZGxlcihtU2NhbkNvbnRleHQsIE5VTEwpOworICAgICAgICAgICAgRmluaXNoT3BlcmF0aW9uKCk7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKChtU2NhbkNoYW5uZWxzICYgMSkgPT0gMCk7CisKKyAgICAvLyBTdGFydCBzY2FubmluZyB0aGUgbmV4dCBjaGFubmVsCisgICAgU3RhcnRFbmVyZ3lTY2FuKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIE1hYzo6SGFuZGxlRW5lcmd5U2NhblNhbXBsZVJzc2koVGFza2xldCAmYVRhc2tsZXQpCit7CisgICAgR2V0T3duZXIoYVRhc2tsZXQpLkhhbmRsZUVuZXJneVNjYW5TYW1wbGVSc3NpKCk7Cit9CisKK3ZvaWQgTWFjOjpIYW5kbGVFbmVyZ3lTY2FuU2FtcGxlUnNzaSh2b2lkKQoreworICAgIGludDhfdCByc3NpOworCisgICAgVmVyaWZ5T3JFeGl0KG1PcGVyYXRpb24gPT0ga09wZXJhdGlvbkVuZXJneVNjYW4pOworCisgICAgcnNzaSA9IG90UGxhdFJhZGlvR2V0UnNzaShHZXRJbnN0YW5jZSgpKTsKKworICAgIGlmIChyc3NpICE9IGtJbnZhbGlkUnNzaVZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKChtRW5lcmd5U2NhbkN1cnJlbnRNYXhSc3NpID09IGtJbnZhbGlkUnNzaVZhbHVlKSB8fCAocnNzaSA+IG1FbmVyZ3lTY2FuQ3VycmVudE1heFJzc2kpKQorICAgICAgICB7CisgICAgICAgICAgICBtRW5lcmd5U2NhbkN1cnJlbnRNYXhSc3NpID0gcnNzaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1FbmVyZ3lTY2FuU2FtcGxlUnNzaVRhc2suUG9zdCgpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBNYWM6OlJlZ2lzdGVyUmVjZWl2ZXIoUmVjZWl2ZXIgJmFSZWNlaXZlcikKK3sKKyAgICBhc3NlcnQobVJlY2VpdmVUYWlsICE9ICZhUmVjZWl2ZXIgJiYgYVJlY2VpdmVyLm1OZXh0ID09IE5VTEwpOworCisgICAgaWYgKG1SZWNlaXZlVGFpbCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgbVJlY2VpdmVIZWFkID0gJmFSZWNlaXZlcjsKKyAgICAgICAgbVJlY2VpdmVUYWlsID0gJmFSZWNlaXZlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVJlY2VpdmVUYWlsLT5tTmV4dCA9ICZhUmVjZWl2ZXI7CisgICAgICAgIG1SZWNlaXZlVGFpbCA9ICZhUmVjZWl2ZXI7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgTWFjOjpTZXRSeE9uV2hlbklkbGUoYm9vbCBhUnhPbldoZW5JZGxlKQoreworICAgIG1SeE9uV2hlbklkbGUgPSBhUnhPbldoZW5JZGxlOworCisgICAgLy8gVXBkYXRlIGlkbGUgc3RhdGUgaWYgbm8gb25nb2luZyBvcGVyYXRpb24uCisgICAgU3RhcnRPcGVyYXRpb24oKTsKK30KKwordm9pZCBNYWM6OkdlbmVyYXRlRXh0QWRkcmVzcyhFeHRBZGRyZXNzICphRXh0QWRkcmVzcykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihFeHRBZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgYUV4dEFkZHJlc3MtPm04W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgIH0KKworICAgIGFFeHRBZGRyZXNzLT5TZXRHcm91cChmYWxzZSk7CisgICAgYUV4dEFkZHJlc3MtPlNldExvY2FsKHRydWUpOworfQorCit2b2lkIE1hYzo6U2V0RXh0QWRkcmVzcyhjb25zdCBFeHRBZGRyZXNzICZhRXh0QWRkcmVzcykKK3sKKyAgICB1aW50OF90IGJ1ZltzaXplb2YoYUV4dEFkZHJlc3MpXTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihidWYpOyBpKyspCisgICAgeworICAgICAgICBidWZbaV0gPSBhRXh0QWRkcmVzcy5tOFs3IC0gaV07CisgICAgfQorCisgICAgb3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MoR2V0SW5zdGFuY2UoKSwgYnVmKTsKKyAgICBtRXh0QWRkcmVzcyA9IGFFeHRBZGRyZXNzOworCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIE1hYzo6R2V0SGFzaE1hY0FkZHJlc3MoRXh0QWRkcmVzcyAqYUhhc2hNYWNBZGRyZXNzKQoreworICAgIENyeXB0bzo6U2hhMjU2IHNoYTI1NjsKKyAgICB1aW50OF90IGJ1ZltDcnlwdG86OlNoYTI1Njo6a0hhc2hTaXplXTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBvdFBsYXRSYWRpb0dldEllZWVFdWk2NChHZXRJbnN0YW5jZSgpLCBidWYpOworICAgIHNoYTI1Ni5TdGFydCgpOworICAgIHNoYTI1Ni5VcGRhdGUoYnVmLCBPVF9FWFRfQUREUkVTU19TSVpFKTsKKyAgICBzaGEyNTYuRmluaXNoKGJ1Zik7CisKKyAgICBtZW1jcHkoYUhhc2hNYWNBZGRyZXNzLT5tOCwgYnVmLCBPVF9FWFRfQUREUkVTU19TSVpFKTsKKyAgICBhSGFzaE1hY0FkZHJlc3MtPlNldExvY2FsKHRydWUpOworCisgICAgb3RMb2dGdW5jRXhpdE1zZygiJWxsWCIsIEhvc3RTd2FwNjQoKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QgKj4oYUhhc2hNYWNBZGRyZXNzKSkpOworfQorCitvdEVycm9yIE1hYzo6U2V0U2hvcnRBZGRyZXNzKFNob3J0QWRkcmVzcyBhU2hvcnRBZGRyZXNzKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCIlZCIsIGFTaG9ydEFkZHJlc3MpOworICAgIG1TaG9ydEFkZHJlc3MgPSBhU2hvcnRBZGRyZXNzOworICAgIG90UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzKEdldEluc3RhbmNlKCksIGFTaG9ydEFkZHJlc3MpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNYWM6OlNldENoYW5uZWwodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiJWQiLCBhQ2hhbm5lbCk7CisgICAgbUNoYW5uZWwgPSBhQ2hhbm5lbDsKKworICAgIC8vIFVwZGF0ZSBjaGFubmVsIGlmIG5vIG9uZ29pbmcgb3BlcmF0aW9uLgorICAgIFN0YXJ0T3BlcmF0aW9uKCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1hYzo6U2V0TmV0d29ya05hbWUoY29uc3QgY2hhciAqYU5ldHdvcmtOYW1lKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RMb2dGdW5jRW50cnlNc2coIiVzIiwgYU5ldHdvcmtOYW1lKTsKKworICAgIFZlcmlmeU9yRXhpdChzdHJsZW4oYU5ldHdvcmtOYW1lKSA8PSBPVF9ORVRXT1JLX05BTUVfTUFYX1NJWkUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICh2b2lkKXN0cmxjcHkobU5ldHdvcmtOYW1lLm04LCBhTmV0d29ya05hbWUsIHNpemVvZihtTmV0d29ya05hbWUpKTsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWFjOjpTZXRQYW5JZChQYW5JZCBhUGFuSWQpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIiVkIiwgYVBhbklkKTsKKyAgICBtUGFuSWQgPSBhUGFuSWQ7CisgICAgb3RQbGF0UmFkaW9TZXRQYW5JZChHZXRJbnN0YW5jZSgpLCBtUGFuSWQpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNYWM6OlNldEV4dGVuZGVkUGFuSWQoY29uc3QgdWludDhfdCAqYUV4dFBhbklkKQoreworICAgIG1lbWNweShtRXh0ZW5kZWRQYW5JZC5tOCwgYUV4dFBhbklkLCBzaXplb2YobUV4dGVuZGVkUGFuSWQpKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNYWM6OlNlbmRGcmFtZVJlcXVlc3QoU2VuZGVyICZhU2VuZGVyKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG1TZW5kVGFpbCAhPSAmYVNlbmRlciAmJiBhU2VuZGVyLm1OZXh0ID09IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisKKyAgICBpZiAobVNlbmRIZWFkID09IE5VTEwpCisgICAgeworICAgICAgICBtU2VuZEhlYWQgPSAmYVNlbmRlcjsKKyAgICAgICAgbVNlbmRUYWlsID0gJmFTZW5kZXI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1TZW5kVGFpbC0+bU5leHQgPSAmYVNlbmRlcjsKKyAgICAgICAgbVNlbmRUYWlsID0gJmFTZW5kZXI7CisgICAgfQorCisgICAgU3RhcnRPcGVyYXRpb24oKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWFjOjpQdXRSYWRpb0luSWRsZU1vZGUodm9pZCkKK3sKKyAgICBpZiAobVJ4T25XaGVuSWRsZSB8fCBtUmVjZWl2ZVRpbWVyLklzUnVubmluZygpIHx8IG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMoR2V0SW5zdGFuY2UoKSkpCisgICAgeworICAgICAgICBSYWRpb1JlY2VpdmUobUNoYW5uZWwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBSYWRpb1NsZWVwKCk7CisgICAgfQorfQorCit2b2lkIE1hYzo6U3RhcnRPcGVyYXRpb24odm9pZCkKK3sKKyAgICBWZXJpZnlPckV4aXQobU9wZXJhdGlvbiA9PSBrT3BlcmF0aW9uTm9uZSk7CisgICAgVmVyaWZ5T3JFeGl0KCFtV2FpdGluZ0ZvckRhdGEpOworCisgICAgaWYgKG1QZW5kaW5nU2NhblJlcXVlc3QgPT0ga1NjYW5UeXBlQWN0aXZlKQorICAgIHsKKyAgICAgICAgbVBlbmRpbmdTY2FuUmVxdWVzdCA9IGtTY2FuVHlwZU5vbmU7CisgICAgICAgIG1PcGVyYXRpb24gPSBrT3BlcmF0aW9uQWN0aXZlU2NhbjsKKyAgICAgICAgU3RhcnRDc21hQmFja29mZigpOworICAgIH0KKyAgICBlbHNlIGlmIChtUGVuZGluZ1NjYW5SZXF1ZXN0ID09IGtTY2FuVHlwZUVuZXJneSkKKyAgICB7CisgICAgICAgIG1QZW5kaW5nU2NhblJlcXVlc3QgPSBrU2NhblR5cGVOb25lOworICAgICAgICBtT3BlcmF0aW9uID0ga09wZXJhdGlvbkVuZXJneVNjYW47CisgICAgICAgIFN0YXJ0RW5lcmd5U2NhbigpOworICAgIH0KKyAgICBlbHNlIGlmIChtVHJhbnNtaXRCZWFjb24pCisgICAgeworICAgICAgICBtVHJhbnNtaXRCZWFjb24gPSBmYWxzZTsKKyAgICAgICAgbU9wZXJhdGlvbiA9IGtPcGVyYXRpb25UcmFuc21pdEJlYWNvbjsKKyAgICAgICAgU3RhcnRDc21hQmFja29mZigpOworICAgIH0KKyAgICBlbHNlIGlmIChtU2VuZEhlYWQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1PcGVyYXRpb24gPSBrT3BlcmF0aW9uVHJhbnNtaXREYXRhOworICAgICAgICBTdGFydENzbWFCYWNrb2ZmKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFB1dFJhZGlvSW5JZGxlTW9kZSgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTWFjOjpGaW5pc2hPcGVyYXRpb24odm9pZCkKK3sKKyAgICBtT3BlcmF0aW9uID0ga09wZXJhdGlvbk5vbmU7CisgICAgUHV0UmFkaW9JbklkbGVNb2RlKCk7CisgICAgU3RhcnRPcGVyYXRpb24oKTsKK30KKwordm9pZCBNYWM6OkdlbmVyYXRlTm9uY2UoY29uc3QgRXh0QWRkcmVzcyAmYUFkZHJlc3MsIHVpbnQzMl90IGFGcmFtZUNvdW50ZXIsIHVpbnQ4X3QgYVNlY3VyaXR5TGV2ZWwsIHVpbnQ4X3QgKmFOb25jZSkKK3sKKyAgICAvLyBzb3VyY2UgYWRkcmVzcworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKQorICAgIHsKKyAgICAgICAgYU5vbmNlW2ldID0gYUFkZHJlc3MubThbaV07CisgICAgfQorCisgICAgYU5vbmNlICs9IDg7CisKKyAgICAvLyBmcmFtZSBjb3VudGVyCisgICAgYU5vbmNlWzBdID0gKGFGcmFtZUNvdW50ZXIgPj4gMjQpICYgMHhmZjsKKyAgICBhTm9uY2VbMV0gPSAoYUZyYW1lQ291bnRlciA+PiAxNikgJiAweGZmOworICAgIGFOb25jZVsyXSA9IChhRnJhbWVDb3VudGVyID4+IDgpICYgMHhmZjsKKyAgICBhTm9uY2VbM10gPSAoYUZyYW1lQ291bnRlciA+PiAwKSAmIDB4ZmY7CisgICAgYU5vbmNlICs9IDQ7CisKKyAgICAvLyBzZWN1cml0eSBsZXZlbAorICAgIGFOb25jZVswXSA9IGFTZWN1cml0eUxldmVsOworfQorCit2b2lkIE1hYzo6U2VuZEJlYWNvblJlcXVlc3QoRnJhbWUgJmFGcmFtZSkKK3sKKyAgICAvLyBpbml0aWFsaXplIE1BQyBoZWFkZXIKKyAgICB1aW50MTZfdCBmY2YgPSBGcmFtZTo6a0ZjZkZyYW1lTWFjQ21kIHwgRnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQgfCBGcmFtZTo6a0ZjZlNyY0FkZHJOb25lOworICAgIGFGcmFtZS5Jbml0TWFjSGVhZGVyKGZjZiwgRnJhbWU6OmtTZWNOb25lKTsKKyAgICBhRnJhbWUuU2V0RHN0UGFuSWQoa1Nob3J0QWRkckJyb2FkY2FzdCk7CisgICAgYUZyYW1lLlNldERzdEFkZHIoa1Nob3J0QWRkckJyb2FkY2FzdCk7CisgICAgYUZyYW1lLlNldENvbW1hbmRJZChGcmFtZTo6a01hY0NtZEJlYWNvblJlcXVlc3QpOworICAgIG90TG9nSW5mb01hYyhHZXRJbnN0YW5jZSgpLCAiU2VuZGluZyBCZWFjb24gUmVxdWVzdCIpOworfQorCit2b2lkIE1hYzo6U2VuZEJlYWNvbihGcmFtZSAmYUZyYW1lKQoreworICAgIHVpbnQ4X3QgbnVtVW5zZWN1cmVQb3J0czsKKyAgICB1aW50OF90IGJlYWNvbkxlbmd0aDsKKyAgICB1aW50MTZfdCBmY2Y7CisgICAgQmVhY29uICpiZWFjb24gPSBOVUxMOworICAgIEJlYWNvblBheWxvYWQgKmJlYWNvblBheWxvYWQgPSBOVUxMOworICAgIGNoYXIgc3RyaW5nQnVmZmVyW0JlYWNvblBheWxvYWQ6OmtJbmZvU3RyaW5nU2l6ZV07CisKKyAgICAvLyBpbml0aWFsaXplIE1BQyBoZWFkZXIKKyAgICBmY2YgPSBGcmFtZTo6a0ZjZkZyYW1lQmVhY29uIHwgRnJhbWU6OmtGY2ZEc3RBZGRyTm9uZSB8IEZyYW1lOjprRmNmU3JjQWRkckV4dDsKKyAgICBhRnJhbWUuSW5pdE1hY0hlYWRlcihmY2YsIEZyYW1lOjprU2VjTm9uZSk7CisgICAgYUZyYW1lLlNldFNyY1BhbklkKG1QYW5JZCk7CisgICAgYUZyYW1lLlNldFNyY0FkZHIobUV4dEFkZHJlc3MpOworCisgICAgLy8gd3JpdGUgcGF5bG9hZAorICAgIGJlYWNvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8QmVhY29uICo+KGFGcmFtZS5HZXRQYXlsb2FkKCkpOworICAgIGJlYWNvbi0+SW5pdCgpOworICAgIGJlYWNvbkxlbmd0aCA9IHNpemVvZigqYmVhY29uKTsKKworICAgIGJlYWNvblBheWxvYWQgPSByZWludGVycHJldF9jYXN0PEJlYWNvblBheWxvYWQgKj4oYmVhY29uLT5HZXRQYXlsb2FkKCkpOworCisgICAgaWYgKEdldE5ldGlmKCkuR2V0S2V5TWFuYWdlcigpLkdldFNlY3VyaXR5UG9saWN5RmxhZ3MoKSAmIE9UX1NFQ1VSSVRZX1BPTElDWV9CRUFDT05TKQorICAgIHsKKyAgICAgICAgYmVhY29uUGF5bG9hZC0+SW5pdCgpOworCisgICAgICAgIC8vIHNldCB0aGUgSm9pbmluZyBQZXJtaXR0ZWQgZmxhZworICAgICAgICBHZXROZXRpZigpLkdldElwNkZpbHRlcigpLkdldFVuc2VjdXJlUG9ydHMobnVtVW5zZWN1cmVQb3J0cyk7CisKKyAgICAgICAgaWYgKG51bVVuc2VjdXJlUG9ydHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJlYWNvblBheWxvYWQtPlNldEpvaW5pbmdQZXJtaXR0ZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGJlYWNvblBheWxvYWQtPkNsZWFySm9pbmluZ1Blcm1pdHRlZCgpOworICAgICAgICB9CisKKyAgICAgICAgYmVhY29uUGF5bG9hZC0+U2V0TmV0d29ya05hbWUobU5ldHdvcmtOYW1lLm04KTsKKyAgICAgICAgYmVhY29uUGF5bG9hZC0+U2V0RXh0ZW5kZWRQYW5JZChtRXh0ZW5kZWRQYW5JZC5tOCk7CisKKyAgICAgICAgYmVhY29uTGVuZ3RoICs9IHNpemVvZigqYmVhY29uUGF5bG9hZCk7CisgICAgfQorCisgICAgYUZyYW1lLlNldFBheWxvYWRMZW5ndGgoYmVhY29uTGVuZ3RoKTsKKworICAgIG90TG9nSW5mb01hYyhHZXRJbnN0YW5jZSgpLCAiU2VuZGluZyBCZWFjb24sICVzIiwgYmVhY29uUGF5bG9hZC0+VG9JbmZvU3RyaW5nKHN0cmluZ0J1ZmZlciwgc2l6ZW9mKHN0cmluZ0J1ZmZlcikpKTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShzdHJpbmdCdWZmZXIpOworfQorCit2b2lkIE1hYzo6UHJvY2Vzc1RyYW5zbWl0U2VjdXJpdHkoRnJhbWUgJmFGcmFtZSkKK3sKKyAgICBLZXlNYW5hZ2VyICZrZXlNYW5hZ2VyID0gR2V0TmV0aWYoKS5HZXRLZXlNYW5hZ2VyKCk7CisgICAgdWludDMyX3QgZnJhbWVDb3VudGVyID0gMDsKKyAgICB1aW50OF90IHNlY3VyaXR5TGV2ZWw7CisgICAgdWludDhfdCBrZXlJZE1vZGU7CisgICAgdWludDhfdCBub25jZVtrTm9uY2VTaXplXTsKKyAgICB1aW50OF90IHRhZ0xlbmd0aDsKKyAgICBDcnlwdG86OkFlc0NjbSBhZXNDY207CisgICAgY29uc3QgdWludDhfdCAqa2V5ID0gTlVMTDsKKyAgICBjb25zdCBFeHRBZGRyZXNzICpleHRBZGRyZXNzID0gTlVMTDsKKworICAgIGlmIChhRnJhbWUuR2V0U2VjdXJpdHlFbmFibGVkKCkgPT0gZmFsc2UpCisgICAgeworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgYUZyYW1lLkdldEtleUlkTW9kZShrZXlJZE1vZGUpOworCisgICAgc3dpdGNoIChrZXlJZE1vZGUpCisgICAgeworICAgIGNhc2UgRnJhbWU6OmtLZXlJZE1vZGUwOgorICAgICAgICBrZXkgPSBrZXlNYW5hZ2VyLkdldEtlaygpOworICAgICAgICBleHRBZGRyZXNzID0gJm1FeHRBZGRyZXNzOworCisgICAgICAgIGlmICghYUZyYW1lLklzQVJldHJhbnNtaXNzaW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFGcmFtZS5TZXRGcmFtZUNvdW50ZXIoa2V5TWFuYWdlci5HZXRLZWtGcmFtZUNvdW50ZXIoKSk7CisgICAgICAgICAgICBrZXlNYW5hZ2VyLkluY3JlbWVudEtla0ZyYW1lQ291bnRlcigpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprS2V5SWRNb2RlMToKKyAgICAgICAga2V5ID0ga2V5TWFuYWdlci5HZXRDdXJyZW50TWFjS2V5KCk7CisgICAgICAgIGV4dEFkZHJlc3MgPSAmbUV4dEFkZHJlc3M7CisKKyAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIG1hcmtlZCBhcyBhIHJldHJhbnNtaXNzaW9uLCB0aGUgYE1hYzo6U2VuZGVyYCB3aGljaAorICAgICAgICAvLyBwcmVwYXJlZCB0aGUgZnJhbWUgc2hvdWxkIHNldCB0aGUgZnJhbWUgY291bnRlciBhbmQga2V5IGlkIHRvIHRoZQorICAgICAgICAvLyBzYW1lIHZhbHVlcyB1c2VkIGluIHRoZSBlYXJsaWVyIHRyYW5zbWl0IGF0dGVtcHQuIEZvciBhIG5ldyBmcmFtZSAobm90CisgICAgICAgIC8vIGEgcmV0cmFuc21pc3Npb24pLCB3ZSBnZXQgYSBuZXcgZnJhbWUgY291bnRlciBhbmQga2V5IGlkIGZyb20gdGhlIGtleQorICAgICAgICAvLyBtYW5hZ2VyLgorCisgICAgICAgIGlmICghYUZyYW1lLklzQVJldHJhbnNtaXNzaW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFGcmFtZS5TZXRGcmFtZUNvdW50ZXIoa2V5TWFuYWdlci5HZXRNYWNGcmFtZUNvdW50ZXIoKSk7CisgICAgICAgICAgICBrZXlNYW5hZ2VyLkluY3JlbWVudE1hY0ZyYW1lQ291bnRlcigpOworICAgICAgICAgICAgYUZyYW1lLlNldEtleUlkKChrZXlNYW5hZ2VyLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpICYgMHg3ZikgKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0tleUlkTW9kZTI6CisgICAgeworICAgICAgICBjb25zdCB1aW50OF90IGtleVNvdXJjZVtdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworICAgICAgICBrZXkgPSBzTW9kZTJLZXk7CisgICAgICAgIG1LZXlJZE1vZGUyRnJhbWVDb3VudGVyKys7CisgICAgICAgIGFGcmFtZS5TZXRGcmFtZUNvdW50ZXIobUtleUlkTW9kZTJGcmFtZUNvdW50ZXIpOworICAgICAgICBhRnJhbWUuU2V0S2V5U291cmNlKGtleVNvdXJjZSk7CisgICAgICAgIGFGcmFtZS5TZXRLZXlJZCgweGZmKTsKKyAgICAgICAgZXh0QWRkcmVzcyA9IHN0YXRpY19jYXN0PGNvbnN0IEV4dEFkZHJlc3MgKj4oJnNNb2RlMkV4dEFkZHJlc3MpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBhRnJhbWUuR2V0U2VjdXJpdHlMZXZlbChzZWN1cml0eUxldmVsKTsKKyAgICBhRnJhbWUuR2V0RnJhbWVDb3VudGVyKGZyYW1lQ291bnRlcik7CisKKyAgICBHZW5lcmF0ZU5vbmNlKCpleHRBZGRyZXNzLCBmcmFtZUNvdW50ZXIsIHNlY3VyaXR5TGV2ZWwsIG5vbmNlKTsKKworICAgIGFlc0NjbS5TZXRLZXkoa2V5LCAxNik7CisgICAgdGFnTGVuZ3RoID0gYUZyYW1lLkdldEZvb3Rlckxlbmd0aCgpIC0gRnJhbWU6OmtGY3NTaXplOworCisgICAgYWVzQ2NtLkluaXQoYUZyYW1lLkdldEhlYWRlckxlbmd0aCgpLCBhRnJhbWUuR2V0UGF5bG9hZExlbmd0aCgpLCB0YWdMZW5ndGgsIG5vbmNlLCBzaXplb2Yobm9uY2UpKTsKKworICAgIGFlc0NjbS5IZWFkZXIoYUZyYW1lLkdldEhlYWRlcigpLCBhRnJhbWUuR2V0SGVhZGVyTGVuZ3RoKCkpOworICAgIGFlc0NjbS5QYXlsb2FkKGFGcmFtZS5HZXRQYXlsb2FkKCksIGFGcmFtZS5HZXRQYXlsb2FkKCksIGFGcmFtZS5HZXRQYXlsb2FkTGVuZ3RoKCksIHRydWUpOworICAgIGFlc0NjbS5GaW5hbGl6ZShhRnJhbWUuR2V0Rm9vdGVyKCksICZ0YWdMZW5ndGgpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBNYWM6OkhhbmRsZUJlZ2luVHJhbnNtaXQodm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TWFjICo+KGFDb250ZXh0KS0+SGFuZGxlQmVnaW5UcmFuc21pdCgpOworfQorCit2b2lkIE1hYzo6SGFuZGxlQmVnaW5UcmFuc21pdChUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlQmVnaW5UcmFuc21pdCgpOworfQorCit2b2lkIE1hYzo6SGFuZGxlQmVnaW5UcmFuc21pdCh2b2lkKQoreworICAgIEZyYW1lICZzZW5kRnJhbWUoKm1UeEZyYW1lKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChtQ3NtYUF0dGVtcHRzID09IDAgJiYgbVRyYW5zbWl0QXR0ZW1wdHMgPT0gMCkKKyAgICB7CisgICAgICAgIHNlbmRGcmFtZS5TZXRQb3dlcihtTWF4VHJhbnNtaXRQb3dlcik7CisKKyAgICAgICAgc3dpdGNoIChtT3BlcmF0aW9uKQorICAgICAgICB7CisgICAgICAgIGNhc2Uga09wZXJhdGlvbkFjdGl2ZVNjYW46CisgICAgICAgICAgICBvdFBsYXRSYWRpb1NldFBhbklkKEdldEluc3RhbmNlKCksIGtQYW5JZEJyb2FkY2FzdCk7CisgICAgICAgICAgICBzZW5kRnJhbWUuU2V0Q2hhbm5lbChtU2NhbkNoYW5uZWwpOworICAgICAgICAgICAgU2VuZEJlYWNvblJlcXVlc3Qoc2VuZEZyYW1lKTsKKyAgICAgICAgICAgIHNlbmRGcmFtZS5TZXRTZXF1ZW5jZSgwKTsKKyAgICAgICAgICAgIHNlbmRGcmFtZS5TZXRNYXhUeEF0dGVtcHRzKGtEaXJlY3RGcmFtZU1hY1R4QXR0ZW1wdHMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrT3BlcmF0aW9uVHJhbnNtaXRCZWFjb246CisgICAgICAgICAgICBzZW5kRnJhbWUuU2V0Q2hhbm5lbChtQ2hhbm5lbCk7CisgICAgICAgICAgICBTZW5kQmVhY29uKHNlbmRGcmFtZSk7CisgICAgICAgICAgICBzZW5kRnJhbWUuU2V0U2VxdWVuY2UobUJlYWNvblNlcXVlbmNlKyspOworICAgICAgICAgICAgc2VuZEZyYW1lLlNldE1heFR4QXR0ZW1wdHMoa0RpcmVjdEZyYW1lTWFjVHhBdHRlbXB0cyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtPcGVyYXRpb25UcmFuc21pdERhdGE6CisgICAgICAgICAgICBzZW5kRnJhbWUuU2V0Q2hhbm5lbChtQ2hhbm5lbCk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNlbmRIZWFkLT5IYW5kbGVGcmFtZVJlcXVlc3Qoc2VuZEZyYW1lKSk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBpcyBtYXJrZWQgYXMgYSByZXRyYW5zbWlzc2lvbiwgdGhlbiBkYXRhIHNlcXVlbmNlIG51bWJlciBpcyBhbHJlYWR5IHNldCBieSB0aGUgYFNlbmRlcmAuCisgICAgICAgICAgICBpZiAoIXNlbmRGcmFtZS5Jc0FSZXRyYW5zbWlzc2lvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNlbmRGcmFtZS5TZXRTZXF1ZW5jZShtRGF0YVNlcXVlbmNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlY3VyaXR5IFByb2Nlc3NpbmcKKyAgICAgICAgUHJvY2Vzc1RyYW5zbWl0U2VjdXJpdHkoc2VuZEZyYW1lKTsKKworICAgICAgICBpZiAoc2VuZEZyYW1lLkdldFBvd2VyKCkgPiBtTWF4VHJhbnNtaXRQb3dlcikKKyAgICAgICAgeworICAgICAgICAgICAgc2VuZEZyYW1lLlNldFBvd2VyKG1NYXhUcmFuc21pdFBvd2VyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGVycm9yID0gUmFkaW9SZWNlaXZlKHNlbmRGcmFtZS5HZXRDaGFubmVsKCkpOworICAgIGFzc2VydChlcnJvciA9PSBPVF9FUlJPUl9OT05FKTsKKyAgICBlcnJvciA9IFJhZGlvVHJhbnNtaXQoJnNlbmRGcmFtZSk7CisKKyAgICBhc3NlcnQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSk7CisKKyAgICBpZiAoc2VuZEZyYW1lLkdldEFja1JlcXVlc3QoKSAmJiAhKG90UGxhdFJhZGlvR2V0Q2FwcyhHZXRJbnN0YW5jZSgpKSAmIE9UX1JBRElPX0NBUFNfQUNLX1RJTUVPVVQpKQorICAgIHsKKyAgICAgICAgbU1hY1RpbWVyLlN0YXJ0KGtBY2tUaW1lb3V0KTsKKyAgICAgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJBY2sgdGltZXIgc3RhcnQiKTsKKyAgICB9CisKKyAgICBpZiAobVBjYXBDYWxsYmFjaykKKyAgICB7CisgICAgICAgIHNlbmRGcmFtZS5tRGlkVFggPSB0cnVlOworICAgICAgICBtUGNhcENhbGxiYWNrKCZzZW5kRnJhbWUsIG1QY2FwQ2FsbGJhY2tDb250ZXh0KTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTEVHQUNZX1RSQU5TTUlUX0RPTkUKKyAgICAgICAgVHJhbnNtaXREb25lVGFzayhtVHhGcmFtZSwgZmFsc2UsIE9UX0VSUk9SX0FCT1JUKTsKKyNlbHNlCisgICAgICAgIFRyYW5zbWl0RG9uZVRhc2sobVR4RnJhbWUsIE5VTEwsIE9UX0VSUk9SX0FCT1JUKTsKKyNlbmRpZgorICAgIH0KK30KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0xFR0FDWV9UUkFOU01JVF9ET05FCitleHRlcm4gIkMiIHZvaWQgb3RQbGF0UmFkaW9UcmFuc21pdERvbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgYm9vbCBhUnhQZW5kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYUVycm9yKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCIlIW90RXJyb3IhLCBhUnhQZW5kaW5nPSV1IiwgYUVycm9yLCBhUnhQZW5kaW5nID8gMSA6IDApOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKKyAgICBpZiAoYUluc3RhbmNlLT5tTGlua1Jhdy5Jc0VuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIGFJbnN0YW5jZS0+bUxpbmtSYXcuSW52b2tlVHJhbnNtaXREb25lKGFGcmFtZSwgYVJ4UGVuZGluZywgYUVycm9yKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIHsKKyAgICAgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuVHJhbnNtaXREb25lVGFzayhhRnJhbWUsIGFSeFBlbmRpbmcsIGFFcnJvcik7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIE1hYzo6VHJhbnNtaXREb25lVGFzayhvdFJhZGlvRnJhbWUgKmFGcmFtZSwgYm9vbCBhUnhQZW5kaW5nLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBtTWFjVGltZXIuU3RvcCgpOworCisgICAgbUNvdW50ZXJzLm1UeFRvdGFsKys7CisKKyAgICBGcmFtZSAqZnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFtZSAqPihhRnJhbWUpOworICAgIEFkZHJlc3MgYWRkcjsKKyAgICBmcmFtZS0+R2V0RHN0QWRkcihhZGRyKTsKKworICAgIGlmIChhZGRyLm1TaG9ydEFkZHJlc3MgPT0ga1Nob3J0QWRkckJyb2FkY2FzdCkKKyAgICB7CisgICAgICAgIC8vIEJyb2FkY2FzdCBmcmFtZQorICAgICAgICBtQ291bnRlcnMubVR4QnJvYWRjYXN0Kys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFVuaWNhc3QgZnJhbWUKKyAgICAgICAgbUNvdW50ZXJzLm1UeFVuaWNhc3QrKzsKKyAgICB9CisKKyAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX0FCT1JUKQorICAgIHsKKyAgICAgICAgbUNvdW50ZXJzLm1UeEVyckFib3J0Kys7CisgICAgfQorCisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFKQorICAgIHsKKyAgICAgICAgbUNvdW50ZXJzLm1UeEVyckNjYSsrOworICAgIH0KKworICAgIGlmICghUmFkaW9TdXBwb3J0c0NzbWFCYWNrb2ZmKCkgJiYKKyAgICAgICAgYUVycm9yID09IE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgJiYKKyAgICAgICAgbUNzbWFBdHRlbXB0cyA8IGtNYXhDU01BQmFja29mZnMpCisgICAgeworICAgICAgICBtQ3NtYUF0dGVtcHRzKys7CisgICAgICAgIFN0YXJ0Q3NtYUJhY2tvZmYoKTsKKworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgbUNzbWFBdHRlbXB0cyA9IDA7CisKKyAgICBzd2l0Y2ggKG1PcGVyYXRpb24pCisgICAgeworICAgIGNhc2Uga09wZXJhdGlvblRyYW5zbWl0RGF0YToKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgY29tbWFuZElkOworCisgICAgICAgIGlmICgoZnJhbWUtPkdldFR5cGUoKSA9PSBGcmFtZTo6a0ZjZkZyYW1lTWFjQ21kKSAmJiAoZnJhbWUtPkdldENvbW1hbmRJZChjb21tYW5kSWQpID09IE9UX0VSUk9SX05PTkUpICYmCisgICAgICAgICAgICAoY29tbWFuZElkID09IEZyYW1lOjprTWFjQ21kRGF0YVJlcXVlc3QpICYmIChhUnhQZW5kaW5nKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVdhaXRpbmdGb3JEYXRhID0gdHJ1ZTsKKyAgICAgICAgICAgIG1SZWNlaXZlVGltZXIuU3RhcnQoa0RhdGFQb2xsVGltZW91dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBmYWxsIHRocm91Z2gKKworICAgIGNhc2Uga09wZXJhdGlvbkFjdGl2ZVNjYW46CisgICAgY2FzZSBrT3BlcmF0aW9uVHJhbnNtaXRCZWFjb246CisgICAgICAgIFNlbnRGcmFtZShhRXJyb3IpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKKyNlbHNlIC8vICNpZiBPUEVOVEhSRUFEX0NPTkZJR19MRUdBQ1lfVFJBTlNNSVRfRE9ORQorZXh0ZXJuICJDIiB2b2lkIG90UGxhdFJhZGlvVHhEb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90UmFkaW9GcmFtZSAqYUFja0ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYUVycm9yKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCIlIW90RXJyb3IhIiwgYUVycm9yKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgaWYgKGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCkpCisgICAgeworICAgICAgICBhSW5zdGFuY2UtPm1MaW5rUmF3Lkludm9rZVRyYW5zbWl0RG9uZShhRnJhbWUsIChzdGF0aWNfY2FzdDxGcmFtZSAqPihhQWNrRnJhbWUpKS0+R2V0RnJhbWVQZW5kaW5nKCksIGFFcnJvcik7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICB7CisgICAgICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLlRyYW5zbWl0RG9uZVRhc2soYUZyYW1lLCBhQWNrRnJhbWUsIGFFcnJvcik7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIE1hYzo6VHJhbnNtaXREb25lVGFzayhvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RSYWRpb0ZyYW1lICphQWNrRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgIEZyYW1lICp0eEZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWUgKj4oYUZyYW1lKTsKKyAgICBBZGRyZXNzIGFkZHI7CisgICAgYm9vbCBmcmFtZVBlbmRpbmcgPSBmYWxzZTsKKworICAgIG1NYWNUaW1lci5TdG9wKCk7CisKKyAgICBtQ291bnRlcnMubVR4VG90YWwrKzsKKworICAgIHR4RnJhbWUtPkdldERzdEFkZHIoYWRkcik7CisKKyAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUgJiYgdHhGcmFtZS0+R2V0QWNrUmVxdWVzdCgpICYmIGFBY2tGcmFtZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgRnJhbWUgKmFja0ZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWUgKj4oYUFja0ZyYW1lKTsKKyAgICAgICAgTmVpZ2hib3IgKm5laWdoYm9yOworCisgICAgICAgIGZyYW1lUGVuZGluZyA9IGFja0ZyYW1lLT5HZXRGcmFtZVBlbmRpbmcoKTsKKyAgICAgICAgbmVpZ2hib3IgPSBHZXROZXRpZigpLkdldE1sZSgpLkdldE5laWdoYm9yKGFkZHIpOworCisgICAgICAgIGlmIChuZWlnaGJvciAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBuZWlnaGJvci0+R2V0TGlua0luZm8oKS5BZGRSc3MoR2V0Tm9pc2VGbG9vcigpLCBhY2tGcmFtZS0+R2V0UG93ZXIoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWRkci5tU2hvcnRBZGRyZXNzID09IGtTaG9ydEFkZHJCcm9hZGNhc3QpCisgICAgeworICAgICAgICAvLyBCcm9hZGNhc3QgZnJhbWUKKyAgICAgICAgbUNvdW50ZXJzLm1UeEJyb2FkY2FzdCsrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBVbmljYXN0IGZyYW1lCisgICAgICAgIG1Db3VudGVycy5tVHhVbmljYXN0Kys7CisgICAgfQorCisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9BQk9SVCkKKyAgICB7CisgICAgICAgIG1Db3VudGVycy5tVHhFcnJBYm9ydCsrOworICAgIH0KKworICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRSkKKyAgICB7CisgICAgICAgIG1Db3VudGVycy5tVHhFcnJDY2ErKzsKKyAgICB9CisKKyAgICBpZiAoIVJhZGlvU3VwcG9ydHNDc21hQmFja29mZigpICYmCisgICAgICAgIGFFcnJvciA9PSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFICYmCisgICAgICAgIG1Dc21hQXR0ZW1wdHMgPCBrTWF4Q1NNQUJhY2tvZmZzKQorICAgIHsKKyAgICAgICAgbUNzbWFBdHRlbXB0cysrOworICAgICAgICBTdGFydENzbWFCYWNrb2ZmKCk7CisKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIG1Dc21hQXR0ZW1wdHMgPSAwOworCisgICAgc3dpdGNoIChtT3BlcmF0aW9uKQorICAgIHsKKyAgICBjYXNlIGtPcGVyYXRpb25UcmFuc21pdERhdGE6CisgICAgeworICAgICAgICB1aW50OF90IGNvbW1hbmRJZDsKKworICAgICAgICBpZiAoKHR4RnJhbWUtPkdldFR5cGUoKSA9PSBGcmFtZTo6a0ZjZkZyYW1lTWFjQ21kKSAmJiAodHhGcmFtZS0+R2V0Q29tbWFuZElkKGNvbW1hbmRJZCkgPT0gT1RfRVJST1JfTk9ORSkgJiYKKyAgICAgICAgICAgIChjb21tYW5kSWQgPT0gRnJhbWU6OmtNYWNDbWREYXRhUmVxdWVzdCkgJiYgKGZyYW1lUGVuZGluZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1XYWl0aW5nRm9yRGF0YSA9IHRydWU7CisgICAgICAgICAgICBtUmVjZWl2ZVRpbWVyLlN0YXJ0KGtEYXRhUG9sbFRpbWVvdXQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZmFsbCB0aHJvdWdoCisKKyAgICBjYXNlIGtPcGVyYXRpb25BY3RpdmVTY2FuOgorICAgIGNhc2Uga09wZXJhdGlvblRyYW5zbWl0QmVhY29uOgorICAgICAgICBTZW50RnJhbWUoYUVycm9yKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfTEVHQUNZX1RSQU5TTUlUX0RPTkUKKworb3RFcnJvciBNYWM6OlJhZGlvVHJhbnNtaXQoRnJhbWUgKmFTZW5kRnJhbWUpCit7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBWV9BV0FLRV9CRVRXRUVOX0ZSQUdNRU5UUworCisgICAgaWYgKCFtUnhPbldoZW5JZGxlKQorICAgIHsKKyAgICAgICAgLy8gQ2FuY2VsIGRlbGF5IHNsZWVwIHRpbWVyCisgICAgICAgIG1SZWNlaXZlVGltZXIuU3RvcCgpOworCisgICAgICAgIC8vIERlbGF5IHNsZWVwIGlmIHdlIGhhdmUgYW5vdGhlciBmcmFtZSBwZW5kaW5nIHRvIHRyYW5zbWl0CisgICAgICAgIG1EZWxheVNsZWVwID0gYVNlbmRGcmFtZS0+R2V0RnJhbWVQZW5kaW5nKCk7CisgICAgfQorCisjZW5kaWYKKyAgICAvLyBUcmFuc21pdCBwYWNrZXQKKyAgICByZXR1cm4gb3RQbGF0UmFkaW9UcmFuc21pdChHZXRJbnN0YW5jZSgpLCBzdGF0aWNfY2FzdDxvdFJhZGlvRnJhbWUgKj4oYVNlbmRGcmFtZSkpOworfQorCitvdEVycm9yIE1hYzo6UmFkaW9SZWNlaXZlKHVpbnQ4X3QgYUNoYW5uZWwpCit7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBWV9BV0FLRV9CRVRXRUVOX0ZSQUdNRU5UUworCisgICAgaWYgKCFtUnhPbldoZW5JZGxlKQorICAgIHsKKyAgICAgICAgLy8gQ2FuY2VsIGRlbGF5IHNsZWVwIHRpbWVyCisgICAgICAgIG1SZWNlaXZlVGltZXIuU3RvcCgpOworICAgIH0KKworI2VuZGlmCisgICAgLy8gUmVjZWl2ZQorICAgIHJldHVybiBvdFBsYXRSYWRpb1JlY2VpdmUoR2V0SW5zdGFuY2UoKSwgYUNoYW5uZWwpOworfQorCit2b2lkIE1hYzo6UmFkaW9TbGVlcCh2b2lkKQoreworI2lmIE9QRU5USFJFQURfQ09ORklHX1NUQVlfQVdBS0VfQkVUV0VFTl9GUkFHTUVOVFMKKworICAgIGlmIChtRGVsYXlTbGVlcCkKKyAgICB7CisgICAgICAgIC8vIFJlc3RhcnQgZGVsYXkgc2xlZXAgdGltZXIKKyAgICAgICAgbVJlY2VpdmVUaW1lci5TdGFydChrU2xlZXBEZWxheSk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgb3RQbGF0UmFkaW9TbGVlcChHZXRJbnN0YW5jZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFjOjpIYW5kbGVNYWNUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlTWFjVGltZXIoKTsKK30KKwordm9pZCBNYWM6OkhhbmRsZU1hY1RpbWVyKHZvaWQpCit7CisgICAgQWRkcmVzcyBhZGRyOworCisgICAgc3dpdGNoIChtT3BlcmF0aW9uKQorICAgIHsKKyAgICBjYXNlIGtPcGVyYXRpb25BY3RpdmVTY2FuOgorICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBtU2NhbkNoYW5uZWxzID4+PSAxOworICAgICAgICAgICAgbVNjYW5DaGFubmVsKys7CisKKyAgICAgICAgICAgIGlmIChtU2NhbkNoYW5uZWxzID09IDAgfHwgbVNjYW5DaGFubmVsID4gT1RfUkFESU9fQ0hBTk5FTF9NQVgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUmFkaW9SZWNlaXZlKG1DaGFubmVsKTsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1NldFBhbklkKEdldEluc3RhbmNlKCksIG1QYW5JZCk7CisgICAgICAgICAgICAgICAgbUFjdGl2ZVNjYW5IYW5kbGVyKG1TY2FuQ29udGV4dCwgTlVMTCk7CisgICAgICAgICAgICAgICAgRmluaXNoT3BlcmF0aW9uKCk7CisgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlICgobVNjYW5DaGFubmVscyAmIDEpID09IDApOworCisgICAgICAgIFJhZGlvUmVjZWl2ZShtU2NhbkNoYW5uZWwpOworICAgICAgICBTdGFydENzbWFCYWNrb2ZmKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrT3BlcmF0aW9uRW5lcmd5U2NhbjoKKyAgICAgICAgRW5lcmd5U2NhbkRvbmUobUVuZXJneVNjYW5DdXJyZW50TWF4UnNzaSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrT3BlcmF0aW9uVHJhbnNtaXREYXRhOgorICAgICAgICBvdExvZ0RlYmdNYWMoR2V0SW5zdGFuY2UoKSwgIkFjayB0aW1lciBmaXJlZCIpOworICAgICAgICBSYWRpb1JlY2VpdmUobUNoYW5uZWwpOworICAgICAgICBtQ291bnRlcnMubVR4VG90YWwrKzsKKworICAgICAgICBtVHhGcmFtZS0+R2V0RHN0QWRkcihhZGRyKTsKKworICAgICAgICBpZiAoYWRkci5tU2hvcnRBZGRyZXNzID09IGtTaG9ydEFkZHJCcm9hZGNhc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEJyb2FkY2FzdCBmcmFtZQorICAgICAgICAgICAgbUNvdW50ZXJzLm1UeEJyb2FkY2FzdCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVW5pY2FzdCBGcmFtZQorICAgICAgICAgICAgbUNvdW50ZXJzLm1UeFVuaWNhc3QrKzsKKyAgICAgICAgfQorCisgICAgICAgIFNlbnRGcmFtZShPVF9FUlJPUl9OT19BQ0spOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTWFjOjpIYW5kbGVSZWNlaXZlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVJlY2VpdmVUaW1lcigpOworfQorCit2b2lkIE1hYzo6SGFuZGxlUmVjZWl2ZVRpbWVyKHZvaWQpCit7CisgICAgaWYgKG1XYWl0aW5nRm9yRGF0YSkKKyAgICB7CisgICAgICAgIG90TG9nRGViZ01hYyhHZXRJbnN0YW5jZSgpLCAiRGF0YSBwb2xsIHRpbWVvdXQiKTsKKworICAgICAgICBtV2FpdGluZ0ZvckRhdGEgPSBmYWxzZTsKKworICAgICAgICBmb3IgKFJlY2VpdmVyICpyZWNlaXZlciA9IG1SZWNlaXZlSGVhZDsgcmVjZWl2ZXI7IHJlY2VpdmVyID0gcmVjZWl2ZXItPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICByZWNlaXZlci0+SGFuZGxlRGF0YVBvbGxUaW1lb3V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdGFydE9wZXJhdGlvbigpOworfQorCit2b2lkIE1hYzo6U2VudEZyYW1lKG90RXJyb3IgYUVycm9yKQoreworICAgIEZyYW1lICZzZW5kRnJhbWUoKm1UeEZyYW1lKTsKKyAgICBTZW5kZXIgKnNlbmRlcjsKKworICAgIG1UcmFuc21pdEF0dGVtcHRzKys7CisKKyAgICBzd2l0Y2ggKGFFcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRToKKyAgICBjYXNlIE9UX0VSUk9SX0FCT1JUOgorICAgIGNhc2UgT1RfRVJST1JfTk9fQUNLOgorICAgIHsKKyAgICAgICAgY2hhciBzdHJpbmdCdWZmZXJbRnJhbWU6OmtJbmZvU3RyaW5nU2l6ZV07CisKKyAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJGcmFtZSB0eCBmYWlsZWQsIGVycm9yOiVzLCBhdHRlbXB0OiVkLyVkLCAlcyIsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhhRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgbVRyYW5zbWl0QXR0ZW1wdHMsIHNlbmRGcmFtZS5HZXRNYXhUeEF0dGVtcHRzKCksCisgICAgICAgICAgICAgICAgICAgICBzZW5kRnJhbWUuVG9JbmZvU3RyaW5nKHN0cmluZ0J1ZmZlciwgc2l6ZW9mKHN0cmluZ0J1ZmZlcikpKTsKKyAgICAgICAgb3REdW1wRGViZ01hYyhHZXRJbnN0YW5jZSgpLCAiVFggRVJSIiwgc2VuZEZyYW1lLkdldEhlYWRlcigpLCAxNik7CisKKyAgICAgICAgaWYgKCFSYWRpb1N1cHBvcnRzUmV0cmllcygpICYmCisgICAgICAgICAgICBtVHJhbnNtaXRBdHRlbXB0cyA8IHNlbmRGcmFtZS5HZXRNYXhUeEF0dGVtcHRzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0YXJ0Q3NtYUJhY2tvZmYoKTsKKyAgICAgICAgICAgIG1Db3VudGVycy5tVHhSZXRyeSsrOworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisKKyAgICAgICAgT1RfVU5VU0VEX1ZBUklBQkxFKHN0cmluZ0J1ZmZlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1UcmFuc21pdEF0dGVtcHRzID0gMDsKKyAgICBtQ3NtYUF0dGVtcHRzID0gMDsKKworICAgIGlmIChzZW5kRnJhbWUuR2V0QWNrUmVxdWVzdCgpKQorICAgIHsKKyAgICAgICAgbUNvdW50ZXJzLm1UeEFja1JlcXVlc3RlZCsrOworCisgICAgICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgbUNvdW50ZXJzLm1UeEFja2VkKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUNvdW50ZXJzLm1UeE5vQWNrUmVxdWVzdGVkKys7CisgICAgfQorCisgICAgc3dpdGNoIChtT3BlcmF0aW9uKQorICAgIHsKKyAgICBjYXNlIGtPcGVyYXRpb25BY3RpdmVTY2FuOgorICAgICAgICBtQ291bnRlcnMubVR4QmVhY29uUmVxdWVzdCsrOworICAgICAgICBtTWFjVGltZXIuU3RhcnQobVNjYW5EdXJhdGlvbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrT3BlcmF0aW9uVHJhbnNtaXRCZWFjb246CisgICAgICAgIG1Db3VudGVycy5tVHhCZWFjb24rKzsKKyAgICAgICAgRmluaXNoT3BlcmF0aW9uKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrT3BlcmF0aW9uVHJhbnNtaXREYXRhOgorICAgICAgICBpZiAobVJlY2VpdmVUaW1lci5Jc1J1bm5pbmcoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUNvdW50ZXJzLm1UeERhdGFQb2xsKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtQ291bnRlcnMubVR4RGF0YSsrOworICAgICAgICB9CisKKyAgICAgICAgc2VuZGVyID0gbVNlbmRIZWFkOworICAgICAgICBtU2VuZEhlYWQgPSBtU2VuZEhlYWQtPm1OZXh0OworCisgICAgICAgIGlmIChtU2VuZEhlYWQgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlbmRUYWlsID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHNlbmRlci0+bU5leHQgPSBOVUxMOworCisgICAgICAgIGlmICghc2VuZEZyYW1lLklzQVJldHJhbnNtaXNzaW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EYXRhU2VxdWVuY2UrKzsKKyAgICAgICAgfQorCisgICAgICAgIG90RHVtcERlYmdNYWMoR2V0SW5zdGFuY2UoKSwgIlRYIiwgc2VuZEZyYW1lLkdldEhlYWRlcigpLCBzZW5kRnJhbWUuR2V0TGVuZ3RoKCkpOworICAgICAgICBzZW5kZXItPkhhbmRsZVNlbnRGcmFtZShzZW5kRnJhbWUsIGFFcnJvcik7CisKKyAgICAgICAgRmluaXNoT3BlcmF0aW9uKCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBNYWM6OlByb2Nlc3NSZWNlaXZlU2VjdXJpdHkoRnJhbWUgJmFGcmFtZSwgY29uc3QgQWRkcmVzcyAmYVNyY0FkZHIsIE5laWdoYm9yICphTmVpZ2hib3IpCit7CisgICAgS2V5TWFuYWdlciAma2V5TWFuYWdlciA9IEdldE5ldGlmKCkuR2V0S2V5TWFuYWdlcigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3Qgc2VjdXJpdHlMZXZlbDsKKyAgICB1aW50OF90IGtleUlkTW9kZTsKKyAgICB1aW50MzJfdCBmcmFtZUNvdW50ZXI7CisgICAgdWludDhfdCBub25jZVtrTm9uY2VTaXplXTsKKyAgICB1aW50OF90IHRhZ1tGcmFtZTo6a01heE1pY1NpemVdOworICAgIHVpbnQ4X3QgdGFnTGVuZ3RoOworICAgIHVpbnQ4X3Qga2V5aWQ7CisgICAgdWludDMyX3Qga2V5U2VxdWVuY2UgPSAwOworICAgIGNvbnN0IHVpbnQ4X3QgKm1hY0tleTsKKyAgICBjb25zdCBFeHRBZGRyZXNzICpleHRBZGRyZXNzOworICAgIENyeXB0bzo6QWVzQ2NtIGFlc0NjbTsKKworICAgIGFGcmFtZS5TZXRTZWN1cml0eVZhbGlkKGZhbHNlKTsKKworICAgIGlmIChhRnJhbWUuR2V0U2VjdXJpdHlFbmFibGVkKCkgPT0gZmFsc2UpCisgICAgeworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgYUZyYW1lLkdldFNlY3VyaXR5TGV2ZWwoc2VjdXJpdHlMZXZlbCk7CisgICAgYUZyYW1lLkdldEZyYW1lQ291bnRlcihmcmFtZUNvdW50ZXIpOworICAgIG90TG9nRGViZ01hYyhHZXRJbnN0YW5jZSgpLCAiRnJhbWUgY291bnRlciAldSIsIGZyYW1lQ291bnRlcik7CisKKyAgICBhRnJhbWUuR2V0S2V5SWRNb2RlKGtleUlkTW9kZSk7CisKKyAgICBzd2l0Y2ggKGtleUlkTW9kZSkKKyAgICB7CisgICAgY2FzZSBGcmFtZTo6a0tleUlkTW9kZTA6CisgICAgICAgIFZlcmlmeU9yRXhpdCgobWFjS2V5ID0ga2V5TWFuYWdlci5HZXRLZWsoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9TRUNVUklUWSk7CisgICAgICAgIGV4dEFkZHJlc3MgPSAmYVNyY0FkZHIubUV4dEFkZHJlc3M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0tleUlkTW9kZTE6CisgICAgICAgIFZlcmlmeU9yRXhpdChhTmVpZ2hib3IgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9TRUNVUklUWSk7CisKKyAgICAgICAgYUZyYW1lLkdldEtleUlkKGtleWlkKTsKKyAgICAgICAga2V5aWQtLTsKKworICAgICAgICBpZiAoa2V5aWQgPT0gKGtleU1hbmFnZXIuR2V0Q3VycmVudEtleVNlcXVlbmNlKCkgJiAweDdmKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc2FtZSBrZXkgaW5kZXgKKyAgICAgICAgICAgIGtleVNlcXVlbmNlID0ga2V5TWFuYWdlci5HZXRDdXJyZW50S2V5U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIG1hY0tleSA9IGtleU1hbmFnZXIuR2V0Q3VycmVudE1hY0tleSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGtleWlkID09ICgoa2V5TWFuYWdlci5HZXRDdXJyZW50S2V5U2VxdWVuY2UoKSAtIDEpICYgMHg3ZikpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHByZXZpb3VzIGtleSBpbmRleAorICAgICAgICAgICAga2V5U2VxdWVuY2UgPSBrZXlNYW5hZ2VyLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpIC0gMTsKKyAgICAgICAgICAgIG1hY0tleSA9IGtleU1hbmFnZXIuR2V0VGVtcG9yYXJ5TWFjS2V5KGtleVNlcXVlbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChrZXlpZCA9PSAoKGtleU1hbmFnZXIuR2V0Q3VycmVudEtleVNlcXVlbmNlKCkgKyAxKSAmIDB4N2YpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBuZXh0IGtleSBpbmRleAorICAgICAgICAgICAga2V5U2VxdWVuY2UgPSBrZXlNYW5hZ2VyLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpICsgMTsKKyAgICAgICAgICAgIG1hY0tleSA9IGtleU1hbmFnZXIuR2V0VGVtcG9yYXJ5TWFjS2V5KGtleVNlcXVlbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9TRUNVUklUWSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGUgZnJhbWUgaXMgZnJvbSBhIG5laWdoYm9yIG5vdCBpbiB2YWxpZCBzdGF0ZSAoZS5nLiwgaXQgaXMgZnJvbSBhIGNoaWxkIGJlaW5nCisgICAgICAgIC8vIHJlc3RvcmVkKSwgc2tpcCB0aGUga2V5IHNlcXVlbmNlIGFuZCBmcmFtZSBjb3VudGVyIGNoZWNrcyBidXQgY29udGludWUgdG8gdmVyaWZ5CisgICAgICAgIC8vIHRoZSB0YWcvTUlDLiBTdWNoIGEgZnJhbWUgaXMgbGF0ZXIgZmlsdGVyZWQgaW4gYFJ4RG9uZVRhc2tgIHdoaWNoIG9ubHkgYWxsb3dzIE1BQworICAgICAgICAvLyBEYXRhIFJlcXVlc3QgZnJhbWVzIGZyb20gYSBjaGlsZCBiZWluZyByZXN0b3JlZC4KKworICAgICAgICBpZiAoYU5laWdoYm9yLT5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGtleVNlcXVlbmNlIDwgYU5laWdoYm9yLT5HZXRLZXlTZXF1ZW5jZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9TRUNVUklUWSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChrZXlTZXF1ZW5jZSA9PSBhTmVpZ2hib3ItPkdldEtleVNlcXVlbmNlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChmcmFtZUNvdW50ZXIgKyAxKSA8IGFOZWlnaGJvci0+R2V0TGlua0ZyYW1lQ291bnRlcigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1NFQ1VSSVRZKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGZyYW1lQ291bnRlciArIDEpID09IGFOZWlnaGJvci0+R2V0TGlua0ZyYW1lQ291bnRlcigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZHJvcCBkdXBsaWNhdGVkIGZyYW1lcworICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfRFVQTElDQVRFRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXh0QWRkcmVzcyA9ICZhU3JjQWRkci5tRXh0QWRkcmVzczsKKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtLZXlJZE1vZGUyOgorICAgICAgICBtYWNLZXkgPSBzTW9kZTJLZXk7CisgICAgICAgIGV4dEFkZHJlc3MgPSBzdGF0aWNfY2FzdDxjb25zdCBFeHRBZGRyZXNzICo+KCZzTW9kZTJFeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfU0VDVVJJVFkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBHZW5lcmF0ZU5vbmNlKCpleHRBZGRyZXNzLCBmcmFtZUNvdW50ZXIsIHNlY3VyaXR5TGV2ZWwsIG5vbmNlKTsKKyAgICB0YWdMZW5ndGggPSBhRnJhbWUuR2V0Rm9vdGVyTGVuZ3RoKCkgLSBGcmFtZTo6a0Zjc1NpemU7CisKKyAgICBhZXNDY20uU2V0S2V5KG1hY0tleSwgMTYpOworICAgIGFlc0NjbS5Jbml0KGFGcmFtZS5HZXRIZWFkZXJMZW5ndGgoKSwgYUZyYW1lLkdldFBheWxvYWRMZW5ndGgoKSwgdGFnTGVuZ3RoLCBub25jZSwgc2l6ZW9mKG5vbmNlKSk7CisgICAgYWVzQ2NtLkhlYWRlcihhRnJhbWUuR2V0SGVhZGVyKCksIGFGcmFtZS5HZXRIZWFkZXJMZW5ndGgoKSk7CisgICAgYWVzQ2NtLlBheWxvYWQoYUZyYW1lLkdldFBheWxvYWQoKSwgYUZyYW1lLkdldFBheWxvYWQoKSwgYUZyYW1lLkdldFBheWxvYWRMZW5ndGgoKSwgZmFsc2UpOworICAgIGFlc0NjbS5GaW5hbGl6ZSh0YWcsICZ0YWdMZW5ndGgpOworCisgICAgVmVyaWZ5T3JFeGl0KG1lbWNtcCh0YWcsIGFGcmFtZS5HZXRGb290ZXIoKSwgdGFnTGVuZ3RoKSA9PSAwLCBlcnJvciA9IE9UX0VSUk9SX1NFQ1VSSVRZKTsKKworICAgIGlmICgoa2V5SWRNb2RlID09IEZyYW1lOjprS2V5SWRNb2RlMSkgJiYgKGFOZWlnaGJvci0+R2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpKQorICAgIHsKKyAgICAgICAgaWYgKGFOZWlnaGJvci0+R2V0S2V5U2VxdWVuY2UoKSAhPSBrZXlTZXF1ZW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgYU5laWdoYm9yLT5TZXRLZXlTZXF1ZW5jZShrZXlTZXF1ZW5jZSk7CisgICAgICAgICAgICBhTmVpZ2hib3ItPlNldE1sZUZyYW1lQ291bnRlcigwKTsKKyAgICAgICAgfQorCisgICAgICAgIGFOZWlnaGJvci0+U2V0TGlua0ZyYW1lQ291bnRlcihmcmFtZUNvdW50ZXIgKyAxKTsKKworICAgICAgICBpZiAoa2V5U2VxdWVuY2UgPiBrZXlNYW5hZ2VyLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBrZXlNYW5hZ2VyLlNldEN1cnJlbnRLZXlTZXF1ZW5jZShrZXlTZXF1ZW5jZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhRnJhbWUuU2V0U2VjdXJpdHlWYWxpZCh0cnVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCIlIW90RXJyb3IhIiwgYUVycm9yKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgaWYgKGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCkpCisgICAgeworICAgICAgICBhSW5zdGFuY2UtPm1MaW5rUmF3Lkludm9rZVJlY2VpdmVEb25lKGFGcmFtZSwgYUVycm9yKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIHsKKyAgICAgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuUmVjZWl2ZURvbmVUYXNrKHN0YXRpY19jYXN0PEZyYW1lICo+KGFGcmFtZSksIGFFcnJvcik7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIE1hYzo6UmVjZWl2ZURvbmVUYXNrKEZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgIEFkZHJlc3Mgc3JjYWRkcjsKKyAgICBBZGRyZXNzIGRzdGFkZHI7CisgICAgUGFuSWQgcGFuaWQ7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yOworICAgIG90TWFjV2hpdGVsaXN0RW50cnkgKndoaXRlbGlzdEVudHJ5OworICAgIGludDhfdCByc3NpOworICAgIGJvb2wgcmVjZWl2ZSA9IGZhbHNlOworICAgIHVpbnQ4X3QgY29tbWFuZElkOworICAgIGJvb2wgc2NoZWR1bGVOZXh0VHJhc21pc3Npb24gPSBmYWxzZTsKKyAgICBvdEVycm9yIGVycm9yID0gYUVycm9yOworCisgICAgbUNvdW50ZXJzLm1SeFRvdGFsKys7CisKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSk7CisgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0ZSQU1FX1JFQ0VJVkVEKTsKKworICAgIGFGcmFtZS0+U2V0U2VjdXJpdHlWYWxpZChmYWxzZSk7CisKKyAgICBpZiAobVBjYXBDYWxsYmFjaykKKyAgICB7CisgICAgICAgIGFGcmFtZS0+bURpZFRYID0gZmFsc2U7CisgICAgICAgIG1QY2FwQ2FsbGJhY2soYUZyYW1lLCBtUGNhcENhbGxiYWNrQ29udGV4dCk7CisgICAgfQorCisgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCBmcmFtZSBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFkIGFueSBjb250ZW50cyBvZgorICAgIC8vIHRoZSBidWZmZXIgcmVjZWl2ZWQgZnJvbSB0aGUgcmFkaW8uCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFGcmFtZS0+VmFsaWRhdGVQc2R1KCkpOworCisgICAgYUZyYW1lLT5HZXRTcmNBZGRyKHNyY2FkZHIpOworICAgIG5laWdoYm9yID0gR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXROZWlnaGJvcihzcmNhZGRyKTsKKworICAgIHN3aXRjaCAoc3JjYWRkci5tTGVuZ3RoKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBzaXplb2YoU2hvcnRBZGRyZXNzKToKKyAgICAgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBmcmFtZSBmcm9tIHNob3J0IGFkZHJlc3MgMHglMDR4Iiwgc3JjYWRkci5tU2hvcnRBZGRyZXNzKTsKKworICAgICAgICBpZiAobmVpZ2hib3IgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1VOS05PV05fTkVJR0hCT1IpOworICAgICAgICB9CisKKyAgICAgICAgc3JjYWRkci5tTGVuZ3RoID0gc2l6ZW9mKHNyY2FkZHIubUV4dEFkZHJlc3MpOworICAgICAgICBzcmNhZGRyLm1FeHRBZGRyZXNzID0gbmVpZ2hib3ItPkdldEV4dEFkZHJlc3MoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIHNpemVvZihFeHRBZGRyZXNzKToKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TT1VSQ0VfQUREUkVTUyk7CisgICAgfQorCisgICAgLy8gRHVwbGljYXRlIEFkZHJlc3MgUHJvdGVjdGlvbgorICAgIGlmIChtZW1jbXAoJnNyY2FkZHIubUV4dEFkZHJlc3MsICZtRXh0QWRkcmVzcywgc2l6ZW9mKHNyY2FkZHIubUV4dEFkZHJlc3MpKSA9PSAwKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU09VUkNFX0FERFJFU1MpOworICAgIH0KKworICAgIC8vIFNvdXJjZSBXaGl0ZWxpc3QgUHJvY2Vzc2luZworICAgIGlmIChzcmNhZGRyLm1MZW5ndGggIT0gMCAmJiBtV2hpdGVsaXN0LklzRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCh3aGl0ZWxpc3RFbnRyeSA9IG1XaGl0ZWxpc3QuRmluZChzcmNhZGRyLm1FeHRBZGRyZXNzKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9XSElURUxJU1RfRklMVEVSRUQpOworCisgICAgICAgIGlmIChtV2hpdGVsaXN0LkdldEZpeGVkUnNzaSgqd2hpdGVsaXN0RW50cnksIHJzc2kpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFGcmFtZS0+bVBvd2VyID0gcnNzaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNvdXJjZSBCbGFja2xpc3QgUHJvY2Vzc2luZworICAgIGlmIChzcmNhZGRyLm1MZW5ndGggIT0gMCAmJiBtQmxhY2tsaXN0LklzRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KChtQmxhY2tsaXN0LkZpbmQoc3JjYWRkci5tRXh0QWRkcmVzcykpID09IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQkxBQ0tMSVNUX0ZJTFRFUkVEKTsKKyAgICB9CisKKyAgICAvLyBEZXN0aW5hdGlvbiBBZGRyZXNzIEZpbHRlcmluZworICAgIGFGcmFtZS0+R2V0RHN0QWRkcihkc3RhZGRyKTsKKworICAgIHN3aXRjaCAoZHN0YWRkci5tTGVuZ3RoKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBzaXplb2YoU2hvcnRBZGRyZXNzKToKKyAgICAgICAgYUZyYW1lLT5HZXREc3RQYW5JZChwYW5pZCk7CisgICAgICAgIFZlcmlmeU9yRXhpdCgocGFuaWQgPT0ga1Nob3J0QWRkckJyb2FkY2FzdCB8fCBwYW5pZCA9PSBtUGFuSWQpICYmCisgICAgICAgICAgICAgICAgICAgICAoKG1SeE9uV2hlbklkbGUgJiYgZHN0YWRkci5tU2hvcnRBZGRyZXNzID09IGtTaG9ydEFkZHJCcm9hZGNhc3QpIHx8CisgICAgICAgICAgICAgICAgICAgICAgZHN0YWRkci5tU2hvcnRBZGRyZXNzID09IG1TaG9ydEFkZHJlc3MpLCBlcnJvciA9IE9UX0VSUk9SX0RFU1RJTkFUSU9OX0FERFJFU1NfRklMVEVSRUQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugc2l6ZW9mKEV4dEFkZHJlc3MpOgorICAgICAgICBhRnJhbWUtPkdldERzdFBhbklkKHBhbmlkKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHBhbmlkID09IG1QYW5JZCAmJgorICAgICAgICAgICAgICAgICAgICAgbWVtY21wKCZkc3RhZGRyLm1FeHRBZGRyZXNzLCAmbUV4dEFkZHJlc3MsIHNpemVvZihkc3RhZGRyLm1FeHRBZGRyZXNzKSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfREVTVElOQVRJT05fQUREUkVTU19GSUxURVJFRCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIEluY3JlbWVudCBjb3VudGVycworICAgIGlmIChkc3RhZGRyLm1TaG9ydEFkZHJlc3MgPT0ga1Nob3J0QWRkckJyb2FkY2FzdCkKKyAgICB7CisgICAgICAgIC8vIEJyb2FkY2FzdCBmcmFtZQorICAgICAgICBtQ291bnRlcnMubVJ4QnJvYWRjYXN0Kys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFVuaWNhc3QgZnJhbWUKKyAgICAgICAgbUNvdW50ZXJzLm1SeFVuaWNhc3QrKzsKKyAgICB9CisKKyAgICAvLyBTZWN1cml0eSBQcm9jZXNzaW5nCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFByb2Nlc3NSZWNlaXZlU2VjdXJpdHkoKmFGcmFtZSwgc3JjYWRkciwgbmVpZ2hib3IpKTsKKworICAgIGlmIChuZWlnaGJvciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmVpZ2hib3ItPkdldExpbmtJbmZvKCkuQWRkUnNzKEdldE5vaXNlRmxvb3IoKSwgYUZyYW1lLT5tUG93ZXIpOworCisgICAgICAgIGlmIChhRnJhbWUtPkdldFNlY3VyaXR5RW5hYmxlZCgpID09IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobmVpZ2hib3ItPkdldFN0YXRlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVWYWxpZDoKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlUmVzdG9yZWQ6CisgICAgICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVDaGlsZFVwZGF0ZVJlcXVlc3Q6CisKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGFjY2VwdCBhICJNQUMgRGF0YSBSZXF1ZXN0IiBmcmFtZSBmcm9tIGEgY2hpbGQgYmVpbmcgcmVzdG9yZWQuCisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZS0+R2V0VHlwZSgpID09IEZyYW1lOjprRmNmRnJhbWVNYWNDbWQsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZS0+R2V0Q29tbWFuZElkKGNvbW1hbmRJZCkgPT0gT1RfRVJST1JfTk9ORSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoY29tbWFuZElkID09IEZyYW1lOjprTWFjQ21kRGF0YVJlcXVlc3QsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfVU5LTk9XTl9ORUlHSEJPUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKG1PcGVyYXRpb24pCisgICAgeworICAgIGNhc2Uga09wZXJhdGlvbkFjdGl2ZVNjYW46CisgICAgICAgIGlmIChhRnJhbWUtPkdldFR5cGUoKSA9PSBGcmFtZTo6a0ZjZkZyYW1lQmVhY29uKQorICAgICAgICB7CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4QmVhY29uKys7CisgICAgICAgICAgICBtQWN0aXZlU2NhbkhhbmRsZXIobVNjYW5Db250ZXh0LCBhRnJhbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbUNvdW50ZXJzLm1SeE90aGVyKys7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChkc3RhZGRyLm1MZW5ndGggIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbVdhaXRpbmdGb3JEYXRhID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICghbVJ4T25XaGVuSWRsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVjZWl2ZVRpbWVyLlN0b3AoKTsKKyAgICAgICAgICAgICAgICBzY2hlZHVsZU5leHRUcmFzbWlzc2lvbiA9IHRydWU7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBWV9BV0FLRV9CRVRXRUVOX0ZSQUdNRU5UUworICAgICAgICAgICAgICAgIG1EZWxheVNsZWVwID0gYUZyYW1lLT5HZXRGcmFtZVBlbmRpbmcoKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChhRnJhbWUtPkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIEZyYW1lOjprRmNmRnJhbWVNYWNDbWQ6CisgICAgICAgICAgICBpZiAoSGFuZGxlTWFjQ29tbWFuZCgqYUZyYW1lKSA9PSBPVF9FUlJPUl9EUk9QKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVjZWl2ZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEZyYW1lOjprRmNmRnJhbWVCZWFjb246CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4QmVhY29uKys7CisgICAgICAgICAgICByZWNlaXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRnJhbWU6OmtGY2ZGcmFtZURhdGE6CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4RGF0YSsrOworICAgICAgICAgICAgcmVjZWl2ZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbUNvdW50ZXJzLm1SeE90aGVyKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZWNlaXZlKQorICAgICAgICB7CisgICAgICAgICAgICBvdER1bXBEZWJnTWFjKEdldEluc3RhbmNlKCksICJSWCIsIGFGcmFtZS0+R2V0SGVhZGVyKCksIGFGcmFtZS0+R2V0TGVuZ3RoKCkpOworCisgICAgICAgICAgICBmb3IgKFJlY2VpdmVyICpyZWNlaXZlciA9IG1SZWNlaXZlSGVhZDsgcmVjZWl2ZXI7IHJlY2VpdmVyID0gcmVjZWl2ZXItPm1OZXh0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlY2VpdmVyLT5IYW5kbGVSZWNlaXZlZEZyYW1lKCphRnJhbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKHNjaGVkdWxlTmV4dFRyYXNtaXNzaW9uKQorICAgIHsKKyAgICAgICAgU3RhcnRPcGVyYXRpb24oKTsKKyAgICB9CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGlmIChhRnJhbWUgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJGcmFtZSByeCBmYWlsZWQsIGVycm9yOiVzIiwgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGVycm9yKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyIHN0cmluZ0J1ZmZlcltGcmFtZTo6a0luZm9TdHJpbmdTaXplXTsKKworICAgICAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJGcmFtZSByeCBmYWlsZWQsIGVycm9yOiVzLCAlcyIsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhlcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgYUZyYW1lLT5Ub0luZm9TdHJpbmcoc3RyaW5nQnVmZmVyLCBzaXplb2Yoc3RyaW5nQnVmZmVyKSkpOworCisgICAgICAgICAgICBPVF9VTlVTRURfVkFSSUFCTEUoc3RyaW5nQnVmZmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZXJyb3IpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9TRUNVUklUWToKKyAgICAgICAgICAgIG1Db3VudGVycy5tUnhFcnJTZWMrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1RfRVJST1JfRkNTOgorICAgICAgICAgICAgbUNvdW50ZXJzLm1SeEVyckZjcysrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9OT19GUkFNRV9SRUNFSVZFRDoKKyAgICAgICAgICAgIG1Db3VudGVycy5tUnhFcnJOb0ZyYW1lKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9UX0VSUk9SX1VOS05PV05fTkVJR0hCT1I6CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4RXJyVW5rbm93bk5laWdoYm9yKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9UX0VSUk9SX0lOVkFMSURfU09VUkNFX0FERFJFU1M6CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4RXJySW52YWxpZFNyY0FkZHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1RfRVJST1JfV0hJVEVMSVNUX0ZJTFRFUkVEOgorICAgICAgICAgICAgbUNvdW50ZXJzLm1SeFdoaXRlbGlzdEZpbHRlcmVkKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9UX0VSUk9SX0RFU1RJTkFUSU9OX0FERFJFU1NfRklMVEVSRUQ6CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4RGVzdEFkZHJGaWx0ZXJlZCsrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9EVVBMSUNBVEVEOgorICAgICAgICAgICAgbUNvdW50ZXJzLm1SeER1cGxpY2F0ZWQrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4RXJyT3RoZXIrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitvdEVycm9yIE1hYzo6SGFuZGxlTWFjQ29tbWFuZChGcmFtZSAmYUZyYW1lKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgY29tbWFuZElkOworCisgICAgYUZyYW1lLkdldENvbW1hbmRJZChjb21tYW5kSWQpOworCisgICAgc3dpdGNoIChjb21tYW5kSWQpCisgICAgeworICAgIGNhc2UgRnJhbWU6OmtNYWNDbWRCZWFjb25SZXF1ZXN0OgorICAgICAgICBtQ291bnRlcnMubVJ4QmVhY29uUmVxdWVzdCsrOworICAgICAgICBvdExvZ0luZm9NYWMoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIEJlYWNvbiBSZXF1ZXN0Iik7CisKKyAgICAgICAgaWYgKChtQmVhY29uc0VuYWJsZWQpCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0JFQUNPTl9SU1BfSUZfSk9JTkFCTEUKKyAgICAgICAgICAgICYmIChJc0JlYWNvbkpvaW5hYmxlKCkpCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0JFQUNPTl9SU1BfSUZfSk9JTkFCTEUKKyAgICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgICBtVHJhbnNtaXRCZWFjb24gPSB0cnVlOworICAgICAgICAgICAgU3RhcnRPcGVyYXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIGNhc2UgRnJhbWU6OmtNYWNDbWREYXRhUmVxdWVzdDoKKyAgICAgICAgbUNvdW50ZXJzLm1SeERhdGFQb2xsKys7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgbUNvdW50ZXJzLm1SeE90aGVyKys7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWFjOjpTZXRQY2FwQ2FsbGJhY2sob3RMaW5rUGNhcENhbGxiYWNrIGFQY2FwQ2FsbGJhY2ssIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpCit7CisgICAgbVBjYXBDYWxsYmFjayA9IGFQY2FwQ2FsbGJhY2s7CisgICAgbVBjYXBDYWxsYmFja0NvbnRleHQgPSBhQ2FsbGJhY2tDb250ZXh0OworfQorCitib29sIE1hYzo6SXNQcm9taXNjdW91cyh2b2lkKQoreworICAgIHJldHVybiBvdFBsYXRSYWRpb0dldFByb21pc2N1b3VzKEdldEluc3RhbmNlKCkpOworfQorCit2b2lkIE1hYzo6U2V0UHJvbWlzY3VvdXMoYm9vbCBhUHJvbWlzY3VvdXMpCit7CisgICAgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhHZXRJbnN0YW5jZSgpLCBhUHJvbWlzY3VvdXMpOworICAgIFN0YXJ0T3BlcmF0aW9uKCk7Cit9CisKK2Jvb2wgTWFjOjpSYWRpb1N1cHBvcnRzQ3NtYUJhY2tvZmYodm9pZCkKK3sKKyAgICAvKiBDaGVjayBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgICAqICAgMSkgUmFkaW8gcHJvdmlkZXMgdGhlIENTTUEgYmFja29mZiBjYXBhYmlsaXR5IChpLmUuLCBgT1RfUkFESU9fQ0FQU19DU01BX0JBQ0tPRkZgIGJpdCBpcyBzZXQpIG9yOworICAgICAqICAgMikgSXQgcHJvdmlkZXMgYE9UX1JBRElPX0NBUFNfVFJBTlNNSVRfUkVUUklFU2Agd2hpY2ggaW5kaWNhdGVzIHN1cHBvcnQgZm9yIE1BQyByZXRyaWVzIGFsb25nIHdpdGggQ1NNQSBiYWNrb2ZmLgorICAgICAqLworICAgIHJldHVybiAob3RQbGF0UmFkaW9HZXRDYXBzKEdldEluc3RhbmNlKCkpICYgKE9UX1JBRElPX0NBUFNfVFJBTlNNSVRfUkVUUklFUyB8IE9UX1JBRElPX0NBUFNfQ1NNQV9CQUNLT0ZGKSkgIT0gMDsKK30KKworYm9vbCBNYWM6OlJhZGlvU3VwcG9ydHNSZXRyaWVzKHZvaWQpCit7CisgICAgcmV0dXJuIChvdFBsYXRSYWRpb0dldENhcHMoR2V0SW5zdGFuY2UoKSkgJiBPVF9SQURJT19DQVBTX1RSQU5TTUlUX1JFVFJJRVMpICE9IDA7Cit9CisKK3ZvaWQgTWFjOjpGaWxsTWFjQ291bnRlcnNUbHYoTmV0d29ya0RpYWdub3N0aWM6Ok1hY0NvdW50ZXJzVGx2ICZhTWFjQ291bnRlcnMpIGNvbnN0Cit7CisgICAgYU1hY0NvdW50ZXJzLlNldElmSW5Vbmtub3duUHJvdG9zKG1Db3VudGVycy5tUnhPdGhlcik7CisgICAgYU1hY0NvdW50ZXJzLlNldElmSW5FcnJvcnMobUNvdW50ZXJzLm1SeEVyck5vRnJhbWUgKyBtQ291bnRlcnMubVJ4RXJyVW5rbm93bk5laWdoYm9yICsgbUNvdW50ZXJzLm1SeEVyckludmFsaWRTcmNBZGRyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ291bnRlcnMubVJ4RXJyU2VjICsgbUNvdW50ZXJzLm1SeEVyckZjcyArIG1Db3VudGVycy5tUnhFcnJPdGhlcik7CisgICAgYU1hY0NvdW50ZXJzLlNldElmT3V0RXJyb3JzKG1Db3VudGVycy5tVHhFcnJDY2EpOworICAgIGFNYWNDb3VudGVycy5TZXRJZkluVWNhc3RQa3RzKG1Db3VudGVycy5tUnhVbmljYXN0KTsKKyAgICBhTWFjQ291bnRlcnMuU2V0SWZJbkJyb2FkY2FzdFBrdHMobUNvdW50ZXJzLm1SeEJyb2FkY2FzdCk7CisgICAgYU1hY0NvdW50ZXJzLlNldElmSW5EaXNjYXJkcyhtQ291bnRlcnMubVJ4V2hpdGVsaXN0RmlsdGVyZWQgKyBtQ291bnRlcnMubVJ4RGVzdEFkZHJGaWx0ZXJlZCArIG1Db3VudGVycy5tUnhEdXBsaWNhdGVkKTsKKyAgICBhTWFjQ291bnRlcnMuU2V0SWZPdXRVY2FzdFBrdHMobUNvdW50ZXJzLm1UeFVuaWNhc3QpOworICAgIGFNYWNDb3VudGVycy5TZXRJZk91dEJyb2FkY2FzdFBrdHMobUNvdW50ZXJzLm1UeEJyb2FkY2FzdCk7CisgICAgYU1hY0NvdW50ZXJzLlNldElmT3V0RGlzY2FyZHMoMCk7Cit9CisKK3ZvaWQgTWFjOjpSZXNldENvdW50ZXJzKHZvaWQpCit7CisgICAgbWVtc2V0KCZtQ291bnRlcnMsIDAsIHNpemVvZihtQ291bnRlcnMpKTsKK30KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9CRUFDT05fUlNQX0lGX0pPSU5BQkxFCitib29sIE1hYzo6SXNCZWFjb25Kb2luYWJsZSh2b2lkKQoreworICAgIHVpbnQ4X3QgbnVtVW5zZWN1cmVQb3J0czsKKyAgICBib29sIGpvaW5hYmxlID0gZmFsc2U7CisKKyAgICBHZXROZXRpZigpLkdldElwNkZpbHRlcigpLkdldFVuc2VjdXJlUG9ydHMobnVtVW5zZWN1cmVQb3J0cyk7CisKKyAgICBpZiAobnVtVW5zZWN1cmVQb3J0cykKKyAgICB7CisgICAgICAgIGpvaW5hYmxlID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgam9pbmFibGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gam9pbmFibGU7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0JFQUNPTl9SU1BfSUZfSk9JTkFCTEUKKworTWFjICZNYWM6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIE1hYyAmbWFjID0gKnN0YXRpY19jYXN0PE1hYyAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBNYWMgJm1hYyA9IG90R2V0SW5zdGFuY2UoKS0+bVRocmVhZE5ldGlmLkdldE1hYygpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gbWFjOworfQorCit9ICAvLyBuYW1lc3BhY2UgTWFjCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWMuaHBwIGIvc3JjL2NvcmUvbWFjL21hYy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3MTNjYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21hYy9tYWMuaHBwCkBAIC0wLDAgKzEsNzY5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIElFRUUgODAyLjE1LjQgTUFDLgorICovCisKKyNpZm5kZWYgTUFDX0hQUF8KKyNkZWZpbmUgTUFDX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vY29udGV4dC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90YXNrbGV0LmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfYmxhY2tsaXN0LmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX3doaXRlbGlzdC5ocHAiCisjaW5jbHVkZSAidGhyZWFkL2tleV9tYW5hZ2VyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbmV0d29ya19kaWFnbm9zdGljX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90b3BvbG9neS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK25hbWVzcGFjZSBNbGUgeyBjbGFzcyBNbGVSb3V0ZXI7IH0KKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW1hYworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIElFRUUgODAyLjE1LjQgTUFDCisgKgorICogQHsKKyAqCisgKi8KKworbmFtZXNwYWNlIE1hYyB7CisKKy8qKgorICogUHJvdG9jb2wgcGFyYW1ldGVycyBhbmQgY29uc3RhbnRzLgorICoKKyAqLworZW51bQoreworICAgIGtNaW5CRSAgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICAgICAgICAgICAgLy8vPCBtYWNNaW5CRSAoSUVFRSA4MDIuMTUuNC0yMDA2KQorICAgIGtNYXhCRSAgICAgICAgICAgICAgICA9IDUsICAgICAgICAgICAgICAgICAgICAgLy8vPCBtYWNNYXhCRSAoSUVFRSA4MDIuMTUuNC0yMDA2KQorICAgIGtNYXhDU01BQmFja29mZnMgICAgICA9IDQsICAgICAgICAgICAgICAgICAgICAgLy8vPCBtYWNNYXhDU01BQmFja29mZnMgKElFRUUgODAyLjE1LjQtMjAwNikKKyAgICBrVW5pdEJhY2tvZmZQZXJpb2QgICAgPSAyMCwgICAgICAgICAgICAgICAgICAgIC8vLzwgTnVtYmVyIG9mIHN5bWJvbHMgKElFRUUgODAyLjE1LjQtMjAwNikKKworICAgIGtNaW5CYWNrb2ZmICAgICAgICAgICA9IDEsICAgICAgICAgICAgICAgICAgICAgLy8vPCBNaW5pbXVtIGJhY2tvZmYgKG1pbGxpc2Vjb25kcykuCisKKyAgICBrQWNrVGltZW91dCAgICAgICAgICAgPSAxNiwgICAgICAgICAgICAgICAgICAgIC8vLzwgVGltZW91dCBmb3Igd2FpdGluZyBvbiBhbiBBQ0sgKG1pbGxpc2Vjb25kcykuCisgICAga0RhdGFQb2xsVGltZW91dCAgICAgID0gMTAwLCAgICAgICAgICAgICAgICAgICAvLy88IFRpbWVvdXQgZm9yIHJlY2VpdmluZyBEYXRhIEZyYW1lIChtaWxsaXNlY29uZHMpLgorICAgIGtTbGVlcERlbGF5ICAgICAgICAgICA9IDMwMCwgICAgICAgICAgICAgICAgICAgLy8vPCBNYXggc2xlZXAgZGVsYXkgd2hlbiBmcmFtZSBpcyBwZW5kaW5nIChtaWxsaXNlY29uZHMpLgorICAgIGtOb25jZVNpemUgICAgICAgICAgICA9IDEzLCAgICAgICAgICAgICAgICAgICAgLy8vPCBTaXplIG9mIElFRUUgODAyLjE1LjQgTm9uY2UgKGJ5dGVzKS4KKworICAgIGtTY2FuQ2hhbm5lbHNBbGwgICAgICA9IE9UX0NIQU5ORUxfQUxMLCAgICAgICAgLy8vPCBBbGwgY2hhbm5lbHMuCisgICAga1NjYW5EdXJhdGlvbkRlZmF1bHQgID0gMzAwLCAgICAgICAgICAgICAgICAgICAvLy88IERlZmF1bHQgaW50ZXJ2YWwgYmV0d2VlbiBjaGFubmVscyAobWlsbGlzZWNvbmRzKS4KKworICAgIC8qKgorICAgICAqIE1heGltdW0gbnVtYmVyIG9mIE1BQyBsYXllciB0eCBhdHRlbXB0cyBmb3IgYW4gb3V0Ym91bmQgZGlyZWN0IGZyYW1lLgorICAgICAqCisgICAgICovCisgICAga0RpcmVjdEZyYW1lTWFjVHhBdHRlbXB0cyAgID0gT1BFTlRIUkVBRF9DT05GSUdfTUFYX1RYX0FUVEVNUFRTX0RJUkVDVCwKKworICAgIC8qKgorICAgICAqIE1heGltdW0gbnVtYmVyIG9mIE1BQyBsYXllciB0eCBhdHRlbXB0cyBmb3IgYW4gb3V0Ym91bmQgaW5kaXJlY3QgZnJhbWUgKGZvciBhIHNsZWVweSBjaGlsZCkgYWZ0ZXIgcmVjZWl2aW5nCisgICAgICogYSBkYXRhIHJlcXVlc3QgY29tbWFuZCAoZGF0YSBwb2xsKSBmcm9tIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqLworICAgIGtJbmRpcmVjdEZyYW1lTWFjVHhBdHRlbXB0cyA9IE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19JTkRJUkVDVF9QRVJfUE9MTCwKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgTUFDIHJlY2VpdmVyIGNsaWVudC4KKyAqCisgKi8KK2NsYXNzIFJlY2VpdmVyOiBwdWJsaWMgQ29udGV4dAoreworICAgIGZyaWVuZCBjbGFzcyBNYWM7CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gYSBNQUMgZnJhbWUgaXMgcmVjZWl2ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmVjZWl2ZXIgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyByZWNlaXZlciBjbGllbnQgb2JqZWN0LgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICBBIHJlZmVyZW5jZSB0byB0aGUgTUFDIGZyYW1lLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqUmVjZWl2ZUZyYW1lSGFuZGxlcikoUmVjZWl2ZXIgJmFSZWNlaXZlciwgRnJhbWUgJmFGcmFtZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIG9uIGEgZGF0YSByZXF1ZXN0IGNvbW1hbmQgKGRhdGEgcG9sbCkgdGltZW91dCwgaS5lLiwgd2hlbiB0aGUgYWNrIGluIHJlc3BvbnNlIHRvCisgICAgICogYSBkYXRhIHJlcXVlc3QgY29tbWFuZCBpbmRpY2F0ZWQgYSBmcmFtZSBpcyBwZW5kaW5nLCBidXQgbm8gZnJhbWUgd2FzIHJlY2VpdmVkIGFmdGVyIGBrRGF0YVBvbGxUaW1lb3V0YCBpbnRlcnZhbC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZWNlaXZlciAgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyByZWNlaXZlciBjbGllbnQgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqRGF0YVBvbGxUaW1lb3V0SGFuZGxlcikoUmVjZWl2ZXIgJmFSZWNlaXZlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBNQUMgcmVjZWl2ZXIgY2xpZW50LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlY2VpdmVGcmFtZUhhbmRsZXIgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uIE1BQyBmcmFtZSByZWNlcHRpb24uCisgICAgICogQHBhcmFtW2luXSAgYVBvbGxUaW1lb3V0SGFuZGxlciAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBvbiBkYXRhIHBvbGwgdGltZW91dCAobWF5IGJlIHNldCB0byBOVUxMKS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICovCisgICAgUmVjZWl2ZXIoUmVjZWl2ZUZyYW1lSGFuZGxlciBhUmVjZWl2ZUZyYW1lSGFuZGxlciwgRGF0YVBvbGxUaW1lb3V0SGFuZGxlciBhUG9sbFRpbWVvdXRIYW5kbGVyLCB2b2lkICphQ29udGV4dCk6CisgICAgICAgIENvbnRleHQoYUNvbnRleHQpLAorICAgICAgICBtUmVjZWl2ZUZyYW1lSGFuZGxlcihhUmVjZWl2ZUZyYW1lSGFuZGxlciksCisgICAgICAgIG1Qb2xsVGltZW91dEhhbmRsZXIoYVBvbGxUaW1lb3V0SGFuZGxlciksCisgICAgICAgIG1OZXh0KE5VTEwpIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBIYW5kbGVSZWNlaXZlZEZyYW1lKEZyYW1lICZmcmFtZSkgeyBtUmVjZWl2ZUZyYW1lSGFuZGxlcigqdGhpcywgZnJhbWUpOyB9CisKKyAgICB2b2lkIEhhbmRsZURhdGFQb2xsVGltZW91dCh2b2lkKSB7CisgICAgICAgIGlmIChtUG9sbFRpbWVvdXRIYW5kbGVyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIG1Qb2xsVGltZW91dEhhbmRsZXIoKnRoaXMpOworICAgICAgICB9CisgICAgfQorCisgICAgUmVjZWl2ZUZyYW1lSGFuZGxlciBtUmVjZWl2ZUZyYW1lSGFuZGxlcjsKKyAgICBEYXRhUG9sbFRpbWVvdXRIYW5kbGVyIG1Qb2xsVGltZW91dEhhbmRsZXI7CisgICAgUmVjZWl2ZXIgKm1OZXh0OworfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBNQUMgc2VuZGVyIGNsaWVudC4KKyAqCisgKi8KK2NsYXNzIFNlbmRlcjogcHVibGljIENvbnRleHQKK3sKKyAgICBmcmllbmQgY2xhc3MgTWFjOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIHRoZSBNQUMgaXMgYWJvdXQgdG8gdHJhbnNtaXQgdGhlIGZyYW1lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlbmRlciAgIEEgcmVmZXJlbmNlIHRvIHRoZSBNQUMgc2VuZGVyIGNsaWVudCBvYmplY3QuCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBNQUMgZnJhbWUgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiBvdEVycm9yKCpGcmFtZVJlcXVlc3RIYW5kbGVyKShTZW5kZXIgJmFTZW5kZXIsIEZyYW1lICZhRnJhbWUpOworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIHRoZSBNQUMgaXMgZG9uZSBzZW5kaW5nIHRoZSBmcmFtZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZW5kZXIgICBBIHJlZmVyZW5jZSB0byB0aGUgTUFDIHNlbmRlciBjbGllbnQgb2JqZWN0LgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICBBIHJlZmVyZW5jZSB0byB0aGUgTUFDIGZyYW1lIGJ1ZmZlciB0aGF0IHdhcyBzZW50LgorICAgICAqIEBwYXJhbVtpbl0gIGFFcnJvciAgICBUaGUgc3RhdHVzIG9mIHRoZSBsYXN0IE1TRFUgdHJhbnNtaXNzaW9uLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqU2VudEZyYW1lSGFuZGxlcikoU2VuZGVyICZhU2VuZGVyLCBGcmFtZSAmYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBNQUMgc2VuZGVyIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZVJlcXVlc3RIYW5kbGVyICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGFib3V0IHRvIHNlbmQgYSBNQUMgZnJhbWUuCisgICAgICogQHBhcmFtW2luXSAgYVNlbnRGcmFtZUhhbmRsZXIgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gZG9uZSBzZW5kaW5nIHRoZSBmcmFtZS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICovCisgICAgU2VuZGVyKEZyYW1lUmVxdWVzdEhhbmRsZXIgYUZyYW1lUmVxdWVzdEhhbmRsZXIsIFNlbnRGcmFtZUhhbmRsZXIgYVNlbnRGcmFtZUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KToKKyAgICAgICAgQ29udGV4dChhQ29udGV4dCksCisgICAgICAgIG1GcmFtZVJlcXVlc3RIYW5kbGVyKGFGcmFtZVJlcXVlc3RIYW5kbGVyKSwKKyAgICAgICAgbVNlbnRGcmFtZUhhbmRsZXIoYVNlbnRGcmFtZUhhbmRsZXIpLAorICAgICAgICBtTmV4dChOVUxMKSB7CisgICAgfQorCitwcml2YXRlOgorICAgIG90RXJyb3IgSGFuZGxlRnJhbWVSZXF1ZXN0KEZyYW1lICZmcmFtZSkgeyByZXR1cm4gbUZyYW1lUmVxdWVzdEhhbmRsZXIoKnRoaXMsIGZyYW1lKTsgfQorICAgIHZvaWQgSGFuZGxlU2VudEZyYW1lKEZyYW1lICZmcmFtZSwgb3RFcnJvciBlcnJvcikgeyBtU2VudEZyYW1lSGFuZGxlcigqdGhpcywgZnJhbWUsIGVycm9yKTsgfQorCisgICAgRnJhbWVSZXF1ZXN0SGFuZGxlciBtRnJhbWVSZXF1ZXN0SGFuZGxlcjsKKyAgICBTZW50RnJhbWVIYW5kbGVyIG1TZW50RnJhbWVIYW5kbGVyOworICAgIFNlbmRlciAqbU5leHQ7Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgSUVFRSA4MDIuMTUuNCBNQUMuCisgKgorICovCitjbGFzcyBNYWM6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBNQUMgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgdXNpbmcgdGhpcyBNQUMuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBNYWMoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIG9uIHJlY2VpdmluZyBhbiBJRUVFIDgwMi4xNS40IEJlYWNvbiBkdXJpbmcgYW4gQWN0aXZlIFNjYW4uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtW2luXSAgYUJlYWNvbkZyYW1lICAgQSBwb2ludGVyIHRvIHRoZSBCZWFjb24gZnJhbWUuCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIHZvaWQgKCpBY3RpdmVTY2FuSGFuZGxlcikodm9pZCAqYUNvbnRleHQsIEZyYW1lICphQmVhY29uRnJhbWUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RhcnRzIGFuIElFRUUgODAyLjE1LjQgQWN0aXZlIFNjYW4uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2NhbkNoYW5uZWxzICBBIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyB3aGljaCBjaGFubmVscyB0byBzY2FuLgorICAgICAqIEBwYXJhbVtpbl0gIGFTY2FuRHVyYXRpb24gIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBzcGVuZCBzY2FubmluZyBlYWNoIGNoYW5uZWwuCisgICAgICogQHBhcmFtW2luXSAgYUhhbmRsZXIgICAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb24gcmVjZWl2aW5nIGFuIElFRUUgODAyLjE1LjQgQmVhY29uLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWN0aXZlU2Nhbih1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLCBBY3RpdmVTY2FuSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29udmVydHMgYSBiZWFjb24gZnJhbWUgdG8gYW4gYWN0aXZlIHNjYW4gcmVzdWx0IG9mIHR5cGUgYG90QWN0aXZlU2NhblJlc3VsdGAuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQmVhY29uRnJhbWUgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGEgYmVhY29uIGZyYW1lLgorICAgICAqIEBwYXJhbVtvdXRdIGFSZXN1bHQgICAgICAgICAgICAgICAgICBBIHJlZmVyZW5jZSB0byBgb3RBY3RpdmVTY2FuUmVzdWx0YCB3aGVyZSB0aGUgcmVzdWx0IGlzIHN0b3JlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBjb252ZXJ0ZWQgdGhlIGJlYWNvbiBpbnRvIGFjdGl2ZSBzY2FuIHJlc3VsdC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgICBUaGUgQGEgYUJlYWNvbkZyYW1lIHdhcyBOVUxMLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfUEFSU0UgICAgICAgICAgIEZhaWxlZCBwYXJzaW5nIHRoZSBiZWFjb24gZnJhbWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIENvbnZlcnRCZWFjb25Ub0FjdGl2ZVNjYW5SZXN1bHQoRnJhbWUgKmFCZWFjb25GcmFtZSwgb3RBY3RpdmVTY2FuUmVzdWx0ICZhUmVzdWx0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgZHVyaW5nIGFuICJFbmVyZ3kgU2NhbiIgd2hlbiB0aGUgcmVzdWx0IGZvciBhIGNoYW5uZWwgaXMgcmVhZHkgb3IgdGhlIHNjYW4KKyAgICAgKiBjb21wbGV0ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXN1bHQgICBBIHZhbGlkIHBvaW50ZXIgdG8gdGhlIGVuZXJneSBzY2FuIHJlc3VsdCBpbmZvcm1hdGlvbiBvciBOVUxMIHdoZW4gdGhlIGVuZXJneSBzY2FuIGNvbXBsZXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHR5cGVkZWYgdm9pZCAoKkVuZXJneVNjYW5IYW5kbGVyKSh2b2lkICphQ29udGV4dCwgb3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyBhbiBJRUVFIDgwMi4xNS40IEVuZXJneSBTY2FuLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNjYW5DaGFubmVscyAgICAgQSBiaXQgdmVjdG9yIGluZGljYXRpbmcgb24gd2hpY2ggY2hhbm5lbHMgdG8gcGVyZm9ybSBlbmVyZ3kgc2Nhbi4KKyAgICAgKiBAcGFyYW1baW5dICBhU2NhbkR1cmF0aW9uICAgICBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc3BlbmQgc2Nhbm5pbmcgZWFjaCBjaGFubmVsLgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCB0byBwYXNzIG9uIHNjYW4gcmVzdWx0IG9yIGluZGljYXRlIHNjYW4gY29tcGxldGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIEFjY2VwdGVkIHRoZSBFbmVyZ3kgU2NhbiByZXF1ZXN0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQlVTWSAgQ291bGQgbm90IHN0YXJ0IHRoZSBlbmVyZ3kgc2Nhbi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRW5lcmd5U2Nhbih1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLCBFbmVyZ3lTY2FuSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHRoZSBlbmVyZ3kgc2NhbiBmb3IgdGhlIGN1cnJlbnQgY2hhbm5lbCBpcyBjb21wbGV0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFbmVyZ3lTY2FuTWF4UnNzaSAgVGhlIG1heGltdW0gUlNTSSBlbmNvdW50ZXJlZCBvbiB0aGUgc2Nhbm5lZCBjaGFubmVsLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBFbmVyZ3lTY2FuRG9uZShpbnQ4X3QgYUVuZXJneVNjYW5NYXhSc3NpKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBJRUVFIDgwMi4xNS40IEJlYWNvbiB0cmFuc21pc3Npb25zIGFyZSBlbmFibGVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFIGlmIElFRUUgODAyLjE1LjQgQmVhY29uIHRyYW5zbWlzc2lvbnMgYXJlIGVuYWJsZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNCZWFjb25FbmFibGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CZWFjb25zRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5hYmxlcy9kaXNhYmxlcyBJRUVFIDgwMi4xNS40IEJlYWNvbiB0cmFuc21pc3Npb25zLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVuYWJsZWQgIFRSVUUgdG8gZW5hYmxlIElFRUUgODAyLjE1LjQgQmVhY29uIHRyYW5zbWlzc2lvbnMsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QmVhY29uRW5hYmxlZChib29sIGFFbmFibGVkKSB7IG1CZWFjb25zRW5hYmxlZCA9IGFFbmFibGVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgcngtb24td2hlbi1pZGxlIGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiByeC1vbi13aGVuLWlkbGUgaXMgZW5hYmxlZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiByeC1vbi13aGVuLWlkbGUgaXMgbm90IGVuYWJsZWQuCisgICAgICovCisgICAgYm9vbCBHZXRSeE9uV2hlbklkbGUodm9pZCkgY29uc3QgeyByZXR1cm4gbVJ4T25XaGVuSWRsZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcngtb24td2hlbi1pZGxlIG1vZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUnhPbldoZW5JZGxlICBUaGUgcngtb24td2hlbi1pZGxlIG1vZGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJ4T25XaGVuSWRsZShib29sIGFSeE9uV2hlbklkbGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVnaXN0ZXJzIGEgbmV3IE1BQyByZWNlaXZlciBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmVjZWl2ZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBNQUMgcmVjZWl2ZXIgY2xpZW50LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB0aGUgcmVjZWl2ZXIuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICBUaGUgcmVjZWl2ZXIgd2FzIGFscmVhZHkgcmVnaXN0ZXJlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVnaXN0ZXJSZWNlaXZlcihSZWNlaXZlciAmYVJlY2VpdmVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlZ2lzdGVycyBhIG5ldyBNQUMgc2VuZGVyIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZW5kZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBNQUMgc2VuZGVyIGNsaWVudC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgdGhlIHNlbmRlci4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgIFRoZSBzZW5kZXIgd2FzIGFscmVhZHkgcmVnaXN0ZXJlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZEZyYW1lUmVxdWVzdChTZW5kZXIgJmFTZW5kZXIpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgcmFuZG9tIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhRXh0QWRkcmVzcyAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBnZW5lcmF0ZWQgRXh0ZW5kZWQgQWRkcmVzcyBpcyBwbGFjZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEdlbmVyYXRlRXh0QWRkcmVzcyhFeHRBZGRyZXNzICphRXh0QWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBFeHRBZGRyZXNzICpHZXRFeHRBZGRyZXNzKHZvaWQpIGNvbnN0IHsgcmV0dXJuICZtRXh0QWRkcmVzczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RXh0QWRkcmVzcyhjb25zdCBFeHRBZGRyZXNzICZhRXh0QWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBIYXNoIE1hYyBBZGRyZXNzLgorICAgICAqCisgICAgICogSGFzaCBNYWMgQWRkcmVzcyBpcyB0aGUgZmlyc3QgNjQgYml0cyBvZiB0aGUgcmVzdWx0IG9mIGNvbXB1dGluZyBTSEEtMjU2IG92ZXIgZmFjdG9yeS1hc3NpZ25lZAorICAgICAqIElFRUUgRVVJLTY0LCB3aGljaCBpcyB1c2VkIGFzIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyBkdXJpbmcgY29tbWlzc2lvbmluZyBwcm9jZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFIYXNoTWFjQWRkcmVzcyAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIEhhc2ggTWFjIEFkZHJlc3MgaXMgcGxhY2VkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBHZXRIYXNoTWFjQWRkcmVzcyhFeHRBZGRyZXNzICphSGFzaE1hY0FkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUVFRSA4MDIuMTUuNCBTaG9ydCBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIFNob3J0QWRkcmVzcyBHZXRTaG9ydEFkZHJlc3Modm9pZCkgY29uc3QgeyByZXR1cm4gbVNob3J0QWRkcmVzczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUVFRSA4MDIuMTUuNCBTaG9ydCBBZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNob3J0QWRkcmVzcyAgVGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgSUVFRSA4MDIuMTUuNCBTaG9ydCBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRTaG9ydEFkZHJlc3MoU2hvcnRBZGRyZXNzIGFTaG9ydEFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUVFRSA4MDIuMTUuNCBDaGFubmVsLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElFRUUgODAyLjE1LjQgQ2hhbm5lbC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Q2hhbm5lbCh2b2lkKSBjb25zdCB7IHJldHVybiBtQ2hhbm5lbDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUVFRSA4MDIuMTUuNCBDaGFubmVsLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoYW5uZWwgIFRoZSBJRUVFIDgwMi4xNS40IENoYW5uZWwuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIElFRUUgODAyLjE1LjQgQ2hhbm5lbC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0Q2hhbm5lbCh1aW50OF90IGFDaGFubmVsKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG1heGltdW0gdHJhbnNtaXQgcG93ZXIgaW4gZEJtLgorICAgICAqCisgICAgICogQHJldHVybnMgIFRoZSBtYXhpbXVtIHRyYW5zbWl0IHBvd2VyIGluIGRCbS4KKyAgICAgKgorICAgICAqLworICAgIGludDhfdCBHZXRNYXhUcmFuc21pdFBvd2VyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NYXhUcmFuc21pdFBvd2VyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBtYXhpbXVtIHRyYW5zbWl0IHBvd2VyIGluIGRCbS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQb3dlciAgVGhlIG1heGltdW0gdHJhbnNtaXQgcG93ZXIgaW4gZEJtLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYXhUcmFuc21pdFBvd2VyKGludDhfdCBhUG93ZXIpIHsgbU1heFRyYW5zbWl0UG93ZXIgPSBhUG93ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgTmV0d29yayBOYW1lLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IE5ldHdvcmsgTmFtZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IGNoYXIgKkdldE5ldHdvcmtOYW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1OZXR3b3JrTmFtZS5tODsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUVFRSA4MDIuMTUuNCBOZXR3b3JrIE5hbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTmV0d29ya05hbWUgIEEgcG9pbnRlciB0byB0aGUgSUVFRSA4MDIuMTUuNCBOZXR3b3JrIE5hbWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIElFRUUgODAyLjE1LjQgTmV0d29yayBOYW1lLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXROZXR3b3JrTmFtZShjb25zdCBjaGFyICphTmV0d29ya05hbWUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRQYW5JZCh2b2lkKSBjb25zdCB7IHJldHVybiBtUGFuSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElFRUUgODAyLjE1LjQgUEFOIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBhbklkICBUaGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIElFRUUgODAyLjE1LjQgUEFOIElELgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRQYW5JZCh1aW50MTZfdCBhUGFuSWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBQQU4gSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgUEFOIElELgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0RXh0ZW5kZWRQYW5JZCh2b2lkKSBjb25zdCB7IHJldHVybiBtRXh0ZW5kZWRQYW5JZC5tODsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBQQU4gSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRXh0UGFuSWQgIFRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIFBBTiBJRC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBQQU4gSUQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldEV4dGVuZGVkUGFuSWQoY29uc3QgdWludDhfdCAqYUV4dFBhbklkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1BQyB3aGl0ZWxpc3QgZmlsdGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyB3aGl0ZWxpc3QgZmlsdGVyLgorICAgICAqCisgICAgICovCisgICAgV2hpdGVsaXN0ICZHZXRXaGl0ZWxpc3Qodm9pZCkgeyByZXR1cm4gbVdoaXRlbGlzdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTUFDIGJsYWNrbGlzdCBmaWx0ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgTUFDIGJsYWNrbGlzdCBmaWx0ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBCbGFja2xpc3QgJkdldEJsYWNrbGlzdCh2b2lkKSB7IHJldHVybiBtQmxhY2tsaXN0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gaGFuZGxlIHJlY2VpdmUgZXZlbnRzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lICBBIHBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIGZyYW1lLCBvciBOVUxMIGlmIHRoZSByZWNlaXZlIG9wZXJhdGlvbiBhYm9ydGVkLgorICAgICAqIEBwYXJhbVtpbl0gIGFFcnJvciAgT1RfRVJST1JfTk9ORSB3aGVuIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIGZyYW1lLCBPVF9FUlJPUl9BQk9SVCB3aGVuIHJlY2VwdGlvbgorICAgICAqICAgICAgICAgICAgICAgICAgICAgd2FzIGFib3J0ZWQgYW5kIGEgZnJhbWUgd2FzIG5vdCByZWNlaXZlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVjZWl2ZURvbmVUYXNrKEZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKTsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0xFR0FDWV9UUkFOU01JVF9ET05FCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGhhbmRsZSB0cmFuc21pdCBldmVudHMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGZyYW1lIHRoYXQgd2FzIHRyYW5zbWl0dGVkLgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZVBlbmRpbmcgIFRSVUUgaWYgYW4gQUNLIGZyYW1lIHdhcyByZWNlaXZlZCBhbmQgdGhlIEZyYW1lIFBlbmRpbmcgYml0IHdhcyBzZXQuCisgICAgICogQHBhcmFtW2luXSAgYUVycm9yICAgICAgICAgT1RfRVJST1JfTk9ORSB3aGVuIHRoZSBmcmFtZSB3YXMgdHJhbnNtaXR0ZWQsIE9UX0VSUk9SX05PX0FDSyB3aGVuIHRoZSBmcmFtZSB3YXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pdHRlZCBidXQgbm8gQUNLIHdhcyByZWNlaXZlZCwgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRSB3aGVuIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiBjb3VsZCBub3QgdGFrZSBwbGFjZSBkdWUgdG8gYWN0aXZpdHkgb24gdGhlIGNoYW5uZWwsIE9UX0VSUk9SX0FCT1JUIHdoZW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pc3Npb24gd2FzIGFib3J0ZWQgZm9yIG90aGVyIHJlYXNvbnMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFRyYW5zbWl0RG9uZVRhc2sob3RSYWRpb0ZyYW1lICphRnJhbWUsIGJvb2wgYVJ4UGVuZGluZywgb3RFcnJvciBhRXJyb3IpOworCisjZWxzZSAvLyAjaWYgT1BFTlRIUkVBRF9DT05GSUdfTEVHQUNZX1RSQU5TTUlUX0RPTkUKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gaGFuZGxlIHRyYW5zbWl0IGV2ZW50cy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICAgIEEgcG9pbnRlciB0byB0aGUgZnJhbWUgdGhhdCB3YXMgdHJhbnNtaXR0ZWQuCisgICAgICogQHBhcmFtW2luXSAgYUFja0ZyYW1lICAgQSBwb2ludGVyIHRvIHRoZSBBQ0sgZnJhbWUsIE5VTEwgaWYgbm8gQUNLIHdhcyByZWNlaXZlZC4KKyAgICAgKiBAcGFyYW1baW5dICBhRXJyb3IgICAgICBPVF9FUlJPUl9OT05FIHdoZW4gdGhlIGZyYW1lIHdhcyB0cmFuc21pdHRlZCwgT1RfRVJST1JfTk9fQUNLIHdoZW4gdGhlIGZyYW1lIHdhcworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0dGVkIGJ1dCBubyBBQ0sgd2FzIHJlY2VpdmVkLCBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFIHdoZW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uIGNvdWxkIG5vdCB0YWtlIHBsYWNlIGR1ZSB0byBhY3Rpdml0eSBvbiB0aGUgY2hhbm5lbCwgT1RfRVJST1JfQUJPUlQgd2hlbgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiB3YXMgYWJvcnRlZCBmb3Igb3RoZXIgcmVhc29ucy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgVHJhbnNtaXREb25lVGFzayhvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RSYWRpb0ZyYW1lICphQWNrRnJhbWUsIG90RXJyb3IgYUVycm9yKTsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19MRUdBQ1lfVFJBTlNNSVRfRE9ORQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiBhbiBhY3RpdmUgc2NhbiBpcyBpbiBwcm9ncmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNBY3RpdmVTY2FuSW5Qcm9ncmVzcyh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgYW4gZW5lcmd5IHNjYW4gaXMgaW4gcHJvZ3Jlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRW5lcmd5U2NhbkluUHJvZ3Jlc3Modm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBNQUMgbGF5ZXIgaXMgaW4gdHJhbnNtaXQgc3RhdGUuCisgICAgICoKKyAgICAgKiBUaGUgTUFDIGxheWVyIGlzIGluIHRyYW5zbWl0IHN0YXRlIGR1cmluZyBDU01BL0NBLCBDQ0EsIHRyYW5zbWlzc2lvbiBvZiBEYXRhLCBCZWFjb24gb3IgRGF0YSBSZXF1ZXN0IGZyYW1lcyBhbmQKKyAgICAgKiByZWNlaXZpbmcgb2YgQUNLIGZyYW1lcy4gVGhlIE1BQyBsYXllciBpcyBub3QgaW4gdHJhbnNtaXQgc3RhdGUgZHVyaW5nIHRyYW5zbWlzc2lvbiBvZiBBQ0sgZnJhbWVzIG9yIEJlYWNvbgorICAgICAqIFJlcXVlc3RzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0luVHJhbnNtaXRTdGF0ZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIHByb3ZpZGUgcmVjZWl2ZWQgcmF3IElFRUUgODAyLjE1LjQgZnJhbWVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBjYXBDYWxsYmFjayAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiByZWNlaXZpbmcgYW4gSUVFRSA4MDIuMTUuNCBsaW5rIGZyYW1lIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCB0byBkaXNhYmxlIHRoZSBjYWxsYmFjay4KKyAgICAgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2tDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UGNhcENhbGxiYWNrKG90TGlua1BjYXBDYWxsYmFjayBhUGNhcENhbGxiYWNrLCB2b2lkICphQ2FsbGJhY2tDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBwcm9taXNjdW91cyBtb2RlIGlzIGVuYWJsZWQgYXQgdGhlIGxpbmsgbGF5ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIHRydWUgICBQcm9taXNjdW91cyBtb2RlIGlzIGVuYWJsZWQuCisgICAgICogQHJldHZhbCBmYWxzZSAgUHJvbWlzY3VvdXMgbW9kZSBpcyBub3QgZW5hYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNQcm9taXNjdW91cyh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGxpbmsgbGF5ZXIgcHJvbWlzY3VvdXMgbW9kZS4KKyAgICAgKgorICAgICAqIFByb21pc2N1b3VzIG1vZGUga2VlcHMgdGhlIHJlY2VpdmVyIGVuYWJsZWQsIG92ZXJyaWRpbmcgdGhlIHZhbHVlIG9mIG1SeE9uV2hlbklkbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJvbWlzY3VvdXMgIHRydWUgdG8gZW5hYmxlIHByb21pc2N1b3VzIG1vZGUsIG9yIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UHJvbWlzY3VvdXMoYm9vbCBhUHJvbWlzY3VvdXMpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZmlsbHMgbmV0d29yayBkaWFnbm9zdGljIE1hY0NvdW50ZXJUbHYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWFjQ291bnRlcnNUbHYgVGhlIHJlZmVyZW5jZSB0byB0aGUgbmV0d29yayBkaWFnbm9zdGljIE1hY0NvdW50ZXJUbHYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEZpbGxNYWNDb3VudGVyc1RsdihOZXR3b3JrRGlhZ25vc3RpYzo6TWFjQ291bnRlcnNUbHYgJmFNYWNDb3VudGVycykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXNldHMgbWFjIGNvdW50ZXJzCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlc2V0Q291bnRlcnModm9pZCk7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfQkVBQ09OX1JTUF9JRl9KT0lOQUJMRQorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyBpZiB0aGUgYmVhY29uIGlzIGpvaW5hYmxlIG9yIG5vbi1qb2luYWJsZQorICAgICAqCisgICAgICogQHJldHZhbCB0cnVlICAgQmVhY29uIGlzIGpvaW5hYmxlLgorICAgICAqIEByZXR2YWwgZmFsc2UgIEJlYWNvbiBpcyBub24tam9pbmFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQmVhY29uSm9pbmFibGUodm9pZCk7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0JFQUNPTl9SU1BfSUZfSk9JTkFCTEUKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1BQyBjb3VudGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyBjb3VudGVyLgorICAgICAqCisgICAgICovCisgICAgb3RNYWNDb3VudGVycyAmR2V0Q291bnRlcnModm9pZCkgeyByZXR1cm4gbUNvdW50ZXJzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBub2lzZSBmbG9vciB2YWx1ZSAoY3VycmVudGx5IHVzZSB0aGUgcmFkaW8gcmVjZWl2ZSBzZW5zaXRpdml0eSB2YWx1ZSkuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbm9pc2UgZmxvb3IgdmFsdWUgaW4gZEJtLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldE5vaXNlRmxvb3Iodm9pZCkgeyByZXR1cm4gb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkoR2V0SW5zdGFuY2UoKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBDU01BIGJhY2tvZmYgaXMgc3VwcG9ydGVkIGJ5IHRoZSByYWRpbyBsYXllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgdHJ1ZSAgIENTTUEgYmFja29mZiBpcyBzdXBwb3J0ZWQgYnkgdGhlIHJhZGlvLgorICAgICAqIEByZXR2YWwgZmFsc2UgIENTTUEgYmFja29mZiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSByYWRpby4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgUmFkaW9TdXBwb3J0c0NzbWFCYWNrb2ZmKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRyYW5zbWl0IHJldHJpZXMgaXMgc3VwcG9ydGVkIGJ5IHRoZSByYWRpbyBsYXllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgdHJ1ZSAgIFJldHJpZXMgKGFuZCBDU01BKSBhcmUgc3VwcG9ydGVkIGJ5IHRoZSByYWRpby4KKyAgICAgKiBAcmV0dmFsIGZhbHNlICBSZXRyaWVzIChhbmQgQ1NNQSkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHJhZGlvLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBSYWRpb1N1cHBvcnRzUmV0cmllcyh2b2lkKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIFNjYW5UeXBlCisgICAgeworICAgICAgICBrU2NhblR5cGVOb25lID0gMCwKKyAgICAgICAga1NjYW5UeXBlQWN0aXZlLAorICAgICAgICBrU2NhblR5cGVFbmVyZ3ksCisgICAgfTsKKworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtJbnZhbGlkUnNzaVZhbHVlID0gMTI3CisgICAgfTsKKworICAgIHZvaWQgR2VuZXJhdGVOb25jZShjb25zdCBFeHRBZGRyZXNzICZhQWRkcmVzcywgdWludDMyX3QgYUZyYW1lQ291bnRlciwgdWludDhfdCBhU2VjdXJpdHlMZXZlbCwgdWludDhfdCAqYU5vbmNlKTsKKyAgICB2b2lkIFByb2Nlc3NUcmFuc21pdFNlY3VyaXR5KEZyYW1lICZhRnJhbWUpOworICAgIG90RXJyb3IgUHJvY2Vzc1JlY2VpdmVTZWN1cml0eShGcmFtZSAmYUZyYW1lLCBjb25zdCBBZGRyZXNzICZhU3JjQWRkciwgTmVpZ2hib3IgKmFOZWlnaGJvcik7CisgICAgdm9pZCBQdXRSYWRpb0luSWRsZU1vZGUodm9pZCk7CisgICAgdm9pZCBTdGFydE9wZXJhdGlvbih2b2lkKTsKKyAgICB2b2lkIEZpbmlzaE9wZXJhdGlvbih2b2lkKTsKKyAgICB2b2lkIFNlbnRGcmFtZShvdEVycm9yIGFFcnJvcik7CisgICAgdm9pZCBTZW5kQmVhY29uUmVxdWVzdChGcmFtZSAmYUZyYW1lKTsKKyAgICB2b2lkIFNlbmRCZWFjb24oRnJhbWUgJmFGcmFtZSk7CisgICAgdm9pZCBTdGFydEJhY2tvZmYodm9pZCk7CisgICAgdm9pZCBTdGFydEVuZXJneVNjYW4odm9pZCk7CisgICAgb3RFcnJvciBIYW5kbGVNYWNDb21tYW5kKEZyYW1lICZhRnJhbWUpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlTWFjVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVNYWNUaW1lcih2b2lkKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVCZWdpblRyYW5zbWl0KHZvaWQgKmFDb250ZXh0KTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVCZWdpblRyYW5zbWl0KFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlQmVnaW5UcmFuc21pdCh2b2lkKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZWNlaXZlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVSZWNlaXZlVGltZXIodm9pZCk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlRW5lcmd5U2NhblNhbXBsZVJzc2koVGFza2xldCAmYVRhc2tsZXQpOworICAgIHZvaWQgSGFuZGxlRW5lcmd5U2NhblNhbXBsZVJzc2kodm9pZCk7CisKKyAgICB2b2lkIFN0YXJ0Q3NtYUJhY2tvZmYodm9pZCk7CisgICAgb3RFcnJvciBTY2FuKFNjYW5UeXBlIGFUeXBlLCB1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLCB2b2lkICphQ29udGV4dCk7CisKKyAgICBvdEVycm9yIFJhZGlvVHJhbnNtaXQoRnJhbWUgKmFTZW5kRnJhbWUpOworICAgIG90RXJyb3IgUmFkaW9SZWNlaXZlKHVpbnQ4X3QgYUNoYW5uZWwpOworICAgIHZvaWQgUmFkaW9TbGVlcCh2b2lkKTsKKworICAgIHN0YXRpYyBNYWMgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIFRpbWVyIG1NYWNUaW1lcjsKKyNpZiAhT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorICAgIFRpbWVyIG1CYWNrb2ZmVGltZXI7CisjZW5kaWYKKyAgICBUaW1lciBtUmVjZWl2ZVRpbWVyOworCisgICAgRXh0QWRkcmVzcyBtRXh0QWRkcmVzczsKKyAgICBTaG9ydEFkZHJlc3MgbVNob3J0QWRkcmVzczsKKyAgICBQYW5JZCBtUGFuSWQ7CisgICAgdWludDhfdCBtQ2hhbm5lbDsKKyAgICBpbnQ4X3QgbU1heFRyYW5zbWl0UG93ZXI7CisKKyAgICBvdE5ldHdvcmtOYW1lIG1OZXR3b3JrTmFtZTsKKyAgICBvdEV4dGVuZGVkUGFuSWQgbUV4dGVuZGVkUGFuSWQ7CisKKyAgICBTZW5kZXIgKm1TZW5kSGVhZCwgKm1TZW5kVGFpbDsKKyAgICBSZWNlaXZlciAqbVJlY2VpdmVIZWFkLCAqbVJlY2VpdmVUYWlsOworCisgICAgZW51bQorICAgIHsKKyAgICAgICAga09wZXJhdGlvbk5vbmUgPSAwLAorICAgICAgICBrT3BlcmF0aW9uQWN0aXZlU2NhbiwKKyAgICAgICAga09wZXJhdGlvbkVuZXJneVNjYW4sCisgICAgICAgIGtPcGVyYXRpb25UcmFuc21pdEJlYWNvbiwKKyAgICAgICAga09wZXJhdGlvblRyYW5zbWl0RGF0YSwKKyAgICB9OworICAgIHVpbnQ4X3QgbU9wZXJhdGlvbjsKKworICAgIHVpbnQ4X3QgbUJlYWNvblNlcXVlbmNlOworICAgIHVpbnQ4X3QgbURhdGFTZXF1ZW5jZTsKKyAgICBib29sIG1SeE9uV2hlbklkbGU7CisgICAgdWludDhfdCBtQ3NtYUF0dGVtcHRzOworICAgIHVpbnQ4X3QgbVRyYW5zbWl0QXR0ZW1wdHM7CisgICAgYm9vbCBtVHJhbnNtaXRCZWFjb247CisgICAgYm9vbCBtQmVhY29uc0VuYWJsZWQ7CisKKyAgICBTY2FuVHlwZSBtUGVuZGluZ1NjYW5SZXF1ZXN0OworICAgIHVpbnQ4X3QgbVNjYW5DaGFubmVsOworICAgIHVpbnQzMl90IG1TY2FuQ2hhbm5lbHM7CisgICAgdWludDE2X3QgbVNjYW5EdXJhdGlvbjsKKyAgICB2b2lkICptU2NhbkNvbnRleHQ7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIEFjdGl2ZVNjYW5IYW5kbGVyIG1BY3RpdmVTY2FuSGFuZGxlcjsKKyAgICAgICAgRW5lcmd5U2NhbkhhbmRsZXIgbUVuZXJneVNjYW5IYW5kbGVyOworICAgIH07CisgICAgaW50OF90IG1FbmVyZ3lTY2FuQ3VycmVudE1heFJzc2k7CisgICAgVGFza2xldCBtRW5lcmd5U2NhblNhbXBsZVJzc2lUYXNrOworCisgICAgb3RMaW5rUGNhcENhbGxiYWNrIG1QY2FwQ2FsbGJhY2s7CisgICAgdm9pZCAqbVBjYXBDYWxsYmFja0NvbnRleHQ7CisKKyAgICBXaGl0ZWxpc3QgbVdoaXRlbGlzdDsKKyAgICBCbGFja2xpc3QgbUJsYWNrbGlzdDsKKworICAgIEZyYW1lICptVHhGcmFtZTsKKworICAgIG90TWFjQ291bnRlcnMgbUNvdW50ZXJzOworICAgIHVpbnQzMl90IG1LZXlJZE1vZGUyRnJhbWVDb3VudGVyOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBWV9BV0FLRV9CRVRXRUVOX0ZSQUdNRU5UUworICAgIGJvb2wgbURlbGF5U2xlZXA7CisjZW5kaWYKKyAgICBib29sIG1XYWl0aW5nRm9yRGF0YTsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUFDX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfYmxhY2tsaXN0LmNwcCBiL3NyYy9jb3JlL21hYy9tYWNfYmxhY2tsaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdiMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWFjL21hY19ibGFja2xpc3QuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGJsYWNrbGlzdCBJRUVFIDgwMi4xNS40IGZyYW1lIGZpbHRlcmluZyBiYXNlZCBvbiBNQUMgYWRkcmVzcy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm1hY19ibGFja2xpc3QuaHBwIgorCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNYWMgeworCitCbGFja2xpc3Q6OkJsYWNrbGlzdCh2b2lkKQoreworICAgIG1FbmFibGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBtQmxhY2tsaXN0W2ldLm1WYWxpZCA9IGZhbHNlOworICAgIH0KK30KKworb3RFcnJvciBCbGFja2xpc3Q6OkdldEVudHJ5KHVpbnQ4X3QgYUluZGV4LCBFbnRyeSAmYUVudHJ5KSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbmRleCA8IGtNYXhFbnRyaWVzLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBtZW1jcHkoJmFFbnRyeS5tRXh0QWRkcmVzcywgJm1CbGFja2xpc3RbYUluZGV4XS5tRXh0QWRkcmVzcywgc2l6ZW9mKGFFbnRyeS5tRXh0QWRkcmVzcykpOworICAgIGFFbnRyeS5tVmFsaWQgPSBtQmxhY2tsaXN0W2FJbmRleF0ubVZhbGlkOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworQmxhY2tsaXN0OjpFbnRyeSAqQmxhY2tsaXN0OjpBZGQoY29uc3QgRXh0QWRkcmVzcyAmYWRkcmVzcykKK3sKKyAgICBFbnRyeSAqcnZhbDsKKworICAgIFZlcmlmeU9yRXhpdCgocnZhbCA9IEZpbmQoYWRkcmVzcykpID09IE5VTEwpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4RW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1CbGFja2xpc3RbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSgmbUJsYWNrbGlzdFtpXS5tRXh0QWRkcmVzcywgJmFkZHJlc3MsIHNpemVvZihtQmxhY2tsaXN0W2ldLm1FeHRBZGRyZXNzKSk7CisgICAgICAgIG1CbGFja2xpc3RbaV0ubVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgRXhpdE5vdyhydmFsID0gJm1CbGFja2xpc3RbaV0pOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKwordm9pZCBCbGFja2xpc3Q6OkNsZWFyKHZvaWQpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4RW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgbUJsYWNrbGlzdFtpXS5tVmFsaWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQmxhY2tsaXN0OjpSZW1vdmUoY29uc3QgRXh0QWRkcmVzcyAmYWRkcmVzcykKK3sKKyAgICBFbnRyeSAqZW50cnk7CisKKyAgICBWZXJpZnlPckV4aXQoKGVudHJ5ID0gRmluZChhZGRyZXNzKSkgIT0gTlVMTCk7CisgICAgbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoKmVudHJ5KSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitCbGFja2xpc3Q6OkVudHJ5ICpCbGFja2xpc3Q6OkZpbmQoY29uc3QgRXh0QWRkcmVzcyAmYWRkcmVzcykKK3sKKyAgICBFbnRyeSAqcnZhbCA9IE5VTEw7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBpZiAoIW1CbGFja2xpc3RbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZW1jbXAoJm1CbGFja2xpc3RbaV0ubUV4dEFkZHJlc3MsICZhZGRyZXNzLCBzaXplb2YobUJsYWNrbGlzdFtpXS5tRXh0QWRkcmVzcykpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9ICZtQmxhY2tsaXN0W2ldKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tYWMvbWFjX2JsYWNrbGlzdC5ocHAgYi9zcmMvY29yZS9tYWMvbWFjX2JsYWNrbGlzdC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjYWVhZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21hYy9tYWNfYmxhY2tsaXN0LmhwcApAQCAtMCwwICsxLDM1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKyNpbmNsdWRlICJtYWNfYmxhY2tsaXN0X2ltcGwuaHBwIgorI2Vsc2UKKyNpbmNsdWRlICJtYWNfYmxhY2tsaXN0X3N0dWIuaHBwIgorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tYWMvbWFjX2JsYWNrbGlzdF9pbXBsLmhwcCBiL3NyYy9jb3JlL21hYy9tYWNfYmxhY2tsaXN0X2ltcGwuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNzRmODEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tYWMvbWFjX2JsYWNrbGlzdF9pbXBsLmhwcApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZnJhbWUgZmlsdGVyaW5nIGJhc2VkIG9uIE1BQyBhZGRyZXNzLgorICovCisKKyNpZm5kZWYgTUFDX0JMQUNLTElTVF9IUFBfCisjZGVmaW5lIE1BQ19CTEFDS0xJU1RfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1hYyB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1tYWMKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBibGFja2xpc3QgZmlsdGVyaW5nIG9uIElFRUUgODAyLjE1LjQgZnJhbWVzLgorICoKKyAqLworY2xhc3MgQmxhY2tsaXN0Cit7CitwdWJsaWM6CisgICAgdHlwZWRlZiBvdE1hY0JsYWNrbGlzdEVudHJ5IEVudHJ5OworCisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heEVudHJpZXMgPSBPUEVOVEhSRUFEX0NPTkZJR19NQUNfQkxBQ0tMSVNUX1NJWkUsCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIGJsYWNrbGlzdCBmaWx0ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBCbGFja2xpc3Qodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGJsYWNrbGlzdCBmaWx0ZXIgaXMgZW5hYmxlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBibGFja2xpc3QgZmlsdGVyIGlzIGVuYWJsZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIGJsYWNrbGlzdCBmaWx0ZXIgaXMgZGlzYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRW5hYmxlZCh2b2lkKSBjb25zdCB7IHJldHVybiBtRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5hYmxlcyB0aGUgYmxhY2tsaXN0IGZpbHRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFbmFibGVkICBUUlVFIHRvIGVuYWJsZSB0aGUgYmxhY2tsaXN0IGZpbHRlciwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRFbmFibGVkKGJvb2wgYUVuYWJsZWQpIHsgbUVuYWJsZWQgPSBhRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmxhY2tsaXN0IGVudHJpZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbWF4aW11bSBudW1iZXIgb2YgYmxhY2tsaXN0IGVudHJpZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgR2V0TWF4RW50cmllcyh2b2lkKSBjb25zdCB7IHJldHVybiBrTWF4RW50cmllczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyBhIGJsYWNrbGlzdCBlbnRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhSW5kZXggIEFuIGluZGV4IGludG8gdGhlIE1BQyBibGFja2xpc3QgdGFibGUuCisgICAgICogQHBhcmFtW291dF0gIGFFbnRyeSAgQSByZWZlcmVuY2UgdG8gd2hlcmUgdGhlIGluZm9ybWF0aW9uIGlzIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBNQUMgYmxhY2tsaXN0IGVudHJ5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBAcCBhSW5kZXggaXMgb3V0IG9mIGJvdW5kcyBvciBAcCBhRW50cnkgaXMgTlVMTC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0RW50cnkodWludDhfdCBhSW5kZXgsIEVudHJ5ICZhRW50cnkpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhbiBFeHRlbmRlZCBBZGRyZXNzIHRvIHRoZSBibGFja2xpc3QgZmlsdGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBibGFja2xpc3QgZW50cnkgb3IgTlVMTCBpZiB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlIGVudHJpZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBFbnRyeSAqQWRkKGNvbnN0IEV4dEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYW4gRXh0ZW5kZWQgQWRkcmVzcyB0byB0aGUgYmxhY2tsaXN0IGZpbHRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVtb3ZlKGNvbnN0IEV4dEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYWxsIGVudHJpZXMgZnJvbSB0aGUgYmxhY2tsaXN0IGZpbHRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBmaW5kcyBhIGJsYWNrbGlzdCBlbnRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgYmxhY2tsaXN0IGVudHJ5IG9yIE5VTEwgaWYgdGhlIGVudHJ5IGNvdWxkIG5vdCBiZSBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIEVudHJ5ICpGaW5kKGNvbnN0IEV4dEFkZHJlc3MgJmFBZGRyZXNzKTsKKworcHJpdmF0ZToKKyAgICBFbnRyeSBtQmxhY2tsaXN0W2tNYXhFbnRyaWVzXTsKKworICAgIGJvb2wgbUVuYWJsZWQ7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBNYWMKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1BQ19CTEFDS0xJU1RfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWFjL21hY19ibGFja2xpc3Rfc3R1Yi5ocHAgYi9zcmMvY29yZS9tYWMvbWFjX2JsYWNrbGlzdF9zdHViLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTRjZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWFjL21hY19ibGFja2xpc3Rfc3R1Yi5ocHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZnJhbWUgZmlsdGVyaW5nIGJhc2VkIG9uIE1BQyBhZGRyZXNzLgorICovCisKKyNpZm5kZWYgTUFDX0JMQUNLTElTVF9IUFBfCisjZGVmaW5lIE1BQ19CTEFDS0xJU1RfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1hYyB7CisKK2NsYXNzIEJsYWNrbGlzdAoreworcHVibGljOgorICAgIHR5cGVkZWYgb3RNYWNCbGFja2xpc3RFbnRyeSBFbnRyeTsKKworICAgIEJsYWNrbGlzdCh2b2lkKSB7IH0KKworICAgIGJvb2wgSXNFbmFibGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIFNldEVuYWJsZWQoYm9vbCkgeyB9CisKKyAgICBpbnQgR2V0TWF4RW50cmllcyh2b2lkKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICBvdEVycm9yIEdldEVudHJ5KHVpbnQ4X3QsIEVudHJ5ICYpIGNvbnN0IHsgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgfQorCisgICAgRW50cnkgKkFkZChjb25zdCBFeHRBZGRyZXNzICYpIHsgcmV0dXJuIE5VTEw7IH0KKworICAgIHZvaWQgUmVtb3ZlKGNvbnN0IEV4dEFkZHJlc3MgJikgeyB9CisKKyAgICB2b2lkIENsZWFyKHZvaWQpIHsgfQorCisgICAgRW50cnkgKkZpbmQoY29uc3QgRXh0QWRkcmVzcyAmKSB7IHJldHVybiBOVUxMOyB9Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTWFjCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBNQUNfQkxBQ0tMSVNUX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfZnJhbWUuY3BwIGIvc3JjL2NvcmUvbWFjL21hY19mcmFtZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI3NjY0OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21hYy9tYWNfZnJhbWUuY3BwCkBAIC0wLDAgKzEsMTExOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBJRUVFIDgwMi4xNS40IGhlYWRlciBnZW5lcmF0aW9uIGFuZCBwcm9jZXNzaW5nLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibWFjX2ZyYW1lLmhwcCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWFjIHsKKwordm9pZCBFeHRBZGRyZXNzOjpTZXQoY29uc3QgSXA2OjpBZGRyZXNzICZhSXBBZGRyZXNzKQoreworICAgIG1lbWNweShtOCwgYUlwQWRkcmVzcy5HZXRJaWQoKSwgc2l6ZW9mKG04KSk7CisgICAgbThbMF0gXj0gMHgwMjsKK30KKworY29uc3QgY2hhciAqQWRkcmVzczo6VG9TdHJpbmcoY2hhciAqYUJ1ZiwgdWludDE2X3QgYVNpemUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtTGVuZ3RoKQorICAgIHsKKyAgICBjYXNlIHNpemVvZihTaG9ydEFkZHJlc3MpOgorICAgICAgICBzbnByaW50ZihhQnVmLCBhU2l6ZSwgIjB4JTA0eCIsIG1TaG9ydEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugc2l6ZW9mKEV4dEFkZHJlc3MpOgorICAgICAgICBzbnByaW50ZihhQnVmLCBhU2l6ZSwgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwKKyAgICAgICAgICAgICAgICAgbUV4dEFkZHJlc3MubThbMF0sIG1FeHRBZGRyZXNzLm04WzFdLCBtRXh0QWRkcmVzcy5tOFsyXSwgbUV4dEFkZHJlc3MubThbM10sCisgICAgICAgICAgICAgICAgIG1FeHRBZGRyZXNzLm04WzRdLCBtRXh0QWRkcmVzcy5tOFs1XSwgbUV4dEFkZHJlc3MubThbNl0sIG1FeHRBZGRyZXNzLm04WzddKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbnByaW50ZihhQnVmLCBhU2l6ZSwgIk5vbmUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGFCdWY7Cit9CisKK290RXJyb3IgRnJhbWU6OkluaXRNYWNIZWFkZXIodWludDE2X3QgYUZjZiwgdWludDhfdCBhU2VjdXJpdHlDb250cm9sKQoreworICAgIHVpbnQ4X3QgKmJ5dGVzID0gR2V0UHNkdSgpOworICAgIHVpbnQ4X3QgbGVuZ3RoID0gMDsKKworICAgIC8vIEZyYW1lIENvbnRyb2wgRmllbGQKKyAgICBieXRlc1swXSA9IGFGY2YgJiAweGZmOworICAgIGJ5dGVzWzFdID0gYUZjZiA+PiA4OworICAgIGxlbmd0aCArPSBrRmNmU2l6ZTsKKworICAgIC8vIFNlcXVlbmNlIE51bWJlcgorICAgIGxlbmd0aCArPSBrRHNuU2l6ZTsKKworICAgIC8vIERlc3RpbmF0aW5vbiBQQU4gKyBBZGRyZXNzCisgICAgc3dpdGNoIChhRmNmICYgRnJhbWU6OmtGY2ZEc3RBZGRyTWFzaykKKyAgICB7CisgICAgY2FzZSBGcmFtZTo6a0ZjZkRzdEFkZHJOb25lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQ6CisgICAgICAgIGxlbmd0aCArPSBzaXplb2YoUGFuSWQpICsgc2l6ZW9mKFNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0ZjZkRzdEFkZHJFeHQ6CisgICAgICAgIGxlbmd0aCArPSBzaXplb2YoUGFuSWQpICsgc2l6ZW9mKEV4dEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorCisgICAgLy8gU291cmNlIFBBTiArIEFkZHJlc3MKKyAgICBzd2l0Y2ggKGFGY2YgJiBGcmFtZTo6a0ZjZlNyY0FkZHJNYXNrKQorICAgIHsKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkck5vbmU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0ZjZlNyY0FkZHJTaG9ydDoKKyAgICAgICAgaWYgKChhRmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGggKz0gc2l6ZW9mKFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIGxlbmd0aCArPSBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkckV4dDoKKyAgICAgICAgaWYgKChhRmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGggKz0gc2l6ZW9mKFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIGxlbmd0aCArPSBzaXplb2YoRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBTZWN1cml0eSBIZWFkZXIKKyAgICBpZiAoYUZjZiAmIEZyYW1lOjprRmNmU2VjdXJpdHlFbmFibGVkKQorICAgIHsKKyAgICAgICAgYnl0ZXNbbGVuZ3RoXSA9IGFTZWN1cml0eUNvbnRyb2w7CisKKyAgICAgICAgaWYgKGFTZWN1cml0eUNvbnRyb2wgJiBrU2VjTGV2ZWxNYXNrKQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGggKz0ga1NlY3VyaXR5Q29udHJvbFNpemUgKyBrRnJhbWVDb3VudGVyU2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoYVNlY3VyaXR5Q29udHJvbCAmIGtLZXlJZE1vZGVNYXNrKQorICAgICAgICB7CisgICAgICAgIGNhc2Uga0tleUlkTW9kZTA6CisgICAgICAgICAgICBsZW5ndGggKz0ga0tleVNvdXJjZVNpemVNb2RlMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0tleUlkTW9kZTE6CisgICAgICAgICAgICBsZW5ndGggKz0ga0tleVNvdXJjZVNpemVNb2RlMSArIGtLZXlJbmRleFNpemU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtLZXlJZE1vZGUyOgorICAgICAgICAgICAgbGVuZ3RoICs9IGtLZXlTb3VyY2VTaXplTW9kZTIgKyBrS2V5SW5kZXhTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrS2V5SWRNb2RlMzoKKyAgICAgICAgICAgIGxlbmd0aCArPSBrS2V5U291cmNlU2l6ZU1vZGUzICsga0tleUluZGV4U2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29tbWFuZCBJRAorICAgIGlmICgoYUZjZiAmIGtGY2ZGcmFtZVR5cGVNYXNrKSA9PSBrRmNmRnJhbWVNYWNDbWQpCisgICAgeworICAgICAgICBsZW5ndGggKz0ga0NvbW1hbmRJZFNpemU7CisgICAgfQorCisgICAgU2V0UHNkdUxlbmd0aChsZW5ndGggKyBHZXRGb290ZXJMZW5ndGgoKSk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBGcmFtZTo6VmFsaWRhdGVQc2R1KHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX1BBUlNFOworICAgIHVpbnQ4X3Qgb2Zmc2V0ID0gMDsKKyAgICB1aW50MTZfdCBmY2Y7CisgICAgdWludDhfdCBmb290ZXJMZW5ndGggPSBrRmNzU2l6ZTsKKworICAgIFZlcmlmeU9yRXhpdCgob2Zmc2V0ICs9IGtGY2ZTaXplICsga0RzblNpemUpIDw9IEdldFBzZHVMZW5ndGgoKSk7CisgICAgZmNmID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChHZXRQc2R1KClbMV0gPDwgOCkgfCBHZXRQc2R1KClbMF0pOworCisgICAgLy8gRGVzdGluYXRpbm9uIFBBTiArIEFkZHJlc3MKKyAgICBzd2l0Y2ggKGZjZiAmIEZyYW1lOjprRmNmRHN0QWRkck1hc2spCisgICAgeworICAgIGNhc2UgRnJhbWU6OmtGY2ZEc3RBZGRyTm9uZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkclNob3J0OgorICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKFBhbklkKSArIHNpemVvZihTaG9ydEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtGY2ZEc3RBZGRyRXh0OgorICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKFBhbklkKSArIHNpemVvZihFeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gU291cmNlIFBBTiArIEFkZHJlc3MKKyAgICBzd2l0Y2ggKGZjZiAmIEZyYW1lOjprRmNmU3JjQWRkck1hc2spCisgICAgeworICAgIGNhc2UgRnJhbWU6OmtGY2ZTcmNBZGRyTm9uZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkclNob3J0OgorICAgICAgICBpZiAoKGZjZiAmIEZyYW1lOjprRmNmUGFuaWRDb21wcmVzc2lvbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihQYW5JZCk7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKFNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0ZjZlNyY0FkZHJFeHQ6CisgICAgICAgIGlmICgoZmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSBzaXplb2YoRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIFNlY3VyaXR5IEhlYWRlcgorICAgIGlmIChmY2YgJiBGcmFtZTo6a0ZjZlNlY3VyaXR5RW5hYmxlZCkKKyAgICB7CisgICAgICAgIHVpbnQ4X3Qgc2VjQ29udHJvbCA9IEdldFBzZHUoKVtvZmZzZXRdOworCisgICAgICAgIG9mZnNldCArPSBrU2VjdXJpdHlDb250cm9sU2l6ZSArIGtGcmFtZUNvdW50ZXJTaXplOworCisgICAgICAgIHN3aXRjaCAoc2VjQ29udHJvbCAmIGtLZXlJZE1vZGVNYXNrKQorICAgICAgICB7CisgICAgICAgIGNhc2Uga0tleUlkTW9kZTA6CisgICAgICAgICAgICBvZmZzZXQgKz0ga0tleVNvdXJjZVNpemVNb2RlMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0tleUlkTW9kZTE6CisgICAgICAgICAgICBvZmZzZXQgKz0ga0tleVNvdXJjZVNpemVNb2RlMSArIGtLZXlJbmRleFNpemU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtLZXlJZE1vZGUyOgorICAgICAgICAgICAgb2Zmc2V0ICs9IGtLZXlTb3VyY2VTaXplTW9kZTIgKyBrS2V5SW5kZXhTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrS2V5SWRNb2RlMzoKKyAgICAgICAgICAgIG9mZnNldCArPSBrS2V5U291cmNlU2l6ZU1vZGUzICsga0tleUluZGV4U2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChzZWNDb250cm9sICYga1NlY0xldmVsTWFzaykKKyAgICAgICAgeworICAgICAgICBjYXNlIGtTZWNOb25lOgorICAgICAgICBjYXNlIGtTZWNFbmM6CisgICAgICAgICAgICBmb290ZXJMZW5ndGggKz0ga01pYzBTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrU2VjTWljMzI6CisgICAgICAgIGNhc2Uga1NlY0VuY01pYzMyOgorICAgICAgICAgICAgZm9vdGVyTGVuZ3RoICs9IGtNaWMzMlNpemU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTZWNNaWM2NDoKKyAgICAgICAgY2FzZSBrU2VjRW5jTWljNjQ6CisgICAgICAgICAgICBmb290ZXJMZW5ndGggKz0ga01pYzY0U2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1NlY01pYzEyODoKKyAgICAgICAgY2FzZSBrU2VjRW5jTWljMTI4OgorICAgICAgICAgICAgZm9vdGVyTGVuZ3RoICs9IGtNaWMxMjhTaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb21tYW5kIElECisgICAgaWYgKChmY2YgJiBrRmNmRnJhbWVUeXBlTWFzaykgPT0ga0ZjZkZyYW1lTWFjQ21kKQorICAgIHsKKyAgICAgICAgb2Zmc2V0ICs9IGtDb21tYW5kSWRTaXplOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdCgob2Zmc2V0ICsgZm9vdGVyTGVuZ3RoKSA8PSBHZXRQc2R1TGVuZ3RoKCkpOworCisgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDhfdCBGcmFtZTo6R2V0VHlwZSh2b2lkKQoreworICAgIHJldHVybiBHZXRQc2R1KClbMF0gJiBGcmFtZTo6a0ZjZkZyYW1lVHlwZU1hc2s7Cit9CisKK2Jvb2wgRnJhbWU6OkdldFNlY3VyaXR5RW5hYmxlZCh2b2lkKQoreworICAgIHJldHVybiAoR2V0UHNkdSgpWzBdICYgRnJhbWU6OmtGY2ZTZWN1cml0eUVuYWJsZWQpICE9IDA7Cit9CisKK2Jvb2wgRnJhbWU6OkdldEFja1JlcXVlc3Qodm9pZCkKK3sKKyAgICByZXR1cm4gKEdldFBzZHUoKVswXSAmIEZyYW1lOjprRmNmQWNrUmVxdWVzdCkgIT0gMDsKK30KKwordm9pZCBGcmFtZTo6U2V0QWNrUmVxdWVzdChib29sIGFBY2tSZXF1ZXN0KQoreworICAgIGlmIChhQWNrUmVxdWVzdCkKKyAgICB7CisgICAgICAgIEdldFBzZHUoKVswXSB8PSBGcmFtZTo6a0ZjZkFja1JlcXVlc3Q7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEdldFBzZHUoKVswXSAmPSB+RnJhbWU6OmtGY2ZBY2tSZXF1ZXN0OworICAgIH0KK30KKworYm9vbCBGcmFtZTo6R2V0RnJhbWVQZW5kaW5nKHZvaWQpCit7CisgICAgcmV0dXJuIChHZXRQc2R1KClbMF0gJiBGcmFtZTo6a0ZjZkZyYW1lUGVuZGluZykgIT0gMDsKK30KKwordm9pZCBGcmFtZTo6U2V0RnJhbWVQZW5kaW5nKGJvb2wgYUZyYW1lUGVuZGluZykKK3sKKyAgICBpZiAoYUZyYW1lUGVuZGluZykKKyAgICB7CisgICAgICAgIEdldFBzZHUoKVswXSB8PSBGcmFtZTo6a0ZjZkZyYW1lUGVuZGluZzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgR2V0UHNkdSgpWzBdICY9IH5GcmFtZTo6a0ZjZkZyYW1lUGVuZGluZzsKKyAgICB9Cit9CisKK3VpbnQ4X3QgKkZyYW1lOjpGaW5kU2VxdWVuY2Uodm9pZCkKK3sKKyAgICB1aW50OF90ICpjdXIgPSBHZXRQc2R1KCk7CisKKyAgICAvLyBGcmFtZSBDb250cm9sIEZpZWxkCisgICAgY3VyICs9IGtGY2ZTaXplOworCisgICAgcmV0dXJuIGN1cjsKK30KKwordWludDhfdCBGcmFtZTo6R2V0U2VxdWVuY2Uodm9pZCkKK3sKKyAgICB1aW50OF90ICpidWYgPSBGaW5kU2VxdWVuY2UoKTsKKyAgICByZXR1cm4gYnVmWzBdOworfQorCit2b2lkIEZyYW1lOjpTZXRTZXF1ZW5jZSh1aW50OF90IGFTZXF1ZW5jZSkKK3sKKyAgICB1aW50OF90ICpidWYgPSBGaW5kU2VxdWVuY2UoKTsKKyAgICBidWZbMF0gPSBhU2VxdWVuY2U7Cit9CisKK3VpbnQ4X3QgKkZyYW1lOjpGaW5kRHN0UGFuSWQodm9pZCkKK3sKKyAgICB1aW50OF90ICpjdXIgPSBHZXRQc2R1KCk7CisgICAgdWludDE2X3QgZmNmID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChHZXRQc2R1KClbMV0gPDwgOCkgfCBHZXRQc2R1KClbMF0pOworCisgICAgVmVyaWZ5T3JFeGl0KChmY2YgJiBGcmFtZTo6a0ZjZkRzdEFkZHJNYXNrKSAhPSBGcmFtZTo6a0ZjZkRzdEFkZHJOb25lLCBjdXIgPSBOVUxMKTsKKworICAgIC8vIEZyYW1lIENvbnRyb2wgRmllbGQKKyAgICBjdXIgKz0ga0ZjZlNpemU7CisgICAgLy8gU2VxdWVuY2UgTnVtYmVyCisgICAgY3VyICs9IGtEc25TaXplOworCitleGl0OgorICAgIHJldHVybiBjdXI7Cit9CisKK290RXJyb3IgRnJhbWU6OkdldERzdFBhbklkKFBhbklkICZhUGFuSWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCAqYnVmOworCisgICAgVmVyaWZ5T3JFeGl0KChidWYgPSBGaW5kRHN0UGFuSWQoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBhUGFuSWQgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKGJ1ZlsxXSA8PCA4KSB8IGJ1ZlswXSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEZyYW1lOjpTZXREc3RQYW5JZChQYW5JZCBhUGFuSWQpCit7CisgICAgdWludDhfdCAqYnVmOworCisgICAgYnVmID0gRmluZERzdFBhbklkKCk7CisgICAgYXNzZXJ0KGJ1ZiAhPSBOVUxMKTsKKworICAgIGJ1ZlswXSA9IGFQYW5JZCAmIDB4ZmY7CisgICAgYnVmWzFdID0gYVBhbklkID4+IDg7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordWludDhfdCAqRnJhbWU6OkZpbmREc3RBZGRyKHZvaWQpCit7CisgICAgdWludDhfdCAqY3VyID0gR2V0UHNkdSgpOworCisgICAgLy8gRnJhbWUgQ29udHJvbCBGaWVsZAorICAgIGN1ciArPSBrRmNmU2l6ZTsKKyAgICAvLyBTZXF1ZW5jZSBOdW1iZXIKKyAgICBjdXIgKz0ga0RzblNpemU7CisgICAgLy8gRGVzdGluYXRpb24gUEFOCisgICAgY3VyICs9IHNpemVvZihQYW5JZCk7CisKKyAgICByZXR1cm4gY3VyOworfQorCitvdEVycm9yIEZyYW1lOjpHZXREc3RBZGRyKEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmJ1ZjsKKyAgICB1aW50MTZfdCBmY2YgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKEdldFBzZHUoKVsxXSA8PCA4KSB8IEdldFBzZHUoKVswXSk7CisKKyAgICBWZXJpZnlPckV4aXQoYnVmID0gRmluZERzdEFkZHIoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBzd2l0Y2ggKGZjZiAmIEZyYW1lOjprRmNmRHN0QWRkck1hc2spCisgICAgeworICAgIGNhc2UgRnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQ6CisgICAgICAgIGFBZGRyZXNzLm1MZW5ndGggPSBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYUFkZHJlc3MubVNob3J0QWRkcmVzcyA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoYnVmWzFdIDw8IDgpIHwgYnVmWzBdKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkckV4dDoKKyAgICAgICAgYUFkZHJlc3MubUxlbmd0aCA9IHNpemVvZihFeHRBZGRyZXNzKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemVvZihFeHRBZGRyZXNzKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBhQWRkcmVzcy5tRXh0QWRkcmVzcy5tOFtpXSA9IGJ1ZltzaXplb2YoRXh0QWRkcmVzcykgLSAxIC0gaV07CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFBZGRyZXNzLm1MZW5ndGggPSAwOworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEZyYW1lOjpTZXREc3RBZGRyKFNob3J0QWRkcmVzcyBhU2hvcnRBZGRyZXNzKQoreworICAgIHVpbnQ4X3QgKmJ1ZjsKKyAgICB1aW50MTZfdCBmY2YgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKEdldFBzZHUoKVsxXSA8PCA4KSB8IEdldFBzZHUoKVswXSk7CisKKyAgICBhc3NlcnQoKGZjZiAmIEZyYW1lOjprRmNmRHN0QWRkck1hc2spID09IEZyYW1lOjprRmNmRHN0QWRkclNob3J0KTsKKworICAgIGJ1ZiA9IEZpbmREc3RBZGRyKCk7CisgICAgYXNzZXJ0KGJ1ZiAhPSBOVUxMKTsKKworICAgIGJ1ZlswXSA9IGFTaG9ydEFkZHJlc3MgJiAweGZmOworICAgIGJ1ZlsxXSA9IGFTaG9ydEFkZHJlc3MgPj4gODsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIEZyYW1lOjpTZXREc3RBZGRyKGNvbnN0IEV4dEFkZHJlc3MgJmFFeHRBZGRyZXNzKQoreworICAgIHVpbnQ4X3QgKmJ1ZjsKKyAgICB1aW50MTZfdCBmY2YgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKEdldFBzZHUoKVsxXSA8PCA4KSB8IEdldFBzZHUoKVswXSk7CisKKyAgICBhc3NlcnQoKGZjZiAmIEZyYW1lOjprRmNmRHN0QWRkck1hc2spID09IEZyYW1lOjprRmNmRHN0QWRkckV4dCk7CisKKyAgICBidWYgPSBGaW5kRHN0QWRkcigpOworICAgIGFzc2VydChidWYgIT0gTlVMTCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemVvZihFeHRBZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgYnVmW2ldID0gYUV4dEFkZHJlc3MubThbc2l6ZW9mKEV4dEFkZHJlc3MpIC0gMSAtIGldOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit1aW50OF90ICpGcmFtZTo6RmluZFNyY1BhbklkKHZvaWQpCit7CisgICAgdWludDhfdCAqY3VyID0gR2V0UHNkdSgpOworICAgIHVpbnQxNl90IGZjZiA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoR2V0UHNkdSgpWzFdIDw8IDgpIHwgR2V0UHNkdSgpWzBdKTsKKworICAgIFZlcmlmeU9yRXhpdCgoZmNmICYgRnJhbWU6OmtGY2ZEc3RBZGRyTWFzaykgIT0gRnJhbWU6OmtGY2ZEc3RBZGRyTm9uZSB8fAorICAgICAgICAgICAgICAgICAoZmNmICYgRnJhbWU6OmtGY2ZTcmNBZGRyTWFzaykgIT0gRnJhbWU6OmtGY2ZTcmNBZGRyTm9uZSwgY3VyID0gTlVMTCk7CisKKyAgICAvLyBGcmFtZSBDb250cm9sIEZpZWxkCisgICAgY3VyICs9IGtGY2ZTaXplOworICAgIC8vIFNlcXVlbmNlIE51bWJlcgorICAgIGN1ciArPSBrRHNuU2l6ZTsKKworICAgIGlmICgoZmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gRGVzdGluYXRpb24gUEFOICsgQWRkcmVzcworICAgICAgICBzd2l0Y2ggKGZjZiAmIEZyYW1lOjprRmNmRHN0QWRkck1hc2spCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBGcmFtZTo6a0ZjZkRzdEFkZHJTaG9ydDoKKyAgICAgICAgICAgIGN1ciArPSBzaXplb2YoUGFuSWQpICsgc2l6ZW9mKFNob3J0QWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkckV4dDoKKyAgICAgICAgICAgIGN1ciArPSBzaXplb2YoUGFuSWQpICsgc2l6ZW9mKEV4dEFkZHJlc3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGN1cjsKK30KKworb3RFcnJvciBGcmFtZTo6R2V0U3JjUGFuSWQoUGFuSWQgJmFQYW5JZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90ICpidWY7CisKKyAgICBWZXJpZnlPckV4aXQoKGJ1ZiA9IEZpbmRTcmNQYW5JZCgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGFQYW5JZCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoYnVmWzFdIDw8IDgpIHwgYnVmWzBdKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRnJhbWU6OlNldFNyY1BhbklkKFBhbklkIGFQYW5JZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90ICpidWY7CisKKyAgICBWZXJpZnlPckV4aXQoKGJ1ZiA9IEZpbmRTcmNQYW5JZCgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGJ1ZlswXSA9IGFQYW5JZCAmIDB4ZmY7CisgICAgYnVmWzFdID0gYVBhbklkID4+IDg7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit1aW50OF90ICpGcmFtZTo6RmluZFNyY0FkZHIodm9pZCkKK3sKKyAgICB1aW50OF90ICpjdXIgPSBHZXRQc2R1KCk7CisgICAgdWludDE2X3QgZmNmID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChHZXRQc2R1KClbMV0gPDwgOCkgfCBHZXRQc2R1KClbMF0pOworCisgICAgLy8gRnJhbWUgQ29udHJvbCBGaWVsZAorICAgIGN1ciArPSBrRmNmU2l6ZTsKKyAgICAvLyBTZXF1ZW5jZSBOdW1iZXIKKyAgICBjdXIgKz0ga0RzblNpemU7CisKKyAgICAvLyBEZXN0aW5hdGlvbiBQQU4gKyBBZGRyZXNzCisgICAgc3dpdGNoIChmY2YgJiBGcmFtZTo6a0ZjZkRzdEFkZHJNYXNrKQorICAgIHsKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkclNob3J0OgorICAgICAgICBjdXIgKz0gc2l6ZW9mKFBhbklkKSArIHNpemVvZihTaG9ydEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtGY2ZEc3RBZGRyRXh0OgorICAgICAgICBjdXIgKz0gc2l6ZW9mKFBhbklkKSArIHNpemVvZihFeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gU291cmNlIFBBTgorICAgIGlmICgoZmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgIHsKKyAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCk7CisgICAgfQorCisgICAgcmV0dXJuIGN1cjsKK30KKworb3RFcnJvciBGcmFtZTo6R2V0U3JjQWRkcihBZGRyZXNzICZhZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmJ1ZjsKKyAgICB1aW50MTZfdCBmY2YgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKEdldFBzZHUoKVsxXSA8PCA4KSB8IEdldFBzZHUoKVswXSk7CisKKyAgICBWZXJpZnlPckV4aXQoKGJ1ZiA9IEZpbmRTcmNBZGRyKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgc3dpdGNoIChmY2YgJiBGcmFtZTo6a0ZjZlNyY0FkZHJNYXNrKQorICAgIHsKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkclNob3J0OgorICAgICAgICBhZGRyZXNzLm1MZW5ndGggPSBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYWRkcmVzcy5tU2hvcnRBZGRyZXNzID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChidWZbMV0gPDwgOCkgfCBidWZbMF0pOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtGY2ZTcmNBZGRyRXh0OgorICAgICAgICBhZGRyZXNzLm1MZW5ndGggPSBzaXplb2YoRXh0QWRkcmVzcyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplb2YoRXh0QWRkcmVzcyk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYWRkcmVzcy5tRXh0QWRkcmVzcy5tOFtpXSA9IGJ1ZltzaXplb2YoRXh0QWRkcmVzcykgLSAxIC0gaV07CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFkZHJlc3MubUxlbmd0aCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRnJhbWU6OlNldFNyY0FkZHIoU2hvcnRBZGRyZXNzIGFTaG9ydEFkZHJlc3MpCit7CisgICAgdWludDhfdCAqYnVmOworICAgIHVpbnQxNl90IGZjZiA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoR2V0UHNkdSgpWzFdIDw8IDgpIHwgR2V0UHNkdSgpWzBdKTsKKworICAgIGFzc2VydCgoZmNmICYgRnJhbWU6OmtGY2ZTcmNBZGRyTWFzaykgPT0gRnJhbWU6OmtGY2ZTcmNBZGRyU2hvcnQpOworCisgICAgYnVmID0gRmluZFNyY0FkZHIoKTsKKyAgICBhc3NlcnQoYnVmICE9IE5VTEwpOworCisgICAgYnVmWzBdID0gYVNob3J0QWRkcmVzcyAmIDB4ZmY7CisgICAgYnVmWzFdID0gYVNob3J0QWRkcmVzcyA+PiA4OworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgRnJhbWU6OlNldFNyY0FkZHIoY29uc3QgRXh0QWRkcmVzcyAmYUV4dEFkZHJlc3MpCit7CisgICAgdWludDhfdCAqYnVmOworICAgIHVpbnQxNl90IGZjZiA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoR2V0UHNkdSgpWzFdIDw8IDgpIHwgR2V0UHNkdSgpWzBdKTsKKworICAgIGFzc2VydCgoZmNmICYgRnJhbWU6OmtGY2ZTcmNBZGRyTWFzaykgPT0gRnJhbWU6OmtGY2ZTcmNBZGRyRXh0KTsKKworICAgIGJ1ZiA9IEZpbmRTcmNBZGRyKCk7CisgICAgYXNzZXJ0KGJ1ZiAhPSBOVUxMKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZW9mKGFFeHRBZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgYnVmW2ldID0gYUV4dEFkZHJlc3MubThbc2l6ZW9mKGFFeHRBZGRyZXNzKSAtIDEgLSBpXTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordWludDhfdCAqRnJhbWU6OkZpbmRTZWN1cml0eUhlYWRlcih2b2lkKQoreworICAgIHVpbnQ4X3QgKmN1ciA9IEdldFBzZHUoKTsKKyAgICB1aW50MTZfdCBmY2YgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKEdldFBzZHUoKVsxXSA8PCA4KSB8IEdldFBzZHUoKVswXSk7CisKKyAgICBWZXJpZnlPckV4aXQoKGZjZiAmIEZyYW1lOjprRmNmU2VjdXJpdHlFbmFibGVkKSAhPSAwLCBjdXIgPSBOVUxMKTsKKworICAgIC8vIEZyYW1lIENvbnRyb2wgRmllbGQKKyAgICBjdXIgKz0ga0ZjZlNpemU7CisgICAgLy8gU2VxdWVuY2UgTnVtYmVyCisgICAgY3VyICs9IGtEc25TaXplOworCisgICAgLy8gRGVzdGluYXRpb24gUEFOICsgQWRkcmVzcworICAgIHN3aXRjaCAoZmNmICYgRnJhbWU6OmtGY2ZEc3RBZGRyTWFzaykKKyAgICB7CisgICAgY2FzZSBGcmFtZTo6a0ZjZkRzdEFkZHJTaG9ydDoKKyAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCkgKyBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkckV4dDoKKyAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCkgKyBzaXplb2YoRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIFNvdXJjZSBQQU4gKyBBZGRyZXNzCisgICAgc3dpdGNoIChmY2YgJiBGcmFtZTo6a0ZjZlNyY0FkZHJNYXNrKQorICAgIHsKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkclNob3J0OgorICAgICAgICBpZiAoKGZjZiAmIEZyYW1lOjprRmNmUGFuaWRDb21wcmVzc2lvbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCk7CisgICAgICAgIH0KKworICAgICAgICBjdXIgKz0gc2l6ZW9mKFNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0ZjZlNyY0FkZHJFeHQ6CisgICAgICAgIGlmICgoZmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjdXIgKz0gc2l6ZW9mKFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciArPSBzaXplb2YoRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gY3VyOworfQorCitvdEVycm9yIEZyYW1lOjpHZXRTZWN1cml0eUxldmVsKHVpbnQ4X3QgJmFTZWN1cml0eUxldmVsKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmJ1ZjsKKworICAgIFZlcmlmeU9yRXhpdCgoYnVmID0gRmluZFNlY3VyaXR5SGVhZGVyKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgYVNlY3VyaXR5TGV2ZWwgPSBidWZbMF0gJiBrU2VjTGV2ZWxNYXNrOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBGcmFtZTo6R2V0S2V5SWRNb2RlKHVpbnQ4X3QgJmFLZXlJZE1vZGUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCAqYnVmOworCisgICAgVmVyaWZ5T3JFeGl0KChidWYgPSBGaW5kU2VjdXJpdHlIZWFkZXIoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBhS2V5SWRNb2RlID0gYnVmWzBdICYga0tleUlkTW9kZU1hc2s7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEZyYW1lOjpHZXRGcmFtZUNvdW50ZXIodWludDMyX3QgJmFGcmFtZUNvdW50ZXIpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCAqYnVmOworCisgICAgVmVyaWZ5T3JFeGl0KChidWYgPSBGaW5kU2VjdXJpdHlIZWFkZXIoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBTZWN1cml0eSBDb250cm9sCisgICAgYnVmICs9IGtTZWN1cml0eUNvbnRyb2xTaXplOworCisgICAgYUZyYW1lQ291bnRlciA9ICgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJ1ZlszXSkgPDwgMjQpIHwKKyAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYnVmWzJdKSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQzMl90PihidWZbMV0pIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYnVmWzBdKSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBGcmFtZTo6U2V0RnJhbWVDb3VudGVyKHVpbnQzMl90IGFGcmFtZUNvdW50ZXIpCit7CisgICAgdWludDhfdCAqYnVmOworCisgICAgYnVmID0gRmluZFNlY3VyaXR5SGVhZGVyKCk7CisgICAgYXNzZXJ0KGJ1ZiAhPSBOVUxMKTsKKworICAgIC8vIFNlY3VyaXR5IENvbnRyb2wKKyAgICBidWYgKz0ga1NlY3VyaXR5Q29udHJvbFNpemU7CisKKyAgICBidWZbMF0gPSBhRnJhbWVDb3VudGVyICYgMHhmZjsKKyAgICBidWZbMV0gPSAoYUZyYW1lQ291bnRlciA+PiA4KSAmIDB4ZmY7CisgICAgYnVmWzJdID0gKGFGcmFtZUNvdW50ZXIgPj4gMTYpICYgMHhmZjsKKyAgICBidWZbM10gPSAoYUZyYW1lQ291bnRlciA+PiAyNCkgJiAweGZmOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2NvbnN0IHVpbnQ4X3QgKkZyYW1lOjpHZXRLZXlTb3VyY2Uodm9pZCkKK3sKKyAgICB1aW50OF90ICpidWY7CisKKyAgICBidWYgPSBGaW5kU2VjdXJpdHlIZWFkZXIoKTsKKyAgICBhc3NlcnQoYnVmICE9IE5VTEwpOworCisgICAgLy8gU2VjdXJpdHkgQ29udHJvbAorICAgIGJ1ZiArPSBrU2VjdXJpdHlDb250cm9sU2l6ZSArIGtGcmFtZUNvdW50ZXJTaXplOworCisgICAgcmV0dXJuIGJ1ZjsKK30KKwordWludDhfdCBGcmFtZTo6R2V0S2V5U291cmNlTGVuZ3RoKHVpbnQ4X3QgYUtleUlkTW9kZSkKK3sKKyAgICB1aW50OF90IHJ2YWwgPSAwOworCisgICAgc3dpdGNoIChhS2V5SWRNb2RlKQorICAgIHsKKyAgICBjYXNlIGtLZXlJZE1vZGUwOgorICAgICAgICBydmFsID0ga0tleVNvdXJjZVNpemVNb2RlMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtLZXlJZE1vZGUxOgorICAgICAgICBydmFsID0ga0tleVNvdXJjZVNpemVNb2RlMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtLZXlJZE1vZGUyOgorICAgICAgICBydmFsID0ga0tleVNvdXJjZVNpemVNb2RlMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtLZXlJZE1vZGUzOgorICAgICAgICBydmFsID0ga0tleVNvdXJjZVNpemVNb2RlMzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgRnJhbWU6OlNldEtleVNvdXJjZShjb25zdCB1aW50OF90ICphS2V5U291cmNlKQoreworICAgIHVpbnQ4X3Qga2V5U291cmNlTGVuZ3RoOworICAgIHVpbnQ4X3QgKmJ1ZjsKKworICAgIGJ1ZiA9IEZpbmRTZWN1cml0eUhlYWRlcigpOworICAgIGFzc2VydChidWYgIT0gTlVMTCk7CisKKyAgICBrZXlTb3VyY2VMZW5ndGggPSBHZXRLZXlTb3VyY2VMZW5ndGgoYnVmWzBdICYga0tleUlkTW9kZU1hc2spOworCisgICAgYnVmICs9IGtTZWN1cml0eUNvbnRyb2xTaXplICsga0ZyYW1lQ291bnRlclNpemU7CisKKyAgICBtZW1jcHkoYnVmLCBhS2V5U291cmNlLCBrZXlTb3VyY2VMZW5ndGgpOworfQorCitvdEVycm9yIEZyYW1lOjpHZXRLZXlJZCh1aW50OF90ICZhS2V5SWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBrZXlTb3VyY2VMZW5ndGg7CisgICAgdWludDhfdCAqYnVmOworCisgICAgVmVyaWZ5T3JFeGl0KChidWYgPSBGaW5kU2VjdXJpdHlIZWFkZXIoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBrZXlTb3VyY2VMZW5ndGggPSBHZXRLZXlTb3VyY2VMZW5ndGgoYnVmWzBdICYga0tleUlkTW9kZU1hc2spOworCisgICAgYnVmICs9IGtTZWN1cml0eUNvbnRyb2xTaXplICsga0ZyYW1lQ291bnRlclNpemUgKyBrZXlTb3VyY2VMZW5ndGg7CisKKyAgICBhS2V5SWQgPSBidWZbMF07CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEZyYW1lOjpTZXRLZXlJZCh1aW50OF90IGFLZXlJZCkKK3sKKyAgICB1aW50OF90IGtleVNvdXJjZUxlbmd0aDsKKyAgICB1aW50OF90ICpidWY7CisKKyAgICBidWYgPSBGaW5kU2VjdXJpdHlIZWFkZXIoKTsKKyAgICBhc3NlcnQoYnVmICE9IE5VTEwpOworCisgICAga2V5U291cmNlTGVuZ3RoID0gR2V0S2V5U291cmNlTGVuZ3RoKGJ1ZlswXSAmIGtLZXlJZE1vZGVNYXNrKTsKKworICAgIGJ1ZiArPSBrU2VjdXJpdHlDb250cm9sU2l6ZSArIGtGcmFtZUNvdW50ZXJTaXplICsga2V5U291cmNlTGVuZ3RoOworCisgICAgYnVmWzBdID0gYUtleUlkOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgRnJhbWU6OkdldENvbW1hbmRJZCh1aW50OF90ICZhQ29tbWFuZElkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmJ1ZjsKKworICAgIFZlcmlmeU9yRXhpdCgoYnVmID0gR2V0UGF5bG9hZCgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBhQ29tbWFuZElkID0gYnVmWy0xXTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRnJhbWU6OlNldENvbW1hbmRJZCh1aW50OF90IGFDb21tYW5kSWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCAqYnVmOworCisgICAgVmVyaWZ5T3JFeGl0KChidWYgPSBHZXRQYXlsb2FkKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIGJ1ZlstMV0gPSBhQ29tbWFuZElkOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDhfdCBGcmFtZTo6R2V0SGVhZGVyTGVuZ3RoKHZvaWQpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldFBheWxvYWQoKSAtIEdldFBzZHUoKSk7Cit9CisKK3VpbnQ4X3QgRnJhbWU6OkdldEZvb3Rlckxlbmd0aCh2b2lkKQoreworICAgIHVpbnQ4X3QgZm9vdGVyTGVuZ3RoID0gMDsKKyAgICB1aW50OF90ICpjdXI7CisKKyAgICBWZXJpZnlPckV4aXQoKGN1ciA9IEZpbmRTZWN1cml0eUhlYWRlcigpKSAhPSBOVUxMKTsKKworICAgIHN3aXRjaCAoY3VyWzBdICYga1NlY0xldmVsTWFzaykKKyAgICB7CisgICAgY2FzZSBrU2VjTm9uZToKKyAgICBjYXNlIGtTZWNFbmM6CisgICAgICAgIGZvb3Rlckxlbmd0aCArPSBrTWljMFNpemU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrU2VjTWljMzI6CisgICAgY2FzZSBrU2VjRW5jTWljMzI6CisgICAgICAgIGZvb3Rlckxlbmd0aCArPSBrTWljMzJTaXplOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga1NlY01pYzY0OgorICAgIGNhc2Uga1NlY0VuY01pYzY0OgorICAgICAgICBmb290ZXJMZW5ndGggKz0ga01pYzY0U2l6ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtTZWNNaWMxMjg6CisgICAgY2FzZSBrU2VjRW5jTWljMTI4OgorICAgICAgICBmb290ZXJMZW5ndGggKz0ga01pYzEyOFNpemU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICAvLyBGcmFtZSBDaGVjayBTZXF1ZW5jZQorICAgIGZvb3Rlckxlbmd0aCArPSBrRmNzU2l6ZTsKKworICAgIHJldHVybiBmb290ZXJMZW5ndGg7Cit9CisKK3VpbnQ4X3QgRnJhbWU6OkdldE1heFBheWxvYWRMZW5ndGgodm9pZCkKK3sKKyAgICByZXR1cm4ga01UVSAtIChHZXRIZWFkZXJMZW5ndGgoKSArIEdldEZvb3Rlckxlbmd0aCgpKTsKK30KKwordWludDhfdCBGcmFtZTo6R2V0UGF5bG9hZExlbmd0aCh2b2lkKQoreworICAgIHJldHVybiBHZXRQc2R1TGVuZ3RoKCkgLSAoR2V0SGVhZGVyTGVuZ3RoKCkgKyBHZXRGb290ZXJMZW5ndGgoKSk7Cit9CisKK290RXJyb3IgRnJhbWU6OlNldFBheWxvYWRMZW5ndGgodWludDhfdCBhTGVuZ3RoKQoreworICAgIFNldFBzZHVMZW5ndGgoR2V0SGVhZGVyTGVuZ3RoKCkgKyBHZXRGb290ZXJMZW5ndGgoKSArIGFMZW5ndGgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit1aW50OF90ICpGcmFtZTo6R2V0SGVhZGVyKHZvaWQpCit7CisgICAgcmV0dXJuIEdldFBzZHUoKTsKK30KKwordWludDhfdCAqRnJhbWU6OkdldFBheWxvYWQodm9pZCkKK3sKKyAgICB1aW50OF90ICpjdXIgPSBHZXRQc2R1KCk7CisgICAgdWludDE2X3QgZmNmID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChHZXRQc2R1KClbMV0gPDwgOCkgfCBHZXRQc2R1KClbMF0pOworICAgIHVpbnQ4X3Qgc2VjdXJpdHlDb250cm9sOworCisgICAgLy8gRnJhbWUgQ29udHJvbAorICAgIGN1ciArPSBrRmNmU2l6ZTsKKyAgICAvLyBTZXF1ZW5jZSBOdW1iZXIKKyAgICBjdXIgKz0ga0RzblNpemU7CisKKyAgICAvLyBEZXN0aW5hdGlvbiBQQU4gKyBBZGRyZXNzCisgICAgc3dpdGNoIChmY2YgJiBGcmFtZTo6a0ZjZkRzdEFkZHJNYXNrKQorICAgIHsKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkck5vbmU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0ZjZkRzdEFkZHJTaG9ydDoKKyAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCkgKyBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkckV4dDoKKyAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCkgKyBzaXplb2YoRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgRXhpdE5vdyhjdXIgPSBOVUxMKTsKKyAgICB9CisKKyAgICAvLyBTb3VyY2UgUEFOICsgQWRkcmVzcworICAgIHN3aXRjaCAoZmNmICYgRnJhbWU6OmtGY2ZTcmNBZGRyTWFzaykKKyAgICB7CisgICAgY2FzZSBGcmFtZTo6a0ZjZlNyY0FkZHJOb25lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtGY2ZTcmNBZGRyU2hvcnQ6CisgICAgICAgIGlmICgoZmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjdXIgKz0gc2l6ZW9mKFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciArPSBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkckV4dDoKKyAgICAgICAgaWYgKChmY2YgJiBGcmFtZTo6a0ZjZlBhbmlkQ29tcHJlc3Npb24pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1ciArPSBzaXplb2YoUGFuSWQpOworICAgICAgICB9CisKKyAgICAgICAgY3VyICs9IHNpemVvZihFeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFeGl0Tm93KGN1ciA9IE5VTEwpOworICAgIH0KKworICAgIC8vIFNlY3VyaXR5IENvbnRyb2wgKyBGcmFtZSBDb3VudGVyICsgS2V5IElkZW50aWZpZXIKKyAgICBpZiAoKGZjZiAmIEZyYW1lOjprRmNmU2VjdXJpdHlFbmFibGVkKSAhPSAwKQorICAgIHsKKyAgICAgICAgc2VjdXJpdHlDb250cm9sID0gKmN1cjsKKworICAgICAgICBjdXIgKz0ga1NlY3VyaXR5Q29udHJvbFNpemUgKyBrRnJhbWVDb3VudGVyU2l6ZTsKKworICAgICAgICBzd2l0Y2ggKHNlY3VyaXR5Q29udHJvbCAmIGtLZXlJZE1vZGVNYXNrKQorICAgICAgICB7CisgICAgICAgIGNhc2Uga0tleUlkTW9kZTA6CisgICAgICAgICAgICBjdXIgKz0ga0tleVNvdXJjZVNpemVNb2RlMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0tleUlkTW9kZTE6CisgICAgICAgICAgICBjdXIgKz0ga0tleVNvdXJjZVNpemVNb2RlMSArIGtLZXlJbmRleFNpemU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtLZXlJZE1vZGUyOgorICAgICAgICAgICAgY3VyICs9IGtLZXlTb3VyY2VTaXplTW9kZTIgKyBrS2V5SW5kZXhTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrS2V5SWRNb2RlMzoKKyAgICAgICAgICAgIGN1ciArPSBrS2V5U291cmNlU2l6ZU1vZGUzICsga0tleUluZGV4U2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29tbWFuZCBJRAorICAgIGlmICgoZmNmICYga0ZjZkZyYW1lVHlwZU1hc2spID09IGtGY2ZGcmFtZU1hY0NtZCkKKyAgICB7CisgICAgICAgIGN1ciArPSBrQ29tbWFuZElkU2l6ZTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGN1cjsKK30KKwordWludDhfdCAqRnJhbWU6OkdldEZvb3Rlcih2b2lkKQoreworICAgIHJldHVybiBHZXRQc2R1KCkgKyBHZXRQc2R1TGVuZ3RoKCkgLSBHZXRGb290ZXJMZW5ndGgoKTsKK30KKworY29uc3QgY2hhciAqRnJhbWU6OlRvSW5mb1N0cmluZyhjaGFyICphQnVmLCB1aW50MTZfdCBhU2l6ZSkKK3sKKyAgICB1aW50OF90IHR5cGUsIGNvbW1hbmRJZDsKKyAgICBBZGRyZXNzIHNyYywgZHN0OworICAgIGNvbnN0IGNoYXIgKnR5cGVTdHI7CisgICAgY2hhciBzdHJpbmdCdWZmZXJbMTBdOworICAgIGNoYXIgc3JjU3RyaW5nQnVmZmVyW0FkZHJlc3M6OmtBZGRyZXNzU3RyaW5nU2l6ZV07CisgICAgY2hhciBkc3RTdHJpbmdCdWZmZXJbQWRkcmVzczo6a0FkZHJlc3NTdHJpbmdTaXplXTsKKworICAgIHR5cGUgPSBHZXRUeXBlKCk7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgIGNhc2Uga0ZjZkZyYW1lQmVhY29uOgorICAgICAgICB0eXBlU3RyID0gIkJlYWNvbiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrRmNmRnJhbWVEYXRhOgorICAgICAgICB0eXBlU3RyID0gIkRhdGEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0ZjZkZyYW1lQWNrOgorICAgICAgICB0eXBlU3RyID0gIkFjayI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrRmNmRnJhbWVNYWNDbWQ6CisgICAgICAgIGlmIChHZXRDb21tYW5kSWQoY29tbWFuZElkKSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBjb21tYW5kSWQgPSAweGZmOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChjb21tYW5kSWQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBrTWFjQ21kRGF0YVJlcXVlc3Q6CisgICAgICAgICAgICB0eXBlU3RyID0gIkNtZChEYXRhUmVxKSI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtNYWNDbWRCZWFjb25SZXF1ZXN0OgorICAgICAgICAgICAgdHlwZVN0ciA9ICJDbWQoQmVhY29uUmVxKSI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc25wcmludGYoc3RyaW5nQnVmZmVyLCBzaXplb2Yoc3RyaW5nQnVmZmVyKSwgIkNtZCglZCkiLCBjb21tYW5kSWQpOworICAgICAgICAgICAgdHlwZVN0ciA9IHN0cmluZ0J1ZmZlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbnByaW50ZihzdHJpbmdCdWZmZXIsIHNpemVvZihzdHJpbmdCdWZmZXIpLCAiJWQiLCB0eXBlKTsKKyAgICAgICAgdHlwZVN0ciA9IHN0cmluZ0J1ZmZlcjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKEdldFNyY0FkZHIoc3JjKSAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgc3JjLm1MZW5ndGggPSAwOworICAgIH0KKworICAgIGlmIChHZXREc3RBZGRyKGRzdCkgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGRzdC5tTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICBzbnByaW50ZihhQnVmLCBhU2l6ZSwgImxlbjolZCwgc2VxbnVtOiVkLCB0eXBlOiVzLCBzcmM6JXMsIGRzdDolcywgc2VjOiVzLCBhY2tyZXE6JXMiLCBHZXRMZW5ndGgoKSwgR2V0U2VxdWVuY2UoKSwKKyAgICAgICAgICAgICB0eXBlU3RyLCBzcmMuVG9TdHJpbmcoc3JjU3RyaW5nQnVmZmVyLCBzaXplb2Yoc3JjU3RyaW5nQnVmZmVyKSksCisgICAgICAgICAgICAgZHN0LlRvU3RyaW5nKGRzdFN0cmluZ0J1ZmZlciwgc2l6ZW9mKGRzdFN0cmluZ0J1ZmZlcikpLCBHZXRTZWN1cml0eUVuYWJsZWQoKSA/ICJ5ZXMiIDogIm5vIiwKKyAgICAgICAgICAgICBHZXRBY2tSZXF1ZXN0KCkgPyAieWVzIiA6ICJubyIpOworCisgICAgcmV0dXJuIGFCdWY7Cit9CisKK2NvbnN0IGNoYXIgKkJlYWNvblBheWxvYWQ6OlRvSW5mb1N0cmluZyhjaGFyICphQnVmLCB1aW50MTZfdCBhU2l6ZSkKK3sKKyAgICBjb25zdCB1aW50OF90ICp4cGFuaWQgPSBHZXRFeHRlbmRlZFBhbklkKCk7CisKKyAgICBzbnByaW50ZihhQnVmLCBhU2l6ZSwgIm5hbWU6JXMsIHhwYW5pZDolMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCwgaWQ6JWQgdmVyOiVkLCBqb2luYWJsZTolcywgbmF0aXZlOiVzIiwKKyAgICAgICAgICAgICBHZXROZXR3b3JrTmFtZSgpLCB4cGFuaWRbMF0sIHhwYW5pZFsxXSwgeHBhbmlkWzJdLCB4cGFuaWRbM10sIHhwYW5pZFs0XSwgeHBhbmlkWzVdLCB4cGFuaWRbNl0sIHhwYW5pZFs3XSwKKyAgICAgICAgICAgICBHZXRQcm90b2NvbElkKCksIEdldFByb3RvY29sVmVyc2lvbigpLCBJc0pvaW5pbmdQZXJtaXR0ZWQoKSA/ICJ5ZXMiIDogIm5vIiwgSXNOYXRpdmUoKSA/ICJ5ZXMiIDogIm5vIik7CisKKyAgICByZXR1cm4gYUJ1ZjsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfZnJhbWUuaHBwIGIvc3JjL2NvcmUvbWFjL21hY19mcmFtZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiN2M5OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21hYy9tYWNfZnJhbWUuaHBwCkBAIC0wLDAgKzEsOTg5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgZ2VuZXJhdGluZyBhbmQgcHJvY2Vzc2luZyBJRUVFIDgwMi4xNS40IE1BQyBmcmFtZXMuCisgKi8KKworI2lmbmRlZiBNQUNfRlJBTUVfSFBQXworI2RlZmluZSBNQUNfRlJBTUVfSFBQXworCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCituYW1lc3BhY2UgSXA2IHsgY2xhc3MgQWRkcmVzczsgfQorCituYW1lc3BhY2UgTWFjIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW1hYworICoKKyAqIEB7CisgKgorICovCisKK2VudW0KK3sKKyAgICBrU2hvcnRBZGRyQnJvYWRjYXN0ID0gMHhmZmZmLAorICAgIGtTaG9ydEFkZHJJbnZhbGlkID0gMHhmZmZlLAorICAgIGtQYW5JZEJyb2FkY2FzdCA9IDB4ZmZmZiwKK307CisKKy8qKgorICogVGhpcyB0eXBlIHJlcHJlc2VudHMgdGhlIElFRUUgODAyLjE1LjQgUEFOIElELgorICoKKyAqLwordHlwZWRlZiBvdFBhbklkIFBhbklkOworCisvKioKKyAqIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSBJRUVFIDgwMi4xNS40IFNob3J0IEFkZHJlc3MuCisgKgorICovCit0eXBlZGVmIG90U2hvcnRBZGRyZXNzIFNob3J0QWRkcmVzczsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqCisgKi8KK2NsYXNzIEV4dEFkZHJlc3M6IHB1YmxpYyBvdEV4dEFkZHJlc3MKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIEdyb3VwIGJpdCBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgZ3JvdXAgYml0IGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgZ3JvdXAgYml0IGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzR3JvdXAodm9pZCkgY29uc3QgeyByZXR1cm4gKG04WzBdICYga0dyb3VwRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgR3JvdXAgYml0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxvY2FsICBUUlVFIGlmIGdyb3VwIGFkZHJlc3MsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0R3JvdXAoYm9vbCBhR3JvdXApIHsKKyAgICAgICAgaWYgKGFHcm91cCkgeworICAgICAgICAgICAgbThbMF0gfD0ga0dyb3VwRmxhZzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG04WzBdICY9IH5rR3JvdXBGbGFnOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBMb2NhbCBiaXQgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIGxvY2FsIGJpdCBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIGxvY2FsIGJpdCBpcyBub3Qgc2V0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0xvY2FsKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChtOFswXSAmIGtMb2NhbEZsYWcpICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIExvY2FsIGJpdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMb2NhbCAgVFJVRSBpZiBsb2NhbGx5IGFkbWluaXN0ZXJlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMb2NhbChib29sIGFMb2NhbCkgeworICAgICAgICBpZiAoYUxvY2FsKSB7CisgICAgICAgICAgICBtOFswXSB8PSBrTG9jYWxGbGFnOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbThbMF0gJj0gfmtMb2NhbEZsYWc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyBhbiBJUHY2IEludGVyZmFjZSBJZGVudGlmaWVyIHRvIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJcEFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldChjb25zdCBJcDY6OkFkZHJlc3MgJmFJcEFkZHJlc3MpOworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtHcm91cEZsYWcgPSAxIDw8IDAsCisgICAgICAgIGtMb2NhbEZsYWcgPSAxIDw8IDEsCisgICAgfTsKK307CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhbiBJRUVFIDgwMi4xNS40IFNob3J0IG9yIEV4dGVuZGVkIEFkZHJlc3MuCisgKgorICovCitzdHJ1Y3QgQWRkcmVzcworeworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtBZGRyZXNzU3RyaW5nU2l6ZSA9IDE4LCAgICAgLy8vPCBNYXggY2hhcnMgbmVlZGVkIGZvciBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhZGRyZXNzIChAc2EgVG9TdHJpbmcoKSkuCisgICAgfTsKKworICAgIHVpbnQ4X3QgbUxlbmd0aDsgICAgICAgICAgICAgICAgIC8vLzwgTGVuZ3RoIG9mIGFkZHJlc3MgaW4gYnl0ZXMuCisgICAgdW5pb24KKyAgICB7CisgICAgICAgIFNob3J0QWRkcmVzcyBtU2hvcnRBZGRyZXNzOyAgLy8vPCBUaGUgSUVFRSA4MDIuMTUuNCBTaG9ydCBBZGRyZXNzLgorICAgICAgICBFeHRBZGRyZXNzIG1FeHRBZGRyZXNzOyAgICAgIC8vLzwgVGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29udmVydHMgYW4gYWRkcmVzcyBvYmplY3QgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFCdWYgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICAgYVNpemUgIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgY2hhciBzdHJpbmcgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqVG9TdHJpbmcoY2hhciAqYUJ1ZiwgdWludDE2X3QgYVNpemUpIGNvbnN0OworfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSUVFRSA4MDIuMTUuNCBNQUMgZnJhbWUgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBGcmFtZTogcHVibGljIG90UmFkaW9GcmFtZQoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNVFUgICAgICAgICAgICAgICAgICA9IDEyNywKKyAgICAgICAga0ZjZlNpemUgICAgICAgICAgICAgID0gc2l6ZW9mKHVpbnQxNl90KSwKKyAgICAgICAga0RzblNpemUgICAgICAgICAgICAgID0gc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICBrU2VjdXJpdHlDb250cm9sU2l6ZSAgPSBzaXplb2YodWludDhfdCksCisgICAgICAgIGtGcmFtZUNvdW50ZXJTaXplICAgICA9IHNpemVvZih1aW50MzJfdCksCisgICAgICAgIGtDb21tYW5kSWRTaXplICAgICAgICA9IHNpemVvZih1aW50OF90KSwKKyAgICAgICAga0Zjc1NpemUgICAgICAgICAgICAgID0gc2l6ZW9mKHVpbnQxNl90KSwKKworICAgICAgICBrRmNmRnJhbWVCZWFjb24gICAgICAgPSAwIDw8IDAsCisgICAgICAgIGtGY2ZGcmFtZURhdGEgICAgICAgICA9IDEgPDwgMCwKKyAgICAgICAga0ZjZkZyYW1lQWNrICAgICAgICAgID0gMiA8PCAwLAorICAgICAgICBrRmNmRnJhbWVNYWNDbWQgICAgICAgPSAzIDw8IDAsCisgICAgICAgIGtGY2ZGcmFtZVR5cGVNYXNrICAgICA9IDcgPDwgMCwKKyAgICAgICAga0ZjZlNlY3VyaXR5RW5hYmxlZCAgID0gMSA8PCAzLAorICAgICAgICBrRmNmRnJhbWVQZW5kaW5nICAgICAgPSAxIDw8IDQsCisgICAgICAgIGtGY2ZBY2tSZXF1ZXN0ICAgICAgICA9IDEgPDwgNSwKKyAgICAgICAga0ZjZlBhbmlkQ29tcHJlc3Npb24gID0gMSA8PCA2LAorICAgICAgICBrRmNmRHN0QWRkck5vbmUgICAgICAgPSAwIDw8IDEwLAorICAgICAgICBrRmNmRHN0QWRkclNob3J0ICAgICAgPSAyIDw8IDEwLAorICAgICAgICBrRmNmRHN0QWRkckV4dCAgICAgICAgPSAzIDw8IDEwLAorICAgICAgICBrRmNmRHN0QWRkck1hc2sgICAgICAgPSAzIDw8IDEwLAorICAgICAgICBrRmNmRnJhbWVWZXJzaW9uMjAwNiAgPSAxIDw8IDEyLAorICAgICAgICBrRmNmRnJhbWVWZXJzaW9uTWFzayAgPSAzIDw8IDEzLAorICAgICAgICBrRmNmU3JjQWRkck5vbmUgICAgICAgPSAwIDw8IDE0LAorICAgICAgICBrRmNmU3JjQWRkclNob3J0ICAgICAgPSAyIDw8IDE0LAorICAgICAgICBrRmNmU3JjQWRkckV4dCAgICAgICAgPSAzIDw8IDE0LAorICAgICAgICBrRmNmU3JjQWRkck1hc2sgICAgICAgPSAzIDw8IDE0LAorCisgICAgICAgIGtTZWNOb25lICAgICAgICAgICAgICA9IDAgPDwgMCwKKyAgICAgICAga1NlY01pYzMyICAgICAgICAgICAgID0gMSA8PCAwLAorICAgICAgICBrU2VjTWljNjQgICAgICAgICAgICAgPSAyIDw8IDAsCisgICAgICAgIGtTZWNNaWMxMjggICAgICAgICAgICA9IDMgPDwgMCwKKyAgICAgICAga1NlY0VuYyAgICAgICAgICAgICAgID0gNCA8PCAwLAorICAgICAgICBrU2VjRW5jTWljMzIgICAgICAgICAgPSA1IDw8IDAsCisgICAgICAgIGtTZWNFbmNNaWM2NCAgICAgICAgICA9IDYgPDwgMCwKKyAgICAgICAga1NlY0VuY01pYzEyOCAgICAgICAgID0gNyA8PCAwLAorICAgICAgICBrU2VjTGV2ZWxNYXNrICAgICAgICAgPSA3IDw8IDAsCisKKyAgICAgICAga01pYzBTaXplICAgICAgICAgICAgID0gMCwKKyAgICAgICAga01pYzMyU2l6ZSAgICAgICAgICAgID0gMzIgLyBDSEFSX0JJVCwKKyAgICAgICAga01pYzY0U2l6ZSAgICAgICAgICAgID0gNjQgLyBDSEFSX0JJVCwKKyAgICAgICAga01pYzEyOFNpemUgICAgICAgICAgID0gMTI4IC8gQ0hBUl9CSVQsCisgICAgICAgIGtNYXhNaWNTaXplICAgICAgICAgICA9IGtNaWMxMjhTaXplLAorCisgICAgICAgIGtLZXlJZE1vZGUwICAgICAgICAgICA9IDAgPDwgMywKKyAgICAgICAga0tleUlkTW9kZTEgICAgICAgICAgID0gMSA8PCAzLAorICAgICAgICBrS2V5SWRNb2RlMiAgICAgICAgICAgPSAyIDw8IDMsCisgICAgICAgIGtLZXlJZE1vZGUzICAgICAgICAgICA9IDMgPDwgMywKKyAgICAgICAga0tleUlkTW9kZU1hc2sgICAgICAgID0gMyA8PCAzLAorCisgICAgICAgIGtLZXlTb3VyY2VTaXplTW9kZTAgICA9IDAsCisgICAgICAgIGtLZXlTb3VyY2VTaXplTW9kZTEgICA9IDAsCisgICAgICAgIGtLZXlTb3VyY2VTaXplTW9kZTIgICA9IDQsCisgICAgICAgIGtLZXlTb3VyY2VTaXplTW9kZTMgICA9IDgsCisKKyAgICAgICAga0tleUluZGV4U2l6ZSAgICAgICAgID0gc2l6ZW9mKHVpbnQ4X3QpLAorCisgICAgICAgIGtNYWNDbWRBc3NvY2lhdGlvblJlcXVlc3QgICAgICAgICAgPSAxLAorICAgICAgICBrTWFjQ21kQXNzb2NpYXRpb25SZXNwb25zZSAgICAgICAgID0gMiwKKyAgICAgICAga01hY0NtZERpc2Fzc29jaWF0aW9uTm90aWZpY2F0aW9uICA9IDMsCisgICAgICAgIGtNYWNDbWREYXRhUmVxdWVzdCAgICAgICAgICAgICAgICAgPSA0LAorICAgICAgICBrTWFjQ21kUGFuaWRDb25mbGljdE5vdGlmaWNhdGlvbiAgID0gNSwKKyAgICAgICAga01hY0NtZE9ycGhhbk5vdGlmaWNhdGlvbiAgICAgICAgICA9IDYsCisgICAgICAgIGtNYWNDbWRCZWFjb25SZXF1ZXN0ICAgICAgICAgICAgICAgPSA3LAorICAgICAgICBrTWFjQ21kQ29vcmRpbmF0b3JSZWFsaWdubWVudCAgICAgID0gOCwKKyAgICAgICAga01hY0NtZEd0c1JlcXVlc3QgICAgICAgICAgICAgICAgICA9IDksCisKKyAgICAgICAga0luZm9TdHJpbmdTaXplID0gIDExMCwgICAvLy88IE1heCBjaGFycyBuZWVkZWQgZm9yIHRoZSBpbmZvIHN0cmluZyByZXByZXNlbnRhdGlvbiAoQHNhIFRvSW5mb1N0cmluZygpKS4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIE1BQyBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRmNmICAgICBUaGUgRnJhbWUgQ29udHJvbCBmaWVsZC4KKyAgICAgKiBAcGFyYW1baW5dICBhU2VjQ3RsICBUaGUgU2VjdXJpdHkgQ29udHJvbCBmaWVsZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgdGhlIE1BQyBoZWFkZXIuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEludmFsaWQgdmFsdWVzIGZvciBAcCBhRmNmIGFuZC9vciBAcCBhU2VjQ3RsLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBJbml0TWFjSGVhZGVyKHVpbnQxNl90IGFGY2YsIHVpbnQ4X3QgYVNlY0N0bCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB2YWxpZGF0ZXMgdGhlIGZyYW1lLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgIFN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlIE1BQyBoZWFkZXIuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9QQVJTRSAgIEZhaWxlZCB0byBwYXJzZSB0aHJvdWdoIHRoZSBNQUMgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBWYWxpZGF0ZVBzZHUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRUVFIDgwMi4xNS40IEZyYW1lIFR5cGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUVFRSA4MDIuMTUuNCBGcmFtZSBUeXBlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRUeXBlKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHNlY3VyaXR5IGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiBzZWN1cml0eSBpcyBlbmFibGVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHNlY3VyaXR5IGlzIG5vdCBlbmFibGVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBHZXRTZWN1cml0eUVuYWJsZWQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIEZyYW1lIFBlbmRpbmcgYml0IGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBGcmFtZSBQZW5kaW5nIGJpdCBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIEZyYW1lIFBlbmRpbmcgYml0IGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIEdldEZyYW1lUGVuZGluZyh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEZyYW1lIFBlbmRpbmcgYml0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lUGVuZGluZyAgVGhlIEZyYW1lIFBlbmRpbmcgYml0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRGcmFtZVBlbmRpbmcoYm9vbCBhRnJhbWVQZW5kaW5nKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgQWNrIFJlcXVlc3QgYml0IGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBBY2sgUmVxdWVzdCBiaXQgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBBY2sgUmVxdWVzdCBiaXQgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgR2V0QWNrUmVxdWVzdCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEFjayBSZXF1ZXN0IGJpdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBY2tSZXF1ZXN0ICBUaGUgQWNrIFJlcXVlc3QgYml0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRBY2tSZXF1ZXN0KGJvb2wgYUFja1JlcXVlc3QpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU2VxdWVuY2UgTnVtYmVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFNlcXVlbmNlIE51bWJlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0U2VxdWVuY2Uodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTZXF1ZW5jZSBOdW1iZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VxdWVuY2UgIFRoZSBTZXF1ZW5jZSBOdW1iZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlcXVlbmNlKHVpbnQ4X3QgYVNlcXVlbmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIERlc3RpbmF0aW9uIFBBTiBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFQYW5JZCAgVGhlIERlc3RpbmF0aW9uIFBBTiBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgRGVzdGluYXRpb24gUEFOIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldERzdFBhbklkKFBhbklkICZhUGFuSWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGVzdGluYXRpb24gUEFOIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgIFRoZSBEZXN0aW5hdGlvbiBQQU4gSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIERlc3RpbmF0aW9uIFBBTiBJZGVudGlmaWVyLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXREc3RQYW5JZChQYW5JZCBhUGFuSWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgRGVzdGluYXRpb24gQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhQWRkcmVzcyAgVGhlIERlc3RpbmF0aW9uIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIERlc3RpbmF0aW9uIEFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldERzdEFkZHIoQWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGVzdGluYXRpb24gQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTaG9ydEFkZHJlc3MgIFRoZSBEZXN0aW5hdGlvbiBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBEZXN0aW5hdGlvbiBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXREc3RBZGRyKFNob3J0QWRkcmVzcyBhU2hvcnRBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERlc3RpbmF0aW9uIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgVGhlIERlc3RpbmF0aW9uIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIERlc3RpbmF0aW9uIEFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldERzdEFkZHIoY29uc3QgRXh0QWRkcmVzcyAmYUV4dEFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgU291cmNlIFBBTiBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFQYW5JZCAgVGhlIFNvdXJjZSBQQU4gSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIFNvdXJjZSBQQU4gSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0U3JjUGFuSWQoUGFuSWQgJmFQYW5JZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTb3VyY2UgUEFOIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgIFRoZSBTb3VyY2UgUEFOIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBTb3VyY2UgUEFOIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFNyY1BhbklkKFBhbklkIGFQYW5JZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhQWRkcmVzcyAgVGhlIFNvdXJjZSBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0U3JjQWRkcihBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTaG9ydEFkZHJlc3MgIFRoZSBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgU291cmNlIEFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFNyY0FkZHIoU2hvcnRBZGRyZXNzIGFTaG9ydEFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgU291cmNlIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgVGhlIFNvdXJjZSBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0U3JjQWRkcihjb25zdCBFeHRBZGRyZXNzICZhRXh0QWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBTZWN1cml0eSBMZXZlbCBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFTZWN1cml0eUxldmVsICBUaGUgU2VjdXJpdHkgTGV2ZWwgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgU2VjdXJpdHkgTGV2ZWwgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0U2VjdXJpdHlMZXZlbCh1aW50OF90ICZhU2VjdXJpdHlMZXZlbCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBLZXkgSWRlbnRpZmllciBNb2RlLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFTZWN1cml0eUxldmVsICBUaGUgS2V5IElkZW50aWZpZXIgTW9kZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgS2V5IElkZW50aWZpZXIgTW9kZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0S2V5SWRNb2RlKHVpbnQ4X3QgJmFLZXlJZE1vZGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgRnJhbWUgQ291bnRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhRnJhbWVDb3VudGVyICBUaGUgRnJhbWUgQ291bnRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgRnJhbWUgQ291bnRlci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0RnJhbWVDb3VudGVyKHVpbnQzMl90ICZhRnJhbWVDb3VudGVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEZyYW1lIENvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWVDb3VudGVyICBUaGUgRnJhbWUgQ291bnRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgRnJhbWUgQ291bnRlci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0RnJhbWVDb3VudGVyKHVpbnQzMl90IGFGcmFtZUNvdW50ZXIpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEtleSBTb3VyY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIEtleSBTb3VyY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRLZXlTb3VyY2Uodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBLZXkgU291cmNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUtleVNvdXJjZSAgQSBwb2ludGVyIHRvIHRoZSBLZXkgU291cmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRLZXlTb3VyY2UoY29uc3QgdWludDhfdCAqYUtleVNvdXJjZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBLZXkgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhS2V5SWQgIFRoZSBLZXkgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgS2V5IElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldEtleUlkKHVpbnQ4X3QgJmFLZXlJZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBLZXkgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXlJZCAgVGhlIEtleSBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBLZXkgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0S2V5SWQodWludDhfdCBhS2V5SWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgQ29tbWFuZCBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhQ29tbWFuZElkICBUaGUgQ29tbWFuZCBJRC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgQ29tbWFuZCBJRC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0Q29tbWFuZElkKHVpbnQ4X3QgJmFDb21tYW5kSWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ29tbWFuZCBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb21tYW5kSWQgIFRoZSBDb21tYW5kIElELgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBDb21tYW5kIElELgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRDb21tYW5kSWQodWludDhfdCBhQ29tbWFuZElkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1BQyBGcmFtZSBMZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTUFDIEZyYW1lIExlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldFBzZHVMZW5ndGgoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTUFDIEZyYW1lIExlbmd0aC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBNQUMgRnJhbWUgTGVuZ3RoLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIE1BQyBGcmFtZSBMZW5ndGguCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBAcCBhTGVuZ3RoIHZhbHVlIHdhcyBpbnZhbGlkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRMZW5ndGgodWludDhfdCBhTGVuZ3RoKSB7IFNldFBzZHVMZW5ndGgoYUxlbmd0aCk7IHJldHVybiBPVF9FUlJPUl9OT05FOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNQUMgaGVhZGVyIHNpemUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTUFDIGhlYWRlciBzaXplLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRIZWFkZXJMZW5ndGgodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNQUMgZm9vdGVyIHNpemUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTUFDIGZvb3RlciBzaXplLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRGb290ZXJMZW5ndGgodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IE1BQyBQYXlsb2FkIGxlbmd0aC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IE1BQyBQYXlsb2FkIGxlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0UGF5bG9hZExlbmd0aCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG1heGltdW0gTUFDIFBheWxvYWQgbGVuZ3RoIGZvciB0aGUgZ2l2ZW4gTUFDIGhlYWRlciBhbmQgZm9vdGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG1heGltdW0gTUFDIFBheWxvYWQgbGVuZ3RoIGZvciB0aGUgZ2l2ZW4gTUFDIGhlYWRlciBhbmQgZm9vdGVyLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRNYXhQYXlsb2FkTGVuZ3RoKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTUFDIFBheWxvYWQgbGVuZ3RoLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIE1BQyBQYXlsb2FkIGxlbmd0aC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIEBwIGFMZW5ndGggdmFsdWUgd2FzIGludmFsaWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFBheWxvYWRMZW5ndGgodWludDhfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgY2hhbm5lbCB1c2VkIGZvciB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElFRUUgODAyLjE1LjQgY2hhbm5lbCB1c2VkIGZvciB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRDaGFubmVsKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1DaGFubmVsOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJRUVFIDgwMi4xNS40IGNoYW5uZWwgdXNlZCBmb3IgdHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsICBUaGUgSUVFRSA4MDIuMTUuNCBjaGFubmVsIHVzZWQgZm9yIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENoYW5uZWwodWludDhfdCBhQ2hhbm5lbCkgeyBtQ2hhbm5lbCA9IGFDaGFubmVsOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0cmFuc21pdC9yZWNlaXZlIHBvd2VyIGluIGRCbSB1c2VkIGZvciB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHRyYW5zbWl0L3JlY2VpdmUgcG93ZXIgaW4gZEJtIHVzZWQgZm9yIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQ4X3QgR2V0UG93ZXIodm9pZCkgY29uc3QgeyByZXR1cm4gbVBvd2VyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSB0cmFuc21pdC9yZWNlaXZlIHBvd2VyIGluIGRCbSB1c2VkIGZvciB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvd2VyICBUaGUgdHJhbnNtaXQvcmVjZWl2ZSBwb3dlciBpbiBkQm0gdXNlZCBmb3IgdHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UG93ZXIoaW50OF90IGFQb3dlcikgeyBtUG93ZXIgPSBhUG93ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJlY2VpdmUgTGluayBRdWFsaXR5IEluZGljYXRvci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSByZWNlaXZlIExpbmsgUXVhbGl0eSBJbmRpY2F0b3IuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExxaSh2b2lkKSBjb25zdCB7IHJldHVybiBtTHFpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSByZWNlaXZlIExpbmsgUXVhbGl0eSBJbmRpY2F0b3IuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTHFpICBUaGUgcmVjZWl2ZSBMaW5rIFF1YWxpdHkgSW5kaWNhdG9yLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMcWkodWludDhfdCBhTHFpKSB7IG1McWkgPSBhTHFpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0cmFuc21pdCBhdHRlbXB0cyBmb3IgdGhlIGZyYW1lLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRyYW5zbWl0IGF0dGVtcHRzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRNYXhUeEF0dGVtcHRzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NYXhUeEF0dGVtcHRzOyB9CisKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdHJhbnNtaXQgYXR0ZW1wdHMgZm9yIGZyYW1lLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRyYW5zbWl0IGF0dGVtcHRzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYXhUeEF0dGVtcHRzKHVpbnQ4X3QgYU1heFR4QXR0ZW1wdHMpIHsgbU1heFR4QXR0ZW1wdHMgPSBhTWF4VHhBdHRlbXB0czsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGZyYW1lIHNlY3VyaXR5IHdhcyBlbmFibGVkIGFuZCBwYXNzZWQgc2VjdXJpdHkgdmFsaWRhdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIEZyYW1lIHNlY3VyaXR5IHdhcyBlbmFibGVkIGFuZCBwYXNzZWQgc2VjdXJpdHkgdmFsaWRhdGlvbi4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBGcmFtZSBzZWN1cml0eSB3YXMgbm90IGVuYWJsZWQgb3IgZGlkIG5vdCBwYXNzIHNlY3VyaXR5IHZhbGlkYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIEdldFNlY3VyaXR5VmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlY3VyaXR5VmFsaWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHNlY3VyaXR5IHZhbGlkIGF0dHJpYnV0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZWN1cml0eVZhbGlkICBUUlVFIGlmIGZyYW1lIHNlY3VyaXR5IHdhcyBlbmFibGVkIGFuZCBwYXNzZWQgc2VjdXJpdHkgdmFsaWRhdGlvbiwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWN1cml0eVZhbGlkKGJvb2wgYVNlY3VyaXR5VmFsaWQpIHsgbVNlY3VyaXR5VmFsaWQgPSBhU2VjdXJpdHlWYWxpZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyBhIHJldHJhbnNtaXNzaW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgRnJhbWUgaXMgYSByZXRyYW5zbWlzc2lvbgorICAgICAqIEByZXR2YWwgRkFMU0UgIFRoaXMgaXMgYSBuZXcgZnJhbWUgYW5kIG5vdCBhIHJldHJhbnNtaXNzaW9uIG9mIGFuIGVhcmxpZXIgZnJhbWUuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQVJldHJhbnNtaXNzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Jc0FSZXR4OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSByZXRyYW5zbWlzc2lvbiBmbGFnIGF0dHJpYnV0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJc0FSZXR4ICBUUlVFIGlmIGZyYW1lIGlzIGEgcmV0cmFuc21pc3Npb24gb2YgYW4gZWFybGllciBmcmFtZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJc0FSZXRyYW5zbWlzc2lvbihib29sIGFJc0FSZXR4KSB7IG1Jc0FSZXR4ID0gYUlzQVJldHg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgUFNEVSBsZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUVFRSA4MDIuMTUuNCBQU0RVIGxlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0UHNkdUxlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJRUVFIDgwMi4xNS40IFBTRFUgbGVuZ3RoLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgVGhlIElFRUUgODAyLjE1LjQgUFNEVSBsZW5ndGguCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBzZHVMZW5ndGgodWludDhfdCBhTGVuZ3RoKSB7IG1MZW5ndGggPSBhTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgUFNEVS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgUFNEVS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldFBzZHUodm9pZCkgeyByZXR1cm4gbVBzZHU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBNQUMgSGVhZGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBNQUMgSGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCAqR2V0SGVhZGVyKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIE1BQyBQYXlsb2FkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBNQUMgUGF5bG9hZC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldFBheWxvYWQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgTUFDIEZvb3Rlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgTUFDIEZvb3Rlci4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldEZvb3Rlcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZyYW1lIG9iamVjdCBhcyBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYUJ1ZiAgIEEgcG9pbnRlciB0byB0aGUgc3RyaW5nIGJ1ZmZlcgorICAgICAqIEBwYXJhbVtpbl0gICBhU2l6ZSAgVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RyaW5nIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgY2hhciBzdHJpbmcgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqVG9JbmZvU3RyaW5nKGNoYXIgKmFCdWYsIHVpbnQxNl90IGFTaXplKTsKKworcHJpdmF0ZToKKyAgICB1aW50OF90ICpGaW5kU2VxdWVuY2Uodm9pZCk7CisgICAgdWludDhfdCAqRmluZERzdFBhbklkKHZvaWQpOworICAgIHVpbnQ4X3QgKkZpbmREc3RBZGRyKHZvaWQpOworICAgIHVpbnQ4X3QgKkZpbmRTcmNQYW5JZCh2b2lkKTsKKyAgICB1aW50OF90ICpGaW5kU3JjQWRkcih2b2lkKTsKKyAgICB1aW50OF90ICpGaW5kU2VjdXJpdHlIZWFkZXIodm9pZCk7CisgICAgc3RhdGljIHVpbnQ4X3QgR2V0S2V5U291cmNlTGVuZ3RoKHVpbnQ4X3QgYUtleUlkTW9kZSk7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEJlYWNvbgoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtTdXBlckZyYW1lU3BlYyAgID0gMHgwZmZmLCAgICAgICAgICAgICAgICAgLy8vPCBTdXBlcmZyYW1lIFNwZWNpZmljYXRpb24gdmFsdWUuCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBCZWFjb24gbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7CisgICAgICAgIG1TdXBlcmZyYW1lU3BlYyA9IG90OjpFbmNvZGluZzo6TGl0dGxlRW5kaWFuOjpIb3N0U3dhcDE2KGtTdXBlckZyYW1lU3BlYyk7CisgICAgICAgIG1HdHNTcGVjID0gMDsKKyAgICAgICAgbVBlbmRpbmdBZGRyZXNzU3BlYyA9IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBiZWFjb24gYXBwZWFycyB0byBiZSBhIHZhbGlkIFRocmVhZCBCZWFjb24gbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgaWYgdGhlIGJlYWNvbiBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgVGhyZWFkIEJlYWNvbiBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgRkFMU0UgaWYgdGhlIGJlYWNvbiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCBUaHJlYWQgQmVhY29uIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgeworICAgICAgICByZXR1cm4gKG1TdXBlcmZyYW1lU3BlYyA9PSBvdDo6RW5jb2Rpbmc6OkxpdHRsZUVuZGlhbjo6SG9zdFN3YXAxNihrU3VwZXJGcmFtZVNwZWMpKSAmJgorICAgICAgICAgICAgICAgKG1HdHNTcGVjID09IDApICYmIChtUGVuZGluZ0FkZHJlc3NTcGVjID09IDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIGJlYWNvbiBwYXlsb2FkIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIEEgcG9pbnRlciB0byB0aGUgYmVhY29uIHBheWxvYWQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldFBheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4odGhpcykgKyBzaXplb2YoKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbVN1cGVyZnJhbWVTcGVjOworICAgIHVpbnQ4X3QgIG1HdHNTcGVjOworICAgIHVpbnQ4X3QgIG1QZW5kaW5nQWRkcmVzc1NwZWM7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSUVFRSA4MDIuMTUuNCBCZWFjb24gUGF5bG9hZCBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEJlYWNvblBheWxvYWQKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrUHJvdG9jb2xJZCAgICAgICA9IDMsICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVGhyZWFkIFByb3RvY29sIElELgorICAgICAgICBrTmV0d29ya05hbWVTaXplICA9IDE2LCAgICAgICAgICAgICAgICAgICAgIC8vLzwgU2l6ZSBvZiBUaHJlYWQgTmV0d29yayBOYW1lIChieXRlcykuCisgICAgICAgIGtFeHRQYW5JZFNpemUgICAgID0gOCwgICAgICAgICAgICAgICAgICAgICAgLy8vPCBTaXplIG9mIFRocmVhZCBFeHRlbmRlZCBQQU4gSUQuCisgICAgICAgIGtJbmZvU3RyaW5nU2l6ZSAgID0gOTIsICAgICAgICAgICAgICAgICAgICAgLy8vPCBNYXggY2hhcnMgZm9yIHRoZSBpbmZvIHN0cmluZyAoQHNhIFRvSW5mb1N0cmluZygpKS4KKyAgICB9OworCisgICAgZW51bQorICAgIHsKKyAgICAgICAga1Byb3RvY29sVmVyc2lvbiAgPSAyLCAgICAgICAgICAgICAgICAgICAgICAvLy88IFRocmVhZCBQcm90b2NvbCB2ZXJzaW9uLgorICAgICAgICBrVmVyc2lvbk9mZnNldCAgICA9IDQsICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVmVyc2lvbiBmaWVsZCBiaXQgb2Zmc2V0LgorICAgICAgICBrVmVyc2lvbk1hc2sgICAgICA9IDB4ZiA8PCBrVmVyc2lvbk9mZnNldCwgIC8vLzwgVmVyc2lvbiBmaWVsZCBtYXNrLgorICAgICAgICBrTmF0aXZlRmxhZyAgICAgICA9IDEgPDwgMywgICAgICAgICAgICAgICAgIC8vLzwgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnLgorICAgICAgICBrSm9pbmluZ0ZsYWcgICAgICA9IDEgPDwgMCwgICAgICAgICAgICAgICAgIC8vLzwgSm9pbmluZyBQZXJtaXR0ZWQgZmxhZy4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIEJlYWNvbiBQYXlsb2FkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsKKyAgICAgICAgbVByb3RvY29sSWQgPSBrUHJvdG9jb2xJZDsKKyAgICAgICAgbUZsYWdzID0ga1Byb3RvY29sVmVyc2lvbiA8PCBrVmVyc2lvbk9mZnNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGJlYWNvbiBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgVGhyZWFkIEJlYWNvbiBQYXlsb2FkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICBpZiB0aGUgYmVhY29uIGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBUaHJlYWQgQmVhY29uIFBheWxvYWQuCisgICAgICogQHJldHZhbCBGQUxTRSBpZiB0aGUgYmVhY29uIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIFRocmVhZCBCZWFjb24gUGF5bG9hZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSB7CisgICAgICAgIHJldHVybiAobVByb3RvY29sSWQgPT0ga1Byb3RvY29sSWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFByb3RvY29sIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgdGhlIFByb3RvY29sIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRQcm90b2NvbElkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Qcm90b2NvbElkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQcm90b2NvbCBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFByb3RvY29sIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFByb3RvY29sVmVyc2lvbih2b2lkKSBjb25zdCB7IHJldHVybiBtRmxhZ3MgPj4ga1ZlcnNpb25PZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnIGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIGlmIHRoZSBOYXRpdmUgQ29tbWlzc2lvbmVyIGZsYWcgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIGlmIHRoZSBOYXRpdmUgQ29tbWlzc2lvbmVyIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNOYXRpdmUodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFncyAmIGtOYXRpdmVGbGFnKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIE5hdGl2ZSBDb21taXNzaW9uZXIgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJOYXRpdmUodm9pZCkgeyBtRmxhZ3MgJj0gfmtOYXRpdmVGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBOYXRpdmUgQ29tbWlzc2lvbmVyIGZsYWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5hdGl2ZSh2b2lkKSB7IG1GbGFncyB8PSBrTmF0aXZlRmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBKb2luaW5nIFBlcm1pdHRlZCBmbGFnIGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIGlmIHRoZSBKb2luaW5nIFBlcm1pdHRlZCBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBpZiB0aGUgSm9pbmluZyBQZXJtaXR0ZWQgZmxhZyBpcyBub3Qgc2V0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0pvaW5pbmdQZXJtaXR0ZWQodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFncyAmIGtKb2luaW5nRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBKb2luaW5nIFBlcm1pdHRlZCBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckpvaW5pbmdQZXJtaXR0ZWQodm9pZCkgeyBtRmxhZ3MgJj0gfmtKb2luaW5nRmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSm9pbmluZyBQZXJtaXR0ZWQgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Sm9pbmluZ1Blcm1pdHRlZCh2b2lkKSB7CisgICAgICAgIG1GbGFncyB8PSBrSm9pbmluZ0ZsYWc7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19KT0lOX0JFQUNPTl9WRVJTSU9OICE9IGtQcm90b2NvbFZlcnNpb24KKyAgICAgICAgbUZsYWdzICY9IH5rVmVyc2lvbk1hc2s7CisgICAgICAgIG1GbGFncyB8PSAgT1BFTlRIUkVBRF9DT05GSUdfSk9JTl9CRUFDT05fVkVSU0lPTiA8PCBrVmVyc2lvbk9mZnNldDsKKyNlbmRpZgorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIE5hbWUgZmllbGQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgbmFtZSBmaWVsZC4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IGNoYXIgKkdldE5ldHdvcmtOYW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1OZXR3b3JrTmFtZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTmV0d29yayBOYW1lIGZpZWxkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5ldHdvcmtOYW1lICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgTmFtZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TmV0d29ya05hbWUoY29uc3QgY2hhciAqYU5ldHdvcmtOYW1lKSB7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJubGVuKGFOZXR3b3JrTmFtZSwgc2l6ZW9mKG1OZXR3b3JrTmFtZSkpOworICAgICAgICBtZW1zZXQobU5ldHdvcmtOYW1lLCAwLCBzaXplb2YobU5ldHdvcmtOYW1lKSk7CisgICAgICAgIG1lbWNweShtTmV0d29ya05hbWUsIGFOZXR3b3JrTmFtZSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgRXh0ZW5kZWQgUEFOIElEIGZpZWxkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBFeHRlbmRlZCBQQU4gSUQgZmllbGQuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRFeHRlbmRlZFBhbklkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbmRlZFBhbklkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBFeHRlbmRlZCBQQU4gSUQgZmllbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRXh0UGFuSWQgIEEgcG9pbnRlciB0byB0aGUgRXh0ZW5kZWQgUEFOIElELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRFeHRlbmRlZFBhbklkKGNvbnN0IHVpbnQ4X3QgKmFFeHRQYW5JZCkgeyBtZW1jcHkobUV4dGVuZGVkUGFuSWQsIGFFeHRQYW5JZCwgc2l6ZW9mKG1FeHRlbmRlZFBhbklkKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJlYWNvbiBhcyBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYUJ1ZiAgIEEgcG9pbnRlciB0byB0aGUgc3RyaW5nIGJ1ZmZlcgorICAgICAqIEBwYXJhbVtpbl0gICBhU2l6ZSAgVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RyaW5nIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgY2hhciBzdHJpbmcgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqVG9JbmZvU3RyaW5nKGNoYXIgKmFCdWYsIHVpbnQxNl90IGFTaXplKTsKKworcHJpdmF0ZToKKyAgICB1aW50OF90ICBtUHJvdG9jb2xJZDsKKyAgICB1aW50OF90ICBtRmxhZ3M7CisgICAgY2hhciAgICAgbU5ldHdvcmtOYW1lW2tOZXR3b3JrTmFtZVNpemVdOworICAgIHVpbnQ4X3QgIG1FeHRlbmRlZFBhbklkW2tFeHRQYW5JZFNpemVdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUFDX0ZSQU1FX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0LmNwcCBiL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODhkMGEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWFjL21hY193aGl0ZWxpc3QuY3BwCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHdoaXRlbGlzdCBJRUVFIDgwMi4xNS40IGZyYW1lIGZpbHRlcmluZyBiYXNlZCBvbiBNQUMgYWRkcmVzcy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm1hY193aGl0ZWxpc3QuaHBwIgorCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNYWMgeworCitXaGl0ZWxpc3Q6OldoaXRlbGlzdCh2b2lkKQoreworICAgIG1FbmFibGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBtV2hpdGVsaXN0W2ldLm1WYWxpZCA9IGZhbHNlOworICAgIH0KK30KKworb3RFcnJvciBXaGl0ZWxpc3Q6OkdldEVudHJ5KHVpbnQ4X3QgYUluZGV4LCBFbnRyeSAmYUVudHJ5KSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbmRleCA8IGtNYXhFbnRyaWVzLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBtZW1jcHkoJmFFbnRyeS5tRXh0QWRkcmVzcywgJm1XaGl0ZWxpc3RbYUluZGV4XS5tRXh0QWRkcmVzcywgc2l6ZW9mKGFFbnRyeS5tRXh0QWRkcmVzcykpOworICAgIGFFbnRyeS5tUnNzaSA9IG1XaGl0ZWxpc3RbYUluZGV4XS5tUnNzaTsKKyAgICBhRW50cnkubVZhbGlkID0gbVdoaXRlbGlzdFthSW5kZXhdLm1WYWxpZDsKKyAgICBhRW50cnkubUZpeGVkUnNzaSA9IG1XaGl0ZWxpc3RbYUluZGV4XS5tRml4ZWRSc3NpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworV2hpdGVsaXN0OjpFbnRyeSAqV2hpdGVsaXN0OjpBZGQoY29uc3QgRXh0QWRkcmVzcyAmYWRkcmVzcykKK3sKKyAgICBFbnRyeSAqcnZhbDsKKworICAgIFZlcmlmeU9yRXhpdCgocnZhbCA9IEZpbmQoYWRkcmVzcykpID09IE5VTEwpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4RW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1XaGl0ZWxpc3RbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSgmbVdoaXRlbGlzdFtpXS5tRXh0QWRkcmVzcywgJmFkZHJlc3MsIHNpemVvZihtV2hpdGVsaXN0W2ldLm1FeHRBZGRyZXNzKSk7CisgICAgICAgIG1XaGl0ZWxpc3RbaV0ubVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgbVdoaXRlbGlzdFtpXS5tRml4ZWRSc3NpID0gZmFsc2U7CisgICAgICAgIEV4aXROb3cocnZhbCA9ICZtV2hpdGVsaXN0W2ldKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgV2hpdGVsaXN0OjpDbGVhcih2b2lkKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga01heEVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIG1XaGl0ZWxpc3RbaV0ubVZhbGlkID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFdoaXRlbGlzdDo6UmVtb3ZlKGNvbnN0IEV4dEFkZHJlc3MgJmFkZHJlc3MpCit7CisgICAgRW50cnkgKmVudHJ5OworCisgICAgVmVyaWZ5T3JFeGl0KChlbnRyeSA9IEZpbmQoYWRkcmVzcykpICE9IE5VTEwpOworICAgIG1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworV2hpdGVsaXN0OjpFbnRyeSAqV2hpdGVsaXN0OjpGaW5kKGNvbnN0IEV4dEFkZHJlc3MgJmFkZHJlc3MpCit7CisgICAgRW50cnkgKnJ2YWwgPSBOVUxMOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4RW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtV2hpdGVsaXN0W2ldLm1WYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWVtY21wKCZtV2hpdGVsaXN0W2ldLm1FeHRBZGRyZXNzLCAmYWRkcmVzcywgc2l6ZW9mKG1XaGl0ZWxpc3RbaV0ubUV4dEFkZHJlc3MpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSAmbVdoaXRlbGlzdFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgV2hpdGVsaXN0OjpDbGVhckZpeGVkUnNzaShFbnRyeSAmYUVudHJ5KQoreworICAgIGFFbnRyeS5tRml4ZWRSc3NpID0gZmFsc2U7Cit9CisKK290RXJyb3IgV2hpdGVsaXN0OjpHZXRGaXhlZFJzc2koRW50cnkgJmFFbnRyeSwgaW50OF90ICZyc3NpKSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFFbnRyeS5tVmFsaWQgJiYgYUVudHJ5Lm1GaXhlZFJzc2ksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICByc3NpID0gYUVudHJ5Lm1Sc3NpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBXaGl0ZWxpc3Q6OlNldEZpeGVkUnNzaShFbnRyeSAmYUVudHJ5LCBpbnQ4X3QgYVJzc2kpCit7CisgICAgYUVudHJ5Lm1GaXhlZFJzc2kgPSB0cnVlOworICAgIGFFbnRyeS5tUnNzaSA9IGFSc3NpOworfQorCit9ICAvLyBuYW1lc3BhY2UgTWFjCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0LmhwcCBiL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzVjNjRiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWFjL21hY193aGl0ZWxpc3QuaHBwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorI2luY2x1ZGUgIm1hY193aGl0ZWxpc3RfaW1wbC5ocHAiCisjZWxzZQorI2luY2x1ZGUgIm1hY193aGl0ZWxpc3Rfc3R1Yi5ocHAiCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0X2ltcGwuaHBwIGIvc3JjL2NvcmUvbWFjL21hY193aGl0ZWxpc3RfaW1wbC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjNTQ3NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0X2ltcGwuaHBwCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBmcmFtZSBmaWx0ZXJpbmcgYmFzZWQgb24gTUFDIGFkZHJlc3MuCisgKi8KKworI2lmbmRlZiBNQUNfV0hJVEVMSVNUX0hQUF8KKyNkZWZpbmUgTUFDX1dISVRFTElTVF9IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWFjIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW1hYworICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHdoaXRlbGlzdCBmaWx0ZXJpbmcgb24gSUVFRSA4MDIuMTUuNCBmcmFtZXMuCisgKgorICovCitjbGFzcyBXaGl0ZWxpc3QKK3sKK3B1YmxpYzoKKyAgICB0eXBlZGVmIG90TWFjV2hpdGVsaXN0RW50cnkgRW50cnk7CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4RW50cmllcyA9IE9QRU5USFJFQURfQ09ORklHX01BQ19XSElURUxJU1RfU0laRSwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgd2hpdGVsaXN0IGZpbHRlci4KKyAgICAgKgorICAgICAqLworICAgIFdoaXRlbGlzdCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgd2hpdGVsaXN0IGZpbHRlciBpcyBlbmFibGVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIHdoaXRlbGlzdCBmaWx0ZXIgaXMgZW5hYmxlZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgd2hpdGVsaXN0IGZpbHRlciBpcyBkaXNhYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNFbmFibGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1FbmFibGVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBlbmFibGVzIHRoZSB3aGl0ZWxpc3QgZmlsdGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVuYWJsZWQgIFRSVUUgdG8gZW5hYmxlIHRoZSB3aGl0ZWxpc3QgZmlsdGVyLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEVuYWJsZWQoYm9vbCBhRW5hYmxlZCkgeyBtRW5hYmxlZCA9IGFFbmFibGVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3aGl0ZWxpc3QgZW50cmllcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBtYXhpbXVtIG51bWJlciBvZiB3aGl0ZWxpc3QgZW50cmllcy4KKyAgICAgKgorICAgICAqLworICAgIGludCBHZXRNYXhFbnRyaWVzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGtNYXhFbnRyaWVzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIGEgd2hpdGVsaXN0IGVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFJbmRleCAgQW4gaW5kZXggaW50byB0aGUgTUFDIHdoaXRlbGlzdCB0YWJsZS4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYUVudHJ5ICBBIHJlZmVyZW5jZSB0byB3aGVyZSB0aGUgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIE1BQyB3aGl0ZWxpc3QgZW50cnkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFJbmRleCBpcyBvdXQgb2YgYm91bmRzIG9yIEBwIGFFbnRyeSBpcyBOVUxMLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRFbnRyeSh1aW50OF90IGFJbmRleCwgRW50cnkgJmFFbnRyeSkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGFuIEV4dGVuZGVkIEFkZHJlc3MgdG8gdGhlIHdoaXRlbGlzdCBmaWx0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIEV4dGVuZGVkIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIHdoaXRlbGlzdCBlbnRyeSBvciBOVUxMIGlmIHRoZXJlIGFyZSBubyBhdmFpbGFibGUgZW50cmllcy4KKyAgICAgKgorICAgICAqLworICAgIEVudHJ5ICpBZGQoY29uc3QgRXh0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbiBFeHRlbmRlZCBBZGRyZXNzIHRvIHRoZSB3aGl0ZWxpc3QgZmlsdGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmUoY29uc3QgRXh0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgZW50cmllcyBmcm9tIHRoZSB3aGl0ZWxpc3QgZmlsdGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZpbmRzIGEgd2hpdGVsaXN0IGVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSB3aGl0ZWxpc3QgZW50cnkgb3IgTlVMTCBpZiB0aGUgZW50cnkgY291bGQgbm90IGJlIGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgRW50cnkgKkZpbmQoY29uc3QgRXh0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBmaXhlZCBSU1NJIHZhbHVlIGFuZCB1c2VzIHRoZSBtZWFzdXJlZCB2YWx1ZSBwcm92aWRlZCBieSB0aGUgcmFkaW8gaW5zdGVhZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFbnRyeSAgQSByZWZlcmVuY2UgdG8gdGhlIHdoaXRlbGlzdCBlbnRyeS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJGaXhlZFJzc2koRW50cnkgJmFFbnRyeSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGZpeGVkIFJTU0kgaXMgc2V0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFFbnRyeSAgQSByZWZlcmVuY2UgdG8gdGhlIHdoaXRlbGlzdCBlbnRyeS4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYVJzc2kgICBBIHJlZmVyZW5jZSB0byB0aGUgUlNTSSB2YXJpYWJsZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBBIGZpeGVkIFJTU0kgaXMgc2V0IGFuZCB3cml0dGVuIHRvIEBwIGFSc3NpLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBBIGZpeGVkIFJTU0kgd2FzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldEZpeGVkUnNzaShFbnRyeSAmYUVudHJ5LCBpbnQ4X3QgJmFSc3NpKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgYSBmaXhlZCBSU1NJIHZhbHVlIGZvciBhbGwgcmVjZWl2ZWQgbWVzc2FnZXMgbWF0Y2hpbmcgQHAgYUVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVudHJ5ICBBIHJlZmVyZW5jZSB0byB0aGUgd2hpdGVsaXN0IGVudHJ5LgorICAgICAqIEBwYXJhbVtpbl0gIGFSc3NpICAgQW4gUlNTSSB2YWx1ZSBpbiBkQm0uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEZpeGVkUnNzaShFbnRyeSAmYUVudHJ5LCBpbnQ4X3QgYVJzc2kpOworCitwcml2YXRlOgorICAgIEVudHJ5IG1XaGl0ZWxpc3Rba01heEVudHJpZXNdOworCisgICAgYm9vbCBtRW5hYmxlZDsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUFDX1dISVRFTElTVF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tYWMvbWFjX3doaXRlbGlzdF9zdHViLmhwcCBiL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0X3N0dWIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYWM2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tYWMvbWFjX3doaXRlbGlzdF9zdHViLmhwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBmcmFtZSBmaWx0ZXJpbmcgYmFzZWQgb24gTUFDIGFkZHJlc3MuCisgKi8KKworI2lmbmRlZiBNQUNfV0hJVEVMSVNUX0hQUF8KKyNkZWZpbmUgTUFDX1dISVRFTElTVF9IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWFjIHsKKworY2xhc3MgV2hpdGVsaXN0Cit7CitwdWJsaWM6CisgICAgdHlwZWRlZiBvdE1hY1doaXRlbGlzdEVudHJ5IEVudHJ5OworCisgICAgV2hpdGVsaXN0KHZvaWQpIHsgfQorCisgICAgYm9vbCBJc0VuYWJsZWQodm9pZCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgU2V0RW5hYmxlZChib29sKSB7IH0KKworICAgIGludCBHZXRNYXhFbnRyaWVzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIG90RXJyb3IgR2V0RW50cnkodWludDhfdCwgRW50cnkgJikgY29uc3QgeyByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyB9CisKKyAgICBFbnRyeSAqQWRkKGNvbnN0IEV4dEFkZHJlc3MgJikgeyByZXR1cm4gTlVMTDsgfQorCisgICAgdm9pZCBSZW1vdmUoY29uc3QgRXh0QWRkcmVzcyAmKSB7IH0KKworICAgIHZvaWQgQ2xlYXIodm9pZCkgeyB9CisKKyAgICBFbnRyeSAqRmluZChjb25zdCBFeHRBZGRyZXNzICYpIHsgcmV0dXJuIE5VTEw7IH0KKworICAgIHZvaWQgQ2xlYXJGaXhlZFJzc2koRW50cnkgJikgeyB9CisKKyAgICBvdEVycm9yIEdldEZpeGVkUnNzaShFbnRyeSAmLCBpbnQ4X3QgJikgY29uc3QgeyByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyB9CisKKyAgICB2b2lkIFNldEZpeGVkUnNzaShFbnRyeSAmLCBpbnQ4X3QpIHsgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUFDX1dISVRFTElTVF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2Fubm91bmNlX2JlZ2luX2NsaWVudC5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2Fubm91bmNlX2JlZ2luX2NsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ5MDJjNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvYW5ub3VuY2VfYmVnaW5fY2xpZW50LmNwcApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgQW5ub3VuY2UgQmVnaW4gQ2xpZW50LgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImFubm91bmNlX2JlZ2luX2NsaWVudC50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiYW5ub3VuY2VfYmVnaW5fY2xpZW50LmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcC5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorCituYW1lc3BhY2Ugb3QgeworCitBbm5vdW5jZUJlZ2luQ2xpZW50OjpBbm5vdW5jZUJlZ2luQ2xpZW50KFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpCit7Cit9CisKK290RXJyb3IgQW5ub3VuY2VCZWdpbkNsaWVudDo6U2VuZFJlcXVlc3QodWludDMyX3QgYUNoYW5uZWxNYXNrLCB1aW50OF90IGFDb3VudCwgdWludDE2X3QgYVBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc2hDb1A6OkNvbW1pc3Npb25lclNlc3Npb25JZFRsdiBzZXNzaW9uSWQ7CisgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IGNoYW5uZWxNYXNrOworICAgIE1lc2hDb1A6OkNvdW50VGx2IGNvdW50OworICAgIE1lc2hDb1A6OlBlcmlvZFRsdiBwZXJpb2Q7CisKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworCisgICAgVmVyaWZ5T3JFeGl0KEdldE5ldGlmKCkuR2V0Q29tbWlzc2lvbmVyKCkuSXNBY3RpdmUoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGhlYWRlci5Jbml0KGFBZGRyZXNzLklzTXVsdGljYXN0KCkgPyBPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFIDogT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLAorICAgICAgICAgICAgICAgIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfQU5OT1VOQ0VfQkVHSU4pOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBNZXNoQ29QOjpOZXdNZXNoQ29QTWVzc2FnZShHZXROZXRpZigpLkdldENvYXAoKSwgaGVhZGVyKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHNlc3Npb25JZC5Jbml0KCk7CisgICAgc2Vzc2lvbklkLlNldENvbW1pc3Npb25lclNlc3Npb25JZChHZXROZXRpZigpLkdldENvbW1pc3Npb25lcigpLkdldFNlc3Npb25JZCgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzZXNzaW9uSWQsIHNpemVvZihzZXNzaW9uSWQpKSk7CisKKyAgICBjaGFubmVsTWFzay5Jbml0KCk7CisgICAgY2hhbm5lbE1hc2suU2V0TWFzayhhQ2hhbm5lbE1hc2spOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmNoYW5uZWxNYXNrLCBzaXplb2YoY2hhbm5lbE1hc2spKSk7CisKKyAgICBjb3VudC5Jbml0KCk7CisgICAgY291bnQuU2V0Q291bnQoYUNvdW50KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZjb3VudCwgc2l6ZW9mKGNvdW50KSkpOworCisgICAgcGVyaW9kLkluaXQoKTsKKyAgICBwZXJpb2QuU2V0UGVyaW9kKGFQZXJpb2QpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnBlcmlvZCwgc2l6ZW9mKHBlcmlvZCkpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlckFkZHIoYUFkZHJlc3MpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgbWVzc2FnZUluZm8uU2V0SW50ZXJmYWNlSWQoR2V0TmV0aWYoKS5HZXRJbnRlcmZhY2VJZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBHZXROZXRpZigpLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgYW5ub3VuY2UgYmVnaW4gcXVlcnkiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvYW5ub3VuY2VfYmVnaW5fY2xpZW50LmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvYW5ub3VuY2VfYmVnaW5fY2xpZW50LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDU5YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9hbm5vdW5jZV9iZWdpbl9jbGllbnQuaHBwCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciByZXNwb25kaW5nIHRvIEFubm91bmNlIFJlcXVlc3RzLgorICovCisKKyNpZm5kZWYgQU5OT1VOQ0VfQkVHSU5fQ0xJRU5UX0hQUF8KKyNkZWZpbmUgQU5OT1VOQ0VfQkVHSU5fQ0xJRU5UX0hQUF8KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgaGFuZGxpbmcgQW5ub3VuY2UgQmVnaW4gUmVxdWVzdHMuCisgKgorICovCitjbGFzcyBBbm5vdW5jZUJlZ2luQ2xpZW50OiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQW5ub3VuY2VCZWdpbkNsaWVudChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgQW5ub3VuY2UgQmVnaW4gbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsTWFzayAgIFRoZSBjaGFubmVsIG1hc2sgdmFsdWUuCisgICAgICogQHBhcmFtW2luXSAgYUNvdW50ICAgICAgICAgVGhlIG51bWJlciBvZiBlbmVyZ3kgbWVhc3VyZW1lbnRzIHBlciBjaGFubmVsLgorICAgICAqIEBwYXJhbVtpbl0gIGFQZXJpb2QgICAgICAgIFRoZSB0aW1lIGJldHdlZW4gZW5lcmd5IG1lYXN1cmVtZW50cyAobWlsbGlzZWNvbmRzKS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBBbm5vdW5jZSBCZWdpbiBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgdG8gZ2VuZXJhdGUgYSBBbm5vdW5jZSBCZWdpbiBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kUmVxdWVzdCh1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIHVpbnQ4X3QgYUNvdW50LCB1aW50MTZfdCBtUGVyaW9kLCBjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKTsKK307CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBBTk5PVU5DRV9CRUdJTl9DTElFTlRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9jb21taXNzaW9uZXIuY3BwIGIvc3JjL2NvcmUvbWVzaGNvcC9jb21taXNzaW9uZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYjgzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2NvbW1pc3Npb25lci5jcHAKQEAgLTAsMCArMSwxMDkzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgQ29tbWlzc2lvbmVyIHJvbGUuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiY29tbWlzc2lvbmVyLnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjb21taXNzaW9uZXIuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL3Bia2RmMl9jbWFjLmgiCisjaW5jbHVkZSAibWVzaGNvcC9qb2luZXJfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3AuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRlREICYmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXA2NDsKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworQ29tbWlzc2lvbmVyOjpDb21taXNzaW9uZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKGFUaHJlYWROZXRpZiksCisgICAgbUFubm91bmNlQmVnaW4oYVRocmVhZE5ldGlmKSwKKyAgICBtRW5lcmd5U2NhbihhVGhyZWFkTmV0aWYpLAorICAgIG1QYW5JZFF1ZXJ5KGFUaHJlYWROZXRpZiksCisgICAgbVN0YXRlKE9UX0NPTU1JU1NJT05FUl9TVEFURV9ESVNBQkxFRCksCisgICAgbUpvaW5lclBvcnQoMCksCisgICAgbUpvaW5lclJsb2MoMCksCisgICAgbUpvaW5lckV4cGlyYXRpb25UaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCBIYW5kbGVKb2luZXJFeHBpcmF0aW9uVGltZXIsIHRoaXMpLAorICAgIG1UaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCBIYW5kbGVUaW1lciwgdGhpcyksCisgICAgbVNlc3Npb25JZCgwKSwKKyAgICBtVHJhbnNtaXRBdHRlbXB0cygwKSwKKyAgICBtUmVsYXlSZWNlaXZlKE9UX1VSSV9QQVRIX1JFTEFZX1JYLCAmQ29tbWlzc2lvbmVyOjpIYW5kbGVSZWxheVJlY2VpdmUsIHRoaXMpLAorICAgIG1EYXRhc2V0Q2hhbmdlZChPVF9VUklfUEFUSF9EQVRBU0VUX0NIQU5HRUQsICZDb21taXNzaW9uZXI6OkhhbmRsZURhdGFzZXRDaGFuZ2VkLCB0aGlzKSwKKyAgICBtSm9pbmVyRmluYWxpemUoT1RfVVJJX1BBVEhfSk9JTkVSX0ZJTkFMSVpFLCAmQ29tbWlzc2lvbmVyOjpIYW5kbGVKb2luZXJGaW5hbGl6ZSwgdGhpcykKK3sKKyAgICBtZW1zZXQobUpvaW5lcnMsIDAsIHNpemVvZihtSm9pbmVycykpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6QWRkQ29hcFJlc291cmNlcyh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBuZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobVJlbGF5UmVjZWl2ZSk7CisgICAgbmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1EYXRhc2V0Q2hhbmdlZCk7CisgICAgbmV0aWYuR2V0Q29hcFNlY3VyZSgpLkFkZFJlc291cmNlKG1Kb2luZXJGaW5hbGl6ZSk7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpSZW1vdmVDb2FwUmVzb3VyY2VzKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIG5ldGlmLkdldENvYXAoKS5SZW1vdmVSZXNvdXJjZShtUmVsYXlSZWNlaXZlKTsKKyAgICBuZXRpZi5HZXRDb2FwKCkuUmVtb3ZlUmVzb3VyY2UobURhdGFzZXRDaGFuZ2VkKTsKKyAgICBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuUmVtb3ZlUmVzb3VyY2UobUpvaW5lckZpbmFsaXplKTsKK30KKworb3RFcnJvciBDb21taXNzaW9uZXI6OlN0YXJ0KHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworICAgIFZlcmlmeU9yRXhpdChtU3RhdGUgPT0gT1RfQ09NTUlTU0lPTkVSX1NUQVRFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEdldE5ldGlmKCkuR2V0Q29hcFNlY3VyZSgpLlN0YXJ0KE9QRU5USFJFQURfQ09ORklHX0pPSU5FUl9VRFBfUE9SVCwgU2VuZFJlbGF5VHJhbnNtaXQsIHRoaXMpKTsKKworICAgIG1TdGF0ZSA9IE9UX0NPTU1JU1NJT05FUl9TVEFURV9QRVRJVElPTjsKKyAgICBtVHJhbnNtaXRBdHRlbXB0cyA9IDA7CisKKyAgICBTZW5kUGV0aXRpb24oKTsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgQ29tbWlzc2lvbmVyOjpTdG9wKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworICAgIFZlcmlmeU9yRXhpdChtU3RhdGUgIT0gT1RfQ09NTUlTU0lPTkVSX1NUQVRFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgR2V0TmV0aWYoKS5HZXRDb2FwU2VjdXJlKCkuU3RvcCgpOworCisgICAgbVN0YXRlID0gT1RfQ09NTUlTU0lPTkVSX1NUQVRFX0RJU0FCTEVEOworICAgIFJlbW92ZUNvYXBSZXNvdXJjZXMoKTsKKyAgICBtVHJhbnNtaXRBdHRlbXB0cyA9IDA7CisKKyAgICBtVGltZXIuU3RvcCgpOworCisgICAgR2V0TmV0aWYoKS5HZXREdGxzKCkuU3RvcCgpOworCisgICAgU2VuZEtlZXBBbGl2ZSgpOworCitleGl0OgorICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBDb21taXNzaW9uZXI6OlNlbmRDb21taXNzaW9uZXJTZXQodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIG90Q29tbWlzc2lvbmluZ0RhdGFzZXQgZGF0YXNldDsKKyAgICBTdGVlcmluZ0RhdGFUbHYgc3RlZXJpbmdEYXRhOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBtZW1zZXQoJmRhdGFzZXQsIDAsIHNpemVvZihkYXRhc2V0KSk7CisKKyAgICAvLyBzZXNzaW9uIGlkCisgICAgZGF0YXNldC5tU2Vzc2lvbklkID0gbVNlc3Npb25JZDsKKyAgICBkYXRhc2V0Lm1Jc1Nlc3Npb25JZFNldCA9IHRydWU7CisKKyAgICAvLyBjb21wdXRlIGJsb29tIGZpbHRlcgorICAgIHN0ZWVyaW5nRGF0YS5Jbml0KCk7CisgICAgc3RlZXJpbmdEYXRhLkNsZWFyKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihtSm9pbmVycykgLyBzaXplb2YobUpvaW5lcnNbMF0pOyBpKyspCisgICAgeworICAgICAgICBpZiAoIW1Kb2luZXJzW2ldLm1WYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobUpvaW5lcnNbaV0ubUFueSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RlZXJpbmdEYXRhLlNldExlbmd0aCgxKTsKKyAgICAgICAgICAgIHN0ZWVyaW5nRGF0YS5TZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RlZXJpbmdEYXRhLkNvbXB1dGVCbG9vbUZpbHRlcigmbUpvaW5lcnNbaV0ubUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIC8vIHNldCBibG9vbSBmaWx0ZXIKKyAgICBtZW1jcHkoZGF0YXNldC5tU3RlZXJpbmdEYXRhLm04LCBzdGVlcmluZ0RhdGEuR2V0VmFsdWUoKSwgc3RlZXJpbmdEYXRhLkdldExlbmd0aCgpKTsKKyAgICBkYXRhc2V0Lm1TdGVlcmluZ0RhdGEubUxlbmd0aCA9IHN0ZWVyaW5nRGF0YS5HZXRMZW5ndGgoKTsKKyAgICBkYXRhc2V0Lm1Jc1N0ZWVyaW5nRGF0YVNldCA9IHRydWU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZE1nbXRDb21taXNzaW9uZXJTZXRSZXF1ZXN0KGRhdGFzZXQsIE5VTEwsIDApKTsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpDbGVhckpvaW5lcnModm9pZCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YobUpvaW5lcnMpIC8gc2l6ZW9mKG1Kb2luZXJzWzBdKTsgaSsrKQorICAgIHsKKyAgICAgICAgbUpvaW5lcnNbaV0ubVZhbGlkID0gZmFsc2U7CisgICAgfQorCisgICAgU2VuZENvbW1pc3Npb25lclNldCgpOworICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKworb3RFcnJvciBDb21taXNzaW9uZXI6OkFkZEpvaW5lcihjb25zdCBNYWM6OkV4dEFkZHJlc3MgKmFFeHRBZGRyZXNzLCBjb25zdCBjaGFyICphUFNLZCwgdWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiJWxsWCwgJXMiLCAoYUV4dEFkZHJlc3MgPyBIb3N0U3dhcDY0KCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ2NF90ICo+KGFFeHRBZGRyZXNzKSkgOiAwKSwgYVBTS2QpOworICAgIFZlcmlmeU9yRXhpdChzdHJsZW4oYVBTS2QpIDw9IER0bHM6OmtQc2tNYXhMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBSZW1vdmVKb2luZXIoYUV4dEFkZHJlc3MsIDApOyAgLy8gcmVtb3ZlIGltZWRpYXRlbHkKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1Kb2luZXJzKSAvIHNpemVvZihtSm9pbmVyc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtSm9pbmVyc1tpXS5tVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFFeHRBZGRyZXNzICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Kb2luZXJzW2ldLm1FeHRBZGRyZXNzID0gKmFFeHRBZGRyZXNzOworICAgICAgICAgICAgbUpvaW5lcnNbaV0ubUFueSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbUpvaW5lcnNbaV0ubUFueSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAodm9pZClzdHJsY3B5KG1Kb2luZXJzW2ldLm1Qc2ssIGFQU0tkLCBzaXplb2YobUpvaW5lcnNbaV0ubVBzaykpOworICAgICAgICBtSm9pbmVyc1tpXS5tVmFsaWQgPSB0cnVlOworICAgICAgICBtSm9pbmVyc1tpXS5tRXhwaXJhdGlvblRpbWUgPSBUaW1lcjo6R2V0Tm93KCkgKyBUaW1lcjo6U2VjVG9Nc2VjKGFUaW1lb3V0KTsKKworICAgICAgICBVcGRhdGVKb2luZXJFeHBpcmF0aW9uVGltZXIoKTsKKworICAgICAgICBTZW5kQ29tbWlzc2lvbmVyU2V0KCk7CisKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIH0KKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgQ29tbWlzc2lvbmVyOjpSZW1vdmVKb2luZXIoY29uc3QgTWFjOjpFeHRBZGRyZXNzICphRXh0QWRkcmVzcywgdWludDMyX3QgYURlbGF5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiJWxsWCIsIChhRXh0QWRkcmVzcyA/IEhvc3RTd2FwNjQoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0X3QgKj4oYUV4dEFkZHJlc3MpKSA6IDApKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1Kb2luZXJzKSAvIHNpemVvZihtSm9pbmVyc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmICghbUpvaW5lcnNbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRXh0QWRkcmVzcyAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobWVtY21wKCZtSm9pbmVyc1tpXS5tRXh0QWRkcmVzcywgYUV4dEFkZHJlc3MsIHNpemVvZihtSm9pbmVyc1tpXS5tRXh0QWRkcmVzcykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFtSm9pbmVyc1tpXS5tQW55KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRGVsYXkgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBub3cgPSBUaW1lcjo6R2V0Tm93KCk7CisKKyAgICAgICAgICAgIGlmICgoc3RhdGljX2Nhc3Q8aW50MzJfdD4obUpvaW5lcnNbaV0ubUV4cGlyYXRpb25UaW1lIC0gbm93KSA+IDApICYmCisgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQzMl90PihtSm9pbmVyc1tpXS5tRXhwaXJhdGlvblRpbWUgLSBub3cpID4gVGltZXI6OlNlY1RvTXNlYyhhRGVsYXkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSm9pbmVyc1tpXS5tRXhwaXJhdGlvblRpbWUgPSBub3cgKyBUaW1lcjo6U2VjVG9Nc2VjKGFEZWxheSk7CisgICAgICAgICAgICAgICAgVXBkYXRlSm9pbmVyRXhwaXJhdGlvblRpbWVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtSm9pbmVyc1tpXS5tVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFVwZGF0ZUpvaW5lckV4cGlyYXRpb25UaW1lcigpOworICAgICAgICAgICAgU2VuZENvbW1pc3Npb25lclNldCgpOworICAgICAgICB9CisKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIH0KKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgQ29tbWlzc2lvbmVyOjpTZXRQcm92aXNpb25pbmdVcmwoY29uc3QgY2hhciAqYVByb3Zpc2lvbmluZ1VybCkKK3sKKyAgICByZXR1cm4gR2V0TmV0aWYoKS5HZXREdGxzKCkubVByb3Zpc2lvbmluZ1VybC5TZXRQcm92aXNpb25pbmdVcmwoYVByb3Zpc2lvbmluZ1VybCk7Cit9CisKK3VpbnQxNl90IENvbW1pc3Npb25lcjo6R2V0U2Vzc2lvbklkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TZXNzaW9uSWQ7Cit9CisKK290Q29tbWlzc2lvbmVyU3RhdGUgQ29tbWlzc2lvbmVyOjpHZXRTdGF0ZSh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGU7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZVRpbWVyKHZvaWQpCit7CisgICAgc3dpdGNoIChtU3RhdGUpCisgICAgeworICAgIGNhc2UgT1RfQ09NTUlTU0lPTkVSX1NUQVRFX0RJU0FCTEVEOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfQ09NTUlTU0lPTkVSX1NUQVRFX1BFVElUSU9OOgorICAgICAgICBTZW5kUGV0aXRpb24oKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkU6CisgICAgICAgIFNlbmRLZWVwQWxpdmUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlSm9pbmVyRXhwaXJhdGlvblRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVKb2luZXJFeHBpcmF0aW9uVGltZXIoKTsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZUpvaW5lckV4cGlyYXRpb25UaW1lcih2b2lkKQoreworICAgIHVpbnQzMl90IG5vdyA9IFRpbWVyOjpHZXROb3coKTsKKworICAgIC8vIFJlbW92ZSBKb2luZXJzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1Kb2luZXJzKSAvIHNpemVvZihtSm9pbmVyc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmICghbUpvaW5lcnNbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90Pihub3cgLSBtSm9pbmVyc1tpXS5tRXhwaXJhdGlvblRpbWUpID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TG9nRGViZ01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlbW92aW5nIGpvaW5lciBkdWUgdG8gdGltZW91dCBvciBzdWNjZXNzZnVsbHkgam9pbmVkIik7CisgICAgICAgICAgICBSZW1vdmVKb2luZXIoJm1Kb2luZXJzW2ldLm1FeHRBZGRyZXNzLCAwKTsgIC8vIHJlbW92ZSBpbWVkaWF0ZWx5CisgICAgICAgIH0KKyAgICB9CisKKyAgICBVcGRhdGVKb2luZXJFeHBpcmF0aW9uVGltZXIoKTsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OlVwZGF0ZUpvaW5lckV4cGlyYXRpb25UaW1lcih2b2lkKQoreworICAgIHVpbnQzMl90IG5vdyA9IFRpbWVyOjpHZXROb3coKTsKKyAgICB1aW50MzJfdCBuZXh0VGltZW91dCA9IDB4ZmZmZmZmZmY7CisKKyAgICAvLyBDaGVjayBpZiB0aW1lciBzaG91bGQgYmUgc2V0IGZvciBuZXh0IEpvaW5lci4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihtSm9pbmVycykgLyBzaXplb2YobUpvaW5lcnNbMF0pOyBpKyspCisgICAgeworICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1Kb2luZXJzW2ldLm1WYWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1Kb2luZXJzW2ldLm1FeHBpcmF0aW9uVGltZSAtIG5vdyA8IG5leHRUaW1lb3V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5leHRUaW1lb3V0ID0gbUpvaW5lcnNbaV0ubUV4cGlyYXRpb25UaW1lIC0gbm93OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG5leHRUaW1lb3V0ICE9IDB4ZmZmZmZmZmYpCisgICAgeworICAgICAgICAvLyBVcGRhdGUgdGhlIHRpbWVyIHRvIHRoZSB0aW1lb3V0IG9mIHRoZSBuZXh0IEpvaW5lci4KKyAgICAgICAgbUpvaW5lckV4cGlyYXRpb25UaW1lci5TdGFydChuZXh0VGltZW91dCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIE5vIEpvaW5lcnMsIHN0b3AgdGhlIHRpbWVyLgorICAgICAgICBtSm9pbmVyRXhwaXJhdGlvblRpbWVyLlN0b3AoKTsKKyAgICB9Cit9CisKK290RXJyb3IgQ29tbWlzc2lvbmVyOjpTZW5kTWdtdENvbW1pc3Npb25lckdldFJlcXVlc3QoY29uc3QgdWludDhfdCAqYVRsdnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIE1lc2hDb1A6OlRsdiB0bHY7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX0NPTU1JU1NJT05FUl9HRVQpOworCisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBpZiAoYUxlbmd0aCA+IDApCisgICAgeworICAgICAgICB0bHYuU2V0VHlwZShNZXNoQ29QOjpUbHY6OmtHZXQpOworICAgICAgICB0bHYuU2V0TGVuZ3RoKGFMZW5ndGgpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoYVRsdnMsIGFMZW5ndGgpKTsKKyAgICB9CisKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBuZXRpZi5HZXRNbGUoKS5HZXRMZWFkZXJBbG9jKG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21taXNzaW9uZXI6OkhhbmRsZU1nbXRDb21taXNzaW9uZXJHZXRSZXNwb25zZSwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBNR01UX0NPTU1JU1NJT05FUl9HRVQucmVxIHRvIGxlYWRlciIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZU1nbXRDb21taXNzaW9uZXJHZXRSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxDb21taXNzaW9uZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVNZ210Q29tbWlzc2lzb25lckdldFJlc3BvbnNlKAorICAgICAgICBzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksIHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbyksIGFSZXN1bHQpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlTWdtdENvbW1pc3Npc29uZXJHZXRSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgKHZvaWQpIGFNZXNzYWdlOworICAgICh2b2lkKSBhTWVzc2FnZUluZm87CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgVmVyaWZ5T3JFeGl0KGFSZXN1bHQgPT0gT1RfRVJST1JfTk9ORSAmJiBhSGVhZGVyLT5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX0NIQU5HRUQpOworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlY2VpdmVkIE1HTVRfQ09NTUlTU0lPTkVSX0dFVCByZXNwb25zZSIpOworCitleGl0OgorICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKworb3RFcnJvciBDb21taXNzaW9uZXI6OlNlbmRNZ210Q29tbWlzc2lvbmVyU2V0UmVxdWVzdChjb25zdCBvdENvbW1pc3Npb25pbmdEYXRhc2V0ICZhRGF0YXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9DT01NSVNTSU9ORVJfU0VUKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0xvY2F0b3JTZXQpCisgICAgeworICAgICAgICBNZXNoQ29QOjpCb3JkZXJBZ2VudExvY2F0b3JUbHYgbG9jYXRvcjsKKyAgICAgICAgbG9jYXRvci5Jbml0KCk7CisgICAgICAgIGxvY2F0b3IuU2V0Qm9yZGVyQWdlbnRMb2NhdG9yKGFEYXRhc2V0Lm1Mb2NhdG9yKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbG9jYXRvciwgc2l6ZW9mKGxvY2F0b3IpKSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc1Nlc3Npb25JZFNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6OkNvbW1pc3Npb25lclNlc3Npb25JZFRsdiBzZXNzaW9uSWQ7CisgICAgICAgIHNlc3Npb25JZC5Jbml0KCk7CisgICAgICAgIHNlc3Npb25JZC5TZXRDb21taXNzaW9uZXJTZXNzaW9uSWQoYURhdGFzZXQubVNlc3Npb25JZCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCkpKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzU3RlZXJpbmdEYXRhU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6U3RlZXJpbmdEYXRhVGx2IHN0ZWVyaW5nRGF0YTsKKyAgICAgICAgc3RlZXJpbmdEYXRhLkluaXQoKTsKKyAgICAgICAgc3RlZXJpbmdEYXRhLlNldExlbmd0aChhRGF0YXNldC5tU3RlZXJpbmdEYXRhLm1MZW5ndGgpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzdGVlcmluZ0RhdGEsIHNpemVvZihNZXNoQ29QOjpUbHYpKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmFEYXRhc2V0Lm1TdGVlcmluZ0RhdGEubTgsIGFEYXRhc2V0Lm1TdGVlcmluZ0RhdGEubUxlbmd0aCkpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNKb2luZXJVZHBQb3J0U2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6Sm9pbmVyVWRwUG9ydFRsdiBqb2luZXJVZHBQb3J0OworICAgICAgICBqb2luZXJVZHBQb3J0LkluaXQoKTsKKyAgICAgICAgam9pbmVyVWRwUG9ydC5TZXRVZHBQb3J0KGFEYXRhc2V0Lm1Kb2luZXJVZHBQb3J0KTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmam9pbmVyVWRwUG9ydCwgc2l6ZW9mKGpvaW5lclVkcFBvcnQpKSk7CisgICAgfQorCisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZChhVGx2cywgYUxlbmd0aCkpOworICAgIH0KKworICAgIGlmIChtZXNzYWdlLT5HZXRMZW5ndGgoKSA9PSBoZWFkZXIuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICAvLyBubyBwYXlsb2FkLCByZW1vdmUgY29hcCBwYXlsb2FkIG1hcmtlcgorICAgICAgICBtZXNzYWdlLT5TZXRMZW5ndGgobWVzc2FnZS0+R2V0TGVuZ3RoKCkgLSAxKTsKKyAgICB9CisKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBuZXRpZi5HZXRNbGUoKS5HZXRMZWFkZXJBbG9jKG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21taXNzaW9uZXI6OkhhbmRsZU1nbXRDb21taXNzaW9uZXJTZXRSZXNwb25zZSwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBNR01UX0NPTU1JU1NJT05FUl9TRVQucmVxIHRvIGxlYWRlciIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZU1nbXRDb21taXNzaW9uZXJTZXRSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxDb21taXNzaW9uZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVNZ210Q29tbWlzc2lzb25lclNldFJlc3BvbnNlKAorICAgICAgICBzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksIHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbyksIGFSZXN1bHQpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlTWdtdENvbW1pc3Npc29uZXJTZXRSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgKHZvaWQpIGFNZXNzYWdlOworICAgICh2b2lkKSBhTWVzc2FnZUluZm87CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgVmVyaWZ5T3JFeGl0KGFSZXN1bHQgPT0gT1RfRVJST1JfTk9ORSAmJiBhSGVhZGVyLT5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX0NIQU5HRUQpOworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlY2VpdmVkIE1HTVRfQ09NTUlTU0lPTkVSX1NFVCByZXNwb25zZSIpOworCitleGl0OgorICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKworb3RFcnJvciBDb21taXNzaW9uZXI6OlNlbmRQZXRpdGlvbih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIENvbW1pc3Npb25lcklkVGx2IGNvbW1pc3Npb25lcklkOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIG1UcmFuc21pdEF0dGVtcHRzKys7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfTEVBREVSX1BFVElUSU9OKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgY29tbWlzc2lvbmVySWQuSW5pdCgpOworICAgIGNvbW1pc3Npb25lcklkLlNldENvbW1pc3Npb25lcklkKCJPcGVuVGhyZWFkIENvbW1pc3Npb25lciIpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY29tbWlzc2lvbmVySWQsIHNpemVvZihUbHYpICsgY29tbWlzc2lvbmVySWQuR2V0TGVuZ3RoKCkpKTsKKworICAgIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFsb2MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1pc3Npb25lcjo6SGFuZGxlTGVhZGVyUGV0aXRpb25SZXNwb25zZSwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBwZXRpdGlvbiIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZUxlYWRlclBldGl0aW9uUmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KQoreworICAgIHN0YXRpY19jYXN0PENvbW1pc3Npb25lciAqPihhQ29udGV4dCktPkhhbmRsZUxlYWRlclBldGl0aW9uUmVzcG9uc2UoCisgICAgICAgIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSwgYVJlc3VsdCk7CisKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZUxlYWRlclBldGl0aW9uUmVzcG9uc2UoQ29hcDo6SGVhZGVyICphSGVhZGVyLCBNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KQoreworICAgICh2b2lkKSBhTWVzc2FnZUluZm87CisKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKyAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgc2Vzc2lvbklkOworICAgIGJvb2wgcmV0cmFuc21pdCA9IGZhbHNlOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIFZlcmlmeU9yRXhpdChtU3RhdGUgPT0gT1RfQ09NTUlTU0lPTkVSX1NUQVRFX1BFVElUSU9OLCBtU3RhdGUgPSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfRElTQUJMRUQpOworICAgIFZlcmlmeU9yRXhpdChhUmVzdWx0ID09IE9UX0VSUk9SX05PTkUgJiYgYUhlYWRlci0+R2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9DSEFOR0VELCByZXRyYW5zbWl0ID0gdHJ1ZSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJyZWNlaXZlZCBMZWFkZXIgUGV0aXRpb24gcmVzcG9uc2UiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoVGx2OjpHZXRUbHYoKmFNZXNzYWdlLCBUbHY6OmtTdGF0ZSwgc2l6ZW9mKHN0YXRlKSwgc3RhdGUpKTsKKyAgICBWZXJpZnlPckV4aXQoc3RhdGUuSXNWYWxpZCgpKTsKKworICAgIFZlcmlmeU9yRXhpdChzdGF0ZS5HZXRTdGF0ZSgpID09IFN0YXRlVGx2OjprQWNjZXB0LCBtU3RhdGUgPSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfRElTQUJMRUQpOworCisgICAgU3VjY2Vzc09yRXhpdChUbHY6OkdldFRsdigqYU1lc3NhZ2UsIFRsdjo6a0NvbW1pc3Npb25lclNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCksIHNlc3Npb25JZCkpOworICAgIFZlcmlmeU9yRXhpdChzZXNzaW9uSWQuSXNWYWxpZCgpKTsKKyAgICBtU2Vzc2lvbklkID0gc2Vzc2lvbklkLkdldENvbW1pc3Npb25lclNlc3Npb25JZCgpOworCisgICAgQWRkQ29hcFJlc291cmNlcygpOworICAgIG1TdGF0ZSA9IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkU7CisKKyAgICBtVHJhbnNtaXRBdHRlbXB0cyA9IDA7CisgICAgbVRpbWVyLlN0YXJ0KFRpbWVyOjpTZWNUb01zZWMoa0tlZXBBbGl2ZVRpbWVvdXQpIC8gMik7CisKK2V4aXQ6CisKKyAgICBpZiAocmV0cmFuc21pdCkKKyAgICB7CisgICAgICAgIGlmIChtVHJhbnNtaXRBdHRlbXB0cyA+PSBrUGV0aXRpb25SZXRyeUNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhdGUgPSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfRElTQUJMRUQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtVGltZXIuU3RhcnQoVGltZXI6OlNlY1RvTXNlYyhrUGV0aXRpb25SZXRyeURlbGF5KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK290RXJyb3IgQ29tbWlzc2lvbmVyOjpTZW5kS2VlcEFsaXZlKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgU3RhdGVUbHYgc3RhdGU7CisgICAgQ29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2IHNlc3Npb25JZDsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfTEVBREVSX0tFRVBfQUxJVkUpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBzdGF0ZS5Jbml0KCk7CisgICAgc3RhdGUuU2V0U3RhdGUobVN0YXRlID09IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUgPyBTdGF0ZVRsdjo6a0FjY2VwdCA6IFN0YXRlVGx2OjprUmVqZWN0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzdGF0ZSwgc2l6ZW9mKHN0YXRlKSkpOworCisgICAgc2Vzc2lvbklkLkluaXQoKTsKKyAgICBzZXNzaW9uSWQuU2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkKG1TZXNzaW9uSWQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCkpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFsb2MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1pc3Npb25lcjo6SGFuZGxlTGVhZGVyS2VlcEFsaXZlUmVzcG9uc2UsIHRoaXMpKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQga2VlcCBhbGl2ZSIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZUxlYWRlcktlZXBBbGl2ZVJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgc3RhdGljX2Nhc3Q8Q29tbWlzc2lvbmVyICo+KGFDb250ZXh0KS0+SGFuZGxlTGVhZGVyS2VlcEFsaXZlUmVzcG9uc2UoCisgICAgICAgIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSwgYVJlc3VsdCk7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpIYW5kbGVMZWFkZXJLZWVwQWxpdmVSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KQoreworICAgICh2b2lkKSBhTWVzc2FnZUluZm87CisKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUsIG1TdGF0ZSA9IE9UX0NPTU1JU1NJT05FUl9TVEFURV9ESVNBQkxFRCk7CisgICAgVmVyaWZ5T3JFeGl0KGFSZXN1bHQgPT0gT1RfRVJST1JfTk9ORSAmJiBhSGVhZGVyLT5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX0NIQU5HRUQsCisgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IE9UX0NPTU1JU1NJT05FUl9TVEFURV9ESVNBQkxFRCk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJyZWNlaXZlZCBMZWFkZXIgUGV0aXRpb24gcmVzcG9uc2UiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoVGx2OjpHZXRUbHYoKmFNZXNzYWdlLCBUbHY6OmtTdGF0ZSwgc2l6ZW9mKHN0YXRlKSwgc3RhdGUpKTsKKyAgICBWZXJpZnlPckV4aXQoc3RhdGUuSXNWYWxpZCgpKTsKKworICAgIFZlcmlmeU9yRXhpdChzdGF0ZS5HZXRTdGF0ZSgpID09IFN0YXRlVGx2OjprQWNjZXB0LCBtU3RhdGUgPSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfRElTQUJMRUQpOworCisgICAgbVRpbWVyLlN0YXJ0KFRpbWVyOjpTZWNUb01zZWMoa0tlZXBBbGl2ZVRpbWVvdXQpIC8gMik7CisKK2V4aXQ6CisKKyAgICBpZiAobVN0YXRlICE9IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUpCisgICAgeworICAgICAgICBSZW1vdmVDb2FwUmVzb3VyY2VzKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlUmVsYXlSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxDb21taXNzaW9uZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVSZWxheVJlY2VpdmUoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpIYW5kbGVSZWxheVJlY2VpdmUoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBKb2luZXJVZHBQb3J0VGx2IGpvaW5lclBvcnQ7CisgICAgSm9pbmVySWlkVGx2IGpvaW5lcklpZDsKKyAgICBKb2luZXJSb3V0ZXJMb2NhdG9yVGx2IGpvaW5lclJsb2M7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBqb2luZXJNZXNzYWdlSW5mbzsKKyAgICB1aW50MTZfdCBvZmZzZXQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGJvb2wgZW5hYmxlSm9pbmVyID0gZmFsc2U7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgVmVyaWZ5T3JFeGl0KG1TdGF0ZSA9PSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfQUNUSVZFLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXIuR2V0VHlwZSgpID09IE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEUgJiYKKyAgICAgICAgICAgICAgICAgYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX1BPU1QpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtKb2luZXJVZHBQb3J0LCBzaXplb2Yoam9pbmVyUG9ydCksIGpvaW5lclBvcnQpKTsKKyAgICBWZXJpZnlPckV4aXQoam9pbmVyUG9ydC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtKb2luZXJJaWQsIHNpemVvZihqb2luZXJJaWQpLCBqb2luZXJJaWQpKTsKKyAgICBWZXJpZnlPckV4aXQoam9pbmVySWlkLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0pvaW5lclJvdXRlckxvY2F0b3IsIHNpemVvZihqb2luZXJSbG9jKSwgam9pbmVyUmxvYykpOworICAgIFZlcmlmeU9yRXhpdChqb2luZXJSbG9jLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRWYWx1ZU9mZnNldChhTWVzc2FnZSwgVGx2OjprSm9pbmVyRHRsc0VuY2Fwc3VsYXRpb24sIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgVmVyaWZ5T3JFeGl0KGxlbmd0aCA8PSBhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIG9mZnNldCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoIW5ldGlmLkdldENvYXBTZWN1cmUoKS5Jc0Nvbm5lY3Rpb25BY3RpdmUoKSkKKyAgICB7CisgICAgICAgIG1lbWNweShtSm9pbmVySWlkLCBqb2luZXJJaWQuR2V0SWlkKCksIHNpemVvZihtSm9pbmVySWlkKSk7CisgICAgICAgIG1Kb2luZXJJaWRbMF0gXj0gMHgyOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1Kb2luZXJzKSAvIHNpemVvZihtSm9pbmVyc1swXSk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtSm9pbmVyc1tpXS5tVmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtSm9pbmVyc1tpXS5tQW55IHx8ICFtZW1jbXAoJm1Kb2luZXJzW2ldLm1FeHRBZGRyZXNzLCBtSm9pbmVySWlkLCBzaXplb2YobUpvaW5lcnNbaV0ubUV4dEFkZHJlc3MpKSkKKyAgICAgICAgICAgIHsKKworICAgICAgICAgICAgICAgIGVycm9yID0gbmV0aWYuR2V0Q29hcFNlY3VyZSgpLlNldFBzayhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4obUpvaW5lcnNbaV0ubVBzayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0cmxlbihtSm9pbmVyc1tpXS5tUHNrKSkpOworICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworICAgICAgICAgICAgICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgImZvdW5kIGpvaW5lciwgc3RhcnRpbmcgbmV3IHNlc3Npb24iKTsKKyAgICAgICAgICAgICAgICBlbmFibGVKb2luZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbUpvaW5lcklpZFswXSBePSAweDI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVuYWJsZUpvaW5lciA9IChtZW1jbXAobUpvaW5lcklpZCwgam9pbmVySWlkLkdldElpZCgpLCBzaXplb2YobUpvaW5lcklpZCkpID09IDApOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChlbmFibGVKb2luZXIpOworCisgICAgbUpvaW5lclBvcnQgPSBqb2luZXJQb3J0LkdldFVkcFBvcnQoKTsKKyAgICBtSm9pbmVyUmxvYyA9IGpvaW5lclJsb2MuR2V0Sm9pbmVyUm91dGVyTG9jYXRvcigpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgcmVsYXkgcmVjZWl2ZSBmb3IgJWxsWCwgcmxvYzoleCIsIEhvc3RTd2FwNjQobUpvaW5lcklpZDY0KSwgbUpvaW5lclJsb2MpOworCisgICAgYU1lc3NhZ2UuU2V0T2Zmc2V0KG9mZnNldCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLlNldExlbmd0aChvZmZzZXQgKyBsZW5ndGgpKTsKKworICAgIGpvaW5lck1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDY0KCkpOworICAgIGpvaW5lck1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkuU2V0SWlkKG1Kb2luZXJJaWQpOworICAgIGpvaW5lck1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KG1Kb2luZXJQb3J0KTsKKworICAgIG5ldGlmLkdldENvYXBTZWN1cmUoKS5SZWNlaXZlKGFNZXNzYWdlLCBqb2luZXJNZXNzYWdlSW5mbyk7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlRGF0YXNldENoYW5nZWQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Q29tbWlzc2lvbmVyICo+KGFDb250ZXh0KS0+SGFuZGxlRGF0YXNldENoYW5nZWQoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpIYW5kbGVEYXRhc2V0Q2hhbmdlZChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlY2VpdmVkIGRhdGFzZXQgY2hhbmdlZCIpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTWVzc2FnZSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KEdldE5ldGlmKCkuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCBhTWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgZGF0YXNldCBjaGFuZ2VkIGFja25vd2xlZGdtZW50Iik7CisKK2V4aXQ6CisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlSm9pbmVyRmluYWxpemUodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Q29tbWlzc2lvbmVyICo+KGFDb250ZXh0KS0+SGFuZGxlSm9pbmVyRmluYWxpemUoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpIYW5kbGVKb2luZXJGaW5hbGl6ZShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7CisgICAgU3RhdGVUbHY6OlN0YXRlIHN0YXRlID0gU3RhdGVUbHY6OmtBY2NlcHQ7CisgICAgUHJvdmlzaW9uaW5nVXJsVGx2IHByb3Zpc2lvbmluZ1VybDsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAicmVjZWl2ZWQgam9pbmVyIGZpbmFsaXplIik7CisKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1Byb3Zpc2lvbmluZ1VybCwgc2l6ZW9mKHByb3Zpc2lvbmluZ1VybCksIHByb3Zpc2lvbmluZ1VybCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGlmIChwcm92aXNpb25pbmdVcmwuR2V0TGVuZ3RoKCkgIT0gR2V0TmV0aWYoKS5HZXREdGxzKCkubVByb3Zpc2lvbmluZ1VybC5HZXRMZW5ndGgoKSB8fAorICAgICAgICAgICAgbWVtY21wKHByb3Zpc2lvbmluZ1VybC5HZXRQcm92aXNpb25pbmdVcmwoKSwgR2V0TmV0aWYoKS5HZXREdGxzKCkubVByb3Zpc2lvbmluZ1VybC5HZXRQcm92aXNpb25pbmdVcmwoKSwKKyAgICAgICAgICAgICAgICAgICBwcm92aXNpb25pbmdVcmwuR2V0TGVuZ3RoKCkpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3Q7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DRVJUX0xPRworICAgIHVpbnQ4X3QgYnVmW09QRU5USFJFQURfQ09ORklHX01FU1NBR0VfQlVGRkVSX1NJWkVdOworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5HZXRMZW5ndGgoKSA8PSBzaXplb2YoYnVmKSk7CisgICAgYU1lc3NhZ2UuUmVhZChhSGVhZGVyLkdldExlbmd0aCgpLCBhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIGFIZWFkZXIuR2V0TGVuZ3RoKCksIGJ1Zik7CisgICAgb3REdW1wQ2VydE1lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIltUSENJXSBkaXJlY3Rpb249cmVjdiB8IHR5cGU9Sk9JTl9GSU4ucmVxIHwiLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhSGVhZGVyLkdldExlbmd0aCgpKTsKKworZXhpdDoKKyNlbmRpZgorCisgICAgU2VuZEpvaW5GaW5hbGl6ZVJlc3BvbnNlKGFIZWFkZXIsIHN0YXRlKTsKKworICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKworCit2b2lkIENvbW1pc3Npb25lcjo6U2VuZEpvaW5GaW5hbGl6ZVJlc3BvbnNlKGNvbnN0IENvYXA6OkhlYWRlciAmYVJlcXVlc3RIZWFkZXIsIFN0YXRlVGx2OjpTdGF0ZSBhU3RhdGUpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgcmVzcG9uc2VIZWFkZXI7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBqb2luZXJNZXNzYWdlSW5mbzsKKyAgICBNZXNoQ29QOjpTdGF0ZVRsdiBzdGF0ZVRsdjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIE1hYzo6RXh0QWRkcmVzcyBleHRBZGRyOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIHJlc3BvbnNlSGVhZGVyLlNldERlZmF1bHRSZXNwb25zZUhlYWRlcihhUmVxdWVzdEhlYWRlcik7CisgICAgcmVzcG9uc2VIZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcFNlY3VyZSgpLCByZXNwb25zZUhlYWRlcikpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBtZXNzYWdlLT5TZXRTdWJUeXBlKE1lc3NhZ2U6OmtTdWJUeXBlSm9pbmVyRmluYWxpemVSZXNwb25zZSk7CisKKyAgICBzdGF0ZVRsdi5Jbml0KCk7CisgICAgc3RhdGVUbHYuU2V0U3RhdGUoYVN0YXRlKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzdGF0ZVRsdiwgc2l6ZW9mKHN0YXRlVGx2KSkpOworCisgICAgam9pbmVyTWVzc2FnZUluZm8uU2V0UGVlckFkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsNjQoKSk7CisgICAgam9pbmVyTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5TZXRJaWQobUpvaW5lcklpZCk7CisgICAgam9pbmVyTWVzc2FnZUluZm8uU2V0UGVlclBvcnQobUpvaW5lclBvcnQpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0VSVF9MT0cKKyAgICB1aW50OF90IGJ1ZltPUEVOVEhSRUFEX0NPTkZJR19NRVNTQUdFX0JVRkZFUl9TSVpFXTsKKyAgICBWZXJpZnlPckV4aXQobWVzc2FnZS0+R2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKGJ1ZikpOworICAgIG1lc3NhZ2UtPlJlYWQocmVzcG9uc2VIZWFkZXIuR2V0TGVuZ3RoKCksIG1lc3NhZ2UtPkdldExlbmd0aCgpIC0gcmVzcG9uc2VIZWFkZXIuR2V0TGVuZ3RoKCksIGJ1Zik7CisgICAgb3REdW1wQ2VydE1lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIltUSENJXSBkaXJlY3Rpb249c2VuZCB8IHR5cGU9Sk9JTl9GSU4ucnNwIHwiLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+R2V0TGVuZ3RoKCkgLSByZXNwb25zZUhlYWRlci5HZXRMZW5ndGgoKSk7CisjZW5kaWYKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGpvaW5lck1lc3NhZ2VJbmZvKSk7CisKKyAgICBtZW1jcHkoZXh0QWRkci5tOCwgbUpvaW5lcklpZCwgc2l6ZW9mKGV4dEFkZHIubTgpKTsKKyAgICBleHRBZGRyLlNldExvY2FsKCFleHRBZGRyLklzTG9jYWwoKSk7CisgICAgUmVtb3ZlSm9pbmVyKCZleHRBZGRyLCBrUmVtb3ZlSm9pbmVyRGVsYXkpOyAgLy8gcmVtb3ZlIGFmdGVyIGtSZW1vdmVKb2luZXJEZWxheSAoc2Vjb25kcykKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgam9pbmVyIGZpbmFsaXplIHJlc3BvbnNlIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCitvdEVycm9yIENvbW1pc3Npb25lcjo6U2VuZFJlbGF5VHJhbnNtaXQodm9pZCAqYUNvbnRleHQsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbW1pc3Npb25lciAqPihhQ29udGV4dCktPlNlbmRSZWxheVRyYW5zbWl0KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCitvdEVycm9yIENvbW1pc3Npb25lcjo6U2VuZFJlbGF5VHJhbnNtaXQoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgSm9pbmVyVWRwUG9ydFRsdiB1ZHBQb3J0OworICAgIEpvaW5lcklpZFRsdiBpaWQ7CisgICAgSm9pbmVyUm91dGVyTG9jYXRvclRsdiBybG9jOworICAgIEV4dGVuZGVkVGx2IHRsdjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIHVpbnQxNl90IG9mZnNldDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX05PTl9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9SRUxBWV9UWCk7CisgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01lc2hDb1BNZXNzYWdlKG5ldGlmLkdldENvYXAoKSwgaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHVkcFBvcnQuSW5pdCgpOworICAgIHVkcFBvcnQuU2V0VWRwUG9ydChtSm9pbmVyUG9ydCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmdWRwUG9ydCwgc2l6ZW9mKHVkcFBvcnQpKSk7CisKKyAgICBpaWQuSW5pdCgpOworICAgIGlpZC5TZXRJaWQobUpvaW5lcklpZCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmaWlkLCBzaXplb2YoaWlkKSkpOworCisgICAgcmxvYy5Jbml0KCk7CisgICAgcmxvYy5TZXRKb2luZXJSb3V0ZXJMb2NhdG9yKG1Kb2luZXJSbG9jKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZybG9jLCBzaXplb2YocmxvYykpKTsKKworICAgIGlmIChhTWVzc2FnZS5HZXRTdWJUeXBlKCkgPT0gTWVzc2FnZTo6a1N1YlR5cGVKb2luZXJGaW5hbGl6ZVJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgSm9pbmVyUm91dGVyS2VrVGx2IGtlazsKKyAgICAgICAga2VrLkluaXQoKTsKKyAgICAgICAga2VrLlNldEtlayhuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0S2VrKCkpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZrZWssIHNpemVvZihrZWspKSk7CisgICAgfQorCisgICAgdGx2LlNldFR5cGUoVGx2OjprSm9pbmVyRHRsc0VuY2Fwc3VsYXRpb24pOworICAgIHRsdi5TZXRMZW5ndGgoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKyAgICBvZmZzZXQgPSBtZXNzYWdlLT5HZXRMZW5ndGgoKTsKKyAgICBtZXNzYWdlLT5TZXRMZW5ndGgob2Zmc2V0ICsgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpOworICAgIGFNZXNzYWdlLkNvcHlUbygwLCBvZmZzZXQsIGFNZXNzYWdlLkdldExlbmd0aCgpLCAqbWVzc2FnZSk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNihtSm9pbmVyUmxvYyk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChuZXRpZi5HZXRJbnRlcmZhY2VJZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBhTWVzc2FnZS5GcmVlKCk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdEVycihlcnJvcik7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIENvbW1pc3Npb25lcjo6R2VuZXJhdGVQU0tjKGNvbnN0IGNoYXIgKmFQYXNzUGhyYXNlLCBjb25zdCBjaGFyICphTmV0d29ya05hbWUsIGNvbnN0IHVpbnQ4X3QgKmFFeHRQYW5JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVBTS2MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3QgY2hhciAqc2FsdFByZWZpeCA9ICJUaHJlYWQiOworICAgIHVpbnQ4X3Qgc2FsdFtPVF9QQktERjJfU0FMVF9NQVhfTEVOXTsKKyAgICB1aW50MTZfdCBzYWx0TGVuID0gMDsKKworICAgIFZlcmlmeU9yRXhpdCgoc3RybGVuKGFQYXNzUGhyYXNlKSA+PSBPVF9DT01NSVNTSU9OSU5HX1BBU1NQSFJBU0VfTUlOX1NJWkUpICYmCisgICAgICAgICAgICAgICAgIChzdHJsZW4oYVBhc3NQaHJhc2UpIDw9IE9UX0NPTU1JU1NJT05JTkdfUEFTU1BIUkFTRV9NQVhfU0laRSksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG1lbXNldChzYWx0LCAwLCBzaXplb2Yoc2FsdCkpOworICAgIG1lbWNweShzYWx0LCBzYWx0UHJlZml4LCBzdHJsZW4oc2FsdFByZWZpeCkpOworICAgIHNhbHRMZW4gKz0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHN0cmxlbihzYWx0UHJlZml4KSk7CisKKyAgICBtZW1jcHkoc2FsdCArIHNhbHRMZW4sIGFFeHRQYW5JZCwgT1RfRVhUX1BBTl9JRF9TSVpFKTsKKyAgICBzYWx0TGVuICs9IE9UX0VYVF9QQU5fSURfU0laRTsKKworICAgIG1lbWNweShzYWx0ICsgc2FsdExlbiwgYU5ldHdvcmtOYW1lLCBzdHJsZW4oYU5ldHdvcmtOYW1lKSk7CisgICAgc2FsdExlbiArPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oc3RybGVuKGFOZXR3b3JrTmFtZSkpOworCisgICAgb3RQYmtkZjJDbWFjKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihhUGFzc1BocmFzZSksIHN0YXRpY19jYXN0PHVpbnQxNl90PihzdHJsZW4oYVBhc3NQaHJhc2UpKSwKKyAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KHNhbHQpLCBzYWx0TGVuLCAxNjM4NCwgT1RfUFNLQ19NQVhfU0laRSwgYVBTS2MpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworQ29tbWlzc2lvbmVyICZDb21taXNzaW9uZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIENvbW1pc3Npb25lciAmY29tbWlzc2lvbmVyID0gKnN0YXRpY19jYXN0PENvbW1pc3Npb25lciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBDb21taXNzaW9uZXIgJmNvbW1pc3Npb25lciA9IG90R2V0VGhyZWFkTmV0aWYoKS5HZXRDb21taXNzaW9uZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGNvbW1pc3Npb25lcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQgJiYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2NvbW1pc3Npb25lci5ocHAgYi9zcmMvY29yZS9tZXNoY29wL2NvbW1pc3Npb25lci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4MmNiNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvY29tbWlzc2lvbmVyLmhwcApAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBDb21taXNzaW9uZXIgcm9sZS4KKyAqLworCisjaWZuZGVmIENPTU1JU1NJT05FUl9IUFBfCisjZGVmaW5lIENPTU1JU1NJT05FUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbW1pc3Npb25lci5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29hcC9jb2FwX3NlY3VyZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9hbm5vdW5jZV9iZWdpbl9jbGllbnQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvZHRscy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9lbmVyZ3lfc2Nhbl9jbGllbnQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvcGFuaWRfcXVlcnlfY2xpZW50LmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworCituYW1lc3BhY2UgTWVzaENvUCB7CisKK2NsYXNzIENvbW1pc3Npb25lcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIENvbW1pc3Npb25lciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBDb21taXNzaW9uZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgdGhlIENvbW1pc3Npb25lciBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgQ29tbWlzc2lvbmVyIHNlcnZpY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0YXJ0KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RvcHMgdGhlIENvbW1pc3Npb25lciBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgQ29tbWlzc2lvbmVyIHNlcnZpY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0b3Aodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIEpvaW5lciBlbnRyaWVzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckpvaW5lcnModm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgSm9pbmVyIGVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUV4dEFkZHJlc3MgICAgICBBIHBvaW50ZXIgdG8gdGhlIEpvaW5lcidzIGV4dGVuZGVkIGFkZHJlc3Mgb3IgTlVMTCBmb3IgYW55IEpvaW5lci4KKyAgICAgKiBAcGFyYW1baW5dICBhUFNLZCAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgUFNLZC4KKyAgICAgKiBAcGFyYW1baW5dICBhVGltZW91dCAgICAgICAgIEEgdGltZSBhZnRlciB3aGljaCBhIEpvaW5lciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQsIGluIHNlY29uZHMuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgSm9pbmVyLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgTm8gYnVmZmVycyBhdmFpbGFibGUgdG8gYWRkIHRoZSBKb2luZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFkZEpvaW5lcihjb25zdCBNYWM6OkV4dEFkZHJlc3MgKmFFeHRBZGRyZXNzLCBjb25zdCBjaGFyICphUFNLZCwgdWludDMyX3QgYVRpbWVvdXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhIEpvaW5lciBlbnRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyZXNzICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEpvaW5lcidzIGV4dGVuZGVkIGFkZHJlc3Mgb3IgTlVMTCBmb3IgYW55IEpvaW5lci4KKyAgICAgKiBAcGFyYW1baW5dICBhRGVsYXkgICAgICAgICAgICAgVGhlIGRlbGF5IHRvIHJlbW92ZSBKb2luZXIgKGluIHNlY29uZHMpLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgSm9pbmVyLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGUgSm9pbmVyIHNwZWNpZmllZCBieSBAcCBhRXh0QWRkcmVzcyB3YXMgbm90IGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZW1vdmVKb2luZXIoY29uc3QgTWFjOjpFeHRBZGRyZXNzICphRXh0QWRkcmVzcywgdWludDMyX3QgYURlbGF5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFByb3Zpc2lvbmluZyBVUkwuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJvdmlzaW9uaW5nVXJsICBBIHBvaW50ZXIgdG8gdGhlIFByb3Zpc2lvbmluZyBVUkwgKG1heSBiZSBOVUxMKS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIEpvaW5lci4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYVByb3Zpc2lvbmluZ1VybCBpcyBpbnZhbGlkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRQcm92aXNpb25pbmdVcmwoY29uc3QgY2hhciAqYVByb3Zpc2lvbmluZ1VybCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDb21taXNzaW9uZXIgU2Vzc2lvbiBJRC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDb21taXNzaW9uZXIgU2Vzc2lvbiBJRC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFNlc3Npb25JZCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgQ29tbWlzc2lvbmVyIHJvbGUgaXMgYWN0aXZlLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiB0aGUgQ29tbWlzc2lvbmVyIHJvbGUgaXMgYWN0aXZlLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQWN0aXZlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TdGF0ZSA9PSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfQUNUSVZFOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIENvbW1pc3Npb25lciBTdGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0NPTU1JU1NJT05FUl9TVEFURV9ESVNBQkxFRCAgQ29tbWlzc2lvbmVyIGRpc2FibGVkLgorICAgICAqIEByZXR2YWwgT1RfQ09NTUlTU0lPTkVSX1NUQVRFX1BFVElUSU9OICBCZWNvbWluZyB0aGUgY29tbWlzc2lvbmVyLgorICAgICAqIEByZXR2YWwgT1RfQ09NSU1TU0lPTkVSX1NUQVRFX0FDVElWRSAgICBDb21taXNzaW9uZXIgZW5hYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIG90Q29tbWlzc2lvbmVyU3RhdGUgR2V0U3RhdGUodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBNR01UX0NPTU1JU1NJT05FUl9HRVQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGx2cyAgICAgICAgQSBwb2ludGVyIHRvIENvbW1pc3Npb25pbmcgRGF0YSBUTFZzLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgICBUaGUgbGVuZ3RoIG9mIHJlcXVlc3RlZCBUTFZzIGluIGJ5dGVzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTZW5kIE1HTVRfQ09NTUlTU0lPTkVSX0dFVCBzdWNjZXNzZnVsbHkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9GQUlMRUQgICBTZW5kIE1HTVRfQ09NTUlTU0lPTkVSX0dFVCBmYWlsLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kTWdtdENvbW1pc3Npb25lckdldFJlcXVlc3QoY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBNR01UX0NPTU1JU1NJT05FUl9TRVQuCisgICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURhdGFzZXQgICAgIEEgcmVmZXJlbmNlIHRvIENvbW1pc3Npb25pbmcgRGF0YS4KKyAgICAgKiBAcGFyYW1baW5dICBhVGx2cyAgICAgICAgQSBwb2ludGVyIHRvIHVzZXIgc3BlY2lmaWMgQ29tbWlzc2lvbmluZyBEYXRhIFRMVnMuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICAgIFRoZSBsZW5ndGggb2YgdXNlciBzcGVjaWZpYyBUTFZzIGluIGJ5dGVzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTZW5kIE1HTVRfQ09NTUlTU0lPTkVSX1NFVCBzdWNjZXNzZnVsbHkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9GQUlMRUQgICBTZW5kIE1HTVRfQ09NTUlTU0lPTkVSX1NFVCBmYWlsLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kTWdtdENvbW1pc3Npb25lclNldFJlcXVlc3QoY29uc3Qgb3RDb21taXNzaW9uaW5nRGF0YXNldCAmYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgZ2VuZXJhdGVzIFBTS2MuCisgICAgICoKKyAgICAgKiBQU0tjIGlzIHVzZWQgdG8gZXN0YWJsaXNoIHRoZSBDb21taXNzaW9uZXIgU2Vzc2lvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQYXNzUGhyYXNlICAgVGhlIGNvbW1pc3Npb25pbmcgcGFzc3BocmFzZS4KKyAgICAgKiBAcGFyYW1baW5dICBhTmV0d29ya05hbWUgIFRoZSBuZXR3b3JrIG5hbWUgZm9yIFBTS2MgY29tcHV0YXRpb24uCisgICAgICogQHBhcmFtW2luXSAgYUV4dFBhbklkICAgICBUaGUgZXh0ZW5kZWQgcGFuIGlkIGZvciBQU0tjIGNvbXB1dGF0aW9uLgorICAgICAqIEBwYXJhbVtvdXRdIGFQU0tjICAgICAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBnZW5lcmF0ZWQgUFNLYyB3aWxsIGJlIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgZ2VuZXJhdGUgUFNLYy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgSWYgdGhlIGxlbmd0aCBvZiBwYXNzcGhyYXNlIGlzIG91dCBvZiByYW5nZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIEdlbmVyYXRlUFNLYyhjb25zdCBjaGFyICphUGFzc1BocmFzZSwgY29uc3QgY2hhciAqYU5ldHdvcmtOYW1lLCBjb25zdCB1aW50OF90ICphRXh0UGFuSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFQU0tjKTsKKworICAgIEFubm91bmNlQmVnaW5DbGllbnQgbUFubm91bmNlQmVnaW47CisgICAgRW5lcmd5U2NhbkNsaWVudCBtRW5lcmd5U2NhbjsKKyAgICBQYW5JZFF1ZXJ5Q2xpZW50IG1QYW5JZFF1ZXJ5OworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtQZXRpdGlvbkF0dGVtcHREZWxheSA9IDUsICAgICAgLy8vPCBDT01NX1BFVF9BVFRFTVBUX0RFTEFZIChzZWNvbmRzKQorICAgICAgICBrUGV0aXRpb25SZXRyeUNvdW50ICAgPSAyLCAgICAgIC8vLzwgQ09NTV9QRVRfUkVUUllfQ09VTlQKKyAgICAgICAga1BldGl0aW9uUmV0cnlEZWxheSAgID0gMSwgICAgICAvLy88IENPTU1fUEVUX1JFVFJZX0RFTEFZIChzZWNvbmRzKQorICAgICAgICBrS2VlcEFsaXZlVGltZW91dCAgICAgPSA1MCwgICAgIC8vLzwgVElNRU9VVF9DT01NX1BFVCAoc2Vjb25kcykKKyAgICAgICAga1JlbW92ZUpvaW5lckRlbGF5ICAgID0gMjAsICAgICAvLy88IERlbGF5IHRvIHJlbW92ZSBzdWNjZXNzZnVsbHkgam9pbmVkIGpvaW5lcgorICAgIH07CisKKyAgICB2b2lkIEFkZENvYXBSZXNvdXJjZXModm9pZCk7CisgICAgdm9pZCBSZW1vdmVDb2FwUmVzb3VyY2VzKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVUaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUpvaW5lckV4cGlyYXRpb25UaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZUpvaW5lckV4cGlyYXRpb25UaW1lcih2b2lkKTsKKworICAgIHZvaWQgVXBkYXRlSm9pbmVyRXhwaXJhdGlvblRpbWVyKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlTWdtdENvbW1pc3Npb25lclNldFJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKyAgICB2b2lkIEhhbmRsZU1nbXRDb21taXNzaXNvbmVyU2V0UmVzcG9uc2UoQ29hcDo6SGVhZGVyICphSGVhZGVyLCBNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZU1nbXRDb21taXNzaW9uZXJHZXRSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCk7CisgICAgdm9pZCBIYW5kbGVNZ210Q29tbWlzc2lzb25lckdldFJlc3BvbnNlKENvYXA6OkhlYWRlciAqYUhlYWRlciwgTWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVMZWFkZXJQZXRpdGlvblJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCk7CisgICAgdm9pZCBIYW5kbGVMZWFkZXJQZXRpdGlvblJlc3BvbnNlKENvYXA6OkhlYWRlciAqYUhlYWRlciwgTWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVMZWFkZXJLZWVwQWxpdmVSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKyAgICB2b2lkIEhhbmRsZUxlYWRlcktlZXBBbGl2ZVJlc3BvbnNlKENvYXA6OkhlYWRlciAqYUhlYWRlciwgTWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZWxheVJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVJlbGF5UmVjZWl2ZShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlRGF0YXNldENoYW5nZWQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlRGF0YXNldENoYW5nZWQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUpvaW5lckZpbmFsaXplKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUpvaW5lckZpbmFsaXplKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICB2b2lkIFNlbmRKb2luRmluYWxpemVSZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBTdGF0ZVRsdjo6U3RhdGUgYVN0YXRlKTsKKworICAgIHN0YXRpYyBvdEVycm9yIFNlbmRSZWxheVRyYW5zbWl0KHZvaWQgKmFDb250ZXh0LCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBvdEVycm9yIFNlbmRSZWxheVRyYW5zbWl0KE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgb3RFcnJvciBTZW5kQ29tbWlzc2lvbmVyU2V0KHZvaWQpOworICAgIG90RXJyb3IgU2VuZFBldGl0aW9uKHZvaWQpOworICAgIG90RXJyb3IgU2VuZEtlZXBBbGl2ZSh2b2lkKTsKKworICAgIHN0YXRpYyBDb21taXNzaW9uZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIG90Q29tbWlzc2lvbmVyU3RhdGUgbVN0YXRlOworCisgICAgc3RydWN0IEpvaW5lcgorICAgIHsKKyAgICAgICAgTWFjOjpFeHRBZGRyZXNzIG1FeHRBZGRyZXNzOworICAgICAgICB1aW50MzJfdCBtRXhwaXJhdGlvblRpbWU7CisgICAgICAgIGNoYXIgbVBza1tEdGxzOjprUHNrTWF4TGVuZ3RoICsgMV07CisgICAgICAgIGJvb2wgbVZhbGlkIDogMTsKKyAgICAgICAgYm9vbCBtQW55IDogMTsKKyAgICB9OworICAgIEpvaW5lciBtSm9pbmVyc1tPUEVOVEhSRUFEX0NPTkZJR19NQVhfSk9JTkVSX0VOVFJJRVNdOworCisgICAgdW5pb24KKyAgICB7CisgICAgICAgIHVpbnQ4X3QgbUpvaW5lcklpZFs4XTsKKyAgICAgICAgdWludDY0X3QgbUpvaW5lcklpZDY0OworICAgIH07CisgICAgdWludDE2X3QgbUpvaW5lclBvcnQ7CisgICAgdWludDE2X3QgbUpvaW5lclJsb2M7CisgICAgVGltZXIgbUpvaW5lckV4cGlyYXRpb25UaW1lcjsKKworICAgIFRpbWVyIG1UaW1lcjsKKyAgICB1aW50MTZfdCBtU2Vzc2lvbklkOworICAgIHVpbnQ4X3QgbVRyYW5zbWl0QXR0ZW1wdHM7CisKKyAgICBDb2FwOjpSZXNvdXJjZSBtUmVsYXlSZWNlaXZlOworICAgIENvYXA6OlJlc291cmNlIG1EYXRhc2V0Q2hhbmdlZDsKKyAgICBDb2FwOjpSZXNvdXJjZSBtSm9pbmVyRmluYWxpemU7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ09NTUlTU0lPTkVSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldC5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTliNjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXQuY3BwCkBAIC0wLDAgKzEsNTM1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGNvbW1vbiBtZXRob2RzIGZvciBtYW5pcHVsYXRpbmcgTWVzaENvUCBEYXRhc2V0cy4KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJkYXRhc2V0LmhwcCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9zZXR0aW5ncy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfdGx2cy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWVzaENvUCB7CisKK0RhdGFzZXQ6OkRhdGFzZXQoY29uc3QgVGx2OjpUeXBlIGFUeXBlKSA6CisgICAgbVVwZGF0ZVRpbWUoMCksCisgICAgbUxlbmd0aCgwKSwKKyAgICBtVHlwZShhVHlwZSkKK3sKKyAgICBtZW1zZXQobVRsdnMsIDAsIHNpemVvZihtVGx2cykpOworfQorCit2b2lkIERhdGFzZXQ6OkNsZWFyKHZvaWQpCit7CisgICAgbUxlbmd0aCA9IDA7Cit9CisKK1RsdiAqRGF0YXNldDo6R2V0KFRsdjo6VHlwZSBhVHlwZSkKK3sKKyAgICBUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGx2ICo+KG1UbHZzKTsKKyAgICBUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgVGx2ICpydmFsID0gTlVMTDsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gYVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IGN1cik7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK2NvbnN0IFRsdiAqRGF0YXNldDo6R2V0KFRsdjo6VHlwZSBhVHlwZSkgY29uc3QKK3sKKyAgICBjb25zdCBUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1UbHZzKTsKKyAgICBjb25zdCBUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgY29uc3QgVGx2ICpydmFsID0gTlVMTDsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gYVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IGN1cik7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgRGF0YXNldDo6R2V0KG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCkgY29uc3QKK3sKKyAgICBjb25zdCBUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1UbHZzKTsKKyAgICBjb25zdCBUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisKKyAgICBtZW1zZXQoJmFEYXRhc2V0LCAwLCBzaXplb2YoYURhdGFzZXQpKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGN1ci0+R2V0VHlwZSgpKQorICAgICAgICB7CisKKyAgICAgICAgY2FzZSBUbHY6OmtBY3RpdmVUaW1lc3RhbXA6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEFjdGl2ZVRpbWVzdGFtcFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQWN0aXZlVGltZXN0YW1wVGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gdGx2LT5HZXRTZWNvbmRzKCk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNBY3RpdmVUaW1lc3RhbXBTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a0NoYW5uZWw6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IENoYW5uZWxUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IENoYW5uZWxUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1DaGFubmVsID0gdGx2LT5HZXRDaGFubmVsKCk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNDaGFubmVsU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtDaGFubmVsTWFzazoKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhfdCBsZW5ndGggPSBjdXItPkdldExlbmd0aCgpOworICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZW50cnkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oY3VyKSArIHNpemVvZihUbHYpOworICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZW50cnlFbmQgPSAgZW50cnkgKyBsZW5ndGg7CisKKyAgICAgICAgICAgIHdoaWxlIChlbnRyeSA8IGVudHJ5RW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyZWludGVycHJldF9jYXN0PGNvbnN0IENoYW5uZWxNYXNrRW50cnkgKj4oZW50cnkpLT5HZXRDaGFubmVsUGFnZSgpID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1aW50OF90IGkgPSBzaXplb2YoQ2hhbm5lbE1hc2tFbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIGFEYXRhc2V0Lm1DaGFubmVsTWFza1BhZ2UwID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGVudHJ5W2ldIHwgKGVudHJ5W2kgKyAxXSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbnRyeVtpICsgMl0gPDwgMTYpIHwgKGVudHJ5W2kgKyAzXSA8PCAyNCkpOworICAgICAgICAgICAgICAgICAgICBhRGF0YXNldC5tSXNDaGFubmVsTWFza1BhZ2UwU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZW50cnkgKz0gKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2hhbm5lbE1hc2tFbnRyeSAqPihlbnRyeSktPkdldE1hc2tMZW5ndGgoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihDaGFubmVsTWFza0VudHJ5KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtEZWxheVRpbWVyOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBEZWxheVRpbWVyVGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBEZWxheVRpbWVyVGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tRGVsYXkgPSB0bHYtPkdldERlbGF5VGltZXIoKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc0RlbGF5U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtFeHRlbmRlZFBhbklkOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBFeHRlbmRlZFBhbklkVGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBFeHRlbmRlZFBhbklkVGx2ICo+KGN1cik7CisgICAgICAgICAgICBtZW1jcHkoYURhdGFzZXQubUV4dGVuZGVkUGFuSWQubTgsIHRsdi0+R2V0RXh0ZW5kZWRQYW5JZCgpLCBzaXplb2YoYURhdGFzZXQubUV4dGVuZGVkUGFuSWQpKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc0V4dGVuZGVkUGFuSWRTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a01lc2hMb2NhbFByZWZpeDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTWVzaExvY2FsUHJlZml4VGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBNZXNoTG9jYWxQcmVmaXhUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIG1lbWNweShhRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04LCB0bHYtPkdldE1lc2hMb2NhbFByZWZpeCgpLCBzaXplb2YoYURhdGFzZXQubU1lc2hMb2NhbFByZWZpeCkpOworICAgICAgICAgICAgYURhdGFzZXQubUlzTWVzaExvY2FsUHJlZml4U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtOZXR3b3JrTWFzdGVyS2V5OgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBOZXR3b3JrTWFzdGVyS2V5VGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBOZXR3b3JrTWFzdGVyS2V5VGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tTWFzdGVyS2V5ID0gdGx2LT5HZXROZXR3b3JrTWFzdGVyS2V5KCk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNNYXN0ZXJLZXlTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a05ldHdvcmtOYW1lOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBOZXR3b3JrTmFtZVRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya05hbWVUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIG1lbWNweShhRGF0YXNldC5tTmV0d29ya05hbWUubTgsIHRsdi0+R2V0TmV0d29ya05hbWUoKSwgdGx2LT5HZXRMZW5ndGgoKSk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNOZXR3b3JrTmFtZVNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprUGFuSWQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFBhbklkVGx2ICpwYW5pZCA9IHN0YXRpY19jYXN0PGNvbnN0IFBhbklkVGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tUGFuSWQgPSBwYW5pZC0+R2V0UGFuSWQoKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc1BhbklkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtQZW5kaW5nVGltZXN0YW1wOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBQZW5kaW5nVGltZXN0YW1wVGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBQZW5kaW5nVGltZXN0YW1wVGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tUGVuZGluZ1RpbWVzdGFtcCA9IHRsdi0+R2V0U2Vjb25kcygpOworICAgICAgICAgICAgYURhdGFzZXQubUlzUGVuZGluZ1RpbWVzdGFtcFNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprUFNLYzoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgUFNLY1RsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUFNLY1RsdiAqPihjdXIpOworICAgICAgICAgICAgbWVtY3B5KGFEYXRhc2V0Lm1QU0tjLm04LCB0bHYtPkdldFBTS2MoKSwgdGx2LT5HZXRMZW5ndGgoKSk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNQU0tjU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtTZWN1cml0eVBvbGljeToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgU2VjdXJpdHlQb2xpY3lUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IFNlY3VyaXR5UG9saWN5VGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tU2VjdXJpdHlQb2xpY3kubVJvdGF0aW9uVGltZSA9IHRsdi0+R2V0Um90YXRpb25UaW1lKCk7CisgICAgICAgICAgICBhRGF0YXNldC5tU2VjdXJpdHlQb2xpY3kubUZsYWdzID0gdGx2LT5HZXRGbGFncygpOworICAgICAgICAgICAgYURhdGFzZXQubUlzU2VjdXJpdHlQb2xpY3lTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorfQorCitvdEVycm9yIERhdGFzZXQ6OlNldChjb25zdCBEYXRhc2V0ICZhRGF0YXNldCkKK3sKKyAgICBtZW1jcHkobVRsdnMsIGFEYXRhc2V0Lm1UbHZzLCBhRGF0YXNldC5tTGVuZ3RoKTsKKyAgICBtTGVuZ3RoID0gYURhdGFzZXQubUxlbmd0aDsKKworICAgIGlmIChtVHlwZSA9PSBUbHY6OmtBY3RpdmVUaW1lc3RhbXApCisgICAgeworICAgICAgICBSZW1vdmUoVGx2OjprUGVuZGluZ1RpbWVzdGFtcCk7CisgICAgICAgIFJlbW92ZShUbHY6OmtEZWxheVRpbWVyKTsKKyAgICB9CisKKyAgICBtVXBkYXRlVGltZSA9IGFEYXRhc2V0LkdldFVwZGF0ZVRpbWUoKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgRGF0YXNldDo6U2V0KGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNoQ29QOjpBY3RpdmVUaW1lc3RhbXBUbHYgYWN0aXZlVGltZXN0YW1wVGx2OworCisgICAgVmVyaWZ5T3JFeGl0KGFEYXRhc2V0Lm1Jc0FjdGl2ZVRpbWVzdGFtcFNldCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgYWN0aXZlVGltZXN0YW1wVGx2LkluaXQoKTsKKyAgICBhY3RpdmVUaW1lc3RhbXBUbHYuU2V0U2Vjb25kcyhhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wKTsKKyAgICBhY3RpdmVUaW1lc3RhbXBUbHYuU2V0VGlja3MoMCk7CisgICAgU2V0KGFjdGl2ZVRpbWVzdGFtcFRsdik7CisKKyAgICBpZiAobVR5cGUgPT0gVGx2OjprUGVuZGluZ1RpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6OlBlbmRpbmdUaW1lc3RhbXBUbHYgcGVuZGluZ1RpbWVzdGFtcFRsdjsKKworICAgICAgICBWZXJpZnlPckV4aXQoYURhdGFzZXQubUlzUGVuZGluZ1RpbWVzdGFtcFNldCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgICAgIHBlbmRpbmdUaW1lc3RhbXBUbHYuSW5pdCgpOworICAgICAgICBwZW5kaW5nVGltZXN0YW1wVGx2LlNldFNlY29uZHMoYURhdGFzZXQubVBlbmRpbmdUaW1lc3RhbXApOworICAgICAgICBwZW5kaW5nVGltZXN0YW1wVGx2LlNldFRpY2tzKDApOworICAgICAgICBTZXQocGVuZGluZ1RpbWVzdGFtcFRsdik7CisKKyAgICAgICAgaWYgKGFEYXRhc2V0Lm1Jc0RlbGF5U2V0KQorICAgICAgICB7CisgICAgICAgICAgICBNZXNoQ29QOjpEZWxheVRpbWVyVGx2IHRsdjsKKyAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICB0bHYuU2V0RGVsYXlUaW1lcihhRGF0YXNldC5tRGVsYXkpOworICAgICAgICAgICAgU2V0KHRsdik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzQ2hhbm5lbFNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6OkNoYW5uZWxUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0Q2hhbm5lbFBhZ2UoMCk7CisgICAgICAgIHRsdi5TZXRDaGFubmVsKGFEYXRhc2V0Lm1DaGFubmVsKTsKKyAgICAgICAgU2V0KHRsdik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0NoYW5uZWxNYXNrUGFnZTBTZXQpCisgICAgeworICAgICAgICBNZXNoQ29QOjpDaGFubmVsTWFzazBUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0TWFzayhhRGF0YXNldC5tQ2hhbm5lbE1hc2tQYWdlMCk7CisgICAgICAgIFNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNFeHRlbmRlZFBhbklkU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6RXh0ZW5kZWRQYW5JZFRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRFeHRlbmRlZFBhbklkKGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkLm04KTsKKyAgICAgICAgU2V0KHRsdik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc01lc2hMb2NhbFByZWZpeFNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6Ok1lc2hMb2NhbFByZWZpeFRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRNZXNoTG9jYWxQcmVmaXgoYURhdGFzZXQubU1lc2hMb2NhbFByZWZpeC5tOCk7CisgICAgICAgIFNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNNYXN0ZXJLZXlTZXQpCisgICAgeworICAgICAgICBNZXNoQ29QOjpOZXR3b3JrTWFzdGVyS2V5VGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE5ldHdvcmtNYXN0ZXJLZXkoYURhdGFzZXQubU1hc3RlcktleSk7CisgICAgICAgIFNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNOZXR3b3JrTmFtZVNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6Ok5ldHdvcmtOYW1lVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE5ldHdvcmtOYW1lKGFEYXRhc2V0Lm1OZXR3b3JrTmFtZS5tOCk7CisgICAgICAgIFNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNQYW5JZFNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6OlBhbklkVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldFBhbklkKGFEYXRhc2V0Lm1QYW5JZCk7CisgICAgICAgIFNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNQU0tjU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6UFNLY1RsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRQU0tjKGFEYXRhc2V0Lm1QU0tjLm04KTsKKyAgICAgICAgU2V0KHRsdik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc1NlY3VyaXR5UG9saWN5U2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6U2VjdXJpdHlQb2xpY3lUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0Um90YXRpb25UaW1lKGFEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tUm90YXRpb25UaW1lKTsKKyAgICAgICAgdGx2LlNldEZsYWdzKGFEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tRmxhZ3MpOworICAgICAgICBTZXQodGx2KTsKKyAgICB9CisKKyAgICBtVXBkYXRlVGltZSA9IFRpbWVyOjpHZXROb3coKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK2NvbnN0IFRpbWVzdGFtcCAqRGF0YXNldDo6R2V0VGltZXN0YW1wKHZvaWQpIGNvbnN0Cit7CisgICAgY29uc3QgVGltZXN0YW1wICp0aW1lc3RhbXAgPSBOVUxMOworCisgICAgaWYgKG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIGNvbnN0IEFjdGl2ZVRpbWVzdGFtcFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQWN0aXZlVGltZXN0YW1wVGx2ICo+KEdldChtVHlwZSkpOworICAgICAgICBWZXJpZnlPckV4aXQodGx2ICE9IE5VTEwpOworICAgICAgICB0aW1lc3RhbXAgPSBzdGF0aWNfY2FzdDxjb25zdCBUaW1lc3RhbXAgKj4odGx2KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgUGVuZGluZ1RpbWVzdGFtcFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUGVuZGluZ1RpbWVzdGFtcFRsdiAqPihHZXQobVR5cGUpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHRsdiAhPSBOVUxMKTsKKyAgICAgICAgdGltZXN0YW1wID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGltZXN0YW1wICo+KHRsdik7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiB0aW1lc3RhbXA7Cit9CisKK3ZvaWQgRGF0YXNldDo6U2V0VGltZXN0YW1wKGNvbnN0IFRpbWVzdGFtcCAmYVRpbWVzdGFtcCkKK3sKKyAgICBpZiAobVR5cGUgPT0gVGx2OjprQWN0aXZlVGltZXN0YW1wKQorICAgIHsKKyAgICAgICAgQWN0aXZlVGltZXN0YW1wVGx2IGFjdGl2ZVRpbWVzdGFtcDsKKyAgICAgICAgYWN0aXZlVGltZXN0YW1wLkluaXQoKTsKKyAgICAgICAgKnN0YXRpY19jYXN0PFRpbWVzdGFtcCAqPigmYWN0aXZlVGltZXN0YW1wKSA9IGFUaW1lc3RhbXA7CisgICAgICAgIFNldChhY3RpdmVUaW1lc3RhbXApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBQZW5kaW5nVGltZXN0YW1wVGx2IHBlbmRpbmdUaW1lc3RhbXA7CisgICAgICAgIHBlbmRpbmdUaW1lc3RhbXAuSW5pdCgpOworICAgICAgICAqc3RhdGljX2Nhc3Q8VGltZXN0YW1wICo+KCZwZW5kaW5nVGltZXN0YW1wKSA9IGFUaW1lc3RhbXA7CisgICAgICAgIFNldChwZW5kaW5nVGltZXN0YW1wKTsKKyAgICB9Cit9CisKK290RXJyb3IgRGF0YXNldDo6U2V0KGNvbnN0IFRsdiAmYVRsdikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MTZfdCBieXRlc0F2YWlsYWJsZSA9IHNpemVvZihtVGx2cykgLSBtTGVuZ3RoOworICAgIFRsdiAqb2xkID0gR2V0KGFUbHYuR2V0VHlwZSgpKTsKKworICAgIGlmIChvbGQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGJ5dGVzQXZhaWxhYmxlICs9IHNpemVvZihUbHYpICsgb2xkLT5HZXRMZW5ndGgoKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoc2l6ZW9mKFRsdikgKyBhVGx2LkdldExlbmd0aCgpIDw9IGJ5dGVzQXZhaWxhYmxlLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgLy8gcmVtb3ZlIG9sZCBUTFYKKyAgICBpZiAob2xkICE9IE5VTEwpCisgICAgeworICAgICAgICBSZW1vdmUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KG9sZCksIHNpemVvZihUbHYpICsgb2xkLT5HZXRMZW5ndGgoKSk7CisgICAgfQorCisgICAgLy8gYWRkIG5ldyBUTFYKKyAgICBtZW1jcHkobVRsdnMgKyBtTGVuZ3RoLCAmYVRsdiwgc2l6ZW9mKFRsdikgKyBhVGx2LkdldExlbmd0aCgpKTsKKyAgICBtTGVuZ3RoICs9IHNpemVvZihUbHYpICsgYVRsdi5HZXRMZW5ndGgoKTsKKworICAgIG1VcGRhdGVUaW1lID0gVGltZXI6OkdldE5vdygpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpTZXQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhTGVuZ3RoID09IGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgYUxlbmd0aCwgbVRsdnMpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgbUxlbmd0aCA9IGFMZW5ndGg7CisKKyAgICBtVXBkYXRlVGltZSA9IFRpbWVyOjpHZXROb3coKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgRGF0YXNldDo6UmVtb3ZlKFRsdjo6VHlwZSBhVHlwZSkKK3sKKyAgICBUbHYgKnRsdjsKKworICAgIFZlcmlmeU9yRXhpdCgodGx2ID0gR2V0KGFUeXBlKSkgIT0gTlVMTCk7CisgICAgUmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPih0bHYpLCBzaXplb2YoVGx2KSArIHRsdi0+R2V0TGVuZ3RoKCkpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpBcHBlbmRNbGVEYXRhc2V0VGx2KE1lc3NhZ2UgJmFNZXNzYWdlKSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1sZTo6VGx2IHRsdjsKKyAgICBNbGU6OlRsdjo6VHlwZSB0eXBlOworICAgIGNvbnN0IFRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUbHYgKj4obVRsdnMpOworICAgIGNvbnN0IFRsdiAqZW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKworICAgIFZlcmlmeU9yRXhpdChtTGVuZ3RoID4gMCk7CisKKyAgICB0eXBlID0gKG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCA/IE1sZTo6VGx2OjprQWN0aXZlRGF0YXNldCA6IE1sZTo6VGx2OjprUGVuZGluZ0RhdGFzZXQpOworCisgICAgdGx2LlNldFR5cGUodHlwZSk7CisgICAgdGx2LlNldExlbmd0aChzdGF0aWNfY2FzdDx1aW50OF90PihtTGVuZ3RoKSAtIHNpemVvZihUbHYpIC0gc2l6ZW9mKFRpbWVzdGFtcCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKFRsdikpKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gbVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIDsgLy8gc2tpcCBBY3RpdmUgb3IgUGVuZGluZyBUaW1lc3RhbXAgVExWCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gVGx2OjprRGVsYXlUaW1lcikKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgZWxhcHNlZCA9IFRpbWVyOjpHZXROb3coKSAtIG1VcGRhdGVUaW1lOworICAgICAgICAgICAgRGVsYXlUaW1lclRsdiBkZWxheVRpbWVyOworCisgICAgICAgICAgICBtZW1jcHkoJmRlbGF5VGltZXIsIGN1ciwgc2l6ZW9mKGRlbGF5VGltZXIpKTsKKworICAgICAgICAgICAgaWYgKGRlbGF5VGltZXIuR2V0RGVsYXlUaW1lcigpID4gZWxhcHNlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWxheVRpbWVyLlNldERlbGF5VGltZXIoZGVsYXlUaW1lci5HZXREZWxheVRpbWVyKCkgLSBlbGFwc2VkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWxheVRpbWVyLlNldERlbGF5VGltZXIoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJmRlbGF5VGltZXIsIHNpemVvZihkZWxheVRpbWVyKSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZChjdXIsIHNpemVvZihUbHYpICsgY3VyLT5HZXRMZW5ndGgoKSkpOworICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDE2X3QgRGF0YXNldDo6R2V0U2V0dGluZ3NLZXkodm9pZCkKK3sKKyAgICB1aW50MTZfdCBydmFsOworCisgICAgaWYgKG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIHJ2YWwgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oU2V0dGluZ3M6OmtLZXlBY3RpdmVEYXRhc2V0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcnZhbCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihTZXR0aW5nczo6a0tleVBlbmRpbmdEYXRhc2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKwordm9pZCBEYXRhc2V0OjpSZW1vdmUodWludDhfdCAqYVN0YXJ0LCB1aW50OF90IGFMZW5ndGgpCit7CisgICAgbWVtbW92ZShhU3RhcnQsIGFTdGFydCArIGFMZW5ndGgsIG1MZW5ndGggLSAoc3RhdGljX2Nhc3Q8dWludDhfdD4oYVN0YXJ0IC0gbVRsdnMpICsgYUxlbmd0aCkpOworICAgIG1MZW5ndGggLT0gYUxlbmd0aDsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0LmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1MDM3MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldC5ocHAKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5hZ2luZyBNZXNoQ29QIERhdGFzZXRzLgorICoKKyAqLworCisjaWZuZGVmIE1FU0hDT1BfREFUQVNFVF9IUFBfCisjZGVmaW5lIE1FU0hDT1BfREFUQVNFVF9IUFBfCisKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworY2xhc3MgRGF0YXNldAoreworICAgIGZyaWVuZCBjbGFzcyBEYXRhc2V0TG9jYWw7CisKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4U2l6ZSA9IDI1NiwgICAgICAvLy88IE1heGltdW0gc2l6ZSBvZiBNZXNoQ29QIERhdGFzZXQgKGJ5dGVzKQorICAgICAgICBrTWF4VmFsdWVTaXplID0gMTYsICAvLy8gPCBNYXhpbXVtIHNpemUgb2YgZWFjaCBEYXRhc2V0IFRMViB2YWx1ZSAoYnl0ZXMpCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICAgICAgIFRoZSB0eXBlIG9mIHRoZSBkYXRhc2V0LCBhY3RpdmUgb3IgcGVuZGluZy4KKyAgICAgKgorICAgICAqLworICAgIERhdGFzZXQoY29uc3QgVGx2OjpUeXBlIGFUeXBlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgVExWLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBUTFYgb3IgTlVMTCBpZiBub25lIGlzIGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgVGx2ICpHZXQoVGx2OjpUeXBlIGFUeXBlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFRMViBvciBOVUxMIGlmIG5vbmUgaXMgZm91bmQuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBUbHYgKkdldChUbHY6OlR5cGUgYVR5cGUpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJ5dGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGJ5dGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRCeXRlcyh2b2lkKSBjb25zdCB7IHJldHVybiBtVGx2czsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29udmVydHMgdGhlIFRMViByZXByZXNlbnRhdGlvbiB0byBzdHJ1Y3R1cmUgcmVwcmVzZW50YXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEdldChvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRGF0YXNldCBzaXplIGluIGJ5dGVzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIERhdGFzZXQgc2l6ZSBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFNpemUodm9pZCkgY29uc3QgeyByZXR1cm4gbUxlbmd0aDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbG9jYWwgdGltZSB0aGUgZGF0YXNldCB3YXMgbGFzdCB1cGRhdGVkLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGxvY2FsIHRpbWUgdGhlIGRhdGFzZXQgd2FzIGxhc3QgdXBkYXRlZC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFVwZGF0ZVRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbVVwZGF0ZVRpbWU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFRpbWVzdGFtcC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgVGltZXN0YW1wLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgVGltZXN0YW1wICpHZXRUaW1lc3RhbXAodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUaW1lc3RhbXAgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRpbWVzdGFtcChjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXApOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBhIFRMViBpbiB0aGUgRGF0YXNldC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUbHYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIENvdWxkIG5vdCBzZXQgdGhlIFRMViBkdWUgdG8gaW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IFRsdiAmYVRsdik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBEYXRhc2V0IHVzaW5nIFRMVnMgc3RvcmVkIGluIGEgbWVzc2FnZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFPZmZzZXQgICBUaGUgbWVzc2FnZSBidWZmZXIgb2Zmc2V0IHdoZXJlIHRoZSBkYXRhc2V0IHN0YXJ0cy4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgVGhlIFRMVnMgbGVuZ3RoIGluIHRoZSBtZXNzYWdlIGJ1ZmZlciBpbiBieXRlcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBEYXRhc2V0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgdmFsdWVzIG9mIEBwIGFPZmZzZXQgYW5kIEBwIGFMZW5ndGggYXJlIG5vdCB2YWxpZCBmb3IgQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCwgdWludDhfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERhdGFzZXQgdXNpbmcgYW4gZXhpc3RpbmcgRGF0YXNldC4KKyAgICAgKgorICAgICAqIElmIHRoaXMgRGF0YXNldCBpcyBhbiBBY3RpdmUgRGF0YXNldCwgYW55IFBlbmRpbmcgVGltZXN0YW1wIGFuZCBEZWxheSBUaW1lciBUTFZzIHdpbGwgYmUgb21pdHRlZCBpbiB0aGUgY29weQorICAgICAqIGZyb20gQHAgYURhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRGF0YXNldCAgVGhlIGlucHV0IERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldChjb25zdCBEYXRhc2V0ICZhRGF0YXNldCk7CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRGF0YXNldCAgVGhlIGlucHV0IERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpOworI2VuZGlmCisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgVExWIGZyb20gdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFUeXBlIFRoZSB0eXBlIG9mIGEgc3BlY2lmaWMgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmUoVGx2OjpUeXBlIGFUeXBlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgdGhlIE1MRSBEYXRhc2V0IFRMViBidXQgZXhjbHVkaW5nIE1lc2hDb1AgU3ViIFRpbWVzdGFtcCBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmQgTUxFIERhdGFzZXQgVExWIHdpdGhvdXQgTWVzaENvUCBTdWIgVGltZXN0YW1wIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBhdmFpbGFibGUgYnVmZmVycyB0byBhcHBlbmQgdGhlIG1lc3NhZ2Ugd2l0aCBNTEUgRGF0YXNldCBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZE1sZURhdGFzZXRUbHYoTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0OworCitwcml2YXRlOgorICAgIHVpbnQxNl90IEdldFNldHRpbmdzS2V5KHZvaWQpOworCisgICAgdm9pZCBSZW1vdmUodWludDhfdCAqYVN0YXJ0LCB1aW50OF90IGFMZW5ndGgpOworCisgICAgdWludDhfdCAgICBtVGx2c1trTWF4U2l6ZV07ICAvLy88IFRoZSBEYXRhc2V0IGJ1ZmZlcgorICAgIHVpbnQzMl90ICAgbVVwZGF0ZVRpbWU7ICAgICAgLy8vPCBMb2NhbCB0aW1lIGxhc3QgdXBkYXRlZAorICAgIHVpbnQxNl90ICAgbUxlbmd0aDsgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHZhbGlkIGJ5dGVzIGluIEB2YXIgbVRsdnMKKyAgICBUbHY6OlR5cGUgIG1UeXBlOyAgICAgICAgICAgIC8vLzwgQWN0aXZlIG9yIFBlbmRpbmcKK307CisKK30gIC8vIG5hbWVzcGFjZSBNZXNoQ29QCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBNRVNIQ09QX0RBVEFTRVRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X2xvY2FsLmNwcCBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9sb2NhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5MGFkYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9sb2NhbC5jcHAKQEAgLTAsMCArMSw0NTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBjb21tb24gbWV0aG9kcyBmb3IgbWFuaXB1bGF0aW5nIE1lc2hDb1AgRGF0YXNldHMuCisgKgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImRhdGFzZXRfbG9jYWwudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImRhdGFzZXRfbG9jYWwuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vc2V0dGluZ3MuaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3NldHRpbmdzLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2RhdGFzZXQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3RsdnMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitEYXRhc2V0TG9jYWw6OkRhdGFzZXRMb2NhbChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IFRsdjo6VHlwZSBhVHlwZSkgOgorICAgIEluc3RhbmNlTG9jYXRvcihhSW5zdGFuY2UpLAorICAgIG1VcGRhdGVUaW1lKDApLAorICAgIG1UeXBlKGFUeXBlKQoreworfQorCit2b2lkIERhdGFzZXRMb2NhbDo6Q2xlYXIodm9pZCkKK3sKKyAgICBvdFBsYXRTZXR0aW5nc0RlbGV0ZShHZXRJbnN0YW5jZSgpLCBHZXRTZXR0aW5nc0tleSgpLCAtMSk7Cit9CisKK2Jvb2wgRGF0YXNldExvY2FsOjpJc1ByZXNlbnQodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3RQbGF0U2V0dGluZ3NHZXQoR2V0SW5zdGFuY2UoKSwgR2V0U2V0dGluZ3NLZXkoKSwgMCwgTlVMTCwgTlVMTCkgPT0gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBEYXRhc2V0TG9jYWw6OkdldChEYXRhc2V0ICZhRGF0YXNldCkKK3sKKyAgICBEZWxheVRpbWVyVGx2ICpkZWxheVRpbWVyOworICAgIHVpbnQzMl90IGVsYXBzZWQ7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIGFEYXRhc2V0Lm1MZW5ndGggPSBzaXplb2YoYURhdGFzZXQubVRsdnMpOworICAgIGVycm9yID0gb3RQbGF0U2V0dGluZ3NHZXQoR2V0SW5zdGFuY2UoKSwgR2V0U2V0dGluZ3NLZXkoKSwgMCwgYURhdGFzZXQubVRsdnMsICZhRGF0YXNldC5tTGVuZ3RoKTsKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgYURhdGFzZXQubUxlbmd0aCA9IDApOworCisgICAgZGVsYXlUaW1lciA9IHN0YXRpY19jYXN0PERlbGF5VGltZXJUbHYgKj4oYURhdGFzZXQuR2V0KFRsdjo6a0RlbGF5VGltZXIpKTsKKyAgICBWZXJpZnlPckV4aXQoZGVsYXlUaW1lcik7CisKKyAgICBlbGFwc2VkID0gVGltZXI6OkdldE5vdygpIC0gbVVwZGF0ZVRpbWU7CisKKyAgICBpZiAoZGVsYXlUaW1lci0+R2V0RGVsYXlUaW1lcigpID4gZWxhcHNlZCkKKyAgICB7CisgICAgICAgIGRlbGF5VGltZXItPlNldERlbGF5VGltZXIoZGVsYXlUaW1lci0+R2V0RGVsYXlUaW1lcigpIC0gZWxhcHNlZCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRlbGF5VGltZXItPlNldERlbGF5VGltZXIoMCk7CisgICAgfQorCisgICAgYURhdGFzZXQubVVwZGF0ZVRpbWUgPSBUaW1lcjo6R2V0Tm93KCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXRMb2NhbDo6R2V0KG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCkgY29uc3QKK3sKKyAgICBEYXRhc2V0ICAgIGRhdGFzZXQobVR5cGUpOworICAgIG90RXJyb3IgICAgZXJyb3I7CisgICAgY29uc3QgVGx2ICpjdXI7CisgICAgY29uc3QgVGx2ICplbmQ7CisKKyAgICBtZW1zZXQoJmFEYXRhc2V0LCAwLCBzaXplb2YoYURhdGFzZXQpKTsKKworICAgIGRhdGFzZXQubUxlbmd0aCA9IHNpemVvZihkYXRhc2V0Lm1UbHZzKTsKKyAgICBlcnJvciA9IG90UGxhdFNldHRpbmdzR2V0KEdldEluc3RhbmNlKCksIEdldFNldHRpbmdzS2V5KCksIDAsIGRhdGFzZXQubVRsdnMsICZkYXRhc2V0Lm1MZW5ndGgpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworCisgICAgY3VyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUbHYgKj4oZGF0YXNldC5tVGx2cyk7CisgICAgZW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUbHYgKj4oZGF0YXNldC5tVGx2cyArIGRhdGFzZXQubUxlbmd0aCk7CisKKyAgICB3aGlsZSAoY3VyIDwgZW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjdXItPkdldFR5cGUoKSkKKyAgICAgICAgeworCisgICAgICAgIGNhc2UgVGx2OjprQWN0aXZlVGltZXN0YW1wOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBBY3RpdmVUaW1lc3RhbXBUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IEFjdGl2ZVRpbWVzdGFtcFRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubUFjdGl2ZVRpbWVzdGFtcCA9IHRsdi0+R2V0U2Vjb25kcygpOworICAgICAgICAgICAgYURhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtDaGFubmVsOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBDaGFubmVsVGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBDaGFubmVsVGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbCA9IHRsdi0+R2V0Q2hhbm5lbCgpOworICAgICAgICAgICAgYURhdGFzZXQubUlzQ2hhbm5lbFNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprQ2hhbm5lbE1hc2s6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgdGx2TGVuZ3RoID0gY3VyLT5HZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmVudHJ5ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KGN1cikgKyBzaXplb2YoVGx2KTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmVudHJ5RW5kID0gIGVudHJ5ICsgdGx2TGVuZ3RoOworCisgICAgICAgICAgICB3aGlsZSAoZW50cnkgPCBlbnRyeUVuZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBDaGFubmVsTWFza0VudHJ5ICo+KGVudHJ5KS0+R2V0Q2hhbm5lbFBhZ2UoKSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCBpID0gc2l6ZW9mKENoYW5uZWxNYXNrRW50cnkpOworICAgICAgICAgICAgICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbE1hc2tQYWdlMCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihlbnRyeVtpXSB8IChlbnRyeVtpICsgMV0gPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW50cnlbaSArIDJdIDw8IDE2KSB8IChlbnRyeVtpICsgM10gPDwgMjQpKTsKKyAgICAgICAgICAgICAgICAgICAgYURhdGFzZXQubUlzQ2hhbm5lbE1hc2tQYWdlMFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGVudHJ5ICs9IChyZWludGVycHJldF9jYXN0PGNvbnN0IENoYW5uZWxNYXNrRW50cnkgKj4oZW50cnkpLT5HZXRNYXNrTGVuZ3RoKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQ2hhbm5lbE1hc2tFbnRyeSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprRGVsYXlUaW1lcjoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRGVsYXlUaW1lclRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRGVsYXlUaW1lclRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubURlbGF5ID0gdGx2LT5HZXREZWxheVRpbWVyKCk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNEZWxheVNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprRXh0ZW5kZWRQYW5JZDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRXh0ZW5kZWRQYW5JZFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRXh0ZW5kZWRQYW5JZFRsdiAqPihjdXIpOworICAgICAgICAgICAgbWVtY3B5KGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkLm04LCB0bHYtPkdldEV4dGVuZGVkUGFuSWQoKSwgc2l6ZW9mKGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkKSk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNFeHRlbmRlZFBhbklkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtNZXNoTG9jYWxQcmVmaXg6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IE1lc2hMb2NhbFByZWZpeFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgTWVzaExvY2FsUHJlZml4VGx2ICo+KGN1cik7CisgICAgICAgICAgICBtZW1jcHkoYURhdGFzZXQubU1lc2hMb2NhbFByZWZpeC5tOCwgdGx2LT5HZXRNZXNoTG9jYWxQcmVmaXgoKSwgc2l6ZW9mKGFEYXRhc2V0Lm1NZXNoTG9jYWxQcmVmaXgpKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc01lc2hMb2NhbFByZWZpeFNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprTmV0d29ya01hc3RlcktleToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTmV0d29ya01hc3RlcktleVRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya01hc3RlcktleVRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubU1hc3RlcktleSA9IHRsdi0+R2V0TmV0d29ya01hc3RlcktleSgpOworICAgICAgICAgICAgYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtOZXR3b3JrTmFtZToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTmV0d29ya05hbWVUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IE5ldHdvcmtOYW1lVGx2ICo+KGN1cik7CisgICAgICAgICAgICBtZW1jcHkoYURhdGFzZXQubU5ldHdvcmtOYW1lLm04LCB0bHYtPkdldE5ldHdvcmtOYW1lKCksIHRsdi0+R2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgYURhdGFzZXQubUlzTmV0d29ya05hbWVTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a1BhbklkOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBQYW5JZFRsdiAqcGFuaWQgPSBzdGF0aWNfY2FzdDxjb25zdCBQYW5JZFRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubVBhbklkID0gcGFuaWQtPkdldFBhbklkKCk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNQYW5JZFNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprUGVuZGluZ1RpbWVzdGFtcDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgUGVuZGluZ1RpbWVzdGFtcFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUGVuZGluZ1RpbWVzdGFtcFRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubVBlbmRpbmdUaW1lc3RhbXAgPSB0bHYtPkdldFNlY29uZHMoKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc1BlbmRpbmdUaW1lc3RhbXBTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a1BTS2M6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFBTS2NUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IFBTS2NUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIG1lbWNweShhRGF0YXNldC5tUFNLYy5tOCwgdGx2LT5HZXRQU0tjKCksIHRsdi0+R2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgYURhdGFzZXQubUlzUFNLY1NldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprU2VjdXJpdHlQb2xpY3k6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFNlY3VyaXR5UG9saWN5VGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBTZWN1cml0eVBvbGljeVRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1Sb3RhdGlvblRpbWUgPSB0bHYtPkdldFJvdGF0aW9uVGltZSgpOworICAgICAgICAgICAgYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyA9IHRsdi0+R2V0RmxhZ3MoKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc1NlY3VyaXR5UG9saWN5U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIERhdGFzZXRMb2NhbDo6U2V0KGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBEYXRhc2V0IGRhdGFzZXQobVR5cGUpOworICAgIE1lc2hDb1A6OkFjdGl2ZVRpbWVzdGFtcFRsdiBhY3RpdmVUaW1lc3RhbXBUbHY7CisKKyAgICBWZXJpZnlPckV4aXQoYURhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0LCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBhY3RpdmVUaW1lc3RhbXBUbHYuSW5pdCgpOworICAgIGFjdGl2ZVRpbWVzdGFtcFRsdi5TZXRTZWNvbmRzKGFEYXRhc2V0Lm1BY3RpdmVUaW1lc3RhbXApOworICAgIGFjdGl2ZVRpbWVzdGFtcFRsdi5TZXRUaWNrcygwKTsKKyAgICBkYXRhc2V0LlNldChhY3RpdmVUaW1lc3RhbXBUbHYpOworCisgICAgaWYgKG1UeXBlID09IFRsdjo6a1BlbmRpbmdUaW1lc3RhbXApCisgICAgeworICAgICAgICBNZXNoQ29QOjpQZW5kaW5nVGltZXN0YW1wVGx2IHBlbmRpbmdUaW1lc3RhbXBUbHY7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFEYXRhc2V0Lm1Jc1BlbmRpbmdUaW1lc3RhbXBTZXQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICAgICBwZW5kaW5nVGltZXN0YW1wVGx2LkluaXQoKTsKKyAgICAgICAgcGVuZGluZ1RpbWVzdGFtcFRsdi5TZXRTZWNvbmRzKGFEYXRhc2V0Lm1QZW5kaW5nVGltZXN0YW1wKTsKKyAgICAgICAgcGVuZGluZ1RpbWVzdGFtcFRsdi5TZXRUaWNrcygwKTsKKyAgICAgICAgZGF0YXNldC5TZXQocGVuZGluZ1RpbWVzdGFtcFRsdik7CisKKyAgICAgICAgaWYgKGFEYXRhc2V0Lm1Jc0RlbGF5U2V0KQorICAgICAgICB7CisgICAgICAgICAgICBNZXNoQ29QOjpEZWxheVRpbWVyVGx2IHRsdjsKKyAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICB0bHYuU2V0RGVsYXlUaW1lcihhRGF0YXNldC5tRGVsYXkpOworICAgICAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNDaGFubmVsU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6Q2hhbm5lbFRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRDaGFubmVsUGFnZSgwKTsKKyAgICAgICAgdGx2LlNldENoYW5uZWwoYURhdGFzZXQubUNoYW5uZWwpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNDaGFubmVsTWFza1BhZ2UwU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE1hc2soYURhdGFzZXQubUNoYW5uZWxNYXNrUGFnZTApOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNFeHRlbmRlZFBhbklkU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6RXh0ZW5kZWRQYW5JZFRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRFeHRlbmRlZFBhbklkKGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkLm04KTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzTWVzaExvY2FsUHJlZml4U2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6TWVzaExvY2FsUHJlZml4VGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE1lc2hMb2NhbFByZWZpeChhRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04KTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6TmV0d29ya01hc3RlcktleVRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXROZXR3b3JrTWFzdGVyS2V5KGFEYXRhc2V0Lm1NYXN0ZXJLZXkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNOZXR3b3JrTmFtZVNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6Ok5ldHdvcmtOYW1lVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE5ldHdvcmtOYW1lKGFEYXRhc2V0Lm1OZXR3b3JrTmFtZS5tOCk7CisgICAgICAgIGRhdGFzZXQuU2V0KHRsdik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc1BhbklkU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6UGFuSWRUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0UGFuSWQoYURhdGFzZXQubVBhbklkKTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzUFNLY1NldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6OlBTS2NUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0UFNLYyhhRGF0YXNldC5tUFNLYy5tOCk7CisgICAgICAgIGRhdGFzZXQuU2V0KHRsdik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc1NlY3VyaXR5UG9saWN5U2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6U2VjdXJpdHlQb2xpY3lUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0Um90YXRpb25UaW1lKGFEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tUm90YXRpb25UaW1lKTsKKyAgICAgICAgdGx2LlNldEZsYWdzKGFEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tRmxhZ3MpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIGlmIChkYXRhc2V0LkdldFNpemUoKSA9PSAwKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFBsYXRTZXR0aW5nc0RlbGV0ZShHZXRJbnN0YW5jZSgpLCBHZXRTZXR0aW5nc0tleSgpLCAwKTsKKyAgICAgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiJXMgZGF0YXNldCBkZWxldGVkIiwgbVR5cGUgPT0gVGx2OjprQWN0aXZlVGltZXN0YW1wID8gIkFjdGl2ZSIgOiAiUGVuZGluZyIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IG90UGxhdFNldHRpbmdzU2V0KEdldEluc3RhbmNlKCksIEdldFNldHRpbmdzS2V5KCksIGRhdGFzZXQuR2V0Qnl0ZXMoKSwgZGF0YXNldC5HZXRTaXplKCkpOworICAgICAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICIlcyBkYXRhc2V0IHNldCIsIG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCA/ICJBY3RpdmUiIDogIlBlbmRpbmciKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgRGF0YXNldExvY2FsOjpTZXQoY29uc3QgRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgRGF0YXNldCBkYXRhc2V0KGFEYXRhc2V0KTsKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgaWYgKG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIGRhdGFzZXQuUmVtb3ZlKFRsdjo6a1BlbmRpbmdUaW1lc3RhbXApOworICAgICAgICBkYXRhc2V0LlJlbW92ZShUbHY6OmtEZWxheVRpbWVyKTsKKyAgICB9CisKKyAgICBpZiAoZGF0YXNldC5HZXRTaXplKCkgPT0gMCkKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RQbGF0U2V0dGluZ3NEZWxldGUoR2V0SW5zdGFuY2UoKSwgR2V0U2V0dGluZ3NLZXkoKSwgMCk7CisgICAgICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIiVzIGRhdGFzZXQgZGVsZXRlZCIsIG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCA/ICJBY3RpdmUiIDogIlBlbmRpbmciKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFBsYXRTZXR0aW5nc1NldChHZXRJbnN0YW5jZSgpLCBHZXRTZXR0aW5nc0tleSgpLCBkYXRhc2V0LkdldEJ5dGVzKCksIGRhdGFzZXQuR2V0U2l6ZSgpKTsKKyAgICAgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiJXMgZGF0YXNldCBzZXQiLCBtVHlwZSA9PSBUbHY6OmtBY3RpdmVUaW1lc3RhbXAgPyAiQWN0aXZlIiA6ICJQZW5kaW5nIik7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvcik7CisKKyAgICBtVXBkYXRlVGltZSA9IFRpbWVyOjpHZXROb3coKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQxNl90IERhdGFzZXRMb2NhbDo6R2V0U2V0dGluZ3NLZXkodm9pZCkgY29uc3QKK3sKKyAgICB1aW50MTZfdCBydmFsOworCisgICAgaWYgKG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIHJ2YWwgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oU2V0dGluZ3M6OmtLZXlBY3RpdmVEYXRhc2V0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcnZhbCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihTZXR0aW5nczo6a0tleVBlbmRpbmdEYXRhc2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKworaW50IERhdGFzZXRMb2NhbDo6Q29tcGFyZShjb25zdCBUaW1lc3RhbXAgKmFDb21wYXJlVGltZXN0YW1wKQoreworICAgIGNvbnN0IFRpbWVzdGFtcCAqdGhpc1RpbWVzdGFtcDsKKyAgICBEYXRhc2V0IGRhdGFzZXQobVR5cGUpOworICAgIGludCBydmFsID0gMTsKKworICAgIFN1Y2Nlc3NPckV4aXQoR2V0KGRhdGFzZXQpKTsKKworICAgIHRoaXNUaW1lc3RhbXAgPSBkYXRhc2V0LkdldFRpbWVzdGFtcCgpOworCisgICAgaWYgKGFDb21wYXJlVGltZXN0YW1wID09IE5VTEwgJiYgdGhpc1RpbWVzdGFtcCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcnZhbCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKGFDb21wYXJlVGltZXN0YW1wID09IE5VTEwgJiYgdGhpc1RpbWVzdGFtcCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgcnZhbCA9IC0xOworICAgIH0KKyAgICBlbHNlIGlmIChhQ29tcGFyZVRpbWVzdGFtcCAhPSBOVUxMICYmIHRoaXNUaW1lc3RhbXAgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJ2YWwgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBydmFsID0gdGhpc1RpbWVzdGFtcC0+Q29tcGFyZSgqYUNvbXBhcmVUaW1lc3RhbXApOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X2xvY2FsLmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9sb2NhbC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkZTMzMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9sb2NhbC5ocHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1hbmFnaW5nIE1lc2hDb1AgRGF0YXNldHMuCisgKgorICovCisKKyNpZm5kZWYgTUVTSENPUF9EQVRBU0VUX0xPQ0FMX0hQUF8KKyNkZWZpbmUgTUVTSENPUF9EQVRBU0VUX0xPQ0FMX0hQUF8KKworI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2RhdGFzZXQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworY2xhc3MgRGF0YXNldExvY2FsOiBwdWJsaWMgSW5zdGFuY2VMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAgICAgKiBAcGFyYW1baW5dICBhVHlwZSAgICAgIFRoZSB0eXBlIG9mIHRoZSBkYXRhc2V0LCBhY3RpdmUgb3IgcGVuZGluZy4KKyAgICAgKgorICAgICAqLworICAgIERhdGFzZXRMb2NhbChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IFRsdjo6VHlwZSBhVHlwZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGFuIEFjdGl2ZSBvciBQZW5kaW5nIERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCB3aGVuIHRoaXMgaXMgYW4gQWN0aXZlIERhdGFzZXQuCisgICAgICogQHJldHZhbCBUbHY6OmtQZW5kaW5nVGltZXRhbXAgd2hlbiB0aGlzIGlzIGEgUGVuZGluZyBEYXRhc2V0LgorICAgICAqCisgICAgICovCisgICAgVGx2OjpUeXBlIEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGRhdGFzZXQgaXMgcHJlc2VudCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgaWYgdGhlIGRhdGFzZXQgaXMgcHJlc2VudCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqIEByZXR2YWwgRkFMU0UgIGlmIHRoZSBkYXRhc2V0IGlzIG5vdCBwcmVzZW50IGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUHJlc2VudCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBBY3RpdmUgb3IgUGVuZGluZyBUaW1lc3RhbXAgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSBwb2ludGVyIHRvIHRoZSBBY3RpdmUgb3IgUGVuZGluZyBUaW1lc3RhbXAgdmFsdWUgb3IgTlVMTCBpZiB0aGUgZGF0YXNldCBpcyBpbnZhbGlkLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgVGltZXN0YW1wICpHZXRUaW1lc3RhbXAodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGRhdGFzZXQgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFEYXRhc2V0ICBXaGVyZSB0byBwbGFjZSB0aGUgZGF0YXNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBkYXRhc2V0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIGRhdGFzZXQgc3RvcmVkIGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldChEYXRhc2V0ICZhRGF0YXNldCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGRhdGFzZXQgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFEYXRhc2V0ICBXaGVyZSB0byBwbGFjZSB0aGUgZGF0YXNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBkYXRhc2V0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIGRhdGFzZXQgc3RvcmVkIGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldChvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbG9jYWwgdGltZSB0aGlzIGRhdGFzZXQgd2FzIGxhc3QgdXBkYXRlZCBvciByZXN0b3JlZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBsb2NhbCB0aW1lIHRoaXMgZGF0YXNldCB3YXMgbGFzdCB1cGRhdGVkIG9yIHJlc3RvcmVkLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0VXBkYXRlVGltZSh2b2lkKSBjb25zdCB7IHJldHVybiBtVXBkYXRlVGltZTsgfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9yZXMgdGhlIGRhdGFzZXQgaW50byBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcmVkIHRoZSBkYXRhc2V0LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXQoY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgJmFEYXRhc2V0KTsKKyNlbmRpZgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RvcmVzIHRoZSBkYXRhc2V0IGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHN0b3JlZCB0aGUgZGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IERhdGFzZXQgJmFEYXRhc2V0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlc3RvcmVzIGRhdGFzZXQgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSByZXN0b3JlIHRoZSBkYXRhc2V0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIGRhdGFzZXQgc3RvcmVkIGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlc3RvcmUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb21wYXJlcyB0aGlzIGRhdGFzZXQgdG8gYW5vdGhlciBiYXNlZCBvbiB0aGUgdGltZXN0YW1wLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbXBhcmUgIEEgcmVmZXJlbmNlIHRvIHRoZSB0aW1lc3RhbXAgdG8gY29tcGFyZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgLTEgIGlmIEBwIGFDb21wYXJlIGlzIG9sZGVyIHRoYW4gdGhpcyBkYXRhc2V0LgorICAgICAqIEByZXR2YWwgIDAgIGlmIEBwIGFDb21wYXJlIGlzIGVxdWFsIHRvIHRoaXMgZGF0YXNldC4KKyAgICAgKiBAcmV0dmFsICAxICBpZiBAcCBhQ29tcGFyZSBpcyBuZXdlciB0aGFuIHRoaXMgZGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIGludCBDb21wYXJlKGNvbnN0IFRpbWVzdGFtcCAqYUNvbXBhcmUpOworCitwcml2YXRlOgorICAgIHVpbnQxNl90IEdldFNldHRpbmdzS2V5KHZvaWQpIGNvbnN0OworICAgIHZvaWQgU2V0VGltZXN0YW1wKGNvbnN0IERhdGFzZXQgJmFEYXRhc2V0KTsKKworICAgIHVpbnQzMl90ICAgIG1VcGRhdGVUaW1lOyAgICAgIC8vLzwgTG9jYWwgdGltZSBsYXN0IHVwZGF0ZWQKKyAgICBUbHY6OlR5cGUgICBtVHlwZTsgICAgICAgICAgICAvLy88IEFjdGl2ZSBvciBQZW5kaW5nCit9OworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUVTSENPUF9EQVRBU0VUX0xPQ0FMX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9tYW5hZ2VyLmNwcCBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmNiMWMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTEzMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBNZXNoQ29QIERhdGFzZXRzIG1hbmFnZXIgdG8gcHJvY2VzcyBjb21tYW5kcy4KKyAqCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiZGF0YXNldF9tYW5hZ2VyLnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJkYXRhc2V0X21hbmFnZXIuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2RhdGFzZXQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbGVhZGVyLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3AuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworRGF0YXNldE1hbmFnZXI6OkRhdGFzZXRNYW5hZ2VyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYsIGNvbnN0IFRsdjo6VHlwZSBhVHlwZSwgY29uc3QgY2hhciAqYVVyaVNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphVXJpR2V0LCBUaW1lcjo6SGFuZGxlciBhVGltZXJIYW5kZXIpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1Mb2NhbChhVGhyZWFkTmV0aWYuR2V0SW5zdGFuY2UoKSwgYVR5cGUpLAorICAgIG1OZXR3b3JrKGFUeXBlKSwKKyAgICBtVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgYVRpbWVySGFuZGVyLCB0aGlzKSwKKyAgICBtVXJpU2V0KGFVcmlTZXQpLAorICAgIG1VcmlHZXQoYVVyaUdldCkKK3sKK30KKworY29uc3QgVGltZXN0YW1wICpEYXRhc2V0TWFuYWdlcjo6R2V0VGltZXN0YW1wKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1OZXR3b3JrLkdldFRpbWVzdGFtcCgpOworfQorCitpbnQgRGF0YXNldE1hbmFnZXI6OkNvbXBhcmUoY29uc3QgVGltZXN0YW1wICZhVGltZXN0YW1wKSBjb25zdAoreworICAgIGNvbnN0IFRpbWVzdGFtcCAqdGltZXN0YW1wID0gbU5ldHdvcmsuR2V0VGltZXN0YW1wKCk7CisgICAgaW50IHJ2YWwgPSAxOworCisgICAgaWYgKHRpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIHJ2YWwgPSB0aW1lc3RhbXAtPkNvbXBhcmUoYVRpbWVzdGFtcCk7CisgICAgfQorCisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK290RXJyb3IgRGF0YXNldE1hbmFnZXI6OkFwcGVuZE1sZURhdGFzZXRUbHYoTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1OZXR3b3JrLkFwcGVuZE1sZURhdGFzZXRUbHYoYU1lc3NhZ2UpOworfQorCitjb25zdCBUbHYgKkRhdGFzZXRNYW5hZ2VyOjpHZXRUbHYoVGx2OjpUeXBlIGFUeXBlKSBjb25zdAoreworICAgIHJldHVybiBtTmV0d29yay5HZXQoYVR5cGUpOworfQorCitvdEVycm9yIERhdGFzZXRNYW5hZ2VyOjpBcHBseUNvbmZpZ3VyYXRpb24odm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIERhdGFzZXQgZGF0YXNldExvY2FsKG1Mb2NhbC5HZXRUeXBlKCkpOworICAgIERhdGFzZXQgKmRhdGFzZXQ7CisgICAgY29uc3QgVGx2ICpjdXI7CisgICAgY29uc3QgVGx2ICplbmQ7CisKKyAgICBpZiAobmV0aWYuR2V0TWxlKCkuSXNBdHRhY2hlZCgpKQorICAgIHsKKyAgICAgICAgZGF0YXNldCA9ICZtTmV0d29yazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUxvY2FsLkdldChkYXRhc2V0TG9jYWwpOworICAgICAgICBkYXRhc2V0ID0gJmRhdGFzZXRMb2NhbDsKKyAgICB9CisKKyAgICBjdXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFRsdiAqPihkYXRhc2V0LT5HZXRCeXRlcygpKTsKKyAgICBlbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFRsdiAqPihkYXRhc2V0LT5HZXRCeXRlcygpICsgZGF0YXNldC0+R2V0U2l6ZSgpKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGN1ci0+R2V0VHlwZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgVGx2OjprQ2hhbm5lbDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgQ2hhbm5lbFRsdiAqY2hhbm5lbCA9IHN0YXRpY19jYXN0PGNvbnN0IENoYW5uZWxUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIG5ldGlmLkdldE1hYygpLlNldENoYW5uZWwoc3RhdGljX2Nhc3Q8dWludDhfdD4oY2hhbm5lbC0+R2V0Q2hhbm5lbCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprUGFuSWQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFBhbklkVGx2ICpwYW5pZCA9IHN0YXRpY19jYXN0PGNvbnN0IFBhbklkVGx2ICo+KGN1cik7CisgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRQYW5JZChwYW5pZC0+R2V0UGFuSWQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprRXh0ZW5kZWRQYW5JZDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRXh0ZW5kZWRQYW5JZFRsdiAqZXh0cGFuaWQgPSBzdGF0aWNfY2FzdDxjb25zdCBFeHRlbmRlZFBhbklkVGx2ICo+KGN1cik7CisgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRFeHRlbmRlZFBhbklkKGV4dHBhbmlkLT5HZXRFeHRlbmRlZFBhbklkKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a05ldHdvcmtOYW1lOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBOZXR3b3JrTmFtZVRsdiAqbmFtZSA9IHN0YXRpY19jYXN0PGNvbnN0IE5ldHdvcmtOYW1lVGx2ICo+KGN1cik7CisgICAgICAgICAgICBvdE5ldHdvcmtOYW1lIG5ldHdvcmtOYW1lOworICAgICAgICAgICAgbWVtc2V0KG5ldHdvcmtOYW1lLm04LCAwLCBzaXplb2YobmV0d29ya05hbWUpKTsKKyAgICAgICAgICAgIG1lbWNweShuZXR3b3JrTmFtZS5tOCwgbmFtZS0+R2V0TmV0d29ya05hbWUoKSwgbmFtZS0+R2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgbmV0aWYuR2V0TWFjKCkuU2V0TmV0d29ya05hbWUobmV0d29ya05hbWUubTgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a05ldHdvcmtNYXN0ZXJLZXk6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IE5ldHdvcmtNYXN0ZXJLZXlUbHYgKmtleSA9IHN0YXRpY19jYXN0PGNvbnN0IE5ldHdvcmtNYXN0ZXJLZXlUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIG5ldGlmLkdldEtleU1hbmFnZXIoKS5TZXRNYXN0ZXJLZXkoa2V5LT5HZXROZXR3b3JrTWFzdGVyS2V5KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworI2lmIE9QRU5USFJFQURfRlRECisKKyAgICAgICAgY2FzZSBUbHY6OmtQU0tjOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBQU0tjVGx2ICpwc2tjID0gc3RhdGljX2Nhc3Q8Y29uc3QgUFNLY1RsdiAqPihjdXIpOworICAgICAgICAgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldFBTS2MocHNrYy0+R2V0UFNLYygpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyNlbmRpZgorCisgICAgICAgIGNhc2UgVGx2OjprTWVzaExvY2FsUHJlZml4OgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBNZXNoTG9jYWxQcmVmaXhUbHYgKnByZWZpeCA9IHN0YXRpY19jYXN0PGNvbnN0IE1lc2hMb2NhbFByZWZpeFRsdiAqPihjdXIpOworICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuU2V0TWVzaExvY2FsUHJlZml4KHByZWZpeC0+R2V0TWVzaExvY2FsUHJlZml4KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a1NlY3VyaXR5UG9saWN5OgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBTZWN1cml0eVBvbGljeVRsdiAqc2VjdXJpdHlQb2xpY3kgPSBzdGF0aWNfY2FzdDxjb25zdCBTZWN1cml0eVBvbGljeVRsdiAqPihjdXIpOworICAgICAgICAgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldEtleVJvdGF0aW9uKHNlY3VyaXR5UG9saWN5LT5HZXRSb3RhdGlvblRpbWUoKSk7CisgICAgICAgICAgICBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuU2V0U2VjdXJpdHlQb2xpY3lGbGFncyhzZWN1cml0eVBvbGljeS0+R2V0RmxhZ3MoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldE1hbmFnZXI6OlJlc3RvcmUodm9pZCkKK3sKKyAgICByZXR1cm4gbUxvY2FsLkdldChtTmV0d29yayk7Cit9CisKK3ZvaWQgRGF0YXNldE1hbmFnZXI6OkNsZWFyKHZvaWQpCit7CisgICAgbU5ldHdvcmsuQ2xlYXIoKTsKKyAgICBtTG9jYWwuQ2xlYXIoKTsKKyAgICBtVGltZXIuU3RvcCgpOworfQorCit2b2lkIERhdGFzZXRNYW5hZ2VyOjpIYW5kbGVEZXRhY2godm9pZCkKK3sKKyAgICBtTG9jYWwuR2V0KG1OZXR3b3JrKTsKKyAgICBtVGltZXIuU3RvcCgpOworfQorCit2b2lkIERhdGFzZXRNYW5hZ2VyOjpTZXQoY29uc3QgRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgbU5ldHdvcmsuU2V0KGFEYXRhc2V0KTsKKyAgICBtTG9jYWwuU2V0KGFEYXRhc2V0KTsKK30KKworb3RFcnJvciBEYXRhc2V0TWFuYWdlcjo6U2V0KGNvbnN0IFRpbWVzdGFtcCAmYVRpbWVzdGFtcCwgY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtTmV0d29yay5TZXQoYU1lc3NhZ2UsIGFPZmZzZXQsIGFMZW5ndGgpKTsKKyAgICBtTmV0d29yay5TZXRUaW1lc3RhbXAoYVRpbWVzdGFtcCk7CisgICAgSGFuZGxlTmV0d29ya1VwZGF0ZSgpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworI2lmIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgRGF0YXNldE1hbmFnZXI6OlNldChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtTG9jYWwuU2V0KGFEYXRhc2V0KSk7CisKKyAgICBzd2l0Y2ggKG5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgbVRpbWVyLlN0YXJ0KDEwMDApOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBtTG9jYWwuR2V0KG1OZXR3b3JrKTsKKyAgICAgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5JbmNyZW1lbnRWZXJzaW9uKCk7CisgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuSW5jcmVtZW50U3RhYmxlVmVyc2lvbigpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURAorCit2b2lkIERhdGFzZXRNYW5hZ2VyOjpIYW5kbGVOZXR3b3JrVXBkYXRlKHZvaWQpCit7CisgICAgaW50IGNvbXBhcmUgPSBtTG9jYWwuQ29tcGFyZShtTmV0d29yay5HZXRUaW1lc3RhbXAoKSk7CisKKyAgICBpZiAoY29tcGFyZSA+IDApCisgICAgeworICAgICAgICBtTG9jYWwuU2V0KG1OZXR3b3JrKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29tcGFyZSA8IDApCisgICAgeworICAgICAgICBtVGltZXIuU3RhcnQoMTAwMCk7CisgICAgfQorfQorCit2b2lkIERhdGFzZXRNYW5hZ2VyOjpIYW5kbGVUaW1lcih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldExvY2FsKCkuSXNQcmVzZW50KCkpOworCisgICAgVmVyaWZ5T3JFeGl0KG5ldGlmLkdldE1sZSgpLklzQXR0YWNoZWQoKSk7CisKKyAgICBWZXJpZnlPckV4aXQobUxvY2FsLkNvbXBhcmUobU5ldHdvcmsuR2V0VGltZXN0YW1wKCkpIDwgMCk7CisKKyAgICBpZiAobUxvY2FsLkdldFR5cGUoKSA9PSBUbHY6OmtBY3RpdmVUaW1lc3RhbXApCisgICAgeworICAgICAgICBjb25zdCBBY3RpdmVUaW1lc3RhbXBUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IEFjdGl2ZVRpbWVzdGFtcFRsdiAqPihuZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkdldFRsdigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkpOworICAgICAgICBjb25zdCBUaW1lc3RhbXAgKnBlbmRpbmdBY3RpdmVUaW1lc3RhbXAgPSBzdGF0aWNfY2FzdDxjb25zdCBUaW1lc3RhbXAgKj4odGx2KTsKKworICAgICAgICBpZiAocGVuZGluZ0FjdGl2ZVRpbWVzdGFtcCAhPSBOVUxMICYmCisgICAgICAgICAgICBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuR2V0TG9jYWwoKS5Db21wYXJlKHBlbmRpbmdBY3RpdmVUaW1lc3RhbXApID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHN0b3AgcmVnaXN0cmF0aW9uIGF0dGVtcHRzIGR1cmluZyBkYXRhc2V0IHRyYW5zaXRpb24KKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlZ2lzdGVyKCk7CisgICAgbVRpbWVyLlN0YXJ0KDEwMDApOworCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBEYXRhc2V0TWFuYWdlcjo6UmVnaXN0ZXIodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIERhdGFzZXQgZGF0YXNldChtTG9jYWwuR2V0VHlwZSgpKTsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhtVXJpU2V0KTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgbUxvY2FsLkdldChkYXRhc2V0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKGRhdGFzZXQuR2V0Qnl0ZXMoKSwgZGF0YXNldC5HZXRTaXplKCkpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFsb2MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBkYXRhc2V0IHRvIGxlYWRlciIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBEYXRhc2V0TWFuYWdlcjo6R2V0KGNvbnN0IENvYXA6OkhlYWRlciAmYUhlYWRlciwgY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKSBjb25zdAoreworICAgIFRsdiB0bHY7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDhfdCB0bHZzW0RhdGFzZXQ6OmtNYXhTaXplXTsKKyAgICB1aW50OF90IGxlbmd0aCA9IDA7CisKKyAgICB3aGlsZSAob2Zmc2V0IDwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworCisgICAgICAgIGlmICh0bHYuR2V0VHlwZSgpID09IFRsdjo6a0dldCkKKyAgICAgICAgeworICAgICAgICAgICAgbGVuZ3RoID0gdGx2LkdldExlbmd0aCgpOworICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQgKyBzaXplb2YoVGx2KSwgbGVuZ3RoLCB0bHZzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih0bHYpICsgdGx2LkdldExlbmd0aCgpOworICAgIH0KKworICAgIFNlbmRHZXRSZXNwb25zZShhSGVhZGVyLCBhTWVzc2FnZUluZm8sIHRsdnMsIGxlbmd0aCk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBEYXRhc2V0TWFuYWdlcjo6U2V0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIFRsdiB0bHY7CisgICAgVGltZXN0YW1wICp0aW1lc3RhbXA7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgVGx2OjpUeXBlIHR5cGU7CisgICAgYm9vbCBpc1VwZGF0ZUZyb21Db21taXNzaW9uZXIgPSBmYWxzZTsKKyAgICBib29sIGRvZXNBZmZlY3RDb25uZWN0aXZpdHkgPSBmYWxzZTsKKyAgICBib29sIGRvZXNBZmZlY3RNYXN0ZXJLZXkgPSBmYWxzZTsKKyAgICBTdGF0ZVRsdjo6U3RhdGUgc3RhdGUgPSBTdGF0ZVRsdjo6a0FjY2VwdDsKKworICAgIEFjdGl2ZVRpbWVzdGFtcFRsdiBhY3RpdmVUaW1lc3RhbXA7CisgICAgUGVuZGluZ1RpbWVzdGFtcFRsdiBwZW5kaW5nVGltZXN0YW1wOworICAgIENoYW5uZWxUbHYgY2hhbm5lbDsKKyAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgc2Vzc2lvbklkOworICAgIE1lc2hMb2NhbFByZWZpeFRsdiBtZXNoTG9jYWxQcmVmaXg7CisgICAgTmV0d29ya01hc3RlcktleVRsdiBtYXN0ZXJLZXk7CisgICAgUGFuSWRUbHYgcGFuSWQ7CisKKyAgICBhY3RpdmVUaW1lc3RhbXAuU2V0TGVuZ3RoKDApOworICAgIHBlbmRpbmdUaW1lc3RhbXAuU2V0TGVuZ3RoKDApOworICAgIGNoYW5uZWwuU2V0TGVuZ3RoKDApOworICAgIG1hc3RlcktleS5TZXRMZW5ndGgoMCk7CisgICAgbWVzaExvY2FsUHJlZml4LlNldExlbmd0aCgwKTsKKyAgICBwYW5JZC5TZXRMZW5ndGgoMCk7CisgICAgcGVuZGluZ1RpbWVzdGFtcC5TZXRMZW5ndGgoMCk7CisgICAgc2Vzc2lvbklkLlNldExlbmd0aCgwKTsKKworICAgIFZlcmlmeU9yRXhpdChuZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSLCBzdGF0ZSA9IFN0YXRlVGx2OjprUmVqZWN0KTsKKworICAgIC8vIHZlcmlmeSB0aGF0IFRMViBkYXRhIHNpemUgaXMgbGVzcyB0aGFuIG1heGltdW0gVExWIHZhbHVlIHNpemUKKyAgICB3aGlsZSAob2Zmc2V0IDwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworICAgICAgICBWZXJpZnlPckV4aXQodGx2LkdldExlbmd0aCgpIDw9IERhdGFzZXQ6OmtNYXhWYWx1ZVNpemUsIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHRsdikgKyB0bHYuR2V0TGVuZ3RoKCk7CisgICAgfQorCisgICAgLy8gdmVyaWZ5IHRoYXQgZG9lcyBub3Qgb3ZlcmZsb3cgZGF0YXNldCBidWZmZXIKKyAgICBWZXJpZnlPckV4aXQoKG9mZnNldCAtIGFNZXNzYWdlLkdldE9mZnNldCgpKSA8PSBEYXRhc2V0OjprTWF4U2l6ZSwgc3RhdGUgPSBTdGF0ZVRsdjo6a1JlamVjdCk7CisKKyAgICB0eXBlID0gKHN0cmNtcChtVXJpU2V0LCBPVF9VUklfUEFUSF9BQ1RJVkVfU0VUKSA9PSAwID8gVGx2OjprQWN0aXZlVGltZXN0YW1wIDogVGx2OjprUGVuZGluZ1RpbWVzdGFtcCk7CisKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCwgc2l6ZW9mKGFjdGl2ZVRpbWVzdGFtcCksIGFjdGl2ZVRpbWVzdGFtcCkgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIEV4aXROb3coc3RhdGUgPSBTdGF0ZVRsdjo6a1JlamVjdCk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KGFjdGl2ZVRpbWVzdGFtcC5Jc1ZhbGlkKCksIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtQZW5kaW5nVGltZXN0YW1wLCBzaXplb2YocGVuZGluZ1RpbWVzdGFtcCksIHBlbmRpbmdUaW1lc3RhbXApID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQocGVuZGluZ1RpbWVzdGFtcC5Jc1ZhbGlkKCksIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworICAgIH0KKworICAgIC8vIHZlcmlmeSB0aGUgcmVxdWVzdCBpbmNsdWRlcyBhIHRpbWVzdGFtcCB0aGF0IGlzIGFoZWFkIG9mIHRoZSBsb2NhbGx5IHN0b3JlZCB2YWx1ZQorICAgIHRpbWVzdGFtcCA9ICh0eXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkgPworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRpbWVzdGFtcCAqPigmYWN0aXZlVGltZXN0YW1wKSA6CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VGltZXN0YW1wICo+KCZwZW5kaW5nVGltZXN0YW1wKTsKKworICAgIFZlcmlmeU9yRXhpdChtTG9jYWwuQ29tcGFyZSh0aW1lc3RhbXApID4gMCwgc3RhdGUgPSBTdGF0ZVRsdjo6a1JlamVjdCk7CisKKyAgICAvLyBjaGVjayBjaGFubmVsCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtDaGFubmVsLCBzaXplb2YoY2hhbm5lbCksIGNoYW5uZWwpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoY2hhbm5lbC5Jc1ZhbGlkKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWwuR2V0Q2hhbm5lbCgpID49IE9UX1JBRElPX0NIQU5ORUxfTUlOICYmCisgICAgICAgICAgICAgICAgICAgICBjaGFubmVsLkdldENoYW5uZWwoKSA8PSBPVF9SQURJT19DSEFOTkVMX01BWCwKKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworCisgICAgICAgIGlmIChjaGFubmVsLkdldENoYW5uZWwoKSAhPSBuZXRpZi5HZXRNYWMoKS5HZXRDaGFubmVsKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvZXNBZmZlY3RDb25uZWN0aXZpdHkgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gY2hlY2sgUEFOIElECisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtQYW5JZCwgc2l6ZW9mKHBhbklkKSwgcGFuSWQpID09IE9UX0VSUk9SX05PTkUgJiYKKyAgICAgICAgcGFuSWQuSXNWYWxpZCgpICYmCisgICAgICAgIHBhbklkLkdldFBhbklkKCkgIT0gbmV0aWYuR2V0TWFjKCkuR2V0UGFuSWQoKSkKKyAgICB7CisgICAgICAgIGRvZXNBZmZlY3RDb25uZWN0aXZpdHkgPSB0cnVlOworICAgIH0KKworICAgIC8vIGNoZWNrIG1lc2ggbG9jYWwgcHJlZml4CisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtNZXNoTG9jYWxQcmVmaXgsIHNpemVvZihtZXNoTG9jYWxQcmVmaXgpLCBtZXNoTG9jYWxQcmVmaXgpID09IE9UX0VSUk9SX05PTkUgJiYKKyAgICAgICAgbWVtY21wKG1lc2hMb2NhbFByZWZpeC5HZXRNZXNoTG9jYWxQcmVmaXgoKSwgbmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsUHJlZml4KCksCisgICAgICAgICAgICAgICBtZXNoTG9jYWxQcmVmaXguR2V0TGVuZ3RoKCkpKQorICAgIHsKKyAgICAgICAgZG9lc0FmZmVjdENvbm5lY3Rpdml0eSA9IHRydWU7CisgICAgfQorCisgICAgLy8gY2hlY2sgbmV0d29yayBtYXN0ZXIga2V5CisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtOZXR3b3JrTWFzdGVyS2V5LCBzaXplb2YobWFzdGVyS2V5KSwgbWFzdGVyS2V5KSA9PSBPVF9FUlJPUl9OT05FICYmCisgICAgICAgIG1lbWNtcCgmbWFzdGVyS2V5LkdldE5ldHdvcmtNYXN0ZXJLZXkoKSwgJm5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRNYXN0ZXJLZXkoKSwgT1RfTUFTVEVSX0tFWV9TSVpFKSkKKyAgICB7CisgICAgICAgIGRvZXNBZmZlY3RDb25uZWN0aXZpdHkgPSB0cnVlOworICAgICAgICBkb2VzQWZmZWN0TWFzdGVyS2V5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBjaGVjayBhY3RpdmUgdGltZXN0YW1wIHJvbGxiYWNrCisgICAgaWYgKHR5cGUgPT0gVGx2OjprUGVuZGluZ1RpbWVzdGFtcCAmJgorICAgICAgICAobWFzdGVyS2V5LkdldExlbmd0aCgpID09IDAgfHwKKyAgICAgICAgIG1lbWNtcCgmbWFzdGVyS2V5LkdldE5ldHdvcmtNYXN0ZXJLZXkoKSwgJm5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRNYXN0ZXJLZXkoKSwgT1RfTUFTVEVSX0tFWV9TSVpFKSA9PSAwKSkKKyAgICB7CisgICAgICAgIC8vIG5vIGNoYW5nZSB0byBtYXN0ZXIga2V5LCBhY3RpdmUgdGltZXN0YW1wIG11c3QgYmUgYWhlYWQKKyAgICAgICAgY29uc3QgVGltZXN0YW1wICpsb2NhbEFjdGl2ZVRpbWVzdGFtcCA9IG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5HZXRUaW1lc3RhbXAoKTsKKworICAgICAgICBWZXJpZnlPckV4aXQobG9jYWxBY3RpdmVUaW1lc3RhbXAgPT0gTlVMTCB8fCBsb2NhbEFjdGl2ZVRpbWVzdGFtcC0+Q29tcGFyZShhY3RpdmVUaW1lc3RhbXApID4gMCwKKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworICAgIH0KKworICAgIC8vIGNoZWNrIGNvbW1pc3Npb25lciBzZXNzaW9uIGlkCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtDb21taXNzaW9uZXJTZXNzaW9uSWQsIHNpemVvZihzZXNzaW9uSWQpLCBzZXNzaW9uSWQpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgKmxvY2FsSWQ7CisKKyAgICAgICAgaXNVcGRhdGVGcm9tQ29tbWlzc2lvbmVyID0gdHJ1ZTsKKworICAgICAgICBsb2NhbElkID0gc3RhdGljX2Nhc3Q8Q29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2ICo+KG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0Q29tbWlzc2lvbmluZ0RhdGFTdWJUbHYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRsdjo6a0NvbW1pc3Npb25lclNlc3Npb25JZCkpOworCisgICAgICAgIFZlcmlmeU9yRXhpdChzZXNzaW9uSWQuSXNWYWxpZCgpICYmCisgICAgICAgICAgICAgICAgICAgICBsb2NhbElkICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICAgICAgIGxvY2FsSWQtPkdldENvbW1pc3Npb25lclNlc3Npb25JZCgpID09IHNlc3Npb25JZC5HZXRDb21taXNzaW9uZXJTZXNzaW9uSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworICAgIH0KKworICAgIC8vIHZlcmlmeSBhbiBNR01UX0FDVElWRV9TRVQucmVxIGZyb20gYSBDb21taXNzaW9uZXIgZG9lcyBub3QgYWZmZWN0IGNvbm5lY3Rpdml0eQorICAgIFZlcmlmeU9yRXhpdCghaXNVcGRhdGVGcm9tQ29tbWlzc2lvbmVyIHx8IHR5cGUgPT0gVGx2OjprUGVuZGluZ1RpbWVzdGFtcCB8fCAhZG9lc0FmZmVjdENvbm5lY3Rpdml0eSwKKyAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZVRsdjo6a1JlamVjdCk7CisKKyAgICAvLyB1cGRhdGUgZGF0YXNldAorICAgIGlmIChpc1VwZGF0ZUZyb21Db21taXNzaW9uZXIpCisgICAgeworICAgICAgICBtTmV0d29yay5TZXQobmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldE5ldHdvcmsoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1OZXR3b3JrLkNsZWFyKCk7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gVGx2OjprUGVuZGluZ1RpbWVzdGFtcCB8fCAhZG9lc0FmZmVjdENvbm5lY3Rpdml0eSkKKyAgICB7CisgICAgICAgIG9mZnNldCA9IGFNZXNzYWdlLkdldE9mZnNldCgpOworCisgICAgICAgIHdoaWxlIChvZmZzZXQgPCBhTWVzc2FnZS5HZXRMZW5ndGgoKSkKKyAgICAgICAgeworICAgICAgICAgICAgT1RfVE9PTF9QQUNLRURfQkVHSU4KKyAgICAgICAgICAgIHN0cnVjdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRsdiB0bHY7CisgICAgICAgICAgICAgICAgdWludDhfdCB2YWx1ZVtEYXRhc2V0OjprTWF4VmFsdWVTaXplXTsKKyAgICAgICAgICAgIH0gT1RfVE9PTF9QQUNLRURfRU5EIGRhdGE7CisKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YoVGx2KSwgJmRhdGEudGx2KTsKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0ICsgc2l6ZW9mKFRsdiksIGRhdGEudGx2LkdldExlbmd0aCgpLCBkYXRhLnZhbHVlKTsKKworICAgICAgICAgICAgc3dpdGNoIChkYXRhLnRsdi5HZXRUeXBlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRsdjo6a0NvbW1pc3Npb25lclNlc3Npb25JZDoKKyAgICAgICAgICAgICAgICAvLyBkbyBub3Qgc3RvcmUgQ29tbWlzc2lvbmVyIFNlc3Npb24gSUQgVExWCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVGx2OjprRGVsYXlUaW1lcjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEZWxheVRpbWVyVGx2ICpkZWxheVRpbWVyVGx2ID0gc3RhdGljX2Nhc3Q8RGVsYXlUaW1lclRsdiAqPigmZGF0YS50bHYpOworCisgICAgICAgICAgICAgICAgaWYgKGRvZXNBZmZlY3RNYXN0ZXJLZXkgJiYgZGVsYXlUaW1lclRsdi0+R2V0RGVsYXlUaW1lcigpIDwgRGVsYXlUaW1lclRsdjo6a0RlbGF5VGltZXJEZWZhdWx0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lclRsdi0+U2V0RGVsYXlUaW1lcihEZWxheVRpbWVyVGx2OjprRGVsYXlUaW1lckRlZmF1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWxheVRpbWVyVGx2LT5HZXREZWxheVRpbWVyKCkgPCBuZXRpZi5HZXRMZWFkZXIoKS5HZXREZWxheVRpbWVyTWluaW1hbCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lclRsdi0+U2V0RGVsYXlUaW1lcihuZXRpZi5HZXRMZWFkZXIoKS5HZXREZWxheVRpbWVyTWluaW1hbCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1OZXR3b3JrLlNldChkYXRhLnRsdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoVGx2KSArIGRhdGEudGx2LkdldExlbmd0aCgpOworICAgICAgICB9CisKKyAgICAgICAgbUxvY2FsLlNldChtTmV0d29yayk7CisgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuSW5jcmVtZW50VmVyc2lvbigpOworICAgICAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkluY3JlbWVudFN0YWJsZVZlcnNpb24oKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5BcHBseUFjdGl2ZURhdGFzZXQoYWN0aXZlVGltZXN0YW1wLCBhTWVzc2FnZSk7CisgICAgfQorCisgICAgLy8gbm90aWZ5IGNvbW1pc3Npb25lciBpZiB1cGRhdGUgaXMgZnJvbSB0aHJlYWQgZGV2aWNlCisgICAgaWYgKCFpc1VwZGF0ZUZyb21Db21taXNzaW9uZXIpCisgICAgeworICAgICAgICBCb3JkZXJBZ2VudExvY2F0b3JUbHYgKmJvcmRlckFnZW50TG9jYXRvcjsKKyAgICAgICAgSXA2OjpBZGRyZXNzIGRlc3RpbmF0aW9uOworCisgICAgICAgIGJvcmRlckFnZW50TG9jYXRvciA9IHN0YXRpY19jYXN0PEJvcmRlckFnZW50TG9jYXRvclRsdiAqPihuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldENvbW1pc3Npb25pbmdEYXRhU3ViVGx2KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRsdjo6a0JvcmRlckFnZW50TG9jYXRvcikpOworICAgICAgICBWZXJpZnlPckV4aXQoYm9yZGVyQWdlbnRMb2NhdG9yICE9IE5VTEwpOworCisgICAgICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgICAgICBkZXN0aW5hdGlvbiA9IG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCk7CisgICAgICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNihib3JkZXJBZ2VudExvY2F0b3ItPkdldEJvcmRlckFnZW50TG9jYXRvcigpKTsKKworICAgICAgICBuZXRpZi5HZXRMZWFkZXIoKS5TZW5kRGF0YXNldENoYW5nZWQoZGVzdGluYXRpb24pOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChuZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgIHsKKyAgICAgICAgU2VuZFNldFJlc3BvbnNlKGFIZWFkZXIsIGFNZXNzYWdlSW5mbywgc3RhdGUpOworICAgIH0KKworICAgIHJldHVybiBzdGF0ZSA9PSBTdGF0ZVRsdjo6a0FjY2VwdCA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9EUk9QOworfQorCitvdEVycm9yIERhdGFzZXRNYW5hZ2VyOjpTZW5kU2V0UmVxdWVzdChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQsIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhtVXJpU2V0KTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKKyAgICBpZiAobmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuSXNBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmN1ciA9IGFUbHZzOworICAgICAgICBjb25zdCB1aW50OF90ICplbmQgPSBhVGx2cyArIGFMZW5ndGg7CisgICAgICAgIGJvb2wgaGFzU2Vzc2lvbklkID0gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKGN1ciA8IGVuZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVGx2ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUbHYgKj4oY3VyKTsKKworICAgICAgICAgICAgaWYgKGRhdGEtPkdldFR5cGUoKSA9PSBUbHY6OmtDb21taXNzaW9uZXJTZXNzaW9uSWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFzU2Vzc2lvbklkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3VyICs9IHNpemVvZihUbHYpICsgZGF0YS0+R2V0TGVuZ3RoKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWhhc1Nlc3Npb25JZCkKKyAgICAgICAgeworICAgICAgICAgICAgQ29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2IHNlc3Npb25JZDsKKyAgICAgICAgICAgIHNlc3Npb25JZC5Jbml0KCk7CisgICAgICAgICAgICBzZXNzaW9uSWQuU2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkKG5ldGlmLkdldENvbW1pc3Npb25lcigpLkdldFNlc3Npb25JZCgpKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCkpKTsKKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0FjdGl2ZVRpbWVzdGFtcFNldCkKKyAgICB7CisgICAgICAgIEFjdGl2ZVRpbWVzdGFtcFRsdiB0aW1lc3RhbXA7CisgICAgICAgIHRpbWVzdGFtcC5Jbml0KCk7CisgICAgICAgIHN0YXRpY19jYXN0PFRpbWVzdGFtcCAqPigmdGltZXN0YW1wKS0+U2V0U2Vjb25kcyhhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8VGltZXN0YW1wICo+KCZ0aW1lc3RhbXApLT5TZXRUaWNrcygwKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmdGltZXN0YW1wLCBzaXplb2YodGltZXN0YW1wKSkpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNQZW5kaW5nVGltZXN0YW1wU2V0KQorICAgIHsKKyAgICAgICAgUGVuZGluZ1RpbWVzdGFtcFRsdiB0aW1lc3RhbXA7CisgICAgICAgIHRpbWVzdGFtcC5Jbml0KCk7CisgICAgICAgIHN0YXRpY19jYXN0PFRpbWVzdGFtcCAqPigmdGltZXN0YW1wKS0+U2V0U2Vjb25kcyhhRGF0YXNldC5tUGVuZGluZ1RpbWVzdGFtcCk7CisgICAgICAgIHN0YXRpY19jYXN0PFRpbWVzdGFtcCAqPigmdGltZXN0YW1wKS0+U2V0VGlja3MoMCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnRpbWVzdGFtcCwgc2l6ZW9mKHRpbWVzdGFtcCkpKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0KQorICAgIHsKKyAgICAgICAgTmV0d29ya01hc3RlcktleVRsdiBtYXN0ZXJrZXk7CisgICAgICAgIG1hc3RlcmtleS5Jbml0KCk7CisgICAgICAgIG1hc3RlcmtleS5TZXROZXR3b3JrTWFzdGVyS2V5KGFEYXRhc2V0Lm1NYXN0ZXJLZXkpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZtYXN0ZXJrZXksIHNpemVvZihtYXN0ZXJrZXkpKSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc05ldHdvcmtOYW1lU2V0KQorICAgIHsKKyAgICAgICAgTmV0d29ya05hbWVUbHYgbmV0d29ya25hbWU7CisgICAgICAgIG5ldHdvcmtuYW1lLkluaXQoKTsKKyAgICAgICAgbmV0d29ya25hbWUuU2V0TmV0d29ya05hbWUoYURhdGFzZXQubU5ldHdvcmtOYW1lLm04KTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbmV0d29ya25hbWUsIHNpemVvZihUbHYpICsgbmV0d29ya25hbWUuR2V0TGVuZ3RoKCkpKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzRXh0ZW5kZWRQYW5JZFNldCkKKyAgICB7CisgICAgICAgIEV4dGVuZGVkUGFuSWRUbHYgZXh0cGFuaWQ7CisgICAgICAgIGV4dHBhbmlkLkluaXQoKTsKKyAgICAgICAgZXh0cGFuaWQuU2V0RXh0ZW5kZWRQYW5JZChhRGF0YXNldC5tRXh0ZW5kZWRQYW5JZC5tOCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmV4dHBhbmlkLCBzaXplb2YoZXh0cGFuaWQpKSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc01lc2hMb2NhbFByZWZpeFNldCkKKyAgICB7CisgICAgICAgIE1lc2hMb2NhbFByZWZpeFRsdiBsb2NhbHByZWZpeDsKKyAgICAgICAgbG9jYWxwcmVmaXguSW5pdCgpOworICAgICAgICBsb2NhbHByZWZpeC5TZXRNZXNoTG9jYWxQcmVmaXgoYURhdGFzZXQubU1lc2hMb2NhbFByZWZpeC5tOCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmxvY2FscHJlZml4LCBzaXplb2YobG9jYWxwcmVmaXgpKSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0RlbGF5U2V0KQorICAgIHsKKyAgICAgICAgRGVsYXlUaW1lclRsdiBkZWxheXRpbWVyOworICAgICAgICBkZWxheXRpbWVyLkluaXQoKTsKKyAgICAgICAgZGVsYXl0aW1lci5TZXREZWxheVRpbWVyKGFEYXRhc2V0Lm1EZWxheSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmRlbGF5dGltZXIsIHNpemVvZihkZWxheXRpbWVyKSkpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNQYW5JZFNldCkKKyAgICB7CisgICAgICAgIFBhbklkVGx2IHBhbmlkOworICAgICAgICBwYW5pZC5Jbml0KCk7CisgICAgICAgIHBhbmlkLlNldFBhbklkKGFEYXRhc2V0Lm1QYW5JZCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnBhbmlkLCBzaXplb2YocGFuaWQpKSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0NoYW5uZWxTZXQpCisgICAgeworICAgICAgICBDaGFubmVsVGx2IGNoYW5uZWw7CisgICAgICAgIGNoYW5uZWwuSW5pdCgpOworICAgICAgICBjaGFubmVsLlNldENoYW5uZWxQYWdlKDApOworICAgICAgICBjaGFubmVsLlNldENoYW5uZWwoYURhdGFzZXQubUNoYW5uZWwpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZjaGFubmVsLCBzaXplb2YoY2hhbm5lbCkpKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzQ2hhbm5lbE1hc2tQYWdlMFNldCkKKyAgICB7CisgICAgICAgIENoYW5uZWxNYXNrMFRsdiBjaGFubmVsTWFzazsKKyAgICAgICAgY2hhbm5lbE1hc2suSW5pdCgpOworICAgICAgICBjaGFubmVsTWFzay5TZXRNYXNrKGFEYXRhc2V0Lm1DaGFubmVsTWFza1BhZ2UwKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzaykpKTsKKyAgICB9CisKKyAgICBpZiAoYUxlbmd0aCA+IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKGFUbHZzLCBhTGVuZ3RoKSk7CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UtPkdldExlbmd0aCgpID09IGhlYWRlci5HZXRMZW5ndGgoKSkKKyAgICB7CisgICAgICAgIC8vIG5vIHBheWxvYWQsIHJlbW92ZSBjb2FwIHBheWxvYWQgbWFya2VyCisgICAgICAgIG1lc3NhZ2UtPlNldExlbmd0aChtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIDEpOworICAgIH0KKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFsb2MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBkYXRhc2V0IHNldCByZXF1ZXN0IHRvIGxlYWRlciIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0TWFuYWdlcjo6U2VuZEdldFJlcXVlc3QoY29uc3QgdWludDhfdCAqYVRsdlR5cGVzLCB1aW50OF90IGFMZW5ndGgsIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICBUbHYgdGx2OworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKG1VcmlHZXQpOworCisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBpZiAoYUxlbmd0aCA+IDApCisgICAgeworICAgICAgICB0bHYuU2V0VHlwZShUbHY6OmtHZXQpOworICAgICAgICB0bHYuU2V0TGVuZ3RoKGFMZW5ndGgpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoYVRsdlR5cGVzLCBhTGVuZ3RoKSk7CisgICAgfQorCisgICAgaWYgKGFBZGRyZXNzICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcigqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KGFBZGRyZXNzKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFsb2MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgfQorCisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBkYXRhc2V0IGdldCByZXF1ZXN0Iik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIERhdGFzZXRNYW5hZ2VyOjpTZW5kU2V0UmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlVGx2OjpTdGF0ZSBhU3RhdGUpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgcmVzcG9uc2VIZWFkZXI7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKworICAgIHJlc3BvbnNlSGVhZGVyLlNldERlZmF1bHRSZXNwb25zZUhlYWRlcihhUmVxdWVzdEhlYWRlcik7CisgICAgcmVzcG9uc2VIZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCByZXNwb25zZUhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBzdGF0ZS5Jbml0KCk7CisgICAgc3RhdGUuU2V0U3RhdGUoYVN0YXRlKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzdGF0ZSwgc2l6ZW9mKHN0YXRlKSkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJzZW50IGRhdGFzZXQgc2V0IHJlc3BvbnNlIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRlRECisKK3ZvaWQgRGF0YXNldE1hbmFnZXI6OlNlbmRHZXRSZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCkgY29uc3QKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgcmVzcG9uc2VIZWFkZXIuU2V0RGVmYXVsdFJlc3BvbnNlSGVhZGVyKGFSZXF1ZXN0SGVhZGVyKTsKKyAgICByZXNwb25zZUhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIHJlc3BvbnNlSGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIGlmIChhTGVuZ3RoID09IDApCisgICAgeworICAgICAgICBjb25zdCBUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1OZXR3b3JrLkdldEJ5dGVzKCkpOworICAgICAgICBjb25zdCBUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1OZXR3b3JrLkdldEJ5dGVzKCkgKyBtTmV0d29yay5HZXRTaXplKCkpOworCisgICAgICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSAhPSBUbHY6OmtOZXR3b3JrTWFzdGVyS2V5IHx8CisgICAgICAgICAgICAgICAgKG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRTZWN1cml0eVBvbGljeUZsYWdzKCkgJiBPVF9TRUNVUklUWV9QT0xJQ1lfT0JUQUlOX01BU1RFUl9LRVkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoY3VyLCBzaXplb2YoVGx2KSArIGN1ci0+R2V0TGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1aW50OF90IGluZGV4ID0gMDsgaW5kZXggPCBhTGVuZ3RoOyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUbHYgKnRsdjsKKworICAgICAgICAgICAgaWYgKGFUbHZzW2luZGV4XSA9PSBUbHY6OmtOZXR3b3JrTWFzdGVyS2V5ICYmCisgICAgICAgICAgICAgICAgIShuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0U2VjdXJpdHlQb2xpY3lGbGFncygpICYgT1RfU0VDVVJJVFlfUE9MSUNZX09CVEFJTl9NQVNURVJfS0VZKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCh0bHYgPSBtTmV0d29yay5HZXQoc3RhdGljX2Nhc3Q8Y29uc3QgVGx2OjpUeXBlPihhVGx2c1tpbmRleF0pKSkgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKHRsdiwgc2l6ZW9mKFRsdikgKyB0bHYtPkdldExlbmd0aCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWVzc2FnZS0+R2V0TGVuZ3RoKCkgPT0gcmVzcG9uc2VIZWFkZXIuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICAvLyBubyBwYXlsb2FkLCByZW1vdmUgY29hcCBwYXlsb2FkIG1hcmtlcgorICAgICAgICBtZXNzYWdlLT5TZXRMZW5ndGgobWVzc2FnZS0+R2V0TGVuZ3RoKCkgLSAxKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBhTWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgZGF0YXNldCBnZXQgcmVzcG9uc2UiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBBY3RpdmVEYXRhc2V0QmFzZSAmR2V0QWN0aXZlRGF0YXNldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIEFjdGl2ZURhdGFzZXRCYXNlICZhY3RpdmVEYXRhc2V0ID0gKnN0YXRpY19jYXN0PEFjdGl2ZURhdGFzZXRCYXNlICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIEFjdGl2ZURhdGFzZXRCYXNlICZhY3RpdmVEYXRhc2V0ID0gb3RHZXRUaHJlYWROZXRpZigpLkdldEFjdGl2ZURhdGFzZXQoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGFjdGl2ZURhdGFzZXQ7Cit9CisKK0FjdGl2ZURhdGFzZXRCYXNlOjpBY3RpdmVEYXRhc2V0QmFzZShUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKToKKyAgICBEYXRhc2V0TWFuYWdlcihhVGhyZWFkTmV0aWYsIFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCwgT1RfVVJJX1BBVEhfQUNUSVZFX1NFVCwgT1RfVVJJX1BBVEhfQUNUSVZFX0dFVCwKKyAgICAgICAgICAgICAgICAgICAmQWN0aXZlRGF0YXNldEJhc2U6OkhhbmRsZVRpbWVyKSwKKyAgICBtUmVzb3VyY2VHZXQoT1RfVVJJX1BBVEhfQUNUSVZFX0dFVCwgJkFjdGl2ZURhdGFzZXRCYXNlOjpIYW5kbGVHZXQsIHRoaXMpCit7CisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtUmVzb3VyY2VHZXQpOworfQorCitvdEVycm9yIEFjdGl2ZURhdGFzZXRCYXNlOjpSZXN0b3JlKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gRGF0YXNldE1hbmFnZXI6OlJlc3RvcmUoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IERhdGFzZXRNYW5hZ2VyOjpBcHBseUNvbmZpZ3VyYXRpb24oKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIEFjdGl2ZURhdGFzZXRCYXNlOjpDbGVhcih2b2lkKQoreworICAgIERhdGFzZXRNYW5hZ2VyOjpDbGVhcigpOworfQorCit2b2lkIEFjdGl2ZURhdGFzZXRCYXNlOjpIYW5kbGVEZXRhY2godm9pZCkKK3sKKyAgICBEYXRhc2V0TWFuYWdlcjo6SGFuZGxlRGV0YWNoKCk7CisgICAgRGF0YXNldE1hbmFnZXI6OkFwcGx5Q29uZmlndXJhdGlvbigpOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgQWN0aXZlRGF0YXNldEJhc2U6OlNldChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gRGF0YXNldE1hbmFnZXI6OlNldChhRGF0YXNldCkpOworICAgIERhdGFzZXRNYW5hZ2VyOjpBcHBseUNvbmZpZ3VyYXRpb24oKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQKKwordm9pZCBBY3RpdmVEYXRhc2V0QmFzZTo6U2V0KGNvbnN0IERhdGFzZXQgJmFEYXRhc2V0KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBEYXRhc2V0TWFuYWdlcjo6U2V0KGFEYXRhc2V0KTsKKyAgICBEYXRhc2V0TWFuYWdlcjo6QXBwbHlDb25maWd1cmF0aW9uKCk7CisKKyAgICBpZiAobmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0xFQURFUikKKyAgICB7CisgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuSW5jcmVtZW50VmVyc2lvbigpOworICAgICAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkluY3JlbWVudFN0YWJsZVZlcnNpb24oKTsKKyAgICB9Cit9CisKK290RXJyb3IgQWN0aXZlRGF0YXNldEJhc2U6OlNldChjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXAsIGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBEYXRhc2V0TWFuYWdlcjo6U2V0KGFUaW1lc3RhbXAsIGFNZXNzYWdlLCBhT2Zmc2V0LCBhTGVuZ3RoKSk7CisgICAgRGF0YXNldE1hbmFnZXI6OkFwcGx5Q29uZmlndXJhdGlvbigpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBBY3RpdmVEYXRhc2V0QmFzZTo6SGFuZGxlR2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PEFjdGl2ZURhdGFzZXRCYXNlICo+KGFDb250ZXh0KS0+SGFuZGxlR2V0KAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIEFjdGl2ZURhdGFzZXRCYXNlOjpIYW5kbGVHZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIERhdGFzZXRNYW5hZ2VyOjpHZXQoYUhlYWRlciwgYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7Cit9CisKK3ZvaWQgQWN0aXZlRGF0YXNldEJhc2U6OkhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0QWN0aXZlRGF0YXNldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKworc3RhdGljIFBlbmRpbmdEYXRhc2V0QmFzZSAmR2V0UGVuZGluZ0RhdGFzZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBQZW5kaW5nRGF0YXNldEJhc2UgJnBlbmRpbmdEYXRhc2V0ID0gKnN0YXRpY19jYXN0PFBlbmRpbmdEYXRhc2V0QmFzZSAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBQZW5kaW5nRGF0YXNldEJhc2UgJnBlbmRpbmdEYXRhc2V0ID0gb3RHZXRUaHJlYWROZXRpZigpLkdldFBlbmRpbmdEYXRhc2V0KCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBwZW5kaW5nRGF0YXNldDsKK30KKworUGVuZGluZ0RhdGFzZXRCYXNlOjpQZW5kaW5nRGF0YXNldEJhc2UoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgRGF0YXNldE1hbmFnZXIoYVRocmVhZE5ldGlmLCBUbHY6OmtQZW5kaW5nVGltZXN0YW1wLCBPVF9VUklfUEFUSF9QRU5ESU5HX1NFVCwgT1RfVVJJX1BBVEhfUEVORElOR19HRVQsCisgICAgICAgICAgICAgICAgICAgJlBlbmRpbmdEYXRhc2V0QmFzZTo6SGFuZGxlVGltZXIpLAorICAgIG1EZWxheVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZQZW5kaW5nRGF0YXNldEJhc2U6OkhhbmRsZURlbGF5VGltZXIsIHRoaXMpLAorICAgIG1SZXNvdXJjZUdldChPVF9VUklfUEFUSF9QRU5ESU5HX0dFVCwgJlBlbmRpbmdEYXRhc2V0QmFzZTo6SGFuZGxlR2V0LCB0aGlzKQoreworICAgIGFUaHJlYWROZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobVJlc291cmNlR2V0KTsKK30KKworb3RFcnJvciBQZW5kaW5nRGF0YXNldEJhc2U6OlJlc3RvcmUodm9pZCkKK3sKKyAgICByZXR1cm4gRGF0YXNldE1hbmFnZXI6OlJlc3RvcmUoKTsKK30KKwordm9pZCBQZW5kaW5nRGF0YXNldEJhc2U6OkNsZWFyKHZvaWQpCit7CisgICAgRGF0YXNldE1hbmFnZXI6OkNsZWFyKCk7CisgICAgbURlbGF5VGltZXIuU3RvcCgpOworfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6Q2xlYXJOZXR3b3JrKHZvaWQpCit7CisgICAgbU5ldHdvcmsuQ2xlYXIoKTsKKyAgICBtRGVsYXlUaW1lci5TdG9wKCk7Cit9CisKK3ZvaWQgUGVuZGluZ0RhdGFzZXRCYXNlOjpIYW5kbGVEZXRhY2godm9pZCkKK3sKKyAgICBEYXRhc2V0TWFuYWdlcjo6SGFuZGxlRGV0YWNoKCk7CisgICAgU3RhcnREZWxheVRpbWVyKCk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBQZW5kaW5nRGF0YXNldEJhc2U6OlNldChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gRGF0YXNldE1hbmFnZXI6OlNldChhRGF0YXNldCkpOworICAgIFN0YXJ0RGVsYXlUaW1lcigpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURAorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6U2V0KGNvbnN0IERhdGFzZXQgJmFEYXRhc2V0KQoreworICAgIERhdGFzZXRNYW5hZ2VyOjpTZXQoYURhdGFzZXQpOworICAgIFN0YXJ0RGVsYXlUaW1lcigpOworfQorCitvdEVycm9yIFBlbmRpbmdEYXRhc2V0QmFzZTo6U2V0KGNvbnN0IFRpbWVzdGFtcCAmYVRpbWVzdGFtcCwgY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBEYXRhc2V0TWFuYWdlcjo6U2V0KGFUaW1lc3RhbXAsIGFNZXNzYWdlLCBhT2Zmc2V0LCBhTGVuZ3RoKSk7CisgICAgU3RhcnREZWxheVRpbWVyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6U3RhcnREZWxheVRpbWVyKHZvaWQpCit7CisgICAgRGVsYXlUaW1lclRsdiAqZGVsYXlUaW1lcjsKKworICAgIG1EZWxheVRpbWVyLlN0b3AoKTsKKworICAgIGlmICgoZGVsYXlUaW1lciA9IHN0YXRpY19jYXN0PERlbGF5VGltZXJUbHYgKj4obU5ldHdvcmsuR2V0KFRsdjo6a0RlbGF5VGltZXIpKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1EZWxheVRpbWVyLlN0YXJ0QXQobU5ldHdvcmsuR2V0VXBkYXRlVGltZSgpLCBkZWxheVRpbWVyLT5HZXREZWxheVRpbWVyKCkpOworICAgICAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJkZWxheSB0aW1lciBzdGFydGVkIik7CisgICAgfQorfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6SGFuZGxlRGVsYXlUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldFBlbmRpbmdEYXRhc2V0T3duZXIoYVRpbWVyKS5IYW5kbGVEZWxheVRpbWVyKCk7Cit9CisKK3ZvaWQgUGVuZGluZ0RhdGFzZXRCYXNlOjpIYW5kbGVEZWxheVRpbWVyKHZvaWQpCit7CisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAicGVuZGluZyBkZWxheSB0aW1lciBleHBpcmVkIik7CisKKyAgICBHZXROZXRpZigpLkdldEFjdGl2ZURhdGFzZXQoKS5TZXQobU5ldHdvcmspOworCisgICAgQ2xlYXIoKTsKK30KKwordm9pZCBQZW5kaW5nRGF0YXNldEJhc2U6OkhhbmRsZUdldCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8UGVuZGluZ0RhdGFzZXRCYXNlICo+KGFDb250ZXh0KS0+SGFuZGxlR2V0KAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6SGFuZGxlR2V0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBEYXRhc2V0TWFuYWdlcjo6R2V0KGFIZWFkZXIsIGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRQZW5kaW5nRGF0YXNldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXIuaHBwIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NmExNGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXRfbWFuYWdlci5ocHAKQEAgLTAsMCArMSw0NjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5hZ2luZyBNZXNoQ29QIERhdGFzZXRzLgorICoKKyAqLworCisjaWZuZGVmIE1FU0hDT1BfREFUQVNFVF9NQU5BR0VSX0hQUF8KKyNkZWZpbmUgTUVTSENPUF9EQVRBU0VUX01BTkFHRVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2RhdGFzZXQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvZGF0YXNldF9sb2NhbC5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGUuaHBwIgorI2luY2x1ZGUgInRocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworY2xhc3MgRGF0YXNldE1hbmFnZXI6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBUaW1lc3RhbXAuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFRpbWVzdGFtcC4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IFRpbWVzdGFtcCAqR2V0VGltZXN0YW1wKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29tcGFyZXMgQHAgYVRpbWVzdGFtcCB0byB0aGUgZGF0YXNldCdzIHRpbWVzdGFtcCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb21wYXJlICBBIHJlZmVyZW5jZSB0byB0aGUgdGltZXN0YW1wIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIC0xICBpZiBAcCBhQ29tcGFyZSBpcyBvbGRlciB0aGFuIHRoaXMgZGF0YXNldC4KKyAgICAgKiBAcmV0dmFsICAwICBpZiBAcCBhQ29tcGFyZSBpcyBlcXVhbCB0byB0aGlzIGRhdGFzZXQuCisgICAgICogQHJldHZhbCAgMSAgaWYgQHAgYUNvbXBhcmUgaXMgbmV3ZXIgdGhhbiB0aGlzIGRhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgQ29tcGFyZShjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXApIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyB0aGUgTUxFIERhdGFzZXQgVExWIGJ1dCBleGNsdWRpbmcgTWVzaENvUCBTdWIgVGltZXN0YW1wIFRMVi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZCBNTEUgRGF0YXNldCBUTFYgd2l0aG91dCBNZXNoQ29QIFN1YiBUaW1lc3RhbXAgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGF2YWlsYWJsZSBidWZmZXJzIHRvIGFwcGVuZCB0aGUgbWVzc2FnZSB3aXRoIE1MRSBEYXRhc2V0IFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kTWxlRGF0YXNldFRsdihNZXNzYWdlICZhTWVzc2FnZSkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgVExWLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBUTFYgb3IgTlVMTCBpZiBub25lIGlzIGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgVGx2ICpHZXRUbHYoVGx2OjpUeXBlIGFUeXBlKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgc3RvcmVkIGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIEEgcmVmZXJlbmNlIHRvIHRoZSBPcGVyYXRpb25hbCBEYXRhc2V0IHN0b3JlZCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICovCisgICAgRGF0YXNldExvY2FsICZHZXRMb2NhbCh2b2lkKSB7IHJldHVybiBtTG9jYWw7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgZm9yIHRoZSBhdHRhY2hlZCBwYXJ0aXRpb24uCisgICAgICoKKyAgICAgKiBXaGVuIG5vdCBhdHRhY2hlZCB0byBhIHBhcnRpdGlvbiwgdGhlIHJldHVybmVkIGRhdGFzZXQgaXMgdGhlIG9uZSBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgQSByZWZlcmVuY2UgdG8gdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgZm9yIHRoZSBhdHRhY2hlZCBwYXJ0aXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBEYXRhc2V0ICZHZXROZXR3b3JrKHZvaWQpIHsgcmV0dXJuIG1OZXR3b3JrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBsaWVzIHRoZSBBY3RpdmUgb3IgUGVuZGluZyBEYXRhc2V0IHRvIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgYXBwbGllZCBjb25maWd1cmF0aW9uLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBseUNvbmZpZ3VyYXRpb24odm9pZCk7CisKK3Byb3RlY3RlZDoKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgICAgICAgICAgSWRlbnRpZmllcyBBY3RpdmUgb3IgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICAgICAqIEBwYXJhbVtpbl0gIGFVcmlTZXQgICAgICAgIFRoZSBVUkktUEFUSCBmb3Igc2V0dGluZyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKiBAcGFyYW1baW5dICBhVXJpR2V0ICAgICAgICBUaGUgVVJJLVBBVEggZm9yIGdldHRpbmcgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVySGFuZGxlciAgVGhlIHJlZ2lzdHJhdGlvbiB0aW1lciBoYW5kbGVyLgorICAgICAqCisgICAgICovCisgICAgRGF0YXNldE1hbmFnZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZiwgY29uc3QgVGx2OjpUeXBlIGFUeXBlLCBjb25zdCBjaGFyICphVXJpU2V0LCBjb25zdCBjaGFyICphVXJpR2V0LAorICAgICAgICAgICAgICAgICAgIFRpbWVyOjpIYW5kbGVyIGFUaW1lckhhbmRlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJlc3RvcmUgdGhlIGRhdGFzZXQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgZGF0YXNldCBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVzdG9yZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBPcGVyYXRpb25hbCBEYXRhc2V0IHdoZW4gZGV0YWNoaW5nIGZyb20gdGhlIG5ldHdvcmsuCisgICAgICoKKyAgICAgKiBPbiBkZXRhY2gsIHRoZSBPcGVyYXRpb25hbCBEYXRhc2V0IGlzIHJlc3RvcmVkIGZyb20gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSGFuZGxlRGV0YWNoKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURhdGFzZXQgIFRoZSBPcGVyYXRpb25hbCBEYXRhc2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXQoY29uc3QgRGF0YXNldCAmYURhdGFzZXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBmb3IgdGhlIHBhcnRpdGlvbi4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gdXBkYXRlcyB0aGUgbm9uLXZvbGF0aWxlIHZlcnNpb24gaWYgdGhlIHBhcnRpdGlvbidzIE9wZXJhdGlvbmFsIERhdGFzZXQgaXMgbmV3ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZXN0YW1wICBUaGUgdGltZXN0YW1wIGZvciB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICBUaGUgbWVzc2FnZSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYU9mZnNldCAgICAgVGhlIG9mZnNldCB3aGVyZSB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBiZWdpbnMuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IFRpbWVzdGFtcCAmYVRpbWVzdGFtcCwgY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIGEgTUdNVF9HRVQgcmVxdWVzdCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUhlYWRlciAgICAgICBUaGUgQ29BUCBoZWFkZXIuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBUaGUgQ29BUCBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgKiBAcGFybWFbaW5dICBhTWVzc2FnZUluZm8gIFRoZSBtZXNzYWdlIGluZm8uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEdldChjb25zdCBDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29tcGFyZXMgdGhlIHBhcnRpdGlvbidzIE9wZXJhdGlvbmFsIERhdGFzZXQgd2l0aCB0aGF0IHN0b3JlZCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogSWYgdGhlIHBhcnRpdGlvbidzIE9wZXJhdGlvbmFsIERhdGFzZXQgaXMgbmV3ZXIsIHRoZSBub24tdm9sYXRpbGUgc3RvcmFnZSBpcyB1cGRhdGVkLgorICAgICAqIElmIHRoZSBwYXJ0aXRpb24ncyBPcGVyYXRpb25hbCBEYXRhc2V0IGlzIG9sZGVyLCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaXMgc3RhcnRlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSGFuZGxlTmV0d29ya1VwZGF0ZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyBhIG5ldHdvcmsgZGF0YSByZWdpc3RyYXRpb24gbWVzc2FnZSB3aXRoIHRoZSBMZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisgICAgRGF0YXNldExvY2FsIG1Mb2NhbDsKKyAgICBEYXRhc2V0IG1OZXR3b3JrOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIEhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVVZHBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgb3RFcnJvciBSZWdpc3Rlcih2b2lkKTsKKyAgICB2b2lkIFNlbmRHZXRSZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCkgY29uc3Q7CisKKyAgICBUaW1lciBtVGltZXI7CisKKyAgICBjb25zdCBjaGFyICptVXJpU2V0OworICAgIGNvbnN0IGNoYXIgKm1VcmlHZXQ7CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgTUdNVF9TRVQgcmVxdWVzdCB0byB0aGUgTGVhZGVyLgorICAgICAqCisgICAgICogQHBhcm1hW2luXSAgYURhdGFzZXQgIFRoZSBPcGVyYXRpb25hbCBEYXRzZXQuCisgICAgICogQHBhcmFtW2luXSAgYVRsdnMgICAgIEFueSBhZGRpdGlvbmFsIHJhdyBUTFZzIHRvIGluY2x1ZGUuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgIE51bWJlciBvZiBieXRlcyBpbiBAcCBhVGx2cy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSBvbiBzdWNjZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kU2V0UmVxdWVzdChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQsIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBNR01UX0dFVCByZXF1ZXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRsdlR5cGVzICBUaGUgbGlzdCBvZiBUTFYgdHlwZXMgdG8gcmVxdWVzdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgIE51bWJlciBvZiBieXRlcyBpbiBAcCBhVGx2VHlwZXMuCisgICAgICogQHBhcm1hW2luXSAgYUFkZHJlc3MgICBUaGUgSVB2NiBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgTUdNVF9HRVQgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSBvbiBzdWNjZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kR2V0UmVxdWVzdChjb25zdCB1aW50OF90ICphVGx2VHlwZXMsIHVpbnQ4X3QgYUxlbmd0aCwgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcyk7CisKK3Byb3RlY3RlZDoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBPcGVyYXRpb25hbCBEYXRhc2V0IGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcGFybWFbaW5dICBhRGF0YXNldCAgVGhlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgTUdNVF9TRVQgcmVxdWVzdCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUhlYWRlciAgICAgICBUaGUgQ29BUCBoZWFkZXIuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBUaGUgQ29BUCBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgKiBAcGFybWFbaW5dICBhTWVzc2FnZUluZm8gIFRoZSBtZXNzYWdlIGluZm8uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFRoZSBNR01UX1NFVCByZXF1ZXN0IG1lc3NhZ2Ugd2FzIGhhbmRsZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfRFJPUCAgVGhlIE1HTVRfU0VUIHJlcXVlc3QgbWVzc2FnZSB3YXMgZHJvcHBlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBTZW5kU2V0UmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCBTdGF0ZVRsdjo6U3RhdGUgYVN0YXRlKTsKKyNlbmRpZgorfTsKKworY2xhc3MgQWN0aXZlRGF0YXNldEJhc2U6IHB1YmxpYyBEYXRhc2V0TWFuYWdlcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBUaGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgQWN0aXZlRGF0YXNldEJhc2UoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogVGhpcyBtZXRob2Qgd2lsbCBhbHNvIGNvbmZpZ3VyZSB0aGUgVGhyZWFkIGludGVyZmFjZSB1c2luZyB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJlc3RvcmUgdGhlIGRhdGFzZXQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgZGF0YXNldCBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVzdG9yZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCB3aGVuIGRldGFjaGluZyBmcm9tIHRoZSBuZXR3b3JrLgorICAgICAqCisgICAgICogT24gZGV0YWNoLCB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBpcyByZXN0b3JlZCBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkgYW5kIHJlY29uZmlndXJlcyB0aGUgVGhyZWFkCisgICAgICogaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBIYW5kbGVEZXRhY2godm9pZCk7CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIEBwYXJtYVtpbl0gIGFEYXRhc2V0ICBUaGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCk7CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gcmVjb25maWd1cmVzIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURhdGFzZXQgIFRoZSBPcGVyYXRpb25hbCBEYXRhc2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXQoY29uc3QgRGF0YXNldCAmYURhdGFzZXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBmb3IgdGhlIHBhcnRpdGlvbi4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gcmVjb25maWd1cmVzIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gdXBkYXRlcyB0aGUgbm9uLXZvbGF0aWxlIHZlcnNpb24gaWYgdGhlIHBhcnRpdGlvbidzIE9wZXJhdGlvbmFsIERhdGFzZXQgaXMgbmV3ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZXN0YW1wICBUaGUgdGltZXN0YW1wIGZvciB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICBUaGUgbWVzc2FnZSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYU9mZnNldCAgICAgVGhlIG9mZnNldCB3aGVyZSB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBiZWdpbnMuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IFRpbWVzdGFtcCAmYVRpbWVzdGFtcCwgY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgSGFuZGxlR2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVHZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlVGltZXIodm9pZCkgeyBEYXRhc2V0TWFuYWdlcjo6SGFuZGxlVGltZXIoKTsgfQorCisgICAgQ29hcDo6UmVzb3VyY2UgbVJlc291cmNlR2V0OworfTsKKworY2xhc3MgUGVuZGluZ0RhdGFzZXRCYXNlOiBwdWJsaWMgRGF0YXNldE1hbmFnZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIFRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBQZW5kaW5nRGF0YXNldEJhc2UoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJlc3RvcmUgdGhlIGRhdGFzZXQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgZGF0YXNldCBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVzdG9yZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgYWxzbyBzdG9wcyB0aGUgRGVsYXkgVGltZXIgaWYgaXQgd2FzIGFjdGl2ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIG5ldHdvcmsgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgYWxzbyBzdG9wcyB0aGUgRGVsYXkgVGltZXIgaWYgaXQgd2FzIGFjdGl2ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJOZXR3b3JrKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCB3aGVuIGRldGFjaGluZyBmcm9tIHRoZSBuZXR3b3JrLgorICAgICAqCisgICAgICogT24gZGV0YWNoLCB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBpcyByZXN0b3JlZCBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBhbHNvIHN0b3BzIHRoZSBEZWxheSBUaW1lciBpZiBpdCB3YXMgYWN0aXZlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBIYW5kbGVEZXRhY2godm9pZCk7CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gc3RhcnRzIHRoZSBEZWxheSBUaW1lci4KKyAgICAgKgorICAgICAqIEBwYXJtYVtpbl0gIGFEYXRhc2V0ICBUaGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCk7CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gc3RhcnRzIHRoZSBEZWxheSBUaW1lci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEYXRhc2V0ICBUaGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0KGNvbnN0IERhdGFzZXQgJmFEYXRhc2V0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgZm9yIHRoZSBwYXJ0aXRpb24uCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBhbHNvIHVwZGF0ZXMgdGhlIG5vbi12b2xhdGlsZSB2ZXJzaW9uIGlmIHRoZSBwYXJ0aXRpb24ncyBPcGVyYXRpb25hbCBEYXRhc2V0IGlzIG5ld2VyLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgYWxzbyBzdGFydHMgdGhlIERlbGF5IFRpbWVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVzdGFtcCAgVGhlIHRpbWVzdGFtcCBmb3IgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgVGhlIG1lc3NhZ2UgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFPZmZzZXQgICAgIFRoZSBvZmZzZXQgd2hlcmUgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgYmVnaW5zLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgIFRoZSBsZW5ndGggb2YgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldChjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXAsIGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCB1aW50OF90IGFMZW5ndGgpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIHZvaWQgSGFuZGxlRGVsYXlUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZURlbGF5VGltZXIodm9pZCk7CisgICAgdm9pZCBTdGFydERlbGF5VGltZXIodm9pZCk7CisgICAgdm9pZCBIYW5kbGVOZXR3b3JrVXBkYXRlKHZvaWQpOworCisgICAgVGltZXIgbURlbGF5VGltZXI7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgSGFuZGxlR2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVHZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlVGltZXIodm9pZCkgeyBEYXRhc2V0TWFuYWdlcjo6SGFuZGxlVGltZXIoKTsgfQorCisgICAgQ29hcDo6UmVzb3VyY2UgbVJlc291cmNlR2V0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjaWYgT1BFTlRIUkVBRF9NVEQKKyNpbmNsdWRlICJkYXRhc2V0X21hbmFnZXJfbXRkLmhwcCIKKyNlbGlmIE9QRU5USFJFQURfRlRECisjaW5jbHVkZSAiZGF0YXNldF9tYW5hZ2VyX2Z0ZC5ocHAiCisjZWxzZQorI2Vycm9yIE11c3QgZGVmaW5lIE9QRU5USFJFQURfTVREIG9yIE9QRU5USFJFQURfRlRECisjZW5kaWYKKworI2VuZGlmICAvLyBNRVNIQ09QX0RBVEFTRVRfTUFOQUdFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXRfbWFuYWdlcl9mdGQuY3BwIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfZnRkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTRjYTBiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfZnRkLmNwcApAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBNZXNoQ29QIERhdGFzZXRzIG1hbmFnZXIgdG8gcHJvY2VzcyBjb21tYW5kcy4KKyAqCisgKi8KKworI2lmIE9QRU5USFJFQURfRlRECisKKyNkZWZpbmUgV1BQX05BTUUgImRhdGFzZXRfbWFuYWdlcl9mdGQudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvZGF0YXNldC5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9kYXRhc2V0X21hbmFnZXIuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2xlYWRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWVzaENvUCB7CisKK0FjdGl2ZURhdGFzZXQ6OkFjdGl2ZURhdGFzZXQoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgQWN0aXZlRGF0YXNldEJhc2UoYVRocmVhZE5ldGlmKSwKKyAgICBtUmVzb3VyY2VTZXQoT1RfVVJJX1BBVEhfQUNUSVZFX1NFVCwgJkFjdGl2ZURhdGFzZXQ6OkhhbmRsZVNldCwgdGhpcykKK3sKK30KKworb3RFcnJvciBBY3RpdmVEYXRhc2V0OjpHZW5lcmF0ZUxvY2FsKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBEYXRhc2V0IGRhdGFzZXQobUxvY2FsLkdldFR5cGUoKSk7CisKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0TWxlKCkuSXNBdHRhY2hlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgbUxvY2FsLkdldChkYXRhc2V0KTsKKworICAgIC8vIEFjdGl2ZSBUaW1lc3RhbXAKKyAgICBpZiAoZGF0YXNldC5HZXQoVGx2OjprQWN0aXZlVGltZXN0YW1wKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgQWN0aXZlVGltZXN0YW1wVGx2IGFjdGl2ZVRpbWVzdGFtcFRsdjsKKyAgICAgICAgYWN0aXZlVGltZXN0YW1wVGx2LkluaXQoKTsKKyAgICAgICAgYWN0aXZlVGltZXN0YW1wVGx2LlNldFNlY29uZHMoMCk7CisgICAgICAgIGFjdGl2ZVRpbWVzdGFtcFRsdi5TZXRUaWNrcygwKTsKKyAgICAgICAgZGF0YXNldC5TZXQoYWN0aXZlVGltZXN0YW1wVGx2KTsKKyAgICB9CisKKyAgICAvLyBDaGFubmVsCisgICAgaWYgKGRhdGFzZXQuR2V0KFRsdjo6a0NoYW5uZWwpID09IE5VTEwpCisgICAgeworICAgICAgICBDaGFubmVsVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldENoYW5uZWxQYWdlKDApOworICAgICAgICB0bHYuU2V0Q2hhbm5lbChuZXRpZi5HZXRNYWMoKS5HZXRDaGFubmVsKCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIGNoYW5uZWxNYXNrCisgICAgaWYgKGRhdGFzZXQuR2V0KFRsdjo6a0NoYW5uZWxNYXNrKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgQ2hhbm5lbE1hc2swVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE1hc2soT1RfUkFESU9fU1VQUE9SVEVEX0NIQU5ORUxTKTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICAvLyBFeHRlbmRlZCBQQU4gSUQKKyAgICBpZiAoZGF0YXNldC5HZXQoVGx2OjprRXh0ZW5kZWRQYW5JZCkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEV4dGVuZGVkUGFuSWRUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0RXh0ZW5kZWRQYW5JZChuZXRpZi5HZXRNYWMoKS5HZXRFeHRlbmRlZFBhbklkKCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIE1lc2gtTG9jYWwgUHJlZml4CisgICAgaWYgKGRhdGFzZXQuR2V0KFRsdjo6a01lc2hMb2NhbFByZWZpeCkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIE1lc2hMb2NhbFByZWZpeFRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRNZXNoTG9jYWxQcmVmaXgobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsUHJlZml4KCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIE1hc3RlciBLZXkKKyAgICBpZiAoZGF0YXNldC5HZXQoVGx2OjprTmV0d29ya01hc3RlcktleSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIE5ldHdvcmtNYXN0ZXJLZXlUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0TmV0d29ya01hc3RlcktleShuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0TWFzdGVyS2V5KCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIE5ldHdvcmsgTmFtZQorICAgIGlmIChkYXRhc2V0LkdldChUbHY6OmtOZXR3b3JrTmFtZSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIE5ldHdvcmtOYW1lVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE5ldHdvcmtOYW1lKG5ldGlmLkdldE1hYygpLkdldE5ldHdvcmtOYW1lKCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIFBhbiBJRAorICAgIGlmIChkYXRhc2V0LkdldChUbHY6OmtQYW5JZCkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIFBhbklkVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldFBhbklkKG5ldGlmLkdldE1hYygpLkdldFBhbklkKCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIFBTS2MKKyAgICBpZiAoZGF0YXNldC5HZXQoVGx2OjprUFNLYykgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIFBTS2NUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0UFNLYyhuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0UFNLYygpKTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICAvLyBTZWN1cml0eSBQb2xpY3kKKyAgICBpZiAoZGF0YXNldC5HZXQoVGx2OjprU2VjdXJpdHlQb2xpY3kpID09IE5VTEwpCisgICAgeworICAgICAgICBTZWN1cml0eVBvbGljeVRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRSb3RhdGlvblRpbWUoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRLZXlSb3RhdGlvbigpKSk7CisgICAgICAgIHRsdi5TZXRGbGFncyhuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0U2VjdXJpdHlQb2xpY3lGbGFncygpKTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbUxvY2FsLlNldChkYXRhc2V0KSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJHZW5lcmF0ZWQgbG9jYWwgZGF0YXNldCIpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBBY3RpdmVEYXRhc2V0OjpTdGFydExlYWRlcih2b2lkKQoreworICAgIEdlbmVyYXRlTG9jYWwoKTsKKworICAgIG1Mb2NhbC5HZXQobU5ldHdvcmspOworICAgIEdldE5ldGlmKCkuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1SZXNvdXJjZVNldCk7Cit9CisKK3ZvaWQgQWN0aXZlRGF0YXNldDo6U3RvcExlYWRlcih2b2lkKQoreworICAgIEdldE5ldGlmKCkuR2V0Q29hcCgpLlJlbW92ZVJlc291cmNlKG1SZXNvdXJjZVNldCk7Cit9CisKK3ZvaWQgQWN0aXZlRGF0YXNldDo6SGFuZGxlU2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8QWN0aXZlRGF0YXNldCAqPihhQ29udGV4dCktPkhhbmRsZVNldCgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBBY3RpdmVEYXRhc2V0OjpIYW5kbGVTZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFN1Y2Nlc3NPckV4aXQoRGF0YXNldE1hbmFnZXI6OlNldChhSGVhZGVyLCBhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKSk7CisgICAgQXBwbHlDb25maWd1cmF0aW9uKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitQZW5kaW5nRGF0YXNldDo6UGVuZGluZ0RhdGFzZXQoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgUGVuZGluZ0RhdGFzZXRCYXNlKGFUaHJlYWROZXRpZiksCisgICAgbVJlc291cmNlU2V0KE9UX1VSSV9QQVRIX1BFTkRJTkdfU0VULCAmUGVuZGluZ0RhdGFzZXQ6OkhhbmRsZVNldCwgdGhpcykKK3sKK30KKwordm9pZCBQZW5kaW5nRGF0YXNldDo6U3RhcnRMZWFkZXIodm9pZCkKK3sKKyAgICBtTG9jYWwuR2V0KG1OZXR3b3JrKTsKKyAgICBTdGFydERlbGF5VGltZXIoKTsKKworICAgIEdldE5ldGlmKCkuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1SZXNvdXJjZVNldCk7Cit9CisKK3ZvaWQgUGVuZGluZ0RhdGFzZXQ6OlN0b3BMZWFkZXIodm9pZCkKK3sKKyAgICBHZXROZXRpZigpLkdldENvYXAoKS5SZW1vdmVSZXNvdXJjZShtUmVzb3VyY2VTZXQpOworfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0OjpIYW5kbGVTZXQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8UGVuZGluZ0RhdGFzZXQgKj4oYUNvbnRleHQpLT5IYW5kbGVTZXQoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgUGVuZGluZ0RhdGFzZXQ6OkhhbmRsZVNldChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgU3VjY2Vzc09yRXhpdChEYXRhc2V0TWFuYWdlcjo6U2V0KGFIZWFkZXIsIGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pKTsKKyAgICBTdGFydERlbGF5VGltZXIoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgUGVuZGluZ0RhdGFzZXQ6OkFwcGx5QWN0aXZlRGF0YXNldChjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXAsIE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgRGVsYXlUaW1lclRsdiBkZWxheVRpbWVyOworCisgICAgVmVyaWZ5T3JFeGl0KG5ldGlmLkdldE1sZSgpLklzQXR0YWNoZWQoKSk7CisKKyAgICB3aGlsZSAob2Zmc2V0IDwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICBPVF9UT09MX1BBQ0tFRF9CRUdJTgorICAgICAgICBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgICAgVGx2IHRsdjsKKyAgICAgICAgICAgIHVpbnQ4X3QgdmFsdWVbRGF0YXNldDo6a01heFZhbHVlU2l6ZV07CisgICAgICAgIH0gT1RfVE9PTF9QQUNLRURfRU5EIGRhdGE7CisKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihUbHYpLCAmZGF0YS50bHYpOworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCArIHNpemVvZihUbHYpLCBkYXRhLnRsdi5HZXRMZW5ndGgoKSwgZGF0YS52YWx1ZSk7CisgICAgICAgIG1OZXR3b3JrLlNldChkYXRhLnRsdik7CisgICAgICAgIG9mZnNldCArPSBzaXplb2YoVGx2KSArIGRhdGEudGx2LkdldExlbmd0aCgpOworICAgIH0KKworICAgIC8vIGFkZCBkZWxheSB0aW1lciB0bHYKKyAgICBkZWxheVRpbWVyLkluaXQoKTsKKyAgICBkZWxheVRpbWVyLlNldERlbGF5VGltZXIobmV0aWYuR2V0TGVhZGVyKCkuR2V0RGVsYXlUaW1lck1pbmltYWwoKSk7CisgICAgbU5ldHdvcmsuU2V0KGRlbGF5VGltZXIpOworCisgICAgLy8gYWRkIHBlbmRpbmcgdGltZXN0YW1wIHRsdgorICAgIG1OZXR3b3JrLlNldFRpbWVzdGFtcChhVGltZXN0YW1wKTsKKyAgICBEYXRhc2V0TWFuYWdlcjo6SGFuZGxlTmV0d29ya1VwZGF0ZSgpOworCisgICAgLy8gcmVzZXQgZGVsYXkgdGltZXIKKyAgICBTdGFydERlbGF5VGltZXIoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK30gIC8vIG5hbWVzcGFjZSBNZXNoQ29QCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRlRECmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXRfbWFuYWdlcl9mdGQuaHBwIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfZnRkLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODAyNjIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfZnRkLmhwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFuYWdpbmcgTWVzaENvUCBEYXRhc2V0cy4KKyAqCisgKi8KKworI2lmbmRlZiBNRVNIQ09QX0RBVEFTRVRfTUFOQUdFUl9GVERfSFBQXworI2RlZmluZSBNRVNIQ09QX0RBVEFTRVRfTUFOQUdFUl9GVERfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworY2xhc3MgQWN0aXZlRGF0YXNldDogcHVibGljIEFjdGl2ZURhdGFzZXRCYXNlCit7CitwdWJsaWM6CisgICAgQWN0aXZlRGF0YXNldChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIG90RXJyb3IgR2VuZXJhdGVMb2NhbCh2b2lkKTsKKworICAgIHZvaWQgU3RhcnRMZWFkZXIodm9pZCk7CisKKyAgICB2b2lkIFN0b3BMZWFkZXIodm9pZCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgSGFuZGxlU2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVTZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIGJvb2wgSXNUbHZJbml0aWFsaXplZChUbHY6OlR5cGUgYVR5cGUpOworCisgICAgQ29hcDo6UmVzb3VyY2UgbVJlc291cmNlU2V0OworfTsKKworY2xhc3MgUGVuZGluZ0RhdGFzZXQ6IHB1YmxpYyBQZW5kaW5nRGF0YXNldEJhc2UKK3sKK3B1YmxpYzoKKyAgICBQZW5kaW5nRGF0YXNldChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIHZvaWQgU3RhcnRMZWFkZXIodm9pZCk7CisKKyAgICB2b2lkIFN0b3BMZWFkZXIodm9pZCk7CisKKyAgICB2b2lkIEFwcGx5QWN0aXZlRGF0YXNldChjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXAsIE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVTZXQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVNldChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgQ29hcDo6UmVzb3VyY2UgbVJlc291cmNlU2V0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1FU0hDT1BfREFUQVNFVF9NQU5BR0VSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9tYW5hZ2VyX210ZC5ocHAgYi9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXRfbWFuYWdlcl9tdGQuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMGUyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXRfbWFuYWdlcl9tdGQuaHBwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5hZ2luZyBNZXNoQ29QIERhdGFzZXRzLgorICoKKyAqLworCisjaWZuZGVmIE1FU0hDT1BfREFUQVNFVF9NQU5BR0VSX01URF9IUFBfCisjZGVmaW5lIE1FU0hDT1BfREFUQVNFVF9NQU5BR0VSX01URF9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworCituYW1lc3BhY2UgTWVzaENvUCB7CisKK2NsYXNzIEFjdGl2ZURhdGFzZXQ6IHB1YmxpYyBBY3RpdmVEYXRhc2V0QmFzZQoreworcHVibGljOgorICAgIEFjdGl2ZURhdGFzZXQoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOiBBY3RpdmVEYXRhc2V0QmFzZShhVGhyZWFkTmV0aWYpIHsgfQorCisgICAgb3RFcnJvciBHZW5lcmF0ZUxvY2FsKHZvaWQpIHsgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgfQorfTsKKworY2xhc3MgUGVuZGluZ0RhdGFzZXQ6IHB1YmxpYyBQZW5kaW5nRGF0YXNldEJhc2UKK3sKK3B1YmxpYzoKKyAgICBQZW5kaW5nRGF0YXNldChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKSA6IFBlbmRpbmdEYXRhc2V0QmFzZShhVGhyZWFkTmV0aWYpIHsgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1FU0hDT1BfREFUQVNFVF9NQU5BR0VSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZHRscy5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2R0bHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOWRlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2R0bHMuY3BwCkBAIC0wLDAgKzEsNTI3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBuZWNlc3NhcnkgaG9va3MgZm9yIG1iZWRUTFMuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiZHRscy50bWgiCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImR0bHMuaHBwIgorCisjaW5jbHVkZSA8bWJlZHRscy9kZWJ1Zy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgImNyeXB0by9zaGEyNTYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRFRMUworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitEdGxzOjpEdGxzKFRocmVhZE5ldGlmICZhTmV0aWYpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhTmV0aWYpLAorICAgIG1Qc2tMZW5ndGgoMCksCisgICAgbVN0YXJ0ZWQoZmFsc2UpLAorICAgIG1UaW1lcihhTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmRHRsczo6SGFuZGxlVGltZXIsIHRoaXMpLAorICAgIG1UaW1lckludGVybWVkaWF0ZSgwKSwKKyAgICBtVGltZXJTZXQoZmFsc2UpLAorICAgIG1SZWNlaXZlTWVzc2FnZShOVUxMKSwKKyAgICBtUmVjZWl2ZU9mZnNldCgwKSwKKyAgICBtUmVjZWl2ZUxlbmd0aCgwKSwKKyAgICBtQ29ubmVjdGVkSGFuZGxlcihOVUxMKSwKKyAgICBtUmVjZWl2ZUhhbmRsZXIoTlVMTCksCisgICAgbVNlbmRIYW5kbGVyKE5VTEwpLAorICAgIG1Db250ZXh0KE5VTEwpLAorICAgIG1DbGllbnQoZmFsc2UpLAorICAgIG1NZXNzYWdlU3ViVHlwZSgwKQoreworICAgIG1lbXNldChtUHNrLCAwLCBzaXplb2YobVBzaykpOworICAgIG1lbXNldCgmbUVudHJvcHksIDAsIHNpemVvZihtRW50cm9weSkpOworICAgIG1lbXNldCgmbUN0ckRyYmcsIDAsIHNpemVvZihtQ3RyRHJiZykpOworICAgIG1lbXNldCgmbVNzbCwgMCwgc2l6ZW9mKG1Tc2wpKTsKKyAgICBtZW1zZXQoJm1Db25mLCAwLCBzaXplb2YobUNvbmYpKTsKKyAgICBtZW1zZXQoJm1Db29raWVDdHgsIDAsIHNpemVvZihtQ29va2llQ3R4KSk7CisgICAgbVByb3Zpc2lvbmluZ1VybC5Jbml0KCk7Cit9CisKK290RXJyb3IgRHRsczo6U3RhcnQoYm9vbCBhQ2xpZW50LCBDb25uZWN0ZWRIYW5kbGVyIGFDb25uZWN0ZWRIYW5kbGVyLCBSZWNlaXZlSGFuZGxlciBhUmVjZWl2ZUhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIFNlbmRIYW5kbGVyIGFTZW5kSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBjaXBoZXJzdWl0ZXNbMl0gPSB7MHhDMEZGLCAwfTsgLy8gRUMtSlBBS0UgY2lwaGVyIHN1aXRlCisgICAgb3RFeHRBZGRyZXNzIGV1aTY0OworICAgIGludCBydmFsOworCisgICAgbUNvbm5lY3RlZEhhbmRsZXIgPSBhQ29ubmVjdGVkSGFuZGxlcjsKKyAgICBtUmVjZWl2ZUhhbmRsZXIgPSBhUmVjZWl2ZUhhbmRsZXI7CisgICAgbVNlbmRIYW5kbGVyID0gYVNlbmRIYW5kbGVyOworICAgIG1Db250ZXh0ID0gYUNvbnRleHQ7CisgICAgbUNsaWVudCA9IGFDbGllbnQ7CisgICAgbVJlY2VpdmVNZXNzYWdlID0gTlVMTDsKKyAgICBtTWVzc2FnZVN1YlR5cGUgPSAwOworCisgICAgbWJlZHRsc19zc2xfaW5pdCgmbVNzbCk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoJm1Db25mKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoJm1DdHJEcmJnKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCgmbUVudHJvcHkpOworCisgICAgLy8gbWJlZFRMUydzIGRlYnVnIGxldmVsIGlzIGFsbW9zdCB0aGUgc2FtZSBhcyBPcGVuVGhyZWFkJ3MKKyAgICBtYmVkdGxzX2RlYnVnX3NldF90aHJlc2hvbGQoT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMKTsKKyAgICBvdFBsYXRSYWRpb0dldEllZWVFdWk2NChHZXRJbnN0YW5jZSgpLCBldWk2NC5tOCk7CisgICAgcnZhbCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCgmbUN0ckRyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmbUVudHJvcHksIGV1aTY0Lm04LCBzaXplb2YoZXVpNjQpKTsKKyAgICBWZXJpZnlPckV4aXQocnZhbCA9PSAwKTsKKworICAgIHJ2YWwgPSBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoJm1Db25mLCBtQ2xpZW50ID8gTUJFRFRMU19TU0xfSVNfQ0xJRU5UIDogTUJFRFRMU19TU0xfSVNfU0VSVkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNLCBNQkVEVExTX1NTTF9QUkVTRVRfREVGQVVMVCk7CisgICAgVmVyaWZ5T3JFeGl0KHJ2YWwgPT0gMCk7CisKKyAgICBtYmVkdGxzX3NzbF9jb25mX3JuZygmbUNvbmYsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmbUN0ckRyYmcpOworICAgIG1iZWR0bHNfc3NsX2NvbmZfbWluX3ZlcnNpb24oJm1Db25mLCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyk7CisgICAgbWJlZHRsc19zc2xfY29uZl9tYXhfdmVyc2lvbigmbUNvbmYsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX2NpcGhlcnN1aXRlcygmbUNvbmYsIGNpcGhlcnN1aXRlcyk7CisgICAgbWJlZHRsc19zc2xfY29uZl9leHBvcnRfa2V5c19jYigmbUNvbmYsIEhhbmRsZU1iZWR0bHNFeHBvcnRLZXlzLCB0aGlzKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX2hhbmRzaGFrZV90aW1lb3V0KCZtQ29uZiwgODAwMCwgNjAwMDApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCZtQ29uZiwgSGFuZGxlTWJlZHRsc0RlYnVnLCB0aGlzKTsKKworICAgIGlmICghbUNsaWVudCkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9pbml0KCZtQ29va2llQ3R4KTsKKworICAgICAgICBydmFsID0gbWJlZHRsc19zc2xfY29va2llX3NldHVwKCZtQ29va2llQ3R4LCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJm1DdHJEcmJnKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJ2YWwgPT0gMCk7CisKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9kdGxzX2Nvb2tpZXMoJm1Db25mLCBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGUsIG1iZWR0bHNfc3NsX2Nvb2tpZV9jaGVjaywgJm1Db29raWVDdHgpOworICAgIH0KKworICAgIHJ2YWwgPSBtYmVkdGxzX3NzbF9zZXR1cCgmbVNzbCwgJm1Db25mKTsKKyAgICBWZXJpZnlPckV4aXQocnZhbCA9PSAwKTsKKworICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oJm1Tc2wsIHRoaXMsICZEdGxzOjpIYW5kbGVNYmVkdGxzVHJhbnNtaXQsIEhhbmRsZU1iZWR0bHNSZWNlaXZlLCBOVUxMKTsKKyAgICBtYmVkdGxzX3NzbF9zZXRfdGltZXJfY2IoJm1Tc2wsIHRoaXMsICZEdGxzOjpIYW5kbGVNYmVkdGxzU2V0VGltZXIsIEhhbmRsZU1iZWR0bHNHZXRUaW1lcik7CisKKyAgICBydmFsID0gbWJlZHRsc19zc2xfc2V0X2hzX2VjanBha2VfcGFzc3dvcmQoJm1Tc2wsIG1Qc2ssIG1Qc2tMZW5ndGgpOworICAgIFZlcmlmeU9yRXhpdChydmFsID09IDApOworCisgICAgbVN0YXJ0ZWQgPSB0cnVlOworICAgIFByb2Nlc3MoKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIkRUTFMgc3RhcnRlZCIpOworCitleGl0OgorICAgIHJldHVybiBNYXBFcnJvcihydmFsKTsKK30KKworb3RFcnJvciBEdGxzOjpTdG9wKHZvaWQpCit7CisgICAgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCZtU3NsKTsKKyAgICBDbG9zZSgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit2b2lkIER0bHM6OkNsb3NlKHZvaWQpCit7CisgICAgVmVyaWZ5T3JFeGl0KG1TdGFydGVkKTsKKworICAgIG1TdGFydGVkID0gZmFsc2U7CisgICAgbWJlZHRsc19zc2xfZnJlZSgmbVNzbCk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoJm1Db25mKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoJm1DdHJEcmJnKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSgmbUVudHJvcHkpOworICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9mcmVlKCZtQ29va2llQ3R4KTsKKworICAgIGlmIChtQ29ubmVjdGVkSGFuZGxlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbUNvbm5lY3RlZEhhbmRsZXIobUNvbnRleHQsIGZhbHNlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitib29sIER0bHM6OklzU3RhcnRlZCh2b2lkKQoreworICAgIHJldHVybiBtU3RhcnRlZDsKK30KKworb3RFcnJvciBEdGxzOjpTZXRQc2soY29uc3QgdWludDhfdCAqYVBzaywgdWludDhfdCBhUHNrTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFQc2tMZW5ndGggPD0gc2l6ZW9mKG1Qc2spLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBtZW1jcHkobVBzaywgYVBzaywgYVBza0xlbmd0aCk7CisgICAgbVBza0xlbmd0aCA9IGFQc2tMZW5ndGg7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIER0bHM6OlNldENsaWVudElkKGNvbnN0IHVpbnQ4X3QgKmFDbGllbnRJZCwgdWludDhfdCBhTGVuZ3RoKQoreworICAgIGludCBydmFsID0gbWJlZHRsc19zc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQoJm1Tc2wsIGFDbGllbnRJZCwgYUxlbmd0aCk7CisgICAgcmV0dXJuIE1hcEVycm9yKHJ2YWwpOworfQorCitib29sIER0bHM6OklzQ29ubmVjdGVkKHZvaWQpCit7CisgICAgcmV0dXJuIG1Tc2wuc3RhdGUgPT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVI7Cit9CisKK290RXJyb3IgRHRsczo6U2VuZChNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IGJ1ZmZlcltrQXBwbGljYXRpb25EYXRhTWF4TGVuZ3RoXTsKKworICAgIFZlcmlmeU9yRXhpdChhTGVuZ3RoIDw9IGtBcHBsaWNhdGlvbkRhdGFNYXhMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvLyBTdG9yZSBtZXNzYWdlIHNwZWNpZmljIHN1YiB0eXBlLgorICAgIG1NZXNzYWdlU3ViVHlwZSA9IGFNZXNzYWdlLkdldFN1YlR5cGUoKTsKKyAgICBhTWVzc2FnZS5SZWFkKDAsIGFMZW5ndGgsIGJ1ZmZlcik7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gTWFwRXJyb3IobWJlZHRsc19zc2xfd3JpdGUoJm1Tc2wsIGJ1ZmZlciwgYUxlbmd0aCkpKTsKKworICAgIGFNZXNzYWdlLkZyZWUoKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRHRsczo6UmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICBtUmVjZWl2ZU1lc3NhZ2UgPSAmYU1lc3NhZ2U7CisgICAgbVJlY2VpdmVPZmZzZXQgPSBhT2Zmc2V0OworICAgIG1SZWNlaXZlTGVuZ3RoID0gYUxlbmd0aDsKKworICAgIFByb2Nlc3MoKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitpbnQgRHRsczo6SGFuZGxlTWJlZHRsc1RyYW5zbWl0KHZvaWQgKmFDb250ZXh0LCBjb25zdCB1bnNpZ25lZCBjaGFyICphQnVmLCBzaXplX3QgYUxlbmd0aCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RHRscyAqPihhQ29udGV4dCktPkhhbmRsZU1iZWR0bHNUcmFuc21pdChhQnVmLCBhTGVuZ3RoKTsKK30KKworaW50IER0bHM6OkhhbmRsZU1iZWR0bHNUcmFuc21pdChjb25zdCB1bnNpZ25lZCBjaGFyICphQnVmLCBzaXplX3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIGludCBydmFsID0gMDsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIkR0bHM6OkhhbmRsZU1iZWR0bHNUcmFuc21pdCIpOworCisgICAgZXJyb3IgPSBtU2VuZEhhbmRsZXIobUNvbnRleHQsIGFCdWYsIHN0YXRpY19jYXN0PHVpbnQxNl90PihhTGVuZ3RoKSwgbU1lc3NhZ2VTdWJUeXBlKTsKKworICAgIC8vIFJlc3RvcmUgZGVmYXVsdCBzdWIgdHlwZS4KKyAgICBtTWVzc2FnZVN1YlR5cGUgPSAwOworCisgICAgc3dpdGNoIChlcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICBydmFsID0gc3RhdGljX2Nhc3Q8aW50PihhTGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PX0JVRlM6CisgICAgICAgIHJ2YWwgPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKworaW50IER0bHM6OkhhbmRsZU1iZWR0bHNSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCB1bnNpZ25lZCBjaGFyICphQnVmLCBzaXplX3QgYUxlbmd0aCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RHRscyAqPihhQ29udGV4dCktPkhhbmRsZU1iZWR0bHNSZWNlaXZlKGFCdWYsIGFMZW5ndGgpOworfQorCitpbnQgRHRsczo6SGFuZGxlTWJlZHRsc1JlY2VpdmUodW5zaWduZWQgY2hhciAqYUJ1Ziwgc2l6ZV90IGFMZW5ndGgpCit7CisgICAgaW50IHJ2YWw7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJEdGxzOjpIYW5kbGVNYmVkdGxzUmVjZWl2ZSIpOworCisgICAgVmVyaWZ5T3JFeGl0KG1SZWNlaXZlTWVzc2FnZSAhPSBOVUxMICYmIG1SZWNlaXZlTGVuZ3RoICE9IDAsIHJ2YWwgPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEKTsKKworICAgIGlmIChhTGVuZ3RoID4gbVJlY2VpdmVMZW5ndGgpCisgICAgeworICAgICAgICBhTGVuZ3RoID0gbVJlY2VpdmVMZW5ndGg7CisgICAgfQorCisgICAgcnZhbCA9IChpbnQpbVJlY2VpdmVNZXNzYWdlLT5SZWFkKG1SZWNlaXZlT2Zmc2V0LCAodWludDE2X3QpYUxlbmd0aCwgYUJ1Zik7CisgICAgbVJlY2VpdmVPZmZzZXQgKz0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHJ2YWwpOworICAgIG1SZWNlaXZlTGVuZ3RoIC09IHN0YXRpY19jYXN0PHVpbnQxNl90PihydmFsKTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworaW50IER0bHM6OkhhbmRsZU1iZWR0bHNHZXRUaW1lcih2b2lkICphQ29udGV4dCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RHRscyAqPihhQ29udGV4dCktPkhhbmRsZU1iZWR0bHNHZXRUaW1lcigpOworfQorCitpbnQgRHRsczo6SGFuZGxlTWJlZHRsc0dldFRpbWVyKHZvaWQpCit7CisgICAgaW50IHJ2YWw7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJEdGxzOjpIYW5kbGVNYmVkdGxzR2V0VGltZXIiKTsKKworICAgIGlmICghbVRpbWVyU2V0KQorICAgIHsKKyAgICAgICAgcnZhbCA9IC0xOworICAgIH0KKyAgICBlbHNlIGlmICghbVRpbWVyLklzUnVubmluZygpKQorICAgIHsKKyAgICAgICAgcnZhbCA9IDI7CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KG1UaW1lckludGVybWVkaWF0ZSAtIFRpbWVyOjpHZXROb3coKSkgPD0gMCkKKyAgICB7CisgICAgICAgIHJ2YWwgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBydmFsID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKwordm9pZCBEdGxzOjpIYW5kbGVNYmVkdGxzU2V0VGltZXIodm9pZCAqYUNvbnRleHQsIHVpbnQzMl90IGFJbnRlcm1lZGlhdGUsIHVpbnQzMl90IGFGaW5pc2gpCit7CisgICAgc3RhdGljX2Nhc3Q8RHRscyAqPihhQ29udGV4dCktPkhhbmRsZU1iZWR0bHNTZXRUaW1lcihhSW50ZXJtZWRpYXRlLCBhRmluaXNoKTsKK30KKwordm9pZCBEdGxzOjpIYW5kbGVNYmVkdGxzU2V0VGltZXIodWludDMyX3QgYUludGVybWVkaWF0ZSwgdWludDMyX3QgYUZpbmlzaCkKK3sKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJEdGxzOjpTZXRUaW1lciIpOworCisgICAgaWYgKGFGaW5pc2ggPT0gMCkKKyAgICB7CisgICAgICAgIG1UaW1lclNldCA9IGZhbHNlOworICAgICAgICBtVGltZXIuU3RvcCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVGltZXJTZXQgPSB0cnVlOworICAgICAgICBtVGltZXIuU3RhcnQoYUZpbmlzaCk7CisgICAgICAgIG1UaW1lckludGVybWVkaWF0ZSA9IFRpbWVyOjpHZXROb3coKSArIGFJbnRlcm1lZGlhdGU7CisgICAgfQorfQorCitpbnQgRHRsczo6SGFuZGxlTWJlZHRsc0V4cG9ydEtleXModm9pZCAqYUNvbnRleHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFNYXN0ZXJTZWNyZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFLZXlCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYU1hY0xlbmd0aCwgc2l6ZV90IGFLZXlMZW5ndGgsIHNpemVfdCBhSXZMZW5ndGgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PER0bHMgKj4oYUNvbnRleHQpLT5IYW5kbGVNYmVkdGxzRXhwb3J0S2V5cyhhTWFzdGVyU2VjcmV0LCBhS2V5QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTWFjTGVuZ3RoLCBhS2V5TGVuZ3RoLCBhSXZMZW5ndGgpOworfQorCitpbnQgRHRsczo6SGFuZGxlTWJlZHRsc0V4cG9ydEtleXMoY29uc3QgdW5zaWduZWQgY2hhciAqYU1hc3RlclNlY3JldCwgY29uc3QgdW5zaWduZWQgY2hhciAqYUtleUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhTWFjTGVuZ3RoLCBzaXplX3QgYUtleUxlbmd0aCwgc2l6ZV90IGFJdkxlbmd0aCkKK3sKKyAgICB1aW50OF90IGtla1tDcnlwdG86OlNoYTI1Njo6a0hhc2hTaXplXTsKKyAgICBDcnlwdG86OlNoYTI1NiBzaGEyNTY7CisKKyAgICBzaGEyNTYuU3RhcnQoKTsKKyAgICBzaGEyNTYuVXBkYXRlKGFLZXlCbG9jaywgMiAqIHN0YXRpY19jYXN0PHVpbnQxNl90PihhTWFjTGVuZ3RoICsgYUtleUxlbmd0aCArIGFJdkxlbmd0aCkpOworICAgIHNoYTI1Ni5GaW5pc2goa2VrKTsKKworICAgIEdldE5ldGlmKCkuR2V0S2V5TWFuYWdlcigpLlNldEtlayhrZWspOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiR2VuZXJhdGVkIEtFSyIpOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNYXN0ZXJTZWNyZXQpOworICAgIHJldHVybiAwOworfQorCit2b2lkIER0bHM6OkhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVUaW1lcigpOworfQorCit2b2lkIER0bHM6OkhhbmRsZVRpbWVyKHZvaWQpCit7CisgICAgUHJvY2VzcygpOworfQorCit2b2lkIER0bHM6OlByb2Nlc3Modm9pZCkKK3sKKyAgICB1aW50OF90IGJ1ZltNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU5dOworICAgIGJvb2wgc2hvdWxkQ2xvc2UgPSBmYWxzZTsKKyAgICBpbnQgcnZhbDsKKworICAgIHdoaWxlIChtU3RhcnRlZCkKKyAgICB7CisgICAgICAgIGlmIChtU3NsLnN0YXRlICE9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSKQorICAgICAgICB7CisgICAgICAgICAgICBydmFsID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCZtU3NsKTsKKworICAgICAgICAgICAgaWYgKChtU3NsLnN0YXRlID09IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSKSAmJiAobUNvbm5lY3RlZEhhbmRsZXIgIT0gTlVMTCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUNvbm5lY3RlZEhhbmRsZXIobUNvbnRleHQsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcnZhbCA9IG1iZWR0bHNfc3NsX3JlYWQoJm1Tc2wsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ2YWwgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVjZWl2ZUhhbmRsZXIobUNvbnRleHQsIGJ1Ziwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHJ2YWwpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChydmFsID09IDAgfHwgcnZhbCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8IHJ2YWwgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChydmFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlk6CisgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCZtU3NsKTsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KHNob3VsZENsb3NlID0gdHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRDoKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfRkFUQUxfQUxFUlRfTUVTU0FHRToKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jbG9zZV9ub3RpZnkoJm1Tc2wpOworICAgICAgICAgICAgICAgIEV4aXROb3coc2hvdWxkQ2xvc2UgPSB0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUM6CisgICAgICAgICAgICAgICAgaWYgKG1Tc2wuc3RhdGUgIT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoJm1Tc2wsIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0JBRF9SRUNPUkRfTUFDKTsKKyAgICAgICAgICAgICAgICAgICAgRXhpdE5vdyhzaG91bGRDbG9zZSA9IHRydWUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChtU3NsLnN0YXRlICE9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCZtU3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19IQU5EU0hBS0VfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgICAgIEV4aXROb3coc2hvdWxkQ2xvc2UgPSB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCgmbVNzbCk7CisgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZXRfaHNfZWNqcGFrZV9wYXNzd29yZCgmbVNzbCwgbVBzaywgbVBza0xlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKworICAgIGlmIChzaG91bGRDbG9zZSkKKyAgICB7CisgICAgICAgIENsb3NlKCk7CisgICAgfQorfQorCitvdEVycm9yIER0bHM6Ok1hcEVycm9yKGludCBydmFsKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgc3dpdGNoIChydmFsKQorICAgIHsKKyAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQToKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEOgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlM7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KHJ2YWwgPj0gMCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBEdGxzOjpIYW5kbGVNYmVkdGxzRGVidWcodm9pZCAqY3R4LCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICpzdHIpCit7CisgICAgRHRscyAqcFRoaXMgPSBzdGF0aWNfY2FzdDxEdGxzICo+KGN0eCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKHBUaGlzKTsKKworICAgIHN3aXRjaCAobGV2ZWwpCisgICAgeworICAgIGNhc2UgMToKKyAgICAgICAgb3RMb2dDcml0TWJlZFRscyhwVGhpcy0+R2V0SW5zdGFuY2UoKSwgIiVzIiwgc3RyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICAgIG90TG9nV2Fybk1iZWRUbHMocFRoaXMtPkdldEluc3RhbmNlKCksICIlcyIsIHN0cik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOgorICAgICAgICBvdExvZ0luZm9NYmVkVGxzKHBUaGlzLT5HZXRJbnN0YW5jZSgpLCAiJXMiLCBzdHIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgNDoKKyAgICBkZWZhdWx0OgorICAgICAgICBvdExvZ0RlYmdNYmVkVGxzKHBUaGlzLT5HZXRJbnN0YW5jZSgpLCAiJXMiLCBzdHIpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0R0bHMgJkR0bHM6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIER0bHMgJmR0bHMgPSAqc3RhdGljX2Nhc3Q8RHRscyAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBEdGxzICZkdGxzID0gb3RHZXRUaHJlYWROZXRpZigpLkdldER0bHMoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGR0bHM7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBNZXNoQ29QCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0RUTFMKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZHRscy5ocHAgYi9zcmMvY29yZS9tZXNoY29wL2R0bHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDAzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2R0bHMuaHBwCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdXNpbmcgbWJlZFRMUy4KKyAqLworCisjaWZuZGVmIERUTFNfSFBQXworI2RlZmluZSBEVExTX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgPG1iZWR0bHMvc3NsLmg+CisjaW5jbHVkZSA8bWJlZHRscy9lbnRyb3B5Lmg+CisjaW5jbHVkZSA8bWJlZHRscy9jdHJfZHJiZy5oPgorI2luY2x1ZGUgPG1iZWR0bHMvZXJyb3IuaD4KKyNpbmNsdWRlIDxtYmVkdGxzL2NlcnRzLmg+CisjaW5jbHVkZSA8bWJlZHRscy9zc2xfY29va2llLmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL3NoYTI1Ni5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKKworbmFtZXNwYWNlIE1lc2hDb1AgeworCitjbGFzcyBEdGxzOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1Bza01heExlbmd0aCA9IDMyLAorICAgICAgICBrQXBwbGljYXRpb25EYXRhTWF4TGVuZ3RoID0gMTI4LAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBEVExTIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIER0bHMoVGhyZWFkTmV0aWYgJmFOZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIG9yIHRvcm4gZG93bi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICAgICAqIEBwYXJhbVtpbl0gIGFDb25uZWN0ZWQgIFRSVUUgaWYgYSBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqQ29ubmVjdGVkSGFuZGxlcikodm9pZCAqYUNvbnRleHQsIGJvb2wgYUNvbm5lY3RlZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gZGF0YSBpcyByZWNlaXZlZCBmcm9tIHRoZSBEVExTIHNlc3Npb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgICAgICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgIEEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgZGF0YSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgIE51bWJlciBvZiBieXRlcyBpbiB0aGUgcmVjZWl2ZWQgZGF0YSBidWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIHZvaWQgKCpSZWNlaXZlSGFuZGxlcikodm9pZCAqYUNvbnRleHQsIHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIGRhdGEgaXMgcmVhZHkgdG8gdHJhbnNtaXQgZm9yIHRoZSBEVExTIHNlc3Npb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSB0cmFuc21pdCBkYXRhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgICAgICAgIE51bWJlciBvZiBieXRlcyBpbiB0aGUgdHJhbnNtaXQgZGF0YSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VTdWJ0eXBlICBBIG1lc3NhZ2Ugc3ViIHR5cGUgaW5mb3JtYXRpb24gZm9yIHRoZSBzZW5kZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIG90RXJyb3IoKlNlbmRIYW5kbGVyKSh2b2lkICphQ29udGV4dCwgY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCwgdWludDhfdCBhTWVzc2FnZVN1YlR5cGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RhcnRzIHRoZSBEVExTIHNlcnZpY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2xpZW50ICAgICAgICAgICAgVFJVRSBpZiBvcGVyYXRpbmcgYXMgYSBjbGllbnQsIEZBTFNFIGlmIG9wZXJhdGluZyBhcyBhIHNlcnZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29ubmVjdGVkSGFuZGxlciAgQSBwb2ludGVyIHRvIHRoZSBjb25uZWN0ZWQgaGFuZGxlci4KKyAgICAgKiBAcGFyYW1baW5dICBhUmVjZWl2ZUhhbmRsZXIgICAgQSBwb2ludGVyIHRvIHRoZSByZWNlaXZlIGhhbmRsZXIuCisgICAgICogQHBhcmFtW2luXSAgYVNlbmRIYW5kbGVyICAgICAgIEEgcG9pbnRlciB0byB0aGUgc2VuZCBoYW5kbGVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgICAgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBEVExTIHNlcnZpY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0YXJ0KGJvb2wgYUNsaWVudCwgQ29ubmVjdGVkSGFuZGxlciBhQ29ubmVjdGVkSGFuZGxlciwgUmVjZWl2ZUhhbmRsZXIgYVJlY2VpdmVIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgU2VuZEhhbmRsZXIgYVNlbmRIYW5kbGVyLCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyB0aGUgRFRMUyBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgRFRMUyBzZXJ2aWNlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBEVExTIHNlcnZpY2UgaXMgYWN0aXZlLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiB0aGUgRFRMUyBzZXJ2aWNlIGlzIGFjdGl2ZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1N0YXJ0ZWQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQU0suCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUFNLICBBIHBvaW50ZXIgdG8gdGhlIFBTSy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBQU0suCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBQU0sgaXMgaW52YWxpZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0UHNrKGNvbnN0IHVpbnQ4X3QgKmFQc2ssIHVpbnQ4X3QgYVBza0xlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDbGllbnQgSUQgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgSGVsbG8gQ29va2llLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNsaWVudElkICBBIHBvaW50ZXIgdG8gdGhlIENsaWVudCBJRC4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgIE51bWJlciBvZiBieXRlcyBpbiB0aGUgQ2xpZW50IElELgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBDbGllbnQgSUQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldENsaWVudElkKGNvbnN0IHVpbnQ4X3QgKmFDbGllbnRJZCwgdWludDhfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgRFRMUyBzZXNzaW9uIGlzIGNvbm5lY3RlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIFRoZSBEVExTIHNlc3Npb24gaXMgY29ubmVjdGVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIFRoZSBEVExTIHNlc3Npb24gaXMgbm90IGNvbm5lY3RlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNDb25uZWN0ZWQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBkYXRhIHdpdGhpbiB0aGUgRFRMUyBzZXNzaW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgbWVzc2FnZSB0byBzZW5kIHZpYSBEVExTLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRhdGEgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgc2VudCB0aGUgZGF0YSB2aWEgdGhlIERUTFMgc2Vzc2lvbi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEEgbWVzc2FnZSBpcyB0b28gbG9uZy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZChNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHJlY2VpdmVkIERUTFMgbWVzc2FnZSB0byB0aGUgRFRMUyBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYU9mZnNldCAgIFRoZSBvZmZzZXQgd2l0aGluIEBwIGFNZXNzYWdlIHdoZXJlIHRoZSBEVExTIG1lc3NhZ2Ugc3RhcnRzLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICBUaGUgc2l6ZSBvZiB0aGUgRFRMUyBtZXNzYWdlIChieXRlcykuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgdGhlIHJlY2VpdmVkIERUTFMgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCwgdWludDE2X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcHJvdmlzaW9uaW5nIFVSTCBpcyBwbGFjZWQgaGVyZSBzbyB0aGF0IGJvdGggdGhlIENvbW1pc3Npb25lciBhbmQgSm9pbmVyIGNhbiBzaGFyZSB0aGUgc2FtZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBQcm92aXNpb25pbmdVcmxUbHYgbVByb3Zpc2lvbmluZ1VybDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgb3RFcnJvciBNYXBFcnJvcihpbnQgcnZhbCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVNYmVkdGxzRGVidWcodm9pZCAqY3R4LCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpzdHIpOworCisgICAgc3RhdGljIGludCBIYW5kbGVNYmVkdGxzR2V0VGltZXIodm9pZCAqYUNvbnRleHQpOworICAgIGludCBIYW5kbGVNYmVkdGxzR2V0VGltZXIodm9pZCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVNYmVkdGxzU2V0VGltZXIodm9pZCAqYUNvbnRleHQsIHVpbnQzMl90IGFJbnRlcm1lZGlhdGUsIHVpbnQzMl90IGFGaW5pc2gpOworICAgIHZvaWQgSGFuZGxlTWJlZHRsc1NldFRpbWVyKHVpbnQzMl90IGFJbnRlcm1lZGlhdGUsIHVpbnQzMl90IGFGaW5pc2gpOworCisgICAgc3RhdGljIGludCBIYW5kbGVNYmVkdGxzUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgdW5zaWduZWQgY2hhciAqYUJ1Ziwgc2l6ZV90IGFMZW5ndGgpOworICAgIGludCBIYW5kbGVNYmVkdGxzUmVjZWl2ZSh1bnNpZ25lZCBjaGFyICphQnVmLCBzaXplX3QgYUxlbmd0aCk7CisKKyAgICBzdGF0aWMgaW50IEhhbmRsZU1iZWR0bHNUcmFuc21pdCh2b2lkICphQ29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqYUJ1Ziwgc2l6ZV90IGFMZW5ndGgpOworICAgIGludCBIYW5kbGVNYmVkdGxzVHJhbnNtaXQoY29uc3QgdW5zaWduZWQgY2hhciAqYUJ1Ziwgc2l6ZV90IGFMZW5ndGgpOworCisgICAgc3RhdGljIGludCBIYW5kbGVNYmVkdGxzRXhwb3J0S2V5cyh2b2lkICphQ29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqYU1hc3RlclNlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFLZXlCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhTWFjTGVuZ3RoLCBzaXplX3QgYUtleUxlbmd0aCwgc2l6ZV90IGFJdkxlbmd0aCk7CisgICAgaW50IEhhbmRsZU1iZWR0bHNFeHBvcnRLZXlzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFNYXN0ZXJTZWNyZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFLZXlCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFNYWNMZW5ndGgsIHNpemVfdCBhS2V5TGVuZ3RoLCBzaXplX3QgYUl2TGVuZ3RoKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlVGltZXIodm9pZCk7CisKKyAgICB2b2lkIENsb3NlKHZvaWQpOworICAgIHZvaWQgUHJvY2Vzcyh2b2lkKTsKKworICAgIHN0YXRpYyBEdGxzICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICB1aW50OF90IG1Qc2tba1Bza01heExlbmd0aF07CisgICAgdWludDhfdCBtUHNrTGVuZ3RoOworCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgbUVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IG1DdHJEcmJnOworICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgbVNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgbUNvbmY7CisgICAgbWJlZHRsc19zc2xfY29va2llX2N0eCBtQ29va2llQ3R4OworICAgIGJvb2wgbVN0YXJ0ZWQ7CisKKyAgICBUaW1lciBtVGltZXI7CisgICAgdWludDMyX3QgbVRpbWVySW50ZXJtZWRpYXRlOworICAgIGJvb2wgbVRpbWVyU2V0OworCisgICAgTWVzc2FnZSAqbVJlY2VpdmVNZXNzYWdlOworICAgIHVpbnQxNl90IG1SZWNlaXZlT2Zmc2V0OworICAgIHVpbnQxNl90IG1SZWNlaXZlTGVuZ3RoOworCisgICAgQ29ubmVjdGVkSGFuZGxlciBtQ29ubmVjdGVkSGFuZGxlcjsKKyAgICBSZWNlaXZlSGFuZGxlciBtUmVjZWl2ZUhhbmRsZXI7CisgICAgU2VuZEhhbmRsZXIgbVNlbmRIYW5kbGVyOworICAgIHZvaWQgKm1Db250ZXh0OworICAgIGJvb2wgbUNsaWVudDsKKworICAgIHVpbnQ4X3QgbU1lc3NhZ2VTdWJUeXBlOworfTsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIERUTFNfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9lbmVyZ3lfc2Nhbl9jbGllbnQuY3BwIGIvc3JjL2NvcmUvbWVzaGNvcC9lbmVyZ3lfc2Nhbl9jbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNmJjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2VuZXJneV9zY2FuX2NsaWVudC5jcHAKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIEVuZXJneSBTY2FuIENsaWVudC4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJlbmVyZ3lfc2Nhbl9jbGllbnQudG1oIgorI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJlbmVyZ3lfc2Nhbl9jbGllbnQuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcC5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworCitFbmVyZ3lTY2FuQ2xpZW50OjpFbmVyZ3lTY2FuQ2xpZW50KFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDoKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtRW5lcmd5U2NhbihPVF9VUklfUEFUSF9FTkVSR1lfUkVQT1JULCAmRW5lcmd5U2NhbkNsaWVudDo6SGFuZGxlUmVwb3J0LCB0aGlzKQoreworICAgIG1Db250ZXh0ID0gTlVMTDsKKyAgICBtQ2FsbGJhY2sgPSBOVUxMOworICAgIGFUaHJlYWROZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobUVuZXJneVNjYW4pOworfQorCitvdEVycm9yIEVuZXJneVNjYW5DbGllbnQ6OlNlbmRRdWVyeSh1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIHVpbnQ4X3QgYUNvdW50LCB1aW50MTZfdCBhUGVyaW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwgY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90Q29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0Q2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgTWVzaENvUDo6Q29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2IHNlc3Npb25JZDsKKyAgICBNZXNoQ29QOjpDaGFubmVsTWFzazBUbHYgY2hhbm5lbE1hc2s7CisgICAgTWVzaENvUDo6Q291bnRUbHYgY291bnQ7CisgICAgTWVzaENvUDo6UGVyaW9kVGx2IHBlcmlvZDsKKyAgICBNZXNoQ29QOjpTY2FuRHVyYXRpb25UbHYgc2NhbkR1cmF0aW9uOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuSXNBY3RpdmUoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGhlYWRlci5Jbml0KGFBZGRyZXNzLklzTXVsdGljYXN0KCkgPyBPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFIDogT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLAorICAgICAgICAgICAgICAgIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfRU5FUkdZX1NDQU4pOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBNZXNoQ29QOjpOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBzZXNzaW9uSWQuSW5pdCgpOworICAgIHNlc3Npb25JZC5TZXRDb21taXNzaW9uZXJTZXNzaW9uSWQobmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuR2V0U2Vzc2lvbklkKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCkpKTsKKworICAgIGNoYW5uZWxNYXNrLkluaXQoKTsKKyAgICBjaGFubmVsTWFzay5TZXRNYXNrKGFDaGFubmVsTWFzayk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzaykpKTsKKworICAgIGNvdW50LkluaXQoKTsKKyAgICBjb3VudC5TZXRDb3VudChhQ291bnQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmNvdW50LCBzaXplb2YoY291bnQpKSk7CisKKyAgICBwZXJpb2QuSW5pdCgpOworICAgIHBlcmlvZC5TZXRQZXJpb2QoYVBlcmlvZCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmcGVyaW9kLCBzaXplb2YocGVyaW9kKSkpOworCisgICAgc2NhbkR1cmF0aW9uLkluaXQoKTsKKyAgICBzY2FuRHVyYXRpb24uU2V0U2NhbkR1cmF0aW9uKGFTY2FuRHVyYXRpb24pOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNjYW5EdXJhdGlvbiwgc2l6ZW9mKHNjYW5EdXJhdGlvbikpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKGFBZGRyZXNzKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrQ29hcFVkcFBvcnQpOworICAgIG1lc3NhZ2VJbmZvLlNldEludGVyZmFjZUlkKG5ldGlmLkdldEludGVyZmFjZUlkKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJzZW50IGVuZXJneSBzY2FuIHF1ZXJ5Iik7CisKKyAgICBtQ2FsbGJhY2sgPSBhQ2FsbGJhY2s7CisgICAgbUNvbnRleHQgPSBhQ29udGV4dDsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgRW5lcmd5U2NhbkNsaWVudDo6SGFuZGxlUmVwb3J0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8RW5lcmd5U2NhbkNsaWVudCAqPihhQ29udGV4dCktPkhhbmRsZVJlcG9ydCgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBFbmVyZ3lTY2FuQ2xpZW50OjpIYW5kbGVSZXBvcnQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IGNoYW5uZWxNYXNrOworICAgIElwNjo6TWVzc2FnZUluZm8gcmVzcG9uc2VJbmZvKGFNZXNzYWdlSW5mbyk7CisKKyAgICBPVF9UT09MX1BBQ0tFRF9CRUdJTgorICAgIHN0cnVjdAorICAgIHsKKyAgICAgICAgTWVzaENvUDo6RW5lcmd5TGlzdFRsdiB0bHY7CisgICAgICAgIHVpbnQ4X3QgbGlzdFtPUEVOVEhSRUFEX0NPTkZJR19NQVhfRU5FUkdZX1JFU1VMVFNdOworICAgIH0gT1RfVE9PTF9QQUNLRURfRU5EIGVuZXJneUxpc3Q7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlY2VpdmVkIGVuZXJneSBzY2FuIHJlcG9ydCIpOworCisgICAgU3VjY2Vzc09yRXhpdChNZXNoQ29QOjpUbHY6OkdldFRsdihhTWVzc2FnZSwgTWVzaENvUDo6VGx2OjprQ2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzayksIGNoYW5uZWxNYXNrKSk7CisgICAgVmVyaWZ5T3JFeGl0KGNoYW5uZWxNYXNrLklzVmFsaWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KE1lc2hDb1A6OlRsdjo6R2V0VGx2KGFNZXNzYWdlLCBNZXNoQ29QOjpUbHY6OmtFbmVyZ3lMaXN0LCBzaXplb2YoZW5lcmd5TGlzdCksIGVuZXJneUxpc3QudGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KGVuZXJneUxpc3QudGx2LklzVmFsaWQoKSk7CisKKyAgICBpZiAobUNhbGxiYWNrICE9IE5VTEwpCisgICAgeworICAgICAgICBtQ2FsbGJhY2soY2hhbm5lbE1hc2suR2V0TWFzaygpLCBlbmVyZ3lMaXN0Lmxpc3QsIGVuZXJneUxpc3QudGx2LkdldExlbmd0aCgpLCBtQ29udGV4dCk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChuZXRpZi5HZXRDb2FwKCkuU2VuZEVtcHR5QWNrKGFIZWFkZXIsIHJlc3BvbnNlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBlbmVyZ3kgc2NhbiByZXBvcnQgcmVzcG9uc2UiKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZW5lcmd5X3NjYW5fY2xpZW50LmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvZW5lcmd5X3NjYW5fY2xpZW50LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWMyNDIwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9lbmVyZ3lfc2Nhbl9jbGllbnQuaHBwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciByZXNwb25kaW5nIHRvIFBBTklEIFF1ZXJ5IFJlcXVlc3RzLgorICovCisKKyNpZm5kZWYgRU5FUkdZX1NDQU5fQ0xJRU5UX0hQUF8KKyNkZWZpbmUgRU5FUkdZX1NDQU5fQ0xJRU5UX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29tbWlzc2lvbmVyLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBoYW5kbGluZyBQQU5JRCBRdWVyeSBSZXF1ZXN0cy4KKyAqCisgKi8KK2NsYXNzIEVuZXJneVNjYW5DbGllbnQ6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBFbmVyZ3lTY2FuQ2xpZW50KFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYW4gRW5lcmd5IFNjYW4gUXVlcnkgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsTWFzayAgIFRoZSBjaGFubmVsIG1hc2sgdmFsdWUuCisgICAgICogQHBhcmFtW2luXSAgYUNvdW50ICAgICAgICAgVGhlIG51bWJlciBvZiBlbmVyZ3kgbWVhc3VyZW1lbnRzIHBlciBjaGFubmVsLgorICAgICAqIEBwYXJhbVtpbl0gIGFQZXJpb2QgICAgICAgIFRoZSB0aW1lIGJldHdlZW4gZW5lcmd5IG1lYXN1cmVtZW50cyAobWlsbGlzZWNvbmRzKS4KKyAgICAgKiBAcGFyYW1baW5dICBhU2NhbkR1cmF0aW9uICBUaGUgc2NhbiBkdXJhdGlvbiBmb3IgZWFjaCBlbmVyZ3kgbWVhc3VyZW1lbnQgKG1pbGxpc2Vjb25kcykuCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICAgICAgQSBwb2ludGVyIHRvIHRoZSBJUHY2IGRlc3RpbmF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBvbiByZWNlaXZpbmcgYW4gRW5lcmd5IFJlcG9ydCBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIEVuZXJneSBTY2FuIFF1ZXJ5IG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyB0byBnZW5lcmF0ZSBhbiBFbmVyZ3kgU2NhbiBRdWVyeSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kUXVlcnkodWludDMyX3QgYUNoYW5uZWxNYXNrLCB1aW50OF90IGFDb3VudCwgdWludDE2X3QgYVBlcmlvZCwgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzLCBvdENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIEhhbmRsZVJlcG9ydCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlUmVwb3J0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBvdENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrIG1DYWxsYmFjazsKKyAgICB2b2lkICptQ29udGV4dDsKKworICAgIENvYXA6OlJlc291cmNlIG1FbmVyZ3lTY2FuOworfTsKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEVORVJHWV9TQ0FOX0NMSUVOVF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2pvaW5lci5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2pvaW5lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1MWFiMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyLmNwcApAQCAtMCwwICsxLDU0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgSm9pbmVyIHJvbGUuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiam9pbmVyLnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJqb2luZXIuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jcmMxNi5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3AuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDY0OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitKb2luZXI6OkpvaW5lcihUaHJlYWROZXRpZiAmYU5ldGlmKToKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYU5ldGlmKSwKKyAgICBtU3RhdGUoa1N0YXRlSWRsZSksCisgICAgbUNhbGxiYWNrKE5VTEwpLAorICAgIG1Db250ZXh0KE5VTEwpLAorICAgIG1DY2l0dCgwKSwKKyAgICBtQW5zaSgwKSwKKyAgICBtSm9pbmVyUm91dGVyQ2hhbm5lbCgwKSwKKyAgICBtSm9pbmVyUm91dGVyUGFuSWQoMCksCisgICAgbUpvaW5lclVkcFBvcnQoMCksCisgICAgbVZlbmRvck5hbWUoTlVMTCksCisgICAgbVZlbmRvck1vZGVsKE5VTEwpLAorICAgIG1WZW5kb3JTd1ZlcnNpb24oTlVMTCksCisgICAgbVZlbmRvckRhdGEoTlVMTCksCisgICAgbVRpbWVyKGFOZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZKb2luZXI6OkhhbmRsZVRpbWVyLCB0aGlzKSwKKyAgICBtSm9pbmVyRW50cnVzdChPVF9VUklfUEFUSF9KT0lORVJfRU5UUlVTVCwgJkpvaW5lcjo6SGFuZGxlSm9pbmVyRW50cnVzdCwgdGhpcykKK3sKKyAgICBhTmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1Kb2luZXJFbnRydXN0KTsKK30KKworb3RFcnJvciBKb2luZXI6OlN0YXJ0KGNvbnN0IGNoYXIgKmFQU0tkLCBjb25zdCBjaGFyICphUHJvdmlzaW9uaW5nVXJsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFWZW5kb3JOYW1lLCBjb25zdCBjaGFyICphVmVuZG9yTW9kZWwsIGNvbnN0IGNoYXIgKmFWZW5kb3JTd1ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVZlbmRvckRhdGEsIG90Sm9pbmVyQ2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgTWFjOjpFeHRBZGRyZXNzIGV4dEFkZHJlc3M7CisgICAgQ3JjMTYgY2NpdHQoQ3JjMTY6OmtDY2l0dCk7CisgICAgQ3JjMTYgYW5zaShDcmMxNjo6a0Fuc2kpOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIFZlcmlmeU9yRXhpdChtU3RhdGUgPT0ga1N0YXRlSWRsZSwgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworICAgIC8vIHVzZSBleHRlbmRlZCBhZGRyZXNzIGJhc2VkIG9uIGZhY3RvcnktYXNzaWduZWQgSUVFRSBFVUktNjQKKyAgICBuZXRpZi5HZXRNYWMoKS5HZXRIYXNoTWFjQWRkcmVzcygmZXh0QWRkcmVzcyk7CisgICAgbmV0aWYuR2V0TWFjKCkuU2V0RXh0QWRkcmVzcyhleHRBZGRyZXNzKTsKKyAgICBuZXRpZi5HZXRNbGUoKS5VcGRhdGVMaW5rTG9jYWxBZGRyZXNzKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihleHRBZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgY2NpdHQuVXBkYXRlKGV4dEFkZHJlc3MubThbaV0pOworICAgICAgICBhbnNpLlVwZGF0ZShleHRBZGRyZXNzLm04W2ldKTsKKyAgICB9CisKKyAgICBtQ2NpdHQgPSBjY2l0dC5HZXQoKTsKKyAgICBtQW5zaSA9IGFuc2kuR2V0KCk7CisKKyAgICBlcnJvciA9IG5ldGlmLkdldENvYXBTZWN1cmUoKS5TdGFydChPUEVOVEhSRUFEX0NPTkZJR19KT0lORVJfVURQX1BPUlQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworCisgICAgZXJyb3IgPSBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuR2V0RHRscygpLlNldFBzayhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oYVBTS2QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RybGVuKGFQU0tkKSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworCisgICAgZXJyb3IgPSBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuR2V0RHRscygpLm1Qcm92aXNpb25pbmdVcmwuU2V0UHJvdmlzaW9uaW5nVXJsKGFQcm92aXNpb25pbmdVcmwpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworCisgICAgbUpvaW5lclJvdXRlclBhbklkID0gTWFjOjprUGFuSWRCcm9hZGNhc3Q7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldE1sZSgpLkRpc2NvdmVyKDAsIG5ldGlmLkdldE1hYygpLkdldFBhbklkKCksIHRydWUsIGZhbHNlLCBIYW5kbGVEaXNjb3ZlclJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcykpOworCisgICAgbVZlbmRvck5hbWUgPSBhVmVuZG9yTmFtZTsKKyAgICBtVmVuZG9yTW9kZWwgPSBhVmVuZG9yTW9kZWw7CisgICAgbVZlbmRvclN3VmVyc2lvbiA9IGFWZW5kb3JTd1ZlcnNpb247CisgICAgbVZlbmRvckRhdGEgPSBhVmVuZG9yRGF0YTsKKyAgICBtQ2FsbGJhY2sgPSBhQ2FsbGJhY2s7CisgICAgbUNvbnRleHQgPSBhQ29udGV4dDsKKyAgICBtU3RhdGUgPSBrU3RhdGVEaXNjb3ZlcjsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSm9pbmVyOjpTdG9wKHZvaWQpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIENsb3NlKCk7CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgSm9pbmVyOjpDbG9zZSh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIG5ldGlmLkdldENvYXBTZWN1cmUoKS5EaXNjb25uZWN0KCk7CisgICAgbmV0aWYuR2V0SXA2RmlsdGVyKCkuUmVtb3ZlVW5zZWN1cmVQb3J0KG5ldGlmLkdldENvYXBTZWN1cmUoKS5HZXRQb3J0KCkpOworCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIEpvaW5lcjo6Q29tcGxldGUob3RFcnJvciBhRXJyb3IpCit7CisgICAgbVN0YXRlID0ga1N0YXRlSWRsZTsKKworICAgIEdldE5ldGlmKCkuR2V0Q29hcFNlY3VyZSgpLlN0b3AoKTsKKworICAgIGlmIChtQ2FsbGJhY2spCisgICAgeworICAgICAgICBvdEpvaW5lckNhbGxiYWNrIGNhbGxiYWNrID0gbUNhbGxiYWNrOworICAgICAgICBtQ2FsbGJhY2sgPSBOVUxMOworICAgICAgICBjYWxsYmFjayhhRXJyb3IsIG1Db250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgSm9pbmVyOjpIYW5kbGVEaXNjb3ZlclJlc3VsdChvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PEpvaW5lciAqPihhQ29udGV4dCktPkhhbmRsZURpc2NvdmVyUmVzdWx0KGFSZXN1bHQpOworfQorCit2b2lkIEpvaW5lcjo6SGFuZGxlRGlzY292ZXJSZXN1bHQob3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBpZiAoYVJlc3VsdCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgb3RMb2dGdW5jRW50cnlNc2coImFSZXN1bHQgPSAlbGxYIiwgSG9zdFN3YXA2NCgqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCAqPigmYVJlc3VsdC0+bUV4dEFkZHJlc3MpKSk7CisKKyAgICAgICAgLy8gSm9pbmluZyBpcyBkaXNhYmxlZCBpZiB0aGUgU3RlZXJpbmcgRGF0YSBpcyBub3QgaW5jbHVkZWQKKyAgICAgICAgaWYgKGFSZXN1bHQtPm1TdGVlcmluZ0RhdGEubUxlbmd0aCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ0RlYmdNZXNoQ29QKEdldEluc3RhbmNlKCksICJObyBzdGVlcmluZyBkYXRhLCBqb2luaW5nIGRpc2FibGVkIik7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICBTdGVlcmluZ0RhdGFUbHYgc3RlZXJpbmdEYXRhOworICAgICAgICBzdGVlcmluZ0RhdGEuU2V0TGVuZ3RoKGFSZXN1bHQtPm1TdGVlcmluZ0RhdGEubUxlbmd0aCk7CisgICAgICAgIG1lbWNweShzdGVlcmluZ0RhdGEuR2V0VmFsdWUoKSwgYVJlc3VsdC0+bVN0ZWVyaW5nRGF0YS5tOCwgc3RlZXJpbmdEYXRhLkdldExlbmd0aCgpKTsKKworICAgICAgICBpZiAoc3RlZXJpbmdEYXRhLkRvZXNBbGxvd0FueSgpIHx8CisgICAgICAgICAgICAoc3RlZXJpbmdEYXRhLkdldEJpdChtQ2NpdHQgJSBzdGVlcmluZ0RhdGEuR2V0TnVtQml0cygpKSAmJgorICAgICAgICAgICAgIHN0ZWVyaW5nRGF0YS5HZXRCaXQobUFuc2kgJSBzdGVlcmluZ0RhdGEuR2V0TnVtQml0cygpKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Kb2luZXJVZHBQb3J0ID0gYVJlc3VsdC0+bUpvaW5lclVkcFBvcnQ7CisgICAgICAgICAgICBtSm9pbmVyUm91dGVyUGFuSWQgPSBhUmVzdWx0LT5tUGFuSWQ7CisgICAgICAgICAgICBtSm9pbmVyUm91dGVyQ2hhbm5lbCA9IGFSZXN1bHQtPm1DaGFubmVsOworICAgICAgICAgICAgbWVtY3B5KCZtSm9pbmVyUm91dGVyLCAmYVJlc3VsdC0+bUV4dEFkZHJlc3MsIHNpemVvZihtSm9pbmVyUm91dGVyKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ0RlYmdNZXNoQ29QKEdldEluc3RhbmNlKCksICJTdGVlcmluZyBkYXRhIGRvZXMgbm90IGluY2x1ZGUgdGhpcyBkZXZpY2UiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChtSm9pbmVyUm91dGVyUGFuSWQgIT0gTWFjOjprUGFuSWRCcm9hZGNhc3QpCisgICAgeworICAgICAgICBvdExvZ0Z1bmNFbnRyeU1zZygiYVJlc3VsdCA9IE5VTEwiKTsKKworICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRQYW5JZChtSm9pbmVyUm91dGVyUGFuSWQpOworICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRDaGFubmVsKG1Kb2luZXJSb3V0ZXJDaGFubmVsKTsKKyAgICAgICAgbmV0aWYuR2V0SXA2RmlsdGVyKCkuQWRkVW5zZWN1cmVQb3J0KG5ldGlmLkdldENvYXBTZWN1cmUoKS5HZXRQb3J0KCkpOworCisgICAgICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmU4MCk7CisgICAgICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkuU2V0SWlkKG1Kb2luZXJSb3V0ZXIpOworICAgICAgICBtZXNzYWdlSW5mby5tUGVlclBvcnQgPSBtSm9pbmVyVWRwUG9ydDsKKyAgICAgICAgbWVzc2FnZUluZm8ubUludGVyZmFjZUlkID0gT1RfTkVUSUZfSU5URVJGQUNFX0lEX1RIUkVBRDsKKworICAgICAgICBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuQ29ubmVjdChtZXNzYWdlSW5mbywgSm9pbmVyOjpIYW5kbGVTZWN1cmVDb2FwQ2xpZW50Q29ubmVjdCwgdGhpcyk7CisgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUNvbm5lY3Q7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG90TG9nRGViZ01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIk5vIGpvaW5hYmxlIG5ldHdvcmsgZm91bmQiKTsKKyAgICAgICAgQ29tcGxldGUoT1RfRVJST1JfTk9UX0ZPVU5EKTsKKyAgICB9CisKK2V4aXQ6CisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIEpvaW5lcjo6SGFuZGxlU2VjdXJlQ29hcENsaWVudENvbm5lY3QoYm9vbCBhQ29ubmVjdGVkLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxKb2luZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVTZWN1cmVDb2FwQ2xpZW50Q29ubmVjdChhQ29ubmVjdGVkKTsKK30KKwordm9pZCBKb2luZXI6OkhhbmRsZVNlY3VyZUNvYXBDbGllbnRDb25uZWN0KGJvb2wgYUNvbm5lY3RlZCkKK3sKKyAgICBzd2l0Y2ggKG1TdGF0ZSkKKyAgICB7CisgICAgY2FzZSBrU3RhdGVDb25uZWN0OgorICAgICAgICBpZiAoYUNvbm5lY3RlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRlQ29ubmVjdGVkOworICAgICAgICAgICAgU2VuZEpvaW5lckZpbmFsaXplKCk7CisgICAgICAgICAgICBtVGltZXIuU3RhcnQoa1RpbWVvdXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQ29tcGxldGUoT1RfRVJST1JfU0VDVVJJVFkpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgSm9pbmVyOjpTZW5kSm9pbmVyRmluYWxpemUodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgICAgU3RhdGVUbHYgc3RhdGVUbHY7CisgICAgVmVuZG9yTmFtZVRsdiB2ZW5kb3JOYW1lVGx2OworICAgIFZlbmRvck1vZGVsVGx2IHZlbmRvck1vZGVsVGx2OworICAgIFZlbmRvclN3VmVyc2lvblRsdiB2ZW5kb3JTd1ZlcnNpb25UbHY7CisgICAgVmVuZG9yU3RhY2tWZXJzaW9uVGx2IHZlbmRvclN0YWNrVmVyc2lvblRsdjsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfSk9JTkVSX0ZJTkFMSVpFKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcFNlY3VyZSgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgc3RhdGVUbHYuSW5pdCgpOworICAgIHN0YXRlVGx2LlNldFN0YXRlKE1lc2hDb1A6OlN0YXRlVGx2OjprQWNjZXB0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzdGF0ZVRsdiwgc2l6ZW9mKHN0YXRlVGx2KSkpOworCisgICAgdmVuZG9yTmFtZVRsdi5Jbml0KCk7CisgICAgdmVuZG9yTmFtZVRsdi5TZXRWZW5kb3JOYW1lKG1WZW5kb3JOYW1lKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ2ZW5kb3JOYW1lVGx2LCB2ZW5kb3JOYW1lVGx2LkdldFNpemUoKSkpOworCisgICAgdmVuZG9yTW9kZWxUbHYuSW5pdCgpOworICAgIHZlbmRvck1vZGVsVGx2LlNldFZlbmRvck1vZGVsKG1WZW5kb3JNb2RlbCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmdmVuZG9yTW9kZWxUbHYsIHZlbmRvck1vZGVsVGx2LkdldFNpemUoKSkpOworCisgICAgdmVuZG9yU3dWZXJzaW9uVGx2LkluaXQoKTsKKyAgICB2ZW5kb3JTd1ZlcnNpb25UbHYuU2V0VmVuZG9yU3dWZXJzaW9uKG1WZW5kb3JTd1ZlcnNpb24pOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnZlbmRvclN3VmVyc2lvblRsdiwgdmVuZG9yU3dWZXJzaW9uVGx2LkdldFNpemUoKSkpOworCisgICAgdmVuZG9yU3RhY2tWZXJzaW9uVGx2LkluaXQoKTsKKyAgICB2ZW5kb3JTdGFja1ZlcnNpb25UbHYuU2V0T3VpKE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFTkRPUl9PVUkpOworICAgIHZlbmRvclN0YWNrVmVyc2lvblRsdi5TZXRNYWpvcihPUEVOVEhSRUFEX0NPTkZJR19TVEFDS19WRVJTSU9OX01BSk9SKTsKKyAgICB2ZW5kb3JTdGFja1ZlcnNpb25UbHYuU2V0TWlub3IoT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVSU0lPTl9NSU5PUik7CisgICAgdmVuZG9yU3RhY2tWZXJzaW9uVGx2LlNldFJldmlzaW9uKE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fUkVWKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ2ZW5kb3JTdGFja1ZlcnNpb25UbHYsIHZlbmRvclN0YWNrVmVyc2lvblRsdi5HZXRTaXplKCkpKTsKKworICAgIGlmIChtVmVuZG9yRGF0YSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgVmVuZG9yRGF0YVRsdiB2ZW5kb3JEYXRhVGx2OworICAgICAgICB2ZW5kb3JEYXRhVGx2LkluaXQoKTsKKyAgICAgICAgdmVuZG9yRGF0YVRsdi5TZXRWZW5kb3JEYXRhKG1WZW5kb3JEYXRhKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmdmVuZG9yRGF0YVRsdiwgdmVuZG9yRGF0YVRsdi5HZXRTaXplKCkpKTsKKyAgICB9CisKKyAgICBpZiAobmV0aWYuR2V0Q29hcFNlY3VyZSgpLkdldER0bHMoKS5tUHJvdmlzaW9uaW5nVXJsLkdldExlbmd0aCgpID4gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJm5ldGlmLkdldENvYXBTZWN1cmUoKS5HZXREdGxzKCkubVByb3Zpc2lvbmluZ1VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuR2V0RHRscygpLm1Qcm92aXNpb25pbmdVcmwuR2V0U2l6ZSgpKSk7CisgICAgfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0VSVF9MT0cKKyAgICB1aW50OF90IGJ1ZltPUEVOVEhSRUFEX0NPTkZJR19NRVNTQUdFX0JVRkZFUl9TSVpFXTsKKyAgICBWZXJpZnlPckV4aXQobWVzc2FnZS0+R2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKGJ1ZikpOworICAgIG1lc3NhZ2UtPlJlYWQoaGVhZGVyLkdldExlbmd0aCgpLCBtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIGhlYWRlci5HZXRMZW5ndGgoKSwgYnVmKTsKKyAgICBvdER1bXBDZXJ0TWVzaENvUChHZXRJbnN0YW5jZSgpLCAiW1RIQ0ldIGRpcmVjdGlvbj1zZW5kIHwgdHlwZT1KT0lOX0ZJTi5yZXEgfCIsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIGhlYWRlci5HZXRMZW5ndGgoKSk7CisjZW5kaWYKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIEpvaW5lcjo6SGFuZGxlSm9pbmVyRmluYWxpemVSZXNwb25zZSwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiU2VudCBqb2luZXIgZmluYWxpemUiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK3ZvaWQgSm9pbmVyOjpIYW5kbGVKb2luZXJGaW5hbGl6ZVJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxKb2luZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVKb2luZXJGaW5hbGl6ZVJlc3BvbnNlKAorICAgICAgICBzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksIHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbyksIGFSZXN1bHQpOworfQorCit2b2lkIEpvaW5lcjo6SGFuZGxlSm9pbmVyRmluYWxpemVSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgKHZvaWQpIGFNZXNzYWdlSW5mbzsKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IGtTdGF0ZUNvbm5lY3RlZCAmJgorICAgICAgICAgICAgICAgICBhUmVzdWx0ID09IE9UX0VSUk9SX05PTkUgJiYKKyAgICAgICAgICAgICAgICAgYUhlYWRlci0+R2V0VHlwZSgpID09IE9UX0NPQVBfVFlQRV9BQ0tOT1dMRURHTUVOVCAmJgorICAgICAgICAgICAgICAgICBhSGVhZGVyLT5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX0NIQU5HRUQpOworCisgICAgU3VjY2Vzc09yRXhpdChUbHY6OkdldFRsdigqYU1lc3NhZ2UsIFRsdjo6a1N0YXRlLCBzaXplb2Yoc3RhdGUpLCBzdGF0ZSkpOworICAgIFZlcmlmeU9yRXhpdChzdGF0ZS5Jc1ZhbGlkKCkpOworCisgICAgbVN0YXRlID0ga1N0YXRlRW50cnVzdDsKKyAgICBtVGltZXIuU3RhcnQoa1RpbWVvdXQpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAicmVjZWl2ZWQgam9pbmVyIGZpbmFsaXplIHJlc3BvbnNlICVkIiwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGUuR2V0U3RhdGUoKSkpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HCisgICAgdWludDhfdCBidWZbT1BFTlRIUkVBRF9DT05GSUdfTUVTU0FHRV9CVUZGRVJfU0laRV07CisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLT5HZXRMZW5ndGgoKSA8PSBzaXplb2YoYnVmKSk7CisgICAgYU1lc3NhZ2UtPlJlYWQoYUhlYWRlci0+R2V0TGVuZ3RoKCksIGFNZXNzYWdlLT5HZXRMZW5ndGgoKSAtIGFIZWFkZXItPkdldExlbmd0aCgpLCBidWYpOworICAgIG90RHVtcENlcnRNZXNoQ29QKEdldEluc3RhbmNlKCksICJbVEhDSV0gZGlyZWN0aW9uPXJlY3YgfCB0eXBlPUpPSU5fRklOLnJzcCB8IiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgIGFNZXNzYWdlLT5HZXRMZW5ndGgoKSAtIGFIZWFkZXItPkdldExlbmd0aCgpKTsKKyNlbmRpZgorCitleGl0OgorICAgIENsb3NlKCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIEpvaW5lcjo6SGFuZGxlSm9pbmVyRW50cnVzdCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PEpvaW5lciAqPihhQ29udGV4dCktPkhhbmRsZUpvaW5lckVudHJ1c3QoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgSm9pbmVyOjpIYW5kbGVKb2luZXJFbnRydXN0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgTmV0d29ya01hc3RlcktleVRsdiBtYXN0ZXJLZXk7CisgICAgTWVzaExvY2FsUHJlZml4VGx2IG1lc2hMb2NhbFByZWZpeDsKKyAgICBFeHRlbmRlZFBhbklkVGx2IGV4dGVuZGVkUGFuSWQ7CisgICAgTmV0d29ya05hbWVUbHYgbmV0d29ya05hbWU7CisgICAgQWN0aXZlVGltZXN0YW1wVGx2IGFjdGl2ZVRpbWVzdGFtcDsKKyAgICBOZXR3b3JrS2V5U2VxdWVuY2VUbHYgbmV0d29ya0tleVNlcTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IGtTdGF0ZUVudHJ1c3QgJiYKKyAgICAgICAgICAgICAgICAgYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NULCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgam9pbmVyIGVudHJ1c3QiKTsKKyAgICBvdExvZ0NlcnRNZXNoQ29QKEdldEluc3RhbmNlKCksICJbVEhDSV0gZGlyZWN0aW9uPXJlY3YgfCB0eXBlPUpPSU5fRU5ULm50ZiIpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtOZXR3b3JrTWFzdGVyS2V5LCBzaXplb2YobWFzdGVyS2V5KSwgbWFzdGVyS2V5KSk7CisgICAgVmVyaWZ5T3JFeGl0KG1hc3RlcktleS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtNZXNoTG9jYWxQcmVmaXgsIHNpemVvZihtZXNoTG9jYWxQcmVmaXgpLCBtZXNoTG9jYWxQcmVmaXgpKTsKKyAgICBWZXJpZnlPckV4aXQobWVzaExvY2FsUHJlZml4LklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0V4dGVuZGVkUGFuSWQsIHNpemVvZihleHRlbmRlZFBhbklkKSwgZXh0ZW5kZWRQYW5JZCkpOworICAgIFZlcmlmeU9yRXhpdChleHRlbmRlZFBhbklkLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a05ldHdvcmtOYW1lLCBzaXplb2YobmV0d29ya05hbWUpLCBuZXR3b3JrTmFtZSkpOworICAgIFZlcmlmeU9yRXhpdChuZXR3b3JrTmFtZS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtBY3RpdmVUaW1lc3RhbXAsIHNpemVvZihhY3RpdmVUaW1lc3RhbXApLCBhY3RpdmVUaW1lc3RhbXApKTsKKyAgICBWZXJpZnlPckV4aXQoYWN0aXZlVGltZXN0YW1wLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a05ldHdvcmtLZXlTZXF1ZW5jZSwgc2l6ZW9mKG5ldHdvcmtLZXlTZXEpLCBuZXR3b3JrS2V5U2VxKSk7CisgICAgVmVyaWZ5T3JFeGl0KG5ldHdvcmtLZXlTZXEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG5ldGlmLkdldEtleU1hbmFnZXIoKS5TZXRNYXN0ZXJLZXkobWFzdGVyS2V5LkdldE5ldHdvcmtNYXN0ZXJLZXkoKSk7CisgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldEN1cnJlbnRLZXlTZXF1ZW5jZShuZXR3b3JrS2V5U2VxLkdldE5ldHdvcmtLZXlTZXF1ZW5jZSgpKTsKKyAgICBuZXRpZi5HZXRNbGUoKS5TZXRNZXNoTG9jYWxQcmVmaXgobWVzaExvY2FsUHJlZml4LkdldE1lc2hMb2NhbFByZWZpeCgpKTsKKyAgICBuZXRpZi5HZXRNYWMoKS5TZXRFeHRlbmRlZFBhbklkKGV4dGVuZGVkUGFuSWQuR2V0RXh0ZW5kZWRQYW5JZCgpKTsKKyAgICBuZXRpZi5HZXRNYWMoKS5TZXROZXR3b3JrTmFtZShuZXR3b3JrTmFtZS5HZXROZXR3b3JrTmFtZSgpKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgImpvaW4gc3VjY2VzcyEiKTsKKworICAgIC8vIFNlbmQgZHVtbXkgcmVzcG9uc2UuCisgICAgU2VuZEpvaW5lckVudHJ1c3RSZXNwb25zZShhSGVhZGVyLCBhTWVzc2FnZUluZm8pOworCisgICAgLy8gRGVsYXkgZXh0ZW5kZWQgYWRkcmVzcyBjb25maWd1cmF0aW9uIHRvIGFsbG93IERUTFMgd3JhcCB1cC4KKyAgICBtVGltZXIuU3RhcnQoa0NvbmZpZ0V4dEFkZHJlc3NEZWxheSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nV2Fybk1lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIkVycm9yIHdoaWxlIHByb2Nlc3Npbmcgam9pbmVyIGVudHJ1c3Q6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvdFRocmVhZEVycm9yVG9TdHJpbmcoZXJyb3IpKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK3ZvaWQgSm9pbmVyOjpTZW5kSm9pbmVyRW50cnVzdFJlc3BvbnNlKGNvbnN0IENvYXA6OkhlYWRlciAmYVJlcXVlc3RIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhUmVxdWVzdEluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIENvYXA6OkhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIHJlc3BvbnNlSW5mbyhhUmVxdWVzdEluZm8pOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIHJlc3BvbnNlSGVhZGVyLlNldERlZmF1bHRSZXNwb25zZUhlYWRlcihhUmVxdWVzdEhlYWRlcik7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIHJlc3BvbnNlSGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBtZXNzYWdlLT5TZXRTdWJUeXBlKE1lc3NhZ2U6OmtTdWJUeXBlSm9pbmVyRW50cnVzdCk7CisKKyAgICBtZW1zZXQoJnJlc3BvbnNlSW5mby5tU29ja0FkZHIsIDAsIHNpemVvZihyZXNwb25zZUluZm8ubVNvY2tBZGRyKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgcmVzcG9uc2VJbmZvKSk7CisKKyAgICBtU3RhdGUgPSBrU3RhdGVKb2luZWQ7CisKKyAgICBvdExvZ0luZm9BcnAoR2V0SW5zdGFuY2UoKSwgIlNlbnQgSm9pbmVyIEVudHJ1c3QgcmVzcG9uc2UiKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIlNlbnQgam9pbmVyIGVudHJ1c3QgcmVzcG9uc2UgbGVuZ3RoID0gJWQiLCBtZXNzYWdlLT5HZXRMZW5ndGgoKSk7CisgICAgb3RMb2dDZXJ0TWVzaENvUChHZXRJbnN0YW5jZSgpLCAiW1RIQ0ldIGRpcmVjdGlvbj1zZW5kIHwgdHlwZT1KT0lOX0VOVC5yc3AiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK3ZvaWQgSm9pbmVyOjpIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKwordm9pZCBKb2luZXI6OkhhbmRsZVRpbWVyKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHN3aXRjaCAobVN0YXRlKQorICAgIHsKKyAgICBjYXNlIGtTdGF0ZUlkbGU6CisgICAgY2FzZSBrU3RhdGVEaXNjb3ZlcjoKKyAgICBjYXNlIGtTdGF0ZUNvbm5lY3Q6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrU3RhdGVDb25uZWN0ZWQ6CisgICAgY2FzZSBrU3RhdGVFbnRydXN0OgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1JFU1BPTlNFX1RJTUVPVVQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrU3RhdGVKb2luZWQ6CisgICAgICAgIE1hYzo6RXh0QWRkcmVzcyBleHRBZGRyZXNzOworCisgICAgICAgIG5ldGlmLkdldE1hYygpLkdlbmVyYXRlRXh0QWRkcmVzcygmZXh0QWRkcmVzcyk7CisgICAgICAgIG5ldGlmLkdldE1hYygpLlNldEV4dEFkZHJlc3MoZXh0QWRkcmVzcyk7CisgICAgICAgIG5ldGlmLkdldE1sZSgpLlVwZGF0ZUxpbmtMb2NhbEFkZHJlc3MoKTsKKworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIGJyZWFrOworCisgICAgfQorCisgICAgQ29tcGxldGUoZXJyb3IpOworfQorCitKb2luZXIgJkpvaW5lcjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgSm9pbmVyICZqb2luZXIgPSAqc3RhdGljX2Nhc3Q8Sm9pbmVyICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIEpvaW5lciAmam9pbmVyID0gb3RHZXRUaHJlYWROZXRpZigpLkdldEpvaW5lcigpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gam9pbmVyOworfQorCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyLmhwcCBiL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjcwNjQxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9qb2luZXIuaHBwCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgSm9pbmVyIHJvbGUuCisgKi8KKworI2lmbmRlZiBKT0lORVJfSFBQXworI2RlZmluZSBKT0lORVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9qb2luZXIuaD4KKworI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29hcC9jb2FwX3NlY3VyZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NyYzE2LmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvZHRscy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworY2xhc3MgSm9pbmVyOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgSm9pbmVyIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIEpvaW5lcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgSm9pbmVyIHNlcnZpY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUFNLZCAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFBTS2QuCisgICAgICogQHBhcmFtW2luXSAgYVByb3Zpc2lvbmluZ1VybCAgQSBwb2ludGVyIHRvIHRoZSBQcm92aXNpb25pbmcgVVJMIChtYXkgYmUgTlVMTCkuCisgICAgICogQHBhcmFtW2luXSAgYVZlbmRvck5hbWUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgTmFtZSAobXVzdCBiZSBzdGF0aWMpLgorICAgICAqIEBwYXJhbVtpbl0gIGFWZW5kb3JNb2RlbCAgICAgIEEgcG9pbnRlciB0byB0aGUgVmVuZG9yIE1vZGVsIChtdXN0IGJlIHN0YXRpYykuCisgICAgICogQHBhcmFtW2luXSAgYVZlbmRvclN3VmVyc2lvbiAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgU1cgVmVyc2lvbiAobXVzdCBiZSBzdGF0aWMpLgorICAgICAqIEBwYXJhbVtpbl0gIGFWZW5kb3JEYXRhICAgICAgIEEgcG9pbnRlciB0byB0aGUgVmVuZG9yIERhdGEgKG11c3QgYmUgc3RhdGljKS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBqb2luIG9wZXJhdGlvbiBjb21wbGV0ZXMuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBKb2luZXIgc2VydmljZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RhcnQoY29uc3QgY2hhciAqYVBTS2QsIGNvbnN0IGNoYXIgKmFQcm92aXNpb25pbmdVcmwsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphVmVuZG9yTmFtZSwgY29uc3QgY2hhciAqYVZlbmRvck1vZGVsLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVZlbmRvclN3VmVyc2lvbiwgY29uc3QgY2hhciAqYVZlbmRvckRhdGEsCisgICAgICAgICAgICAgICAgICBvdEpvaW5lckNhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RvcHMgdGhlIEpvaW5lciBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgSm9pbmVyIHNlcnZpY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0b3Aodm9pZCk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0NvbmZpZ0V4dEFkZHJlc3NEZWxheSA9IDEwMCwgIC8vLzwgbWlsbGlzZWNvbmRzCisgICAgICAgIGtUaW1lb3V0ICAgICAgICAgICAgICAgPSA0MDAwLCAvLy88IG1pbGxpc2Vjb25kcworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVEaXNjb3ZlclJlc3VsdChvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIEhhbmRsZURpc2NvdmVyUmVzdWx0KG90QWN0aXZlU2NhblJlc3VsdCAqYVJlc3VsdCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisgICAgdm9pZCBDbG9zZSh2b2lkKTsKKyAgICB2b2lkIENvbXBsZXRlKG90RXJyb3IgYUVycm9yKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVNlY3VyZUNvYXBDbGllbnRDb25uZWN0KGJvb2wgYUNvbm5lY3RlZCwgdm9pZCAqYUNvbnRleHQpOworICAgIHZvaWQgSGFuZGxlU2VjdXJlQ29hcENsaWVudENvbm5lY3QoYm9vbCBhQ29ubmVjdGVkKTsKKworICAgIHZvaWQgU2VuZEpvaW5lckZpbmFsaXplKHZvaWQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUpvaW5lckZpbmFsaXplUmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKyAgICB2b2lkIEhhbmRsZUpvaW5lckZpbmFsaXplUmVzcG9uc2UoQ29hcDo6SGVhZGVyICphSGVhZGVyLCBNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlSm9pbmVyRW50cnVzdCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUpvaW5lckVudHJ1c3QoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIFNlbmRKb2luZXJFbnRydXN0UmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYVJlcXVlc3RJbmZvKTsKKworICAgIHN0YXRpYyBKb2luZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIGtTdGF0ZUlkbGUgICAgICA9IDAsCisgICAgICAgIGtTdGF0ZURpc2NvdmVyICA9IDEsCisgICAgICAgIGtTdGF0ZUNvbm5lY3QgICA9IDIsCisgICAgICAgIGtTdGF0ZUNvbm5lY3RlZCA9IDMsCisgICAgICAgIGtTdGF0ZUVudHJ1c3QgICA9IDQsCisgICAgICAgIGtTdGF0ZUpvaW5lZCAgICA9IDUsCisgICAgfTsKKyAgICBTdGF0ZSBtU3RhdGU7CisKKyAgICBvdEpvaW5lckNhbGxiYWNrIG1DYWxsYmFjazsKKyAgICB2b2lkICptQ29udGV4dDsKKworICAgIHVpbnQxNl90IG1DY2l0dDsKKyAgICB1aW50MTZfdCBtQW5zaTsKKworICAgIHVpbnQ4X3QgbUpvaW5lclJvdXRlckNoYW5uZWw7CisgICAgdWludDE2X3QgbUpvaW5lclJvdXRlclBhbklkOworICAgIHVpbnQxNl90IG1Kb2luZXJVZHBQb3J0OworICAgIE1hYzo6RXh0QWRkcmVzcyBtSm9pbmVyUm91dGVyOworCisgICAgY29uc3QgY2hhciAqbVZlbmRvck5hbWU7CisgICAgY29uc3QgY2hhciAqbVZlbmRvck1vZGVsOworICAgIGNvbnN0IGNoYXIgKm1WZW5kb3JTd1ZlcnNpb247CisgICAgY29uc3QgY2hhciAqbVZlbmRvckRhdGE7CisKKyAgICBUaW1lciBtVGltZXI7CisgICAgQ29hcDo6UmVzb3VyY2UgbUpvaW5lckVudHJ1c3Q7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gSk9JTkVSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyX3JvdXRlci5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2pvaW5lcl9yb3V0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzkwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2pvaW5lcl9yb3V0ZXIuY3BwCkBAIC0wLDAgKzEsNTQ5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBKb2luZXIgUm91dGVyIHJvbGUuCisgKi8KKworI2lmIE9QRU5USFJFQURfRlRECisKKyNkZWZpbmUgV1BQX05BTUUgImpvaW5lcl9yb3V0ZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImpvaW5lcl9yb3V0ZXIuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3BfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZS5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDY0OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitKb2luZXJSb3V0ZXI6OkpvaW5lclJvdXRlcihUaHJlYWROZXRpZiAmYU5ldGlmKToKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYU5ldGlmKSwKKyAgICBtU29ja2V0KGFOZXRpZi5HZXRJcDYoKS5tVWRwKSwKKyAgICBtUmVsYXlUcmFuc21pdChPVF9VUklfUEFUSF9SRUxBWV9UWCwgJkpvaW5lclJvdXRlcjo6SGFuZGxlUmVsYXlUcmFuc21pdCwgdGhpcyksCisgICAgbVRpbWVyKGFOZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZKb2luZXJSb3V0ZXI6OkhhbmRsZVRpbWVyLCB0aGlzKSwKKyAgICBtSm9pbmVyVWRwUG9ydCgwKSwKKyAgICBtSXNKb2luZXJQb3J0Q29uZmlndXJlZChmYWxzZSksCisgICAgbUV4cGVjdEpvaW5FbnRSc3AoZmFsc2UpCit7CisgICAgbVNvY2tldC5HZXRTb2NrTmFtZSgpLm1Qb3J0ID0gT1BFTlRIUkVBRF9DT05GSUdfSk9JTkVSX1VEUF9QT1JUOworICAgIGFOZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobVJlbGF5VHJhbnNtaXQpOworICAgIG1OZXRpZkNhbGxiYWNrLlNldChIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCwgdGhpcyk7CisgICAgYU5ldGlmLlJlZ2lzdGVyQ2FsbGJhY2sobU5ldGlmQ2FsbGJhY2spOworfQorCit2b2lkIEpvaW5lclJvdXRlcjo6SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxKb2luZXJSb3V0ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZChhRmxhZ3MpOworfQorCit2b2lkIEpvaW5lclJvdXRlcjo6SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0TWxlKCkuR2V0RGV2aWNlTW9kZSgpICYgTWxlOjpNb2RlVGx2OjprTW9kZUZGRCk7CisgICAgVmVyaWZ5T3JFeGl0KGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEpOworCisgICAgbmV0aWYuR2V0SXA2RmlsdGVyKCkuUmVtb3ZlVW5zZWN1cmVQb3J0KG1Tb2NrZXQuR2V0U29ja05hbWUoKS5tUG9ydCk7CisKKyAgICBpZiAobmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5Jc0pvaW5pbmdFbmFibGVkKCkpCisgICAgeworICAgICAgICBJcDY6OlNvY2tBZGRyIHNvY2thZGRyOworCisgICAgICAgIHNvY2thZGRyLm1Qb3J0ID0gR2V0Sm9pbmVyVWRwUG9ydCgpOworCisgICAgICAgIG1Tb2NrZXQuT3BlbigmSm9pbmVyUm91dGVyOjpIYW5kbGVVZHBSZWNlaXZlLCB0aGlzKTsKKyAgICAgICAgbVNvY2tldC5CaW5kKHNvY2thZGRyKTsKKyAgICAgICAgbmV0aWYuR2V0SXA2RmlsdGVyKCkuQWRkVW5zZWN1cmVQb3J0KHNvY2thZGRyLm1Qb3J0KTsKKyAgICAgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiSm9pbmVyIFJvdXRlcjogc3RhcnQiKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVNvY2tldC5DbG9zZSgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3IgSm9pbmVyUm91dGVyOjpHZXRCb3JkZXJBZ2VudFJsb2ModWludDE2X3QgJmFSbG9jKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEJvcmRlckFnZW50TG9jYXRvclRsdiAqYm9yZGVyQWdlbnRMb2NhdG9yOworCisgICAgYm9yZGVyQWdlbnRMb2NhdG9yID0gc3RhdGljX2Nhc3Q8Qm9yZGVyQWdlbnRMb2NhdG9yVGx2ICo+KEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRDb21taXNzaW9uaW5nRGF0YVN1YlRsdigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRsdjo6a0JvcmRlckFnZW50TG9jYXRvcikpOworICAgIFZlcmlmeU9yRXhpdChib3JkZXJBZ2VudExvY2F0b3IgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgYVJsb2MgPSBib3JkZXJBZ2VudExvY2F0b3ItPkdldEJvcmRlckFnZW50TG9jYXRvcigpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDE2X3QgSm9pbmVyUm91dGVyOjpHZXRKb2luZXJVZHBQb3J0KHZvaWQpCit7CisgICAgdWludDE2X3QgcnZhbCA9IE9QRU5USFJFQURfQ09ORklHX0pPSU5FUl9VRFBfUE9SVDsKKyAgICBKb2luZXJVZHBQb3J0VGx2ICpqb2luZXJVZHBQb3J0OworCisgICAgVmVyaWZ5T3JFeGl0KCFtSXNKb2luZXJQb3J0Q29uZmlndXJlZCwgcnZhbCA9IG1Kb2luZXJVZHBQb3J0KTsKKworICAgIGpvaW5lclVkcFBvcnQgPSBzdGF0aWNfY2FzdDxKb2luZXJVZHBQb3J0VGx2ICo+KEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRDb21taXNzaW9uaW5nRGF0YVN1YlRsdigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGx2OjprSm9pbmVyVWRwUG9ydCkpOworICAgIFZlcmlmeU9yRXhpdChqb2luZXJVZHBQb3J0ICE9IE5VTEwpOworCisgICAgcnZhbCA9IGpvaW5lclVkcFBvcnQtPkdldFVkcFBvcnQoKTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBKb2luZXJSb3V0ZXI6OlNldEpvaW5lclVkcFBvcnQodWludDE2X3QgYUpvaW5lclVkcFBvcnQpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBtSm9pbmVyVWRwUG9ydCA9IGFKb2luZXJVZHBQb3J0OworICAgIG1Jc0pvaW5lclBvcnRDb25maWd1cmVkID0gdHJ1ZTsKKyAgICBIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZChPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgSm9pbmVyUm91dGVyOjpIYW5kbGVVZHBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Sm9pbmVyUm91dGVyICo+KGFDb250ZXh0KS0+SGFuZGxlVWRwUmVjZWl2ZSgqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBKb2luZXJSb3V0ZXI6OkhhbmRsZVVkcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIEpvaW5lclVkcFBvcnRUbHYgdWRwUG9ydDsKKyAgICBKb2luZXJJaWRUbHYgaWlkOworICAgIEpvaW5lclJvdXRlckxvY2F0b3JUbHYgcmxvYzsKKyAgICBFeHRlbmRlZFRsdiB0bHY7CisgICAgdWludDE2X3QgYm9yZGVyQWdlbnRSbG9jOworCisgICAgb3RMb2dGdW5jRW50cnlNc2coImZyb20gcGVlcjogJWxsWCIsCisgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXA2NCgqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50NjRfdCAqPihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm04ICsgOCkpKTsKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJKb2luZXJSb3V0ZXI6OkhhbmRsZVVkcFJlY2VpdmUiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBHZXRCb3JkZXJBZ2VudFJsb2MoYm9yZGVyQWdlbnRSbG9jKSk7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX1JFTEFZX1JYKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgdWRwUG9ydC5Jbml0KCk7CisgICAgdWRwUG9ydC5TZXRVZHBQb3J0KGFNZXNzYWdlSW5mby5HZXRQZWVyUG9ydCgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ1ZHBQb3J0LCBzaXplb2YodWRwUG9ydCkpKTsKKworICAgIGlpZC5Jbml0KCk7CisgICAgaWlkLlNldElpZChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm04ICsgOCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmaWlkLCBzaXplb2YoaWlkKSkpOworCisgICAgcmxvYy5Jbml0KCk7CisgICAgcmxvYy5TZXRKb2luZXJSb3V0ZXJMb2NhdG9yKG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZybG9jLCBzaXplb2YocmxvYykpKTsKKworICAgIHRsdi5TZXRUeXBlKFRsdjo6a0pvaW5lckR0bHNFbmNhcHN1bGF0aW9uKTsKKyAgICB0bHYuU2V0TGVuZ3RoKGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKworICAgIHdoaWxlIChhTWVzc2FnZS5HZXRPZmZzZXQoKSA8IGFNZXNzYWdlLkdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgdWludDE2X3QgbGVuZ3RoID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKyAgICAgICAgdWludDhfdCB0bXBbMTZdOworCisgICAgICAgIGlmIChsZW5ndGggPj0gc2l6ZW9mKHRtcCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IHNpemVvZih0bXApOworICAgICAgICB9CisKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgbGVuZ3RoLCB0bXApOworICAgICAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KGxlbmd0aCk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCh0bXAsIGxlbmd0aCkpOworICAgIH0KKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KGJvcmRlckFnZW50UmxvYyk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJTZW50IHJlbGF5IHJ4Iik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdEVycihlcnJvcik7Cit9CisKK3ZvaWQgSm9pbmVyUm91dGVyOjpIYW5kbGVSZWxheVRyYW5zbWl0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Sm9pbmVyUm91dGVyICo+KGFDb250ZXh0KS0+SGFuZGxlUmVsYXlUcmFuc21pdCgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBKb2luZXJSb3V0ZXI6OkhhbmRsZVJlbGF5VHJhbnNtaXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgSm9pbmVyVWRwUG9ydFRsdiBqb2luZXJQb3J0OworICAgIEpvaW5lcklpZFRsdiBqb2luZXJJaWQ7CisgICAgSm9pbmVyUm91dGVyS2VrVGx2IGtlazsKKyAgICB1aW50MTZfdCBvZmZzZXQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLkdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NULCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgcmVsYXkgdHJhbnNtaXQiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprSm9pbmVyVWRwUG9ydCwgc2l6ZW9mKGpvaW5lclBvcnQpLCBqb2luZXJQb3J0KSk7CisgICAgVmVyaWZ5T3JFeGl0KGpvaW5lclBvcnQuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprSm9pbmVySWlkLCBzaXplb2Yoam9pbmVySWlkKSwgam9pbmVySWlkKSk7CisgICAgVmVyaWZ5T3JFeGl0KGpvaW5lcklpZC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VmFsdWVPZmZzZXQoYU1lc3NhZ2UsIFRsdjo6a0pvaW5lckR0bHNFbmNhcHN1bGF0aW9uLCBvZmZzZXQsIGxlbmd0aCkpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbVNvY2tldC5OZXdNZXNzYWdlKDApKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIG1lc3NhZ2UtPlNldFByaW9yaXR5KGtNZXNoQ29QTWVzc2FnZVByaW9yaXR5KTsKKyAgICBtZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKGZhbHNlKTsKKworICAgIHdoaWxlIChsZW5ndGgpCisgICAgeworICAgICAgICB1aW50MTZfdCBjb3B5TGVuZ3RoID0gbGVuZ3RoOworICAgICAgICB1aW50OF90IHRtcFsxNl07CisKKyAgICAgICAgaWYgKGNvcHlMZW5ndGggPj0gc2l6ZW9mKHRtcCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvcHlMZW5ndGggPSBzaXplb2YodG1wKTsKKyAgICAgICAgfQorCisgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBjb3B5TGVuZ3RoLCB0bXApOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKHRtcCwgY29weUxlbmd0aCkpOworCisgICAgICAgIG9mZnNldCArPSBjb3B5TGVuZ3RoOworICAgICAgICBsZW5ndGggLT0gY29weUxlbmd0aDsKKyAgICB9CisKKyAgICBhTWVzc2FnZS5Db3B5VG8ob2Zmc2V0LCAwLCBsZW5ndGgsICptZXNzYWdlKTsKKworICAgIG1lc3NhZ2VJbmZvLm1QZWVyQWRkci5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZTgwKTsKKyAgICBtZW1jcHkobWVzc2FnZUluZm8ubVBlZXJBZGRyLm1GaWVsZHMubTggKyA4LCBqb2luZXJJaWQuR2V0SWlkKCksIDgpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGpvaW5lclBvcnQuR2V0VWRwUG9ydCgpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChHZXROZXRpZigpLkdldEludGVyZmFjZUlkKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1Tb2NrZXQuU2VuZFRvKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtKb2luZXJSb3V0ZXJLZWssIHNpemVvZihrZWspLCBrZWspID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBrZWsiKTsKKworICAgICAgICBEZWxheVNlbmRpbmdKb2luZXJFbnRydXN0KG1lc3NhZ2VJbmZvLCBrZWspOworICAgIH0KKworZXhpdDoKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2VJbmZvKTsKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKK30KKworCitvdEVycm9yIEpvaW5lclJvdXRlcjo6RGVsYXlTZW5kaW5nSm9pbmVyRW50cnVzdChjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKb2luZXJSb3V0ZXJLZWtUbHYgJmFLZWspCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKworICAgIE5ldHdvcmtNYXN0ZXJLZXlUbHYgbWFzdGVyS2V5OworICAgIE1lc2hMb2NhbFByZWZpeFRsdiBtZXNoTG9jYWxQcmVmaXg7CisgICAgRXh0ZW5kZWRQYW5JZFRsdiBleHRlbmRlZFBhbklkOworICAgIE5ldHdvcmtOYW1lVGx2IG5ldHdvcmtOYW1lOworICAgIE5ldHdvcmtLZXlTZXF1ZW5jZVRsdiBuZXR3b3JrS2V5U2VxdWVuY2U7CisgICAgY29uc3QgVGx2ICp0bHY7CisKKyAgICBEZWxheWVkSm9pbkVudEhlYWRlciBkZWxheWVkTWVzc2FnZTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfSk9JTkVSX0VOVFJVU1QpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgbWVzc2FnZS0+U2V0U3ViVHlwZShNZXNzYWdlOjprU3ViVHlwZUpvaW5lckVudHJ1c3QpOworCisgICAgbWFzdGVyS2V5LkluaXQoKTsKKyAgICBtYXN0ZXJLZXkuU2V0TmV0d29ya01hc3RlcktleShuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0TWFzdGVyS2V5KCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJm1hc3RlcktleSwgc2l6ZW9mKG1hc3RlcktleSkpKTsKKworICAgIG1lc2hMb2NhbFByZWZpeC5Jbml0KCk7CisgICAgbWVzaExvY2FsUHJlZml4LlNldE1lc2hMb2NhbFByZWZpeChuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWxQcmVmaXgoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbWVzaExvY2FsUHJlZml4LCBzaXplb2YobWVzaExvY2FsUHJlZml4KSkpOworCisgICAgZXh0ZW5kZWRQYW5JZC5Jbml0KCk7CisgICAgZXh0ZW5kZWRQYW5JZC5TZXRFeHRlbmRlZFBhbklkKG5ldGlmLkdldE1hYygpLkdldEV4dGVuZGVkUGFuSWQoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmZXh0ZW5kZWRQYW5JZCwgc2l6ZW9mKGV4dGVuZGVkUGFuSWQpKSk7CisKKyAgICBuZXR3b3JrTmFtZS5Jbml0KCk7CisgICAgbmV0d29ya05hbWUuU2V0TmV0d29ya05hbWUobmV0aWYuR2V0TWFjKCkuR2V0TmV0d29ya05hbWUoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbmV0d29ya05hbWUsIHNpemVvZihUbHYpICsgbmV0d29ya05hbWUuR2V0TGVuZ3RoKCkpKTsKKworICAgIGlmICgodGx2ID0gbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldFRsdihUbHY6OmtBY3RpdmVUaW1lc3RhbXApKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCh0bHYsIHNpemVvZihUbHYpICsgdGx2LT5HZXRMZW5ndGgoKSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBBY3RpdmVUaW1lc3RhbXBUbHYgYWN0aXZlVGltZXN0YW1wOworICAgICAgICBhY3RpdmVUaW1lc3RhbXAuSW5pdCgpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZhY3RpdmVUaW1lc3RhbXAsIHNpemVvZihhY3RpdmVUaW1lc3RhbXApKSk7CisgICAgfQorCisgICAgaWYgKCh0bHYgPSBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuR2V0VGx2KFRsdjo6a0NoYW5uZWxNYXNrKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQodGx2LCBzaXplb2YoVGx2KSArIHRsdi0+R2V0TGVuZ3RoKCkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQ2hhbm5lbE1hc2tUbHYgY2hhbm5lbE1hc2s7CisgICAgICAgIGNoYW5uZWxNYXNrLkluaXQoKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzaykpKTsKKyAgICB9CisKKyAgICBpZiAoKHRsdiA9IG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5HZXRUbHYoVGx2OjprUFNLYykpICE9IE5VTEwpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKHRsdiwgc2l6ZW9mKFRsdikgKyB0bHYtPkdldExlbmd0aCgpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFBTS2NUbHYgcHNrYzsKKyAgICAgICAgcHNrYy5Jbml0KCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnBza2MsIHNpemVvZihwc2tjKSkpOworICAgIH0KKworICAgIGlmICgodGx2ID0gbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldFRsdihUbHY6OmtTZWN1cml0eVBvbGljeSkpICE9IE5VTEwpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKHRsdiwgc2l6ZW9mKFRsdikgKyB0bHYtPkdldExlbmd0aCgpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFNlY3VyaXR5UG9saWN5VGx2IHNlY3VyaXR5UG9saWN5OworICAgICAgICBzZWN1cml0eVBvbGljeS5Jbml0KCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlY3VyaXR5UG9saWN5LCBzaXplb2Yoc2VjdXJpdHlQb2xpY3kpKSk7CisgICAgfQorCisgICAgbmV0d29ya0tleVNlcXVlbmNlLkluaXQoKTsKKyAgICBuZXR3b3JrS2V5U2VxdWVuY2UuU2V0TmV0d29ya0tleVNlcXVlbmNlKG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRDdXJyZW50S2V5U2VxdWVuY2UoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbmV0d29ya0tleVNlcXVlbmNlLCBuZXR3b3JrS2V5U2VxdWVuY2UuR2V0U2l6ZSgpKSk7CisKKyAgICBtZXNzYWdlSW5mbyA9IGFNZXNzYWdlSW5mbzsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrQ29hcFVkcFBvcnQpOworCisgICAgZGVsYXllZE1lc3NhZ2UgPSBEZWxheWVkSm9pbkVudEhlYWRlcihUaW1lcjo6R2V0Tm93KCkgKyBrRGVsYXlKb2luRW50LCBtZXNzYWdlSW5mbywgYUtlay5HZXRLZWsoKSk7CisgICAgU3VjY2Vzc09yRXhpdChkZWxheWVkTWVzc2FnZS5BcHBlbmRUbygqbWVzc2FnZSkpOworICAgIG1EZWxheWVkSm9pbkVudHMuRW5xdWV1ZSgqbWVzc2FnZSk7CisKKyAgICBpZiAoIW1UaW1lci5Jc1J1bm5pbmcoKSkKKyAgICB7CisgICAgICAgIG1UaW1lci5TdGFydChrRGVsYXlKb2luRW50KTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdEVycihlcnJvcik7CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIEpvaW5lclJvdXRlcjo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgSm9pbmVyUm91dGVyOjpIYW5kbGVUaW1lcih2b2lkKQoreworICAgIFNlbmREZWxheWVkSm9pbmVyRW50cnVzdCgpOworfQorCit2b2lkIEpvaW5lclJvdXRlcjo6U2VuZERlbGF5ZWRKb2luZXJFbnRydXN0KHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBEZWxheWVkSm9pbkVudEhlYWRlciBkZWxheWVkSm9pbkVudDsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gbURlbGF5ZWRKb2luRW50cy5HZXRIZWFkKCk7CisgICAgdWludDMyX3Qgbm93ID0gVGltZXI6OkdldE5vdygpOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICBWZXJpZnlPckV4aXQobWVzc2FnZSAhPSBOVUxMKTsKKyAgICBWZXJpZnlPckV4aXQoIW1UaW1lci5Jc1J1bm5pbmcoKSk7CisKKyAgICBkZWxheWVkSm9pbkVudC5SZWFkRnJvbSgqbWVzc2FnZSk7CisKKyAgICAvLyBUaGUgbWVzc2FnZSBjYW4gYmUgc2VudCBkdXJpbmcgQ29BUCB0cmFuc2FjdGlvbiBpZiBLRUsgZGlkIG5vdCBjaGFuZ2UgKGkuZS4gcmV0cmFuc21pc3Npb24pLgorICAgIFZlcmlmeU9yRXhpdCghbUV4cGVjdEpvaW5FbnRSc3AgfHwKKyAgICAgICAgICAgICAgICAgbWVtY21wKG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRLZWsoKSwgZGVsYXllZEpvaW5FbnQuR2V0S2VrKCksIEtleU1hbmFnZXI6OmtNYXhLZXlMZW5ndGgpID09IDApOworCisKKyAgICBpZiAoZGVsYXllZEpvaW5FbnQuSXNMYXRlcihub3cpKQorICAgIHsKKyAgICAgICAgbVRpbWVyLlN0YXJ0KGRlbGF5ZWRKb2luRW50LkdldFNlbmRUaW1lKCkgLSBub3cpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVsYXllZEpvaW5FbnRzLkRlcXVldWUoKm1lc3NhZ2UpOworCisgICAgICAgIC8vIFJlbW92ZSB0aGUgRGVsYXllZEpvaW5FbnRIZWFkZXIgZnJvbSB0aGUgbWVzc2FnZS4KKyAgICAgICAgRGVsYXllZEpvaW5FbnRIZWFkZXI6OlJlbW92ZUZyb20oKm1lc3NhZ2UpOworCisgICAgICAgIC8vIFNldCBLRUsgdG8gb25lIHVzZWQgZm9yIHRoaXMgbWVzc2FnZS4KKyAgICAgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldEtlayhkZWxheWVkSm9pbkVudC5HZXRLZWsoKSk7CisKKyAgICAgICAgLy8gU2VuZCB0aGUgbWVzc2FnZS4KKyAgICAgICAgbWVtY3B5KCZtZXNzYWdlSW5mbywgZGVsYXllZEpvaW5FbnQuR2V0TWVzc2FnZUluZm8oKSwgc2l6ZW9mKG1lc3NhZ2VJbmZvKSk7CisKKyAgICAgICAgaWYgKFNlbmRKb2luZXJFbnRydXN0KCptZXNzYWdlLCBtZXNzYWdlSW5mbykgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgICAgICAgICAgbVRpbWVyLlN0YXJ0KDApOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiA7Cit9CisKK290RXJyb3IgSm9pbmVyUm91dGVyOjpTZW5kSm9pbmVyRW50cnVzdChNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIG5ldGlmLkdldENvYXAoKS5BYm9ydFRyYW5zYWN0aW9uKCZKb2luZXJSb3V0ZXI6OkhhbmRsZUpvaW5lckVudHJ1c3RSZXNwb25zZSwgdGhpcyk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJTZW5kaW5nIEpPSU5fRU5ULm50ZiIpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZKb2luZXJSb3V0ZXI6OkhhbmRsZUpvaW5lckVudHJ1c3RSZXNwb25zZSwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiU2VudCBqb2luZXIgZW50cnVzdCBsZW5ndGggPSAlZCIsIGFNZXNzYWdlLkdldExlbmd0aCgpKTsKKyAgICBvdExvZ0NlcnRNZXNoQ29QKEdldEluc3RhbmNlKCksICJbVEhDSV0gZGlyZWN0aW9uPXNlbmQgfCB0eXBlPUpPSU5fRU5ULm50ZiIpOworCisgICAgbUV4cGVjdEpvaW5FbnRSc3AgPSB0cnVlOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBKb2luZXJSb3V0ZXI6OkhhbmRsZUpvaW5lckVudHJ1c3RSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxKb2luZXJSb3V0ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVKb2luZXJFbnRydXN0UmVzcG9uc2Uoc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKK30KKwordm9pZCBKb2luZXJSb3V0ZXI6OkhhbmRsZUpvaW5lckVudHJ1c3RSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2VJbmZvKTsKKworICAgIG1FeHBlY3RKb2luRW50UnNwID0gZmFsc2U7CisgICAgU2VuZERlbGF5ZWRKb2luZXJFbnRydXN0KCk7CisKKyAgICBWZXJpZnlPckV4aXQoYVJlc3VsdCA9PSBPVF9FUlJPUl9OT05FICYmIGFIZWFkZXIgIT0gTlVMTCAmJiBhTWVzc2FnZSAhPSBOVUxMKTsKKworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLT5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX0NIQU5HRUQpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZSBqb2luZXIgZW50cnVzdCByZXNwb25zZSIpOworICAgIG90TG9nQ2VydE1lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIltUSENJXSBkaXJlY3Rpb249cmVjdiB8IHR5cGU9Sk9JTl9FTlQucnNwIik7CisKK2V4aXQ6CisgICAgcmV0dXJuIDsKK30KKworSm9pbmVyUm91dGVyICZKb2luZXJSb3V0ZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIEpvaW5lclJvdXRlciAmam9pbmVyID0gKnN0YXRpY19jYXN0PEpvaW5lclJvdXRlciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBKb2luZXJSb3V0ZXIgJmpvaW5lciA9IG90R2V0VGhyZWFkTmV0aWYoKS5HZXRKb2luZXJSb3V0ZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGpvaW5lcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIER0bHMKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQKKwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9qb2luZXJfcm91dGVyLmhwcCBiL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyX3JvdXRlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2ZjcyNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyX3JvdXRlci5ocHAKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBKb2luZXIgUm91dGVyIHJvbGUuCisgKi8KKworI2lmbmRlZiBKT0lORVJfUk9VVEVSX0hQUF8KKyNkZWZpbmUgSk9JTkVSX1JPVVRFUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb2FwL2NvYXAuaHBwIgorI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3BfdGx2cy5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9rZXlfbWFuYWdlci5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworCituYW1lc3BhY2UgTWVzaENvUCB7CisKK2NsYXNzIEpvaW5lclJvdXRlcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIEpvaW5lciBSb3V0ZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgSm9pbmVyUm91dGVyKFRocmVhZE5ldGlmICZhTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSm9pbmVyIFVEUCBQb3J0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEpvaW5lciBVRFAgUG9ydCBudW1iZXIgLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Sm9pbmVyVWRwUG9ydCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEpvaW5lciBVRFAgUG9ydC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIFRoZSBKb2luZXIgVURQIFBvcnQgbnVtYmVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIEpvaW5lciBVRFAgUG9ydC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0Sm9pbmVyVWRwUG9ydCh1aW50MTZfdCBhSm9pbmVyVWRwUG9ydCk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0RlbGF5Sm9pbkVudCA9IDUwLCAgLy8vPCBtaWxsaXNlY29uZHMKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzLCB2b2lkICphQ29udGV4dCk7CisgICAgdm9pZCBIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCh1aW50MzJfdCBhRmxhZ3MpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVVkcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZWxheVRyYW5zbWl0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlUmVsYXlUcmFuc21pdChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlSm9pbmVyRW50cnVzdFJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciByZXN1bHQpOworICAgIHZvaWQgSGFuZGxlSm9pbmVyRW50cnVzdFJlc3BvbnNlKENvYXA6OkhlYWRlciAqYUhlYWRlciwgTWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIHJlc3VsdCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisgICAgb3RFcnJvciBEZWxheVNlbmRpbmdKb2luZXJFbnRydXN0KGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgY29uc3QgSm9pbmVyUm91dGVyS2VrVGx2ICZhS2VrKTsKKyAgICB2b2lkIFNlbmREZWxheWVkSm9pbmVyRW50cnVzdCh2b2lkKTsKKyAgICBvdEVycm9yIFNlbmRKb2luZXJFbnRydXN0KE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgb3RFcnJvciBHZXRCb3JkZXJBZ2VudFJsb2ModWludDE2X3QgJmFSbG9jKTsKKworICAgIHN0YXRpYyBKb2luZXJSb3V0ZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIElwNjo6TmV0aWZDYWxsYmFjayBtTmV0aWZDYWxsYmFjazsKKworICAgIElwNjo6VWRwU29ja2V0IG1Tb2NrZXQ7CisgICAgQ29hcDo6UmVzb3VyY2UgbVJlbGF5VHJhbnNtaXQ7CisKKyAgICBUaW1lciBtVGltZXI7CisgICAgTWVzc2FnZVF1ZXVlIG1EZWxheWVkSm9pbkVudHM7CisKKyAgICB1aW50MTZfdCBtSm9pbmVyVWRwUG9ydDsKKworICAgIGJvb2wgbUlzSm9pbmVyUG9ydENvbmZpZ3VyZWQgOiAxOworICAgIGJvb2wgbUV4cGVjdEpvaW5FbnRSc3AgOiAxOworfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBmb3IgZGVsYXlpbmcgSk9JTl9FTlQubnRmIG1lc3NhZ2VzLgorICoKKyAqLworY2xhc3MgRGVsYXllZEpvaW5FbnRIZWFkZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yIGZvciB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgRGVsYXllZEpvaW5FbnRIZWFkZXIodm9pZCkgeyBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdCB3aXRoIHNwZWNpZmljIHZhbHVlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZW5kVGltZSAgICAgVGltZSB3aGVuIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQuCisgICAgICogQHBhcmFtW2luXSAgYURlc3RpbmF0aW9uICBJUHY2IGFkZHJlc3Mgb2YgdGhlIG1lc3NhZ2UgZGVzdGluYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBEZWxheWVkSm9pbkVudEhlYWRlcih1aW50MzJfdCBhU2VuZFRpbWUsIElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgY29uc3QgdWludDhfdCAqYUtlaykgeworICAgICAgICBtU2VuZFRpbWUgPSBhU2VuZFRpbWU7CisgICAgICAgIG1NZXNzYWdlSW5mbyA9IGFNZXNzYWdlSW5mbzsKKyAgICAgICAgbWVtY3B5KCZtS2VrLCBhS2VrLCBzaXplb2YobUtlaykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgZGVsYXllZCByZXNwb25zZSBoZWFkZXIgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgYnl0ZXMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlcnMgdG8gZ3JvdyB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVG8oTWVzc2FnZSAmYU1lc3NhZ2UpIHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCh0aGlzLCBzaXplb2YoKnRoaXMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWFkcyBkZWxheWVkIHJlc3BvbnNlIGhlYWRlciBmcm9tIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyByZWFkLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgUmVhZEZyb20oTWVzc2FnZSAmYU1lc3NhZ2UpIHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoKnRoaXMpLCBzaXplb2YoKnRoaXMpLCB0aGlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGRlbGF5ZWQgcmVzcG9uc2UgaGVhZGVyIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgb3RFcnJvciBSZW1vdmVGcm9tKE1lc3NhZ2UgJmFNZXNzYWdlKSB7CisgICAgICAgIHJldHVybiBhTWVzc2FnZS5TZXRMZW5ndGgoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoRGVsYXllZEpvaW5FbnRIZWFkZXIpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgdGltZSB3aGVuIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSB0aW1lIHdoZW4gdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFNlbmRUaW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TZW5kVGltZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGRlc3RpbmF0aW9uIG9mIHRoZSBkZWxheWVkIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSBkZXN0aW5hdGlvbiBvZiB0aGUgZGVsYXllZCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqR2V0TWVzc2FnZUluZm8odm9pZCkgY29uc3QgeyByZXR1cm4gJm1NZXNzYWdlSW5mbzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEtFSyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHNlbmQgdGhlIGRlbGF5ZWQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBBIHBvaW50ZXIgdG8gdGhlIEtFSy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEtlayh2b2lkKSBjb25zdCB7IHJldHVybiBtS2VrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGJlZm9yZSB0aGUgZ2l2ZW4gdGltZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBPdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc0VhcmxpZXIodWludDMyX3QgYVRpbWUpIHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1TZW5kVGltZSkgPiAwKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGFmdGVyIHRoZSBnaXZlbiB0aW1lLgorICAgICAqIEByZXR2YWwgRkFMU0UgIE90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzTGF0ZXIodWludDMyX3QgYVRpbWUpIHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1TZW5kVGltZSkgPCAwKTsgfQorCitwcml2YXRlOgorICAgIElwNjo6TWVzc2FnZUluZm8gbU1lc3NhZ2VJbmZvOyAgICAgICAgICAgIC8vLzwgTWVzc2FnZSBpbmZvIG9mIHRoZSBtZXNzYWdlIHRvIHNlbmQuCisgICAgdWludDMyX3QgbVNlbmRUaW1lOyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBUaW1lIHdoZW4gdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudC4KKyAgICB1aW50OF90IG1LZWtbS2V5TWFuYWdlcjo6a01heEtleUxlbmd0aF07ICAvLy88IEtFSyB1c2VkIGJ5IE1BQyBsYXllciB0byBlbmNvZGUgdGhpcyBtZXNzYWdlLgorfTsKKworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gSk9JTkVSX1JPVVRFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2xlYWRlci5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2xlYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRkMmVlOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvbGVhZGVyLmNwcApAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIE1lc2hDb1AgTGVhZGVyLgorICovCisKKyNpZiBPUEVOVEhSRUFEX0ZURAorCisjZGVmaW5lIFdQUF9OQU1FICJsZWFkZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImxlYWRlci5ocHAiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcC5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitMZWFkZXI6OkxlYWRlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKToKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtUGV0aXRpb24oT1RfVVJJX1BBVEhfTEVBREVSX1BFVElUSU9OLCBMZWFkZXI6OkhhbmRsZVBldGl0aW9uLCB0aGlzKSwKKyAgICBtS2VlcEFsaXZlKE9UX1VSSV9QQVRIX0xFQURFUl9LRUVQX0FMSVZFLCBMZWFkZXI6OkhhbmRsZUtlZXBBbGl2ZSwgdGhpcyksCisgICAgbVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsIEhhbmRsZVRpbWVyLCB0aGlzKSwKKyAgICBtRGVsYXlUaW1lck1pbmltYWwoRGVsYXlUaW1lclRsdjo6a0RlbGF5VGltZXJNaW5pbWFsKSwKKyAgICBtU2Vzc2lvbklkKDB4ZmZmZikKK3sKKyAgICBhVGhyZWFkTmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1QZXRpdGlvbik7CisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtS2VlcEFsaXZlKTsKK30KKwordm9pZCBMZWFkZXI6OkhhbmRsZVBldGl0aW9uKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PExlYWRlciAqPihhQ29udGV4dCktPkhhbmRsZVBldGl0aW9uKAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlUGV0aXRpb24oQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIENvbW1pc3Npb25pbmdEYXRhIGRhdGE7CisgICAgQ29tbWlzc2lvbmVySWRUbHYgY29tbWlzc2lvbmVySWQ7CisgICAgU3RhdGVUbHY6OlN0YXRlIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3Q7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJyZWNlaXZlZCBwZXRpdGlvbiIpOworCisgICAgU3VjY2Vzc09yRXhpdChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQ29tbWlzc2lvbmVySWQsIHNpemVvZihjb21taXNzaW9uZXJJZCksIGNvbW1pc3Npb25lcklkKSk7CisgICAgVmVyaWZ5T3JFeGl0KGNvbW1pc3Npb25lcklkLklzVmFsaWQoKSk7CisKKyAgICBpZiAobVRpbWVyLklzUnVubmluZygpKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCFzdHJuY21wKGNvbW1pc3Npb25lcklkLkdldENvbW1pc3Npb25lcklkKCksIG1Db21taXNzaW9uZXJJZC5HZXRDb21taXNzaW9uZXJJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1Db21taXNzaW9uZXJJZCkpKTsKKworICAgICAgICBSZXNpZ25Db21taXNzaW9uZXIoKTsKKyAgICB9CisKKyAgICBkYXRhLm1Cb3JkZXJBZ2VudExvY2F0b3IuSW5pdCgpOworICAgIGRhdGEubUJvcmRlckFnZW50TG9jYXRvci5TZXRCb3JkZXJBZ2VudExvY2F0b3IoSG9zdFN3YXAxNihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSkpOworCisgICAgZGF0YS5tQ29tbWlzc2lvbmVyU2Vzc2lvbklkLkluaXQoKTsKKyAgICBkYXRhLm1Db21taXNzaW9uZXJTZXNzaW9uSWQuU2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkKCsrbVNlc3Npb25JZCk7CisKKyAgICBkYXRhLm1TdGVlcmluZ0RhdGEuSW5pdCgpOworICAgIGRhdGEubVN0ZWVyaW5nRGF0YS5TZXRMZW5ndGgoMSk7CisgICAgZGF0YS5tU3RlZXJpbmdEYXRhLkNsZWFyKCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5TZXRDb21taXNzaW9uaW5nRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuR2V0TGVuZ3RoKCkpKTsKKworICAgIG1Db21taXNzaW9uZXJJZCA9IGNvbW1pc3Npb25lcklkOworCisgICAgc3RhdGUgPSBTdGF0ZVRsdjo6a0FjY2VwdDsKKyAgICBtVGltZXIuU3RhcnQoVGltZXI6OlNlY1RvTXNlYyhrVGltZW91dExlYWRlclBldGl0aW9uKSk7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7CisgICAgU2VuZFBldGl0aW9uUmVzcG9uc2UoYUhlYWRlciwgYU1lc3NhZ2VJbmZvLCBzdGF0ZSk7Cit9CisKK290RXJyb3IgTGVhZGVyOjpTZW5kUGV0aXRpb25SZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGVUbHY6OlN0YXRlIGFTdGF0ZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKyAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgc2Vzc2lvbklkOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICByZXNwb25zZUhlYWRlci5TZXREZWZhdWx0UmVzcG9uc2VIZWFkZXIoYVJlcXVlc3RIZWFkZXIpOworICAgIHJlc3BvbnNlSGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01lc2hDb1BNZXNzYWdlKG5ldGlmLkdldENvYXAoKSwgcmVzcG9uc2VIZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgc3RhdGUuSW5pdCgpOworICAgIHN0YXRlLlNldFN0YXRlKGFTdGF0ZSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmc3RhdGUsIHNpemVvZihzdGF0ZSkpKTsKKworICAgIGlmIChtVGltZXIuSXNSdW5uaW5nKCkpCisgICAgeworICAgICAgICB1aW50MTZfdCBsZW4gPSBzaXplb2YoVGx2KSArIG1Db21taXNzaW9uZXJJZC5HZXRMZW5ndGgoKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbUNvbW1pc3Npb25lcklkLCBsZW4pKTsKKyAgICB9CisKKyAgICBpZiAoYVN0YXRlID09IFN0YXRlVGx2OjprQWNjZXB0KQorICAgIHsKKyAgICAgICAgc2Vzc2lvbklkLkluaXQoKTsKKyAgICAgICAgc2Vzc2lvbklkLlNldENvbW1pc3Npb25lclNlc3Npb25JZChtU2Vzc2lvbklkKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmc2Vzc2lvbklkLCBzaXplb2Yoc2Vzc2lvbklkKSkpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBwZXRpdGlvbiByZXNwb25zZSIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBMZWFkZXI6OkhhbmRsZUtlZXBBbGl2ZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8TGVhZGVyICo+KGFDb250ZXh0KS0+SGFuZGxlS2VlcEFsaXZlKAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlS2VlcEFsaXZlKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKyAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgc2Vzc2lvbklkOworICAgIFN0YXRlVGx2OjpTdGF0ZSByZXNwb25zZVN0YXRlOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAicmVjZWl2ZWQga2VlcCBhbGl2ZSIpOworCisgICAgU3VjY2Vzc09yRXhpdChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprU3RhdGUsIHNpemVvZihzdGF0ZSksIHN0YXRlKSk7CisgICAgVmVyaWZ5T3JFeGl0KHN0YXRlLklzVmFsaWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtDb21taXNzaW9uZXJTZXNzaW9uSWQsIHNpemVvZihzZXNzaW9uSWQpLCBzZXNzaW9uSWQpKTsKKyAgICBWZXJpZnlPckV4aXQoc2Vzc2lvbklkLklzVmFsaWQoKSk7CisKKyAgICBpZiAoc2Vzc2lvbklkLkdldENvbW1pc3Npb25lclNlc3Npb25JZCgpICE9IG1TZXNzaW9uSWQpCisgICAgeworICAgICAgICByZXNwb25zZVN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3Q7CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRlLkdldFN0YXRlKCkgIT0gU3RhdGVUbHY6OmtBY2NlcHQpCisgICAgeworICAgICAgICByZXNwb25zZVN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3Q7CisgICAgICAgIFJlc2lnbkNvbW1pc3Npb25lcigpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXNwb25zZVN0YXRlID0gU3RhdGVUbHY6OmtBY2NlcHQ7CisgICAgICAgIG1UaW1lci5TdGFydChUaW1lcjo6U2VjVG9Nc2VjKGtUaW1lb3V0TGVhZGVyUGV0aXRpb24pKTsKKyAgICB9CisKKyAgICBTZW5kS2VlcEFsaXZlUmVzcG9uc2UoYUhlYWRlciwgYU1lc3NhZ2VJbmZvLCByZXNwb25zZVN0YXRlKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3IgTGVhZGVyOjpTZW5kS2VlcEFsaXZlUmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZVRsdjo6U3RhdGUgYVN0YXRlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIHJlc3BvbnNlSGVhZGVyOworICAgIFN0YXRlVGx2IHN0YXRlOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICByZXNwb25zZUhlYWRlci5TZXREZWZhdWx0UmVzcG9uc2VIZWFkZXIoYVJlcXVlc3RIZWFkZXIpOworICAgIHJlc3BvbnNlSGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01lc2hDb1BNZXNzYWdlKG5ldGlmLkdldENvYXAoKSwgcmVzcG9uc2VIZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgc3RhdGUuSW5pdCgpOworICAgIHN0YXRlLlNldFN0YXRlKGFTdGF0ZSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmc3RhdGUsIHNpemVvZihzdGF0ZSkpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBrZWVwIGFsaXZlIHJlc3BvbnNlIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExlYWRlcjo6U2VuZERhdGFzZXRDaGFuZ2VkKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9EQVRBU0VUX0NIQU5HRUQpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlckFkZHIoYUFkZHJlc3MpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgZGF0YXNldCBjaGFuZ2VkIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExlYWRlcjo6U2V0RGVsYXlUaW1lck1pbmltYWwodWludDMyX3QgYURlbGF5VGltZXJNaW5pbWFsKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFZlcmlmeU9yRXhpdCgoYURlbGF5VGltZXJNaW5pbWFsICE9IDAgJiYgYURlbGF5VGltZXJNaW5pbWFsIDwgRGVsYXlUaW1lclRsdjo6a0RlbGF5VGltZXJEZWZhdWx0KSwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgIG1EZWxheVRpbWVyTWluaW1hbCA9IGFEZWxheVRpbWVyTWluaW1hbDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQzMl90IExlYWRlcjo6R2V0RGVsYXlUaW1lck1pbmltYWwodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlbGF5VGltZXJNaW5pbWFsOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgTGVhZGVyOjpIYW5kbGVUaW1lcih2b2lkKQoreworICAgIFZlcmlmeU9yRXhpdChHZXROZXRpZigpLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIpOworCisgICAgUmVzaWduQ29tbWlzc2lvbmVyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIExlYWRlcjo6U2V0RW1wdHlDb21taXNzaW9uZXJEYXRhKHZvaWQpCit7CisgICAgQ29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2IG1Db21taXNzaW9uZXJTZXNzaW9uSWQ7CisKKyAgICBtQ29tbWlzc2lvbmVyU2Vzc2lvbklkLkluaXQoKTsKKyAgICBtQ29tbWlzc2lvbmVyU2Vzc2lvbklkLlNldENvbW1pc3Npb25lclNlc3Npb25JZCgrK21TZXNzaW9uSWQpOworCisgICAgR2V0TmV0aWYoKS5HZXROZXR3b3JrRGF0YUxlYWRlcigpLlNldENvbW1pc3Npb25pbmdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmbUNvbW1pc3Npb25lclNlc3Npb25JZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihUbHYpICsgbUNvbW1pc3Npb25lclNlc3Npb25JZC5HZXRMZW5ndGgoKSk7Cit9CisKK3ZvaWQgTGVhZGVyOjpSZXNpZ25Db21taXNzaW9uZXIodm9pZCkKK3sKKyAgICBtVGltZXIuU3RvcCgpOworICAgIFNldEVtcHR5Q29tbWlzc2lvbmVyRGF0YSgpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiY29tbWlzc2lvbmVyIGluYWN0aXZlIik7Cit9CisKK0xlYWRlciAmTGVhZGVyOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBMZWFkZXIgJmxlYWRlciA9ICpzdGF0aWNfY2FzdDxMZWFkZXIgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgTGVhZGVyICZsZWFkZXIgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0TGVhZGVyKCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBsZWFkZXI7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBNZXNoQ29QCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRlRECisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvbGVhZGVyLmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvbGVhZGVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWRjN2I3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9sZWFkZXIuaHBwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgYSBNZXNoQ29QIExlYWRlci4KKyAqLworCisjaWZuZGVmIE1FU0hDT1BfTEVBREVSX0hQUF8KKyNkZWZpbmUgTUVTSENPUF9MRUFERVJfSFBQXworCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3BfdGx2cy5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGUuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ29tbWlzc2lvbmluZ0RhdGEKK3sKK3B1YmxpYzoKKyAgICB1aW50OF90IEdldExlbmd0aCh2b2lkKSBjb25zdCB7CisgICAgICAgIHJldHVybiBzaXplb2YoVGx2KSArIG1Cb3JkZXJBZ2VudExvY2F0b3IuR2V0TGVuZ3RoKCkgKworICAgICAgICAgICAgICAgc2l6ZW9mKFRsdikgKyBtQ29tbWlzc2lvbmVyU2Vzc2lvbklkLkdldExlbmd0aCgpICsKKyAgICAgICAgICAgICAgIHNpemVvZihUbHYpICsgbVN0ZWVyaW5nRGF0YS5HZXRMZW5ndGgoKTsKKyAgICB9CisKKyAgICBCb3JkZXJBZ2VudExvY2F0b3JUbHYgbUJvcmRlckFnZW50TG9jYXRvcjsKKyAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgbUNvbW1pc3Npb25lclNlc3Npb25JZDsKKyAgICBTdGVlcmluZ0RhdGFUbHYgbVN0ZWVyaW5nRGF0YTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCitjbGFzcyBMZWFkZXI6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBMZWFkZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgTGVhZGVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBNR01UX0RBVEFTRVRfQ0hBTkdFRCBtZXNzYWdlIHRvIGNvbW1pc3Npb25lci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICAgVGhlIElQdjYgYWRkcmVzcyBvZiBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHNlbmQgTUdNVF9EQVRBU0VUX0NIQU5HRUQgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIHRvIGdlbmVyYXRlIGEgTUdNVF9EQVRBU0VUX0NIQU5HRUQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZERhdGFzZXRDaGFuZ2VkKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBtaW5pbWFsIGRlbGF5IHRpbWVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURlbGF5VGltZXJNaW5pbWFsIFRoZSB2YWx1ZSBvZiBtaW5pbWFsIGRlbGF5IHRpbWVyIChpbiBtcykuCisgICAgICoKKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgbWluaW1hbCBkZWxheSB0aW1lci4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9JTlZBTElEX0FSR1MgSWYgQHAgYURlbGF5VGltZXJNaW5pbWFsIGlzIG5vdCB2YWxpZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0RGVsYXlUaW1lck1pbmltYWwodWludDMyX3QgYURlbGF5VGltZXJNaW5pbWFsKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgbWluaW1hbCBkZWxheSB0aW1lci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgdGhlIG1pbmlhbWwgZGVsYXkgdGltZXIgKGluIG1zKS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldERlbGF5VGltZXJNaW5pbWFsKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBlbXB0eSBDb21taXNzaW9uZXIgRGF0YSBUTFYgaW4gdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEVtcHR5Q29tbWlzc2lvbmVyRGF0YSh2b2lkKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVGltZW91dExlYWRlclBldGl0aW9uID0gNTAsIC8vLzwgVElNRU9VVF9MRUFEX1BFVCAoc2Vjb25kcykKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVUaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVBldGl0aW9uKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVBldGl0aW9uKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBTZW5kUGV0aXRpb25SZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZVRsdjo6U3RhdGUgYVN0YXRlKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUtlZXBBbGl2ZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlS2VlcEFsaXZlKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBTZW5kS2VlcEFsaXZlUmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlVGx2OjpTdGF0ZSBhU3RhdGUpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKworICAgIHZvaWQgUmVzaWduQ29tbWlzc2lvbmVyKHZvaWQpOworCisgICAgc3RhdGljIExlYWRlciAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgQ29hcDo6UmVzb3VyY2UgbVBldGl0aW9uOworICAgIENvYXA6OlJlc291cmNlIG1LZWVwQWxpdmU7CisgICAgVGltZXIgbVRpbWVyOworCisgICAgdWludDMyX3QgbURlbGF5VGltZXJNaW5pbWFsOworCisgICAgQ29tbWlzc2lvbmVySWRUbHYgbUNvbW1pc3Npb25lcklkOworICAgIHVpbnQxNl90IG1TZXNzaW9uSWQ7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUVTSENPUF9MRUFERVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9tZXNoY29wLmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkNWUyYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcC5ocHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIE1lc2hDb1AuCisgKgorICovCisKKyNpZm5kZWYgTUVTSENPUF9IUFBfCisjZGVmaW5lIE1FU0hDT1BfSFBQXworCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWVzaENvUCB7CisKK2VudW0KK3sKKyAgICBrTWVzaENvUE1lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2U6OmtQcmlvcml0eUhpZ2gsIC8vIFRoZSBwcmlvcml0eSBmb3IgTWVzaENvUCBtZXNzYWdlCit9OworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlIE1lc3NhZ2UgZm9yIE1lc2hDb1AKKyAqCisgKi8KK2lubGluZSBNZXNzYWdlICpOZXdNZXNoQ29QTWVzc2FnZShDb2FwOjpDb2FwICZhQ29hcCwgY29uc3QgQ29hcDo6SGVhZGVyICZhSGVhZGVyKQoreworICAgIHJldHVybiBhQ29hcC5OZXdNZXNzYWdlKGFIZWFkZXIsIGtNZXNoQ29QTWVzc2FnZVByaW9yaXR5KTsKK30KKworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBNRVNIQ09QX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcF90bHZzLmNwcCBiL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcF90bHZzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDE5MWRiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9tZXNoY29wX3RsdnMuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBNZWNoQ29wIFRMViBoZWxwZXIgZnVuY3Rpb25zLgorICovCisKKyNpbmNsdWRlICJtZXNoY29wX3RsdnMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitib29sIFN0ZWVyaW5nRGF0YVRsdjo6SXNDbGVhcmVkKHZvaWQpIGNvbnN0Cit7CisgICAgYm9vbCBydmFsID0gdHJ1ZTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IEdldExlbmd0aCgpOyBpKyspCisgICAgeworICAgICAgICBpZiAobVN0ZWVyaW5nRGF0YVtpXSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBydmFsID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBydmFsOworfQorCit2b2lkIFN0ZWVyaW5nRGF0YVRsdjo6Q29tcHV0ZUJsb29tRmlsdGVyKG90RXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MpCit7CisgICAgQ3JjMTYgY2NpdHQoQ3JjMTY6OmtDY2l0dCk7CisgICAgQ3JjMTYgYW5zaShDcmMxNjo6a0Fuc2kpOworCisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBzaXplb2Yob3RFeHRBZGRyZXNzKTsgaisrKQorICAgIHsKKyAgICAgICAgdWludDhfdCBieXRlID0gYUV4dEFkZHJlc3MtPm04W2pdOworICAgICAgICBjY2l0dC5VcGRhdGUoYnl0ZSk7CisgICAgICAgIGFuc2kuVXBkYXRlKGJ5dGUpOworICAgIH0KKworICAgIFNldEJpdChjY2l0dC5HZXQoKSAlIEdldE51bUJpdHMoKSk7CisgICAgU2V0Qml0KGFuc2kuR2V0KCkgJSBHZXROdW1CaXRzKCkpOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKK30gIC8vIG5hbWVzcGFjZSBUaHJlYWQKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcF90bHZzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDllNTJjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwCkBAIC0wLDAgKzEsMjEwNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGdlbmVyYXRpbmcgYW5kIHByb2Nlc3NpbmcgTWVzaENvUCBUTFZzLgorICoKKyAqLworCisjaWZuZGVmIE1FU0hDT1BfVExWU19IUFBfCisjZGVmaW5lIE1FU0hDT1BfVExWU19IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY29tbW9uL2NyYzE2LmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGx2cy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC90aW1lc3RhbXAuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OlJldmVyc2UzMjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzI7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWVzaENvUCB7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1lc2hDb1AgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGx2IDogcHVibGljIG90OjpUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBNZXNoQ29QIFRMViBUeXBlcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gVHlwZQorICAgIHsKKyAgICAgICAga0NoYW5uZWwgICAgICAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfQ0hBTk5FTCwgICAgICAgICAgICAgICAgICAgLy8vPCBDaGFubmVsIFRMVgorICAgICAgICBrUGFuSWQgICAgICAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9QQU5JRCwgICAgICAgICAgICAgICAgICAgICAvLy88IFBBTiBJRCBUTFYKKyAgICAgICAga0V4dGVuZGVkUGFuSWQgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfRVhUUEFOSUQsICAgICAgICAgICAgICAgICAgLy8vPCBFeHRlbmRlZCBQQU4gSUQgVExWCisgICAgICAgIGtOZXR3b3JrTmFtZSAgICAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX05FVFdPUktOQU1FLCAgICAgICAgICAgICAgIC8vLzwgTmV3dG9yayBOYW1lIFRMVgorICAgICAgICBrUFNLYyAgICAgICAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9QU0tDLCAgICAgICAgICAgICAgICAgICAgICAvLy88IFBTS2MgVExWCisgICAgICAgIGtOZXR3b3JrTWFzdGVyS2V5ICAgICAgICA9IE9UX01FU0hDT1BfVExWX01BU1RFUktFWSwgICAgICAgICAgICAgICAgIC8vLzwgTmV0d29yayBNYXN0ZXIgS2V5IFRMVgorICAgICAgICBrTmV0d29ya0tleVNlcXVlbmNlICAgICAgPSBPVF9NRVNIQ09QX1RMVl9ORVRXT1JLX0tFWV9TRVFVRU5DRSwgICAgICAvLy88IE5ldHdvcmsgS2V5IFNlcXVlbmNlIFRMVgorICAgICAgICBrTWVzaExvY2FsUHJlZml4ICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9NRVNITE9DQUxQUkVGSVgsICAgICAgICAgICAvLy88IE1lc2ggTG9jYWwgUHJlZml4IFRMVgorICAgICAgICBrU3RlZXJpbmdEYXRhICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9TVEVFUklOR19EQVRBLCAgICAgICAgICAgICAvLy88IFN0ZWVyaW5nIERhdGEgVExWCisgICAgICAgIGtCb3JkZXJBZ2VudExvY2F0b3IgICAgICA9IE9UX01FU0hDT1BfVExWX0JPUkRFUl9BR0VOVF9STE9DLCAgICAgICAgIC8vLzwgQm9yZGVyIEFnZW50IExvY2F0b3IgVExWCisgICAgICAgIGtDb21taXNzaW9uZXJJZCAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX0NPTU1JU1NJT05FUl9JRCwgICAgICAgICAgIC8vLzwgQ29tbWlzc2lvbmVyIElEIFRMVgorICAgICAgICBrQ29tbWlzc2lvbmVyU2Vzc2lvbklkICAgPSBPVF9NRVNIQ09QX1RMVl9DT01NX1NFU1NJT05fSUQsICAgICAgICAgICAvLy88IENvbW1pc3Npb25lciBTZXNzaW9uIElEIFRMVgorICAgICAgICBrU2VjdXJpdHlQb2xpY3kgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9TRUNVUklUWVBPTElDWSwgICAgICAgICAgICAvLy88IFNlY3VyaXR5IFBvbGljeSBUTFYKKyAgICAgICAga0dldCAgICAgICAgICAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfR0VULCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBHZXQgVExWCisgICAgICAgIGtBY3RpdmVUaW1lc3RhbXAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX0FDVElWRVRJTUVTVEFNUCwgICAgICAgICAgIC8vLzwgQWN0aXZlIFRpbWVzdGFtcCBUTFYKKyAgICAgICAga1N0YXRlICAgICAgICAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfU1RBVEUsICAgICAgICAgICAgICAgICAgICAgLy8vPCBTdGF0ZSBUTFYKKyAgICAgICAga0pvaW5lckR0bHNFbmNhcHN1bGF0aW9uID0gT1RfTUVTSENPUF9UTFZfSk9JTkVSX0RUTFMsICAgICAgICAgICAgICAgLy8vPCBKb2luZXIgRFRMUyBFbmNhcHN1bGF0aW9uIFRMVgorICAgICAgICBrSm9pbmVyVWRwUG9ydCAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9KT0lORVJfVURQX1BPUlQsICAgICAgICAgICAvLy88IEpvaW5lciBVRFAgUG9ydCBUTFYKKyAgICAgICAga0pvaW5lcklpZCAgICAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfSk9JTkVSX0lJRCwgICAgICAgICAgICAgICAgLy8vPCBKb2luZXIgSUlEIFRMVgorICAgICAgICBrSm9pbmVyUm91dGVyTG9jYXRvciAgICAgPSBPVF9NRVNIQ09QX1RMVl9KT0lORVJfUkxPQywgICAgICAgICAgICAgICAvLy88IEpvaW5lciBSb3V0ZXIgTG9jYXRvciBUTFYKKyAgICAgICAga0pvaW5lclJvdXRlcktlayAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfSk9JTkVSX1JPVVRFUl9LRUssICAgICAgICAgLy8vPCBKb2luZXIgUm91dGVyIEtFSyBUTFYKKyAgICAgICAga1Byb3Zpc2lvbmluZ1VybCAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfUFJPVklTSU9OSU5HX1VSTCwgICAgICAgICAgLy8vPCBQcm92aXNpb25pbmcgVVJMIFRMVgorICAgICAgICBrVmVuZG9yTmFtZSAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9WRU5ET1JfTkFNRV9UTFYsICAgICAgICAgICAvLy88IG1lc2hjb3AgVmVuZG9yIE5hbWUgVExWCisgICAgICAgIGtWZW5kb3JNb2RlbCAgICAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX1ZFTkRPUl9NT0RFTF9UTFYsICAgICAgICAgIC8vLzwgbWVzaGNvcCBWZW5kb3IgTW9kZWwgVExWCisgICAgICAgIGtWZW5kb3JTd1ZlcnNpb24gICAgICAgICA9IE9UX01FU0hDT1BfVExWX1ZFTkRPUl9TV19WRVJTSU9OX1RMViwgICAgIC8vLzwgbWVzaGNvcCBWZW5kb3IgU1cgVmVyc2lvbiBUTFYKKyAgICAgICAga1ZlbmRvckRhdGEgICAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfVkVORE9SX0RBVEFfVExWLCAgICAgICAgICAgLy8vPCBtZXNoY29wIFZlbmRvciBEYXRhIFRMVgorICAgICAgICBrVmVuZG9yU3RhY2tWZXJzaW9uICAgICAgPSBPVF9NRVNIQ09QX1RMVl9WRU5ET1JfU1RBQ0tfVkVSU0lPTl9UTFYsICAvLy88IG1lc2hjb3AgVmVuZG9yIFN0YWNrIFZlcnNpb24gVExWCisgICAgICAgIGtQZW5kaW5nVGltZXN0YW1wICAgICAgICA9IE9UX01FU0hDT1BfVExWX1BFTkRJTkdUSU1FU1RBTVAsICAgICAgICAgIC8vLzwgUGVuZGluZyBUaW1lc3RhbXAgVExWCisgICAgICAgIGtEZWxheVRpbWVyICAgICAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX0RFTEFZVElNRVIsICAgICAgICAgICAgICAgIC8vLzwgRGVsYXkgVGltZXIgVExWCisgICAgICAgIGtDaGFubmVsTWFzayAgICAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX0NIQU5ORUxNQVNLLCAgICAgICAgICAgICAgIC8vLzwgQ2hhbm5lbCBNYXNrIFRMVgorICAgICAgICBrQ291bnQgICAgICAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9DT1VOVCwgICAgICAgICAgICAgICAgICAgICAvLy88IENvdW50IFRMVgorICAgICAgICBrUGVyaW9kICAgICAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9QRVJJT0QsICAgICAgICAgICAgICAgICAgICAvLy88IFBlcmlvZCBUTFYKKyAgICAgICAga1NjYW5EdXJhdGlvbiAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfU0NBTl9EVVJBVElPTiwgICAgICAgICAgICAgLy8vPCBTY2FuIER1cmF0aW9uIFRMVgorICAgICAgICBrRW5lcmd5TGlzdCAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9FTkVSR1lfTElTVCwgICAgICAgICAgICAgICAvLy88IEVuZXJneSBMaXN0IFRMVgorICAgICAgICBrRGlzY292ZXJ5UmVxdWVzdCAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9ESVNDT1ZFUllSRVFVRVNULCAgICAgICAgICAvLy88IERpc2NvdmVyeSBSZXF1ZXN0IFRMVgorICAgICAgICBrRGlzY292ZXJ5UmVzcG9uc2UgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9ESVNDT1ZFUllSRVNQT05TRSwgICAgICAgICAvLy88IERpc2NvdmVyeSBSZXNwb25zZSBUTFYKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgVHlwZSBHZXRUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG90OjpUbHY6OkdldFR5cGUoKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVHlwZSAgVGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUoVHlwZSBhVHlwZSkgeyBvdDo6VGx2OjpTZXRUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFUeXBlKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IFRMVi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV4dCBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBUbHYgKkdldE5leHQodm9pZCkgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGx2ICo+KG90OjpUbHY6OkdldE5leHQoKSk7CisgICAgfQorCisgICAgY29uc3QgVGx2ICpHZXROZXh0KHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFRsdiAqPihvdDo6VGx2OjpHZXROZXh0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZWFkcyB0aGUgcmVxdWVzdGVkIFRMViBvdXQgb2YgQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYU1lc3NhZ2UgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgIGFUeXBlICAgICAgIFRoZSBUeXBlIHZhbHVlIHRvIHNlYXJjaCBmb3IuCisgICAgICogQHBhcmFtW2luXSAgIGFNYXhMZW5ndGggIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgICAgICogQHBhcmFtW291dF0gIGFUbHYgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBUTFYgdGhhdCB3aWxsIGJlIGNvcGllZCB0by4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgY29waWVkIHRoZSBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvdWxkIG5vdCBmaW5kIHRoZSBUTFYgd2l0aCBUeXBlIEBwIGFUeXBlLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgR2V0VGx2KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBUeXBlIGFUeXBlLCB1aW50MTZfdCBhTWF4TGVuZ3RoLCBUbHYgJmFUbHYpIHsKKyAgICAgICAgcmV0dXJuIG90OjpUbHY6OkdldChhTWVzc2FnZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpLCBhTWF4TGVuZ3RoLCBhVGx2KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgZmluZHMgdGhlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIGEgZ2l2ZW4gVExWIHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYU1lc3NhZ2UgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgIGFUeXBlICAgICAgIFRoZSBUeXBlIHZhbHVlIHRvIHNlYXJjaCBmb3IuCisgICAgICogQHBhcmFtW291dF0gIGFPZmZzZXQgICAgIFRoZSBvZmZzZXQgd2hlcmUgdGhlIHZhbHVlIHN0YXJ0cy4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYUxlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGZvdW5kIHRoZSBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvdWxkIG5vdCBmaW5kIHRoZSBUTFYgd2l0aCBUeXBlIEBwIGFUeXBlLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgR2V0VmFsdWVPZmZzZXQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIFR5cGUgYVR5cGUsIHVpbnQxNl90ICZhT2Zmc2V0LCB1aW50MTZfdCAmYUxlbmd0aCkgeworICAgICAgICByZXR1cm4gb3Q6OlRsdjo6R2V0VmFsdWVPZmZzZXQoYU1lc3NhZ2UsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFUeXBlKSwgYU9mZnNldCwgYUxlbmd0aCk7CisgICAgfQorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQ2hhbm5lbCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDaGFubmVsVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0NoYW5uZWwpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIENoYW5uZWxQYWdlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENoYW5uZWxQYWdlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRDaGFubmVsUGFnZSh2b2lkKSBjb25zdCB7IHJldHVybiBtQ2hhbm5lbFBhZ2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIENoYW5uZWxQYWdlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoYW5uZWxQYWdlICBUaGUgQ2hhbm5lbFBhZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENoYW5uZWxQYWdlKHVpbnQ4X3QgYUNoYW5uZWxQYWdlKSB7IG1DaGFubmVsUGFnZSA9IGFDaGFubmVsUGFnZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQ2hhbm5lbCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDaGFubmVsIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Q2hhbm5lbCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1DaGFubmVsKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ2hhbm5lbCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsICBUaGUgQ2hhbm5lbCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q2hhbm5lbCh1aW50MTZfdCBhQ2hhbm5lbCkgeyBtQ2hhbm5lbCA9IEhvc3RTd2FwMTYoYUNoYW5uZWwpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtQ2hhbm5lbFBhZ2U7CisgICAgdWludDE2X3QgbUNoYW5uZWw7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUEFOIElEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFBhbklkVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1BhbklkKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQQU4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUEFOIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UGFuSWQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUGFuSWQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQQU4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgIFRoZSBQQU4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBhbklkKHVpbnQxNl90IGFQYW5JZCkgeyBtUGFuSWQgPSBIb3N0U3dhcDE2KGFQYW5JZCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtUGFuSWQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgRXh0ZW5kZWQgUEFOIElEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEV4dGVuZGVkUGFuSWRUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrRXh0ZW5kZWRQYW5JZCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRXh0ZW5kZWQgUEFOIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEV4dGVuZGVkIFBBTiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEV4dGVuZGVkUGFuSWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUV4dGVuZGVkUGFuSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEV4dGVuZGVkIFBBTiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFeHRlbmRlZFBhbklkICBBIHBvaW50ZXIgdG8gdGhlIEV4dGVuZGVkIFBBTiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RXh0ZW5kZWRQYW5JZChjb25zdCB1aW50OF90ICphRXh0ZW5kZWRQYW5JZCkgeworICAgICAgICBtZW1jcHkobUV4dGVuZGVkUGFuSWQsIGFFeHRlbmRlZFBhbklkLCBPVF9FWFRfUEFOX0lEX1NJWkUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1FeHRlbmRlZFBhbklkW09UX0VYVF9QQU5fSURfU0laRV07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTmV0d29yayBOYW1lIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE5ldHdvcmtOYW1lVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa05ldHdvcmtOYW1lKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBOZXR3b3JrIE5hbWUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTmV0d29yayBOYW1lIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqR2V0TmV0d29ya05hbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbU5ldHdvcmtOYW1lOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBOZXR3b3JrIE5hbWUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTmV0d29ya05hbWUgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBOYW1lIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXR3b3JrTmFtZShjb25zdCBjaGFyICphTmV0d29ya05hbWUpIHsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cm5sZW4oYU5ldHdvcmtOYW1lLCBzaXplb2YobU5ldHdvcmtOYW1lKSk7CisgICAgICAgIG1lbWNweShtTmV0d29ya05hbWUsIGFOZXR3b3JrTmFtZSwgbGVuZ3RoKTsKKyAgICAgICAgU2V0TGVuZ3RoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjaGFyIG1OZXR3b3JrTmFtZVtPVF9ORVRXT1JLX05BTUVfTUFYX1NJWkVdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFBTS2MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgUFNLY1RsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtQU0tjKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQU0tjIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFBTS2MgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRQU0tjKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1QU0tjOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQU0tjIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBTS2MgIEEgcG9pbnRlciB0byB0aGUgUFNLYyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UFNLYyhjb25zdCB1aW50OF90ICphUFNLYykgeworICAgICAgICBtZW1jcHkobVBTS2MsIGFQU0tjLCBzaXplb2YobVBTS2MpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtUFNLY1sxNl07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTmV0d29yayBNYXN0ZXIgS2V5IFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE5ldHdvcmtNYXN0ZXJLZXlUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrTmV0d29ya01hc3RlcktleSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTmV0d29yayBNYXN0ZXIgS2V5IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE5ldHdvcmsgTWFzdGVyIEtleSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IG90TWFzdGVyS2V5ICZHZXROZXR3b3JrTWFzdGVyS2V5KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1OZXR3b3JrTWFzdGVyS2V5OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBOZXR3b3JrIE1hc3RlciBLZXkgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTmV0d29ya01hc3RlcktleSAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIE1hc3RlciBLZXkgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5ldHdvcmtNYXN0ZXJLZXkoY29uc3Qgb3RNYXN0ZXJLZXkgJmFOZXR3b3JrTWFzdGVyS2V5KSB7CisgICAgICAgIG1OZXR3b3JrTWFzdGVyS2V5ID0gYU5ldHdvcmtNYXN0ZXJLZXk7CisgICAgfQorCitwcml2YXRlOgorICAgIG90TWFzdGVyS2V5IG1OZXR3b3JrTWFzdGVyS2V5OworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE5ldHdvcmsgS2V5IFNlcXVlbmNlIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE5ldHdvcmtLZXlTZXF1ZW5jZVRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtOZXR3b3JrS2V5U2VxdWVuY2UpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE5ldHdvcmsgS2V5IFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE5ldHdvcmsgS2V5IFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0TmV0d29ya0tleVNlcXVlbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobU5ldHdvcmtLZXlTZXF1ZW5jZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE5ldHdvcmsgS2V5IFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5ldHdvcmtLZXlTZXF1ZW5jZSAgVGhlIE5ldHdvcmsgS2V5IFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXR3b3JrS2V5U2VxdWVuY2UodWludDMyX3QgYU5ldHdvcmtLZXlTZXF1ZW5jZSkgeyBtTmV0d29ya0tleVNlcXVlbmNlID0gSG9zdFN3YXAzMihhTmV0d29ya0tleVNlcXVlbmNlKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1OZXR3b3JrS2V5U2VxdWVuY2U7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTWVzaCBMb2NhbCBQcmVmaXggVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTWVzaExvY2FsUHJlZml4VGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa01lc2hMb2NhbFByZWZpeCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTWVzaCBMb2NhbCBQcmVmaXggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTWVzaCBMb2NhbCBQcmVmaXggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRNZXNoTG9jYWxQcmVmaXgodm9pZCkgY29uc3QgeyByZXR1cm4gbU1lc2hMb2NhbFByZWZpeDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTWVzaCBMb2NhbCBQcmVmaXggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzaExvY2FsUHJlZml4ICBBIHBvaW50ZXIgdG8gdGhlIE1lc2ggTG9jYWwgUHJlZml4IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNZXNoTG9jYWxQcmVmaXgoY29uc3QgdWludDhfdCAqYU1lc2hMb2NhbFByZWZpeCkgeworICAgICAgICBtZW1jcHkobU1lc2hMb2NhbFByZWZpeCwgYU1lc2hMb2NhbFByZWZpeCwgc2l6ZW9mKG1NZXNoTG9jYWxQcmVmaXgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtTWVzaExvY2FsUHJlZml4WzhdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFN0ZWVyaW5nIERhdGEgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU3RlZXJpbmdEYXRhVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1N0ZWVyaW5nRGF0YSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyBDbGVhcigpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpIDw9IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBhbGwgYml0cyBpbiB0aGUgQmxvb20gRmlsdGVyIHRvIHplcm8uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyKHZvaWQpIHsgbWVtc2V0KG1TdGVlcmluZ0RhdGEsIDAsIEdldExlbmd0aCgpKTsgfQorCisgICAgLyoqCisgICAgICogVGhzIG1ldGhvZCBzZXRzIGFsbCBiaXRzIGluIHRoZSBCbG9vbSBGaWx0ZXIgdG8gb25lLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXQodm9pZCkgeyBtZW1zZXQobVN0ZWVyaW5nRGF0YSwgMHhmZiwgR2V0TGVuZ3RoKCkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaHMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgU3RlZXJpbmdEYXRhIGFsbG93cyBhbGwgSm9pbmVycy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBTdGVlcmluZ0RhdGEgYWxsb3dzIGFsbCBKb2luZXJzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBTdGVlcmluZ0RhdGEgZG9lc24ndCBhbGxvdyBhbnkgSm9pbmVyLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBEb2VzQWxsb3dBbnkodm9pZCkgeworICAgICAgICBib29sIHJ2YWwgPSB0cnVlOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IEdldExlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtU3RlZXJpbmdEYXRhW2ldICE9IDB4ZmYpIHsKKyAgICAgICAgICAgICAgICBydmFsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcnZhbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgQmxvb20gRmlsdGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBCbG9vbSBGaWx0ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldE51bUJpdHModm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgKiA4OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYml0IEBwIGFCaXQgaXMgc2V0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUJpdCAgVGhlIGJpdCBvZmZzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiBiaXQgQHAgYUJpdCBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgYml0IEBwIGFCaXQgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgR2V0Qml0KHVpbnQ4X3QgYUJpdCkgY29uc3QgeyByZXR1cm4gKG1TdGVlcmluZ0RhdGFbR2V0TGVuZ3RoKCkgLSAxIC0gKGFCaXQgLyA4KV0gJiAoMSA8PCAoYUJpdCAlIDgpKSkgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIGJpdCBAcCBhQml0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUJpdCAgVGhlIGJpdCBvZmZzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyQml0KHVpbnQ4X3QgYUJpdCkgeyBtU3RlZXJpbmdEYXRhW0dldExlbmd0aCgpIC0gMSAtIChhQml0IC8gOCldICY9IH4oMSA8PCAoYUJpdCAlIDgpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBiaXQgQHAgYUJpdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCaXQgIFRoZSBiaXQgb2Zmc2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRCaXQodWludDhfdCBhQml0KSB7IG1TdGVlcmluZ0RhdGFbR2V0TGVuZ3RoKCkgLSAxIC0gKGFCaXQgLyA4KV0gfD0gMSA8PCAoYUJpdCAlIDgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaHMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgU3RlZXJpbmdEYXRhIGlzIGFsbCB6ZXJvcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBTdGVlcmluZ0RhdGEgaXMgYWxsIHplcm9zLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBTdGVlcmluZ0RhdGEgaXNuJ3QgYWxsIHplcm9zLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0NsZWFyZWQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb21wdXRlcyB0aGUgQmxvb20gRmlsdGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUV4dEFkZHJlc3MgIEV4dGVuZGVkIGFkZHJlc3MKKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ29tcHV0ZUJsb29tRmlsdGVyKG90RXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MpOworCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVN0ZWVyaW5nRGF0YVtPVF9TVEVFUklOR19EQVRBX01BWF9MRU5HVEhdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEJvcmRlciBBZ2VudCBMb2NhdG9yIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEJvcmRlckFnZW50TG9jYXRvclRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtCb3JkZXJBZ2VudExvY2F0b3IpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEJvcmRlciBBZ2VudCBMb2NhdG9yIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEJvcmRlciBBZ2VudCBMb2NhdG9yIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Qm9yZGVyQWdlbnRMb2NhdG9yKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUxvY2F0b3IpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBCb3JkZXIgQWdlbnQgTG9jYXRvciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCb3JkZXJBZ2VudExvY2F0b3IgIFRoZSBCb3JkZXIgQWdlbnQgTG9jYXRvciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Qm9yZGVyQWdlbnRMb2NhdG9yKHVpbnQxNl90IGFMb2NhdG9yKSB7IG1Mb2NhdG9yID0gSG9zdFN3YXAxNihhTG9jYXRvcik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtTG9jYXRvcjsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgQ29tbWlzc2lvbmVyIElEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENvbW1pc3Npb25lcklkVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0NvbW1pc3Npb25lcklkKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDb21taXNzaW9uZXIgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQ29tbWlzc2lvbmVyIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqR2V0Q29tbWlzc2lvbmVySWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUNvbW1pc3Npb25lcklkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDb21taXNzaW9uZXIgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29tbWlzc2lvbmVySWQgIEEgcG9pbnRlciB0byB0aGUgQ29tbWlzc2lvbmVyIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb21taXNzaW9uZXJJZChjb25zdCBjaGFyICphQ29tbWlzc2lvbmVySWQpIHsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cm5sZW4oYUNvbW1pc3Npb25lcklkLCBzaXplb2YobUNvbW1pc3Npb25lcklkKSk7CisgICAgICAgIG1lbWNweShtQ29tbWlzc2lvbmVySWQsIGFDb21taXNzaW9uZXJJZCwgbGVuZ3RoKTsKKyAgICAgICAgU2V0TGVuZ3RoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4TGVuZ3RoID0gNjQsCisgICAgfTsKKworICAgIGNoYXIgbUNvbW1pc3Npb25lcklkW2tNYXhMZW5ndGhdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENvbW1pc3Npb25lciBTZXNzaW9uIElEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENvbW1pc3Npb25lclNlc3Npb25JZFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtDb21taXNzaW9uZXJTZXNzaW9uSWQpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIENvbW1pc3Npb25lciBTZXNzaW9uIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENvbW1pc3Npb25lciBTZXNzaW9uIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVNlc3Npb25JZCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIENvbW1pc3Npb25lciBTZXNzaW9uIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbW1pc3Npb25lclNlc3Npb25JZCAgVGhlIENvbW1pc3Npb25lciBTZXNzaW9uIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb21taXNzaW9uZXJTZXNzaW9uSWQodWludDE2X3QgYVNlc3Npb25JZCkgeyBtU2Vzc2lvbklkID0gSG9zdFN3YXAxNihhU2Vzc2lvbklkKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1TZXNzaW9uSWQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU2VjdXJpdHkgUG9saWN5IFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFNlY3VyaXR5UG9saWN5VGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1NlY3VyaXR5UG9saWN5KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSb3RhdGlvbiBUaW1lIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJvdGF0aW9uIFRpbWUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRSb3RhdGlvblRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUm90YXRpb25UaW1lKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUm90YXRpb24gVGltZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3RhdGlvblRpbWUgIFRoZSBSb3RhdGlvbiBUaW1lIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSb3RhdGlvblRpbWUodWludDE2X3QgYVJvdGF0aW9uVGltZSkgeyBtUm90YXRpb25UaW1lID0gSG9zdFN3YXAxNihhUm90YXRpb25UaW1lKTsgfQorCisgICAgZW51bQorICAgIHsKKyAgICAgICAga09idGFpbk1hc3RlcktleUZsYWcgICAgICA9IE9UX1NFQ1VSSVRZX1BPTElDWV9PQlRBSU5fTUFTVEVSX0tFWSwgICAgICAvLy88IE9idGFpbmluZyB0aGUgTWFzdGVyIEtleQorICAgICAgICBrTmF0aXZlQ29tbWlzc2lvbmluZ0ZsYWcgID0gT1RfU0VDVVJJVFlfUE9MSUNZX05BVElWRV9DT01NSVNTSU9OSU5HLCAgIC8vLzwgTmF0aXZlIENvbW1pc3Npb25pbmcKKyAgICAgICAga1JvdXRlcnNGbGFnICAgICAgICAgICAgICA9IE9UX1NFQ1VSSVRZX1BPTElDWV9ST1VURVJTLCAgICAgICAgICAgICAgICAvLy88IFJvdXRlcnMgZW5hYmxlZAorICAgICAgICBrRXh0ZXJuYWxDb21taXNzaW9uZXJGbGFnID0gT1RfU0VDVVJJVFlfUE9MSUNZX0VYVEVSTkFMX0NPTU1JU1NJT05FUiwgIC8vLzwgRXh0ZXJuYWwgQ29tbWlzc2lvbmVyIGFsbG93ZWQKKyAgICAgICAga0JlYWNvbnNGbGFnICAgICAgICAgICAgICA9IE9UX1NFQ1VSSVRZX1BPTElDWV9CRUFDT05TLCAgICAgICAgICAgICAgICAvLy88IEJlYWNvbnMgZW5hYmxlZAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBGbGFncyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBGbGFncyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0RmxhZ3Modm9pZCkgY29uc3QgeyByZXR1cm4gbUZsYWdzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBGbGFncyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGbGFncyAgVGhlIEZsYWdzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRGbGFncyh1aW50OF90IGFGbGFncykgeyBtRmxhZ3MgPSBhRmxhZ3M7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtUm90YXRpb25UaW1lOworICAgIHVpbnQ4X3QgbUZsYWdzOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEFjdGl2ZSBUaW1lc3RhbXAgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQWN0aXZlVGltZXN0YW1wVGx2IDogcHVibGljIFRsdiwgcHVibGljIFRpbWVzdGFtcAoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtBY3RpdmVUaW1lc3RhbXApOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgVGltZXN0YW1wOjpJbml0KCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU3RhdGUgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU3RhdGVUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrU3RhdGUpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFN0YXRlIHZhbHVlcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIGtSZWplY3QgID0gLTEsICAvLy88IFJlamVjdAorICAgICAgICBrUGVuZGluZyA9IDAsICAgLy8vPCBQZW5kaW5nCisgICAgICAgIGtBY2NlcHQgID0gMSwgICAvLy88IEFjY2VwdAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBTdGF0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTdGF0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIFN0YXRlIEdldFN0YXRlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0YXRlPihtU3RhdGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTdGF0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGF0ZSAgVGhlIFN0YXRlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTdGF0ZShTdGF0ZSBhU3RhdGUpIHsgbVN0YXRlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVN0YXRlKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVN0YXRlOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEpvaW5lciBVRFAgUG9ydCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBKb2luZXJVZHBQb3J0VGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0pvaW5lclVkcFBvcnQpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFVEUCBQb3J0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFVEUCBQb3J0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0VWRwUG9ydCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1VZHBQb3J0KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVURQIFBvcnQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVWRwUG9ydCAgVGhlIFVEUCBQb3J0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRVZHBQb3J0KHVpbnQxNl90IGFVZHBQb3J0KSB7IG1VZHBQb3J0ID0gSG9zdFN3YXAxNihhVWRwUG9ydCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtVWRwUG9ydDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBKb2luZXIgSUlEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEpvaW5lcklpZFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtKb2luZXJJaWQpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBKb2luZXIgSUlELgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBKb2luZXIgSUlELgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0SWlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JaWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEpvaW5lciBJSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWlkICBBIHBvaW50ZXIgdG8gdGhlIEpvaW5lciBJSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElpZChjb25zdCB1aW50OF90ICphSWlkKSB7IG1lbWNweShtSWlkLCBhSWlkLCBzaXplb2YobUlpZCkpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtSWlkWzhdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEpvaW5lciBSb3V0ZXIgTG9jYXRvciBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBKb2luZXJSb3V0ZXJMb2NhdG9yVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0pvaW5lclJvdXRlckxvY2F0b3IpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEpvaW5lciBSb3V0ZXIgTG9jYXRvciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBKb2luZXIgUm91dGVyIExvY2F0b3IgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRKb2luZXJSb3V0ZXJMb2NhdG9yKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUxvY2F0b3IpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBKb2luZXIgUm91dGVyIExvY2F0b3IgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSm9pbmVyUm91dGVyTG9jYXRvciAgVGhlIEpvaW5lciBSb3V0ZXIgTG9jYXRvciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Sm9pbmVyUm91dGVyTG9jYXRvcih1aW50MTZfdCBhTG9jYXRvcikgeyBtTG9jYXRvciA9IEhvc3RTd2FwMTYoYUxvY2F0b3IpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbUxvY2F0b3I7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSm9pbmVyIFJvdXRlciBLRUsgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgSm9pbmVyUm91dGVyS2VrVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0pvaW5lclJvdXRlcktlayk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEpvaW5lciBSb3V0ZXIgS0VLLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBKb2luZXIgUm91dGVyIEtFSy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEtlayh2b2lkKSBjb25zdCB7IHJldHVybiBtS2VrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBKb2luZXIgUm91dGVyIEtFSy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJaWQgIEEgcG9pbnRlciB0byB0aGUgSm9pbmVyIFJvdXRlciBLRUsuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEtlayhjb25zdCB1aW50OF90ICphS2VrKSB7IG1lbWNweShtS2VrLCBhS2VrLCBzaXplb2YobUtlaykpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtS2VrWzE2XTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBQZW5kaW5nIFRpbWVzdGFtcCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBQZW5kaW5nVGltZXN0YW1wVGx2IDogcHVibGljIFRsdiwgcHVibGljIFRpbWVzdGFtcAoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtQZW5kaW5nVGltZXN0YW1wKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IFRpbWVzdGFtcDo6SW5pdCgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIERlbGF5IFRpbWVyIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIERlbGF5VGltZXJUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrRGVsYXlUaW1lcik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRGVsYXkgVGltZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRGVsYXkgVGltZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXREZWxheVRpbWVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobURlbGF5VGltZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBEZWxheSBUaW1lciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEZWxheVRpbWVyICBUaGUgRGVsYXkgVGltZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERlbGF5VGltZXIodWludDMyX3QgYURlbGF5VGltZXIpIHsgbURlbGF5VGltZXIgPSBIb3N0U3dhcDMyKGFEZWxheVRpbWVyKTsgfQorCisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heERlbGF5VGltZXIgICAgID0gMjU5MjAwLCAgLy8vPCBtYXhpbXVtIGRlbGF5IHRpbWVyIHZhbHVlIGZvciBhIFBlbmRpbmcgRGF0YXNldCBpbiBzZWNvbmRzCisgICAgICAgIGtEZWxheVRpbWVyTWluaW1hbCA9IDMwMDAwLCAgIC8vLzwgTWluaW11bSBEZWxheSBUaW1lciB2YWx1ZSBmb3IgYSBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXQgKG1zKQorICAgICAgICBrRGVsYXlUaW1lckRlZmF1bHQgPSAzMDAwMDAsICAvLy88IERlZmF1bHQgRGVsYXkgVGltZXIgdmFsdWUgZm9yIGEgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0IChtcykKKyAgICB9OworCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1EZWxheVRpbWVyOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENoYW5uZWwgTWFzayBFbnRyeSBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENoYW5uZWxNYXNrRW50cnkKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBDaGFubmVsUGFnZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDaGFubmVsUGFnZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Q2hhbm5lbFBhZ2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbUNoYW5uZWxQYWdlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDaGFubmVsUGFnZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsUGFnZSAgVGhlIENoYW5uZWxQYWdlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDaGFubmVsUGFnZSh1aW50OF90IGFDaGFubmVsUGFnZSkgeyBtQ2hhbm5lbFBhZ2UgPSBhQ2hhbm5lbFBhZ2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIE1hc2tMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTWFza0xlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TWFza0xlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBtTWFza0xlbmd0aDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTWFza0xlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNYXNrTGVuZ3RoICBUaGUgTWFza0xlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWFza0xlbmd0aCh1aW50OF90IGFNYXNrTGVuZ3RoKSB7IG1NYXNrTGVuZ3RoID0gYU1hc2tMZW5ndGg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgYml0IGNvcnJlc3BvbmRpbmcgdG8gQHAgYUNoYW5uZWwgaW4gQ2hhbm5lbE1hc2suCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hhbm5lbCAgVGhlIGNoYW5uZWwgaW4gQ2hhbm5lbE1hc2sgdG8gY2xlYXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyQ2hhbm5lbCh1aW50OF90IGFDaGFubmVsKSB7CisgICAgICAgIHVpbnQ4X3QgKm1hc2sgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4odGhpcykgKyBzaXplb2YoKnRoaXMpOworICAgICAgICBtYXNrW2FDaGFubmVsIC8gOF0gJj0gfigweDgwID4+IChhQ2hhbm5lbCAlIDgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBiaXQgY29ycmVzcG9uZGluZyB0byBAcCBhQ2hhbm5lbCBpbiBDaGFubmVsTWFzay4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsICBUaGUgY2hhbm5lbCBpbiBDaGFubmVsTWFzayB0byBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENoYW5uZWwodWludDhfdCBhQ2hhbm5lbCkgeworICAgICAgICB1aW50OF90ICptYXNrID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KHRoaXMpICsgc2l6ZW9mKCp0aGlzKTsKKyAgICAgICAgbWFza1thQ2hhbm5lbCAvIDhdIHw9IDB4ODAgPj4gKGFDaGFubmVsICUgOCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBiaXQgY29ycmVzcG9uZGluZyB0byBAcCBhQ2hhbm5lbCBpbiBDaGFubmVsTWFzayBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hhbm5lbCAgVGhlIGNoYW5uZWwgaW4gQ2hhbm5lbE1hc2sgdG8gZ2V0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0NoYW5uZWxTZXQodWludDhfdCBhQ2hhbm5lbCkgY29uc3QgeworICAgICAgICBjb25zdCB1aW50OF90ICptYXNrID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KHRoaXMpICsgc2l6ZW9mKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIChhQ2hhbm5lbCA8IChtTWFza0xlbmd0aCAqIDgpKSA/ICgobWFza1thQ2hhbm5lbCAvIDhdICYgKDB4ODAgPj4gKGFDaGFubmVsICUgOCkpKSAhPSAwKSA6IGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1DaGFubmVsUGFnZTsKKyAgICB1aW50OF90IG1NYXNrTGVuZ3RoOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENoYW5uZWwgTWFzayBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDaGFubmVsTWFza1RsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtDaGFubmVsTWFzayk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBDaGFubmVsIE1hc2sgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ2hhbm5lbE1hc2swVGx2OiBwdWJsaWMgQ2hhbm5lbE1hc2tUbHYsIHB1YmxpYyBDaGFubmVsTWFza0VudHJ5Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7CisgICAgICAgIFNldFR5cGUoa0NoYW5uZWxNYXNrKTsKKyAgICAgICAgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7CisgICAgICAgIFNldENoYW5uZWxQYWdlKDApOworICAgICAgICBTZXRNYXNrTGVuZ3RoKHNpemVvZihtTWFzaykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSAmJgorICAgICAgICAgICAgR2V0Q2hhbm5lbFBhZ2UoKSA9PSAwICYmCisgICAgICAgICAgICBHZXRNYXNrTGVuZ3RoKCkgPT0gc2l6ZW9mKG1NYXNrKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDaGFubmVsIE1hc2sgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQ2hhbm5lbCBNYXNrIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0TWFzayh2b2lkKSBjb25zdCB7IHJldHVybiBSZXZlcnNlMzIoSG9zdFN3YXAzMihtTWFzaykpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDaGFubmVsIE1hc2sgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWFzayAgVGhlIENoYW5uZWwgTWFzayB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWFzayh1aW50MzJfdCBhTWFzaykgeyBtTWFzayA9IEhvc3RTd2FwMzIoUmV2ZXJzZTMyKGFNYXNrKSk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtTWFzazsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBDb3VudCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDb3VudFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtDb3VudCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldENvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Db3VudDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ291bnQgIFRoZSBDb3VudCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q291bnQodWludDhfdCBhQ291bnQpIHsgbUNvdW50ID0gYUNvdW50OyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtQ291bnQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUGVyaW9kIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFBlcmlvZFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtQZXJpb2QpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBlcmlvZCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBQZXJpb2QgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRQZXJpb2Qodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUGVyaW9kKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUGVyaW9kIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBlcmlvZCAgVGhlIFBlcmlvZCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UGVyaW9kKHVpbnQxNl90IGFQZXJpb2QpIHsgbVBlcmlvZCA9IEhvc3RTd2FwMTYoYVBlcmlvZCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtUGVyaW9kOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNjYW4gRHVyYXRpb24gVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU2NhbkR1cmF0aW9uVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1NjYW5EdXJhdGlvbik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU2NhbiBEdXJhdGlvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTY2FuIER1cmF0aW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0U2NhbkR1cmF0aW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVNjYW5EdXJhdGlvbik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFNjYW4gRHVyYXRpb24gdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2NhbkR1cmF0aW9uICBUaGUgU2NhbiBEdXJhdGlvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2NhbkR1cmF0aW9uKHVpbnQxNl90IGFTY2FuRHVyYXRpb24pIHsgbVNjYW5EdXJhdGlvbiA9IEhvc3RTd2FwMTYoYVNjYW5EdXJhdGlvbik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtU2NhbkR1cmF0aW9uOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEVuZXJneSBMaXN0IFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEVuZXJneUxpc3RUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrRW5lcmd5TGlzdCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBQcm92aXNpb25pbmcgVVJMIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFByb3Zpc2lvbmluZ1VybFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtQcm92aXNpb25pbmdVcmwpOyBTZXRMZW5ndGgoMCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQcm92aXNpb25pbmcgVVJMIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFByb3Zpc2lvbmluZyBVUkwgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBjaGFyICpHZXRQcm92aXNpb25pbmdVcmwodm9pZCkgY29uc3QgeyByZXR1cm4gbVByb3Zpc2lvbmluZ1VybDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUHJvdmlzaW9uaW5nIFVSTCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcm92aXNpb25pbmdVcmwgIEEgcG9pbnRlciB0byB0aGUgUHJvdmlzaW9uaW5nIFVSTCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0UHJvdmlzaW9uaW5nVXJsKGNvbnN0IGNoYXIgKmFQcm92aXNpb25pbmdVcmwpIHsKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNpemVfdCBsZW4gPSBhUHJvdmlzaW9uaW5nVXJsID8gc3RybmxlbihhUHJvdmlzaW9uaW5nVXJsLCBrTWF4TGVuZ3RoICsgMSkgOiAwOworCisgICAgICAgIFZlcmlmeU9yRXhpdChsZW4gPD0ga01heExlbmd0aCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBTZXRMZW5ndGgoc3RhdGljX2Nhc3Q8dWludDhfdD4obGVuKSk7CisKKyAgICAgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgICAgIG1lbWNweShtUHJvdmlzaW9uaW5nVXJsLCBhUHJvdmlzaW9uaW5nVXJsLCBsZW4pOworICAgICAgICB9CisKK2V4aXQ6CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heExlbmd0aCA9IDY0LAorICAgIH07CisKKyAgICBjaGFyIG1Qcm92aXNpb25pbmdVcmxba01heExlbmd0aF07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVmVuZG9yIE5hbWUgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVmVuZG9yTmFtZVRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtWZW5kb3JOYW1lKTsgU2V0TGVuZ3RoKDApOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpIDw9IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVmVuZG9yIE5hbWUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVmVuZG9yIE5hbWUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBjaGFyICpHZXRWZW5kb3JOYW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1WZW5kb3JOYW1lOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBWZW5kb3IgTmFtZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZW5kb3JOYW1lICBBIHBvaW50ZXIgdG8gdGhlIFZlbmRvciBOYW1lIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRWZW5kb3JOYW1lKGNvbnN0IGNoYXIgKmFWZW5kb3JOYW1lKSB7CisgICAgICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBzaXplX3QgbGVuID0gKGFWZW5kb3JOYW1lID09IE5VTEwpID8gMCA6IHN0cm5sZW4oYVZlbmRvck5hbWUsIHNpemVvZihtVmVuZG9yTmFtZSkgKyAxKTsKKworICAgICAgICBWZXJpZnlPckV4aXQobGVuIDw9IHNpemVvZihtVmVuZG9yTmFtZSksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICAgICAgU2V0TGVuZ3RoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbikpOworCisgICAgICAgIGlmIChsZW4gPiAwKSB7CisgICAgICAgICAgICBtZW1jcHkobVZlbmRvck5hbWUsIGFWZW5kb3JOYW1lLCBsZW4pOworICAgICAgICB9CisKK2V4aXQ6CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heExlbmd0aCA9IDMyLAorICAgIH07CisKKyAgICBjaGFyIG1WZW5kb3JOYW1lW2tNYXhMZW5ndGhdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFZlbmRvciBNb2RlbCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBWZW5kb3JNb2RlbFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtWZW5kb3JNb2RlbCk7IFNldExlbmd0aCgwKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA8PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFZlbmRvciBNb2RlbCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBWZW5kb3IgTW9kZWwgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBjaGFyICpHZXRWZW5kb3JNb2RlbCh2b2lkKSBjb25zdCB7IHJldHVybiBtVmVuZG9yTW9kZWw7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFZlbmRvciBNb2RlbCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZW5kb3JNb2RlbCAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgTW9kZWwgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFZlbmRvck1vZGVsKGNvbnN0IGNoYXIgKmFWZW5kb3JNb2RlbCkgeworICAgICAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IChhVmVuZG9yTW9kZWwgPT0gTlVMTCkgPyAwIDogc3RybmxlbihhVmVuZG9yTW9kZWwsIHNpemVvZihtVmVuZG9yTW9kZWwpICsgMSk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxlbiA8PSBzaXplb2YobVZlbmRvck1vZGVsKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBTZXRMZW5ndGgoc3RhdGljX2Nhc3Q8dWludDhfdD4obGVuKSk7CisKKyAgICAgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgICAgIG1lbWNweShtVmVuZG9yTW9kZWwsIGFWZW5kb3JNb2RlbCwgbGVuKTsKKyAgICAgICAgfQorCitleGl0OgorICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNYXhMZW5ndGggPSAzMiwKKyAgICB9OworCisgICAgY2hhciBtVmVuZG9yTW9kZWxba01heExlbmd0aF07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVmVuZG9yIFNXIFZlcnNpb24gVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVmVuZG9yU3dWZXJzaW9uVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1ZlbmRvclN3VmVyc2lvbik7IFNldExlbmd0aCgwKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA8PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFZlbmRvciBTVyBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFZlbmRvciBTVyBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqR2V0VmVuZG9yU3dWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1WZW5kb3JTd1ZlcnNpb247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFZlbmRvciBTVyBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlbmRvclN3VmVyc2lvbiAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgU1cgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0VmVuZG9yU3dWZXJzaW9uKGNvbnN0IGNoYXIgKmFWZW5kb3JTd1ZlcnNpb24pIHsKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNpemVfdCBsZW4gPSAoYVZlbmRvclN3VmVyc2lvbiA9PSBOVUxMKSA/IDAgOiBzdHJubGVuKGFWZW5kb3JTd1ZlcnNpb24sIHNpemVvZihtVmVuZG9yU3dWZXJzaW9uKSArIDEpOworCisgICAgICAgIFZlcmlmeU9yRXhpdChsZW4gPD0gc2l6ZW9mKG1WZW5kb3JTd1ZlcnNpb24pLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgICAgIFNldExlbmd0aChzdGF0aWNfY2FzdDx1aW50OF90PihsZW4pKTsKKworICAgICAgICBpZiAobGVuID4gMCkgeworICAgICAgICAgICAgbWVtY3B5KG1WZW5kb3JTd1ZlcnNpb24sIGFWZW5kb3JTd1ZlcnNpb24sIGxlbik7CisgICAgICAgIH0KKworZXhpdDoKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4TGVuZ3RoID0gMTYsCisgICAgfTsKKworICAgIGNoYXIgbVZlbmRvclN3VmVyc2lvbltrTWF4TGVuZ3RoXTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBWZW5kb3IgRGF0YSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBWZW5kb3JEYXRhVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1ZlbmRvckRhdGEpOyBTZXRMZW5ndGgoMCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBWZW5kb3IgRGF0YSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBWZW5kb3IgRGF0YSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IGNoYXIgKkdldFZlbmRvckRhdGEodm9pZCkgY29uc3QgeyByZXR1cm4gbVZlbmRvckRhdGE7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFZlbmRvciBEYXRhIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlbmRvckRhdGEgIEEgcG9pbnRlciB0byB0aGUgVmVuZG9yIERhdGEgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFZlbmRvckRhdGEoY29uc3QgY2hhciAqYVZlbmRvckRhdGEpIHsKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNpemVfdCBsZW4gPSAoYVZlbmRvckRhdGEgPT0gTlVMTCkgPyAwIDogc3RybmxlbihhVmVuZG9yRGF0YSwgc2l6ZW9mKG1WZW5kb3JEYXRhKSArIDEpOworCisgICAgICAgIFZlcmlmeU9yRXhpdChsZW4gPD0gc2l6ZW9mKG1WZW5kb3JEYXRhKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBTZXRMZW5ndGgoc3RhdGljX2Nhc3Q8dWludDhfdD4obGVuKSk7CisKKyAgICAgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgICAgIG1lbWNweShtVmVuZG9yRGF0YSwgYVZlbmRvckRhdGEsIGxlbik7CisgICAgICAgIH0KKworZXhpdDoKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4TGVuZ3RoID0gNjQsCisgICAgfTsKKworICAgIGNoYXIgbVZlbmRvckRhdGFba01heExlbmd0aF07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVmVuZG9yIFN0YWNrIFZlcnNpb24gVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVmVuZG9yU3RhY2tWZXJzaW9uVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqLworICAgIFZlbmRvclN0YWNrVmVyc2lvblRsdih2b2lkKSA6CisgICAgICAgIG1CdWlsZFJldmlzaW9uKDApLAorICAgICAgICBtTWlub3JNYWpvcigwKSB7fQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1ZlbmRvclN0YWNrVmVyc2lvbik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU3RhY2sgVmVuZG9yIE9VSSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBWZW5kb3IgU3RhY2sgVmVuZG9yIE9VSSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldE91aSh2b2lkKSBjb25zdCB7CisgICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1PdWlbMF0pIDw8IDE2KSB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4obU91aVsxXSkgPDwgOCkgfCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obU91aVsyXSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU3RhY2sgVmVuZG9yIE9VSSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFPdWkgIFRoZSBWZW5kb3IgU3RhY2sgVmVuZG9yIE9VSSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0T3VpKHVpbnQzMl90IGFPdWkpIHsKKyAgICAgICAgbU91aVswXSA9IChhT3VpID4+IDE2KSAmIDB4ZmY7CisgICAgICAgIG1PdWlbMV0gPSAoYU91aSA+PiA4KSAmIDB4ZmY7CisgICAgICAgIG1PdWlbMl0gPSBhT3VpICYgMHhmZjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBCdWlsZCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBCdWlsZCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldEJ1aWxkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChIb3N0U3dhcDE2KG1CdWlsZFJldmlzaW9uKSAmIGtCdWlsZE1hc2spID4+IGtCdWlsZE9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQnVpbGQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVpbGQgIFRoZSBCdWlsZCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QnVpbGQodWludDE2X3QgYUJ1aWxkKSB7CisgICAgICAgIG1CdWlsZFJldmlzaW9uID0gSG9zdFN3YXAxNigoSG9zdFN3YXAxNihtQnVpbGRSZXZpc2lvbikgJiB+a0J1aWxkTWFzaykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhQnVpbGQgPDwga0J1aWxkT2Zmc2V0KSAmIGtCdWlsZE1hc2spKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSZXZpc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSZXZpc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0UmV2aXNpb24odm9pZCkgY29uc3QgeyByZXR1cm4gKEhvc3RTd2FwMTYobUJ1aWxkUmV2aXNpb24pICYga1Jldk1hc2spID4+IGtSZXZPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJldmlzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJldmlzaW9uICBUaGUgUmV2aXNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJldmlzaW9uKHVpbnQ4X3QgYVJldmlzaW9uKSB7CisgICAgICAgIG1CdWlsZFJldmlzaW9uID0gSG9zdFN3YXAxNigoSG9zdFN3YXAxNihtQnVpbGRSZXZpc2lvbikgJiB+a1Jldk1hc2spIHwgKChhUmV2aXNpb24gPDwga1Jldk9mZnNldCkgJiBrUmV2TWFzaykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1pbm9yIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1pbm9yIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRNaW5vcih2b2lkKSBjb25zdCB7IHJldHVybiAobU1pbm9yTWFqb3IgJiBrTWlub3JNYXNrKSA+PiBrTWlub3JPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1pbm9yIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1pbm9yICBUaGUgTWlub3IgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1pbm9yKHVpbnQ4X3QgYU1pbm9yKSB7CisgICAgICAgIG1NaW5vck1ham9yID0gKG1NaW5vck1ham9yICYgfmtNaW5vck1hc2spIHwgKChhTWlub3IgPDwga01pbm9yT2Zmc2V0KSAmIGtNaW5vck1hc2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1ham9yIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1ham9yIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRNYWpvcih2b2lkKSBjb25zdCB7IHJldHVybiAobU1pbm9yTWFqb3IgJiBrTWFqb3JNYXNrKSA+PiBrTWFqb3JPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1ham9yIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhTWFqb3IgIFRoZSBNYWpvciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWFqb3IodWludDhfdCBhTWFqb3IpIHsKKyAgICAgICAgbU1pbm9yTWFqb3IgPSAobU1pbm9yTWFqb3IgJiB+a01ham9yTWFzaykgfCAoKGFNYWpvciA8PCBrTWFqb3JPZmZzZXQpICYga01ham9yTWFzayk7CisgICAgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU91aVszXTsKKworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtCdWlsZE9mZnNldCA9IDQsCisgICAgICAgIGtCdWlsZE1hc2sgPSAweGZmZiA8PCBrQnVpbGRPZmZzZXQsCisgICAgICAgIGtSZXZPZmZzZXQgPSAwLAorICAgICAgICBrUmV2TWFzayA9IDB4ZiA8PCBrQnVpbGRPZmZzZXQsCisgICAgfTsKKyAgICB1aW50MTZfdCBtQnVpbGRSZXZpc2lvbjsKKworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNaW5vck9mZnNldCA9IDQsCisgICAgICAgIGtNaW5vck1hc2sgPSAweGYgPDwga01pbm9yT2Zmc2V0LAorICAgICAgICBrTWFqb3JPZmZzZXQgPSAwLAorICAgICAgICBrTWFqb3JNYXNrID0gMHhmIDw8IGtNYWpvck9mZnNldCwKKyAgICB9OworICAgIHVpbnQ4X3QgbU1pbm9yTWFqb3I7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgRGlzY292ZXJ5IFJlcXVlc3QgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgRGlzY292ZXJ5UmVxdWVzdFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtEaXNjb3ZlcnlSZXF1ZXN0KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IG1GbGFncyA9IDA7IG1SZXNlcnZlZCA9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFZlcnNpb24odm9pZCkgY29uc3QgeyByZXR1cm4gbUZsYWdzID4+IGtWZXJzaW9uT2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlcnNpb24gIFRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRWZXJzaW9uKHVpbnQ4X3QgYVZlcnNpb24pIHsKKyAgICAgICAgbUZsYWdzID0gKG1GbGFncyAmIH5rVmVyc2lvbk1hc2spIHwgKChhVmVyc2lvbiA8PCBrVmVyc2lvbk9mZnNldCkgJiBrVmVyc2lvbk1hc2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSm9pbmVyIGZsYWcgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIEpvaW5lciBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSm9pbmVyIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNKb2luZXIodm9pZCkgeyByZXR1cm4gKG1GbGFncyAmIGtKb2luZXJNYXNrKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBKb2luZXIgZmxhZy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFKb2luZXIgIFRSVUUgaWYgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEpvaW5lcihib29sIGFKb2luZXIpIHsKKyAgICAgICAgaWYgKGFKb2luZXIpIHsKKyAgICAgICAgICAgIG1GbGFncyB8PSBrSm9pbmVyTWFzazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1GbGFncyAmPSB+a0pvaW5lck1hc2s7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1ZlcnNpb25PZmZzZXQgPSA0LAorICAgICAgICBrVmVyc2lvbk1hc2sgPSAweGYgPDwga1ZlcnNpb25PZmZzZXQsCisgICAgICAgIGtKb2luZXJPZmZzZXQgPSAzLAorICAgICAgICBrSm9pbmVyTWFzayA9IDEgPDwga0pvaW5lck9mZnNldCwKKyAgICB9OworICAgIHVpbnQ4X3QgbUZsYWdzOworICAgIHVpbnQ4X3QgbVJlc2VydmVkOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIERpc2NvdmVyeSBSZXNwb25zZSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBEaXNjb3ZlcnlSZXNwb25zZVRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtEaXNjb3ZlcnlSZXNwb25zZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyBtRmxhZ3MgPSAwOyBtUmVzZXJ2ZWQgPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1GbGFncyA+PiBrVmVyc2lvbk9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZXJzaW9uICBUaGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VmVyc2lvbih1aW50OF90IGFWZXJzaW9uKSB7CisgICAgICAgIG1GbGFncyA9IChtRmxhZ3MgJiB+a1ZlcnNpb25NYXNrKSB8ICgoYVZlcnNpb24gPDwga1ZlcnNpb25PZmZzZXQpICYga1ZlcnNpb25NYXNrKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIE5hdGl2ZSBDb21taXNzaW9uZXIgZmxhZyBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnIGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzTmF0aXZlQ29tbWlzc2lvbmVyKHZvaWQpIHsgcmV0dXJuIChtRmxhZ3MgJiBrTmF0aXZlTWFzaykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5hdGl2ZUNvbW1pc3Npb25lciAgVFJVRSBpZiBzZXQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TmF0aXZlQ29tbWlzc2lvbmVyKGJvb2wgYU5hdGl2ZUNvbW1pc3Npb25lcikgeworICAgICAgICBpZiAoYU5hdGl2ZUNvbW1pc3Npb25lcikgeworICAgICAgICAgICAgbUZsYWdzIHw9IGtOYXRpdmVNYXNrOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbUZsYWdzICY9IH5rTmF0aXZlTWFzazsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVmVyc2lvbk9mZnNldCA9IDQsCisgICAgICAgIGtWZXJzaW9uTWFzayA9IDB4ZiA8PCBrVmVyc2lvbk9mZnNldCwKKyAgICAgICAga05hdGl2ZU9mZnNldCA9IDMsCisgICAgICAgIGtOYXRpdmVNYXNrID0gMSA8PCBrTmF0aXZlT2Zmc2V0LAorICAgIH07CisgICAgdWludDhfdCBtRmxhZ3M7CisgICAgdWludDhfdCBtUmVzZXJ2ZWQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUVTSENPUF9UTFZTX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvcGFuaWRfcXVlcnlfY2xpZW50LmNwcCBiL3NyYy9jb3JlL21lc2hjb3AvcGFuaWRfcXVlcnlfY2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2Y1YWVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9wYW5pZF9xdWVyeV9jbGllbnQuY3BwCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBQQU4gSUQgUXVlcnkgQ2xpZW50LgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgInBhbmlkX3F1ZXJ5X2NsaWVudC50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAicGFuaWRfcXVlcnlfY2xpZW50LmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3BfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKK25hbWVzcGFjZSBvdCB7CisKK1BhbklkUXVlcnlDbGllbnQ6OlBhbklkUXVlcnlDbGllbnQoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1DYWxsYmFjayhOVUxMKSwKKyAgICBtQ29udGV4dChOVUxMKSwKKyAgICBtUGFuSWRRdWVyeShPVF9VUklfUEFUSF9QQU5JRF9DT05GTElDVCwgJlBhbklkUXVlcnlDbGllbnQ6OkhhbmRsZUNvbmZsaWN0LCB0aGlzKQoreworICAgIGFUaHJlYWROZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobVBhbklkUXVlcnkpOworfQorCitvdEVycm9yIFBhbklkUXVlcnlDbGllbnQ6OlNlbmRRdWVyeSh1aW50MTZfdCBhUGFuSWQsIHVpbnQzMl90IGFDaGFubmVsTWFzaywgY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc2hDb1A6OkNvbW1pc3Npb25lclNlc3Npb25JZFRsdiBzZXNzaW9uSWQ7CisgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IGNoYW5uZWxNYXNrOworICAgIE1lc2hDb1A6OlBhbklkVGx2IHBhbklkOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuSXNBY3RpdmUoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGhlYWRlci5Jbml0KGFBZGRyZXNzLklzTXVsdGljYXN0KCkgPyBPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFIDogT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLAorICAgICAgICAgICAgICAgIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfUEFOSURfUVVFUlkpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBNZXNoQ29QOjpOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBzZXNzaW9uSWQuSW5pdCgpOworICAgIHNlc3Npb25JZC5TZXRDb21taXNzaW9uZXJTZXNzaW9uSWQobmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuR2V0U2Vzc2lvbklkKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCkpKTsKKworICAgIGNoYW5uZWxNYXNrLkluaXQoKTsKKyAgICBjaGFubmVsTWFzay5TZXRNYXNrKGFDaGFubmVsTWFzayk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzaykpKTsKKworICAgIHBhbklkLkluaXQoKTsKKyAgICBwYW5JZC5TZXRQYW5JZChhUGFuSWQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnBhbklkLCBzaXplb2YocGFuSWQpKSk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihhQWRkcmVzcyk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChuZXRpZi5HZXRJbnRlcmZhY2VJZCgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBwYW5pZCBxdWVyeSIpOworCisgICAgbUNhbGxiYWNrID0gYUNhbGxiYWNrOworICAgIG1Db250ZXh0ID0gYUNvbnRleHQ7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIFBhbklkUXVlcnlDbGllbnQ6OkhhbmRsZUNvbmZsaWN0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxQYW5JZFF1ZXJ5Q2xpZW50ICo+KGFDb250ZXh0KS0+SGFuZGxlQ29uZmxpY3QoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgUGFuSWRRdWVyeUNsaWVudDo6SGFuZGxlQ29uZmxpY3QoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgTWVzaENvUDo6UGFuSWRUbHYgcGFuSWQ7CisgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IGNoYW5uZWxNYXNrOworICAgIElwNjo6TWVzc2FnZUluZm8gcmVzcG9uc2VJbmZvKGFNZXNzYWdlSW5mbyk7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlY2VpdmVkIHBhbmlkIGNvbmZsaWN0Iik7CisKKyAgICBTdWNjZXNzT3JFeGl0KE1lc2hDb1A6OlRsdjo6R2V0VGx2KGFNZXNzYWdlLCBNZXNoQ29QOjpUbHY6OmtQYW5JZCwgc2l6ZW9mKHBhbklkKSwgcGFuSWQpKTsKKyAgICBWZXJpZnlPckV4aXQocGFuSWQuSXNWYWxpZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoTWVzaENvUDo6VGx2OjpHZXRUbHYoYU1lc3NhZ2UsIE1lc2hDb1A6OlRsdjo6a0NoYW5uZWxNYXNrLCBzaXplb2YoY2hhbm5lbE1hc2spLCBjaGFubmVsTWFzaykpOworICAgIFZlcmlmeU9yRXhpdChjaGFubmVsTWFzay5Jc1ZhbGlkKCkpOworCisgICAgaWYgKG1DYWxsYmFjayAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbUNhbGxiYWNrKHBhbklkLkdldFBhbklkKCksIGNoYW5uZWxNYXNrLkdldE1hc2soKSwgbUNvbnRleHQpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQobmV0aWYuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCByZXNwb25zZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgcGFuaWQgcXVlcnkgY29uZmxpY3QgcmVzcG9uc2UiKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL3BhbmlkX3F1ZXJ5X2NsaWVudC5ocHAgYi9zcmMvY29yZS9tZXNoY29wL3BhbmlkX3F1ZXJ5X2NsaWVudC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhNjgwNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvcGFuaWRfcXVlcnlfY2xpZW50LmhwcApAQCAtMCwwICsxLDk1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgcmVzcG9uZGluZyB0byBQQU5JRCBRdWVyeSBSZXF1ZXN0cy4KKyAqLworCisjaWZuZGVmIFBBTklEX1FVRVJZX0NMSUVOVF9IUFBfCisjZGVmaW5lIFBBTklEX1FVRVJZX0NMSUVOVF9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbW1pc3Npb25lci5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgaGFuZGxpbmcgUEFOSUQgUXVlcnkgUmVxdWVzdHMuCisgKgorICovCitjbGFzcyBQYW5JZFF1ZXJ5Q2xpZW50OiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgUGFuSWRRdWVyeUNsaWVudChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgUEFOIElEIFF1ZXJ5IG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgICAgICAgICBUaGUgUEFOIElEIHRvIHF1ZXJ5LgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsTWFzayAgIFRoZSBjaGFubmVsIG1hc2sgdmFsdWUuCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICAgICAgQSBwb2ludGVyIHRvIHRoZSBJUHY2IGRlc3RpbmF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBvbiByZWNlaXZpbmcgYW4gRW5lcmd5IFJlcG9ydCBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIFBBTiBJRCBRdWVyeSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgdG8gZ2VuZXJhdGUgYSBQQU4gSUQgUXVlcnkgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZFF1ZXJ5KHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCBjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgIG90Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIEhhbmRsZUNvbmZsaWN0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUNvbmZsaWN0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBvdENvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFjayBtQ2FsbGJhY2s7CisgICAgdm9pZCAqbUNvbnRleHQ7CisKKyAgICBDb2FwOjpSZXNvdXJjZSBtUGFuSWRRdWVyeTsKK307CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBQQU5JRF9RVUVSWV9DTElFTlRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC90aW1lc3RhbXAuY3BwIGIvc3JjL2NvcmUvbWVzaGNvcC90aW1lc3RhbXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YTMzNDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL3RpbWVzdGFtcC5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBjb21tb24gTWVzaENvUCB0aW1lc3RhbXAgcHJvY2Vzc2luZy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInRpbWVzdGFtcC5ocHAiCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitpbnQgVGltZXN0YW1wOjpDb21wYXJlKGNvbnN0IFRpbWVzdGFtcCAmYUNvbXBhcmUpIGNvbnN0Cit7CisgICAgdWludDY0X3QgdGhpc1NlY29uZHMgPSBHZXRTZWNvbmRzKCk7CisgICAgdWludDY0X3QgY29tcGFyZVNlY29uZHMgPSBhQ29tcGFyZS5HZXRTZWNvbmRzKCk7CisgICAgdWludDE2X3QgdGhpc1RpY2tzID0gR2V0VGlja3MoKTsKKyAgICB1aW50MTZfdCBjb21wYXJlVGlja3MgPSBhQ29tcGFyZS5HZXRUaWNrcygpOworICAgIGludCBydmFsOworCisgICAgaWYgKGNvbXBhcmVTZWNvbmRzID4gdGhpc1NlY29uZHMpCisgICAgeworICAgICAgICBydmFsID0gMTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29tcGFyZVNlY29uZHMgPCB0aGlzU2Vjb25kcykKKyAgICB7CisgICAgICAgIHJ2YWwgPSAtMTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29tcGFyZVRpY2tzID4gdGhpc1RpY2tzKQorICAgIHsKKyAgICAgICAgcnZhbCA9IDE7CisgICAgfQorICAgIGVsc2UgaWYgKGNvbXBhcmVUaWNrcyA8IHRoaXNUaWNrcykKKyAgICB7CisgICAgICAgIHJ2YWwgPSAtMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcnZhbCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBNZXNoQ29QCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvdGltZXN0YW1wLmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvdGltZXN0YW1wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjVhN2JhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC90aW1lc3RhbXAuaHBwCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIE1lc2hDb1AgdGltZXN0YW1wcy4KKyAqCisgKi8KKworI2lmbmRlZiBNRVNIQ09QX1RJTUVTVEFNUF9IUFBfCisjZGVmaW5lIE1FU0hDT1BfVElNRVNUQU1QX0hQUF8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS90b29sY2hhaW4uaD4KKworI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBUaW1lc3RhbXAgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBUaW1lc3RhbXAKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVGltZXN0YW1wCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtZW1zZXQobVNlY29uZHMsIDAsIHNpemVvZihtU2Vjb25kcykpOyBtVGlja3MgPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb21wYXJlcyB0aGlzIHRpbWVzdGFtcCB0byBhbm90aGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbXBhcmUgIEEgcmVmZXJlbmNlIHRvIHRoZSB0aW1lc3RhbXAgdG8gY29tcGFyZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgLTEgIGlmIEBwIGFDb21wYXJlIGlzIGxlc3MgdGhhbiB0aGlzIHRpbWVzdGFtcC4KKyAgICAgKiBAcmV0dmFsICAwICBpZiBAcCBhQ29tcGFyZSBpcyBlcXVhbCB0byB0aGlzIHRpbWVzdGFtcC4KKyAgICAgKiBAcmV0dmFsICAxICBpZiBAcCBhQ29tcGFyZSBpcyBncmVhdGVyIHRoYW4gdGhpcyB0aW1lc3RhbXAuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgQ29tcGFyZShjb25zdCBUaW1lc3RhbXAgJmFDb21wYXJlKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFNlY29uZHMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgU2Vjb25kcyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ2NF90IEdldFNlY29uZHModm9pZCkgY29uc3QgeworICAgICAgICB1aW50NjRfdCBzZWNvbmRzID0gMDsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihtU2Vjb25kcyk7IGkrKykgeworICAgICAgICAgICAgc2Vjb25kcyA9IChzZWNvbmRzIDw8IDgpIHwgbVNlY29uZHNbaV07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2Vjb25kczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTZWNvbmRzIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlY29uZHMgIFRoZSBTZWNvbmRzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWNvbmRzKHVpbnQ2NF90IGFTZWNvbmRzKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1TZWNvbmRzKTsgaSsrLCBhU2Vjb25kcyA+Pj0gOCkgeworICAgICAgICAgICAgbVNlY29uZHNbc2l6ZW9mKG1TZWNvbmRzKSAtIDEgLSBpXSA9IGFTZWNvbmRzICYgMHhmZjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFRpY2tzIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRpY2tzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0VGlja3Modm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtVGlja3MpID4+IGtUaWNrc09mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVGlja3MgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGlja3MgIFRoZSBUaWNrcyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VGlja3ModWludDE2X3QgYVRpY2tzKSB7CisgICAgICAgIG1UaWNrcyA9IEhvc3RTd2FwMTYoKEhvc3RTd2FwMTYobVRpY2tzKSAmIH5rVGlja3NNYXNrKSB8ICgoYVRpY2tzIDw8IGtUaWNrc09mZnNldCkgJiBrVGlja3NNYXNrKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQXV0aG9yaXRhdGl2ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBBdXRob3JpdGF0aXZlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBHZXRBdXRob3JpdGF0aXZlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChIb3N0U3dhcDE2KG1UaWNrcykgJiBrQXV0aG9yaXRhdGl2ZU1hc2spICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEF1dGhvcml0YXRpdmUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQXV0aG9yaXRhdGl2ZSAgVGhlIEF1dGhvcml0YXRpdmUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEF1dGhvcml0YXRpdmUoYm9vbCBhQXV0aG9yaXRhdGl2ZSkgeworICAgICAgICBtVGlja3MgPSBIb3N0U3dhcDE2KChIb3N0U3dhcDE2KG1UaWNrcykgJiBrVGlja3NNYXNrKSB8ICgoYUF1dGhvcml0YXRpdmUgPDwga0F1dGhvcml0YXRpdmVPZmZzZXQpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0F1dGhvcml0YXRpdmVNYXNrKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVNlY29uZHNbNl07CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVGlja3NPZmZzZXQgICAgICAgICA9IDEsCisgICAgICAgIGtUaWNrc01hc2sgICAgICAgICAgID0gMHg3ZmZmIDw8IGtUaWNrc09mZnNldCwKKyAgICAgICAga0F1dGhvcml0YXRpdmVPZmZzZXQgPSAwLAorICAgICAgICBrQXV0aG9yaXRhdGl2ZU1hc2sgICA9IDEgPDwga0F1dGhvcml0YXRpdmVPZmZzZXQsCisgICAgfTsKKyAgICB1aW50MTZfdCBtVGlja3M7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1FU0hDT1BfVElNRVNUQU1QX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9kaGNwNi5ocHAgYi9zcmMvY29yZS9uZXQvZGhjcDYuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMmEwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvZGhjcDYuaHBwCkBAIC0wLDAgKzEsNTg1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgREhDUHY2IFNlcnZpY2UuCisgKi8KKworI2lmbmRlZiBESENQNl9IUFBfCisjZGVmaW5lIERIQ1A2X0hQUF8KKworI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzI7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgRGhjcDYgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtZGhjcDYKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIERIQ1B2Ni4KKyAqCisgKiBAeworICoKKyAqLworCisKKy8qKgorICogREhDUHY2IGNvbnN0YW50CisgKgorICovCitlbnVtCit7CisgICAga0RoY3BDbGllbnRQb3J0ID0gNTQ2LAorICAgIGtEaGNwU2VydmVyUG9ydCA9IDU0NywKKyAgICBrVHJhbnNhY3Rpb25JZFNpemUgPSAzLAorICAgIGtMaW5rTGF5ZXJBZGRyZXNzTGVuID0gOCwKKyAgICBrSGFyZHdhcmVUeXBlRXVpNjQgPSAyNywKK307CisKKy8qKgorICogREhDUHY2IE1lc3NhZ2UgVHlwZXMKKyAqCisgKi8KK3R5cGVkZWYgZW51bSBUeXBlCit7CisgICAga1R5cGVTb2xpY2l0ID0gMSwKKyAgICBrVHlwZUFkdmVydGlzZSA9IDIsCisgICAga1R5cGVSZXF1ZXN0ID0gMywKKyAgICBrVHlwZUNvbmZpcm0gPSA0LAorICAgIGtUeXBlUmVuZXcgPSA1LAorICAgIGtUeXBlUmViaW5kID0gNiwKKyAgICBrVHlwZVJlcGx5ID0gNywKKyAgICBrVHlwZVJlbGVhc2UgPSA4LAorICAgIGtUeXBlRGVjbGluZSA9IDksCisgICAga1R5cGVSZWNvbmZpZ3VyZSA9IDEwLAorICAgIGtUeXBlSW5mb3JtYXRpb25SZXF1ZXN0ID0gMTEsCisgICAga1R5cGVSZWxheUZvcndhcmQgPSAxMiwKKyAgICBrVHlwZVJlbGF5UmVwbHkgPSAxMywKKyAgICBrVHlwZUxlYXNlUXVlcnkgPSAxNCwKKyAgICBrVHlwZUxlYXNlUXVlcnlSZXBseSA9IDE1LAorfSBUeXBlOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIERIQ1B2NiBoZWFkZXIuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgRGhjcDZIZWFkZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgREhDUHY2IGhlYWRlciB0byBhbGwgemVyb3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtVHlwZSA9IDA7IG1UcmFuc2FjdGlvbklkWzBdID0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgREhDUHY2IG1lc3NhZ2UgdHlwZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBESENQdjYgbWVzc2FnZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgVHlwZSBHZXRUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1UeXBlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgREhDUHY2IG1lc3NhZ2UgdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICBUaGUgREhDUHY2IG1lc3NhZ2UgdHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VHlwZShUeXBlIGFUeXBlKSB7IG1UeXBlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBESENQdjYgbWVzc2FnZSB0cmFuc2FjdGlvbiBpZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciBvZiBESENQdjYgbWVzc2FnZSB0cmFuc2FjdGlvbiBpZC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldFRyYW5zYWN0aW9uSWQodm9pZCkgeyByZXR1cm4gbVRyYW5zYWN0aW9uSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERIQ1B2NiBtZXNzYWdlIHRyYW5zYWN0aW9uIGlkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUJ1ZiAgVGhlIERIQ1B2NiBtZXNzYWdlIHRyYW5zYWN0aW9uIGlkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUcmFuc2FjdGlvbklkKHVpbnQ4X3QgKmFCdWYpIHsgbWVtY3B5KG1UcmFuc2FjdGlvbklkLCBhQnVmLCBrVHJhbnNhY3Rpb25JZFNpemUpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtVHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVHlwZQorICAgIHVpbnQ4X3QgbVRyYW5zYWN0aW9uSWRba1RyYW5zYWN0aW9uSWRTaXplXTsgICAgICAvLy88IFRyYW5zYWN0aW9uIElkCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBESENQdjYgT3B0aW9uIENvZGVzCisgKgorICovCit0eXBlZGVmIGVudW0gQ29kZQoreworICAgIGtPcHRpb25DbGllbnRJZGVudGlmaWVyID0gMSwKKyAgICBrT3B0aW9uU2VydmVySWRlbnRpZmllciA9IDIsCisgICAga09wdGlvbklhTmEgPSAzLAorICAgIGtPcHRpb25JYVRhID0gNCwKKyAgICBrT3B0aW9uSWFBZGRyZXNzID0gNSwKKyAgICBrT3B0aW9uUmVxdWVzdE9wdGlvbiA9IDYsCisgICAga09wdGlvblByZWZlcmVuY2UgPSA3LAorICAgIGtPcHRpb25FbGFwc2VkVGltZSA9IDgsCisgICAga09wdGlvblJlbGF5TWVzc2FnZSA9IDksCisgICAga09wdGlvbkF1dGhlbnRpY2F0aW9uID0gMTEsCisgICAga09wdGlvblNlcnZlclVuaWNhc3QgPSAxMiwKKyAgICBrT3B0aW9uU3RhdHVzQ29kZSA9IDEzLAorICAgIGtPcHRpb25SYXBpZENvbW1pdCA9IDE0LAorICAgIGtPcHRpb25Vc2VyQ2xhc3MgPSAxNSwKKyAgICBrT3B0aW9uVmVuZG9yQ2xhc3MgPSAxNiwKKyAgICBrT3B0aW9uVmVuZG9yU3BlY2lmaWNJbmZvcm1hdGlvbiA9IDE3LAorICAgIGtPcHRpb25JbnRlcmZhY2VJZCA9IDE4LAorICAgIGtPcHRpb25SZWNvbmZpZ3VyZU1lc3NhZ2UgPSAxOSwKKyAgICBrT3B0aW9uUmVjb25maWd1cmVBY2NlcHQgPSAyMCwKKyAgICBrT3B0aW9uTGVhc2VRdWVyeSA9IDQ0LAorICAgIGtPcHRpb25DbGllbnREYXRhID0gNDUsCisgICAga09wdGlvbkNsaWVudExhc3RUcmFuc2FjdGlvblRpbWUgPSA0NiwKK30gQ29kZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgREhDUHY2IG9wdGlvbi4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBEaGNwNk9wdGlvbgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBESENQdjYgb3B0aW9uIHRvIGFsbCB6ZXJvcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IG1Db2RlID0gMDsgbUxlbmd0aCA9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIERIQ1B2NiBvcHRpb24gY29kZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBESENQdjYgb3B0aW9uIGNvZGUuCisgICAgICoKKyAgICAgKi8KKyAgICBDb2RlIEdldENvZGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZT4oSG9zdFN3YXAxNihtQ29kZSkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBESENQdjYgb3B0aW9uIGNvZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29kZSAgVGhlIERIQ1B2NiBvcHRpb24gY29kZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q29kZShDb2RlIGFDb2RlKSB7IG1Db2RlID0gSG9zdFN3YXAxNihzdGF0aWNfY2FzdDx1aW50MTZfdD4oYUNvZGUpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGVuZ3RoIG9mIERIQ1B2NiBvcHRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbGVuZ3RoIG9mIERIQ1B2NiBvcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtTGVuZ3RoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbGVuZ3RoIG9mIERIQ1B2NiBvcHRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIERIQ1B2NiBvcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExlbmd0aCh1aW50MTZfdCBhTGVuZ3RoKSB7IG1MZW5ndGggPSBIb3N0U3dhcDE2KGFMZW5ndGgpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbUNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQ29kZQorICAgIHVpbnQxNl90IG1MZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IExlbmd0aAorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogRHVpZCBUeXBlCisgKgorICovCit0eXBlZGVmIGVudW0gRHVpZFR5cGUKK3sKKyAgICBrRHVpZExMVCA9IDEsCisgICAga0R1aWRFTiA9IDIsCisgICAga0R1aWRMTCA9IDMsCit9IER1aWRUeXBlOworCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ2xpZW50SWRlbnRpZmllcjogcHVibGljIERoY3A2T3B0aW9uCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIERIQ1B2NiBPcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRDb2RlKGtPcHRpb25DbGllbnRJZGVudGlmaWVyKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoRGhjcDZPcHRpb24pKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY2xpZW50IER1aWQgVHlwZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjbGllbnQgRHVpZCBUeXBlLgorICAgICAqCisgICAgICovCisgICAgRHVpZFR5cGUgR2V0RHVpZFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RHVpZFR5cGU+KEhvc3RTd2FwMTYobUR1aWRUeXBlKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGNsaWVudCBEdWlkIFR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRHVpZFR5cGUgIFRoZSBjbGllbnQgRHVpZCBUeXBlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREdWlkVHlwZShEdWlkVHlwZSBhRHVpZFR5cGUpIHsgbUR1aWRUeXBlID0gSG9zdFN3YXAxNihzdGF0aWNfY2FzdDx1aW50MTZfdD4oYUR1aWRUeXBlKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNsaWVudCBEdWlkIEhhcmR3YXJlVHlwZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjbGllbnQgRHVpZCBIYXJkd2FyZVR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXREdWlkSGFyZHdhcmVUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUR1aWRIYXJkd2FyZVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBjbGllbnQgRHVpZCBIYXJkd2FyZVR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRHVpZEhhcmR3YXJlVHlwZSAgVGhlIGNsaWVudCBEdWlkIEhhcmR3YXJlVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RHVpZEhhcmR3YXJlVHlwZSh1aW50MTZfdCBhRHVpZEhhcmR3YXJlVHlwZSkgeyBtRHVpZEhhcmR3YXJlVHlwZSA9IEhvc3RTd2FwMTYoYUR1aWRIYXJkd2FyZVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjbGllbnQgTGlua0xheWVyQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgY2xpZW50IExpbmtMYXllckFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90ICpHZXREdWlkTGlua0xheWVyQWRkcmVzcyh2b2lkKSB7IHJldHVybiBtRHVpZExpbmtMYXllckFkZHJlc3M7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGNsaWVudCBMaW5rTGF5ZXJBZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpbmtMYXllckFkZHJlc3MgVGhlIGNsaWVudCBMaW5rTGF5ZXJBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREdWlkTGlua0xheWVyQWRkcmVzcyhjb25zdCBNYWM6OkV4dEFkZHJlc3MgKmFEdWlkTGlua0xheWVyQWRkcmVzcykgeyBtZW1jcHkobUR1aWRMaW5rTGF5ZXJBZGRyZXNzLCBhRHVpZExpbmtMYXllckFkZHJlc3MsIHNpemVvZihNYWM6OkV4dEFkZHJlc3MpKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1EdWlkVHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRHVpZCBUeXBlCisgICAgdWludDE2X3QgbUR1aWRIYXJkd2FyZVR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBEdWlkIEhhcmR3YXJlVHlwZQorICAgIHVpbnQ4X3QgIG1EdWlkTGlua0xheWVyQWRkcmVzc1trTGlua0xheWVyQWRkcmVzc0xlbl07ICAgICAgIC8vLzwgRHVpZCBMaW5rTGF5ZXJBZGRyZXNzCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFNlcnZlcklkZW50aWZpZXI6IHB1YmxpYyBEaGNwNk9wdGlvbgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBESENQdjYgT3B0aW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0Q29kZShrT3B0aW9uU2VydmVySWRlbnRpZmllcik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKERoY3A2T3B0aW9uKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNlcnZlciBEdWlkIFR5cGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgc2VydmVyIER1aWQgVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIER1aWRUeXBlIEdldER1aWRUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PER1aWRUeXBlPihIb3N0U3dhcDE2KG1EdWlkVHlwZSkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBzZXJ2ZXIgRHVpZCBUeXBlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUR1aWRUeXBlICBUaGUgc2VydmVyIER1aWQgVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RHVpZFR5cGUoRHVpZFR5cGUgYUR1aWRUeXBlKSB7IG1EdWlkVHlwZSA9IEhvc3RTd2FwMTYoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFEdWlkVHlwZSkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzZXJ2ZXIgRHVpZCBIYXJkd2FyZVR5cGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgc2VydmVyIER1aWQgSGFyZHdhcmVUeXBlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0RHVpZEhhcmR3YXJlVHlwZSh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1EdWlkSGFyZHdhcmVUeXBlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgc2VydmVyIER1aWQgSGFyZHdhcmVUeXBlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUR1aWRIYXJkd2FyZVR5cGUgIFRoZSBzZXJ2ZXIgRHVpZCBIYXJkd2FyZVR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldER1aWRIYXJkd2FyZVR5cGUodWludDE2X3QgYUR1aWRIYXJkd2FyZVR5cGUpIHsgbUR1aWRIYXJkd2FyZVR5cGUgPSBIb3N0U3dhcDE2KGFEdWlkSGFyZHdhcmVUeXBlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2VydmVyIExpbmtMYXllckFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIHNlcnZlciBMaW5rTGF5ZXJBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCAqR2V0RHVpZExpbmtMYXllckFkZHJlc3Modm9pZCkgeyByZXR1cm4gbUR1aWRMaW5rTGF5ZXJBZGRyZXNzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBzZXJ2ZXIgTGlua0xheWVyQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rTGF5ZXJBZGRyZXNzIFRoZSBzZXJ2ZXIgTGlua0xheWVyQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RHVpZExpbmtMYXllckFkZHJlc3MoY29uc3QgTWFjOjpFeHRBZGRyZXNzICphRHVpZExpbmtMYXllckFkZHJlc3MpIHsgbWVtY3B5KG1EdWlkTGlua0xheWVyQWRkcmVzcywgYUR1aWRMaW5rTGF5ZXJBZGRyZXNzLCBzaXplb2YoTWFjOjpFeHRBZGRyZXNzKSk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtRHVpZFR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IER1aWQgVHlwZQorICAgIHVpbnQxNl90IG1EdWlkSGFyZHdhcmVUeXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRHVpZCBIYXJkd2FyZVR5cGUKKyAgICB1aW50OF90ICBtRHVpZExpbmtMYXllckFkZHJlc3Nba0xpbmtMYXllckFkZHJlc3NMZW5dOyAgICAgICAvLy88IER1aWQgTGlua0xheWVyQWRkcmVzcworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBJYU5hOiBwdWJsaWMgRGhjcDZPcHRpb24KK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgREhDUHY2IE9wdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldENvZGUoa09wdGlvbklhTmEpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihEaGNwNk9wdGlvbikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGNsaWVudCBJQUlELgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGNsaWVudCBJQUlELgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0SWFpZCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1JYWlkKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY2xpZW50IElBSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWFJZCAgVGhlIGNsaWVudCBJQUlELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJYWlkKHVpbnQzMl90IGFJYWlkKSB7IG1JYWlkID0gSG9zdFN3YXAzMihhSWFpZCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgVDEuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgVDEuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRUMSh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1UMSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHZhbHVlIG9mIFQxLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVQxICBUaGUgdmFsdWUgb2YgVDEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFQxKHVpbnQzMl90IGFUMSkgeyBtVDEgPSBIb3N0U3dhcDMyKGFUMSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgVDIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgVDIuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRUMih2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1UMik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHZhbHVlIG9mIFQyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVQyICBUaGUgdmFsdWUgb2YgVDIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFQyKHVpbnQzMl90IGFUMikgeyBtVDIgPSBIb3N0U3dhcDMyKGFUMik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtSWFpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBJQUlECisgICAgdWludDMyX3QgbVQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVDEKKyAgICB1aW50MzJfdCBtVDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBUMgorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBJYUFkZHJlc3M6IHB1YmxpYyBEaGNwNk9wdGlvbgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBESENQdjYgT3B0aW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0Q29kZShrT3B0aW9uSWFBZGRyZXNzKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoRGhjcDZPcHRpb24pKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdElwNkFkZHJlc3MgKkdldEFkZHJlc3Modm9pZCkgeyByZXR1cm4gJm1BZGRyZXNzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgVGhlIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBhZGRyZXNzIHRvIHNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QWRkcmVzcyhvdElwNkFkZHJlc3MgJmFBZGRyZXNzKSB7IG1lbWNweShtQWRkcmVzcy5tRmllbGRzLm04LCBhQWRkcmVzcy5tRmllbGRzLm04LCBzaXplb2Yob3RJcDZBZGRyZXNzKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHByZWZlcnJlZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHByZWZlcnJlZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0UHJlZmVycmVkTGlmZXRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtUHJlZmVycmVkTGlmZXRpbWUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBwcmVmZXJyZWQgbGlmZXRpbWUgb2YgdGhlIElQdjYgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmZXJyZWRMaWZldGltZSAgVGhlIHByZWZlcnJlZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQcmVmZXJyZWRMaWZldGltZSh1aW50MzJfdCBhUHJlZmVycmVkTGlmZXRpbWUpIHsgbVByZWZlcnJlZExpZmV0aW1lID0gSG9zdFN3YXAzMihhUHJlZmVycmVkTGlmZXRpbWUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB2YWxpZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHZhbGlkIGxpZmV0aW1lIG9mIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRWYWxpZExpZmV0aW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobVZhbGlkTGlmZXRpbWUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSB2YWxpZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZhbGlkTGlmZXRpbWUgIFRoZSB2YWxpZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRWYWxpZExpZmV0aW1lKHVpbnQzMl90IGFWYWxpZExpZmV0aW1lKSB7IG1WYWxpZExpZmV0aW1lID0gSG9zdFN3YXAzMihhVmFsaWRMaWZldGltZSk7IH0KKworcHJpdmF0ZToKKyAgICBvdElwNkFkZHJlc3MgbUFkZHJlc3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBJUHY2IGFkZHJlc3MKKyAgICB1aW50MzJfdCBtUHJlZmVycmVkTGlmZXRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8vPCBQcmVmZXJyZWQgTGlmZXRpbWUKKyAgICB1aW50MzJfdCBtVmFsaWRMaWZldGltZTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBWYWxpZCBMaWZldGltZQorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBFbGFwc2VkVGltZTogcHVibGljIERoY3A2T3B0aW9uCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIERIQ1B2NiBPcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRDb2RlKGtPcHRpb25FbGFwc2VkVGltZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKERoY3A2T3B0aW9uKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGVsYXBzZWQgdGltZSBzaW5jZSBzb2xpY2l0IHN0YXJ0cy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBlbGFwc2VkIHRpbWUgc2luY2Ugc29saWNpdCBzdGFydHMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRFbGFwc2VkVGltZSh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1FbGFwc2VkVGltZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGVsYXBzZWQgdGltZSBzaW5jZSBzb2xpY2l0IHN0YXJ0cy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUVsYXBzZWRUaW1lIFRoZSBlbGFwc2VkIHRpbWUgc2luY2Ugc29saWNpdCBzdGFydHMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEVsYXBzZWRUaW1lKHVpbnQxNl90IGFFbGFwc2VkVGltZSkgeyBtRWxhcHNlZFRpbWUgPSBIb3N0U3dhcDE2KGFFbGFwc2VkVGltZSk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtRWxhcHNlZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBFbGFwc2VkIHRpbWUKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFN0YXR1cyBDb2RlCisgKgorICovCit0eXBlZGVmIGVudW0gU3RhdHVzCit7CisgICAga1N0YXR1c1N1Y2Nlc3MgPSAwLAorICAgIGtTdGF0dXNVbnNwZWNGYWlsID0gMSwKKyAgICBrU3RhdHVzTm9BZGRyc0F2YWlsID0gMiwKKyAgICBrU3RhdHVzTm9CaW5kaW5nID0gMywKKyAgICBrU3RhdHVzTm90T25MaW5rID0gNCwKKyAgICBrU3RhdHVzVXNlTXVsdGljYXN0ID0gNSwKKyAgICBrVW5rbm93blF1ZXJ5VHlwZSA9IDcsCisgICAga01hbGZvcm1lZFF1ZXJ5ID0gOCwKKyAgICBrTm90Q29uZmlndXJlZCA9IDksCisgICAga05vdEFsbG93ZWQgPSAxMCwKK30gU3RhdHVzOworCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU3RhdHVzQ29kZTogcHVibGljIERoY3A2T3B0aW9uCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIERIQ1B2NiBPcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRDb2RlKGtPcHRpb25TdGF0dXNDb2RlKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoRGhjcDZPcHRpb24pKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc3RhdHVzIGNvZGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgc3RhdHVzIGNvZGUuCisgICAgICoKKyAgICAgKi8KKyAgICBTdGF0dXMgR2V0U3RhdHVzQ29kZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTdGF0dXM+KEhvc3RTd2FwMTYobVN0YXR1cykpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBzdGF0dXMgY29kZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYVN0YXR1cyBUaGUgc3RhdHVzIGNvZGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN0YXR1c0NvZGUoU3RhdHVzIGFTdGF0dXMpIHsgbVN0YXR1cyA9IEhvc3RTd2FwMTYoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFTdGF0dXMpKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1TdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFN0YXR1cyBDb2RlCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFJhcGlkQ29tbWl0OiBwdWJsaWMgRGhjcDZPcHRpb24KK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgREhDUHY2IE9wdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldENvZGUoa09wdGlvblJhcGlkQ29tbWl0KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoRGhjcDZPcHRpb24pKTsgfQorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKK30gIC8vIG5hbWVzcGFjZSBEaGNwNgorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gREhDUDZfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2RoY3A2X2NsaWVudC5jcHAgYi9zcmMvY29yZS9uZXQvZGhjcDZfY2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNiMjhhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L2RoY3A2X2NsaWVudC5jcHAKQEAgLTAsMCArMSw3MzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgREhDUHY2IENsaWVudC4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJkaGNwNl9jbGllbnQudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImRoY3A2X2NsaWVudC5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjLmhwcCIKKyNpbmNsdWRlICJuZXQvZGhjcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7Cit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAzMjsKKworbmFtZXNwYWNlIG90IHsKKworbmFtZXNwYWNlIERoY3A2IHsKKworRGhjcDZDbGllbnQ6OkRoY3A2Q2xpZW50KFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDoKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtVHJpY2tsZVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZEaGNwNkNsaWVudDo6SGFuZGxlVHJpY2tsZVRpbWVyLCBOVUxMLCB0aGlzKSwKKyAgICBtU29ja2V0KGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVWRwKSwKKyAgICBtU3RhcnRUaW1lKDApLAorICAgIG1BZGRyZXNzZXMoTlVMTCksCisgICAgbU51bUFkZHJlc3NlcygwKQoreworICAgIG1lbXNldChtSWRlbnRpdHlBc3NvY2lhdGlvbnMsIDAsIHNpemVvZihJZGVudGl0eUFzc29jaWF0aW9uKSk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCAoT1BFTlRIUkVBRF9DT05GSUdfTlVNX0RIQ1BfUFJFRklYRVMgLSAxKTsgaSsrKQorICAgIHsKKyAgICAgICAgbUlkZW50aXR5QXNzb2NpYXRpb25zW2ldLlNldE5leHQoJihtSWRlbnRpdHlBc3NvY2lhdGlvbnNbaSArIDFdKSk7CisgICAgfQorCisgICAgbUlkZW50aXR5QXNzb2NpYXRpb25IZWFkID0gTlVMTDsKKyAgICBtSWRlbnRpdHlBc3NvY2lhdGlvbkF2YWlsID0gJm1JZGVudGl0eUFzc29jaWF0aW9uc1swXTsKK30KKwordm9pZCBEaGNwNkNsaWVudDo6VXBkYXRlQWRkcmVzc2VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3REaGNwQWRkcmVzcyAqYUFkZHJlc3NlcywgdWludDMyX3QgYU51bUFkZHJlc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCkKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29sIG5ld0FnZW50ID0gZmFsc2U7CisgICAgb3REaGNwQWRkcmVzcyAqYWRkcmVzcyA9IE5VTEw7CisgICAgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIG90Qm9yZGVyUm91dGVyQ29uZmlnIGNvbmZpZzsKKworICAgIG1BZGRyZXNzZXMgPSBhQWRkcmVzc2VzOworICAgIG1OdW1BZGRyZXNzZXMgPSBhTnVtQWRkcmVzc2VzOworCisgICAgLy8gcmVtb3ZlIGFkZHJlc3NlcyBkaXJlY3RseSBpZiBwcmVmaXggbm90IHZhbGlkIGluIG5ldHdvcmsgZGF0YQorICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1OdW1BZGRyZXNzZXM7IGkrKykKKyAgICB7CisgICAgICAgIGFkZHJlc3MgPSAmbUFkZHJlc3Nlc1tpXTsKKworICAgICAgICBpZiAoYWRkcmVzcy0+bVZhbGlkTGlmZXRpbWUgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBmb3VuZCA9IGZhbHNlOworICAgICAgICBpdGVyYXRvciA9IE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklUOworCisgICAgICAgIHdoaWxlICgob3ROZXREYXRhR2V0TmV4dE9uTWVzaFByZWZpeChhSW5zdGFuY2UsICZpdGVyYXRvciwgJmNvbmZpZykpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghY29uZmlnLm1EaGNwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKG90SXA2UHJlZml4TWF0Y2goJihhZGRyZXNzLT5tQWRkcmVzcy5tQWRkcmVzcyksICYoY29uZmlnLm1QcmVmaXgubVByZWZpeCkpID49CisgICAgICAgICAgICAgICAgIGFkZHJlc3MtPm1BZGRyZXNzLm1QcmVmaXhMZW5ndGgpICYmCisgICAgICAgICAgICAgICAgKGNvbmZpZy5tUHJlZml4Lm1MZW5ndGggPT0gYWRkcmVzcy0+bUFkZHJlc3MubVByZWZpeExlbmd0aCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RJcDZSZW1vdmVVbmljYXN0QWRkcmVzcyhhSW5zdGFuY2UsICYoYWRkcmVzcy0+bUFkZHJlc3MubUFkZHJlc3MpKTsKKyAgICAgICAgICAgIFJlbW92ZUlkZW50aXR5QXNzb2NpYXRpb24oY29uZmlnLm1SbG9jMTYsIGNvbmZpZy5tUHJlZml4KTsKKyAgICAgICAgICAgIG1lbXNldChhZGRyZXNzLCAwLCBzaXplb2YoKmFkZHJlc3MpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGFkZCBJZGVudGl0eUFzc29jaWF0aW9uIGZvciBuZXcgY29uZmlndXJlZCBwcmVmaXgKKyAgICBpdGVyYXRvciA9IE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklUOworCisgICAgd2hpbGUgKG90TmV0RGF0YUdldE5leHRPbk1lc2hQcmVmaXgoYUluc3RhbmNlLCAmaXRlcmF0b3IsICZjb25maWcpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBpZiAoIWNvbmZpZy5tRGhjcCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBmb3VuZCA9IGZhbHNlOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1OdW1BZGRyZXNzZXM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYWRkcmVzcyA9ICZtQWRkcmVzc2VzW2ldOworCisgICAgICAgICAgICBpZiAoYWRkcmVzcy0+bUFkZHJlc3MubVByZWZpeExlbmd0aCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKG90SXA2UHJlZml4TWF0Y2goJihjb25maWcubVByZWZpeC5tUHJlZml4KSwgJihhZGRyZXNzLT5tQWRkcmVzcy5tQWRkcmVzcykpID49CisgICAgICAgICAgICAgICAgIGNvbmZpZy5tUHJlZml4Lm1MZW5ndGgpICYmCisgICAgICAgICAgICAgICAgKGNvbmZpZy5tUHJlZml4Lm1MZW5ndGggPT0gYWRkcmVzcy0+bUFkZHJlc3MubVByZWZpeExlbmd0aCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtTnVtQWRkcmVzc2VzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYWRkcmVzcyA9ICZtQWRkcmVzc2VzW2ldOworCisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm1BZGRyZXNzLm1QcmVmaXhMZW5ndGggIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1lbXNldChhZGRyZXNzLCAwLCBzaXplb2YoKmFkZHJlc3MpKTsKKworICAgICAgICAgICAgICAgIC8vIHN1cHBvc2UgYWxsIGNvbmZpZ3VyZWQgcHJlZml4IGFyZSA6Oi82NAorICAgICAgICAgICAgICAgIG1lbWNweShhZGRyZXNzLT5tQWRkcmVzcy5tQWRkcmVzcy5tRmllbGRzLm04LCBjb25maWcubVByZWZpeC5tUHJlZml4Lm1GaWVsZHMubTgsIDgpOworICAgICAgICAgICAgICAgIGFkZHJlc3MtPm1BZGRyZXNzLm1QcmVmaXhMZW5ndGggPSBjb25maWcubVByZWZpeC5tTGVuZ3RoOworCisgICAgICAgICAgICAgICAgQWRkSWRlbnRpdHlBc3NvY2lhdGlvbihjb25maWcubVJsb2MxNiwgY29uZmlnLm1QcmVmaXgpOworICAgICAgICAgICAgICAgIG5ld0FnZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChuZXdBZ2VudCkKKyAgICB7CisgICAgICAgIFN0YXJ0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN0b3AoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGhjcDZDbGllbnQ6OkFkZElkZW50aXR5QXNzb2NpYXRpb24odWludDE2X3QgYVJsb2MxNiwgb3RJcDZQcmVmaXggJmFJcDZQcmVmaXgpCit7CisgICAgSWRlbnRpdHlBc3NvY2lhdGlvbiAqaWRlbnRpdHlBc3NvY2lhdGlvbiA9IE5VTEw7CisgICAgSWRlbnRpdHlBc3NvY2lhdGlvbiAqaWRlbnRpdHlBc3NvY2lhdGlvbkN1cnNvciA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQobUlkZW50aXR5QXNzb2NpYXRpb25BdmFpbCk7CisKKyAgICBpZGVudGl0eUFzc29jaWF0aW9uID0gbUlkZW50aXR5QXNzb2NpYXRpb25BdmFpbDsKKyAgICBtSWRlbnRpdHlBc3NvY2lhdGlvbkF2YWlsID0gbUlkZW50aXR5QXNzb2NpYXRpb25BdmFpbC0+R2V0TmV4dCgpOworCisgICAgaWRlbnRpdHlBc3NvY2lhdGlvbi0+U2V0UHJlZml4QWdlbnRSbG9jKGFSbG9jMTYpOworICAgIGlkZW50aXR5QXNzb2NpYXRpb24tPlNldFByZWZpeChhSXA2UHJlZml4KTsKKyAgICBpZGVudGl0eUFzc29jaWF0aW9uLT5TZXRTdGF0dXMoSWRlbnRpdHlBc3NvY2lhdGlvbjo6a1N0YXR1c1NvbGljaXQpOworCisgICAgaWRlbnRpdHlBc3NvY2lhdGlvbi0+U2V0TmV4dChOVUxMKTsKKworICAgIGlmIChtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQpCisgICAgeworICAgICAgICAvLyBhcHBlbmQgdGhlIG5ldyBpZGVudGl0eWFzc29jaWF0aW9uIHRvIHRoZSB0YWlsIG9mIHVzZWQgbGlzdAorICAgICAgICBmb3IgKGlkZW50aXR5QXNzb2NpYXRpb25DdXJzb3IgPSBtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQ7IGlkZW50aXR5QXNzb2NpYXRpb25DdXJzb3ItPkdldE5leHQoKTsKKyAgICAgICAgICAgICBpZGVudGl0eUFzc29jaWF0aW9uQ3Vyc29yID0gaWRlbnRpdHlBc3NvY2lhdGlvbkN1cnNvci0+R2V0TmV4dCgpKSB7fQorCisgICAgICAgIGlkZW50aXR5QXNzb2NpYXRpb25DdXJzb3ItPlNldE5leHQoaWRlbnRpdHlBc3NvY2lhdGlvbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZCA9IGlkZW50aXR5QXNzb2NpYXRpb247CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBEaGNwNkNsaWVudDo6UmVtb3ZlSWRlbnRpdHlBc3NvY2lhdGlvbih1aW50MTZfdCBhUmxvYzE2LCBvdElwNlByZWZpeCAmYUlwNlByZWZpeCkKK3sKKyAgICBJZGVudGl0eUFzc29jaWF0aW9uICpwcmV2SWRlbnRpdHlBc3NvY2lhdGlvbiA9IE5VTEw7CisgICAgSWRlbnRpdHlBc3NvY2lhdGlvbiAqaWRlbnRpdHlBc3NvY2lhdGlvbiA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQobUlkZW50aXR5QXNzb2NpYXRpb25IZWFkKTsKKworICAgIGZvciAoaWRlbnRpdHlBc3NvY2lhdGlvbiA9IG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZDsgaWRlbnRpdHlBc3NvY2lhdGlvbjsKKyAgICAgICAgIHByZXZJZGVudGl0eUFzc29jaWF0aW9uID0gaWRlbnRpdHlBc3NvY2lhdGlvbiwgaWRlbnRpdHlBc3NvY2lhdGlvbiA9IGlkZW50aXR5QXNzb2NpYXRpb24tPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChpZGVudGl0eUFzc29jaWF0aW9uLT5HZXRQcmVmaXhBZ2VudFJsb2MoKSAhPSBhUmxvYzE2KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdElwNlByZWZpeE1hdGNoKCYoYUlwNlByZWZpeC5tUHJlZml4KSwgJihpZGVudGl0eUFzc29jaWF0aW9uLT5HZXRQcmVmaXgoKS0+bVByZWZpeCkpIDwgYUlwNlByZWZpeC5tTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJlbW92ZSBmcm9tIHVzZWQgbGlzdAorICAgICAgICBpZiAocHJldklkZW50aXR5QXNzb2NpYXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHByZXZJZGVudGl0eUFzc29jaWF0aW9uLT5TZXROZXh0KGlkZW50aXR5QXNzb2NpYXRpb24tPkdldE5leHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQgPSBpZGVudGl0eUFzc29jaWF0aW9uLT5HZXROZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyByZXR1cm4gdG8gYXZhaWxhYmxlIGxpc3QKKyAgICAgICAgbWVtc2V0KGlkZW50aXR5QXNzb2NpYXRpb24sIDAsIHNpemVvZigqaWRlbnRpdHlBc3NvY2lhdGlvbikpOworICAgICAgICBpZGVudGl0eUFzc29jaWF0aW9uLT5TZXROZXh0KG1JZGVudGl0eUFzc29jaWF0aW9uQXZhaWwpOworICAgICAgICBtSWRlbnRpdHlBc3NvY2lhdGlvbkF2YWlsID0gaWRlbnRpdHlBc3NvY2lhdGlvbjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBEaGNwNkNsaWVudDo6U3RhcnQodm9pZCkKK3sKKyAgICBJcDY6OlNvY2tBZGRyIHNvY2thZGRyOworCisgICAgc29ja2FkZHIubVBvcnQgPSBrRGhjcENsaWVudFBvcnQ7CisgICAgbVNvY2tldC5PcGVuKCZEaGNwNkNsaWVudDo6SGFuZGxlVWRwUmVjZWl2ZSwgdGhpcyk7CisgICAgbVNvY2tldC5CaW5kKHNvY2thZGRyKTsKKworICAgIFByb2Nlc3NOZXh0SWRlbnRpdHlBc3NvY2lhdGlvbigpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgRGhjcDZDbGllbnQ6OlN0b3Aodm9pZCkKK3sKKyAgICBtU29ja2V0LkNsb3NlKCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2Jvb2wgRGhjcDZDbGllbnQ6OlByb2Nlc3NOZXh0SWRlbnRpdHlBc3NvY2lhdGlvbigpCit7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisgICAgSWRlbnRpdHlBc3NvY2lhdGlvbiAqcHJldklkZW50aXR5QXNzb2NpYXRpb24gPSBOVUxMOworICAgIElkZW50aXR5QXNzb2NpYXRpb24gKmlkZW50aXR5QXNzb2NpYXRpb24gPSBOVUxMOworCisgICAgVmVyaWZ5T3JFeGl0KG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZCk7CisgICAgLy8gbm90IGludGVycnVwdCBpbi1wcm9ncmVzcyBzb2xpY2l0CisgICAgVmVyaWZ5T3JFeGl0KChtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQtPkdldFN0YXR1cygpICE9IElkZW50aXR5QXNzb2NpYXRpb246OmtTdGF0dXNTb2xpY2l0aW5nKSk7CisKKyAgICBtVHJpY2tsZVRpbWVyLlN0b3AoKTsKKworICAgIGZvciAoaWRlbnRpdHlBc3NvY2lhdGlvbiA9IG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZDsgaWRlbnRpdHlBc3NvY2lhdGlvbjsKKyAgICAgICAgIHByZXZJZGVudGl0eUFzc29jaWF0aW9uID0gaWRlbnRpdHlBc3NvY2lhdGlvbiwgaWRlbnRpdHlBc3NvY2lhdGlvbiA9IGlkZW50aXR5QXNzb2NpYXRpb24tPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChpZGVudGl0eUFzc29jaWF0aW9uLT5HZXRTdGF0dXMoKSAhPSBJZGVudGl0eUFzc29jaWF0aW9uOjprU3RhdHVzU29saWNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBuZXcgdHJhbnNhY3Rpb24gaWQKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwga1RyYW5zYWN0aW9uSWRTaXplOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UcmFuc2FjdGlvbklkW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZW5zdXJlIG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZCBpcyB0aGUgcHJlZml4IGFnZW50IHRvIHNvbGljaXQuCisgICAgICAgIGlmIChwcmV2SWRlbnRpdHlBc3NvY2lhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcHJldklkZW50aXR5QXNzb2NpYXRpb24tPlNldE5leHQoaWRlbnRpdHlBc3NvY2lhdGlvbi0+R2V0TmV4dCgpKTsKKyAgICAgICAgICAgIGlkZW50aXR5QXNzb2NpYXRpb24tPlNldE5leHQobUlkZW50aXR5QXNzb2NpYXRpb25IZWFkKTsKKyAgICAgICAgICAgIG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZCA9IGlkZW50aXR5QXNzb2NpYXRpb247CisgICAgICAgIH0KKworICAgICAgICBtVHJpY2tsZVRpbWVyLlN0YXJ0KAorICAgICAgICAgICAgVGltZXI6OlNlY1RvTXNlYyhrVHJpY2tsZVRpbWVySW1pbiksCisgICAgICAgICAgICBUaW1lcjo6U2VjVG9Nc2VjKGtUcmlja2xlVGltZXJJbWF4KSwKKyAgICAgICAgICAgIFRyaWNrbGVUaW1lcjo6a01vZGVOb3JtYWwpOworCisgICAgICAgIG1Ucmlja2xlVGltZXIuSW5kaWNhdGVJbmNvbnNpc3RlbnQoKTsKKworICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK2Jvb2wgRGhjcDZDbGllbnQ6OkhhbmRsZVRyaWNrbGVUaW1lcihUcmlja2xlVGltZXIgJmFUcmlja2xlVGltZXIpCit7CisgICAgcmV0dXJuIEdldE93bmVyKGFUcmlja2xlVGltZXIpLkhhbmRsZVRyaWNrbGVUaW1lcigpOworfQorCitib29sIERoY3A2Q2xpZW50OjpIYW5kbGVUcmlja2xlVGltZXIodm9pZCkKK3sKKyAgICBib29sIHJ2YWwgPSB0cnVlOworCisgICAgVmVyaWZ5T3JFeGl0KG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZCwgcnZhbCA9IGZhbHNlKTsKKworICAgIHN3aXRjaCAobUlkZW50aXR5QXNzb2NpYXRpb25IZWFkLT5HZXRTdGF0dXMoKSkKKyAgICB7CisgICAgY2FzZSBJZGVudGl0eUFzc29jaWF0aW9uOjprU3RhdHVzU29saWNpdDoKKyAgICAgICAgbVN0YXJ0VGltZSA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgICAgIG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZC0+U2V0U3RhdHVzKElkZW50aXR5QXNzb2NpYXRpb246OmtTdGF0dXNTb2xpY2l0aW5nKTsKKworICAgIC8vIGZhbGwgdGhyb3VnaAorCisgICAgY2FzZSBJZGVudGl0eUFzc29jaWF0aW9uOjprU3RhdHVzU29saWNpdGluZzoKKyAgICAgICAgU29saWNpdChtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQtPkdldFByZWZpeEFnZW50UmxvYygpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElkZW50aXR5QXNzb2NpYXRpb246OmtTdGF0dXNTb2xpY2l0UmVwbGllZDoKKyAgICAgICAgaWYgKCFQcm9jZXNzTmV4dElkZW50aXR5QXNzb2NpYXRpb24oKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVRyaWNrbGVUaW1lci5TdG9wKCk7CisgICAgICAgICAgICBTdG9wKCk7CisgICAgICAgICAgICBydmFsID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBEaGNwNkNsaWVudDo6U29saWNpdCh1aW50MTZfdCBhUmxvYzE2KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbVNvY2tldC5OZXdNZXNzYWdlKDApKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRFbGFwc2VkVGltZSgqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRDbGllbnRJZGVudGlmaWVyKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZElhTmEoKm1lc3NhZ2UsIGFSbG9jMTYpKTsKKyAgICAvLyBzcGVjaWZ5IHdoaWNoIHByZWZpeGVzIHRvIHNvbGljaXQKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kSWFBZGRyZXNzKCptZXNzYWdlLCBhUmxvYzE2KSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFJhcGlkQ29tbWl0KCptZXNzYWdlKSk7CisKKyAgICBtZW1zZXQoJm1lc3NhZ2VJbmZvLCAwLCBzaXplb2YobWVzc2FnZUluZm8pKTsKKyAgICBtZW1jcHkobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm04LCBuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWxQcmVmaXgoKSwgOCk7CisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls0XSA9IEhvc3RTd2FwMTYoMHgwMDAwKTsKKyAgICBtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzVdID0gSG9zdFN3YXAxNigweDAwZmYpOworICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbNl0gPSBIb3N0U3dhcDE2KDB4ZmUwMCk7CisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSA9IEhvc3RTd2FwMTYoYVJsb2MxNik7CisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8ubVBlZXJQb3J0ID0ga0RoY3BTZXJ2ZXJQb3J0OworICAgIG1lc3NhZ2VJbmZvLm1JbnRlcmZhY2VJZCA9IG5ldGlmLkdldEludGVyZmFjZUlkKCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNvY2tldC5TZW5kVG8oKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisgICAgb3RMb2dJbmZvSXA2KEdldEluc3RhbmNlKCksICJzb2xpY2l0Iik7CisKK2V4aXQ6CisKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMICYmIGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2Q2xpZW50OjpBcHBlbmRIZWFkZXIoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgRGhjcDZIZWFkZXIgaGVhZGVyOworCisgICAgaGVhZGVyLkluaXQoKTsKKyAgICBoZWFkZXIuU2V0VHlwZShrVHlwZVNvbGljaXQpOworICAgIGhlYWRlci5TZXRUcmFuc2FjdGlvbklkKG1UcmFuc2FjdGlvbklkKTsKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKK30KKworb3RFcnJvciBEaGNwNkNsaWVudDo6QXBwZW5kRWxhcHNlZFRpbWUoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgRWxhcHNlZFRpbWUgb3B0aW9uOworCisgICAgb3B0aW9uLkluaXQoKTsKKyAgICBvcHRpb24uU2V0RWxhcHNlZFRpbWUoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KFRpbWVyOjpNc2VjVG9TZWMob3RQbGF0QWxhcm1HZXROb3coKSAtIG1TdGFydFRpbWUpKSk7CisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmb3B0aW9uLCBzaXplb2Yob3B0aW9uKSk7Cit9CisKK290RXJyb3IgRGhjcDZDbGllbnQ6OkFwcGVuZENsaWVudElkZW50aWZpZXIoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgQ2xpZW50SWRlbnRpZmllciBvcHRpb247CisKKyAgICBvcHRpb24uSW5pdCgpOworICAgIG9wdGlvbi5TZXREdWlkVHlwZShrRHVpZExMKTsKKyAgICBvcHRpb24uU2V0RHVpZEhhcmR3YXJlVHlwZShrSGFyZHdhcmVUeXBlRXVpNjQpOworICAgIG9wdGlvbi5TZXREdWlkTGlua0xheWVyQWRkcmVzcyhHZXROZXRpZigpLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSk7CisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmb3B0aW9uLCBzaXplb2Yob3B0aW9uKSk7Cit9CisKK290RXJyb3IgRGhjcDZDbGllbnQ6OkFwcGVuZElhTmEoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBjb3VudCA9IDA7CisgICAgdWludDE2X3QgbGVuZ3RoID0gMDsKKyAgICBJZGVudGl0eUFzc29jaWF0aW9uICppZGVudGl0eUFzc29jaWF0aW9uID0gTlVMTDsKKyAgICBJYU5hIG9wdGlvbjsKKworICAgIFZlcmlmeU9yRXhpdChtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBmb3IgKGlkZW50aXR5QXNzb2NpYXRpb24gPSBtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQ7IGlkZW50aXR5QXNzb2NpYXRpb247CisgICAgICAgICBpZGVudGl0eUFzc29jaWF0aW9uID0gaWRlbnRpdHlBc3NvY2lhdGlvbi0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGlkZW50aXR5QXNzb2NpYXRpb24tPkdldFN0YXR1cygpID09IElkZW50aXR5QXNzb2NpYXRpb246OmtTdGF0dXNTb2xpY2l0UmVwbGllZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWRlbnRpdHlBc3NvY2lhdGlvbi0+R2V0UHJlZml4QWdlbnRSbG9jKCkgPT0gYVJsb2MxNikKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGNvbXB1dGUgdGhlIHJpZ2h0IGxlbmd0aAorICAgIGxlbmd0aCA9IHNpemVvZihJYU5hKSArIHNpemVvZihJYUFkZHJlc3MpICogY291bnQgLSBzaXplb2YoRGhjcDZPcHRpb24pOworCisgICAgb3B0aW9uLkluaXQoKTsKKyAgICBvcHRpb24uU2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgb3B0aW9uLlNldElhaWQoMCk7CisgICAgb3B0aW9uLlNldFQxKDApOworICAgIG9wdGlvbi5TZXRUMigwKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZvcHRpb24sIHNpemVvZihJYU5hKSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNkNsaWVudDo6QXBwZW5kSWFBZGRyZXNzKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhUmxvYzE2KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElkZW50aXR5QXNzb2NpYXRpb24gKmlkZW50aXR5QXNzb2NpYXRpb24gPSBOVUxMOworICAgIElhQWRkcmVzcyBvcHRpb247CisKKyAgICBWZXJpZnlPckV4aXQobUlkZW50aXR5QXNzb2NpYXRpb25IZWFkLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgb3B0aW9uLkluaXQoKTsKKworICAgIGZvciAoaWRlbnRpdHlBc3NvY2lhdGlvbiA9IG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZDsgaWRlbnRpdHlBc3NvY2lhdGlvbjsKKyAgICAgICAgIGlkZW50aXR5QXNzb2NpYXRpb24gPSBpZGVudGl0eUFzc29jaWF0aW9uLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoKGlkZW50aXR5QXNzb2NpYXRpb24tPkdldFN0YXR1cygpICE9IElkZW50aXR5QXNzb2NpYXRpb246OmtTdGF0dXNTb2xpY2l0UmVwbGllZCkgJiYKKyAgICAgICAgICAgIChpZGVudGl0eUFzc29jaWF0aW9uLT5HZXRQcmVmaXhBZ2VudFJsb2MoKSA9PSBhUmxvYzE2KSkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0aW9uLlNldEFkZHJlc3MoaWRlbnRpdHlBc3NvY2lhdGlvbi0+R2V0UHJlZml4KCktPm1QcmVmaXgpOworICAgICAgICAgICAgb3B0aW9uLlNldFByZWZlcnJlZExpZmV0aW1lKDApOworICAgICAgICAgICAgb3B0aW9uLlNldFZhbGlkTGlmZXRpbWUoMCk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZvcHRpb24sIHNpemVvZihvcHRpb24pKSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2Q2xpZW50OjpBcHBlbmRSYXBpZENvbW1pdChNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBSYXBpZENvbW1pdCBvcHRpb247CisKKyAgICBvcHRpb24uSW5pdCgpOworICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQoJm9wdGlvbiwgc2l6ZW9mKG9wdGlvbikpOworfQorCit2b2lkIERoY3A2Q2xpZW50OjpIYW5kbGVVZHBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgRGhjcDZDbGllbnQgKm9iaiA9IHN0YXRpY19jYXN0PERoY3A2Q2xpZW50ICo+KGFDb250ZXh0KTsKKyAgICBvYmotPkhhbmRsZVVkcFJlY2VpdmUoKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLCAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBEaGNwNkNsaWVudDo6SGFuZGxlVWRwUmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIERoY3A2SGVhZGVyIGhlYWRlcjsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2VJbmZvKTsKKworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoaGVhZGVyKSwgJmhlYWRlcikgPT0gc2l6ZW9mKGhlYWRlcikpOworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKGhlYWRlcikpOworCisgICAgaWYgKChoZWFkZXIuR2V0VHlwZSgpID09IGtUeXBlUmVwbHkpICYmICghbWVtY21wKGhlYWRlci5HZXRUcmFuc2FjdGlvbklkKCksIG1UcmFuc2FjdGlvbklkLCBrVHJhbnNhY3Rpb25JZFNpemUpKSkKKyAgICB7CisgICAgICAgIFByb2Nlc3NSZXBseShhTWVzc2FnZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBEaGNwNkNsaWVudDo6UHJvY2Vzc1JlcGx5KE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIHVpbnQxNl90IG9mZnNldCA9IGFNZXNzYWdlLkdldE9mZnNldCgpOworICAgIHVpbnQxNl90IGxlbmd0aCA9IGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDE2X3Qgb3B0aW9uT2Zmc2V0OworCisgICAgLy8gU2VydmVyIElkZW50aWZpZXIKKyAgICBWZXJpZnlPckV4aXQoKG9wdGlvbk9mZnNldCA9IEZpbmRPcHRpb24oYU1lc3NhZ2UsIG9mZnNldCwgbGVuZ3RoLCBrT3B0aW9uU2VydmVySWRlbnRpZmllcikpID4gMCk7CisgICAgU3VjY2Vzc09yRXhpdChQcm9jZXNzU2VydmVySWRlbnRpZmllcihhTWVzc2FnZSwgb3B0aW9uT2Zmc2V0KSk7CisKKyAgICAvLyBDbGllbnQgSWRlbnRpZmllcgorICAgIFZlcmlmeU9yRXhpdCgob3B0aW9uT2Zmc2V0ID0gRmluZE9wdGlvbihhTWVzc2FnZSwgb2Zmc2V0LCBsZW5ndGgsIGtPcHRpb25DbGllbnRJZGVudGlmaWVyKSkgPiAwKTsKKyAgICBTdWNjZXNzT3JFeGl0KFByb2Nlc3NDbGllbnRJZGVudGlmaWVyKGFNZXNzYWdlLCBvcHRpb25PZmZzZXQpKTsKKworICAgIC8vIFJhcGlkIENvbW1pdAorICAgIFZlcmlmeU9yRXhpdChGaW5kT3B0aW9uKGFNZXNzYWdlLCBvZmZzZXQsIGxlbmd0aCwga09wdGlvblJhcGlkQ29tbWl0KSA+IDApOworCisgICAgLy8gSUFfTkEKKyAgICBWZXJpZnlPckV4aXQoKG9wdGlvbk9mZnNldCA9IEZpbmRPcHRpb24oYU1lc3NhZ2UsIG9mZnNldCwgbGVuZ3RoLCBrT3B0aW9uSWFOYSkpID4gMCk7CisgICAgU3VjY2Vzc09yRXhpdChQcm9jZXNzSWFOYShhTWVzc2FnZSwgb3B0aW9uT2Zmc2V0KSk7CisKKyAgICBIYW5kbGVUcmlja2xlVGltZXIoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3VpbnQxNl90IERoY3A2Q2xpZW50OjpGaW5kT3B0aW9uKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCB1aW50MTZfdCBhTGVuZ3RoLCBEaGNwNjo6Q29kZSBhQ29kZSkKK3sKKyAgICB1aW50MTZfdCBlbmQgPSBhT2Zmc2V0ICsgYUxlbmd0aDsKKworICAgIHdoaWxlIChhT2Zmc2V0IDw9IGVuZCkKKyAgICB7CisgICAgICAgIERoY3A2T3B0aW9uIG9wdGlvbjsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pKTsKKworICAgICAgICBpZiAob3B0aW9uLkdldENvZGUoKSA9PSAoYUNvZGUpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYU9mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIGFPZmZzZXQgKz0gc2l6ZW9mKG9wdGlvbikgKyBvcHRpb24uR2V0TGVuZ3RoKCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiAwOworfQorCitvdEVycm9yIERoY3A2Q2xpZW50OjpQcm9jZXNzU2VydmVySWRlbnRpZmllcihNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBTZXJ2ZXJJZGVudGlmaWVyIG9wdGlvbjsKKworICAgIFZlcmlmeU9yRXhpdCgoKGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pKSAmJgorICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXRMZW5ndGgoKSA9PSAoc2l6ZW9mKG9wdGlvbikgLSBzaXplb2YoRGhjcDZPcHRpb24pKSkgJiYKKyAgICAgICAgICAgICAgICAgIChvcHRpb24uR2V0RHVpZFR5cGUoKSA9PSBrRHVpZExMKSAmJgorICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXREdWlkSGFyZHdhcmVUeXBlKCkgPT0ga0hhcmR3YXJlVHlwZUV1aTY0KSksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGhjcDZDbGllbnQ6OlByb2Nlc3NDbGllbnRJZGVudGlmaWVyKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENsaWVudElkZW50aWZpZXIgb3B0aW9uOworCisgICAgVmVyaWZ5T3JFeGl0KCgoKGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pKSAmJgorICAgICAgICAgICAgICAgICAgIChvcHRpb24uR2V0TGVuZ3RoKCkgPT0gKHNpemVvZihvcHRpb24pIC0gc2l6ZW9mKERoY3A2T3B0aW9uKSkpICYmCisgICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXREdWlkVHlwZSgpID09IGtEdWlkTEwpICYmCisgICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXREdWlkSGFyZHdhcmVUeXBlKCkgPT0ga0hhcmR3YXJlVHlwZUV1aTY0KSkgJiYKKyAgICAgICAgICAgICAgICAgICghbWVtY21wKG9wdGlvbi5HZXREdWlkTGlua0xheWVyQWRkcmVzcygpLCBHZXROZXRpZigpLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihNYWM6OkV4dEFkZHJlc3MpKSkpLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2Q2xpZW50OjpQcm9jZXNzSWFOYShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJYU5hIG9wdGlvbjsKKyAgICB1aW50MTZfdCBvcHRpb25PZmZzZXQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworCisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGFPZmZzZXQgKz0gc2l6ZW9mKG9wdGlvbik7CisgICAgbGVuZ3RoID0gb3B0aW9uLkdldExlbmd0aCgpIC0gKHNpemVvZihvcHRpb24pIC0gc2l6ZW9mKERoY3A2T3B0aW9uKSk7CisKKyAgICBWZXJpZnlPckV4aXQobGVuZ3RoIDw9IGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU9mZnNldCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoKG9wdGlvbk9mZnNldCA9IEZpbmRPcHRpb24oYU1lc3NhZ2UsIGFPZmZzZXQsIGxlbmd0aCwga09wdGlvblN0YXR1c0NvZGUpKSA+IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc1N0YXR1c0NvZGUoYU1lc3NhZ2UsIG9wdGlvbk9mZnNldCkpOworICAgIH0KKworICAgIHdoaWxlIChsZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgaWYgKChvcHRpb25PZmZzZXQgPSBGaW5kT3B0aW9uKGFNZXNzYWdlLCBhT2Zmc2V0LCBsZW5ndGgsIGtPcHRpb25JYUFkZHJlc3MpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc0lhQWRkcmVzcyhhTWVzc2FnZSwgb3B0aW9uT2Zmc2V0KSk7CisKKyAgICAgICAgbGVuZ3RoIC09ICgob3B0aW9uT2Zmc2V0IC0gYU9mZnNldCkgKyBzaXplb2YoSWFBZGRyZXNzKSk7CisgICAgICAgIGFPZmZzZXQgPSBvcHRpb25PZmZzZXQgKyBzaXplb2YoSWFBZGRyZXNzKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2Q2xpZW50OjpQcm9jZXNzU3RhdHVzQ29kZShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBTdGF0dXNDb2RlIG9wdGlvbjsKKworICAgIFZlcmlmeU9yRXhpdCgoKGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pKSAmJgorICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXRMZW5ndGgoKSA9PSAoc2l6ZW9mKG9wdGlvbikgLSBzaXplb2YoRGhjcDZPcHRpb24pKSkgJiYKKyAgICAgICAgICAgICAgICAgIChvcHRpb24uR2V0U3RhdHVzQ29kZSgpID09IGtTdGF0dXNTdWNjZXNzKSksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNkNsaWVudDo6UHJvY2Vzc0lhQWRkcmVzcyhNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJZGVudGl0eUFzc29jaWF0aW9uICppZGVudGl0eUFzc29jaWF0aW9uID0gTlVMTDsKKyAgICBvdERoY3BBZGRyZXNzICphZGRyZXNzID0gTlVMTDsKKyAgICBvdElwNlByZWZpeCAqcHJlZml4ICA9IE5VTEw7CisKKyAgICBJYUFkZHJlc3Mgb3B0aW9uOworCisgICAgVmVyaWZ5T3JFeGl0KCgoYU1lc3NhZ2UuUmVhZChhT2Zmc2V0LCBzaXplb2Yob3B0aW9uKSwgJm9wdGlvbikgPT0gc2l6ZW9mKG9wdGlvbikpICYmCisgICAgICAgICAgICAgICAgICAob3B0aW9uLkdldExlbmd0aCgpID09IChzaXplb2Yob3B0aW9uKSAtIHNpemVvZihEaGNwNk9wdGlvbikpKSksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbU51bUFkZHJlc3NlczsgaSsrKQorICAgIHsKKyAgICAgICAgYWRkcmVzcyA9ICZtQWRkcmVzc2VzW2ldOworCisgICAgICAgIGlmIChhZGRyZXNzLT5tVmFsaWRMaWZldGltZSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdElwNlByZWZpeE1hdGNoKCYoYWRkcmVzcy0+bUFkZHJlc3MubUFkZHJlc3MpLCBvcHRpb24uR2V0QWRkcmVzcygpKSA+PSBhZGRyZXNzLT5tQWRkcmVzcy5tUHJlZml4TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoYWRkcmVzcy0+bUFkZHJlc3MubUFkZHJlc3MubUZpZWxkcy5tOCwgb3B0aW9uLkdldEFkZHJlc3MoKS0+bUZpZWxkcy5tOCwgc2l6ZW9mKG90SXA2QWRkcmVzcykpOworICAgICAgICAgICAgYWRkcmVzcy0+bVByZWZlcnJlZExpZmV0aW1lID0gb3B0aW9uLkdldFByZWZlcnJlZExpZmV0aW1lKCk7CisgICAgICAgICAgICBhZGRyZXNzLT5tVmFsaWRMaWZldGltZSA9IG9wdGlvbi5HZXRWYWxpZExpZmV0aW1lKCk7CisgICAgICAgICAgICBhZGRyZXNzLT5tQWRkcmVzcy5tUHJlZmVycmVkID0gYWRkcmVzcy0+bVByZWZlcnJlZExpZmV0aW1lICE9IDA7CisgICAgICAgICAgICBhZGRyZXNzLT5tQWRkcmVzcy5tVmFsaWQgPSBhZGRyZXNzLT5tVmFsaWRMaWZldGltZSAhPSAwOworICAgICAgICAgICAgb3RJcDZBZGRVbmljYXN0QWRkcmVzcyhHZXROZXRpZigpLkdldEluc3RhbmNlKCksICZhZGRyZXNzLT5tQWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIG1hcmsgSWRlbnRpdHlBc3NvY2lhdGlvbiBhcyByZXBsaWVkCisgICAgZm9yIChpZGVudGl0eUFzc29jaWF0aW9uID0gbUlkZW50aXR5QXNzb2NpYXRpb25IZWFkOyBpZGVudGl0eUFzc29jaWF0aW9uOworICAgICAgICAgaWRlbnRpdHlBc3NvY2lhdGlvbiA9IGlkZW50aXR5QXNzb2NpYXRpb24tPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIHByZWZpeCA9IGlkZW50aXR5QXNzb2NpYXRpb24tPkdldFByZWZpeCgpOworCisgICAgICAgIGlmIChvdElwNlByZWZpeE1hdGNoKG9wdGlvbi5HZXRBZGRyZXNzKCksICYocHJlZml4LT5tUHJlZml4KSkgPj0gcHJlZml4LT5tTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBpZGVudGl0eUFzc29jaWF0aW9uLT5TZXRTdGF0dXMoSWRlbnRpdHlBc3NvY2lhdGlvbjo6a1N0YXR1c1NvbGljaXRSZXBsaWVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworRGhjcDZDbGllbnQgJkRoY3A2Q2xpZW50OjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBEaGNwNkNsaWVudCAmY2xpZW50ID0gKnN0YXRpY19jYXN0PERoY3A2Q2xpZW50ICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIERoY3A2Q2xpZW50ICZjbGllbnQgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0RGhjcDZDbGllbnQoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGNsaWVudDsKK30KKworfSAgLy8gbmFtZXNwYWNlIERoY3A2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9kaGNwNl9jbGllbnQuaHBwIGIvc3JjL2NvcmUvbmV0L2RoY3A2X2NsaWVudC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM2OTE5MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9kaGNwNl9jbGllbnQuaHBwCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgREhDUHY2IENsaWVudC4KKyAqLworCisjaWZuZGVmIERIQ1A2X0NMSUVOVF9IUFBfCisjZGVmaW5lIERIQ1A2X0NMSUVOVF9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RoY3A2X2NsaWVudC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90cmlja2xlX3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJuZXQvZGhjcDYuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CituYW1lc3BhY2UgTWxlIHsgY2xhc3MgTWxlUm91dGVyOyB9CisKK25hbWVzcGFjZSBEaGNwNiB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1kaGNwNgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgREhDUHY2IENsaWVudC4KKyAqCisgKiBAeworICoKKyAqLworCisKKy8qKgorICogU29tZSBjb25zdGFudHMKKyAqCisgKi8KK2VudW0KK3sKKyAgICBrVHJpY2tsZVRpbWVySW1pbiA9IDEsCisgICAga1RyaWNrbGVUaW1lckltYXggPSAxMjAsCit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJZGVudGl0eUFzc29jaWF0aW9uLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIElkZW50aXR5QXNzb2NpYXRpb24KK3sKK3B1YmxpYzoKKworICAgIC8qKgorICAgICAqIFN0YXR1cyBvZiBJZGVudGl0eUFzc29jaWF0aW9uCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIGVudW0gU3RhdHVzCisgICAgeworICAgICAgICBrU3RhdHVzSW52YWxpZCwKKyAgICAgICAga1N0YXR1c1NvbGljaXQsCisgICAgICAgIGtTdGF0dXNTb2xpY2l0aW5nLAorICAgICAgICBrU3RhdHVzU29saWNpdFJlcGxpZWQsCisgICAgfSBTdGF0dXM7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFN0YXR1cy4KKyAgICAgKgorICAgICAqLworICAgIFN0YXR1cyBHZXRTdGF0dXModm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3RhdHVzPihtU3RhdHVzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgc3RhdHVzIG9mIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU3RhdHVzICBUaGUgU3RhdHVzIHRvIHNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U3RhdHVzKFN0YXR1cyBhU3RhdHVzKSB7IG1TdGF0dXMgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhU3RhdHVzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmxvYyBvZiB0aGUgREhDUCBBZ2VudC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFN0YXR1cy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFByZWZpeEFnZW50UmxvYyh2b2lkKSBjb25zdCB7IHJldHVybiBtUHJlZml4QWdlbnRSbG9jOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBybG9jIG9mIHRoZSBESENQIEFnZW50LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MgIFRoZSBybG9jIG9mIHRoZSBESENQIEFnZW50LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQcmVmaXhBZ2VudFJsb2ModWludDE2X3QgYVJsb2MxNikgeyBtUHJlZml4QWdlbnRSbG9jID0gYVJsb2MxNjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgSVB2NiBwcmVmaXguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIElQdjYgcHJlZml4LgorICAgICAqCisgICAgICovCisgICAgb3RJcDZQcmVmaXggKkdldFByZWZpeCh2b2lkKSB7IHJldHVybiAmbUlwNlByZWZpeDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSVB2NiBwcmVmaXggdG8gc3BlY2lmaWVkIGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlwNlByZWZpeCBUaGUgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHByZWZpeCB0byBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFByZWZpeChvdElwNlByZWZpeCAmYUlwNlByZWZpeCkgeyBtZW1jcHkoJm1JcDZQcmVmaXgsICZhSXA2UHJlZml4LCBzaXplb2Yob3RJcDZQcmVmaXgpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBJZGVudGl0eUFzc29jaWF0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBuZXh0IElkZW50aXR5QXNzb2NpYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBJZGVudGl0eUFzc29jaWF0aW9uICpHZXROZXh0KHZvaWQpIHsgcmV0dXJuIG1OZXh0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IElkZW50aXR5QXNzb2NpYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5leHQoSWRlbnRpdHlBc3NvY2lhdGlvbiAqYU5leHQpIHsgbU5leHQgPSBhTmV4dDsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgICAgICAgbVN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBTdGF0dXMgb2YgSWRlbnRpdHlBc3NvY2F0aW9uCisgICAgdWludDE2X3QgICAgICBtUHJlZml4QWdlbnRSbG9jOyAgICAgICAgICAgICAgICAvLy88IFJsb2Mgb2YgUHJlZml4IEFnZW50CisgICAgb3RJcDZQcmVmaXggICBtSXA2UHJlZml4OyAgICAgICAgICAgICAgICAgICAgICAvLy88IFByZWZpeAorICAgIElkZW50aXR5QXNzb2NpYXRpb24gKm1OZXh0OyAgICAgICAgICAgICAgICAgICAgLy8vPCBQb2ludGVyIHRvIG5leHQgSWRlbnRpdHlBc3NvY2F0aW9uCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBESENQdjYgQ2xpZW50LgorICoKKyAqLworY2xhc3MgRGhjcDZDbGllbnQ6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBEaGNwNkNsaWVudChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZSBhZGRyZXNzZXMgdGhhdCBzaGFsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdXNpbmcgREhDUC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIG9wZW5UaHJlYWQgaW5zdGFuY2UuCisgICAgICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3NlcyAgICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgY29udGFpbmluZyBhZGRyZXNzZXMgY3JlYXRlZCBieSB0aGlzIG1vZHVsZS4KKyAgICAgKiBAcGFyYW1baW5dICAgICBhTnVtQWRkcmVzc2VzIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYUFkZHJlc3NlcyBhcnJheS4KKyAgICAgKiBAcGFyYW1baW5dICAgICBhQ29udGV4dCAgICAgIEEgcG9pbnRlciB0byBJSUQgY3JlYXRvci1zcGVjaWZpYyBjb250ZXh0IGRhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFVwZGF0ZUFkZHJlc3NlcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90RGhjcEFkZHJlc3MgKmFBZGRyZXNzZXMsIHVpbnQzMl90IGFOdW1BZGRyZXNzZXMsIHZvaWQgKmFDb250ZXh0KTsKKworcHJpdmF0ZToKKyAgICBvdEVycm9yIFN0YXJ0KHZvaWQpOworICAgIG90RXJyb3IgU3RvcCh2b2lkKTsKKworICAgIG90RXJyb3IgU29saWNpdCh1aW50MTZfdCBhUmxvYzE2KTsKKworICAgIHZvaWQgQWRkSWRlbnRpdHlBc3NvY2lhdGlvbih1aW50MTZfdCBhUmxvYzE2LCBvdElwNlByZWZpeCAmYUlwNlByZWZpeCk7CisgICAgdm9pZCBSZW1vdmVJZGVudGl0eUFzc29jaWF0aW9uKHVpbnQxNl90IGFSbG9jMTYsIG90SXA2UHJlZml4ICZhSXA2UHJlZml4KTsKKworICAgIGJvb2wgUHJvY2Vzc05leHRJZGVudGl0eUFzc29jaWF0aW9uKHZvaWQpOworCisgICAgb3RFcnJvciBBcHBlbmRIZWFkZXIoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgQXBwZW5kQ2xpZW50SWRlbnRpZmllcihNZXNzYWdlICZhTWVzc2FnZSk7CisgICAgb3RFcnJvciBBcHBlbmRJYU5hKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhUmxvYzE2KTsKKyAgICBvdEVycm9yIEFwcGVuZElhQWRkcmVzcyhNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYVJsb2MxNik7CisgICAgb3RFcnJvciBBcHBlbmRFbGFwc2VkVGltZShNZXNzYWdlICZhTWVzc2FnZSk7CisgICAgb3RFcnJvciBBcHBlbmRSYXBpZENvbW1pdChNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVVZHBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHZvaWQgUHJvY2Vzc1JlcGx5KE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICB1aW50MTZfdCBGaW5kT3B0aW9uKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCB1aW50MTZfdCBhTGVuZ3RoLCBDb2RlIGFDb2RlKTsKKyAgICBvdEVycm9yIFByb2Nlc3NTZXJ2ZXJJZGVudGlmaWVyKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KTsKKyAgICBvdEVycm9yIFByb2Nlc3NDbGllbnRJZGVudGlmaWVyKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KTsKKyAgICBvdEVycm9yIFByb2Nlc3NJYU5hKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KTsKKyAgICBvdEVycm9yIFByb2Nlc3NTdGF0dXNDb2RlKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KTsKKyAgICBvdEVycm9yIFByb2Nlc3NJYUFkZHJlc3MoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQpOworCisgICAgc3RhdGljIGJvb2wgSGFuZGxlVHJpY2tsZVRpbWVyKFRyaWNrbGVUaW1lciAmYVRyaWNrbGVUaW1lcik7CisgICAgYm9vbCBIYW5kbGVUcmlja2xlVGltZXIodm9pZCk7CisKKyAgICBzdGF0aWMgRGhjcDZDbGllbnQgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIFRyaWNrbGVUaW1lciBtVHJpY2tsZVRpbWVyOworCisgICAgSXA2OjpVZHBTb2NrZXQgbVNvY2tldDsKKworICAgIHVpbnQ4X3QgbVRyYW5zYWN0aW9uSWRba1RyYW5zYWN0aW9uSWRTaXplXTsKKyAgICB1aW50MzJfdCBtU3RhcnRUaW1lOworICAgIG90RGhjcEFkZHJlc3MgKm1BZGRyZXNzZXM7CisgICAgdWludDMyX3QgbU51bUFkZHJlc3NlczsKKworICAgIElkZW50aXR5QXNzb2NpYXRpb24gbUlkZW50aXR5QXNzb2NpYXRpb25zW09QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTXTsKKyAgICBJZGVudGl0eUFzc29jaWF0aW9uICptSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQ7CisgICAgSWRlbnRpdHlBc3NvY2lhdGlvbiAqbUlkZW50aXR5QXNzb2NpYXRpb25BdmFpbDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBEaGNwNgorfSAgLy8gbmFtZXNwYWNlIG90CisKKyMgZW5kaWYgIC8vIERIQ1A2X0NMSUVOVF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvZGhjcDZfc2VydmVyLmNwcCBiL3NyYy9jb3JlL25ldC9kaGNwNl9zZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YzQ3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvZGhjcDZfc2VydmVyLmNwcApAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBESENQdjYgU2VydmVyLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImRoY3A2X3NlcnZlci50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiZGhjcDZfc2VydmVyLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIERoY3A2IHsKKworRGhjcDZTZXJ2ZXI6OkRoY3A2U2VydmVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1Tb2NrZXQoYVRocmVhZE5ldGlmLkdldElwNigpLm1VZHApCit7CisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgT1BFTlRIUkVBRF9DT05GSUdfTlVNX0RIQ1BfUFJFRklYRVM7IGkrKykKKyAgICB7CisgICAgICAgIG1lbXNldCgmKG1QcmVmaXhBZ2VudHNbaV0pLCAwLCBzaXplb2YoUHJlZml4QWdlbnQpKTsKKyAgICAgICAgbWVtc2V0KCZtQWdlbnRzQWxvY1tpXSwgMCwgc2l6ZW9mKG1BZ2VudHNBbG9jW2ldKSk7CisgICAgfQorCisgICAgbVByZWZpeEFnZW50c0NvdW50ID0gMDsKKyAgICBtUHJlZml4QWdlbnRzTWFzayA9IDA7Cit9CisKK290RXJyb3IgRGhjcDZTZXJ2ZXI6OlVwZGF0ZVNlcnZpY2Uodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGJvb2wgZm91bmQ7CisgICAgdWludDhfdCBpOworICAgIHVpbnQxNl90IHJsb2MxNiA9IG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNigpOworICAgIElwNjo6QWRkcmVzcyAqYWRkcmVzcyA9IE5VTEw7CisgICAgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIG90Qm9yZGVyUm91dGVyQ29uZmlnIGNvbmZpZzsKKyAgICBMb3dwYW46OkNvbnRleHQgbG93cGFuQ29udGV4dDsKKworICAgIC8vIHJlbW92ZSBkaGNwIGFnZW50IGFsb2MgYW5kIHByZWZpeCBkZWxlZ2F0aW9uCisgICAgZm9yIChpID0gMDsgaSA8IE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTOyBpKyspCisgICAgeworICAgICAgICBmb3VuZCA9IGZhbHNlOworCisgICAgICAgIGlmICghbUFnZW50c0Fsb2NbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGFkZHJlc3MgPSAmKG1BZ2VudHNBbG9jW2ldLkdldEFkZHJlc3MoKSk7CisgICAgICAgIGl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisKKyAgICAgICAgd2hpbGUgKG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0TmV4dE9uTWVzaFByZWZpeCgmaXRlcmF0b3IsIHJsb2MxNiwgJmNvbmZpZykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFjb25maWcubURoY3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0Q29udGV4dCgqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KCYoY29uZmlnLm1QcmVmaXgubVByZWZpeCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd3BhbkNvbnRleHQpOworCisgICAgICAgICAgICBpZiAoYWRkcmVzcy0+bUZpZWxkcy5tOFsxNV0gPT0gbG93cGFuQ29udGV4dC5tQ29udGV4dElkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIHN0aWxsIGluIG5ldHdvcmsgZGF0YQorICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0Q29udGV4dChhZGRyZXNzLT5tRmllbGRzLm04WzE1XSwgbG93cGFuQ29udGV4dCk7CisgICAgICAgICAgICBuZXRpZi5SZW1vdmVVbmljYXN0QWRkcmVzcyhtQWdlbnRzQWxvY1tpXSk7CisgICAgICAgICAgICBtQWdlbnRzQWxvY1tpXS5tVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFJlbW92ZVByZWZpeEFnZW50KGxvd3BhbkNvbnRleHQubVByZWZpeCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBhZGQgZGhjcCBhZ2VudCBhbG9jIGFuZCBwcmVmaXggZGVsZWdhdGlvbgorICAgIGl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisKKyAgICB3aGlsZSAobmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXROZXh0T25NZXNoUHJlZml4KCZpdGVyYXRvciwgcmxvYzE2LCAmY29uZmlnKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgZm91bmQgPSBmYWxzZTsKKworICAgICAgICBpZiAoIWNvbmZpZy5tRGhjcCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldENvbnRleHQoKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6QWRkcmVzcyAqPigmY29uZmlnLm1QcmVmaXgubVByZWZpeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dwYW5Db250ZXh0KTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgT1BFTlRIUkVBRF9DT05GSUdfTlVNX0RIQ1BfUFJFRklYRVM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYWRkcmVzcyA9ICYobUFnZW50c0Fsb2NbaV0uR2V0QWRkcmVzcygpKTsKKworICAgICAgICAgICAgaWYgKChtQWdlbnRzQWxvY1tpXS5tVmFsaWQpICYmIChhZGRyZXNzLT5tRmllbGRzLm04WzE1XSA9PSBsb3dwYW5Db250ZXh0Lm1Db250ZXh0SWQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGFscmVheSBhZGRlZAorICAgICAgICBpZiAoZm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbUFnZW50c0Fsb2NbaV0ubVZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZHJlc3MgPSAmKG1BZ2VudHNBbG9jW2ldLkdldEFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KGFkZHJlc3MsIG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbFByZWZpeCgpLCA4KTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5tRmllbGRzLm0xNls0XSA9IEhvc3RTd2FwMTYoMHgwMDAwKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5tRmllbGRzLm0xNls1XSA9IEhvc3RTd2FwMTYoMHgwMGZmKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5tRmllbGRzLm0xNls2XSA9IEhvc3RTd2FwMTYoMHhmZTAwKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5tRmllbGRzLm04WzE0XSA9IElwNjo6QWRkcmVzczo6a0Fsb2MxNk1hc2s7CisgICAgICAgICAgICAgICAgYWRkcmVzcy0+bUZpZWxkcy5tOFsxNV0gPSBsb3dwYW5Db250ZXh0Lm1Db250ZXh0SWQ7CisgICAgICAgICAgICAgICAgbUFnZW50c0Fsb2NbaV0ubVByZWZpeExlbmd0aCA9IDEyODsKKyAgICAgICAgICAgICAgICBtQWdlbnRzQWxvY1tpXS5tUHJlZmVycmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtQWdlbnRzQWxvY1tpXS5tVmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAgIG5ldGlmLkFkZFVuaWNhc3RBZGRyZXNzKG1BZ2VudHNBbG9jW2ldKTsKKyAgICAgICAgICAgICAgICBBZGRQcmVmaXhBZ2VudChjb25maWcubVByZWZpeCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiBubyBhdmFpbGFibGUgRGhjcCBBZ2VudCBBbG9jIHJlc291cmNlcworICAgICAgICBpZiAoaSA9PSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUykKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1QcmVmaXhBZ2VudHNDb3VudCA+IDApCisgICAgeworICAgICAgICBTdGFydCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdG9wKCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6U3RhcnQodm9pZCkKK3sKKyAgICBJcDY6OlNvY2tBZGRyIHNvY2thZGRyOworICAgIHNvY2thZGRyLm1Qb3J0ID0ga0RoY3BTZXJ2ZXJQb3J0OworICAgIG1Tb2NrZXQuT3BlbigmRGhjcDZTZXJ2ZXI6OkhhbmRsZVVkcFJlY2VpdmUsIHRoaXMpOworICAgIG1Tb2NrZXQuQmluZChzb2NrYWRkcik7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6U3RvcCh2b2lkKQoreworICAgIG1Tb2NrZXQuQ2xvc2UoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6QWRkUHJlZml4QWdlbnQob3RJcDZQcmVmaXggJmFJcDZQcmVmaXgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1QcmVmaXhBZ2VudHNbaV0uR2V0UHJlZml4KCktPm1MZW5ndGggIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBtUHJlZml4QWdlbnRzW2ldLlNldFByZWZpeChhSXA2UHJlZml4KTsKKyAgICAgICAgbVByZWZpeEFnZW50c0NvdW50Kys7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2U2VydmVyOjpSZW1vdmVQcmVmaXhBZ2VudChjb25zdCB1aW50OF90ICphSXA2QWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgIG90SXA2UHJlZml4ICpwcmVmaXggPSBOVUxMOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgT1BFTlRIUkVBRF9DT05GSUdfTlVNX0RIQ1BfUFJFRklYRVM7IGkrKykKKyAgICB7CisgICAgICAgIHByZWZpeCA9IG1QcmVmaXhBZ2VudHNbaV0uR2V0UHJlZml4KCk7CisKKyAgICAgICAgaWYgKHByZWZpeC0+bUxlbmd0aCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdElwNlByZWZpeE1hdGNoKCYocHJlZml4LT5tUHJlZml4KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBvdElwNkFkZHJlc3MgKj4oYUlwNkFkZHJlc3MpKSA+PSBwcmVmaXgtPm1MZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbXNldCgmKG1QcmVmaXhBZ2VudHNbaV0pLCAwLCBzaXplb2YoUHJlZml4QWdlbnQpKTsKKyAgICAgICAgICAgIG1QcmVmaXhBZ2VudHNDb3VudC0tOworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBEaGNwNlNlcnZlcjo6SGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIERoY3A2U2VydmVyICpvYmogPSBzdGF0aWNfY2FzdDxEaGNwNlNlcnZlciAqPihhQ29udGV4dCk7CisgICAgb2JqLT5IYW5kbGVVZHBSZWNlaXZlKCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgRGhjcDZTZXJ2ZXI6OkhhbmRsZVVkcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBEaGNwNkhlYWRlciBoZWFkZXI7CisgICAgb3RJcDZBZGRyZXNzIGRzdCA9IGFNZXNzYWdlSW5mby5tUGVlckFkZHI7CisKKyAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKGhlYWRlciksICZoZWFkZXIpID09IHNpemVvZihoZWFkZXIpKTsKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KHNpemVvZihoZWFkZXIpKTsKKworICAgIC8vIGRpc2NhcmQgaWYgbm90IHNvbGljaXQgdHlwZQorICAgIFZlcmlmeU9yRXhpdCgoaGVhZGVyLkdldFR5cGUoKSA9PSBrVHlwZVNvbGljaXQpKTsKKworICAgIFByb2Nlc3NTb2xpY2l0KGFNZXNzYWdlLCBkc3QsIGhlYWRlci5HZXRUcmFuc2FjdGlvbklkKCkpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBEaGNwNlNlcnZlcjo6UHJvY2Vzc1NvbGljaXQoTWVzc2FnZSAmYU1lc3NhZ2UsIG90SXA2QWRkcmVzcyAmYURzdCwgdWludDhfdCAqYVRyYW5zYWN0aW9uSWQpCit7CisgICAgSWFOYSBpYW5hOworICAgIENsaWVudElkZW50aWZpZXIgY2xpZW50SWRlbnRpZmllcjsKKyAgICB1aW50MTZfdCBvcHRpb25PZmZzZXQ7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDE2X3QgbGVuZ3RoID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKworICAgIC8vIENsaWVudCBJZGVudGlmaWVyIChkaXNjYXJkIGlmIG5vdCBwcmVzZW50KQorICAgIFZlcmlmeU9yRXhpdCgob3B0aW9uT2Zmc2V0ID0gRmluZE9wdGlvbihhTWVzc2FnZSwgb2Zmc2V0LCBsZW5ndGgsIGtPcHRpb25DbGllbnRJZGVudGlmaWVyKSkgPiAwKTsKKyAgICBTdWNjZXNzT3JFeGl0KFByb2Nlc3NDbGllbnRJZGVudGlmaWVyKGFNZXNzYWdlLCBvcHRpb25PZmZzZXQsIGNsaWVudElkZW50aWZpZXIpKTsKKworICAgIC8vIFNlcnZlciBJZGVudGlmaWVyIChhc3N1bWluZyBSYXBpZCBDb21taXQsIGRpc2NhcmQgaWYgcHJlc2VudCkKKyAgICBWZXJpZnlPckV4aXQoRmluZE9wdGlvbihhTWVzc2FnZSwgb2Zmc2V0LCBsZW5ndGgsIGtPcHRpb25TZXJ2ZXJJZGVudGlmaWVyKSA9PSAwKTsKKworICAgIC8vIFJhcGlkIENvbW1pdCAoYXNzdW1pbmcgUmFwaWQgQ29tbWl0LCBkaXNjYXJkIGlmIG5vdCBwcmVzZW50KQorICAgIFZlcmlmeU9yRXhpdChGaW5kT3B0aW9uKGFNZXNzYWdlLCBvZmZzZXQsIGxlbmd0aCwga09wdGlvblJhcGlkQ29tbWl0KSA+IDApOworCisgICAgLy8gRWxhcHNlZCBUaW1lIGlmIHByZXNlbnQKKyAgICBpZiAoKG9wdGlvbk9mZnNldCA9IEZpbmRPcHRpb24oYU1lc3NhZ2UsIG9mZnNldCwgbGVuZ3RoLCBrT3B0aW9uRWxhcHNlZFRpbWUpKSA+IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KFByb2Nlc3NFbGFwc2VkVGltZShhTWVzc2FnZSwgb3B0aW9uT2Zmc2V0KSk7CisgICAgfQorCisgICAgLy8gSUFfTkEgKGRpc2NhcmQgaWYgbm90IHByZXNlbnQpCisgICAgVmVyaWZ5T3JFeGl0KChvcHRpb25PZmZzZXQgPSBGaW5kT3B0aW9uKGFNZXNzYWdlLCBvZmZzZXQsIGxlbmd0aCwga09wdGlvbklhTmEpKSA+IDApOworICAgIFN1Y2Nlc3NPckV4aXQoUHJvY2Vzc0lhTmEoYU1lc3NhZ2UsIG9wdGlvbk9mZnNldCwgaWFuYSkpOworCisgICAgU3VjY2Vzc09yRXhpdChTZW5kUmVwbHkoYURzdCwgYVRyYW5zYWN0aW9uSWQsIGNsaWVudElkZW50aWZpZXIsIGlhbmEpKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3VpbnQxNl90IERoY3A2U2VydmVyOjpGaW5kT3B0aW9uKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCB1aW50MTZfdCBhTGVuZ3RoLCBDb2RlIGFDb2RlKQoreworICAgIHVpbnQxNl90IGVuZCA9IGFPZmZzZXQgKyBhTGVuZ3RoOworCisgICAgd2hpbGUgKGFPZmZzZXQgPD0gZW5kKQorICAgIHsKKyAgICAgICAgRGhjcDZPcHRpb24gb3B0aW9uOworICAgICAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZChhT2Zmc2V0LCBzaXplb2Yob3B0aW9uKSwgJm9wdGlvbikgPT0gc2l6ZW9mKG9wdGlvbikpOworCisgICAgICAgIGlmIChvcHRpb24uR2V0Q29kZSgpID09IGFDb2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYU9mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIGFPZmZzZXQgKz0gc2l6ZW9mKG9wdGlvbikgKyBvcHRpb24uR2V0TGVuZ3RoKCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiAwOworfQorb3RFcnJvciBEaGNwNlNlcnZlcjo6UHJvY2Vzc0NsaWVudElkZW50aWZpZXIoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoKChhTWVzc2FnZS5SZWFkKGFPZmZzZXQsIHNpemVvZihhQ2xpZW50KSwgJmFDbGllbnQpID09IHNpemVvZihhQ2xpZW50KSkgJiYKKyAgICAgICAgICAgICAgICAgIChhQ2xpZW50LkdldExlbmd0aCgpID09IChzaXplb2YoYUNsaWVudCkgLSBzaXplb2YoRGhjcDZPcHRpb24pKSkgJiYKKyAgICAgICAgICAgICAgICAgIChhQ2xpZW50LkdldER1aWRUeXBlKCkgPT0ga0R1aWRMTCkgJiYKKyAgICAgICAgICAgICAgICAgIChhQ2xpZW50LkdldER1aWRIYXJkd2FyZVR5cGUoKSA9PSBrSGFyZHdhcmVUeXBlRXVpNjQpKSwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6UHJvY2Vzc0VsYXBzZWRUaW1lKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEVsYXBzZWRUaW1lIG9wdGlvbjsKKworICAgIFZlcmlmeU9yRXhpdCgoKGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pKSAmJgorICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXRMZW5ndGgoKSA9PSAoKHNpemVvZihvcHRpb24pIC0gc2l6ZW9mKERoY3A2T3B0aW9uKSkpKSksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGhjcDZTZXJ2ZXI6OlByb2Nlc3NJYU5hKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCBJYU5hICZhSWFOYSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MTZfdCBvcHRpb25PZmZzZXQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworCisgICAgVmVyaWZ5T3JFeGl0KChhTWVzc2FnZS5SZWFkKGFPZmZzZXQsIHNpemVvZihhSWFOYSksICZhSWFOYSkgPT0gc2l6ZW9mKGFJYU5hKSksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgYU9mZnNldCArPSBzaXplb2YoYUlhTmEpOworICAgIGxlbmd0aCA9IGFJYU5hLkdldExlbmd0aCgpICsgc2l6ZW9mKERoY3A2T3B0aW9uKSAtIHNpemVvZihJYU5hKTsKKworICAgIFZlcmlmeU9yRXhpdChsZW5ndGggPD0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhT2Zmc2V0LCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG1QcmVmaXhBZ2VudHNNYXNrID0gMDsKKworICAgIHdoaWxlIChsZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KChvcHRpb25PZmZzZXQgPSBGaW5kT3B0aW9uKGFNZXNzYWdlLCBhT2Zmc2V0LCBsZW5ndGgsIGtPcHRpb25JYUFkZHJlc3MpKSA+IDApOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc0lhQWRkcmVzcyhhTWVzc2FnZSwgb3B0aW9uT2Zmc2V0KSk7CisKKyAgICAgICAgbGVuZ3RoIC09ICgob3B0aW9uT2Zmc2V0IC0gYU9mZnNldCkgKyBzaXplb2YoSWFBZGRyZXNzKSk7CisgICAgICAgIGFPZmZzZXQgPSBvcHRpb25PZmZzZXQgKyBzaXplb2YoSWFBZGRyZXNzKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2U2VydmVyOjpQcm9jZXNzSWFBZGRyZXNzKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90SXA2UHJlZml4ICpwcmVmaXggPSBOVUxMOworICAgIElhQWRkcmVzcyBvcHRpb247CisKKyAgICBWZXJpZnlPckV4aXQoKChhTWVzc2FnZS5SZWFkKGFPZmZzZXQsIHNpemVvZihvcHRpb24pLCAmb3B0aW9uKSA9PSBzaXplb2Yob3B0aW9uKSkgJiYKKyAgICAgICAgICAgICAgICAgIG9wdGlvbi5HZXRMZW5ndGgoKSA9PSAoc2l6ZW9mKG9wdGlvbikgLSBzaXplb2YoRGhjcDZPcHRpb24pKSksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gbWFzayBtYXRjaGluZyBwcmVmaXgKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUzsgaSsrKQorICAgIHsKKyAgICAgICAgcHJlZml4ID0gbVByZWZpeEFnZW50c1tpXS5HZXRQcmVmaXgoKTsKKworICAgICAgICBpZiAocHJlZml4LT5tTGVuZ3RoID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG90SXA2UHJlZml4TWF0Y2gob3B0aW9uLkdldEFkZHJlc3MoKSwgJihwcmVmaXgtPm1QcmVmaXgpKSA+PSBwcmVmaXgtPm1MZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1QcmVmaXhBZ2VudHNNYXNrIHw9ICgxIDw8IGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2U2VydmVyOjpTZW5kUmVwbHkob3RJcDZBZGRyZXNzICZhRHN0LCB1aW50OF90ICphVHJhbnNhY3Rpb25JZCwgQ2xpZW50SWRlbnRpZmllciAmYUNsaWVudCwgSWFOYSAmYUlhTmEpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbVNvY2tldC5OZXdNZXNzYWdlKDApKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIGFUcmFuc2FjdGlvbklkKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFNlcnZlcklkZW50aWZpZXIoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQ2xpZW50SWRlbnRpZmllcigqbWVzc2FnZSwgYUNsaWVudCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRJYU5hKCptZXNzYWdlLCBhSWFOYSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTdGF0dXNDb2RlKCptZXNzYWdlLCBrU3RhdHVzU3VjY2VzcykpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRJYUFkZHJlc3MoKm1lc3NhZ2UsIGFDbGllbnQpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUmFwaWRDb21taXQoKm1lc3NhZ2UpKTsKKworICAgIG1lbXNldCgmbWVzc2FnZUluZm8sIDAsIHNpemVvZihtZXNzYWdlSW5mbykpOworICAgIG1lbWNweSgmbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm04LCAmYURzdCwgc2l6ZW9mKG90SXA2QWRkcmVzcykpOworICAgIG1lc3NhZ2VJbmZvLm1QZWVyUG9ydCA9IGtEaGNwQ2xpZW50UG9ydDsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNvY2tldC5TZW5kVG8oKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKK2V4aXQ6CisKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMICYmIGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2U2VydmVyOjpBcHBlbmRIZWFkZXIoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQ4X3QgKmFUcmFuc2FjdGlvbklkKQoreworICAgIERoY3A2SGVhZGVyIGhlYWRlcjsKKworICAgIGhlYWRlci5Jbml0KCk7CisgICAgaGVhZGVyLlNldFR5cGUoa1R5cGVSZXBseSk7CisgICAgaGVhZGVyLlNldFRyYW5zYWN0aW9uSWQoYVRyYW5zYWN0aW9uSWQpOworICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQoJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOworfQorCitvdEVycm9yIERoY3A2U2VydmVyOjpBcHBlbmRDbGllbnRJZGVudGlmaWVyKE1lc3NhZ2UgJmFNZXNzYWdlLCBDbGllbnRJZGVudGlmaWVyICZhQ2xpZW50KQoreworICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQoJmFDbGllbnQsIHNpemVvZihhQ2xpZW50KSk7Cit9CisKK290RXJyb3IgRGhjcDZTZXJ2ZXI6OkFwcGVuZFNlcnZlcklkZW50aWZpZXIoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgU2VydmVySWRlbnRpZmllciBvcHRpb247CisKKyAgICBvcHRpb24uSW5pdCgpOworICAgIG9wdGlvbi5TZXREdWlkVHlwZShrRHVpZExMKTsKKyAgICBvcHRpb24uU2V0RHVpZEhhcmR3YXJlVHlwZShrSGFyZHdhcmVUeXBlRXVpNjQpOworICAgIG9wdGlvbi5TZXREdWlkTGlua0xheWVyQWRkcmVzcyhHZXROZXRpZigpLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCgmb3B0aW9uLCBzaXplb2Yob3B0aW9uKSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6QXBwZW5kSWFOYShNZXNzYWdlICZhTWVzc2FnZSwgSWFOYSAmYUlhTmEpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3QgbGVuZ3RoID0gMDsKKworICAgIGlmIChtUHJlZml4QWdlbnRzTWFzaykKKyAgICB7CisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgobVByZWZpeEFnZW50c01hc2sgJiAoMSA8PCBpKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IHNpemVvZihJYUFkZHJlc3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGxlbmd0aCArPSBzaXplb2YoSWFBZGRyZXNzKSAqIG1QcmVmaXhBZ2VudHNDb3VudDsKKyAgICB9CisKKyAgICBsZW5ndGggKz0gc2l6ZW9mKElhTmEpICsgc2l6ZW9mKFN0YXR1c0NvZGUpIC0gc2l6ZW9mKERoY3A2T3B0aW9uKTsKKworICAgIGFJYU5hLlNldExlbmd0aChsZW5ndGgpOworICAgIGFJYU5hLlNldFQxKE9UX0RIQ1A2X0RFRkFVTFRfSUFfTkFfVDEpOworICAgIGFJYU5hLlNldFQyKE9UX0RIQ1A2X0RFRkFVTFRfSUFfTkFfVDIpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJmFJYU5hLCBzaXplb2YoSWFOYSkpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGhjcDZTZXJ2ZXI6OkFwcGVuZFN0YXR1c0NvZGUoTWVzc2FnZSAmYU1lc3NhZ2UsIFN0YXR1cyBhU3RhdHVzKQoreworICAgIFN0YXR1c0NvZGUgb3B0aW9uOworCisgICAgb3B0aW9uLkluaXQoKTsKKyAgICBvcHRpb24uU2V0U3RhdHVzQ29kZShhU3RhdHVzKTsKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZvcHRpb24sIHNpemVvZihvcHRpb24pKTsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6QXBwZW5kSWFBZGRyZXNzKE1lc3NhZ2UgJmFNZXNzYWdlLCBDbGllbnRJZGVudGlmaWVyICZhQ2xpZW50KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90SXA2UHJlZml4ICpwcmVmaXggPSBOVUxMOworCisgICAgLy8gaWYgc3BlY2lmaWVkLCBvbmx5IGFwcGx5IHNwZWNpZmllZCBwcmVmaXhlcworICAgIGlmIChtUHJlZml4QWdlbnRzTWFzaykKKyAgICB7CisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtUHJlZml4QWdlbnRzTWFzayAmICgxIDw8IGkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByZWZpeCA9IG1QcmVmaXhBZ2VudHNbaV0uR2V0UHJlZml4KCk7CisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFkZElhQWRkcmVzcyhhTWVzc2FnZSwgKnByZWZpeCwgYUNsaWVudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgIC8vIGlmIG5vdCBzcGVjaWZpZWQsIGFwcGx5IGFsbCBjb25maWd1cmVkIHByZWZpeGVzCisgICAgeworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBwcmVmaXggPSBtUHJlZml4QWdlbnRzW2ldLkdldFByZWZpeCgpOworCisgICAgICAgICAgICBpZiAocHJlZml4LT5tTGVuZ3RoID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBZGRJYUFkZHJlc3MoYU1lc3NhZ2UsICpwcmVmaXgsIGFDbGllbnQpKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGhjcDZTZXJ2ZXI6OkFkZElhQWRkcmVzcyhNZXNzYWdlICZhTWVzc2FnZSwgb3RJcDZQcmVmaXggJmFJcDZQcmVmaXgsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSWFBZGRyZXNzIG9wdGlvbjsKKworICAgIG9wdGlvbi5Jbml0KCk7CisgICAgbWVtY3B5KChvcHRpb24uR2V0QWRkcmVzcygpLT5tRmllbGRzLm04KSwgJihhSXA2UHJlZml4Lm1QcmVmaXgpLCA4KTsKKyAgICBtZW1jcHkoJihvcHRpb24uR2V0QWRkcmVzcygpLT5tRmllbGRzLm04WzhdKSwgYUNsaWVudC5HZXREdWlkTGlua0xheWVyQWRkcmVzcygpLCBzaXplb2YoTWFjOjpFeHRBZGRyZXNzKSk7CisgICAgb3B0aW9uLlNldFByZWZlcnJlZExpZmV0aW1lKE9UX0RIQ1A2X0RFRkFVTFRfUFJFRkVSUkVEX0xJRkVUSU1FKTsKKyAgICBvcHRpb24uU2V0VmFsaWRMaWZldGltZShPVF9ESENQNl9ERUZBVUxUX1ZBTElEX0xJRkVUSU1FKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZvcHRpb24sIHNpemVvZihvcHRpb24pKSk7CitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6QXBwZW5kUmFwaWRDb21taXQoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgUmFwaWRDb21taXQgb3B0aW9uOworCisgICAgb3B0aW9uLkluaXQoKTsKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZvcHRpb24sIHNpemVvZihvcHRpb24pKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIERoY3A2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vICBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9kaGNwNl9zZXJ2ZXIuaHBwIGIvc3JjL2NvcmUvbmV0L2RoY3A2X3NlcnZlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5YzRhNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9kaGNwNl9zZXJ2ZXIuaHBwCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgREhDUHY2IFNlcnZlci4KKyAqLworCisjaWZuZGVmIERIQ1A2X1NFUlZFUl9IUFBfCisjZGVmaW5lIERIQ1A2X1NFUlZFUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAibWFjL21hYy5ocHAiCisjaW5jbHVkZSAibmV0L2RoY3A2LmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXIuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKK25hbWVzcGFjZSBOZXR3b3JrRGF0YSB7IGNsYXNzIExlYWRlcjsgfQorCituYW1lc3BhY2UgRGhjcDYgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtZGhjcDYKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIERIQ1B2NiBTZXJ2ZXIuCisgKgorICogQHsKKyAqCisgKi8KKworCisvKioKKyAqIERIQ1B2NiBkZWZhdWx0IGNvbnN0YW50CisgKgorICovCisjZGVmaW5lIE9UX0RIQ1A2X0RFRkFVTFRfSUFfTkFfVDEgICAgICAgICAgICAweGZmZmZmZmZmVQorI2RlZmluZSBPVF9ESENQNl9ERUZBVUxUX0lBX05BX1QyICAgICAgICAgICAgMHhmZmZmZmZmZlUKKyNkZWZpbmUgT1RfREhDUDZfREVGQVVMVF9QUkVGRVJSRURfTElGRVRJTUUgIDB4ZmZmZmZmZmZVCisjZGVmaW5lIE9UX0RIQ1A2X0RFRkFVTFRfVkFMSURfTElGRVRJTUUgICAgICAweGZmZmZmZmZmVQorCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBwcmVmaXggYWdlbnQuCisgKgorICovCisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBQcmVmaXhBZ2VudAoreworcHVibGljOgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHByZWZpeC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHByZWZpeC4KKyAgICAgKgorICAgICAqLworICAgIG90SXA2UHJlZml4ICpHZXRQcmVmaXgodm9pZCkgeyByZXR1cm4gJm1JcDZQcmVmaXg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgcHJlZml4LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlwNlByZWZpeCBUaGUgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHByZWZpeCB0byBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFByZWZpeChvdElwNlByZWZpeCAmYUlwNlByZWZpeCkgeyBtZW1jcHkoJm1JcDZQcmVmaXgsICZhSXA2UHJlZml4LCBzaXplb2Yob3RJcDZQcmVmaXgpKTsgfQorCitwcml2YXRlOgorICAgIG90SXA2UHJlZml4IG1JcDZQcmVmaXg7ICAgICAgICAgICAgICAgICAgLy8vPCBwcmVmaXgKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCitjbGFzcyBEaGNwNlNlcnZlcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGV4cGxpY2l0IERoY3A2U2VydmVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyBESENQIEFnZW50cyBhbmQgREhDUCBBbG9jcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgVXBkYXRlU2VydmljZSgpOworCitwcml2YXRlOgorICAgIG90RXJyb3IgU3RhcnQodm9pZCk7CisgICAgb3RFcnJvciBTdG9wKHZvaWQpOworCisgICAgb3RFcnJvciBBZGRQcmVmaXhBZ2VudChvdElwNlByZWZpeCAmYUlwNlByZWZpeCk7CisgICAgb3RFcnJvciBSZW1vdmVQcmVmaXhBZ2VudChjb25zdCB1aW50OF90ICphSXA2QWRkcmVzcyk7CisKKyAgICBvdEVycm9yIEFwcGVuZEhlYWRlcihNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCAqYVRyYW5zYWN0aW9uSWQpOworICAgIG90RXJyb3IgQXBwZW5kQ2xpZW50SWRlbnRpZmllcihNZXNzYWdlICZhTWVzc2FnZSwgQ2xpZW50SWRlbnRpZmllciAmYUNsaWVudCk7CisgICAgb3RFcnJvciBBcHBlbmRTZXJ2ZXJJZGVudGlmaWVyKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICBvdEVycm9yIEFwcGVuZElhTmEoTWVzc2FnZSAmYU1lc3NhZ2UsIElhTmEgJmFJYU5hKTsKKyAgICBvdEVycm9yIEFwcGVuZFN0YXR1c0NvZGUoTWVzc2FnZSAmYU1lc3NhZ2UsIFN0YXR1cyBhU3RhdHVzQ29kZSk7CisgICAgb3RFcnJvciBBcHBlbmRJYUFkZHJlc3MoTWVzc2FnZSAmYU1lc3NhZ2UsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnQpOworICAgIG90RXJyb3IgQXBwZW5kUmFwaWRDb21taXQoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgQXBwZW5kVmVuZG9yU3BlY2lmaWNJbmZvcm1hdGlvbihNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICBvdEVycm9yIEFkZElhQWRkcmVzcyhNZXNzYWdlICZhTWVzc2FnZSwgb3RJcDZQcmVmaXggJmFJcDZQcmVmaXgsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVVkcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICB2b2lkIFByb2Nlc3NTb2xpY2l0KE1lc3NhZ2UgJmFNZXNzYWdlLCBvdElwNkFkZHJlc3MgJmFEc3QsIHVpbnQ4X3QgKmFUcmFuc2FjdGlvbklkKTsKKworICAgIHVpbnQxNl90IEZpbmRPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQxNl90IGFMZW5ndGgsIENvZGUgYUNvZGUpOworICAgIG90RXJyb3IgUHJvY2Vzc0NsaWVudElkZW50aWZpZXIoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnQpOworICAgIG90RXJyb3IgUHJvY2Vzc0lhTmEoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIElhTmEgJmFJYU5hKTsKKyAgICBvdEVycm9yIFByb2Nlc3NJYUFkZHJlc3MoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQpOworICAgIG90RXJyb3IgUHJvY2Vzc0VsYXBzZWRUaW1lKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KTsKKworICAgIG90RXJyb3IgU2VuZFJlcGx5KG90SXA2QWRkcmVzcyAmYURzdCwgdWludDhfdCAqYVRyYW5zYWN0aW9uSWQsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnRJZGVudGlmaWVyLCBJYU5hICZhSWFOYSk7CisKKyAgICBJcDY6OlVkcFNvY2tldCBtU29ja2V0OworCisgICAgSXA2OjpOZXRpZlVuaWNhc3RBZGRyZXNzIG1BZ2VudHNBbG9jW09QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTXTsKKyAgICBQcmVmaXhBZ2VudCBtUHJlZml4QWdlbnRzW09QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTXTsKKyAgICB1aW50OF90IG1QcmVmaXhBZ2VudHNNYXNrOworICAgIHVpbnQ4X3QgbVByZWZpeEFnZW50c0NvdW50OworfTsKKworfSAgLy8gbmFtZXNwYWNlIERoY3A2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBESENQNl9TRVJWRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2Ruc19jbGllbnQuY3BwIGIvc3JjL2NvcmUvbmV0L2Ruc19jbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMGMzNGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvZG5zX2NsaWVudC5jcHAKQEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiZG5zX2NsaWVudC5ocHAiCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBETlMgY2xpZW50LgorICovCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIERucyB7CisKK290RXJyb3IgQ2xpZW50OjpTdGFydCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgSXA2OjpTb2NrQWRkciBhZGRyOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1Tb2NrZXQuT3BlbigmQ2xpZW50OjpIYW5kbGVVZHBSZWNlaXZlLCB0aGlzKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1Tb2NrZXQuQmluZChhZGRyKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIENsaWVudDo6U3RvcCh2b2lkKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBtUGVuZGluZ1F1ZXJpZXMuR2V0SGVhZCgpOworICAgIE1lc3NhZ2UgKm1lc3NhZ2VUb1JlbW92ZTsKKyAgICBRdWVyeU1ldGFkYXRhIHF1ZXJ5TWV0YWRhdGE7CisKKyAgICAvLyBSZW1vdmUgYWxsIHBlbmRpbmcgcXVlcmllcy4KKyAgICB3aGlsZSAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZVRvUmVtb3ZlID0gbWVzc2FnZTsKKyAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKTsKKworICAgICAgICBxdWVyeU1ldGFkYXRhLlJlYWRGcm9tKCptZXNzYWdlVG9SZW1vdmUpOworICAgICAgICBGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKCptZXNzYWdlVG9SZW1vdmUsIHF1ZXJ5TWV0YWRhdGEsIE5VTEwsIDAsIE9UX0VSUk9SX0FCT1JUKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVNvY2tldC5DbG9zZSgpOworfQorCitvdEVycm9yIENsaWVudDo6UXVlcnkoY29uc3Qgb3REbnNRdWVyeSAqYVF1ZXJ5LCBvdERuc1Jlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBRdWVyeU1ldGFkYXRhIHF1ZXJ5TWV0YWRhdGEoYUhhbmRsZXIsIGFDb250ZXh0KTsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBNZXNzYWdlICptZXNzYWdlQ29weSA9IE5VTEw7CisgICAgSGVhZGVyIGhlYWRlcjsKKyAgICBRdWVzdGlvbkFhYWEgcXVlc3Rpb247CisgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqbWVzc2FnZUluZm87CisKKyAgICBWZXJpZnlPckV4aXQoYVF1ZXJ5LT5tSG9zdG5hbWUgIT0gTlVMTCAmJiBhUXVlcnktPm1NZXNzYWdlSW5mbyAhPSBOVUxMLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBoZWFkZXIuU2V0TWVzc2FnZUlkKG1NZXNzYWdlSWQrKyk7CisgICAgaGVhZGVyLlNldFR5cGUoSGVhZGVyOjprVHlwZVF1ZXJ5KTsKKyAgICBoZWFkZXIuU2V0UXVlcnlUeXBlKEhlYWRlcjo6a1F1ZXJ5VHlwZVN0YW5kYXJkKTsKKworICAgIGlmICghYVF1ZXJ5LT5tTm9SZWN1cnNpb24pCisgICAgeworICAgICAgICBoZWFkZXIuU2V0UmVjdXJzaW9uRGVzaXJlZEZsYWcoKTsKKyAgICB9CisKKyAgICBoZWFkZXIuU2V0UXVlc3Rpb25Db3VudCgxKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01lc3NhZ2UoaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRDb21wcmVzc2VkSG9zdG5hbWUoKm1lc3NhZ2UsIGFRdWVyeS0+bUhvc3RuYW1lKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IHF1ZXN0aW9uLkFwcGVuZFRvKCptZXNzYWdlKSk7CisKKyAgICBtZXNzYWdlSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYVF1ZXJ5LT5tTWVzc2FnZUluZm8pOworCisgICAgcXVlcnlNZXRhZGF0YS5tSG9zdG5hbWUgICAgICAgICAgICA9IGFRdWVyeS0+bUhvc3RuYW1lOworICAgIHF1ZXJ5TWV0YWRhdGEubVRyYW5zbWlzc2lvblRpbWUgICAgPSBUaW1lcjo6R2V0Tm93KCkgKyBrUmVzcG9uc2VUaW1lb3V0OworICAgIHF1ZXJ5TWV0YWRhdGEubVNvdXJjZUFkZHJlc3MgICAgICAgPSBtZXNzYWdlSW5mby0+R2V0U29ja0FkZHIoKTsKKyAgICBxdWVyeU1ldGFkYXRhLm1EZXN0aW5hdGlvblBvcnQgICAgID0gbWVzc2FnZUluZm8tPkdldFBlZXJQb3J0KCk7CisgICAgcXVlcnlNZXRhZGF0YS5tRGVzdGluYXRpb25BZGRyZXNzICA9IG1lc3NhZ2VJbmZvLT5HZXRQZWVyQWRkcigpOworICAgIHF1ZXJ5TWV0YWRhdGEubVJldHJhbnNtaXNzaW9uQ291bnQgPSAwOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlQ29weSA9IENvcHlBbmRFbnF1ZXVlTWVzc2FnZSgqbWVzc2FnZSwgcXVlcnlNZXRhZGF0YSkpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCAqbWVzc2FnZUluZm8pKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZXNzYWdlQ29weSkKKyAgICAgICAgeworICAgICAgICAgICAgRGVxdWV1ZU1lc3NhZ2UoKm1lc3NhZ2VDb3B5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworTWVzc2FnZSAqQ2xpZW50OjpOZXdNZXNzYWdlKGNvbnN0IEhlYWRlciAmYUhlYWRlcikKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG1Tb2NrZXQuTmV3TWVzc2FnZShzaXplb2YoYUhlYWRlcikpKSAhPSBOVUxMKTsKKyAgICBtZXNzYWdlLT5QcmVwZW5kKCZhSGVhZGVyLCBzaXplb2YoYUhlYWRlcikpOworICAgIG1lc3NhZ2UtPlNldE9mZnNldCgwKTsKKworZXhpdDoKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKworTWVzc2FnZSAqQ2xpZW50OjpDb3B5QW5kRW5xdWV1ZU1lc3NhZ2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IFF1ZXJ5TWV0YWRhdGEgJmFRdWVyeU1ldGFkYXRhKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQzMl90IG5vdyA9IFRpbWVyOjpHZXROb3coKTsKKyAgICBNZXNzYWdlICptZXNzYWdlQ29weSA9IE5VTEw7CisgICAgdWludDMyX3QgbmV4dFRyYW5zbWlzc2lvblRpbWU7CisKKyAgICAvLyBDcmVhdGUgYSBtZXNzYWdlIGNvcHkgZm9yIGZ1cnRoZXIgcmV0cmFuc21pc3Npb25zLgorICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZUNvcHkgPSBhTWVzc2FnZS5DbG9uZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgLy8gQXBwZW5kIHRoZSBjb3B5IHdpdGggcmV0cmFuc21pc3Npb24gZGF0YSBhbmQgYWRkIGl0IHRvIHRoZSBxdWV1ZS4KKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVF1ZXJ5TWV0YWRhdGEuQXBwZW5kVG8oKm1lc3NhZ2VDb3B5KSk7CisgICAgbVBlbmRpbmdRdWVyaWVzLkVucXVldWUoKm1lc3NhZ2VDb3B5KTsKKworICAgIC8vIFNldHVwIHRoZSB0aW1lci4KKyAgICBpZiAobVJldHJhbnNtaXNzaW9uVGltZXIuSXNSdW5uaW5nKCkpCisgICAgeworICAgICAgICAvLyBJZiB0aW1lciBpcyBhbHJlYWR5IHJ1bm5pbmcsIGNoZWNrIGlmIGl0IHNob3VsZCBiZSByZXN0YXJ0ZWQgd2l0aCBlYXJsaWVyIGZpcmUgdGltZS4KKyAgICAgICAgbmV4dFRyYW5zbWlzc2lvblRpbWUgPSBtUmV0cmFuc21pc3Npb25UaW1lci5HZXRGaXJlVGltZSgpOworCisgICAgICAgIGlmIChhUXVlcnlNZXRhZGF0YS5Jc0VhcmxpZXIobmV4dFRyYW5zbWlzc2lvblRpbWUpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmV0cmFuc21pc3Npb25UaW1lci5TdGFydChhUXVlcnlNZXRhZGF0YS5tVHJhbnNtaXNzaW9uVGltZSAtIG5vdyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVJldHJhbnNtaXNzaW9uVGltZXIuU3RhcnQoYVF1ZXJ5TWV0YWRhdGEubVRyYW5zbWlzc2lvblRpbWUgLSBub3cpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2VDb3B5ICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlQ29weS0+RnJlZSgpOworICAgICAgICBtZXNzYWdlQ29weSA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1lc3NhZ2VDb3B5OworfQorCit2b2lkIENsaWVudDo6RGVxdWV1ZU1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgbVBlbmRpbmdRdWVyaWVzLkRlcXVldWUoYU1lc3NhZ2UpOworCisgICAgaWYgKG1SZXRyYW5zbWlzc2lvblRpbWVyLklzUnVubmluZygpICYmIChtUGVuZGluZ1F1ZXJpZXMuR2V0SGVhZCgpID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgLy8gTm8gbW9yZSByZXF1ZXN0cyBwZW5kaW5nLCBzdG9wIHRoZSB0aW1lci4KKyAgICAgICAgbVJldHJhbnNtaXNzaW9uVGltZXIuU3RvcCgpOworICAgIH0KKworICAgIC8vIEZyZWUgdGhlIG1lc3NhZ2UgbWVtb3J5LgorICAgIGFNZXNzYWdlLkZyZWUoKTsKK30KKworb3RFcnJvciBDbGllbnQ6OlNlbmRNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgcmV0dXJuIG1Tb2NrZXQuU2VuZFRvKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCitvdEVycm9yIENsaWVudDo6U2VuZENvcHkoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIE1lc3NhZ2UgKm1lc3NhZ2VDb3B5ID0gTlVMTDsKKworICAgIC8vIENyZWF0ZSBhIG1lc3NhZ2UgY29weSBmb3IgbG93ZXIgbGF5ZXJzLgorICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZUNvcHkgPSBhTWVzc2FnZS5DbG9uZShhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZihRdWVyeU1ldGFkYXRhKSkpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvLyBTZW5kIHRoZSBjb3B5LgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZUNvcHksIGFNZXNzYWdlSW5mbykpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZUNvcHkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2VDb3B5LT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIENsaWVudDo6QXBwZW5kQ29tcHJlc3NlZEhvc3RuYW1lKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBjaGFyICphSG9zdG5hbWUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBpbmRleCA9IDA7CisgICAgdWludDhfdCBsYWJlbFBvc2l0aW9uID0gMDsKKyAgICB1aW50OF90IGxhYmVsU2l6ZSA9IDA7CisKKyAgICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICAgIC8vIExvb2sgZm9yIHN0cmluZyBzZXBhcmF0b3IuCisgICAgICAgIGlmIChhSG9zdG5hbWVbaW5kZXhdID09IGtMYWJlbFNlcGFyYXRvciB8fCBhSG9zdG5hbWVbaW5kZXhdID09IGtMYWJlbFRlcm1pbmF0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChsYWJlbFNpemUgPiAwLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZsYWJlbFNpemUsIDEpKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJmFIb3N0bmFtZVtsYWJlbFBvc2l0aW9uXSwgbGFiZWxTaXplKSk7CisKKyAgICAgICAgICAgIGxhYmVsUG9zaXRpb24gKz0gbGFiZWxTaXplICsgMTsKKyAgICAgICAgICAgIGxhYmVsU2l6ZSAgICAgID0gMDsKKworICAgICAgICAgICAgaWYgKGFIb3N0bmFtZVtpbmRleF0gPT0ga0xhYmVsVGVybWluYXRvcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhYmVsU2l6ZSsrOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXgrKzsKKyAgICB9CisKKyAgICAvLyBBZGQgdGVybWluYXRpb24gY2hhcmFjdGVyIGF0IHRoZSBlbmQuCisgICAgbGFiZWxTaXplID0ga0xhYmVsVGVybWluYXRvcjsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZsYWJlbFNpemUsIDEpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgQ2xpZW50OjpDb21wYXJlUXVlc3Rpb25zKE1lc3NhZ2UgJmFNZXNzYWdlUmVzcG9uc2UsIE1lc3NhZ2UgJmFNZXNzYWdlUXVlcnksIHVpbnQxNl90ICZhT2Zmc2V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgYnVmUXVlcnlba0J1ZlNpemVdOworICAgIHVpbnQ4X3QgYnVmUmVzcG9uc2Vba0J1ZlNpemVdOworICAgIHVpbnQxNl90IHJlYWQgPSAwOworCisgICAgLy8gQ29tcGFyZSBxdWVzdGlvbiBzZWN0aW9uIG9mIHRoZSBxdWVyeSB3aXRoIHRoZSByZXNwb25zZS4KKyAgICB1aW50MTZfdCBsZW5ndGggPSBhTWVzc2FnZVF1ZXJ5LkdldExlbmd0aCgpIC0gYU1lc3NhZ2VRdWVyeS5HZXRPZmZzZXQoKSAtCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEhlYWRlcikgLSBzaXplb2YoUXVlcnlNZXRhZGF0YSk7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2VRdWVyeS5HZXRPZmZzZXQoKSArIHNpemVvZihIZWFkZXIpOworCisgICAgd2hpbGUgKGxlbmd0aCA+IDApCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoKHJlYWQgPSBhTWVzc2FnZVF1ZXJ5LlJlYWQob2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIDwgc2l6ZW9mKGJ1ZlF1ZXJ5KSA/IGxlbmd0aCA6IHNpemVvZihidWZRdWVyeSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZRdWVyeSkpID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZVJlc3BvbnNlLlJlYWQoYU9mZnNldCwgcmVhZCwgYnVmUmVzcG9uc2UpID09IHJlYWQsCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICBWZXJpZnlPckV4aXQobWVtY21wKGJ1ZlJlc3BvbnNlLCBidWZRdWVyeSwgcmVhZCkgPT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgICAgIGFPZmZzZXQgKz0gcmVhZDsKKyAgICAgICAgb2Zmc2V0ICArPSByZWFkOworICAgICAgICBsZW5ndGggIC09IHJlYWQ7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBDbGllbnQ6OlNraXBIb3N0bmFtZShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgJmFPZmZzZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBidWZba0J1ZlNpemVdOworICAgIHVpbnQxNl90IGluZGV4OworICAgIHVpbnQxNl90IHJlYWQgPSAwOworICAgIHVpbnQxNl90IG9mZnNldCA9IGFPZmZzZXQ7CisgICAgdWludDE2X3QgbGVuZ3RoID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhT2Zmc2V0OworCisgICAgd2hpbGUgKGxlbmd0aCA+IDApCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoKHJlYWQgPSBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKGJ1ZiksIGJ1ZikpID4gMCwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIGluZGV4ID0gMDsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCByZWFkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYnVmW2luZGV4XSA9PSBrTGFiZWxUZXJtaW5hdG9yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3coYU9mZnNldCA9IG9mZnNldCArIDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGJ1ZltpbmRleF0gJiBrQ29tcHJlc3Npb25PZmZzZXRNYXNrKSA9PSBrQ29tcHJlc3Npb25PZmZzZXRNYXNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3coYU9mZnNldCA9IG9mZnNldCArIDIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgb2Zmc2V0Kys7CisgICAgICAgIH0KKworICAgICAgICBsZW5ndGggLT0gcmVhZDsKKyAgICB9CisKKyAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworTWVzc2FnZSAqQ2xpZW50OjpGaW5kUmVsYXRlZFF1ZXJ5KGNvbnN0IEhlYWRlciAmYVJlc3BvbnNlSGVhZGVyLCBRdWVyeU1ldGFkYXRhICZhUXVlcnlNZXRhZGF0YSkKK3sKKyAgICB1aW50MTZfdCBtZXNzYWdlSWQ7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IG1QZW5kaW5nUXVlcmllcy5HZXRIZWFkKCk7CisKKyAgICB3aGlsZSAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgLy8gUGFydGlhbGx5IHJlYWQgRE5TIGhlYWRlciB0byBvYnRhaW4gbWVzc2FnZSBJRCBvbmx5LgorICAgICAgICBhc3NlcnQobWVzc2FnZS0+UmVhZChtZXNzYWdlLT5HZXRPZmZzZXQoKSwgc2l6ZW9mKG1lc3NhZ2VJZCksICZtZXNzYWdlSWQpID09IHNpemVvZihtZXNzYWdlSWQpKTsKKworICAgICAgICBpZiAoSG9zdFN3YXAxNihtZXNzYWdlSWQpID09IGFSZXNwb25zZUhlYWRlci5HZXRNZXNzYWdlSWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYVF1ZXJ5TWV0YWRhdGEuUmVhZEZyb20oKm1lc3NhZ2UpOworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKK3ZvaWQgQ2xpZW50OjpGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKE1lc3NhZ2UgJmFRdWVyeSwgY29uc3QgUXVlcnlNZXRhZGF0YSAmYVF1ZXJ5TWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdElwNkFkZHJlc3MgKmFBZGRyZXNzLCB1aW50MzJfdCBhVHRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RFcnJvciBhUmVzdWx0KQoreworICAgIERlcXVldWVNZXNzYWdlKGFRdWVyeSk7CisKKyAgICBpZiAoYVF1ZXJ5TWV0YWRhdGEubVJlc3BvbnNlSGFuZGxlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgYVF1ZXJ5TWV0YWRhdGEubVJlc3BvbnNlSGFuZGxlcihhUXVlcnlNZXRhZGF0YS5tUmVzcG9uc2VDb250ZXh0LCBhUXVlcnlNZXRhZGF0YS5tSG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUFkZHJlc3MsIGFUdGwsIGFSZXN1bHQpOworICAgIH0KK30KKwordm9pZCBDbGllbnQ6OkhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIoKTsKK30KKwordm9pZCBDbGllbnQ6OkhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIodm9pZCkKK3sKKyAgICB1aW50MzJfdCBub3cgPSBUaW1lcjo6R2V0Tm93KCk7CisgICAgdWludDMyX3QgbmV4dERlbHRhID0gMHhmZmZmZmZmZjsKKyAgICBRdWVyeU1ldGFkYXRhIHF1ZXJ5TWV0YWRhdGE7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IG1QZW5kaW5nUXVlcmllcy5HZXRIZWFkKCk7CisgICAgTWVzc2FnZSAqbmV4dE1lc3NhZ2UgPSBOVUxMOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICB3aGlsZSAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmV4dE1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisgICAgICAgIHF1ZXJ5TWV0YWRhdGEuUmVhZEZyb20oKm1lc3NhZ2UpOworCisgICAgICAgIGlmIChxdWVyeU1ldGFkYXRhLklzTGF0ZXIobm93KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXh0IGRlbGF5IGFuZCBjaG9vc2UgdGhlIGxvd2VzdC4KKyAgICAgICAgICAgIGlmIChxdWVyeU1ldGFkYXRhLm1UcmFuc21pc3Npb25UaW1lIC0gbm93IDwgbmV4dERlbHRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5leHREZWx0YSA9IHF1ZXJ5TWV0YWRhdGEubVRyYW5zbWlzc2lvblRpbWUgLSBub3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVlcnlNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25Db3VudCA8IGtNYXhSZXRyYW5zbWl0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJbmNyZW1lbnQgcmV0cmFuc21pc3Npb24gY291bnRlciBhbmQgdGltZXIuCisgICAgICAgICAgICBxdWVyeU1ldGFkYXRhLm1SZXRyYW5zbWlzc2lvbkNvdW50Kys7CisgICAgICAgICAgICBxdWVyeU1ldGFkYXRhLm1UcmFuc21pc3Npb25UaW1lID0gbm93ICsga1Jlc3BvbnNlVGltZW91dDsKKyAgICAgICAgICAgIHF1ZXJ5TWV0YWRhdGEuVXBkYXRlSW4oKm1lc3NhZ2UpOworCisgICAgICAgICAgICAvLyBDaGVjayBpZiByZXRyYW5zbWlzc2lvbiB0aW1lIGlzIGxvd2VyIHRoYW4gY3VycmVudCBsb3dlc3QuCisgICAgICAgICAgICBpZiAocXVlcnlNZXRhZGF0YS5tVHJhbnNtaXNzaW9uVGltZSAtIG5vdyA8IG5leHREZWx0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZXh0RGVsdGEgPSBxdWVyeU1ldGFkYXRhLm1UcmFuc21pc3Npb25UaW1lIC0gbm93OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZXRyYW5zbWl0CisgICAgICAgICAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihxdWVyeU1ldGFkYXRhLm1EZXN0aW5hdGlvbkFkZHJlc3MpOworICAgICAgICAgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQocXVlcnlNZXRhZGF0YS5tRGVzdGluYXRpb25Qb3J0KTsKKyAgICAgICAgICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKHF1ZXJ5TWV0YWRhdGEubVNvdXJjZUFkZHJlc3MpOworCisgICAgICAgICAgICBTZW5kQ29weSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTm8gZXhwZWN0ZWQgcmVzcG9uc2UuCisgICAgICAgICAgICBGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKCptZXNzYWdlLCBxdWVyeU1ldGFkYXRhLCBOVUxMLCAwLCBPVF9FUlJPUl9SRVNQT05TRV9USU1FT1VUKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2UgPSBuZXh0TWVzc2FnZTsKKyAgICB9CisKKyAgICBpZiAobmV4dERlbHRhICE9IDB4ZmZmZmZmZmYpCisgICAgeworICAgICAgICBtUmV0cmFuc21pc3Npb25UaW1lci5TdGFydChuZXh0RGVsdGEpOworICAgIH0KK30KKwordm9pZCBDbGllbnQ6OkhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxDbGllbnQgKj4oYUNvbnRleHQpLT5IYW5kbGVVZHBSZWNlaXZlKCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIENsaWVudDo6SGFuZGxlVWRwUmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBRdWVyeU1ldGFkYXRhIHF1ZXJ5TWV0YWRhdGE7CisgICAgUmVzb3VyY2VSZWNvcmRBYWFhIHJlY29yZDsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICB1aW50MTZfdCBvZmZzZXQ7CisKKyAgICAvLyBSRkMxMDM1IDcuMy4gUmVzb2x2ZXIgY2Fubm90IHJlbHkgdGhhdCBhIHJlc3BvbnNlIHdpbGwgY29tZSBmcm9tIHRoZSBzYW1lIGFkZHJlc3MKKyAgICAvLyB3aGljaCBpdCBzZW50IHRoZSBjb3JyZXNwb25kaW5nIHF1ZXJ5IHRvLgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTWVzc2FnZUluZm8pOworCisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihyZXNwb25zZUhlYWRlciksICZyZXNwb25zZUhlYWRlcikgPT0KKyAgICAgICAgICAgICAgICAgc2l6ZW9mKHJlc3BvbnNlSGVhZGVyKSk7CisgICAgVmVyaWZ5T3JFeGl0KHJlc3BvbnNlSGVhZGVyLkdldFR5cGUoKSA9PSBIZWFkZXI6OmtUeXBlUmVzcG9uc2UgJiYKKyAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXIuR2V0UXVlc3Rpb25Db3VudCgpID09IDEgJiYKKyAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXIuSXNUcnVuY2F0aW9uRmxhZ1NldCgpID09IGZhbHNlKTsKKworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKHJlc3BvbnNlSGVhZGVyKSk7CisgICAgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBGaW5kUmVsYXRlZFF1ZXJ5KHJlc3BvbnNlSGVhZGVyLCBxdWVyeU1ldGFkYXRhKSkgIT0gTlVMTCk7CisKKyAgICBpZiAocmVzcG9uc2VIZWFkZXIuR2V0UmVzcG9uc2VDb2RlKCkgIT0gSGVhZGVyOjprUmVzcG9uc2VTdWNjZXNzKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgfQorCisgICAgLy8gUGFyc2UgYW5kIGNoZWNrIHRoZSBxdWVzdGlvbiBzZWN0aW9uLgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBDb21wYXJlUXVlc3Rpb25zKGFNZXNzYWdlLCAqbWVzc2FnZSwgb2Zmc2V0KSk7CisKKyAgICAvLyBQYXJzZSBhbmQgY2hlY2sgdGhlIGFuc3dlciBzZWN0aW9uLgorICAgIGZvciAodWludDMyX3QgaW5kZXggPSAwOyBpbmRleCA8IHJlc3BvbnNlSGVhZGVyLkdldEFuc3dlckNvdW50KCk7IGluZGV4KyspCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2tpcEhvc3RuYW1lKGFNZXNzYWdlLCBvZmZzZXQpKTsKKworICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFJlc291cmNlUmVjb3JkKSA+IGFNZXNzYWdlLkdldExlbmd0aCgpKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YocmVjb3JkKSwgJnJlY29yZCkgIT0gc2l6ZW9mKHJlY29yZCkgfHwKKyAgICAgICAgICAgIHJlY29yZC5HZXRUeXBlKCkgIT0gUmVzb3VyY2VSZWNvcmRBYWFhOjprVHlwZSB8fAorICAgICAgICAgICAgcmVjb3JkLkdldENsYXNzKCkgIT0gUmVzb3VyY2VSZWNvcmRBYWFhOjprQ2xhc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoUmVzb3VyY2VSZWNvcmQpICsgcmVjb3JkLkdldExlbmd0aCgpOworCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJldHVybiB0aGUgZmlyc3QgZm91bmQgSVB2NiBhZGRyZXNzLgorICAgICAgICBGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKCptZXNzYWdlLCBxdWVyeU1ldGFkYXRhLCAmcmVjb3JkLkdldEFkZHJlc3MoKSwgcmVjb3JkLkdldFR0bCgpLCBPVF9FUlJPUl9OT05FKTsKKworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKK2V4aXQ6CisKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMICYmIGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKCptZXNzYWdlLCBxdWVyeU1ldGFkYXRhLCBOVUxMLCAwLCBlcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCitDbGllbnQgJkNsaWVudDo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgQ2xpZW50ICZjbGllbnQgPSAqc3RhdGljX2Nhc3Q8Q2xpZW50ICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIENsaWVudCAmY2xpZW50ID0gb3RHZXRUaHJlYWROZXRpZigpLkdldERuc0NsaWVudCgpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gY2xpZW50OworfQorCit9ICAvLyBuYW1lc3BhY2UgQ29hcAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvZG5zX2NsaWVudC5ocHAgYi9zcmMvY29yZS9uZXQvZG5zX2NsaWVudC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2YWI4MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9kbnNfY2xpZW50LmhwcApAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBETlNfQ0xJRU5UX0hQUF8KKyNkZWZpbmUgRE5TX0NMSUVOVF9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2Rucy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm5ldC9kbnNfaGVhZGVycy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisjaW5jbHVkZSAibmV0L25ldGlmLmhwcCIKKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBETlMgY2xpZW50LgorICovCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgRG5zIHsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgbWV0YWRhdGEgcmVxdWlyZWQgZm9yIEROUyByZXRyYW5zbWlzc2lvbi4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBRdWVyeU1ldGFkYXRhCit7CisgICAgZnJpZW5kIGNsYXNzIENsaWVudDsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBRdWVyeU1ldGFkYXRhKHZvaWQpIHsgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0IHdpdGggc3BlY2lmaWMgdmFsdWVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUhhbmRsZXIgIFBvaW50ZXIgdG8gYSBoYW5kbGVyIGZ1bmN0aW9uIGZvciB0aGUgcmVzcG9uc2UuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgIENvbnRleHQgZm9yIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLgorICAgICAqCisgICAgICovCisgICAgUXVlcnlNZXRhZGF0YShvdERuc1Jlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpIHsKKyAgICAgICAgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOworICAgICAgICBtUmVzcG9uc2VIYW5kbGVyID0gYUhhbmRsZXI7CisgICAgICAgIG1SZXNwb25zZUNvbnRleHQgPSBhQ29udGV4dDsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyByZXF1ZXN0IGRhdGEgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgYnl0ZXMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlcnMgdG8gZ3JvdyB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVG8oTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCh0aGlzLCBzaXplb2YoKnRoaXMpKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVhZHMgcmVxdWVzdCBkYXRhIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBSZWFkRnJvbShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSkgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZigqdGhpcyksIHNpemVvZigqdGhpcyksIHRoaXMpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHJlcXVlc3QgZGF0YSBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXBkYXRlZC4KKyAgICAgKgorICAgICAqLworICAgIGludCBVcGRhdGVJbihNZXNzYWdlICZhTWVzc2FnZSkgY29uc3QgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuV3JpdGUoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoKnRoaXMpLCBzaXplb2YoKnRoaXMpLCB0aGlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGJlZm9yZSB0aGUgZ2l2ZW4gdGltZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBPdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc0VhcmxpZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1UcmFuc21pc3Npb25UaW1lKSA+IDApOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGFmdGVyIHRoZSBnaXZlbiB0aW1lLgorICAgICAqIEByZXR2YWwgRkFMU0UgIE90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzTGF0ZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1UcmFuc21pc3Npb25UaW1lKSA8IDApOyB9OworCitwcml2YXRlOgorICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAqbUhvc3RuYW1lOyAgICAgICAgICAgICAvLy88IEEgaG9zdG5hbWUgdG8gYmUgZmluZC4KKyAgICBvdERuc1Jlc3BvbnNlSGFuZGxlciAgIG1SZXNwb25zZUhhbmRsZXI7ICAgICAgLy8vPCBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBpcyBjYWxsZWQgb24gcmVzcG9uc2UgcmVjZXB0aW9uLgorICAgIHZvaWQgICAgICAgICAgICAgICAgICAqbVJlc3BvbnNlQ29udGV4dDsgICAgICAvLy88IEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgIG1UcmFuc21pc3Npb25UaW1lOyAgICAgLy8vPCBUaW1lIHdoZW4gdGhlIHRpbWVyIHNob3VsZCBzaG9vdCBmb3IgdGhpcyBtZXNzYWdlLgorICAgIElwNjo6QWRkcmVzcyAgICAgICAgICAgbVNvdXJjZUFkZHJlc3M7ICAgICAgICAvLy88IElQdjYgYWRkcmVzcyBvZiB0aGUgbWVzc2FnZSBzb3VyY2UuCisgICAgSXA2OjpBZGRyZXNzICAgICAgICAgICBtRGVzdGluYXRpb25BZGRyZXNzOyAgIC8vLzwgSVB2NiBhZGRyZXNzIG9mIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uLgorICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgbURlc3RpbmF0aW9uUG9ydDsgICAgICAvLy88IFVEUCBwb3J0IG9mIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uLgorICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgbVJldHJhbnNtaXNzaW9uQ291bnQ7ICAvLy88IE51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMuCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgRE5TIGNsaWVudC4KKyAqCisgKi8KK2NsYXNzIENsaWVudAoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgICBBIHJlZmVyZW5jZSB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhhdCBETlMgY2xpZW50IHNob3VsZCBiZSBhc3NpZ25lZCB0by4KKyAgICAgKgorICAgICAqLworICAgIENsaWVudChJcDY6Ok5ldGlmICZhTmV0aWYpOgorICAgICAgICBtU29ja2V0KGFOZXRpZi5HZXRJcDYoKS5tVWRwKSwKKyAgICAgICAgbU1lc3NhZ2VJZCgwKSwKKyAgICAgICAgbVJldHJhbnNtaXNzaW9uVGltZXIoYU5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJkNsaWVudDo6SGFuZGxlUmV0cmFuc21pc3Npb25UaW1lciwgdGhpcykgeworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgdGhlIEROUyBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBETlMgY2xpZW50LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIHNvY2tldCBpcyBhbHJlYWR5IG9wZW4uCisgICAgICovCisgICAgb3RFcnJvciBTdGFydCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSBETlMgY2xpZW50LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgRE5TIGNsaWVudC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RvcCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgRE5TIHF1ZXJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVF1ZXJ5ICAgIEEgcG9pbnRlciB0byBzcGVjaWZ5IEROUyBxdWVyeSBwYXJhbWV0ZXJzLgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaGFsbCBiZSBjYWxsZWQgb24gcmVzcG9uc2UgcmVjZXB0aW9uIG9yIHRpbWUtb3V0LgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNlbnQgRE5TIHF1ZXJ5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBGYWlsZWQgdG8gYWxsb2NhdGUgcmV0cmFuc21pc3Npb24gZGF0YS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgSW52YWxpZCBhcmd1bWVudHMgc3VwcGxpZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFF1ZXJ5KGNvbnN0IG90RG5zUXVlcnkgKmFRdWVyeSwgb3REbnNSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb3J0IG51bWJlciB1c2VkIGJ5IEROUyBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvcnQgbnVtYmVyLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UG9ydCh2b2lkKSB7IHJldHVybiBtU29ja2V0LkdldFNvY2tOYW1lKCkubVBvcnQ7IH07CisKK3ByaXZhdGU6CisgICAgLyoqCisgICAgICogUmV0cmFuc21pc3Npb24gcGFyYW1ldGVycy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtSZXNwb25zZVRpbWVvdXQgPSBPUEVOVEhSRUFEX0NPTkZJR19ETlNfUkVTUE9OU0VfVElNRU9VVCwKKyAgICAgICAga01heFJldHJhbnNtaXQgICA9IE9QRU5USFJFQURfQ09ORklHX0ROU19NQVhfUkVUUkFOU01JVCwKKyAgICB9OworCisgICAgLyoqCisgICAgICogU3BlY2lhbCBETlMgc3ltYm9scy4KKyAgICAgKi8KKyAgICBlbnVtCisgICAgeworICAgICAgICBrTGFiZWxUZXJtaW5hdG9yICAgICAgID0gMCwKKyAgICAgICAga0xhYmVsU2VwYXJhdG9yICAgICAgICA9ICcuJywKKyAgICAgICAga0NvbXByZXNzaW9uT2Zmc2V0TWFzayA9IDB4YzAKKyAgICB9OworCisgICAgLyoqCisgICAgICogT3BlcmF0aW5nIG9uIG1lc3NhZ2UgYnVmZmVycy4KKyAgICAgKi8KKyAgICBlbnVtCisgICAgeworICAgICAgICBrQnVmU2l6ZSA9IDE2CisgICAgfTsKKworICAgIE1lc3NhZ2UgKk5ld01lc3NhZ2UoY29uc3QgSGVhZGVyICZhSGVhZGVyKTsKKyAgICBNZXNzYWdlICpDb3B5QW5kRW5xdWV1ZU1lc3NhZ2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IFF1ZXJ5TWV0YWRhdGEgJmFRdWVyeU1ldGFkYXRhKTsKKyAgICB2b2lkIERlcXVldWVNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICBvdEVycm9yIFNlbmRNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgU2VuZENvcHkoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBvdEVycm9yIEFwcGVuZENvbXByZXNzZWRIb3N0bmFtZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgY2hhciAqYUhvc3RuYW1lKTsKKyAgICBvdEVycm9yIENvbXBhcmVRdWVzdGlvbnMoTWVzc2FnZSAmYU1lc3NhZ2VSZXNwb25zZSwgTWVzc2FnZSAmYU1lc3NhZ2VRdWVyeSwgdWludDE2X3QgJmFPZmZzZXQpOworICAgIG90RXJyb3IgU2tpcEhvc3RuYW1lKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCAmYU9mZnNldCk7CisKKyAgICBNZXNzYWdlICpGaW5kUmVsYXRlZFF1ZXJ5KGNvbnN0IEhlYWRlciAmYVJlc3BvbnNlSGVhZGVyLCBRdWVyeU1ldGFkYXRhICZhUXVlcnlNZXRhZGF0YSk7CisgICAgdm9pZCBGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKE1lc3NhZ2UgJmFRdWVyeSwgY29uc3QgUXVlcnlNZXRhZGF0YSAmYVF1ZXJ5TWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90SXA2QWRkcmVzcyAqYUFkZHJlc3MsIHVpbnQzMl90IGFUdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYVJlc3VsdCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlUmV0cmFuc21pc3Npb25UaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVVZHBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIENsaWVudCAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgSXA2OjpVZHBTb2NrZXQgbVNvY2tldDsKKworICAgIHVpbnQxNl90IG1NZXNzYWdlSWQ7CisgICAgTWVzc2FnZVF1ZXVlIG1QZW5kaW5nUXVlcmllczsKKyAgICBUaW1lciBtUmV0cmFuc21pc3Npb25UaW1lcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBEbnMKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEROU19DTElFTlRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2Ruc19oZWFkZXJzLmhwcCBiL3NyYy9jb3JlL25ldC9kbnNfaGVhZGVycy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFkMGJkNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9kbnNfaGVhZGVycy5ocHAKQEAgLTAsMCArMSw1ODggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBnZW5lcmF0aW5nIGFuZCBwcm9jZXNzaW5nIEROUyBoZWFkZXJzLgorICovCisKKyNpZm5kZWYgRE5TX0hFQURFUl9IUFBfCisjZGVmaW5lIEROU19IRUFERVJfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBuYW1lc3BhY2Ugb3Q6OkRucworICogQGJyaWVmCisgKiAgIFRoaXMgbmFtZXNwYWNlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBETlMuCisgKgorICovCituYW1lc3BhY2UgRG5zIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWRucworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgRE5TLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEROUyBoZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBIZWFkZXIKK3sKK3B1YmxpYzoKKworICAgIC8qKgorICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIEROUyBIZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBIZWFkZXIodm9pZCkgeyBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1lc3NhZ2UgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTWVzc2FnZSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldE1lc3NhZ2VJZCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1NZXNzYWdlSWQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNZXNzYWdlIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJZCBUaGUgTWVzc2FnZSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWVzc2FnZUlkKHVpbnQxNl90IGFNZXNzYWdlSWQpIHsgbU1lc3NhZ2VJZCA9IEhvc3RTd2FwMTYoYU1lc3NhZ2VJZCk7IH0KKworICAgIC8qKgorICAgICAqIERlZmluZXMgdHlwZXMgb2YgRE5TIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAgIGtUeXBlUXVlcnkgPSAwLAorICAgICAgICBrVHlwZVJlc3BvbnNlID0gMSwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlLgorICAgICAqLworICAgIFR5cGUgR2V0VHlwZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPigobUZsYWdzWzBdICYga1FyRmxhZ01hc2spID4+IGtRckZsYWdPZmZzZXQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUoVHlwZSBhVHlwZSkgeworICAgICAgICBtRmxhZ3NbMF0gJj0gfmtRckZsYWdNYXNrOworICAgICAgICBtRmxhZ3NbMF0gfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpIDw8IGtRckZsYWdPZmZzZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0eXBlcyBvZiBxdWVyeS4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gUXVlcnlUeXBlCisgICAgeworICAgICAgICBrUXVlcnlUeXBlU3RhbmRhcmQgPSAwLAorICAgICAgICBrUXVlcnlUeXBlSW52ZXJzZSAgPSAxLAorICAgICAgICBrUXVlcnlUeXBlU3RhdHVzICAgPSAyLAorICAgICAgICBrUXVlcnlUeXBlTm90aWZ5ICAgPSA0LAorICAgICAgICBrUXVlcnlUeXBlVXBkYXRlICAgPSA1CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHR5cGUgb2YgdGhlIHF1ZXJ5LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIHF1ZXJ5LgorICAgICAqLworICAgIFF1ZXJ5VHlwZSBHZXRRdWVyeVR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUeXBlPigobUZsYWdzWzBdICYga09wQ29kZU1hc2spID4+IGtPcENvZGVPZmZzZXQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSB0eXBlIG9mIHRoZSBxdWVyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlIFRoZSB0eXBlIG9mIHRoZSBxdWVyeS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UXVlcnlUeXBlKFF1ZXJ5VHlwZSBhVHlwZSkgeworICAgICAgICBtRmxhZ3NbMF0gJj0gfmtPcENvZGVNYXNrOworICAgICAgICBtRmxhZ3NbMF0gfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpIDw8IGtPcENvZGVPZmZzZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3BlY2lmaWVzIGluIHJlc3BvbnNlIG1lc3NhZ2UgaWYgdGhlIHJlc3BvbmRpbmcgbmFtZSBzZXJ2ZXIgaXMgYW4KKyAgICAgKiBhdXRob3JpdHkgZm9yIHRoZSBkb21haW4gbmFtZSBpbiBxdWVzdGlvbiBzZWN0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVHJ1ZSBpZiBBdXRob3JpdGF0aXZlIEFuc3dlciBmbGFnIChBQSkgaXMgc2V0IGluIHRoZSBoZWFkZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzQXV0aG9yaXRhdGl2ZUFuc3dlckZsYWdTZXQodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFnc1swXSAmIGtBYUZsYWdNYXNrKSA9PSBrQWFGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBBdXRob3JpdGF0aXZlIEFuc3dlciBmbGFnIChBQSkgaW4gdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJBdXRob3JpdGF0aXZlQW5zd2VyRmxhZyh2b2lkKSB7IG1GbGFnc1swXSAmPSB+a0FhRmxhZ01hc2s7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEF1dGhvcml0YXRpdmUgQW5zd2VyIGZsYWcgKEFBKSBpbiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRBdXRob3JpdGF0aXZlQW5zd2VyRmxhZyh2b2lkKSB7IG1GbGFnc1swXSB8PSBrQWFGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3BlY2lmaWVzIGlmIG1lc3NhZ2UgaXMgdHJ1bmNhdGVkLgorICAgICAqCisgICAgICogQHJldHVybnMgVHJ1ZSBpZiBUcnVuY2F0aW9uIGZsYWcgKFRDKSBpcyBzZXQgaW4gdGhlIGhlYWRlciwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgSXNUcnVuY2F0aW9uRmxhZ1NldCh2b2lkKSBjb25zdCB7IHJldHVybiAobUZsYWdzWzBdICYga1RjRmxhZ01hc2spID09IGtUY0ZsYWdNYXNrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIFRydW5jYXRpb24gZmxhZyAoVEMpIGluIHRoZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyVHJ1bmNhdGlvbkZsYWcodm9pZCkgeyBtRmxhZ3NbMF0gJj0gfmtUY0ZsYWdNYXNrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUcnVuY2F0aW9uIGZsYWcgKFRDKSBpbiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUcnVuY2F0aW9uRmxhZyh2b2lkKSB7IG1GbGFnc1swXSB8PSBrVGNGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3BlY2lmaWVzIGlmIHJlc29sdmVyIHdhbnRzIHRvIGRpcmVjdCB0aGUgbmFtZSBzZXJ2ZXIgdG8gcHVyc3VlCisgICAgICogdGhlIHF1ZXJ5IHJlY3Vyc2l2ZWx5LgorICAgICAqCisgICAgICogQHJldHVybnMgVHJ1ZSBpZiBSZWN1cnNpb24gRGVzaXJlZCBmbGFnIChSRCkgaXMgc2V0IGluIHRoZSBoZWFkZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzUmVjdXJzaW9uRGVzaXJlZEZsYWdTZXQodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFnc1swXSAmIGtSZEZsYWdNYXNrKSA9PSBrUmRGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBSZWN1cnNpb24gRGVzaXJlZCBmbGFnIChSRCkgaW4gdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJSZWN1cnNpb25EZXNpcmVkRmxhZyh2b2lkKSB7IG1GbGFnc1swXSAmPSB+a1JkRmxhZ01hc2s7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJlY3Vyc2lvbiBEZXNpcmVkIGZsYWcgKFJEKSBpbiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSZWN1cnNpb25EZXNpcmVkRmxhZyh2b2lkKSB7IG1GbGFnc1swXSB8PSBrUmRGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVub3RlcyB3aGV0aGVyIHJlY3Vyc2l2ZSBxdWVyeSBzdXBwb3J0IGlzIGF2YWlsYWJsZSBpbiB0aGUgbmFtZSBzZXJ2ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUcnVlIGlmIFJlY3Vyc2lvbiBBdmFpbGFibGUgZmxhZyAoUkEpIGlzIHNldCBpbiB0aGUgaGVhZGVyLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc1JlY3Vyc2lvbkF2YWlsYWJsZUZsYWdTZXQodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFnc1sxXSAmIGtSYUZsYWdNYXNrKSA9PSBrUmFGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBSZWN1cnNpb24gQXZhaWxhYmxlIGZsYWcgKFJBKSBpbiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhclJlY3Vyc2lvbkF2YWlsYWJsZUZsYWcodm9pZCkgeyBtRmxhZ3NbMV0gJj0gfmtSYUZsYWdNYXNrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSZWN1cnNpb24gQXZhaWxhYmxlIGZsYWcgKFJBKSBpbiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSZWN1cnNpb25BdmFpbGFibGVGbGFnKHZvaWQpIHsgbUZsYWdzWzFdIHw9IGtSYUZsYWdNYXNrOyB9CisKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHJlc3BvbnNlIGNvZGVzLgorICAgICAqCisgICAgICovCisgICAgZW51bSBSZXNwb25zZQorICAgIHsKKyAgICAgICAga1Jlc3BvbnNlU3VjY2VzcyAgICAgICAgPSAwLAorICAgICAgICBrUmVzcG9uc2VGb3JtYXRFcnJvciAgICA9IDEsCisgICAgICAgIGtSZXNwb25zZVNlcnZlckZhaWx1cmUgID0gMiwKKyAgICAgICAga1Jlc3BvbnNlTmFtZUVycm9yICAgICAgPSAzLAorICAgICAgICBrUmVzcG9uc2VOb3RJbXBsZW1lbnRlZCA9IDQsCisgICAgICAgIGtSZXNwb25zZVJlZnVzZWQgICAgICAgID0gNSwKKyAgICAgICAga1Jlc3BvbnNlTm90QXV0aCAgICAgICAgPSA5LAorICAgICAgICBrUmVzcG9uc2VOb3Rab25lICAgICAgICA9IDEwLAorICAgICAgICBrUmVzcG9uc2VCYWROYW1lICAgICAgICA9IDIwLAorICAgICAgICBrUmVzcG9uc2VCYWRBbGcgICAgICAgICA9IDIxLAorICAgICAgICBrUmVzcG9uc2VCYWRUcnVuY2F0aW9uICA9IDIyLAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSByZXNwb25zZSBjb2RlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHJlc3BvbnNlIGNvZGUgZnJvbSB0aGUgaGVhZGVyLgorICAgICAqLworICAgIFJlc3BvbnNlIEdldFJlc3BvbnNlQ29kZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZXNwb25zZT4oKG1GbGFnc1sxXSAmIGtSQ29kZU1hc2spID4+IGtSQ29kZU9mZnNldCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHJlc3BvbnNlIGNvZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmVzcG9uc2UgVGhlIHR5cGUgb2YgdGhlIHJlc3BvbnNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSZXNwb25zZUNvZGUoUmVzcG9uc2UgYVJlc3BvbnNlKSB7CisgICAgICAgIG1GbGFnc1sxXSAmPSB+a1JDb2RlTWFzazsKKyAgICAgICAgbUZsYWdzWzFdIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFSZXNwb25zZSkgPDwga1JDb2RlT2Zmc2V0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXN0aW9uIHNlY3Rpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gcXVlc3Rpb24gc2VjdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFF1ZXN0aW9uQ291bnQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUWRDb3VudCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXN0aW9uIHNlY3Rpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ291bnQgVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXN0aW9uIHNlY3Rpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFF1ZXN0aW9uQ291bnQodWludDE2X3QgYUNvdW50KSB7IG1RZENvdW50ID0gSG9zdFN3YXAxNihhQ291bnQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhbnN3ZXIgc2VjdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhbnN3ZXIgc2VjdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldEFuc3dlckNvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUFuQ291bnQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhbnN3ZXIgc2VjdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb3VudCBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYW5zd2VyIHNlY3Rpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEFuc3dlckNvdW50KHVpbnQxNl90IGFDb3VudCkgeyBtQW5Db3VudCA9IEhvc3RTd2FwMTYoYUNvdW50KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYXV0aG9yaXR5IHJlY29yZHMgc2VjdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhdXRob3JpdHkgcmVjb3JkcyBzZWN0aW9uLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0QXV0aG9yaXR5UmVjb3Jkc0NvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobU5zQ291bnQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhdXRob3JpdHkgcmVjb3JkcyBzZWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvdW50IFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhdXRob3JpdHkgcmVjb3JkcyBzZWN0aW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRBdXRob3JpdHlSZWNvcmRzQ291bnQodWludDE2X3QgYUNvdW50KSB7IG1Oc0NvdW50ID0gSG9zdFN3YXAxNihhQ291bnQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhZGRpdGlvbmFsIHJlY29yZHMgc2VjdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhZGRpdGlvbmFsIHJlY29yZHMgc2VjdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldEFkZGl0aW9uYWxSZWNvcmRzQ291bnQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtQXJDb3VudCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGFkZGl0aW9uYWwgcmVjb3JkcyBzZWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvdW50IFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhZGRpdGlvbmFsIHJlY29yZHMgc2VjdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QWRkaXRpb25hbFJlY29yZHNDb3VudCh1aW50MTZfdCBhQ291bnQpIHsgbUFyQ291bnQgPSBIb3N0U3dhcDE2KGFDb3VudCk7IH0KKworcHJpdmF0ZToKKyAgICAvKioKKyAgICAgKiBQcm90b2NvbCBDb25zdGFudHMgKFJGQyAxMDM1KS4KKyAgICAgKgorICAgICAqLworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtRckZsYWdPZmZzZXQgPSA3LCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBRUiBGbGFnIG9mZnNldC4KKyAgICAgICAga1FyRmxhZ01hc2sgICA9IDB4MDEgPDwga1FyRmxhZ09mZnNldCwgICAvLy88IFFSIEZsYWcgbWFzay4KKyAgICAgICAga09wQ29kZU9mZnNldCA9IDMsICAgICAgICAgICAgICAgICAgICAgICAvLy88IE9wQ29kZSBmaWVsZCBvZmZzZXQuCisgICAgICAgIGtPcENvZGVNYXNrICAgPSAweDBmIDw8IGtPcENvZGVPZmZzZXQsICAgLy8vPCBPcENvZGUgZmllbGQgbWFzay4KKyAgICAgICAga0FhRmxhZ09mZnNldCA9IDIsICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFBIEZsYWcgb2Zmc2V0LgorICAgICAgICBrQWFGbGFnTWFzayAgID0gMHgwMSA8PCBrQWFGbGFnT2Zmc2V0LCAgIC8vLzwgQUEgRmxhZyBtYXNrLgorICAgICAgICBrVGNGbGFnT2Zmc2V0ID0gMSwgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVEMgRmxhZyBvZmZzZXQuCisgICAgICAgIGtUY0ZsYWdNYXNrICAgPSAweDAxIDw8IGtUY0ZsYWdPZmZzZXQsICAgLy8vPCBUQyBGbGFnIG1hc2suCisgICAgICAgIGtSZEZsYWdPZmZzZXQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSRCBGbGFnIG9mZnNldC4KKyAgICAgICAga1JkRmxhZ01hc2sgICA9IDB4MDEgPDwga1JkRmxhZ09mZnNldCwgICAvLy88IFJEIEZsYWcgbWFzay4KKworICAgICAgICBrUmFGbGFnT2Zmc2V0ID0gNywgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUkEgRmxhZyBvZmZzZXQuCisgICAgICAgIGtSYUZsYWdNYXNrICAgPSAweDAxIDw8IGtSYUZsYWdPZmZzZXQsICAgLy8vPCBSQSBGbGFnIG1hc2suCisgICAgICAgIGtSQ29kZU9mZnNldCAgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSQ09ERSBmaWVsZCBvZmZzZXQuCisgICAgICAgIGtSQ29kZU1hc2sgICAgPSAweDBmIDw8IGtSQ29kZU9mZnNldCwgICAgLy8vPCBSQ09ERSBmaWVsZCBtYXNrLgorICAgIH07CisKKyAgICB1aW50MTZfdCBtTWVzc2FnZUlkOyAgLy8vPCBBIG1lc3NhZ2UgaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgYnkgdGhlIHJlcXVlc3RlciB0byBtYXRjaCB1cCByZXBsaWVzIHRvIG91dHN0YW5kaW5nIHF1ZXJpZXMuCisgICAgdWludDhfdCAgbUZsYWdzWzJdOyAgIC8vLzwgRE5TIGhlYWRlciBmbGFncy4KKyAgICB1aW50MTZfdCBtUWRDb3VudDsgICAgLy8vPCBBIG51bWJlciBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgcXVlc3Rpb24gc2VjdGlvbi4KKyAgICB1aW50MTZfdCBtQW5Db3VudDsgICAgLy8vPCBBIG51bWJlciBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYW5zd2VyIHNlY3Rpb24uCisgICAgdWludDE2X3QgbU5zQ291bnQ7ICAgIC8vLzwgQSBudW1iZXIgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGF1dGhvcml0eSByZWNvcmRzIHNlY3Rpb24uCisgICAgdWludDE2X3QgbUFyQ291bnQ7ICAgIC8vLzwgQSBudW1iZXIgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGFkZGl0aW9uYWwgcmVjb3JkcyBzZWN0aW9uLgorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUmVzb3VyY2UgUmVjb3JkIGJvZHkgZm9ybWF0IChSUikuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgUmVzb3VyY2VSZWNvcmQKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkLgorICAgICAqLworICAgIHVpbnQxNl90IEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtVHlwZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlIFRoZSB0eXBlIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUodWludDE2X3QgYVR5cGUpIHsgbVR5cGUgPSBIb3N0U3dhcDE2KGFUeXBlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY2xhc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjbGFzcyBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkLgorICAgICAqLworICAgIHVpbnQxNl90IEdldENsYXNzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUNsYXNzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY2xhc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDbGFzcyBUaGUgY2xhc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q2xhc3ModWludDE2X3QgYUNsYXNzKSB7IG1DbGFzcyA9IEhvc3RTd2FwMTYoYUNsYXNzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdGltZSB0byBsaXZlIGZpZWxkIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdGltZSB0byBsaXZlIGZpZWxkIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICovCisgICAgdWludDMyX3QgR2V0VHRsKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobVR0bCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHRpbWUgdG8gbGl2ZSBmaWVsZCBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR0bCBUaGUgdGltZSB0byBsaXZlIGZpZWxkIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR0bCh1aW50MzJfdCBhVHRsKSB7IG1UdGwgPSBIb3N0U3dhcDMyKGFUdGwpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBsZW5ndGggb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtTGVuZ3RoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGVuZ3RoKHVpbnQxNl90IGFMZW5ndGgpIHsgbUxlbmd0aCA9IEhvc3RTd2FwMTYoYUxlbmd0aCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtVHlwZTsgICAgLy8vPCBUaGUgdHlwZSBvZiB0aGUgZGF0YSBpbiBSREFUQSBzZWN0aW9uLgorICAgIHVpbnQxNl90IG1DbGFzczsgICAvLy88IFRoZSBjbGFzcyBvZiB0aGUgZGF0YSBpbiBSREFUQSBzZWN0aW9uLgorICAgIHVpbnQzMl90IG1UdGw7ICAgICAvLy88IFNwZWNpZmllcyB0aGUgbWF4aW11bSB0aW1lIHRoYXQgdGhlIHJlc291cmNlIHJlY29yZCBtYXkgYmUgY2FjaGVkLgorICAgIHVpbnQxNl90IG1MZW5ndGg7ICAvLy88IFRoZSBsZW5ndGggb2YgUkRBVEEgc2VjdGlvbiBpbiBieXRlcy4KKworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFJlc291cmNlIFJlY29yZCBib2R5IGZvcm1hdCBvZiBBQUFBIHR5cGUuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgUmVzb3VyY2VSZWNvcmRBYWFhOiBwdWJsaWMgUmVzb3VyY2VSZWNvcmQKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVHlwZSAgID0gMHgxQywgIC8vLzwgQUFBQSBSZXNvdXJjZSBSZWNvcmQgdHlwZS4KKyAgICAgICAga0NsYXNzICA9IDB4MDEsICAvLy88IFRoZSB2YWx1ZSBvZiB0aGUgSW50ZXJuZXQgY2xhc3MuCisgICAgICAgIGtMZW5ndGggPSAxNiwgICAgLy8vPCBTaXplIG9mIHRoZSBBQUFBIFJlc291cmNlIFJlY29yZCB0eXBlLgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgQUFBQSBSZXNvdXJjZSBSZWNvcmQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeworICAgICAgICBSZXNvdXJjZVJlY29yZDo6U2V0VHlwZShrVHlwZSk7CisgICAgICAgIFJlc291cmNlUmVjb3JkOjpTZXRDbGFzcyhrQ2xhc3MpOworICAgICAgICBSZXNvdXJjZVJlY29yZDo6U2V0VHRsKDApOworICAgICAgICBSZXNvdXJjZVJlY29yZDo6U2V0TGVuZ3RoKGtMZW5ndGgpOworICAgICAgICBtZW1zZXQoJm1BZGRyZXNzLCAwLCBzaXplb2YobUFkZHJlc3MpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJUHY2IGFkZHJlc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzIFRoZSBJUHY2IGFkZHJlc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QWRkcmVzcyhvdElwNkFkZHJlc3MgJmFBZGRyZXNzKSB7IG1BZGRyZXNzID0gYUFkZHJlc3M7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJlZmVyZW5jZSB0byBJUHY2IGFkZHJlc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSByZWZlcmVuY2UgdG8gSVB2NiBhZGRyZXNzIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICovCisgICAgb3RJcDZBZGRyZXNzICZHZXRBZGRyZXNzKHZvaWQpIHsgcmV0dXJuIG1BZGRyZXNzOyB9CisKK3ByaXZhdGU6CisgICAgb3RJcDZBZGRyZXNzIG1BZGRyZXNzOyAgLy8vPCBJcHY2IEFkZHJlc3Mgb2YgQUFBQSBSZXNvdXJjZSBSZWNvcmQuCisKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBRdWVzdGlvbiBmb3JtYXQuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgUXVlc3Rpb24KK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBmb3IgUXVlc3Rpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBRdWVzdGlvbih1aW50MTZfdCBhVHlwZSwgdWludDE2X3QgYUNsYXNzKSB7CisgICAgICAgIFNldFR5cGUoYVR5cGUpOworICAgICAgICBTZXRDbGFzcyhhQ2xhc3MpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBxdWVzdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSB0eXBlIG9mIHRoZSBxdWVzdGlvbi4KKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSB0eXBlIG9mIHRoZSBxdWVzdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlIFRoZSB0eXBlIG9mIHRoZSBxdWVzdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VHlwZSh1aW50MTZfdCBhVHlwZSkgeyBtVHlwZSA9IEhvc3RTd2FwMTYoYVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjbGFzcyBvZiB0aGUgcXVlc3Rpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY2xhc3Mgb2YgdGhlIHF1ZXN0aW9uLgorICAgICAqLworICAgIHVpbnQxNl90IEdldENsYXNzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUNsYXNzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY2xhc3Mgb2YgdGhlIHF1ZXN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNsYXNzIFRoZSBjbGFzcyBvZiB0aGUgcXVlc3Rpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENsYXNzKHVpbnQxNl90IGFDbGFzcykgeyBtQ2xhc3MgPSBIb3N0U3dhcDE2KGFDbGFzcyk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtVHlwZTsgICAgICAvLy88IFRoZSB0eXBlIG9mIHRoZSBkYXRhIGluIHF1ZXN0aW9uIHNlY3Rpb24uCisgICAgdWludDE2X3QgbUNsYXNzOyAgICAgLy8vPCBUaGUgY2xhc3Mgb2YgdGhlIGRhdGEgaW4gcXVlc3Rpb24gc2VjdGlvbi4KKworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUXVlc3Rpb24gZm9ybWF0IG9mIEFBQUEgdHlwZS4KKyAqCisgKi8KK2NsYXNzIFF1ZXN0aW9uQWFhYTogcHVibGljIFF1ZXN0aW9uCit7CitwdWJsaWM6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1R5cGUgID0gMHgxQywgIC8vLzwgQUFBQSBSZXNvdXJjZSBSZWNvcmQgdHlwZS4KKyAgICAgICAga0NsYXNzID0gMHgwMSwgIC8vLzwgVGhlIHZhbHVlIG9mIHRoZSBJbnRlcm5ldCBjbGFzcy4KKyAgICB9OworCisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgQUFBQSBRdWVzdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIFF1ZXN0aW9uQWFhYSh2b2lkKSA6IFF1ZXN0aW9uKGtUeXBlLCBrQ2xhc3MpIHt9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyByZXF1ZXN0IGRhdGEgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgYnl0ZXMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlcnMgdG8gZ3JvdyB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVG8oTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCh0aGlzLCBzaXplb2YoKnRoaXMpKTsKKyAgICB9OworCit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBEbnMKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEROU19IRUFERVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2ljbXA2LmNwcCBiL3NyYy9jb3JlL25ldC9pY21wNi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlZGEyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9pY21wNi5jcHAKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgSUNNUHY2LgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImljbXA2LnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJpY21wNi5ocHAiCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworSWNtcDo6SWNtcChJcDYgJmFJcDYpOgorICAgIElwNkxvY2F0b3IoYUlwNiksCisgICAgbUhhbmRsZXJzKE5VTEwpLAorICAgIG1FY2hvU2VxdWVuY2UoMSksCisgICAgbUlzRWNob0VuYWJsZWQodHJ1ZSkKK3sKK30KKworTWVzc2FnZSAqSWNtcDo6TmV3TWVzc2FnZSh1aW50MTZfdCBhUmVzZXJ2ZWQpCit7CisgICAgcmV0dXJuIEdldElwNigpLk5ld01lc3NhZ2Uoc2l6ZW9mKEljbXBIZWFkZXIpICsgYVJlc2VydmVkKTsKK30KKworb3RFcnJvciBJY21wOjpSZWdpc3RlckhhbmRsZXIoSWNtcEhhbmRsZXIgJmFIYW5kbGVyKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChJY21wSGFuZGxlciAqY3VyID0gbUhhbmRsZXJzOyBjdXI7IGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGN1ciA9PSAmYUhhbmRsZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9BTFJFQURZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFIYW5kbGVyLm1OZXh0ID0gbUhhbmRsZXJzOworICAgIG1IYW5kbGVycyA9ICZhSGFuZGxlcjsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSWNtcDo6U2VuZEVjaG9SZXF1ZXN0KE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUlkZW50aWZpZXIpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm9Mb2NhbDsKKyAgICBJY21wSGVhZGVyIGljbXBIZWFkZXI7CisKKyAgICBtZXNzYWdlSW5mb0xvY2FsID0gYU1lc3NhZ2VJbmZvOworCisgICAgaWNtcEhlYWRlci5Jbml0KCk7CisgICAgaWNtcEhlYWRlci5TZXRUeXBlKEljbXBIZWFkZXI6OmtUeXBlRWNob1JlcXVlc3QpOworICAgIGljbXBIZWFkZXIuU2V0SWQoYUlkZW50aWZpZXIpOworICAgIGljbXBIZWFkZXIuU2V0U2VxdWVuY2UobUVjaG9TZXF1ZW5jZSsrKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5QcmVwZW5kKCZpY21wSGVhZGVyLCBzaXplb2YoaWNtcEhlYWRlcikpKTsKKyAgICBhTWVzc2FnZS5TZXRPZmZzZXQoMCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEdldElwNigpLlNlbmREYXRhZ3JhbShhTWVzc2FnZSwgbWVzc2FnZUluZm9Mb2NhbCwga1Byb3RvSWNtcDYpKTsKKworICAgIG90TG9nSW5mb0ljbXAoR2V0SW5zdGFuY2UoKSwgIlNlbnQgZWNobyByZXF1ZXN0OiAoc2VxID0gJWQpIiwgaWNtcEhlYWRlci5HZXRTZXF1ZW5jZSgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSWNtcDo6U2VuZEVycm9yKEljbXBIZWFkZXI6OlR5cGUgYVR5cGUsIEljbXBIZWFkZXI6OkNvZGUgYUNvZGUsIGNvbnN0IE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIZWFkZXIgJmFIZWFkZXIpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm9Mb2NhbDsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBJY21wSGVhZGVyIGljbXA2SGVhZGVyOworCisgICAgbWVzc2FnZUluZm9Mb2NhbCA9IGFNZXNzYWdlSW5mbzsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IEdldElwNigpLk5ld01lc3NhZ2UoMCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPlNldExlbmd0aChzaXplb2YoaWNtcDZIZWFkZXIpICsgc2l6ZW9mKGFIZWFkZXIpKSk7CisKKyAgICBtZXNzYWdlLT5Xcml0ZShzaXplb2YoaWNtcDZIZWFkZXIpLCBzaXplb2YoYUhlYWRlciksICZhSGVhZGVyKTsKKworICAgIGljbXA2SGVhZGVyLkluaXQoKTsKKyAgICBpY21wNkhlYWRlci5TZXRUeXBlKGFUeXBlKTsKKyAgICBpY21wNkhlYWRlci5TZXRDb2RlKGFDb2RlKTsKKyAgICBtZXNzYWdlLT5Xcml0ZSgwLCBzaXplb2YoaWNtcDZIZWFkZXIpLCAmaWNtcDZIZWFkZXIpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEdldElwNigpLlNlbmREYXRhZ3JhbSgqbWVzc2FnZSwgbWVzc2FnZUluZm9Mb2NhbCwga1Byb3RvSWNtcDYpKTsKKworICAgIG90TG9nSW5mb0ljbXAoR2V0SW5zdGFuY2UoKSwgIlNlbnQgSUNNUHY2IEVycm9yIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEljbXA6OkhhbmRsZU1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UsIE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3QgcGF5bG9hZExlbmd0aDsKKyAgICBJY21wSGVhZGVyIGljbXA2SGVhZGVyOworICAgIHVpbnQxNl90IGNoZWNrc3VtOworCisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihpY21wNkhlYWRlciksICZpY21wNkhlYWRlcikgPT0gc2l6ZW9mKGljbXA2SGVhZGVyKSwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgcGF5bG9hZExlbmd0aCA9IGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisKKyAgICAvLyB2ZXJpZnkgY2hlY2tzdW0KKyAgICBjaGVja3N1bSA9IElwNjo6Q29tcHV0ZVBzZXVkb2hlYWRlckNoZWNrc3VtKGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLCBhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRMZW5ndGgsIGtQcm90b0ljbXA2KTsKKyAgICBjaGVja3N1bSA9IGFNZXNzYWdlLlVwZGF0ZUNoZWNrc3VtKGNoZWNrc3VtLCBhTWVzc2FnZS5HZXRPZmZzZXQoKSwgcGF5bG9hZExlbmd0aCk7CisgICAgVmVyaWZ5T3JFeGl0KGNoZWNrc3VtID09IDB4ZmZmZiwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAobUlzRWNob0VuYWJsZWQgJiYgKGljbXA2SGVhZGVyLkdldFR5cGUoKSA9PSBJY21wSGVhZGVyOjprVHlwZUVjaG9SZXF1ZXN0KSkKKyAgICB7CisgICAgICAgIEhhbmRsZUVjaG9SZXF1ZXN0KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgIH0KKworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKGljbXA2SGVhZGVyKSk7CisKKyAgICBmb3IgKEljbXBIYW5kbGVyICpoYW5kbGVyID0gbUhhbmRsZXJzOyBoYW5kbGVyOyBoYW5kbGVyID0gaGFuZGxlci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlci0+SGFuZGxlUmVjZWl2ZU1lc3NhZ2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbywgaWNtcDZIZWFkZXIpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSWNtcDo6SGFuZGxlRWNob1JlcXVlc3QoTWVzc2FnZSAmYVJlcXVlc3RNZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEljbXBIZWFkZXIgaWNtcDZIZWFkZXI7CisgICAgTWVzc2FnZSAqcmVwbHlNZXNzYWdlID0gTlVMTDsKKyAgICBNZXNzYWdlSW5mbyByZXBseU1lc3NhZ2VJbmZvOworICAgIHVpbnQxNl90IHBheWxvYWRMZW5ndGg7CisKKyAgICBvdExvZ0luZm9JY21wKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBFY2hvIFJlcXVlc3QiKTsKKworICAgIGljbXA2SGVhZGVyLkluaXQoKTsKKyAgICBpY21wNkhlYWRlci5TZXRUeXBlKEljbXBIZWFkZXI6OmtUeXBlRWNob1JlcGx5KTsKKworICAgIGlmICgocmVwbHlNZXNzYWdlID0gR2V0SXA2KCkuTmV3TWVzc2FnZSgwKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90TG9nRGViZ0ljbXAoR2V0SW5zdGFuY2UoKSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBhIG5ldyBtZXNzYWdlIik7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBwYXlsb2FkTGVuZ3RoID0gYVJlcXVlc3RNZXNzYWdlLkdldExlbmd0aCgpIC0gYVJlcXVlc3RNZXNzYWdlLkdldE9mZnNldCgpIC0gSWNtcEhlYWRlcjo6R2V0RGF0YU9mZnNldCgpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSByZXBseU1lc3NhZ2UtPlNldExlbmd0aChJY21wSGVhZGVyOjpHZXREYXRhT2Zmc2V0KCkgKyBwYXlsb2FkTGVuZ3RoKSk7CisKKyAgICByZXBseU1lc3NhZ2UtPldyaXRlKDAsIEljbXBIZWFkZXI6OkdldERhdGFPZmZzZXQoKSwgJmljbXA2SGVhZGVyKTsKKyAgICBhUmVxdWVzdE1lc3NhZ2UuQ29weVRvKGFSZXF1ZXN0TWVzc2FnZS5HZXRPZmZzZXQoKSArIEljbXBIZWFkZXI6OkdldERhdGFPZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEljbXBIZWFkZXI6OkdldERhdGFPZmZzZXQoKSwgcGF5bG9hZExlbmd0aCwgKnJlcGx5TWVzc2FnZSk7CisKKyAgICByZXBseU1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKworICAgIGlmICghYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkuSXNNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIHJlcGx5TWVzc2FnZUluZm8uU2V0U29ja0FkZHIoYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkpOworICAgIH0KKworICAgIHJlcGx5TWVzc2FnZUluZm8uU2V0SW50ZXJmYWNlSWQoYU1lc3NhZ2VJbmZvLm1JbnRlcmZhY2VJZCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gR2V0SXA2KCkuU2VuZERhdGFncmFtKCpyZXBseU1lc3NhZ2UsIHJlcGx5TWVzc2FnZUluZm8sIGtQcm90b0ljbXA2KSk7CisKKyAgICByZXBseU1lc3NhZ2UtPlJlYWQocmVwbHlNZXNzYWdlLT5HZXRPZmZzZXQoKSwgc2l6ZW9mKGljbXA2SGVhZGVyKSwgJmljbXA2SGVhZGVyKTsKKyAgICBvdExvZ0luZm9JY21wKEdldEluc3RhbmNlKCksICJTZW50IEVjaG8gUmVwbHkgKHNlcSA9ICVkKSIsIGljbXA2SGVhZGVyLkdldFNlcXVlbmNlKCkpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgcmVwbHlNZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICByZXBseU1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSWNtcDo6VXBkYXRlQ2hlY2tzdW0oTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFDaGVja3N1bSkKK3sKKyAgICBhQ2hlY2tzdW0gPSBhTWVzc2FnZS5VcGRhdGVDaGVja3N1bShhQ2hlY2tzdW0sIGFNZXNzYWdlLkdldE9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCkpOworCisgICAgaWYgKGFDaGVja3N1bSAhPSAweGZmZmYpCisgICAgeworICAgICAgICBhQ2hlY2tzdW0gPSB+YUNoZWNrc3VtOworICAgIH0KKworICAgIGFDaGVja3N1bSA9IEhvc3RTd2FwMTYoYUNoZWNrc3VtKTsKKyAgICBhTWVzc2FnZS5Xcml0ZShhTWVzc2FnZS5HZXRPZmZzZXQoKSArIEljbXBIZWFkZXI6OkdldENoZWNrc3VtT2Zmc2V0KCksIHNpemVvZihhQ2hlY2tzdW0pLCAmYUNoZWNrc3VtKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvaWNtcDYuaHBwIGIvc3JjL2NvcmUvbmV0L2ljbXA2LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2ZlN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L2ljbXA2LmhwcApAQCAtMCwwICsxLDM0MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElDTVB2Ni4KKyAqLworCisjaWZuZGVmIElDTVA2X0hQUF8KKyNkZWZpbmUgSUNNUDZfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9pY21wNi5oPgorCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9oZWFkZXJzLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWlwNi1pY21wNgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgSUNNUHY2LgorICoKKyAqIEB7CisgKgorICovCisKKy8qCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSUNNUHY2IGhlYWRlciBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEljbXBIZWFkZXI6IHB1YmxpYyBvdEljbXA2SGVhZGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIElDTVB2NiBoZWFkZXIgdG8gYWxsIHplcm9zLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgbVR5cGUgPSAwOyBtQ29kZSA9IDA7IG1DaGVja3N1bSA9IDA7IG1EYXRhLm0zMlswXSA9IDA7IH0KKworICAgIC8qKgorICAgICAqIElDTVB2NiBNZXNzYWdlIFR5cGVzCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAgIGtUeXBlRHN0VW5yZWFjaCAgPSBPVF9JQ01QNl9UWVBFX0RTVF9VTlJFQUNILCAgIC8vLzwgRGVzdGluYXRpb24gVW5yZWFjaGFibGUKKyAgICAgICAga1R5cGVFY2hvUmVxdWVzdCA9IE9UX0lDTVA2X1RZUEVfRUNIT19SRVFVRVNULCAgLy8vPCBFY2hvIFJlcXVlc3QKKyAgICAgICAga1R5cGVFY2hvUmVwbHkgICA9IE9UX0lDTVA2X1RZUEVfRUNIT19SRVBMWSwgICAgLy8vPCBFY2hvIFJlcGx5CisgICAgfTsKKworICAgIC8qKgorICAgICAqIElDTVB2NiBNZXNzYWdlIENvZGVzCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIENvZGUKKyAgICB7CisgICAgICAgIGtDb2RlRHN0VW5yZWFjaE5vUm91dGUgPSBPVF9JQ01QNl9DT0RFX0RTVF9VTlJFQUNIX05PX1JPVVRFLCAgLy8vPCBEZXN0aW5hdGlvbiBVbnJlYWNoYWJsZSBObyBSb3V0ZQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJQ01QdjYgbWVzc2FnZSB0eXBlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElDTVB2NiBtZXNzYWdlIHR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICBUeXBlIEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4obVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJQ01QdjYgbWVzc2FnZSB0eXBlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgIFRoZSBJQ01QdjYgbWVzc2FnZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUeXBlKFR5cGUgYVR5cGUpIHsgbVR5cGUgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhVHlwZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElDTVB2NiBtZXNzYWdlIGNvZGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUNNUHY2IG1lc3NhZ2UgY29kZS4KKyAgICAgKgorICAgICAqLworICAgIENvZGUgR2V0Q29kZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlPihtQ29kZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElDTVB2NiBtZXNzYWdlIGNvZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29kZSAgVGhlIElDTVB2NiBtZXNzYWdlIGNvZGUuCisgICAgICovCisgICAgdm9pZCBTZXRDb2RlKENvZGUgYUNvZGUpIHsgbUNvZGUgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhQ29kZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElDTVB2NiBtZXNzYWdlIGNoZWNrc3VtLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElDTVB2NiBtZXNzYWdlIGNoZWNrc3VtLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Q2hlY2tzdW0odm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtQ2hlY2tzdW0pOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJQ01QdjYgbWVzc2FnZSBjaGVja3N1bS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGVja3N1bSAgVGhlIElDTVB2NiBtZXNzYWdlIGNoZWNrc3VtLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDaGVja3N1bSh1aW50MTZfdCBhQ2hlY2tzdW0pIHsgbUNoZWNrc3VtID0gSG9zdFN3YXAxNihhQ2hlY2tzdW0pOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJQ01QdjYgbWVzc2FnZSBJRCBmb3IgRWNobyBSZXF1ZXN0cyBhbmQgUmVwbGllcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJQ01QdjYgbWVzc2FnZSBJRC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldElkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobURhdGEubTE2WzBdKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUNNUHY2IG1lc3NhZ2UgSUQgZm9yIEVjaG8gUmVxdWVzdHMgYW5kIFJlcGxpZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWQgIFRoZSBJQ01QdjYgbWVzc2FnZSBJRC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWQodWludDE2X3QgYUlkKSB7IG1EYXRhLm0xNlswXSA9IEhvc3RTd2FwMTYoYUlkKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUNNUHY2IG1lc3NhZ2Ugc2VxdWVuY2UgZm9yIEVjaG8gUmVxdWVzdHMgYW5kIFJlcGxpZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUNNUHY2IG1lc3NhZ2Ugc2VxdWVuY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTZXF1ZW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1EYXRhLm0xNlsxXSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElDTVB2NiBtZXNzYWdlIHNlcXVlbmNlIGZvciBFY2hvIFJlcXVlc3RzIGFuZCBSZXBsaWVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlcXVlbmNlICBUaGUgSUNNUHY2IG1lc3NhZ2Ugc2VxdWVuY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlcXVlbmNlKHVpbnQxNl90IGFTZXF1ZW5jZSkgeyBtRGF0YS5tMTZbMV0gPSBIb3N0U3dhcDE2KGFTZXF1ZW5jZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIHRoZSBieXRlIG9mZnNldCBvZiB0aGUgQ2hlY2tzdW0gZmllbGQgaW4gdGhlIElDTVB2NiBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgYnl0ZSBvZmZzZXQgb2YgdGhlIENoZWNrc3VtIGZpZWxkLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHVpbnQ4X3QgR2V0Q2hlY2tzdW1PZmZzZXQodm9pZCkgeyByZXR1cm4gb2Zmc2V0b2Yob3RJY21wNkhlYWRlciwgbUNoZWNrc3VtKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBJQ01QdjYgcGF5bG9hZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBCeXRlIG9mZnNldCBvZiB0aGUgSUNNUHY2IHBheWxvYWQuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDhfdCBHZXREYXRhT2Zmc2V0KHZvaWQpIHsgcmV0dXJuIG9mZnNldG9mKG90SWNtcDZIZWFkZXIsIG1EYXRhKTsgfQorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSUNNUHY2IG1lc3NhZ2UgaGFuZGxlcnMuCisgKgorICovCitjbGFzcyBJY21wSGFuZGxlciA6IHB1YmxpYyBvdEljbXA2SGFuZGxlcgoreworICAgIGZyaWVuZCBjbGFzcyBJY21wOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBjcmVhdGVzIGFuIElDTVB2NiBtZXNzYWdlIGhhbmRsZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgIEEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiByZWNlaXZpbmcgYW4gSUNNUHY2IG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBJY21wSGFuZGxlcihvdEljbXA2UmVjZWl2ZUNhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpIHsKKyAgICAgICAgbVJlY2VpdmVDYWxsYmFjayA9IGFDYWxsYmFjazsKKyAgICAgICAgbUNvbnRleHQgICAgICAgICA9IGFDb250ZXh0OworICAgICAgICBtTmV4dCAgICAgICAgICAgID0gTlVMTDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBIYW5kbGVSZWNlaXZlTWVzc2FnZShNZXNzYWdlICZtZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmbWVzc2FnZUluZm8sIGNvbnN0IEljbXBIZWFkZXIgJmljbXA2SGVhZGVyKSB7CisgICAgICAgIG1SZWNlaXZlQ2FsbGJhY2sobUNvbnRleHQsICZtZXNzYWdlLCAmbWVzc2FnZUluZm8sICZpY21wNkhlYWRlcik7CisgICAgfQorCisgICAgSWNtcEhhbmRsZXIgKkdldE5leHQodm9pZCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SWNtcEhhbmRsZXIgKj4obU5leHQpOyB9Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJQ01QdjYuCisgKgorICovCitjbGFzcyBJY21wOiBwdWJsaWMgSXA2TG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJcDYgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IG5ldHdvcmsgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgSWNtcChJcDYgJmFJcDYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBJQ01QIG1lc3NhZ2Ugd2l0aCBzdWZmaWNpZW50IGhlYWRlciBzcGFjZSByZXNlcnZlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXNlcnZlZCAgVGhlIG51bWJlciBvZiBoZWFkZXIgYnl0ZXMgdG8gcmVzZXJ2ZSBhZnRlciB0aGUgSUNNUCBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2Ugb3IgTlVMTCBpZiBubyBidWZmZXJzIGFyZSBhdmFpbGFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlICpOZXdNZXNzYWdlKHVpbnQxNl90IGFSZXNlcnZlZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWdpc3RlcnMgSUNNUHY2IGhhbmRsZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgQSByZWZlcmVuY2UgdG8gdGhlIElDTVB2NiBoYW5kbGVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB0aGUgSUNNUHY2IGhhbmRsZXIuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICBUaGUgSUNNUHY2IGhhbmRsZXIgaXMgYWxyZWFkeSByZWdpc3RlcmVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZWdpc3RlckhhbmRsZXIoSWNtcEhhbmRsZXIgJmFIYW5kbGVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGFuIElDTVB2NiBFY2hvIFJlcXVlc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIEVjaG8gUmVxdWVzdCBwYXlsb2FkLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUlkZW50aWZpZXIgICBBbiBpZGVudGlmaWVyIHRvIGFpZCBpbiBtYXRjaGluZyBFY2hvIFJlcGxpZXMgdG8gdGhpcyBFY2hvIFJlcXVlc3QuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBNYXkgYmUgemVyby4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBJQ01QdjYgRWNobyBSZXF1ZXN0IG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gZ2VuZXJhdGUgYW4gSUNNUHY2IEVjaG8gUmVxdWVzdCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kRWNob1JlcXVlc3QoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIHVpbnQxNl90IGFJZGVudGlmaWVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGFuIElDTVB2NiBlcnJvciBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgICAgICAgICBUaGUgSUNNUHY2IG1lc3NhZ2UgdHlwZS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29kZSAgICAgICAgIFRoZSBJQ01QdjYgbWVzc2FnZSBjb2RlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mby4KKyAgICAgKiBAcGFyYW1baW5dICBhSGVhZGVyICAgICAgIFRoZSBJUHY2IGhlYWRlciBvZiB0aGUgZXJyb3ItY2F1c2luZyBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIElDTVB2NiBlcnJvciBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kRXJyb3IoSWNtcEhlYWRlcjo6VHlwZSBhVHlwZSwgSWNtcEhlYWRlcjo6Q29kZSBhQ29kZSwgY29uc3QgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIZWFkZXIgJmFIZWFkZXIpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaGFuZGxlcyBhbiBJQ01QdjYgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIElDTVB2NiBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgdGhlIElDTVB2NiBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGdlbmVyYXRlIHRoZSByZXBseS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0RST1AgICAgIFRoZSBJQ01QdjYgbWVzc2FnZSB3YXMgaW52YWxpZCBhbmQgZHJvcHBlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgSGFuZGxlTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBJQ01QdjYgY2hlY2tzdW0uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBJQ01QdjYgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhUHNldWRvSGVhZGVyQ2hlY2tzdW0gIFRoZSBwc2V1ZG8taGVhZGVyIGNoZWNrc3VtIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSB1cGRhdGVkIHRoZSBJQ01QdjYgY2hlY2tzdW0uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBtZXNzYWdlIHdhcyBpbnZhbGlkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBVcGRhdGVDaGVja3N1bShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYVBzZXVkb0hlYWRlckNoZWNrc3VtKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGVuYWJsZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSUNNUHY2IEVjaG8gcHJvY2Vzc2luZyBpcyBkaXNhYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNFY2hvRW5hYmxlZCh2b2lkKSB7IHJldHVybiBtSXNFY2hvRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB3aGV0aGVyIG9yIG5vdCBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRW5hYmxlZCAgVFJVRSB0byBlbmFibGUgSUNNUHY2IEVjaG8gcHJvY2Vzc2luZywgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRFY2hvRW5hYmxlZChib29sIGFFbmFibGVkKSB7IG1Jc0VjaG9FbmFibGVkID0gYUVuYWJsZWQ7IH0KKworcHJpdmF0ZToKKyAgICBvdEVycm9yIEhhbmRsZUVjaG9SZXF1ZXN0KE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIEljbXBIYW5kbGVyICptSGFuZGxlcnM7CisKKyAgICB1aW50MTZfdCBtRWNob1NlcXVlbmNlOworICAgIGJvb2wgbUlzRWNob0VuYWJsZWQ7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5FVF9JQ01QNl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvaXA2LmNwcCBiL3NyYy9jb3JlL25ldC9pcDYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZGMwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2LmNwcApAQCAtMCwwICsxLDExODQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgSVB2NiBuZXR3b3JraW5nLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImlwNi50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiaXA2LmhwcCIKKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm5ldC9pY21wNi5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X3JvdXRlcy5ocHAiCisjaW5jbHVkZSAibmV0L25ldGlmLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworSXA2OjpJcDYodm9pZCk6CisgICAgbVJvdXRlcygqdGhpcyksCisgICAgbUljbXAoKnRoaXMpLAorICAgIG1VZHAoKnRoaXMpLAorICAgIG1NcGwoKnRoaXMpLAorICAgIG1NZXNzYWdlUG9vbChHZXRJbnN0YW5jZSgpKSwKKyAgICBtRm9yd2FyZGluZ0VuYWJsZWQoZmFsc2UpLAorICAgIG1TZW5kUXVldWVUYXNrKG1UYXNrbGV0U2NoZWR1bGVyLCBIYW5kbGVTZW5kUXVldWUsIHRoaXMpLAorICAgIG1SZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjayhOVUxMKSwKKyAgICBtUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2tDb250ZXh0KE5VTEwpLAorICAgIG1Jc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkKGZhbHNlKSwKKyAgICBtTmV0aWZMaXN0SGVhZChOVUxMKQoreworfQorCitNZXNzYWdlICpJcDY6Ok5ld01lc3NhZ2UodWludDE2X3QgYVJlc2VydmVkKQoreworICAgIHJldHVybiBtTWVzc2FnZVBvb2wuTmV3KE1lc3NhZ2U6OmtUeXBlSXA2LCBzaXplb2YoSGVhZGVyKSArIHNpemVvZihIb3BCeUhvcEhlYWRlcikgKyBzaXplb2YoT3B0aW9uTXBsKSArIGFSZXNlcnZlZCk7Cit9CisKK3VpbnQxNl90IElwNjo6VXBkYXRlQ2hlY2tzdW0odWludDE2X3QgYUNoZWNrc3VtLCB1aW50MTZfdCBhVmFsdWUpCit7CisgICAgdWludDE2X3QgcmVzdWx0ID0gYUNoZWNrc3VtICsgYVZhbHVlOworICAgIHJldHVybiByZXN1bHQgKyAocmVzdWx0IDwgYUNoZWNrc3VtKTsKK30KKwordWludDE2X3QgSXA2OjpVcGRhdGVDaGVja3N1bSh1aW50MTZfdCBhQ2hlY2tzdW0sIGNvbnN0IHZvaWQgKmFCdWYsIHVpbnQxNl90IGFMZW5ndGgpCit7CisgICAgY29uc3QgdWludDhfdCAqYnl0ZXMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oYUJ1Zik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFMZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIGFDaGVja3N1bSA9IElwNjo6VXBkYXRlQ2hlY2tzdW0oYUNoZWNrc3VtLCAoaSAmIDEpID8gYnl0ZXNbaV0gOiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oYnl0ZXNbaV0gPDwgOCkpOworICAgIH0KKworICAgIHJldHVybiBhQ2hlY2tzdW07Cit9CisKK3VpbnQxNl90IElwNjo6VXBkYXRlQ2hlY2tzdW0odWludDE2X3QgYUNoZWNrc3VtLCBjb25zdCBBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICByZXR1cm4gSXA2OjpVcGRhdGVDaGVja3N1bShhQ2hlY2tzdW0sIGFBZGRyZXNzLm1GaWVsZHMubTgsIHNpemVvZihhQWRkcmVzcykpOworfQorCit1aW50MTZfdCBJcDY6OkNvbXB1dGVQc2V1ZG9oZWFkZXJDaGVja3N1bShjb25zdCBBZGRyZXNzICZhU291cmNlLCBjb25zdCBBZGRyZXNzICZhRGVzdGluYXRpb24sIHVpbnQxNl90IGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJcFByb3RvIGFQcm90bykKK3sKKyAgICB1aW50MTZfdCBjaGVja3N1bTsKKworICAgIGNoZWNrc3VtID0gSXA2OjpVcGRhdGVDaGVja3N1bSgwLCBhTGVuZ3RoKTsKKyAgICBjaGVja3N1bSA9IElwNjo6VXBkYXRlQ2hlY2tzdW0oY2hlY2tzdW0sIHN0YXRpY19jYXN0PHVpbnQxNl90PihhUHJvdG8pKTsKKyAgICBjaGVja3N1bSA9IFVwZGF0ZUNoZWNrc3VtKGNoZWNrc3VtLCBhU291cmNlKTsKKyAgICBjaGVja3N1bSA9IFVwZGF0ZUNoZWNrc3VtKGNoZWNrc3VtLCBhRGVzdGluYXRpb24pOworCisgICAgcmV0dXJuIGNoZWNrc3VtOworfQorCit2b2lkIElwNjo6U2V0UmVjZWl2ZURhdGFncmFtQ2FsbGJhY2sob3RJcDZSZWNlaXZlQ2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ2FsbGJhY2tDb250ZXh0KQoreworICAgIG1SZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjayA9IGFDYWxsYmFjazsKKyAgICBtUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2tDb250ZXh0ID0gYUNhbGxiYWNrQ29udGV4dDsKK30KKworb3RFcnJvciBJcDY6OkFkZE1wbE9wdGlvbihNZXNzYWdlICZhTWVzc2FnZSwgSGVhZGVyICZhSGVhZGVyKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEhvcEJ5SG9wSGVhZGVyIGhiaEhlYWRlcjsKKyAgICBPcHRpb25NcGwgbXBsT3B0aW9uOworICAgIE9wdGlvblBhZE4gcGFkT3B0aW9uOworCisgICAgaGJoSGVhZGVyLlNldE5leHRIZWFkZXIoYUhlYWRlci5HZXROZXh0SGVhZGVyKCkpOworICAgIGhiaEhlYWRlci5TZXRMZW5ndGgoMCk7CisgICAgbU1wbC5Jbml0T3B0aW9uKG1wbE9wdGlvbiwgYUhlYWRlci5HZXRTb3VyY2UoKSk7CisKKyAgICAvLyBNcGwgb3B0aW9uIG1heSByZXF1aXJlIHR3byBieXRlcyBwYWRkaW5nLgorICAgIGlmICgobXBsT3B0aW9uLkdldFRvdGFsTGVuZ3RoKCkgKyBzaXplb2YoaGJoSGVhZGVyKSkgJSA4KQorICAgIHsKKyAgICAgICAgcGFkT3B0aW9uLkluaXQoMik7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5QcmVwZW5kKCZwYWRPcHRpb24sIHBhZE9wdGlvbi5HZXRUb3RhbExlbmd0aCgpKSk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLlByZXBlbmQoJm1wbE9wdGlvbiwgbXBsT3B0aW9uLkdldFRvdGFsTGVuZ3RoKCkpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuUHJlcGVuZCgmaGJoSGVhZGVyLCBzaXplb2YoaGJoSGVhZGVyKSkpOworICAgIGFIZWFkZXIuU2V0UGF5bG9hZExlbmd0aChhSGVhZGVyLkdldFBheWxvYWRMZW5ndGgoKSArIHNpemVvZihoYmhIZWFkZXIpICsgc2l6ZW9mKG1wbE9wdGlvbikpOworICAgIGFIZWFkZXIuU2V0TmV4dEhlYWRlcihrUHJvdG9Ib3BPcHRzKTsKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIElwNjo6QWRkVHVubmVsZWRNcGxPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUhlYWRlciwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgdHVubmVsSGVhZGVyOworICAgIGNvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgKnNvdXJjZTsKKyAgICBNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbyhhTWVzc2FnZUluZm8pOworCisgICAgLy8gVXNlIElQLWluLUlQIGVuY2Fwc3VsYXRpb24gKFJGQzI0NzMpIGFuZCBBTExfTVBMX0ZPUldBUkRFUlMgYWRkcmVzcy4KKyAgICBtZW1zZXQoJm1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCksIDAsIHNpemVvZihBZGRyZXNzKSk7CisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZjAzKTsKKyAgICBtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNigweDAwZmMpOworCisgICAgdHVubmVsSGVhZGVyLkluaXQoKTsKKyAgICB0dW5uZWxIZWFkZXIuU2V0SG9wTGltaXQoc3RhdGljX2Nhc3Q8dWludDhfdD4oa0RlZmF1bHRIb3BMaW1pdCkpOworICAgIHR1bm5lbEhlYWRlci5TZXRQYXlsb2FkTGVuZ3RoKGFIZWFkZXIuR2V0UGF5bG9hZExlbmd0aCgpICsgc2l6ZW9mKHR1bm5lbEhlYWRlcikpOworICAgIHR1bm5lbEhlYWRlci5TZXREZXN0aW5hdGlvbihtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKyAgICB0dW5uZWxIZWFkZXIuU2V0TmV4dEhlYWRlcihrUHJvdG9JcDYpOworCisgICAgVmVyaWZ5T3JFeGl0KChzb3VyY2UgPSBTZWxlY3RTb3VyY2VBZGRyZXNzKG1lc3NhZ2VJbmZvKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NPVVJDRV9BRERSRVNTKTsKKworICAgIHR1bm5lbEhlYWRlci5TZXRTb3VyY2Uoc291cmNlLT5HZXRBZGRyZXNzKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFkZE1wbE9wdGlvbihhTWVzc2FnZSwgdHVubmVsSGVhZGVyKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLlByZXBlbmQoJnR1bm5lbEhlYWRlciwgc2l6ZW9mKHR1bm5lbEhlYWRlcikpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSXA2OjpJbnNlcnRNcGxPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUlwNkhlYWRlciwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhSXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNNdWx0aWNhc3QoKSAmJgorICAgICAgICAgICAgICAgICBhSXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuR2V0U2NvcGUoKSA+PSBBZGRyZXNzOjprUmVhbG1Mb2NhbFNjb3BlKTsKKworICAgIGlmIChhSXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNSZWFsbUxvY2FsTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICBhTWVzc2FnZS5SZW1vdmVIZWFkZXIoc2l6ZW9mKGFJcDZIZWFkZXIpKTsKKworICAgICAgICBpZiAoYUlwNkhlYWRlci5HZXROZXh0SGVhZGVyKCkgPT0ga1Byb3RvSG9wT3B0cykKKyAgICAgICAgeworICAgICAgICAgICAgSG9wQnlIb3BIZWFkZXIgaGJoOworICAgICAgICAgICAgdWludDhfdCBoYmhMZW5ndGggPSAwOworICAgICAgICAgICAgT3B0aW9uTXBsIG1wbE9wdGlvbjsKKworICAgICAgICAgICAgLy8gcmVhZCBleGlzdGluZyBob3AtYnktaG9wIG9wdGlvbiBoZWFkZXIKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQoMCwgc2l6ZW9mKGhiaCksICZoYmgpOworICAgICAgICAgICAgaGJoTGVuZ3RoID0gKGhiaC5HZXRMZW5ndGgoKSArIDEpICogODsKKworICAgICAgICAgICAgLy8gaW5jcmVhc2UgZXhpc3RpbmcgaG9wLWJ5LWhvcCBvcHRpb24gaGVhZGVyIGxlbmd0aCBieSA4IGJ5dGVzCisgICAgICAgICAgICBoYmguU2V0TGVuZ3RoKGhiaC5HZXRMZW5ndGgoKSArIDEpOworICAgICAgICAgICAgYU1lc3NhZ2UuV3JpdGUoMCwgc2l6ZW9mKGhiaCksICZoYmgpOworCisgICAgICAgICAgICAvLyBtYWtlIHNwYWNlIGZvciBNUEwgT3B0aW9uICsgcGFkZGluZyBieSBzaGlmdGluZyBob3AtYnktaG9wIG9wdGlvbiBoZWFkZXIKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5QcmVwZW5kKE5VTEwsIDgpKTsKKyAgICAgICAgICAgIGFNZXNzYWdlLkNvcHlUbyg4LCAwLCBoYmhMZW5ndGgsIGFNZXNzYWdlKTsKKworICAgICAgICAgICAgLy8gaW5zZXJ0IE1QTCBPcHRpb24KKyAgICAgICAgICAgIG1NcGwuSW5pdE9wdGlvbihtcGxPcHRpb24sIGFJcDZIZWFkZXIuR2V0U291cmNlKCkpOworICAgICAgICAgICAgYU1lc3NhZ2UuV3JpdGUoaGJoTGVuZ3RoLCBtcGxPcHRpb24uR2V0VG90YWxMZW5ndGgoKSwgJm1wbE9wdGlvbik7CisKKyAgICAgICAgICAgIC8vIGluc2VydCBQYWQgT3B0aW9uIChpZiBuZWVkZWQpCisgICAgICAgICAgICBpZiAobXBsT3B0aW9uLkdldFRvdGFsTGVuZ3RoKCkgJSA4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE9wdGlvblBhZE4gcGFkT3B0aW9uOworICAgICAgICAgICAgICAgIHBhZE9wdGlvbi5Jbml0KDggLSAobXBsT3B0aW9uLkdldFRvdGFsTGVuZ3RoKCkgJSA4KSk7CisgICAgICAgICAgICAgICAgYU1lc3NhZ2UuV3JpdGUoaGJoTGVuZ3RoICsgbXBsT3B0aW9uLkdldFRvdGFsTGVuZ3RoKCksIHBhZE9wdGlvbi5HZXRUb3RhbExlbmd0aCgpLCAmcGFkT3B0aW9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaW5jcmVhc2UgSVB2NiBQYXlsb2FkIExlbmd0aAorICAgICAgICAgICAgYUlwNkhlYWRlci5TZXRQYXlsb2FkTGVuZ3RoKGFJcDZIZWFkZXIuR2V0UGF5bG9hZExlbmd0aCgpICsgOCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQWRkTXBsT3B0aW9uKGFNZXNzYWdlLCBhSXA2SGVhZGVyKSk7CisgICAgICAgIH0KKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuUHJlcGVuZCgmYUlwNkhlYWRlciwgc2l6ZW9mKGFJcDZIZWFkZXIpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBZGRUdW5uZWxlZE1wbE9wdGlvbihhTWVzc2FnZSwgYUlwNkhlYWRlciwgYU1lc3NhZ2VJbmZvKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBJcDY6OlJlbW92ZU1wbE9wdGlvbihNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgaXA2SGVhZGVyOworICAgIEhvcEJ5SG9wSGVhZGVyIGhiaDsKKyAgICB1aW50MTZfdCBvZmZzZXQ7CisgICAgdWludDE2X3QgZW5kT2Zmc2V0OworICAgIHVpbnQxNl90IG1wbE9mZnNldCA9IDA7CisgICAgdWludDhfdCBtcGxMZW5ndGggPSAwOworICAgIGJvb2wgcmVtb3ZlID0gZmFsc2U7CisKKyAgICBvZmZzZXQgPSAwOworICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YoaXA2SGVhZGVyKSwgJmlwNkhlYWRlcik7CisgICAgb2Zmc2V0ICs9IHNpemVvZihpcDZIZWFkZXIpOworICAgIFZlcmlmeU9yRXhpdChpcDZIZWFkZXIuR2V0TmV4dEhlYWRlcigpID09IGtQcm90b0hvcE9wdHMpOworCisgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihoYmgpLCAmaGJoKTsKKyAgICBlbmRPZmZzZXQgPSBvZmZzZXQgKyAoaGJoLkdldExlbmd0aCgpICsgMSkgKiA4OworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5HZXRMZW5ndGgoKSA+PSBlbmRPZmZzZXQsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb2Zmc2V0ICs9IHNpemVvZihoYmgpOworCisgICAgd2hpbGUgKG9mZnNldCA8IGVuZE9mZnNldCkKKyAgICB7CisgICAgICAgIE9wdGlvbkhlYWRlciBvcHRpb247CisKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihvcHRpb24pLCAmb3B0aW9uKTsKKworICAgICAgICBzd2l0Y2ggKG9wdGlvbi5HZXRUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPcHRpb25NcGw6OmtUeXBlOgorICAgICAgICAgICAgbXBsT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgbXBsTGVuZ3RoID0gb3B0aW9uLkdldExlbmd0aCgpOworCisgICAgICAgICAgICBpZiAobXBsT2Zmc2V0ID09IHNpemVvZihpcDZIZWFkZXIpICsgc2l6ZW9mKGhiaCkgJiYgaGJoLkdldExlbmd0aCgpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZmlyc3QgYW5kIG9ubHkgSVB2NiBPcHRpb24sIHJlbW92ZSBJUHY2IEhCSCBPcHRpb24gaGVhZGVyCisgICAgICAgICAgICAgICAgcmVtb3ZlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1wbE9mZnNldCArIDggPT0gZW5kT2Zmc2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGxhc3QgSVB2NiBPcHRpb24sIHJlbW92ZSBsYXN0IDggYnl0ZXMKKyAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKG9wdGlvbikgKyBvcHRpb24uR2V0TGVuZ3RoKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9wdGlvblBhZDE6OmtUeXBlOgorICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihPcHRpb25QYWQxKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT3B0aW9uUGFkTjo6a1R5cGU6CisgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKG9wdGlvbikgKyBvcHRpb24uR2V0TGVuZ3RoKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gZW5jb3VudGVyZWQgYW5vdGhlciBvcHRpb24sIG5vdyBqdXN0IHJlcGxhY2UgTVBMIE9wdGlvbiB3aXRoIFBhZE4KKyAgICAgICAgICAgIHJlbW92ZSA9IGZhbHNlOworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihvcHRpb24pICsgb3B0aW9uLkdldExlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyB2ZXJpZnkgdGhhdCBJUHY2IE9wdGlvbnMgaGVhZGVyIGlzIHByb3Blcmx5IGZvcm1lZAorICAgIFZlcmlmeU9yRXhpdChvZmZzZXQgPT0gZW5kT2Zmc2V0LCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChyZW1vdmUpCisgICAgeworICAgICAgICAvLyBsYXN0IElQdjYgT3B0aW9uLCBzaHJpbmsgSEJIIE9wdGlvbiBoZWFkZXIKKyAgICAgICAgdWludDhfdCBidWZbOF07CisKKyAgICAgICAgb2Zmc2V0ID0gZW5kT2Zmc2V0IC0gc2l6ZW9mKGJ1Zik7CisKKyAgICAgICAgd2hpbGUgKG9mZnNldCA+PSBzaXplb2YoYnVmKSkKKyAgICAgICAgeworICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQgLSBzaXplb2YoYnVmKSwgc2l6ZW9mKGJ1ZiksIGJ1Zik7CisgICAgICAgICAgICBhTWVzc2FnZS5Xcml0ZShvZmZzZXQsIHNpemVvZihidWYpLCBidWYpOworICAgICAgICAgICAgb2Zmc2V0IC09IHNpemVvZihidWYpOworICAgICAgICB9CisKKyAgICAgICAgYU1lc3NhZ2UuUmVtb3ZlSGVhZGVyKHNpemVvZihidWYpKTsKKworICAgICAgICBpZiAobXBsT2Zmc2V0ID09IHNpemVvZihpcDZIZWFkZXIpICsgc2l6ZW9mKGhiaCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHJlbW92ZSBlbnRpcmUgSEJIIGhlYWRlcgorICAgICAgICAgICAgaXA2SGVhZGVyLlNldE5leHRIZWFkZXIoaGJoLkdldE5leHRIZWFkZXIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyB1cGRhdGUgSEJIIGhlYWRlciBsZW5ndGgKKyAgICAgICAgICAgIGhiaC5TZXRMZW5ndGgoaGJoLkdldExlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICBhTWVzc2FnZS5Xcml0ZShzaXplb2YoaXA2SGVhZGVyKSwgc2l6ZW9mKGhiaCksICZoYmgpOworICAgICAgICB9CisKKyAgICAgICAgaXA2SGVhZGVyLlNldFBheWxvYWRMZW5ndGgoaXA2SGVhZGVyLkdldFBheWxvYWRMZW5ndGgoKSAtIHNpemVvZihidWYpKTsKKyAgICAgICAgYU1lc3NhZ2UuV3JpdGUoMCwgc2l6ZW9mKGlwNkhlYWRlciksICZpcDZIZWFkZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChtcGxPZmZzZXQgIT0gMCkKKyAgICB7CisgICAgICAgIC8vIHJlcGxhY2UgTVBMIE9wdGlvbiB3aXRoIFBhZE4gT3B0aW9uCisgICAgICAgIE9wdGlvblBhZE4gcGFkT3B0aW9uOworCisgICAgICAgIHBhZE9wdGlvbi5Jbml0KHNpemVvZihPcHRpb25IZWFkZXIpICsgbXBsTGVuZ3RoKTsKKyAgICAgICAgYU1lc3NhZ2UuV3JpdGUobXBsT2Zmc2V0LCBwYWRPcHRpb24uR2V0VG90YWxMZW5ndGgoKSwgJnBhZE9wdGlvbik7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBJcDY6OkVucXVldWVEYXRhZ3JhbShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBtU2VuZFF1ZXVlLkVucXVldWUoYU1lc3NhZ2UpOworICAgIG1TZW5kUXVldWVUYXNrLlBvc3QoKTsKK30KKworb3RFcnJvciBJcDY6OlNlbmREYXRhZ3JhbShNZXNzYWdlICZhTWVzc2FnZSwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgSXBQcm90byBhSXBQcm90bykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgaGVhZGVyOworICAgIHVpbnQxNl90IHBheWxvYWRMZW5ndGggPSBhTWVzc2FnZS5HZXRMZW5ndGgoKTsKKyAgICB1aW50MTZfdCBjaGVja3N1bTsKKyAgICBjb25zdCBOZXRpZlVuaWNhc3RBZGRyZXNzICpzb3VyY2U7CisKKyAgICBoZWFkZXIuSW5pdCgpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTGVuZ3RoKHBheWxvYWRMZW5ndGgpOworICAgIGhlYWRlci5TZXROZXh0SGVhZGVyKGFJcFByb3RvKTsKKyAgICBoZWFkZXIuU2V0SG9wTGltaXQoYU1lc3NhZ2VJbmZvLm1Ib3BMaW1pdCA/IGFNZXNzYWdlSW5mby5tSG9wTGltaXQgOiBzdGF0aWNfY2FzdDx1aW50OF90PihrRGVmYXVsdEhvcExpbWl0KSk7CisKKyAgICBpZiAoYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkuSXNVbnNwZWNpZmllZCgpIHx8CisgICAgICAgIGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoKHNvdXJjZSA9IFNlbGVjdFNvdXJjZUFkZHJlc3MoYU1lc3NhZ2VJbmZvKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TT1VSQ0VfQUREUkVTUyk7CisgICAgICAgIGhlYWRlci5TZXRTb3VyY2Uoc291cmNlLT5HZXRBZGRyZXNzKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBoZWFkZXIuU2V0U291cmNlKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpKTsKKyAgICB9CisKKyAgICBoZWFkZXIuU2V0RGVzdGluYXRpb24oYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworCisgICAgaWYgKGhlYWRlci5HZXREZXN0aW5hdGlvbigpLklzTGlua0xvY2FsKCkgfHwgaGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNMaW5rTG9jYWxNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZUluZm8uR2V0SW50ZXJmYWNlSWQoKSAhPSAwLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgIH0KKworICAgIGlmIChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5Jc1JlYWxtTG9jYWxNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBZGRNcGxPcHRpb24oYU1lc3NhZ2UsIGhlYWRlcikpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5QcmVwZW5kKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpKSk7CisKKyAgICBpZiAoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkuSXNNdWx0aWNhc3QoKSAmJgorICAgICAgICBhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5HZXRTY29wZSgpID4gQWRkcmVzczo6a1JlYWxtTG9jYWxTY29wZSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBZGRUdW5uZWxlZE1wbE9wdGlvbihhTWVzc2FnZSwgaGVhZGVyLCBhTWVzc2FnZUluZm8pKTsKKyAgICB9CisKKyAgICAvLyBjb21wdXRlIGNoZWNrc3VtCisgICAgY2hlY2tzdW0gPSBDb21wdXRlUHNldWRvaGVhZGVyQ2hlY2tzdW0oaGVhZGVyLkdldFNvdXJjZSgpLCBoZWFkZXIuR2V0RGVzdGluYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkTGVuZ3RoLCBhSXBQcm90byk7CisKKyAgICBzd2l0Y2ggKGFJcFByb3RvKQorICAgIHsKKyAgICBjYXNlIGtQcm90b1VkcDoKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1VZHAuVXBkYXRlQ2hlY2tzdW0oYU1lc3NhZ2UsIGNoZWNrc3VtKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrUHJvdG9JY21wNjoKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1JY21wLlVwZGF0ZUNoZWNrc3VtKGFNZXNzYWdlLCBjaGVja3N1bSkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgYU1lc3NhZ2UuU2V0SW50ZXJmYWNlSWQoYU1lc3NhZ2VJbmZvLkdldEludGVyZmFjZUlkKCkpOworICAgICAgICBFbnF1ZXVlRGF0YWdyYW0oYU1lc3NhZ2UpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBJcDY6OkhhbmRsZVNlbmRRdWV1ZShUYXNrbGV0ICZhVGFza2xldCkKK3sKKyAgICBHZXRPd25lcihhVGFza2xldCkuSGFuZGxlU2VuZFF1ZXVlKCk7Cit9CisKK3ZvaWQgSXA2OjpIYW5kbGVTZW5kUXVldWUodm9pZCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgd2hpbGUgKChtZXNzYWdlID0gbVNlbmRRdWV1ZS5HZXRIZWFkKCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2VuZFF1ZXVlLkRlcXVldWUoKm1lc3NhZ2UpOworICAgICAgICBIYW5kbGVEYXRhZ3JhbSgqbWVzc2FnZSwgTlVMTCwgbWVzc2FnZS0+R2V0SW50ZXJmYWNlSWQoKSwgTlVMTCwgZmFsc2UpOworICAgIH0KK30KKworb3RFcnJvciBJcDY6OkhhbmRsZU9wdGlvbnMoTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUhlYWRlciwgYm9vbCAmYUZvcndhcmQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSG9wQnlIb3BIZWFkZXIgaGJoSGVhZGVyOworICAgIE9wdGlvbkhlYWRlciBvcHRpb25IZWFkZXI7CisgICAgdWludDE2X3QgZW5kT2Zmc2V0OworCisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihoYmhIZWFkZXIpLCAmaGJoSGVhZGVyKSA9PSBzaXplb2YoaGJoSGVhZGVyKSwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICBlbmRPZmZzZXQgPSBhTWVzc2FnZS5HZXRPZmZzZXQoKSArIChoYmhIZWFkZXIuR2V0TGVuZ3RoKCkgKyAxKSAqIDg7CisKKyAgICBWZXJpZnlPckV4aXQoZW5kT2Zmc2V0IDw9IGFNZXNzYWdlLkdldExlbmd0aCgpLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChzaXplb2Yob3B0aW9uSGVhZGVyKSk7CisKKyAgICB3aGlsZSAoYU1lc3NhZ2UuR2V0T2Zmc2V0KCkgPCBlbmRPZmZzZXQpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKG9wdGlvbkhlYWRlciksICZvcHRpb25IZWFkZXIpID09IHNpemVvZihvcHRpb25IZWFkZXIpLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgICAgICBpZiAob3B0aW9uSGVhZGVyLkdldFR5cGUoKSA9PSBPcHRpb25QYWQxOjprVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChzaXplb2YoT3B0aW9uUGFkMSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCkgKyBzaXplb2Yob3B0aW9uSGVhZGVyKSArIG9wdGlvbkhlYWRlci5HZXRMZW5ndGgoKSA8PSBlbmRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgIHN3aXRjaCAob3B0aW9uSGVhZGVyLkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE9wdGlvbk1wbDo6a1R5cGU6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbU1wbC5Qcm9jZXNzT3B0aW9uKGFNZXNzYWdlLCBhSGVhZGVyLkdldFNvdXJjZSgpLCBhRm9yd2FyZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uSGVhZGVyLkdldEFjdGlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBPcHRpb25IZWFkZXI6OmtBY3Rpb25Ta2lwOgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9wdGlvbkhlYWRlcjo6a0FjdGlvbkRpc2NhcmQ6CisgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgICAgICBjYXNlIE9wdGlvbkhlYWRlcjo6a0FjdGlvbkZvcmNlSWNtcDoKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBzZW5kIGljbXAgZXJyb3IKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgICAgIGNhc2UgT3B0aW9uSGVhZGVyOjprQWN0aW9uSWNtcDoKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBzZW5kIGljbXAgZXJyb3IKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KHNpemVvZihvcHRpb25IZWFkZXIpICsgb3B0aW9uSGVhZGVyLkdldExlbmd0aCgpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIElwNjo6SGFuZGxlRnJhZ21lbnQoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgRnJhZ21lbnRIZWFkZXIgZnJhZ21lbnRIZWFkZXI7CisKKyAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKGZyYWdtZW50SGVhZGVyKSwgJmZyYWdtZW50SGVhZGVyKSA9PSBzaXplb2YoZnJhZ21lbnRIZWFkZXIpLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgVmVyaWZ5T3JFeGl0KGZyYWdtZW50SGVhZGVyLkdldE9mZnNldCgpID09IDAgJiYgZnJhZ21lbnRIZWFkZXIuSXNNb3JlRmxhZ1NldCgpID09IGZhbHNlLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChzaXplb2YoZnJhZ21lbnRIZWFkZXIpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSXA2OjpIYW5kbGVFeHRlbnNpb25IZWFkZXJzKE1lc3NhZ2UgJmFNZXNzYWdlLCBIZWFkZXIgJmFIZWFkZXIsIHVpbnQ4X3QgJmFOZXh0SGVhZGVyLCBib29sIGFGb3J3YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhUmVjZWl2ZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBFeHRlbnNpb25IZWFkZXIgZXh0SGVhZGVyOworCisgICAgd2hpbGUgKGFSZWNlaXZlID09IHRydWUgfHwgYU5leHRIZWFkZXIgPT0ga1Byb3RvSG9wT3B0cykKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoZXh0SGVhZGVyKSwgJmV4dEhlYWRlcikgPT0gc2l6ZW9mKGV4dEhlYWRlciksCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgIHN3aXRjaCAoYU5leHRIZWFkZXIpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBrUHJvdG9Ib3BPcHRzOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEhhbmRsZU9wdGlvbnMoYU1lc3NhZ2UsIGFIZWFkZXIsIGFGb3J3YXJkKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtQcm90b0ZyYWdtZW50OgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEhhbmRsZUZyYWdtZW50KGFNZXNzYWdlKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtQcm90b0RzdE9wdHM6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSGFuZGxlT3B0aW9ucyhhTWVzc2FnZSwgYUhlYWRlciwgYUZvcndhcmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1Byb3RvSXA2OgorICAgICAgICAgICAgRXhpdE5vdygpOworCisgICAgICAgIGNhc2Uga1Byb3RvUm91dGluZzoKKyAgICAgICAgY2FzZSBrUHJvdG9Ob25lOgorICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICBhTmV4dEhlYWRlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGV4dEhlYWRlci5HZXROZXh0SGVhZGVyKCkpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSXA2OjpIYW5kbGVQYXlsb2FkKE1lc3NhZ2UgJmFNZXNzYWdlLCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCB1aW50OF90IGFJcFByb3RvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgc3dpdGNoIChhSXBQcm90bykKKyAgICB7CisgICAgY2FzZSBrUHJvdG9VZHA6CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBtVWRwLkhhbmRsZU1lc3NhZ2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworCisgICAgY2FzZSBrUHJvdG9JY21wNjoKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IG1JY21wLkhhbmRsZU1lc3NhZ2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSXA2OjpQcm9jZXNzUmVjZWl2ZUNhbGxiYWNrKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCB1aW50OF90IGFJcFByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRnJvbU5jcEhvc3QpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZUNvcHkgPSBOVUxMOworCisgICAgVmVyaWZ5T3JFeGl0KGFGcm9tTmNwSG9zdCA9PSBmYWxzZSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICBWZXJpZnlPckV4aXQobVJlY2VpdmVJcDZEYXRhZ3JhbUNhbGxiYWNrICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEUpOworCisgICAgaWYgKG1Jc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkKQorICAgIHsKKyAgICAgICAgLy8gZG8gbm90IHBhc3MgbWVzc2FnZXMgc2VudCB0by9mcm9tIGFuIFJMT0MKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCFhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc1JvdXRpbmdMb2NhdG9yKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICFhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5Jc1JvdXRpbmdMb2NhdG9yKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICFhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc0FueWNhc3RSb3V0aW5nTG9jYXRvcigpICYmCisgICAgICAgICAgICAgICAgICAgICAhYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkuSXNBbnljYXN0Um91dGluZ0xvY2F0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEUpOworCisgICAgICAgIHN3aXRjaCAoYUlwUHJvdG8pCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBrUHJvdG9JY21wNjoKKyAgICAgICAgICAgIGlmIChtSWNtcC5Jc0VjaG9FbmFibGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSWNtcEhlYWRlciBpY21wOworICAgICAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihpY21wKSwgJmljbXApOworCisgICAgICAgICAgICAgICAgLy8gZG8gbm90IHBhc3MgSUNNUCBFY2hvIFJlcXVlc3QgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoaWNtcC5HZXRUeXBlKCkgIT0gSWNtcEhlYWRlcjo6a1R5cGVFY2hvUmVxdWVzdCwgZXJyb3IgPSBPVF9FUlJPUl9OT19ST1VURSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1Byb3RvVWRwOgorICAgICAgICAgICAgaWYgKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTGlua0xvY2FsKCkgfHwKKyAgICAgICAgICAgICAgICBhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc0xpbmtMb2NhbE11bHRpY2FzdCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVkcEhlYWRlciB1ZHA7CisgICAgICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKHVkcCksICZ1ZHApOworCisgICAgICAgICAgICAgICAgLy8gZG8gbm90IHBhc3MgTUxFIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHVkcC5HZXREZXN0aW5hdGlvblBvcnQoKSAhPSBNbGU6OmtVZHBQb3J0LCBlcnJvciA9IE9UX0VSUk9SX05PX1JPVVRFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gbWFrZSBhIGNvcHkgb2YgdGhlIGRhdGFncmFtIHRvIHBhc3MgdG8gaG9zdAorICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZUNvcHkgPSBhTWVzc2FnZS5DbG9uZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFJlbW92ZU1wbE9wdGlvbigqbWVzc2FnZUNvcHkpOworICAgIG1SZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjayhtZXNzYWdlQ29weSwgbVJlY2VpdmVJcDZEYXRhZ3JhbUNhbGxiYWNrQ29udGV4dCk7CisKK2V4aXQ6CisKKyAgICBzd2l0Y2ggKGVycm9yKQorICAgIHsKKyAgICBjYXNlIE9UX0VSUk9SX05PX0JVRlM6CisgICAgICAgIG90TG9nSW5mb0lwNihHZXRJbnN0YW5jZSgpLCAiRmFpbGVkIHRvIHBhc3MgdXAgbWVzc2FnZSAobGVuOiAlZCkgdG8gaG9zdCAtIG91dCBvZiBtZXNzYWdlIGJ1ZmZlci4iLAorICAgICAgICAgICAgICAgICAgICAgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRFJPUDoKKyAgICAgICAgb3RMb2dJbmZvSXA2KEdldEluc3RhbmNlKCksICJEcm9wcGluZyBtZXNzYWdlIChsZW46ICVkKSBmcm9tIGxvY2FsIGhvc3Qgc2luY2UgbmV4dCBob3AgaXMgdGhlIGhvc3QuIiwKKyAgICAgICAgICAgICAgICAgICAgIGFNZXNzYWdlLkdldExlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSXA2OjpTZW5kUmF3KE1lc3NhZ2UgJmFNZXNzYWdlLCBpbnQ4X3QgYUludGVyZmFjZUlkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEhlYWRlciBoZWFkZXI7CisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICAvLyBjaGVjayBhTWVzc2FnZSBsZW5ndGgKKyAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZCgwLCBzaXplb2YoaGVhZGVyKSwgJmhlYWRlcikgPT0gc2l6ZW9mKGhlYWRlciksIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihoZWFkZXIuR2V0U291cmNlKCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKGhlYWRlci5HZXREZXN0aW5hdGlvbigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChhSW50ZXJmYWNlSWQpOworICAgIG1lc3NhZ2VJbmZvLlNldEhvcExpbWl0KGhlYWRlci5HZXRIb3BMaW1pdCgpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRMaW5rSW5mbyhOVUxMKTsKKworICAgIGlmIChoZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc011bHRpY2FzdCgpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEluc2VydE1wbE9wdGlvbihhTWVzc2FnZSwgaGVhZGVyLCBtZXNzYWdlSW5mbykpOworICAgIH0KKworICAgIGVycm9yID0gSGFuZGxlRGF0YWdyYW0oYU1lc3NhZ2UsIE5VTEwsIGFJbnRlcmZhY2VJZCwgTlVMTCwgdHJ1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIElwNjo6SGFuZGxlRGF0YWdyYW0oTWVzc2FnZSAmYU1lc3NhZ2UsIE5ldGlmICphTmV0aWYsIGludDhfdCBhSW50ZXJmYWNlSWQsIGNvbnN0IHZvaWQgKmFMaW5rTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRnJvbU5jcEhvc3QpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgSGVhZGVyIGhlYWRlcjsKKyAgICB1aW50MTZfdCBwYXlsb2FkTGVuZ3RoOworICAgIGJvb2wgcmVjZWl2ZSA9IGZhbHNlOworICAgIGJvb2wgZm9yd2FyZCA9IGZhbHNlOworICAgIGJvb2wgdHVubmVsID0gZmFsc2U7CisgICAgYm9vbCBtdWx0aWNhc3RQcm9taXNjdW91cyA9IGZhbHNlOworICAgIHVpbnQ4X3QgbmV4dEhlYWRlcjsKKyAgICB1aW50OF90IGhvcExpbWl0OworICAgIGludDhfdCBmb3J3YXJkSW50ZXJmYWNlSWQ7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisjaWYgMAorICAgIHVpbnQ4X3QgYnVmWzEwMjRdOworICAgIGFNZXNzYWdlLlJlYWQoMCwgc2l6ZW9mKGJ1ZiksIGJ1Zik7CisgICAgZHVtcCgiaGFuZGxlIGRhdGFncmFtIiwgYnVmLCBhTWVzc2FnZS5HZXRMZW5ndGgoKSk7CisjZW5kaWYKKworICAgIC8vIGNoZWNrIGFNZXNzYWdlIGxlbmd0aAorICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5SZWFkKDAsIHNpemVvZihoZWFkZXIpLCAmaGVhZGVyKSA9PSBzaXplb2YoaGVhZGVyKSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICBwYXlsb2FkTGVuZ3RoID0gaGVhZGVyLkdldFBheWxvYWRMZW5ndGgoKTsKKworICAgIC8vIGNoZWNrIFZlcnNpb24KKyAgICBWZXJpZnlPckV4aXQoaGVhZGVyLklzVmVyc2lvbjYoKSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIC8vIGNoZWNrIFBheWxvYWQgTGVuZ3RoCisgICAgVmVyaWZ5T3JFeGl0KHNpemVvZihoZWFkZXIpICsgcGF5bG9hZExlbmd0aCA9PSBhTWVzc2FnZS5HZXRMZW5ndGgoKSAmJgorICAgICAgICAgICAgICAgICBzaXplb2YoaGVhZGVyKSArIHBheWxvYWRMZW5ndGggPD0gSXA2OjprTWF4RGF0YWdyYW1MZW5ndGgsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihoZWFkZXIuR2V0U291cmNlKCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKGhlYWRlci5HZXREZXN0aW5hdGlvbigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChhSW50ZXJmYWNlSWQpOworICAgIG1lc3NhZ2VJbmZvLlNldEhvcExpbWl0KGhlYWRlci5HZXRIb3BMaW1pdCgpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRMaW5rSW5mbyhhTGlua01lc3NhZ2VJbmZvKTsKKworICAgIC8vIGRldGVybWluZSBkZXN0aW5hdGlvbiBvZiBwYWNrZXQKKyAgICBpZiAoaGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIGlmIChhTmV0aWYgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFOZXRpZi0+SXNNdWx0aWNhc3RTdWJzY3JpYmVkKGhlYWRlci5HZXREZXN0aW5hdGlvbigpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWNlaXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFOZXRpZi0+SXNNdWx0aWNhc3RQcm9taXNjdW91c0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtdWx0aWNhc3RQcm9taXNjdW91cyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmb3J3YXJkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoSXNVbmljYXN0QWRkcmVzcyhoZWFkZXIuR2V0RGVzdGluYXRpb24oKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlY2VpdmUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFoZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc0xpbmtMb2NhbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3J3YXJkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhTmV0aWYgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yd2FyZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhTWVzc2FnZS5TZXRJbnRlcmZhY2VJZChhSW50ZXJmYWNlSWQpOworICAgIGFNZXNzYWdlLlNldE9mZnNldChzaXplb2YoaGVhZGVyKSk7CisKKyAgICAvLyBwcm9jZXNzIElQdjYgRXh0ZW5zaW9uIEhlYWRlcnMKKyAgICBuZXh0SGVhZGVyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oaGVhZGVyLkdldE5leHRIZWFkZXIoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEhhbmRsZUV4dGVuc2lvbkhlYWRlcnMoYU1lc3NhZ2UsIGhlYWRlciwgbmV4dEhlYWRlciwgZm9yd2FyZCwgcmVjZWl2ZSkpOworCisgICAgaWYgKCFtRm9yd2FyZGluZ0VuYWJsZWQgJiYgYU5ldGlmICE9IE5VTEwpCisgICAgeworICAgICAgICBmb3J3YXJkID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gcHJvY2VzcyBJUHY2IFBheWxvYWQKKyAgICBpZiAocmVjZWl2ZSkKKyAgICB7CisgICAgICAgIGlmIChuZXh0SGVhZGVyID09IGtQcm90b0lwNikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGVuY2Fwc3VsYXRpbmcgaGVhZGVyLgorICAgICAgICAgICAgYU1lc3NhZ2UuUmVtb3ZlSGVhZGVyKGFNZXNzYWdlLkdldE9mZnNldCgpKTsKKworICAgICAgICAgICAgSGFuZGxlRGF0YWdyYW0oYU1lc3NhZ2UsIGFOZXRpZiwgYUludGVyZmFjZUlkLCBhTGlua01lc3NhZ2VJbmZvLCBhRnJvbU5jcEhvc3QpOworICAgICAgICAgICAgRXhpdE5vdyh0dW5uZWwgPSB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIFByb2Nlc3NSZWNlaXZlQ2FsbGJhY2soYU1lc3NhZ2UsIG1lc3NhZ2VJbmZvLCBuZXh0SGVhZGVyLCBhRnJvbU5jcEhvc3QpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBIYW5kbGVQYXlsb2FkKGFNZXNzYWdlLCBtZXNzYWdlSW5mbywgbmV4dEhlYWRlcikpOworICAgIH0KKyAgICBlbHNlIGlmIChtdWx0aWNhc3RQcm9taXNjdW91cykKKyAgICB7CisgICAgICAgIFByb2Nlc3NSZWNlaXZlQ2FsbGJhY2soYU1lc3NhZ2UsIG1lc3NhZ2VJbmZvLCBuZXh0SGVhZGVyLCBhRnJvbU5jcEhvc3QpOworICAgIH0KKworICAgIGlmIChmb3J3YXJkKQorICAgIHsKKyAgICAgICAgZm9yd2FyZEludGVyZmFjZUlkID0gRmluZEZvcndhcmRJbnRlcmZhY2VJZChtZXNzYWdlSW5mbyk7CisKKyAgICAgICAgaWYgKGZvcndhcmRJbnRlcmZhY2VJZCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyB0cnkgcGFzc2luZyB0byBob3N0CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc1JlY2VpdmVDYWxsYmFjayhhTWVzc2FnZSwgbWVzc2FnZUluZm8sIG5leHRIZWFkZXIsIGFGcm9tTmNwSG9zdCkpOworCisgICAgICAgICAgICAvLyB0aGUgY2FsbGVyIHRyYW5zZmVycyBjdXN0b2R5IGluIHRoZSBzdWNjZXNzIGNhc2UsIHNvIGZyZWUgdGhlIGFNZXNzYWdlIGhlcmUKKyAgICAgICAgICAgIGFNZXNzYWdlLkZyZWUoKTsKKworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFOZXRpZiAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBoZWFkZXIuU2V0SG9wTGltaXQoaGVhZGVyLkdldEhvcExpbWl0KCkgLSAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoZWFkZXIuR2V0SG9wTGltaXQoKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBzZW5kIHRpbWUgZXhjZWVkZWQKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGhvcExpbWl0ID0gaGVhZGVyLkdldEhvcExpbWl0KCk7CisgICAgICAgICAgICBhTWVzc2FnZS5Xcml0ZShIZWFkZXI6OkdldEhvcExpbWl0T2Zmc2V0KCksIEhlYWRlcjo6R2V0SG9wTGltaXRTaXplKCksICZob3BMaW1pdCk7CisKKyAgICAgICAgICAgIC8vIHN1Ym1pdCBhTWVzc2FnZSB0byBpbnRlcmZhY2UKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgoYU5ldGlmID0gR2V0TmV0aWZCeUlkKGZvcndhcmRJbnRlcmZhY2VJZCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEUpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFOZXRpZi0+U2VuZE1lc3NhZ2UoYU1lc3NhZ2UpKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKworICAgIGlmICghdHVubmVsICYmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FIHx8ICFmb3J3YXJkKSkKKyAgICB7CisgICAgICAgIGFNZXNzYWdlLkZyZWUoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2ludDhfdCBJcDY6OkZpbmRGb3J3YXJkSW50ZXJmYWNlSWQoY29uc3QgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBpbnQ4X3QgaW50ZXJmYWNlSWQ7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgaWYgKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICAvLyBtdWx0aWNhc3QKKyAgICAgICAgaW50ZXJmYWNlSWQgPSBhTWVzc2FnZUluZm8ubUludGVyZmFjZUlkOworICAgIH0KKyAgICBlbHNlIGlmIChhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc0xpbmtMb2NhbCgpKQorICAgIHsKKyAgICAgICAgLy8gb24tbGluayBsaW5rLWxvY2FsIGFkZHJlc3MKKyAgICAgICAgaW50ZXJmYWNlSWQgPSBhTWVzc2FnZUluZm8ubUludGVyZmFjZUlkOworICAgIH0KKyAgICBlbHNlIGlmICgoaW50ZXJmYWNlSWQgPSBHZXRPbkxpbmtOZXRpZihhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKSkpID4gMCkKKyAgICB7CisgICAgICAgIC8vIG9uLWxpbmsgZ2xvYmFsIGFkZHJlc3MKKyAgICAgICAgOworICAgIH0KKyAgICBlbHNlIGlmICgoaW50ZXJmYWNlSWQgPSBtUm91dGVzLkxvb2t1cChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSwgYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkpKSA+IDApCisgICAgeworICAgICAgICAvLyByb3V0ZQorICAgICAgICA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludGVyZmFjZUlkID0gMDsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisKKyAgICByZXR1cm4gaW50ZXJmYWNlSWQ7Cit9CisKK290RXJyb3IgSXA2OjpBZGROZXRpZihOZXRpZiAmYU5ldGlmKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE5ldGlmICpuZXRpZjsKKworICAgIGlmIChtTmV0aWZMaXN0SGVhZCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgbU5ldGlmTGlzdEhlYWQgPSAmYU5ldGlmOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuZXRpZiA9IG1OZXRpZkxpc3RIZWFkOworCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZXRpZiA9PSAmYU5ldGlmIHx8IG5ldGlmLT5tSW50ZXJmYWNlSWQgPT0gYU5ldGlmLm1JbnRlcmZhY2VJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG5ldGlmLT5tTmV4dCk7CisKKyAgICAgICAgbmV0aWYtPm1OZXh0ID0gJmFOZXRpZjsKKyAgICB9CisKKyAgICBhTmV0aWYubU5leHQgPSBOVUxMOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBJcDY6OlJlbW92ZU5ldGlmKE5ldGlmICZhTmV0aWYpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKworICAgIFZlcmlmeU9yRXhpdChtTmV0aWZMaXN0SGVhZCAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICBpZiAobU5ldGlmTGlzdEhlYWQgPT0gJmFOZXRpZikKKyAgICB7CisgICAgICAgIG1OZXRpZkxpc3RIZWFkID0gYU5ldGlmLm1OZXh0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKE5ldGlmICpuZXRpZiA9IG1OZXRpZkxpc3RIZWFkOyBuZXRpZi0+bU5leHQ7IG5ldGlmID0gbmV0aWYtPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobmV0aWYtPm1OZXh0ICE9ICZhTmV0aWYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5ldGlmLT5tTmV4dCA9IGFOZXRpZi5tTmV4dDsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYU5ldGlmLm1OZXh0ID0gTlVMTDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK05ldGlmICpJcDY6OkdldE5ldGlmQnlJZChpbnQ4X3QgYUludGVyZmFjZUlkKQoreworICAgIE5ldGlmICpuZXRpZjsKKworICAgIGZvciAobmV0aWYgPSBtTmV0aWZMaXN0SGVhZDsgbmV0aWY7IG5ldGlmID0gbmV0aWYtPm1OZXh0KQorICAgIHsKKyAgICAgICAgaWYgKG5ldGlmLT5HZXRJbnRlcmZhY2VJZCgpID09IGFJbnRlcmZhY2VJZCkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBuZXRpZjsKK30KKworYm9vbCBJcDY6OklzVW5pY2FzdEFkZHJlc3MoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisKKyAgICBmb3IgKE5ldGlmICpuZXRpZiA9IG1OZXRpZkxpc3RIZWFkOyBuZXRpZjsgbmV0aWYgPSBuZXRpZi0+bU5leHQpCisgICAgeworICAgICAgICBydmFsID0gbmV0aWYtPklzVW5pY2FzdEFkZHJlc3MoYUFkZHJlc3MpOworCisgICAgICAgIGlmIChydmFsKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK2NvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgKklwNjo6U2VsZWN0U291cmNlQWRkcmVzcyhNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIEFkZHJlc3MgKmRlc3RpbmF0aW9uID0gJmFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpOworICAgIGludCBpbnRlcmZhY2VJZCA9IGFNZXNzYWdlSW5mby5tSW50ZXJmYWNlSWQ7CisgICAgY29uc3QgTmV0aWZVbmljYXN0QWRkcmVzcyAqcnZhbEFkZHIgPSBOVUxMOworICAgIGNvbnN0IEFkZHJlc3MgKmNhbmRpZGF0ZUFkZHI7CisgICAgaW50OF90IGNhbmRpZGF0ZUlkOworICAgIGludDhfdCBydmFsSWZhY2UgPSAwOworICAgIHVpbnQ4X3QgcnZhbFByZWZpeE1hdGNoZWQgPSAwOworICAgIHVpbnQ4X3QgZGVzdGluYXRpb25TY29wZSA9IGRlc3RpbmF0aW9uLT5HZXRTY29wZSgpOworCisgICAgZm9yIChOZXRpZiAqbmV0aWYgPSBHZXROZXRpZkxpc3QoKTsgbmV0aWY7IG5ldGlmID0gbmV0aWYtPm1OZXh0KQorICAgIHsKKyAgICAgICAgY2FuZGlkYXRlSWQgPSBuZXRpZi0+R2V0SW50ZXJmYWNlSWQoKTsKKworICAgICAgICBpZiAoZGVzdGluYXRpb24tPklzTGlua0xvY2FsKCkgfHwgZGVzdGluYXRpb24tPklzTXVsdGljYXN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbnRlcmZhY2VJZCAhPSBjYW5kaWRhdGVJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoY29uc3QgTmV0aWZVbmljYXN0QWRkcmVzcyAqYWRkciA9IG5ldGlmLT5tVW5pY2FzdEFkZHJlc3NlczsgYWRkcjsgYWRkciA9IGFkZHItPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhfdCBvdmVycmlkZVNjb3BlOworICAgICAgICAgICAgdWludDhfdCBjYW5kaWRhdGVQcmVmaXhNYXRjaGVkOworCisgICAgICAgICAgICBjYW5kaWRhdGVBZGRyID0gJmFkZHItPkdldEFkZHJlc3MoKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZVByZWZpeE1hdGNoZWQgPSBkZXN0aW5hdGlvbi0+UHJlZml4TWF0Y2goKmNhbmRpZGF0ZUFkZHIpOworICAgICAgICAgICAgb3ZlcnJpZGVTY29wZSA9IChjYW5kaWRhdGVQcmVmaXhNYXRjaGVkID49IGFkZHItPm1QcmVmaXhMZW5ndGgpID8gYWRkci0+R2V0U2NvcGUoKSA6IGRlc3RpbmF0aW9uU2NvcGU7CisKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGVBZGRyLT5Jc0FueWNhc3RSb3V0aW5nTG9jYXRvcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIERvbid0IHVzZSBhbnljYXN0IGFkZHJlc3MgYXMgc291cmNlIGFkZHJlc3MuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChydmFsQWRkciA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJ1bGUgMDogUHJlZmVyIGFueSBhZGRyZXNzCisgICAgICAgICAgICAgICAgcnZhbEFkZHIgPSBhZGRyOworICAgICAgICAgICAgICAgIHJ2YWxJZmFjZSA9IGNhbmRpZGF0ZUlkOworICAgICAgICAgICAgICAgIHJ2YWxQcmVmaXhNYXRjaGVkID0gY2FuZGlkYXRlUHJlZml4TWF0Y2hlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCpjYW5kaWRhdGVBZGRyID09ICpkZXN0aW5hdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSdWxlIDE6IFByZWZlciBzYW1lIGFkZHJlc3MKKyAgICAgICAgICAgICAgICBydmFsQWRkciA9IGFkZHI7CisgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYWRkci0+R2V0U2NvcGUoKSA8IHJ2YWxBZGRyLT5HZXRTY29wZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJ1bGUgMjogUHJlZmVyIGFwcHJvcHJpYXRlIHNjb3BlCisgICAgICAgICAgICAgICAgaWYgKGFkZHItPkdldFNjb3BlKCkgPj0gb3ZlcnJpZGVTY29wZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJ2YWxBZGRyID0gYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgICAgIHJ2YWxQcmVmaXhNYXRjaGVkID0gY2FuZGlkYXRlUHJlZml4TWF0Y2hlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhZGRyLT5HZXRTY29wZSgpID4gcnZhbEFkZHItPkdldFNjb3BlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHJ2YWxBZGRyLT5HZXRTY29wZSgpIDwgb3ZlcnJpZGVTY29wZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJ2YWxBZGRyID0gYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgICAgIHJ2YWxQcmVmaXhNYXRjaGVkID0gY2FuZGlkYXRlUHJlZml4TWF0Y2hlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChydmFsQWRkci0+R2V0U2NvcGUoKSA9PSBBZGRyZXNzOjprUmVhbG1Mb2NhbFNjb3BlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEFkZGl0aW9uYWwgcnVsZTogUHJlZmVyIGFwcHJvcHJpYXRlIHJlYWxtIGxvY2FsIGFkZHJlc3MKKyAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGVTY29wZSA+IEFkZHJlc3M6OmtSZWFsbUxvY2FsU2NvcGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocnZhbEFkZHItPkdldEFkZHJlc3MoKS5Jc1JvdXRpbmdMb2NhdG9yKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZWZlciBFSUQgaWYgZGVzdGluYXRpb24gaXMgbm90IHJlYWxtIGxvY2FsLgorICAgICAgICAgICAgICAgICAgICAgICAgcnZhbEFkZHIgPSBhZGRyOworICAgICAgICAgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBydmFsUHJlZml4TWF0Y2hlZCA9IGNhbmRpZGF0ZVByZWZpeE1hdGNoZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUFkZHItPklzUm91dGluZ0xvY2F0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZmVyIFJMT0MgaWYgZGVzdGluYXRpb24gaXMgcmVhbG0gbG9jYWwuCisgICAgICAgICAgICAgICAgICAgICAgICBydmFsQWRkciA9IGFkZHI7CisgICAgICAgICAgICAgICAgICAgICAgICBydmFsSWZhY2UgPSBjYW5kaWRhdGVJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ2YWxQcmVmaXhNYXRjaGVkID0gY2FuZGlkYXRlUHJlZml4TWF0Y2hlZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFkZHItPm1QcmVmZXJyZWQgJiYgIXJ2YWxBZGRyLT5tUHJlZmVycmVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJ1bGUgMzogQXZvaWQgZGVwcmVjYXRlZCBhZGRyZXNzZXMKKyAgICAgICAgICAgICAgICBydmFsQWRkciA9IGFkZHI7CisgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgcnZhbFByZWZpeE1hdGNoZWQgPSBjYW5kaWRhdGVQcmVmaXhNYXRjaGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYU1lc3NhZ2VJbmZvLm1JbnRlcmZhY2VJZCAhPSAwICYmIGFNZXNzYWdlSW5mby5tSW50ZXJmYWNlSWQgPT0gY2FuZGlkYXRlSWQgJiYKKyAgICAgICAgICAgICAgICAgICAgIHJ2YWxJZmFjZSAhPSBjYW5kaWRhdGVJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSdWxlIDQ6IFByZWZlciBob21lIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAvLyBSdWxlIDU6IFByZWZlciBvdXRnb2luZyBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICBydmFsQWRkciA9IGFkZHI7CisgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgcnZhbFByZWZpeE1hdGNoZWQgPSBjYW5kaWRhdGVQcmVmaXhNYXRjaGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY2FuZGlkYXRlUHJlZml4TWF0Y2hlZCA+IHJ2YWxQcmVmaXhNYXRjaGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJ1bGUgNjogUHJlZmVyIG1hdGNoaW5nIGxhYmVsCisgICAgICAgICAgICAgICAgLy8gUnVsZSA3OiBQcmVmZXIgcHVibGljIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAvLyBSdWxlIDg6IFVzZSBsb25nZXN0IHByZWZpeCBtYXRjaGluZworICAgICAgICAgICAgICAgIHJ2YWxBZGRyID0gYWRkcjsKKyAgICAgICAgICAgICAgICBydmFsSWZhY2UgPSBjYW5kaWRhdGVJZDsKKyAgICAgICAgICAgICAgICBydmFsUHJlZml4TWF0Y2hlZCA9IGNhbmRpZGF0ZVByZWZpeE1hdGNoZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgYU1lc3NhZ2VJbmZvLm1JbnRlcmZhY2VJZCA9IHJ2YWxJZmFjZTsKKyAgICByZXR1cm4gcnZhbEFkZHI7Cit9CisKK2ludDhfdCBJcDY6OkdldE9uTGlua05ldGlmKGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIGludDhfdCBydmFsID0gLTE7CisKKyAgICBmb3IgKE5ldGlmICpuZXRpZiA9IG1OZXRpZkxpc3RIZWFkOyBuZXRpZjsgbmV0aWYgPSBuZXRpZi0+bU5leHQpCisgICAgeworICAgICAgICBmb3IgKGNvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgKmN1ciA9IG5ldGlmLT5tVW5pY2FzdEFkZHJlc3NlczsgY3VyOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGN1ci0+R2V0QWRkcmVzcygpLlByZWZpeE1hdGNoKGFBZGRyZXNzKSA+PSBjdXItPm1QcmVmaXhMZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gbmV0aWYtPkdldEludGVyZmFjZUlkKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitvdEluc3RhbmNlICpJcDY6OkdldEluc3RhbmNlKHZvaWQpCit7CisgICAgcmV0dXJuIG90SW5zdGFuY2VGcm9tSXA2KHRoaXMpOworfQorCitJcDYgJklwNjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgSXA2ICZpcDYgPSAqc3RhdGljX2Nhc3Q8SXA2ICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIElwNiAmaXA2ID0gb3RHZXRJcDYoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGlwNjsKK30KKworY29uc3QgY2hhciAqSXA2OjpJcFByb3RvVG9TdHJpbmcoSXBQcm90byBhSXBQcm90bykKK3sKKyAgICBjb25zdCBjaGFyICpyZXR2YWw7CisKKyAgICBzd2l0Y2ggKGFJcFByb3RvKQorICAgIHsKKyAgICBjYXNlIGtQcm90b0hvcE9wdHM6CisgICAgICAgIHJldHZhbCA9ICJIb3BPcHRzIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b1RjcDoKKyAgICAgICAgcmV0dmFsID0gIlRDUCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrUHJvdG9VZHA6CisgICAgICAgIHJldHZhbCA9ICJVRFAiOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga1Byb3RvSXA2OgorICAgICAgICByZXR2YWwgPSAiSVA2IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b1JvdXRpbmc6CisgICAgICAgIHJldHZhbCA9ICJSb3V0aW5nIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b0ZyYWdtZW50OgorICAgICAgICByZXR2YWwgPSAiRnJhZyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrUHJvdG9JY21wNjoKKyAgICAgICAgcmV0dmFsID0gIklDTVA2IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b05vbmU6CisgICAgICAgIHJldHZhbCA9ICJOb25lIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b0RzdE9wdHM6CisgICAgICAgIHJldHZhbCA9ICJEc3RPcHRzIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR2YWwgPSAiVW5rbm93biI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNi5ocHAgYi9zcmMvY29yZS9uZXQvaXA2LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDJhMTZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L2lwNi5ocHAKQEAgLTAsMCArMSw0MjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBJUHY2IHBhY2tldCBwcm9jZXNzaW5nLgorICovCisKKyNpZm5kZWYgSVA2X0hQUF8KKyNkZWZpbmUgSVA2X0hQUF8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9pcDYuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3VkcC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAibmV0L2ljbXA2LmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfaGVhZGVycy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9tcGwuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfcm91dGVzLmhwcCIKKyNpbmNsdWRlICJuZXQvbmV0aWYuaHBwIgorI2luY2x1ZGUgIm5ldC9zb2NrZXQuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7Cit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAzMjsKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAbmFtZXNwYWNlIG90OjpJcDYKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBuYW1lc3BhY2UgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElQdjYgbmV0d29ya2luZy4KKyAqCisgKi8KK25hbWVzcGFjZSBJcDYgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtaXB2NgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIElQdjYgbmV0d29yayBsYXllci4KKyAqCisgKiBAeworICoKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1pY21wNiBJQ01QdjYKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1pcDYgSVB2NgorICogQGRlZmdyb3VwIGNvcmUtaXA2LW1wbCBNUEwKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1uZXRpZiBOZXR3b3JrIEludGVyZmFjZXMKKyAqCisgKiBAfQorICoKKyAqLworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtaXA2LWlwNgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgY29yZSBJUHY2IG5ldHdvcmtpbmcuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGNvcmUgSVB2NiBtZXNzYWdlIHByb2Nlc3NpbmcuCisgKgorICovCitjbGFzcyBJcDYKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrRGVmYXVsdEhvcExpbWl0ID0gNjQsCisgICAgICAgIGtNYXhEYXRhZ3JhbUxlbmd0aCA9IDEyODAsCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFsbG9jYXRlcyBhIG5ldyBtZXNzYWdlIGJ1ZmZlciBmcm9tIHRoZSBidWZmZXIgcG9vbC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXNlcnZlZCAgVGhlIG51bWJlciBvZiBoZWFkZXIgYnl0ZXMgdG8gcmVzZXJ2ZSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIG9yIE5VTEwgaWYgaW5zdWZmaWNpZW50IG1lc3NhZ2UgYnVmZmVycyBhcmUgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqTmV3TWVzc2FnZSh1aW50MTZfdCBhUmVzZXJ2ZWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqLworICAgIElwNih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGFuIElQdjYgZGF0YWdyYW0uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUlwUHJvdG8gICAgICBUaGUgSW50ZXJuZXQgUHJvdG9jb2wgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBlbnF1ZXVlZCB0aGUgbWVzc2FnZSBpbnRvIGFuIG91dHB1dCBpbnRlcmZhY2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlciB0byBhZGQgdGhlIElQdjYgaGVhZGVycy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZERhdGFncmFtKE1lc3NhZ2UgJmFNZXNzYWdlLCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCBJcFByb3RvIGFJcFByb3RvKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgcmF3IElQdjYgZGF0YWdyYW0gd2l0aCBhIGZ1bGx5IGZvcm1lZCBJUHY2IGhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnRlcmZhY2VJZCAgICAgIFRoZSBpbnRlcmZhY2UgaWRlbnRpZmllciBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhhdCByZWNlaXZlZCB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgdGhlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9EUk9QICAgTWVzc2FnZSBwcm9jZXNzaW5nIGZhaWxlZCBhbmQgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRyb3BwZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmRSYXcoTWVzc2FnZSAmYU1lc3NhZ2UsIGludDhfdCBhSW50ZXJmYWNlSWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcHJvY2Vzc2VzIGEgcmVjZWl2ZWQgSVB2NiBkYXRhZ3JhbS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhhdCByZWNlaXZlZCB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhSW50ZXJmYWNlSWQgICAgICBUaGUgaW50ZXJmYWNlIGlkZW50aWZpZXIgb2YgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRoYXQgcmVjZWl2ZWQgdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUxpbmtNZXNzYWdlSW5mbyAgQSBwb2ludGVyIHRvIGxpbmstc3BlY2lmaWMgbWVzc2FnZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhRnJvbU5jcEhvc3QgICAgICBUUlVFIGlmIHRoZSBtZXNzYWdlIHdhcyBzdWJtaXR0ZWQgYnkgdGhlIE5DUCBob3N0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIHRoZSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfRFJPUCAgIE1lc3NhZ2UgcHJvY2Vzc2luZyBmYWlsZWQgYW5kIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBkcm9wcGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBIYW5kbGVEYXRhZ3JhbShNZXNzYWdlICZhTWVzc2FnZSwgTmV0aWYgKmFOZXRpZiwgaW50OF90IGFJbnRlcmZhY2VJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmFMaW5rTWVzc2FnZUluZm8sIGJvb2wgYUZyb21OY3BIb3N0KTsKKworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2RzIGFkZHMgYSBmdWxsIElQdjYgcGFja2V0IHRvIHRoZSB0cmFuc21pdCBxdWV1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhTWVzc2FnZSBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKi8KKyAgICB2b2lkIEVucXVldWVEYXRhZ3JhbShNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgdXBkYXRlcyBhIGNoZWNrc3VtLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoZWNrc3VtICBUaGUgY2hlY2tzdW0gdmFsdWUgdG8gdXBkYXRlLgorICAgICAqIEBwYXJhbVtpbl0gIGFWYWx1ZSAgICAgVGhlIDE2LWJpdCB2YWx1ZSB0byB1cGRhdGUgQHAgYUNoZWNrc3VtIHdpdGguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBjaGVja3N1bS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MTZfdCBVcGRhdGVDaGVja3N1bSh1aW50MTZfdCBhQ2hlY2tzdW0sIHVpbnQxNl90IGFWYWx1ZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgdXBkYXRlcyBhIGNoZWNrc3VtLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoZWNrc3VtICBUaGUgY2hlY2tzdW0gdmFsdWUgdG8gdXBkYXRlLgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgQSBwb2ludGVyIHRvIGEgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgVGhlIG51bWJlciBvZiBieXRlcyBpbiBAcCBhQnVmLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgY2hlY2tzdW0uCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDE2X3QgVXBkYXRlQ2hlY2tzdW0odWludDE2X3QgYUNoZWNrc3VtLCBjb25zdCB2b2lkICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCB1cGRhdGVzIGEgY2hlY2tzdW0uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hlY2tzdW0gIFRoZSBjaGVja3N1bSB2YWx1ZSB0byB1cGRhdGUuCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICBBIHJlZmVyZW5jZSB0byBhbiBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBjaGVja3N1bS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MTZfdCBVcGRhdGVDaGVja3N1bSh1aW50MTZfdCBhQ2hlY2tzdW0sIGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCBjb21wdXRlcyB0aGUgcHNldWRvaGVhZGVyIGNoZWNrc3VtLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNvdXJjZSAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBzb3VyY2UgYWRkcmVzcy4KKyAgICAgKiBAcGFyYW1baW5dICBhRGVzdGluYXRpb24gIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICAgICBUaGUgSVB2NiBQYXlsb2FkIExlbmd0aCB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICBhUHJvdG8gICAgICAgIFRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHBzZXVkb2hlYWRlciBjaGVja3N1bS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MTZfdCBDb21wdXRlUHNldWRvaGVhZGVyQ2hlY2tzdW0oY29uc3QgQWRkcmVzcyAmYVNvdXJjZSwgY29uc3QgQWRkcmVzcyAmYURlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUxlbmd0aCwgSXBQcm90byBhUHJvdG8pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gcHJvdmlkZSByZWNlaXZlZCByYXcgSVB2NiBkYXRhZ3JhbXMuCisgICAgICoKKyAgICAgKiBCeSBkZWZhdWx0LCB0aGlzIGNhbGxiYWNrIGRvZXMgbm90IHBhc3MgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYy4gIFNlZSBTZXRSZWNlaXZlSXA2RmlsdGVyRW5hYmxlZCgpIHRvIGNoYW5nZQorICAgICAqIHRoZSBUaHJlYWQgY29udHJvbCB0cmFmZmljIGZpbHRlciBzZXR0aW5nLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgICAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiBhbiBJUHY2IGRhdGFncmFtIGlzIHJlY2VpdmVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgTlVMTCB0byBkaXNhYmxlIHRoZSBjYWxsYmFjay4KKyAgICAgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2tDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAgICAgKgorICAgICAqIEBzYSBJc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkCisgICAgICogQHNhIFNldFJlY2VpdmVJcDZGaWx0ZXJFbmFibGVkCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJlY2VpdmVEYXRhZ3JhbUNhbGxiYWNrKG90SXA2UmVjZWl2ZUNhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYyBpcyBmaWx0ZXJlZCBvdXQgd2hlbiBkZWxpdmVyaW5nIElQdjYgZGF0YWdyYW1zCisgICAgICogdmlhIHRoZSBjYWxsYmFjayBzcGVjaWZpZWQgaW4gU2V0UmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2soKS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBUUlVFIGlmIFRocmVhZCBjb250cm9sIHRyYWZmaWMgaXMgZmlsdGVyZWQgb3V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKiBAc2EgU2V0UmVjZWl2ZURhdGFncmFtQ2FsbGJhY2sKKyAgICAgKiBAc2EgU2V0UmVjZWl2ZUlwNkZpbHRlckVuYWJsZWQKKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNSZWNlaXZlSXA2RmlsdGVyRW5hYmxlZCh2b2lkKSB7IHJldHVybiBtSXNSZWNlaXZlSXA2RmlsdGVyRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB3aGV0aGVyIG9yIG5vdCBUaHJlYWQgY29udHJvbCB0cmFmZmljIGlzIGZpbHRlcmVkIG91dCB3aGVuIGRlbGl2ZXJpbmcgSVB2NiBkYXRhZ3JhbXMKKyAgICAgKiB2aWEgdGhlIGNhbGxiYWNrIHNwZWNpZmllZCBpbiBTZXRSZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjaygpLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVuYWJsZWQgIFRSVUUgaWYgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYyBpcyBmaWx0ZXJlZCBvdXQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIEBzYSBTZXRSZWNlaXZlRGF0YWdyYW1DYWxsYmFjaworICAgICAqIEBzYSBJc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJlY2VpdmVJcDZGaWx0ZXJFbmFibGVkKGJvb2wgYUVuYWJsZWQpIHsgbUlzUmVjZWl2ZUlwNkZpbHRlckVuYWJsZWQgPSBhRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IElQdjYgZm9yd2FyZGluZyBpcyBlbmFibGVkLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiBJUHY2IGZvcndhcmRpbmcgaXMgZW5hYmxlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0ZvcndhcmRpbmdFbmFibGVkKHZvaWQpIHsgcmV0dXJuIG1Gb3J3YXJkaW5nRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5hYmxlcy9kaXNhYmxlcyBJUHY2IGZvcndhcmRpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRW5hYmxlICBUUlVFIHRvIGVuYWJsZSBJUHY2IGZvcndhcmRpbmcsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Rm9yd2FyZGluZ0VuYWJsZWQoYm9vbCBhRW5hYmxlKSB7IG1Gb3J3YXJkaW5nRW5hYmxlZCA9IGFFbmFibGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtICBhTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVuYWJsZWQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIG5ldHdvcmsgaW50ZXJmYWNlIHdhcyBhbHJlYWR5IGVuYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFkZE5ldGlmKE5ldGlmICZhTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGlzYWJsZXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtICBhTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgZGlzYWJsZWQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGUgbmV0d29yayBpbnRlcmZhY2Ugd2FzIGFscmVhZHkgZGlzYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZU5ldGlmKE5ldGlmICZhTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbmV0d29yayBpbnRlcmZhY2UgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIE5ldGlmICpHZXROZXRpZkxpc3Qodm9pZCkgeyByZXR1cm4gbU5ldGlmTGlzdEhlYWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlkZW50aWZpZWQgYnkgQHAgYUludGVyZmFjZUlkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUludGVyZmFjZUlkICBUaGUgbmV0d29yayBpbnRlcmZhY2UgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9yIE5VTEwgaWYgbm9uZSBpcyBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIE5ldGlmICpHZXROZXRpZkJ5SWQoaW50OF90IGFJbnRlcmZhY2VJZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgQHAgYUFkZHJlc3MgaXMgYXNzaWduZWQgdG8gYSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBhc3NpZ25lZCB0byBhIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IGFzc2lnbmVkIHRvIGFueSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNVbmljYXN0QWRkcmVzcyhjb25zdCBBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwZXJmb3JtIGRlZmF1bHQgc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgc2VsZWN0ZWQgSVB2NiBzb3VyY2UgYWRkcmVzcyBvciBOVUxMIGlmIG5vIHNvdXJjZSBhZGRyZXNzIHdhcyBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgKlNlbGVjdFNvdXJjZUFkZHJlc3MoTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIG5ldHdvcmsgaW50ZXJmYWNlIEBwIGFBZGRyZXNzIGlzIG9uLWxpbmssIGlmIGFueS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlkZW50aWZpZXIgZm9yIHRoZSBvbi1saW5rIGludGVyZmFjZSBvciAtMSBpZiBub25lIGlzIGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldE9uTGlua05ldGlmKGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHNlbmQgcXVldWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgc2VuZCBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IFByaW9yaXR5UXVldWUgJkdldFNlbmRRdWV1ZSh2b2lkKSBjb25zdCB7IHJldHVybiBtU2VuZFF1ZXVlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgY29udmVydHMgYW4gYElwUHJvdG9gIGVudW1lcmF0aW9uIHRvIGEgc3RyaW5nLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBJUCBwcm90b2NvbCBlbnVtZXJhdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBjb25zdCBjaGFyICpJcFByb3RvVG9TdHJpbmcoSXBQcm90byBhSXBQcm90byk7CisKKyAgICBSb3V0ZXMgbVJvdXRlczsKKyAgICBJY21wIG1JY21wOworICAgIFVkcCBtVWRwOworICAgIE1wbCBtTXBsOworCisgICAgTWVzc2FnZVBvb2wgbU1lc3NhZ2VQb29sOworICAgIFRhc2tsZXRTY2hlZHVsZXIgbVRhc2tsZXRTY2hlZHVsZXI7CisgICAgVGltZXJTY2hlZHVsZXIgbVRpbWVyU2NoZWR1bGVyOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIEhhbmRsZVNlbmRRdWV1ZShUYXNrbGV0ICZhVGFza2xldCk7CisgICAgdm9pZCBIYW5kbGVTZW5kUXVldWUodm9pZCk7CisKKyAgICBvdEVycm9yIFByb2Nlc3NSZWNlaXZlQ2FsbGJhY2soY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIHVpbnQ4X3QgYUlwUHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZyb21OY3BIb3N0KTsKKyAgICBvdEVycm9yIEhhbmRsZUV4dGVuc2lvbkhlYWRlcnMoTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUhlYWRlciwgdWludDhfdCAmYU5leHRIZWFkZXIsIGJvb2wgYUZvcndhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVJlY2VpdmUpOworICAgIG90RXJyb3IgSGFuZGxlRnJhZ21lbnQoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgQWRkTXBsT3B0aW9uKE1lc3NhZ2UgJmFNZXNzYWdlLCBIZWFkZXIgJmFIZWFkZXIpOworICAgIG90RXJyb3IgQWRkVHVubmVsZWRNcGxPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUhlYWRlciwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBJbnNlcnRNcGxPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUhlYWRlciwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBSZW1vdmVNcGxPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgSGFuZGxlT3B0aW9ucyhNZXNzYWdlICZhTWVzc2FnZSwgSGVhZGVyICZhSGVhZGVyLCBib29sICZhRm9yd2FyZCk7CisgICAgb3RFcnJvciBIYW5kbGVQYXlsb2FkKE1lc3NhZ2UgJmFNZXNzYWdlLCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCB1aW50OF90IGFJcFByb3RvKTsKKyAgICBpbnQ4X3QgRmluZEZvcndhcmRJbnRlcmZhY2VJZChjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyBJcDYgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIGJvb2wgbUZvcndhcmRpbmdFbmFibGVkOworCisgICAgUHJpb3JpdHlRdWV1ZSBtU2VuZFF1ZXVlOworICAgIFRhc2tsZXQgbVNlbmRRdWV1ZVRhc2s7CisKKyAgICBvdElwNlJlY2VpdmVDYWxsYmFjayBtUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2s7CisgICAgdm9pZCAqbVJlY2VpdmVJcDZEYXRhZ3JhbUNhbGxiYWNrQ29udGV4dDsKKyAgICBib29sIG1Jc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkOworCisgICAgTmV0aWYgKm1OZXRpZkxpc3RIZWFkOworfTsKKworc3RhdGljIGlubGluZSBJcDYgKklwNkZyb21UYXNrbGV0U2NoZWR1bGVyKFRhc2tsZXRTY2hlZHVsZXIgKmFUYXNrbGV0U2NoZWR1bGVyKQoreworICAgIHJldHVybiAoSXA2ICopQ09OVEFJTklOR19SRUNPUkQoYVRhc2tsZXRTY2hlZHVsZXIsIElwNiwgbVRhc2tsZXRTY2hlZHVsZXIpOworfQorCitzdGF0aWMgaW5saW5lIElwNiAqSXA2RnJvbVRpbWVyU2NoZWR1bGVyKFRpbWVyU2NoZWR1bGVyICphVGltZXJTY2hlZHVsZXIpCit7CisgICAgcmV0dXJuIChJcDYgKilDT05UQUlOSU5HX1JFQ09SRChhVGltZXJTY2hlZHVsZXIsIElwNiwgbVRpbWVyU2NoZWR1bGVyKTsKK30KKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRfSVA2X0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9pcDZfYWRkcmVzcy5jcHAgYi9zcmMvY29yZS9uZXQvaXA2X2FkZHJlc3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2Mzg4OWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2X2FkZHJlc3MuY3BwCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIElQdjYgYWRkcmVzc2VzLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiaXA2X2FkZHJlc3MuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzI7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworYm9vbCBBZGRyZXNzOjpJc1Vuc3BlY2lmaWVkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRmllbGRzLm0zMlswXSA9PSAwICYmIG1GaWVsZHMubTMyWzFdID09IDAgJiYgbUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSAwKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc0xvb3BiYWNrKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRmllbGRzLm0zMlswXSA9PSAwICYmIG1GaWVsZHMubTMyWzFdID09IDAgJiYgbUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSBIb3N0U3dhcDMyKDEpKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc0xpbmtMb2NhbCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiAobUZpZWxkcy5tOFswXSA9PSAweGZlKSAmJiAoKG1GaWVsZHMubThbMV0gJiAweGMwKSA9PSAweDgwKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc011bHRpY2FzdCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtRmllbGRzLm04WzBdID09IDB4ZmY7Cit9CisKK2Jvb2wgQWRkcmVzczo6SXNMaW5rTG9jYWxNdWx0aWNhc3Qodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNNdWx0aWNhc3QoKSAmJiAoR2V0U2NvcGUoKSA9PSBrTGlua0xvY2FsU2NvcGUpOworfQorCitib29sIEFkZHJlc3M6OklzTGlua0xvY2FsQWxsTm9kZXNNdWx0aWNhc3Qodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1GaWVsZHMubTMyWzBdID09IEhvc3RTd2FwMzIoMHhmZjAyMDAwMCkgJiYgbUZpZWxkcy5tMzJbMV0gPT0gMCAmJgorICAgICAgICAgICAgbUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSBIb3N0U3dhcDMyKDB4MDEpKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc0xpbmtMb2NhbEFsbFJvdXRlcnNNdWx0aWNhc3Qodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1GaWVsZHMubTMyWzBdID09IEhvc3RTd2FwMzIoMHhmZjAyMDAwMCkgJiYgbUZpZWxkcy5tMzJbMV0gPT0gMCAmJgorICAgICAgICAgICAgbUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSBIb3N0U3dhcDMyKDB4MDIpKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc1JlYWxtTG9jYWxNdWx0aWNhc3Qodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNNdWx0aWNhc3QoKSAmJiAoR2V0U2NvcGUoKSA9PSBrUmVhbG1Mb2NhbFNjb3BlKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc1JlYWxtTG9jYWxBbGxOb2Rlc011bHRpY2FzdCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiAobUZpZWxkcy5tMzJbMF0gPT0gSG9zdFN3YXAzMigweGZmMDMwMDAwKSAmJiBtRmllbGRzLm0zMlsxXSA9PSAwICYmCisgICAgICAgICAgICBtRmllbGRzLm0zMlsyXSA9PSAwICYmIG1GaWVsZHMubTMyWzNdID09IEhvc3RTd2FwMzIoMHgwMSkpOworfQorCitib29sIEFkZHJlc3M6OklzUmVhbG1Mb2NhbEFsbFJvdXRlcnNNdWx0aWNhc3Qodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1GaWVsZHMubTMyWzBdID09IEhvc3RTd2FwMzIoMHhmZjAzMDAwMCkgJiYgbUZpZWxkcy5tMzJbMV0gPT0gMCAmJgorICAgICAgICAgICAgbUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSBIb3N0U3dhcDMyKDB4MDIpKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc1JlYWxtTG9jYWxBbGxNcGxGb3J3YXJkZXJzKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRmllbGRzLm0zMlswXSA9PSBIb3N0U3dhcDMyKDB4ZmYwMzAwMDApICYmIG1GaWVsZHMubTMyWzFdID09IDAgJiYKKyAgICAgICAgICAgIG1GaWVsZHMubTMyWzJdID09IDAgJiYgbUZpZWxkcy5tMzJbM10gPT0gSG9zdFN3YXAzMigweGZjKSk7Cit9CisKK2Jvb2wgQWRkcmVzczo6SXNSb3V0aW5nTG9jYXRvcih2b2lkKSBjb25zdAoreworICAgIHJldHVybiAobUZpZWxkcy5tMTZbNF0gPT0gSG9zdFN3YXAxNigweDAwMDApICYmIG1GaWVsZHMubTE2WzVdID09IEhvc3RTd2FwMTYoMHgwMGZmKSAmJgorICAgICAgICAgICAgbUZpZWxkcy5tMTZbNl0gPT0gSG9zdFN3YXAxNigweGZlMDApICYmIG1GaWVsZHMubThbMTRdIDwga0Fsb2MxNk1hc2sgJiYKKyAgICAgICAgICAgIChtRmllbGRzLm04WzE0XSAmIGtSbG9jMTZSZXNlcnZlZEJpdE1hc2spID09IDApOworfQorCitib29sIEFkZHJlc3M6OklzQW55Y2FzdFJvdXRpbmdMb2NhdG9yKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRmllbGRzLm0xNls0XSA9PSBIb3N0U3dhcDE2KDB4MDAwMCkgJiYgbUZpZWxkcy5tMTZbNV0gPT0gSG9zdFN3YXAxNigweDAwZmYpICYmCisgICAgICAgICAgICBtRmllbGRzLm0xNls2XSA9PSBIb3N0U3dhcDE2KDB4ZmUwMCkgJiYgbUZpZWxkcy5tOFsxNF0gPT0ga0Fsb2MxNk1hc2spOworfQorCitib29sIEFkZHJlc3M6OklzU3VibmV0Um91dGVyQW55Y2FzdCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiAobUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSAwKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc1Jlc2VydmVkU3VibmV0QW55Y2FzdCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiAobUZpZWxkcy5tMzJbMl0gPT0gSG9zdFN3YXAzMigweGZkZmZmZmZmKSAmJiBtRmllbGRzLm0xNls2XSA9PSAweGZmZmYgJiYgbUZpZWxkcy5tOFsxNF0gPT0gMHhmZiAmJgorICAgICAgICAgICAgbUZpZWxkcy5tOFsxNV0gPj0gMHg4MCk7Cit9CisKK2Jvb2wgQWRkcmVzczo6SXNJaWRSZXNlcnZlZCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBJc1N1Ym5ldFJvdXRlckFueWNhc3QoKSB8fCBJc1Jlc2VydmVkU3VibmV0QW55Y2FzdCgpIHx8IElzQW55Y2FzdFJvdXRpbmdMb2NhdG9yKCk7Cit9CisKKworY29uc3QgdWludDhfdCAqQWRkcmVzczo6R2V0SWlkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaWVsZHMubTggKyBrSW50ZXJmYWNlSWRlbnRpZmllck9mZnNldDsKK30KKwordWludDhfdCAqQWRkcmVzczo6R2V0SWlkKHZvaWQpCit7CisgICAgcmV0dXJuIG1GaWVsZHMubTggKyBrSW50ZXJmYWNlSWRlbnRpZmllck9mZnNldDsKK30KKwordm9pZCBBZGRyZXNzOjpTZXRJaWQoY29uc3QgdWludDhfdCAqYUlpZCkKK3sKKyAgICBtZW1jcHkobUZpZWxkcy5tOCArIGtJbnRlcmZhY2VJZGVudGlmaWVyT2Zmc2V0LCBhSWlkLCBrSW50ZXJmYWNlSWRlbnRpZmllclNpemUpOworfQorCit2b2lkIEFkZHJlc3M6OlNldElpZChjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFFdWk2NCkKK3sKKyAgICBtZW1jcHkobUZpZWxkcy5tOCArIGtJbnRlcmZhY2VJZGVudGlmaWVyT2Zmc2V0LCBhRXVpNjQubTgsIGtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZSk7CisgICAgbUZpZWxkcy5tOFtrSW50ZXJmYWNlSWRlbnRpZmllck9mZnNldF0gXj0gMHgwMjsKK30KKwordWludDhfdCBBZGRyZXNzOjpHZXRTY29wZSh2b2lkKSBjb25zdAoreworICAgIGlmIChJc011bHRpY2FzdCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1GaWVsZHMubThbMV0gJiAweGY7CisgICAgfQorICAgIGVsc2UgaWYgKElzTGlua0xvY2FsKCkpCisgICAgeworICAgICAgICByZXR1cm4ga0xpbmtMb2NhbFNjb3BlOworICAgIH0KKyAgICBlbHNlIGlmIChJc0xvb3BiYWNrKCkpCisgICAgeworICAgICAgICByZXR1cm4ga05vZGVMb2NhbFNjb3BlOworICAgIH0KKworICAgIHJldHVybiBrR2xvYmFsU2NvcGU7Cit9CisKK3VpbnQ4X3QgQWRkcmVzczo6UHJlZml4TWF0Y2goY29uc3QgdWludDhfdCAqYVByZWZpeEEsIGNvbnN0IHVpbnQ4X3QgKmFQcmVmaXhCLCB1aW50OF90IGFNYXhMZW5ndGgpCit7CisgICAgdWludDhfdCBydmFsID0gMDsKKyAgICB1aW50OF90IGRpZmY7CisKKyAgICBpZiAoYU1heExlbmd0aCA+IHNpemVvZihBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIGFNYXhMZW5ndGggPSBzaXplb2YoQWRkcmVzcyk7CisgICAgfQorCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYU1heExlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgZGlmZiA9IGFQcmVmaXhBW2ldIF4gYVByZWZpeEJbaV07CisKKyAgICAgICAgaWYgKGRpZmYgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcnZhbCArPSA4OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKChkaWZmICYgMHg4MCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBydmFsKys7CisgICAgICAgICAgICAgICAgZGlmZiA8PD0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKwordWludDhfdCBBZGRyZXNzOjpQcmVmaXhNYXRjaChjb25zdCBBZGRyZXNzICZhT3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIFByZWZpeE1hdGNoKG1GaWVsZHMubTgsIGFPdGhlci5tRmllbGRzLm04LCBzaXplb2YoQWRkcmVzcykpOworfQorCitib29sIEFkZHJlc3M6Om9wZXJhdG9yPT0oY29uc3QgQWRkcmVzcyAmYU90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtZW1jbXAobUZpZWxkcy5tOCwgYU90aGVyLm1GaWVsZHMubTgsIHNpemVvZihtRmllbGRzLm04KSkgPT0gMDsKK30KKworYm9vbCBBZGRyZXNzOjpvcGVyYXRvciE9KGNvbnN0IEFkZHJlc3MgJmFPdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbWVtY21wKG1GaWVsZHMubTgsIGFPdGhlci5tRmllbGRzLm04LCBzaXplb2YobUZpZWxkcy5tOCkpICE9IDA7Cit9CisKK290RXJyb3IgQWRkcmVzczo6RnJvbVN0cmluZyhjb25zdCBjaGFyICphQnVmKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihtRmllbGRzLm04KTsKKyAgICB1aW50OF90ICplbmRwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KG1GaWVsZHMubTggKyAxNSk7CisgICAgdWludDhfdCAqY29sb25wID0gTlVMTDsKKyAgICB1aW50MTZfdCB2YWwgPSAwOworICAgIHVpbnQ4X3QgY291bnQgPSAwOworICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgIGNoYXIgY2g7CisgICAgdWludDhfdCBkOworCisgICAgbWVtc2V0KG1GaWVsZHMubTgsIDAsIDE2KTsKKworICAgIGRzdC0tOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGNoID0gKmFCdWYrKzsKKyAgICAgICAgZCA9IGNoICYgMHhmOworCisgICAgICAgIGlmICgoJ2EnIDw9IGNoICYmIGNoIDw9ICdmJykgfHwgKCdBJyA8PSBjaCAmJiBjaCA8PSAnRicpKQorICAgICAgICB7CisgICAgICAgICAgICBkICs9IDk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2ggPT0gJzonIHx8IGNoID09ICdcMCcgfHwgY2ggPT0gJyAnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY291bnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGRzdCArIDIgPD0gZW5kcCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAgICAgKihkc3QgKyAxKSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCA+PiA4KTsKKyAgICAgICAgICAgICAgICAqKGRzdCArIDIpID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICAgICAgICAgICAgICBkc3QgKz0gMjsKKyAgICAgICAgICAgICAgICBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgdmFsID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICc6JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoY29sb25wID09IE5VTEwgfHwgZmlyc3QsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgICAgIGNvbG9ucCA9IGRzdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoID09ICdcMCcgfHwgY2ggPT0gJyAnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgnMCcgPD0gY2ggJiYgY2ggPD0gJzknLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIHZhbCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigodmFsIDw8IDQpIHwgZCk7CisgICAgICAgIFZlcmlmeU9yRXhpdCgrK2NvdW50IDw9IDQsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworICAgIHdoaWxlIChjb2xvbnAgJiYgZHN0ID4gY29sb25wKQorICAgIHsKKyAgICAgICAgKmVuZHAtLSA9ICpkc3QtLTsKKyAgICB9CisKKyAgICB3aGlsZSAoZW5kcCA+IGRzdCkKKyAgICB7CisgICAgICAgICplbmRwLS0gPSAwOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2NvbnN0IGNoYXIgKkFkZHJlc3M6OlRvU3RyaW5nKGNoYXIgKmFCdWYsIHVpbnQxNl90IGFTaXplKSBjb25zdAoreworICAgIHNucHJpbnRmKGFCdWYsIGFTaXplLCAiJXg6JXg6JXg6JXg6JXg6JXg6JXg6JXgiLAorICAgICAgICAgICAgIEhvc3RTd2FwMTYobUZpZWxkcy5tMTZbMF0pLCBIb3N0U3dhcDE2KG1GaWVsZHMubTE2WzFdKSwKKyAgICAgICAgICAgICBIb3N0U3dhcDE2KG1GaWVsZHMubTE2WzJdKSwgSG9zdFN3YXAxNihtRmllbGRzLm0xNlszXSksCisgICAgICAgICAgICAgSG9zdFN3YXAxNihtRmllbGRzLm0xNls0XSksIEhvc3RTd2FwMTYobUZpZWxkcy5tMTZbNV0pLAorICAgICAgICAgICAgIEhvc3RTd2FwMTYobUZpZWxkcy5tMTZbNl0pLCBIb3N0U3dhcDE2KG1GaWVsZHMubTE2WzddKSk7CisKKyAgICByZXR1cm4gYUJ1ZjsKK30KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvaXA2X2FkZHJlc3MuaHBwIGIvc3JjL2NvcmUvbmV0L2lwNl9hZGRyZXNzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg4YWE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L2lwNl9hZGRyZXNzLmhwcApAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElQdjYgYWRkcmVzc2VzLgorICovCisKKyNpZm5kZWYgSVA2X0FERFJFU1NfSFBQXworI2RlZmluZSBJUDZfQUREUkVTU19IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWlwNi1pcDYKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbiBJUHY2IGFkZHJlc3Mgb2JqZWN0LgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEFkZHJlc3M6IHB1YmxpYyBvdElwNkFkZHJlc3MKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBNYXNrcworICAgICAqCisgICAgICovCisgICAgZW51bQorICAgIHsKKyAgICAgICAga0Fsb2MxNk1hc2sgICAgICAgICAgICAgICAgID0gMHhmYywgLy8vPCBUaGUgbWFzayBmb3IgQWxvYzE2LgorICAgICAgICBrUmxvYzE2UmVzZXJ2ZWRCaXRNYXNrICAgICAgPSAweDAyLCAvLy88IFRoZSBtYXNrIGZvciB0aGUgcmVzZXJ2ZWQgYml0IG9mIFJsb2MxNi4KKyAgICB9OworCisgICAgLyoqCisgICAgICogQ29uc3RhbnRzCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtCisgICAgeworICAgICAgICBrSW50ZXJmYWNlSWRlbnRpZmllclNpemUgICA9IDgsICAvLy88IEludGVyZmFjZSBJZGVudGlmaWVyIHNpemUgaW4gYnl0ZXMuCisgICAgICAgIGtJcDZBZGRyZXNzU3RyaW5nU2l6ZSAgICAgID0gNDAsIC8vLzwgTWF4IGJ1ZmZlciBzaXplIGluIGJ5dGVzIHRvIHN0b3JlIGFuIElQdjYgYWRkcmVzcyBpbiBzdHJpbmcgZm9ybWF0LgorICAgICAgICBrTWVzaExvY2FsUHJlZml4TGVuZ3RoICAgICA9IDY0LCAvLy88IExlbmd0aCBvZiBUaHJlYWQgbWVzaCBsb2NhbCBwcmVmaXguCisgICAgfTsKKworICAgIC8qKgorICAgICAqIElQdjYgQWRkcmVzcyBTY29wZXMKKyAgICAgKi8KKyAgICBlbnVtCisgICAgeworICAgICAgICBrTm9kZUxvY2FsU2NvcGUgICAgICA9IDAsICAvLy88IE5vZGUtTG9jYWwgc2NvcGUKKyAgICAgICAga0ludGVyZmFjZUxvY2FsU2NvcGUgPSAxLCAgLy8vPCBJbnRlcmZhY2UtTG9jYWwgc2NvcGUKKyAgICAgICAga0xpbmtMb2NhbFNjb3BlICAgICAgPSAyLCAgLy8vPCBMaW5rLUxvY2FsIHNjb3BlCisgICAgICAgIGtSZWFsbUxvY2FsU2NvcGUgICAgID0gMywgIC8vLzwgUmVhbG0tTG9jYWwgc2NvcGUKKyAgICAgICAga0FkbWluTG9jYWxTY29wZSAgICAgPSA0LCAgLy8vPCBBZG1pbi1Mb2NhbCBzY29wZQorICAgICAgICBrU2l0ZUxvY2FsU2NvcGUgICAgICA9IDUsICAvLy88IFNpdGUtTG9jYWwgc2NvcGUKKyAgICAgICAga09yZ0xvY2FsU2NvcGUgICAgICAgPSA4LCAgLy8vPCBPcmdhbml6YXRpb24tTG9jYWwgc2NvcGUKKyAgICAgICAga0dsb2JhbFNjb3BlICAgICAgICAgPSAxNCwgLy8vPCBHbG9iYWwgc2NvcGUKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgdGhlIFVuc3BlY2lmaWVkIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIHRoZSBVbnNwZWNpZmllZCBBZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IHRoZSBVbnNwZWNpZmllZCBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1Vuc3BlY2lmaWVkKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgdGhlIExvb3BiYWNrIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIHRoZSBMb29wYmFjayBBZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IHRoZSBMb29wYmFjayBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0xvb3BiYWNrKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3Mgc2NvcGUgaXMgSW50ZXJmYWNlLUxvY2FsLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgYWRkcmVzcyBzY29wZSBpcyBJbnRlcmZhY2UtTG9jYWwuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzcyBzY29wZSBpcyBub3QgSW50ZXJmYWNlLUxvY2FsLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0ludGVyZmFjZUxvY2FsKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3Mgc2NvcGUgaXMgTGluay1Mb2NhbC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3Mgc2NvcGUgaXMgTGluay1Mb2NhbC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIHNjb3BlIGlzIG5vdCBMaW5rLUxvY2FsLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0xpbmtMb2NhbCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBhZGRyZXNzIGlzIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBhIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3Mgc2NvcGUgaXMgbm90IGEgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzTXVsdGljYXN0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYSBsaW5rLWxvY2FsIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBhIGxpbmstbG9jYWwgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzcyBzY29wZSBpcyBub3QgYSBsaW5rLWxvY2FsIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0xpbmtMb2NhbE11bHRpY2FzdCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBhZGRyZXNzIGlzIGEgbGluay1sb2NhbCBhbGwgbm9kZXMgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIGEgbGluay1sb2NhbCBhbGwgbm9kZXMgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBub3QgYSBsaW5rLWxvY2FsIGFsbCBub2RlcyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNMaW5rTG9jYWxBbGxOb2Rlc011bHRpY2FzdCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBhZGRyZXNzIGlzIGEgbGluay1sb2NhbCBhbGwgcm91dGVycyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgYSBsaW5rLWxvY2FsIGFsbCByb3V0ZXJzIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IGEgbGluay1sb2NhbCBhbGwgcm91dGVycyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNMaW5rTG9jYWxBbGxSb3V0ZXJzTXVsdGljYXN0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIHNjb3BlIGlzIG5vdCBhIHJlYWxtLWxvY2FsIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1JlYWxtTG9jYWxNdWx0aWNhc3Qodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIElQdjYgYWRkcmVzcyBpcyBhIHJlYWxtLWxvY2FsIGFsbCBub2RlcyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBhbGwgbm9kZXMgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBub3QgYSByZWFsbS1sb2NhbCBhbGwgbm9kZXMgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUmVhbG1Mb2NhbEFsbE5vZGVzTXVsdGljYXN0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBhbGwgcm91dGVycyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBhbGwgcm91dGVycyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIG5vdCBhIHJlYWxtLWxvY2FsIGFsbCByb3V0ZXJzIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1JlYWxtTG9jYWxBbGxSb3V0ZXJzTXVsdGljYXN0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBhbGwgTVBMIGZvcndhcmRlcnMgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBhbGwgTVBMIGZvcndhcmRlcnMgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIG5vdCBhIHJlYWxtLWxvY2FsIGFsbCBNUEwgZm9yd2FyZGVycyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1JlYWxtTG9jYWxBbGxNcGxGb3J3YXJkZXJzKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYSBSTE9DIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIGEgUkxPQyBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IGEgUkxPQyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1JvdXRpbmdMb2NhdG9yKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYW4gQW55Y2FzdCBSTE9DIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIGFuIEFueWNhc3QgUkxPQyBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IGFuIEFueWNhc3QgUkxPQyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0FueWNhc3RSb3V0aW5nTG9jYXRvcih2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBhZGRyZXNzIGlzIFN1Ym5ldC1Sb3V0ZXIgQW55Y2FzdCAoUkZDIDQyOTEpLAorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBhIFN1Ym5ldC1Sb3V0ZXIgQW55Y2FzdCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IGEgU3VibmV0LVJvdXRlciBBbnljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzU3VibmV0Um91dGVyQW55Y2FzdCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBhZGRyZXNzIGlzIFJlc2VydmVkIFN1Ym5ldCBBbnljYXN0IChSRkMgMjUyNiksCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIGEgUmVzZXJ2ZWQgU3VibmV0IEFueWNhc3QgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIG5vdCBhIFJlc2VydmVkIFN1Ym5ldCBBbnljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUmVzZXJ2ZWRTdWJuZXRBbnljYXN0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgY29udGFpbnMgUmVzZXJ2ZWQgSVB2NiBJSUQgKFJGQyA1NDUzKSwKKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgY29udGFpbnMgYSByZXNlcnZlZCBJUHY2IElJRC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIGRvZXMgbm90IGNvbnRhaW4gYSByZXNlcnZlZCBJUHY2IElJRC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNJaWRSZXNlcnZlZCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBJbnRlcmZhY2UgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgSW50ZXJmYWNlIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRJaWQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgSW50ZXJmYWNlIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIEludGVyZmFjZSBJZGVudGlmaWVyLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCAqR2V0SWlkKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSW50ZXJmYWNlIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWlkICBBIHJlZmVyZW5jZSB0byB0aGUgSW50ZXJmYWNlIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElpZChjb25zdCB1aW50OF90ICphSWlkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEludGVyZmFjZSBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUV1aTY0ICBBIHJlZmVyZW5jZSB0byB0aGUgSUVFRSBFVUktNjQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWlkKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYUV1aTY0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElQdjYgYWRkcmVzcyBzY29wZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJUHY2IGFkZHJlc3Mgc2NvcGUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFNjb3BlKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIElQdjYgcHJlZml4IGJpdHMgdGhhdCBtYXRjaC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFPdGhlciAgVGhlIElQdjYgYWRkcmVzcyB0byBtYXRjaCBhZ2FpbnN0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBJUHY2IHByZWZpeCBiaXRzIHRoYXQgbWF0Y2guCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IFByZWZpeE1hdGNoKGNvbnN0IEFkZHJlc3MgJmFPdGhlcikgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBldmFsdWF0ZXMgd2hldGhlciBvciBub3QgdGhlIElQdjYgYWRkcmVzc2VzIG1hdGNoLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU90aGVyICBUaGUgSVB2NiBhZGRyZXNzIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzZXMgbWF0Y2guCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzc2VzIGRvIG5vdCBtYXRjaC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGRyZXNzICZhT3RoZXIpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZXZhbHVhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3NlcyBkaWZmZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhT3RoZXIgIFRoZSBJUHY2IGFkZHJlc3MgdG8gY29tcGFyZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3NlcyBkaWZmZXIuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzc2VzIGRvIG5vdCBkaWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQWRkcmVzcyAmYU90aGVyKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGFuIElQdjYgYWRkcmVzcyBzdHJpbmcgdG8gYmluYXJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUJ1ZiAgQSBwb2ludGVyIHRvIHRoZSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlIElQdjYgYWRkcmVzcyBzdHJpbmcuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEZhaWxlZCB0byBwYXJzZSB0aGUgSVB2NiBhZGRyZXNzIHN0cmluZy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRnJvbVN0cmluZyhjb25zdCBjaGFyICphQnVmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGFuIElQdjYgYWRkcmVzcyBvYmplY3QgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFCdWYgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICAgYVNpemUgIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqVG9TdHJpbmcoY2hhciAqYUJ1ZiwgdWludDE2X3QgYVNpemUpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIElQdjYgcHJlZml4IGJpdHMgdGhhdCBtYXRjaC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXhBICAgICBBIHBvaW50ZXIgdG8gdGhlIHByZWZpeCB0byBtYXRjaC4KKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4QiAgICAgQSBwb2ludGVyIHRvIHRoZSBwcmVmaXggdG8gbWF0Y2ggYWdhaW5zdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWF4TGVuZ3RoICAgTnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSB0d28gcHJlZml4ZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIHByZWZpeCBiaXRzIHRoYXQgbWF0Y2guCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDhfdCBQcmVmaXhNYXRjaChjb25zdCB1aW50OF90ICphUHJlZml4QSwgY29uc3QgdWludDhfdCAqYVByZWZpeEIsIHVpbnQ4X3QgYU1heExlbmd0aCk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0ludGVyZmFjZUlkZW50aWZpZXJPZmZzZXQgPSA4LCAgLy8vPCBJbnRlcmZhY2UgSWRlbnRpZmllciBvZmZzZXQgaW4gYnl0ZXMuCisgICAgfTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5FVF9JUDZfQUREUkVTU19IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvaXA2X2ZpbHRlci5jcHAgYi9zcmMvY29yZS9uZXQvaXA2X2ZpbHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3MDJjNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9pcDZfZmlsdGVyLmNwcApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBJUHY2IGRhdGFncmFtIGZpbHRlcmluZy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImlwNl9maWx0ZXIuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKyNpbmNsdWRlICJuZXQvdGNwLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworRmlsdGVyOjpGaWx0ZXIodm9pZCkKK3sKKyAgICBtZW1zZXQobVVuc2VjdXJlUG9ydHMsIDAsIHNpemVvZihtVW5zZWN1cmVQb3J0cykpOworfQorCitib29sIEZpbHRlcjo6QWNjZXB0KE1lc3NhZ2UgJmFNZXNzYWdlKSBjb25zdAoreworICAgIGJvb2wgcnZhbCA9IGZhbHNlOworICAgIEhlYWRlciBpcDY7CisgICAgVWRwSGVhZGVyIHVkcDsKKyAgICBUY3BIZWFkZXIgdGNwOworICAgIHVpbnQxNl90IGRzdHBvcnQ7CisKKyAgICAvLyBBbGxvdyBhbGwgcmVjZWl2ZWQgSVB2NiBkYXRhZ3JhbXMgd2l0aCBsaW5rIHNlY3VyaXR5IGVuYWJsZWQKKyAgICBpZiAoYU1lc3NhZ2UuSXNMaW5rU2VjdXJpdHlFbmFibGVkKCkpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICB9CisKKyAgICAvLyBSZWFkIElQdjYgaGVhZGVyCisgICAgVmVyaWZ5T3JFeGl0KHNpemVvZihpcDYpID09IGFNZXNzYWdlLlJlYWQoMCwgc2l6ZW9mKGlwNiksICZpcDYpKTsKKworICAgIC8vIEFsbG93IG9ubHkgbGluay1sb2NhbCB1bmljYXN0IG9yIG11bHRpY2FzdAorICAgIFZlcmlmeU9yRXhpdChpcDYuR2V0RGVzdGluYXRpb24oKS5Jc0xpbmtMb2NhbCgpIHx8IGlwNi5HZXREZXN0aW5hdGlvbigpLklzTGlua0xvY2FsTXVsdGljYXN0KCkpOworCisgICAgc3dpdGNoIChpcDYuR2V0TmV4dEhlYWRlcigpKQorICAgIHsKKyAgICBjYXNlIGtQcm90b1VkcDoKKyAgICAgICAgLy8gUmVhZCB0aGUgVURQIGhlYWRlciBhbmQgZ2V0IHRoZSBkc3QgcG9ydAorICAgICAgICBWZXJpZnlPckV4aXQoc2l6ZW9mKHVkcCkgPT0gYU1lc3NhZ2UuUmVhZChzaXplb2YoaXA2KSwgc2l6ZW9mKHVkcCksICZ1ZHApKTsKKworICAgICAgICBkc3Rwb3J0ID0gdWRwLkdldERlc3RpbmF0aW9uUG9ydCgpOworCisgICAgICAgIC8vIEFsbG93IE1MRSB0cmFmZmljCisgICAgICAgIGlmIChkc3Rwb3J0ID09IE1sZTo6a1VkcFBvcnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b1RjcDoKKyAgICAgICAgLy8gUmVhZCB0aGUgVENQIGhlYWRlciBhbmQgZ2V0IHRoZSBkc3QgcG9ydAorICAgICAgICBWZXJpZnlPckV4aXQoc2l6ZW9mKHRjcCkgPT0gYU1lc3NhZ2UuUmVhZChzaXplb2YoaXA2KSwgc2l6ZW9mKHRjcCksICZ0Y3ApKTsKKworICAgICAgICBkc3Rwb3J0ID0gdGNwLkdldERlc3RpbmF0aW9uUG9ydCgpOworCisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gQWxsb3cgVURQIG9yIFRDUCB0cmFmZmljIG9ubHkKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIC8vIENoZWNrIGFnYWluc3QgYWxsb3dlZCB1bnNlY3VyZSBwb3J0IGxpc3QKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhVbnNlY3VyZVBvcnRzOyBpKyspCisgICAgeworICAgICAgICBpZiAobVVuc2VjdXJlUG9ydHNbaV0gIT0gMCAmJiBtVW5zZWN1cmVQb3J0c1tpXSA9PSBkc3Rwb3J0KQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBGaWx0ZXI6OkFkZFVuc2VjdXJlUG9ydCh1aW50MTZfdCBhUG9ydCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga01heFVuc2VjdXJlUG9ydHM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtVW5zZWN1cmVQb3J0c1tpXSA9PSBhUG9ydCkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4VW5zZWN1cmVQb3J0czsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1VbnNlY3VyZVBvcnRzW2ldID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1VbnNlY3VyZVBvcnRzW2ldID0gYVBvcnQ7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEZpbHRlcjo6UmVtb3ZlVW5zZWN1cmVQb3J0KHVpbnQxNl90IGFQb3J0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4VW5zZWN1cmVQb3J0czsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1VbnNlY3VyZVBvcnRzW2ldID09IGFQb3J0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTaGlmdCBhbGwgb2YgdGhlIHBvcnRzIGhpZ2hlciB0aGFuIHRoaXMKKyAgICAgICAgICAgIC8vIHBvcnQgZG93bi4KKyAgICAgICAgICAgIGZvciAoOyBpIDwga01heFVuc2VjdXJlUG9ydHMgLSAxOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVVuc2VjdXJlUG9ydHNbaV0gPSBtVW5zZWN1cmVQb3J0c1tpICsgMV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENsZWFyIHRoZSBsYXN0IHBvcnQgZW50cnkuCisgICAgICAgICAgICBtVW5zZWN1cmVQb3J0c1tpXSA9IDA7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2NvbnN0IHVpbnQxNl90ICpGaWx0ZXI6OkdldFVuc2VjdXJlUG9ydHModWludDhfdCAmYU51bUVudHJpZXMpIGNvbnN0Cit7CisgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiB1bnNlY3VyZSBwb3J0cy4KKyAgICBmb3IgKGFOdW1FbnRyaWVzID0gMDsgYU51bUVudHJpZXMgPCBrTWF4VW5zZWN1cmVQb3J0czsgYU51bUVudHJpZXMrKykKKyAgICB7CisgICAgICAgIGlmIChtVW5zZWN1cmVQb3J0c1thTnVtRW50cmllc10gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbVVuc2VjdXJlUG9ydHM7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNl9maWx0ZXIuaHBwIGIvc3JjL2NvcmUvbmV0L2lwNl9maWx0ZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YzM1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2X2ZpbHRlci5ocHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBJUHY2IGRhdGFncmFtIGZpbHRlcmluZy4KKyAqLworCisjaWZuZGVmIElQNl9GSUxURVJfSFBQXworI2RlZmluZSBJUDZfRklMVEVSX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIElwNiB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1pcHY2CisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBJUHY2IGRhdGFncmFtIGZpbHRlcmluZy4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbiBJUHY2IGRhdGFncmFtIGZpbHRlci4KKyAqCisgKi8KK2NsYXNzIEZpbHRlcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIEZpbHRlciBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBGaWx0ZXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIElQdjYgZGF0YWdyYW0gcGFzc2VzIHRoZSBmaWx0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIElQdjYgZGF0YWdyYW0gdG8gcHJvY2Vzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIEFjY2VwdCB0aGUgSVB2NiBkYXRhZ3JhbS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBSZWplY3QgdGhlIElQdjYgZGF0YWdyYW0uCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIEFjY2VwdChNZXNzYWdlICZhTWVzc2FnZSkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgcG9ydCB0byB0aGUgYWxsb3dlZCB1bnNlY3VyZWQgcG9ydCBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvcnQgIFRoZSBwb3J0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBUaGUgcG9ydCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBhbGxvd2VkIHVuc2VjdXJlIHBvcnQgbGlzdC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIFRoZSB1bnNlY3VyZSBwb3J0IGxpc3QgaXMgZnVsbC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWRkVW5zZWN1cmVQb3J0KHVpbnQxNl90IGFQb3J0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYSBwb3J0IGZyb20gdGhlIGFsbG93ZWQgdW5zZWN1cmUgcG9ydCBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvcnQgIFRoZSBwb3J0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFRoZSBwb3J0IHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIHRoZSBhbGxvd2VkIHVuc2VjdXJlIHBvcnQgbGlzdC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgVGhlIHBvcnQgd2FzIG5vdCBmb3VuZCBpbiB0aGUgdW5zZWN1cmUgcG9ydCBsaXN0LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZW1vdmVVbnNlY3VyZVBvcnQodWludDE2X3QgYVBvcnQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHVuc2VjdXJlIHBvcnQgbGlzdC4KKyAgICAgKgorICAgICAqIEBub3RlIFBvcnQgdmFsdWUgMCBpcyB1c2VkIHRvIGluZGljYXRlIGFuIGludmFsaWQgZW50cnkuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYU51bUVudHJpZXMgIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdW5zZWN1cmUgcG9ydCBsaXN0LgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDE2X3QgKkdldFVuc2VjdXJlUG9ydHModWludDhfdCAmYU51bUVudHJpZXMpIGNvbnN0OworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNYXhVbnNlY3VyZVBvcnRzID0gMiwKKyAgICB9OworICAgIHVpbnQxNl90IG1VbnNlY3VyZVBvcnRzW2tNYXhVbnNlY3VyZVBvcnRzXTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIElQNl9GSUxURVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNl9oZWFkZXJzLmhwcCBiL3NyYy9jb3JlL25ldC9pcDZfaGVhZGVycy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5MmMzNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9pcDZfaGVhZGVycy5ocHAKQEAgLTAsMCArMSw1NjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBJUHY2IHBhY2tldCBwcm9jZXNzaW5nLgorICovCisKKyNpZm5kZWYgSVA2X0hFQURFUlNfSFBQXworI2RlZmluZSBJUDZfSEVBREVSU19IUFBfCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAibmV0L25ldGlmLmhwcCIKKyNpbmNsdWRlICJuZXQvc29ja2V0LmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7Cit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAzMjsKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAbmFtZXNwYWNlIG90OjpJcDYKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBuYW1lc3BhY2UgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElQdjYgbmV0d29ya2luZy4KKyAqCisgKi8KK25hbWVzcGFjZSBJcDYgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtaXB2NgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIElQdjYgbmV0d29yayBsYXllci4KKyAqCisgKiBAeworICoKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1pY21wNiBJQ01QdjYKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1pcDYgSVB2NgorICogQGRlZmdyb3VwIGNvcmUtaXA2LW1wbCBNUEwKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1uZXRpZiBOZXR3b3JrIEludGVyZmFjZXMKKyAqCisgKiBAfQorICoKKyAqLworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtaXA2LWlwNgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgY29yZSBJUHY2IG5ldHdvcmtpbmcuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBJbnRlcm5ldCBQcm90b2NvbCBOdW1iZXJzCisgKi8KK2VudW0gSXBQcm90bworeworICAgIGtQcm90b0hvcE9wdHMgID0gMCwgICAvLy88IElQdjYgSG9wLWJ5LUhvcCBPcHRpb24KKyAgICBrUHJvdG9UY3AgICAgICA9IDYsICAgLy8vPCBUcmFuc21pc3Npb24gQ29udHJvbCBQcm90b2NvbAorICAgIGtQcm90b1VkcCAgICAgID0gMTcsICAvLy88IFVzZXIgRGF0YWdyYW0KKyAgICBrUHJvdG9JcDYgICAgICA9IDQxLCAgLy8vPCBJUHY2IGVuY2Fwc3VsYXRpb24KKyAgICBrUHJvdG9Sb3V0aW5nICA9IDQzLCAgLy8vPCBSb3V0aW5nIEhlYWRlciBmb3IgSVB2NgorICAgIGtQcm90b0ZyYWdtZW50ID0gNDQsICAvLy88IEZyYWdtZW50IEhlYWRlciBmb3IgSVB2NgorICAgIGtQcm90b0ljbXA2ICAgID0gNTgsICAvLy88IElDTVAgZm9yIElQdjYKKyAgICBrUHJvdG9Ob25lICAgICA9IDU5LCAgLy8vPCBObyBOZXh0IEhlYWRlciBmb3IgSVB2NgorICAgIGtQcm90b0RzdE9wdHMgID0gNjAsICAvLy88IERlc3RpbmF0aW9uIE9wdGlvbnMgZm9yIElQdjYKK307CisKK2VudW0KK3sKKyAgICBrVmVyc2lvbkNsYXNzRmxvd1NpemUgPSA0LCAgLy8vPCBDb21iaW5lZCBzaXplIG9mIFZlcnNpb24sIENsYXNzLCBGbG93IExhYmVsIGluIGJ5dGVzLgorfTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIElQdjYgaGVhZGVyLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK3N0cnVjdCBIZWFkZXJQb0QKK3sKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgdWludDhfdCAgIG04W2tWZXJzaW9uQ2xhc3NGbG93U2l6ZSAvIHNpemVvZih1aW50OF90KV07CisgICAgICAgIHVpbnQxNl90ICBtMTZba1ZlcnNpb25DbGFzc0Zsb3dTaXplIC8gc2l6ZW9mKHVpbnQxNl90KV07CisgICAgICAgIHVpbnQzMl90ICBtMzJba1ZlcnNpb25DbGFzc0Zsb3dTaXplIC8gc2l6ZW9mKHVpbnQzMl90KV07CisgICAgfSBtVmVyc2lvbkNsYXNzRmxvdzsgICAgICAgICAgIC8vLzwgVmVyc2lvbiwgQ2xhc3MsIEZsb3cgTGFiZWwKKyAgICB1aW50MTZfdCAgICAgIG1QYXlsb2FkTGVuZ3RoOyAgLy8vPCBQYXlsb2FkIExlbmd0aAorICAgIHVpbnQ4X3QgICAgICAgbU5leHRIZWFkZXI7ICAgICAvLy88IE5leHQgSGVhZGVyCisgICAgdWludDhfdCAgICAgICBtSG9wTGltaXQ7ICAgICAgIC8vLzwgSG9wIExpbWl0CisgICAgb3RJcDZBZGRyZXNzICBtU291cmNlOyAgICAgICAgIC8vLzwgU291cmNlCisgICAgb3RJcDZBZGRyZXNzICBtRGVzdGluYXRpb247ICAgIC8vLzwgRGVzdGluYXRpb24KK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJUHY2IGhlYWRlciBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEhlYWRlcjogcHJpdmF0ZSBIZWFkZXJQb0QKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgSVB2NiBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtVmVyc2lvbkNsYXNzRmxvdy5tMzJbMF0gPSAwOyBtVmVyc2lvbkNsYXNzRmxvdy5tOFswXSA9IGtWZXJzaW9uNjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIElQdjYgaGVhZGVyIGFuZCBzZXRzIFZlcnNpb24sIFRyYWZmaWMgQ29udHJvbCBhbmQgRmxvdyBMYWJlbCBmaWVsZHMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodWludDMyX3QgYVZlcnNpb25DbGFzc0Zsb3cpIHsgbVZlcnNpb25DbGFzc0Zsb3cubTMyWzBdID0gSG9zdFN3YXAzMihhVmVyc2lvbkNsYXNzRmxvdyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBWZXJzaW9uIGlzIHNldCB0byA2LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgVmVyc2lvbiBpcyBzZXQgdG8gNi4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBWZXJzaW9uIGlzIG5vdCBzZXQgdG8gNi4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWZXJzaW9uNih2b2lkKSBjb25zdCB7IHJldHVybiAobVZlcnNpb25DbGFzc0Zsb3cubThbMF0gJiBrVmVyc2lvbk1hc2spID09IGtWZXJzaW9uNjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBQYXlsb2FkIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJUHY2IFBheWxvYWQgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UGF5bG9hZExlbmd0aCh2b2lkKSB7IHJldHVybiBIb3N0U3dhcDE2KG1QYXlsb2FkTGVuZ3RoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSVB2NiBQYXlsb2FkIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBJUHY2IFBheWxvYWQgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQYXlsb2FkTGVuZ3RoKHVpbnQxNl90IGFMZW5ndGgpIHsgbVBheWxvYWRMZW5ndGggPSBIb3N0U3dhcDE2KGFMZW5ndGgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElQdjYgTmV4dCBIZWFkZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBJcFByb3RvIEdldE5leHRIZWFkZXIodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SXBQcm90bz4obU5leHRIZWFkZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5leHRIZWFkZXIgIFRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXh0SGVhZGVyKElwUHJvdG8gYU5leHRIZWFkZXIpIHsgbU5leHRIZWFkZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhTmV4dEhlYWRlcik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElQdjYgSG9wIExpbWl0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElQdjYgSG9wIExpbWl0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRIb3BMaW1pdCh2b2lkKSBjb25zdCB7IHJldHVybiBtSG9wTGltaXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgSG9wIExpbWl0IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUhvcExpbWl0ICBUaGUgSVB2NiBIb3AgTGltaXQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEhvcExpbWl0KHVpbnQ4X3QgYUhvcExpbWl0KSB7IG1Ib3BMaW1pdCA9IGFIb3BMaW1pdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBTb3VyY2UgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IFNvdXJjZSBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgQWRkcmVzcyAmR2V0U291cmNlKHZvaWQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFkZHJlc3MgJj4obVNvdXJjZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgU291cmNlIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU291cmNlICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBTb3VyY2UgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U291cmNlKGNvbnN0IEFkZHJlc3MgJmFTb3VyY2UpIHsgbVNvdXJjZSA9IGFTb3VyY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElQdjYgRGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IERlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBBZGRyZXNzICZHZXREZXN0aW5hdGlvbih2b2lkKSB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGRyZXNzICY+KG1EZXN0aW5hdGlvbik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgRGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEZXN0aW5hdGlvbiAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgRGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RGVzdGluYXRpb24oY29uc3QgQWRkcmVzcyAmYURlc3RpbmF0aW9uKSB7IG1EZXN0aW5hdGlvbiA9IGFEZXN0aW5hdGlvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBJUHY2IFBheWxvYWQgTGVuZ3RoIGZpZWxkLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBJUHY2IFBheWxvYWQgTGVuZ3RoIGZpZWxkLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHVpbnQ4X3QgR2V0UGF5bG9hZExlbmd0aE9mZnNldCh2b2lkKSB7IHJldHVybiBvZmZzZXRvZihIZWFkZXJQb0QsIG1QYXlsb2FkTGVuZ3RoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBJUHY2IEhvcCBMaW1pdCBmaWVsZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBieXRlIG9mZnNldCBvZiB0aGUgSVB2NiBIb3AgTGltaXQgZmllbGQuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDhfdCBHZXRIb3BMaW1pdE9mZnNldCh2b2lkKSB7IHJldHVybiBvZmZzZXRvZihIZWFkZXJQb0QsIG1Ib3BMaW1pdCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBJUHY2IEhvcCBMaW1pdCBmaWVsZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBJUHY2IEhvcCBMaW1pdCBmaWVsZC4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50OF90IEdldEhvcExpbWl0U2l6ZSh2b2lkKSB7IHJldHVybiBzaXplb2YodWludDhfdCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIHRoZSBieXRlIG9mZnNldCBvZiB0aGUgSVB2NiBEZXN0aW5hdGlvbiBmaWVsZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBieXRlIG9mZnNldCBvZiB0aGUgSVB2NiBEZXN0aW5hdGlvbiBmaWVsZC4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50OF90IEdldERlc3RpbmF0aW9uT2Zmc2V0KHZvaWQpIHsgcmV0dXJuIG9mZnNldG9mKEhlYWRlclBvRCwgbURlc3RpbmF0aW9uKTsgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtWZXJzaW9uNiA9IDB4NjAsCisgICAgICAgIGtWZXJzaW9uTWFzayA9IDB4ZjAsCisgICAgfTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcHJvY2Vzc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBFeHRlbnNpb25IZWFkZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElQdjYgTmV4dCBIZWFkZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBJcFByb3RvIEdldE5leHRIZWFkZXIodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SXBQcm90bz4obU5leHRIZWFkZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5leHRIZWFkZXIgIFRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXh0SGVhZGVyKElwUHJvdG8gYU5leHRIZWFkZXIpIHsgbU5leHRIZWFkZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhTmV4dEhlYWRlcik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElQdjYgSGVhZGVyIEV4dGVuc2lvbiBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSVB2NiBIZWFkZXIgRXh0ZW5zaW9uIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgSGVhZGVyIEV4dGVuc2lvbiBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgSVB2NiBIZWFkZXIgRXh0ZW5zaW9uIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGVuZ3RoKHVpbnQ4X3QgYUxlbmd0aCkgeyBtTGVuZ3RoID0gYUxlbmd0aDsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU5leHRIZWFkZXI7CisgICAgdWludDhfdCBtTGVuZ3RoOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIElQdjYgSG9wLWJ5LUhvcCBPcHRpb25zIEhlYWRlciBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEhvcEJ5SG9wSGVhZGVyOiBwdWJsaWMgRXh0ZW5zaW9uSGVhZGVyCit7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSVB2NiBPcHRpb25zIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgT3B0aW9uSGVhZGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqLworICAgIE9wdGlvbkhlYWRlcih2b2lkKToKKyAgICAgICAgbVR5cGUoMCksCisgICAgICAgIG1MZW5ndGgoMCkge30KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElQdjYgT3B0aW9uIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSVB2NiBPcHRpb24gVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0VHlwZSh2b2lkKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSVB2NiBPcHRpb24gVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICBUaGUgSVB2NiBPcHRpb24gVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VHlwZSh1aW50OF90IGFUeXBlKSB7IG1UeXBlID0gYVR5cGU7IH0KKworICAgIC8qKgorICAgICAqIElQdjYgT3B0aW9uIFR5cGUgYWN0aW9ucyBmb3IgdW5yZWNvZ25pemVkIElQdjYgT3B0aW9ucy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gQWN0aW9uCisgICAgeworICAgICAgICBrQWN0aW9uU2tpcCAgICAgID0gMHgwMCwgIC8vLzwgc2tpcCBvdmVyIHRoaXMgb3B0aW9uIGFuZCBjb250aW51ZSBwcm9jZXNzaW5nIHRoZSBoZWFkZXIKKyAgICAgICAga0FjdGlvbkRpc2NhcmQgICA9IDB4NDAsICAvLy88IGRpc2NhcmQgdGhlIHBhY2tldAorICAgICAgICBrQWN0aW9uRm9yY2VJY21wID0gMHg4MCwgIC8vLzwgZGlzY2FyZCB0aGUgcGFja2V0IGFuZCBmb3JjaWJseSBzZW5kIGFuIElDTVAgUGFyYW1ldGVyIFByb2JsZW0KKyAgICAgICAga0FjdGlvbkljbXAgICAgICA9IDB4YzAsICAvLy88IGRpc2NhcmQgcGFja2V0IGFuZCBjb25kaXRpb25hbGx5IHNlbmQgYW4gSUNNUCBQYXJhbWV0ZXIgUHJvYmxlbQorICAgICAgICBrQWN0aW9uTWFzayAgICAgID0gMHhjMCwgIC8vLzwgbWFzayBmb3IgYWN0aW9uIGJpdHMKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBPcHRpb24gYWN0aW9uIGZvciB1bnJlY29nbml6ZWQgSVB2NiBPcHRpb25zLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElQdjYgT3B0aW9uIGFjdGlvbiBmb3IgdW5yZWNvZ25pemVkIElQdjYgT3B0aW9ucy4KKyAgICAgKgorICAgICAqLworICAgIEFjdGlvbiBHZXRBY3Rpb24odm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWN0aW9uPihtVHlwZSAmIGtBY3Rpb25NYXNrKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBPcHRpb24gTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElQdjYgT3B0aW9uIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgT3B0aW9uIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBJUHY2IE9wdGlvbiBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExlbmd0aCh1aW50OF90IGFMZW5ndGgpIHsgbUxlbmd0aCA9IGFMZW5ndGg7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1UeXBlOworICAgIHVpbnQ4X3QgbUxlbmd0aDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJUHY2IFBhZE4gT3B0aW9uIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgT3B0aW9uUGFkTiA6IHB1YmxpYyBPcHRpb25IZWFkZXIKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVHlwZSA9IDB4MDEsICAgICAgLy8vPCBQYWROIHR5cGUKKyAgICAgICAga0RhdGEgPSAweDAwLCAgICAgIC8vLzwgUGFkTiBzcGVjaWZpYyBkYXRhCisgICAgICAgIGtNYXhMZW5ndGggPSAweDA1ICAvLy88IE1heGltdW0gbGVuZ3RoIG9mIFBhZE4gb3B0aW9uIGRhdGEKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFBhZE4gaGVhZGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBhZExlbmd0aCAgVGhlIGxlbmd0aCBvZiBuZWVkZWQgcGFkZGluZy4gQWxsb3dlZCB2YWx1ZSBmcm9tCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgMi03LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHVpbnQ4X3QgYVBhZExlbmd0aCkgeworICAgICAgICBPcHRpb25IZWFkZXI6OlNldFR5cGUoa1R5cGUpOworICAgICAgICBPcHRpb25IZWFkZXI6OlNldExlbmd0aChhUGFkTGVuZ3RoIC0gc2l6ZW9mKE9wdGlvbkhlYWRlcikpOworICAgICAgICBtZW1zZXQobVBhZCwga0RhdGEsIGFQYWRMZW5ndGggLSBzaXplb2YoT3B0aW9uSGVhZGVyKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdG90YWwgSVB2NiBPcHRpb24gTGVuZ3RoIHZhbHVlIGluY2x1ZGluZyBvcHRpb24KKyAgICAgKiBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdG90YWwgSVB2NiBPcHRpb24gTGVuZ3RoLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRUb3RhbExlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBPcHRpb25IZWFkZXI6OkdldExlbmd0aCgpICsgc2l6ZW9mKE9wdGlvbkhlYWRlcik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1QYWRba01heExlbmd0aF07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSVB2NiBQYWQxIE9wdGlvbiBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLiBQYWQxIGRvZXMgbm90CisgKiBmb2xsb3dkZWZhdWx0IG9wdGlvbiBoZWFkZXIgc3RydWN0dXJlLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE9wdGlvblBhZDEKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVHlwZSA9IDB4MDAKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFBhZDEgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgbVR5cGUgPSBrVHlwZTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVR5cGU7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJUHY2IEZyYWdtZW50IEhlYWRlciBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEZyYWdtZW50SGVhZGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIElQdjYgRnJhZ21lbnQgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgbVJlc2VydmVkID0gMDsgbUlkZW50aWZpY2F0aW9uID0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBOZXh0IEhlYWRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgSXBQcm90byBHZXROZXh0SGVhZGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PElwUHJvdG8+KG1OZXh0SGVhZGVyKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSVB2NiBOZXh0IEhlYWRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXh0SGVhZGVyICBUaGUgSVB2NiBOZXh0IEhlYWRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TmV4dEhlYWRlcihJcFByb3RvIGFOZXh0SGVhZGVyKSB7IG1OZXh0SGVhZGVyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYU5leHRIZWFkZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBGcmFnbWVudCBPZmZzZXQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRnJhZ21lbnQgT2Zmc2V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0T2Zmc2V0KHZvaWQpIHsgcmV0dXJuIChIb3N0U3dhcDE2KG1PZmZzZXRNb3JlKSAmIGtPZmZzZXRNYXNrKSA+PiBrT2Zmc2V0T2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBGcmFnbWVudCBPZmZzZXQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhT2Zmc2V0ICBUaGUgRnJhZ21lbnQgT2Zmc2V0IHZhbHVlLgorICAgICAqLworICAgIHZvaWQgU2V0T2Zmc2V0KHVpbnQxNl90IGFPZmZzZXQpIHsKKyAgICAgICAgdWludDE2X3QgdG1wID0gSG9zdFN3YXAxNihtT2Zmc2V0TW9yZSk7CisgICAgICAgIHRtcCA9ICh0bXAgJiB+a09mZnNldE1hc2spIHwgKChhT2Zmc2V0IDw8IGtPZmZzZXRPZmZzZXQpICYga09mZnNldE1hc2spOworICAgICAgICBtT2Zmc2V0TW9yZSA9IEhvc3RTd2FwMTYodG1wKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNIGZsYWcgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTSBmbGFnIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc01vcmVGbGFnU2V0KHZvaWQpIHsgcmV0dXJuIEhvc3RTd2FwMTYobU9mZnNldE1vcmUpICYga01vcmVGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIE0gZmxhZyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJNb3JlRmxhZyh2b2lkKSB7IG1PZmZzZXRNb3JlID0gSG9zdFN3YXAxNihIb3N0U3dhcDE2KG1PZmZzZXRNb3JlKSAmIH5rTW9yZUZsYWcpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNIGZsYWcgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1vcmVGbGFnKHZvaWQpIHsgbU9mZnNldE1vcmUgPSBIb3N0U3dhcDE2KEhvc3RTd2FwMTYobU9mZnNldE1vcmUpIHwga01vcmVGbGFnKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU5leHRIZWFkZXI7CisgICAgdWludDhfdCBtUmVzZXJ2ZWQ7CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrT2Zmc2V0T2Zmc2V0ID0gMywKKyAgICAgICAga09mZnNldE1hc2sgPSAweGZmZjgsCisgICAgICAgIGtNb3JlRmxhZyA9IDEsCisgICAgfTsKKyAgICB1aW50MTZfdCBtT2Zmc2V0TW9yZTsKKyAgICB1aW50MzJfdCBtSWRlbnRpZmljYXRpb247Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRfSVA2X0hFQURFUlNfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNl9tcGwuY3BwIGIvc3JjL2NvcmUvbmV0L2lwNl9tcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNzE4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2X21wbC5jcHAKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgTVBMLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiaXA2X21wbC5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKwordm9pZCBNcGxCdWZmZXJlZE1lc3NhZ2VNZXRhZGF0YTo6R2VuZXJhdGVOZXh0VHJhbnNtaXNzaW9uVGltZSh1aW50MzJfdCBhQ3VycmVudFRpbWUsIHVpbnQ4X3QgYUludGVydmFsKQoreworICAgIC8vIEVtdWxhdGUgVHJpY2tsZSB0aW1lciBiZWhhdmlvciBhbmQgc2V0IHVwIHRoZSBuZXh0IHJldHJhbnNtaXNzaW9uIHdpdGhpbiBbMCxJKSByYW5nZS4KKyAgICB1aW50OF90IHQgPSBvdFBsYXRSYW5kb21HZXQoKSAlIGFJbnRlcnZhbDsKKworICAgIC8vIFNldCB0cmFuc21pc3Npb24gdGltZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGludGVydmFsLgorICAgIFNldFRyYW5zbWlzc2lvblRpbWUoYUN1cnJlbnRUaW1lICsgR2V0SW50ZXJ2YWxPZmZzZXQoKSArIHQpOworICAgIFNldEludGVydmFsT2Zmc2V0KGFJbnRlcnZhbCAtIHQpOworfQorCitNcGw6Ok1wbChJcDYgJmFJcDYpOgorICAgIElwNkxvY2F0b3IoYUlwNiksCisgICAgbVNlZWRTZXRUaW1lcihhSXA2Lm1UaW1lclNjaGVkdWxlciwgJk1wbDo6SGFuZGxlU2VlZFNldFRpbWVyLCB0aGlzKSwKKyAgICBtUmV0cmFuc21pc3Npb25UaW1lcihhSXA2Lm1UaW1lclNjaGVkdWxlciwgJk1wbDo6SGFuZGxlUmV0cmFuc21pc3Npb25UaW1lciwgdGhpcyksCisgICAgbVRpbWVyRXhwaXJhdGlvbnMoMCksCisgICAgbVNlcXVlbmNlKDApLAorICAgIG1TZWVkSWQoMCksCisgICAgbU1hdGNoaW5nQWRkcmVzcyhOVUxMKQoreworICAgIG1lbXNldChtU2VlZFNldCwgMCwgc2l6ZW9mKG1TZWVkU2V0KSk7Cit9CisKK3ZvaWQgTXBsOjpJbml0T3B0aW9uKE9wdGlvbk1wbCAmYU9wdGlvbiwgY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgYU9wdGlvbi5Jbml0KCk7CisgICAgYU9wdGlvbi5TZXRTZXF1ZW5jZShtU2VxdWVuY2UrKyk7CisKKyAgICAvLyBDaGVjayBpZiBTZWVkIElkIGNhbiBiZSBlbGlkZWQuCisgICAgaWYgKG1NYXRjaGluZ0FkZHJlc3MgJiYgYUFkZHJlc3MgPT0gKm1NYXRjaGluZ0FkZHJlc3MpCisgICAgeworICAgICAgICBhT3B0aW9uLlNldFNlZWRJZExlbmd0aChPcHRpb25NcGw6OmtTZWVkSWRMZW5ndGgwKTsKKworICAgICAgICAvLyBEZWNyZWFzZSBkZWZhdWx0IG9wdGlvbiBsZW5ndGguCisgICAgICAgIGFPcHRpb24uU2V0TGVuZ3RoKGFPcHRpb24uR2V0TGVuZ3RoKCkgLSBzaXplb2YobVNlZWRJZCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhT3B0aW9uLlNldFNlZWRJZExlbmd0aChPcHRpb25NcGw6OmtTZWVkSWRMZW5ndGgyKTsKKyAgICAgICAgYU9wdGlvbi5TZXRTZWVkSWQobVNlZWRJZCk7CisgICAgfQorfQorCitvdEVycm9yIE1wbDo6VXBkYXRlU2VlZFNldCh1aW50MTZfdCBhU2VlZElkLCB1aW50OF90IGFTZXF1ZW5jZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNcGxTZWVkRW50cnkgKmVudHJ5ID0gTlVMTDsKKyAgICBpbnQ4X3QgZGlmZjsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBrTnVtU2VlZEVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtU2VlZFNldFtpXS5HZXRMaWZldGltZSgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFN0YXJ0IGFsbG9jYXRpbmcgZnJvbSB0aGUgZmlyc3QgcG9zc2libGUgZW50cnkgdG8gc3BlZWQgdXAgcHJvY2VzcyBvZiBzZWFyY2hpbmcuCisgICAgICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9ICZtU2VlZFNldFtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtU2VlZFNldFtpXS5HZXRTZWVkSWQoKSA9PSBhU2VlZElkKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRyeSA9ICZtU2VlZFNldFtpXTsKKyAgICAgICAgICAgIGRpZmYgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGFTZXF1ZW5jZSAtIGVudHJ5LT5HZXRTZXF1ZW5jZSgpKTsKKworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGRpZmYgPiAwLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChlbnRyeSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgZW50cnktPlNldFNlZWRJZChhU2VlZElkKTsKKyAgICBlbnRyeS0+U2V0U2VxdWVuY2UoYVNlcXVlbmNlKTsKKyAgICBlbnRyeS0+U2V0TGlmZXRpbWUoa1NlZWRFbnRyeUxpZmV0aW1lKTsKKyAgICBtU2VlZFNldFRpbWVyLlN0YXJ0KGtTZWVkRW50cnlMaWZldGltZUR0KTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTXBsOjpVcGRhdGVCdWZmZXJlZFNldCh1aW50MTZfdCBhU2VlZElkLCB1aW50OF90IGFTZXF1ZW5jZSkKK3sKKyAgICBpbnQ4X3QgZGlmZjsKKyAgICBNcGxCdWZmZXJlZE1lc3NhZ2VNZXRhZGF0YSBtZXNzYWdlTWV0YWRhdGE7CisKKyAgICBNZXNzYWdlICptZXNzYWdlID0gbUJ1ZmZlcmVkTWVzc2FnZVNldC5HZXRIZWFkKCk7CisgICAgTWVzc2FnZSAqbmV4dE1lc3NhZ2UgPSBOVUxMOworCisgICAgLy8gQ2hlY2sgaWYgbXVsdGljYXN0IGZvcndhcmRpbmcgaXMgZW5hYmxlZC4KKyAgICBWZXJpZnlPckV4aXQoR2V0VGltZXJFeHBpcmF0aW9ucygpID4gMCk7CisKKyAgICB3aGlsZSAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmV4dE1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisgICAgICAgIG1lc3NhZ2VNZXRhZGF0YS5SZWFkRnJvbSgqbWVzc2FnZSk7CisKKyAgICAgICAgaWYgKG1lc3NhZ2VNZXRhZGF0YS5HZXRTZWVkSWQoKSA9PSBhU2VlZElkKQorICAgICAgICB7CisgICAgICAgICAgICBkaWZmID0gc3RhdGljX2Nhc3Q8aW50OF90PihhU2VxdWVuY2UgLSBtZXNzYWdlTWV0YWRhdGEuR2V0U2VxdWVuY2UoKSk7CisKKyAgICAgICAgICAgIGlmIChkaWZmID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9wIHJldHJhbnNtaXR0aW5nIE1QTCBEYXRhIE1lc3NhZ2UgdGhhdCBpcyBjb25zaWRlciB0byBiZSBvbGQuCisgICAgICAgICAgICAgICAgbUJ1ZmZlcmVkTWVzc2FnZVNldC5EZXF1ZXVlKCptZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZSA9IG5leHRNZXNzYWdlOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTXBsOjpBZGRCdWZmZXJlZE1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFTZWVkSWQsIHVpbnQ4X3QgYVNlcXVlbmNlLCBib29sIGFJc091dGJvdW5kKQoreworICAgIHVpbnQzMl90IG5vdyA9IFRpbWVyOjpHZXROb3coKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlICptZXNzYWdlQ29weSA9IE5VTEw7CisgICAgTXBsQnVmZmVyZWRNZXNzYWdlTWV0YWRhdGEgbWVzc2FnZU1ldGFkYXRhOworICAgIHVpbnQzMl90IG5leHRUcmFuc21pc3Npb25UaW1lOworICAgIHVpbnQ4X3QgaG9wTGltaXQgPSAwOworCisgICAgVmVyaWZ5T3JFeGl0KEdldFRpbWVyRXhwaXJhdGlvbnMoKSA+IDApOworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZUNvcHkgPSBhTWVzc2FnZS5DbG9uZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgaWYgKCFhSXNPdXRib3VuZCkKKyAgICB7CisgICAgICAgIGFNZXNzYWdlLlJlYWQoSGVhZGVyOjpHZXRIb3BMaW1pdE9mZnNldCgpLCBIZWFkZXI6OkdldEhvcExpbWl0U2l6ZSgpLCAmaG9wTGltaXQpOworICAgICAgICBWZXJpZnlPckV4aXQoaG9wTGltaXQtLSA+IDEsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgIG1lc3NhZ2VDb3B5LT5Xcml0ZShIZWFkZXI6OkdldEhvcExpbWl0T2Zmc2V0KCksIEhlYWRlcjo6R2V0SG9wTGltaXRTaXplKCksICZob3BMaW1pdCk7CisgICAgfQorCisgICAgbWVzc2FnZU1ldGFkYXRhLlNldFNlZWRJZChhU2VlZElkKTsKKyAgICBtZXNzYWdlTWV0YWRhdGEuU2V0U2VxdWVuY2UoYVNlcXVlbmNlKTsKKyAgICBtZXNzYWdlTWV0YWRhdGEuU2V0VHJhbnNtaXNzaW9uQ291bnQoYUlzT3V0Ym91bmQgPyAxIDogMCk7CisgICAgbWVzc2FnZU1ldGFkYXRhLkdlbmVyYXRlTmV4dFRyYW5zbWlzc2lvblRpbWUobm93LCBrRGF0YU1lc3NhZ2VJbnRlcnZhbCk7CisKKyAgICAvLyBBcHBlbmQgdGhlIG1lc3NhZ2Ugd2l0aCBNcGxCdWZmZXJlZE1lc3NhZ2VNZXRhZGF0YSBhbmQgYWRkIGl0IHRvIHRoZSBxdWV1ZS4KKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZU1ldGFkYXRhLkFwcGVuZFRvKCptZXNzYWdlQ29weSkpOworICAgIG1CdWZmZXJlZE1lc3NhZ2VTZXQuRW5xdWV1ZSgqbWVzc2FnZUNvcHkpOworCisgICAgaWYgKG1SZXRyYW5zbWlzc2lvblRpbWVyLklzUnVubmluZygpKQorICAgIHsKKyAgICAgICAgLy8gSWYgdGltZXIgaXMgYWxyZWFkeSBydW5uaW5nLCBjaGVjayBpZiBpdCBzaG91bGQgYmUgcmVzdGFydGVkIHdpdGggZWFybGllciBmaXJlIHRpbWUuCisgICAgICAgIG5leHRUcmFuc21pc3Npb25UaW1lID0gbVJldHJhbnNtaXNzaW9uVGltZXIuR2V0RmlyZVRpbWUoKTsKKworICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLklzRWFybGllcihuZXh0VHJhbnNtaXNzaW9uVGltZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZXRyYW5zbWlzc2lvblRpbWVyLlN0YXJ0KG1lc3NhZ2VNZXRhZGF0YS5HZXRUcmFuc21pc3Npb25UaW1lKCkgLSBub3cpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IHNldCB0aGUgdGltZXIuCisgICAgICAgIG1SZXRyYW5zbWlzc2lvblRpbWVyLlN0YXJ0KG1lc3NhZ2VNZXRhZGF0YS5HZXRUcmFuc21pc3Npb25UaW1lKCkgLSBub3cpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2VDb3B5ICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlQ29weS0+RnJlZSgpOworICAgIH0KK30KKworb3RFcnJvciBNcGw6OlByb2Nlc3NPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzLCBib29sIGFJc091dGJvdW5kKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgT3B0aW9uTXBsIG9wdGlvbjsKKworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2Yob3B0aW9uKSwgJm9wdGlvbikgPj0gT3B0aW9uTXBsOjprTWluTGVuZ3RoICYmCisgICAgICAgICAgICAgICAgIChvcHRpb24uR2V0U2VlZElkTGVuZ3RoKCkgPT0gT3B0aW9uTXBsOjprU2VlZElkTGVuZ3RoMCB8fAorICAgICAgICAgICAgICAgICAgb3B0aW9uLkdldFNlZWRJZExlbmd0aCgpID09IE9wdGlvbk1wbDo6a1NlZWRJZExlbmd0aDIpLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgaWYgKG9wdGlvbi5HZXRTZWVkSWRMZW5ndGgoKSA9PSBPcHRpb25NcGw6OmtTZWVkSWRMZW5ndGgwKQorICAgIHsKKyAgICAgICAgLy8gUmV0cmlldmUgTVBMIFNlZWQgSWQgZnJvbSB0aGUgSVB2NiBTb3VyY2UgQWRkcmVzcy4KKyAgICAgICAgb3B0aW9uLlNldFNlZWRJZChIb3N0U3dhcDE2KGFBZGRyZXNzLm1GaWVsZHMubTE2WzddKSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgTVBMIERhdGEgTWVzc2FnZXMgaW4gdGhlIE1QTCBCdWZmZXJlZCBTZXQgYWdhaW5zdCBzZXF1ZW5jZSBudW1iZXIuCisgICAgVXBkYXRlQnVmZmVyZWRTZXQob3B0aW9uLkdldFNlZWRJZCgpLCBvcHRpb24uR2V0U2VxdWVuY2UoKSk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgTVBMIERhdGEgTWVzc2FnZSBpcyBuZXcuCisgICAgZXJyb3IgPSBVcGRhdGVTZWVkU2V0KG9wdGlvbi5HZXRTZWVkSWQoKSwgb3B0aW9uLkdldFNlcXVlbmNlKCkpOworCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBBZGRCdWZmZXJlZE1lc3NhZ2UoYU1lc3NhZ2UsIG9wdGlvbi5HZXRTZWVkSWQoKSwgb3B0aW9uLkdldFNlcXVlbmNlKCksIGFJc091dGJvdW5kKTsKKyAgICB9CisgICAgZWxzZSBpZiAoYUlzT3V0Ym91bmQpCisgICAgeworICAgICAgICAvLyBJbiBjYXNlIE1QTCBEYXRhIE1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGxvY2FsbHksIGlnbm9yZSBwb3RlbnRpYWwgZXJyb3Igb2YgdGhlIE1QTCBTZWVkIFNldAorICAgICAgICAvLyB0byBhbGxvdyBzdWJzZXF1ZW50IHJldHJhbnNtaXNzaW9ucyB3aXRoIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlci4KKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTXBsOjpIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKCk7Cit9CisKK3ZvaWQgTXBsOjpIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKHZvaWQpCit7CisgICAgdWludDMyX3Qgbm93ID0gVGltZXI6OkdldE5vdygpOworICAgIHVpbnQzMl90IG5leHREZWx0YSA9IDB4ZmZmZmZmZmY7CisgICAgTXBsQnVmZmVyZWRNZXNzYWdlTWV0YWRhdGEgbWVzc2FnZU1ldGFkYXRhOworCisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IG1CdWZmZXJlZE1lc3NhZ2VTZXQuR2V0SGVhZCgpOworICAgIE1lc3NhZ2UgKm5leHRNZXNzYWdlID0gTlVMTDsKKworICAgIHdoaWxlIChtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBuZXh0TWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKTsKKyAgICAgICAgbWVzc2FnZU1ldGFkYXRhLlJlYWRGcm9tKCptZXNzYWdlKTsKKworICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLklzTGF0ZXIobm93KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXh0IHJldHJhbnNtaXNzaW9uIHRpbWUgYW5kIGNob29zZSB0aGUgbG93ZXN0LgorICAgICAgICAgICAgaWYgKG1lc3NhZ2VNZXRhZGF0YS5HZXRUcmFuc21pc3Npb25UaW1lKCkgLSBub3cgPCBuZXh0RGVsdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmV4dERlbHRhID0gbWVzc2FnZU1ldGFkYXRhLkdldFRyYW5zbWlzc2lvblRpbWUoKSAtIG5vdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbiB0aW1lciBleHBpcmF0aW9ucy4KKyAgICAgICAgICAgIG1lc3NhZ2VNZXRhZGF0YS5TZXRUcmFuc21pc3Npb25Db3VudChtZXNzYWdlTWV0YWRhdGEuR2V0VHJhbnNtaXNzaW9uQ291bnQoKSArIDEpOworCisgICAgICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLkdldFRyYW5zbWlzc2lvbkNvdW50KCkgPCBHZXRUaW1lckV4cGlyYXRpb25zKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTWVzc2FnZSAqbWVzc2FnZUNvcHkgPSBtZXNzYWdlLT5DbG9uZShtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIHNpemVvZihNcGxCdWZmZXJlZE1lc3NhZ2VNZXRhZGF0YSkpOworCisgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VDb3B5ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLkdldFRyYW5zbWlzc2lvbkNvdW50KCkgPiAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlQ29weS0+U2V0U3ViVHlwZShNZXNzYWdlOjprU3ViVHlwZU1wbFJldHJhbnNtaXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIEdldElwNigpLkVucXVldWVEYXRhZ3JhbSgqbWVzc2FnZUNvcHkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1lc3NhZ2VNZXRhZGF0YS5HZW5lcmF0ZU5leHRUcmFuc21pc3Npb25UaW1lKG5vdywga0RhdGFNZXNzYWdlSW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIG1lc3NhZ2VNZXRhZGF0YS5VcGRhdGVJbigqbWVzc2FnZSk7CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiByZXRyYW5zbWlzc2lvbiB0aW1lIGlzIGxvd2VyIHRoYW4gdGhlIGN1cnJlbnQgbG93ZXN0IG9uZS4KKyAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLkdldFRyYW5zbWlzc2lvblRpbWUoKSAtIG5vdyA8IG5leHREZWx0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5leHREZWx0YSA9IG1lc3NhZ2VNZXRhZGF0YS5HZXRUcmFuc21pc3Npb25UaW1lKCkgLSBub3c7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1CdWZmZXJlZE1lc3NhZ2VTZXQuRGVxdWV1ZSgqbWVzc2FnZSk7CisKKyAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLkdldFRyYW5zbWlzc2lvbkNvdW50KCkgPT0gR2V0VGltZXJFeHBpcmF0aW9ucygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VNZXRhZGF0YS5HZXRUcmFuc21pc3Npb25Db3VudCgpID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+U2V0U3ViVHlwZShNZXNzYWdlOjprU3ViVHlwZU1wbFJldHJhbnNtaXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZXh0cmEgbWV0YWRhdGEgZnJvbSB0aGUgTVBMIERhdGEgTWVzc2FnZS4KKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZU1ldGFkYXRhLlJlbW92ZUZyb20oKm1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBHZXRJcDYoKS5FbnF1ZXVlRGF0YWdyYW0oKm1lc3NhZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIHJldHJhbnNtaXR0aW5nIGlmIHRoZSBudW1iZXIgb2YgdGltZXIgZXhwaXJhdGlvbnMgaXMgYWxyZWFkeSBleGNlZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2UgPSBuZXh0TWVzc2FnZTsKKyAgICB9CisKKyAgICBpZiAobmV4dERlbHRhICE9IDB4ZmZmZmZmZmYpCisgICAgeworICAgICAgICBtUmV0cmFuc21pc3Npb25UaW1lci5TdGFydChuZXh0RGVsdGEpOworICAgIH0KK30KKwordm9pZCBNcGw6OkhhbmRsZVNlZWRTZXRUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlU2VlZFNldFRpbWVyKCk7Cit9CisKK3ZvaWQgTXBsOjpIYW5kbGVTZWVkU2V0VGltZXIodm9pZCkKK3sKKyAgICBib29sIHN0YXJ0VGltZXIgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga051bVNlZWRFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBpZiAobVNlZWRTZXRbaV0uR2V0TGlmZXRpbWUoKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZWVkU2V0W2ldLlNldExpZmV0aW1lKG1TZWVkU2V0W2ldLkdldExpZmV0aW1lKCkgLSAxKTsKKyAgICAgICAgICAgIHN0YXJ0VGltZXIgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXJ0VGltZXIpCisgICAgeworICAgICAgICBtU2VlZFNldFRpbWVyLlN0YXJ0KGtTZWVkRW50cnlMaWZldGltZUR0KTsKKyAgICB9Cit9CisKK01wbCAmTXBsOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBNcGwgJm1wbCA9ICpzdGF0aWNfY2FzdDxNcGwgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgTXBsICZtcGwgPSBvdEdldElwNigpLm1NcGw7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBtcGw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNl9tcGwuaHBwIGIvc3JjL2NvcmUvbmV0L2lwNl9tcGwuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzVjZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2X21wbC5ocHAKQEAgLTAsMCArMSw1NTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSVA2X01QTF9IUFBfCisjZGVmaW5lIElQNl9NUExfSFBQXworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgTVBMLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9oZWFkZXJzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBJcDYgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtaXA2LW1wbAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgTVBMLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1QTCBoZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBPcHRpb25NcGw6IHB1YmxpYyBPcHRpb25IZWFkZXIKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVHlwZSA9IDB4NmQsICAgIC8qIDAxIDEgMDExMDEgKi8KKyAgICAgICAga01pbkxlbmd0aCA9IDIKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIE1QTCBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeworICAgICAgICBPcHRpb25IZWFkZXI6OlNldFR5cGUoa1R5cGUpOworICAgICAgICBPcHRpb25IZWFkZXI6OlNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE9wdGlvbkhlYWRlcikpOworICAgICAgICBtQ29udHJvbCA9IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdG90YWwgTVBMIE9wdGlvbiBsZW5ndGggdmFsdWUgaW5jbHVkaW5nIG9wdGlvbgorICAgICAqIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSB0b3RhbCBJUHY2IE9wdGlvbiBMZW5ndGguCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFRvdGFsTGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIE9wdGlvbkhlYWRlcjo6R2V0TGVuZ3RoKCkgKyBzaXplb2YoT3B0aW9uSGVhZGVyKTsgfQorCisgICAgLyoqCisgICAgICogTVBMIFNlZWQgSWQgbGVuZ3Rocy4KKyAgICAgKi8KKyAgICBlbnVtIFNlZWRJZExlbmd0aAorICAgIHsKKyAgICAgICAga1NlZWRJZExlbmd0aDAgID0gMCA8PCA2LCAgLy8vPCAwLWJ5dGUgTVBMIFNlZWQgSWQgTGVuZ3RoLgorICAgICAgICBrU2VlZElkTGVuZ3RoMiAgPSAxIDw8IDYsICAvLy88IDItYnl0ZSBNUEwgU2VlZCBJZCBMZW5ndGguCisgICAgICAgIGtTZWVkSWRMZW5ndGg4ICA9IDIgPDwgNiwgIC8vLzwgOC1ieXRlIE1QTCBTZWVkIElkIExlbmd0aC4KKyAgICAgICAga1NlZWRJZExlbmd0aDE2ID0gMyA8PCA2LCAgLy8vPCAxNi1ieXRlIE1QTCBTZWVkIElkIExlbmd0aC4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlZWQgSWQgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1QTCBTZWVkIElkIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIFNlZWRJZExlbmd0aCBHZXRTZWVkSWRMZW5ndGgodm9pZCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VlZElkTGVuZ3RoPihtQ29udHJvbCAmIGtTZWVkSWRMZW5ndGhNYXNrKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTVBMIFNlZWQgSWQgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlZWRJZExlbmd0aCAgVGhlIE1QTCBTZWVkIExlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2VlZElkTGVuZ3RoKFNlZWRJZExlbmd0aCBhU2VlZElkTGVuZ3RoKSB7IG1Db250cm9sID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oKG1Db250cm9sICYgfmtTZWVkSWRMZW5ndGhNYXNrKSB8IGFTZWVkSWRMZW5ndGgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIE1QTCBNIGZsYWcgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIE1QTCBNIGZsYWcgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBNUEwgTSBmbGFnIGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzTWF4RmxhZ1NldCh2b2lkKSB7IHJldHVybiAobUNvbnRyb2wgJiBrTWF4RmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBNUEwgTSBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhck1heEZsYWcodm9pZCkgeyBtQ29udHJvbCAmPSB+a01heEZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1QTCBNIGZsYWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1heEZsYWcodm9pZCkgeyBtQ29udHJvbCB8PSBrTWF4RmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1QTCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0U2VxdWVuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNUEwgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VxdWVuY2UgIFRoZSBNUEwgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlcXVlbmNlKHVpbnQ4X3QgYVNlcXVlbmNlKSB7IG1TZXF1ZW5jZSA9IGFTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTZWVkSWQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtU2VlZElkKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VlZElkICBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlZWRJZCh1aW50MTZfdCBhU2VlZElkKSB7IG1TZWVkSWQgPSBIb3N0U3dhcDE2KGFTZWVkSWQpOyB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1NlZWRJZExlbmd0aE1hc2sgPSAzIDw8IDYsCisgICAgICAgIGtNYXhGbGFnID0gMSA8PCA1CisgICAgfTsKKyAgICB1aW50OF90ICBtQ29udHJvbDsKKyAgICB1aW50OF90ICBtU2VxdWVuY2U7CisgICAgdWludDE2X3QgbVNlZWRJZDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBNUEwncyBTZWVkIFNldCBlbnRyeS4KKyAqCisgKi8KK2NsYXNzIE1wbFNlZWRFbnRyeQoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1QTCBTZWVkIElkIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1QTCBTZWVkIElkIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0U2VlZElkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TZWVkSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1QTCBTZWVkIElkIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlZWRJZCAgVGhlIE1QTCBTZWVkIElkIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWVkSWQodWludDE2X3QgYVNlZWRJZCkgeyBtU2VlZElkID0gYVNlZWRJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1QTCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0U2VxdWVuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNUEwgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VxdWVuY2UgIFRoZSBNUEwgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlcXVlbmNlKHVpbnQ4X3QgYVNlcXVlbmNlKSB7IG1TZXF1ZW5jZSA9IGFTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlZWQgU2V0IGVudHJ5J3MgcmVtYWluaW5nIGxpZmV0aW1lLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1QTCBTZWVkIFNldCBlbnRyeSdzIHJlbWFpbmluZyBsaWZldGltZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGlmZXRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbUxpZmV0aW1lOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSByZW1haW5pbmcgbGlmZXRpbWUgb2YgdGhlIFNlZWQgU2V0IGVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpZmV0aW1lICBUaGUgcmVtYWluaW5nIGxpZmV0aW1lIG9mIHRoZSBTZWVkIFNldCBlbnRyeS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlmZXRpbWUodWludDhfdCBhTGlmZXRpbWUpIHsgbUxpZmV0aW1lID0gYUxpZmV0aW1lOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbVNlZWRJZDsKKyAgICB1aW50OF90ICBtU2VxdWVuY2U7CisgICAgdWludDhfdCAgbUxpZmV0aW1lOworfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgbWV0YWRhdGEgcmVxdWlyZWQgZm9yIE1QTCByZXRyYW5zbWlzc2lvbnMuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTXBsQnVmZmVyZWRNZXNzYWdlTWV0YWRhdGEKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yIGZvciB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTXBsQnVmZmVyZWRNZXNzYWdlTWV0YWRhdGEodm9pZCk6CisgICAgICAgIG1TZWVkSWQoMCksCisgICAgICAgIG1TZXF1ZW5jZSgwKSwKKyAgICAgICAgbVRyYW5zbWlzc2lvbkNvdW50KDApLAorICAgICAgICBtVHJhbnNtaXNzaW9uVGltZSgwKSwKKyAgICAgICAgbUludGVydmFsT2Zmc2V0KDApIHsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBNUEwgQnVmZmVyZWQgTWVzc2FnZSBtZXRhZGF0YSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBieXRlcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBhdmFpbGFibGUgYnVmZmVycyB0byBncm93IHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRUbyhNZXNzYWdlICZhTWVzc2FnZSkgY29uc3QgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKHRoaXMsIHNpemVvZigqdGhpcykpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWFkcyByZXF1ZXN0IGRhdGEgZnJvbSB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IFJlYWRGcm9tKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlKSB7CisgICAgICAgIHJldHVybiBhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldExlbmd0aCgpIC0gc2l6ZW9mKCp0aGlzKSwgc2l6ZW9mKCp0aGlzKSwgdGhpcyk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgTVBMIEJ1ZmZlcmVkIE1lc3NzYWdlIG1ldGFkYXRhIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZUZyb20oTWVzc2FnZSAmYU1lc3NhZ2UpIHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLlNldExlbmd0aChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZigqdGhpcykpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIE1QTCBCdWZmZXJlZCBNZXNzc2FnZSBtZXRhZGF0YSBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gdXBkYXRlZC4KKyAgICAgKgorICAgICAqLworICAgIGludCBVcGRhdGVJbihNZXNzYWdlICZhTWVzc2FnZSkgY29uc3QgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuV3JpdGUoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoKnRoaXMpLCBzaXplb2YoKnRoaXMpLCB0aGlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGJlZm9yZSB0aGUgZ2l2ZW4gdGltZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBPdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc0VhcmxpZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1UcmFuc21pc3Npb25UaW1lKSA+IDApOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGFmdGVyIHRoZSBnaXZlbiB0aW1lLgorICAgICAqIEByZXR2YWwgRkFMU0UgIE90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzTGF0ZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1UcmFuc21pc3Npb25UaW1lKSA8IDApOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTZWVkSWQodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlZWRJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VlZElkICBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlZWRJZCh1aW50MTZfdCBhU2VlZElkKSB7IG1TZWVkSWQgPSBhU2VlZElkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNUEwgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTVBMIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTZXF1ZW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBtU2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1QTCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZXF1ZW5jZSAgVGhlIE1QTCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2VxdWVuY2UodWludDhfdCBhU2VxdWVuY2UpIHsgbVNlcXVlbmNlID0gYVNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxyZWFkeSBwcmVmb3JtZWQgdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYWxyZWFkeSBwcmVmb3JtZWQgdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0VHJhbnNtaXNzaW9uQ291bnQodm9pZCkgY29uc3QgeyByZXR1cm4gbVRyYW5zbWlzc2lvbkNvdW50OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBudW1iZXIgb2YgYWxyZWFkeSBwZXJmb3JtZWQgdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUcmFuc21pc3Npb25Db3VudCAgVGhlIG51bWJlciBvZiBhbHJlYWR5IHBlcmZvcm1lZCB0cmFuc21pc3Npb25zLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUcmFuc21pc3Npb25Db3VudCh1aW50OF90IGFUcmFuc21pc3Npb25Db3VudCkgeyBtVHJhbnNtaXNzaW9uQ291bnQgPSBhVHJhbnNtaXNzaW9uQ291bnQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHRyYW5zbWlzc2lvbiB0aW1lc3RhbXAgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdHJhbnNtaXNzaW9uIHRpbWVzdGFtcCBvZiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFRyYW5zbWlzc2lvblRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbVRyYW5zbWlzc2lvblRpbWU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHRyYW5zbWlzc2lvbiB0aW1lc3RhbXAgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVHJhbnNtaXNzaW9uVGltZSAgVGhlIHRyYW5zbWlzc2lvbiB0aW1lc3RhbXAgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRyYW5zbWlzc2lvblRpbWUodWludDMyX3QgYVRyYW5zbWlzc2lvblRpbWUpIHsgbVRyYW5zbWlzc2lvblRpbWUgPSBhVHJhbnNtaXNzaW9uVGltZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgb2Zmc2V0IGZyb20gdGhlIHRyYW5zbWlzc2lvbiB0aW1lIHRvIHRoZSBlbmQgb2YgdHJpY2tsZSBpbnRlcnZhbC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBvZmZzZXQgZnJvbSB0aGUgdGhlIHRyYW5zbWlzc2lvbiB0aW1lIHRvIHRoZSBlbmQgb2YgdHJpY2tsZSBpbnRlcnZhbC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0SW50ZXJ2YWxPZmZzZXQodm9pZCkgY29uc3QgeyByZXR1cm4gbUludGVydmFsT2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBvZmZzZXQgZnJvbSB0aGUgdHJhbnNtaXNzaW9uIHRpbWUgdG8gdGhlIGVuZCBvZiB0cmlja2xlIGludGVydmFsLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUludGVydmFsT2Zmc2V0ICBUaGUgb2Zmc2V0IGZyb20gdGhlIHRoZSB0cmFuc21pc3Npb24gdGltZSB0byB0aGUgZW5kIG9mIHRyaWNrbGUgaW50ZXJ2YWwuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEludGVydmFsT2Zmc2V0KHVpbnQ4X3QgYUludGVydmFsT2Zmc2V0KSB7IG1JbnRlcnZhbE9mZnNldCA9IGFJbnRlcnZhbE9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIHRoZSBuZXh0IHRyYW5zbWlzc2lvbiB0aW1lIGZvciB0aGUgTVBMIERhdGEgTWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUN1cnJlbnRUaW1lIEN1cnJlbnQgdGltZSAoaW4gbWlsbGlzZWNvbmRzKS4KKyAgICAgKiBAcGFyYW1baW5dIGFJbnRlcnZhbCAgICBUaGUgY3VycmVudCBpbnRlcnZhbCBzaXplIChpbiBtaWxsaXNlY29uZHMpLgorICAgICAqLworICAgIHZvaWQgR2VuZXJhdGVOZXh0VHJhbnNtaXNzaW9uVGltZSh1aW50MzJfdCBhQ3VycmVudFRpbWUsIHVpbnQ4X3QgYUludGVydmFsKTsKKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtU2VlZElkOworICAgIHVpbnQ4X3QgIG1TZXF1ZW5jZTsKKyAgICB1aW50OF90ICBtVHJhbnNtaXNzaW9uQ291bnQ7CisgICAgdWludDMyX3QgbVRyYW5zbWlzc2lvblRpbWU7CisgICAgdWludDhfdCAgbUludGVydmFsT2Zmc2V0OworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1QTCBtZXNzYWdlIHByb2Nlc3NpbmcuCisgKgorICovCitjbGFzcyBNcGw6IHB1YmxpYyBJcDZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgTVBMIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJcDYgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IG5ldHdvcmsgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTXBsKElwNiAmYUlwNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgTVBMIG9wdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFPcHRpb24gICBBIHJlZmVyZW5jZSB0byB0aGUgTVBMIGhlYWRlciB0byBpbml0aWFsaXplLgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdE9wdGlvbihPcHRpb25NcGwgJmFPcHRpb24sIGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb2Nlc3NlcyBhbiBNUEwgb3B0aW9uLiBXaGVuIHRoZSBNUEwgbW9kdWxlIGFjdHMgYXMgYW4gTVBMIEZvcndhcmRlcgorICAgICAqIGl0IGRpc3NlbWluYXRlcyBNUEwgRGF0YSBNZXNzYWdlIHVzaW5nIFRyaWNrbGUgdGltZXIgZXhwaXJhdGlvbnMuIFdoZW4gYWN0cyBhcyBhbgorICAgICAqIE1QTCBTZWVkIGl0IGFsbG93cyB0byBzZW5kIHRoZSBmaXJzdCBNUEwgRGF0YSBNZXNzYWdlIGRpcmVjdGx5LCB0aGVuIHNldHMgdXAgVHJpY2tsZQorICAgICAqIHRpbWVyIGV4cGlyYXRpb25zIGZvciBzdWJzZXF1ZW50IHJldHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IFNvdXJjZSBBZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gIGFJc091dGJvdW5kIFRSVUUgaWYgdGhpcyBtZXNzYWdlIHdhcyBsb2NhbGx5IGdlbmVyYXRlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIHRoZSBNUEwgb3B0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfRFJPUCAgVGhlIE1QTCBtZXNzYWdlIGlzIGEgZHVwbGljYXRlIGFuZCBzaG91bGQgYmUgZHJvcHBlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUHJvY2Vzc09wdGlvbihNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MsIGJvb2wgYUlzT3V0Ym91bmQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTZWVkSWQodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlZWRJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VlZElkICBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlZWRJZCh1aW50MTZfdCBhU2VlZElkKSB7IG1TZWVkSWQgPSBhU2VlZElkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBNUEwgbnVtYmVyIG9mIFRyaWNrbGUgdGltZXIgZXhwaXJhdGlvbnMgdGhhdCBvY2N1ciBiZWZvcmUKKyAgICAgKiB0ZXJtaW5hdGluZyB0aGUgVHJpY2tsZSBhbGdvcml0aG0ncyByZXRyYW5zbWlzc2lvbiBvZiBhIGdpdmVuIE1QTCBEYXRhIE1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTVBMIG51bWJlciBvZiBUcmlja2xlIHRpbWVyIGV4cGlyYXRpb25zLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRUaW1lckV4cGlyYXRpb25zKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1UaW1lckV4cGlyYXRpb25zOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNUEwgbnVtYmVyIG9mIFRyaWNrbGUgdGltZXIgZXhwaXJhdGlvbnMgdGhhdCBvY2N1ciBiZWZvcmUKKyAgICAgKiB0ZXJtaW5hdGluZyB0aGUgVHJpY2tsZSBhbGdvcml0aG0ncyByZXRyYW5zbWlzc2lvbiBvZiBhIGdpdmVuIE1QTCBEYXRhIE1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZXJFeHBpcmF0aW9ucyAgVGhlIG51bWJlciBvZiBUcmlja2xlIHRpbWVyIGV4cGlyYXRpb25zLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUaW1lckV4cGlyYXRpb25zKHVpbnQ4X3QgYVRpbWVyRXhwaXJhdGlvbnMpIHsgbVRpbWVyRXhwaXJhdGlvbnMgPSBhVGltZXJFeHBpcmF0aW9uczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSVB2NiBtYXRjaGluZyBhZGRyZXNzLCB0aGF0IGFsbG93cyB0byBlbGlkZSBNUEwgU2VlZCBJZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUFkZHJlc3MgVGhlIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBtYXRjaGluZyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYXRjaGluZ0FkZHJlc3MoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpIHsgbU1hdGNoaW5nQWRkcmVzcyA9ICZhQWRkcmVzczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyZWQgbWVzc2FnZSBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyZWQgbWVzc2FnZSBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBNZXNzYWdlUXVldWUgJkdldEJ1ZmZlcmVkTWVzc2FnZVNldCh2b2lkKSBjb25zdCB7IHJldHVybiBtQnVmZmVyZWRNZXNzYWdlU2V0OyB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga051bVNlZWRFbnRyaWVzID0gT1BFTlRIUkVBRF9DT05GSUdfTVBMX1NFRURfU0VUX0VOVFJJRVMsCisgICAgICAgIGtTZWVkRW50cnlMaWZldGltZSA9IE9QRU5USFJFQURfQ09ORklHX01QTF9TRUVEX1NFVF9FTlRSWV9MSUZFVElNRSwKKyAgICAgICAga1NlZWRFbnRyeUxpZmV0aW1lRHQgPSAxMDAwLAorICAgICAgICBrRGF0YU1lc3NhZ2VJbnRlcnZhbCA9IDY0CisgICAgfTsKKworICAgIG90RXJyb3IgVXBkYXRlU2VlZFNldCh1aW50MTZfdCBhU2VlZElkLCB1aW50OF90IGFTZXF1ZW5jZSk7CisgICAgdm9pZCBVcGRhdGVCdWZmZXJlZFNldCh1aW50MTZfdCBhU2VlZElkLCB1aW50OF90IGFTZXF1ZW5jZSk7CisgICAgdm9pZCBBZGRCdWZmZXJlZE1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFTZWVkSWQsIHVpbnQ4X3QgYVNlcXVlbmNlLCBib29sIGFJc091dGJvdW5kKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVNlZWRTZXRUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVNlZWRTZXRUaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKHZvaWQpOworCisgICAgc3RhdGljIE1wbCAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgVGltZXIgbVNlZWRTZXRUaW1lcjsKKyAgICBUaW1lciBtUmV0cmFuc21pc3Npb25UaW1lcjsKKworICAgIHVpbnQ4X3QgbVRpbWVyRXhwaXJhdGlvbnM7CisgICAgdWludDhfdCBtU2VxdWVuY2U7CisgICAgdWludDE2X3QgbVNlZWRJZDsKKyAgICBjb25zdCBBZGRyZXNzICptTWF0Y2hpbmdBZGRyZXNzOworCisgICAgTXBsU2VlZEVudHJ5IG1TZWVkU2V0W2tOdW1TZWVkRW50cmllc107CisgICAgTWVzc2FnZVF1ZXVlIG1CdWZmZXJlZE1lc3NhZ2VTZXQ7Cit9OworCisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkVUX0lQNl9NUExfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNl9yb3V0ZXMuY3BwIGIvc3JjL2NvcmUvbmV0L2lwNl9yb3V0ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMDViNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2X3JvdXRlcy5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgSVB2NiByb3V0ZSB0YWJsZXMuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJpcDZfcm91dGVzLmhwcCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisjaW5jbHVkZSAibmV0L25ldGlmLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBJcDYgeworCitSb3V0ZXM6OlJvdXRlcyhJcDYgJmFJcDYpOgorICAgIElwNkxvY2F0b3IoYUlwNiksCisgICAgbVJvdXRlcyhOVUxMKQoreworfQorCitvdEVycm9yIFJvdXRlczo6QWRkKFJvdXRlICZhUm91dGUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBmb3IgKFJvdXRlICpjdXIgPSBtUm91dGVzOyBjdXI7IGN1ciA9IGN1ci0+bU5leHQpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoY3VyICE9ICZhUm91dGUsIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisgICAgfQorCisgICAgYVJvdXRlLm1OZXh0ID0gbVJvdXRlczsKKyAgICBtUm91dGVzID0gJmFSb3V0ZTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgUm91dGVzOjpSZW1vdmUoUm91dGUgJmFSb3V0ZSkKK3sKKyAgICBpZiAoJmFSb3V0ZSA9PSBtUm91dGVzKQorICAgIHsKKyAgICAgICAgbVJvdXRlcyA9IGFSb3V0ZS5tTmV4dDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChSb3V0ZSAqY3VyID0gbVJvdXRlczsgY3VyOyBjdXIgPSBjdXItPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY3VyLT5tTmV4dCA9PSAmYVJvdXRlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN1ci0+bU5leHQgPSBhUm91dGUubU5leHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhUm91dGUubU5leHQgPSBOVUxMOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2ludDhfdCBSb3V0ZXM6Okxvb2t1cChjb25zdCBBZGRyZXNzICZhU291cmNlLCBjb25zdCBBZGRyZXNzICZhRGVzdGluYXRpb24pCit7CisgICAgaW50OF90IG1heFByZWZpeE1hdGNoID0gLTE7CisgICAgdWludDhfdCBwcmVmaXhNYXRjaDsKKyAgICBpbnQ4X3QgcnZhbCA9IC0xOworCisgICAgZm9yIChSb3V0ZSAqY3VyID0gbVJvdXRlczsgY3VyOyBjdXIgPSBjdXItPm1OZXh0KQorICAgIHsKKyAgICAgICAgcHJlZml4TWF0Y2ggPSBjdXItPm1QcmVmaXguUHJlZml4TWF0Y2goYURlc3RpbmF0aW9uKTsKKworICAgICAgICBpZiAocHJlZml4TWF0Y2ggPCBjdXItPm1QcmVmaXhMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHByZWZpeE1hdGNoID4gY3VyLT5tUHJlZml4TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBwcmVmaXhNYXRjaCA9IGN1ci0+bVByZWZpeExlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXhQcmVmaXhNYXRjaCA+IHN0YXRpY19jYXN0PGludDhfdD4ocHJlZml4TWF0Y2gpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1heFByZWZpeE1hdGNoID0gc3RhdGljX2Nhc3Q8aW50OF90PihwcmVmaXhNYXRjaCk7CisgICAgICAgIHJ2YWwgPSBjdXItPm1JbnRlcmZhY2VJZDsKKyAgICB9CisKKyAgICBmb3IgKE5ldGlmICpuZXRpZiA9IEdldElwNigpLkdldE5ldGlmTGlzdCgpOyBuZXRpZjsgbmV0aWYgPSBuZXRpZi0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKG5ldGlmLT5Sb3V0ZUxvb2t1cChhU291cmNlLCBhRGVzdGluYXRpb24sICZwcmVmaXhNYXRjaCkgPT0gT1RfRVJST1JfTk9ORSAmJgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50OF90PihwcmVmaXhNYXRjaCkgPiBtYXhQcmVmaXhNYXRjaCkKKyAgICAgICAgeworICAgICAgICAgICAgbWF4UHJlZml4TWF0Y2ggPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHByZWZpeE1hdGNoKTsKKyAgICAgICAgICAgIHJ2YWwgPSBuZXRpZi0+R2V0SW50ZXJmYWNlSWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBydmFsOworfQorCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9pcDZfcm91dGVzLmhwcCBiL3NyYy9jb3JlL25ldC9pcDZfcm91dGVzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjJhMTU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L2lwNl9yb3V0ZXMuaHBwCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElQNl9ST1VURVNfSFBQXworI2RlZmluZSBJUDZfUk9VVEVTX0hQUF8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBJUHY2IHJvdXRpbmcgdGFibGVzLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9yb3V0ZXMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIElwNiB7CisKK2NsYXNzIElwNjsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWlwNi1pcDYKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gSVB2NiByb3V0ZS4KKyAqCisgKi8KK3N0cnVjdCBSb3V0ZQoreworICAgIEFkZHJlc3MgICAgICAgbVByZWZpeDsgICAgICAgIC8vLzwgVGhlIElQdjYgcHJlZml4LgorICAgIHVpbnQ4X3QgICAgICAgbVByZWZpeExlbmd0aDsgIC8vLzwgVGhlIElQdjYgcHJlZml4IGxlbmd0aC4KKyAgICBpbnQ4X3QgICAgICAgIG1JbnRlcmZhY2VJZDsgICAvLy88IFRoZSBpbnRlcmZhY2UgaWRlbnRpZmllci4KKyAgICBzdHJ1Y3QgUm91dGUgKm1OZXh0OyAgICAgICAgICAvLy88IEEgcG9pbnRlciB0byB0aGUgbmV4dCBJUHY2IHJvdXRlLgorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSVB2NiByb3V0ZSBtYW5hZ2VtZW50LgorICoKKyAqLworY2xhc3MgUm91dGVzOiBwdWJsaWMgSXA2TG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJcDYgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IG5ldHdvcmsgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgUm91dGVzKElwNiAmYUlwNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGFuIElQdjYgcm91dGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGUgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHJvdXRlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIHJvdXRlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIHJvdXRlIHdhcyBhbHJlYWR5IGFkZGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBZGQoUm91dGUgJmFSb3V0ZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFuIElQdjYgcm91dGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGUgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHJvdXRlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSByb3V0ZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgVGhlIHJvdXRlIHdhcyBub3QgYWRkZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZShSb3V0ZSAmYVJvdXRlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHNvdXJjZS1kZXN0aW5hdGlvbiByb3V0ZSBsb29rdXAuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU291cmNlICAgICAgIFRoZSBJUHY2IHNvdXJjZSBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gIGFEZXN0aW5hdGlvbiAgVGhlIElQdjYgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBpbnRlcmZhY2UgaWRlbnRpZmllciBmb3IgdGhlIGJlc3Qgcm91dGUgb3IgLTEgaWYgbm8gcm91dGUgaXMgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IExvb2t1cChjb25zdCBBZGRyZXNzICZhU291cmNlLCBjb25zdCBBZGRyZXNzICZhRGVzdGluYXRpb24pOworCitwcml2YXRlOgorICAgIFJvdXRlICptUm91dGVzOworfTsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRfSVA2X1JPVVRFU19IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvbmV0aWYuY3BwIGIvc3JjL2NvcmUvbmV0L25ldGlmLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjUyYjE5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L25ldGlmLmNwcApAQCAtMCwwICsxLDQ3NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlcy4KKyAqLworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJuZXRpZi5ocHAiCisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDYuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIElwNiB7CisKK05ldGlmOjpOZXRpZihJcDYgJmFJcDYsIGludDhfdCBhSW50ZXJmYWNlSWQpOgorICAgIElwNkxvY2F0b3IoYUlwNiksCisgICAgbUNhbGxiYWNrcyhOVUxMKSwKKyAgICBtVW5pY2FzdEFkZHJlc3NlcyhOVUxMKSwKKyAgICBtTXVsdGljYXN0QWRkcmVzc2VzKE5VTEwpLAorICAgIG1JbnRlcmZhY2VJZChhSW50ZXJmYWNlSWQpLAorICAgIG1BbGxSb3V0ZXJzU3Vic2NyaWJlZChmYWxzZSksCisgICAgbU11bHRpY2FzdFByb21pc2N1b3VzKGZhbHNlKSwKKyAgICBtU3RhdGVDaGFuZ2VkVGFzayhhSXA2Lm1UYXNrbGV0U2NoZWR1bGVyLCAmTmV0aWY6OkhhbmRsZVN0YXRlQ2hhbmdlZFRhc2ssIHRoaXMpLAorICAgIG1OZXh0KE5VTEwpLAorICAgIG1TdGF0ZUNoYW5nZWRGbGFncygwKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1FeHRVbmljYXN0QWRkcmVzc2VzKSAvIHNpemVvZihtRXh0VW5pY2FzdEFkZHJlc3Nlc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIC8vIFRvIG1hcmsgdGhlIGFkZHJlc3MgYXMgdW51c2VkL2F2YWlsYWJsZSwgc2V0IHRoZSBgbU5leHRgIHRvIHBvaW50IGJhY2sgdG8gaXRzZWxmLgorICAgICAgICBtRXh0VW5pY2FzdEFkZHJlc3Nlc1tpXS5tTmV4dCA9ICZtRXh0VW5pY2FzdEFkZHJlc3Nlc1tpXTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihtRXh0TXVsdGljYXN0QWRkcmVzc2VzKSAvIHNpemVvZihtRXh0TXVsdGljYXN0QWRkcmVzc2VzWzBdKTsgaSsrKQorICAgIHsKKyAgICAgICAgLy8gVG8gbWFyayB0aGUgYWRkcmVzcyBhcyB1bnVzZWQvYXZhaWxhYmxlLCBzZXQgdGhlIGBtTmV4dGAgdG8gcG9pbnQgYmFjayB0byBpdHNlbGYuCisgICAgICAgIG1FeHRNdWx0aWNhc3RBZGRyZXNzZXNbaV0ubU5leHQgPSAmbUV4dE11bHRpY2FzdEFkZHJlc3Nlc1tpXTsKKyAgICB9Cit9CisKK290RXJyb3IgTmV0aWY6OlJlZ2lzdGVyQ2FsbGJhY2soTmV0aWZDYWxsYmFjayAmYUNhbGxiYWNrKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChOZXRpZkNhbGxiYWNrICpjdXIgPSBtQ2FsbGJhY2tzOyBjdXI7IGN1ciA9IGN1ci0+bU5leHQpCisgICAgeworICAgICAgICBpZiAoY3VyID09ICZhQ2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9BTFJFQURZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFDYWxsYmFjay5tTmV4dCA9IG1DYWxsYmFja3M7CisgICAgbUNhbGxiYWNrcyA9ICZhQ2FsbGJhY2s7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5ldGlmOjpSZW1vdmVDYWxsYmFjayhOZXRpZkNhbGxiYWNrICZhQ2FsbGJhY2spCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFk7CisgICAgTmV0aWZDYWxsYmFjayAqcHJldiA9IE5VTEw7CisKKyAgICBmb3IgKE5ldGlmQ2FsbGJhY2sgKmN1ciA9IG1DYWxsYmFja3M7IGN1cjsgY3VyID0gY3VyLT5tTmV4dCkKKyAgICB7CisgICAgICAgIGlmIChjdXIgPT0gJmFDYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHByZXYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJldi0+bU5leHQgPSBjdXItPm1OZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1DYWxsYmFja3MgPSBtQ2FsbGJhY2tzLT5tTmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3VyLT5tTmV4dCA9IE5VTEw7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHByZXYgPSBjdXI7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitib29sIE5ldGlmOjpJc011bHRpY2FzdFN1YnNjcmliZWQoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpIGNvbnN0Cit7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisKKyAgICBpZiAoYUFkZHJlc3MuSXNMaW5rTG9jYWxBbGxOb2Rlc011bHRpY2FzdCgpIHx8IGFBZGRyZXNzLklzUmVhbG1Mb2NhbEFsbE5vZGVzTXVsdGljYXN0KCkgfHwKKyAgICAgICAgYUFkZHJlc3MuSXNSZWFsbUxvY2FsQWxsTXBsRm9yd2FyZGVycygpKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhydmFsID0gdHJ1ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKGFBZGRyZXNzLklzTGlua0xvY2FsQWxsUm91dGVyc011bHRpY2FzdCgpIHx8IGFBZGRyZXNzLklzUmVhbG1Mb2NhbEFsbFJvdXRlcnNNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IG1BbGxSb3V0ZXJzU3Vic2NyaWJlZCk7CisgICAgfQorCisgICAgZm9yIChOZXRpZk11bHRpY2FzdEFkZHJlc3MgKmN1ciA9IG1NdWx0aWNhc3RBZGRyZXNzZXM7IGN1cjsgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAobWVtY21wKCZjdXItPm1BZGRyZXNzLCAmYUFkZHJlc3MsIHNpemVvZihjdXItPm1BZGRyZXNzKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK290RXJyb3IgTmV0aWY6OlN1YnNjcmliZU11bHRpY2FzdChOZXRpZk11bHRpY2FzdEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChOZXRpZk11bHRpY2FzdEFkZHJlc3MgKmN1ciA9IG1NdWx0aWNhc3RBZGRyZXNzZXM7IGN1cjsgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoY3VyID09ICZhQWRkcmVzcykKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworICAgICAgICB9CisgICAgfQorCisgICAgYUFkZHJlc3MubU5leHQgPSBtTXVsdGljYXN0QWRkcmVzc2VzOworICAgIG1NdWx0aWNhc3RBZGRyZXNzZXMgPSAmYUFkZHJlc3M7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5ldGlmOjpVbnN1YnNjcmliZU11bHRpY2FzdChjb25zdCBOZXRpZk11bHRpY2FzdEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKG1NdWx0aWNhc3RBZGRyZXNzZXMgPT0gJmFBZGRyZXNzKQorICAgIHsKKyAgICAgICAgbU11bHRpY2FzdEFkZHJlc3NlcyA9IG1NdWx0aWNhc3RBZGRyZXNzZXMtPkdldE5leHQoKTsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKyAgICBlbHNlIGlmIChtTXVsdGljYXN0QWRkcmVzc2VzICE9IE5VTEwpCisgICAgeworICAgICAgICBmb3IgKE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqY3VyID0gbU11bHRpY2FzdEFkZHJlc3NlczsgY3VyLT5HZXROZXh0KCk7IGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY3VyLT5tTmV4dCA9PSAmYUFkZHJlc3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3VyLT5tTmV4dCA9IGFBZGRyZXNzLm1OZXh0OworICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOZXRpZjo6U3Vic2NyaWJlRXh0ZXJuYWxNdWx0aWNhc3QoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTmV0aWZNdWx0aWNhc3RBZGRyZXNzICplbnRyeTsKKyAgICBzaXplX3QgbnVtID0gc2l6ZW9mKG1FeHRNdWx0aWNhc3RBZGRyZXNzZXMpIC8gc2l6ZW9mKG1FeHRNdWx0aWNhc3RBZGRyZXNzZXNbMF0pOworCisgICAgaWYgKElzTXVsdGljYXN0U3Vic2NyaWJlZChhQWRkcmVzcykpCisgICAgeworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisgICAgfQorCisgICAgLy8gRmluZCBhbiBhdmFpbGFibGUgZW50cnkgaW4gdGhlIGBtRXh0TXVsdGljYXN0QWRkcmVzc2VzYCBhcnJheS4KKyAgICBmb3IgKGVudHJ5ID0gJm1FeHRNdWx0aWNhc3RBZGRyZXNzZXNbMF07IG51bSA+IDA7IG51bS0tLCBlbnRyeSsrKQorICAgIHsKKyAgICAgICAgLy8gSW4gYW4gdW51c2VkL2F2YWlsYWJsZSBlbnRyeSwgYG1OZXh0YCBwb2ludHMgYmFjayB0byB0aGUgZW50cnkgaXRzZWxmLgorICAgICAgICBpZiAoZW50cnktPm1OZXh0ID09IGVudHJ5KQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChudW0gPiAwLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgLy8gQ29weSB0aGUgYWRkcmVzcyBpbnRvIHRoZSBhdmFpbGFibGUgZW50cnkgYW5kIGFkZCBpdCB0byBsaW5rZWQtbGlzdC4KKyAgICBlbnRyeS0+bUFkZHJlc3MgPSBhQWRkcmVzczsKKyAgICBlbnRyeS0+bU5leHQgPSBtTXVsdGljYXN0QWRkcmVzc2VzOworICAgIG1NdWx0aWNhc3RBZGRyZXNzZXMgPSBlbnRyeTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmV0aWY6OlVuc3Vic2NyaWJlRXh0ZXJuYWxNdWx0aWNhc3QoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTmV0aWZNdWx0aWNhc3RBZGRyZXNzICplbnRyeTsKKyAgICBOZXRpZk11bHRpY2FzdEFkZHJlc3MgKmxhc3QgPSBOVUxMOworICAgIHNpemVfdCBudW0gPSBzaXplb2YobUV4dE11bHRpY2FzdEFkZHJlc3NlcykgLyBzaXplb2YobUV4dE11bHRpY2FzdEFkZHJlc3Nlc1swXSk7CisKKyAgICBmb3IgKGVudHJ5ID0gbU11bHRpY2FzdEFkZHJlc3NlczsgZW50cnk7IGVudHJ5ID0gZW50cnktPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChtZW1jbXAoJmVudHJ5LT5tQWRkcmVzcywgJmFBZGRyZXNzLCBzaXplb2Yob3RJcDZBZGRyZXNzKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KChlbnRyeSA+PSAmbUV4dE11bHRpY2FzdEFkZHJlc3Nlc1swXSkgJiYgKGVudHJ5IDwgJm1FeHRNdWx0aWNhc3RBZGRyZXNzZXNbbnVtXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgICAgICAgICBpZiAobGFzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsYXN0LT5tTmV4dCA9IGVudHJ5LT5HZXROZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU11bHRpY2FzdEFkZHJlc3NlcyA9IGVudHJ5LT5HZXROZXh0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgbGFzdCA9IGVudHJ5OworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChlbnRyeSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICAvLyBUbyBtYXJrIHRoZSBhZGRyZXNzIGVudHJ5IGFzIHVudXNlZC9hdmFpbGFibGUsIHNldCB0aGUgYG1OZXh0YCBwb2ludGVyIGJhY2sgdG8gdGhlIGVudHJ5IGl0c2VsZi4KKyAgICBlbnRyeS0+bU5leHQgPSBlbnRyeTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTmV0aWY6OlVuc3Vic2NyaWJlQWxsRXh0ZXJuYWxNdWx0aWNhc3RBZGRyZXNzZXModm9pZCkKK3sKKyAgICBzaXplX3QgbnVtID0gc2l6ZW9mKG1FeHRNdWx0aWNhc3RBZGRyZXNzZXMpIC8gc2l6ZW9mKG1FeHRNdWx0aWNhc3RBZGRyZXNzZXNbMF0pOworCisgICAgZm9yIChOZXRpZk11bHRpY2FzdEFkZHJlc3MgKmVudHJ5ID0gJm1FeHRNdWx0aWNhc3RBZGRyZXNzZXNbMF07IG51bSA+IDA7IG51bS0tLCBlbnRyeSsrKQorICAgIHsKKyAgICAgICAgLy8gSW4gdW51c2VkIGVudHJpZXMsIHRoZSBgbU5leHRgIHBvaW50cyBiYWNrIHRvIHRoZSBlbnRyeSBpdHNlbGYuCisgICAgICAgIGlmIChlbnRyeS0+bU5leHQgIT0gZW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFVuc3Vic2NyaWJlRXh0ZXJuYWxNdWx0aWNhc3QoKnN0YXRpY19jYXN0PEFkZHJlc3MgKj4oJmVudHJ5LT5tQWRkcmVzcykpOworICAgICAgICB9CisgICAgfQorfQorCitvdEVycm9yIE5ldGlmOjpBZGRVbmljYXN0QWRkcmVzcyhOZXRpZlVuaWNhc3RBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGZvciAoTmV0aWZVbmljYXN0QWRkcmVzcyAqY3VyID0gbVVuaWNhc3RBZGRyZXNzZXM7IGN1cjsgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoY3VyID09ICZhQWRkcmVzcykKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworICAgICAgICB9CisgICAgfQorCisgICAgYUFkZHJlc3MubU5leHQgPSBtVW5pY2FzdEFkZHJlc3NlczsKKyAgICBtVW5pY2FzdEFkZHJlc3NlcyA9ICZhQWRkcmVzczsKKworICAgIFNldFN0YXRlQ2hhbmdlZEZsYWdzKGFBZGRyZXNzLm1SbG9jID8gT1RfQ0hBTkdFRF9USFJFQURfUkxPQ19BRERFRCA6IE9UX0NIQU5HRURfSVA2X0FERFJFU1NfQURERUQpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOZXRpZjo6UmVtb3ZlVW5pY2FzdEFkZHJlc3MoY29uc3QgTmV0aWZVbmljYXN0QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAobVVuaWNhc3RBZGRyZXNzZXMgPT0gJmFBZGRyZXNzKQorICAgIHsKKyAgICAgICAgbVVuaWNhc3RBZGRyZXNzZXMgPSBtVW5pY2FzdEFkZHJlc3Nlcy0+R2V0TmV4dCgpOworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorICAgIGVsc2UgaWYgKG1VbmljYXN0QWRkcmVzc2VzICE9IE5VTEwpCisgICAgeworICAgICAgICBmb3IgKE5ldGlmVW5pY2FzdEFkZHJlc3MgKmN1ciA9IG1VbmljYXN0QWRkcmVzc2VzOyBjdXItPkdldE5leHQoKTsgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjdXItPm1OZXh0ID09ICZhQWRkcmVzcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdXItPm1OZXh0ID0gYUFkZHJlc3MubU5leHQ7CisgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9UX0ZPVU5EKQorICAgIHsKKyAgICAgICAgU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoYUFkZHJlc3MubVJsb2MgPyBPVF9DSEFOR0VEX1RIUkVBRF9STE9DX1JFTU9WRUQgOiBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX1JFTU9WRUQpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOZXRpZjo6QWRkRXh0ZXJuYWxVbmljYXN0QWRkcmVzcyhjb25zdCBOZXRpZlVuaWNhc3RBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBOZXRpZlVuaWNhc3RBZGRyZXNzICplbnRyeTsKKyAgICBzaXplX3QgbnVtID0gc2l6ZW9mKG1FeHRVbmljYXN0QWRkcmVzc2VzKSAvIHNpemVvZihtRXh0VW5pY2FzdEFkZHJlc3Nlc1swXSk7CisKKyAgICBmb3IgKGVudHJ5ID0gbVVuaWNhc3RBZGRyZXNzZXM7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAobWVtY21wKCZlbnRyeS0+bUFkZHJlc3MsICZhQWRkcmVzcy5tQWRkcmVzcywgc2l6ZW9mKG90SXA2QWRkcmVzcykpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgoZW50cnkgPj0gJm1FeHRVbmljYXN0QWRkcmVzc2VzWzBdKSAmJiAoZW50cnkgPCAmbUV4dFVuaWNhc3RBZGRyZXNzZXNbbnVtXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgICAgICAgICBlbnRyeS0+bVByZWZpeExlbmd0aCA9IGFBZGRyZXNzLm1QcmVmaXhMZW5ndGg7CisgICAgICAgICAgICBlbnRyeS0+bVByZWZlcnJlZCA9IGFBZGRyZXNzLm1QcmVmZXJyZWQ7CisgICAgICAgICAgICBlbnRyeS0+bVZhbGlkID0gYUFkZHJlc3MubVZhbGlkOworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRmluZCBhbiBhdmFpbGFibGUgZW50cnkgaW4gdGhlIGBtRXh0VW5pY2FzdEFkZHJlc3Nlc2AgYXJyYXkuCisgICAgZm9yIChlbnRyeSA9ICZtRXh0VW5pY2FzdEFkZHJlc3Nlc1swXTsgbnVtID4gMDsgbnVtLS0sIGVudHJ5KyspCisgICAgeworICAgICAgICAvLyBJbiBhbiB1bnVzZWQvYXZhaWxhYmxlIGVudHJ5LCBgbU5leHRgIHBvaW50cyBiYWNrIHRvIHRoZSBlbnRyeSBpdHNlbGYuCisgICAgICAgIGlmIChlbnRyeS0+bU5leHQgPT0gZW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KG51bSA+IDAsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvLyBDb3B5IHRoZSBuZXcgYWRkcmVzcyBpbnRvIHRoZSBhdmFpbGFibGUgZW50cnkgYW5kIGluc2VydCBpdCBpbiBsaW5rZWQtbGlzdC4KKyAgICAqZW50cnkgPSBhQWRkcmVzczsKKyAgICBlbnRyeS0+bU5leHQgPSBtVW5pY2FzdEFkZHJlc3NlczsKKyAgICBtVW5pY2FzdEFkZHJlc3NlcyA9IGVudHJ5OworCisgICAgU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9JUDZfQUREUkVTU19BRERFRCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5ldGlmOjpSZW1vdmVFeHRlcm5hbFVuaWNhc3RBZGRyZXNzKGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE5ldGlmVW5pY2FzdEFkZHJlc3MgKmVudHJ5OworICAgIE5ldGlmVW5pY2FzdEFkZHJlc3MgKmxhc3QgPSBOVUxMOworICAgIHNpemVfdCBudW0gPSBzaXplb2YobUV4dFVuaWNhc3RBZGRyZXNzZXMpIC8gc2l6ZW9mKG1FeHRVbmljYXN0QWRkcmVzc2VzWzBdKTsKKworICAgIGZvciAoZW50cnkgPSBtVW5pY2FzdEFkZHJlc3NlczsgZW50cnk7IGVudHJ5ID0gZW50cnktPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChtZW1jbXAoJmVudHJ5LT5tQWRkcmVzcywgJmFBZGRyZXNzLCBzaXplb2Yob3RJcDZBZGRyZXNzKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KChlbnRyeSA+PSAmbUV4dFVuaWNhc3RBZGRyZXNzZXNbMF0pICYmIChlbnRyeSA8ICZtRXh0VW5pY2FzdEFkZHJlc3Nlc1tudW1dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAgICAgICAgIGlmIChsYXN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxhc3QtPm1OZXh0ID0gZW50cnktPm1OZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1VbmljYXN0QWRkcmVzc2VzID0gZW50cnktPkdldE5leHQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBsYXN0ID0gZW50cnk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KGVudHJ5ICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworICAgIC8vIFRvIG1hcmsgdGhlIGFkZHJlc3MgZW50cnkgYXMgdW51c2VkL2F2YWlsYWJsZSwgc2V0IHRoZSBgbU5leHRgIHBvaW50ZXIgYmFjayB0byB0aGUgZW50cnkgaXRzZWxmLgorICAgIGVudHJ5LT5tTmV4dCA9IGVudHJ5OworCisgICAgU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9JUDZfQUREUkVTU19SRU1PVkVEKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTmV0aWY6OlJlbW92ZUFsbEV4dGVybmFsVW5pY2FzdEFkZHJlc3Nlcyh2b2lkKQoreworICAgIHNpemVfdCBudW0gPSBzaXplb2YobUV4dFVuaWNhc3RBZGRyZXNzZXMpIC8gc2l6ZW9mKG1FeHRVbmljYXN0QWRkcmVzc2VzWzBdKTsKKworICAgIGZvciAoTmV0aWZVbmljYXN0QWRkcmVzcyAqZW50cnkgPSAmbUV4dFVuaWNhc3RBZGRyZXNzZXNbMF07IG51bSA+IDA7IG51bS0tLCBlbnRyeSsrKQorICAgIHsKKyAgICAgICAgLy8gSW4gdW51c2VkIGVudHJpZXMsIHRoZSBgbU5leHRgIHBvaW50cyBiYWNrIHRvIHRoZSBlbnRyeSBpdHNlbGYuCisgICAgICAgIGlmIChlbnRyeS0+bU5leHQgIT0gZW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlbW92ZUV4dGVybmFsVW5pY2FzdEFkZHJlc3MoKnN0YXRpY19jYXN0PEFkZHJlc3MgKj4oJmVudHJ5LT5tQWRkcmVzcykpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIE5ldGlmOjpJc1VuaWNhc3RBZGRyZXNzKGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKSBjb25zdAoreworICAgIGJvb2wgcnZhbCA9IGZhbHNlOworCisgICAgZm9yIChjb25zdCBOZXRpZlVuaWNhc3RBZGRyZXNzICpjdXIgPSBtVW5pY2FzdEFkZHJlc3NlczsgY3VyOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldEFkZHJlc3MoKSA9PSBhQWRkcmVzcykKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgTmV0aWY6OlNldFN0YXRlQ2hhbmdlZEZsYWdzKHVpbnQzMl90IGFGbGFncykKK3sKKyAgICBtU3RhdGVDaGFuZ2VkRmxhZ3MgfD0gYUZsYWdzOworICAgIG1TdGF0ZUNoYW5nZWRUYXNrLlBvc3QoKTsKK30KKwordm9pZCBOZXRpZjo6SGFuZGxlU3RhdGVDaGFuZ2VkVGFzayhUYXNrbGV0ICZhVGFza2xldCkKK3sKKyAgICBHZXRPd25lcihhVGFza2xldCkuSGFuZGxlU3RhdGVDaGFuZ2VkVGFzaygpOworfQorCit2b2lkIE5ldGlmOjpIYW5kbGVTdGF0ZUNoYW5nZWRUYXNrKHZvaWQpCit7CisgICAgdWludDMyX3QgZmxhZ3MgPSBtU3RhdGVDaGFuZ2VkRmxhZ3M7CisKKyAgICBtU3RhdGVDaGFuZ2VkRmxhZ3MgPSAwOworCisgICAgZm9yIChOZXRpZkNhbGxiYWNrICpjYWxsYmFjayA9IG1DYWxsYmFja3M7IGNhbGxiYWNrOyBjYWxsYmFjayA9IGNhbGxiYWNrLT5tTmV4dCkKKyAgICB7CisgICAgICAgIGNhbGxiYWNrLT5DYWxsYmFjayhmbGFncyk7CisgICAgfQorfQorCitOZXRpZiAmTmV0aWY6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIE5ldGlmICZuZXRpZiA9ICpzdGF0aWNfY2FzdDxOZXRpZiAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBOZXRpZiAmbmV0aWYgPSBvdEdldFRocmVhZE5ldGlmKCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBuZXRpZjsKK30KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvbmV0aWYuaHBwIGIvc3JjL2NvcmUvbmV0L25ldGlmLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODY1YzlmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L25ldGlmLmhwcApAQCAtMCwwICsxLDU1MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElQdjYgbmV0d29yayBpbnRlcmZhY2VzLgorICovCisKKyNpZm5kZWYgTkVUX05FVElGX0hQUF8KKyNkZWZpbmUgTkVUX05FVElGX0hQUF8KKworI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3Rhc2tsZXQuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAibmV0L3NvY2tldC5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworY2xhc3MgSXA2OworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtaXA2LW5ldGlmCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlcy4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBJUHY2IExpbmsgQWRkcmVzcy4KKyAqCisgKi8KK2NsYXNzIExpbmtBZGRyZXNzCit7CitwdWJsaWMgOgorICAgIC8qKgorICAgICAqIEhhcmR3YXJlIHR5cGVzLgorICAgICAqCisgICAgICovCisgICAgZW51bSBIYXJkd2FyZVR5cGUKKyAgICB7CisgICAgICAgIGtFdWk2NCA9IDI3LAorICAgIH07CisgICAgSGFyZHdhcmVUeXBlICAgbVR5cGU7ICAgICAgIC8vLzwgTGluayBhZGRyZXNzIHR5cGUuCisgICAgdWludDhfdCAgICAgICAgbUxlbmd0aDsgICAgIC8vLzwgTGVuZ3RoIG9mIGxpbmsgYWRkcmVzcy4KKyAgICBNYWM6OkV4dEFkZHJlc3MgbUV4dEFkZHJlc3M7ICAvLy88IExpbmsgYWRkcmVzcy4KK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGFuIElQdjYgbmV0d29yayBpbnRlcmZhY2UgdW5pY2FzdCBhZGRyZXNzLgorICoKKyAqLworY2xhc3MgTmV0aWZVbmljYXN0QWRkcmVzczogcHVibGljIG90TmV0aWZBZGRyZXNzCit7CisgICAgZnJpZW5kIGNsYXNzIE5ldGlmOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHVuaWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IEFkZHJlc3MgJkdldEFkZHJlc3Modm9pZCkgY29uc3QgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IEFkZHJlc3MgKj4oJm1BZGRyZXNzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHVuaWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIEFkZHJlc3MgJkdldEFkZHJlc3Modm9pZCkgeyByZXR1cm4gKnN0YXRpY19jYXN0PEFkZHJlc3MgKj4oJm1BZGRyZXNzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBzY29wZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJUHY2IHNjb3BlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTY29wZSh2b2lkKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtU2NvcGVPdmVycmlkZVZhbGlkID8gc3RhdGljX2Nhc3Q8dWludDhfdD4obVNjb3BlT3ZlcnJpZGUpIDogR2V0QWRkcmVzcygpLkdldFNjb3BlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCB1bmljYXN0IGFkZHJlc3MgYXNzaWduZWQgdG8gdGhlIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV4dCB1bmljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBOZXRpZlVuaWNhc3RBZGRyZXNzICpHZXROZXh0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgKj4obU5leHQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBuZXh0IHVuaWNhc3QgYWRkcmVzcyBhc3NpZ25lZCB0byB0aGUgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBuZXh0IHVuaWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIE5ldGlmVW5pY2FzdEFkZHJlc3MgKkdldE5leHQodm9pZCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TmV0aWZVbmljYXN0QWRkcmVzcyAqPihtTmV4dCk7IH0KK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGFuIElQdjYgbmV0d29yayBpbnRlcmZhY2UgbXVsdGljYXN0IGFkZHJlc3MuCisgKgorICovCitjbGFzcyBOZXRpZk11bHRpY2FzdEFkZHJlc3M6IHB1YmxpYyBvdE5ldGlmTXVsdGljYXN0QWRkcmVzcworeworICAgIGZyaWVuZCBjbGFzcyBOZXRpZjsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgQWRkcmVzcyAmR2V0QWRkcmVzcyh2b2lkKSBjb25zdCB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgQWRkcmVzcyAqPigmbUFkZHJlc3MpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIEFkZHJlc3MgJkdldEFkZHJlc3Modm9pZCkgeyByZXR1cm4gKnN0YXRpY19jYXN0PEFkZHJlc3MgKj4oJm1BZGRyZXNzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCBtdWx0aWNhc3QgYWRkcmVzcyBzdWJzY3JpYmVkIHRvIHRoZSBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5leHQgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBOZXRpZk11bHRpY2FzdEFkZHJlc3MgKkdldE5leHQodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TmV0aWZNdWx0aWNhc3RBZGRyZXNzICo+KG1OZXh0KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCBtdWx0aWNhc3QgYWRkcmVzcyBzdWJzY3JpYmVkIHRvIHRoZSBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5leHQgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBOZXRpZk11bHRpY2FzdEFkZHJlc3MgKkdldE5leHQodm9pZCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TmV0aWZNdWx0aWNhc3RBZGRyZXNzICo+KG1OZXh0KTsgfQorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgbmV0d29yayBpbnRlcmZhY2UgaGFuZGxlcnMuCisgKgorICovCitjbGFzcyBOZXRpZkNhbGxiYWNrCit7CisgICAgZnJpZW5kIGNsYXNzIE5ldGlmOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTmV0aWZDYWxsYmFjayh2b2lkKToKKyAgICAgICAgbUNhbGxiYWNrKE5VTEwpLAorICAgICAgICBtQ29udGV4dChOVUxMKSwKKyAgICAgICAgbU5leHQoTlVMTCkgeworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGNhbGxiYWNrIGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGNvbmZpZ3VyYXRpb24gb3Igc3RhdGUgY2hhbmdlcy4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0KG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ29udGV4dCkgeworICAgICAgICBtQ2FsbGJhY2sgPSBhQ2FsbGJhY2s7CisgICAgICAgIG1Db250ZXh0ID0gYUNvbnRleHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdGVzdHMgd2hldGhlciB0aGUgb2JqZWN0IGlzIGZyZWUgb3IgaW4gdXNlLgorICAgICAqCisgICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGZyZWUsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNGcmVlKHZvaWQpIHsgcmV0dXJuIChtQ2FsbGJhY2sgPT0gTlVMTCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZyZWVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEZyZWUodm9pZCkgeworICAgICAgICBtQ2FsbGJhY2sgPSBOVUxMOworICAgICAgICBtQ29udGV4dCA9IE5VTEw7CisgICAgICAgIG1OZXh0ID0gTlVMTDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB0ZXN0cyB3aGV0aGVyIHRoZSBvYmplY3QgaXMgc2V0IHRvIHRoZSBwcm92aWRlZCBlbGVtZW50cy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiBjb25maWd1cmF0aW9uIG9yIHN0YXRlIGNoYW5nZXMuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgZWxlbWVudHMgZXF1YWwgdGhlIGlucHV0IHBhcmFtcywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1NlcnZpbmcob3RTdGF0ZUNoYW5nZWRDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KSB7CisgICAgICAgIHJldHVybiAoYUNhbGxiYWNrID09IG1DYWxsYmFjayAmJiBhQ29udGV4dCA9PSBtQ29udGV4dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgQ2FsbGJhY2sodWludDMyX3QgYUZsYWdzKSB7CisgICAgICAgIGlmIChtQ2FsbGJhY2sgIT0gTlVMTCkgeworICAgICAgICAgICAgbUNhbGxiYWNrKGFGbGFncywgbUNvbnRleHQpOworICAgICAgICB9CisgICAgfQorCisgICAgb3RTdGF0ZUNoYW5nZWRDYWxsYmFjayBtQ2FsbGJhY2s7CisgICAgdm9pZCAqbUNvbnRleHQ7CisgICAgTmV0aWZDYWxsYmFjayAqbU5leHQ7Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbiBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlLgorICoKKyAqLworY2xhc3MgTmV0aWY6IHB1YmxpYyBJcDZMb2NhdG9yCit7CisgICAgZnJpZW5kIGNsYXNzIElwNjsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlwNiAgICAgICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBuZXR3b3JrIG9iamVjdC4KKyAgICAgKiBAcGFyYW1baW5dICBhSW50ZXJmYWNlSWQgICAgIFRoZSBpbnRlcmZhY2UgSUQgZm9yIHRoaXMgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTmV0aWYoSXA2ICZhSXA2LCBpbnQ4X3QgYUludGVyZmFjZUlkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgbmV0d29yayBpbnRlcmZhY2UgaW4gdGhlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5leHQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICovCisgICAgTmV0aWYgKkdldE5leHQodm9pZCkgY29uc3QgeyByZXR1cm4gbU5leHQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbmV0d29yayBpbnRlcmZhY2UgaWRlbnRpZmllci4KKyAgICAgKgorICAgICAqLworICAgIGludDhfdCBHZXRJbnRlcmZhY2VJZCh2b2lkKSBjb25zdCB7IHJldHVybiBtSW50ZXJmYWNlSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBsaXN0IG9mIHVuaWNhc3QgYWRkcmVzc2VzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBsaXN0IG9mIHVuaWNhc3QgYWRkcmVzc2VzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgTmV0aWZVbmljYXN0QWRkcmVzcyAqR2V0VW5pY2FzdEFkZHJlc3Nlcyh2b2lkKSBjb25zdCB7IHJldHVybiBtVW5pY2FzdEFkZHJlc3NlczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhIHVuaWNhc3QgYWRkcmVzcyB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIHVuaWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIHVuaWNhc3QgYWRkcmVzcyB3YXMgYWxyZWFkeSBhZGRlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWRkVW5pY2FzdEFkZHJlc3MoTmV0aWZVbmljYXN0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhIHVuaWNhc3QgYWRkcmVzcyBmcm9tIHRoZSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSB1bmljYXN0IGFkZHJlc3MuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIFRoZSB1bmljYXN0IGFkZHJlc3Mgd2Fzbid0IGZvdW5kIHRvIGJlIHJlbW92ZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZVVuaWNhc3RBZGRyZXNzKGNvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYW4gZXh0ZXJuYWwgKHRvIE9wZW5UaHJlYWQpIHVuaWNhc3QgYWRkcmVzcyB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIHVuaWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgKG9yIHVwZGF0ZWQpIHRoZSB1bmljYXN0IGFkZHJlc3MuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBhZGRyZXNzIGluZGljYXRlZCBieSBAcCBhQWRkcmVzcyBpcyBhbiBpbnRlcm5hbCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCBleHRlcm5hbCBhZGRyZXNzZXMgYXJlIGFscmVhZHkgYWRkZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFkZEV4dGVybmFsVW5pY2FzdEFkZHJlc3MoY29uc3QgTmV0aWZVbmljYXN0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhIGV4dGVybmFsICh0byBPcGVuVGhyZWFkKSB1bmljYXN0IGFkZHJlc3MgZnJvbSB0aGUgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIHVuaWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgYWRkcmVzcyBpbmRpY2F0ZWQgYnkgQHAgYUFkZHJlc3MgaXMgYW4gaW50ZXJuYWwgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgICAgVGhlIHVuaWNhc3QgYWRkcmVzcyB3YXMgbm90IGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZW1vdmVFeHRlcm5hbFVuaWNhc3RBZGRyZXNzKGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYWxsIHRoZSBwcmV2aW91c2x5IGFkZGVkIGV4dGVybmFsICh0byBPcGVuVGhyZWFkKSB1bmljYXN0IGFkZHJlc3NlcyBmcm9tIHRoZQorICAgICAqIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmVBbGxFeHRlcm5hbFVuaWNhc3RBZGRyZXNzZXModm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYW4gYWRkcmVzcyBpcyBhc3NpZ25lZCB0byB0aGlzIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiBAcCBhQWRkcmVzcyBpcyBhc3NpZ25lZCB0byB0aGlzIGludGVyZmFjZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1VuaWNhc3RBZGRyZXNzKGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgc3Vic2NyaWJlZCB0byBhIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIFRoZSBtdWx0aWNhc3QgYWRkcmVzcyB0byBjaGVjay4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBzdWJzY3JpYmVkIHRvIEBwIGFBZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBub3Qgc3Vic2NyaWJlZCB0byBAcCBhQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNNdWx0aWNhc3RTdWJzY3JpYmVkKGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN1YnNjcmliZXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHRoZSBsaW5rLWxvY2FsIGFuZCByZWFsbS1sb2NhbCBhbGwgcm91dGVycyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTdWJzY3JpYmVBbGxSb3V0ZXJzTXVsdGljYXN0KHZvaWQpIHsgbUFsbFJvdXRlcnNTdWJzY3JpYmVkID0gdHJ1ZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdW5zdWJzY3JpYmVzIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0byB0aGUgbGluay1sb2NhbCBhbmQgcmVhbG0tbG9jYWwgYWxsIHJvdXRlcnMgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgVW5zdWJzY3JpYmVBbGxSb3V0ZXJzTXVsdGljYXN0KHZvaWQpIHsgbUFsbFJvdXRlcnNTdWJzY3JpYmVkID0gZmFsc2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBsaXN0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGxpc3Qgb2YgbXVsdGljYXN0IGFkZHJlc3Nlcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqR2V0TXVsdGljYXN0QWRkcmVzc2VzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NdWx0aWNhc3RBZGRyZXNzZXM7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN1YnNjcmliZXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRvIGEgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgc3Vic2NyaWJlZCB0byBAcCBhQWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgIFRoZSBtdWx0aWNhc3QgYWRkcmVzcyBpcyBhbHJlYWR5IHN1YnNjcmliZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN1YnNjcmliZU11bHRpY2FzdChOZXRpZk11bHRpY2FzdEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHVuc3Vic2NyaWJlcyB0aGUgbmV0d29yayBpbnRlcmZhY2UgdG8gYSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSB1bnN1YnNjcmliZWQgdG8gQHAgYUFkZHJlc3MuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICBUaGUgbXVsdGljYXN0IGFkZHJlc3MgaXMgYWxyZWFkeSB1bnN1YnNjcmliZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFVuc3Vic2NyaWJlTXVsdGljYXN0KGNvbnN0IE5ldGlmTXVsdGljYXN0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3Vic2NyaWJlcyB0aGUgbmV0d29yayBpbnRlcmZhY2UgdG8gdGhlIGV4dGVybmFsICh0byBPcGVuVGhyZWFkKSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdG8gQHAgYUFkZHJlc3MuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICAgICAgIFRoZSBtdWx0aWNhc3QgYWRkcmVzcyBpcyBhbHJlYWR5IHN1YnNjcmliZWQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBhZGRyZXNzIGluZGljYXRlZCBieSBAcCBhQWRkcmVzcyBpcyBhbiBpbnRlcm5hbCBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGFsbG93ZWQgZXh0ZXJuYWwgbXVsdGljYXN0IGFkZHJlc3NlcyBhcmUgYWxyZWFkeSBhZGRlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3Vic2NyaWJlRXh0ZXJuYWxNdWx0aWNhc3QoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdW5zdWJzY3JpYmVzIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0byB0aGUgZXh0ZXJuYWwgKHRvIE9wZW5UaHJlYWQpIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIHRvIHRoZSB1bmljYXN0IGFkZHJlc3MuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBhZGRyZXNzIGluZGljYXRlZCBieSBAcCBhQWRkcmVzcyBpcyBhbiBpbnRlcm5hbCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICAgICBUaGUgbXVsdGljYXN0IGFkZHJlc3Mgd2FzIG5vdCBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgVW5zdWJzY3JpYmVFeHRlcm5hbE11bHRpY2FzdChjb25zdCBBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1bnN1YnNjcmliZXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGZyb20gYWxsIHByZXZpb3VzbHkgYWRkZWQgZXh0ZXJuYWwgKHRvIE9wZW5UaHJlYWQpIG11bHRpY2FzdAorICAgICAqIGFkZHJlc3Nlcy4KKyAgICAgKi8KKyAgICB2b2lkIFVuc3Vic2NyaWJlQWxsRXh0ZXJuYWxNdWx0aWNhc3RBZGRyZXNzZXModm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGUgaXMgZW5hYmxlZCBvbiB0aGUgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGUgaXMgZW5hYmxlZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGUgaXMgZGlzYWJsZWQuCisgICAgICovCisgICAgYm9vbCBJc011bHRpY2FzdFByb21pc2N1b3VzRW5hYmxlZCh2b2lkKSB7IHJldHVybiBtTXVsdGljYXN0UHJvbWlzY3VvdXM7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGUgb24gdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVuYWJsZWQgIFRSVUUgaWYgTXVsdGljYXN0IFByb21pc2N1b3VzIG1vZGUgaXMgZW5hYmxlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNdWx0aWNhc3RQcm9taXNjdW91cyhib29sIGFFbmFibGVkKSB7IG1NdWx0aWNhc3RQcm9taXNjdW91cyA9IGFFbmFibGVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWdpc3RlcnMgYSBuZXR3b3JrIGludGVyZmFjZSBjYWxsYmFjay4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgQSByZWZlcmVuY2UgdG8gdGhlIGNhbGxiYWNrLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgIFN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkIHRoZSBjYWxsYmFjay4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgVGhlIGNhbGxiYWNrIHdhcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCisgICAgICovCisgICAgb3RFcnJvciBSZWdpc3RlckNhbGxiYWNrKE5ldGlmQ2FsbGJhY2sgJmFDYWxsYmFjayk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgbmV0d29yayBpbnRlcmZhY2UgY2FsbGJhY2suCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgIEEgcmVmZXJlbmNlIHRvIHRoZSBjYWxsYmFjay4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgY2FsbGJhY2suCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZIFRoZSBjYWxsYmFjayB3YXMgbm90IGluIHRoZSBsaXN0LgorICAgICAqLworICAgIG90RXJyb3IgUmVtb3ZlQ2FsbGJhY2soTmV0aWZDYWxsYmFjayAmYUNhbGxiYWNrKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhIHN0YXRlIGNoYW5nZWQgY2FsbGJhY2sgaXMgcGVuZGluZy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSBpZiBhIHN0YXRlIGNoYW5nZWQgY2FsbGJhY2sgaXMgcGVuZGluZywgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1N0YXRlQ2hhbmdlZENhbGxiYWNrUGVuZGluZyh2b2lkKSB7IHJldHVybiBtU3RhdGVDaGFuZ2VkRmxhZ3MgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2NoZWR1bGVzIG5vdGlmaWNhdGlvbiBvZiBAcCBhRmxhZ3MuCisgICAgICoKKyAgICAgKiBUaGUgQHAgYUZsYWdzIGFyZSBjb21iaW5lZCAoYml0d2lzZS1vcikgd2l0aCBvdGhlciBmbGFncyB0aGF0IGhhdmUgbm90IGJlZW4gcHJvdmlkZWQgaW4gYSBjYWxsYmFjayB5ZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRmxhZ3MgIEEgYml0LWZpZWxkIGluZGljYXRpbmcgd2hhdCBjb25maWd1cmF0aW9uIG9yIHN0YXRlIGhhcyBjaGFuZ2VkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTdGF0ZUNoYW5nZWRGbGFncyh1aW50MzJfdCBhRmxhZ3MpOworCisgICAgLyoqCisgICAgICogVGhpcyB2aXJ0dWFsIG1ldGhvZCBlbnF1ZXVlcyBhbiBJUHY2IG1lc3NhZ2VzIG9uIHRoaXMgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBJUHY2IG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIG90RXJyb3IgU2VuZE1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UpID0gMDsKKworICAgIC8qKgorICAgICAqIFRoaXMgdmlydHVhbCBtZXRob2QgZmlsbHMgb3V0IEBwIGFBZGRyZXNzIHdpdGggdGhlIGxpbmsgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIGxpbmsgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgbGluayBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdmlydHVhbCBvdEVycm9yIEdldExpbmtBZGRyZXNzKExpbmtBZGRyZXNzICZhQWRkcmVzcykgY29uc3QgPSAwOworCisgICAgLyoqCisgICAgICogVGhpcyB2aXJ0dWFsIG1ldGhvZCBwZXJmb3JtcyBhIHNvdXJjZS1kZXN0aW5hdGlvbiByb3V0ZSBsb29rdXAuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYVNvdXJjZSAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBzb3VyY2UgYWRkcmVzcy4KKyAgICAgKiBAcGFyYW1baW5dICAgYURlc3RpbmF0aW9uICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtvdXRdICBhUHJlZml4TWF0Y2ggIFRoZSBsb25nZXN0IHByZWZpeCBtYXRjaCByZXN1bHQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICBTdWNjZXNzZnVsbHkgZm91bmQgYSByb3V0ZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX1JPVVRFICBObyByb3V0ZSB0byBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZpcnR1YWwgb3RFcnJvciBSb3V0ZUxvb2t1cChjb25zdCBBZGRyZXNzICZhU291cmNlLCBjb25zdCBBZGRyZXNzICZhRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFQcmVmaXhNYXRjaCkgPSAwOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIEhhbmRsZVN0YXRlQ2hhbmdlZFRhc2soVGFza2xldCAmYVRhc2tsZXQpOworICAgIHZvaWQgSGFuZGxlU3RhdGVDaGFuZ2VkVGFzayh2b2lkKTsKKyAgICBzdGF0aWMgTmV0aWYgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIE5ldGlmQ2FsbGJhY2sgKm1DYWxsYmFja3M7CisgICAgTmV0aWZVbmljYXN0QWRkcmVzcyAqbVVuaWNhc3RBZGRyZXNzZXM7CisgICAgTmV0aWZNdWx0aWNhc3RBZGRyZXNzICptTXVsdGljYXN0QWRkcmVzc2VzOworICAgIGludDhfdCBtSW50ZXJmYWNlSWQ7CisgICAgYm9vbCBtQWxsUm91dGVyc1N1YnNjcmliZWQ7CisgICAgYm9vbCBtTXVsdGljYXN0UHJvbWlzY3VvdXM7CisgICAgVGFza2xldCBtU3RhdGVDaGFuZ2VkVGFzazsKKyAgICBOZXRpZiAqbU5leHQ7CisKKyAgICB1aW50MzJfdCBtU3RhdGVDaGFuZ2VkRmxhZ3M7CisKKyAgICBOZXRpZlVuaWNhc3RBZGRyZXNzIG1FeHRVbmljYXN0QWRkcmVzc2VzW09QRU5USFJFQURfQ09ORklHX01BWF9FWFRfSVBfQUREUlNdOworICAgIE5ldGlmTXVsdGljYXN0QWRkcmVzcyBtRXh0TXVsdGljYXN0QWRkcmVzc2VzW09QRU5USFJFQURfQ09ORklHX01BWF9FWFRfTVVMVElDQVNUX0lQX0FERFJTXTsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkVUX05FVElGX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9zb2NrZXQuaHBwIGIvc3JjL2NvcmUvbmV0L3NvY2tldC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhOGNhYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9zb2NrZXQuaHBwCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgSVB2NiBzb2NrZXRzLgorICovCisKKyNpZm5kZWYgTkVUX1NPQ0tFVF9IUFBfCisjZGVmaW5lIE5FVF9TT0NLRVRfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIElwNiB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1pcDYtaXA2CisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgbWVzc2FnZSBpbmZvcm1hdGlvbiBmb3IgYW4gSVB2NiBtZXNzYWdlLgorICoKKyAqLworY2xhc3MgTWVzc2FnZUluZm86IHB1YmxpYyBvdE1lc3NhZ2VJbmZvCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZUluZm8odm9pZCkgeyBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGxvY2FsIHNvY2tldCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGxvY2FsIHNvY2tldCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgQWRkcmVzcyAmR2V0U29ja0FkZHIodm9pZCkgY29uc3QgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IEFkZHJlc3MgKj4oJm1Tb2NrQWRkcik7fQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbG9jYWwgc29ja2V0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgVGhlIElQdjYgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U29ja0FkZHIoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpIHsgbVNvY2tBZGRyID0gYUFkZHJlc3M7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIGxvY2FsIHNvY2tldCBwb3J0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGxvY2FsIHNvY2tldCBwb3J0LgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0U29ja1BvcnQodm9pZCkgY29uc3QgeyByZXR1cm4gbVNvY2tQb3J0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBsb2NhbCBzb2NrZXQgcG9ydC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQb3J0ICBUaGUgcG9ydCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U29ja1BvcnQodWludDE2X3QgYVBvcnQpIHsgbVNvY2tQb3J0ID0gYVBvcnQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHBlZXIgc29ja2V0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgcGVlciBzb2NrZXQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIEFkZHJlc3MgJkdldFBlZXJBZGRyKHZvaWQpIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxBZGRyZXNzICo+KCZtUGVlckFkZHIpO30KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHBlZXIgc29ja2V0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgcGVlciBzb2NrZXQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IEFkZHJlc3MgJkdldFBlZXJBZGRyKHZvaWQpIGNvbnN0IHsgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBBZGRyZXNzICo+KCZtUGVlckFkZHIpO30KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHBlZXIncyBzb2NrZXQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBUaGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQZWVyQWRkcihjb25zdCBBZGRyZXNzICZhQWRkcmVzcykgeyBtUGVlckFkZHIgPSBhQWRkcmVzczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgcGVlciBzb2NrZXQgcG9ydC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwZWVyIHNvY2tldCBwb3J0LgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UGVlclBvcnQodm9pZCkgY29uc3QgeyByZXR1cm4gbVBlZXJQb3J0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBwZWVyIHNvY2tldCBwb3J0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvcnQgIFRoZSBwb3J0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQZWVyUG9ydCh1aW50MTZfdCBhUG9ydCkgeyBtUGVlclBvcnQgPSBhUG9ydDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgSW50ZXJmYWNlIElELgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEludGVyZmFjZSBJRC4KKyAgICAgKgorICAgICAqLworICAgIGludDhfdCBHZXRJbnRlcmZhY2VJZCh2b2lkKSBjb25zdCB7IHJldHVybiBtSW50ZXJmYWNlSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEludGVyZmFjZSBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnRlcmZhY2VJZCAgVGhlIEludGVyZmFjZSBJRC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SW50ZXJmYWNlSWQoaW50OF90IGFJbnRlcmZhY2VJZCkgeyBtSW50ZXJmYWNlSWQgPSBhSW50ZXJmYWNlSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIEhvcCBMaW1pdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBIb3AgTGltaXQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldEhvcExpbWl0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Ib3BMaW1pdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSG9wIExpbWl0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUhvcExpbWl0ICBUaGUgSG9wIExpbWl0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRIb3BMaW1pdCh1aW50OF90IGFIb3BMaW1pdCkgeyBtSG9wTGltaXQgPSBhSG9wTGltaXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBMaW5rIEluZm8uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaXRuZXIgdG8gdGhlIExpbmsgSW5mby4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHZvaWQgKkdldExpbmtJbmZvKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MaW5rSW5mbzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcG9pbnRlciB0byB0aGUgTGluayBJbmZvLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpbmtJbmZvICBBIHBvaW50ZXIgdG8gdGhlIExpbmsgSW5mby4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlua0luZm8oY29uc3Qgdm9pZCAqYUxpbmtJbmZvKSB7IG1MaW5rSW5mbyA9IGFMaW5rSW5mbzsgfQorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBzb2NrZXQgYWRkcmVzcy4KKyAqCisgKi8KK2NsYXNzIFNvY2tBZGRyOiBwdWJsaWMgb3RTb2NrQWRkcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIFNvY2tBZGRyKHZvaWQpIHsgbWVtc2V0KCZtQWRkcmVzcywgMCwgc2l6ZW9mKG1BZGRyZXNzKSksIG1Qb3J0ID0gMCwgbVNjb3BlSWQgPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgQWRkcmVzcyAmR2V0QWRkcmVzcyh2b2lkKSB7IHJldHVybiAqc3RhdGljX2Nhc3Q8QWRkcmVzcyAqPigmbUFkZHJlc3MpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgQWRkcmVzcyAmR2V0QWRkcmVzcyh2b2lkKSBjb25zdCB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgQWRkcmVzcyAqPigmbUFkZHJlc3MpOyB9Cit9OworCisvKioKKyAqIEB9CisgKi8KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkVUX1NPQ0tFVF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvdGNwLmhwcCBiL3NyYy9jb3JlL25ldC90Y3AuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYmJkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvdGNwLmhwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHBhcnNpbmcgVENQIGhlYWRlci4KKyAqLworCisjaWZuZGVmIFRDUF9IUFBfCisjZGVmaW5lIFRDUF9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgIm5ldC9pcDZfaGVhZGVycy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXRjcAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgcGFyc2luZyBUQ1AgaGVhZGVyCisgKgorICogQHsKKyAqCisgKi8KKworT1RfVE9PTF9QQUNLRURfQkVHSU4KK3N0cnVjdCBUY3BIZWFkZXJQb0QKK3sKKyAgICB1aW50MTZfdCBtU291cmNlOworICAgIHVpbnQxNl90IG1EZXN0aW5hdGlvbjsKKyAgICB1aW50MzJfdCBtU2VxdWVuY2VOdW1iZXI7CisgICAgdWludDMyX3QgbUFja051bWJlcjsKKyAgICB1aW50MTZfdCBtRmxhZ3M7CisgICAgdWludDE2X3QgbVdpbmRvdzsKKyAgICB1aW50MTZfdCBtQ2hlY2tzdW07CisgICAgdWludDE2X3QgbVVyZ2VudFBvaW50ZXI7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVENQIGhlYWRlciBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFRjcEhlYWRlcjogcHJpdmF0ZSBUY3BIZWFkZXJQb0QKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUQ1AgU291cmNlIFBvcnQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVENQIFNvdXJjZSBQb3J0LgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0U291cmNlUG9ydCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1Tb3VyY2UpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUQ1AgRGVzdGluYXRpb24gUG9ydC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUQ1AgRGVzdGluYXRpb24gUG9ydC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldERlc3RpbmF0aW9uUG9ydCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1EZXN0aW5hdGlvbik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFRDUCBTZXF1ZW5jZSBOdW1iZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVENQIFNlcXVlbmNlIE51bWJlci4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFNlcXVlbmNlTnVtYmVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobVNlcXVlbmNlTnVtYmVyKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVENQIEFja25vd2xlZGdtZW50IFNlcXVlbmNlIE51bWJlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUQ1AgQWNrbm93bGVkZ21lbnQgU2VxdWVuY2UgTnVtYmVyLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0QWNrbm93bGVkZ21lbnROdW1iZXIodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtQWNrTnVtYmVyKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVENQIEZsYWdzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRDUCBGbGFncy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldEZsYWdzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUZsYWdzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVENQIFdpbmRvdy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUQ1AgV2luZG93LgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0V2luZG93KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVdpbmRvdyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFRDUCBDaGVja3N1bS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUQ1AgQ2hlY2tzdW0uCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRDaGVja3N1bSh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1DaGVja3N1bSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFRDUCBVcmdlbnQgUG9pbnRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUQ1AgVXJnZW50IFBvaW50ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRVcmdlbnRQb2ludGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVVyZ2VudFBvaW50ZXIpOyB9CisKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFRDUF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvdWRwNi5jcHAgYi9zcmMvY29yZS9uZXQvdWRwNi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzOGNjNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC91ZHA2LmNwcApAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBVRFAvSVB2NiBzb2NrZXRzLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidWRwNi5ocHAiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIElwNiB7CisKK1VkcFNvY2tldDo6VWRwU29ja2V0KFVkcCAmYVVkcCkKK3sKKyAgICBtVHJhbnNwb3J0ID0gJmFVZHA7Cit9CisKK01lc3NhZ2UgKlVkcFNvY2tldDo6TmV3TWVzc2FnZSh1aW50MTZfdCBhUmVzZXJ2ZWQpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVkcCAqPihtVHJhbnNwb3J0KS0+TmV3TWVzc2FnZShhUmVzZXJ2ZWQpOworfQorCitvdEVycm9yIFVkcFNvY2tldDo6T3BlbihvdFVkcFJlY2VpdmUgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KQoreworICAgIG1lbXNldCgmbVNvY2tOYW1lLCAwLCBzaXplb2YobVNvY2tOYW1lKSk7CisgICAgbWVtc2V0KCZtUGVlck5hbWUsIDAsIHNpemVvZihtUGVlck5hbWUpKTsKKyAgICBtSGFuZGxlciA9IGFIYW5kbGVyOworICAgIG1Db250ZXh0ID0gYUNvbnRleHQ7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VWRwICo+KG1UcmFuc3BvcnQpLT5BZGRTb2NrZXQoKnRoaXMpOworfQorCitvdEVycm9yIFVkcFNvY2tldDo6QmluZChjb25zdCBTb2NrQWRkciAmYVNvY2tBZGRyKQoreworICAgIG1Tb2NrTmFtZSA9IGFTb2NrQWRkcjsKKworICAgIGlmIChHZXRTb2NrTmFtZSgpLm1Qb3J0ID09IDApCisgICAgeworICAgICAgICBtU29ja05hbWUubVBvcnQgPSBzdGF0aWNfY2FzdDxVZHAgKj4obVRyYW5zcG9ydCktPkdldEVwaGVtZXJhbFBvcnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBVZHBTb2NrZXQ6OkNvbm5lY3QoY29uc3QgU29ja0FkZHIgJmFTb2NrQWRkcikKK3sKKyAgICBtUGVlck5hbWUgPSBhU29ja0FkZHI7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgVWRwU29ja2V0OjpDbG9zZSh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IHN0YXRpY19jYXN0PFVkcCAqPihtVHJhbnNwb3J0KS0+UmVtb3ZlU29ja2V0KCp0aGlzKSk7CisgICAgbWVtc2V0KCZtU29ja05hbWUsIDAsIHNpemVvZihtU29ja05hbWUpKTsKKyAgICBtZW1zZXQoJm1QZWVyTmFtZSwgMCwgc2l6ZW9mKG1QZWVyTmFtZSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBVZHBTb2NrZXQ6OlNlbmRUbyhNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlSW5mbyBtZXNzYWdlSW5mb0xvY2FsOworICAgIFVkcEhlYWRlciB1ZHBIZWFkZXI7CisKKyAgICBtZXNzYWdlSW5mb0xvY2FsID0gYU1lc3NhZ2VJbmZvOworCisgICAgaWYgKG1lc3NhZ2VJbmZvTG9jYWwuR2V0U29ja0FkZHIoKS5Jc1Vuc3BlY2lmaWVkKCkpCisgICAgeworICAgICAgICBtZXNzYWdlSW5mb0xvY2FsLlNldFNvY2tBZGRyKEdldFNvY2tOYW1lKCkuR2V0QWRkcmVzcygpKTsKKyAgICB9CisKKyAgICBpZiAoR2V0U29ja05hbWUoKS5tUG9ydCA9PSAwKQorICAgIHsKKyAgICAgICAgR2V0U29ja05hbWUoKS5tUG9ydCA9IHN0YXRpY19jYXN0PFVkcCAqPihtVHJhbnNwb3J0KS0+R2V0RXBoZW1lcmFsUG9ydCgpOworICAgIH0KKworICAgIHVkcEhlYWRlci5TZXRTb3VyY2VQb3J0KEdldFNvY2tOYW1lKCkubVBvcnQpOworICAgIHVkcEhlYWRlci5TZXREZXN0aW5hdGlvblBvcnQobWVzc2FnZUluZm9Mb2NhbC5tUGVlclBvcnQpOworICAgIHVkcEhlYWRlci5TZXRMZW5ndGgoc2l6ZW9mKHVkcEhlYWRlcikgKyBhTWVzc2FnZS5HZXRMZW5ndGgoKSk7CisgICAgdWRwSGVhZGVyLlNldENoZWNrc3VtKDApOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLlByZXBlbmQoJnVkcEhlYWRlciwgc2l6ZW9mKHVkcEhlYWRlcikpKTsKKyAgICBhTWVzc2FnZS5TZXRPZmZzZXQoMCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IHN0YXRpY19jYXN0PFVkcCAqPihtVHJhbnNwb3J0KS0+U2VuZERhdGFncmFtKGFNZXNzYWdlLCBtZXNzYWdlSW5mb0xvY2FsLCBrUHJvdG9VZHApKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK1VkcDo6VWRwKElwNiAmYUlwNik6CisgICAgSXA2TG9jYXRvcihhSXA2KSwKKyAgICBtRXBoZW1lcmFsUG9ydChrRHluYW1pY1BvcnRNaW4pLAorICAgIG1Tb2NrZXRzKE5VTEwpCit7Cit9CisKK290RXJyb3IgVWRwOjpBZGRTb2NrZXQoVWRwU29ja2V0ICZhU29ja2V0KQoreworICAgIGZvciAoVWRwU29ja2V0ICpjdXIgPSBtU29ja2V0czsgY3VyOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChjdXIgPT0gJmFTb2NrZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFTb2NrZXQuU2V0TmV4dChtU29ja2V0cyk7CisgICAgbVNvY2tldHMgPSAmYVNvY2tldDsKKworZXhpdDoKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBVZHA6OlJlbW92ZVNvY2tldChVZHBTb2NrZXQgJmFTb2NrZXQpCit7CisgICAgaWYgKG1Tb2NrZXRzID09ICZhU29ja2V0KQorICAgIHsKKyAgICAgICAgbVNvY2tldHMgPSBtU29ja2V0cy0+R2V0TmV4dCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKFVkcFNvY2tldCAqc29ja2V0ID0gbVNvY2tldHM7IHNvY2tldDsgc29ja2V0ID0gc29ja2V0LT5HZXROZXh0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzb2NrZXQtPkdldE5leHQoKSA9PSAmYVNvY2tldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzb2NrZXQtPlNldE5leHQoYVNvY2tldC5HZXROZXh0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYVNvY2tldC5TZXROZXh0KE5VTEwpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3VpbnQxNl90IFVkcDo6R2V0RXBoZW1lcmFsUG9ydCh2b2lkKQoreworICAgIHVpbnQxNl90IHJ2YWwgPSBtRXBoZW1lcmFsUG9ydDsKKworICAgIGlmIChtRXBoZW1lcmFsUG9ydCA8IGtEeW5hbWljUG9ydE1heCkKKyAgICB7CisgICAgICAgIG1FcGhlbWVyYWxQb3J0Kys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1FcGhlbWVyYWxQb3J0ID0ga0R5bmFtaWNQb3J0TWluOworICAgIH0KKworICAgIHJldHVybiBydmFsOworfQorCitNZXNzYWdlICpVZHA6Ok5ld01lc3NhZ2UodWludDE2X3QgYVJlc2VydmVkKQoreworICAgIHJldHVybiBHZXRJcDYoKS5OZXdNZXNzYWdlKHNpemVvZihVZHBIZWFkZXIpICsgYVJlc2VydmVkKTsKK30KKworb3RFcnJvciBVZHA6OlNlbmREYXRhZ3JhbShNZXNzYWdlICZhTWVzc2FnZSwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgSXBQcm90byBhSXBQcm90bykKK3sKKyAgICByZXR1cm4gR2V0SXA2KCkuU2VuZERhdGFncmFtKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8sIGFJcFByb3RvKTsKK30KKworb3RFcnJvciBVZHA6OkhhbmRsZU1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UsIE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgVWRwSGVhZGVyIHVkcEhlYWRlcjsKKyAgICB1aW50MTZfdCBwYXlsb2FkTGVuZ3RoOworICAgIHVpbnQxNl90IGNoZWNrc3VtOworCisgICAgcGF5bG9hZExlbmd0aCA9IGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisKKyAgICAvLyBjaGVjayBsZW5ndGgKKyAgICBWZXJpZnlPckV4aXQocGF5bG9hZExlbmd0aCA+PSBzaXplb2YoVWRwSGVhZGVyKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyB2ZXJpZnkgY2hlY2tzdW0KKyAgICBjaGVja3N1bSA9IElwNjo6Q29tcHV0ZVBzZXVkb2hlYWRlckNoZWNrc3VtKGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLCBhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRMZW5ndGgsIGtQcm90b1VkcCk7CisgICAgY2hlY2tzdW0gPSBhTWVzc2FnZS5VcGRhdGVDaGVja3N1bShjaGVja3N1bSwgYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHBheWxvYWRMZW5ndGgpOworICAgIFZlcmlmeU9yRXhpdChjaGVja3N1bSA9PSAweGZmZmYsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKHVkcEhlYWRlciksICZ1ZHBIZWFkZXIpID09IHNpemVvZih1ZHBIZWFkZXIpLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KHNpemVvZih1ZHBIZWFkZXIpKTsKKyAgICBhTWVzc2FnZUluZm8ubVBlZXJQb3J0ID0gdWRwSGVhZGVyLkdldFNvdXJjZVBvcnQoKTsKKyAgICBhTWVzc2FnZUluZm8ubVNvY2tQb3J0ID0gdWRwSGVhZGVyLkdldERlc3RpbmF0aW9uUG9ydCgpOworCisgICAgLy8gZmluZCBzb2NrZXQKKyAgICBmb3IgKFVkcFNvY2tldCAqc29ja2V0ID0gbVNvY2tldHM7IHNvY2tldDsgc29ja2V0ID0gc29ja2V0LT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoc29ja2V0LT5HZXRTb2NrTmFtZSgpLm1Qb3J0ICE9IHVkcEhlYWRlci5HZXREZXN0aW5hdGlvblBvcnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc29ja2V0LT5HZXRTb2NrTmFtZSgpLm1TY29wZUlkICE9IDAgJiYKKyAgICAgICAgICAgIHNvY2tldC0+R2V0U29ja05hbWUoKS5tU2NvcGVJZCAhPSBhTWVzc2FnZUluZm8ubUludGVyZmFjZUlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkuSXNNdWx0aWNhc3QoKSAmJgorICAgICAgICAgICAgIXNvY2tldC0+R2V0U29ja05hbWUoKS5HZXRBZGRyZXNzKCkuSXNVbnNwZWNpZmllZCgpICYmCisgICAgICAgICAgICBzb2NrZXQtPkdldFNvY2tOYW1lKCkuR2V0QWRkcmVzcygpICE9IGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHZlcmlmeSBzb3VyY2UgaWYgY29ubmVjdGVkIHNvY2tldAorICAgICAgICBpZiAoc29ja2V0LT5HZXRQZWVyTmFtZSgpLm1Qb3J0ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzb2NrZXQtPkdldFBlZXJOYW1lKCkubVBvcnQgIT0gdWRwSGVhZGVyLkdldFNvdXJjZVBvcnQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzb2NrZXQtPkdldFBlZXJOYW1lKCkuR2V0QWRkcmVzcygpLklzVW5zcGVjaWZpZWQoKSAmJgorICAgICAgICAgICAgICAgIHNvY2tldC0+R2V0UGVlck5hbWUoKS5HZXRBZGRyZXNzKCkgIT0gYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzb2NrZXQtPkhhbmRsZVVkcFJlY2VpdmUoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBVZHA6OlVwZGF0ZUNoZWNrc3VtKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhQ2hlY2tzdW0pCit7CisgICAgYUNoZWNrc3VtID0gYU1lc3NhZ2UuVXBkYXRlQ2hlY2tzdW0oYUNoZWNrc3VtLCBhTWVzc2FnZS5HZXRPZmZzZXQoKSwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKSk7CisKKyAgICBpZiAoYUNoZWNrc3VtICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgIGFDaGVja3N1bSA9IH5hQ2hlY2tzdW07CisgICAgfQorCisgICAgYUNoZWNrc3VtID0gSG9zdFN3YXAxNihhQ2hlY2tzdW0pOworICAgIGFNZXNzYWdlLldyaXRlKGFNZXNzYWdlLkdldE9mZnNldCgpICsgVWRwSGVhZGVyOjpHZXRDaGVja3N1bU9mZnNldCgpLCBzaXplb2YoYUNoZWNrc3VtKSwgJmFDaGVja3N1bSk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L3VkcDYuaHBwIGIvc3JjL2NvcmUvbmV0L3VkcDYuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDUzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvdWRwNi5ocHAKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBVRFAvSVB2NiBzb2NrZXRzLgorICovCisKKyNpZm5kZWYgVURQNl9IUFBfCisjZGVmaW5lIFVEUDZfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC91ZHAuaD4KKworI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2hlYWRlcnMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIElwNiB7CisKK2NsYXNzIFVkcDsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXVkcAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgVURQL0lQdjYgc29ja2V0cy4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIFVEUC9JUHY2IHNvY2tldC4KKyAqCisgKi8KK2NsYXNzIFVkcFNvY2tldDogcHVibGljIG90VWRwU29ja2V0Cit7CisgICAgZnJpZW5kIGNsYXNzIFVkcDsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFVZHAgIEEgcmVmZXJlbmNlIHRvIHRoZSBVRFAgdHJhbnNwb3J0IG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIFVkcFNvY2tldChVZHAgJmFVZHApOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBVRFAgbWVzc2FnZSB3aXRoIHN1ZmZpY2llbnQgaGVhZGVyIHNwYWNlIHJlc2VydmVkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlc2VydmVkICBUaGUgbnVtYmVyIG9mIGhlYWRlciBieXRlcyB0byByZXNlcnZlIGFmdGVyIHRoZSBVRFAgaGVhZGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIG9yIE5VTEwgaWYgbm8gYnVmZmVycyBhcmUgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqTmV3TWVzc2FnZSh1aW50MTZfdCBhUmVzZXJ2ZWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgb3BlbnMgdGhlIFVEUCBzb2NrZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiByZWNlaXZpbmcgVURQIG1lc3NhZ2VzLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBvcGVuZWQgdGhlIHNvY2tldC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgIFRoZSBzb2NrZXQgaXMgYWxyZWFkeSBvcGVuLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBPcGVuKG90VWRwUmVjZWl2ZSBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYmluZHMgdGhlIFVEUCBzb2NrZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU29ja0FkZHIgIEEgcmVmZXJlbmNlIHRvIHRoZSBzb2NrZXQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IGJvdW5kIHRoZSBzb2NrZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEJpbmQoY29uc3QgU29ja0FkZHIgJmFTb2NrQWRkcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb25uZWN0cyB0aGUgVURQIHNvY2tldC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTb2NrQWRkciAgQSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRoZSBzb2NrZXQuCisgICAgICovCisgICAgb3RFcnJvciBDb25uZWN0KGNvbnN0IFNvY2tBZGRyICZhU29ja0FkZHIpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xvc2VzIHRoZSBVRFAgc29ja2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgY2xvc2VkIHRoZSBVRFAgc29ja2V0LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBDbG9zZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgVURQIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIFRoZSBtZXNzYWdlIHRvIHNlbmQuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBUaGUgbWVzc2FnZSBpbmZvIGFzc29jaWF0ZWQgd2l0aCBAcCBhTWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHNlbnQgdGhlIFVEUCBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGF2YWlsYWJsZSBidWZmZXIgdG8gYWRkIHRoZSBVRFAgYW5kIElQdjYgaGVhZGVycy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZFRvKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGxvY2FsIHNvY2tldCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGxvY2FsIHNvY2tldCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgU29ja0FkZHIgJkdldFNvY2tOYW1lKHZvaWQpIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxTb2NrQWRkciAqPigmbVNvY2tOYW1lKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcGVlcidzIHNvY2tldCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIHBlZXIncyBzb2NrZXQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIFNvY2tBZGRyICZHZXRQZWVyTmFtZSh2b2lkKSB7IHJldHVybiAqc3RhdGljX2Nhc3Q8U29ja0FkZHIgKj4oJm1QZWVyTmFtZSk7IH0KKworcHJpdmF0ZToKKyAgICBVZHBTb2NrZXQgKkdldE5leHQodm9pZCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VWRwU29ja2V0ICo+KG1OZXh0KTsgfQorICAgIHZvaWQgU2V0TmV4dChVZHBTb2NrZXQgKnNvY2tldCkgeyBtTmV4dCA9IHN0YXRpY19jYXN0PG90VWRwU29ja2V0ICo+KHNvY2tldCk7IH0KKworICAgIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykgeworICAgICAgICBtSGFuZGxlcihtQ29udGV4dCwgJmFNZXNzYWdlLCAmYU1lc3NhZ2VJbmZvKTsKKyAgICB9Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBjb3JlIFVEUCBtZXNzYWdlIGhhbmRsaW5nLgorICoKKyAqLworY2xhc3MgVWRwOiBwdWJsaWMgSXA2TG9jYXRvcgoreworICAgIGZyaWVuZCBjbGFzcyBVZHBTb2NrZXQ7CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSXA2ICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBuZXR3b3JrIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIFVkcChJcDYgJmFJcDYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhIFVEUCBzb2NrZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU29ja2V0ICBBIHJlZmVyZW5jZSB0byB0aGUgVURQIHNvY2tldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBVRFAgc29ja2V0LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBZGRTb2NrZXQoVWRwU29ja2V0ICZhU29ja2V0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYSBVRFAgc29ja2V0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNvY2tldCAgQSByZWZlcmVuY2UgdG8gdGhlIFVEUCBzb2NrZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBVRFAgc29ja2V0LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZW1vdmVTb2NrZXQoVWRwU29ja2V0ICZhU29ja2V0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZXBoZW1lcmFsIHBvcnQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIG5ldyBlcGhlbWVyYWwgcG9ydC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldEVwaGVtZXJhbFBvcnQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IFVEUCBtZXNzYWdlIHdpdGggc3VmZmljaWVudCBoZWFkZXIgc3BhY2UgcmVzZXJ2ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmVzZXJ2ZWQgIFRoZSBudW1iZXIgb2YgaGVhZGVyIGJ5dGVzIHRvIHJlc2VydmUgYWZ0ZXIgdGhlIFVEUCBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2Ugb3IgTlVMTCBpZiBubyBidWZmZXJzIGFyZSBhdmFpbGFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlICpOZXdNZXNzYWdlKHVpbnQxNl90IGFSZXNlcnZlZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhbiBJUHY2IGRhdGFncmFtLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIGluZm8gYXNzb2NpYXRlZCB3aXRoIEBwIGFNZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFJcFByb3RvICAgICAgVGhlIEludGVybmV0IFByb3RvY29sIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIG1lc3NhZ2UgaW50byBhbiBvdXRwdXQgaW50ZXJmYWNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGF2YWlsYWJsZSBidWZmZXIgdG8gYWRkIHRoZSBJUHY2IGhlYWRlcnMuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmREYXRhZ3JhbShNZXNzYWdlICZhTWVzc2FnZSwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgSXBQcm90byBhSXBQcm90byk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIGEgcmVjZWl2ZWQgVURQIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBVRFAgbWVzc2FnZSB0byBwcm9jZXNzLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgdGhlIFVEUCBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfRFJPUCAgQ291bGQgbm90IGZ1bGx5IHByb2Nlc3MgdGhlIFVEUCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBIYW5kbGVNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlLCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIFVEUCBjaGVja3N1bS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgICAgICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIFVEUCBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFQc2V1ZG9IZWFkZXJDaGVja3N1bSAgVGhlIHBzZXVkby1oZWFkZXIgY2hlY2tzdW0gdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgdGhlIFVEUCBjaGVja3N1bS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG1lc3NhZ2Ugd2FzIGludmFsaWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFVwZGF0ZUNoZWNrc3VtKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhUHNldWRvSGVhZGVyQ2hlY2tzdW0pOworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtEeW5hbWljUG9ydE1pbiA9IDQ5MTUyLCAgLy8vPCBTZXJ2aWNlIE5hbWUgYW5kIFRyYW5zcG9ydCBQcm90b2NvbCBQb3J0IE51bWJlciBSZWdpc3RyeQorICAgICAgICBrRHluYW1pY1BvcnRNYXggPSA2NTUzNSwgIC8vLzwgU2VydmljZSBOYW1lIGFuZCBUcmFuc3BvcnQgUHJvdG9jb2wgUG9ydCBOdW1iZXIgUmVnaXN0cnkKKyAgICB9OworICAgIHVpbnQxNl90IG1FcGhlbWVyYWxQb3J0OworICAgIFVkcFNvY2tldCAqbVNvY2tldHM7Cit9OworCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorc3RydWN0IFVkcEhlYWRlclBvRAoreworICAgIHVpbnQxNl90IG1Tb3VyY2U7CisgICAgdWludDE2X3QgbURlc3RpbmF0aW9uOworICAgIHVpbnQxNl90IG1MZW5ndGg7CisgICAgdWludDE2X3QgbUNoZWNrc3VtOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFVEUCBoZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBVZHBIZWFkZXI6IHByaXZhdGUgVWRwSGVhZGVyUG9ECit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVURQIFNvdXJjZSBQb3J0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFVEUCBTb3VyY2UgUG9ydC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFNvdXJjZVBvcnQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtU291cmNlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVURQIFNvdXJjZSBQb3J0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvcnQgIFRoZSBVRFAgU291cmNlIFBvcnQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNvdXJjZVBvcnQodWludDE2X3QgYVBvcnQpIHsgbVNvdXJjZSA9IEhvc3RTd2FwMTYoYVBvcnQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBVRFAgRGVzdGluYXRpb24gUG9ydC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBVRFAgRGVzdGluYXRpb24gUG9ydC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldERlc3RpbmF0aW9uUG9ydCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1EZXN0aW5hdGlvbik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFVEUCBEZXN0aW5hdGlvbiBQb3J0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvcnQgIFRoZSBVRFAgRGVzdGluYXRpb24gUG9ydC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RGVzdGluYXRpb25Qb3J0KHVpbnQxNl90IGFQb3J0KSB7IG1EZXN0aW5hdGlvbiA9IEhvc3RTd2FwMTYoYVBvcnQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBVRFAgTGVuZ3RoLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFVEUCBMZW5ndGguCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtTGVuZ3RoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVURQIExlbmd0aC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBVRFAgTGVuZ3RoLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMZW5ndGgodWludDE2X3QgYUxlbmd0aCkgeyBtTGVuZ3RoID0gSG9zdFN3YXAxNihhTGVuZ3RoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVURQIENoZWNrc3VtLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFVEUCBDaGVja3N1bS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldENoZWNrc3VtKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUNoZWNrc3VtKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVURQIENoZWNrc3VtLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoZWNrc3VtICBUaGUgVURQIENoZWNrc3VtLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDaGVja3N1bSh1aW50MTZfdCBhQ2hlY2tzdW0pIHsgbUNoZWNrc3VtID0gSG9zdFN3YXAxNihhQ2hlY2tzdW0pOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyB0aGUgYnl0ZSBvZmZzZXQgZm9yIHRoZSBVRFAgTGVuZ3RoLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGJ5dGUgb2Zmc2V0IGZvciB0aGUgVURQIExlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50OF90IEdldExlbmd0aE9mZnNldCh2b2lkKSB7IHJldHVybiBvZmZzZXRvZihVZHBIZWFkZXJQb0QsIG1MZW5ndGgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyB0aGUgYnl0ZSBvZmZzZXQgZm9yIHRoZSBVRFAgQ2hlY2tzdW0uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgYnl0ZSBvZmZzZXQgZm9yIHRoZSBVRFAgQ2hlY2tzdW0uCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDhfdCBHZXRDaGVja3N1bU9mZnNldCh2b2lkKSB7IHJldHVybiBvZmZzZXRvZihVZHBIZWFkZXJQb0QsIG1DaGVja3N1bSk7IH0KKworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkVUX1VEUDZfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvb3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIGIvc3JjL2NvcmUvb3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyODEwODgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9vcGVudGhyZWFkLWNvcmUtY29uZmlnLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzIGZvciBPcGVuVGhyZWFkLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9DT1JFX0NPTkZJR19IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPUkVfQ09ORklHX0hfCisKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT1JFX0NPTkZJR19IX0lOCisKKyNpZmRlZiBPUEVOVEhSRUFEX1BST0pFQ1RfQ09SRV9DT05GSUdfRklMRQorI2luY2x1ZGUgT1BFTlRIUkVBRF9QUk9KRUNUX0NPUkVfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWRlZmF1bHQtY29uZmlnLmgiCisKKyN1bmRlZiBPUEVOVEhSRUFEX0NPUkVfQ09ORklHX0hfSU4KKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPUkVfQ09ORklHX0hfCisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL29wZW50aHJlYWQtY29yZS1kZWZhdWx0LWNvbmZpZy5oIGIvc3JjL2NvcmUvb3BlbnRocmVhZC1jb3JlLWRlZmF1bHQtY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5OWFhNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL29wZW50aHJlYWQtY29yZS1kZWZhdWx0LWNvbmZpZy5oCkBAIC0wLDAgKzEsODY1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZhdWx0IGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGNvbnN0YW50cworICogICBmb3IgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9ERUZBVUxUX0NPTkZJR19IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPUkVfREVGQVVMVF9DT05GSUdfSF8KKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFTkRPUl9PVUkKKyAqCisgKiBUaGUgT3JnYW5pemF0aW9uYWxseSBVbmlxdWUgSWRlbnRpZmllciBmb3IgdGhlIFRocmVhZCBzdGFjay4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVORE9SX09VSQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19TVEFDS19WRU5ET1JfT1VJICAgICAgICAgICAgICAgICAgICAgIDB4MThiNDMwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFTkRPUl9PVUkKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fUkVWCisgKgorICogVGhlIFN0YWNrIFZlcnNpb24gUmV2aXNpb24gZm9yIHRoZSBUaHJlYWQgc3RhY2suCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fUkVWCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fUkVWICAgICAgICAgICAgICAgICAgICAgMAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19TVEFDS19WRVJTSU9OX1JFVgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVSU0lPTl9NQUpPUgorICoKKyAqIFRoZSBTdGFjayBWZXJzaW9uIE1ham9yIGZvciB0aGUgVGhyZWFkIHN0YWNrLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19TVEFDS19WRVJTSU9OX01BSk9SCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fTUFKT1IgICAgICAgICAgICAgICAgICAgMAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19TVEFDS19WRVJTSU9OX01BSk9SCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19TVEFDS19WRVJTSU9OX01JTk9SCisgKgorICogVGhlIFN0YWNrIFZlcnNpb24gTWlub3IgZm9yIHRoZSBUaHJlYWQgc3RhY2suCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fTUlOT1IKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVSU0lPTl9NSU5PUiAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fTUlOT1IKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX05VTV9NRVNTQUdFX0JVRkZFUlMKKyAqCisgKiBUaGUgbnVtYmVyIG9mIG1lc3NhZ2UgYnVmZmVycyBpbiB0aGUgYnVmZmVyIHBvb2wuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX05VTV9NRVNTQUdFX0JVRkZFUlMKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTlVNX01FU1NBR0VfQlVGRkVSUyAgICAgICAgICAgICAgICAgICA0MAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NRVNTQUdFX0JVRkZFUl9TSVpFCisgKgorICogVGhlIHNpemUgb2YgYSBtZXNzYWdlIGJ1ZmZlciBpbiBieXRlcy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUVTU0FHRV9CVUZGRVJfU0laRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NRVNTQUdFX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgIDEyOAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19NRVNTQUdFX0JVRkZFUl9TSVpFCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX0NIQU5ORUwKKyAqCisgKiBUaGUgZGVmYXVsdCBJRUVFIDgwMi4xNS40IGNoYW5uZWwuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0RFRkFVTFRfQ0hBTk5FTAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX0NIQU5ORUwgICAgICAgICAgICAgICAgICAgICAgIDExCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0RFRkFVTFRfQ0hBTk5FTAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9NQVhfVFJBTlNNSVRfUE9XRVIKKyAqCisgKiBUaGUgZGVmYXVsdCBJRUVFIDgwMi4xNS40IG1heGltdW0gdHJhbnNtaXQgcG93ZXIgKGRCbSkKKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9NQVhfVFJBTlNNSVRfUE9XRVIKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9NQVhfVFJBTlNNSVRfUE9XRVIgICAgICAgICAgICAwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0RFRkFVTFRfTUFYX1RSQU5TTUlUX1BPV0VSCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfVFhfQVRURU1QVFNfRElSRUNUCisgKgorICogTWF4aW11bSBudW1iZXIgb2YgTUFDIGxheWVyIHRyYW5zbWl0IGF0dGVtcHRzIGZvciBhbiBvdXRib3VuZCBkaXJlY3QgZnJhbWUuCisgKiBQZXIgSUVFRSA4MDIuMTUuNC0yMDA2LCBkZWZhdWx0IHZhbHVlIGlzIHNldCB0byAobWFjTWF4RnJhbWVSZXRyaWVzICsgMSkgd2l0aCBtYWNNYXhGcmFtZVJldHJpZXMgPSAzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfVFhfQVRURU1QVFNfRElSRUNUCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19ESVJFQ1QgICAgICAgICAgICAgICAgNAorI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19ESVJFQ1QKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19JTkRJUkVDVF9QRVJfUE9MTAorICoKKyAqIE1heGltdW0gbnVtYmVyIG9mIE1BQyBsYXllciB0cmFuc21pdCBhdHRlbXB0cyBmb3IgYW4gb3V0Ym91bmQgaW5kaXJlY3QgZnJhbWUgKHRvIGEgc2xlZXB5IGNoaWxkKSBhZnRlciByZWNlaXZpbmcKKyAqIGEgZGF0YSByZXF1ZXN0IGNvbW1hbmQgKGRhdGEgcG9sbCkgZnJvbSB0aGUgY2hpbGQuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19JTkRJUkVDVF9QRVJfUE9MTAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfVFhfQVRURU1QVFNfSU5ESVJFQ1RfUEVSX1BPTEwgICAgIDEKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19NQVhfVFhfQVRURU1QVFNfSU5ESVJFQ1RfUEVSX1BPTEwKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19JTkRJUkVDVF9QT0xMUworICoKKyAqIE1heGltdW0gbnVtYmVyIG9mIHRyYW5zbWl0IGF0dGVtcHRzIGZvciBhbiBvdXRib3VuZCBpbmRpcmVjdCBmcmFtZSAoZm9yIGEgc2xlZXB5IGNoaWxkKSBlYWNoIHRyaWdnZXJlZCBieSB0aGUKKyAqIHJlY2VwdGlvbiBvZiBhIG5ldyBkYXRhIHJlcXVlc3QgY29tbWFuZCAoYSBuZXcgZGF0YSBwb2xsKSBmcm9tIHRoZSBzbGVlcHkgY2hpbGQuIEVhY2ggZGF0YSBwb2xsIHRyaWdnZXJlZCBhdHRlbXB0IGlzCisgKiByZXRyaWVkIGJ5IHRoZSBNQUMgbGF5ZXIgdXAgdG8gYE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19JTkRJUkVDVF9QRVJfUE9MTGAgdGltZXMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19JTkRJUkVDVF9QT0xMUworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfVFhfQVRURU1QVFNfSU5ESVJFQ1RfUE9MTFMgICAgICAgIDQKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19NQVhfVFhfQVRURU1QVFNfSU5ESVJFQ1RfUE9MTFMKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0RST1BfTUVTU0FHRV9PTl9GUkFHTUVOVF9UWF9GQUlMVVJFCisgKgorICogRGVmaW5lIGFzIDEgZm9yIE9wZW5UaHJlYWQgdG8gZHJvcCBhIG1lc3NhZ2UgKGFuZCBub3Qgc2VuZCBhbnkgcmVtYWluaW5nIGZyYWdtZW50cyBvZiB0aGUgbWVzc2FnZSkgaWYgYWxsIHRyYW5zbWl0CisgKiBhdHRlbXB0cyBmYWlsIGZvciBhIGZyYWdtZW50IG9mIHRoZSBtZXNzYWdlLiBGb3IgYSBkaXJlY3QgdHJhbnNtaXNzaW9uLCBhIGZhaWx1cmUgb2NjdXJzIGFmdGVyIGFsbCBNQUMgdHJhbnNtaXNzaW9uCisgKiBhdHRlbXB0cyBmb3IgYSBnaXZlbiBmcmFnbWVudCBhcmUgdW5zdWNjZXNzZnVsLiBGb3IgYW4gaW5kaXJlY3QgdHJhbnNtaXNzaW9uLCBhIGZhaWx1cmUgb2NjdXJzIGFmdGVyIGFsbCBkYXRhIHBvbGwKKyAqIHRyaWdnZXJlZCB0cmFuc21pc3Npb24gYXR0ZW1wdHMgZm9yIGEgZ2l2ZW4gZnJhZ21lbnQgZmFpbC4KKyAqCisgKiBJZiBzZXQgdG8gemVybyAoZGlzYWJsZWQpLCBPcGVuVGhyZWFkIHdpbGwgYXR0ZW1wdCB0byBzZW5kIHN1YnNlcXVlbnQgZnJhZ21lbnRzLCB3aGV0aGVyIG9yIG5vdCBhbGwgdHJhbnNtaXNzaW9uCisgKiBhdHRlbXB0cyBmYWlsIGZvciBhIGdpdmVuIGZyYWdtZW50LgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19EUk9QX01FU1NBR0VfT05fRlJBR01FTlRfVFhfRkFJTFVSRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19EUk9QX01FU1NBR0VfT05fRlJBR01FTlRfVFhfRkFJTFVSRSAgIDEKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19EUk9QX01FU1NBR0VfT05fRlJBR01FTlRfVFhfRkFJTFVSRQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfQVRUQUNIX0RBVEFfUE9MTF9QRVJJT0QKKyAqCisgKiBUaGUgRGF0YSBQb2xsIHBlcmlvZCBkdXJpbmcgYXR0YWNoIGluIG1pbGxpc2Vjb25kcy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfQVRUQUNIX0RBVEFfUE9MTF9QRVJJT0QKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfQVRUQUNIX0RBVEFfUE9MTF9QRVJJT0QgICAgICAgICAgICAgICAxMDAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfQVRUQUNIX0RBVEFfUE9MTF9QRVJJT0QKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0FERFJFU1NfQ0FDSEVfRU5UUklFUworICoKKyAqIFRoZSBudW1iZXIgb2YgRUlELXRvLVJMT0MgY2FjaGUgZW50cmllcy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfQUREUkVTU19DQUNIRV9FTlRSSUVTCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0FERFJFU1NfQ0FDSEVfRU5UUklFUyAgICAgICAgICAgICAgICAgMTAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfQUREUkVTU19DQUNIRV9FTlRSSUVTCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfQ0hJTERSRU4KKyAqCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hpbGRyZW4uCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9DSElMRFJFTgorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfQ0hJTERSRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX01BWF9DSElMRFJFTgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9DSElMRF9USU1FT1VUCisgKgorICogVGhlIGRlZmF1bHQgY2hpbGQgdGltZW91dCB2YWx1ZSAoaW4gc2Vjb25kcykuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0RFRkFVTFRfQ0hJTERfVElNRU9VVAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX0NISUxEX1RJTUVPVVQgICAgICAgICAgICAgICAgIDI0MAorI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0RFRkFVTFRfQ0hJTERfVElNRU9VVAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfSVBfQUREUlNfUEVSX0NISUxECisgKgorICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBJUHY2IGFkZHJlc3MgcmVnaXN0cmF0aW9ucyBwZXIgY2hpbGQuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0lQX0FERFJTX1BFUl9DSElMRAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19JUF9BRERSU19QRVJfQ0hJTEQgICAgICAgICAgICAgICAgICAgIDQKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfSVBfQUREUlNfUEVSX0NISUxECisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfRVhUX0lQX0FERFJTCisgKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBJUHY2IGFkZHJlc3NlcyBhbGxvd3MgdG8gYmUgZXh0ZXJuYWxseSBhZGRlZC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VYVF9JUF9BRERSUworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfRVhUX0lQX0FERFJTICAgICAgICAgICAgICAgICAgICAgIDQKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VYVF9JUF9BRERSUworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VYVF9NVUxUSUNBU1RfSVBfQUREUlMKKyAqCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIElQdjYgbXVsdGljYXN0IGFkZHJlc3NlcyBhbGxvd3MgdG8gYmUgZXh0ZXJuYWxseSBhZGRlZC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VYVF9NVUxUSUNBU1RfSVBfQUREUlMKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VYVF9NVUxUSUNBU1RfSVBfQUREUlMgICAgICAgICAgICAyCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX01BWF9FWFRfTVVMVElDQVNUX0lQX0FERFJTCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR182TE9XUEFOX1JFQVNTRU1CTFlfVElNRU9VVAorICoKKyAqIFRoZSA2TG9XUEFOIGZyYWdtZW50IHJlYXNzZW1ibHkgdGltZW91dCBpbiBzZWNvbmRzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR182TE9XUEFOX1JFQVNTRU1CTFlfVElNRU9VVAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR182TE9XUEFOX1JFQVNTRU1CTFlfVElNRU9VVCAgICAgICAgICAgIDUKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfNkxPV1BBTl9SRUFTU0VNQkxZX1RJTUVPVVQKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX01QTF9TRUVEX1NFVF9FTlRSSUVTCisgKgorICogVGhlIG51bWJlciBvZiBNUEwgU2VlZCBTZXQgZW50cmllcyBmb3IgZHVwbGljYXRlIGRldGVjdGlvbi4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTVBMX1NFRURfU0VUX0VOVFJJRVMKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTVBMX1NFRURfU0VUX0VOVFJJRVMgICAgICAgICAgICAgICAgICAzMgorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19NUExfU0VFRF9TRVRfRU5UUklFUworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTVBMX1NFRURfU0VUX0VOVFJZX0xJRkVUSU1FCisgKgorICogVGhlIE1QTCBTZWVkIFNldCBlbnRyeSBsaWZldGltZSBpbiBzZWNvbmRzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19NUExfU0VFRF9TRVRfRU5UUllfTElGRVRJTUUKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTVBMX1NFRURfU0VUX0VOVFJZX0xJRkVUSU1FICAgICAgICAgICA1CisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX01QTF9TRUVEX1NFVF9FTlRSWV9MSUZFVElNRQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfSk9JTkVSX1VEUF9QT1JUCisgKgorICogVGhlIE1QTCBjYWNoZSBlbnRyeSBsaWZldGltZSBpbiBzZWNvbmRzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19KT0lORVJfVURQX1BPUlQKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfSk9JTkVSX1VEUF9QT1JUICAgICAgICAgICAgICAgICAgICAgICAxMDAwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0pPSU5FUl9VRFBfUE9SVAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VORVJHWV9SRVNVTFRTCisgKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIEVuZXJneSBMaXN0IGVudHJpZXMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9FTkVSR1lfUkVTVUxUUworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfRU5FUkdZX1JFU1VMVFMgICAgICAgICAgICAgICAgICAgIDY0CisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX01BWF9FTkVSR1lfUkVTVUxUUworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0pPSU5FUl9FTlRSSUVTCisgKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIEpvaW5lciBlbnRyaWVzIG1haW50YWluZWQgYnkgdGhlIENvbW1pc3Npb25lci4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0pPSU5FUl9FTlRSSUVTCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BWF9KT0lORVJfRU5UUklFUyAgICAgICAgICAgICAgICAgICAgMgorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19NQVhfSk9JTkVSX0VOVFJJRVMKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9TVEFURUNIQU5HRV9IQU5ETEVSUworICoKKyAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzdGF0ZS1jaGFuZ2VkIGNhbGxiYWNrIGhhbmRsZXJzIChzZXQgdXNpbmcgYG90U2V0U3RhdGVDaGFuZ2VkQ2FsbGJhY2soKWApLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfU1RBVEVDSEFOR0VfSEFORExFUlMKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTUFYX1NUQVRFQ0hBTkdFX0hBTkRMRVJTICAgICAgICAgICAgICAxCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX01BWF9TVEFURUNIQU5HRV9IQU5ETEVSUworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9BQ0tfVElNRU9VVAorICoKKyAqIE1pbmltdW0gc3BhY2luZyBiZWZvcmUgZmlyc3QgcmV0cmFuc21pc3Npb24gd2hlbiBBQ0sgaXMgbm90IHJlY2VpdmVkIChSRkM3MjUyIGRlZmF1bHQgdmFsdWUgaXMgMikuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0NPQVBfQUNLX1RJTUVPVVQKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9BQ0tfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAyCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0NPQVBfQUNLX1RJTUVPVVQKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0NPQVBfQUNLX1JBTkRPTV9GQUNUT1JfTlVNRVJBVE9SCisgKgorICogTnVtZXJhdG9yIG9mIEFDS19SQU5ET01fRkFDVE9SIHVzZWQgdG8gY2FsY3VsYXRlIG1heGltdW0gc3BhY2luZyBiZWZvcmUgZmlyc3QgcmV0cmFuc21pc3Npb24gd2hlbgorICogQUNLIGlzIG5vdCByZWNlaXZlZCAoUkZDNzI1MiBkZWZhdWx0IHZhbHVlIG9mIEFDS19SQU5ET01fRkFDVE9SIGlzIDEuNSwgbXVzdCBub3QgYmUgZGVjcmVhc2VkIGJlbG93IDEpLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19SQU5ET01fRkFDVE9SX05VTUVSQVRPUgorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19SQU5ET01fRkFDVE9SX05VTUVSQVRPUiAgICAgIDMKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9BQ0tfUkFORE9NX0ZBQ1RPUl9OVU1FUkFUT1IKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0NPQVBfQUNLX1JBTkRPTV9GQUNUT1JfREVOT01JTkFUT1IKKyAqCisgKiBEZW5vbWluYXRvciBvZiBBQ0tfUkFORE9NX0ZBQ1RPUiB1c2VkIHRvIGNhbGN1bGF0ZSBtYXhpbXVtIHNwYWNpbmcgYmVmb3JlIGZpcnN0IHJldHJhbnNtaXNzaW9uIHdoZW4KKyAqIEFDSyBpcyBub3QgcmVjZWl2ZWQgKFJGQzcyNTIgZGVmYXVsdCB2YWx1ZSBvZiBBQ0tfUkFORE9NX0ZBQ1RPUiBpcyAxLjUsIG11c3Qgbm90IGJlIGRlY3JlYXNlZCBiZWxvdyAxKS4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9BQ0tfUkFORE9NX0ZBQ1RPUl9ERU5PTUlOQVRPUgorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19SQU5ET01fRkFDVE9SX0RFTk9NSU5BVE9SICAgIDIKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9BQ0tfUkFORE9NX0ZBQ1RPUl9ERU5PTUlOQVRPUgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9NQVhfUkVUUkFOU01JVAorICoKKyAqIE1heGltdW0gbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucyBmb3IgQ29BUCBDb25maXJtYWJsZSBtZXNzYWdlcyAoUkZDNzI1MiBkZWZhdWx0IHZhbHVlIGlzIDQpLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX01BWF9SRVRSQU5TTUlUCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0NPQVBfTUFYX1JFVFJBTlNNSVQgICAgICAgICAgICAgICAgICAgNAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX01BWF9SRVRSQU5TTUlUCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX1NFUlZFUl9NQVhfQ0FDSEVEX1JFU1BPTlNFUworICoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGNhY2hlZCByZXNwb25zZXMgZm9yIENvQVAgQ29uZmlybWFibGUgbWVzc2FnZXMuCisgKgorICogQ2FjaGVkIHJlc3BvbnNlcyBhcmUgdXNlZCBmb3IgbWVzc2FnZSBkZWR1cGxpY2F0aW9uLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX1NFUlZFUl9NQVhfQ0FDSEVEX1JFU1BPTlNFUworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX1NFUlZFUl9NQVhfQ0FDSEVEX1JFU1BPTlNFUyAgICAgIDEwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0NPQVBfU0VSVkVSX01BWF9DQUNIRURfUkVTUE9OU0VTCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19ETlNfUkVTUE9OU0VfVElNRU9VVAorICoKKyAqIE1heGltdW0gdGltZSB0aGF0IEROUyBDbGllbnQgd2FpdHMgZm9yIHJlc3BvbnNlIGluIG1pbGxpc2Vjb25kcy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfRE5TX1JFU1BPTlNFX1RJTUVPVVQKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRE5TX1JFU1BPTlNFX1RJTUVPVVQgICAgICAgICAgICAgICAgICAzMDAwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0ROU19SRVNQT05TRV9USU1FT1VUCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19ETlNfTUFYX1JFVFJBTlNNSVQKKyAqCisgKiBNYXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgZm9yIEROUyBjbGllbnQuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0ROU19NQVhfUkVUUkFOU01JVAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19ETlNfTUFYX1JFVFJBTlNNSVQgICAgICAgICAgICAgICAgICAgIDIKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfRE5TX01BWF9SRVRSQU5TTUlUCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19KT0lOX0JFQUNPTl9WRVJTSU9OCisgKgorICogVGhlIEJlYWNvbiB2ZXJzaW9uIHRvIHVzZSB3aGVuIHRoZSBiZWFjb24gam9pbiBmbGFnIGlzIHNldC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfSk9JTl9CRUFDT05fVkVSU0lPTgorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19KT0lOX0JFQUNPTl9WRVJTSU9OICAgICAgICAgICAgICAgICAgIGtQcm90b2NvbFZlcnNpb24KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfSk9JTl9CRUFDT05fVkVSU0lPTgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UCisgKgorICogVGhlIG1lc3NhZ2UgcG9vbCBpcyBtYW5hZ2VkIGJ5IHBsYXRmb3JtIGRlZmluZWQgbG9naWMgd2hlbiB0aGlzIGZsYWcgaXMgc2V0LgorICogVGhpcyBmZWF0dXJlIHdvdWxkIHR5cGljYWxseSBiZSB1c2VkIHdoZW4gb3BlcmF0aW5nIGluIGEgbXVsdGktdGhyZWFkZWQgc3lzdGVtCisgKiBhbmQgbXVsdGlwbGUgdGhyZWFkcyBuZWVkIHRvIGFjY2VzcyB0aGUgbWVzc2FnZSBwb29sLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19QTEFURk9STV9NRVNTQUdFX01BTkFHRU1FTlQKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UICAgICAgICAgICAwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFDX0JMQUNLTElTVF9TSVpFCisgKgorICogVGhlIG51bWJlciBpZiBNQUMgYmxhY2tsaXN0IGVudHJpZXMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX01BQ19CTEFDS0xJU1RfU0laRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQUNfQkxBQ0tMSVNUX1NJWkUgICAgICAgICAgICAgICAgICAgIDMyCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX01BQ19CTEFDS0xJU1RfU0laRQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFDX1dISVRFTElTVF9TSVpFCisgKgorICogVGhlIG51bWJlciBpZiBNQUMgd2hpdGVsaXN0IGVudHJpZXMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX01BQ19XSElURUxJU1RfU0laRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQUNfV0hJVEVMSVNUX1NJWkUgICAgICAgICAgICAgICAgICAgIDMyCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX01BQ19XSElURUxJU1RfU0laRQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfU1RPUkVfRlJBTUVfQ09VTlRFUl9BSEVBRAorICoKKyAqICBUaGUgdmFsdWUgYWhlYWQgb2YgdGhlIGN1cnJlbnQgZnJhbWUgY291bnRlciBmb3IgcGVyc2lzdGVudCBzdG9yYWdlCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX1NUT1JFX0ZSQU1FX0NPVU5URVJfQUhFQUQKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfU1RPUkVfRlJBTUVfQ09VTlRFUl9BSEVBRCAgICAgICAgICAgICAxMDAwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX1NUT1JFX0ZSQU1FX0NPVU5URVJfQUhFQUQKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTAorICoKKyAqIFRoZSBsb2cgbGV2ZWwgKHVzZWQgYXQgY29tcGlsZSB0aW1lKS4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RfTE9HX0xFVkVMX0NSSVQKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfRFlOQU1JQ19MT0dfTEVWRUwKKyAqCisgKiBEZWZpbmUgYXMgMSB0byBlbmFibGUgZHluYW1pYyBsb2cgbGV2ZWwgY29udHJvbC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCBkZXRlcm1pbmVzIHRoZSBsb2cgbGV2ZWwgYXQKKyAqIGNvbXBpbGUgdGltZS4gVGhlIGR5bmFtaWMgbG9nIGxldmVsIGNvbnRyb2wgKGlmIGVuYWJsZWQpIG9ubHkgYWxsb3dzCisgKiBkZWNyZWFzaW5nIHRoZSBsb2cgbGV2ZWwgZnJvbSB0aGUgY29tcGlsZSB0aW1lIHZhbHVlLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfRFlOQU1JQ19MT0dfTEVWRUwKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfTE9HX0xFVkVMICAgICAgICAgICAgICAwCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfTE9HX0xFVkVMCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfQVBJCisgKgorICogRGVmaW5lIHRvIGVuYWJsZSBPcGVuVGhyZWFkIEFQSSBsb2dnaW5nLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfQVBJCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19BUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfQVBJCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUxFCisgKgorICogRGVmaW5lIHRvIGVuYWJsZSBNTEUgbG9nZ2luZy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX01MRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX01MRQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0FSUAorICoKKyAqIERlZmluZSB0byBlbmFibGUgRUlELXRvLVJMT0MgbWFwIGxvZ2dpbmcuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19BUlAKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0FSUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19BUlAKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19ORVREQVRBCisgKgorICogRGVmaW5lIHRvIGVuYWJsZSBOZXR3b3JrIERhdGEgbG9nZ2luZy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX05FVERBVEEKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX05FVERBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19ORVREQVRBCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfSUNNUAorICoKKyAqIERlZmluZSB0byBlbmFibGUgSUNNUHY2IGxvZ2dpbmcuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19JQ01QCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19JQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfSUNNUAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0lQNgorICoKKyAqIERlZmluZSB0byBlbmFibGUgSVB2NiBsb2dnaW5nLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfSVA2CisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19JUDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfSVA2CisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUFDCisgKgorICogRGVmaW5lIHRvIGVuYWJsZSBJRUVFIDgwMi4xNS40IE1BQyBsb2dnaW5nLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUFDCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19NQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUFDCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUVNCisgKgorICogRGVmaW5lIHRvIGVuYWJsZSBtZW1vcnkgbG9nZ2luZy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX01FTQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX01FTQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BLVF9EVU1QCisgKgorICogRGVmaW5lIHRvIGVuYWJsZSBsb2cgY29udGVudCBvZiBwYWNrZXRzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUEtUX0RVTVAKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BLVF9EVU1QICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19QS1RfRFVNUAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX05FVERJQUcKKyAqCisgKiBEZWZpbmUgdG8gZW5hYmxlIG5ldHdvcmsgZGlhZ25vc3RpYyBsb2dnaW5nLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTkVURElBRworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTkVURElBRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX05FVERJQUcKKworLyoqCisqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BMQVRGT1JNCisqCisqIERlZmluZSB0byBlbmFibGUgcGxhdGZvcm0gcmVnaW9uIGxvZ2dpbmcuCisqCisqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUExBVEZPUk0KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BMQVRGT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19QTEFURk9STQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0NPQVAKKyAqCisgKiBEZWZpbmUgdG8gZW5hYmxlIENPQVAgbG9nZ2luZy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0NPQVAKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0NPQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19DT0FQCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUEVORF9MRVZFTAorICoKKyAqIERlZmluZSB0byBwcmVwZW5kIHRoZSBsb2cgbGV2ZWwgdG8gYWxsIGxvZyBtZXNzYWdlcworICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUEVORF9MRVZFTAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUEVORF9MRVZFTCAgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfTEVWRUwKKworLyoqCisqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OCisqCisqIERlZmluZSB0byBwcmVwZW5kIHRoZSBsb2cgcmVnaW9uIHRvIGFsbCBsb2cgbWVzc2FnZXMKKyoKKyovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX1JFR0lPTgorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUEVORF9SRUdJT04gICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfU1VGRklYCisgKgorICogRGVmaW5lIHN1ZmZpeCB0byBhcHBlbmQgYXQgdGhlIGVuZCBvZiBsb2dzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfU1VGRklYCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19TVUZGSVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX1NVRkZJWAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfUExBVF9MT0dfRlVOQ1RJT04KKyAqCisgKiBEZWZpbmVzIHRoZSBuYW1lIG9mIGZ1bmN0aW9uL21hY3JvIHVzZWQgZm9yIGxvZ2dpbmcgaW5zaWRlIE9wZW5UaHJlYWQsIGJ5IGRlZmF1bHQgaXMgc2V0IHRvIGBvdFBsYXRMb2coKWAuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX1BMQVRfTE9HX0ZVTkNUSU9OCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX1BMQVRfTE9HX0ZVTkNUSU9OICAgICAgICAgICAgICAgICAgICAgb3RQbGF0TG9nCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQKKyAqCisgKiBEZWZpbmUgdG8gMSB0byBlbmFibGUgZGVmYXVsdCBsb2cgb3V0cHV0LgorICoKKyAqIFdoZW4gZW5hYmxlZCBPcGVuVGhyZWFkIHByb3ZpZGVzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgYG90UGxhdExvZygpYCB3aGljaCBpcyB0aWVkIHRvIGVpdGhlciBOQ1Agb3IgQ0xJCisgKiBzdHJlYW0gd3JpdGVzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQgICAgICAgICAgICAgMAorI2VuZGlmCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUworICoKKyAqIFRoZSBudW1iZXIgb2YgZGhjcCBwcmVmaXhlcy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTlVNX0RIQ1BfUFJFRklYRVMKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTlVNX0RIQ1BfUFJFRklYRVMgICAgICAgICAgICAgICAgICAgICA0CisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19OVU1fU0xBQUNfQUREUkVTU0VTCisgKgorICogVGhlIG51bWJlciBvZiBhdXRvLWNvbmZpZ3VyZWQgU0xBQUMgYWRkcmVzc2VzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19OVU1fU0xBQUNfQUREUkVTU0VTCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX05VTV9TTEFBQ19BRERSRVNTRVMgICAgICAgICAgICAgICAgICAgNAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19OVU1fU0xBQUNfQUREUkVTU0VTCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfVFhfQlVGRkVSX1NJWkUKKyAqCisgKiAgVGhlIHNpemUgb2YgTkNQIG1lc3NhZ2UgYnVmZmVyIGluIGJ5dGVzCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX05DUF9UWF9CVUZGRVJfU0laRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfVFhfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgIDUxMgorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfVFhfQlVGRkVSX1NJWkUKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX05DUF9VQVJUX1RYX0NIVU5LX1NJWkUKKyAqCisgKiAgVGhlIHNpemUgb2YgTkNQIFVBUlQgVFggY2h1bmsgaW4gYnl0ZXMKKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTkNQX1VBUlRfVFhfQ0hVTktfU0laRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfVUFSVF9UWF9DSFVOS19TSVpFICAgICAgICAgICAgICAgIDEyOAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfVUFSVF9UWF9DSFVOS19TSVpFCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfVUFSVF9SWF9CVUZGRVJfU0laRQorICoKKyAqICBUaGUgc2l6ZSBvZiBOQ1AgVUFSVCBSWCBidWZmZXIgaW4gYnl0ZXMKKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTkNQX1VBUlRfUlhfQlVGRkVSX1NJWkUKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTkNQX1VBUlRfUlhfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAxMzAwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX05DUF9VQVJUX1JYX0JVRkZFUl9TSVpFCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfU1BJX0JVRkZFUl9TSVpFCisgKgorICogIFRoZSBzaXplIG9mIE5DUCBTUEkgKFJYL1RYKSBidWZmZXIgaW4gYnl0ZXMKKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTkNQX1NQSV9CVUZGRVJfU0laRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfU1BJX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgIDEzMDAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTkNQX1NQSV9CVUZGRVJfU0laRQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fQVNTRVJUX01BTkFHRU1FTlQKKyAqCisgKiBUaGUgYXNzZXJ0IGlzIG1hbmFnZWQgYnkgcGxhdGZvcm0gZGVmaW5lZCBsb2dpYyB3aGVuIHRoaXMgZmxhZyBpcyBzZXQuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX0FTU0VSVF9NQU5BR0VNRU5UCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX0FTU0VSVF9NQU5BR0VNRU5UICAgICAgICAgICAgMAorI2VuZGlmCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfQUNLX1RJTUVPVVQKKyAqCisgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc29mdHdhcmUgQUNLIHRpbWVvdXQgbG9naWMuCisgKgorICogQXBwbGljYWJsZSBvbmx5IGlmIHJhdyBsaW5rIGxheWVyIEFQSSBpcyBlbmFibGVkIChpLmUuLCBgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJYCBpcyBzZXQpLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfQUNLX1RJTUVPVVQKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUICAgICAgICAgICAwCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCisgKgorICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIHJldHJhbnNtaXNzaW9uIGxvZ2ljLgorICoKKyAqIEFwcGxpY2FibGUgb25seSBpZiByYXcgbGluayBsYXllciBBUEkgaXMgZW5hYmxlZCAoaS5lLiwgYE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSWAgaXMgc2V0KS4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQgICAgICAgICAgICAwCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorICoKKyAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSBlbmVyZ3kgc2Nhbm5pbmcgbG9naWMuCisgKgorICogQXBwbGljYWJsZSBvbmx5IGlmIHJhdyBsaW5rIGxheWVyIEFQSSBpcyBlbmFibGVkIChpLmUuLCBgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJYCBpcyBzZXQpLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOICAgICAgICAgICAwCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9QTEFURk9STV9VU0VDX0JBQ0tPRkZfVElNRVIKKyAqCisgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgbWljcm9zZWNvbmQgYmFja29mZiB0aW1lciBpbXBsZW1lbnRlZCBpbiBwbGF0Zm9ybS4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfUExBVEZPUk1fVVNFQ19CQUNLT0ZGX1RJTUVSICAgIDAKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0FVVE9fU1RBUlRfU1VQUE9SVAorICoKKyAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBhdXRvIHN0YXJ0IGxvZ2ljLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfQVVUT19TVEFSVF9TVVBQT1JUCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9BVVRPX1NUQVJUX1NVUFBPUlQgICAgICAgICAgICAgMQorI2VuZGlmCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfQkVBQ09OX1JTUF9JRl9KT0lOQUJMRQorICoKKyAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBiZWFjb24gcmVzcG9uc2UgZm9yIGpvaW5hYmxlIG5ldHdvcmtzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfQkVBQ09OX1JTUF9JRl9KT0lOQUJMRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfQkVBQ09OX1JTUF9JRl9KT0lOQUJMRSAgICAgICAgIDAKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUJFRFRMU19IRUFQX1NJWkUKKyAqCisgKiBUaGUgc2l6ZSBvZiBtYmVkVExTIGhlYXAgYnVmZmVyIHdoZW4gRFRMUyBpcyBlbmFibGVkLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQkVEVExTX0hFQVBfU0laRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQkVEVExTX0hFQVBfU0laRSAgICAgICAgICAgICAgICAgICAgICgyMDQ4ICogc2l6ZW9mKHZvaWQgKikpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX01CRURUTFNfSEVBUF9TSVpFX05PX0RUTFMKKyAqCisgKiBUaGUgc2l6ZSBvZiBtYmVkVExTIGhlYXAgYnVmZmVyIHdoZW4gRFRMUyBpcyBkaXNhYmxlZC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUJFRFRMU19IRUFQX1NJWkVfTk9fRFRMUworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQkVEVExTX0hFQVBfU0laRV9OT19EVExTICAgICAgICAgICAgIDM4NAorI2VuZGlmCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCisgKgorICogRW5hYmxlIHNldHRpbmcgc3RlZXJpbmcgZGF0YSBvdXQgb2YgYmFuZC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CICAgICAgICAgIDAKKyNlbmRpZgorCisvKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19DSElMRF9TVVBFUlZJU0lPTl9JTlRFUlZBTAorICoKKyAqIFRoZSBkZWZhdWx0IHN1cGVydmlzaW9uIGludGVydmFsIGluIHNlY29uZHMgdXNlZCBieSBwYXJlbnQuIFNldCB0byB6ZXJvIHRvIGRpc2FibGUgdGhlIHN1cGVydmlzaW9uIHByb2Nlc3Mgb24gdGhlCisgKiBwYXJlbnQuCisgKgorICogQXBwbGljYWJsZSBvbmx5IGlmIGNoaWxkIHN1cGVydmlzaW9uIGZlYXR1cmUgaXMgZW5hYmxlZCAoaS5lLiwgYE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OIGAgaXMgc2V0KS4KKyAqCisgKiBDaGlsZCBzdXBlcnZpc2lvbiBmZWF0dXJlIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciBwYXJlbnQgdG8gZW5zdXJlIHRoYXQgYSBtZXNzYWdlIGlzIHNlbnQgdG8gZWFjaCBzbGVlcHkgY2hpbGQKKyAqIHdpdGhpbiB0aGUgc3VwZXJ2aXNpb24gaW50ZXJ2YWwuIElmIHRoZXJlIGlzIG5vIHRyYW5zbWlzc2lvbiB0byB0aGUgY2hpbGQgd2l0aGluIHRoZSBzdXBlcnZpc2lvbiBpbnRlcnZhbCwgY2hpbGQKKyAqIHN1cGVydmlzb3Igd2lsbCBlbnF1ZXVlIGFuZCBzZW5kIGEgc3VwZXJ2aXNpb24gbWVzc2FnZSAoYSBkYXRhIG1lc3NhZ2Ugd2l0aCBlbXB0eSBwYXlsb2FkKSB0byB0aGUgY2hpbGQuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0NISUxEX1NVUEVSVklTSU9OX0lOVEVSVkFMCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0NISUxEX1NVUEVSVklTSU9OX0lOVEVSVkFMICAgICAgICAgICAgMTI5CisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX1NVUEVSVklTSU9OX0NIRUNLX1RJTUVPVVQKKyAqCisgKiBUaGUgZGVmYXVsdCBzdXBlcnZpc2lvbiBjaGVjayB0aW1lb3V0IGludGVydmFsIChpbiBzZWNvbmRzKSB1c2VkIGJ5IGEgZGV2aWNlIGluIGNoaWxkIHN0YXRlLiBTZXQgdG8gemVybyB0byBkaXNhYmxlCisgKiB0aGUgc3VwZXJ2aXNpb24gY2hlY2sgcHJvY2VzcyBvbiB0aGUgY2hpbGQuCisgKgorICogQXBwbGljYWJsZSBvbmx5IGlmIGNoaWxkIHN1cGVydmlzaW9uIGZlYXR1cmUgaXMgZW5hYmxlZCAoaS5lLiwgYE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OYCBpcyBzZXQpLgorICoKKyAqIElmIHRoZSBzbGVlcHkgY2hpbGQgZG9lcyBub3QgaGVhciBmcm9tIGl0cyBwYXJlbnQgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZW91dCBpbnRlcnZhbCwgaXQgaW5pdGlhdGVzIHRoZSByZS1hdHRhY2gKKyAqIHByb2Nlc3MgKE1MRSBDaGlsZCBVcGRhdGUgUmVxdWVzdC9SZXNwb25zZSBleGNoYW5nZSB3aXRoIGl0cyBwYXJlbnQpLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19TVVBFUlZJU0lPTl9DSEVDS19USU1FT1VUCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX1NVUEVSVklTSU9OX0NIRUNLX1RJTUVPVVQgICAgICAgICAgICAgMTkwCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX1NVUEVSVklTSU9OX01TR19OT19BQ0tfUkVRVUVTVAorICoKKyAqIERlZmluZSBhcyAxIHRvIGNsZWFyL2Rpc2FibGUgMTUuNCBhY2sgcmVxdWVzdCBpbiB0aGUgTUFDIGhlYWRlciBvZiBhIHN1cGVydmlzaW9uIG1lc3NhZ2UuCisgKgorICogQXBwbGljYWJsZSBvbmx5IGlmIGNoaWxkIHN1cGVydmlzaW9uIGZlYXR1cmUgaXMgZW5hYmxlZCAoaS5lLiwgYE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OYCBpcyBzZXQpLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19TVVBFUlZJU0lPTl9NU0dfTk9fQUNLX1JFUVVFU1QKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfU1VQRVJWSVNJT05fTVNHX05PX0FDS19SRVFVRVNUICAgICAgICAwCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisgKgorICogRGVmaW5lIGFzIDEgdG8gZW5hYmxlIHBlZWsvcG9rZSBmdW5jdGlvbmFsaXR5IG9uIE5DUC4KKyAqCisgKiBQZWVrL1Bva2UgYWxsb3dzIHRoZSBob3N0IHRvIHJlYWQvd3JpdGUgdG8gbWVtb3J5IGFkZHJlc3NlcyBvbiBOQ1AuIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTkNQX0VOQUJMRV9QRUVLX1BPS0UKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTkNQX0VOQUJMRV9QRUVLX1BPS0UgICAgICAgICAgICAgICAgICAwCisjZW5kaWYKKworLyoKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBWV9BV0FLRV9CRVRXRUVOX0ZSQUdNRU5UUworICoKKyAqIERlZmluZSBhcyAxIHRvIHN0YXkgYXdha2UgYmV0d2VlbiBmcmFnbWVudHMgd2hpbGUgdHJhbnNtaXR0aW5nIGEgbGFyZ2UgcGFja2V0LAorICogYW5kIHRvIHN0YXkgYXdha2UgYWZ0ZXIgcmVjZWl2aW5nIGEgcGFja2V0IHdpdGggZnJhbWUgcGVuZGluZyBzZXQgdG8gdHJ1ZS4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBWV9BV0FLRV9CRVRXRUVOX0ZSQUdNRU5UUworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19TVEFZX0FXQUtFX0JFVFdFRU5fRlJBR01FTlRTICAgICAgICAgIDAKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09SRV9ERUZBVUxUX0NPTkZJR19IXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvb3BlbnRocmVhZC1pbnN0YW5jZS5oIGIvc3JjL2NvcmUvb3BlbnRocmVhZC1pbnN0YW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOWFmYjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9vcGVudGhyZWFkLWluc3RhbmNlLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCBmb3IgYWxsIGluc3RhbmNlcyBvZiBPcGVuVGhyZWFkIEFQSS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURJTlNUQU5DRV9IXworI2RlZmluZSBPUEVOVEhSRUFESU5TVEFOQ0VfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkYm9vbC5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgIm9wZW50aHJlYWQtc2luZ2xlLWluc3RhbmNlLmgiCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisjaW5jbHVkZSAiYXBpL2xpbmtfcmF3LmhwcCIKKyNlbmRpZgorI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL21iZWR0bHMuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCisvKioKKyAqIFRoaXMgdHlwZSByZXByZXNlbnRzIGFsbCB0aGUgc3RhdGljIC8gZ2xvYmFsIHZhcmlhYmxlcyB1c2VkIGJ5IE9wZW5UaHJlYWQgYWxsb2NhdGVkIGluIG9uZSBwbGFjZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RJbnN0YW5jZQoreworICAgIC8vCisgICAgLy8gQ2FsbGJhY2tzCisgICAgLy8KKworICAgIG90OjpJcDY6Ok5ldGlmQ2FsbGJhY2sgbU5ldGlmQ2FsbGJhY2tbT1BFTlRIUkVBRF9DT05GSUdfTUFYX1NUQVRFQ0hBTkdFX0hBTkRMRVJTXTsKKworICAgIG90SXA2UmVjZWl2ZUNhbGxiYWNrIG1SZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjazsKKyAgICB2b2lkICptUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2tDb250ZXh0OworCisgICAgb3RIYW5kbGVBY3RpdmVTY2FuUmVzdWx0IG1BY3RpdmVTY2FuQ2FsbGJhY2s7CisgICAgdm9pZCAqbUFjdGl2ZVNjYW5DYWxsYmFja0NvbnRleHQ7CisKKyAgICBvdEhhbmRsZUVuZXJneVNjYW5SZXN1bHQgbUVuZXJneVNjYW5DYWxsYmFjazsKKyAgICB2b2lkICptRW5lcmd5U2NhbkNhbGxiYWNrQ29udGV4dDsKKworICAgIC8vCisgICAgLy8gU3RhdGUKKyAgICAvLworCisjaWYgIU9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIG90OjpDcnlwdG86Ok1iZWRUbHMgbU1iZWRUbHM7CisjZW5kaWYKKyAgICBvdDo6SXA2OjpJcDYgbUlwNjsKKyAgICBvdDo6VGhyZWFkTmV0aWYgbVRocmVhZE5ldGlmOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgb3Q6OkxpbmtSYXcgbUxpbmtSYXc7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisgICAgb3Q6OkNvYXA6OkNvYXAgbUFwcGxpY2F0aW9uQ29hcDsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfRFlOQU1JQ19MT0dfTEVWRUwKKyAgICBvdExvZ0xldmVsIG1Mb2dMZXZlbDsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfRFlOQU1JQ19MT0dfTEVWRUwKKworICAgIC8vIENvbnN0cnVjdG9yCisgICAgb3RJbnN0YW5jZSh2b2lkKTsKKworfSBvdEluc3RhbmNlOworCitzdGF0aWMgaW5saW5lIG90SW5zdGFuY2UgKm90SW5zdGFuY2VGcm9tSXA2KG90OjpJcDY6OklwNiAqYUlwNikKK3sKKyAgICByZXR1cm4gKG90SW5zdGFuY2UgKilDT05UQUlOSU5HX1JFQ09SRChhSXA2LCBvdEluc3RhbmNlLCBtSXA2KTsKK30KKworc3RhdGljIGlubGluZSBvdEluc3RhbmNlICpvdEluc3RhbmNlRnJvbVRocmVhZE5ldGlmKG90OjpUaHJlYWROZXRpZiAqYVRocmVhZE5ldGlmKQoreworICAgIHJldHVybiAob3RJbnN0YW5jZSAqKUNPTlRBSU5JTkdfUkVDT1JEKGFUaHJlYWROZXRpZiwgb3RJbnN0YW5jZSwgbVRocmVhZE5ldGlmKTsKK30KKworI2VuZGlmICAvLyBPUEVOVEhSRUFESU5TVEFOQ0VfSF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL29wZW50aHJlYWQtc2luZ2xlLWluc3RhbmNlLmggYi9zcmMvY29yZS9vcGVudGhyZWFkLXNpbmdsZS1pbnN0YW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyY2E1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9vcGVudGhyZWFkLXNpbmdsZS1pbnN0YW5jZS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3Igc2luZ2xlIGluc3RhbmNlIE9wZW5UaHJlYWQgb2JqZWN0cy4KKyAqLworCisjaWZuZGVmIFNJTkdMRV9PUEVOVEhSRUFEX0lOU1RBTkNFX0hfCisjZGVmaW5lIFNJTkdMRV9PUEVOVEhSRUFEX0lOU1RBTkNFX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorCisKKyNpZiAhT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworY2xhc3MgTWVzaEZvcndhcmRlcjsKK2NsYXNzIFRpbWVyU2NoZWR1bGVyOworY2xhc3MgVGFza2xldFNjaGVkdWxlcjsKK25hbWVzcGFjZSBJcDYgeyBjbGFzcyBJcDY7IH0KKworfSAvLyBuYW1lc3BhY2Ugb3QKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzaW5nbGUgb3RJbnN0YW5jZSAoaWYgaW5pdGlhbGl6ZWQgYW5kIHJlYWR5KS4KKyAqCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gc2luZ2xlIG90SW5zdGFuY2Ugc3RydWN0dXJlLCBvciBOVUxMIGlmIHRoZSBpbnN0YW5jZSBpcyBub3QgcmVhZHksIGkuZS4gZWl0aGVyIGl0IGlzIG5vdCB5ZXQKKyAqICAgICAgICAgIGluaXRpYWxpemVkIChubyBjYWxsIHRvIGBvdEluc3RhbmNlSW5pdFNpbmdsZSgpYCkgb3IgaXQgaXMgZmluYWxpemVkIChjYWxsIHRvIGBvdEluc3RhbmNlRmluYWxpemUoKWApLgorICoKKyAqLworb3RJbnN0YW5jZSAqb3RHZXRJbnN0YW5jZSh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZSB0aHJlYWQgbmV0d29yayBpbnRlcmZhY2UgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIHRocmVhZCBuZXR3b3JrIGludGVyZmFjZSBpbnN0YW5jZS4KKyAqCisgKi8KK290OjpUaHJlYWROZXRpZiAmb3RHZXRUaHJlYWROZXRpZih2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZSBNZXNoRm9yd2FyZGVyIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBNZXNoRm9yd2FyZGVyIGluc3RhbmNlLgorICoKKyAqLworb3Q6Ok1lc2hGb3J3YXJkZXIgJm90R2V0TWVzaEZvcndhcmRlcih2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZSBUaW1lclNjaGVkdWxlciBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgVGltZXJTY2hlZHVsZXIgaW5zdGFuY2UuCisgKgorICovCitvdDo6VGltZXJTY2hlZHVsZXIgJm90R2V0VGltZXJTY2hlZHVsZXIodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGUgVGFza2xldFNoY2VkdWxlciBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgVGFza2xldFNoY2VkdWxlciBpbnN0YW5jZS4KKyAqCisgKi8KK290OjpUYXNrbGV0U2NoZWR1bGVyICZvdEdldFRhc2tsZXRTY2hlZHVsZXIodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGUgSXA2IGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBJcDYgaW5zdGFuY2UuCisgKgorICovCitvdDo6SXA2OjpJcDYgJm90R2V0SXA2KHZvaWQpOworCisjZW5kaWYgLy8gI2lmICFPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKworI2VuZGlmICAvLyBTSU5HTEVfT1BFTlRIUkVBRF9JTlNUQU5DRV9IXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL2FkZHJlc3NfcmVzb2x2ZXIuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL2FkZHJlc3NfcmVzb2x2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYWMxODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvYWRkcmVzc19yZXNvbHZlci5jcHAKQEAgLTAsMCArMSw3MTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgVGhyZWFkJ3MgRUlELXRvLVJMT0MgbWFwcGluZyBhbmQgY2FjaGluZy4KKyAqLworCisjaWYgT1BFTlRIUkVBRF9GVEQKKworI2RlZmluZSBXUFBfTkFNRSAiYWRkcmVzc19yZXNvbHZlci50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiYWRkcmVzc19yZXNvbHZlci5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tZXNoX2ZvcndhcmRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV9yb3V0ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKKworbmFtZXNwYWNlIG90IHsKKworQWRkcmVzc1Jlc29sdmVyOjpBZGRyZXNzUmVzb2x2ZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1BZGRyZXNzRXJyb3IoT1RfVVJJX1BBVEhfQUREUkVTU19FUlJPUiwgJkFkZHJlc3NSZXNvbHZlcjo6SGFuZGxlQWRkcmVzc0Vycm9yLCB0aGlzKSwKKyAgICBtQWRkcmVzc1F1ZXJ5KE9UX1VSSV9QQVRIX0FERFJFU1NfUVVFUlksICZBZGRyZXNzUmVzb2x2ZXI6OkhhbmRsZUFkZHJlc3NRdWVyeSwgdGhpcyksCisgICAgbUFkZHJlc3NOb3RpZmljYXRpb24oT1RfVVJJX1BBVEhfQUREUkVTU19OT1RJRlksICZBZGRyZXNzUmVzb2x2ZXI6OkhhbmRsZUFkZHJlc3NOb3RpZmljYXRpb24sIHRoaXMpLAorICAgIG1JY21wSGFuZGxlcigmQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVJY21wUmVjZWl2ZSwgdGhpcyksCisgICAgbVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZBZGRyZXNzUmVzb2x2ZXI6OkhhbmRsZVRpbWVyLCB0aGlzKQoreworICAgIENsZWFyKCk7CisKKyAgICBhVGhyZWFkTmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1BZGRyZXNzRXJyb3IpOworICAgIGFUaHJlYWROZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobUFkZHJlc3NRdWVyeSk7CisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtQWRkcmVzc05vdGlmaWNhdGlvbik7CisKKyAgICBhVGhyZWFkTmV0aWYuR2V0SXA2KCkubUljbXAuUmVnaXN0ZXJIYW5kbGVyKG1JY21wSGFuZGxlcik7Cit9CisKK3ZvaWQgQWRkcmVzc1Jlc29sdmVyOjpDbGVhcigpCit7CisgICAgbWVtc2V0KCZtQ2FjaGUsIDAsIHNpemVvZihtQ2FjaGUpKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGtDYWNoZUVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIG1DYWNoZVtpXS5tQWdlID0gaTsKKyAgICB9Cit9CisKK290RXJyb3IgQWRkcmVzc1Jlc29sdmVyOjpHZXRFbnRyeSh1aW50OF90IGFJbmRleCwgb3RFaWRDYWNoZUVudHJ5ICZhRW50cnkpIGNvbnN0Cit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUluZGV4IDwga0NhY2hlRW50cmllcywgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgIG1lbWNweSgmYUVudHJ5Lm1UYXJnZXQsICZtQ2FjaGVbYUluZGV4XS5tVGFyZ2V0LCBzaXplb2YoYUVudHJ5Lm1UYXJnZXQpKTsKKyAgICBhRW50cnkubVJsb2MxNiA9IG1DYWNoZVthSW5kZXhdLm1SbG9jMTY7CisgICAgYUVudHJ5Lm1WYWxpZCA9IG1DYWNoZVthSW5kZXhdLm1TdGF0ZSA9PSBDYWNoZTo6a1N0YXRlQ2FjaGVkOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBBZGRyZXNzUmVzb2x2ZXI6OlJlbW92ZSh1aW50OF90IHJvdXRlcklkKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0NhY2hlRW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKE1sZTo6TWxlOjpHZXRSb3V0ZXJJZChtQ2FjaGVbaV0ubVJsb2MxNikgPT0gcm91dGVySWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEludmFsaWRhdGVDYWNoZUVudHJ5KG1DYWNoZVtpXSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0FkZHJlc3NSZXNvbHZlcjo6Q2FjaGUgKkFkZHJlc3NSZXNvbHZlcjo6TmV3Q2FjaGVFbnRyeSh2b2lkKQoreworICAgIENhY2hlICpydmFsID0gTlVMTDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0NhY2hlRW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DYWNoZVtpXS5tU3RhdGUgPT0gQ2FjaGU6OmtTdGF0ZVF1ZXJ5ICYmIG1DYWNoZVtpXS5tRmFpbHVyZXMgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnZhbCA9PSBOVUxMIHx8IHJ2YWwtPm1BZ2UgPCBtQ2FjaGVbaV0ubUFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgcnZhbCA9ICZtQ2FjaGVbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocnZhbCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgSW52YWxpZGF0ZUNhY2hlRW50cnkoKnJ2YWwpOworICAgIH0KKworICAgIHJldHVybiBydmFsOworfQorCit2b2lkIEFkZHJlc3NSZXNvbHZlcjo6TWFya0NhY2hlRW50cnlBc1VzZWQoQ2FjaGUgJmFFbnRyeSkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtDYWNoZUVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ2FjaGVbaV0ubUFnZSA8IGFFbnRyeS5tQWdlKQorICAgICAgICB7CisgICAgICAgICAgICBtQ2FjaGVbaV0ubUFnZSsrOworICAgICAgICB9CisgICAgfQorCisgICAgYUVudHJ5Lm1BZ2UgPSAwOworfQorCit2b2lkIEFkZHJlc3NSZXNvbHZlcjo6SW52YWxpZGF0ZUNhY2hlRW50cnkoQ2FjaGUgJmFFbnRyeSkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtDYWNoZUVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ2FjaGVbaV0ubUFnZSA+IGFFbnRyeS5tQWdlKQorICAgICAgICB7CisgICAgICAgICAgICBtQ2FjaGVbaV0ubUFnZS0tOworICAgICAgICB9CisgICAgfQorCisgICAgYUVudHJ5Lm1BZ2UgPSBrQ2FjaGVFbnRyaWVzIC0gMTsKKyAgICBhRW50cnkubVN0YXRlID0gQ2FjaGU6OmtTdGF0ZUludmFsaWQ7CisgICAgb3RMb2dJbmZvQXJwKEdldEluc3RhbmNlKCksICJjYWNoZSBlbnRyeSByZW1vdmVkISIpOworfQorCitvdEVycm9yIEFkZHJlc3NSZXNvbHZlcjo6UmVzb2x2ZShjb25zdCBJcDY6OkFkZHJlc3MgJmFFaWQsIHVpbnQxNl90ICZhUmxvYzE2KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENhY2hlICplbnRyeSA9IE5VTEw7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtDYWNoZUVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ2FjaGVbaV0ubVN0YXRlICE9IENhY2hlOjprU3RhdGVJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobWVtY21wKCZtQ2FjaGVbaV0ubVRhcmdldCwgJmFFaWQsIHNpemVvZihtQ2FjaGVbaV0ubVRhcmdldCkpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW50cnkgPSAmbUNhY2hlW2ldOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVudHJ5ID09IE5VTEwpCisgICAgeworICAgICAgICBlbnRyeSA9IE5ld0NhY2hlRW50cnkoKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoZW50cnkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHN3aXRjaCAoZW50cnktPm1TdGF0ZSkKKyAgICB7CisgICAgY2FzZSBDYWNoZTo6a1N0YXRlSW52YWxpZDoKKyAgICAgICAgZW50cnktPm1UYXJnZXQgPSBhRWlkOworICAgICAgICBlbnRyeS0+bVJsb2MxNiA9IE1hYzo6a1Nob3J0QWRkckludmFsaWQ7CisgICAgICAgIGVudHJ5LT5tVGltZW91dCA9IGtBZGRyZXNzUXVlcnlUaW1lb3V0OworICAgICAgICBlbnRyeS0+bUZhaWx1cmVzID0gMDsKKyAgICAgICAgZW50cnktPm1SZXRyeVRpbWVvdXQgPSBrQWRkcmVzc1F1ZXJ5SW5pdGlhbFJldHJ5RGVsYXk7CisgICAgICAgIGVudHJ5LT5tU3RhdGUgPSBDYWNoZTo6a1N0YXRlUXVlcnk7CisgICAgICAgIFNlbmRBZGRyZXNzUXVlcnkoYUVpZCk7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfQUREUkVTU19RVUVSWTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENhY2hlOjprU3RhdGVRdWVyeToKKyAgICAgICAgaWYgKGVudHJ5LT5tVGltZW91dCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfQUREUkVTU19RVUVSWTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChlbnRyeS0+bVRpbWVvdXQgPT0gMCAmJiBlbnRyeS0+bVJldHJ5VGltZW91dCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRyeS0+bVRpbWVvdXQgPSBrQWRkcmVzc1F1ZXJ5VGltZW91dDsKKyAgICAgICAgICAgIFNlbmRBZGRyZXNzUXVlcnkoYUVpZCk7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0FERFJFU1NfUVVFUlk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1A7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2FjaGU6OmtTdGF0ZUNhY2hlZDoKKyAgICAgICAgYVJsb2MxNiA9IGVudHJ5LT5tUmxvYzE2OworICAgICAgICBNYXJrQ2FjaGVFbnRyeUFzVXNlZCgqZW50cnkpOworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEFkZHJlc3NSZXNvbHZlcjo6U2VuZEFkZHJlc3NRdWVyeShjb25zdCBJcDY6OkFkZHJlc3MgJmFFaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBUaHJlYWRUYXJnZXRUbHYgdGFyZ2V0VGx2OworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX0FERFJFU1NfUVVFUlkpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBuZXRpZi5HZXRDb2FwKCkuTmV3TWVzc2FnZShoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgdGFyZ2V0VGx2LkluaXQoKTsKKyAgICB0YXJnZXRUbHYuU2V0VGFyZ2V0KGFFaWQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnRhcmdldFRsdiwgc2l6ZW9mKHRhcmdldFRsdikpKTsKKworICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmYwMyk7CisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSA9IEhvc3RTd2FwMTYoMHgwMDAyKTsKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrQ29hcFVkcFBvcnQpOworICAgIG1lc3NhZ2VJbmZvLlNldEludGVyZmFjZUlkKG5ldGlmLkdldEludGVyZmFjZUlkKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb0FycChHZXRJbnN0YW5jZSgpLCAiU2VudCBhZGRyZXNzIHF1ZXJ5Iik7CisKK2V4aXQ6CisKKyAgICBpZiAobVRpbWVyLklzUnVubmluZygpID09IGZhbHNlKQorICAgIHsKKyAgICAgICAgbVRpbWVyLlN0YXJ0KGtTdGF0ZVVwZGF0ZVBlcmlvZCk7CisgICAgfQorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBBZGRyZXNzUmVzb2x2ZXI6OkhhbmRsZUFkZHJlc3NOb3RpZmljYXRpb24odm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxBZGRyZXNzUmVzb2x2ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVBZGRyZXNzTm90aWZpY2F0aW9uKAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIEFkZHJlc3NSZXNvbHZlcjo6SGFuZGxlQWRkcmVzc05vdGlmaWNhdGlvbihDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgVGhyZWFkVGFyZ2V0VGx2IHRhcmdldFRsdjsKKyAgICBUaHJlYWRNZXNoTG9jYWxFaWRUbHYgbWxJaWRUbHY7CisgICAgVGhyZWFkUmxvYzE2VGx2IHJsb2MxNlRsdjsKKyAgICBUaHJlYWRMYXN0VHJhbnNhY3Rpb25UaW1lVGx2IGxhc3RUcmFuc2FjdGlvblRpbWVUbHY7CisgICAgdWludDMyX3QgbGFzdFRyYW5zYWN0aW9uVGltZTsKKworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLkdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUgJiYKKyAgICAgICAgICAgICAgICAgYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX1BPU1QpOworCisgICAgb3RMb2dJbmZvQXJwKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBhZGRyZXNzIG5vdGlmaWNhdGlvbiBmcm9tICUwNHgiLAorICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzddKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KFRocmVhZFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUaHJlYWRUbHY6OmtUYXJnZXQsIHNpemVvZih0YXJnZXRUbHYpLCB0YXJnZXRUbHYpKTsKKyAgICBWZXJpZnlPckV4aXQodGFyZ2V0VGx2LklzVmFsaWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KFRocmVhZFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUaHJlYWRUbHY6OmtNZXNoTG9jYWxFaWQsIHNpemVvZihtbElpZFRsdiksIG1sSWlkVGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KG1sSWlkVGx2LklzVmFsaWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KFRocmVhZFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUaHJlYWRUbHY6OmtSbG9jMTYsIHNpemVvZihybG9jMTZUbHYpLCBybG9jMTZUbHYpKTsKKyAgICBWZXJpZnlPckV4aXQocmxvYzE2VGx2LklzVmFsaWQoKSk7CisKKyAgICBsYXN0VHJhbnNhY3Rpb25UaW1lID0gMDsKKworICAgIGlmIChUaHJlYWRUbHY6OkdldFRsdihhTWVzc2FnZSwgVGhyZWFkVGx2OjprTGFzdFRyYW5zYWN0aW9uVGltZSwgc2l6ZW9mKGxhc3RUcmFuc2FjdGlvblRpbWVUbHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VHJhbnNhY3Rpb25UaW1lVGx2KSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxhc3RUcmFuc2FjdGlvblRpbWVUbHYuSXNWYWxpZCgpKTsKKyAgICAgICAgbGFzdFRyYW5zYWN0aW9uVGltZSA9IGxhc3RUcmFuc2FjdGlvblRpbWVUbHYuR2V0VGltZSgpOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0NhY2hlRW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DYWNoZVtpXS5tVGFyZ2V0ICE9ICp0YXJnZXRUbHYuR2V0VGFyZ2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChtQ2FjaGVbaV0ubVN0YXRlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgQ2FjaGU6OmtTdGF0ZUludmFsaWQ6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENhY2hlOjprU3RhdGVDYWNoZWQ6CisgICAgICAgICAgICBpZiAobWVtY21wKG1DYWNoZVtpXS5tTWVzaExvY2FsSWlkLCBtbElpZFRsdi5HZXRJaWQoKSwgc2l6ZW9mKG1DYWNoZVtpXS5tTWVzaExvY2FsSWlkKSkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTZW5kQWRkcmVzc0Vycm9yKHRhcmdldFRsdiwgbWxJaWRUbHYsIE5VTEwpOworICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxhc3RUcmFuc2FjdGlvblRpbWUgPj0gbUNhY2hlW2ldLm1MYXN0VHJhbnNhY3Rpb25UaW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBmYWxsIHRocm91Z2gKKworICAgICAgICBjYXNlIENhY2hlOjprU3RhdGVRdWVyeToKKyAgICAgICAgICAgIG1lbWNweShtQ2FjaGVbaV0ubU1lc2hMb2NhbElpZCwgbWxJaWRUbHYuR2V0SWlkKCksIHNpemVvZihtQ2FjaGVbaV0ubU1lc2hMb2NhbElpZCkpOworICAgICAgICAgICAgbUNhY2hlW2ldLm1SbG9jMTYgPSBybG9jMTZUbHYuR2V0UmxvYzE2KCk7CisgICAgICAgICAgICBtQ2FjaGVbaV0ubVJldHJ5VGltZW91dCA9IDA7CisgICAgICAgICAgICBtQ2FjaGVbaV0ubUxhc3RUcmFuc2FjdGlvblRpbWUgPSBsYXN0VHJhbnNhY3Rpb25UaW1lOworICAgICAgICAgICAgbUNhY2hlW2ldLm1UaW1lb3V0ID0gMDsKKyAgICAgICAgICAgIG1DYWNoZVtpXS5tRmFpbHVyZXMgPSAwOworICAgICAgICAgICAgbUNhY2hlW2ldLm1TdGF0ZSA9IENhY2hlOjprU3RhdGVDYWNoZWQ7CisgICAgICAgICAgICBNYXJrQ2FjaGVFbnRyeUFzVXNlZChtQ2FjaGVbaV0pOworCisgICAgICAgICAgICBpZiAobmV0aWYuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCBhTWVzc2FnZUluZm8pID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RMb2dJbmZvQXJwKEdldEluc3RhbmNlKCksICJTZW50IGFkZHJlc3Mgbm90aWZpY2F0aW9uIGFja25vd2xlZGdtZW50Iik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5IYW5kbGVSZXNvbHZlZCgqdGFyZ2V0VGx2LkdldFRhcmdldCgpLCBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBBZGRyZXNzUmVzb2x2ZXI6OlNlbmRBZGRyZXNzRXJyb3IoY29uc3QgVGhyZWFkVGFyZ2V0VGx2ICZhVGFyZ2V0LCBjb25zdCBUaHJlYWRNZXNoTG9jYWxFaWRUbHYgJmFFaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6OkFkZHJlc3MgKmFEZXN0aW5hdGlvbikKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICBoZWFkZXIuSW5pdChhRGVzdGluYXRpb24gPT0gTlVMTCA/IE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEUgOiBPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsCisgICAgICAgICAgICAgICAgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9BRERSRVNTX0VSUk9SKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbmV0aWYuR2V0Q29hcCgpLk5ld01lc3NhZ2UoaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmFUYXJnZXQsIHNpemVvZihhVGFyZ2V0KSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmFFaWQsIHNpemVvZihhRWlkKSkpOworCisgICAgaWYgKGFEZXN0aW5hdGlvbiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZjAzKTsKKyAgICAgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSA9IEhvc3RTd2FwMTYoMHgwMDAyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWVtY3B5KCZtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLCBhRGVzdGluYXRpb24sIHNpemVvZihtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKSk7CisgICAgfQorCisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChuZXRpZi5HZXRJbnRlcmZhY2VJZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9BcnAoR2V0SW5zdGFuY2UoKSwgIlNlbnQgYWRkcmVzcyBlcnJvciIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBBZGRyZXNzUmVzb2x2ZXI6OkhhbmRsZUFkZHJlc3NFcnJvcih2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8QWRkcmVzc1Jlc29sdmVyICo+KGFDb250ZXh0KS0+SGFuZGxlQWRkcmVzc0Vycm9yKAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIEFkZHJlc3NSZXNvbHZlcjo6SGFuZGxlQWRkcmVzc0Vycm9yKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFRocmVhZFRhcmdldFRsdiB0YXJnZXRUbHY7CisgICAgVGhyZWFkTWVzaExvY2FsRWlkVGx2IG1sSWlkVGx2OworICAgIENoaWxkICpjaGlsZHJlbjsKKyAgICB1aW50OF90IG51bUNoaWxkcmVuOworICAgIE1hYzo6RXh0QWRkcmVzcyBtYWNBZGRyOworICAgIElwNjo6QWRkcmVzcyBkZXN0aW5hdGlvbjsKKworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLkdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUgJiYKKyAgICAgICAgICAgICAgICAgYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX1BPU1QsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBvdExvZ0luZm9BcnAoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGFkZHJlc3MgZXJyb3Igbm90aWZpY2F0aW9uIik7CisKKyAgICBpZiAoYUhlYWRlci5Jc0NvbmZpcm1hYmxlKCkgJiYgIWFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICBpZiAobmV0aWYuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCBhTWVzc2FnZUluZm8pID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TG9nSW5mb0FycChHZXRJbnN0YW5jZSgpLCAiU2VudCBhZGRyZXNzIGVycm9yIG5vdGlmaWNhdGlvbiBhY2tub3dsZWRnbWVudCIpOworICAgICAgICB9CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRocmVhZFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUaHJlYWRUbHY6OmtUYXJnZXQsIHNpemVvZih0YXJnZXRUbHYpLCB0YXJnZXRUbHYpKTsKKyAgICBWZXJpZnlPckV4aXQodGFyZ2V0VGx2LklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGhyZWFkVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRocmVhZFRsdjo6a01lc2hMb2NhbEVpZCwgc2l6ZW9mKG1sSWlkVGx2KSwgbWxJaWRUbHYpKTsKKyAgICBWZXJpZnlPckV4aXQobWxJaWRUbHYuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGZvciAoY29uc3QgSXA2OjpOZXRpZlVuaWNhc3RBZGRyZXNzICphZGRyZXNzID0gbmV0aWYuR2V0VW5pY2FzdEFkZHJlc3NlcygpOyBhZGRyZXNzOyBhZGRyZXNzID0gYWRkcmVzcy0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKG1lbWNtcCgmYWRkcmVzcy0+bUFkZHJlc3MsIHRhcmdldFRsdi5HZXRUYXJnZXQoKSwgc2l6ZW9mKGFkZHJlc3MtPm1BZGRyZXNzKSkgPT0gMCAmJgorICAgICAgICAgICAgbWVtY21wKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDY0KCkuR2V0SWlkKCksIG1sSWlkVGx2LkdldElpZCgpLCA4KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGFyZ2V0IEVJRCBtYXRjaGVzIGFkZHJlc3MgYW5kIE1lc2ggTG9jYWwgRUlEIGRpZmZlcnMKKyAgICAgICAgICAgIG5ldGlmLlJlbW92ZVVuaWNhc3RBZGRyZXNzKCphZGRyZXNzKTsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNoaWxkcmVuID0gbmV0aWYuR2V0TWxlKCkuR2V0Q2hpbGRyZW4oJm51bUNoaWxkcmVuKTsKKworICAgIG1lbWNweSgmbWFjQWRkciwgbWxJaWRUbHYuR2V0SWlkKCksIHNpemVvZihtYWNBZGRyKSk7CisgICAgbWFjQWRkci5tOFswXSBePSAweDI7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyBpKyspCisgICAgeworICAgICAgICBpZiAoY2hpbGRyZW5baV0uR2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQgfHwgY2hpbGRyZW5baV0uSXNGdWxsVGhyZWFkRGV2aWNlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1aW50OF90IGogPSAwOyBqIDwgQ2hpbGQ6OmtNYXhJcDZBZGRyZXNzUGVyQ2hpbGQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLkdldElwNkFkZHJlc3MoaikgPT0gKnRhcmdldFRsdi5HZXRUYXJnZXQoKSAmJgorICAgICAgICAgICAgICAgIG1lbWNtcCgmY2hpbGRyZW5baV0uR2V0RXh0QWRkcmVzcygpLCAmbWFjQWRkciwgc2l6ZW9mKG1hY0FkZHIpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUYXJnZXQgRUlEIG1hdGNoZXMgY2hpbGQgYWRkcmVzcyBhbmQgTWVzaCBMb2NhbCBFSUQgZGlmZmVycyBvbiBjaGlsZAorICAgICAgICAgICAgICAgIG1lbXNldCgmY2hpbGRyZW5baV0uR2V0SXA2QWRkcmVzcyhqKSwgMCwgc2l6ZW9mKGNoaWxkcmVuW2ldLkdldElwNkFkZHJlc3MoaikpKTsKKworICAgICAgICAgICAgICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLlNldElpZChjaGlsZHJlbltpXS5HZXRFeHRBZGRyZXNzKCkpOworCisgICAgICAgICAgICAgICAgU2VuZEFkZHJlc3NFcnJvcih0YXJnZXRUbHYsIG1sSWlkVGx2LCAmZGVzdGluYXRpb24pOworICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgb3RMb2dXYXJuQXJwKEdldEluc3RhbmNlKCksICJFcnJvciB3aGlsZSBwcm9jZXNzaW5nIGFkZHJlc3MgZXJyb3Igbm90aWZpY2F0aW9uOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICBvdFRocmVhZEVycm9yVG9TdHJpbmcoZXJyb3IpKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVBZGRyZXNzUXVlcnkodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PEFkZHJlc3NSZXNvbHZlciAqPihhQ29udGV4dCktPkhhbmRsZUFkZHJlc3NRdWVyeSgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBBZGRyZXNzUmVzb2x2ZXI6OkhhbmRsZUFkZHJlc3NRdWVyeShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBUaHJlYWRUYXJnZXRUbHYgdGFyZ2V0VGx2OworICAgIFRocmVhZE1lc2hMb2NhbEVpZFRsdiBtbElpZFRsdjsKKyAgICBUaHJlYWRMYXN0VHJhbnNhY3Rpb25UaW1lVGx2IGxhc3RUcmFuc2FjdGlvblRpbWVUbHY7CisgICAgQ2hpbGQgKmNoaWxkcmVuOworICAgIHVpbnQ4X3QgbnVtQ2hpbGRyZW47CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX05PTl9DT05GSVJNQUJMRSAmJgorICAgICAgICAgICAgICAgICBhSGVhZGVyLkdldENvZGUoKSA9PSBPVF9DT0FQX0NPREVfUE9TVCk7CisKKyAgICBvdExvZ0luZm9BcnAoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGFkZHJlc3MgcXVlcnkgZnJvbSAlMDR4IiwgSG9zdFN3YXAxNihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSkpOworCisgICAgU3VjY2Vzc09yRXhpdChUaHJlYWRUbHY6OkdldFRsdihhTWVzc2FnZSwgVGhyZWFkVGx2OjprVGFyZ2V0LCBzaXplb2YodGFyZ2V0VGx2KSwgdGFyZ2V0VGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KHRhcmdldFRsdi5Jc1ZhbGlkKCkpOworCisgICAgbWxJaWRUbHYuSW5pdCgpOworCisgICAgbGFzdFRyYW5zYWN0aW9uVGltZVRsdi5Jbml0KCk7CisKKyAgICBpZiAobmV0aWYuSXNVbmljYXN0QWRkcmVzcygqdGFyZ2V0VGx2LkdldFRhcmdldCgpKSkKKyAgICB7CisgICAgICAgIG1sSWlkVGx2LlNldElpZChuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWw2NCgpLkdldElpZCgpKTsKKyAgICAgICAgU2VuZEFkZHJlc3NRdWVyeVJlc3BvbnNlKHRhcmdldFRsdiwgbWxJaWRUbHYsIE5VTEwsIGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIGNoaWxkcmVuID0gbmV0aWYuR2V0TWxlKCkuR2V0Q2hpbGRyZW4oJm51bUNoaWxkcmVuKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjaGlsZHJlbltpXS5HZXRTdGF0ZSgpICE9IE5laWdoYm9yOjprU3RhdGVWYWxpZCB8fAorICAgICAgICAgICAgY2hpbGRyZW5baV0uSXNGdWxsVGhyZWFkRGV2aWNlKCkgfHwKKyAgICAgICAgICAgIGNoaWxkcmVuW2ldLkdldExpbmtGYWlsdXJlcygpID49IE1sZTo6a0ZhaWxlZENoaWxkVHJhbnNtaXNzaW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQ4X3QgaiA9IDA7IGogPCBDaGlsZDo6a01heElwNkFkZHJlc3NQZXJDaGlsZDsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0uR2V0SXA2QWRkcmVzcyhqKSAhPSAqdGFyZ2V0VGx2LkdldFRhcmdldCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtbElpZFRsdi5TZXRJaWQoY2hpbGRyZW5baV0uR2V0RXh0QWRkcmVzcygpKTsKKyAgICAgICAgICAgIGxhc3RUcmFuc2FjdGlvblRpbWVUbHYuU2V0VGltZShUaW1lcjo6R2V0Tm93KCkgLSBjaGlsZHJlbltpXS5HZXRMYXN0SGVhcmQoKSk7CisgICAgICAgICAgICBTZW5kQWRkcmVzc1F1ZXJ5UmVzcG9uc2UodGFyZ2V0VGx2LCBtbElpZFRsdiwgJmxhc3RUcmFuc2FjdGlvblRpbWVUbHYsIGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgQWRkcmVzc1Jlc29sdmVyOjpTZW5kQWRkcmVzc1F1ZXJ5UmVzcG9uc2UoY29uc3QgVGhyZWFkVGFyZ2V0VGx2ICZhVGFyZ2V0VGx2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUaHJlYWRNZXNoTG9jYWxFaWRUbHYgJmFNbElpZFRsdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGhyZWFkTGFzdFRyYW5zYWN0aW9uVGltZVRsdiAqYUxhc3RUcmFuc2FjdGlvblRpbWVUbHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgVGhyZWFkUmxvYzE2VGx2IHJsb2MxNlRsdjsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX0FERFJFU1NfTk9USUZZKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbmV0aWYuR2V0Q29hcCgpLk5ld01lc3NhZ2UoaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmFUYXJnZXRUbHYsIHNpemVvZihhVGFyZ2V0VGx2KSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmFNbElpZFRsdiwgc2l6ZW9mKGFNbElpZFRsdikpKTsKKworICAgIHJsb2MxNlRsdi5Jbml0KCk7CisgICAgcmxvYzE2VGx2LlNldFJsb2MxNihuZXRpZi5HZXRNbGUoKS5HZXRSbG9jMTYoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmcmxvYzE2VGx2LCBzaXplb2YocmxvYzE2VGx2KSkpOworCisgICAgaWYgKGFMYXN0VHJhbnNhY3Rpb25UaW1lVGx2ICE9IE5VTEwpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKGFMYXN0VHJhbnNhY3Rpb25UaW1lVGx2LCBzaXplb2YoKmFMYXN0VHJhbnNhY3Rpb25UaW1lVGx2KSkpOworICAgIH0KKworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKGFEZXN0aW5hdGlvbik7CisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9BcnAoR2V0SW5zdGFuY2UoKSwgIlNlbnQgYWRkcmVzcyBub3RpZmljYXRpb24iKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9Cit9CisKK3ZvaWQgQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKwordm9pZCBBZGRyZXNzUmVzb2x2ZXI6OkhhbmRsZVRpbWVyKCkKK3sKKyAgICBib29sIGNvbnRpbnVlVGltZXIgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0NhY2hlRW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DYWNoZVtpXS5tU3RhdGUgIT0gQ2FjaGU6OmtTdGF0ZVF1ZXJ5KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRpbnVlVGltZXIgPSB0cnVlOworCisgICAgICAgIGlmIChtQ2FjaGVbaV0ubVRpbWVvdXQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBtQ2FjaGVbaV0ubVRpbWVvdXQtLTsKKworICAgICAgICAgICAgaWYgKG1DYWNoZVtpXS5tVGltZW91dCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1DYWNoZVtpXS5tUmV0cnlUaW1lb3V0ID0KKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGtBZGRyZXNzUXVlcnlJbml0aWFsUmV0cnlEZWxheSAqICgxIDw8IG1DYWNoZVtpXS5tRmFpbHVyZXMpKTsKKworICAgICAgICAgICAgICAgIGlmIChtQ2FjaGVbaV0ubVJldHJ5VGltZW91dCA8IGtBZGRyZXNzUXVlcnlNYXhSZXRyeURlbGF5KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUNhY2hlW2ldLm1GYWlsdXJlcysrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtQ2FjaGVbaV0ubVJldHJ5VGltZW91dCA9IGtBZGRyZXNzUXVlcnlNYXhSZXRyeURlbGF5OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEdldE5ldGlmKCkuR2V0TWVzaEZvcndhcmRlcigpLkhhbmRsZVJlc29sdmVkKG1DYWNoZVtpXS5tVGFyZ2V0LCBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtQ2FjaGVbaV0ubVJldHJ5VGltZW91dCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DYWNoZVtpXS5tUmV0cnlUaW1lb3V0LS07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29udGludWVUaW1lcikKKyAgICB7CisgICAgICAgIG1UaW1lci5TdGFydChrU3RhdGVVcGRhdGVQZXJpb2QpOworICAgIH0KK30KKwordm9pZCBBZGRyZXNzUmVzb2x2ZXI6OkhhbmRsZUljbXBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJY21wNkhlYWRlciAqYUljbXBIZWFkZXIpCit7CisgICAgc3RhdGljX2Nhc3Q8QWRkcmVzc1Jlc29sdmVyICo+KGFDb250ZXh0KS0+SGFuZGxlSWNtcFJlY2VpdmUoKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6SWNtcEhlYWRlciAqPihhSWNtcEhlYWRlcikpOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7Cit9CisKK3ZvaWQgQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVJY21wUmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6SWNtcEhlYWRlciAmYUljbXBIZWFkZXIpCit7CisgICAgSXA2OjpIZWFkZXIgaXA2SGVhZGVyOworCisgICAgVmVyaWZ5T3JFeGl0KGFJY21wSGVhZGVyLkdldFR5cGUoKSA9PSBJcDY6OkljbXBIZWFkZXI6OmtUeXBlRHN0VW5yZWFjaCk7CisgICAgVmVyaWZ5T3JFeGl0KGFJY21wSGVhZGVyLkdldENvZGUoKSA9PSBJcDY6OkljbXBIZWFkZXI6OmtDb2RlRHN0VW5yZWFjaE5vUm91dGUpOworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoaXA2SGVhZGVyKSwgJmlwNkhlYWRlcikgPT0gc2l6ZW9mKGlwNkhlYWRlcikpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrQ2FjaGVFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNhY2hlW2ldLm1TdGF0ZSAhPSBDYWNoZTo6a1N0YXRlSW52YWxpZCAmJgorICAgICAgICAgICAgbWVtY21wKCZtQ2FjaGVbaV0ubVRhcmdldCwgJmlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLCBzaXplb2YobUNhY2hlW2ldLm1UYXJnZXQpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBJbnZhbGlkYXRlQ2FjaGVFbnRyeShtQ2FjaGVbaV0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7Cit9CisKK0FkZHJlc3NSZXNvbHZlciAmQWRkcmVzc1Jlc29sdmVyOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBBZGRyZXNzUmVzb2x2ZXIgJnJlc29sdmVyID0gKnN0YXRpY19jYXN0PEFkZHJlc3NSZXNvbHZlciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBBZGRyZXNzUmVzb2x2ZXIgJnJlc29sdmVyID0gb3RHZXRUaHJlYWROZXRpZigpLkdldEFkZHJlc3NSZXNvbHZlcigpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzb2x2ZXI7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWRhYTY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL2FkZHJlc3NfcmVzb2x2ZXIuaHBwCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgVGhyZWFkIEVJRC10by1STE9DIG1hcHBpbmcgYW5kIGNhY2hpbmcuCisgKi8KKworI2lmbmRlZiBBRERSRVNTX1JFU09MVkVSX0hQUF8KKyNkZWZpbmUgQUREUkVTU19SRVNPTFZFUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjLmhwcCIKKyNpbmNsdWRlICJuZXQvaWNtcDYuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgTWVzaEZvcndhcmRlcjsKK2NsYXNzIFRocmVhZExhc3RUcmFuc2FjdGlvblRpbWVUbHY7CitjbGFzcyBUaHJlYWRNZXNoTG9jYWxFaWRUbHY7CitjbGFzcyBUaHJlYWROZXRpZjsKK2NsYXNzIFRocmVhZFRhcmdldFRsdjsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWFycAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgVGhyZWFkIEVJRC10by1STE9DIG1hcHBpbmcgYW5kIGNhY2hpbmcuCisgKgorICogQHsKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgRUlELXRvLVJMT0MgbWFwcGluZyBhbmQgY2FjaGluZy4KKyAqCisgKi8KK2NsYXNzIEFkZHJlc3NSZXNvbHZlcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIGV4cGxpY2l0IEFkZHJlc3NSZXNvbHZlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgRUlELXRvLVJMT0MgY2FjaGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyBhbiBFSUQgY2FjaGUgZW50cnkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYUluZGV4ICBBbiBpbmRleCBpbnRvIHRoZSBFSUQgY2FjaGUgdGFibGUuCisgICAgICogQHBhcmFtW291dF0gIGFFbnRyeSAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBFSUQgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIEVJRCBjYWNoZSBlbnRyeS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUluZGV4IHdhcyBvdXQgb2YgYm91bmRzIG9yIEBwIGFFbnRyeSB3YXMgTlVMTC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0RW50cnkodWludDhfdCBhSW5kZXgsIG90RWlkQ2FjaGVFbnRyeSAmYUVudHJ5KSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYSBSb3V0ZXIgSUQgZnJvbSB0aGUgRUlELXRvLVJMT0MgY2FjaGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlbW92ZSh1aW50OF90IGFSb3V0ZXJJZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSTE9DMTYgZm9yIGEgZ2l2ZW4gRUlELCBvciBpbml0aWF0ZXMgYW4gQWRkcmVzcyBRdWVyeSBpZiB0aGUgbWFwcGluZyBpcyBub3Qga25vd24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYUVpZCAgICAgQSByZWZlcmVuY2UgdG8gdGhlIEVJRC4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYVJsb2MxNiAgVGhlIFJMT0MxNiBjb3JyZXNwb25kaW5nIHRvIEBwIGFFaWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBwcm92aWRlZCB0aGUgUkxPQzE2LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUREUkVTU19RVUVSWSAgSW5pdGlhdGVkIGFuIEFkZHJlc3MgUXVlcnkuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlc29sdmUoY29uc3QgSXA2OjpBZGRyZXNzICZhRWlkLCBNYWM6OlNob3J0QWRkcmVzcyAmYVJsb2MxNik7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0NhY2hlRW50cmllcyA9IE9QRU5USFJFQURfQ09ORklHX0FERFJFU1NfQ0FDSEVfRU5UUklFUywKKyAgICAgICAga1N0YXRlVXBkYXRlUGVyaW9kID0gMTAwMHUsICAgICAgICAgICAvLy88IFN0YXRlIHVwZGF0ZSBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzLgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaHJlYWQgUHJvdG9jb2wgUGFyYW1ldGVycyBhbmQgQ29uc3RhbnRzCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtCisgICAgeworICAgICAgICBrQWRkcmVzc1F1ZXJ5VGltZW91dCA9IDMsICAgICAgICAgICAgIC8vLzwgQUREUkVTU19RVUVSWV9USU1FT1VUIChzZWNvbmRzKQorICAgICAgICBrQWRkcmVzc1F1ZXJ5SW5pdGlhbFJldHJ5RGVsYXkgPSAxNSwgIC8vLzwgQUREUkVTU19RVUVSWV9JTklUSUFMX1JFVFJZX0RFTEFZIChzZWNvbmRzKQorICAgICAgICBrQWRkcmVzc1F1ZXJ5TWF4UmV0cnlEZWxheSA9IDI4ODAwLCAgIC8vLzwgQUREUkVTU19RVUVSWV9NQVhfUkVUUllfREVMQVkgKHNlY29uZHMpCisgICAgfTsKKworICAgIHN0cnVjdCBDYWNoZQorICAgIHsKKyAgICAgICAgSXA2OjpBZGRyZXNzICAgICAgbVRhcmdldDsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgbU1lc2hMb2NhbElpZFtJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZV07CisgICAgICAgIHVpbnQzMl90ICAgICAgICAgIG1MYXN0VHJhbnNhY3Rpb25UaW1lOworICAgICAgICBNYWM6OlNob3J0QWRkcmVzcyBtUmxvYzE2OworICAgICAgICB1aW50MTZfdCAgICAgICAgICBtUmV0cnlUaW1lb3V0OworICAgICAgICB1aW50OF90ICAgICAgICAgICBtVGltZW91dDsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgbUZhaWx1cmVzOworICAgICAgICB1aW50OF90ICAgICAgICAgICBtQWdlOworCisgICAgICAgIGVudW0gU3RhdGUKKyAgICAgICAgeworICAgICAgICAgICAga1N0YXRlSW52YWxpZCwKKyAgICAgICAgICAgIGtTdGF0ZVF1ZXJ5LAorICAgICAgICAgICAga1N0YXRlQ2FjaGVkLAorICAgICAgICB9OworICAgICAgICBTdGF0ZSAgICAgICAgICAgICBtU3RhdGU7CisgICAgfTsKKworICAgIENhY2hlICpOZXdDYWNoZUVudHJ5KHZvaWQpOworICAgIHZvaWQgTWFya0NhY2hlRW50cnlBc1VzZWQoQ2FjaGUgJmFFbnRyeSk7CisgICAgdm9pZCBJbnZhbGlkYXRlQ2FjaGVFbnRyeShDYWNoZSAmYUVudHJ5KTsKKworICAgIG90RXJyb3IgU2VuZEFkZHJlc3NRdWVyeShjb25zdCBJcDY6OkFkZHJlc3MgJmFFaWQpOworICAgIG90RXJyb3IgU2VuZEFkZHJlc3NFcnJvcihjb25zdCBUaHJlYWRUYXJnZXRUbHYgJmFUYXJnZXQsIGNvbnN0IFRocmVhZE1lc2hMb2NhbEVpZFRsdiAmYUVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpBZGRyZXNzICphRGVzdGluYXRpb24pOworICAgIHZvaWQgU2VuZEFkZHJlc3NRdWVyeVJlc3BvbnNlKGNvbnN0IFRocmVhZFRhcmdldFRsdiAmYVRhcmdldFRsdiwgY29uc3QgVGhyZWFkTWVzaExvY2FsRWlkVGx2ICZhTWxFaWRUbHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGhyZWFkTGFzdFRyYW5zYWN0aW9uVGltZVRsdiAqYUxhc3RUcmFuc2FjdGlvblRpbWVUbHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUFkZHJlc3NFcnJvcih2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlQWRkcmVzc0Vycm9yKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVBZGRyZXNzUXVlcnkodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUFkZHJlc3NRdWVyeShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlQWRkcmVzc05vdGlmaWNhdGlvbih2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUFkZHJlc3NOb3RpZmljYXRpb24oQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUljbXBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJY21wNkhlYWRlciAqYUljbXBIZWFkZXIpOworICAgIHZvaWQgSGFuZGxlSWNtcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgY29uc3QgSXA2OjpJY21wSGVhZGVyICZhSWNtcEhlYWRlcik7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisgICAgc3RhdGljIEFkZHJlc3NSZXNvbHZlciAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgQ29hcDo6UmVzb3VyY2UgbUFkZHJlc3NFcnJvcjsKKyAgICBDb2FwOjpSZXNvdXJjZSBtQWRkcmVzc1F1ZXJ5OworICAgIENvYXA6OlJlc291cmNlIG1BZGRyZXNzTm90aWZpY2F0aW9uOworICAgIENhY2hlIG1DYWNoZVtrQ2FjaGVFbnRyaWVzXTsKKyAgICBJcDY6OkljbXBIYW5kbGVyIG1JY21wSGFuZGxlcjsKKyAgICBUaW1lciBtVGltZXI7Cit9OworCisvKioKKyAqIEB9CisgKi8KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQUREUkVTU19SRVNPTFZFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvYW5ub3VuY2VfYmVnaW5fc2VydmVyLmNwcCBiL3NyYy9jb3JlL3RocmVhZC9hbm5vdW5jZV9iZWdpbl9zZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYWRkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvYW5ub3VuY2VfYmVnaW5fc2VydmVyLmNwcApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgQW5ub3VuY2UgQmVnaW4gU2VydmVyLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImFubm91bmNlX2JlZ2luX3NlcnZlci50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiYW5ub3VuY2VfYmVnaW5fc2VydmVyLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzI7CisKK25hbWVzcGFjZSBvdCB7CisKK0Fubm91bmNlQmVnaW5TZXJ2ZXI6OkFubm91bmNlQmVnaW5TZXJ2ZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1DaGFubmVsTWFzaygwKSwKKyAgICBtUGVyaW9kKDApLAorICAgIG1Db3VudCgwKSwKKyAgICBtQ2hhbm5lbCgwKSwKKyAgICBtVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJkFubm91bmNlQmVnaW5TZXJ2ZXI6OkhhbmRsZVRpbWVyLCB0aGlzKSwKKyAgICBtQW5ub3VuY2VCZWdpbihPVF9VUklfUEFUSF9BTk5PVU5DRV9CRUdJTiwgJkFubm91bmNlQmVnaW5TZXJ2ZXI6OkhhbmRsZVJlcXVlc3QsIHRoaXMpCit7CisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtQW5ub3VuY2VCZWdpbik7Cit9CisKK290RXJyb3IgQW5ub3VuY2VCZWdpblNlcnZlcjo6U2VuZEFubm91bmNlKHVpbnQzMl90IGFDaGFubmVsTWFzaykKK3sKKyAgICByZXR1cm4gU2VuZEFubm91bmNlKGFDaGFubmVsTWFzaywga0RlZmF1bHRDb3VudCwga0RlZmF1bHRQZXJpb2QpOworfQorCitvdEVycm9yIEFubm91bmNlQmVnaW5TZXJ2ZXI6OlNlbmRBbm5vdW5jZSh1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIHVpbnQ4X3QgYUNvdW50LCB1aW50MTZfdCBhUGVyaW9kKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgbUNoYW5uZWxNYXNrID0gYUNoYW5uZWxNYXNrOworICAgIG1Db3VudCA9IGFDb3VudDsKKyAgICBtUGVyaW9kID0gYVBlcmlvZDsKKyAgICBtQ2hhbm5lbCA9IE9UX1JBRElPX0NIQU5ORUxfTUlOOworCisgICAgd2hpbGUgKChtQ2hhbm5lbE1hc2sgJiAoMSA8PCBtQ2hhbm5lbCkpID09IDApCisgICAgeworICAgICAgICBtQ2hhbm5lbCsrOworICAgICAgICBWZXJpZnlPckV4aXQobUNoYW5uZWwgPD0gT1RfUkFESU9fQ0hBTk5FTF9NQVgsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICB9CisKKyAgICBtVGltZXIuU3RhcnQobVBlcmlvZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIEFubm91bmNlQmVnaW5TZXJ2ZXI6OkhhbmRsZVJlcXVlc3Qodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8QW5ub3VuY2VCZWdpblNlcnZlciAqPihhQ29udGV4dCktPkhhbmRsZVJlcXVlc3QoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9Cit2b2lkIEFubm91bmNlQmVnaW5TZXJ2ZXI6OkhhbmRsZVJlcXVlc3QoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIE1lc2hDb1A6OkNoYW5uZWxNYXNrMFRsdiBjaGFubmVsTWFzazsKKyAgICBNZXNoQ29QOjpDb3VudFRsdiBjb3VudDsKKyAgICBNZXNoQ29QOjpQZXJpb2RUbHYgcGVyaW9kOworICAgIElwNjo6TWVzc2FnZUluZm8gcmVzcG9uc2VJbmZvKGFNZXNzYWdlSW5mbyk7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX1BPU1QpOworCisgICAgU3VjY2Vzc09yRXhpdChNZXNoQ29QOjpUbHY6OkdldFRsdihhTWVzc2FnZSwgTWVzaENvUDo6VGx2OjprQ2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzayksIGNoYW5uZWxNYXNrKSk7CisgICAgVmVyaWZ5T3JFeGl0KGNoYW5uZWxNYXNrLklzVmFsaWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KE1lc2hDb1A6OlRsdjo6R2V0VGx2KGFNZXNzYWdlLCBNZXNoQ29QOjpUbHY6OmtDb3VudCwgc2l6ZW9mKGNvdW50KSwgY291bnQpKTsKKyAgICBWZXJpZnlPckV4aXQoY291bnQuSXNWYWxpZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoTWVzaENvUDo6VGx2OjpHZXRUbHYoYU1lc3NhZ2UsIE1lc2hDb1A6OlRsdjo6a1BlcmlvZCwgc2l6ZW9mKHBlcmlvZCksIHBlcmlvZCkpOworICAgIFZlcmlmeU9yRXhpdChwZXJpb2QuSXNWYWxpZCgpKTsKKworICAgIFNlbmRBbm5vdW5jZShjaGFubmVsTWFzay5HZXRNYXNrKCksIGNvdW50LkdldENvdW50KCksIHBlcmlvZC5HZXRQZXJpb2QoKSk7CisKKyAgICBpZiAoYUhlYWRlci5Jc0NvbmZpcm1hYmxlKCkgJiYgIWFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KEdldE5ldGlmKCkuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCByZXNwb25zZUluZm8pKTsKKyAgICAgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBhbm5vdW5jZSBiZWdpbiByZXNwb25zZSIpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgQW5ub3VuY2VCZWdpblNlcnZlcjo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgQW5ub3VuY2VCZWdpblNlcnZlcjo6SGFuZGxlVGltZXIodm9pZCkKK3sKKyAgICBHZXROZXRpZigpLkdldE1sZSgpLlNlbmRBbm5vdW5jZShtQ2hhbm5lbCsrLCBmYWxzZSk7CisKKyAgICB3aGlsZSAobUNvdW50ID4gMCkKKyAgICB7CisgICAgICAgIGlmIChtQ2hhbm5lbE1hc2sgJiAoMSA8PCBtQ2hhbm5lbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UaW1lci5TdGFydChtUGVyaW9kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgbUNoYW5uZWwrKzsKKworICAgICAgICBpZiAobUNoYW5uZWwgPiBPVF9SQURJT19DSEFOTkVMX01BWCkKKyAgICAgICAgeworICAgICAgICAgICAgbUNoYW5uZWwgPSBPVF9SQURJT19DSEFOTkVMX01JTjsKKyAgICAgICAgICAgIG1Db3VudC0tOworICAgICAgICB9CisgICAgfQorfQorCitBbm5vdW5jZUJlZ2luU2VydmVyICZBbm5vdW5jZUJlZ2luU2VydmVyOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBBbm5vdW5jZUJlZ2luU2VydmVyICZzZXJ2ZXIgPSAqc3RhdGljX2Nhc3Q8QW5ub3VuY2VCZWdpblNlcnZlciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBBbm5vdW5jZUJlZ2luU2VydmVyICZzZXJ2ZXIgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0QW5ub3VuY2VCZWdpblNlcnZlcigpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gc2VydmVyOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9hbm5vdW5jZV9iZWdpbl9zZXJ2ZXIuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL2Fubm91bmNlX2JlZ2luX3NlcnZlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0NWFjOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9hbm5vdW5jZV9iZWdpbl9zZXJ2ZXIuaHBwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgcmVzcG9uZGluZyB0byBBbm5vdW5jZSBSZXF1ZXN0cy4KKyAqLworCisjaWZuZGVmIEFOTk9VTkNFX0JFR0lOX1NFUlZFUl9IUFBfCisjZGVmaW5lIEFOTk9VTkNFX0JFR0lOX1NFUlZFUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBoYW5kbGluZyBBbm5vdW5jZSBCZWdpbiBSZXF1ZXN0cy4KKyAqCisgKi8KK2NsYXNzIEFubm91bmNlQmVnaW5TZXJ2ZXI6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBBbm5vdW5jZUJlZ2luU2VydmVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYmVnaW5zIHRoZSBNTEUgQW5ub3VuY2UgdHJhbnNtaXNzaW9uIHByb2Nlc3MgdXNpbmcgQ291bnQ9MyBhbmQgUGVyaW9kPTFzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoYW5uZWxNYXNrICAgVGhlIGNoYW5uZWxzIHRvIHVzZSBmb3IgdHJhbnNtaXNzaW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmRBbm5vdW5jZSh1aW50MzJfdCBhQ2hhbm5lbE1hc2spOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYmVnaW5zIHRoZSBNTEUgQW5ub3VuY2UgdHJhbnNtaXNzaW9uIHByb2Nlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hhbm5lbE1hc2sgICBUaGUgY2hhbm5lbHMgdG8gdXNlIGZvciB0cmFuc21pc3Npb24uCisgICAgICogQHBhcmFtW2luXSAgYUNvdW50ICAgICAgICAgVGhlIG51bWJlciBvZiB0cmFuc21pc3Npb25zIHBlciBjaGFubmVsLgorICAgICAqIEBwYXJhbVtpbl0gIGFQZXJpb2QgICAgICAgIFRoZSB0aW1lIGJldHdlZW4gdHJhbnNtaXNzaW9ucyAobWlsbGlzZWNvbmRzKS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kQW5ub3VuY2UodWludDMyX3QgYUNoYW5uZWxNYXNrLCB1aW50OF90IGFDb3VudCwgdWludDE2X3QgYVBlcmlvZCk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0RlZmF1bHRDb3VudCAgPSAzLAorICAgICAgICBrRGVmYXVsdFBlcmlvZCA9IDEwMDAsCisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVJlcXVlc3Qodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVSZXF1ZXN0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisgICAgc3RhdGljIEFubm91bmNlQmVnaW5TZXJ2ZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIHVpbnQzMl90IG1DaGFubmVsTWFzazsKKyAgICB1aW50MTZfdCBtUGVyaW9kOworICAgIHVpbnQ4X3QgbUNvdW50OworICAgIHVpbnQ4X3QgbUNoYW5uZWw7CisKKyAgICBUaW1lciBtVGltZXI7CisKKyAgICBDb2FwOjpSZXNvdXJjZSBtQW5ub3VuY2VCZWdpbjsKK307CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBBTk5PVU5DRV9CRUdJTl9TRVJWRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL2RhdGFfcG9sbF9tYW5hZ2VyLmNwcCBiL3NyYy9jb3JlL3RocmVhZC9kYXRhX3BvbGxfbWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwYWI3NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9kYXRhX3BvbGxfbWFuYWdlci5jcHAKQEAgLTAsMCArMSw0MjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgZGF0YSBwb2xsIChtYWMgZGF0YSByZXF1ZXN0IGNvbW1hbmQpIG1hbmFnZXIgY2xhc3MuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiZGF0YV9wb2xsX21hbmFnZXIudG1oIgorI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJkYXRhX3BvbGxfbWFuYWdlci5ocHAiCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKyNpbmNsdWRlICJuZXQvbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tZXNoX2ZvcndhcmRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZS5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK0RhdGFQb2xsTWFuYWdlcjo6RGF0YVBvbGxNYW5hZ2VyKE1lc2hGb3J3YXJkZXIgJmFNZXNoRm9yd2FyZGVyKToKKyAgICBNZXNoRm9yd2FyZGVyTG9jYXRvcihhTWVzaEZvcndhcmRlciksCisgICAgbVRpbWVyKGFNZXNoRm9yd2FyZGVyLkdldE5ldGlmKCkuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmRGF0YVBvbGxNYW5hZ2VyOjpIYW5kbGVQb2xsVGltZXIsIHRoaXMpLAorICAgIG1UaW1lclN0YXJ0VGltZSgwKSwKKyAgICBtRXh0ZXJuYWxQb2xsUGVyaW9kKDApLAorICAgIG1Qb2xsUGVyaW9kKDApLAorICAgIG1FbmFibGVkKGZhbHNlKSwKKyAgICBtQXR0YWNoTW9kZShmYWxzZSksCisgICAgbVJldHhNb2RlKGZhbHNlKSwKKyAgICBtTm9CdWZmZXJSZXR4TW9kZShmYWxzZSksCisgICAgbVBvbGxUaW1lb3V0Q291bnRlcigwKSwKKyAgICBtUG9sbFR4RmFpbHVyZUNvdW50ZXIoMCksCisgICAgbVJlbWFpbmluZ0Zhc3RQb2xscygwKQoreworfQorCitvdEVycm9yIERhdGFQb2xsTWFuYWdlcjo6U3RhcnRQb2xsaW5nKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoIW1FbmFibGVkLCBlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworICAgIFZlcmlmeU9yRXhpdCgoR2V0TWVzaEZvcndhcmRlcigpLkdldE5ldGlmKCkuR2V0TWxlKCkuR2V0RGV2aWNlTW9kZSgpICYgTWxlOjpNb2RlVGx2OjprTW9kZUZGRCkgPT0gMCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIG1FbmFibGVkID0gdHJ1ZTsKKyAgICBTY2hlZHVsZU5leHRQb2xsKGtSZWNhbGN1bGF0ZVBvbGxQZXJpb2QpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBEYXRhUG9sbE1hbmFnZXI6OlN0b3BQb2xsaW5nKHZvaWQpCit7CisgICAgbVRpbWVyLlN0b3AoKTsKKyAgICBtQXR0YWNoTW9kZSA9IGZhbHNlOworICAgIG1SZXR4TW9kZSA9IGZhbHNlOworICAgIG1Ob0J1ZmZlclJldHhNb2RlID0gZmFsc2U7CisgICAgbVBvbGxUaW1lb3V0Q291bnRlciA9IDA7CisgICAgbVBvbGxUeEZhaWx1cmVDb3VudGVyID0gMDsKKyAgICBtUmVtYWluaW5nRmFzdFBvbGxzID0gMDsKKyAgICBtRW5hYmxlZCA9IGZhbHNlOworfQorCitvdEVycm9yIERhdGFQb2xsTWFuYWdlcjo6U2VuZERhdGFQb2xsKHZvaWQpCit7CisgICAgTWVzaEZvcndhcmRlciAmbWVzaEZvcndhcmRlciA9IEdldE1lc2hGb3J3YXJkZXIoKTsKKyAgICBvdEVycm9yIGVycm9yOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICBWZXJpZnlPckV4aXQobUVuYWJsZWQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisgICAgVmVyaWZ5T3JFeGl0KCFtZXNoRm9yd2FyZGVyLkdldE5ldGlmKCkuR2V0TWFjKCkuR2V0UnhPbldoZW5JZGxlKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBtVGltZXIuU3RvcCgpOworCisgICAgZm9yIChtZXNzYWdlID0gbWVzaEZvcndhcmRlci5HZXRTZW5kUXVldWUoKS5HZXRIZWFkKCk7IG1lc3NhZ2U7IG1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQobWVzc2FnZS0+R2V0VHlwZSgpICE9IE1lc3NhZ2U6OmtUeXBlTWFjRGF0YVBvbGwsIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisgICAgfQorCisgICAgbWVzc2FnZSA9IG1lc2hGb3J3YXJkZXIuR2V0TmV0aWYoKS5HZXRJcDYoKS5tTWVzc2FnZVBvb2wuTmV3KE1lc3NhZ2U6OmtUeXBlTWFjRGF0YVBvbGwsIDApOworICAgIFZlcmlmeU9yRXhpdChtZXNzYWdlICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBlcnJvciA9IG1lc2hGb3J3YXJkZXIuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UpOworCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCitleGl0OgorCisgICAgc3dpdGNoIChlcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICBvdExvZ0RlYmdNYWMoR2V0SW5zdGFuY2UoKSwgIlNlbmRpbmcgZGF0YSBwb2xsIik7CisKKyAgICAgICAgaWYgKG1Ob0J1ZmZlclJldHhNb2RlID09IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Ob0J1ZmZlclJldHhNb2RlID0gZmFsc2U7CisgICAgICAgICAgICBTY2hlZHVsZU5leHRQb2xsKGtSZWNhbGN1bGF0ZVBvbGxQZXJpb2QpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgU2NoZWR1bGVOZXh0UG9sbChrVXNlUHJldmlvdXNQb2xsUGVyaW9kKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOgorICAgICAgICBvdExvZ1dhcm5NYWMoR2V0SW5zdGFuY2UoKSwgIkRhdGEgcG9sbCB0eCByZXF1ZXN0ZWQgd2hpbGUgZGF0YSBwb2xsaW5nIHdhcyBub3QgZW5hYmxlZCEiKTsKKyAgICAgICAgU3RvcFBvbGxpbmcoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0FMUkVBRFk6CisgICAgICAgIG90TG9nRGViZ01hYyhHZXRJbnN0YW5jZSgpLCAiRGF0YSBwb2xsIHR4IHJlcXVlc3RlZCB3aGVuIGEgcHJldmlvdXMgZGF0YSByZXF1ZXN0IHN0aWxsIGluIHNlbmQgcXVldWUuIik7CisgICAgICAgIFNjaGVkdWxlTmV4dFBvbGwoa1VzZVByZXZpb3VzUG9sbFBlcmlvZCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT19CVUZTOgorICAgIGRlZmF1bHQ6CisgICAgICAgIG1Ob0J1ZmZlclJldHhNb2RlID0gdHJ1ZTsKKyAgICAgICAgU2NoZWR1bGVOZXh0UG9sbChrUmVjYWxjdWxhdGVQb2xsUGVyaW9kKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIERhdGFQb2xsTWFuYWdlcjo6U2V0RXh0ZXJuYWxQb2xsUGVyaW9kKHVpbnQzMl90IGFQZXJpb2QpCit7CisgICAgaWYgKG1FeHRlcm5hbFBvbGxQZXJpb2QgIT0gYVBlcmlvZCkKKyAgICB7CisgICAgICAgIG1FeHRlcm5hbFBvbGxQZXJpb2QgPSBhUGVyaW9kOworCisgICAgICAgIGlmIChtRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgU2NoZWR1bGVOZXh0UG9sbChrUmVjYWxjdWxhdGVQb2xsUGVyaW9kKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordWludDMyX3QgRGF0YVBvbGxNYW5hZ2VyOjpHZXRLZWVwQWxpdmVQb2xsUGVyaW9kKHZvaWQpIGNvbnN0Cit7CisgICAgdWludDMyX3QgcGVyaW9kID0gMDsKKworICAgIGlmIChtRXh0ZXJuYWxQb2xsUGVyaW9kICE9IDApCisgICAgeworICAgICAgICBwZXJpb2QgPSBtRXh0ZXJuYWxQb2xsUGVyaW9kOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwZXJpb2QgPSBHZXREZWZhdWx0UG9sbFBlcmlvZCgpOworICAgIH0KKworICAgIHJldHVybiBwZXJpb2Q7Cit9CisKK3ZvaWQgRGF0YVBvbGxNYW5hZ2VyOjpIYW5kbGVQb2xsU2VudChvdEVycm9yIGFFcnJvcikKK3sKKyAgICBib29sIHNob3VsZFJlY2FsY3VsYXRlUG9sbFBlcmlvZCA9IGZhbHNlOworCisgICAgVmVyaWZ5T3JFeGl0KG1FbmFibGVkKTsKKworICAgIHN3aXRjaCAoYUVycm9yKQorICAgIHsKKyAgICBjYXNlIE9UX0VSUk9SX05PTkU6CisKKyAgICAgICAgaWYgKG1SZW1haW5pbmdGYXN0UG9sbHMgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbWFpbmluZ0Zhc3RQb2xscy0tOworICAgICAgICAgICAgc2hvdWxkUmVjYWxjdWxhdGVQb2xsUGVyaW9kID0gKG1SZW1haW5pbmdGYXN0UG9sbHMgPT0gMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVJldHhNb2RlID09IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZXR4TW9kZSA9IGZhbHNlOworICAgICAgICAgICAgbVBvbGxUeEZhaWx1cmVDb3VudGVyID0gMDsKKyAgICAgICAgICAgIHNob3VsZFJlY2FsY3VsYXRlUG9sbFBlcmlvZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBvdExvZ0luZm9NYWMoR2V0SW5zdGFuY2UoKSwgIlNlbnQgZGF0YSBwb2xsIik7CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBtUG9sbFR4RmFpbHVyZUNvdW50ZXIrKzsKKworICAgICAgICBvdExvZ0luZm9NYWMoR2V0SW5zdGFuY2UoKSwgIkZhaWxlZCB0byBzZW5kIGRhdGEgcG9sbCwgZXJyb3I6JXMsIHJldHg6JWQvJWQiLAorICAgICAgICAgICAgICAgICAgICAgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGFFcnJvciksIG1Qb2xsVHhGYWlsdXJlQ291bnRlciwga01heFBvbGxSZXR4QXR0ZW1wdHMpOworCisgICAgICAgIGlmIChtUG9sbFR4RmFpbHVyZUNvdW50ZXIgPCBrTWF4UG9sbFJldHhBdHRlbXB0cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1SZXR4TW9kZSA9PSBmYWxzZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmV0eE1vZGUgPSB0cnVlOworICAgICAgICAgICAgICAgIHNob3VsZFJlY2FsY3VsYXRlUG9sbFBlcmlvZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtUmV0eE1vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgIG1Qb2xsVHhGYWlsdXJlQ291bnRlciA9IDA7CisgICAgICAgICAgICBzaG91bGRSZWNhbGN1bGF0ZVBvbGxQZXJpb2QgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHNob3VsZFJlY2FsY3VsYXRlUG9sbFBlcmlvZCkKKyAgICB7CisgICAgICAgIFNjaGVkdWxlTmV4dFBvbGwoa1JlY2FsY3VsYXRlUG9sbFBlcmlvZCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBEYXRhUG9sbE1hbmFnZXI6OkhhbmRsZVBvbGxUaW1lb3V0KHZvaWQpCit7CisgICAgLy8gQSBkYXRhIHBvbGwgdGltZW91dCBoYXBwZW5lZCwgaS5lLiwgdGhlIGFjayBpbiByZXNwb25zZSB0bworICAgIC8vIGEgZGF0YSBwb2xsIGluZGljYXRlZCB0aGF0IGEgZnJhbWUgd2FzIHBlbmRpbmcsIGJ1dCBubyBmcmFtZQorICAgIC8vIHdhcyByZWNlaXZlZCBhZnRlciB0aW1lb3V0IGludGVydmFsLgorCisgICAgVmVyaWZ5T3JFeGl0KG1FbmFibGVkKTsKKworICAgIG1Qb2xsVGltZW91dENvdW50ZXIrKzsKKworICAgIG90TG9nSW5mb01hYyhHZXRJbnN0YW5jZSgpLCAiRGF0YSBwb2xsIHRpbWVvdXQsIHJldHJ5OiVkLyVkIiwgbVBvbGxUaW1lb3V0Q291bnRlciwga1F1aWNrUG9sbHNBZnRlclRpbWVvdXQpOworCisgICAgaWYgKG1Qb2xsVGltZW91dENvdW50ZXIgPCBrUXVpY2tQb2xsc0FmdGVyVGltZW91dCkKKyAgICB7CisgICAgICAgIFNlbmREYXRhUG9sbCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtUG9sbFRpbWVvdXRDb3VudGVyID0gMDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIERhdGFQb2xsTWFuYWdlcjo6Q2hlY2tGcmFtZVBlbmRpbmcoTWFjOjpGcmFtZSAmYUZyYW1lKQoreworICAgIFZlcmlmeU9yRXhpdChtRW5hYmxlZCk7CisKKyAgICBtUG9sbFRpbWVvdXRDb3VudGVyID0gMDsKKworICAgIGlmIChhRnJhbWUuR2V0RnJhbWVQZW5kaW5nKCkgPT0gdHJ1ZSkKKyAgICB7CisgICAgICAgIFNlbmREYXRhUG9sbCgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgRGF0YVBvbGxNYW5hZ2VyOjpSZWNhbGN1bGF0ZVBvbGxQZXJpb2Qodm9pZCkKK3sKKyAgICBpZiAobUVuYWJsZWQpCisgICAgeworICAgICAgICBTY2hlZHVsZU5leHRQb2xsKGtSZWNhbGN1bGF0ZVBvbGxQZXJpb2QpOworICAgIH0KK30KKwordm9pZCBEYXRhUG9sbE1hbmFnZXI6OlNldEF0dGFjaE1vZGUoYm9vbCBhTW9kZSkKK3sKKyAgICBpZiAobUF0dGFjaE1vZGUgIT0gYU1vZGUpCisgICAgeworICAgICAgICBtQXR0YWNoTW9kZSA9IGFNb2RlOworCisgICAgICAgIGlmIChtRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgU2NoZWR1bGVOZXh0UG9sbChrUmVjYWxjdWxhdGVQb2xsUGVyaW9kKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRhUG9sbE1hbmFnZXI6OlNlbmRGYXN0UG9sbHModWludDhfdCBhTnVtRmFzdFBvbGxzKQoreworICAgIGJvb2wgc2hvdWxkUmVjYWxjdWxhdGVQb2xsUGVyaW9kID0gKG1SZW1haW5pbmdGYXN0UG9sbHMgPT0gMCk7CisKKyAgICBpZiAoYU51bUZhc3RQb2xscyA9PSAwKQorICAgIHsKKyAgICAgICAgYU51bUZhc3RQb2xscyA9IGtEZWZhdWx0RmFzdFBvbGxzOworICAgIH0KKworICAgIGlmIChhTnVtRmFzdFBvbGxzID4ga01heEZhc3RQb2xscykKKyAgICB7CisgICAgICAgIGFOdW1GYXN0UG9sbHMgPSBrTWF4RmFzdFBvbGxzOworICAgIH0KKworICAgIGlmIChtUmVtYWluaW5nRmFzdFBvbGxzIDwgYU51bUZhc3RQb2xscykKKyAgICB7CisgICAgICAgIG1SZW1haW5pbmdGYXN0UG9sbHMgPSBhTnVtRmFzdFBvbGxzOworICAgIH0KKworICAgIGlmIChtRW5hYmxlZCAmJiBzaG91bGRSZWNhbGN1bGF0ZVBvbGxQZXJpb2QpCisgICAgeworICAgICAgICBTY2hlZHVsZU5leHRQb2xsKGtSZWNhbGN1bGF0ZVBvbGxQZXJpb2QpOworICAgIH0KK30KKwordm9pZCBEYXRhUG9sbE1hbmFnZXI6OlNjaGVkdWxlTmV4dFBvbGwoUG9sbFBlcmlvZFNlbGVjdG9yIGFQb2xsUGVyaW9kU2VsZWN0b3IpCit7CisgICAgaWYgKGFQb2xsUGVyaW9kU2VsZWN0b3IgPT0ga1JlY2FsY3VsYXRlUG9sbFBlcmlvZCkKKyAgICB7CisgICAgICAgIG1Qb2xsUGVyaW9kID0gQ2FsY3VsYXRlUG9sbFBlcmlvZCgpOworICAgIH0KKworICAgIGlmIChtVGltZXIuSXNSdW5uaW5nKCkpCisgICAgeworICAgICAgICBtVGltZXIuU3RhcnRBdChtVGltZXJTdGFydFRpbWUsIG1Qb2xsUGVyaW9kKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVRpbWVyU3RhcnRUaW1lID0gVGltZXI6OkdldE5vdygpOworICAgICAgICBtVGltZXIuU3RhcnRBdChtVGltZXJTdGFydFRpbWUsIG1Qb2xsUGVyaW9kKTsKKyAgICB9Cit9CisKK3VpbnQzMl90IERhdGFQb2xsTWFuYWdlcjo6Q2FsY3VsYXRlUG9sbFBlcmlvZCh2b2lkKSBjb25zdAoreworICAgIHVpbnQzMl90IHBlcmlvZCA9IDA7CisKKyAgICBpZiAobUF0dGFjaE1vZGUgPT0gdHJ1ZSkKKyAgICB7CisgICAgICAgIHBlcmlvZCA9IGtBdHRhY2hEYXRhUG9sbFBlcmlvZDsKKyAgICB9CisKKyAgICBpZiAobVJldHhNb2RlID09IHRydWUpCisgICAgeworICAgICAgICBpZiAoKHBlcmlvZCA9PSAwKSB8fCAocGVyaW9kID4ga1JldHhQb2xsUGVyaW9kKSkKKyAgICAgICAgeworICAgICAgICAgICAgcGVyaW9kID0ga1JldHhQb2xsUGVyaW9kOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1Ob0J1ZmZlclJldHhNb2RlID09IHRydWUpCisgICAgeworICAgICAgICBpZiAoKHBlcmlvZCA9PSAwKSB8fCAocGVyaW9kID4ga05vQnVmZmVyUmV0eFBvbGxQZXJpb2QpKQorICAgICAgICB7CisgICAgICAgICAgICBwZXJpb2QgPSBrTm9CdWZmZXJSZXR4UG9sbFBlcmlvZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtUmVtYWluaW5nRmFzdFBvbGxzICE9IDApCisgICAgeworICAgICAgICBpZiAoKHBlcmlvZCA9PSAwKSB8fCAocGVyaW9kID4ga0Zhc3RQb2xsUGVyaW9kKSkKKyAgICAgICAgeworICAgICAgICAgICAgcGVyaW9kID0ga0Zhc3RQb2xsUGVyaW9kOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1FeHRlcm5hbFBvbGxQZXJpb2QgIT0gMCkKKyAgICB7CisgICAgICAgIGlmICgocGVyaW9kID09IDApIHx8IChwZXJpb2QgPiBtRXh0ZXJuYWxQb2xsUGVyaW9kKSkKKyAgICAgICAgeworICAgICAgICAgICAgcGVyaW9kID0gbUV4dGVybmFsUG9sbFBlcmlvZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChwZXJpb2QgPT0gMCkKKyAgICB7CisgICAgICAgIHBlcmlvZCA9IEdldERlZmF1bHRQb2xsUGVyaW9kKCk7CisKKyAgICAgICAgaWYgKHBlcmlvZCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBwZXJpb2QgPSBrTWluUG9sbFBlcmlvZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwZXJpb2Q7Cit9CisKK3ZvaWQgRGF0YVBvbGxNYW5hZ2VyOjpIYW5kbGVQb2xsVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLlNlbmREYXRhUG9sbCgpOworfQorCitEYXRhUG9sbE1hbmFnZXIgJkRhdGFQb2xsTWFuYWdlcjo6R2V0T3duZXIoQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgRGF0YVBvbGxNYW5hZ2VyICZtYW5hZ2VyID0gKnN0YXRpY19jYXN0PERhdGFQb2xsTWFuYWdlciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBEYXRhUG9sbE1hbmFnZXIgJm1hbmFnZXIgPSBvdEdldE1lc2hGb3J3YXJkZXIoKS5HZXREYXRhUG9sbE1hbmFnZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIG1hbmFnZXI7Cit9CisKK3VpbnQzMl90IERhdGFQb2xsTWFuYWdlcjo6R2V0RGVmYXVsdFBvbGxQZXJpb2Qodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGltZXI6OlNlY1RvTXNlYyhHZXRNZXNoRm9yd2FyZGVyKCkuR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRUaW1lb3V0KCkpIC0KKyAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtSZXR4UG9sbFBlcmlvZCkgKiBrTWF4UG9sbFJldHhBdHRlbXB0czsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvZGF0YV9wb2xsX21hbmFnZXIuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL2RhdGFfcG9sbF9tYW5hZ2VyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmJlNDllCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL2RhdGFfcG9sbF9tYW5hZ2VyLmhwcApAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGRhdGEgcG9sbCAobWFjIGRhdGEgcmVxdWVzdCBjb21tYW5kKSBtYW5hZ2VyLgorICovCisKKyNpZm5kZWYgREFUQV9QT0xMX01BTkFHRVJfSFBQXworI2RlZmluZSBEQVRBX1BPTExfTUFOQUdFUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtZGF0YS1wb2xsLW1hbmFnZXIKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGRhdGEgcG9sbCBtYW5hZ2VyLgorICoKKyAqIEB7CisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGRhdGEgcG9sbCAobWFjIGRhdGEgcmVxdWVzdCBjb21tYW5kKSBtYW5hZ2VyLgorICoKKyAqLworCitjbGFzcyBEYXRhUG9sbE1hbmFnZXI6IHB1YmxpYyBNZXNoRm9yd2FyZGVyTG9jYXRvcgoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtEZWZhdWx0RmFzdFBvbGxzICAgPSA4LCAgLy8vPCBEZWZhdWx0IG51bWJlciBvZiBmYXN0IHBvbGwgdHJhbnNtaXNzaW9ucyAoQHNhIFN0YXJ0RmFzdFBvbGxzKS4KKyAgICAgICAga01heEZhc3RQb2xscyAgICAgICA9IDE1LCAvLy88IE1heGltdW0gbnVtYmVyIG9mIGZhc3QgcG9sbCB0cmFuc21pc3Npb25zIGFsbG93ZWQuCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIGRhdGEgcG9sbCBtYW5hZ2VyIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNoRm9yd2FyZGVyICBBIHJlZmVyZW5jZSB0byB0aGUgTWVzaCBGb3J3YXJkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBEYXRhUG9sbE1hbmFnZXIoTWVzaEZvcndhcmRlciAmYU1lc2hGb3J3YXJkZXIpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5zdHJ1Y3RzIHRoZSBkYXRhIHBvbGwgbWFuYWdlciB0byBzdGFydCBzZW5kaW5nIHBlcmlvZGljIGRhdGEgcG9sbHMuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCBzZW5kaW5nIHBlcmlvZGljIGRhdGEgcG9sbHMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICAgICAgICAgUGVyaW9kaWMgZGF0YSBwb2xsIHRyYW5zbWlzc2lvbiBpcyBhbHJlYWR5IHN0YXJ0ZWQvZW5hYmxlZC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgICBEZXZpY2UgaXMgbm90IGluIHJ4LW9mZi13aGVuLWlkbGUgbW9kZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RhcnRQb2xsaW5nKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5zdHJ1Y3RzIHRoZSBkYXRhIHBvbGwgbWFuYWdlciB0byBzdG9wIHNlbmRpbmcgcGVyaW9kaWMgZGF0YSBwb2xscy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RvcFBvbGxpbmcodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBlbnF1ZXVlcyBhIGRhdGEgcG9sbCAoYW4gSUVFRSA4MDIuMTUuNCBEYXRhIFJlcXVlc3QpIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBlbnF1ZXVlZCBhIGRhdGEgcG9sbCBtZXNzYWdlCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICAgICAgICBBIGRhdGEgcG9sbCBtZXNzYWdlIGlzIGFscmVhZHkgZW5xdWV1ZWQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBEZXZpY2UgaXMgbm90IGluIHJ4LW9mZi13aGVuLWlkbGUgbW9kZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgIEluc3VmZmljaWVudCBtZXNzYWdlIGJ1ZmZlcnMgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kRGF0YVBvbGwodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGEgdXNlci1zcGVjaWZpZWQvZXh0ZXJuYWwgZGF0YSBwb2xsIHBlcmlvZC4KKyAgICAgKgorICAgICAqIElmIHRoZSB1c2VyIHByb3ZpZGVzIGEgbm9uLXplcm8gcG9sbCBwZXJpb2QsIHRoZSB1c2VyIHZhbHVlIHNwZWNpZmllcyB0aGUgbWF4aW11bSBwZXJpb2QgYmV0d2VlbiBkYXRhCisgICAgICogcmVxdWVzdCB0cmFuc21pc3Npb25zLiBOb3RlIHRoYXQgT3BlblRocmVhZCBtYXkgc2VuZCBkYXRhIHJlcXVlc3QgdHJhbnNtaXNzaW9ucyBtb3JlIGZyZXF1ZW50bHkgd2hlbiBleHBlY3RpbmcKKyAgICAgKiBhIGNvbnRyb2wtbWVzc2FnZSBmcm9tIGEgcGFyZW50IG9yIGluIGNhc2Ugb2YgZGF0YSBwb2xsIHRyYW5zbWlzc2lvbiBmYWlsdXJlcyBvciB0aW1lb3V0cy4KKyAgICAgKgorICAgICAqIERlZmF1bHQgdmFsdWUgZm9yIHRoZSBleHRlcm5hbCBwb2xsIHBlcmlvZCBpcyB6ZXJvIChpLmUuLCBubyB1c2VyLXNwZWNpZmllZCBwb2xsIHBlcmlvZCkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGVyaW9kICBUaGUgZGF0YSBwb2xsIHBlcmlvZCBpbiBtaWxsaXNlY29uZHMsIG9yIHplcm8gdG8gbWVhbiBubyB1c2VyLXNwZWNpZmllZCBwb2xsIHBlcmlvZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RXh0ZXJuYWxQb2xsUGVyaW9kKHVpbnQzMl90IGFQZXJpb2QpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgY3VycmVudCB1c2VyLXNwZWNpZmllZC9leHRlcm5hbCBkYXRhIHBvbGwgcGVyaW9kLgorICAgICAqCisgICAgICogQHJldHVybnMgIFRoZSBkYXRhIHBvbGwgcGVyaW9kIGluIG1pbGxpc2Vjb25kcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldEV4dGVybmFsUG9sbFBlcmlvZCh2b2lkKSBjb25zdCB7IHJldHVybiBtRXh0ZXJuYWxQb2xsUGVyaW9kOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmZvcm1zIHRoZSBkYXRhIHBvbGwgbWFuYWdlciBvZiBzdWNjZXNzL2Vycm9yIHN0YXR1cyBvZiBhIHByZXZpb3VzbHkgcmVxdWVzdGVkIHBvbGwgbWVzc2FnZQorICAgICAqIHRyYW5zbWlzc2lvbi4KKyAgICAgKgorICAgICAqIEluIGNhc2Ugb2YgdHJhbnNtaXQgZmFpbHVyZSwgdGhlIGRhdGEgcG9sbCBtYW5hZ2VyIG1heSBjaG9vc2UgdG8gc2VuZCB0aGUgbmV4dCBkYXRhIHBvbGwgbW9yZSBxdWlja2x5ICh1cCB0bworICAgICAqIHNvbWUgZml4ZWQgbnVtYmVyIG9mIGF0dGVtcHRzKS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUVycm9yICAgRXJyb3Igc3RhdHVzIG9mIGEgZGF0YSBwb2xsIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBIYW5kbGVQb2xsU2VudChvdEVycm9yIGFFcnJvcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmZvcm1zIHRoZSBkYXRhIHBvbGwgbWFuYWdlciB0aGF0IGEgZGF0YSBwb2xsIHRpbWVvdXQgaGFwcGVuZWQsIGkuZS4sIHdoZW4gdGhlIGFjayBpbiByZXNwb25zZSB0bworICAgICAqIGEgZGF0YSByZXF1ZXN0IGNvbW1hbmQgaW5kaWNhdGVkIHRoYXQgYSBmcmFtZSB3YXMgcGVuZGluZywgYnV0IG5vIGZyYW1lIHdhcyByZWNlaXZlZCBhZnRlciB0aW1lb3V0IGludGVydmFsLgorICAgICAqCisgICAgICogRGF0YSBwb2xsIG1hbmFnZXIgbWF5IGNob29zZSB0byB0cmFuc21pdCBhbm90aGVyIGRhdGEgcG9sbCBpbW1lZGlhdGVseSAodXAgdG8gc29tZSBmaXhlZCBudW1iZXIgb2YgYXR0ZW1wdHMpLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBIYW5kbGVQb2xsVGltZW91dCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZm9ybXMgdGhlIGRhdGEgcG9sbCBtYW5hZ2VyIHRoYXQgYSBtYWMgZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQuIEl0IGNoZWNrcyB0aGUgImZyYW1lIHBlbmRpbmciIGluCisgICAgICogdGhlIHJlY2VpdmVkIGZyYW1lIGhlYWRlciBhbmQgaWYgaXQgaXMgc2V0LCBkYXRhIHBvbGwgbWFuYWdlciB3aWxsIHNlbmQgYW4gaW1tZWRpYXRlIGRhdGEgcG9sbCB0byByZXRyaWV2ZSB0aGUKKyAgICAgKiBwZW5kaW5nIGZyYW1lLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDaGVja0ZyYW1lUGVuZGluZyhNYWM6OkZyYW1lICZhRnJhbWUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXNrcyB0aGUgZGF0YSBwb2xsIG1hbmFnZXIgdG8gcmVjYWxjdWxhdGUgdGhlIHBvbGwgcGVyaW9kLgorICAgICAqCisgICAgICogVGhpcyBpcyBtYWlubHkgdXNlZCB0byBpbmZvcm0gdGhlIHBvbGwgbWFuYWdlciB0aGF0IGEgcGFyYW1ldGVyIGltcGFjdGluZyB0aGUgcG9sbCBwZXJpb2QgKGUuZy4sIHRoZSBjaGlsZCdzCisgICAgICogdGltZW91dCB2YWx1ZSB3aGljaCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkYXRhIHBvbGwgcGVyaW9kKSBpcyBtb2RpZmllZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVjYWxjdWxhdGVQb2xsUGVyaW9kKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cy9jbGVhcnMgdGhlIGF0dGFjaCBtb2RlIG9uIGRhdGEgcG9sbCBtYW5hZ2VyLgorICAgICAqCisgICAgICogV2hlbiBhdHRhY2ggbW9kZSBpcyBlbmFibGVkLCB0aGUgZGF0YSBwb2xsIG1hbmFnZXIgd2lsbCBzZW5kIGRhdGEgcG9sbHMgYXQgYSBmYXN0ZXIgcmF0ZSBkZXRlcm1pbmVkIGJ5CisgICAgICogcG9sbCBwZXJpb2QgY29uZmlndXJhdGlvbiBvcHRpb24gYE9QRU5USFJFQURfQ09ORklHX0FUVEFDSF9EQVRBX1BPTExfUEVSSU9EYC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNb2RlICBUaGUgbW9kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QXR0YWNoTW9kZShib29sIGFNb2RlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFza3MgZGF0YSBwb2xsIG1hbmFnZXIgdG8gc2VuZCB0aGUgbmV4dCBnaXZlbiBudW1iZXIgb2YgcG9sbHMgYXQgYSBmYXN0ZXIgcmF0ZSAocG9sbCBwZXJpb2QgZGVmaW5lZAorICAgICAqIGJ5IGBrRmFzdFBvbGxQZXJpb2RgKS4gVGhpcyBpcyB1c2VkIGJ5IE9wZW5UaHJlYWQgc3RhY2sgd2hlbiBpdCBleHBlY3RzIGEgcmVzcG9uc2UgZnJvbSB0aGUgcGFyZW50L3NlbmRlci4KKyAgICAgKgorICAgICAqIElmIEBwIGFOdW1GYXN0UG9sbHMgaXMgemVybyB0aGUgZGVmYXVsdCB2YWx1ZSBzcGVjaWZpZWQgYnkgYGtEZWZhdWx0RmFzdFBvbGxzYCBpcyB1c2VkIGluc3RlYWQuIFRoZSBudW1iZXIgb2YKKyAgICAgKiBmYXN0IHBvbGxzIGlzIGNsaXBwZWQgYnkgbWF4aW11bSB2YWx1ZSBzcGVjaWZpZWQgYnkgYGtNYXhGYXN0UG9sbHNgLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhTnVtRmFzdFBvbGxzICBJZiBub24temVybywgbnVtYmVyIG9mIGZhc3QgcG9sbHMgdG8gc2VuZCwgaWYgemVybywgZGVmYXVsdCB2YWx1ZSBpcyB1c2VkIGluc3RlYWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNlbmRGYXN0UG9sbHModWludDhfdCBhTnVtRmFzdFBvbGxzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIG1heGltdW0gZGF0YSBwb2xsaW5nIHBlcmlvZCBpbiB1c2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyB0aGUgbWF4aW11bSBkYXRhIHBvbGxpbmcgcGVyaW9kIGluIHVzZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldEtlZXBBbGl2ZVBvbGxQZXJpb2Qodm9pZCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZW51bSAgLy8gUG9sbCBwZXJpb2QgdW5kZXIgZGlmZmVyZW50IGNvbmRpdGlvbnMgKGluIG1pbGxpc2Vjb25kcykuCisgICAgeworICAgICAgICBrQXR0YWNoRGF0YVBvbGxQZXJpb2QgICA9IE9QRU5USFJFQURfQ09ORklHX0FUVEFDSF9EQVRBX1BPTExfUEVSSU9ELCAgLy8vPCBQb2xsIHBlcmlvZCBkdXJpbmcgYXR0YWNoLgorICAgICAgICBrUmV0eFBvbGxQZXJpb2QgICAgICAgICA9IDEwMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBQb2xsIHJldHggcGVyaW9kIGR1ZSB0byB0eCBmYWlsdXJlLgorICAgICAgICBrTm9CdWZmZXJSZXR4UG9sbFBlcmlvZCA9IDIwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBQb2xsIHJldHggZHVlIHRvIG5vIGJ1ZmZlciBzcGFjZS4KKyAgICAgICAga0Zhc3RQb2xsUGVyaW9kICAgICAgICAgPSAxODgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUGVyaW9kIHVzZWQgZm9yIGZhc3QgcG9sbHMuCisgICAgICAgIGtNaW5Qb2xsUGVyaW9kICAgICAgICAgID0gMTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1pbmltdW0gYWxsb3dlZCBwb2xsIHBlcmlvZC4KKyAgICB9OworCisgICAgZW51bQorICAgIHsKKyAgICAgICAga1F1aWNrUG9sbHNBZnRlclRpbWVvdXQgPSA1LCAgLy8vPCBNYXhpbXVtIG51bWJlciBvZiBxdWljayBkYXRhIHBvbGwgdHggaW4gY2FzZSBvZiBiYWNrLXRvLWJhY2sgcG9sbCB0aW1lb3V0cy4KKyAgICAgICAga01heFBvbGxSZXR4QXR0ZW1wdHMgICAgPSA1LCAgLy8vPCBNYXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWl0IGF0dGVtcHRzIG9mIGRhdGEgcG9sbCAobWFjIGRhdGEgcmVxdWVzdCkuCisgICAgfTsKKworICAgIGVudW0gUG9sbFBlcmlvZFNlbGVjdG9yCisgICAgeworICAgICAgICBrVXNlUHJldmlvdXNQb2xsUGVyaW9kLAorICAgICAgICBrUmVjYWxjdWxhdGVQb2xsUGVyaW9kLAorICAgIH07CisKKyAgICB2b2lkIFNjaGVkdWxlTmV4dFBvbGwoUG9sbFBlcmlvZFNlbGVjdG9yIGFQb2xsUGVyaW9kU2VsZWN0b3IpOworICAgIHVpbnQzMl90IENhbGN1bGF0ZVBvbGxQZXJpb2Qodm9pZCkgY29uc3Q7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlUG9sbFRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHN0YXRpYyBEYXRhUG9sbE1hbmFnZXIgJkdldE93bmVyKENvbnRleHQgJmFDb250ZXh0KTsKKyAgICB1aW50MzJfdCBHZXREZWZhdWx0UG9sbFBlcmlvZCh2b2lkKSBjb25zdDsKKworICAgIFRpbWVyICAgICBtVGltZXI7CisgICAgdWludDMyX3QgIG1UaW1lclN0YXJ0VGltZTsKKyAgICB1aW50MzJfdCAgbUV4dGVybmFsUG9sbFBlcmlvZDsKKyAgICB1aW50MzJfdCAgbVBvbGxQZXJpb2Q7CisKKyAgICBib29sICAgICAgbUVuYWJsZWQ6IDE7ICAgICAgICAgICAgICAgLy88IEluZGljYXRlcyB3aGV0aGVyIGRhdGEgcG9sbGluZyBpcyBlbmFibGVkL3N0YXJ0ZWQuCisgICAgYm9vbCAgICAgIG1BdHRhY2hNb2RlOiAxOyAgICAgICAgICAgIC8vPCBJbmRpY2F0ZXMgd2hldGhlciBpbiBhdHRhY2ggbW9kZSAodG8gdXNlIGF0dGFjaCBwb2xsIHBlcmlvZCkuCisgICAgYm9vbCAgICAgIG1SZXR4TW9kZTogMTsgICAgICAgICAgICAgIC8vPCBJbmRpY2F0ZXMgd2hldGhlciBsYXN0IHBvbGwgdHggZmFpbGVkIGF0IG1hYy9yYWRpbyBsYXllciAocG9sbCByZXR4IG1vZGUpLgorICAgIGJvb2wgICAgICBtTm9CdWZmZXJSZXR4TW9kZTogMTsgICAgICAvLzwgSW5kaWNhdGVzIHdoZXRoZXIgbGFzdCBwb2xsIHR4IGZhaWxlZCBkdWUgdG8gaW5zdWZmaWNpZW50IGJ1ZmZlci4KKyAgICB1aW50OF90ICAgbVBvbGxUaW1lb3V0Q291bnRlcjogNDsgICAgLy88IFBvbGwgdGltZW91dHMgY291bnRlciAoMCB0byBga1F1aWNrUG9sbHNBZnRlclRpbW91dGApLgorICAgIHVpbnQ4X3QgICBtUG9sbFR4RmFpbHVyZUNvdW50ZXI6IDQ7ICAvLzwgUG9sbCB0eCBmYWlsdXJlIGNvdW50ZXIgKDAgdG8gYGtNYXhQb2xsUmV0eEF0dGVtcHRzYCkuCisgICAgdWludDhfdCAgIG1SZW1haW5pbmdGYXN0UG9sbHM6IDQ7ICAgIC8vPCBOdW1iZXIgb2YgcmVtYWluaW5nIGZhc3QgcG9sbHMgd2hlbiBpbiB0cmFuc2llbnQgZmFzdCBwb2xsaW5nIG1vZGUuCit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIERBVEFfUE9MTF9NQU5BR0VSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9lbmVyZ3lfc2Nhbl9zZXJ2ZXIuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL2VuZXJneV9zY2FuX3NlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNmNWI0YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9lbmVyZ3lfc2Nhbl9zZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBFbmVyZ3kgU2NhbiBTZXJ2ZXIuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiZW5lcmd5X3NjYW5fc2VydmVyLnRtaCIKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiZW5lcmd5X3NjYW5fc2VydmVyLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcC5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworRW5lcmd5U2NhblNlcnZlcjo6RW5lcmd5U2NhblNlcnZlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKSA6CisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKGFUaHJlYWROZXRpZiksCisgICAgbUNoYW5uZWxNYXNrKDApLAorICAgIG1DaGFubmVsTWFza0N1cnJlbnQoMCksCisgICAgbVBlcmlvZCgwKSwKKyAgICBtU2NhbkR1cmF0aW9uKDApLAorICAgIG1Db3VudCgwKSwKKyAgICBtQWN0aXZlKGZhbHNlKSwKKyAgICBtU2NhblJlc3VsdHNMZW5ndGgoMCksCisgICAgbVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZFbmVyZ3lTY2FuU2VydmVyOjpIYW5kbGVUaW1lciwgdGhpcyksCisgICAgbUVuZXJneVNjYW4oT1RfVVJJX1BBVEhfRU5FUkdZX1NDQU4sICZFbmVyZ3lTY2FuU2VydmVyOjpIYW5kbGVSZXF1ZXN0LCB0aGlzKQoreworICAgIG1OZXRpZkNhbGxiYWNrLlNldCgmRW5lcmd5U2NhblNlcnZlcjo6SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQsIHRoaXMpOworICAgIGFUaHJlYWROZXRpZi5SZWdpc3RlckNhbGxiYWNrKG1OZXRpZkNhbGxiYWNrKTsKKworICAgIGFUaHJlYWROZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobUVuZXJneVNjYW4pOworfQorCit2b2lkIEVuZXJneVNjYW5TZXJ2ZXI6OkhhbmRsZVJlcXVlc3Qodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8RW5lcmd5U2NhblNlcnZlciAqPihhQ29udGV4dCktPkhhbmRsZVJlcXVlc3QoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgRW5lcmd5U2NhblNlcnZlcjo6SGFuZGxlUmVxdWVzdChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgTWVzaENvUDo6Q291bnRUbHYgY291bnQ7CisgICAgTWVzaENvUDo6UGVyaW9kVGx2IHBlcmlvZDsKKyAgICBNZXNoQ29QOjpTY2FuRHVyYXRpb25UbHYgc2NhbkR1cmF0aW9uOworICAgIE1lc2hDb1A6OkNoYW5uZWxNYXNrMFRsdiBjaGFubmVsTWFzazsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIHJlc3BvbnNlSW5mbyhhTWVzc2FnZUluZm8pOworCisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoTWVzaENvUDo6VGx2OjpHZXRUbHYoYU1lc3NhZ2UsIE1lc2hDb1A6OlRsdjo6a0NvdW50LCBzaXplb2YoY291bnQpLCBjb3VudCkpOworICAgIFZlcmlmeU9yRXhpdChjb3VudC5Jc1ZhbGlkKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChNZXNoQ29QOjpUbHY6OkdldFRsdihhTWVzc2FnZSwgTWVzaENvUDo6VGx2OjprUGVyaW9kLCBzaXplb2YocGVyaW9kKSwgcGVyaW9kKSk7CisgICAgVmVyaWZ5T3JFeGl0KHBlcmlvZC5Jc1ZhbGlkKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChNZXNoQ29QOjpUbHY6OkdldFRsdihhTWVzc2FnZSwgTWVzaENvUDo6VGx2OjprU2NhbkR1cmF0aW9uLCBzaXplb2Yoc2NhbkR1cmF0aW9uKSwgc2NhbkR1cmF0aW9uKSk7CisgICAgVmVyaWZ5T3JFeGl0KHNjYW5EdXJhdGlvbi5Jc1ZhbGlkKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChNZXNoQ29QOjpUbHY6OkdldFRsdihhTWVzc2FnZSwgTWVzaENvUDo6VGx2OjprQ2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzayksIGNoYW5uZWxNYXNrKSk7CisgICAgVmVyaWZ5T3JFeGl0KGNoYW5uZWxNYXNrLklzVmFsaWQoKSk7CisKKyAgICBtQ2hhbm5lbE1hc2sgPSBjaGFubmVsTWFzay5HZXRNYXNrKCk7CisgICAgbUNoYW5uZWxNYXNrQ3VycmVudCA9IG1DaGFubmVsTWFzazsKKyAgICBtQ291bnQgPSBjb3VudC5HZXRDb3VudCgpOworICAgIG1QZXJpb2QgPSBwZXJpb2QuR2V0UGVyaW9kKCk7CisgICAgbVNjYW5EdXJhdGlvbiA9IHNjYW5EdXJhdGlvbi5HZXRTY2FuRHVyYXRpb24oKTsKKyAgICBtU2NhblJlc3VsdHNMZW5ndGggPSAwOworICAgIG1BY3RpdmUgPSB0cnVlOworICAgIG1UaW1lci5TdGFydChrU2NhbkRlbGF5KTsKKworICAgIG1Db21taXNzaW9uZXIgPSBhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKTsKKworICAgIGlmIChhSGVhZGVyLklzQ29uZmlybWFibGUoKSAmJiAhYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkuSXNNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoR2V0TmV0aWYoKS5HZXRDb2FwKCkuU2VuZEVtcHR5QWNrKGFIZWFkZXIsIHJlc3BvbnNlSW5mbykpOworICAgICAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJzZW50IGVuZXJneSBzY2FuIHF1ZXJ5IHJlc3BvbnNlIik7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBFbmVyZ3lTY2FuU2VydmVyOjpIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKwordm9pZCBFbmVyZ3lTY2FuU2VydmVyOjpIYW5kbGVUaW1lcih2b2lkKQoreworICAgIFZlcmlmeU9yRXhpdChtQWN0aXZlKTsKKworICAgIGlmIChtQ291bnQpCisgICAgeworICAgICAgICAvLyBncmFiIHRoZSBsb3dlc3QgY2hhbm5lbCB0byBzY2FuCisgICAgICAgIHVpbnQzMl90IGNoYW5uZWxNYXNrID0gbUNoYW5uZWxNYXNrQ3VycmVudCAmIH4obUNoYW5uZWxNYXNrQ3VycmVudCAtIDEpOworICAgICAgICBHZXROZXRpZigpLkdldE1hYygpLkVuZXJneVNjYW4oY2hhbm5lbE1hc2ssIG1TY2FuRHVyYXRpb24sIEhhbmRsZVNjYW5SZXN1bHQsIHRoaXMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTZW5kUmVwb3J0KCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBFbmVyZ3lTY2FuU2VydmVyOjpIYW5kbGVTY2FuUmVzdWx0KHZvaWQgKmFDb250ZXh0LCBvdEVuZXJneVNjYW5SZXN1bHQgKmFSZXN1bHQpCit7CisgICAgc3RhdGljX2Nhc3Q8RW5lcmd5U2NhblNlcnZlciAqPihhQ29udGV4dCktPkhhbmRsZVNjYW5SZXN1bHQoYVJlc3VsdCk7Cit9CisKK3ZvaWQgRW5lcmd5U2NhblNlcnZlcjo6SGFuZGxlU2NhblJlc3VsdChvdEVuZXJneVNjYW5SZXN1bHQgKmFSZXN1bHQpCit7CisgICAgVmVyaWZ5T3JFeGl0KG1BY3RpdmUpOworCisgICAgaWYgKGFSZXN1bHQpCisgICAgeworICAgICAgICBtU2NhblJlc3VsdHNbbVNjYW5SZXN1bHRzTGVuZ3RoKytdID0gYVJlc3VsdC0+bU1heFJzc2k7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIGNsZWFyIHRoZSBsb3dlc3QgY2hhbm5lbCB0byBzY2FuCisgICAgICAgIG1DaGFubmVsTWFza0N1cnJlbnQgJj0gbUNoYW5uZWxNYXNrQ3VycmVudCAtIDE7CisKKyAgICAgICAgaWYgKG1DaGFubmVsTWFza0N1cnJlbnQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbUNoYW5uZWxNYXNrQ3VycmVudCA9IG1DaGFubmVsTWFzazsKKyAgICAgICAgICAgIG1Db3VudC0tOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Db3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgbVRpbWVyLlN0YXJ0KG1QZXJpb2QpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbVRpbWVyLlN0YXJ0KGtSZXBvcnREZWxheSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitvdEVycm9yIEVuZXJneVNjYW5TZXJ2ZXI6OlNlbmRSZXBvcnQodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc2hDb1A6OkNoYW5uZWxNYXNrMFRsdiBjaGFubmVsTWFzazsKKyAgICBNZXNoQ29QOjpFbmVyZ3lMaXN0VGx2IGVuZXJneUxpc3Q7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX0VORVJHWV9SRVBPUlQpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBNZXNoQ29QOjpOZXdNZXNoQ29QTWVzc2FnZShHZXROZXRpZigpLkdldENvYXAoKSwgaGVhZGVyKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIGNoYW5uZWxNYXNrLkluaXQoKTsKKyAgICBjaGFubmVsTWFzay5TZXRNYXNrKG1DaGFubmVsTWFzayk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzaykpKTsKKworICAgIGVuZXJneUxpc3QuSW5pdCgpOworICAgIGVuZXJneUxpc3QuU2V0TGVuZ3RoKG1TY2FuUmVzdWx0c0xlbmd0aCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmZW5lcmd5TGlzdCwgc2l6ZW9mKGVuZXJneUxpc3QpKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZChtU2NhblJlc3VsdHMsIG1TY2FuUmVzdWx0c0xlbmd0aCkpOworCisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIoR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihtQ29tbWlzc2lvbmVyKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrQ29hcFVkcFBvcnQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBHZXROZXRpZigpLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgc2NhbiByZXN1bHRzIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgbUFjdGl2ZSA9IGZhbHNlOworCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIEVuZXJneVNjYW5TZXJ2ZXI6OkhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKHVpbnQzMl90IGFGbGFncywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8RW5lcmd5U2NhblNlcnZlciAqPihhQ29udGV4dCktPkhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKGFGbGFncyk7Cit9CisKK3ZvaWQgRW5lcmd5U2NhblNlcnZlcjo6SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzKQoreworICAgIGlmICgoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfTkVUREFUQSkgIT0gMCAmJgorICAgICAgICAhbUFjdGl2ZSAmJgorICAgICAgICBHZXROZXRpZigpLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0Q29tbWlzc2lvbmluZ0RhdGEoKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgbUFjdGl2ZSA9IGZhbHNlOworICAgICAgICBtVGltZXIuU3RvcCgpOworICAgIH0KK30KKworRW5lcmd5U2NhblNlcnZlciAmRW5lcmd5U2NhblNlcnZlcjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgRW5lcmd5U2NhblNlcnZlciAmc2VydmVyID0gKnN0YXRpY19jYXN0PEVuZXJneVNjYW5TZXJ2ZXIgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgRW5lcmd5U2NhblNlcnZlciAmc2VydmVyID0gb3RHZXRUaHJlYWROZXRpZigpLkdldEVuZXJneVNjYW5TZXJ2ZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIHNlcnZlcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvZW5lcmd5X3NjYW5fc2VydmVyLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9lbmVyZ3lfc2Nhbl9zZXJ2ZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTIxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvZW5lcmd5X3NjYW5fc2VydmVyLmhwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHJlc3BvbmRpbmcgdG8gRW5lcmd5IFNjYW4gUmVxdWVzdHMuCisgKi8KKworI2lmbmRlZiBFTkVSR1lfU0NBTl9TRVJWRVJfSFBQXworI2RlZmluZSBFTkVSR1lfU0NBTl9TRVJWRVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIE1lc2hGb3J3YXJkZXI7CitjbGFzcyBUaHJlYWRMYXN0VHJhbnNhY3Rpb25UaW1lVGx2OworY2xhc3MgVGhyZWFkTWVzaExvY2FsRWlkVGx2OworY2xhc3MgVGhyZWFkTmV0aWY7CitjbGFzcyBUaHJlYWRUYXJnZXRUbHY7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGhhbmRsaW5nIEVuZXJneSBTY2FuIFJlcXVlc3RzLgorICoKKyAqLworY2xhc3MgRW5lcmd5U2NhblNlcnZlcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIEVuZXJneVNjYW5TZXJ2ZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1NjYW5EZWxheSAgID0gMTAwMCwgIC8vLzwgU0NBTl9ERUxBWSAobWlsbGlzZWNvbmRzKQorICAgICAgICBrUmVwb3J0RGVsYXkgPSA1MDAsICAgLy8vPCBEZWxheSBiZWZvcmUgc2VuZGluZyBhIHJlcG9ydCAobWlsbGlzZWNvbmRzKQorICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZXF1ZXN0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlUmVxdWVzdChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlU2NhblJlc3VsdCh2b2lkICphQ29udGV4dCwgb3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0KTsKKyAgICB2b2lkIEhhbmRsZVNjYW5SZXN1bHQob3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0KTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlVGltZXIodm9pZCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCh1aW50MzJfdCBhRmxhZ3MsIHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIEhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKHVpbnQzMl90IGFGbGFncyk7CisKKyAgICBvdEVycm9yIFNlbmRSZXBvcnQodm9pZCk7CisKKyAgICBzdGF0aWMgRW5lcmd5U2NhblNlcnZlciAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgSXA2OjpBZGRyZXNzIG1Db21taXNzaW9uZXI7CisgICAgdWludDMyX3QgbUNoYW5uZWxNYXNrOworICAgIHVpbnQzMl90IG1DaGFubmVsTWFza0N1cnJlbnQ7CisgICAgdWludDE2X3QgbVBlcmlvZDsKKyAgICB1aW50MTZfdCBtU2NhbkR1cmF0aW9uOworICAgIHVpbnQ4X3QgbUNvdW50OworICAgIGJvb2wgbUFjdGl2ZTsKKworICAgIGludDhfdCBtU2NhblJlc3VsdHNbT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VORVJHWV9SRVNVTFRTXTsKKyAgICB1aW50OF90IG1TY2FuUmVzdWx0c0xlbmd0aDsKKworICAgIFRpbWVyIG1UaW1lcjsKKworICAgIElwNjo6TmV0aWZDYWxsYmFjayBtTmV0aWZDYWxsYmFjazsKKworICAgIENvYXA6OlJlc291cmNlIG1FbmVyZ3lTY2FuOworfTsKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEVORVJHWV9TQ0FOX1NFUlZFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQva2V5X21hbmFnZXIuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL2tleV9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWNlMDA3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL2tleV9tYW5hZ2VyLmNwcApAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBUaHJlYWQgc2VjdXJpdHkgbWF0ZXJpYWwgZ2VuZXJhdGlvbi4KKyAqLworCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAia2V5X21hbmFnZXIuaHBwIgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgImNyeXB0by9obWFjX3NoYTI1Ni5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV9yb3V0ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitzdGF0aWMgY29uc3QgdWludDhfdCBrVGhyZWFkU3RyaW5nW10gPQoreworICAgICdUJywgJ2gnLCAncicsICdlJywgJ2EnLCAnZCcsCit9OworCitLZXlNYW5hZ2VyOjpLZXlNYW5hZ2VyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1LZXlTZXF1ZW5jZSgwKSwKKyAgICBtTWFjRnJhbWVDb3VudGVyKDApLAorICAgIG1NbGVGcmFtZUNvdW50ZXIoMCksCisgICAgbVN0b3JlZE1hY0ZyYW1lQ291bnRlcigwKSwKKyAgICBtU3RvcmVkTWxlRnJhbWVDb3VudGVyKDApLAorICAgIG1Ib3Vyc1NpbmNlS2V5Um90YXRpb24oMCksCisgICAgbUtleVJvdGF0aW9uVGltZShrRGVmYXVsdEtleVJvdGF0aW9uVGltZSksCisgICAgbUtleVN3aXRjaEd1YXJkVGltZShrRGVmYXVsdEtleVN3aXRjaEd1YXJkVGltZSksCisgICAgbUtleVN3aXRjaEd1YXJkRW5hYmxlZChmYWxzZSksCisgICAgbUtleVJvdGF0aW9uVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJktleU1hbmFnZXI6OkhhbmRsZUtleVJvdGF0aW9uVGltZXIsIHRoaXMpLAorICAgIG1LZWtGcmFtZUNvdW50ZXIoMCksCisgICAgbVNlY3VyaXR5UG9saWN5RmxhZ3MoMHhmZikKK3sKK30KKwordm9pZCBLZXlNYW5hZ2VyOjpTdGFydCh2b2lkKQoreworICAgIG1LZXlTd2l0Y2hHdWFyZEVuYWJsZWQgPSBmYWxzZTsKKyAgICBTdGFydEtleVJvdGF0aW9uVGltZXIoKTsKK30KKwordm9pZCBLZXlNYW5hZ2VyOjpTdG9wKHZvaWQpCit7CisgICAgbUtleVJvdGF0aW9uVGltZXIuU3RvcCgpOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK2NvbnN0IHVpbnQ4X3QgKktleU1hbmFnZXI6OkdldFBTS2Modm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVBTS2M7Cit9CisKK3ZvaWQgS2V5TWFuYWdlcjo6U2V0UFNLYyhjb25zdCB1aW50OF90ICphUFNLYykKK3sKKyAgICBtZW1jcHkobVBTS2MsIGFQU0tjLCBzaXplb2YobVBTS2MpKTsKK30KKyNlbmRpZgorCitjb25zdCBvdE1hc3RlcktleSAmS2V5TWFuYWdlcjo6R2V0TWFzdGVyS2V5KHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXN0ZXJLZXk7Cit9CisKK290RXJyb3IgS2V5TWFuYWdlcjo6U2V0TWFzdGVyS2V5KGNvbnN0IG90TWFzdGVyS2V5ICZhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFJvdXRlciAqcm91dGVyczsKKyAgICBDaGlsZCAqY2hpbGRyZW47CisgICAgdWludDhfdCBudW07CisKKyAgICBWZXJpZnlPckV4aXQobWVtY21wKCZtTWFzdGVyS2V5LCAmYUtleSwgc2l6ZW9mKG1NYXN0ZXJLZXkpKSAhPSAwKTsKKworICAgIG1NYXN0ZXJLZXkgPSBhS2V5OworICAgIG1LZXlTZXF1ZW5jZSA9IDA7CisgICAgQ29tcHV0ZUtleShtS2V5U2VxdWVuY2UsIG1LZXkpOworCisgICAgLy8gcmVzZXQgcGFyZW50IGZyYW1lIGNvdW50ZXJzCisgICAgcm91dGVycyA9IEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0UGFyZW50KCk7CisgICAgcm91dGVycy0+U2V0S2V5U2VxdWVuY2UoMCk7CisgICAgcm91dGVycy0+U2V0TGlua0ZyYW1lQ291bnRlcigwKTsKKyAgICByb3V0ZXJzLT5TZXRNbGVGcmFtZUNvdW50ZXIoMCk7CisKKyAgICAvLyByZXNldCByb3V0ZXIgZnJhbWUgY291bnRlcnMKKyAgICByb3V0ZXJzID0gR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRSb3V0ZXJzKCZudW0pOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbnVtOyBpKyspCisgICAgeworICAgICAgICByb3V0ZXJzW2ldLlNldEtleVNlcXVlbmNlKDApOworICAgICAgICByb3V0ZXJzW2ldLlNldExpbmtGcmFtZUNvdW50ZXIoMCk7CisgICAgICAgIHJvdXRlcnNbaV0uU2V0TWxlRnJhbWVDb3VudGVyKDApOworICAgIH0KKworICAgIC8vIHJlc2V0IGNoaWxkIGZyYW1lIGNvdW50ZXJzCisgICAgY2hpbGRyZW4gPSBHZXROZXRpZigpLkdldE1sZSgpLkdldENoaWxkcmVuKCZudW0pOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbnVtOyBpKyspCisgICAgeworICAgICAgICBjaGlsZHJlbltpXS5TZXRLZXlTZXF1ZW5jZSgwKTsKKyAgICAgICAgY2hpbGRyZW5baV0uU2V0TGlua0ZyYW1lQ291bnRlcigwKTsKKyAgICAgICAgY2hpbGRyZW5baV0uU2V0TWxlRnJhbWVDb3VudGVyKDApOworICAgIH0KKworICAgIEdldE5ldGlmKCkuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfS0VZX1NFUVVFTkNFX0NPVU5URVIpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBLZXlNYW5hZ2VyOjpDb21wdXRlS2V5KHVpbnQzMl90IGFLZXlTZXF1ZW5jZSwgdWludDhfdCAqYUtleSkKK3sKKyAgICBDcnlwdG86OkhtYWNTaGEyNTYgaG1hYzsKKyAgICB1aW50OF90IGtleVNlcXVlbmNlQnl0ZXNbNF07CisKKyAgICBobWFjLlN0YXJ0KG1NYXN0ZXJLZXkubTgsIHNpemVvZihtTWFzdGVyS2V5Lm04KSk7CisKKyAgICBrZXlTZXF1ZW5jZUJ5dGVzWzBdID0gKGFLZXlTZXF1ZW5jZSA+PiAyNCkgJiAweGZmOworICAgIGtleVNlcXVlbmNlQnl0ZXNbMV0gPSAoYUtleVNlcXVlbmNlID4+IDE2KSAmIDB4ZmY7CisgICAga2V5U2VxdWVuY2VCeXRlc1syXSA9IChhS2V5U2VxdWVuY2UgPj4gOCkgJiAweGZmOworICAgIGtleVNlcXVlbmNlQnl0ZXNbM10gPSBhS2V5U2VxdWVuY2UgJiAweGZmOworICAgIGhtYWMuVXBkYXRlKGtleVNlcXVlbmNlQnl0ZXMsIHNpemVvZihrZXlTZXF1ZW5jZUJ5dGVzKSk7CisgICAgaG1hYy5VcGRhdGUoa1RocmVhZFN0cmluZywgc2l6ZW9mKGtUaHJlYWRTdHJpbmcpKTsKKworICAgIGhtYWMuRmluaXNoKGFLZXkpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgS2V5TWFuYWdlcjo6U2V0Q3VycmVudEtleVNlcXVlbmNlKHVpbnQzMl90IGFLZXlTZXF1ZW5jZSkKK3sKKyAgICBpZiAoYUtleVNlcXVlbmNlID09IG1LZXlTZXF1ZW5jZSkKKyAgICB7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiB0aGUgZ3VhcmQgdGltZXIgaGFzIGV4cGlyZWQgaWYga2V5IHJvdGF0aW9uIGlzIHJlcXVlc3RlZC4KKyAgICBpZiAoKGFLZXlTZXF1ZW5jZSA9PSAobUtleVNlcXVlbmNlICsgMSkpICYmCisgICAgICAgIChtS2V5U3dpdGNoR3VhcmRUaW1lICE9IDApICYmCisgICAgICAgIG1LZXlSb3RhdGlvblRpbWVyLklzUnVubmluZygpICYmCisgICAgICAgIG1LZXlTd2l0Y2hHdWFyZEVuYWJsZWQpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQobUhvdXJzU2luY2VLZXlSb3RhdGlvbiA8IG1LZXlTd2l0Y2hHdWFyZFRpbWUpOworICAgIH0KKworICAgIG1LZXlTZXF1ZW5jZSA9IGFLZXlTZXF1ZW5jZTsKKyAgICBDb21wdXRlS2V5KG1LZXlTZXF1ZW5jZSwgbUtleSk7CisKKyAgICBtTWFjRnJhbWVDb3VudGVyID0gMDsKKyAgICBtTWxlRnJhbWVDb3VudGVyID0gMDsKKworICAgIGlmIChtS2V5Um90YXRpb25UaW1lci5Jc1J1bm5pbmcoKSkKKyAgICB7CisgICAgICAgIG1LZXlTd2l0Y2hHdWFyZEVuYWJsZWQgPSB0cnVlOworICAgICAgICBTdGFydEtleVJvdGF0aW9uVGltZXIoKTsKKyAgICB9CisKKyAgICBHZXROZXRpZigpLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX0tFWV9TRVFVRU5DRV9DT1VOVEVSKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK2NvbnN0IHVpbnQ4X3QgKktleU1hbmFnZXI6OkdldFRlbXBvcmFyeU1hY0tleSh1aW50MzJfdCBhS2V5U2VxdWVuY2UpCit7CisgICAgQ29tcHV0ZUtleShhS2V5U2VxdWVuY2UsIG1UZW1wb3JhcnlLZXkpOworICAgIHJldHVybiBtVGVtcG9yYXJ5S2V5ICsga01hY0tleU9mZnNldDsKK30KKworY29uc3QgdWludDhfdCAqS2V5TWFuYWdlcjo6R2V0VGVtcG9yYXJ5TWxlS2V5KHVpbnQzMl90IGFLZXlTZXF1ZW5jZSkKK3sKKyAgICBDb21wdXRlS2V5KGFLZXlTZXF1ZW5jZSwgbVRlbXBvcmFyeUtleSk7CisgICAgcmV0dXJuIG1UZW1wb3JhcnlLZXk7Cit9CisKK3ZvaWQgS2V5TWFuYWdlcjo6SW5jcmVtZW50TWFjRnJhbWVDb3VudGVyKHZvaWQpCit7CisgICAgbU1hY0ZyYW1lQ291bnRlcisrOworCisgICAgaWYgKG1NYWNGcmFtZUNvdW50ZXIgPj0gbVN0b3JlZE1hY0ZyYW1lQ291bnRlcikKKyAgICB7CisgICAgICAgIEdldE5ldGlmKCkuR2V0TWxlKCkuU3RvcmUoKTsKKyAgICB9Cit9CisKK3ZvaWQgS2V5TWFuYWdlcjo6SW5jcmVtZW50TWxlRnJhbWVDb3VudGVyKHZvaWQpCit7CisgICAgbU1sZUZyYW1lQ291bnRlcisrOworCisgICAgaWYgKG1NbGVGcmFtZUNvdW50ZXIgPj0gbVN0b3JlZE1sZUZyYW1lQ291bnRlcikKKyAgICB7CisgICAgICAgIEdldE5ldGlmKCkuR2V0TWxlKCkuU3RvcmUoKTsKKyAgICB9Cit9CisKK3ZvaWQgS2V5TWFuYWdlcjo6U2V0S2VrKGNvbnN0IHVpbnQ4X3QgKmFLZWspCit7CisgICAgbWVtY3B5KG1LZWssIGFLZWssIHNpemVvZihtS2VrKSk7CisgICAgbUtla0ZyYW1lQ291bnRlciA9IDA7Cit9CisKK290RXJyb3IgS2V5TWFuYWdlcjo6U2V0S2V5Um90YXRpb24odWludDMyX3QgYUtleVJvdGF0aW9uKQoreworICAgIG90RXJyb3IgcmVzdWx0ID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhS2V5Um90YXRpb24gPj0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtNaW5LZXlSb3RhdGlvblRpbWUpLCByZXN1bHQgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgbUtleVJvdGF0aW9uVGltZSA9IGFLZXlSb3RhdGlvbjsKKworZXhpdDoKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEtleU1hbmFnZXI6OlN0YXJ0S2V5Um90YXRpb25UaW1lcih2b2lkKQoreworICAgIG1Ib3Vyc1NpbmNlS2V5Um90YXRpb24gPSAwOworICAgIG1LZXlSb3RhdGlvblRpbWVyLlN0YXJ0KGtPbmVIb3VySW50ZXJ2YWxJbk1zZWMpOworfQorCit2b2lkIEtleU1hbmFnZXI6OkhhbmRsZUtleVJvdGF0aW9uVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZUtleVJvdGF0aW9uVGltZXIoKTsKK30KKwordm9pZCBLZXlNYW5hZ2VyOjpIYW5kbGVLZXlSb3RhdGlvblRpbWVyKHZvaWQpCit7CisgICAgbUhvdXJzU2luY2VLZXlSb3RhdGlvbisrOworCisgICAgLy8gT3JkZXIgb2Ygb3BlcmF0aW9ucyBiZWxvdyBpcyBpbXBvcnRhbnQuIFdlIHNob3VsZCByZXN0YXJ0IHRoZSB0aW1lciAoZnJvbQorICAgIC8vIGxhc3QgZmlyZSB0aW1lIGZvciBvbmUgaG91ciBpbnRlcnZhbCkgYmVmb3JlIHBvdGVudGlhbGx5IGNhbGxpbmcKKyAgICAvLyBgU2V0Q3VycmVudEtleVNlcXVlbmNlKClgLiBgU2V0Q3VycmVudEtleVNlcXVlbmNlKClgIHVzZXMgdGhlIGZhY3QgdGhhdAorICAgIC8vIHRpbWVyIGlzIHJ1bm5pbmcgdG8gZGVjaWRlIHRvIGNoZWNrIGZvciB0aGUgZ3VhcmQgdGltZSBhbmQgdG8gcmVzZXQgdGhlCisgICAgLy8gcm90YXRpb24gdGltZXIgKGFuZCB0aGUgYG1Ib3Vyc1NpbmNlS2V5Um90YXRpb25gKSBpZiBpdCB1cGRhdGVzIHRoZSBrZXkKKyAgICAvLyBzZXF1ZW5jZS4KKworICAgIG1LZXlSb3RhdGlvblRpbWVyLlN0YXJ0QXQobUtleVJvdGF0aW9uVGltZXIuR2V0RmlyZVRpbWUoKSwga09uZUhvdXJJbnRlcnZhbEluTXNlYyk7CisKKyAgICBpZiAobUhvdXJzU2luY2VLZXlSb3RhdGlvbiA+PSBtS2V5Um90YXRpb25UaW1lKQorICAgIHsKKyAgICAgICAgU2V0Q3VycmVudEtleVNlcXVlbmNlKG1LZXlTZXF1ZW5jZSArIDEpOworICAgIH0KK30KKworS2V5TWFuYWdlciAmS2V5TWFuYWdlcjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgS2V5TWFuYWdlciAma2V5TWFuYWdlciA9ICpzdGF0aWNfY2FzdDxLZXlNYW5hZ2VyICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIEtleU1hbmFnZXIgJmtleU1hbmFnZXIgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0S2V5TWFuYWdlcigpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4ga2V5TWFuYWdlcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQva2V5X21hbmFnZXIuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL2tleV9tYW5hZ2VyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDAzZmVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL2tleV9tYW5hZ2VyLmhwcApAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIFRocmVhZCBzZWN1cml0eSBtYXRlcmlhbCBnZW5lcmF0aW9uLgorICovCisKKyNpZm5kZWYgS0VZX01BTkFHRVJfSFBQXworI2RlZmluZSBLRVlfTUFOQUdFUl9IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL2htYWNfc2hhMjU2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXNlY3VyaXR5CisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBUaHJlYWQgc2VjdXJpdHkgbWF0ZXJpYWwgZ2VuZXJhdGlvbi4KKyAqCisgKiBAeworICovCisKK2NsYXNzIEtleU1hbmFnZXI6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4S2V5TGVuZ3RoID0gMTYsCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGV4cGxpY2l0IEtleU1hbmFnZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgS2V5TWFuYWdlciByb3RhdGlvbiB0aW1lciBhbmQgc2V0cyBndWFyZCB0aW1lciB0byBpbml0aWFsIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTdGFydCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIEtleU1hbmFnZXIgdGltZXJzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIE1hc3RlciBLZXkKKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgTWFzdGVyIEtleS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IG90TWFzdGVyS2V5ICZHZXRNYXN0ZXJLZXkodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUaHJlYWQgTWFzdGVyIEtleS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXkgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgTWFzdGVyIEtleS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBUaHJlYWQgTWFzdGVyIEtleS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIEBwIGFLZXlMZW5ndGggdmFsdWUgd2FzIGludmFsaWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldE1hc3RlcktleShjb25zdCBvdE1hc3RlcktleSAmYUtleSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgUFNLYy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgUFNLYy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldFBTS2Modm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQU0tjLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBTS2MgICAgQSBwb2ludGVyIHRvIHRoZSBQU0tjLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQU0tjKGNvbnN0IHVpbnQ4X3QgKmFQU0tjKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGN1cnJlbnQga2V5IHNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQga2V5IHNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0Q3VycmVudEtleVNlcXVlbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1LZXlTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY3VycmVudCBrZXkgc2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhS2V5U2VxdWVuY2UgIFRoZSBrZXkgc2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEN1cnJlbnRLZXlTZXF1ZW5jZSh1aW50MzJfdCBhS2V5U2VxdWVuY2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgTUFDIGtleS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgY3VycmVudCBNQUMga2V5LgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0Q3VycmVudE1hY0tleSh2b2lkKSBjb25zdCB7IHJldHVybiBtS2V5ICsga01hY0tleU9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgTUxFIGtleS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgY3VycmVudCBNTEUga2V5LgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0Q3VycmVudE1sZUtleSh2b2lkKSBjb25zdCB7IHJldHVybiBtS2V5OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIHRlbXBvcmFyeSBNQUMga2V5IGNvbXB1dGVkIGZyb20gdGhlIGdpdmVuIGtleSBzZXF1ZW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXlTZXF1ZW5jZSAgVGhlIGtleSBzZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdGVtcG9yYXJ5IE1BQyBrZXkuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRUZW1wb3JhcnlNYWNLZXkodWludDMyX3QgYUtleVNlcXVlbmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgdGVtcG9yYXJ5IE1MRSBrZXkgY29tcHV0ZWQgZnJvbSB0aGUgZ2l2ZW4ga2V5IHNlcXVlbmNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUtleVNlcXVlbmNlICBUaGUga2V5IHNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSB0ZW1wb3JhcnkgTUxFIGtleS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldFRlbXBvcmFyeU1sZUtleSh1aW50MzJfdCBhS2V5U2VxdWVuY2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBNQUMgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IE1BQyBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0TWFjRnJhbWVDb3VudGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NYWNGcmFtZUNvdW50ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGN1cnJlbnQgTUFDIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWFjRnJhbWVDb3VudGVyICBUaGUgTUFDIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1hY0ZyYW1lQ291bnRlcih1aW50MzJfdCBhTWFjRnJhbWVDb3VudGVyKSB7IG1NYWNGcmFtZUNvdW50ZXIgPSBhTWFjRnJhbWVDb3VudGVyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNQUMgRnJhbWUgQ291bnRlciB2YWx1ZSB3aGljaCBpcyBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTdG9yZWRNYWNGcmFtZUNvdW50ZXIgIFRoZSBzdG9yZWQgTUFDIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN0b3JlZE1hY0ZyYW1lQ291bnRlcih1aW50MzJfdCBhU3RvcmVkTWFjRnJhbWVDb3VudGVyKSB7IG1TdG9yZWRNYWNGcmFtZUNvdW50ZXIgPSBhU3RvcmVkTWFjRnJhbWVDb3VudGVyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmNyZW1lbnRzIHRoZSBjdXJyZW50IE1BQyBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbmNyZW1lbnRNYWNGcmFtZUNvdW50ZXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IE1MRSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgTUxFIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRNbGVGcmFtZUNvdW50ZXIodm9pZCkgY29uc3QgeyByZXR1cm4gbU1sZUZyYW1lQ291bnRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY3VycmVudCBNTEUgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNbGVGcmFtZUNvdW50ZXIgIFRoZSBNTEUgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWxlRnJhbWVDb3VudGVyKHVpbnQzMl90IGFNbGVGcmFtZUNvdW50ZXIpIHsgbU1sZUZyYW1lQ291bnRlciA9IGFNbGVGcmFtZUNvdW50ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1MRSBGcmFtZSBDb3VudGVyIHZhbHVlIHdoaWNoIGlzIHN0b3JlZCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVN0b3JlZE1sZUZyYW1lQ291bnRlciAgVGhlIHN0b3JlZCBNTEUgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U3RvcmVkTWxlRnJhbWVDb3VudGVyKHVpbnQzMl90IGFTdG9yZWRNbGVGcmFtZUNvdW50ZXIpIHsgbVN0b3JlZE1sZUZyYW1lQ291bnRlciA9IGFTdG9yZWRNbGVGcmFtZUNvdW50ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluY3JlbWVudHMgdGhlIGN1cnJlbnQgTUxFIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluY3JlbWVudE1sZUZyYW1lQ291bnRlcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEtFSy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgS0VLLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0S2VrKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1LZWs7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEtFSy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZWsgIEEgcG9pbnRlciB0byB0aGUgS0VLLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRLZWsoY29uc3QgdWludDhfdCAqYUtlayk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IEtFSyBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgS0VLIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRLZWtGcmFtZUNvdW50ZXIodm9pZCkgY29uc3QgeyByZXR1cm4gbUtla0ZyYW1lQ291bnRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5jcmVtZW50cyB0aGUgY3VycmVudCBLRUsgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5jcmVtZW50S2VrRnJhbWVDb3VudGVyKHZvaWQpIHsgbUtla0ZyYW1lQ291bnRlcisrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBLZXlSb3RhdGlvbiB0aW1lLgorICAgICAqCisgICAgICogVGhlIEtleVJvdGF0aW9uIHRpbWUgaXMgdGhlIHRpbWUgaW50ZXJ2YWwgYWZ0ZXIgd2l0Y2ggc2VjdXJpdHkga2V5IHdpbGwgYmUgYXV0b21hdGljYWxseSByb3RhdGVkLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEtleVJvdGF0aW9uIHZhbHVlIGluIGhvdXJzLgorICAgICAqLworICAgIHVpbnQzMl90IEdldEtleVJvdGF0aW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1LZXlSb3RhdGlvblRpbWU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEtleVJvdGF0aW9uIHRpbWUuCisgICAgICoKKyAgICAgKiBUaGUgS2V5Um90YXRpb24gdGltZSBpcyB0aGUgdGltZSBpbnRlcnZhbCBhZnRlciB3aXRjaCBzZWN1cml0eSBrZXkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJvdGF0ZWQuCisgICAgICogSXRzIHZhbHVlIHNoYWxsIGJlIGxhcmdlciB0aGFuIG9yIGVxdWFsIHRvIGtNaW5LZXlSb3RhdGlvblRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhS2V5Um90YXRpb24gIFRoZSBLZXlSb3RhdGlvbiB2YWx1ZSBpbiBob3Vycy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgS2V5Um90YXRpb24gdGltZSB1cGRhdGVkLgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUtleVJvdGF0aW9uIGlzIG91dCBvZiByYW5nZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0S2V5Um90YXRpb24odWludDMyX3QgYUtleVJvdGF0aW9uKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEtleVN3aXRjaEd1YXJkVGltZS4KKyAgICAgKgorICAgICAqIFRoZSBLZXlTd2l0Y2hHdWFyZFRpbWUgaXMgdGhlIHRpbWUgaW50ZXJ2YWwgZHVyaW5nIHdoaWNoIGtleSByb3RhdGlvbiBwcm9jZWR1cmUgaXMgcHJldmVudGVkLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEtleVN3aXRjaEd1YXJkVGltZSB2YWx1ZSBpbiBob3Vycy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldEtleVN3aXRjaEd1YXJkVGltZSh2b2lkKSBjb25zdCB7IHJldHVybiBtS2V5U3dpdGNoR3VhcmRUaW1lOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBLZXlTd2l0Y2hHdWFyZFRpbWUuCisgICAgICoKKyAgICAgKiBUaGUgS2V5U3dpdGNoR3VhcmRUaW1lIGlzIHRoZSB0aW1lIGludGVydmFsIGR1cmluZyB3aGljaCBrZXkgcm90YXRpb24gcHJvY2VkdXJlIGlzIHByZXZlbnRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXlTd2l0Y2hHdWFyZFRpbWUgIFRoZSBLZXlTd2l0Y2hHdWFyZFRpbWUgdmFsdWUgaW4gaG91cnMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEtleVN3aXRjaEd1YXJkVGltZSh1aW50MzJfdCBhS2V5U3dpdGNoR3VhcmRUaW1lKSB7IG1LZXlTd2l0Y2hHdWFyZFRpbWUgPSBhS2V5U3dpdGNoR3VhcmRUaW1lOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBTZWN1cml0eSBQb2xpY3kgRmxhZ3MuCisgICAgICoKKyAgICAgKiBUaGUgU2VjdXJpdHkgUG9saWN5IEZsYWdzIHNwZWNpZmllcyBuZXR3b3JrIGFkbWluaXN0cmF0b3IgcHJlZmVyZW5jZXMgZm9yIHdoaWNoCisgICAgICogc2VjdXJpdHktcmVsYXRlZCBvcGVyYXRpb25zIGFyZSBhbGxvd2VkIG9yIGRpc2FsbG93ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgU2VjdXJpdHlQb2xpY3kgRmxhZ3MuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFNlY3VyaXR5UG9saWN5RmxhZ3Modm9pZCkgY29uc3QgeyByZXR1cm4gbVNlY3VyaXR5UG9saWN5RmxhZ3M7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFNlY3VyaXR5IFBvbGljeSBGbGFncy4KKyAgICAgKgorICAgICAqIFRoZSBTZWN1cml0eSBQb2xpY3kgRmxhZ3Mgc3BlY2lmaWVzIG5ldHdvcmsgYWRtaW5pc3RyYXRvciBwcmVmZXJlbmNlcyBmb3Igd2hpY2gKKyAgICAgKiBzZWN1cml0eS1yZWxhdGVkIG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgb3IgZGlzYWxsb3dlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZWN1cml0eVBvbGljeUZsYWdzICBUaGUgU2VjdXJpdHkgUG9saWN5IEZsYWdzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWN1cml0eVBvbGljeUZsYWdzKHVpbnQ4X3QgYVNlY3VyaXR5UG9saWN5RmxhZ3MpIHsgbVNlY3VyaXR5UG9saWN5RmxhZ3MgPSBhU2VjdXJpdHlQb2xpY3lGbGFnczsgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNaW5LZXlSb3RhdGlvblRpbWUgPSAxLAorICAgICAgICBrRGVmYXVsdEtleVJvdGF0aW9uVGltZSA9IDY3MiwKKyAgICAgICAga0RlZmF1bHRLZXlTd2l0Y2hHdWFyZFRpbWUgPSA2MjQsCisgICAgICAgIGtNYWNLZXlPZmZzZXQgPSAxNiwKKyAgICAgICAga09uZUhvdXJJbnRlcnZhbEluTXNlYyA9IDM2MDB1ICogMTAwMHUsCisgICAgfTsKKworICAgIG90RXJyb3IgQ29tcHV0ZUtleSh1aW50MzJfdCBhS2V5U2VxdWVuY2UsIHVpbnQ4X3QgKmFLZXkpOworCisgICAgdm9pZCBTdGFydEtleVJvdGF0aW9uVGltZXIodm9pZCk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlS2V5Um90YXRpb25UaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZUtleVJvdGF0aW9uVGltZXIodm9pZCk7CisKKyAgICBzdGF0aWMgS2V5TWFuYWdlciAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgb3RNYXN0ZXJLZXkgbU1hc3RlcktleTsKKworICAgIHVpbnQzMl90IG1LZXlTZXF1ZW5jZTsKKyAgICB1aW50OF90IG1LZXlbQ3J5cHRvOjpIbWFjU2hhMjU2OjprSGFzaFNpemVdOworCisgICAgdWludDhfdCBtVGVtcG9yYXJ5S2V5W0NyeXB0bzo6SG1hY1NoYTI1Njo6a0hhc2hTaXplXTsKKworICAgIHVpbnQzMl90IG1NYWNGcmFtZUNvdW50ZXI7CisgICAgdWludDMyX3QgbU1sZUZyYW1lQ291bnRlcjsKKyAgICB1aW50MzJfdCBtU3RvcmVkTWFjRnJhbWVDb3VudGVyOworICAgIHVpbnQzMl90IG1TdG9yZWRNbGVGcmFtZUNvdW50ZXI7CisKKyAgICB1aW50MzJfdCBtSG91cnNTaW5jZUtleVJvdGF0aW9uOworICAgIHVpbnQzMl90IG1LZXlSb3RhdGlvblRpbWU7CisgICAgdWludDMyX3QgbUtleVN3aXRjaEd1YXJkVGltZTsKKyAgICBib29sICAgICBtS2V5U3dpdGNoR3VhcmRFbmFibGVkOworICAgIFRpbWVyICAgIG1LZXlSb3RhdGlvblRpbWVyOworCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB1aW50OF90IG1QU0tjW2tNYXhLZXlMZW5ndGhdOworI2VuZGlmCisgICAgdWludDhfdCBtS2VrW2tNYXhLZXlMZW5ndGhdOworICAgIHVpbnQzMl90IG1LZWtGcmFtZUNvdW50ZXI7CisKKyAgICB1aW50OF90IG1TZWN1cml0eVBvbGljeUZsYWdzOworfTsKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEtFWV9NQU5BR0VSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9saW5rX3F1YWxpdHkuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL2xpbmtfcXVhbGl0eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjZGJjNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9saW5rX3F1YWxpdHkuY3BwCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGxpbmsgcXVhbGl0eSBpbmZvcm1hdGlvbiBwcm9jZXNzaW5nIGFuZCBzdG9yYWdlLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibGlua19xdWFsaXR5LmhwcCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworZW51bQoreworICAgIGtEZWZhdWx0Tm9pc2VGbG9vciA9IC0xMDAsIC8vIERlZmF1bHQgbm9pc2UgZmxvb3IgdXNlZCBpZiBubyBhdmVyYWdlIHZhbHVlIGlzIGF2YWlsYWJsZS4KK307CisKKy8vIFRoaXMgYXJyYXkgZ2l2ZXMgdGhlIGRlY2ltYWwgcG9pbnQgZGlnaXRzIHJlcHJlc2VudGluZyAwLzgsIDEvOCwgLi4uLCA3LzggKGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlICcuJykuCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qga0xpbmtRdWFsaXR5RGVjaW1hbERpZ2l0c1N0cmluZ1s4XSA9Cit7CisgICAgLy8gMC84LCAxLzgsICAgMi84LCAgIDMvOCwgICA0LzgsICAgNS84LCAgIDYvOCwgICA3LzgKKyAgICAiMDAwIiwgIjEyNSIsICIyNTAiLCAiMzc1IiwgIjUwMCIsICI2MjUiLCAiNzUwIiwgIjg3NSIKK307CisKK2NvbnN0IGNoYXIgTGlua1F1YWxpdHlJbmZvOjprVW5rbm93blJzc1N0cmluZ1tdID0gIlVua25vd24gUlNTIjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xpbmtRdWFsaXR5SW5mbzo6TGlua1F1YWxpdHlJbmZvKHZvaWQpCit7CisgICAgQ2xlYXIoKTsKK30KKwordm9pZCBMaW5rUXVhbGl0eUluZm86OkNsZWFyKHZvaWQpCit7CisgICAgbVJzc0F2ZXJhZ2UgID0gMDsKKyAgICBtQ291bnQgICAgICAgPSAwOworICAgIG1MaW5rUXVhbGl0eSA9IDA7CisgICAgbUxhc3RSc3MgICAgID0gMDsKK30KKwordm9pZCBMaW5rUXVhbGl0eUluZm86OkFkZFJzcyhpbnQ4X3QgYU5vaXNlRmxvb3IsIGludDhfdCBhUnNzKQoreworICAgIHVpbnQxNl90ICAgIG5ld1ZhbHVlOworICAgIHVpbnQxNl90ICAgIG9sZEF2ZXJhZ2U7CisKKyAgICBWZXJpZnlPckV4aXQoYVJzcyAhPSBPVF9SQURJT19SU1NJX0lOVkFMSUQpOworCisgICAgbUxhc3RSc3MgPSBhUnNzOworCisgICAgLy8gUmVzdHJpY3QvQ2FwIHRoZSBSU1MgdmFsdWUgdG8gdGhlIGNsb3NlZCByYW5nZSBbMCwgLTEyOF0gc28gdGhlIHZhbHVlIGNhbiBmaXQgaW4gOCBiaXRzLgorCisgICAgaWYgKGFSc3MgPiAwKQorICAgIHsKKyAgICAgICAgYVJzcyA9IDA7CisgICAgfQorCisgICAgLy8gTXVsdGlwbHkgdGhlIHRoZSBSU1MgdmFsdWUgYnkgYSBwcmVjaXNpb24gbXVsdGlwbGUgKGN1cnJlbnRseSAtOCkuCisKKyAgICBuZXdWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigtYVJzcyk7CisgICAgbmV3VmFsdWUgPDw9IGtSc3NBdmVyYWdlUHJlY2lzaW9uTXVsdGlwbGVCaXRTaGlmdDsKKworICAgIG9sZEF2ZXJhZ2UgPSBtUnNzQXZlcmFnZTsKKworICAgIGlmIChtQ291bnQgPj0ga1Jzc0NvdW50Rm9yV2VpZ2h0Q29lZmZpY2llbnRPbmVFaWdodGgpCisgICAgeworICAgICAgICAvLyBOZXcgYXZlcmFnZSA9IG9sZCBhdmVyYWdlICogNy84ICsgbmV3IHZhbHVlICogMS84CisgICAgICAgIG1Sc3NBdmVyYWdlID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KCgob2xkQXZlcmFnZSA8PCAzKSAtIG9sZEF2ZXJhZ2UgKyBuZXdWYWx1ZSkgPj4gMyk7CisgICAgfQorICAgIGVsc2UgaWYgKG1Db3VudCA+PSBrUnNzQ291bnRGb3JXZWlnaHRDb2VmZmljaWVudE9uZUZvdXJ0aCkKKyAgICB7CisgICAgICAgIC8vIE5ldyBhdmVyYWdlID0gb2xkIGF2ZXJhZ2UgKiAzLzQgKyBuZXcgdmFsdWUgKiAxLzQKKyAgICAgICAgbVJzc0F2ZXJhZ2UgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKChvbGRBdmVyYWdlIDw8IDIpIC0gb2xkQXZlcmFnZSArIG5ld1ZhbHVlKSA+PiAyKTsKKyAgICB9CisgICAgZWxzZSBpZiAobUNvdW50ID49IGtSc3NDb3VudEZvcldlaWdodENvZWZmaWNpZW50T25lSGFsZikKKyAgICB7CisgICAgICAgIC8vIE5ldyBhdmVyYWdlID0gb2xkIGF2ZXJhZ2UgKiAxLzIgKyBuZXcgdmFsdWUgKiAxLzIKKyAgICAgICAgbVJzc0F2ZXJhZ2UgPSAob2xkQXZlcmFnZSArIG5ld1ZhbHVlKSA+PiAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtUnNzQXZlcmFnZSA9IG5ld1ZhbHVlOworICAgIH0KKworICAgIGlmIChtQ291bnQgPCBrUnNzQ291bnRNYXgpCisgICAgeworICAgICAgICBtQ291bnQrKzsKKyAgICB9CisKKyAgICBVcGRhdGVMaW5rUXVhbGl0eShhTm9pc2VGbG9vcik7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitpbnQ4X3QgTGlua1F1YWxpdHlJbmZvOjpHZXRBdmVyYWdlUnNzKHZvaWQpIGNvbnN0Cit7CisgICAgaW50OF90IGF2ZXJhZ2UgPSBPVF9SQURJT19SU1NJX0lOVkFMSUQ7CisKKyAgICBpZiAobUNvdW50ICE9IDApCisgICAgeworICAgICAgICBhdmVyYWdlID0gLXN0YXRpY19jYXN0PGludDhfdD4obVJzc0F2ZXJhZ2UgPj4ga1Jzc0F2ZXJhZ2VQcmVjaXNpb25NdWx0aXBsZUJpdFNoaWZ0KTsKKworICAgICAgICAvLyBDaGVjayBmb3Igcm91bmQgdXAgKGUuZy4gYXZlcmFnZSBvZiAtNzEuNSAtLT4gLTcyKQorCisgICAgICAgIGlmICgobVJzc0F2ZXJhZ2UgJiBrUnNzQXZlcmFnZVByZWNpc2lvbk11bHRpcGxlQml0TWFzaykgPj0gKGtSc3NBdmVyYWdlUHJlY2lzaW9uTXVsdGlwbGUgPj4gMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF2ZXJhZ2UtLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhdmVyYWdlOworfQorCit1aW50MTZfdCBMaW5rUXVhbGl0eUluZm86OkdldEF2ZXJhZ2VSc3NBc0VuY29kZWRXb3JkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1Sc3NBdmVyYWdlOworfQorCitvdEVycm9yIExpbmtRdWFsaXR5SW5mbzo6R2V0QXZlcmFnZVJzc0FzU3RyaW5nKGNoYXIgKmFDaGFyQnVmZmVyLCBzaXplX3QgYUJ1ZmZlckxlbikgY29uc3QKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBpbnQgY2hhcnNXcml0dGVuID0gMDsKKworICAgIGlmIChtQ291bnQgPT0gMCkKKyAgICB7CisgICAgICAgIGNoYXJzV3JpdHRlbiA9IHN0YXRpY19jYXN0PGludD4oc3RybGNweShhQ2hhckJ1ZmZlciwga1Vua25vd25Sc3NTdHJpbmcsIGFCdWZmZXJMZW4pKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2hhcnNXcml0dGVuID0gc25wcmludGYoYUNoYXJCdWZmZXIsIGFCdWZmZXJMZW4sICIlZC4lcyBkQm0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKG1Sc3NBdmVyYWdlID4+IGtSc3NBdmVyYWdlUHJlY2lzaW9uTXVsdGlwbGVCaXRTaGlmdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMaW5rUXVhbGl0eURlY2ltYWxEaWdpdHNTdHJpbmdbbVJzc0F2ZXJhZ2UgJiBrUnNzQXZlcmFnZVByZWNpc2lvbk11bHRpcGxlQml0TWFza10pOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChjaGFyc1dyaXR0ZW4gPj0gMCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIFZlcmlmeU9yRXhpdChjaGFyc1dyaXR0ZW4gPCBzdGF0aWNfY2FzdDxpbnQ+KGFCdWZmZXJMZW4pLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDhfdCBMaW5rUXVhbGl0eUluZm86OkdldExpbmtNYXJnaW4oaW50OF90IGFOb2lzZUZsb29yKSBjb25zdAoreworICAgIHJldHVybiBDb252ZXJ0UnNzVG9MaW5rTWFyZ2luKGFOb2lzZUZsb29yLCBHZXRBdmVyYWdlUnNzKCkpOworfQorCit1aW50OF90IExpbmtRdWFsaXR5SW5mbzo6R2V0TGlua1F1YWxpdHkoaW50OF90IGFOb2lzZUZsb29yKQoreworICAgIFVwZGF0ZUxpbmtRdWFsaXR5KGFOb2lzZUZsb29yKTsKKworICAgIHJldHVybiBtTGlua1F1YWxpdHk7Cit9CisKK2ludDhfdCBMaW5rUXVhbGl0eUluZm86OkdldExhc3RSc3Modm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUxhc3RSc3M7Cit9CisKK3ZvaWQgTGlua1F1YWxpdHlJbmZvOjpVcGRhdGVMaW5rUXVhbGl0eShpbnQ4X3QgYU5vaXNlRmxvb3IpCit7CisgICAgaWYgKG1Db3VudCAhPSAwKQorICAgIHsKKyAgICAgICAgbUxpbmtRdWFsaXR5ID0gQ2FsY3VsYXRlTGlua1F1YWxpdHkoR2V0TGlua01hcmdpbihhTm9pc2VGbG9vciksIG1MaW5rUXVhbGl0eSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1MaW5rUXVhbGl0eSA9IENhbGN1bGF0ZUxpbmtRdWFsaXR5KEdldExpbmtNYXJnaW4oYU5vaXNlRmxvb3IpLCBrTm9MYXN0TGlua1F1YWxpdHlWYWx1ZSk7CisgICAgfQorfQorCit1aW50OF90IExpbmtRdWFsaXR5SW5mbzo6Q29udmVydFJzc1RvTGlua01hcmdpbihpbnQ4X3QgYU5vaXNlRmxvb3IsIGludDhfdCBhUnNzKQoreworICAgIGludDhfdCBsaW5rTWFyZ2luID0gYVJzcyAtIGFOb2lzZUZsb29yOworCisgICAgaWYgKGxpbmtNYXJnaW4gPCAwIHx8IGFSc3MgPT0gT1RfUkFESU9fUlNTSV9JTlZBTElEKQorICAgIHsKKyAgICAgICAgbGlua01hcmdpbiA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpbmtNYXJnaW4pOworfQorCit1aW50OF90IExpbmtRdWFsaXR5SW5mbzo6Q29udmVydExpbmtNYXJnaW5Ub0xpbmtRdWFsaXR5KHVpbnQ4X3QgYUxpbmtNYXJnaW4pCit7CisgICAgcmV0dXJuIENhbGN1bGF0ZUxpbmtRdWFsaXR5KGFMaW5rTWFyZ2luLCBrTm9MYXN0TGlua1F1YWxpdHlWYWx1ZSk7Cit9CisKK3VpbnQ4X3QgTGlua1F1YWxpdHlJbmZvOjpDb252ZXJ0UnNzVG9MaW5rUXVhbGl0eShpbnQ4X3QgYU5vaXNlRmxvb3IsIGludDhfdCBhUnNzKQoreworICAgIHJldHVybiBDb252ZXJ0TGlua01hcmdpblRvTGlua1F1YWxpdHkoQ29udmVydFJzc1RvTGlua01hcmdpbihhTm9pc2VGbG9vciwgYVJzcykpOworfQorCit1aW50OF90IExpbmtRdWFsaXR5SW5mbzo6Q2FsY3VsYXRlTGlua1F1YWxpdHkodWludDhfdCBhTGlua01hcmdpbiwgdWludDhfdCBhTGFzdExpbmtRdWFsaXR5KQoreworICAgIHVpbnQ4X3QgdGhyZXNob2xkMSwgdGhyZXNob2xkMiwgdGhyZXNob2xkMzsKKyAgICB1aW50OF90IGxpbmtRdWFsaXR5ID0gMDsKKworICAgIHRocmVzaG9sZDEgPSBrTGlua01hcmdpblRocmVzaG9sZEZvckxpbmtRdWFsaXR5MTsKKyAgICB0aHJlc2hvbGQyID0ga0xpbmtNYXJnaW5UaHJlc2hvbGRGb3JMaW5rUXVhbGl0eTI7CisgICAgdGhyZXNob2xkMyA9IGtMaW5rTWFyZ2luVGhyZXNob2xkRm9yTGlua1F1YWxpdHkzOworCisgICAgLy8gQXBwbHkgdGhlIGh5c3RlcmVzaXMgdGhyZXNob2xkIGJhc2VkIG9uIHRoZSBsYXN0IGxpbmsgcXVhbGl0eSB2YWx1ZS4KKworICAgIHN3aXRjaCAoYUxhc3RMaW5rUXVhbGl0eSkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgICB0aHJlc2hvbGQxICs9IGtMaW5rTWFyZ2luSHlzdGVyZXNpc1RocmVzaG9sZDsKKworICAgIC8vIEludGVudGlvbmFsIGZhbGwtdGhyb3VnaCB0byBuZXh0IGNhc2UuCisKKyAgICBjYXNlIDE6CisgICAgICAgIHRocmVzaG9sZDIgKz0ga0xpbmtNYXJnaW5IeXN0ZXJlc2lzVGhyZXNob2xkOworCisgICAgLy8gSW50ZW50aW9uYWwgZmFsbC10aHJvdWdoIHRvIG5leHQgY2FzZS4KKworICAgIGNhc2UgMjoKKyAgICAgICAgdGhyZXNob2xkMyArPSBrTGlua01hcmdpbkh5c3RlcmVzaXNUaHJlc2hvbGQ7CisKKyAgICAvLyBJbnRlbnRpb25hbCBmYWxsLXRocm91Z2ggdG8gbmV4dCBjYXNlLgorCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGFMaW5rTWFyZ2luID4gdGhyZXNob2xkMykKKyAgICB7CisgICAgICAgIGxpbmtRdWFsaXR5ID0gMzsKKyAgICB9CisgICAgZWxzZSBpZiAoYUxpbmtNYXJnaW4gPiB0aHJlc2hvbGQyKQorICAgIHsKKyAgICAgICAgbGlua1F1YWxpdHkgPSAyOworICAgIH0KKyAgICBlbHNlIGlmIChhTGlua01hcmdpbiA+IHRocmVzaG9sZDEpCisgICAgeworICAgICAgICBsaW5rUXVhbGl0eSA9IDE7CisgICAgfQorCisgICAgcmV0dXJuIGxpbmtRdWFsaXR5OworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9saW5rX3F1YWxpdHkuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL2xpbmtfcXVhbGl0eS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxZDBmZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9saW5rX3F1YWxpdHkuaHBwCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3Igc3RvcmluZyBhbmQgcHJvY2Vzc2luZyBsaW5rIHF1YWxpdHkgaW5mb3JtYXRpb24uCisgKi8KKworI2lmbmRlZiBMSU5LX1FVQUxJVFlfSFBQXworI2RlZmluZSBMSU5LX1FVQUxJVFlfSFBQXworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKK25hbWVzcGFjZSBvdCB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1saW5rLXF1YWxpdHkKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIFRocmVhZCBsaW5rIHF1YWxpdHkgbWV0cmljcy4KKyAqCisgKiBAeworICovCisKKy8qKgorICogVGhpcyBjbGFzcyBlbmNhcHN1bGF0ZXMvc3RvcmVzIGFsbCByZWxldmFudCBpbmZvcm1hdGlvbiBhYm91dCBxdWFsaXR5IG9mIGEgbGluaywgaW5jbHVkaW5nIGF2ZXJhZ2UgcmVjZWl2ZWQgc2lnbmFsCisgKiBzdHJlbmd0aCAoUlNTKSwgbGluayBtYXJnaW4gYW5kIGxpbmsgcXVhbGl0eSB2YWx1ZSAodmFsdWUgaW4gMC0zKS4gVGhlIGF2ZXJhZ2UgaXMgb2J0YWluZWQgdXNpbmcgYW4gYWRhcHRpdmUKKyAqIGV4cG9uZW50aWFsIG1vdmluZyBhdmVyYWdlIGZpbHRlci4KKyAqCisgICovCitjbGFzcyBMaW5rUXVhbGl0eUluZm8KK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIGFuIGluc3RhbmNlIG9mIHRoZSBMaW5rUXVhbGl0eUluZm8gY2xhc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBMaW5rUXVhbGl0eUluZm8odm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIGFsbCB0aGUgZGF0YSBpbiB0aGlzIGluc3RhbmNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBuZXcgcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIChSU1MpIHZhbHVlIHRvIHRoZSBhdmVyYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhTm9pc2VGbG9vciAgVGhlIG5vaXNlIGZsb29yIHZhbHVlIChpbiBkQm0pLgorICAgICAqIEBwYXJhbVtpbl0gYVJzcyAgICAgICAgIEEgbmV3IHJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aCB2YWx1ZSAoaW4gZEJtKSB0byBiZSBhZGRlZCB0byB0aGUgYXZlcmFnZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQWRkUnNzKGludDhfdCBhTm9pc2VGbG9vciwgaW50OF90IGFSc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBhdmVyYWdlIHNpZ25hbCBzdHJlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGF2ZXJhZ2UgdmFsdWUgb3IgQGMgT1RfUkFESU9fUlNTSV9JTlZBTElEIGlmIG5vIGF2ZXJhZ2UgaXMgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldEF2ZXJhZ2VSc3Modm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGFuIGVuY29kZWQgdmVyc2lvbiBvZiBjdXJyZW50IGF2ZXJhZ2Ugc2lnbmFsIHN0cmVuZ3RoIHZhbHVlLiBUaGUgZW5jb2RlZCB2YWx1ZSBpcyB0aGUKKyAgICAgKiBhdmVyYWdlIG11bHRpcGxpZWQgYnkgYSBwcmVjaXNpb24gZmFjdG9yIChjdXJyZW50bHkgLTgpLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgYXZlcmFnZSBtdWx0aXBsaWVkIGJ5IHByZWNpc2lvbiBmYWN0b3Igb3IgemVybyBpZiBubyBhdmVyYWdlIGlzIGF2YWlsYWJsZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldEF2ZXJhZ2VSc3NBc0VuY29kZWRXb3JkKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgdGhlIGN1cnJlbnQgYXZlcmFnZSByZWNlaXZlZCBzaWduYWwgc3RyZW5ndGggKFJTUykgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgKGUuZy4sCisgICAgICogIi04MC4zNzUgZEJtIikuIElmIHRoZSBhdmVyYWdlIGlzIHVua25vd24sICJ1bmtub3duIFJTUyIgaXMgdXNlZC9yZXR1cm5lZCBpbiB0aGUgYnVmZmVyLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gICAgYUNoYXJCdWZmZXIgICAgQSBjaGFyIGJ1ZmZlciB0byBzdG9yZSB0aGUgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gY3VycmVudCBhdmVyYWdlIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFCdWZmZXJMZW4gICAgIFRoZSBjaGFyIGJ1ZmZlciBsZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICBTdWNjZXNzZnVsbHkgZm9ybWVkIHRoZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGNoYXIgYnVmZmVyLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGF2ZXJhZ2UgdmFsdWUgY291bGQgbm90IGZpdCBpbiB0aGUgZ2l2ZW4gYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRBdmVyYWdlUnNzQXNTdHJpbmcoY2hhciAqYUNoYXJCdWZmZXIsIHNpemVfdCBhQnVmZmVyTGVuKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGxpbmsgbWFyZ2luLiBUaGUgbGluayBtYXJnaW4gaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgbGluaydzIGN1cnJlbnQgYXZlcmFnZSByZWNlaXZlZAorICAgICAqIHNpZ25hbCBzdHJlbmd0aCAoUlNTKSBhbmQgYXZlcmFnZSBub2lzZSBmbG9vci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOb2lzZUZsb29yICBUaGUgbm9pc2UgZmxvb3IgdmFsdWUgKGluIGRCbSkuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBMaW5rIG1hcmdpbiBkZXJpdmVkIGZyb20gYXZlcmFnZSByZWNlaXZlZCBzaWduYWwgc3RyZW5ndGggYW5kIGF2ZXJhZ2Ugbm9pc2UgZmxvb3IuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtNYXJnaW4oaW50OF90IGFOb2lzZUZsb29yKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgb25lLXdheSBsaW5rIHF1YWxpdHkgdmFsdWUuIFRoZSBsaW5rIHF1YWxpdHkgdmFsdWUgaXMgYSBudW1iZXIgMC0zLgorICAgICAqCisgICAgICogVGhlIGxpbmsgcXVhbGl0eSBpcyBjYWxjdWxhdGVkIGJ5IGNvbXBhcmluZyB0aGUgY3VycmVudCBsaW5rIG1hcmdpbiB3aXRoIGEgc2V0IG9mIHRocmVzaG9sZHMgKHBlciBUaHJlYWQgc3BlYykuCisgICAgICogTW9yZSBzcGVjaWZpY2FsbHksIGxpbmsgbWFyZ2luID4gMjAgZEIgZ2l2ZXMgbGluayBxdWFsaXR5IDMsIGxpbmsgbWFyZ2luID4gMTAgZEIgZ2l2ZXMgbGluayBxdWFsaXR5IDIsCisgICAgICogbGluayBtYXJnaW4gPiAyIGRCIGdpdmVzIGxpbmsgcXVhbGl0eSAxLCBhbmQgbGluayBtYXJnaW4gYmVsb3cgb3IgZXF1YWwgdG8gMiBkQiB5aWVsZHMgbGluayBxdWFsaXR5IG9mIDAuCisgICAgICoKKyAgICAgKiBJbiBvcmRlciB0byBlbnN1cmUgdGhhdCBhIGxpbmsgbWFyZ2luIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHR3byBkaWZmZXJlbnQgbGluayBxdWFsaXR5IHZhbHVlcyBkb2VzIG5vdCBjYXVzZQorICAgICAqIGZyZXF1ZW50IGNoYW5nZXMsIGEgaHlzdGVyZXNpcyBvZiAyIGRCIGlzIGFwcGxpZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgbGluayBxdWFsaXR5LiBGb3IgZXhhbXBsZSwgdGhlIGF2ZXJhZ2UKKyAgICAgKiBsaW5rIG1hcmdpbiBtdXN0IGJlIGF0IGxlYXN0IDEyIGRCIHRvIGNoYW5nZSBhIHF1YWxpdHkgMSBsaW5rIHRvIGEgcXVhbGl0eSAyIGxpbmsuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTm9pc2VGbG9vciAgVGhlIG5vaXNlIGZsb29yIHZhbHVlIChpbiBkQm0pLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgbGluayBxdWFsaXR5IHZhbHVlICh2YWx1ZSAwLTMgYXMgcGVyIFRocmVhZCBzcGVjaWZpY2F0aW9uKS4KKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtRdWFsaXR5KGludDhfdCBhTm9pc2VGbG9vcik7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBtb3N0IHJlY2VudCBSU1MgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbW9zdCByZWNlbnQgUlNTCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQ4X3QgR2V0TGFzdFJzcyh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGEgcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIHZhbHVlIHRvIGEgbGluayBtYXJnaW4gdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTm9pc2VGbG9vciAgVGhlIG5vaXNlIGZsb29yIHZhbHVlIChpbiBkQm0pLgorICAgICAqIEBwYXJhbVtpbl0gIGFSc3MgICAgICAgICBUaGUgcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIHZhbHVlIChpbiBkQm0pLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGxpbmsgbWFyZ2luIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHVpbnQ4X3QgQ29udmVydFJzc1RvTGlua01hcmdpbihpbnQ4X3QgYU5vaXNlRmxvb3IsIGludDhfdCBhUnNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGEgbGluayBtYXJnaW4gdmFsdWUgdG8gYSBsaW5rIHF1YWxpdHkgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlua01hcmdpbiAgVGhlIExpbmsgTWFyZ2luIGluIGRCLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGxpbmsgcXVhbGl0eSB2YWx1ZSAoMC0zKS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50OF90IENvbnZlcnRMaW5rTWFyZ2luVG9MaW5rUXVhbGl0eSh1aW50OF90IGFMaW5rTWFyZ2luKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGEgcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIHZhbHVlIHRvIGEgbGluayBxdWFsaXR5IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5vaXNlRmxvb3IgIFRoZSBub2lzZSBmbG9vciB2YWx1ZSAoaW4gZEJtKS4KKyAgICAgKiBAcGFyYW1baW5dICBhUnNzICAgICAgICAgVGhlIHJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aCB2YWx1ZSAoaW4gZEJtKS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBsaW5rIHF1YWxpdHkgdmFsdWUgKDAtMykuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDhfdCBDb252ZXJ0UnNzVG9MaW5rUXVhbGl0eShpbnQ4X3QgYU5vaXNlRmxvb3IsIGludDhfdCBhUnNzKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICAvLyBDb25zdGFudHMgZm9yIG9idGFpbmluZyBsaW5rIHF1YWxpdHkgZnJvbSBsaW5rIG1hcmdpbjoKKworICAgICAgICBrTGlua01hcmdpblRocmVzaG9sZEZvckxpbmtRdWFsaXR5MyAgICA9IDIwLCAgIC8vIExpbmsgbWFyZ2luIHRocmVzaG9sZCBmb3IgcXVhbGl0eSAzIGxpbmsuCisgICAgICAgIGtMaW5rTWFyZ2luVGhyZXNob2xkRm9yTGlua1F1YWxpdHkyICAgID0gMTAsICAgLy8gTGluayBtYXJnaW4gdGhyZXNob2xkIGZvciBxdWFsaXR5IDIgbGluay4KKyAgICAgICAga0xpbmtNYXJnaW5UaHJlc2hvbGRGb3JMaW5rUXVhbGl0eTEgICAgPSAyLCAgICAvLyBMaW5rIG1hcmdpbiB0aHJlc2hvbGQgZm9yIHF1YWxpdHkgMSBsaW5rLgorICAgICAgICBrTGlua01hcmdpbkh5c3RlcmVzaXNUaHJlc2hvbGQgICAgICAgICA9IDIsICAgIC8vIExpbmsgbWFyZ2luIGh5c3RlcmVzaXMgdGhyZXNob2xkLgorCisgICAgICAgIGtOb0xhc3RMaW5rUXVhbGl0eVZhbHVlICAgICAgICAgICAgICAgID0gMHhmZiwgLy8gVXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIG5vIHByZXZpb3VzL2xhc3QgbGluayBxdWFsaXR5LgorCisgICAgICAgIC8vIENvbnN0YW50cyByZWxhdGVkIHRvIFJTUyBhZGFwdGl2ZSBleHBvbmVudGlhbCBtb3ZpbmcgYXZlcmFnZSBmaWx0ZXI6CisKKyAgICAgICAga1Jzc0F2ZXJhZ2VQcmVjaXNpb25NdWx0aXBsZUJpdFNoaWZ0ICAgPSAzLCAgICAvLyBQcmVjaXNpb24gbXVsdGlwbGUgZm9yIFJTUyBhdmVyYWdlICgxIDw8IFByZWNpc2lvbkJpdFNoaWZ0KS4KKyAgICAgICAga1Jzc0F2ZXJhZ2VQcmVjaXNpb25NdWx0aXBsZSAgICAgICAgICAgPSAoMSA8PCBrUnNzQXZlcmFnZVByZWNpc2lvbk11bHRpcGxlQml0U2hpZnQpLAorICAgICAgICBrUnNzQXZlcmFnZVByZWNpc2lvbk11bHRpcGxlQml0TWFzayAgICA9IChrUnNzQXZlcmFnZVByZWNpc2lvbk11bHRpcGxlIC0gMSksCisKKyAgICAgICAga1Jzc0NvdW50TWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSA3LCAgICAvLyBtQ291bnQgbWF4IGxpbWl0IHZhbHVlLgorCisgICAgICAgIGtSc3NDb3VudEZvcldlaWdodENvZWZmaWNpZW50T25lRWlnaHRoID0gNSwgICAgLy8gbUNvdW50IHRocmVzaG9sZCB0byB1c2UgYXZlcmFnZSB3ZWlnaHQgY29lZmZpY2llbnQgb2YgMS84LgorICAgICAgICBrUnNzQ291bnRGb3JXZWlnaHRDb2VmZmljaWVudE9uZUZvdXJ0aCA9IDIsICAgIC8vIG1Db3VudCB0aHJlc2hvbGQgdG8gdXNlIGF2ZXJhZ2Ugd2VpZ2h0IGNvZWZmaWNpZW50IG9mIDEvNC4KKyAgICAgICAga1Jzc0NvdW50Rm9yV2VpZ2h0Q29lZmZpY2llbnRPbmVIYWxmICAgPSAxLCAgICAvLyBtQ291bnQgdGhyZXNob2xkIHRvIHVzZSBhdmVyYWdlIHdlaWdodCBjb2VmZmljaWVudCBvZiAxLzIuCisgICAgfTsKKworICAgIC8qIFByaXZhdGUgbWV0aG9kIHRvIHVwZGF0ZSB0aGUgbUxpbmtRdWFsaXR5IHZhbHVlLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgbmV3IFJTUyB2YWx1ZSBpcyBhZGRlZCB0byBhdmVyYWdlCisgICAgICogb3Igd2hlbiBHZXRMaW5rUXVhbGl0eSgpIGlzIGludm9rZWQuCisgICAgICovCisgICAgdm9pZCBVcGRhdGVMaW5rUXVhbGl0eShpbnQ4X3QgYU5vaXNlRmxvb3IpOworCisgICAgLyogU3RhdGljIHByaXZhdGUgbWV0aG9kIHRvIGNhbGN1bGF0ZSB0aGUgbGluayBxdWFsaXR5IGZyb20gYSBnaXZlbiBsaW5rIG1hcmdpbiB3aGlsZSB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBsYXN0CisgICAgICogbGluayBxdWFsaXR5IHZhbHVlIGFuZCBhZGRpbmcgdGhlIGh5c3RlcmVzaXMgdmFsdWUgdG8gdGhlIHRocmVzaG9sZHMuIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIHZhbHVlIGZvciBsaW5rCisgICAgICogcXVhbGl0eSwgdGhlIGNvbnN0YW50IGtOb0xhc3RMaW5rUXVhbGl0eVZhbHVlIHNob3VsZCBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50OF90IENhbGN1bGF0ZUxpbmtRdWFsaXR5KHVpbnQ4X3QgYUxpbmtNYXJnaW4sIHVpbnQ4X3QgYUxhc3RMaW5rUXVhbGl0eSk7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrVW5rbm93blJzc1N0cmluZ1tdOyAgICAgICAgICAgLy8gQ29uc3RhbnQgc3RyaW5nIHVzZWQgd2hlbiBSU1MgYXZlcmFnZSBpcyB1bmtub3duLgorCisgICAgLy8gQWxsIGRhdGEgc2hvdWxkIGZpdCBpbnRvIGEgMTYtYml0ICh1aW50MTZfdCkgdmFsdWUuCisKKyAgICB1aW50MTZfdCBtUnNzQXZlcmFnZSAgOiAxMTsgIC8vIFRoZSBlbmNvZGVkIGF2ZXJhZ2Ugc2lnbmFsIHN0cmVuZ3RoIHZhbHVlIChzdG9yZWQgYXMgcnNzIHRpbWVzIHByZWNpc2lvbiBtdWx0aXBsZSkuCisgICAgdWludDhfdCAgbUNvdW50ICAgICAgIDogMzsgICAvLyBOdW1iZXIgb2YgUlNTIHZhbHVlcyBhZGRlZCB0byBhdmVyYWdlIHNvIGZhciAobGltaXRlZCB0byBrUnNzQ291bnRNYXgpLgorICAgIHVpbnQ4X3QgIG1MaW5rUXVhbGl0eSA6IDI7ICAgLy8gQ3VycmVudCBsaW5rIHF1YWxpdHkgdmFsdWUgKDAtMykuCisgICAgaW50OF90ICAgbUxhc3RSc3M7Cit9OworCisvKioKKyAqIEB9CisgKi8KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBMSU5LX1FVQUxJVFlfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL2xvd3Bhbi5jcHAgYi9zcmMvY29yZS90aHJlYWQvbG93cGFuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2JjNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL2xvd3Bhbi5jcHAKQEAgLTAsMCArMSwxMTc5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIDZMb1dQQU4gaGVhZGVyIGNvbXByZXNzaW9uLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibG93cGFuLmhwcCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTG93cGFuIHsKKworTG93cGFuOjpMb3dwYW4oVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKGFUaHJlYWROZXRpZikKK3sKK30KKworb3RFcnJvciBMb3dwYW46OkNvcHlDb250ZXh0KGNvbnN0IENvbnRleHQgJmFDb250ZXh0LCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIG1lbWNweSgmYUFkZHJlc3MsIGFDb250ZXh0Lm1QcmVmaXgsIGFDb250ZXh0Lm1QcmVmaXhMZW5ndGggLyBDSEFSX0JJVCk7CisKKyAgICBmb3IgKGludCBpID0gKGFDb250ZXh0Lm1QcmVmaXhMZW5ndGggJiB+Nyk7IGkgPCBhQ29udGV4dC5tUHJlZml4TGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBhQWRkcmVzcy5tRmllbGRzLm04W2kgLyBDSEFSX0JJVF0gJj0gfigweDgwID4+IChpICUgQ0hBUl9CSVQpKTsKKyAgICAgICAgYUFkZHJlc3MubUZpZWxkcy5tOFtpIC8gQ0hBUl9CSVRdIHw9IGFDb250ZXh0Lm1QcmVmaXhbaSAvIENIQVJfQklUXSAmICgweDgwID4+IChpICUgQ0hBUl9CSVQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBMb3dwYW46OkNvbXB1dGVJaWQoY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjQWRkciwgY29uc3QgQ29udGV4dCAmYUNvbnRleHQsIElwNjo6QWRkcmVzcyAmYUlwQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHN3aXRjaCAoYU1hY0FkZHIubUxlbmd0aCkKKyAgICB7CisgICAgY2FzZSAyOgorICAgICAgICBhSXBBZGRyZXNzLm1GaWVsZHMubTE2WzRdID0gSG9zdFN3YXAxNigweDAwMDApOworICAgICAgICBhSXBBZGRyZXNzLm1GaWVsZHMubTE2WzVdID0gSG9zdFN3YXAxNigweDAwZmYpOworICAgICAgICBhSXBBZGRyZXNzLm1GaWVsZHMubTE2WzZdID0gSG9zdFN3YXAxNigweGZlMDApOworICAgICAgICBhSXBBZGRyZXNzLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNihhTWFjQWRkci5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElwNjo6QWRkcmVzczo6a0ludGVyZmFjZUlkZW50aWZpZXJTaXplOgorICAgICAgICBhSXBBZGRyZXNzLlNldElpZChhTWFjQWRkci5tRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKKyAgICBpZiAoYUNvbnRleHQubVByZWZpeExlbmd0aCA+IDY0KQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IChhQ29udGV4dC5tUHJlZml4TGVuZ3RoICYgfjcpOyBpIDwgYUNvbnRleHQubVByZWZpeExlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBhSXBBZGRyZXNzLm1GaWVsZHMubThbaSAvIENIQVJfQklUXSAmPSB+KDB4ODAgPj4gKGkgJSBDSEFSX0JJVCkpOworICAgICAgICAgICAgYUlwQWRkcmVzcy5tRmllbGRzLm04W2kgLyBDSEFSX0JJVF0gfD0gYUNvbnRleHQubVByZWZpeFtpIC8gQ0hBUl9CSVRdICYgKDB4ODAgPj4gKGkgJSBDSEFSX0JJVCkpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworaW50IExvd3Bhbjo6Q29tcHJlc3NTb3VyY2VJaWQoY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjQWRkciwgY29uc3QgSXA2OjpBZGRyZXNzICZhSXBBZGRyLCBjb25zdCBDb250ZXh0ICZhQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICZhSGNDdGwsIHVpbnQ4X3QgKmFCdWYpCit7CisgICAgdWludDhfdCAqY3VyID0gYUJ1ZjsKKyAgICBJcDY6OkFkZHJlc3MgaXBhZGRyOworICAgIE1hYzo6QWRkcmVzcyB0bXA7CisKKyAgICBDb21wdXRlSWlkKGFNYWNBZGRyLCBhQ29udGV4dCwgaXBhZGRyKTsKKworICAgIGlmIChtZW1jbXAoaXBhZGRyLkdldElpZCgpLCBhSXBBZGRyLkdldElpZCgpLCBJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZSkgPT0gMCkKKyAgICB7CisgICAgICAgIGFIY0N0bCB8PSBrSGNTcmNBZGRyTW9kZTM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHRtcC5tTGVuZ3RoID0gc2l6ZW9mKHRtcC5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgdG1wLm1TaG9ydEFkZHJlc3MgPSBIb3N0U3dhcDE2KGFJcEFkZHIubUZpZWxkcy5tMTZbN10pOworICAgICAgICBDb21wdXRlSWlkKHRtcCwgYUNvbnRleHQsIGlwYWRkcik7CisKKyAgICAgICAgaWYgKG1lbWNtcChpcGFkZHIuR2V0SWlkKCksIGFJcEFkZHIuR2V0SWlkKCksIElwNjo6QWRkcmVzczo6a0ludGVyZmFjZUlkZW50aWZpZXJTaXplKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBhSGNDdGwgfD0ga0hjU3JjQWRkck1vZGUyOworICAgICAgICAgICAgY3VyWzBdID0gYUlwQWRkci5tRmllbGRzLm04WzE0XTsKKyAgICAgICAgICAgIGN1clsxXSA9IGFJcEFkZHIubUZpZWxkcy5tOFsxNV07CisgICAgICAgICAgICBjdXIgKz0gMjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFIY0N0bCB8PSBrSGNTcmNBZGRyTW9kZTE7CisgICAgICAgICAgICBtZW1jcHkoY3VyLCBhSXBBZGRyLkdldElpZCgpLCBJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZSk7CisgICAgICAgICAgICBjdXIgKz0gSXA2OjpBZGRyZXNzOjprSW50ZXJmYWNlSWRlbnRpZmllclNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjdXIgLSBhQnVmKTsKK30KKworaW50IExvd3Bhbjo6Q29tcHJlc3NEZXN0aW5hdGlvbklpZChjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNBZGRyLCBjb25zdCBJcDY6OkFkZHJlc3MgJmFJcEFkZHIsIGNvbnN0IENvbnRleHQgJmFDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAmYUhjQ3RsLCB1aW50OF90ICphQnVmKQoreworICAgIHVpbnQ4X3QgKmN1ciA9IGFCdWY7CisgICAgSXA2OjpBZGRyZXNzIGlwYWRkcjsKKyAgICBNYWM6OkFkZHJlc3MgdG1wOworCisgICAgQ29tcHV0ZUlpZChhTWFjQWRkciwgYUNvbnRleHQsIGlwYWRkcik7CisKKyAgICBpZiAobWVtY21wKGlwYWRkci5HZXRJaWQoKSwgYUlwQWRkci5HZXRJaWQoKSwgSXA2OjpBZGRyZXNzOjprSW50ZXJmYWNlSWRlbnRpZmllclNpemUpID09IDApCisgICAgeworICAgICAgICBhSGNDdGwgfD0ga0hjRHN0QWRkck1vZGUzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0bXAubUxlbmd0aCA9IHNpemVvZih0bXAubVNob3J0QWRkcmVzcyk7CisgICAgICAgIHRtcC5tU2hvcnRBZGRyZXNzID0gSG9zdFN3YXAxNihhSXBBZGRyLm1GaWVsZHMubTE2WzddKTsKKyAgICAgICAgQ29tcHV0ZUlpZCh0bXAsIGFDb250ZXh0LCBpcGFkZHIpOworCisgICAgICAgIGlmIChtZW1jbXAoaXBhZGRyLkdldElpZCgpLCBhSXBBZGRyLkdldElpZCgpLCBJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYUhjQ3RsIHw9IGtIY0RzdEFkZHJNb2RlMjsKKyAgICAgICAgICAgIGN1clswXSA9IGFJcEFkZHIubUZpZWxkcy5tOFsxNF07CisgICAgICAgICAgICBjdXJbMV0gPSBhSXBBZGRyLm1GaWVsZHMubThbMTVdOworICAgICAgICAgICAgY3VyICs9IDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhSGNDdGwgfD0ga0hjRHN0QWRkck1vZGUxOworICAgICAgICAgICAgbWVtY3B5KGN1ciwgYUlwQWRkci5HZXRJaWQoKSwgSXA2OjpBZGRyZXNzOjprSW50ZXJmYWNlSWRlbnRpZmllclNpemUpOworICAgICAgICAgICAgY3VyICs9IElwNjo6QWRkcmVzczo6a0ludGVyZmFjZUlkZW50aWZpZXJTaXplOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY3VyIC0gYUJ1Zik7Cit9CisKK2ludCBMb3dwYW46OkNvbXByZXNzTXVsdGljYXN0KGNvbnN0IElwNjo6QWRkcmVzcyAmYUlwQWRkciwgdWludDE2X3QgJmFIY0N0bCwgdWludDhfdCAqYUJ1ZikKK3sKKyAgICBOZXR3b3JrRGF0YTo6TGVhZGVyICZuZXR3b3JrRGF0YSA9IEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKTsKKyAgICB1aW50OF90ICpjdXIgPSBhQnVmOworICAgIENvbnRleHQgbXVsdGljYXN0Q29udGV4dDsKKworICAgIGFIY0N0bCB8PSBrSGNNdWx0aWNhc3Q7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMjsgaSA8IHNpemVvZihJcDY6OkFkZHJlc3MpOyBpKyspCisgICAgeworICAgICAgICBpZiAoYUlwQWRkci5tRmllbGRzLm04W2ldKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBtdWx0aWNhc3QgYWRkcmVzcyBjYW4gYmUgY29tcHJlc3NlZCB0byA4LWJpdHMgKGZmMDI6OjAweHgpCisgICAgICAgICAgICBpZiAoYUlwQWRkci5tRmllbGRzLm04WzFdID09IDB4MDIgJiYgaSA+PSAxNSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhSGNDdGwgfD0ga0hjRHN0QWRkck1vZGUzOworICAgICAgICAgICAgICAgIGN1clswXSA9IGFJcEFkZHIubUZpZWxkcy5tOFsxNV07CisgICAgICAgICAgICAgICAgY3VyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDaGVjayBpZiBtdWx0aWNhc3QgYWRkcmVzcyBjYW4gYmUgY29tcHJlc3NlZCB0byAzMi1iaXRzIChmZnh4OjowMHh4Onh4eHgpCisgICAgICAgICAgICBlbHNlIGlmIChpID49IDEzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFIY0N0bCB8PSBrSGNEc3RBZGRyTW9kZTI7CisgICAgICAgICAgICAgICAgY3VyWzBdID0gYUlwQWRkci5tRmllbGRzLm04WzFdOworICAgICAgICAgICAgICAgIG1lbWNweShjdXIgKyAxLCBhSXBBZGRyLm1GaWVsZHMubTggKyAxMywgMyk7CisgICAgICAgICAgICAgICAgY3VyICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDaGVjayBpZiBtdWx0aWNhc3QgYWRkcmVzcyBjYW4gYmUgY29tcHJlc3NlZCB0byA0OC1iaXRzIChmZnh4OjowMHh4Onh4eHg6eHh4eCkKKyAgICAgICAgICAgIGVsc2UgaWYgKGkgPj0gMTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYUhjQ3RsIHw9IGtIY0RzdEFkZHJNb2RlMTsKKyAgICAgICAgICAgICAgICBjdXJbMF0gPSBhSXBBZGRyLm1GaWVsZHMubThbMV07CisgICAgICAgICAgICAgICAgbWVtY3B5KGN1ciArIDEsIGFJcEFkZHIubUZpZWxkcy5tOCArIDExLCA1KTsKKyAgICAgICAgICAgICAgICBjdXIgKz0gNjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBtdWx0aWNhc3QgYWRkcmVzcyBjYW4gYmUgY29tcHJlc3NlZCB1c2luZyBDb250ZXh0IElEIDAuCisgICAgICAgICAgICAgICAgaWYgKG5ldHdvcmtEYXRhLkdldENvbnRleHQoMCwgbXVsdGljYXN0Q29udGV4dCkgPT0gT1RfRVJST1JfTk9ORSAmJgorICAgICAgICAgICAgICAgICAgICBtdWx0aWNhc3RDb250ZXh0Lm1QcmVmaXhMZW5ndGggPT0gYUlwQWRkci5tRmllbGRzLm04WzNdICYmCisgICAgICAgICAgICAgICAgICAgIG1lbWNtcChtdWx0aWNhc3RDb250ZXh0Lm1QcmVmaXgsIGFJcEFkZHIubUZpZWxkcy5tOCArIDQsIDgpID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhSGNDdGwgfD0ga0hjRHN0QWRkckNvbnRleHQgfCBrSGNEc3RBZGRyTW9kZTA7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShjdXIsIGFJcEFkZHIubUZpZWxkcy5tOCArIDEsIDIpOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoY3VyICsgMiwgYUlwQWRkci5tRmllbGRzLm04ICsgMTIsIDQpOworICAgICAgICAgICAgICAgICAgICBjdXIgKz0gNjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGN1ciwgYUlwQWRkci5tRmllbGRzLm04LCBzaXplb2YoSXA2OjpBZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgICAgIGN1ciArPSBzaXplb2YoSXA2OjpBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY3VyIC0gYUJ1Zik7Cit9CisKK2ludCBMb3dwYW46OkNvbXByZXNzKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNTb3VyY2UsIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY0Rlc3QsIHVpbnQ4X3QgKmFCdWYpCit7CisgICAgTmV0d29ya0RhdGE6OkxlYWRlciAmbmV0d29ya0RhdGEgPSBHZXROZXRpZigpLkdldE5ldHdvcmtEYXRhTGVhZGVyKCk7CisgICAgdWludDhfdCAqY3VyID0gYUJ1ZjsKKyAgICB1aW50MTZfdCBoY0N0bCA9IDA7CisgICAgSXA2OjpIZWFkZXIgaXA2SGVhZGVyOworICAgIHVpbnQ4X3QgKmlwNkhlYWRlckJ5dGVzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZpcDZIZWFkZXIpOworICAgIENvbnRleHQgc3JjQ29udGV4dCwgZHN0Q29udGV4dDsKKyAgICBib29sIHNyY0NvbnRleHRWYWxpZCA9IHRydWUsIGRzdENvbnRleHRWYWxpZCA9IHRydWU7CisgICAgdWludDhfdCBuZXh0SGVhZGVyOworICAgIHVpbnQ4X3QgZWNuID0gMDsKKyAgICB1aW50OF90IGRzY3AgPSAwOworCisgICAgYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKGlwNkhlYWRlciksICZpcDZIZWFkZXIpOworCisgICAgaWYgKG5ldHdvcmtEYXRhLkdldENvbnRleHQoaXA2SGVhZGVyLkdldFNvdXJjZSgpLCBzcmNDb250ZXh0KSAhPSBPVF9FUlJPUl9OT05FIHx8CisgICAgICAgIHNyY0NvbnRleHQubUNvbXByZXNzRmxhZyA9PSBmYWxzZSkKKyAgICB7CisgICAgICAgIG5ldHdvcmtEYXRhLkdldENvbnRleHQoMCwgc3JjQ29udGV4dCk7CisgICAgICAgIHNyY0NvbnRleHRWYWxpZCA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChuZXR3b3JrRGF0YS5HZXRDb250ZXh0KGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLCBkc3RDb250ZXh0KSAhPSBPVF9FUlJPUl9OT05FIHx8CisgICAgICAgIGRzdENvbnRleHQubUNvbXByZXNzRmxhZyA9PSBmYWxzZSkKKyAgICB7CisgICAgICAgIG5ldHdvcmtEYXRhLkdldENvbnRleHQoMCwgZHN0Q29udGV4dCk7CisgICAgICAgIGRzdENvbnRleHRWYWxpZCA9IGZhbHNlOworICAgIH0KKworICAgIGhjQ3RsID0ga0hjRGlzcGF0Y2g7CisKKyAgICAvLyBMb3dwYW4gSEMgQ29udHJvbCBCaXRzCisgICAgY3VyICs9IDI7CisKKyAgICAvLyBDb250ZXh0IElkZW50aWZpZXIKKyAgICBpZiAoc3JjQ29udGV4dC5tQ29udGV4dElkICE9IDAgfHwgZHN0Q29udGV4dC5tQ29udGV4dElkICE9IDApCisgICAgeworICAgICAgICBoY0N0bCB8PSBrSGNDb250ZXh0SWQ7CisgICAgICAgIGN1clswXSA9ICgoc3JjQ29udGV4dC5tQ29udGV4dElkIDw8IDQpIHwgZHN0Q29udGV4dC5tQ29udGV4dElkKSAmIDB4ZmY7CisgICAgICAgIGN1cisrOworICAgIH0KKworICAgIGRzY3AgPSAoKGlwNkhlYWRlckJ5dGVzWzBdIDw8IDIpICYgMHgzYykgfCAoaXA2SGVhZGVyQnl0ZXNbMV0gPj4gNik7CisgICAgZWNuID0gKGlwNkhlYWRlckJ5dGVzWzFdIDw8IDIpICYgMHhjMDsKKworICAgIC8vIEZsb3cgTGFiZWwKKyAgICBpZiAoKChpcDZIZWFkZXJCeXRlc1sxXSAmIDB4MGYpID09IDApICYmICgoaXA2SGVhZGVyQnl0ZXNbMl0pID09IDApICYmICgoaXA2SGVhZGVyQnl0ZXNbM10pID09IDApKQorICAgIHsKKyAgICAgICAgaWYgKGRzY3AgPT0gMCAmJiBlY24gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRWxpZGUgRmxvdyBMYWJlbCBhbmQgVHJhZmZpYyBDbGFzcy4KKyAgICAgICAgICAgIGhjQ3RsIHw9IGtIY1RyYWZmaWNDbGFzcyB8IGtIY0Zsb3dMYWJlbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEVsaWRlIEZsb3cgTGFiZWwgYW5kIGNhcnJ5IFRyYWZmaWMgQ2xhc3MgaW4tbGluZS4KKyAgICAgICAgICAgIGhjQ3RsIHw9IGtIY0Zsb3dMYWJlbDsKKworICAgICAgICAgICAgY3VyWzBdID0gZWNuIHwgZHNjcDsKKyAgICAgICAgICAgIGN1cisrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGRzY3AgPT0gMCkKKyAgICB7CisgICAgICAgIC8vIENhcnJ5IEZsb3cgTGFiZWwgYW5kIEVDTiBvbmx5IHdpdGggMi1iaXQgcGFkZGluZy4KKyAgICAgICAgaGNDdGwgfD0ga0hjVHJhZmZpY0NsYXNzOworCisgICAgICAgIGN1clswXSA9IGVjbiB8IChpcDZIZWFkZXJCeXRlc1sxXSAmIDB4MGYpOworICAgICAgICBtZW1jcHkoY3VyICsgMSwgaXA2SGVhZGVyQnl0ZXMgKyAyLCAyKTsKKyAgICAgICAgY3VyICs9IDM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIENhcnJ5IEZsb3cgTGFiZWwgYW5kIFRyYWZmaWMgQ2xhc3MgaW4tbGluZS4KKyAgICAgICAgY3VyWzBdID0gZWNuIHwgZHNjcDsKKyAgICAgICAgY3VyWzFdID0gaXA2SGVhZGVyQnl0ZXNbMV0gJiAweDBmOworICAgICAgICBtZW1jcHkoY3VyICsgMiwgaXA2SGVhZGVyQnl0ZXMgKyAyLCAyKTsKKyAgICAgICAgY3VyICs9IDQ7CisgICAgfQorCisgICAgLy8gTmV4dCBIZWFkZXIKKyAgICBzd2l0Y2ggKGlwNkhlYWRlci5HZXROZXh0SGVhZGVyKCkpCisgICAgeworICAgIGNhc2UgSXA2OjprUHJvdG9Ib3BPcHRzOgorICAgIGNhc2UgSXA2OjprUHJvdG9VZHA6CisgICAgY2FzZSBJcDY6OmtQcm90b0lwNjoKKyAgICAgICAgaGNDdGwgfD0ga0hjTmV4dEhlYWRlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBjdXJbMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihpcDZIZWFkZXIuR2V0TmV4dEhlYWRlcigpKTsKKyAgICAgICAgY3VyKys7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIEhvcCBMaW1pdAorICAgIHN3aXRjaCAoaXA2SGVhZGVyLkdldEhvcExpbWl0KCkpCisgICAgeworICAgIGNhc2UgMToKKyAgICAgICAgaGNDdGwgfD0ga0hjSG9wTGltaXQxOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgNjQ6CisgICAgICAgIGhjQ3RsIHw9IGtIY0hvcExpbWl0NjQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAyNTU6CisgICAgICAgIGhjQ3RsIHw9IGtIY0hvcExpbWl0MjU1OworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGN1clswXSA9IGlwNkhlYWRlci5HZXRIb3BMaW1pdCgpOworICAgICAgICBjdXIrKzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gU291cmNlIEFkZHJlc3MKKyAgICBpZiAoaXA2SGVhZGVyLkdldFNvdXJjZSgpLklzVW5zcGVjaWZpZWQoKSkKKyAgICB7CisgICAgICAgIGhjQ3RsIHw9IGtIY1NyY0FkZHJDb250ZXh0OworICAgIH0KKyAgICBlbHNlIGlmIChpcDZIZWFkZXIuR2V0U291cmNlKCkuSXNMaW5rTG9jYWwoKSkKKyAgICB7CisgICAgICAgIGN1ciArPSBDb21wcmVzc1NvdXJjZUlpZChhTWFjU291cmNlLCBpcDZIZWFkZXIuR2V0U291cmNlKCksIHNyY0NvbnRleHQsIGhjQ3RsLCBjdXIpOworICAgIH0KKyAgICBlbHNlIGlmIChzcmNDb250ZXh0VmFsaWQpCisgICAgeworICAgICAgICBoY0N0bCB8PSBrSGNTcmNBZGRyQ29udGV4dDsKKyAgICAgICAgY3VyICs9IENvbXByZXNzU291cmNlSWlkKGFNYWNTb3VyY2UsIGlwNkhlYWRlci5HZXRTb3VyY2UoKSwgc3JjQ29udGV4dCwgaGNDdGwsIGN1cik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1lbWNweShjdXIsIGlwNkhlYWRlci5HZXRTb3VyY2UoKS5tRmllbGRzLm04LCBzaXplb2YoaXA2SGVhZGVyLkdldFNvdXJjZSgpKSk7CisgICAgICAgIGN1ciArPSBzaXplb2YoSXA2OjpBZGRyZXNzKTsKKyAgICB9CisKKyAgICAvLyBEZXN0aW5hdGlvbiBBZGRyZXNzCisgICAgaWYgKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLklzTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICBjdXIgKz0gQ29tcHJlc3NNdWx0aWNhc3QoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCksIGhjQ3RsLCBjdXIpOworICAgIH0KKyAgICBlbHNlIGlmIChpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc0xpbmtMb2NhbCgpKQorICAgIHsKKyAgICAgICAgY3VyICs9IENvbXByZXNzRGVzdGluYXRpb25JaWQoYU1hY0Rlc3QsIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLCBkc3RDb250ZXh0LCBoY0N0bCwgY3VyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZHN0Q29udGV4dFZhbGlkKQorICAgIHsKKyAgICAgICAgaGNDdGwgfD0ga0hjRHN0QWRkckNvbnRleHQ7CisgICAgICAgIGN1ciArPSBDb21wcmVzc0Rlc3RpbmF0aW9uSWlkKGFNYWNEZXN0LCBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSwgZHN0Q29udGV4dCwgaGNDdGwsIGN1cik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1lbWNweShjdXIsICZpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSwgc2l6ZW9mKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpKSk7CisgICAgICAgIGN1ciArPSBzaXplb2YoSXA2OjpBZGRyZXNzKTsKKyAgICB9CisKKyAgICBhQnVmWzBdID0gaGNDdGwgPj4gODsKKyAgICBhQnVmWzFdID0gaGNDdGwgJiAweGZmOworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKGlwNkhlYWRlcikpOworCisgICAgbmV4dEhlYWRlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGlwNkhlYWRlci5HZXROZXh0SGVhZGVyKCkpOworCisgICAgd2hpbGUgKDEpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5leHRIZWFkZXIpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBJcDY6OmtQcm90b0hvcE9wdHM6CisgICAgICAgICAgICBjdXIgKz0gQ29tcHJlc3NFeHRlbnNpb25IZWFkZXIoYU1lc3NhZ2UsIGN1ciwgbmV4dEhlYWRlcik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElwNjo6a1Byb3RvVWRwOgorICAgICAgICAgICAgY3VyICs9IENvbXByZXNzVWRwKGFNZXNzYWdlLCBjdXIpOworICAgICAgICAgICAgRXhpdE5vdygpOworCisgICAgICAgIGNhc2UgSXA2OjprUHJvdG9JcDY6CisgICAgICAgICAgICAvLyBGb3IgSVAtaW4tSVAgdGhlIE5IIGJpdCBvZiB0aGUgTE9XUEFOX05IQyBlbmNvZGluZyBNVVNUIGJlIHNldCB0byB6ZXJvLgorICAgICAgICAgICAgY3VyWzBdID0ga0V4dEhkckRpc3BhdGNoIHwga0V4dEhkckVpZElwNjsKKyAgICAgICAgICAgIGN1cisrOworCisgICAgICAgICAgICBjdXIgKz0gQ29tcHJlc3MoYU1lc3NhZ2UsIGFNYWNTb3VyY2UsIGFNYWNEZXN0LCBjdXIpOworCisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY3VyIC0gYUJ1Zik7Cit9CisKK2ludCBMb3dwYW46OkNvbXByZXNzRXh0ZW5zaW9uSGVhZGVyKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50OF90ICphQnVmLCB1aW50OF90ICZhTmV4dEhlYWRlcikKK3sKKyAgICBJcDY6OkV4dGVuc2lvbkhlYWRlciBleHRIZWFkZXI7CisgICAgSXA2OjpPcHRpb25IZWFkZXIgb3B0aW9uSGVhZGVyOworICAgIHVpbnQ4X3QgKmN1ciA9IGFCdWY7CisgICAgdWludDhfdCBsZW47CisgICAgdWludDhfdCBwYWRMZW5ndGggPSAwOworICAgIHVpbnQxNl90IG9mZnNldDsKKworICAgIGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihleHRIZWFkZXIpLCAmZXh0SGVhZGVyKTsKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KHNpemVvZihleHRIZWFkZXIpKTsKKworICAgIGN1clswXSA9IGtFeHRIZHJEaXNwYXRjaCB8IGtFeHRIZHJFaWRIYmg7CisKKyAgICBzd2l0Y2ggKGV4dEhlYWRlci5HZXROZXh0SGVhZGVyKCkpCisgICAgeworICAgIGNhc2UgSXA2OjprUHJvdG9VZHA6CisgICAgY2FzZSBJcDY6OmtQcm90b0lwNjoKKyAgICAgICAgY3VyWzBdIHw9IGtFeHRIZHJOZXh0SGVhZGVyOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGN1cisrOworICAgICAgICBjdXJbMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihleHRIZWFkZXIuR2V0TmV4dEhlYWRlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY3VyKys7CisKKyAgICBsZW4gPSAoZXh0SGVhZGVyLkdldExlbmd0aCgpICsgMSkgKiA4IC0gc2l6ZW9mKGV4dEhlYWRlcik7CisKKyAgICAvLyBSRkMgNjI4MiBzYXlzOiAiSVB2NiBIb3AtYnktSG9wIGFuZCBEZXN0aW5hdGlvbiBPcHRpb25zIEhlYWRlcnMgbWF5IHVzZSBhIHRyYWlsaW5nCisgICAgLy8gUGFkMSBvciBQYWROIHRvIGFjaGlldmUgOC1vY3RldCBhbGlnbm1lbnQuIFdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgdHJhaWxpbmcgUGFkMSBvciBQYWROCisgICAgLy8gb3B0aW9uIG9mIDcgb2N0ZXRzIG9yIGxlc3MgYW5kIHRoZSBjb250YWluaW5nIGhlYWRlciBpcyBhIG11bHRpcGxlIG9mIDggb2N0ZXRzLCB0aGUgdHJhaWxpbmcKKyAgICAvLyBQYWQxIG9yIFBhZE4gb3B0aW9uIE1BWSBiZSBlbGlkZWQgYnkgdGhlIGNvbXByZXNzb3IuIgorICAgIGlmIChhTmV4dEhlYWRlciA9PSBJcDY6OmtQcm90b0hvcE9wdHMgfHwgYU5leHRIZWFkZXIgPT0gSXA2OjprUHJvdG9Ec3RPcHRzKQorICAgIHsKKyAgICAgICAgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisKKyAgICAgICAgd2hpbGUgKG9mZnNldCA8IGxlbiArIGFNZXNzYWdlLkdldE9mZnNldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKG9wdGlvbkhlYWRlciksICZvcHRpb25IZWFkZXIpOworCisgICAgICAgICAgICBpZiAob3B0aW9uSGVhZGVyLkdldFR5cGUoKSA9PSBJcDY6Ok9wdGlvblBhZDE6OmtUeXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoSXA2OjpPcHRpb25QYWQxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKG9wdGlvbkhlYWRlcikgKyBvcHRpb25IZWFkZXIuR2V0TGVuZ3RoKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdCBvcHRpb24gY2FuIGJlIGNvbXByZXNzZWQuCisgICAgICAgIGlmIChvcHRpb25IZWFkZXIuR2V0VHlwZSgpID09IElwNjo6T3B0aW9uUGFkMTo6a1R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhZExlbmd0aCA9IHNpemVvZihJcDY6Ok9wdGlvblBhZDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG9wdGlvbkhlYWRlci5HZXRUeXBlKCkgPT0gSXA2OjpPcHRpb25QYWROOjprVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcGFkTGVuZ3RoID0gc2l6ZW9mKG9wdGlvbkhlYWRlcikgKyBvcHRpb25IZWFkZXIuR2V0TGVuZ3RoKCk7CisgICAgICAgIH0KKworICAgICAgICBsZW4gLT0gcGFkTGVuZ3RoOworICAgIH0KKworICAgIGFOZXh0SGVhZGVyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oZXh0SGVhZGVyLkdldE5leHRIZWFkZXIoKSk7CisKKyAgICBjdXJbMF0gPSBsZW47CisgICAgY3VyKys7CisKKyAgICBhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBsZW4sIGN1cik7CisgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChsZW4gKyBwYWRMZW5ndGgpOworICAgIGN1ciArPSBsZW47CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjdXIgLSBhQnVmKTsKK30KKworaW50IExvd3Bhbjo6Q29tcHJlc3NVZHAoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQ4X3QgKmFCdWYpCit7CisgICAgSXA2OjpVZHBIZWFkZXIgdWRwSGVhZGVyOworICAgIHVpbnQ4X3QgKmN1ciA9IGFCdWY7CisgICAgdWludDhfdCAqdWRwQ3RsID0gY3VyOworICAgIHVpbnQxNl90IHNvdXJjZTsKKyAgICB1aW50MTZfdCBkZXN0aW5hdGlvbjsKKworICAgIGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZih1ZHBIZWFkZXIpLCAmdWRwSGVhZGVyKTsKKyAgICBzb3VyY2UgPSB1ZHBIZWFkZXIuR2V0U291cmNlUG9ydCgpOworICAgIGRlc3RpbmF0aW9uID0gdWRwSGVhZGVyLkdldERlc3RpbmF0aW9uUG9ydCgpOworCisgICAgY3VyWzBdID0ga1VkcERpc3BhdGNoOworICAgIGN1cisrOworCisgICAgaWYgKChzb3VyY2UgJiAweGZmZjApID09IDB4ZjBiMCAmJiAoZGVzdGluYXRpb24gJiAweGZmZjApID09IDB4ZjBiMCkKKyAgICB7CisgICAgICAgICp1ZHBDdGwgfD0gMzsKKyAgICAgICAgKmN1cisrID0gKCgoc291cmNlICYgMHhmKSA8PCA0KSB8IChkZXN0aW5hdGlvbiAmIDB4ZikpICYgMHhmZjsKKyAgICB9CisgICAgZWxzZSBpZiAoKHNvdXJjZSAmIDB4ZmYwMCkgPT0gMHhmMDAwKQorICAgIHsKKyAgICAgICAgKnVkcEN0bCB8PSAyOworICAgICAgICAqY3VyKysgPSBzb3VyY2UgJiAweGZmOworICAgICAgICAqY3VyKysgPSBkZXN0aW5hdGlvbiA+PiA4OworICAgICAgICAqY3VyKysgPSBkZXN0aW5hdGlvbiAmIDB4ZmY7CisgICAgfQorICAgIGVsc2UgaWYgKChkZXN0aW5hdGlvbiAmIDB4ZmYwMCkgPT0gMHhmMDAwKQorICAgIHsKKyAgICAgICAgKnVkcEN0bCB8PSAxOworICAgICAgICAqY3VyKysgPSBzb3VyY2UgPj4gODsKKyAgICAgICAgKmN1cisrID0gc291cmNlICYgMHhmZjsKKyAgICAgICAgKmN1cisrID0gZGVzdGluYXRpb24gJiAweGZmOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtZW1jcHkoY3VyLCAmdWRwSGVhZGVyLCBJcDY6OlVkcEhlYWRlcjo6R2V0TGVuZ3RoT2Zmc2V0KCkpOworICAgICAgICBjdXIgKz0gSXA2OjpVZHBIZWFkZXI6OkdldExlbmd0aE9mZnNldCgpOworICAgIH0KKworICAgIG1lbWNweShjdXIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmdWRwSGVhZGVyKSArIElwNjo6VWRwSGVhZGVyOjpHZXRDaGVja3N1bU9mZnNldCgpLCAyKTsKKyAgICBjdXIgKz0gMjsKKworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKHVkcEhlYWRlcikpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY3VyIC0gYUJ1Zik7Cit9CisKK290RXJyb3IgTG93cGFuOjpEaXNwYXRjaFRvTmV4dEhlYWRlcih1aW50OF90IGFEaXNwYXRjaCwgSXA2OjpJcFByb3RvICZhTmV4dEhlYWRlcikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmICgoYURpc3BhdGNoICYga0V4dEhkckRpc3BhdGNoTWFzaykgPT0ga0V4dEhkckRpc3BhdGNoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhRGlzcGF0Y2ggJiBrRXh0SGRyRWlkTWFzaykKKyAgICAgICAgeworICAgICAgICBjYXNlIGtFeHRIZHJFaWRIYmg6CisgICAgICAgICAgICBhTmV4dEhlYWRlciA9IElwNjo6a1Byb3RvSG9wT3B0czsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKworICAgICAgICBjYXNlIGtFeHRIZHJFaWRSb3V0aW5nOgorICAgICAgICAgICAgYU5leHRIZWFkZXIgPSBJcDY6OmtQcm90b1JvdXRpbmc7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisKKyAgICAgICAgY2FzZSBrRXh0SGRyRWlkRnJhZ21lbnQ6CisgICAgICAgICAgICBhTmV4dEhlYWRlciA9IElwNjo6a1Byb3RvRnJhZ21lbnQ7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisKKyAgICAgICAgY2FzZSBrRXh0SGRyRWlkRHN0OgorICAgICAgICAgICAgYU5leHRIZWFkZXIgPSBJcDY6OmtQcm90b0RzdE9wdHM7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisKKyAgICAgICAgY2FzZSBrRXh0SGRyRWlkSXA2OgorICAgICAgICAgICAgYU5leHRIZWFkZXIgPSBJcDY6OmtQcm90b0lwNjsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICgoYURpc3BhdGNoICYga1VkcERpc3BhdGNoTWFzaykgPT0ga1VkcERpc3BhdGNoKQorICAgIHsKKyAgICAgICAgYU5leHRIZWFkZXIgPSBJcDY6OmtQcm90b1VkcDsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0U7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitpbnQgTG93cGFuOjpEZWNvbXByZXNzQmFzZUhlYWRlcihJcDY6OkhlYWRlciAmaXA2SGVhZGVyLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNTb3VyY2UsIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY0Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIE5ldHdvcmtEYXRhOjpMZWFkZXIgJm5ldHdvcmtEYXRhID0gR2V0TmV0aWYoKS5HZXROZXR3b3JrRGF0YUxlYWRlcigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRTsKKyAgICBjb25zdCB1aW50OF90ICpjdXIgPSBhQnVmOworICAgIHVpbnQxNl90IHJlbWFpbmluZyA9IGFCdWZMZW5ndGg7CisgICAgdWludDE2X3QgaGNDdGw7CisgICAgQ29udGV4dCBzcmNDb250ZXh0LCBkc3RDb250ZXh0OworICAgIGJvb2wgc3JjQ29udGV4dFZhbGlkID0gdHJ1ZSwgZHN0Q29udGV4dFZhbGlkID0gdHJ1ZTsKKyAgICBJcDY6OklwUHJvdG8gbmV4dEhlYWRlcjsKKyAgICB1aW50OF90ICpieXRlczsKKworICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMik7CisgICAgaGNDdGwgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKGN1clswXSA8PCA4KSB8IGN1clsxXSk7CisgICAgY3VyICs9IDI7CisgICAgcmVtYWluaW5nIC09IDI7CisKKyAgICAvLyBjaGVjayBEaXNwYXRjaCBiaXRzCisgICAgVmVyaWZ5T3JFeGl0KChoY0N0bCAmIGtIY0Rpc3BhdGNoTWFzaykgPT0ga0hjRGlzcGF0Y2gpOworCisgICAgLy8gQ29udGV4dCBJZGVudGlmaWVyCisgICAgc3JjQ29udGV4dC5tUHJlZml4TGVuZ3RoID0gMDsKKyAgICBkc3RDb250ZXh0Lm1QcmVmaXhMZW5ndGggPSAwOworCisgICAgaWYgKChoY0N0bCAmIGtIY0NvbnRleHRJZCkgIT0gMCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMSk7CisKKyAgICAgICAgaWYgKG5ldHdvcmtEYXRhLkdldENvbnRleHQoY3VyWzBdID4+IDQsIHNyY0NvbnRleHQpICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNyY0NvbnRleHRWYWxpZCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5ldHdvcmtEYXRhLkdldENvbnRleHQoY3VyWzBdICYgMHhmLCBkc3RDb250ZXh0KSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBkc3RDb250ZXh0VmFsaWQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGN1cisrOworICAgICAgICByZW1haW5pbmctLTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmV0d29ya0RhdGEuR2V0Q29udGV4dCgwLCBzcmNDb250ZXh0KTsKKyAgICAgICAgbmV0d29ya0RhdGEuR2V0Q29udGV4dCgwLCBkc3RDb250ZXh0KTsKKyAgICB9CisKKyAgICBtZW1zZXQoJmlwNkhlYWRlciwgMCwgc2l6ZW9mKGlwNkhlYWRlcikpOworICAgIGlwNkhlYWRlci5Jbml0KCk7CisKKyAgICAvLyBUcmFmZmljIENsYXNzIGFuZCBGbG93IExhYmVsCisgICAgaWYgKChoY0N0bCAmIGtIY1RyYWZmaWNGbG93TWFzaykgIT0ga0hjVHJhZmZpY0Zsb3cpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDEpOworCisgICAgICAgIGJ5dGVzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZpcDZIZWFkZXIpOworICAgICAgICBieXRlc1sxXSB8PSAoY3VyWzBdICYgMHhjMCkgPj4gMjsKKworICAgICAgICBpZiAoKGhjQ3RsICYga0hjVHJhZmZpY0NsYXNzKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlc1swXSB8PSAoY3VyWzBdID4+IDIpICYgMHgwZjsKKyAgICAgICAgICAgIGJ5dGVzWzFdIHw9IChjdXJbMF0gPDwgNikgJiAweGMwOworICAgICAgICAgICAgY3VyKys7CisgICAgICAgICAgICByZW1haW5pbmctLTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoaGNDdGwgJiBrSGNGbG93TGFiZWwpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMyk7CisgICAgICAgICAgICBieXRlc1sxXSB8PSBjdXJbMF0gJiAweDBmOworICAgICAgICAgICAgYnl0ZXNbMl0gfD0gY3VyWzFdOworICAgICAgICAgICAgYnl0ZXNbM10gfD0gY3VyWzJdOworICAgICAgICAgICAgY3VyICs9IDM7CisgICAgICAgICAgICByZW1haW5pbmcgLT0gMzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5leHQgSGVhZGVyCisgICAgaWYgKChoY0N0bCAmIGtIY05leHRIZWFkZXIpID09IDApCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDEpOworICAgICAgICBpcDZIZWFkZXIuU2V0TmV4dEhlYWRlcihzdGF0aWNfY2FzdDxJcDY6OklwUHJvdG8+KGN1clswXSkpOworICAgICAgICBjdXIrKzsKKyAgICAgICAgcmVtYWluaW5nLS07CisgICAgfQorCisgICAgLy8gSG9wIExpbWl0CisgICAgc3dpdGNoIChoY0N0bCAmIGtIY0hvcExpbWl0TWFzaykKKyAgICB7CisgICAgY2FzZSBrSGNIb3BMaW1pdDE6CisgICAgICAgIGlwNkhlYWRlci5TZXRIb3BMaW1pdCgxKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtIY0hvcExpbWl0NjQ6CisgICAgICAgIGlwNkhlYWRlci5TZXRIb3BMaW1pdCg2NCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrSGNIb3BMaW1pdDI1NToKKyAgICAgICAgaXA2SGVhZGVyLlNldEhvcExpbWl0KDI1NSk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSAxKTsKKyAgICAgICAgaXA2SGVhZGVyLlNldEhvcExpbWl0KGN1clswXSk7CisgICAgICAgIGN1cisrOworICAgICAgICByZW1haW5pbmctLTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gU291cmNlIEFkZHJlc3MKKyAgICBzd2l0Y2ggKGhjQ3RsICYga0hjU3JjQWRkck1vZGVNYXNrKQorICAgIHsKKyAgICBjYXNlIGtIY1NyY0FkZHJNb2RlMDoKKyAgICAgICAgaWYgKChoY0N0bCAmIGtIY1NyY0FkZHJDb250ZXh0KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IHNpemVvZihJcDY6OkFkZHJlc3MpKTsKKyAgICAgICAgICAgIG1lbWNweSgmaXA2SGVhZGVyLkdldFNvdXJjZSgpLCBjdXIsIHNpemVvZihpcDZIZWFkZXIuR2V0U291cmNlKCkpKTsKKyAgICAgICAgICAgIGN1ciArPSBzaXplb2YoSXA2OjpBZGRyZXNzKTsKKyAgICAgICAgICAgIHJlbWFpbmluZyAtPSBzaXplb2YoSXA2OjpBZGRyZXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrSGNTcmNBZGRyTW9kZTE6CisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gSXA2OjpBZGRyZXNzOjprSW50ZXJmYWNlSWRlbnRpZmllclNpemUpOworICAgICAgICBpcDZIZWFkZXIuR2V0U291cmNlKCkuU2V0SWlkKGN1cik7CisgICAgICAgIGN1ciArPSBJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZTsKKyAgICAgICAgcmVtYWluaW5nIC09IElwNjo6QWRkcmVzczo6a0ludGVyZmFjZUlkZW50aWZpZXJTaXplOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0hjU3JjQWRkck1vZGUyOgorICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDIpOworICAgICAgICBpcDZIZWFkZXIuR2V0U291cmNlKCkubUZpZWxkcy5tOFsxMV0gPSAweGZmOworICAgICAgICBpcDZIZWFkZXIuR2V0U291cmNlKCkubUZpZWxkcy5tOFsxMl0gPSAweGZlOworICAgICAgICBtZW1jcHkoaXA2SGVhZGVyLkdldFNvdXJjZSgpLm1GaWVsZHMubTggKyAxNCwgY3VyLCAyKTsKKyAgICAgICAgY3VyICs9IDI7CisgICAgICAgIHJlbWFpbmluZyAtPSAyOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0hjU3JjQWRkck1vZGUzOgorICAgICAgICBDb21wdXRlSWlkKGFNYWNTb3VyY2UsIHNyY0NvbnRleHQsIGlwNkhlYWRlci5HZXRTb3VyY2UoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICgoaGNDdGwgJiBrSGNTcmNBZGRyTW9kZU1hc2spICE9IGtIY1NyY0FkZHJNb2RlMCkKKyAgICB7CisgICAgICAgIGlmICgoaGNDdGwgJiBrSGNTcmNBZGRyQ29udGV4dCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaXA2SGVhZGVyLkdldFNvdXJjZSgpLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHNyY0NvbnRleHRWYWxpZCk7CisgICAgICAgICAgICBDb3B5Q29udGV4dChzcmNDb250ZXh0LCBpcDZIZWFkZXIuR2V0U291cmNlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKChoY0N0bCAmIGtIY011bHRpY2FzdCkgPT0gMCkKKyAgICB7CisgICAgICAgIC8vIFVuaWNhc3QgRGVzdGluYXRpb24gQWRkcmVzcworCisgICAgICAgIHN3aXRjaCAoaGNDdGwgJiBrSGNEc3RBZGRyTW9kZU1hc2spCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBrSGNEc3RBZGRyTW9kZTA6CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKGhjQ3RsICYga0hjRHN0QWRkckNvbnRleHQpID09IDApOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSBzaXplb2YoSXA2OjpBZGRyZXNzKSk7CisgICAgICAgICAgICBtZW1jcHkoJmlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLCBjdXIsIHNpemVvZihpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSkpOworICAgICAgICAgICAgY3VyICs9IHNpemVvZihJcDY6OkFkZHJlc3MpOworICAgICAgICAgICAgcmVtYWluaW5nIC09IHNpemVvZihJcDY6OkFkZHJlc3MpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrSGNEc3RBZGRyTW9kZTE6CisgICAgICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IElwNjo6QWRkcmVzczo6a0ludGVyZmFjZUlkZW50aWZpZXJTaXplKTsKKyAgICAgICAgICAgIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLlNldElpZChjdXIpOworICAgICAgICAgICAgY3VyICs9IElwNjo6QWRkcmVzczo6a0ludGVyZmFjZUlkZW50aWZpZXJTaXplOworICAgICAgICAgICAgcmVtYWluaW5nIC09IElwNjo6QWRkcmVzczo6a0ludGVyZmFjZUlkZW50aWZpZXJTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrSGNEc3RBZGRyTW9kZTI6CisgICAgICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDIpOworICAgICAgICAgICAgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tOFsxMV0gPSAweGZmOworICAgICAgICAgICAgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tOFsxMl0gPSAweGZlOworICAgICAgICAgICAgbWVtY3B5KGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubTggKyAxNCwgY3VyLCAyKTsKKyAgICAgICAgICAgIGN1ciArPSAyOworICAgICAgICAgICAgcmVtYWluaW5nIC09IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtIY0RzdEFkZHJNb2RlMzoKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoQ29tcHV0ZUlpZChhTWFjRGVzdCwgZHN0Q29udGV4dCwgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChoY0N0bCAmIGtIY0RzdEFkZHJDb250ZXh0KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKGhjQ3RsICYga0hjRHN0QWRkck1vZGVNYXNrKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGRzdENvbnRleHRWYWxpZCk7CisgICAgICAgICAgICBDb3B5Q29udGV4dChkc3RDb250ZXh0LCBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gTXVsdGljYXN0IERlc3RpbmF0aW9uIEFkZHJlc3MKKworICAgICAgICBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm04WzBdID0gMHhmZjsKKworICAgICAgICBpZiAoKGhjQ3RsICYga0hjRHN0QWRkckNvbnRleHQpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaGNDdGwgJiBrSGNEc3RBZGRyTW9kZU1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIGtIY0RzdEFkZHJNb2RlMDoKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IHNpemVvZihJcDY6OkFkZHJlc3MpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tOCwgY3VyLCBzaXplb2YoSXA2OjpBZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgY3VyICs9IHNpemVvZihJcDY6OkFkZHJlc3MpOworICAgICAgICAgICAgICAgIHJlbWFpbmluZyAtPSBzaXplb2YoSXA2OjpBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBrSGNEc3RBZGRyTW9kZTE6CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSA2KTsKKyAgICAgICAgICAgICAgICBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm04WzFdID0gY3VyWzBdOworICAgICAgICAgICAgICAgIG1lbWNweShpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm04ICsgMTEsIGN1ciArIDEsIDUpOworICAgICAgICAgICAgICAgIGN1ciArPSA2OworICAgICAgICAgICAgICAgIHJlbWFpbmluZyAtPSA2OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIGtIY0RzdEFkZHJNb2RlMjoKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDQpOworICAgICAgICAgICAgICAgIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubThbMV0gPSBjdXJbMF07CisgICAgICAgICAgICAgICAgbWVtY3B5KGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubTggKyAxMywgY3VyICsgMSwgMyk7CisgICAgICAgICAgICAgICAgY3VyICs9IDQ7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nIC09IDQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Uga0hjRHN0QWRkck1vZGUzOgorICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMSk7CisgICAgICAgICAgICAgICAgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tOFsxXSA9IDB4MDI7CisgICAgICAgICAgICAgICAgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tOFsxNV0gPSBjdXJbMF07CisgICAgICAgICAgICAgICAgY3VyKys7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nLS07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGhjQ3RsICYga0hjRHN0QWRkck1vZGVNYXNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gNik7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGRzdENvbnRleHRWYWxpZCk7CisgICAgICAgICAgICAgICAgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tOFsxXSA9IGN1clswXTsKKyAgICAgICAgICAgICAgICBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm04WzJdID0gY3VyWzFdOworICAgICAgICAgICAgICAgIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubThbM10gPSBkc3RDb250ZXh0Lm1QcmVmaXhMZW5ndGg7CisgICAgICAgICAgICAgICAgbWVtY3B5KGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubTggKyA0LCBkc3RDb250ZXh0Lm1QcmVmaXgsIDgpOworICAgICAgICAgICAgICAgIG1lbWNweShpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm04ICsgMTIsIGN1ciArIDIsIDQpOworICAgICAgICAgICAgICAgIGN1ciArPSA2OworICAgICAgICAgICAgICAgIHJlbWFpbmluZyAtPSA2OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgoaGNDdGwgJiBrSGNOZXh0SGVhZGVyKSAhPSAwKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSAxKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChEaXNwYXRjaFRvTmV4dEhlYWRlcihjdXJbMF0sIG5leHRIZWFkZXIpKTsKKyAgICAgICAgaXA2SGVhZGVyLlNldE5leHRIZWFkZXIobmV4dEhlYWRlcik7CisgICAgfQorCisgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCitleGl0OgorICAgIHJldHVybiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkgPyBzdGF0aWNfY2FzdDxpbnQ+KGN1ciAtIGFCdWYpIDogLTE7Cit9CisKK2ludCBMb3dwYW46OkRlY29tcHJlc3NFeHRlbnNpb25IZWFkZXIoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX1BBUlNFOworICAgIGNvbnN0IHVpbnQ4X3QgKmN1ciA9IGFCdWY7CisgICAgdWludDE2X3QgcmVtYWluaW5nID0gYUJ1Zkxlbmd0aDsKKyAgICB1aW50OF90IGhkclsyXTsKKyAgICB1aW50OF90IGxlbjsKKyAgICBJcDY6OklwUHJvdG8gbmV4dEhlYWRlcjsKKyAgICB1aW50OF90IGN0bCA9IGN1clswXTsKKyAgICB1aW50OF90IHBhZExlbmd0aDsKKyAgICBJcDY6Ok9wdGlvblBhZDEgb3B0aW9uUGFkMTsKKyAgICBJcDY6Ok9wdGlvblBhZE4gb3B0aW9uUGFkTjsKKworICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMSk7CisgICAgY3VyKys7CisgICAgcmVtYWluaW5nLS07CisKKyAgICAvLyBuZXh0IGhlYWRlcgorICAgIGlmIChjdGwgJiBrRXh0SGRyTmV4dEhlYWRlcikKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMSk7CisKKyAgICAgICAgbGVuID0gY3VyWzBdOworICAgICAgICBjdXIrKzsKKyAgICAgICAgcmVtYWluaW5nLS07CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSBsZW4pOworICAgICAgICBTdWNjZXNzT3JFeGl0KERpc3BhdGNoVG9OZXh0SGVhZGVyKGN1cltsZW5dLCBuZXh0SGVhZGVyKSk7CisgICAgICAgIGhkclswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG5leHRIZWFkZXIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDIpOworCisgICAgICAgIGhkclswXSA9IGN1clswXTsKKyAgICAgICAgbGVuID0gY3VyWzFdOworICAgICAgICBjdXIgKz0gMjsKKyAgICAgICAgcmVtYWluaW5nIC09IDI7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSBsZW4pOworICAgIH0KKworICAgIC8vIGxlbmd0aAorICAgIGhkclsxXSA9IEJpdFZlY3RvckJ5dGVzKHNpemVvZihoZHIpICsgbGVuKSAtIDE7CisKKyAgICBTdWNjZXNzT3JFeGl0KGFNZXNzYWdlLkFwcGVuZChoZHIsIHNpemVvZihoZHIpKSk7CisgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChzaXplb2YoaGRyKSk7CisKKyAgICAvLyBwYXlsb2FkCisgICAgU3VjY2Vzc09yRXhpdChhTWVzc2FnZS5BcHBlbmQoY3VyLCBsZW4pKTsKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KGxlbik7CisgICAgY3VyICs9IGxlbjsKKworICAgIC8vIFRoZSBSRkM2MjgyIHNheXM6ICJUaGUgdHJhaWxpbmcgUGFkMSBvciBQYWROIG9wdGlvbiBNQVkgYmUgZWxpZGVkIGJ5IHRoZSBjb21wcmVzc29yLgorICAgIC8vIEEgZGVjb21wcmVzc29yIE1VU1QgZW5zdXJlIHRoYXQgdGhlIGNvbnRhaW5pbmcgaGVhZGVyIGlzIHBhZGRlZCBvdXQgdG8gYSBtdWx0aXBsZSBvZiA4IG9jdGV0cworICAgIC8vIGluIGxlbmd0aCwgdXNpbmcgYSBQYWQxIG9yIFBhZE4gb3B0aW9uIGlmIG5lY2Vzc2FyeS4iCisgICAgcGFkTGVuZ3RoID0gOCAtICgobGVuICsgc2l6ZW9mKGhkcikpICYgMHgwNyk7CisKKyAgICBpZiAocGFkTGVuZ3RoICE9IDgpCisgICAgeworICAgICAgICBpZiAocGFkTGVuZ3RoID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdGlvblBhZDEuSW5pdCgpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChhTWVzc2FnZS5BcHBlbmQoJm9wdGlvblBhZDEsIHBhZExlbmd0aCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3B0aW9uUGFkTi5Jbml0KHBhZExlbmd0aCk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGFNZXNzYWdlLkFwcGVuZCgmb3B0aW9uUGFkTiwgcGFkTGVuZ3RoKSk7CisgICAgICAgIH0KKworICAgICAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KHBhZExlbmd0aCk7CisgICAgfQorCisgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCitleGl0OgorICAgIHJldHVybiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkgPyBzdGF0aWNfY2FzdDxpbnQ+KGN1ciAtIGFCdWYpIDogLTE7Cit9CisKK2ludCBMb3dwYW46OkRlY29tcHJlc3NVZHBIZWFkZXIoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgsIHVpbnQxNl90IGFEYXRhZ3JhbUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfUEFSU0U7CisgICAgY29uc3QgdWludDhfdCAqY3VyID0gYUJ1ZjsKKyAgICB1aW50MTZfdCByZW1haW5pbmcgPSBhQnVmTGVuZ3RoOworICAgIElwNjo6VWRwSGVhZGVyIHVkcEhlYWRlcjsKKyAgICB1aW50OF90IHVkcEN0bDsKKworICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMSk7CisgICAgdWRwQ3RsID0gY3VyWzBdOworICAgIGN1cisrOworICAgIHJlbWFpbmluZy0tOworCisgICAgbWVtc2V0KCZ1ZHBIZWFkZXIsIDAsIHNpemVvZih1ZHBIZWFkZXIpKTsKKworICAgIC8vIHNvdXJjZSBhbmQgZGVzdCBwb3J0cworICAgIHN3aXRjaCAodWRwQ3RsICYga1VkcFBvcnRNYXNrKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gNCk7CisgICAgICAgIHVkcEhlYWRlci5TZXRTb3VyY2VQb3J0KHN0YXRpY19jYXN0PHVpbnQxNl90PigoY3VyWzBdIDw8IDgpIHwgY3VyWzFdKSk7CisgICAgICAgIHVkcEhlYWRlci5TZXREZXN0aW5hdGlvblBvcnQoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChjdXJbMl0gPDwgOCkgfCBjdXJbM10pKTsKKyAgICAgICAgY3VyICs9IDQ7CisgICAgICAgIHJlbWFpbmluZyAtPSA0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMToKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSAzKTsKKyAgICAgICAgdWRwSGVhZGVyLlNldFNvdXJjZVBvcnQoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChjdXJbMF0gPDwgOCkgfCBjdXJbMV0pKTsKKyAgICAgICAgdWRwSGVhZGVyLlNldERlc3RpbmF0aW9uUG9ydCgweGYwMDAgfCBjdXJbMl0pOworICAgICAgICBjdXIgKz0gMzsKKyAgICAgICAgcmVtYWluaW5nIC09IDM7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAyOgorICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDMpOworICAgICAgICB1ZHBIZWFkZXIuU2V0U291cmNlUG9ydCgweGYwMDAgfCBjdXJbMF0pOworICAgICAgICB1ZHBIZWFkZXIuU2V0RGVzdGluYXRpb25Qb3J0KHN0YXRpY19jYXN0PHVpbnQxNl90PigoY3VyWzFdIDw8IDgpIHwgY3VyWzJdKSk7CisgICAgICAgIGN1ciArPSAzOworICAgICAgICByZW1haW5pbmcgLT0gMzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDM6CisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMSk7CisgICAgICAgIHVkcEhlYWRlci5TZXRTb3VyY2VQb3J0KDB4ZjBiMCB8IChjdXJbMF0gPj4gNCkpOworICAgICAgICB1ZHBIZWFkZXIuU2V0RGVzdGluYXRpb25Qb3J0KDB4ZjBiMCB8IChjdXJbMF0gJiAweGYpKTsKKyAgICAgICAgY3VyICs9IDE7CisgICAgICAgIHJlbWFpbmluZyAtPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBjaGVja3N1bQorICAgIGlmICgodWRwQ3RsICYga1VkcENoZWNrc3VtKSAhPSAwKQorICAgIHsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDIpOworICAgICAgICB1ZHBIZWFkZXIuU2V0Q2hlY2tzdW0oc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChjdXJbMF0gPDwgOCkgfCBjdXJbMV0pKTsKKyAgICAgICAgY3VyICs9IDI7CisgICAgfQorCisgICAgLy8gbGVuZ3RoCisgICAgaWYgKGFEYXRhZ3JhbUxlbmd0aCA9PSAwKQorICAgIHsKKyAgICAgICAgdWRwSGVhZGVyLlNldExlbmd0aChzaXplb2YodWRwSGVhZGVyKSArIHN0YXRpY19jYXN0PHVpbnQxNl90PihhQnVmTGVuZ3RoIC0gKGN1ciAtIGFCdWYpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVkcEhlYWRlci5TZXRMZW5ndGgoYURhdGFncmFtTGVuZ3RoIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCkpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoYU1lc3NhZ2UuQXBwZW5kKCZ1ZHBIZWFkZXIsIHNpemVvZih1ZHBIZWFkZXIpKSk7CisgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChzaXplb2YodWRwSGVhZGVyKSk7CisKKyAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKK2V4aXQ6CisgICAgcmV0dXJuIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKSA/IHN0YXRpY19jYXN0PGludD4oY3VyIC0gYUJ1ZikgOiAtMTsKK30KKworaW50IExvd3Bhbjo6RGVjb21wcmVzcyhNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoLCB1aW50MTZfdCBhRGF0YWdyYW1MZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX1BBUlNFOworICAgIElwNjo6SGVhZGVyIGlwNkhlYWRlcjsKKyAgICBjb25zdCB1aW50OF90ICpjdXIgPSBhQnVmOworICAgIHVpbnQxNl90IHJlbWFpbmluZyA9IGFCdWZMZW5ndGg7CisgICAgYm9vbCBjb21wcmVzc2VkOworICAgIGludCBydmFsOworICAgIHVpbnQxNl90IGlwNlBheWxvYWRMZW5ndGg7CisgICAgdWludDE2X3QgY29tcHJlc3NlZExlbmd0aCA9IDA7CisgICAgdWludDE2X3QgY3VycmVudE9mZnNldCA9IGFNZXNzYWdlLkdldE9mZnNldCgpOworCisgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSAyKTsKKyAgICBjb21wcmVzc2VkID0gKCgoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGN1clswXSkgPDwgOCkgfCBjdXJbMV0pICYga0hjTmV4dEhlYWRlcikgIT0gMDsKKworICAgIFZlcmlmeU9yRXhpdCgocnZhbCA9IERlY29tcHJlc3NCYXNlSGVhZGVyKGlwNkhlYWRlciwgYU1hY1NvdXJjZSwgYU1hY0Rlc3QsIGN1ciwgcmVtYWluaW5nKSkgPj0gMCk7CisKKyAgICBjdXIgKz0gcnZhbDsKKyAgICByZW1haW5pbmcgLT0gcnZhbDsKKworICAgIFN1Y2Nlc3NPckV4aXQoYU1lc3NhZ2UuQXBwZW5kKCZpcDZIZWFkZXIsIHNpemVvZihpcDZIZWFkZXIpKSk7CisgICAgU3VjY2Vzc09yRXhpdChhTWVzc2FnZS5Nb3ZlT2Zmc2V0KHNpemVvZihpcDZIZWFkZXIpKSk7CisKKyAgICB3aGlsZSAoY29tcHJlc3NlZCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMSk7CisKKyAgICAgICAgaWYgKChjdXJbMF0gJiBrRXh0SGRyRGlzcGF0Y2hNYXNrKSA9PSBrRXh0SGRyRGlzcGF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoY3VyWzBdICYga0V4dEhkckVpZE1hc2spID09IGtFeHRIZHJFaWRJcDYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29tcHJlc3NlZCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgY3VyKys7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nLS07CisKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoKHJ2YWwgPSBEZWNvbXByZXNzKGFNZXNzYWdlLCBhTWFjU291cmNlLCBhTWFjRGVzdCwgY3VyLCByZW1haW5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRGF0YWdyYW1MZW5ndGgpKSA+PSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb21wcmVzc2VkID0gKGN1clswXSAmIGtFeHRIZHJOZXh0SGVhZGVyKSAhPSAwOworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgocnZhbCA9IERlY29tcHJlc3NFeHRlbnNpb25IZWFkZXIoYU1lc3NhZ2UsIGN1ciwgcmVtYWluaW5nKSkgPj0gMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGN1clswXSAmIGtVZHBEaXNwYXRjaE1hc2spID09IGtVZHBEaXNwYXRjaCkKKyAgICAgICAgeworICAgICAgICAgICAgY29tcHJlc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KChydmFsID0gRGVjb21wcmVzc1VkcEhlYWRlcihhTWVzc2FnZSwgY3VyLCByZW1haW5pbmcsIGFEYXRhZ3JhbUxlbmd0aCkpID49IDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSBydmFsKTsKKyAgICAgICAgY3VyICs9IHJ2YWw7CisgICAgICAgIHJlbWFpbmluZyAtPSBydmFsOworICAgIH0KKworICAgIGNvbXByZXNzZWRMZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oY3VyIC0gYUJ1Zik7CisKKyAgICBpZiAoYURhdGFncmFtTGVuZ3RoKQorICAgIHsKKyAgICAgICAgaXA2UGF5bG9hZExlbmd0aCA9IEhvc3RTd2FwMTYoYURhdGFncmFtTGVuZ3RoIC0gY3VycmVudE9mZnNldCAtIHNpemVvZihJcDY6OkhlYWRlcikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpcDZQYXlsb2FkTGVuZ3RoID0gSG9zdFN3YXAxNihhTWVzc2FnZS5HZXRPZmZzZXQoKSAtIGN1cnJlbnRPZmZzZXQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSXA2OjpIZWFkZXIpICsgYUJ1Zkxlbmd0aCAtIGNvbXByZXNzZWRMZW5ndGgpOworICAgIH0KKworICAgIGFNZXNzYWdlLldyaXRlKGN1cnJlbnRPZmZzZXQgKyBJcDY6OkhlYWRlcjo6R2V0UGF5bG9hZExlbmd0aE9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgIHNpemVvZihpcDZQYXlsb2FkTGVuZ3RoKSwgJmlwNlBheWxvYWRMZW5ndGgpOworCisgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCitleGl0OgorICAgIHJldHVybiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkgPyBzdGF0aWNfY2FzdDxpbnQ+KGNvbXByZXNzZWRMZW5ndGgpIDogLTE7Cit9CisKK290RXJyb3IgTWVzaEhlYWRlcjo6SW5pdChjb25zdCB1aW50OF90ICphRnJhbWUsIHVpbnQ4X3QgYUZyYW1lTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZUxlbmd0aCA+PSAxLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgbURpc3BhdGNoSG9wc0xlZnQgPSAqYUZyYW1lKys7CisgICAgYUZyYW1lTGVuZ3RoLS07CisKKyAgICBpZiAoSXNEZWVwSG9wc0xlZnRGaWVsZCgpKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZUxlbmd0aCA+PSAxLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgICAgIG1EZWVwSG9wc0xlZnQgPSAqYUZyYW1lKys7CisgICAgICAgIGFGcmFtZUxlbmd0aC0tOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVlcEhvcHNMZWZ0ID0gMDsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoYUZyYW1lTGVuZ3RoID49IHNpemVvZihtQWRkcmVzcyksIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKyAgICBtZW1jcHkoJm1BZGRyZXNzLCBhRnJhbWUsIHNpemVvZihtQWRkcmVzcykpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNZXNoSGVhZGVyOjpJbml0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQxNl90IG9mZnNldCA9IDA7CisgICAgdWludDE2X3QgYnl0ZXNSZWFkOworCisgICAgYnl0ZXNSZWFkID0gYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihtRGlzcGF0Y2hIb3BzTGVmdCksICZtRGlzcGF0Y2hIb3BzTGVmdCk7CisgICAgVmVyaWZ5T3JFeGl0KGJ5dGVzUmVhZCA9PSBzaXplb2YobURpc3BhdGNoSG9wc0xlZnQpLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgb2Zmc2V0ICs9IGJ5dGVzUmVhZDsKKworICAgIGlmIChJc0RlZXBIb3BzTGVmdEZpZWxkKCkpCisgICAgeworICAgICAgICBieXRlc1JlYWQgPSBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKG1EZWVwSG9wc0xlZnQpLCAmbURlZXBIb3BzTGVmdCk7CisgICAgICAgIFZlcmlmeU9yRXhpdChieXRlc1JlYWQgPT0gc2l6ZW9mKG1EZWVwSG9wc0xlZnQpLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgICAgIG9mZnNldCArPSBieXRlc1JlYWQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EZWVwSG9wc0xlZnQgPSAwOworICAgIH0KKworICAgIGJ5dGVzUmVhZCA9IGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YobUFkZHJlc3MpLCAmbUFkZHJlc3MpOworICAgIFZlcmlmeU9yRXhpdChieXRlc1JlYWQgPT0gc2l6ZW9mKG1BZGRyZXNzKSwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIExvd3BhbgorfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbG93cGFuLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9sb3dwYW4uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5N2RjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbG93cGFuLmhwcApAQCAtMCwwICsxLDQ5OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIDZMb1dQQU4gaGVhZGVyIGNvbXByZXNzaW9uLgorICovCisKKyNpZm5kZWYgTE9XUEFOX0hQUF8KKyNkZWZpbmUgTE9XUEFOX0hQUF8KKworI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLTZsb3dwYW4KKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIDZMb1dQQU4gaGVhZGVyIGNvbXByZXNzaW9uLgorICoKKyAqIEB7CisgKi8KKworLyoqCisgKiBAbmFtZXNwYWNlIG90OjpMb3dwYW4KKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBuYW1lc3BhY2UgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIDZMb1dQQU4gbWVzc2FnZSBwcm9jZXNzaW5nLgorICoKKyAqLworbmFtZXNwYWNlIExvd3BhbiB7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIExPV1BBTl9JUEhDIENvbnRleHQuCisgKgorICovCitzdHJ1Y3QgQ29udGV4dAoreworICAgIGNvbnN0IHVpbnQ4X3QgKm1QcmVmaXg7ICAgICAgICAvLy88IEEgcG9pbnRlciB0byB0aGUgcHJlZml4LgorICAgIHVpbnQ4X3QgICAgICAgIG1QcmVmaXhMZW5ndGg7ICAvLy88IFRoZSBwcmVmaXggbGVuZ3RoLgorICAgIHVpbnQ4X3QgICAgICAgIG1Db250ZXh0SWQ7ICAgICAvLy88IFRoZSBDb250ZXh0IElELgorICAgIGJvb2wgICAgICAgICAgIG1Db21wcmVzc0ZsYWc7ICAvLy88IFRoZSBDb250ZXh0IGNvbXByZXNzaW9uIGZsYWcuCit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBMT1dQQU5fSVBIQyBoZWFkZXIgY29tcHJlc3Npb24uCisgKgorICovCitjbGFzcyBMb3dwYW46IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBMb3dwYW4oVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGhlYWRlciBpcyBhIExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIGhlYWRlciBtYXRjaGVzIHRoZSBMT1dQQU5fSVBIQyBkaXNwYXRjaCB2YWx1ZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgaGVhZGVyIGRvZXMgbm90IG1hdGNoIHRoZSBMT1dQQU5fSVBIQyBkaXNwYXRjaCB2YWx1ZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgYm9vbCBJc0xvd3BhbkhjKHVpbnQ4X3QgKmFIZWFkZXIpIHsKKyAgICAgICAgcmV0dXJuIChhSGVhZGVyWzBdICYgKExvd3Bhbjo6a0hjRGlzcGF0Y2hNYXNrID4+IDgpKSA9PSAoTG93cGFuOjprSGNEaXNwYXRjaCA+PiA4KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb21wcmVzc2VzIGFuIElQdjYgaGVhZGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNzYWdlICAgICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gICBhTWFjU291cmNlICAgVGhlIE1BQyBzb3VyY2UgYWRkcmVzcy4KKyAgICAgKiBAcGFyYW1baW5dICAgYU1hY0Rlc3QgICAgIFRoZSBNQUMgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYUJ1ZiAgICAgICAgIEEgcG9pbnRlciB3aGVyZSB0aGUgY29tcHJlc3NlZCBJUHY2IGhlYWRlciB3aWxsIGJlIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIGhlYWRlciBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIGludCBDb21wcmVzcyhNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNEZXN0LCB1aW50OF90ICphQnVmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRlY29tcHJlc3NlcyBhIExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHdoZXJlIHRoZSBJUHY2IGhlYWRlciB3aWxsIGJlIHBsYWNlZC4KKyAgICAgKiBAcGFyYW1baW5dICAgYU1hY1NvdXJjZSAgICBUaGUgTUFDIHNvdXJjZSBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gICBhTWFjRGVzdCAgICAgIFRoZSBNQUMgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKiBAcGFyYW1baW5dICAgYUJ1ZiAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICAgKiBAcGFyYW1baW5dICAgYUJ1ZkxlbiAgICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIEBwIGFCdWYuCisgICAgICogQHBhcmFtW2luXSAgIGFEYXRhZ3JhbUxlbiAgVGhlIElQdjYgZGF0YWdyYW0gbGVuZ3RoLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgaGVhZGVyIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgaW50IERlY29tcHJlc3MoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY1NvdXJjZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjRGVzdCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuLCB1aW50MTZfdCBhRGF0YWdyYW1MZW4pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVjb21wcmVzc2VzIGEgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFIZWFkZXIgICAgICAgQSByZWZlcmVuY2Ugd2hlcmUgdGhlIElQdjYgaGVhZGVyIHdpbGwgYmUgcGxhY2VkLgorICAgICAqIEBwYXJhbVtpbl0gICBhTWFjU291cmNlICAgIFRoZSBNQUMgc291cmNlIGFkZHJlc3MuCisgICAgICogQHBhcmFtW2luXSAgIGFNYWNEZXN0ICAgICAgVGhlIE1BQyBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gICBhQnVmICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgICAqIEBwYXJhbVtpbl0gICBhQnVmTGVuZ3RoICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gQHAgYUJ1Zi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIGhlYWRlciBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIGludCBEZWNvbXByZXNzQmFzZUhlYWRlcihJcDY6OkhlYWRlciAmYUhlYWRlciwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrSGNEaXNwYXRjaCAgICAgICAgPSAzIDw8IDEzLAorICAgICAgICBrSGNEaXNwYXRjaE1hc2sgICAgPSA3IDw8IDEzLAorCisgICAgICAgIGtIY1RyYWZmaWNDbGFzcyAgICA9IDEgPDwgMTEsCisgICAgICAgIGtIY0Zsb3dMYWJlbCAgICAgICA9IDIgPDwgMTEsCisgICAgICAgIGtIY1RyYWZmaWNGbG93ICAgICA9IDMgPDwgMTEsCisgICAgICAgIGtIY1RyYWZmaWNGbG93TWFzayA9IDMgPDwgMTEsCisgICAgICAgIGtIY05leHRIZWFkZXIgICAgICA9IDEgPDwgMTAsCisgICAgICAgIGtIY0hvcExpbWl0MSAgICAgICA9IDEgPDwgOCwKKyAgICAgICAga0hjSG9wTGltaXQ2NCAgICAgID0gMiA8PCA4LAorICAgICAgICBrSGNIb3BMaW1pdDI1NSAgICAgPSAzIDw8IDgsCisgICAgICAgIGtIY0hvcExpbWl0TWFzayAgICA9IDMgPDwgOCwKKyAgICAgICAga0hjQ29udGV4dElkICAgICAgID0gMSA8PCA3LAorICAgICAgICBrSGNTcmNBZGRyQ29udGV4dCAgPSAxIDw8IDYsCisgICAgICAgIGtIY1NyY0FkZHJNb2RlMCAgICA9IDAgPDwgNCwKKyAgICAgICAga0hjU3JjQWRkck1vZGUxICAgID0gMSA8PCA0LAorICAgICAgICBrSGNTcmNBZGRyTW9kZTIgICAgPSAyIDw8IDQsCisgICAgICAgIGtIY1NyY0FkZHJNb2RlMyAgICA9IDMgPDwgNCwKKyAgICAgICAga0hjU3JjQWRkck1vZGVNYXNrID0gMyA8PCA0LAorICAgICAgICBrSGNNdWx0aWNhc3QgICAgICAgPSAxIDw8IDMsCisgICAgICAgIGtIY0RzdEFkZHJDb250ZXh0ICA9IDEgPDwgMiwKKyAgICAgICAga0hjRHN0QWRkck1vZGUwICAgID0gMCA8PCAwLAorICAgICAgICBrSGNEc3RBZGRyTW9kZTEgICAgPSAxIDw8IDAsCisgICAgICAgIGtIY0RzdEFkZHJNb2RlMiAgICA9IDIgPDwgMCwKKyAgICAgICAga0hjRHN0QWRkck1vZGUzICAgID0gMyA8PCAwLAorICAgICAgICBrSGNEc3RBZGRyTW9kZU1hc2sgPSAzIDw8IDAsCisKKyAgICAgICAga0V4dEhkckRpc3BhdGNoICAgICA9IDB4ZTAsCisgICAgICAgIGtFeHRIZHJEaXNwYXRjaE1hc2sgPSAweGYwLAorCisgICAgICAgIGtFeHRIZHJFaWRIYmggICAgICAgPSAweDAwLAorICAgICAgICBrRXh0SGRyRWlkUm91dGluZyAgID0gMHgwMiwKKyAgICAgICAga0V4dEhkckVpZEZyYWdtZW50ICA9IDB4MDQsCisgICAgICAgIGtFeHRIZHJFaWREc3QgICAgICAgPSAweDA2LAorICAgICAgICBrRXh0SGRyRWlkTW9iaWxpdHkgID0gMHgwOCwKKyAgICAgICAga0V4dEhkckVpZElwNiAgICAgICA9IDB4MGUsCisgICAgICAgIGtFeHRIZHJFaWRNYXNrICAgICAgPSAweDBlLAorCisgICAgICAgIGtFeHRIZHJOZXh0SGVhZGVyICAgPSAweDAxLAorCisgICAgICAgIGtVZHBEaXNwYXRjaCAgICAgICAgPSAweGYwLAorICAgICAgICBrVWRwRGlzcGF0Y2hNYXNrICAgID0gMHhmOCwKKyAgICAgICAga1VkcENoZWNrc3VtICAgICAgICA9IDEgPDwgMiwKKyAgICAgICAga1VkcFBvcnRNYXNrICAgICAgICA9IDMgPDwgMCwKKyAgICB9OworCisgICAgaW50IENvbXByZXNzRXh0ZW5zaW9uSGVhZGVyKE1lc3NhZ2UgJm1lc3NhZ2UsIHVpbnQ4X3QgKmFCdWYsIHVpbnQ4X3QgJm5leHRIZWFkZXIpOworICAgIGludCBDb21wcmVzc1NvdXJjZUlpZChjb25zdCBNYWM6OkFkZHJlc3MgJm1hY2FkZHIsIGNvbnN0IElwNjo6QWRkcmVzcyAmaXBhZGRyLCBjb25zdCBDb250ZXh0ICZhQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgJmhjQ3RsLCB1aW50OF90ICphQnVmKTsKKyAgICBpbnQgQ29tcHJlc3NEZXN0aW5hdGlvbklpZChjb25zdCBNYWM6OkFkZHJlc3MgJm1hY2FkZHIsIGNvbnN0IElwNjo6QWRkcmVzcyAmaXBhZGRyLCBjb25zdCBDb250ZXh0ICZhQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAmaGNDdGwsIHVpbnQ4X3QgKmFCdWYpOworICAgIGludCBDb21wcmVzc011bHRpY2FzdChjb25zdCBJcDY6OkFkZHJlc3MgJmlwYWRkciwgdWludDE2X3QgJmhjQ3RsLCB1aW50OF90ICphQnVmKTsKKyAgICBpbnQgQ29tcHJlc3NVZHAoTWVzc2FnZSAmbWVzc2FnZSwgdWludDhfdCAqYUJ1Zik7CisKKyAgICBpbnQgRGVjb21wcmVzc0V4dGVuc2lvbkhlYWRlcihNZXNzYWdlICZtZXNzYWdlLCBjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKTsKKyAgICBpbnQgRGVjb21wcmVzc1VkcEhlYWRlcihNZXNzYWdlICZtZXNzYWdlLCBjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoLCB1aW50MTZfdCBkYXRhZ3JhbUxlbmd0aCk7CisgICAgb3RFcnJvciBEaXNwYXRjaFRvTmV4dEhlYWRlcih1aW50OF90IGRpc3BhdGNoLCBJcDY6OklwUHJvdG8gJm5leHRIZWFkZXIpOworCisgICAgc3RhdGljIG90RXJyb3IgQ29weUNvbnRleHQoY29uc3QgQ29udGV4dCAmYUNvbnRleHQsIElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpOworICAgIHN0YXRpYyBvdEVycm9yIENvbXB1dGVJaWQoY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjQWRkciwgY29uc3QgQ29udGV4dCAmYUNvbnRleHQsIElwNjo6QWRkcmVzcyAmYUlwQWRkcmVzcyk7Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBNZXNoIEhlYWRlciBnZW5lcmF0aW9uIGFuZCBwcm9jZXNzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE1lc2hIZWFkZXIKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrQWRkaXRpb25hbEhvcHNMZWZ0ID0gMSAgICAvLy88IFRoZSBhZGRpdGlvbmFsIHZhbHVlIHRoYXQgaXMgYWRkZWQgdG8gcHJlZGljdGVkIHZhbHVlIG9mIHRoZSByb3V0ZSBjb3N0LgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yIGZvciB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTWVzaEhlYWRlcih2b2lkKSB7IG1lbXNldCh0aGlzLCAwLCBzaXplb2YoKnRoaXMpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IG1EaXNwYXRjaEhvcHNMZWZ0ID0ga0Rpc3BhdGNoIHwga1NvdXJjZVNob3J0IHwga0Rlc3RpbmF0aW9uU2hvcnQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBtZXNoIGhlYWRlciBmcm9tIGEgZnJhbWUgQHAgYUZyYW1lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lICAgICAgICBUaGUgcG9pbnRlciB0byB0aGUgZnJhbWUuCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIHRoZSBmcmFtZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgTWVzaCBIZWFkZXIgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfRkFJTEVEICAgTWVzaCBoZWFkZXIgY291bGQgbm90IGJlIGluaXRpYWxpemVkIGZyb20gQHAgYUZyYW1lIChlLmcuLCBmcmFtZSBub3QgbG9uZyBlbm91Z2gpLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBJbml0KGNvbnN0IHVpbnQ4X3QgKmFGcmFtZSwgdWludDhfdCBhRnJhbWVMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIG1lc2ggaGVhZGVyIGZyb20gYSBtZXNzYWdlIG9iamVjdCBAcCBhTWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBUaGUgbWVzc2FnZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIE1lc2ggSGVhZGVyIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgIE1lc2ggaGVhZGVyIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZCBmcm9tIEAgYU1lc3NhZ2UoZS5nLiwgbm90IGxvbmcgZW5vdWdoKS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgSW5pdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGhlYWRlciBpcyBhIE1lc2ggSGVhZGVyLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIGhlYWRlciBtYXRjaGVzIHRoZSBNZXNoIEhlYWRlciBkaXNwYXRjaCB2YWx1ZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgaGVhZGVyIGRvZXMgbm90IG1hdGNoIHRoZSBNZXNoIEhlYWRlciBkaXNwYXRjaCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNNZXNoSGVhZGVyKHZvaWQpIHsgcmV0dXJuIChtRGlzcGF0Y2hIb3BzTGVmdCAmIGtEaXNwYXRjaE1hc2spID09IGtEaXNwYXRjaDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBNZXNoIEhlYWRlciBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIGhlYWRlciBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBoZWFkZXIgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIHsgcmV0dXJuIChtRGlzcGF0Y2hIb3BzTGVmdCAmIGtTb3VyY2VTaG9ydCkgJiYgKG1EaXNwYXRjaEhvcHNMZWZ0ICYga0Rlc3RpbmF0aW9uU2hvcnQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGhlYWRlciBjb250YWlucyBEZWVwIEhvcHMgTGVmdCBmaWVsZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBoZWFkZXIgZG9lcyBjb250YWluIERlZXAgSG9wcyBMZWZ0IGZpZWxkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBoZWFkZXIgZG9lcyBub3QgY29udGFpbiBEZWVwIEhvcHMgTGVmdCBmaWVsZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNEZWVwSG9wc0xlZnRGaWVsZCh2b2lkKSB7IHJldHVybiAobURpc3BhdGNoSG9wc0xlZnQgJiBrSG9wc0xlZnRNYXNrKSA9PSBrRGVlcEhvcHNMZWZ0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgTWVzaCBIZWFkZXIgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgc2l6ZSBvZiB0aGUgTWVzaCBIZWFkZXIgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldEhlYWRlckxlbmd0aCh2b2lkKSB7IHJldHVybiBzaXplb2YoKnRoaXMpIC0gKElzRGVlcEhvcHNMZWZ0RmllbGQoKSA/IDAgOiBzaXplb2YobURlZXBIb3BzTGVmdCkpIDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSG9wcyBMZWZ0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEhvcHMgTGVmdCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0SG9wc0xlZnQodm9pZCkgeyByZXR1cm4gSXNEZWVwSG9wc0xlZnRGaWVsZCgpID8gbURlZXBIb3BzTGVmdCA6IG1EaXNwYXRjaEhvcHNMZWZ0ICYga0hvcHNMZWZ0TWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSG9wcyBMZWZ0IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUhvcHMgIFRoZSBIb3BzIExlZnQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEhvcHNMZWZ0KHVpbnQ4X3QgYUhvcHMpIHsKKyAgICAgICAgaWYgKGFIb3BzIDwga0RlZXBIb3BzTGVmdCAmJiAhSXNEZWVwSG9wc0xlZnRGaWVsZCgpKSB7CisgICAgICAgICAgICBtRGlzcGF0Y2hIb3BzTGVmdCA9IChtRGlzcGF0Y2hIb3BzTGVmdCAmIH5rSG9wc0xlZnRNYXNrKSB8IGFIb3BzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbURpc3BhdGNoSG9wc0xlZnQgPSAobURpc3BhdGNoSG9wc0xlZnQgJiB+a0hvcHNMZWZ0TWFzaykgfCBrRGVlcEhvcHNMZWZ0OworICAgICAgICAgICAgbURlZXBIb3BzTGVmdCA9IGFIb3BzOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTWVzaCBTb3VyY2UgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBNZXNoIFNvdXJjZSBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0U291cmNlKHZvaWQpIHsgcmV0dXJuIEhvc3RTd2FwMTYobUFkZHJlc3MubVNvdXJjZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1lc2ggU291cmNlIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU291cmNlICBUaGUgTWVzaCBTb3VyY2UgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U291cmNlKHVpbnQxNl90IGFTb3VyY2UpIHsgbUFkZHJlc3MubVNvdXJjZSA9IEhvc3RTd2FwMTYoYVNvdXJjZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1lc2ggRGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBNZXNoIERlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXREZXN0aW5hdGlvbih2b2lkKSB7IHJldHVybiBIb3N0U3dhcDE2KG1BZGRyZXNzLm1EZXN0aW5hdGlvbik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1lc2ggRGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEZXN0aW5hdGlvbiAgVGhlIE1lc2ggRGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RGVzdGluYXRpb24odWludDE2X3QgYURlc3RpbmF0aW9uKSB7IG1BZGRyZXNzLm1EZXN0aW5hdGlvbiA9IEhvc3RTd2FwMTYoYURlc3RpbmF0aW9uKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBNZXNoIEhlYWRlciB0byB0aGUgQHAgYUZyYW1lIGZyYW1lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lICBUaGUgcG9pbnRlciB0byB0aGUgZnJhbWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEFwcGVuZFRvKHVpbnQ4X3QgKmFGcmFtZSkgeworICAgICAgICAqYUZyYW1lKysgPSBtRGlzcGF0Y2hIb3BzTGVmdDsKKworICAgICAgICBpZiAoSXNEZWVwSG9wc0xlZnRGaWVsZCgpKSB7CisgICAgICAgICAgICAqYUZyYW1lKysgPSBtRGVlcEhvcHNMZWZ0OworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KGFGcmFtZSwgJm1BZGRyZXNzLCBzaXplb2YobUFkZHJlc3MpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0Rpc3BhdGNoICAgICAgICAgPSAyIDw8IDYsCisgICAgICAgIGtEaXNwYXRjaE1hc2sgICAgID0gMyA8PCA2LAorICAgICAgICBrSG9wc0xlZnRNYXNrICAgICA9IDB4MGYsCisgICAgICAgIGtTb3VyY2VTaG9ydCAgICAgID0gMSA8PCA1LAorICAgICAgICBrRGVzdGluYXRpb25TaG9ydCA9IDEgPDwgNCwKKyAgICAgICAga0RlZXBIb3BzTGVmdCAgICAgPSAweDBmCisgICAgfTsKKworICAgIHVpbnQ4X3QgIG1EaXNwYXRjaEhvcHNMZWZ0OworICAgIHVpbnQ4X3QgIG1EZWVwSG9wc0xlZnQ7CisgICAgc3RydWN0CisgICAgeworICAgICAgICB1aW50MTZfdCBtU291cmNlOworICAgICAgICB1aW50MTZfdCBtRGVzdGluYXRpb247CisgICAgfSBtQWRkcmVzcyBPVF9UT09MX1BBQ0tFRF9GSUVMRDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBGcmFnbWVudCBIZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBGcmFnbWVudEhlYWRlcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBGcmFnbWVudCBIZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtRGlzcGF0Y2hTaXplID0gSG9zdFN3YXAxNihrRGlzcGF0Y2gpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGhlYWRlciBpcyBhIEZyYWdtZW50IEhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBoZWFkZXIgbWF0Y2hlcyB0aGUgRnJhZ21lbnQgSGVhZGVyIGRpc3BhdGNoIHZhbHVlLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBoZWFkZXIgZG9lcyBub3QgbWF0Y2ggdGhlIEZyYWdtZW50IEhlYWRlciBkaXNwYXRjaCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNGcmFnbWVudEhlYWRlcih2b2lkKSB7IHJldHVybiAoSG9zdFN3YXAxNihtRGlzcGF0Y2hTaXplKSAmIGtEaXNwYXRjaE1hc2spID09IGtEaXNwYXRjaDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRnJhZ21lbnQgSGVhZGVyIGxlbmd0aC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBGcmFnbWVudCBIZWFkZXIgbGVuZ3RoIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRIZWFkZXJMZW5ndGgodm9pZCkgeworICAgICAgICByZXR1cm4gKEhvc3RTd2FwMTYobURpc3BhdGNoU2l6ZSkgJiBrT2Zmc2V0KSA/IHNpemVvZigqdGhpcykgOiBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKG1PZmZzZXQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIERhdGFncmFtIFNpemUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRGF0YWdyYW0gU2l6ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldERhdGFncmFtU2l6ZSh2b2lkKSB7IHJldHVybiBIb3N0U3dhcDE2KG1EaXNwYXRjaFNpemUpICYga1NpemVNYXNrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBEYXRhZ3JhbSBTaXplIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNpemUgIFRoZSBEYXRhZ3JhbSBTaXplIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREYXRhZ3JhbVNpemUodWludDE2X3QgYVNpemUpIHsKKyAgICAgICAgbURpc3BhdGNoU2l6ZSA9IEhvc3RTd2FwMTYoKEhvc3RTd2FwMTYobURpc3BhdGNoU2l6ZSkgJiB+a1NpemVNYXNrKSB8IChhU2l6ZSAmIGtTaXplTWFzaykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIERhdGFncmFtIFRhZyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBEYXRhZ3JhbSBUYWcgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXREYXRhZ3JhbVRhZyh2b2lkKSB7IHJldHVybiBIb3N0U3dhcDE2KG1UYWcpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBEYXRhZ3JhbSBUYWcgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGFnICBUaGUgRGF0YWdyYW0gVGFnIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREYXRhZ3JhbVRhZyh1aW50MTZfdCBhVGFnKSB7IG1UYWcgPSBIb3N0U3dhcDE2KGFUYWcpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBEYXRhZ3JhbSBPZmZzZXQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRGF0YWdyYW0gT2Zmc2V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0RGF0YWdyYW1PZmZzZXQodm9pZCkgeyByZXR1cm4gKEhvc3RTd2FwMTYobURpc3BhdGNoU2l6ZSkgJiBrT2Zmc2V0KSA/IHN0YXRpY19jYXN0PHVpbnQxNl90PihtT2Zmc2V0KSAqIDggOiAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBEYXRhZ3JhbSBPZmZzZXQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhT2Zmc2V0ICBUaGUgRGF0YWdyYW0gT2Zmc2V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREYXRhZ3JhbU9mZnNldCh1aW50MTZfdCBhT2Zmc2V0KSB7CisgICAgICAgIGlmIChhT2Zmc2V0ID09IDApIHsKKyAgICAgICAgICAgIG1EaXNwYXRjaFNpemUgPSBIb3N0U3dhcDE2KEhvc3RTd2FwMTYobURpc3BhdGNoU2l6ZSkgJiB+a09mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtRGlzcGF0Y2hTaXplID0gSG9zdFN3YXAxNihIb3N0U3dhcDE2KG1EaXNwYXRjaFNpemUpIHwga09mZnNldCk7CisgICAgICAgICAgICBtT2Zmc2V0ID0gKGFPZmZzZXQgPj4gMykgJiBrT2Zmc2V0TWFzazsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrRGlzcGF0Y2ggICAgID0gMyA8PCAxNCwKKyAgICAgICAga09mZnNldCAgICAgICA9IDEgPDwgMTMsCisgICAgICAgIGtEaXNwYXRjaE1hc2sgPSAweGQ4MDAsICAvLy88IEFjY2VwdCBGUkFHMSBhbmQgRlJBR04gb25seS4KKyAgICAgICAga1NpemVNYXNrICAgICA9IDB4N2ZmLAorICAgICAgICBrT2Zmc2V0TWFzayAgID0gMHhmZiwKKyAgICB9OworCisgICAgdWludDE2X3QgbURpc3BhdGNoU2l6ZTsKKyAgICB1aW50MTZfdCBtVGFnOworICAgIHVpbnQ4X3QgIG1PZmZzZXQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBMb3dwYW4KK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIExPV1BBTl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbWVzaF9mb3J3YXJkZXIuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL21lc2hfZm9yd2FyZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTEwYjllCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL21lc2hfZm9yd2FyZGVyLmNwcApAQCAtMCwwICsxLDIzNjYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgbWVzaCBmb3J3YXJkaW5nIG9mIElQdjYvNkxvV1BBTiBtZXNzYWdlcy4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJtZXNoX2ZvcndhcmRlci50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibWVzaF9mb3J3YXJkZXIuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9maWx0ZXIuaHBwIgorI2luY2x1ZGUgIm5ldC9uZXRpZi5ocHAiCisjaW5jbHVkZSAibmV0L3RjcC5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGUuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CisKK01lc2hGb3J3YXJkZXI6Ok1lc2hGb3J3YXJkZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKGFUaHJlYWROZXRpZiksCisgICAgbU1hY1JlY2VpdmVyKCZNZXNoRm9yd2FyZGVyOjpIYW5kbGVSZWNlaXZlZEZyYW1lLCAmTWVzaEZvcndhcmRlcjo6SGFuZGxlRGF0YVBvbGxUaW1lb3V0LCB0aGlzKSwKKyAgICBtTWFjU2VuZGVyKCZNZXNoRm9yd2FyZGVyOjpIYW5kbGVGcmFtZVJlcXVlc3QsICZNZXNoRm9yd2FyZGVyOjpIYW5kbGVTZW50RnJhbWUsIHRoaXMpLAorICAgIG1EaXNjb3ZlclRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZNZXNoRm9yd2FyZGVyOjpIYW5kbGVEaXNjb3ZlclRpbWVyLCB0aGlzKSwKKyAgICBtUmVhc3NlbWJseVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZNZXNoRm9yd2FyZGVyOjpIYW5kbGVSZWFzc2VtYmx5VGltZXIsIHRoaXMpLAorICAgIG1NZXNzYWdlTmV4dE9mZnNldCgwKSwKKyAgICBtU2VuZE1lc3NhZ2VGcmFtZUNvdW50ZXIoMCksCisgICAgbVNlbmRNZXNzYWdlKE5VTEwpLAorICAgIG1TZW5kTWVzc2FnZUlzQVJldHJhbnNtaXNzaW9uKGZhbHNlKSwKKyAgICBtU2VuZE1lc3NhZ2VNYXhNYWNUeEF0dGVtcHRzKE1hYzo6a0RpcmVjdEZyYW1lTWFjVHhBdHRlbXB0cyksCisgICAgbVNlbmRNZXNzYWdlS2V5SWQoMCksCisgICAgbVNlbmRNZXNzYWdlRGF0YVNlcXVlbmNlTnVtYmVyKDApLAorICAgIG1TdGFydENoaWxkSW5kZXgoMCksCisgICAgbU1lc2hTb3VyY2UoTWFjOjprU2hvcnRBZGRySW52YWxpZCksCisgICAgbU1lc2hEZXN0KE1hYzo6a1Nob3J0QWRkckludmFsaWQpLAorICAgIG1BZGRNZXNoSGVhZGVyKGZhbHNlKSwKKyAgICBtU2VuZEJ1c3koZmFsc2UpLAorICAgIG1TY2hlZHVsZVRyYW5zbWlzc2lvblRhc2soYVRocmVhZE5ldGlmLkdldElwNigpLm1UYXNrbGV0U2NoZWR1bGVyLCBTY2hlZHVsZVRyYW5zbWlzc2lvblRhc2ssIHRoaXMpLAorICAgIG1FbmFibGVkKGZhbHNlKSwKKyAgICBtU2NhbkNoYW5uZWxzKDApLAorICAgIG1TY2FuQ2hhbm5lbCgwKSwKKyAgICBtUmVzdG9yZUNoYW5uZWwoMCksCisgICAgbVJlc3RvcmVQYW5JZChNYWM6OmtQYW5JZEJyb2FkY2FzdCksCisgICAgbVNjYW5uaW5nKGZhbHNlKSwKKyAgICBtRGF0YVBvbGxNYW5hZ2VyKCp0aGlzKSwKKyAgICBtU291cmNlTWF0Y2hDb250cm9sbGVyKCp0aGlzKQoreworICAgIG1GcmFnVGFnID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKKyAgICBhVGhyZWFkTmV0aWYuR2V0TWFjKCkuUmVnaXN0ZXJSZWNlaXZlcihtTWFjUmVjZWl2ZXIpOworICAgIG1NYWNTb3VyY2UubUxlbmd0aCA9IDA7CisgICAgbU1hY0Rlc3QubUxlbmd0aCA9IDA7CisKKyAgICBtSXBDb3VudGVycy5tVHhTdWNjZXNzID0gMDsKKyAgICBtSXBDb3VudGVycy5tUnhTdWNjZXNzID0gMDsKKyAgICBtSXBDb3VudGVycy5tVHhGYWlsdXJlID0gMDsKKyAgICBtSXBDb3VudGVycy5tUnhGYWlsdXJlID0gMDsKK30KKworb3RFcnJvciBNZXNoRm9yd2FyZGVyOjpTdGFydCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKG1FbmFibGVkID09IGZhbHNlKQorICAgIHsKKyAgICAgICAgR2V0TmV0aWYoKS5HZXRNYWMoKS5TZXRSeE9uV2hlbklkbGUodHJ1ZSk7CisgICAgICAgIG1FbmFibGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6U3RvcCh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIFZlcmlmeU9yRXhpdChtRW5hYmxlZCA9PSB0cnVlKTsKKworICAgIG1EYXRhUG9sbE1hbmFnZXIuU3RvcFBvbGxpbmcoKTsKKyAgICBtUmVhc3NlbWJseVRpbWVyLlN0b3AoKTsKKworICAgIGlmIChtU2Nhbm5pbmcpCisgICAgeworICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRDaGFubmVsKG1SZXN0b3JlQ2hhbm5lbCk7CisgICAgICAgIG1TY2FubmluZyA9IGZhbHNlOworICAgICAgICBuZXRpZi5HZXRNbGUoKS5IYW5kbGVEaXNjb3ZlckNvbXBsZXRlKCk7CisgICAgfQorCisgICAgd2hpbGUgKChtZXNzYWdlID0gbVNlbmRRdWV1ZS5HZXRIZWFkKCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2VuZFF1ZXVlLkRlcXVldWUoKm1lc3NhZ2UpOworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgd2hpbGUgKChtZXNzYWdlID0gbVJlYXNzZW1ibHlMaXN0LkdldEhlYWQoKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1SZWFzc2VtYmx5TGlzdC5EZXF1ZXVlKCptZXNzYWdlKTsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIG1FbmFibGVkID0gZmFsc2U7CisgICAgbVNlbmRNZXNzYWdlID0gTlVMTDsKKyAgICBuZXRpZi5HZXRNYWMoKS5TZXRSeE9uV2hlbklkbGUoZmFsc2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpIYW5kbGVSZXNvbHZlZChjb25zdCBJcDY6OkFkZHJlc3MgJmFFaWQsIG90RXJyb3IgYUVycm9yKQoreworICAgIE1lc3NhZ2UgKmN1ciwgKm5leHQ7CisgICAgSXA2OjpBZGRyZXNzIGlwNkRzdDsKKyAgICBib29sIGVucXVldWVkTWVzc2FnZSA9IGZhbHNlOworCisgICAgZm9yIChjdXIgPSBtUmVzb2x2aW5nUXVldWUuR2V0SGVhZCgpOyBjdXI7IGN1ciA9IG5leHQpCisgICAgeworICAgICAgICBuZXh0ID0gY3VyLT5HZXROZXh0KCk7CisKKyAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpICE9IE1lc3NhZ2U6OmtUeXBlSXA2KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ci0+UmVhZChJcDY6OkhlYWRlcjo6R2V0RGVzdGluYXRpb25PZmZzZXQoKSwgc2l6ZW9mKGlwNkRzdCksICZpcDZEc3QpOworCisgICAgICAgIGlmIChtZW1jbXAoJmlwNkRzdCwgJmFFaWQsIHNpemVvZihpcDZEc3QpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVzb2x2aW5nUXVldWUuRGVxdWV1ZSgqY3VyKTsKKworICAgICAgICAgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1TZW5kUXVldWUuRW5xdWV1ZSgqY3VyKTsKKyAgICAgICAgICAgICAgICBlbnF1ZXVlZE1lc3NhZ2UgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN1ci0+RnJlZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVucXVldWVkTWVzc2FnZSkKKyAgICB7CisgICAgICAgIG1TY2hlZHVsZVRyYW5zbWlzc2lvblRhc2suUG9zdCgpOworICAgIH0KK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpDbGVhckNoaWxkSW5kaXJlY3RNZXNzYWdlcyhDaGlsZCAmYUNoaWxkKQoreworICAgIE1lc3NhZ2UgKm5leHRNZXNzYWdlOworCisgICAgVmVyaWZ5T3JFeGl0KGFDaGlsZC5HZXRJbmRpcmVjdE1lc3NhZ2VDb3VudCgpID4gMCk7CisKKyAgICBmb3IgKE1lc3NhZ2UgKm1lc3NhZ2UgPSBtU2VuZFF1ZXVlLkdldEhlYWQoKTsgbWVzc2FnZTsgbWVzc2FnZSA9IG5leHRNZXNzYWdlKQorICAgIHsKKyAgICAgICAgbmV4dE1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisKKyAgICAgICAgbWVzc2FnZS0+Q2xlYXJDaGlsZE1hc2soR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRDaGlsZEluZGV4KGFDaGlsZCkpOworCisgICAgICAgIGlmICghbWVzc2FnZS0+SXNDaGlsZFBlbmRpbmcoKSAmJiAhbWVzc2FnZS0+R2V0RGlyZWN0VHJhbnNtaXNzaW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU2VuZE1lc3NhZ2UgPT0gbWVzc2FnZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtU2VuZE1lc3NhZ2UgPSBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU2VuZFF1ZXVlLkRlcXVldWUoKm1lc3NhZ2UpOworICAgICAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgbVNvdXJjZU1hdGNoQ29udHJvbGxlci5SZXNldE1lc3NhZ2VDb3VudChhQ2hpbGQpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpVcGRhdGVJbmRpcmVjdE1lc3NhZ2VzKHZvaWQpCit7CisgICAgQ2hpbGQgKmNoaWxkcmVuOworICAgIHVpbnQ4X3QgbnVtQ2hpbGRyZW47CisKKyAgICBjaGlsZHJlbiA9IEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0Q2hpbGRyZW4oJm51bUNoaWxkcmVuKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyBpKyspCisgICAgeworICAgICAgICBDaGlsZCAqY2hpbGQgPSAmY2hpbGRyZW5baV07CisKKyAgICAgICAgaWYgKGNoaWxkLT5Jc1N0YXRlVmFsaWRPclJlc3RvcmluZygpIHx8IChjaGlsZC0+R2V0SW5kaXJlY3RNZXNzYWdlQ291bnQoKSA9PSAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBDbGVhckNoaWxkSW5kaXJlY3RNZXNzYWdlcygqY2hpbGQpOworICAgIH0KK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpTY2hlZHVsZVRyYW5zbWlzc2lvblRhc2soVGFza2xldCAmYVRhc2tsZXQpCit7CisgICAgR2V0T3duZXIoYVRhc2tsZXQpLlNjaGVkdWxlVHJhbnNtaXNzaW9uVGFzaygpOworfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OlNjaGVkdWxlVHJhbnNtaXNzaW9uVGFzayh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBudW1DaGlsZHJlbjsKKyAgICB1aW50OF90IGNoaWxkSW5kZXg7CisgICAgdWludDhfdCBuZXh0SW5kZXg7CisgICAgQ2hpbGQgKmNoaWxkcmVuOworCisgICAgVmVyaWZ5T3JFeGl0KG1TZW5kQnVzeSA9PSBmYWxzZSwgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworICAgIFVwZGF0ZUluZGlyZWN0TWVzc2FnZXMoKTsKKworICAgIG1TZW5kTWVzc2FnZUlzQVJldHJhbnNtaXNzaW9uID0gZmFsc2U7CisKKyAgICBjaGlsZHJlbiA9IG5ldGlmLkdldE1sZSgpLkdldENoaWxkcmVuKCZudW1DaGlsZHJlbik7CisKKyAgICBpZiAobVN0YXJ0Q2hpbGRJbmRleCA+PSBudW1DaGlsZHJlbikKKyAgICB7CisgICAgICAgIG1TdGFydENoaWxkSW5kZXggPSAwOworICAgIH0KKworICAgIGNoaWxkSW5kZXggPSBtU3RhcnRDaGlsZEluZGV4OworCisgICAgZm9yICh1aW50OF90IGl0ZXJhdGlvbnMgPSBudW1DaGlsZHJlbjsgaXRlcmF0aW9ucyA+IDA7IGl0ZXJhdGlvbnMtLSwgY2hpbGRJbmRleCA9IG5leHRJbmRleCkKKyAgICB7CisgICAgICAgIENoaWxkICZjaGlsZCA9IGNoaWxkcmVuW2NoaWxkSW5kZXhdOworCisgICAgICAgIGlmICgobmV4dEluZGV4ID0gY2hpbGRJbmRleCArIDEpID09IG51bUNoaWxkcmVuKQorICAgICAgICB7CisgICAgICAgICAgICBuZXh0SW5kZXggPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjaGlsZC5Jc1N0YXRlVmFsaWRPclJlc3RvcmluZygpIHx8ICFjaGlsZC5Jc0RhdGFSZXF1ZXN0UGVuZGluZygpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1TZW5kTWVzc2FnZSA9IGNoaWxkLkdldEluZGlyZWN0TWVzc2FnZSgpOworICAgICAgICBtU2VuZE1lc3NhZ2VNYXhNYWNUeEF0dGVtcHRzID0gTWFjOjprSW5kaXJlY3RGcmFtZU1hY1R4QXR0ZW1wdHM7CisKKyAgICAgICAgaWYgKG1TZW5kTWVzc2FnZSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VuZE1lc3NhZ2UgPSBHZXRJbmRpcmVjdFRyYW5zbWlzc2lvbihjaGlsZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVNlbmRNZXNzYWdlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIFByZXBhcmVJbmRpcmVjdFRyYW5zbWlzc2lvbigqbVNlbmRNZXNzYWdlLCBjaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBBIE5VTEwgYG1TZW5kTWVzc2FnZWAgdHJpZ2dlcnMgYW4gZW1wdHkgZnJhbWUgdG8gYmUgc2VudCB0byB0aGUgY2hpbGQuCisKKyAgICAgICAgICAgIGlmIChjaGlsZC5Jc0luZGlyZWN0U291cmNlTWF0Y2hTaG9ydCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1NYWNTb3VyY2UubUxlbmd0aCA9IHNpemVvZihtTWFjU291cmNlLm1TaG9ydEFkZHJlc3MpOworICAgICAgICAgICAgICAgIG1NYWNTb3VyY2UubVNob3J0QWRkcmVzcyA9IG5ldGlmLkdldE1hYygpLkdldFNob3J0QWRkcmVzcygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1NYWNTb3VyY2UubUxlbmd0aCA9IHNpemVvZihtTWFjU291cmNlLm1FeHRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkobU1hY1NvdXJjZS5tRXh0QWRkcmVzcy5tOCwgbmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpLCBzaXplb2YobU1hY0Rlc3QubUV4dEFkZHJlc3MpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2hpbGQuR2V0TWFjQWRkcmVzcyhtTWFjRGVzdCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUbyBlbnN1cmUgZmFpcm5lc3MgaW4gaGFuZGxpbmcgb2YgZGF0YSByZXF1ZXN0cyBmcm9tIHNsZWVweQorICAgICAgICAvLyBjaGlsZHJlbiwgb25jZSBhIG1lc3NhZ2UgaXMgc2NoZWR1bGVkIGFuZCBwcmVwYXJlZCBmb3IgaW5kaXJlY3QKKyAgICAgICAgLy8gdHJhbnNtaXNzaW9uIHRvIGEgY2hpbGQsIHRoZSBgbVN0YXJ0Q2hpbGRJbmRleGAgaXMgdXBkYXRlZCB0bworICAgICAgICAvLyB0aGUgbmV4dCBpbmRleCBhZnRlciB0aGUgY3VycmVudCBjaGlsZC4gU3Vic2VxdWVudCBjYWxsIHRvCisgICAgICAgIC8vIGBTY2hlZHVsZVRyYW5zbWlzc2lvblRhc2soKWAgd2lsbCBiZWdpbiB0aGUgaXRlcmF0aW9uIHRocm91Z2gKKyAgICAgICAgLy8gdGhlIGNoaWxkcmVuIGxpc3QgZnJvbSB0aGlzIGluZGV4LgorCisgICAgICAgIG1TdGFydENoaWxkSW5kZXggPSBuZXh0SW5kZXg7CisKKyAgICAgICAgbmV0aWYuR2V0TWFjKCkuU2VuZEZyYW1lUmVxdWVzdChtTWFjU2VuZGVyKTsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIGlmICgobVNlbmRNZXNzYWdlID0gR2V0RGlyZWN0VHJhbnNtaXNzaW9uKCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZW5kRnJhbWVSZXF1ZXN0KG1NYWNTZW5kZXIpOworICAgICAgICBtU2VuZE1lc3NhZ2VNYXhNYWNUeEF0dGVtcHRzID0gTWFjOjprRGlyZWN0RnJhbWVNYWNUeEF0dGVtcHRzOworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBvdExvZ1dhcm5NYWMoR2V0SW5zdGFuY2UoKSwgIkVycm9yIHdoaWxlIHNjaGVkdWxpbmcgdHJhbnNtaXNzaW9uIHRhc2s6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIG90VGhyZWFkRXJyb3JUb1N0cmluZyhlcnJvcikpOworICAgIH0KK30KKworb3RFcnJvciBNZXNoRm9yd2FyZGVyOjpTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE5laWdoYm9yICpuZWlnaGJvcjsKKworICAgIHVpbnQ4X3QgbnVtQ2hpbGRyZW47CisgICAgQ2hpbGQgKmNoaWxkOworCisgICAgc3dpdGNoIChhTWVzc2FnZS5HZXRUeXBlKCkpCisgICAgeworICAgIGNhc2UgTWVzc2FnZTo6a1R5cGVJcDY6CisgICAgeworICAgICAgICBJcDY6OkhlYWRlciBpcDZIZWFkZXI7CisKKyAgICAgICAgYU1lc3NhZ2UuUmVhZCgwLCBzaXplb2YoaXA2SGVhZGVyKSwgJmlwNkhlYWRlcik7CisKKyAgICAgICAgaWYgKCFtZW1jbXAoJmlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLCBuZXRpZi5HZXRNbGUoKS5HZXRMaW5rTG9jYWxBbGxUaHJlYWROb2Rlc0FkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpKSkgfHwKKyAgICAgICAgICAgICFtZW1jbXAoJmlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLCBuZXRpZi5HZXRNbGUoKS5HZXRSZWFsbUxvY2FsQWxsVGhyZWFkTm9kZXNBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSkpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBzY2hlZHVsZSBkaXJlY3QgdHJhbnNtaXNzaW9uCisgICAgICAgICAgICBhTWVzc2FnZS5TZXREaXJlY3RUcmFuc21pc3Npb24oKTsKKworICAgICAgICAgICAgaWYgKGFNZXNzYWdlLkdldFN1YlR5cGUoKSAhPSBNZXNzYWdlOjprU3ViVHlwZU1wbFJldHJhbnNtaXNzaW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGRlc3RpbmVkIGZvciBhbGwgc2xlZXB5IGNoaWxkcmVuCisgICAgICAgICAgICAgICAgY2hpbGQgPSBuZXRpZi5HZXRNbGUoKS5HZXRDaGlsZHJlbigmbnVtQ2hpbGRyZW4pOworCisgICAgICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47IGkrKywgY2hpbGQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+SXNTdGF0ZVZhbGlkT3JSZXN0b3JpbmcoKSAmJiAhY2hpbGQtPklzUnhPbldoZW5JZGxlKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFNZXNzYWdlLlNldENoaWxkTWFzayhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Tb3VyY2VNYXRjaENvbnRyb2xsZXIuSW5jcmVtZW50TWVzc2FnZUNvdW50KCpjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG5laWdoYm9yID0gbmV0aWYuR2V0TWxlKCkuR2V0TmVpZ2hib3IoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkpKSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgICFuZWlnaGJvci0+SXNSeE9uV2hlbklkbGUoKSAmJgorICAgICAgICAgICAgICAgICAhYU1lc3NhZ2UuR2V0RGlyZWN0VHJhbnNtaXNzaW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGRlc3RpbmVkIGZvciBhIHNsZWVweSBjaGlsZAorICAgICAgICAgICAgY2hpbGQgPSBzdGF0aWNfY2FzdDxDaGlsZCAqPihuZWlnaGJvcik7CisgICAgICAgICAgICBhTWVzc2FnZS5TZXRDaGlsZE1hc2sobmV0aWYuR2V0TWxlKCkuR2V0Q2hpbGRJbmRleCgqY2hpbGQpKTsKKyAgICAgICAgICAgIG1Tb3VyY2VNYXRjaENvbnRyb2xsZXIuSW5jcmVtZW50TWVzc2FnZUNvdW50KCpjaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBzY2hlZHVsZSBkaXJlY3QgdHJhbnNtaXNzaW9uCisgICAgICAgICAgICBhTWVzc2FnZS5TZXREaXJlY3RUcmFuc21pc3Npb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVzc2FnZTo6a1R5cGU2bG93cGFuOgorICAgIHsKKyAgICAgICAgTG93cGFuOjpNZXNoSGVhZGVyIG1lc2hIZWFkZXI7CisKKyAgICAgICAgSWdub3JlUmV0dXJuVmFsdWUobWVzaEhlYWRlci5Jbml0KGFNZXNzYWdlKSk7CisKKyAgICAgICAgaWYgKChuZWlnaGJvciA9IG5ldGlmLkdldE1sZSgpLkdldE5laWdoYm9yKG1lc2hIZWFkZXIuR2V0RGVzdGluYXRpb24oKSkpICE9IE5VTEwgJiYKKyAgICAgICAgICAgICFuZWlnaGJvci0+SXNSeE9uV2hlbklkbGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZGVzdGluZWQgZm9yIGEgc2xlZXB5IGNoaWxkCisgICAgICAgICAgICBjaGlsZCA9IHN0YXRpY19jYXN0PENoaWxkICo+KG5laWdoYm9yKTsKKyAgICAgICAgICAgIGFNZXNzYWdlLlNldENoaWxkTWFzayhuZXRpZi5HZXRNbGUoKS5HZXRDaGlsZEluZGV4KCpjaGlsZCkpOworICAgICAgICAgICAgbVNvdXJjZU1hdGNoQ29udHJvbGxlci5JbmNyZW1lbnRNZXNzYWdlQ291bnQoKmNoaWxkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIG5vdCBkZXN0aW5lZCBmb3IgYSBzbGVlcHkgY2hpbGQKKyAgICAgICAgICAgIGFNZXNzYWdlLlNldERpcmVjdFRyYW5zbWlzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBNZXNzYWdlOjprVHlwZU1hY0RhdGFQb2xsOgorICAgICAgICBhTWVzc2FnZS5TZXREaXJlY3RUcmFuc21pc3Npb24oKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lc3NhZ2U6OmtUeXBlU3VwZXJ2aXNpb246CisgICAgICAgIGNoaWxkID0gbmV0aWYuR2V0Q2hpbGRTdXBlcnZpc29yKCkuR2V0RGVzdGluYXRpb24oYU1lc3NhZ2UpOworICAgICAgICBWZXJpZnlPckV4aXQoY2hpbGQgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCFjaGlsZC0+SXNSeE9uV2hlbklkbGUoKSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgICAgICBhTWVzc2FnZS5TZXRDaGlsZE1hc2sobmV0aWYuR2V0TWxlKCkuR2V0Q2hpbGRJbmRleCgqY2hpbGQpKTsKKyAgICAgICAgbVNvdXJjZU1hdGNoQ29udHJvbGxlci5JbmNyZW1lbnRNZXNzYWdlQ291bnQoKmNoaWxkKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYU1lc3NhZ2UuU2V0T2Zmc2V0KDApOworICAgIGFNZXNzYWdlLlNldERhdGFncmFtVGFnKDApOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtU2VuZFF1ZXVlLkVucXVldWUoYU1lc3NhZ2UpKTsKKyAgICBtU2NoZWR1bGVUcmFuc21pc3Npb25UYXNrLlBvc3QoKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6UHJlcGFyZURpc2NvdmVyUmVxdWVzdCh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoIW1TY2FubmluZyk7CisKKyAgICBtU2NhbkNoYW5uZWwgPSBPVF9SQURJT19DSEFOTkVMX01JTjsKKyAgICBtU2NhbkNoYW5uZWxzID4+PSBPVF9SQURJT19DSEFOTkVMX01JTjsKKyAgICBtUmVzdG9yZUNoYW5uZWwgPSBuZXRpZi5HZXRNYWMoKS5HZXRDaGFubmVsKCk7CisgICAgbVJlc3RvcmVQYW5JZCA9IG5ldGlmLkdldE1hYygpLkdldFBhbklkKCk7CisKKyAgICB3aGlsZSAoKG1TY2FuQ2hhbm5lbHMgJiAxKSA9PSAwKQorICAgIHsKKyAgICAgICAgbVNjYW5DaGFubmVscyA+Pj0gMTsKKyAgICAgICAgbVNjYW5DaGFubmVsKys7CisKKyAgICAgICAgaWYgKG1TY2FuQ2hhbm5lbCA+IE9UX1JBRElPX0NIQU5ORUxfTUFYKQorICAgICAgICB7CisgICAgICAgICAgICBuZXRpZi5HZXRNbGUoKS5IYW5kbGVEaXNjb3ZlckNvbXBsZXRlKCk7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtU2Nhbm5pbmcgPSB0cnVlOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworTWVzc2FnZSAqTWVzaEZvcndhcmRlcjo6R2V0RGlyZWN0VHJhbnNtaXNzaW9uKHZvaWQpCit7CisgICAgTWVzc2FnZSAqY3VyTWVzc2FnZSwgKm5leHRNZXNzYWdlOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChjdXJNZXNzYWdlID0gbVNlbmRRdWV1ZS5HZXRIZWFkKCk7IGN1ck1lc3NhZ2U7IGN1ck1lc3NhZ2UgPSBuZXh0TWVzc2FnZSkKKyAgICB7CisgICAgICAgIG5leHRNZXNzYWdlID0gY3VyTWVzc2FnZS0+R2V0TmV4dCgpOworCisgICAgICAgIGlmIChjdXJNZXNzYWdlLT5HZXREaXJlY3RUcmFuc21pc3Npb24oKSA9PSBmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGN1ck1lc3NhZ2UtPkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE1lc3NhZ2U6OmtUeXBlSXA2OgorICAgICAgICAgICAgZXJyb3IgPSBVcGRhdGVJcDZSb3V0ZSgqY3VyTWVzc2FnZSk7CisKKyAgICAgICAgICAgIGlmIChjdXJNZXNzYWdlLT5HZXRTdWJUeXBlKCkgPT0gTWVzc2FnZTo6a1N1YlR5cGVNbGVEaXNjb3ZlclJlcXVlc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBQcmVwYXJlRGlzY292ZXJSZXF1ZXN0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTWVzc2FnZTo6a1R5cGU2bG93cGFuOgorICAgICAgICAgICAgZXJyb3IgPSBVcGRhdGVNZXNoUm91dGUoKmN1ck1lc3NhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNZXNzYWdlOjprVHlwZU1hY0RhdGFQb2xsOgorICAgICAgICAgICAgRXhpdE5vdygpOworCisgICAgICAgIGNhc2UgTWVzc2FnZTo6a1R5cGVTdXBlcnZpc2lvbjoKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRFJPUDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChlcnJvcikKKyAgICAgICAgeworICAgICAgICBjYXNlIE9UX0VSUk9SX05PTkU6CisgICAgICAgICAgICBFeGl0Tm93KCk7CisKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9BRERSRVNTX1FVRVJZOgorICAgICAgICAgICAgbVNlbmRRdWV1ZS5EZXF1ZXVlKCpjdXJNZXNzYWdlKTsKKyAgICAgICAgICAgIG1SZXNvbHZpbmdRdWV1ZS5FbnF1ZXVlKCpjdXJNZXNzYWdlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNhc2UgT1RfRVJST1JfRFJPUDoKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9OT19CVUZTOgorICAgICAgICAgICAgbVNlbmRRdWV1ZS5EZXF1ZXVlKCpjdXJNZXNzYWdlKTsKKyAgICAgICAgICAgIGN1ck1lc3NhZ2UtPkZyZWUoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGN1ck1lc3NhZ2U7Cit9CisKK01lc3NhZ2UgKk1lc2hGb3J3YXJkZXI6OkdldEluZGlyZWN0VHJhbnNtaXNzaW9uKENoaWxkICZhQ2hpbGQpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgICAgTWVzc2FnZSAqbmV4dDsKKyAgICB1aW50OF90IGNoaWxkSW5kZXggPSBHZXROZXRpZigpLkdldE1sZSgpLkdldENoaWxkSW5kZXgoYUNoaWxkKTsKKworICAgIGZvciAobWVzc2FnZSA9IG1TZW5kUXVldWUuR2V0SGVhZCgpOyBtZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkKKyAgICB7CisgICAgICAgIG5leHQgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisKKyAgICAgICAgaWYgKG1lc3NhZ2UtPkdldENoaWxkTWFzayhjaGlsZEluZGV4KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2tpcCBhbmQgcmVtb3ZlIHRoZSBzdXBlcnZpc2lvbiBtZXNzYWdlIGlmIHRoZXJlIGFyZSBvdGhlciBtZXNzYWdlcyBxdWV1ZWQgZm9yIHRoZSBjaGlsZC4KKworICAgICAgICAgICAgaWYgKChtZXNzYWdlLT5HZXRUeXBlKCkgPT0gTWVzc2FnZTo6a1R5cGVTdXBlcnZpc2lvbikgJiYgKGFDaGlsZC5HZXRJbmRpcmVjdE1lc3NhZ2VDb3VudCgpID4gMSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWVzc2FnZS0+Q2xlYXJDaGlsZE1hc2soY2hpbGRJbmRleCk7CisgICAgICAgICAgICAgICAgbVNvdXJjZU1hdGNoQ29udHJvbGxlci5EZWNyZW1lbnRNZXNzYWdlQ291bnQoYUNoaWxkKTsKKyAgICAgICAgICAgICAgICBtU2VuZFF1ZXVlLkRlcXVldWUoKm1lc3NhZ2UpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhQ2hpbGQuU2V0SW5kaXJlY3RNZXNzYWdlKG1lc3NhZ2UpOworICAgIGFDaGlsZC5TZXRJbmRpcmVjdEZyYWdtZW50T2Zmc2V0KDApOworICAgIGFDaGlsZC5SZXNldEluZGlyZWN0VHhBdHRlbXB0cygpOworCisgICAgaWYgKG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIE1hYzo6QWRkcmVzcyBtYWNBZGRyOworCisgICAgICAgIExvZ0lwNk1lc3NhZ2Uoa01lc3NhZ2VQcmVwYXJlSW5kaXJlY3QsICptZXNzYWdlLCAmYUNoaWxkLkdldE1hY0FkZHJlc3MobWFjQWRkciksIE9UX0VSUk9SX05PTkUpOworICAgIH0KKworICAgIHJldHVybiBtZXNzYWdlOworfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OlByZXBhcmVJbmRpcmVjdFRyYW5zbWlzc2lvbihNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgQ2hpbGQgJmFDaGlsZCkKK3sKKyAgICBpZiAoYUNoaWxkLkdldEluZGlyZWN0VHhBdHRlbXB0cygpID4gMCkKKyAgICB7CisgICAgICAgIG1TZW5kTWVzc2FnZUlzQVJldHJhbnNtaXNzaW9uID0gdHJ1ZTsKKyAgICAgICAgbVNlbmRNZXNzYWdlRnJhbWVDb3VudGVyID0gYUNoaWxkLkdldEluZGlyZWN0RnJhbWVDb3VudGVyKCk7CisgICAgICAgIG1TZW5kTWVzc2FnZUtleUlkID0gYUNoaWxkLkdldEluZGlyZWN0S2V5SWQoKTsKKyAgICAgICAgbVNlbmRNZXNzYWdlRGF0YVNlcXVlbmNlTnVtYmVyID0gYUNoaWxkLkdldEluZGlyZWN0RGF0YVNlcXVlbmNlTnVtYmVyKCk7CisgICAgfQorCisgICAgYU1lc3NhZ2UuU2V0T2Zmc2V0KGFDaGlsZC5HZXRJbmRpcmVjdEZyYWdtZW50T2Zmc2V0KCkpOworCisgICAgc3dpdGNoIChhTWVzc2FnZS5HZXRUeXBlKCkpCisgICAgeworICAgIGNhc2UgTWVzc2FnZTo6a1R5cGVJcDY6CisgICAgeworICAgICAgICBJcDY6OkhlYWRlciBpcDZIZWFkZXI7CisKKyAgICAgICAgYU1lc3NhZ2UuUmVhZCgwLCBzaXplb2YoaXA2SGVhZGVyKSwgJmlwNkhlYWRlcik7CisKKyAgICAgICAgbUFkZE1lc2hIZWFkZXIgPSBmYWxzZTsKKyAgICAgICAgR2V0TWFjU291cmNlQWRkcmVzcyhpcDZIZWFkZXIuR2V0U291cmNlKCksIG1NYWNTb3VyY2UpOworCisgICAgICAgIGlmIChpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc0xpbmtMb2NhbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBHZXRNYWNEZXN0aW5hdGlvbkFkZHJlc3MoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCksIG1NYWNEZXN0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFDaGlsZC5HZXRNYWNBZGRyZXNzKG1NYWNEZXN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVzc2FnZTo6a1R5cGU2bG93cGFuOgorICAgIHsKKyAgICAgICAgTG93cGFuOjpNZXNoSGVhZGVyIG1lc2hIZWFkZXI7CisKKyAgICAgICAgSWdub3JlUmV0dXJuVmFsdWUobWVzaEhlYWRlci5Jbml0KGFNZXNzYWdlKSk7CisgICAgICAgIG1BZGRNZXNoSGVhZGVyID0gdHJ1ZTsKKyAgICAgICAgbU1lc2hEZXN0ID0gbWVzaEhlYWRlci5HZXREZXN0aW5hdGlvbigpOworICAgICAgICBtTWVzaFNvdXJjZSA9IG1lc2hIZWFkZXIuR2V0U291cmNlKCk7CisgICAgICAgIG1NYWNTb3VyY2UubUxlbmd0aCA9IHNpemVvZihtTWFjU291cmNlLm1TaG9ydEFkZHJlc3MpOworICAgICAgICBtTWFjU291cmNlLm1TaG9ydEFkZHJlc3MgPSBHZXROZXRpZigpLkdldE1hYygpLkdldFNob3J0QWRkcmVzcygpOworICAgICAgICBtTWFjRGVzdC5tTGVuZ3RoID0gc2l6ZW9mKG1NYWNEZXN0Lm1TaG9ydEFkZHJlc3MpOworICAgICAgICBtTWFjRGVzdC5tU2hvcnRBZGRyZXNzID0gbWVzaEhlYWRlci5HZXREZXN0aW5hdGlvbigpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE1lc3NhZ2U6OmtUeXBlU3VwZXJ2aXNpb246CisgICAgICAgIGFDaGlsZC5HZXRNYWNBZGRyZXNzKG1NYWNEZXN0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6VXBkYXRlTWVzaFJvdXRlKE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTG93cGFuOjpNZXNoSGVhZGVyIG1lc2hIZWFkZXI7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yOworICAgIHVpbnQxNl90IG5leHRIb3A7CisKKyAgICBJZ25vcmVSZXR1cm5WYWx1ZShtZXNoSGVhZGVyLkluaXQoYU1lc3NhZ2UpKTsKKworICAgIG5leHRIb3AgPSBuZXRpZi5HZXRNbGUoKS5HZXROZXh0SG9wKG1lc2hIZWFkZXIuR2V0RGVzdGluYXRpb24oKSk7CisKKyAgICBpZiAobmV4dEhvcCAhPSBNYWM6OmtTaG9ydEFkZHJJbnZhbGlkKQorICAgIHsKKyAgICAgICAgbmVpZ2hib3IgPSBuZXRpZi5HZXRNbGUoKS5HZXROZWlnaGJvcihuZXh0SG9wKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmVpZ2hib3IgPSBuZXRpZi5HZXRNbGUoKS5HZXROZWlnaGJvcihtZXNoSGVhZGVyLkdldERlc3RpbmF0aW9uKCkpOworICAgIH0KKworICAgIGlmIChuZWlnaGJvciA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgIH0KKworICAgIG1NYWNEZXN0Lm1MZW5ndGggPSBzaXplb2YobU1hY0Rlc3QubVNob3J0QWRkcmVzcyk7CisgICAgbU1hY0Rlc3QubVNob3J0QWRkcmVzcyA9IG5laWdoYm9yLT5HZXRSbG9jMTYoKTsKKyAgICBtTWFjU291cmNlLm1MZW5ndGggPSBzaXplb2YobU1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKyAgICBtTWFjU291cmNlLm1TaG9ydEFkZHJlc3MgPSBuZXRpZi5HZXRNYWMoKS5HZXRTaG9ydEFkZHJlc3MoKTsKKworICAgIG1BZGRNZXNoSGVhZGVyID0gdHJ1ZTsKKyAgICBtTWVzaERlc3QgPSBtZXNoSGVhZGVyLkdldERlc3RpbmF0aW9uKCk7CisgICAgbU1lc2hTb3VyY2UgPSBtZXNoSGVhZGVyLkdldFNvdXJjZSgpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNZXNoRm9yd2FyZGVyOjpVcGRhdGVJcDZSb3V0ZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElwNjo6SGVhZGVyIGlwNkhlYWRlcjsKKworICAgIG1BZGRNZXNoSGVhZGVyID0gZmFsc2U7CisKKyAgICBhTWVzc2FnZS5SZWFkKDAsIHNpemVvZihpcDZIZWFkZXIpLCAmaXA2SGVhZGVyKTsKKworICAgIHN3aXRjaCAobmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgICAgIGlmIChpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc0xpbmtMb2NhbCgpIHx8IGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLklzTGlua0xvY2FsTXVsdGljYXN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdldE1hY0Rlc3RpbmF0aW9uQWRkcmVzcyhpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSwgbU1hY0Rlc3QpOworICAgICAgICAgICAgR2V0TWFjU291cmNlQWRkcmVzcyhpcDZIZWFkZXIuR2V0U291cmNlKCksIG1NYWNTb3VyY2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBpZiAobmV0aWYuR2V0TWxlKCkuSXNNaW5pbWFsRW5kRGV2aWNlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhTWVzc2FnZS5Jc0xpbmtTZWN1cml0eUVuYWJsZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTWFjRGVzdC5tTGVuZ3RoID0gc2l6ZW9mKG1NYWNEZXN0Lm1TaG9ydEFkZHJlc3MpOworCisgICAgICAgICAgICAgICAgaWYgKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLklzTGlua0xvY2FsTXVsdGljYXN0KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtTWFjRGVzdC5tU2hvcnRBZGRyZXNzID0gTWFjOjprU2hvcnRBZGRyQnJvYWRjYXN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtTWFjRGVzdC5tU2hvcnRBZGRyZXNzID0gbmV0aWYuR2V0TWxlKCkuR2V0TmV4dEhvcChNYWM6OmtTaG9ydEFkZHJCcm9hZGNhc3QpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEdldE1hY1NvdXJjZUFkZHJlc3MoaXA2SGVhZGVyLkdldFNvdXJjZSgpLCBtTWFjU291cmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLklzTGlua0xvY2FsKCkgfHwgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNMaW5rTG9jYWxNdWx0aWNhc3QoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHZXRNYWNEZXN0aW5hdGlvbkFkZHJlc3MoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCksIG1NYWNEZXN0KTsKKyAgICAgICAgICAgICAgICBHZXRNYWNTb3VyY2VBZGRyZXNzKGlwNkhlYWRlci5HZXRTb3VyY2UoKSwgbU1hY1NvdXJjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQxNl90IHJsb2MxNjsKKyAgICAgICAgICAgIHVpbnQxNl90IGFsb2MxNjsKKyAgICAgICAgICAgIE5laWdoYm9yICpuZWlnaGJvcjsKKworICAgICAgICAgICAgaWYgKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLklzTGlua0xvY2FsKCkgfHwgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNNdWx0aWNhc3QoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHZXRNYWNEZXN0aW5hdGlvbkFkZHJlc3MoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCksIG1NYWNEZXN0KTsKKyAgICAgICAgICAgICAgICBHZXRNYWNTb3VyY2VBZGRyZXNzKGlwNkhlYWRlci5HZXRTb3VyY2UoKSwgbU1hY1NvdXJjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5ldGlmLkdldE1sZSgpLklzUm91dGluZ0xvY2F0b3IoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmxvYzE2ID0gSG9zdFN3YXAxNihpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm0xNls3XSk7CisgICAgICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChuZXRpZi5HZXRNbGUoKS5Jc1JvdXRlcklkVmFsaWQobmV0aWYuR2V0TWxlKCkuR2V0Um91dGVySWQocmxvYzE2KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgICAgICAgICAgICAgICAgICBtTWVzaERlc3QgPSBybG9jMTY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5ldGlmLkdldE1sZSgpLklzQW55Y2FzdExvY2F0b3IoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWxvYzE2ID0gSG9zdFN3YXAxNihpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm0xNls3XSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsb2MxNiA9PSBNbGU6OmtBbG9jMTZMZWFkZXIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1NZXNoRGVzdCA9IG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNihuZXRpZi5HZXRNbGUoKS5HZXRMZWFkZXJJZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSIHx8IE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoYWxvYzE2ICYgTWxlOjprQWxvYzE2RGhjcEFnZW50TWFzaykgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYWdlbnRSbG9jMTY7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHJvdXRlcklkOworICAgICAgICAgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KChuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldFJsb2NCeUNvbnRleHRJZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFsb2MxNiAmIE1sZTo6a0Fsb2MxNkRoY3BBZ2VudE1hc2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnRSbG9jMTYpID09IE9UX0VSUk9SX05PTkUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlcklkID0gbmV0aWYuR2V0TWxlKCkuR2V0Um91dGVySWQoYWdlbnRSbG9jMTYpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBhZ2VudCBpcyBhY3RpdmUgcm91dGVyIG9yIHRoZSBjaGlsZCBvZiB0aGUgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG5ldGlmLkdldE1sZSgpLklzQWN0aXZlUm91dGVyKGFnZW50UmxvYzE2KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0aWYuR2V0TWxlKCkuR2V0UmxvYzE2KHJvdXRlcklkKSA9PSBuZXRpZi5HZXRNbGUoKS5HZXRSbG9jMTYoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1lc2hEZXN0ID0gYWdlbnRSbG9jMTY7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBwYXJlbnQgb2YgdGhlIEVEIEFnZW50IGFzIERlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVzaERlc3QgPSBuZXRpZi5HZXRNbGUoKS5HZXRSbG9jMTYocm91dGVySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSIHx8IE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHN1cHBvcnQgQUxPQyBmb3IgU2VydmljZSwgQ29tbWlzc2lvbmVyLCBOZWlnaGJvciBEaXNjb3ZlcnkgQWdlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgobmVpZ2hib3IgPSBuZXRpZi5HZXRNbGUoKS5HZXROZWlnaGJvcihpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSkpICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtTWVzaERlc3QgPSBuZWlnaGJvci0+R2V0UmxvYzE2KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuSXNPbk1lc2goaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldEFkZHJlc3NSZXNvbHZlcigpLlJlc29sdmUoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCksIG1NZXNoRGVzdCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLlJvdXRlTG9va3VwKAorICAgICAgICAgICAgICAgICAgICAgICAgaXA2SGVhZGVyLkdldFNvdXJjZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgJm1NZXNoRGVzdAorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChtTWVzaERlc3QgIT0gTWFjOjprU2hvcnRBZGRySW52YWxpZCwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgICAgICAgICAgICAgIGlmIChuZXRpZi5HZXRNbGUoKS5HZXROZWlnaGJvcihtTWVzaERlc3QpICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBkZXN0aW5hdGlvbiBpcyBuZWlnaGJvcgorICAgICAgICAgICAgICAgICAgICBtTWFjRGVzdC5tTGVuZ3RoID0gc2l6ZW9mKG1NYWNEZXN0Lm1TaG9ydEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICBtTWFjRGVzdC5tU2hvcnRBZGRyZXNzID0gbU1lc2hEZXN0OworICAgICAgICAgICAgICAgICAgICBHZXRNYWNTb3VyY2VBZGRyZXNzKGlwNkhlYWRlci5HZXRTb3VyY2UoKSwgbU1hY1NvdXJjZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGRlc3RpbmF0aW9uIGlzIG5vdCBuZWlnaGJvcgorICAgICAgICAgICAgICAgICAgICBtTWVzaFNvdXJjZSA9IG5ldGlmLkdldE1hYygpLkdldFNob3J0QWRkcmVzcygpOworCisgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRNbGUoKS5DaGVja1JlYWNoYWJpbGl0eShtTWVzaFNvdXJjZSwgbU1lc2hEZXN0LCBpcDZIZWFkZXIpKTsKKworICAgICAgICAgICAgICAgICAgICBtTWFjRGVzdC5tTGVuZ3RoID0gc2l6ZW9mKG1NYWNEZXN0Lm1TaG9ydEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICBtTWFjRGVzdC5tU2hvcnRBZGRyZXNzID0gbmV0aWYuR2V0TWxlKCkuR2V0TmV4dEhvcChtTWVzaERlc3QpOworICAgICAgICAgICAgICAgICAgICBtTWFjU291cmNlLm1MZW5ndGggPSBzaXplb2YobU1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgbU1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzID0gbU1lc2hTb3VyY2U7CisgICAgICAgICAgICAgICAgICAgIG1BZGRNZXNoSGVhZGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6U2V0UnhPZmYodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgbmV0aWYuR2V0TWFjKCkuU2V0UnhPbldoZW5JZGxlKGZhbHNlKTsKKyAgICBtRGF0YVBvbGxNYW5hZ2VyLlN0b3BQb2xsaW5nKCk7CisgICAgbmV0aWYuR2V0U3VwZXJ2aXNpb25MaXN0ZW5lcigpLlN0b3AoKTsKK30KKworYm9vbCBNZXNoRm9yd2FyZGVyOjpHZXRSeE9uV2hlbklkbGUodm9pZCkKK3sKKyAgICByZXR1cm4gR2V0TmV0aWYoKS5HZXRNYWMoKS5HZXRSeE9uV2hlbklkbGUoKTsKK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpTZXRSeE9uV2hlbklkbGUoYm9vbCBhUnhPbldoZW5JZGxlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBuZXRpZi5HZXRNYWMoKS5TZXRSeE9uV2hlbklkbGUoYVJ4T25XaGVuSWRsZSk7CisKKyAgICBpZiAoYVJ4T25XaGVuSWRsZSkKKyAgICB7CisgICAgICAgIG1EYXRhUG9sbE1hbmFnZXIuU3RvcFBvbGxpbmcoKTsKKyAgICAgICAgbmV0aWYuR2V0U3VwZXJ2aXNpb25MaXN0ZW5lcigpLlN0b3AoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbURhdGFQb2xsTWFuYWdlci5TdGFydFBvbGxpbmcoKTsKKyAgICAgICAgbmV0aWYuR2V0U3VwZXJ2aXNpb25MaXN0ZW5lcigpLlN0YXJ0KCk7CisgICAgfQorfQorCitvdEVycm9yIE1lc2hGb3J3YXJkZXI6OkdldE1hY1NvdXJjZUFkZHJlc3MoY29uc3QgSXA2OjpBZGRyZXNzICZhSXA2QWRkciwgTWFjOjpBZGRyZXNzICZhTWFjQWRkcikKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgYU1hY0FkZHIubUxlbmd0aCA9IHNpemVvZihhTWFjQWRkci5tRXh0QWRkcmVzcyk7CisgICAgYU1hY0FkZHIubUV4dEFkZHJlc3MuU2V0KGFJcDZBZGRyKTsKKworICAgIGlmIChtZW1jbXAoJmFNYWNBZGRyLm1FeHRBZGRyZXNzLCBuZXRpZi5HZXRNYWMoKS5HZXRFeHRBZGRyZXNzKCksIHNpemVvZihhTWFjQWRkci5tRXh0QWRkcmVzcykpICE9IDApCisgICAgeworICAgICAgICBhTWFjQWRkci5tTGVuZ3RoID0gc2l6ZW9mKGFNYWNBZGRyLm1TaG9ydEFkZHJlc3MpOworICAgICAgICBhTWFjQWRkci5tU2hvcnRBZGRyZXNzID0gbmV0aWYuR2V0TWFjKCkuR2V0U2hvcnRBZGRyZXNzKCk7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6R2V0TWFjRGVzdGluYXRpb25BZGRyZXNzKGNvbnN0IElwNjo6QWRkcmVzcyAmYUlwNkFkZHIsIE1hYzo6QWRkcmVzcyAmYU1hY0FkZHIpCit7CisgICAgaWYgKGFJcDZBZGRyLklzTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICBhTWFjQWRkci5tTGVuZ3RoID0gc2l6ZW9mKGFNYWNBZGRyLm1TaG9ydEFkZHJlc3MpOworICAgICAgICBhTWFjQWRkci5tU2hvcnRBZGRyZXNzID0gTWFjOjprU2hvcnRBZGRyQnJvYWRjYXN0OworICAgIH0KKyAgICBlbHNlIGlmIChhSXA2QWRkci5tRmllbGRzLm0xNlswXSA9PSBIb3N0U3dhcDE2KDB4ZmU4MCkgJiYKKyAgICAgICAgICAgICBhSXA2QWRkci5tRmllbGRzLm0xNlsxXSA9PSBIb3N0U3dhcDE2KDB4MDAwMCkgJiYKKyAgICAgICAgICAgICBhSXA2QWRkci5tRmllbGRzLm0xNlsyXSA9PSBIb3N0U3dhcDE2KDB4MDAwMCkgJiYKKyAgICAgICAgICAgICBhSXA2QWRkci5tRmllbGRzLm0xNlszXSA9PSBIb3N0U3dhcDE2KDB4MDAwMCkgJiYKKyAgICAgICAgICAgICBhSXA2QWRkci5tRmllbGRzLm0xNls0XSA9PSBIb3N0U3dhcDE2KDB4MDAwMCkgJiYKKyAgICAgICAgICAgICBhSXA2QWRkci5tRmllbGRzLm0xNls1XSA9PSBIb3N0U3dhcDE2KDB4MDBmZikgJiYKKyAgICAgICAgICAgICBhSXA2QWRkci5tRmllbGRzLm0xNls2XSA9PSBIb3N0U3dhcDE2KDB4ZmUwMCkpCisgICAgeworICAgICAgICBhTWFjQWRkci5tTGVuZ3RoID0gc2l6ZW9mKGFNYWNBZGRyLm1TaG9ydEFkZHJlc3MpOworICAgICAgICBhTWFjQWRkci5tU2hvcnRBZGRyZXNzID0gSG9zdFN3YXAxNihhSXA2QWRkci5tRmllbGRzLm0xNls3XSk7CisgICAgfQorICAgIGVsc2UgaWYgKEdldE5ldGlmKCkuR2V0TWxlKCkuSXNSb3V0aW5nTG9jYXRvcihhSXA2QWRkcikpCisgICAgeworICAgICAgICBhTWFjQWRkci5tTGVuZ3RoID0gc2l6ZW9mKGFNYWNBZGRyLm1TaG9ydEFkZHJlc3MpOworICAgICAgICBhTWFjQWRkci5tU2hvcnRBZGRyZXNzID0gSG9zdFN3YXAxNihhSXA2QWRkci5tRmllbGRzLm0xNls3XSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFNYWNBZGRyLm1MZW5ndGggPSBzaXplb2YoYU1hY0FkZHIubUV4dEFkZHJlc3MpOworICAgICAgICBhTWFjQWRkci5tRXh0QWRkcmVzcy5TZXQoYUlwNkFkZHIpOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1lc2hGb3J3YXJkZXI6OkhhbmRsZUZyYW1lUmVxdWVzdChNYWM6OlNlbmRlciAmYVNlbmRlciwgTWFjOjpGcmFtZSAmYUZyYW1lKQoreworICAgIHJldHVybiBHZXRPd25lcihhU2VuZGVyKS5IYW5kbGVGcmFtZVJlcXVlc3QoYUZyYW1lKTsKK30KKworb3RFcnJvciBNZXNoRm9yd2FyZGVyOjpIYW5kbGVGcmFtZVJlcXVlc3QoTWFjOjpGcmFtZSAmYUZyYW1lKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWFjOjpBZGRyZXNzIG1hY0Rlc3Q7CisgICAgQ2hpbGQgKmNoaWxkID0gTlVMTDsKKworICAgIFZlcmlmeU9yRXhpdChtRW5hYmxlZCwgZXJyb3IgPSBPVF9FUlJPUl9BQk9SVCk7CisKKyAgICBtU2VuZEJ1c3kgPSB0cnVlOworCisgICAgaWYgKG1TZW5kTWVzc2FnZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgU2VuZEVtcHR5RnJhbWUoYUZyYW1lLCBmYWxzZSk7CisgICAgICAgIGFGcmFtZS5TZXRJc0FSZXRyYW5zbWlzc2lvbihmYWxzZSk7CisgICAgICAgIGFGcmFtZS5TZXRNYXhUeEF0dGVtcHRzKE1hYzo6a0RpcmVjdEZyYW1lTWFjVHhBdHRlbXB0cyk7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1TZW5kTWVzc2FnZS0+R2V0VHlwZSgpKQorICAgIHsKKyAgICBjYXNlIE1lc3NhZ2U6OmtUeXBlSXA2OgorICAgICAgICBpZiAobVNlbmRNZXNzYWdlLT5HZXRTdWJUeXBlKCkgPT0gTWVzc2FnZTo6a1N1YlR5cGVNbGVEaXNjb3ZlclJlcXVlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ldGlmLkdldE1hYygpLlNldENoYW5uZWwobVNjYW5DaGFubmVsKTsKKyAgICAgICAgICAgIGFGcmFtZS5TZXRDaGFubmVsKG1TY2FuQ2hhbm5lbCk7CisKKyAgICAgICAgICAgIC8vIEluIGNhc2UgYSBzcGVjaWZpYyBQQU4gSUQgb2YgYSBUaHJlYWQgTmV0d29yayB0byBiZSBkaXNjb3ZlcmVkIGlzIG5vdCBrbm93biwgRGlzY292ZXJ5CisgICAgICAgICAgICAvLyBSZXF1ZXN0IG1lc3NhZ2VzIE1VU1QgaGF2ZSB0aGUgRGVzdGluYXRpb24gUEFOIElEIGluIHRoZSBJRUVFIDgwMi4xNS40IE1BQyBoZWFkZXIgc2V0CisgICAgICAgICAgICAvLyB0byBiZSB0aGUgQnJvYWRjYXN0IFBBTiBJRCAoMHhGRkZGKSBhbmQgdGhlIFNvdXJjZSBQQU4gSUQgc2V0IHRvIGEgcmFuZG9tbHkgZ2VuZXJhdGVkCisgICAgICAgICAgICAvLyB2YWx1ZS4KKyAgICAgICAgICAgIGlmIChtU2VuZE1lc3NhZ2UtPkdldFBhbklkKCkgPT0gTWFjOjprUGFuSWRCcm9hZGNhc3QgJiYKKyAgICAgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5HZXRQYW5JZCgpID09IE1hYzo6a1BhbklkQnJvYWRjYXN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVpbnQxNl90IHBhbmlkOworCisgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhbmlkID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUgKHBhbmlkID09IE1hYzo6a1BhbklkQnJvYWRjYXN0KTsKKworICAgICAgICAgICAgICAgIG5ldGlmLkdldE1hYygpLlNldFBhbklkKHBhbmlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGVycm9yID0gU2VuZEZyYWdtZW50KCptU2VuZE1lc3NhZ2UsIGFGcmFtZSk7CisKKyAgICAgICAgLy8gYFNlbmRGcmFnbWVudCgpYCBmYWlscyB3aXRoIGBOb3RDYXBhYmxlYCBlcnJvciBpZiB0aGUgbWVzc2FnZSBpcyBNTEUgKHdpdGgKKyAgICAgICAgLy8gbm8gbGluayBsYXllciBzZWN1cml0eSkgYW5kIGFsc28gcmVxdWlyZXMgZnJhZ21lbnRhdGlvbi4KKyAgICAgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PVF9DQVBBQkxFKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBFbmFibGUgc2VjdXJpdHkgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgICAgIG1TZW5kTWVzc2FnZS0+U2V0TGlua1NlY3VyaXR5RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgIGVycm9yID0gU2VuZEZyYWdtZW50KCptU2VuZE1lc3NhZ2UsIGFGcmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnQoYUZyYW1lLkdldExlbmd0aCgpICE9IDcpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVzc2FnZTo6a1R5cGU2bG93cGFuOgorICAgICAgICBlcnJvciA9IFNlbmRNZXNoKCptU2VuZE1lc3NhZ2UsIGFGcmFtZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZXNzYWdlOjprVHlwZU1hY0RhdGFQb2xsOgorICAgICAgICBlcnJvciA9IFNlbmRQb2xsKCptU2VuZE1lc3NhZ2UsIGFGcmFtZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZXNzYWdlOjprVHlwZVN1cGVydmlzaW9uOgorICAgICAgICBlcnJvciA9IFNlbmRFbXB0eUZyYW1lKGFGcmFtZSwga1N1cGVydmlzaW9uTXNnQWNrUmVxdWVzdCk7CisgICAgICAgIG1NZXNzYWdlTmV4dE9mZnNldCA9IG1TZW5kTWVzc2FnZS0+R2V0TGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGFzc2VydChlcnJvciA9PSBPVF9FUlJPUl9OT05FKTsKKworICAgIGFGcmFtZS5HZXREc3RBZGRyKG1hY0Rlc3QpOworCisgICAgLy8gU2V0IGBGcmFtZVBlbmRpbmdgIGlmIHRoZXJlIGFyZSBtb3JlIHF1ZXVlZCBtZXNzYWdlcyAoZXhjbHVkaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgb25lIGJlaW5nIHNlbnQgb3V0KSBmb3IgdGhlIGNoaWxkIChub3RlIGA+IDFgIGNoZWNrKS4KKyAgICAvLyBUaGUgY2FzZSB3aGVyZSB0aGUgY3VycmVudCBtZXNzYWdlIHJlcXVpcmVzIGZyYWdtZW50YXRpb24gaXMKKyAgICAvLyBhbHJlYWR5IGNoZWNrZWQgYW5kIGhhbmRsZWQgaW4gYFNlbmRGcmFnbWVudCgpYCBtZXRob2QuCisKKyAgICBpZiAoKChjaGlsZCA9IG5ldGlmLkdldE1sZSgpLkdldENoaWxkKG1hY0Rlc3QpKSAhPSBOVUxMKQorICAgICAgICAmJiAhY2hpbGQtPklzUnhPbldoZW5JZGxlKCkKKyAgICAgICAgJiYgKGNoaWxkLT5HZXRJbmRpcmVjdE1lc3NhZ2VDb3VudCgpID4gMSkpCisgICAgeworICAgICAgICBhRnJhbWUuU2V0RnJhbWVQZW5kaW5nKHRydWUpOworICAgIH0KKworICAgIGFGcmFtZS5TZXRJc0FSZXRyYW5zbWlzc2lvbihtU2VuZE1lc3NhZ2VJc0FSZXRyYW5zbWlzc2lvbik7CisgICAgYUZyYW1lLlNldE1heFR4QXR0ZW1wdHMobVNlbmRNZXNzYWdlTWF4TWFjVHhBdHRlbXB0cyk7CisKKyAgICBpZiAobVNlbmRNZXNzYWdlSXNBUmV0cmFuc21pc3Npb24pCisgICAgeworICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSByZS10cmFuc21pc3Npb24gb2YgYW4gaW5kaXJlY3QgZnJhbWUgdG8gYSBzbGVlcHkgY2hpbGQsIHdlCisgICAgICAgIC8vIGVuc3VyZSB0byB1c2UgdGhlIHNhbWUgZnJhbWUgY291bnRlciwga2V5IGlkLCBhbmQgZGF0YSBzZXF1ZW5jZSBudW1iZXIgYXMKKyAgICAgICAgLy8gdGhlIGxhc3QgYXR0ZW1wdC4KKworICAgICAgICBhRnJhbWUuU2V0U2VxdWVuY2UobVNlbmRNZXNzYWdlRGF0YVNlcXVlbmNlTnVtYmVyKTsKKworICAgICAgICBpZiAoYUZyYW1lLkdldFNlY3VyaXR5RW5hYmxlZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBhRnJhbWUuU2V0RnJhbWVDb3VudGVyKG1TZW5kTWVzc2FnZUZyYW1lQ291bnRlcik7CisgICAgICAgICAgICBhRnJhbWUuU2V0S2V5SWQobVNlbmRNZXNzYWdlS2V5SWQpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNZXNoRm9yd2FyZGVyOjpTZW5kUG9sbChNZXNzYWdlICZhTWVzc2FnZSwgTWFjOjpGcmFtZSAmYUZyYW1lKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgTWFjOjpBZGRyZXNzIG1hY1NvdXJjZTsKKyAgICB1aW50MTZfdCBmY2Y7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yOworCisgICAgbWFjU291cmNlLm1TaG9ydEFkZHJlc3MgPSBuZXRpZi5HZXRNYWMoKS5HZXRTaG9ydEFkZHJlc3MoKTsKKworICAgIGlmIChtYWNTb3VyY2UubVNob3J0QWRkcmVzcyAhPSBNYWM6OmtTaG9ydEFkZHJJbnZhbGlkKQorICAgIHsKKyAgICAgICAgbWFjU291cmNlLm1MZW5ndGggPSBzaXplb2YobWFjU291cmNlLm1TaG9ydEFkZHJlc3MpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtYWNTb3VyY2UubUxlbmd0aCA9IHNpemVvZihtYWNTb3VyY2UubUV4dEFkZHJlc3MpOworICAgICAgICBtZW1jcHkoJm1hY1NvdXJjZS5tRXh0QWRkcmVzcywgbmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpLCBzaXplb2YobWFjU291cmNlLm1FeHRBZGRyZXNzKSk7CisgICAgfQorCisgICAgLy8gaW5pdGlhbGl6ZSBNQUMgaGVhZGVyCisgICAgZmNmID0gTWFjOjpGcmFtZTo6a0ZjZkZyYW1lTWFjQ21kIHwgTWFjOjpGcmFtZTo6a0ZjZlBhbmlkQ29tcHJlc3Npb24gfCBNYWM6OkZyYW1lOjprRmNmRnJhbWVWZXJzaW9uMjAwNjsKKworICAgIGlmIChtYWNTb3VyY2UubUxlbmd0aCA9PSBzaXplb2YoTWFjOjpTaG9ydEFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgZmNmIHw9IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkclNob3J0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmY2YgfD0gTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJFeHQgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkckV4dDsKKyAgICB9CisKKyAgICBmY2YgfD0gTWFjOjpGcmFtZTo6a0ZjZkFja1JlcXVlc3QgfCBNYWM6OkZyYW1lOjprRmNmU2VjdXJpdHlFbmFibGVkOworCisgICAgYUZyYW1lLkluaXRNYWNIZWFkZXIoZmNmLCBNYWM6OkZyYW1lOjprS2V5SWRNb2RlMSB8IE1hYzo6RnJhbWU6OmtTZWNFbmNNaWMzMik7CisgICAgYUZyYW1lLlNldERzdFBhbklkKG5ldGlmLkdldE1hYygpLkdldFBhbklkKCkpOworCisgICAgbmVpZ2hib3IgPSBuZXRpZi5HZXRNbGUoKS5HZXRQYXJlbnQoKTsKKyAgICBhc3NlcnQobmVpZ2hib3IgIT0gTlVMTCk7CisKKyAgICBpZiAobWFjU291cmNlLm1MZW5ndGggPT0gMikKKyAgICB7CisgICAgICAgIGFGcmFtZS5TZXREc3RBZGRyKG5laWdoYm9yLT5HZXRSbG9jMTYoKSk7CisgICAgICAgIGFGcmFtZS5TZXRTcmNBZGRyKG1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYUZyYW1lLlNldERzdEFkZHIobmVpZ2hib3ItPkdldEV4dEFkZHJlc3MoKSk7CisgICAgICAgIGFGcmFtZS5TZXRTcmNBZGRyKG1hY1NvdXJjZS5tRXh0QWRkcmVzcyk7CisgICAgfQorCisgICAgYUZyYW1lLlNldENvbW1hbmRJZChNYWM6OkZyYW1lOjprTWFjQ21kRGF0YVJlcXVlc3QpOworCisgICAgbU1lc3NhZ2VOZXh0T2Zmc2V0ID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNZXNoRm9yd2FyZGVyOjpTZW5kTWVzaChNZXNzYWdlICZhTWVzc2FnZSwgTWFjOjpGcmFtZSAmYUZyYW1lKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgdWludDE2X3QgZmNmOworCisgICAgLy8gaW5pdGlhbGl6ZSBNQUMgaGVhZGVyCisgICAgZmNmID0gTWFjOjpGcmFtZTo6a0ZjZkZyYW1lRGF0YSB8IE1hYzo6RnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uIHwgTWFjOjpGcmFtZTo6a0ZjZkZyYW1lVmVyc2lvbjIwMDYgfAorICAgICAgICAgIE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkclNob3J0IHwKKyAgICAgICAgICBNYWM6OkZyYW1lOjprRmNmQWNrUmVxdWVzdCB8IE1hYzo6RnJhbWU6OmtGY2ZTZWN1cml0eUVuYWJsZWQ7CisKKyAgICBhRnJhbWUuSW5pdE1hY0hlYWRlcihmY2YsIE1hYzo6RnJhbWU6OmtLZXlJZE1vZGUxIHwgTWFjOjpGcmFtZTo6a1NlY0VuY01pYzMyKTsKKyAgICBhRnJhbWUuU2V0RHN0UGFuSWQobmV0aWYuR2V0TWFjKCkuR2V0UGFuSWQoKSk7CisgICAgYUZyYW1lLlNldERzdEFkZHIobU1hY0Rlc3QubVNob3J0QWRkcmVzcyk7CisgICAgYUZyYW1lLlNldFNyY0FkZHIobU1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKworICAgIC8vIHdyaXRlIHBheWxvYWQKKyAgICBhc3NlcnQoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgPD0gYUZyYW1lLkdldE1heFBheWxvYWRMZW5ndGgoKSk7CisgICAgYU1lc3NhZ2UuUmVhZCgwLCBhTWVzc2FnZS5HZXRMZW5ndGgoKSwgYUZyYW1lLkdldFBheWxvYWQoKSk7CisgICAgYUZyYW1lLlNldFBheWxvYWRMZW5ndGgoc3RhdGljX2Nhc3Q8dWludDhfdD4oYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpKTsKKworICAgIG1NZXNzYWdlTmV4dE9mZnNldCA9IGFNZXNzYWdlLkdldExlbmd0aCgpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6U2VuZEZyYWdtZW50KE1lc3NhZ2UgJmFNZXNzYWdlLCBNYWM6OkZyYW1lICZhRnJhbWUpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBNYWM6OkFkZHJlc3MgbWVzaERlc3QsIG1lc2hTb3VyY2U7CisgICAgdWludDE2X3QgZmNmOworICAgIExvd3Bhbjo6RnJhZ21lbnRIZWFkZXIgKmZyYWdtZW50SGVhZGVyOworICAgIExvd3Bhbjo6TWVzaEhlYWRlciBtZXNoSGVhZGVyOworICAgIHVpbnQ4X3QgKnBheWxvYWQ7CisgICAgdWludDhfdCBoZWFkZXJMZW5ndGg7CisgICAgdWludDhfdCBob3BzTGVmdDsKKyAgICB1aW50MTZfdCBwYXlsb2FkTGVuZ3RoOworICAgIGludCBoY0xlbmd0aDsKKyAgICB1aW50MTZfdCBmcmFnbWVudExlbmd0aDsKKyAgICB1aW50MTZfdCBkc3RwYW47CisgICAgdWludDhfdCBzZWNDdGwgPSBNYWM6OkZyYW1lOjprU2VjTm9uZTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChtQWRkTWVzaEhlYWRlcikKKyAgICB7CisgICAgICAgIG1lc2hTb3VyY2UubUxlbmd0aCA9IHNpemVvZihtZXNoU291cmNlLm1TaG9ydEFkZHJlc3MpOworICAgICAgICBtZXNoU291cmNlLm1TaG9ydEFkZHJlc3MgPSBtTWVzaFNvdXJjZTsKKyAgICAgICAgbWVzaERlc3QubUxlbmd0aCA9IHNpemVvZihtZXNoRGVzdC5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgbWVzaERlc3QubVNob3J0QWRkcmVzcyA9IG1NZXNoRGVzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWVzaERlc3QgPSBtTWFjRGVzdDsKKyAgICAgICAgbWVzaFNvdXJjZSA9IG1NYWNTb3VyY2U7CisgICAgfQorCisgICAgLy8gaW5pdGlhbGl6ZSBNQUMgaGVhZGVyCisgICAgZmNmID0gTWFjOjpGcmFtZTo6a0ZjZkZyYW1lRGF0YSB8IE1hYzo6RnJhbWU6OmtGY2ZGcmFtZVZlcnNpb24yMDA2OworICAgIGZjZiB8PSAobU1hY0Rlc3QubUxlbmd0aCA9PSAyKSA/IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQgOiBNYWM6OkZyYW1lOjprRmNmRHN0QWRkckV4dDsKKyAgICBmY2YgfD0gKG1NYWNTb3VyY2UubUxlbmd0aCA9PSAyKSA/IE1hYzo6RnJhbWU6OmtGY2ZTcmNBZGRyU2hvcnQgOiBNYWM6OkZyYW1lOjprRmNmU3JjQWRkckV4dDsKKworICAgIC8vIGFsbCB1bmljYXN0IGZyYW1lcyByZXF1ZXN0IEFDSworICAgIGlmIChtTWFjRGVzdC5tTGVuZ3RoID09IDggfHwgbU1hY0Rlc3QubVNob3J0QWRkcmVzcyAhPSBNYWM6OmtTaG9ydEFkZHJCcm9hZGNhc3QpCisgICAgeworICAgICAgICBmY2YgfD0gTWFjOjpGcmFtZTo6a0ZjZkFja1JlcXVlc3Q7CisgICAgfQorCisgICAgaWYgKGFNZXNzYWdlLklzTGlua1NlY3VyaXR5RW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgZmNmIHw9IE1hYzo6RnJhbWU6OmtGY2ZTZWN1cml0eUVuYWJsZWQ7CisKKyAgICAgICAgc3dpdGNoIChhTWVzc2FnZS5HZXRTdWJUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBNZXNzYWdlOjprU3ViVHlwZUpvaW5lckVudHJ1c3Q6CisgICAgICAgICAgICBzZWNDdGwgPSBzdGF0aWNfY2FzdDx1aW50OF90PihNYWM6OkZyYW1lOjprS2V5SWRNb2RlMCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1lc3NhZ2U6OmtTdWJUeXBlTWxlQW5ub3VuY2U6CisgICAgICAgICAgICBzZWNDdGwgPSBzdGF0aWNfY2FzdDx1aW50OF90PihNYWM6OkZyYW1lOjprS2V5SWRNb2RlMik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VjQ3RsID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oTWFjOjpGcmFtZTo6a0tleUlkTW9kZTEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZWNDdGwgfD0gTWFjOjpGcmFtZTo6a1NlY0VuY01pYzMyOworICAgIH0KKworICAgIGRzdHBhbiA9IG5ldGlmLkdldE1hYygpLkdldFBhbklkKCk7CisKKyAgICBzd2l0Y2ggKGFNZXNzYWdlLkdldFN1YlR5cGUoKSkKKyAgICB7CisgICAgY2FzZSBNZXNzYWdlOjprU3ViVHlwZU1sZUFubm91bmNlOgorICAgICAgICBhRnJhbWUuU2V0Q2hhbm5lbChhTWVzc2FnZS5HZXRDaGFubmVsKCkpOworICAgICAgICBkc3RwYW4gPSBNYWM6OmtQYW5JZEJyb2FkY2FzdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lc3NhZ2U6OmtTdWJUeXBlTWxlRGlzY292ZXJSZXF1ZXN0OgorICAgIGNhc2UgTWVzc2FnZTo6a1N1YlR5cGVNbGVEaXNjb3ZlclJlc3BvbnNlOgorICAgICAgICBkc3RwYW4gPSBhTWVzc2FnZS5HZXRQYW5JZCgpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChkc3RwYW4gPT0gbmV0aWYuR2V0TWFjKCkuR2V0UGFuSWQoKSkKKyAgICB7CisgICAgICAgIGZjZiB8PSBNYWM6OkZyYW1lOjprRmNmUGFuaWRDb21wcmVzc2lvbjsKKyAgICB9CisKKyAgICBhRnJhbWUuSW5pdE1hY0hlYWRlcihmY2YsIHNlY0N0bCk7CisgICAgYUZyYW1lLlNldERzdFBhbklkKGRzdHBhbik7CisgICAgYUZyYW1lLlNldFNyY1BhbklkKG5ldGlmLkdldE1hYygpLkdldFBhbklkKCkpOworCisgICAgaWYgKG1NYWNEZXN0Lm1MZW5ndGggPT0gMikKKyAgICB7CisgICAgICAgIGFGcmFtZS5TZXREc3RBZGRyKG1NYWNEZXN0Lm1TaG9ydEFkZHJlc3MpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhRnJhbWUuU2V0RHN0QWRkcihtTWFjRGVzdC5tRXh0QWRkcmVzcyk7CisgICAgfQorCisgICAgaWYgKG1NYWNTb3VyY2UubUxlbmd0aCA9PSAyKQorICAgIHsKKyAgICAgICAgYUZyYW1lLlNldFNyY0FkZHIobU1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYUZyYW1lLlNldFNyY0FkZHIobU1hY1NvdXJjZS5tRXh0QWRkcmVzcyk7CisgICAgfQorCisgICAgcGF5bG9hZCA9IGFGcmFtZS5HZXRQYXlsb2FkKCk7CisKKyAgICBoZWFkZXJMZW5ndGggPSAwOworCisgICAgLy8gaW5pdGlhbGl6ZSBNZXNoIGhlYWRlcgorICAgIGlmIChtQWRkTWVzaEhlYWRlcikKKyAgICB7CisgICAgICAgIGlmIChuZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfQ0hJTEQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJFRUQgc2V0cyBob3BzTGVmdCB0byBtYXggKDE2KSArIDEuIEl0IGRvZXMgbm90IGtub3cgdGhlIHJvdXRlIGNvc3QuCisgICAgICAgICAgICBob3BzTGVmdCA9IE1sZTo6a01heFJvdXRlQ29zdCArIDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBwcmVkaWN0ZWQgaG9wcy4KKyAgICAgICAgICAgIGhvcHNMZWZ0ID0gbmV0aWYuR2V0TWxlKCkuR2V0Um91dGVDb3N0KG1NZXNoRGVzdCk7CisKKyAgICAgICAgICAgIGlmIChob3BzTGVmdCAhPSBNbGU6OmtNYXhSb3V0ZUNvc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaG9wc0xlZnQgKz0gbmV0aWYuR2V0TWxlKCkuR2V0TGlua0Nvc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmLkdldE1sZSgpLkdldFJvdXRlcklkKG5ldGlmLkdldE1sZSgpLkdldE5leHRIb3AobU1lc2hEZXN0KSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gcm91dGUgdG8gdGhlIGRlc3RpbmF0aW9uIHJvdXRlciAob25seSBsaW5rKS4KKyAgICAgICAgICAgICAgICBob3BzTGVmdCA9IG5ldGlmLkdldE1sZSgpLkdldExpbmtDb3N0KG5ldGlmLkdldE1sZSgpLkdldFJvdXRlcklkKG1NZXNoRGVzdCkpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgaG9wc0xmdCBmaWVsZCBNVVNUIGJlIGluY3JlbWVudGVkIGJ5IG9uZSBpZiB0aGUgZGVzdGluYXRpb24gUkxPQzE2CisgICAgICAgIC8vIGlzIG5vdCB0aGF0IG9mIGFuIGFjdGl2ZSBSb3V0ZXIuCisgICAgICAgIGlmICghbmV0aWYuR2V0TWxlKCkuSXNBY3RpdmVSb3V0ZXIobU1lc2hEZXN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgaG9wc0xlZnQgKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIG1lc2hIZWFkZXIuSW5pdCgpOworICAgICAgICBtZXNoSGVhZGVyLlNldEhvcHNMZWZ0KGhvcHNMZWZ0ICsgTG93cGFuOjpNZXNoSGVhZGVyOjprQWRkaXRpb25hbEhvcHNMZWZ0KTsKKyAgICAgICAgbWVzaEhlYWRlci5TZXRTb3VyY2UobU1lc2hTb3VyY2UpOworICAgICAgICBtZXNoSGVhZGVyLlNldERlc3RpbmF0aW9uKG1NZXNoRGVzdCk7CisgICAgICAgIG1lc2hIZWFkZXIuQXBwZW5kVG8ocGF5bG9hZCk7CisgICAgICAgIHBheWxvYWQgKz0gbWVzaEhlYWRlci5HZXRIZWFkZXJMZW5ndGgoKTsKKyAgICAgICAgaGVhZGVyTGVuZ3RoICs9IG1lc2hIZWFkZXIuR2V0SGVhZGVyTGVuZ3RoKCk7CisgICAgfQorCisgICAgLy8gY29weSBJUHY2IEhlYWRlcgorICAgIGlmIChhTWVzc2FnZS5HZXRPZmZzZXQoKSA9PSAwKQorICAgIHsKKyAgICAgICAgaGNMZW5ndGggPSBuZXRpZi5HZXRMb3dwYW4oKS5Db21wcmVzcyhhTWVzc2FnZSwgbWVzaFNvdXJjZSwgbWVzaERlc3QsIHBheWxvYWQpOworICAgICAgICBhc3NlcnQoaGNMZW5ndGggPiAwKTsKKyAgICAgICAgaGVhZGVyTGVuZ3RoICs9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGhjTGVuZ3RoKTsKKworICAgICAgICBwYXlsb2FkTGVuZ3RoID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKworICAgICAgICBmcmFnbWVudExlbmd0aCA9IGFGcmFtZS5HZXRNYXhQYXlsb2FkTGVuZ3RoKCkgLSBoZWFkZXJMZW5ndGg7CisKKyAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPiBmcmFnbWVudExlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCghYU1lc3NhZ2UuSXNMaW5rU2VjdXJpdHlFbmFibGVkKCkpICYmIGFNZXNzYWdlLklzU3ViVHlwZU1sZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFNZXNzYWdlLlNldE9mZnNldCgwKTsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9UX0NBUEFCTEUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB3cml0ZSBGcmFnbWVudCBoZWFkZXIKKyAgICAgICAgICAgIGlmIChhTWVzc2FnZS5HZXREYXRhZ3JhbVRhZygpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gYXZvaWQgdXNpbmcgZGF0YWdyYW0gdGFnIHZhbHVlIDAsIHdoaWNoIGluZGljYXRlcyB0aGUgdGFnIGhhcyBub3QgYmVlbiBzZXQKKyAgICAgICAgICAgICAgICBpZiAobUZyYWdUYWcgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1GcmFnVGFnKys7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYU1lc3NhZ2UuU2V0RGF0YWdyYW1UYWcobUZyYWdUYWcrKyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1lbW1vdmUocGF5bG9hZCArIDQsIHBheWxvYWQsIGhlYWRlckxlbmd0aCk7CisKKyAgICAgICAgICAgIHBheWxvYWRMZW5ndGggPSAoYUZyYW1lLkdldE1heFBheWxvYWRMZW5ndGgoKSAtIGhlYWRlckxlbmd0aCAtIDQpICYgfjB4NzsKKworICAgICAgICAgICAgZnJhZ21lbnRIZWFkZXIgPSByZWludGVycHJldF9jYXN0PExvd3Bhbjo6RnJhZ21lbnRIZWFkZXIgKj4ocGF5bG9hZCk7CisgICAgICAgICAgICBmcmFnbWVudEhlYWRlci0+SW5pdCgpOworICAgICAgICAgICAgZnJhZ21lbnRIZWFkZXItPlNldERhdGFncmFtU2l6ZShhTWVzc2FnZS5HZXRMZW5ndGgoKSk7CisgICAgICAgICAgICBmcmFnbWVudEhlYWRlci0+U2V0RGF0YWdyYW1UYWcoYU1lc3NhZ2UuR2V0RGF0YWdyYW1UYWcoKSk7CisgICAgICAgICAgICBmcmFnbWVudEhlYWRlci0+U2V0RGF0YWdyYW1PZmZzZXQoMCk7CisKKyAgICAgICAgICAgIHBheWxvYWQgKz0gZnJhZ21lbnRIZWFkZXItPkdldEhlYWRlckxlbmd0aCgpOworICAgICAgICAgICAgaGVhZGVyTGVuZ3RoICs9IGZyYWdtZW50SGVhZGVyLT5HZXRIZWFkZXJMZW5ndGgoKTsKKyAgICAgICAgfQorCisgICAgICAgIHBheWxvYWQgKz0gaGNMZW5ndGg7CisKKyAgICAgICAgLy8gY29weSBJUHY2IFBheWxvYWQKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgcGF5bG9hZExlbmd0aCwgcGF5bG9hZCk7CisgICAgICAgIGFGcmFtZS5TZXRQYXlsb2FkTGVuZ3RoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGhlYWRlckxlbmd0aCArIHBheWxvYWRMZW5ndGgpKTsKKworICAgICAgICBtTWVzc2FnZU5leHRPZmZzZXQgPSBhTWVzc2FnZS5HZXRPZmZzZXQoKSArIHBheWxvYWRMZW5ndGg7CisgICAgICAgIGFNZXNzYWdlLlNldE9mZnNldCgwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcGF5bG9hZExlbmd0aCA9IGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisKKyAgICAgICAgLy8gd3JpdGUgRnJhZ21lbnQgaGVhZGVyCisgICAgICAgIGZyYWdtZW50SGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxMb3dwYW46OkZyYWdtZW50SGVhZGVyICo+KHBheWxvYWQpOworICAgICAgICBmcmFnbWVudEhlYWRlci0+SW5pdCgpOworICAgICAgICBmcmFnbWVudEhlYWRlci0+U2V0RGF0YWdyYW1TaXplKGFNZXNzYWdlLkdldExlbmd0aCgpKTsKKyAgICAgICAgZnJhZ21lbnRIZWFkZXItPlNldERhdGFncmFtVGFnKGFNZXNzYWdlLkdldERhdGFncmFtVGFnKCkpOworICAgICAgICBmcmFnbWVudEhlYWRlci0+U2V0RGF0YWdyYW1PZmZzZXQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCkpOworCisgICAgICAgIHBheWxvYWQgKz0gZnJhZ21lbnRIZWFkZXItPkdldEhlYWRlckxlbmd0aCgpOworICAgICAgICBoZWFkZXJMZW5ndGggKz0gZnJhZ21lbnRIZWFkZXItPkdldEhlYWRlckxlbmd0aCgpOworCisgICAgICAgIGZyYWdtZW50TGVuZ3RoID0gKGFGcmFtZS5HZXRNYXhQYXlsb2FkTGVuZ3RoKCkgLSBoZWFkZXJMZW5ndGgpICYgfjB4NzsKKworICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA+IGZyYWdtZW50TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBwYXlsb2FkTGVuZ3RoID0gZnJhZ21lbnRMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICAvLyBjb3B5IElQdjYgUGF5bG9hZAorICAgICAgICBhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBwYXlsb2FkTGVuZ3RoLCBwYXlsb2FkKTsKKyAgICAgICAgYUZyYW1lLlNldFBheWxvYWRMZW5ndGgoc3RhdGljX2Nhc3Q8dWludDhfdD4oaGVhZGVyTGVuZ3RoICsgcGF5bG9hZExlbmd0aCkpOworCisgICAgICAgIG1NZXNzYWdlTmV4dE9mZnNldCA9IGFNZXNzYWdlLkdldE9mZnNldCgpICsgcGF5bG9hZExlbmd0aDsKKyAgICB9CisKKyAgICBpZiAobU1lc3NhZ2VOZXh0T2Zmc2V0IDwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICBhRnJhbWUuU2V0RnJhbWVQZW5kaW5nKHRydWUpOworICAgIH0KKworZXhpdDoKKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNZXNoRm9yd2FyZGVyOjpTZW5kRW1wdHlGcmFtZShNYWM6OkZyYW1lICZhRnJhbWUsIGJvb2wgYUFja1JlcXVlc3QpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICB1aW50MTZfdCBmY2Y7CisgICAgdWludDhfdCBzZWNDdGw7CisgICAgTWFjOjpBZGRyZXNzIG1hY1NvdXJjZTsKKworICAgIG1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzID0gbmV0aWYuR2V0TWFjKCkuR2V0U2hvcnRBZGRyZXNzKCk7CisKKyAgICBpZiAobWFjU291cmNlLm1TaG9ydEFkZHJlc3MgIT0gTWFjOjprU2hvcnRBZGRySW52YWxpZCkKKyAgICB7CisgICAgICAgIG1hY1NvdXJjZS5tTGVuZ3RoID0gc2l6ZW9mKG1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWFjU291cmNlLm1MZW5ndGggPSBzaXplb2YobWFjU291cmNlLm1FeHRBZGRyZXNzKTsKKyAgICAgICAgbWVtY3B5KCZtYWNTb3VyY2UubUV4dEFkZHJlc3MsIG5ldGlmLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSwgc2l6ZW9mKG1hY1NvdXJjZS5tRXh0QWRkcmVzcykpOworICAgIH0KKworICAgIGZjZiA9IE1hYzo6RnJhbWU6OmtGY2ZGcmFtZURhdGEgfCBNYWM6OkZyYW1lOjprRmNmRnJhbWVWZXJzaW9uMjAwNjsKKyAgICBmY2YgfD0gKG1NYWNEZXN0Lm1MZW5ndGggPT0gMikgPyBNYWM6OkZyYW1lOjprRmNmRHN0QWRkclNob3J0IDogTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJFeHQ7CisgICAgZmNmIHw9IChtYWNTb3VyY2UubUxlbmd0aCA9PSAyKSA/IE1hYzo6RnJhbWU6OmtGY2ZTcmNBZGRyU2hvcnQgOiBNYWM6OkZyYW1lOjprRmNmU3JjQWRkckV4dDsKKworICAgIGlmIChhQWNrUmVxdWVzdCkKKyAgICB7CisgICAgICAgIGZjZiB8PSBNYWM6OkZyYW1lOjprRmNmQWNrUmVxdWVzdDsKKyAgICB9CisKKyAgICBmY2YgfD0gTWFjOjpGcmFtZTo6a0ZjZlNlY3VyaXR5RW5hYmxlZDsKKyAgICBzZWNDdGwgPSBNYWM6OkZyYW1lOjprS2V5SWRNb2RlMTsKKyAgICBzZWNDdGwgfD0gTWFjOjpGcmFtZTo6a1NlY0VuY01pYzMyOworCisgICAgZmNmIHw9IE1hYzo6RnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uOworCisgICAgYUZyYW1lLkluaXRNYWNIZWFkZXIoZmNmLCBzZWNDdGwpOworCisgICAgYUZyYW1lLlNldERzdFBhbklkKG5ldGlmLkdldE1hYygpLkdldFBhbklkKCkpOworICAgIGFGcmFtZS5TZXRTcmNQYW5JZChuZXRpZi5HZXRNYWMoKS5HZXRQYW5JZCgpKTsKKworICAgIGlmIChtTWFjRGVzdC5tTGVuZ3RoID09IDIpCisgICAgeworICAgICAgICBhRnJhbWUuU2V0RHN0QWRkcihtTWFjRGVzdC5tU2hvcnRBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYUZyYW1lLlNldERzdEFkZHIobU1hY0Rlc3QubUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIGlmIChtYWNTb3VyY2UubUxlbmd0aCA9PSAyKQorICAgIHsKKyAgICAgICAgYUZyYW1lLlNldFNyY0FkZHIobWFjU291cmNlLm1TaG9ydEFkZHJlc3MpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhRnJhbWUuU2V0U3JjQWRkcihtYWNTb3VyY2UubUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIGFGcmFtZS5TZXRQYXlsb2FkTGVuZ3RoKDApOworICAgIGFGcmFtZS5TZXRGcmFtZVBlbmRpbmcoZmFsc2UpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6SGFuZGxlU2VudEZyYW1lKE1hYzo6U2VuZGVyICZhU2VuZGVyLCBNYWM6OkZyYW1lICZhRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgIEdldE93bmVyKGFTZW5kZXIpLkhhbmRsZVNlbnRGcmFtZShhRnJhbWUsIGFFcnJvcik7Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6SGFuZGxlU2VudEZyYW1lKE1hYzo6RnJhbWUgJmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBNYWM6OkFkZHJlc3MgbWFjRGVzdDsKKyAgICBDaGlsZCAqY2hpbGQ7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yOworICAgIHVpbnQ4X3QgY2hpbGRJbmRleDsKKworICAgIG1TZW5kQnVzeSA9IGZhbHNlOworCisgICAgVmVyaWZ5T3JFeGl0KG1FbmFibGVkKTsKKworICAgIGlmIChtU2VuZE1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1TZW5kTWVzc2FnZS0+U2V0T2Zmc2V0KG1NZXNzYWdlTmV4dE9mZnNldCk7CisgICAgfQorCisgICAgYUZyYW1lLkdldERzdEFkZHIobWFjRGVzdCk7CisKKyAgICBpZiAoKG5laWdoYm9yID0gbmV0aWYuR2V0TWxlKCkuR2V0TmVpZ2hib3IobWFjRGVzdCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFFcnJvcikKKyAgICAgICAgeworICAgICAgICBjYXNlIE9UX0VSUk9SX05PTkU6CisgICAgICAgICAgICBpZiAoYUZyYW1lLkdldEFja1JlcXVlc3QoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZWlnaGJvci0+UmVzZXRMaW5rRmFpbHVyZXMoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFOgorICAgICAgICBjYXNlIE9UX0VSUk9SX0FCT1JUOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9OT19BQ0s6CisgICAgICAgICAgICBuZWlnaGJvci0+SW5jcmVtZW50TGlua0ZhaWx1cmVzKCk7CisKKyAgICAgICAgICAgIGlmIChuZXRpZi5HZXRNbGUoKS5Jc0FjdGl2ZVJvdXRlcihuZWlnaGJvci0+R2V0UmxvYzE2KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuZWlnaGJvci0+R2V0TGlua0ZhaWx1cmVzKCkgPj0gTWxlOjprRmFpbGVkUm91dGVyVHJhbnNtaXNzaW9ucykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5ldGlmLkdldE1sZSgpLlJlbW92ZU5laWdoYm9yKCpuZWlnaGJvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKChjaGlsZCA9IG5ldGlmLkdldE1sZSgpLkdldENoaWxkKG1hY0Rlc3QpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgY2hpbGQtPlNldERhdGFSZXF1ZXN0UGVuZGluZyhmYWxzZSk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG1TZW5kTWVzc2FnZSAhPSBOVUxMKTsKKworICAgICAgICBpZiAobVNlbmRNZXNzYWdlID09IGNoaWxkLT5HZXRJbmRpcmVjdE1lc3NhZ2UoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoaWxkLT5SZXNldEluZGlyZWN0VHhBdHRlbXB0cygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoaWxkLT5JbmNyZW1lbnRJbmRpcmVjdFR4QXR0ZW1wdHMoKTsKKworICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+R2V0SW5kaXJlY3RUeEF0dGVtcHRzKCkgPCBrTWF4UG9sbFRyaWdnZXJlZFR4QXR0ZW1wdHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBzYXZlIHRoZSBmcmFtZSBjb3VudGVyLCBrZXkgaWQsIGFuZCBkYXRhIHNlcXVlbmNlIG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGZyYW1lIHNvIHdlIHVzZSB0aGUgc2FtZSB2YWx1ZXMgZm9yIHRoZSByZXRyYW5zbWlzc2lvbgorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZnJhbWUgZm9sbG93aW5nIHRoZSByZWNlaXB0IG9mIGEgZGF0YSByZXF1ZXN0IGNvbW1hbmQgKGRhdGEKKyAgICAgICAgICAgICAgICAgICAgLy8gcG9sbCkgZnJvbSB0aGUgc2xlZXB5IGNoaWxkLgorCisgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5TZXRJbmRpcmVjdERhdGFTZXF1ZW5jZU51bWJlcihhRnJhbWUuR2V0U2VxdWVuY2UoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFGcmFtZS5HZXRTZWN1cml0eUVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZnJhbWVDb3VudGVyOworICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBrZXlJZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgYUZyYW1lLkdldEZyYW1lQ291bnRlcihmcmFtZUNvdW50ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPlNldEluZGlyZWN0RnJhbWVDb3VudGVyKGZyYW1lQ291bnRlcik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFGcmFtZS5HZXRLZXlJZChrZXlJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC0+U2V0SW5kaXJlY3RLZXlJZChrZXlJZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2hpbGQtPlJlc2V0SW5kaXJlY3RUeEF0dGVtcHRzKCk7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19EUk9QX01FU1NBR0VfT05fRlJBR01FTlRfVFhfRkFJTFVSRQorICAgICAgICAgICAgICAgIC8vIFdlIHNldCB0aGUgTmV4dE9mZnNldCB0byBlbmQgb2YgbWVzc2FnZSwgc2luY2UgdGhlcmUgaXMgbm8gbmVlZCB0bworICAgICAgICAgICAgICAgIC8vIHNlbmQgYW55IHJlbWFpbmluZyBmcmFnbWVudHMgaW4gdGhlIG1lc3NhZ2UgdG8gdGhlIGNoaWxkLCBpZiBhbGwgdHgKKyAgICAgICAgICAgICAgICAvLyBhdHRlbXB0cyBvZiBjdXJyZW50IGZyYW1lIGFscmVhZHkgZmFpbGVkLgorCisgICAgICAgICAgICAgICAgbU1lc3NhZ2VOZXh0T2Zmc2V0ID0gbVNlbmRNZXNzYWdlLT5HZXRMZW5ndGgoKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1NZXNzYWdlTmV4dE9mZnNldCA8IG1TZW5kTWVzc2FnZS0+R2V0TGVuZ3RoKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU2VuZE1lc3NhZ2UgPT0gY2hpbGQtPkdldEluZGlyZWN0TWVzc2FnZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoaWxkLT5TZXRJbmRpcmVjdEZyYWdtZW50T2Zmc2V0KG1NZXNzYWdlTmV4dE9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVNlbmRNZXNzYWdlID09IGNoaWxkLT5HZXRJbmRpcmVjdE1lc3NhZ2UoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGlsZC0+U2V0SW5kaXJlY3RGcmFnbWVudE9mZnNldCgwKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+U2V0SW5kaXJlY3RNZXNzYWdlKE5VTEwpOworCisgICAgICAgICAgICAgICAgLy8gRW5hYmxlIHNob3J0IHNvdXJjZSBhZGRyZXNzIG1hdGNoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbmRpcmVjdAorICAgICAgICAgICAgICAgIC8vIG1lc3NhZ2UgdHJhbnNtaXNzaW9uIGF0dGVtcHQgdG8gdGhlIGNoaWxkLiBXZSBpbnRlbnRpb25hbGx5IGRvCisgICAgICAgICAgICAgICAgLy8gbm90IGNoZWNrIGZvciBzdWNjZXNzZnVsIHR4IGhlcmUgdG8gYWRkcmVzcyB0aGUgc2NlbmFyaW8gd2hlcmUKKyAgICAgICAgICAgICAgICAvLyB0aGUgY2hpbGQgZG9lcyByZWNlaXZlICJDaGlsZCBJRCBSZXNwb25zZSIgYnV0IHBhcmVudCBtaXNzZXMgdGhlCisgICAgICAgICAgICAgICAgLy8gMTUuNCBhY2sgZnJvbSBjaGlsZC4gSWYgdGhlICJDaGlsZCBJRCBSZXNwb25zZSIgZG9lcyBub3QgbWFrZSBpdAorICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBjaGlsZCwgdGhlbiB0aGUgY2hpbGQgd2lsbCBuZWVkIHRvIHNlbmQgYSBuZXcgIkNoaWxkIElECisgICAgICAgICAgICAgICAgLy8gUmVxdWVzdCIgd2hpY2ggd2lsbCBjYXVzZSB0aGUgcGFyZW50IHRvIHN3aXRjaCB0byB1c2luZyBsb25nCisgICAgICAgICAgICAgICAgLy8gYWRkcmVzcyBtb2RlIGZvciBzb3VyY2UgYWRkcmVzcyBtYXRjaGluZy4KKworICAgICAgICAgICAgICAgIG1Tb3VyY2VNYXRjaENvbnRyb2xsZXIuU2V0U3JjTWF0Y2hBc1Nob3J0KCpjaGlsZCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNoaWxkSW5kZXggPSBuZXRpZi5HZXRNbGUoKS5HZXRDaGlsZEluZGV4KCpjaGlsZCk7CisKKyAgICAgICAgICAgIGlmIChtU2VuZE1lc3NhZ2UtPkdldENoaWxkTWFzayhjaGlsZEluZGV4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtU2VuZE1lc3NhZ2UtPkNsZWFyQ2hpbGRNYXNrKGNoaWxkSW5kZXgpOworICAgICAgICAgICAgICAgIG1Tb3VyY2VNYXRjaENvbnRyb2xsZXIuRGVjcmVtZW50TWVzc2FnZUNvdW50KCpjaGlsZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ldGlmLkdldENoaWxkU3VwZXJ2aXNvcigpLlVwZGF0ZU9uU2VuZCgqY2hpbGQpOworICAgICAgICB9CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KG1TZW5kTWVzc2FnZSAhPSBOVUxMKTsKKworICAgIGlmIChtU2VuZE1lc3NhZ2UtPkdldERpcmVjdFRyYW5zbWlzc2lvbigpKQorICAgIHsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0RST1BfTUVTU0FHRV9PTl9GUkFHTUVOVF9UWF9GQUlMVVJFCisKKyAgICAgICAgaWYgKGFFcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSBzZXQgdGhlIE5leHRPZmZzZXQgdG8gZW5kIG9mIG1lc3NhZ2UgdG8gYXZvaWQgc2VuZGluZworICAgICAgICAgICAgLy8gYW55IHJlbWFpbmluZyBmcmFnbWVudHMgaW4gdGhlIG1lc3NhZ2UuCisKKyAgICAgICAgICAgIG1NZXNzYWdlTmV4dE9mZnNldCA9IG1TZW5kTWVzc2FnZS0+R2V0TGVuZ3RoKCk7CisgICAgICAgIH0KKworI2VuZGlmCisKKyAgICAgICAgaWYgKG1NZXNzYWdlTmV4dE9mZnNldCA8IG1TZW5kTWVzc2FnZS0+R2V0TGVuZ3RoKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZW5kTWVzc2FnZS0+U2V0T2Zmc2V0KG1NZXNzYWdlTmV4dE9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtU2VuZE1lc3NhZ2UtPkNsZWFyRGlyZWN0VHJhbnNtaXNzaW9uKCk7CisgICAgICAgICAgICBtU2VuZE1lc3NhZ2UtPlNldE9mZnNldCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtU2VuZE1lc3NhZ2UtPkdldFN1YlR5cGUoKSA9PSBNZXNzYWdlOjprU3ViVHlwZU1sZURpc2NvdmVyUmVxdWVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlbmRCdXN5ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1EaXNjb3ZlclRpbWVyLlN0YXJ0KHN0YXRpY19jYXN0PHVpbnQxNl90PihNYWM6OmtTY2FuRHVyYXRpb25EZWZhdWx0KSk7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVNlbmRNZXNzYWdlLT5HZXRUeXBlKCkgPT0gTWVzc2FnZTo6a1R5cGVNYWNEYXRhUG9sbCkKKyAgICB7CisgICAgICAgIG5laWdoYm9yID0gbmV0aWYuR2V0TWxlKCkuR2V0UGFyZW50KCk7CisKKyAgICAgICAgaWYgKG5laWdoYm9yLT5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBtRGF0YVBvbGxNYW5hZ2VyLlN0b3BQb2xsaW5nKCk7CisgICAgICAgICAgICBuZXRpZi5HZXRNbGUoKS5CZWNvbWVEZXRhY2hlZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURhdGFQb2xsTWFuYWdlci5IYW5kbGVQb2xsU2VudChhRXJyb3IpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1NZXNzYWdlTmV4dE9mZnNldCA+PSBtU2VuZE1lc3NhZ2UtPkdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgTG9nSXA2TWVzc2FnZShrTWVzc2FnZVRyYW5zbWl0LCAqbVNlbmRNZXNzYWdlLCAmbWFjRGVzdCwgYUVycm9yKTsKKworICAgICAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1JcENvdW50ZXJzLm1UeFN1Y2Nlc3MrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1JcENvdW50ZXJzLm1UeEZhaWx1cmUrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtU2VuZE1lc3NhZ2UtPkdldERpcmVjdFRyYW5zbWlzc2lvbigpID09IGZhbHNlICYmIG1TZW5kTWVzc2FnZS0+SXNDaGlsZFBlbmRpbmcoKSA9PSBmYWxzZSkKKyAgICB7CisgICAgICAgIG1TZW5kUXVldWUuRGVxdWV1ZSgqbVNlbmRNZXNzYWdlKTsKKyAgICAgICAgbVNlbmRNZXNzYWdlLT5GcmVlKCk7CisgICAgICAgIG1TZW5kTWVzc2FnZSA9IE5VTEw7CisgICAgICAgIG1NZXNzYWdlTmV4dE9mZnNldCA9IDA7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKG1FbmFibGVkKQorICAgIHsKKyAgICAgICAgbVNjaGVkdWxlVHJhbnNtaXNzaW9uVGFzay5Qb3N0KCk7CisgICAgfQorfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OlNldERpc2NvdmVyUGFyYW1ldGVycyh1aW50MzJfdCBhU2NhbkNoYW5uZWxzKQoreworICAgIG1TY2FuQ2hhbm5lbHMgPSAoYVNjYW5DaGFubmVscyA9PSAwKSA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihNYWM6OmtTY2FuQ2hhbm5lbHNBbGwpIDogYVNjYW5DaGFubmVsczsKK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpIYW5kbGVEaXNjb3ZlclRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVEaXNjb3ZlclRpbWVyKCk7Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6SGFuZGxlRGlzY292ZXJUaW1lcih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgbVNjYW5DaGFubmVscyA+Pj0gMTsKKyAgICAgICAgbVNjYW5DaGFubmVsKys7CisKKyAgICAgICAgaWYgKG1TY2FuQ2hhbm5lbCA+IE9UX1JBRElPX0NIQU5ORUxfTUFYKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VuZFF1ZXVlLkRlcXVldWUoKm1TZW5kTWVzc2FnZSk7CisgICAgICAgICAgICBtU2VuZE1lc3NhZ2UtPkZyZWUoKTsKKyAgICAgICAgICAgIG1TZW5kTWVzc2FnZSA9IE5VTEw7CisgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRDaGFubmVsKG1SZXN0b3JlQ2hhbm5lbCk7CisgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRQYW5JZChtUmVzdG9yZVBhbklkKTsKKyAgICAgICAgICAgIG1TY2FubmluZyA9IGZhbHNlOworICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuSGFuZGxlRGlzY292ZXJDb21wbGV0ZSgpOworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlICgobVNjYW5DaGFubmVscyAmIDEpID09IDApOworCisgICAgbVNlbmRNZXNzYWdlLT5TZXREaXJlY3RUcmFuc21pc3Npb24oKTsKKworZXhpdDoKKyAgICBtU2VuZEJ1c3kgPSBmYWxzZTsKKyAgICBtU2NoZWR1bGVUcmFuc21pc3Npb25UYXNrLlBvc3QoKTsKK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpIYW5kbGVSZWNlaXZlZEZyYW1lKE1hYzo6UmVjZWl2ZXIgJmFSZWNlaXZlciwgTWFjOjpGcmFtZSAmYUZyYW1lKQoreworICAgIEdldE93bmVyKGFSZWNlaXZlcikuSGFuZGxlUmVjZWl2ZWRGcmFtZShhRnJhbWUpOworfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkhhbmRsZVJlY2VpdmVkRnJhbWUoTWFjOjpGcmFtZSAmYUZyYW1lKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgVGhyZWFkTWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgTWFjOjpBZGRyZXNzIG1hY0Rlc3Q7CisgICAgTWFjOjpBZGRyZXNzIG1hY1NvdXJjZTsKKyAgICB1aW50OF90ICpwYXlsb2FkOworICAgIHVpbnQ4X3QgcGF5bG9hZExlbmd0aDsKKyAgICB1aW50OF90IGNvbW1hbmRJZDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBjaGFyIHN0cmluZ0J1ZmZlcltNYWM6OkZyYW1lOjprSW5mb1N0cmluZ1NpemVdOworCisgICAgaWYgKCFtRW5hYmxlZCkKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYUZyYW1lLkdldFNyY0FkZHIobWFjU291cmNlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFGcmFtZS5HZXREc3RBZGRyKG1hY0Rlc3QpKTsKKworICAgIGFGcmFtZS5HZXRTcmNQYW5JZChtZXNzYWdlSW5mby5tUGFuSWQpOworICAgIG1lc3NhZ2VJbmZvLm1DaGFubmVsID0gYUZyYW1lLkdldENoYW5uZWwoKTsKKyAgICBtZXNzYWdlSW5mby5tUnNzID0gYUZyYW1lLkdldFBvd2VyKCk7CisgICAgbWVzc2FnZUluZm8ubUxxaSA9IGFGcmFtZS5HZXRMcWkoKTsKKyAgICBtZXNzYWdlSW5mby5tTGlua1NlY3VyaXR5ID0gYUZyYW1lLkdldFNlY3VyaXR5RW5hYmxlZCgpOworCisgICAgcGF5bG9hZCA9IGFGcmFtZS5HZXRQYXlsb2FkKCk7CisgICAgcGF5bG9hZExlbmd0aCA9IGFGcmFtZS5HZXRQYXlsb2FkTGVuZ3RoKCk7CisKKyAgICBuZXRpZi5HZXRTdXBlcnZpc2lvbkxpc3RlbmVyKCkuVXBkYXRlT25SZWNlaXZlKG1hY1NvdXJjZSwgbWVzc2FnZUluZm8ubUxpbmtTZWN1cml0eSk7CisKKyAgICBtRGF0YVBvbGxNYW5hZ2VyLkNoZWNrRnJhbWVQZW5kaW5nKGFGcmFtZSk7CisKKyAgICBzd2l0Y2ggKGFGcmFtZS5HZXRUeXBlKCkpCisgICAgeworICAgIGNhc2UgTWFjOjpGcmFtZTo6a0ZjZkZyYW1lRGF0YToKKyAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPj0gc2l6ZW9mKExvd3Bhbjo6TWVzaEhlYWRlcikgJiYKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TG93cGFuOjpNZXNoSGVhZGVyICo+KHBheWxvYWQpLT5Jc01lc2hIZWFkZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgSGFuZGxlTWVzaChwYXlsb2FkLCBwYXlsb2FkTGVuZ3RoLCBtYWNTb3VyY2UsIG1lc3NhZ2VJbmZvKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID49IHNpemVvZihMb3dwYW46OkZyYWdtZW50SGVhZGVyKSAmJgorICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PExvd3Bhbjo6RnJhZ21lbnRIZWFkZXIgKj4ocGF5bG9hZCktPklzRnJhZ21lbnRIZWFkZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgSGFuZGxlRnJhZ21lbnQocGF5bG9hZCwgcGF5bG9hZExlbmd0aCwgbWFjU291cmNlLCBtYWNEZXN0LCBtZXNzYWdlSW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocGF5bG9hZExlbmd0aCA+PSAxICYmIExvd3Bhbjo6TG93cGFuOjpJc0xvd3BhbkhjKHBheWxvYWQpKQorICAgICAgICB7CisgICAgICAgICAgICBIYW5kbGVMb3dwYW5IQyhwYXlsb2FkLCBwYXlsb2FkTGVuZ3RoLCBtYWNTb3VyY2UsIG1hY0Rlc3QsIG1lc3NhZ2VJbmZvKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChwYXlsb2FkTGVuZ3RoID09IDAsIGVycm9yID0gT1RfRVJST1JfTk9UX0xPV1BBTl9EQVRBX0ZSQU1FKTsKKworICAgICAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBlbXB0eSBwYXlsb2FkIGZyYW1lLCAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYUZyYW1lLlRvSW5mb1N0cmluZyhzdHJpbmdCdWZmZXIsIHNpemVvZihzdHJpbmdCdWZmZXIpKSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWFjOjpGcmFtZTo6a0ZjZkZyYW1lTWFjQ21kOgorICAgICAgICBhRnJhbWUuR2V0Q29tbWFuZElkKGNvbW1hbmRJZCk7CisKKyAgICAgICAgaWYgKGNvbW1hbmRJZCA9PSBNYWM6OkZyYW1lOjprTWFjQ21kRGF0YVJlcXVlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhbmRsZURhdGFSZXF1ZXN0KG1hY1NvdXJjZSwgbWVzc2FnZUluZm8pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9EUk9QOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1A7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJEcm9wcGluZyByeCBmcmFtZSwgZXJyb3I6JXMsICVzIiwgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgIGFGcmFtZS5Ub0luZm9TdHJpbmcoc3RyaW5nQnVmZmVyLCBzaXplb2Yoc3RyaW5nQnVmZmVyKSkpOworCisgICAgfQorCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKHN0cmluZ0J1ZmZlcik7Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6SGFuZGxlTWVzaCh1aW50OF90ICphRnJhbWUsIHVpbnQ4X3QgYUZyYW1lTGVuZ3RoLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIE1hYzo6QWRkcmVzcyBtZXNoRGVzdDsKKyAgICBNYWM6OkFkZHJlc3MgbWVzaFNvdXJjZTsKKyAgICBMb3dwYW46Ok1lc2hIZWFkZXIgbWVzaEhlYWRlcjsKKworICAgIC8vIENoZWNrIHRoZSBtZXNoIGhlYWRlcgorICAgIFZlcmlmeU9yRXhpdChtZXNoSGVhZGVyLkluaXQoYUZyYW1lLCBhRnJhbWVMZW5ndGgpID09IE9UX0VSUk9SX05PTkUsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAvLyBTZWN1cml0eSBDaGVjazogb25seSBwcm9jZXNzIE1lc2ggSGVhZGVyIGZyYW1lcyB0aGF0IGhhZCBzZWN1cml0eSBlbmFibGVkLgorICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZUluZm8ubUxpbmtTZWN1cml0eSAmJiBtZXNoSGVhZGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9TRUNVUklUWSk7CisKKyAgICBtZXNoU291cmNlLm1MZW5ndGggPSBzaXplb2YobWVzaFNvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKyAgICBtZXNoU291cmNlLm1TaG9ydEFkZHJlc3MgPSBtZXNoSGVhZGVyLkdldFNvdXJjZSgpOworICAgIG1lc2hEZXN0Lm1MZW5ndGggPSBzaXplb2YobWVzaERlc3QubVNob3J0QWRkcmVzcyk7CisgICAgbWVzaERlc3QubVNob3J0QWRkcmVzcyA9IG1lc2hIZWFkZXIuR2V0RGVzdGluYXRpb24oKTsKKworICAgIGlmIChtZXNoRGVzdC5tU2hvcnRBZGRyZXNzID09IG5ldGlmLkdldE1hYygpLkdldFNob3J0QWRkcmVzcygpKQorICAgIHsKKyAgICAgICAgYUZyYW1lICs9IG1lc2hIZWFkZXIuR2V0SGVhZGVyTGVuZ3RoKCk7CisgICAgICAgIGFGcmFtZUxlbmd0aCAtPSBtZXNoSGVhZGVyLkdldEhlYWRlckxlbmd0aCgpOworCisgICAgICAgIGlmIChyZWludGVycHJldF9jYXN0PExvd3Bhbjo6RnJhZ21lbnRIZWFkZXIgKj4oYUZyYW1lKS0+SXNGcmFnbWVudEhlYWRlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBIYW5kbGVGcmFnbWVudChhRnJhbWUsIGFGcmFtZUxlbmd0aCwgbWVzaFNvdXJjZSwgbWVzaERlc3QsIGFNZXNzYWdlSW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoTG93cGFuOjpMb3dwYW46OklzTG93cGFuSGMoYUZyYW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgSGFuZGxlTG93cGFuSEMoYUZyYW1lLCBhRnJhbWVMZW5ndGgsIG1lc2hTb3VyY2UsIG1lc2hEZXN0LCBhTWVzc2FnZUluZm8pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChtZXNoSGVhZGVyLkdldEhvcHNMZWZ0KCkgPiAwKQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0TWxlKCkuUmVzb2x2ZVJvdXRpbmdMb29wcyhhTWFjU291cmNlLm1TaG9ydEFkZHJlc3MsIG1lc2hEZXN0Lm1TaG9ydEFkZHJlc3MpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBDaGVja1JlYWNoYWJpbGl0eShhRnJhbWUsIGFGcmFtZUxlbmd0aCwgbWVzaFNvdXJjZSwgbWVzaERlc3QpKTsKKworICAgICAgICBtZXNoSGVhZGVyLlNldEhvcHNMZWZ0KG1lc2hIZWFkZXIuR2V0SG9wc0xlZnQoKSAtIDEpOworICAgICAgICBtZXNoSGVhZGVyLkFwcGVuZFRvKGFGcmFtZSk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbmV0aWYuR2V0SXA2KCkubU1lc3NhZ2VQb29sLk5ldyhNZXNzYWdlOjprVHlwZTZsb3dwYW4sIDApKSAhPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPlNldExlbmd0aChhRnJhbWVMZW5ndGgpKTsKKyAgICAgICAgbWVzc2FnZS0+V3JpdGUoMCwgYUZyYW1lTGVuZ3RoLCBhRnJhbWUpOworICAgICAgICBtZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKGFNZXNzYWdlSW5mby5tTGlua1NlY3VyaXR5KTsKKyAgICAgICAgbWVzc2FnZS0+U2V0UGFuSWQoYU1lc3NhZ2VJbmZvLm1QYW5JZCk7CisKKyAgICAgICAgU2VuZE1lc3NhZ2UoKm1lc3NhZ2UpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgY2hhciBzcmNTdHJpbmdCdWZmZXJbTWFjOjpBZGRyZXNzOjprQWRkcmVzc1N0cmluZ1NpemVdOworCisgICAgICAgIG90TG9nSW5mb01hYygKKyAgICAgICAgICAgIEdldEluc3RhbmNlKCksCisgICAgICAgICAgICAiRHJvcHBpbmcgcnggbWVzaCBmcmFtZSwgZXJyb3I6JXMsIGxlbjolZCwgc3JjOiVzLCBzZWM6JXMiLAorICAgICAgICAgICAgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGVycm9yKSwKKyAgICAgICAgICAgIGFGcmFtZUxlbmd0aCwKKyAgICAgICAgICAgIGFNYWNTb3VyY2UuVG9TdHJpbmcoc3JjU3RyaW5nQnVmZmVyLCBzaXplb2Yoc3JjU3RyaW5nQnVmZmVyKSksCisgICAgICAgICAgICBhTWVzc2FnZUluZm8ubUxpbmtTZWN1cml0eSA/ICJ5ZXMiIDogIm5vIgorICAgICAgICApOworCisgICAgICAgIE9UX1VOVVNFRF9WQVJJQUJMRShzcmNTdHJpbmdCdWZmZXIpOworCisgICAgICAgIGlmIChtZXNzYWdlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworb3RFcnJvciBNZXNoRm9yd2FyZGVyOjpDaGVja1JlYWNoYWJpbGl0eSh1aW50OF90ICphRnJhbWUsIHVpbnQ4X3QgYUZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNYWM6OkFkZHJlc3MgJmFNZXNoU291cmNlLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNZXNoRGVzdCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElwNjo6SGVhZGVyIGlwNkhlYWRlcjsKKyAgICBMb3dwYW46Ok1lc2hIZWFkZXIgbWVzaEhlYWRlcjsKKworICAgIFZlcmlmeU9yRXhpdChtZXNoSGVhZGVyLkluaXQoYUZyYW1lLCBhRnJhbWVMZW5ndGgpID09IE9UX0VSUk9SX05PTkUsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAvLyBza2lwIG1lc2ggaGVhZGVyCisgICAgYUZyYW1lICs9IG1lc2hIZWFkZXIuR2V0SGVhZGVyTGVuZ3RoKCk7CisgICAgYUZyYW1lTGVuZ3RoIC09IG1lc2hIZWFkZXIuR2V0SGVhZGVyTGVuZ3RoKCk7CisKKyAgICAvLyBza2lwIGZyYWdtZW50IGhlYWRlcgorICAgIGlmIChhRnJhbWVMZW5ndGggPj0gMSAmJgorICAgICAgICByZWludGVycHJldF9jYXN0PExvd3Bhbjo6RnJhZ21lbnRIZWFkZXIgKj4oYUZyYW1lKS0+SXNGcmFnbWVudEhlYWRlcigpKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHNpemVvZihMb3dwYW46OkZyYWdtZW50SGVhZGVyKSA8PSBhRnJhbWVMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgIFZlcmlmeU9yRXhpdChyZWludGVycHJldF9jYXN0PExvd3Bhbjo6RnJhZ21lbnRIZWFkZXIgKj4oYUZyYW1lKS0+R2V0RGF0YWdyYW1PZmZzZXQoKSA9PSAwKTsKKworICAgICAgICBhRnJhbWUgKz0gcmVpbnRlcnByZXRfY2FzdDxMb3dwYW46OkZyYWdtZW50SGVhZGVyICo+KGFGcmFtZSktPkdldEhlYWRlckxlbmd0aCgpOworICAgICAgICBhRnJhbWVMZW5ndGggLT0gcmVpbnRlcnByZXRfY2FzdDxMb3dwYW46OkZyYWdtZW50SGVhZGVyICo+KGFGcmFtZSktPkdldEhlYWRlckxlbmd0aCgpOworICAgIH0KKworICAgIC8vIG9ubHkgcHJvY2VzcyBJUHY2IHBhY2tldHMKKyAgICBWZXJpZnlPckV4aXQoYUZyYW1lTGVuZ3RoID49IDEgJiYgTG93cGFuOjpMb3dwYW46OklzTG93cGFuSGMoYUZyYW1lKSk7CisKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0TG93cGFuKCkuRGVjb21wcmVzc0Jhc2VIZWFkZXIoaXA2SGVhZGVyLCBhTWVzaFNvdXJjZSwgYU1lc2hEZXN0LCBhRnJhbWUsIGFGcmFtZUxlbmd0aCkgPiAwLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgZXJyb3IgPSBuZXRpZi5HZXRNbGUoKS5DaGVja1JlYWNoYWJpbGl0eShhTWVzaFNvdXJjZS5tU2hvcnRBZGRyZXNzLCBhTWVzaERlc3QubVNob3J0QWRkcmVzcywgaXA2SGVhZGVyKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6SGFuZGxlRnJhZ21lbnQodWludDhfdCAqYUZyYW1lLCB1aW50OF90IGFGcmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTG93cGFuOjpGcmFnbWVudEhlYWRlciAqZnJhZ21lbnRIZWFkZXIgPSByZWludGVycHJldF9jYXN0PExvd3Bhbjo6RnJhZ21lbnRIZWFkZXIgKj4oYUZyYW1lKTsKKyAgICB1aW50MTZfdCBkYXRhZ3JhbUxlbmd0aCA9IGZyYWdtZW50SGVhZGVyLT5HZXREYXRhZ3JhbVNpemUoKTsKKyAgICB1aW50MTZfdCBkYXRhZ3JhbVRhZyA9IGZyYWdtZW50SGVhZGVyLT5HZXREYXRhZ3JhbVRhZygpOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIGludCBoZWFkZXJMZW5ndGg7CisKKyAgICBpZiAoZnJhZ21lbnRIZWFkZXItPkdldERhdGFncmFtT2Zmc2V0KCkgPT0gMCkKKyAgICB7CisgICAgICAgIGFGcmFtZSArPSBmcmFnbWVudEhlYWRlci0+R2V0SGVhZGVyTGVuZ3RoKCk7CisgICAgICAgIGFGcmFtZUxlbmd0aCAtPSBmcmFnbWVudEhlYWRlci0+R2V0SGVhZGVyTGVuZ3RoKCk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbmV0aWYuR2V0SXA2KCkubU1lc3NhZ2VQb29sLk5ldyhNZXNzYWdlOjprVHlwZUlwNiwgMCkpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICBtZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKGFNZXNzYWdlSW5mby5tTGlua1NlY3VyaXR5KTsKKyAgICAgICAgbWVzc2FnZS0+U2V0UGFuSWQoYU1lc3NhZ2VJbmZvLm1QYW5JZCk7CisgICAgICAgIGhlYWRlckxlbmd0aCA9IG5ldGlmLkdldExvd3BhbigpLkRlY29tcHJlc3MoKm1lc3NhZ2UsIGFNYWNTb3VyY2UsIGFNYWNEZXN0LCBhRnJhbWUsIGFGcmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhZ3JhbUxlbmd0aCk7CisgICAgICAgIFZlcmlmeU9yRXhpdChoZWFkZXJMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICBhRnJhbWUgKz0gaGVhZGVyTGVuZ3RoOworICAgICAgICBhRnJhbWVMZW5ndGggLT0gc3RhdGljX2Nhc3Q8dWludDhfdD4oaGVhZGVyTGVuZ3RoKTsKKworICAgICAgICBWZXJpZnlPckV4aXQoZGF0YWdyYW1MZW5ndGggPj0gbWVzc2FnZS0+R2V0T2Zmc2V0KCkgKyBhRnJhbWVMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5TZXRMZW5ndGgoZGF0YWdyYW1MZW5ndGgpKTsKKworICAgICAgICBtZXNzYWdlLT5TZXREYXRhZ3JhbVRhZyhkYXRhZ3JhbVRhZyk7CisgICAgICAgIG1lc3NhZ2UtPlNldFRpbWVvdXQoa1JlYXNzZW1ibHlUaW1lb3V0KTsKKworICAgICAgICAvLyBjb3B5IEZyYWdtZW50CisgICAgICAgIG1lc3NhZ2UtPldyaXRlKG1lc3NhZ2UtPkdldE9mZnNldCgpLCBhRnJhbWVMZW5ndGgsIGFGcmFtZSk7CisgICAgICAgIG1lc3NhZ2UtPk1vdmVPZmZzZXQoYUZyYW1lTGVuZ3RoKTsKKworICAgICAgICAvLyBTZWN1cml0eSBDaGVjaworICAgICAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0SXA2RmlsdGVyKCkuQWNjZXB0KCptZXNzYWdlKSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgICAgICAvLyBBbGxvdyByZS1hc3NlbWJseSBvZiBvbmx5IG9uZSBtZXNzYWdlIGF0IGEgdGltZSBvbiBhIFNFRCBieSBjbGVhcmluZworICAgICAgICAvLyBhbnkgcmVtYWluaW5nIGZyYWdtZW50cyBpbiByZWFzc2VtYmx5IGxpc3QgdXBvbiByZWNlaXZpbmcgb2YgYSBuZXcKKyAgICAgICAgLy8gKHNlY3VyZSkgZmlyc3QgZnJhZ21lbnQuCisKKyAgICAgICAgaWYgKChHZXRSeE9uV2hlbklkbGUoKSA9PSBmYWxzZSkgJiYgbWVzc2FnZS0+SXNMaW5rU2VjdXJpdHlFbmFibGVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENsZWFyUmVhc3NlbWJseUxpc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1SZWFzc2VtYmx5TGlzdC5FbnF1ZXVlKCptZXNzYWdlKTsKKworICAgICAgICBpZiAoIW1SZWFzc2VtYmx5VGltZXIuSXNSdW5uaW5nKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZWFzc2VtYmx5VGltZXIuU3RhcnQoa1N0YXRlVXBkYXRlUGVyaW9kKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhRnJhbWUgKz0gZnJhZ21lbnRIZWFkZXItPkdldEhlYWRlckxlbmd0aCgpOworICAgICAgICBhRnJhbWVMZW5ndGggLT0gZnJhZ21lbnRIZWFkZXItPkdldEhlYWRlckxlbmd0aCgpOworCisgICAgICAgIGZvciAobWVzc2FnZSA9IG1SZWFzc2VtYmx5TGlzdC5HZXRIZWFkKCk7IG1lc3NhZ2U7IG1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFNlY3VyaXR5IENoZWNrOiBvbmx5IGNvbnNpZGVyIHJlYXNzZW1ibHkgYnVmZmVycyB0aGF0IGhhZCB0aGUgc2FtZSBTZWN1cml0eSBFbmFibGVkIHNldHRpbmcuCisgICAgICAgICAgICBpZiAobWVzc2FnZS0+R2V0TGVuZ3RoKCkgPT0gZGF0YWdyYW1MZW5ndGggJiYKKyAgICAgICAgICAgICAgICBtZXNzYWdlLT5HZXREYXRhZ3JhbVRhZygpID09IGRhdGFncmFtVGFnICYmCisgICAgICAgICAgICAgICAgbWVzc2FnZS0+R2V0T2Zmc2V0KCkgPT0gZnJhZ21lbnRIZWFkZXItPkdldERhdGFncmFtT2Zmc2V0KCkgJiYKKyAgICAgICAgICAgICAgICBtZXNzYWdlLT5Jc0xpbmtTZWN1cml0eUVuYWJsZWQoKSA9PSBhTWVzc2FnZUluZm8ubUxpbmtTZWN1cml0eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZvciBhIHNsZWVweS1lbmQtZGV2aWNlLCBpZiB3ZSByZWNlaXZlIGEgbmV3IChzZWN1cmUpIG5leHQgZnJhZ21lbnQKKyAgICAgICAgLy8gd2l0aCBhIG5vbi1tYXRjaGluZyBmcmFnbWVudGF0aW9uIG9mZnNldCBvciB0YWcsIGl0IGluZGljYXRlcyB0aGF0CisgICAgICAgIC8vIHdlIGhhdmUgZWl0aGVyIG1pc3NlZCBhIGZyYWdtZW50LCBvciB0aGUgcGFyZW50IGhhcyBtb3ZlZCB0byBhIG5ldworICAgICAgICAvLyBtZXNzYWdlIHdpdGggYSBuZXcgdGFnLiBJbiBlaXRoZXIgY2FzZSwgd2UgY2FuIHNhZmVseSBjbGVhciBhbnkKKyAgICAgICAgLy8gcmVtYWluaW5nIGZyYWdtZW50cyBzdG9yZWQgaW4gdGhlIHJlYXNzZW1ibHkgbGlzdC4KKworICAgICAgICBpZiAoR2V0UnhPbldoZW5JZGxlKCkgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgobWVzc2FnZSA9PSBOVUxMKSAmJiAoYU1lc3NhZ2VJbmZvLm1MaW5rU2VjdXJpdHkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENsZWFyUmVhc3NlbWJseUxpc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeU9yRXhpdChtZXNzYWdlICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgLy8gY29weSBGcmFnbWVudAorICAgICAgICBtZXNzYWdlLT5Xcml0ZShtZXNzYWdlLT5HZXRPZmZzZXQoKSwgYUZyYW1lTGVuZ3RoLCBhRnJhbWUpOworICAgICAgICBtZXNzYWdlLT5Nb3ZlT2Zmc2V0KGFGcmFtZUxlbmd0aCk7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBpZiAobWVzc2FnZS0+R2V0T2Zmc2V0KCkgPj0gbWVzc2FnZS0+R2V0TGVuZ3RoKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZWFzc2VtYmx5TGlzdC5EZXF1ZXVlKCptZXNzYWdlKTsKKyAgICAgICAgICAgIEhhbmRsZURhdGFncmFtKCptZXNzYWdlLCBhTWVzc2FnZUluZm8sIGFNYWNTb3VyY2UpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNoYXIgc3JjU3RyaW5nQnVmZmVyW01hYzo6QWRkcmVzczo6a0FkZHJlc3NTdHJpbmdTaXplXTsKKyAgICAgICAgY2hhciBkc3RTdHJpbmdCdWZmZXJbTWFjOjpBZGRyZXNzOjprQWRkcmVzc1N0cmluZ1NpemVdOworCisgICAgICAgIE9UX1VOVVNFRF9WQVJJQUJMRShzcmNTdHJpbmdCdWZmZXIpOworICAgICAgICBPVF9VTlVTRURfVkFSSUFCTEUoZHN0U3RyaW5nQnVmZmVyKTsKKworICAgICAgICBvdExvZ0luZm9NYWMoCisgICAgICAgICAgICBHZXRJbnN0YW5jZSgpLAorICAgICAgICAgICAgIkRyb3BwaW5nIHJ4IGZyYWcgZnJhbWUsIGVycm9yOiVzLCBsZW46JWQsIHNyYzolcywgZHN0OiVzLCB0YWc6JWQsIG9mZnNldDolZCwgZGdsZW46JWQsIHNlYzolcyIsCisgICAgICAgICAgICBvdFRocmVhZEVycm9yVG9TdHJpbmcoZXJyb3IpLAorICAgICAgICAgICAgYUZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgYU1hY1NvdXJjZS5Ub1N0cmluZyhzcmNTdHJpbmdCdWZmZXIsIHNpemVvZihzcmNTdHJpbmdCdWZmZXIpKSwKKyAgICAgICAgICAgIGFNYWNEZXN0LlRvU3RyaW5nKGRzdFN0cmluZ0J1ZmZlciwgc2l6ZW9mKGRzdFN0cmluZ0J1ZmZlcikpLAorICAgICAgICAgICAgZGF0YWdyYW1UYWcsCisgICAgICAgICAgICBmcmFnbWVudEhlYWRlci0+R2V0RGF0YWdyYW1PZmZzZXQoKSwKKyAgICAgICAgICAgIGRhdGFncmFtTGVuZ3RoLAorICAgICAgICAgICAgYU1lc3NhZ2VJbmZvLm1MaW5rU2VjdXJpdHkgPyAieWVzIiA6ICJubyIKKyAgICAgICAgKTsKKworICAgICAgICBpZiAobWVzc2FnZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6Q2xlYXJSZWFzc2VtYmx5TGlzdCh2b2lkKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgTWVzc2FnZSAqbmV4dDsKKworICAgIGZvciAobWVzc2FnZSA9IG1SZWFzc2VtYmx5TGlzdC5HZXRIZWFkKCk7IG1lc3NhZ2U7IG1lc3NhZ2UgPSBuZXh0KQorICAgIHsKKyAgICAgICAgbmV4dCA9IG1lc3NhZ2UtPkdldE5leHQoKTsKKyAgICAgICAgbVJlYXNzZW1ibHlMaXN0LkRlcXVldWUoKm1lc3NhZ2UpOworCisgICAgICAgIExvZ0lwNk1lc3NhZ2Uoa01lc3NhZ2VEcm9wLCAqbWVzc2FnZSwgTlVMTCwgT1RfRVJST1JfTk9fRlJBTUVfUkVDRUlWRUQpOworICAgICAgICBtSXBDb3VudGVycy5tUnhGYWlsdXJlKys7CisKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpIYW5kbGVSZWFzc2VtYmx5VGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVJlYXNzZW1ibHlUaW1lcigpOworfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkhhbmRsZVJlYXNzZW1ibHlUaW1lcih2b2lkKQoreworICAgIE1lc3NhZ2UgKm5leHQgPSBOVUxMOworICAgIHVpbnQ4X3QgdGltZW91dDsKKworICAgIGZvciAoTWVzc2FnZSAqbWVzc2FnZSA9IG1SZWFzc2VtYmx5TGlzdC5HZXRIZWFkKCk7IG1lc3NhZ2U7IG1lc3NhZ2UgPSBuZXh0KQorICAgIHsKKyAgICAgICAgbmV4dCA9IG1lc3NhZ2UtPkdldE5leHQoKTsKKyAgICAgICAgdGltZW91dCA9IG1lc3NhZ2UtPkdldFRpbWVvdXQoKTsKKworICAgICAgICBpZiAodGltZW91dCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lc3NhZ2UtPlNldFRpbWVvdXQodGltZW91dCAtIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbVJlYXNzZW1ibHlMaXN0LkRlcXVldWUoKm1lc3NhZ2UpOworCisgICAgICAgICAgICBMb2dJcDZNZXNzYWdlKGtNZXNzYWdlRHJvcCwgKm1lc3NhZ2UsIE5VTEwsIE9UX0VSUk9SX1JFQVNTRU1CTFlfVElNRU9VVCk7CisgICAgICAgICAgICBtSXBDb3VudGVycy5tUnhGYWlsdXJlKys7CisKKyAgICAgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtUmVhc3NlbWJseUxpc3QuR2V0SGVhZCgpICE9IE5VTEwpCisgICAgeworICAgICAgICBtUmVhc3NlbWJseVRpbWVyLlN0YXJ0KGtTdGF0ZVVwZGF0ZVBlcmlvZCk7CisgICAgfQorfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkhhbmRsZUxvd3BhbkhDKHVpbnQ4X3QgKmFGcmFtZSwgdWludDhfdCBhRnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY1NvdXJjZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgaW50IGhlYWRlckxlbmd0aDsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldElwNigpLm1NZXNzYWdlUG9vbC5OZXcoTWVzc2FnZTo6a1R5cGVJcDYsIDApKSAhPSBOVUxMLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIG1lc3NhZ2UtPlNldExpbmtTZWN1cml0eUVuYWJsZWQoYU1lc3NhZ2VJbmZvLm1MaW5rU2VjdXJpdHkpOworICAgIG1lc3NhZ2UtPlNldFBhbklkKGFNZXNzYWdlSW5mby5tUGFuSWQpOworCisgICAgaGVhZGVyTGVuZ3RoID0gbmV0aWYuR2V0TG93cGFuKCkuRGVjb21wcmVzcygqbWVzc2FnZSwgYU1hY1NvdXJjZSwgYU1hY0Rlc3QsIGFGcmFtZSwgYUZyYW1lTGVuZ3RoLCAwKTsKKyAgICBWZXJpZnlPckV4aXQoaGVhZGVyTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBhRnJhbWUgKz0gaGVhZGVyTGVuZ3RoOworICAgIGFGcmFtZUxlbmd0aCAtPSBzdGF0aWNfY2FzdDx1aW50OF90PihoZWFkZXJMZW5ndGgpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPlNldExlbmd0aChtZXNzYWdlLT5HZXRMZW5ndGgoKSArIGFGcmFtZUxlbmd0aCkpOworICAgIG1lc3NhZ2UtPldyaXRlKG1lc3NhZ2UtPkdldE9mZnNldCgpLCBhRnJhbWVMZW5ndGgsIGFGcmFtZSk7CisKKyAgICAvLyBTZWN1cml0eSBDaGVjaworICAgIFZlcmlmeU9yRXhpdChuZXRpZi5HZXRJcDZGaWx0ZXIoKS5BY2NlcHQoKm1lc3NhZ2UpLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCitleGl0OgorCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBIYW5kbGVEYXRhZ3JhbSgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBhTWFjU291cmNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2hhciBzcmNTdHJpbmdCdWZmZXJbTWFjOjpBZGRyZXNzOjprQWRkcmVzc1N0cmluZ1NpemVdOworICAgICAgICBjaGFyIGRzdFN0cmluZ0J1ZmZlcltNYWM6OkFkZHJlc3M6OmtBZGRyZXNzU3RyaW5nU2l6ZV07CisKKyAgICAgICAgT1RfVU5VU0VEX1ZBUklBQkxFKHNyY1N0cmluZ0J1ZmZlcik7CisgICAgICAgIE9UX1VOVVNFRF9WQVJJQUJMRShkc3RTdHJpbmdCdWZmZXIpOworCisgICAgICAgIG90TG9nSW5mb01hYygKKyAgICAgICAgICAgIEdldEluc3RhbmNlKCksCisgICAgICAgICAgICAiRHJvcHBpbmcgcnggbG93cGFuIEhDIGZyYW1lLCBlcnJvcjolcywgbGVuOiVkLCBzcmM6JXMsIGRzdDolcywgc2VjOiVzIiwKKyAgICAgICAgICAgIG90VGhyZWFkRXJyb3JUb1N0cmluZyhlcnJvciksCisgICAgICAgICAgICBhRnJhbWVMZW5ndGgsCisgICAgICAgICAgICBhTWFjU291cmNlLlRvU3RyaW5nKHNyY1N0cmluZ0J1ZmZlciwgc2l6ZW9mKHNyY1N0cmluZ0J1ZmZlcikpLAorICAgICAgICAgICAgYU1hY0Rlc3QuVG9TdHJpbmcoZHN0U3RyaW5nQnVmZmVyLCBzaXplb2YoZHN0U3RyaW5nQnVmZmVyKSksCisgICAgICAgICAgICBhTWVzc2FnZUluZm8ubUxpbmtTZWN1cml0eSA/ICJ5ZXMiIDogIm5vIgorICAgICAgICApOworCisgICAgICAgIGlmIChtZXNzYWdlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworb3RFcnJvciBNZXNoRm9yd2FyZGVyOjpIYW5kbGVEYXRhZ3JhbShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBMb2dJcDZNZXNzYWdlKGtNZXNzYWdlUmVjZWl2ZSwgYU1lc3NhZ2UsICZhTWFjU291cmNlLCBPVF9FUlJPUl9OT05FKTsKKyAgICBtSXBDb3VudGVycy5tUnhTdWNjZXNzKys7CisKKyAgICByZXR1cm4gbmV0aWYuR2V0SXA2KCkuSGFuZGxlRGF0YWdyYW0oYU1lc3NhZ2UsICZuZXRpZiwgbmV0aWYuR2V0SW50ZXJmYWNlSWQoKSwgJmFNZXNzYWdlSW5mbywgZmFsc2UpOworfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkhhbmRsZURhdGFSZXF1ZXN0KGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY1NvdXJjZSwgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIENoaWxkICpjaGlsZDsKKyAgICB1aW50MTZfdCBpbmRpcmVjdE1zZ0NvdW50OworCisgICAgLy8gU2VjdXJpdHkgQ2hlY2s6IG9ubHkgcHJvY2VzcyBzZWN1cmUgRGF0YSBQb2xsIGZyYW1lcy4KKyAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2VJbmZvLm1MaW5rU2VjdXJpdHkpOworCisgICAgVmVyaWZ5T3JFeGl0KG5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSAhPSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRCk7CisKKyAgICBWZXJpZnlPckV4aXQoKGNoaWxkID0gbmV0aWYuR2V0TWxlKCkuR2V0Q2hpbGQoYU1hY1NvdXJjZSkpICE9IE5VTEwpOworICAgIGNoaWxkLT5TZXRMYXN0SGVhcmQoVGltZXI6OkdldE5vdygpKTsKKyAgICBjaGlsZC0+UmVzZXRMaW5rRmFpbHVyZXMoKTsKKyAgICBpbmRpcmVjdE1zZ0NvdW50ID0gY2hpbGQtPkdldEluZGlyZWN0TWVzc2FnZUNvdW50KCk7CisKKyAgICBpZiAoIW1Tb3VyY2VNYXRjaENvbnRyb2xsZXIuSXNFbmFibGVkKCkgfHwgKGluZGlyZWN0TXNnQ291bnQgPiAwKSkKKyAgICB7CisgICAgICAgIGNoaWxkLT5TZXREYXRhUmVxdWVzdFBlbmRpbmcodHJ1ZSk7CisgICAgfQorCisgICAgbVNjaGVkdWxlVHJhbnNtaXNzaW9uVGFzay5Qb3N0KCk7CisKKyAgICBvdExvZ0luZm9NYWMoR2V0SW5zdGFuY2UoKSwgIlJ4IGRhdGEgcG9sbCwgc3JjOjB4JTA0eCwgcWVkX21zZ3M6JWQiLCBjaGlsZC0+R2V0UmxvYzE2KCksIGluZGlyZWN0TXNnQ291bnQpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpIYW5kbGVEYXRhUG9sbFRpbWVvdXQoTWFjOjpSZWNlaXZlciAmYVJlY2VpdmVyKQoreworICAgIEdldE93bmVyKGFSZWNlaXZlcikuR2V0RGF0YVBvbGxNYW5hZ2VyKCkuSGFuZGxlUG9sbFRpbWVvdXQoKTsKK30KKworTWVzaEZvcndhcmRlciAmTWVzaEZvcndhcmRlcjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgTWVzaEZvcndhcmRlciAmbWVzaEZvcndhZGVyID0gKnN0YXRpY19jYXN0PE1lc2hGb3J3YXJkZXIgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgTWVzaEZvcndhcmRlciAmbWVzaEZvcndhZGVyID0gb3RHZXRNZXNoRm9yd2FyZGVyKCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBtZXNoRm9yd2FkZXI7Cit9CisKKyNpZiAoT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMID49IE9UX0xPR19MRVZFTF9JTkZPKSAmJiAoT1BFTlRIUkVBRF9DT05GSUdfTE9HX01BQyA9PSAxKQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkxvZ0lwNk1lc3NhZ2UoTWVzc2FnZUFjdGlvbiBhQWN0aW9uLCBjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgTWFjOjpBZGRyZXNzICphTWFjQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEVycm9yIGFFcnJvcikKK3sKKyAgICB1aW50MTZfdCBjaGVja3N1bSA9IDA7CisgICAgSXA2OjpIZWFkZXIgaXA2SGVhZGVyOworICAgIElwNjo6SXBQcm90byBwcm90b2NvbDsKKyAgICBjaGFyIHN0cmluZ0J1ZmZlcltJcDY6OkFkZHJlc3M6OmtJcDZBZGRyZXNzU3RyaW5nU2l6ZV07CisgICAgY29uc3QgY2hhciAqYWN0aW9uVGV4dDsKKyAgICBjb25zdCBjaGFyICpwcmlvcml0eVRleHQ7CisgICAgYm9vbCBzaG91bGRMb2dTcmNEc3RBZGRyZXNzZXMgPSB0cnVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLkdldFR5cGUoKSA9PSBNZXNzYWdlOjprVHlwZUlwNik7CisKKyAgICBWZXJpZnlPckV4aXQoc2l6ZW9mKGlwNkhlYWRlcikgPT0gYU1lc3NhZ2UuUmVhZCgwLCBzaXplb2YoaXA2SGVhZGVyKSwgJmlwNkhlYWRlcikpOworICAgIFZlcmlmeU9yRXhpdChpcDZIZWFkZXIuSXNWZXJzaW9uNigpKTsKKworICAgIHByb3RvY29sID0gaXA2SGVhZGVyLkdldE5leHRIZWFkZXIoKTsKKworICAgIHN3aXRjaCAocHJvdG9jb2wpCisgICAgeworICAgIGNhc2UgSXA2OjprUHJvdG9VZHA6CisgICAgeworICAgICAgICBJcDY6OlVkcEhlYWRlciB1ZHBIZWFkZXI7CisKKyAgICAgICAgaWYgKHNpemVvZih1ZHBIZWFkZXIpID09IGFNZXNzYWdlLlJlYWQoc2l6ZW9mKGlwNkhlYWRlciksIHNpemVvZih1ZHBIZWFkZXIpLCAmdWRwSGVhZGVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2hlY2tzdW0gPSB1ZHBIZWFkZXIuR2V0Q2hlY2tzdW0oKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgSXA2OjprUHJvdG9UY3A6CisgICAgeworICAgICAgICBJcDY6OlRjcEhlYWRlciB0Y3BIZWFkZXI7CisKKyAgICAgICAgaWYgKHNpemVvZih0Y3BIZWFkZXIpID09IGFNZXNzYWdlLlJlYWQoc2l6ZW9mKGlwNkhlYWRlciksIHNpemVvZih0Y3BIZWFkZXIpLCAmdGNwSGVhZGVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2hlY2tzdW0gPSB0Y3BIZWFkZXIuR2V0Q2hlY2tzdW0oKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoYUFjdGlvbikKKyAgICB7CisgICAgY2FzZSBrTWVzc2FnZVJlY2VpdmU6CisgICAgICAgIGFjdGlvblRleHQgPSAiUmVjZWl2ZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga01lc3NhZ2VUcmFuc21pdDoKKyAgICAgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBhY3Rpb25UZXh0ID0gIlNlbnQiOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYWN0aW9uVGV4dCA9ICJGYWlsZWQgdG8gc2VuZCI7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga01lc3NhZ2VQcmVwYXJlSW5kaXJlY3Q6CisgICAgICAgIGFjdGlvblRleHQgPSAiUHJlcGluZyBpbmRpciB0eCI7CisgICAgICAgIHNob3VsZExvZ1NyY0RzdEFkZHJlc3NlcyA9IGZhbHNlOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga01lc3NhZ2VEcm9wOgorICAgICAgICBhY3Rpb25UZXh0ID0gIkRyb3BwaW5nIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhY3Rpb25UZXh0ID0gIiI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoYU1lc3NhZ2UuR2V0UHJpb3JpdHkoKSkKKyAgICB7CisgICAgY2FzZSBNZXNzYWdlOjprUHJpb3JpdHlIaWdoOgorICAgICAgICBwcmlvcml0eVRleHQgPSAiaGlnaCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZXNzYWdlOjprUHJpb3JpdHlNZWRpdW06CisgICAgICAgIHByaW9yaXR5VGV4dCA9ICJtZWRpdW0iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVzc2FnZTo6a1ByaW9yaXR5TG93OgorICAgICAgICBwcmlvcml0eVRleHQgPSAibG93IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lc3NhZ2U6OmtQcmlvcml0eVZlcnlMb3c6CisgICAgICAgIHByaW9yaXR5VGV4dCA9ICJ2ZXJ5bG93IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmlvcml0eVRleHQgPSAidW5rbm93biI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG90TG9nSW5mb01hYygKKyAgICAgICAgR2V0SW5zdGFuY2UoKSwKKyAgICAgICAgIiVzIElQdjYgJXMgbXNnLCBsZW46JWQsIGNoa3N1bTolMDR4JXMlcywgc2VjOiVzJXMlcywgcHJpbzolcyIsCisgICAgICAgIGFjdGlvblRleHQsCisgICAgICAgIElwNjo6SXA2OjpJcFByb3RvVG9TdHJpbmcocHJvdG9jb2wpLAorICAgICAgICBhTWVzc2FnZS5HZXRMZW5ndGgoKSwKKyAgICAgICAgY2hlY2tzdW0sCisgICAgICAgIChhTWFjQWRkcmVzcyA9PSBOVUxMKSA/ICIiIDogKChhQWN0aW9uID09IGtNZXNzYWdlUmVjZWl2ZSkgPyAiLCBmcm9tOiIgOiAiLCB0bzoiKSwKKyAgICAgICAgKGFNYWNBZGRyZXNzID09IE5VTEwpID8gIiIgOiBhTWFjQWRkcmVzcy0+VG9TdHJpbmcoc3RyaW5nQnVmZmVyLCBzaXplb2Yoc3RyaW5nQnVmZmVyKSksCisgICAgICAgIGFNZXNzYWdlLklzTGlua1NlY3VyaXR5RW5hYmxlZCgpID8gInllcyIgOiAibm8iLAorICAgICAgICAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpID8gIiIgOiAiLCBlcnJvcjoiLAorICAgICAgICAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpID8gIiIgOiBvdFRocmVhZEVycm9yVG9TdHJpbmcoYUVycm9yKSwKKyAgICAgICAgcHJpb3JpdHlUZXh0CisgICAgKTsKKworICAgIGlmIChzaG91bGRMb2dTcmNEc3RBZGRyZXNzZXMpCisgICAgeworICAgICAgICBvdExvZ0luZm9NYWMoR2V0SW5zdGFuY2UoKSwgInNyYzogJXMiLCBpcDZIZWFkZXIuR2V0U291cmNlKCkuVG9TdHJpbmcoc3RyaW5nQnVmZmVyLCBzaXplb2Yoc3RyaW5nQnVmZmVyKSkpOworICAgICAgICBvdExvZ0luZm9NYWMoR2V0SW5zdGFuY2UoKSwgImRzdDogJXMiLCBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Ub1N0cmluZyhzdHJpbmdCdWZmZXIsIHNpemVvZihzdHJpbmdCdWZmZXIpKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworI2Vsc2UgLy8gI2lmIChPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUwgPj0gT1RfTE9HX0xFVkVMX0lORk8pICYmIChPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUFDID09IDEpCisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6TG9nSXA2TWVzc2FnZShNZXNzYWdlQWN0aW9uLCBjb25zdCBNZXNzYWdlICYsIGNvbnN0IE1hYzo6QWRkcmVzcyAqLCBvdEVycm9yKQoreworfQorCisjZW5kaWYgLy8jaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMID49IE9UX0xPR19MRVZFTF9JTkZPCisKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL21lc2hfZm9yd2FyZGVyLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9tZXNoX2ZvcndhcmRlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4OGIyYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9tZXNoX2ZvcndhcmRlci5ocHAKQEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBmb3J3YXJkaW5nIElQdjYgZGF0YWdyYW1zIGFjcm9zcyB0aGUgVGhyZWFkIG1lc2guCisgKi8KKworI2lmbmRlZiBNRVNIX0ZPUldBUkRFUl9IUFBfCisjZGVmaW5lIE1FU0hfRk9SV0FSREVSX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3Rhc2tsZXQuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWMuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvZGF0YV9wb2xsX21hbmFnZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9sb3dwYW4uaHBwIgorI2luY2x1ZGUgInRocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvc3JjX21hdGNoX2NvbnRyb2xsZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC90b3BvbG9neS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2VudW0KK3sKKyAgICBrUmVhc3NlbWJseVRpbWVvdXQgPSBPUEVOVEhSRUFEX0NPTkZJR182TE9XUEFOX1JFQVNTRU1CTFlfVElNRU9VVCwKK307CisKK2NsYXNzIE1sZVJvdXRlcjsKK3N0cnVjdCBUaHJlYWRNZXNzYWdlSW5mbzsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW1lc2gtZm9yd2FyZGluZworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWVzaCBmb3J3YXJkaW5nIHdpdGhpbiBUaHJlYWQuCisgKgorICogQHsKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBtZXNoIGZvcndhcmRpbmcgd2l0aGluIFRocmVhZC4KKyAqCisgKi8KK2NsYXNzIE1lc2hGb3J3YXJkZXI6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBNZXNoRm9yd2FyZGVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5hYmxlcyBtZXNoIGZvcndhcmRpbmcgYW5kIHRoZSBJRUVFIDgwMi4xNS40IE1BQyBsYXllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgZW5hYmxlZCB0aGUgbWVzaCBmb3J3YXJkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0YXJ0KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGlzYWJsZXMgbWVzaCBmb3J3YXJkaW5nIGFuZCB0aGUgSUVFRSA4MDIuMTUuNCBNQUMgbGF5ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGRpc2FibGVkIHRoZSBtZXNoIGZvcndhcmRlci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RvcCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN1Ym1pdHMgYSBtZXNzYWdlIHRvIHRoZSBtZXNoIGZvcndhcmRlciBmb3IgZm9yd2FyZGluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIG1lc3NhZ2Ugd2FzIGFscmVhZHkgZW5xdWV1ZWQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9EUk9QICAgICBUaGUgbWVzc2FnZSBjb3VsZCBub3QgYmUgc2VudCBhbmQgc2hvdWxkIGJlIGRyb3BwZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmRNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYWRkcmVzcyByZXNvbHZlciB3aGVuIGFuIEVJRC10by1STE9DIG1hcHBpbmcgaGFzIGJlZW4gcmVzb2x2ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRWlkICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBFSUQgdGhhdCBoYXMgYmVlbiByZXNvbHZlZC4KKyAgICAgKiBAcGFyYW1baW5dICBhRXJyb3IgIE9UX0VSUk9SX05PTkUgb24gc3VjY2VzcyBhbmQgT1RfRVJST1JfRFJPUCBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEhhbmRsZVJlc29sdmVkKGNvbnN0IElwNjo6QWRkcmVzcyAmYUVpZCwgb3RFcnJvciBhRXJyb3IpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcmFkaW8gcmVjZWl2ZXIgYW5kIHBvbGxpbmcgdGltZXIgb2ZmLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSeE9mZih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCByeC1vbi13aGVuLWlkbGUgbW9kZSBpcyBlbmFibGVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgVGhlIHJ4LW9uLXdoZW4taWRsZSBtb2RlIGlzIGVuYWJsZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgVGhlIHJ4LW9uLXdoZW4taWRsZS1tb2RlIGlzIGRpc2FibGVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBHZXRSeE9uV2hlbklkbGUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSByeC1vbi13aGVuLWlkbGUgbW9kZQorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJ4T25XaGVuSWRsZSAgVFJVRSB0byBlbmFibGUsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UnhPbldoZW5JZGxlKGJvb2wgYVJ4T25XaGVuSWRsZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBzY2FuIHBhcmFtZXRlcnMgZm9yIE1MRSBEaXNjb3ZlcnkgUmVxdWVzdCBtZXNzYWdlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTY2FuQ2hhbm5lbHMgIEEgYml0IHZlY3RvciBpbmRpY2F0aW5nIHdoaWNoIGNoYW5uZWxzIHRvIHNjYW4uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERpc2NvdmVyUGFyYW1ldGVycyh1aW50MzJfdCBhU2NhbkNoYW5uZWxzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZyZWVzIGFueSBpbmRpcmVjdCBtZXNzYWdlcyBxdWV1ZWQgZm9yIGEgc3BlY2lmaWMgY2hpbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hpbGQgIEEgcmVmZXJlbmNlIHRvIGEgY2hpbGQgd2hvbSBtZXNzYWdlcyBzaGFsbCBiZSByZW1vdmVkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckNoaWxkSW5kaXJlY3RNZXNzYWdlcyhDaGlsZCAmYUNoaWxkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZyZWVzIGFueSBpbmRpcmVjdCBtZXNzYWdlcyBxdWV1ZWQgZm9yIGNoaWxkcmVuIHRoYXQgYXJlIG5vIGxvbmdlciBhdHRhY2hlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgVXBkYXRlSW5kaXJlY3RNZXNzYWdlcyh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHNlbmQgcXVldWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gdGhlIHNlbmQgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBQcmlvcml0eVF1ZXVlICZHZXRTZW5kUXVldWUodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlbmRRdWV1ZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgcmVhc3NlbWJseSBxdWV1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgcmVhc3NlbWJseSBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IE1lc3NhZ2VRdWV1ZSAmR2V0UmVhc3NlbWJseVF1ZXVlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1SZWFzc2VtYmx5TGlzdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgcmVzb2x2aW5nIHF1ZXVlLgorICAgICAqCisgICAgICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIHRoZSByZXNvbHZpbmcgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBNZXNzYWdlUXVldWUgJkdldFJlc29sdmluZ1F1ZXVlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1SZXNvbHZpbmdRdWV1ZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBwb2xsIG1hbmFnZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgcG9sbCBtYW5hZ2VyLgorICAgICAqCisgICAgICovCisgICAgRGF0YVBvbGxNYW5hZ2VyICZHZXREYXRhUG9sbE1hbmFnZXIodm9pZCkgeyByZXR1cm4gbURhdGFQb2xsTWFuYWdlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgc291cmNlIG1hdGNoIGNvbnRyb2xsZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gdGhlIHNvdXJjZSBtYXRjaCBjb250cm9sbGVyLgorICAgICAqCisgICAgICovCisgICAgU291cmNlTWF0Y2hDb250cm9sbGVyICZHZXRTb3VyY2VNYXRjaENvbnRyb2xsZXIodm9pZCkgeyByZXR1cm4gbVNvdXJjZU1hdGNoQ29udHJvbGxlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgSVAgbGV2ZWwgY291bnRlcnMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgSVAgbGV2ZWwgY291bnRlcnMuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBvdElwQ291bnRlcnMgJkdldENvdW50ZXJzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JcENvdW50ZXJzOyB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1N0YXRlVXBkYXRlUGVyaW9kICAgICA9IDEwMDAsICAvLy88IFN0YXRlIHVwZGF0ZSBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzLgorICAgIH07CisKKyAgICBlbnVtCisgICAgeworICAgICAgICAvKioKKyAgICAgICAgICogTWF4aW11bSBudW1iZXIgb2YgdHggYXR0ZW1wdHMgYnkgYE1lc2hGb3J3YXJkZXJgIGZvciBhbiBvdXRib3VuZCBpbmRpcmVjdCBmcmFtZSAoZm9yIGEgc2xlZXB5IGNoaWxkKS4gVGhlCisgICAgICAgICAqIGBNZXNoRm9yd2FkZXJgIGF0dGVtcHRzIG9jY3VyIGZvbGxvd2luZyB0aGUgcmVjZXB0aW9uIG9mIGEgbmV3IGRhdGEgcmVxdWVzdCBjb21tYW5kIChhIG5ldyBkYXRhIHBvbGwpIGZyb20KKyAgICAgICAgICogdGhlIHNsZWVweSBjaGlsZC4KKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIGtNYXhQb2xsVHJpZ2dlcmVkVHhBdHRlbXB0cyA9IE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19JTkRJUkVDVF9QT0xMUywKKworICAgICAgICAvKioKKyAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gc2V0L2VuYWJsZSAxNS40IGFjayByZXF1ZXN0IGluIHRoZSBNQUMgaGVhZGVyIG9mIGEgc3VwZXJ2aXNpb24gbWVzc2FnZS4KKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIGtTdXBlcnZpc2lvbk1zZ0Fja1JlcXVlc3QgICA9IChPUEVOVEhSRUFEX0NPTkZJR19TVVBFUlZJU0lPTl9NU0dfTk9fQUNLX1JFUVVFU1QgPT0gMCkgPyB0cnVlIDogZmFsc2UsCisgICAgfTsKKworICAgIGVudW0gTWVzc2FnZUFjdGlvbiAgICAgICAgICAgICAgICAgICAvLy88IERlZmluZXMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgaW4gYExvZ01lc3NhZ2VJbmZvKClgIG1ldGhvZC4KKyAgICB7CisgICAgICAgIGtNZXNzYWdlUmVjZWl2ZSwgICAgICAgICAgICAgICAgIC8vLzwgSW5kaWNhdGVzIHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkLgorICAgICAgICBrTWVzc2FnZVRyYW5zbWl0LCAgICAgICAgICAgICAgICAvLy88IEluZGljYXRlcyB0aGF0IHRoZSBtZXNzYWdlIHdhcyBzZW50LgorICAgICAgICBrTWVzc2FnZVByZXBhcmVJbmRpcmVjdCwgICAgICAgICAvLy88IEluZGljYXRlcyB0aGF0IHRoZSBtZXNzYWdlIGlzIGJlaW5nIHByZXBhcmVkIGZvciBpbmRpcmVjdCB0eC4KKyAgICAgICAga01lc3NhZ2VEcm9wLCAgICAgICAgICAgICAgICAgICAgLy8vPCBJbmRpY2F0ZXMgdGhhdCB0aGUgbWVzc2FnZSBpcyBiZWluZyBkcm9wcGVkIGZyb20gcmVhc3NlbWJseSBsaXN0LgorICAgIH07CisKKyAgICBvdEVycm9yIENoZWNrUmVhY2hhYmlsaXR5KHVpbnQ4X3QgKmFGcmFtZSwgdWludDhfdCBhRnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNYWM6OkFkZHJlc3MgJmFNZXNoU291cmNlLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNZXNoRGVzdCk7CisKKyAgICBvdEVycm9yIEdldE1hY0Rlc3RpbmF0aW9uQWRkcmVzcyhjb25zdCBJcDY6OkFkZHJlc3MgJmFJcDZBZGRyLCBNYWM6OkFkZHJlc3MgJmFNYWNBZGRyKTsKKyAgICBvdEVycm9yIEdldE1hY1NvdXJjZUFkZHJlc3MoY29uc3QgSXA2OjpBZGRyZXNzICZhSXA2QWRkciwgTWFjOjpBZGRyZXNzICZhTWFjQWRkcik7CisgICAgTWVzc2FnZSAqR2V0RGlyZWN0VHJhbnNtaXNzaW9uKHZvaWQpOworICAgIE1lc3NhZ2UgKkdldEluZGlyZWN0VHJhbnNtaXNzaW9uKENoaWxkICZhQ2hpbGQpOworICAgIG90RXJyb3IgUHJlcGFyZURpc2NvdmVyUmVxdWVzdCh2b2lkKTsKKyAgICB2b2lkIFByZXBhcmVJbmRpcmVjdFRyYW5zbWlzc2lvbihNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgQ2hpbGQgJmFDaGlsZCk7CisgICAgdm9pZCBIYW5kbGVNZXNoKHVpbnQ4X3QgKmFGcmFtZSwgdWludDhfdCBhUGF5bG9hZExlbmd0aCwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUZyYWdtZW50KHVpbnQ4X3QgKmFGcmFtZSwgdWludDhfdCBhUGF5bG9hZExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY1NvdXJjZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlTG93cGFuSEModWludDhfdCAqYUZyYW1lLCB1aW50OF90IGFQYXlsb2FkTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVEYXRhUmVxdWVzdChjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNTb3VyY2UsIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgU2VuZFBvbGwoTWVzc2FnZSAmYU1lc3NhZ2UsIE1hYzo6RnJhbWUgJmFGcmFtZSk7CisgICAgb3RFcnJvciBTZW5kTWVzaChNZXNzYWdlICZhTWVzc2FnZSwgTWFjOjpGcmFtZSAmYUZyYW1lKTsKKyAgICBvdEVycm9yIFNlbmRGcmFnbWVudChNZXNzYWdlICZhTWVzc2FnZSwgTWFjOjpGcmFtZSAmYUZyYW1lKTsKKyAgICBvdEVycm9yIFNlbmRFbXB0eUZyYW1lKE1hYzo6RnJhbWUgJmFGcmFtZSwgYm9vbCBhQWNrUmVxdWVzdCk7CisgICAgb3RFcnJvciBVcGRhdGVJcDZSb3V0ZShNZXNzYWdlICZhTWVzc2FnZSk7CisgICAgb3RFcnJvciBVcGRhdGVNZXNoUm91dGUoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgSGFuZGxlRGF0YWdyYW0oTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNTb3VyY2UpOworICAgIHZvaWQgQ2xlYXJSZWFzc2VtYmx5TGlzdCh2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVJlY2VpdmVkRnJhbWUoTWFjOjpSZWNlaXZlciAmYVJlY2VpdmVyLCBNYWM6OkZyYW1lICZhRnJhbWUpOworICAgIHZvaWQgSGFuZGxlUmVjZWl2ZWRGcmFtZShNYWM6OkZyYW1lICZhRnJhbWUpOworICAgIHN0YXRpYyBvdEVycm9yIEhhbmRsZUZyYW1lUmVxdWVzdChNYWM6OlNlbmRlciAmYVNlbmRlciwgTWFjOjpGcmFtZSAmYUZyYW1lKTsKKyAgICBvdEVycm9yIEhhbmRsZUZyYW1lUmVxdWVzdChNYWM6OkZyYW1lICZhRnJhbWUpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVNlbnRGcmFtZShNYWM6OlNlbmRlciAmYVNlbmRlciwgTWFjOjpGcmFtZSAmYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisgICAgdm9pZCBIYW5kbGVTZW50RnJhbWUoTWFjOjpGcmFtZSAmYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlRGlzY292ZXJUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZURpc2NvdmVyVGltZXIodm9pZCk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlUmVhc3NlbWJseVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlUmVhc3NlbWJseVRpbWVyKHZvaWQpOworICAgIHN0YXRpYyB2b2lkIFNjaGVkdWxlVHJhbnNtaXNzaW9uVGFzayhUYXNrbGV0ICZhVGFza2xldCk7CisgICAgdm9pZCBTY2hlZHVsZVRyYW5zbWlzc2lvblRhc2sodm9pZCk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlRGF0YVBvbGxUaW1lb3V0KE1hYzo6UmVjZWl2ZXIgJmFSZWNlaXZlcik7CisKKyAgICBvdEVycm9yIEFkZFBlbmRpbmdTcmNNYXRjaEVudHJpZXModm9pZCk7CisgICAgb3RFcnJvciBBZGRTcmNNYXRjaEVudHJ5KENoaWxkICZhQ2hpbGQpOworICAgIHZvaWQgQ2xlYXJTcmNNYXRjaEVudHJ5KENoaWxkICZhQ2hpbGQpOworCisgICAgc3RhdGljIE1lc2hGb3J3YXJkZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIHZvaWQgTG9nSXA2TWVzc2FnZShNZXNzYWdlQWN0aW9uIGFBY3Rpb24sIGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNYWM6OkFkZHJlc3MgKmFNYWNBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICBvdEVycm9yIGFFcnJvcik7CisKKyAgICBNYWM6OlJlY2VpdmVyICAgICAgICAgbU1hY1JlY2VpdmVyOworICAgIE1hYzo6U2VuZGVyICAgICAgICAgICBtTWFjU2VuZGVyOworICAgIFRpbWVyICAgICAgICAgICAgICAgICBtRGlzY292ZXJUaW1lcjsKKyAgICBUaW1lciAgICAgICAgICAgICAgICAgbVJlYXNzZW1ibHlUaW1lcjsKKworICAgIFByaW9yaXR5UXVldWUgICAgICAgICBtU2VuZFF1ZXVlOworICAgIE1lc3NhZ2VRdWV1ZSAgICAgICAgICBtUmVhc3NlbWJseUxpc3Q7CisgICAgTWVzc2FnZVF1ZXVlICAgICAgICAgIG1SZXNvbHZpbmdRdWV1ZTsKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgbUZyYWdUYWc7CisgICAgdWludDE2X3QgICAgICAgICAgICAgIG1NZXNzYWdlTmV4dE9mZnNldDsKKworICAgIHVpbnQzMl90ICAgICAgICAgICAgICBtU2VuZE1lc3NhZ2VGcmFtZUNvdW50ZXI7CisgICAgTWVzc2FnZSAgICAgICAgICAgICAgICptU2VuZE1lc3NhZ2U7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgIG1TZW5kTWVzc2FnZUlzQVJldHJhbnNtaXNzaW9uOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICBtU2VuZE1lc3NhZ2VNYXhNYWNUeEF0dGVtcHRzOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICBtU2VuZE1lc3NhZ2VLZXlJZDsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgbVNlbmRNZXNzYWdlRGF0YVNlcXVlbmNlTnVtYmVyOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICBtU3RhcnRDaGlsZEluZGV4OworCisgICAgTWFjOjpBZGRyZXNzICAgICAgICAgIG1NYWNTb3VyY2U7CisgICAgTWFjOjpBZGRyZXNzICAgICAgICAgIG1NYWNEZXN0OworICAgIHVpbnQxNl90ICAgICAgICAgICAgICBtTWVzaFNvdXJjZTsKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgbU1lc2hEZXN0OworICAgIGJvb2wgICAgICAgICAgICAgICAgICBtQWRkTWVzaEhlYWRlcjsKKworICAgIGJvb2wgICAgICAgICAgICAgICAgICBtU2VuZEJ1c3k7CisKKyAgICBUYXNrbGV0ICAgICAgICAgICAgICAgbVNjaGVkdWxlVHJhbnNtaXNzaW9uVGFzazsKKyAgICBib29sICAgICAgICAgICAgICAgICAgbUVuYWJsZWQ7CisKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgbVNjYW5DaGFubmVsczsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgbVNjYW5DaGFubmVsOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICBtUmVzdG9yZUNoYW5uZWw7CisgICAgdWludDE2X3QgICAgICAgICAgICAgIG1SZXN0b3JlUGFuSWQ7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgIG1TY2FubmluZzsKKworICAgIERhdGFQb2xsTWFuYWdlciAgICAgICBtRGF0YVBvbGxNYW5hZ2VyOworICAgIFNvdXJjZU1hdGNoQ29udHJvbGxlciBtU291cmNlTWF0Y2hDb250cm9sbGVyOworCisgICAgb3RJcENvdW50ZXJzICAgICAgICAgIG1JcENvdW50ZXJzOworfTsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBNRVNIX0ZPUldBUkRFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbWxlLmNwcCBiL3NyYy9jb3JlL3RocmVhZC9tbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiODkwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbWxlLmNwcApAQCAtMCwwICsxLDMzMTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgTUxFIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgZm9yIHRoZSBUaHJlYWQgQ2hpbGQsIFJvdXRlciBhbmQgTGVhZGVyIHJvbGVzLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgIm1sZS50bWgiCisKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSAibWxlLmhwcCIKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3NldHRpbmdzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3NldHRpbmdzLmhwcCIKKyNpbmNsdWRlICJjcnlwdG8vYWVzX2NjbS5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgIm5ldC9uZXRpZi5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQva2V5X21hbmFnZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWxlIHsKKworTWxlOjpNbGUoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1SZXRyaWV2ZU5ld05ldHdvcmtEYXRhKGZhbHNlKSwKKyAgICBtUm9sZShPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCksCisgICAgbURldmljZU1vZGUoTW9kZVRsdjo6a01vZGVSeE9uV2hlbklkbGUgfCBNb2RlVGx2OjprTW9kZVNlY3VyZURhdGFSZXF1ZXN0KSwKKyAgICBpc0Fzc2lnbkxpbmtRdWFsaXR5KGZhbHNlKSwKKyAgICBtQXNzaWduTGlua1F1YWxpdHkoMCksCisgICAgbUFzc2lnbkxpbmtNYXJnaW4oMCksCisgICAgbVBhcmVudFJlcXVlc3RTdGF0ZShrUGFyZW50SWRsZSksCisgICAgbVJlYXR0YWNoU3RhdGUoa1JlYXR0YWNoU3RvcCksCisgICAgbVBhcmVudFJlcXVlc3RUaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmTWxlOjpIYW5kbGVQYXJlbnRSZXF1ZXN0VGltZXIsIHRoaXMpLAorICAgIG1EZWxheWVkUmVzcG9uc2VUaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmTWxlOjpIYW5kbGVEZWxheWVkUmVzcG9uc2VUaW1lciwgdGhpcyksCisgICAgbUxhc3RQYXJ0aXRpb25Sb3V0ZXJJZFNlcXVlbmNlKDApLAorICAgIG1MYXN0UGFydGl0aW9uSWQoMCksCisgICAgbVBhcmVudExlYWRlckNvc3QoMCksCisgICAgbVBhcmVudFJlcXVlc3RNb2RlKGtBdHRhY2hBbnkpLAorICAgIG1QYXJlbnRQcmlvcml0eSgwKSwKKyAgICBtUGFyZW50TGlua1F1YWxpdHkzKDApLAorICAgIG1QYXJlbnRMaW5rUXVhbGl0eTIoMCksCisgICAgbVBhcmVudExpbmtRdWFsaXR5MSgwKSwKKyAgICBtQ2hpbGRVcGRhdGVBdHRlbXB0cygwKSwKKyAgICBtUGFyZW50SXNTaW5nbGV0b24oZmFsc2UpLAorICAgIG1Tb2NrZXQoYVRocmVhZE5ldGlmLkdldElwNigpLm1VZHApLAorICAgIG1UaW1lb3V0KGtNbGVFbmREZXZpY2VUaW1lb3V0KSwKKyAgICBtU2VuZENoaWxkVXBkYXRlUmVxdWVzdChhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRhc2tsZXRTY2hlZHVsZXIsICZNbGU6OkhhbmRsZVNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QsIHRoaXMpLAorICAgIG1EaXNjb3ZlckhhbmRsZXIoTlVMTCksCisgICAgbURpc2NvdmVyQ29udGV4dChOVUxMKSwKKyAgICBtSXNEaXNjb3ZlckluUHJvZ3Jlc3MoZmFsc2UpLAorICAgIG1FbmFibGVFdWk2NEZpbHRlcmluZyhmYWxzZSksCisgICAgbUFubm91bmNlQ2hhbm5lbChPVF9SQURJT19DSEFOTkVMX01JTiksCisgICAgbVByZXZpb3VzQ2hhbm5lbCgwKSwKKyAgICBtUHJldmlvdXNQYW5JZChNYWM6OmtQYW5JZEJyb2FkY2FzdCkKK3sKKyAgICB1aW50OF90IG1lc2hMb2NhbFByZWZpeFs4XTsKKworICAgIG1lbXNldCgmbUxlYWRlckRhdGEsIDAsIHNpemVvZihtTGVhZGVyRGF0YSkpOworICAgIG1lbXNldCgmbVBhcmVudExlYWRlckRhdGEsIDAsIHNpemVvZihtUGFyZW50TGVhZGVyRGF0YSkpOworICAgIG1lbXNldCgmbVBhcmVudCwgMCwgc2l6ZW9mKG1QYXJlbnQpKTsKKyAgICBtZW1zZXQoJm1DaGlsZElkUmVxdWVzdCwgMCwgc2l6ZW9mKG1DaGlsZElkUmVxdWVzdCkpOworICAgIG1lbXNldCgmbUxpbmtMb2NhbDY0LCAwLCBzaXplb2YobUxpbmtMb2NhbDY0KSk7CisgICAgbWVtc2V0KCZtTWVzaExvY2FsNjQsIDAsIHNpemVvZihtTWVzaExvY2FsNjQpKTsKKyAgICBtZW1zZXQoJm1NZXNoTG9jYWwxNiwgMCwgc2l6ZW9mKG1NZXNoTG9jYWwxNikpOworICAgIG1lbXNldCgmbUxpbmtMb2NhbEFsbFRocmVhZE5vZGVzLCAwLCBzaXplb2YobUxpbmtMb2NhbEFsbFRocmVhZE5vZGVzKSk7CisgICAgbWVtc2V0KCZtUmVhbG1Mb2NhbEFsbFRocmVhZE5vZGVzLCAwLCBzaXplb2YobVJlYWxtTG9jYWxBbGxUaHJlYWROb2RlcykpOworICAgIG1lbXNldCgmbUxlYWRlckFsb2MsIDAsIHNpemVvZihtTGVhZGVyQWxvYykpOworICAgIG1lbXNldCgmbVBhcmVudENhbmRpZGF0ZSwgMCwgc2l6ZW9mKG1QYXJlbnRDYW5kaWRhdGUpKTsKKworICAgIC8vIGxpbmstbG9jYWwgNjQKKyAgICBtTGlua0xvY2FsNjQuR2V0QWRkcmVzcygpLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgIG1MaW5rTG9jYWw2NC5HZXRBZGRyZXNzKCkuU2V0SWlkKCphVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpKTsKKyAgICBtTGlua0xvY2FsNjQubVByZWZpeExlbmd0aCA9IDY0OworICAgIG1MaW5rTG9jYWw2NC5tUHJlZmVycmVkID0gdHJ1ZTsKKyAgICBtTGlua0xvY2FsNjQubVZhbGlkID0gdHJ1ZTsKKyAgICBhVGhyZWFkTmV0aWYuQWRkVW5pY2FzdEFkZHJlc3MobUxpbmtMb2NhbDY0KTsKKworICAgIC8vIExlYWRlciBBbG9jCisgICAgbUxlYWRlckFsb2MubVByZWZpeExlbmd0aCA9IDEyODsKKyAgICBtTGVhZGVyQWxvYy5tUHJlZmVycmVkID0gdHJ1ZTsKKyAgICBtTGVhZGVyQWxvYy5tVmFsaWQgPSB0cnVlOworICAgIG1MZWFkZXJBbG9jLm1TY29wZU92ZXJyaWRlID0gSXA2OjpBZGRyZXNzOjprUmVhbG1Mb2NhbFNjb3BlOworICAgIG1MZWFkZXJBbG9jLm1TY29wZU92ZXJyaWRlVmFsaWQgPSB0cnVlOworCisgICAgLy8gaW5pdGlhbGl6ZSBNZXNoIExvY2FsIFByZWZpeAorICAgIG1lc2hMb2NhbFByZWZpeFswXSA9IDB4ZmQ7CisgICAgbWVtY3B5KG1lc2hMb2NhbFByZWZpeCArIDEsIGFUaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRFeHRlbmRlZFBhbklkKCksIDUpOworICAgIG1lc2hMb2NhbFByZWZpeFs2XSA9IDB4MDA7CisgICAgbWVzaExvY2FsUHJlZml4WzddID0gMHgwMDsKKworICAgIC8vIG1lc2gtbG9jYWwgNjQKKyAgICBmb3IgKGludCBpID0gT1RfSVA2X1BSRUZJWF9TSVpFOyBpIDwgT1RfSVA2X0FERFJFU1NfU0laRTsgaSsrKQorICAgIHsKKyAgICAgICAgbU1lc2hMb2NhbDY0LkdldEFkZHJlc3MoKS5tRmllbGRzLm04W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgIH0KKworICAgIG1NZXNoTG9jYWw2NC5tUHJlZml4TGVuZ3RoID0gNjQ7CisgICAgbU1lc2hMb2NhbDY0Lm1QcmVmZXJyZWQgPSB0cnVlOworICAgIG1NZXNoTG9jYWw2NC5tVmFsaWQgPSB0cnVlOworICAgIG1NZXNoTG9jYWw2NC5tU2NvcGVPdmVycmlkZSA9IElwNjo6QWRkcmVzczo6a1JlYWxtTG9jYWxTY29wZTsKKyAgICBtTWVzaExvY2FsNjQubVNjb3BlT3ZlcnJpZGVWYWxpZCA9IHRydWU7CisgICAgU2V0TWVzaExvY2FsUHJlZml4KG1lc2hMb2NhbFByZWZpeCk7IC8vIEFsc28gY2FsbHMgQWRkVW5pY2FzdEFkZHJlc3MKKworICAgIC8vIG1lc2gtbG9jYWwgMTYKKyAgICBtTWVzaExvY2FsMTYuR2V0QWRkcmVzcygpLm1GaWVsZHMubTE2WzRdID0gSG9zdFN3YXAxNigweDAwMDApOworICAgIG1NZXNoTG9jYWwxNi5HZXRBZGRyZXNzKCkubUZpZWxkcy5tMTZbNV0gPSBIb3N0U3dhcDE2KDB4MDBmZik7CisgICAgbU1lc2hMb2NhbDE2LkdldEFkZHJlc3MoKS5tRmllbGRzLm0xNls2XSA9IEhvc3RTd2FwMTYoMHhmZTAwKTsKKyAgICBtTWVzaExvY2FsMTYubVByZWZpeExlbmd0aCA9IDY0OworICAgIG1NZXNoTG9jYWwxNi5tUHJlZmVycmVkID0gdHJ1ZTsKKyAgICBtTWVzaExvY2FsMTYubVZhbGlkID0gdHJ1ZTsKKyAgICBtTWVzaExvY2FsMTYubVNjb3BlT3ZlcnJpZGUgPSBJcDY6OkFkZHJlc3M6OmtSZWFsbUxvY2FsU2NvcGU7CisgICAgbU1lc2hMb2NhbDE2Lm1TY29wZU92ZXJyaWRlVmFsaWQgPSB0cnVlOworICAgIG1NZXNoTG9jYWwxNi5tUmxvYyA9IHRydWU7CisKKyAgICAvLyBTdG9yZSBSTE9DIGFkZHJlc3MgcmVmZXJlbmNlIGluIE1QTCBtb2R1bGUuCisgICAgYVRocmVhZE5ldGlmLkdldElwNigpLm1NcGwuU2V0TWF0Y2hpbmdBZGRyZXNzKG1NZXNoTG9jYWwxNi5HZXRBZGRyZXNzKCkpOworCisgICAgLy8gbGluay1sb2NhbCBhbGwgdGhyZWFkIG5vZGVzCisgICAgbUxpbmtMb2NhbEFsbFRocmVhZE5vZGVzLkdldEFkZHJlc3MoKS5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZjMyKTsKKyAgICBtTGlua0xvY2FsQWxsVGhyZWFkTm9kZXMuR2V0QWRkcmVzcygpLm1GaWVsZHMubTE2WzZdID0gSG9zdFN3YXAxNigweDAwMDApOworICAgIG1MaW5rTG9jYWxBbGxUaHJlYWROb2Rlcy5HZXRBZGRyZXNzKCkubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KDB4MDAwMSk7CisgICAgYVRocmVhZE5ldGlmLlN1YnNjcmliZU11bHRpY2FzdChtTGlua0xvY2FsQWxsVGhyZWFkTm9kZXMpOworCisgICAgLy8gcmVhbG0tbG9jYWwgYWxsIHRocmVhZCBub2RlcworICAgIG1SZWFsbUxvY2FsQWxsVGhyZWFkTm9kZXMuR2V0QWRkcmVzcygpLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZmMzMpOworICAgIG1SZWFsbUxvY2FsQWxsVGhyZWFkTm9kZXMuR2V0QWRkcmVzcygpLm1GaWVsZHMubTE2WzZdID0gSG9zdFN3YXAxNigweDAwMDApOworICAgIG1SZWFsbUxvY2FsQWxsVGhyZWFkTm9kZXMuR2V0QWRkcmVzcygpLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNigweDAwMDEpOworICAgIGFUaHJlYWROZXRpZi5TdWJzY3JpYmVNdWx0aWNhc3QobVJlYWxtTG9jYWxBbGxUaHJlYWROb2Rlcyk7CisKKyAgICBtTmV0aWZDYWxsYmFjay5TZXQoJk1sZTo6SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQsIHRoaXMpOworICAgIGFUaHJlYWROZXRpZi5SZWdpc3RlckNhbGxiYWNrKG1OZXRpZkNhbGxiYWNrKTsKKworICAgIG1lbXNldCgmbUFkZHI2NCwgMCwgc2l6ZW9mKG1BZGRyNjQpKTsKK30KKworb3RFcnJvciBNbGU6OkVuYWJsZSh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElwNjo6U29ja0FkZHIgc29ja2FkZHI7CisKKyAgICAvLyBtZW1jcHkoJnNvY2thZGRyLm1BZGRyLCAmbUxpbmtMb2NhbDY0LkdldEFkZHJlc3MoKSwgc2l6ZW9mKHNvY2thZGRyLm1BZGRyKSk7CisgICAgc29ja2FkZHIubVBvcnQgPSBrVWRwUG9ydDsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNvY2tldC5PcGVuKCZNbGU6OkhhbmRsZVVkcFJlY2VpdmUsIHRoaXMpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNvY2tldC5CaW5kKHNvY2thZGRyKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6RGlzYWJsZSh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFN0b3AoZmFsc2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNvY2tldC5DbG9zZSgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpTdGFydChib29sIGFFbmFibGVSZWF0dGFjaCwgYm9vbCBhQW5ub3VuY2VBdHRhY2gpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICAvLyBjYW5ub3QgYnJpbmcgdXAgdGhlIGludGVyZmFjZSBpZiBJRUVFIDgwMi4xNS40IHByb21pc2N1b3VzIG1vZGUgaXMgZW5hYmxlZAorICAgIFZlcmlmeU9yRXhpdChvdFBsYXRSYWRpb0dldFByb21pc2N1b3VzKG5ldGlmLkdldEluc3RhbmNlKCkpID09IGZhbHNlLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgIFZlcmlmeU9yRXhpdChuZXRpZi5Jc1VwKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBtUm9sZSA9IE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOworICAgIG5ldGlmLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX1JPTEUpOworICAgIFNldFN0YXRlRGV0YWNoZWQoKTsKKworICAgIG5ldGlmLkdldEtleU1hbmFnZXIoKS5TdGFydCgpOworCisgICAgaWYgKGFFbmFibGVSZWF0dGFjaCkKKyAgICB7CisgICAgICAgIG1SZWF0dGFjaFN0YXRlID0ga1JlYXR0YWNoU3RhcnQ7CisgICAgfQorCisgICAgaWYgKGFBbm5vdW5jZUF0dGFjaCB8fCAoR2V0UmxvYzE2KCkgPT0gTWFjOjprU2hvcnRBZGRySW52YWxpZCkpCisgICAgeworICAgICAgICBCZWNvbWVDaGlsZChrQXR0YWNoQW55KTsKKyAgICB9CisgICAgZWxzZSBpZiAoSXNBY3RpdmVSb3V0ZXIoR2V0UmxvYzE2KCkpKQorICAgIHsKKyAgICAgICAgaWYgKG5ldGlmLkdldE1sZSgpLkJlY29tZVJvdXRlcihUaHJlYWRTdGF0dXNUbHY6OmtUb29GZXdSb3V0ZXJzKSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBCZWNvbWVDaGlsZChrQXR0YWNoQW55KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudFN5bmNocm9uaXplOworICAgICAgICBtQ2hpbGRVcGRhdGVBdHRlbXB0cyA9IDA7CisgICAgICAgIFNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgb3RMb2dGdW5jRXhpdEVycihlcnJvcik7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6U3RvcChib29sIGFDbGVhck5ldHdvcmtEYXRhc2V0cykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuU3RvcCgpOworICAgIFNldFN0YXRlRGV0YWNoZWQoKTsKKyAgICBuZXRpZi5SZW1vdmVVbmljYXN0QWRkcmVzcyhtTWVzaExvY2FsMTYpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKyAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxvY2FsKCkuQ2xlYXIoKTsKKyNlbmRpZgorICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuQ2xlYXIoKTsKKyAgICBtZW1zZXQoJm1MZWFkZXJEYXRhLCAwLCBzaXplb2YobUxlYWRlckRhdGEpKTsKKworICAgIGlmIChhQ2xlYXJOZXR3b3JrRGF0YXNldHMpCisgICAgeworICAgICAgICBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuSGFuZGxlRGV0YWNoKCk7CisgICAgICAgIG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuSGFuZGxlRGV0YWNoKCk7CisgICAgfQorCisgICAgbVJvbGUgPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTWxlOjpSZXN0b3JlKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBTZXR0aW5nczo6TmV0d29ya0luZm8gbmV0d29ya0luZm87CisgICAgU2V0dGluZ3M6OlBhcmVudEluZm8gcGFyZW50SW5mbzsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisKKyAgICBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuUmVzdG9yZSgpOworICAgIG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuUmVzdG9yZSgpOworCisgICAgbGVuZ3RoID0gc2l6ZW9mKG5ldHdvcmtJbmZvKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RQbGF0U2V0dGluZ3NHZXQobmV0aWYuR2V0SW5zdGFuY2UoKSwgU2V0dGluZ3M6OmtLZXlOZXR3b3JrSW5mbywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZuZXR3b3JrSW5mbyksICZsZW5ndGgpKTsKKyAgICBWZXJpZnlPckV4aXQobGVuZ3RoID09IHNpemVvZihuZXR3b3JrSW5mbyksIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKyAgICBWZXJpZnlPckV4aXQobmV0d29ya0luZm8ubVJvbGUgPj0gT1RfREVWSUNFX1JPTEVfQ0hJTEQsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworICAgIG1EZXZpY2VNb2RlID0gbmV0d29ya0luZm8ubURldmljZU1vZGU7CisgICAgU2V0UmxvYzE2KG5ldHdvcmtJbmZvLm1SbG9jMTYpOworICAgIG5ldGlmLkdldEtleU1hbmFnZXIoKS5TZXRDdXJyZW50S2V5U2VxdWVuY2UobmV0d29ya0luZm8ubUtleVNlcXVlbmNlKTsKKyAgICBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuU2V0TWxlRnJhbWVDb3VudGVyKG5ldHdvcmtJbmZvLm1NbGVGcmFtZUNvdW50ZXIpOworICAgIG5ldGlmLkdldEtleU1hbmFnZXIoKS5TZXRNYWNGcmFtZUNvdW50ZXIobmV0d29ya0luZm8ubU1hY0ZyYW1lQ291bnRlcik7CisgICAgbmV0aWYuR2V0TWFjKCkuU2V0RXh0QWRkcmVzcyhuZXR3b3JrSW5mby5tRXh0QWRkcmVzcyk7CisgICAgVXBkYXRlTGlua0xvY2FsQWRkcmVzcygpOworCisgICAgbWVtY3B5KCZtTWVzaExvY2FsNjQuR2V0QWRkcmVzcygpLm1GaWVsZHMubThbT1RfSVA2X1BSRUZJWF9TSVpFXSwKKyAgICAgICAgICAgbmV0d29ya0luZm8ubU1sSWlkLAorICAgICAgICAgICBPVF9JUDZfQUREUkVTU19TSVpFIC0gT1RfSVA2X1BSRUZJWF9TSVpFKTsKKworICAgIGlmIChuZXR3b3JrSW5mby5tUmxvYzE2ID09IE1hYzo6a1Nob3J0QWRkckludmFsaWQpCisgICAgeworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgaWYgKCFJc0FjdGl2ZVJvdXRlcihuZXR3b3JrSW5mby5tUmxvYzE2KSkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IHNpemVvZihwYXJlbnRJbmZvKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90UGxhdFNldHRpbmdzR2V0KG5ldGlmLkdldEluc3RhbmNlKCksIFNldHRpbmdzOjprS2V5UGFyZW50SW5mbywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmcGFyZW50SW5mbyksICZsZW5ndGgpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxlbmd0aCA+PSBzaXplb2YocGFyZW50SW5mbyksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIG1lbXNldCgmbVBhcmVudCwgMCwgc2l6ZW9mKG1QYXJlbnQpKTsKKyAgICAgICAgbVBhcmVudC5TZXRFeHRBZGRyZXNzKCpzdGF0aWNfY2FzdDxNYWM6OkV4dEFkZHJlc3MgKj4oJnBhcmVudEluZm8ubUV4dEFkZHJlc3MpKTsKKyAgICAgICAgbVBhcmVudC5TZXREZXZpY2VNb2RlKE1vZGVUbHY6OmtNb2RlRkZEIHwgTW9kZVRsdjo6a01vZGVSeE9uV2hlbklkbGUgfCBNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlVGx2OjprTW9kZVNlY3VyZURhdGFSZXF1ZXN0KTsKKyAgICAgICAgbVBhcmVudC5TZXRSbG9jMTYoR2V0UmxvYzE2KEdldFJvdXRlcklkKG5ldHdvcmtJbmZvLm1SbG9jMTYpKSk7CisgICAgICAgIG1QYXJlbnQuU2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZVJlc3RvcmVkKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0TWxlKCkuU2V0Um91dGVySWQoR2V0Um91dGVySWQoR2V0UmxvYzE2KCkpKTsKKyAgICAgICAgbmV0aWYuR2V0TWxlKCkuU2V0UHJldmlvdXNQYXJ0aXRpb25JZChuZXR3b3JrSW5mby5tUHJldmlvdXNQYXJ0aXRpb25JZCk7CisKKyAgICAgICAgc3dpdGNoIChuZXRpZi5HZXRNbGUoKS5SZXN0b3JlQ2hpbGRyZW4oKSkKKyAgICAgICAgeworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbW9yZSBzYXZlZCBjaGlsZHJlbiBpbiBub24tdm9sYXRpbGUgc2V0dGluZ3MKKyAgICAgICAgLy8gdGhhbiBjb3VsZCBiZSByZXN0b3JlZCBvciB0aGUgdmFsdWVzIGluIHRoZSBzZXR0aW5ncyBhcmUKKyAgICAgICAgLy8gaW52YWxpZCwgZXJhc2UgYWxsIHRoZSBjaGlsZHJlbiBpbmZvIGluIHRoZSBzZXR0aW5ncyBhbmQKKyAgICAgICAgLy8gcmVmcmVzaCB0aGUgaW5mbyB0byBlbnN1cmUgdGhhdCB0aGUgbm9uLXZvbGF0aWxlIHNldHRpbmdzCisgICAgICAgIC8vIHN0YXkgaW4gc3luYyB3aXRoIHRoZSBjaGlsZCB0YWJsZS4KKworICAgICAgICBjYXNlIE9UX0VSUk9SX0ZBSUxFRDoKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9OT19CVUZTOgorICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuUmVmcmVzaFN0b3JlZENoaWxkcmVuKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6U3RvcmUodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFNldHRpbmdzOjpOZXR3b3JrSW5mbyBuZXR3b3JrSW5mbzsKKyAgICBTZXR0aW5nczo6UGFyZW50SW5mbyBwYXJlbnRJbmZvOworCisgICAgVmVyaWZ5T3JFeGl0KElzQXR0YWNoZWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGlmIChuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuR2V0VGltZXN0YW1wKCkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5HZW5lcmF0ZUxvY2FsKCk7CisgICAgfQorCisgICAgbWVtc2V0KCZuZXR3b3JrSW5mbywgMCwgc2l6ZW9mKG5ldHdvcmtJbmZvKSk7CisKKyAgICBuZXR3b3JrSW5mby5tRGV2aWNlTW9kZSA9IG1EZXZpY2VNb2RlOworICAgIG5ldHdvcmtJbmZvLm1Sb2xlID0gbVJvbGU7CisgICAgbmV0d29ya0luZm8ubVJsb2MxNiA9IEdldFJsb2MxNigpOworICAgIG5ldHdvcmtJbmZvLm1LZXlTZXF1ZW5jZSA9IG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRDdXJyZW50S2V5U2VxdWVuY2UoKTsKKyAgICBuZXR3b3JrSW5mby5tTWxlRnJhbWVDb3VudGVyID0gbmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldE1sZUZyYW1lQ291bnRlcigpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BFTlRIUkVBRF9DT05GSUdfU1RPUkVfRlJBTUVfQ09VTlRFUl9BSEVBRDsKKyAgICBuZXR3b3JrSW5mby5tTWFjRnJhbWVDb3VudGVyID0gbmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldE1hY0ZyYW1lQ291bnRlcigpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BFTlRIUkVBRF9DT05GSUdfU1RPUkVfRlJBTUVfQ09VTlRFUl9BSEVBRDsKKyAgICBuZXR3b3JrSW5mby5tUHJldmlvdXNQYXJ0aXRpb25JZCA9IG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCk7CisgICAgbWVtY3B5KG5ldHdvcmtJbmZvLm1FeHRBZGRyZXNzLm04LCBuZXRpZi5HZXRNYWMoKS5HZXRFeHRBZGRyZXNzKCksIHNpemVvZihuZXR3b3JrSW5mby5tRXh0QWRkcmVzcykpOworICAgIG1lbWNweShuZXR3b3JrSW5mby5tTWxJaWQsCisgICAgICAgICAgICZtTWVzaExvY2FsNjQuR2V0QWRkcmVzcygpLm1GaWVsZHMubThbT1RfSVA2X1BSRUZJWF9TSVpFXSwKKyAgICAgICAgICAgT1RfSVA2X0FERFJFU1NfU0laRSAtIE9UX0lQNl9QUkVGSVhfU0laRSk7CisKKworICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCkKKyAgICB7CisgICAgICAgIG1lbXNldCgmcGFyZW50SW5mbywgMCwgc2l6ZW9mKHBhcmVudEluZm8pKTsKKyAgICAgICAgbWVtY3B5KCZwYXJlbnRJbmZvLm1FeHRBZGRyZXNzLCAmbVBhcmVudC5HZXRFeHRBZGRyZXNzKCksIHNpemVvZihwYXJlbnRJbmZvLm1FeHRBZGRyZXNzKSk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90UGxhdFNldHRpbmdzU2V0KG5ldGlmLkdldEluc3RhbmNlKCksIFNldHRpbmdzOjprS2V5UGFyZW50SW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmcGFyZW50SW5mbyksIHNpemVvZihwYXJlbnRJbmZvKSkpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFBsYXRTZXR0aW5nc1NldChuZXRpZi5HZXRJbnN0YW5jZSgpLCBTZXR0aW5nczo6a0tleU5ldHdvcmtJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJm5ldHdvcmtJbmZvKSwgc2l6ZW9mKG5ldHdvcmtJbmZvKSkpOworCisgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldFN0b3JlZE1sZUZyYW1lQ291bnRlcihuZXR3b3JrSW5mby5tTWxlRnJhbWVDb3VudGVyKTsKKyAgICBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuU2V0U3RvcmVkTWFjRnJhbWVDb3VudGVyKG5ldHdvcmtJbmZvLm1NYWNGcmFtZUNvdW50ZXIpOworCisgICAgb3RMb2dEZWJnTWxlKEdldEluc3RhbmNlKCksICJTdG9yZSBOZXR3b3JrIEluZm9ybWF0aW9uIik7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6RGlzY292ZXIodWludDMyX3QgYVNjYW5DaGFubmVscywgdWludDE2X3QgYVBhbklkLCBib29sIGFKb2luZXIsIGJvb2wgYUVuYWJsZUV1aTY0RmlsdGVyaW5nLAorICAgICAgICAgICAgICAgICAgICAgIERpc2NvdmVySGFuZGxlciBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIElwNjo6QWRkcmVzcyBkZXN0aW5hdGlvbjsKKyAgICBUbHYgdGx2OworICAgIE1lc2hDb1A6OkRpc2NvdmVyeVJlcXVlc3RUbHYgZGlzY292ZXJ5UmVxdWVzdDsKKyAgICB1aW50MTZfdCBzdGFydE9mZnNldDsKKworICAgIFZlcmlmeU9yRXhpdCghbUlzRGlzY292ZXJJblByb2dyZXNzLCBlcnJvciA9IE9UX0VSUk9SX0JVU1kpOworCisgICAgbUVuYWJsZUV1aTY0RmlsdGVyaW5nID0gYUVuYWJsZUV1aTY0RmlsdGVyaW5nOworCisgICAgbURpc2NvdmVySGFuZGxlciA9IGFDYWxsYmFjazsKKyAgICBtRGlzY292ZXJDb250ZXh0ID0gYUNvbnRleHQ7CisgICAgR2V0TmV0aWYoKS5HZXRNZXNoRm9yd2FyZGVyKCkuU2V0RGlzY292ZXJQYXJhbWV0ZXJzKGFTY2FuQ2hhbm5lbHMpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIG1lc3NhZ2UtPlNldFN1YlR5cGUoTWVzc2FnZTo6a1N1YlR5cGVNbGVEaXNjb3ZlclJlcXVlc3QpOworICAgIG1lc3NhZ2UtPlNldFBhbklkKGFQYW5JZCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgSGVhZGVyOjprQ29tbWFuZERpc2NvdmVyeVJlcXVlc3QpKTsKKworICAgIC8vIERpc2NvdmVyeSBUTFYKKyAgICB0bHYuU2V0VHlwZShUbHY6OmtEaXNjb3ZlcnkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKworICAgIHN0YXJ0T2Zmc2V0ID0gbWVzc2FnZS0+R2V0TGVuZ3RoKCk7CisKKyAgICAvLyBEaXNjb3ZlcnkgUmVxdWVzdCBUTFYKKyAgICBkaXNjb3ZlcnlSZXF1ZXN0LkluaXQoKTsKKyAgICBkaXNjb3ZlcnlSZXF1ZXN0LlNldFZlcnNpb24oa1ZlcnNpb24pOworICAgIGRpc2NvdmVyeVJlcXVlc3QuU2V0Sm9pbmVyKGFKb2luZXIpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmRpc2NvdmVyeVJlcXVlc3QsIHNpemVvZihkaXNjb3ZlcnlSZXF1ZXN0KSkpOworCisgICAgdGx2LlNldExlbmd0aChzdGF0aWNfY2FzdDx1aW50OF90PihtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0KSk7CisgICAgbWVzc2FnZS0+V3JpdGUoc3RhcnRPZmZzZXQgLSBzaXplb2YodGx2KSwgc2l6ZW9mKHRsdiksICZ0bHYpOworCisgICAgbWVtc2V0KCZkZXN0aW5hdGlvbiwgMCwgc2l6ZW9mKGRlc3RpbmF0aW9uKSk7CisgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmYwMik7CisgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KDB4MDAwMik7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCBkZXN0aW5hdGlvbikpOworCisgICAgbUlzRGlzY292ZXJJblByb2dyZXNzID0gdHJ1ZTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiU2VudCBkaXNjb3ZlcnkgcmVxdWVzdCIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworYm9vbCBNbGU6OklzRGlzY292ZXJJblByb2dyZXNzKHZvaWQpCit7CisgICAgcmV0dXJuIG1Jc0Rpc2NvdmVySW5Qcm9ncmVzczsKK30KKwordm9pZCBNbGU6OkhhbmRsZURpc2NvdmVyQ29tcGxldGUodm9pZCkKK3sKKyAgICBtSXNEaXNjb3ZlckluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBtRW5hYmxlRXVpNjRGaWx0ZXJpbmcgPSBmYWxzZTsKKyAgICBtRGlzY292ZXJIYW5kbGVyKE5VTEwsIG1EaXNjb3ZlckNvbnRleHQpOworfQorCitvdEVycm9yIE1sZTo6QmVjb21lRGV0YWNoZWQodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIFZlcmlmeU9yRXhpdChtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuSGFuZGxlRGV0YWNoKCk7CisKKyAgICBTZXRTdGF0ZURldGFjaGVkKCk7CisgICAgU2V0UmxvYzE2KE1hYzo6a1Nob3J0QWRkckludmFsaWQpOworICAgIEJlY29tZUNoaWxkKGtBdHRhY2hBbnkpOworCitleGl0OgorICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkJlY29tZUNoaWxkKEF0dGFjaE1vZGUgYU1vZGUpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBWZXJpZnlPckV4aXQobVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisgICAgVmVyaWZ5T3JFeGl0KG1QYXJlbnRSZXF1ZXN0U3RhdGUgPT0ga1BhcmVudElkbGUsIGVycm9yID0gT1RfRVJST1JfQlVTWSk7CisKKyAgICBpZiAobVJlYXR0YWNoU3RhdGUgPT0ga1JlYXR0YWNoU3RhcnQpCisgICAgeworICAgICAgICBpZiAobmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLlJlc3RvcmUoKSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVhdHRhY2hTdGF0ZSA9IGtSZWF0dGFjaEFjdGl2ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZWF0dGFjaFN0YXRlID0ga1JlYXR0YWNoU3RvcDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlc2V0UGFyZW50Q2FuZGlkYXRlKCk7CisgICAgbVBhcmVudFJlcXVlc3RTdGF0ZSA9IGtQYXJlbnRSZXF1ZXN0U3RhcnQ7CisgICAgbVBhcmVudFJlcXVlc3RNb2RlID0gYU1vZGU7CisKKyAgICBpZiAoYU1vZGUgIT0ga0F0dGFjaEJldHRlcikKKyAgICB7CisgICAgICAgIG1lbXNldCgmbVBhcmVudCwgMCwgc2l6ZW9mKG1QYXJlbnQpKTsKKworICAgICAgICBpZiAobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkKKyAgICAgICAgeworICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuU3RvcEFkdmVydGlzZVRpbWVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYU1vZGUgPT0ga0F0dGFjaEFueSkKKyAgICB7CisgICAgICAgIG1QYXJlbnQuU2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZUludmFsaWQpOworICAgICAgICBtTGFzdFBhcnRpdGlvbklkID0gbmV0aWYuR2V0TWxlKCkuR2V0UHJldmlvdXNQYXJ0aXRpb25JZCgpOworICAgICAgICBtTGFzdFBhcnRpdGlvblJvdXRlcklkU2VxdWVuY2UgPSBuZXRpZi5HZXRNbGUoKS5HZXRSb3V0ZXJJZFNlcXVlbmNlKCk7CisgICAgfQorCisgICAgbmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLlNldFJ4T25XaGVuSWRsZSh0cnVlKTsKKworICAgIG1QYXJlbnRSZXF1ZXN0VGltZXIuU3RhcnQoKG90UGxhdFJhbmRvbUdldCgpICUga1BhcmVudFJlcXVlc3RSb3V0ZXJUaW1lb3V0KSArIDEpOworCitleGl0OgorICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKworYm9vbCBNbGU6OklzQXR0YWNoZWQodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0NISUxEIHx8IG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX1JPVVRFUiB8fCBtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIpOworfQorCitvdEVycm9yIE1sZTo6U2V0U3RhdGVEZXRhY2hlZCh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBpZiAobVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfREVUQUNIRUQpCisgICAgeworICAgICAgICBuZXRpZi5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9ST0xFKTsKKyAgICB9CisKKyAgICBpZiAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgIHsKKyAgICAgICAgbmV0aWYuUmVtb3ZlVW5pY2FzdEFkZHJlc3MobUxlYWRlckFsb2MpOworICAgIH0KKworICAgIG1Sb2xlID0gT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ7CisgICAgbVBhcmVudFJlcXVlc3RTdGF0ZSA9IGtQYXJlbnRJZGxlOworICAgIG1QYXJlbnRSZXF1ZXN0VGltZXIuU3RvcCgpOworICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5TZXRSeE9mZigpOworICAgIG5ldGlmLkdldE1hYygpLlNldEJlYWNvbkVuYWJsZWQoZmFsc2UpOworICAgIG5ldGlmLkdldE1sZSgpLkhhbmRsZURldGFjaFN0YXJ0KCk7CisgICAgbmV0aWYuR2V0SXA2KCkuU2V0Rm9yd2FyZGluZ0VuYWJsZWQoZmFsc2UpOworICAgIG5ldGlmLkdldElwNigpLm1NcGwuU2V0VGltZXJFeHBpcmF0aW9ucygwKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiTW9kZSAtPiBEZXRhY2hlZCIpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1sZTo6U2V0U3RhdGVDaGlsZCh1aW50MTZfdCBhUmxvYzE2KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBpZiAobVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfQ0hJTEQpCisgICAgeworICAgICAgICBuZXRpZi5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9ST0xFKTsKKyAgICB9CisKKyAgICBpZiAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgIHsKKyAgICAgICAgbmV0aWYuUmVtb3ZlVW5pY2FzdEFkZHJlc3MobUxlYWRlckFsb2MpOworICAgIH0KKworICAgIFNldFJsb2MxNihhUmxvYzE2KTsKKyAgICBtUm9sZSA9IE9UX0RFVklDRV9ST0xFX0NISUxEOworICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUgPSBrUGFyZW50SWRsZTsKKyAgICBtQ2hpbGRVcGRhdGVBdHRlbXB0cyA9IDA7CisgICAgbmV0aWYuR2V0TWFjKCkuU2V0QmVhY29uRW5hYmxlZChmYWxzZSk7CisKKyAgICBpZiAoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVSeE9uV2hlbklkbGUpICE9IDApCisgICAgeworICAgICAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0YXJ0KFRpbWVyOjpTZWNUb01zZWMobVRpbWVvdXQpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oa1VuaWNhc3RSZXRyYW5zbWlzc2lvbkRlbGF5KSAqIGtNYXhDaGlsZEtlZXBBbGl2ZUF0dGVtcHRzKTsKKyAgICB9CisKKyAgICBpZiAoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpICE9IDApCisgICAgeworICAgICAgICBuZXRpZi5HZXRNbGUoKS5IYW5kbGVDaGlsZFN0YXJ0KG1QYXJlbnRSZXF1ZXN0TW9kZSk7CisgICAgfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTG9jYWwoKS5DbGVhclJlc3VibWl0RGVsYXlUaW1lcigpOworI2VuZGlmCisgICAgbmV0aWYuR2V0SXA2KCkuU2V0Rm9yd2FyZGluZ0VuYWJsZWQoZmFsc2UpOworICAgIG5ldGlmLkdldElwNigpLm1NcGwuU2V0VGltZXJFeHBpcmF0aW9ucyhrTXBsQ2hpbGREYXRhTWVzc2FnZVRpbWVyRXhwaXJhdGlvbnMpOworCisgICAgLy8gT25jZSB0aGUgVGhyZWFkIGRldmljZSByZWNlaXZlcyB0aGUgbmV3IEFjdGl2ZSBDb21taXNzaW9uaW5nIERhdGFzZXQsIHRoZSBkZXZpY2UgTVVTVAorICAgIC8vIHRyYW5zbWl0IGl0cyBvd24gQW5ub3VuY2UgbWVzc2FnZXMgb24gdGhlIGNoYW5uZWwgaXQgd2FzIG9uIHByaW9yIHRvIHRoZSBhdHRhY2htZW50LgorICAgIGlmIChtUHJldmlvdXNQYW5JZCAhPSBNYWM6OmtQYW5JZEJyb2FkY2FzdCkKKyAgICB7CisgICAgICAgIG1QcmV2aW91c1BhbklkID0gTWFjOjprUGFuSWRCcm9hZGNhc3Q7CisgICAgICAgIG5ldGlmLkdldEFubm91bmNlQmVnaW5TZXJ2ZXIoKS5TZW5kQW5ub3VuY2UoMSA8PCBtUHJldmlvdXNDaGFubmVsKTsKKyAgICB9CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIk1vZGUgLT4gQ2hpbGQiKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNbGU6OlNldFRpbWVvdXQodWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgVmVyaWZ5T3JFeGl0KG1UaW1lb3V0ICE9IGFUaW1lb3V0KTsKKworICAgIGlmIChhVGltZW91dCA8IGtNaW5UaW1lb3V0KQorICAgIHsKKyAgICAgICAgYVRpbWVvdXQgPSBrTWluVGltZW91dDsKKyAgICB9CisKKyAgICBtVGltZW91dCA9IGFUaW1lb3V0OworCisgICAgR2V0TmV0aWYoKS5HZXRNZXNoRm9yd2FyZGVyKCkuR2V0RGF0YVBvbGxNYW5hZ2VyKCkuUmVjYWxjdWxhdGVQb2xsUGVyaW9kKCk7CisKKyAgICBpZiAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfQ0hJTEQpCisgICAgeworICAgICAgICBTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1sZTo6U2V0RGV2aWNlTW9kZSh1aW50OF90IGFEZXZpY2VNb2RlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3Qgb2xkTW9kZSA9IG1EZXZpY2VNb2RlOworCisgICAgVmVyaWZ5T3JFeGl0KChhRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKSA9PSAwIHx8IChhRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlUnhPbldoZW5JZGxlKSAhPSAwLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgVmVyaWZ5T3JFeGl0KG1EZXZpY2VNb2RlICE9IGFEZXZpY2VNb2RlKTsKKworICAgIG1EZXZpY2VNb2RlID0gYURldmljZU1vZGU7CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgU2V0U3RhdGVDaGlsZChHZXRSbG9jMTYoKSk7CisgICAgICAgIFNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgaWYgKChvbGRNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpICE9IDAgJiYgKGFEZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitjb25zdCBJcDY6OkFkZHJlc3MgJk1sZTo6R2V0TGlua0xvY2FsQWRkcmVzcyh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtTGlua0xvY2FsNjQuR2V0QWRkcmVzcygpOworfQorCitvdEVycm9yIE1sZTo6VXBkYXRlTGlua0xvY2FsQWRkcmVzcyh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBuZXRpZi5SZW1vdmVVbmljYXN0QWRkcmVzcyhtTGlua0xvY2FsNjQpOworICAgIG1MaW5rTG9jYWw2NC5HZXRBZGRyZXNzKCkuU2V0SWlkKCpuZXRpZi5HZXRNYWMoKS5HZXRFeHRBZGRyZXNzKCkpOworICAgIG5ldGlmLkFkZFVuaWNhc3RBZGRyZXNzKG1MaW5rTG9jYWw2NCk7CisKKyAgICBuZXRpZi5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9MTF9BRERSKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitjb25zdCB1aW50OF90ICpNbGU6OkdldE1lc2hMb2NhbFByZWZpeCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtTWVzaExvY2FsMTYuR2V0QWRkcmVzcygpLm1GaWVsZHMubTg7Cit9CisKK290RXJyb3IgTWxlOjpTZXRNZXNoTG9jYWxQcmVmaXgoY29uc3QgdWludDhfdCAqYU1lc2hMb2NhbFByZWZpeCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgaWYgKG1lbWNtcChtTWVzaExvY2FsNjQuR2V0QWRkcmVzcygpLm1GaWVsZHMubTgsIGFNZXNoTG9jYWxQcmVmaXgsIDgpID09IDApCisgICAgeworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgLy8gV2UgbXVzdCByZW1vdmUgdGhlIG9sZCBhZGRyZXNzIGJlZm9yZSBhZGRpbmcgdGhlIG5ldyBvbmUuCisgICAgbmV0aWYuUmVtb3ZlVW5pY2FzdEFkZHJlc3MobU1lc2hMb2NhbDY0KTsKKyAgICBuZXRpZi5SZW1vdmVVbmljYXN0QWRkcmVzcyhtTWVzaExvY2FsMTYpOworCisgICAgbWVtY3B5KG1NZXNoTG9jYWw2NC5HZXRBZGRyZXNzKCkubUZpZWxkcy5tOCwgYU1lc2hMb2NhbFByZWZpeCwgOCk7CisgICAgbWVtY3B5KG1NZXNoTG9jYWwxNi5HZXRBZGRyZXNzKCkubUZpZWxkcy5tOCwgbU1lc2hMb2NhbDY0LkdldEFkZHJlc3MoKS5tRmllbGRzLm04LCA4KTsKKworICAgIG1MaW5rTG9jYWxBbGxUaHJlYWROb2Rlcy5HZXRBZGRyZXNzKCkubUZpZWxkcy5tOFszXSA9IDY0OworICAgIG1lbWNweShtTGlua0xvY2FsQWxsVGhyZWFkTm9kZXMuR2V0QWRkcmVzcygpLm1GaWVsZHMubTggKyA0LCBtTWVzaExvY2FsNjQuR2V0QWRkcmVzcygpLm1GaWVsZHMubTgsIDgpOworCisgICAgbVJlYWxtTG9jYWxBbGxUaHJlYWROb2Rlcy5HZXRBZGRyZXNzKCkubUZpZWxkcy5tOFszXSA9IDY0OworICAgIG1lbWNweShtUmVhbG1Mb2NhbEFsbFRocmVhZE5vZGVzLkdldEFkZHJlc3MoKS5tRmllbGRzLm04ICsgNCwgbU1lc2hMb2NhbDY0LkdldEFkZHJlc3MoKS5tRmllbGRzLm04LCA4KTsKKworICAgIC8vIEFkZCB0aGUgYWRkcmVzcyBiYWNrIGludG8gdGhlIHRhYmxlLgorICAgIG5ldGlmLkFkZFVuaWNhc3RBZGRyZXNzKG1NZXNoTG9jYWw2NCk7CisKKyAgICBpZiAobVJvbGUgPj0gT1RfREVWSUNFX1JPTEVfQ0hJTEQpCisgICAgeworICAgICAgICBuZXRpZi5BZGRVbmljYXN0QWRkcmVzcyhtTWVzaExvY2FsMTYpOworICAgIH0KKworICAgIC8vIHVwZGF0ZSBMZWFkZXIgQUxPQworICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIpCisgICAgeworICAgICAgICBuZXRpZi5SZW1vdmVVbmljYXN0QWRkcmVzcyhtTGVhZGVyQWxvYyk7CisgICAgICAgIEFkZExlYWRlckFsb2MoKTsKKyAgICB9CisKKyAgICAvLyBDaGFuZ2luZyB0aGUgcHJlZml4IGFsc28gY2F1c2VzIHRoZSBtZXNoIGxvY2FsIGFkZHJlc3MgdG8gYmUgZGlmZmVyZW50LgorICAgIG5ldGlmLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX01MX0FERFIpOworCitleGl0OgorICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitjb25zdCBJcDY6OkFkZHJlc3MgKk1sZTo6R2V0TGlua0xvY2FsQWxsVGhyZWFkTm9kZXNBZGRyZXNzKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuICZtTGlua0xvY2FsQWxsVGhyZWFkTm9kZXMuR2V0QWRkcmVzcygpOworfQorCitjb25zdCBJcDY6OkFkZHJlc3MgKk1sZTo6R2V0UmVhbG1Mb2NhbEFsbFRocmVhZE5vZGVzQWRkcmVzcyh2b2lkKSBjb25zdAoreworICAgIHJldHVybiAmbVJlYWxtTG9jYWxBbGxUaHJlYWROb2Rlcy5HZXRBZGRyZXNzKCk7Cit9CisKK3VpbnQxNl90IE1sZTo6R2V0UmxvYzE2KHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0U2hvcnRBZGRyZXNzKCk7Cit9CisKK290RXJyb3IgTWxlOjpTZXRSbG9jMTYodWludDE2X3QgYVJsb2MxNikKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgbmV0aWYuUmVtb3ZlVW5pY2FzdEFkZHJlc3MobU1lc2hMb2NhbDE2KTsKKworICAgIGlmIChhUmxvYzE2ICE9IE1hYzo6a1Nob3J0QWRkckludmFsaWQpCisgICAgeworICAgICAgICAvLyBtZXNoLWxvY2FsIDE2CisgICAgICAgIG1NZXNoTG9jYWwxNi5HZXRBZGRyZXNzKCkubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KGFSbG9jMTYpOworICAgICAgICBuZXRpZi5BZGRVbmljYXN0QWRkcmVzcyhtTWVzaExvY2FsMTYpOworICAgIH0KKworICAgIG5ldGlmLkdldE1hYygpLlNldFNob3J0QWRkcmVzcyhhUmxvYzE2KTsKKyAgICBuZXRpZi5HZXRJcDYoKS5tTXBsLlNldFNlZWRJZChhUmxvYzE2KTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit1aW50OF90IE1sZTo6R2V0TGVhZGVySWQodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUxlYWRlckRhdGEuR2V0TGVhZGVyUm91dGVySWQoKTsKK30KKwordm9pZCBNbGU6OlNldExlYWRlckRhdGEodWludDMyX3QgYVBhcnRpdGlvbklkLCB1aW50OF90IGFXZWlnaHRpbmcsIHVpbnQ4X3QgYUxlYWRlclJvdXRlcklkKQoreworICAgIGlmIChtTGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpICE9IGFQYXJ0aXRpb25JZCkKKyAgICB7CisgICAgICAgIEdldE5ldGlmKCkuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfUEFSVElUSU9OX0lEKTsKKyAgICB9CisKKyAgICBtTGVhZGVyRGF0YS5TZXRQYXJ0aXRpb25JZChhUGFydGl0aW9uSWQpOworICAgIG1MZWFkZXJEYXRhLlNldFdlaWdodGluZyhhV2VpZ2h0aW5nKTsKKyAgICBtTGVhZGVyRGF0YS5TZXRMZWFkZXJSb3V0ZXJJZChhTGVhZGVyUm91dGVySWQpOworfQorCitjb25zdCBJcDY6OkFkZHJlc3MgJk1sZTo6R2V0TWVzaExvY2FsMTYodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1lc2hMb2NhbDE2LkdldEFkZHJlc3MoKTsKK30KKworY29uc3QgSXA2OjpBZGRyZXNzICZNbGU6OkdldE1lc2hMb2NhbDY0KHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NZXNoTG9jYWw2NC5HZXRBZGRyZXNzKCk7Cit9CisKK290RXJyb3IgTWxlOjpHZXRMZWFkZXJBZGRyZXNzKElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpIGNvbnN0Cit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoR2V0UmxvYzE2KCkgIT0gTWFjOjprU2hvcnRBZGRySW52YWxpZCwgZXJyb3IgPSBPVF9FUlJPUl9ERVRBQ0hFRCk7CisKKyAgICBtZW1jcHkoJmFBZGRyZXNzLCAmbU1lc2hMb2NhbDE2LkdldEFkZHJlc3MoKSwgOCk7CisgICAgYUFkZHJlc3MubUZpZWxkcy5tMTZbNF0gPSBIb3N0U3dhcDE2KDB4MDAwMCk7CisgICAgYUFkZHJlc3MubUZpZWxkcy5tMTZbNV0gPSBIb3N0U3dhcDE2KDB4MDBmZik7CisgICAgYUFkZHJlc3MubUZpZWxkcy5tMTZbNl0gPSBIb3N0U3dhcDE2KDB4ZmUwMCk7CisgICAgYUFkZHJlc3MubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KEdldFJsb2MxNihtTGVhZGVyRGF0YS5HZXRMZWFkZXJSb3V0ZXJJZCgpKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6R2V0TGVhZGVyQWxvYyhJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KEdldFJsb2MxNigpICE9IE1hYzo6a1Nob3J0QWRkckludmFsaWQsIGVycm9yID0gT1RfRVJST1JfREVUQUNIRUQpOworCisgICAgbWVtY3B5KCZhQWRkcmVzcywgJm1NZXNoTG9jYWwxNi5HZXRBZGRyZXNzKCksIDgpOworICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzRdID0gSG9zdFN3YXAxNigweDAwMDApOworICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzVdID0gSG9zdFN3YXAxNigweDAwZmYpOworICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzZdID0gSG9zdFN3YXAxNigweGZlMDApOworICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNihrQWxvYzE2TGVhZGVyKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpBZGRMZWFkZXJBbG9jKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEdldExlYWRlckFsb2MobUxlYWRlckFsb2MuR2V0QWRkcmVzcygpKSk7CisKKyAgICBlcnJvciA9IEdldE5ldGlmKCkuQWRkVW5pY2FzdEFkZHJlc3MobUxlYWRlckFsb2MpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworY29uc3QgTGVhZGVyRGF0YVRsdiAmTWxlOjpHZXRMZWFkZXJEYXRhVGx2KHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIG1MZWFkZXJEYXRhLlNldERhdGFWZXJzaW9uKG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0VmVyc2lvbigpKTsKKyAgICBtTGVhZGVyRGF0YS5TZXRTdGFibGVEYXRhVmVyc2lvbihuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldFN0YWJsZVZlcnNpb24oKSk7CisgICAgcmV0dXJuIG1MZWFkZXJEYXRhOworfQorCitvdEVycm9yIE1sZTo6R2V0TGVhZGVyRGF0YShvdExlYWRlckRhdGEgJmFMZWFkZXJEYXRhKQoreworICAgIGNvbnN0IExlYWRlckRhdGFUbHYgJmxlYWRlckRhdGEoR2V0TGVhZGVyRGF0YVRsdigpKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCAmJiBtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRCwgZXJyb3IgPSBPVF9FUlJPUl9ERVRBQ0hFRCk7CisKKyAgICBhTGVhZGVyRGF0YS5tUGFydGl0aW9uSWQgPSBsZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCk7CisgICAgYUxlYWRlckRhdGEubVdlaWdodGluZyA9IGxlYWRlckRhdGEuR2V0V2VpZ2h0aW5nKCk7CisgICAgYUxlYWRlckRhdGEubURhdGFWZXJzaW9uID0gbGVhZGVyRGF0YS5HZXREYXRhVmVyc2lvbigpOworICAgIGFMZWFkZXJEYXRhLm1TdGFibGVEYXRhVmVyc2lvbiA9IGxlYWRlckRhdGEuR2V0U3RhYmxlRGF0YVZlcnNpb24oKTsKKyAgICBhTGVhZGVyRGF0YS5tTGVhZGVyUm91dGVySWQgPSBsZWFkZXJEYXRhLkdldExlYWRlclJvdXRlcklkKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6R2V0QXNzaWduTGlua1F1YWxpdHkoY29uc3QgTWFjOjpFeHRBZGRyZXNzIGFNYWNBZGRyLCB1aW50OF90ICZhTGlua1F1YWxpdHkpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFZlcmlmeU9yRXhpdCgobWVtY21wKGFNYWNBZGRyLm04LCBtQWRkcjY0Lm04LCBPVF9FWFRfQUREUkVTU19TSVpFKSkgPT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgYUxpbmtRdWFsaXR5ID0gbUFzc2lnbkxpbmtRdWFsaXR5OworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1sZTo6U2V0QXNzaWduTGlua1F1YWxpdHkoY29uc3QgTWFjOjpFeHRBZGRyZXNzIGFNYWNBZGRyLCB1aW50OF90IGFMaW5rUXVhbGl0eSkKK3sKKyAgICBpc0Fzc2lnbkxpbmtRdWFsaXR5ID0gdHJ1ZTsKKyAgICBtQWRkcjY0ID0gYU1hY0FkZHI7CisKKyAgICBtQXNzaWduTGlua1F1YWxpdHkgPSBhTGlua1F1YWxpdHk7CisKKyAgICBzd2l0Y2ggKGFMaW5rUXVhbGl0eSkKKyAgICB7CisgICAgY2FzZSAzOgorICAgICAgICBtQXNzaWduTGlua01hcmdpbiA9IGtNaW5Bc3NpZ25lZExpbmtNYXJnaW4zOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgICAgbUFzc2lnbkxpbmtNYXJnaW4gPSBrTWluQXNzaWduZWRMaW5rTWFyZ2luMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6CisgICAgICAgIG1Bc3NpZ25MaW5rTWFyZ2luID0ga01pbkFzc2lnbmVkTGlua01hcmdpbjE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAwOgorICAgICAgICBtQXNzaWduTGlua01hcmdpbiA9IGtNaW5Bc3NpZ25lZExpbmtNYXJnaW4wOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIE1sZTo6R2VuZXJhdGVOb25jZShjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFNYWNBZGRyLCB1aW50MzJfdCBhRnJhbWVDb3VudGVyLCB1aW50OF90IGFTZWN1cml0eUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYU5vbmNlKQoreworICAgIC8vIHNvdXJjZSBhZGRyZXNzCisgICAgbWVtY3B5KGFOb25jZSwgYU1hY0FkZHIubTgsIHNpemVvZihhTWFjQWRkcikpOworICAgIGFOb25jZSArPSBzaXplb2YoYU1hY0FkZHIpOworCisgICAgLy8gZnJhbWUgY291bnRlcgorICAgIGFOb25jZVswXSA9IChhRnJhbWVDb3VudGVyID4+IDI0KSAmIDB4ZmY7CisgICAgYU5vbmNlWzFdID0gKGFGcmFtZUNvdW50ZXIgPj4gMTYpICYgMHhmZjsKKyAgICBhTm9uY2VbMl0gPSAoYUZyYW1lQ291bnRlciA+PiA4KSAmIDB4ZmY7CisgICAgYU5vbmNlWzNdID0gYUZyYW1lQ291bnRlciAmIDB4ZmY7CisgICAgYU5vbmNlICs9IDQ7CisKKyAgICAvLyBzZWN1cml0eSBsZXZlbAorICAgIGFOb25jZVswXSA9IGFTZWN1cml0eUxldmVsOworfQorCitNZXNzYWdlICpNbGU6Ok5ld01sZU1lc3NhZ2Uodm9pZCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgbWVzc2FnZSA9IG1Tb2NrZXQuTmV3TWVzc2FnZSgwKTsKKyAgICBWZXJpZnlPckV4aXQobWVzc2FnZSAhPSBOVUxMKTsKKworICAgIG1lc3NhZ2UtPlNldFN1YlR5cGUoTWVzc2FnZTo6a1N1YlR5cGVNbGVHZW5lcmFsKTsKKyAgICBtZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKGZhbHNlKTsKKyAgICBtZXNzYWdlLT5TZXRQcmlvcml0eShrTWxlTWVzc2FnZVByaW9yaXR5KTsKKworZXhpdDoKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZEhlYWRlcihNZXNzYWdlICZhTWVzc2FnZSwgSGVhZGVyOjpDb21tYW5kIGFDb21tYW5kKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEhlYWRlciBoZWFkZXI7CisKKyAgICBoZWFkZXIuSW5pdCgpOworCisgICAgaWYgKGFDb21tYW5kID09IEhlYWRlcjo6a0NvbW1hbmREaXNjb3ZlcnlSZXF1ZXN0IHx8CisgICAgICAgIGFDb21tYW5kID09IEhlYWRlcjo6a0NvbW1hbmREaXNjb3ZlcnlSZXNwb25zZSkKKyAgICB7CisgICAgICAgIGhlYWRlci5TZXRTZWN1cml0eVN1aXRlKEhlYWRlcjo6a05vU2VjdXJpdHkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBoZWFkZXIuU2V0S2V5SWRNb2RlMigpOworICAgIH0KKworICAgIGhlYWRlci5TZXRDb21tYW5kKGFDb21tYW5kKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJmhlYWRlciwgaGVhZGVyLkdldExlbmd0aCgpKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6QXBwZW5kU291cmNlQWRkcmVzcyhNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBTb3VyY2VBZGRyZXNzVGx2IHRsdjsKKworICAgIHRsdi5Jbml0KCk7CisgICAgdGx2LlNldFJsb2MxNihHZXRSbG9jMTYoKSk7CisKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKTsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZFN0YXR1cyhNZXNzYWdlICZhTWVzc2FnZSwgU3RhdHVzVGx2OjpTdGF0dXMgYVN0YXR1cykKK3sKKyAgICBTdGF0dXNUbHYgdGx2OworCisgICAgdGx2LkluaXQoKTsKKyAgICB0bHYuU2V0U3RhdHVzKGFTdGF0dXMpOworCisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSk7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRNb2RlKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50OF90IGFNb2RlKQoreworICAgIE1vZGVUbHYgdGx2OworCisgICAgdGx2LkluaXQoKTsKKyAgICB0bHYuU2V0TW9kZShhTW9kZSk7CisKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKTsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZFRpbWVvdXQoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQzMl90IGFUaW1lb3V0KQoreworICAgIFRpbWVvdXRUbHYgdGx2OworCisgICAgdGx2LkluaXQoKTsKKyAgICB0bHYuU2V0VGltZW91dChhVGltZW91dCk7CisKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKTsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZENoYWxsZW5nZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgdWludDhfdCAqYUNoYWxsZW5nZSwgdWludDhfdCBhQ2hhbGxlbmdlTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgVGx2IHRsdjsKKworICAgIHRsdi5TZXRUeXBlKFRsdjo6a0NoYWxsZW5nZSk7CisgICAgdGx2LlNldExlbmd0aChhQ2hhbGxlbmdlTGVuZ3RoKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKGFDaGFsbGVuZ2UsIGFDaGFsbGVuZ2VMZW5ndGgpKTsKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6QXBwZW5kUmVzcG9uc2UoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IHVpbnQ4X3QgKmFSZXNwb25zZSwgdWludDhfdCBhUmVzcG9uc2VMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBUbHYgdGx2OworCisgICAgdGx2LlNldFR5cGUoVGx2OjprUmVzcG9uc2UpOworICAgIHRsdi5TZXRMZW5ndGgoYVJlc3BvbnNlTGVuZ3RoKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKGFSZXNwb25zZSwgYVJlc3BvbnNlTGVuZ3RoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6QXBwZW5kTGlua0ZyYW1lQ291bnRlcihNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBMaW5rRnJhbWVDb3VudGVyVGx2IHRsdjsKKworICAgIHRsdi5Jbml0KCk7CisgICAgdGx2LlNldEZyYW1lQ291bnRlcihHZXROZXRpZigpLkdldEtleU1hbmFnZXIoKS5HZXRNYWNGcmFtZUNvdW50ZXIoKSk7CisKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKTsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZE1sZUZyYW1lQ291bnRlcihNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBNbGVGcmFtZUNvdW50ZXJUbHYgdGx2OworCisgICAgdGx2LkluaXQoKTsKKyAgICB0bHYuU2V0RnJhbWVDb3VudGVyKEdldE5ldGlmKCkuR2V0S2V5TWFuYWdlcigpLkdldE1sZUZyYW1lQ291bnRlcigpKTsKKworICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpOworfQorCitvdEVycm9yIE1sZTo6QXBwZW5kQWRkcmVzczE2KE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhUmxvYzE2KQoreworICAgIEFkZHJlc3MxNlRsdiB0bHY7CisKKyAgICB0bHYuSW5pdCgpOworICAgIHRsdi5TZXRSbG9jMTYoYVJsb2MxNik7CisKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKTsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZExlYWRlckRhdGEoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgbUxlYWRlckRhdGEuSW5pdCgpOworICAgIG1MZWFkZXJEYXRhLlNldERhdGFWZXJzaW9uKEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRWZXJzaW9uKCkpOworICAgIG1MZWFkZXJEYXRhLlNldFN0YWJsZURhdGFWZXJzaW9uKEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRTdGFibGVWZXJzaW9uKCkpOworCisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmbUxlYWRlckRhdGEsIHNpemVvZihtTGVhZGVyRGF0YSkpOworfQorCit2b2lkIE1sZTo6RmlsbE5ldHdvcmtEYXRhVGx2KE5ldHdvcmtEYXRhVGx2ICZhVGx2LCBib29sIGFTdGFibGVPbmx5KQoreworICAgIHVpbnQ4X3QgbGVuZ3RoOworICAgIEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXROZXR3b3JrRGF0YShhU3RhYmxlT25seSwgYVRsdi5HZXROZXR3b3JrRGF0YSgpLCBsZW5ndGgpOworICAgIGFUbHYuU2V0TGVuZ3RoKGxlbmd0aCk7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmROZXR3b3JrRGF0YShNZXNzYWdlICZhTWVzc2FnZSwgYm9vbCBhU3RhYmxlT25seSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBOZXR3b3JrRGF0YVRsdiB0bHY7CisKKyAgICB0bHYuSW5pdCgpOworICAgIEZpbGxOZXR3b3JrRGF0YVRsdih0bHYsIGFTdGFibGVPbmx5KTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKFRsdikgKyB0bHYuR2V0TGVuZ3RoKCkpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRUbHZSZXF1ZXN0KE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCB1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c0xlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIFRsdiB0bHY7CisKKyAgICB0bHYuU2V0VHlwZShUbHY6OmtUbHZSZXF1ZXN0KTsKKyAgICB0bHYuU2V0TGVuZ3RoKGFUbHZzTGVuZ3RoKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKGFUbHZzLCBhVGx2c0xlbmd0aCkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZFNjYW5NYXNrKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50OF90IGFTY2FuTWFzaykKK3sKKyAgICBTY2FuTWFza1RsdiB0bHY7CisKKyAgICB0bHYuSW5pdCgpOworICAgIHRsdi5TZXRNYXNrKGFTY2FuTWFzayk7CisKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKTsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZExpbmtNYXJnaW4oTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQ4X3QgYUxpbmtNYXJnaW4pCit7CisgICAgTGlua01hcmdpblRsdiB0bHY7CisKKyAgICB0bHYuSW5pdCgpOworICAgIHRsdi5TZXRMaW5rTWFyZ2luKGFMaW5rTWFyZ2luKTsKKworICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpOworfQorCitvdEVycm9yIE1sZTo6QXBwZW5kVmVyc2lvbihNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBWZXJzaW9uVGx2IHRsdjsKKworICAgIHRsdi5Jbml0KCk7CisgICAgdGx2LlNldFZlcnNpb24oa1ZlcnNpb24pOworCisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSk7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRBZGRyZXNzUmVnaXN0cmF0aW9uKE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBUbHYgdGx2OworICAgIEFkZHJlc3NSZWdpc3RyYXRpb25FbnRyeSBlbnRyeTsKKyAgICBMb3dwYW46OkNvbnRleHQgY29udGV4dDsKKyAgICB1aW50OF90IGxlbmd0aCA9IDA7CisgICAgdWludDE2X3Qgc3RhcnRPZmZzZXQgPSBhTWVzc2FnZS5HZXRMZW5ndGgoKTsKKworICAgIHRsdi5TZXRUeXBlKFRsdjo6a0FkZHJlc3NSZWdpc3RyYXRpb24pOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKworICAgIC8vIHdyaXRlIGVudHJpZXMgdG8gbWVzc2FnZQorICAgIGZvciAoY29uc3QgSXA2OjpOZXRpZlVuaWNhc3RBZGRyZXNzICphZGRyID0gbmV0aWYuR2V0VW5pY2FzdEFkZHJlc3NlcygpOyBhZGRyOyBhZGRyID0gYWRkci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHItPkdldEFkZHJlc3MoKS5Jc0xpbmtMb2NhbCgpIHx8IGFkZHItPkdldEFkZHJlc3MoKSA9PSBtTWVzaExvY2FsMTYuR2V0QWRkcmVzcygpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldENvbnRleHQoYWRkci0+R2V0QWRkcmVzcygpLCBjb250ZXh0KSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBjb21wcmVzc2VkIGVudHJ5CisgICAgICAgICAgICBlbnRyeS5TZXRDb250ZXh0SWQoY29udGV4dC5tQ29udGV4dElkKTsKKyAgICAgICAgICAgIGVudHJ5LlNldElpZChhZGRyLT5HZXRBZGRyZXNzKCkuR2V0SWlkKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdW5jb21wcmVzc2VkIGVudHJ5CisgICAgICAgICAgICBlbnRyeS5TZXRVbmNvbXByZXNzZWQoKTsKKyAgICAgICAgICAgIGVudHJ5LlNldElwNkFkZHJlc3MoYWRkci0+R2V0QWRkcmVzcygpKTsKKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJmVudHJ5LCBlbnRyeS5HZXRMZW5ndGgoKSkpOworICAgICAgICBsZW5ndGggKz0gZW50cnkuR2V0TGVuZ3RoKCk7CisgICAgfQorCisgICAgdGx2LlNldExlbmd0aChsZW5ndGgpOworICAgIGFNZXNzYWdlLldyaXRlKHN0YXJ0T2Zmc2V0LCBzaXplb2YodGx2KSwgJnRsdik7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6QXBwZW5kQWN0aXZlVGltZXN0YW1wKE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBBY3RpdmVUaW1lc3RhbXBUbHYgdGltZXN0YW1wVGx2OworICAgIGNvbnN0IE1lc2hDb1A6OlRpbWVzdGFtcCAqdGltZXN0YW1wOworCisgICAgdGltZXN0YW1wID0gbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldFRpbWVzdGFtcCgpOworICAgIFZlcmlmeU9yRXhpdCh0aW1lc3RhbXAsIGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisKKyAgICB0aW1lc3RhbXBUbHYuSW5pdCgpOworICAgICpzdGF0aWNfY2FzdDxNZXNoQ29QOjpUaW1lc3RhbXAgKj4oJnRpbWVzdGFtcFRsdikgPSAqdGltZXN0YW1wOworICAgIGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZ0aW1lc3RhbXBUbHYsIHNpemVvZih0aW1lc3RhbXBUbHYpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRQZW5kaW5nVGltZXN0YW1wKE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgUGVuZGluZ1RpbWVzdGFtcFRsdiB0aW1lc3RhbXBUbHY7CisgICAgY29uc3QgTWVzaENvUDo6VGltZXN0YW1wICp0aW1lc3RhbXA7CisKKyAgICB0aW1lc3RhbXAgPSBHZXROZXRpZigpLkdldFBlbmRpbmdEYXRhc2V0KCkuR2V0VGltZXN0YW1wKCk7CisgICAgVmVyaWZ5T3JFeGl0KHRpbWVzdGFtcCAmJiB0aW1lc3RhbXAtPkdldFNlY29uZHMoKSAhPSAwLCBlcnJvciA9IE9UX0VSUk9SX05PTkUpOworCisgICAgdGltZXN0YW1wVGx2LkluaXQoKTsKKyAgICAqc3RhdGljX2Nhc3Q8TWVzaENvUDo6VGltZXN0YW1wICo+KCZ0aW1lc3RhbXBUbHYpID0gKnRpbWVzdGFtcDsKKyAgICBlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCgmdGltZXN0YW1wVGx2LCBzaXplb2YodGltZXN0YW1wVGx2KSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1sZTo6SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxNbGUgKj4oYUNvbnRleHQpLT5IYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZChhRmxhZ3MpOworfQorCit2b2lkIE1sZTo6SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlICE9IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEKTsKKworICAgIGlmICgoYUZsYWdzICYgKE9UX0NIQU5HRURfSVA2X0FERFJFU1NfQURERUQgfCBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX1JFTU9WRUQpKSAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKCFuZXRpZi5Jc1VuaWNhc3RBZGRyZXNzKG1NZXNoTG9jYWw2NC5HZXRBZGRyZXNzKCkpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBNZXNoIExvY2FsIEVJRCB3YXMgcmVtb3ZlZCwgY2hvb3NlIGEgbmV3IG9uZSBhbmQgYWRkIGl0IGJhY2sKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSA4OyBpIDwgMTY7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTWVzaExvY2FsNjQuR2V0QWRkcmVzcygpLm1GaWVsZHMubThbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihvdFBsYXRSYW5kb21HZXQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5ldGlmLkFkZFVuaWNhc3RBZGRyZXNzKG1NZXNoTG9jYWw2NCk7CisgICAgICAgICAgICBuZXRpZi5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9NTF9BRERSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCAmJiAobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QuUG9zdCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKSAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ldGlmLkdldE1sZSgpLkhhbmRsZU5ldHdvcmtEYXRhVXBkYXRlUm91dGVyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX1JPTEUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0LlBvc3QoKTsKKyAgICAgICAgfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgICAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxvY2FsKCkuU2VuZFNlcnZlckRhdGFOb3RpZmljYXRpb24oKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChhRmxhZ3MgJiAoT1RfQ0hBTkdFRF9USFJFQURfUk9MRSB8IE9UX0NIQU5HRURfVEhSRUFEX0tFWV9TRVFVRU5DRV9DT1VOVEVSKSkKKyAgICB7CisgICAgICAgIFN0b3JlKCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBNbGU6OkhhbmRsZVBhcmVudFJlcXVlc3RUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlUGFyZW50UmVxdWVzdFRpbWVyKCk7Cit9CisKK3ZvaWQgTWxlOjpIYW5kbGVQYXJlbnRSZXF1ZXN0VGltZXIodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgc3dpdGNoIChtUGFyZW50UmVxdWVzdFN0YXRlKQorICAgIHsKKyAgICBjYXNlIGtQYXJlbnRJZGxlOgorICAgICAgICBpZiAobVBhcmVudC5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgU2VuZENoaWxkVXBkYXRlUmVxdWVzdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrUGFyZW50U3luY2hyb25pemU6CisgICAgICAgIFNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQYXJlbnRSZXF1ZXN0U3RhcnQ6CisgICAgICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUgPSBrUGFyZW50UmVxdWVzdFJvdXRlcjsKKyAgICAgICAgbVBhcmVudENhbmRpZGF0ZS5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCk7CisgICAgICAgIFNlbmRQYXJlbnRSZXF1ZXN0KCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrUGFyZW50UmVxdWVzdFJvdXRlcjoKKyAgICAgICAgbVBhcmVudFJlcXVlc3RTdGF0ZSA9IGtQYXJlbnRSZXF1ZXN0Q2hpbGQ7CisKKyAgICAgICAgaWYgKG1QYXJlbnRDYW5kaWRhdGUuR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNlbmRDaGlsZElkUmVxdWVzdCgpOworICAgICAgICAgICAgbVBhcmVudFJlcXVlc3RTdGF0ZSA9IGtDaGlsZElkUmVxdWVzdDsKKyAgICAgICAgICAgIG1QYXJlbnRSZXF1ZXN0VGltZXIuU3RhcnQoa1BhcmVudFJlcXVlc3RDaGlsZFRpbWVvdXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgU2VuZFBhcmVudFJlcXVlc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrUGFyZW50UmVxdWVzdENoaWxkOgorICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudFJlcXVlc3RDaGlsZDsKKworICAgICAgICBpZiAobVBhcmVudENhbmRpZGF0ZS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgU2VuZENoaWxkSWRSZXF1ZXN0KCk7CisgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga0NoaWxkSWRSZXF1ZXN0OworICAgICAgICAgICAgbVBhcmVudFJlcXVlc3RUaW1lci5TdGFydChrUGFyZW50UmVxdWVzdENoaWxkVGltZW91dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBSZXNldFBhcmVudENhbmRpZGF0ZSgpOworCisgICAgICAgICAgICBpZiAobVJlYXR0YWNoU3RhdGUgPT0ga1JlYXR0YWNoQWN0aXZlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLlJlc3RvcmUoKSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5BcHBseUNvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgbVJlYXR0YWNoU3RhdGUgPSBrUmVhdHRhY2hQZW5kaW5nOworICAgICAgICAgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudFJlcXVlc3RTdGFydDsKKyAgICAgICAgICAgICAgICAgICAgbVBhcmVudFJlcXVlc3RUaW1lci5TdGFydChrUGFyZW50UmVxdWVzdFJvdXRlclRpbWVvdXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtUmVhdHRhY2hTdGF0ZSA9IGtSZWF0dGFjaFN0b3A7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobVJlYXR0YWNoU3RhdGUgPT0ga1JlYXR0YWNoUGVuZGluZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVhdHRhY2hTdGF0ZSA9IGtSZWF0dGFjaFN0b3A7CisgICAgICAgICAgICAgICAgbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLlJlc3RvcmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1SZWF0dGFjaFN0YXRlID09IGtSZWF0dGFjaFN0b3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtUGFyZW50UmVxdWVzdE1vZGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Uga0F0dGFjaEFueToKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1QcmV2aW91c1BhbklkICE9IE1hYzo6a1BhbklkQnJvYWRjYXN0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRDaGFubmVsKG1QcmV2aW91c0NoYW5uZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWYuR2V0TWFjKCkuU2V0UGFuSWQobVByZXZpb3VzUGFuSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbVByZXZpb3VzUGFuSWQgPSBNYWM6OmtQYW5JZEJyb2FkY2FzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbmRPcnBoYW5Bbm5vdW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXRpZi5HZXRNbGUoKS5CZWNvbWVMZWFkZXIoKSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudElkbGU7CisgICAgICAgICAgICAgICAgICAgICAgICBCZWNvbWVEZXRhY2hlZCgpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIGtBdHRhY2hTYW1lMToKKyAgICAgICAgICAgICAgICAgICAgbVBhcmVudFJlcXVlc3RTdGF0ZSA9IGtQYXJlbnRJZGxlOworICAgICAgICAgICAgICAgICAgICBCZWNvbWVDaGlsZChrQXR0YWNoU2FtZTIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2Uga0F0dGFjaFNhbWUyOgorICAgICAgICAgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudElkbGU7CisgICAgICAgICAgICAgICAgICAgIEJlY29tZUNoaWxkKGtBdHRhY2hBbnkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2Uga0F0dGFjaEJldHRlcjoKKyAgICAgICAgICAgICAgICAgICAgbVBhcmVudFJlcXVlc3RTdGF0ZSA9IGtQYXJlbnRJZGxlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzdGFydCBrZWVwLWFsaXZlIHRpbWVyIGFzIGl0IHdhcyBkaXN0dXJiZWQgYnkgYXR0YWNobWVudCBwcm9jZWR1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0YXJ0KDApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtDaGlsZElkUmVxdWVzdDoKKyAgICAgICAgbVBhcmVudFJlcXVlc3RTdGF0ZSA9IGtQYXJlbnRJZGxlOworICAgICAgICBSZXNldFBhcmVudENhbmRpZGF0ZSgpOworCisgICAgICAgIGlmICgobVBhcmVudFJlcXVlc3RNb2RlID09IGtBdHRhY2hCZXR0ZXIpIHx8CisgICAgICAgICAgICAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfUk9VVEVSKSB8fAorICAgICAgICAgICAgKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0xFQURFUikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSZXN0YXJ0IGtlZXAtYWxpdmUgdGltZXIgYXMgaXQgd2FzIGRpc3R1cmJlZCBieSBhdHRhY2htZW50IHByb2NlZHVyZS4KKyAgICAgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0YXJ0KDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBNbGU6OkhhbmRsZURlbGF5ZWRSZXNwb25zZVRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVEZWxheWVkUmVzcG9uc2VUaW1lcigpOworfQorCit2b2lkIE1sZTo6SGFuZGxlRGVsYXllZFJlc3BvbnNlVGltZXIodm9pZCkKK3sKKyAgICBEZWxheWVkUmVzcG9uc2VIZWFkZXIgZGVsYXllZFJlc3BvbnNlOworICAgIHVpbnQzMl90IG5vdyA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgdWludDMyX3QgbmV4dERlbGF5ID0gMHhmZmZmZmZmZjsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gbURlbGF5ZWRSZXNwb25zZXMuR2V0SGVhZCgpOworICAgIE1lc3NhZ2UgKm5leHRNZXNzYWdlID0gTlVMTDsKKworICAgIHdoaWxlIChtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBuZXh0TWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKTsKKyAgICAgICAgZGVsYXllZFJlc3BvbnNlLlJlYWRGcm9tKCptZXNzYWdlKTsKKworICAgICAgICBpZiAoZGVsYXllZFJlc3BvbnNlLklzTGF0ZXIobm93KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXh0IGRlbGF5IGFuZCBjaG9vc2UgdGhlIGxvd2VzdC4KKyAgICAgICAgICAgIGlmIChkZWxheWVkUmVzcG9uc2UuR2V0U2VuZFRpbWUoKSAtIG5vdyA8IG5leHREZWxheSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZXh0RGVsYXkgPSBkZWxheWVkUmVzcG9uc2UuR2V0U2VuZFRpbWUoKSAtIG5vdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZWxheWVkUmVzcG9uc2VzLkRlcXVldWUoKm1lc3NhZ2UpOworCisgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIERlbGF5ZWRSZXNwb25zZUhlYWRlciBmcm9tIHRoZSBtZXNzYWdlLgorICAgICAgICAgICAgRGVsYXllZFJlc3BvbnNlSGVhZGVyOjpSZW1vdmVGcm9tKCptZXNzYWdlKTsKKworICAgICAgICAgICAgLy8gU2VuZCB0aGUgbWVzc2FnZS4KKyAgICAgICAgICAgIGlmIChTZW5kTWVzc2FnZSgqbWVzc2FnZSwgZGVsYXllZFJlc3BvbnNlLkdldERlc3RpbmF0aW9uKCkpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IGRlbGF5ZWQgcmVzcG9uc2UiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZXNzYWdlID0gbmV4dE1lc3NhZ2U7CisgICAgfQorCisgICAgaWYgKG5leHREZWxheSAhPSAweGZmZmZmZmZmKQorICAgIHsKKyAgICAgICAgbURlbGF5ZWRSZXNwb25zZVRpbWVyLlN0YXJ0KG5leHREZWxheSk7CisgICAgfQorfQorCitvdEVycm9yIE1sZTo6U2VuZFBhcmVudFJlcXVlc3Qodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIHVpbnQ4X3Qgc2Nhbk1hc2sgPSAwOworICAgIElwNjo6QWRkcmVzcyBkZXN0aW5hdGlvbjsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHNpemVvZihtUGFyZW50UmVxdWVzdC5tQ2hhbGxlbmdlKTsgaSsrKQorICAgIHsKKyAgICAgICAgbVBhcmVudFJlcXVlc3QubUNoYWxsZW5nZVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1QYXJlbnRSZXF1ZXN0U3RhdGUpCisgICAgeworICAgIGNhc2Uga1BhcmVudFJlcXVlc3RSb3V0ZXI6CisgICAgICAgIHNjYW5NYXNrID0gU2Nhbk1hc2tUbHY6OmtSb3V0ZXJGbGFnOworCisgICAgICAgIGlmIChtUGFyZW50UmVxdWVzdE1vZGUgPT0ga0F0dGFjaFNhbWUxIHx8CisgICAgICAgICAgICBtUGFyZW50UmVxdWVzdE1vZGUgPT0ga0F0dGFjaFNhbWUyKQorICAgICAgICB7CisgICAgICAgICAgICBzY2FuTWFzayB8PSBTY2FuTWFza1Rsdjo6a0VuZERldmljZUZsYWc7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga1BhcmVudFJlcXVlc3RDaGlsZDoKKyAgICAgICAgc2Nhbk1hc2sgPSBTY2FuTWFza1Rsdjo6a1JvdXRlckZsYWcgfCBTY2FuTWFza1Rsdjo6a0VuZERldmljZUZsYWc7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmRQYXJlbnRSZXF1ZXN0KSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE1vZGUoKm1lc3NhZ2UsIG1EZXZpY2VNb2RlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZENoYWxsZW5nZSgqbWVzc2FnZSwgbVBhcmVudFJlcXVlc3QubUNoYWxsZW5nZSwgc2l6ZW9mKG1QYXJlbnRSZXF1ZXN0Lm1DaGFsbGVuZ2UpKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFNjYW5NYXNrKCptZXNzYWdlLCBzY2FuTWFzaykpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRWZXJzaW9uKCptZXNzYWdlKSk7CisKKyAgICBtZW1zZXQoJmRlc3RpbmF0aW9uLCAwLCBzaXplb2YoZGVzdGluYXRpb24pKTsKKyAgICBkZXN0aW5hdGlvbi5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZjAyKTsKKyAgICBkZXN0aW5hdGlvbi5tRmllbGRzLm0xNls3XSA9IEhvc3RTd2FwMTYoMHgwMDAyKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGRlc3RpbmF0aW9uKSk7CisKKyAgICBpZiAoKHNjYW5NYXNrICYgU2Nhbk1hc2tUbHY6OmtFbmREZXZpY2VGbGFnKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IHBhcmVudCByZXF1ZXN0IHRvIHJvdXRlcnMiKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IHBhcmVudCByZXF1ZXN0IHRvIGFsbCBkZXZpY2VzIik7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKChzY2FuTWFzayAmIFNjYW5NYXNrVGx2OjprRW5kRGV2aWNlRmxhZykgPT0gMCkKKyAgICB7CisgICAgICAgIG1QYXJlbnRSZXF1ZXN0VGltZXIuU3RhcnQoa1BhcmVudFJlcXVlc3RSb3V0ZXJUaW1lb3V0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVBhcmVudFJlcXVlc3RUaW1lci5TdGFydChrUGFyZW50UmVxdWVzdENoaWxkVGltZW91dCk7CisgICAgfQorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1sZTo6U2VuZENoaWxkSWRSZXF1ZXN0KHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCB0bHZzW10gPSB7VGx2OjprQWRkcmVzczE2LCBUbHY6OmtOZXR3b3JrRGF0YSwgVGx2OjprUm91dGV9OworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgSXA2OjpBZGRyZXNzIGRlc3RpbmF0aW9uOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmRDaGlsZElkUmVxdWVzdCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRSZXNwb25zZSgqbWVzc2FnZSwgbUNoaWxkSWRSZXF1ZXN0Lm1DaGFsbGVuZ2UsIG1DaGlsZElkUmVxdWVzdC5tQ2hhbGxlbmdlTGVuZ3RoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExpbmtGcmFtZUNvdW50ZXIoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTWxlRnJhbWVDb3VudGVyKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE1vZGUoKm1lc3NhZ2UsIG1EZXZpY2VNb2RlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFRpbWVvdXQoKm1lc3NhZ2UsIG1UaW1lb3V0KSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFZlcnNpb24oKm1lc3NhZ2UpKTsKKworICAgIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRBZGRyZXNzUmVnaXN0cmF0aW9uKCptZXNzYWdlKSk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFRsdlJlcXVlc3QoKm1lc3NhZ2UsIHRsdnMsIHNpemVvZih0bHZzKSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRBY3RpdmVUaW1lc3RhbXAoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUGVuZGluZ1RpbWVzdGFtcCgqbWVzc2FnZSkpOworCisgICAgbWVtc2V0KCZkZXN0aW5hdGlvbiwgMCwgc2l6ZW9mKGRlc3RpbmF0aW9uKSk7CisgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmU4MCk7CisgICAgZGVzdGluYXRpb24uU2V0SWlkKG1QYXJlbnRDYW5kaWRhdGUuR2V0RXh0QWRkcmVzcygpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGRlc3RpbmF0aW9uKSk7CisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IENoaWxkIElEIFJlcXVlc3QiKTsKKworICAgIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSkgPT0gMCkKKyAgICB7CisgICAgICAgIEdldE5ldGlmKCkuR2V0TWVzaEZvcndhcmRlcigpLkdldERhdGFQb2xsTWFuYWdlcigpLlNldEF0dGFjaE1vZGUodHJ1ZSk7CisgICAgICAgIEdldE5ldGlmKCkuR2V0TWVzaEZvcndhcmRlcigpLlNldFJ4T25XaGVuSWRsZShmYWxzZSk7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OlNlbmREYXRhUmVxdWVzdChjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFEZWxheSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmREYXRhUmVxdWVzdCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRUbHZSZXF1ZXN0KCptZXNzYWdlLCBhVGx2cywgYVRsdnNMZW5ndGgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQWN0aXZlVGltZXN0YW1wKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFBlbmRpbmdUaW1lc3RhbXAoKm1lc3NhZ2UpKTsKKworICAgIGlmIChhRGVsYXkpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQWRkRGVsYXllZFJlc3BvbnNlKCptZXNzYWdlLCBhRGVzdGluYXRpb24sIGFEZWxheSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGFEZXN0aW5hdGlvbikpOworCisgICAgICAgIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgR2V0TmV0aWYoKS5HZXRNZXNoRm9yd2FyZGVyKCkuR2V0RGF0YVBvbGxNYW5hZ2VyKCkuU2VuZEZhc3RQb2xscyhEYXRhUG9sbE1hbmFnZXI6OmtEZWZhdWx0RmFzdFBvbGxzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiU2VudCBEYXRhIFJlcXVlc3QiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWxlOjpIYW5kbGVTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KFRhc2tsZXQgJmFUYXNrbGV0KQoreworICAgIEdldE93bmVyKGFUYXNrbGV0KS5IYW5kbGVTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KCk7Cit9CisKK3ZvaWQgTWxlOjpIYW5kbGVTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KHZvaWQpCit7CisgICAgLy8gYSBOZXR3b3JrIERhdGEgdXBkYXRlIGNhbiBjYXVzZSBhIGNoYW5nZSB0byB0aGUgSVB2NiBhZGRyZXNzIGNvbmZpZ3VyYXRpb24KKyAgICAvLyBvbmx5IHNlbmQgYSBDaGlsZCBVcGRhdGUgUmVxdWVzdCBhZnRlciB3ZSBrbm93IHRoZXJlIGFyZSBubyBtb3JlIHBlbmRpbmcgY2hhbmdlcworICAgIGlmIChHZXROZXRpZigpLklzU3RhdGVDaGFuZ2VkQ2FsbGJhY2tQZW5kaW5nKCkpCisgICAgeworICAgICAgICBtU2VuZENoaWxkVXBkYXRlUmVxdWVzdC5Qb3N0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QoKTsKKyAgICB9Cit9CisKK290RXJyb3IgTWxlOjpTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJcDY6OkFkZHJlc3MgZGVzdGluYXRpb247CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBpZiAobUNoaWxkVXBkYXRlQXR0ZW1wdHMgPj0ga01heENoaWxkS2VlcEFsaXZlQXR0ZW1wdHMpCisgICAgeworICAgICAgICBtQ2hpbGRVcGRhdGVBdHRlbXB0cyA9IDA7CisgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0YXJ0KGtVbmljYXN0UmV0cmFuc21pc3Npb25EZWxheSk7CisgICAgbUNoaWxkVXBkYXRlQXR0ZW1wdHMrKzsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01sZU1lc3NhZ2UoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBtZXNzYWdlLT5TZXRTdWJUeXBlKE1lc3NhZ2U6OmtTdWJUeXBlTWxlQ2hpbGRVcGRhdGVSZXF1ZXN0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kSGVhZGVyKCptZXNzYWdlLCBIZWFkZXI6OmtDb21tYW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE1vZGUoKm1lc3NhZ2UsIG1EZXZpY2VNb2RlKSk7CisKKyAgICBpZiAoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQWRkcmVzc1JlZ2lzdHJhdGlvbigqbWVzc2FnZSkpOworICAgIH0KKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHNpemVvZihtUGFyZW50UmVxdWVzdC5tQ2hhbGxlbmdlKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtUGFyZW50UmVxdWVzdC5tQ2hhbGxlbmdlW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZENoYWxsZW5nZSgqbWVzc2FnZSwgbVBhcmVudFJlcXVlc3QubUNoYWxsZW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobVBhcmVudFJlcXVlc3QubUNoYWxsZW5nZSkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kU291cmNlQWRkcmVzcygqbWVzc2FnZSkpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGVhZGVyRGF0YSgqbWVzc2FnZSkpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kVGltZW91dCgqbWVzc2FnZSwgbVRpbWVvdXQpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtZW1zZXQoJmRlc3RpbmF0aW9uLCAwLCBzaXplb2YoZGVzdGluYXRpb24pKTsKKyAgICBkZXN0aW5hdGlvbi5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZTgwKTsKKyAgICBkZXN0aW5hdGlvbi5TZXRJaWQobVBhcmVudC5HZXRFeHRBZGRyZXNzKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgZGVzdGluYXRpb24pKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiU2VudCBDaGlsZCBVcGRhdGUgUmVxdWVzdCB0byBwYXJlbnQiKTsKKworICAgIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSkgPT0gMCkKKyAgICB7CisgICAgICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5HZXREYXRhUG9sbE1hbmFnZXIoKS5TZXRBdHRhY2hNb2RlKHRydWUpOworICAgICAgICBuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuU2V0UnhPbldoZW5JZGxlKGZhbHNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLlNldFJ4T25XaGVuSWRsZSh0cnVlKTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6U2VuZENoaWxkVXBkYXRlUmVzcG9uc2UoY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYU51bVRsdnMsIGNvbnN0IENoYWxsZW5nZVRsdiAmYUNoYWxsZW5nZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJcDY6OkFkZHJlc3MgZGVzdGluYXRpb247CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01sZU1lc3NhZ2UoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kSGVhZGVyKCptZXNzYWdlLCBIZWFkZXI6OmtDb21tYW5kQ2hpbGRVcGRhdGVSZXNwb25zZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTb3VyY2VBZGRyZXNzKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExlYWRlckRhdGEoKm1lc3NhZ2UpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYU51bVRsdnM7IGkrKykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYVRsdnNbaV0pCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBUbHY6OmtUaW1lb3V0OgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFRpbWVvdXQoKm1lc3NhZ2UsIG1UaW1lb3V0KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a0FkZHJlc3NSZWdpc3RyYXRpb246CisgICAgICAgICAgICBpZiAoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEFkZHJlc3NSZWdpc3RyYXRpb24oKm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtSZXNwb25zZToKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRSZXNwb25zZSgqbWVzc2FnZSwgYUNoYWxsZW5nZS5HZXRDaGFsbGVuZ2UoKSwgYUNoYWxsZW5nZS5HZXRMZW5ndGgoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtMaW5rRnJhbWVDb3VudGVyOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExpbmtGcmFtZUNvdW50ZXIoKm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVGx2OjprTWxlRnJhbWVDb3VudGVyOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE1sZUZyYW1lQ291bnRlcigqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtZW1zZXQoJmRlc3RpbmF0aW9uLCAwLCBzaXplb2YoZGVzdGluYXRpb24pKTsKKyAgICBkZXN0aW5hdGlvbi5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZTgwKTsKKyAgICBkZXN0aW5hdGlvbi5TZXRJaWQobVBhcmVudC5HZXRFeHRBZGRyZXNzKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgZGVzdGluYXRpb24pKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiU2VudCBDaGlsZCBVcGRhdGUgUmVzcG9uc2UgdG8gcGFyZW50Iik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6U2VuZEFubm91bmNlKHVpbnQ4X3QgYUNoYW5uZWwsIGJvb2wgYU9ycGhhbkFubm91bmNlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ2hhbm5lbFRsdiBjaGFubmVsOworICAgIFBhbklkVGx2IHBhbmlkOworICAgIEFjdGl2ZVRpbWVzdGFtcFRsdiBhY3RpdmVUaW1lc3RhbXA7CisgICAgSXA2OjpBZGRyZXNzIGRlc3RpbmF0aW9uOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNbGVNZXNzYWdlKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgbWVzc2FnZS0+U2V0TGlua1NlY3VyaXR5RW5hYmxlZCh0cnVlKTsKKyAgICBtZXNzYWdlLT5TZXRTdWJUeXBlKE1lc3NhZ2U6OmtTdWJUeXBlTWxlQW5ub3VuY2UpOworICAgIG1lc3NhZ2UtPlNldENoYW5uZWwoYUNoYW5uZWwpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmRBbm5vdW5jZSkpOworCisgICAgY2hhbm5lbC5Jbml0KCk7CisgICAgY2hhbm5lbC5TZXRDaGFubmVsUGFnZSgwKTsKKyAgICBjaGFubmVsLlNldENoYW5uZWwobmV0aWYuR2V0TWFjKCkuR2V0Q2hhbm5lbCgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZjaGFubmVsLCBzaXplb2YoY2hhbm5lbCkpKTsKKworICAgIGlmIChhT3JwaGFuQW5ub3VuY2UpCisgICAgeworICAgICAgICBhY3RpdmVUaW1lc3RhbXAuSW5pdCgpOworICAgICAgICBhY3RpdmVUaW1lc3RhbXAuU2V0U2Vjb25kcygwKTsKKyAgICAgICAgYWN0aXZlVGltZXN0YW1wLlNldFRpY2tzKDApOworICAgICAgICBhY3RpdmVUaW1lc3RhbXAuU2V0QXV0aG9yaXRhdGl2ZSh0cnVlKTsKKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZhY3RpdmVUaW1lc3RhbXAsIHNpemVvZihhY3RpdmVUaW1lc3RhbXApKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRBY3RpdmVUaW1lc3RhbXAoKm1lc3NhZ2UpKTsKKyAgICB9CisKKyAgICBwYW5pZC5Jbml0KCk7CisgICAgcGFuaWQuU2V0UGFuSWQobmV0aWYuR2V0TWFjKCkuR2V0UGFuSWQoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmcGFuaWQsIHNpemVvZihwYW5pZCkpKTsKKworICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZmMDIpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNigweDAwMDEpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgZGVzdGluYXRpb24pKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAic2VudCBhbm5vdW5jZSBvbiBjaGFubmVsICVkIiwgYUNoYW5uZWwpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBNbGU6OlNlbmRPcnBoYW5Bbm5vdW5jZSh2b2lkKQoreworICAgIGNvbnN0IE1lc2hDb1A6OkNoYW5uZWxNYXNrMFRsdiAqY2hhbm5lbE1hc2s7CisgICAgdWludDhfdCBjaGFubmVsOworCisgICAgY2hhbm5lbE1hc2sgPSBzdGF0aWNfY2FzdDxjb25zdCBNZXNoQ29QOjpDaGFubmVsTWFzazBUbHYgKj4oR2V0TmV0aWYoKS5HZXRBY3RpdmVEYXRhc2V0KCkuR2V0VGx2KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNoQ29QOjpUbHY6OmtDaGFubmVsTWFzaykpOworCisgICAgVmVyaWZ5T3JFeGl0KGNoYW5uZWxNYXNrICE9IE5VTEwpOworCisgICAgLy8gZmluZCBuZXh0IGNoYW5uZWwgaW4gdGhlIEFjdGl2ZSBPcGVyYXRpb25hbCBEYXRhc2V0IENoYW5uZWwgTWFzaworICAgIGNoYW5uZWwgPSBtQW5ub3VuY2VDaGFubmVsOworCisgICAgd2hpbGUgKCFjaGFubmVsTWFzay0+SXNDaGFubmVsU2V0KGNoYW5uZWwpKQorICAgIHsKKyAgICAgICAgY2hhbm5lbCsrOworCisgICAgICAgIGlmIChjaGFubmVsID4gT1RfUkFESU9fQ0hBTk5FTF9NQVgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYW5uZWwgPSBPVF9SQURJT19DSEFOTkVMX01JTjsKKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeU9yRXhpdChjaGFubmVsICE9IG1Bbm5vdW5jZUNoYW5uZWwpOworICAgIH0KKworICAgIC8vIFNlbmQgQW5ub3VuY2UgbWVzc2FnZQorICAgIFNlbmRBbm5vdW5jZShjaGFubmVsLCB0cnVlKTsKKworICAgIC8vIE1vdmUgdG8gbmV4dCBjaGFubmVsCisgICAgbUFubm91bmNlQ2hhbm5lbCA9IGNoYW5uZWwgKyAxOworCisgICAgaWYgKG1Bbm5vdW5jZUNoYW5uZWwgPiBPVF9SQURJT19DSEFOTkVMX01BWCkKKyAgICB7CisgICAgICAgIG1Bbm5vdW5jZUNoYW5uZWwgPSBPVF9SQURJT19DSEFOTkVMX01JTjsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitvdEVycm9yIE1sZTo6U2VuZE1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSGVhZGVyIGhlYWRlcjsKKyAgICB1aW50MzJfdCBrZXlTZXF1ZW5jZTsKKyAgICB1aW50OF90IG5vbmNlWzEzXTsKKyAgICB1aW50OF90IHRhZ1s0XTsKKyAgICB1aW50OF90IHRhZ0xlbmd0aDsKKyAgICBDcnlwdG86OkFlc0NjbSBhZXNDY207CisgICAgdWludDhfdCBidWZbNjRdOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgYU1lc3NhZ2UuUmVhZCgwLCBzaXplb2YoaGVhZGVyKSwgJmhlYWRlcik7CisKKyAgICBpZiAoaGVhZGVyLkdldFNlY3VyaXR5U3VpdGUoKSA9PSBIZWFkZXI6OmsxNTRTZWN1cml0eSkKKyAgICB7CisgICAgICAgIGhlYWRlci5TZXRGcmFtZUNvdW50ZXIobmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldE1sZUZyYW1lQ291bnRlcigpKTsKKworICAgICAgICBrZXlTZXF1ZW5jZSA9IG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRDdXJyZW50S2V5U2VxdWVuY2UoKTsKKyAgICAgICAgaGVhZGVyLlNldEtleUlkKGtleVNlcXVlbmNlKTsKKworICAgICAgICBhTWVzc2FnZS5Xcml0ZSgwLCBoZWFkZXIuR2V0TGVuZ3RoKCksICZoZWFkZXIpOworCisgICAgICAgIEdlbmVyYXRlTm9uY2UoKm5ldGlmLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0TWxlRnJhbWVDb3VudGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgTWFjOjpGcmFtZTo6a1NlY0VuY01pYzMyLAorICAgICAgICAgICAgICAgICAgICAgIG5vbmNlKTsKKworICAgICAgICBhZXNDY20uU2V0S2V5KG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRDdXJyZW50TWxlS2V5KCksIDE2KTsKKyAgICAgICAgYWVzQ2NtLkluaXQoMTYgKyAxNiArIGhlYWRlci5HZXRIZWFkZXJMZW5ndGgoKSwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSAoaGVhZGVyLkdldExlbmd0aCgpIC0gMSksCisgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWcpLCBub25jZSwgc2l6ZW9mKG5vbmNlKSk7CisKKyAgICAgICAgYWVzQ2NtLkhlYWRlcigmbUxpbmtMb2NhbDY0LkdldEFkZHJlc3MoKSwgc2l6ZW9mKG1MaW5rTG9jYWw2NC5HZXRBZGRyZXNzKCkpKTsKKyAgICAgICAgYWVzQ2NtLkhlYWRlcigmYURlc3RpbmF0aW9uLCBzaXplb2YoYURlc3RpbmF0aW9uKSk7CisgICAgICAgIGFlc0NjbS5IZWFkZXIoaGVhZGVyLkdldEJ5dGVzKCkgKyAxLCBoZWFkZXIuR2V0SGVhZGVyTGVuZ3RoKCkpOworCisgICAgICAgIGFNZXNzYWdlLlNldE9mZnNldChoZWFkZXIuR2V0TGVuZ3RoKCkgLSAxKTsKKworICAgICAgICB3aGlsZSAoYU1lc3NhZ2UuR2V0T2Zmc2V0KCkgPCBhTWVzc2FnZS5HZXRMZW5ndGgoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbGVuZ3RoID0gYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKGJ1ZiksIGJ1Zik7CisgICAgICAgICAgICBhZXNDY20uUGF5bG9hZChidWYsIGJ1ZiwgbGVuZ3RoLCB0cnVlKTsKKyAgICAgICAgICAgIGFNZXNzYWdlLldyaXRlKGFNZXNzYWdlLkdldE9mZnNldCgpLCBsZW5ndGgsIGJ1Zik7CisgICAgICAgICAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KGxlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICB0YWdMZW5ndGggPSBzaXplb2YodGFnKTsKKyAgICAgICAgYWVzQ2NtLkZpbmFsaXplKHRhZywgJnRhZ0xlbmd0aCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQodGFnLCB0YWdMZW5ndGgpKTsKKworICAgICAgICBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuSW5jcmVtZW50TWxlRnJhbWVDb3VudGVyKCk7CisgICAgfQorCisgICAgbWVzc2FnZUluZm8uU2V0UGVlckFkZHIoYURlc3RpbmF0aW9uKTsKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihtTGlua0xvY2FsNjQuR2V0QWRkcmVzcygpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrVWRwUG9ydCk7CisgICAgbWVzc2FnZUluZm8uU2V0SW50ZXJmYWNlSWQobmV0aWYuR2V0SW50ZXJmYWNlSWQoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0SG9wTGltaXQoMjU1KTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtU29ja2V0LlNlbmRUbyhhTWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpBZGREZWxheWVkUmVzcG9uc2UoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uLCB1aW50MTZfdCBhRGVsYXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDMyX3QgYWxhcm1GaXJlVGltZTsKKyAgICB1aW50MzJfdCBzZW5kVGltZSA9IG90UGxhdEFsYXJtR2V0Tm93KCkgKyBhRGVsYXk7CisKKyAgICAvLyBBcHBlbmQgdGhlIG1lc3NhZ2Ugd2l0aCBEZWxheWVkUmVzcG5vc2VIZWFkZXIgYW5kIGFkZCB0byB0aGUgbGlzdC4KKyAgICBEZWxheWVkUmVzcG9uc2VIZWFkZXIgZGVsYXllZFJlc3BvbnNlKHNlbmRUaW1lLCBhRGVzdGluYXRpb24pOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBkZWxheWVkUmVzcG9uc2UuQXBwZW5kVG8oYU1lc3NhZ2UpKTsKKyAgICBtRGVsYXllZFJlc3BvbnNlcy5FbnF1ZXVlKGFNZXNzYWdlKTsKKworICAgIGlmIChtRGVsYXllZFJlc3BvbnNlVGltZXIuSXNSdW5uaW5nKCkpCisgICAgeworICAgICAgICAvLyBJZiB0aW1lciBpcyBhbHJlYWR5IHJ1bm5pbmcsIGNoZWNrIGlmIGl0IHNob3VsZCBiZSByZXN0YXJ0ZWQgd2l0aCBlYXJsaWVyIGZpcmUgdGltZS4KKyAgICAgICAgYWxhcm1GaXJlVGltZSA9IG1EZWxheWVkUmVzcG9uc2VUaW1lci5HZXRGaXJlVGltZSgpOworCisgICAgICAgIGlmIChkZWxheWVkUmVzcG9uc2UuSXNFYXJsaWVyKGFsYXJtRmlyZVRpbWUpKQorICAgICAgICB7CisgICAgICAgICAgICBtRGVsYXllZFJlc3BvbnNlVGltZXIuU3RhcnQoYURlbGF5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBPdGhlcndpc2UganVzdCBzZXQgdGhlIHRpbWVyLgorICAgICAgICBtRGVsYXllZFJlc3BvbnNlVGltZXIuU3RhcnQoYURlbGF5KTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1sZTo6SGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PE1sZSAqPihhQ29udGV4dCktPkhhbmRsZVVkcFJlY2VpdmUoKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgTWxlOjpIYW5kbGVVZHBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBNbGVSb3V0ZXIgJm1sZSA9IG5ldGlmLkdldE1sZSgpOworICAgIEhlYWRlciBoZWFkZXI7CisgICAgdWludDMyX3Qga2V5U2VxdWVuY2U7CisgICAgY29uc3QgdWludDhfdCAqbWxlS2V5OworICAgIHVpbnQzMl90IGZyYW1lQ291bnRlcjsKKyAgICB1aW50OF90IG1lc3NhZ2VUYWdbNF07CisgICAgdWludDE2X3QgbWVzc2FnZVRhZ0xlbmd0aDsKKyAgICB1aW50OF90IG5vbmNlWzEzXTsKKyAgICBNYWM6OkV4dEFkZHJlc3MgbWFjQWRkcjsKKyAgICBDcnlwdG86OkFlc0NjbSBhZXNDY207CisgICAgdWludDE2X3QgbWxlT2Zmc2V0OworICAgIHVpbnQ4X3QgYnVmWzY0XTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDhfdCB0YWdbNF07CisgICAgdWludDhfdCB0YWdMZW5ndGg7CisgICAgdWludDhfdCBjb21tYW5kOworICAgIE5laWdoYm9yICpuZWlnaGJvcjsKKworICAgIGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihoZWFkZXIpLCAmaGVhZGVyKTsKKyAgICBWZXJpZnlPckV4aXQoaGVhZGVyLklzVmFsaWQoKSk7CisKKyAgICBhc3NlcnQoYU1lc3NhZ2VJbmZvLkdldExpbmtJbmZvKCkgIT0gTlVMTCk7CisKKyAgICBpZiAoaGVhZGVyLkdldFNlY3VyaXR5U3VpdGUoKSA9PSBIZWFkZXI6OmtOb1NlY3VyaXR5KQorICAgIHsKKyAgICAgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChoZWFkZXIuR2V0TGVuZ3RoKCkpOworCisgICAgICAgIHN3aXRjaCAoaGVhZGVyLkdldENvbW1hbmQoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIEhlYWRlcjo6a0NvbW1hbmREaXNjb3ZlcnlSZXF1ZXN0OgorICAgICAgICAgICAgbWxlLkhhbmRsZURpc2NvdmVyeVJlcXVlc3QoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhlYWRlcjo6a0NvbW1hbmREaXNjb3ZlcnlSZXNwb25zZToKKyAgICAgICAgICAgIEhhbmRsZURpc2NvdmVyeVJlc3BvbnNlKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCAmJiBoZWFkZXIuR2V0U2VjdXJpdHlTdWl0ZSgpID09IEhlYWRlcjo6azE1NFNlY3VyaXR5KTsKKworICAgIGtleVNlcXVlbmNlID0gaGVhZGVyLkdldEtleUlkKCk7CisKKyAgICBpZiAoa2V5U2VxdWVuY2UgPT0gbmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpKQorICAgIHsKKyAgICAgICAgbWxlS2V5ID0gbmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldEN1cnJlbnRNbGVLZXkoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWxlS2V5ID0gbmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldFRlbXBvcmFyeU1sZUtleShrZXlTZXF1ZW5jZSk7CisgICAgfQorCisgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChoZWFkZXIuR2V0TGVuZ3RoKCkgLSAxKTsKKworICAgIGZyYW1lQ291bnRlciA9IGhlYWRlci5HZXRGcmFtZUNvdW50ZXIoKTsKKworICAgIG1lc3NhZ2VUYWdMZW5ndGggPSBhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldExlbmd0aCgpIC0gc2l6ZW9mKG1lc3NhZ2VUYWcpLCBzaXplb2YobWVzc2FnZVRhZyksIG1lc3NhZ2VUYWcpOworICAgIFZlcmlmeU9yRXhpdChtZXNzYWdlVGFnTGVuZ3RoID09IHNpemVvZihtZXNzYWdlVGFnKSk7CisgICAgU3VjY2Vzc09yRXhpdChhTWVzc2FnZS5TZXRMZW5ndGgoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YobWVzc2FnZVRhZykpKTsKKworICAgIG1hY0FkZHIuU2V0KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKyAgICBHZW5lcmF0ZU5vbmNlKG1hY0FkZHIsIGZyYW1lQ291bnRlciwgTWFjOjpGcmFtZTo6a1NlY0VuY01pYzMyLCBub25jZSk7CisKKyAgICBhZXNDY20uU2V0S2V5KG1sZUtleSwgMTYpOworICAgIGFlc0NjbS5Jbml0KHNpemVvZihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSkgKyBzaXplb2YoYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkpICsgaGVhZGVyLkdldEhlYWRlckxlbmd0aCgpLAorICAgICAgICAgICAgICAgIGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihtZXNzYWdlVGFnKSwgbm9uY2UsIHNpemVvZihub25jZSkpOworICAgIGFlc0NjbS5IZWFkZXIoJmFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLCBzaXplb2YoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpKTsKKyAgICBhZXNDY20uSGVhZGVyKCZhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKSwgc2l6ZW9mKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpKSk7CisgICAgYWVzQ2NtLkhlYWRlcihoZWFkZXIuR2V0Qnl0ZXMoKSArIDEsIGhlYWRlci5HZXRIZWFkZXJMZW5ndGgoKSk7CisKKyAgICBtbGVPZmZzZXQgPSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKworICAgIHdoaWxlIChhTWVzc2FnZS5HZXRPZmZzZXQoKSA8IGFNZXNzYWdlLkdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgbGVuZ3RoID0gYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKGJ1ZiksIGJ1Zik7CisgICAgICAgIGFlc0NjbS5QYXlsb2FkKGJ1ZiwgYnVmLCBsZW5ndGgsIGZhbHNlKTsKKyAgICAgICAgYU1lc3NhZ2UuV3JpdGUoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIGxlbmd0aCwgYnVmKTsKKyAgICAgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChsZW5ndGgpOworICAgIH0KKworICAgIHRhZ0xlbmd0aCA9IHNpemVvZih0YWcpOworICAgIGFlc0NjbS5GaW5hbGl6ZSh0YWcsICZ0YWdMZW5ndGgpOworICAgIFZlcmlmeU9yRXhpdChtZXNzYWdlVGFnTGVuZ3RoID09IHRhZ0xlbmd0aCAmJiBtZW1jbXAobWVzc2FnZVRhZywgdGFnLCB0YWdMZW5ndGgpID09IDApOworCisgICAgaWYgKGtleVNlcXVlbmNlID4gbmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpKQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldEN1cnJlbnRLZXlTZXF1ZW5jZShrZXlTZXF1ZW5jZSk7CisgICAgfQorCisgICAgYU1lc3NhZ2UuU2V0T2Zmc2V0KG1sZU9mZnNldCk7CisKKyAgICBhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoY29tbWFuZCksICZjb21tYW5kKTsKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KHNpemVvZihjb21tYW5kKSk7CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIG5laWdoYm9yID0gR2V0TmVpZ2hib3IobWFjQWRkcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisgICAgICAgIGlmIChjb21tYW5kID09IEhlYWRlcjo6a0NvbW1hbmRDaGlsZElkUmVzcG9uc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5laWdoYm9yID0gR2V0TmVpZ2hib3IobWFjQWRkcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBuZWlnaGJvciA9IG1sZS5HZXROZWlnaGJvcihtYWNBZGRyKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgbmVpZ2hib3IgPSBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobmVpZ2hib3IgIT0gTlVMTCAmJiBuZWlnaGJvci0+R2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgeworICAgICAgICBpZiAoa2V5U2VxdWVuY2UgPT0gbmVpZ2hib3ItPkdldEtleVNlcXVlbmNlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmcmFtZUNvdW50ZXIgPCBuZWlnaGJvci0+R2V0TWxlRnJhbWVDb3VudGVyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RMb2dEZWJnTWxlKEdldEluc3RhbmNlKCksICJtbGUgZnJhbWUgcmVqZWN0IDEiKTsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoa2V5U2VxdWVuY2UgPD0gbmVpZ2hib3ItPkdldEtleVNlcXVlbmNlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RMb2dEZWJnTWxlKEdldEluc3RhbmNlKCksICJtbGUgZnJhbWUgcmVqZWN0IDIiKTsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5laWdoYm9yLT5TZXRLZXlTZXF1ZW5jZShrZXlTZXF1ZW5jZSk7CisgICAgICAgICAgICBuZWlnaGJvci0+U2V0TGlua0ZyYW1lQ291bnRlcigwKTsKKyAgICAgICAgfQorCisgICAgICAgIG5laWdoYm9yLT5TZXRNbGVGcmFtZUNvdW50ZXIoZnJhbWVDb3VudGVyICsgMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICghKGNvbW1hbmQgPT0gSGVhZGVyOjprQ29tbWFuZExpbmtSZXF1ZXN0IHx8CisgICAgICAgICAgICAgIGNvbW1hbmQgPT0gSGVhZGVyOjprQ29tbWFuZExpbmtBY2NlcHQgfHwKKyAgICAgICAgICAgICAgY29tbWFuZCA9PSBIZWFkZXI6OmtDb21tYW5kTGlua0FjY2VwdEFuZFJlcXVlc3QgfHwKKyAgICAgICAgICAgICAgY29tbWFuZCA9PSBIZWFkZXI6OmtDb21tYW5kQWR2ZXJ0aXNlbWVudCB8fAorICAgICAgICAgICAgICBjb21tYW5kID09IEhlYWRlcjo6a0NvbW1hbmRQYXJlbnRSZXF1ZXN0IHx8CisgICAgICAgICAgICAgIGNvbW1hbmQgPT0gSGVhZGVyOjprQ29tbWFuZFBhcmVudFJlc3BvbnNlIHx8CisgICAgICAgICAgICAgIGNvbW1hbmQgPT0gSGVhZGVyOjprQ29tbWFuZENoaWxkSWRSZXF1ZXN0IHx8CisgICAgICAgICAgICAgIGNvbW1hbmQgPT0gSGVhZGVyOjprQ29tbWFuZENoaWxkVXBkYXRlUmVxdWVzdCB8fAorICAgICAgICAgICAgICBjb21tYW5kID09IEhlYWRlcjo6a0NvbW1hbmRDaGlsZFVwZGF0ZVJlc3BvbnNlIHx8CisgICAgICAgICAgICAgIGNvbW1hbmQgPT0gSGVhZGVyOjprQ29tbWFuZEFubm91bmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMb2dEZWJnTWxlKEdldEluc3RhbmNlKCksICJtbGUgc2VxdWVuY2UgdW5rbm93biEgJWQiLCBjb21tYW5kKTsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoY29tbWFuZCkKKyAgICB7CisgICAgY2FzZSBIZWFkZXI6OmtDb21tYW5kTGlua1JlcXVlc3Q6CisgICAgICAgIG1sZS5IYW5kbGVMaW5rUmVxdWVzdChhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhlYWRlcjo6a0NvbW1hbmRMaW5rQWNjZXB0OgorICAgICAgICBtbGUuSGFuZGxlTGlua0FjY2VwdChhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBrZXlTZXF1ZW5jZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIZWFkZXI6OmtDb21tYW5kTGlua0FjY2VwdEFuZFJlcXVlc3Q6CisgICAgICAgIG1sZS5IYW5kbGVMaW5rQWNjZXB0QW5kUmVxdWVzdChhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBrZXlTZXF1ZW5jZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIZWFkZXI6OmtDb21tYW5kQWR2ZXJ0aXNlbWVudDoKKyAgICAgICAgSGFuZGxlQWR2ZXJ0aXNlbWVudChhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhlYWRlcjo6a0NvbW1hbmREYXRhUmVxdWVzdDoKKyAgICAgICAgbWxlLkhhbmRsZURhdGFSZXF1ZXN0KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGVhZGVyOjprQ29tbWFuZERhdGFSZXNwb25zZToKKyAgICAgICAgSGFuZGxlRGF0YVJlc3BvbnNlKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGVhZGVyOjprQ29tbWFuZFBhcmVudFJlcXVlc3Q6CisgICAgICAgIG1sZS5IYW5kbGVQYXJlbnRSZXF1ZXN0KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGVhZGVyOjprQ29tbWFuZFBhcmVudFJlc3BvbnNlOgorICAgICAgICBIYW5kbGVQYXJlbnRSZXNwb25zZShhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBrZXlTZXF1ZW5jZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIZWFkZXI6OmtDb21tYW5kQ2hpbGRJZFJlcXVlc3Q6CisgICAgICAgIG1sZS5IYW5kbGVDaGlsZElkUmVxdWVzdChhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBrZXlTZXF1ZW5jZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIZWFkZXI6OmtDb21tYW5kQ2hpbGRJZFJlc3BvbnNlOgorICAgICAgICBIYW5kbGVDaGlsZElkUmVzcG9uc2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIZWFkZXI6OmtDb21tYW5kQ2hpbGRVcGRhdGVSZXF1ZXN0OgorICAgICAgICBpZiAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSIHx8IG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX1JPVVRFUikKKyAgICAgICAgeworICAgICAgICAgICAgbWxlLkhhbmRsZUNoaWxkVXBkYXRlUmVxdWVzdChhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBrZXlTZXF1ZW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBIYW5kbGVDaGlsZFVwZGF0ZVJlcXVlc3QoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGVhZGVyOjprQ29tbWFuZENoaWxkVXBkYXRlUmVzcG9uc2U6CisgICAgICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIgfHwgbVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfUk9VVEVSKQorICAgICAgICB7CisgICAgICAgICAgICBtbGUuSGFuZGxlQ2hpbGRVcGRhdGVSZXNwb25zZShhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBrZXlTZXF1ZW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBIYW5kbGVDaGlsZFVwZGF0ZVJlc3BvbnNlKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhlYWRlcjo6a0NvbW1hbmRBbm5vdW5jZToKKyAgICAgICAgSGFuZGxlQW5ub3VuY2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3IgTWxlOjpIYW5kbGVBZHZlcnRpc2VtZW50KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNYWM6OkV4dEFkZHJlc3MgbWFjQWRkcjsKKyAgICBib29sIGlzTmVpZ2hib3I7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yOworICAgIFNvdXJjZUFkZHJlc3NUbHYgc291cmNlQWRkcmVzczsKKyAgICBMZWFkZXJEYXRhVGx2IGxlYWRlckRhdGE7CisgICAgUm91dGVUbHYgcm91dGU7CisgICAgdWludDhfdCB0bHZzW10gPSB7VGx2OjprTmV0d29ya0RhdGF9OworICAgIHVpbnQxNl90IGRlbGF5OworCisgICAgLy8gU291cmNlIEFkZHJlc3MKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1NvdXJjZUFkZHJlc3MsIHNpemVvZihzb3VyY2VBZGRyZXNzKSwgc291cmNlQWRkcmVzcykpOworICAgIFZlcmlmeU9yRXhpdChzb3VyY2VBZGRyZXNzLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBMZWFkZXIgRGF0YQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGVhZGVyRGF0YSwgc2l6ZW9mKGxlYWRlckRhdGEpLCBsZWFkZXJEYXRhKSk7CisgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgYWR2ZXJ0aXNlbWVudCBmcm9tICUwNHgiLCBzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpKTsKKworICAgIGlmIChtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRNbGUoKS5IYW5kbGVBZHZlcnRpc2VtZW50KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pKTsKKyAgICB9CisKKyAgICBtYWNBZGRyLlNldChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisKKyAgICBpc05laWdoYm9yID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgaWYgKG1lbWNtcCgmbVBhcmVudC5HZXRFeHRBZGRyZXNzKCksICZtYWNBZGRyLCBzaXplb2YobWFjQWRkcikpKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgobVBhcmVudC5HZXRSbG9jMTYoKSA9PSBzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpKSAmJgorICAgICAgICAgICAgKGxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSAhPSBtTGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpIHx8CisgICAgICAgICAgICAgbGVhZGVyRGF0YS5HZXRMZWFkZXJSb3V0ZXJJZCgpICE9IEdldExlYWRlcklkKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBTZXRMZWFkZXJEYXRhKGxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSwgbGVhZGVyRGF0YS5HZXRXZWlnaHRpbmcoKSwgbGVhZGVyRGF0YS5HZXRMZWFkZXJSb3V0ZXJJZCgpKTsKKworICAgICAgICAgICAgaWYgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKSAmJgorICAgICAgICAgICAgICAgIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprUm91dGUsIHNpemVvZihyb3V0ZSksIHJvdXRlKSA9PSBPVF9FUlJPUl9OT05FKSAmJgorICAgICAgICAgICAgICAgIHJvdXRlLklzVmFsaWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBPdmVyd3JpdGUgUm91dGUgRGF0YQorICAgICAgICAgICAgICAgIG5ldGlmLkdldE1sZSgpLlByb2Nlc3NSb3V0ZVRsdihyb3V0ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1SZXRyaWV2ZU5ld05ldHdvcmtEYXRhID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlzTmVpZ2hib3IgPSB0cnVlOworICAgICAgICBtUGFyZW50LlNldExhc3RIZWFyZChUaW1lcjo6R2V0Tm93KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBpZiAoKG5laWdoYm9yID0gbmV0aWYuR2V0TWxlKCkuR2V0TmVpZ2hib3IobWFjQWRkcikpICE9IE5VTEwgJiYKKyAgICAgICAgICAgIG5laWdoYm9yLT5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaXNOZWlnaGJvciA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaXNOZWlnaGJvcikKKyAgICB7CisgICAgICAgIGlmIChtUmV0cmlldmVOZXdOZXR3b3JrRGF0YSB8fAorICAgICAgICAgICAgKHN0YXRpY19jYXN0PGludDhfdD4obGVhZGVyRGF0YS5HZXREYXRhVmVyc2lvbigpIC0gbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRWZXJzaW9uKCkpID4gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGF5ID0gb3RQbGF0UmFuZG9tR2V0KCkgJSBrTWxlTWF4UmVzcG9uc2VEZWxheTsKKyAgICAgICAgICAgIFNlbmREYXRhUmVxdWVzdChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSwgdGx2cywgc2l6ZW9mKHRsdnMpLCBkZWxheSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nV2Fybk1sZUVycihHZXRJbnN0YW5jZSgpLCBlcnJvciwgIkZhaWxlZCB0byBwcm9jZXNzIEFkdmVydGlzZW1lbnQiKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpIYW5kbGVEYXRhUmVzcG9uc2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBEYXRhIFJlc3BvbnNlIik7CisKKyAgICBlcnJvciA9IEhhbmRsZUxlYWRlckRhdGEoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nV2Fybk1sZUVycihHZXRJbnN0YW5jZSgpLCBlcnJvciwgIkZhaWxlZCB0byBwcm9jZXNzIERhdGEgUmVzcG9uc2UiKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpIYW5kbGVMZWFkZXJEYXRhKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBMZWFkZXJEYXRhVGx2IGxlYWRlckRhdGE7CisgICAgTmV0d29ya0RhdGFUbHYgbmV0d29ya0RhdGE7CisgICAgQWN0aXZlVGltZXN0YW1wVGx2IGFjdGl2ZVRpbWVzdGFtcDsKKyAgICBQZW5kaW5nVGltZXN0YW1wVGx2IHBlbmRpbmdUaW1lc3RhbXA7CisgICAgdWludDE2X3QgYWN0aXZlRGF0YXNldE9mZnNldCA9IDA7CisgICAgdWludDE2X3QgcGVuZGluZ0RhdGFzZXRPZmZzZXQgPSAwOworICAgIGJvb2wgZGF0YVJlcXVlc3QgPSBmYWxzZTsKKyAgICBUbHYgdGx2OworICAgIHVpbnQxNl90IGRlbGF5OworCisgICAgLy8gTGVhZGVyIERhdGEKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xlYWRlckRhdGEsIHNpemVvZihsZWFkZXJEYXRhKSwgbGVhZGVyRGF0YSkpOworICAgIFZlcmlmeU9yRXhpdChsZWFkZXJEYXRhLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoKGxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSAhPSBtTGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpKSB8fAorICAgICAgICAobGVhZGVyRGF0YS5HZXRXZWlnaHRpbmcoKSAhPSBtTGVhZGVyRGF0YS5HZXRXZWlnaHRpbmcoKSkgfHwKKyAgICAgICAgKGxlYWRlckRhdGEuR2V0TGVhZGVyUm91dGVySWQoKSAhPSBHZXRMZWFkZXJJZCgpKSkKKyAgICB7CisgICAgICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCkKKyAgICAgICAgeworICAgICAgICAgICAgU2V0TGVhZGVyRGF0YShsZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCksIGxlYWRlckRhdGEuR2V0V2VpZ2h0aW5nKCksIGxlYWRlckRhdGEuR2V0TGVhZGVyUm91dGVySWQoKSk7CisgICAgICAgICAgICBtUmV0cmlldmVOZXdOZXR3b3JrRGF0YSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIW1SZXRyaWV2ZU5ld05ldHdvcmtEYXRhKQorICAgIHsKKyAgICAgICAgaW50OF90IGRpZmY7CisKKyAgICAgICAgaWYgKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGdWxsTmV0d29ya0RhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpZmYgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGxlYWRlckRhdGEuR2V0RGF0YVZlcnNpb24oKSAtIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0VmVyc2lvbigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpZmYgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGxlYWRlckRhdGEuR2V0U3RhYmxlRGF0YVZlcnNpb24oKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldFN0YWJsZVZlcnNpb24oKSk7CisgICAgICAgIH0KKworICAgICAgICBWZXJpZnlPckV4aXQoZGlmZiA+IDApOworICAgIH0KKworICAgIC8vIEFjdGl2ZSBUaW1lc3RhbXAKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCwgc2l6ZW9mKGFjdGl2ZVRpbWVzdGFtcCksIGFjdGl2ZVRpbWVzdGFtcCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGNvbnN0IE1lc2hDb1A6OlRpbWVzdGFtcCAqdGltZXN0YW1wOworCisgICAgICAgIFZlcmlmeU9yRXhpdChhY3RpdmVUaW1lc3RhbXAuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgdGltZXN0YW1wID0gbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldFRpbWVzdGFtcCgpOworCisgICAgICAgIC8vIGlmIHJlY2VpdmVkIHRpbWVzdGFtcCBkb2VzIG5vdCBtYXRjaCB0aGUgbG9jYWwgdmFsdWUgYW5kIG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiB0aGUgZGF0YXNldCwKKyAgICAgICAgLy8gc2VuZCBNTEUgRGF0YSBSZXF1ZXN0CisgICAgICAgIGlmICgodGltZXN0YW1wID09IE5VTEwgfHwgdGltZXN0YW1wLT5Db21wYXJlKGFjdGl2ZVRpbWVzdGFtcCkgIT0gMCkgJiYKKyAgICAgICAgICAgIChUbHY6OkdldE9mZnNldChhTWVzc2FnZSwgVGx2OjprQWN0aXZlRGF0YXNldCwgYWN0aXZlRGF0YXNldE9mZnNldCkgIT0gT1RfRVJST1JfTk9ORSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZGF0YVJlcXVlc3QgPSB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGFSZXF1ZXN0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhY3RpdmVUaW1lc3RhbXAuU2V0TGVuZ3RoKDApOworICAgIH0KKworICAgIC8vIFBlbmRpbmcgVGltZXN0YW1wCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtQZW5kaW5nVGltZXN0YW1wLCBzaXplb2YocGVuZGluZ1RpbWVzdGFtcCksIHBlbmRpbmdUaW1lc3RhbXApID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBjb25zdCBNZXNoQ29QOjpUaW1lc3RhbXAgKnRpbWVzdGFtcDsKKworICAgICAgICBWZXJpZnlPckV4aXQocGVuZGluZ1RpbWVzdGFtcC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB0aW1lc3RhbXAgPSBuZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkdldFRpbWVzdGFtcCgpOworCisgICAgICAgIC8vIGlmIHJlY2VpdmVkIHRpbWVzdGFtcCBkb2VzIG5vdCBtYXRjaCB0aGUgbG9jYWwgdmFsdWUgYW5kIG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiB0aGUgZGF0YXNldCwKKyAgICAgICAgLy8gc2VuZCBNTEUgRGF0YSBSZXF1ZXN0CisgICAgICAgIGlmICgodGltZXN0YW1wID09IE5VTEwgfHwgdGltZXN0YW1wLT5Db21wYXJlKHBlbmRpbmdUaW1lc3RhbXApICE9IDApICYmCisgICAgICAgICAgICAoVGx2OjpHZXRPZmZzZXQoYU1lc3NhZ2UsIFRsdjo6a1BlbmRpbmdEYXRhc2V0LCBwZW5kaW5nRGF0YXNldE9mZnNldCkgIT0gT1RfRVJST1JfTk9ORSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZGF0YVJlcXVlc3QgPSB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGFSZXF1ZXN0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwZW5kaW5nVGltZXN0YW1wLlNldExlbmd0aCgwKTsKKyAgICB9CisKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a05ldHdvcmtEYXRhLCBzaXplb2YobmV0d29ya0RhdGEpLCBuZXR3b3JrRGF0YSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChuZXR3b3JrRGF0YS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuU2V0TmV0d29ya0RhdGEobGVhZGVyRGF0YS5HZXREYXRhVmVyc2lvbigpLCBsZWFkZXJEYXRhLkdldFN0YWJsZURhdGFWZXJzaW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGdWxsTmV0d29ya0RhdGEpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya0RhdGEuR2V0TmV0d29ya0RhdGEoKSwgbmV0d29ya0RhdGEuR2V0TGVuZ3RoKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFeGl0Tm93KGRhdGFSZXF1ZXN0ID0gdHJ1ZSk7CisgICAgfQorCisgICAgLy8gQWN0aXZlIERhdGFzZXQKKyAgICBpZiAoYWN0aXZlVGltZXN0YW1wLkdldExlbmd0aCgpID4gMCkKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVEYXRhc2V0T2Zmc2V0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChhY3RpdmVEYXRhc2V0T2Zmc2V0LCBzaXplb2YodGx2KSwgJnRsdik7CisgICAgICAgICAgICBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuU2V0KGFjdGl2ZVRpbWVzdGFtcCwgYU1lc3NhZ2UsIGFjdGl2ZURhdGFzZXRPZmZzZXQgKyBzaXplb2YodGx2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGx2LkdldExlbmd0aCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBlbmRpbmcgRGF0YXNldAorICAgIGlmIChwZW5kaW5nVGltZXN0YW1wLkdldExlbmd0aCgpID4gMCkKKyAgICB7CisgICAgICAgIGlmIChwZW5kaW5nRGF0YXNldE9mZnNldCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQocGVuZGluZ0RhdGFzZXRPZmZzZXQsIHNpemVvZih0bHYpLCAmdGx2KTsKKyAgICAgICAgICAgIG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuU2V0KHBlbmRpbmdUaW1lc3RhbXAsIGFNZXNzYWdlLCBwZW5kaW5nRGF0YXNldE9mZnNldCArIHNpemVvZih0bHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGx2LkdldExlbmd0aCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1SZXRyaWV2ZU5ld05ldHdvcmtEYXRhID0gZmFsc2U7CisKK2V4aXQ6CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2VJbmZvKTsKKworICAgIGlmIChkYXRhUmVxdWVzdCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50OF90IHRsdnNbXSA9IHtUbHY6OmtOZXR3b3JrRGF0YX07CisKKyAgICAgICAgZGVsYXkgPSBhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc011bHRpY2FzdCgpID8gKG90UGxhdFJhbmRvbUdldCgpICUga01sZU1heFJlc3BvbnNlRGVsYXkpIDogMDsKKworICAgICAgICBTZW5kRGF0YVJlcXVlc3QoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCksIHRsdnMsIHNpemVvZih0bHZzKSwgZGVsYXkpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworYm9vbCBNbGU6OklzQmV0dGVyUGFyZW50KHVpbnQxNl90IGFSbG9jMTYsIHVpbnQ4X3QgYUxpbmtRdWFsaXR5LCBDb25uZWN0aXZpdHlUbHYgJmFDb25uZWN0aXZpdHlUbHYpCit7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisKKyAgICB1aW50OF90IGNhbmRpZGF0ZUxpbmtRdWFsaXR5SW4gPSBtUGFyZW50Q2FuZGlkYXRlLkdldExpbmtJbmZvKCkuR2V0TGlua1F1YWxpdHkoR2V0TmV0aWYoKS5HZXRNYWMoKS5HZXROb2lzZUZsb29yKCkpOworICAgIHVpbnQ4X3QgY2FuZGlkYXRlVHdvV2F5TGlua1F1YWxpdHkgPSAoY2FuZGlkYXRlTGlua1F1YWxpdHlJbiA8IG1QYXJlbnRDYW5kaWRhdGUuR2V0TGlua1F1YWxpdHlPdXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAgY2FuZGlkYXRlTGlua1F1YWxpdHlJbiA6IG1QYXJlbnRDYW5kaWRhdGUuR2V0TGlua1F1YWxpdHlPdXQoKTsKKworICAgIGlmIChhTGlua1F1YWxpdHkgIT0gY2FuZGlkYXRlVHdvV2F5TGlua1F1YWxpdHkpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSAoYUxpbmtRdWFsaXR5ID4gY2FuZGlkYXRlVHdvV2F5TGlua1F1YWxpdHkpKTsKKyAgICB9CisKKyAgICBpZiAoSXNBY3RpdmVSb3V0ZXIoYVJsb2MxNikgIT0gSXNBY3RpdmVSb3V0ZXIobVBhcmVudENhbmRpZGF0ZS5HZXRSbG9jMTYoKSkpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSBJc0FjdGl2ZVJvdXRlcihhUmxvYzE2KSk7CisgICAgfQorCisgICAgaWYgKGFDb25uZWN0aXZpdHlUbHYuR2V0UGFyZW50UHJpb3JpdHkoKSAhPSBtUGFyZW50UHJpb3JpdHkpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSAoYUNvbm5lY3Rpdml0eVRsdi5HZXRQYXJlbnRQcmlvcml0eSgpID4gbVBhcmVudFByaW9yaXR5KSk7CisgICAgfQorCisgICAgaWYgKGFDb25uZWN0aXZpdHlUbHYuR2V0TGlua1F1YWxpdHkzKCkgIT0gbVBhcmVudExpbmtRdWFsaXR5MykKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IChhQ29ubmVjdGl2aXR5VGx2LkdldExpbmtRdWFsaXR5MygpID4gbVBhcmVudExpbmtRdWFsaXR5MykpOworICAgIH0KKworICAgIGlmIChhQ29ubmVjdGl2aXR5VGx2LkdldExpbmtRdWFsaXR5MigpICE9IG1QYXJlbnRMaW5rUXVhbGl0eTIpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSAoYUNvbm5lY3Rpdml0eVRsdi5HZXRMaW5rUXVhbGl0eTIoKSA+IG1QYXJlbnRMaW5rUXVhbGl0eTIpKTsKKyAgICB9CisKKyAgICBpZiAoYUNvbm5lY3Rpdml0eVRsdi5HZXRMaW5rUXVhbGl0eTEoKSAhPSBtUGFyZW50TGlua1F1YWxpdHkxKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhydmFsID0gKGFDb25uZWN0aXZpdHlUbHYuR2V0TGlua1F1YWxpdHkxKCkgPiBtUGFyZW50TGlua1F1YWxpdHkxKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCit2b2lkIE1sZTo6UmVzZXRQYXJlbnRDYW5kaWRhdGUodm9pZCkKK3sKKyAgICBtZW1zZXQoJm1QYXJlbnRDYW5kaWRhdGUsIDAsIHNpemVvZihtUGFyZW50Q2FuZGlkYXRlKSk7CisgICAgbVBhcmVudENhbmRpZGF0ZS5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCk7Cit9CisKK290RXJyb3IgTWxlOjpIYW5kbGVQYXJlbnRSZXNwb25zZShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFLZXlTZXF1ZW5jZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICp0aHJlYWRNZXNzYWdlSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mby5HZXRMaW5rSW5mbygpKTsKKyAgICBSZXNwb25zZVRsdiByZXNwb25zZTsKKyAgICBTb3VyY2VBZGRyZXNzVGx2IHNvdXJjZUFkZHJlc3M7CisgICAgTGVhZGVyRGF0YVRsdiBsZWFkZXJEYXRhOworICAgIExpbmtNYXJnaW5UbHYgbGlua01hcmdpblRsdjsKKyAgICB1aW50OF90IGxpbmtNYXJnaW47CisgICAgdWludDhfdCBsaW5rUXVhbGl0eTsKKyAgICBDb25uZWN0aXZpdHlUbHYgY29ubmVjdGl2aXR5OworICAgIExpbmtGcmFtZUNvdW50ZXJUbHYgbGlua0ZyYW1lQ291bnRlcjsKKyAgICBNbGVGcmFtZUNvdW50ZXJUbHYgbWxlRnJhbWVDb3VudGVyOworICAgIENoYWxsZW5nZVRsdiBjaGFsbGVuZ2U7CisgICAgaW50OF90IGRpZmY7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIFBhcmVudCBSZXNwb25zZSIpOworCisgICAgLy8gUmVzcG9uc2UKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1Jlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLCByZXNwb25zZSkpOworICAgIFZlcmlmeU9yRXhpdChyZXNwb25zZS5Jc1ZhbGlkKCkgJiYKKyAgICAgICAgICAgICAgICAgbWVtY21wKHJlc3BvbnNlLkdldFJlc3BvbnNlKCksIG1QYXJlbnRSZXF1ZXN0Lm1DaGFsbGVuZ2UsIHJlc3BvbnNlLkdldExlbmd0aCgpKSA9PSAwLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFNvdXJjZSBBZGRyZXNzCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtTb3VyY2VBZGRyZXNzLCBzaXplb2Yoc291cmNlQWRkcmVzcyksIHNvdXJjZUFkZHJlc3MpKTsKKyAgICBWZXJpZnlPckV4aXQoc291cmNlQWRkcmVzcy5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gTGVhZGVyIERhdGEKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xlYWRlckRhdGEsIHNpemVvZihsZWFkZXJEYXRhKSwgbGVhZGVyRGF0YSkpOworICAgIFZlcmlmeU9yRXhpdChsZWFkZXJEYXRhLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBMaW5rIFF1YWxpdHkKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xpbmtNYXJnaW4sIHNpemVvZihsaW5rTWFyZ2luVGx2KSwgbGlua01hcmdpblRsdikpOworICAgIFZlcmlmeU9yRXhpdChsaW5rTWFyZ2luVGx2LklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBsaW5rTWFyZ2luID0gTGlua1F1YWxpdHlJbmZvOjpDb252ZXJ0UnNzVG9MaW5rTWFyZ2luKG5ldGlmLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSwgdGhyZWFkTWVzc2FnZUluZm8tPm1Sc3MpOworCisgICAgaWYgKGxpbmtNYXJnaW4gPiBsaW5rTWFyZ2luVGx2LkdldExpbmtNYXJnaW4oKSkKKyAgICB7CisgICAgICAgIGxpbmtNYXJnaW4gPSBsaW5rTWFyZ2luVGx2LkdldExpbmtNYXJnaW4oKTsKKyAgICB9CisKKyAgICBsaW5rUXVhbGl0eSA9IExpbmtRdWFsaXR5SW5mbzo6Q29udmVydExpbmtNYXJnaW5Ub0xpbmtRdWFsaXR5KGxpbmtNYXJnaW4pOworCisgICAgVmVyaWZ5T3JFeGl0KG1QYXJlbnRSZXF1ZXN0U3RhdGUgIT0ga1BhcmVudFJlcXVlc3RSb3V0ZXIgfHwgbGlua1F1YWxpdHkgPT0gMyk7CisKKyAgICAvLyBDb25uZWN0aXZpdHkKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0Nvbm5lY3Rpdml0eSwgc2l6ZW9mKGNvbm5lY3Rpdml0eSksIGNvbm5lY3Rpdml0eSkpOworICAgIFZlcmlmeU9yRXhpdChjb25uZWN0aXZpdHkuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkgJiYgKG1Sb2xlICE9IE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEKSkKKyAgICB7CisgICAgICAgIGRpZmYgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGNvbm5lY3Rpdml0eS5HZXRJZFNlcXVlbmNlKCkgLSBuZXRpZi5HZXRNbGUoKS5HZXRSb3V0ZXJJZFNlcXVlbmNlKCkpOworCisgICAgICAgIHN3aXRjaCAobVBhcmVudFJlcXVlc3RNb2RlKQorICAgICAgICB7CisgICAgICAgIGNhc2Uga0F0dGFjaEFueToKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChsZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCkgIT0gbUxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSB8fCBkaWZmID4gMCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtBdHRhY2hTYW1lMToKKyAgICAgICAgY2FzZSBrQXR0YWNoU2FtZTI6CisgICAgICAgICAgICBWZXJpZnlPckV4aXQobGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpID09IG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCkpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGRpZmYgPiAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgKGRpZmYgPT0gMCAmJiBuZXRpZi5HZXRNbGUoKS5HZXRMZWFkZXJBZ2UoKSA8IG5ldGlmLkdldE1sZSgpLkdldE5ldHdvcmtJZFRpbWVvdXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrQXR0YWNoQmV0dGVyOgorICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSAhPSBtTGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpKTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChuZXRpZi5HZXRNbGUoKS5Db21wYXJlUGFydGl0aW9ucyhjb25uZWN0aXZpdHkuR2V0QWN0aXZlUm91dGVycygpIDw9IDEsIGxlYWRlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuSXNTaW5nbGV0b24oKSwgbUxlYWRlckRhdGEpID4gMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGlmIGFscmVhZHkgaGF2ZSBhIGNhbmRpZGF0ZSBwYXJlbnQsIG9ubHkgc2VlayBhIGJldHRlciBwYXJlbnQKKyAgICBpZiAobVBhcmVudENhbmRpZGF0ZS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICB7CisgICAgICAgIGludCBjb21wYXJlID0gMDsKKworICAgICAgICBpZiAobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkKKyAgICAgICAgeworICAgICAgICAgICAgY29tcGFyZSA9IG5ldGlmLkdldE1sZSgpLkNvbXBhcmVQYXJ0aXRpb25zKGNvbm5lY3Rpdml0eS5HZXRBY3RpdmVSb3V0ZXJzKCkgPD0gMSwgbGVhZGVyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGFyZW50SXNTaW5nbGV0b24sIG1QYXJlbnRMZWFkZXJEYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG9ubHkgY29uc2lkZXIgcGFydGl0aW9ucyB0aGF0IGFyZSB0aGUgc2FtZSBvciBiZXR0ZXIKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGNvbXBhcmUgPj0gMCk7CisKKyAgICAgICAgLy8gb25seSBjb25zaWRlciBiZXR0ZXIgcGFyZW50cyBpZiB0aGUgcGFydGl0aW9ucyBhcmUgdGhlIHNhbWUKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGNvbXBhcmUgIT0gMCB8fCBJc0JldHRlclBhcmVudChzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpLCBsaW5rUXVhbGl0eSwgY29ubmVjdGl2aXR5KSk7CisgICAgfQorCisgICAgLy8gTGluayBGcmFtZSBDb3VudGVyCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtMaW5rRnJhbWVDb3VudGVyLCBzaXplb2YobGlua0ZyYW1lQ291bnRlciksIGxpbmtGcmFtZUNvdW50ZXIpKTsKKyAgICBWZXJpZnlPckV4aXQobGlua0ZyYW1lQ291bnRlci5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gTWxlIEZyYW1lIENvdW50ZXIKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a01sZUZyYW1lQ291bnRlciwgc2l6ZW9mKG1sZUZyYW1lQ291bnRlciksIG1sZUZyYW1lQ291bnRlcikgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChtbGVGcmFtZUNvdW50ZXIuSXNWYWxpZCgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWxlRnJhbWVDb3VudGVyLlNldEZyYW1lQ291bnRlcihsaW5rRnJhbWVDb3VudGVyLkdldEZyYW1lQ291bnRlcigpKTsKKyAgICB9CisKKyAgICAvLyBDaGFsbGVuZ2UKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0NoYWxsZW5nZSwgc2l6ZW9mKGNoYWxsZW5nZSksIGNoYWxsZW5nZSkpOworICAgIFZlcmlmeU9yRXhpdChjaGFsbGVuZ2UuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBtZW1jcHkobUNoaWxkSWRSZXF1ZXN0Lm1DaGFsbGVuZ2UsIGNoYWxsZW5nZS5HZXRDaGFsbGVuZ2UoKSwgY2hhbGxlbmdlLkdldExlbmd0aCgpKTsKKyAgICBtQ2hpbGRJZFJlcXVlc3QubUNoYWxsZW5nZUxlbmd0aCA9IGNoYWxsZW5nZS5HZXRMZW5ndGgoKTsKKworICAgIG1QYXJlbnRDYW5kaWRhdGUuR2V0RXh0QWRkcmVzcygpLlNldChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgbVBhcmVudENhbmRpZGF0ZS5TZXRSbG9jMTYoc291cmNlQWRkcmVzcy5HZXRSbG9jMTYoKSk7CisgICAgbVBhcmVudENhbmRpZGF0ZS5TZXRMaW5rRnJhbWVDb3VudGVyKGxpbmtGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworICAgIG1QYXJlbnRDYW5kaWRhdGUuU2V0TWxlRnJhbWVDb3VudGVyKG1sZUZyYW1lQ291bnRlci5HZXRGcmFtZUNvdW50ZXIoKSk7CisgICAgbVBhcmVudENhbmRpZGF0ZS5TZXREZXZpY2VNb2RlKE1vZGVUbHY6OmtNb2RlRkZEIHwgTW9kZVRsdjo6a01vZGVSeE9uV2hlbklkbGUgfCBNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVUbHY6OmtNb2RlU2VjdXJlRGF0YVJlcXVlc3QpOworICAgIG1QYXJlbnRDYW5kaWRhdGUuR2V0TGlua0luZm8oKS5DbGVhcigpOworICAgIG1QYXJlbnRDYW5kaWRhdGUuR2V0TGlua0luZm8oKS5BZGRSc3MobmV0aWYuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpLCB0aHJlYWRNZXNzYWdlSW5mby0+bVJzcyk7CisgICAgbVBhcmVudENhbmRpZGF0ZS5SZXNldExpbmtGYWlsdXJlcygpOworICAgIG1QYXJlbnRDYW5kaWRhdGUuU2V0TGlua1F1YWxpdHlPdXQoTGlua1F1YWxpdHlJbmZvOjpDb252ZXJ0TGlua01hcmdpblRvTGlua1F1YWxpdHkobGlua01hcmdpblRsdi5HZXRMaW5rTWFyZ2luKCkpKTsKKyAgICBtUGFyZW50Q2FuZGlkYXRlLlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVWYWxpZCk7CisgICAgbVBhcmVudENhbmRpZGF0ZS5TZXRLZXlTZXF1ZW5jZShhS2V5U2VxdWVuY2UpOworCisgICAgbVBhcmVudFByaW9yaXR5ID0gY29ubmVjdGl2aXR5LkdldFBhcmVudFByaW9yaXR5KCk7CisgICAgbVBhcmVudExpbmtRdWFsaXR5MyA9IGNvbm5lY3Rpdml0eS5HZXRMaW5rUXVhbGl0eTMoKTsKKyAgICBtUGFyZW50TGlua1F1YWxpdHkyID0gY29ubmVjdGl2aXR5LkdldExpbmtRdWFsaXR5MigpOworICAgIG1QYXJlbnRMaW5rUXVhbGl0eTEgPSBjb25uZWN0aXZpdHkuR2V0TGlua1F1YWxpdHkxKCk7CisgICAgbVBhcmVudExlYWRlckNvc3QgPSBjb25uZWN0aXZpdHkuR2V0TGVhZGVyQ29zdCgpOworICAgIG1QYXJlbnRMZWFkZXJEYXRhID0gbGVhZGVyRGF0YTsKKyAgICBtUGFyZW50SXNTaW5nbGV0b24gPSBjb25uZWN0aXZpdHkuR2V0QWN0aXZlUm91dGVycygpIDw9IDE7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nV2Fybk1sZUVycihHZXRJbnN0YW5jZSgpLCBlcnJvciwgIkZhaWxlZCB0byBwcm9jZXNzIFBhcmVudCBSZXNwb25zZSIpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkhhbmRsZUNoaWxkSWRSZXNwb25zZShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTGVhZGVyRGF0YVRsdiBsZWFkZXJEYXRhOworICAgIFNvdXJjZUFkZHJlc3NUbHYgc291cmNlQWRkcmVzczsKKyAgICBBZGRyZXNzMTZUbHYgc2hvcnRBZGRyZXNzOworICAgIE5ldHdvcmtEYXRhVGx2IG5ldHdvcmtEYXRhOworICAgIFJvdXRlVGx2IHJvdXRlOworICAgIEFjdGl2ZVRpbWVzdGFtcFRsdiBhY3RpdmVUaW1lc3RhbXA7CisgICAgUGVuZGluZ1RpbWVzdGFtcFRsdiBwZW5kaW5nVGltZXN0YW1wOworICAgIFRsdiB0bHY7CisgICAgdWludDE2X3Qgb2Zmc2V0OworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBDaGlsZCBJRCBSZXNwb25zZSIpOworCisgICAgVmVyaWZ5T3JFeGl0KG1QYXJlbnRSZXF1ZXN0U3RhdGUgPT0ga0NoaWxkSWRSZXF1ZXN0KTsKKworICAgIC8vIExlYWRlciBEYXRhCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtMZWFkZXJEYXRhLCBzaXplb2YobGVhZGVyRGF0YSksIGxlYWRlckRhdGEpKTsKKyAgICBWZXJpZnlPckV4aXQobGVhZGVyRGF0YS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gU291cmNlIEFkZHJlc3MKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1NvdXJjZUFkZHJlc3MsIHNpemVvZihzb3VyY2VBZGRyZXNzKSwgc291cmNlQWRkcmVzcykpOworICAgIFZlcmlmeU9yRXhpdChzb3VyY2VBZGRyZXNzLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBTaG9ydEFkZHJlc3MKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0FkZHJlc3MxNiwgc2l6ZW9mKHNob3J0QWRkcmVzcyksIHNob3J0QWRkcmVzcykpOworICAgIFZlcmlmeU9yRXhpdChzaG9ydEFkZHJlc3MuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIE5ldHdvcmsgRGF0YQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTmV0d29ya0RhdGEsIHNpemVvZihuZXR3b3JrRGF0YSksIG5ldHdvcmtEYXRhKSk7CisKKyAgICAvLyBBY3RpdmUgVGltZXN0YW1wCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtBY3RpdmVUaW1lc3RhbXAsIHNpemVvZihhY3RpdmVUaW1lc3RhbXApLCBhY3RpdmVUaW1lc3RhbXApID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoYWN0aXZlVGltZXN0YW1wLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgLy8gQWN0aXZlIERhdGFzZXQKKyAgICAgICAgaWYgKFRsdjo6R2V0T2Zmc2V0KGFNZXNzYWdlLCBUbHY6OmtBY3RpdmVEYXRhc2V0LCBvZmZzZXQpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YodGx2KSwgJnRsdik7CisgICAgICAgICAgICBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuU2V0KGFjdGl2ZVRpbWVzdGFtcCwgYU1lc3NhZ2UsIG9mZnNldCArIHNpemVvZih0bHYpLCB0bHYuR2V0TGVuZ3RoKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gY2xlYXIgUGVuZGluZyBEYXRhc2V0IGlmIGRldmljZSBzdWNjZWVkIHRvIHJlYXR0YWNoIHVzaW5nIHN0b3JlZCBQZW5kaW5nIERhdGFzZXQKKyAgICBpZiAobVJlYXR0YWNoU3RhdGUgPT0ga1JlYXR0YWNoUGVuZGluZykKKyAgICB7CisgICAgICAgIG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuQ2xlYXIoKTsKKyAgICB9CisKKyAgICAvLyBQZW5kaW5nIFRpbWVzdGFtcAorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprUGVuZGluZ1RpbWVzdGFtcCwgc2l6ZW9mKHBlbmRpbmdUaW1lc3RhbXApLCBwZW5kaW5nVGltZXN0YW1wKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHBlbmRpbmdUaW1lc3RhbXAuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICAvLyBQZW5kaW5nIERhdGFzZXQKKyAgICAgICAgaWYgKFRsdjo6R2V0T2Zmc2V0KGFNZXNzYWdlLCBUbHY6OmtQZW5kaW5nRGF0YXNldCwgb2Zmc2V0KSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworICAgICAgICAgICAgbmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5TZXQocGVuZGluZ1RpbWVzdGFtcCwgYU1lc3NhZ2UsIG9mZnNldCArIHNpemVvZih0bHYpLCB0bHYuR2V0TGVuZ3RoKCkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuQ2xlYXJOZXR3b3JrKCk7CisgICAgfQorCisgICAgLy8gUGFyZW50IEF0dGFjaCBTdWNjZXNzCisgICAgbVBhcmVudFJlcXVlc3RUaW1lci5TdG9wKCk7CisgICAgbVJlYXR0YWNoU3RhdGUgPSBrUmVhdHRhY2hTdG9wOworICAgIFNldFN0YXRlRGV0YWNoZWQoKTsKKworICAgIFNldExlYWRlckRhdGEobGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpLCBsZWFkZXJEYXRhLkdldFdlaWdodGluZygpLCBsZWFkZXJEYXRhLkdldExlYWRlclJvdXRlcklkKCkpOworCisgICAgaWYgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlUnhPbldoZW5JZGxlKSA9PSAwKQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldERhdGFQb2xsTWFuYWdlcigpLlNldEF0dGFjaE1vZGUoZmFsc2UpOworICAgICAgICBuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuU2V0UnhPbldoZW5JZGxlKGZhbHNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLlNldFJ4T25XaGVuSWRsZSh0cnVlKTsKKyAgICB9CisKKyAgICAvLyBSb3V0ZQorICAgIGlmICgoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1JvdXRlLCBzaXplb2Yocm91dGUpLCByb3V0ZSkgPT0gT1RfRVJST1JfTk9ORSkgJiYKKyAgICAgICAgKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldE1sZSgpLlByb2Nlc3NSb3V0ZVRsdihyb3V0ZSkpOworICAgIH0KKworICAgIG1QYXJlbnQgPSBtUGFyZW50Q2FuZGlkYXRlOworICAgIFJlc2V0UGFyZW50Q2FuZGlkYXRlKCk7CisKKyAgICBtUGFyZW50LlNldFJsb2MxNihzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpKTsKKworICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuU2V0TmV0d29ya0RhdGEobGVhZGVyRGF0YS5HZXREYXRhVmVyc2lvbigpLCBsZWFkZXJEYXRhLkdldFN0YWJsZURhdGFWZXJzaW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtEYXRhLkdldE5ldHdvcmtEYXRhKCksIG5ldHdvcmtEYXRhLkdldExlbmd0aCgpKTsKKworICAgIG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5BcHBseUNvbmZpZ3VyYXRpb24oKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZXRTdGF0ZUNoaWxkKHNob3J0QWRkcmVzcy5HZXRSbG9jMTYoKSkpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBvdExvZ1dhcm5NbGVFcnIoR2V0SW5zdGFuY2UoKSwgZXJyb3IsICJGYWlsZWQgdG8gcHJvY2VzcyBDaGlsZCBJRCBSZXNwb25zZSIpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTWVzc2FnZUluZm8pOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkhhbmRsZUNoaWxkVXBkYXRlUmVxdWVzdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGtNYXhSZXNwb25zZVRsdnMgPSA1OworCisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBTb3VyY2VBZGRyZXNzVGx2IHNvdXJjZUFkZHJlc3M7CisgICAgTGVhZGVyRGF0YVRsdiBsZWFkZXJEYXRhOworICAgIE5ldHdvcmtEYXRhVGx2IG5ldHdvcmtEYXRhOworICAgIENoYWxsZW5nZVRsdiBjaGFsbGVuZ2U7CisgICAgVGx2UmVxdWVzdFRsdiB0bHZSZXF1ZXN0OworICAgIHVpbnQ4X3QgZGF0YVJlcXVlc3RUbHZzW10gPSB7VGx2OjprTmV0d29ya0RhdGF9OworICAgIHVpbnQ4X3QgdGx2c1trTWF4UmVzcG9uc2VUbHZzXSA9IHt9OworICAgIHVpbnQ4X3QgbnVtVGx2cyA9IDA7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIENoaWxkIFVwZGF0ZSBSZXF1ZXN0IGZyb20gcGFyZW50Iik7CisKKyAgICAvLyBTb3VyY2UgQWRkcmVzcworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprU291cmNlQWRkcmVzcywgc2l6ZW9mKHNvdXJjZUFkZHJlc3MpLCBzb3VyY2VBZGRyZXNzKSk7CisgICAgVmVyaWZ5T3JFeGl0KHNvdXJjZUFkZHJlc3MuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBWZXJpZnlPckV4aXQobVBhcmVudC5HZXRSbG9jMTYoKSA9PSBzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgLy8gTGVhZGVyIERhdGEKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xlYWRlckRhdGEsIHNpemVvZihsZWFkZXJEYXRhKSwgbGVhZGVyRGF0YSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChsZWFkZXJEYXRhLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFNldExlYWRlckRhdGEobGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpLCBsZWFkZXJEYXRhLkdldFdlaWdodGluZygpLCBsZWFkZXJEYXRhLkdldExlYWRlclJvdXRlcklkKCkpOworCisgICAgICAgIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSAmJgorICAgICAgICAgICAgIGxlYWRlckRhdGEuR2V0RGF0YVZlcnNpb24oKSAhPSBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldFZlcnNpb24oKSkgfHwKKyAgICAgICAgICAgICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSkgPT0gMCAmJgorICAgICAgICAgICAgIGxlYWRlckRhdGEuR2V0U3RhYmxlRGF0YVZlcnNpb24oKSAhPSBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldFN0YWJsZVZlcnNpb24oKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZXRyaWV2ZU5ld05ldHdvcmtEYXRhID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5ldHdvcmsgRGF0YQorICAgICAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a05ldHdvcmtEYXRhLCBzaXplb2YobmV0d29ya0RhdGEpLCBuZXR3b3JrRGF0YSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KG5ldHdvcmtEYXRhLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLlNldE5ldHdvcmtEYXRhKGxlYWRlckRhdGEuR2V0RGF0YVZlcnNpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGVyRGF0YS5HZXRTdGFibGVEYXRhVmVyc2lvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya0RhdGEuR2V0TmV0d29ya0RhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya0RhdGEuR2V0TGVuZ3RoKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVExWIFJlcXVlc3QKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1RsdlJlcXVlc3QsIHNpemVvZih0bHZSZXF1ZXN0KSwgdGx2UmVxdWVzdCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCh0bHZSZXF1ZXN0LklzVmFsaWQoKSAmJiB0bHZSZXF1ZXN0LkdldExlbmd0aCgpIDw9IHNpemVvZih0bHZzKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIG1lbWNweSh0bHZzLCB0bHZSZXF1ZXN0LkdldFRsdnMoKSwgdGx2UmVxdWVzdC5HZXRMZW5ndGgoKSk7CisgICAgICAgIG51bVRsdnMgKz0gdGx2UmVxdWVzdC5HZXRMZW5ndGgoKTsKKyAgICB9CisKKyAgICAvLyBDaGFsbGVuZ2UKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0NoYWxsZW5nZSwgc2l6ZW9mKGNoYWxsZW5nZSksIGNoYWxsZW5nZSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChjaGFsbGVuZ2UuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHN0YXRpY19jYXN0PHNpemVfdD4obnVtVGx2cyArIDMpIDw9IHNpemVvZih0bHZzKSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICAgICAgdGx2c1tudW1UbHZzKytdID0gVGx2OjprUmVzcG9uc2U7CisgICAgICAgIHRsdnNbbnVtVGx2cysrXSA9IFRsdjo6a01sZUZyYW1lQ291bnRlcjsKKyAgICAgICAgdGx2c1tudW1UbHZzKytdID0gVGx2OjprTGlua0ZyYW1lQ291bnRlcjsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZENoaWxkVXBkYXRlUmVzcG9uc2UodGx2cywgbnVtVGx2cywgY2hhbGxlbmdlKSk7CisKKyAgICBpZiAobVJldHJpZXZlTmV3TmV0d29ya0RhdGEpCisgICAgeworICAgICAgICBTZW5kRGF0YVJlcXVlc3QoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCksIGRhdGFSZXF1ZXN0VGx2cywgc2l6ZW9mKGRhdGFSZXF1ZXN0VGx2cyksIDApOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpIYW5kbGVDaGlsZFVwZGF0ZVJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBTdGF0dXNUbHYgc3RhdHVzOworICAgIE1vZGVUbHYgbW9kZTsKKyAgICBSZXNwb25zZVRsdiByZXNwb25zZTsKKyAgICBMaW5rRnJhbWVDb3VudGVyVGx2IGxpbmtGcmFtZUNvdW50ZXI7CisgICAgTWxlRnJhbWVDb3VudGVyVGx2IG1sZUZyYW1lQ291bnRlcjsKKyAgICBTb3VyY2VBZGRyZXNzVGx2IHNvdXJjZUFkZHJlc3M7CisgICAgVGltZW91dFRsdiB0aW1lb3V0OworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBDaGlsZCBVcGRhdGUgUmVzcG9uc2UgZnJvbSBwYXJlbnQiKTsKKworICAgIC8vIFN0YXR1cworICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprU3RhdHVzLCBzaXplb2Yoc3RhdHVzKSwgc3RhdHVzKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIC8vIE1vZGUKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a01vZGUsIHNpemVvZihtb2RlKSwgbW9kZSkpOworICAgIFZlcmlmeU9yRXhpdChtb2RlLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgVmVyaWZ5T3JFeGl0KG1vZGUuR2V0TW9kZSgpID09IG1EZXZpY2VNb2RlLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgLy8gUmVzcG9uc2UKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtSZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSwgcmVzcG9uc2UpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlc3BvbnNlLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChtZW1jbXAocmVzcG9uc2UuR2V0UmVzcG9uc2UoKSwgbVBhcmVudFJlcXVlc3QubUNoYWxsZW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobVBhcmVudFJlcXVlc3QubUNoYWxsZW5nZSkpID09IDAsCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGlua0ZyYW1lQ291bnRlciwgc2l6ZW9mKGxpbmtGcmFtZUNvdW50ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0ZyYW1lQ291bnRlcikpOworICAgICAgICBWZXJpZnlPckV4aXQobGlua0ZyYW1lQ291bnRlci5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTWxlRnJhbWVDb3VudGVyLCBzaXplb2YobWxlRnJhbWVDb3VudGVyKSwgbWxlRnJhbWVDb3VudGVyKSA9PQorICAgICAgICAgICAgT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KG1sZUZyYW1lQ291bnRlci5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbWxlRnJhbWVDb3VudGVyLlNldEZyYW1lQ291bnRlcihsaW5rRnJhbWVDb3VudGVyLkdldEZyYW1lQ291bnRlcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1QYXJlbnQuU2V0TGlua0ZyYW1lQ291bnRlcihsaW5rRnJhbWVDb3VudGVyLkdldEZyYW1lQ291bnRlcigpKTsKKyAgICAgICAgbVBhcmVudC5TZXRNbGVGcmFtZUNvdW50ZXIobWxlRnJhbWVDb3VudGVyLkdldEZyYW1lQ291bnRlcigpKTsKKworICAgICAgICBtUGFyZW50LlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVWYWxpZCk7CisgICAgICAgIFNldFN0YXRlQ2hpbGQoR2V0UmxvYzE2KCkpOworCisgICAgLy8gZmFsbCB0aHJvdWdoCisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICAvLyBTb3VyY2UgQWRkcmVzcworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1NvdXJjZUFkZHJlc3MsIHNpemVvZihzb3VyY2VBZGRyZXNzKSwgc291cmNlQWRkcmVzcykpOworICAgICAgICBWZXJpZnlPckV4aXQoc291cmNlQWRkcmVzcy5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIGlmIChHZXRSb3V0ZXJJZChzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpKSAhPSBHZXRSb3V0ZXJJZChHZXRSbG9jMTYoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBMZWFkZXIgRGF0YSwgTmV0d29yayBEYXRhLCBBY3RpdmUgVGltZXN0YW1wLCBQZW5kaW5nIFRpbWVzdGFtcAorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSGFuZGxlTGVhZGVyRGF0YShhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKSk7CisKKyAgICAgICAgLy8gVGltZW91dCBvcHRpb25hbAorICAgICAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1RpbWVvdXQsIHNpemVvZih0aW1lb3V0KSwgdGltZW91dCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHRpbWVvdXQuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIG1UaW1lb3V0ID0gdGltZW91dC5HZXRUaW1lb3V0KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVSeE9uV2hlbklkbGUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5HZXREYXRhUG9sbE1hbmFnZXIoKS5TZXRBdHRhY2hNb2RlKGZhbHNlKTsKKyAgICAgICAgICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5TZXRSeE9uV2hlbklkbGUoZmFsc2UpOworICAgICAgICAgICAgbVBhcmVudFJlcXVlc3RUaW1lci5TdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0YXJ0KFRpbWVyOjpTZWNUb01zZWMobVRpbWVvdXQpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtVbmljYXN0UmV0cmFuc21pc3Npb25EZWxheSkgKiBrTWF4Q2hpbGRLZWVwQWxpdmVBdHRlbXB0cyk7CisgICAgICAgICAgICBuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuU2V0UnhPbldoZW5JZGxlKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgbUNoaWxkVXBkYXRlQXR0ZW1wdHMgPSAwOworCisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBvdExvZ1dhcm5NbGVFcnIoR2V0SW5zdGFuY2UoKSwgZXJyb3IsICJGYWlsZWQgdG8gcHJvY2VzcyBDaGlsZCBVcGRhdGUgUmVzcG9uc2UiKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpIYW5kbGVBbm5vdW5jZShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ2hhbm5lbFRsdiBjaGFubmVsOworICAgIEFjdGl2ZVRpbWVzdGFtcFRsdiB0aW1lc3RhbXA7CisgICAgY29uc3QgTWVzaENvUDo6VGltZXN0YW1wICpsb2NhbFRpbWVzdGFtcDsKKyAgICBQYW5JZFRsdiBwYW5pZDsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgYW5ub3VuY2UiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQ2hhbm5lbCwgc2l6ZW9mKGNoYW5uZWwpLCBjaGFubmVsKSk7CisgICAgVmVyaWZ5T3JFeGl0KGNoYW5uZWwuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQWN0aXZlVGltZXN0YW1wLCBzaXplb2YodGltZXN0YW1wKSwgdGltZXN0YW1wKSk7CisgICAgVmVyaWZ5T3JFeGl0KHRpbWVzdGFtcC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtQYW5JZCwgc2l6ZW9mKHBhbmlkKSwgcGFuaWQpKTsKKyAgICBWZXJpZnlPckV4aXQocGFuaWQuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGxvY2FsVGltZXN0YW1wID0gbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldFRpbWVzdGFtcCgpOworCisgICAgaWYgKGxvY2FsVGltZXN0YW1wID09IE5VTEwgfHwgbG9jYWxUaW1lc3RhbXAtPkNvbXBhcmUodGltZXN0YW1wKSA+IDApCisgICAgeworICAgICAgICBTdG9wKGZhbHNlKTsKKyAgICAgICAgbVByZXZpb3VzQ2hhbm5lbCA9IG5ldGlmLkdldE1hYygpLkdldENoYW5uZWwoKTsKKyAgICAgICAgbVByZXZpb3VzUGFuSWQgPSBuZXRpZi5HZXRNYWMoKS5HZXRQYW5JZCgpOworICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRDaGFubmVsKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNoYW5uZWwuR2V0Q2hhbm5lbCgpKSk7CisgICAgICAgIG5ldGlmLkdldE1hYygpLlNldFBhbklkKHBhbmlkLkdldFBhbklkKCkpOworICAgICAgICBTdGFydChmYWxzZSwgdHJ1ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKGxvY2FsVGltZXN0YW1wLT5Db21wYXJlKHRpbWVzdGFtcCkgPCAwKQorICAgIHsKKyAgICAgICAgU2VuZEFubm91bmNlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNoYW5uZWwuR2V0Q2hhbm5lbCgpKSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBkbyBub3RoaW5nCisgICAgICAgIC8vIHRpbWVzdGFtcHMgYXJlIGVxdWFsOiBubyBiZWhhdmlvdXIgc3BlY2lmaWVkIGJ5IHRoZSBUaHJlYWQgc3BlYy4KKyAgICAgICAgLy8gSWYgU2VuZEFubm91bmNlIGlzIGV4ZWN1dGVkIGF0IHRoaXMgcG9pbnQsIHRoZXJlIGV4aXN0cyBhIHNjZW5hcmlvIHdoZXJlCisgICAgICAgIC8vIG11bHRpcGxlIGRldmljZXMga2VlcCBzZW5kaW5nIE1MRSBBbm5vdW5jZSBtZXNzYWdlcyB0byBvbmUgYW5vdGhlciBpbmRlZmluaXRlbHkuCisgICAgfQorCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTWVzc2FnZUluZm8pOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkhhbmRsZURpc2NvdmVyeVJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKnRocmVhZE1lc3NhZ2VJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvLkdldExpbmtJbmZvKCkpOworICAgIFRsdiB0bHY7CisgICAgTWVzaENvUDo6VGx2IG1lc2hjb3BUbHY7CisgICAgTWVzaENvUDo6RGlzY292ZXJ5UmVzcG9uc2VUbHYgZGlzY292ZXJ5UmVzcG9uc2U7CisgICAgTWVzaENvUDo6RXh0ZW5kZWRQYW5JZFRsdiBleHRQYW5JZDsKKyAgICBNZXNoQ29QOjpOZXR3b3JrTmFtZVRsdiBuZXR3b3JrTmFtZTsKKyAgICBNZXNoQ29QOjpTdGVlcmluZ0RhdGFUbHYgc3RlZXJpbmdEYXRhOworICAgIE1lc2hDb1A6OkpvaW5lclVkcFBvcnRUbHYgSm9pbmVyVWRwUG9ydDsKKyAgICBvdEFjdGl2ZVNjYW5SZXN1bHQgcmVzdWx0OworICAgIHVpbnQxNl90IG9mZnNldDsKKyAgICB1aW50MTZfdCBlbmQ7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIkhhbmRsZSBkaXNjb3ZlcnkgcmVzcG9uc2UiKTsKKworICAgIFZlcmlmeU9yRXhpdChtSXNEaXNjb3ZlckluUHJvZ3Jlc3MsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAvLyBmaW5kIE1MRSBEaXNjb3ZlcnkgVExWCisgICAgVmVyaWZ5T3JFeGl0KFRsdjo6R2V0T2Zmc2V0KGFNZXNzYWdlLCBUbHY6OmtEaXNjb3ZlcnksIG9mZnNldCkgPT0gT1RfRVJST1JfTk9ORSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZih0bHYpLCAmdGx2KTsKKworICAgIG9mZnNldCArPSBzaXplb2YodGx2KTsKKyAgICBlbmQgPSBvZmZzZXQgKyB0bHYuR2V0TGVuZ3RoKCk7CisKKyAgICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKHJlc3VsdCkpOworICAgIHJlc3VsdC5tUGFuSWQgPSB0aHJlYWRNZXNzYWdlSW5mby0+bVBhbklkOworICAgIHJlc3VsdC5tQ2hhbm5lbCA9IHRocmVhZE1lc3NhZ2VJbmZvLT5tQ2hhbm5lbDsKKyAgICByZXN1bHQubVJzc2kgPSB0aHJlYWRNZXNzYWdlSW5mby0+bVJzczsKKyAgICByZXN1bHQubUxxaSA9IHRocmVhZE1lc3NhZ2VJbmZvLT5tTHFpOworICAgIHN0YXRpY19jYXN0PE1hYzo6RXh0QWRkcmVzcyAqPigmcmVzdWx0Lm1FeHRBZGRyZXNzKS0+U2V0KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKworICAgIC8vIHByb2Nlc3MgTWVzaENvUCBUTFZzCisgICAgd2hpbGUgKG9mZnNldCA8IGVuZCkKKyAgICB7CisgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YobWVzaGNvcFRsdiksICZtZXNoY29wVGx2KTsKKworICAgICAgICBzd2l0Y2ggKG1lc2hjb3BUbHYuR2V0VHlwZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTWVzaENvUDo6VGx2OjprRGlzY292ZXJ5UmVzcG9uc2U6CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKGRpc2NvdmVyeVJlc3BvbnNlKSwgJmRpc2NvdmVyeVJlc3BvbnNlKTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChkaXNjb3ZlcnlSZXNwb25zZS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgcmVzdWx0Lm1WZXJzaW9uID0gZGlzY292ZXJ5UmVzcG9uc2UuR2V0VmVyc2lvbigpOworICAgICAgICAgICAgcmVzdWx0Lm1Jc05hdGl2ZSA9IGRpc2NvdmVyeVJlc3BvbnNlLklzTmF0aXZlQ29tbWlzc2lvbmVyKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1lc2hDb1A6OlRsdjo6a0V4dGVuZGVkUGFuSWQ6CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKGV4dFBhbklkKSwgJmV4dFBhbklkKTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChleHRQYW5JZC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgbWVtY3B5KCZyZXN1bHQubUV4dGVuZGVkUGFuSWQsIGV4dFBhbklkLkdldEV4dGVuZGVkUGFuSWQoKSwgc2l6ZW9mKHJlc3VsdC5tRXh0ZW5kZWRQYW5JZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNZXNoQ29QOjpUbHY6OmtOZXR3b3JrTmFtZToKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YobmV0d29ya05hbWUpLCAmbmV0d29ya05hbWUpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KG5ldHdvcmtOYW1lLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICBtZW1jcHkoJnJlc3VsdC5tTmV0d29ya05hbWUsIG5ldHdvcmtOYW1lLkdldE5ldHdvcmtOYW1lKCksIG5ldHdvcmtOYW1lLkdldExlbmd0aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTWVzaENvUDo6VGx2OjprU3RlZXJpbmdEYXRhOgorICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihzdGVlcmluZ0RhdGEpLCAmc3RlZXJpbmdEYXRhKTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChzdGVlcmluZ0RhdGEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICAgICAgLy8gUGFzcyB1cCBNTEUgZGlzY292ZXJ5IHJlc3BvbnNlcyBvbmx5IGlmIHRoZSBzdGVlcmluZyBkYXRhIGlzIHNldCB0byBhbGwgMHhGRnMsCisgICAgICAgICAgICAvLyBvciBpZiBpdCBtYXRjaGVzIHRoZSBmYWN0b3J5IHNldCBFVUk2NC4KKyAgICAgICAgICAgIGlmIChtRW5hYmxlRXVpNjRGaWx0ZXJpbmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RFeHRBZGRyZXNzIG1mZ0VVSTY0OworICAgICAgICAgICAgICAgIENyYzE2IGNjaXR0KENyYzE2OjprQ2NpdHQpOworICAgICAgICAgICAgICAgIENyYzE2IGFuc2koQ3JjMTY6OmtBbnNpKTsKKworICAgICAgICAgICAgICAgIC8vIEdldCBGYWN0b3J5IHNldCBFVUk2NAorICAgICAgICAgICAgICAgIG90UGxhdFJhZGlvR2V0SWVlZUV1aTY0KEdldEluc3RhbmNlKCksIG1mZ0VVSTY0Lm04KTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgYmxvb20gZmlsdGVyCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YobWZnRVVJNjQubTgpOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjY2l0dC5VcGRhdGUobWZnRVVJNjQubThbaV0pOworICAgICAgICAgICAgICAgICAgICBhbnNpLlVwZGF0ZShtZmdFVUk2NC5tOFtpXSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRHJvcCByZXNwb25zZXMgdGhhdCBkb24ndCBtYXRjaCB0aGUgYmxvb20gZmlsdGVyCisgICAgICAgICAgICAgICAgaWYgKCFzdGVlcmluZ0RhdGEuR2V0Qml0KGNjaXR0LkdldCgpICUgc3RlZXJpbmdEYXRhLkdldE51bUJpdHMoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgIXN0ZWVyaW5nRGF0YS5HZXRCaXQoYW5zaS5HZXQoKSAlIHN0ZWVyaW5nRGF0YS5HZXROdW1CaXRzKCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0Lm1TdGVlcmluZ0RhdGEubUxlbmd0aCA9IHN0ZWVyaW5nRGF0YS5HZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIG1lbWNweShyZXN1bHQubVN0ZWVyaW5nRGF0YS5tOCwgc3RlZXJpbmdEYXRhLkdldFZhbHVlKCksIHJlc3VsdC5tU3RlZXJpbmdEYXRhLm1MZW5ndGgpOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1lc2hDb1A6OlRsdjo6a0pvaW5lclVkcFBvcnQ6CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKEpvaW5lclVkcFBvcnQpLCAmSm9pbmVyVWRwUG9ydCk7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoSm9pbmVyVWRwUG9ydC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgcmVzdWx0Lm1Kb2luZXJVZHBQb3J0ID0gSm9pbmVyVWRwUG9ydC5HZXRVZHBQb3J0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKG1lc2hjb3BUbHYpICsgbWVzaGNvcFRsdi5HZXRMZW5ndGgoKTsKKyAgICB9CisKKyAgICAvLyBzaWduYWwgY2FsbGJhY2sKKyAgICBtRGlzY292ZXJIYW5kbGVyKCZyZXN1bHQsIG1EaXNjb3ZlckNvbnRleHQpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBvdExvZ1dhcm5NbGVFcnIoR2V0SW5zdGFuY2UoKSwgZXJyb3IsICJGYWlsZWQgdG8gcHJvY2VzcyBEaXNjb3ZlcnkgUmVzcG9uc2UiKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK05laWdoYm9yICpNbGU6OkdldE5laWdoYm9yKHVpbnQxNl90IGFBZGRyZXNzKQoreworICAgIGlmICgobVBhcmVudC5Jc1N0YXRlVmFsaWRPclJlc3RvcmluZygpKSAmJiAobVBhcmVudC5HZXRSbG9jMTYoKSA9PSBhQWRkcmVzcykpCisgICAgeworICAgICAgICByZXR1cm4gJm1QYXJlbnQ7CisgICAgfQorCisgICAgaWYgKChtUGFyZW50Q2FuZGlkYXRlLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKSAmJiAobVBhcmVudENhbmRpZGF0ZS5HZXRSbG9jMTYoKSA9PSBhQWRkcmVzcykpCisgICAgeworICAgICAgICByZXR1cm4gJm1QYXJlbnRDYW5kaWRhdGU7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK05laWdoYm9yICpNbGU6OkdldE5laWdoYm9yKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgaWYgKChtUGFyZW50LklzU3RhdGVWYWxpZE9yUmVzdG9yaW5nKCkpICYmCisgICAgICAgIChtZW1jbXAoJm1QYXJlbnQuR2V0RXh0QWRkcmVzcygpLCAmYUFkZHJlc3MsIHNpemVvZihhQWRkcmVzcykpID09IDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtUGFyZW50OworICAgIH0KKworICAgIGlmICgobVBhcmVudENhbmRpZGF0ZS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkgJiYKKyAgICAgICAgKG1lbWNtcCgmbVBhcmVudENhbmRpZGF0ZS5HZXRFeHRBZGRyZXNzKCksICZhQWRkcmVzcywgc2l6ZW9mKGFBZGRyZXNzKSkgPT0gMCkpCisgICAgeworICAgICAgICByZXR1cm4gJm1QYXJlbnRDYW5kaWRhdGU7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK05laWdoYm9yICpNbGU6OkdldE5laWdoYm9yKGNvbnN0IE1hYzo6QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yID0gTlVMTDsKKworICAgIHN3aXRjaCAoYUFkZHJlc3MubUxlbmd0aCkKKyAgICB7CisgICAgY2FzZSAyOgorICAgICAgICBuZWlnaGJvciA9IEdldE5laWdoYm9yKGFBZGRyZXNzLm1TaG9ydEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgODoKKyAgICAgICAgbmVpZ2hib3IgPSBHZXROZWlnaGJvcihhQWRkcmVzcy5tRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBuZWlnaGJvcjsKK30KKwordWludDE2X3QgTWxlOjpHZXROZXh0SG9wKHVpbnQxNl90IGFEZXN0aW5hdGlvbikgY29uc3QKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYURlc3RpbmF0aW9uKTsKKyAgICByZXR1cm4gKG1QYXJlbnQuR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpID8gbVBhcmVudC5HZXRSbG9jMTYoKSA6IHN0YXRpY19jYXN0PHVpbnQxNl90PgorICAgICAgICAgICAoTWFjOjprU2hvcnRBZGRySW52YWxpZCk7Cit9CisKK2Jvb2wgTWxlOjpJc1JvdXRpbmdMb2NhdG9yKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbWNtcCgmbU1lc2hMb2NhbDE2LCAmYUFkZHJlc3MsIGtSbG9jUHJlZml4TGVuZ3RoKSA9PSAwICYmCisgICAgICAgICAgIGFBZGRyZXNzLm1GaWVsZHMubThbMTRdIDwgSXA2OjpBZGRyZXNzOjprQWxvYzE2TWFzayAmJgorICAgICAgICAgICAoYUFkZHJlc3MubUZpZWxkcy5tOFsxNF0gJiBJcDY6OkFkZHJlc3M6OmtSbG9jMTZSZXNlcnZlZEJpdE1hc2spID09IDA7Cit9CisKK2Jvb2wgTWxlOjpJc0FueWNhc3RMb2NhdG9yKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbWNtcCgmbU1lc2hMb2NhbDE2LCAmYUFkZHJlc3MsIGtSbG9jUHJlZml4TGVuZ3RoKSA9PSAwICYmCisgICAgICAgICAgIGFBZGRyZXNzLm1GaWVsZHMubThbMTRdID09IElwNjo6QWRkcmVzczo6a0Fsb2MxNk1hc2s7Cit9CisKK2Jvb2wgTWxlOjpJc01lc2hMb2NhbEFkZHJlc3MoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykgY29uc3QKK3sKKyAgICByZXR1cm4gYUFkZHJlc3MuUHJlZml4TWF0Y2goR2V0TWVzaExvY2FsMTYoKSkgPj0gSXA2OjpBZGRyZXNzOjprTWVzaExvY2FsUHJlZml4TGVuZ3RoOworfQorCitSb3V0ZXIgKk1sZTo6R2V0UGFyZW50KHZvaWQpCit7CisgICAgaWYgKCghbVBhcmVudC5Jc1N0YXRlVmFsaWRPclJlc3RvcmluZygpKSAmJiAobVBhcmVudENhbmRpZGF0ZS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkpCisgICAgeworICAgICAgICByZXR1cm4gJm1QYXJlbnRDYW5kaWRhdGU7CisgICAgfQorCisgICAgcmV0dXJuICZtUGFyZW50OworfQorCitvdEVycm9yIE1sZTo6Q2hlY2tSZWFjaGFiaWxpdHkodWludDE2X3QgYU1lc2hTb3VyY2UsIHVpbnQxNl90IGFNZXNoRGVzdCwgSXA2OjpIZWFkZXIgJmFJcDZIZWFkZXIpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfRFJPUDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgaWYgKGFNZXNoRGVzdCAhPSBHZXRSbG9jMTYoKSkKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICB9CisKKyAgICBpZiAobmV0aWYuSXNVbmljYXN0QWRkcmVzcyhhSXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkpKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIH0KKworICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkgPSBHZXRNZXNoTG9jYWwxNigpOworICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KGFNZXNoU291cmNlKTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChuZXRpZi5HZXRJbnRlcmZhY2VJZCgpKTsKKworICAgIG5ldGlmLkdldElwNigpLm1JY21wLlNlbmRFcnJvcihJcDY6OkljbXBIZWFkZXI6OmtUeXBlRHN0VW5yZWFjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXA2OjpJY21wSGVhZGVyOjprQ29kZURzdFVucmVhY2hOb1JvdXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSW5mbywgYUlwNkhlYWRlcik7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitNbGUgJk1sZTo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgTWxlICZtbGUgPSAqc3RhdGljX2Nhc3Q8TWxlICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIE1sZSAmbWxlID0gb3RHZXRJbnN0YW5jZSgpLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBtbGU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBNbGUKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL21sZS5ocHAgYi9zcmMvY29yZS90aHJlYWQvbWxlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2RlYzBjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL21sZS5ocHAKQEAgLTAsMCArMSwxNDU5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgTUxFIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgYnkgdGhlIFRocmVhZCBDaGlsZCwgUm91dGVyLCBhbmQgTGVhZGVyIHJvbGVzLgorICovCisKKyNpZm5kZWYgTUxFX0hQUF8KKyNkZWZpbmUgTUxFX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2pvaW5lcl9yb3V0ZXIuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX2NvbnN0YW50cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdG9wb2xvZ3kuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKK2NsYXNzIEtleU1hbmFnZXI7CitjbGFzcyBNZXNoRm9yd2FyZGVyOworCituYW1lc3BhY2UgTWFjIHsgY2xhc3MgTWFjOyB9CituYW1lc3BhY2UgTmV0d29ya0RhdGEgeyBjbGFzcyBMZWFkZXI7IH0KKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW1sZSBNTEUKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBNTEUgcHJvdG9jb2wuCisgKgorICogQHsKKyAqCisgKiBAZGVmZ3JvdXAgY29yZS1tbGUtY29yZSBDb3JlCisgKiBAZGVmZ3JvdXAgY29yZS1tbGUtcm91dGVyIFJvdXRlcgorICogQGRlZmdyb3VwIGNvcmUtbWxlLXRsdnMgVExWcworICoKKyAqIEB9CisgKi8KKworLyoqCisgKiBAbmFtZXNwYWNlIG90OjpNbGUKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBuYW1lc3BhY2UgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBNTEUgcHJvdG9jb2wuCisgKi8KKworbmFtZXNwYWNlIE1sZSB7CisKK2NsYXNzIE1sZVJvdXRlcjsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW1sZS1jb3JlCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBNTEUgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSB0aGUgVGhyZWFkIENoaWxkLCBSb3V0ZXIsIGFuZCBMZWFkZXIgcm9sZXMuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBNTEUgQXR0YWNoIG1vZGVzCisgKgorICovCitlbnVtIEF0dGFjaE1vZGUKK3sKKyAgICBrQXR0YWNoQW55ICAgID0gMCwgIC8vLzwgQXR0YWNoIHRvIGFueSBUaHJlYWQgcGFydGl0aW9uLgorICAgIGtBdHRhY2hTYW1lMSAgPSAxLCAgLy8vPCBBdHRhY2ggdG8gdGhlIHNhbWUgVGhyZWFkIHBhcnRpdGlvbiAoYXR0ZW1wdCAxKS4KKyAgICBrQXR0YWNoU2FtZTIgID0gMiwgIC8vLzwgQXR0YWNoIHRvIHRoZSBzYW1lIFRocmVhZCBwYXJ0aXRpb24gKGF0dGVtcHQgMikuCisgICAga0F0dGFjaEJldHRlciA9IDMsICAvLy88IEF0dGFjaCB0byBhIGJldHRlciAoaS5lLiBoaWdoZXIgd2VpZ2h0L3BhcnRpdGlvbiBpZCkgVGhyZWFkIHBhcnRpdGlvbi4KK307CisKKy8qKgorICogVGhpcyBlbnVtZXJhdGlvbiByZXByZXNlbnRzIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBBTE9DIFNwYWNlCisgKgorICovCitlbnVtIEFsb2NBbGxvY2F0aW9uCit7CisgICAga0Fsb2MxNkxlYWRlciAgICAgICAgICAgICAgICAgICAgICAgPSAweGZjMDAsCisgICAga0Fsb2MxNkRoY3BBZ2VudFN0YXJ0ICAgICAgICAgICAgICAgPSAweGZjMDEsCisgICAga0Fsb2MxNkRoY3BBZ2VudEVuZCAgICAgICAgICAgICAgICAgPSAweGZjMGYsCisgICAga0Fsb2MxNkRoY3BBZ2VudE1hc2sgICAgICAgICAgICAgICAgPSAweDAzZmYsCisgICAga0Fsb2MxNlNlcnZpY2VTdGFydCAgICAgICAgICAgICAgICAgPSAweGZjMTAsCisgICAga0Fsb2MxNlNlcnZpY2VFbmQgICAgICAgICAgICAgICAgICAgPSAweGZjMmYsCisgICAga0Fsb2MxNkNvbW1pc3Npb25lclN0YXJ0ICAgICAgICAgICAgPSAweGZjMzAsCisgICAga0Fsb2MxNkNvbW1pc3Npb25lckVuZCAgICAgICAgICAgICAgPSAweGZjMzcsCisgICAga0Fsb2MxNk5laWdoYm9yRGlzY292ZXJ5QWdlbnRTdGFydCAgPSAweGZjNDAsCisgICAga0Fsb2MxNk5laWdoYm9yRGlzY292ZXJ5QWdlbnRFbmQgICAgPSAweGZjNGUsCit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBNTEUgSGVhZGVyIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgSGVhZGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIE1MRSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtU2VjdXJpdHlTdWl0ZSA9IGsxNTRTZWN1cml0eTsgbVNlY3VyaXR5Q29udHJvbCA9IE1hYzo6RnJhbWU6OmtTZWNFbmNNaWMzMjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7CisgICAgICAgIHJldHVybiAobVNlY3VyaXR5U3VpdGUgPT0ga05vU2VjdXJpdHkpIHx8CisgICAgICAgICAgICAgICAobVNlY3VyaXR5U3VpdGUgPT0gazE1NFNlY3VyaXR5ICYmCisgICAgICAgICAgICAgICAgbVNlY3VyaXR5Q29udHJvbCA9PSAoTWFjOjpGcmFtZTo6a0tleUlkTW9kZTIgfCBNYWM6OkZyYW1lOjprU2VjRW5jTWljMzIpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNTEUgaGVhZGVyIGFuZCBDb21tYW5kIFR5cGUgbGVuZ3RoLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1MRSBoZWFkZXIgYW5kIENvbW1hbmQgVHlwZSBsZW5ndGguCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExlbmd0aCh2b2lkKSBjb25zdCB7CisgICAgICAgIHVpbnQ4X3QgcnZhbCA9IHNpemVvZihtU2VjdXJpdHlTdWl0ZSkgKyBzaXplb2YobUNvbW1hbmQpOworCisgICAgICAgIGlmIChtU2VjdXJpdHlTdWl0ZSA9PSBrMTU0U2VjdXJpdHkpIHsKKyAgICAgICAgICAgIHJ2YWwgKz0gc2l6ZW9mKG1TZWN1cml0eUNvbnRyb2wpICsgc2l6ZW9mKG1GcmFtZUNvdW50ZXIpICsgc2l6ZW9mKG1LZXlTb3VyY2UpICsgc2l6ZW9mKG1LZXlJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcnZhbDsKKyAgICB9CisKKyAgICBlbnVtIFNlY3VyaXR5U3VpdGUKKyAgICB7CisgICAgICAgIGsxNTRTZWN1cml0eSA9IDAsICAgIC8vLzwgSUVFRSA4MDIuMTUuNC0yMDA2IHNlY3VyaXR5LgorICAgICAgICBrTm9TZWN1cml0eSAgPSAyNTUsICAvLy88IE5vIHNlY3VyaXR5IGVuYWJsZWQuCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFNlY3VyaXR5IFN1aXRlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFNlY3VyaXR5IFN1aXRlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgU2VjdXJpdHlTdWl0ZSBHZXRTZWN1cml0eVN1aXRlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNlY3VyaXR5U3VpdGU+KG1TZWN1cml0eVN1aXRlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgU2VjdXJpdHkgU3VpdGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VjdXJpdHlTdWl0ZSAgVGhlIFNlY3VyaXR5IFN1aXRlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWN1cml0eVN1aXRlKFNlY3VyaXR5U3VpdGUgYVNlY3VyaXR5U3VpdGUpIHsgbVNlY3VyaXR5U3VpdGUgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhU2VjdXJpdHlTdWl0ZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1MRSBoZWFkZXIgbGVuZ3RoIChleGNsdWRpbmcgdGhlIENvbW1hbmQgVHlwZSkuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTUxFIGhlYWRlciBsZW5ndGggKGV4Y2x1ZGluZyB0aGUgQ29tbWFuZCBUeXBlKS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0SGVhZGVyTGVuZ3RoKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHNpemVvZihtU2VjdXJpdHlDb250cm9sKSArIHNpemVvZihtRnJhbWVDb3VudGVyKSArIHNpemVvZihtS2V5U291cmNlKSArIHNpemVvZihtS2V5SW5kZXgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIGZpcnN0IGJ5dGUgb2YgdGhlIE1MRSBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIE1MRSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRCeXRlcyh2b2lkKSBjb25zdCB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oJm1TZWN1cml0eVN1aXRlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBTZWN1cml0eSBDb250cm9sIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFNlY3VyaXR5IENvbnRyb2wgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFNlY3VyaXR5Q29udHJvbCh2b2lkKSBjb25zdCB7IHJldHVybiBtU2VjdXJpdHlDb250cm9sOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIEtleSBJRCBNb2RlIGlzIHNldCB0byAyLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIEtleSBJRCBNb2RlIGlzIHNldCB0byAyLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBLZXkgSUQgTW9kZSBpcyBub3Qgc2V0IHRvIDIuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzS2V5SWRNb2RlMih2b2lkKSBjb25zdCB7CisgICAgICAgIHJldHVybiAobVNlY3VyaXR5Q29udHJvbCAmIE1hYzo6RnJhbWU6OmtLZXlJZE1vZGVNYXNrKSA9PSBNYWM6OkZyYW1lOjprS2V5SWRNb2RlMjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBLZXkgSUQgTW9kZSB0byAyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRLZXlJZE1vZGUyKHZvaWQpIHsKKyAgICAgICAgbVNlY3VyaXR5Q29udHJvbCA9IChtU2VjdXJpdHlDb250cm9sICYgfk1hYzo6RnJhbWU6OmtLZXlJZE1vZGVNYXNrKSB8IE1hYzo6RnJhbWU6OmtLZXlJZE1vZGUyOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEtleSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBLZXkgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRLZXlJZCh2b2lkKSBjb25zdCB7CisgICAgICAgIHJldHVybiBFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyKG1LZXlTb3VyY2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEtleSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXlTZXF1ZW5jZSAgVGhlIEtleSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0S2V5SWQodWludDMyX3QgYUtleVNlcXVlbmNlKSB7CisgICAgICAgIG1LZXlTb3VyY2UgPSBFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyKGFLZXlTZXF1ZW5jZSk7CisgICAgICAgIG1LZXlJbmRleCA9IChhS2V5U2VxdWVuY2UgJiAweDdmKSArIDE7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0RnJhbWVDb3VudGVyKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEVuY29kaW5nOjpMaXR0bGVFbmRpYW46Okhvc3RTd2FwMzIobUZyYW1lQ291bnRlcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZUNvdW50ZXIgIFRoZSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRGcmFtZUNvdW50ZXIodWludDMyX3QgYUZyYW1lQ291bnRlcikgeworICAgICAgICBtRnJhbWVDb3VudGVyID0gRW5jb2Rpbmc6OkxpdHRsZUVuZGlhbjo6SG9zdFN3YXAzMihhRnJhbWVDb3VudGVyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNTEUgQ29tbWFuZCBUeXBlcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gQ29tbWFuZAorICAgIHsKKyAgICAgICAga0NvbW1hbmRMaW5rUmVxdWVzdCAgICAgICAgICA9IDAsICAgIC8vLzwgTGluayBSZWplY3QKKyAgICAgICAga0NvbW1hbmRMaW5rQWNjZXB0ICAgICAgICAgICA9IDEsICAgIC8vLzwgTGluayBBY2NlcHQKKyAgICAgICAga0NvbW1hbmRMaW5rQWNjZXB0QW5kUmVxdWVzdCA9IDIsICAgIC8vLzwgTGluayBBY2NlcHQgYW5kIFJlamVjdAorICAgICAgICBrQ29tbWFuZExpbmtSZWplY3QgICAgICAgICAgID0gMywgICAgLy8vPCBMaW5rIFJlamVjdAorICAgICAgICBrQ29tbWFuZEFkdmVydGlzZW1lbnQgICAgICAgID0gNCwgICAgLy8vPCBBZHZlcnRpc2VtZW50CisgICAgICAgIGtDb21tYW5kVXBkYXRlICAgICAgICAgICAgICAgPSA1LCAgICAvLy88IFVwZGF0ZQorICAgICAgICBrQ29tbWFuZFVwZGF0ZVJlcXVlc3QgICAgICAgID0gNiwgICAgLy8vPCBVcGRhdGUgUmVxdWVzdAorICAgICAgICBrQ29tbWFuZERhdGFSZXF1ZXN0ICAgICAgICAgID0gNywgICAgLy8vPCBEYXRhIFJlcXVlc3QKKyAgICAgICAga0NvbW1hbmREYXRhUmVzcG9uc2UgICAgICAgICA9IDgsICAgIC8vLzwgRGF0YSBSZXNwb25zZQorICAgICAgICBrQ29tbWFuZFBhcmVudFJlcXVlc3QgICAgICAgID0gOSwgICAgLy8vPCBQYXJlbnQgUmVxdWVzdAorICAgICAgICBrQ29tbWFuZFBhcmVudFJlc3BvbnNlICAgICAgID0gMTAsICAgLy8vPCBQYXJlbnQgUmVzcG9uc2UKKyAgICAgICAga0NvbW1hbmRDaGlsZElkUmVxdWVzdCAgICAgICA9IDExLCAgIC8vLzwgQ2hpbGQgSUQgUmVxdWVzdAorICAgICAgICBrQ29tbWFuZENoaWxkSWRSZXNwb25zZSAgICAgID0gMTIsICAgLy8vPCBDaGlsZCBJRCBSZXNwb25zZQorICAgICAgICBrQ29tbWFuZENoaWxkVXBkYXRlUmVxdWVzdCAgID0gMTMsICAgLy8vPCBDaGlsZCBVcGRhdGUgUmVxdWVzdAorICAgICAgICBrQ29tbWFuZENoaWxkVXBkYXRlUmVzcG9uc2UgID0gMTQsICAgLy8vPCBDaGlsZCBVcGRhdGUgUmVzcG9uc2UKKyAgICAgICAga0NvbW1hbmRBbm5vdW5jZSAgICAgICAgICAgICA9IDE1LCAgIC8vLzwgQW5ub3VuY2UKKyAgICAgICAga0NvbW1hbmREaXNjb3ZlcnlSZXF1ZXN0ICAgICA9IDE2LCAgIC8vLzwgRGlzY292ZXJ5IFJlcXVlc3QKKyAgICAgICAga0NvbW1hbmREaXNjb3ZlcnlSZXNwb25zZSAgICA9IDE3LCAgIC8vLzwgRGlzY292ZXJ5IFJlc3BvbnNlCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIENvbW1hbmQgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDb21tYW5kIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBDb21tYW5kIEdldENvbW1hbmQodm9pZCkgY29uc3QgeworICAgICAgICBpZiAobVNlY3VyaXR5U3VpdGUgPT0ga05vU2VjdXJpdHkpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb21tYW5kPihtU2VjdXJpdHlDb250cm9sKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb21tYW5kPihtQ29tbWFuZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDb21tYW5kIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29tbWFuZCAgVGhlIENvbW1hbmQgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q29tbWFuZChDb21tYW5kIGFDb21tYW5kKSB7CisgICAgICAgIGlmIChtU2VjdXJpdHlTdWl0ZSA9PSBrTm9TZWN1cml0eSkgeworICAgICAgICAgICAgbVNlY3VyaXR5Q29udHJvbCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFDb21tYW5kKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1Db21tYW5kID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYUNvbW1hbmQpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVNlY3VyaXR5U3VpdGU7CisgICAgdWludDhfdCBtU2VjdXJpdHlDb250cm9sOworICAgIHVpbnQzMl90IG1GcmFtZUNvdW50ZXI7CisgICAgdWludDMyX3QgbUtleVNvdXJjZTsKKyAgICB1aW50OF90IG1LZXlJbmRleDsKKyAgICB1aW50OF90IG1Db21tYW5kOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgZm9yIGRlbGF5aW5nIE1MRSByZXNwb25zZXMuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgRGVsYXllZFJlc3BvbnNlSGVhZGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIERlbGF5ZWRSZXNwb25zZUhlYWRlcih2b2lkKSB7IG1lbXNldCh0aGlzLCAwLCBzaXplb2YoKnRoaXMpKTsgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdCB3aXRoIHNwZWNpZmljIHZhbHVlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZW5kVGltZSAgICAgVGltZSB3aGVuIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQuCisgICAgICogQHBhcmFtW2luXSAgYURlc3RpbmF0aW9uICBJUHY2IGFkZHJlc3Mgb2YgdGhlIG1lc3NhZ2UgZGVzdGluYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBEZWxheWVkUmVzcG9uc2VIZWFkZXIodWludDMyX3QgYVNlbmRUaW1lLCBjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbikgeworICAgICAgICBtU2VuZFRpbWUgPSBhU2VuZFRpbWU7CisgICAgICAgIG1EZXN0aW5hdGlvbiA9IGFEZXN0aW5hdGlvbjsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBkZWxheWVkIHJlc3BvbnNlIGhlYWRlciB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBieXRlcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBhdmFpbGFibGUgYnVmZmVycyB0byBncm93IHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRUbyhNZXNzYWdlICZhTWVzc2FnZSkgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKHRoaXMsIHNpemVvZigqdGhpcykpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWFkcyBkZWxheWVkIHJlc3BvbnNlIGhlYWRlciBmcm9tIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyByZWFkLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgUmVhZEZyb20oTWVzc2FnZSAmYU1lc3NhZ2UpIHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoKnRoaXMpLCBzaXplb2YoKnRoaXMpLCB0aGlzKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBkZWxheWVkIHJlc3BvbnNlIGhlYWRlciBmcm9tIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgUmVtb3ZlRnJvbShNZXNzYWdlICZhTWVzc2FnZSkgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuU2V0TGVuZ3RoKGFNZXNzYWdlLkdldExlbmd0aCgpIC0gc2l6ZW9mKERlbGF5ZWRSZXNwb25zZUhlYWRlcikpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgdGltZSB3aGVuIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSB0aW1lIHdoZW4gdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFNlbmRUaW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TZW5kVGltZTsgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBkZXN0aW5hdGlvbiBvZiB0aGUgZGVsYXllZCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgIEEgZGVzdGluYXRpb24gb2YgdGhlIGRlbGF5ZWQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IElwNjo6QWRkcmVzcyAmR2V0RGVzdGluYXRpb24odm9pZCkgY29uc3QgeyByZXR1cm4gbURlc3RpbmF0aW9uOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYmVmb3JlIHRoZSBnaXZlbiB0aW1lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWUgIEEgdGltZSB0byBjb21wYXJlLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICogQHJldHZhbCBGQUxTRSAgT3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgSXNFYXJsaWVyKHVpbnQzMl90IGFUaW1lKSB7IHJldHVybiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYVRpbWUgLSBtU2VuZFRpbWUpID4gMCk7IH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBhZnRlciB0aGUgZ2l2ZW4gdGltZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaW1lICBBIHRpbWUgdG8gY29tcGFyZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuCisgICAgICogQHJldHZhbCBGQUxTRSAgT3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgSXNMYXRlcih1aW50MzJfdCBhVGltZSkgeyByZXR1cm4gKHN0YXRpY19jYXN0PGludDMyX3Q+KGFUaW1lIC0gbVNlbmRUaW1lKSA8IDApOyB9OworCitwcml2YXRlOgorICAgIElwNjo6QWRkcmVzcyBtRGVzdGluYXRpb247ICAvLy88IElQdjYgYWRkcmVzcyBvZiB0aGUgbWVzc2FnZSBkZXN0aW5hdGlvbi4KKyAgICB1aW50MzJfdCBtU2VuZFRpbWU7ICAgICAgICAgLy8vPCBUaW1lIHdoZW4gdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudC4KK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBNTEUgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSB0aGUgVGhyZWFkIEVuZERldmljZXMsIFJvdXRlciwgYW5kIExlYWRlciByb2xlcy4KKyAqCisgKi8KK2NsYXNzIE1sZTogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIE1MRSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBNbGUoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBlbmFibGVzIE1MRS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVuYWJsZWQgTUxFLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgTUxFIHdhcyBhbHJlYWR5IGVuYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEVuYWJsZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRpc2FibGVzIE1MRS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGRpc2FibGVkIE1MRS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRGlzYWJsZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgTUxFIHByb3RvY29sIG9wZXJhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFbmFibGVSZWF0dGFjaCBUcnVlIGlmIHJlYXR0YWNoIHVzaW5nIHN0b3JlZCBkYXRhc2V0LCBvciBGYWxzZSBpZiBub3QuCisgICAgICogQHBhcmFtW2luXSAgYUFubm91bmNlQXR0YWNoIFRydWUgaWYgYXR0YWNoIG9uIHRoZSBhbm5vdW5jZWQgdGhyZWFkIG5ldHdvcmsgd2l0aCBuZXdlciBhY3RpdmUgdGltZXN0YW1wLAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBGYWxzZSBpZiBub3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBwcm90b2NvbCBvcGVyYXRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICBUaGUgcHJvdG9jb2wgb3BlcmF0aW9uIHdhcyBhbHJlYWR5IHN0YXJ0ZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0YXJ0KGJvb2wgYUVuYWJsZVJlYXR0YWNoLCBib29sIGFBbm5vdW5jZUF0dGFjaCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyB0aGUgTUxFIHByb3RvY29sIG9wZXJhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDbGVhck5ldHdvcmtEYXRhc2V0cyAgVHJ1ZSB0byBjbGVhciBuZXR3b3JrIGRhdGFzZXRzLCBGYWxzZSBub3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBwcm90b2NvbCBvcGVyYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0b3AoYm9vbCBhQ2xlYXJOZXR3b3JrRGF0YXNldHMpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVzdG9yZXMgbmV0d29yayBpbmZvcm1hdGlvbiBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJlc3RvcmUgdGhlIG5ldHdvcmsgaW5mb3JtYXRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIFRoZXJlIGlzIG5vIHZhbGlkIG5ldHdvcmsgaW5mb3JtYXRpb24gc3RvcmVkIGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlc3RvcmUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9yZXMgbmV0d29yayBpbmZvcm1hdGlvbiBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHN0b3JlIHRoZSBuZXR3b3JrIGluZm9ybWF0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICBDb3VsZCBub3Qgc3RvcmUgdGhlIG5ldHdvcmsgaW5mb3JtYXRpb24gZHVlIHRvIGluc3VmZmljaWVudCBtZW1vcnkgc3BhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0b3JlKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCBvbiByZWNlaXZpbmcgYW4gTUxFIERpc2NvdmVyeSBSZXNwb25zZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlc3VsdCAgIEEgdmFsaWQgcG9pbnRlciB0byB0aGUgRGlzY292ZXJ5IFJlc3BvbnNlIGluZm9ybWF0aW9uIG9yIE5VTEwgd2hlbiB0aGUgRGlzY292ZXJ5IGNvbXBsZXRlcy4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIHZvaWQgKCpEaXNjb3ZlckhhbmRsZXIpKG90QWN0aXZlU2NhblJlc3VsdCAqYVJlc3VsdCwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhdGVzIGEgVGhyZWFkIERpc2NvdmVyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTY2FuQ2hhbm5lbHMgICAgICAgICAgQSBiaXQgdmVjdG9yIGluZGljYXRpbmcgd2hpY2ggY2hhbm5lbHMgdG8gc2Nhbi4KKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgICAgICAgICAgICAgICAgIFRoZSBQQU4gSUQgZmlsdGVyIChzZXQgdG8gQnJvYWRjYXN0IFBBTiB0byBkaXNhYmxlIGZpbHRlcikuCisgICAgICogQHBhcmFtW2luXSAgYUpvaW5lciAgICAgICAgICAgICAgICBWYWx1ZSBvZiB0aGUgSm9pbmVyIEZsYWcgaW4gdGhlIERpc2NvdmVyeSBSZXF1ZXN0IFRMVi4KKyAgICAgKiBAcGFyYW1baW5dICBhRW5hYmxlRXVpNjRGaWx0ZXJpbmcgIEVuYWJsZSBmaWx0ZXJpbmcgb3V0IE1MRSBkaXNjb3ZlcnkgcmVzcG9uc2VzIHRoYXQgZG9uJ3QgbWF0Y2ggb3VyIGZhY3RvcnkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbmVkIEVVSTY0LgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb24gcmVjZWl2aW5nIGFuIE1MRSBEaXNjb3ZlcnkgUmVzcG9uc2UuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIGEgVGhyZWFkIERpc2NvdmVyeS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0JVU1kgIFRocmVhZCBEaXNjb3ZlcnkgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRGlzY292ZXIodWludDMyX3QgYVNjYW5DaGFubmVscywgdWludDE2X3QgYVBhbklkLCBib29sIGFKb2luZXIsIGJvb2wgYUVuYWJsZUV1aTY0RmlsdGVyaW5nLAorICAgICAgICAgICAgICAgICAgICAgRGlzY292ZXJIYW5kbGVyIGFDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhbiBNTEUgVGhyZWFkIERpc2NvdmVyeSBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGFuIE1MRSBUaHJlYWQgRGlzY292ZXJ5IGlzIGluIHByb2dyZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRGlzY292ZXJJblByb2dyZXNzKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBNZXNoRm9yd2FyZGVyIHRvIGluZGljYXRlIHRoYXQgZGlzY292ZXJ5IGlzIGNvbXBsZXRlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBIYW5kbGVEaXNjb3ZlckNvbXBsZXRlKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGFuIE1MRSBBbm5vdW5jZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoYW5uZWwgICAgICAgIFRoZSBjaGFubmVsIHRvIHVzZSB3aGVuIHRyYW5zbWl0dGluZy4KKyAgICAgKiBAcGFyYW1baW5dICBhT3JwaGFuQW5ub3VuY2UgVG8gaW5kaWNhdGUgaWYgTUxFIEFubm91bmNlIGlzIHNlbnQgZnJvbSBhbiBvcnBoYW4gZW5kIGRldmljZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBhbiBNTEUgQW5ub3VuY2UgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIHRvIGdlbmVyYXRlIHRoZSBNTEUgQW5ub3VuY2UgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZEFubm91bmNlKHVpbnQ4X3QgYUNoYW5uZWwsIGJvb2wgYU9ycGhhbkFubm91bmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNhdXNlcyB0aGUgVGhyZWFkIGludGVyZmFjZSB0byBkZXRhY2ggZnJvbSB0aGUgVGhyZWFkIG5ldHdvcmsuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBkZXRhY2hlZCBmcm9tIHRoZSBUaHJlYWQgbmV0d29yay4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIE1MRSBpcyBEaXNhYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQmVjb21lRGV0YWNoZWQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjYXVzZXMgdGhlIFRocmVhZCBpbnRlcmZhY2UgdG8gYXR0ZW1wdCBhbiBNTEUgYXR0YWNoLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1vZGUgIEluZGljYXRlcyB3aGF0IHBhcnRpdGlvbnMgdG8gYXR0YWNoIHRvLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgYmVnYW4gdGhlIGF0dGFjaCBwcm9jZXNzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgTUxFIGlzIERpc2FibGVkLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQlVTWSAgICAgICAgICAgQW4gYXR0YWNoIHByb2Nlc3MgaXMgaW4gcHJvZ3Jlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEJlY29tZUNoaWxkKEF0dGFjaE1vZGUgYU1vZGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUaHJlYWQgZGV2aWNlIGlzIGF0dGFjaGVkIHRvIGEgVGhyZWFkIG5ldHdvcmsuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBBdHRhY2hlZCB0byBhIFRocmVhZCBuZXR3b3JrLgorICAgICAqIEByZXR2YWwgRkFMU0UgIE5vdCBhdHRhY2hlZCB0byBhIFRocmVhZCBuZXR3b3JrLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0F0dGFjaGVkKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBUaHJlYWQgaW50ZXJmYWNlIHN0YXRlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgVGhyZWFkIGludGVyZmFjZSBzdGF0ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RGV2aWNlUm9sZSBHZXRSb2xlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Sb2xlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBEZXZpY2UgTW9kZSBhcyByZXBvcnRlZCBpbiB0aGUgTW9kZSBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRGV2aWNlIE1vZGUgYXMgcmVwb3J0ZWQgaW4gdGhlIE1vZGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXREZXZpY2VNb2RlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1EZXZpY2VNb2RlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGRldmljZSBpcyBhIE1pbmltYWwgRW5kIERldmljZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgdGhlIGRldmljZSBpcyBhIE1pbmltYWwgRW5kIERldmljZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc01pbmltYWxFbmREZXZpY2Uodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gKG1EZXZpY2VNb2RlICYgKE1vZGVUbHY6OmtNb2RlRkZEIHwgTW9kZVRsdjo6a01vZGVSeE9uV2hlbklkbGUpKSAhPQorICAgICAgICAgICAgICAgKE1vZGVUbHY6OmtNb2RlRkZEIHwgTW9kZVRsdjo6a01vZGVSeE9uV2hlbklkbGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERldmljZSBNb2RlIGFzIHJlcG9ydGVkIGluIHRoZSBNb2RlIFRMVi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBNb2RlIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG1vZGUgY29tYmluYXRpb24gc3BlY2lmaWVkIGluIEBwIGFNb2RlIGlzIGludmFsaWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldERldmljZU1vZGUodWludDhfdCBhTW9kZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgTWVzaCBMb2NhbCBQcmVmaXguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIE1lc2ggTG9jYWwgUHJlZml4LgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0TWVzaExvY2FsUHJlZml4KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTWVzaCBMb2NhbCBQcmVmaXguCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4ICBBIHBvaW50ZXIgdG8gdGhlIE1lc2ggTG9jYWwgUHJlZml4LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBNZXNoIExvY2FsIFByZWZpeC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0TWVzaExvY2FsUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFQcmVmaXgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIGxpbmstbG9jYWwgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIFRoZSBUaHJlYWQgbGluayBsb2NhbCBhZGRyZXNzIGlzIGRlcml2ZWQgdXNpbmcgSUVFRTgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MgYXMgSW50ZXJmYWNlIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIGxpbmsgbG9jYWwgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IElwNjo6QWRkcmVzcyAmR2V0TGlua0xvY2FsQWRkcmVzcyh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGxpbmsgbG9jYWwgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIENhbGwgdGhpcyBtZXRob2Qgd2hlbiB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzIGhhcyBjaGFuZ2VkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgdXBkYXRlZCB0aGUgbGluayBsb2NhbCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBVcGRhdGVMaW5rTG9jYWxBZGRyZXNzKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxpbmstbG9jYWwgYWxsIFRocmVhZCBub2RlcyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbGluay1sb2NhbCBhbGwgVGhyZWFkIG5vZGVzIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgSXA2OjpBZGRyZXNzICpHZXRMaW5rTG9jYWxBbGxUaHJlYWROb2Rlc0FkZHJlc3Modm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcmVhbG0tbG9jYWwgYWxsIFRocmVhZCBub2RlcyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgcmVhbG0tbG9jYWwgYWxsIFRocmVhZCBub2RlcyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IElwNjo6QWRkcmVzcyAqR2V0UmVhbG1Mb2NhbEFsbFRocmVhZE5vZGVzQWRkcmVzcyh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgd2hlbiBvcGVyYXRpbmcgaW4gRW5kIERldmljZSBtb2RlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBwYXJlbnQuCisgICAgICoKKyAgICAgKi8KKyAgICBSb3V0ZXIgKkdldFBhcmVudCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhbiBJUHY2IGFkZHJlc3MgaXMgYW4gUkxPQy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIEBwIGFBZGRyZXNzIGlzIGFuIFJMT0MuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgQHAgYUFkZHJlc3MgaXMgbm90IGFuIFJMT0MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUm91dGluZ0xvY2F0b3IoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYW4gSVB2NiBhZGRyZXNzIGlzIGFuIEFMT0MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiBAcCBhQWRkcmVzcyBpcyBhbiBBTE9DLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIEBwIGFBZGRyZXNzIGlzIG5vdCBhbiBBTE9DLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0FueWNhc3RMb2NhdG9yKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGFuIElQdjYgYWRkcmVzcyBpcyBhIE1lc2ggTG9jYWwgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIEBwIGFBZGRyZXNzIGlzIGEgTWVzaCBMb2NhbCBBZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIEBwIGFBZGRyZXNzIGlzIG5vdCBhIE1lc2ggTG9jYWwgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNNZXNoTG9jYWxBZGRyZXNzKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTUxFIFRpbWVvdXQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTUxFIFRpbWVvdXQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRUaW1lb3V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1UaW1lb3V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNTEUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0VGltZW91dCh1aW50MzJfdCBhVGltZW91dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSTE9DMTYgYXNzaWduZWQgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUkxPQzE2IGFzc2lnbmVkIHRvIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UmxvYzE2KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgUkxPQyBhc3NpZ25lZCB0byB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBSTE9DIGFzc2lnbmVkIHRvIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgSXA2OjpBZGRyZXNzICZHZXRNZXNoTG9jYWwxNih2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIE1MLUVJRCBhc3NpZ25lZCB0byB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBNTC1FSUQgYXNzaWduZWQgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBJcDY6OkFkZHJlc3MgJkdldE1lc2hMb2NhbDY0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUm91dGVyIElEIG9mIHRoZSBMZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUm91dGVyIElEIG9mIHRoZSBMZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExlYWRlcklkKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSBMZWFkZXIncyBSTE9DLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgTGVhZGVyJ3MgUkxPQy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIExlYWRlcidzIFJMT0MuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9ERVRBQ0hFRCAgVGhlIFRocmVhZCBpbnRlcmZhY2UgaXMgbm90IGN1cnJlbnRseSBhdHRhY2hlZCB0byBhIFRocmVhZCBQYXJ0aXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldExlYWRlckFkZHJlc3MoSXA2OjpBZGRyZXNzICZhQWRkcmVzcykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIExlYWRlcidzIEFMT0MuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBMZWFkZXIncyBBTE9DLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgTGVhZGVyJ3MgQUxPQy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0RFVEFDSEVEICBUaGUgVGhyZWFkIGludGVyZmFjZSBpcyBub3QgY3VycmVudGx5IGF0dGFjaGVkIHRvIGEgVGhyZWFkIFBhcnRpdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0TGVhZGVyQWxvYyhJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgTGVhZGVyJ3MgQUxPQyB0byBpdHMgVGhyZWFkIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgTGVhZGVyJ3MgQUxPQy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0JVU1kgICAgICAgICAgICBUaGUgTGVhZGVyJ3MgQUxPQyBhZGRyZXNzIHdhcyBhbHJlYWR5IGFkZGVkLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgIFRoZSBkZXZpY2UncyByb2xlIGlzIG5vdCBMZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFkZExlYWRlckFsb2Modm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBtb3N0IHJlY2VudGx5IHJlY2VpdmVkIExlYWRlciBEYXRhIFRMVi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgbW9zdCByZWNlbnRseSByZWNlaXZlZCBMZWFkZXIgRGF0YSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBMZWFkZXJEYXRhVGx2ICZHZXRMZWFkZXJEYXRhVGx2KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgTGVhZGVyIERhdGEuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYUxlYWRlckRhdGEgIEEgcmVmZXJlbmNlIHRvIHdoZXJlIHRoZSBsZWFkZXIgZGF0YSBpcyBwbGFjZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBsZWFkZXIgZGF0YS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0RFVEFDSEVEICAgICBOb3QgY3VycmVudGx5IGF0dGFjaGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRMZWFkZXJEYXRhKG90TGVhZGVyRGF0YSAmYUxlYWRlckRhdGEpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbGluayBxdWFsaXR5IG9uIHRoZSBsaW5rIHRvIGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNYWNBZGRyICBUaGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBNYWMgQWRkcmVzcy4KKyAgICAgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgQSByZWZlcmVuY2UgdG8gdGhlIGFzc2lnbmVkIGxpbmsgcXVhbGl0eS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmUgdGhlIGxpbmsgcXVhbGl0eSB0byBhTGlua1F1YWxpdHkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIE5vIG1hdGNoIGZvdW5kIHdpdGggYSBnaXZlbiBleHRlbmRlZCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRBc3NpZ25MaW5rUXVhbGl0eShjb25zdCBNYWM6OkV4dEFkZHJlc3MgYU1hY0FkZHIsIHVpbnQ4X3QgJmFMaW5rUXVhbGl0eSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBsaW5rIHF1YWxpdHkgb24gdGhlIGxpbmsgdG8gYSBnaXZlbiBleHRlbmRlZCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1hY0FkZHIgIFRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIE1hYyBBZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rUWF1bGl0eSBUaGUgbGluayBxdWFsaXR5IHRvIGJlIHNldCBvbiB0aGUgbGluay4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QXNzaWduTGlua1F1YWxpdHkoY29uc3QgTWFjOjpFeHRBZGRyZXNzIGFNYWNBZGRyLCB1aW50OF90IGFMaW5rUXVhbGl0eSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDaGlsZCBJRCBwb3J0aW9uIG9mIGFuIFJMT0MxNi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQ2hpbGQgSUQgcG9ydGlvbiBvZiBhbiBSTE9DMTYuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDE2X3QgR2V0Q2hpbGRJZCh1aW50MTZfdCBhUmxvYzE2KSB7IHJldHVybiBhUmxvYzE2ICYga01heENoaWxkSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJvdXRlciBJRCBwb3J0aW9uIG9mIGFuIFJMT0MxNi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUm91dGVyIElEIHBvcnRpb24gb2YgYW4gUkxPQzE2LgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHVpbnQ4X3QgR2V0Um91dGVySWQodWludDE2X3QgYVJsb2MxNikgeyByZXR1cm4gYVJsb2MxNiA+PiBrUm91dGVySWRPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJMT0MxNiBvZiBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgVGhlIFJvdXRlciBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSTE9DMTYgb2YgdGhlIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MTZfdCBHZXRSbG9jMTYodWludDhfdCBhUm91dGVySWQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90PihhUm91dGVySWQgPDwga1JvdXRlcklkT2Zmc2V0KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IEBwIGFSbG9jMTYgcmVmZXJzIHRvIGFuIGFjdGl2ZSByb3V0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgQHAgYVJsb2MxNiByZWZlcnMgdG8gYW4gYWN0aXZlIHJvdXRlci4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiBAcCBhUmxvYzE2IGRvZXMgbm90IHJlZmVyIHRvIGFuIGFjdGl2ZSByb3V0ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgYm9vbCBJc0FjdGl2ZVJvdXRlcih1aW50MTZfdCBhUmxvYzE2KSB7IHJldHVybiBHZXRDaGlsZElkKGFSbG9jMTYpID09IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZpbGxzIHRoZSBOZXR3b3JrRGF0YVRsdi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdIGFUbHYgICAgICAgICBUaGUgTmV0d29ya0RhdGFUbHYuCisgICAgICogQHBhcmFtW2luXSAgYVN0YWJsZU9ubHkgIFRSVUUgdG8gYXBwZW5kIHN0YWJsZSBkYXRhLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEZpbGxOZXR3b3JrRGF0YVRsdihOZXR3b3JrRGF0YVRsdiAmYVRsdiwgYm9vbCBhU3RhYmxlT25seSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBzZW5kIHF1ZXVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIHNlbmQgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBNZXNzYWdlUXVldWUgJkdldE1lc3NhZ2VRdWV1ZSh2b2lkKSBjb25zdCB7IHJldHVybiBtRGVsYXllZFJlc3BvbnNlczsgfQorCitwcm90ZWN0ZWQ6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01sZU1heFJlc3BvbnNlRGVsYXkgPSAxMDAwdSwgIC8vLzwgTWF4aW11bSBkZWxheSBiZWZvcmUgcmVzcG9uZGluZyB0byBhIG11bHRpY2FzdCByZXF1ZXN0LgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhbGxvY2F0ZXMgYSBuZXcgbWVzc2FnZSBidWZmZXIgZm9yIHByZXBhcmluZyBhbiBNTEUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBvciBOVUxMIGlmIGluc3VmZmljaWVudCBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZS4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2UgKk5ld01sZU1lc3NhZ2Uodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGFuIE1MRSBoZWFkZXIgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb21tYW5kICBUaGUgTUxFIENvbW1hbmQgVHlwZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBoZWFkZXIuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZEhlYWRlcihNZXNzYWdlICZhTWVzc2FnZSwgSGVhZGVyOjpDb21tYW5kIGFDb21tYW5kKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBTb3VyY2UgQWRkcmVzcyBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIFNvdXJjZSBBZGRyZXNzIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIFNvdXJjZSBBZGRyZXNzIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kU291cmNlQWRkcmVzcyhNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgTW9kZSBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNb2RlICAgICBUaGUgRGV2aWNlIE1vZGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgTW9kZSBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBNb2RlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kTW9kZShNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCBhTW9kZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgVGltZW91dCBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFUaW1lb3V0ICBUaGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBUaW1lb3V0IFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIFRpbWVvdXQgVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRUaW1lb3V0KE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MzJfdCBhVGltZW91dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgQ2hhbGxlbmdlIFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ2hhbGxlbmdlICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIENoYWxsZW5nZSB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ2hhbGxlbmdlTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIHRoZSBDaGFsbGVuZ2UgdmFsdWUgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgQ2hhbGxlbmdlIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIENoYWxsZW5nZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZENoYWxsZW5nZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgdWludDhfdCAqYUNoYWxsZW5nZSwgdWludDhfdCBhQ2hhbGxlbmdlTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBSZXNwb25zZSBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhUmVzcG9uc2UgICAgICAgIEEgcG9pbnRlciB0byB0aGUgUmVzcG9uc2UgdmFsdWUuCisgICAgICogQHBhcmFtW2luXSAgYVJlc3BvbnNlTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIHRoZSBSZXNwb25zZSB2YWx1ZSBpbiBieXRlcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBSZXNwb25zZSBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBSZXNwb25zZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZFJlc3BvbnNlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCB1aW50OF90ICphUmVzcG9uc2UsIHVpbnQ4X3QgYVJlc3BvbnNlTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBMaW5rIEZyYW1lIENvdW50ZXIgVExWIHRvIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBMaW5rIEZyYW1lIENvdW50ZXIgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFwcGVuZCB0aGUgTGluayBGcmFtZSBDb3VudGVyIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kTGlua0ZyYW1lQ291bnRlcihNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGFuIE1MRSBGcmFtZSBDb3VudGVyIFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgRnJhbWUgQ291bnRlciBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBNTEUgRnJhbWUgQ291bnRlciBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZE1sZUZyYW1lQ291bnRlcihNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGFuIEFkZHJlc3MxNiBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgICBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIEFkZHJlc3MxNiBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBBZGRyZXNzMTYgVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRBZGRyZXNzMTYoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFSbG9jMTYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIE5ldHdvcmsgRGF0YSBUTFYgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYVN0YWJsZU9ubHkgIFRSVUUgdG8gYXBwZW5kIHN0YWJsZSBkYXRhLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgTmV0d29yayBEYXRhIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIE5ldHdvcmsgRGF0YSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZE5ldHdvcmtEYXRhKE1lc3NhZ2UgJmFNZXNzYWdlLCBib29sIGFTdGFibGVPbmx5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBUTFYgUmVxdWVzdCBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFUbHZzICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGxpc3Qgb2YgVExWIHR5cGVzLgorICAgICAqIEBwYXJhbVtpbl0gIGFUbHZzTGVuZ3RoICBUaGUgbnVtYmVyIG9mIFRMViB0eXBlcyBpbiBAcCBhVGx2cworICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIFRMViBSZXF1ZXN0IFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIFRMViBSZXF1ZXN0IFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVGx2UmVxdWVzdChNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIExlYWRlciBEYXRhIFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgTGVhZGVyIERhdGEgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFwcGVuZCB0aGUgTGVhZGVyIERhdGEgVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRMZWFkZXJEYXRhKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBTY2FuIE1hc2sgVExWIHRvIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYVNjYW5NYXNrICBUaGUgU2NhbiBNYXNrIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIFNjYW4gTWFzayBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBTY2FuIE1hc2sgVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRTY2FuTWFzayhNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCBhU2Nhbk1hc2spOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIFN0YXR1cyBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGF0dXMgICBUaGUgU3RhdHVzIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIFN0YXR1cyBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBTdGF0dXMgVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRTdGF0dXMoTWVzc2FnZSAmYU1lc3NhZ2UsIFN0YXR1c1Rsdjo6U3RhdHVzIGFTdGF0dXMpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIExpbmsgTWFyZ2luIFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUxpbmtNYXJnaW4gIFRoZSBMaW5rIE1hcmdpbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBMaW5rIE1hcmdpbiBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBMaW5rIE1hcmdpbiBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZExpbmtNYXJnaW4oTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQ4X3QgYUxpbmtNYXJnaW4pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIFZlcnNpb24gVExWIHRvIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBWZXJzaW9uIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIFZlcnNpb24gVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRWZXJzaW9uKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYW4gQWRkcmVzcyBSZWdpc3RyYXRpb24gVExWIHRvIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBBZGRyZXNzIFJlZ2lzdHJhdGlvbiBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBBZGRyZXNzIFJlZ2lzdHJhdGlvbiBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZEFkZHJlc3NSZWdpc3RyYXRpb24oTWVzc2FnZSAmYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIEFjdGl2ZSBUaW1lc3RhbXAgVExWIHRvIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBBY3RpdmUgVGltZXN0YW1wIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIEFjdGl2ZSBUaW1lc3RhbXAgVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRBY3RpdmVUaW1lc3RhbXAoTWVzc2FnZSAmYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIFBlbmRpbmcgVGltZXN0YW1wIFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgUGVuZGluZyBUaW1lc3RhbXAgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFwcGVuZCB0aGUgUGVuZGluZyBUaW1lc3RhbXAgVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRQZW5kaW5nVGltZXN0YW1wKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBUaHJlYWQgRGlzY292ZXJ5IFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgVGhyZWFkIERpc2NvdmVyeSBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBBZGRyZXNzIFJlZ2lzdHJhdGlvbiBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZERpc2NvdmVyeShNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIGRlc3RpbmF0aW9uIGlzIHJlYWNoYWJsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNoU291cmNlICBUaGUgUkxPQzE2IG9mIHRoZSBzb3VyY2UuCisgICAgICogQHBhcmFtW2luXSAgYU1lc2hEZXN0ICAgIFRoZSBSTE9DMTYgb2YgdGhlIGRlc3RpbmF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFJcDZIZWFkZXIgICBUaGUgSVB2NiBoZWFkZXIgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFRoZSBkZXN0aW5hdGlvbiBpcyByZWFjaGFibGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9EUk9QICBUaGUgZGVzdGluYXRpb24gaXMgbm90IHJlYWNoYWJsZSBhbmQgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRyb3BwZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIENoZWNrUmVhY2hhYmlsaXR5KHVpbnQxNl90IGFNZXNoU291cmNlLCB1aW50MTZfdCBhTWVzaERlc3QsIElwNjo6SGVhZGVyICZhSXA2SGVhZGVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZWlnaGJvciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBuZWlnaGJvciBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBOZWlnaGJvciAqR2V0TmVpZ2hib3IoY29uc3QgTWFjOjpBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmVpZ2hib3Igb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBNQUMgc2hvcnQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmVpZ2hib3Igb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTmVpZ2hib3IgKkdldE5laWdoYm9yKE1hYzo6U2hvcnRBZGRyZXNzIGFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZWlnaGJvciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyBleHRlbmRlZCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBuZWlnaGJvciBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBOZWlnaGJvciAqR2V0TmVpZ2hib3IoY29uc3QgTWFjOjpFeHRBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmVpZ2hib3Igb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5laWdoYm9yIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIE5laWdoYm9yICpHZXROZWlnaGJvcihjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKSB7IE9UX1VOVVNFRF9WQVJJQUJMRShhQWRkcmVzcyk7IHJldHVybiBOVUxMOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBuZXh0IGhvcCB0b3dhcmRzIGFuIFJMT0MxNiBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEZXN0aW5hdGlvbiAgVGhlIFJMT0MxNiBvZiB0aGUgZGVzdGluYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIFJMT0MxNiBvZiB0aGUgbmV4dCBob3AgaWYgYSByb3V0ZSBpcyBrbm93biwga0ludmFsaWRSbG9jMTYgb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgTWFjOjpTaG9ydEFkZHJlc3MgR2V0TmV4dEhvcCh1aW50MTZfdCBhRGVzdGluYXRpb24pIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGFuIE1MRSBEYXRhIFJlcXVlc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEZXN0aW5hdGlvbiAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgYWRkcmVzcyBvZiB0aGUgZGVzdGluYXRpb24uCisgICAgICogQHBhcmFtW2luXSAgYVRsdnMgICAgICAgICBBIHBvaW50ZXIgdG8gcmVxdWVzdGVkIFRMViB0eXBlcy4KKyAgICAgKiBAcGFyYW1baW5dICBhVGx2c0xlbmd0aCAgIFRoZSBudW1iZXIgb2YgVExWIHR5cGVzIGluIEBwIGFUbHZzLgorICAgICAqIEBwYXJhbVtpbl0gIGFEZWxheSAgICAgICAgRGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgRGF0YSBSZXF1ZXN0IG1lc3NhZ2UgaXMgc2VudC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBhbiBNTEUgRGF0YSBSZXF1ZXN0IG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyB0byBnZW5lcmF0ZSB0aGUgTUxFIERhdGEgUmVxdWVzdCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kRGF0YVJlcXVlc3QoY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24sIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFUbHZzTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFEZWxheSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYW4gTUxFIENoaWxkIFVwZGF0ZSBSZXF1ZXN0IG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQgYW4gTUxFIENoaWxkIFVwZGF0ZSBSZXF1ZXN0IG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyB0byBnZW5lcmF0ZSB0aGUgTUxFIENoaWxkIFVwZGF0ZSBSZXF1ZXN0IG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmRDaGlsZFVwZGF0ZVJlcXVlc3Qodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYW4gTUxFIENoaWxkIFVwZGF0ZSBSZXNwb25zZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRsdnMgICAgICAgICBBIHBvaW50ZXIgdG8gcmVxdWVzdGVkIFRMViB0eXBlcy4KKyAgICAgKiBAcGFyYW1baW5dICBhTnVtVGx2cyAgICAgIFRoZSBudW1iZXIgb2YgVExWIHR5cGVzIGluIEBwIGFUbHZzLgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFsbGVuZ2UgICAgVGhlIENoYWxsZW5nZSBUTFYgZm9yIHRoZSByZXNwb25zZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBhbiBNTEUgQ2hpbGQgVXBkYXRlIFJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyB0byBnZW5lcmF0ZSB0aGUgTUxFIENoaWxkIFVwZGF0ZSBSZXNwb25zZSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kQ2hpbGRVcGRhdGVSZXNwb25zZShjb25zdCB1aW50OF90ICphVGx2cywgdWludDhfdCBhTnVtVGx2cywgY29uc3QgQ2hhbGxlbmdlVGx2ICZhQ2hhbGxlbmdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN1Ym1pdHMgYW4gTUxFIG1lc3NhZ2UgdG8gdGhlIFVEUCBzb2NrZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFEZXN0aW5hdGlvbiAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgYWRkcmVzcyBvZiB0aGUgZGVzdGluYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzdWJtaXR0ZWQgdGhlIE1MRSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgdG8gZm9ybSB0aGUgcmVzdCBvZiB0aGUgTUxFIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmRNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSTE9DMTYgYXNzaWduZWQgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICBUaGUgUkxPQzE2IHRvIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgUkxPQzE2LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRSbG9jMTYodWludDE2X3QgYVJsb2MxNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBEZXZpY2UgU3RhdGUgdG8gRGV0YWNoZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIERldmljZSBTdGF0ZSB0byBEZXRhY2hlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0U3RhdGVEZXRhY2hlZCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERldmljZSBTdGF0ZSB0byBDaGlsZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgRGV2aWNlIFN0YXRlIHRvIENoaWxkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRTdGF0ZUNoaWxkKHVpbnQxNl90IGFSbG9jMTYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGVhZGVyJ3MgUGFydGl0aW9uIElELCBXZWlnaHRpbmcsIGFuZCBSb3V0ZXIgSUQgdmFsdWVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBhcnRpdGlvbklkICAgICBUaGUgTGVhZGVyJ3MgUGFydGl0aW9uIElEIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFXZWlnaHRpbmcgICAgICAgVGhlIExlYWRlcidzIFdlaWdodGluZyB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVhZGVyUm91dGVySWQgIFRoZSBMZWFkZXIncyBSb3V0ZXIgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExlYWRlckRhdGEodWludDMyX3QgYVBhcnRpdGlvbklkLCB1aW50OF90IGFXZWlnaHRpbmcsIHVpbnQ4X3QgYUxlYWRlclJvdXRlcklkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBtZXNzYWdlIHRvIHRoZSBtZXNzYWdlIHF1ZXVlLiBUaGUgcXVldWVkIG1lc3NhZ2Ugd2lsbCBiZSB0cmFuc21pdHRlZCBhZnRlciBnaXZlbiBkZWxheS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgVGhlIG1lc3NhZ2UgdG8gdHJhbnNtaXQgYWZ0ZXIgZ2l2ZW4gZGVsYXkuCisgICAgICogQHBhcmFtW2luXSAgYURlc3RpbmF0aW9uICBUaGUgSVB2NiBhZGRyZXNzIG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYURlbGF5ICAgICAgICBUaGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0cmFuc21pc3Npb24gb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBxdWV1ZWQgdGhlIG1lc3NhZ2UgdG8gdHJhbnNtaXQgYWZ0ZXIgdGhlIGRlbGF5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgdG8gcXVldWUgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFkZERlbGF5ZWRSZXNwb25zZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24sIHVpbnQxNl90IGFEZWxheSk7CisKKyAgICBMZWFkZXJEYXRhVGx2IG1MZWFkZXJEYXRhOyAgICAgICAgICAgICAgLy8vPCBMYXN0IHJlY2VpdmVkIExlYWRlciBEYXRhIFRMVi4KKyAgICBib29sIG1SZXRyaWV2ZU5ld05ldHdvcmtEYXRhOyAgICAgICAgICAgLy8vPCBJbmRpY2F0aW5nIG5ldyBOZXR3b3JrIERhdGEgaXMgbmVlZGVkIGlmIHNldC4KKworICAgIG90RGV2aWNlUm9sZSBtUm9sZTsgICAgICAgICAgICAgICAgICAgICAvLy88IEN1cnJlbnQgVGhyZWFkIHJvbGUuCisgICAgUm91dGVyIG1QYXJlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUGFyZW50IGluZm9ybWF0aW9uLgorICAgIHVpbnQ4X3QgbURldmljZU1vZGU7ICAgICAgICAgICAgICAgICAgICAvLy88IERldmljZSBtb2RlIHNldHRpbmcuCisKKyAgICBib29sIGlzQXNzaWduTGlua1F1YWxpdHk7ICAgIC8vLzwgSW5kaWNhdGluZyBhbiBhc3NpZ25lZCBsaW5rIHF1YWxpdHkgaXMgdXNlZCBvbiB0aGUgbGluaworICAgIHVpbnQ4X3QgbUFzc2lnbkxpbmtRdWFsaXR5OyAgLy8vPCBUaGUgYXNzaWduZWQgbGluayBxdWFsaXR5IHZhbHVlCisgICAgdWludDhfdCBtQXNzaWduTGlua01hcmdpbjsgICAvLy88IFRoZSBtYXhpbXVtIGxpbmsgbWFyZ2luIGNvcnJlc3BvbmRpbmcgdG8gbUFzc2lnbkxpbmtRdWFsaXR5CisgICAgTWFjOjpFeHRBZGRyZXNzIG1BZGRyNjQ7ICAgICAvLy88IEEgZ2l2ZW4gSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzCisKKyAgICAvKioKKyAgICAgKiBTdGF0ZXMgd2hlbiBzZWFyY2hpbmcgZm9yIGEgcGFyZW50LgorICAgICAqCisgICAgICovCisgICAgZW51bSBQYXJlbnRSZXF1ZXN0U3RhdGUKKyAgICB7CisgICAgICAgIGtQYXJlbnRJZGxlLCAgICAgICAgICAgLy8vPCBOb3QgY3VycmVudGx5IHNlYXJjaGluZyBmb3IgYSBwYXJlbnQuCisgICAgICAgIGtQYXJlbnRTeW5jaHJvbml6ZSwgICAgLy8vPCBMb29raW5nIHRvIHN5bmNocm9uaXplIHdpdGggYSBwYXJlbnQgKGFmdGVyIHJlc2V0KS4KKyAgICAgICAga1BhcmVudFJlcXVlc3RTdGFydCwgICAvLy88IFN0YXJ0aW5nIHRvIGxvb2sgZm9yIGEgcGFyZW50LgorICAgICAgICBrUGFyZW50UmVxdWVzdFJvdXRlciwgIC8vLzwgU2VhcmNoaW5nIGZvciBhIFJvdXRlciB0byBhdHRhY2ggdG8uCisgICAgICAgIGtQYXJlbnRSZXF1ZXN0Q2hpbGQsICAgLy8vPCBTZWFyY2hpbmcgZm9yIFJvdXRlcnMgb3IgUkVFRHMgdG8gYXR0YWNoIHRvLgorICAgICAgICBrQ2hpbGRJZFJlcXVlc3QsICAgICAgIC8vLzwgU2VuZGluZyBhIENoaWxkIElEIFJlcXVlc3QgbWVzc2FnZS4KKyAgICB9OworICAgIFBhcmVudFJlcXVlc3RTdGF0ZSBtUGFyZW50UmVxdWVzdFN0YXRlOyAgLy8vPCBUaGUgcGFyZW50IHJlcXVlc3Qgc3RhdGUuCisKKyAgICAvKioKKyAgICAgKiBTdGF0ZXMgd2hlbiByZWF0dGFjaGluZyBuZXR3b3JrIHVzaW5nIHN0b3JlZCBkYXRhc2V0CisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIFJlYXR0YWNoU3RhdGUKKyAgICB7CisgICAgICAgIGtSZWF0dGFjaFN0b3AgICAgICAgPSAwLCAgIC8vLzwgUmVhdHRhY2ggcHJvY2VzcyBpcyBkaXNhYmxlZCBvciBmaW5pc2hlZAorICAgICAgICBrUmVhdHRhY2hTdGFydCAgICAgID0gMSwgICAvLy88IFN0YXJ0IHJlYXR0YWNoIHByb2Nlc3MKKyAgICAgICAga1JlYXR0YWNoQWN0aXZlICAgICA9IDIsICAgLy8vPCBSZWF0dGFjaCB1c2luZyBzdG9yZWQgQWN0aXZlIERhdGFzZXQKKyAgICAgICAga1JlYXR0YWNoUGVuZGluZyAgICA9IDMsICAgLy8vPCBSZWF0dGFjaCB1c2luZyBzdG9yZWQgUGVuZGluZyBEYXRhc2V0CisgICAgfTsKKyAgICBSZWF0dGFjaFN0YXRlIG1SZWF0dGFjaFN0YXRlOworCisgICAgVGltZXIgbVBhcmVudFJlcXVlc3RUaW1lcjsgICAgLy8vPCBUaGUgdGltZXIgZm9yIGRyaXZpbmcgdGhlIFBhcmVudCBSZXF1ZXN0IHByb2Nlc3MuCisgICAgVGltZXIgbURlbGF5ZWRSZXNwb25zZVRpbWVyOyAgLy8vPCBUaGUgdGltZXIgdG8gZGVsYXkgTUxFIHJlc3BvbnNlcy4KKyAgICB1aW50OF90IG1MYXN0UGFydGl0aW9uUm91dGVySWRTZXF1ZW5jZTsKKyAgICB1aW50MzJfdCBtTGFzdFBhcnRpdGlvbklkOworCitwcm90ZWN0ZWQ6CisgICAgdWludDhfdCBtUGFyZW50TGVhZGVyQ29zdDsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWxlTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZTo6a1ByaW9yaXR5SGlnaCwKKyAgICB9OworCisgICAgdm9pZCBHZW5lcmF0ZU5vbmNlKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYU1hY0FkZHIsIHVpbnQzMl90IGFGcmFtZUNvdW50ZXIsIHVpbnQ4X3QgYVNlY3VyaXR5TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFOb25jZSk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCh1aW50MzJfdCBhRmxhZ3MsIHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIEhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKHVpbnQzMl90IGFGbGFncyk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlUGFyZW50UmVxdWVzdFRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlUGFyZW50UmVxdWVzdFRpbWVyKHZvaWQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZURlbGF5ZWRSZXNwb25zZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlRGVsYXllZFJlc3BvbnNlVGltZXIodm9pZCk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVVkcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlU2VuZENoaWxkVXBkYXRlUmVxdWVzdChUYXNrbGV0ICZhVGFza2xldCk7CisgICAgdm9pZCBIYW5kbGVTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KHZvaWQpOworCisgICAgb3RFcnJvciBIYW5kbGVBZHZlcnRpc2VtZW50KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgSGFuZGxlQ2hpbGRJZFJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgSGFuZGxlQ2hpbGRVcGRhdGVSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgSGFuZGxlQ2hpbGRVcGRhdGVSZXNwb25zZShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBvdEVycm9yIEhhbmRsZURhdGFSZXNwb25zZShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBvdEVycm9yIEhhbmRsZVBhcmVudFJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2UpOworICAgIG90RXJyb3IgSGFuZGxlQW5ub3VuY2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBIYW5kbGVEaXNjb3ZlcnlSZXNwb25zZShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBvdEVycm9yIEhhbmRsZUxlYWRlckRhdGEoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBvdEVycm9yIFNlbmRQYXJlbnRSZXF1ZXN0KHZvaWQpOworICAgIG90RXJyb3IgU2VuZENoaWxkSWRSZXF1ZXN0KHZvaWQpOworICAgIHZvaWQgU2VuZE9ycGhhbkFubm91bmNlKHZvaWQpOworCisgICAgYm9vbCBJc0JldHRlclBhcmVudCh1aW50MTZfdCBhUmxvYzE2LCB1aW50OF90IGFMaW5rUXVhbGl0eSwgQ29ubmVjdGl2aXR5VGx2ICZhQ29ubmVjdGl2aXR5VGx2KTsKKyAgICB2b2lkIFJlc2V0UGFyZW50Q2FuZGlkYXRlKHZvaWQpOworCisgICAgc3RhdGljIE1sZSAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgTWVzc2FnZVF1ZXVlIG1EZWxheWVkUmVzcG9uc2VzOworCisgICAgc3RydWN0CisgICAgeworICAgICAgICB1aW50OF90IG1DaGFsbGVuZ2VbQ2hhbGxlbmdlVGx2OjprTWF4U2l6ZV07CisgICAgICAgIHVpbnQ4X3QgbUNoYWxsZW5nZUxlbmd0aDsKKyAgICB9IG1DaGlsZElkUmVxdWVzdDsKKworICAgIHN0cnVjdAorICAgIHsKKyAgICAgICAgdWludDhfdCBtQ2hhbGxlbmdlW0NoYWxsZW5nZVRsdjo6a01heFNpemVdOworICAgIH0gbVBhcmVudFJlcXVlc3Q7CisKKyAgICBBdHRhY2hNb2RlIG1QYXJlbnRSZXF1ZXN0TW9kZTsKKyAgICBpbnQ4X3QgbVBhcmVudFByaW9yaXR5OworICAgIHVpbnQ4X3QgbVBhcmVudExpbmtRdWFsaXR5MzsKKyAgICB1aW50OF90IG1QYXJlbnRMaW5rUXVhbGl0eTI7CisgICAgdWludDhfdCBtUGFyZW50TGlua1F1YWxpdHkxOworICAgIHVpbnQ4X3QgbUNoaWxkVXBkYXRlQXR0ZW1wdHM7CisgICAgTGVhZGVyRGF0YVRsdiBtUGFyZW50TGVhZGVyRGF0YTsKKyAgICBib29sIG1QYXJlbnRJc1NpbmdsZXRvbjsKKworICAgIFJvdXRlciBtUGFyZW50Q2FuZGlkYXRlOworCisgICAgSXA2OjpVZHBTb2NrZXQgbVNvY2tldDsKKyAgICB1aW50MzJfdCBtVGltZW91dDsKKworICAgIFRhc2tsZXQgbVNlbmRDaGlsZFVwZGF0ZVJlcXVlc3Q7CisKKyAgICBEaXNjb3ZlckhhbmRsZXIgbURpc2NvdmVySGFuZGxlcjsKKyAgICB2b2lkICptRGlzY292ZXJDb250ZXh0OworICAgIGJvb2wgbUlzRGlzY292ZXJJblByb2dyZXNzOworICAgIGJvb2wgbUVuYWJsZUV1aTY0RmlsdGVyaW5nOworCisgICAgdWludDhfdCBtQW5ub3VuY2VDaGFubmVsOworICAgIHVpbnQ4X3QgbVByZXZpb3VzQ2hhbm5lbDsKKyAgICB1aW50MTZfdCBtUHJldmlvdXNQYW5JZDsKKworICAgIElwNjo6TmV0aWZVbmljYXN0QWRkcmVzcyBtTGVhZGVyQWxvYzsKKworICAgIElwNjo6TmV0aWZVbmljYXN0QWRkcmVzcyBtTGlua0xvY2FsNjQ7CisgICAgSXA2OjpOZXRpZlVuaWNhc3RBZGRyZXNzIG1NZXNoTG9jYWw2NDsKKyAgICBJcDY6Ok5ldGlmVW5pY2FzdEFkZHJlc3MgbU1lc2hMb2NhbDE2OworICAgIElwNjo6TmV0aWZNdWx0aWNhc3RBZGRyZXNzIG1MaW5rTG9jYWxBbGxUaHJlYWROb2RlczsKKyAgICBJcDY6Ok5ldGlmTXVsdGljYXN0QWRkcmVzcyBtUmVhbG1Mb2NhbEFsbFRocmVhZE5vZGVzOworCisgICAgSXA2OjpOZXRpZkNhbGxiYWNrIG1OZXRpZkNhbGxiYWNrOworfTsKKworfSAgLy8gbmFtZXNwYWNlIE1sZQorCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1MRV9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbWxlX2NvbnN0YW50cy5ocHAgYi9zcmMvY29yZS90aHJlYWQvbWxlX2NvbnN0YW50cy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiYTZmOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9tbGVfY29uc3RhbnRzLmhwcApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIE1MRSBmdW5jdGlvbmFsaXR5IHJlcXVpcmVkIGJ5IHRoZSBUaHJlYWQgQ2hpbGQsIFJvdXRlciwgYW5kIExlYWRlciByb2xlcy4KKyAqLworCisjaWZuZGVmIE1MRV9DT05TVEFOVFNfSFBQXworI2RlZmluZSBNTEVfQ09OU1RBTlRTX0hQUF8KKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNbGUgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbWxlLWNvcmUKKyAqCisgKi8KKworZW51bQoreworICAgIGtNYXhDaGlsZHJlbiAgICAgICAgICAgICAgICA9IE9QRU5USFJFQURfQ09ORklHX01BWF9DSElMRFJFTiwKKyAgICBrTWF4Q2hpbGRLZWVwQWxpdmVBdHRlbXB0cyAgPSA0LCAgICAvLy88IE1heGltdW0ga2VlcCBhbGl2ZSBhdHRlbXB0cyBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWF0dGFjaCB0byBhIG5ldyBQYXJlbnQKKyAgICBrRmFpbGVkQ2hpbGRUcmFuc21pc3Npb25zICAgPSA0LCAgICAvLy88IEZBSUxFRF9DSElMRF9UUkFOU01JU1NJT05TCit9OworCisvKioKKyAqIE1MRSBQcm90b2NvbCBDb25zdGFudHMKKyAqCisgKi8KK2VudW0KK3sKKyAgICBrVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgLy8vPCBNTEUgVmVyc2lvbgorICAgIGtVZHBQb3J0ICAgICAgICAgICAgICAgICAgICAgICA9IDE5Nzg4LCAvLy88IE1MRSBVRFAgUG9ydAorICAgIGtQYXJlbnRSZXF1ZXN0Um91dGVyVGltZW91dCAgICA9IDc1MCwgICAvLy88IFJvdXRlciBSZXF1ZXN0IHRpbWVvdXQKKyAgICBrUGFyZW50UmVxdWVzdENoaWxkVGltZW91dCAgICAgPSAxMjUwLCAgLy8vPCBFbmQgRGV2aWNlIFJlcXVlc3QgdGltZW91dAorICAgIGtQYXJlbnRSZXNwb25zZU1heERlbGF5Um91dGVycyA9IDUwMCwgICAvLy88IE1heGltdW0gZGVsYXkgZm9yIHJlc3BvbnNlIGZvciBQYXJlbnQgUmVxdWVzdCBzZW50IHRvIHJvdXRlcnMgb25seQorICAgIGtQYXJlbnRSZXNwb25zZU1heERlbGF5QWxsICAgICA9IDEwMDAsICAvLy88IE1heGltdW0gZGVsYXkgZm9yIHJlc3BvbnNlIGZvciBQYXJlbnQgUmVxdWVzdCBzZW50IHRvIGFsbCBkZXZpY2VzCisgICAga1VuaWNhc3RSZXRyYW5zbWlzc2lvbkRlbGF5ICAgID0gMTAwMCwgIC8vLzwgQmFzZSBkZWxheSBiZWZvcmUgcmV0cmFuc21pdHRpbmcgYW4gTUxFIHVuaWNhc3QuCisgICAga01heFJlc3BvbnNlRGVsYXkgICAgICAgICAgICAgID0gMTAwMCwgIC8vLzwgTWF4aW11bSBkZWxheSBiZWZvcmUgcmVzcG9uZGluZyB0byBhIG11bHRpY2FzdCByZXF1ZXN0CisgICAga01heENoaWxkSWRSZXF1ZXN0VGltZW91dCAgICAgID0gNTAwMCwgIC8vLzwgTWF4aW11bSBkZWxheSBmb3IgcmVjZWl2aW5nIGEgQ2hpbGQgSUQgUmVxdWVzdAorICAgIGtNYXhDaGlsZFVwZGF0ZVJlc3BvbnNlVGltZW91dCA9IDIwMDAsICAvLy88IE1heGltdW0gZGVsYXkgZm9yIHJlY2VpdmluZyBhIENoaWxkIFVwZGF0ZSBSZXNwb25zZQorICAgIGtNaW5UaW1lb3V0ICAgICAgICAgICAgICAgICAgICA9ICgoKGtNYXhDaGlsZEtlZXBBbGl2ZUF0dGVtcHRzICsgMSkgKiBrVW5pY2FzdFJldHJhbnNtaXNzaW9uRGVsYXkpIC8gMTAwMCksICAvLy88IE1pbmltdW0gdGltZW91dChzKQorfTsKKworZW51bQoreworICAgIGtNaW5DaGlsZElkICAgICAgICAgICAgICAgICA9IDEsICAgICAvLy88IE1pbmltdW0gQ2hpbGQgSUQKKyAgICBrTWF4Q2hpbGRJZCAgICAgICAgICAgICAgICAgPSA1MTEsICAgLy8vPCBNYXhpbXVtIENoaWxkIElECisgICAga1JvdXRlcklkT2Zmc2V0ICAgICAgICAgICAgID0gMTAsICAgIC8vLzwgQml0IG9mZnNldCBvZiBSb3V0ZXIgSUQgaW4gUkxPQzE2CisgICAga1Jsb2NQcmVmaXhMZW5ndGggICAgICAgICAgID0gMTQsICAgIC8vLzwgUHJlZml4IGxlbmd0aCBvZiBSTE9DIGluIGJ5dGVzCit9OworCisvKioKKyAqIFJvdXRpbmcgUHJvdG9jb2wgQ29uc3RhbnRzCisgKgorICovCitlbnVtCit7CisgICAga0FkdmVydGlzZUludGVydmFsTWluICAgICAgID0gMSwgICAgICAgICAgICAgICAgLy8vPCBBRFZFUlRJU0VNRU5UX0lfTUlOIChzZWNvbmRzKQorICAgIGtBZHZlcnRpc2VJbnRlcnZhbE1heCAgICAgICA9IDMyLCAgICAgICAgICAgICAgIC8vLzwgQURWRVJUSVNFTUVOVF9JX01BWCAoc2Vjb25kcykKKyAgICBrRmFpbGVkUm91dGVyVHJhbnNtaXNzaW9ucyAgPSA0LCAgICAgICAgICAgICAgICAvLy88IEZBSUxFRF9ST1VURVJfVFJBTlNNSVNTSU9OUworICAgIGtSb3V0ZXJJZFJldXNlRGVsYXkgICAgICAgICA9IDEwMCwgICAgICAgICAgICAgIC8vLzwgSURfUkVVU0VfREVMQVkgKHNlY29uZHMpCisgICAga1JvdXRlcklkU2VxdWVuY2VQZXJpb2QgICAgID0gMTAsICAgICAgICAgICAgICAgLy8vPCBJRF9TRVFVRU5DRV9QRVJJT0QgKHNlY29uZHMpCisgICAga01heE5laWdoYm9yQWdlICAgICAgICAgICAgID0gMTAwLCAgICAgICAgICAgICAgLy8vPCBNQVhfTkVJR0hCT1JfQUdFIChzZWNvbmRzKQorICAgIGtNYXhSb3V0ZUNvc3QgICAgICAgICAgICAgICA9IDE2LCAgICAgICAgICAgICAgIC8vLzwgTUFYX1JPVVRFX0NPU1QKKyAgICBrTWF4Um91dGVySWQgICAgICAgICAgICAgICAgPSA2MiwgICAgICAgICAgICAgICAvLy88IE1BWF9ST1VURVJfSUQKKyAgICBrSW52YWxpZFJvdXRlcklkICAgICAgICAgICAgPSBrTWF4Um91dGVySWQgKyAxLCAvLy88IFZhbHVlIGluZGljYXRpbmcgaW5jb3JyZWN0IFJvdXRlciBJZAorICAgIGtNYXhSb3V0ZXJzICAgICAgICAgICAgICAgICA9IDMyLCAgICAgICAgICAgICAgIC8vLzwgTUFYX1JPVVRFUlMKKyAgICBrTWluRG93bmdyYWRlTmVpZ2hib3JzICAgICAgPSA3LCAgICAgICAgICAgICAgICAvLy88IE1JTl9ET1dOR1JBREVfTkVJR0hCT1JTCisgICAga05ldHdvcmtJZFRpbWVvdXQgICAgICAgICAgID0gMTIwLCAgICAgICAgICAgICAgLy8vPCBORVRXT1JLX0lEX1RJTUVPVVQgKHNlY29uZHMpCisgICAga1BhcmVudFJvdXRlVG9MZWFkZXJUaW1lb3V0ID0gMjAsICAgICAgICAgICAgICAgLy8vPCBQQVJFTlRfUk9VVEVfVE9fTEVBREVSX1RJTUVPVVQgKHNlY29uZHMpCisgICAga1JvdXRlclNlbGVjdGlvbkppdHRlciAgICAgID0gMTIwLCAgICAgICAgICAgICAgLy8vPCBST1VURVJfU0VMRUNUSU9OX0pJVFRFUiAoc2Vjb25kcykKKyAgICBrUm91dGVyRG93bmdyYWRlVGhyZXNob2xkICAgPSAyMywgICAgICAgICAgICAgICAvLy88IFJPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEIChyb3V0ZXJzKQorICAgIGtSb3V0ZXJVcGdyYWRlVGhyZXNob2xkICAgICA9IDE2LCAgICAgICAgICAgICAgIC8vLzwgUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIChyb3V0ZXJzKQorICAgIGtNYXhMZWFkZXJUb1JvdXRlclRpbWVvdXQgICA9IDkwLCAgICAgICAgICAgICAgIC8vLzwgSU5GSU5JVEVfQ09TVF9USU1FT1VUIChzZWNvbmRzKQorICAgIGtSZWVkQWR2ZXJ0aXNlSW50ZXJ2YWwgICAgICA9IDU3MCwgICAgICAgICAgICAgIC8vLzwgUkVFRF9BRFZFUlRJU0VNRU5UX0lOVEVSVkFMIChzZWNvbmRzKQorICAgIGtSZWVkQWR2ZXJ0aXNlSml0dGVyICAgICAgICA9IDYwLCAgICAgICAgICAgICAgIC8vLzwgUkVFRF9BRFZFUlRJU0VNRU5UX0pJVFRFUiAoc2Vjb25kcykKKyAgICBrTGVhZGVyV2VpZ2h0ICAgICAgICAgICAgICAgPSA2NCwgICAgICAgICAgICAgICAvLy88IERlZmF1bHQgbGVhZGVyIHdlaWdodCBmb3IgdGhlIFRocmVhZCBOZXR3b3JrIFBhcnRpdGlvbgorICAgIGtNbGVFbmREZXZpY2VUaW1lb3V0ICAgICAgICA9IE9QRU5USFJFQURfQ09ORklHX0RFRkFVTFRfQ0hJTERfVElNRU9VVCwgIC8vLzwgTUxFX0VORF9ERVZJQ0VfVElNRU9VVCAoc2Vjb25kcykKK307CisKKy8qKgorICogUGFyZW50IFByaW9yaXR5IHZhbHVlcworICoKKyAqLworZW51bQoreworICAgIGtQYXJlbnRQcmlvcml0eUhpZ2ggICAgICAgID0gMSwgICAgLy8gUGFyZW50IFByaW9yaXR5IEhpZ2gKKyAgICBrUGFyZW50UHJpb3JpdHlNZWRpdW0gICAgICA9IDAsICAgIC8vIFBhcmVudCBQcmlvcml0eSBNZWRpdW0gKGRlZmF1bHQpCisgICAga1BhcmVudFByaW9yaXR5TG93ICAgICAgICAgPSAtMSwgICAvLyBQYXJlbnQgUHJpb3JpdHkgTG93CisgICAga1BhcmVudFByaW9yaXR5VW5zcGVjaWZpZWQgPSAtMiwgICAvLyBQYXJlbnQgUHJpb3JpdHkgVW5zcGVjaWZpZWQKK307CisKK2VudW0KK3sKKyAgICBrTGlua1F1YWxpdHkzTGlua0Nvc3QgICAgICAgPSAxLCAgICAvLy88IExpbmsgQ29zdCBmb3IgTGluayBRdWFsaXR5IDMKKyAgICBrTGlua1F1YWxpdHkyTGlua0Nvc3QgICAgICAgPSAyLCAgICAvLy88IExpbmsgQ29zdCBmb3IgTGluayBRdWFsaXR5IDIKKyAgICBrTGlua1F1YWxpdHkxTGlua0Nvc3QgICAgICAgPSA0LCAgICAvLy88IExpbmsgQ29zdCBmb3IgTGluayBRdWFsaXR5IDEKKyAgICBrTGlua1F1YWxpdHkwTGlua0Nvc3QgICAgICAgPSAxNiwgICAvLy88IExpbmsgQ29zdCBmb3IgTGluayBRdWFsaXR5IDAKK307CisKKy8vIGFkZCBmb3IgY2VydGlmaWNhdGlvbiB0ZXN0aW5nCitlbnVtCit7CisgICAga01pbkFzc2lnbmVkTGlua01hcmdpbjMgICAgID0gMHgxNSwgLy8vPCBtaW5pbWFsIGxpbmsgbWFyZ2luIGZvciBMaW5rIFF1YWxpdHkgMyAoMjEgLSAyNTUpCisgICAga01pbkFzc2lnbmVkTGlua01hcmdpbjIgICAgID0gMHgwYiwgLy8vPCBtaW5pbWFsIGxpbmsgbWFyZ2luIGZvciBMaW5rIFF1YWxpdHkgMiAoMTEgLSAyMCkKKyAgICBrTWluQXNzaWduZWRMaW5rTWFyZ2luMSAgICAgPSAweDAzLCAvLy88IG1pbmltYWwgbGluayBtYXJnaW4gZm9yIExpbmsgUXVhbGl0eSAxICgzIC0gOSkKKyAgICBrTWluQXNzaWduZWRMaW5rTWFyZ2luMCAgICAgPSAweDAwLCAvLy88IG1pbmltYWwgbGluayBtYXJnaW4gZm9yIExpbmsgUXVhbGl0eSAwICgwIC0gMikKK307CisKKy8qKgorICogTXVsdGljYXN0IEZvcndhcmRpbmcgQ29uc3RhbnRzCisgKgorICovCitlbnVtCit7CisgICAga01wbENoaWxkRGF0YU1lc3NhZ2VUaW1lckV4cGlyYXRpb25zICA9IDAsIC8vLzwgTnVtYmVyIG9mIE1QTCByZXRyYW5zbWlzc2lvbnMgZm9yIENoaWxkcmVuLgorICAgIGtNcGxSb3V0ZXJEYXRhTWVzc2FnZVRpbWVyRXhwaXJhdGlvbnMgPSAyLCAvLy88IE51bWJlciBvZiBNUEwgcmV0cmFuc21pc3Npb25zIGZvciBSb3V0ZXJzLgorfTsKKworfSAgLy8gbmFtZXNwYWNlIE1sZQorCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1MRV9DT05TVEFOVFNfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL21sZV9yb3V0ZXIuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL21sZV9yb3V0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5N2Y1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbWxlX3JvdXRlci5jcHAKQEAgLTAsMCArMSw0NzQzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgTUxFIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgZm9yIHRoZSBUaHJlYWQgUm91dGVyIGFuZCBMZWFkZXIgcm9sZXMuCisgKi8KKworI2lmIE9QRU5USFJFQURfRlRECisKKyNkZWZpbmUgV1BQX05BTUUgIm1sZV9yb3V0ZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm1sZV9yb3V0ZXIuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3NldHRpbmdzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3NldHRpbmdzLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJuZXQvaWNtcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNbGUgeworCitNbGVSb3V0ZXI6Ok1sZVJvdXRlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKToKKyAgICBNbGUoYVRocmVhZE5ldGlmKSwKKyAgICBtQWR2ZXJ0aXNlVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJk1sZVJvdXRlcjo6SGFuZGxlQWR2ZXJ0aXNlVGltZXIsIE5VTEwsIHRoaXMpLAorICAgIG1TdGF0ZVVwZGF0ZVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZNbGVSb3V0ZXI6OkhhbmRsZVN0YXRlVXBkYXRlVGltZXIsIHRoaXMpLAorICAgIG1BZGRyZXNzU29saWNpdChPVF9VUklfUEFUSF9BRERSRVNTX1NPTElDSVQsICZNbGVSb3V0ZXI6OkhhbmRsZUFkZHJlc3NTb2xpY2l0LCB0aGlzKSwKKyAgICBtQWRkcmVzc1JlbGVhc2UoT1RfVVJJX1BBVEhfQUREUkVTU19SRUxFQVNFLCAmTWxlUm91dGVyOjpIYW5kbGVBZGRyZXNzUmVsZWFzZSwgdGhpcyksCisgICAgbVJvdXRlcklkU2VxdWVuY2UoMCksCisgICAgbVJvdXRlcklkU2VxdWVuY2VMYXN0VXBkYXRlZCgwKSwKKyAgICBtTWF4Q2hpbGRyZW5BbGxvd2VkKGtNYXhDaGlsZHJlbiksCisgICAgbUNoYWxsZW5nZVRpbWVvdXQoMCksCisgICAgbU5leHRDaGlsZElkKGtNYXhDaGlsZElkKSwKKyAgICBtTmV0d29ya0lkVGltZW91dChrTmV0d29ya0lkVGltZW91dCksCisgICAgbVJvdXRlclVwZ3JhZGVUaHJlc2hvbGQoa1JvdXRlclVwZ3JhZGVUaHJlc2hvbGQpLAorICAgIG1Sb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoa1JvdXRlckRvd25ncmFkZVRocmVzaG9sZCksCisgICAgbUxlYWRlcldlaWdodChrTGVhZGVyV2VpZ2h0KSwKKyAgICBtRml4ZWRMZWFkZXJQYXJ0aXRpb25JZCgwKSwKKyAgICBtUm91dGVyUm9sZUVuYWJsZWQodHJ1ZSksCisgICAgbUlzUm91dGVyUmVzdG9yaW5nQ2hpbGRyZW4oZmFsc2UpLAorICAgIG1QcmV2aW91c1BhcnRpdGlvbklkKDApLAorICAgIG1Sb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoa1JvdXRlclNlbGVjdGlvbkppdHRlciksCisgICAgbVJvdXRlclNlbGVjdGlvbkppdHRlclRpbWVvdXQoMCksCisgICAgbVBhcmVudFByaW9yaXR5KGtQYXJlbnRQcmlvcml0eVVuc3BlY2lmaWVkKQoreworICAgIG1EZXZpY2VNb2RlIHw9IE1vZGVUbHY6OmtNb2RlRkZEIHwgTW9kZVRsdjo6a01vZGVGdWxsTmV0d29ya0RhdGE7CisKKyAgICBtZW1zZXQobUNoaWxkcmVuLCAwLCBzaXplb2YobUNoaWxkcmVuKSk7CisgICAgbWVtc2V0KG1Sb3V0ZXJzLCAwLCBzaXplb2YobVJvdXRlcnMpKTsKKworICAgIFNldFJvdXRlcklkKGtJbnZhbGlkUm91dGVySWQpOworfQorCitib29sIE1sZVJvdXRlcjo6SXNSb3V0ZXJSb2xlRW5hYmxlZCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtUm91dGVyUm9sZUVuYWJsZWQgJiYgKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpOworfQorCit2b2lkIE1sZVJvdXRlcjo6U2V0Um91dGVyUm9sZUVuYWJsZWQoYm9vbCBhRW5hYmxlZCkKK3sKKyAgICBtUm91dGVyUm9sZUVuYWJsZWQgPSBhRW5hYmxlZDsKKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBHZXROZXRpZigpLkdldE1hYygpLlNldEJlYWNvbkVuYWJsZWQobVJvdXRlclJvbGVFbmFibGVkKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgaWYgKCFtUm91dGVyUm9sZUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3VpbnQ4X3QgTWxlUm91dGVyOjpBbGxvY2F0ZVJvdXRlcklkKHZvaWQpCit7CisgICAgdWludDhfdCBydmFsID0ga0ludmFsaWRSb3V0ZXJJZDsKKworICAgIC8vIGNvdW50IGF2YWlsYWJsZSByb3V0ZXIgaWRzCisgICAgdWludDhfdCBudW1BdmFpbGFibGUgPSAwOworICAgIHVpbnQ4X3QgbnVtQWxsb2NhdGVkID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Sb3V0ZXJzW2ldLklzQWxsb2NhdGVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG51bUFsbG9jYXRlZCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1Sb3V0ZXJzW2ldLklzUmVjbGFpbURlbGF5KCkgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG51bUF2YWlsYWJsZSsrOworICAgICAgICB9CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KG51bUFsbG9jYXRlZCA8IGtNYXhSb3V0ZXJzICYmIG51bUF2YWlsYWJsZSA+IDAsIHJ2YWwgPSBrSW52YWxpZFJvdXRlcklkKTsKKworICAgIC8vIGNob29zZSBhdmFpbGFibGUgcm91dGVyIGlkIGF0IHJhbmRvbQorICAgIHVpbnQ4X3QgZnJlZUJpdDsKKyAgICBmcmVlQml0ID0gb3RQbGF0UmFuZG9tR2V0KCkgJSBudW1BdmFpbGFibGU7CisKKyAgICAvLyBhbGxvY2F0ZSByb3V0ZXIgaWQKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uSXNBbGxvY2F0ZWQoKSB8fCBtUm91dGVyc1tpXS5Jc1JlY2xhaW1EZWxheSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmcmVlQml0ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ2YWwgPSBBbGxvY2F0ZVJvdXRlcklkKGkpOworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisKKyAgICAgICAgZnJlZUJpdC0tOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKwordWludDhfdCBNbGVSb3V0ZXI6OkFsbG9jYXRlUm91dGVySWQodWludDhfdCBhUm91dGVySWQpCit7CisgICAgdWludDhfdCBydmFsID0ga0ludmFsaWRSb3V0ZXJJZDsKKyAgICBSb3V0ZXIgKnJvdXRlcjsKKworICAgIHJvdXRlciA9IEdldFJvdXRlcihhUm91dGVySWQpOworICAgIGFzc2VydChyb3V0ZXIgIT0gTlVMTCk7CisKKyAgICBWZXJpZnlPckV4aXQoIXJvdXRlci0+SXNBbGxvY2F0ZWQoKSwgcnZhbCA9IGtJbnZhbGlkUm91dGVySWQpOworCisgICAgLy8gaW5pdCByb3V0ZXIgc3RhdGUKKyAgICByb3V0ZXItPlNldEFsbG9jYXRlZCh0cnVlKTsKKyAgICByb3V0ZXItPlNldExhc3RIZWFyZChUaW1lcjo6R2V0Tm93KCkpOworICAgIHJvdXRlci0+Q2xlYXJFeHRBZGRyZXNzKCk7CisKKyAgICAvLyBidW1wIHNlcXVlbmNlIG51bWJlcgorICAgIG1Sb3V0ZXJJZFNlcXVlbmNlKys7CisgICAgbVJvdXRlcklkU2VxdWVuY2VMYXN0VXBkYXRlZCA9IFRpbWVyOjpHZXROb3coKTsKKyAgICBydmFsID0gYVJvdXRlcklkOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJhZGQgcm91dGVyIGlkICVkIiwgYVJvdXRlcklkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlJlbGVhc2VSb3V0ZXJJZCh1aW50OF90IGFSb3V0ZXJJZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFJvdXRlciAqcm91dGVyID0gR2V0Um91dGVyKGFSb3V0ZXJJZCk7CisKKyAgICBWZXJpZnlPckV4aXQocm91dGVyICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBWZXJpZnlPckV4aXQobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJkZWxldGUgcm91dGVyIGlkICVkIiwgYVJvdXRlcklkKTsKKyAgICByb3V0ZXItPlNldEFsbG9jYXRlZChmYWxzZSk7CisgICAgcm91dGVyLT5TZXRSZWNsYWltRGVsYXkodHJ1ZSk7CisgICAgcm91dGVyLT5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCk7CisgICAgcm91dGVyLT5TZXROZXh0SG9wKGtJbnZhbGlkUm91dGVySWQpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Sb3V0ZXJzW2ldLkdldE5leHRIb3AoKSA9PSBhUm91dGVySWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Sb3V0ZXJzW2ldLlNldE5leHRIb3Aoa0ludmFsaWRSb3V0ZXJJZCk7CisgICAgICAgICAgICBtUm91dGVyc1tpXS5TZXRDb3N0KDApOworICAgICAgICB9CisgICAgfQorCisgICAgbVJvdXRlcklkU2VxdWVuY2UrKzsKKyAgICBtUm91dGVySWRTZXF1ZW5jZUxhc3RVcGRhdGVkID0gVGltZXI6OkdldE5vdygpOworICAgIG5ldGlmLkdldEFkZHJlc3NSZXNvbHZlcigpLlJlbW92ZShhUm91dGVySWQpOworICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuUmVtb3ZlQm9yZGVyUm91dGVyKEdldFJsb2MxNihhUm91dGVySWQpKTsKKyAgICBSZXNldEFkdmVydGlzZUludGVydmFsKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit1aW50MzJfdCBNbGVSb3V0ZXI6OkdldExlYWRlckFnZSh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBUaW1lcjo6TXNlY1RvU2VjKFRpbWVyOjpHZXROb3coKSAtIG1Sb3V0ZXJJZFNlcXVlbmNlTGFzdFVwZGF0ZWQpOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6QmVjb21lUm91dGVyKFRocmVhZFN0YXR1c1Rsdjo6U3RhdHVzIGFTdGF0dXMpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKyAgICBWZXJpZnlPckV4aXQobVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfUk9VVEVSLCBlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIFZlcmlmeU9yRXhpdChJc1JvdXRlclJvbGVFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfTk9UX0NBUEFCTEUpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBtUm91dGVyc1tpXS5TZXRBbGxvY2F0ZWQoZmFsc2UpOworICAgICAgICBtUm91dGVyc1tpXS5TZXRSZWNsYWltRGVsYXkoZmFsc2UpOworICAgICAgICBtUm91dGVyc1tpXS5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCk7CisgICAgICAgIG1Sb3V0ZXJzW2ldLlNldE5leHRIb3Aoa0ludmFsaWRSb3V0ZXJJZCk7CisgICAgfQorCisgICAgbUFkdmVydGlzZVRpbWVyLlN0b3AoKTsKKyAgICBuZXRpZi5HZXRBZGRyZXNzUmVzb2x2ZXIoKS5DbGVhcigpOworICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5TZXRSeE9uV2hlbklkbGUodHJ1ZSk7CisgICAgbVJvdXRlclNlbGVjdGlvbkppdHRlclRpbWVvdXQgPSAwOworCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRMaW5rUmVxdWVzdChOVUxMKSk7CisgICAgICAgIG1TdGF0ZVVwZGF0ZVRpbWVyLlN0YXJ0KGtTdGF0ZVVwZGF0ZVBlcmlvZCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRBZGRyZXNzU29saWNpdChhU3RhdHVzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkJlY29tZUxlYWRlcih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCByb3V0ZXJJZDsKKyAgICBSb3V0ZXIgKnJvdXRlcjsKKworICAgIFZlcmlmeU9yRXhpdChtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKyAgICBWZXJpZnlPckV4aXQobVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfTEVBREVSLCBlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIFZlcmlmeU9yRXhpdChJc1JvdXRlclJvbGVFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfTk9UX0NBUEFCTEUpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBtUm91dGVyc1tpXS5TZXRBbGxvY2F0ZWQoZmFsc2UpOworICAgICAgICBtUm91dGVyc1tpXS5TZXRSZWNsYWltRGVsYXkoZmFsc2UpOworICAgICAgICBtUm91dGVyc1tpXS5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCk7CisgICAgICAgIG1Sb3V0ZXJzW2ldLlNldE5leHRIb3Aoa0ludmFsaWRSb3V0ZXJJZCk7CisgICAgfQorCisgICAgcm91dGVySWQgPSBJc1JvdXRlcklkVmFsaWQobVByZXZpb3VzUm91dGVySWQpID8gQWxsb2NhdGVSb3V0ZXJJZChtUHJldmlvdXNSb3V0ZXJJZCkgOiBBbGxvY2F0ZVJvdXRlcklkKCk7CisgICAgcm91dGVyID0gR2V0Um91dGVyKHJvdXRlcklkKTsKKyAgICBWZXJpZnlPckV4aXQocm91dGVyICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBTZXRSb3V0ZXJJZChyb3V0ZXJJZCk7CisKKyAgICByb3V0ZXItPlNldEV4dEFkZHJlc3MoKm5ldGlmLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSk7CisgICAgbUFkdmVydGlzZVRpbWVyLlN0b3AoKTsKKyAgICBuZXRpZi5HZXRBZGRyZXNzUmVzb2x2ZXIoKS5DbGVhcigpOworCisgICAgaWYgKG1GaXhlZExlYWRlclBhcnRpdGlvbklkICE9IDApCisgICAgeworICAgICAgICBTZXRMZWFkZXJEYXRhKG1GaXhlZExlYWRlclBhcnRpdGlvbklkLCBtTGVhZGVyV2VpZ2h0LCBtUm91dGVySWQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTZXRMZWFkZXJEYXRhKG90UGxhdFJhbmRvbUdldCgpLCBtTGVhZGVyV2VpZ2h0LCBtUm91dGVySWQpOworICAgIH0KKworICAgIG1Sb3V0ZXJJZFNlcXVlbmNlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworCisgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5SZXNldCgpOworICAgIG5ldGlmLkdldExlYWRlcigpLlNldEVtcHR5Q29tbWlzc2lvbmVyRGF0YSgpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNldFN0YXRlTGVhZGVyKEdldFJsb2MxNihtUm91dGVySWQpKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1sZVJvdXRlcjo6U3RvcExlYWRlcih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBuZXRpZi5HZXRDb2FwKCkuUmVtb3ZlUmVzb3VyY2UobUFkZHJlc3NTb2xpY2l0KTsKKyAgICBuZXRpZi5HZXRDb2FwKCkuUmVtb3ZlUmVzb3VyY2UobUFkZHJlc3NSZWxlYXNlKTsKKyAgICBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuU3RvcExlYWRlcigpOworICAgIG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuU3RvcExlYWRlcigpOworICAgIG1BZHZlcnRpc2VUaW1lci5TdG9wKCk7CisgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5TdG9wKCk7CisgICAgbmV0aWYuVW5zdWJzY3JpYmVBbGxSb3V0ZXJzTXVsdGljYXN0KCk7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpIYW5kbGVEZXRhY2hTdGFydCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgR2V0TmV0aWYoKS5HZXRBZGRyZXNzUmVzb2x2ZXIoKS5DbGVhcigpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBtUm91dGVyc1tpXS5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCk7CisgICAgfQorCisgICAgU3RvcExlYWRlcigpOworICAgIG1TdGF0ZVVwZGF0ZVRpbWVyLlN0b3AoKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkhhbmRsZUNoaWxkU3RhcnQoQXR0YWNoTW9kZSBhTW9kZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG1Sb3V0ZXJJZFNlcXVlbmNlTGFzdFVwZGF0ZWQgPSBUaW1lcjo6R2V0Tm93KCk7CisgICAgbVJvdXRlclNlbGVjdGlvbkppdHRlclRpbWVvdXQgPSAob3RQbGF0UmFuZG9tR2V0KCkgJSBtUm91dGVyU2VsZWN0aW9uSml0dGVyKSArIDE7CisKKyAgICBTdG9wTGVhZGVyKCk7CisgICAgbVN0YXRlVXBkYXRlVGltZXIuU3RhcnQoa1N0YXRlVXBkYXRlUGVyaW9kKTsKKworICAgIGlmIChtUm91dGVyUm9sZUVuYWJsZWQpCisgICAgeworICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRCZWFjb25FbmFibGVkKHRydWUpOworICAgIH0KKworICAgIG5ldGlmLlN1YnNjcmliZUFsbFJvdXRlcnNNdWx0aWNhc3QoKTsKKworICAgIFZlcmlmeU9yRXhpdChJc1JvdXRlcklkVmFsaWQobVByZXZpb3VzUm91dGVySWQpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgc3dpdGNoIChhTW9kZSkKKyAgICB7CisgICAgY2FzZSBrQXR0YWNoU2FtZTE6CisgICAgY2FzZSBrQXR0YWNoU2FtZTI6CisKKyAgICAgICAgLy8gZG93bmdyYWRlCisgICAgICAgIGlmIChHZXRBY3RpdmVSb3V0ZXJDb3VudCgpID4gbVJvdXRlckRvd25ncmFkZVRocmVzaG9sZCkKKyAgICAgICAgeworICAgICAgICAgICAgU2VuZEFkZHJlc3NSZWxlYXNlKCk7CisKKyAgICAgICAgICAgIC8vIHJlc2V0IGNoaWxkcmVuIGluZm8gaWYgYW55CisgICAgICAgICAgICBpZiAoSGFzQ2hpbGRyZW4oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSZW1vdmVDaGlsZHJlbigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyByZXNldCByb3V0ZXJJZCBpbmZvCisgICAgICAgICAgICBTZXRSb3V0ZXJJZChrSW52YWxpZFJvdXRlcklkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChIYXNDaGlsZHJlbigpKQorICAgICAgICB7CisgICAgICAgICAgICBCZWNvbWVSb3V0ZXIoVGhyZWFkU3RhdHVzVGx2OjprSGF2ZUNoaWxkSWRSZXF1ZXN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrQXR0YWNoQW55OgorICAgIGNhc2Uga0F0dGFjaEJldHRlcjoKKyAgICAgICAgaWYgKEhhc0NoaWxkcmVuKCkgJiYKKyAgICAgICAgICAgIG1QcmV2aW91c1BhcnRpdGlvbklkICE9IG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJlY29tZVJvdXRlcihUaHJlYWRTdGF0dXNUbHY6OmtQYXJlbnRQYXJ0aXRpb25DaGFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKEdldEFjdGl2ZVJvdXRlckNvdW50KCkgPj0gbVJvdXRlclVwZ3JhZGVUaHJlc2hvbGQgJiYKKyAgICAgICAgKCFJc1JvdXRlcklkVmFsaWQobVByZXZpb3VzUm91dGVySWQpIHx8ICFIYXNDaGlsZHJlbigpKSkKKyAgICB7CisgICAgICAgIFNldFJvdXRlcklkKGtJbnZhbGlkUm91dGVySWQpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNldFN0YXRlUm91dGVyKHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIGlmIChtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIpCisgICAgeworICAgICAgICBuZXRpZi5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9ST0xFKTsKKyAgICB9CisKKyAgICBTZXRSbG9jMTYoYVJsb2MxNik7CisgICAgbVJvbGUgPSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI7CisgICAgbVBhcmVudFJlcXVlc3RTdGF0ZSA9IGtQYXJlbnRJZGxlOworICAgIG1QYXJlbnRSZXF1ZXN0VGltZXIuU3RvcCgpOworICAgIFJlc2V0QWR2ZXJ0aXNlSW50ZXJ2YWwoKTsKKworICAgIG5ldGlmLlN1YnNjcmliZUFsbFJvdXRlcnNNdWx0aWNhc3QoKTsKKyAgICBtUm91dGVyc1ttUm91dGVySWRdLlNldE5leHRIb3AobVJvdXRlcklkKTsKKyAgICBtUHJldmlvdXNQYXJ0aXRpb25JZCA9IG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCk7CisgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5TdG9wKCk7CisgICAgbVN0YXRlVXBkYXRlVGltZXIuU3RhcnQoa1N0YXRlVXBkYXRlUGVyaW9kKTsKKyAgICBuZXRpZi5HZXRJcDYoKS5TZXRGb3J3YXJkaW5nRW5hYmxlZCh0cnVlKTsKKyAgICBuZXRpZi5HZXRJcDYoKS5tTXBsLlNldFRpbWVyRXhwaXJhdGlvbnMoa01wbFJvdXRlckRhdGFNZXNzYWdlVGltZXJFeHBpcmF0aW9ucyk7CisgICAgbmV0aWYuR2V0TWFjKCkuU2V0QmVhY29uRW5hYmxlZCh0cnVlKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVSZXN0b3JlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbUlzUm91dGVyUmVzdG9yaW5nQ2hpbGRyZW4gPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIk1vZGUgLT4gUm91dGVyIik7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpTZXRTdGF0ZUxlYWRlcih1aW50MTZfdCBhUmxvYzE2KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBpZiAobVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgIHsKKyAgICAgICAgbmV0aWYuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfUk9MRSk7CisgICAgfQorCisgICAgU2V0UmxvYzE2KGFSbG9jMTYpOworICAgIG1Sb2xlID0gT1RfREVWSUNFX1JPTEVfTEVBREVSOworICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUgPSBrUGFyZW50SWRsZTsKKyAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0b3AoKTsKKyAgICBSZXNldEFkdmVydGlzZUludGVydmFsKCk7CisgICAgQWRkTGVhZGVyQWxvYygpOworCisgICAgbmV0aWYuU3Vic2NyaWJlQWxsUm91dGVyc011bHRpY2FzdCgpOworICAgIG1Sb3V0ZXJzW21Sb3V0ZXJJZF0uU2V0TmV4dEhvcChtUm91dGVySWQpOworICAgIG1QcmV2aW91c1BhcnRpdGlvbklkID0gbUxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKTsKKyAgICBtU3RhdGVVcGRhdGVUaW1lci5TdGFydChrU3RhdGVVcGRhdGVQZXJpb2QpOworICAgIG1Sb3V0ZXJzW21Sb3V0ZXJJZF0uU2V0TGFzdEhlYXJkKFRpbWVyOjpHZXROb3coKSk7CisKKyAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLlN0YXJ0KCk7CisgICAgbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLlN0YXJ0TGVhZGVyKCk7CisgICAgbmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5TdGFydExlYWRlcigpOworICAgIG5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtQWRkcmVzc1NvbGljaXQpOworICAgIG5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtQWRkcmVzc1JlbGVhc2UpOworICAgIG5ldGlmLkdldElwNigpLlNldEZvcndhcmRpbmdFbmFibGVkKHRydWUpOworICAgIG5ldGlmLkdldElwNigpLm1NcGwuU2V0VGltZXJFeHBpcmF0aW9ucyhrTXBsUm91dGVyRGF0YU1lc3NhZ2VUaW1lckV4cGlyYXRpb25zKTsKKyAgICBuZXRpZi5HZXRNYWMoKS5TZXRCZWFjb25FbmFibGVkKHRydWUpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNoaWxkcmVuW2ldLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVJlc3RvcmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtSXNSb3V0ZXJSZXN0b3JpbmdDaGlsZHJlbiA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiTW9kZSAtPiBMZWFkZXIgJWQiLCBtTGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworYm9vbCBNbGVSb3V0ZXI6OkhhbmRsZUFkdmVydGlzZVRpbWVyKFRyaWNrbGVUaW1lciAmYVRpbWVyKQoreworICAgIHJldHVybiBHZXRPd25lcihhVGltZXIpLkhhbmRsZUFkdmVydGlzZVRpbWVyKCk7Cit9CisKK2Jvb2wgTWxlUm91dGVyOjpIYW5kbGVBZHZlcnRpc2VUaW1lcih2b2lkKQoreworICAgIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBTZW5kQWR2ZXJ0aXNlbWVudCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpTdG9wQWR2ZXJ0aXNlVGltZXIodm9pZCkKK3sKKyAgICBtQWR2ZXJ0aXNlVGltZXIuU3RvcCgpOworfQorCit2b2lkIE1sZVJvdXRlcjo6UmVzZXRBZHZlcnRpc2VJbnRlcnZhbCh2b2lkKQoreworICAgIFZlcmlmeU9yRXhpdChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIgfHwgbVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKTsKKworICAgIGlmICghbUFkdmVydGlzZVRpbWVyLklzUnVubmluZygpKQorICAgIHsKKyAgICAgICAgbUFkdmVydGlzZVRpbWVyLlN0YXJ0KAorICAgICAgICAgICAgVGltZXI6OlNlY1RvTXNlYyhrQWR2ZXJ0aXNlSW50ZXJ2YWxNaW4pLAorICAgICAgICAgICAgVGltZXI6OlNlY1RvTXNlYyhrQWR2ZXJ0aXNlSW50ZXJ2YWxNYXgpLAorICAgICAgICAgICAgVHJpY2tsZVRpbWVyOjprTW9kZU5vcm1hbCk7CisgICAgfQorCisgICAgbUFkdmVydGlzZVRpbWVyLkluZGljYXRlSW5jb25zaXN0ZW50KCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2VuZEFkdmVydGlzZW1lbnQodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJcDY6OkFkZHJlc3MgZGVzdGluYXRpb247CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01sZU1lc3NhZ2UoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kSGVhZGVyKCptZXNzYWdlLCBIZWFkZXI6OmtDb21tYW5kQWR2ZXJ0aXNlbWVudCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTb3VyY2VBZGRyZXNzKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExlYWRlckRhdGEoKm1lc3NhZ2UpKTsKKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUm91dGUoKm1lc3NhZ2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbWVtc2V0KCZkZXN0aW5hdGlvbiwgMCwgc2l6ZW9mKGRlc3RpbmF0aW9uKSk7CisgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmYwMik7CisgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KDB4MDAwMSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCBkZXN0aW5hdGlvbikpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IGFkdmVydGlzZW1lbnQiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpTZW5kTGlua1JlcXVlc3QoTmVpZ2hib3IgKmFOZWlnaGJvcikKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBkZXRhY2hlZFRsdnNbXSA9IHtUbHY6OmtBZGRyZXNzMTYsIFRsdjo6a1JvdXRlfTsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCByb3V0ZXJUbHZzW10gPSB7VGx2OjprTGlua01hcmdpbn07CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBJcDY6OkFkZHJlc3MgZGVzdGluYXRpb247CisKKyAgICBtZW1zZXQoJmRlc3RpbmF0aW9uLCAwLCBzaXplb2YoZGVzdGluYXRpb24pKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01sZU1lc3NhZ2UoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kSGVhZGVyKCptZXNzYWdlLCBIZWFkZXI6OmtDb21tYW5kTGlua1JlcXVlc3QpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kVmVyc2lvbigqbWVzc2FnZSkpOworCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kVGx2UmVxdWVzdCgqbWVzc2FnZSwgZGV0YWNoZWRUbHZzLCBzaXplb2YoZGV0YWNoZWRUbHZzKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTb3VyY2VBZGRyZXNzKCptZXNzYWdlKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRMZWFkZXJEYXRhKCptZXNzYWdlKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRUbHZSZXF1ZXN0KCptZXNzYWdlLCByb3V0ZXJUbHZzLCBzaXplb2Yocm91dGVyVGx2cykpKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFNvdXJjZUFkZHJlc3MoKm1lc3NhZ2UpKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExlYWRlckRhdGEoKm1lc3NhZ2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGFOZWlnaGJvciA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgc2l6ZW9mKG1DaGFsbGVuZ2UpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DaGFsbGVuZ2VbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihvdFBsYXRSYW5kb21HZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBtQ2hhbGxlbmdlVGltZW91dCA9ICgoKDIgKiBrTWF4UmVzcG9uc2VEZWxheSkgKyBrU3RhdGVVcGRhdGVQZXJpb2QgLSAxKSAvIGtTdGF0ZVVwZGF0ZVBlcmlvZCk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZENoYWxsZW5nZSgqbWVzc2FnZSwgbUNoYWxsZW5nZSwgc2l6ZW9mKG1DaGFsbGVuZ2UpKSk7CisgICAgICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubThbMF0gPSAweGZmOworICAgICAgICBkZXN0aW5hdGlvbi5tRmllbGRzLm04WzFdID0gMHgwMjsKKyAgICAgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tOFsxNV0gPSAyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhTmVpZ2hib3ItPkdlbmVyYXRlQ2hhbGxlbmdlKCk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZENoYWxsZW5nZSgqbWVzc2FnZSwgYU5laWdoYm9yLT5HZXRDaGFsbGVuZ2UoKSwgYU5laWdoYm9yLT5HZXRDaGFsbGVuZ2VTaXplKCkpKTsKKyAgICAgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmU4MCk7CisgICAgICAgIGRlc3RpbmF0aW9uLlNldElpZChhTmVpZ2hib3ItPkdldEV4dEFkZHJlc3MoKSk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCBkZXN0aW5hdGlvbikpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IGxpbmsgcmVxdWVzdCIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkhhbmRsZUxpbmtSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yID0gTlVMTDsKKyAgICBNYWM6OkV4dEFkZHJlc3MgbWFjQWRkcjsKKyAgICBDaGFsbGVuZ2VUbHYgY2hhbGxlbmdlOworICAgIFZlcnNpb25UbHYgdmVyc2lvbjsKKyAgICBMZWFkZXJEYXRhVGx2IGxlYWRlckRhdGE7CisgICAgU291cmNlQWRkcmVzc1RsdiBzb3VyY2VBZGRyZXNzOworICAgIFRsdlJlcXVlc3RUbHYgdGx2UmVxdWVzdDsKKyAgICB1aW50MTZfdCBybG9jMTY7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGxpbmsgcmVxdWVzdCIpOworCisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX1JPVVRFUiB8fCBtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBWZXJpZnlPckV4aXQobVBhcmVudFJlcXVlc3RTdGF0ZSA9PSBrUGFyZW50SWRsZSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIG1hY0FkZHIuU2V0KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKworICAgIC8vIENoYWxsZW5nZQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQ2hhbGxlbmdlLCBzaXplb2YoY2hhbGxlbmdlKSwgY2hhbGxlbmdlKSk7CisgICAgVmVyaWZ5T3JFeGl0KGNoYWxsZW5nZS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gVmVyc2lvbgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprVmVyc2lvbiwgc2l6ZW9mKHZlcnNpb24pLCB2ZXJzaW9uKSk7CisgICAgVmVyaWZ5T3JFeGl0KHZlcnNpb24uSXNWYWxpZCgpICYmIHZlcnNpb24uR2V0VmVyc2lvbigpID49IGtWZXJzaW9uLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIExlYWRlciBEYXRhCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtMZWFkZXJEYXRhLCBzaXplb2YobGVhZGVyRGF0YSksIGxlYWRlckRhdGEpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQobGVhZGVyRGF0YS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBWZXJpZnlPckV4aXQobGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpID09IG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisgICAgfQorCisgICAgLy8gU291cmNlIEFkZHJlc3MKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1NvdXJjZUFkZHJlc3MsIHNpemVvZihzb3VyY2VBZGRyZXNzKSwgc291cmNlQWRkcmVzcykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChzb3VyY2VBZGRyZXNzLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgcmxvYzE2ID0gc291cmNlQWRkcmVzcy5HZXRSbG9jMTYoKTsKKworICAgICAgICBpZiAoKG5laWdoYm9yID0gR2V0TmVpZ2hib3IobWFjQWRkcikpICE9IE5VTEwgJiYgbmVpZ2hib3ItPkdldFJsb2MxNigpICE9IHJsb2MxNikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gcmVtb3ZlIHN0YWxlIG5laWdoYm9ycworICAgICAgICAgICAgUmVtb3ZlTmVpZ2hib3IoKm5laWdoYm9yKTsKKyAgICAgICAgICAgIG5laWdoYm9yID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChJc0FjdGl2ZVJvdXRlcihybG9jMTYpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBzb3VyY2UgaXMgYSByb3V0ZXIKKyAgICAgICAgICAgIG5laWdoYm9yID0gR2V0Um91dGVyKEdldFJvdXRlcklkKHJsb2MxNikpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KG5laWdoYm9yICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgICAgICBpZiAobmVpZ2hib3ItPkdldFN0YXRlKCkgIT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICp0aHJlYWRNZXNzYWdlSW5mbyA9CisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mby5HZXRMaW5rSW5mbygpKTsKKworICAgICAgICAgICAgICAgIG5laWdoYm9yLT5TZXRFeHRBZGRyZXNzKG1hY0FkZHIpOworICAgICAgICAgICAgICAgIG5laWdoYm9yLT5HZXRMaW5rSW5mbygpLkNsZWFyKCk7CisgICAgICAgICAgICAgICAgbmVpZ2hib3ItPkdldExpbmtJbmZvKCkuQWRkUnNzKEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpLCB0aHJlYWRNZXNzYWdlSW5mby0+bVJzcyk7CisgICAgICAgICAgICAgICAgbmVpZ2hib3ItPlJlc2V0TGlua0ZhaWx1cmVzKCk7CisgICAgICAgICAgICAgICAgbmVpZ2hib3ItPlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVMaW5rUmVxdWVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KG1lbWNtcCgmbmVpZ2hib3ItPkdldEV4dEFkZHJlc3MoKSwgJm1hY0FkZHIsIHNpemVvZihtYWNBZGRyKSkgPT0gMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBzb3VyY2UgaXMgbm90IGEgcm91dGVyCisgICAgICAgICAgICBuZWlnaGJvciA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gbGFjayBvZiBzb3VyY2UgYWRkcmVzcyBpbmRpY2F0ZXMgcm91dGVyIGNvbWluZyBvdXQgb2YgcmVzZXQKKyAgICAgICAgVmVyaWZ5T3JFeGl0KChuZWlnaGJvciA9IEdldE5laWdoYm9yKG1hY0FkZHIpKSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgICAgICBuZWlnaGJvci0+R2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQgJiYKKyAgICAgICAgICAgICAgICAgICAgIElzQWN0aXZlUm91dGVyKG5laWdoYm9yLT5HZXRSbG9jMTYoKSksCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgIH0KKworICAgIC8vIFRMViBSZXF1ZXN0CisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtUbHZSZXF1ZXN0LCBzaXplb2YodGx2UmVxdWVzdCksIHRsdlJlcXVlc3QpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQodGx2UmVxdWVzdC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0bHZSZXF1ZXN0LlNldExlbmd0aCgwKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZExpbmtBY2NlcHQoYU1lc3NhZ2VJbmZvLCBuZWlnaGJvciwgdGx2UmVxdWVzdCwgY2hhbGxlbmdlKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2VuZExpbmtBY2NlcHQoY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCBOZWlnaGJvciAqYU5laWdoYm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRsdlJlcXVlc3RUbHYgJmFUbHZSZXF1ZXN0LCBjb25zdCBDaGFsbGVuZ2VUbHYgJmFDaGFsbGVuZ2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKnRocmVhZE1lc3NhZ2VJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvLkdldExpbmtJbmZvKCkpOworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IHJvdXRlclRsdnNbXSA9IHtUbHY6OmtMaW5rTWFyZ2lufTsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIEhlYWRlcjo6Q29tbWFuZCBjb21tYW5kOworICAgIHVpbnQ4X3QgbGlua01hcmdpbjsKKworICAgIGNvbW1hbmQgPSAoYU5laWdoYm9yID09IE5VTEwgfHwgYU5laWdoYm9yLT5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkgPworICAgICAgICAgICAgICBIZWFkZXI6OmtDb21tYW5kTGlua0FjY2VwdCA6IEhlYWRlcjo6a0NvbW1hbmRMaW5rQWNjZXB0QW5kUmVxdWVzdDsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01sZU1lc3NhZ2UoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kSGVhZGVyKCptZXNzYWdlLCBjb21tYW5kKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFZlcnNpb24oKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kU291cmNlQWRkcmVzcygqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRSZXNwb25zZSgqbWVzc2FnZSwgYUNoYWxsZW5nZS5HZXRDaGFsbGVuZ2UoKSwgYUNoYWxsZW5nZS5HZXRMZW5ndGgoKSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRMaW5rRnJhbWVDb3VudGVyKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE1sZUZyYW1lQ291bnRlcigqbWVzc2FnZSkpOworCisgICAgLy8gYWx3YXlzIGFwcGVuZCBhIGxpbmsgbWFyZ2luLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IGl0IHdhcyByZXF1ZXN0ZWQKKyAgICBsaW5rTWFyZ2luID0gTGlua1F1YWxpdHlJbmZvOjpDb252ZXJ0UnNzVG9MaW5rTWFyZ2luKEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpLCB0aHJlYWRNZXNzYWdlSW5mby0+bVJzcyk7CisKKyAgICAvLyBhZGQgZm9yIGNlcnRpZmljYXRpb24gdGVzdGluZworICAgIGlmIChpc0Fzc2lnbkxpbmtRdWFsaXR5ICYmIGFOZWlnaGJvciAhPSBOVUxMICYmCisgICAgICAgIChtZW1jbXAoJmFOZWlnaGJvci0+R2V0RXh0QWRkcmVzcygpLCBtQWRkcjY0Lm04LCBPVF9FWFRfQUREUkVTU19TSVpFKSA9PSAwKSkKKyAgICB7CisgICAgICAgIGxpbmtNYXJnaW4gPSBtQXNzaWduTGlua01hcmdpbjsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGlua01hcmdpbigqbWVzc2FnZSwgbGlua01hcmdpbikpOworCisgICAgaWYgKGFOZWlnaGJvciAhPSBOVUxMICYmIElzQWN0aXZlUm91dGVyKGFOZWlnaGJvci0+R2V0UmxvYzE2KCkpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExlYWRlckRhdGEoKm1lc3NhZ2UpKTsKKyAgICB9CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBhVGx2UmVxdWVzdC5HZXRMZW5ndGgoKTsgaSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhVGx2UmVxdWVzdC5HZXRUbHZzKClbaV0pCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBUbHY6OmtSb3V0ZToKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRSb3V0ZSgqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtBZGRyZXNzMTY6CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoYU5laWdoYm9yICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQWRkcmVzczE2KCptZXNzYWdlLCBhTmVpZ2hib3ItPkdldFJsb2MxNigpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a0xpbmtNYXJnaW46CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFOZWlnaGJvciAhPSBOVUxMICYmIGFOZWlnaGJvci0+R2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgeworICAgICAgICBhTmVpZ2hib3ItPkdlbmVyYXRlQ2hhbGxlbmdlKCk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZENoYWxsZW5nZSgqbWVzc2FnZSwgYU5laWdoYm9yLT5HZXRDaGFsbGVuZ2UoKSwgYU5laWdoYm9yLT5HZXRDaGFsbGVuZ2VTaXplKCkpKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFRsdlJlcXVlc3QoKm1lc3NhZ2UsIHJvdXRlclRsdnMsIHNpemVvZihyb3V0ZXJUbHZzKSkpOworICAgICAgICBhTmVpZ2hib3ItPlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVMaW5rUmVxdWVzdCk7CisgICAgfQorCisgICAgaWYgKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQWRkRGVsYXllZFJlc3BvbnNlKCptZXNzYWdlLCBhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3RQbGF0UmFuZG9tR2V0KCkgJSBrTWF4UmVzcG9uc2VEZWxheSkgKyAxKSk7CisKKyAgICAgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJEZWxheWVkIGxpbmsgYWNjZXB0Iik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpKTsKKworICAgICAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgbGluayBhY2NlcHQiKTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6SGFuZGxlTGlua0FjY2VwdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYUtleVNlcXVlbmNlKQoreworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgbGluayBhY2NlcHQiKTsKKyAgICByZXR1cm4gSGFuZGxlTGlua0FjY2VwdChhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBhS2V5U2VxdWVuY2UsIGZhbHNlKTsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkhhbmRsZUxpbmtBY2NlcHRBbmRSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYUtleVNlcXVlbmNlKQoreworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgbGluayBhY2NlcHQgYW5kIHJlcXVlc3QiKTsKKyAgICByZXR1cm4gSGFuZGxlTGlua0FjY2VwdChhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBhS2V5U2VxdWVuY2UsIHRydWUpOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6SGFuZGxlTGlua0FjY2VwdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYUtleVNlcXVlbmNlLCBib29sIGFSZXF1ZXN0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICp0aHJlYWRNZXNzYWdlSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mby5HZXRMaW5rSW5mbygpKTsKKyAgICBSb3V0ZXIgKnJvdXRlcjsKKyAgICBOZWlnaGJvciAqbmVpZ2hib3I7CisgICAgTWFjOjpFeHRBZGRyZXNzIG1hY0FkZHI7CisgICAgVmVyc2lvblRsdiB2ZXJzaW9uOworICAgIFJlc3BvbnNlVGx2IHJlc3BvbnNlOworICAgIFNvdXJjZUFkZHJlc3NUbHYgc291cmNlQWRkcmVzczsKKyAgICBMaW5rRnJhbWVDb3VudGVyVGx2IGxpbmtGcmFtZUNvdW50ZXI7CisgICAgTWxlRnJhbWVDb3VudGVyVGx2IG1sZUZyYW1lQ291bnRlcjsKKyAgICB1aW50OF90IHJvdXRlcklkOworICAgIEFkZHJlc3MxNlRsdiBhZGRyZXNzMTY7CisgICAgUm91dGVUbHYgcm91dGU7CisgICAgTGVhZGVyRGF0YVRsdiBsZWFkZXJEYXRhOworICAgIExpbmtNYXJnaW5UbHYgbGlua01hcmdpbjsKKyAgICBDaGFsbGVuZ2VUbHYgY2hhbGxlbmdlOworICAgIFRsdlJlcXVlc3RUbHYgdGx2UmVxdWVzdDsKKworICAgIG1hY0FkZHIuU2V0KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKworICAgIC8vIFZlcnNpb24KKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1ZlcnNpb24sIHNpemVvZih2ZXJzaW9uKSwgdmVyc2lvbikpOworICAgIFZlcmlmeU9yRXhpdCh2ZXJzaW9uLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBSZXNwb25zZQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprUmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSksIHJlc3BvbnNlKSk7CisgICAgVmVyaWZ5T3JFeGl0KHJlc3BvbnNlLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBTb3VyY2UgQWRkcmVzcworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprU291cmNlQWRkcmVzcywgc2l6ZW9mKHNvdXJjZUFkZHJlc3MpLCBzb3VyY2VBZGRyZXNzKSk7CisgICAgVmVyaWZ5T3JFeGl0KHNvdXJjZUFkZHJlc3MuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFJlbW92ZSBzdGFsZSBuZWlnaGJvcnMKKyAgICBpZiAoKG5laWdoYm9yID0gR2V0TmVpZ2hib3IobWFjQWRkcikpICE9IE5VTEwgJiYKKyAgICAgICAgbmVpZ2hib3ItPkdldFJsb2MxNigpICE9IHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkpCisgICAgeworICAgICAgICBSZW1vdmVOZWlnaGJvcigqbmVpZ2hib3IpOworICAgIH0KKworICAgIC8vIExpbmstTGF5ZXIgRnJhbWUgQ291bnRlcgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGlua0ZyYW1lQ291bnRlciwgc2l6ZW9mKGxpbmtGcmFtZUNvdW50ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rRnJhbWVDb3VudGVyKSk7CisgICAgVmVyaWZ5T3JFeGl0KGxpbmtGcmFtZUNvdW50ZXIuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIE1MRSBGcmFtZSBDb3VudGVyCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtNbGVGcmFtZUNvdW50ZXIsIHNpemVvZihtbGVGcmFtZUNvdW50ZXIpLCBtbGVGcmFtZUNvdW50ZXIpID09CisgICAgICAgIE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQobWxlRnJhbWVDb3VudGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1sZUZyYW1lQ291bnRlci5TZXRGcmFtZUNvdW50ZXIobGlua0ZyYW1lQ291bnRlci5HZXRGcmFtZUNvdW50ZXIoKSk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KElzQWN0aXZlUm91dGVyKHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIHJvdXRlcklkID0gR2V0Um91dGVySWQoc291cmNlQWRkcmVzcy5HZXRSbG9jMTYoKSk7CisgICAgcm91dGVyID0gR2V0Um91dGVyKHJvdXRlcklkKTsKKworICAgIFZlcmlmeU9yRXhpdChyb3V0ZXIgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyB2ZXJpZnkgcmVzcG9uc2UKKyAgICBzd2l0Y2ggKHJvdXRlci0+R2V0U3RhdGUoKSkKKyAgICB7CisgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlTGlua1JlcXVlc3Q6CisgICAgICAgIFZlcmlmeU9yRXhpdChtZW1jbXAocm91dGVyLT5HZXRDaGFsbGVuZ2UoKSwgcmVzcG9uc2UuR2V0UmVzcG9uc2UoKSwgcm91dGVyLT5HZXRDaGFsbGVuZ2VTaXplKCkpID09IDAsCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1NFQ1VSSVRZKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVJbnZhbGlkOgorICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZVZhbGlkOgorICAgICAgICBWZXJpZnlPckV4aXQoKG1DaGFsbGVuZ2VUaW1lb3V0ID4gMCkgJiYgKG1lbWNtcChtQ2hhbGxlbmdlLCByZXNwb25zZS5HZXRSZXNwb25zZSgpLCBzaXplb2YobUNoYWxsZW5nZSkpID09IDApLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9TRUNVUklUWSk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgIH0KKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgLy8gQWRkcmVzczE2CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQWRkcmVzczE2LCBzaXplb2YoYWRkcmVzczE2KSwgYWRkcmVzczE2KSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChhZGRyZXNzMTYuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KEdldFJsb2MxNigpID09IGFkZHJlc3MxNi5HZXRSbG9jMTYoKSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgICAgICAvLyBSb3V0ZQorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1JvdXRlLCBzaXplb2Yocm91dGUpLCByb3V0ZSkpOworICAgICAgICBWZXJpZnlPckV4aXQocm91dGUuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFByb2Nlc3NSb3V0ZVRsdihyb3V0ZSkpOworCisgICAgICAgIC8vIExlYWRlciBEYXRhCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGVhZGVyRGF0YSwgc2l6ZW9mKGxlYWRlckRhdGEpLCBsZWFkZXJEYXRhKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChsZWFkZXJEYXRhLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFNldExlYWRlckRhdGEobGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpLCBsZWFkZXJEYXRhLkdldFdlaWdodGluZygpLCBsZWFkZXJEYXRhLkdldExlYWRlclJvdXRlcklkKCkpOworCisgICAgICAgIGlmIChtTGVhZGVyRGF0YS5HZXRMZWFkZXJSb3V0ZXJJZCgpID09IEdldFJvdXRlcklkKEdldFJsb2MxNigpKSkKKyAgICAgICAgeworICAgICAgICAgICAgU2V0U3RhdGVMZWFkZXIoR2V0UmxvYzE2KCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGx2c1tdID0ge1Rsdjo6a05ldHdvcmtEYXRhfTsKKyAgICAgICAgICAgIFNldFN0YXRlUm91dGVyKEdldFJsb2MxNigpKTsKKyAgICAgICAgICAgIG1SZXRyaWV2ZU5ld05ldHdvcmtEYXRhID0gdHJ1ZTsKKyAgICAgICAgICAgIFNlbmREYXRhUmVxdWVzdChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSwgdGx2cywgc2l6ZW9mKHRsdnMpLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtMaW5rTWFyZ2luLCBzaXplb2YobGlua01hcmdpbiksIGxpbmtNYXJnaW4pKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxpbmtNYXJnaW4uSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgcm91dGVyLT5TZXRMaW5rUXVhbGl0eU91dChMaW5rUXVhbGl0eUluZm86OkNvbnZlcnRMaW5rTWFyZ2luVG9MaW5rUXVhbGl0eShsaW5rTWFyZ2luLkdldExpbmtNYXJnaW4oKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICAvLyBMZWFkZXIgRGF0YQorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xlYWRlckRhdGEsIHNpemVvZihsZWFkZXJEYXRhKSwgbGVhZGVyRGF0YSkpOworICAgICAgICBWZXJpZnlPckV4aXQobGVhZGVyRGF0YS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBWZXJpZnlPckV4aXQobGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpID09IG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCkpOworCisgICAgICAgIC8vIExpbmsgTWFyZ2luCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGlua01hcmdpbiwgc2l6ZW9mKGxpbmtNYXJnaW4pLCBsaW5rTWFyZ2luKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChsaW5rTWFyZ2luLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIHJvdXRlci0+U2V0TGlua1F1YWxpdHlPdXQoTGlua1F1YWxpdHlJbmZvOjpDb252ZXJ0TGlua01hcmdpblRvTGlua1F1YWxpdHkobGlua01hcmdpbi5HZXRMaW5rTWFyZ2luKCkpKTsKKworICAgICAgICAvLyB1cGRhdGUgcm91dGluZyB0YWJsZQorICAgICAgICBpZiAocm91dGVySWQgIT0gbVJvdXRlcklkICYmICFJc1JvdXRlcklkVmFsaWQocm91dGVyLT5HZXROZXh0SG9wKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBSZXNldEFkdmVydGlzZUludGVydmFsKCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBmaW5pc2ggbGluayBzeW5jaHJvbml6YXRpb24KKyAgICByb3V0ZXItPlNldEV4dEFkZHJlc3MobWFjQWRkcik7CisgICAgcm91dGVyLT5TZXRSbG9jMTYoc291cmNlQWRkcmVzcy5HZXRSbG9jMTYoKSk7CisgICAgcm91dGVyLT5TZXRMaW5rRnJhbWVDb3VudGVyKGxpbmtGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworICAgIHJvdXRlci0+U2V0TWxlRnJhbWVDb3VudGVyKG1sZUZyYW1lQ291bnRlci5HZXRGcmFtZUNvdW50ZXIoKSk7CisgICAgcm91dGVyLT5TZXRMYXN0SGVhcmQoVGltZXI6OkdldE5vdygpKTsKKyAgICByb3V0ZXItPlNldERldmljZU1vZGUoTW9kZVRsdjo6a01vZGVGRkQgfCBNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSB8IE1vZGVUbHY6OmtNb2RlRnVsbE5ldHdvcmtEYXRhKTsKKyAgICByb3V0ZXItPkdldExpbmtJbmZvKCkuQ2xlYXIoKTsKKyAgICByb3V0ZXItPkdldExpbmtJbmZvKCkuQWRkUnNzKEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpLCB0aHJlYWRNZXNzYWdlSW5mby0+bVJzcyk7CisgICAgcm91dGVyLT5SZXNldExpbmtGYWlsdXJlcygpOworICAgIHJvdXRlci0+U2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKTsKKyAgICByb3V0ZXItPlNldEtleVNlcXVlbmNlKGFLZXlTZXF1ZW5jZSk7CisKKyAgICBpZiAoYVJlcXVlc3QpCisgICAgeworICAgICAgICAvLyBDaGFsbGVuZ2UKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtDaGFsbGVuZ2UsIHNpemVvZihjaGFsbGVuZ2UpLCBjaGFsbGVuZ2UpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGNoYWxsZW5nZS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIC8vIFRMViBSZXF1ZXN0CisgICAgICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprVGx2UmVxdWVzdCwgc2l6ZW9mKHRsdlJlcXVlc3QpLCB0bHZSZXF1ZXN0KSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQodGx2UmVxdWVzdC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdGx2UmVxdWVzdC5TZXRMZW5ndGgoMCk7CisgICAgICAgIH0KKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZExpbmtBY2NlcHQoYU1lc3NhZ2VJbmZvLCByb3V0ZXIsIHRsdlJlcXVlc3QsIGNoYWxsZW5nZSkpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0NoaWxkICpNbGVSb3V0ZXI6Ok5ld0NoaWxkKHZvaWQpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNoaWxkcmVuW2ldLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZUludmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmbUNoaWxkcmVuW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0NoaWxkICpNbGVSb3V0ZXI6OkZpbmRDaGlsZCh1aW50MTZfdCBhQ2hpbGRJZCkKK3sKKyAgICBDaGlsZCAqcnZhbCA9IE5VTEw7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ2hpbGRyZW5baV0uR2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCAmJgorICAgICAgICAgICAgR2V0Q2hpbGRJZChtQ2hpbGRyZW5baV0uR2V0UmxvYzE2KCkpID09IGFDaGlsZElkKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSAmbUNoaWxkcmVuW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworQ2hpbGQgKk1sZVJvdXRlcjo6RmluZENoaWxkKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgQ2hpbGQgKnJ2YWwgPSBOVUxMOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNoaWxkcmVuW2ldLkdldFN0YXRlKCkgIT0gTmVpZ2hib3I6OmtTdGF0ZUludmFsaWQgJiYKKyAgICAgICAgICAgIG1lbWNtcCgmbUNoaWxkcmVuW2ldLkdldEV4dEFkZHJlc3MoKSwgJmFBZGRyZXNzLCBzaXplb2YobUNoaWxkcmVuW2ldLkdldEV4dEFkZHJlc3MoKSkpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9ICZtQ2hpbGRyZW5baV0pOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCit1aW50OF90IE1sZVJvdXRlcjo6TGlua1F1YWxpdHlUb0Nvc3QodWludDhfdCBhTGlua1F1YWxpdHkpCit7CisgICAgc3dpdGNoIChhTGlua1F1YWxpdHkpCisgICAgeworICAgIGNhc2UgMToKKyAgICAgICAgcmV0dXJuIGtMaW5rUXVhbGl0eTFMaW5rQ29zdDsKKworICAgIGNhc2UgMjoKKyAgICAgICAgcmV0dXJuIGtMaW5rUXVhbGl0eTJMaW5rQ29zdDsKKworICAgIGNhc2UgMzoKKyAgICAgICAgcmV0dXJuIGtMaW5rUXVhbGl0eTNMaW5rQ29zdDsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBrTGlua1F1YWxpdHkwTGlua0Nvc3Q7CisgICAgfQorfQorCit1aW50OF90IE1sZVJvdXRlcjo6R2V0TGlua0Nvc3QodWludDhfdCBhUm91dGVySWQpCit7CisgICAgdWludDhfdCBydmFsID0ga01heFJvdXRlQ29zdDsKKyAgICBSb3V0ZXIgKnJvdXRlcjsKKworICAgIHJvdXRlciA9IEdldFJvdXRlcihhUm91dGVySWQpOworCisgICAgLy8gTlVMTCBhUm91dGVySWQgaW5kaWNhdGVzIG5vbi1leGlzdGluZyBuZXh0IGhvcCwgaGVuY2UgcmV0dXJuIGtNYXhSb3V0ZUNvc3QgZm9yIGl0LgorICAgIFZlcmlmeU9yRXhpdChhUm91dGVySWQgIT0gbVJvdXRlcklkICYmIHJvdXRlciAhPSBOVUxMICYmIHJvdXRlci0+R2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpOworCisgICAgcnZhbCA9IHJvdXRlci0+R2V0TGlua0luZm8oKS5HZXRMaW5rUXVhbGl0eShHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSk7CisKKyAgICBpZiAocnZhbCA+IHJvdXRlci0+R2V0TGlua1F1YWxpdHlPdXQoKSkKKyAgICB7CisgICAgICAgIHJ2YWwgPSByb3V0ZXItPkdldExpbmtRdWFsaXR5T3V0KCk7CisgICAgfQorCisgICAgLy8gYWRkIGZvciBjZXJ0aWZpY2F0aW9uIHRlc3RpbmcKKyAgICBpZiAoaXNBc3NpZ25MaW5rUXVhbGl0eSAmJiAobWVtY21wKCZyb3V0ZXItPkdldEV4dEFkZHJlc3MoKSwgbUFkZHI2NC5tOCwgT1RfRVhUX0FERFJFU1NfU0laRSkgPT0gMCkpCisgICAgeworICAgICAgICBydmFsID0gbUFzc2lnbkxpbmtRdWFsaXR5OworICAgIH0KKworICAgIHJ2YWwgPSBMaW5rUXVhbGl0eVRvQ29zdChydmFsKTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNldFJvdXRlclNlbGVjdGlvbkppdHRlcih1aW50OF90IGFSb3V0ZXJKaXR0ZXIpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYVJvdXRlckppdHRlciA+IDAsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG1Sb3V0ZXJTZWxlY3Rpb25KaXR0ZXIgPSBhUm91dGVySml0dGVyOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlByb2Nlc3NSb3V0ZVRsdihjb25zdCBSb3V0ZVRsdiAmYVJvdXRlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgbVJvdXRlcklkU2VxdWVuY2UgPSBhUm91dGUuR2V0Um91dGVySWRTZXF1ZW5jZSgpOworICAgIG1Sb3V0ZXJJZFNlcXVlbmNlTGFzdFVwZGF0ZWQgPSBUaW1lcjo6R2V0Tm93KCk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBib29sIG9sZCA9IG1Sb3V0ZXJzW2ldLklzQWxsb2NhdGVkKCk7CisgICAgICAgIG1Sb3V0ZXJzW2ldLlNldEFsbG9jYXRlZChhUm91dGUuSXNSb3V0ZXJJZFNldChpKSk7CisKKyAgICAgICAgaWYgKG9sZCAmJiAhbVJvdXRlcnNbaV0uSXNBbGxvY2F0ZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJvdXRlcnNbaV0uU2V0TmV4dEhvcChrSW52YWxpZFJvdXRlcklkKTsKKyAgICAgICAgICAgIEdldE5ldGlmKCkuR2V0QWRkcmVzc1Jlc29sdmVyKCkuUmVtb3ZlKGkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX1JPVVRFUiAmJiAhbVJvdXRlcnNbbVJvdXRlcklkXS5Jc0FsbG9jYXRlZCgpKQorICAgIHsKKyAgICAgICAgQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PX1JPVVRFKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitib29sIE1sZVJvdXRlcjo6SXNTaW5nbGV0b24odm9pZCkKK3sKKyAgICBib29sIHJ2YWwgPSB0cnVlOworCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBFeGl0Tm93KHJ2YWwgPSAoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpID09IDApKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgRXhpdE5vdyhydmFsID0gZmFsc2UpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorCisgICAgICAgIC8vIG5vdCBhIHNpbmdsZXRvbiBpZiBhbnkgb3RoZXIgcm91dGVycyBleGlzdAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGkgIT0gbVJvdXRlcklkICYmIG1Sb3V0ZXJzW2ldLklzQWxsb2NhdGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gbm90IGEgc2luZ2xldG9uIGlmIGFueSBjaGlsZHJlbiBhcmUgUkVFRHMKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtQ2hpbGRyZW5baV0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQgJiYgbUNoaWxkcmVuW2ldLklzRnVsbFRocmVhZERldmljZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworaW50IE1sZVJvdXRlcjo6Q29tcGFyZVBhcnRpdGlvbnMoYm9vbCBhU2luZ2xldG9uQSwgY29uc3QgTGVhZGVyRGF0YVRsdiAmYUxlYWRlckRhdGFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2luZ2xldG9uQiwgY29uc3QgTGVhZGVyRGF0YVRsdiAmYUxlYWRlckRhdGFCKQoreworICAgIGludCBydmFsID0gMDsKKworICAgIGlmIChhU2luZ2xldG9uQSAhPSBhU2luZ2xldG9uQikKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IGFTaW5nbGV0b25CID8gMSA6IC0xKTsKKyAgICB9CisKKyAgICBpZiAoYUxlYWRlckRhdGFBLkdldFdlaWdodGluZygpICE9IGFMZWFkZXJEYXRhQi5HZXRXZWlnaHRpbmcoKSkKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IGFMZWFkZXJEYXRhQS5HZXRXZWlnaHRpbmcoKSA+IGFMZWFkZXJEYXRhQi5HZXRXZWlnaHRpbmcoKSA/IDEgOiAtMSk7CisgICAgfQorCisgICAgaWYgKGFMZWFkZXJEYXRhQS5HZXRQYXJ0aXRpb25JZCgpICE9IGFMZWFkZXJEYXRhQi5HZXRQYXJ0aXRpb25JZCgpKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhydmFsID0gYUxlYWRlckRhdGFBLkdldFBhcnRpdGlvbklkKCkgPiBhTGVhZGVyRGF0YUIuR2V0UGFydGl0aW9uSWQoKSA/IDEgOiAtMSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCit1aW50OF90IE1sZVJvdXRlcjo6R2V0QWN0aXZlUm91dGVyQ291bnQodm9pZCkgY29uc3QKK3sKKyAgICB1aW50OF90IHJ2YWwgPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uSXNBbGxvY2F0ZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcnZhbCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpIYW5kbGVBZHZlcnRpc2VtZW50KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqdGhyZWFkTWVzc2FnZUluZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8uR2V0TGlua0luZm8oKSk7CisgICAgTWFjOjpFeHRBZGRyZXNzIG1hY0FkZHI7CisgICAgU291cmNlQWRkcmVzc1RsdiBzb3VyY2VBZGRyZXNzOworICAgIExlYWRlckRhdGFUbHYgbGVhZGVyRGF0YTsKKyAgICBSb3V0ZVRsdiByb3V0ZTsKKyAgICB1aW50MzJfdCBwYXJ0aXRpb25JZDsKKyAgICBSb3V0ZXIgKnJvdXRlcjsKKyAgICBOZWlnaGJvciAqbmVpZ2hib3I7CisgICAgdWludDhfdCByb3V0ZXJJZDsKKyAgICB1aW50OF90IHJvdXRlckNvdW50OworCisgICAgbWFjQWRkci5TZXQoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworCisgICAgLy8gU291cmNlIEFkZHJlc3MKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1NvdXJjZUFkZHJlc3MsIHNpemVvZihzb3VyY2VBZGRyZXNzKSwgc291cmNlQWRkcmVzcykpOworICAgIFZlcmlmeU9yRXhpdChzb3VyY2VBZGRyZXNzLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBSZW1vdmUgc3RhbGUgbmVpZ2hib3JzCisgICAgaWYgKChuZWlnaGJvciA9IEdldE5laWdoYm9yKG1hY0FkZHIpKSAhPSBOVUxMICYmCisgICAgICAgIG5laWdoYm9yLT5HZXRSbG9jMTYoKSAhPSBzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpKQorICAgIHsKKyAgICAgICAgUmVtb3ZlTmVpZ2hib3IoKm5laWdoYm9yKTsKKyAgICB9CisKKyAgICAvLyBMZWFkZXIgRGF0YQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGVhZGVyRGF0YSwgc2l6ZW9mKGxlYWRlckRhdGEpLCBsZWFkZXJEYXRhKSk7CisgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFJvdXRlIERhdGEKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1JvdXRlLCBzaXplb2Yocm91dGUpLCByb3V0ZSkpOworICAgIFZlcmlmeU9yRXhpdChyb3V0ZS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgcGFydGl0aW9uSWQgPSBsZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCk7CisKKyAgICBpZiAocGFydGl0aW9uSWQgIT0gbUxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSkKKyAgICB7CisgICAgICAgIG90TG9nRGViZ01sZShHZXRJbnN0YW5jZSgpLCAiZGlmZmVyZW50IHBhcnRpdGlvbiEgJWQgJWQgJWQgJWQiLAorICAgICAgICAgICAgICAgICAgICAgbGVhZGVyRGF0YS5HZXRXZWlnaHRpbmcoKSwgcGFydGl0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICBtTGVhZGVyRGF0YS5HZXRXZWlnaHRpbmcoKSwgbUxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSk7CisKKyAgICAgICAgaWYgKHBhcnRpdGlvbklkID09IG1MYXN0UGFydGl0aW9uSWQgJiYgKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKHN0YXRpY19jYXN0PGludDhfdD4ocm91dGUuR2V0Um91dGVySWRTZXF1ZW5jZSgpIC0gbUxhc3RQYXJ0aXRpb25Sb3V0ZXJJZFNlcXVlbmNlKSA+IDApLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfQ0hJTEQgJiYKKyAgICAgICAgICAgIChtZW1jbXAoJm1QYXJlbnQuR2V0RXh0QWRkcmVzcygpLCAmbWFjQWRkciwgc2l6ZW9mKG1hY0FkZHIpKSA9PSAwIHx8ICEobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkpKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICByb3V0ZXJDb3VudCA9IDA7CisKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocm91dGUuSXNSb3V0ZXJJZFNldChpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByb3V0ZXJDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKENvbXBhcmVQYXJ0aXRpb25zKHJvdXRlckNvdW50IDw9IDEsIGxlYWRlckRhdGEsIElzU2luZ2xldG9uKCksIG1MZWFkZXJEYXRhKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TG9nRGViZ01sZShHZXRJbnN0YW5jZSgpLCAidHJ5aW5nIHRvIG1pZ3JhdGUiKTsKKyAgICAgICAgICAgIEJlY29tZUNoaWxkKGtBdHRhY2hCZXR0ZXIpOworICAgICAgICB9CisKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgIH0KKyAgICBlbHNlIGlmIChsZWFkZXJEYXRhLkdldExlYWRlclJvdXRlcklkKCkgIT0gR2V0TGVhZGVySWQoKSkKKyAgICB7CisgICAgICAgIGlmIChtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9DSElMRCkKKyAgICAgICAgeworICAgICAgICAgICAgQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRFJPUDsKKyAgICAgICAgfQorCisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoSXNBY3RpdmVSb3V0ZXIoc291cmNlQWRkcmVzcy5HZXRSbG9jMTYoKSkpOworICAgIHJvdXRlcklkID0gR2V0Um91dGVySWQoc291cmNlQWRkcmVzcy5HZXRSbG9jMTYoKSk7CisgICAgcm91dGVyID0gR2V0Um91dGVyKHJvdXRlcklkKTsKKyAgICBWZXJpZnlPckV4aXQocm91dGVyICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgaWYgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKSAmJgorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHJvdXRlLkdldFJvdXRlcklkU2VxdWVuY2UoKSAtIG1Sb3V0ZXJJZFNlcXVlbmNlKSA+IDApCisgICAgeworICAgICAgICBib29sIHByb2Nlc3NSb3V0ZVRsdiA9IGZhbHNlOworCisgICAgICAgIHN3aXRjaCAobVJvbGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICAgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgICAgICBpZiAoKHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkgPT0gbVBhcmVudC5HZXRSbG9jMTYoKSkgfHwKKyAgICAgICAgICAgICAgICAocm91dGVyLT5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJvY2Vzc1JvdXRlVGx2ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICAgICAgcHJvY2Vzc1JvdXRlVGx2ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHByb2Nlc3NSb3V0ZVRsdikKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFByb2Nlc3NSb3V0ZVRsdihyb3V0ZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBFeGl0Tm93KCk7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBpZiAoKHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkgPT0gbVBhcmVudC5HZXRSbG9jMTYoKSB8fCByb3V0ZXItPkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKSAmJgorICAgICAgICAgICAgKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpICYmCisgICAgICAgICAgICAobVJvdXRlclNlbGVjdGlvbkppdHRlclRpbWVvdXQgPT0gMCkgJiYKKyAgICAgICAgICAgIChHZXRBY3RpdmVSb3V0ZXJDb3VudCgpIDwgbVJvdXRlclVwZ3JhZGVUaHJlc2hvbGQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUm91dGVyU2VsZWN0aW9uSml0dGVyVGltZW91dCA9IChvdFBsYXRSYW5kb21HZXQoKSAlIG1Sb3V0ZXJTZWxlY3Rpb25KaXR0ZXIpICsgMTsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZW1jbXAoJm1QYXJlbnQuR2V0RXh0QWRkcmVzcygpLCAmbWFjQWRkciwgc2l6ZW9mKG1QYXJlbnQuR2V0RXh0QWRkcmVzcygpKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcm91dGVyID0gJm1QYXJlbnQ7CisKKyAgICAgICAgICAgIGlmIChtUGFyZW50LkdldFJsb2MxNigpICE9IHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDAsIHJvdXRlQ291bnQgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlLklzUm91dGVySWRTZXQoaSkgPT0gZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gR2V0TGVhZGVySWQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm91dGUuR2V0Um91dGVDb3N0KHJvdXRlQ291bnQpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbR2V0TGVhZGVySWQoKV0uU2V0TmV4dEhvcChyb3V0ZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtUm91dGVyc1tHZXRMZWFkZXJJZCgpXS5TZXRDb3N0KHJvdXRlLkdldFJvdXRlQ29zdChyb3V0ZUNvdW50KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtUm91dGVyc1tHZXRMZWFkZXJJZCgpXS5TZXROZXh0SG9wKGtJbnZhbGlkUm91dGVySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbR2V0TGVhZGVySWQoKV0uU2V0Q29zdCgwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkgJiYgKHJvdXRlci0+R2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpKQorICAgICAgICB7CisgICAgICAgICAgICByb3V0ZXItPlNldEV4dEFkZHJlc3MobWFjQWRkcik7CisgICAgICAgICAgICByb3V0ZXItPkdldExpbmtJbmZvKCkuQ2xlYXIoKTsKKyAgICAgICAgICAgIHJvdXRlci0+R2V0TGlua0luZm8oKS5BZGRSc3MobmV0aWYuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpLCB0aHJlYWRNZXNzYWdlSW5mby0+bVJzcyk7CisgICAgICAgICAgICByb3V0ZXItPlJlc2V0TGlua0ZhaWx1cmVzKCk7CisgICAgICAgICAgICByb3V0ZXItPlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVMaW5rUmVxdWVzdCk7CisgICAgICAgICAgICBTZW5kTGlua1JlcXVlc3Qocm91dGVyKTsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT19ST1VURSk7CisgICAgICAgIH0KKworICAgICAgICByb3V0ZXItPlNldExhc3RIZWFyZChUaW1lcjo6R2V0Tm93KCkpOworCisgICAgICAgIEV4aXROb3coKTsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgICAgICAvLyBjaGVjayBjdXJyZW50IGFjdGl2ZSByb3V0ZXIgbnVtYmVyCisgICAgICAgIHJvdXRlckNvdW50ID0gMDsKKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyb3V0ZS5Jc1JvdXRlcklkU2V0KGkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJvdXRlckNvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocm91dGVyQ291bnQgPiBtUm91dGVyRG93bmdyYWRlVGhyZXNob2xkICYmCisgICAgICAgICAgICBtUm91dGVyU2VsZWN0aW9uSml0dGVyVGltZW91dCA9PSAwICYmCisgICAgICAgICAgICBIYXNNaW5Eb3duZ3JhZGVOZWlnaGJvclJvdXRlcnMoKSAmJgorICAgICAgICAgICAgSGFzU21hbGxOdW1iZXJPZkNoaWxkcmVuKCkgJiYKKyAgICAgICAgICAgIEhhc09uZU5laWdoYm9yd2l0aENvbXBhcmFibGVDb25uZWN0aXZpdHkocm91dGUsIHJvdXRlcklkKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJvdXRlclNlbGVjdGlvbkppdHRlclRpbWVvdXQgPSAob3RQbGF0UmFuZG9tR2V0KCkgJSBtUm91dGVyU2VsZWN0aW9uSml0dGVyKSArIDE7CisgICAgICAgIH0KKworICAgIC8vIGZhbGwgdGhyb3VnaAorCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisKKyAgICAgICAgLy8gcm91dGVyIGlzIG5vdCBpbiBsaXN0LCByZWplY3QKKyAgICAgICAgaWYgKCFyb3V0ZXItPklzQWxsb2NhdGVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT19ST1VURSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTZW5kIGxpbmsgcmVxdWVzdCBpZiBubyBsaW5rIHRvIHJvdXRlcgorICAgICAgICBpZiAocm91dGVyLT5HZXRTdGF0ZSgpICE9IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgcm91dGVyLT5TZXRFeHRBZGRyZXNzKG1hY0FkZHIpOworICAgICAgICAgICAgcm91dGVyLT5HZXRMaW5rSW5mbygpLkNsZWFyKCk7CisgICAgICAgICAgICByb3V0ZXItPkdldExpbmtJbmZvKCkuQWRkUnNzKG5ldGlmLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSwgdGhyZWFkTWVzc2FnZUluZm8tPm1Sc3MpOworICAgICAgICAgICAgcm91dGVyLT5SZXNldExpbmtGYWlsdXJlcygpOworICAgICAgICAgICAgcm91dGVyLT5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlTGlua1JlcXVlc3QpOworICAgICAgICAgICAgcm91dGVyLT5TZXREYXRhUmVxdWVzdFBlbmRpbmcoZmFsc2UpOworICAgICAgICAgICAgU2VuZExpbmtSZXF1ZXN0KHJvdXRlcik7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEUpOworICAgICAgICB9CisKKyAgICAgICAgcm91dGVyLT5TZXRMYXN0SGVhcmQoVGltZXI6OkdldE5vdygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVXBkYXRlUm91dGVzKHJvdXRlLCByb3V0ZXJJZCk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLlNlbmRTZXJ2ZXJEYXRhTm90aWZpY2F0aW9uKCk7CisjZW5kaWYKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpVcGRhdGVSb3V0ZXMoY29uc3QgUm91dGVUbHYgJmFSb3V0ZSwgdWludDhfdCBhUm91dGVySWQpCit7CisgICAgdWludDhfdCBjdXJDb3N0OworICAgIHVpbnQ4X3QgbmV3Q29zdDsKKyAgICB1aW50OF90IG9sZE5leHRIb3A7CisgICAgdWludDhfdCBjb3N0OworICAgIHVpbnQ4X3QgbGlua1F1YWxpdHk7CisgICAgYm9vbCB1cGRhdGU7CisKKyAgICAvLyB1cGRhdGUgcm91dGVzCisgICAgZG8KKyAgICB7CisgICAgICAgIHVwZGF0ZSA9IGZhbHNlOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMCwgcm91dGVDb3VudCA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhUm91dGUuSXNSb3V0ZXJJZFNldChpKSA9PSBmYWxzZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1Sb3V0ZXJzW2ldLklzQWxsb2NhdGVkKCkgPT0gZmFsc2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcm91dGVDb3VudCsrOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaSA9PSBtUm91dGVySWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGlua1F1YWxpdHkgPSBhUm91dGUuR2V0TGlua1F1YWxpdHlJbihyb3V0ZUNvdW50KTsKKworICAgICAgICAgICAgICAgIGlmIChtUm91dGVyc1thUm91dGVySWRdLkdldExpbmtRdWFsaXR5T3V0KCkgIT0gbGlua1F1YWxpdHkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtUm91dGVyc1thUm91dGVySWRdLlNldExpbmtRdWFsaXR5T3V0KGxpbmtRdWFsaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2xkTmV4dEhvcCA9IG1Sb3V0ZXJzW2ldLkdldE5leHRIb3AoKTsKKworICAgICAgICAgICAgICAgIGlmIChpID09IGFSb3V0ZXJJZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvc3QgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb3N0ID0gYVJvdXRlLkdldFJvdXRlQ29zdChyb3V0ZUNvdW50KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY29zdCA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3N0ID0ga01heFJvdXRlQ29zdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghSXNSb3V0ZXJJZFZhbGlkKG1Sb3V0ZXJzW2ldLkdldE5leHRIb3AoKSkgfHwgbVJvdXRlcnNbaV0uR2V0TmV4dEhvcCgpID09IGFSb3V0ZXJJZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHJvdXRlIGhhcyBubyBuZXh0aG9wIG9yIG5leHRob3AgaXMgbmVpZ2hib3IgKHNlbmRlcikKKworICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBhUm91dGVySWQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3N0ICsgR2V0TGlua0Nvc3QoYVJvdXRlcklkKSA8PSBrTWF4Um91dGVDb3N0KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSXNSb3V0ZXJJZFZhbGlkKG1Sb3V0ZXJzW2ldLkdldE5leHRIb3AoKSkgJiYgR2V0TGlua0Nvc3QoaSkgPj0ga01heFJvdXRlQ29zdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0QWR2ZXJ0aXNlSW50ZXJ2YWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUm91dGVyc1tpXS5TZXROZXh0SG9wKGFSb3V0ZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbaV0uU2V0Q29zdChjb3N0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1Sb3V0ZXJzW2ldLkdldE5leHRIb3AoKSA9PSBhUm91dGVySWQpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEdldExpbmtDb3N0KGkpID49IGtNYXhSb3V0ZUNvc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldEFkdmVydGlzZUludGVydmFsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbaV0uU2V0TmV4dEhvcChrSW52YWxpZFJvdXRlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUm91dGVyc1tpXS5TZXRDb3N0KDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzW2ldLlNldExhc3RIZWFyZChUaW1lcjo6R2V0Tm93KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGN1ckNvc3QgPSBtUm91dGVyc1tpXS5HZXRDb3N0KCkgKyBHZXRMaW5rQ29zdChtUm91dGVyc1tpXS5HZXROZXh0SG9wKCkpOworICAgICAgICAgICAgICAgICAgICBuZXdDb3N0ID0gY29zdCArIEdldExpbmtDb3N0KGFSb3V0ZXJJZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0Nvc3QgPCBjdXJDb3N0ICYmIGkgIT0gYVJvdXRlcklkKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtUm91dGVyc1tpXS5TZXROZXh0SG9wKGFSb3V0ZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtUm91dGVyc1tpXS5TZXRDb3N0KGNvc3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdXBkYXRlIHw9IG1Sb3V0ZXJzW2ldLkdldE5leHRIb3AoKSAhPSBvbGROZXh0SG9wOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByb3V0ZUNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKHVwZGF0ZSk7CisKKyNpZiAxCisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uSXNBbGxvY2F0ZWQoKSA9PSBmYWxzZSB8fCAhSXNSb3V0ZXJJZFZhbGlkKG1Sb3V0ZXJzW2ldLkdldE5leHRIb3AoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgb3RMb2dEZWJnTWxlKEdldEluc3RhbmNlKCksCisgICAgICAgICAgICAgICAgICAgICAiJXg6ICV4ICVkICVkICVkICVkIiwKKyAgICAgICAgICAgICAgICAgICAgIEdldFJsb2MxNihpKSwKKyAgICAgICAgICAgICAgICAgICAgIEdldFJsb2MxNihtUm91dGVyc1tpXS5HZXROZXh0SG9wKCkpLAorICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbaV0uR2V0Q29zdCgpLAorICAgICAgICAgICAgICAgICAgICAgR2V0TGlua0Nvc3QoaSksIG1Sb3V0ZXJzW2ldLkdldExpbmtJbmZvKCkuR2V0TGlua1F1YWxpdHkoR2V0TmV0aWYoKS5HZXRNYWMoKS5HZXROb2lzZUZsb29yKCkpLAorICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbaV0uR2V0TGlua1F1YWxpdHlPdXQoKSk7CisgICAgfQorCisjZW5kaWYKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkhhbmRsZVBhcmVudFJlcXVlc3QoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqdGhyZWFkTWVzc2FnZUluZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8uR2V0TGlua0luZm8oKSk7CisgICAgTWFjOjpFeHRBZGRyZXNzIG1hY0FkZHI7CisgICAgVmVyc2lvblRsdiB2ZXJzaW9uOworICAgIFNjYW5NYXNrVGx2IHNjYW5NYXNrOworICAgIENoYWxsZW5nZVRsdiBjaGFsbGVuZ2U7CisgICAgQ2hpbGQgKmNoaWxkOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBwYXJlbnQgcmVxdWVzdCIpOworCisgICAgLy8gQSBSb3V0ZXIgTVVTVCBOT1Qgc2VuZCBhbiBNTEUgUGFyZW50IFJlc3BvbnNlIGlmOgorCisgICAgLy8gMS4gSXQgaGFzIG5vIGF2YWlsYWJsZSBDaGlsZCBjYXBhY2l0eSAoaWYgTWF4IENoaWxkIENvdW50IG1pbnVzCisgICAgLy8gQ2hpbGQgQ291bnQgd291bGQgYmUgZXF1YWwgdG8gemVybykKKyAgICAvLyA9PT4gdmVyaWZpZWQgYmVsb3cgd2hlbiBhbGxvY2F0aW5nIGEgY2hpbGQgZW50cnkKKworICAgIC8vIDIuIEl0IGlzIGRpc2Nvbm5lY3RlZCBmcm9tIGl0cyBQYXJ0aXRpb24gKHRoYXQgaXMsIGl0IGhhcyBub3QKKyAgICAvLyByZWNlaXZlZCBhbiB1cGRhdGVkIElEIHNlcXVlbmNlIG51bWJlciB3aXRoaW4gTEVBREVSX1RJTUVPVVQKKyAgICAvLyBzZWNvbmRzCisgICAgVmVyaWZ5T3JFeGl0KEdldExlYWRlckFnZSgpIDwgbU5ldHdvcmtJZFRpbWVvdXQsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAvLyAzLiBJdHMgY3VycmVudCByb3V0aW5nIHBhdGggY29zdCB0byB0aGUgTGVhZGVyIGlzIGluZmluaXRlLgorICAgIFZlcmlmeU9yRXhpdChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIgfHwKKyAgICAgICAgICAgICAgICAgR2V0TGlua0Nvc3QoR2V0TGVhZGVySWQoKSkgPCBrTWF4Um91dGVDb3N0IHx8CisgICAgICAgICAgICAgICAgIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCAmJiBtUm91dGVyc1tHZXRMZWFkZXJJZCgpXS5HZXRDb3N0KCkgKyAxIDwga01heFJvdXRlQ29zdCkgfHwKKyAgICAgICAgICAgICAgICAgKG1Sb3V0ZXJzW0dldExlYWRlcklkKCldLkdldENvc3QoKSArIEdldExpbmtDb3N0KG1Sb3V0ZXJzW0dldExlYWRlcklkKCldLkdldE5leHRIb3AoKSkgPCBrTWF4Um91dGVDb3N0KSwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIG1hY0FkZHIuU2V0KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKworICAgIC8vIFZlcnNpb24KKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1ZlcnNpb24sIHNpemVvZih2ZXJzaW9uKSwgdmVyc2lvbikpOworICAgIFZlcmlmeU9yRXhpdCh2ZXJzaW9uLklzVmFsaWQoKSAmJiB2ZXJzaW9uLkdldFZlcnNpb24oKSA+PSBrVmVyc2lvbiwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBTY2FuIE1hc2sKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1NjYW5NYXNrLCBzaXplb2Yoc2Nhbk1hc2spLCBzY2FuTWFzaykpOworICAgIFZlcmlmeU9yRXhpdChzY2FuTWFzay5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBFeGl0Tm93KCk7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBWZXJpZnlPckV4aXQoc2Nhbk1hc2suSXNFbmREZXZpY2VGbGFnU2V0KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBWZXJpZnlPckV4aXQoc2Nhbk1hc2suSXNSb3V0ZXJGbGFnU2V0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBDaGFsbGVuZ2UKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0NoYWxsZW5nZSwgc2l6ZW9mKGNoYWxsZW5nZSksIGNoYWxsZW5nZSkpOworICAgIFZlcmlmeU9yRXhpdChjaGFsbGVuZ2UuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGNoaWxkID0gRmluZENoaWxkKG1hY0FkZHIpOworCisgICAgaWYgKGNoaWxkICE9IE5VTEwgJiYgIWNoaWxkLT5Jc0Z1bGxUaHJlYWREZXZpY2UoKSkKKyAgICB7CisgICAgICAgIC8vIFBhcmVudCBSZXF1ZXN0IGZyb20gYSBNVEQgY2hpbGQgbWVhbnMgdGhhdCB0aGUgY2hpbGQgaGFkIGRldGFjaGVkLiBJdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQuCisgICAgICAgIFJlbW92ZU5laWdoYm9yKCpjaGlsZCk7CisgICAgICAgIGNoaWxkID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoY2hpbGQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCgoY2hpbGQgPSBOZXdDaGlsZCgpKSAhPSBOVUxMKTsKKworICAgICAgICBtZW1zZXQoY2hpbGQsIDAsIHNpemVvZigqY2hpbGQpKTsKKworICAgICAgICAvLyBNQUMgQWRkcmVzcworICAgICAgICBjaGlsZC0+U2V0RXh0QWRkcmVzcyhtYWNBZGRyKTsKKyAgICAgICAgY2hpbGQtPkdldExpbmtJbmZvKCkuQ2xlYXIoKTsKKyAgICAgICAgY2hpbGQtPkdldExpbmtJbmZvKCkuQWRkUnNzKEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpLCB0aHJlYWRNZXNzYWdlSW5mby0+bVJzcyk7CisgICAgICAgIGNoaWxkLT5SZXNldExpbmtGYWlsdXJlcygpOworICAgICAgICBjaGlsZC0+U2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZVBhcmVudFJlcXVlc3QpOworICAgICAgICBjaGlsZC0+U2V0RGF0YVJlcXVlc3RQZW5kaW5nKGZhbHNlKTsKKworICAgICAgICBjaGlsZC0+U2V0TGFzdEhlYXJkKFRpbWVyOjpHZXROb3coKSk7CisgICAgICAgIGNoaWxkLT5TZXRUaW1lb3V0KFRpbWVyOjpNc2VjVG9TZWMoa01heENoaWxkSWRSZXF1ZXN0VGltZW91dCkpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kUGFyZW50UmVzcG9uc2UoY2hpbGQsIGNoYWxsZW5nZSwgIXNjYW5NYXNrLklzRW5kRGV2aWNlRmxhZ1NldCgpKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1sZVJvdXRlcjo6SGFuZGxlU3RhdGVVcGRhdGVUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlU3RhdGVVcGRhdGVUaW1lcigpOworfQorCit2b2lkIE1sZVJvdXRlcjo6SGFuZGxlU3RhdGVVcGRhdGVUaW1lcih2b2lkKQoreworICAgIGJvb2wgcm91dGVyU3RhdGVVcGRhdGUgPSBmYWxzZTsKKworICAgIGlmIChtQ2hhbGxlbmdlVGltZW91dCA+IDApCisgICAgeworICAgICAgICBtQ2hhbGxlbmdlVGltZW91dC0tOworICAgIH0KKworICAgIGlmIChtUm91dGVyU2VsZWN0aW9uSml0dGVyVGltZW91dCA+IDApCisgICAgeworICAgICAgICBtUm91dGVyU2VsZWN0aW9uSml0dGVyVGltZW91dC0tOworCisgICAgICAgIGlmIChtUm91dGVyU2VsZWN0aW9uSml0dGVyVGltZW91dCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByb3V0ZXJTdGF0ZVVwZGF0ZSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgIEV4aXROb3coKTsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIGlmIChyb3V0ZXJTdGF0ZVVwZGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEdldEFjdGl2ZVJvdXRlckNvdW50KCkgPCBtUm91dGVyVXBncmFkZVRocmVzaG9sZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyB1cGdyYWRlIHRvIFJvdXRlcgorICAgICAgICAgICAgICAgIEJlY29tZVJvdXRlcihUaHJlYWRTdGF0dXNUbHY6OmtUb29GZXdSb3V0ZXJzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFtQWR2ZXJ0aXNlVGltZXIuSXNSdW5uaW5nKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2VuZEFkdmVydGlzZW1lbnQoKTsKKworICAgICAgICAgICAgICAgIG1BZHZlcnRpc2VUaW1lci5TdGFydCgKKyAgICAgICAgICAgICAgICAgICAgVGltZXI6OlNlY1RvTXNlYyhrUmVlZEFkdmVydGlzZUludGVydmFsKSwKKyAgICAgICAgICAgICAgICAgICAgVGltZXI6OlNlY1RvTXNlYyhrUmVlZEFkdmVydGlzZUludGVydmFsICsga1JlZWRBZHZlcnRpc2VKaXR0ZXIpLAorICAgICAgICAgICAgICAgICAgICBUcmlja2xlVGltZXI6OmtNb2RlUGxhaW5UaW1lcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorCisgICAgLy8gZmFsbCB0aHJvdWdoCisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgLy8gdmVyaWZ5IHBhdGggdG8gbGVhZGVyCisgICAgICAgIG90TG9nRGViZ01sZShHZXRJbnN0YW5jZSgpLCAibmV0d29yayBpZCB0aW1lb3V0ID0gJWQiLCBHZXRMZWFkZXJBZ2UoKSk7CisKKyAgICAgICAgaWYgKEdldExlYWRlckFnZSgpID49IG1OZXR3b3JrSWRUaW1lb3V0KQorICAgICAgICB7CisgICAgICAgICAgICBCZWNvbWVDaGlsZChrQXR0YWNoU2FtZTEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJvdXRlclN0YXRlVXBkYXRlICYmIEdldEFjdGl2ZVJvdXRlckNvdW50KCkgPiBtUm91dGVyRG93bmdyYWRlVGhyZXNob2xkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkb3duZ3JhZGUgdG8gUkVFRAorICAgICAgICAgICAgQmVjb21lQ2hpbGQoa0F0dGFjaFNhbWUxKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisKKyAgICAgICAgLy8gdXBkYXRlIHJvdXRlciBpZCBzZXF1ZW5jZQorICAgICAgICBpZiAoR2V0TGVhZGVyQWdlKCkgPj0ga1JvdXRlcklkU2VxdWVuY2VQZXJpb2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Sb3V0ZXJJZFNlcXVlbmNlKys7CisgICAgICAgICAgICBtUm91dGVySWRTZXF1ZW5jZUxhc3RVcGRhdGVkID0gVGltZXI6OkdldE5vdygpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG1Jc1JvdXRlclJlc3RvcmluZ0NoaWxkcmVuKQorICAgIHsKKyAgICAgICAgYm9vbCBoYXNSZXN0b3JpbmdDaGlsZHJlbiA9IGZhbHNlOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVSZXN0b3JlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KCZtQ2hpbGRyZW5baV0pOworICAgICAgICAgICAgICAgIGhhc1Jlc3RvcmluZ0NoaWxkcmVuID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIG5vIGNoaWxkIHRvIHJlc3RvcmUKKyAgICAgICAgaWYgKCFoYXNSZXN0b3JpbmdDaGlsZHJlbikKKyAgICAgICAgeworICAgICAgICAgICAgbUlzUm91dGVyUmVzdG9yaW5nQ2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHVwZGF0ZSBjaGlsZHJlbiBzdGF0ZQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdGltZW91dCA9IDA7CisKKyAgICAgICAgc3dpdGNoIChtQ2hpbGRyZW5baV0uR2V0U3RhdGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVJbnZhbGlkOgorICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVDaGlsZElkUmVxdWVzdDoKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZVBhcmVudFJlcXVlc3Q6CisgICAgICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZVZhbGlkOgorICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVSZXN0b3JlZDoKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlQ2hpbGRVcGRhdGVSZXF1ZXN0OgorICAgICAgICAgICAgdGltZW91dCA9IFRpbWVyOjpTZWNUb01zZWMobUNoaWxkcmVuW2ldLkdldFRpbWVvdXQoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVMaW5rUmVxdWVzdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoVGltZXI6OkdldE5vdygpIC0gbUNoaWxkcmVuW2ldLkdldExhc3RIZWFyZCgpKSA+PSB0aW1lb3V0KQorICAgICAgICB7CisgICAgICAgICAgICBSZW1vdmVOZWlnaGJvcihtQ2hpbGRyZW5baV0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gdXBkYXRlIHJvdXRlciBzdGF0ZQorICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtUm91dGVyc1tpXS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChUaW1lcjo6R2V0Tm93KCkgLSBtUm91dGVyc1tpXS5HZXRMYXN0SGVhcmQoKSkgPj0gVGltZXI6OlNlY1RvTXNlYyhrTWF4TmVpZ2hib3JBZ2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJlbW92ZU5laWdoYm9yKG1Sb3V0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtUm91dGVyc1tpXS5Jc0FsbG9jYXRlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghSXNSb3V0ZXJJZFZhbGlkKG1Sb3V0ZXJzW2ldLkdldE5leHRIb3AoKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgR2V0TGlua0Nvc3QoaSkgPj0ga01heFJvdXRlQ29zdCAmJgorICAgICAgICAgICAgICAgICAgICAoVGltZXI6OkdldE5vdygpIC0gbVJvdXRlcnNbaV0uR2V0TGFzdEhlYXJkKCkpID49IFRpbWVyOjpTZWNUb01zZWMoa01heExlYWRlclRvUm91dGVyVGltZW91dCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBSZWxlYXNlUm91dGVySWQoaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobVJvdXRlcnNbaV0uSXNSZWNsYWltRGVsYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKFRpbWVyOjpHZXROb3coKSAtIG1Sb3V0ZXJzW2ldLkdldExhc3RIZWFyZCgpKSA+PQorICAgICAgICAgICAgICAgICAgICBUaW1lcjo6U2VjVG9Nc2VjKChrTWF4TGVhZGVyVG9Sb3V0ZXJUaW1lb3V0ICsga1JvdXRlcklkUmV1c2VEZWxheSkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbaV0uU2V0UmVjbGFpbURlbGF5KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtU3RhdGVVcGRhdGVUaW1lci5TdGFydChrU3RhdGVVcGRhdGVQZXJpb2QpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNlbmRQYXJlbnRSZXNwb25zZShDaGlsZCAqYUNoaWxkLCBjb25zdCBDaGFsbGVuZ2VUbHYgJmNoYWxsZW5nZSwgYm9vbCBhUm91dGVyc09ubHlSZXF1ZXN0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElwNjo6QWRkcmVzcyBkZXN0aW5hdGlvbjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIHVpbnQxNl90IGRlbGF5OworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmRQYXJlbnRSZXNwb25zZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTb3VyY2VBZGRyZXNzKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExlYWRlckRhdGEoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGlua0ZyYW1lQ291bnRlcigqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRNbGVGcmFtZUNvdW50ZXIoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUmVzcG9uc2UoKm1lc3NhZ2UsIGNoYWxsZW5nZS5HZXRDaGFsbGVuZ2UoKSwgY2hhbGxlbmdlLkdldExlbmd0aCgpKSk7CisKKyAgICBhQ2hpbGQtPkdlbmVyYXRlQ2hhbGxlbmdlKCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQ2hhbGxlbmdlKCptZXNzYWdlLCBhQ2hpbGQtPkdldENoYWxsZW5nZSgpLCBhQ2hpbGQtPkdldENoYWxsZW5nZVNpemUoKSkpOworCisgICAgaWYgKGlzQXNzaWduTGlua1F1YWxpdHkgJiYKKyAgICAgICAgKG1lbWNtcChtQWRkcjY0Lm04LCAmYUNoaWxkLT5HZXRFeHRBZGRyZXNzKCksIE9UX0VYVF9BRERSRVNTX1NJWkUpID09IDApKQorICAgIHsKKyAgICAgICAgLy8gdXNlIGFzc2lnbmVkIG9uZSB0byBlbnN1cmUgdGhlIGxpbmsgcXVhbGl0eQorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGlua01hcmdpbigqbWVzc2FnZSwgbUFzc2lnbkxpbmtNYXJnaW4pKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBBcHBlbmRMaW5rTWFyZ2luKCptZXNzYWdlLCBhQ2hpbGQtPkdldExpbmtJbmZvKCkuR2V0TGlua01hcmdpbihHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSkpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQ29ubmVjdGl2aXR5KCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFZlcnNpb24oKm1lc3NhZ2UpKTsKKworICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgIGRlc3RpbmF0aW9uLlNldElpZChhQ2hpbGQtPkdldEV4dEFkZHJlc3MoKSk7CisKKyAgICBpZiAoYVJvdXRlcnNPbmx5UmVxdWVzdCkKKyAgICB7CisgICAgICAgIGRlbGF5ID0gKG90UGxhdFJhbmRvbUdldCgpICUga1BhcmVudFJlc3BvbnNlTWF4RGVsYXlSb3V0ZXJzKSArIDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRlbGF5ID0gKG90UGxhdFJhbmRvbUdldCgpICUga1BhcmVudFJlc3BvbnNlTWF4RGVsYXlBbGwpICsgMTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQWRkRGVsYXllZFJlc3BvbnNlKCptZXNzYWdlLCBkZXN0aW5hdGlvbiwgZGVsYXkpKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiRGVsYXllZCBQYXJlbnQgUmVzcG9uc2UiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlVwZGF0ZUNoaWxkQWRkcmVzc2VzKGNvbnN0IEFkZHJlc3NSZWdpc3RyYXRpb25UbHYgJmFUbHYsIENoaWxkICZhQ2hpbGQpCit7CisgICAgY29uc3QgQWRkcmVzc1JlZ2lzdHJhdGlvbkVudHJ5ICplbnRyeTsKKyAgICBJcDY6OkFkZHJlc3MgYWRkcmVzczsKKyAgICBMb3dwYW46OkNvbnRleHQgY29udGV4dDsKKyAgICBDaGlsZCAqY2hpbGQ7CisgICAgdWludDhfdCBjb3VudDsKKyAgICB1aW50OF90IGluZGV4OworICAgIGNoYXIgc3RyaW5nQnVmZmVyW0lwNjo6QWRkcmVzczo6a0lwNkFkZHJlc3NTdHJpbmdTaXplXTsKKworICAgIGFDaGlsZC5DbGVhcklwNkFkZHJlc3NlcygpOworCisgICAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgQ2hpbGQ6OmtNYXhJcDZBZGRyZXNzUGVyQ2hpbGQ7IGNvdW50KyspCisgICAgeworICAgICAgICBpZiAoKGVudHJ5ID0gYVRsdi5HZXRBZGRyZXNzRW50cnkoY291bnQpKSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbnRyeS0+SXNDb21wcmVzc2VkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHh4eCBjaGVjayBpZiBjb250ZXh0IGlkIGV4aXN0cworICAgICAgICAgICAgR2V0TmV0aWYoKS5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldENvbnRleHQoZW50cnktPkdldENvbnRleHRJZCgpLCBjb250ZXh0KTsKKyAgICAgICAgICAgIG1lbWNweSgmYWRkcmVzcywgY29udGV4dC5tUHJlZml4LCBCaXRWZWN0b3JCeXRlcyhjb250ZXh0Lm1QcmVmaXhMZW5ndGgpKTsKKyAgICAgICAgICAgIGFkZHJlc3MuU2V0SWlkKGVudHJ5LT5HZXRJaWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhZGRyZXNzID0gKmVudHJ5LT5HZXRJcDZBZGRyZXNzKCk7CisgICAgICAgIH0KKworICAgICAgICBhQ2hpbGQuR2V0SXA2QWRkcmVzcyhjb3VudCkgPSBhZGRyZXNzOworCisgICAgICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiQ2hpbGQgMHglMDR4IElQdjYgYWRkcmVzc1slZF09JXMiLCBhQ2hpbGQuR2V0UmxvYzE2KCksIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5Ub1N0cmluZyhzdHJpbmdCdWZmZXIsIHNpemVvZihzdHJpbmdCdWZmZXIpKSk7CisKKyAgICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIHNhbWUgYWRkcmVzcyBpcyBpbi11c2UgYnkgYW5vdGhlciBjaGlsZCwgaWYgc28KKyAgICAgICAgLy8gcmVtb3ZlIGl0LiBUaGlzIGltcGxlbWVudHMgImxhc3QtaW4gd2lucyIgZHVwbGljYXRlIGFkZHJlc3MKKyAgICAgICAgLy8gcmVzb2x1dGlvbiBwb2xpY3kuCisgICAgICAgIC8vCisgICAgICAgIC8vIER1cGxpY2F0ZSBhZGRyZXNzZXMgY2FuIG9jY3VyIGlmIGEgcHJldmlvdXNseSBhdHRhY2hlZCBjaGlsZAorICAgICAgICAvLyBhdHRhY2hlcyB0byBzYW1lIHBhcmVudCBhZ2FpbiAoYWZ0ZXIgYSByZXNldCwgbWVtb3J5IHdpcGUpIHVzaW5nCisgICAgICAgIC8vIGEgbmV3IHJhbmRvbSBleHRlbmRlZCBhZGRyZXNzIGJlZm9yZSB0aGUgb2xkIGVudHJ5IGluIHRoZSBjaGlsZAorICAgICAgICAvLyB0YWJsZSBpcyB0aW1lZCBvdXQgYW5kIHRoZW4gdHJ5aW5nIHRvIHJlZ2lzdGVyIGl0cyBnbG9iYWxseSB1bmlxdWUKKyAgICAgICAgLy8gSVB2NiBhZGRyZXNzIGFzIHRoZSBuZXcgY2hpbGQuCisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoaWxkID0gJm1DaGlsZHJlbltpXTsKKworICAgICAgICAgICAgaWYgKCFjaGlsZC0+SXNTdGF0ZVZhbGlkT3JSZXN0b3JpbmcoKSB8fCAoY2hpbGQgPT0gJmFDaGlsZCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaGlsZC0+RmluZElwNkFkZHJlc3MoYWRkcmVzcywgJmluZGV4KSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoaWxkLT5SZW1vdmVJcDZBZGRyZXNzKGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb3VudCA9PSAwKQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJDaGlsZCAweCUwNHggaGFzIG5vIHJlZ2lzdGVyZWQgSVB2NiBhZGRyZXNzIiwgYUNoaWxkLkdldFJsb2MxNigpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJDaGlsZCAweCUwNHggaGFzICVkIHJlZ2lzdGVyZWQgSVB2NiBhZGRyZXNzJXMiLCBhQ2hpbGQuR2V0UmxvYzE2KCksIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgKGNvdW50ID09IDEpID8gIiIgOiAiZXMiKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoc3RyaW5nQnVmZmVyKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6SGFuZGxlQ2hpbGRJZFJlcXVlc3QoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2UpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqdGhyZWFkTWVzc2FnZUluZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8uR2V0TGlua0luZm8oKSk7CisgICAgTWFjOjpFeHRBZGRyZXNzIG1hY0FkZHI7CisgICAgUmVzcG9uc2VUbHYgcmVzcG9uc2U7CisgICAgTGlua0ZyYW1lQ291bnRlclRsdiBsaW5rRnJhbWVDb3VudGVyOworICAgIE1sZUZyYW1lQ291bnRlclRsdiBtbGVGcmFtZUNvdW50ZXI7CisgICAgTW9kZVRsdiBtb2RlOworICAgIFRpbWVvdXRUbHYgdGltZW91dDsKKyAgICBBZGRyZXNzUmVnaXN0cmF0aW9uVGx2IGFkZHJlc3M7CisgICAgVGx2UmVxdWVzdFRsdiB0bHZSZXF1ZXN0OworICAgIEFjdGl2ZVRpbWVzdGFtcFRsdiBhY3RpdmVUaW1lc3RhbXA7CisgICAgUGVuZGluZ1RpbWVzdGFtcFRsdiBwZW5kaW5nVGltZXN0YW1wOworICAgIENoaWxkICpjaGlsZDsKKyAgICB1aW50OF90IG51bVRsdnM7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIENoaWxkIElEIFJlcXVlc3QiKTsKKworICAgIC8vIG9ubHkgcHJvY2VzcyBtZXNzYWdlIHdoZW4gb3BlcmF0aW5nIGFzIGEgY2hpbGQsIHJvdXRlciwgb3IgbGVhZGVyCisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlID49IE9UX0RFVklDRV9ST0xFX0NISUxELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgLy8gRmluZCBDaGlsZAorICAgIG1hY0FkZHIuU2V0KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKworICAgIFZlcmlmeU9yRXhpdCgoY2hpbGQgPSBGaW5kQ2hpbGQobWFjQWRkcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisKKyAgICAvLyBSZXNwb25zZQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprUmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSksIHJlc3BvbnNlKSk7CisgICAgVmVyaWZ5T3JFeGl0KHJlc3BvbnNlLklzVmFsaWQoKSAmJgorICAgICAgICAgICAgICAgICBtZW1jbXAocmVzcG9uc2UuR2V0UmVzcG9uc2UoKSwgY2hpbGQtPkdldENoYWxsZW5nZSgpLCBjaGlsZC0+R2V0Q2hhbGxlbmdlU2l6ZSgpKSA9PSAwLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1NFQ1VSSVRZKTsKKworICAgIC8vIExpbmstTGF5ZXIgRnJhbWUgQ291bnRlcgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGlua0ZyYW1lQ291bnRlciwgc2l6ZW9mKGxpbmtGcmFtZUNvdW50ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rRnJhbWVDb3VudGVyKSk7CisgICAgVmVyaWZ5T3JFeGl0KGxpbmtGcmFtZUNvdW50ZXIuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIE1MRSBGcmFtZSBDb3VudGVyCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtNbGVGcmFtZUNvdW50ZXIsIHNpemVvZihtbGVGcmFtZUNvdW50ZXIpLCBtbGVGcmFtZUNvdW50ZXIpID09CisgICAgICAgIE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQobWxlRnJhbWVDb3VudGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1sZUZyYW1lQ291bnRlci5TZXRGcmFtZUNvdW50ZXIobGlua0ZyYW1lQ291bnRlci5HZXRGcmFtZUNvdW50ZXIoKSk7CisgICAgfQorCisgICAgLy8gTW9kZQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTW9kZSwgc2l6ZW9mKG1vZGUpLCBtb2RlKSk7CisgICAgVmVyaWZ5T3JFeGl0KG1vZGUuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFRpbWVvdXQKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1RpbWVvdXQsIHNpemVvZih0aW1lb3V0KSwgdGltZW91dCkpOworICAgIFZlcmlmeU9yRXhpdCh0aW1lb3V0LklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBJcDYgQWRkcmVzcworICAgIGFkZHJlc3MuU2V0TGVuZ3RoKDApOworCisgICAgaWYgKChtb2RlLkdldE1vZGUoKSAmIE1vZGVUbHY6OmtNb2RlRkZEKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtBZGRyZXNzUmVnaXN0cmF0aW9uLCBzaXplb2YoYWRkcmVzcyksIGFkZHJlc3MpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFkZHJlc3MuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKKyAgICAvLyBUTFYgUmVxdWVzdAorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprVGx2UmVxdWVzdCwgc2l6ZW9mKHRsdlJlcXVlc3QpLCB0bHZSZXF1ZXN0KSk7CisgICAgVmVyaWZ5T3JFeGl0KHRsdlJlcXVlc3QuSXNWYWxpZCgpICYmIHRsdlJlcXVlc3QuR2V0TGVuZ3RoKCkgPD0gQ2hpbGQ6OmtNYXhSZXF1ZXN0VGx2cywKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBBY3RpdmUgVGltZXN0YW1wCisgICAgYWN0aXZlVGltZXN0YW1wLlNldExlbmd0aCgwKTsKKworICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQWN0aXZlVGltZXN0YW1wLCBzaXplb2YoYWN0aXZlVGltZXN0YW1wKSwgYWN0aXZlVGltZXN0YW1wKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFjdGl2ZVRpbWVzdGFtcC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworICAgIC8vIFBlbmRpbmcgVGltZXN0YW1wCisgICAgcGVuZGluZ1RpbWVzdGFtcC5TZXRMZW5ndGgoMCk7CisKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1BlbmRpbmdUaW1lc3RhbXAsIHNpemVvZihwZW5kaW5nVGltZXN0YW1wKSwgcGVuZGluZ1RpbWVzdGFtcCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChwZW5kaW5nVGltZXN0YW1wLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIGZyb20gcm91dGVyIHRhYmxlCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uR2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCAmJgorICAgICAgICAgICAgbWVtY21wKCZtUm91dGVyc1tpXS5HZXRFeHRBZGRyZXNzKCksICZtYWNBZGRyLCBzaXplb2YobWFjQWRkcikpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlbW92ZU5laWdoYm9yKG1Sb3V0ZXJzW2ldKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNoaWxkLT5HZXRTdGF0ZSgpICE9IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICB7CisgICAgICAgIGNoaWxkLT5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlQ2hpbGRJZFJlcXVlc3QpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBSZW1vdmVTdG9yZWRDaGlsZChjaGlsZC0+R2V0UmxvYzE2KCkpOworCisgICAgICAgIGlmICghY2hpbGQtPklzUnhPbldoZW5JZGxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5DbGVhckNoaWxkSW5kaXJlY3RNZXNzYWdlcygqY2hpbGQpOworICAgICAgICB9CisgICAgfQorCisKKyAgICBjaGlsZC0+U2V0TGFzdEhlYXJkKFRpbWVyOjpHZXROb3coKSk7CisgICAgY2hpbGQtPlNldExpbmtGcmFtZUNvdW50ZXIobGlua0ZyYW1lQ291bnRlci5HZXRGcmFtZUNvdW50ZXIoKSk7CisgICAgY2hpbGQtPlNldE1sZUZyYW1lQ291bnRlcihtbGVGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworICAgIGNoaWxkLT5TZXRLZXlTZXF1ZW5jZShhS2V5U2VxdWVuY2UpOworICAgIGNoaWxkLT5TZXREZXZpY2VNb2RlKG1vZGUuR2V0TW9kZSgpKTsKKyAgICBjaGlsZC0+R2V0TGlua0luZm8oKS5BZGRSc3MobmV0aWYuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpLCB0aHJlYWRNZXNzYWdlSW5mby0+bVJzcyk7CisgICAgY2hpbGQtPlNldFRpbWVvdXQodGltZW91dC5HZXRUaW1lb3V0KCkpOworCisgICAgaWYgKG1vZGUuR2V0TW9kZSgpICYgTW9kZVRsdjo6a01vZGVGdWxsTmV0d29ya0RhdGEpCisgICAgeworICAgICAgICBjaGlsZC0+U2V0TmV0d29ya0RhdGFWZXJzaW9uKG1MZWFkZXJEYXRhLkdldERhdGFWZXJzaW9uKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjaGlsZC0+U2V0TmV0d29ya0RhdGFWZXJzaW9uKG1MZWFkZXJEYXRhLkdldFN0YWJsZURhdGFWZXJzaW9uKCkpOworICAgIH0KKworICAgIFVwZGF0ZUNoaWxkQWRkcmVzc2VzKGFkZHJlc3MsICpjaGlsZCk7CisKKyAgICBjaGlsZC0+Q2xlYXJSZXF1ZXN0VGx2cygpOworCisgICAgZm9yIChudW1UbHZzID0gMDsgbnVtVGx2cyA8IHRsdlJlcXVlc3QuR2V0TGVuZ3RoKCk7IG51bVRsdnMrKykKKyAgICB7CisgICAgICAgIGNoaWxkLT5TZXRSZXF1ZXN0VGx2KG51bVRsdnMsIHRsdlJlcXVlc3QuR2V0VGx2cygpW251bVRsdnNdKTsKKyAgICB9CisKKyAgICBpZiAoYWN0aXZlVGltZXN0YW1wLkdldExlbmd0aCgpID09IDAgfHwKKyAgICAgICAgbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkNvbXBhcmUoYWN0aXZlVGltZXN0YW1wKSAhPSAwKQorICAgIHsKKyAgICAgICAgY2hpbGQtPlNldFJlcXVlc3RUbHYobnVtVGx2cysrLCBUbHY6OmtBY3RpdmVEYXRhc2V0KTsKKyAgICB9CisKKyAgICBpZiAocGVuZGluZ1RpbWVzdGFtcC5HZXRMZW5ndGgoKSA9PSAwIHx8CisgICAgICAgIG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuQ29tcGFyZShwZW5kaW5nVGltZXN0YW1wKSAhPSAwKQorICAgIHsKKyAgICAgICAgY2hpbGQtPlNldFJlcXVlc3RUbHYobnVtVGx2cysrLCBUbHY6OmtQZW5kaW5nRGF0YXNldCk7CisgICAgfQorCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIGNoaWxkLT5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlQ2hpbGRJZFJlcXVlc3QpOworICAgICAgICBCZWNvbWVSb3V0ZXIoVGhyZWFkU3RhdHVzVGx2OjprSGF2ZUNoaWxkSWRSZXF1ZXN0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRDaGlsZElkUmVzcG9uc2UoY2hpbGQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkhhbmRsZUNoaWxkVXBkYXRlUmVxdWVzdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2UpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qga01heFJlc3BvbnNlVGx2cyA9IDEwOworCisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWFjOjpFeHRBZGRyZXNzIG1hY0FkZHI7CisgICAgTW9kZVRsdiBtb2RlOworICAgIENoYWxsZW5nZVRsdiBjaGFsbGVuZ2U7CisgICAgQWRkcmVzc1JlZ2lzdHJhdGlvblRsdiBhZGRyZXNzOworICAgIExlYWRlckRhdGFUbHYgbGVhZGVyRGF0YTsKKyAgICBUaW1lb3V0VGx2IHRpbWVvdXQ7CisgICAgQ2hpbGQgKmNoaWxkOworICAgIFRsdlJlcXVlc3RUbHYgdGx2UmVxdWVzdDsKKyAgICB1aW50OF90IHRsdnNba01heFJlc3BvbnNlVGx2c107CisgICAgdWludDhfdCB0bHZzbGVuZ3RoID0gMDsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgZnJvbSBjaGlsZCIpOworCisgICAgLy8gTW9kZQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTW9kZSwgc2l6ZW9mKG1vZGUpLCBtb2RlKSk7CisgICAgVmVyaWZ5T3JFeGl0KG1vZGUuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIEZpbmQgQ2hpbGQKKyAgICBtYWNBZGRyLlNldChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgY2hpbGQgPSBGaW5kQ2hpbGQobWFjQWRkcik7CisKKyAgICB0bHZzW3RsdnNsZW5ndGgrK10gPSBUbHY6OmtTb3VyY2VBZGRyZXNzOworCisgICAgLy8gTm90IHByb2NlZWQgaWYgdGhlIENoaWxkIFVwZGF0ZSBSZXF1ZXN0IGlzIGZyb20gdGhlIHBlZXIgd2hpY2ggaXMgbm90IHRoZSBkZXZpY2UncyBjaGlsZCBvcgorICAgIC8vIHdoaWNoIHdhcyB0aGUgZGV2aWNlJ3MgY2hpbGQgYnV0IGJlY29tZXMgaW52YWxpZC4KKyAgICBpZiAoY2hpbGQgPT0gTlVMTCB8fCBjaGlsZC0+R2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCkKKyAgICB7CisgICAgICAgIC8vIEZvciBpbnZhbGlkIG5vbi1zbGVlcHkgY2hpbGQsIFNlbmQgQ2hpbGQgVXBkYXRlIFJlc3BvbnNlIHdpdGggc3RhdHVzIFRMViAoZXJyb3IpCisgICAgICAgIGlmIChtb2RlLkdldE1vZGUoKSAmIE1vZGVUbHY6OmtNb2RlUnhPbldoZW5JZGxlKQorICAgICAgICB7CisgICAgICAgICAgICB0bHZzW3RsdnNsZW5ndGgrK10gPSBUbHY6OmtTdGF0dXM7CisgICAgICAgICAgICBTZW5kQ2hpbGRVcGRhdGVSZXNwb25zZShOVUxMLCBhTWVzc2FnZUluZm8sIHRsdnMsIHRsdnNsZW5ndGgsIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIGNoaWxkLT5TZXREZXZpY2VNb2RlKG1vZGUuR2V0TW9kZSgpKTsKKyAgICB0bHZzW3RsdnNsZW5ndGgrK10gPSBUbHY6OmtNb2RlOworCisgICAgLy8gUGFyZW50IE1VU1QgaW5jbHVkZSBMZWFkZXIgRGF0YSBUTFYgaW4gQ2hpbGQgVXBkYXRlIFJlc3BvbnNlCisgICAgdGx2c1t0bHZzbGVuZ3RoKytdID0gVGx2OjprTGVhZGVyRGF0YTsKKworICAgIC8vIENoYWxsZW5nZQorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQ2hhbGxlbmdlLCBzaXplb2YoY2hhbGxlbmdlKSwgY2hhbGxlbmdlKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGNoYWxsZW5nZS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB0bHZzW3RsdnNsZW5ndGgrK10gPSBUbHY6OmtSZXNwb25zZTsKKyAgICAgICAgdGx2c1t0bHZzbGVuZ3RoKytdID0gVGx2OjprTWxlRnJhbWVDb3VudGVyOworICAgICAgICB0bHZzW3RsdnNsZW5ndGgrK10gPSBUbHY6OmtMaW5rRnJhbWVDb3VudGVyOworICAgIH0KKworICAgIC8vIElwNiBBZGRyZXNzIFRMVgorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQWRkcmVzc1JlZ2lzdHJhdGlvbiwgc2l6ZW9mKGFkZHJlc3MpLCBhZGRyZXNzKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFkZHJlc3MuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgVXBkYXRlQ2hpbGRBZGRyZXNzZXMoYWRkcmVzcywgKmNoaWxkKTsKKyAgICAgICAgdGx2c1t0bHZzbGVuZ3RoKytdID0gVGx2OjprQWRkcmVzc1JlZ2lzdHJhdGlvbjsKKyAgICB9CisKKyAgICAvLyBMZWFkZXIgRGF0YQorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGVhZGVyRGF0YSwgc2l6ZW9mKGxlYWRlckRhdGEpLCBsZWFkZXJEYXRhKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKKyAgICAvLyBUaW1lb3V0CisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtUaW1lb3V0LCBzaXplb2YodGltZW91dCksIHRpbWVvdXQpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQodGltZW91dC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBjaGlsZC0+U2V0VGltZW91dCh0aW1lb3V0LkdldFRpbWVvdXQoKSk7CisgICAgICAgIHRsdnNbdGx2c2xlbmd0aCsrXSA9IFRsdjo6a1RpbWVvdXQ7CisgICAgfQorCisgICAgLy8gVExWIFJlcXVlc3QKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1RsdlJlcXVlc3QsIHNpemVvZih0bHZSZXF1ZXN0KSwgdGx2UmVxdWVzdCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgdGx2OworICAgICAgICBUbHZSZXF1ZXN0SXRlcmF0b3IgaXRlcmF0b3IgPSAgVExWUkVRVUVTVFRMVl9JVEVSQVRPUl9JTklUOworCisgICAgICAgIFZlcmlmeU9yRXhpdCh0bHZSZXF1ZXN0LklzVmFsaWQoKSAmJiB0bHZSZXF1ZXN0LkdldExlbmd0aCgpIDw9IChDaGlsZDo6a01heFJlcXVlc3RUbHZzIC0gdGx2c2xlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICB3aGlsZSAodGx2UmVxdWVzdC5HZXROZXh0VGx2KGl0ZXJhdG9yLCB0bHYpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEhlcmUgc2tpcHMgVGx2OjprTGVhZGVyRGF0YSBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gaW5jbHVkZWQgYnkgZGVmYXVsdAorICAgICAgICAgICAgaWYgKHRsdiAhPSBUbHY6OmtMZWFkZXJEYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRsdnNbdGx2c2xlbmd0aCsrXSA9IHRsdjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNoaWxkLT5TZXRMYXN0SGVhcmQoVGltZXI6OkdldE5vdygpKTsKKworICAgIGlmIChjaGlsZC0+SXNTdGF0ZVJlc3RvcmluZygpKQorICAgIHsKKyAgICAgICAgU2V0Q2hpbGRTdGF0ZVRvVmFsaWQoY2hpbGQpOworICAgICAgICBjaGlsZC0+U2V0S2V5U2VxdWVuY2UoYUtleVNlcXVlbmNlKTsKKyAgICB9CisKKyAgICBTZW5kQ2hpbGRVcGRhdGVSZXNwb25zZShjaGlsZCwgYU1lc3NhZ2VJbmZvLCB0bHZzLCB0bHZzbGVuZ3RoLCAmY2hhbGxlbmdlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpIYW5kbGVDaGlsZFVwZGF0ZVJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKnRocmVhZE1lc3NhZ2VJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvLkdldExpbmtJbmZvKCkpOworICAgIE1hYzo6RXh0QWRkcmVzcyBtYWNBZGRyOworICAgIFNvdXJjZUFkZHJlc3NUbHYgc291cmNlQWRkcmVzczsKKyAgICBUaW1lb3V0VGx2IHRpbWVvdXQ7CisgICAgQWRkcmVzc1JlZ2lzdHJhdGlvblRsdiBhZGRyZXNzOworICAgIFJlc3BvbnNlVGx2IHJlc3BvbnNlOworICAgIExpbmtGcmFtZUNvdW50ZXJUbHYgbGlua0ZyYW1lQ291bnRlcjsKKyAgICBNbGVGcmFtZUNvdW50ZXJUbHYgbWxlRnJhbWVDb3VudGVyOworICAgIExlYWRlckRhdGFUbHYgbGVhZGVyRGF0YTsKKyAgICBDaGlsZCAqY2hpbGQ7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIENoaWxkIFVwZGF0ZSBSZXNwb25zZSBmcm9tIGNoaWxkIik7CisKKyAgICAvLyBGaW5kIENoaWxkCisgICAgbWFjQWRkci5TZXQoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworCisgICAgVmVyaWZ5T3JFeGl0KChjaGlsZCA9IEZpbmRDaGlsZChtYWNBZGRyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgLy8gU291cmNlIEFkZHJlc3MKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1NvdXJjZUFkZHJlc3MsIHNpemVvZihzb3VyY2VBZGRyZXNzKSwgc291cmNlQWRkcmVzcykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChzb3VyY2VBZGRyZXNzLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChjaGlsZC0+R2V0UmxvYzE2KCkgPT0gc291cmNlQWRkcmVzcy5HZXRSbG9jMTYoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgLy8gUmVzcG9uc2UKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1Jlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLCByZXNwb25zZSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChyZXNwb25zZS5Jc1ZhbGlkKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIG1lbWNtcChyZXNwb25zZS5HZXRSZXNwb25zZSgpLCBjaGlsZC0+R2V0Q2hhbGxlbmdlKCksIGNoaWxkLT5HZXRDaGFsbGVuZ2VTaXplKCkpID09IDAsCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1NFQ1VSSVRZKTsKKyAgICB9CisKKyAgICAvLyBMaW5rLUxheWVyIEZyYW1lIENvdW50ZXIKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xpbmtGcmFtZUNvdW50ZXIsIHNpemVvZihsaW5rRnJhbWVDb3VudGVyKSwgbGlua0ZyYW1lQ291bnRlcikgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChsaW5rRnJhbWVDb3VudGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIGNoaWxkLT5TZXRMaW5rRnJhbWVDb3VudGVyKGxpbmtGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworICAgIH0KKworICAgIC8vIE1MRSBGcmFtZSBDb3VudGVyCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtNbGVGcmFtZUNvdW50ZXIsIHNpemVvZihtbGVGcmFtZUNvdW50ZXIpLCBtbGVGcmFtZUNvdW50ZXIpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQobWxlRnJhbWVDb3VudGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIGNoaWxkLT5TZXRNbGVGcmFtZUNvdW50ZXIobWxlRnJhbWVDb3VudGVyLkdldEZyYW1lQ291bnRlcigpKTsKKyAgICB9CisKKyAgICAvLyBUaW1lb3V0CisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtUaW1lb3V0LCBzaXplb2YodGltZW91dCksIHRpbWVvdXQpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQodGltZW91dC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBjaGlsZC0+U2V0VGltZW91dCh0aW1lb3V0LkdldFRpbWVvdXQoKSk7CisgICAgfQorCisgICAgLy8gSXA2IEFkZHJlc3MKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0FkZHJlc3NSZWdpc3RyYXRpb24sIHNpemVvZihhZGRyZXNzKSwgYWRkcmVzcykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhZGRyZXNzLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFVwZGF0ZUNoaWxkQWRkcmVzc2VzKGFkZHJlc3MsICpjaGlsZCk7CisgICAgfQorCisgICAgLy8gTGVhZGVyIERhdGEKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xlYWRlckRhdGEsIHNpemVvZihsZWFkZXJEYXRhKSwgbGVhZGVyRGF0YSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChsZWFkZXJEYXRhLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgaWYgKGNoaWxkLT5Jc0Z1bGxOZXR3b3JrRGF0YSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjaGlsZC0+U2V0TmV0d29ya0RhdGFWZXJzaW9uKGxlYWRlckRhdGEuR2V0RGF0YVZlcnNpb24oKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjaGlsZC0+U2V0TmV0d29ya0RhdGFWZXJzaW9uKGxlYWRlckRhdGEuR2V0U3RhYmxlRGF0YVZlcnNpb24oKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTZXRDaGlsZFN0YXRlVG9WYWxpZChjaGlsZCk7CisgICAgY2hpbGQtPlNldExhc3RIZWFyZChUaW1lcjo6R2V0Tm93KCkpOworICAgIGNoaWxkLT5TZXRLZXlTZXF1ZW5jZShhS2V5U2VxdWVuY2UpOworICAgIGNoaWxkLT5HZXRMaW5rSW5mbygpLkFkZFJzcyhHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSwgdGhyZWFkTWVzc2FnZUluZm8tPm1Sc3MpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkhhbmRsZURhdGFSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBUbHZSZXF1ZXN0VGx2IHRsdlJlcXVlc3Q7CisgICAgQWN0aXZlVGltZXN0YW1wVGx2IGFjdGl2ZVRpbWVzdGFtcDsKKyAgICBQZW5kaW5nVGltZXN0YW1wVGx2IHBlbmRpbmdUaW1lc3RhbXA7CisgICAgdWludDhfdCB0bHZzWzRdOworICAgIHVpbnQ4X3QgbnVtVGx2czsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgRGF0YSBSZXF1ZXN0Iik7CisKKyAgICAvLyBUTFYgUmVxdWVzdAorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprVGx2UmVxdWVzdCwgc2l6ZW9mKHRsdlJlcXVlc3QpLCB0bHZSZXF1ZXN0KSk7CisgICAgVmVyaWZ5T3JFeGl0KHRsdlJlcXVlc3QuSXNWYWxpZCgpICYmIHRsdlJlcXVlc3QuR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKHRsdnMpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIEFjdGl2ZSBUaW1lc3RhbXAKKyAgICBhY3RpdmVUaW1lc3RhbXAuU2V0TGVuZ3RoKDApOworCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtBY3RpdmVUaW1lc3RhbXAsIHNpemVvZihhY3RpdmVUaW1lc3RhbXApLCBhY3RpdmVUaW1lc3RhbXApID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoYWN0aXZlVGltZXN0YW1wLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgLy8gUGVuZGluZyBUaW1lc3RhbXAKKyAgICBwZW5kaW5nVGltZXN0YW1wLlNldExlbmd0aCgwKTsKKworICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprUGVuZGluZ1RpbWVzdGFtcCwgc2l6ZW9mKHBlbmRpbmdUaW1lc3RhbXApLCBwZW5kaW5nVGltZXN0YW1wKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHBlbmRpbmdUaW1lc3RhbXAuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKKyAgICBtZW1zZXQodGx2cywgVGx2OjprSW52YWxpZCwgc2l6ZW9mKHRsdnMpKTsKKyAgICBtZW1jcHkodGx2cywgdGx2UmVxdWVzdC5HZXRUbHZzKCksIHRsdlJlcXVlc3QuR2V0TGVuZ3RoKCkpOworICAgIG51bVRsdnMgPSB0bHZSZXF1ZXN0LkdldExlbmd0aCgpOworCisgICAgaWYgKGFjdGl2ZVRpbWVzdGFtcC5HZXRMZW5ndGgoKSA9PSAwIHx8CisgICAgICAgIG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5Db21wYXJlKGFjdGl2ZVRpbWVzdGFtcCkpCisgICAgeworICAgICAgICB0bHZzW251bVRsdnMrK10gPSBUbHY6OmtBY3RpdmVEYXRhc2V0OworICAgIH0KKworICAgIGlmIChwZW5kaW5nVGltZXN0YW1wLkdldExlbmd0aCgpID09IDAgfHwKKyAgICAgICAgbmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5Db21wYXJlKHBlbmRpbmdUaW1lc3RhbXApKQorICAgIHsKKyAgICAgICAgdGx2c1tudW1UbHZzKytdID0gVGx2OjprUGVuZGluZ0RhdGFzZXQ7CisgICAgfQorCisgICAgU2VuZERhdGFSZXNwb25zZShhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSwgdGx2cywgbnVtVGx2cywgMCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6SGFuZGxlTmV0d29ya0RhdGFVcGRhdGVSb3V0ZXIodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCB0bHZzW10gPSB7VGx2OjprTmV0d29ya0RhdGF9OworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgSXA2OjpBZGRyZXNzIGRlc3RpbmF0aW9uOworICAgIHVpbnQxNl90IGRlbGF5OworCisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX1JPVVRFUiB8fCBtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIpOworCisgICAgbWVtc2V0KCZkZXN0aW5hdGlvbiwgMCwgc2l6ZW9mKGRlc3RpbmF0aW9uKSk7CisgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmYwMik7CisgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KDB4MDAwMSk7CisKKyAgICBkZWxheSA9IChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIpID8gMCA6IChvdFBsYXRSYW5kb21HZXQoKSAlIGtVbnNvbGljaXRlZERhdGFSZXNwb25zZUppdHRlcik7CisgICAgU2VuZERhdGFSZXNwb25zZShkZXN0aW5hdGlvbiwgdGx2cywgc2l6ZW9mKHRsdnMpLCBkZWxheSk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgeworICAgICAgICBDaGlsZCAqY2hpbGQgPSAmbUNoaWxkcmVuW2ldOworCisgICAgICAgIGlmIChjaGlsZC0+R2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQgfHwgY2hpbGQtPklzUnhPbldoZW5JZGxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCZkZXN0aW5hdGlvbiwgMCwgc2l6ZW9mKGRlc3RpbmF0aW9uKSk7CisgICAgICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgICAgICBkZXN0aW5hdGlvbi5TZXRJaWQoY2hpbGQtPkdldEV4dEFkZHJlc3MoKSk7CisKKyAgICAgICAgaWYgKGNoaWxkLT5Jc0Z1bGxOZXR3b3JrRGF0YSgpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPkdldE5ldHdvcmtEYXRhVmVyc2lvbigpICE9IG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0VmVyc2lvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNlbmREYXRhUmVzcG9uc2UoZGVzdGluYXRpb24sIHRsdnMsIHNpemVvZih0bHZzKSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPkdldE5ldHdvcmtEYXRhVmVyc2lvbigpICE9IG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0U3RhYmxlVmVyc2lvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNlbmREYXRhUmVzcG9uc2UoZGVzdGluYXRpb24sIHRsdnMsIHNpemVvZih0bHZzKSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCitvdEVycm9yIE1sZVJvdXRlcjo6U2V0U3RlZXJpbmdEYXRhKG90RXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBudWxsRXh0QWRkcltPVF9FWFRfQUREUkVTU19TSVpFXTsKKyAgICB1aW50OF90IGFsbG93QW55RXh0QWRkcltPVF9FWFRfQUREUkVTU19TSVpFXTsKKworICAgIG1lbXNldChudWxsRXh0QWRkciwgMCwgc2l6ZW9mKG51bGxFeHRBZGRyKSk7CisgICAgbWVtc2V0KGFsbG93QW55RXh0QWRkciwgMHhGRiwgc2l6ZW9mKGFsbG93QW55RXh0QWRkcikpOworCisgICAgbVN0ZWVyaW5nRGF0YS5Jbml0KCk7CisKKyAgICBpZiAoKGFFeHRBZGRyZXNzID09IE5VTEwpIHx8IChtZW1jbXAoYUV4dEFkZHJlc3MsICZudWxsRXh0QWRkciwgc2l6ZW9mKG51bGxFeHRBZGRyKSkgPT0gMCkpCisgICAgeworICAgICAgICAvLyBDbGVhciBzdGVlcmluZyBkYXRhCisgICAgICAgIG1TdGVlcmluZ0RhdGEuQ2xlYXIoKTsKKyAgICB9CisgICAgZWxzZSBpZiAobWVtY21wKGFFeHRBZGRyZXNzLCAmYWxsb3dBbnlFeHRBZGRyLCBzaXplb2YoYWxsb3dBbnlFeHRBZGRyKSkgPT0gMCkKKyAgICB7CisgICAgICAgIC8vIFNldCBzdGVlcmluZyBkYXRhIHRvIDB4RkYKKyAgICAgICAgbVN0ZWVyaW5nRGF0YS5TZXRMZW5ndGgoMSk7CisgICAgICAgIG1TdGVlcmluZ0RhdGEuU2V0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFNldCBibG9vbSBmaWx0ZXIgd2l0aCB0aGUgZXh0ZW5kZWQgYWRkcmVzcyBwYXNzZWQgaW4KKyAgICAgICAgbVN0ZWVyaW5nRGF0YS5Db21wdXRlQmxvb21GaWx0ZXIoYUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCisKK290RXJyb3IgTWxlUm91dGVyOjpIYW5kbGVEaXNjb3ZlcnlSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBUbHYgdGx2OworICAgIE1lc2hDb1A6OlRsdiBtZXNoY29wVGx2OworICAgIE1lc2hDb1A6OkRpc2NvdmVyeVJlcXVlc3RUbHYgZGlzY292ZXJ5UmVxdWVzdDsKKyAgICBNZXNoQ29QOjpFeHRlbmRlZFBhbklkVGx2IGV4dFBhbklkOworICAgIHVpbnQxNl90IG9mZnNldDsKKyAgICB1aW50MTZfdCBlbmQ7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGRpc2NvdmVyeSByZXF1ZXN0Iik7CisKKyAgICAvLyBvbmx5IFJvdXRlcnMgYW5kIFJFRURzIHJlc3BvbmQKKyAgICBWZXJpZnlPckV4aXQoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpICE9IDAsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICAvLyBmaW5kIE1MRSBEaXNjb3ZlcnkgVExWCisgICAgVmVyaWZ5T3JFeGl0KFRsdjo6R2V0T2Zmc2V0KGFNZXNzYWdlLCBUbHY6OmtEaXNjb3ZlcnksIG9mZnNldCkgPT0gT1RfRVJST1JfTk9ORSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZih0bHYpLCAmdGx2KTsKKworICAgIG9mZnNldCArPSBzaXplb2YodGx2KTsKKyAgICBlbmQgPSBvZmZzZXQgKyBzaXplb2YodGx2KSArIHRsdi5HZXRMZW5ndGgoKTsKKworICAgIHdoaWxlIChvZmZzZXQgPCBlbmQpCisgICAgeworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKG1lc2hjb3BUbHYpLCAmbWVzaGNvcFRsdik7CisKKyAgICAgICAgc3dpdGNoIChtZXNoY29wVGx2LkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE1lc2hDb1A6OlRsdjo6a0Rpc2NvdmVyeVJlcXVlc3Q6CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKGRpc2NvdmVyeVJlcXVlc3QpLCAmZGlzY292ZXJ5UmVxdWVzdCk7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoZGlzY292ZXJ5UmVxdWVzdC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgICAgICBpZiAoZGlzY292ZXJ5UmVxdWVzdC5Jc0pvaW5lcigpKQorICAgICAgICAgICAgeworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TVEVFUklOR19EQVRBX1NFVF9PT0IKKworICAgICAgICAgICAgICAgIGlmICghbVN0ZWVyaW5nRGF0YS5Jc0NsZWFyZWQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIC8vIGlmIHN0ZWVyaW5nIGRhdGEgaXMgbm90IHNldCBvdXQgb2YgYmFuZCwgZmFsbCBiYWNrIHRvIG5ldHdvcmsgZGF0YQorI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TVEVFUklOR19EQVRBX1NFVF9PT0IKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLklzSm9pbmluZ0VuYWJsZWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfQ0FQQUJMRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1lc2hDb1A6OlRsdjo6a0V4dGVuZGVkUGFuSWQ6CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKGV4dFBhbklkKSwgJmV4dFBhbklkKTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChleHRQYW5JZC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KG1lbWNtcChuZXRpZi5HZXRNYWMoKS5HZXRFeHRlbmRlZFBhbklkKCksIGV4dFBhbklkLkdldEV4dGVuZGVkUGFuSWQoKSwgT1RfRVhUX1BBTl9JRF9TSVpFKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihtZXNoY29wVGx2KSArIG1lc2hjb3BUbHYuR2V0TGVuZ3RoKCk7CisgICAgfQorCisgICAgZXJyb3IgPSBTZW5kRGlzY292ZXJ5UmVzcG9uc2UoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCksIGFNZXNzYWdlLkdldFBhbklkKCkpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBvdExvZ1dhcm5NbGVFcnIoR2V0SW5zdGFuY2UoKSwgZXJyb3IsICJGYWlsZWQgdG8gcHJvY2VzcyBEaXNjb3ZlcnkgUmVxdWVzdCIpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNlbmREaXNjb3ZlcnlSZXNwb25zZShjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwgdWludDE2X3QgYVBhbklkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICB1aW50MTZfdCBzdGFydE9mZnNldDsKKyAgICBUbHYgdGx2OworICAgIE1lc2hDb1A6OkRpc2NvdmVyeVJlc3BvbnNlVGx2IGRpc2NvdmVyeVJlc3BvbnNlOworICAgIE1lc2hDb1A6OkV4dGVuZGVkUGFuSWRUbHYgZXh0UGFuSWQ7CisgICAgTWVzaENvUDo6TmV0d29ya05hbWVUbHYgbmV0d29ya05hbWU7CisgICAgTWVzaENvUDo6Sm9pbmVyVWRwUG9ydFRsdiBqb2luZXJVZHBQb3J0OworICAgIE1lc2hDb1A6OlRsdiAqc3RlZXJpbmdEYXRhOworICAgIHVpbnQxNl90IGRlbGF5OworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIG1lc3NhZ2UtPlNldFN1YlR5cGUoTWVzc2FnZTo6a1N1YlR5cGVNbGVEaXNjb3ZlclJlc3BvbnNlKTsKKyAgICBtZXNzYWdlLT5TZXRQYW5JZChhUGFuSWQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmREaXNjb3ZlcnlSZXNwb25zZSkpOworCisgICAgLy8gRGlzY292ZXJ5IFRMVgorICAgIHRsdi5TZXRUeXBlKFRsdjo6a0Rpc2NvdmVyeSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSkpOworCisgICAgc3RhcnRPZmZzZXQgPSBtZXNzYWdlLT5HZXRMZW5ndGgoKTsKKworICAgIC8vIERpc2NvdmVyeSBSZXNwb25zZSBUTFYKKyAgICBkaXNjb3ZlcnlSZXNwb25zZS5Jbml0KCk7CisgICAgZGlzY292ZXJ5UmVzcG9uc2UuU2V0VmVyc2lvbihrVmVyc2lvbik7CisKKyAgICBpZiAobmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldFNlY3VyaXR5UG9saWN5RmxhZ3MoKSAmIE9UX1NFQ1VSSVRZX1BPTElDWV9OQVRJVkVfQ09NTUlTU0lPTklORykKKyAgICB7CisgICAgICAgIGRpc2NvdmVyeVJlc3BvbnNlLlNldE5hdGl2ZUNvbW1pc3Npb25lcih0cnVlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZGlzY292ZXJ5UmVzcG9uc2UuU2V0TmF0aXZlQ29tbWlzc2lvbmVyKGZhbHNlKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZkaXNjb3ZlcnlSZXNwb25zZSwgc2l6ZW9mKGRpc2NvdmVyeVJlc3BvbnNlKSkpOworCisgICAgLy8gRXh0ZW5kZWQgUEFOIElEIFRMVgorICAgIGV4dFBhbklkLkluaXQoKTsKKyAgICBleHRQYW5JZC5TZXRFeHRlbmRlZFBhbklkKG5ldGlmLkdldE1hYygpLkdldEV4dGVuZGVkUGFuSWQoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmZXh0UGFuSWQsIHNpemVvZihleHRQYW5JZCkpKTsKKworICAgIC8vIE5ldHdvcmsgTmFtZSBUTFYKKyAgICBuZXR3b3JrTmFtZS5Jbml0KCk7CisgICAgbmV0d29ya05hbWUuU2V0TmV0d29ya05hbWUobmV0aWYuR2V0TWFjKCkuR2V0TmV0d29ya05hbWUoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbmV0d29ya05hbWUsIHNpemVvZih0bHYpICsgbmV0d29ya05hbWUuR2V0TGVuZ3RoKCkpKTsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TVEVFUklOR19EQVRBX1NFVF9PT0IKKworICAgIC8vIElmIHN0ZWVyaW5nIGRhdGEgaXMgc2V0IG91dCBvZiBiYW5kLCB1c2UgdGhhdCB2YWx1ZS4KKyAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBvbmUgZnJvbSBjb21taXNzaW9uaW5nIGRhdGEuCisgICAgaWYgKCFtU3RlZXJpbmdEYXRhLklzQ2xlYXJlZCgpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbVN0ZWVyaW5nRGF0YSwgc2l6ZW9mKG1TdGVlcmluZ0RhdGEpICsgbVN0ZWVyaW5nRGF0YS5HZXRMZW5ndGgoKSkpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorICAgIHsKKyAgICAgICAgLy8gU3RlZXJpbmcgRGF0YSBUTFYKKyAgICAgICAgc3RlZXJpbmdEYXRhID0gbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRDb21taXNzaW9uaW5nRGF0YVN1YlRsdihNZXNoQ29QOjpUbHY6OmtTdGVlcmluZ0RhdGEpOworCisgICAgICAgIGlmIChzdGVlcmluZ0RhdGEgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZChzdGVlcmluZ0RhdGEsIHNpemVvZigqc3RlZXJpbmdEYXRhKSArIHN0ZWVyaW5nRGF0YS0+R2V0TGVuZ3RoKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEpvaW5lciBVRFAgUG9ydCBUTFYKKyAgICBqb2luZXJVZHBQb3J0LkluaXQoKTsKKyAgICBqb2luZXJVZHBQb3J0LlNldFVkcFBvcnQobmV0aWYuR2V0Sm9pbmVyUm91dGVyKCkuR2V0Sm9pbmVyVWRwUG9ydCgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZqb2luZXJVZHBQb3J0LCBzaXplb2YodGx2KSArIGpvaW5lclVkcFBvcnQuR2V0TGVuZ3RoKCkpKTsKKworICAgIHRsdi5TZXRMZW5ndGgoc3RhdGljX2Nhc3Q8dWludDhfdD4obWVzc2FnZS0+R2V0TGVuZ3RoKCkgLSBzdGFydE9mZnNldCkpOworICAgIG1lc3NhZ2UtPldyaXRlKHN0YXJ0T2Zmc2V0IC0gc2l6ZW9mKHRsdiksIHNpemVvZih0bHYpLCAmdGx2KTsKKworICAgIGRlbGF5ID0gb3RQbGF0UmFuZG9tR2V0KCkgJSAoa0Rpc2NvdmVyeU1heEppdHRlciArIDEpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFkZERlbGF5ZWRSZXNwb25zZSgqbWVzc2FnZSwgYURlc3RpbmF0aW9uLCBkZWxheSkpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IGRpc2NvdmVyeSByZXNwb25zZSIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNlbmRDaGlsZElkUmVzcG9uc2UoQ2hpbGQgKmFDaGlsZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElwNjo6QWRkcmVzcyBkZXN0aW5hdGlvbjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmRDaGlsZElkUmVzcG9uc2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kU291cmNlQWRkcmVzcygqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRMZWFkZXJEYXRhKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEFjdGl2ZVRpbWVzdGFtcCgqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRQZW5kaW5nVGltZXN0YW1wKCptZXNzYWdlKSk7CisKKyAgICBpZiAoYUNoaWxkLT5HZXRTdGF0ZSgpICE9IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICB7CisgICAgICAgIC8vIHBpY2sgbmV4dCBDaGlsZCBJRCB0aGF0IGlzIG5vdCBiZWluZyB1c2VkCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIG1OZXh0Q2hpbGRJZCsrOworCisgICAgICAgICAgICBpZiAobU5leHRDaGlsZElkID4ga01heENoaWxkSWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU5leHRDaGlsZElkID0ga01pbkNoaWxkSWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKEZpbmRDaGlsZChtTmV4dENoaWxkSWQpICE9IE5VTEwpOworCisgICAgICAgIC8vIGFsbG9jYXRlIENoaWxkIElECisgICAgICAgIGFDaGlsZC0+U2V0UmxvYzE2KG5ldGlmLkdldE1hYygpLkdldFNob3J0QWRkcmVzcygpIHwgbU5leHRDaGlsZElkKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQWRkcmVzczE2KCptZXNzYWdlLCBhQ2hpbGQtPkdldFJsb2MxNigpKSk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBDaGlsZDo6a01heFJlcXVlc3RUbHZzOyBpKyspCisgICAgeworICAgICAgICBzd2l0Y2ggKGFDaGlsZC0+R2V0UmVxdWVzdFRsdihpKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIFRsdjo6a05ldHdvcmtEYXRhOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE5ldHdvcmtEYXRhKCptZXNzYWdlLCAhYUNoaWxkLT5Jc0Z1bGxOZXR3b3JrRGF0YSgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a1JvdXRlOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFJvdXRlKCptZXNzYWdlKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a0FjdGl2ZURhdGFzZXQ6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQWN0aXZlRGF0YXNldCgqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtQZW5kaW5nRGF0YXNldDoKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRQZW5kaW5nRGF0YXNldCgqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFhQ2hpbGQtPklzRnVsbFRocmVhZERldmljZSgpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZENoaWxkQWRkcmVzc2VzKCptZXNzYWdlLCAqYUNoaWxkKSk7CisgICAgfQorCisgICAgU2V0Q2hpbGRTdGF0ZVRvVmFsaWQoYUNoaWxkKTsKKworICAgIGlmICghYUNoaWxkLT5Jc1J4T25XaGVuSWRsZSgpKQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldFNvdXJjZU1hdGNoQ29udHJvbGxlcigpLlNldFNyY01hdGNoQXNTaG9ydCgqYUNoaWxkLCBmYWxzZSk7CisgICAgfQorCisgICAgbWVtc2V0KCZkZXN0aW5hdGlvbiwgMCwgc2l6ZW9mKGRlc3RpbmF0aW9uKSk7CisgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmU4MCk7CisgICAgZGVzdGluYXRpb24uU2V0SWlkKGFDaGlsZC0+R2V0RXh0QWRkcmVzcygpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGRlc3RpbmF0aW9uKSk7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgQ2hpbGQgSUQgUmVzcG9uc2UiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KENoaWxkICphQ2hpbGQpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGx2c1tdID0ge1Rsdjo6a1RpbWVvdXQsIFRsdjo6a0FkZHJlc3NSZWdpc3RyYXRpb259OworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSXA2OjpBZGRyZXNzIGRlc3RpbmF0aW9uOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICBpZiAoIWFDaGlsZC0+SXNSeE9uV2hlbklkbGUoKSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgY2hpbGRJbmRleCA9IG5ldGlmLkdldE1sZSgpLkdldENoaWxkSW5kZXgoKmFDaGlsZCk7CisKKyAgICAgICAgLy8gTm8gbmVlZCB0byBzZW5kICJDaGlsZCBVcGRhdGUgUmVxdWVzdCIgdG8gdGhlIHNsZWVweSBjaGlsZCBpZiB0aGVyZSBpcyBvbmUgYWxyZWFkeSBxdWV1ZWQgZm9yIGl0LgorICAgICAgICBmb3IgKG1lc3NhZ2UgPSBuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuR2V0U2VuZFF1ZXVlKCkuR2V0SGVhZCgpOyBtZXNzYWdlOyBtZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobWVzc2FnZS0+R2V0Q2hpbGRNYXNrKGNoaWxkSW5kZXgpICYmIG1lc3NhZ2UtPkdldFN1YlR5cGUoKSA9PSBNZXNzYWdlOjprU3ViVHlwZU1sZUNoaWxkVXBkYXRlUmVxdWVzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNbGVNZXNzYWdlKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgbWVzc2FnZS0+U2V0U3ViVHlwZShNZXNzYWdlOjprU3ViVHlwZU1sZUNoaWxkVXBkYXRlUmVxdWVzdCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgSGVhZGVyOjprQ29tbWFuZENoaWxkVXBkYXRlUmVxdWVzdCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTb3VyY2VBZGRyZXNzKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExlYWRlckRhdGEoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTmV0d29ya0RhdGEoKm1lc3NhZ2UsICFhQ2hpbGQtPklzRnVsbE5ldHdvcmtEYXRhKCkpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQWN0aXZlVGltZXN0YW1wKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFBlbmRpbmdUaW1lc3RhbXAoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kVGx2UmVxdWVzdCgqbWVzc2FnZSwgdGx2cywgc2l6ZW9mKHRsdnMpKSk7CisKKyAgICBhQ2hpbGQtPkdlbmVyYXRlQ2hhbGxlbmdlKCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQ2hhbGxlbmdlKCptZXNzYWdlLCBhQ2hpbGQtPkdldENoYWxsZW5nZSgpLCBhQ2hpbGQtPkdldENoYWxsZW5nZVNpemUoKSkpOworCisgICAgbWVtc2V0KCZkZXN0aW5hdGlvbiwgMCwgc2l6ZW9mKGRlc3RpbmF0aW9uKSk7CisgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmU4MCk7CisgICAgZGVzdGluYXRpb24uU2V0SWlkKGFDaGlsZC0+R2V0RXh0QWRkcmVzcygpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGRlc3RpbmF0aW9uKSk7CisKKyAgICBpZiAoYUNoaWxkLT5Jc1J4T25XaGVuSWRsZSgpKQorICAgIHsKKyAgICAgICAgLy8gb25seSB0cnkgdG8gc2VuZCBhIHNpbmdsZSBDaGlsZCBVcGRhdGUgUmVxdWVzdCBtZXNzYWdlIHRvIGFuIHJ4LW9uLXdoZW4taWRsZSBjaGlsZAorICAgICAgICBhQ2hpbGQtPlNldFN0YXRlKENoaWxkOjprU3RhdGVDaGlsZFVwZGF0ZVJlcXVlc3QpOworICAgIH0KKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiU2VudCBDaGlsZCBVcGRhdGUgUmVxdWVzdCB0byBjaGlsZCIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNlbmRDaGlsZFVwZGF0ZVJlc3BvbnNlKENoaWxkICphQ2hpbGQsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDaGFsbGVuZ2VUbHYgKmFDaGFsbGVuZ2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01sZU1lc3NhZ2UoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kSGVhZGVyKCptZXNzYWdlLCBIZWFkZXI6OmtDb21tYW5kQ2hpbGRVcGRhdGVSZXNwb25zZSkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhVGx2c2xlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhVGx2c1tpXSkKKyAgICAgICAgeworICAgICAgICBjYXNlIFRsdjo6a1N0YXR1czoKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTdGF0dXMoKm1lc3NhZ2UsIFN0YXR1c1Rsdjo6a0Vycm9yKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a0FkZHJlc3NSZWdpc3RyYXRpb246CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQ2hpbGRBZGRyZXNzZXMoKm1lc3NhZ2UsICphQ2hpbGQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVGx2OjprTGVhZGVyRGF0YToKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRMZWFkZXJEYXRhKCptZXNzYWdlKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a01vZGU6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTW9kZSgqbWVzc2FnZSwgYUNoaWxkLT5HZXREZXZpY2VNb2RlKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVGx2OjprTmV0d29ya0RhdGE6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTmV0d29ya0RhdGEoKm1lc3NhZ2UsICFhQ2hpbGQtPklzRnVsbE5ldHdvcmtEYXRhKCkpKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRBY3RpdmVUaW1lc3RhbXAoKm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRQZW5kaW5nVGltZXN0YW1wKCptZXNzYWdlKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a1Jlc3BvbnNlOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFJlc3BvbnNlKCptZXNzYWdlLCBhQ2hhbGxlbmdlLT5HZXRDaGFsbGVuZ2UoKSwgYUNoYWxsZW5nZS0+R2V0TGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVGx2OjprU291cmNlQWRkcmVzczoKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTb3VyY2VBZGRyZXNzKCptZXNzYWdlKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a1RpbWVvdXQ6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kVGltZW91dCgqbWVzc2FnZSwgYUNoaWxkLT5HZXRUaW1lb3V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVGx2OjprTWxlRnJhbWVDb3VudGVyOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE1sZUZyYW1lQ291bnRlcigqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtMaW5rRnJhbWVDb3VudGVyOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExpbmtGcmFtZUNvdW50ZXIoKm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCBhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSkpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IENoaWxkIFVwZGF0ZSBSZXNwb25zZSB0byBjaGlsZCIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2VuZERhdGFSZXNwb25zZShjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhRGVsYXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBOZWlnaGJvciAqbmVpZ2hib3I7CisgICAgYm9vbCBzdGFibGVPbmx5OworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmREYXRhUmVzcG9uc2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kU291cmNlQWRkcmVzcygqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRMZWFkZXJEYXRhKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEFjdGl2ZVRpbWVzdGFtcCgqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRQZW5kaW5nVGltZXN0YW1wKCptZXNzYWdlKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFUbHZzTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBzd2l0Y2ggKGFUbHZzW2ldKQorICAgICAgICB7CisgICAgICAgIGNhc2UgVGx2OjprTmV0d29ya0RhdGE6CisgICAgICAgICAgICBuZWlnaGJvciA9IEdldE5laWdoYm9yKGFEZXN0aW5hdGlvbik7CisgICAgICAgICAgICBzdGFibGVPbmx5ID0gbmVpZ2hib3IgIT0gTlVMTCA/ICFuZWlnaGJvci0+SXNGdWxsTmV0d29ya0RhdGEoKSA6IGZhbHNlOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE5ldHdvcmtEYXRhKCptZXNzYWdlLCBzdGFibGVPbmx5KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a0FjdGl2ZURhdGFzZXQ6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQWN0aXZlRGF0YXNldCgqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtQZW5kaW5nRGF0YXNldDoKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRQZW5kaW5nRGF0YXNldCgqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYURlbGF5KQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFkZERlbGF5ZWRSZXNwb25zZSgqbWVzc2FnZSwgYURlc3RpbmF0aW9uLCBhRGVsYXkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCBhRGVzdGluYXRpb24pKTsKKyAgICB9CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgRGF0YSBSZXNwb25zZSIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworQ2hpbGQgKk1sZVJvdXRlcjo6R2V0Q2hpbGQodWludDE2X3QgYUFkZHJlc3MpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNoaWxkcmVuW2ldLklzU3RhdGVWYWxpZE9yUmVzdG9yaW5nKCkgJiYgbUNoaWxkcmVuW2ldLkdldFJsb2MxNigpID09IGFBZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJm1DaGlsZHJlbltpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitDaGlsZCAqTWxlUm91dGVyOjpHZXRDaGlsZChjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5Jc1N0YXRlVmFsaWRPclJlc3RvcmluZygpICYmCisgICAgICAgICAgICBtZW1jbXAoJm1DaGlsZHJlbltpXS5HZXRFeHRBZGRyZXNzKCksICZhQWRkcmVzcywgc2l6ZW9mKGFBZGRyZXNzKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZtQ2hpbGRyZW5baV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworQ2hpbGQgKk1sZVJvdXRlcjo6R2V0Q2hpbGQoY29uc3QgTWFjOjpBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBzd2l0Y2ggKGFBZGRyZXNzLm1MZW5ndGgpCisgICAgeworICAgIGNhc2Ugc2l6ZW9mKGFBZGRyZXNzLm1TaG9ydEFkZHJlc3MpOgorICAgICAgICByZXR1cm4gR2V0Q2hpbGQoYUFkZHJlc3MubVNob3J0QWRkcmVzcyk7CisKKyAgICBjYXNlIHNpemVvZihhQWRkcmVzcy5tRXh0QWRkcmVzcyk6CisgICAgICAgIHJldHVybiBHZXRDaGlsZChhQWRkcmVzcy5tRXh0QWRkcmVzcyk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3VpbnQ4X3QgTWxlUm91dGVyOjpHZXRDaGlsZEluZGV4KGNvbnN0IENoaWxkICZjaGlsZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oJmNoaWxkIC0gbUNoaWxkcmVuKTsKK30KKworQ2hpbGQgKk1sZVJvdXRlcjo6R2V0Q2hpbGRyZW4odWludDhfdCAqbnVtQ2hpbGRyZW4pCit7CisgICAgaWYgKG51bUNoaWxkcmVuICE9IE5VTEwpCisgICAgeworICAgICAgICAqbnVtQ2hpbGRyZW4gPSBtTWF4Q2hpbGRyZW5BbGxvd2VkOworICAgIH0KKworICAgIHJldHVybiBtQ2hpbGRyZW47Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpTZXRNYXhBbGxvd2VkQ2hpbGRyZW4odWludDhfdCBhTWF4Q2hpbGRyZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBFbnN1cmUgdGhlIHZhbHVlIGlzIGJldHdlZW4gMSBhbmQga01heENoaWxkcmVuCisgICAgVmVyaWZ5T3JFeGl0KGFNYXhDaGlsZHJlbiA+IDAgJiYgYU1heENoaWxkcmVuIDw9IGtNYXhDaGlsZHJlbiwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgLy8gRG8gbm90IGFsbG93IHNldHRpbmcgbWF4IGNoaWxkcmVuIGlmIE1MRSBpcyBydW5uaW5nCisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgLy8gU2F2ZSB0aGUgdmFsdWUKKyAgICBtTWF4Q2hpbGRyZW5BbGxvd2VkID0gYU1heENoaWxkcmVuOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlJlbW92ZU5laWdoYm9yKGNvbnN0IE1hYzo6QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yOworCisgICAgVmVyaWZ5T3JFeGl0KChuZWlnaGJvciA9IEdldE5laWdoYm9yKGFBZGRyZXNzKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBSZW1vdmVOZWlnaGJvcigqbmVpZ2hib3IpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpSZW1vdmVOZWlnaGJvcihOZWlnaGJvciAmYU5laWdoYm9yKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgaWYgKCZhTmVpZ2hib3IgPT0gJm1QYXJlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBpZiAoYU5laWdoYm9yLklzU3RhdGVWYWxpZE9yUmVzdG9yaW5nKCkgJiYgIUlzQWN0aXZlUm91dGVyKGFOZWlnaGJvci5HZXRSbG9jMTYoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFOZWlnaGJvci5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCk7CisgICAgICAgICAgICBuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuVXBkYXRlSW5kaXJlY3RNZXNzYWdlcygpOworICAgICAgICAgICAgbmV0aWYuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfQ0hJTERfUkVNT1ZFRCk7CisgICAgICAgICAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLlNlbmRTZXJ2ZXJEYXRhTm90aWZpY2F0aW9uKGFOZWlnaGJvci5HZXRSbG9jMTYoKSk7CisgICAgICAgICAgICBSZW1vdmVTdG9yZWRDaGlsZChhTmVpZ2hib3IuR2V0UmxvYzE2KCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChhTmVpZ2hib3IuR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpICYmIElzQWN0aXZlUm91dGVyKGFOZWlnaGJvci5HZXRSbG9jMTYoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJvdXRlciAmcm91dGVyVG9SZW1vdmUgPSBzdGF0aWNfY2FzdDxSb3V0ZXIgJj4oYU5laWdoYm9yKTsKKworICAgICAgICAgICAgcm91dGVyVG9SZW1vdmUuU2V0TGlua1F1YWxpdHlPdXQoMCk7CisgICAgICAgICAgICByb3V0ZXJUb1JlbW92ZS5TZXRMYXN0SGVhcmQoVGltZXI6OkdldE5vdygpKTsKKworICAgICAgICAgICAgZm9yICh1aW50OF90IGogPSAwOyBqIDw9IGtNYXhSb3V0ZXJJZDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtUm91dGVyc1tqXS5HZXROZXh0SG9wKCkgPT0gR2V0Um91dGVySWQocm91dGVyVG9SZW1vdmUuR2V0UmxvYzE2KCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbal0uU2V0TmV4dEhvcChrSW52YWxpZFJvdXRlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbal0uU2V0Q29zdCgwKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoR2V0TGlua0Nvc3QoaikgPj0ga01heFJvdXRlQ29zdCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRBZHZlcnRpc2VJbnRlcnZhbCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocm91dGVyVG9SZW1vdmUuR2V0TmV4dEhvcCgpID09IGtJbnZhbGlkUm91dGVySWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUmVzZXRBZHZlcnRpc2VJbnRlcnZhbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYU5laWdoYm9yLkdldExpbmtJbmZvKCkuQ2xlYXIoKTsKKyAgICBhTmVpZ2hib3IuU2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZUludmFsaWQpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK05laWdoYm9yICpNbGVSb3V0ZXI6OkdldE5laWdoYm9yKHVpbnQxNl90IGFBZGRyZXNzKQoreworICAgIE5laWdoYm9yICpydmFsID0gTlVMTDsKKworICAgIGlmIChhQWRkcmVzcyA9PSBNYWM6OmtTaG9ydEFkZHJCcm9hZGNhc3QgfHwgYUFkZHJlc3MgPT0gTWFjOjprU2hvcnRBZGRySW52YWxpZCkKKyAgICB7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgcnZhbCA9IE1sZTo6R2V0TmVpZ2hib3IoYUFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5Jc1N0YXRlVmFsaWRPclJlc3RvcmluZygpICYmIG1DaGlsZHJlbltpXS5HZXRSbG9jMTYoKSA9PSBhQWRkcmVzcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSAmbUNoaWxkcmVuW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSA9PSBtUm91dGVySWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtUm91dGVyc1tpXS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCAmJiBtUm91dGVyc1tpXS5HZXRSbG9jMTYoKSA9PSBhQWRkcmVzcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSAmbVJvdXRlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitOZWlnaGJvciAqTWxlUm91dGVyOjpHZXROZWlnaGJvcihjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIE5laWdoYm9yICpydmFsID0gTlVMTDsKKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBydmFsID0gTWxlOjpHZXROZWlnaGJvcihhQWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUNoaWxkcmVuW2ldLklzU3RhdGVWYWxpZE9yUmVzdG9yaW5nKCkgJiYKKyAgICAgICAgICAgICAgICBtZW1jbXAoJm1DaGlsZHJlbltpXS5HZXRFeHRBZGRyZXNzKCksICZhQWRkcmVzcywgc2l6ZW9mKGFBZGRyZXNzKSkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSAmbUNoaWxkcmVuW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSA9PSBtUm91dGVySWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtUm91dGVyc1tpXS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCAmJgorICAgICAgICAgICAgICAgIG1lbWNtcCgmbVJvdXRlcnNbaV0uR2V0RXh0QWRkcmVzcygpLCAmYUFkZHJlc3MsIHNpemVvZihhQWRkcmVzcykpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gJm1Sb3V0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtUGFyZW50UmVxdWVzdFN0YXRlICE9IGtQYXJlbnRJZGxlKQorICAgICAgICB7CisgICAgICAgICAgICBydmFsID0gTWxlOjpHZXROZWlnaGJvcihhQWRkcmVzcyk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK05laWdoYm9yICpNbGVSb3V0ZXI6OkdldE5laWdoYm9yKGNvbnN0IE1hYzo6QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgTmVpZ2hib3IgKnJ2YWwgPSBOVUxMOworCisgICAgc3dpdGNoIChhQWRkcmVzcy5tTGVuZ3RoKQorICAgIHsKKyAgICBjYXNlIHNpemVvZihhQWRkcmVzcy5tU2hvcnRBZGRyZXNzKToKKyAgICAgICAgcnZhbCA9IEdldE5laWdoYm9yKGFBZGRyZXNzLm1TaG9ydEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugc2l6ZW9mKGFBZGRyZXNzLm1FeHRBZGRyZXNzKToKKyAgICAgICAgcnZhbCA9IEdldE5laWdoYm9yKGFBZGRyZXNzLm1FeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKworTmVpZ2hib3IgKk1sZVJvdXRlcjo6R2V0TmVpZ2hib3IoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBNYWM6OkFkZHJlc3MgbWFjYWRkcjsKKyAgICBMb3dwYW46OkNvbnRleHQgY29udGV4dDsKKyAgICBDaGlsZCAqY2hpbGQ7CisgICAgUm91dGVyICpyb3V0ZXI7CisgICAgTmVpZ2hib3IgKnJ2YWwgPSBOVUxMOworCisgICAgaWYgKGFBZGRyZXNzLklzTGlua0xvY2FsKCkpCisgICAgeworICAgICAgICBpZiAoYUFkZHJlc3MubUZpZWxkcy5tMTZbNF0gPT0gSG9zdFN3YXAxNigweDAwMDApICYmCisgICAgICAgICAgICBhQWRkcmVzcy5tRmllbGRzLm0xNls1XSA9PSBIb3N0U3dhcDE2KDB4MDBmZikgJiYKKyAgICAgICAgICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzZdID09IEhvc3RTd2FwMTYoMHhmZTAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgbWFjYWRkci5tTGVuZ3RoID0gc2l6ZW9mKG1hY2FkZHIubVNob3J0QWRkcmVzcyk7CisgICAgICAgICAgICBtYWNhZGRyLm1TaG9ydEFkZHJlc3MgPSBIb3N0U3dhcDE2KGFBZGRyZXNzLm1GaWVsZHMubTE2WzddKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1hY2FkZHIubUxlbmd0aCA9IHNpemVvZihtYWNhZGRyLm1FeHRBZGRyZXNzKTsKKyAgICAgICAgICAgIG1hY2FkZHIubUV4dEFkZHJlc3MuU2V0KGFBZGRyZXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEV4aXROb3cocnZhbCA9IEdldE5laWdoYm9yKG1hY2FkZHIpKTsKKyAgICB9CisKKyAgICBpZiAoR2V0TmV0aWYoKS5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldENvbnRleHQoYUFkZHJlc3MsIGNvbnRleHQpICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBjb250ZXh0Lm1Db250ZXh0SWQgPSAweGZmOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgIHsKKyAgICAgICAgY2hpbGQgPSAmbUNoaWxkcmVuW2ldOworCisgICAgICAgIGlmICghY2hpbGQtPklzU3RhdGVWYWxpZE9yUmVzdG9yaW5nKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbnRleHQubUNvbnRleHRJZCA9PSAwICYmCisgICAgICAgICAgICBhQWRkcmVzcy5tRmllbGRzLm0xNls0XSA9PSBIb3N0U3dhcDE2KDB4MDAwMCkgJiYKKyAgICAgICAgICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzVdID09IEhvc3RTd2FwMTYoMHgwMGZmKSAmJgorICAgICAgICAgICAgYUFkZHJlc3MubUZpZWxkcy5tMTZbNl0gPT0gSG9zdFN3YXAxNigweGZlMDApICYmCisgICAgICAgICAgICBhQWRkcmVzcy5tRmllbGRzLm0xNls3XSA9PSBIb3N0U3dhcDE2KGNoaWxkLT5HZXRSbG9jMTYoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IGNoaWxkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGlsZC0+RmluZElwNkFkZHJlc3MoYUFkZHJlc3MsIE5VTEwpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IGNoaWxkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChjb250ZXh0Lm1Db250ZXh0SWQgPT0gMCwgcnZhbCA9IE5VTEwpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICByb3V0ZXIgPSAmbVJvdXRlcnNbaV07CisKKyAgICAgICAgaWYgKHJvdXRlci0+R2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQgfHwgaSA9PSBtUm91dGVySWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFBZGRyZXNzLm1GaWVsZHMubTE2WzRdID09IEhvc3RTd2FwMTYoMHgwMDAwKSAmJgorICAgICAgICAgICAgYUFkZHJlc3MubUZpZWxkcy5tMTZbNV0gPT0gSG9zdFN3YXAxNigweDAwZmYpICYmCisgICAgICAgICAgICBhQWRkcmVzcy5tRmllbGRzLm0xNls2XSA9PSBIb3N0U3dhcDE2KDB4ZmUwMCkgJiYKKyAgICAgICAgICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzddID09IEhvc3RTd2FwMTYocm91dGVyLT5HZXRSbG9jMTYoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHJvdXRlcik7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3VpbnQxNl90IE1sZVJvdXRlcjo6R2V0TmV4dEhvcCh1aW50MTZfdCBhRGVzdGluYXRpb24pCit7CisgICAgdWludDhfdCBkZXN0aW5hdGlvbklkID0gR2V0Um91dGVySWQoYURlc3RpbmF0aW9uKTsKKyAgICB1aW50OF90IHJvdXRlQ29zdDsKKyAgICB1aW50OF90IGxpbmtDb3N0OworICAgIHVpbnQxNl90IHJ2YWwgPSBNYWM6OmtTaG9ydEFkZHJJbnZhbGlkOworICAgIGNvbnN0IFJvdXRlciAqcm91dGVyOworICAgIGNvbnN0IFJvdXRlciAqbmV4dEhvcDsKKworICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCkKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IE1sZTo6R2V0TmV4dEhvcChhRGVzdGluYXRpb24pKTsKKyAgICB9CisKKyAgICAvLyBUaGUgZnJhbWUgaXMgZGVzdGluZWQgdG8gYSBjaGlsZAorICAgIGlmIChkZXN0aW5hdGlvbklkID09IG1Sb3V0ZXJJZCkKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IGFEZXN0aW5hdGlvbik7CisgICAgfQorCisgICAgcm91dGVyID0gR2V0Um91dGVyKGRlc3RpbmF0aW9uSWQpOworICAgIFZlcmlmeU9yRXhpdChyb3V0ZXIgIT0gTlVMTCk7CisKKyAgICBsaW5rQ29zdCA9IEdldExpbmtDb3N0KGRlc3RpbmF0aW9uSWQpOworICAgIHJvdXRlQ29zdCA9IEdldFJvdXRlQ29zdChhRGVzdGluYXRpb24pOworCisgICAgaWYgKChyb3V0ZUNvc3QgKyBHZXRMaW5rQ29zdChyb3V0ZXItPkdldE5leHRIb3AoKSkpIDwgbGlua0Nvc3QpCisgICAgeworICAgICAgICBuZXh0SG9wID0gR2V0Um91dGVyKHJvdXRlci0+R2V0TmV4dEhvcCgpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG5leHRIb3AgIT0gTlVMTCAmJiBuZXh0SG9wLT5HZXRTdGF0ZSgpICE9IE5laWdoYm9yOjprU3RhdGVJbnZhbGlkKTsKKworICAgICAgICBydmFsID0gR2V0UmxvYzE2KHJvdXRlci0+R2V0TmV4dEhvcCgpKTsKKyAgICB9CisgICAgZWxzZSBpZiAobGlua0Nvc3QgPCBrTWF4Um91dGVDb3N0KQorICAgIHsKKyAgICAgICAgcnZhbCA9IEdldFJsb2MxNihkZXN0aW5hdGlvbklkKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3VpbnQ4X3QgTWxlUm91dGVyOjpHZXRDb3N0KHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgdWludDhfdCByb3V0ZXJJZCA9IEdldFJvdXRlcklkKGFSbG9jMTYpOworICAgIHVpbnQ4X3QgY29zdCA9IEdldExpbmtDb3N0KHJvdXRlcklkKTsKKyAgICBSb3V0ZXIgKnJvdXRlciA9IEdldFJvdXRlcihyb3V0ZXJJZCk7CisgICAgdWludDhfdCByb3V0ZUNvc3Q7CisKKyAgICBWZXJpZnlPckV4aXQocm91dGVyICE9IE5VTEwgJiYgR2V0Um91dGVyKHJvdXRlci0+R2V0TmV4dEhvcCgpKSAhPSBOVUxMKTsKKworICAgIHJvdXRlQ29zdCA9IEdldFJvdXRlQ29zdChhUmxvYzE2KSArIEdldExpbmtDb3N0KEdldFJvdXRlcihyb3V0ZXJJZCktPkdldE5leHRIb3AoKSk7CisKKyAgICBpZiAoY29zdCA+IHJvdXRlQ29zdCkKKyAgICB7CisgICAgICAgIGNvc3QgPSByb3V0ZUNvc3Q7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBjb3N0OworfQorCit1aW50OF90IE1sZVJvdXRlcjo6R2V0Um91dGVDb3N0KHVpbnQxNl90IGFSbG9jMTYpIGNvbnN0Cit7CisgICAgdWludDhfdCBydmFsID0ga01heFJvdXRlQ29zdDsKKyAgICBjb25zdCBSb3V0ZXIgKnJvdXRlcjsKKworICAgIHJvdXRlciA9IEdldFJvdXRlcihHZXRSb3V0ZXJJZChhUmxvYzE2KSk7CisgICAgVmVyaWZ5T3JFeGl0KHJvdXRlciAhPSBOVUxMICYmIEdldFJvdXRlcihyb3V0ZXItPkdldE5leHRIb3AoKSkgIT0gTlVMTCk7CisKKyAgICBydmFsID0gcm91dGVyLT5HZXRDb3N0KCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpTZXRQcmVmZXJyZWRSb3V0ZXJJZCh1aW50OF90IGFSb3V0ZXJJZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdCgobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfREVUQUNIRUQpIHx8IChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBtUHJldmlvdXNSb3V0ZXJJZCA9IGFSb3V0ZXJJZDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpTZXRSb3V0ZXJJZCh1aW50OF90IGFSb3V0ZXJJZCkKK3sKKyAgICBtUm91dGVySWQgPSBhUm91dGVySWQ7CisgICAgbVByZXZpb3VzUm91dGVySWQgPSBtUm91dGVySWQ7Cit9CisKK1JvdXRlciAqTWxlUm91dGVyOjpHZXRSb3V0ZXJzKHVpbnQ4X3QgKmFOdW1Sb3V0ZXJzKQoreworICAgIGlmIChhTnVtUm91dGVycyAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgKmFOdW1Sb3V0ZXJzID0ga01heFJvdXRlcklkICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gbVJvdXRlcnM7Cit9CisKK1JvdXRlciAqTWxlUm91dGVyOjpHZXRSb3V0ZXIodWludDhfdCBhUm91dGVySWQpCit7CisgICAgUm91dGVyICpydmFsID0gTlVMTDsKKworICAgIFZlcmlmeU9yRXhpdChhUm91dGVySWQgPD0ga01heFJvdXRlcklkKTsKKworICAgIHJ2YWwgPSAmbVJvdXRlcnNbYVJvdXRlcklkXTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworY29uc3QgUm91dGVyICpNbGVSb3V0ZXI6OkdldFJvdXRlcih1aW50OF90IGFSb3V0ZXJJZCkgY29uc3QKK3sKKyAgICBjb25zdCBSb3V0ZXIgKnJ2YWwgPSBOVUxMOworCisgICAgVmVyaWZ5T3JFeGl0KGFSb3V0ZXJJZCA8PSBrTWF4Um91dGVySWQpOworCisgICAgcnZhbCA9ICZtUm91dGVyc1thUm91dGVySWRdOworCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6R2V0Q2hpbGRJbmZvQnlJZCh1aW50MTZfdCBhQ2hpbGRJZCwgb3RDaGlsZEluZm8gJmFDaGlsZEluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ2hpbGQgKmNoaWxkOworCisgICAgaWYgKChhQ2hpbGRJZCAmIH5rTWF4Q2hpbGRJZCkgIT0gMCkKKyAgICB7CisgICAgICAgIGFDaGlsZElkID0gR2V0Q2hpbGRJZChhQ2hpbGRJZCk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KChjaGlsZCA9IEZpbmRDaGlsZChhQ2hpbGRJZCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKyAgICBlcnJvciA9IEdldENoaWxkSW5mbygqY2hpbGQsIGFDaGlsZEluZm8pOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkdldENoaWxkSW5mb0J5SW5kZXgodWludDhfdCBhQ2hpbGRJbmRleCwgb3RDaGlsZEluZm8gJmFDaGlsZEluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUNoaWxkSW5kZXggPCBtTWF4Q2hpbGRyZW5BbGxvd2VkLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgZXJyb3IgPSBHZXRDaGlsZEluZm8obUNoaWxkcmVuW2FDaGlsZEluZGV4XSwgYUNoaWxkSW5mbyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6UmVzdG9yZUNoaWxkcmVuKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IDsgaSsrKQorICAgIHsKKyAgICAgICAgQ2hpbGQgKmNoaWxkOworICAgICAgICBTZXR0aW5nczo6Q2hpbGRJbmZvIGNoaWxkSW5mbzsKKyAgICAgICAgdWludDE2X3QgbGVuZ3RoOworCisgICAgICAgIGxlbmd0aCA9IHNpemVvZihjaGlsZEluZm8pOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RQbGF0U2V0dGluZ3NHZXQoR2V0SW5zdGFuY2UoKSwgU2V0dGluZ3M6OmtLZXlDaGlsZEluZm8sIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmNoaWxkSW5mbyksICZsZW5ndGgpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxlbmd0aCA+PSBzaXplb2YoY2hpbGRJbmZvKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KChjaGlsZCA9IE5ld0NoaWxkKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgICAgIG1lbXNldChjaGlsZCwgMCwgc2l6ZW9mKCpjaGlsZCkpOworCisgICAgICAgIGNoaWxkLT5TZXRFeHRBZGRyZXNzKCpzdGF0aWNfY2FzdDxNYWM6OkV4dEFkZHJlc3MgKj4oJmNoaWxkSW5mby5tRXh0QWRkcmVzcykpOworICAgICAgICBjaGlsZC0+U2V0UmxvYzE2KGNoaWxkSW5mby5tUmxvYzE2KTsKKyAgICAgICAgY2hpbGQtPlNldFRpbWVvdXQoY2hpbGRJbmZvLm1UaW1lb3V0KTsKKyAgICAgICAgY2hpbGQtPlNldERldmljZU1vZGUoY2hpbGRJbmZvLm1Nb2RlKTsKKyAgICAgICAgY2hpbGQtPlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVSZXN0b3JlZCk7CisgICAgICAgIGNoaWxkLT5TZXRMYXN0SGVhcmQoVGltZXI6OkdldE5vdygpKTsKKyAgICAgICAgR2V0TmV0aWYoKS5HZXRNZXNoRm9yd2FyZGVyKCkuR2V0U291cmNlTWF0Y2hDb250cm9sbGVyKCkuU2V0U3JjTWF0Y2hBc1Nob3J0KCpjaGlsZCwgdHJ1ZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlJlbW92ZVN0b3JlZENoaWxkKHVpbnQxNl90IGFDaGlsZFJsb2MxNikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwga01heENoaWxkcmVuOyBpKyspCisgICAgeworICAgICAgICBTZXR0aW5nczo6Q2hpbGRJbmZvIGNoaWxkSW5mbzsKKyAgICAgICAgdWludDE2X3QgbGVuZ3RoID0gc2l6ZW9mKGNoaWxkSW5mbyk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90UGxhdFNldHRpbmdzR2V0KEdldEluc3RhbmNlKCksIFNldHRpbmdzOjprS2V5Q2hpbGRJbmZvLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZjaGlsZEluZm8pLCAmbGVuZ3RoKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChsZW5ndGggPT0gc2l6ZW9mKGNoaWxkSW5mbyksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIGlmIChjaGlsZEluZm8ubVJsb2MxNiA9PSBhQ2hpbGRSbG9jMTYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gb3RQbGF0U2V0dGluZ3NEZWxldGUoR2V0TmV0aWYoKS5HZXRJbnN0YW5jZSgpLCBTZXR0aW5nczo6a0tleUNoaWxkSW5mbywgaSk7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U3RvcmVDaGlsZCh1aW50MTZfdCBhQ2hpbGRSbG9jMTYpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ2hpbGQgKmNoaWxkOworICAgIFNldHRpbmdzOjpDaGlsZEluZm8gY2hpbGRJbmZvOworCisgICAgVmVyaWZ5T3JFeGl0KChjaGlsZCA9IEZpbmRDaGlsZChHZXRDaGlsZElkKGFDaGlsZFJsb2MxNikpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICBJZ25vcmVSZXR1cm5WYWx1ZShSZW1vdmVTdG9yZWRDaGlsZChhQ2hpbGRSbG9jMTYpKTsKKworICAgIG1lbXNldCgmY2hpbGRJbmZvLCAwLCBzaXplb2YoY2hpbGRJbmZvKSk7CisgICAgbWVtY3B5KCZjaGlsZEluZm8ubUV4dEFkZHJlc3MsICZjaGlsZC0+R2V0RXh0QWRkcmVzcygpLCBzaXplb2YoY2hpbGRJbmZvLm1FeHRBZGRyZXNzKSk7CisKKyAgICBjaGlsZEluZm8ubVRpbWVvdXQgPSBjaGlsZC0+R2V0VGltZW91dCgpOworICAgIGNoaWxkSW5mby5tUmxvYzE2ICA9IGNoaWxkLT5HZXRSbG9jMTYoKTsKKyAgICBjaGlsZEluZm8ubU1vZGUgICAgPSBjaGlsZC0+R2V0RGV2aWNlTW9kZSgpOworCisgICAgZXJyb3IgPSBvdFBsYXRTZXR0aW5nc0FkZChHZXRJbnN0YW5jZSgpLCBTZXR0aW5nczo6a0tleUNoaWxkSW5mbywgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZjaGlsZEluZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNoaWxkSW5mbykpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlJlZnJlc2hTdG9yZWRDaGlsZHJlbih2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90UGxhdFNldHRpbmdzRGVsZXRlKEdldEluc3RhbmNlKCksIFNldHRpbmdzOjprS2V5Q2hpbGRJbmZvLCAtMSkpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwga01heENoaWxkcmVuOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNoaWxkcmVuW2ldLkdldFN0YXRlKCkgIT0gTmVpZ2hib3I6OmtTdGF0ZUludmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTdG9yZUNoaWxkKG1DaGlsZHJlbltpXS5HZXRSbG9jMTYoKSkpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkdldENoaWxkSW5mbyhDaGlsZCAmYUNoaWxkLCBvdENoaWxkSW5mbyAmYUNoaWxkSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhQ2hpbGQuR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworICAgIG1lbXNldCgmYUNoaWxkSW5mbywgMCwgc2l6ZW9mKGFDaGlsZEluZm8pKTsKKyAgICBtZW1jcHkoJmFDaGlsZEluZm8ubUV4dEFkZHJlc3MsICZhQ2hpbGQuR2V0RXh0QWRkcmVzcygpLCBzaXplb2YoYUNoaWxkSW5mby5tRXh0QWRkcmVzcykpOworCisgICAgYUNoaWxkSW5mby5tVGltZW91dCAgICAgICAgICAgID0gYUNoaWxkLkdldFRpbWVvdXQoKTsKKyAgICBhQ2hpbGRJbmZvLm1SbG9jMTYgICAgICAgICAgICAgPSBhQ2hpbGQuR2V0UmxvYzE2KCk7CisgICAgYUNoaWxkSW5mby5tQ2hpbGRJZCAgICAgICAgICAgID0gR2V0Q2hpbGRJZChhQ2hpbGQuR2V0UmxvYzE2KCkpOworICAgIGFDaGlsZEluZm8ubU5ldHdvcmtEYXRhVmVyc2lvbiA9IGFDaGlsZC5HZXROZXR3b3JrRGF0YVZlcnNpb24oKTsKKyAgICBhQ2hpbGRJbmZvLm1BZ2UgICAgICAgICAgICAgICAgPSBUaW1lcjo6TXNlY1RvU2VjKFRpbWVyOjpHZXROb3coKSAtIGFDaGlsZC5HZXRMYXN0SGVhcmQoKSk7CisgICAgYUNoaWxkSW5mby5tTGlua1F1YWxpdHlJbiAgICAgID0gYUNoaWxkLkdldExpbmtJbmZvKCkuR2V0TGlua1F1YWxpdHkoR2V0TmV0aWYoKS5HZXRNYWMoKS5HZXROb2lzZUZsb29yKCkpOworICAgIGFDaGlsZEluZm8ubUF2ZXJhZ2VSc3NpICAgICAgICA9IGFDaGlsZC5HZXRMaW5rSW5mbygpLkdldEF2ZXJhZ2VSc3MoKTsKKyAgICBhQ2hpbGRJbmZvLm1MYXN0UnNzaSAgICAgICAgICAgPSBhQ2hpbGQuR2V0TGlua0luZm8oKS5HZXRMYXN0UnNzKCk7CisKKyAgICBhQ2hpbGRJbmZvLm1SeE9uV2hlbklkbGUgICAgICA9IGFDaGlsZC5Jc1J4T25XaGVuSWRsZSgpOworICAgIGFDaGlsZEluZm8ubVNlY3VyZURhdGFSZXF1ZXN0ID0gYUNoaWxkLklzU2VjdXJlRGF0YVJlcXVlc3QoKTsKKyAgICBhQ2hpbGRJbmZvLm1GdWxsRnVuY3Rpb24gICAgICA9IGFDaGlsZC5Jc0Z1bGxUaHJlYWREZXZpY2UoKTsKKyAgICBhQ2hpbGRJbmZvLm1GdWxsTmV0d29ya0RhdGEgICA9IGFDaGlsZC5Jc0Z1bGxOZXR3b3JrRGF0YSgpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkdldFJvdXRlckluZm8odWludDE2X3QgYVJvdXRlcklkLCBvdFJvdXRlckluZm8gJmFSb3V0ZXJJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFJvdXRlciAqcm91dGVyOworICAgIHVpbnQ4X3Qgcm91dGVySWQ7CisKKyAgICBpZiAoYVJvdXRlcklkID4ga01heFJvdXRlcklkICYmIElzQWN0aXZlUm91dGVyKGFSb3V0ZXJJZCkpCisgICAgeworICAgICAgICByb3V0ZXJJZCA9IEdldFJvdXRlcklkKGFSb3V0ZXJJZCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJvdXRlcklkID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVJvdXRlcklkKTsKKyAgICB9CisKKyAgICByb3V0ZXIgPSBHZXRSb3V0ZXIocm91dGVySWQpOworICAgIFZlcmlmeU9yRXhpdChyb3V0ZXIgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgbWVtY3B5KCZhUm91dGVySW5mby5tRXh0QWRkcmVzcywgJnJvdXRlci0+R2V0RXh0QWRkcmVzcygpLCBzaXplb2YoYVJvdXRlckluZm8ubUV4dEFkZHJlc3MpKTsKKworICAgIGFSb3V0ZXJJbmZvLm1BbGxvY2F0ZWQgICAgICAgPSByb3V0ZXItPklzQWxsb2NhdGVkKCk7CisgICAgYVJvdXRlckluZm8ubVJvdXRlcklkICAgICAgICA9IHJvdXRlcklkOworICAgIGFSb3V0ZXJJbmZvLm1SbG9jMTYgICAgICAgICAgPSBHZXRSbG9jMTYocm91dGVySWQpOworICAgIGFSb3V0ZXJJbmZvLm1OZXh0SG9wICAgICAgICAgPSByb3V0ZXItPkdldE5leHRIb3AoKTsKKyAgICBhUm91dGVySW5mby5tTGlua0VzdGFibGlzaGVkID0gcm91dGVyLT5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZDsKKyAgICBhUm91dGVySW5mby5tUGF0aENvc3QgICAgICAgID0gcm91dGVyLT5HZXRDb3N0KCk7CisgICAgYVJvdXRlckluZm8ubUxpbmtRdWFsaXR5SW4gICA9IHJvdXRlci0+R2V0TGlua0luZm8oKS5HZXRMaW5rUXVhbGl0eShHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSk7CisgICAgYVJvdXRlckluZm8ubUxpbmtRdWFsaXR5T3V0ICA9IHJvdXRlci0+R2V0TGlua1F1YWxpdHlPdXQoKTsKKyAgICBhUm91dGVySW5mby5tQWdlICAgICAgICAgICAgID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oVGltZXI6Ok1zZWNUb1NlYyhUaW1lcjo6R2V0Tm93KCkgLSByb3V0ZXItPkdldExhc3RIZWFyZCgpKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6R2V0TmV4dE5laWdoYm9ySW5mbyhvdE5laWdoYm9ySW5mb0l0ZXJhdG9yICZhSXRlcmF0b3IsIG90TmVpZ2hib3JJbmZvICZhTmVpZ2hJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE5laWdoYm9yICpuZWlnaGJvciA9IE5VTEw7CisgICAgaW50MTZfdCBpbmRleDsKKworICAgIG1lbXNldCgmYU5laWdoSW5mbywgMCwgc2l6ZW9mKGFOZWlnaEluZm8pKTsKKworICAgIC8vIE5vbi1uZWdhdGl2ZSBpdGVyYXRvciB2YWx1ZSBnaXZlcyB0aGUgY3VycmVudCBpbmRleCBpbnRvIG1DaGlsZHJlbiBhcnJheQorCisgICAgaWYgKGFJdGVyYXRvciA+PSAwKQorICAgIHsKKyAgICAgICAgZm9yIChpbmRleCA9IGFJdGVyYXRvcjsgaW5kZXggPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUNoaWxkcmVuW2luZGV4XS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZWlnaGJvciA9ICZtQ2hpbGRyZW5baW5kZXhdOworICAgICAgICAgICAgICAgIGFOZWlnaEluZm8ubUlzQ2hpbGQgPSB0cnVlOworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICAgICAgYUl0ZXJhdG9yID0gaW5kZXg7CisgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYUl0ZXJhdG9yID0gMDsKKyAgICB9CisKKyAgICAvLyBOZWdhdGl2ZSBpdGVyYXRvciB2YWx1ZSBnaXZlcyB0aGUgY3VycmVudCBpbmRleCBpbnRvIG1Sb3V0ZXJzIGFycmF5CisKKyAgICBmb3IgKGluZGV4ID0gLWFJdGVyYXRvcjsgaW5kZXggPD0ga01heFJvdXRlcklkOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Sb3V0ZXJzW2luZGV4XS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgbmVpZ2hib3IgPSAmbVJvdXRlcnNbaW5kZXhdOworICAgICAgICAgICAgYU5laWdoSW5mby5tSXNDaGlsZCA9IGZhbHNlOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIGFJdGVyYXRvciA9IC1pbmRleDsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFJdGVyYXRvciA9IC1pbmRleDsKKyAgICBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKworZXhpdDoKKworICAgIGlmIChuZWlnaGJvciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCZhTmVpZ2hJbmZvLm1FeHRBZGRyZXNzLCAmbmVpZ2hib3ItPkdldEV4dEFkZHJlc3MoKSwgc2l6ZW9mKGFOZWlnaEluZm8ubUV4dEFkZHJlc3MpKTsKKyAgICAgICAgYU5laWdoSW5mby5tQWdlID0gVGltZXI6Ok1zZWNUb1NlYyhUaW1lcjo6R2V0Tm93KCkgLSBuZWlnaGJvci0+R2V0TGFzdEhlYXJkKCkpOworICAgICAgICBhTmVpZ2hJbmZvLm1SbG9jMTYgPSBuZWlnaGJvci0+R2V0UmxvYzE2KCk7CisgICAgICAgIGFOZWlnaEluZm8ubUxpbmtGcmFtZUNvdW50ZXIgPSBuZWlnaGJvci0+R2V0TGlua0ZyYW1lQ291bnRlcigpOworICAgICAgICBhTmVpZ2hJbmZvLm1NbGVGcmFtZUNvdW50ZXIgPSBuZWlnaGJvci0+R2V0TWxlRnJhbWVDb3VudGVyKCk7CisgICAgICAgIGFOZWlnaEluZm8ubUxpbmtRdWFsaXR5SW4gPSBuZWlnaGJvci0+R2V0TGlua0luZm8oKS5HZXRMaW5rUXVhbGl0eShHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSk7CisgICAgICAgIGFOZWlnaEluZm8ubUF2ZXJhZ2VSc3NpID0gbmVpZ2hib3ItPkdldExpbmtJbmZvKCkuR2V0QXZlcmFnZVJzcygpOworICAgICAgICBhTmVpZ2hJbmZvLm1MYXN0UnNzaSA9IG5laWdoYm9yLT5HZXRMaW5rSW5mbygpLkdldExhc3RSc3MoKTsKKyAgICAgICAgYU5laWdoSW5mby5tUnhPbldoZW5JZGxlID0gbmVpZ2hib3ItPklzUnhPbldoZW5JZGxlKCk7CisgICAgICAgIGFOZWlnaEluZm8ubVNlY3VyZURhdGFSZXF1ZXN0ID0gbmVpZ2hib3ItPklzU2VjdXJlRGF0YVJlcXVlc3QoKTsKKyAgICAgICAgYU5laWdoSW5mby5tRnVsbEZ1bmN0aW9uID0gbmVpZ2hib3ItPklzRnVsbFRocmVhZERldmljZSgpOworICAgICAgICBhTmVpZ2hJbmZvLm1GdWxsTmV0d29ya0RhdGEgPSBuZWlnaGJvci0+SXNGdWxsTmV0d29ya0RhdGEoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpSZXNvbHZlUm91dGluZ0xvb3BzKHVpbnQxNl90IGFTb3VyY2VNYWMsIHVpbnQxNl90IGFEZXN0UmxvYzE2KQoreworICAgIGlmIChhU291cmNlTWFjID09IEdldE5leHRIb3AoYURlc3RSbG9jMTYpKQorICAgIHsKKyAgICAgICAgLy8gbG9vcCBkZXRlY3RlZAorICAgICAgICBSb3V0ZXIgKnJvdXRlciA9IEdldFJvdXRlcihHZXRSb3V0ZXJJZChhRGVzdFJsb2MxNikpOworICAgICAgICBhc3NlcnQocm91dGVyICE9IE5VTEwpOworCisgICAgICAgIC8vIGludmFsaWRhdGUgbmV4dCBob3AKKyAgICAgICAgcm91dGVyLT5TZXROZXh0SG9wKGtJbnZhbGlkUm91dGVySWQpOworICAgICAgICBSZXNldEFkdmVydGlzZUludGVydmFsKCk7CisgICAgfQorfQorCitvdEVycm9yIE1sZVJvdXRlcjo6Q2hlY2tSZWFjaGFiaWxpdHkodWludDE2X3QgYU1lc2hTb3VyY2UsIHVpbnQxNl90IGFNZXNoRGVzdCwgSXA2OjpIZWFkZXIgJmFJcDZIZWFkZXIpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgaWYgKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0NISUxEKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1sZTo6Q2hlY2tSZWFjaGFiaWxpdHkoYU1lc2hTb3VyY2UsIGFNZXNoRGVzdCwgYUlwNkhlYWRlcik7CisgICAgfQorCisgICAgaWYgKGFNZXNoRGVzdCA9PSBuZXRpZi5HZXRNYWMoKS5HZXRTaG9ydEFkZHJlc3MoKSkKKyAgICB7CisgICAgICAgIC8vIG1lc2ggZGVzdGluYXRpb24gaXMgdGhpcyBkZXZpY2UKKyAgICAgICAgaWYgKG5ldGlmLklzVW5pY2FzdEFkZHJlc3MoYUlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSVB2NiBkZXN0aW5hdGlvbiBpcyB0aGlzIGRldmljZQorICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoR2V0TmVpZ2hib3IoYUlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpKSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJUHY2IGRlc3RpbmF0aW9uIGlzIGFuIFJGRCBjaGlsZAorICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoR2V0Um91dGVySWQoYU1lc2hEZXN0KSA9PSBtUm91dGVySWQpCisgICAgeworICAgICAgICAvLyBtZXNoIGRlc3RpbmF0aW9uIGlzIGEgY2hpbGQgb2YgdGhpcyBkZXZpY2UKKyAgICAgICAgaWYgKEdldENoaWxkKGFNZXNoRGVzdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKEdldE5leHRIb3AoYU1lc2hEZXN0KSAhPSBNYWM6OmtTaG9ydEFkZHJJbnZhbGlkKQorICAgIHsKKyAgICAgICAgLy8gZm9yd2FyZGluZyB0byBhbm90aGVyIHJvdXRlciBhbmQgcm91dGUgaXMga25vd24KKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSA9IEdldE1lc2hMb2NhbDE2KCk7CisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSA9IEhvc3RTd2FwMTYoYU1lc2hTb3VyY2UpOworICAgIG1lc3NhZ2VJbmZvLlNldEludGVyZmFjZUlkKG5ldGlmLkdldEludGVyZmFjZUlkKCkpOworCisgICAgbmV0aWYuR2V0SXA2KCkubUljbXAuU2VuZEVycm9yKElwNjo6SWNtcEhlYWRlcjo6a1R5cGVEc3RVbnJlYWNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJcDY6OkljbXBIZWFkZXI6OmtDb2RlRHN0VW5yZWFjaE5vUm91dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VJbmZvLCBhSXA2SGVhZGVyKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9EUk9QOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2VuZEFkZHJlc3NTb2xpY2l0KFRocmVhZFN0YXR1c1Rsdjo6U3RhdHVzIGFTdGF0dXMpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIFRocmVhZEV4dE1hY0FkZHJlc3NUbHYgbWFjQWRkcjY0VGx2OworICAgIFRocmVhZFJsb2MxNlRsdiBybG9jVGx2OworICAgIFRocmVhZFN0YXR1c1RsdiBzdGF0dXNUbHY7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX0FERFJFU1NfU09MSUNJVCk7CisgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldENvYXAoKS5OZXdNZXNzYWdlKGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBtYWNBZGRyNjRUbHYuSW5pdCgpOworICAgIG1hY0FkZHI2NFRsdi5TZXRNYWNBZGRyKCpuZXRpZi5HZXRNYWMoKS5HZXRFeHRBZGRyZXNzKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJm1hY0FkZHI2NFRsdiwgc2l6ZW9mKG1hY0FkZHI2NFRsdikpKTsKKworICAgIGlmIChJc1JvdXRlcklkVmFsaWQobVByZXZpb3VzUm91dGVySWQpKQorICAgIHsKKyAgICAgICAgcmxvY1Rsdi5Jbml0KCk7CisgICAgICAgIHJsb2NUbHYuU2V0UmxvYzE2KEdldFJsb2MxNihtUHJldmlvdXNSb3V0ZXJJZCkpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZybG9jVGx2LCBzaXplb2YocmxvY1RsdikpKTsKKyAgICB9CisKKyAgICBzdGF0dXNUbHYuSW5pdCgpOworICAgIHN0YXR1c1Rsdi5TZXRTdGF0dXMoYVN0YXR1cyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmc3RhdHVzVGx2LCBzaXplb2Yoc3RhdHVzVGx2KSkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEdldExlYWRlckFkZHJlc3MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSkpOworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKEdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNbGVSb3V0ZXI6OkhhbmRsZUFkZHJlc3NTb2xpY2l0UmVzcG9uc2UsIHRoaXMpKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiU2VudCBhZGRyZXNzIHNvbGljaXQgdG8gJTA0eCIsIEhvc3RTd2FwMTYobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSkpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNlbmRBZGRyZXNzUmVsZWFzZSh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBUaHJlYWRSbG9jMTZUbHYgcmxvY1RsdjsKKyAgICBUaHJlYWRFeHRNYWNBZGRyZXNzVGx2IG1hY0FkZHI2NFRsdjsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfQUREUkVTU19SRUxFQVNFKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbmV0aWYuR2V0Q29hcCgpLk5ld01lc3NhZ2UoaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHJsb2NUbHYuSW5pdCgpOworICAgIHJsb2NUbHYuU2V0UmxvYzE2KEdldFJsb2MxNihtUm91dGVySWQpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZybG9jVGx2LCBzaXplb2YocmxvY1RsdikpKTsKKworICAgIG1hY0FkZHI2NFRsdi5Jbml0KCk7CisgICAgbWFjQWRkcjY0VGx2LlNldE1hY0FkZHIoKm5ldGlmLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbWFjQWRkcjY0VGx2LCBzaXplb2YobWFjQWRkcjY0VGx2KSkpOworCisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIoR2V0TWVzaExvY2FsMTYoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEdldExlYWRlckFkZHJlc3MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiU2VudCBhZGRyZXNzIHJlbGVhc2UiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpIYW5kbGVBZGRyZXNzU29saWNpdFJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxNbGVSb3V0ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVBZGRyZXNzU29saWNpdFJlc3BvbnNlKHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJlc3VsdCk7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpIYW5kbGVBZGRyZXNzU29saWNpdFJlc3BvbnNlKENvYXA6OkhlYWRlciAqYUhlYWRlciwgTWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYVJlc3VsdCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7CisKKyAgICBUaHJlYWRTdGF0dXNUbHYgc3RhdHVzVGx2OworICAgIFRocmVhZFJsb2MxNlRsdiBybG9jVGx2OworICAgIFRocmVhZFJvdXRlck1hc2tUbHYgcm91dGVyTWFza1RsdjsKKyAgICB1aW50OF90IHJvdXRlcklkOworICAgIFJvdXRlciAqcm91dGVyOworICAgIGJvb2wgb2xkOworCisgICAgVmVyaWZ5T3JFeGl0KGFSZXN1bHQgPT0gT1RfRVJST1JfTk9ORSAmJiBhSGVhZGVyICE9IE5VTEwgJiYgYU1lc3NhZ2UgIT0gTlVMTCk7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci0+R2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9DSEFOR0VEKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgYWRkcmVzcyByZXBseSIpOworCisgICAgU3VjY2Vzc09yRXhpdChUaHJlYWRUbHY6OkdldFRsdigqYU1lc3NhZ2UsIFRocmVhZFRsdjo6a1N0YXR1cywgc2l6ZW9mKHN0YXR1c1RsdiksIHN0YXR1c1RsdikpOworICAgIFZlcmlmeU9yRXhpdChzdGF0dXNUbHYuSXNWYWxpZCgpKTsKKworICAgIGlmIChzdGF0dXNUbHYuR2V0U3RhdHVzKCkgIT0gc3RhdHVzVGx2LmtTdWNjZXNzKQorICAgIHsKKyAgICAgICAgaWYgKElzUm91dGVySWRWYWxpZChtUHJldmlvdXNSb3V0ZXJJZCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChIYXNDaGlsZHJlbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNldFJvdXRlcklkKGtJbnZhbGlkUm91dGVySWQpOworICAgICAgICB9CisKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoVGhyZWFkVGx2OjpHZXRUbHYoKmFNZXNzYWdlLCBUaHJlYWRUbHY6OmtSbG9jMTYsIHNpemVvZihybG9jVGx2KSwgcmxvY1RsdikpOworICAgIFZlcmlmeU9yRXhpdChybG9jVGx2LklzVmFsaWQoKSk7CisgICAgcm91dGVySWQgPSBHZXRSb3V0ZXJJZChybG9jVGx2LkdldFJsb2MxNigpKTsKKyAgICByb3V0ZXIgPSBHZXRSb3V0ZXIocm91dGVySWQpOworICAgIFZlcmlmeU9yRXhpdChyb3V0ZXIgIT0gTlVMTCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KFRocmVhZFRsdjo6R2V0VGx2KCphTWVzc2FnZSwgVGhyZWFkVGx2OjprUm91dGVyTWFzaywgc2l6ZW9mKHJvdXRlck1hc2tUbHYpLCByb3V0ZXJNYXNrVGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KHJvdXRlck1hc2tUbHYuSXNWYWxpZCgpKTsKKworICAgIC8vIGlmIGFsbG9jYXRlZCByb3V0ZXJJZCBpcyBkaWZmZXJlbnQgZnJvbSBwcmV2aW91cyByb3V0ZXJJZAorICAgIGlmIChJc1JvdXRlcklkVmFsaWQobVByZXZpb3VzUm91dGVySWQpICYmIHJvdXRlcklkICE9IG1QcmV2aW91c1JvdXRlcklkKQorICAgIHsKKyAgICAgICAgLy8gcmVzZXQgY2hpbGRyZW4gaW5mbyBpZiBhbnkKKyAgICAgICAgaWYgKEhhc0NoaWxkcmVuKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBhc3NpZ24gc2hvcnQgYWRkcmVzcworICAgIFNldFJvdXRlcklkKHJvdXRlcklkKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoU2V0U3RhdGVSb3V0ZXIoR2V0UmxvYzE2KG1Sb3V0ZXJJZCkpKTsKKworICAgIHJvdXRlci0+U2V0Q29zdCgwKTsKKworICAgIC8vIGNvcHkgcm91dGVyIGlkIGluZm9ybWF0aW9uCisgICAgbVJvdXRlcklkU2VxdWVuY2UgPSByb3V0ZXJNYXNrVGx2LkdldElkU2VxdWVuY2UoKTsKKyAgICBtUm91dGVySWRTZXF1ZW5jZUxhc3RVcGRhdGVkID0gVGltZXI6OkdldE5vdygpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgIHsKKyAgICAgICAgb2xkID0gbVJvdXRlcnNbaV0uSXNBbGxvY2F0ZWQoKTsKKyAgICAgICAgbVJvdXRlcnNbaV0uU2V0QWxsb2NhdGVkKHJvdXRlck1hc2tUbHYuSXNBc3NpZ25lZFJvdXRlcklkU2V0KGkpKTsKKworICAgICAgICBpZiAob2xkICYmICFtUm91dGVyc1tpXS5Jc0FsbG9jYXRlZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBHZXROZXRpZigpLkdldEFkZHJlc3NSZXNvbHZlcigpLlJlbW92ZShpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEtlZXAgcm91dGUgcGF0aCB0byB0aGUgTGVhZGVyIHJlcG9ydGVkIGJ5IHRoZSBwYXJlbnQgYmVmb3JlIGl0IGlzIHVwZGF0ZWQuCisgICAgaWYgKG1Sb3V0ZXJzW0dldExlYWRlcklkKCldLkdldENvc3QoKSA9PSAwKQorICAgIHsKKyAgICAgICAgbVJvdXRlcnNbR2V0TGVhZGVySWQoKV0uU2V0Q29zdChtUGFyZW50TGVhZGVyQ29zdCk7CisgICAgfQorCisgICAgbVJvdXRlcnNbR2V0TGVhZGVySWQoKV0uU2V0TmV4dEhvcChHZXRSb3V0ZXJJZChtUGFyZW50LkdldFJsb2MxNigpKSk7CisKKyAgICAvLyBLZWVwIGxpbmsgdG8gdGhlIHBhcmVudCBpbiBvcmRlciB0byByZXNwb25zZSB0byBQYXJlbnQgUmVxdWVzdHMgYmVmb3JlIG5ldyBsaW5rIGlzIGVzdGFibGlzaGVkLgorICAgIG1Sb3V0ZXJzW0dldFJvdXRlcklkKG1QYXJlbnQuR2V0UmxvYzE2KCkpXSA9IG1QYXJlbnQ7CisgICAgbVJvdXRlcnNbR2V0Um91dGVySWQobVBhcmVudC5HZXRSbG9jMTYoKSldLlNldEFsbG9jYXRlZCh0cnVlKTsKKworICAgIC8vIHNlbmQgbGluayByZXF1ZXN0CisgICAgU2VuZExpbmtSZXF1ZXN0KE5VTEwpOworCisgICAgLy8gc2VuZCBjaGlsZCBpZCByZXNwb25zZXMKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICB7CisgICAgICAgIHN3aXRjaCAobUNoaWxkcmVuW2ldLkdldFN0YXRlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlQ2hpbGRJZFJlcXVlc3Q6CisgICAgICAgICAgICBTZW5kQ2hpbGRJZFJlc3BvbnNlKCZtQ2hpbGRyZW5baV0pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlTGlua1JlcXVlc3Q6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlSW52YWxpZDoKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlUGFyZW50UmVxdWVzdDoKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQ6CisgICAgICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZVJlc3RvcmVkOgorICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVDaGlsZFVwZGF0ZVJlcXVlc3Q6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpIYW5kbGVBZGRyZXNzU29saWNpdCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxNbGVSb3V0ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVBZGRyZXNzU29saWNpdCgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBNbGVSb3V0ZXI6OkhhbmRsZUFkZHJlc3NTb2xpY2l0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBUaHJlYWRFeHRNYWNBZGRyZXNzVGx2IG1hY0FkZHI2NFRsdjsKKyAgICBUaHJlYWRSbG9jMTZUbHYgcmxvY1RsdjsKKyAgICBUaHJlYWRTdGF0dXNUbHYgc3RhdHVzVGx2OworICAgIHVpbnQ4X3Qgcm91dGVySWQgPSBrSW52YWxpZFJvdXRlcklkOworICAgIFJvdXRlciAqcm91dGVyID0gTlVMTDsKKworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLkdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUgJiYgYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX1BPU1QsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBhZGRyZXNzIHNvbGljaXQiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUaHJlYWRUbHY6OkdldFRsdihhTWVzc2FnZSwgVGhyZWFkVGx2OjprRXh0TWFjQWRkcmVzcywgc2l6ZW9mKG1hY0FkZHI2NFRsdiksIG1hY0FkZHI2NFRsdikpOworICAgIFZlcmlmeU9yRXhpdChtYWNBZGRyNjRUbHYuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUaHJlYWRUbHY6OkdldFRsdihhTWVzc2FnZSwgVGhyZWFkVGx2OjprU3RhdHVzLCBzaXplb2Yoc3RhdHVzVGx2KSwgc3RhdHVzVGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KHN0YXR1c1Rsdi5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gc2VlIGlmIGFsbG9jYXRpb24gYWxyZWFkeSBleGlzdHMKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uSXNBbGxvY2F0ZWQoKSAmJgorICAgICAgICAgICAgbWVtY21wKCZtUm91dGVyc1tpXS5HZXRFeHRBZGRyZXNzKCksIG1hY0FkZHI2NFRsdi5HZXRNYWNBZGRyKCksIHNpemVvZihtUm91dGVyc1tpXS5HZXRFeHRBZGRyZXNzKCkpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJvdXRlcklkID0gaSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBjaGVjayB0aGUgcmVxdWVzdCByZWFzb24KKyAgICBzd2l0Y2ggKHN0YXR1c1Rsdi5HZXRTdGF0dXMoKSkKKyAgICB7CisgICAgY2FzZSBUaHJlYWRTdGF0dXNUbHY6OmtUb29GZXdSb3V0ZXJzOgorICAgICAgICBWZXJpZnlPckV4aXQoR2V0QWN0aXZlUm91dGVyQ291bnQoKSA8IG1Sb3V0ZXJVcGdyYWRlVGhyZXNob2xkKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRocmVhZFN0YXR1c1Rsdjo6a0hhdmVDaGlsZElkUmVxdWVzdDoKKyAgICBjYXNlIFRocmVhZFN0YXR1c1Rsdjo6a1BhcmVudFBhcnRpdGlvbkNoYW5nZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoVGhyZWFkVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRocmVhZFRsdjo6a1Jsb2MxNiwgc2l6ZW9mKHJsb2NUbHYpLCBybG9jVGx2KSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgLy8gc3BlY2lmaWMgUm91dGVyIElEIHJlcXVlc3RlZAorICAgICAgICBWZXJpZnlPckV4aXQocmxvY1Rsdi5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICByb3V0ZXJJZCA9IEdldFJvdXRlcklkKHJsb2NUbHYuR2V0UmxvYzE2KCkpOworICAgICAgICByb3V0ZXIgPSBHZXRSb3V0ZXIocm91dGVySWQpOworCisgICAgICAgIGlmIChyb3V0ZXIgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJvdXRlci0+SXNBbGxvY2F0ZWQoKSAmJgorICAgICAgICAgICAgICAgIG1lbWNtcCgmcm91dGVyLT5HZXRFeHRBZGRyZXNzKCksIG1hY0FkZHI2NFRsdi5HZXRNYWNBZGRyKCksIHNpemVvZihyb3V0ZXItPkdldEV4dEFkZHJlc3MoKSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RlZCBSb3V0ZXIgSUQgaXMgYWxsb2NhdGVkIHRvIGFub3RoZXIgZGV2aWNlCisgICAgICAgICAgICAgICAgcm91dGVySWQgPSBrSW52YWxpZFJvdXRlcklkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIXJvdXRlci0+SXNBbGxvY2F0ZWQoKSAmJiByb3V0ZXItPklzUmVjbGFpbURlbGF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gcmVxdWVzdGVkIFJvdXRlciBJRCBpcyBkZWFsbG9jYXRlZCBidXQgd2l0aGluIElEX1JFVVNFX0RFTEFZIHBlcmlvZAorICAgICAgICAgICAgICAgIHJvdXRlcklkID0ga0ludmFsaWRSb3V0ZXJJZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByb3V0ZXJJZCA9IEFsbG9jYXRlUm91dGVySWQocm91dGVySWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gYWxsb2NhdGUgbmV3IHJvdXRlciBpZAorICAgIGlmICghSXNSb3V0ZXJJZFZhbGlkKHJvdXRlcklkKSkKKyAgICB7CisgICAgICAgIHJvdXRlcklkID0gQWxsb2NhdGVSb3V0ZXJJZCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgInJvdXRlciBpZCByZXF1ZXN0ZWQgYW5kIHByb3ZpZGVkISIpOworICAgIH0KKworICAgIHJvdXRlciA9IEdldFJvdXRlcihyb3V0ZXJJZCk7CisKKyAgICBpZiAocm91dGVyICE9IE5VTEwpCisgICAgeworICAgICAgICByb3V0ZXItPlNldEV4dEFkZHJlc3MoKm1hY0FkZHI2NFRsdi5HZXRNYWNBZGRyKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgInJvdXRlciBhZGRyZXNzIHVuYXZhaWxhYmxlISIpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgU2VuZEFkZHJlc3NTb2xpY2l0UmVzcG9uc2UoYUhlYWRlciwgcm91dGVySWQsIGFNZXNzYWdlSW5mbyk7CisgICAgfQorfQorCit2b2lkIE1sZVJvdXRlcjo6U2VuZEFkZHJlc3NTb2xpY2l0UmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgdWludDhfdCBhUm91dGVySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIHJlc3BvbnNlSGVhZGVyOworICAgIFRocmVhZFN0YXR1c1RsdiBzdGF0dXNUbHY7CisgICAgVGhyZWFkUm91dGVyTWFza1RsdiByb3V0ZXJNYXNrVGx2OworICAgIFRocmVhZFJsb2MxNlRsdiBybG9jVGx2OworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICByZXNwb25zZUhlYWRlci5TZXREZWZhdWx0UmVzcG9uc2VIZWFkZXIoYVJlcXVlc3RIZWFkZXIpOworICAgIHJlc3BvbnNlSGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldENvYXAoKS5OZXdNZXNzYWdlKHJlc3BvbnNlSGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHN0YXR1c1Rsdi5Jbml0KCk7CisgICAgc3RhdHVzVGx2LlNldFN0YXR1cyghSXNSb3V0ZXJJZFZhbGlkKGFSb3V0ZXJJZCkgPyBzdGF0dXNUbHYua05vQWRkcmVzc0F2YWlsYWJsZSA6IHN0YXR1c1Rsdi5rU3VjY2Vzcyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmc3RhdHVzVGx2LCBzaXplb2Yoc3RhdHVzVGx2KSkpOworCisgICAgaWYgKElzUm91dGVySWRWYWxpZChhUm91dGVySWQpKQorICAgIHsKKyAgICAgICAgcmxvY1Rsdi5Jbml0KCk7CisgICAgICAgIHJsb2NUbHYuU2V0UmxvYzE2KEdldFJsb2MxNihhUm91dGVySWQpKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmcmxvY1Rsdiwgc2l6ZW9mKHJsb2NUbHYpKSk7CisKKyAgICAgICAgcm91dGVyTWFza1Rsdi5Jbml0KCk7CisgICAgICAgIHJvdXRlck1hc2tUbHYuU2V0SWRTZXF1ZW5jZShtUm91dGVySWRTZXF1ZW5jZSk7CisgICAgICAgIHJvdXRlck1hc2tUbHYuQ2xlYXJBc3NpZ25lZFJvdXRlcklkTWFzaygpOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1Sb3V0ZXJzW2ldLklzQWxsb2NhdGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcm91dGVyTWFza1Rsdi5TZXRBc3NpZ25lZFJvdXRlcklkKGkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmcm91dGVyTWFza1Rsdiwgc2l6ZW9mKHJvdXRlck1hc2tUbHYpKSk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgYWRkcmVzcyByZXBseSIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KK30KKwordm9pZCBNbGVSb3V0ZXI6OkhhbmRsZUFkZHJlc3NSZWxlYXNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PE1sZVJvdXRlciAqPihhQ29udGV4dCktPkhhbmRsZUFkZHJlc3NSZWxlYXNlKAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIE1sZVJvdXRlcjo6SGFuZGxlQWRkcmVzc1JlbGVhc2UoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkUmxvYzE2VGx2IHJsb2NUbHY7CisgICAgVGhyZWFkRXh0TWFjQWRkcmVzc1RsdiBtYWNBZGRyNjRUbHY7CisgICAgdWludDhfdCByb3V0ZXJJZDsKKyAgICBSb3V0ZXIgKnJvdXRlcjsKKworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLkdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUgJiYKKyAgICAgICAgICAgICAgICAgYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX1BPU1QpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBhZGRyZXNzIHJlbGVhc2UiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoVGhyZWFkVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRocmVhZFRsdjo6a1Jsb2MxNiwgc2l6ZW9mKHJsb2NUbHYpLCBybG9jVGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KHJsb2NUbHYuSXNWYWxpZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoVGhyZWFkVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRocmVhZFRsdjo6a0V4dE1hY0FkZHJlc3MsIHNpemVvZihtYWNBZGRyNjRUbHYpLCBtYWNBZGRyNjRUbHYpKTsKKyAgICBWZXJpZnlPckV4aXQobWFjQWRkcjY0VGx2LklzVmFsaWQoKSk7CisKKyAgICByb3V0ZXJJZCA9IEdldFJvdXRlcklkKHJsb2NUbHYuR2V0UmxvYzE2KCkpOworICAgIHJvdXRlciA9IEdldFJvdXRlcihyb3V0ZXJJZCk7CisKKyAgICBWZXJpZnlPckV4aXQocm91dGVyICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICAgbWVtY21wKCZyb3V0ZXItPkdldEV4dEFkZHJlc3MoKSwgbWFjQWRkcjY0VGx2LkdldE1hY0FkZHIoKSwgc2l6ZW9mKHJvdXRlci0+R2V0RXh0QWRkcmVzcygpKSkgPT0gMCk7CisKKyAgICBSZWxlYXNlUm91dGVySWQocm91dGVySWQpOworCisgICAgU3VjY2Vzc09yRXhpdChHZXROZXRpZigpLkdldENvYXAoKS5TZW5kRW1wdHlBY2soYUhlYWRlciwgYU1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgYWRkcmVzcyByZWxlYXNlIHJlc3BvbnNlIik7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIE1sZVJvdXRlcjo6RmlsbENvbm5lY3Rpdml0eVRsdihDb25uZWN0aXZpdHlUbHYgJmFUbHYpCit7CisgICAgQ29ubmVjdGl2aXR5VGx2ICZ0bHYgPSBhVGx2OworICAgIHVpbnQ4X3QgY29zdDsKKyAgICB1aW50OF90IGxpbmtRdWFsaXR5OworICAgIHVpbnQ4X3QgbnVtQ2hpbGRyZW4gPSAwOworICAgIGludDhfdCBwYXJlbnRQcmlvcml0eSA9IGtQYXJlbnRQcmlvcml0eU1lZGl1bTsKKyAgICBpbnQ4X3Qgbm9pc2VGbG9vciA9IEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpOworCisgICAgaWYgKG1QYXJlbnRQcmlvcml0eSAhPSBrUGFyZW50UHJpb3JpdHlVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIHBhcmVudFByaW9yaXR5ID0gbVBhcmVudFByaW9yaXR5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBudW1DaGlsZHJlbisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKChtTWF4Q2hpbGRyZW5BbGxvd2VkIC0gbnVtQ2hpbGRyZW4pIDwgKG1NYXhDaGlsZHJlbkFsbG93ZWQgLyAzKSkKKyAgICAgICAgeworICAgICAgICAgICAgcGFyZW50UHJpb3JpdHkgPSBrUGFyZW50UHJpb3JpdHlMb3c7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwYXJlbnRQcmlvcml0eSA9IGtQYXJlbnRQcmlvcml0eU1lZGl1bTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRsdi5TZXRQYXJlbnRQcmlvcml0eShwYXJlbnRQcmlvcml0eSk7CisKKyAgICAvLyBjb21wdXRlIGxlYWRlciBjb3N0IGFuZCBsaW5rIHF1YWxpdGllcworICAgIHRsdi5TZXRMaW5rUXVhbGl0eTEoMCk7CisgICAgdGx2LlNldExpbmtRdWFsaXR5MigwKTsKKyAgICB0bHYuU2V0TGlua1F1YWxpdHkzKDApOworCisgICAgY29zdCA9IG1Sb3V0ZXJzW0dldExlYWRlcklkKCldLkdldENvc3QoKTsKKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBzd2l0Y2ggKG1QYXJlbnQuR2V0TGlua0luZm8oKS5HZXRMaW5rUXVhbGl0eShub2lzZUZsb29yKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICB0bHYuU2V0TGlua1F1YWxpdHkxKHRsdi5HZXRMaW5rUXVhbGl0eTEoKSArIDEpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgdGx2LlNldExpbmtRdWFsaXR5Mih0bHYuR2V0TGlua1F1YWxpdHkyKCkgKyAxKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHRsdi5TZXRMaW5rUXVhbGl0eTModGx2LkdldExpbmtRdWFsaXR5MygpICsgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNvc3QgKz0gTGlua1F1YWxpdHlUb0Nvc3QobVBhcmVudC5HZXRMaW5rSW5mbygpLkdldExpbmtRdWFsaXR5KG5vaXNlRmxvb3IpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgY29zdCArPSBHZXRMaW5rQ29zdChtUm91dGVyc1tHZXRMZWFkZXJJZCgpXS5HZXROZXh0SG9wKCkpOworCisgICAgICAgIGlmICghSXNSb3V0ZXJJZFZhbGlkKG1Sb3V0ZXJzW0dldExlYWRlcklkKCldLkdldE5leHRIb3AoKSkgfHwgR2V0TGlua0Nvc3QoR2V0TGVhZGVySWQoKSkgPCBjb3N0KQorICAgICAgICB7CisgICAgICAgICAgICBjb3N0ID0gR2V0TGlua0Nvc3QoR2V0TGVhZGVySWQoKSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBjb3N0ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdGx2LlNldEFjdGl2ZVJvdXRlcnMoMCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtUm91dGVyc1tpXS5Jc0FsbG9jYXRlZCgpKQorICAgICAgICB7CisgICAgICAgICAgICB0bHYuU2V0QWN0aXZlUm91dGVycyh0bHYuR2V0QWN0aXZlUm91dGVycygpICsgMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVJvdXRlcnNbaV0uR2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQgfHwgaSA9PSBtUm91dGVySWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbGlua1F1YWxpdHkgPSBtUm91dGVyc1tpXS5HZXRMaW5rSW5mbygpLkdldExpbmtRdWFsaXR5KG5vaXNlRmxvb3IpOworCisgICAgICAgIGlmIChsaW5rUXVhbGl0eSA+IG1Sb3V0ZXJzW2ldLkdldExpbmtRdWFsaXR5T3V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxpbmtRdWFsaXR5ID0gbVJvdXRlcnNbaV0uR2V0TGlua1F1YWxpdHlPdXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAobGlua1F1YWxpdHkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgdGx2LlNldExpbmtRdWFsaXR5MSh0bHYuR2V0TGlua1F1YWxpdHkxKCkgKyAxKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHRsdi5TZXRMaW5rUXVhbGl0eTIodGx2LkdldExpbmtRdWFsaXR5MigpICsgMSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICB0bHYuU2V0TGlua1F1YWxpdHkzKHRsdi5HZXRMaW5rUXVhbGl0eTMoKSArIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0bHYuU2V0TGVhZGVyQ29zdCgoY29zdCA8IGtNYXhSb3V0ZUNvc3QpID8gY29zdCA6IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGtNYXhSb3V0ZUNvc3QpKTsKKyAgICB0bHYuU2V0SWRTZXF1ZW5jZShtUm91dGVySWRTZXF1ZW5jZSk7CisgICAgdGx2LlNldFNlZEJ1ZmZlclNpemUoMTI4MCk7CisgICAgdGx2LlNldFNlZERhdGFncmFtQ291bnQoMSk7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpBcHBlbmRDb25uZWN0aXZpdHkoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBDb25uZWN0aXZpdHlUbHYgdGx2OworCisgICAgdGx2LkluaXQoKTsKKyAgICBGaWxsQ29ubmVjdGl2aXR5VGx2KHRsdik7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6QXBwZW5kQ2hpbGRBZGRyZXNzZXMoTWVzc2FnZSAmYU1lc3NhZ2UsIENoaWxkICZhQ2hpbGQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yOworICAgIFRsdiB0bHY7CisgICAgQWRkcmVzc1JlZ2lzdHJhdGlvbkVudHJ5IGVudHJ5OworICAgIExvd3Bhbjo6Q29udGV4dCBjb250ZXh0OworICAgIHVpbnQ4X3QgbGVuZ3RoID0gMDsKKyAgICB1aW50OF90IHN0YXJ0T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpOworCisgICAgdGx2LlNldFR5cGUoVGx2OjprQWRkcmVzc1JlZ2lzdHJhdGlvbik7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSkpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgQ2hpbGQ6OmtNYXhJcDZBZGRyZXNzUGVyQ2hpbGQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhQ2hpbGQuR2V0SXA2QWRkcmVzcyhpKS5Jc1Vuc3BlY2lmaWVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0Q29udGV4dChhQ2hpbGQuR2V0SXA2QWRkcmVzcyhpKSwgY29udGV4dCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY29tcHJlc3NlZCBlbnRyeQorICAgICAgICAgICAgZW50cnkuU2V0Q29udGV4dElkKGNvbnRleHQubUNvbnRleHRJZCk7CisgICAgICAgICAgICBlbnRyeS5TZXRJaWQoYUNoaWxkLkdldElwNkFkZHJlc3MoaSkuR2V0SWlkKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdW5jb21wcmVzc2VkIGVudHJ5CisgICAgICAgICAgICBlbnRyeS5TZXRVbmNvbXByZXNzZWQoKTsKKyAgICAgICAgICAgIGVudHJ5LlNldElwNkFkZHJlc3MoYUNoaWxkLkdldElwNkFkZHJlc3MoaSkpOworICAgICAgICB9CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCgmZW50cnksIGVudHJ5LkdldExlbmd0aCgpKSk7CisgICAgICAgIGxlbmd0aCArPSBlbnRyeS5HZXRMZW5ndGgoKTsKKyAgICB9CisKKyAgICB0bHYuU2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgYU1lc3NhZ2UuV3JpdGUoc3RhcnRPZmZzZXQsIHNpemVvZih0bHYpLCAmdGx2KTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpGaWxsUm91dGVUbHYoUm91dGVUbHYgJnRsdikKK3sKKworICAgIHVpbnQ4X3Qgcm91dGVDb3VudCA9IDA7CisgICAgdWludDhfdCBsaW5rQ29zdDsKKyAgICB1aW50OF90IGNvc3Q7CisKKyAgICB0bHYuU2V0Um91dGVySWRTZXF1ZW5jZShtUm91dGVySWRTZXF1ZW5jZSk7CisgICAgdGx2LkNsZWFyUm91dGVySWRNYXNrKCk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uSXNBbGxvY2F0ZWQoKSA9PSBmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICB0bHYuU2V0Um91dGVySWQoaSk7CisKKyAgICAgICAgaWYgKGkgPT0gbVJvdXRlcklkKQorICAgICAgICB7CisgICAgICAgICAgICB0bHYuU2V0TGlua1F1YWxpdHlJbihyb3V0ZUNvdW50LCAwKTsKKyAgICAgICAgICAgIHRsdi5TZXRMaW5rUXVhbGl0eU91dChyb3V0ZUNvdW50LCAwKTsKKyAgICAgICAgICAgIHRsdi5TZXRSb3V0ZUNvc3Qocm91dGVDb3VudCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBsaW5rQ29zdCA9IEdldExpbmtDb3N0KGkpOworCisgICAgICAgICAgICBpZiAoIUlzUm91dGVySWRWYWxpZChtUm91dGVyc1tpXS5HZXROZXh0SG9wKCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvc3QgPSBsaW5rQ29zdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb3N0ID0gbVJvdXRlcnNbaV0uR2V0Q29zdCgpICsgR2V0TGlua0Nvc3QobVJvdXRlcnNbaV0uR2V0TmV4dEhvcCgpKTsKKworICAgICAgICAgICAgICAgIGlmIChsaW5rQ29zdCA8IGNvc3QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb3N0ID0gbGlua0Nvc3Q7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29zdCA+PSBrTWF4Um91dGVDb3N0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvc3QgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0bHYuU2V0Um91dGVDb3N0KHJvdXRlQ291bnQsIGNvc3QpOworICAgICAgICAgICAgdGx2LlNldExpbmtRdWFsaXR5T3V0KHJvdXRlQ291bnQsIG1Sb3V0ZXJzW2ldLkdldExpbmtRdWFsaXR5T3V0KCkpOworCisgICAgICAgICAgICBpZiAoaXNBc3NpZ25MaW5rUXVhbGl0eSAmJgorICAgICAgICAgICAgICAgIChtZW1jbXAoJm1Sb3V0ZXJzW2ldLkdldEV4dEFkZHJlc3MoKSwgbUFkZHI2NC5tOCwgT1RfRVhUX0FERFJFU1NfU0laRSkgPT0gMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGx2LlNldExpbmtRdWFsaXR5SW4ocm91dGVDb3VudCwgbUFzc2lnbkxpbmtRdWFsaXR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0bHYuU2V0TGlua1F1YWxpdHlJbihyb3V0ZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzW2ldLkdldExpbmtJbmZvKCkuR2V0TGlua1F1YWxpdHkoR2V0TmV0aWYoKS5HZXRNYWMoKS5HZXROb2lzZUZsb29yKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJvdXRlQ291bnQrKzsKKyAgICB9CisKKyAgICB0bHYuU2V0Um91dGVEYXRhTGVuZ3RoKHJvdXRlQ291bnQpOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6QXBwZW5kUm91dGUoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBSb3V0ZVRsdiB0bHY7CisgICAgdGx2LkluaXQoKTsKKyAgICBGaWxsUm91dGVUbHYodGx2KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZihUbHYpICsgdGx2LkdldExlbmd0aCgpKSk7CitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkFwcGVuZEFjdGl2ZURhdGFzZXQoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgcmV0dXJuIEdldE5ldGlmKCkuR2V0QWN0aXZlRGF0YXNldCgpLkFwcGVuZE1sZURhdGFzZXRUbHYoYU1lc3NhZ2UpOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6QXBwZW5kUGVuZGluZ0RhdGFzZXQoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgcmV0dXJuIEdldE5ldGlmKCkuR2V0UGVuZGluZ0RhdGFzZXQoKS5BcHBlbmRNbGVEYXRhc2V0VGx2KGFNZXNzYWdlKTsKK30KKworYm9vbCBNbGVSb3V0ZXI6Okhhc01pbkRvd25ncmFkZU5laWdoYm9yUm91dGVycyh2b2lkKQoreworICAgIHJldHVybiBHZXRNaW5Eb3duZ3JhZGVOZWlnaGJvclJvdXRlcnMoKSA+PSBrTWluRG93bmdyYWRlTmVpZ2hib3JzOworfQorCitib29sIE1sZVJvdXRlcjo6SGFzT25lTmVpZ2hib3J3aXRoQ29tcGFyYWJsZUNvbm5lY3Rpdml0eShjb25zdCBSb3V0ZVRsdiAmYVJvdXRlLCB1aW50OF90IGFSb3V0ZXJJZCkKK3sKKyAgICBib29sIHJ2YWwgPSB0cnVlOworICAgIHVpbnQ4X3QgbG9jYWxMaW5rUXVhbGl0eSA9IDA7CisgICAgdWludDhfdCBwZWVyTGlua1F1YWxpdHkgPSAwOworICAgIHVpbnQ4X3Qgcm91dGVyQ291bnQgPSAwOworCisgICAgLy8gcHJvY2VzcyBsb2NhbCBuZWlnaGJvciByb3V0ZXJzCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGkgPT0gbVJvdXRlcklkKQorICAgICAgICB7CisgICAgICAgICAgICByb3V0ZXJDb3VudCsrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBjaGVjayBpZiBuZWlnaGJvciBpcyB2YWxpZAorICAgICAgICBpZiAobVJvdXRlcnNbaV0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGlmIG5laWdoYm9yIGlzIGp1c3QgcGVlcgorICAgICAgICAgICAgaWYgKGkgPT0gYVJvdXRlcklkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJvdXRlckNvdW50Kys7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvY2FsTGlua1F1YWxpdHkgPSBtUm91dGVyc1tpXS5HZXRMaW5rSW5mbygpLkdldExpbmtRdWFsaXR5KEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpKTsKKworICAgICAgICAgICAgaWYgKGxvY2FsTGlua1F1YWxpdHkgPiBtUm91dGVyc1tpXS5HZXRMaW5rUXVhbGl0eU91dCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvY2FsTGlua1F1YWxpdHkgPSBtUm91dGVyc1tpXS5HZXRMaW5rUXVhbGl0eU91dCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobG9jYWxMaW5rUXVhbGl0eSA+PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoaXMgbmVpZ2hib3Igcm91dGVyIGlzIGluIHBlZXIgUm91dGU2NCBUTFYKKyAgICAgICAgICAgICAgICBpZiAoYVJvdXRlLklzUm91dGVySWRTZXQoaSkgPT0gZmFsc2UpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBwZWVyJ3MgdHdvLXdheSBsaW5rIHF1YWxpdHkgdG8gdGhpcyByb3V0ZXIKKyAgICAgICAgICAgICAgICBwZWVyTGlua1F1YWxpdHkgPSBhUm91dGUuR2V0TGlua1F1YWxpdHlJbihyb3V0ZXJDb3VudCk7CisKKyAgICAgICAgICAgICAgICBpZiAocGVlckxpbmtRdWFsaXR5ID4gYVJvdXRlLkdldExpbmtRdWFsaXR5T3V0KHJvdXRlckNvdW50KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBlZXJMaW5rUXVhbGl0eSA9IGFSb3V0ZS5HZXRMaW5rUXVhbGl0eU91dChyb3V0ZXJDb3VudCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gY29tcGFyZSBsb2NhbCBsaW5rIHF1YWxpdHkgdG8gdGhpcyByb3V0ZXIgd2l0aCBwZWVyJ3MKKyAgICAgICAgICAgICAgICBpZiAocGVlckxpbmtRdWFsaXR5ID49IGxvY2FsTGlua1F1YWxpdHkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByb3V0ZXJDb3VudCsrOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcm91dGVyQ291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKwordm9pZCBNbGVSb3V0ZXI6OlNldENoaWxkU3RhdGVUb1ZhbGlkKENoaWxkICphQ2hpbGQpCit7CisgICAgVmVyaWZ5T3JFeGl0KGFDaGlsZC0+R2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpOworCisgICAgYUNoaWxkLT5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlVmFsaWQpOworICAgIEdldE5ldGlmKCkuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfQ0hJTERfQURERUQpOworICAgIFN0b3JlQ2hpbGQoYUNoaWxkLT5HZXRSbG9jMTYoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitib29sIE1sZVJvdXRlcjo6SGFzQ2hpbGRyZW4odm9pZCkKK3sKKyAgICBib29sIGhhc0NoaWxkcmVuID0gZmFsc2U7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNoaWxkcmVuW2ldLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVJlc3RvcmVkIHx8CisgICAgICAgICAgICBtQ2hpbGRyZW5baV0uR2V0U3RhdGUoKSA+PSBOZWlnaGJvcjo6a1N0YXRlQ2hpbGRJZFJlcXVlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coaGFzQ2hpbGRyZW4gPSB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gaGFzQ2hpbGRyZW47Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpSZW1vdmVDaGlsZHJlbih2b2lkKQoreworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICB7CisgICAgICAgIHN3aXRjaCAobUNoaWxkcmVuW2ldLkdldFN0YXRlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQ6CisgICAgICAgICAgICBHZXROZXRpZigpLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX1JFTU9WRUQpOworCisgICAgICAgIC8vIEZhbGwtdGhyb3VnaCB0byBuZXh0IGNhc2UKKworICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVDaGlsZFVwZGF0ZVJlcXVlc3Q6CisgICAgICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZVJlc3RvcmVkOgorICAgICAgICAgICAgUmVtb3ZlU3RvcmVkQ2hpbGQobUNoaWxkcmVuW2ldLkdldFJsb2MxNigpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG1DaGlsZHJlbltpXS5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCk7CisgICAgfQorfQorCitib29sIE1sZVJvdXRlcjo6SGFzU21hbGxOdW1iZXJPZkNoaWxkcmVuKHZvaWQpCit7CisgICAgdWludDhfdCBudW1DaGlsZHJlbiA9IDA7CisgICAgdWludDhfdCByb3V0ZXJDb3VudCA9IEdldEFjdGl2ZVJvdXRlckNvdW50KCk7CisKKyAgICBWZXJpZnlPckV4aXQocm91dGVyQ291bnQgPiBtUm91dGVyRG93bmdyYWRlVGhyZXNob2xkKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ2hpbGRyZW5baV0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG51bUNoaWxkcmVuKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVtQ2hpbGRyZW4gPCAocm91dGVyQ291bnQgLSBtUm91dGVyRG93bmdyYWRlVGhyZXNob2xkKSAqIDM7CisKK2V4aXQ6CisgICAgcmV0dXJuIGZhbHNlOworfQorCit1aW50OF90IE1sZVJvdXRlcjo6R2V0TWluRG93bmdyYWRlTmVpZ2hib3JSb3V0ZXJzKHZvaWQpCit7CisgICAgdWludDhfdCBsaW5rUXVhbGl0eTsKKyAgICB1aW50OF90IHJvdXRlckNvdW50ID0gMDsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtUm91dGVyc1tpXS5HZXRTdGF0ZSgpICE9IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBsaW5rUXVhbGl0eSA9IG1Sb3V0ZXJzW2ldLkdldExpbmtJbmZvKCkuR2V0TGlua1F1YWxpdHkoR2V0TmV0aWYoKS5HZXRNYWMoKS5HZXROb2lzZUZsb29yKCkpOworCisgICAgICAgIGlmIChsaW5rUXVhbGl0eSA+IG1Sb3V0ZXJzW2ldLkdldExpbmtRdWFsaXR5T3V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxpbmtRdWFsaXR5ID0gbVJvdXRlcnNbaV0uR2V0TGlua1F1YWxpdHlPdXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsaW5rUXVhbGl0eSA+PSAyKQorICAgICAgICB7CisgICAgICAgICAgICByb3V0ZXJDb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJvdXRlckNvdW50OworfQorCitpbnQ4X3QgTWxlUm91dGVyOjpHZXRBc3NpZ25QYXJlbnRQcmlvcml0eSh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtUGFyZW50UHJpb3JpdHk7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpTZXRBc3NpZ25QYXJlbnRQcmlvcml0eShpbnQ4X3QgYVBhcmVudFByaW9yaXR5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFQYXJlbnRQcmlvcml0eSA8PSBrUGFyZW50UHJpb3JpdHlIaWdoICYmCisgICAgICAgICAgICAgICAgIGFQYXJlbnRQcmlvcml0eSA+PSBrUGFyZW50UHJpb3JpdHlVbnNwZWNpZmllZCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgbVBhcmVudFByaW9yaXR5ID0gYVBhcmVudFByaW9yaXR5OworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworTWxlUm91dGVyICZNbGVSb3V0ZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIE1sZVJvdXRlciAmbWxlID0gKnN0YXRpY19jYXN0PE1sZVJvdXRlciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBNbGVSb3V0ZXIgJm1sZSA9IG90R2V0VGhyZWFkTmV0aWYoKS5HZXRNbGUoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIG1sZTsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkdldE1heENoaWxkVGltZW91dCh1aW50MzJfdCAmYVRpbWVvdXQpIGNvbnN0Cit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKworICAgIFZlcmlmeU9yRXhpdChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIgfHwgbVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5HZXRTdGF0ZSgpICE9IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobUNoaWxkcmVuW2ldLklzRnVsbFRocmVhZERldmljZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtQ2hpbGRyZW5baV0uR2V0VGltZW91dCgpID4gYVRpbWVvdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFUaW1lb3V0ID0gbUNoaWxkcmVuW2ldLkdldFRpbWVvdXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit9ICAvLyBuYW1lc3BhY2UgTWxlCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRlRECisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9tbGVfcm91dGVyLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9tbGVfcm91dGVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGI4YmVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL21sZV9yb3V0ZXIuaHBwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBPUEVOVEhSRUFEX01URAorI2luY2x1ZGUgIm1sZV9yb3V0ZXJfbXRkLmhwcCIKKyNlbGlmIE9QRU5USFJFQURfRlRECisjaW5jbHVkZSAibWxlX3JvdXRlcl9mdGQuaHBwIgorI2Vsc2UKKyNlcnJvciAiUGxlYXNlIGRlZmluZSBPUEVOVEhSRUFEX01URD0xIG9yIE9QRU5USFJFQURfRlREPTEiCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL21sZV9yb3V0ZXJfZnRkLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9tbGVfcm91dGVyX2Z0ZC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhN2ZhZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9tbGVfcm91dGVyX2Z0ZC5ocHAKQEAgLTAsMCArMSw4NDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBNTEUgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSB0aGUgVGhyZWFkIFJvdXRlciBhbmQgTGVhZGVyIHJvbGVzLgorICovCisKKyNpZm5kZWYgTUxFX1JPVVRFUl9IUFBfCisjZGVmaW5lIE1MRV9ST1VURVJfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdHJpY2tsZV90aW1lci5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgIm5ldC9pY21wNi5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGUuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdG9wb2xvZ3kuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1sZSB7CisKK2NsYXNzIEFkZHJlc3NSZXNvbHZlcjsKK2NsYXNzIE1lc2hGb3J3YXJkZXI7CitjbGFzcyBOZXR3b3JrRGF0YUxlYWRlcjsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW1sZS1yb3V0ZXIKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIE1MRSBmdW5jdGlvbmFsaXR5IHJlcXVpcmVkIGJ5IHRoZSBUaHJlYWQgUm91dGVyIGFuZCBMZWFkZXIgcm9sZXMuCisgKgorICogQHsKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBNTEUgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSB0aGUgVGhyZWFkIFJvdXRlciBhbmQgTGVhZGVyIHJvbGVzLgorICoKKyAqLworY2xhc3MgTWxlUm91dGVyOiBwdWJsaWMgTWxlCit7CisgICAgZnJpZW5kIGNsYXNzIE1sZTsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGV4cGxpY2l0IE1sZVJvdXRlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgUm91dGVyIFJvbGUgaXMgZW5hYmxlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgdHJ1ZSAgIElmIHRoZSBSb3V0ZXIgUm9sZSBpcyBlbmFibGVkLgorICAgICAqIEByZXR2YWwgZmFsc2UgIElmIHRoZSBSb3V0ZXIgUm9sZSBpcyBub3QgZW5hYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNSb3V0ZXJSb2xlRW5hYmxlZCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgd2hldGhlciBvciBub3QgdGhlIFJvdXRlciBSb2xlIGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBJZiBAcCBhRW5hYmxlIGlzIGZhbHNlIGFuZCB0aGUgZGV2aWNlIGlzIGN1cnJlbnRseSBvcGVyYXRpbmcgYXMgYSByb3V0ZXIsIHRoaXMgY2FsbCB3aWxsIGNhdXNlIHRoZSBkZXZpY2UgdG8KKyAgICAgKiBkZXRhY2ggYW5kIGF0dGVtcHQgdG8gcmVhdHRhY2ggYXMgYSBjaGlsZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFbmFibGVkICBUUlVFIHRvIGVuYWJsZSB0aGUgUm91dGVyIFJvbGUsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Um91dGVyUm9sZUVuYWJsZWQoYm9vbCBhRW5hYmxlZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBhIG5vZGUgaXMgdGhlIG9ubHkgcm91dGVyIG9uIHRoZSBuZXR3b3JrLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSXQgaXMgdGhlIG9ubHkgcm91dGVyIGluIHRoZSBuZXR3b3JrLgorICAgICAqIEByZXR2YWwgRkFMU0UgIEl0IGlzIGEgY2hpbGQgb3IgaXMgbm90IGEgc2luZ2xlIHJvdXRlciBpbiB0aGUgbmV0d29yay4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNTaW5nbGV0b24odm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYW4gQWRkcmVzcyBTb2xpY2l0IHJlcXVlc3QgZm9yIGEgUm91dGVyIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVN0YXR1cyAgVGhlIHJlYXNvbiBmb3IgcmVxdWVzdGluZyBhIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBhbiBBZGRyZXNzIFNvbGljaXQgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9DQVBBQkxFICAgIERldmljZSBpcyBub3QgY2FwYWJsZSBvZiBiZWNvbWluZyBhIHJvdXRlcgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhyZWFkIGlzIG5vdCBlbmFibGVkCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEJlY29tZVJvdXRlcihUaHJlYWRTdGF0dXNUbHY6OlN0YXR1cyBhU3RhdHVzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNhdXNlcyB0aGUgVGhyZWFkIGludGVyZmFjZSB0byBiZWNvbWUgYSBMZWFkZXIgYW5kIHN0YXJ0IGEgbmV3IHBhcnRpdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGJlY29tZSBhIExlYWRlciBhbmQgc3RhcnRlZCBhIG5ldyBwYXJ0aXRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfQ0FQQUJMRSAgICBEZXZpY2UgaXMgbm90IGNhcGFibGUgb2YgYmVjb21pbmcgYSBsZWFkZXIKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIFRocmVhZCBpcyBub3QgZW5hYmxlZAorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBCZWNvbWVMZWFkZXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWN0aXZlIHJvdXRlcnMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGFjdGl2ZSByb3V0ZXJzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRBY3RpdmVSb3V0ZXJDb3VudCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCBSb3V0ZXIgSUQgU2VxdWVuY2UgdXBkYXRlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCBSb3V0ZXIgSUQgU2VxdWVuY2UgdXBkYXRlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0TGVhZGVyQWdlKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGVhZGVyIFdlaWdodGluZyB2YWx1ZSBmb3IgdGhpcyBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExlYWRlciBXZWlnaHRpbmcgdmFsdWUgZm9yIHRoaXMgVGhyZWFkIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVhZGVyV2VpZ2h0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MZWFkZXJXZWlnaHQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIExlYWRlciBXZWlnaHRpbmcgdmFsdWUgZm9yIHRoaXMgVGhyZWFkIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFXZWlnaHQgIFRoZSBMZWFkZXIgV2VpZ2h0aW5nIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMZWFkZXJXZWlnaHQodWludDhfdCBhV2VpZ2h0KSB7IG1MZWFkZXJXZWlnaHQgPSBhV2VpZ2h0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXhlZCBQYXJ0aXRpb24gSWQgb2YgVGhyZWFkIG5ldHdvcmsgcGFydGl0aW9uIGZvciBjZXJ0aWZpY2F0aW9uIHRlc3RpbmcuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUGFydGl0aW9uIElkIGZvciB0aGlzIFRocmVhZCBuZXR3b3JrIHBhcnRpdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldExlYWRlclBhcnRpdGlvbklkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1GaXhlZExlYWRlclBhcnRpdGlvbklkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBmaXhlZCBQYXJ0aXRpb24gSWQgZm9yIFRocmVhZCBuZXR3b3JrIHBhcnRpdGlvbiBmb3IgY2VydGlmaWNhdGlvbiB0ZXN0aW5nLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBhcnRpdGlvbklkICBUaGUgTGVhZGVyIFBhcnRpdGlvbiBJZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGVhZGVyUGFydGl0aW9uSWQodWludDMyX3QgYVBhcnRpdGlvbklkKSB7IG1GaXhlZExlYWRlclBhcnRpdGlvbklkID0gYVBhcnRpdGlvbklkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBwcmVmZXJyZWQgUm91dGVyIElkLiBVcG9uIGJlY29taW5nIGEgcm91dGVyL2xlYWRlciB0aGUgbm9kZQorICAgICAqIGF0dGVtcHRzIHRvIHVzZSB0aGlzIFJvdXRlciBJZC4gSWYgdGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQgaXMgbm90IHNldCBvciBpZiBpdAorICAgICAqIGNhbiBub3QgYmUgdXNlZCwgYSByYW5kb21seSBnZW5lcmF0ZWQgcm91dGVyIElkIGlzIHBpY2tlZC4KKyAgICAgKiBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgd2hlbiBoZSBkZXZpY2Ugcm9sZSBpcyBkZXRhY2hlZCBvciBkaXNhYmxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgICAgICAgICAgICBUaGUgcHJlZmVycmVkIFJvdXRlciBJZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBwcmVmZXJyZWQgUm91dGVyIElkLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSBDb3VsZCBub3Qgc2V0IChyb2xlIGlzIG90aGVyIHRoYW4gZGV0YWNoZWQgYW5kIGRpc2FibGVkKQorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRQcmVmZXJyZWRSb3V0ZXJJZCh1aW50OF90IGFSb3V0ZXJJZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBQYXJ0aXRpb24gSWQgd2hpY2ggdGhlIGRldmljZSBqb2luZWQgc3VjY2Vzc2Z1bGx5IG9uY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRQcmV2aW91c1BhcnRpdGlvbklkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1QcmV2aW91c1BhcnRpdGlvbklkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQYXJ0aXRpb24gSWQgd2hpY2ggdGhlIGRldmljZSBqb2lucyBzdWNjZXNzZnVsbHkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFydGl0aW9uSWQgICBUaGUgUGFydGl0aW9uIElkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQcmV2aW91c1BhcnRpdGlvbklkKHVpbnQzMl90IGFQYXJ0aXRpb25JZCkgeyBtUHJldmlvdXNQYXJ0aXRpb25JZCA9IGFQYXJ0aXRpb25JZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUm91dGVyIElkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICAgVGhlIFJvdXRlciBJZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Um91dGVySWQodWludDhfdCBhUm91dGVySWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCBob3AgdG93YXJkcyBhbiBSTE9DMTYgZGVzdGluYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRGVzdGluYXRpb24gIFRoZSBSTE9DMTYgb2YgdGhlIGRlc3RpbmF0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBSTE9DMTYgb2YgdGhlIG5leHQgaG9wIGlmIGEgcm91dGUgaXMga25vd24sIGtJbnZhbGlkUmxvYzE2IG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldE5leHRIb3AodWludDE2X3QgYURlc3RpbmF0aW9uKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE5FVFdPUktfSURfVElNRU9VVCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBORVRXT1JLX0lEX1RJTUVPVVQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldE5ldHdvcmtJZFRpbWVvdXQodm9pZCkgY29uc3QgeyByZXR1cm4gbU5ldHdvcmtJZFRpbWVvdXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE5FVFdPUktfSURfVElNRU9VVCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaW1lb3V0ICBUaGUgTkVUV09SS19JRF9USU1FT1VUIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXR3b3JrSWRUaW1lb3V0KHVpbnQ4X3QgYVRpbWVvdXQpIHsgbU5ldHdvcmtJZFRpbWVvdXQgPSBhVGltZW91dDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcm91dGUgY29zdCB0byBhIFJMT0MxNi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgb2YgdGhlIGRlc3RpbmF0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHJvdXRlIGNvc3QgdG8gYSBSTE9DMTYuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFJvdXRlQ29zdCh1aW50MTZfdCBhUmxvYzE2KSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGxpbmsgY29zdCB0byB0aGUgZ2l2ZW4gUm91dGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgUm91dGVyIElELgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGxpbmsgY29zdCB0byB0aGUgUm91dGVyLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rQ29zdCh1aW50OF90IGFSb3V0ZXJJZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBtaW5pbXVtIGNvc3QgdG8gdGhlIGdpdmVuIHJvdXRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBzaG9ydCBhZGRyZXNzIG9mIHRoZSBnaXZlbiByb3V0ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbWluaW11bSBjb3N0IHRvIHRoZSBnaXZlbiByb3V0ZXIgKHZpYSBkaXJlY3QgbGluayBvciBmb3J3YXJkaW5nKS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Q29zdCh1aW50MTZfdCBhUmxvYzE2KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIodm9pZCkgY29uc3QgeyByZXR1cm4gbVJvdXRlclNlbGVjdGlvbkppdHRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUk9VVEVSX1NFTEVDVElPTl9KSVRURVIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUk9VVEVSX1NFTEVDVElPTl9KSVRURVIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFJvdXRlclNlbGVjdGlvbkppdHRlcih1aW50OF90IGFSb3V0ZXJKaXR0ZXIpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBSb3V0ZXIgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBSb3V0ZXIgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFJvdXRlcklkU2VxdWVuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbVJvdXRlcklkU2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBST1VURVJfVVBHUkFERV9USFJFU0hPTEQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQodm9pZCkgY29uc3QgeyByZXR1cm4gbVJvdXRlclVwZ3JhZGVUaHJlc2hvbGQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBST1VURVJfVVBHUkFERV9USFJFU0hPTEQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQodWludDhfdCBhVGhyZXNob2xkKSB7IG1Sb3V0ZXJVcGdyYWRlVGhyZXNob2xkID0gYVRocmVzaG9sZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFJvdXRlckRvd25ncmFkZVRocmVzaG9sZCh2b2lkKSBjb25zdCB7IHJldHVybiBtUm91dGVyRG93bmdyYWRlVGhyZXNob2xkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKHVpbnQ4X3QgYVRocmVzaG9sZCkgeyBtUm91dGVyRG93bmdyYWRlVGhyZXNob2xkID0gYVRocmVzaG9sZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVsZWFzZSBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgVGhlIFJvdXRlciBJRCB0byByZWxlYXNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgcmVsZWFzZWQgdGhlIFJvdXRlciBJRC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIFRoZSBSb3V0ZXIgSUQgd2FzIG5vdCBhbGxvY2F0ZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbGVhc2VSb3V0ZXJJZCh1aW50OF90IGFSb3V0ZXJJZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgbGluayB0byBhIG5laWdoYm9yLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIFRoZSBsaW5rIGFkZHJlc3Mgb2YgdGhlIG5laWdoYm9yLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBuZWlnaGJvci4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgQ291bGQgbm90IGZpbmQgdGhlIG5laWdoYm9yLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZW1vdmVOZWlnaGJvcihjb25zdCBNYWM6OkFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYSBsaW5rIHRvIGEgbmVpZ2hib3IuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTmVpZ2hib3IgIEEgcmVmZXJlbmNlIHRvIHRoZSBuZWlnaGJvciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgbmVpZ2hib3IuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZU5laWdoYm9yKE5laWdoYm9yICZhTmVpZ2hib3IpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBDaGlsZCBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgVGhlIGFkZHJlc3Mgb2YgdGhlIENoaWxkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBDaGlsZCBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBDaGlsZCAqR2V0Q2hpbGQodWludDE2X3QgYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBDaGlsZCBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIENoaWxkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBDaGlsZCBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBDaGlsZCAqR2V0Q2hpbGQoY29uc3QgTWFjOjpFeHRBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIENoaWxkIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgYWRkcmVzcyBvZiB0aGUgQ2hpbGQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIENoaWxkIGNvcnJlc3BvbmRpbmcgdG8gQHAgYUFkZHJlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgQ2hpbGQgKkdldENoaWxkKGNvbnN0IE1hYzo6QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGNoaWxkIGluZGV4IGZvciB0aGUgQ2hpbGQgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoaWxkICBBIHJlZmVyZW5jZSB0byB0aGUgQ2hpbGQgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGluZGV4IGZvciB0aGUgQ2hpbGQgY29ycmVzcG9uZGluZyB0byBAcCBhQ2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldENoaWxkSW5kZXgoY29uc3QgQ2hpbGQgJmFDaGlsZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIENoaWxkIGFycmF5LgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFOdW1DaGlsZHJlbiAgQSBwb2ludGVyIHRvIG91dHB1dCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBDaGlsZCBhcnJheS4KKyAgICAgKgorICAgICAqLworICAgIENoaWxkICpHZXRDaGlsZHJlbih1aW50OF90ICphTnVtQ2hpbGRyZW4pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbWF4IGNoaWxkcmVuIGFsbG93ZWQgdmFsdWUgZm9yIHRoaXMgVGhyZWFkIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNYXhDaGlsZHJlbiAgVGhlIG1heCBjaGlsZHJlbiBhbGxvd2VkIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCAgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgbWF4LgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgIElmIEBwIGFNYXhDaGlsZHJlbiBpcyBub3QgaW4gdGhlIHJhbmdlIFsxLCBrTWF4Q2hpbGRyZW5dLgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIElmIE1MRSBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldE1heEFsbG93ZWRDaGlsZHJlbih1aW50OF90IGFNYXhDaGlsZHJlbik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyBjaGlsZHJlbiBpbmZvcm1hdGlvbiBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgcmVzdG9yZWQgY2hpbGRyZW4gaW5mb3JtYXRpb24uCisgICAgICogQHJldHZhbCAgT1RfRVJST1JfRkFJTEVEICAgVGhlIHNhdmVkIGNoaWxkIGluZm8gaW4gbm9uLXZvbGF0aWxlIG1lbW9yeSBpcyBpbnZhbGlkLgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX05PX0JVRlMgIE1vcmUgY2hpbGRyZW4gaW4gc2V0dGluZ3MgdGhhbiBtYXggY2hpbGRyZW4uCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlc3RvcmVDaGlsZHJlbih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZSBhIHN0b3JlZCBjaGlsZCBpbmZvcm1hdGlvbiBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hpbGRSbG9jMTYgICBUaGUgY2hpbGQgUkxPQzE2IHRvIHJlbW92ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgIFN1Y2Nlc3NmdWxseSByZW1vdmUgY2hpbGQuCisgICAgICogQHJldHZhbCAgT1RfRVJST1JfTk9UX0ZPVU5EICAgVGhlcmUgaXMgbm8gc3BlY2lmaWVkIGNoaWxkIHN0b3JlZCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZW1vdmVTdG9yZWRDaGlsZCh1aW50MTZfdCBhQ2hpbGRSbG9jMTYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RvcmUgYSBjaGlsZCBpbmZvcm1hdGlvbiBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hpbGRSbG9jMTYgICBUaGUgY2hpbGQgUkxPQzE2IHRvIHN0b3JlLgorICAgICAqCisgICAgICogQHJldHZhbCAgT1RfRVJST1JfTk9ORSAgICAgIFN1Y2Nlc3NmdWxseSBzdG9yZSBjaGlsZC4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT19CVUZTICAgSW5zdWZmaWNpZW50IGF2YWlsYWJsZSBidWZmZXJzIHRvIHN0b3JlIGNoaWxkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdG9yZUNoaWxkKHVpbnQxNl90IGFDaGlsZFJsb2MxNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWZyZXNoZXMgYWxsIHRoZSBzYXZlZCBjaGlsZHJlbiBpbmZvcm1hdGlvbiBpbiBub24tdm9sYXRpbGUgbWVtb3J5IGJ5IGZpcnN0IGVyYXNpbmcgYW55IHNhdmVkCisgICAgICogY2hpbGQgaW5mb3JtYXRpb24gaW4gbm9uLXZvbGF0aWxlIG1lbW9yeSBhbmQgdGhlbiBzYXZpbmcgYWxsIGNoaWxkcmVuIGluZm8uCisgICAgICoKKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IHJlZnJlc2hlZCBhbGwgY2hpbGRyZW4gaW5mbyBpbiBub24tdm9sYXRpbGUgbWVtb3J5CisgICAgICogQHJldHZhbCAgT1RfRVJST1JfTk9fQlVGUyAgIEluc3VmZmljaWVudCBhdmFpbGFibGUgYnVmZmVycyB0byBzdG9yZSBjaGlsZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVmcmVzaFN0b3JlZENoaWxkcmVuKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBOZWlnaGJvciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgVGhlIGFkZHJlc3Mgb2YgdGhlIE5laWdoYm9yLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBOZWlnaGJvciBjb3JyZXNwb25kaW5nIHRvIEBwIGFBZGRyZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIE5laWdoYm9yICpHZXROZWlnaGJvcih1aW50MTZfdCBhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIE5laWdoYm9yIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBUaGUgYWRkcmVzcyBvZiB0aGUgTmVpZ2hib3IuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIE5laWdoYm9yIGNvcnJlc3BvbmRpbmcgdG8gQHAgYUFkZHJlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgTmVpZ2hib3IgKkdldE5laWdoYm9yKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBOZWlnaGJvciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgVGhlIGFkZHJlc3Mgb2YgdGhlIE5laWdoYm9yLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBOZWlnaGJvciBjb3JyZXNwb25kaW5nIHRvIEBwIGFBZGRyZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIE5laWdoYm9yICpHZXROZWlnaGJvcihjb25zdCBNYWM6OkFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgTmVpZ2hib3Igb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIFRoZSBhZGRyZXNzIG9mIHRoZSBOZWlnaGJvci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgTmVpZ2hib3IgY29ycmVzcG9uZGluZyB0byBAcCBhQWRkcmVzcywgTlVMTCBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBOZWlnaGJvciAqR2V0TmVpZ2hib3IoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRhaW5zIGRpYWdub3N0aWMgaW5mb3JtYXRpb24gZm9yIGFuIGF0dGFjaGVkIGNoaWxkIGJ5IENoaWxkIElEIG9yIFJMT0MxNi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhQ2hpbGRJZCAgICBUaGUgQ2hpbGQgSUQgb3IgUkxPQzE2IGZvciBhbiBhdHRhY2hlZCBjaGlsZC4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYUNoaWxkSW5mbyAgVGhlIGNoaWxkIGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRDaGlsZEluZm9CeUlkKHVpbnQxNl90IGFDaGlsZElkLCBvdENoaWxkSW5mbyAmYUNoaWxkSW5mbyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRhaW5zIGRpYWdub3N0aWMgaW5mb3JtYXRpb24gZm9yIGFuIGF0dGFjaGVkIGNoaWxkIGJ5IHRoZSBpbnRlcm5hbCB0YWJsZSBpbmRleC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhQ2hpbGRJbmRleCAgVGhlIHRhYmxlIGluZGV4LgorICAgICAqIEBwYXJhbVtvdXRdICBhQ2hpbGRJbmZvICAgVGhlIGNoaWxkIGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRDaGlsZEluZm9CeUluZGV4KHVpbnQ4X3QgYUNoaWxkSW5kZXgsIG90Q2hpbGRJbmZvICZhQ2hpbGRJbmZvKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIG5leHQgbmVpZ2hib3IgaW5mb3JtYXRpb24uIEl0IGlzIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBlbnRyaWVzIG9mCisgICAgICogdGhlIG5laWdoYm9yIHRhYmxlLgorICAgICAqCisgICAgICogQHBhcmFtW2lub3V0XSAgYUl0ZXJhdG9yICBBIHJlZmVyZW5jZSB0byB0aGUgaXRlcmF0b3IgY29udGV4dC4gVG8gZ2V0IHRoZSBmaXJzdCBuZWlnaGJvciBlbnRyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIHNldCB0byBPVF9ORUlHSEJPUl9JTkZPX0lURVJBVE9SX0lOSVQuCisgICAgICogQHBhcmFtW291dF0gICAgYU5laWdoSW5mbyBUaGUgbmVpZ2hib3IgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGZvdW5kIHRoZSBuZXh0IG5laWdoYm9yIGVudHJ5IGluIHRhYmxlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICAgICBObyBzdWJzZXF1ZW50IG5laWdoYm9yIGVudHJ5IGV4aXN0cyBpbiB0aGUgdGFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldE5leHROZWlnaGJvckluZm8ob3ROZWlnaGJvckluZm9JdGVyYXRvciAmYUl0ZXJhdG9yLCBvdE5laWdoYm9ySW5mbyAmYU5laWdoSW5mbyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIFJvdXRlciBhcnJheS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhTnVtUm91dGVycyAgQSBwb2ludGVyIHRvIG91dHB1dCB0aGUgbnVtYmVyIG9mIHJvdXRlcnMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFJvdXRlciBhcnJheS4KKyAgICAgKgorICAgICAqLworICAgIFJvdXRlciAqR2V0Um91dGVycyh1aW50OF90ICphTnVtUm91dGVycyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIFJvdXRlciBlbnRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgVGhlIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byBhIFJvdXRlciBlbnRyeSBvciBOVUxMIGlmIEBwIGFSb3V0ZXJJZCBpcyBvdXQtb2YtcmFuZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBSb3V0ZXIgKkdldFJvdXRlcih1aW50OF90IGFSb3V0ZXJJZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIFJvdXRlciBlbnRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgVGhlIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byBhIFJvdXRlciBlbnRyeSBvciBOVUxMIGlmIEBwIGFSb3V0ZXJJZCBpcyBvdXQtb2YtcmFuZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBSb3V0ZXIgKkdldFJvdXRlcih1aW50OF90IGFSb3V0ZXJJZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRhaW5zIGRpYWdub3N0aWMgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gcm91dGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFSb3V0ZXJJZCAgICBUaGUgcm91dGVyIElEIG9yIFJMT0MxNiBmb3IgYSBnaXZlbiByb3V0ZXIuCisgICAgICogQHBhcmFtW291dF0gIGFSb3V0ZXJJbmZvICBUaGUgcm91dGVyIGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRSb3V0ZXJJbmZvKHVpbnQxNl90IGFSb3V0ZXJJZCwgb3RSb3V0ZXJJbmZvICZhUm91dGVySW5mbyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIFRocmVhZCBwYXJ0aXRpb24gYXR0cmlidXRlcyBhcmUgcHJlZmVycmVkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNpbmdsZXRvbkEgICBXaGV0aGVyIG9yIG5vdCB0aGUgVGhyZWFkIFBhcnRpdGlvbiBBIGhhcyBhIHNpbmdsZSByb3V0ZXIuCisgICAgICogQHBhcmFtW2luXSAgYUxlYWRlckRhdGFBICBBIHJlZmVyZW5jZSB0byBUaHJlYWQgUGFydGl0aW9uIEEncyBMZWFkZXIgRGF0YS4KKyAgICAgKiBAcGFyYW1baW5dICBhU2luZ2xldG9uQiAgIFdoZXRoZXIgb3Igbm90IHRoZSBUaHJlYWQgUGFydGl0aW9uIEIgaGFzIGEgc2luZ2xlIHJvdXRlci4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVhZGVyRGF0YUIgIEEgcmVmZXJlbmNlIHRvIFRocmVhZCBQYXJ0aXRpb24gQidzIExlYWRlciBEYXRhLgorICAgICAqCisgICAgICogQHJldHZhbCAxICAgSWYgcGFydGl0aW9uIEEgaXMgcHJlZmVycmVkLgorICAgICAqIEByZXR2YWwgMCAgIElmIHBhcnRpdGlvbiBBIGFuZCBCIGhhdmUgZXF1YWwgcHJlZmVyZW5jZS4KKyAgICAgKiBAcmV0dmFsIC0xICBJZiBwYXJ0aXRpb24gQiBpcyBwcmVmZXJyZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgaW50IENvbXBhcmVQYXJ0aXRpb25zKGJvb2wgYVNpbmdsZXRvbkEsIGNvbnN0IExlYWRlckRhdGFUbHYgJmFMZWFkZXJEYXRhQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNpbmdsZXRvbkIsIGNvbnN0IExlYWRlckRhdGFUbHYgJmFsZWFkZXJEYXRhQik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIGRlc3RpbmF0aW9uIGlzIHJlYWNoYWJsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNoU291cmNlICBUaGUgUkxPQzE2IG9mIHRoZSBzb3VyY2UuCisgICAgICogQHBhcmFtW2luXSAgYU1lc2hEZXN0ICAgIFRoZSBSTE9DMTYgb2YgdGhlIGRlc3RpbmF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFJcDZIZWFkZXIgICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBoZWFkZXIgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFRoZSBkZXN0aW5hdGlvbiBpcyByZWFjaGFibGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9EUk9QICBUaGUgZGVzdGluYXRpb24gaXMgbm90IHJlYWNoYWJsZSBhbmQgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRyb3BwZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIENoZWNrUmVhY2hhYmlsaXR5KHVpbnQxNl90IGFNZXNoU291cmNlLCB1aW50MTZfdCBhTWVzaERlc3QsIElwNjo6SGVhZGVyICZhSXA2SGVhZGVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlc29sdmVzIDItaG9wIHJvdXRpbmcgbG9vcHMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU291cmNlTWFjICAgVGhlIFJMT0MxNiBvZiB0aGUgcHJldmlvdXMgaG9wLgorICAgICAqIEBwYXJhbVtpbl0gIGFEZXN0UmxvYzE2ICBUaGUgUkxPQzE2IG9mIHRoZSBmaW5hbCBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVzb2x2ZVJvdXRpbmdMb29wcyh1aW50MTZfdCBhU291cmNlTWFjLCB1aW50MTZfdCBhRGVzdFJsb2MxNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgYSBnaXZlbiBSb3V0ZXIgSUQgaGFzIGNvcnJlY3QgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBSb3V0ZXIgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiBAcCBhUm91dGVySWQgaXMgaW4gY29ycmVjdCByYW5nZSBbMC4uNjJdLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIEBwIGFSb3V0ZXJJZCBpcyBub3QgYSB2YWxpZCBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgYm9vbCBJc1JvdXRlcklkVmFsaWQodWludDhfdCBhUm91dGVySWQpIHsgcmV0dXJuIGFSb3V0ZXJJZCA8PSBrTWF4Um91dGVySWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZpbGxzIGFuIENvbm5lY3Rpdml0eVRsdi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhVGx2ICBBIHJlZmVyZW5jZSB0byB0aGUgdGx2IHRvIGJlIGZpbGxlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgRmlsbENvbm5lY3Rpdml0eVRsdihDb25uZWN0aXZpdHlUbHYgJmFUbHYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZmlsbHMgYW4gUm91dGVUbHYuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYVRsdiAgQSByZWZlcmVuY2UgdG8gdGhlIHRsdiB0byBiZSBmaWxsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEZpbGxSb3V0ZVRsdihSb3V0ZVRsdiAmYVRsdik7CisKKyAgICAvKioKKyAgICAgICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGFuIE1MRSBDaGlsZCBVcGRhdGUgUmVxdWVzdCBtZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhlIHBhcmVudC4KKyAgICAgICoKKyAgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZ2VuZXJhdGVkIGFuIE1MRSBDaGlsZCBVcGRhdGUgUmVxdWVzdCBtZXNzYWdlLgorICAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIHRvIGdlbmVyYXRlIHRoZSBNTEUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgbWVzc2FnZS4KKyAgICAgICoKKyAgICAgICovCisgICAgb3RFcnJvciBTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KHZvaWQpIHsgcmV0dXJuIE1sZTo6U2VuZENoaWxkVXBkYXRlUmVxdWVzdCgpOyB9CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBzdGVlcmluZyBkYXRhIG91dCBvZiBiYW5kCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgVmFsdWUgdXNlZCB0byBzZXQgc3RlZXJpbmcgZGF0YQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgemVyb3MgY2xlYXJzIHN0ZWVyaW5nIGRhdGEKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIDB4RkZzIHNldHMgc3RlZXJpbmcgZGF0YSB0byAweEZGCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIEFueXRoaW5nIGVsc2UgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBibG9vbSBmaWx0ZXIKKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3RlZXJpbmcgZGF0YSB3YXMgc2V0CisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFN0ZWVyaW5nRGF0YShvdEV4dEFkZHJlc3MgKmFFeHRBZGRyZXNzKTsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBhc3NpZ25lZCBwYXJlbnQgcHJpb3JpdHkuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgYXNzaWduZWQgcGFyZW50IHByaW9yaXR5IHZhbHVlLCAtMiBtZWFucyBub3QgYXNzaWduZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQ4X3QgR2V0QXNzaWduUGFyZW50UHJpb3JpdHkodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBwYXJlbnQgcHJpb3JpdHkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFyZW50UHJpb3JpdHkgIFRoZSBwYXJlbnQgcHJpb3JpdHkgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIHBhcmVudCBwcmlvcml0eS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgIElmIHRoZSBwYXJlbnQgcHJpb3JpdHkgdmFsdWUgaXMgbm90IGFtb25nIDEsIDAsIC0xIGFuZCAtMi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0QXNzaWduUGFyZW50UHJpb3JpdHkoaW50OF90IGFQYXJlbnRQcmlvcml0eSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBsb25nZXN0IE1MRSBUaW1lb3V0IFRMViBmb3IgYWxsIGFjdGl2ZSBNVEQgY2hpbGRyZW4uCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYVRpbWVvdXQgIEEgcmVmZXJlbmNlIHRvIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBpcyBwbGFjZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBnZXQgdGhlIG1heCBjaGlsZCB0aW1lb3V0CisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBOb3QgYW4gYWN0aXZlIHJvdXRlcgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICAgICAgTk8gTVREIGNoaWxkCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldE1heENoaWxkVGltZW91dCh1aW50MzJfdCAmYVRpbWVvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtEaXNjb3ZlcnlNYXhKaXR0ZXIgPSAyNTB1LCAgLy8vPCBNYXhpbXVtIGppdHRlciB0aW1lIHVzZWQgdG8gZGVsYXkgRGlzY292ZXJ5IFJlc3BvbnNlcyBpbiBtaWxsaXNlY29uZHMuCisgICAgICAgIGtTdGF0ZVVwZGF0ZVBlcmlvZCA9IDEwMDB1LCAgLy8vPCBTdGF0ZSB1cGRhdGUgcGVyaW9kIGluIG1pbGxpc2Vjb25kcy4KKyAgICAgICAga1Vuc29saWNpdGVkRGF0YVJlc3BvbnNlSml0dGVyID0gNTAwdSwgIC8vLzwgTWF4aW11bSBkZWxheSBiZWZvcmUgdW5zb2xpY2l0ZWQgRGF0YSBSZXNwb25zZSBpbiBtaWxsaXNlY29uZHMuCisgICAgfTsKKworICAgIG90RXJyb3IgQXBwZW5kQ29ubmVjdGl2aXR5KE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICBvdEVycm9yIEFwcGVuZENoaWxkQWRkcmVzc2VzKE1lc3NhZ2UgJmFNZXNzYWdlLCBDaGlsZCAmYUNoaWxkKTsKKyAgICBvdEVycm9yIEFwcGVuZFJvdXRlKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICBvdEVycm9yIEFwcGVuZEFjdGl2ZURhdGFzZXQoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgQXBwZW5kUGVuZGluZ0RhdGFzZXQoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgR2V0Q2hpbGRJbmZvKENoaWxkICZhQ2hpbGQsIG90Q2hpbGRJbmZvICZhQ2hpbGRJbmZvKTsKKyAgICBvdEVycm9yIEhhbmRsZURldGFjaFN0YXJ0KHZvaWQpOworICAgIG90RXJyb3IgSGFuZGxlQ2hpbGRTdGFydChBdHRhY2hNb2RlIGFNb2RlKTsKKyAgICBvdEVycm9yIEhhbmRsZUxpbmtSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgSGFuZGxlTGlua0FjY2VwdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCB1aW50MzJfdCBhS2V5U2VxdWVuY2UpOworICAgIG90RXJyb3IgSGFuZGxlTGlua0FjY2VwdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCB1aW50MzJfdCBhS2V5U2VxdWVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVxdWVzdCk7CisgICAgb3RFcnJvciBIYW5kbGVMaW5rQWNjZXB0QW5kUmVxdWVzdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYUtleVNlcXVlbmNlKTsKKyAgICBvdEVycm9yIEhhbmRsZUFkdmVydGlzZW1lbnQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBIYW5kbGVQYXJlbnRSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgSGFuZGxlQ2hpbGRJZFJlcXVlc3QoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFLZXlTZXF1ZW5jZSk7CisgICAgb3RFcnJvciBIYW5kbGVDaGlsZFVwZGF0ZVJlcXVlc3QoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2UpOworICAgIG90RXJyb3IgSGFuZGxlQ2hpbGRVcGRhdGVSZXNwb25zZShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2UpOworICAgIG90RXJyb3IgSGFuZGxlRGF0YVJlcXVlc3QoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBIYW5kbGVOZXR3b3JrRGF0YVVwZGF0ZVJvdXRlcih2b2lkKTsKKyAgICBvdEVycm9yIEhhbmRsZURpc2NvdmVyeVJlcXVlc3QoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBvdEVycm9yIFByb2Nlc3NSb3V0ZVRsdihjb25zdCBSb3V0ZVRsdiAmYVJvdXRlKTsKKyAgICB2b2lkIFN0b3BBZHZlcnRpc2VUaW1lcih2b2lkKTsKKyAgICB2b2lkIFJlc2V0QWR2ZXJ0aXNlSW50ZXJ2YWwodm9pZCk7CisgICAgb3RFcnJvciBTZW5kQWRkcmVzc1NvbGljaXQoVGhyZWFkU3RhdHVzVGx2OjpTdGF0dXMgYVN0YXR1cyk7CisgICAgb3RFcnJvciBTZW5kQWRkcmVzc1JlbGVhc2Uodm9pZCk7CisgICAgdm9pZCBTZW5kQWRkcmVzc1NvbGljaXRSZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0LCB1aW50OF90IGFSb3V0ZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBTZW5kQWR2ZXJ0aXNlbWVudCh2b2lkKTsKKyAgICBvdEVycm9yIFNlbmRMaW5rUmVxdWVzdChOZWlnaGJvciAqYU5laWdoYm9yKTsKKyAgICBvdEVycm9yIFNlbmRMaW5rQWNjZXB0KGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgTmVpZ2hib3IgKmFOZWlnaGJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRsdlJlcXVlc3RUbHYgJmFUbHZSZXF1ZXN0LCBjb25zdCBDaGFsbGVuZ2VUbHYgJmFDaGFsbGVuZ2UpOworICAgIG90RXJyb3IgU2VuZFBhcmVudFJlc3BvbnNlKENoaWxkICphQ2hpbGQsIGNvbnN0IENoYWxsZW5nZVRsdiAmYUNoYWxsZW5nZSwgYm9vbCBhUm91dGVyc09ubHlSZXF1ZXN0KTsKKyAgICBvdEVycm9yIFNlbmRDaGlsZElkUmVzcG9uc2UoQ2hpbGQgKmFDaGlsZCk7CisgICAgb3RFcnJvciBTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KENoaWxkICphQ2hpbGQpOworICAgIG90RXJyb3IgU2VuZENoaWxkVXBkYXRlUmVzcG9uc2UoQ2hpbGQgKmFDaGlsZCwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgsICBjb25zdCBDaGFsbGVuZ2VUbHYgKmNoYWxsZW5nZSk7CisgICAgb3RFcnJvciBTZW5kRGF0YVJlc3BvbnNlKGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uLCBjb25zdCB1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c0xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYURlbGF5KTsKKyAgICBvdEVycm9yIFNlbmREaXNjb3ZlcnlSZXNwb25zZShjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwgdWludDE2X3QgYVBhbklkKTsKKworICAgIG90RXJyb3IgU2V0U3RhdGVSb3V0ZXIodWludDE2X3QgYVJsb2MxNik7CisgICAgb3RFcnJvciBTZXRTdGF0ZUxlYWRlcih1aW50MTZfdCBhUmxvYzE2KTsKKyAgICB2b2lkIFN0b3BMZWFkZXIodm9pZCk7CisgICAgb3RFcnJvciBVcGRhdGVDaGlsZEFkZHJlc3Nlcyhjb25zdCBBZGRyZXNzUmVnaXN0cmF0aW9uVGx2ICZhVGx2LCBDaGlsZCAmYUNoaWxkKTsKKyAgICB2b2lkIFVwZGF0ZVJvdXRlcyhjb25zdCBSb3V0ZVRsdiAmYVRsdiwgdWludDhfdCBhUm91dGVySWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlQWRkcmVzc1NvbGljaXRSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIHJlc3VsdCk7CisgICAgdm9pZCBIYW5kbGVBZGRyZXNzU29saWNpdFJlc3BvbnNlKENvYXA6OkhlYWRlciAqYUhlYWRlciwgTWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciByZXN1bHQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUFkZHJlc3NSZWxlYXNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUFkZHJlc3NSZWxlYXNlKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlQWRkcmVzc1NvbGljaXQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlQWRkcmVzc1NvbGljaXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB1aW50OF90IExpbmtRdWFsaXR5VG9Db3N0KHVpbnQ4X3QgYUxpbmtRdWFsaXR5KTsKKworICAgIENoaWxkICpOZXdDaGlsZCh2b2lkKTsKKyAgICBDaGlsZCAqRmluZENoaWxkKHVpbnQxNl90IGFDaGlsZElkKTsKKyAgICBDaGlsZCAqRmluZENoaWxkKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYU1hY0FkZHIpOworCisgICAgdm9pZCBTZXRDaGlsZFN0YXRlVG9WYWxpZChDaGlsZCAqYUNoaWxkKTsKKyAgICBib29sIEhhc0NoaWxkcmVuKHZvaWQpOworICAgIHZvaWQgUmVtb3ZlQ2hpbGRyZW4odm9pZCk7CisgICAgYm9vbCBIYXNNaW5Eb3duZ3JhZGVOZWlnaGJvclJvdXRlcnModm9pZCk7CisgICAgYm9vbCBIYXNPbmVOZWlnaGJvcndpdGhDb21wYXJhYmxlQ29ubmVjdGl2aXR5KGNvbnN0IFJvdXRlVGx2ICZhUm91dGUsIHVpbnQ4X3QgYVJvdXRlcklkKTsKKyAgICBib29sIEhhc1NtYWxsTnVtYmVyT2ZDaGlsZHJlbih2b2lkKTsKKyAgICB1aW50OF90IEdldE1pbkRvd25ncmFkZU5laWdoYm9yUm91dGVycyh2b2lkKTsKKworICAgIHVpbnQ4X3QgQWxsb2NhdGVSb3V0ZXJJZCh2b2lkKTsKKyAgICB1aW50OF90IEFsbG9jYXRlUm91dGVySWQodWludDhfdCBhUm91dGVySWQpOworICAgIGJvb2wgSW5Sb3V0ZXJJZE1hc2sodWludDhfdCBhUm91dGVySWQpOworCisgICAgc3RhdGljIGJvb2wgSGFuZGxlQWR2ZXJ0aXNlVGltZXIoVHJpY2tsZVRpbWVyICZhVGltZXIpOworICAgIGJvb2wgSGFuZGxlQWR2ZXJ0aXNlVGltZXIodm9pZCk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlU3RhdGVVcGRhdGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVN0YXRlVXBkYXRlVGltZXIodm9pZCk7CisKKyAgICBzdGF0aWMgTWxlUm91dGVyICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICBUcmlja2xlVGltZXIgbUFkdmVydGlzZVRpbWVyOworICAgIFRpbWVyIG1TdGF0ZVVwZGF0ZVRpbWVyOworCisgICAgQ29hcDo6UmVzb3VyY2UgbUFkZHJlc3NTb2xpY2l0OworICAgIENvYXA6OlJlc291cmNlIG1BZGRyZXNzUmVsZWFzZTsKKworICAgIHVpbnQ4X3QgbVJvdXRlcklkU2VxdWVuY2U7CisgICAgdWludDMyX3QgbVJvdXRlcklkU2VxdWVuY2VMYXN0VXBkYXRlZDsKKyAgICBSb3V0ZXIgbVJvdXRlcnNba01heFJvdXRlcklkICsgMV07CisgICAgdWludDhfdCBtTWF4Q2hpbGRyZW5BbGxvd2VkOworICAgIENoaWxkIG1DaGlsZHJlbltrTWF4Q2hpbGRyZW5dOworCisgICAgdWludDhfdCBtQ2hhbGxlbmdlVGltZW91dDsKKyAgICB1aW50OF90IG1DaGFsbGVuZ2VbOF07CisgICAgdWludDE2X3QgbU5leHRDaGlsZElkOworICAgIHVpbnQ4X3QgbU5ldHdvcmtJZFRpbWVvdXQ7CisgICAgdWludDhfdCBtUm91dGVyVXBncmFkZVRocmVzaG9sZDsKKyAgICB1aW50OF90IG1Sb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQ7CisgICAgdWludDhfdCBtTGVhZGVyV2VpZ2h0OworICAgIHVpbnQzMl90IG1GaXhlZExlYWRlclBhcnRpdGlvbklkOyAgLy8vPCBvbmx5IGZvciBjZXJ0aWZpY2F0aW9uIHRlc3RpbmcKKyAgICBib29sIG1Sb3V0ZXJSb2xlRW5hYmxlZDsKKyAgICBib29sIG1Jc1JvdXRlclJlc3RvcmluZ0NoaWxkcmVuOworCisgICAgdWludDhfdCBtUm91dGVySWQ7CisgICAgdWludDhfdCBtUHJldmlvdXNSb3V0ZXJJZDsKKyAgICB1aW50MzJfdCBtUHJldmlvdXNQYXJ0aXRpb25JZDsKKworICAgIHVpbnQ4X3QgbVJvdXRlclNlbGVjdGlvbkppdHRlcjsgICAgICAgICAvLy88IFRoZSB2YXJpYWJsZSB0byBzYXZlIHRoZSBhc3NpZ25lZCBqaXR0ZXIgdmFsdWUuCisgICAgdWludDhfdCBtUm91dGVyU2VsZWN0aW9uSml0dGVyVGltZW91dDsgIC8vLzwgVGhlIFRpbWVvdXQgcHJpb3IgdG8gcmVxdWVzdC9yZWxlYXNlIFJvdXRlciBJRC4KKworICAgIGludDhfdCBtUGFyZW50UHJpb3JpdHk7ICAvLy88IFRoZSBhc3NpZ25lZCBwYXJlbnQgcHJpb3JpdHkgdmFsdWUsIC0yIG1lYW5zIG5vdCBhc3NpZ25lZC4KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TVEVFUklOR19EQVRBX1NFVF9PT0IKKyAgICBNZXNoQ29QOjpTdGVlcmluZ0RhdGFUbHYgbVN0ZWVyaW5nRGF0YTsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCisKK307CisKK30gIC8vIG5hbWVzcGFjZSBNbGUKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1MRV9ST1VURVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL21sZV9yb3V0ZXJfbXRkLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9tbGVfcm91dGVyX210ZC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0OGQ4YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9tbGVfcm91dGVyX210ZC5ocHAKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBNTEUgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSB0aGUgVGhyZWFkIFJvdXRlciBhbmQgTGVhZGVyIHJvbGVzLgorICovCisKKyNpZm5kZWYgTUxFX1JPVVRFUl9IUFBfCisjZGVmaW5lIE1MRV9ST1VURVJfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgInRocmVhZC9tbGUuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF90bHZzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNbGUgeworCitjbGFzcyBNbGVSb3V0ZXI6IHB1YmxpYyBNbGUKK3sKKyAgICBmcmllbmQgY2xhc3MgTWxlOworCitwdWJsaWM6CisgICAgZXhwbGljaXQgTWxlUm91dGVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDogTWxlKGFUaHJlYWROZXRpZikgeyB9CisKKyAgICBib29sIElzU2luZ2xldG9uKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBvdEVycm9yIEJlY29tZVJvdXRlcihUaHJlYWRTdGF0dXNUbHY6OlN0YXR1cykgeyByZXR1cm4gT1RfRVJST1JfTk9UX0NBUEFCTEU7IH0KKyAgICBvdEVycm9yIEJlY29tZUxlYWRlcih2b2lkKSB7IHJldHVybiBPVF9FUlJPUl9OT1RfQ0FQQUJMRTsgfQorCisgICAgdWludDhfdCBHZXRBY3RpdmVSb3V0ZXJDb3VudCh2b2lkKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICB1aW50MzJfdCBHZXRMZWFkZXJBZ2Uodm9pZCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdWludDMyX3QgR2V0UHJldmlvdXNQYXJ0aXRpb25JZCh2b2lkKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdm9pZCBTZXRQcmV2aW91c1BhcnRpdGlvbklkKHVpbnQzMl90KSB7IH0KKyAgICB2b2lkIFNldFJvdXRlcklkKHVpbnQ4X3QpIHsgfQorCisgICAgdWludDE2X3QgR2V0TmV4dEhvcCh1aW50MTZfdCBhRGVzdGluYXRpb24pIGNvbnN0IHsgcmV0dXJuIE1sZTo6R2V0TmV4dEhvcChhRGVzdGluYXRpb24pOyB9CisKKyAgICB1aW50OF90IEdldE5ldHdvcmtJZFRpbWVvdXQodm9pZCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdWludDhfdCBHZXRSb3V0ZUNvc3QodWludDE2X3QpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB1aW50OF90IEdldExpbmtDb3N0KHVpbnQxNl90KSB7IHJldHVybiAwOyB9CisgICAgdWludDhfdCBHZXRDb3N0KHVpbnQxNl90KSB7IHJldHVybiAwOyB9CisKKyAgICB1aW50OF90IEdldFJvdXRlcklkU2VxdWVuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgb3RFcnJvciBSZW1vdmVOZWlnaGJvcihjb25zdCBNYWM6OkFkZHJlc3MgJikgeyByZXR1cm4gQmVjb21lRGV0YWNoZWQoKTsgfQorICAgIG90RXJyb3IgUmVtb3ZlTmVpZ2hib3IoTmVpZ2hib3IgJikgeyByZXR1cm4gQmVjb21lRGV0YWNoZWQoKTsgfQorCisgICAgQ2hpbGQgKkdldENoaWxkKHVpbnQxNl90KSB7IHJldHVybiBOVUxMOyB9CisgICAgQ2hpbGQgKkdldENoaWxkKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmKSB7IHJldHVybiBOVUxMOyB9CisgICAgQ2hpbGQgKkdldENoaWxkKGNvbnN0IE1hYzo6QWRkcmVzcyAmKSB7IHJldHVybiBOVUxMOyB9CisKKyAgICB1aW50OF90IEdldENoaWxkSW5kZXgoY29uc3QgQ2hpbGQgJikgeyByZXR1cm4gMDsgfQorCisgICAgQ2hpbGQgKkdldENoaWxkcmVuKHVpbnQ4X3QgKmFOdW1DaGlsZHJlbikgeworICAgICAgICBpZiAoYU51bUNoaWxkcmVuICE9IE5VTEwpIHsKKyAgICAgICAgICAgICphTnVtQ2hpbGRyZW4gPSAwOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgb3RFcnJvciBSZXN0b3JlQ2hpbGRyZW4odm9pZCkge3JldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7IH0KKyAgICBvdEVycm9yIFJlbW92ZVN0b3JlZENoaWxkKHVpbnQxNl90KSB7cmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgfQorICAgIG90RXJyb3IgU3RvcmVDaGlsZCh1aW50MTZfdCkge3JldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7IH0KKyAgICBvdEVycm9yIFJlZnJlc2hTdG9yZWRDaGlsZHJlbih2b2lkKSB7IHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7IH0KKworICAgIE5laWdoYm9yICpHZXROZWlnaGJvcih1aW50MTZfdCBhQWRkcmVzcykgeyByZXR1cm4gTWxlOjpHZXROZWlnaGJvcihhQWRkcmVzcyk7IH0KKyAgICBOZWlnaGJvciAqR2V0TmVpZ2hib3IoY29uc3QgTWFjOjpFeHRBZGRyZXNzICZhQWRkcmVzcykgeyByZXR1cm4gTWxlOjpHZXROZWlnaGJvcihhQWRkcmVzcyk7IH0KKyAgICBOZWlnaGJvciAqR2V0TmVpZ2hib3IoY29uc3QgTWFjOjpBZGRyZXNzICZhQWRkcmVzcykgeyByZXR1cm4gTWxlOjpHZXROZWlnaGJvcihhQWRkcmVzcyk7IH0KKyAgICBOZWlnaGJvciAqR2V0TmVpZ2hib3IoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykgeyByZXR1cm4gTWxlOjpHZXROZWlnaGJvcihhQWRkcmVzcyk7IH0KKworICAgIG90RXJyb3IgR2V0TmV4dE5laWdoYm9ySW5mbyhvdE5laWdoYm9ySW5mb0l0ZXJhdG9yICYsIG90TmVpZ2hib3JJbmZvICYpIHsgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgfQorCisgICAgUm91dGVyICpHZXRSb3V0ZXJzKHVpbnQ4X3QgKmFOdW1Sb3V0ZXJzKSB7CisgICAgICAgIGlmIChhTnVtUm91dGVycyAhPSBOVUxMKSB7CisgICAgICAgICAgICAqYU51bVJvdXRlcnMgPSAwOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3RhdGljIGludCBDb21wYXJlUGFydGl0aW9ucyhib29sLCBjb25zdCBMZWFkZXJEYXRhVGx2ICYsIGJvb2wsIGNvbnN0IExlYWRlckRhdGFUbHYgJikgeyByZXR1cm4gMDsgfQorCisgICAgdm9pZCBSZXNvbHZlUm91dGluZ0xvb3BzKHVpbnQxNl90LCB1aW50MTZfdCkgeyB9CisKKyAgICBvdEVycm9yIENoZWNrUmVhY2hhYmlsaXR5KHVpbnQxNl90IGFNZXNoU291cmNlLCB1aW50MTZfdCBhTWVzaERlc3QsIElwNjo6SGVhZGVyICZhSXA2SGVhZGVyKSB7CisgICAgICAgIHJldHVybiBNbGU6OkNoZWNrUmVhY2hhYmlsaXR5KGFNZXNoU291cmNlLCBhTWVzaERlc3QsIGFJcDZIZWFkZXIpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIElzUm91dGVySWRWYWxpZCh1aW50OF90IGFSb3V0ZXJJZCkgeyByZXR1cm4gYVJvdXRlcklkIDw9IGtNYXhSb3V0ZXJJZDsgfQorCisgICAgdm9pZCBGaWxsQ29ubmVjdGl2aXR5VGx2KENvbm5lY3Rpdml0eVRsdiAmKSB7IH0KKyAgICB2b2lkIEZpbGxSb3V0ZVRsdihSb3V0ZVRsdiAmKSB7IH0KKworICAgIG90RXJyb3IgU2VuZENoaWxkVXBkYXRlUmVxdWVzdCh2b2lkKSB7IHJldHVybiBNbGU6OlNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QoKTsgfQorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorICAgIG90RXJyb3IgU2V0U3RlZXJpbmdEYXRhKG90RXh0QWRkcmVzcyAqKSB7IHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7IH0KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCisKKyAgICBvdEVycm9yIEdldE1heENoaWxkVGltZW91dCh1aW50MzJfdCAmKSB7IHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7IH0KKworcHJpdmF0ZToKKyAgICBvdEVycm9yIEhhbmRsZURldGFjaFN0YXJ0KHZvaWQpIHsgcmV0dXJuIE9UX0VSUk9SX05PTkU7IH0KKyAgICBvdEVycm9yIEhhbmRsZUNoaWxkU3RhcnQoQXR0YWNoTW9kZSkgeyByZXR1cm4gT1RfRVJST1JfTk9ORTsgfQorICAgIG90RXJyb3IgSGFuZGxlTGlua1JlcXVlc3QoY29uc3QgTWVzc2FnZSAmLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICYpIHsgcmV0dXJuIE9UX0VSUk9SX0RST1A7IH0KKyAgICBvdEVycm9yIEhhbmRsZUxpbmtBY2NlcHQoY29uc3QgTWVzc2FnZSAmLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICYsIHVpbnQzMl90KSB7IHJldHVybiBPVF9FUlJPUl9EUk9QOyB9CisgICAgb3RFcnJvciBIYW5kbGVMaW5rQWNjZXB0KGNvbnN0IE1lc3NhZ2UgJiwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmLCB1aW50MzJfdCwgYm9vbCkgeyByZXR1cm4gT1RfRVJST1JfRFJPUDsgfQorICAgIG90RXJyb3IgSGFuZGxlTGlua0FjY2VwdEFuZFJlcXVlc3QoY29uc3QgTWVzc2FnZSAmLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICYsIHVpbnQzMl90KSB7IHJldHVybiBPVF9FUlJPUl9EUk9QOyB9CisgICAgb3RFcnJvciBIYW5kbGVBZHZlcnRpc2VtZW50KGNvbnN0IE1lc3NhZ2UgJiwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmKSB7IHJldHVybiBPVF9FUlJPUl9EUk9QOyB9CisgICAgb3RFcnJvciBIYW5kbGVQYXJlbnRSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJiwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmKSB7IHJldHVybiBPVF9FUlJPUl9EUk9QOyB9CisgICAgb3RFcnJvciBIYW5kbGVDaGlsZElkUmVxdWVzdChjb25zdCBNZXNzYWdlICYsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJiwgdWludDMyX3QpIHsgcmV0dXJuIE9UX0VSUk9SX0RST1A7IH0KKyAgICBvdEVycm9yIEhhbmRsZUNoaWxkVXBkYXRlUmVxdWVzdChjb25zdCBNZXNzYWdlICYsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJiwgdWludDMyX3QpIHsgcmV0dXJuIE9UX0VSUk9SX0RST1A7IH0KKyAgICBvdEVycm9yIEhhbmRsZUNoaWxkVXBkYXRlUmVzcG9uc2UoY29uc3QgTWVzc2FnZSAmLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICYsIHVpbnQzMl90KSB7IHJldHVybiBPVF9FUlJPUl9EUk9QOyB9CisgICAgb3RFcnJvciBIYW5kbGVEYXRhUmVxdWVzdChjb25zdCBNZXNzYWdlICYsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJikgeyByZXR1cm4gT1RfRVJST1JfRFJPUDsgfQorICAgIG90RXJyb3IgSGFuZGxlTmV0d29ya0RhdGFVcGRhdGVSb3V0ZXIodm9pZCkgeyByZXR1cm4gT1RfRVJST1JfTk9ORTsgfQorICAgIG90RXJyb3IgSGFuZGxlRGlzY292ZXJ5UmVxdWVzdChjb25zdCBNZXNzYWdlICYsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJikgeyByZXR1cm4gT1RfRVJST1JfRFJPUDsgfQorCisgICAgdm9pZCBTdG9wQWR2ZXJ0aXNlVGltZXIodm9pZCkgeyB9CisgICAgb3RFcnJvciBQcm9jZXNzUm91dGVUbHYoY29uc3QgUm91dGVUbHYgJmFSb3V0ZSkgeyBPVF9VTlVTRURfVkFSSUFCTEUoYVJvdXRlKTsgcmV0dXJuIE9UX0VSUk9SX05PTkU7IH0KK307CisKK30gIC8vIG5hbWVzcGFjZSBNbGUKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1MRV9ST1VURVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL21sZV90bHZzLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9tbGVfdGx2cy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjMmQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9tbGVfdGx2cy5ocHAKQEAgLTAsMCArMSwxNjM5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgZ2VuZXJhdGluZyBhbmQgcHJvY2Vzc2luZyBNTEUgVExWcy4KKyAqLworCisjaWZuZGVmIE1MRV9UTFZTX0hQUF8KKyNkZWZpbmUgTUxFX1RMVlNfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90bHZzLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL3RpbWVzdGFtcC5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX2NvbnN0YW50cy5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzI7CisKK25hbWVzcGFjZSBvdCB7CisKK25hbWVzcGFjZSBNbGUgeworCisjZGVmaW5lIFRMVlJFUVVFU1RUTFZfSVRFUkFUT1JfSU5JVCAgMCAgLy8vPCBJbml0aWFsaXplciBmb3IgVGx2UmVxdWVzdFRsdkl0ZXJhdG9yLgorCit0eXBlZGVmIHVpbnQ4X3QgVGx2UmVxdWVzdEl0ZXJhdG9yOyAgICAgIC8vLzwgVXNlZCB0byBpdGVyYXRlIHRocm91Z2ggVGx2UmVxdWVzdFRsdi4KKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW1sZS10bHZzCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBnZW5lcmF0aW5nIGFuZCBwcm9jZXNzaW5nIE1MRSBUTFZzLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1MRSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBUbHYgOiBwdWJsaWMgb3Q6OlRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIE1MRSBUTFYgVHlwZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAgIGtTb3VyY2VBZGRyZXNzICAgICAgID0gMCwgICAgLy8vPCBTb3VyY2UgQWRkcmVzcyBUTFYKKyAgICAgICAga01vZGUgICAgICAgICAgICAgICAgPSAxLCAgICAvLy88IE1vZGUgVExWCisgICAgICAgIGtUaW1lb3V0ICAgICAgICAgICAgID0gMiwgICAgLy8vPCBUaW1lb3V0IFRMVgorICAgICAgICBrQ2hhbGxlbmdlICAgICAgICAgICA9IDMsICAgIC8vLzwgQ2hhbGxlbmdlIFRMVgorICAgICAgICBrUmVzcG9uc2UgICAgICAgICAgICA9IDQsICAgIC8vLzwgUmVzcG9uc2UgVExWCisgICAgICAgIGtMaW5rRnJhbWVDb3VudGVyICAgID0gNSwgICAgLy8vPCBMaW5rLUxheWVyIEZyYW1lIENvdW50ZXIgVExWCisgICAgICAgIGtMaW5rUXVhbGl0eSAgICAgICAgID0gNiwgICAgLy8vPCBMaW5rIFF1YWxpdHkgVExWCisgICAgICAgIGtOZXR3b3JrUGFyYW1ldGVyICAgID0gNywgICAgLy8vPCBOZXR3b3JrIFBhcmFtZXRlciBUTFYKKyAgICAgICAga01sZUZyYW1lQ291bnRlciAgICAgPSA4LCAgICAvLy88IE1MRSBGcmFtZSBDb3VudGVyIFRMVgorICAgICAgICBrUm91dGUgICAgICAgICAgICAgICA9IDksICAgIC8vLzwgUm91dGU2NCBUTFYKKyAgICAgICAga0FkZHJlc3MxNiAgICAgICAgICAgPSAxMCwgICAvLy88IEFkZHJlc3MxNiBUTFYKKyAgICAgICAga0xlYWRlckRhdGEgICAgICAgICAgPSAxMSwgICAvLy88IExlYWRlciBEYXRhIFRMVgorICAgICAgICBrTmV0d29ya0RhdGEgICAgICAgICA9IDEyLCAgIC8vLzwgTmV0d29yayBEYXRhIFRMVgorICAgICAgICBrVGx2UmVxdWVzdCAgICAgICAgICA9IDEzLCAgIC8vLzwgVExWIFJlcXVlc3QgVExWCisgICAgICAgIGtTY2FuTWFzayAgICAgICAgICAgID0gMTQsICAgLy8vPCBTY2FuIE1hc2sgVExWCisgICAgICAgIGtDb25uZWN0aXZpdHkgICAgICAgID0gMTUsICAgLy8vPCBDb25uZWN0aXZpdHkgVExWCisgICAgICAgIGtMaW5rTWFyZ2luICAgICAgICAgID0gMTYsICAgLy8vPCBMaW5rIE1hcmdpbiBUTFYKKyAgICAgICAga1N0YXR1cyAgICAgICAgICAgICAgPSAxNywgICAvLy88IFN0YXR1cyBUTFYKKyAgICAgICAga1ZlcnNpb24gICAgICAgICAgICAgPSAxOCwgICAvLy88IFZlcnNpb24gVExWCisgICAgICAgIGtBZGRyZXNzUmVnaXN0cmF0aW9uID0gMTksICAgLy8vPCBBZGRyZXNzIFJlZ2lzdHJhdGlvbiBUTFYKKyAgICAgICAga0NoYW5uZWwgICAgICAgICAgICAgPSAyMCwgICAvLy88IENoYW5uZWwgVExWCisgICAgICAgIGtQYW5JZCAgICAgICAgICAgICAgID0gMjEsICAgLy8vPCBQQU4gSUQgVExWCisgICAgICAgIGtBY3RpdmVUaW1lc3RhbXAgICAgID0gMjIsICAgLy8vPCBBY3RpdmUgVGltZXN0YW1wIFRMVgorICAgICAgICBrUGVuZGluZ1RpbWVzdGFtcCAgICA9IDIzLCAgIC8vLzwgUGVuZGluZyBUaW1lc3RhbXAgVExWCisgICAgICAgIGtBY3RpdmVEYXRhc2V0ICAgICAgID0gMjQsICAgLy8vPCBBY3RpdmUgT3BlcmF0aW9uYWwgRGF0YXNldCBUTFYKKyAgICAgICAga1BlbmRpbmdEYXRhc2V0ICAgICAgPSAyNSwgICAvLy88IFBlbmRpbmcgT3BlcmF0aW9uYWwgRGF0YXNldCBUTFYKKyAgICAgICAga0Rpc2NvdmVyeSAgICAgICAgICAgPSAyNiwgICAvLy88IFRocmVhZCBEaXNjb3ZlcnkgVExWCisgICAgICAgIGtJbnZhbGlkICAgICAgICAgICAgID0gMjU1LAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBUeXBlIEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4ob3Q6OlRsdjo6R2V0VHlwZSgpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICBUaGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VHlwZShUeXBlIGFUeXBlKSB7IG90OjpUbHY6OlNldFR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJlYWRzIHRoZSByZXF1ZXN0ZWQgVExWIG91dCBvZiBAcCBhTWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhTWVzc2FnZSAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICAgYVR5cGUgICAgICAgVGhlIFR5cGUgdmFsdWUgdG8gc2VhcmNoIGZvci4KKyAgICAgKiBAcGFyYW1baW5dICAgYU1heExlbmd0aCAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYVRsdiAgICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIFRMViB0aGF0IHdpbGwgYmUgY29waWVkIHRvLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBjb3BpZWQgdGhlIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgQ291bGQgbm90IGZpbmQgdGhlIFRMViB3aXRoIFR5cGUgQHAgYVR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgb3RFcnJvciBHZXRUbHYoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIFR5cGUgYVR5cGUsIHVpbnQxNl90IGFNYXhMZW5ndGgsIFRsdiAmYVRsdikgeworICAgICAgICByZXR1cm4gb3Q6OlRsdjo6R2V0KGFNZXNzYWdlLCBzdGF0aWNfY2FzdDx1aW50OF90PihhVHlwZSksIGFNYXhMZW5ndGgsIGFUbHYpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCBvYnRhaW5zIHRoZSBvZmZzZXQgb2YgYSBUTFYgd2l0aGluIEBwIGFNZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gICBhVHlwZSAgICAgICBUaGUgVHlwZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICAgICAqIEBwYXJhbVtvdXRdICBhT2Zmc2V0ICAgICBBIHJlZmVyZW5jZSB0byB0aGUgb2Zmc2V0IG9mIHRoZSBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGNvcGllZCB0aGUgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgVExWIHdpdGggVHlwZSBAcCBhVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIEdldE9mZnNldChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgVHlwZSBhVHlwZSwgdWludDE2X3QgJmFPZmZzZXQpIHsKKyAgICAgICAgcmV0dXJuIG90OjpUbHY6OkdldE9mZnNldChhTWVzc2FnZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpLCBhT2Zmc2V0KTsKKyAgICB9CisKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBTb3VyY2VBZGRyZXNzVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1NvdXJjZUFkZHJlc3MpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRSbG9jMTYodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUmxvYzE2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MxNiAgVGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UmxvYzE2KHVpbnQxNl90IGFSbG9jMTYpIHsgbVJsb2MxNiA9IEhvc3RTd2FwMTYoYVJsb2MxNik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtUmxvYzE2OworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNvdXJjZSBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE1vZGVUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrTW9kZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgZW51bQorICAgIHsKKyAgICAgICAga01vZGVSeE9uV2hlbklkbGUgICAgICA9IDEgPDwgMywKKyAgICAgICAga01vZGVTZWN1cmVEYXRhUmVxdWVzdCA9IDEgPDwgMiwKKyAgICAgICAga01vZGVGRkQgICAgICAgICAgICAgICA9IDEgPDwgMSwKKyAgICAgICAga01vZGVGdWxsTmV0d29ya0RhdGEgICA9IDEgPDwgMCwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTW9kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBNb2RlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRNb2RlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Nb2RlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNb2RlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1vZGUgIFRoZSBNb2RlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNb2RlKHVpbnQ4X3QgYU1vZGUpIHsgbU1vZGUgPSBhTW9kZTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU1vZGU7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGltZW91dFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtUaW1lb3V0KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRpbWVvdXQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRUaW1lb3V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobVRpbWVvdXQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVvdXQgIFRoZSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUaW1lb3V0KHVpbnQzMl90IGFUaW1lb3V0KSB7IG1UaW1lb3V0ID0gSG9zdFN3YXAzMihhVGltZW91dCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtVGltZW91dDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDaGFsbGVuZ2VUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4U2l6ZSA9IDgsICAvLy88IE1heGltdW0gc2l6ZSBpbiBieXRlcyAoVGhyZWFkIFNwZWNpZmljYXRpb24pLgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrQ2hhbGxlbmdlKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPj0gNCAmJiBHZXRMZW5ndGgoKSA8PSA4OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgQ2hhbGxlbmdlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBDaGFsbGVuZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRDaGFsbGVuZ2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbUNoYWxsZW5nZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ2hhbGxlbmdlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoYWxsZW5nZSAgQSBwb2ludGVyIHRvIHRoZSBDaGFsbGVuZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENoYWxsZW5nZShjb25zdCB1aW50OF90ICphQ2hhbGxlbmdlKSB7IG1lbWNweShtQ2hhbGxlbmdlLCBhQ2hhbGxlbmdlLCBHZXRMZW5ndGgoKSk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1DaGFsbGVuZ2Vba01heFNpemVdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNvdXJjZSBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFJlc3BvbnNlVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heFNpemUgPSA4LCAgLy8vPCBNYXhpbXVtIHNpemUgaW4gYnl0ZXMgKFRocmVhZCBTcGVjaWZpY2F0aW9uKS4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1Jlc3BvbnNlKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgUmVzcG9uc2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFJlc3BvbnNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0UmVzcG9uc2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbVJlc3BvbnNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSZXNwb25zZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXNwb25zZSAgQSBwb2ludGVyIHRvIHRoZSBSZXNwb25zZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UmVzcG9uc2UoY29uc3QgdWludDhfdCAqYVJlc3BvbnNlKSB7IG1lbWNweShtUmVzcG9uc2UsIGFSZXNwb25zZSwgR2V0TGVuZ3RoKCkpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtUmVzcG9uc2Vba01heFNpemVdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNvdXJjZSBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIExpbmtGcmFtZUNvdW50ZXJUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrTGlua0ZyYW1lQ291bnRlcik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0RnJhbWVDb3VudGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobUZyYW1lQ291bnRlcik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWVDb3VudGVyICBUaGUgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RnJhbWVDb3VudGVyKHVpbnQzMl90IGFGcmFtZUNvdW50ZXIpIHsgbUZyYW1lQ291bnRlciA9IEhvc3RTd2FwMzIoYUZyYW1lQ291bnRlcik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtRnJhbWVDb3VudGVyOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNvdXJjZSBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFJvdXRlVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1JvdXRlKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gR2V0TGVuZ3RoKCkgPj0gc2l6ZW9mKG1Sb3V0ZXJJZFNlcXVlbmNlKSArIHNpemVvZihtUm91dGVySWRNYXNrKSAmJgorICAgICAgICAgICAgICAgR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJvdXRlciBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSb3V0ZXIgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFJvdXRlcklkU2VxdWVuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbVJvdXRlcklkU2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJvdXRlciBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZXF1ZW5jZSAgVGhlIFJvdXRlciBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Um91dGVySWRTZXF1ZW5jZSh1aW50OF90IGFTZXF1ZW5jZSkgeyBtUm91dGVySWRTZXF1ZW5jZSA9IGFTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBSb3V0ZXIgSUQgTWFzay4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJSb3V0ZXJJZE1hc2sodm9pZCkgeyBtZW1zZXQobVJvdXRlcklkTWFzaywgMCwgc2l6ZW9mKG1Sb3V0ZXJJZE1hc2spKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGEgUm91dGVyIElEIGJpdCBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgUm91dGVyIElEIGJpdCBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFJvdXRlciBJRCBiaXQgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNSb3V0ZXJJZFNldCh1aW50OF90IGFSb3V0ZXJJZCkgY29uc3QgeworICAgICAgICByZXR1cm4gKG1Sb3V0ZXJJZE1hc2tbYVJvdXRlcklkIC8gOF0gJiAoMHg4MCA+PiAoYVJvdXRlcklkICUgOCkpKSAhPSAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJvdXRlciBJRCBiaXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBSb3V0ZXIgSUQgYml0IHRvIHNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Um91dGVySWQodWludDhfdCBhUm91dGVySWQpIHsgbVJvdXRlcklkTWFza1thUm91dGVySWQgLyA4XSB8PSAweDgwID4+IChhUm91dGVySWQgJSA4KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUm91dGUgRGF0YSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUm91dGUgRGF0YSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFJvdXRlRGF0YUxlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSAtIHNpemVvZihtUm91dGVySWRTZXF1ZW5jZSkgLSBzaXplb2YobVJvdXRlcklkTWFzayk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJvdXRlIERhdGEgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgVGhlIFJvdXRlIERhdGEgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSb3V0ZURhdGFMZW5ndGgodWludDhfdCBhTGVuZ3RoKSB7CisgICAgICAgIFNldExlbmd0aChzaXplb2YobVJvdXRlcklkU2VxdWVuY2UpICsgc2l6ZW9mKG1Sb3V0ZXJJZE1hc2spICsgYUxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUm91dGUgQ29zdCB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUm91dGUgQ29zdCB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFJvdXRlQ29zdCh1aW50OF90IGFSb3V0ZXJJZCkgY29uc3QgeworICAgICAgICByZXR1cm4gbVJvdXRlRGF0YVthUm91dGVySWRdICYga1JvdXRlQ29zdE1hc2s7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUm91dGUgQ29zdCB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgICBUaGUgUm91dGVyIElELgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZUNvc3QgIFRoZSBSb3V0ZSBDb3N0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSb3V0ZUNvc3QodWludDhfdCBhUm91dGVySWQsIHVpbnQ4X3QgYVJvdXRlQ29zdCkgeworICAgICAgICBtUm91dGVEYXRhW2FSb3V0ZXJJZF0gPSAobVJvdXRlRGF0YVthUm91dGVySWRdICYgfmtSb3V0ZUNvc3RNYXNrKSB8IGFSb3V0ZUNvc3Q7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGluayBRdWFsaXR5IEluIHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBMaW5rIFF1YWxpdHkgSW4gdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rUXVhbGl0eUluKHVpbnQ4X3QgYVJvdXRlcklkKSBjb25zdCB7CisgICAgICAgIHJldHVybiAobVJvdXRlRGF0YVthUm91dGVySWRdICYga0xpbmtRdWFsaXR5SW5NYXNrKSA+PiBrTGlua1F1YWxpdHlJbk9mZnNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMaW5rIFF1YWxpdHkgSW4gdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICAgICBUaGUgUm91dGVyIElELgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSAgVGhlIExpbmsgUXVhbGl0eSBJbiB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExpbmtRdWFsaXR5SW4odWludDhfdCBhUm91dGVySWQsIHVpbnQ4X3QgYUxpbmtRdWFsaXR5KSB7CisgICAgICAgIG1Sb3V0ZURhdGFbYVJvdXRlcklkXSA9CisgICAgICAgICAgICAobVJvdXRlRGF0YVthUm91dGVySWRdICYgfmtMaW5rUXVhbGl0eUluTWFzaykgfAorICAgICAgICAgICAgKChhTGlua1F1YWxpdHkgPDwga0xpbmtRdWFsaXR5SW5PZmZzZXQpICYga0xpbmtRdWFsaXR5SW5NYXNrKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBMaW5rIFF1YWxpdHkgT3V0IHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBMaW5rIFF1YWxpdHkgT3V0IHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGlua1F1YWxpdHlPdXQodWludDhfdCBhUm91dGVySWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChtUm91dGVEYXRhW2FSb3V0ZXJJZF0gJiBrTGlua1F1YWxpdHlPdXRNYXNrKSA+PiBrTGlua1F1YWxpdHlPdXRPZmZzZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBRdWFsaXR5IE91dCB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgICAgIFRoZSBSb3V0ZXIgSUQuCisgICAgICogQHBhcmFtW2luXSAgYUxpbmtRdWFsaXR5ICBUaGUgTGluayBRdWFsaXR5IE91dCB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExpbmtRdWFsaXR5T3V0KHVpbnQ4X3QgYVJvdXRlcklkLCB1aW50OF90IGFMaW5rUXVhbGl0eSkgeworICAgICAgICBtUm91dGVEYXRhW2FSb3V0ZXJJZF0gPQorICAgICAgICAgICAgKG1Sb3V0ZURhdGFbYVJvdXRlcklkXSAmIH5rTGlua1F1YWxpdHlPdXRNYXNrKSB8CisgICAgICAgICAgICAoKGFMaW5rUXVhbGl0eSA8PCBrTGlua1F1YWxpdHlPdXRPZmZzZXQpICYga0xpbmtRdWFsaXR5T3V0TWFzayk7CisgICAgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtMaW5rUXVhbGl0eU91dE9mZnNldCA9IDYsCisgICAgICAgIGtMaW5rUXVhbGl0eU91dE1hc2sgPSAzIDw8IGtMaW5rUXVhbGl0eU91dE9mZnNldCwKKyAgICAgICAga0xpbmtRdWFsaXR5SW5PZmZzZXQgPSA0LAorICAgICAgICBrTGlua1F1YWxpdHlJbk1hc2sgPSAzIDw8IGtMaW5rUXVhbGl0eUluT2Zmc2V0LAorICAgICAgICBrUm91dGVDb3N0T2Zmc2V0ID0gMCwKKyAgICAgICAga1JvdXRlQ29zdE1hc2sgPSAweGYgPDwga1JvdXRlQ29zdE9mZnNldCwKKyAgICB9OworICAgIHVpbnQ4X3QgbVJvdXRlcklkU2VxdWVuY2U7CisgICAgdWludDhfdCBtUm91dGVySWRNYXNrW0JpdFZlY3RvckJ5dGVzKGtNYXhSb3V0ZXJJZCArIDEpXTsKKyAgICB1aW50OF90IG1Sb3V0ZURhdGFba01heFJvdXRlcnNdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNvdXJjZSBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE1sZUZyYW1lQ291bnRlclRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtNbGVGcmFtZUNvdW50ZXIpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldEZyYW1lQ291bnRlcih2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1GcmFtZUNvdW50ZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lQ291bnRlciAgVGhlIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEZyYW1lQ291bnRlcih1aW50MzJfdCBhRnJhbWVDb3VudGVyKSB7IG1GcmFtZUNvdW50ZXIgPSBIb3N0U3dhcDMyKGFGcmFtZUNvdW50ZXIpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbUZyYW1lQ291bnRlcjsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBBZGRyZXNzMTZUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrQWRkcmVzczE2KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UmxvYzE2KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVJsb2MxNik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJsb2MxNih1aW50MTZfdCBhUmxvYzE2KSB7IG1SbG9jMTYgPSBIb3N0U3dhcDE2KGFSbG9jMTYpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbVJsb2MxNjsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBMZWFkZXJEYXRhVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0xlYWRlckRhdGEpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBhcnRpdGlvbiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBQYXJ0aXRpb24gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRQYXJ0aXRpb25JZCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1QYXJ0aXRpb25JZCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBhcnRpdGlvbiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQYXJ0aXRpb25JZCAgVGhlIFBhcnRpdGlvbiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UGFydGl0aW9uSWQodWludDMyX3QgYVBhcnRpdGlvbklkKSB7IG1QYXJ0aXRpb25JZCA9IEhvc3RTd2FwMzIoYVBhcnRpdGlvbklkKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgV2VpZ2h0aW5nIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFdlaWdodGluZyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0V2VpZ2h0aW5nKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1XZWlnaHRpbmc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFdlaWdodGluZyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFXZWlnaHRpbmcgIFRoZSBXZWlnaHRpbmcgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFdlaWdodGluZyh1aW50OF90IGFXZWlnaHRpbmcpIHsgbVdlaWdodGluZyA9IGFXZWlnaHRpbmc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIERhdGEgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldERhdGFWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1EYXRhVmVyc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGF0YSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlcnNpb24gIFRoZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERhdGFWZXJzaW9uKHVpbnQ4X3QgYVZlcnNpb24pICB7IG1EYXRhVmVyc2lvbiA9IGFWZXJzaW9uOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBTdGFibGUgRGF0YSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFN0YWJsZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFN0YWJsZURhdGFWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TdGFibGVEYXRhVmVyc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgU3RhYmxlIERhdGEgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZXJzaW9uICBUaGUgU3RhYmxlIERhdGEgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U3RhYmxlRGF0YVZlcnNpb24odWludDhfdCBhVmVyc2lvbikgeyBtU3RhYmxlRGF0YVZlcnNpb24gPSBhVmVyc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGVhZGVyIFJvdXRlciBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBMZWFkZXIgUm91dGVyIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMZWFkZXJSb3V0ZXJJZCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVhZGVyUm91dGVySWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIExlYWRlciBSb3V0ZXIgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBMZWFkZXIgUm91dGVyIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMZWFkZXJSb3V0ZXJJZCh1aW50OF90IGFSb3V0ZXJJZCkgeyBtTGVhZGVyUm91dGVySWQgPSBhUm91dGVySWQ7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtUGFydGl0aW9uSWQ7CisgICAgdWludDhfdCBtV2VpZ2h0aW5nOworICAgIHVpbnQ4X3QgbURhdGFWZXJzaW9uOworICAgIHVpbnQ4X3QgbVN0YWJsZURhdGFWZXJzaW9uOworICAgIHVpbnQ4X3QgbUxlYWRlclJvdXRlcklkOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNvdXJjZSBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE5ldHdvcmtEYXRhVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa05ldHdvcmtEYXRhKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPCBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldE5ldHdvcmtEYXRhKHZvaWQpIHsgcmV0dXJuIG1OZXR3b3JrRGF0YTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5ldHdvcmtEYXRhICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TmV0d29ya0RhdGEoY29uc3QgdWludDhfdCAqYU5ldHdvcmtEYXRhKSB7IG1lbWNweShtTmV0d29ya0RhdGEsIGFOZXR3b3JrRGF0YSwgR2V0TGVuZ3RoKCkpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtTmV0d29ya0RhdGFbMjU1XTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBUbHZSZXF1ZXN0VGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1RsdlJlcXVlc3QpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA8PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBUTFYgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgVExWIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRUbHZzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1UbHZzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyB0aGUgbmV4dCBUbHYgaW4gdGhlIFRsdlJlcXVlc3RUbHYuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCB0aGUgbmV4dCBUbHYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgICBObyBzdWJzZXF1ZW50IFRsdiBleGlzdHMgaW4gVGx2UmVxdWVzdFRsdi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0TmV4dFRsdihUbHZSZXF1ZXN0SXRlcmF0b3IgJmFJdGVyYXRvciwgdWludDhfdCAmYVRsdikgeworICAgICAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworCisgICAgICAgIGlmIChhSXRlcmF0b3IgPCBHZXRMZW5ndGgoKSkgeworICAgICAgICAgICAgYVRsdiA9IG1UbHZzW2FJdGVyYXRvcl07CisgICAgICAgICAgICBhSXRlcmF0b3IgPSBzdGF0aWNfY2FzdDxUbHZSZXF1ZXN0SXRlcmF0b3I+KGFJdGVyYXRvciArIHNpemVvZih1aW50OF90KSk7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbGlzdCBvZiBUTFZzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRsdnMgIEEgcG9pbnRlciB0byB0aGUgVExWIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRsdnMoY29uc3QgdWludDhfdCAqYVRsdnMpIHsgbWVtY3B5KG1UbHZzLCBhVGx2cywgR2V0TGVuZ3RoKCkpOyB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heFRsdnMgPSA4LAorICAgIH07CisgICAgdWludDhfdCBtVGx2c1trTWF4VGx2c107Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU2Nhbk1hc2tUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrU2Nhbk1hc2spOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtSb3V0ZXJGbGFnID0gMSA8PCA3LAorICAgICAgICBrRW5kRGV2aWNlRmxhZyA9IDEgPDwgNiwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIFJvdXRlciBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhclJvdXRlckZsYWcodm9pZCkgeyBtTWFzayAmPSB+a1JvdXRlckZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJvdXRlciBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSb3V0ZXJGbGFnKHZvaWQpIHsgbU1hc2sgfD0ga1JvdXRlckZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgUm91dGVyIGZsYWcgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFJvdXRlciBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgUm91dGVyIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKi8KKyAgICBib29sIElzUm91dGVyRmxhZ1NldCh2b2lkKSB7IHJldHVybiAobU1hc2sgJiBrUm91dGVyRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBFbmQgRGV2aWNlIGZsYWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyRW5kRGV2aWNlRmxhZyh2b2lkKSB7IG1NYXNrICY9IH5rRW5kRGV2aWNlRmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRW5kIERldmljZSBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRFbmREZXZpY2VGbGFnKHZvaWQpIHsgbU1hc2sgfD0ga0VuZERldmljZUZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgRW5kIERldmljZSBmbGFnIGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBFbmQgRGV2aWNlIGZsYWcgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBFbmQgRGV2aWNlIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKi8KKyAgICBib29sIElzRW5kRGV2aWNlRmxhZ1NldCh2b2lkKSB7IHJldHVybiAobU1hc2sgJiBrRW5kRGV2aWNlRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTWFzayBieXRlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1hc2sgIFRoZSBNYXNrIGJ5dGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1hc2sodWludDhfdCBhTWFzaykgeyBtTWFzayA9IGFNYXNrOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtTWFzazsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDb25uZWN0aXZpdHlUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrQ29ubmVjdGl2aXR5KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gKEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSB8fAorICAgICAgICAgICAgICAgIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSAtIHNpemVvZihtU2VkQnVmZmVyU2l6ZSkgLSBzaXplb2YobVNlZERhdGFncmFtQ291bnQpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQYXJlbnQgUHJpb3JpdHkgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUGFyZW50IFByaW9yaXR5IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldFBhcmVudFByaW9yaXR5KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQ4X3Q+KG1QYXJlbnRQcmlvcml0eSAmIGtQYXJlbnRQcmlvcml0eU1hc2spKSA+PiBrUGFyZW50UHJpb3JpdHlPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBhcmVudCBQcmlvcml0eSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYVBhcmVudFByaW9yaXR5ICBUaGUgUGFyZW50IFByaW9yaXR5IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQYXJlbnRQcmlvcml0eShpbnQ4X3QgYVBhcmVudFByaW9yaXR5KSB7CisgICAgICAgIG1QYXJlbnRQcmlvcml0eSA9IChhUGFyZW50UHJpb3JpdHkgPDwga1BhcmVudFByaW9yaXR5T2Zmc2V0KSAmIGtQYXJlbnRQcmlvcml0eU1hc2s7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGluayBRdWFsaXR5IDMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGluayBRdWFsaXR5IDMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtRdWFsaXR5Myh2b2lkKSBjb25zdCB7IHJldHVybiBtTGlua1F1YWxpdHkzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMaW5rIFF1YWxpdHkgMyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSAgVGhlIExpbmsgUXVhbGl0eSAzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rUXVhbGl0eTModWludDhfdCBhTGlua1F1YWxpdHkpIHsgbUxpbmtRdWFsaXR5MyA9IGFMaW5rUXVhbGl0eTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGluayBRdWFsaXR5IDIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGluayBRdWFsaXR5IDIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtRdWFsaXR5Mih2b2lkKSBjb25zdCB7IHJldHVybiBtTGlua1F1YWxpdHkyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMaW5rIFF1YWxpdHkgMiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSAgVGhlIExpbmsgUXVhbGl0eSAyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rUXVhbGl0eTIodWludDhfdCBhTGlua1F1YWxpdHkpIHsgbUxpbmtRdWFsaXR5MiA9IGFMaW5rUXVhbGl0eTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBRdWFsaXR5IDEgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGluayBRdWFsaXR5IDEgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtRdWFsaXR5MSh2b2lkKSBjb25zdCB7IHJldHVybiBtTGlua1F1YWxpdHkxOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMaW5rIFF1YWxpdHkgMSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSAgVGhlIExpbmsgUXVhbGl0eSAxIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rUXVhbGl0eTEodWludDhfdCBhTGlua1F1YWxpdHkpIHsgbUxpbmtRdWFsaXR5MSA9IGFMaW5rUXVhbGl0eTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQWN0aXZlIFJvdXRlcnMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQWN0aXZlIFJvdXRlcnMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldEFjdGl2ZVJvdXRlcnModm9pZCkgY29uc3QgeyByZXR1cm4gbUFjdGl2ZVJvdXRlcnM7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEFjdGl2ZSBSb3V0ZXJzIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFjdGl2ZVJvdXRlcnMgIFRoZSBBY3RpdmUgUm91dGVycyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QWN0aXZlUm91dGVycyh1aW50OF90IGFBY3RpdmVSb3V0ZXJzKSB7IG1BY3RpdmVSb3V0ZXJzID0gYUFjdGl2ZVJvdXRlcnM7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExlYWRlciBDb3N0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExlYWRlciBDb3N0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMZWFkZXJDb3N0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MZWFkZXJDb3N0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMZWFkZXIgQ29zdCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb3N0ICBUaGUgTGVhZGVyIENvc3QgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExlYWRlckNvc3QodWludDhfdCBhQ29zdCkgeyBtTGVhZGVyQ29zdCA9IGFDb3N0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0SWRTZXF1ZW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBtSWRTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VxdWVuY2UgIFRoZSBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWRTZXF1ZW5jZSh1aW50OF90IGFTZXF1ZW5jZSkgeyBtSWRTZXF1ZW5jZSA9IGFTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU0VEIEJ1ZmZlciBTaXplIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFNFRCBCdWZmZXIgU2l6ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFNlZEJ1ZmZlclNpemUodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtU2VkQnVmZmVyU2l6ZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFNFRCBCdWZmZXIgU2l6ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZWRCdWZmZXJTaXplICBUaGUgU0VEIEJ1ZmZlciBTaXplIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWRCdWZmZXJTaXplKHVpbnQxNl90IGFTZWRCdWZmZXJTaXplKSB7IG1TZWRCdWZmZXJTaXplID0gSG9zdFN3YXAxNihhU2VkQnVmZmVyU2l6ZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFNFRCBEYXRhZ3JhbSBDb3VudCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTRUQgRGF0YWdyYW0gQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFNlZERhdGFncmFtQ291bnQodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlZERhdGFncmFtQ291bnQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFNFRCBEYXRhZ3JhbSBDb3VudCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZWREYXRhZ3JhbUNvdW50ICBUaGUgU0VEIERhdGFncmFtIENvdW50IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWREYXRhZ3JhbUNvdW50KHVpbnQ4X3QgYVNlZERhdGFncmFtQ291bnQpIHsgbVNlZERhdGFncmFtQ291bnQgPSBhU2VkRGF0YWdyYW1Db3VudDsgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtQYXJlbnRQcmlvcml0eU9mZnNldCA9IDYsCisgICAgICAgIGtQYXJlbnRQcmlvcml0eU1hc2sgPSAzIDw8IGtQYXJlbnRQcmlvcml0eU9mZnNldCwKKyAgICB9OworCisgICAgdWludDhfdCAgbVBhcmVudFByaW9yaXR5OworICAgIHVpbnQ4X3QgIG1MaW5rUXVhbGl0eTM7CisgICAgdWludDhfdCAgbUxpbmtRdWFsaXR5MjsKKyAgICB1aW50OF90ICBtTGlua1F1YWxpdHkxOworICAgIHVpbnQ4X3QgIG1MZWFkZXJDb3N0OworICAgIHVpbnQ4X3QgIG1JZFNlcXVlbmNlOworICAgIHVpbnQ4X3QgIG1BY3RpdmVSb3V0ZXJzOworICAgIHVpbnQxNl90IG1TZWRCdWZmZXJTaXplOworICAgIHVpbnQ4X3QgIG1TZWREYXRhZ3JhbUNvdW50OworfSAgT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBMaW5rTWFyZ2luVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0xpbmtNYXJnaW4pOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExpbmsgTWFyZ2luIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExpbmsgTWFyZ2luIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rTWFyZ2luKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MaW5rTWFyZ2luOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMaW5rIE1hcmdpbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rTWFyZ2luICBUaGUgTGluayBNYXJnaW4gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExpbmtNYXJnaW4odWludDhfdCBhTGlua01hcmdpbikgeyBtTGlua01hcmdpbiA9IGFMaW5rTWFyZ2luOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtTGlua01hcmdpbjsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBTdGF0dXNUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrU3RhdHVzKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBTdGF0dXMgdmFsdWVzLgorICAgICAqLworICAgIGVudW0gU3RhdHVzCisgICAgeworICAgICAgICBrRXJyb3IgPSAxLCAgIC8vLzwgRXJyb3IuCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFN0YXR1cyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBTdGF0dXMgR2V0U3RhdHVzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0YXR1cz4obVN0YXR1cyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFN0YXR1cyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGF0dXMgIFRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN0YXR1cyhTdGF0dXMgYVN0YXR1cykgeyBtU3RhdHVzID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVN0YXR1cyk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1TdGF0dXM7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVmVyc2lvblRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtWZXJzaW9uKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVZlcnNpb24pOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlcnNpb24gIFRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRWZXJzaW9uKHVpbnQxNl90IGFWZXJzaW9uKSB7IG1WZXJzaW9uID0gSG9zdFN3YXAxNihhVmVyc2lvbik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtVmVyc2lvbjsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBBZGRyZXNzUmVnaXN0cmF0aW9uRW50cnkKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJUHY2IGFkZHJlc3Mgb3IgSUlEIGxlbmd0aC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJUHY2IGFkZHJlc3MgbGVuZ3RoIGlmIHRoZSBDb21wcmVzc2VkIGJpdCBpcyBjbGVhciwgb3IgdGhlIElJRCBsZW5ndGggaWYgdGhlIENvbXByZXNzZWQgYml0IGlzCisgICAgICogICAgICAgICAgc2V0LgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gc2l6ZW9mKG1Db250cm9sKSArIChJc0NvbXByZXNzZWQoKSA/IHNpemVvZihtSWlkKSA6IHNpemVvZihtSXA2QWRkcmVzcykpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIENvbXByZXNzZWQgZmxhZyBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgQ29tcHJlc3NlZCBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgQ29tcHJlc3NlZCBmbGFnIGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQ29tcHJlc3NlZCh2b2lkKSBjb25zdCB7IHJldHVybiAobUNvbnRyb2wgJiBrQ29tcHJlc3NlZCkgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVW5jb21wcmVzc2VkIGZsYWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFVuY29tcHJlc3NlZCh2b2lkKSB7IG1Db250cm9sID0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQ29udGV4dCBJRCBmb3IgdGhlIGNvbXByZXNzZWQgZm9ybS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDb250ZXh0IElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRDb250ZXh0SWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUNvbnRyb2wgJiBrQ2lkTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ29udGV4dCBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0SWQgIFRoZSBDb250ZXh0IElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb250ZXh0SWQodWludDhfdCBhQ29udGV4dElkKSB7IG1Db250cm9sID0ga0NvbXByZXNzZWQgfCBhQ29udGV4dElkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgSUlEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBJSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRJaWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUlpZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUlEIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlpZCAgQSBwb2ludGVyIHRvIHRoZSBJSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElpZChjb25zdCB1aW50OF90ICphSWlkKSB7IG1lbWNweShtSWlkLCBhSWlkLCBzaXplb2YobUlpZCkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgSVB2NiBBZGRyZXNzIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBJUHY2IEFkZHJlc3MgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBJcDY6OkFkZHJlc3MgKkdldElwNkFkZHJlc3Modm9pZCkgY29uc3QgeyByZXR1cm4gJm1JcDZBZGRyZXNzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJUHY2IEFkZHJlc3MgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgQWRkcmVzcyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SXA2QWRkcmVzcyhjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKSB7IG1JcDZBZGRyZXNzID0gYUFkZHJlc3M7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrQ29tcHJlc3NlZCA9IDEgPDwgNywKKyAgICAgICAga0NpZE1hc2sgPSAweGYsCisgICAgfTsKKworICAgIHVpbnQ4X3QgbUNvbnRyb2w7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIHVpbnQ4X3QgbUlpZFtJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZV07CisgICAgICAgIElwNjo6QWRkcmVzcyBtSXA2QWRkcmVzczsKKyAgICB9IE9UX1RPT0xfUEFDS0VEX0ZJRUxEOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNvdXJjZSBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEFkZHJlc3NSZWdpc3RyYXRpb25UbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrQWRkcmVzc1JlZ2lzdHJhdGlvbik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpIDw9IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGkndGggQWRkcmVzcyBFbnRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbmRleCAgVGhlIGluZGV4LgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBpJ3RoIEFkZHJlc3MgRW50cnkuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBBZGRyZXNzUmVnaXN0cmF0aW9uRW50cnkgKkdldEFkZHJlc3NFbnRyeSh1aW50OF90IGFJbmRleCkgY29uc3QgeworICAgICAgICBjb25zdCBBZGRyZXNzUmVnaXN0cmF0aW9uRW50cnkgKmVudHJ5ID0gTlVMTDsKKyAgICAgICAgY29uc3QgdWludDhfdCAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KG1BZGRyZXNzZXMpOworICAgICAgICBjb25zdCB1aW50OF90ICplbmQgPSBjdXIgKyBHZXRMZW5ndGgoKTsKKworICAgICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7CisgICAgICAgICAgICBlbnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQWRkcmVzc1JlZ2lzdHJhdGlvbkVudHJ5ICo+KGN1cik7CisKKyAgICAgICAgICAgIGlmIChhSW5kZXggPT0gMCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXIgKz0gZW50cnktPkdldExlbmd0aCgpOworICAgICAgICAgICAgYUluZGV4LS07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKGN1ciA8IGVuZCkgPyBlbnRyeSA6IE5VTEw7CisgICAgfQorCitwcml2YXRlOgorICAgIEFkZHJlc3NSZWdpc3RyYXRpb25FbnRyeSBtQWRkcmVzc2VzWzRdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENoYW5uZWwgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ2hhbm5lbFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtDaGFubmVsKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDaGFubmVsIFBhZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQ2hhbm5lbCBQYWdlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRDaGFubmVsUGFnZSh2b2lkKSBjb25zdCB7IHJldHVybiBtQ2hhbm5lbFBhZ2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIENoYW5uZWwgUGFnZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsUGFnZSAgVGhlIENoYW5uZWwgUGFnZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q2hhbm5lbFBhZ2UodWludDhfdCBhQ2hhbm5lbFBhZ2UpIHsgbUNoYW5uZWxQYWdlID0gYUNoYW5uZWxQYWdlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDaGFubmVsIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENoYW5uZWwgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRDaGFubmVsKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUNoYW5uZWwpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDaGFubmVsIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoYW5uZWwgIFRoZSBDaGFubmVsIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDaGFubmVsKHVpbnQxNl90IGFDaGFubmVsKSB7IG1DaGFubmVsID0gSG9zdFN3YXAxNihhQ2hhbm5lbCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1DaGFubmVsUGFnZTsKKyAgICB1aW50MTZfdCBtQ2hhbm5lbDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBQQU4gSUQgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgUGFuSWRUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrUGFuSWQpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBBTiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBQQU4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRQYW5JZCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1QYW5JZCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBBTiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQYW5JZCAgVGhlIFBBTiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UGFuSWQodWludDE2X3QgYVBhbklkKSB7IG1QYW5JZCA9IEhvc3RTd2FwMTYoYVBhbklkKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1QYW5JZDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBBY3RpdmUgVGltZXN0YW1wIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEFjdGl2ZVRpbWVzdGFtcFRsdiA6IHB1YmxpYyBUbHYsIHB1YmxpYyBNZXNoQ29QOjpUaW1lc3RhbXAKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsKKyAgICAgICAgU2V0VHlwZShNbGU6OlRsdjo6a0FjdGl2ZVRpbWVzdGFtcCk7CisgICAgICAgIFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOworICAgICAgICBUaW1lc3RhbXA6OkluaXQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFBlbmRpbmcgVGltZXN0YW1wIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFBlbmRpbmdUaW1lc3RhbXBUbHYgOiBwdWJsaWMgVGx2LCBwdWJsaWMgTWVzaENvUDo6VGltZXN0YW1wCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7CisgICAgICAgIFNldFR5cGUoTWxlOjpUbHY6OmtQZW5kaW5nVGltZXN0YW1wKTsKKyAgICAgICAgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7CisgICAgICAgIFRpbWVzdGFtcDo6SW5pdCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgTWxlCisKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUxFX1RMVlNfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YS5jcHAgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGVhNzdhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YS5jcHAKQEAgLTAsMCArMSw2NjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgY29tbW9uIG1ldGhvZHMgZm9yIG1hbmlwdWxhdGluZyBUaHJlYWQgTmV0d29yayBEYXRhLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgIm5ldHdvcmtfZGF0YS50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibmV0d29ya19kYXRhLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTmV0d29ya0RhdGEgeworCitOZXR3b3JrRGF0YTo6TmV0d29ya0RhdGEoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZiwgYm9vbCBhTG9jYWwpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1Mb2NhbChhTG9jYWwpLAorICAgIG1MYXN0QXR0ZW1wdFdhaXQoZmFsc2UpLAorICAgIG1MYXN0QXR0ZW1wdCgwKQoreworICAgIG1MZW5ndGggPSAwOworfQorCisKK3ZvaWQgTmV0d29ya0RhdGE6OkNsZWFyKHZvaWQpCit7CisgICAgbUxlbmd0aCA9IDA7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGE6OkdldE5ldHdvcmtEYXRhKGJvb2wgYVN0YWJsZSwgdWludDhfdCAqYURhdGEsIHVpbnQ4X3QgJmFEYXRhTGVuZ3RoKQoreworICAgIGFzc2VydChhRGF0YSAhPSBOVUxMKTsKKworICAgIG1lbWNweShhRGF0YSwgbVRsdnMsIG1MZW5ndGgpOworICAgIGFEYXRhTGVuZ3RoID0gbUxlbmd0aDsKKworICAgIGlmIChhU3RhYmxlKQorICAgIHsKKyAgICAgICAgUmVtb3ZlVGVtcG9yYXJ5RGF0YShhRGF0YSwgYURhdGFMZW5ndGgpOworICAgIH0KK30KKworb3RFcnJvciBOZXR3b3JrRGF0YTo6R2V0TmV4dE9uTWVzaFByZWZpeChvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcpCit7CisgICAgcmV0dXJuIEdldE5leHRPbk1lc2hQcmVmaXgoYUl0ZXJhdG9yLCBNYWM6OmtTaG9ydEFkZHJCcm9hZGNhc3QsIGFDb25maWcpOworfQorCitvdEVycm9yIE5ldHdvcmtEYXRhOjpHZXROZXh0T25NZXNoUHJlZml4KG90TmV0d29ya0RhdGFJdGVyYXRvciAqYUl0ZXJhdG9yLCB1aW50MTZfdCBhUmxvYzE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEJvcmRlclJvdXRlckNvbmZpZyAqYUNvbmZpZykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzICsgKmFJdGVyYXRvcik7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKworICAgIGZvciAoOyBjdXIgPCBlbmQ7IGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgUHJlZml4VGx2ICpwcmVmaXg7CisgICAgICAgIEJvcmRlclJvdXRlclRsdiAqYm9yZGVyUm91dGVyOworICAgICAgICBCb3JkZXJSb3V0ZXJFbnRyeSAqYm9yZGVyUm91dGVyRW50cnkgPSBOVUxMOworCisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSAhPSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcHJlZml4ID0gc3RhdGljX2Nhc3Q8UHJlZml4VGx2ICo+KGN1cik7CisKKyAgICAgICAgaWYgKChib3JkZXJSb3V0ZXIgPSBGaW5kQm9yZGVyUm91dGVyKCpwcmVmaXgpKSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGJvcmRlclJvdXRlci0+R2V0TnVtRW50cmllcygpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhUmxvYzE2ID09IE1hYzo6a1Nob3J0QWRkckJyb2FkY2FzdCB8fCBib3JkZXJSb3V0ZXItPkdldEVudHJ5KGkpLT5HZXRSbG9jKCkgPT0gYVJsb2MxNikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib3JkZXJSb3V0ZXJFbnRyeSA9IGJvcmRlclJvdXRlci0+R2V0RW50cnkoaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoYm9yZGVyUm91dGVyRW50cnkgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQoYUNvbmZpZywgMCwgc2l6ZW9mKCphQ29uZmlnKSk7CisgICAgICAgIG1lbWNweSgmYUNvbmZpZy0+bVByZWZpeC5tUHJlZml4LCBwcmVmaXgtPkdldFByZWZpeCgpLCBCaXRWZWN0b3JCeXRlcyhwcmVmaXgtPkdldFByZWZpeExlbmd0aCgpKSk7CisgICAgICAgIGFDb25maWctPm1QcmVmaXgubUxlbmd0aCA9IHByZWZpeC0+R2V0UHJlZml4TGVuZ3RoKCk7CisgICAgICAgIGFDb25maWctPm1QcmVmZXJlbmNlID0gYm9yZGVyUm91dGVyRW50cnktPkdldFByZWZlcmVuY2UoKTsKKyAgICAgICAgYUNvbmZpZy0+bVByZWZlcnJlZCA9IGJvcmRlclJvdXRlckVudHJ5LT5Jc1ByZWZlcnJlZCgpOworICAgICAgICBhQ29uZmlnLT5tU2xhYWMgPSBib3JkZXJSb3V0ZXJFbnRyeS0+SXNTbGFhYygpOworICAgICAgICBhQ29uZmlnLT5tRGhjcCA9IGJvcmRlclJvdXRlckVudHJ5LT5Jc0RoY3AoKTsKKyAgICAgICAgYUNvbmZpZy0+bUNvbmZpZ3VyZSA9IGJvcmRlclJvdXRlckVudHJ5LT5Jc0NvbmZpZ3VyZSgpOworICAgICAgICBhQ29uZmlnLT5tRGVmYXVsdFJvdXRlID0gYm9yZGVyUm91dGVyRW50cnktPklzRGVmYXVsdFJvdXRlKCk7CisgICAgICAgIGFDb25maWctPm1Pbk1lc2ggPSBib3JkZXJSb3V0ZXJFbnRyeS0+SXNPbk1lc2goKTsKKyAgICAgICAgYUNvbmZpZy0+bVN0YWJsZSA9IGN1ci0+SXNTdGFibGUoKTsKKyAgICAgICAgYUNvbmZpZy0+bVJsb2MxNiA9IGJvcmRlclJvdXRlckVudHJ5LT5HZXRSbG9jKCk7CisKKyAgICAgICAgKmFJdGVyYXRvciA9IHN0YXRpY19jYXN0PG90TmV0d29ya0RhdGFJdGVyYXRvcj4ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGN1ci0+R2V0TmV4dCgpKSAtIG1UbHZzKTsKKworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOZXR3b3JrRGF0YTo6R2V0TmV4dEV4dGVybmFsUm91dGUob3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsIG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyAqYUNvbmZpZykKK3sKKyAgICByZXR1cm4gR2V0TmV4dEV4dGVybmFsUm91dGUoYUl0ZXJhdG9yLCBNYWM6OmtTaG9ydEFkZHJCcm9hZGNhc3QsIGFDb25maWcpOworfQorCitvdEVycm9yIE5ldHdvcmtEYXRhOjpHZXROZXh0RXh0ZXJuYWxSb3V0ZShvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwgdWludDE2X3QgYVJsb2MxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyAqYUNvbmZpZykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzICsgKmFJdGVyYXRvcik7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKworICAgIGZvciAoOyBjdXIgPCBlbmQ7IGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgUHJlZml4VGx2ICpwcmVmaXg7CisgICAgICAgIEhhc1JvdXRlVGx2ICpoYXNSb3V0ZTsKKyAgICAgICAgSGFzUm91dGVFbnRyeSAqaGFzUm91dGVFbnRyeSA9IE5VTEw7CisKKyAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpICE9IE5ldHdvcmtEYXRhVGx2OjprVHlwZVByZWZpeCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBwcmVmaXggPSBzdGF0aWNfY2FzdDxQcmVmaXhUbHYgKj4oY3VyKTsKKworICAgICAgICBpZiAoKGhhc1JvdXRlID0gRmluZEhhc1JvdXRlKCpwcmVmaXgpKSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGhhc1JvdXRlLT5HZXROdW1FbnRyaWVzKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFSbG9jMTYgPT0gTWFjOjprU2hvcnRBZGRyQnJvYWRjYXN0IHx8IGhhc1JvdXRlLT5HZXRFbnRyeShpKS0+R2V0UmxvYygpID09IGFSbG9jMTYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFzUm91dGVFbnRyeSA9IGhhc1JvdXRlLT5HZXRFbnRyeShpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNSb3V0ZUVudHJ5ID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KGFDb25maWcsIDAsIHNpemVvZigqYUNvbmZpZykpOworICAgICAgICBtZW1jcHkoJmFDb25maWctPm1QcmVmaXgubVByZWZpeCwgcHJlZml4LT5HZXRQcmVmaXgoKSwgQml0VmVjdG9yQnl0ZXMocHJlZml4LT5HZXRQcmVmaXhMZW5ndGgoKSkpOworICAgICAgICBhQ29uZmlnLT5tUHJlZml4Lm1MZW5ndGggPSBwcmVmaXgtPkdldFByZWZpeExlbmd0aCgpOworICAgICAgICBhQ29uZmlnLT5tUHJlZmVyZW5jZSA9IGhhc1JvdXRlRW50cnktPkdldFByZWZlcmVuY2UoKTsKKyAgICAgICAgYUNvbmZpZy0+bVN0YWJsZSA9IGN1ci0+SXNTdGFibGUoKTsKKyAgICAgICAgYUNvbmZpZy0+bU5leHRIb3BJc1RoaXNEZXZpY2UgPSAoaGFzUm91dGVFbnRyeS0+R2V0UmxvYygpID09IEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0UmxvYzE2KCkpOworCisgICAgICAgICphSXRlcmF0b3IgPSBzdGF0aWNfY2FzdDxvdE5ldHdvcmtEYXRhSXRlcmF0b3I+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjdXItPkdldE5leHQoKSkgLSBtVGx2cyk7CisKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgTmV0d29ya0RhdGE6OkNvbnRhaW5zT25NZXNoUHJlZml4ZXMoTmV0d29ya0RhdGEgJmFDb21wYXJlLCB1aW50MTZfdCBhUmxvYzE2KQoreworICAgIG90TmV0d29ya0RhdGFJdGVyYXRvciBvdXRlckl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgb3V0ZXJDb25maWc7CisgICAgYm9vbCBydmFsID0gdHJ1ZTsKKworICAgIHdoaWxlIChhQ29tcGFyZS5HZXROZXh0T25NZXNoUHJlZml4KCZvdXRlckl0ZXJhdG9yLCBhUmxvYzE2LCAmb3V0ZXJDb25maWcpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBvdE5ldHdvcmtEYXRhSXRlcmF0b3IgaW5uZXJJdGVyYXRvciA9IE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklUOworICAgICAgICBvdEJvcmRlclJvdXRlckNvbmZpZyBpbm5lckNvbmZpZzsKKyAgICAgICAgb3RFcnJvciBlcnJvcjsKKworICAgICAgICB3aGlsZSAoKGVycm9yID0gR2V0TmV4dE9uTWVzaFByZWZpeCgmaW5uZXJJdGVyYXRvciwgYVJsb2MxNiwgJmlubmVyQ29uZmlnKSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1lbWNtcCgmb3V0ZXJDb25maWcsICZpbm5lckNvbmZpZywgKHNpemVvZihvdXRlckNvbmZpZykgLSBzaXplb2Yob3V0ZXJDb25maWcubVJsb2MxNikpKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworYm9vbCBOZXR3b3JrRGF0YTo6Q29udGFpbnNFeHRlcm5hbFJvdXRlcyhOZXR3b3JrRGF0YSAmYUNvbXBhcmUsIHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yIG91dGVySXRlcmF0b3IgPSBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVDsKKyAgICBvdEV4dGVybmFsUm91dGVDb25maWcgb3V0ZXJDb25maWc7CisgICAgYm9vbCBydmFsID0gdHJ1ZTsKKworICAgIHdoaWxlIChhQ29tcGFyZS5HZXROZXh0RXh0ZXJuYWxSb3V0ZSgmb3V0ZXJJdGVyYXRvciwgYVJsb2MxNiwgJm91dGVyQ29uZmlnKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGlubmVySXRlcmF0b3IgPSBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVDsKKyAgICAgICAgb3RFeHRlcm5hbFJvdXRlQ29uZmlnIGlubmVyQ29uZmlnOworICAgICAgICBvdEVycm9yIGVycm9yOworCisgICAgICAgIHdoaWxlICgoZXJyb3IgPSBHZXROZXh0RXh0ZXJuYWxSb3V0ZSgmaW5uZXJJdGVyYXRvciwgYVJsb2MxNiwgJmlubmVyQ29uZmlnKSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1lbWNtcCgmb3V0ZXJDb25maWcsICZpbm5lckNvbmZpZywgc2l6ZW9mKG91dGVyQ29uZmlnKSkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGE6OlJlbW92ZVRlbXBvcmFyeURhdGEodWludDhfdCAqYURhdGEsIHVpbnQ4X3QgJmFEYXRhTGVuZ3RoKQoreworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KGFEYXRhKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqZW5kOworICAgIFByZWZpeFRsdiAqcHJlZml4OworICAgIHVpbnQ4X3QgbGVuZ3RoOworICAgIHVpbnQ4X3QgKmRzdDsKKyAgICB1aW50OF90ICpzcmM7CisKKyAgICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAgIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4oYURhdGEgKyBhRGF0YUxlbmd0aCk7CisKKyAgICAgICAgaWYgKGN1ciA+PSBlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChjdXItPkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZVByZWZpeDoKKyAgICAgICAgeworICAgICAgICAgICAgcHJlZml4ID0gcmVpbnRlcnByZXRfY2FzdDxQcmVmaXhUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIFJlbW92ZVRlbXBvcmFyeURhdGEoYURhdGEsIGFEYXRhTGVuZ3RoLCAqcHJlZml4KTsKKworICAgICAgICAgICAgaWYgKHByZWZpeC0+R2V0U3ViVGx2c0xlbmd0aCgpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gc2l6ZW9mKE5ldHdvcmtEYXRhVGx2KSArIGN1ci0+R2V0TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgZHN0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGN1cik7CisgICAgICAgICAgICAgICAgc3JjID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGN1ci0+R2V0TmV4dCgpKTsKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGRzdCwgc3JjLCBhRGF0YUxlbmd0aCAtIHN0YXRpY19jYXN0PHNpemVfdD4oc3JjIC0gYURhdGEpKTsKKyAgICAgICAgICAgICAgICBhRGF0YUxlbmd0aCAtPSBsZW5ndGg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG90RHVtcERlYmdOZXREYXRhKEdldEluc3RhbmNlKCksICJyZW1vdmUgcHJlZml4IGRvbmUiLCBtVGx2cywgbUxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHJlbW92ZSB0ZW1wb3JhcnkgdGx2CisgICAgICAgICAgICBpZiAoIWN1ci0+SXNTdGFibGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBzaXplb2YoTmV0d29ya0RhdGFUbHYpICsgY3VyLT5HZXRMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBkc3QgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oY3VyKTsKKyAgICAgICAgICAgICAgICBzcmMgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oY3VyLT5HZXROZXh0KCkpOworICAgICAgICAgICAgICAgIG1lbW1vdmUoZHN0LCBzcmMsIGFEYXRhTGVuZ3RoIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzcmMgLSBhRGF0YSkpOworICAgICAgICAgICAgICAgIGFEYXRhTGVuZ3RoIC09IGxlbmd0aDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworICAgIG90RHVtcERlYmdOZXREYXRhKEdldEluc3RhbmNlKCksICJyZW1vdmUgZG9uZSIsIGFEYXRhLCBhRGF0YUxlbmd0aCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGE6OlJlbW92ZVRlbXBvcmFyeURhdGEodWludDhfdCAqYURhdGEsIHVpbnQ4X3QgJmFEYXRhTGVuZ3RoLCBQcmVmaXhUbHYgJmFQcmVmaXgpCit7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IGFQcmVmaXguR2V0U3ViVGx2cygpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQ7CisgICAgQm9yZGVyUm91dGVyVGx2ICpib3JkZXJSb3V0ZXI7CisgICAgSGFzUm91dGVUbHYgKmhhc1JvdXRlOworICAgIENvbnRleHRUbHYgKmNvbnRleHQ7CisgICAgQm9yZGVyUm91dGVyRW50cnkgKmJvcmRlclJvdXRlckVudHJ5OworICAgIEhhc1JvdXRlRW50cnkgKmhhc1JvdXRlRW50cnk7CisgICAgdWludDhfdCBsZW5ndGg7CisgICAgdWludDhfdCBjb250ZXh0SWQ7CisgICAgdWludDhfdCAqZHN0OworICAgIHVpbnQ4X3QgKnNyYzsKKworICAgIHdoaWxlICgxKQorICAgIHsKKyAgICAgICAgZW5kID0gYVByZWZpeC5HZXROZXh0KCk7CisKKyAgICAgICAgaWYgKGN1ciA+PSBlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1ci0+SXNTdGFibGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChjdXItPkdldFR5cGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgTmV0d29ya0RhdGFUbHY6OmtUeXBlQm9yZGVyUm91dGVyOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvcmRlclJvdXRlciA9IEZpbmRCb3JkZXJSb3V0ZXIoYVByZWZpeCk7CisKKyAgICAgICAgICAgICAgICBpZiAoKGNvbnRleHQgPSBGaW5kQ29udGV4dChhUHJlZml4KSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnRleHRJZCA9IGNvbnRleHQtPkdldENvbnRleHRJZCgpOworCisgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBwX2JvcmRlcl9yb3V0ZXJfMTYKKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBib3JkZXJSb3V0ZXItPkdldE51bUVudHJpZXMoKTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYm9yZGVyUm91dGVyRW50cnkgPSBib3JkZXJSb3V0ZXItPkdldEVudHJ5KGkpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChib3JkZXJSb3V0ZXJFbnRyeS0+SXNEaGNwKCkgfHwgYm9yZGVyUm91dGVyRW50cnktPklzQ29uZmlndXJlKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJvdXRlckVudHJ5LT5TZXRSbG9jKDB4ZmMwMCB8IGNvbnRleHRJZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSb3V0ZXJFbnRyeS0+U2V0UmxvYygweGZmZmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgTmV0d29ya0RhdGFUbHY6OmtUeXBlSGFzUm91dGU6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFzUm91dGUgPSBGaW5kSGFzUm91dGUoYVByZWZpeCk7CisKKyAgICAgICAgICAgICAgICAvLyByZXBsYWNlIHJfYm9yZGVyX3JvdXRlcl8xNgorICAgICAgICAgICAgICAgIGZvciAodWludDhfdCBqID0gMDsgaiA8IGhhc1JvdXRlLT5HZXROdW1FbnRyaWVzKCk7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhhc1JvdXRlRW50cnkgPSBoYXNSb3V0ZS0+R2V0RW50cnkoaik7CisgICAgICAgICAgICAgICAgICAgIGhhc1JvdXRlRW50cnktPlNldFJsb2MoMHhmZmZlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8ga2VlcCBzdGFibGUgdGx2CisgICAgICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHJlbW92ZSB0ZW1wb3JhcnkgdGx2CisgICAgICAgICAgICBsZW5ndGggPSBzaXplb2YoTmV0d29ya0RhdGFUbHYpICsgY3VyLT5HZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjdXIpOworICAgICAgICAgICAgc3JjID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGN1ci0+R2V0TmV4dCgpKTsKKyAgICAgICAgICAgIG1lbW1vdmUoZHN0LCBzcmMsIGFEYXRhTGVuZ3RoIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzcmMgLSBhRGF0YSkpOworICAgICAgICAgICAgYVByZWZpeC5TZXRTdWJUbHZzTGVuZ3RoKGFQcmVmaXguR2V0U3ViVGx2c0xlbmd0aCgpIC0gbGVuZ3RoKTsKKyAgICAgICAgICAgIGFEYXRhTGVuZ3RoIC09IGxlbmd0aDsKKyAgICAgICAgfQorICAgIH0KK30KKworQm9yZGVyUm91dGVyVGx2ICpOZXR3b3JrRGF0YTo6RmluZEJvcmRlclJvdXRlcihQcmVmaXhUbHYgJmFQcmVmaXgpCit7CisgICAgQm9yZGVyUm91dGVyVGx2ICpydmFsID0gTlVMTDsKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gYVByZWZpeC5HZXRTdWJUbHZzKCk7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZCA9IGFQcmVmaXguR2V0TmV4dCgpOworCisgICAgd2hpbGUgKGN1ciA8IGVuZCkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSA9PSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVCb3JkZXJSb3V0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qm9yZGVyUm91dGVyVGx2ICo+KGN1cikpOworICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitCb3JkZXJSb3V0ZXJUbHYgKk5ldHdvcmtEYXRhOjpGaW5kQm9yZGVyUm91dGVyKFByZWZpeFRsdiAmYVByZWZpeCwgYm9vbCBhU3RhYmxlKQoreworICAgIEJvcmRlclJvdXRlclRsdiAqcnZhbCA9IE5VTEw7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IGFQcmVmaXguR2V0U3ViVGx2cygpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQgPSBhUHJlZml4LkdldE5leHQoKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlQm9yZGVyUm91dGVyICYmCisgICAgICAgICAgICBjdXItPklzU3RhYmxlKCkgPT0gYVN0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gcmVpbnRlcnByZXRfY2FzdDxCb3JkZXJSb3V0ZXJUbHYgKj4oY3VyKSk7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK0hhc1JvdXRlVGx2ICpOZXR3b3JrRGF0YTo6RmluZEhhc1JvdXRlKFByZWZpeFRsdiAmYVByZWZpeCkKK3sKKyAgICBIYXNSb3V0ZVRsdiAqcnZhbCA9IE5VTEw7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IGFQcmVmaXguR2V0U3ViVGx2cygpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQgPSBhUHJlZml4LkdldE5leHQoKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlSGFzUm91dGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFzUm91dGVUbHYgKj4oY3VyKSk7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK0hhc1JvdXRlVGx2ICpOZXR3b3JrRGF0YTo6RmluZEhhc1JvdXRlKFByZWZpeFRsdiAmYVByZWZpeCwgYm9vbCBhU3RhYmxlKQoreworICAgIEhhc1JvdXRlVGx2ICpydmFsID0gTlVMTDsKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gYVByZWZpeC5HZXRTdWJUbHZzKCk7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZCA9IGFQcmVmaXguR2V0TmV4dCgpOworCisgICAgd2hpbGUgKGN1ciA8IGVuZCkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSA9PSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVIYXNSb3V0ZSAmJgorICAgICAgICAgICAgY3VyLT5Jc1N0YWJsZSgpID09IGFTdGFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFzUm91dGVUbHYgKj4oY3VyKSk7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK0NvbnRleHRUbHYgKk5ldHdvcmtEYXRhOjpGaW5kQ29udGV4dChQcmVmaXhUbHYgJmFQcmVmaXgpCit7CisgICAgQ29udGV4dFRsdiAqcnZhbCA9IE5VTEw7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IGFQcmVmaXguR2V0U3ViVGx2cygpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQgPSBhUHJlZml4LkdldE5leHQoKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlQ29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gcmVpbnRlcnByZXRfY2FzdDxDb250ZXh0VGx2ICo+KGN1cikpOworICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitQcmVmaXhUbHYgKk5ldHdvcmtEYXRhOjpGaW5kUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFQcmVmaXgsIHVpbnQ4X3QgYVByZWZpeExlbmd0aCkKK3sKKyAgICByZXR1cm4gRmluZFByZWZpeChhUHJlZml4LCBhUHJlZml4TGVuZ3RoLCBtVGx2cywgbUxlbmd0aCk7Cit9CisKK1ByZWZpeFRsdiAqTmV0d29ya0RhdGE6OkZpbmRQcmVmaXgoY29uc3QgdWludDhfdCAqYVByZWZpeCwgdWludDhfdCBhUHJlZml4TGVuZ3RoLCB1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c0xlbmd0aCkKK3sKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihhVGx2cyk7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4oYVRsdnMgKyBhVGx2c0xlbmd0aCk7CisgICAgUHJlZml4VGx2ICpjb21wYXJlOworCisgICAgd2hpbGUgKGN1ciA8IGVuZCkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSA9PSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbXBhcmUgPSByZWludGVycHJldF9jYXN0PFByZWZpeFRsdiAqPihjdXIpOworCisgICAgICAgICAgICBpZiAoY29tcGFyZS0+R2V0UHJlZml4TGVuZ3RoKCkgPT0gYVByZWZpeExlbmd0aCAmJgorICAgICAgICAgICAgICAgIFByZWZpeE1hdGNoKGNvbXBhcmUtPkdldFByZWZpeCgpLCBhUHJlZml4LCBhUHJlZml4TGVuZ3RoKSA+PSBhUHJlZml4TGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2ludDhfdCBOZXR3b3JrRGF0YTo6UHJlZml4TWF0Y2goY29uc3QgdWludDhfdCAqYSwgY29uc3QgdWludDhfdCAqYiwgdWludDhfdCBhTGVuZ3RoKQoreworICAgIGludDhfdCBydmFsID0gMDsKKyAgICB1aW50OF90IGJ5dGVzID0gQml0VmVjdG9yQnl0ZXMoYUxlbmd0aCk7CisgICAgdWludDhfdCBkaWZmOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykKKyAgICB7CisgICAgICAgIGRpZmYgPSBhW2ldIF4gYltpXTsKKworICAgICAgICBpZiAoZGlmZiA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBydmFsICs9IDg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoKGRpZmYgJiAweDgwKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJ2YWwrKzsKKyAgICAgICAgICAgICAgICBkaWZmIDw8PSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAocnZhbCA+PSBhTGVuZ3RoKSA/IHJ2YWwgOiAtMTsKK30KKworb3RFcnJvciBOZXR3b3JrRGF0YTo6SW5zZXJ0KHVpbnQ4X3QgKmFTdGFydCwgdWludDhfdCBhTGVuZ3RoKQoreworICAgIGFzc2VydChhTGVuZ3RoICsgbUxlbmd0aCA8PSBzaXplb2YobVRsdnMpICYmCisgICAgICAgICAgIG1UbHZzIDw9IGFTdGFydCAmJgorICAgICAgICAgICBhU3RhcnQgPD0gbVRsdnMgKyBtTGVuZ3RoKTsKKyAgICBtZW1tb3ZlKGFTdGFydCArIGFMZW5ndGgsIGFTdGFydCwgbUxlbmd0aCAtIHN0YXRpY19jYXN0PHNpemVfdD4oYVN0YXJ0IC0gbVRsdnMpKTsKKyAgICBtTGVuZ3RoICs9IGFMZW5ndGg7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTmV0d29ya0RhdGE6OlJlbW92ZSh1aW50OF90ICphU3RhcnQsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBhc3NlcnQoYUxlbmd0aCA8PSBtTGVuZ3RoICYmCisgICAgICAgICAgIG1UbHZzIDw9IGFTdGFydCAmJgorICAgICAgICAgICAoYVN0YXJ0IC0gbVRsdnMpICsgYUxlbmd0aCA8PSBtTGVuZ3RoKTsKKyAgICBtZW1tb3ZlKGFTdGFydCwgYVN0YXJ0ICsgYUxlbmd0aCwgbUxlbmd0aCAtIChzdGF0aWNfY2FzdDxzaXplX3Q+KGFTdGFydCAtIG1UbHZzKSArIGFMZW5ndGgpKTsKKyAgICBtTGVuZ3RoIC09IGFMZW5ndGg7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTmV0d29ya0RhdGE6OlNlbmRTZXJ2ZXJEYXRhTm90aWZpY2F0aW9uKHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICBWZXJpZnlPckV4aXQoIW1MYXN0QXR0ZW1wdFdhaXQgfHwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oVGltZXI6OkdldE5vdygpIC0gbUxhc3RBdHRlbXB0KSA8IGtEYXRhUmVzdWJtaXREZWxheSwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9BTFJFQURZKTsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9TRVJWRVJfREFUQSk7CisgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldENvYXAoKS5OZXdNZXNzYWdlKGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBpZiAobUxvY2FsKQorICAgIHsKKyAgICAgICAgVGhyZWFkVGx2IHRsdjsKKyAgICAgICAgdGx2LlNldFR5cGUoVGhyZWFkVGx2OjprVGhyZWFkTmV0d29ya0RhdGEpOworICAgICAgICB0bHYuU2V0TGVuZ3RoKG1MZW5ndGgpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQobVRsdnMsIG1MZW5ndGgpKTsKKyAgICB9CisKKyAgICBpZiAoYVJsb2MxNiAhPSBNYWM6OmtTaG9ydEFkZHJJbnZhbGlkKQorICAgIHsKKyAgICAgICAgVGhyZWFkUmxvYzE2VGx2IHJsb2MxNlRsdjsKKyAgICAgICAgcmxvYzE2VGx2LkluaXQoKTsKKyAgICAgICAgcmxvYzE2VGx2LlNldFJsb2MxNihhUmxvYzE2KTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmcmxvYzE2VGx2LCBzaXplb2YocmxvYzE2VGx2KSkpOworICAgIH0KKworICAgIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFsb2MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgaWYgKG1Mb2NhbCkKKyAgICB7CisgICAgICAgIG1MYXN0QXR0ZW1wdCA9IFRpbWVyOjpHZXROb3coKTsKKyAgICAgICAgbUxhc3RBdHRlbXB0V2FpdCA9IHRydWU7CisgICAgfQorCisgICAgb3RMb2dJbmZvTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAiU2VudCBzZXJ2ZXIgZGF0YSBub3RpZmljYXRpb24iKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGE6OkNsZWFyUmVzdWJtaXREZWxheVRpbWVyKHZvaWQpCit7CisgICAgbUxhc3RBdHRlbXB0V2FpdCA9IGZhbHNlOworfQorCit9ICAvLyBuYW1lc3BhY2UgTmV0d29ya0RhdGEKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YS5ocHAgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDQ1NzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YS5ocHAKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5hZ2luZyBUaHJlYWQgTmV0d29yayBEYXRhLgorICovCisKKyNpZm5kZWYgTkVUV09SS19EQVRBX0hQUF8KKyNkZWZpbmUgTkVUV09SS19EQVRBX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbG93cGFuLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3JvdXRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL25ldHdvcmtfZGF0YV90bHZzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW5ldGRhdGEKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgZ2VuZXJhdGluZywgcHJvY2Vzc2luZywgYW5kIG1hbmFnaW5nIFRocmVhZCBOZXR3b3JrIERhdGEuCisgKgorICogQHsKKyAqCisgKiBAZGVmZ3JvdXAgY29yZS1uZXRkYXRhLWNvcmUgQ29yZQorICogQGRlZmdyb3VwIGNvcmUtbmV0ZGF0YS1sZWFkZXIgTGVhZGVyCisgKiBAZGVmZ3JvdXAgY29yZS1uZXRkYXRhLWxvY2FsIExvY2FsCisgKiBAZGVmZ3JvdXAgY29yZS1uZXRkYXRhLXRsdnMgVExWcworICoKKyAqIEB9CisgKgorICovCisKKy8qKgorICogQG5hbWVzcGFjZSBvdDo6TmV0d29ya0RhdGEKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBuYW1lc3BhY2UgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1hbmFnaW5nIFRocmVhZCBOZXR3b3JrIERhdGEuCisgKgorICovCituYW1lc3BhY2UgTmV0d29ya0RhdGEgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbmV0ZGF0YS1jb3JlCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5hZ2luZyBUaHJlYWQgTmV0d29yayBEYXRhLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE5ldHdvcmsgRGF0YSBwcm9jZXNzaW5nLgorICoKKyAqLworY2xhc3MgTmV0d29ya0RhdGE6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4U2l6ZSA9IDI1NSwgIC8vLzwgTWF4aW11bSBzaXplIG9mIFRocmVhZCBOZXR3b3JrIERhdGEgaW4gYnl0ZXMuCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKiBAcGFyYW1baW5dICBhTG9jYWwgICAgICAgIFRSVUUgaWYgdGhpcyByZXByZXNlbnRzIGxvY2FsIG5ldHdvcmsgZGF0YSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgTmV0d29ya0RhdGEoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZiwgYm9vbCBhTG9jYWwpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBuZXR3b3JrIGRhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgYSBmdWxsIG9yIHN0YWJsZSBjb3B5IG9mIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgICAgYVN0YWJsZSAgICAgIFRSVUUgd2hlbiBjb3B5aW5nIHRoZSBzdGFibGUgdmVyc2lvbiwgRkFMU0Ugd2hlbiBjb3B5aW5nIHRoZSBmdWxsIHZlcnNpb24uCisgICAgICogQHBhcmFtW291dF0gICAgYURhdGEgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIuCisgICAgICogQHBhcmFtW2lub3V0XSAgYURhdGFMZW5ndGggIE9uIGVudHJ5LCBzaXplIG9mIHRoZSBkYXRhIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBwIGFEYXRhLgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBleGl0LCBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgorICAgICAqLworICAgIHZvaWQgR2V0TmV0d29ya0RhdGEoYm9vbCBhU3RhYmxlLCB1aW50OF90ICphRGF0YSwgdWludDhfdCAmYURhdGFMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgdGhlIG5leHQgT24gTWVzaCBwcmVmaXggaW4gdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5vdXRdICBhSXRlcmF0b3IgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhIGl0ZXJhdG9yIGNvbnRleHQuCisgICAgICogQHBhcmFtW291dF0gICAgYUNvbmZpZyAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIE9uIE1lc2ggUHJlZml4IGluZm9ybWF0aW9uIHdpbGwgYmUgcGxhY2VkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCB0aGUgbmV4dCBPbiBNZXNoIHByZWZpeC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgTm8gc3Vic2VxdWVudCBPbiBNZXNoIHByZWZpeCBleGlzdHMgaW4gdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldE5leHRPbk1lc2hQcmVmaXgob3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsIG90Qm9yZGVyUm91dGVyQ29uZmlnICphQ29uZmlnKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIHRoZSBuZXh0IE9uIE1lc2ggcHJlZml4IGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhIGZvciBhIGdpdmVuIFJMT0MxNi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFJdGVyYXRvciAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEgaXRlcmF0b3IgY29udGV4dC4KKyAgICAgKiBAcGFyYW1baW5dICAgICBhUmxvYzE2ICAgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICogQHBhcmFtW291dF0gICAgYUNvbmZpZyAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIE9uIE1lc2ggUHJlZml4IGluZm9ybWF0aW9uIHdpbGwgYmUgcGxhY2VkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCB0aGUgbmV4dCBPbiBNZXNoIHByZWZpeC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgTm8gc3Vic2VxdWVudCBPbiBNZXNoIHByZWZpeCBleGlzdHMgaW4gdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldE5leHRPbk1lc2hQcmVmaXgob3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsIHVpbnQxNl90IGFSbG9jMTYsIG90Qm9yZGVyUm91dGVyQ29uZmlnICphQ29uZmlnKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIHRoZSBuZXh0IGV4dGVybmFsIHJvdXRlIGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2lub3V0XSAgYUl0ZXJhdG9yICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgRGF0YSBpdGVyYXRvciBjb250ZXh0LgorICAgICAqIEBwYXJhbVtvdXRdICAgIGFDb25maWcgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBleHRlcm5hbCByb3V0ZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgZm91bmQgdGhlIG5leHQgZXh0ZXJuYWwgcm91dGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE5vIHN1YnNlcXVlbnQgZXh0ZXJuYWwgcm91dGUgZXhpc3RzIGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXROZXh0RXh0ZXJuYWxSb3V0ZShvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwgb3RFeHRlcm5hbFJvdXRlQ29uZmlnICphQ29uZmlnKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIHRoZSBuZXh0IGV4dGVybmFsIHJvdXRlIGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhIGZvciBhIGdpdmVuIFJMT0MxNi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFJdGVyYXRvciAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEgaXRlcmF0b3IgY29udGV4dC4KKyAgICAgKiBAcGFyYW1baW5dICAgICBhUmxvYzE2ICAgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICogQHBhcmFtW291dF0gICAgYUNvbmZpZyAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGV4dGVybmFsIHJvdXRlIGluZm9ybWF0aW9uIHdpbGwgYmUgcGxhY2VkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCB0aGUgbmV4dCBleHRlcm5hbCByb3V0ZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgTm8gc3Vic2VxdWVudCBleHRlcm5hbCByb3V0ZSBleGlzdHMgaW4gdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldE5leHRFeHRlcm5hbFJvdXRlKG90TmV0d29ya0RhdGFJdGVyYXRvciAqYUl0ZXJhdG9yLCB1aW50MTZfdCBhUmxvYzE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RFeHRlcm5hbFJvdXRlQ29uZmlnICphQ29uZmlnKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSBjb250YWlucyBhbGwgb2YgdGhlIG9uIG1lc2ggcHJlZml4IGluZm9ybWF0aW9uCisgICAgICogaW4gQHAgYUNvbXBhcmUgYXNzb2NpYXRlZCB3aXRoIEBwIGFSbG9jMTYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29tcGFyZSAgVGhlIE5ldHdvcmsgRGF0YSB0byB1c2UgZm9yIHRoZSBxdWVyeS4KKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICAgVGhlIFJMT0MxNiB0byBjb25zaWRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgdGhpcyBvYmplY3QgY29udGFpbnMgYWxsIG9uIG1lc2ggcHJlZml4IGluZm9ybWF0aW9uIGluIEBwIGFDb21wYXJlIGFzc29jaWF0ZWQgd2l0aCBAcCBhUmxvYzE2LAorICAgICAqICAgICAgICAgIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgQ29udGFpbnNPbk1lc2hQcmVmaXhlcyhOZXR3b3JrRGF0YSAmYUNvbXBhcmUsIHVpbnQxNl90IGFSbG9jMTYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUaHJlYWQgTmV0d29yayBEYXRhIGNvbnRhaW5zIGFsbCBvZiB0aGUgZXh0ZXJuYWwgcm91dGUgaW5mb3JtYXRpb24KKyAgICAgKiBpbiBAcCBhQ29tcGFyZSBhc3NvY2lhdGVkIHdpdGggQHAgYVJsb2MxNi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb21wYXJlICBUaGUgTmV0d29yayBEYXRhIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgICBUaGUgUkxPQzE2IHRvIGNvbnNpZGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiB0aGlzIG9iamVjdCBjb250YWlucyBhbGwgZXh0ZXJuYWwgcm91dGUgaW5mb3JtYXRpb24gaW4gQHAgYUNvbXBhcmUgYXNzb2NpYXRlZCB3aXRoIEBwIGFSbG9jMTYsCisgICAgICogICAgICAgICAgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBDb250YWluc0V4dGVybmFsUm91dGVzKE5ldHdvcmtEYXRhICZhQ29tcGFyZSwgdWludDE2X3QgYVJsb2MxNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjYW5jZWxzIHRoZSBkYXRhIHJlc3VibWl0IGRlbGF5IHRpbWVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhclJlc3VibWl0RGVsYXlUaW1lcih2b2lkKTsKKworcHJvdGVjdGVkOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBCb3JkZXIgUm91dGVyIFRMViB3aXRoaW4gYSBnaXZlbiBQcmVmaXggVExWLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeCAgQSByZWZlcmVuY2UgdG8gdGhlIFByZWZpeCBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIEJvcmRlciBSb3V0ZXIgVExWIGlmIG9uZSBpcyBmb3VuZCBvciBOVUxMIGlmIG5vIEJvcmRlciBSb3V0ZXIgVExWIGV4aXN0cy4KKyAgICAgKgorICAgICAqLworICAgIEJvcmRlclJvdXRlclRsdiAqRmluZEJvcmRlclJvdXRlcihQcmVmaXhUbHYgJmFQcmVmaXgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0YWJsZSBvciBub24tc3RhYmxlIEJvcmRlciBSb3V0ZXIgVExWIHdpdGhpbiBhIGdpdmVuIFByZWZpeCBUTFYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4ICBBIHJlZmVyZW5jZSB0byB0aGUgUHJlZml4IFRMVi4KKyAgICAgKiBAcGFyYW1baW5dICBhU3RhYmxlICBUUlVFIGlmIHJlcXVlc3RpbmcgYSBzdGFibGUgQm9yZGVyIFJvdXRlciBUTFYsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgQm9yZGVyIFJvdXRlciBUTFYgaWYgb25lIGlzIGZvdW5kIG9yIE5VTEwgaWYgbm8gQm9yZGVyIFJvdXRlciBUTFYgZXhpc3RzLgorICAgICAqCisgICAgICovCisgICAgQm9yZGVyUm91dGVyVGx2ICpGaW5kQm9yZGVyUm91dGVyKFByZWZpeFRsdiAmYVByZWZpeCwgYm9vbCBhU3RhYmxlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBIYXMgUm91dGUgVExWIHdpdGhpbiBhIGdpdmVuIFByZWZpeCBUTFYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4ICBBIHJlZmVyZW5jZSB0byB0aGUgUHJlZml4IFRMVi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgSGFzIFJvdXRlIFRMViBpZiBvbmUgaXMgZm91bmQgb3IgTlVMTCBpZiBubyBIYXMgUm91dGUgVExWIGV4aXN0cy4KKyAgICAgKgorICAgICAqLworICAgIEhhc1JvdXRlVGx2ICpGaW5kSGFzUm91dGUoUHJlZml4VGx2ICZhUHJlZml4KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdGFibGUgb3Igbm9uLXN0YWJsZSBIYXMgUm91dGUgVExWIHdpdGhpbiBhIGdpdmVuIFByZWZpeCBUTFYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4ICBBIHJlZmVyZW5jZSB0byB0aGUgUHJlZml4IFRMVi4KKyAgICAgKiBAcGFyYW1baW5dICBhU3RhYmxlICBUUlVFIGlmIHJlcXVlc3RpbmcgYSBzdGFibGUgSGFzIFJvdXRlIFRMViwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBIYXMgUm91dGUgVExWIGlmIG9uZSBpcyBmb3VuZCBvciBOVUxMIGlmIG5vIEhhcyBSb3V0ZSBUTFYgZXhpc3RzLgorICAgICAqCisgICAgICovCisgICAgSGFzUm91dGVUbHYgKkZpbmRIYXNSb3V0ZShQcmVmaXhUbHYgJmFQcmVmaXgsIGJvb2wgYVN0YWJsZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgQ29udGV4dCBUTFYgd2l0aGluIGEgZ2l2ZW4gUHJlZml4IFRMVi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXggIEEgcmVmZXJlbmNlIHRvIHRoZSBQcmVmaXggVExWLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBDb250ZXh0IFRMViBpcyBvbmUgaXMgZm91bmQgb3IgTlVMTCBpZiBubyBDb250ZXh0IFRMViBleGlzdHMuCisgICAgICoKKyAgICAgKi8KKyAgICBDb250ZXh0VGx2ICpGaW5kQ29udGV4dChQcmVmaXhUbHYgJmFQcmVmaXgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBQcmVmaXggVExWLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeCAgICAgICAgQSBwb2ludGVyIHRvIGFuIElQdjYgcHJlZml4LgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXhMZW5ndGggIFRoZSBwcmVmaXggbGVuZ3RoIHBvaW50ZWQgdG8gYnkgQHAgYVByZWZpeC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgUHJlZml4IFRMViBpcyBvbmUgaXMgZm91bmQgb3IgTlVMTCBpZiBubyBtYXRjaGluZyBQcmVmaXggVExWIGV4aXN0cy4KKyAgICAgKgorICAgICAqLworICAgIFByZWZpeFRsdiAqRmluZFByZWZpeChjb25zdCB1aW50OF90ICphUHJlZml4LCB1aW50OF90IGFQcmVmaXhMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBQcmVmaXggVExWIGluIGEgc3BlY2lmaWVkIHRsdnMgYnVmZmVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeCAgICAgICAgQSBwb2ludGVyIHRvIGFuIElQdjYgcHJlZml4LgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXhMZW5ndGggIFRoZSBwcmVmaXggbGVuZ3RoIHBvaW50ZWQgdG8gYnkgQHAgYVByZWZpeC4KKyAgICAgKiBAcGFyYW1baW5dICBhVGx2cyAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBzcGVjaWZpZWQgdGx2cyBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYVRsdnNMZW5ndGggICAgVGhlIHNwZWNpZmllZCB0bHZzIGJ1ZmZlciBsZW5ndGggcG9pbnRlZCB0byBieSBAcCBhVGx2cy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgUHJlZml4IFRMViBpcyBvbmUgaXMgZm91bmQgb3IgTlVMTCBpZiBubyBtYXRjaGluZyBQcmVmaXggVExWIGV4aXN0cy4KKyAgICAgKgorICAgICAqLworICAgIFByZWZpeFRsdiAqRmluZFByZWZpeChjb25zdCB1aW50OF90ICphUHJlZml4LCB1aW50OF90IGFQcmVmaXhMZW5ndGgsIHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFUbHZzTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluc2VydHMgYnl0ZXMgaW50byB0aGUgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVN0YXJ0ICAgQSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGluc2VydGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGluc2VydC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgaW5zZXJ0ZWQgYnl0ZXMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgdG8gaW5zZXJ0IGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBJbnNlcnQodWludDhfdCAqYVN0YXJ0LCB1aW50OF90IGFMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBieXRlcyBmcm9tIHRoZSBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU3RhcnQgICBBIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVtb3ZhbC4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlbW92ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVtb3ZlKHVpbnQ4X3QgKmFTdGFydCwgdWludDhfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0cmlwcyBub24tc3RhYmxlIGRhdGEgZnJvbSB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFEYXRhICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgRGF0YSB0byBtb2RpZnkuCisgICAgICogQHBhcmFtW2lub3V0XSAgYURhdGFMZW5ndGggIE9uIGVudHJ5LCB0aGUgc2l6ZSBvZiB0aGUgTmV0d29yayBEYXRhIGluIGJ5dGVzLiAgT24gZXhpdCwgdGhlIHNpemUgb2YgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGluZyBOZXR3b3JrIERhdGEgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlbW92ZVRlbXBvcmFyeURhdGEodWludDhfdCAqYURhdGEsIHVpbnQ4X3QgJmFEYXRhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0cmlwcyBub24tc3RhYmxlIFN1Yi1UTFZzIGZyb20gYSBQcmVmaXggVExWLgorICAgICAqCisgICAgICogQHBhcmFtW2lub3V0XSAgYURhdGEgICAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhIHRvIG1vZGlmeS4KKyAgICAgKiBAcGFyYW1baW5vdXRdICBhRGF0YUxlbmd0aCAgT24gZW50cnksIHRoZSBzaXplIG9mIHRoZSBOZXR3b3JrIERhdGEgaW4gYnl0ZXMuICBPbiBleGl0LCB0aGUgc2l6ZSBvZiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0aW5nIE5ldHdvcmsgRGF0YSBpbiBieXRlcy4KKyAgICAgKiBAcGFyYW1baW5vdXRdICBhUHJlZml4ICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIFByZWZpeCBUTFYgdG8gbW9kaWZ5LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmVUZW1wb3JhcnlEYXRhKHVpbnQ4X3QgKmFEYXRhLCB1aW50OF90ICZhRGF0YUxlbmd0aCwgUHJlZml4VGx2ICZhUHJlZml4KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNvbXB1dGVzIHRoZSBudW1iZXIgb2YgSVB2NiBQcmVmaXggYml0cyB0aGF0IG1hdGNoLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBJUHY2IFByZWZpeC4KKyAgICAgKiBAcGFyYW1baW5dICBiICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBJUHY2IHByZWZpeC4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgbWF4aW11bSBsZW5ndGggaW4gYml0cyB0byBjb21wYXJlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBtYXRjaGluZyBiaXRzLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IFByZWZpeE1hdGNoKGNvbnN0IHVpbnQ4X3QgKmEsIGNvbnN0IHVpbnQ4X3QgKmIsIHVpbnQ4X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIFNlcnZlciBEYXRhIE5vdGlmaWNhdGlvbiBtZXNzYWdlIHRvIHRoZSBMZWFkZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICBUaGUgb2xkIFJMT0MxNiB2YWx1ZSB0aGF0IHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBlbnF1ZXVlZCB0aGUgbm90aWZpY2F0aW9uIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgbWVzc2FnZSBidWZmZXJzIHRvIGdlbmVyYXRlIHRoZSBub3RpZmljYXRpb24gbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZFNlcnZlckRhdGFOb3RpZmljYXRpb24odWludDE2X3QgYVJsb2MxNik7CisKKyAgICB1aW50OF90IG1UbHZzW2tNYXhTaXplXTsgIC8vLzwgVGhlIE5ldHdvcmsgRGF0YSBidWZmZXIuCisgICAgdWludDhfdCBtTGVuZ3RoOyAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgdmFsaWQgYnl0ZXMgaW4gQHZhciBtVGx2cy4KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrRGF0YVJlc3VibWl0RGVsYXkgPSAzMDAwMDAsICAvLy88IERBVEFfUkVTVUJNSVRfREVMQVkgKG1pbGlzZWNvbmRzKQorICAgIH07CisKKyAgICBjb25zdCBib29sICAgICAgbUxvY2FsOworICAgIGJvb2wgICAgICAgICAgICBtTGFzdEF0dGVtcHRXYWl0OworICAgIHVpbnQzMl90ICAgICAgICBtTGFzdEF0dGVtcHQ7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTmV0d29ya0RhdGEKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5FVFdPUktfREFUQV9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlci5jcHAgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU3NWQxOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyLmNwcApAQCAtMCwwICsxLDU0MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSBtYW5hZ2VkIGJ5IHRoZSBUaHJlYWQgTGVhZGVyLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgIm5ldHdvcmtfZGF0YV9sZWFkZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm5ldHdvcmtfZGF0YV9sZWFkZXIuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbG93cGFuLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTmV0d29ya0RhdGEgeworCitMZWFkZXJCYXNlOjpMZWFkZXJCYXNlKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOgorICAgIE5ldHdvcmtEYXRhKGFUaHJlYWROZXRpZiwgZmFsc2UpCit7CisgICAgUmVzZXQoKTsKK30KKwordm9pZCBMZWFkZXJCYXNlOjpSZXNldCh2b2lkKQoreworICAgIG1WZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgIG1TdGFibGVWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgIG1MZW5ndGggPSAwOworICAgIEdldE5ldGlmKCkuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfTkVUREFUQSk7Cit9CisKK290RXJyb3IgTGVhZGVyQmFzZTo6R2V0Q29udGV4dChjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzLCBMb3dwYW46OkNvbnRleHQgJmFDb250ZXh0KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgUHJlZml4VGx2ICpwcmVmaXg7CisgICAgQ29udGV4dFRsdiAqY29udGV4dFRsdjsKKworICAgIGFDb250ZXh0Lm1QcmVmaXhMZW5ndGggPSAwOworCisgICAgaWYgKFByZWZpeE1hdGNoKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbFByZWZpeCgpLCBhQWRkcmVzcy5tRmllbGRzLm04LCA2NCkgPj0gMCkKKyAgICB7CisgICAgICAgIGFDb250ZXh0Lm1QcmVmaXggPSBuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWxQcmVmaXgoKTsKKyAgICAgICAgYUNvbnRleHQubVByZWZpeExlbmd0aCA9IDY0OworICAgICAgICBhQ29udGV4dC5tQ29udGV4dElkID0gMDsKKyAgICAgICAgYUNvbnRleHQubUNvbXByZXNzRmxhZyA9IHRydWU7CisgICAgfQorCisgICAgZm9yIChOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyk7CisgICAgICAgICBjdXIgPCByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSAhPSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcHJlZml4ID0gc3RhdGljX2Nhc3Q8UHJlZml4VGx2ICo+KGN1cik7CisKKyAgICAgICAgaWYgKFByZWZpeE1hdGNoKHByZWZpeC0+R2V0UHJlZml4KCksIGFBZGRyZXNzLm1GaWVsZHMubTgsIHByZWZpeC0+R2V0UHJlZml4TGVuZ3RoKCkpIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0VGx2ID0gRmluZENvbnRleHQoKnByZWZpeCk7CisKKyAgICAgICAgaWYgKGNvbnRleHRUbHYgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJlZml4LT5HZXRQcmVmaXhMZW5ndGgoKSA+IGFDb250ZXh0Lm1QcmVmaXhMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFDb250ZXh0Lm1QcmVmaXggPSBwcmVmaXgtPkdldFByZWZpeCgpOworICAgICAgICAgICAgYUNvbnRleHQubVByZWZpeExlbmd0aCA9IHByZWZpeC0+R2V0UHJlZml4TGVuZ3RoKCk7CisgICAgICAgICAgICBhQ29udGV4dC5tQ29udGV4dElkID0gY29udGV4dFRsdi0+R2V0Q29udGV4dElkKCk7CisgICAgICAgICAgICBhQ29udGV4dC5tQ29tcHJlc3NGbGFnID0gY29udGV4dFRsdi0+SXNDb21wcmVzcygpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIChhQ29udGV4dC5tUHJlZml4TGVuZ3RoID4gMCkgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfTk9UX0ZPVU5EOworfQorCitvdEVycm9yIExlYWRlckJhc2U6OkdldENvbnRleHQodWludDhfdCBhQ29udGV4dElkLCBMb3dwYW46OkNvbnRleHQgJmFDb250ZXh0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgUHJlZml4VGx2ICpwcmVmaXg7CisgICAgQ29udGV4dFRsdiAqY29udGV4dFRsdjsKKworICAgIGlmIChhQ29udGV4dElkID09IDApCisgICAgeworICAgICAgICBhQ29udGV4dC5tUHJlZml4ID0gR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRNZXNoTG9jYWxQcmVmaXgoKTsKKyAgICAgICAgYUNvbnRleHQubVByZWZpeExlbmd0aCA9IDY0OworICAgICAgICBhQ29udGV4dC5tQ29udGV4dElkID0gMDsKKyAgICAgICAgYUNvbnRleHQubUNvbXByZXNzRmxhZyA9IHRydWU7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICB9CisKKyAgICBmb3IgKE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzKTsKKyAgICAgICAgIGN1ciA8IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKyAgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpICE9IE5ldHdvcmtEYXRhVGx2OjprVHlwZVByZWZpeCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBwcmVmaXggPSBzdGF0aWNfY2FzdDxQcmVmaXhUbHYgKj4oY3VyKTsKKyAgICAgICAgY29udGV4dFRsdiA9IEZpbmRDb250ZXh0KCpwcmVmaXgpOworCisgICAgICAgIGlmIChjb250ZXh0VGx2ID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbnRleHRUbHYtPkdldENvbnRleHRJZCgpICE9IGFDb250ZXh0SWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYUNvbnRleHQubVByZWZpeCA9IHByZWZpeC0+R2V0UHJlZml4KCk7CisgICAgICAgIGFDb250ZXh0Lm1QcmVmaXhMZW5ndGggPSBwcmVmaXgtPkdldFByZWZpeExlbmd0aCgpOworICAgICAgICBhQ29udGV4dC5tQ29udGV4dElkID0gY29udGV4dFRsdi0+R2V0Q29udGV4dElkKCk7CisgICAgICAgIGFDb250ZXh0Lm1Db21wcmVzc0ZsYWcgPSBjb250ZXh0VGx2LT5Jc0NvbXByZXNzKCk7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSIHx8IE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorb3RFcnJvciBMZWFkZXJCYXNlOjpHZXRSbG9jQnlDb250ZXh0SWQodWludDhfdCBhQ29udGV4dElkLCB1aW50MTZfdCAmYVJsb2MxNikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgIExvd3Bhbjo6Q29udGV4dCBsb3dwYW5Db250ZXh0OworCisgICAgaWYgKChHZXRDb250ZXh0KGFDb250ZXh0SWQsIGxvd3BhbkNvbnRleHQpKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisgICAgICAgIG90Qm9yZGVyUm91dGVyQ29uZmlnIGNvbmZpZzsKKworICAgICAgICB3aGlsZSAoR2V0TmV4dE9uTWVzaFByZWZpeCgmaXRlcmF0b3IsICZjb25maWcpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvdElwNlByZWZpeE1hdGNoKCYoY29uZmlnLm1QcmVmaXgubVByZWZpeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IG90SXA2QWRkcmVzcyAqPihsb3dwYW5Db250ZXh0Lm1QcmVmaXgpKSA+PSBjb25maWcubVByZWZpeC5tTGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFSbG9jMTYgPSBjb25maWcubVJsb2MxNjsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIgfHwgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKK2Jvb2wgTGVhZGVyQmFzZTo6SXNPbk1lc2goY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBQcmVmaXhUbHYgKnByZWZpeDsKKyAgICBib29sIHJ2YWwgPSBmYWxzZTsKKworICAgIGlmIChtZW1jbXAoYUFkZHJlc3MubUZpZWxkcy5tOCwgR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRNZXNoTG9jYWxQcmVmaXgoKSwgOCkgPT0gMCkKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IHRydWUpOworICAgIH0KKworICAgIGZvciAoTmV0d29ya0RhdGFUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMpOworICAgICAgICAgY3VyIDwgcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworICAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgIT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlUHJlZml4KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZWZpeCA9IHN0YXRpY19jYXN0PFByZWZpeFRsdiAqPihjdXIpOworCisgICAgICAgIGlmIChQcmVmaXhNYXRjaChwcmVmaXgtPkdldFByZWZpeCgpLCBhQWRkcmVzcy5tRmllbGRzLm04LCBwcmVmaXgtPkdldFByZWZpeExlbmd0aCgpKSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZpbmRCb3JkZXJSb3V0ZXIoKnByZWZpeCkgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK290RXJyb3IgTGVhZGVyQmFzZTo6Um91dGVMb29rdXAoY29uc3QgSXA2OjpBZGRyZXNzICZhU291cmNlLCBjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVByZWZpeE1hdGNoLCB1aW50MTZfdCAqYVJsb2MxNikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEU7CisgICAgUHJlZml4VGx2ICpwcmVmaXg7CisKKyAgICBmb3IgKE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzKTsKKyAgICAgICAgIGN1ciA8IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKyAgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpICE9IE5ldHdvcmtEYXRhVGx2OjprVHlwZVByZWZpeCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBwcmVmaXggPSBzdGF0aWNfY2FzdDxQcmVmaXhUbHYgKj4oY3VyKTsKKworICAgICAgICBpZiAoUHJlZml4TWF0Y2gocHJlZml4LT5HZXRQcmVmaXgoKSwgYVNvdXJjZS5tRmllbGRzLm04LCBwcmVmaXgtPkdldFByZWZpeExlbmd0aCgpKSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRXh0ZXJuYWxSb3V0ZUxvb2t1cChwcmVmaXgtPkdldERvbWFpbklkKCksIGFEZXN0aW5hdGlvbiwgYVByZWZpeE1hdGNoLCBhUmxvYzE2KSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKERlZmF1bHRSb3V0ZUxvb2t1cCgqcHJlZml4LCBhUmxvYzE2KSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhUHJlZml4TWF0Y2gpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqYVByZWZpeE1hdGNoID0gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExlYWRlckJhc2U6OkV4dGVybmFsUm91dGVMb29rdXAodWludDhfdCBhRG9tYWluSWQsIGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFQcmVmaXhNYXRjaCwgdWludDE2X3QgKmFSbG9jMTYpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEU7CisgICAgUHJlZml4VGx2ICpwcmVmaXg7CisgICAgSGFzUm91dGVUbHYgKmhhc1JvdXRlOworICAgIEhhc1JvdXRlRW50cnkgKmVudHJ5OworICAgIEhhc1JvdXRlRW50cnkgKnJ2YWxSb3V0ZSA9IE5VTEw7CisgICAgdWludDhfdCBydmFsX3BsZW4gPSAwOworICAgIGludDhfdCBwbGVuOworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXI7CisgICAgTmV0d29ya0RhdGFUbHYgKnN1YkN1cjsKKworICAgIGZvciAoY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyk7CisgICAgICAgICBjdXIgPCByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSAhPSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcHJlZml4ID0gc3RhdGljX2Nhc3Q8UHJlZml4VGx2ICo+KGN1cik7CisKKyAgICAgICAgaWYgKHByZWZpeC0+R2V0RG9tYWluSWQoKSAhPSBhRG9tYWluSWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcGxlbiA9IFByZWZpeE1hdGNoKHByZWZpeC0+R2V0UHJlZml4KCksIGFEZXN0aW5hdGlvbi5tRmllbGRzLm04LCBwcmVmaXgtPkdldFByZWZpeExlbmd0aCgpKTsKKworICAgICAgICBpZiAocGxlbiA+IHJ2YWxfcGxlbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc2VsZWN0IGJvcmRlciByb3V0ZXIKKyAgICAgICAgICAgIGZvciAoc3ViQ3VyID0gcHJlZml4LT5HZXRTdWJUbHZzKCk7IHN1YkN1ciA8IHByZWZpeC0+R2V0TmV4dCgpOyBzdWJDdXIgPSBzdWJDdXItPkdldE5leHQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc3ViQ3VyLT5HZXRUeXBlKCkgIT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlSGFzUm91dGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoYXNSb3V0ZSA9IHN0YXRpY19jYXN0PEhhc1JvdXRlVGx2ICo+KHN1YkN1cik7CisKKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBoYXNSb3V0ZS0+R2V0TnVtRW50cmllcygpOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IGhhc1JvdXRlLT5HZXRFbnRyeShpKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocnZhbFJvdXRlID09IE5VTEwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5HZXRQcmVmZXJlbmNlKCkgPiBydmFsUm91dGUtPkdldFByZWZlcmVuY2UoKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKGVudHJ5LT5HZXRQcmVmZXJlbmNlKCkgPT0gcnZhbFJvdXRlLT5HZXRQcmVmZXJlbmNlKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRNbGUoKS5HZXRDb3N0KGVudHJ5LT5HZXRSbG9jKCkpIDwgbmV0aWYuR2V0TWxlKCkuR2V0Q29zdChydmFsUm91dGUtPkdldFJsb2MoKSkpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBydmFsUm91dGUgPSBlbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ2YWxfcGxlbiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHBsZW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocnZhbFJvdXRlICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAoYVJsb2MxNiAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICAqYVJsb2MxNiA9IHJ2YWxSb3V0ZS0+R2V0UmxvYygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFQcmVmaXhNYXRjaCAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICAqYVByZWZpeE1hdGNoID0gcnZhbF9wbGVuOworICAgICAgICB9CisKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBMZWFkZXJCYXNlOjpEZWZhdWx0Um91dGVMb29rdXAoUHJlZml4VGx2ICZhUHJlZml4LCB1aW50MTZfdCAqYVJsb2MxNikKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT19ST1VURTsKKyAgICBCb3JkZXJSb3V0ZXJUbHYgKmJvcmRlclJvdXRlcjsKKyAgICBCb3JkZXJSb3V0ZXJFbnRyeSAqZW50cnk7CisgICAgQm9yZGVyUm91dGVyRW50cnkgKnJvdXRlID0gTlVMTDsKKworICAgIGZvciAoTmV0d29ya0RhdGFUbHYgKmN1ciA9IGFQcmVmaXguR2V0U3ViVGx2cygpOyBjdXIgPCBhUHJlZml4LkdldE5leHQoKTsgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgIT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlQm9yZGVyUm91dGVyKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvcmRlclJvdXRlciA9IHN0YXRpY19jYXN0PEJvcmRlclJvdXRlclRsdiAqPihjdXIpOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGJvcmRlclJvdXRlci0+R2V0TnVtRW50cmllcygpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGVudHJ5ID0gYm9yZGVyUm91dGVyLT5HZXRFbnRyeShpKTsKKworICAgICAgICAgICAgaWYgKGVudHJ5LT5Jc0RlZmF1bHRSb3V0ZSgpID09IGZhbHNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocm91dGUgPT0gTlVMTCB8fAorICAgICAgICAgICAgICAgIGVudHJ5LT5HZXRQcmVmZXJlbmNlKCkgPiByb3V0ZS0+R2V0UHJlZmVyZW5jZSgpIHx8CisgICAgICAgICAgICAgICAgKGVudHJ5LT5HZXRQcmVmZXJlbmNlKCkgPT0gcm91dGUtPkdldFByZWZlcmVuY2UoKSAmJgorICAgICAgICAgICAgICAgICAoZW50cnktPkdldFJsb2MoKSA9PSBuZXRpZi5HZXRNbGUoKS5HZXRSbG9jMTYoKSB8fAorICAgICAgICAgICAgICAgICAgKHJvdXRlLT5HZXRSbG9jKCkgIT0gbmV0aWYuR2V0TWxlKCkuR2V0UmxvYzE2KCkgJiYKKyAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRNbGUoKS5HZXRDb3N0KGVudHJ5LT5HZXRSbG9jKCkpIDwgbmV0aWYuR2V0TWxlKCkuR2V0Q29zdChyb3V0ZS0+R2V0UmxvYygpKSkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByb3V0ZSA9IGVudHJ5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJvdXRlICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAoYVJsb2MxNiAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICAqYVJsb2MxNiA9IHJvdXRlLT5HZXRSbG9jKCk7CisgICAgICAgIH0KKworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIExlYWRlckJhc2U6OlNldE5ldHdvcmtEYXRhKHVpbnQ4X3QgYVZlcnNpb24sIHVpbnQ4X3QgYVN0YWJsZVZlcnNpb24sIGJvb2wgYVN0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYURhdGEsIHVpbnQ4X3QgYURhdGFMZW5ndGgpCit7CisgICAgbVZlcnNpb24gPSBhVmVyc2lvbjsKKyAgICBtU3RhYmxlVmVyc2lvbiA9IGFTdGFibGVWZXJzaW9uOworICAgIG1lbWNweShtVGx2cywgYURhdGEsIGFEYXRhTGVuZ3RoKTsKKyAgICBtTGVuZ3RoID0gYURhdGFMZW5ndGg7CisKKyAgICBpZiAoYVN0YWJsZSkKKyAgICB7CisgICAgICAgIFJlbW92ZVRlbXBvcmFyeURhdGEobVRsdnMsIG1MZW5ndGgpOworICAgIH0KKworICAgIG90RHVtcERlYmdOZXREYXRhKEdldEluc3RhbmNlKCksICJzZXQgbmV0d29yayBkYXRhIiwgbVRsdnMsIG1MZW5ndGgpOworCisgICAgR2V0TmV0aWYoKS5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKTsKK30KKworb3RFcnJvciBMZWFkZXJCYXNlOjpTZXRDb21taXNzaW9uaW5nRGF0YShjb25zdCB1aW50OF90ICphVmFsdWUsIHVpbnQ4X3QgYVZhbHVlTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgcmVtYWluaW5nID0ga01heFNpemUgLSBtTGVuZ3RoOworICAgIENvbW1pc3Npb25pbmdEYXRhVGx2ICpjb21taXNzaW9uaW5nRGF0YVRsdjsKKworICAgIFZlcmlmeU9yRXhpdChzaXplb2YoTmV0d29ya0RhdGFUbHYpICsgYVZhbHVlTGVuZ3RoIDwgcmVtYWluaW5nLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgUmVtb3ZlQ29tbWlzc2lvbmluZ0RhdGEoKTsKKworICAgIGlmIChhVmFsdWVMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgY29tbWlzc2lvbmluZ0RhdGFUbHYgPSByZWludGVycHJldF9jYXN0PENvbW1pc3Npb25pbmdEYXRhVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgICAgIEluc2VydChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oY29tbWlzc2lvbmluZ0RhdGFUbHYpLCBzaXplb2YoQ29tbWlzc2lvbmluZ0RhdGFUbHYpICsgYVZhbHVlTGVuZ3RoKTsKKyAgICAgICAgY29tbWlzc2lvbmluZ0RhdGFUbHYtPkluaXQoKTsKKyAgICAgICAgY29tbWlzc2lvbmluZ0RhdGFUbHYtPlNldExlbmd0aChhVmFsdWVMZW5ndGgpOworICAgICAgICBtZW1jcHkoY29tbWlzc2lvbmluZ0RhdGFUbHYtPkdldFZhbHVlKCksIGFWYWx1ZSwgYVZhbHVlTGVuZ3RoKTsKKyAgICB9CisKKyAgICBtVmVyc2lvbisrOworICAgIEdldE5ldGlmKCkuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfTkVUREFUQSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitOZXR3b3JrRGF0YVRsdiAqTGVhZGVyQmFzZTo6R2V0Q29tbWlzc2lvbmluZ0RhdGEodm9pZCkKK3sKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyk7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKworICAgIGZvciAoOyBjdXIgPCBlbmQ7IGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpID09IE5ldHdvcmtEYXRhVGx2OjprVHlwZUNvbW1pc3Npb25pbmdEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjdXIgPSBOVUxMOworCitleGl0OgorICAgIHJldHVybiBjdXI7Cit9CisKK01lc2hDb1A6OlRsdiAqTGVhZGVyQmFzZTo6R2V0Q29tbWlzc2lvbmluZ0RhdGFTdWJUbHYoTWVzaENvUDo6VGx2OjpUeXBlIGFUeXBlKQoreworICAgIE1lc2hDb1A6OlRsdiAqcnZhbCA9IE5VTEw7CisgICAgTmV0d29ya0RhdGFUbHYgKmNvbW1pc3Npb25pbmdEYXRhVGx2OworICAgIE1lc2hDb1A6OlRsdiAqY3VyOworICAgIE1lc2hDb1A6OlRsdiAqZW5kOworCisgICAgY29tbWlzc2lvbmluZ0RhdGFUbHYgPSBHZXRDb21taXNzaW9uaW5nRGF0YSgpOworICAgIFZlcmlmeU9yRXhpdChjb21taXNzaW9uaW5nRGF0YVRsdiAhPSBOVUxMKTsKKworICAgIGN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVzaENvUDo6VGx2ICo+KGNvbW1pc3Npb25pbmdEYXRhVGx2LT5HZXRWYWx1ZSgpKTsKKyAgICBlbmQgPSByZWludGVycHJldF9jYXN0PE1lc2hDb1A6OlRsdiAqPihjb21taXNzaW9uaW5nRGF0YVRsdi0+R2V0VmFsdWUoKSArIGNvbW1pc3Npb25pbmdEYXRhVGx2LT5HZXRMZW5ndGgoKSk7CisKKyAgICBmb3IgKDsgY3VyIDwgZW5kOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSA9PSBhVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gY3VyKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworYm9vbCBMZWFkZXJCYXNlOjpJc0pvaW5pbmdFbmFibGVkKHZvaWQpCit7CisgICAgTWVzaENvUDo6VGx2ICpzdGVlcmluZ0RhdGE7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisKKyAgICBWZXJpZnlPckV4aXQoR2V0Q29tbWlzc2lvbmluZ0RhdGFTdWJUbHYoTWVzaENvUDo6VGx2OjprQm9yZGVyQWdlbnRMb2NhdG9yKSAhPSBOVUxMKTsKKworICAgIHN0ZWVyaW5nRGF0YSA9IEdldENvbW1pc3Npb25pbmdEYXRhU3ViVGx2KE1lc2hDb1A6OlRsdjo6a1N0ZWVyaW5nRGF0YSk7CisgICAgVmVyaWZ5T3JFeGl0KHN0ZWVyaW5nRGF0YSAhPSBOVUxMKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RlZXJpbmdEYXRhLT5HZXRMZW5ndGgoKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHN0ZWVyaW5nRGF0YS0+R2V0VmFsdWUoKVtpXSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBMZWFkZXJCYXNlOjpSZW1vdmVDb21taXNzaW9uaW5nRGF0YSh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisKKyAgICBmb3IgKE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzKTsKKyAgICAgICAgIGN1ciA8IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKyAgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpID09IE5ldHdvcmtEYXRhVGx2OjprVHlwZUNvbW1pc3Npb25pbmdEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBSZW1vdmUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGN1ciksIHNpemVvZihOZXR3b3JrRGF0YVRsdikgKyBjdXItPkdldExlbmd0aCgpKTsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBOZXR3b3JrRGF0YQorfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlci5ocHAgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1MTk5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyLmhwcApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBUaHJlYWQgTmV0d29yayBEYXRhIG1hbmFnZWQgYnkgdGhlIFRocmVhZCBMZWFkZXIuCisgKi8KKworI2lmbmRlZiBORVRXT1JLX0RBVEFfTEVBREVSX0hQUF8KKyNkZWZpbmUgTkVUV09SS19EQVRBX0xFQURFUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbmV0d29ya19kYXRhLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBOZXR3b3JrRGF0YSB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1uZXRkYXRhLWxlYWRlcgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIFRocmVhZCBOZXR3b3JrIERhdGEgbWFuYWdlZCBieSB0aGUgVGhyZWFkIExlYWRlci4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSBtYWludGFpbmVkIGJ5IHRoZSBMZWFkZXIuCisgKgorICovCitjbGFzcyBMZWFkZXJCYXNlOiBwdWJsaWMgTmV0d29ya0RhdGEKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBMZWFkZXJCYXNlKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVzZXQgdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlc2V0KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSB2ZXJzaW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRocmVhZCBOZXR3b3JrIERhdGEgdmVyc2lvbi4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0VmVyc2lvbih2b2lkKSBjb25zdCB7IHJldHVybiBtVmVyc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSBzdGFibGUgdmVyc2lvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUaHJlYWQgTmV0d29yayBEYXRhIHN0YWJsZSB2ZXJzaW9uLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTdGFibGVWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TdGFibGVWZXJzaW9uOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIDZMb1dQQU4gQ29udGV4dCBpbmZvcm1hdGlvbiBiYXNlZCBvbiBhIGdpdmVuIElQdjYgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gYW4gSVB2NiBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtvdXRdICBhQ29udGV4dCAgQSByZWZlcmVuY2UgdG8gNkxvV1BBTiBDb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgNkxvV1BBTiBDb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgNkxvV1BBTiBDb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRDb250ZXh0KGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MsIExvd3Bhbjo6Q29udGV4dCAmYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSA2TG9XUEFOIENvbnRleHQgaW5mb3JtYXRpb24gYmFzZWQgb24gYSBnaXZlbiBDb250ZXh0IElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFDb250ZXh0SWQgIFRoZSBDb250ZXh0IElEIHZhbHVlLgorICAgICAqIEBwYXJhbVtvdXRdICBhQ29udGV4dCAgICBBIHJlZmVyZW5jZSB0byB0aGUgNkxvV1BBTiBDb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgNkxvV1BBTiBDb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgNkxvV1BBTiBDb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRDb250ZXh0KHVpbnQ4X3QgYUNvbnRleHRJZCwgTG93cGFuOjpDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIElQdjYgYWRkcmVzcyBpcyBvbi1tZXNoLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIGFuIElQdjYgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIEBwIGFBZGRyZXNzIGlzIG9uLWxpbmsuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgQHAgYUFkZHJlc3MgaWYgbm90IG9uLWxpbmsuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzT25NZXNoKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcGVyZm9ybXMgYSByb3V0ZSBsb29rdXAgdXNpbmcgdGhlIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhU291cmNlICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHNvdXJjZSBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gICBhRGVzdGluYXRpb24gIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICogQHBhcmFtW291dF0gIGFQcmVmaXhNYXRjaCAgQSBwb2ludGVyIHRvIHRoZSBsb25nZXN0IHByZWZpeCBtYXRjaCBsZW5ndGggaW4gYml0cy4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYVJsb2MxNiAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFJMT0MxNiBmb3IgdGhlIHNlbGVjdGVkIHJvdXRlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IGZvdW5kIGEgcm91dGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19ST1VURSAgTm8gdmFsaWQgcm91dGUgd2FzIGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSb3V0ZUxvb2t1cChjb25zdCBJcDY6OkFkZHJlc3MgJmFTb3VyY2UsIGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVByZWZpeE1hdGNoLCB1aW50MTZfdCAqYVJsb2MxNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IG5vbi1MZWFkZXIgZGV2aWNlcyB0byBzZXQgbmV3bHkgcmVjZWl2ZWQgTmV0d29yayBEYXRhIGZyb20gdGhlIExlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZXJzaW9uICAgICAgICBUaGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICBhU3RhYmxlVmVyc2lvbiAgVGhlIFN0YWJsZSBWZXJzaW9uIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGFibGVPbmx5ICAgICBUUlVFIGlmIHN0b3Jpbmcgb25seSB0aGUgc3RhYmxlIGRhdGEsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKiBAcGFyYW1baW5dICBhRGF0YSAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEuCisgICAgICogQHBhcmFtW2luXSAgYURhdGFMZW5ndGggICAgIFRoZSBsZW5ndGggb2YgdGhlIE5ldHdvcmsgRGF0YSBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TmV0d29ya0RhdGEodWludDhfdCBhVmVyc2lvbiwgdWludDhfdCBhU3RhYmxlVmVyc2lvbiwgYm9vbCBhU3RhYmxlT25seSwgY29uc3QgdWludDhfdCAqYURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFEYXRhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgU2VydmVyIERhdGEgTm90aWZpY2F0aW9uIG1lc3NhZ2UgdG8gdGhlIExlYWRlciBpbmRpY2F0aW5nIGFuIGludmFsaWQgUkxPQzE2LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MxNiAgVGhlIGludmFsaWQgUkxPQzE2IHRvIG5vdGlmeS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBub3RpZmljYXRpb24gbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBtZXNzYWdlIGJ1ZmZlcnMgdG8gZ2VuZXJhdGUgdGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbih1aW50MTZfdCBhUmxvYzE2KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBDb21taXNzaW9uaW5nIERhdGEuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIENvbW1pc3Npb25pbmcgRGF0YSBvciBOVUxMIGlmIG5vIENvbW1pc3Npb25pbmcgRGF0YSBleGlzdHMuCisgICAgICoKKyAgICAgKi8KKyAgICBOZXR3b3JrRGF0YVRsdiAqR2V0Q29tbWlzc2lvbmluZ0RhdGEodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgQ29tbWlzc2lvbmluZyBEYXRhIFN1Yi1UTFYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVHlwZSAgVGhlIFRMViB0eXBlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBDb21taXNzaW9uaW5nIERhdGEgU3ViLVRMViBvciBOVUxMIGlmIG5vIFN1Yi1UTFYgZXhpc3RzLgorICAgICAqCisgICAgICovCisgICAgTWVzaENvUDo6VGx2ICpHZXRDb21taXNzaW9uaW5nRGF0YVN1YlRsdihNZXNoQ29QOjpUbHY6OlR5cGUgYVR5cGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBDb21taXNzaW9uaW5nIERhdGEgVExWIGluZGljYXRlcyBKb2luaW5nIGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBKb2luaW5nIGlzIGVuYWJsZWQgaWYgYSBCb3JkZXIgQWdlbnQgTG9jYXRvciBUTFYgZXhpc3QgYW5kIHRoZSBTdGVlcmluZyBEYXRhIFRMViBpcyBub24temVyby4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgdGhlIENvbW1pc3Npb25pbmcgRGF0YSBUTFYgc2F5cyBKb2luaW5nIGlzIGVuYWJsZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNKb2luaW5nRW5hYmxlZCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgQ29tbWlzc2lvbmluZyBEYXRhIHRvIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZhbHVlICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIENvbW1pc3Npb25pbmcgRGF0YSB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICBhVmFsdWVMZW5ndGggIFRoZSBsZW5ndGggb2YgQHAgYVZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIENvbW1pc3Npb25pbmcgRGF0YS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBzcGFjZSB0byBhZGQgdGhlIENvbW1pc3Npb25pbmcgRGF0YS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0Q29tbWlzc2lvbmluZ0RhdGEoY29uc3QgdWludDhfdCAqYVZhbHVlLCB1aW50OF90IGFWYWx1ZUxlbmd0aCk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIgfHwgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgUmxvYyBvZiBEaGNwIEFnZW50IG9mIHNwZWNpZmllZCBjb250ZXh0SWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dElkICAgICAgQSBwb2ludGVyIHRvIHRoZSBDb21taXNzaW9uaW5nIERhdGEgdmFsdWUuCisgICAgICogQHBhcmFtW291dF0gYVJsb2MxNiAgICAgICAgIFRoZSByZWZlcmVuY2Ugb2Ygd2hpY2ggZm9yIG91dHB1dCB0aGUgUmxvYzE2LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBnZXQgdGhlIFJsb2Mgb2YgRGhjcCBBZ2VudC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgVGhlIHNwZWNpZmllZCBAcCBhQ29udGV4dElkIGNvdWxkIG5vdCBiZSBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0UmxvY0J5Q29udGV4dElkKHVpbnQ4X3QgYUNvbnRleHRJZCwgdWludDE2X3QgJmFSbG9jMTYpOworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIgfHwgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKK3Byb3RlY3RlZDoKKyAgICB1aW50OF90ICAgICAgICAgbVN0YWJsZVZlcnNpb247CisgICAgdWludDhfdCAgICAgICAgIG1WZXJzaW9uOworCitwcml2YXRlOgorICAgIG90RXJyb3IgUmVtb3ZlQ29tbWlzc2lvbmluZ0RhdGEodm9pZCk7CisKKyAgICBvdEVycm9yIEV4dGVybmFsUm91dGVMb29rdXAodWludDhfdCBhRG9tYWluSWQsIGNvbnN0IElwNjo6QWRkcmVzcyAmZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFQcmVmaXhNYXRjaCwgdWludDE2X3QgKmFSbG9jMTYpOworICAgIG90RXJyb3IgRGVmYXVsdFJvdXRlTG9va3VwKFByZWZpeFRsdiAmYVByZWZpeCwgdWludDE2X3QgKmFSbG9jMTYpOworfTsKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBOZXR3b3JrRGF0YQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNpZiBPUEVOVEhSRUFEX01URAorI2luY2x1ZGUgIm5ldHdvcmtfZGF0YV9sZWFkZXJfbXRkLmhwcCIKKyNlbGlmIE9QRU5USFJFQURfRlRECisjaW5jbHVkZSAibmV0d29ya19kYXRhX2xlYWRlcl9mdGQuaHBwIgorI2Vsc2UKKyNlcnJvciAiUGxlYXNlIGRlZmluZSBPUEVOVEhSRUFEX01URD0xIG9yIE9QRU5USFJFQURfRlREPTEiCisjZW5kaWYKKworI2VuZGlmICAvLyBORVRXT1JLX0RBVEFfTEVBREVSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyX2Z0ZC5jcHAgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlcl9mdGQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMzdlZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlcl9mdGQuY3BwCkBAIC0wLDAgKzEsMTEwMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSBtYW5hZ2VkIGJ5IHRoZSBUaHJlYWQgTGVhZGVyLgorICovCisKKyNpZiBPUEVOVEhSRUFEX0ZURAorCisKKyNkZWZpbmUgV1BQX05BTUUgIm5ldHdvcmtfZGF0YV9sZWFkZXJfZnRkLnRtaCIKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibmV0d29ya19kYXRhX2xlYWRlci5ocHAiCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3AuaHBwIgorI2luY2x1ZGUgInRocmVhZC9sb3dwYW4uaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTmV0d29ya0RhdGEgeworCitMZWFkZXI6OkxlYWRlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKToKKyAgICBMZWFkZXJCYXNlKGFUaHJlYWROZXRpZiksCisgICAgbVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZMZWFkZXI6OkhhbmRsZVRpbWVyLCB0aGlzKSwKKyAgICBtU2VydmVyRGF0YShPVF9VUklfUEFUSF9TRVJWRVJfREFUQSwgJkxlYWRlcjo6SGFuZGxlU2VydmVyRGF0YSwgdGhpcyksCisgICAgbUNvbW1pc3Npb25pbmdEYXRhR2V0KE9UX1VSSV9QQVRIX0NPTU1JU1NJT05FUl9HRVQsICZMZWFkZXI6OkhhbmRsZUNvbW1pc3Npb25pbmdHZXQsIHRoaXMpLAorICAgIG1Db21taXNzaW9uaW5nRGF0YVNldChPVF9VUklfUEFUSF9DT01NSVNTSU9ORVJfU0VULCAmTGVhZGVyOjpIYW5kbGVDb21taXNzaW9uaW5nU2V0LCB0aGlzKQoreworICAgIFJlc2V0KCk7Cit9CisKK3ZvaWQgTGVhZGVyOjpSZXNldCh2b2lkKQoreworICAgIExlYWRlckJhc2U6OlJlc2V0KCk7CisKKyAgICBtZW1zZXQobUNvbnRleHRMYXN0VXNlZCwgMCwgc2l6ZW9mKG1Db250ZXh0TGFzdFVzZWQpKTsKKyAgICBtQ29udGV4dFVzZWQgPSAwOworICAgIG1Db250ZXh0SWRSZXVzZURlbGF5ID0ga0NvbnRleHRJZFJldXNlRGVsYXk7Cit9CisKK3ZvaWQgTGVhZGVyOjpTdGFydCh2b2lkKQoreworICAgIENvYXA6OkNvYXAgJmNvYXAgPSBHZXROZXRpZigpLkdldENvYXAoKTsKKworICAgIGNvYXAuQWRkUmVzb3VyY2UobVNlcnZlckRhdGEpOworICAgIGNvYXAuQWRkUmVzb3VyY2UobUNvbW1pc3Npb25pbmdEYXRhR2V0KTsKKyAgICBjb2FwLkFkZFJlc291cmNlKG1Db21taXNzaW9uaW5nRGF0YVNldCk7Cit9CisKK3ZvaWQgTGVhZGVyOjpTdG9wKHZvaWQpCit7CisgICAgQ29hcDo6Q29hcCAmY29hcCA9IEdldE5ldGlmKCkuR2V0Q29hcCgpOworCisgICAgY29hcC5SZW1vdmVSZXNvdXJjZShtU2VydmVyRGF0YSk7CisgICAgY29hcC5SZW1vdmVSZXNvdXJjZShtQ29tbWlzc2lvbmluZ0RhdGFHZXQpOworICAgIGNvYXAuUmVtb3ZlUmVzb3VyY2UobUNvbW1pc3Npb25pbmdEYXRhU2V0KTsKK30KKwordm9pZCBMZWFkZXI6OkluY3JlbWVudFZlcnNpb24odm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgaWYgKG5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIpCisgICAgeworICAgICAgICBtVmVyc2lvbisrOworICAgICAgICBuZXRpZi5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKTsKKyAgICB9Cit9CisKK3ZvaWQgTGVhZGVyOjpJbmNyZW1lbnRTdGFibGVWZXJzaW9uKHZvaWQpCit7CisgICAgaWYgKEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0xFQURFUikKKyAgICB7CisgICAgICAgIG1TdGFibGVWZXJzaW9uKys7CisgICAgfQorfQorCit1aW50MzJfdCBMZWFkZXI6OkdldENvbnRleHRJZFJldXNlRGVsYXkodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUNvbnRleHRJZFJldXNlRGVsYXk7Cit9CisKK290RXJyb3IgTGVhZGVyOjpTZXRDb250ZXh0SWRSZXVzZURlbGF5KHVpbnQzMl90IGFEZWxheSkKK3sKKyAgICBtQ29udGV4dElkUmV1c2VEZWxheSA9IGFEZWxheTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordm9pZCBMZWFkZXI6OlJlbW92ZUJvcmRlclJvdXRlcih1aW50MTZfdCBhUmxvYzE2KQoreworICAgIGJvb2wgcmxvY0luID0gZmFsc2U7CisgICAgYm9vbCBybG9jU3RhYmxlID0gZmFsc2U7CisgICAgUmxvY0xvb2t1cChhUmxvYzE2LCBybG9jSW4sIHJsb2NTdGFibGUsIG1UbHZzLCBtTGVuZ3RoKTsKKworICAgIFZlcmlmeU9yRXhpdChybG9jSW4pOworCisgICAgUmVtb3ZlUmxvYyhhUmxvYzE2KTsKKyAgICBtVmVyc2lvbisrOworCisgICAgaWYgKHJsb2NTdGFibGUpCisgICAgeworICAgICAgICBtU3RhYmxlVmVyc2lvbisrOworICAgIH0KKworICAgIEdldE5ldGlmKCkuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfTkVUREFUQSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlU2VydmVyRGF0YSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PExlYWRlciAqPihhQ29udGV4dCktPkhhbmRsZVNlcnZlckRhdGEoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgTGVhZGVyOjpIYW5kbGVTZXJ2ZXJEYXRhKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0d29ya0RhdGFUbHYgbmV0d29ya0RhdGE7CisgICAgVGhyZWFkUmxvYzE2VGx2IHJsb2MxNjsKKworICAgIG90TG9nSW5mb05ldERhdGEoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIG5ldHdvcmsgZGF0YSByZWdpc3RyYXRpb24iKTsKKworICAgIGlmIChUaHJlYWRUbHY6OkdldFRsdihhTWVzc2FnZSwgVGhyZWFkVGx2OjprUmxvYzE2LCBzaXplb2YocmxvYzE2KSwgcmxvYzE2KSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJsb2MxNi5Jc1ZhbGlkKCkpOworICAgICAgICBSZW1vdmVCb3JkZXJSb3V0ZXIocmxvYzE2LkdldFJsb2MxNigpKTsKKyAgICB9CisKKyAgICBpZiAoVGhyZWFkVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRocmVhZFRsdjo6a1RocmVhZE5ldHdvcmtEYXRhLCBzaXplb2YobmV0d29ya0RhdGEpLCBuZXR3b3JrRGF0YSkgPT0KKyAgICAgICAgT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyTmV0d29ya0RhdGEoSG9zdFN3YXAxNihhTWVzc2FnZUluZm8ubVBlZXJBZGRyLm1GaWVsZHMubTE2WzddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRGF0YS5HZXRUbHZzKCksIG5ldHdvcmtEYXRhLkdldExlbmd0aCgpKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KEdldE5ldGlmKCkuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCBhTWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb05ldERhdGEoR2V0SW5zdGFuY2UoKSwgIlNlbnQgbmV0d29yayBkYXRhIHJlZ2lzdHJhdGlvbiBhY2tub3dsZWRnbWVudCIpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBMZWFkZXI6OkhhbmRsZUNvbW1pc3Npb25pbmdTZXQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxMZWFkZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVDb21taXNzaW9uaW5nU2V0KAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlQ29tbWlzc2lvbmluZ1NldChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDhfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50OF90PihhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIGFNZXNzYWdlLkdldE9mZnNldCgpKTsKKyAgICB1aW50OF90IHRsdnNbTmV0d29ya0RhdGE6OmtNYXhTaXplXTsKKyAgICBNZXNoQ29QOjpTdGF0ZVRsdjo6U3RhdGUgc3RhdGUgPSBNZXNoQ29QOjpTdGF0ZVRsdjo6a0FjY2VwdDsKKyAgICBib29sIGhhc1Nlc3Npb25JZCA9IGZhbHNlOworICAgIGJvb2wgaGFzVmFsaWRUbHYgPSBmYWxzZTsKKyAgICB1aW50MTZfdCBzZXNzaW9uSWQgPSAwOworCisgICAgVmVyaWZ5T3JFeGl0KEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0xFQURFUiwgc3RhdGUgPSBNZXNoQ29QOjpTdGF0ZVRsdjo6a1JlamVjdCk7CisKKyAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgbGVuZ3RoLCB0bHZzKTsKKworICAgIC8vIFNlc3Npb24gSWQgYW5kIEJvcmRlciBSb3V0ZXIgTG9jYXRvciBNVVNUIE5PVCBiZSBzZXQsIGJ1dCBhY2NlcHQgaW5jbHVkaW5nIHVuZXhwZWN0ZWQgb3IKKyAgICAvLyB1bmtub3duIFRMViBhcyBsb25nIGFzIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB2YWxpZCBUTFYuCisgICAgZm9yIChNZXNoQ29QOjpUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVzaENvUDo6VGx2ICo+KHRsdnMpOworICAgICAgICAgY3VyIDwgcmVpbnRlcnByZXRfY2FzdDxNZXNoQ29QOjpUbHYgKj4odGx2cyArIGxlbmd0aCk7CisgICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6OlRsdjo6VHlwZSB0eXBlID0gY3VyLT5HZXRUeXBlKCk7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gTWVzaENvUDo6VGx2OjprSm9pbmVyVWRwUG9ydCB8fCB0eXBlID09IE1lc2hDb1A6OlRsdjo6a1N0ZWVyaW5nRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgaGFzVmFsaWRUbHYgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gTWVzaENvUDo6VGx2OjprQm9yZGVyQWdlbnRMb2NhdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHN0YXRlID0gTWVzaENvUDo6U3RhdGVUbHY6OmtSZWplY3QpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gTWVzaENvUDo6VGx2OjprQ29tbWlzc2lvbmVyU2Vzc2lvbklkKQorICAgICAgICB7CisgICAgICAgICAgICBoYXNTZXNzaW9uSWQgPSB0cnVlOworICAgICAgICAgICAgc2Vzc2lvbklkID0gc3RhdGljX2Nhc3Q8TWVzaENvUDo6Q29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2ICo+KGN1ciktPkdldENvbW1pc3Npb25lclNlc3Npb25JZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZG8gbm90aGluZyBmb3IgdW5leHBlY3RlZCBvciB1bmtub3duIFRMVgorICAgICAgICB9CisgICAgfQorCisgICAgLy8gdmVyaWZ5IHdoZXRoZXIgb3Igbm90IGNvbW1pc3Npb25lciBzZXNzaW9uIGlkIFRMViBpcyBpbmNsdWRlZAorICAgIFZlcmlmeU9yRXhpdChoYXNTZXNzaW9uSWQsIHN0YXRlID0gTWVzaENvUDo6U3RhdGVUbHY6OmtSZWplY3QpOworCisgICAgLy8gdmVyaWZ5IHdoZXRoZXIgb3Igbm90IE1HTVRfQ09NTV9TRVQucmVxIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSB2YWxpZCBUTFYKKyAgICBWZXJpZnlPckV4aXQoaGFzVmFsaWRUbHYsIHN0YXRlID0gTWVzaENvUDo6U3RhdGVUbHY6OmtSZWplY3QpOworCisgICAgLy8gRmluZCBDb21taXNzaW9uaW5nIERhdGEgVExWCisgICAgZm9yIChOZXR3b3JrRGF0YVRsdiAqbmV0RGF0YVRsdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMpOworICAgICAgICAgbmV0RGF0YVRsdiA8IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKyAgICAgICAgIG5ldERhdGFUbHYgPSBuZXREYXRhVGx2LT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAobmV0RGF0YVRsdi0+R2V0VHlwZSgpID09IE5ldHdvcmtEYXRhVGx2OjprVHlwZUNvbW1pc3Npb25pbmdEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJdGVyYXRlIG92ZXIgTWVzaENvUCBUTFZzIGFuZCBleHRyYWN0IGRlc2lyZWQgZGF0YQorICAgICAgICAgICAgZm9yIChNZXNoQ29QOjpUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVzaENvUDo6VGx2ICo+KG5ldERhdGFUbHYtPkdldFZhbHVlKCkpOworICAgICAgICAgICAgICAgICBjdXIgPCByZWludGVycHJldF9jYXN0PE1lc2hDb1A6OlRsdiAqPihuZXREYXRhVGx2LT5HZXRWYWx1ZSgpICsgbmV0RGF0YVRsdi0+R2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTWVzaENvUDo6VGx2OjprQ29tbWlzc2lvbmVyU2Vzc2lvbklkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHNlc3Npb25JZCA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWVzaENvUDo6Q29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2ICo+KGN1ciktPkdldENvbW1pc3Npb25lclNlc3Npb25JZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBNZXNoQ29QOjpTdGF0ZVRsdjo6a1JlamVjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1ci0+R2V0VHlwZSgpID09IE1lc2hDb1A6OlRsdjo6a0JvcmRlckFnZW50TG9jYXRvcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSh0bHZzICsgbGVuZ3RoLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oY3VyKSwgY3VyLT5HZXRMZW5ndGgoKSArIHNpemVvZihNZXNoQ29QOjpUbHYpKTsKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IChjdXItPkdldExlbmd0aCgpICsgc2l6ZW9mKE1lc2hDb1A6OlRsdikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFNldENvbW1pc3Npb25pbmdEYXRhKHRsdnMsIGxlbmd0aCk7CisKK2V4aXQ6CisKKyAgICBpZiAoR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgIHsKKyAgICAgICAgU2VuZENvbW1pc3Npb25pbmdTZXRSZXNwb25zZShhSGVhZGVyLCBhTWVzc2FnZUluZm8sIHN0YXRlKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTGVhZGVyOjpIYW5kbGVDb21taXNzaW9uaW5nR2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8TGVhZGVyICo+KGFDb250ZXh0KS0+SGFuZGxlQ29tbWlzc2lvbmluZ0dldCgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBMZWFkZXI6OkhhbmRsZUNvbW1pc3Npb25pbmdHZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIE1lc2hDb1A6OlRsdiB0bHY7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDhfdCB0bHZzW05ldHdvcmtEYXRhOjprTWF4U2l6ZV07CisgICAgdWludDhfdCBsZW5ndGggPSAwOworCisgICAgd2hpbGUgKG9mZnNldCA8IGFNZXNzYWdlLkdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZih0bHYpLCAmdGx2KTsKKworICAgICAgICBpZiAodGx2LkdldFR5cGUoKSA9PSBNZXNoQ29QOjpUbHY6OmtHZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IHRsdi5HZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0ICsgc2l6ZW9mKE1lc2hDb1A6OlRsdiksIGxlbmd0aCwgdGx2cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSBzaXplb2YodGx2KSArIHRsdi5HZXRMZW5ndGgoKTsKKyAgICB9CisKKyAgICBTZW5kQ29tbWlzc2lvbmluZ0dldFJlc3BvbnNlKGFIZWFkZXIsIGFNZXNzYWdlSW5mbywgdGx2cywgbGVuZ3RoKTsKK30KKwordm9pZCBMZWFkZXI6OlNlbmRDb21taXNzaW9uaW5nR2V0UmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIHVpbnQ4X3QgaW5kZXg7CisgICAgdWludDhfdCAqZGF0YSA9IE5VTEw7CisgICAgdWludDhfdCBsZW5ndGggPSAwOworCisgICAgcmVzcG9uc2VIZWFkZXIuU2V0RGVmYXVsdFJlc3BvbnNlSGVhZGVyKGFSZXF1ZXN0SGVhZGVyKTsKKyAgICByZXNwb25zZUhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBNZXNoQ29QOjpOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIHJlc3BvbnNlSGVhZGVyKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIGZvciAoTmV0d29ya0RhdGFUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMpOworICAgICAgICAgY3VyIDwgcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworICAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlQ29tbWlzc2lvbmluZ0RhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGEgPSBjdXItPkdldFZhbHVlKCk7CisgICAgICAgICAgICBsZW5ndGggPSBjdXItPkdldExlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoZGF0YSAmJiBsZW5ndGgsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBpZiAoYUxlbmd0aCA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZChkYXRhLCBsZW5ndGgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYUxlbmd0aDsgaW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChNZXNoQ29QOjpUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVzaENvUDo6VGx2ICo+KGRhdGEpOworICAgICAgICAgICAgICAgICBjdXIgPCByZWludGVycHJldF9jYXN0PE1lc2hDb1A6OlRsdiAqPihkYXRhICsgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpID09IGFUbHZzW2luZGV4XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoY3VyLCBzaXplb2YoTmV0d29ya0RhdGFUbHYpICsgY3VyLT5HZXRMZW5ndGgoKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWVzc2FnZS0+R2V0TGVuZ3RoKCkgPT0gcmVzcG9uc2VIZWFkZXIuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICAvLyBubyBwYXlsb2FkLCByZW1vdmUgY29hcCBwYXlsb2FkIG1hcmtlcgorICAgICAgICBtZXNzYWdlLT5TZXRMZW5ndGgobWVzc2FnZS0+R2V0TGVuZ3RoKCkgLSAxKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBhTWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgY29tbWlzc2lvbmluZyBkYXRhc2V0IGdldCByZXNwb25zZSIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KK30KKwordm9pZCBMZWFkZXI6OlNlbmRDb21taXNzaW9uaW5nU2V0UmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzaENvUDo6U3RhdGVUbHY6OlN0YXRlIGFTdGF0ZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIE1lc2hDb1A6OlN0YXRlVGx2IHN0YXRlOworCisgICAgcmVzcG9uc2VIZWFkZXIuU2V0RGVmYXVsdFJlc3BvbnNlSGVhZGVyKGFSZXF1ZXN0SGVhZGVyKTsKKyAgICByZXNwb25zZUhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBNZXNoQ29QOjpOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIHJlc3BvbnNlSGVhZGVyKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHN0YXRlLkluaXQoKTsKKyAgICBzdGF0ZS5TZXRTdGF0ZShhU3RhdGUpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnN0YXRlLCBzaXplb2Yoc3RhdGUpKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBhTWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgY29tbWlzc2lvbmluZyBkYXRhc2V0IHNldCByZXNwb25zZSIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KK30KKwordm9pZCBMZWFkZXI6OlJsb2NMb29rdXAodWludDE2X3QgYVJsb2MxNiwgYm9vbCAmYUluLCBib29sICZhU3RhYmxlLCB1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c0xlbmd0aCkKK3sKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihhVGx2cyk7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4oYVRsdnMgKyBhVGx2c0xlbmd0aCk7CisgICAgTmV0d29ya0RhdGFUbHYgKnN1YkN1cjsKKyAgICBOZXR3b3JrRGF0YVRsdiAqc3ViRW5kOworICAgIFByZWZpeFRsdiAqcHJlZml4OworICAgIEJvcmRlclJvdXRlclRsdiAqYm9yZGVyUm91dGVyOworICAgIEhhc1JvdXRlVGx2ICpoYXNSb3V0ZTsKKyAgICBCb3JkZXJSb3V0ZXJFbnRyeSAqYm9yZGVyUm91dGVyRW50cnk7CisgICAgSGFzUm91dGVFbnRyeSAqaGFzUm91dGVFbnRyeTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlUHJlZml4KQorICAgICAgICB7CisgICAgICAgICAgICBwcmVmaXggPSBzdGF0aWNfY2FzdDxQcmVmaXhUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIHN1YkN1ciA9IHByZWZpeC0+R2V0U3ViVGx2cygpOworICAgICAgICAgICAgc3ViRW5kID0gcHJlZml4LT5HZXROZXh0KCk7CisKKyAgICAgICAgICAgIHdoaWxlIChzdWJDdXIgPCBzdWJFbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzdWJDdXItPkdldFR5cGUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVCb3JkZXJSb3V0ZXI6CisgICAgICAgICAgICAgICAgICAgIGJvcmRlclJvdXRlciA9IEZpbmRCb3JkZXJSb3V0ZXIoKnByZWZpeCk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYm9yZGVyUm91dGVyLT5HZXROdW1FbnRyaWVzKCk7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUm91dGVyRW50cnkgPSBib3JkZXJSb3V0ZXItPkdldEVudHJ5KGkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9yZGVyUm91dGVyRW50cnktPkdldFJsb2MoKSA9PSBhUmxvYzE2KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFJbiA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9yZGVyUm91dGVyLT5Jc1N0YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVN0YWJsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZUhhc1JvdXRlOgorICAgICAgICAgICAgICAgICAgICBoYXNSb3V0ZSA9IEZpbmRIYXNSb3V0ZSgqcHJlZml4KTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBoYXNSb3V0ZS0+R2V0TnVtRW50cmllcygpOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JvdXRlRW50cnkgPSBoYXNSb3V0ZS0+R2V0RW50cnkoaSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNSb3V0ZUVudHJ5LT5HZXRSbG9jKCkgPT0gYVJsb2MxNikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhSW4gPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JvdXRlLT5Jc1N0YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVN0YWJsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYUluICYmIGFTdGFibGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3ViQ3VyID0gc3ViQ3VyLT5HZXROZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitib29sIExlYWRlcjo6SXNTdGFibGVVcGRhdGVkKHVpbnQxNl90IGFSbG9jMTYsIHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFUbHZzTGVuZ3RoLCB1aW50OF90ICphVGx2c0Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYVRsdnNCYXNlTGVuZ3RoKQoreworICAgIGJvb2wgcnZhbCA9IGZhbHNlOworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KGFUbHZzKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqZW5kID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihhVGx2cyArIGFUbHZzTGVuZ3RoKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlUHJlZml4KQorICAgICAgICB7CisgICAgICAgICAgICBQcmVmaXhUbHYgKnByZWZpeCA9IHN0YXRpY19jYXN0PFByZWZpeFRsdiAqPihjdXIpOworICAgICAgICAgICAgQ29udGV4dFRsdiAqY29udGV4dCA9IEZpbmRDb250ZXh0KCpwcmVmaXgpOworICAgICAgICAgICAgQm9yZGVyUm91dGVyVGx2ICpib3JkZXJSb3V0ZXIgPSBGaW5kQm9yZGVyUm91dGVyKCpwcmVmaXgpOworICAgICAgICAgICAgSGFzUm91dGVUbHYgKmhhc1JvdXRlID0gRmluZEhhc1JvdXRlKCpwcmVmaXgpOworCisgICAgICAgICAgICBpZiAoY3VyLT5Jc1N0YWJsZSgpICYmICghY29udGV4dCB8fCBib3JkZXJSb3V0ZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFByZWZpeFRsdiAqcHJlZml4QmFzZSA9IEZpbmRQcmVmaXgocHJlZml4LT5HZXRQcmVmaXgoKSwgcHJlZml4LT5HZXRQcmVmaXhMZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUbHZzQmFzZSwgYVRsdnNCYXNlTGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGlmICghcHJlZml4QmFzZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHRydWUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChib3JkZXJSb3V0ZXIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBCb3JkZXJSb3V0ZXJUbHYgKmJvcmRlclJvdXRlckJhc2UgPSBGaW5kQm9yZGVyUm91dGVyKCpwcmVmaXhCYXNlKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWJvcmRlclJvdXRlckJhc2UgfHwgbWVtY21wKGJvcmRlclJvdXRlciwgYm9yZGVyUm91dGVyQmFzZSwgYm9yZGVyUm91dGVyLT5HZXRMZW5ndGgoKSkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaGFzUm91dGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBIYXNSb3V0ZVRsdiAqaGFzUm91dGVCYXNlID0gRmluZEhhc1JvdXRlKCpwcmVmaXhCYXNlKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1JvdXRlQmFzZSB8fCAobWVtY21wKGhhc1JvdXRlLCBoYXNSb3V0ZUJhc2UsIGhhc1JvdXRlLT5HZXRMZW5ndGgoKSkgIT0gMCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhUmxvYzE2KTsKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBMZWFkZXI6OlJlZ2lzdGVyTmV0d29ya0RhdGEodWludDE2X3QgYVJsb2MxNiwgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgYm9vbCBybG9jSW4gPSBmYWxzZTsKKyAgICBib29sIHJsb2NTdGFibGUgPSBmYWxzZTsKKyAgICBib29sIHN0YWJsZVVwZGF0ZWQgPSBmYWxzZTsKKworICAgIFJsb2NMb29rdXAoYVJsb2MxNiwgcmxvY0luLCBybG9jU3RhYmxlLCBtVGx2cywgbUxlbmd0aCk7CisKKyAgICBpZiAocmxvY0luKQorICAgIHsKKyAgICAgICAgaWYgKElzU3RhYmxlVXBkYXRlZChhUmxvYzE2LCBhVGx2cywgYVRsdnNMZW5ndGgsIG1UbHZzLCBtTGVuZ3RoKSB8fAorICAgICAgICAgICAgSXNTdGFibGVVcGRhdGVkKGFSbG9jMTYsIG1UbHZzLCBtTGVuZ3RoLCBhVGx2cywgYVRsdnNMZW5ndGgpKQorICAgICAgICB7CisgICAgICAgICAgICBzdGFibGVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBSZW1vdmVSbG9jKGFSbG9jMTYpKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFkZE5ldHdvcmtEYXRhKGFUbHZzLCBhVGx2c0xlbmd0aCkpOworCisgICAgICAgIG1WZXJzaW9uKys7CisKKyAgICAgICAgaWYgKHN0YWJsZVVwZGF0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGFibGVWZXJzaW9uKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgUmxvY0xvb2t1cChhUmxvYzE2LCBybG9jSW4sIHJsb2NTdGFibGUsIGFUbHZzLCBhVGx2c0xlbmd0aCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBZGROZXR3b3JrRGF0YShhVGx2cywgYVRsdnNMZW5ndGgpKTsKKworICAgICAgICBtVmVyc2lvbisrOworCisgICAgICAgIGlmIChybG9jU3RhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhYmxlVmVyc2lvbisrOworICAgICAgICB9CisgICAgfQorCisgICAgR2V0TmV0aWYoKS5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTGVhZGVyOjpBZGROZXR3b3JrRGF0YSh1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c0xlbmd0aCkKK3sKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihhVGx2cyk7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4oYVRsdnMgKyBhVGx2c0xlbmd0aCk7CisKKyAgICB3aGlsZSAoY3VyIDwgZW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjdXItPkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZVByZWZpeDoKKyAgICAgICAgICAgIEFkZFByZWZpeCgqc3RhdGljX2Nhc3Q8UHJlZml4VGx2ICo+KGN1cikpOworICAgICAgICAgICAgb3REdW1wRGViZ05ldERhdGEoR2V0SW5zdGFuY2UoKSwgImFkZCBwcmVmaXggZG9uZSIsIG1UbHZzLCBtTGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworICAgIG90RHVtcERlYmdOZXREYXRhKEdldEluc3RhbmNlKCksICJhZGQgZG9uZSIsIG1UbHZzLCBtTGVuZ3RoKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIExlYWRlcjo6QWRkUHJlZml4KFByZWZpeFRsdiAmYVByZWZpeCkKK3sKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gYVByZWZpeC5HZXRTdWJUbHZzKCk7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZCA9IGFQcmVmaXguR2V0TmV4dCgpOworCisgICAgd2hpbGUgKGN1ciA8IGVuZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY3VyLT5HZXRUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVIYXNSb3V0ZToKKyAgICAgICAgICAgIEFkZEhhc1JvdXRlKGFQcmVmaXgsICpzdGF0aWNfY2FzdDxIYXNSb3V0ZVRsdiAqPihjdXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTmV0d29ya0RhdGFUbHY6OmtUeXBlQm9yZGVyUm91dGVyOgorICAgICAgICAgICAgQWRkQm9yZGVyUm91dGVyKGFQcmVmaXgsICpzdGF0aWNfY2FzdDxCb3JkZXJSb3V0ZXJUbHYgKj4oY3VyKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBMZWFkZXI6OkFkZEhhc1JvdXRlKFByZWZpeFRsdiAmYVByZWZpeCwgSGFzUm91dGVUbHYgJmFIYXNSb3V0ZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBQcmVmaXhUbHYgKmRzdFByZWZpeDsKKyAgICBIYXNSb3V0ZVRsdiAqZHN0SGFzUm91dGU7CisKKyAgICBpZiAoKGRzdFByZWZpeCA9IEZpbmRQcmVmaXgoYVByZWZpeC5HZXRQcmVmaXgoKSwgYVByZWZpeC5HZXRQcmVmaXhMZW5ndGgoKSkpID09IE5VTEwpCisgICAgeworICAgICAgICBkc3RQcmVmaXggPSByZWludGVycHJldF9jYXN0PFByZWZpeFRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworICAgICAgICBJbnNlcnQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGRzdFByZWZpeCksIHNpemVvZihQcmVmaXhUbHYpICsgQml0VmVjdG9yQnl0ZXMoYVByZWZpeC5HZXRQcmVmaXhMZW5ndGgoKSkpOworICAgICAgICBkc3RQcmVmaXgtPkluaXQoYVByZWZpeC5HZXREb21haW5JZCgpLCBhUHJlZml4LkdldFByZWZpeExlbmd0aCgpLCBhUHJlZml4LkdldFByZWZpeCgpKTsKKyAgICB9CisKKyAgICBpZiAoYUhhc1JvdXRlLklzU3RhYmxlKCkpCisgICAgeworICAgICAgICBkc3RQcmVmaXgtPlNldFN0YWJsZSgpOworICAgIH0KKworICAgIGlmICgoZHN0SGFzUm91dGUgPSBGaW5kSGFzUm91dGUoKmRzdFByZWZpeCwgYUhhc1JvdXRlLklzU3RhYmxlKCkpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgZHN0SGFzUm91dGUgPSBzdGF0aWNfY2FzdDxIYXNSb3V0ZVRsdiAqPihkc3RQcmVmaXgtPkdldE5leHQoKSk7CisgICAgICAgIEluc2VydChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oZHN0SGFzUm91dGUpLCBzaXplb2YoSGFzUm91dGVUbHYpKTsKKyAgICAgICAgZHN0UHJlZml4LT5TZXRMZW5ndGgoZHN0UHJlZml4LT5HZXRMZW5ndGgoKSArIHNpemVvZihIYXNSb3V0ZVRsdikpOworICAgICAgICBkc3RIYXNSb3V0ZS0+SW5pdCgpOworCisgICAgICAgIGlmIChhSGFzUm91dGUuSXNTdGFibGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZHN0SGFzUm91dGUtPlNldFN0YWJsZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgSW5zZXJ0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihkc3RIYXNSb3V0ZS0+R2V0TmV4dCgpKSwgc2l6ZW9mKEhhc1JvdXRlRW50cnkpKTsKKyAgICBkc3RIYXNSb3V0ZS0+U2V0TGVuZ3RoKGRzdEhhc1JvdXRlLT5HZXRMZW5ndGgoKSArIHNpemVvZihIYXNSb3V0ZUVudHJ5KSk7CisgICAgZHN0UHJlZml4LT5TZXRMZW5ndGgoZHN0UHJlZml4LT5HZXRMZW5ndGgoKSArIHNpemVvZihIYXNSb3V0ZUVudHJ5KSk7CisgICAgbWVtY3B5KGRzdEhhc1JvdXRlLT5HZXRFbnRyeShkc3RIYXNSb3V0ZS0+R2V0TnVtRW50cmllcygpIC0gMSksIGFIYXNSb3V0ZS5HZXRFbnRyeSgwKSwKKyAgICAgICAgICAgc2l6ZW9mKEhhc1JvdXRlRW50cnkpKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBMZWFkZXI6OkFkZEJvcmRlclJvdXRlcihQcmVmaXhUbHYgJmFQcmVmaXgsIEJvcmRlclJvdXRlclRsdiAmYUJvcmRlclJvdXRlcikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBQcmVmaXhUbHYgKmRzdFByZWZpeDsKKyAgICBDb250ZXh0VGx2ICpkc3RDb250ZXh0OworICAgIEJvcmRlclJvdXRlclRsdiAqZHN0Qm9yZGVyUm91dGVyOworICAgIGludCBjb250ZXh0SWQ7CisKKyAgICBpZiAoKGRzdFByZWZpeCA9IEZpbmRQcmVmaXgoYVByZWZpeC5HZXRQcmVmaXgoKSwgYVByZWZpeC5HZXRQcmVmaXhMZW5ndGgoKSkpID09IE5VTEwpCisgICAgeworICAgICAgICBkc3RQcmVmaXggPSByZWludGVycHJldF9jYXN0PFByZWZpeFRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworICAgICAgICBJbnNlcnQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGRzdFByZWZpeCksIHNpemVvZihQcmVmaXhUbHYpICsgQml0VmVjdG9yQnl0ZXMoYVByZWZpeC5HZXRQcmVmaXhMZW5ndGgoKSkpOworICAgICAgICBkc3RQcmVmaXgtPkluaXQoYVByZWZpeC5HZXREb21haW5JZCgpLCBhUHJlZml4LkdldFByZWZpeExlbmd0aCgpLCBhUHJlZml4LkdldFByZWZpeCgpKTsKKyAgICB9CisKKyAgICBpZiAoKGRzdENvbnRleHQgPSBGaW5kQ29udGV4dCgqZHN0UHJlZml4KSkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGRzdENvbnRleHQtPlNldENvbXByZXNzKCk7CisgICAgfQorICAgIGVsc2UgaWYgKChjb250ZXh0SWQgPSBBbGxvY2F0ZUNvbnRleHQoKSkgPj0gMCkKKyAgICB7CisgICAgICAgIGRzdENvbnRleHQgPSBzdGF0aWNfY2FzdDxDb250ZXh0VGx2ICo+KGRzdFByZWZpeC0+R2V0TmV4dCgpKTsKKyAgICAgICAgSW5zZXJ0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihkc3RDb250ZXh0KSwgc2l6ZW9mKENvbnRleHRUbHYpKTsKKyAgICAgICAgZHN0UHJlZml4LT5TZXRMZW5ndGgoZHN0UHJlZml4LT5HZXRMZW5ndGgoKSArIHNpemVvZihDb250ZXh0VGx2KSk7CisgICAgICAgIGRzdENvbnRleHQtPkluaXQoKTsKKyAgICAgICAgZHN0Q29udGV4dC0+U2V0Q29tcHJlc3MoKTsKKyAgICAgICAgZHN0Q29udGV4dC0+U2V0Q29udGV4dElkKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvbnRleHRJZCkpOworICAgICAgICBkc3RDb250ZXh0LT5TZXRDb250ZXh0TGVuZ3RoKGFQcmVmaXguR2V0UHJlZml4TGVuZ3RoKCkpOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChkc3RDb250ZXh0ICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgbUNvbnRleHRMYXN0VXNlZFtkc3RDb250ZXh0LT5HZXRDb250ZXh0SWQoKSAtIGtNaW5Db250ZXh0SWRdID0gMDsKKworCisgICAgaWYgKChkc3RCb3JkZXJSb3V0ZXIgPSBGaW5kQm9yZGVyUm91dGVyKCpkc3RQcmVmaXgsIGFCb3JkZXJSb3V0ZXIuSXNTdGFibGUoKSkpID09IE5VTEwpCisgICAgeworICAgICAgICBkc3RCb3JkZXJSb3V0ZXIgPSBzdGF0aWNfY2FzdDxCb3JkZXJSb3V0ZXJUbHYgKj4oZHN0UHJlZml4LT5HZXROZXh0KCkpOworICAgICAgICBJbnNlcnQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGRzdEJvcmRlclJvdXRlciksIHNpemVvZihCb3JkZXJSb3V0ZXJUbHYpKTsKKyAgICAgICAgZHN0UHJlZml4LT5TZXRMZW5ndGgoZHN0UHJlZml4LT5HZXRMZW5ndGgoKSArIHNpemVvZihCb3JkZXJSb3V0ZXJUbHYpKTsKKyAgICAgICAgZHN0Qm9yZGVyUm91dGVyLT5Jbml0KCk7CisgICAgfQorCisgICAgSW5zZXJ0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihkc3RCb3JkZXJSb3V0ZXItPkdldE5leHQoKSksIHNpemVvZihCb3JkZXJSb3V0ZXJFbnRyeSkpOworICAgIGRzdEJvcmRlclJvdXRlci0+U2V0TGVuZ3RoKGRzdEJvcmRlclJvdXRlci0+R2V0TGVuZ3RoKCkgKyBzaXplb2YoQm9yZGVyUm91dGVyRW50cnkpKTsKKyAgICBkc3RQcmVmaXgtPlNldExlbmd0aChkc3RQcmVmaXgtPkdldExlbmd0aCgpICsgc2l6ZW9mKEJvcmRlclJvdXRlckVudHJ5KSk7CisgICAgbWVtY3B5KGRzdEJvcmRlclJvdXRlci0+R2V0RW50cnkoZHN0Qm9yZGVyUm91dGVyLT5HZXROdW1FbnRyaWVzKCkgLSAxKSwgYUJvcmRlclJvdXRlci5HZXRFbnRyeSgwKSwKKyAgICAgICAgICAgc2l6ZW9mKEJvcmRlclJvdXRlckVudHJ5KSk7CisKKyAgICBpZiAoYUJvcmRlclJvdXRlci5Jc1N0YWJsZSgpKQorICAgIHsKKyAgICAgICAgZHN0UHJlZml4LT5TZXRTdGFibGUoKTsKKyAgICAgICAgZHN0Q29udGV4dC0+U2V0U3RhYmxlKCk7CisgICAgICAgIGRzdEJvcmRlclJvdXRlci0+U2V0U3RhYmxlKCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworaW50IExlYWRlcjo6QWxsb2NhdGVDb250ZXh0KHZvaWQpCit7CisgICAgaW50IHJ2YWwgPSAtMTsKKworICAgIGZvciAoaW50IGkgPSBrTWluQ29udGV4dElkOyBpIDwga01pbkNvbnRleHRJZCArIGtOdW1Db250ZXh0SWRzOyBpKyspCisgICAgeworICAgICAgICBpZiAoKG1Db250ZXh0VXNlZCAmICgxIDw8IGkpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtQ29udGV4dFVzZWQgfD0gMSA8PCBpOworICAgICAgICAgICAgcnZhbCA9IGk7CisgICAgICAgICAgICBvdExvZ0luZm9OZXREYXRhKEdldEluc3RhbmNlKCksICJBbGxvY2F0ZWQgQ29udGV4dCBJRCA9ICVkIiwgcnZhbCk7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK290RXJyb3IgTGVhZGVyOjpGcmVlQ29udGV4dCh1aW50OF90IGFDb250ZXh0SWQpCit7CisgICAgb3RMb2dJbmZvTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAiRnJlZSBDb250ZXh0IElkID0gJWQiLCBhQ29udGV4dElkKTsKKyAgICBSZW1vdmVDb250ZXh0KGFDb250ZXh0SWQpOworICAgIG1Db250ZXh0VXNlZCAmPSB+KDEgPDwgYUNvbnRleHRJZCk7CisgICAgbVZlcnNpb24rKzsKKyAgICBtU3RhYmxlVmVyc2lvbisrOworICAgIEdldE5ldGlmKCkuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfTkVUREFUQSk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTGVhZGVyOjpTZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbih1aW50MTZfdCBhUmxvYzE2KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGJvb2wgcmxvY0luID0gZmFsc2U7CisgICAgYm9vbCBybG9jU3RhYmxlID0gZmFsc2U7CisKKyAgICBSbG9jTG9va3VwKGFSbG9jMTYsIHJsb2NJbiwgcmxvY1N0YWJsZSwgbVRsdnMsIG1MZW5ndGgpOworCisgICAgVmVyaWZ5T3JFeGl0KHJsb2NJbiwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE5ldHdvcmtEYXRhOjpTZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbihhUmxvYzE2KSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExlYWRlcjo6UmVtb3ZlUmxvYyh1aW50MTZfdCBhUmxvYzE2KQoreworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqZW5kOworICAgIFByZWZpeFRsdiAqcHJlZml4OworCisgICAgd2hpbGUgKDEpCisgICAgeworICAgICAgICBlbmQgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisKKyAgICAgICAgaWYgKGN1ciA+PSBlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChjdXItPkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZVByZWZpeDoKKyAgICAgICAgeworICAgICAgICAgICAgcHJlZml4ID0gc3RhdGljX2Nhc3Q8UHJlZml4VGx2ICo+KGN1cik7CisgICAgICAgICAgICBSZW1vdmVSbG9jKCpwcmVmaXgsIGFSbG9jMTYpOworCisgICAgICAgICAgICBpZiAocHJlZml4LT5HZXRTdWJUbHZzTGVuZ3RoKCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSZW1vdmUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KHByZWZpeCksIHNpemVvZihOZXR3b3JrRGF0YVRsdikgKyBwcmVmaXgtPkdldExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3REdW1wRGViZ05ldERhdGEoR2V0SW5zdGFuY2UoKSwgInJlbW92ZSBwcmVmaXggZG9uZSIsIG1UbHZzLCBtTGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCisgICAgb3REdW1wRGViZ05ldERhdGEoR2V0SW5zdGFuY2UoKSwgInJlbW92ZSBkb25lIiwgbVRsdnMsIG1MZW5ndGgpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTGVhZGVyOjpSZW1vdmVSbG9jKFByZWZpeFRsdiAmcHJlZml4LCB1aW50MTZfdCBhUmxvYzE2KQoreworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSBwcmVmaXguR2V0U3ViVGx2cygpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQ7CisgICAgQ29udGV4dFRsdiAqY29udGV4dDsKKworICAgIHdoaWxlICgxKQorICAgIHsKKyAgICAgICAgZW5kID0gcHJlZml4LkdldE5leHQoKTsKKworICAgICAgICBpZiAoY3VyID49IGVuZCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGN1ci0+R2V0VHlwZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTmV0d29ya0RhdGFUbHY6OmtUeXBlSGFzUm91dGU6CisgICAgICAgICAgICBSZW1vdmVSbG9jKHByZWZpeCwgKnN0YXRpY19jYXN0PEhhc1JvdXRlVGx2ICo+KGN1ciksIGFSbG9jMTYpOworCisgICAgICAgICAgICAvLyByZW1vdmUgaGFzIHJvdXRlIHRsdiBpZiBlbXB0eQorICAgICAgICAgICAgaWYgKGN1ci0+R2V0TGVuZ3RoKCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmVmaXguU2V0U3ViVGx2c0xlbmd0aChwcmVmaXguR2V0U3ViVGx2c0xlbmd0aCgpIC0gc2l6ZW9mKEhhc1JvdXRlVGx2KSk7CisgICAgICAgICAgICAgICAgUmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjdXIpLCBzaXplb2YoSGFzUm91dGVUbHYpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVCb3JkZXJSb3V0ZXI6CisgICAgICAgICAgICBSZW1vdmVSbG9jKHByZWZpeCwgKnN0YXRpY19jYXN0PEJvcmRlclJvdXRlclRsdiAqPihjdXIpLCBhUmxvYzE2KTsKKworICAgICAgICAgICAgLy8gcmVtb3ZlIGJvcmRlciByb3V0ZXIgdGx2IGlmIGVtcHR5CisgICAgICAgICAgICBpZiAoY3VyLT5HZXRMZW5ndGgoKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByZWZpeC5TZXRTdWJUbHZzTGVuZ3RoKHByZWZpeC5HZXRTdWJUbHZzTGVuZ3RoKCkgLSBzaXplb2YoQm9yZGVyUm91dGVyVGx2KSk7CisgICAgICAgICAgICAgICAgUmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjdXIpLCBzaXplb2YoQm9yZGVyUm91dGVyVGx2KSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworICAgIGlmICgoY29udGV4dCA9IEZpbmRDb250ZXh0KHByZWZpeCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAocHJlZml4LkdldFN1YlRsdnNMZW5ndGgoKSA9PSBzaXplb2YoQ29udGV4dFRsdikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPkNsZWFyQ29tcHJlc3MoKTsKKyAgICAgICAgICAgIG1Db250ZXh0TGFzdFVzZWRbY29udGV4dC0+R2V0Q29udGV4dElkKCkgLSBrTWluQ29udGV4dElkXSA9IFRpbWVyOjpHZXROb3coKTsKKworICAgICAgICAgICAgaWYgKG1Db250ZXh0TGFzdFVzZWRbY29udGV4dC0+R2V0Q29udGV4dElkKCkgLSBrTWluQ29udGV4dElkXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Db250ZXh0TGFzdFVzZWRbY29udGV4dC0+R2V0Q29udGV4dElkKCkgLSBrTWluQ29udGV4dElkXSA9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1UaW1lci5TdGFydChrU3RhdGVVcGRhdGVQZXJpb2QpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+U2V0Q29tcHJlc3MoKTsKKyAgICAgICAgICAgIG1Db250ZXh0TGFzdFVzZWRbY29udGV4dC0+R2V0Q29udGV4dElkKCkgLSBrTWluQ29udGV4dElkXSA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBMZWFkZXI6OlJlbW92ZVJsb2MoUHJlZml4VGx2ICZhUHJlZml4LCBIYXNSb3V0ZVRsdiAmYUhhc1JvdXRlLCB1aW50MTZfdCBhUmxvYzE2KQoreworICAgIEhhc1JvdXRlRW50cnkgKmVudHJ5OworCisgICAgLy8gcmVtb3ZlIHJsb2MgZnJvbSBoYXMgcm91dGUgdGx2CisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYUhhc1JvdXRlLkdldE51bUVudHJpZXMoKTsgaSsrKQorICAgIHsKKyAgICAgICAgZW50cnkgPSBhSGFzUm91dGUuR2V0RW50cnkoaSk7CisKKyAgICAgICAgaWYgKGVudHJ5LT5HZXRSbG9jKCkgIT0gYVJsb2MxNikKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBhSGFzUm91dGUuU2V0TGVuZ3RoKGFIYXNSb3V0ZS5HZXRMZW5ndGgoKSAtIHNpemVvZihIYXNSb3V0ZUVudHJ5KSk7CisgICAgICAgIGFQcmVmaXguU2V0U3ViVGx2c0xlbmd0aChhUHJlZml4LkdldFN1YlRsdnNMZW5ndGgoKSAtIHNpemVvZihIYXNSb3V0ZUVudHJ5KSk7CisgICAgICAgIFJlbW92ZShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oZW50cnkpLCBzaXplb2YoKmVudHJ5KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIExlYWRlcjo6UmVtb3ZlUmxvYyhQcmVmaXhUbHYgJmFQcmVmaXgsIEJvcmRlclJvdXRlclRsdiAmYUJvcmRlclJvdXRlciwgdWludDE2X3QgYVJsb2MxNikKK3sKKyAgICBCb3JkZXJSb3V0ZXJFbnRyeSAqZW50cnk7CisKKyAgICAvLyByZW1vdmUgcmxvYyBmcm9tIGJvcmRlciByb3V0ZXIgdGx2CisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYUJvcmRlclJvdXRlci5HZXROdW1FbnRyaWVzKCk7IGkrKykKKyAgICB7CisgICAgICAgIGVudHJ5ID0gYUJvcmRlclJvdXRlci5HZXRFbnRyeShpKTsKKworICAgICAgICBpZiAoZW50cnktPkdldFJsb2MoKSAhPSBhUmxvYzE2KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGFCb3JkZXJSb3V0ZXIuU2V0TGVuZ3RoKGFCb3JkZXJSb3V0ZXIuR2V0TGVuZ3RoKCkgLSBzaXplb2YoQm9yZGVyUm91dGVyRW50cnkpKTsKKyAgICAgICAgYVByZWZpeC5TZXRTdWJUbHZzTGVuZ3RoKGFQcmVmaXguR2V0U3ViVGx2c0xlbmd0aCgpIC0gc2l6ZW9mKEJvcmRlclJvdXRlckVudHJ5KSk7CisgICAgICAgIFJlbW92ZShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oZW50cnkpLCBzaXplb2YoKmVudHJ5KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIExlYWRlcjo6UmVtb3ZlQ29udGV4dCh1aW50OF90IGFDb250ZXh0SWQpCit7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQ7CisgICAgUHJlZml4VGx2ICpwcmVmaXg7CisKKyAgICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAgIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKworICAgICAgICBpZiAoY3VyID49IGVuZCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGN1ci0+R2V0VHlwZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTmV0d29ya0RhdGFUbHY6OmtUeXBlUHJlZml4OgorICAgICAgICB7CisgICAgICAgICAgICBwcmVmaXggPSBzdGF0aWNfY2FzdDxQcmVmaXhUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIFJlbW92ZUNvbnRleHQoKnByZWZpeCwgYUNvbnRleHRJZCk7CisKKyAgICAgICAgICAgIGlmIChwcmVmaXgtPkdldFN1YlRsdnNMZW5ndGgoKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJlbW92ZShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4ocHJlZml4KSwgc2l6ZW9mKE5ldHdvcmtEYXRhVGx2KSArIHByZWZpeC0+R2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdER1bXBEZWJnTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAicmVtb3ZlIHByZWZpeCBkb25lIiwgbVRsdnMsIG1MZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKKyAgICBvdER1bXBEZWJnTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAicmVtb3ZlIGRvbmUiLCBtVGx2cywgbUxlbmd0aCk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBMZWFkZXI6OlJlbW92ZUNvbnRleHQoUHJlZml4VGx2ICZhUHJlZml4LCB1aW50OF90IGFDb250ZXh0SWQpCit7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IGFQcmVmaXguR2V0U3ViVGx2cygpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQ7CisgICAgQ29udGV4dFRsdiAqY29udGV4dDsKKyAgICB1aW50OF90IGxlbmd0aDsKKworICAgIHdoaWxlICgxKQorICAgIHsKKyAgICAgICAgZW5kID0gYVByZWZpeC5HZXROZXh0KCk7CisKKyAgICAgICAgaWYgKGN1ciA+PSBlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChjdXItPkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZUNvbnRleHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHJlbW92ZSBjb250ZXh0IHRsdgorICAgICAgICAgICAgY29udGV4dCA9IHN0YXRpY19jYXN0PENvbnRleHRUbHYgKj4oY3VyKTsKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPkdldENvbnRleHRJZCgpID09IGFDb250ZXh0SWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gc2l6ZW9mKE5ldHdvcmtEYXRhVGx2KSArIGNvbnRleHQtPkdldExlbmd0aCgpOworICAgICAgICAgICAgICAgIGFQcmVmaXguU2V0U3ViVGx2c0xlbmd0aChhUHJlZml4LkdldFN1YlRsdnNMZW5ndGgoKSAtIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgUmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjb250ZXh0KSwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordm9pZCBMZWFkZXI6OkhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVUaW1lcigpOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlVGltZXIodm9pZCkKK3sKKyAgICBib29sIGNvbnRleHRzV2FpdGluZyA9IGZhbHNlOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwga051bUNvbnRleHRJZHM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ29udGV4dExhc3RVc2VkW2ldID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChUaW1lcjo6R2V0Tm93KCkgLSBtQ29udGV4dExhc3RVc2VkW2ldKSA+PSBUaW1lcjo6U2VjVG9Nc2VjKG1Db250ZXh0SWRSZXVzZURlbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgRnJlZUNvbnRleHQoa01pbkNvbnRleHRJZCArIGkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dHNXYWl0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb250ZXh0c1dhaXRpbmcpCisgICAgeworICAgICAgICBtVGltZXIuU3RhcnQoa1N0YXRlVXBkYXRlUGVyaW9kKTsKKyAgICB9Cit9CisKK0xlYWRlciAmTGVhZGVyOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBMZWFkZXIgJmxlYWRlciA9ICpzdGF0aWNfY2FzdDxMZWFkZXIgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgTGVhZGVyICZsZWFkZXIgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGxlYWRlcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIE5ldHdvcmtEYXRhCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRlRECisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyX2Z0ZC5ocHAgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlcl9mdGQuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OTg0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlcl9mdGQuaHBwCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIFRocmVhZCBOZXR3b3JrIERhdGEgbWFuYWdlZCBieSB0aGUgVGhyZWFkIExlYWRlci4KKyAqLworCisjaWZuZGVmIE5FVFdPUktfREFUQV9MRUFERVJfRlREX0hQUF8KKyNkZWZpbmUgTkVUV09SS19EQVRBX0xFQURFUl9GVERfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbmV0d29ya19kYXRhLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBOZXR3b3JrRGF0YSB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1uZXRkYXRhLWxlYWRlcgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIFRocmVhZCBOZXR3b3JrIERhdGEgbWFuYWdlZCBieSB0aGUgVGhyZWFkIExlYWRlci4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSBtYWludGFpbmVkIGJ5IHRoZSBMZWFkZXIuCisgKgorICovCitjbGFzcyBMZWFkZXI6IHB1YmxpYyBMZWFkZXJCYXNlCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgZXhwbGljaXQgTGVhZGVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVzZXQgdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlc2V0KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RhcnRzIHRoZSBMZWFkZXIgc2VydmljZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFN0YXJ0KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RvcHMgdGhlIExlYWRlciBzZXJ2aWNlcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RvcCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluY3JlbWVudHMgdGhlIFRocmVhZCBOZXR3b3JrIERhdGEgdmVyc2lvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5jcmVtZW50VmVyc2lvbih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluY3JlbWVudHMgdGhlIFRocmVhZCBOZXR3b3JrIERhdGEgc3RhYmxlIHZlcnNpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluY3JlbWVudFN0YWJsZVZlcnNpb24odm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIENPTlRFWFRfSURfUkVTVVNFX0RFTEFZIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENPTlRFWFRfSURfUkVVU0VfREVMQVkgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRDb250ZXh0SWRSZXVzZURlbGF5KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBDT05URVhUX0lEX1JFU1VTRV9ERUxBWSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEB3YXJuaW5nIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHRlc3RpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRGVsYXkgIFRoZSBDT05URVhUX0lEX1JFVVNFX0RFTEFZIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRDb250ZXh0SWRSZXVzZURlbGF5KHVpbnQzMl90IGFEZWxheSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIE5ldHdvcmsgRGF0YSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBSTE9DMTYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICBBIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVtb3ZlQm9yZGVyUm91dGVyKHVpbnQxNl90IGFSbG9jMTYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBTZXJ2ZXIgRGF0YSBOb3RpZmljYXRpb24gbWVzc2FnZSB0byB0aGUgTGVhZGVyIGluZGljYXRpbmcgYW4gaW52YWxpZCBSTE9DMTYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICBUaGUgaW52YWxpZCBSTE9DMTYgdG8gbm90aWZ5LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IG1lc3NhZ2UgYnVmZmVycyB0byBnZW5lcmF0ZSB0aGUgbm90aWZpY2F0aW9uIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmRTZXJ2ZXJEYXRhTm90aWZpY2F0aW9uKHVpbnQxNl90IGFSbG9jMTYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIEhhbmRsZVNlcnZlckRhdGEodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVTZXJ2ZXJEYXRhKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisgICAgb3RFcnJvciBSZWdpc3Rlck5ldHdvcmtEYXRhKHVpbnQxNl90IGFSbG9jMTYsIHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFUbHZzTGVuZ3RoKTsKKworICAgIG90RXJyb3IgQWRkSGFzUm91dGUoUHJlZml4VGx2ICZhUHJlZml4LCBIYXNSb3V0ZVRsdiAmYUhhc1JvdXRlKTsKKyAgICBvdEVycm9yIEFkZEJvcmRlclJvdXRlcihQcmVmaXhUbHYgJmFQcmVmaXgsIEJvcmRlclJvdXRlclRsdiAmYUJvcmRlclJvdXRlcik7CisgICAgb3RFcnJvciBBZGROZXR3b3JrRGF0YSh1aW50OF90ICphVGx2LCB1aW50OF90IGFUbHZMZW5ndGgpOworICAgIG90RXJyb3IgQWRkUHJlZml4KFByZWZpeFRsdiAmYVRsdik7CisKKyAgICBpbnQgQWxsb2NhdGVDb250ZXh0KHZvaWQpOworICAgIG90RXJyb3IgRnJlZUNvbnRleHQodWludDhfdCBhQ29udGV4dElkKTsKKworICAgIG90RXJyb3IgUmVtb3ZlQ29udGV4dCh1aW50OF90IGFDb250ZXh0SWQpOworICAgIG90RXJyb3IgUmVtb3ZlQ29udGV4dChQcmVmaXhUbHYgJmFQcmVmaXgsIHVpbnQ4X3QgYUNvbnRleHRJZCk7CisKKyAgICBvdEVycm9yIFJlbW92ZUNvbW1pc3Npb25pbmdEYXRhKHZvaWQpOworCisgICAgb3RFcnJvciBSZW1vdmVSbG9jKHVpbnQxNl90IGFSbG9jMTYpOworICAgIG90RXJyb3IgUmVtb3ZlUmxvYyhQcmVmaXhUbHYgJmFQcmVmaXgsIHVpbnQxNl90IGFSbG9jMTYpOworICAgIG90RXJyb3IgUmVtb3ZlUmxvYyhQcmVmaXhUbHYgJmFQcmVmaXgsIEhhc1JvdXRlVGx2ICZhSGFzUm91dGUsIHVpbnQxNl90IGFSbG9jMTYpOworICAgIG90RXJyb3IgUmVtb3ZlUmxvYyhQcmVmaXhUbHYgJmFQcmVmaXgsIEJvcmRlclJvdXRlclRsdiAmYUJvcmRlclJvdXRlciwgdWludDE2X3QgYVJsb2MxNik7CisKKyAgICB2b2lkIFJsb2NMb29rdXAodWludDE2X3QgYVJsb2MxNiwgYm9vbCAmYUluLCBib29sICZhU3RhYmxlLCB1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c0xlbmd0aCk7CisgICAgYm9vbCBJc1N0YWJsZVVwZGF0ZWQodWludDE2X3QgYVJsb2MxNiwgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgsIHVpbnQ4X3QgKmFUbHZzQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFUbHZzQmFzZUxlbmd0aCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVDb21taXNzaW9uaW5nU2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlQ29tbWlzc2lvbmluZ1NldChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlQ29tbWlzc2lvbmluZ0dldCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUNvbW1pc3Npb25pbmdHZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHZvaWQgU2VuZENvbW1pc3Npb25pbmdHZXRSZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpOworICAgIHZvaWQgU2VuZENvbW1pc3Npb25pbmdTZXRSZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc2hDb1A6OlN0YXRlVGx2OjpTdGF0ZSBhU3RhdGUpOworICAgIHN0YXRpYyBMZWFkZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRocmVhZCBTcGVjaWZpY2F0aW9uIENvbnN0YW50cworICAgICAqCisgICAgICovCisgICAgZW51bQorICAgIHsKKyAgICAgICAga01pbkNvbnRleHRJZCAgICAgICAgPSAxLCAgICAgICAgICAgICAvLy88IE1pbmltdW0gQ29udGV4dCBJRCAoMCBpcyB1c2VkIGZvciBNZXNoIExvY2FsKQorICAgICAgICBrTnVtQ29udGV4dElkcyAgICAgICA9IDE1LCAgICAgICAgICAgIC8vLzwgTWF4aW11bSBDb250ZXh0IElECisgICAgICAgIGtDb250ZXh0SWRSZXVzZURlbGF5ID0gNDggKiA2MCAqIDYwLCAgLy8vPCBDT05URVhUX0lEX1JFVVNFX0RFTEFZIChzZWNvbmRzKQorICAgICAgICBrU3RhdGVVcGRhdGVQZXJpb2QgICA9IDEwMDAsICAgICAgICAgIC8vLzwgU3RhdGUgdXBkYXRlIHBlcmlvZCBpbiBtaWxsaXNlY29uZHMKKyAgICB9OworICAgIHVpbnQxNl90IG1Db250ZXh0VXNlZDsKKyAgICB1aW50MzJfdCBtQ29udGV4dExhc3RVc2VkW2tOdW1Db250ZXh0SWRzXTsKKyAgICB1aW50MzJfdCBtQ29udGV4dElkUmV1c2VEZWxheTsKKyAgICBUaW1lciBtVGltZXI7CisKKyAgICBDb2FwOjpSZXNvdXJjZSAgbVNlcnZlckRhdGE7CisKKyAgICBDb2FwOjpSZXNvdXJjZSBtQ29tbWlzc2lvbmluZ0RhdGFHZXQ7CisgICAgQ29hcDo6UmVzb3VyY2UgbUNvbW1pc3Npb25pbmdEYXRhU2V0OworfTsKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBOZXR3b3JrRGF0YQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkVUV09SS19EQVRBX0xFQURFUl9GVERfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXJfbXRkLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyX210ZC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzNjk3OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyX210ZC5ocHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBUaHJlYWQgTmV0d29yayBEYXRhIG1hbmFnZWQgYnkgdGhlIFRocmVhZCBMZWFkZXIuCisgKi8KKworI2lmbmRlZiBORVRXT1JLX0RBVEFfTEVBREVSX01URF9IUFBfCisjZGVmaW5lIE5FVFdPUktfREFUQV9MRUFERVJfTVREX0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworCituYW1lc3BhY2UgTmV0d29ya0RhdGEgeworCitjbGFzcyBMZWFkZXI6IHB1YmxpYyBMZWFkZXJCYXNlCit7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTGVhZGVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDogTGVhZGVyQmFzZShhVGhyZWFkTmV0aWYpIHsgfQorCisgICAgdm9pZCBTdGFydCh2b2lkKSB7IH0KKyAgICB2b2lkIFN0b3Aodm9pZCkgeyB9CisKKyAgICB2b2lkIEluY3JlbWVudFZlcnNpb24odm9pZCkgeyB9CisgICAgdm9pZCBJbmNyZW1lbnRTdGFibGVWZXJzaW9uKHZvaWQpIHsgfQorCisgICAgb3RFcnJvciBTZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbih1aW50MTZfdCkgeyByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyB9Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTmV0d29ya0RhdGEKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5FVFdPUktfREFUQV9MRUFERVJfTVREX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbG9jYWwuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sb2NhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FjNjQwZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbG9jYWwuY3BwCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBsb2NhbCBUaHJlYWQgTmV0d29yayBEYXRhLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibmV0d29ya19kYXRhX2xvY2FsLmhwcCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBOZXR3b3JrRGF0YSB7CisKK0xvY2FsOjpMb2NhbChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKToKKyAgICBOZXR3b3JrRGF0YShhVGhyZWFkTmV0aWYsIHRydWUpLAorICAgIG1PbGRSbG9jKE1hYzo6a1Nob3J0QWRkckludmFsaWQpCit7Cit9CisKK290RXJyb3IgTG9jYWw6OkFkZE9uTWVzaFByZWZpeChjb25zdCB1aW50OF90ICphUHJlZml4LCB1aW50OF90IGFQcmVmaXhMZW5ndGgsIGludDhfdCBhUHJmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYUZsYWdzLCBib29sIGFTdGFibGUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgUHJlZml4VGx2ICpwcmVmaXhUbHY7CisgICAgQm9yZGVyUm91dGVyVGx2ICpiclRsdjsKKworICAgIFZlcmlmeU9yRXhpdChJcDY6OkFkZHJlc3M6OlByZWZpeE1hdGNoKGFQcmVmaXgsIEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0TWVzaExvY2FsUHJlZml4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFQcmVmaXhMZW5ndGggKyA3KSAvIDgpIDwgSXA2OjpBZGRyZXNzOjprTWVzaExvY2FsUHJlZml4TGVuZ3RoLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBSZW1vdmVPbk1lc2hQcmVmaXgoYVByZWZpeCwgYVByZWZpeExlbmd0aCk7CisKKyAgICBwcmVmaXhUbHYgPSByZWludGVycHJldF9jYXN0PFByZWZpeFRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworICAgIEluc2VydChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4ocHJlZml4VGx2KSwKKyAgICAgICAgICAgc2l6ZW9mKFByZWZpeFRsdikgKyBCaXRWZWN0b3JCeXRlcyhhUHJlZml4TGVuZ3RoKSArIHNpemVvZihCb3JkZXJSb3V0ZXJUbHYpICsgc2l6ZW9mKEJvcmRlclJvdXRlckVudHJ5KSk7CisgICAgcHJlZml4VGx2LT5Jbml0KDAsIGFQcmVmaXhMZW5ndGgsIGFQcmVmaXgpOworICAgIHByZWZpeFRsdi0+U2V0U3ViVGx2c0xlbmd0aChzaXplb2YoQm9yZGVyUm91dGVyVGx2KSArIHNpemVvZihCb3JkZXJSb3V0ZXJFbnRyeSkpOworCisgICAgYnJUbHYgPSBzdGF0aWNfY2FzdDxCb3JkZXJSb3V0ZXJUbHYgKj4ocHJlZml4VGx2LT5HZXRTdWJUbHZzKCkpOworICAgIGJyVGx2LT5Jbml0KCk7CisgICAgYnJUbHYtPlNldExlbmd0aChiclRsdi0+R2V0TGVuZ3RoKCkgKyBzaXplb2YoQm9yZGVyUm91dGVyRW50cnkpKTsKKyAgICBiclRsdi0+R2V0RW50cnkoMCktPkluaXQoKTsKKyAgICBiclRsdi0+R2V0RW50cnkoMCktPlNldFByZWZlcmVuY2UoYVByZik7CisgICAgYnJUbHYtPkdldEVudHJ5KDApLT5TZXRGbGFncyhhRmxhZ3MpOworCisgICAgaWYgKGFTdGFibGUpCisgICAgeworICAgICAgICBwcmVmaXhUbHYtPlNldFN0YWJsZSgpOworICAgICAgICBiclRsdi0+U2V0U3RhYmxlKCk7CisgICAgfQorCisgICAgQ2xlYXJSZXN1Ym1pdERlbGF5VGltZXIoKTsKKworICAgIG90RHVtcERlYmdOZXREYXRhKEdldEluc3RhbmNlKCksICJhZGQgcHJlZml4IGRvbmUiLCBtVGx2cywgbUxlbmd0aCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExvY2FsOjpSZW1vdmVPbk1lc2hQcmVmaXgoY29uc3QgdWludDhfdCAqYVByZWZpeCwgdWludDhfdCBhUHJlZml4TGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFByZWZpeFRsdiAqdGx2OworCisgICAgVmVyaWZ5T3JFeGl0KCh0bHYgPSBGaW5kUHJlZml4KGFQcmVmaXgsIGFQcmVmaXhMZW5ndGgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisgICAgVmVyaWZ5T3JFeGl0KEZpbmRCb3JkZXJSb3V0ZXIoKnRsdikgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworICAgIFJlbW92ZShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4odGx2KSwgc2l6ZW9mKE5ldHdvcmtEYXRhVGx2KSArIHRsdi0+R2V0TGVuZ3RoKCkpOworICAgIENsZWFyUmVzdWJtaXREZWxheVRpbWVyKCk7CisKK2V4aXQ6CisgICAgb3REdW1wRGViZ05ldERhdGEoR2V0SW5zdGFuY2UoKSwgInJlbW92ZSBkb25lIiwgbVRsdnMsIG1MZW5ndGgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBMb2NhbDo6QWRkSGFzUm91dGVQcmVmaXgoY29uc3QgdWludDhfdCAqYVByZWZpeCwgdWludDhfdCBhUHJlZml4TGVuZ3RoLCBpbnQ4X3QgYVByZiwgYm9vbCBhU3RhYmxlKQoreworICAgIFByZWZpeFRsdiAqcHJlZml4VGx2OworICAgIEhhc1JvdXRlVGx2ICpoYXNSb3V0ZVRsdjsKKworICAgIFJlbW92ZUhhc1JvdXRlUHJlZml4KGFQcmVmaXgsIGFQcmVmaXhMZW5ndGgpOworCisgICAgcHJlZml4VGx2ID0gcmVpbnRlcnByZXRfY2FzdDxQcmVmaXhUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKyAgICBJbnNlcnQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KHByZWZpeFRsdiksCisgICAgICAgICAgIHNpemVvZihQcmVmaXhUbHYpICsgQml0VmVjdG9yQnl0ZXMoYVByZWZpeExlbmd0aCkgKyBzaXplb2YoSGFzUm91dGVUbHYpICsgc2l6ZW9mKEhhc1JvdXRlRW50cnkpKTsKKyAgICBwcmVmaXhUbHYtPkluaXQoMCwgYVByZWZpeExlbmd0aCwgYVByZWZpeCk7CisgICAgcHJlZml4VGx2LT5TZXRTdWJUbHZzTGVuZ3RoKHNpemVvZihIYXNSb3V0ZVRsdikgKyBzaXplb2YoSGFzUm91dGVFbnRyeSkpOworCisgICAgaGFzUm91dGVUbHYgPSBzdGF0aWNfY2FzdDxIYXNSb3V0ZVRsdiAqPihwcmVmaXhUbHYtPkdldFN1YlRsdnMoKSk7CisgICAgaGFzUm91dGVUbHYtPkluaXQoKTsKKyAgICBoYXNSb3V0ZVRsdi0+U2V0TGVuZ3RoKGhhc1JvdXRlVGx2LT5HZXRMZW5ndGgoKSArIHNpemVvZihIYXNSb3V0ZUVudHJ5KSk7CisgICAgaGFzUm91dGVUbHYtPkdldEVudHJ5KDApLT5Jbml0KCk7CisgICAgaGFzUm91dGVUbHYtPkdldEVudHJ5KDApLT5TZXRQcmVmZXJlbmNlKGFQcmYpOworCisgICAgaWYgKGFTdGFibGUpCisgICAgeworICAgICAgICBwcmVmaXhUbHYtPlNldFN0YWJsZSgpOworICAgICAgICBoYXNSb3V0ZVRsdi0+U2V0U3RhYmxlKCk7CisgICAgfQorCisgICAgQ2xlYXJSZXN1Ym1pdERlbGF5VGltZXIoKTsKKworICAgIG90RHVtcERlYmdOZXREYXRhKEdldEluc3RhbmNlKCksICJhZGQgcm91dGUgZG9uZSIsIG1UbHZzLCBtTGVuZ3RoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBMb2NhbDo6UmVtb3ZlSGFzUm91dGVQcmVmaXgoY29uc3QgdWludDhfdCAqYVByZWZpeCwgdWludDhfdCBhUHJlZml4TGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFByZWZpeFRsdiAqdGx2OworCisgICAgVmVyaWZ5T3JFeGl0KCh0bHYgPSBGaW5kUHJlZml4KGFQcmVmaXgsIGFQcmVmaXhMZW5ndGgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisgICAgVmVyaWZ5T3JFeGl0KEZpbmRIYXNSb3V0ZSgqdGx2KSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisgICAgUmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPih0bHYpLCBzaXplb2YoTmV0d29ya0RhdGFUbHYpICsgdGx2LT5HZXRMZW5ndGgoKSk7CisgICAgQ2xlYXJSZXN1Ym1pdERlbGF5VGltZXIoKTsKKworZXhpdDoKKyAgICBvdER1bXBEZWJnTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAicmVtb3ZlIGRvbmUiLCBtVGx2cywgbUxlbmd0aCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExvY2FsOjpVcGRhdGVSbG9jKHZvaWQpCit7CisgICAgZm9yIChOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyk7CisgICAgICAgICBjdXIgPCByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY3VyLT5HZXRUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXg6CisgICAgICAgICAgICBVcGRhdGVSbG9jKCpzdGF0aWNfY2FzdDxQcmVmaXhUbHYgKj4oY3VyKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgQ2xlYXJSZXN1Ym1pdERlbGF5VGltZXIoKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIExvY2FsOjpVcGRhdGVSbG9jKFByZWZpeFRsdiAmYVByZWZpeCkKK3sKKyAgICBmb3IgKE5ldHdvcmtEYXRhVGx2ICpjdXIgPSBhUHJlZml4LkdldFN1YlRsdnMoKTsgY3VyIDwgYVByZWZpeC5HZXROZXh0KCk7IGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjdXItPkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZUhhc1JvdXRlOgorICAgICAgICAgICAgVXBkYXRlUmxvYygqc3RhdGljX2Nhc3Q8SGFzUm91dGVUbHYgKj4oY3VyKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZUJvcmRlclJvdXRlcjoKKyAgICAgICAgICAgIFVwZGF0ZVJsb2MoKnN0YXRpY19jYXN0PEJvcmRlclJvdXRlclRsdiAqPihjdXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBMb2NhbDo6VXBkYXRlUmxvYyhIYXNSb3V0ZVRsdiAmYUhhc1JvdXRlKQoreworICAgIEhhc1JvdXRlRW50cnkgKmVudHJ5ID0gYUhhc1JvdXRlLkdldEVudHJ5KDApOworICAgIGVudHJ5LT5TZXRSbG9jKEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0UmxvYzE2KCkpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIExvY2FsOjpVcGRhdGVSbG9jKEJvcmRlclJvdXRlclRsdiAmYUJvcmRlclJvdXRlcikKK3sKKyAgICBCb3JkZXJSb3V0ZXJFbnRyeSAqZW50cnkgPSBhQm9yZGVyUm91dGVyLkdldEVudHJ5KDApOworICAgIGVudHJ5LT5TZXRSbG9jKEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0UmxvYzE2KCkpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitib29sIExvY2FsOjpJc09uTWVzaFByZWZpeENvbnNpc3RlbnQodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgcmV0dXJuIChuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkNvbnRhaW5zT25NZXNoUHJlZml4ZXMoKnRoaXMsIG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNigpKSAmJgorICAgICAgICAgICAgQ29udGFpbnNPbk1lc2hQcmVmaXhlcyhuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLCBuZXRpZi5HZXRNbGUoKS5HZXRSbG9jMTYoKSkpOworfQorCitib29sIExvY2FsOjpJc0V4dGVybmFsUm91dGVDb25zaXN0ZW50KHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIHJldHVybiAobmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5Db250YWluc0V4dGVybmFsUm91dGVzKCp0aGlzLCBuZXRpZi5HZXRNbGUoKS5HZXRSbG9jMTYoKSkgJiYKKyAgICAgICAgICAgIENvbnRhaW5zRXh0ZXJuYWxSb3V0ZXMobmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKSwgbmV0aWYuR2V0TWxlKCkuR2V0UmxvYzE2KCkpKTsKK30KKworb3RFcnJvciBMb2NhbDo6U2VuZFNlcnZlckRhdGFOb3RpZmljYXRpb24odm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIE1sZTo6TWxlUm91dGVyICZtbGUgPSBuZXRpZi5HZXRNbGUoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MTZfdCBybG9jID0gbWxlLkdldFJsb2MxNigpOworCisjaWYgT1BFTlRIUkVBRF9GVEQKKworICAgIC8vIERvbid0IHNlbmQgdGhpcyBTZXJ2ZXIgRGF0YSBOb3RpZmljYXRpb24gaWYgdGhlIGRldmljZSBpcyBnb2luZyB0byB1cGdyYWRlIHRvIFJvdXRlcgorICAgIGlmICgobWxlLkdldERldmljZU1vZGUoKSAmIE1sZTo6TW9kZVRsdjo6a01vZGVGRkQpICE9IDAgJiYKKyAgICAgICAgKG1sZS5Jc1JvdXRlclJvbGVFbmFibGVkKCkpICYmCisgICAgICAgIChtbGUuR2V0Um9sZSgpIDwgT1RfREVWSUNFX1JPTEVfUk9VVEVSKSAmJgorICAgICAgICAobWxlLkdldEFjdGl2ZVJvdXRlckNvdW50KCkgPCBtbGUuR2V0Um91dGVyVXBncmFkZVRocmVzaG9sZCgpKSkKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKyAgICB9CisKKyNlbmRpZgorCisgICAgVXBkYXRlUmxvYygpOworCisgICAgVmVyaWZ5T3JFeGl0KCFJc09uTWVzaFByZWZpeENvbnNpc3RlbnQoKSB8fCAhSXNFeHRlcm5hbFJvdXRlQ29uc2lzdGVudCgpLCBDbGVhclJlc3VibWl0RGVsYXlUaW1lcigpKTsKKworICAgIGlmIChtT2xkUmxvYyA9PSBybG9jKQorICAgIHsKKyAgICAgICAgbU9sZFJsb2MgPSBNYWM6OmtTaG9ydEFkZHJJbnZhbGlkOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBOZXR3b3JrRGF0YTo6U2VuZFNlcnZlckRhdGFOb3RpZmljYXRpb24obU9sZFJsb2MpKTsKKyAgICBtT2xkUmxvYyA9IHJsb2M7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit9ICAvLyBuYW1lc3BhY2UgTmV0d29ya0RhdGEKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sb2NhbC5ocHAgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xvY2FsLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGJiNGU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sb2NhbC5ocHAKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5pcHVsYXRpbmcgbG9jYWwgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAqLworCisjaWZuZGVmIE5FVFdPUktfREFUQV9MT0NBTF9IUFBfCisjZGVmaW5lIE5FVFdPUktfREFUQV9MT0NBTF9IUFBfCisKKyNpbmNsdWRlICJ0aHJlYWQvbmV0d29ya19kYXRhLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1uZXRkYXRhLWxvY2FsCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5pcHVsYXRpbmcgbG9jYWwgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAqCisgKiBAeworICovCisKK25hbWVzcGFjZSBOZXR3b3JrRGF0YSB7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhIGNvbnRyaWJ1dGVkIGJ5IHRoZSBsb2NhbCBkZXZpY2UuCisgKgorICovCitjbGFzcyBMb2NhbDogcHVibGljIE5ldHdvcmtEYXRhCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgbG9jYWwgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgZXhwbGljaXQgTG9jYWwoVGhyZWFkTmV0aWYgJmFOZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgQm9yZGVyIFJvdXRlciBlbnRyeSB0byB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXggICAgICAgIEEgcG9pbnRlciB0byB0aGUgcHJlZml4LgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXhMZW5ndGggIFRoZSBsZW5ndGggb2YgQHAgYVByZWZpeCBpbiBieXRlcy4KKyAgICAgKiBAcGFyYW1baW5dICBhUHJmICAgICAgICAgICBUaGUgcHJlZmVyZW5jZSB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICBhRmxhZ3MgICAgICAgICBUaGUgQm9yZGVyIFJvdXRlciBGbGFncyB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICBhU3RhYmxlICAgICAgICBUaGUgU3RhYmxlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBCb3JkZXIgUm91dGVyIGVudHJ5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgIEluc3VmZmljaWVudCBzcGFjZSB0byBhZGQgdGhlIEJvcmRlciBSb3V0ZXIgZW50cnkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgVGhlIHByZWZpeCBpcyBtZXNoIGxvY2FsIHByZWZpeC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWRkT25NZXNoUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFQcmVmaXgsIHVpbnQ4X3QgYVByZWZpeExlbmd0aCwgaW50OF90IGFQcmYsIHVpbnQ4X3QgYUZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVN0YWJsZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgQm9yZGVyIFJvdXRlciBlbnRyeSBmcm9tIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeCAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBwcmVmaXguCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeExlbmd0aCAgVGhlIGxlbmd0aCBvZiBAcCBhUHJlZml4IGluIGJ5dGVzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBCb3JkZXIgUm91dGVyIGVudHJ5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgQm9yZGVyIFJvdXRlciBlbnRyeS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVtb3ZlT25NZXNoUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFQcmVmaXgsIHVpbnQ4X3QgYVByZWZpeExlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgSGFzIFJvdXRlIGVudHJ5IHRvIHRoZSBUaHJlYWQgTmV0d29yayBkYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeCAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBwcmVmaXguCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeExlbmd0aCAgVGhlIGxlbmd0aCBvZiBAcCBhUHJlZml4IGluIGJ5dGVzLgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmYgICAgICAgICAgIFRoZSBwcmVmZXJlbmNlIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGFibGUgICAgICAgIFRoZSBTdGFibGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgSGFzIFJvdXRlIGVudHJ5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IHNwYWNlIHRvIGFkZCB0aGUgSGFzIFJvdXRlIGVudHJ5LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBZGRIYXNSb3V0ZVByZWZpeChjb25zdCB1aW50OF90ICphUHJlZml4LCB1aW50OF90IGFQcmVmaXhMZW5ndGgsIGludDhfdCBhUHJmLCBib29sIGFTdGFibGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhIEJvcmRlciBSb3V0ZXIgZW50cnkgZnJvbSB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXggICAgICAgIEEgcG9pbnRlciB0byB0aGUgcHJlZml4LgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXhMZW5ndGggIFRoZSBsZW5ndGggb2YgQHAgYVByZWZpeCBpbiBieXRlcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgQm9yZGVyIFJvdXRlciBlbnRyeS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgQ291bGQgbm90IGZpbmQgdGhlIEJvcmRlciBSb3V0ZXIgZW50cnkuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZUhhc1JvdXRlUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFQcmVmaXgsIHVpbnQ4X3QgYVByZWZpeExlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIFNlcnZlciBEYXRhIE5vdGlmaWNhdGlvbiBtZXNzYWdlIHRvIHRoZSBMZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBlbnF1ZXVlZCB0aGUgbm90aWZpY2F0aW9uIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgbWVzc2FnZSBidWZmZXJzIHRvIGdlbmVyYXRlIHRoZSBub3RpZmljYXRpb24gbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZFNlcnZlckRhdGFOb3RpZmljYXRpb24odm9pZCk7CisKK3ByaXZhdGU6CisgICAgb3RFcnJvciBVcGRhdGVSbG9jKHZvaWQpOworICAgIG90RXJyb3IgVXBkYXRlUmxvYyhQcmVmaXhUbHYgJmFQcmVmaXgpOworICAgIG90RXJyb3IgVXBkYXRlUmxvYyhIYXNSb3V0ZVRsdiAmYUhhc1JvdXRlKTsKKyAgICBvdEVycm9yIFVwZGF0ZVJsb2MoQm9yZGVyUm91dGVyVGx2ICZhQm9yZGVyUm91dGVyKTsKKworICAgIGJvb2wgSXNPbk1lc2hQcmVmaXhDb25zaXN0ZW50KHZvaWQpOworICAgIGJvb2wgSXNFeHRlcm5hbFJvdXRlQ29uc2lzdGVudCh2b2lkKTsKKworICAgIHVpbnQxNl90IG1PbGRSbG9jOworfTsKKworfSAgLy8gbmFtZXNwYWNlIE5ldHdvcmtEYXRhCisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRXT1JLX0RBVEFfTE9DQUxfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV90bHZzLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfdGx2cy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzOWUwNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfdGx2cy5ocHAKQEAgLTAsMCArMSw2OTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBnZW5lcmF0aW5nIGFuZCBwcm9jZXNzaW5nIFRocmVhZCBOZXR3b3JrIERhdGEgVExWcy4KKyAqLworCisjaWZuZGVmIE5FVFdPUktfREFUQV9UTFZTX0hQUF8KKyNkZWZpbmUgTkVUV09SS19EQVRBX1RMVlNfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTmV0d29ya0RhdGEgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbmV0ZGF0YS10bHZzCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBnZW5lcmF0aW5nIGFuZCBwcm9jZXNzaW5nIFRocmVhZCBOZXR3b3JrIERhdGEgVExWcy4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBUaHJlYWQgTmV0d29yayBEYXRhIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE5ldHdvcmtEYXRhVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgbVR5cGUgPSAwOyBtTGVuZ3RoID0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhyZWFkIE5ldHdvcmsgRGF0YSBUeXBlIHZhbHVlcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gVHlwZQorICAgIHsKKyAgICAgICAga1R5cGVIYXNSb3V0ZSAgICAgICAgICA9IDAsICAvLy88IEhhcyBSb3V0ZSBUTFYKKyAgICAgICAga1R5cGVQcmVmaXggICAgICAgICAgICA9IDEsICAvLy88IFByZWZpeCBUTFYKKyAgICAgICAga1R5cGVCb3JkZXJSb3V0ZXIgICAgICA9IDIsICAvLy88IEJvcmRlciBSb3V0ZXIgVExWCisgICAgICAgIGtUeXBlQ29udGV4dCAgICAgICAgICAgPSAzLCAgLy8vPCBDb250ZXh0IFRMVgorICAgICAgICBrVHlwZUNvbW1pc3Npb25pbmdEYXRhID0gNCwgIC8vLzwgQ29tbWlzc2lvbmluZyBEYXRhc2V0IFRMVgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBUeXBlIEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4obVR5cGUgPj4ga1R5cGVPZmZzZXQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgIFRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUeXBlKFR5cGUgYVR5cGUpIHsKKyAgICAgICAgbVR5cGUgPSAobVR5cGUgJiB+a1R5cGVNYXNrKSB8ICgoYVR5cGUgPDwga1R5cGVPZmZzZXQpICYga1R5cGVNYXNrKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gbUxlbmd0aDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgVGhlIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGVuZ3RoKHVpbnQ4X3QgYUxlbmd0aCkgeyBtTGVuZ3RoID0gYUxlbmd0aDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldFZhbHVlKHZvaWQpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPih0aGlzKSArIHNpemVvZihOZXR3b3JrRGF0YVRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IE5ldHdvcmsgRGF0YSBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5leHQgTmV0d29yayBEYXRhIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIE5ldHdvcmtEYXRhVGx2ICpHZXROZXh0KHZvaWQpIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KHRoaXMpICsgc2l6ZW9mKCp0aGlzKSArIG1MZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgU3RhYmxlIGJpdC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJTdGFibGUodm9pZCkgeyBtVHlwZSAmPSB+a1N0YWJsZU1hc2s7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgU3RhYmxlIGJpdCBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgU3RhYmxlIGJpdCBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFN0YWJsZSBiaXQgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNTdGFibGUodm9pZCkgY29uc3QgeyByZXR1cm4gKG1UeXBlICYga1N0YWJsZU1hc2spOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTdGFibGUgYml0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTdGFibGUodm9pZCkgeyBtVHlwZSB8PSBrU3RhYmxlTWFzazsgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtUeXBlT2Zmc2V0ID0gMSwKKyAgICAgICAga1R5cGVNYXNrID0gMHg3ZiA8PCBrVHlwZU9mZnNldCwKKyAgICAgICAga1N0YWJsZU1hc2sgPSAxIDw8IDAsCisgICAgfTsKKyAgICB1aW50OF90IG1UeXBlOworICAgIHVpbnQ4X3QgbUxlbmd0aDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBIYXMgUm91dGUgVExWIGVudHJ5IGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgSGFzUm91dGVFbnRyeQoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRSbG9jKE1hYzo6a1Nob3J0QWRkckludmFsaWQpOyBtRmxhZ3MgPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqLworICAgIHVpbnQxNl90IEdldFJsb2Modm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUmxvYyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJsb2ModWludDE2X3QgYVJsb2MxNikgeyBtUmxvYyA9IEhvc3RTd2FwMTYoYVJsb2MxNik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFByZWZlcmVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgcHJlZmVyZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGludDhfdCBHZXRQcmVmZXJlbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludDhfdD4obUZsYWdzKSA+PiBrUHJlZmVyZW5jZU9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUHJlZmVyZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmYgIFRoZSBQcmVmZXJlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQcmVmZXJlbmNlKGludDhfdCBhUHJmKSB7CisgICAgICAgIG1GbGFncyA9IChtRmxhZ3MgJiB+a1ByZWZlcmVuY2VNYXNrKSB8ICgoYVByZiA8PCBrUHJlZmVyZW5jZU9mZnNldCkgJiBrUHJlZmVyZW5jZU1hc2spOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrUHJlZmVyZW5jZU9mZnNldCA9IDYsCisgICAgICAgIGtQcmVmZXJlbmNlTWFzayA9IDMgPDwga1ByZWZlcmVuY2VPZmZzZXQsCisgICAgfTsKKworICAgIHVpbnQxNl90IG1SbG9jOworICAgIHVpbnQ4X3QgbUZsYWdzOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEhhcyBSb3V0ZSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBIYXNSb3V0ZVRsdjogcHVibGljIE5ldHdvcmtEYXRhVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IE5ldHdvcmtEYXRhVGx2OjpJbml0KCk7IFNldFR5cGUoa1R5cGVIYXNSb3V0ZSk7IFNldExlbmd0aCgwKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIEhhc1JvdXRlIGVudHJpZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIEhhc1JvdXRlIGVudHJpZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldE51bUVudHJpZXModm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgLyBzaXplb2YoSGFzUm91dGVFbnRyeSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBpJ3RoIEhhc1JvdXRlIGVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgaSAgQW4gaW5kZXguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGkndGggSGFzUm91dGUgZW50cnkuCisgICAgICoKKyAgICAgKi8KKyAgICBIYXNSb3V0ZUVudHJ5ICpHZXRFbnRyeSh1aW50OF90IGkpIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SGFzUm91dGVFbnRyeSAqPihHZXRWYWx1ZSgpICsgKGkgKiBzaXplb2YoSGFzUm91dGVFbnRyeSkpKTsKKyAgICB9Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUHJlZml4IFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFByZWZpeFRsdjogcHVibGljIE5ldHdvcmtEYXRhVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEb21haW5JZCAgICAgIFRoZSBEb21haW4gSUQuCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeExlbmd0aCAgVGhlIFByZWZpeCBMZW5ndGgKKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHByZWZpeC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh1aW50OF90IGFEb21haW5JZCwgdWludDhfdCBhUHJlZml4TGVuZ3RoLCBjb25zdCB1aW50OF90ICphUHJlZml4KSB7CisgICAgICAgIE5ldHdvcmtEYXRhVGx2OjpJbml0KCk7CisgICAgICAgIFNldFR5cGUoa1R5cGVQcmVmaXgpOworICAgICAgICBtRG9tYWluSWQgPSBhRG9tYWluSWQ7CisgICAgICAgIG1QcmVmaXhMZW5ndGggPSBhUHJlZml4TGVuZ3RoOworICAgICAgICBtZW1jcHkoR2V0UHJlZml4KCksIGFQcmVmaXgsIEJpdFZlY3RvckJ5dGVzKGFQcmVmaXhMZW5ndGgpKTsKKyAgICAgICAgU2V0U3ViVGx2c0xlbmd0aCgwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBEb21haW4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRG9tYWluIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXREb21haW5JZCh2b2lkKSBjb25zdCB7IHJldHVybiBtRG9tYWluSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFByZWZpeCBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUHJlZml4IExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0UHJlZml4TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1QcmVmaXhMZW5ndGg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBQcmVmaXguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFByZWZpeC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldFByZWZpeCh2b2lkKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4odGhpcykgKyBzaXplb2YoKnRoaXMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgU3ViLVRMVnMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFN1Yi1UTFZzLgorICAgICAqCisgICAgICovCisgICAgTmV0d29ya0RhdGFUbHYgKkdldFN1YlRsdnModm9pZCkgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihHZXRQcmVmaXgoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdFZlY3RvckJ5dGVzKG1QcmVmaXhMZW5ndGgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBTdWItVExWcyBsZW5ndGggaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgU3ViLVRMVnMgbGVuZ3RoIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTdWJUbHZzTGVuZ3RoKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEdldExlbmd0aCgpIC0gKHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RhdGFUbHYpICsgQml0VmVjdG9yQnl0ZXMobVByZWZpeExlbmd0aCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFN1Yi1UTFZzIGxlbmd0aCBpbiBieXRlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBTdWItVExWcyBsZW5ndGggaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN1YlRsdnNMZW5ndGgodWludDhfdCBhTGVuZ3RoKSB7CisgICAgICAgIFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEYXRhVGx2KSArIEJpdFZlY3RvckJ5dGVzKG1QcmVmaXhMZW5ndGgpICsgYUxlbmd0aCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbURvbWFpbklkOworICAgIHVpbnQ4X3QgbVByZWZpeExlbmd0aDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBCb3JkZXIgUm91dGVyIEVudHJ5IGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQm9yZGVyUm91dGVyRW50cnkKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrUHJlZmVyZW5jZU9mZnNldCA9IDYsCisgICAgICAgIGtQcmVmZXJlbmNlTWFzayA9IDMgPDwga1ByZWZlcmVuY2VPZmZzZXQsCisgICAgICAgIGtQcmVmZXJyZWRGbGFnID0gMSA8PCA1LAorICAgICAgICBrU2xhYWNGbGFnID0gMSA8PCA0LAorICAgICAgICBrRGhjcEZsYWcgPSAxIDw8IDMsCisgICAgICAgIGtDb25maWd1cmVGbGFnID0gMSA8PCAyLAorICAgICAgICBrRGVmYXVsdFJvdXRlRmxhZyA9IDEgPDwgMSwKKyAgICAgICAga09uTWVzaEZsYWcgPSAxIDw8IDAsCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRSbG9jKE1hYzo6a1Nob3J0QWRkckludmFsaWQpOyBtRmxhZ3MgPSAwOyBtUmVzZXJ2ZWQgPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqLworICAgIHVpbnQxNl90IEdldFJsb2Modm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUmxvYyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJsb2ModWludDE2X3QgYVJsb2MxNikgeyBtUmxvYyA9IEhvc3RTd2FwMTYoYVJsb2MxNik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEZsYWdzIGJ5dGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRmxhZ3MgYnl0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0RmxhZ3Modm9pZCkgY29uc3QgeyByZXR1cm4gbUZsYWdzICYgfmtQcmVmZXJlbmNlTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRmxhZ3MgYnl0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGbGFncyAgVGhlIEZsYWdzIGJ5dGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEZsYWdzKHVpbnQ4X3QgYUZsYWdzKSB7IG1GbGFncyA9IChtRmxhZ3MgJiBrUHJlZmVyZW5jZU1hc2spIHwgKGFGbGFncyAmIH5rUHJlZmVyZW5jZU1hc2spOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQcmVmZXJlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgdGhlIFByZWZlcmVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQ4X3QgR2V0UHJlZmVyZW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ4X3Q+KG1GbGFncykgPj4ga1ByZWZlcmVuY2VPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFByZWZlcmVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJmICBUaGUgUHJlZmVyZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UHJlZmVyZW5jZShpbnQ4X3QgYVByZikgeworICAgICAgICBtRmxhZ3MgPSAobUZsYWdzICYgfmtQcmVmZXJlbmNlTWFzaykgfCAoKGFQcmYgPDwga1ByZWZlcmVuY2VPZmZzZXQpICYga1ByZWZlcmVuY2VNYXNrKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFByZWZlcnJlZCBmbGFnIGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBQcmVmZXJyZWQgZmxhZyBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFByZWZlcnJlZCBmbGFnIGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUHJlZmVycmVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChtRmxhZ3MgJiBrUHJlZmVycmVkRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBQcmVmZXJyZWQgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJQcmVmZXJyZWQodm9pZCkgeyBtRmxhZ3MgJj0gfmtQcmVmZXJyZWRGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQcmVmZXJyZWQgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UHJlZmVycmVkKHZvaWQpIHsgbUZsYWdzIHw9IGtQcmVmZXJyZWRGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFNMQUFDIGZsYWcgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFNMQUFDIGZsYWcgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBTTEFBQyBmbGFnIGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzU2xhYWModm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFncyAmIGtTbGFhY0ZsYWcpICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgU0xBQUMgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJTbGFhYyh2b2lkKSB7IG1GbGFncyAmPSB+a1NsYWFjRmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgU0xBQUMgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2xhYWModm9pZCkgeyBtRmxhZ3MgfD0ga1NsYWFjRmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBESENQIGZsYWcgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIERIQ1AgZmxhZyBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIERIQ1AgZmxhZyBpcyBub3Qgc2V0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0RoY3Aodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFncyAmIGtEaGNwRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBESENQIGZsYWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyRGhjcCh2b2lkKSB7IG1GbGFncyAmPSB+a0RoY3BGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBESENQIGZsYWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERoY3Aodm9pZCkgeyBtRmxhZ3MgfD0ga0RoY3BGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIENvbmZpZ3VyZSBmbGFnIGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBDb25maWd1cmUgZmxhZyBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIENvbmZpZ3VyZSBmbGFnIGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQ29uZmlndXJlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChtRmxhZ3MgJiBrQ29uZmlndXJlRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBDb25maWd1cmUgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJDb25maWd1cmUodm9pZCkgeyBtRmxhZ3MgJj0gfmtDb25maWd1cmVGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDb25maWd1cmUgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q29uZmlndXJlKHZvaWQpIHsgbUZsYWdzIHw9IGtDb25maWd1cmVGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIERlZmF1bHQgUm91dGUgZmxhZyBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgRGVmYXVsdCBSb3V0ZSBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgRGVmYXVsdCBSb3V0ZSBmbGFnIGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRGVmYXVsdFJvdXRlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChtRmxhZ3MgJiBrRGVmYXVsdFJvdXRlRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBEZWZhdWx0IFJvdXRlIGZsYWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyRGVmYXVsdFJvdXRlKHZvaWQpIHsgbUZsYWdzICY9IH5rRGVmYXVsdFJvdXRlRmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGVmYXVsdCBSb3V0ZSBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREZWZhdWx0Um91dGUodm9pZCkgeyBtRmxhZ3MgfD0ga0RlZmF1bHRSb3V0ZUZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgT24tTWVzaCBmbGFnIGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBPbi1NZXNoIGZsYWcgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBPbi1NZXNoIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNPbk1lc2godm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFncyAmIGtPbk1lc2hGbGFnKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIE9uLU1lc2ggZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJPbk1lc2godm9pZCkgeyBtRmxhZ3MgJj0gfmtPbk1lc2hGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBPbi1NZXNoIGZsYWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE9uTWVzaCh2b2lkKSB7IG1GbGFncyB8PSBrT25NZXNoRmxhZzsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1SbG9jOworICAgIHVpbnQ4X3QgbUZsYWdzOworICAgIHVpbnQ4X3QgbVJlc2VydmVkOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEJvcmRlciBSb3V0ZXIgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQm9yZGVyUm91dGVyVGx2OiBwdWJsaWMgTmV0d29ya0RhdGFUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgTmV0d29ya0RhdGFUbHY6OkluaXQoKTsgU2V0VHlwZShrVHlwZUJvcmRlclJvdXRlcik7IFNldExlbmd0aCgwKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIEJvcmRlciBSb3V0ZXIgZW50cmllcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgQm9yZGVyIFJvdXRlciBlbnRyaWVzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXROdW1FbnRyaWVzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpIC8gc2l6ZW9mKEJvcmRlclJvdXRlckVudHJ5KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGkndGggQm9yZGVyIFJvdXRlciBlbnRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGkgIFRoZSBpbmRleC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgaSd0aCBCb3JkZXIgUm91dGVyIGVudHJ5LgorICAgICAqCisgICAgICovCisgICAgQm9yZGVyUm91dGVyRW50cnkgKkdldEVudHJ5KHVpbnQ4X3QgaSkgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCb3JkZXJSb3V0ZXJFbnRyeSAqPihHZXRWYWx1ZSgpICsgKGkgKiBzaXplb2YoQm9yZGVyUm91dGVyRW50cnkpKSk7CisgICAgfQorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENvbnRleHQgVExWIGdlbmVyYXRpb24gYW5kIHByb2Nlc3NpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ29udGV4dFRsdjogcHVibGljIE5ldHdvcmtEYXRhVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IE5ldHdvcmtEYXRhVGx2OjpJbml0KCk7IFNldFR5cGUoa1R5cGVDb250ZXh0KTsgU2V0TGVuZ3RoKDIpOyBtRmxhZ3MgPSAwOyBtQ29udGV4dExlbmd0aCA9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgQ29tcHJlc3MgZmxhZyBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBUaGUgQ29tcHJlc3MgZmxhZyBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgVGhlIENvbXByZXNzIGZsYWdzIGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQ29tcHJlc3Modm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFncyAmIGtDb21wcmVzc0ZsYWcpICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgQ29tcHJlc3MgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJDb21wcmVzcyh2b2lkKSB7IG1GbGFncyAmPSB+a0NvbXByZXNzRmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ29tcHJlc3MgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q29tcHJlc3Modm9pZCkgeyBtRmxhZ3MgfD0ga0NvbXByZXNzRmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQ29udGV4dCBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDb250ZXh0IElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRDb250ZXh0SWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUZsYWdzICYga0NvbnRleHRJZE1hc2s7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIENvbnRleHQgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dElkICBUaGUgQ29udGV4dCBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q29udGV4dElkKHVpbnQ4X3QgYUNvbnRleHRJZCkgeworICAgICAgICBtRmxhZ3MgPSAobUZsYWdzICYgfmtDb250ZXh0SWRNYXNrKSB8ICgoYUNvbnRleHRJZCA8PCBrQ29udGV4dElkT2Zmc2V0KSAmIGtDb250ZXh0SWRNYXNrKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDb250ZXh0IExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDb250ZXh0IExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Q29udGV4dExlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBtQ29udGV4dExlbmd0aDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ29udGV4dCBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgQ29udGV4dCBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENvbnRleHRMZW5ndGgodWludDhfdCBhTGVuZ3RoKSB7IG1Db250ZXh0TGVuZ3RoID0gYUxlbmd0aDsgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtDb21wcmVzc0ZsYWcgPSAxIDw8IDQsCisgICAgICAgIGtDb250ZXh0SWRPZmZzZXQgPSAwLAorICAgICAgICBrQ29udGV4dElkTWFzayA9IDB4ZiA8PCBrQ29udGV4dElkT2Zmc2V0LAorICAgIH07CisgICAgdWludDhfdCBtRmxhZ3M7CisgICAgdWludDhfdCBtQ29udGV4dExlbmd0aDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBDb21taXNzaW9uaW5nIERhdGEgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ29tbWlzc2lvbmluZ0RhdGFUbHY6IHB1YmxpYyBOZXR3b3JrRGF0YVRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBOZXR3b3JrRGF0YVRsdjo6SW5pdCgpOyBTZXRUeXBlKGtUeXBlQ29tbWlzc2lvbmluZ0RhdGEpOyBTZXRMZW5ndGgoMCk7IH0KK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBOZXR3b3JrRGF0YQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkVUV09SS19EQVRBX1RMVlNfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpYy5jcHAgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kaWFnbm9zdGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTdkZmRhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpYy5jcHAKQEAgLTAsMCArMSw2NjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgVGhyZWFkJ3MgTmV0d29yayBEaWFnbm9zdGljIHByb2Nlc3NpbmcuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAibmV0d29ya19kaWFnbm9zdGljLnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJuZXR3b3JrX2RpYWdub3N0aWMuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgIm5ldC9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21lc2hfZm9yd2FyZGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3JvdXRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpY190bHZzLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKKyNpZiBPUEVOVEhSRUFEX0ZURCB8fCBPUEVOVEhSRUFEX0VOQUJMRV9NVERfTkVUV09SS19ESUFHTk9TVElDCisKK25hbWVzcGFjZSBvdCB7CisKK25hbWVzcGFjZSBOZXR3b3JrRGlhZ25vc3RpYyB7CisKK05ldHdvcmtEaWFnbm9zdGljOjpOZXR3b3JrRGlhZ25vc3RpYyhUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKSA6CisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKGFUaHJlYWROZXRpZiksCisgICAgbURpYWdub3N0aWNHZXRSZXF1ZXN0KE9UX1VSSV9QQVRIX0RJQUdOT1NUSUNfR0VUX1JFUVVFU1QsICZOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY0dldFJlcXVlc3QsIHRoaXMpLAorICAgIG1EaWFnbm9zdGljR2V0UXVlcnkoT1RfVVJJX1BBVEhfRElBR05PU1RJQ19HRVRfUVVFUlksICZOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY0dldFF1ZXJ5LCB0aGlzKSwKKyAgICBtRGlhZ25vc3RpY0dldEFuc3dlcihPVF9VUklfUEFUSF9ESUFHTk9TVElDX0dFVF9BTlNXRVIsICZOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY0dldEFuc3dlciwgdGhpcyksCisgICAgbURpYWdub3N0aWNSZXNldChPVF9VUklfUEFUSF9ESUFHTk9TVElDX1JFU0VULCAmTmV0d29ya0RpYWdub3N0aWM6OkhhbmRsZURpYWdub3N0aWNSZXNldCwgdGhpcyksCisgICAgbVJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2soTlVMTCksCisgICAgbVJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2tDb250ZXh0KE5VTEwpCit7CisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtRGlhZ25vc3RpY0dldFJlcXVlc3QpOworICAgIGFUaHJlYWROZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobURpYWdub3N0aWNHZXRRdWVyeSk7CisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtRGlhZ25vc3RpY0dldEFuc3dlcik7CisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtRGlhZ25vc3RpY1Jlc2V0KTsKK30KKwordm9pZCBOZXR3b3JrRGlhZ25vc3RpYzo6U2V0UmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFjayhvdFJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2sgYUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ2FsbGJhY2tDb250ZXh0KQoreworICAgIG1SZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrID0gYUNhbGxiYWNrOworICAgIG1SZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrQ29udGV4dCA9IGFDYWxsYmFja0NvbnRleHQ7Cit9CisKK290RXJyb3IgTmV0d29ya0RpYWdub3N0aWM6OlNlbmREaWFnbm9zdGljR2V0KGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uLCBjb25zdCB1aW50OF90IGFUbHZUeXBlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhQ291bnQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIG90Q29hcFJlc3BvbnNlSGFuZGxlciBoYW5kbGVyID0gTlVMTDsKKworICAgIGlmIChhRGVzdGluYXRpb24uSXNNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICAgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9ESUFHTk9TVElDX0dFVF9RVUVSWSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGhhbmRsZXIgPSAmTmV0d29ya0RpYWdub3N0aWM6OkhhbmRsZURpYWdub3N0aWNHZXRSZXNwb25zZTsKKyAgICAgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgICAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfRElBR05PU1RJQ19HRVRfUkVRVUVTVCk7CisgICAgfQorCisgICAgaWYgKGFDb3VudCA+IDApCisgICAgeworICAgICAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldENvYXAoKS5OZXdNZXNzYWdlKGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKGFUbHZUeXBlcywgYUNvdW50KSk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihhRGVzdGluYXRpb24pOworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgbWVzc2FnZUluZm8uU2V0SW50ZXJmYWNlSWQobmV0aWYuR2V0SW50ZXJmYWNlSWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbywgaGFuZGxlciwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTmV0RGlhZyhHZXRJbnN0YW5jZSgpLCAiU2VudCBkaWFnbm9zdGljIGdldCIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TmV0d29ya0RpYWdub3N0aWMgKj4oYUNvbnRleHQpLT5IYW5kbGVEaWFnbm9zdGljR2V0UmVzcG9uc2UoKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKK30KKwordm9pZCBOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBWZXJpZnlPckV4aXQoYVJlc3VsdCA9PSBPVF9FUlJPUl9OT05FKTsKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX0NIQU5HRUQpOworCisgICAgb3RMb2dJbmZvTmV0RGlhZyhHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgZGlhZ25vc3RpYyBnZXQgcmVzcG9uc2UiKTsKKworICAgIGlmIChtUmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFjaykKKyAgICB7CisgICAgICAgIG1SZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrKCZhTWVzc2FnZSwgJmFNZXNzYWdlSW5mbywgbVJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2tDb250ZXh0KTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIE5ldHdvcmtEaWFnbm9zdGljOjpIYW5kbGVEaWFnbm9zdGljR2V0QW5zd2VyKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxOZXR3b3JrRGlhZ25vc3RpYyAqPihhQ29udGV4dCktPkhhbmRsZURpYWdub3N0aWNHZXRBbnN3ZXIoKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY0dldEFuc3dlcihDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXIuR2V0VHlwZSgpID09IE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSAmJgorICAgICAgICAgICAgICAgICBhSGVhZGVyLkdldENvZGUoKSA9PSBPVF9DT0FQX0NPREVfUE9TVCk7CisKKyAgICBvdExvZ0luZm9OZXREaWFnKEdldEluc3RhbmNlKCksICJEaWFnbm9zdGljIGdldCBhbnN3ZXIgcmVjZWl2ZWQiKTsKKworICAgIGlmIChtUmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFjaykKKyAgICB7CisgICAgICAgIG1SZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrKCZhTWVzc2FnZSwgJmFNZXNzYWdlSW5mbywgbVJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2tDb250ZXh0KTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KEdldE5ldGlmKCkuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCBhTWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb05ldERpYWcoR2V0SW5zdGFuY2UoKSwgIlNlbnQgZGlhZ25vc3RpYyBhbnN3ZXIgYWNrbm93bGVkZ21lbnQiKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3IgTmV0d29ya0RpYWdub3N0aWM6OkFwcGVuZElwNkFkZHJlc3NMaXN0KE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSXA2QWRkcmVzc0xpc3RUbHYgdGx2OworICAgIHVpbnQ4X3QgY291bnQgPSAwOworCisgICAgdGx2LkluaXQoKTsKKworICAgIGZvciAoY29uc3QgSXA2OjpOZXRpZlVuaWNhc3RBZGRyZXNzICphZGRyID0gbmV0aWYuR2V0VW5pY2FzdEFkZHJlc3NlcygpOyBhZGRyOyBhZGRyID0gYWRkci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgY291bnQrKzsKKyAgICB9CisKKyAgICB0bHYuU2V0TGVuZ3RoKGNvdW50ICogc2l6ZW9mKElwNjo6QWRkcmVzcykpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKworICAgIGZvciAoY29uc3QgSXA2OjpOZXRpZlVuaWNhc3RBZGRyZXNzICphZGRyID0gbmV0aWYuR2V0VW5pY2FzdEFkZHJlc3NlcygpOyBhZGRyOyBhZGRyID0gYWRkci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCgmYWRkci0+R2V0QWRkcmVzcygpLCBzaXplb2YoSXA2OjpBZGRyZXNzKSkpOworICAgIH0KKworZXhpdDoKKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOZXR3b3JrRGlhZ25vc3RpYzo6QXBwZW5kQ2hpbGRUYWJsZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgY291bnQgPSAwOworICAgIHVpbnQ4X3QgdGltZW91dCA9IDA7CisgICAgdWludDhfdCBudW1DaGlsZHJlbjsKKyAgICBjb25zdCBDaGlsZCAqY2hpbGRyZW4gPSBuZXRpZi5HZXRNbGUoKS5HZXRDaGlsZHJlbigmbnVtQ2hpbGRyZW4pOworICAgIENoaWxkVGFibGVUbHYgdGx2OworICAgIENoaWxkVGFibGVFbnRyeSBlbnRyeTsKKworICAgIHRsdi5Jbml0KCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyBpKyspCisgICAgeworICAgICAgICBpZiAoY2hpbGRyZW5baV0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0bHYuU2V0TGVuZ3RoKGNvdW50ICogc2l6ZW9mKENoaWxkVGFibGVFbnRyeSkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YoQ2hpbGRUYWJsZVRsdikpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjaGlsZHJlbltpXS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdGltZW91dCA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlIChzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSA8PCB0aW1lb3V0KSA8IGNoaWxkcmVuW2ldLkdldFRpbWVvdXQoKSkgeyB0aW1lb3V0Kys7IH0KKworICAgICAgICAgICAgZW50cnkuU2V0UmVzZXJ2ZWQoMCk7CisgICAgICAgICAgICBlbnRyeS5TZXRUaW1lb3V0KHRpbWVvdXQgKyA0KTsKKyAgICAgICAgICAgIGVudHJ5LlNldENoaWxkSWQobmV0aWYuR2V0TWxlKCkuR2V0Q2hpbGRJZChjaGlsZHJlbltpXS5HZXRSbG9jMTYoKSkpOworICAgICAgICAgICAgZW50cnkuU2V0TW9kZShjaGlsZHJlbltpXS5HZXREZXZpY2VNb2RlKCkpOworCisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZlbnRyeSwgc2l6ZW9mKENoaWxkVGFibGVFbnRyeSkpKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOZXR3b3JrRGlhZ25vc3RpYzo6RmlsbFJlcXVlc3RlZFRsdnMoTWVzc2FnZSAmYVJlcXVlc3QsIE1lc3NhZ2UgJmFSZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtEaWFnbm9zdGljVGx2ICZhTmV0d29ya0RpYWdub3N0aWNUbHYpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MTZfdCBvZmZzZXQgPSAwOworICAgIHVpbnQ4X3QgdHlwZTsKKworICAgIG9mZnNldCA9IGFSZXF1ZXN0LkdldE9mZnNldCgpICsgc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhTmV0d29ya0RpYWdub3N0aWNUbHYuR2V0TGVuZ3RoKCk7IGkrKykKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhUmVxdWVzdC5SZWFkKG9mZnNldCwgc2l6ZW9mKHR5cGUpLCAmdHlwZSkgPT0gc2l6ZW9mKHR5cGUpLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgIG90TG9nSW5mb05ldERpYWcoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGRpYWdub3N0aWMgZ2V0IHR5cGUgJWQiLCB0eXBlKTsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a0V4dE1hY0FkZHJlc3M6CisgICAgICAgIHsKKyAgICAgICAgICAgIEV4dE1hY0FkZHJlc3NUbHYgdGx2OworICAgICAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgICAgIHRsdi5TZXRNYWNBZGRyKCpuZXRpZi5HZXRNYWMoKS5HZXRFeHRBZGRyZXNzKCkpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFSZXNwb25zZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a0FkZHJlc3MxNjoKKyAgICAgICAgeworICAgICAgICAgICAgQWRkcmVzczE2VGx2IHRsdjsKKyAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICB0bHYuU2V0UmxvYzE2KG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNigpKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhUmVzcG9uc2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTmV0d29ya0RpYWdub3N0aWNUbHY6OmtNb2RlOgorICAgICAgICB7CisgICAgICAgICAgICBNb2RlVGx2IHRsdjsKKyAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICB0bHYuU2V0TW9kZShuZXRpZi5HZXRNbGUoKS5HZXREZXZpY2VNb2RlKCkpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFSZXNwb25zZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a1RpbWVvdXQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgobmV0aWYuR2V0TWxlKCkuR2V0RGV2aWNlTW9kZSgpICYgTW9kZVRsdjo6a01vZGVSeE9uV2hlbklkbGUpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGltZW91dFRsdiB0bHY7CisgICAgICAgICAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgICAgICAgICB0bHYuU2V0VGltZW91dCgKKyAgICAgICAgICAgICAgICAgICAgVGltZXI6Ok1zZWNUb1NlYyhuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuR2V0RGF0YVBvbGxNYW5hZ2VyKCkuR2V0S2VlcEFsaXZlUG9sbFBlcmlvZCgpKSk7CisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFSZXNwb25zZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5ldHdvcmtEaWFnbm9zdGljVGx2OjprQ29ubmVjdGl2aXR5OgorICAgICAgICB7CisgICAgICAgICAgICBDb25uZWN0aXZpdHlUbHYgdGx2OworICAgICAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgICAgIG5ldGlmLkdldE1sZSgpLkZpbGxDb25uZWN0aXZpdHlUbHYoKnJlaW50ZXJwcmV0X2Nhc3Q8TWxlOjpDb25uZWN0aXZpdHlUbHYgKj4oJnRsdikpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFSZXNwb25zZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a1JvdXRlOgorICAgICAgICB7CisgICAgICAgICAgICBSb3V0ZVRsdiB0bHY7CisgICAgICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuRmlsbFJvdXRlVGx2KCpyZWludGVycHJldF9jYXN0PE1sZTo6Um91dGVUbHYgKj4oJnRsdikpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFSZXNwb25zZS5BcHBlbmQoJnRsdiwgdGx2LkdldFNpemUoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5ldHdvcmtEaWFnbm9zdGljVGx2OjprTGVhZGVyRGF0YToKKyAgICAgICAgeworICAgICAgICAgICAgTGVhZGVyRGF0YVRsdiB0bHY7CisgICAgICAgICAgICBtZW1jcHkoJnRsdiwgJm5ldGlmLkdldE1sZSgpLkdldExlYWRlckRhdGFUbHYoKSwgc2l6ZW9mKHRsdikpOworICAgICAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhUmVzcG9uc2UuQXBwZW5kKCZ0bHYsIHRsdi5HZXRTaXplKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a05ldHdvcmtEYXRhOgorICAgICAgICB7CisgICAgICAgICAgICBOZXR3b3JrRGF0YVRsdiB0bHY7CisgICAgICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuRmlsbE5ldHdvcmtEYXRhVGx2KCgqcmVpbnRlcnByZXRfY2FzdDxNbGU6Ok5ldHdvcmtEYXRhVGx2ICo+KCZ0bHYpKSwgdHJ1ZSk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVJlc3BvbnNlLkFwcGVuZCgmdGx2LCB0bHYuR2V0U2l6ZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTmV0d29ya0RpYWdub3N0aWNUbHY6OmtJcDZBZGRyZXNzTGlzdDoKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZElwNkFkZHJlc3NMaXN0KGFSZXNwb25zZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5ldHdvcmtEaWFnbm9zdGljVGx2OjprTWFjQ291bnRlcnM6CisgICAgICAgIHsKKyAgICAgICAgICAgIE1hY0NvdW50ZXJzVGx2IHRsdjsKKyAgICAgICAgICAgIG1lbXNldCgmdGx2LCAwLCBzaXplb2YodGx2KSk7CisgICAgICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICAgICAgbmV0aWYuR2V0TWFjKCkuRmlsbE1hY0NvdW50ZXJzVGx2KHRsdik7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVJlc3BvbnNlLkFwcGVuZCgmdGx2LCB0bHYuR2V0U2l6ZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTmV0d29ya0RpYWdub3N0aWNUbHY6OmtCYXR0ZXJ5TGV2ZWw6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRPRE8gTmVlZCBtb3JlIGFwaSBmcm9tIGRyaXZlcgorICAgICAgICAgICAgQmF0dGVyeUxldmVsVGx2IHRsdjsKKyAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICB0bHYuU2V0QmF0dGVyeUxldmVsKDEwMCk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVJlc3BvbnNlLkFwcGVuZCgmdGx2LCB0bHYuR2V0U2l6ZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTmV0d29ya0RpYWdub3N0aWNUbHY6OmtTdXBwbHlWb2x0YWdlOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBUT0RPIE5lZWQgbW9yZSBhcGkgZnJvbSBkcml2ZXIKKyAgICAgICAgICAgIFN1cHBseVZvbHRhZ2VUbHYgdGx2OworICAgICAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgICAgIHRsdi5TZXRTdXBwbHlWb2x0YWdlKDApOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFSZXNwb25zZS5BcHBlbmQoJnRsdiwgdGx2LkdldFNpemUoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5ldHdvcmtEaWFnbm9zdGljVGx2OjprQ2hpbGRUYWJsZToKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZENoaWxkVGFibGUoYVJlc3BvbnNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTmV0d29ya0RpYWdub3N0aWNUbHY6OmtDaGFubmVsUGFnZXM6CisgICAgICAgIHsKKyAgICAgICAgICAgIENoYW5uZWxQYWdlc1RsdiB0bHY7CisgICAgICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICAgICAgdGx2LkdldENoYW5uZWxQYWdlcygpWzBdID0gMDsKKyAgICAgICAgICAgIHRsdi5TZXRMZW5ndGgoMSk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVJlc3BvbnNlLkFwcGVuZCgmdGx2LCB0bHYuR2V0U2l6ZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTmV0d29ya0RpYWdub3N0aWNUbHY6OmtNYXhDaGlsZFRpbWVvdXQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IG1heFRpbWVvdXQgPSAwOworCisgICAgICAgICAgICBpZiAobmV0aWYuR2V0TWxlKCkuR2V0TWF4Q2hpbGRUaW1lb3V0KG1heFRpbWVvdXQpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTWF4Q2hpbGRUaW1lb3V0VGx2IHRsdjsKKyAgICAgICAgICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICAgICAgICAgIHRsdi5TZXRUaW1lb3V0KG1heFRpbWVvdXQpOworICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhUmVzcG9uc2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSBzaXplb2YodHlwZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY0dldFF1ZXJ5KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PE5ldHdvcmtEaWFnbm9zdGljICo+KGFDb250ZXh0KS0+SGFuZGxlRGlhZ25vc3RpY0dldFF1ZXJ5KAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIE5ldHdvcmtEaWFnbm9zdGljOjpIYW5kbGVEaWFnbm9zdGljR2V0UXVlcnkoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBOZXR3b3JrRGlhZ25vc3RpY1RsdiBuZXR3b3JrRGlhZ25vc3RpY1RsdjsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX1BPU1QsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBvdExvZ0luZm9OZXREaWFnKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBkaWFnbm9zdGljIGdldCBxdWVyeSIpOworCisgICAgVmVyaWZ5T3JFeGl0KChhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV0d29ya0RpYWdub3N0aWNUbHYpID09IHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgVmVyaWZ5T3JFeGl0KG5ldHdvcmtEaWFnbm9zdGljVGx2LkdldFR5cGUoKSA9PSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a1R5cGVMaXN0LCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgVmVyaWZ5T3JFeGl0KChzdGF0aWNfY2FzdDxUeXBlTGlzdFRsdiAqPigmbmV0d29ya0RpYWdub3N0aWNUbHYpLT5Jc1ZhbGlkKCkpLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgLy8gRElBR19HRVQucXJ5IG1heSBiZSBzZW50IGFzIGEgY29uZmlybWFibGUgbWVzc2FnZS4KKyAgICBpZiAoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFKQorICAgIHsKKyAgICAgICAgaWYgKG5ldGlmLkdldENvYXAoKS5TZW5kRW1wdHlBY2soYUhlYWRlciwgYU1lc3NhZ2VJbmZvKSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ0luZm9OZXREaWFnKEdldEluc3RhbmNlKCksICJTZW50IGRpYWdub3N0aWMgZ2V0IHF1ZXJ5IGFja25vd2xlZGdtZW50Iik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfRElBR05PU1RJQ19HRVRfQU5TV0VSKTsKKworICAgIGlmIChuZXR3b3JrRGlhZ25vc3RpY1Rsdi5HZXRMZW5ndGgoKSA+IDApCisgICAgeworICAgICAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldENvYXAoKS5OZXdNZXNzYWdlKGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChuZXRpZi5HZXRJbnRlcmZhY2VJZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBGaWxsUmVxdWVzdGVkVGx2cyhhTWVzc2FnZSwgKm1lc3NhZ2UsIG5ldHdvcmtEaWFnbm9zdGljVGx2KSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbywgTlVMTCwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTmV0RGlhZyhHZXRJbnN0YW5jZSgpLCAiU2VudCBkaWFnbm9zdGljIGdldCBhbnN3ZXIiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RpYWdub3N0aWM6OkhhbmRsZURpYWdub3N0aWNHZXRSZXF1ZXN0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8TmV0d29ya0RpYWdub3N0aWMgKj4oYUNvbnRleHQpLT5IYW5kbGVEaWFnbm9zdGljR2V0UmVxdWVzdCgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY0dldFJlcXVlc3QoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIE5ldHdvcmtEaWFnbm9zdGljVGx2IG5ldHdvcmtEaWFnbm9zdGljVGx2OworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbyhhTWVzc2FnZUluZm8pOworCisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXIuR2V0VHlwZSgpID09IE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSAmJgorICAgICAgICAgICAgICAgICBhSGVhZGVyLkdldENvZGUoKSA9PSBPVF9DT0FQX0NPREVfUE9TVCwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIG90TG9nSW5mb05ldERpYWcoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGRpYWdub3N0aWMgZ2V0IHJlcXVlc3QiKTsKKworICAgIFZlcmlmeU9yRXhpdCgoYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ldHdvcmtEaWFnbm9zdGljVGx2KSA9PSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpKSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIFZlcmlmeU9yRXhpdChuZXR3b3JrRGlhZ25vc3RpY1Rsdi5HZXRUeXBlKCkgPT0gTmV0d29ya0RpYWdub3N0aWNUbHY6OmtUeXBlTGlzdCwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIFZlcmlmeU9yRXhpdCgoc3RhdGljX2Nhc3Q8VHlwZUxpc3RUbHYgKj4oJm5ldHdvcmtEaWFnbm9zdGljVGx2KS0+SXNWYWxpZCgpKSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIGhlYWRlci5TZXREZWZhdWx0UmVzcG9uc2VIZWFkZXIoYUhlYWRlcik7CisgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldENvYXAoKS5OZXdNZXNzYWdlKGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gRmlsbFJlcXVlc3RlZFRsdnMoYU1lc3NhZ2UsICptZXNzYWdlLCBuZXR3b3JrRGlhZ25vc3RpY1RsdikpOworCisgICAgaWYgKG1lc3NhZ2UtPkdldExlbmd0aCgpID09IGhlYWRlci5HZXRMZW5ndGgoKSkKKyAgICB7CisgICAgICAgIC8vIFJlbW92ZSBQYXlsb2FkIE1hcmtlciBpZiBwYXlsb2FkIGlzIGFjdHVhbGx5IGVtcHR5LgorICAgICAgICBtZXNzYWdlLT5TZXRMZW5ndGgoaGVhZGVyLkdldExlbmd0aCgpIC0gMSk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb05ldERpYWcoR2V0SW5zdGFuY2UoKSwgIlNlbnQgZGlhZ25vc3RpYyBnZXQgcmVzcG9uc2UiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9Cit9CisKK290RXJyb3IgTmV0d29ya0RpYWdub3N0aWM6OlNlbmREaWFnbm9zdGljUmVzZXQoY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24sIGNvbnN0IHVpbnQ4X3QgYVRsdlR5cGVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYUNvdW50KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9ESUFHTk9TVElDX1JFU0VUKTsKKworICAgIGlmIChhQ291bnQgPiAwKQorICAgIHsKKyAgICAgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBuZXRpZi5HZXRDb2FwKCkuTmV3TWVzc2FnZShoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZChhVGx2VHlwZXMsIGFDb3VudCkpOworCisgICAgbWVzc2FnZUluZm8uU2V0UGVlckFkZHIoYURlc3RpbmF0aW9uKTsKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrQ29hcFVkcFBvcnQpOworICAgIG1lc3NhZ2VJbmZvLlNldEludGVyZmFjZUlkKG5ldGlmLkdldEludGVyZmFjZUlkKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb05ldERpYWcoR2V0SW5zdGFuY2UoKSwgIlNlbnQgbmV0d29yayBkaWFnbm9zdGljIHJlc2V0Iik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE5ldHdvcmtEaWFnbm9zdGljOjpIYW5kbGVEaWFnbm9zdGljUmVzZXQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8TmV0d29ya0RpYWdub3N0aWMgKj4oYUNvbnRleHQpLT5IYW5kbGVEaWFnbm9zdGljUmVzZXQoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RpYWdub3N0aWM6OkhhbmRsZURpYWdub3N0aWNSZXNldChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIHVpbnQxNl90IG9mZnNldCA9IDA7CisgICAgdWludDhfdCB0eXBlOworICAgIE5ldHdvcmtEaWFnbm9zdGljVGx2IG5ldHdvcmtEaWFnbm9zdGljVGx2OworCisgICAgb3RMb2dJbmZvTmV0RGlhZyhHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgZGlhZ25vc3RpYyByZXNldCByZXF1ZXN0Iik7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIFZlcmlmeU9yRXhpdCgoYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ldHdvcmtEaWFnbm9zdGljVGx2KSA9PSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpKSk7CisKKyAgICBWZXJpZnlPckV4aXQobmV0d29ya0RpYWdub3N0aWNUbHYuR2V0VHlwZSgpID09IE5ldHdvcmtEaWFnbm9zdGljVGx2OjprVHlwZUxpc3QpOworCisgICAgVmVyaWZ5T3JFeGl0KChzdGF0aWNfY2FzdDxUeXBlTGlzdFRsdiAqPigmbmV0d29ya0RpYWdub3N0aWNUbHYpLT5Jc1ZhbGlkKCkpKTsKKworICAgIG9mZnNldCA9IGFNZXNzYWdlLkdldE9mZnNldCgpICsgc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG5ldHdvcmtEaWFnbm9zdGljVGx2LkdldExlbmd0aCgpOyBpKyspCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZih0eXBlKSwgJnR5cGUpID09IHNpemVvZih0eXBlKSk7CisKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTmV0d29ya0RpYWdub3N0aWNUbHY6OmtNYWNDb3VudGVyczoKKyAgICAgICAgICAgIG5ldGlmLkdldE1hYygpLlJlc2V0Q291bnRlcnMoKTsKKyAgICAgICAgICAgIG90TG9nSW5mb05ldERpYWcoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGRpYWdub3N0aWMgcmVzZXQgdHlwZSBrTWFjQ291bnRlcnMoOSkiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBvdExvZ0luZm9OZXREaWFnKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBkaWFnbm9zdGljIHJlc2V0IG90aGVyIHR5cGUgJWQgbm90IHJlc2V0YWJsZSIsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KG5ldGlmLkdldENvYXAoKS5TZW5kRW1wdHlBY2soYUhlYWRlciwgYU1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9OZXREaWFnKEdldEluc3RhbmNlKCksICJTZW50IGRpYWdub3N0aWMgcmVzZXQgYWNrbm93bGVkZ21lbnQiKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK30gIC8vIG5hbWVzcGFjZSBOZXR3b3JrRGlhZ25vc3RpYworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RpYWdub3N0aWMuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpYy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ1YTY0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RpYWdub3N0aWMuaHBwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgaGFuZGxlIG5ldHdvcmsgZGlhZ25vc3RpYy4KKyAqLworCisjaWZuZGVmIE5FVFdPUktfRElBR05PU1RJQ19IUFBfCisjZGVmaW5lIE5FVFdPUktfRElBR05PU1RJQ19IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCituYW1lc3BhY2UgTmV0d29ya0RpYWdub3N0aWMgeworCitjbGFzcyBJcDZBZGRyZXNzTGlzdFRsdjsKK2NsYXNzIENoaWxkVGFibGVUbHY7CitjbGFzcyBOZXR3b3JrRGlhZ25vc3RpY1RsdjsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW5ldGRpYWcKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHNlbmRpbmcgYW5kIGhhbmRsaW5nIE5ldHdvcmsgRGlhZ25vc3RpYyBDb21tYW5kcy4KKyAqCisgKiBAeworICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBOZXR3b3JrIERpYWdub3N0aWMgcHJvY2Vzc2luZy4KKyAqCisgKi8KK2NsYXNzIE5ldHdvcmtEaWFnbm9zdGljOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgZXhwbGljaXQgTmV0d29ya0RpYWdub3N0aWMoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWdpc3RlcnMgYSBjYWxsYmFjayB0byBwcm92aWRlIHJlY2VpdmVkIHJhdyBESUFHX0dFVC5yc3Agb3IgYW4gRElBR19HRVQuYW5zIHBheWxvYWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGFuIERJQUdfR0VULnJzcCBvciBhbiBESUFHX0dFVC5hbnMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyByZWNlaXZlZCBvciBOVUxMIHRvIGRpc2FibGUgdGhlIGNhbGxiYWNrLgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFja0NvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrKG90UmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgRGlhZ25vc3RpYyBHZXQgcmVxdWVzdC4gSWYgdGhlIEBwIGFEZXN0aW5hdGlvbiBpcyBvZiBtdWx0aWNhc3QgdHlwZSwgdGhlIERJQUdfR0VULnFyeQorICAgICAqIG1lc3NhZ2UgaXMgc2VudCBvciB0aGUgRElBR19HRVQucmVxIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYURlc3RpbmF0aW9uICBBIHJlZmVyZW5jZSB0byB0aGUgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKiBAcGFyYW1baW5dIGFUbHZUeXBlcyAgICAgQW4gYXJyYXkgb2YgTmV0d29yayBEaWFnbm9zdGljIFRMViB0eXBlcy4KKyAgICAgKiBAcGFyYW1baW5dIGFDb3VudCAgICAgICAgTnVtYmVyIG9mIHR5cGVzIGluIGFUbHZUeXBlcworICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kRGlhZ25vc3RpY0dldChjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwgY29uc3QgdWludDhfdCBhVGx2VHlwZXNbXSwgdWludDhfdCBhQ291bnQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgRGlhZ25vc3RpYyBSZXNldCByZXF1ZXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhRGVzdGluYXRpb24gIEEgcmVmZXJlbmNlIHRvIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gYVRsdlR5cGVzICAgICBBbiBhcnJheSBvZiBOZXR3b3JrIERpYWdub3N0aWMgVExWIHR5cGVzLgorICAgICAqIEBwYXJhbVtpbl0gYUNvdW50ICAgICAgICBOdW1iZXIgb2YgdHlwZXMgaW4gYVRsdlR5cGVzCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmREaWFnbm9zdGljUmVzZXQoY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24sIGNvbnN0IHVpbnQ4X3QgYVRsdlR5cGVzW10sIHVpbnQ4X3QgYUNvdW50KTsKKworcHJpdmF0ZToKKworICAgIG90RXJyb3IgQXBwZW5kSXA2QWRkcmVzc0xpc3QoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgQXBwZW5kQ2hpbGRUYWJsZShNZXNzYWdlICZhTWVzc2FnZSk7CisgICAgb3RFcnJvciBGaWxsUmVxdWVzdGVkVGx2cyhNZXNzYWdlICZhUmVxdWVzdCwgTWVzc2FnZSAmYVJlc3BvbnNlLCBOZXR3b3JrRGlhZ25vc3RpY1RsdiAmYU5ldHdvcmtEaWFnbm9zdGljVGx2KTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZURpYWdub3N0aWNHZXRSZXF1ZXN0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZURpYWdub3N0aWNHZXRSZXF1ZXN0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVEaWFnbm9zdGljR2V0UXVlcnkodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZURpYWdub3N0aWNHZXRRdWVyeShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKyAgICB2b2lkIEhhbmRsZURpYWdub3N0aWNHZXRSZXNwb25zZShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RFcnJvciBhUmVzdWx0KTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZURpYWdub3N0aWNHZXRBbnN3ZXIodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVEaWFnbm9zdGljR2V0QW5zd2VyKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVEaWFnbm9zdGljUmVzZXQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZURpYWdub3N0aWNSZXNldChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgQ29hcDo6UmVzb3VyY2UgbURpYWdub3N0aWNHZXRSZXF1ZXN0OworICAgIENvYXA6OlJlc291cmNlIG1EaWFnbm9zdGljR2V0UXVlcnk7CisgICAgQ29hcDo6UmVzb3VyY2UgbURpYWdub3N0aWNHZXRBbnN3ZXI7CisgICAgQ29hcDo6UmVzb3VyY2UgbURpYWdub3N0aWNSZXNldDsKKworICAgIG90UmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFjayBtUmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFjazsKKyAgICB2b2lkICptUmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFja0NvbnRleHQ7Cit9OworCisvKioKKyAqIEB9CisgKi8KK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtEaWFnbm9zdGljCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5FVFdPUktfRElBR05PU1RJQ19IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kaWFnbm9zdGljX3RsdnMuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpY190bHZzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGEwNzlkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpY190bHZzLmhwcApAQCAtMCwwICsxLDE0MTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBnZW5lcmF0aW5nIGFuZCBwcm9jZXNzaW5nIE1MRSBUTFZzLgorICovCisKKyNpZm5kZWYgTkVUV09SS19ESUFHTk9TVElDX1RMVlNfSFBQXworI2RlZmluZSBORVRXT1JLX0RJQUdOT1NUSUNfVExWU19IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RsdnMuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfY29uc3RhbnRzLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7Cit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAzMjsKKworbmFtZXNwYWNlIG90IHsKKworbmFtZXNwYWNlIE5ldHdvcmtEaWFnbm9zdGljIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW1sZS10bHZzCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBnZW5lcmF0aW5nIGFuZCBwcm9jZXNzaW5nIE1MRSBUTFZzLgorICoKKyAqIEB7CisgKgorICovCisKK2VudW0KK3sKKyAgICBrTnVtUmVzZXRUbHZUeXBlcyA9IDEsCisgICAga051bVRsdlR5cGVzID0gMTgsCit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBNTEUgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTmV0d29ya0RpYWdub3N0aWNUbHYgOiBwdWJsaWMgb3Q6OlRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIE1MRSBUTFYgVHlwZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAgIGtFeHRNYWNBZGRyZXNzICAgICAgID0gMCwgICAgLy8vPCBTb3VyY2UgQWRkcmVzcyBUTFYKKyAgICAgICAga0FkZHJlc3MxNiAgICAgICAgICAgPSAxLCAgICAvLy88IEFkZHJlc3MxNiBUTFYKKyAgICAgICAga01vZGUgICAgICAgICAgICAgICAgPSAyLCAgICAvLy88IE1vZGUgVExWCisgICAgICAgIGtUaW1lb3V0ICAgICAgICAgICAgID0gMywgICAgLy8vPCBUaW1lb3V0IFRMVgorICAgICAgICBrQ29ubmVjdGl2aXR5ICAgICAgICA9IDQsICAgIC8vLzwgQ29ubmVjdGl2aXR5IFRMVgorICAgICAgICBrUm91dGUgICAgICAgICAgICAgICA9IDUsICAgIC8vLzwgUm91dGluZy1UYWJsZSBUTFYKKyAgICAgICAga0xlYWRlckRhdGEgICAgICAgICAgPSA2LCAgICAvLy88IExlYWRlciBEYXRhIFRMVgorICAgICAgICBrTmV0d29ya0RhdGEgICAgICAgICA9IDcsICAgIC8vLzwgTmV0d29yayBEYXRhIFRMVgorICAgICAgICBrSXA2QWRkcmVzc0xpc3QgICAgICA9IDgsICAgIC8vLzwgSXA2IEFkZHJlc3MgTGlzdCBUTFYKKyAgICAgICAga01hY0NvdW50ZXJzICAgICAgICAgPSA5LCAgICAvLy88IE1hYyBDb3VudGVycyBUTFYKKyAgICAgICAga0JhdHRlcnlMZXZlbCAgICAgICAgPSAxNCwgICAvLy88IEJhdHRlcnkgTGV2ZWwgVExWCisgICAgICAgIGtTdXBwbHlWb2x0YWdlICAgICAgID0gMTUsICAgLy8vPCBTdXBwbHkgVm9sdGFnZSBUTFYKKyAgICAgICAga0NoaWxkVGFibGUgICAgICAgICAgPSAxNiwgICAvLy88IENoaWxkIFRhYmxlIFRMVgorICAgICAgICBrQ2hhbm5lbFBhZ2VzICAgICAgICA9IDE3LCAgIC8vLzwgQ2hhbm5lbCBQYWdlcyBUTFYKKyAgICAgICAga1R5cGVMaXN0ICAgICAgICAgICAgPSAxOCwgICAvLy88IFR5cGUgTGlzdCBUTFYKKyAgICAgICAga01heENoaWxkVGltZW91dCAgICAgPSAxOSwgICAvLy88IE1heCBDaGlsZCBUaW1lb3V0IFRMVgorICAgICAgICBrSW52YWxpZCAgICAgICAgICAgICA9IDI1NSwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgVHlwZSBHZXRUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG90OjpUbHY6OkdldFR5cGUoKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVHlwZSAgVGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUoVHlwZSBhVHlwZSkgeyBvdDo6VGx2OjpTZXRUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFUeXBlKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZWFkcyB0aGUgcmVxdWVzdGVkIFRMViBvdXQgb2YgQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYU1lc3NhZ2UgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgIGFUeXBlICAgICAgIFRoZSBUeXBlIHZhbHVlIHRvIHNlYXJjaCBmb3IuCisgICAgICogQHBhcmFtW2luXSAgIGFNYXhMZW5ndGggIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgICAgICogQHBhcmFtW291dF0gIGFUbHYgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBUTFYgdGhhdCB3aWxsIGJlIGNvcGllZCB0by4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgY29waWVkIHRoZSBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvdWxkIG5vdCBmaW5kIHRoZSBUTFYgd2l0aCBUeXBlIEBwIGFUeXBlLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgR2V0VGx2KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBUeXBlIGFUeXBlLCB1aW50MTZfdCBhTWF4TGVuZ3RoLCBUbHYgJmFUbHYpIHsKKyAgICAgICAgcmV0dXJuIG90OjpUbHY6OkdldChhTWVzc2FnZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpLCBhTWF4TGVuZ3RoLCBhVGx2KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2Qgb2J0YWlucyB0aGUgb2Zmc2V0IG9mIGEgVExWIHdpdGhpbiBAcCBhTWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhTWVzc2FnZSAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICAgYVR5cGUgICAgICAgVGhlIFR5cGUgdmFsdWUgdG8gc2VhcmNoIGZvci4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYU9mZnNldCAgICAgQSByZWZlcmVuY2UgdG8gdGhlIG9mZnNldCBvZiB0aGUgVExWLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBjb3BpZWQgdGhlIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgQ291bGQgbm90IGZpbmQgdGhlIFRMViB3aXRoIFR5cGUgQHAgYVR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgb3RFcnJvciBHZXRPZmZzZXQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIFR5cGUgYVR5cGUsIHVpbnQxNl90ICZhT2Zmc2V0KSB7CisgICAgICAgIHJldHVybiBvdDo6VGx2OjpHZXRPZmZzZXQoYU1lc3NhZ2UsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFUeXBlKSwgYU9mZnNldCk7CisgICAgfQorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgRXh0ZW5kZWQgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK2NsYXNzIEV4dE1hY0FkZHJlc3NUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtFeHRNYWNBZGRyZXNzKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEV4dGVuZGVkIE1BQyBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBFeHRlbmRlZCBNQUMgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAqR2V0TWFjQWRkcih2b2lkKSBjb25zdCB7IHJldHVybiAmbU1hY0FkZHI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEV4dGVuZGVkIE1BQyBBZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBFeHRlbmRlZCBNQUMgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWFjQWRkcihjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFBZGRyZXNzKSB7IG1NYWNBZGRyID0gYUFkZHJlc3M7IH0KKworcHJpdmF0ZToKKyAgICBNYWM6OkV4dEFkZHJlc3MgbU1hY0FkZHI7Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBBZGRyZXNzMTZUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtBZGRyZXNzMTYpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UmxvYzE2KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVJsb2MxNik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJsb2MxNih1aW50MTZfdCBhUmxvYzE2KSB7IG1SbG9jMTYgPSBIb3N0U3dhcDE2KGFSbG9jMTYpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbVJsb2MxNjsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBNb2RlIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE1vZGVUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtNb2RlKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KTsgfQorCisgICAgZW51bQorICAgIHsKKyAgICAgICAga01vZGVSeE9uV2hlbklkbGUgICAgICA9IDEgPDwgMywKKyAgICAgICAga01vZGVTZWN1cmVEYXRhUmVxdWVzdCA9IDEgPDwgMiwKKyAgICAgICAga01vZGVGRkQgICAgICAgICAgICAgICA9IDEgPDwgMSwKKyAgICAgICAga01vZGVGdWxsTmV0d29ya0RhdGEgICA9IDEgPDwgMCwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTW9kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBNb2RlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRNb2RlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Nb2RlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNb2RlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1vZGUgIFRoZSBNb2RlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNb2RlKHVpbnQ4X3QgYU1vZGUpIHsgbU1vZGUgPSBhTW9kZTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU1vZGU7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVGltZW91dCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBUaW1lb3V0VGx2OiBwdWJsaWMgTmV0d29ya0RpYWdub3N0aWNUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrVGltZW91dCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1Rsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFRpbWVvdXQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFRpbWVvdXQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtVGltZW91dCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFRpbWVvdXQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZW91dCAgVGhlIFRpbWVvdXQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRpbWVvdXQodWludDMyX3QgYVRpbWVvdXQpIHsgbVRpbWVvdXQgPSBIb3N0U3dhcDMyKGFUaW1lb3V0KTsgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1UaW1lb3V0OworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENvbm5lY3Rpdml0eSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDb25uZWN0aXZpdHlUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtDb25uZWN0aXZpdHkpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSB8fAorICAgICAgICAgICAgICAgIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpIC0gc2l6ZW9mKG1TZWRCdWZmZXJTaXplKSAtIHNpemVvZihtU2VkRGF0YWdyYW1Db3VudCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBhcmVudCBQcmlvcml0eSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBQYXJlbnQgUHJpb3JpdHkgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQ4X3QgR2V0UGFyZW50UHJpb3JpdHkodm9pZCkgY29uc3QgeyByZXR1cm4gKG1QYXJlbnRQcmlvcml0eSAmIGtQYXJlbnRQcmlvcml0eU9mZnNldCkgPj4ga1BhcmVudFByaW9yaXR5T2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQYXJlbnQgUHJpb3JpdHkgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFQYXJlbnRQcmlvcml0eSAgVGhlIFBhcmVudCBQcmlvcml0eSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UGFyZW50UHJpb3JpdHkoaW50OF90IGFQYXJlbnRQcmlvcml0eSkgeworICAgICAgICBtUGFyZW50UHJpb3JpdHkgPSAoYVBhcmVudFByaW9yaXR5IDw8IGtQYXJlbnRQcmlvcml0eU9mZnNldCkgJiBrUGFyZW50UHJpb3JpdHlNYXNrOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExpbmsgUXVhbGl0eSAzIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExpbmsgUXVhbGl0eSAzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rUXVhbGl0eTModm9pZCkgY29uc3QgeyByZXR1cm4gbUxpbmtRdWFsaXR5MzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBRdWFsaXR5IDMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBMaW5rIFF1YWxpdHkgMyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlua1F1YWxpdHkzKHVpbnQ4X3QgYUxpbmtRdWFsaXR5KSB7IG1MaW5rUXVhbGl0eTMgPSBhTGlua1F1YWxpdHk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExpbmsgUXVhbGl0eSAyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExpbmsgUXVhbGl0eSAyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rUXVhbGl0eTIodm9pZCkgY29uc3QgeyByZXR1cm4gbUxpbmtRdWFsaXR5MjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBRdWFsaXR5IDIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBMaW5rIFF1YWxpdHkgMiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlua1F1YWxpdHkyKHVpbnQ4X3QgYUxpbmtRdWFsaXR5KSB7IG1MaW5rUXVhbGl0eTIgPSBhTGlua1F1YWxpdHk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIExpbmsgUXVhbGl0eSAxIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExpbmsgUXVhbGl0eSAxIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rUXVhbGl0eTEodm9pZCkgY29uc3QgeyByZXR1cm4gbUxpbmtRdWFsaXR5MTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBRdWFsaXR5IDEgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBMaW5rIFF1YWxpdHkgMSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlua1F1YWxpdHkxKHVpbnQ4X3QgYUxpbmtRdWFsaXR5KSB7IG1MaW5rUXVhbGl0eTEgPSBhTGlua1F1YWxpdHk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEFjdGl2ZSBSb3V0ZXJzIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEFjdGl2ZSBSb3V0ZXJzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRBY3RpdmVSb3V0ZXJzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1BY3RpdmVSb3V0ZXJzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBBY3RpdmUgUm91dGVycyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBY3RpdmVSb3V0ZXJzICBUaGUgQWN0aXZlIFJvdXRlcnMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEFjdGl2ZVJvdXRlcnModWludDhfdCBhQWN0aXZlUm91dGVycykgeyBtQWN0aXZlUm91dGVycyA9IGFBY3RpdmVSb3V0ZXJzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBMZWFkZXIgQ29zdCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBMZWFkZXIgQ29zdCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVhZGVyQ29zdCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVhZGVyQ29zdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGVhZGVyIENvc3QgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29zdCAgVGhlIExlYWRlciBDb3N0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMZWFkZXJDb3N0KHVpbnQ4X3QgYUNvc3QpIHsgbUxlYWRlckNvc3QgPSBhQ29zdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldElkU2VxdWVuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbUlkU2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlcXVlbmNlICBUaGUgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElkU2VxdWVuY2UodWludDhfdCBhU2VxdWVuY2UpIHsgbUlkU2VxdWVuY2UgPSBhU2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFNFRCBCdWZmZXIgU2l6ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTRUQgQnVmZmVyIFNpemUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTZWRCdWZmZXJTaXplKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVNlZEJ1ZmZlclNpemUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTRUQgQnVmZmVyIFNpemUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VkQnVmZmVyU2l6ZSAgVGhlIFNFRCBCdWZmZXIgU2l6ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2VkQnVmZmVyU2l6ZSh1aW50MTZfdCBhU2VkQnVmZmVyU2l6ZSkgeyBtU2VkQnVmZmVyU2l6ZSA9IEhvc3RTd2FwMTYoYVNlZEJ1ZmZlclNpemUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBTRUQgRGF0YWdyYW0gQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgU0VEIERhdGFncmFtIENvdW50IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTZWREYXRhZ3JhbUNvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TZWREYXRhZ3JhbUNvdW50OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTRUQgRGF0YWdyYW0gQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VkRGF0YWdyYW1Db3VudCAgVGhlIFNFRCBEYXRhZ3JhbSBDb3VudCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2VkRGF0YWdyYW1Db3VudCh1aW50OF90IGFTZWREYXRhZ3JhbUNvdW50KSB7IG1TZWREYXRhZ3JhbUNvdW50ID0gYVNlZERhdGFncmFtQ291bnQ7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrUGFyZW50UHJpb3JpdHlPZmZzZXQgPSA2LAorICAgICAgICBrUGFyZW50UHJpb3JpdHlNYXNrID0gMyA8PCBrUGFyZW50UHJpb3JpdHlPZmZzZXQsCisgICAgfTsKKworICAgIHVpbnQ4X3QgIG1QYXJlbnRQcmlvcml0eTsKKyAgICB1aW50OF90ICBtTGlua1F1YWxpdHkzOworICAgIHVpbnQ4X3QgIG1MaW5rUXVhbGl0eTI7CisgICAgdWludDhfdCAgbUxpbmtRdWFsaXR5MTsKKyAgICB1aW50OF90ICBtTGVhZGVyQ29zdDsKKyAgICB1aW50OF90ICBtSWRTZXF1ZW5jZTsKKyAgICB1aW50OF90ICBtQWN0aXZlUm91dGVyczsKKyAgICB1aW50MTZfdCBtU2VkQnVmZmVyU2l6ZTsKKyAgICB1aW50OF90ICBtU2VkRGF0YWdyYW1Db3VudDsKK30gIE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUm91dGUgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgUm91dGVUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtSb3V0ZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gR2V0TGVuZ3RoKCkgPj0gc2l6ZW9mKG1Sb3V0ZXJJZFNlcXVlbmNlKSArIHNpemVvZihtUm91dGVySWRNYXNrKSAmJgorICAgICAgICAgICAgICAgR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1Rsdik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUm91dGVyIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJvdXRlciBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Um91dGVySWRTZXF1ZW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBtUm91dGVySWRTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUm91dGVyIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlcXVlbmNlICBUaGUgUm91dGVyIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSb3V0ZXJJZFNlcXVlbmNlKHVpbnQ4X3QgYVNlcXVlbmNlKSB7IG1Sb3V0ZXJJZFNlcXVlbmNlID0gYVNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIFJvdXRlciBJRCBNYXNrLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhclJvdXRlcklkTWFzayh2b2lkKSB7IG1lbXNldChtUm91dGVySWRNYXNrLCAwLCBzaXplb2YobVJvdXRlcklkTWFzaykpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYSBSb3V0ZXIgSUQgYml0IGlzIHNldC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgVGhlIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBSb3V0ZXIgSUQgYml0IGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgUm91dGVyIElEIGJpdCBpcyBub3Qgc2V0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1JvdXRlcklkU2V0KHVpbnQ4X3QgYVJvdXRlcklkKSBjb25zdCB7CisgICAgICAgIHJldHVybiAobVJvdXRlcklkTWFza1thUm91dGVySWQgLyA4XSAmICgweDgwID4+IChhUm91dGVySWQgJSA4KSkpICE9IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUm91dGVyIElEIGJpdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgVGhlIFJvdXRlciBJRCBiaXQgdG8gc2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSb3V0ZXJJZCh1aW50OF90IGFSb3V0ZXJJZCkgeyBtUm91dGVySWRNYXNrW2FSb3V0ZXJJZCAvIDhdIHw9IDB4ODAgPj4gKGFSb3V0ZXJJZCAlIDgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSb3V0ZSBEYXRhIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSb3V0ZSBEYXRhIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Um91dGVEYXRhTGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpIC0gc2l6ZW9mKG1Sb3V0ZXJJZFNlcXVlbmNlKSAtIHNpemVvZihtUm91dGVySWRNYXNrKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUm91dGUgRGF0YSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgUm91dGUgRGF0YSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJvdXRlRGF0YUxlbmd0aCh1aW50OF90IGFMZW5ndGgpIHsKKyAgICAgICAgU2V0TGVuZ3RoKHNpemVvZihtUm91dGVySWRTZXF1ZW5jZSkgKyBzaXplb2YobVJvdXRlcklkTWFzaykgKyBhTGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSb3V0ZSBDb3N0IHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSb3V0ZSBDb3N0IHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Um91dGVDb3N0KHVpbnQ4X3QgYVJvdXRlcklkKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtUm91dGVEYXRhW2FSb3V0ZXJJZF0gJiBrUm91dGVDb3N0TWFzazsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSb3V0ZSBDb3N0IHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgIFRoZSBSb3V0ZXIgSUQuCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlQ29zdCAgVGhlIFJvdXRlIENvc3QgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJvdXRlQ29zdCh1aW50OF90IGFSb3V0ZXJJZCwgdWludDhfdCBhUm91dGVDb3N0KSB7CisgICAgICAgIG1Sb3V0ZURhdGFbYVJvdXRlcklkXSA9IChtUm91dGVEYXRhW2FSb3V0ZXJJZF0gJiB+a1JvdXRlQ29zdE1hc2spIHwgYVJvdXRlQ29zdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBMaW5rIFF1YWxpdHkgSW4gdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExpbmsgUXVhbGl0eSBJbiB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtRdWFsaXR5SW4odWludDhfdCBhUm91dGVySWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChtUm91dGVEYXRhW2FSb3V0ZXJJZF0gJiBrTGlua1F1YWxpdHlJbk1hc2spID4+IGtMaW5rUXVhbGl0eUluT2Zmc2V0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIExpbmsgUXVhbGl0eSBJbiB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgICAgIFRoZSBSb3V0ZXIgSUQuCisgICAgICogQHBhcmFtW2luXSAgYUxpbmtRdWFsaXR5ICBUaGUgTGluayBRdWFsaXR5IEluIHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlua1F1YWxpdHlJbih1aW50OF90IGFSb3V0ZXJJZCwgdWludDhfdCBhTGlua1F1YWxpdHkpIHsKKyAgICAgICAgbVJvdXRlRGF0YVthUm91dGVySWRdID0KKyAgICAgICAgICAgIChtUm91dGVEYXRhW2FSb3V0ZXJJZF0gJiB+a0xpbmtRdWFsaXR5SW5NYXNrKSB8CisgICAgICAgICAgICAoKGFMaW5rUXVhbGl0eSA8PCBrTGlua1F1YWxpdHlJbk9mZnNldCkgJiBrTGlua1F1YWxpdHlJbk1hc2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExpbmsgUXVhbGl0eSBPdXQgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExpbmsgUXVhbGl0eSBPdXQgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rUXVhbGl0eU91dCh1aW50OF90IGFSb3V0ZXJJZCkgY29uc3QgeworICAgICAgICByZXR1cm4gKG1Sb3V0ZURhdGFbYVJvdXRlcklkXSAmIGtMaW5rUXVhbGl0eU91dE1hc2spID4+IGtMaW5rUXVhbGl0eU91dE9mZnNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMaW5rIFF1YWxpdHkgT3V0IHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgICAgVGhlIFJvdXRlciBJRC4KKyAgICAgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBMaW5rIFF1YWxpdHkgT3V0IHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlua1F1YWxpdHlPdXQodWludDhfdCBhUm91dGVySWQsIHVpbnQ4X3QgYUxpbmtRdWFsaXR5KSB7CisgICAgICAgIG1Sb3V0ZURhdGFbYVJvdXRlcklkXSA9CisgICAgICAgICAgICAobVJvdXRlRGF0YVthUm91dGVySWRdICYgfmtMaW5rUXVhbGl0eU91dE1hc2spIHwKKyAgICAgICAgICAgICgoYUxpbmtRdWFsaXR5IDw8IGtMaW5rUXVhbGl0eU91dE9mZnNldCkgJiBrTGlua1F1YWxpdHlPdXRNYXNrKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0xpbmtRdWFsaXR5T3V0T2Zmc2V0ID0gNiwKKyAgICAgICAga0xpbmtRdWFsaXR5T3V0TWFzayA9IDMgPDwga0xpbmtRdWFsaXR5T3V0T2Zmc2V0LAorICAgICAgICBrTGlua1F1YWxpdHlJbk9mZnNldCA9IDQsCisgICAgICAgIGtMaW5rUXVhbGl0eUluTWFzayA9IDMgPDwga0xpbmtRdWFsaXR5SW5PZmZzZXQsCisgICAgICAgIGtSb3V0ZUNvc3RPZmZzZXQgPSAwLAorICAgICAgICBrUm91dGVDb3N0TWFzayA9IDB4ZiA8PCBrUm91dGVDb3N0T2Zmc2V0LAorICAgIH07CisgICAgdWludDhfdCBtUm91dGVySWRTZXF1ZW5jZTsKKyAgICB1aW50OF90IG1Sb3V0ZXJJZE1hc2tbQml0VmVjdG9yQnl0ZXMoTWxlOjprTWF4Um91dGVySWQpXTsKKyAgICB1aW50OF90IG1Sb3V0ZURhdGFbTWxlOjprTWF4Um91dGVyc107Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTGVhZGVyIERhdGEgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTGVhZGVyRGF0YVRsdjogcHVibGljIE5ldHdvcmtEaWFnbm9zdGljVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0xlYWRlckRhdGEpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQYXJ0aXRpb24gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUGFydGl0aW9uIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0UGFydGl0aW9uSWQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtUGFydGl0aW9uSWQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQYXJ0aXRpb24gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFydGl0aW9uSWQgIFRoZSBQYXJ0aXRpb24gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBhcnRpdGlvbklkKHVpbnQzMl90IGFQYXJ0aXRpb25JZCkgeyBtUGFydGl0aW9uSWQgPSBIb3N0U3dhcDMyKGFQYXJ0aXRpb25JZCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFdlaWdodGluZyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBXZWlnaHRpbmcgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFdlaWdodGluZyh2b2lkKSBjb25zdCB7IHJldHVybiBtV2VpZ2h0aW5nOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBXZWlnaHRpbmcgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhV2VpZ2h0aW5nICBUaGUgV2VpZ2h0aW5nIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRXZWlnaHRpbmcodWludDhfdCBhV2VpZ2h0aW5nKSB7IG1XZWlnaHRpbmcgPSBhV2VpZ2h0aW5nOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRGF0YSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXREYXRhVmVyc2lvbih2b2lkKSBjb25zdCB7IHJldHVybiBtRGF0YVZlcnNpb247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERhdGEgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZXJzaW9uICBUaGUgRGF0YSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREYXRhVmVyc2lvbih1aW50OF90IGFWZXJzaW9uKSAgeyBtRGF0YVZlcnNpb24gPSBhVmVyc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU3RhYmxlIERhdGEgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTdGFibGUgRGF0YSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTdGFibGVEYXRhVmVyc2lvbih2b2lkKSBjb25zdCB7IHJldHVybiBtU3RhYmxlRGF0YVZlcnNpb247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFN0YWJsZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVmVyc2lvbiAgVGhlIFN0YWJsZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN0YWJsZURhdGFWZXJzaW9uKHVpbnQ4X3QgYVZlcnNpb24pIHsgbVN0YWJsZURhdGFWZXJzaW9uID0gYVZlcnNpb247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExlYWRlciBSb3V0ZXIgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGVhZGVyIFJvdXRlciBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVhZGVyUm91dGVySWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUxlYWRlclJvdXRlcklkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMZWFkZXIgUm91dGVyIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgTGVhZGVyIFJvdXRlciBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGVhZGVyUm91dGVySWQodWludDhfdCBhUm91dGVySWQpIHsgbUxlYWRlclJvdXRlcklkID0gYVJvdXRlcklkOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbVBhcnRpdGlvbklkOworICAgIHVpbnQ4X3QgbVdlaWdodGluZzsKKyAgICB1aW50OF90IG1EYXRhVmVyc2lvbjsKKyAgICB1aW50OF90IG1TdGFibGVEYXRhVmVyc2lvbjsKKyAgICB1aW50OF90IG1MZWFkZXJSb3V0ZXJJZDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBOZXR3b3JrIERhdGEgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTmV0d29ya0RhdGFUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtOZXR3b3JrRGF0YSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPCBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCAqR2V0TmV0d29ya0RhdGEodm9pZCkgeyByZXR1cm4gbU5ldHdvcmtEYXRhOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTmV0d29ya0RhdGEgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXR3b3JrRGF0YShjb25zdCB1aW50OF90ICphTmV0d29ya0RhdGEpIHsgbWVtY3B5KG1OZXR3b3JrRGF0YSwgYU5ldHdvcmtEYXRhLCBHZXRMZW5ndGgoKSk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1OZXR3b3JrRGF0YVsyNTVdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIElQdjYgQWRkcmVzcyBMaXN0IFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIElwNkFkZHJlc3NMaXN0VGx2OiBwdWJsaWMgTmV0d29ya0RpYWdub3N0aWNUbHYKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4U2l6ZSA9IDgsICAvLy88IE1heGltdW0gc2l6ZSBpbiBieXRlcyAoVGhyZWFkIFNwZWNpZmljYXRpb24pLgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrSXA2QWRkcmVzc0xpc3QpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpIDw9IHNpemVvZihJcDY6OkFkZHJlc3MpICoga01heFNpemU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBJUHY2IGFkZHJlc3MgZW50cnkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW5kZXggIFRoZSBpbmRleCBpbnRvIHRoZSBJUHY2IGFkZHJlc3MgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBJcDY6OkFkZHJlc3MgJkdldElwNkFkZHJlc3ModWludDhfdCBhSW5kZXgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IElwNjo6QWRkcmVzcyAqPihHZXRWYWx1ZSgpICsgKGFJbmRleCAqIHNpemVvZihJcDY6OkFkZHJlc3MpKSk7CisgICAgfQorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTWFjIENvdW50ZXJzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE1hY0NvdW50ZXJzVGx2OiBwdWJsaWMgTmV0d29ya0RpYWdub3N0aWNUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrTWFjQ291bnRlcnMpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJZkluVW5rbm93blByb3RvcyBjb3VudGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElmSW5Vbmtub3duUHJvdG9zIGNvdW50ZXIKKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldElmSW5Vbmtub3duUHJvdG9zKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobUlmSW5Vbmtub3duUHJvdG9zKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSWZJblVua25vd25Qcm90b3MgY291bnRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJZkluVW5rbm93blByb3RvcyBUaGUgSWZJblVua25vd25Qcm90b3MgY291bnRlcgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJZkluVW5rbm93blByb3Rvcyhjb25zdCB1aW50MzJfdCBhSWZJblVua25vd25Qcm90b3MpIHsgbUlmSW5Vbmtub3duUHJvdG9zID0gSG9zdFN3YXAzMihhSWZJblVua25vd25Qcm90b3MpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJZkluRXJyb3JzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSWZJbkVycm9ycyBjb3VudGVyCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRJZkluRXJyb3JzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobUlmSW5FcnJvcnMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJZkluRXJyb3JzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWZJbkVycm9ycyBUaGUgSWZJbkVycm9ycyBjb3VudGVyCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElmSW5FcnJvcnMoY29uc3QgdWludDMyX3QgYUlmSW5FcnJvcnMpIHsgbUlmSW5FcnJvcnMgPSBIb3N0U3dhcDMyKGFJZkluRXJyb3JzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSWZPdXRFcnJvcnMgY291bnRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJZk91dEVycm9ycyBjb3VudGVyCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRJZk91dEVycm9ycyh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1JZk91dEVycm9ycyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElmT3V0RXJyb3JzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWZPdXRFcnJvcnMgVGhlIElmT3V0RXJyb3JzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElmT3V0RXJyb3JzKGNvbnN0IHVpbnQzMl90IGFJZk91dEVycm9ycykgeyBtSWZPdXRFcnJvcnMgPSBIb3N0U3dhcDMyKGFJZk91dEVycm9ycyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElmSW5VY2FzdFBrdHMgY291bnRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJZkluVWNhc3RQa3RzIGNvdW50ZXIKKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldElmSW5VY2FzdFBrdHModm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtSWZJblVjYXN0UGt0cyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElmSW5VY2FzdFBrdHMgY291bnRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJZkluVWNhc3RQa3RzIFRoZSBJZkluVWNhc3RQa3RzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElmSW5VY2FzdFBrdHMoY29uc3QgdWludDMyX3QgYUlmSW5VY2FzdFBrdHMpIHsgbUlmSW5VY2FzdFBrdHMgPSBIb3N0U3dhcDMyKGFJZkluVWNhc3RQa3RzKTsgfQorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElmSW5Ccm9hZGNhc3RQa3RzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSWZJbkJyb2FkY2FzdFBrdHMgY291bnRlcgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0SWZJbkJyb2FkY2FzdFBrdHModm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtSWZJbkJyb2FkY2FzdFBrdHMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJZkluQnJvYWRjYXN0UGt0cyBjb3VudGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlmSW5Ccm9hZGNhc3RQa3RzIFRoZSBJZkluQnJvYWRjYXN0UGt0cyBjb3VudGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJZkluQnJvYWRjYXN0UGt0cyhjb25zdCB1aW50MzJfdCBhSWZJbkJyb2FkY2FzdFBrdHMpIHsgbUlmSW5Ccm9hZGNhc3RQa3RzID0gSG9zdFN3YXAzMihhSWZJbkJyb2FkY2FzdFBrdHMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJZkluRGlzY2FyZHMgY291bnRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJZkluRGlzY2FyZHMgY291bnRlcgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0SWZJbkRpc2NhcmRzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobUlmSW5EaXNjYXJkcyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElmSW5EaXNjYXJkcyBjb3VudGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlmSW5EaXNjYXJkcyBUaGUgSWZJbkRpc2NhcmRzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElmSW5EaXNjYXJkcyhjb25zdCB1aW50MzJfdCBhSWZJbkRpc2NhcmRzKSB7IG1JZkluRGlzY2FyZHMgPSBIb3N0U3dhcDMyKGFJZkluRGlzY2FyZHMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJZk91dFVjYXN0UGt0cyBjb3VudGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElmT3V0VWNhc3RQa3RzIGNvdW50ZXIKKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldElmT3V0VWNhc3RQa3RzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobUlmT3V0VWNhc3RQa3RzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSWZPdXRVY2FzdFBrdHMgY291bnRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJZk91dFVjYXN0UGt0cyBUaGUgSWZPdXRVY2FzdFBrdHMgY291bnRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWZPdXRVY2FzdFBrdHMoY29uc3QgdWludDMyX3QgYUlmT3V0VWNhc3RQa3RzKSB7IG1JZk91dFVjYXN0UGt0cyA9IEhvc3RTd2FwMzIoYUlmT3V0VWNhc3RQa3RzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSWZPdXRCcm9hZGNhc3RQa3RzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSWZPdXRCcm9hZGNhc3RQa3RzIGNvdW50ZXIKKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldElmT3V0QnJvYWRjYXN0UGt0cyh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1JZk91dEJyb2FkY2FzdFBrdHMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJZk91dEJyb2FkY2FzdFBrdHMgY291bnRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJZk91dEJyb2FkY2FzdFBrdHMgVGhlIElmT3V0QnJvYWRjYXN0UGt0cyBjb3VudGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJZk91dEJyb2FkY2FzdFBrdHMoY29uc3QgdWludDMyX3QgYUlmT3V0QnJvYWRjYXN0UGt0cykgeyBtSWZPdXRCcm9hZGNhc3RQa3RzID0gSG9zdFN3YXAzMihhSWZPdXRCcm9hZGNhc3RQa3RzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSWZPdXREaXNjYXJkcyBjb3VudGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElmT3V0RGlzY2FyZHMgY291bnRlcgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0SWZPdXREaXNjYXJkcyh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1JZk91dERpc2NhcmRzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSWZPdXREaXNjYXJkcyBjb3VudGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlmT3V0RGlzY2FyZHMgVGhlIElmT3V0RGlzY2FyZHMgY291bnRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWZPdXREaXNjYXJkcyhjb25zdCB1aW50MzJfdCBhSWZPdXREaXNjYXJkcykgeyBtSWZPdXREaXNjYXJkcyA9IEhvc3RTd2FwMzIoYUlmT3V0RGlzY2FyZHMpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbUlmSW5Vbmtub3duUHJvdG9zOworICAgIHVpbnQzMl90IG1JZkluRXJyb3JzOworICAgIHVpbnQzMl90IG1JZk91dEVycm9yczsKKyAgICB1aW50MzJfdCBtSWZJblVjYXN0UGt0czsKKyAgICB1aW50MzJfdCBtSWZJbkJyb2FkY2FzdFBrdHM7CisgICAgdWludDMyX3QgbUlmSW5EaXNjYXJkczsKKyAgICB1aW50MzJfdCBtSWZPdXRVY2FzdFBrdHM7CisgICAgdWludDMyX3QgbUlmT3V0QnJvYWRjYXN0UGt0czsKKyAgICB1aW50MzJfdCBtSWZPdXREaXNjYXJkczsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBCYXR0ZXJ5IExldmVsIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEJhdHRlcnlMZXZlbFRsdjogcHVibGljIE5ldHdvcmtEaWFnbm9zdGljVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0JhdHRlcnlMZXZlbCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1Rsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFN0YXR1cyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldEJhdHRlcnlMZXZlbCh2b2lkKSBjb25zdCB7IHJldHVybiBtQmF0dGVyeUxldmVsOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU3RhdHVzICBUaGUgU3RhdHVzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRCYXR0ZXJ5TGV2ZWwodWludDhfdCBhQmF0dGVyeUxldmVsKSB7IG1CYXR0ZXJ5TGV2ZWwgPSBhQmF0dGVyeUxldmVsOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtQmF0dGVyeUxldmVsOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU3VwcGx5IFZvbHRhZ2UgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU3VwcGx5Vm9sdGFnZVRsdjogcHVibGljIE5ldHdvcmtEaWFnbm9zdGljVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1N1cHBseVZvbHRhZ2UpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgU3RhdHVzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0U3VwcGx5Vm9sdGFnZSh2b2lkKSBjb25zdCB7IHJldHVybiBtU3VwcGx5Vm9sdGFnZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgU3VwcGx5Vm9sdGFnZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTdXBwbHlWb2x0YWdlICBUaGUgU3VwcGx5Vm9sdGFnZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U3VwcGx5Vm9sdGFnZSh1aW50MTZfdCBhU3VwcGx5Vm9sdGFnZSkgeyBtU3VwcGx5Vm9sdGFnZSA9IGFTdXBwbHlWb2x0YWdlOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbVN1cHBseVZvbHRhZ2U7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQ2hpbGQgVGFibGUgRW50cnkgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDaGlsZFRhYmxlRW50cnkKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAqCisgICAgICovCisgICAgQ2hpbGRUYWJsZUVudHJ5KHZvaWQpOgorICAgICAgICBtVGltZW91dFJzdkNoaWxkSWQoMCksCisgICAgICAgIG1Nb2RlKDApIHt9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRpbWVvdXQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFRpbWVvdXQodm9pZCkgY29uc3QgeyByZXR1cm4gKEhvc3RTd2FwMTYobVRpbWVvdXRSc3ZDaGlsZElkKSAmIGtUaW1lb3V0TWFzaykgPj4ga1RpbWVvdXRPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFRpbWVvdXQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZW91dCAgVGhlIFRpbWVvdXQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRpbWVvdXQodWludDhfdCBhVGltZW91dCkgeworICAgICAgICBtVGltZW91dFJzdkNoaWxkSWQgPSBIb3N0U3dhcDE2KChIb3N0U3dhcDE2KG1UaW1lb3V0UnN2Q2hpbGRJZCkgJiB+a1RpbWVvdXRNYXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhVGltZW91dCA8PCBrVGltZW91dE9mZnNldCkgJiBrVGltZW91dE1hc2spKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDaGlsZCBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDaGlsZCBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldENoaWxkSWQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtVGltZW91dFJzdkNoaWxkSWQpICYga0NoaWxkSWRNYXNrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDaGlsZCBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGlsZElkICBUaGUgQ2hpbGQgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENoaWxkSWQodWludDE2X3QgYUNoaWxkSWQpIHsKKyAgICAgICAgbVRpbWVvdXRSc3ZDaGlsZElkID0gSG9zdFN3YXAxNigoSG9zdFN3YXAxNihtVGltZW91dFJzdkNoaWxkSWQpICYgfmtDaGlsZElkTWFzaykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhQ2hpbGRJZCAmIGtDaGlsZElkTWFzaykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1vZGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTW9kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TW9kZSh2b2lkKSBjb25zdCB7IHJldHVybiBtTW9kZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTW9kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNb2RlICBUaGUgTW9kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TW9kZSh1aW50OF90IGFNb2RlKSB7IG1Nb2RlID0gYU1vZGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJlc2VydmVkIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJlc2VydmVkIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSZXNlcnZlZCh2b2lkKSBjb25zdCB7IHJldHVybiAoSG9zdFN3YXAxNihtVGltZW91dFJzdkNoaWxkSWQpICYga1Jlc2VydmVkTWFzaykgPj4ga1Jlc2VydmVkT2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSZXNlcnZlZCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXNlcnZlZCAgVGhlIFJlc2VydmVkIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSZXNlcnZlZCh1aW50OF90IGFSZXNlcnZlZCkgeworICAgICAgICBtVGltZW91dFJzdkNoaWxkSWQgPSBIb3N0U3dhcDE2KChIb3N0U3dhcDE2KG1UaW1lb3V0UnN2Q2hpbGRJZCkgJiB+a1Jlc2VydmVkTWFzaykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYVJlc2VydmVkIDw8IGtSZXNlcnZlZE9mZnNldCkgJiBrUmVzZXJ2ZWRNYXNrKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8qKgorICAgICAqIE1hc2tzIGZvciBmaWVsZHMuCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtCisgICAgeworICAgICAgICBrVGltZW91dE1hc2sgICAgPSAweGY4MDAsCisgICAgICAgIGtUaW1lb3V0T2Zmc2V0ICA9IDExLAorICAgICAgICBrUmVzZXJ2ZWRNYXNrICAgPSAweDA2MDAsCisgICAgICAgIGtSZXNlcnZlZE9mZnNldCA9IDksCisgICAgICAgIGtDaGlsZElkTWFzayAgICA9IDB4MWZmCisgICAgfTsKKworICAgIHVpbnQxNl90IG1UaW1lb3V0UnN2Q2hpbGRJZDsKKyAgICB1aW50OF90ICBtTW9kZTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBDaGlsZCBUYWJsZSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDaGlsZFRhYmxlVGx2OiBwdWJsaWMgTmV0d29ya0RpYWdub3N0aWNUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrQ2hpbGRUYWJsZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1Rsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBDaGlsZCBUYWJsZSBlbnRyaWVzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBDaGlsZCBUYWJsZSBlbnRyaWVzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXROdW1FbnRyaWVzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpIC8gc2l6ZW9mKENoaWxkVGFibGVFbnRyeSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIENoaWxkIFRhYmxlIGVudHJ5IGF0IEBwIGFJbmRleC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbmRleCAgVGhlIGluZGV4IGludG8gdGhlIENoaWxkIFRhYmxlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gdGhlIENoaWxkIFRhYmxlIGVudHJ5LgorICAgICAqLworICAgIENoaWxkVGFibGVFbnRyeSAmR2V0RW50cnkodWludDhfdCBhSW5kZXgpIHsKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PENoaWxkVGFibGVFbnRyeSAqPihHZXRWYWx1ZSgpICsgKGFJbmRleCAqIHNpemVvZihDaGlsZFRhYmxlRW50cnkpKSk7CisgICAgfQorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBDaGFubmVsIFBhZ2VzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENoYW5uZWxQYWdlc1RsdjogcHVibGljIE5ldHdvcmtEaWFnbm9zdGljVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0NoYW5uZWxQYWdlcyk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1Rsdik7IH0KKworICAgIHVpbnQ4X3QgKkdldENoYW5uZWxQYWdlcyh2b2lkKSB7IHJldHVybiBtQ2hhbm5lbFBhZ2VzOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtQ2hhbm5lbFBhZ2VzWzFdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIElQdjYgQWRkcmVzcyBMaXN0IFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFR5cGVMaXN0VGx2OiBwdWJsaWMgTmV0d29ya0RpYWdub3N0aWNUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrVHlwZUxpc3QpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpIDw9IE9UX05FVFdPUktfRElBR05PU1RJQ19UWVBFTElTVF9NQVhfRU5UUklFUzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIENoYWxsZW5nZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgQ2hhbGxlbmdlIHZhbHVlLgorICAgICAqCisgICAgICovCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTWF4IENoaWxkIFRpbWVvdXQgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTWF4Q2hpbGRUaW1lb3V0VGx2OiBwdWJsaWMgTmV0d29ya0RpYWdub3N0aWNUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrTWF4Q2hpbGRUaW1lb3V0KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0VGltZW91dCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1UaW1lb3V0KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaW1lb3V0ICBUaGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VGltZW91dCh1aW50MzJfdCBhVGltZW91dCkgeyBtVGltZW91dCA9IEhvc3RTd2FwMzIoYVRpbWVvdXQpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbVRpbWVvdXQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgTmV0d29ya0RpYWdub3N0aWMKKworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRXT1JLX0RJQUdOT1NUSUNfVExWU19IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvcGFuaWRfcXVlcnlfc2VydmVyLmNwcCBiL3NyYy9jb3JlL3RocmVhZC9wYW5pZF9xdWVyeV9zZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMzM1ODMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvcGFuaWRfcXVlcnlfc2VydmVyLmNwcApAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgUEFOIElEIFF1ZXJ5IFNlcnZlci4KKyAqLworCisKKyNkZWZpbmUgV1BQX05BTUUgInBhbmlkX3F1ZXJ5X3NlcnZlci50bWgiCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInBhbmlkX3F1ZXJ5X3NlcnZlci5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3AuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK1BhbklkUXVlcnlTZXJ2ZXI6OlBhbklkUXVlcnlTZXJ2ZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1DaGFubmVsTWFzaygwKSwKKyAgICBtUGFuSWQoTWFjOjprUGFuSWRCcm9hZGNhc3QpLAorICAgIG1UaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmUGFuSWRRdWVyeVNlcnZlcjo6SGFuZGxlVGltZXIsIHRoaXMpLAorICAgIG1QYW5JZFF1ZXJ5KE9UX1VSSV9QQVRIX1BBTklEX1FVRVJZLCAmUGFuSWRRdWVyeVNlcnZlcjo6SGFuZGxlUXVlcnksIHRoaXMpCit7CisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtUGFuSWRRdWVyeSk7Cit9CisKK3ZvaWQgUGFuSWRRdWVyeVNlcnZlcjo6SGFuZGxlUXVlcnkodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PFBhbklkUXVlcnlTZXJ2ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVRdWVyeSgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBQYW5JZFF1ZXJ5U2VydmVyOjpIYW5kbGVRdWVyeShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgTWVzaENvUDo6UGFuSWRUbHYgcGFuSWQ7CisgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IGNoYW5uZWxNYXNrOworICAgIElwNjo6TWVzc2FnZUluZm8gcmVzcG9uc2VJbmZvKGFNZXNzYWdlSW5mbyk7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX1BPU1QpOworCisgICAgU3VjY2Vzc09yRXhpdChNZXNoQ29QOjpUbHY6OkdldFRsdihhTWVzc2FnZSwgTWVzaENvUDo6VGx2OjprQ2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzayksIGNoYW5uZWxNYXNrKSk7CisgICAgVmVyaWZ5T3JFeGl0KGNoYW5uZWxNYXNrLklzVmFsaWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KE1lc2hDb1A6OlRsdjo6R2V0VGx2KGFNZXNzYWdlLCBNZXNoQ29QOjpUbHY6OmtQYW5JZCwgc2l6ZW9mKHBhbklkKSwgcGFuSWQpKTsKKyAgICBWZXJpZnlPckV4aXQocGFuSWQuSXNWYWxpZCgpKTsKKworICAgIG1DaGFubmVsTWFzayA9IGNoYW5uZWxNYXNrLkdldE1hc2soKTsKKyAgICBtQ29tbWlzc2lvbmVyID0gYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCk7CisgICAgbVBhbklkID0gcGFuSWQuR2V0UGFuSWQoKTsKKyAgICBtVGltZXIuU3RhcnQoa1NjYW5EZWxheSk7CisKKyAgICBpZiAoYUhlYWRlci5Jc0NvbmZpcm1hYmxlKCkgJiYgIWFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KEdldE5ldGlmKCkuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCByZXNwb25zZUluZm8pKTsKKyAgICAgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBwYW5pZCBxdWVyeSByZXNwb25zZSIpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgUGFuSWRRdWVyeVNlcnZlcjo6SGFuZGxlU2NhblJlc3VsdCh2b2lkICphQ29udGV4dCwgTWFjOjpGcmFtZSAqYUZyYW1lKQoreworICAgIHN0YXRpY19jYXN0PFBhbklkUXVlcnlTZXJ2ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVTY2FuUmVzdWx0KGFGcmFtZSk7Cit9CisKK3ZvaWQgUGFuSWRRdWVyeVNlcnZlcjo6SGFuZGxlU2NhblJlc3VsdChNYWM6OkZyYW1lICphRnJhbWUpCit7CisgICAgdWludDE2X3QgcGFuSWQ7CisKKyAgICBpZiAoYUZyYW1lICE9IE5VTEwpCisgICAgeworICAgICAgICBhRnJhbWUtPkdldFNyY1BhbklkKHBhbklkKTsKKworICAgICAgICBpZiAocGFuSWQgPT0gbVBhbklkKQorICAgICAgICB7CisgICAgICAgICAgICBtQ2hhbm5lbE1hc2sgfD0gMSA8PCBhRnJhbWUtPkdldENoYW5uZWwoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChtQ2hhbm5lbE1hc2sgIT0gMCkKKyAgICB7CisgICAgICAgIFNlbmRDb25mbGljdCgpOworICAgIH0KK30KKworb3RFcnJvciBQYW5JZFF1ZXJ5U2VydmVyOjpTZW5kQ29uZmxpY3Qodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IGNoYW5uZWxNYXNrOworICAgIE1lc2hDb1A6OlBhbklkVGx2IHBhbklkOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9QQU5JRF9DT05GTElDVCk7CisgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE1lc2hDb1A6Ok5ld01lc2hDb1BNZXNzYWdlKG5ldGlmLkdldENvYXAoKSwgaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIGNoYW5uZWxNYXNrLkluaXQoKTsKKyAgICBjaGFubmVsTWFzay5TZXRNYXNrKG1DaGFubmVsTWFzayk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzaykpKTsKKworICAgIHBhbklkLkluaXQoKTsKKyAgICBwYW5JZC5TZXRQYW5JZChtUGFuSWQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnBhbklkLCBzaXplb2YocGFuSWQpKSk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihtQ29tbWlzc2lvbmVyKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrQ29hcFVkcFBvcnQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJzZW50IHBhbmlkIGNvbmZsaWN0Iik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIFBhbklkUXVlcnlTZXJ2ZXI6OkhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVUaW1lcigpOworfQorCit2b2lkIFBhbklkUXVlcnlTZXJ2ZXI6OkhhbmRsZVRpbWVyKHZvaWQpCit7CisgICAgR2V0TmV0aWYoKS5HZXRNYWMoKS5BY3RpdmVTY2FuKG1DaGFubmVsTWFzaywgMCwgSGFuZGxlU2NhblJlc3VsdCwgdGhpcyk7CisgICAgbUNoYW5uZWxNYXNrID0gMDsKK30KKworUGFuSWRRdWVyeVNlcnZlciAmUGFuSWRRdWVyeVNlcnZlcjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgUGFuSWRRdWVyeVNlcnZlciAmc2VydmVyID0gKnN0YXRpY19jYXN0PFBhbklkUXVlcnlTZXJ2ZXIgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgUGFuSWRRdWVyeVNlcnZlciAmc2VydmVyID0gb3RHZXRUaHJlYWROZXRpZigpLkdldFBhbklkUXVlcnlTZXJ2ZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIHNlcnZlcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvcGFuaWRfcXVlcnlfc2VydmVyLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9wYW5pZF9xdWVyeV9zZXJ2ZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMmY3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvcGFuaWRfcXVlcnlfc2VydmVyLmhwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHJlc3BvbmRpbmcgdG8gUEFOSUQgUXVlcnkgUmVxdWVzdHMuCisgKi8KKworI2lmbmRlZiBQQU5JRF9RVUVSWV9TRVJWRVJfSFBQXworI2RlZmluZSBQQU5JRF9RVUVSWV9TRVJWRVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIE1lc2hGb3J3YXJkZXI7CitjbGFzcyBUaHJlYWRMYXN0VHJhbnNhY3Rpb25UaW1lVGx2OworY2xhc3MgVGhyZWFkTWVzaExvY2FsRWlkVGx2OworY2xhc3MgVGhyZWFkTmV0aWY7CitjbGFzcyBUaHJlYWRUYXJnZXRUbHY7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGhhbmRsaW5nIFBBTklEIFF1ZXJ5IFJlcXVlc3RzLgorICoKKyAqLworY2xhc3MgUGFuSWRRdWVyeVNlcnZlcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIFBhbklkUXVlcnlTZXJ2ZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1NjYW5EZWxheSA9IDEwMDAsICAvLy88IFNDQU5fREVMQVkgKG1pbGxpc2Vjb25kcykKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlUXVlcnkodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVF1ZXJ5KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVTY2FuUmVzdWx0KHZvaWQgKmFDb250ZXh0LCBNYWM6OkZyYW1lICphRnJhbWUpOworICAgIHZvaWQgSGFuZGxlU2NhblJlc3VsdChNYWM6OkZyYW1lICphRnJhbWUpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVUaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisKKyAgICBvdEVycm9yIFNlbmRDb25mbGljdCh2b2lkKTsKKworICAgIHN0YXRpYyBQYW5JZFF1ZXJ5U2VydmVyICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICBJcDY6OkFkZHJlc3MgbUNvbW1pc3Npb25lcjsKKyAgICB1aW50MzJfdCBtQ2hhbm5lbE1hc2s7CisgICAgdWludDE2X3QgbVBhbklkOworCisgICAgVGltZXIgbVRpbWVyOworCisgICAgQ29hcDo6UmVzb3VyY2UgbVBhbklkUXVlcnk7Cit9OworCisvKioKKyAqIEB9CisgKi8KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gUEFOSURfUVVFUllfU0VSVkVSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9zcmNfbWF0Y2hfY29udHJvbGxlci5jcHAgYi9zcmMvY29yZS90aHJlYWQvc3JjX21hdGNoX2NvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NmM4NzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvc3JjX21hdGNoX2NvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHNvdXJjZSBhZGRyZXNzIG1hdGNoIGNvbnRyb2xsZXIuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAic3JjX21hdGNoX2NvbnRyb2xsZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInNyY19tYXRjaF9jb250cm9sbGVyLmhwcCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWVzaF9mb3J3YXJkZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitTb3VyY2VNYXRjaENvbnRyb2xsZXI6OlNvdXJjZU1hdGNoQ29udHJvbGxlcihNZXNoRm9yd2FyZGVyICZhTWVzaEZvcndhcmRlcikgOgorICAgIE1lc2hGb3J3YXJkZXJMb2NhdG9yKGFNZXNoRm9yd2FyZGVyKSwKKyAgICBtRW5hYmxlZChmYWxzZSkKK3sKKyAgICBDbGVhclRhYmxlKCk7Cit9CisKK3ZvaWQgU291cmNlTWF0Y2hDb250cm9sbGVyOjpJbmNyZW1lbnRNZXNzYWdlQ291bnQoQ2hpbGQgJmFDaGlsZCkKK3sKKyAgICBpZiAoYUNoaWxkLkdldEluZGlyZWN0TWVzc2FnZUNvdW50KCkgPT0gMCkKKyAgICB7CisgICAgICAgIEFkZEVudHJ5KGFDaGlsZCk7CisgICAgfQorCisgICAgYUNoaWxkLkluY3JlbWVudEluZGlyZWN0TWVzc2FnZUNvdW50KCk7Cit9CisKK3ZvaWQgU291cmNlTWF0Y2hDb250cm9sbGVyOjpEZWNyZW1lbnRNZXNzYWdlQ291bnQoQ2hpbGQgJmFDaGlsZCkKK3sKKyAgICBpZiAoYUNoaWxkLkdldEluZGlyZWN0TWVzc2FnZUNvdW50KCkgPT0gMCkKKyAgICB7CisgICAgICAgIG90TG9nV2Fybk1hYyhHZXRJbnN0YW5jZSgpLCAiRGVjcmVtZW50TWVzc2FnZUNvdW50KGNoaWxkIDB4JTA0eCkgY2FsbGVkIHdoZW4gYWxyZWFkeSBhdCB6ZXJvIGNvdW50LiIsCisgICAgICAgICAgICAgICAgICAgICBhQ2hpbGQuR2V0UmxvYzE2KCkpOworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgYUNoaWxkLkRlY3JlbWVudEluZGlyZWN0TWVzc2FnZUNvdW50KCk7CisKKyAgICBpZiAoYUNoaWxkLkdldEluZGlyZWN0TWVzc2FnZUNvdW50KCkgPT0gMCkKKyAgICB7CisgICAgICAgIENsZWFyRW50cnkoYUNoaWxkKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIFNvdXJjZU1hdGNoQ29udHJvbGxlcjo6UmVzZXRNZXNzYWdlQ291bnQoQ2hpbGQgJmFDaGlsZCkKK3sKKyAgICBhQ2hpbGQuUmVzZXRJbmRpcmVjdE1lc3NhZ2VDb3VudCgpOworICAgIENsZWFyRW50cnkoYUNoaWxkKTsKK30KKwordm9pZCBTb3VyY2VNYXRjaENvbnRyb2xsZXI6OlNldFNyY01hdGNoQXNTaG9ydChDaGlsZCAmYUNoaWxkLCBib29sIGFVc2VTaG9ydEFkZHJlc3MpCit7CisgICAgVmVyaWZ5T3JFeGl0KGFDaGlsZC5Jc0luZGlyZWN0U291cmNlTWF0Y2hTaG9ydCgpICE9IGFVc2VTaG9ydEFkZHJlc3MpOworCisgICAgaWYgKGFDaGlsZC5HZXRJbmRpcmVjdE1lc3NhZ2VDb3VudCgpID4gMCkKKyAgICB7CisgICAgICAgIENsZWFyRW50cnkoYUNoaWxkKTsKKyAgICAgICAgYUNoaWxkLlNldEluZGlyZWN0U291cmNlTWF0Y2hTaG9ydChhVXNlU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgQWRkRW50cnkoYUNoaWxkKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYUNoaWxkLlNldEluZGlyZWN0U291cmNlTWF0Y2hTaG9ydChhVXNlU2hvcnRBZGRyZXNzKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIFNvdXJjZU1hdGNoQ29udHJvbGxlcjo6Q2xlYXJUYWJsZSh2b2lkKQoreworICAgIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cmllcyhHZXRJbnN0YW5jZSgpKTsKKyAgICBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyaWVzKEdldEluc3RhbmNlKCkpOworICAgIG90TG9nRGViZ01hYyhHZXRJbnN0YW5jZSgpLCAiU3JjQWRkck1hdGNoIC0gQ2xlYXJlZCBhbGwgZW50cmllcyIpOworfQorCit2b2lkIFNvdXJjZU1hdGNoQ29udHJvbGxlcjo6RW5hYmxlKGJvb2wgYUVuYWJsZSkKK3sKKyAgICBtRW5hYmxlZCA9IGFFbmFibGU7CisgICAgb3RQbGF0UmFkaW9FbmFibGVTcmNNYXRjaChHZXRJbnN0YW5jZSgpLCBtRW5hYmxlZCk7CisgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJTcmNBZGRyTWF0Y2ggLSAlc2FibGluZyIsIG1FbmFibGVkID8gIkVuIiA6ICJEaXMiKTsKK30KKwordm9pZCBTb3VyY2VNYXRjaENvbnRyb2xsZXI6OkFkZEVudHJ5KENoaWxkICZhQ2hpbGQpCit7CisgICAgYUNoaWxkLlNldEluZGlyZWN0U291cmNlTWF0Y2hQZW5kaW5nKHRydWUpOworCisgICAgaWYgKCFJc0VuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoQWRkUGVuZGluZ0VudHJpZXMoKSk7CisgICAgICAgIEVuYWJsZSh0cnVlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KEFkZEFkZHJlc3MoYUNoaWxkKSA9PSBPVF9FUlJPUl9OT05FLCBFbmFibGUoZmFsc2UpKTsKKyAgICAgICAgYUNoaWxkLlNldEluZGlyZWN0U291cmNlTWF0Y2hQZW5kaW5nKGZhbHNlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitvdEVycm9yIFNvdXJjZU1hdGNoQ29udHJvbGxlcjo6QWRkQWRkcmVzcyhjb25zdCBDaGlsZCAmYUNoaWxkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKGFDaGlsZC5Jc0luZGlyZWN0U291cmNlTWF0Y2hTaG9ydCgpKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFBsYXRSYWRpb0FkZFNyY01hdGNoU2hvcnRFbnRyeShHZXRJbnN0YW5jZSgpLCBhQ2hpbGQuR2V0UmxvYzE2KCkpOworCisgICAgICAgIG90TG9nRGViZ01hYyhHZXRJbnN0YW5jZSgpLCAiU3JjQWRkck1hdGNoIC0gQWRkaW5nIHNob3J0IGFkZHI6IDB4JTA0eCAtLSAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgIGFDaGlsZC5HZXRSbG9jMTYoKSwgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGVycm9yKSwgZXJyb3IpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aW50OF90IGFkZHJbc2l6ZW9mKGFDaGlsZC5HZXRFeHRBZGRyZXNzKCkpXTsKKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBzaXplb2YoYWRkcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYWRkcltpXSA9IGFDaGlsZC5HZXRFeHRBZGRyZXNzKCkubThbc2l6ZW9mKGFkZHIpIC0gMSAtIGldOworICAgICAgICB9CisKKyAgICAgICAgZXJyb3IgPSBvdFBsYXRSYWRpb0FkZFNyY01hdGNoRXh0RW50cnkoR2V0SW5zdGFuY2UoKSwgYWRkcik7CisKKyAgICAgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJTcmNBZGRyTWF0Y2ggLSBBZGRpbmcgYWRkcjogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IC0tICVzICglZCkiLAorICAgICAgICAgICAgICAgICAgICAgYWRkcls3XSwgYWRkcls2XSwgYWRkcls1XSwgYWRkcls0XSwgYWRkclszXSwgYWRkclsyXSwgYWRkclsxXSwgYWRkclswXSwKKyAgICAgICAgICAgICAgICAgICAgIG90VGhyZWFkRXJyb3JUb1N0cmluZyhlcnJvciksIGVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgU291cmNlTWF0Y2hDb250cm9sbGVyOjpDbGVhckVudHJ5KENoaWxkICZhQ2hpbGQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAoYUNoaWxkLklzSW5kaXJlY3RTb3VyY2VNYXRjaFBlbmRpbmcoKSkKKyAgICB7CisgICAgICAgIG90TG9nRGViZ01hYyhHZXRJbnN0YW5jZSgpLCAiU3JjQWRkck1hdGNoIC0gQ2xlYXJpbmcgcGVuZGluZyBmbGFnIGZvciAweCUwNHgiLCBhQ2hpbGQuR2V0UmxvYzE2KCkpOworICAgICAgICBhQ2hpbGQuU2V0SW5kaXJlY3RTb3VyY2VNYXRjaFBlbmRpbmcoZmFsc2UpOworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgaWYgKGFDaGlsZC5Jc0luZGlyZWN0U291cmNlTWF0Y2hTaG9ydCgpKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJ5KEdldEluc3RhbmNlKCksIGFDaGlsZC5HZXRSbG9jMTYoKSk7CisKKyAgICAgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJTcmNBZGRyTWF0Y2ggLSBDbGVhcmluZyBzaG9ydCBhZGRyZXNzOiAweCUwNHggLS0gJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgICAgICBhQ2hpbGQuR2V0UmxvYzE2KCksIG90VGhyZWFkRXJyb3JUb1N0cmluZyhlcnJvciksIGVycm9yKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWludDhfdCBhZGRyW3NpemVvZihhQ2hpbGQuR2V0RXh0QWRkcmVzcygpKV07CisKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgc2l6ZW9mKGFkZHIpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZHJbaV0gPSBhQ2hpbGQuR2V0RXh0QWRkcmVzcygpLm04W3NpemVvZihhQ2hpbGQuR2V0RXh0QWRkcmVzcygpKSAtIDEgLSBpXTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yID0gb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cnkoR2V0SW5zdGFuY2UoKSwgYWRkcik7CisKKyAgICAgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJTcmNBZGRyTWF0Y2ggLSBDbGVhcmluZyBhZGRyOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggLS0gJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgICAgICBhZGRyWzddLCBhZGRyWzZdLCBhZGRyWzVdLCBhZGRyWzRdLCBhZGRyWzNdLCBhZGRyWzJdLCBhZGRyWzFdLCBhZGRyWzBdLAorICAgICAgICAgICAgICAgICAgICAgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGVycm9yKSwgZXJyb3IpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworCisgICAgaWYgKCFJc0VuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoQWRkUGVuZGluZ0VudHJpZXMoKSk7CisgICAgICAgIEVuYWJsZSh0cnVlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitvdEVycm9yIFNvdXJjZU1hdGNoQ29udHJvbGxlcjo6QWRkUGVuZGluZ0VudHJpZXModm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IG51bUNoaWxkcmVuOworICAgIENoaWxkICpjaGlsZDsKKworICAgIGNoaWxkID0gR2V0TWVzaEZvcndhcmRlcigpLkdldE5ldGlmKCkuR2V0TWxlKCkuR2V0Q2hpbGRyZW4oJm51bUNoaWxkcmVuKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyBpKyssIGNoaWxkKyspCisgICAgeworICAgICAgICBpZiAoY2hpbGQtPklzU3RhdGVWYWxpZE9yUmVzdG9yaW5nKCkgJiYgY2hpbGQtPklzSW5kaXJlY3RTb3VyY2VNYXRjaFBlbmRpbmcoKSkKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFkZEFkZHJlc3MoKmNoaWxkKSk7CisgICAgICAgICAgICBjaGlsZC0+U2V0SW5kaXJlY3RTb3VyY2VNYXRjaFBlbmRpbmcoZmFsc2UpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvc3JjX21hdGNoX2NvbnRyb2xsZXIuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL3NyY19tYXRjaF9jb250cm9sbGVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTIyZDgwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL3NyY19tYXRjaF9jb250cm9sbGVyLmhwcApAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHNvdXJjZSBhZGRyZXNzIG1hdGNoIGNvbnRyb2xsZXIuCisgKi8KKworI2lmbmRlZiBTT1VSQ0VfTUFUQ0hfQ09OVFJPTExFUl9IUFBfCisjZGVmaW5lIFNPVVJDRV9NQVRDSF9DT05UUk9MTEVSX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RvcG9sb2d5LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXNvdXJjZS1tYXRjaC1jb250cm9sbGVyCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb24gZm9yIHNvdXJjZSBhZGRyZXNzIG1hdGNoIGNvbnRyb2xsZXIuCisgKgorICogQHsKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgInNvdXJjZSBhZGRyZXNzIG1hdGNoIiBjb250cm9sbGVyLgorICoKKyAqIFRoZSBzb3VyY2UgYWRkcmVzcyBtYXRjaCBmZWF0dXJlIGNvbnRyb2xzIGhvdyB0aGUgcmFkaW8gbGF5ZXIgZGVjaWRlcyB0aGUgImZyYW1lIHBlbmRpbmciIGJpdCBmb3IgYWNrcyBzZW50IGluCisgKiByZXNwb25zZSB0byBkYXRhIHJlcXVlc3QgY29tbWFuZHMgZnJvbSBzbGVlcHkgY2hpbGRyZW4uCisgKgorICogVGhpcyBjbGFzcyB1cGRhdGVzIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUgYW5kIGFsc28gY29udHJvbHMgd2hlbiB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgc291cmNlIG1hdGNoaW5nCisgKiBmZWF0dXJlLgorICoKKyAqIFRoZSBzb3VyY2UgYWRkcmVzcyBtYXRjaCB0YWJsZSBwcm92aWRlcyB0aGUgbGlzdCBvZiBjaGlsZHJlbiBmb3Igd2hpY2ggdGhlcmUgaXMgYSBwZW5kaW5nIGZyYW1lLiBFaXRoZXIgYSBzaG9ydAorICogYWRkcmVzcyBvciBhbiBleHRlbmRlZC9sb25nIGFkZHJlc3MgY2FuIGJlIGFkZGVkIHRvIHRoZSBzb3VyY2UgYWRkcmVzcyBtYXRjaCB0YWJsZS4KKyAqCisgKi8KK2NsYXNzIFNvdXJjZU1hdGNoQ29udHJvbGxlcjogcHVibGljIE1lc2hGb3J3YXJkZXJMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc2hGb3J3YXJkZXIgICBBIHJlZmVyZW5jZSB0byB0aGUgTWVzaCBGb3J3YXJkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBTb3VyY2VNYXRjaENvbnRyb2xsZXIoTWVzaEZvcndhcmRlciAmYU1lc2hGb3J3YXJkZXIpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBzb3VyY2UgYWRkcmVzcyBtYXRjaGluZy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiBzb3VyY2UgYWRkcmVzcyBtYXRjaGluZyBpcyBlbmFibGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNFbmFibGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1FbmFibGVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmNyZW1lbnRzIHRoZSBtZXNzYWdlIGNvdW50IGZvciBhIGNoaWxkIGFuZCB1cGRhdGVzIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFDaGlsZCAgICBBIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluY3JlbWVudE1lc3NhZ2VDb3VudChDaGlsZCAmYUNoaWxkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRlY3JlbWVudHMgdGhlIG1lc3NhZ2UgY291bnQgZm9yIGEgY2hpbGQgYW5kIHVwZGF0ZXMgdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUNoaWxkICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgRGVjcmVtZW50TWVzc2FnZUNvdW50KENoaWxkICZhQ2hpbGQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVzZXRzIHRoZSBtZXNzYWdlIGNvdW50IGZvciBhIGNoaWxkIHRvIHplcm8gYW5kIHVwZGF0ZXMgdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUNoaWxkICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVzZXRNZXNzYWdlQ291bnQoQ2hpbGQgJmFDaGlsZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHdoZXRoZXIgb3Igbm90IHRvIHBlcmZvcm0gc291cmNlIGFkZHJlc3MgbWF0Y2hpbmcgb24gdGhlIGV4dGVuZGVkIG9yIHNob3J0IGFkZHJlc3MgZm9yCisgICAgICogYSBjaGlsZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUNoaWxkICAgICAgICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkLgorICAgICAqIEBwYXJhbVtpbl0gYVVzZVNob3J0QWRkcmVzcyAgYHRydWVgIHRvIG1hdGNoIG9uIHNob3J0IHNvdXJjZSBhZGRyZXNzLCBgZmFsc2VgIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U3JjTWF0Y2hBc1Nob3J0KENoaWxkICZhQ2hpbGQsIGJvb2wgYVVzZVNob3J0QWRkcmVzcyk7CisKK3ByaXZhdGU6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyVGFibGUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzb3VyY2UgbWF0Y2hpbmcuCisgICAgICoKKyAgICAgKiBJZiBlbmFibGVkLCB0aGUgcmFkaW8gdXNlcyB0aGUgc291cmNlIG1hdGNoIHRhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHNldCBvciBjbGVhciB0aGUgImZyYW1lIHBlbmRpbmciIGJpdAorICAgICAqIGluIGFuIGFja25vd2xlZGdtZW50IHRvIGEgTUFDIERhdGEgUmVxdWVzdCBjb21tYW5kLiBJZiBkaXNhYmxlZCwgdGhlIHJhZGlvIGxheWVyIHNldHMgdGhlICJmcmFtZSBwZW5kaW5nIiBvbiBhbGwKKyAgICAgKiBhY2tub3dsZWRnbWVudCBmcmFtZXMgaW4gcmVzcG9uc2UgdG8gTUFDIERhdGEgUmVxdWVzdCBjb21tYW5kcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUVuYWJsZSAgIGB0cnVlYCB0byBlbmFibGUsIGBmYWxzZWAgdG8gZGlzYWJsZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgRW5hYmxlKGJvb2wgYUVuYWJsZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGFuIGVudHJ5IHRvIHNvdXJjZSBtYXRjaCB0YWJsZSBmb3IgYSBnaXZlbiBjaGlsZCBhbmQgdXBkYXRlcyB0aGUgc3RhdGUgb2Ygc291cmNlIG1hdGNoaW5nCisgICAgICogZmVhdHVyZSBhY2NvcmRpbmdseS4KKyAgICAgKgorICAgICAqIElmIHRoZSBlbnRyeSBpcyBhZGRlZCBzdWNjZXNzZnVsbHksIHNvdXJjZSBtYXRjaGluZyBmZWF0dXJlIGlzIGVuYWJsZWQgKGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQpIGFmdGVyIGVuc3VyaW5nCisgICAgICogdGhhdCB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIHBlbmRpbmcgZW50cmllcy4gSWYgdGhlIGVudHJ5IGNhbm5vdCBiZSBhZGRlZCAobm8gc3BhY2UgaW4gc291cmNlIG1hdGNoIHRhYmxlKSwKKyAgICAgKiB0aGUgY2hpbGQgaXMgbWFya2VkIHRvIHJlbWVtYmVyIHRoZSBwZW5kaW5nIGVudHJ5IGFuZCBzb3VyY2UgbWF0Y2hpbmcgaXMgZGlzYWJsZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFDaGlsZCAgICBBIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEFkZEVudHJ5KENoaWxkICZhQ2hpbGQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIGFuIGVudHJ5IGluIHNvdXJjZSBtYXRjaCB0YWJsZSBmb3IgYSBnaXZlbiBjaGlsZCBhbmQgdXBkYXRlcyB0aGUgc3RhdGUgb2Ygc291cmNlIG1hdGNoaW5nCisgICAgICogZmVhdHVyZSBhY2NvcmRpbmdseS4KKyAgICAgKgorICAgICAqIElmIHRoZSBlbnRyeSBpcyByZW1vdmVkIHN1Y2Nlc3NmdWxseSBhbmQgZnJlZXMgdXAgc3BhY2UgaW4gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZSwgYW55IHJlbWFpbmluZyBwZW5kaW5nCisgICAgICogZW50cmllcyBhcmUgYWRkZWQuIElmIGFsbCBwZW5kaW5nIGVudHJpZXMgYXJlIHN1Y2Nlc3NmdWxseSBhZGRlZCwgc291cmNlIG1hdGNoaW5nIGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFDaGlsZCAgICBBIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyRW50cnkoQ2hpbGQgJmFDaGlsZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgZ2l2ZW4gY2hpbGQncyBhZGRyZXNzIChzaG9ydCBvciBleHRlbmRlZCBhZGRyZXNzIGRlcGVuZGluZyBvbiBjaGlsZCdzIHNldHRpbmcpIHRvIHRoZSBzb3VyY2UKKyAgICAgKiBzb3VyY2UgbWF0Y2ggdGFibGUgKEBzYSBTZXRTcmNNYXRjaEFzU2hvcnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFDaGlsZCAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZAorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBDaGlsZCdzIGFkZHJlc3Mgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSB0byB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgTm8gYXZhaWxhYmxlIHNwYWNlIGluIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFkZEFkZHJlc3MoY29uc3QgQ2hpbGQgJmFDaGlsZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGFsbCBwZW5kaW5nIGVudHJpZXMgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgQWxsIHBlbmRpbmcgZW50cmllcyB3ZXJlIHN1Y2Nlc3NmdWxseSBhZGRlZC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIE5vIGF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBZGRQZW5kaW5nRW50cmllcyh2b2lkKTsKKworICAgIGJvb2wgbUVuYWJsZWQ7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFNPVVJDRV9NQVRDSF9DT05UUk9MTEVSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC90aHJlYWRfbmV0aWYuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL3RocmVhZF9uZXRpZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjOTFhYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC90aHJlYWRfbmV0aWYuY3BwCkBAIC0wLDAgKzEsMjAyIEBACisKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInRocmVhZF9uZXRpZi5ocHAiCisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDYuaHBwIgorI2luY2x1ZGUgIm5ldC9uZXRpZi5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGUuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKKworbmFtZXNwYWNlIG90IHsKKworc3RhdGljIGNvbnN0IG90TWFzdGVyS2V5IGtUaHJlYWRNYXN0ZXJLZXkgPQoreworICAgIHsKKyAgICAgICAgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKKyAgICAgICAgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwgMHhmZiwKKyAgICB9Cit9OworCitUaHJlYWROZXRpZjo6VGhyZWFkTmV0aWYoSXA2OjpJcDYgJmFJcDYpOgorICAgIE5ldGlmKGFJcDYsIE9UX05FVElGX0lOVEVSRkFDRV9JRF9USFJFQUQpLAorICAgIG1Db2FwKCp0aGlzKSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKyAgICBtRGhjcDZDbGllbnQoKnRoaXMpLAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIKKyAgICBtRGhjcDZTZXJ2ZXIoKnRoaXMpLAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCisgICAgbURuc0NsaWVudCgqdGhpcyksCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKyAgICBtQWN0aXZlRGF0YXNldCgqdGhpcyksCisgICAgbVBlbmRpbmdEYXRhc2V0KCp0aGlzKSwKKyAgICBtS2V5TWFuYWdlcigqdGhpcyksCisgICAgbUxvd3BhbigqdGhpcyksCisgICAgbU1hYygqdGhpcyksCisgICAgbU1lc2hGb3J3YXJkZXIoKnRoaXMpLAorICAgIG1NbGVSb3V0ZXIoKnRoaXMpLAorI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKyAgICBtTmV0d29ya0RhdGFMb2NhbCgqdGhpcyksCisjZW5kaWYKKyAgICBtTmV0d29ya0RhdGFMZWFkZXIoKnRoaXMpLAorI2lmIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKyAgICBtTmV0d29ya0RpYWdub3N0aWMoKnRoaXMpLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisgICAgbUNvbW1pc3Npb25lcigqdGhpcyksCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorI2lmIE9QRU5USFJFQURfRU5BQkxFX0RUTFMKKyAgICBtRHRscygqdGhpcyksCisgICAgbUNvYXBTZWN1cmUoKnRoaXMpLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSCisgICAgbUpvaW5lcigqdGhpcyksCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKyAgICBtSmFtRGV0ZWN0b3IoKnRoaXMpLAorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RUSU9OCisjaWYgT1BFTlRIUkVBRF9GVEQKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkKKyAgICBtVG1mUHJveHkobU1sZVJvdXRlci5HZXRNZXNoTG9jYWwxNigpLCBtQ29hcCksCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZCisgICAgbUpvaW5lclJvdXRlcigqdGhpcyksCisgICAgbUxlYWRlcigqdGhpcyksCisgICAgbUFkZHJlc3NSZXNvbHZlcigqdGhpcyksCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisgICAgbUNoaWxkU3VwZXJ2aXNvcigqdGhpcyksCisgICAgbVN1cGVydmlzaW9uTGlzdGVuZXIoKnRoaXMpLAorICAgIG1Bbm5vdW5jZUJlZ2luKCp0aGlzKSwKKyAgICBtUGFuSWRRdWVyeSgqdGhpcyksCisgICAgbUVuZXJneVNjYW4oKnRoaXMpCisKK3sKKyAgICBtS2V5TWFuYWdlci5TZXRNYXN0ZXJLZXkoa1RocmVhZE1hc3RlcktleSk7CisgICAgbUNvYXAuU2V0SW50ZXJjZXB0b3IoJlRocmVhZE5ldGlmOjpUbWZGaWx0ZXIsIHRoaXMpOworfQorCitvdEVycm9yIFRocmVhZE5ldGlmOjpVcCh2b2lkKQoreworICAgIGlmICghbUlzVXApCisgICAgeworICAgICAgICBHZXRJcDYoKS5BZGROZXRpZigqdGhpcyk7CisgICAgICAgIG1NZXNoRm9yd2FyZGVyLlN0YXJ0KCk7CisgICAgICAgIG1Db2FwLlN0YXJ0KGtDb2FwVWRwUG9ydCk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorICAgICAgICBtRG5zQ2xpZW50LlN0YXJ0KCk7CisjZW5kaWYKKyAgICAgICAgbUNoaWxkU3VwZXJ2aXNvci5TdGFydCgpOworICAgICAgICBtTWxlUm91dGVyLkVuYWJsZSgpOworICAgICAgICBtSXNVcCA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgVGhyZWFkTmV0aWY6OkRvd24odm9pZCkKK3sKKyAgICBtQ29hcC5TdG9wKCk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorICAgIG1EbnNDbGllbnQuU3RvcCgpOworI2VuZGlmCisgICAgbUNoaWxkU3VwZXJ2aXNvci5TdG9wKCk7CisgICAgbU1sZVJvdXRlci5EaXNhYmxlKCk7CisgICAgbU1lc2hGb3J3YXJkZXIuU3RvcCgpOworICAgIEdldElwNigpLlJlbW92ZU5ldGlmKCp0aGlzKTsKKyAgICBSZW1vdmVBbGxFeHRlcm5hbFVuaWNhc3RBZGRyZXNzZXMoKTsKKyAgICBVbnN1YnNjcmliZUFsbEV4dGVybmFsTXVsdGljYXN0QWRkcmVzc2VzKCk7CisgICAgbUlzVXAgPSBmYWxzZTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RUTFMKKyAgICBtRHRscy5TdG9wKCk7CisjZW5kaWYKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIFRocmVhZE5ldGlmOjpHZXRMaW5rQWRkcmVzcyhJcDY6OkxpbmtBZGRyZXNzICZhZGRyZXNzKSBjb25zdAoreworICAgIGFkZHJlc3MubVR5cGUgPSBJcDY6OkxpbmtBZGRyZXNzOjprRXVpNjQ7CisgICAgYWRkcmVzcy5tTGVuZ3RoID0gc2l6ZW9mKGFkZHJlc3MubUV4dEFkZHJlc3MpOworICAgIG1lbWNweSgmYWRkcmVzcy5tRXh0QWRkcmVzcywgbU1hYy5HZXRFeHRBZGRyZXNzKCksIGFkZHJlc3MubUxlbmd0aCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgVGhyZWFkTmV0aWY6OlJvdXRlTG9va3VwKGNvbnN0IElwNjo6QWRkcmVzcyAmc291cmNlLCBjb25zdCBJcDY6OkFkZHJlc3MgJmRlc3RpbmF0aW9uLCB1aW50OF90ICpwcmVmaXhNYXRjaCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIHVpbnQxNl90IHJsb2M7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbU5ldHdvcmtEYXRhTGVhZGVyLlJvdXRlTG9va3VwKHNvdXJjZSwgZGVzdGluYXRpb24sIHByZWZpeE1hdGNoLCAmcmxvYykpOworCisgICAgaWYgKHJsb2MgPT0gbU1sZVJvdXRlci5HZXRSbG9jMTYoKSkKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEU7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBUaHJlYWROZXRpZjo6VG1mRmlsdGVyKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIHZvaWQgKmFDb250ZXh0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgLy8gQSBUTUYgbWVzc2FnZSBtdXN0IGNvbXBseSB3aXRoIGZvbGxvd2luZyBydWxlczoKKyAgICAvLyAxLiBUaGUgZGVzdGluYXRpb24gaXMgYSBNZXNoIExvY2FsIEFkZHJlc3Mgb3IgYSBMaW5rLUxvY2FsIE11bHRpY2FzdCBBZGRyZXNzIG9yIGEgUmVhbG0tTG9jYWwgTXVsdGljYXN0IEFkZHJlc3MsCisgICAgLy8gICAgYW5kIHRoZSBzb3VyY2UgaXMgYSBNZXNoIExvY2FsIEFkZHJlc3MuCisgICAgLy8gMi4gQm90aCB0aGUgZGVzdGluYXRpb24gYW5kIHRoZSBzb3VyY2UgYXJlIExpbmstTG9jYWwgQWRkcmVzc2VzLgorICAgIFZlcmlmeU9yRXhpdCgoKHN0YXRpY19jYXN0PFRocmVhZE5ldGlmICo+KGFDb250ZXh0KS0+bU1sZVJvdXRlci5Jc01lc2hMb2NhbEFkZHJlc3MoYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkuSXNMaW5rTG9jYWxNdWx0aWNhc3QoKSB8fAorICAgICAgICAgICAgICAgICAgIGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzUmVhbG1Mb2NhbE11bHRpY2FzdCgpKSAmJgorICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VGhyZWFkTmV0aWYgKj4oYUNvbnRleHQpLT5tTWxlUm91dGVyLklzTWVzaExvY2FsQWRkcmVzcyhhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSkpIHx8CisgICAgICAgICAgICAgICAgIChhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc0xpbmtMb2NhbCgpICYmIGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLklzTGlua0xvY2FsKCkpLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PVF9UTUYpOworZXhpdDoKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2UpOworICAgIHJldHVybiBlcnJvcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvdGhyZWFkX25ldGlmLmhwcCBiL3NyYy9jb3JlL3RocmVhZC90aHJlYWRfbmV0aWYuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YjYyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvdGhyZWFkX25ldGlmLmhwcApAQCAtMCwwICsxLDQ5OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgKi8KKworI2lmbmRlZiBUSFJFQURfTkVUSUZfSFBQXworI2RlZmluZSBUSFJFQURfTkVUSUZfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29hcC9jb2FwX3NlY3VyZS5ocHAiCisjaW5jbHVkZSAibWFjL21hYy5ocHAiCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKyNpbmNsdWRlICJ0aHJlYWQvdG1mX3Byb3h5LmhwcCIKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorI2luY2x1ZGUgIm1lc2hjb3AvY29tbWlzc2lvbmVyLmhwcCIKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKKyNpbmNsdWRlICJtZXNoY29wL2RhdGFzZXRfbWFuYWdlci5ocHAiCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9EVExTCisjaW5jbHVkZSAibWVzaGNvcC9kdGxzLmhwcCIKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfRFRMUworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSCisjaW5jbHVkZSAibWVzaGNvcC9qb2luZXIuaHBwIgorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKworI2luY2x1ZGUgIm1lc2hjb3Avam9pbmVyX3JvdXRlci5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9sZWFkZXIuaHBwIgorI2luY2x1ZGUgIm5ldC9kaGNwNi5ocHAiCisjaW5jbHVkZSAibmV0L2RoY3A2X2NsaWVudC5ocHAiCisjaW5jbHVkZSAibmV0L2RoY3A2X3NlcnZlci5ocHAiCisjaW5jbHVkZSAibmV0L2Ruc19jbGllbnQuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfZmlsdGVyLmhwcCIKKyNpbmNsdWRlICJuZXQvbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvYW5ub3VuY2VfYmVnaW5fc2VydmVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvZW5lcmd5X3NjYW5fc2VydmVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbmV0d29ya19kaWFnbm9zdGljLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQva2V5X21hbmFnZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tZXNoX2ZvcndhcmRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZS5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV9yb3V0ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9uZXR3b3JrX2RhdGFfbG9jYWwuaHBwIgorI2luY2x1ZGUgInRocmVhZC9wYW5pZF9xdWVyeV9zZXJ2ZXIuaHBwIgorI2luY2x1ZGUgInV0aWxzL2NoaWxkX3N1cGVydmlzaW9uLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKyNpbmNsdWRlICJ1dGlscy9qYW1fZGV0ZWN0b3IuaHBwIgorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW5ldGlmCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICoKKyAqIEB7CisgKi8KKworY2xhc3MgVGhyZWFkTmV0aWY6IHB1YmxpYyBJcDY6Ok5ldGlmCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlwNiAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgbmV0d29yayBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBUaHJlYWROZXRpZihJcDY6OklwNiAmYUlwNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBlbmFibGVzIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFVwKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGlzYWJsZXMgdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRG93bih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGVuYWJsZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZSBpcyBub3QgZW5hYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNVcCh2b2lkKSBjb25zdCB7IHJldHVybiBtSXNVcDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSBsaW5rIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBsaW5rIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIG90RXJyb3IgR2V0TGlua0FkZHJlc3MoSXA2OjpMaW5rQWRkcmVzcyAmYUFkZHJlc3MpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3VibWl0cyBhIG1lc3NhZ2UgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3VibWl0dGVkIHRoZSBtZXNzYWdlIHRvIHRoZSBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIG90RXJyb3IgU2VuZE1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UpIHsgcmV0dXJuIG1NZXNoRm9yd2FyZGVyLlNlbmRNZXNzYWdlKGFNZXNzYWdlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcGVyZm9ybXMgYSByb3V0ZSBsb29rdXAuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYVNvdXJjZSAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBzb3VyY2UgYWRkcmVzcy4KKyAgICAgKiBAcGFyYW1baW5dICAgYURlc3RpbmF0aW9uICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtvdXRdICBhUHJlZml4TWF0Y2ggIEEgcG9pbnRlciB3aGVyZSB0aGUgbnVtYmVyIG9mIHByZWZpeCBtYXRjaCBiaXRzIGZvciB0aGUgY2hvc2VuIHJvdXRlIGlzIHN0b3JlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCBhIHJvdXRlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fUk9VVEUgIENvdWxkIG5vdCBmaW5kIGEgdmFsaWQgcm91dGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIG90RXJyb3IgUm91dGVMb29rdXAoY29uc3QgSXA2OjpBZGRyZXNzICZhU291cmNlLCBjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwgdWludDhfdCAqYVByZWZpeE1hdGNoKTsKKworI2lmIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXR3b3JrIGRpYWdub3N0aWMgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGFkZHJlc3MgcmVzb2x2ZXIgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTmV0d29ya0RpYWdub3N0aWM6Ok5ldHdvcmtEaWFnbm9zdGljICZHZXROZXR3b3JrRGlhZ25vc3RpYyh2b2lkKSB7IHJldHVybiBtTmV0d29ya0RpYWdub3N0aWM7IH0KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURCB8fCBPUEVOVEhSRUFEX0VOQUJMRV9NVERfTkVUV09SS19ESUFHTk9TVElDCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBkaGNwIGNsaWVudCBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZGhjcCBjbGllbnQgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgRGhjcDY6OkRoY3A2Q2xpZW50ICZHZXREaGNwNkNsaWVudCh2b2lkKSB7IHJldHVybiBtRGhjcDZDbGllbnQ7IH0KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBkaGNwIHNlcnZlciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgdGhlIGRoY3Agc2VydmVyIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIERoY3A2OjpEaGNwNlNlcnZlciAmR2V0RGhjcDZTZXJ2ZXIodm9pZCkgeyByZXR1cm4gbURoY3A2U2VydmVyOyB9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGRucyBjbGllbnQgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGRucyBjbGllbnQgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgRG5zOjpDbGllbnQgJkdldERuc0NsaWVudCh2b2lkKSB7IHJldHVybiBtRG5zQ2xpZW50OyB9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIENvQVAgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIENvQVAgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQ29hcDo6Q29hcCAmR2V0Q29hcCh2b2lkKSB7IHJldHVybiBtQ29hcDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBmaWx0ZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgZmlsdGVyIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIElwNjo6RmlsdGVyICZHZXRJcDZGaWx0ZXIodm9pZCkgeyByZXR1cm4gbUlwNkZpbHRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUga2V5IG1hbmFnZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGtleSBtYW5hZ2VyIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIEtleU1hbmFnZXIgJkdldEtleU1hbmFnZXIodm9pZCkgeyByZXR1cm4gbUtleU1hbmFnZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGxvd3BhbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgbG93cGFuIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIExvd3Bhbjo6TG93cGFuICZHZXRMb3dwYW4odm9pZCkgeyByZXR1cm4gbUxvd3BhbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgbWFjIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBtYWMgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTWFjOjpNYWMgJkdldE1hYyh2b2lkKSB7IHJldHVybiBtTWFjOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBtbGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIG1sZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNbGU6Ok1sZVJvdXRlciAmR2V0TWxlKHZvaWQpIHsgcmV0dXJuIG1NbGVSb3V0ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIG1lc2ggZm9yd2FyZGVyIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNoIGZvcndhcmRlciBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNoRm9yd2FyZGVyICZHZXRNZXNoRm9yd2FyZGVyKHZvaWQpIHsgcmV0dXJuIG1NZXNoRm9yd2FyZGVyOyB9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgbmV0d29yayBkYXRhIGxvY2FsIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBuZXR3b3JrIGRhdGEgbG9jYWwgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTmV0d29ya0RhdGE6OkxvY2FsICZHZXROZXR3b3JrRGF0YUxvY2FsKHZvaWQpIHsgcmV0dXJuIG1OZXR3b3JrRGF0YUxvY2FsOyB9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIG5ldHdvcmsgZGF0YSBsZWFkZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIG5ldHdvcmsgZGF0YSBsZWFkZXIgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTmV0d29ya0RhdGE6OkxlYWRlciAmR2V0TmV0d29ya0RhdGFMZWFkZXIodm9pZCkgeyByZXR1cm4gbU5ldHdvcmtEYXRhTGVhZGVyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUgZGF0YXNldCBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgYWN0aXZlIGRhdGFzZXQgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTWVzaENvUDo6QWN0aXZlRGF0YXNldCAmR2V0QWN0aXZlRGF0YXNldCh2b2lkKSB7IHJldHVybiBtQWN0aXZlRGF0YXNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgcGVuZGluZyBkYXRhc2V0IG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBwZW5kaW5nIGRhdGFzZXQgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTWVzaENvUDo6UGVuZGluZ0RhdGFzZXQgJkdldFBlbmRpbmdEYXRhc2V0KHZvaWQpIHsgcmV0dXJuIG1QZW5kaW5nRGF0YXNldDsgfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBqb2luZXIgcm91dGVyIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBqb2luZXIgcm91dGVyIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIE1lc2hDb1A6OkpvaW5lclJvdXRlciAmR2V0Sm9pbmVyUm91dGVyKHZvaWQpIHsgcmV0dXJuIG1Kb2luZXJSb3V0ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIE1lc2hDb1AgbGVhZGVyIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBNZXNoQ29QIGxlYWRlciBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNoQ29QOjpMZWFkZXIgJkdldExlYWRlcih2b2lkKSB7IHJldHVybiBtTGVhZGVyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBhZGRyZXNzIHJlc29sdmVyIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBhZGRyZXNzIHJlc29sdmVyIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIEFkZHJlc3NSZXNvbHZlciAmR2V0QWRkcmVzc1Jlc29sdmVyKHZvaWQpIHsgcmV0dXJuIG1BZGRyZXNzUmVzb2x2ZXI7IH0KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGFubm91bmNlIGJlZ2luIHNlcnZlciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgYW5ub3VuY2UgYmVnaW4gc2VydmVyIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIEFubm91bmNlQmVnaW5TZXJ2ZXIgJkdldEFubm91bmNlQmVnaW5TZXJ2ZXIodm9pZCkgeyByZXR1cm4gbUFubm91bmNlQmVnaW47IH0KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbW1pc3Npb25lciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgY29tbWlzc2lvZW5yIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIE1lc2hDb1A6OkNvbW1pc3Npb25lciAmR2V0Q29tbWlzc2lvbmVyKHZvaWQpIHsgcmV0dXJuIG1Db21taXNzaW9uZXI7IH0KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9EVExTCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgRHRscyBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgRHRscyBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNoQ29QOjpEdGxzICZHZXREdGxzKHZvaWQpIHsgcmV0dXJuIG1EdGxzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBzZWN1cmUgQ29BUCBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgc2VjdXJlIENvQVAgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQ29hcDo6Q29hcFNlY3VyZSAmR2V0Q29hcFNlY3VyZSh2b2lkKSB7IHJldHVybiBtQ29hcFNlY3VyZTsgfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9EVExTCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBqb2luZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGpvaW5lciBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNoQ29QOjpKb2luZXIgJkdldEpvaW5lcih2b2lkKSB7IHJldHVybiBtSm9pbmVyOyB9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGphbSBkZXRlY3RvciBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFJlZmVyZW5jZSB0byB0aGUgSmFtRGV0ZWN0b3IgaW5zdGFuY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBVdGlsczo6SmFtRGV0ZWN0b3IgJkdldEphbURldGVjdG9yKHZvaWQpIHsgcmV0dXJuIG1KYW1EZXRlY3RvcjsgfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFRNRiBwcm94eSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBSZWZlcmVuY2UgdG8gdGhlIFRNRiBwcm94eSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBUbWZQcm94eSAmR2V0VG1mUHJveHkodm9pZCkgeyByZXR1cm4gbVRtZlByb3h5OyB9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZICYmIE9QRU5USFJFQURfRlRECisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCBzdXBlcnZpc29yIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCBzdXBlcnZpc29yIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIFV0aWxzOjpDaGlsZFN1cGVydmlzb3IgJkdldENoaWxkU3VwZXJ2aXNvcih2b2lkKSB7IHJldHVybiBtQ2hpbGRTdXBlcnZpc29yOyB9CisKKyAgICAvKioKKyAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwZXJ2aXNpb24gbGlzdGVuZXIgb2JqZWN0LgorICAgICAgKgorICAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgc3VwZXJ2aXNpb24gbGlzdGVuZXIgb2JqZWN0LgorICAgICAgKgorICAgICAgKi8KKyAgICBVdGlsczo6U3VwZXJ2aXNpb25MaXN0ZW5lciAmR2V0U3VwZXJ2aXNpb25MaXN0ZW5lcih2b2lkKSB7IHJldHVybiBtU3VwZXJ2aXNpb25MaXN0ZW5lcjsgfQorCisgICAgLyoqCisgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGVuZXJneSBzY2FuIHNlcnZlciBvYmplY3QuCisgICAgICAqCisgICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBlbmVyZ3kgc2NhbiBzZXJ2ZXIgb2JqZWN0LgorICAgICAgKgorICAgICAgKi8KKyAgICBFbmVyZ3lTY2FuU2VydmVyICZHZXRFbmVyZ3lTY2FuU2VydmVyKHZvaWQpIHsgcmV0dXJuIG1FbmVyZ3lTY2FuOyB9CisKKyAgICAvKioKKyAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgUEFOIElEIHF1ZXJ5IHNlcnZlciBvYmplY3QuCisgICAgICAqCisgICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBQQU4gSUQgcXVlcnkgc2VydmVyIG9iamVjdC4KKyAgICAgICoKKyAgICAgICovCisgICAgUGFuSWRRdWVyeVNlcnZlciAmR2V0UGFuSWRRdWVyeVNlcnZlcih2b2lkKSB7IHJldHVybiBtUGFuSWRRdWVyeTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBvdEVycm9yIFRtZkZpbHRlcihjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCB2b2lkICphQ29udGV4dCk7CisKKyAgICBDb2FwOjpDb2FwIG1Db2FwOworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorICAgIERoY3A2OjpEaGNwNkNsaWVudCBtRGhjcDZDbGllbnQ7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorICAgIERoY3A2OjpEaGNwNlNlcnZlciBtRGhjcDZTZXJ2ZXI7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKyAgICBEbnM6OkNsaWVudCBtRG5zQ2xpZW50OworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCisgICAgTWVzaENvUDo6QWN0aXZlRGF0YXNldCBtQWN0aXZlRGF0YXNldDsKKyAgICBNZXNoQ29QOjpQZW5kaW5nRGF0YXNldCBtUGVuZGluZ0RhdGFzZXQ7CisgICAgSXA2OjpGaWx0ZXIgbUlwNkZpbHRlcjsKKyAgICBLZXlNYW5hZ2VyIG1LZXlNYW5hZ2VyOworICAgIExvd3Bhbjo6TG93cGFuIG1Mb3dwYW47CisgICAgTWFjOjpNYWMgbU1hYzsKKyAgICBNZXNoRm9yd2FyZGVyIG1NZXNoRm9yd2FyZGVyOworICAgIE1sZTo6TWxlUm91dGVyIG1NbGVSb3V0ZXI7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIE5ldHdvcmtEYXRhOjpMb2NhbCBtTmV0d29ya0RhdGFMb2NhbDsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIE5ldHdvcmtEYXRhOjpMZWFkZXIgbU5ldHdvcmtEYXRhTGVhZGVyOworI2lmIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKyAgICBOZXR3b3JrRGlhZ25vc3RpYzo6TmV0d29ya0RpYWdub3N0aWMgbU5ldHdvcmtEaWFnbm9zdGljOworI2VuZGlmIC8vIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKyAgICBib29sIG1Jc1VwOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisgICAgTWVzaENvUDo6Q29tbWlzc2lvbmVyIG1Db21taXNzaW9uZXI7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRFRMUworICAgIE1lc2hDb1A6OkR0bHMgbUR0bHM7CisgICAgQ29hcDo6Q29hcFNlY3VyZSBtQ29hcFNlY3VyZTsKKyNlbmRpZi8vIE9QRU5USFJFQURfRU5BQkxFX0RUTFMKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorICAgIE1lc2hDb1A6OkpvaW5lciBtSm9pbmVyOworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKyAgICBVdGlsczo6SmFtRGV0ZWN0b3IgbUphbURldGVjdG9yOworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorICAgIFRtZlByb3h5IG1UbWZQcm94eTsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKworI2lmIE9QRU5USFJFQURfRlRECisgICAgTWVzaENvUDo6Sm9pbmVyUm91dGVyIG1Kb2luZXJSb3V0ZXI7CisgICAgTWVzaENvUDo6TGVhZGVyIG1MZWFkZXI7CisgICAgQWRkcmVzc1Jlc29sdmVyIG1BZGRyZXNzUmVzb2x2ZXI7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKKyAgICBVdGlsczo6Q2hpbGRTdXBlcnZpc29yIG1DaGlsZFN1cGVydmlzb3I7CisgICAgVXRpbHM6OlN1cGVydmlzaW9uTGlzdGVuZXIgbVN1cGVydmlzaW9uTGlzdGVuZXI7CisgICAgQW5ub3VuY2VCZWdpblNlcnZlciBtQW5ub3VuY2VCZWdpbjsKKyAgICBQYW5JZFF1ZXJ5U2VydmVyIG1QYW5JZFF1ZXJ5OworICAgIEVuZXJneVNjYW5TZXJ2ZXIgbUVuZXJneVNjYW47Cit9OworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgVGhyZWFkLXNwZWNpZmljIGxpbmsgaW5mb3JtYXRpb24uCisgKgorICovCitzdHJ1Y3QgVGhyZWFkTWVzc2FnZUluZm8KK3sKKyAgICB1aW50MTZfdCBtUGFuSWQ7ICAgICAgICAgLy8vPCBTb3VyY2UgUEFOIElECisgICAgdWludDhfdCAgbUNoYW5uZWw7ICAgICAgIC8vLzwgODAyLjE1LjQgQ2hhbm5lbAorICAgIGludDhfdCAgIG1Sc3M7ICAgICAgICAgICAvLy88IFJlY2VpdmVkIFNpZ25hbCBTdHJlbmd0aCBpbiBkQm0uCisgICAgdWludDhfdCAgbUxxaTsgICAgICAgICAgIC8vLzwgTGluayBRdWFsaXR5IEluZGljYXRvciBmb3IgYSByZWNlaXZlZCBtZXNzYWdlLgorICAgIGJvb2wgICAgIG1MaW5rU2VjdXJpdHk7ICAvLy88IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBsaW5rIHNlY3VyaXR5IGlzIGVuYWJsZWQuCit9OworCisvKioKKyAqIEB9CisgKi8KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gVEhSRUFEX05FVElGX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC90aHJlYWRfdGx2cy5ocHAgYi9zcmMvY29yZS90aHJlYWQvdGhyZWFkX3RsdnMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMjRiYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvdGhyZWFkX3RsdnMuaHBwCkBAIC0wLDAgKzEsNTA4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBhbmQgbWV0aG9kcyBmb3IgZ2VuZXJhdGluZyBhbmQgcHJvY2Vzc2luZyBUaHJlYWQgTmV0d29yayBMYXllciBUTFZzLgorICovCisKKyNpZm5kZWYgVEhSRUFEX1RMVlNfSFBQXworI2RlZmluZSBUSFJFQURfVExWU19IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGx2cy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7Cit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAzMjsKKworbmFtZXNwYWNlIG90IHsKKworZW51bQoreworICAgIGtDb2FwVWRwUG9ydCA9IDYxNjMxLAorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTmV0d29yayBMYXllciBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBUaHJlYWRUbHYgOiBwdWJsaWMgb3Q6OlRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIE5ldHdvcmsgTGF5ZXIgVExWIFR5cGVzLgorICAgICAqCisgICAgICovCisgICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBrVGFyZ2V0ICAgICAgICAgICAgICA9IDAsICAvLy88IFRhcmdldCBFSUQgVExWCisgICAgICAgIGtFeHRNYWNBZGRyZXNzICAgICAgID0gMSwgIC8vLzwgRXh0ZW5kZWQgTUFDIEFkZHJlc3MgVExWCisgICAgICAgIGtSbG9jMTYgICAgICAgICAgICAgID0gMiwgIC8vLzwgUkxPQzE2IFRMVgorICAgICAgICBrTWVzaExvY2FsRWlkICAgICAgICA9IDMsICAvLy88IE1MLUVJRCBUTFYKKyAgICAgICAga1N0YXR1cyAgICAgICAgICAgICAgPSA0LCAgLy8vPCBTdGF0dXMgVExWCisgICAgICAgIGtMYXN0VHJhbnNhY3Rpb25UaW1lID0gNiwgIC8vLzwgVGltZSBTaW5jZSBMYXN0IFRyYW5zYWN0aW9uIFRMVgorICAgICAgICBrUm91dGVyTWFzayAgICAgICAgICA9IDcsICAvLy88IFJvdXRlciBNYXNrIFRMVgorICAgICAgICBrTkRPcHRpb24gICAgICAgICAgICA9IDgsICAvLy88IE5EIE9wdGlvbiBUTFYKKyAgICAgICAga05ERGF0YSAgICAgICAgICAgICAgPSA5LCAgLy8vPCBORCBEYXRhIFRMVgorICAgICAgICBrVGhyZWFkTmV0d29ya0RhdGEgICA9IDEwLCAvLy88IFRocmVhZCBOZXR3b3JrIERhdGEgVExWCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIFR5cGUgR2V0VHlwZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihvdDo6VGx2OjpHZXRUeXBlKCkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgIFRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUeXBlKFR5cGUgYVR5cGUpIHsgb3Q6OlRsdjo6U2V0VHlwZShzdGF0aWNfY2FzdDx1aW50OF90PihhVHlwZSkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgcmVhZHMgdGhlIHJlcXVlc3RlZCBUTFYgb3V0IG9mIEBwIGFNZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gICBhVHlwZSAgICAgICBUaGUgVHlwZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICAgICAqIEBwYXJhbVtpbl0gICBhTWF4TGVuZ3RoICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZWFkLgorICAgICAqIEBwYXJhbVtvdXRdICBhVGx2ICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgVExWIHRoYXQgd2lsbCBiZSBjb3BpZWQgdG8uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGNvcGllZCB0aGUgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgVExWIHdpdGggVHlwZSBAcCBhVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIEdldFRsdihjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgVHlwZSBhVHlwZSwgdWludDE2X3QgYU1heExlbmd0aCwgVGx2ICZhVGx2KSB7CisgICAgICAgIHJldHVybiBvdDo6VGx2OjpHZXQoYU1lc3NhZ2UsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFUeXBlKSwgYU1heExlbmd0aCwgYVRsdik7CisgICAgfQorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVGFyZ2V0IEVJRCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBUaHJlYWRUYXJnZXRUbHY6IHB1YmxpYyBUaHJlYWRUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrVGFyZ2V0KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGhyZWFkVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUaHJlYWRUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgVGFyZ2V0IEVJRC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgVGFyZ2V0IEVJRC4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IElwNjo6QWRkcmVzcyAqR2V0VGFyZ2V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuICZtVGFyZ2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUYXJnZXQgRUlELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRhcmdldCAgQSByZWZlcmVuY2UgdG8gdGhlIFRhcmdldCBFSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRhcmdldChjb25zdCBJcDY6OkFkZHJlc3MgJmFUYXJnZXQpIHsgbVRhcmdldCA9IGFUYXJnZXQ7IH0KKworcHJpdmF0ZToKKyAgICBJcDY6OkFkZHJlc3MgbVRhcmdldDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBFeHRlbmRlZCBNQUMgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK2NsYXNzIFRocmVhZEV4dE1hY0FkZHJlc3NUbHY6IHB1YmxpYyBUaHJlYWRUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrRXh0TWFjQWRkcmVzcyk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRocmVhZFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGhyZWFkVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEV4dGVuZGVkIE1BQyBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBFeHRlbmRlZCBNQUMgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAqR2V0TWFjQWRkcih2b2lkKSBjb25zdCB7IHJldHVybiAmbU1hY0FkZHI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEV4dGVuZGVkIE1BQyBBZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBFeHRlbmRlZCBNQUMgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWFjQWRkcihjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFBZGRyZXNzKSB7IG1NYWNBZGRyID0gYUFkZHJlc3M7IH0KKworcHJpdmF0ZToKKyAgICBNYWM6OkV4dEFkZHJlc3MgbU1hY0FkZHI7Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBSTE9DMTYgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGhyZWFkUmxvYzE2VGx2OiBwdWJsaWMgVGhyZWFkVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1Jsb2MxNik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRocmVhZFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGhyZWFkVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFJsb2MxNih2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1SbG9jMTYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSbG9jMTYodWludDE2X3QgYVJsb2MxNikgeyBtUmxvYzE2ID0gSG9zdFN3YXAxNihhUmxvYzE2KTsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1SbG9jMTY7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTUwtRUlEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFRocmVhZE1lc2hMb2NhbEVpZFRsdjogcHVibGljIFRocmVhZFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtNZXNoTG9jYWxFaWQpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUaHJlYWRUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRocmVhZFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBNTC1FSUQgSUlELgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBFeHRlbmRlZCBNQUMgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldElpZCh2b2lkKSBjb25zdCB7IHJldHVybiBtSWlkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNTC1FSUQgSUlELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlpZCAgQSBwb2ludGVyIHRvIHRoZSBNTC1FSUQgSUlELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJaWQoY29uc3QgdWludDhfdCAqYUlpZCkgeyBtZW1jcHkobUlpZCwgYUlpZCwgc2l6ZW9mKG1JaWQpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTUwtRUlEIElJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgTUFDIEV4dGVuZGVkIEFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElpZChjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFFeHRBZGRyZXNzKSB7CisgICAgICAgIG1lbWNweShtSWlkLCBhRXh0QWRkcmVzcy5tOCwgc2l6ZW9mKG1JaWQpKTsKKyAgICAgICAgbUlpZFswXSBePSAweDI7CisgICAgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbUlpZFs4XTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTdGF0dXMgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGhyZWFkU3RhdHVzVGx2OiBwdWJsaWMgVGhyZWFkVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1N0YXR1cyk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRocmVhZFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGhyZWFkVGx2KTsgfQorCisgICAgLyoqCisgICAgICogU3RhdHVzIHZhbHVlcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gU3RhdHVzCisgICAgeworICAgICAgICBrU3VjY2VzcyAgICAgICAgICAgID0gMCwgIC8vLzwgU3VjY2Vzcy4KKyAgICAgICAga05vQWRkcmVzc0F2YWlsYWJsZSA9IDEsICAvLy88IE5vIGFkZHJlc3MgYXZhaWxhYmxlLgorICAgICAgICBrVG9vRmV3Um91dGVycyAgICAgID0gMiwgIC8vLzwgQWRkcmVzcyBTb2xpY2l0IGR1ZSB0byB0b28gZmV3IHJvdXRlcnMuCisgICAgICAgIGtIYXZlQ2hpbGRJZFJlcXVlc3QgPSAzLCAgLy8vPCBBZGRyZXNzIFNvbGljaXQgZHVlIHRvIGNoaWxkIElEIHJlcXVlc3QuCisgICAgICAgIGtQYXJlbnRQYXJ0aXRpb25DaGFuZ2UgPSA0LCAgLy8vPCBBZGRyZXNzIFNvbGljaXQgZHVlIHRvIHBhcmVudCBwYXJ0aXRpb24gY2hhbmdlCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFN0YXR1cyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBTdGF0dXMgR2V0U3RhdHVzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0YXR1cz4obVN0YXR1cyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFN0YXR1cyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGF0dXMgIFRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN0YXR1cyhTdGF0dXMgYVN0YXR1cykgeyBtU3RhdHVzID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVN0YXR1cyk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1TdGF0dXM7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVGltZSBTaW5jZSBMYXN0IFRyYW5zYWN0aW9uIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFRocmVhZExhc3RUcmFuc2FjdGlvblRpbWVUbHY6IHB1YmxpYyBUaHJlYWRUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrTGFzdFRyYW5zYWN0aW9uVGltZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRocmVhZFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGhyZWFkVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGFzdCBUcmFuc2FjdGlvbiBUaW1lIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExhc3QgVHJhbnNhY3Rpb24gVGltZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtVGltZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIExhc3QgVHJhbnNhY3Rpb24gVGltZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaW1lICBUaGUgTGFzdCBUcmFuc2FjdGlvbiBUaW1lIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUaW1lKHVpbnQzMl90IGFUaW1lKSB7IG1UaW1lID0gSG9zdFN3YXAzMihhVGltZSk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtVGltZTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFJvdXRlciBNYXNrIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworY2xhc3MgVGhyZWFkUm91dGVyTWFza1RsdjogcHVibGljIFRocmVhZFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtSb3V0ZXJNYXNrKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGhyZWFkVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUaHJlYWRUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0SWRTZXF1ZW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBtSWRTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VxdWVuY2UgIFRoZSBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWRTZXF1ZW5jZSh1aW50OF90IGFTZXF1ZW5jZSkgeyBtSWRTZXF1ZW5jZSA9IGFTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBBc3NpZ25lZCBSb3V0ZXIgSUQgTWFzay4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJBc3NpZ25lZFJvdXRlcklkTWFzayh2b2lkKSB7IG1lbXNldChtQXNzaWduZWRSb3V0ZXJJZE1hc2ssIDAsIHNpemVvZihtQXNzaWduZWRSb3V0ZXJJZE1hc2spKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGEgZ2l2ZW4gUm91dGVyIElEIGlzIHNldCBpbiB0aGUgQXNzaWduZWQgUm91dGVyIElEIE1hc2suCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgZ2l2ZW4gUm91dGVyIElEIGlzIHNldCBpbiB0aGUgQXNzaWduZWQgUm91dGVyIElEIE1hc2suCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIGdpdmVuIFJvdXRlciBJRCBpcyBub3Qgc2V0IGluIHRoZSBBc3NpZ25lZCBSb3V0ZXIgSUQgTWFzay4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNBc3NpZ25lZFJvdXRlcklkU2V0KHVpbnQ4X3QgYVJvdXRlcklkKSBjb25zdCB7CisgICAgICAgIHJldHVybiAobUFzc2lnbmVkUm91dGVySWRNYXNrW2FSb3V0ZXJJZCAvIDhdICYgKDB4ODAgPj4gKGFSb3V0ZXJJZCAlIDgpKSkgIT0gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIEFzc2lnbmVkIFJvdXRlciBJRCBNYXNrLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRBc3NpZ25lZFJvdXRlcklkKHVpbnQ4X3QgYVJvdXRlcklkKSB7IG1Bc3NpZ25lZFJvdXRlcklkTWFza1thUm91dGVySWQgLyA4XSB8PSAweDgwID4+IChhUm91dGVySWQgJSA4KTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbUlkU2VxdWVuY2U7CisgICAgdWludDhfdCBtQXNzaWduZWRSb3V0ZXJJZE1hc2tbQml0VmVjdG9yQnl0ZXMoTWxlOjprTWF4Um91dGVySWQgKyAxKV07Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBUaHJlYWQgTmV0d29yayBEYXRhIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFRocmVhZE5ldHdvcmtEYXRhVGx2OiBwdWJsaWMgVGhyZWFkVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1RocmVhZE5ldHdvcmtEYXRhKTsgU2V0TGVuZ3RoKDApOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBvdmVycmlkZXMgc2FtZSBtZXRob2Qgb2YgdGhlIGJhc2UgY2xhc3MKKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEgVExWcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhIFRMVnMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90ICpHZXRUbHZzKHZvaWQpIHsgcmV0dXJuIG1UbHZzOyB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heFNpemUgPSAyNTUsCisgICAgfTsKKworICAgIHVpbnQ4X3QgbVRsdnNba01heFNpemVdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFRIUkVBRF9UTFZTX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCBiL3NyYy9jb3JlL3RocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTBmNDNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgVGhyZWFkIFVSSXMuCisgKi8KKworI2lmbmRlZiBUSFJFQURfVVJJU19IUFBfCisjZGVmaW5lIFRIUkVBRF9VUklTX0hQUF8KKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBUaGUgVVJJIFBhdGggZm9yIEFkZHJlc3MgUXVlcnkuCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0FERFJFU1NfUVVFUlkgICAgICAgICAgImEvYXEiCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9BRERSRVNTX05PVElGWQorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgQWRkcmVzcyBOb3RpZnkuCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0FERFJFU1NfTk9USUZZICAgICAgICAgImEvYW4iCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9BRERSRVNTX0VSUk9SCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBBZGRyZXNzIEVycm9yLgorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9BRERSRVNTX0VSUk9SICAgICAgICAgICJhL2FlIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfQUREUkVTU19SRUxFQVNFCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBBZGRyZXNzIFJlbGVhc2UuCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0FERFJFU1NfUkVMRUFTRSAgICAgICAgImEvYXIiCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9BRERSRVNTX1NPTElDSVQKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIEFkZHJlc3MgU29saWNpdC4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfQUREUkVTU19TT0xJQ0lUICAgICAgICAiYS9hcyIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0FDVElWRV9HRVQKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIE1HTVRfQUNUSVZFX0dFVAorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9BQ1RJVkVfR0VUICAgICAgICAgICAgICJjL2FnIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfQUNUSVZFX1NFVAorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgTUdNVF9BQ1RJVkVfU0VUCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0FDVElWRV9TRVQgICAgICAgICAgICAgImMvYXMiCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9EQVRBU0VUX0NIQU5HRUQKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIE1HTVRfREFUQVNFVF9DSEFOR0VECisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0RBVEFTRVRfQ0hBTkdFRCAgICAgICAgImMvZGMiCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9FTkVSR1lfU0NBTgorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgRW5lcmd5IFNjYW4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfRU5FUkdZX1NDQU4gICAgICAgICAgICAiYy9lcyIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0VORVJHWV9SRVBPUlQKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIEVuZXJneSBSZXBvcnQKKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfRU5FUkdZX1JFUE9SVCAgICAgICAgICAiYy9lciIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX1BFTkRJTkdfR0VUCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBNR01UX1BFTkRJTkdfR0VUCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX1BFTkRJTkdfR0VUICAgICAgICAgICAgImMvcGciCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9QRU5ESU5HX1NFVAorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgTUdNVF9QRU5ESU5HX1NFVAorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9QRU5ESU5HX1NFVCAgICAgICAgICAgICJjL3BzIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfU0VSVkVSX0RBVEEKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIFNlcnZlciBEYXRhIFJlZ2lzdHJhdGlvbi4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfU0VSVkVSX0RBVEEgICAgICAgICAgICAiYS9zZCIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0FOTk9VTkNFX0JFR0lOCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBBbm5vdW5jZSBCZWdpbi4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfQU5OT1VOQ0VfQkVHSU4gICAgICAgICAiYy9hYiIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX1JFTEFZX1JYCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBSZWxheSBSWC4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfUkVMQVlfUlggICAgICAgICAgICAgICAiYy9yeCIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX1JFTEFZX1RYCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBSZWxheSBUWC4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfUkVMQVlfVFggICAgICAgICAgICAgICAiYy90eCIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0pPSU5FUl9GSU5BTElaRQorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgSm9pbmVyIEZpbmFsaXplCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0pPSU5FUl9GSU5BTElaRSAgICAgICAgImMvamYiCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9KT0lORVJfRU5UUlVTVAorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgSm9pbmVyIEVudHJ1c3QKKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfSk9JTkVSX0VOVFJVU1QgICAgICAgICAiYy9qZSIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0xFQURFUl9QRVRJVElPTgorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgTGVhZGVyIFBldGl0aW9uCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0xFQURFUl9QRVRJVElPTiAgICAgICAgImMvbHAiCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9MRUFERVJfS0VFUF9BTElWRQorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgTGVhZGVyIEtlZXAgQWxpdmUKKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfTEVBREVSX0tFRVBfQUxJVkUgICAgICAiYy9sYSIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX1BBTklEX0NPTkZMSUNUCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBQQU4gSUQgQ29uZmxpY3QKKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfUEFOSURfQ09ORkxJQ1QgICAgICAgICAiYy9wYyIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX1BBTklEX1FVRVJZCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBQQU4gSUQgUXVlcnkKKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfUEFOSURfUVVFUlkgICAgICAgICAgICAiYy9wcSIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0NPTU1JU1NJT05FUl9HRVQKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIE1HTVRfQ09NTUlTU0lPTkVSX0dFVAorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9DT01NSVNTSU9ORVJfR0VUICAgICAgICJjL2NnIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfQ09NTUlTU0lPTkVSX1NFVAorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgTUdNVF9DT01NSVNTSU9ORVJfU0VUCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0NPTU1JU1NJT05FUl9TRVQgICAgICAgImMvY3MiCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9ESUFHTk9TVElDX0dFVF9SRVFVRVNUCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBOZXR3b3JrIERpYWdub3N0aWMgR2V0IFJlcXVlc3QuCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0RJQUdOT1NUSUNfR0VUX1JFUVVFU1QgImQvZGciCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9ESUFHTk9TVElDX0dFVF9RVUVSWQorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgTmV0d29yayBEaWFnbm9zdGljIEdldCBRdWVyeS4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfRElBR05PU1RJQ19HRVRfUVVFUlkgICAiZC9kcSIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0RJQUdOT1NUSUNfR0VUX0FOU1dFUgorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgTmV0d29yayBEaWFnbm9zdGljIEdldCBBbnN3ZXIuCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0RJQUdOT1NUSUNfR0VUX0FOU1dFUiAgImQvZGEiCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9ESUFHX1JTVAorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgTmV0d29yayBEaWFnbm9zdGljIFJlc2V0LgorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9ESUFHTk9TVElDX1JFU0VUICAgICAgICJkL2RyIgorCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBUSFJFQURfVVJJU19IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvdG1mX3Byb3h5LmNwcCBiL3NyYy9jb3JlL3RocmVhZC90bWZfcHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOTNiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvdG1mX3Byb3h5LmNwcApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgVE1GIHByb3h5LgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgInRtZl9wcm94eS50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidG1mX3Byb3h5LmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAiCisKKyNpZiBPUEVOVEhSRUFEX0ZURCAmJiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkKKworbmFtZXNwYWNlIG90IHsKKworVG1mUHJveHk6OlRtZlByb3h5KGNvbnN0IElwNjo6QWRkcmVzcyAmYU1lc2hMb2NhbDE2LCBDb2FwOjpDb2FwICZhQ29hcCk6CisgICAgbVJlbGF5UmVjZWl2ZShPVF9VUklfUEFUSF9SRUxBWV9SWCwgJlRtZlByb3h5OjpIYW5kbGVSZWxheVJlY2VpdmUsIHRoaXMpLAorICAgIG1TdHJlYW1IYW5kbGVyKE5VTEwpLAorICAgIG1Db250ZXh0KE5VTEwpLAorICAgIG1NZXNoTG9jYWwxNihhTWVzaExvY2FsMTYpLAorICAgIG1Db2FwKGFDb2FwKQoreworfQorCitvdEVycm9yIFRtZlByb3h5OjpTdGFydChvdFRtZlByb3h5U3RyZWFtSGFuZGxlciBhU3RyZWFtSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoIW1TdHJlYW1IYW5kbGVyLCBlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworCisgICAgbUNvYXAuQWRkUmVzb3VyY2UobVJlbGF5UmVjZWl2ZSk7CisgICAgbVN0cmVhbUhhbmRsZXIgPSBhU3RyZWFtSGFuZGxlcjsKKyAgICBtQ29udGV4dCA9IGFDb250ZXh0OworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBUbWZQcm94eTo6U3RvcCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG1TdHJlYW1IYW5kbGVyICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisKKyAgICBtQ29hcC5SZW1vdmVSZXNvdXJjZShtUmVsYXlSZWNlaXZlKTsKKworICAgIG1TdHJlYW1IYW5kbGVyID0gTlVMTDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgVG1mUHJveHk6OklzRW5hYmxlZCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtU3RyZWFtSGFuZGxlciAhPSBOVUxMOworfQorCit2b2lkIFRtZlByb3h5OjpIYW5kbGVSZWxheVJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8VG1mUHJveHkgKj4oYUNvbnRleHQpLT5EZWxpdmVyTWVzc2FnZSgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBUbWZQcm94eTo6SGFuZGxlUmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KQoreworICAgIFZlcmlmeU9yRXhpdChhUmVzdWx0ID09IE9UX0VSUk9SX05PTkUpOworCisgICAgc3RhdGljX2Nhc3Q8VG1mUHJveHkgKj4oYUNvbnRleHQpLT5EZWxpdmVyTWVzc2FnZSgqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7CitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBUbWZQcm94eTo6RGVsaXZlck1lc3NhZ2UoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MTZfdCBybG9jOworICAgIHVpbnQxNl90IHBvcnQ7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQobVN0cmVhbUhhbmRsZXIgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IGFNZXNzYWdlLkNsb25lKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgbWVzc2FnZS0+UmVtb3ZlSGVhZGVyKG1lc3NhZ2UtPkdldE9mZnNldCgpIC0gYUhlYWRlci5HZXRMZW5ndGgoKSk7CisKKyAgICBybG9jID0gSG9zdFN3YXAxNihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSk7CisgICAgcG9ydCA9IGFNZXNzYWdlSW5mby5HZXRQZWVyUG9ydCgpOworICAgIG1TdHJlYW1IYW5kbGVyKG1lc3NhZ2UsIHJsb2MsIHBvcnQsIG1Db250ZXh0KTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9Cit9CisKK290RXJyb3IgVG1mUHJveHk6OlNlbmQoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFMb2NhdG9yLCB1aW50MTZfdCBhUG9ydCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgVmVyaWZ5T3JFeGl0KG1TdHJlYW1IYW5kbGVyICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihtTWVzaExvY2FsMTYpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKG1NZXNoTG9jYWwxNik7CisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSA9IEhvc3RTd2FwMTYoYUxvY2F0b3IpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGFQb3J0KTsKKworICAgIGlmIChhUG9ydCA9PSBrQ29hcFVkcFBvcnQpCisgICAgeworICAgICAgICAvLyB0aGlzIGlzIHJlcXVlc3QgdG8gc2VydmVyLCBzZW5kIHdpdGggY2xpZW50CisgICAgICAgIGVycm9yID0gbUNvYXAuU2VuZE1lc3NhZ2UoYU1lc3NhZ2UsIG1lc3NhZ2VJbmZvLCBUbWZQcm94eTo6SGFuZGxlUmVzcG9uc2UsIHRoaXMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IG1Db2FwLlNlbmRNZXNzYWdlKGFNZXNzYWdlLCBtZXNzYWdlSW5mbyk7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBhTWVzc2FnZS5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRlREICYmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL3RtZl9wcm94eS5ocHAgYi9zcmMvY29yZS90aHJlYWQvdG1mX3Byb3h5LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRmMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL3RtZl9wcm94eS5ocHAKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBUTUYgcHJveHkuCisgKi8KKworI2lmbmRlZiBUTUZfUFJPWFlfSFBQXworI2RlZmluZSBUTUZfUFJPWFlfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90bWZfcHJveHkuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb2FwL2NvYXAuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUbWZQcm94eQoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIFRNRiBwcm94eS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhTWVzaExvY2FsMTYgICAgQSByZWZlcmVuY2UgdG8gdGhlIE1lc2ggTG9jYWwgUm91dGluZyBMb2NhdG9yLgorICAgICAqIEBwYXJhbVtpbl0gICBhQ29hcCAgICAgICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIE1hbmFnZW1lbnQgQ29BUCBTZXJ2aWNlLgorICAgICAqCisgICAgICovCisgICAgVG1mUHJveHkoY29uc3QgSXA2OjpBZGRyZXNzICZhTWVzaExvY2FsMTYsIENvYXA6OkNvYXAgJmFDb2FwKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgdGhlIFRNRiBwcm94eSBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIHNlcnZpY2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICAgICAgICAgVGhlIHNlcnZpY2UgYWxyZWFkeSBzdGFydGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdGFydChvdFRtZlByb3h5U3RyZWFtSGFuZGxlciBhU3RyZWFtSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGlzYWJsZXMgdGhlIFRNRiBwcm94eSBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHN0b3BwZWQgdGhlIFRNRiBwcm94eSBzZXJ2aWNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgICAgICAgIFRoZSBzZXJ2aWNlIGFscmVhZHkgc3RvcHBlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RvcCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIHRoZSBtZXNzYWdlIGludG8gdGhlIHRocmVhZCBuZXR3b3JrLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIHRvIHNlbmQuCisgICAgICogQHBhcmFtW2luXSAgIGFMb2NhdG9yICAgIFRoZSBkZXN0aW5hdGlvbidzIFJMT0MxNiBvciBBTE9DMTYuCisgICAgICogQHBhcmFtW2luXSAgIGFQb3J0ICAgICAgIFRoZSBkZXN0aW5hdGlvbiBwb3J0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZW5kIHRoZSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBCb3JkZXIgYWdlbnQgcHJveHkgaXMgbm90IHN0YXJ0ZWQuCisgICAgICoKKyAgICAgKiBAd2FybmluZyBObyBtYXR0ZXIgdGhlIGNhbGwgc3VjY2VzcyBvciBmYWlsLCB0aGUgbWVzc2FnZSBpcyBmcmVlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZChNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYUxvY2F0b3IsIHVpbnQxNl90IGFQb3J0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVE1GIHByb3h5IHNlcnZpY2UgaXMgZW5hYmxlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgIFRSVUUgICAgSWYgdGhlIHNlcnZpY2UgaXMgZW5hYmxlZC4KKyAgICAgKiBAcmV0dmFsICBGQUxTRSAgIElmIHRoZSBzZXJ2aWNlIGlzIGRpc2FibGVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0VuYWJsZWQodm9pZCkgY29uc3Q7CisKK3ByaXZhdGU6CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZWxheVJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpOworCisgICAgdm9pZCBEZWxpdmVyTWVzc2FnZShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisKKyAgICBDb2FwOjpSZXNvdXJjZSBtUmVsYXlSZWNlaXZlOworICAgIG90VG1mUHJveHlTdHJlYW1IYW5kbGVyIG1TdHJlYW1IYW5kbGVyOworICAgIHZvaWQgKm1Db250ZXh0OworCisgICAgY29uc3QgSXA2OjpBZGRyZXNzICZtTWVzaExvY2FsMTY7CisgICAgQ29hcDo6Q29hcCAmbUNvYXA7Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBUTUZfUFJPWFlfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL3RvcG9sb2d5LmNwcCBiL3NyYy9jb3JlL3RocmVhZC90b3BvbG9neS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU4YjNiNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC90b3BvbG9neS5jcHAKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1haW50YWluaW5nIFRocmVhZCBuZXR3b3JrIHRvcG9sb2dpZXMuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAidG9wb2xvZ3kudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInRvcG9sb2d5LmhwcCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKwordm9pZCBOZWlnaGJvcjo6R2VuZXJhdGVDaGFsbGVuZ2Uodm9pZCkKK3sKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBzaXplb2YobVZhbGlkUGVuZGluZy5tUGVuZGluZy5tQ2hhbGxlbmdlKTsgaSsrKQorICAgIHsKKyAgICAgICAgbVZhbGlkUGVuZGluZy5tUGVuZGluZy5tQ2hhbGxlbmdlW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgIH0KK30KKworb3RFcnJvciBDaGlsZDo6RmluZElwNkFkZHJlc3MoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcywgdWludDhfdCAqYUluZGV4KSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisKKyAgICBmb3IgKHVpbnQ4X3QgaW5kZXggPSAwOyBpbmRleCA8IGtNYXhJcDZBZGRyZXNzUGVyQ2hpbGQ7IGluZGV4KyspCisgICAgeworICAgICAgICBpZiAobUlwNkFkZHJlc3NbaW5kZXhdID09IGFBZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYUluZGV4ICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmFJbmRleCA9IGluZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDaGlsZDo6UmVtb3ZlSXA2QWRkcmVzcyh1aW50OF90IGFJbmRleCkKK3sKKyAgICBWZXJpZnlPckV4aXQoYUluZGV4IDwga01heElwNkFkZHJlc3NQZXJDaGlsZCk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IGFJbmRleDsgaSA8IGtNYXhJcDZBZGRyZXNzUGVyQ2hpbGQgLSAxOyBpKyspCisgICAgeworICAgICAgICBtSXA2QWRkcmVzc1tpXSA9IG1JcDZBZGRyZXNzW2kgKyAxXTsKKyAgICB9CisKKyAgICBtZW1zZXQoJm1JcDZBZGRyZXNzW2tNYXhJcDZBZGRyZXNzUGVyQ2hpbGQgLSAxXSwgMCwgc2l6ZW9mKElwNjo6QWRkcmVzcykpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBDaGlsZDo6R2VuZXJhdGVDaGFsbGVuZ2Uodm9pZCkKK3sKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBzaXplb2YobUF0dGFjaENoYWxsZW5nZSk7IGkrKykKKyAgICB7CisgICAgICAgIG1BdHRhY2hDaGFsbGVuZ2VbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihvdFBsYXRSYW5kb21HZXQoKSk7CisgICAgfQorfQorCitjb25zdCBNYWM6OkFkZHJlc3MgJkNoaWxkOjpHZXRNYWNBZGRyZXNzKE1hYzo6QWRkcmVzcyAmYU1hY0FkZHJlc3MpIGNvbnN0Cit7CisgICAgaWYgKG1Vc2VTaG9ydEFkZHJlc3MpCisgICAgeworICAgICAgICBhTWFjQWRkcmVzcy5tU2hvcnRBZGRyZXNzID0gR2V0UmxvYzE2KCk7CisgICAgICAgIGFNYWNBZGRyZXNzLm1MZW5ndGggPSBzaXplb2YoYU1hY0FkZHJlc3MubVNob3J0QWRkcmVzcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFNYWNBZGRyZXNzLm1FeHRBZGRyZXNzID0gR2V0RXh0QWRkcmVzcygpOworICAgICAgICBhTWFjQWRkcmVzcy5tTGVuZ3RoID0gc2l6ZW9mKGFNYWNBZGRyZXNzLm1FeHRBZGRyZXNzKTsKKyAgICB9CisKKyAgICByZXR1cm4gYU1hY0FkZHJlc3M7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL3RvcG9sb2d5LmhwcCBiL3NyYy9jb3JlL3RocmVhZC90b3BvbG9neS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA3ZDdkMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC90b3BvbG9neS5ocHAKQEAgLTAsMCArMSw3OTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYWludGFpbmluZyBUaHJlYWQgbmV0d29yayB0b3BvbG9naWVzLgorICovCisKKyNpZm5kZWYgVE9QT0xPR1lfSFBQXworI2RlZmluZSBUT1BPTE9HWV9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbGlua19xdWFsaXR5LmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3RsdnMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFRocmVhZCBuZWlnaGJvci4KKyAqCisgKi8KK2NsYXNzIE5laWdoYm9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogTmVpZ2hib3IgbGluayBzdGF0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBrU3RhdGVJbnZhbGlkLCAgICAgICAgICAgICAgICAgICAvLy88IE5laWdoYm9yIGxpbmsgaXMgaW52YWxpZAorICAgICAgICBrU3RhdGVSZXN0b3JlZCwgICAgICAgICAgICAgICAgICAvLy88IE5laWdoYm9yIGlzIHJlc3RvcmVkIGZyb20gbm9uLXZvbGF0aWxlIG1lbW9yeQorICAgICAgICBrU3RhdGVQYXJlbnRSZXF1ZXN0LCAgICAgICAgICAgICAvLy88IFJlY2VpdmVkIGFuIE1MRSBQYXJlbnQgUmVxdWVzdCBtZXNzYWdlCisgICAgICAgIGtTdGF0ZUNoaWxkSWRSZXF1ZXN0LCAgICAgICAgICAgIC8vLzwgUmVjZWl2ZWQgYW4gTUxFIENoaWxkIElEIFJlcXVlc3QgbWVzc2FnZQorICAgICAgICBrU3RhdGVMaW5rUmVxdWVzdCwgICAgICAgICAgICAgICAvLy88IFNlbnQgYW4gTUxFIExpbmsgUmVxdWVzdCBtZXNzYWdlCisgICAgICAgIGtTdGF0ZUNoaWxkVXBkYXRlUmVxdWVzdCwgICAgICAgIC8vLzwgU2VudCBhbiBNTEUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgbWVzc2FnZSAodHJ5aW5nIHRvIHJlc3RvcmUgdGhlIGNoaWxkKQorICAgICAgICBrU3RhdGVWYWxpZCwgICAgICAgICAgICAgICAgICAgICAvLy88IExpbmsgaXMgdmFsaWQKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN0YXRlLgorICAgICAqCisgICAgICovCisgICAgU3RhdGUgR2V0U3RhdGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3RhdGU+KG1TdGF0ZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGN1cnJlbnQgc3RhdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU3RhdGUgIFRoZSBzdGF0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U3RhdGUoU3RhdGUgYVN0YXRlKSB7IG1TdGF0ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFTdGF0ZSk7IH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBuZWlnaGJvci9jaGlsZCBpcyBiZWluZyByZXN0b3JlZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgdGhlIG5laWdoYm9yIGlzIGJlaW5nIHJlc3RvcmVkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzU3RhdGVSZXN0b3Jpbmcodm9pZCkgY29uc3QgeyByZXR1cm4gKG1TdGF0ZSA9PSBrU3RhdGVSZXN0b3JlZCkgfHwgKG1TdGF0ZSA9PSBrU3RhdGVDaGlsZFVwZGF0ZVJlcXVlc3QpOyB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgbmVpZ2hib3IvY2hpbGQgaXMgaW4gdmFsaWQgc3RhdGUgb3IgaWYgaXQgaXMgYmVpbmcgcmVzdG9yZWQuCisgICAgICogV2hlbiBpbiB0aGVzZSBzdGF0ZXMgbWVzc2FnZXMgY2FuIGJlIHNlbnQgdG8gYW5kL29yIHJlY2VpdmVkIGZyb20gdGhlIG5laWdoYm9yL2NoaWxkLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiB0aGUgbmVpZ2hib3IgaXMgaW4gdmFsaWQsIHJlc3RvcmVkLCBvciBiZWluZyByZXN0b3JlZCBzdGF0ZXMsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNTdGF0ZVZhbGlkT3JSZXN0b3Jpbmcodm9pZCkgY29uc3QgeyByZXR1cm4gKG1TdGF0ZSA9PSBrU3RhdGVWYWxpZCkgfHwgSXNTdGF0ZVJlc3RvcmluZygpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBkZXZpY2UgbW9kZSBmbGFncy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBkZXZpY2UgbW9kZSBmbGFncy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0RGV2aWNlTW9kZSh2b2lkKSBjb25zdCB7IHJldHVybiBtTW9kZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgZGV2aWNlIG1vZGUgZmxhZ3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTW9kZSAgVGhlIGRldmljZSBtb2RlIGZsYWdzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREZXZpY2VNb2RlKHVpbnQ4X3QgYU1vZGUpIHsgbU1vZGUgPSBhTW9kZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgaXMgcngtb24td2hlbi1pZGxlLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiByeC1vbi13aGVuLWlkbGUsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNSeE9uV2hlbklkbGUodm9pZCkgY29uc3QgeyByZXR1cm4gKG1Nb2RlICYgTWxlOjpNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSkgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgaXMgYSBGdWxsIFRocmVhZCBEZXZpY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFIGlmIGEgRnVsbCBUaHJlYWQgRGV2aWNlLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRnVsbFRocmVhZERldmljZSh2b2lkKSBjb25zdCB7IHJldHVybiAobU1vZGUgJiBNbGU6Ok1vZGVUbHY6OmtNb2RlRkZEKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGRldmljZSB1c2VzIHNlY3VyZSBJRUVFIDgwMi4xNS40IERhdGEgUmVxdWVzdCBtZXNzYWdlcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgdXNpbmcgc2VjdXJlIElFRUUgODAyLjE1LjQgRGF0YSBSZXF1ZXN0IG1lc3NhZ2VzLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzU2VjdXJlRGF0YVJlcXVlc3Qodm9pZCkgY29uc3QgeyByZXR1cm4gKG1Nb2RlICYgTWxlOjpNb2RlVGx2OjprTW9kZVNlY3VyZURhdGFSZXF1ZXN0KSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGRldmljZSByZXF1ZXN0cyBGdWxsIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgcmVxdWVzdHMgRnVsbCBOZXR3b3JrIERhdGEsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNGdWxsTmV0d29ya0RhdGEodm9pZCkgY29uc3QgeyByZXR1cm4gKG1Nb2RlICYgTWxlOjpNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSkgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBhbGwgYnl0ZXMgb2YgdGhlIEV4dGVuZGVkIEFkZHJlc3MgdG8gemVyby4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJFeHRBZGRyZXNzKHZvaWQpIHsgbWVtc2V0KCZtTWFjQWRkciwgMCwgc2l6ZW9mKG1NYWNBZGRyKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEV4dGVuZGVkIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIE1hYzo6RXh0QWRkcmVzcyAmR2V0RXh0QWRkcmVzcyh2b2lkKSB7IHJldHVybiBtTWFjQWRkcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgTWFjOjpFeHRBZGRyZXNzICZHZXRFeHRBZGRyZXNzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NYWNBZGRyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIFRoZSBFeHRlbmRlZCBBZGRyZXNzIHZhbHVlIHRvIHNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RXh0QWRkcmVzcyhjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFBZGRyZXNzKSB7IG1NYWNBZGRyID0gYUFkZHJlc3M7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIGtleSBzZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBrZXkgc2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRLZXlTZXF1ZW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBtS2V5U2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGtleSBzZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJtYVtpbl0gIGFLZXlTZXF1ZW5jZSAgVGhlIGtleSBzZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0S2V5U2VxdWVuY2UodWludDMyX3QgYUtleVNlcXVlbmNlKSB7IG1LZXlTZXF1ZW5jZSA9IGFLZXlTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbGFzdCBoZWFyZCB0aW1lLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGxhc3QgaGVhcmQgdGltZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldExhc3RIZWFyZCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGFzdEhlYXJkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBsYXN0IGhlYXJkIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGFzdEhlYXJkICBUaGUgbGFzdCBoZWFyZCB0aW1lLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMYXN0SGVhcmQodWludDMyX3QgYUxhc3RIZWFyZCkgeyBtTGFzdEhlYXJkID0gYUxhc3RIZWFyZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgbGluayBmcmFtZSBjb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGxpbmsgZnJhbWUgY291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldExpbmtGcmFtZUNvdW50ZXIodm9pZCkgY29uc3QgeyByZXR1cm4gbVZhbGlkUGVuZGluZy5tVmFsaWQubUxpbmtGcmFtZUNvdW50ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGxpbmsgZnJhbWUgY291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZUNvdW50ZXIgIFRoZSBsaW5rIGZyYW1lIGNvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExpbmtGcmFtZUNvdW50ZXIodWludDMyX3QgYUZyYW1lQ291bnRlcikgeyBtVmFsaWRQZW5kaW5nLm1WYWxpZC5tTGlua0ZyYW1lQ291bnRlciA9IGFGcmFtZUNvdW50ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIE1MRSBmcmFtZSBjb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1MRSBmcmFtZSBjb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0TWxlRnJhbWVDb3VudGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1WYWxpZFBlbmRpbmcubVZhbGlkLm1NbGVGcmFtZUNvdW50ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1MRSBmcmFtZSBjb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lQ291bnRlciAgVGhlIE1MRSBmcmFtZSBjb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNbGVGcmFtZUNvdW50ZXIodWludDMyX3QgYUZyYW1lQ291bnRlcikgeyBtVmFsaWRQZW5kaW5nLm1WYWxpZC5tTWxlRnJhbWVDb3VudGVyID0gYUZyYW1lQ291bnRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFJsb2MxNih2b2lkKSBjb25zdCB7IHJldHVybiBtVmFsaWRQZW5kaW5nLm1WYWxpZC5tUmxvYzE2OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSbG9jMTYodWludDE2X3QgYVJsb2MxNikgeyBtVmFsaWRQZW5kaW5nLm1WYWxpZC5tUmxvYzE2ID0gYVJsb2MxNjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgYW4gSUVFRSA4MDIuMTUuNCBEYXRhIFJlcXVlc3QgbWVzc2FnZSB3YXMgcmVjZWl2ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFIGlmIGFuIElFRUUgODAyLjE1LjQgRGF0YSBSZXF1ZXN0IG1lc3NhZ2Ugd2FzIHJlY2VpdmVkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRGF0YVJlcXVlc3RQZW5kaW5nKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1EYXRhUmVxdWVzdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgaW5kaWNhdG9yIGZvciB3aGV0aGVyIGFuIElFRUUgODAyLjE1LjQgRGF0YSBSZXF1ZXN0IG1lc3NhZ2Ugd2FzIHJlY2VpdmVkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBlbmRpbmcgIFRSVUUgaWYgYW4gSUVFRSA4MDIuMTUuNCBEYXRhIFJlcXVlc3QgbWVzc2FnZSB3YXMgcmVjZWl2ZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RGF0YVJlcXVlc3RQZW5kaW5nKGJvb2wgYVBlbmRpbmcpIHsgbURhdGFSZXF1ZXN0ID0gYVBlbmRpbmc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBsaW5rIGZhaWx1cmVzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBsaW5rIGZhaWx1cmVzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rRmFpbHVyZXModm9pZCkgY29uc3QgeyByZXR1cm4gbUxpbmtGYWlsdXJlczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5jcmVtZW50cyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGxpbmsgZmFpbHVyZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluY3JlbWVudExpbmtGYWlsdXJlcyh2b2lkKSB7IG1MaW5rRmFpbHVyZXMrKzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVzZXRzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgbGluayBmYWlsdXJlcyB0byB6ZXJvLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZXNldExpbmtGYWlsdXJlcyh2b2lkKSB7IG1MaW5rRmFpbHVyZXMgPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBMaW5rUXVhbGl0eUluZm8gb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExpbmtRdWFsaXR5SW5mbyBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBMaW5rUXVhbGl0eUluZm8gJkdldExpbmtJbmZvKHZvaWQpIHsgcmV0dXJuIG1MaW5rSW5mbzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbmV3IGNoYWxsZW5nZSB2YWx1ZSBmb3IgTUxFIExpbmsgUmVxdWVzdC9SZXNwb25zZSBleGNoYW5nZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEdlbmVyYXRlQ2hhbGxlbmdlKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBjaGFsbGVuZ2UgdmFsdWUgZm9yIE1MRSBMaW5rIFJlcXVlc3QvUmVzcG9uc2UgZXhjaGFuZ2VzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgY2hhbGxlbmdlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0Q2hhbGxlbmdlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1WYWxpZFBlbmRpbmcubVBlbmRpbmcubUNoYWxsZW5nZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2l6ZSAoYnlldHMpIG9mIHRoZSBjaGFsbGVuZ2UgdmFsdWUgZm9yIE1MRSBMaW5rIFJlcXVlc3QvUmVzcG9uc2UgZXhjaGFuZ2VzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHNpemUgKGJ5ZXRzKSBvZiB0aGUgY2hhbGxlbmdlIHZhbHVlIGZvciBNTEUgTGluayBSZXF1ZXN0L1Jlc3BvbnNlIGV4Y2hhbmdlcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Q2hhbGxlbmdlU2l6ZSh2b2lkKSBjb25zdCB7IHJldHVybiBzaXplb2YobVZhbGlkUGVuZGluZy5tUGVuZGluZy5tQ2hhbGxlbmdlKTsgfQorCitwcml2YXRlOgorICAgIE1hYzo6RXh0QWRkcmVzcyBtTWFjQWRkcjsgICAgICAgICAgICAvLy88IFRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MKKyAgICB1aW50MzJfdCAgICAgICAgbUxhc3RIZWFyZDsgICAgICAgICAgLy8vPCBUaW1lIHdoZW4gbGFzdCBoZWFyZC4KKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IG1MaW5rRnJhbWVDb3VudGVyOyAgLy8vPCBUaGUgTGluayBGcmFtZSBDb3VudGVyCisgICAgICAgICAgICB1aW50MzJfdCBtTWxlRnJhbWVDb3VudGVyOyAgIC8vLzwgVGhlIE1MRSBGcmFtZSBDb3VudGVyCisgICAgICAgICAgICB1aW50MTZfdCBtUmxvYzE2OyAgICAgICAgICAgIC8vLzwgVGhlIFJMT0MxNgorICAgICAgICB9IG1WYWxpZDsKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgbUNoYWxsZW5nZVtNbGU6OkNoYWxsZW5nZVRsdjo6a01heFNpemVdOyAgLy8vPCBUaGUgY2hhbGxlbmdlIHZhbHVlCisgICAgICAgICAgICB1aW50OF90IG1DaGFsbGVuZ2VMZW5ndGg7ICAgIC8vLzwgVGhlIGNoYWxsZW5nZSBsZW5ndGgKKyAgICAgICAgfSBtUGVuZGluZzsKKyAgICB9IG1WYWxpZFBlbmRpbmc7CisKKyAgICB1aW50MzJfdCAgICAgICAgbUtleVNlcXVlbmNlOyAgICAgICAgLy8vPCBDdXJyZW50IGtleSBzZXF1ZW5jZQorICAgIHVpbnQ4X3QgICAgICAgICBtU3RhdGUgOiAzOyAgICAgICAgICAvLy88IFRoZSBsaW5rIHN0YXRlCisgICAgdWludDhfdCAgICAgICAgIG1Nb2RlIDogNDsgICAgICAgICAgIC8vLzwgVGhlIE1MRSBkZXZpY2UgbW9kZQorICAgIGJvb2wgICAgICAgICAgICBtRGF0YVJlcXVlc3QgOiAxOyAgICAvLy88IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhIERhdGEgUG9sbCB3YXMgcmVjZWl2ZWQKKyAgICB1aW50OF90ICAgICAgICAgbUxpbmtGYWlsdXJlczsgICAgICAgLy8vPCBDb25zZWN1dGl2ZSBsaW5rIGZhaWx1cmUgY291bnQKKyAgICBMaW5rUXVhbGl0eUluZm8gbUxpbmtJbmZvOyAgICAgICAgICAgLy8vPCBMaW5rIHF1YWxpdHkgaW5mbyAoY29udGFpbnMgYXZlcmFnZSBSU1MsIGxpbmsgbWFyZ2luIGFuZCBsaW5rIHF1YWxpdHkpCit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFRocmVhZCBDaGlsZC4KKyAqCisgKi8KK2NsYXNzIENoaWxkIDogcHVibGljIE5laWdoYm9yCit7CitwdWJsaWM6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heElwNkFkZHJlc3NQZXJDaGlsZCA9IE9QRU5USFJFQURfQ09ORklHX0lQX0FERFJTX1BFUl9DSElMRCwKKyAgICAgICAga01heFJlcXVlc3RUbHZzICAgICAgICA9IDUsCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgSVB2NiBhZGRyZXNzZXMgZm9yIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJJcDZBZGRyZXNzZXModm9pZCkgeyBtZW1zZXQobUlwNkFkZHJlc3MsIDAsIHNpemVvZihtSXA2QWRkcmVzcykpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBJUHY2IGFkZHJlc3MgYXQgaW5kZXggQHAgYUluZGV4LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluZGV4ICBUaGUgaW5kZXggaW50byB0aGUgSVB2NiBhZGRyZXNzIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBhZGRyZXNzIGVudHJ5IGF0IGluZGV4IEBwIGFJbmRleC4KKyAgICAgKgorICAgICAqLworICAgIElwNjo6QWRkcmVzcyAmR2V0SXA2QWRkcmVzcyh1aW50OF90IGFJbmRleCkgeyByZXR1cm4gbUlwNkFkZHJlc3NbYUluZGV4XTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VhcmNoZXMgZm9yIGEgZ2l2ZW4gSVB2NiBhZGRyZXNzIGluIHRoZSBjaGlsZCdzIElQdjYgYWRkcmVzcyBsaXN0IGFuZCBwcm92aWRlcyB0aGUgaW5kZXggb2YgdGhlCisgICAgICogYWRkcmVzcyBpbiB0aGUgbGlzdCBpZiBpdCBpcyBmb3VuZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICAgICAgICAgICBUaGUgSVB2NiBhZGRyZXNzIHRvIHNlYXJjaCBmb3IgaW4gdGhlIElQdjYgYWRkcmVzcyBsaXN0LgorICAgICAqIEBwYXJhbVtvdXRdIGFJbmRleCAgICAgICAgICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIHdoZXJlIHRoZSBpbmRleCBvZiBhZGRyZXNzIGlzIHByb3ZpZGVkIGlmIGFkZHJlc3MgaXMgZm91bmQgaW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3QuIEBwIGFJbmRleCBjYW4gYmUgc2V0IE5VTEwgaWYgaW5kZXggaXMgbm90IHJlcXVpcmVkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCB0aGUgYWRkcmVzcyBpbiBJUHY2IGFkZHJlc3MgbGlzdCBhbmQgdXBkYXRlZCBAcCBhSW5kZXguCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgICAgIENvdWxkIG5vdCBmaW5kIHRoZSBhZGRyZXNzIGluIHRoZSBsaXN0LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBGaW5kSXA2QWRkcmVzcyhjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzLCB1aW50OF90ICphSW5kZXgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyB0aGUgYWRkcmVzcyBhdCBpbmRleCBAcCBhSW5kZXguCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFJbmRleCAgIFRoZSBpbmRleCBpbnRvIHRoZSBJUHY2IGFkZHJlc3MgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVtb3ZlSXA2QWRkcmVzcyh1aW50OF90IGFJbmRleCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBjaGlsZCB0aW1lb3V0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGNoaWxkIHRpbWVvdXQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRUaW1lb3V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1UaW1lb3V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBjaGlsZCB0aW1lb3V0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVvdXQgIFRoZSBjaGlsZCB0aW1lb3V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUaW1lb3V0KHVpbnQzMl90IGFUaW1lb3V0KSB7IG1UaW1lb3V0ID0gYVRpbWVvdXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIG5ldHdvcmsgZGF0YSB2ZXJzaW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG5ldHdvcmsgZGF0YSB2ZXJzaW9uLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXROZXR3b3JrRGF0YVZlcnNpb24odm9pZCkgY29uc3QgeyByZXR1cm4gbU5ldHdvcmtEYXRhVmVyc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbmV0d29yayBkYXRhIHZlcnNpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVmVyc2lvbiAgVGhlIG5ldHdvcmsgZGF0YSB2ZXJzaW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXR3b3JrRGF0YVZlcnNpb24odWludDhfdCBhVmVyc2lvbikgeyBtTmV0d29ya0RhdGFWZXJzaW9uID0gYVZlcnNpb247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG5ldyBjaGFsbGVuZ2UgdmFsdWUgdG8gdXNlIGR1cmluZyBhIGNoaWxkIGF0dGFjaC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgR2VuZXJhdGVDaGFsbGVuZ2Uodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBjdXJyZW50IGNoYWxsZW5nZSB2YWx1ZSB1c2VkIGR1cmluZyBhdHRhY2guCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBjaGFsbGVuZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRDaGFsbGVuZ2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbUF0dGFjaENoYWxsZW5nZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgY2hhbGxlbmdlIHNpemUgKGJ5dGVzKSB1c2VkIGR1cmluZyBhdHRhY2guCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY2hhbGxlbmdlIHNpemUgKGJ5dGVzKS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Q2hhbGxlbmdlU2l6ZSh2b2lkKSBjb25zdCB7IHJldHVybiBzaXplb2YobUF0dGFjaENoYWxsZW5nZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIElFRUUgODAyLjE1LjQgRnJhbWUgQ291bnRlciB1c2VkIGR1cmluZyBpbmRpcmVjdCByZXRyYW5zbWlzc2lvbnMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUVFRSA4MDIuMTUuNCBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0SW5kaXJlY3RGcmFtZUNvdW50ZXIodm9pZCkgY29uc3QgeyByZXR1cm4gbUluZGlyZWN0RnJhbWVDb3VudGVyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJRUVFIDgwMi4xNS40IEZyYW1lIENvdW50ZXIgdG8gdXNlIGR1cmluZyBpbmRpcmVjdCByZXRyYW5zbWlzc2lvbnMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWVDb3VudGVyICBUaGUgSUVFRSA4MDIuMTUuNCBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJbmRpcmVjdEZyYW1lQ291bnRlcih1aW50MzJfdCBhRnJhbWVDb3VudGVyKSB7IG1JbmRpcmVjdEZyYW1lQ291bnRlciA9IGFGcmFtZUNvdW50ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIG1lc3NhZ2UgYnVmZmVyIHRvIHVzZSBmb3IgaW5kaXJlY3QgdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2UgKkdldEluZGlyZWN0TWVzc2FnZSh2b2lkKSB7IHJldHVybiBtSW5kaXJlY3RNZXNzYWdlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBtZXNzYWdlIGJ1ZmZlciB0byB1c2UgZm9yIGluZGlyZWN0IHRyYW5zbWlzc2lvbnMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJbmRpcmVjdE1lc3NhZ2UoTWVzc2FnZSAqYU1lc3NhZ2UpIHsgbUluZGlyZWN0TWVzc2FnZSA9IGFNZXNzYWdlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSA2TG9XUEFOIEZyYWdtZW50IE9mZnNldCB0byB1c2UgZm9yIGluZGlyZWN0IHRyYW5zbWlzc2lvbnMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgNkxvV1BBTiBGcmFnbWVudCBPZmZzZXQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRJbmRpcmVjdEZyYWdtZW50T2Zmc2V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JbmRpcmVjdEZyYWdtZW50T2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSA2TG9XUEFOIEZyYWdtZW50IE9mZnNldCB0byB1c2UgZm9yIGluZGlyZWN0IHRyYW5zbWlzc2lvbnMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRnJhZ21lbnRPZmZzZXQgIFRoZSA2TG9XUEFOIEZyYWdtZW50IE9mZnNldCB2YWx1ZSB0byB1c2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEluZGlyZWN0RnJhZ21lbnRPZmZzZXQodWludDE2X3QgYUZyYWdtZW50T2Zmc2V0KSB7IG1JbmRpcmVjdEZyYWdtZW50T2Zmc2V0ID0gYUZyYWdtZW50T2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBJRUVFIDgwMi4xNS40IEtleSBJRCB0byB1c2UgZm9yIGluZGlyZWN0IHJldHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IEtleSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0SW5kaXJlY3RLZXlJZCh2b2lkKSBjb25zdCB7IHJldHVybiBtSW5kaXJlY3RLZXlJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUVFRSA4MDIuMTUuNCBLZXkgSUQgdmFsdWUgdG8gdXNlIGZvciBpbmRpcmVjdCByZXRyYW5zbWlzc2lvbnMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhS2V5SWQgIFRoZSBJRUVFIDgwMi4xNS40IEtleSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SW5kaXJlY3RLZXlJZCh1aW50OF90IGFLZXlJZCkgeyBtSW5kaXJlY3RLZXlJZCA9IGFLZXlJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgbnVtYmVyIG9mIGluZGlyZWN0IHRyYW5zbWlzc2lvbiBhdHRlbXB0cyBmb3IgdGhlIGN1cnJlbnQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaW5kaXJlY3QgdHJhbnNtaXNzaW9uIGF0dGVtcHRzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRJbmRpcmVjdFR4QXR0ZW1wdHModm9pZCkgY29uc3QgeyByZXR1cm4gbUluZGlyZWN0VHhBdHRlbXB0czsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVzZXRzIHRoZSBudW1iZXIgb2YgaW5kaXJlY3QgdHJhbnNtaXNzaW9uIGF0dGVtcHRzIHRvIHplcm8uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlc2V0SW5kaXJlY3RUeEF0dGVtcHRzKHZvaWQpIHsgbUluZGlyZWN0VHhBdHRlbXB0cyA9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluY3JlbWVudHMgdGhlIG51bWJlciBvZiBpbmRpcmVjdCB0cmFuc21pc3Npb24gYXR0ZW1wdHMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluY3JlbWVudEluZGlyZWN0VHhBdHRlbXB0cyh2b2lkKSB7IG1JbmRpcmVjdFR4QXR0ZW1wdHMrKzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgSUVFRSA4MDIuMTUuNCBEYXRhIFNlcXVlbmNlIE51bWJlciB0byB1c2UgZHVyaW5nIGluZGlyZWN0IHJldHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IERhdGEgU2VxdWVuY2UgTnVtYmVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRJbmRpcmVjdERhdGFTZXF1ZW5jZU51bWJlcih2b2lkKSBjb25zdCB7IHJldHVybiBtSW5kaXJlY3REc247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElFRUUgODAyLjE1LjQgRGF0YSBTZXF1ZW5jZSBOdW1iZXIgdG8gdXNlIGR1cmluZyBpbmRpcmVjdCByZXRyYW5zbWlzc2lvbnMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRHNuICBUaGUgSUVFRSA4MDIuMTUuNCBEYXRhIFNlcXVlbmNlIE51bWJlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SW5kaXJlY3REYXRhU2VxdWVuY2VOdW1iZXIodWludDhfdCBhRHNuKSB7IG1JbmRpcmVjdERzbiA9IGFEc247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byBzb3VyY2UgbWF0Y2ggb24gdGhlIHNob3J0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFIGlmIHVzaW5nIHRoZSBzaG9ydCBhZGRyZXNzLCBGQUxTRSBpZiB1c2luZyB0aGUgZXh0ZW5kZWQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNJbmRpcmVjdFNvdXJjZU1hdGNoU2hvcnQodm9pZCkgY29uc3QgeyByZXR1cm4gbVVzZVNob3J0QWRkcmVzczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB3aGV0aGVyIG9yIG5vdCB0byBzb3VyY2UgbWF0Y2ggb24gdGhlIHNob3J0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2hvcnQgIFRSVUUgaWYgdXNpbmcgdGhlIHNob3J0IGFkZHJlc3MsIEZBTFNFIGlmIHVzaW5nIHRoZSBleHRlbmRlZCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJbmRpcmVjdFNvdXJjZU1hdGNoU2hvcnQoYm9vbCBhU2hvcnQpIHsgbVVzZVNob3J0QWRkcmVzcyA9IGFTaG9ydDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBjaGlsZCBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiB0aGUgY2hpbGQgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0luZGlyZWN0U291cmNlTWF0Y2hQZW5kaW5nKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Tb3VyY2VNYXRjaFBlbmRpbmc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgd2hldGhlciBvciBub3QgdGhlIGNoaWxkIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGVuZGluZyAgVFJVRSBpZiB0aGUgY2hpbGQgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJbmRpcmVjdFNvdXJjZU1hdGNoUGVuZGluZyhib29sIGFQZW5kaW5nKSB7IG1Tb3VyY2VNYXRjaFBlbmRpbmcgPSBhUGVuZGluZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHF1ZXVlZCBtZXNzYWdlKHMpIGZvciB0aGUgY2hpbGQKKyAgICAgKgorICAgICAqIEByZXR1cm5zIE51bWJlciBvZiBxdWV1ZXMgbWVzc2FnZShzKS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldEluZGlyZWN0TWVzc2FnZUNvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1RdWV1ZWRNZXNzYWdlQ291bnQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluY3JlbWVudHMgdGhlIGluZGlyZWN0IG1lc3NhZ2UgY291bnQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluY3JlbWVudEluZGlyZWN0TWVzc2FnZUNvdW50KHZvaWQpIHsgbVF1ZXVlZE1lc3NhZ2VDb3VudCsrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBkZWNyZW1lbnRzIHRoZSBpbmRpcmVjdCBtZXNzYWdlIGNvdW50LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBEZWNyZW1lbnRJbmRpcmVjdE1lc3NhZ2VDb3VudCh2b2lkKSB7IG1RdWV1ZWRNZXNzYWdlQ291bnQtLTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVzZXRzIHRoZSBpbmRpcmVjdCBtZXNzYWdlIGNvdW50IHRvIHplcm8uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlc2V0SW5kaXJlY3RNZXNzYWdlQ291bnQodm9pZCkgeyBtUXVldWVkTWVzc2FnZUNvdW50ID0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSByZXF1ZXN0ZWQgVExWIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyUmVxdWVzdFRsdnModm9pZCkgeyBtZW1zZXQobVJlcXVlc3RUbHZzLCBNbGU6OlRsdjo6a0ludmFsaWQsIHNpemVvZihtUmVxdWVzdFRsdnMpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVxdWVzdGVkIFRMViBhdCBpbmRleCBAcCBhSW5kZXguCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW5kZXggIFRoZSBpbmRleCBpbnRvIHRoZSByZXF1ZXN0ZWQgVExWIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgcmVxdWVzdGVkIFRMViBhdCBpbmRleCBAcCBhSW5kZXguCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFJlcXVlc3RUbHYodWludDhfdCBhSW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1SZXF1ZXN0VGx2c1thSW5kZXhdOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSByZXF1ZXN0ZWQgVExWIGF0IGluZGV4IEBwIGFJbmRleC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbmRleCAgVGhlIGluZGV4IGludG8gdGhlIHJlcXVlc3RlZCBUTFYgbGlzdC4KKyAgICAgKiBAcGFyYW1baW5dICBhVHlwZSAgIFRoZSBUTFYgdHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UmVxdWVzdFRsdih1aW50OF90IGFJbmRleCwgdWludDhfdCBhVHlwZSkgeyBtUmVxdWVzdFRsdnNbYUluZGV4XSA9IGFUeXBlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBtYWMgYWRkcmVzcyBvZiBjaGlsZCAoZWl0aGVyIHJsb2MxNiBvciBleHRlbmRlZCBhZGRyZXNzIGRlcGVuZGluZyBvbiBgVXNlU2hvcnRBZGRyZXNzYCBmbGFnKS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdIGFNYWNBZGRyZXNzIEEgcmVmZXJlbmNlIHRvIGEgbWFjIGFkZHJlc3Mgb2JqZWN0IHRvIHdoaWNoIHRoZSBjaGlsZCdzIGFkZHJlc3MgaXMgY29waWVkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSAoY29uc3QpIHJlZmVyZW5jZSB0byB0aGUgbWFjIGFkZHJlc3MgQGEgYU1hY0FkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBNYWM6OkFkZHJlc3MgJkdldE1hY0FkZHJlc3MoTWFjOjpBZGRyZXNzICZhTWFjQWRkcmVzcykgY29uc3Q7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5jcmVtZW50cyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgbGFzdCBzdXBlcnZpc2lvbiBvZiB0aGUgY2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluY3JlbWVudFNlY29uZHNTaW5jZUxhc3RTdXBlcnZpc2lvbih2b2lkKSB7IG1TZWNvbmRzU2luY2VTdXBlcnZpc2lvbisrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBsYXN0IHN1cGVydmlzaW9uIG9mIHRoZSBjaGlsZCAobGFzdCBtZXNzYWdlIHRvIHRoZSBjaGlsZCkKKyAgICAgKgorICAgICAqIEByZXR1cm5zIE51bWJlciBvZiBzZWNvbmRzIHNpbmNlIGxhc3Qgc3VwZXJ2aXNpb24gb2YgdGhlIGNoaWxkLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0U2Vjb25kc1NpbmNlTGFzdFN1cGVydmlzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TZWNvbmRzU2luY2VTdXBlcnZpc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVzZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBsYXN0IHN1cGVydmlzaW9uIG9mIHRoZSBjaGlsZCB0byB6ZXJvLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZXNldFNlY29uZHNTaW5jZUxhc3RTdXBlcnZpc2lvbih2b2lkKSB7IG1TZWNvbmRzU2luY2VTdXBlcnZpc2lvbiA9IDA7IH0KKworI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTgorCitwcml2YXRlOgorICAgIElwNjo6QWRkcmVzcyBtSXA2QWRkcmVzc1trTWF4SXA2QWRkcmVzc1BlckNoaWxkXTsgIC8vLzwgUmVnaXN0ZXJlZCBJUHY2IGFkZHJlc3NlcworICAgIHVpbnQzMl90ICAgICBtVGltZW91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQ2hpbGQgdGltZW91dAorCisgICAgdW5pb24KKyAgICB7CisgICAgICAgIHVpbnQ4X3QgbVJlcXVlc3RUbHZzW2tNYXhSZXF1ZXN0VGx2c107ICAgICAgICAgICAgICAgICAvLy88IFJlcXVlc3RlZCBNTEUgVExWcworICAgICAgICB1aW50OF90IG1BdHRhY2hDaGFsbGVuZ2VbTWxlOjpDaGFsbGVuZ2VUbHY6OmtNYXhTaXplXTsgLy8vPCBUaGUgY2hhbGxlbmdlIHZhbHVlCisgICAgfTsKKworICAgIHVpbnQzMl90ICAgICBtSW5kaXJlY3RGcmFtZUNvdW50ZXI7ICAgICAgICAgICAgICAgIC8vLzwgRnJhbWUgY291bnRlciBmb3IgY3VycmVudCBpbmRpcmVjdCBtZXNzYWdlICh1c2VkIGZvcmUgcmV0eCkuCisgICAgTWVzc2FnZSAgICAgKm1JbmRpcmVjdE1lc3NhZ2U7ICAgICAgICAgICAgICAgICAgICAgLy8vPCBDdXJyZW50IGluZGlyZWN0IG1lc3NhZ2UuCisgICAgdWludDE2X3QgICAgIG1JbmRpcmVjdEZyYWdtZW50T2Zmc2V0OyAgICAgICAgICAgICAgLy8vPCA2TG9XUEFOIGZyYWdtZW50IG9mZnNldCBmb3IgdGhlIGluZGlyZWN0IG1lc3NhZ2UuCisgICAgdWludDhfdCAgICAgIG1JbmRpcmVjdEtleUlkOyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBLZXkgSWQgZm9yIGN1cnJlbnQgaW5kaXJlY3QgbWVzc2FnZSAodXNlZCBmb3IgcmV0eCkuCisgICAgdWludDhfdCAgICAgIG1JbmRpcmVjdFR4QXR0ZW1wdHM7ICAgICAgICAgICAgICAgICAgLy8vPCBOdW1iZXIgb2YgZGF0YSBwb2xsIHRyaWdnZXJlZCB0eCBhdHRlbXB0cy4KKyAgICB1aW50OF90ICAgICAgbUluZGlyZWN0RHNuOyAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1BQyBsZXZlbCBEYXRhIFNlcXVlbmNlIE51bWJlciAoRFNOKSBmb3IgcmV0eCBhdHRlbXB0cy4KKyAgICB1aW50OF90ICAgICAgbU5ldHdvcmtEYXRhVmVyc2lvbjsgICAgICAgICAgICAgICAgICAvLy88IEN1cnJlbnQgTmV0d29yayBEYXRhIHZlcnNpb24KKyAgICB1aW50MTZfdCAgICAgbVF1ZXVlZE1lc3NhZ2VDb3VudCA6IDEzOyAgICAgICAgICAgICAvLy88IE51bWJlciBvZiBxdWV1ZWQgaW5kaXJlY3QgbWVzc2FnZXMgZm9yIHRoZSBjaGlsZC4KKyAgICBib29sICAgICAgICAgbVVzZVNob3J0QWRkcmVzcyA6IDE7ICAgICAgICAgICAgICAgICAvLy88IEluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBzaG9ydCBvciBleHRlbmRlZCBhZGRyZXNzLgorICAgIGJvb2wgICAgICAgICBtU291cmNlTWF0Y2hQZW5kaW5nIDogMTsgICAgICAgICAgICAgIC8vLzwgSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHBlbmRpbmcgdG8gYWRkIHRvIHNyYyBtYXRjaCB0YWJsZS4KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OCisgICAgdWludDE2X3QgICAgIG1TZWNvbmRzU2luY2VTdXBlcnZpc2lvbjsgICAgICAgICAgICAgLy8vPCBOdW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBsYXN0IHN1cGVydmlzaW9uIG9mIHRoZSBjaGlsZC4KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTgorCit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFRocmVhZCBSb3V0ZXIKKyAqCisgKi8KK2NsYXNzIFJvdXRlciA6IHB1YmxpYyBOZWlnaGJvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIHJvdXRlciBJRCBvZiB0aGUgbmV4dCBob3AgdG8gdGhpcyByb3V0ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgcm91dGVyIElEIG9mIHRoZSBuZXh0IGhvcCB0byB0aGlzIHJvdXRlci4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TmV4dEhvcCh2b2lkKSBjb25zdCB7IHJldHVybiBtTmV4dEhvcDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcm91dGVyIElEIG9mIHRoZSBuZXh0IGhvcCB0byB0aGlzIHJvdXRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgVGhlIHJvdXRlciBJRCBvZiB0aGUgbmV4dCBob3AgdG8gdGhpcyByb3V0ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5leHRIb3AodWludDhfdCBhUm91dGVySWQpIHsgbU5leHRIb3AgPSBhUm91dGVySWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIGxpbmsgcXVhbGl0eSBvdXQgdmFsdWUgZm9yIHRoaXMgcm91dGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGxpbmsgcXVhbGl0eSBvdXQgdmFsdWUgZm9yIHRoaXMgcm91dGVyLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rUXVhbGl0eU91dCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGlua1F1YWxpdHlPdXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGxpbmsgcXVhbGl0eSBvdXQgdmFsdWUgZm9yIHRoaXMgcm91dGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpbmtRdWFsaXR5ICBUaGUgbGluayBxdWFsaXR5IG91dCB2YWx1ZSBmb3IgdGhpcyByb3V0ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExpbmtRdWFsaXR5T3V0KHVpbnQ4X3QgYUxpbmtRdWFsaXR5KSB7IG1MaW5rUXVhbGl0eU91dCA9IGFMaW5rUXVhbGl0eTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0IHRoZSByb3V0ZSBjb3N0IHRvIHRoaXMgcm91dGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHJvdXRlIGNvc3QgdG8gdGhpcyByb3V0ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldENvc3Qodm9pZCkgY29uc3QgeyByZXR1cm4gbUNvc3Q7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHJvdXRlciBjb3N0IHRvIHRoaXMgcm91dGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvc3QgIFRoZSByb3V0ZXIgY29zdCB0byB0aGlzIHJvdXRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q29zdCh1aW50OF90IGFDb3N0KSB7IG1Db3N0ID0gYUNvc3Q7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHJvdXRlciBJRCBoYXMgYmVlbiBhbGxvY2F0ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFIGlmIHRoaXMgcm91dGVyIElEIGhhcyBiZWVuIGFsbG9jYXRlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0FsbG9jYXRlZCh2b2lkKSBjb25zdCB7IHJldHVybiBtQWxsb2NhdGVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHdoZXRoZXIgb3Igbm90IHRoaXMgcm91dGVyIElEIGhhcyBiZWVuIGFsbG9jYXRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBbGxvY2F0ZWQgIFRSVUUgaWYgdGhpcyByb3V0ZXIgSUQgaGFzIGJlZW4gYWxsb2NhdGVkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEFsbG9jYXRlZChib29sIGFBbGxvY2F0ZWQpIHsgbUFsbG9jYXRlZCA9IGFBbGxvY2F0ZWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIHRoZSByZWNsYWltIGRlbGF5IGlzIGluIGVmZmVjdCBmb3IgdGhpcyByb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFIGlmIHRoZSByZWNsYWltIGRlbGF5IGlzIGluIGVmZmVjdCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1JlY2xhaW1EZWxheSh2b2lkKSBjb25zdCB7IHJldHVybiBtUmVjbGFpbURlbGF5OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHdoZXRoZXIgdGhlIHJlY2xhaW0gZGVsYXkgaXMgaW4gZWZmZWN0IGZvciB0aGlzIHJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZWNsYWltRGVsYXkgIFRSVUUgaWYgdGhlIHJlY2xhaW0gZGVsYXkgaXMgaW4gZWZmZWN0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJlY2xhaW1EZWxheShib29sIGFSZWNsYWltRGVsYXkpIHsgbVJlY2xhaW1EZWxheSA9IGFSZWNsYWltRGVsYXk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1OZXh0SG9wOyAgICAgICAgICAgICAvLy88IFRoZSBuZXh0IGhvcCB0b3dhcmRzIHRoaXMgcm91dGVyCisgICAgdWludDhfdCBtTGlua1F1YWxpdHlPdXQgOiAyOyAgLy8vPCBUaGUgbGluayBxdWFsaXR5IG91dCBmb3IgdGhpcyByb3V0ZXIKKyAgICB1aW50OF90IG1Db3N0IDogNDsgICAgICAgICAgICAvLy88IFRoZSBjb3N0IHRvIHRoaXMgcm91dGVyIHZpYSBuZWlnaGJvciByb3V0ZXIKKyAgICBib29sICAgIG1BbGxvY2F0ZWQgOiAxOyAgICAgICAvLy88IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGVudHJ5IGlzIGFsbG9jYXRlZAorICAgIGJvb2wgICAgbVJlY2xhaW1EZWxheSA6IDE7ICAgIC8vLzwgSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgZW50cnkgaXMgd2FpdGluZyB0byBiZSByZWNsYWltZWQKK307CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFRPUE9MT0dZX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3V0aWxzL2NoaWxkX3N1cGVydmlzaW9uLmNwcCBiL3NyYy9jb3JlL3V0aWxzL2NoaWxkX3N1cGVydmlzaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDQ4MDZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdXRpbHMvY2hpbGRfc3VwZXJ2aXNpb24uY3BwCkBAIC0wLDAgKzEsMjc3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBjaGlsZCBzdXBlcnZpc2lvbiBmZWF0dXJlLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiY2hpbGRfc3VwZXJ2aXNpb24uaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgVXRpbHMgeworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT04KKworI2lmIE9QRU5USFJFQURfRlRECisKK0NoaWxkU3VwZXJ2aXNvcjo6Q2hpbGRTdXBlcnZpc29yKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDoKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJkNoaWxkU3VwZXJ2aXNvcjo6SGFuZGxlVGltZXIsIHRoaXMpLAorICAgIG1TdXBlcnZpc2lvbkludGVydmFsKGtEZWZhdWx0U3VwZXJ2aXNpb25JbnRlcnZhbCkKK3sKK30KKwordm9pZCBDaGlsZFN1cGVydmlzb3I6OlN0YXJ0KHZvaWQpCit7CisgICAgVmVyaWZ5T3JFeGl0KG1TdXBlcnZpc2lvbkludGVydmFsICE9IDApOworICAgIFZlcmlmeU9yRXhpdCghbVRpbWVyLklzUnVubmluZygpKTsKKyAgICBtVGltZXIuU3RhcnQoa09uZVNlY29uZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIENoaWxkU3VwZXJ2aXNvcjo6U3RvcCh2b2lkKQoreworICAgIG1UaW1lci5TdG9wKCk7Cit9CisKK3ZvaWQgQ2hpbGRTdXBlcnZpc29yOjpTZXRTdXBlcnZpc2lvbkludGVydmFsKHVpbnQxNl90IGFJbnRlcnZhbCkKK3sKKyAgICBtU3VwZXJ2aXNpb25JbnRlcnZhbCA9IGFJbnRlcnZhbDsKKyAgICBTdGFydCgpOworfQorCitDaGlsZCAqQ2hpbGRTdXBlcnZpc29yOjpHZXREZXN0aW5hdGlvbihjb25zdCBNZXNzYWdlICZhTWVzc2FnZSkgY29uc3QKK3sKKyAgICBDaGlsZCAqY2hpbGQgPSBOVUxMOworICAgIHVpbnQ4X3QgY2hpbGRJbmRleDsKKyAgICB1aW50OF90IG51bUNoaWxkcmVuOworCisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLkdldFR5cGUoKSA9PSBNZXNzYWdlOjprVHlwZVN1cGVydmlzaW9uKTsKKworICAgIGFNZXNzYWdlLlJlYWQoMCwgc2l6ZW9mKGNoaWxkSW5kZXgpLCAmY2hpbGRJbmRleCk7CisgICAgY2hpbGQgPSBHZXROZXRpZigpLkdldE1sZSgpLkdldENoaWxkcmVuKCZudW1DaGlsZHJlbik7CisgICAgVmVyaWZ5T3JFeGl0KGNoaWxkSW5kZXggPCBudW1DaGlsZHJlbiwgY2hpbGQgPSBOVUxMKTsKKyAgICBjaGlsZCArPSBjaGlsZEluZGV4OworCitleGl0OgorICAgIHJldHVybiBjaGlsZDsKK30KKwordm9pZCBDaGlsZFN1cGVydmlzb3I6OlNlbmRNZXNzYWdlKENoaWxkICZhQ2hpbGQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IGNoaWxkSW5kZXg7CisKKyAgICBWZXJpZnlPckV4aXQoYUNoaWxkLkdldEluZGlyZWN0TWVzc2FnZUNvdW50KCkgPT0gMCk7CisKKyAgICBtZXNzYWdlID0gbmV0aWYuR2V0SXA2KCkubU1lc3NhZ2VQb29sLk5ldyhNZXNzYWdlOjprVHlwZVN1cGVydmlzaW9uLCBzaXplb2YodWludDhfdCkpOworICAgIFZlcmlmeU9yRXhpdChtZXNzYWdlICE9IE5VTEwpOworCisgICAgLy8gU3VwZXJ2aXNpb24gbWVzc2FnZSBpcyBhbiBlbXB0eSBwYXlsb2FkIDE1LjQgZGF0YSBmcmFtZS4KKyAgICAvLyBUaGUgY2hpbGQgaW5kZXggaXMgc3RvcmVkIGhlcmUgaW4gdGhlIG1lc3NhZ2UgY29udGVudCB0byBhbGxvdworICAgIC8vIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgbWVzc2FnZSB0byBiZSBsYXRlciByZXRyaWV2ZWQgdXNpbmcKKyAgICAvLyBgQ2hpbGRTdXBlcnZpc29yOjpHZXREZXN0aW5hdGlvbihtZXNzYWdlKWAuCisKKyAgICBjaGlsZEluZGV4ID0gbmV0aWYuR2V0TWxlKCkuR2V0Q2hpbGRJbmRleChhQ2hpbGQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmNoaWxkSW5kZXgsIHNpemVvZihjaGlsZEluZGV4KSkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLlNlbmRNZXNzYWdlKCptZXNzYWdlKSk7CisgICAgbWVzc2FnZSA9IE5VTEw7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbmRpbmcgc3VwZXJ2aXNpb24gbWVzc2FnZSB0byBjaGlsZCAweCUwNHgiLCBhQ2hpbGQuR2V0UmxvYzE2KCkpOworCitleGl0OgorCisgICAgaWYgKG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2hpbGRTdXBlcnZpc29yOjpVcGRhdGVPblNlbmQoQ2hpbGQgJmFDaGlsZCkKK3sKKyAgICBhQ2hpbGQuUmVzZXRTZWNvbmRzU2luY2VMYXN0U3VwZXJ2aXNpb24oKTsKK30KKwordm9pZCBDaGlsZFN1cGVydmlzb3I6OkhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVUaW1lcigpOworfQorCit2b2lkIENoaWxkU3VwZXJ2aXNvcjo6SGFuZGxlVGltZXIodm9pZCkKK3sKKyAgICBDaGlsZCAqY2hpbGQ7CisgICAgdWludDhfdCBudW1DaGlsZHJlbjsKKworICAgIFZlcmlmeU9yRXhpdChtU3VwZXJ2aXNpb25JbnRlcnZhbCAhPSAwKTsKKworICAgIGNoaWxkID0gR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRDaGlsZHJlbigmbnVtQ2hpbGRyZW4pOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47IGkrKywgY2hpbGQrKykKKyAgICB7CisgICAgICAgIGlmICghY2hpbGQtPklzU3RhdGVWYWxpZE9yUmVzdG9yaW5nKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgY2hpbGQtPkluY3JlbWVudFNlY29uZHNTaW5jZUxhc3RTdXBlcnZpc2lvbigpOworCisgICAgICAgIGlmICgoY2hpbGQtPkdldFNlY29uZHNTaW5jZUxhc3RTdXBlcnZpc2lvbigpID49IG1TdXBlcnZpc2lvbkludGVydmFsKSAmJiAoY2hpbGQtPklzUnhPbldoZW5JZGxlKCkgPT0gZmFsc2UpKQorICAgICAgICB7CisgICAgICAgICAgICBTZW5kTWVzc2FnZSgqY2hpbGQpOworICAgICAgICB9CisgICAgfQorCisgICAgbVRpbWVyLlN0YXJ0KGtPbmVTZWNvbmQpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworQ2hpbGRTdXBlcnZpc29yICZDaGlsZFN1cGVydmlzb3I6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIENoaWxkU3VwZXJ2aXNvciAmc3VwZXJ2aXNvciA9ICpzdGF0aWNfY2FzdDxDaGlsZFN1cGVydmlzb3IgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgQ2hpbGRTdXBlcnZpc29yICZzdXBlcnZpc29yID0gb3RHZXRUaHJlYWROZXRpZigpLkdldENoaWxkU3VwZXJ2aXNvcigpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gc3VwZXJ2aXNvcjsKK30KKworI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0ZURAorCitTdXBlcnZpc2lvbkxpc3RlbmVyOjpTdXBlcnZpc2lvbkxpc3RlbmVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDoKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJlN1cGVydmlzaW9uTGlzdGVuZXI6OkhhbmRsZVRpbWVyLCB0aGlzKSwKKyAgICBtVGltZW91dCgwKQoreworICAgIFNldFRpbWVvdXQoa0RlZmF1bHRUaW1lb3V0KTsKK30KKwordm9pZCBTdXBlcnZpc2lvbkxpc3RlbmVyOjpTdGFydCh2b2lkKQoreworICAgIFJlc3RhcnRUaW1lcigpOworfQorCit2b2lkIFN1cGVydmlzaW9uTGlzdGVuZXI6OlN0b3Aodm9pZCkKK3sKKyAgICBtVGltZXIuU3RvcCgpOworfQorCit2b2lkIFN1cGVydmlzaW9uTGlzdGVuZXI6OlNldFRpbWVvdXQodWludDE2X3QgYVRpbWVvdXQpCit7CisgICAgaWYgKG1UaW1lb3V0ICE9IGFUaW1lb3V0KQorICAgIHsKKyAgICAgICAgbVRpbWVvdXQgPSBhVGltZW91dDsKKyAgICAgICAgUmVzdGFydFRpbWVyKCk7CisgICAgfQorfQorCit2b2lkIFN1cGVydmlzaW9uTGlzdGVuZXI6OlVwZGF0ZU9uUmVjZWl2ZShjb25zdCBNYWM6OkFkZHJlc3MgJmFTb3VyY2VBZGRyZXNzLCBib29sIGFJc1NlY3VyZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgLy8gSWYgbGlzdGVuZXIgaXMgZW5hYmxlZCBhbmQgZGV2aWNlIGlzIGEgY2hpbGQgYW5kIGl0IHJlY2VpdmVkIGEgc2VjdXJlIGZyYW1lIGZyb20gaXRzIHBhcmVudCwgcmVzdGFydCB0aGUgdGltZXIuCisKKyAgICBWZXJpZnlPckV4aXQobVRpbWVyLklzUnVubmluZygpICYmIGFJc1NlY3VyZSAgJiYgKG5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCkgJiYKKyAgICAgICAgICAgICAgICAgKG5ldGlmLkdldE1sZSgpLkdldE5laWdoYm9yKGFTb3VyY2VBZGRyZXNzKSA9PSBuZXRpZi5HZXRNbGUoKS5HZXRQYXJlbnQoKSkpOworCisgICAgUmVzdGFydFRpbWVyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIFN1cGVydmlzaW9uTGlzdGVuZXI6OlJlc3RhcnRUaW1lcih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lciwgaWYgdGhlIHRpbWVvdXQgdmFsdWUgaXMgbm9uLXplcm8gYW5kIHRoZSBkZXZpY2UgaXMgYSBzbGVlcHkgY2hpbGQuCisKKyAgICBpZiAoKG1UaW1lb3V0ICE9IDApICYmIChuZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfQ0hJTEQpICYmCisgICAgICAgIChuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuR2V0UnhPbldoZW5JZGxlKCkgPT0gZmFsc2UpKQorICAgIHsKKyAgICAgICAgbVRpbWVyLlN0YXJ0KFRpbWVyOjpTZWNUb01zZWMobVRpbWVvdXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVRpbWVyLlN0b3AoKTsKKyAgICB9Cit9CisKK3ZvaWQgU3VwZXJ2aXNpb25MaXN0ZW5lcjo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgU3VwZXJ2aXNpb25MaXN0ZW5lcjo6SGFuZGxlVGltZXIodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgVmVyaWZ5T3JFeGl0KChuZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfQ0hJTEQpICYmCisgICAgICAgICAgICAgICAgIChuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuR2V0UnhPbldoZW5JZGxlKCkgPT0gZmFsc2UpKTsKKworICAgIG90TG9nV2Fybk1sZShuZXRpZi5HZXRJbnN0YW5jZSgpLCAiU3VwZXJ2aXNpb24gdGltZW91dC4gTm8gZnJhbWUgZnJvbSBwYXJlbnQgaW4gJWQgc2VjIiwgbVRpbWVvdXQpOworCisgICAgbmV0aWYuR2V0TWxlKCkuU2VuZENoaWxkVXBkYXRlUmVxdWVzdCgpOworCitleGl0OgorICAgIFJlc3RhcnRUaW1lcigpOworfQorCitTdXBlcnZpc2lvbkxpc3RlbmVyICZTdXBlcnZpc2lvbkxpc3RlbmVyOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBTdXBlcnZpc2lvbkxpc3RlbmVyICZsaXN0ZW5lciA9ICpzdGF0aWNfY2FzdDxTdXBlcnZpc2lvbkxpc3RlbmVyICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIFN1cGVydmlzaW9uTGlzdGVuZXIgJmxpc3RlbmVyID0gb3RHZXRUaHJlYWROZXRpZigpLkdldFN1cGVydmlzaW9uTGlzdGVuZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGxpc3RlbmVyOworfQorCisjZW5kaWYgLy8gI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OCisKK30gLy8gbmFtZXNwYWNlIFV0aWxzCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdXRpbHMvY2hpbGRfc3VwZXJ2aXNpb24uaHBwIGIvc3JjL2NvcmUvdXRpbHMvY2hpbGRfc3VwZXJ2aXNpb24uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYzJkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS91dGlscy9jaGlsZF9zdXBlcnZpc2lvbi5ocHAKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBjaGlsZCBzdXBlcnZpc2lvbiBmZWF0dXJlLgorICoKKyAqLworCisjaWZuZGVmIENISUxEX1NVUEVSVklTSU9OX0hQUF8KKyNkZWZpbmUgQ0hJTERfU1VQRVJWSVNJT05fSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RvcG9sb2d5LmhwcCIKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKKworbmFtZXNwYWNlIFV0aWxzIHsKKworLyoqCisgKgorICogQ2hpbGQgc3VwZXJ2aXNpb24gZmVhdHVyZSBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgcGFyZW50CisgKiB0byBlbnN1cmUgdGhhdCBhIG1lc3NhZ2UgaXMgc2VudCB0byBlYWNoIHNsZWVweSBjaGlsZCB3aXRoaW4KKyAqIGEgZml4ZWQgaW50ZXJ2YWwsIG5hbWVseSB0aGUgc3VwZXJ2aXNpb24gaW50ZXJ2YWwuIElmIHRoZXJlCisgKiBpcyBubyB0cmFuc21pc3Npb24gdG8gdGhlIGNoaWxkIHdpdGhpbiB0aGUgc3VwZXJ2aXNpb24KKyAqIGludGVydmFsLCBjaGlsZCBzdXBlcnZpc29yIGVucXVldWVzIGFuZCBzZW5kcyBhIHN1cGVydmlzaW9uCisgKiBtZXNzYWdlIChhIGRhdGEgbWVzc2FnZSB3aXRoIGVtcHR5IHBheWxvYWQpIHRvIHRoZSBjaGlsZC4KKyAqCisgKiBPbiB0aGUgY2hpbGQgc2lkZSwgdGhpcyBpcyB1c2VkIHRvIGNoZWNrIHRoZSBjb25uZWN0aXZpdHkKKyAqIHRvIHRoZSBwYXJlbnQuIElmIHRoZSBjaGlsZCBkb2VzIG5vdCBoZWFyIGZyb20gaXRzIHBhcmVudAorICogZm9yIGEgcHJlLXNwZWNpZmllZCB0aW1lb3V0IGludGVydmFsIGl0IGFzc3VtZXMgdGhhdCBpdCBtYXkKKyAqIGJlIGRpc2Nvbm5lY3RlZCBhbmQgdHJpZXMgdG8gcmUtYXR0YWNoIHRvIHRoZSBwYXJlbnQuCisgKgorICogVGhlIGNoaWxkIHN1cGVydmlzaW9uIHByb3ZpZGVzIGFuIGFsdGVybmF0aXZlLCBtb3JlCisgKiBlbmVyZ3ktZWZmaWNpZW50IHNvbHV0aW9uIGNvbXBhcmVkIHRvIHJlcXVpcmluZyB0aGUgc2xlZXB5IGNoaWxkCisgKiB0byBwZXJpb2RpY2FsbHkgcGVyZm9ybSBhbiBNTEUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QvUmVzcG9uc2UKKyAqIGV4Y2hhbmdlIHdpdGggdGhlIHBhcmVudCAoYXMgYSB3YXkgb2YgdmVyaWZ5aW5nIHRoYXQgaXQKKyAqIGlzIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgcGFyZW50KS4gVGhlIGNoaWxkIHN1cGVydmlzaW9uCisgKiBzb2x1dGlvbiBwdXRzIHRoZSBidXJkZW4gb2YgbWVzc2FnZSB0cmFuc21pc3Npb25zIG9uIHRoZQorICogcGFyZW50IGluc3RlYWQgb2YgdGhlIHR5cGljYWxseSBtb3JlIGVuZXJneS1jb25zdHJhaW5lZCBjaGlsZC4KKyAqCisgKiBOb3RlIHRoYXQgbW9zdCByYWRpb3MgZ2VuZXJhdGUgYW4gYXV0by1hY2sgaW4gaGFyZHdhcmUgaW4KKyAqIHJlc3BvbnNlIHRvIGEgcmVjZWl2ZWQgZnJhbWUsIHNvIHRoZSBjaGlsZCBjYW5ub3Qgc29sZWx5IHJlbHkKKyAqIG9uIHRoZSAxNS40IGFja25vd2xlZGdtZW50cyBpdCByZWNlaXZlcyBmcm9tIHBhcmVudCBhcyBhbgorICogaW5kaWNhdG9yIHRoYXQgaXQgaXMgc3RpbGwgY29ubmVjdGVkIGFuZCBpcyBpbiBwYXJlbnQncworICogY2hpbGQgdGFibGUuCisgKgorICovCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTiAmJiBPUEVOVEhSRUFEX0ZURAorCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGNoaWxkIHN1cGVydmlzb3IuCisgKgorICovCitjbGFzcyBDaGlsZFN1cGVydmlzb3I6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBDaGlsZFN1cGVydmlzb3IoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgdGhlIGNoaWxkIHN1cGVydmlzaW9uIHByb2Nlc3Mgb24gcGFyZW50LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTdGFydCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSBjaGlsZCBzdXBlcnZpc2lvbiBwcm9jZXNzIG9uIHBhcmVudC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RvcCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHN1cGVydmlzaW9uIGludGVydmFsLgorICAgICAqCisgICAgICogU2V0dGluZyB0aGUgc3VwZXJ2aXNpb24gaW50ZXJ2YWwgdG8gYSBub24temVybyB2YWx1ZSB3aWxsIGVuc3VyZSB0byBzdGFydCB0aGUgc3VwZXJ2aXNpb24gcHJvY2VzcyAoaWYgbm90CisgICAgICogYWxyZWFkeSBzdGFydGVkKS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUludGVydmFsIElmIG5vbi16ZXJvLCB0aGUgZGVzaXJlZCBzdXBlcnZpc2lvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcyksIHplcm8gdG8gZGlzYWJsZSBzdXBlcnZpc2lvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U3VwZXJ2aXNpb25JbnRlcnZhbCh1aW50MTZfdCBhSW50ZXJ2YWwpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc3VwZXJ2aXNpb24gaW50ZXJ2YWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgVGhlIGN1cnJlbnQgc3VwZXJ2aXNpb24gaW50ZXJ2YWwgKHNlY29uZHMpLCBvciB6ZXJvIGlmIHN1cGVydmlzaW9uIGlzIGRpc2FibGVkLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0U3VwZXJ2aXNpb25JbnRlcnZhbCh2b2lkKSBjb25zdCB7IHJldHVybiBtU3VwZXJ2aXNpb25JbnRlcnZhbDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGVzdGluYXRpb24gZm9yIGEgc3VwZXJ2aXNpb24gbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYU1lc3NhZ2UgVGhlIG1lc3NhZ2UgZm9yIHdoaWNoIHRvIGdldCB0aGUgZGVzdGluYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBjaGlsZCBvZiB0aGUgbWVzc2FnZSwgb3IgTlVMTCBpZiBAcCBhTWVzc2FnZSBpcyBub3Qgb2Ygc3VwZXJ2aXNpb24gdHlwZS4KKyAgICAgKgorICAgICAqLworICAgIENoaWxkICpHZXREZXN0aW5hdGlvbihjb25zdCBNZXNzYWdlICZhTWVzc2FnZSkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBzdXBlcnZpc2lvbiBzdGF0ZSBmb3IgYSBjaGlsZC4gSXQgaW5mb3JtcyB0aGUgY2hpbGQgc3VwZXJ2aXNvciB0aGF0IGEgbWVzc2FnZSB3YXMKKyAgICAgKiBzdWNjZXNzZnVsbHkgc2VudCB0byB0aGUgY2hpbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFDaGlsZCAgICAgVGhlIGNoaWxkIHRvIHdoaWNoIGEgbWVzc2FnZSB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFVwZGF0ZU9uU2VuZChDaGlsZCAmYUNoaWxkKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrRGVmYXVsdFN1cGVydmlzaW9uSW50ZXJ2YWwgPSBPUEVOVEhSRUFEX0NPTkZJR19DSElMRF9TVVBFUlZJU0lPTl9JTlRFUlZBTCwgIC8vIChzZWNvbmRzKQorICAgICAgICBrT25lU2Vjb25kID0gMTAwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9uZSBzZWNvbmQgaW50ZXJ2YWwgKGluIG1zKS4KKyAgICB9OworCisgICAgdm9pZCBTZW5kTWVzc2FnZShDaGlsZCAmYUNoaWxkKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworICAgIHN0YXRpYyBDaGlsZFN1cGVydmlzb3IgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIFRpbWVyICAgICAgICBtVGltZXI7CisgICAgdWludDE2X3QgICAgIG1TdXBlcnZpc2lvbkludGVydmFsOworfTsKKworI2Vsc2UgIC8vICNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTiAmJiBPUEVOVEhSRUFEX0ZURAorCitjbGFzcyBDaGlsZFN1cGVydmlzb3IKK3sKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDaGlsZFN1cGVydmlzb3IoVGhyZWFkTmV0aWYgJikgeyB9CisgICAgdm9pZCBTdGFydCh2b2lkKSB7IH0KKyAgICB2b2lkIFN0b3Aodm9pZCkgeyB9CisgICAgdm9pZCBTZXRTdXBlcnZpc2lvbkludGVydmFsKHVpbnQxNl90KSB7IH0KKyAgICB1aW50MTZfdCBHZXRTdXBlcnZpc2lvbkludGVydmFsKHZvaWQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICBDaGlsZCAqR2V0RGVzdGluYXRpb24oY29uc3QgTWVzc2FnZSAmKSBjb25zdCB7IHJldHVybiBOVUxMOyB9CisgICAgdm9pZCBVcGRhdGVPblNlbmQoQ2hpbGQgJikgeyB9Cit9OworCisjZW5kaWYgLy8gI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OICYmIE9QRU5USFJFQURfRlRECisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTgorCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGNoaWxkIHN1cGVydmlzaW9uIGxpc3RlbmVyLgorICoKKyAqLworY2xhc3MgU3VwZXJ2aXNpb25MaXN0ZW5lcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGV4cGxpY2l0IFN1cGVydmlzaW9uTGlzdGVuZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgdGhlIHN1cGVydmlzaW9uIGxpc3RlbmVyIG9wZXJhdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RhcnQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyB0aGUgc3VwZXJ2aXNpb24gbGlzdGVuZXIgb3BlcmF0aW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgc3VwZXJ2aXNpb24gY2hlY2sgdGltZW91dCAoaW4gc2Vjb25kcykuCisgICAgICoKKyAgICAgKiBJZiB0aGUgY2hpbGQgZG9lcyBub3QgaGVhciBmcm9tIGl0cyBwYXJlbnQgd2l0aGluIHRoZSBnaXZlbiBjaGVjayB0aW1lb3V0IGludGVydmFsLCBpdCBpbml0aWF0ZXMgdGhlIHJlLWF0dGFjaAorICAgICAqIHByb2Nlc3MgKE1MRSBDaGlsZCBVcGRhdGUgUmVxdWVzdC9SZXNwb25zZSBleGNoYW5nZSB3aXRoIGl0cyBwYXJlbnQpLiBTZXR0aW5nIHRoZSB0aW1lb3V0IHRvIHplcm8sIGRpc2FibGVzIHRoZQorICAgICAqIHN1cGVydmlzaW9uIGNoZWNrIG9uIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNlbGVjdCBhIHN1cGVydmlzaW9uIGNoZWNrIHRpbWVvdXQgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIHBhcmVudCdzIGNoaWxkIHN1cGVydmlzaW9uCisgICAgICogaW50ZXJ2YWwgcGx1cyB0aGUgbWF4aW11bSB0aW1lIGJldHdlZW4gdGhlIGNoaWxkJ3MgZGF0YSBwb2xsIHRyYW5zbWlzc2lvbnMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZW91dCAgIFRoZSB0aW1lb3V0IGludGVydmFsIChpbiBzZWNvbmRzKSwgemVybyB0byBkaXNhYmxlIHRoZSBzdXBlcnZpc2lvbiBjaGVjayBvbiB0aGUgY2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRpbWVvdXQodWludDE2X3QgYVRpbWVvdXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc3VwZXJ2aXNpb24gY2hlY2sgdGltZW91dCBpbnRlcnZhbCAoaW4gc2Vjb25kcykuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgIFRoZSBjaGVjayB0aW1lb3V0IGludGVydmFsIChpbiBzZWNvbmRzKSBvciB6ZXJvIGlmIHRoZSBzdXBlcnZpc2lvbiBjaGVjayBvbiB0aGUgY2hpbGQgaXMgZGlzYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRUaW1lb3V0KHZvaWQpIGNvbnN0ICB7IHJldHVybiBtVGltZW91dDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgc3VwZXJ2aXNpb24gbGlzdGVuZXIgc3RhdGUuIEl0IGluZm9ybXMgdGhlIGxpc3RlbmVyIG9mIGEgcmVjZWl2ZWQgZnJhbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYVNvdXJjZSAgICBUaGUgc291cmNlIE1BQyBhZGRyZXNzIG9mIHRoZSByZWNlaXZlZCBmcmFtZQorICAgICAqIEBwYXJhbVtpbl0gICBhSXNTZWN1cmUgIFRSVUUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgc2VjdXJlLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFVwZGF0ZU9uUmVjZWl2ZShjb25zdCBNYWM6OkFkZHJlc3MgJmFTb3VyY2UsIGJvb2wgYUlzU2V1Y3JlKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrRGVmYXVsdFRpbWVvdXQgPSBPUEVOVEhSRUFEX0NPTkZJR19TVVBFUlZJU0lPTl9DSEVDS19USU1FT1VULCAgIC8vIChzZWNvbmRzKQorICAgIH07CisKKyAgICB2b2lkIFJlc3RhcnRUaW1lcih2b2lkKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworICAgIHN0YXRpYyBTdXBlcnZpc2lvbkxpc3RlbmVyICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICBUaW1lciBtVGltZXI7CisgICAgdWludDE2X3QgbVRpbWVvdXQ7Cit9OworCisjZWxzZSAvLyAjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT04KKworY2xhc3MgU3VwZXJ2aXNpb25MaXN0ZW5lcgoreworcHVibGljOgorICAgIFN1cGVydmlzaW9uTGlzdGVuZXIoVGhyZWFkTmV0aWYgJikgeyB9CisgICAgdm9pZCBTdGFydCh2b2lkKSB7IH0KKyAgICB2b2lkIFN0b3Aodm9pZCkgeyB9CisgICAgdm9pZCBTZXRUaW1lb3V0KHVpbnQxNl90KSB7IH0KKyAgICB1aW50MTZfdCBHZXRUaW1lb3V0KHZvaWQpIGNvbnN0ICB7IHJldHVybiAwOyB9CisgICAgdm9pZCBVcGRhdGVPblJlY2VpdmUoY29uc3QgTWFjOjpBZGRyZXNzICYsIGJvb2wpIHsgfQorfTsKKworI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTgorCisvKioKKyAqIEB9CisgKgorICovCisKK30gLy8gbmFtZXNwYWNlIFV0aWxzCit9IC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIENISUxEX1NVUEVSVklTSU9OX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3V0aWxzL2phbV9kZXRlY3Rvci5jcHAgYi9zcmMvY29yZS91dGlscy9qYW1fZGV0ZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZGE4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS91dGlscy9qYW1fZGV0ZWN0b3IuY3BwCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBqYW0gZGV0ZWN0b3IgZmVhdHVyZS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImphbV9kZXRlY3Rvci5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBVdGlscyB7CisKK0phbURldGVjdG9yOjpKYW1EZXRlY3RvcihUaHJlYWROZXRpZiAmYU5ldGlmKSA6CisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKGFOZXRpZiksCisgICAgbUhhbmRsZXIoTlVMTCksCisgICAgbUNvbnRleHQoTlVMTCksCisgICAgbVJzc2lUaHJlc2hvbGQoa0RlZmF1bHRSc3NpVGhyZXNob2xkKSwKKyAgICBtVGltZXIoYU5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJkphbURldGVjdG9yOjpIYW5kbGVUaW1lciwgdGhpcyksCisgICAgbUhpc3RvcnlCaXRtYXAoMCksCisgICAgbUN1clNlY29uZFN0YXJ0VGltZSgwKSwKKyAgICBtU2FtcGxlSW50ZXJ2YWwoMCksCisgICAgbVdpbmRvdyhrTWF4V2luZG93KSwKKyAgICBtQnVzeVBlcmlvZChrTWF4V2luZG93KSwKKyAgICBtRW5hYmxlZChmYWxzZSksCisgICAgbUFsd2F5c0Fib3ZlVGhyZXNob2xkKGZhbHNlKSwKKyAgICBtSmFtU3RhdGUoZmFsc2UpCit7Cit9CisKK290RXJyb3IgSmFtRGV0ZWN0b3I6OlN0YXJ0KEhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KCFtRW5hYmxlZCwgZXJyb3IgPSBPVF9FUlJPUl9BTFJFQURZKTsKKyAgICBWZXJpZnlPckV4aXQoYUhhbmRsZXIgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgbUhhbmRsZXIgPSBhSGFuZGxlcjsKKyAgICBtQ29udGV4dCA9IGFDb250ZXh0OworCisgICAgbUVuYWJsZWQgPSB0cnVlOworCisgICAgbUN1clNlY29uZFN0YXJ0VGltZSA9IFRpbWVyOjpHZXROb3coKTsKKyAgICBtQWx3YXlzQWJvdmVUaHJlc2hvbGQgPSB0cnVlOworICAgIG1IaXN0b3J5Qml0bWFwID0gMDsKKyAgICBtSmFtU3RhdGUgPSBmYWxzZTsKKyAgICBtU2FtcGxlSW50ZXJ2YWwgPSBrTWF4U2FtcGxlSW50ZXJ2YWw7CisKKyAgICBtVGltZXIuU3RhcnQoa01pblNhbXBsZUludGVydmFsKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSmFtRGV0ZWN0b3I6OlN0b3Aodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChtRW5hYmxlZCwgZXJyb3IgPSBPVF9FUlJPUl9BTFJFQURZKTsKKworICAgIG1FbmFibGVkID0gZmFsc2U7CisgICAgbUphbVN0YXRlID0gZmFsc2U7CisKKyAgICBtVGltZXIuU3RvcCgpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBKYW1EZXRlY3Rvcjo6U2V0UnNzaVRocmVzaG9sZChpbnQ4X3QgYVRocmVzaG9sZCkKK3sKKyAgICBtUnNzaVRocmVzaG9sZCA9IGFUaHJlc2hvbGQ7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBKYW1EZXRlY3Rvcjo6U2V0V2luZG93KHVpbnQ4X3QgYVdpbmRvdykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhV2luZG93ICE9IDAsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBWZXJpZnlPckV4aXQoYVdpbmRvdyA8PSBrTWF4V2luZG93LCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBtV2luZG93ID0gYVdpbmRvdzsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSmFtRGV0ZWN0b3I6OlNldEJ1c3lQZXJpb2QodWludDhfdCBhQnVzeVBlcmlvZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhQnVzeVBlcmlvZCAhPSAwLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgVmVyaWZ5T3JFeGl0KGFCdXN5UGVyaW9kIDw9IG1XaW5kb3csIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG1CdXN5UGVyaW9kID0gYUJ1c3lQZXJpb2Q7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIEphbURldGVjdG9yOjpIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKwordm9pZCBKYW1EZXRlY3Rvcjo6SGFuZGxlVGltZXIodm9pZCkKK3sKKyAgICBpbnQ4X3QgcnNzaTsKKyAgICBib29sIGRpZEV4Y2VlZFRocmVzaG9sZCA9IHRydWU7CisKKyAgICBWZXJpZnlPckV4aXQobUVuYWJsZWQpOworCisgICAgcnNzaSA9IG90UGxhdFJhZGlvR2V0UnNzaShHZXROZXRpZigpLkdldEluc3RhbmNlKCkpOworCisgICAgLy8gSWYgdGhlIFJTU0kgaXMgdmFsaWQsIGNoZWNrIGlmIGl0IGV4Y2VlZHMgdGhlIHRocmVzaG9sZAorICAgIC8vIGFuZCB0cnkgdG8gdXBkYXRlIHRoZSBoaXN0b3J5IGJpdCBtYXAKKyAgICBpZiAocnNzaSAhPSBPVF9SQURJT19SU1NJX0lOVkFMSUQpCisgICAgeworICAgICAgICBkaWRFeGNlZWRUaHJlc2hvbGQgPSAocnNzaSA+PSBtUnNzaVRocmVzaG9sZCk7CisgICAgICAgIFVwZGF0ZUhpc3RvcnkoZGlkRXhjZWVkVGhyZXNob2xkKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgUlNTSSBzYW1wbGUgZG9lcyBub3QgZXhjZWVkIHRoZSB0aHJlc2hvbGQsIGdvIGJhY2sgdG8gbWF4IHNhbXBsZSBpbnRlcnZhbAorICAgIC8vIE90aGVyd2lzZSwgZGl2aWRlIHRoZSBzYW1wbGUgaW50ZXJ2YWwgYnkgaGFsZiB3aGlsZSBlbnN1cmluZyBpdCBkb2VzIG5vdCBnbyBsb3dlcgorICAgIC8vIHRoYW4gbWluaW11bSBzYW1wbGUgaW50ZXJ2YWwuCisKKyAgICBpZiAoIWRpZEV4Y2VlZFRocmVzaG9sZCkKKyAgICB7CisgICAgICAgIG1TYW1wbGVJbnRlcnZhbCA9IGtNYXhTYW1wbGVJbnRlcnZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVNhbXBsZUludGVydmFsIC89IDI7CisKKyAgICAgICAgaWYgKG1TYW1wbGVJbnRlcnZhbCA8IGtNaW5TYW1wbGVJbnRlcnZhbCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNhbXBsZUludGVydmFsID0ga01pblNhbXBsZUludGVydmFsOworICAgICAgICB9CisgICAgfQorCisgICAgbVRpbWVyLlN0YXJ0KG1TYW1wbGVJbnRlcnZhbCArIChvdFBsYXRSYW5kb21HZXQoKSAlIGtNYXhSYW5kb21EZWxheSkpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBKYW1EZXRlY3Rvcjo6VXBkYXRlSGlzdG9yeShib29sIGFEaWRFeGNlZWRUaHJlc2hvbGQpCit7CisgICAgdWludDMyX3Qgbm93ID0gVGltZXI6OkdldE5vdygpOworCisgICAgLy8gSWYgdGhlIFJTU0kgaXMgZXZlciBiZWxvdyB0aGUgdGhyZXNob2xkLCB1cGRhdGUgbUFsd2F5c0Fib3ZlVGhyZXNob2xkCisgICAgLy8gZm9yIGN1cnJlbnQgc2Vjb25kIGludGVydmFsLgorICAgIGlmICghYURpZEV4Y2VlZFRocmVzaG9sZCkKKyAgICB7CisgICAgICAgIG1BbHdheXNBYm92ZVRocmVzaG9sZCA9IGZhbHNlOworICAgIH0KKworICAgIC8vIElmIHdlIHJlYWNoZWQgZW5kIG9mIGN1cnJlbnQgb25lIHNlY29uZCBpbnRlcnZhbCwgdXBkYXRlIHRoZSBoaXN0b3J5IGJpdG1hcAorICAgIGlmIChub3cgLSBtQ3VyU2Vjb25kU3RhcnRUaW1lID49IGtPbmVTZWNvbmRJbnRlcnZhbCkKKyAgICB7CisgICAgICAgIG1IaXN0b3J5Qml0bWFwIDw8PSAxOworCisgICAgICAgIGlmIChtQWx3YXlzQWJvdmVUaHJlc2hvbGQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1IaXN0b3J5Qml0bWFwIHw9IDB4MTsKKyAgICAgICAgfQorCisgICAgICAgIG1BbHdheXNBYm92ZVRocmVzaG9sZCA9IHRydWU7CisKKyAgICAgICAgd2hpbGUgKG5vdyAtIG1DdXJTZWNvbmRTdGFydFRpbWUgPj0ga09uZVNlY29uZEludGVydmFsKQorICAgICAgICB7CisgICAgICAgICAgICBtQ3VyU2Vjb25kU3RhcnRUaW1lICs9IGtPbmVTZWNvbmRJbnRlcnZhbDsKKyAgICAgICAgfQorCisgICAgICAgIFVwZGF0ZUphbVN0YXRlKCk7CisgICAgfQorfQorCit2b2lkIEphbURldGVjdG9yOjpVcGRhdGVKYW1TdGF0ZSh2b2lkKQoreworICAgIHVpbnQ4X3QgbnVtSmFtbWVkU2Vjb25kcyA9IDA7CisgICAgdWludDY0X3QgYml0bWFwID0gbUhpc3RvcnlCaXRtYXA7CisgICAgYm9vbCBvbGRKYW1TdGF0ZSA9IG1KYW1TdGF0ZTsKKworICAgIC8vIENsZWFyIGFsbCBoaXN0b3J5IGJpdHMgYmV5b25kIHRoZSBjdXJyZW50IHdpbmRvdyBzaXplCisgICAgYml0bWFwICY9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwgbVdpbmRvdykgLSAxOworCisgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBiaXRtYXAKKyAgICB3aGlsZSAoYml0bWFwICE9IDApCisgICAgeworICAgICAgICBudW1KYW1tZWRTZWNvbmRzKys7CisgICAgICAgIGJpdG1hcCAmPSAoYml0bWFwIC0gMSk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIHRoZSBKYW0gc3RhdGUKKyAgICBtSmFtU3RhdGUgPSAobnVtSmFtbWVkU2Vjb25kcyA+PSBtQnVzeVBlcmlvZCk7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBhIGNoYW5nZSwgaW52b2tlIHRoZSBoYW5kbGVyLgorICAgIGlmICgobUphbVN0YXRlICE9IG9sZEphbVN0YXRlKSB8fCAobUphbVN0YXRlID09IHRydWUpKQorICAgIHsKKyAgICAgICAgbUhhbmRsZXIobUphbVN0YXRlLCBtQ29udGV4dCk7CisgICAgfQorfQorCitKYW1EZXRlY3RvciAmSmFtRGV0ZWN0b3I6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIEphbURldGVjdG9yICZkZXRlY3RvciA9ICpzdGF0aWNfY2FzdDxKYW1EZXRlY3RvciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBKYW1EZXRlY3RvciAmZGV0ZWN0b3IgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0SmFtRGV0ZWN0b3IoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGRldGVjdG9yOworfQorCit9ICAvLyBuYW1lc3BhY2UgVXRpbHMKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdXRpbHMvamFtX2RldGVjdG9yLmhwcCBiL3NyYy9jb3JlL3V0aWxzL2phbV9kZXRlY3Rvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzMTRlMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3V0aWxzL2phbV9kZXRlY3Rvci5ocHAKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBqYW0gZGV0ZWN0b3IuCisgKi8KKworI2lmbmRlZiBKQU1fREVURUNUT1JfSFBQXworI2RlZmluZSBKQU1fREVURUNUT1JfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworCituYW1lc3BhY2UgVXRpbHMgeworCitjbGFzcyBKYW1EZXRlY3RvcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCBpZiBqYW0gc3RhdGUgY2hhbmdlcyAoYXNzdW1pbmcgamFtbWluZyBkZXRlY3Rpb24gaXMgZW5hYmxlZCkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSmFtU3RhdGUgIGB0cnVlYCBpZiBqYW0gaXMgZGV0ZWN0ZWQsIGBmYWxzZWAgaWYgamFtIGlzIGNsZWFyZWQuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqSGFuZGxlcikoYm9vbCBhSmFtU3RhdGUsIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGV4cGxpY2l0IEphbURldGVjdG9yKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogU3RhcnQgdGhlIGphbW1pbmcgZGV0ZWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUhhbmRsZXIgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gamFtbWluZyBpcyBkZXRlY3RlZC4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBqYW1taW5nIGRldGVjdGlvbi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgICAgICBKYW0gZGV0ZWN0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQgYmVmb3JlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdGFydChIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBTdG9wIHRoZSBqYW1taW5nIGRldGVjdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBqYW1taW5nIGRldGVjdGlvbi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgICAgICBKYW0gZGV0ZWN0aW9uIGlzIGFscmVhZHkgc3RvcHBlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RvcCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIEdldCB0aGUgSmFtIERldGVjdGlvbiBTdGF0dXMKKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBKYW0gRGV0ZWN0aW9uIHN0YXR1cyAodHJ1ZSBpZiBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UpLgorICAgICAqLworICAgIGJvb2wgSXNFbmFibGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1FbmFibGVkOyB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgamFtIHN0YXRlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGphbW1pbmcgc3RhdGUgKGB0cnVlYCBpZiBqYW0gaXMgZGV0ZWN0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlKS4KKyAgICAgKi8KKyAgICBib29sIEdldFN0YXRlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1KYW1TdGF0ZTsgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBKYW0gRGV0ZWN0aW9uIFJTU0kgVGhyZXNob2xkIChpbiBkQm0pLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJzc2lUaHJlc2hvbGQgIFRoZSBSU1NJIHRocmVzaG9sZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSB0aHJlc2hvbGQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFJzc2lUaHJlc2hvbGQoaW50OF90IGFUaHJlc2hvbGQpOworCisgICAgLyoqCisgICAgICogR2V0IHRoZSBKYW0gRGV0ZWN0aW9uIFJTU0kgVGhyZXNob2xkIChpbiBkQm0pLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEphbSBEZXRlY3Rpb24gUlNTSSBUaHJlc2hvbGQuCisgICAgICovCisgICAgaW50OF90IEdldFJzc2lUaHJlc2hvbGQodm9pZCkgY29uc3QgeyByZXR1cm4gbVJzc2lUaHJlc2hvbGQ7IH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgSmFtIERldGVjdGlvbiBEZXRlY3Rpb24gV2luZG93IChpbiBzZWNvbmRzKS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFXaW5kb3cgICAgICAgICAgICBUaGUgSmFtIERldGVjdGlvbiB3aW5kb3cgKHZhbGlkIHJhbmdlIGlzIDEgdG8gNjMpCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgd2luZG93LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgZ2l2ZW4gaW5wdXQgcGFyYW1ldGVyIG5vdCB3aXRoaW4gdmFsaWQgcmFuZ2UgKDEtNjMpCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFdpbmRvdyh1aW50OF90IGFXaW5kb3cpOworCisgICAgLyoqCisgICAgICogR2V0IHRoZSBKYW0gRGV0ZWN0aW9uIERldGVjdGlvbiBXaW5kb3cgKGluIHNlY29uZHMpLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEphbSBEZXRlY3Rpb24gV2luZG93LgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0V2luZG93KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1XaW5kb3c7IH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgSmFtIERldGVjdGlvbiBCdXN5IFBlcmlvZCAoaW4gc2Vjb25kcykuCisgICAgICoKKyAgICAgKiBUaGUgbnVtYmVyIG9mIGFnZ3JlZ2F0ZSBzZWNvbmRzIHdpdGhpbiB0aGUgZGV0ZWN0aW9uIHdpbmRvdyB3aGVyZSB0aGUgUlNTSSBtdXN0IGJlIGFib3ZlCisgICAgICogdGhyZXNob2xkIHRvIHRyaWdnZXIgZGV0ZWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUJ1c3lQZXJpb2QgICAgICAgICAgVGhlIEphbSBEZXRlY3Rpb24gYnVzeSBwZXJpb2QgKHNob3VsZCBiZSBub24temVybyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gSmFtIERldGVjdGlvbiBXaW5kb3cpCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSB3aW5kb3cuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgICAgVGhlIGdpdmVuIGlucHV0IGlzIG5vdCB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRCdXN5UGVyaW9kKHVpbnQ4X3QgYUJ1c3lQZXJpb2QpOworCisgICAgLyoqCisgICAgICogR2V0IHRoZSBKYW0gRGV0ZWN0aW9uIEJ1c3kgUGVyaW9kIChpbiBzZWNvbmRzKQorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEphbSBEZXRlY3Rpb24gQnVzeSBQZXJpb2QKKyAgICAgKi8KKyAgICB1aW50OF90IEdldEJ1c3lQZXJpb2Qodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1c3lQZXJpb2Q7IH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VycmVudCBoaXN0b3J5IGJpdG1hcC4KKyAgICAgKgorICAgICAqIFRoaXMgdmFsdWUgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBzdGF0ZSBvZiBqYW1taW5nIGRldGVjdGlvbgorICAgICAqIG1vZHVsZSBmb3IgbW9uaXRvcmluZy9kZWJ1Z2dpbmcgcHVycG9zZS4gSXQgcHJvdmlkZXMgYSA2NC1iaXQgdmFsdWUgd2hlcmUKKyAgICAgKiBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byBvbmUgc2Vjb25kIGludGVydmFsIHN0YXJ0aW5nIHdpdGggYml0IDAgZm9yIHRoZQorICAgICAqIG1vc3QgcmVjZW50IGludGVydmFsIGFuZCBiaXQgNjMgZm9yIHRoZSBvbGRlc3QgaW50ZXJ2YWxzICg2MyBlYXJsaWVyKS4KKyAgICAgKiBUaGUgYml0IGlzIHNldCB0byAxIGlmIHRoZSBqYW1taW5nIGRldGVjdGlvbiBtb2R1bGUgb2JzZXJ2ZWQvZGV0ZWN0ZWQKKyAgICAgKiBoaWdoIHNpZ25hbCBsZXZlbCBkdXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgb25lIHNlY29uZCBpbnRlcnZhbC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGhpc3RvcnkgYml0bWFwLgorICAgICAqLworICAgIHVpbnQ2NF90IEdldEhpc3RvcnlCaXRtYXAodm9pZCkgY29uc3QgeyByZXR1cm4gbUhpc3RvcnlCaXRtYXA7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworICAgIHZvaWQgVXBkYXRlSGlzdG9yeShib29sIGFUaHJlc2hvbGRFeGNlZWRlZCk7CisgICAgdm9pZCBVcGRhdGVKYW1TdGF0ZSh2b2lkKTsKKyAgICBzdGF0aWMgSmFtRGV0ZWN0b3IgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4V2luZG93ICAgICAgICAgICAgICA9IDYzLCAgIC8vIE1heCB3aW5kb3cgc2l6ZQorICAgICAgICBrRGVmYXVsdFJzc2lUaHJlc2hvbGQgICA9IDAsCisKKyAgICAgICAga01heFNhbXBsZUludGVydmFsICAgICAgPSAyNTYsICAvLyBpbiBtcworICAgICAgICBrTWluU2FtcGxlSW50ZXJ2YWwgICAgICA9IDIsICAgIC8vIGluIG1zCisgICAgICAgIGtNYXhSYW5kb21EZWxheSAgICAgICAgID0gNCwgICAgLy8gaW4gbXMKKyAgICAgICAga09uZVNlY29uZEludGVydmFsICAgICAgPSAxMDAwICAvLyBpbiBtcworCisgICAgfTsKKworICAgIEhhbmRsZXIgICAgICBtSGFuZGxlcjsgICAgICAgICAgICAgICAgICAvLyBIYW5kbGVyL2NhbGxiYWNrIHRvIGluZm9ybSBhYm91dCBqYW1taW5nIHN0YXRlCisgICAgdm9pZCAgICAgICAgKm1Db250ZXh0OyAgICAgICAgICAgICAgICAgIC8vIENvbnRleHQgZm9yIGhhbmRsZXIvY2FsbGJhY2sKKyAgICBpbnQ4X3QgICAgICAgbVJzc2lUaHJlc2hvbGQ7ICAgICAgICAgICAgLy8gUlNTSSB0aHJlc2hvbGQgZm9yIGphbSBkZXRlY3Rpb24KKyAgICBUaW1lciAgICAgICAgbVRpbWVyOyAgICAgICAgICAgICAgICAgICAgLy8gUlNTSSBzYW1wbGUgdGltZXIKKyAgICB1aW50NjRfdCAgICAgbUhpc3RvcnlCaXRtYXA7ICAgICAgICAgICAgLy8gSGlzdG9yeSBiaXRtYXAsIGVhY2ggYml0IGNvcnJlc3BvbmQgdG8gMSBzZWMgaW50ZXJ2YWwKKyAgICB1aW50MzJfdCAgICAgbUN1clNlY29uZFN0YXJ0VGltZTsgICAgICAgLy8gU3RhcnQgdGltZSBmb3IgY3VycmVudCAxIHNlYyBpbnRlcnZhbAorICAgIHVpbnQxNl90ICAgICBtU2FtcGxlSW50ZXJ2YWw7ICAgICAgICAgICAvLyBDdXJyZW50IHNhbXBsZSBpbnRlcnZhbAorICAgIHVpbnQ4X3QgICAgICBtV2luZG93IDogNjsgICAgICAgICAgICAgICAvLyBXaW5kb3cgKGluIHNlYykgdG8gbW9uaXRvciBqYW1taW5nCisgICAgdWludDhfdCAgICAgIG1CdXN5UGVyaW9kIDogNjsgICAgICAgICAgIC8vIEJ1c3lQZXJpb2QgKGluIHNlYykgd2l0aCBtV2luZG93IHRvIGFsZXJ0IGphbW1pbmcKKyAgICBib29sICAgICAgICAgbUVuYWJsZWQgOiAxOyAgICAgICAgICAgICAgLy8gSWYgamFtIGRldGVjdGlvbiBpcyBlbmFibGVkCisgICAgYm9vbCAgICAgICAgIG1BbHdheXNBYm92ZVRocmVzaG9sZCA6IDE7IC8vIFN0YXRlIGZvciBjdXJyZW50IDEgc2VjIGludGVydmFsCisgICAgYm9vbCAgICAgICAgIG1KYW1TdGF0ZSA6IDE7ICAgICAgICAgICAgIC8vIEN1cnJlbnQgamFtIHN0YXRlCit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBVdGlscworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gSkFNX0RFVEVDVE9SX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3V0aWxzL21pc3Npbmdfc3RybGNhdC5jIGIvc3JjL2NvcmUvdXRpbHMvbWlzc2luZ19zdHJsY2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc1MjY3YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3V0aWxzL21pc3Npbmdfc3RybGNhdC5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworc2l6ZV90IG1pc3Npbmdfc3RybGNhdChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzaXplKQoreworICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oZGVzdCk7CisKKyAgICBpZiAobGVuIDwgc2l6ZSAtIDEpCisgICAgeworICAgICAgICByZXR1cm4gKGxlbiArIHN0cmxjcHkoZGVzdCArIGxlbiwgc3JjLCBzaXplIC0gbGVuKSk7CisgICAgfQorCisgICAgcmV0dXJuIGxlbiArIHN0cmxlbihzcmMpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdXRpbHMvbWlzc2luZ19zdHJsY3B5LmMgYi9zcmMvY29yZS91dGlscy9taXNzaW5nX3N0cmxjcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTJiNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdXRpbHMvbWlzc2luZ19zdHJsY3B5LmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCitzaXplX3QgbWlzc2luZ19zdHJsY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpemUpCit7CisgICAgY29uc3Qgc2l6ZV90IHNsZW4gPSBzdHJsZW4oc3JjKTsKKworICAgIGlmIChzaXplICE9IDApCisgICAgeworICAgICAgICBzaXplLS07CisKKyAgICAgICAgaWYgKHNsZW4gPCBzaXplKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplID0gc2xlbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzcmMsIHNpemUpOworICAgICAgICB9CisKKyAgICAgICAgZGVzdFtzaXplXSA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHNsZW47Cit9CmRpZmYgLS1naXQgYS9zcmMvY29yZS91dGlscy9taXNzaW5nX3N0cm5sZW4uYyBiL3NyYy9jb3JlL3V0aWxzL21pc3Npbmdfc3Rybmxlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMWNlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS91dGlscy9taXNzaW5nX3N0cm5sZW4uYwpAQCAtMCwwICsxLDQyIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKK3NpemVfdCBtaXNzaW5nX3N0cm5sZW4oY29uc3QgY2hhciAqcywgc2l6ZV90IG1heGxlbikKK3sKKyAgICBzaXplX3QgcmV0OworCisgICAgZm9yIChyZXQgPSAwOyAocmV0IDwgbWF4bGVuKSAmJiAoc1tyZXRdICE9IDApOyByZXQrKykKKyAgICB7CisgICAgICAgIC8vIEVtcHR5IGxvb3AuCisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3V0aWxzL3NsYWFjX2FkZHJlc3MuY3BwIGIvc3JjL2NvcmUvdXRpbHMvc2xhYWNfYWRkcmVzcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2ZTMxMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3V0aWxzL3NsYWFjX2FkZHJlc3MuY3BwCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBUaHJlYWQgSVB2NiBnbG9iYWwgYWRkcmVzc2VzIGNvbmZpZ3VyYXRpb24gdXRpbGl0aWVzLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAic2xhYWNfYWRkcmVzcy5ocHAiCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjcnlwdG8vc2hhMjU2LmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIFV0aWxzIHsKKwordm9pZCBTbGFhYzo6VXBkYXRlQWRkcmVzc2VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzZXMsIHVpbnQzMl90IGFOdW1BZGRyZXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWlkQ3JlYXRvciBhSWlkQ3JlYXRvciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIG90Qm9yZGVyUm91dGVyQ29uZmlnIGNvbmZpZzsKKworICAgIC8vIHJlbW92ZSBhZGRyZXNzZXMKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFOdW1BZGRyZXNzZXM7IGkrKykKKyAgICB7CisgICAgICAgIG90TmV0aWZBZGRyZXNzICphZGRyZXNzID0gJmFBZGRyZXNzZXNbaV07CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKworICAgICAgICBpZiAoIWFkZHJlc3MtPm1WYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciA9IE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklUOworCisgICAgICAgIHdoaWxlIChvdE5ldERhdGFHZXROZXh0T25NZXNoUHJlZml4KGFJbnN0YW5jZSwgJml0ZXJhdG9yLCAmY29uZmlnKSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29uZmlnLm1TbGFhYyA9PSBmYWxzZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG90SXA2UHJlZml4TWF0Y2goJmNvbmZpZy5tUHJlZml4Lm1QcmVmaXgsICZhZGRyZXNzLT5tQWRkcmVzcykgPj0gY29uZmlnLm1QcmVmaXgubUxlbmd0aCAmJgorICAgICAgICAgICAgICAgIGNvbmZpZy5tUHJlZml4Lm1MZW5ndGggPT0gYWRkcmVzcy0+bVByZWZpeExlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICB7CisgICAgICAgICAgICBvdElwNlJlbW92ZVVuaWNhc3RBZGRyZXNzKGFJbnN0YW5jZSwgJmFkZHJlc3MtPm1BZGRyZXNzKTsKKyAgICAgICAgICAgIGFkZHJlc3MtPm1WYWxpZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gYWRkIGFkZHJlc3NlcworICAgIGl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisKKyAgICB3aGlsZSAob3ROZXREYXRhR2V0TmV4dE9uTWVzaFByZWZpeChhSW5zdGFuY2UsICZpdGVyYXRvciwgJmNvbmZpZykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKworICAgICAgICBpZiAoY29uZmlnLm1TbGFhYyA9PSBmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFOdW1BZGRyZXNzZXM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgb3ROZXRpZkFkZHJlc3MgKmFkZHJlc3MgPSAmYUFkZHJlc3Nlc1tpXTsKKworICAgICAgICAgICAgaWYgKCFhZGRyZXNzLT5tVmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChvdElwNlByZWZpeE1hdGNoKCZjb25maWcubVByZWZpeC5tUHJlZml4LCAmYWRkcmVzcy0+bUFkZHJlc3MpID49IGNvbmZpZy5tUHJlZml4Lm1MZW5ndGggJiYKKyAgICAgICAgICAgICAgICBjb25maWcubVByZWZpeC5tTGVuZ3RoID09IGFkZHJlc3MtPm1QcmVmaXhMZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhTnVtQWRkcmVzc2VzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3ROZXRpZkFkZHJlc3MgKmFkZHJlc3MgPSAmYUFkZHJlc3Nlc1tpXTsKKworICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzLT5tVmFsaWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtZW1zZXQoYWRkcmVzcywgMCwgc2l6ZW9mKCphZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCZhZGRyZXNzLT5tQWRkcmVzcywgJmNvbmZpZy5tUHJlZml4Lm1QcmVmaXgsIDgpOworCisgICAgICAgICAgICAgICAgYWRkcmVzcy0+bVByZWZpeExlbmd0aCA9IGNvbmZpZy5tUHJlZml4Lm1MZW5ndGg7CisgICAgICAgICAgICAgICAgYWRkcmVzcy0+bVByZWZlcnJlZCA9IGNvbmZpZy5tUHJlZmVycmVkOworICAgICAgICAgICAgICAgIGFkZHJlc3MtPm1WYWxpZCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAoYUlpZENyZWF0b3IoYUluc3RhbmNlLCBhZGRyZXNzLCBhQ29udGV4dCkgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVJhbmRvbUlpZChhSW5zdGFuY2UsIGFkZHJlc3MsIGFDb250ZXh0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdElwNkFkZFVuaWNhc3RBZGRyZXNzKGFJbnN0YW5jZSwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK290RXJyb3IgU2xhYWM6OkNyZWF0ZVJhbmRvbUlpZChvdEluc3RhbmNlICosIG90TmV0aWZBZGRyZXNzICphQWRkcmVzcywgdm9pZCAqKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBzaXplb2YoYUFkZHJlc3NbaV0ubUFkZHJlc3MpIC0gT1RfSVA2X0lJRF9TSVpFOyBpIDwgc2l6ZW9mKGFBZGRyZXNzW2ldLm1BZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgYUFkZHJlc3MtPm1BZGRyZXNzLm1GaWVsZHMubThbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihvdFBsYXRSYW5kb21HZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgU2VtYW50aWNhbGx5T3BhcXVlSWlkR2VuZXJhdG9yOjpDcmVhdGVJaWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDw9IGtNYXhSZXRyaWVzOyBpKyspCisgICAgeworICAgICAgICBlcnJvciA9IENyZWF0ZUlpZE9uY2UoYUluc3RhbmNlLCBhQWRkcmVzcyk7CisgICAgICAgIFZlcmlmeU9yRXhpdChlcnJvciA9PSBPVF9FUlJPUl9JUDZfQUREUkVTU19DUkVBVElPTl9GQUlMVVJFKTsKKworICAgICAgICBtRGFkQ291bnRlcisrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgU2VtYW50aWNhbGx5T3BhcXVlSWlkR2VuZXJhdG9yOjpDcmVhdGVJaWRPbmNlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENyeXB0bzo6U2hhMjU2IHNoYTI1NjsKKyAgICB1aW50OF90IGhhc2hbQ3J5cHRvOjpTaGEyNTY6OmtIYXNoU2l6ZV07CisgICAgSXA2OjpBZGRyZXNzICphZGRyZXNzID0gc3RhdGljX2Nhc3Q8SXA2OjpBZGRyZXNzICo+KCZhQWRkcmVzcy0+bUFkZHJlc3MpOworCisgICAgc2hhMjU2LlN0YXJ0KCk7CisKKyAgICBzaGEyNTYuVXBkYXRlKGFBZGRyZXNzLT5tQWRkcmVzcy5tRmllbGRzLm04LCBhQWRkcmVzcy0+bVByZWZpeExlbmd0aCAvIDgpOworCisgICAgVmVyaWZ5T3JFeGl0KG1JbnRlcmZhY2VJZCAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgc2hhMjU2LlVwZGF0ZShtSW50ZXJmYWNlSWQsIG1JbnRlcmZhY2VJZExlbmd0aCk7CisKKyAgICBpZiAobU5ldHdvcmtJZExlbmd0aCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChtTmV0d29ya0lkICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICAgICAgc2hhMjU2LlVwZGF0ZShtTmV0d29ya0lkLCBtTmV0d29ya0lkTGVuZ3RoKTsKKyAgICB9CisKKyAgICBzaGEyNTYuVXBkYXRlKHN0YXRpY19jYXN0PHVpbnQ4X3QgKj4oJm1EYWRDb3VudGVyKSwgc2l6ZW9mKG1EYWRDb3VudGVyKSk7CisKKyAgICBWZXJpZnlPckV4aXQobVNlY3JldEtleSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgc2hhMjU2LlVwZGF0ZShtU2VjcmV0S2V5LCBtU2VjcmV0S2V5TGVuZ3RoKTsKKworICAgIHNoYTI1Ni5GaW5pc2goaGFzaCk7CisKKyAgICBtZW1jcHkoJmFBZGRyZXNzLT5tQWRkcmVzcy5tRmllbGRzLm04W09UX0lQNl9BRERSRVNTX1NJWkUgLSBPVF9JUDZfSUlEX1NJWkVdLAorICAgICAgICAgICAmaGFzaFtzaXplb2YoaGFzaCkgLSBPVF9JUDZfSUlEX1NJWkVdLCBPVF9JUDZfSUlEX1NJWkUpOworCisgICAgVmVyaWZ5T3JFeGl0KCFJc0FkZHJlc3NSZWdpc3RlcmVkKGFJbnN0YW5jZSwgYUFkZHJlc3MpLCBlcnJvciA9IE9UX0VSUk9SX0lQNl9BRERSRVNTX0NSRUFUSU9OX0ZBSUxVUkUpOworICAgIFZlcmlmeU9yRXhpdCghYWRkcmVzcy0+SXNJaWRSZXNlcnZlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lQNl9BRERSRVNTX0NSRUFUSU9OX0ZBSUxVUkUpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworYm9vbCBTZW1hbnRpY2FsbHlPcGFxdWVJaWRHZW5lcmF0b3I6OklzQWRkcmVzc1JlZ2lzdGVyZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUNyZWF0ZWRBZGRyZXNzKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgY29uc3Qgb3ROZXRpZkFkZHJlc3MgKmFkZHJlc3MgPSBvdElwNkdldFVuaWNhc3RBZGRyZXNzZXMoYUluc3RhbmNlKTsKKworICAgIHdoaWxlIChhZGRyZXNzICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAoMCA9PSBtZW1jbXAoYUNyZWF0ZWRBZGRyZXNzLT5tQWRkcmVzcy5tRmllbGRzLm04LCBhZGRyZXNzLT5tQWRkcmVzcy5tRmllbGRzLm04LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFkZHJlc3MtPm1BZGRyZXNzLm1GaWVsZHMpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhyZXN1bHQgPSB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLT5tTmV4dDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCit9ICAvLyBuYW1lc3BhY2UgU2xhYWMKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdXRpbHMvc2xhYWNfYWRkcmVzcy5ocHAgYi9zcmMvY29yZS91dGlscy9zbGFhY19hZGRyZXNzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTgxNmY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdXRpbHMvc2xhYWNfYWRkcmVzcy5ocHAKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBUaHJlYWQgZ2xvYmFsIElQdjYgYWRkcmVzcyBjb25maWd1cmF0aW9uIHdpdGggU0xBQUMuCisgKi8KKworI2lmbmRlZiBTTEFBQ19BRERSRVNTX0hQUF8KKyNkZWZpbmUgU0xBQUNfQUREUkVTU19IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBVdGlscyB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1zbGFhYy1hZGRyZXNzCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBUaHJlYWQgZ2xvYmFsIElQdjYgYWRkcmVzcyBjb25maWd1cmF0aW9uIHdpdGggU0xBQUMuCisgKgorICogQHsKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgU0xBQUMgdXRpbGl0eSBmb3IgVGhyZWFkIHByb3RvY29sLgorICoKKyAqLworY2xhc3MgU2xhYWMKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gU0xBQUMgY3JlYXRlcyBnbG9iYWwgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgICAgICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3MgICBBIHBvaW50ZXIgdG8gc3RydWN0dXJlIGNvbnRhaW5pbmcgSVB2NiBhZGRyZXNzIGZvciB3aGljaCBJSUQgaXMgYmVpbmcgY3JlYXRlZC4KKyAgICAgKiBAcGFyYW1baW5dICAgICBhQ29udGV4dCAgIEEgcG9pbnRlciB0byBjcmVhdG9yLXNwZWNpZmljIGNvbnRleHQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgIGlmIGdlbmVyYXRlZCB2YWxpZCBJSUQuCisgICAgICogQHJldHZhbCAgT1RfRVJST1JfRkFJTEVEICBpZiBjcmVhdGluZyBJSUQgZmFpbGVkLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiBvdEVycm9yKCpJaWRDcmVhdG9yKShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQWRkcmVzcywgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiB1cGRhdGUgYWRkcmVzc2VzIHRoYXQgc2hhbGwgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHVzaW5nIFNMQUFDLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgICAgYUluc3RhbmNlICAgICBBIHBvaW50ZXIgdG8gb3BlblRocmVhZCBpbnN0YW5jZS4KKyAgICAgKiBAcGFyYW1baW5vdXRdICBhQWRkcmVzc2VzICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBjb250YWluaW5nIGFkZHJlc3NlcyBjcmVhdGVkIGJ5IHRoaXMgbW9kdWxlLgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFOdW1BZGRyZXNzZXMgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhQWRkcmVzc2VzIGFycmF5LgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFJaWRDcmVhdG9yICAgQSBwb2ludGVyIHRvIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSBJSUQgZm9yIElQdjYgYWRkcmVzc2VzLgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFDb250ZXh0ICAgICAgQSBwb2ludGVyIHRvIElJRCBjcmVhdG9yLXNwZWNpZmljIGNvbnRleHQgZGF0YS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIFVwZGF0ZUFkZHJlc3NlcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQWRkcmVzc2VzLCB1aW50MzJfdCBhTnVtQWRkcmVzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJaWRDcmVhdG9yIGFJaWRDcmVhdG9yLCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgcmFuZG9tbHkgZ2VuZXJhdGVkIElQdjYgSUlEIGZvciBnaXZlbiBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFBZGRyZXNzICAgQSBwb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIElQdjYgYWRkcmVzcyBmb3Igd2hpY2ggSUlEIGlzIGJlaW5nIGNyZWF0ZWQuCisgICAgICogQHBhcmFtW2luXSAgICAgYUNvbnRleHQgICBVbnVzZWQgcG9pbnRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgIEdlbmVyYXRlZCB2YWxpZCBJSUQuCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgQ3JlYXRlUmFuZG9tSWlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzLCB2b2lkICphQ29udGV4dCk7Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgTWV0aG9kIGZvciBHZW5lcmF0aW5nIFNlbWFudGljYWxseSBPcGFxdWUgSUlEcyB3aXRoIElQdjYgU0xBQUMgKFJGQyA3MjE3KS4KKyAqCisgKi8KK2NsYXNzIFNlbWFudGljYWxseU9wYXF1ZUlpZEdlbmVyYXRvcjogcHVibGljIG90U2VtYW50aWNhbGx5T3BhcXVlSWlkR2VuZXJhdG9yRGF0YQoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgc2VtYW50aWNhbGx5IG9wYXF1ZSBJSUQgZm9yIGdpdmVuIElQdjYgYWRkcmVzcyBhbmQgY29udGV4dC4KKyAgICAgKgorICAgICAqIFRoZSBnZW5lcmF0b3Igc3RhcnRzIHdpdGggREFEIGNvdW50ZXIgcHJvdmlkZWQgYXMgYSBjbGFzcyBtZW1iZXIgZmllbGQuIFRoZSBEQUQgY291bnRlciBpcyBhdXRvbWF0aWNhbGx5CisgICAgICogaW5jcmVtZW50ZWQgYXQgbW9zdCBrTWF4UmV0cmllcyB0aW1lcyBpZiBjcmVhdGlvbiBvZiB2YWxpZCBJUHY2IGFkZHJlc3MgZmFpbHMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFBZGRyZXNzICAgQSBwb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIElQdjYgYWRkcmVzcyBmb3Igd2hpY2ggSUlEIGlzIGJlaW5nIGNyZWF0ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgdmFsaWQgSUlELgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgICAgICAgICAgICAgICAgIEFueSBnaXZlbiBwYXJhbWV0ZXIgaXMgaW52YWxpZC4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9JUDZfQUREUkVTU19DUkVBVElPTl9GQUlMVVJFICBDb3VsZCBub3QgZ2VuZXJhdGUgSUlEIGR1ZSB0byBSRkMgNzIxNyByZXN0cmljdGlvbnMuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIENyZWF0ZUlpZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQWRkcmVzcyk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heFJldHJpZXMgPSAyNTUsCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgc2VtYW50aWNhbGx5IG9wYXF1ZSBJSUQgZm9yIGdpdmVuIGFyZ3VtZW50cy4KKyAgICAgKgorICAgICAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBJSUQgb25seSBmb3IgZ2l2ZW4gREFEIGNvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFBZGRyZXNzICAgQSBwb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIElQdjYgYWRkcmVzcyBmb3Igd2hpY2ggSUlEIGlzIGJlaW5nIGNyZWF0ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgdmFsaWQgSUlELgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgICAgICAgICAgICAgICAgIEFueSBnaXZlbiBwYXJhbWV0ZXIgaXMgaW52YWxpZC4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9JUDZfQUREUkVTU19DUkVBVElPTl9GQUlMVVJFICBDb3VsZCBub3QgZ2VuZXJhdGUgSUlEIGR1ZSB0byBSRkMgNzIxNyByZXN0cmljdGlvbnMuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIENyZWF0ZUlpZE9uY2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIGNyZWF0ZWQgSVB2NiBhZGRyZXNzIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgICAgICogQHBhcmFtW2luXSAgYUNyZWF0ZWRBZGRyZXNzICBBIHBvaW50ZXIgdG8gY3JlYXRlZCBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsICB0cnVlICAgR2l2ZW4gYWRkcmVzcyBpcyBwcmVzZW50IGluIHRoZSBhZGRyZXNzIGxpc3QuCisgICAgICogQHJldHZhbCAgZmFsc2UgIEdpdmVuIGFkZHJlc3MgaXMgbWlzc2luZyBpbiB0aGUgYWRkcmVzcyBsaXN0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0FkZHJlc3NSZWdpc3RlcmVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFDcmVhdGVkQWRkcmVzcyk7Cit9OworCisvKioKKyAqIEB9CisgKi8KKworfSAgLy8gbmFtZXNwYWNlIFNsYWFjCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBTTEFBQ19BRERSRVNTX0hQUF8KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdXRpbHMvd3JhcF9zdGRib29sLmggYi9zcmMvY29yZS91dGlscy93cmFwX3N0ZGJvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDQ1ODI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdXRpbHMvd3JhcF9zdGRib29sLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaXMgYSB3cmFwcGVyIGZvciB0aGUgc3RhbmRhcmQgInN0cmluZy5oIiBmaWxlCisgKiAgIFRoZSBwdXJwb3NlIGlzIGFkZCBhbnkgbWlzc2luZyBmdW5jdGlvbiBwcm90b3R5cGVzIG5vdAorICogICBwcm92aWRlZCBieSBhIHNwZWNpZmljIGNvbXBpbGVyLgorICovCisKKyNpZiAhZGVmaW5lZChXUkFQX1NUREJPT0xfSCkKKyNkZWZpbmUgV1JBUF9TVERCT09MX0gKKworI2lmIEhBVkVfU1REQk9PTF9ICisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2Vsc2UKKworLyogU3VwcGx5IG91ciBvd24gKi8KKyNpZiBfX2NwbHVzcGx1cworLyogYysrIGhhcyBhIGJ1aWx0IGluIGJvb2wgKi8KKyNlbHNlCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBib29sIF9Cb29sCisjZWxzZQordHlwZWRlZiBfQm9vbCBib29sOworI2VuZGlmIC8vIHZpc3VhbCBzdHVkaW8gaGFzIGEgYm9vbAorCisjaWYgIWRlZmluZWQoX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQpCisjZGVmaW5lIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIDEKKyNkZWZpbmUgZmFsc2UgMAorI2RlZmluZSB0cnVlIDEKKyNlbmRpZiAvLyBib29sIGRlZmluZWQKKworI2VuZGlmIC8vIF9fY3BsdXNwbHVzCisKKyNlbmRpZiAvLyBIQVZFX1NUREJPT0xfSAorCisKKyNlbmRpZiAvLyBXUkFQX1NUREJPT0xfSApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdXRpbHMvd3JhcF9zdGRpbnQuaCBiL3NyYy9jb3JlL3V0aWxzL3dyYXBfc3RkaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViNThhNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3V0aWxzL3dyYXBfc3RkaW50LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZiAhZGVmaW5lZChXUkFQX1NURElOVF9IKQorI2RlZmluZSBXUkFQX1NURElOVF9ICisKKy8qIGdlbmVyYWxseSBhbGwgY29tcGlsZXJzIHN1cHBvcnQgdGhpcyAqLworLyogVmlzdWFsIFN0dWRpbyBvbmx5IGFmdGVyIFZTMjAxNSAoYWthOiAxOS4wMCkgKi8KKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA8IDE5MDApCisvKiB0eXBlcyBmcm9tIHRoaXMgcGFnZTogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yOWRoMXc3ei5hc3B4ICovCisKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ4ICB1aW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDE2IHVpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyIHVpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90OworCit0eXBlZGVmIF9faW50OCAgaW50OF90OwordHlwZWRlZiBfX2ludDE2IGludDE2X3Q7Cit0eXBlZGVmIF9faW50MzIgaW50MzJfdDsKK3R5cGVkZWYgX19pbnQ2NCBpbnQ2NF90OworCisjZWxzZQorLyogdXNlIHRoZSBjb21waWxlciBzdXBwbGllZCBzb2x1dGlvbiAqLworI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNlbmRpZiAvLyBXUkFQX1NURElOVF9ICmRpZmYgLS1naXQgYS9zcmMvY29yZS91dGlscy93cmFwX3N0cmluZy5oIGIvc3JjL2NvcmUvdXRpbHMvd3JhcF9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODZhNTQxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdXRpbHMvd3JhcF9zdHJpbmcuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBzdGFuZGFyZCAic3RyaW5nLmgiIGZpbGUKKyAqICAgU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSBhbGwgcmVxdWlyZWQgZnVuY3Rpb25zLCBzb21lIGRvIG5vdC4KKyAqICAgVGhpcyBzb2x2ZXMgdGhlIG1pc3NpbmcgZnVuY3Rpb25zIGluICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAqLworCisjaWYgIWRlZmluZWQoV1JBUF9TVFJJTkdfSCkKKyNkZWZpbmUgV1JBUF9TVFJJTkdfSAorCisvKiBzeXN0ZW0gcHJvdmlkZWQgc3RyaW5nLmggKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworCisvKiBUaGVzZSBhcmUgQyBmdW5jdGlvbnMgKi8KKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZSBXUkFQX0VYVEVSTl9DICBleHRlcm4gIkMiCisjZWxzZQorI2RlZmluZSBXUkFQX0VYVEVSTl9DICBleHRlcm4KKyNlbmRpZgorCisvKiBQcm90b3R5cGVzIGZvciBvdXIgbWlzc2luZyBmdW5jdGlvbiByZXBsYWNlbWVudHMgKi8KKworLyogU2VlOiBodHRwczovL3d3dy5mcmVlYnNkLm9yZy9jZ2kvbWFuLmNnaT9xdWVyeT1zdHJsY3B5ICovCitXUkFQX0VYVEVSTl9DIHNpemVfdCBtaXNzaW5nX3N0cmxjcHkoY2hhciAgICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRzdHNpemUpOworLyogU2VlOiBodHRwczovL3d3dy5mcmVlYnNkLm9yZy9jZ2kvbWFuLmNnaT9xdWVyeT1zdHJsY2F0ICovCitXUkFQX0VYVEVSTl9DIHNpemVfdCBtaXNzaW5nX3N0cmxjYXQoY2hhciAgICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRzdHNpemUpOworLyogU2VlOiBodHRwczovL3d3dy5mcmVlYnNkLm9yZy9jZ2kvbWFuLmNnaT9xdWVyeT1zdHJubGVuICovCitXUkFQX0VYVEVSTl9DIHNpemVfdCBtaXNzaW5nX3N0cm5sZW4oY29uc3QgY2hhciAqcywgc2l6ZV90IG1heGxlbik7CisKKyN1bmRlZiBXUkFQX0VYVEVSTl9DCisKKworCisjaWYgKCFIQVZFX1NUUk5MRU4pCisjZGVmaW5lIHN0cm5sZW4oIFMsIE4gKSAgICAgbWlzc2luZ19zdHJubGVuKCBTLCBOICkKKyNlbmRpZgorCisjaWYgKCFIQVZFX1NUUkxDUFkpCisjZGVmaW5lIHN0cmxjcHkoIEQsIFMsIE4gKSAgbWlzc2luZ19zdHJsY3B5KCBELCBTLCBOICkKKyNlbmRpZgorCisjaWYgKCFIQVZFX1NUUkxDQVQpCisjZGVmaW5lIHN0cmxjYXQoIEQsIFMsIE4gKSAgbWlzc2luZ19zdHJsY2F0KCBELCBTLCBOICkKKyNlbmRpZgorCisjZW5kaWYgIC8vIFdSQVBfU1RSSU5HX0gKZGlmZiAtLWdpdCBhL3NyYy9kaWFnL01ha2VmaWxlLmFtIGIvc3JjL2RpYWcvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3MTdlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kaWFnL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNTMgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworbGliX0xJQlJBUklFUyAgICAgICAgICAgICAgICAgICAgICAgPSBsaWJvcGVudGhyZWFkLWRpYWcuYQorCitsaWJvcGVudGhyZWFkX2RpYWdfYV9DUFBGTEFHUyA9ICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYyAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICBcCisgICAgJChPUEVOVEhSRUFEX1RBUkdFVF9ERUZJTkVTKSAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2RpYWdfYV9TT1VSQ0VTICAgICAgICAgPSBcCisgICAgb3BlbnRocmVhZC1kaWFnLmNwcCAgICAgICAgICAgICAgICBcCisgICAgZGlhZ19wcm9jZXNzLmNwcCAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitub2luc3RfSEVBREVSUyAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgZGlhZ19wcm9jZXNzLmhwcCAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCitDTEVBTkZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQod2lsZGNhcmQgKi5nY2RhICouZ2NubykKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3NyYy9kaWFnL1JFQURNRS5tZCBiL3NyYy9kaWFnL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjZlM2NkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2RpYWcvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTQxIEBACisjIE9wZW5UaHJlYWQgRGlhZ25vc3RpY3MgTW9kdWxlIFJlZmVyZW5jZQorCitUaGUgT3BlblRocmVhZCBkaWFnbm9zdGljcyBtb2R1bGUgaXMgYSB0b29sIGZvciBkZWJ1Z2dpbmcgcGxhdGZvcm0gaGFyZHdhcmUgbWFudWFsbHksIGFuZCBpdCB3aWxsIGFsc28gYmUgdXNlZCBkdXJpbmcgbWFudWZhY3R1cmluZyBwcm9jZXNzLCB0byB2ZXJpZnkgcGxhdGZvcm0gaGFyZHdhcmUgcGVyZm9ybWFuY2UuCisKK1RoZSBkaWFnbm9zdGljcyBtb2R1bGUgc3VwcG9ydHMgY29tbW9uIGRpYWdub3N0aWNzIGZlYXR1cmVzIHRoYXQgYXJlIGxpc3RlZCBiZWxvdywgYW5kIGl0IGFsc28gcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGV4cGFuZGluZyBwbGF0Zm9ybSBzcGVjaWZpYyBkaWFnbm9zdGljcyBmZWF0dXJlcy4KKworCisjIyBDb21tb24gRGlhZ25vc3RpY3MgQ29tbWFuZCBMaXN0CisKKyogW2RpYWddKCNkaWFnKQorKiBbZGlhZyBzdGFydF0oI2RpYWctc3RhcnQpCisqIFtkaWFnIGNoYW5uZWxdKCNkaWFnLWNoYW5uZWwpCisqIFtkaWFnIHBvd2VyXSgjZGlhZy1wb3dlcikKKyogW2RpYWcgc2VuZF0oI2RpYWctc2VuZC1wYWNrZXRzLWxlbmd0aCkKKyogW2RpYWcgcmVwZWF0XSgjZGlhZy1yZXBlYXQtZGVsYXktbGVuZ3RoKQorKiBbZGlhZyBzbGVlcF0oI2RpYWctc2xlZXApCisqIFtkaWFnIHN0YXRzXSgjZGlhZy1zdGF0cykKKyogW2RpYWcgc3RvcF0oI2RpYWctc3RvcCkKKworCisjIyMgZGlhZworCitTaG93IGRpYWdub3N0aWNzIG1vZGUgc3RhdHVzLgorCitgYGBiYXNoCis+IGRpYWcKK2RpYWdub3N0aWNzIG1vZGUgaXMgZGlzYWJsZWQKK2BgYAorCisjIyMgZGlhZyBzdGFydAorCitTdGFydCBkaWFnbm9zdGljcyBtb2RlLgorCitgYGBiYXNoCis+IGRpYWcgc3RhcnQKK3N0YXJ0IGRpYWdub3N0aWNzIG1vZGUKK3N0YXR1cyAweDAwCitgYGAKKworIyMjIGRpYWcgY2hhbm5lbAorCitHZXQgdGhlIElFRUUgODAyLjE1LjQgQ2hhbm5lbCB2YWx1ZSBmb3IgZGlhZ25vc3RpY3MgbW9kdWxlLgorCitgYGBiYXNoCis+IGRpYWcgY2hhbm5lbAorY2hhbm5lbDogMTEKK2BgYAorCisjIyMgZGlhZyBjaGFubmVsIFw8Y2hhbm5lbFw+CisKK1NldCB0aGUgSUVFRSA4MDIuMTUuNCBDaGFubmVsIHZhbHVlIGZvciBkaWFnbm9zdGljcyBtb2R1bGUuCisKK2BgYGJhc2gKKz4gZGlhZyBjaGFubmVsIDExCitzZXQgY2hhbm5lbCB0byAxMQorc3RhdHVzIDB4MDAKK2BgYAorCisjIyMgZGlhZyBwb3dlcgorCitHZXQgdGhlIHR4IHBvd2VyIHZhbHVlKGRCbSkgZm9yIGRpYWdub3N0aWNzIG1vZHVsZS4KKworYGBgYmFzaAorPiBkaWFnIHBvd2VyCit0eCBwb3dlcjogLTEwIGRCbQorYGBgCisKKyMjIyBkaWFnIHBvd2VyIFw8cG93ZXJcPgorCitTZXQgdGhlIHR4IHBvd2VyIHZhbHVlKGRCbSkgZm9yIGRpYWdub3N0aWNzIG1vZHVsZS4KKworYGBgYmFzaAorPiBkaWFnIHBvd2VyIC0xMAorc2V0IHR4IHBvd2VyIHRvIC0xMCBkQm0KK3N0YXR1cyAweDAwCitgYGAKKworIyMjIGRpYWcgc2VuZCBcPHBhY2tldHNcPiBcPGxlbmd0aFw+CisKK1RyYW5zbWl0IGEgZml4ZWQgbnVtYmVyIG9mIHBhY2tldHMgd2l0aCBmaXhlZCBsZW5ndGguCisKK2BgYGJhc2gKKz4gZGlhZyBzZW5kIDIwIDEwMAorc2VuZGluZyAweDE0IHBhY2tldChzKSwgbGVuZ3RoIDB4NjQKK3N0YXR1cyAweDAwCitgYGAKKworIyMjIGRpYWcgcmVwZWF0IFw8ZGVsYXlcPiBcPGxlbmd0aFw+CisKK1RyYW5zbWl0IHBhY2tldHMgcmVwZWF0ZWRseSB3aXRoIGEgZml4ZWQgaW50ZXJ2YWwuCisKK2BgYGJhc2gKKz4gZGlhZyByZXBlYXQgMTAwIDEwMAorc2VuZGluZyBwYWNrZXRzIG9mIGxlbmd0aCAweDY0IGF0IHRoZSBkZWxheSBvZiAweDY0IG1zCitzdGF0dXMgMHgwMAorYGBgCisKKyMjIyBkaWFnIHJlcGVhdCBzdG9wCisKK1N0b3AgcmVwZWF0ZWQgcGFja2V0IHRyYW5zbWlzc2lvbi4KKworYGBgYmFzaAorPiBkaWFnIHJlcGVhdCBzdG9wCityZXBlYXRlZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzIHN0b3BwZWQKK3N0YXR1cyAweDAwCitgYGAKKworIyMjIGRpYWcgc2xlZXAKKworRW50ZXIgcmFkaW8gc2xlZXAgbW9kZS4KKworYGBgYmFzaAorPiBkaWFnIHNsZWVwCitzbGVlcGluZyBub3cuLi4KK2BgYAorCisjIyMgZGlhZyBzdGF0cworCitQcmludCBzdGF0aXN0aWNzIGR1cmluZyBkaWFnbm9zdGljcyBtb2RlLgorCitgYGBiYXNoCis+IGRpYWcgc3RhdHMKK3JlY2VpdmVkIHBhY2tldHM6IDEwCitzZW50IHBhY2tldHM6IDEwCitmaXJzdCByZWNlaXZlZCBwYWNrZXQ6IHJzc2k9LTY1LCBscWk9MTAxCitgYGAKKworIyMjIGRpYWcgc3RvcAorCitTdG9wIGRpYWdub3N0aWNzIG1vZGUgYW5kIHByaW50IHN0YXRpc3RpY3MuCisKK2BgYGJhc2gKKz4gZGlhZyBzdG9wCityZWNlaXZlZCBwYWNrZXRzOiAxMAorc2VudCBwYWNrZXRzOiAxMAorZmlyc3QgcmVjZWl2ZWQgcGFja2V0OiByc3NpPS02NSwgbHFpPTEwMQorCitzdG9wIGRpYWdub3N0aWNzIG1vZGUKK3N0YXR1cyAweDAwCitgYGAKKwpkaWZmIC0tZ2l0IGEvc3JjL2RpYWcvZGlhZ19wcm9jZXNzLmNwcCBiL3NyYy9kaWFnL2RpYWdfcHJvY2Vzcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY1ZTNhOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kaWFnL2RpYWdfcHJvY2Vzcy5jcHAKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGRpYWdub3N0aWNzIG1vZHVsZS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImRpYWdfcHJvY2Vzcy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIERpYWdub3N0aWNzIHsKKworY29uc3Qgc3RydWN0IENvbW1hbmQgRGlhZzo6c0NvbW1hbmRzW10gPQoreworICAgIHsgInN0YXJ0IiwgJlByb2Nlc3NTdGFydCB9LAorICAgIHsgInN0b3AiLCAmUHJvY2Vzc1N0b3AgfSwKKyAgICB7ICJjaGFubmVsIiwgJlByb2Nlc3NDaGFubmVsIH0sCisgICAgeyAicG93ZXIiLCAmUHJvY2Vzc1Bvd2VyIH0sCisgICAgeyAic2VuZCIsICZQcm9jZXNzU2VuZCB9LAorICAgIHsgInJlcGVhdCIsICZQcm9jZXNzUmVwZWF0IH0sCisgICAgeyAic2xlZXAiLCAmUHJvY2Vzc1NsZWVwIH0sCisgICAgeyAic3RhdHMiLCAmUHJvY2Vzc1N0YXRzIH0sCit9OworCitjaGFyIERpYWc6OnNEaWFnT3V0cHV0W01BWF9ESUFHX09VVFBVVF07CitzdHJ1Y3QgRGlhZ1N0YXRzIERpYWc6OnNTdGF0czsKKworaW50OF90IERpYWc6OnNUeFBvd2VyOwordWludDhfdCBEaWFnOjpzQ2hhbm5lbDsKK3VpbnQ4X3QgRGlhZzo6c1R4TGVuOwordWludDMyX3QgRGlhZzo6c1R4UGVyaW9kOwordWludDMyX3QgRGlhZzo6c1R4UGFja2V0czsKK290UmFkaW9GcmFtZSAqIERpYWc6OnNUeFBhY2tldDsKK2Jvb2wgRGlhZzo6c1JlcGVhdEFjdGl2ZTsKKworb3RJbnN0YW5jZSAqRGlhZzo6c0NvbnRleHQ7CisKK3ZvaWQgRGlhZzo6SW5pdChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgc0NvbnRleHQgPSBhSW5zdGFuY2U7CisgICAgc0NoYW5uZWwgPSAyMDsKKyAgICBzVHhQb3dlciA9IDA7CisgICAgc1R4UGVyaW9kID0gMDsKKyAgICBzVHhMZW4gPSAwOworICAgIHNUeFBhY2tldHMgPSAwOworICAgIHNSZXBlYXRBY3RpdmUgPSBmYWxzZTsKKyAgICBtZW1zZXQoJnNTdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBEaWFnU3RhdHMpKTsKKyAgICBzVHhQYWNrZXQgPSBvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKHNDb250ZXh0KTsKKyAgICBvdFBsYXREaWFnQ2hhbm5lbFNldChzQ2hhbm5lbCk7CisgICAgb3RQbGF0RGlhZ1R4UG93ZXJTZXQoc1R4UG93ZXIpOworfQorCitjaGFyICpEaWFnOjpQcm9jZXNzQ21kKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgc25wcmludGYoc0RpYWdPdXRwdXQsIHNpemVvZihzRGlhZ091dHB1dCksICJkaWFnbm9zdGljcyBtb2RlIGlzICVzXHJcbiIsIG90UGxhdERpYWdNb2RlR2V0KCkgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0cmNtcChhcmd2WzBdLCBzQ29tbWFuZHNbaV0ubU5hbWUpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc0NvbW1hbmRzW2ldLm1Db21tYW5kKGFyZ2MgLSAxLCBhcmdjID4gMSA/ICZhcmd2WzFdIDogTlVMTCwgc0RpYWdPdXRwdXQsIHNpemVvZihzRGlhZ091dHB1dCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gbW9yZSBwbGF0Zm9ybSBzcGVjaWZpYyBmZWF0dXJlcyB3aWxsIGJlIHByb2Nlc3NlZCB1bmRlciBwbGF0Zm9ybSBsYXllcgorICAgICAgICBpZiAoaSA9PSBzaXplb2Yoc0NvbW1hbmRzKSAvIHNpemVvZihzQ29tbWFuZHNbMF0pKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXREaWFnUHJvY2VzcyhzQ29udGV4dCwgYXJnYywgYXJndiwgc0RpYWdPdXRwdXQsIHNpemVvZihzRGlhZ091dHB1dCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNEaWFnT3V0cHV0OworfQorCitib29sIERpYWc6OmlzRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIG90UGxhdERpYWdNb2RlR2V0KCk7Cit9CisKK3ZvaWQgRGlhZzo6QXBwZW5kRXJyb3JSZXN1bHQob3RFcnJvciBhRXJyb3IsIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKQoreworICAgIGlmIChhRXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJmYWlsZWRcclxuc3RhdHVzICUjeFxyXG4iLCBhRXJyb3IpOworICAgIH0KK30KKwordm9pZCBEaWFnOjpQcm9jZXNzU3RhcnQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBlbmFibGUgcmFkaW8KKyAgICBvdFBsYXRSYWRpb0VuYWJsZShzQ29udGV4dCk7CisKKyAgICAvLyBlbmFibGUgcHJvbWlzY3VvdXMgbW9kZQorICAgIG90UGxhdFJhZGlvU2V0UHJvbWlzY3VvdXMoc0NvbnRleHQsIHRydWUpOworCisgICAgLy8gc3RvcCB0aW1lcgorICAgIG90UGxhdEFsYXJtU3RvcChzQ29udGV4dCk7CisKKyAgICAvLyBzdGFydCB0byBsaXN0ZW4gb24gdGhlIGRlZmF1bHQgY2hhbm5lbAorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFBsYXRSYWRpb1JlY2VpdmUoc0NvbnRleHQsIHNDaGFubmVsKSk7CisKKyAgICAvLyBlbmFibGUgZGlhZ25vc3RpY3MgbW9kZQorICAgIG90UGxhdERpYWdNb2RlU2V0KHRydWUpOworCisgICAgbWVtc2V0KCZzU3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgRGlhZ1N0YXRzKSk7CisKKyAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAic3RhcnQgZGlhZ25vc3RpY3MgbW9kZVxyXG5zdGF0dXMgMHglMDJ4XHJcbiIsIGVycm9yKTsKKworZXhpdDoKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworICAgIEFwcGVuZEVycm9yUmVzdWx0KGVycm9yLCBhT3V0cHV0LCBhT3V0cHV0TWF4TGVuKTsKK30KKwordm9pZCBEaWFnOjpQcm9jZXNzU3RvcChpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChvdFBsYXREaWFnTW9kZUdldCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgb3RQbGF0QWxhcm1TdG9wKHNDb250ZXh0KTsKKyAgICBvdFBsYXREaWFnTW9kZVNldChmYWxzZSk7CisgICAgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhzQ29udGV4dCwgZmFsc2UpOworCisgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgInJlY2VpdmVkIHBhY2tldHM6ICVkXHJcbnNlbnQgcGFja2V0czogJWRcclxuZmlyc3QgcmVjZWl2ZWQgcGFja2V0OiByc3NpPSVkLCBscWk9JWRcclxuXG5zdG9wIGRpYWdub3N0aWNzIG1vZGVcclxuc3RhdHVzIDB4JTAyeFxyXG4iLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzU3RhdHMucmVjZWl2ZWRfcGFja2V0cyksIHN0YXRpY19jYXN0PGludD4oc1N0YXRzLnNlbnRfcGFja2V0cyksIHN0YXRpY19jYXN0PGludD4oc1N0YXRzLmZpcnN0X3Jzc2kpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzU3RhdHMuZmlyc3RfbHFpKSwgZXJyb3IpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgQXBwZW5kRXJyb3JSZXN1bHQoZXJyb3IsIGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4pOworfQorCitvdEVycm9yIERpYWc6OlBhcnNlTG9uZyhjaGFyICphcmd2LCBsb25nICZ2YWx1ZSkKK3sKKyAgICBjaGFyICplbmRwdHI7CisgICAgdmFsdWUgPSBzdHJ0b2woYXJndiwgJmVuZHB0ciwgMCk7CisgICAgcmV0dXJuICgqZW5kcHRyID09ICdcMCcpID8gT1RfRVJST1JfTk9ORSA6IE9UX0VSUk9SX1BBUlNFOworfQorCit2b2lkIERpYWc6OlR4UGFja2V0KCkKK3sKKyAgICBzVHhQYWNrZXQtPm1MZW5ndGggPSBzVHhMZW47CisgICAgc1R4UGFja2V0LT5tQ2hhbm5lbCA9IHNDaGFubmVsOworICAgIHNUeFBhY2tldC0+bVBvd2VyID0gc1R4UG93ZXI7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBzVHhMZW47IGkrKykKKyAgICB7CisgICAgICAgIHNUeFBhY2tldC0+bVBzZHVbaV0gPSBpOworICAgIH0KKyAgICBvdFBsYXRSYWRpb1RyYW5zbWl0KHNDb250ZXh0LCBzVHhQYWNrZXQpOworfQorCit2b2lkIERpYWc6OlByb2Nlc3NDaGFubmVsKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG90UGxhdERpYWdNb2RlR2V0KCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgImNoYW5uZWw6ICVkXHJcbiIsIHNDaGFubmVsKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdCh2YWx1ZSA+PSBPVF9SQURJT19DSEFOTkVMX01JTiAmJiB2YWx1ZSA8PSBPVF9SQURJT19DSEFOTkVMX01BWCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBzQ2hhbm5lbCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKTsKKworICAgICAgICAvLyBsaXN0ZW4gb24gdGhlIHNldCBjaGFubmVsIGltbWVkaWF0ZWx5CisgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZShzQ29udGV4dCwgc0NoYW5uZWwpOworICAgICAgICBvdFBsYXREaWFnQ2hhbm5lbFNldChzQ2hhbm5lbCk7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJzZXQgY2hhbm5lbCB0byAlZFxyXG5zdGF0dXMgMHglMDJ4XHJcbiIsIHNDaGFubmVsLCBlcnJvcik7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZEVycm9yUmVzdWx0KGVycm9yLCBhT3V0cHV0LCBhT3V0cHV0TWF4TGVuKTsKK30KKwordm9pZCBEaWFnOjpQcm9jZXNzUG93ZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQob3RQbGF0RGlhZ01vZGVHZXQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAidHggcG93ZXI6ICVkIGRCbVxyXG4iLCBzVHhQb3dlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGxvbmcgdmFsdWU7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBzVHhQb3dlciA9IHN0YXRpY19jYXN0PGludDhfdD4odmFsdWUpOworICAgICAgICBvdFBsYXREaWFnVHhQb3dlclNldChzVHhQb3dlcik7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJzZXQgdHggcG93ZXIgdG8gJWQgZEJtXHJcbnN0YXR1cyAweCUwMnhcclxuIiwgc1R4UG93ZXIsIGVycm9yKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kRXJyb3JSZXN1bHQoZXJyb3IsIGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4pOworfQorCit2b2lkIERpYWc6OlByb2Nlc3NTZW5kKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBWZXJpZnlPckV4aXQob3RQbGF0RGlhZ01vZGVHZXQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA9PSAyLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgc1R4UGFja2V0cyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMV0sIHZhbHVlKSk7CisgICAgVmVyaWZ5T3JFeGl0KHZhbHVlIDw9IE9UX1JBRElPX0ZSQU1FX01BWF9TSVpFLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgc1R4TGVuID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworCisgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgInNlbmRpbmcgJSN4IHBhY2tldChzKSwgbGVuZ3RoICUjeFxyXG5zdGF0dXMgMHglMDJ4XHJcbiIsIHN0YXRpY19jYXN0PGludD4oc1R4UGFja2V0cyksIHN0YXRpY19jYXN0PGludD4oc1R4TGVuKSwgZXJyb3IpOworICAgIFR4UGFja2V0KCk7CisKK2V4aXQ6CisgICAgQXBwZW5kRXJyb3JSZXN1bHQoZXJyb3IsIGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4pOworfQorCit2b2lkIERpYWc6OlByb2Nlc3NSZXBlYXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQob3RQbGF0RGlhZ01vZGVHZXQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgInN0b3AiKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RQbGF0QWxhcm1TdG9wKHNDb250ZXh0KTsKKyAgICAgICAgc1JlcGVhdEFjdGl2ZSA9IGZhbHNlOworICAgICAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAicmVwZWF0ZWQgcGFja2V0IHRyYW5zbWlzc2lvbiBpcyBzdG9wcGVkXHJcbnN0YXR1cyAweCUwMnhcclxuIiwgZXJyb3IpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBsb25nIHZhbHVlOworCisgICAgICAgIFZlcmlmeU9yRXhpdChhcmdjID09IDIsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIHNUeFBlcmlvZCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzFdLCB2YWx1ZSkpOworICAgICAgICBWZXJpZnlPckV4aXQodmFsdWUgPD0gT1RfUkFESU9fRlJBTUVfTUFYX1NJWkUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICAgICAgc1R4TGVuID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworCisgICAgICAgIHNSZXBlYXRBY3RpdmUgPSB0cnVlOworICAgICAgICB1aW50MzJfdCBub3cgPSBvdFBsYXRBbGFybUdldE5vdygpOworICAgICAgICBvdFBsYXRBbGFybVN0YXJ0QXQoc0NvbnRleHQsIG5vdywgc1R4UGVyaW9kKTsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgInNlbmRpbmcgcGFja2V0cyBvZiBsZW5ndGggJSN4IGF0IHRoZSBkZWxheSBvZiAlI3ggbXNcclxuc3RhdHVzIDB4JTAyeFxyXG4iLCBzdGF0aWNfY2FzdDxpbnQ+KHNUeExlbiksIHN0YXRpY19jYXN0PGludD4oc1R4UGVyaW9kKSwgZXJyb3IpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRFcnJvclJlc3VsdChlcnJvciwgYU91dHB1dCwgYU91dHB1dE1heExlbik7Cit9CisKK3ZvaWQgRGlhZzo6UHJvY2Vzc1NsZWVwKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG90UGxhdERpYWdNb2RlR2V0KCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdFBsYXRSYWRpb1NsZWVwKHNDb250ZXh0KTsKKyAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAic2xlZXBpbmcgbm93Li4uXHJcbiIpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgQXBwZW5kRXJyb3JSZXN1bHQoZXJyb3IsIGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4pOworfQorCit2b2lkIERpYWc6OlByb2Nlc3NTdGF0cyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChvdFBsYXREaWFnTW9kZUdldCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgInJlY2VpdmVkIHBhY2tldHM6ICVkXHJcbnNlbnQgcGFja2V0czogJWRcclxuZmlyc3QgcmVjZWl2ZWQgcGFja2V0OiByc3NpPSVkLCBscWk9JWRcclxuIiwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oc1N0YXRzLnJlY2VpdmVkX3BhY2tldHMpLCBzdGF0aWNfY2FzdDxpbnQ+KHNTdGF0cy5zZW50X3BhY2tldHMpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzU3RhdHMuZmlyc3RfcnNzaSksIHN0YXRpY19jYXN0PGludD4oc1N0YXRzLmZpcnN0X2xxaSkpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgQXBwZW5kRXJyb3JSZXN1bHQoZXJyb3IsIGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4pOworfQorCit2b2lkIERpYWc6OkRpYWdUcmFuc21pdERvbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKyAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBzU3RhdHMuc2VudF9wYWNrZXRzKys7CisKKyAgICAgICAgaWYgKHNUeFBhY2tldHMgPiAxKQorICAgICAgICB7CisgICAgICAgICAgICBzVHhQYWNrZXRzLS07CisgICAgICAgICAgICBUeFBhY2tldCgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFR4UGFja2V0KCk7CisgICAgfQorfQorCit2b2lkIERpYWc6OkRpYWdSZWNlaXZlRG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKyAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICAvLyBmb3Igc2Vuc2l0aXZpdHkgdGVzdCwgb25seSByZWNvcmQgdGhlIHJzc2kgYW5kIGxxaSBmb3IgdGhlIGZpcnN0IHBhY2tldAorICAgICAgICBpZiAoc1N0YXRzLnJlY2VpdmVkX3BhY2tldHMgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc1N0YXRzLmZpcnN0X3Jzc2kgPSBhRnJhbWUtPm1Qb3dlcjsKKyAgICAgICAgICAgIHNTdGF0cy5maXJzdF9scWkgPSBhRnJhbWUtPm1McWk7CisgICAgICAgIH0KKworICAgICAgICBzU3RhdHMucmVjZWl2ZWRfcGFja2V0cysrOworICAgIH0KKyAgICBvdFBsYXREaWFnUmFkaW9SZWNlaXZlZChhSW5zdGFuY2UsIGFGcmFtZSwgYUVycm9yKTsKKyAgICBvdFBsYXRSYWRpb1JlY2VpdmUoYUluc3RhbmNlLCBzQ2hhbm5lbCk7Cit9CisKK3ZvaWQgRGlhZzo6QWxhcm1GaXJlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYoc1JlcGVhdEFjdGl2ZSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IG5vdyA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisKKyAgICAgICAgVHhQYWNrZXQoKTsKKyAgICAgICAgb3RQbGF0QWxhcm1TdGFydEF0KGFJbnN0YW5jZSwgbm93LCBzVHhQZXJpb2QpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdFBsYXREaWFnQWxhcm1DYWxsYmFjayhhSW5zdGFuY2UpOworICAgIH0KK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdERpYWdBbGFybUZpcmVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBEaWFnOjpBbGFybUZpcmVkKGFJbnN0YW5jZSk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBvdFBsYXREaWFnUmFkaW9UcmFuc21pdERvbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFGcmFtZSk7CisKKyAgICBEaWFnOjpEaWFnVHJhbnNtaXREb25lKGFJbnN0YW5jZSwgYUVycm9yKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdERpYWdSYWRpb1JlY2VpdmVEb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgIERpYWc6OkRpYWdSZWNlaXZlRG9uZShhSW5zdGFuY2UsIGFGcmFtZSwgYUVycm9yKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIERpYWdub3N0aWNzCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9kaWFnL2RpYWdfcHJvY2Vzcy5ocHAgYi9zcmMvZGlhZy9kaWFnX3Byb2Nlc3MuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NjlhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGlhZy9kaWFnX3Byb2Nlc3MuaHBwCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIGRpYWdub3N0aWNzIG1vZHVsZS4KKyAqLworCisjaWZuZGVmIERJQUdfUFJPQ0VTU19IUFBfCisjZGVmaW5lIERJQUdfUFJPQ0VTU19IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworbmFtZXNwYWNlIG90IHsKKworbmFtZXNwYWNlIERpYWdub3N0aWNzIHsKKworI2RlZmluZSBNQVhfRElBR19PVVRQVVQgMjU2CisKK3N0cnVjdCBDb21tYW5kCit7CisgICAgY29uc3QgY2hhciAqbU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIHN0cmluZy4KKyAgICB2b2lkICgqbUNvbW1hbmQpKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKTsgIC8vLzwgQSBmdW5jdGlvbiBwb2ludGVyIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQuCit9OworCitzdHJ1Y3QgRGlhZ1N0YXRzCit7CisgICAgdWludDMyX3QgcmVjZWl2ZWRfcGFja2V0czsKKyAgICB1aW50MzJfdCBzZW50X3BhY2tldHM7CisgICAgaW50OF90IGZpcnN0X3Jzc2k7CisgICAgdWludDhfdCBmaXJzdF9scWk7Cit9OworCitjbGFzcyBEaWFnCit7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgSW5pdChvdEluc3RhbmNlICphSW5zdGFuY2UpOworICAgIHN0YXRpYyBjaGFyICpQcm9jZXNzQ21kKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZCh2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIERpYWdUcmFuc21pdERvbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdEVycm9yIGFFcnJvcik7CisgICAgc3RhdGljIHZvaWQgRGlhZ1JlY2VpdmVEb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKTsKKyAgICBzdGF0aWMgdm9pZCBBbGFybUZpcmVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgQXBwZW5kRXJyb3JSZXN1bHQob3RFcnJvciBlcnJvciwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pOworICAgIHN0YXRpYyB2b2lkIFByb2Nlc3NTbGVlcChpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbik7CisgICAgc3RhdGljIHZvaWQgUHJvY2Vzc1N0YXJ0KGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKTsKKyAgICBzdGF0aWMgdm9pZCBQcm9jZXNzU3RvcChpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbik7CisgICAgc3RhdGljIHZvaWQgUHJvY2Vzc1NlbmQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pOworICAgIHN0YXRpYyB2b2lkIFByb2Nlc3NSZXBlYXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pOworICAgIHN0YXRpYyB2b2lkIFByb2Nlc3NTdGF0cyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbik7CisgICAgc3RhdGljIHZvaWQgUHJvY2Vzc0NoYW5uZWwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pOworICAgIHN0YXRpYyB2b2lkIFByb2Nlc3NQb3dlcihpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbik7CisgICAgc3RhdGljIHZvaWQgVHhQYWNrZXQodm9pZCk7CisgICAgc3RhdGljIG90RXJyb3IgUGFyc2VMb25nKGNoYXIgKmFTdHJpbmcsIGxvbmcgJmFMb25nKTsKKworICAgIHN0YXRpYyBjaGFyIHNEaWFnT3V0cHV0W107CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21tYW5kIHNDb21tYW5kc1tdOworICAgIHN0YXRpYyBzdHJ1Y3QgRGlhZ1N0YXRzIHNTdGF0czsKKyAgICBzdGF0aWMgaW50OF90IHNUeFBvd2VyOworICAgIHN0YXRpYyB1aW50OF90IHNDaGFubmVsOworICAgIHN0YXRpYyB1aW50OF90IHNUeExlbjsKKyAgICBzdGF0aWMgdWludDMyX3Qgc1R4UGVyaW9kOworICAgIHN0YXRpYyB1aW50MzJfdCBzVHhQYWNrZXRzOworICAgIHN0YXRpYyBvdFJhZGlvRnJhbWUgKnNUeFBhY2tldDsKKyAgICBzdGF0aWMgb3RJbnN0YW5jZSAqc0NvbnRleHQ7CisgICAgc3RhdGljIGJvb2wgc1JlcGVhdEFjdGl2ZTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBEaWFnbm9zdGljcworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ0xJX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9kaWFnL29wZW50aHJlYWQtZGlhZy5jcHAgYi9zcmMvZGlhZy9vcGVudGhyZWFkLWRpYWcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZTJhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGlhZy9vcGVudGhyZWFkLWRpYWcuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2UgdG8gZGlhZ25vc3RpY3MgbW9kdWxlLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9kaWFnLmg+CisKKyNpbmNsdWRlICJkaWFnX3Byb2Nlc3MuaHBwIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q6OkRpYWdub3N0aWNzOworCit2b2lkIG90RGlhZ0luaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIERpYWc6OkluaXQoYUluc3RhbmNlKTsKK30KKworY2hhciAqb3REaWFnUHJvY2Vzc0NtZChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIHJldHVybiBEaWFnOjpQcm9jZXNzQ21kKGFyZ2MsIGFyZ3YpOworfQorCitjaGFyICpvdERpYWdQcm9jZXNzQ21kTGluZShjaGFyICpzdHJpbmcpCit7CisgICAgY2hhciAqYXJndls4XTsKKyAgICBpbnQgYXJnYyA9IDA7CisgICAgaW50IGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oc3RybGVuKHN0cmluZykpOworICAgIGNoYXIgKmNtZDsKKworICAgIGZvciAoOyAqc3RyaW5nID09ICcgJzsgc3RyaW5nKyssIGxlbmd0aC0tKTsKKworICAgIGZvciAoY21kID0gc3RyaW5nICsgMTsgKGNtZCA8IHN0cmluZyArIGxlbmd0aCkgJiYgKGNtZCAhPSBOVUxMKTsgKytjbWQpCisgICAgeworICAgICAgICBpZiAoKmNtZCA9PSAnICcgfHwgKmNtZCA9PSAnXHInIHx8ICpjbWQgPT0gJ1xuJykKKyAgICAgICAgeworICAgICAgICAgICAgKmNtZCA9ICdcMCc7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKihjbWQgLSAxKSA9PSAnXDAnICYmICpjbWQgIT0gJyAnKQorICAgICAgICB7CisgICAgICAgICAgICBhcmd2W2FyZ2MrK10gPSBjbWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRGlhZzo6UHJvY2Vzc0NtZChhcmdjLCBhcmd2KTsKK30KKworYm9vbCBvdERpYWdJc0VuYWJsZWQoKQoreworICAgIHJldHVybiBEaWFnOjppc0VuYWJsZWQoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9uY3AvTWFrZWZpbGUuYW0gYi9zcmMvbmNwL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODdjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbmNwL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTExIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgUFJPVE9DT0wubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBQdWxsIGluIHRoZSBzb3VyY2VzIHRoYXQgY29tcHJpc2UgdGhlIE9wZW5UaHJlYWQgTkNQIGxpYnJhcnkuCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgbGlib3BlbnRocmVhZC1uY3AtbXRkLmEgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxpYm9wZW50aHJlYWQtbmNwLWZ0ZC5hICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKKworQ09NTU9OX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMvY29yZSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkgICAgICAgICAgICAgICAgICAgICBcCisgICAgLURfR05VX1NPVVJDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EU1BJTkVMX1BMQVRGT1JNX0hFQURFUj1cInNwaW5lbF9wbGF0Zm9ybS5oXCIgIFwKKyAgICAkKE9QRU5USFJFQURfVEFSR0VUX0RFRklORVMpICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX25jcF9tdGRfYV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgID0gXAorICAgIC1ET1BFTlRIUkVBRF9NVEQ9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKENPTU1PTl9DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX25jcF9mdGRfYV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgID0gXAorICAgIC1ET1BFTlRIUkVBRF9GVEQ9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKENPTU1PTl9DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDT01NT05fU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIG5jcF9iYXNlLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuY3BfYmFzZS5ocHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmNwX2J1ZmZlci5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5jcF9idWZmZXIuaHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGluZWwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3BpbmVsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNwaW5lbF9wbGF0Zm9ybS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuY3Bfc3BpLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmNwX3NwaS5ocHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGhkbGMuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBoZGxjLmhwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmNwX3VhcnQuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5jcF91YXJ0LmhwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbmNwX210ZF9hX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgPSBcCisgICAkKENPTU1PTl9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX25jcF9mdGRfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgID0gXAorICAgJChDT01NT05fU09VUkNFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICQoTlVMTCkKKworaW5jbHVkZV9IRUFERVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfQlVJTERfVEVTVFMKKworbm9pbnN0X1BST0dSQU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNwaW5lbC10ZXN0CitzcGluZWxfdGVzdF9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc3BpbmVsLmMKK3NwaW5lbF90ZXN0X0NGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChDT01NT05fQ1BQRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EU1BJTkVMX1NFTEZfVEVTVD0xICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtRF9HTlVfU09VUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK1RFU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzcGluZWwtdGVzdAorCitpbnN0YWxsLWhlYWRlcnM6IGluc3RhbGwtaW5jbHVkZUhFQURFUlMKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQod2lsZGNhcmQgKi5nY2RhICouZ2NubykKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorZW5kaWYgIyBPUEVOVEhSRUFEX0JVSUxEX1RFU1RTCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvc3JjL25jcC9QUk9UT0NPTC5tZCBiL3NyYy9uY3AvUFJPVE9DT0wubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhZmY2OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3AvUFJPVE9DT0wubWQKQEAgLTAsMCArMSw3IEBACitTcGluZWwgTkNQIFByb3RvY29sIERvY3VtZW50YXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRvY3VtZW50IGhhcyBtb3ZlZCBpbnRvIHRoZSB0b3AgbGV2ZWwgYGRvY2AgZm9sZGVyIGFuZCByZW5hbWVkCitbYGRyYWZ0LXNwaW5lbC1wcm90b2NvbC50eHRgXSguLi8uLi9kb2MvZHJhZnQtc3BpbmVsLXByb3RvY29sLnR4dCkKK2FuZCBbYGRyYWZ0LXNwaW5lbC1wcm90b2NvbC5odG1sYF0oLi4vLi4vZG9jL2RyYWZ0LXNwaW5lbC1wcm90b2NvbC5odG1sKS4KKwpkaWZmIC0tZ2l0IGEvc3JjL25jcC9oZGxjLmNwcCBiL3NyYy9uY3AvaGRsYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwZmFlMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3AvaGRsYy5jcHAKQEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYW4gSERMQy1saXRlIGVuY29kZXIgYW5kIGRlY29kZXIuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJoZGxjLmhwcCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBIZGxjIHsKKworLyoqCisgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIGFuIEZDUy4KKyAqCisgKiBAcGFyYW1baW5dICBhRmNzICAgVGhlIEZDUyB0byB1cGRhdGUuCisgKiBAcGFyYW1baW5dICBhQnl0ZSAgVGhlIGlucHV0IGJ5dGUgdmFsdWUuCisgKgorICogQHJldHVybnMgVGhlIHVwZGF0ZWQgRkNTLgorICoKKyAqLworc3RhdGljIHVpbnQxNl90IFVwZGF0ZUZjcyh1aW50MTZfdCBhRmNzLCB1aW50OF90IGFCeXRlKTsKKworZW51bQoreworICAgIGtGbGFnWE9uICAgICAgICA9IDB4MTEsCisgICAga0ZsYWdYT2ZmICAgICAgID0gMHgxMywKKyAgICBrRmxhZ1NlcXVlbmNlICAgPSAweDdlLCAgLy8vPCBIRExDIEZsYWcgdmFsdWUKKyAgICBrRXNjYXBlU2VxdWVuY2UgPSAweDdkLCAgLy8vPCBIRExDIEVzY2FwZSB2YWx1ZQorICAgIGtGbGFnU3BlY2lhbCAgICA9IDB4ZjgsCit9OworCisvKioKKyAqIEZDUyBsb29rdXAgdGFibGUKKyAqCisgKi8KK2VudW0KK3sKKyAgICBrSW5pdEZjcyA9IDB4ZmZmZiwgIC8vLzwgSW5pdGlhbCBGQ1MgdmFsdWUuCisgICAga0dvb2RGY3MgPSAweGYwYjgsICAvLy88IEdvb2QgRkNTIHZhbHVlLgorfTsKKwordWludDE2X3QgVXBkYXRlRmNzKHVpbnQxNl90IGFGY3MsIHVpbnQ4X3QgYUJ5dGUpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNGY3NUYWJsZVsyNTZdID0KKyAgICB7CisgICAgICAgIDB4MDAwMCwgMHgxMTg5LCAweDIzMTIsIDB4MzI5YiwgMHg0NjI0LCAweDU3YWQsIDB4NjUzNiwgMHg3NGJmLAorICAgICAgICAweDhjNDgsIDB4OWRjMSwgMHhhZjVhLCAweGJlZDMsIDB4Y2E2YywgMHhkYmU1LCAweGU5N2UsIDB4ZjhmNywKKyAgICAgICAgMHgxMDgxLCAweDAxMDgsIDB4MzM5MywgMHgyMjFhLCAweDU2YTUsIDB4NDcyYywgMHg3NWI3LCAweDY0M2UsCisgICAgICAgIDB4OWNjOSwgMHg4ZDQwLCAweGJmZGIsIDB4YWU1MiwgMHhkYWVkLCAweGNiNjQsIDB4ZjlmZiwgMHhlODc2LAorICAgICAgICAweDIxMDIsIDB4MzA4YiwgMHgwMjEwLCAweDEzOTksIDB4NjcyNiwgMHg3NmFmLCAweDQ0MzQsIDB4NTViZCwKKyAgICAgICAgMHhhZDRhLCAweGJjYzMsIDB4OGU1OCwgMHg5ZmQxLCAweGViNmUsIDB4ZmFlNywgMHhjODdjLCAweGQ5ZjUsCisgICAgICAgIDB4MzE4MywgMHgyMDBhLCAweDEyOTEsIDB4MDMxOCwgMHg3N2E3LCAweDY2MmUsIDB4NTRiNSwgMHg0NTNjLAorICAgICAgICAweGJkY2IsIDB4YWM0MiwgMHg5ZWQ5LCAweDhmNTAsIDB4ZmJlZiwgMHhlYTY2LCAweGQ4ZmQsIDB4Yzk3NCwKKyAgICAgICAgMHg0MjA0LCAweDUzOGQsIDB4NjExNiwgMHg3MDlmLCAweDA0MjAsIDB4MTVhOSwgMHgyNzMyLCAweDM2YmIsCisgICAgICAgIDB4Y2U0YywgMHhkZmM1LCAweGVkNWUsIDB4ZmNkNywgMHg4ODY4LCAweDk5ZTEsIDB4YWI3YSwgMHhiYWYzLAorICAgICAgICAweDUyODUsIDB4NDMwYywgMHg3MTk3LCAweDYwMWUsIDB4MTRhMSwgMHgwNTI4LCAweDM3YjMsIDB4MjYzYSwKKyAgICAgICAgMHhkZWNkLCAweGNmNDQsIDB4ZmRkZiwgMHhlYzU2LCAweDk4ZTksIDB4ODk2MCwgMHhiYmZiLCAweGFhNzIsCisgICAgICAgIDB4NjMwNiwgMHg3MjhmLCAweDQwMTQsIDB4NTE5ZCwgMHgyNTIyLCAweDM0YWIsIDB4MDYzMCwgMHgxN2I5LAorICAgICAgICAweGVmNGUsIDB4ZmVjNywgMHhjYzVjLCAweGRkZDUsIDB4YTk2YSwgMHhiOGUzLCAweDhhNzgsIDB4OWJmMSwKKyAgICAgICAgMHg3Mzg3LCAweDYyMGUsIDB4NTA5NSwgMHg0MTFjLCAweDM1YTMsIDB4MjQyYSwgMHgxNmIxLCAweDA3MzgsCisgICAgICAgIDB4ZmZjZiwgMHhlZTQ2LCAweGRjZGQsIDB4Y2Q1NCwgMHhiOWViLCAweGE4NjIsIDB4OWFmOSwgMHg4YjcwLAorICAgICAgICAweDg0MDgsIDB4OTU4MSwgMHhhNzFhLCAweGI2OTMsIDB4YzIyYywgMHhkM2E1LCAweGUxM2UsIDB4ZjBiNywKKyAgICAgICAgMHgwODQwLCAweDE5YzksIDB4MmI1MiwgMHgzYWRiLCAweDRlNjQsIDB4NWZlZCwgMHg2ZDc2LCAweDdjZmYsCisgICAgICAgIDB4OTQ4OSwgMHg4NTAwLCAweGI3OWIsIDB4YTYxMiwgMHhkMmFkLCAweGMzMjQsIDB4ZjFiZiwgMHhlMDM2LAorICAgICAgICAweDE4YzEsIDB4MDk0OCwgMHgzYmQzLCAweDJhNWEsIDB4NWVlNSwgMHg0ZjZjLCAweDdkZjcsIDB4NmM3ZSwKKyAgICAgICAgMHhhNTBhLCAweGI0ODMsIDB4ODYxOCwgMHg5NzkxLCAweGUzMmUsIDB4ZjJhNywgMHhjMDNjLCAweGQxYjUsCisgICAgICAgIDB4Mjk0MiwgMHgzOGNiLCAweDBhNTAsIDB4MWJkOSwgMHg2ZjY2LCAweDdlZWYsIDB4NGM3NCwgMHg1ZGZkLAorICAgICAgICAweGI1OGIsIDB4YTQwMiwgMHg5Njk5LCAweDg3MTAsIDB4ZjNhZiwgMHhlMjI2LCAweGQwYmQsIDB4YzEzNCwKKyAgICAgICAgMHgzOWMzLCAweDI4NGEsIDB4MWFkMSwgMHgwYjU4LCAweDdmZTcsIDB4NmU2ZSwgMHg1Y2Y1LCAweDRkN2MsCisgICAgICAgIDB4YzYwYywgMHhkNzg1LCAweGU1MWUsIDB4ZjQ5NywgMHg4MDI4LCAweDkxYTEsIDB4YTMzYSwgMHhiMmIzLAorICAgICAgICAweDRhNDQsIDB4NWJjZCwgMHg2OTU2LCAweDc4ZGYsIDB4MGM2MCwgMHgxZGU5LCAweDJmNzIsIDB4M2VmYiwKKyAgICAgICAgMHhkNjhkLCAweGM3MDQsIDB4ZjU5ZiwgMHhlNDE2LCAweDkwYTksIDB4ODEyMCwgMHhiM2JiLCAweGEyMzIsCisgICAgICAgIDB4NWFjNSwgMHg0YjRjLCAweDc5ZDcsIDB4Njg1ZSwgMHgxY2UxLCAweDBkNjgsIDB4M2ZmMywgMHgyZTdhLAorICAgICAgICAweGU3MGUsIDB4ZjY4NywgMHhjNDFjLCAweGQ1OTUsIDB4YTEyYSwgMHhiMGEzLCAweDgyMzgsIDB4OTNiMSwKKyAgICAgICAgMHg2YjQ2LCAweDdhY2YsIDB4NDg1NCwgMHg1OWRkLCAweDJkNjIsIDB4M2NlYiwgMHgwZTcwLCAweDFmZjksCisgICAgICAgIDB4Zjc4ZiwgMHhlNjA2LCAweGQ0OWQsIDB4YzUxNCwgMHhiMWFiLCAweGEwMjIsIDB4OTJiOSwgMHg4MzMwLAorICAgICAgICAweDdiYzcsIDB4NmE0ZSwgMHg1OGQ1LCAweDQ5NWMsIDB4M2RlMywgMHgyYzZhLCAweDFlZjEsIDB4MGY3OAorICAgIH07CisgICAgcmV0dXJuIChhRmNzID4+IDgpIF4gc0Zjc1RhYmxlWyhhRmNzIF4gYUJ5dGUpICYgMHhmZl07Cit9CisKK2Jvb2wgSGRsY0J5dGVOZWVkc0VzY2FwZSh1aW50OF90IGFCeXRlKQoreworICAgIHN3aXRjaCAoYUJ5dGUpCisgICAgeworICAgIGNhc2Uga0ZsYWdYT246CisgICAgY2FzZSBrRmxhZ1hPZmY6CisgICAgY2FzZSBrRXNjYXBlU2VxdWVuY2U6CisgICAgY2FzZSBrRmxhZ1NlcXVlbmNlOgorICAgIGNhc2Uga0ZsYWdTcGVjaWFsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0VuY29kZXI6OkJ1ZmZlcldyaXRlSXRlcmF0b3I6OkJ1ZmZlcldyaXRlSXRlcmF0b3Iodm9pZCkKK3sKKyAgICBtV3JpdGVQb2ludGVyID0gTlVMTDsKKyAgICBtUmVtYWluaW5nTGVuZ3RoID0gMDsKK30KKworb3RFcnJvciBFbmNvZGVyOjpCdWZmZXJXcml0ZUl0ZXJhdG9yOjpXcml0ZUJ5dGUodWludDhfdCBhQnl0ZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChtUmVtYWluaW5nTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgICptV3JpdGVQb2ludGVyKysgPSBhQnl0ZTsKKyAgICBtUmVtYWluaW5nTGVuZ3RoLS07CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitib29sIEVuY29kZXI6OkJ1ZmZlcldyaXRlSXRlcmF0b3I6OkNhbldyaXRlKHVpbnQxNl90IGFXcml0ZUxlbmd0aCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1SZW1haW5pbmdMZW5ndGggPj0gYVdyaXRlTGVuZ3RoKTsKK30KKworRW5jb2Rlcjo6RW5jb2Rlcih2b2lkKToKKyAgICBtRmNzKDApCit7Cit9CisKK290RXJyb3IgRW5jb2Rlcjo6SW5pdChCdWZmZXJXcml0ZUl0ZXJhdG9yICZhSXRlcmF0b3IpCit7CisgICAgbUZjcyA9IGtJbml0RmNzOworCisgICAgcmV0dXJuIGFJdGVyYXRvci5Xcml0ZUJ5dGUoa0ZsYWdTZXF1ZW5jZSk7Cit9CisKK290RXJyb3IgRW5jb2Rlcjo6RW5jb2RlKHVpbnQ4X3QgYUluQnl0ZSwgQnVmZmVyV3JpdGVJdGVyYXRvciAmYUl0ZXJhdG9yKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKEhkbGNCeXRlTmVlZHNFc2NhcGUoYUluQnl0ZSkpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoYUl0ZXJhdG9yLkNhbldyaXRlKDIpICwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgICAgICBhSXRlcmF0b3IuV3JpdGVCeXRlKGtFc2NhcGVTZXF1ZW5jZSk7CisgICAgICAgIGFJdGVyYXRvci5Xcml0ZUJ5dGUoYUluQnl0ZSBeIDB4MjApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYUl0ZXJhdG9yLldyaXRlQnl0ZShhSW5CeXRlKSk7CisgICAgfQorCisgICAgbUZjcyA9IFVwZGF0ZUZjcyhtRmNzLCBhSW5CeXRlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRW5jb2Rlcjo6RW5jb2RlKGNvbnN0IHVpbnQ4X3QgKmFJbkJ1ZiwgdWludDE2X3QgYUluTGVuZ3RoLCBCdWZmZXJXcml0ZUl0ZXJhdG9yICZhSXRlcmF0b3IpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQnVmZmVyV3JpdGVJdGVyYXRvciBvbGRJdGVyYXRvcihhSXRlcmF0b3IpOworICAgIHVpbnQxNl90IG9sZEZjcyA9IG1GY3M7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFJbkxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEVuY29kZShhSW5CdWZbaV0sIGFJdGVyYXRvcikpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgYUl0ZXJhdG9yID0gb2xkSXRlcmF0b3I7CisgICAgICAgIG1GY3MgPSBvbGRGY3M7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEVuY29kZXI6OkZpbmFsaXplKEJ1ZmZlcldyaXRlSXRlcmF0b3IgJmFJdGVyYXRvcikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBCdWZmZXJXcml0ZUl0ZXJhdG9yIG9sZEl0ZXJhdG9yKGFJdGVyYXRvcik7CisgICAgdWludDE2X3Qgb2xkRmNzID0gbUZjczsKKyAgICB1aW50MTZfdCBmY3MgPSBtRmNzOworCisgICAgZmNzIF49IDB4ZmZmZjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBFbmNvZGUoZmNzICYgMHhmZiwgYUl0ZXJhdG9yKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEVuY29kZShmY3MgPj4gOCwgYUl0ZXJhdG9yKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYUl0ZXJhdG9yLldyaXRlQnl0ZShrRmxhZ1NlcXVlbmNlKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGFJdGVyYXRvciA9IG9sZEl0ZXJhdG9yOworICAgICAgICBtRmNzID0gb2xkRmNzOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworRGVjb2Rlcjo6RGVjb2Rlcih1aW50OF90ICphT3V0QnVmLCB1aW50MTZfdCBhT3V0TGVuZ3RoLCBGcmFtZUhhbmRsZXIgYUZyYW1lSGFuZGxlciwgRXJyb3JIYW5kbGVyIGFFcnJvckhhbmRsZXIsCisgICAgICAgICAgICAgICAgIHZvaWQgKmFDb250ZXh0KToKKyAgICBtU3RhdGUoa1N0YXRlTm9TeW5jKSwKKyAgICBtRnJhbWVIYW5kbGVyKGFGcmFtZUhhbmRsZXIpLAorICAgIG1FcnJvckhhbmRsZXIoYUVycm9ySGFuZGxlciksCisgICAgbUNvbnRleHQoYUNvbnRleHQpLAorICAgIG1PdXRCdWYoYU91dEJ1ZiksCisgICAgbU91dE9mZnNldCgwKSwKKyAgICBtT3V0TGVuZ3RoKGFPdXRMZW5ndGgpLAorICAgIG1GY3MoMCkKK3sKK30KKwordm9pZCBEZWNvZGVyOjpEZWNvZGUoY29uc3QgdWludDhfdCAqYUluQnVmLCB1aW50MTZfdCBhSW5MZW5ndGgpCit7CisgICAgdWludDhfdCBieXRlOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhSW5MZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIGJ5dGUgPSBhSW5CdWZbaV07CisKKyAgICAgICAgc3dpdGNoIChtU3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdGVOb1N5bmM6CisgICAgICAgICAgICBpZiAoYnl0ZSA9PSBrRmxhZ1NlcXVlbmNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZVN5bmM7CisgICAgICAgICAgICAgICAgbU91dE9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgbUZjcyA9IGtJbml0RmNzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTdGF0ZVN5bmM6CisgICAgICAgICAgICBzd2l0Y2ggKGJ5dGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIGtFc2NhcGVTZXF1ZW5jZToKKyAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVFc2NhcGVkOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIGtGbGFnU2VxdWVuY2U6CisKKyAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgZnJhbWVzIHdoaWNoIGFyZSBzbWFsbGVyCisgICAgICAgICAgICAgICAgLy8gdGhhbiB0aGUgc2l6ZSBvZiB0aGUgQ1JDIGNoZWNrLgorICAgICAgICAgICAgICAgIGlmIChtT3V0T2Zmc2V0ID4gc2l6ZW9mKHVpbnQxNl90KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtRmNzID09IGtHb29kRmNzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtRnJhbWVIYW5kbGVyKG1Db250ZXh0LCBtT3V0QnVmLCBtT3V0T2Zmc2V0IC0gc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobUVycm9ySGFuZGxlciAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtRXJyb3JIYW5kbGVyKG1Db250ZXh0LCBPVF9FUlJPUl9QQVJTRSwgbU91dEJ1ZiwgbU91dE9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtT3V0T2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICBtRmNzID0ga0luaXRGY3M7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAobU91dE9mZnNldCA8IG1PdXRMZW5ndGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtRmNzID0gVXBkYXRlRmNzKG1GY3MsIGJ5dGUpOworICAgICAgICAgICAgICAgICAgICBtT3V0QnVmW21PdXRPZmZzZXQrK10gPSBieXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobUVycm9ySGFuZGxlciAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtRXJyb3JIYW5kbGVyKG1Db250ZXh0LCBPVF9FUlJPUl9OT19CVUZTLCBtT3V0QnVmLCBtT3V0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZU5vU3luYzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrU3RhdGVFc2NhcGVkOgorICAgICAgICAgICAgaWYgKG1PdXRPZmZzZXQgPCBtT3V0TGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJ5dGUgXj0gMHgyMDsKKyAgICAgICAgICAgICAgICBtRmNzID0gVXBkYXRlRmNzKG1GY3MsIGJ5dGUpOworICAgICAgICAgICAgICAgIG1PdXRCdWZbbU91dE9mZnNldCsrXSA9IGJ5dGU7CisgICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRlU3luYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobUVycm9ySGFuZGxlciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUVycm9ySGFuZGxlcihtQ29udGV4dCwgT1RfRVJST1JfTk9fQlVGUywgbU91dEJ1ZiwgbU91dE9mZnNldCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRlTm9TeW5jOworICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UgSGRsYworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfVUFSVApkaWZmIC0tZ2l0IGEvc3JjL25jcC9oZGxjLmhwcCBiL3NyYy9uY3AvaGRsYy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwOWNmNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3AvaGRsYy5ocHAKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBhbiBIRExDLWxpdGUgZW5jb2RlciBhbmQgZGVjb2Rlci4KKyAqLworCisjaWZuZGVmIEhETENfSFBQXworI2RlZmluZSBIRExDX0hQUF8KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAbmFtZXNwYWNlIG90OjpIZGxjCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbmFtZXNwYWNlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgSERMQy1saXRlIGVuY29kZXIgYW5kIGRlY29kZXIuCisgKgorICovCituYW1lc3BhY2UgSGRsYyB7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBIRExDLWxpdGUgZW5jb2Rlci4KKyAqCisgKi8KK2NsYXNzIEVuY29kZXIKK3sKK3B1YmxpYzoKKworICAgIC8qKgorICAgICAqIFRoaXMgY2xhc3MgZGVmaW5lcyBhIHdyaXRlIGl0ZXJhdG9yIGludG8gYSBidWZmZXIgdXNlZCBieSBFbmNvZGVyLgorICAgICAqCisgICAgICogSGRsYyB1c2VycyBzaG91bGQgc3ViLWNsYXNzIHRoaXMgdG8gYWRkIHRoZSBhY3R1YWwgYnVmZmVyIHNwYWNlLgorICAgICAqLworICAgIGNsYXNzIEJ1ZmZlcldyaXRlSXRlcmF0b3IKKyAgICB7CisgICAgcHVibGljOgorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIG1ldGhvZCB3cml0ZXMgYSBieXRlIHRvIHRoZSBidWZmZXIgYW5kIHVwZGF0ZXMgdGhlIGl0ZXJhdG9yIChpZiBzcGFjZSBpcyBhdmFpbGFibGUpLgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSB3cm90ZSB0aGUgYnl0ZSBhbmQgdXBkYXRlcyB0aGUgaXRlcmF0b3IuCisgICAgICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZS4KKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIG90RXJyb3IgV3JpdGVCeXRlKHVpbnQ4X3QgYUJ5dGUpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlcmUgaXMgYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSB0byB3cml0ZSBAcCBhV3JpdGVMZW5ndGggYnl0ZXMuCisgICAgICAgICAqCisgICAgICAgICAqIHBhcmFtW2luXSBhV3JpdGVMZW5ndGggICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlLgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dmFsIHRydWUgICAgICAgICAgICAgICAgIEVub3VnaCBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIHRvIHdyaXRlIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzLgorICAgICAgICAgKiBAcmV0dmFsIGZhbHNlICAgICAgICAgICAgICAgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgdG8gd3JpdGUgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMuCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBib29sIENhbldyaXRlKHVpbnQxNl90IGFXcml0ZUxlbmd0aCkgY29uc3Q7CisKKyAgICBwcm90ZWN0ZWQ6CisKKyAgICAgICAgQnVmZmVyV3JpdGVJdGVyYXRvcih2b2lkKTsgICAvLy88IFByb3RlY3RlZCBjb25zdHJ1Y3RvciB0byBlbnN1cmUgbm8gZGlyZWN0IGluc3RhbnRpYXRpb24uCisKKyAgICAgICAgdWludDhfdCAgKm1Xcml0ZVBvaW50ZXI7ICAgICAvLy88IEEgcG9pbnRlciB0byBjdXJyZW50IHdyaXRlIHBvc2l0aW9uIGluIHRoZSBidWZmZXIuCisgICAgICAgIHVpbnQxNl90ICBtUmVtYWluaW5nTGVuZ3RoOyAgLy8vPCBOdW1iZXIgb2YgcmVtYWluaW5nIGJ5dGVzIGF2YWlsYWJsZSB0byB3cml0ZS4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgRW5jb2Rlcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGJlZ2lucyBhbiBIRExDIGZyYW1lIGFuZCBwdXRzIHRoZSBpbml0aWFsIGJ5dGVzIGludG8gYSBidWZmZXIgYXQgdGhlIGdpdmVuIEBwIGFJdGVyYXRvci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbm91dF0gYUl0ZXJhdG9yICAgICAgQSByZWZlcmVuY2UgdG8gYSBidWZmZXIgd3JpdGUgaXRlcmF0b3IuIE9uIHN1Y2Nlc3NmdWwgZXhpdCwgdGhlIGl0ZXJhdG9yIGlzIHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBIRExDIGZyYW1lLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgdG8gc3RhcnQgdGhlIEhETEMgZnJhbWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEluaXQoQnVmZmVyV3JpdGVJdGVyYXRvciAmYUl0ZXJhdG9yKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuY29kZXMgYSBzaW5nbGUgYnl0ZSBpbnRvIGEgYnVmZmVyIGF0IEBwIGFJdGVyYXRvci4KKyAgICAgKgorICAgICAqIElmIHRoZXJlIGlzIG5vIHNwYWNlIHRvIGFkZCB0aGUgYnl0ZSwgdGhlIHdyaXRlIGl0ZXJhdG9yIHJlbWFpbnMgdGhlIHNhbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgIGFJbkJ5dGUgICAgICAgIEEgYnl0ZSB0byBlbmNvZGUgYW5kIGFkZC4KKyAgICAgKiBAcGFyYW1baW5vdXRdIGFJdGVyYXRvciAgICAgIEEgcmVmZXJlbmNlIHRvIGEgd3JpdGUgYnVmZmVyIGl0ZXJhdG9yLiBPbiBzdWNjZXNzZnVsIGV4aXQsIHRoZSBpdGVyYXRvciBpcyB1cGRhdGVkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5jb2RlZCBhbmQgYWRkZWQgdGhlIGJ5dGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSB0byBlbmNvZGUgYW5kIGFkZCB0aGUgYnl0ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRW5jb2RlKHVpbnQ4X3QgYUluQnl0ZSwgQnVmZmVyV3JpdGVJdGVyYXRvciAmYUl0ZXJhdG9yKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuY29kZXMgdGhlIGZyYW1lIGludG8gYSBidWZmZXIgYXQgQHAgYUl0ZXJhdG9yLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBzdWNjZXNzIG9ubHkgaWYgdGhlcmUgaXMgc3BhY2UgaW4gYnVmZmVyIHRvIGVuY29kZSB0aGUgZW50aXJlIGZyYW1lLiBJZiB0aGVyZSBpcyBubyBzcGFjZQorICAgICAqIHRvIGVuY29kZSB0aGUgZW50aXJlIGZyYW1lLCB0aGUgd3JpdGUgaXRlcmF0b3IgcmVtYWlucyB0aGUgc2FtZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICAgYUluQnVmICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgICBhSW5MZW5ndGggICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIEBwIGFJbkJ1ZiB0byBlbmNvZGUuCisgICAgICogQHBhcmFtW2lub3V0XSBhSXRlcmF0b3IgICAgICBBIHJlZmVyZW5jZSB0byBhIHdyaXRlIGJ1ZmZlciBpdGVyYXRvci4gT24gc3VjY2Vzc2Z1bCBleGl0LCB0aGUgaXRlcmF0b3IgaXMgdXBkYXRlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVuY29kZWQgdGhlIEhETEMgZnJhbWUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSB0byBlbmNvZGUgdGhlIEhETEMgZnJhbWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEVuY29kZShjb25zdCB1aW50OF90ICphSW5CdWYsIHVpbnQxNl90IGFJbkxlbmd0aCwgQnVmZmVyV3JpdGVJdGVyYXRvciAmYUl0ZXJhdG9yKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZpbmFsaXplcyBhbiBIRExDIGZyYW1lLgorICAgICAqCisgICAgICogQHBhcmFtW2lub3V0XSBhSXRlcmF0b3IgICAgICBBIHJlZmVyZW5jZSB0byBhIHdyaXRlIGJ1ZmZlciBpdGVyYXRvci4gT24gc3VjY2Vzc2Z1bCBleGl0LCB0aGUgaXRlcmF0b3IgaXMgdXBkYXRlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVuZGVkIHRoZSBIRExDIGZyYW1lLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgdG8gZW5kIHRoZSBIRExDIGZyYW1lLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBGaW5hbGl6ZShCdWZmZXJXcml0ZUl0ZXJhdG9yICZhSXRlcmF0b3IpOworCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1GY3M7Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgSERMQy1saXRlIGRlY29kZXIuCisgKgorICovCitjbGFzcyBEZWNvZGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIGEgY29tcGxldGUgZnJhbWUgaGFzIGJlZW4gZm9ybWVkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGZyYW1lLgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZUxlbmd0aCAgVGhlIGZyYW1lIGxlbmd0aCBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHR5cGVkZWYgdm9pZCAoKkZyYW1lSGFuZGxlcikodm9pZCAqYUNvbnRleHQsIHVpbnQ4X3QgKmFGcmFtZSwgdWludDE2X3QgYUZyYW1lTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhRXJyb3IgICAgICAgIEFuIGVycm9yIGNvZGUgZGVzY3JpYmluZyB0aGUgZXJyb3IuCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGZyYW1lLgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZUxlbmd0aCAgVGhlIGZyYW1lIGxlbmd0aCBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHR5cGVkZWYgdm9pZCAoKkVycm9ySGFuZGxlcikodm9pZCAqYUNvbnRleHQsIG90RXJyb3IgYUVycm9yLCB1aW50OF90ICphRnJhbWUsIHVpbnQxNl90IGFGcmFtZUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBkZWNvZGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU91dEJ1ZiAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFPdXRMZW5ndGggICAgIFNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lSGFuZGxlciAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiBhIGNvbXBsZXRlIGZyYW1lIGlzIHJlY2VpdmVkLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIERlY29kZXIodWludDhfdCAqYU91dEJ1ZiwgdWludDE2X3QgYU91dExlbmd0aCwgRnJhbWVIYW5kbGVyIGFGcmFtZUhhbmRsZXIsIEVycm9ySGFuZGxlciBhRXJyb3JIYW5kbGVyLAorICAgICAgICAgICAgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RyZWFtcyBieXRlcyBpbnRvIHRoZSBkZWNvZGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhSW5MZW5ndGggIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gQHAgYUluQnVmLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBEZWNvZGUoY29uc3QgdWludDhfdCAqYUluQnVmLCB1aW50MTZfdCBhSW5MZW5ndGgpOworCitwcml2YXRlOgorICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIGtTdGF0ZU5vU3luYyA9IDAsCisgICAgICAgIGtTdGF0ZVN5bmMsCisgICAgICAgIGtTdGF0ZUVzY2FwZWQsCisgICAgfTsKKyAgICBTdGF0ZSBtU3RhdGU7CisKKyAgICBGcmFtZUhhbmRsZXIgbUZyYW1lSGFuZGxlcjsKKyAgICBFcnJvckhhbmRsZXIgbUVycm9ySGFuZGxlcjsKKyAgICB2b2lkICptQ29udGV4dDsKKworICAgIHVpbnQ4X3QgKm1PdXRCdWY7CisgICAgdWludDE2X3QgbU91dE9mZnNldDsKKyAgICB1aW50MTZfdCBtT3V0TGVuZ3RoOworCisgICAgdWludDE2X3QgbUZjczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBIZGxjCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBIRExDX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9uY3AvbmNwX2Jhc2UuY3BwIGIvc3JjL25jcC9uY3BfYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzExODAxNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3AvbmNwX2Jhc2UuY3BwCkBAIC0wLDAgKzEsNzU4NyBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIFNwaW5lbCBpbnRlcmZhY2UgdG8gdGhlIE9wZW5UaHJlYWQgc3RhY2suCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJuY3BfYmFzZS5ocHAiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorI2luY2x1ZGUgPG9wZW50aHJlYWQvdG1mX3Byb3h5Lmg+CisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2JvcmRlcl9yb3V0ZXIuaD4KKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisjaW5jbHVkZSA8bWVzaGNvcC9jb21taXNzaW9uZXIuaHBwPgorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RpYWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2ljbXA2Lmg+CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisjaW5jbHVkZSA8b3BlbnRocmVhZC9qYW1fZGV0ZWN0aW9uLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbmNwLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorI2luY2x1ZGUgPG9wZW50aHJlYWQvdGhyZWFkX2Z0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKKyNkZWZpbmUgTkNQX0lOVkFMSURfU0NBTl9DSEFOTkVMICAgICAgICAgICAgICAoLTEpCisKKyNkZWZpbmUgTkNQX0NIQU5HRURfUExBVEZPUk1fUkVTRVQgICAgICAgICAgICAoMVUgPDwgMzEpCisjZGVmaW5lIE5DUF9DSEFOR0VEX1RIUkVBRF9PTl9NRVNIX05FVFMgICAgICAgKDFVIDw8IDMwKQorI2RlZmluZSBOQ1BfQ0hBTkdFRF9USFJFQURfT0ZGX01FU0hfUk9VVEVTICAgICgxVSA8PCAyOSkKKworI2RlZmluZSBSU1NJX09WRVJSSURFX0RJU0FCTEVEICAgICAgICAxMjcgLy8gVXNlZCBmb3IgUFJPUF9NQUNfV0hJVEVMSVNUCisKKyNkZWZpbmUgSUdOT1JFX1JFVFVSTl9WQUxVRShzKSAgICAgICAgZG8geyBpZiAocyl7fSB9IHdoaWxlICgwKQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBDb21tYW5kL1Byb3BlcnR5IEp1bXAgVGFibGVzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgTkNQX0NNRF9IQU5ETEVSX0VOVFJZKG5hbWUpICB7IFNQSU5FTF9DTURfIyNuYW1lLCAmTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJfIyNuYW1lIH0KKworY29uc3QgTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJFbnRyeSBOY3BCYXNlOjptQ29tbWFuZEhhbmRsZXJUYWJsZVtdID0KK3sKKyAgICBOQ1BfQ01EX0hBTkRMRVJfRU5UUlkoTk9PUCksCisgICAgTkNQX0NNRF9IQU5ETEVSX0VOVFJZKFJFU0VUKSwKKyAgICBOQ1BfQ01EX0hBTkRMRVJfRU5UUlkoUFJPUF9WQUxVRV9HRVQpLAorICAgIE5DUF9DTURfSEFORExFUl9FTlRSWShQUk9QX1ZBTFVFX1NFVCksCisgICAgTkNQX0NNRF9IQU5ETEVSX0VOVFJZKFBST1BfVkFMVUVfSU5TRVJUKSwKKyAgICBOQ1BfQ01EX0hBTkRMRVJfRU5UUlkoUFJPUF9WQUxVRV9SRU1PVkUpLAorICAgIE5DUF9DTURfSEFORExFUl9FTlRSWShORVRfU0FWRSksCisgICAgTkNQX0NNRF9IQU5ETEVSX0VOVFJZKE5FVF9DTEVBUiksCisgICAgTkNQX0NNRF9IQU5ETEVSX0VOVFJZKE5FVF9SRUNBTEwpLAorI2lmIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisgICAgTkNQX0NNRF9IQU5ETEVSX0VOVFJZKFBFRUspLAorICAgIE5DUF9DTURfSEFORExFUl9FTlRSWShQT0tFKSwKKyNlbmRpZgorfTsKKworI2RlZmluZSBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShuYW1lKSAgICAgICAgICAgICAgICAgeyBTUElORUxfUFJPUF8jI25hbWUsICZOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfIyNuYW1lIH0KKyNkZWZpbmUgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKG5hbWUsIG1ldGhvZCkgIHsgU1BJTkVMX1BST1BfIyNuYW1lLCAmTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyXyMjbWV0aG9kIH0KKworY29uc3QgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyRW50cnkgTmNwQmFzZTo6bUdldFByb3BlcnR5SGFuZGxlclRhYmxlW10gPQoreworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKExBU1RfU1RBVFVTKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShQUk9UT0NPTF9WRVJTSU9OKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShJTlRFUkZBQ0VfVFlQRSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVkVORE9SX0lEKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShDQVBTKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShOQ1BfVkVSU0lPTiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSU5URVJGQUNFX0NPVU5UKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShQT1dFUl9TVEFURSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSFdBRERSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShMT0NLKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShIT1NUX1BPV0VSX1NUQVRFKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShQSFlfRU5BQkxFRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoUEhZX0ZSRVEpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFBIWV9DSEFOX1NVUFBPUlRFRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoUEhZX0NIQU4pLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFBIWV9SU1NJKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShQSFlfVFhfUE9XRVIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFBIWV9SWF9TRU5TSVRJVklUWSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NDQU5fU1RBVEUpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19TQ0FOX01BU0spLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19TQ0FOX1BFUklPRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDXzE1XzRfUEFOSUQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ18xNV80X0xBRERSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfMTVfNF9TQUREUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1JBV19TVFJFQU1fRU5BQkxFRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1BST01JU0NVT1VTX01PREUpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19FWFRFTkRFRF9BRERSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfREFUQV9QT0xMX1BFUklPRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX1NBVkVEKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfSUZfVVApLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9TVEFDS19VUCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX1JPTEUpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9ORVRXT1JLX05BTUUpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9YUEFOSUQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9NQVNURVJfS0VZKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9QQVJUSVRJT05fSUQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9LRVlfU1dJVENIX0dVQVJEVElNRSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0xFQURFUl9BRERSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfUEFSRU5UKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfTkVJR0hCT1JfVEFCTEUpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9MRUFERVJfUklEKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfTEVBREVSX1dFSUdIVCksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ORVRXT1JLX0RBVEEpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBKSwKKyNlbmRpZgorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ORVRXT1JLX0RBVEFfVkVSU0lPTiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0xFQURFUl9ORVRXT1JLX0RBVEEpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9TVEFCTEVfTEVBREVSX05FVFdPUktfREFUQSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX09GRl9NRVNIX1JPVVRFUyksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0FTU0lTVElOR19QT1JUUyksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0FMTE9XX0xPQ0FMX05FVF9EQVRBX0NIQU5HRSksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0NPTU1JU1NJT05FUl9FTkFCTEVEKSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfV0hJVEVMSVNUKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfV0hJVEVMSVNUX0VOQUJMRUQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19CTEFDS0xJU1QpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19CTEFDS0xJU1RfRU5BQkxFRCksCisjZW5kaWYKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfTU9ERSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0NISUxEX1RJTUVPVVQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9STE9DMTYpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9PTl9NRVNIX05FVFMpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkcpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKElQVjZfTUxfUFJFRklYKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShJUFY2X01MX0FERFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKElQVjZfTExfQUREUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSVBWNl9BRERSRVNTX1RBQkxFKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShJUFY2X1JPVVRFX1RBQkxFKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShJUFY2X0lDTVBfUElOR19PRkZMT0FEKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfRElTQ09WRVJZX1NDQU5fSk9JTkVSX0ZMQUcpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ESVNDT1ZFUllfU0NBTl9FTkFCTEVfRklMVEVSSU5HKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFNUUkVBTV9ORVQpLAorI2lmIE9QRU5USFJFQURfRlRECisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0NISUxEX1RBQkxFKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9QU0tDKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQ0hJTERfQ09VTlRfTUFYKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9DT05URVhUX1JFVVNFX0RFTEFZKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfTkVUV09SS19JRF9USU1FT1VUKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVIpLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKEpBTV9ERVRFQ1RfRU5BQkxFKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShKQU1fREVURUNURUQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKEpBTV9ERVRFQ1RfUlNTSV9USFJFU0hPTEQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKEpBTV9ERVRFQ1RfV0lORE9XKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShKQU1fREVURUNUX0JVU1kpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKEpBTV9ERVRFQ1RfSElTVE9SWV9CSVRNQVApLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZICYmIE9QRU5USFJFQURfRlRECisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVEKSwKKyNlbmRpZgorICAgIC8vIE1BQyBjb3VudGVycworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX1BLVF9UT1RBTCwgICAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9QS1RfQUNLX1JFUSwgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfVFhfUEtUX0FDS0VELCAgICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX1BLVF9OT19BQ0tfUkVRLCAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9QS1RfREFUQSwgICAgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfVFhfUEtUX0RBVEFfUE9MTCwgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX1BLVF9CRUFDT04sICAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9QS1RfQkVBQ09OX1JFUSwgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfVFhfUEtUX09USEVSLCAgICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX1BLVF9SRVRSWSwgICAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9QS1RfVU5JQ0FTVCwgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfVFhfUEtUX0JST0FEQ0FTVCwgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX0VSUl9DQ0EsICAgICAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9FUlJfQUJPUlQsICAgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfUEtUX1RPVEFMLCAgICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX1BLVF9EQVRBLCAgICAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9QS1RfREFUQV9QT0xMLCAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfUEtUX0JFQUNPTiwgICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX1BLVF9CRUFDT05fUkVRLCAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9QS1RfT1RIRVIsICAgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfUEtUX0ZJTFRfV0wsICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX1BLVF9GSUxUX0RBLCAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9QS1RfVU5JQ0FTVCwgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfUEtUX0JST0FEQ0FTVCwgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX0VSUl9FTVBUWSwgICAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9FUlJfVUtXTl9OQlIsICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfRVJSX05WTERfU0FERFIsICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX0VSUl9TRUNVUklUWSwgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9FUlJfQkFEX0ZDUywgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfRVJSX09USEVSLCAgICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX1BLVF9EVVAsICAgICAgICAgIE1BQ19DTlRSKSwKKyAgICAvLyBOQ1AgY291bnRlcnMKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9JUF9TRUNfVE9UQUwsICAgICBOQ1BfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfVFhfSVBfSU5TRUNfVE9UQUwsICAgTkNQX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX0lQX0RST1BQRUQsICAgICAgIE5DUF9DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9JUF9TRUNfVE9UQUwsICAgICBOQ1BfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfSVBfSU5TRUNfVE9UQUwsICAgTkNQX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX0lQX0RST1BQRUQsICAgICAgIE5DUF9DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9TUElORUxfVE9UQUwsICAgICBOQ1BfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfU1BJTkVMX1RPVEFMLCAgICAgTkNQX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX1NQSU5FTF9FUlIsICAgICAgIE5DUF9DTlRSKSwKKyAgICAvLyBJUCBjb3VudGVycworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX0lQX1RYX1NVQ0NFU1MsICAgICAgIElQX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX0lQX1JYX1NVQ0NFU1MsICAgICAgIElQX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX0lQX1RYX0ZBSUxVUkUsICAgICAgIElQX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX0lQX1JYX0ZBSUxVUkUsICAgICAgIElQX0NOVFIpLAorCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTVNHX0JVRkZFUl9DT1VOVEVSUyksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoREVCVUdfVEVTVF9BU1NFUlQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKERFQlVHX05DUF9MT0dfTEVWRUwpLAorI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FU1RfTEVHQUNZX1VMQV9QUkVGSVgpLAorI2VuZGlmCit9OworCisjZGVmaW5lIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKG5hbWUpICB7IFNQSU5FTF9QUk9QXyMjbmFtZSwgJk5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl8jI25hbWUgfQorCitjb25zdCBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJFbnRyeSBOY3BCYXNlOjptU2V0UHJvcGVydHlIYW5kbGVyVGFibGVbXSA9Cit7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoUE9XRVJfU1RBVEUpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKEhPU1RfUE9XRVJfU1RBVEUpLAorI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFBIWV9FTkFCTEVEKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfMTVfNF9TQUREUiksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoU1RSRUFNX1JBVyksCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoUEhZX1RYX1BPV0VSKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShQSFlfQ0hBTiksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1BST01JU0NVT1VTX01PREUpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19TQ0FOX01BU0spLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19TQ0FOX1NUQVRFKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfU0NBTl9QRVJJT0QpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ18xNV80X1BBTklEKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfMTVfNF9MQUREUiksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX0RBVEFfUE9MTF9QRVJJT0QpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19SQVdfU1RSRUFNX0VOQUJMRUQpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9JRl9VUCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX1NUQUNLX1VQKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfUk9MRSksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX05FVFdPUktfTkFNRSksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX1hQQU5JRCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX01BU1RFUl9LRVkpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQVNTSVNUSU5HX1BPUlRTKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShTVFJFQU1fTkVUX0lOU0VDVVJFKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShTVFJFQU1fTkVUKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShJUFY2X01MX1BSRUZJWCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSVBWNl9JQ01QX1BJTkdfT0ZGTE9BRCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1JMT0MxNl9ERUJVR19QQVNTVEhSVSksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19XSElURUxJU1QpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19XSElURUxJU1RfRU5BQkxFRCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX0JMQUNLTElTVCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX0JMQUNLTElTVF9FTkFCTEVEKSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19TUkNfTUFUQ0hfRU5BQkxFRCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTKSwKKyNlbmRpZgorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9NT0RFKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShERUJVR19OQ1BfTE9HX0xFVkVMKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfRElTQ09WRVJZX1NDQU5fSk9JTkVSX0ZMQUcpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ESVNDT1ZFUllfU0NBTl9FTkFCTEVfRklMVEVSSU5HKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQpLAorI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFKSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRlRECisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX1BTS0MpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9DSElMRF9USU1FT1VUKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfTkVUV09SS19JRF9USU1FT1VUKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9DSElMRF9DT1VOVF9NQVgpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ST1VURVJfVVBHUkFERV9USFJFU0hPTEQpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVkpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUiksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1BSRUZFUlJFRF9ST1VURVJfSUQpLAorI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TVEVFUklOR19EQVRBX1NFVF9PT0IKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfU1RFRVJJTkdfREFUQSksCisjZW5kaWYKKyNlbmRpZiAvLyAjaWYgT1BFTlRIUkVBRF9GVEQKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSkFNX0RFVEVDVF9FTkFCTEUpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKEpBTV9ERVRFQ1RfUlNTSV9USFJFU0hPTEQpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKEpBTV9ERVRFQ1RfV0lORE9XKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShKQU1fREVURUNUX0JVU1kpLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZICYmIE9QRU5USFJFQURfRlRECisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVEKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfVE1GX1BST1hZX1NUUkVBTSksCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVTVF9TVFJFQU1fTUZHKSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FU1RfTEVHQUNZX1VMQV9QUkVGSVgpLAorI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQpLAorI2VuZGlmCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoQ05UUl9SRVNFVCksCit9OworCisjZGVmaW5lIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSX0VOVFJZKG5hbWUpICB7IFNQSU5FTF9QUk9QXyMjbmFtZSwgJk5jcEJhc2U6Okluc2VydFByb3BlcnR5SGFuZGxlcl8jI25hbWUgfQorCitjb25zdCBOY3BCYXNlOjpJbnNlcnRQcm9wZXJ0eUhhbmRsZXJFbnRyeSBOY3BCYXNlOjptSW5zZXJ0UHJvcGVydHlIYW5kbGVyVGFibGVbXSA9Cit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMpLAorICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTKSwKKyNlbmRpZgorICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSX0VOVFJZKElQVjZfQUREUkVTU19UQUJMRSksCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0FTU0lTVElOR19QT1JUUyksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9PRkZfTUVTSF9ST1VURVMpLAorICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9PTl9NRVNIX05FVFMpLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0pPSU5FUlMpLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19XSElURUxJU1QpLAorICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19CTEFDS0xJU1QpLAorI2VuZGlmCit9OworCisjZGVmaW5lIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSX0VOVFJZKG5hbWUpICB7IFNQSU5FTF9QUk9QXyMjbmFtZSwgJk5jcEJhc2U6OlJlbW92ZVByb3BlcnR5SGFuZGxlcl8jI25hbWUgfQorCitjb25zdCBOY3BCYXNlOjpSZW1vdmVQcm9wZXJ0eUhhbmRsZXJFbnRyeSBOY3BCYXNlOjptUmVtb3ZlUHJvcGVydHlIYW5kbGVyVGFibGVbXSA9Cit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMpLAorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTKSwKKyNlbmRpZgorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSX0VOVFJZKElQVjZfQUREUkVTU19UQUJMRSksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9PRkZfTUVTSF9ST1VURVMpLAorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9PTl9NRVNIX05FVFMpLAorI2VuZGlmCisgICAgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0FTU0lTVElOR19QT1JUUyksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19XSElURUxJU1QpLAorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19CTEFDS0xJU1QpLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICBOQ1BfUkVNT1ZFX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQUNUSVZFX1JPVVRFUl9JRFMpLAorI2VuZGlmCit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBVdGlsaXR5IEZ1bmN0aW9ucworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgc3BpbmVsX3N0YXR1c190IFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMob3RFcnJvciBhRXJyb3IpCit7CisgICAgc3BpbmVsX3N0YXR1c190IHJldDsKKworICAgIHN3aXRjaCAoYUVycm9yKQorICAgIHsKKyAgICBjYXNlIE9UX0VSUk9SX05PTkU6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9GQUlMRUQ6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0RST1A6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfRFJPUFBFRDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PX0JVRlM6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfTk9NRU07CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9CVVNZOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX0JVU1k7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9QQVJTRToKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0lOVkFMSURfQVJHUzoKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19JTlZBTElEX0FSR1VNRU5UOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX1VOSU1QTEVNRU5URUQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX0lOVkFMSURfU1RBVEU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT19BQ0s6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfTk9fQUNLOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRToKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19DQ0FfRkFJTFVSRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0FMUkVBRFk6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfQUxSRUFEWTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PVF9GT1VORDoKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19JVEVNX05PVF9GT1VORDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0RJU0FCTEVEX0ZFQVRVUkU6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFVua25vd24gZXJyb3IgY29kZS4gV3JhcCBpdCBhcyBhIFNwaW5lbCBzdGF0dXMgYW5kIHJldHVybiB0aGF0LgorICAgICAgICByZXQgPSBzdGF0aWNfY2FzdDxzcGluZWxfc3RhdHVzX3Q+KFNQSU5FTF9TVEFUVVNfU1RBQ0tfTkFUSVZFX19CRUdJTiArIHN0YXRpY19jYXN0PHVpbnQzMl90PihhRXJyb3IpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNwaW5lbF9zdGF0dXNfdCBSZXNldFJlYXNvblRvU3BpbmVsU3RhdHVzKG90UGxhdFJlc2V0UmVhc29uIGFSZWFzb24pCit7CisgICAgc3BpbmVsX3N0YXR1c190IHJldDsKKworICAgIHN3aXRjaCAoYVJlYXNvbikKKyAgICB7CisgICAgY2FzZSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9QT1dFUl9PTjoKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19SRVNFVF9QT1dFUl9PTjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX1BMQVRfUkVTRVRfUkVBU09OX0VYVEVSTkFMOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX1JFU0VUX0VYVEVSTkFMOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfUExBVF9SRVNFVF9SRUFTT05fU09GVFdBUkU6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfU09GVFdBUkU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9GQVVMVDoKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19SRVNFVF9GQVVMVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX1BMQVRfUkVTRVRfUkVBU09OX0NSQVNIOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX1JFU0VUX0NSQVNIOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfUExBVF9SRVNFVF9SRUFTT05fQVNTRVJUOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX1JFU0VUX0FTU0VSVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX1BMQVRfUkVTRVRfUkVBU09OX1dBVENIRE9HOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX1JFU0VUX1dBVENIRE9HOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfUExBVF9SRVNFVF9SRUFTT05fT1RIRVI6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfT1RIRVI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19SRVNFVF9VTktOT1dOOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDhfdCBCb3JkZXJSb3V0ZXJDb25maWdUb0ZsYWdCeXRlKGNvbnN0IG90Qm9yZGVyUm91dGVyQ29uZmlnICZhQ29uZmlnKQoreworICAgIHVpbnQ4X3QgZmxhZ3MoMCk7CisKKyAgICBpZiAoYUNvbmZpZy5tUHJlZmVycmVkKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gU1BJTkVMX05FVF9GTEFHX1BSRUZFUlJFRDsKKyAgICB9CisKKyAgICBpZiAoYUNvbmZpZy5tU2xhYWMpCisgICAgeworICAgICAgICBmbGFncyB8PSBTUElORUxfTkVUX0ZMQUdfU0xBQUM7CisgICAgfQorCisgICAgaWYgKGFDb25maWcubURoY3ApCisgICAgeworICAgICAgICBmbGFncyB8PSBTUElORUxfTkVUX0ZMQUdfREhDUDsKKyAgICB9CisKKyAgICBpZiAoYUNvbmZpZy5tRGVmYXVsdFJvdXRlKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gU1BJTkVMX05FVF9GTEFHX0RFRkFVTFRfUk9VVEU7CisgICAgfQorCisgICAgaWYgKGFDb25maWcubUNvbmZpZ3VyZSkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IFNQSU5FTF9ORVRfRkxBR19DT05GSUdVUkU7CisgICAgfQorCisgICAgaWYgKGFDb25maWcubU9uTWVzaCkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IFNQSU5FTF9ORVRfRkxBR19PTl9NRVNIOworICAgIH0KKworICAgIGZsYWdzIHw9IChhQ29uZmlnLm1QcmVmZXJlbmNlIDw8IFNQSU5FTF9ORVRfRkxBR19QUkVGRVJFTkNFX09GRlNFVCk7CisKKyAgICByZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyB1aW50OF90IExpbmtGbGFnc1RvRmxhZ0J5dGUoYm9vbCBhUnhPbldoZW5JZGxlLCBib29sIGFTZWN1cmVEYXRhUmVxdWVzdHMsIGJvb2wgYURldmljZVR5cGUsIGJvb2wgYU5ldHdvcmtEYXRhKQoreworICAgIHVpbnQ4X3QgZmxhZ3MoMCk7CisKKyAgICBpZiAoYVJ4T25XaGVuSWRsZSkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IFNQSU5FTF9USFJFQURfTU9ERV9SWF9PTl9XSEVOX0lETEU7CisgICAgfQorCisgICAgaWYgKGFTZWN1cmVEYXRhUmVxdWVzdHMpCisgICAgeworICAgICAgICBmbGFncyB8PSBTUElORUxfVEhSRUFEX01PREVfU0VDVVJFX0RBVEFfUkVRVUVTVDsKKyAgICB9CisKKyAgICBpZiAoYURldmljZVR5cGUpCisgICAgeworICAgICAgICBmbGFncyB8PSBTUElORUxfVEhSRUFEX01PREVfRlVMTF9GVU5DVElPTl9ERVY7CisgICAgfQorCisgICAgaWYgKGFOZXR3b3JrRGF0YSkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IFNQSU5FTF9USFJFQURfTU9ERV9GVUxMX05FVFdPUktfREFUQTsKKyAgICB9CisKKyAgICByZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyB1aW50OF90IEV4dGVybmFsUm91dGVQcmVmZXJlbmNlVG9GbGFnQnl0ZShpbnQgYVByZWZlcmVuY2UpCit7CisgICAgdWludDhfdCBmbGFnczsKKworICAgIHN3aXRjaCAoYVByZWZlcmVuY2UpCisgICAgeworICAgIGNhc2UgT1RfUk9VVEVfUFJFRkVSRU5DRV9MT1c6CisgICAgICAgIGZsYWdzID0gU1BJTkVMX1JPVVRFX1BSRUZFUkVOQ0VfTE9XOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfUk9VVEVfUFJFRkVSRU5DRV9NRUQ6CisgICAgICAgIGZsYWdzID0gU1BJTkVMX1JPVVRFX1BSRUZFUkVOQ0VfTUVESVVNOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfUk9VVEVfUFJFRkVSRU5DRV9ISUdIOgorICAgICAgICBmbGFncyA9IFNQSU5FTF9ST1VURV9QUkVGRVJFTkNFX0hJR0g7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgZmxhZ3MgPSBTUElORUxfUk9VVEVfUFJFRkVSRU5DRV9NRURJVU07CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmbGFnczsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKworc3RhdGljIGludCBGbGFnQnl0ZVRvRXh0ZXJuYWxSb3V0ZVByZWZlcmVuY2UodWludDhfdCBhRmxhZ3MpCit7CisgICAgaW50IHJvdXRlX3ByZWZlcmVuY2UgPSAwOworCisgICAgc3dpdGNoIChhRmxhZ3MgJiBTUElORUxfTkVUX0ZMQUdfUFJFRkVSRU5DRV9NQVNLKQorICAgIHsKKyAgICBjYXNlIFNQSU5FTF9ST1VURV9QUkVGRVJFTkNFX0hJR0g6CisgICAgICAgIHJvdXRlX3ByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX0hJR0g7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUk9VVEVfUFJFRkVSRU5DRV9NRURJVU06CisgICAgICAgIHJvdXRlX3ByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX01FRDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9ST1VURV9QUkVGRVJFTkNFX0xPVzoKKyAgICAgICAgcm91dGVfcHJlZmVyZW5jZSA9IE9UX1JPVVRFX1BSRUZFUkVOQ0VfTE9XOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcm91dGVfcHJlZmVyZW5jZTsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogQ2xhc3MgQm9pbGVycGxhdGUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTmNwQmFzZSAqTmNwQmFzZTo6c05jcEluc3RhbmNlID0gTlVMTDsKKworTmNwQmFzZTo6TmNwQmFzZShvdEluc3RhbmNlICphSW5zdGFuY2UpOgorICAgIG1JbnN0YW5jZShhSW5zdGFuY2UpLAorICAgIG1UeEZyYW1lQnVmZmVyKG1UeEJ1ZmZlciwgc2l6ZW9mKG1UeEJ1ZmZlcikpLAorICAgIG1MYXN0U3RhdHVzKFNQSU5FTF9TVEFUVVNfT0spLAorICAgIG1TdXBwb3J0ZWRDaGFubmVsTWFzayhPVF9SQURJT19TVVBQT1JURURfQ0hBTk5FTFMpLAorICAgIG1DaGFubmVsTWFzayhPVF9SQURJT19TVVBQT1JURURfQ0hBTk5FTFMpLAorICAgIG1TY2FuUGVyaW9kKDIwMCksIC8vIG1zCisgICAgbURpc2NvdmVyeVNjYW5Kb2luZXJGbGFnKGZhbHNlKSwKKyAgICBtRGlzY292ZXJ5U2NhbkVuYWJsZUZpbHRlcmluZyhmYWxzZSksCisgICAgbURpc2NvdmVyeVNjYW5QYW5JZCgweGZmZmYpLAorICAgIG1VcGRhdGVDaGFuZ2VkUHJvcHNUYXNrKGFJbnN0YW5jZS0+bUlwNi5tVGFza2xldFNjaGVkdWxlciwgJk5jcEJhc2U6OlVwZGF0ZUNoYW5nZWRQcm9wcywgdGhpcyksCisgICAgbUNoYW5nZWRGbGFncyhOQ1BfQ0hBTkdFRF9QTEFURk9STV9SRVNFVCksCisgICAgbVNob3VsZFNpZ25hbEVuZE9mU2NhbihmYWxzZSksCisgICAgbUhvc3RQb3dlclN0YXRlKFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX09OTElORSksCisgICAgbUhvc3RQb3dlclN0YXRlSW5Qcm9ncmVzcyhmYWxzZSksCisgICAgbUhvc3RQb3dlclJlcGx5RnJhbWVUYWcoTmNwRnJhbWVCdWZmZXI6OmtJbnZhbGlkVGFnKSwKKyAgICBtSG9zdFBvd2VyU3RhdGVIZWFkZXIoMCksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorICAgIG1TaG91bGRTaWduYWxKYW1TdGF0ZUNoYW5nZShmYWxzZSksCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfRU5BQkxFX1BFRUtfUE9LRQorICAgIG1BbGxvd1BlZWtEZWxlZ2F0ZShOVUxMKSwKKyAgICBtQWxsb3dQb2tlRGVsZWdhdGUoTlVMTCksCisjZW5kaWYKKyAgICBtRHJvcHBlZFJlcGx5VGlkKDApLAorICAgIG1Ecm9wcGVkUmVwbHlUaWRCaXRTZXQoMCksCisgICAgbU5leHRFeHBlY3RlZFRpZCgwKSwKKyAgICBtQWxsb3dMb2NhbE5ldHdvcmtEYXRhQ2hhbmdlKGZhbHNlKSwKKyAgICBtUmVxdWlyZUpvaW5FeGlzdGluZ05ldHdvcmsoZmFsc2UpLAorICAgIG1Jc1Jhd1N0cmVhbUVuYWJsZWQoZmFsc2UpLAorICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUoZmFsc2UpLAorI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIG1DdXJUcmFuc21pdFRJRCgwKSwKKyAgICBtQ3VyUmVjZWl2ZUNoYW5uZWwoT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9DSEFOTkVMKSwKKyAgICBtQ3VyU2NhbkNoYW5uZWwoTkNQX0lOVkFMSURfU0NBTl9DSEFOTkVMKSwKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworICAgIG1GcmFtaW5nRXJyb3JDb3VudGVyKDApLAorICAgIG1SeFNwaW5lbEZyYW1lQ291bnRlcigwKSwKKyAgICBtUnhTcGluZWxPdXRPZk9yZGVyVGlkQ291bnRlcigwKSwKKyAgICBtVHhTcGluZWxGcmFtZUNvdW50ZXIoMCksCisgICAgbUluYm91bmRTZWN1cmVJcEZyYW1lQ291bnRlcigwKSwKKyAgICBtSW5ib3VuZEluc2VjdXJlSXBGcmFtZUNvdW50ZXIoMCksCisgICAgbU91dGJvdW5kU2VjdXJlSXBGcmFtZUNvdW50ZXIoMCksCisgICAgbU91dGJvdW5kSW5zZWN1cmVJcEZyYW1lQ291bnRlcigwKSwKKyAgICBtRHJvcHBlZE91dGJvdW5kSXBGcmFtZUNvdW50ZXIoMCksCisgICAgbURyb3BwZWRJbmJvdW5kSXBGcmFtZUNvdW50ZXIoMCkKK3sKKyAgICBhc3NlcnQobUluc3RhbmNlICE9IE5VTEwpOworCisgICAgc05jcEluc3RhbmNlID0gdGhpczsKKworICAgIG1UeEZyYW1lQnVmZmVyLlNldEZyYW1lUmVtb3ZlZENhbGxiYWNrKCZOY3BCYXNlOjpIYW5kbGVGcmFtZVJlbW92ZWRGcm9tTmNwQnVmZmVyLCB0aGlzKTsKKworICAgIG90U2V0U3RhdGVDaGFuZ2VkQ2FsbGJhY2sobUluc3RhbmNlLCAmTmNwQmFzZTo6SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQsIHRoaXMpOworICAgIG90SXA2U2V0UmVjZWl2ZUNhbGxiYWNrKG1JbnN0YW5jZSwgJk5jcEJhc2U6OkhhbmRsZURhdGFncmFtRnJvbVN0YWNrLCB0aGlzKTsKKyAgICBvdElwNlNldFJlY2VpdmVGaWx0ZXJFbmFibGVkKG1JbnN0YW5jZSwgdHJ1ZSk7CisgICAgb3RMaW5rU2V0UGNhcENhbGxiYWNrKG1JbnN0YW5jZSwgJk5jcEJhc2U6OkhhbmRsZVJhd0ZyYW1lLCBzdGF0aWNfY2FzdDx2b2lkICo+KHRoaXMpKTsKKyAgICBvdEljbXA2U2V0RWNob0VuYWJsZWQobUluc3RhbmNlLCBmYWxzZSk7CisKKyAgICBtVXBkYXRlQ2hhbmdlZFByb3BzVGFzay5Qb3N0KCk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kKKyAgICBtTGVnYWN5Tm9kZURpZEpvaW4gPSBmYWxzZTsKKyAgICBtTGVnYWN5SGFuZGxlcnMgPSBOVUxMOworICAgIG1lbXNldChtTGVnYWN5VWxhUHJlZml4LCAwLCBzaXplb2YobUxlZ2FjeVVsYVByZWZpeCkpOworI2VuZGlmCit9CisKK05jcEJhc2UgKk5jcEJhc2U6OkdldE5jcEluc3RhbmNlKHZvaWQpCit7CisgICAgcmV0dXJuIHNOY3BJbnN0YW5jZTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogT3V0Ym91bmQgRnJhbWUgbWV0aG9kcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvdEVycm9yIE5jcEJhc2U6Ok91dGJvdW5kRnJhbWVCZWdpbih2b2lkKQoreworICAgIHJldHVybiBtVHhGcmFtZUJ1ZmZlci5JbkZyYW1lQmVnaW4oKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpPdXRib3VuZEZyYW1lRmVlZERhdGEoY29uc3QgdWludDhfdCAqYURhdGFCdWZmZXIsIHVpbnQxNl90IGFEYXRhQnVmZmVyTGVuZ3RoKQoreworICAgIHJldHVybiBtVHhGcmFtZUJ1ZmZlci5JbkZyYW1lRmVlZERhdGEoYURhdGFCdWZmZXIsIGFEYXRhQnVmZmVyTGVuZ3RoKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpPdXRib3VuZEZyYW1lRmVlZE1lc3NhZ2Uob3RNZXNzYWdlICphTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gbVR4RnJhbWVCdWZmZXIuSW5GcmFtZUZlZWRNZXNzYWdlKGFNZXNzYWdlKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpPdXRib3VuZEZyYW1lRW5kKHZvaWQpCit7CisgICAgcmV0dXJuIG1UeEZyYW1lQnVmZmVyLkluRnJhbWVFbmQoKTsKK30KKworTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIE5jcEJhc2U6OkdldExhc3RPdXRib3VuZEZyYW1lVGFnKHZvaWQpCit7CisgICAgcmV0dXJuIG1UeEZyYW1lQnVmZmVyLkluRnJhbWVHZXRMYXN0VGFnKCk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlVG1mUHJveHlTdHJlYW0ob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYUxvY2F0b3IsIHVpbnQxNl90IGFQb3J0LCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxOY3BCYXNlICo+KGFDb250ZXh0KS0+SGFuZGxlVG1mUHJveHlTdHJlYW0oYU1lc3NhZ2UsIGFMb2NhdG9yLCBhUG9ydCk7Cit9CisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlVG1mUHJveHlTdHJlYW0ob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYUxvY2F0b3IsIHVpbnQxNl90IGFQb3J0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQxNl90IGxlbmd0aCA9IG90TWVzc2FnZUdldExlbmd0aChhTWVzc2FnZSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworCisgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUFJPUF9TIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfVE1GX1BST1hZX1NUUkVBTSwKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoCisgICAgICAgICAgICAgICAgKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRNZXNzYWdlKGFNZXNzYWdlKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICAgICBhTG9jYXRvciwKKyAgICAgICAgICAgICAgICAgICAgYVBvcnQKKyAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIFNldCB0aGUgYGFNZXNzYWdlYCBwb2ludGVyIHRvIE5VTEwgdG8gaW5kaWNhdGUgdGhhdCBpdCBkb2VzCisgICAgLy8gbm90IG5lZWQgdG8gYmUgZnJlZWQgYXQgdGhlIGV4aXQuIFRoZSBgYU1lc3NhZ2VgIGlzIG5vdyBvd25lZAorICAgIC8vIGJ5IHRoZSBPdXRib3VuZEZyYW1lIGFuZCB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlIGZyYW1lIGlzIGVpdGhlcgorICAgIC8vIHN1Y2Nlc3NmdWxseSBzZW50IGFuZCB0aGVuIHJlbW92ZWQsIG9yIGlmIHRoZSBmcmFtZSBnZXRzCisgICAgLy8gZGlzY2FyZGVkLgorICAgIGFNZXNzYWdlID0gTlVMTDsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKworICAgIGlmIChhTWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgb3RNZXNzYWdlRnJlZShhTWVzc2FnZSk7CisgICAgfQorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBTZW5kTGFzdFN0YXR1cyhTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLCBTUElORUxfU1RBVFVTX0RST1BQRUQpOworICAgIH0KK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogT3V0Ym91bmQgRGF0YWdyYW0gSGFuZGxpbmcKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBOY3BCYXNlOjpIYW5kbGVEYXRhZ3JhbUZyb21TdGFjayhvdE1lc3NhZ2UgKmFNZXNzYWdlLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxOY3BCYXNlICo+KGFDb250ZXh0KS0+SGFuZGxlRGF0YWdyYW1Gcm9tU3RhY2soYU1lc3NhZ2UpOworfQorCit2b2lkIE5jcEJhc2U6OkhhbmRsZURhdGFncmFtRnJvbVN0YWNrKG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgYm9vbCBpc1NlY3VyZSA9IG90TWVzc2FnZUlzTGlua1NlY3VyaXR5RW5hYmxlZChhTWVzc2FnZSk7CisgICAgdWludDE2X3QgbGVuZ3RoID0gb3RNZXNzYWdlR2V0TGVuZ3RoKGFNZXNzYWdlKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIGlzU2VjdXJlID8gU1BJTkVMX1BST1BfU1RSRUFNX05FVCA6IFNQSU5FTF9QUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkUsCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aAorICAgICAgICAgICAgICAgICkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkTWVzc2FnZShhTWVzc2FnZSkpOworCisgICAgLy8gU2V0IHRoZSBgYU1lc3NhZ2VgIHBvaW50ZXIgdG8gTlVMTCB0byBpbmRpY2F0ZSB0aGF0IGl0IGRvZXMKKyAgICAvLyBub3QgbmVlZCB0byBiZSBmcmVlZCBhdCB0aGUgZXhpdC4gVGhlIGBhTWVzc2FnZWAgaXMgbm93IG93bmVkCisgICAgLy8gYnkgdGhlIE91dGJvdW5kRnJhbWUgYW5kIHdpbGwgYmUgZnJlZWQgd2hlbiB0aGUgZnJhbWUgaXMgZWl0aGVyCisgICAgLy8gc3VjY2Vzc2Z1bGx5IHNlbnQgYW5kIHRoZW4gcmVtb3ZlZCwgb3IgaWYgdGhlIGZyYW1lIGdldHMKKyAgICAvLyBkaXNjYXJkZWQuCisgICAgYU1lc3NhZ2UgPSBOVUxMOworCisgICAgLy8gQXBwZW5kIGFueSBtZXRhZGF0YSAocnNzaSwgbHFpLCBjaGFubmVsLCBldGMpIGhlcmUhCisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoYU1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90TWVzc2FnZUZyZWUoYU1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgU2VuZExhc3RTdGF0dXMoU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwgU1BJTkVMX1NUQVRVU19EUk9QUEVEKTsKKyAgICAgICAgbURyb3BwZWRPdXRib3VuZElwRnJhbWVDb3VudGVyKys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpc1NlY3VyZSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dGJvdW5kU2VjdXJlSXBGcmFtZUNvdW50ZXIrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXRib3VuZEluc2VjdXJlSXBGcmFtZUNvdW50ZXIrKzsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogUmF3IGZyYW1lIGhhbmRsaW5nCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlUmF3RnJhbWUoY29uc3Qgb3RSYWRpb0ZyYW1lICphRnJhbWUsIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PE5jcEJhc2UgKj4oYUNvbnRleHQpLT5IYW5kbGVSYXdGcmFtZShhRnJhbWUpOworfQorCit2b2lkIE5jcEJhc2U6OkhhbmRsZVJhd0ZyYW1lKGNvbnN0IG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgIHVpbnQxNl90IGZsYWdzID0gMDsKKworICAgIGlmICghbUlzUmF3U3RyZWFtRW5hYmxlZCkKKyAgICB7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKworICAgIGlmIChhRnJhbWUtPm1EaWRUWCkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IFNQSU5FTF9NRF9GTEFHX1RYOworICAgIH0KKworICAgIC8vIEFwcGVuZCBmcmFtZSBoZWFkZXIgYW5kIGZyYW1lIGxlbmd0aAorICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUFJPUF9TIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICBTUElORUxfUFJPUF9TVFJFQU1fUkFXLAorICAgICAgICAgICAgYUZyYW1lLT5tTGVuZ3RoCisgICAgICAgICkpOworCisgICAgLy8gQXBwZW5kIHRoZSBmcmFtZSBjb250ZW50cworICAgIFN1Y2Nlc3NPckV4aXQoT3V0Ym91bmRGcmFtZUZlZWREYXRhKGFGcmFtZS0+bVBzZHUsIGFGcmFtZS0+bUxlbmd0aCkpOworCisgICAgLy8gQXBwZW5kIG1ldGFkYXRhIChyc3NpLCBldGMpCisgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUyggIC8vIFBIWS1kYXRhCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX05VTExfUyAvLyBFbXB0eSBmb3Igbm93CisgICAgICAgICAgICApCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfU1RSVUNUX1MoICAvLyBWZW5kb3ItZGF0YQorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9OVUxMX1MgLy8gRW1wdHkgZm9yIG5vdworICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGFGcmFtZS0+bVBvd2VyLCAgIC8vIFRYIFBvd2VyCisgICAgICAgICAgICAtMTI4LCAgICAgICAgICAgICAvLyBOb2lzZSBGbG9vciAoQ3VycmVudGx5IHVudXNlZCkKKyAgICAgICAgICAgIGZsYWdzICAgICAgICAgICAgIC8vIEZsYWdzCisKKyAgICAgICAgICAgLy8gU2tpcCBQSFkgYW5kIFZlbmRvciBkYXRhIGZvciBub3cKKyAgICAgICAgKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBTY2FuIFJlc3VsdHMgR2x1ZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIE5jcEJhc2U6OkhhbmRsZUFjdGl2ZVNjYW5SZXN1bHRfSnVtcChvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PE5jcEJhc2UgKj4oYUNvbnRleHQpLT5IYW5kbGVBY3RpdmVTY2FuUmVzdWx0KGFSZXN1bHQpOworfQorCit2b2lkIE5jcEJhc2U6OkhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQob3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0KQoreworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBpZiAoYVJlc3VsdCkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgZmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhUmVzdWx0LT5tVmVyc2lvbiA8PCBTUElORUxfQkVBQ09OX1RIUkVBRF9GTEFHX1ZFUlNJT05fU0hJRlQpOworCisgICAgICAgIGlmIChhUmVzdWx0LT5tSXNKb2luYWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgZmxhZ3MgfD0gU1BJTkVMX0JFQUNPTl9USFJFQURfRkxBR19KT0lOQUJMRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhUmVzdWx0LT5tSXNOYXRpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsYWdzIHw9IFNQSU5FTF9CRUFDT05fVEhSRUFEX0ZMQUdfTkFUSVZFOworICAgICAgICB9CisKKyAgICAgICAgU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX0JFQUNPTiwKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9NQUNfU0NBTl9SRVNVTFRfUygKKyAgICAgICAgICAgICAgICBTUElORUxfODAyXzE1XzRfREFUQVRZUEVfTUFDX1NDQU5fUkVTVUxUX1YxX1MsCisgICAgICAgICAgICAgICAgU1BJTkVMX05FVF9EQVRBVFlQRV9NQUNfU0NBTl9SRVNVTFRfVjJfUworICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGFSZXN1bHQtPm1DaGFubmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFubmVsCisgICAgICAgICAgICBhUmVzdWx0LT5tUnNzaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUlNTSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICJtYWMtbGF5ZXIgZGF0YSIKKyAgICAgICAgICAgIGFSZXN1bHQtPm1FeHRBZGRyZXNzLm04LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGxhZGRyCisgICAgICAgICAgICAweEZGRkYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBzYWRkciwgbm90IGdpdmVuCisgICAgICAgICAgICBhUmVzdWx0LT5tUGFuSWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBwYW5pZAorICAgICAgICAgICAgYVJlc3VsdC0+bUxxaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgbHFpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIm5ldC1sYXllciBkYXRhIgorICAgICAgICAgICAgU1BJTkVMX1BST1RPQ09MX1RZUEVfVEhSRUFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgdHlwZQorICAgICAgICAgICAgZmxhZ3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgZmxhZ3MKKyAgICAgICAgICAgIGFSZXN1bHQtPm1OZXR3b3JrTmFtZS5tOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIG5ldHdvcmsgbmFtZQorICAgICAgICAgICAgYVJlc3VsdC0+bUV4dGVuZGVkUGFuSWQubTgsIE9UX0VYVF9QQU5fSURfU0laRSwgICAgICAgICAgICAgICAgIC8vICAgICAgeHBhbmlkCisgICAgICAgICAgICBhUmVzdWx0LT5tU3RlZXJpbmdEYXRhLm04LCBhUmVzdWx0LT5tU3RlZXJpbmdEYXRhLm1MZW5ndGggICAgICAgLy8gICAgICBzdGVlcmluZyBkYXRhCisgICAgICAgICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFdlIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBzY2FuLCBzbyBzZW5kIG91dAorICAgICAgICAvLyBhIHByb3BlcnR5IHVwZGF0ZSBpbmRpY2F0aW5nIHN1Y2guCisgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1NDQU5fU1RBVEVfSURMRQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgLy8gSWYgd2UgY291bGQgbm90IHNlbmQgdGhlIGVuZCBvZiBzY2FuIGluZGljYXRvciBtZXNzYWdlIG5vdyAobm8KKyAgICAgICAgLy8gYnVmZmVyIHNwYWNlKSwgd2Ugc2V0IGBtU2hvdWxkU2lnbmFsRW5kT2ZTY2FuYCB0byB0cnVlIHRvIHNlbmQKKyAgICAgICAgLy8gaXQgb3V0IHdoZW4gYnVmZmVyIHNwYWNlIGJlY29tZXMgYXZhaWxhYmxlLgorICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNob3VsZFNpZ25hbEVuZE9mU2NhbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlRW5lcmd5U2NhblJlc3VsdF9KdW1wKG90RW5lcmd5U2NhblJlc3VsdCAqYVJlc3VsdCwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TmNwQmFzZSAqPihhQ29udGV4dCktPkhhbmRsZUVuZXJneVNjYW5SZXN1bHQoYVJlc3VsdCk7Cit9CisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlRW5lcmd5U2NhblJlc3VsdChvdEVuZXJneVNjYW5SZXN1bHQgKmFSZXN1bHQpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIGlmIChhUmVzdWx0KQorICAgIHsKKyAgICAgICAgU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19FTkVSR1lfU0NBTl9SRVNVTFQsCisgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAvLyBDaGFubmVsCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUyAgICAvLyBSc3NpCisgICAgICAgICAgICApLAorICAgICAgICAgICAgYVJlc3VsdC0+bUNoYW5uZWwsCisgICAgICAgICAgICBhUmVzdWx0LT5tTWF4UnNzaQorICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBXZSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgc2Nhbiwgc28gc2VuZCBvdXQKKyAgICAgICAgLy8gYSBwcm9wZXJ0eSB1cGRhdGUgaW5kaWNhdGluZyBzdWNoLgorICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURSwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9TQ0FOX1NUQVRFX0lETEUKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgIC8vIElmIHdlIGNvdWxkIG5vdCBzZW5kIHRoZSBlbmQgb2Ygc2NhbiBpbmRpY2F0b3IgbWVzc2FnZSBub3cgKG5vCisgICAgICAgIC8vIGJ1ZmZlciBzcGFjZSksIHdlIHNldCBgbVNob3VsZFNpZ25hbEVuZE9mU2NhbmAgdG8gdHJ1ZSB0byBzZW5kCisgICAgICAgIC8vIGl0IG91dCB3aGVuIGJ1ZmZlciBzcGFjZSBiZWNvbWVzIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TaG91bGRTaWduYWxFbmRPZlNjYW4gPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBSYXcgTGluay1MYXllciBEYXRhcGF0aCBHbHVlCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKwordm9pZCBOY3BCYXNlOjpMaW5rUmF3UmVjZWl2ZURvbmUob3RJbnN0YW5jZSAqLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgc05jcEluc3RhbmNlLT5MaW5rUmF3UmVjZWl2ZURvbmUoYUZyYW1lLCBhRXJyb3IpOworfQorCit2b2lkIE5jcEJhc2U6OkxpbmtSYXdSZWNlaXZlRG9uZShvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgdWludDE2X3QgZmxhZ3MgPSAwOworCisgICAgU3VjY2Vzc09yRXhpdChPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisKKyAgICBpZiAoYUZyYW1lLT5tRGlkVFgpCisgICAgeworICAgICAgICBmbGFncyB8PSBTUElORUxfTURfRkxBR19UWDsKKyAgICB9CisKKyAgICAvLyBBcHBlbmQgZnJhbWUgaGVhZGVyIGFuZCBmcmFtZSBsZW5ndGgKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUyBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfU1RSRUFNX1JBVywKKyAgICAgICAgICAgIChhRXJyb3IgPT0gT1RfRVJST1JfTk9ORSkgPyBhRnJhbWUtPm1MZW5ndGggOiAwCisgICAgICAgICkpOworCisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgLy8gQXBwZW5kIHRoZSBmcmFtZSBjb250ZW50cworICAgICAgICBTdWNjZXNzT3JFeGl0KE91dGJvdW5kRnJhbWVGZWVkRGF0YShhRnJhbWUtPm1Qc2R1LCBhRnJhbWUtPm1MZW5ndGgpKTsKKyAgICB9CisKKyAgICAvLyBBcHBlbmQgbWV0YWRhdGEgKHJzc2ksIGV0YykKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUworICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKCAvLyBQSFktZGF0YQorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TIC8vIDgwMi4xNS40IGNoYW5uZWwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAvLyA4MDIuMTUuNCBMUUkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUyggLy8gVmVuZG9yLWRhdGEKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUworICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGFGcmFtZS0+bVBvd2VyLCAgICAvLyBUWCBQb3dlcgorICAgICAgICAgICAgLTEyOCwgICAgICAgICAgICAgIC8vIE5vaXNlIEZsb29yIChDdXJyZW50bHkgdW51c2VkKQorICAgICAgICAgICAgZmxhZ3MsICAgICAgICAgICAgIC8vIEZsYWdzCisgICAgICAgICAgICBhRnJhbWUtPm1DaGFubmVsLCAgLy8gUmVjZWl2ZSBjaGFubmVsCisgICAgICAgICAgICBhRnJhbWUtPm1McWksICAgICAgLy8gTGluayBxdWFsaXR5IGluZGljYXRvcgorICAgICAgICAgICAgYUVycm9yICAgICAgICAgICAgIC8vIFJlY2VpdmUgZXJyb3IKKyAgICAgICAgKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBOY3BCYXNlOjpMaW5rUmF3VHJhbnNtaXREb25lKG90SW5zdGFuY2UgKiwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIGJvb2wgYUZyYW1lUGVuZGluZywgb3RFcnJvciBhRXJyb3IpCit7CisgICAgc05jcEluc3RhbmNlLT5MaW5rUmF3VHJhbnNtaXREb25lKGFGcmFtZSwgYUZyYW1lUGVuZGluZywgYUVycm9yKTsKK30KKwordm9pZCBOY3BCYXNlOjpMaW5rUmF3VHJhbnNtaXREb25lKG90UmFkaW9GcmFtZSAqLCBib29sIGFGcmFtZVBlbmRpbmcsIG90RXJyb3IgYUVycm9yKQoreworICAgIGlmIChtQ3VyVHJhbnNtaXRUSUQpCisgICAgeworICAgICAgICBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wIHwgbUN1clRyYW5zbWl0VElELAorICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTEFTVF9TVEFUVVMsCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUyBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhhRXJyb3IpLAorICAgICAgICAgICAgYUZyYW1lUGVuZGluZworICAgICAgICApOworCisgICAgICAgIC8vIENsZWFyIGNhY2hlZCB0cmFuc21pdCBUSUQKKyAgICAgICAgbUN1clRyYW5zbWl0VElEID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgTmNwQmFzZTo6TGlua1Jhd0VuZXJneVNjYW5Eb25lKG90SW5zdGFuY2UgKiwgaW50OF90IGFFbmVyZ3lTY2FuTWF4UnNzaSkKK3sKKyAgICBzTmNwSW5zdGFuY2UtPkxpbmtSYXdFbmVyZ3lTY2FuRG9uZShhRW5lcmd5U2Nhbk1heFJzc2kpOworfQorCit2b2lkIE5jcEJhc2U6OkxpbmtSYXdFbmVyZ3lTY2FuRG9uZShpbnQ4X3QgYUVuZXJneVNjYW5NYXhSc3NpKQoreworICAgIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICBTUElORUxfUFJPUF9NQUNfRU5FUkdZX1NDQU5fUkVTVUxULAorICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUworICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TLAorICAgICAgICBtQ3VyU2NhbkNoYW5uZWwsCisgICAgICAgIGFFbmVyZ3lTY2FuTWF4UnNzaQorICAgICk7CisKKyAgICAvLyBDbGVhciBjdXJyZW50IHNjYW4gY2hhbm5lbAorICAgIG1DdXJTY2FuQ2hhbm5lbCA9IE5DUF9JTlZBTElEX1NDQU5fQ0hBTk5FTDsKKworICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmUgYmFjayBsaXN0ZW5pbmcgb24gdGhlIG9yaWdpbmFsIHJlY2VpdmUgY2hhbm5lbCwKKyAgICAvLyBzaW5jZSB0aGUgZW5lcmd5IHNjYW4gY291bGQgaGF2ZSBiZWVuIG9uIGEgZGlmZmVyZW50IGNoYW5uZWwuCisgICAgb3RMaW5rUmF3UmVjZWl2ZShtSW5zdGFuY2UsIG1DdXJSZWNlaXZlQ2hhbm5lbCwgJk5jcEJhc2U6OkxpbmtSYXdSZWNlaXZlRG9uZSk7CisKKyAgICAvLyBXZSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgc2Nhbiwgc28gc2VuZCBvdXQKKyAgICAvLyBhIHByb3BlcnR5IHVwZGF0ZSBpbmRpY2F0aW5nIHN1Y2guCisgICAgU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFLAorICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgU1BJTkVMX1NDQU5fU1RBVEVfSURMRQorICAgICk7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogQWRkcmVzcyBUYWJsZSBDaGFuZ2VkIEdsdWUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBOY3BCYXNlOjpIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCh1aW50MzJfdCBhRmxhZ3MsIHZvaWQgKmFDb250ZXh0KQoreworICAgIE5jcEJhc2UgKm9iaiA9IHN0YXRpY19jYXN0PE5jcEJhc2UgKj4oYUNvbnRleHQpOworCisgICAgb2JqLT5tQ2hhbmdlZEZsYWdzIHw9IGFGbGFnczsKKworICAgIG9iai0+bVVwZGF0ZUNoYW5nZWRQcm9wc1Rhc2suUG9zdCgpOworfQorCit2b2lkIE5jcEJhc2U6OlVwZGF0ZUNoYW5nZWRQcm9wcyhUYXNrbGV0ICZhVGFza2xldCkKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYVRhc2tsZXQpOworICAgIEdldE5jcEluc3RhbmNlKCktPlVwZGF0ZUNoYW5nZWRQcm9wcygpOworfQorCit2b2lkIE5jcEJhc2U6OlVwZGF0ZUNoYW5nZWRQcm9wcyh2b2lkKQoreworICAgIHdoaWxlIChtQ2hhbmdlZEZsYWdzICE9IDApCisgICAgeworICAgICAgICBpZiAoKG1DaGFuZ2VkRmxhZ3MgJiBOQ1BfQ0hBTkdFRF9QTEFURk9STV9SRVNFVCkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgICAgICBTZW5kTGFzdFN0YXR1cygKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgUmVzZXRSZWFzb25Ub1NwaW5lbFN0YXR1cyhvdFBsYXRHZXRSZXNldFJlYXNvbihtSW5zdGFuY2UpKQorICAgICAgICAgICAgICAgICkpOworCisgICAgICAgICAgICBtQ2hhbmdlZEZsYWdzICY9IH5zdGF0aWNfY2FzdDx1aW50MzJfdD4oTkNQX0NIQU5HRURfUExBVEZPUk1fUkVTRVQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChtQ2hhbmdlZEZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfTExfQUREUikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgICAgICBIYW5kbGVDb21tYW5kUHJvcGVydHlHZXQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX0lQVjZfTExfQUREUgorICAgICAgICAgICAgICAgICkpOworCisgICAgICAgICAgICBtQ2hhbmdlZEZsYWdzICY9IH5zdGF0aWNfY2FzdDx1aW50MzJfdD4oT1RfQ0hBTkdFRF9USFJFQURfTExfQUREUik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG1DaGFuZ2VkRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9NTF9BRERSKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfSVBWNl9NTF9BRERSCisgICAgICAgICAgICAgICAgKSk7CisKKyAgICAgICAgICAgIG1DaGFuZ2VkRmxhZ3MgJj0gfnN0YXRpY19jYXN0PHVpbnQzMl90PihPVF9DSEFOR0VEX1RIUkVBRF9NTF9BRERSKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgobUNoYW5nZWRGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX1JPTEUpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtUmVxdWlyZUpvaW5FeGlzdGluZ05ldHdvcmspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChvdFRocmVhZEdldERldmljZVJvbGUobUluc3RhbmNlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIG1SZXF1aXJlSm9pbkV4aXN0aW5nTmV0d29yayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKG90VGhyZWFkR2V0RGV2aWNlUm9sZShtSW5zdGFuY2UpID09IE9UX0RFVklDRV9ST0xFX0xFQURFUikKKyAgICAgICAgICAgICAgICAgICYmIG90VGhyZWFkSXNTaW5nbGV0b24obUluc3RhbmNlKQorI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgICAgICAgICAgICAgICAgICAmJiAhbUxlZ2FjeU5vZGVEaWRKb2luCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtQ2hhbmdlZEZsYWdzICY9IH5zdGF0aWNfY2FzdDx1aW50MzJfdD4oT1RfQ0hBTkdFRF9USFJFQURfUEFSVElUSU9OX0lEKTsKKyAgICAgICAgICAgICAgICAgICAgb3RUaHJlYWRTZXRFbmFibGVkKG1JbnN0YW5jZSwgZmFsc2UpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IEl0IHdvdWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBpbmRpY2F0ZQorICAgICAgICAgICAgICAgICAgICAvLyAgIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIHRoYW4gU1BJTkVMX1NUQVRVU19KT0lOX0ZBSUxVUkUKKyAgICAgICAgICAgICAgICAgICAgLy8gICBoZXJlLCBidXQgaXQgaXNuJ3QgY2xlYXIgaG93IHRoYXQgd291bGQgd29yaworICAgICAgICAgICAgICAgICAgICAvLyAgIHdpdGggdGhlIGN1cnJlbnQgT3BlblRocmVhZCBBUEkuCisKKyAgICAgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbmRMYXN0U3RhdHVzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1NUQVRVU19KT0lOX0ZBSUxVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICkpOworCisgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVDb21tYW5kUHJvcGVydHlHZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfU1RBQ0tfVVAKKyAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HCisgICAgICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX1JPTEUKKyAgICAgICAgICAgICAgICApKTsKKworICAgICAgICAgICAgbUNoYW5nZWRGbGFncyAmPSB+c3RhdGljX2Nhc3Q8dWludDMyX3Q+KE9UX0NIQU5HRURfVEhSRUFEX1JPTEUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChtQ2hhbmdlZEZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUEFSVElUSU9OX0lEKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX1BBUlRJVElPTl9JRAorICAgICAgICAgICAgICAgICkpOworCisgICAgICAgICAgICBtQ2hhbmdlZEZsYWdzICY9IH5zdGF0aWNfY2FzdDx1aW50MzJfdD4oT1RfQ0hBTkdFRF9USFJFQURfUEFSVElUSU9OX0lEKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgobUNoYW5nZWRGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX0tFWV9TRVFVRU5DRV9DT1VOVEVSKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSCisgICAgICAgICAgICAgICAgKSk7CisKKyAgICAgICAgICAgIG1DaGFuZ2VkRmxhZ3MgJj0gfnN0YXRpY19jYXN0PHVpbnQzMl90PihPVF9DSEFOR0VEX1RIUkVBRF9LRVlfU0VRVUVOQ0VfQ09VTlRFUik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG1DaGFuZ2VkRmxhZ3MgJiAoT1RfQ0hBTkdFRF9JUDZfQUREUkVTU19BRERFRCB8IE9UX0NIQU5HRURfSVA2X0FERFJFU1NfUkVNT1ZFRCkpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9JUFY2X0FERFJFU1NfVEFCTEUKKyAgICAgICAgICAgICAgICApKTsKKworICAgICAgICAgICAgbUNoYW5nZWRGbGFncyAmPSB+c3RhdGljX2Nhc3Q8dWludDMyX3Q+KE9UX0NIQU5HRURfSVA2X0FERFJFU1NfQURERUQgfCBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX1JFTU9WRUQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChtQ2hhbmdlZEZsYWdzICYgKE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX0FEREVEIHwgT1RfQ0hBTkdFRF9USFJFQURfQ0hJTERfUkVNT1ZFRCkpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfVEFCTEUKKyAgICAgICAgICAgICAgICApKTsKKworICAgICAgICAgICAgbUNoYW5nZWRGbGFncyAmPSB+c3RhdGljX2Nhc3Q8dWludDMyX3Q+KE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX0FEREVEIHwgT1RfQ0hBTkdFRF9USFJFQURfQ0hJTERfUkVNT1ZFRCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG1DaGFuZ2VkRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX0xFQURFUl9ORVRXT1JLX0RBVEEKKyAgICAgICAgICAgICAgICApKTsKKworICAgICAgICAgICAgbUNoYW5nZWRGbGFncyAmPSB+c3RhdGljX2Nhc3Q8dWludDMyX3Q+KE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEpOworCisgICAgICAgICAgICAvLyBJZiB0aGUgbmV0d29yayBkYXRhIGlzIHVwZGF0ZWQsIGFmdGVyIHN1Y2Nlc3NmdWxseSBzZW5kaW5nIChvciBxdWV1aW5nKSB0aGUKKyAgICAgICAgICAgIC8vIG5ldHdvcmsgZGF0YSBzcGluZWwgbWVzc2FnZSwgd2UgYWRkIGBOQ1BfQ0hBTkdFRF9USFJFQURfT05fTUVTSF9ORVRTYCBhbmQKKyAgICAgICAgICAgIC8vIGBOQ1BfQ0hBTkdFRF9USFJFQURfT0ZGX01FU0hfUk9VVEVTYCB0byB0aGUgYG1DaGFuZ2VkRmxhZ3NgIHNvIHRoYXQgd2UKKyAgICAgICAgICAgIC8vIHNlcGFyYXRlbHkgc2VuZCB0aGUgbGlzdCBvZiBvbi1tZXNoIHByZWZpeGVzIGFuZCBvZmYtbWVzaCByb3V0ZXMuCisKKyAgICAgICAgICAgIG1DaGFuZ2VkRmxhZ3MgfD0gTkNQX0NIQU5HRURfVEhSRUFEX09OX01FU0hfTkVUUyB8IE5DUF9DSEFOR0VEX1RIUkVBRF9PRkZfTUVTSF9ST1VURVM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG1DaGFuZ2VkRmxhZ3MgJiBOQ1BfQ0hBTkdFRF9USFJFQURfT05fTUVTSF9ORVRTKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX09OX01FU0hfTkVUUworICAgICAgICAgICAgICAgICkpOworCisgICAgICAgICAgICBtQ2hhbmdlZEZsYWdzICY9IH5zdGF0aWNfY2FzdDx1aW50MzJfdD4oTkNQX0NIQU5HRURfVEhSRUFEX09OX01FU0hfTkVUUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG1DaGFuZ2VkRmxhZ3MgJiBOQ1BfQ0hBTkdFRF9USFJFQURfT0ZGX01FU0hfUk9VVEVTKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX09GRl9NRVNIX1JPVVRFUworICAgICAgICAgICAgICAgICkpOworCisgICAgICAgICAgICBtQ2hhbmdlZEZsYWdzICY9IH5zdGF0aWNfY2FzdDx1aW50MzJfdD4oTkNQX0NIQU5HRURfVEhSRUFEX09GRl9NRVNIX1JPVVRFUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG1DaGFuZ2VkRmxhZ3MgJiAoT1RfQ0hBTkdFRF9USFJFQURfUkxPQ19BRERFRCB8IE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfUkVNT1ZFRCkpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DaGFuZ2VkRmxhZ3MgJj0gfnN0YXRpY19jYXN0PHVpbnQzMl90PihPVF9DSEFOR0VEX1RIUkVBRF9STE9DX0FEREVEIHwgT1RfQ0hBTkdFRF9USFJFQURfUkxPQ19SRU1PVkVEKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IFNlcmlhbCBUcmFmZmljIEdsdWUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworb3RFcnJvciBOY3BCYXNlOjpPdXRib3VuZEZyYW1lU2VuZCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUVuZCgpKTsKKworICAgIG1UeFNwaW5lbEZyYW1lQ291bnRlcisrOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBOY3BCYXNlOjpIYW5kbGVSZWNlaXZlKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgdWludDhfdCBoZWFkZXIgPSAwOworICAgIHVuc2lnbmVkIGludCBjb21tYW5kID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgY29uc3QgdWludDhfdCAqYXJnUHRyID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgYXJnTGVuID0gMDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfdGlkX3QgdGlkID0gMDsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFCdWYsCisgICAgICAgICAgICAgICAgICAgICAgIGFCdWZMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1MgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgJmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICZhcmdQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZhcmdMZW4KKyAgICAgICAgICAgICAgICAgICApOworCisgICAgdGlkID0gU1BJTkVMX0hFQURFUl9HRVRfVElEKGhlYWRlcik7CisKKyAgICAvLyBSZWNlaXZpbmcgYW55IG1lc3NhZ2UgZnJvbSB0aGUgaG9zdCBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHRyYW5zaXRpb25pbmcgdGhlIGhvc3QgcG93ZXIgc3RhdGUgdG8gb25saW5lLgorICAgIG1Ib3N0UG93ZXJTdGF0ZSA9IFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX09OTElORTsKKyAgICBtSG9zdFBvd2VyU3RhdGVJblByb2dyZXNzID0gZmFsc2U7CisKKyAgICBpZiAocGFyc2VkTGVuZ3RoID09IGFCdWZMZW5ndGgpCisgICAgeworICAgICAgICBlcnJvciA9IEhhbmRsZUNvbW1hbmQoaGVhZGVyLCBjb21tYW5kLCBhcmdQdHIsIHN0YXRpY19jYXN0PHVpbnQxNl90PihhcmdMZW4pKTsKKworICAgICAgICAvLyBDaGVjayBpZiB3ZSBtYXkgaGF2ZSBtaXNzZWQgYSBgdGlkYCBpbiB0aGUgc2VxdWVuY2UuCisgICAgICAgIGlmICgobU5leHRFeHBlY3RlZFRpZCAhPSAwKSAmJiAodGlkICE9IG1OZXh0RXhwZWN0ZWRUaWQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUnhTcGluZWxPdXRPZk9yZGVyVGlkQ291bnRlcisrOworICAgICAgICB9CisKKyAgICAgICAgbU5leHRFeHBlY3RlZFRpZCA9IFNQSU5FTF9HRVRfTkVYVF9USUQodGlkKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhoZWFkZXIsIFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworICAgIH0KKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT19CVUZTKQorICAgIHsKKyAgICAgICAgLy8gSWYgd2UgY2Fubm90IHNlbmQgYSByZXNwb25zZSBkdWUgdG8gYnVmZmVyIHNwYWNlIG5vdCBiZWluZworICAgICAgICAvLyBhdmFpbGFibGUsIHdlIHJlbWVtYmVyIHRoZSBUSUQgb2YgY29tbWFuZCBzbyB0byBzZW5kIGFuCisgICAgICAgIC8vIGVycm9yIHN0YXR1cyB3aGVuIGJ1ZmZlciBzcGFjZSBiZWNvbWVzIGF2YWlsYWJsZSBsYXRlci4KKworICAgICAgICAvLyBWYWxpZCBUSUQgcmFuZ2UgaXMgMS0xNSAoemVybyBiZWluZyB1c2VkIGFzIHNwZWNpYWwgY2FzZQorICAgICAgICAvLyB3aGVyZSBubyByZXBseSBpcyBleHBlY3RlZCkuIFRJRHMgZm9yIGRyb3BwZWQgcmVwbHkgYXJlCisgICAgICAgIC8vIHN0b3JlZCBpbiB0d28gdmFyaWFibGVzOiAgYG1Ecm9wcGVkUmVwbHlUaWRCaXRTZXRgIHdoaWNoCisgICAgICAgIC8vIGlzIGEgYml0IHNldCAoYml0cyAxLTE1IGNvcnJlc3BvbmQgdG8gVElEIHZhbHVlcyAxLTE1KS4KKyAgICAgICAgLy8gVGhlIGZpcnN0L25leHQgZHJvcHBlZCBUSUQgdmFsdWUgaW4gdGhlIHNldCBpcyBzdG9yZWQgaW4KKyAgICAgICAgLy8gYG1Ecm9wcGVkUmVwbHlUaWRgICh3aXRoIHZhbHVlIHplcm8gaW5kaWNhdGluZyB0aGF0IHRoZXJlCisgICAgICAgIC8vIGlzIG5vIGRyb3BwZWQgcmVwbHkpLgorCisgICAgICAgIGlmICh0aWQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1Ecm9wcGVkUmVwbHlUaWQgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRHJvcHBlZFJlcGx5VGlkID0gdGlkOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRHJvcHBlZFJlcGx5VGlkQml0U2V0ICB8PSAoMSA8PCB0aWQpOworICAgICAgICB9CisgICAgfQorCisgICAgbVJ4U3BpbmVsRnJhbWVDb3VudGVyKys7Cit9CisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlRnJhbWVSZW1vdmVkRnJvbU5jcEJ1ZmZlcih2b2lkICphQ29udGV4dCwgTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIGFGcmFtZVRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOY3BGcmFtZUJ1ZmZlciAqYU5jcEJ1ZmZlcikKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU5jcEJ1ZmZlcik7CisgICAgc3RhdGljX2Nhc3Q8TmNwQmFzZSAqPihhQ29udGV4dCktPkhhbmRsZUZyYW1lUmVtb3ZlZEZyb21OY3BCdWZmZXIoYUZyYW1lVGFnKTsKK30KKwordm9pZCBOY3BCYXNlOjpIYW5kbGVGcmFtZVJlbW92ZWRGcm9tTmNwQnVmZmVyKE5jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBhRnJhbWVUYWcpCit7CisgICAgaWYgKG1Ib3N0UG93ZXJTdGF0ZUluUHJvZ3Jlc3MgPT0gdHJ1ZSkKKyAgICB7CisgICAgICAgIGlmIChhRnJhbWVUYWcgPT0gbUhvc3RQb3dlclJlcGx5RnJhbWVUYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Ib3N0UG93ZXJTdGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNwYWNlIGlzIG5vdyBhdmFpbGFibGUgaW4gbmNwIHR4IGZyYW1lIGJ1ZmZlci4KKworICAgIHdoaWxlIChtRHJvcHBlZFJlcGx5VGlkICE9IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgU2VuZExhc3RTdGF0dXMoCisgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCB8IG1Ecm9wcGVkUmVwbHlUaWQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1NUQVRVU19OT01FTQorICAgICAgICAgICAgKSk7CisKKyAgICAgICAgbURyb3BwZWRSZXBseVRpZEJpdFNldCAmPSB+KDEgPDwgbURyb3BwZWRSZXBseVRpZCk7CisKKyAgICAgICAgaWYgKG1Ecm9wcGVkUmVwbHlUaWRCaXRTZXQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbURyb3BwZWRSZXBseVRpZCA9IDA7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgbURyb3BwZWRSZXBseVRpZCA9IFNQSU5FTF9HRVRfTkVYVF9USUQobURyb3BwZWRSZXBseVRpZCk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKChtRHJvcHBlZFJlcGx5VGlkQml0U2V0ICYgKDEgPDwgbURyb3BwZWRSZXBseVRpZCkpID09IDApOworICAgIH0KKworICAgIGlmIChtU2hvdWxkU2lnbmFsRW5kT2ZTY2FuKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICBTUElORUxfU0NBTl9TVEFURV9JRExFCisgICAgICAgICAgICApKTsKKworICAgICAgICBtU2hvdWxkU2lnbmFsRW5kT2ZTY2FuID0gZmFsc2U7CisgICAgfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCisgICAgaWYgKG1TaG91bGRTaWduYWxKYW1TdGF0ZUNoYW5nZSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfSkFNX0RFVEVDVEVELAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgb3RKYW1EZXRlY3Rpb25HZXRTdGF0ZShtSW5zdGFuY2UpCisgICAgICAgICAgICApKTsKKworICAgICAgICBtU2hvdWxkU2lnbmFsSmFtU3RhdGVDaGFuZ2UgPSBmYWxzZTsKKyAgICB9CisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCisgICAgaWYgKG1Ib3N0UG93ZXJTdGF0ZUhlYWRlcikKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICBHZXRQcm9wZXJ0eUhhbmRsZXJfSE9TVF9QT1dFUl9TVEFURSgKKyAgICAgICAgICAgICAgICBtSG9zdFBvd2VyU3RhdGVIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfSE9TVF9QT1dFUl9TVEFURQorICAgICAgICAgICAgKSk7CisKKyAgICAgICAgbUhvc3RQb3dlclN0YXRlSGVhZGVyID0gMDsKKworICAgICAgICBpZiAobUhvc3RQb3dlclN0YXRlICE9IFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX09OTElORSkKKyAgICAgICAgeworICAgICAgICAgICAgbUhvc3RQb3dlclJlcGx5RnJhbWVUYWcgPSBHZXRMYXN0T3V0Ym91bmRGcmFtZVRhZygpOworICAgICAgICAgICAgbUhvc3RQb3dlclN0YXRlSW5Qcm9ncmVzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBVcGRhdGVDaGFuZ2VkUHJvcHMoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK2Jvb2wgTmNwQmFzZTo6U2hvdWxkV2FrZUhvc3Qodm9pZCkKK3sKKyAgICByZXR1cm4gKG1Ib3N0UG93ZXJTdGF0ZSAhPSBTUElORUxfSE9TVF9QT1dFUl9TVEFURV9PTkxJTkUgJiYgIW1Ib3N0UG93ZXJTdGF0ZUluUHJvZ3Jlc3MpOworfQorCitib29sIE5jcEJhc2U6OlNob3VsZERlZmVySG9zdFNlbmQodm9pZCkKK3sKKyAgICByZXR1cm4gKG1Ib3N0UG93ZXJTdGF0ZSA9PSBTUElORUxfSE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQICYmICFtSG9zdFBvd2VyU3RhdGVJblByb2dyZXNzKTsKK30KKwordm9pZCBOY3BCYXNlOjpJbmNyZW1lbnRGcmFtZUVycm9yQ291bnRlcih2b2lkKQoreworICAgIG1GcmFtaW5nRXJyb3JDb3VudGVyKys7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IEluYm91bmQgQ29tbWFuZCBIYW5kbGVycworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvdEVycm9yIE5jcEJhc2U6OkhhbmRsZUNvbW1hbmQodWludDhfdCBhSGVhZGVyLCB1bnNpZ25lZCBpbnQgYUNvbW1hbmQsIGNvbnN0IHVpbnQ4X3QgKmFBcmdQdHIsIHVpbnQxNl90IGFBcmdMZW4pCit7CisgICAgdW5zaWduZWQgaTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIC8vIFNraXAgaWYgdGhpcyBpc24ndCBhIHNwaW5lbCBmcmFtZQorICAgIFZlcmlmeU9yRXhpdCgoU1BJTkVMX0hFQURFUl9GTEFHICYgYUhlYWRlcikgPT0gU1BJTkVMX0hFQURFUl9GTEFHLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAvLyBXZSBvbmx5IHN1cHBvcnQgSUlEIHplcm8gZm9yIG5vdy4KKyAgICBWZXJpZnlPckV4aXQoCisgICAgICAgIFNQSU5FTF9IRUFERVJfR0VUX0lJRChhSGVhZGVyKSA9PSAwLAorICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9JTlRFUkZBQ0UpCisgICAgKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YobUNvbW1hbmRIYW5kbGVyVGFibGUpIC8gc2l6ZW9mKG1Db21tYW5kSGFuZGxlclRhYmxlWzBdKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Db21tYW5kSGFuZGxlclRhYmxlW2ldLm1Db21tYW5kID09IGFDb21tYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpIDwgc2l6ZW9mKG1Db21tYW5kSGFuZGxlclRhYmxlKSAvIHNpemVvZihtQ29tbWFuZEhhbmRsZXJUYWJsZVswXSkpCisgICAgeworICAgICAgICBlcnJvciA9ICh0aGlzLT4qbUNvbW1hbmRIYW5kbGVyVGFibGVbaV0ubUhhbmRsZXIpKGFIZWFkZXIsIGFDb21tYW5kLCBhQXJnUHRyLCBhQXJnTGVuKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX0lOVkFMSURfQ09NTUFORCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpIYW5kbGVDb21tYW5kUHJvcGVydHlHZXQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHVuc2lnbmVkIGk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG1HZXRQcm9wZXJ0eUhhbmRsZXJUYWJsZSkgLyBzaXplb2YobUdldFByb3BlcnR5SGFuZGxlclRhYmxlWzBdKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1HZXRQcm9wZXJ0eUhhbmRsZXJUYWJsZVtpXS5tUHJvcEtleSA9PSBhS2V5KQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpIDwgc2l6ZW9mKG1HZXRQcm9wZXJ0eUhhbmRsZXJUYWJsZSkgLyBzaXplb2YobUdldFByb3BlcnR5SGFuZGxlclRhYmxlWzBdKSkKKyAgICB7CisgICAgICAgIGVycm9yID0gKHRoaXMtPiptR2V0UHJvcGVydHlIYW5kbGVyVGFibGVbaV0ubUhhbmRsZXIpKGFIZWFkZXIsIGFLZXkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfUFJPUF9OT1RfRk9VTkQpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpIYW5kbGVDb21tYW5kUHJvcGVydHlTZXQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdW5zaWduZWQgaTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YobVNldFByb3BlcnR5SGFuZGxlclRhYmxlKSAvIHNpemVvZihtU2V0UHJvcGVydHlIYW5kbGVyVGFibGVbMF0pOyBpKyspCisgICAgeworICAgICAgICBpZiAobVNldFByb3BlcnR5SGFuZGxlclRhYmxlW2ldLm1Qcm9wS2V5ID09IGFLZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGkgPCBzaXplb2YobVNldFByb3BlcnR5SGFuZGxlclRhYmxlKSAvIHNpemVvZihtU2V0UHJvcGVydHlIYW5kbGVyVGFibGVbMF0pKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSAodGhpcy0+Km1TZXRQcm9wZXJ0eUhhbmRsZXJUYWJsZVtpXS5tSGFuZGxlcikoYUhlYWRlciwgYUtleSwgYVZhbHVlUHRyLCBhVmFsdWVMZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfUFJPUF9OT1RfRk9VTkQpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpIYW5kbGVDb21tYW5kUHJvcGVydHlJbnNlcnQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdW5zaWduZWQgaTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YobUluc2VydFByb3BlcnR5SGFuZGxlclRhYmxlKSAvIHNpemVvZihtSW5zZXJ0UHJvcGVydHlIYW5kbGVyVGFibGVbMF0pOyBpKyspCisgICAgeworICAgICAgICBpZiAobUluc2VydFByb3BlcnR5SGFuZGxlclRhYmxlW2ldLm1Qcm9wS2V5ID09IGFLZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGkgPCBzaXplb2YobUluc2VydFByb3BlcnR5SGFuZGxlclRhYmxlKSAvIHNpemVvZihtSW5zZXJ0UHJvcGVydHlIYW5kbGVyVGFibGVbMF0pKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSAodGhpcy0+Km1JbnNlcnRQcm9wZXJ0eUhhbmRsZXJUYWJsZVtpXS5tSGFuZGxlcikoYUhlYWRlciwgYUtleSwgYVZhbHVlUHRyLCBhVmFsdWVMZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfUFJPUF9OT1RfRk9VTkQpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpIYW5kbGVDb21tYW5kUHJvcGVydHlSZW1vdmUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdW5zaWduZWQgaTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YobVJlbW92ZVByb3BlcnR5SGFuZGxlclRhYmxlKSAvIHNpemVvZihtUmVtb3ZlUHJvcGVydHlIYW5kbGVyVGFibGVbMF0pOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJlbW92ZVByb3BlcnR5SGFuZGxlclRhYmxlW2ldLm1Qcm9wS2V5ID09IGFLZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGkgPCBzaXplb2YobVJlbW92ZVByb3BlcnR5SGFuZGxlclRhYmxlKSAvIHNpemVvZihtUmVtb3ZlUHJvcGVydHlIYW5kbGVyVGFibGVbMF0pKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSAodGhpcy0+Km1SZW1vdmVQcm9wZXJ0eUhhbmRsZXJUYWJsZVtpXS5tSGFuZGxlcikoYUhlYWRlciwgYUtleSwgYVZhbHVlUHRyLCBhVmFsdWVMZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfUFJPUF9OT1RfRk9VTkQpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBPdXRib3VuZCBDb21tYW5kIEhhbmRsZXJzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworb3RFcnJvciBOY3BCYXNlOjpTZW5kTGFzdFN0YXR1cyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9zdGF0dXNfdCBhTGFzdFN0YXR1cykKK3sKKyAgICBpZiAoU1BJTkVMX0hFQURFUl9HRVRfSUlEKGFIZWFkZXIpID09IDApCisgICAgeworICAgICAgICBtTGFzdFN0YXR1cyA9IGFMYXN0U3RhdHVzOworICAgIH0KKworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTEFTVF9TVEFUVVMsCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywKKyAgICAgICAgICAgICAgIGFMYXN0U3RhdHVzCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2VuZFByb3BlcnR5VXBkYXRlKHVpbnQ4X3QgYUhlYWRlciwgdWludDhfdCBhQ29tbWFuZCwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFQYWNrRm9ybWF0LCAuLi4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdmFfbGlzdCBhcmdzOworCisgICAgdmFfc3RhcnQoYXJncywgYVBhY2tGb3JtYXQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywgYUhlYWRlciwgYUNvbW1hbmQsIGFLZXkpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRWUGFja2VkKGFQYWNrRm9ybWF0LCBhcmdzKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIHZhX2VuZChhcmdzKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2VuZFByb3BlcnR5VXBkYXRlKHVpbnQ4X3QgYUhlYWRlciwgdWludDhfdCBhQ29tbWFuZCwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUFJPUF9TLCBhSGVhZGVyLCBhQ29tbWFuZCwgYUtleSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZERhdGEoYVZhbHVlUHRyLCBhVmFsdWVMZW4pKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNlbmRQcm9wZXJ0eVVwZGF0ZSh1aW50OF90IGFIZWFkZXIsIHVpbnQ4X3QgYUNvbW1hbmQsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsIGFIZWFkZXIsIGFDb21tYW5kLCBhS2V5KSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkTWVzc2FnZShhTWVzc2FnZSkpOworCisgICAgLy8gU2V0IHRoZSBgYU1lc3NhZ2VgIHBvaW50ZXIgdG8gTlVMTCB0byBpbmRpY2F0ZSB0aGF0IGl0IGRvZXMKKyAgICAvLyBub3QgbmVlZCB0byBiZSBmcmVlZCBhdCB0aGUgZXhpdC4gVGhlIGBhTWVzc2FnZWAgaXMgbm93IG93bmVkCisgICAgLy8gYnkgdGhlIE91dGJvdW5kRnJhbWUgYW5kIHdpbGwgYmUgZnJlZWQgd2hlbiB0aGUgZnJhbWUgaXMgZWl0aGVyCisgICAgLy8gc3VjY2Vzc2Z1bGx5IHNlbnQgYW5kIHRoZW4gcmVtb3ZlZCwgb3IgaWYgdGhlIGZyYW1lIGdldHMKKyAgICAvLyBkaXNjYXJkZWQuCisgICAgYU1lc3NhZ2UgPSBOVUxMOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorCisgICAgaWYgKGFNZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VGcmVlKGFNZXNzYWdlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6T3V0Ym91bmRGcmFtZUZlZWRWUGFja2VkKGNvbnN0IGNoYXIgKmFQYWNrRm9ybWF0LCB2YV9saXN0IGFBcmdzKQoreworICAgIHVpbnQ4X3QgYnVmWzk2XTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUzsKKyAgICBzcGluZWxfc3NpemVfdCBwYWNrZWRMZW47CisKKyAgICBwYWNrZWRMZW4gPSBzcGluZWxfZGF0YXR5cGVfdnBhY2soYnVmLCBzaXplb2YoYnVmKSwgYVBhY2tGb3JtYXQsIGFBcmdzKTsKKworICAgIGlmICgocGFja2VkTGVuID4gMCkgJiYgKHBhY2tlZExlbiA8PSBzdGF0aWNfY2FzdDxzcGluZWxfc3NpemVfdD4oc2l6ZW9mKGJ1ZikpKSkKKyAgICB7CisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWREYXRhKGJ1Ziwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHBhY2tlZExlbikpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChjb25zdCBjaGFyICphUGFja0Zvcm1hdCwgLi4uKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgdmFfbGlzdCBhcmdzOworCisgICAgdmFfc3RhcnQoYXJncywgYVBhY2tGb3JtYXQpOworICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRWUGFja2VkKGFQYWNrRm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IEluZGl2aWR1YWwgQ29tbWFuZCBIYW5kbGVycworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvdEVycm9yIE5jcEJhc2U6OkNvbW1hbmRIYW5kbGVyX05PT1AodWludDhfdCBhSGVhZGVyLCB1bnNpZ25lZCBpbnQgYUNvbW1hbmQsIGNvbnN0IHVpbnQ4X3QgKmFBcmdQdHIsIHVpbnQxNl90IGFBcmdMZW4pCit7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb21tYW5kKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUFyZ1B0cik7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFBcmdMZW4pOworCisgICAgcmV0dXJuIFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfT0spOworfQorCitvdEVycm9yIE5jcEJhc2U6OkNvbW1hbmRIYW5kbGVyX1JFU0VUKHVpbnQ4X3QgYUhlYWRlciwgdW5zaWduZWQgaW50IGFDb21tYW5kLCBjb25zdCB1aW50OF90ICphQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQXJnTGVuKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgLy8gV2UgYXJlbid0IHVzaW5nIGFueSBvZiB0aGUgYXJndW1lbnRzIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFIZWFkZXIpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29tbWFuZCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFBcmdQdHIpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQXJnTGVuKTsKKworICAgIC8vIFNpZ25hbCBhIHBsYXRmb3JtIHJlc2V0LiBJZiBpbXBsZW1lbnRlZCwgdGhpcyBmdW5jdGlvbgorICAgIC8vIHNob3VsZG4ndCByZXR1cm4uCisgICAgb3RJbnN0YW5jZVJlc2V0KG1JbnN0YW5jZSk7CisKKyAgICAvLyBXZSBvbmx5IGdldCB0byB0aGlzIHBvaW50IGlmIHRoZQorICAgIC8vIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCByZXNldHRpbmcuCisgICAgLy8gSW4gc3VjaCBhIGNhc2Ugd2UgZmFrZSBpdC4KKworICAgIG90VGhyZWFkU2V0RW5hYmxlZChtSW5zdGFuY2UsIGZhbHNlKTsKKyAgICBvdElwNlNldEVuYWJsZWQobUluc3RhbmNlLCBmYWxzZSk7CisKKyAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsIFNQSU5FTF9TVEFUVVNfUkVTRVRfU09GVFdBUkUpOworCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtQ2hhbmdlZEZsYWdzIHw9IE5DUF9DSEFOR0VEX1BMQVRGT1JNX1JFU0VUOworICAgICAgICBtVXBkYXRlQ2hhbmdlZFByb3BzVGFzay5Qb3N0KCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkNvbW1hbmRIYW5kbGVyX1BST1BfVkFMVUVfR0VUKHVpbnQ4X3QgYUhlYWRlciwgdW5zaWduZWQgaW50IGFDb21tYW5kLCBjb25zdCB1aW50OF90ICphQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQXJnTGVuKQoreworICAgIHVuc2lnbmVkIGludCBwcm9wS2V5ID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKGFBcmdQdHIsIGFBcmdMZW4sIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLCAmcHJvcEtleSk7CisKKyAgICBpZiAocGFyc2VkTGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIGVycm9yID0gSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KGFIZWFkZXIsIHN0YXRpY19jYXN0PHNwaW5lbF9wcm9wX2tleV90Pihwcm9wS2V5KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisgICAgfQorCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb21tYW5kKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpDb21tYW5kSGFuZGxlcl9QUk9QX1ZBTFVFX1NFVCh1aW50OF90IGFIZWFkZXIsIHVuc2lnbmVkIGludCBhQ29tbWFuZCwgY29uc3QgdWludDhfdCAqYUFyZ1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUFyZ0xlbikKK3sKKyAgICB1bnNpZ25lZCBpbnQgcHJvcEtleSA9IDA7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIGNvbnN0IHVpbnQ4X3QgKnZhbHVlUHRyOworICAgIHVuc2lnbmVkIGludCB2YWx1ZUxlbjsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFBcmdQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFBcmdMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZwcm9wS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZUxlbgorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBpZiAocGFyc2VkTGVuZ3RoID09IGFBcmdMZW4pCisgICAgeworICAgICAgICBlcnJvciA9IEhhbmRsZUNvbW1hbmRQcm9wZXJ0eVNldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzcGluZWxfcHJvcF9rZXlfdD4ocHJvcEtleSksCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZUxlbikKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbW1hbmQpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkNvbW1hbmRIYW5kbGVyX1BST1BfVkFMVUVfSU5TRVJUKHVpbnQ4X3QgYUhlYWRlciwgdW5zaWduZWQgaW50IGFDb21tYW5kLCBjb25zdCB1aW50OF90ICphQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQXJnTGVuKQoreworICAgIHVuc2lnbmVkIGludCBwcm9wS2V5ID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgY29uc3QgdWludDhfdCAqdmFsdWVQdHI7CisgICAgdW5zaWduZWQgaW50IHZhbHVlTGVuOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYUFyZ1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYUFyZ0xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnByb3BLZXksCisgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlTGVuCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIGlmIChwYXJzZWRMZW5ndGggPT0gYUFyZ0xlbikKKyAgICB7CisgICAgICAgIGVycm9yID0gSGFuZGxlQ29tbWFuZFByb3BlcnR5SW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzcGluZWxfcHJvcF9rZXlfdD4ocHJvcEtleSksCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4odmFsdWVMZW4pCisgICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbW1hbmQpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkNvbW1hbmRIYW5kbGVyX1BST1BfVkFMVUVfUkVNT1ZFKHVpbnQ4X3QgYUhlYWRlciwgdW5zaWduZWQgaW50IGFDb21tYW5kLCBjb25zdCB1aW50OF90ICphQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQXJnTGVuKQoreworICAgIHVuc2lnbmVkIGludCBwcm9wS2V5ID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgY29uc3QgdWludDhfdCAqdmFsdWVQdHI7CisgICAgdW5zaWduZWQgaW50IHZhbHVlTGVuOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYUFyZ1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYUFyZ0xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnByb3BLZXksCisgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlTGVuCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIGlmIChwYXJzZWRMZW5ndGggPT0gYUFyZ0xlbikKKyAgICB7CisgICAgICAgIGVycm9yID0gSGFuZGxlQ29tbWFuZFByb3BlcnR5UmVtb3ZlKAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzcGluZWxfcHJvcF9rZXlfdD4ocHJvcEtleSksCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4odmFsdWVMZW4pCisgICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbW1hbmQpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkNvbW1hbmRIYW5kbGVyX05FVF9TQVZFKHVpbnQ4X3QgYUhlYWRlciwgdW5zaWduZWQgaW50IGFDb21tYW5kLCBjb25zdCB1aW50OF90ICphQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQXJnTGVuKQoreworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29tbWFuZCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFBcmdQdHIpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQXJnTGVuKTsKKworICAgIHJldHVybiBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX1VOSU1QTEVNRU5URUQpOworfQorCitvdEVycm9yIE5jcEJhc2U6OkNvbW1hbmRIYW5kbGVyX05FVF9DTEVBUih1aW50OF90IGFIZWFkZXIsIHVuc2lnbmVkIGludCBhQ29tbWFuZCwgY29uc3QgdWludDhfdCAqYUFyZ1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFBcmdMZW4pCit7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb21tYW5kKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUFyZ1B0cik7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFBcmdMZW4pOworCisgICAgcmV0dXJuIFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMob3RJbnN0YW5jZUVyYXNlUGVyc2lzdGVudEluZm8obUluc3RhbmNlKSkpOworfQorCitvdEVycm9yIE5jcEJhc2U6OkNvbW1hbmRIYW5kbGVyX05FVF9SRUNBTEwodWludDhfdCBhSGVhZGVyLCB1bnNpZ25lZCBpbnQgYUNvbW1hbmQsIGNvbnN0IHVpbnQ4X3QgKmFBcmdQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUFyZ0xlbikKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbW1hbmQpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQXJnUHRyKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUFyZ0xlbik7CisKKyAgICByZXR1cm4gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19VTklNUExFTUVOVEVEKTsKK30KKworI2lmIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisKK290RXJyb3IgTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJfUEVFSyh1aW50OF90IGFIZWFkZXIsIHVuc2lnbmVkIGludCBhQ29tbWFuZCwgY29uc3QgdWludDhfdCAqYUFyZ1B0ciwgdWludDE2X3QgYUFyZ0xlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgdWludDMyX3QgYWRkcmVzczsKKyAgICB1aW50MTZfdCBjb3VudDsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYUFyZ1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYUFyZ0xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgLy8gQWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgLy8gQ291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICZjb3VudAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID09IGFBcmdMZW4sIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBWZXJpZnlPckV4aXQoY291bnQgIT0gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX0lOVkFMSURfQVJHVU1FTlQpOworCisgICAgaWYgKG1BbGxvd1BlZWtEZWxlZ2F0ZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG1BbGxvd1BlZWtEZWxlZ2F0ZShhZGRyZXNzLCBjb3VudCksIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19JTlZBTElEX0FSR1VNRU5UKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1MgICAvLyBIZWFkZXIgYW5kIENvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUyAgICAvLyBBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAgLy8gQ291bnQKKyAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QRUVLX1JFVCwKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgY291bnQKKyAgICAgICAgICAgICAgICApKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWREYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihhZGRyZXNzKSwgY291bnQpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbW1hbmQpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkNvbW1hbmRIYW5kbGVyX1BPS0UodWludDhfdCBhSGVhZGVyLCB1bnNpZ25lZCBpbnQgYUNvbW1hbmQsIGNvbnN0IHVpbnQ4X3QgKmFBcmdQdHIsIHVpbnQxNl90IGFBcmdMZW4pCit7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIHVpbnQzMl90IGFkZHJlc3M7CisgICAgdWludDE2X3QgY291bnQ7CisgICAgY29uc3QgdWludDhfdCAqZGF0YVB0ciA9IE5VTEw7CisgICAgc3BpbmVsX3NpemVfdCBkYXRhTGVuOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhQXJnTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MgICAvLyBBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAvLyBDb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUyAgICAgLy8gQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICZjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZkYXRhTGVuCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPT0gYUFyZ0xlbiwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgIFZlcmlmeU9yRXhpdChjb3VudCAhPSAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9BUkdVTUVOVCk7CisgICAgVmVyaWZ5T3JFeGl0KGNvdW50IDw9IGRhdGFMZW4sIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19JTlZBTElEX0FSR1VNRU5UKTsKKworICAgIGlmIChtQWxsb3dQb2tlRGVsZWdhdGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChtQWxsb3dQb2tlRGVsZWdhdGUoYWRkcmVzcywgY291bnQpLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9BUkdVTUVOVCk7CisgICAgfQorCisgICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihhZGRyZXNzKSwgZGF0YVB0ciwgY291bnQpOworCitleGl0OgorICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb21tYW5kKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IEluZGl2aWR1YWwgUHJvcGVydHkgR2V0dGVycworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0xBU1RfU1RBVFVTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKGFIZWFkZXIsIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywgYUtleSwgU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MsIG1MYXN0U3RhdHVzKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfUFJPVE9DT0xfVkVSU0lPTih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TICAgLy8gTWFqb3IKKyAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUyAgIC8vIE1pbm9yCisgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgU1BJTkVMX1BST1RPQ09MX1ZFUlNJT05fVEhSRUFEX01BSk9SLAorICAgICAgICAgICAgICAgU1BJTkVMX1BST1RPQ09MX1ZFUlNJT05fVEhSRUFEX01JTk9SCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0lOVEVSRkFDRV9UWVBFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywKKyAgICAgICAgICAgICAgIFNQSU5FTF9QUk9UT0NPTF9UWVBFX1RIUkVBRAorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9WRU5ET1JfSUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLAorICAgICAgICAgICAgICAgMCAvLyBWZW5kb3IgSUQuIFplcm8gZm9yIHVua25vd24uCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0NBUFModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleQorICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gQmVnaW4gYWRkaW5nIGNhcGFiaWxpdGllcyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MsIFNQSU5FTF9DQVBfTkVUX1RIUkVBRF8xXzApKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MsIFNQSU5FTF9DQVBfQ09VTlRFUlMpKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MsIFNQSU5FTF9DQVBfTUFDX1dISVRFTElTVCkpOworI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MsIFNQSU5FTF9DQVBfTUFDX1JBVykpOworI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLCBTUElORUxfQ0FQX0pBTV9ERVRFQ1QpKTsKKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgU1BJTkVMX0NBUF9PT0JfU1RFRVJJTkdfREFUQSkpOworI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfRU5BQkxFX1BFRUtfUE9LRQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgU1BJTkVMX0NBUF9QRUVLX1BPS0UpKTsKKyNlbmRpZgorCisgICAgLy8gVE9ETzogU29tZWhvdyBnZXQgdGhlIGZvbGxvd2luZyBjYXBhYmlsaXR5IGZyb20gdGhlIHJhZGlvLgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgU1BJTkVMX0NBUF84MDJfMTVfNF8yNDUwTUhaX09RUFNLKSk7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfQ0hJTERSRU4gPiAwCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLCBTUElORUxfQ0FQX1JPTEVfUk9VVEVSKSk7CisjZW5kaWYKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgU1BJTkVMX0NBUF9ST0xFX1NMRUVQWSkpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLCBTUElORUxfQ0FQX05FU1RfTEVHQUNZX0lOVEVSRkFDRSkpOworI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MsIFNQSU5FTF9DQVBfVEhSRUFEX1RNRl9QUk9YWSkpOworI2VuZGlmCisKKyAgICAvLyBFbmQgYWRkaW5nIGNhcGFiaWxpdGllcyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9OQ1BfVkVSU0lPTih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VURjhfUywKKyAgICAgICAgICAgICAgIG90R2V0VmVyc2lvblN0cmluZygpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0lOVEVSRkFDRV9DT1VOVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAxIC8vIE9ubHkgb25lIGludGVyZmFjZSBmb3Igbm93CisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1BPV0VSX1NUQVRFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICAvLyBBbHdheXMgb25saW5lIGF0IHRoZSBtb21lbnQKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgIFNQSU5FTF9QT1dFUl9TVEFURV9PTkxJTkUKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSFdBRERSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICBvdEV4dEFkZHJlc3MgaHdBZGRyOworICAgIG90TGlua0dldEZhY3RvcnlBc3NpZ25lZEllZWVFdWk2NChtSW5zdGFuY2UsICZod0FkZHIpOworCisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICBod0FkZHIubTgKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTE9DSyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgLy8gVE9ETzogSW1wbGVtZW50IHByb3BlcnR5IGxvY2sgKE5lZWRzIEFQSSEpCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFLZXkpOworCisgICAgcmV0dXJuIFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfVU5JTVBMRU1FTlRFRCk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0hPU1RfUE9XRVJfU1RBVEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgbUhvc3RQb3dlclN0YXRlCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1BIWV9FTkFCTEVEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgICAgICAgICAgICAgb3RMaW5rUmF3SXNFbmFibGVkKG1JbnN0YW5jZSkKKyNlbHNlCisgICAgICAgICAgICAgICBmYWxzZQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9QSFlfRlJFUSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgdWludDMyX3QgZnJlcV9raHooMCk7CisgICAgY29uc3QgdWludDhfdCBjaGFuKG90TGlua0dldENoYW5uZWwobUluc3RhbmNlKSk7CisKKyAgICBpZiAoY2hhbiA9PSAwKQorICAgIHsKKyAgICAgICAgZnJlcV9raHogPSA4NjgzMDA7CisgICAgfQorICAgIGVsc2UgaWYgKGNoYW4gPCAxMSkKKyAgICB7CisgICAgICAgIGZyZXFfa2h6ID0gOTA2MDAwIC0gKDIwMDAgKiAxKSArIDIwMDAgKiAoY2hhbik7CisgICAgfQorICAgIGVsc2UgaWYgKGNoYW4gPCAyNikKKyAgICB7CisgICAgICAgIGZyZXFfa2h6ID0gMjQwNTAwMCAtICg1MDAwICogMTEpICsgNTAwMCAqIChjaGFuKTsKKyAgICB9CisKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICBmcmVxX2toegorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9QSFlfQ0hBTl9TVVBQT1JURUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBHZXRQcm9wZXJ0eUhhbmRsZXJfQ2hhbm5lbE1hc2tIZWxwZXIoYUhlYWRlciwgYUtleSwgbVN1cHBvcnRlZENoYW5uZWxNYXNrKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfUEhZX0NIQU4odWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgb3RMaW5rR2V0Q2hhbm5lbChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1BIWV9SU1NJKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TLAorICAgICAgICAgICAgICAgb3RQbGF0UmFkaW9HZXRSc3NpKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfUEhZX1RYX1BPV0VSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TLAorICAgICAgICAgICAgICAgb3RMaW5rR2V0TWF4VHJhbnNtaXRQb3dlcihtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1BIWV9SWF9TRU5TSVRJVklUWSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUywKKyAgICAgICAgICAgICAgIG90UGxhdFJhZGlvR2V0UmVjZWl2ZVNlbnNpdGl2aXR5KG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1NDQU5fU1RBVEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKKyAgICBpZiAob3RMaW5rUmF3SXNFbmFibGVkKG1JbnN0YW5jZSkpCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyU2NhbkNoYW5uZWwgPT0gTkNQX0lOVkFMSURfU0NBTl9DSEFOTkVMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTUElORUxfU0NBTl9TVEFURV9JRExFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTUElORUxfU0NBTl9TVEFURV9FTkVSR1kKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKKyAgICB7CisgICAgICAgIGlmIChvdExpbmtJc0FjdGl2ZVNjYW5JblByb2dyZXNzKG1JbnN0YW5jZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1NDQU5fU1RBVEVfQkVBQ09OCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG90TGlua0lzRW5lcmd5U2NhbkluUHJvZ3Jlc3MobUluc3RhbmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfU0NBTl9TVEFURV9FTkVSR1kKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAob3RUaHJlYWRJc0Rpc2NvdmVySW5Qcm9ncmVzcyhtSW5zdGFuY2UpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9TQ0FOX1NUQVRFX0RJU0NPVkVSCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfU0NBTl9TVEFURV9JRExFCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9NQUNfU0NBTl9QRVJJT0QodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgIG1TY2FuUGVyaW9kCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0NoYW5uZWxNYXNrSGVscGVyKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgdWludDMyX3QgYUNoYW5uZWxNYXNrKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleQorICAgICAgICAgICAgICAgICkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzMjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKDAgIT0gKGFDaGFubmVsTWFzayAmICgxIDw8IGkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLCBpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9NQUNfU0NBTl9NQVNLKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gR2V0UHJvcGVydHlIYW5kbGVyX0NoYW5uZWxNYXNrSGVscGVyKGFIZWFkZXIsIGFLZXksIG1DaGFubmVsTWFzayk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX01BQ18xNV80X1BBTklEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICAgICBvdExpbmtHZXRQYW5JZChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX01BQ19QUk9NSVNDVU9VU19NT0RFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TLAorICAgICAgICAgICAgICAgb3RQbGF0UmFkaW9HZXRQcm9taXNjdW91cyhtSW5zdGFuY2UpCisgICAgICAgICAgICAgICAgICAgPyBTUElORUxfTUFDX1BST01JU0NVT1VTX01PREVfRlVMTAorICAgICAgICAgICAgICAgICAgIDogU1BJTkVMX01BQ19QUk9NSVNDVU9VU19NT0RFX09GRgorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9NQUNfMTVfNF9MQUREUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICBvdExpbmtHZXRFeHRlbmRlZEFkZHJlc3MobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9NQUNfMTVfNF9TQUREUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgb3RMaW5rR2V0U2hvcnRBZGRyZXNzKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX0VYVEVOREVEX0FERFIodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TLAorICAgICAgICAgICAgICAgb3RMaW5rR2V0RXh0ZW5kZWRBZGRyZXNzKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX0RBVEFfUE9MTF9QRVJJT0QodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUywKKyAgICAgICAgICAgICAgIG90TGlua0dldFBvbGxQZXJpb2QobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9NQUNfUkFXX1NUUkVBTV9FTkFCTEVEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgbUlzUmF3U3RyZWFtRW5hYmxlZAorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9ORVRfU0FWRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICBvdERhdGFzZXRJc0NvbW1pc3Npb25lZChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX05FVF9JRl9VUCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG90SXA2SXNFbmFibGVkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX1NUQUNLX1VQKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXREZXZpY2VSb2xlKG1JbnN0YW5jZSkgIT0gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX1JPTEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHNwaW5lbF9uZXRfcm9sZV90IHJvbGUoU1BJTkVMX05FVF9ST0xFX0RFVEFDSEVEKTsKKworICAgIHN3aXRjaCAob3RUaHJlYWRHZXREZXZpY2VSb2xlKG1JbnN0YW5jZSkpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgcm9sZSA9IFNQSU5FTF9ORVRfUk9MRV9ERVRBQ0hFRDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICByb2xlID0gU1BJTkVMX05FVF9ST0xFX0NISUxEOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgICAgICByb2xlID0gU1BJTkVMX05FVF9ST0xFX1JPVVRFUjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgcm9sZSA9IFNQSU5FTF9ORVRfUk9MRV9MRUFERVI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgcm9sZQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9ORVRfTkVUV09SS19OQU1FKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVVRGOF9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXROZXR3b3JrTmFtZShtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX05FVF9YUEFOSUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldEV4dGVuZGVkUGFuSWQobUluc3RhbmNlKSwKKyAgICAgICAgICAgICAgIHNpemVvZihzcGluZWxfbmV0X3hwYW5pZF90KQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9ORVRfTUFTVEVSX0tFWSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgIG90VGhyZWFkR2V0TWFzdGVyS2V5KG1JbnN0YW5jZSktPm04LAorICAgICAgICAgICAgICAgT1RfTUFTVEVSX0tFWV9TSVpFCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXRLZXlTZXF1ZW5jZUNvdW50ZXIobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9ORVRfUEFSVElUSU9OX0lEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldFBhcnRpdGlvbklkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldEtleVN3aXRjaEd1YXJkVGltZShtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9ORVRXT1JLX0RBVEFfVkVSU0lPTih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdE5ldERhdGFHZXRWZXJzaW9uKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdE5ldERhdGFHZXRTdGFibGVWZXJzaW9uKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9ORVRXT1JLX0RBVEEodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgbmV0d29ya0RhdGFbMjU1XTsKKyAgICB1aW50OF90IG5ldHdvcmtEYXRhTGVuID0gMjU1OworCisgICAgb3RCb3JkZXJSb3V0ZXJHZXROZXREYXRhKAorICAgICAgICBtSW5zdGFuY2UsCisgICAgICAgIGZhbHNlLCAvLyBTdGFibGU/CisgICAgICAgIG5ldHdvcmtEYXRhLAorICAgICAgICAmbmV0d29ya0RhdGFMZW4KKyAgICApOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleQorICAgICAgICAgICAgICAgICkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZERhdGEobmV0d29ya0RhdGEsIG5ldHdvcmtEYXRhTGVuKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEEodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgbmV0d29ya0RhdGFbMjU1XTsKKyAgICB1aW50OF90IG5ldHdvcmtEYXRhTGVuID0gMjU1OworCisgICAgb3RCb3JkZXJSb3V0ZXJHZXROZXREYXRhKAorICAgICAgICBtSW5zdGFuY2UsCisgICAgICAgIHRydWUsIC8vIFN0YWJsZT8KKyAgICAgICAgbmV0d29ya0RhdGEsCisgICAgICAgICZuZXR3b3JrRGF0YUxlbgorICAgICk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5CisgICAgICAgICAgICAgICAgKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkRGF0YShuZXR3b3JrRGF0YSwgbmV0d29ya0RhdGFMZW4pKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0xFQURFUl9ORVRXT1JLX0RBVEEodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgbmV0d29ya0RhdGFbMjU1XTsKKyAgICB1aW50OF90IG5ldHdvcmtEYXRhTGVuID0gMjU1OworCisgICAgb3ROZXREYXRhR2V0KAorICAgICAgICBtSW5zdGFuY2UsCisgICAgICAgIGZhbHNlLCAvLyBTdGFibGU/CisgICAgICAgIG5ldHdvcmtEYXRhLAorICAgICAgICAmbmV0d29ya0RhdGFMZW4KKyAgICApOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleQorICAgICAgICAgICAgICAgICkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZERhdGEobmV0d29ya0RhdGEsIG5ldHdvcmtEYXRhTGVuKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1NUQUJMRV9MRUFERVJfTkVUV09SS19EQVRBKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IG5ldHdvcmtEYXRhWzI1NV07CisgICAgdWludDhfdCBuZXR3b3JrRGF0YUxlbiA9IDI1NTsKKworICAgIG90TmV0RGF0YUdldCgKKyAgICAgICAgbUluc3RhbmNlLAorICAgICAgICB0cnVlLCAvLyBTdGFibGU/CisgICAgICAgIG5ldHdvcmtEYXRhLAorICAgICAgICAmbmV0d29ya0RhdGFMZW4KKyAgICApOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleQorICAgICAgICAgICAgICAgICkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZERhdGEobmV0d29ya0RhdGEsIG5ldHdvcmtEYXRhTGVuKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0xFQURFUl9SSUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXRMZWFkZXJSb3V0ZXJJZChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0xPQ0FMX0xFQURFUl9XRUlHSFQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXRMb2NhbExlYWRlcldlaWdodChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9MRUFERVJfV0VJR0hUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgIG90VGhyZWFkR2V0TGVhZGVyV2VpZ2h0KG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0xFQURFUl9BRERSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdElwNkFkZHJlc3MgYWRkcmVzczsKKworICAgIGVycm9yID0gb3RUaHJlYWRHZXRMZWFkZXJSbG9jKG1JbnN0YW5jZSwgJmFkZHJlc3MpOworCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUywKKyAgICAgICAgICAgICAgICAgICAgJmFkZHJlc3MKKyAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9QQVJFTlQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90Um91dGVySW5mbyBwYXJlbnRJbmZvOworCisgICAgZXJyb3IgPSBvdFRocmVhZEdldFBhcmVudEluZm8obUluc3RhbmNlLCAmcGFyZW50SW5mbyk7CisKKyAgICBpZiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TICAgLy8gUGFyZW50J3MgZXh0ZW5kZWQgYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAvLyBQYXJlbnQncyBybG9jMTYKKyAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50SW5mby5tRXh0QWRkcmVzcy5tOCwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50SW5mby5tUmxvYzE2CisgICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9DSElMRF9UQUJMRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RDaGlsZEluZm8gY2hpbGRJbmZvOworICAgIHVpbnQ4X3QgbWF4Q2hpbGRyZW47CisgICAgdWludDhfdCBtb2RlRmxhZ3M7CisKKyAgICBtRGlzYWJsZVN0cmVhbVdyaXRlID0gdHJ1ZTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUFJPUF9TLAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIGFLZXkKKyAgICAgICAgICAgICAgICApKTsKKworICAgIG1heENoaWxkcmVuID0gb3RUaHJlYWRHZXRNYXhBbGxvd2VkQ2hpbGRyZW4obUluc3RhbmNlKTsKKworICAgIGZvciAodWludDhfdCBpbmRleCA9IDA7IGluZGV4IDwgbWF4Q2hpbGRyZW47IGluZGV4KyspCisgICAgeworICAgICAgICBlcnJvciA9IG90VGhyZWFkR2V0Q2hpbGRJbmZvQnlJbmRleChtSW5zdGFuY2UsIGluZGV4LCAmY2hpbGRJbmZvKTsKKworICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBtb2RlRmxhZ3MgPSBMaW5rRmxhZ3NUb0ZsYWdCeXRlKGNoaWxkSW5mby5tUnhPbldoZW5JZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW5mby5tU2VjdXJlRGF0YVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJbmZvLm1GdWxsRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJbmZvLm1GdWxsTmV0d29ya0RhdGEpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TICAgICAgICAgLy8gRVVJNjQgQWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAgICAgLy8gUmxvYzE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgICAgICAvLyBUaW1lb3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgICAgICAvLyBBZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgIC8vIE5ldHdvcmsgRGF0YSBWZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgICAvLyBMaW5rIFF1YWxpdHkgSW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TICAgICAgICAgIC8vIEF2ZXJhZ2UgUlNTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgICAvLyBNb2RlIChmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TICAgICAgICAgIC8vIE1vc3QgcmVjZW50IFJTUworICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW5mby5tRXh0QWRkcmVzcy5tOCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW5mby5tUmxvYzE2LAorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJbmZvLm1UaW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJbmZvLm1BZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEluZm8ubU5ldHdvcmtEYXRhVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW5mby5tTGlua1F1YWxpdHlJbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW5mby5tQXZlcmFnZVJzc2ksCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlRmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEluZm8ubUxhc3RSc3NpCisgICAgICAgICAgICAgICAgICAgICkpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICBtRGlzYWJsZVN0cmVhbVdyaXRlID0gZmFsc2U7CisgICAgcmV0dXJuIGVycm9yOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfTkVJR0hCT1JfVEFCTEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90TmVpZ2hib3JJbmZvSXRlcmF0b3IgaXRlciA9IE9UX05FSUdIQk9SX0lORk9fSVRFUkFUT1JfSU5JVDsKKyAgICBvdE5laWdoYm9ySW5mbyBuZWlnaEluZm87CisgICAgdWludDhfdCBtb2RlRmxhZ3M7CisKKyAgICBtRGlzYWJsZVN0cmVhbVdyaXRlID0gdHJ1ZTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywgYUhlYWRlciwgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUtleSkpOworCisgICAgd2hpbGUgKG90VGhyZWFkR2V0TmV4dE5laWdoYm9ySW5mbyhtSW5zdGFuY2UsICZpdGVyLCAmbmVpZ2hJbmZvKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgbW9kZUZsYWdzID0gTGlua0ZsYWdzVG9GbGFnQnl0ZShuZWlnaEluZm8ubVJ4T25XaGVuSWRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaEluZm8ubVNlY3VyZURhdGFSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoSW5mby5tRnVsbEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoSW5mby5tRnVsbE5ldHdvcmtEYXRhKTsKKworICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUyAgICAgICAgIC8vIEVVSTY0IEFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAgICAgIC8vIFJsb2MxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUyAgICAgICAgLy8gQWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgICAvLyBMaW5rIFF1YWxpdHkgSW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TICAgICAgICAgIC8vIEF2ZXJhZ2UgUlNTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgICAvLyBNb2RlIChmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TICAgICAgICAgIC8vIElzIENoaWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgICAgICAvLyBMaW5rIEZyYW1lIENvdW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MgICAgICAgIC8vIE1MRSBGcmFtZSBDb3VudGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUyAgICAgICAgICAvLyBNb3N0IHJlY2VudCBSU1MKKyAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaEluZm8ubUV4dEFkZHJlc3MubTgsCisgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaEluZm8ubVJsb2MxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoSW5mby5tQWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hJbmZvLm1MaW5rUXVhbGl0eUluLAorICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hJbmZvLm1BdmVyYWdlUnNzaSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoSW5mby5tSXNDaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoSW5mby5tTGlua0ZyYW1lQ291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoSW5mby5tTWxlRnJhbWVDb3VudGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hJbmZvLm1MYXN0UnNzaQorICAgICAgICAgICAgICAgICAgICApKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgbURpc2FibGVTdHJlYW1Xcml0ZSA9IGZhbHNlOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0FTU0lTVElOR19QT1JUUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBudW1FbnRyaWVzID0gMDsKKyAgICBjb25zdCB1aW50MTZfdCAqcG9ydHMgPSBvdElwNkdldFVuc2VjdXJlUG9ydHMobUluc3RhbmNlLCAmbnVtRW50cmllcyk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsIGFIZWFkZXIsIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFLZXkpKTsKKworICAgIGZvciAoOyBudW1FbnRyaWVzICE9IDA7IHBvcnRzKyssIG51bUVudHJpZXMtLSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsICpwb3J0cykpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9BTExPV19MT0NBTF9ORVRfREFUQV9DSEFOR0UodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICBtQWxsb3dMb2NhbE5ldHdvcmtEYXRhQ2hhbmdlCisgICAgICAgICAgICk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICBvdFRocmVhZElzUm91dGVyUm9sZUVuYWJsZWQobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfT05fTUVTSF9ORVRTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdEJvcmRlclJvdXRlckNvbmZpZyBib3JkZXJSb3V0ZXJDb25maWc7CisgICAgdWludDhfdCBmbGFnczsKKworICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSB0cnVlOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleQorICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRmlsbCBmcm9tIG5vbi1sb2NhbCBuZXR3b3JrIGRhdGEgZmlyc3QKKyAgICBmb3IgKG90TmV0d29ya0RhdGFJdGVyYXRvciBpdGVyID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQgOzspCisgICAgeworICAgICAgICBlcnJvciA9IG90TmV0RGF0YUdldE5leHRPbk1lc2hQcmVmaXgobUluc3RhbmNlLCAmaXRlciwgJmJvcmRlclJvdXRlckNvbmZpZyk7CisKKyAgICAgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZmxhZ3MgPSBCb3JkZXJSb3V0ZXJDb25maWdUb0ZsYWdCeXRlKGJvcmRlclJvdXRlckNvbmZpZyk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MgICAgICAvLyBJUHY2IFByZWZpeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgIC8vIFByZWZpeCBMZW5ndGggKGluIGJpdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MgICAgICAgICAgLy8gaXNTdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgICAvLyBGbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TICAgICAgICAgIC8vIGlzTG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib3JkZXJSb3V0ZXJDb25maWcubVByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSb3V0ZXJDb25maWcubVN0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIC8vIEZpbGwgZnJvbSBsb2NhbCBuZXR3b3JrIGRhdGEgbGFzdAorICAgIGZvciAob3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGl0ZXIgPSBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVCA7OykKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RCb3JkZXJSb3V0ZXJHZXROZXh0T25NZXNoUHJlZml4KG1JbnN0YW5jZSwgJml0ZXIsICZib3JkZXJSb3V0ZXJDb25maWcpOworCisgICAgICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGZsYWdzID0gQm9yZGVyUm91dGVyQ29uZmlnVG9GbGFnQnl0ZShib3JkZXJSb3V0ZXJDb25maWcpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfU1RSVUNUX1MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TICAgICAgLy8gSVB2NiBQcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgICAvLyBQcmVmaXggTGVuZ3RoIChpbiBiaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TICAgICAgICAgIC8vIGlzU3RhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAgICAgLy8gRmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUyAgICAgICAgICAvLyBpc0xvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9yZGVyUm91dGVyQ29uZmlnLm1QcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUm91dGVyQ29uZmlnLm1TdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICBtRGlzYWJsZVN0cmVhbVdyaXRlID0gZmFsc2U7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfRElTQ09WRVJZX1NDQU5fSk9JTkVSX0ZMQUcodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICBtRGlzY292ZXJ5U2NhbkpvaW5lckZsYWcKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0VOQUJMRV9GSUxURVJJTkcodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICBtRGlzY292ZXJ5U2NhbkVuYWJsZUZpbHRlcmluZworICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgIG1EaXNjb3ZlcnlTY2FuUGFuSWQKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSVBWNl9NTF9QUkVGSVgodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGNvbnN0IHVpbnQ4X3QgKm1sUHJlZml4ID0gb3RUaHJlYWRHZXRNZXNoTG9jYWxQcmVmaXgobUluc3RhbmNlKTsKKworICAgIGlmIChtbFByZWZpeCkKKyAgICB7CisgICAgICAgIG90SXA2QWRkcmVzcyBhZGRyOworCisgICAgICAgIG1lbWNweShhZGRyLm1GaWVsZHMubTgsIG1sUHJlZml4LCA4KTsKKworICAgICAgICAvLyBaZXJvIG91dCB0aGUgbGFzdCA4IGJ5dGVzLgorICAgICAgICBtZW1zZXQoYWRkci5tRmllbGRzLm04ICsgOCwgMCwgOCk7CisKKyAgICAgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MgIC8vIE1lc2gtbG9jYWwgSVB2NiBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgLy8gUHJlZml4IGxlbmd0aCAoaW4gYml0cykKKyAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgJmFkZHIsCisgICAgICAgICAgICAgICAgICAgIDY0CisgICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1ZPSURfUworICAgICAgICAgICAgICAgICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9JUFY2X01MX0FERFIodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqbWw2NCA9IG90VGhyZWFkR2V0TWVzaExvY2FsRWlkKG1JbnN0YW5jZSk7CisKKyAgICBpZiAobWw2NCkKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TLAorICAgICAgICAgICAgICAgICAgICBtbDY0CisgICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1ZPSURfUworICAgICAgICAgICAgICAgICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9JUFY2X0xMX0FERFIodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYWRkcmVzcyA9IG90VGhyZWFkR2V0TGlua0xvY2FsSXA2QWRkcmVzcyhtSW5zdGFuY2UpOworCisgICAgaWYgKGFkZHJlc3MpCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUywKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzcworICAgICAgICAgICAgICAgICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9WT0lEX1MKKyAgICAgICAgICAgICAgICApOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSVBWNl9BRERSRVNTX1RBQkxFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSB0cnVlOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleQorICAgICAgICAgICAgICAgICkpOworCisgICAgZm9yIChjb25zdCBvdE5ldGlmQWRkcmVzcyAqYWRkcmVzcyA9IG90SXA2R2V0VW5pY2FzdEFkZHJlc3NlcyhtSW5zdGFuY2UpOyBhZGRyZXNzOyBhZGRyZXNzID0gYWRkcmVzcy0+bU5leHQpCisgICAgeworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TICAvLyBJUHY2IGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgLy8gUHJlZml4IGxlbmd0aCAoaW4gYml0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MgICAgLy8gUHJlZmVycmVkIGxpZmV0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgIC8vIFZhbGlkIGxpZmV0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJlc3MtPm1BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy0+bVByZWZpeExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MtPm1QcmVmZXJyZWQgPyAweGZmZmZmZmZmIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MtPm1WYWxpZCA/IDB4ZmZmZmZmZmYgOiAwCisgICAgICAgICAgICAgICAgICAgICkpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICBtRGlzYWJsZVN0cmVhbVdyaXRlID0gZmFsc2U7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9JUFY2X1JPVVRFX1RBQkxFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQgZ2V0IHJvdXRlIHRhYmxlCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFLZXkpOworCisgICAgcmV0dXJuIFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfVU5JTVBMRU1FTlRFRCk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0lQVjZfSUNNUF9QSU5HX09GRkxPQUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICBvdEljbXA2SXNFY2hvRW5hYmxlZChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9STE9DMTZfREVCVUdfUEFTU1RIUlUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIC8vIE5vdGUgcmV2ZXJzZSBsb2dpYzogcGFzc3RocnUgZW5hYmxlZCA9IGZpbHRlciBkaXNhYmxlZAorICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAhb3RJcDZJc1JlY2VpdmVGaWx0ZXJFbmFibGVkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX09GRl9NRVNIX1JPVVRFUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFeHRlcm5hbFJvdXRlQ29uZmlnIGV4dGVybmFsX3JvdXRlX2NvbmZpZzsKKyAgICBvdE5ldHdvcmtEYXRhSXRlcmF0b3IgaXRlciA9IE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklUOworCisgICAgbURpc2FibGVTdHJlYW1Xcml0ZSA9IHRydWU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5CisgICAgICAgICAgICAgICAgKSk7CisKKyAgICB3aGlsZSAob3ROZXREYXRhR2V0TmV4dFJvdXRlKG1JbnN0YW5jZSwgJml0ZXIsICZleHRlcm5hbF9yb3V0ZV9jb25maWcpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUyAgICAgIC8vIElQdjYgUHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgICAvLyBQcmVmaXggTGVuZ3RoIChpbiBiaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MgICAgICAgICAgLy8gSXNTdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgIC8vIFJvdXRlIFByZWZlcmVuY2UgRmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TICAgICAgICAgIC8vIElzTG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TICAgICAgICAgIC8vIE5leHRIb3BJc1RoaXNEZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAmZXh0ZXJuYWxfcm91dGVfY29uZmlnLm1QcmVmaXgubVByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsX3JvdXRlX2NvbmZpZy5tUHJlZml4Lm1MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbF9yb3V0ZV9jb25maWcubVN0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVybmFsUm91dGVQcmVmZXJlbmNlVG9GbGFnQnl0ZShleHRlcm5hbF9yb3V0ZV9jb25maWcubVByZWZlcmVuY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbF9yb3V0ZV9jb25maWcubU5leHRIb3BJc1RoaXNEZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIHdoaWxlIChvdEJvcmRlclJvdXRlckdldE5leHRSb3V0ZShtSW5zdGFuY2UsICZpdGVyLCAmZXh0ZXJuYWxfcm91dGVfY29uZmlnKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfU1RSVUNUX1MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MgICAgICAvLyBJUHY2IFByZWZpeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAgICAgLy8gUHJlZml4IExlbmd0aCAoaW4gYml0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TICAgICAgICAgIC8vIElzU3RhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgICAvLyBSb3V0ZSBQcmVmZXJlbmNlIEZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUyAgICAgICAgICAvLyBJc0xvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUyAgICAgICAgICAvLyBOZXh0SG9wSXNUaGlzRGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgJmV4dGVybmFsX3JvdXRlX2NvbmZpZy5tUHJlZml4Lm1QcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbF9yb3V0ZV9jb25maWcubVByZWZpeC5tTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxfcm91dGVfY29uZmlnLm1TdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBFeHRlcm5hbFJvdXRlUHJlZmVyZW5jZVRvRmxhZ0J5dGUoZXh0ZXJuYWxfcm91dGVfY29uZmlnLm1QcmVmZXJlbmNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbF9yb3V0ZV9jb25maWcubU5leHRIb3BJc1RoaXNEZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICBtRGlzYWJsZVN0cmVhbVdyaXRlID0gZmFsc2U7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9TVFJFQU1fTkVUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQgZXhwbGljaXQgZGF0YSBwb2xsLgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhS2V5KTsKKworICAgIHJldHVybiBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX1VOSU1QTEVNRU5URUQpOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZICYmIE9QRU5USFJFQURfRlRECitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfVE1GX1BST1hZX0VOQUJMRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICBvdFRtZlByb3h5SXNFbmFibGVkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSkFNX0RFVEVDVF9FTkFCTEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICBvdEphbURldGVjdGlvbklzRW5hYmxlZChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0pBTV9ERVRFQ1RFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG90SmFtRGV0ZWN0aW9uR2V0U3RhdGUobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TLAorICAgICAgICAgICAgICAgb3RKYW1EZXRlY3Rpb25HZXRSc3NpVGhyZXNob2xkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSkFNX0RFVEVDVF9XSU5ET1codWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgb3RKYW1EZXRlY3Rpb25HZXRXaW5kb3cobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9KQU1fREVURUNUX0JVU1kodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgb3RKYW1EZXRlY3Rpb25HZXRCdXN5UGVyaW9kKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSkFNX0RFVEVDVF9ISVNUT1JZX0JJVE1BUCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgdWludDY0X3QgaGlzdG9yeUJpdG1hcCA9IG90SmFtRGV0ZWN0aW9uR2V0SGlzdG9yeUJpdG1hcChtSW5zdGFuY2UpOworCisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUyAgIC8vIEhpc3RvcnkgYml0bWFwIC0gYml0cyAwLTMxCisgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgLy8gSGlzdG9yeSBiaXRtYXAgLSBiaXRzIDMyLTYzCisgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGhpc3RvcnlCaXRtYXAgJiAweGZmZmZmZmZmKSwKKyAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihoaXN0b3J5Qml0bWFwID4+IDMyKQorICAgICAgICAgICApOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9NQUNfQ05UUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgdWludDMyX3QgdmFsdWU7CisgICAgY29uc3Qgb3RNYWNDb3VudGVycyAqbWFjQ291bnRlcnM7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBtYWNDb3VudGVycyA9IG90TGlua0dldENvdW50ZXJzKG1JbnN0YW5jZSk7CisKKyAgICBhc3NlcnQobWFjQ291bnRlcnMgIT0gTlVMTCk7CisKKyAgICBzd2l0Y2ggKGFLZXkpCisgICAgeworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfVE9UQUw6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1UeFRvdGFsOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfQUNLX1JFUToKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVR4QWNrUmVxdWVzdGVkOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfQUNLRUQ6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1UeEFja2VkOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfTk9fQUNLX1JFUToKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVR4Tm9BY2tSZXF1ZXN0ZWQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9EQVRBOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tVHhEYXRhOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfREFUQV9QT0xMOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tVHhEYXRhUG9sbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0JFQUNPTjoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVR4QmVhY29uOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfQkVBQ09OX1JFUToKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVR4QmVhY29uUmVxdWVzdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX09USEVSOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tVHhPdGhlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX1JFVFJZOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tVHhSZXRyeTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfRVJSX0NDQToKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVR4RXJyQ2NhOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfVU5JQ0FTVDoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVR4VW5pY2FzdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0JST0FEQ0FTVDoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVR4QnJvYWRjYXN0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9FUlJfQUJPUlQ6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1UeEVyckFib3J0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfVE9UQUw6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeFRvdGFsOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfREFUQToKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVJ4RGF0YTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0RBVEFfUE9MTDoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVJ4RGF0YVBvbGw7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9CRUFDT046CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeEJlYWNvbjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0JFQUNPTl9SRVE6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeEJlYWNvblJlcXVlc3Q7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9PVEhFUjoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVJ4T3RoZXI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9GSUxUX1dMOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhXaGl0ZWxpc3RGaWx0ZXJlZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0ZJTFRfREE6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeERlc3RBZGRyRmlsdGVyZWQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9EVVA6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeER1cGxpY2F0ZWQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9VTklDQVNUOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhVbmljYXN0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfQlJPQURDQVNUOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhCcm9hZGNhc3Q7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX0VSUl9FTVBUWToKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVJ4RXJyTm9GcmFtZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX1VLV05fTkJSOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhFcnJVbmtub3duTmVpZ2hib3I7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX0VSUl9OVkxEX1NBRERSOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhFcnJJbnZhbGlkU3JjQWRkcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX1NFQ1VSSVRZOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhFcnJTZWM7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX0VSUl9CQURfRkNTOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhFcnJGY3M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX0VSUl9PVEhFUjoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVJ4RXJyT3RoZXI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgIHZhbHVlCisgICAgICAgICAgICApOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTkNQX0NOVFIodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHVpbnQzMl90IHZhbHVlOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgc3dpdGNoIChhS2V5KQorICAgIHsKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfSVBfU0VDX1RPVEFMOgorICAgICAgICB2YWx1ZSA9IG1JbmJvdW5kU2VjdXJlSXBGcmFtZUNvdW50ZXI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX0lQX0lOU0VDX1RPVEFMOgorICAgICAgICB2YWx1ZSA9IG1JbmJvdW5kSW5zZWN1cmVJcEZyYW1lQ291bnRlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfSVBfRFJPUFBFRDoKKyAgICAgICAgdmFsdWUgPSBtRHJvcHBlZEluYm91bmRJcEZyYW1lQ291bnRlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfSVBfU0VDX1RPVEFMOgorICAgICAgICB2YWx1ZSA9IG1PdXRib3VuZFNlY3VyZUlwRnJhbWVDb3VudGVyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9JUF9JTlNFQ19UT1RBTDoKKyAgICAgICAgdmFsdWUgPSBtT3V0Ym91bmRJbnNlY3VyZUlwRnJhbWVDb3VudGVyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9JUF9EUk9QUEVEOgorICAgICAgICB2YWx1ZSA9IG1Ecm9wcGVkT3V0Ym91bmRJcEZyYW1lQ291bnRlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfU1BJTkVMX1RPVEFMOgorICAgICAgICB2YWx1ZSA9IG1UeFNwaW5lbEZyYW1lQ291bnRlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfU1BJTkVMX1RPVEFMOgorICAgICAgICB2YWx1ZSA9IG1SeFNwaW5lbEZyYW1lQ291bnRlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfU1BJTkVMX09VVF9PRl9PUkRFUl9USUQ6CisgICAgICAgIHZhbHVlID0gbVJ4U3BpbmVsT3V0T2ZPcmRlclRpZENvdW50ZXI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1NQSU5FTF9FUlI6CisgICAgICAgIHZhbHVlID0gbUZyYW1pbmdFcnJvckNvdW50ZXI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgIHZhbHVlCisgICAgICAgICAgICApOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSVBfQ05UUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgdWludDMyX3QgdmFsdWU7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBjb25zdCBvdElwQ291bnRlcnMgKmNvdW50ZXJzID0gb3RUaHJlYWRHZXRJcDZDb3VudGVycyhtSW5zdGFuY2UpOworCisgICAgc3dpdGNoIChhS2V5KQorICAgIHsKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfSVBfVFhfU1VDQ0VTUzoKKyAgICAgICAgdmFsdWUgPSBjb3VudGVycy0+bVR4U3VjY2VzczsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfSVBfUlhfU1VDQ0VTUzoKKyAgICAgICAgdmFsdWUgPSBjb3VudGVycy0+bVJ4U3VjY2VzczsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfSVBfVFhfRkFJTFVSRToKKyAgICAgICAgdmFsdWUgPSBjb3VudGVycy0+bVR4RmFpbHVyZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfSVBfUlhfRkFJTFVSRToKKyAgICAgICAgdmFsdWUgPSBjb3VudGVycy0+bVJ4RmFpbHVyZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfSU5URVJOQUxfRVJST1IpOworICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgIHZhbHVlCisgICAgICAgICAgICApOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTVNHX0JVRkZFUl9DT1VOVEVSUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RCdWZmZXJJbmZvIGJ1ZmZlckluZm87CisKKyAgICBvdE1lc3NhZ2VHZXRCdWZmZXJJbmZvKG1JbnN0YW5jZSwgJmJ1ZmZlckluZm8pOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleQorICAgICAgICAgICAgICAgICkpOworCisgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIFRvdGFsIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAvLyBGcmVlIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAvLyBMb3dwYW4gc2VuZCBtZXNzYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIExvd3BhbiBzZW5kIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAvLyBMb3dwYW4gcmVhc3NlbWJseSBtZXNzYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIExvd3BhbiByZWFzc2VtYmx5IGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAvLyBJcDYgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAvLyBJcDYgYnVmZmVycworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIE1wbCBtZXNzYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIE1wbCBidWZmZXJzCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAgLy8gTWxlIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAgLy8gTWxlIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAvLyBBcnAgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAvLyBBcnAgYnVmZmVycworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIENvYXAgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAvLyBDb2FwIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mby5tVG90YWxCdWZmZXJzLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm1GcmVlQnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mby5tNmxvU2VuZE1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm02bG9TZW5kQnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mby5tNmxvUmVhc3NlbWJseU1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm02bG9SZWFzc2VtYmx5QnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mby5tSXA2TWVzc2FnZXMsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8ubUlwNkJ1ZmZlcnMsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8ubU1wbE1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm1NcGxCdWZmZXJzLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm1NbGVNZXNzYWdlcywKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mby5tTWxlQnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mby5tQXJwTWVzc2FnZXMsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8ubUFycEJ1ZmZlcnMsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8ubUNvYXBNZXNzYWdlcywKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mby5tQ29hcEJ1ZmZlcnMKKyAgICAgICAgICAgICAgICApKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0RFQlVHX1RFU1RfQVNTRVJUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICBhc3NlcnQoZmFsc2UpOworCisgICAgLy8gV2Ugb25seSBnZXQgdG8gdGhpcyBwb2ludCBpZiBgYXNzZXJ0KGZhbHNlKWAKKyAgICAvLyBkb2VzIG5vdCBjYXVzZSBhbiBOQ1AgcmVzZXQgb24gdGhlIHBsYXRmb3JtLgorICAgIC8vIEluIHN1Y2ggYSBjYXNlIHdlIHJldHVybiBgZmFsc2VgIGFzIHRoZQorICAgIC8vIHByb3BlcnR5IHZhbHVlIHRvIGluZGljYXRlIHRoaXMuCisKKyAgICBPVF9VTlJFQUNIQUJMRV9DT0RFKAorICAgICAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgKTsKKyAgICApCit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0RFQlVHX05DUF9MT0dfTEVWRUwodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHVpbnQ4X3QgbG9nTGV2ZWwgPSAwOworCisgICAgc3dpdGNoIChvdEdldER5bmFtaWNMb2dMZXZlbChtSW5zdGFuY2UpKQorICAgIHsKKyAgICBjYXNlIE9UX0xPR19MRVZFTF9OT05FOgorICAgICAgICBsb2dMZXZlbCA9IFNQSU5FTF9OQ1BfTE9HX0xFVkVMX0VNRVJHOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfTE9HX0xFVkVMX0NSSVQ6CisgICAgICAgIGxvZ0xldmVsID0gU1BJTkVMX05DUF9MT0dfTEVWRUxfQ1JJVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19MRVZFTF9XQVJOOgorICAgICAgICBsb2dMZXZlbCA9IFNQSU5FTF9OQ1BfTE9HX0xFVkVMX1dBUk47CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfTEVWRUxfSU5GTzoKKyAgICAgICAgbG9nTGV2ZWwgPSBTUElORUxfTkNQX0xPR19MRVZFTF9JTkZPOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfTE9HX0xFVkVMX0RFQkc6CisgICAgICAgIGxvZ0xldmVsID0gU1BJTkVMX05DUF9MT0dfTEVWRUxfREVCVUc7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgbG9nTGV2ZWwKKyAgICAgICAgICAgKTsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1dISVRFTElTVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RNYWNXaGl0ZWxpc3RFbnRyeSBlbnRyeTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSB0cnVlOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleQorICAgICAgICAgICAgICAgICkpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyAoaSAhPSAyNTUpICYmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKTsgaSsrKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdExpbmtHZXRXaGl0ZWxpc3RFbnRyeShtSW5zdGFuY2UsIGksICZlbnRyeSk7CisKKyAgICAgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVudHJ5Lm1WYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFlbnRyeS5tRml4ZWRSc3NpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudHJ5Lm1Sc3NpID0gUlNTSV9PVkVSUklERV9ESVNBQkxFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MgICAvLyBFeHRlbmRlZCBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MgICAgLy8gUnNzaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkubUV4dEFkZHJlc3MubTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkubVJzc2kKKyAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgICAgICB9CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSBmYWxzZTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX01BQ19XSElURUxJU1RfRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG90TGlua0lzV2hpdGVsaXN0RW5hYmxlZChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX01BQ19CTEFDS0xJU1QodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90TWFjQmxhY2tsaXN0RW50cnkgZW50cnk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBtRGlzYWJsZVN0cmVhbVdyaXRlID0gdHJ1ZTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUFJPUF9TLAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIGFLZXkKKyAgICAgICAgICAgICAgICApKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgKGkgIT0gMjU1KSAmJiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSk7IGkrKykKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RMaW5rR2V0QmxhY2tsaXN0RW50cnkobUluc3RhbmNlLCBpLCAmZW50cnkpOworCisgICAgICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbnRyeS5tVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfU1RSVUNUX1MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TICAgLy8gRXh0ZW5kZWQgYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkubUV4dEFkZHJlc3MubTgKKyAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgICAgICB9CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSBmYWxzZTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX01BQ19CTEFDS0xJU1RfRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG90TGlua0lzQmxhY2tsaXN0RW5hYmxlZChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKworI2lmIE9QRU5USFJFQURfRlRECitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9ORVRfUFNLQyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgIG90VGhyZWFkR2V0UFNLYyhtSW5zdGFuY2UpLAorICAgICAgICAgICAgICAgc2l6ZW9mKHNwaW5lbF9uZXRfcHNrY190KQorICAgICAgICAgICApOworfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9NT0RFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICB1aW50OF90IG51bWVyaWNNb2RlOworICAgIG90TGlua01vZGVDb25maWcgbW9kZUNvbmZpZyA9IG90VGhyZWFkR2V0TGlua01vZGUobUluc3RhbmNlKTsKKworICAgIG51bWVyaWNNb2RlID0gTGlua0ZsYWdzVG9GbGFnQnl0ZShtb2RlQ29uZmlnLm1SeE9uV2hlbklkbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVDb25maWcubVNlY3VyZURhdGFSZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZUNvbmZpZy5tRGV2aWNlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZUNvbmZpZy5tTmV0d29ya0RhdGEpOworCisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBudW1lcmljTW9kZQorICAgICAgICAgICApOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9DSElMRF9DT1VOVF9NQVgodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXRNYXhBbGxvd2VkQ2hpbGRyZW4obUluc3RhbmNlKQorICAgICAgICAgICApOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfQ0hJTERfVElNRU9VVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXRDaGlsZFRpbWVvdXQobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfUkxPQzE2KHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldFJsb2MxNihtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1JPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVIodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXRDb250ZXh0SWRSZXVzZURlbGF5KG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX05FVFdPUktfSURfVElNRU9VVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldE5ldHdvcmtJZFRpbWVvdXQobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIGJvb2wgZW5hYmxlZCA9IGZhbHNlOworCisgICAgaWYgKG90Q29tbWlzc2lvbmVyR2V0U3RhdGUobUluc3RhbmNlKSA9PSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfQUNUSVZFKQorICAgIHsKKyAgICAgICAgZW5hYmxlZCA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIGVuYWJsZWQKKyAgICAgICAgICAgKTsKK30KKyNlbmRpZgorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgbVJlcXVpcmVKb2luRXhpc3RpbmdOZXR3b3JrCisgICAgICAgICAgICk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX05FU1RfTEVHQUNZX1VMQV9QUkVGSVgodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsCisgICAgICAgICAgICAgICBtTGVnYWN5VWxhUHJlZml4LAorICAgICAgICAgICAgICAgc2l6ZW9mKG1MZWdhY3lVbGFQcmVmaXgpCisgICAgICAgICAgICk7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IEluZGl2aWR1YWwgUHJvcGVydHkgU2V0dGVycworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvdEVycm9yIE5jcEJhc2U6OlNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgYUVycm9yID0gSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KGFIZWFkZXIsIGFLZXkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhRXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGFFcnJvcikpOworICAgIH0KKworICAgIHJldHVybiBhRXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1BPV0VSX1NUQVRFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIC8vIFRPRE86IEltcGxlbWVudCBQT1dFUl9TVEFURQorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhS2V5KTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYVZhbHVlUHRyKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYVZhbHVlTGVuKTsKKworICAgIHJldHVybiBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX1VOSU1QTEVNRU5URUQpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9IT1NUX1BPV0VSX1NUQVRFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDhfdCB2YWx1ZTsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZQorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBpZiAocGFyc2VkTGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBTUElORUxfSE9TVF9QT1dFUl9TVEFURV9PRkZMSU5FOgorICAgICAgICBjYXNlIFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX0RFRVBfU0xFRVA6CisgICAgICAgIGNhc2UgU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfTE9XX1BPV0VSOgorICAgICAgICBjYXNlIFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX09OTElORToKKyAgICAgICAgICAgIC8vIEFkb3B0IHRoZSByZXF1ZXN0ZWQgcG93ZXIgc3RhdGUuCisgICAgICAgICAgICBtSG9zdFBvd2VyU3RhdGUgPSBzdGF0aWNfY2FzdDxzcGluZWxfaG9zdF9wb3dlcl9zdGF0ZV90Pih2YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX1JFU0VSVkVEOgorICAgICAgICAgICAgLy8gUGVyIHRoZSBzcGVjaWZpY2F0aW9uLCB0cmVhdCB0aGlzIGFzIHN5bm9ueW1vdXMgd2l0aCBTUElORUxfSE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQLgorICAgICAgICAgICAgbUhvc3RQb3dlclN0YXRlID0gU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfREVFUF9TTEVFUDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBQZXIgdGhlIHNwZWNpZmljYXRpb24sIHRyZWF0IHVucmVjb2duaXplZCB2YWx1ZXMgYXMgc3lub255bW91cyB3aXRoIFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX0xPV19QT1dFUi4KKyAgICAgICAgICAgIG1Ib3N0UG93ZXJTdGF0ZSA9IFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX0xPV19QT1dFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0U7CisgICAgfQorCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtSG9zdFBvd2VyU3RhdGVIZWFkZXIgPSAwOworCisgICAgICAgIGVycm9yID0gSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KGFIZWFkZXIsIGFLZXkpOworCisgICAgICAgIGlmIChtSG9zdFBvd2VyU3RhdGUgIT0gU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfT05MSU5FKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSG9zdFBvd2VyUmVwbHlGcmFtZVRhZyA9IEdldExhc3RPdXRib3VuZEZyYW1lVGFnKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUhvc3RQb3dlclJlcGx5RnJhbWVUYWcgPSBOY3BGcmFtZUJ1ZmZlcjo6a0ludmFsaWRUYWc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1Ib3N0UG93ZXJTdGF0ZUluUHJvZ3Jlc3MgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Ib3N0UG93ZXJTdGF0ZUhlYWRlciA9IGFIZWFkZXI7CisKKyAgICAgICAgICAgIC8vIFRoZSByZXBseSB3aWxsIGJlIHF1ZXVlZCB3aGVuIGJ1ZmZlciBzcGFjZSBiZWNvbWVzIGF2YWlsYWJsZQorICAgICAgICAgICAgLy8gaW4gdGhlIE5DUCB0eCBidWZmZXIgc28gd2UgcmV0dXJuIGBzdWNjZXNzYCB0byBhdm9pZCBzZW5kaW5nIGEKKyAgICAgICAgICAgIC8vIE5PTUVNIHN0YXR1cyBmb3IgdGhlIHNhbWUgdGlkIHRocm91Z2ggYG1Ecm9wcGVkUmVwbHlUaWRgIGxpc3QuCisKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfUEhZX0VOQUJMRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCB2YWx1ZSA9IGZhbHNlOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWUKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgaWYgKHZhbHVlID09IGZhbHNlKQorICAgIHsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSByYXcgc3RyZWFtIGVuYWJsZWQgc3RvcCByZWNlaXZpbmcKKyAgICAgICAgaWYgKG1Jc1Jhd1N0cmVhbUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TGlua1Jhd1NsZWVwKG1JbnN0YW5jZSk7CisgICAgICAgIH0KKworICAgICAgICBlcnJvciA9IG90TGlua1Jhd1NldEVuYWJsZShtSW5zdGFuY2UsIGZhbHNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdExpbmtSYXdTZXRFbmFibGUobUluc3RhbmNlLCB0cnVlKTsKKworICAgICAgICAvLyBJZiB3ZSBoYXZlIHJhdyBzdHJlYW0gZW5hYmxlZCBhbHJlYWR5LCBzdGFydCByZWNlaXZpbmcKKyAgICAgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUgJiYgbUlzUmF3U3RyZWFtRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBvdExpbmtSYXdSZWNlaXZlKG1JbnN0YW5jZSwgbUN1clJlY2VpdmVDaGFubmVsLCAmTmNwQmFzZTo6TGlua1Jhd1JlY2VpdmVEb25lKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1BIWV9UWF9QT1dFUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgaW50OF90IHZhbHVlID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90TGlua1NldE1heFRyYW5zbWl0UG93ZXIobUluc3RhbmNlLCB2YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfUEhZX0NIQU4odWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdW5zaWduZWQgaW50IGNoYW5uZWwgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmNoYW5uZWwKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdExpbmtTZXRDaGFubmVsKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oY2hhbm5lbCkpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yKTsKKworICAgIC8vIENhY2hlIHRoZSBjaGFubmVsLiBJZiB0aGUgcmF3IGxpbmsgbGF5ZXIgaXNuJ3QgZW5hYmxlZCB5ZXQsIHRoZSBvdFNldENoYW5uZWwgY2FsbAorICAgIC8vIGRvZXNuJ3QgY2FsbCBpbnRvIHRoZSByYWRpbyBsYXllciB0byBzZXQgdGhlIGNoYW5uZWwuIFdlIHdpbGwgaGF2ZSB0byBkbyBpdAorICAgIC8vIG1hbnVhbGx5IHdoZW5ldmVyIHRoZSByYWRpb3MgYXJlIGVuYWJsZWQgYW5kL29yIHJhdyBzdHJlYW0gaXMgZW5hYmxlZC4KKyAgICBtQ3VyUmVjZWl2ZUNoYW5uZWwgPSBzdGF0aWNfY2FzdDx1aW50OF90PihjaGFubmVsKTsKKworICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmUgdXBkYXRlIHRoZSByZWNlaXZpbmcgY2hhbm5lbCBpZiByYXcgbGluayBpcyBlbmFibGVkIGFuZCB3ZSBoYXZlIHJhdworICAgIC8vIHN0cmVhbSBlbmFibGVkIGFscmVhZHkKKyAgICBpZiAob3RMaW5rUmF3SXNFbmFibGVkKG1JbnN0YW5jZSkgJiYgbUlzUmF3U3RyZWFtRW5hYmxlZCkKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RMaW5rUmF3UmVjZWl2ZShtSW5zdGFuY2UsIG1DdXJSZWNlaXZlQ2hhbm5lbCwgJk5jcEJhc2U6OkxpbmtSYXdSZWNlaXZlRG9uZSk7CisgICAgfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1BST01JU0NVT1VTX01PREUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDhfdCBtb2RlID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZtb2RlCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIHN3aXRjaCAobW9kZSkKKyAgICB7CisgICAgY2FzZSBTUElORUxfTUFDX1BST01JU0NVT1VTX01PREVfT0ZGOgorICAgICAgICBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKG1JbnN0YW5jZSwgZmFsc2UpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX01BQ19QUk9NSVNDVU9VU19NT0RFX05FVFdPUks6CisgICAgY2FzZSBTUElORUxfTUFDX1BST01JU0NVT1VTX01PREVfRlVMTDoKKyAgICAgICAgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhtSW5zdGFuY2UsIHRydWUpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1NDQU5fTUFTSyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQzMl90IG5ld01hc2sgPSAwOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yICg7IGFWYWx1ZUxlbiAhPSAwOyBhVmFsdWVMZW4tLSwgYVZhbHVlUHRyKyspCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoYVZhbHVlUHRyWzBdIDw9IDMxLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgICAgIFZlcmlmeU9yRXhpdCgobVN1cHBvcnRlZENoYW5uZWxNYXNrICYgKDEgPDwgYVZhbHVlUHRyWzBdKSkgIT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgICAgIG5ld01hc2sgfD0gKDEgPDwgYVZhbHVlUHRyWzBdKTsKKyAgICB9CisKKyAgICBtQ2hhbm5lbE1hc2sgPSBuZXdNYXNrOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX01BQ19TQ0FOX1BFUklPRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDE2X3QgcGVyaW9kID0gbVNjYW5QZXJpb2Q7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnBlcmlvZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBtU2NhblBlcmlvZCA9IHBlcmlvZDsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCB2YWx1ZSA9IG1SZXF1aXJlSm9pbkV4aXN0aW5nTmV0d29yazsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG1SZXF1aXJlSm9pbkV4aXN0aW5nTmV0d29yayA9IHZhbHVlOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK3N0YXRpYyBib29sIEhhc09ubHkxQml0U2V0KHVpbnQzMl90IGFWYWx1ZSkKK3sKKyAgICByZXR1cm4gYVZhbHVlICE9IDAgJiYgKChhVmFsdWUgJiAoYVZhbHVlIC0gMSkpID09IDApOworfQorCitzdGF0aWMgdWludDhfdCBJbmRleE9mTVNCKHVpbnQzMl90IGFWYWx1ZSkKK3sKKyAgICB1aW50OF90IGluZGV4ID0gMDsKKworICAgIHdoaWxlIChhVmFsdWUgPj49IDEpCisgICAgeworICAgICAgICBpbmRleCsrOworICAgIH0KKworICAgIHJldHVybiBpbmRleDsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1NDQU5fU1RBVEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDhfdCBzdGF0ZSA9IDA7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmc3RhdGUKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgc3dpdGNoIChzdGF0ZSkKKyAgICB7CisgICAgY2FzZSBTUElORUxfU0NBTl9TVEFURV9JRExFOgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU0NBTl9TVEFURV9CRUFDT046CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgICAgIGlmIChvdExpbmtSYXdJc0VuYWJsZWQobUluc3RhbmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IG90TGlua0FjdGl2ZVNjYW4oCisgICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBtQ2hhbm5lbE1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICBtU2NhblBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZIYW5kbGVBY3RpdmVTY2FuUmVzdWx0X0p1bXAsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yKTsKKyAgICAgICAgbVNob3VsZFNpZ25hbEVuZE9mU2NhbiA9IGZhbHNlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NDQU5fU1RBVEVfRU5FUkdZOgorI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgICAgICBpZiAob3RMaW5rUmF3SXNFbmFibGVkKG1JbnN0YW5jZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3Qgc2NhbkNoYW5uZWw7CisKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgYWxyZWFkeSBzY2FubmluZyBhbmQgdGhhdCB3ZSBoYXZlCisgICAgICAgICAgICAvLyBvbmx5IDEgYml0IHNldCBmb3IgdGhlIGNoYW5uZWwgbWFzay4KKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChtQ3VyU2NhbkNoYW5uZWwgPT0gTkNQX0lOVkFMSURfU0NBTl9DSEFOTkVMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KEhhc09ubHkxQml0U2V0KG1DaGFubmVsTWFzayksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICAgICAgICAgc2NhbkNoYW5uZWwgPSBJbmRleE9mTVNCKG1DaGFubmVsTWFzayk7CisgICAgICAgICAgICBtQ3VyU2NhbkNoYW5uZWwgPSAoaW50OF90KXNjYW5DaGFubmVsOworCisgICAgICAgICAgICBlcnJvciA9IG90TGlua1Jhd0VuZXJneVNjYW4oCisgICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBzY2FuQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TY2FuUGVyaW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgTGlua1Jhd0VuZXJneVNjYW5Eb25lCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IG90TGlua0VuZXJneVNjYW4oCisgICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBtQ2hhbm5lbE1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICBtU2NhblBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0X0p1bXAsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yKTsKKyAgICAgICAgbVNob3VsZFNpZ25hbEVuZE9mU2NhbiA9IGZhbHNlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NDQU5fU1RBVEVfRElTQ09WRVI6CisgICAgICAgIGVycm9yID0gb3RUaHJlYWREaXNjb3ZlcigKKyAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICBtQ2hhbm5lbE1hc2ssCisgICAgICAgICAgICAgICAgICAgIG1EaXNjb3ZlcnlTY2FuUGFuSWQsCisgICAgICAgICAgICAgICAgICAgIG1EaXNjb3ZlcnlTY2FuSm9pbmVyRmxhZywKKyAgICAgICAgICAgICAgICAgICAgbURpc2NvdmVyeVNjYW5FbmFibGVGaWx0ZXJpbmcsCisgICAgICAgICAgICAgICAgICAgICZIYW5kbGVBY3RpdmVTY2FuUmVzdWx0X0p1bXAsCisgICAgICAgICAgICAgICAgICAgIHRoaXMKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworICAgICAgICBtU2hvdWxkU2lnbmFsRW5kT2ZTY2FuID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9NQUNfMTVfNF9QQU5JRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50MTZfdCBwYW5pZDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICAgICAgICAmcGFuaWQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdExpbmtTZXRQYW5JZChtSW5zdGFuY2UsIHBhbmlkKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9NQUNfMTVfNF9MQUREUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBvdEV4dEFkZHJlc3MgKmV4dEFkZHJlc3M7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZXh0QWRkcmVzcworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90TGlua1NldEV4dGVuZGVkQWRkcmVzcyhtSW5zdGFuY2UsIGV4dEFkZHJlc3MpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX01BQ19EQVRBX1BPTExfUEVSSU9EKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQzMl90IHBvbGxQZXJpb2Q7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnBvbGxQZXJpb2QKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb3RMaW5rU2V0UG9sbFBlcmlvZChtSW5zdGFuY2UsIHBvbGxQZXJpb2QpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIHZhbHVlID0gZmFsc2U7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZQorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworICAgIGlmIChvdExpbmtSYXdJc0VuYWJsZWQobUluc3RhbmNlKSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBvdExpbmtSYXdSZWNlaXZlKG1JbnN0YW5jZSwgbUN1clJlY2VpdmVDaGFubmVsLCAmTmNwQmFzZTo6TGlua1Jhd1JlY2VpdmVEb25lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gb3RMaW5rUmF3U2xlZXAobUluc3RhbmNlKTsKKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgbUlzUmF3U3RyZWFtRW5hYmxlZCA9IHZhbHVlOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDXzE1XzRfU0FERFIodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDE2X3Qgc2hvcnRBZGRyZXNzOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZzaG9ydEFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdExpbmtSYXdTZXRTaG9ydEFkZHJlc3MobUluc3RhbmNlLCBzaG9ydEFkZHJlc3MpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1NUUkVBTV9SQVcodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90ICpmcmFtZV9idWZmZXIgPSBOVUxMOworICAgIG90UmFkaW9GcmFtZSAqZnJhbWU7CisgICAgdW5zaWduZWQgaW50IGZyYW1lTGVuID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQob3RMaW5rUmF3SXNFbmFibGVkKG1JbnN0YW5jZSksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBmcmFtZSA9IG90TGlua1Jhd0dldFRyYW5zbWl0QnVmZmVyKG1JbnN0YW5jZSk7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfV0xFTl9TCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZV9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lLT5tQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lLT5tUG93ZXIKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAgJiYgZnJhbWVMZW4gPD0gT1RfUkFESU9fRlJBTUVfTUFYX1NJWkUsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gQ2FjaGUgdGhlIHRyYW5zYWN0aW9uIElEIGZvciBhc3luYyByZXNwb25zZQorICAgIG1DdXJUcmFuc21pdFRJRCA9IFNQSU5FTF9IRUFERVJfR0VUX1RJRChhSGVhZGVyKTsKKworICAgIC8vIFVwZGF0ZSBmcmFtZSBidWZmZXIgYW5kIGxlbmd0aAorICAgIGZyYW1lLT5tTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oZnJhbWVMZW4pOworICAgIG1lbWNweShmcmFtZS0+bVBzZHUsIGZyYW1lX2J1ZmZlciwgZnJhbWUtPm1MZW5ndGgpOworCisgICAgLy8gVE9ETzogVGhpcyBzaG91bGQgYmUgbGF0ZXIgYWRkZWQgaW4gdGhlIFNUUkVBTV9SQVcgYXJndW1lbnQgdG8gYWxsb3cgdXNlciB0byBkaXJlY3RseSBzcGVjaWZ5IGl0LgorICAgIGZyYW1lLT5tTWF4VHhBdHRlbXB0cyA9IE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19ESVJFQ1Q7CisKKyAgICAvLyBQYXNzIGZyYW1lIHRvIHRoZSByYWRpbyBsYXllci4gTm90ZSwgdGhpcyBmYWlscyBpZiB3ZQorICAgIC8vIGhhdmVuJ3QgZW5hYmxlZCByYXcgc3RyZWFtIG9yIGFyZSBhbHJlYWR5IHRyYW5zbWl0dGluZy4KKyAgICBlcnJvciA9IG90TGlua1Jhd1RyYW5zbWl0KG1JbnN0YW5jZSwgZnJhbWUsICZOY3BCYXNlOjpMaW5rUmF3VHJhbnNtaXREb25lKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaGVyZSB5ZXQuIFdlIHdpbGwgY29tcGxldGUgdGhlIHRyYW5zYWN0aW9uIHdoZW4gd2UgZ2V0IGEgdHJhbnNtaXQgZG9uZSBjYWxsYmFjaworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUtleSk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX0lGX1VQKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIGVuYWJsZWQgPSBmYWxzZTsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdElwNlNldEVuYWJsZWQobUluc3RhbmNlLCBlbmFibGVkKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9ORVRfU1RBQ0tfVVAodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGJvb2wgZW5hYmxlZCA9IGZhbHNlOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBJZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQuLi4KKyAgICBpZiAoKGVuYWJsZWQgIT0gZmFsc2UpICE9IChvdFRocmVhZEdldERldmljZVJvbGUobUluc3RhbmNlKSAhPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCkpCisgICAgeworICAgICAgICBpZiAoZW5hYmxlZCAhPSBmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBvdFRocmVhZFNldEVuYWJsZWQobUluc3RhbmNlLCB0cnVlKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgICAgICAgICAgbUxlZ2FjeU5vZGVEaWRKb2luID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICgobUxlZ2FjeUhhbmRsZXJzICE9IE5VTEwpICYmIChtTGVnYWN5SGFuZGxlcnMtPm1TdGFydExlZ2FjeSAhPSBOVUxMKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTGVnYWN5SGFuZGxlcnMtPm1TdGFydExlZ2FjeSgpOworICAgICAgICAgICAgfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBvdFRocmVhZFNldEVuYWJsZWQobUluc3RhbmNlLCBmYWxzZSk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kKKyAgICAgICAgICAgIG1MZWdhY3lOb2RlRGlkSm9pbiA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAoKG1MZWdhY3lIYW5kbGVycyAhPSBOVUxMKSAmJiAobUxlZ2FjeUhhbmRsZXJzLT5tU3RvcExlZ2FjeSAhPSBOVUxMKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTGVnYWN5SGFuZGxlcnMtPm1TdG9wTGVnYWN5KCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX1JPTEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdW5zaWduZWQgaW50IHJvbGUgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnJvbGUKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisKKyAgICBzd2l0Y2ggKHJvbGUpCisgICAgeworICAgIGNhc2UgU1BJTkVMX05FVF9ST0xFX0RFVEFDSEVEOgorICAgICAgICBlcnJvciA9IG90VGhyZWFkQmVjb21lRGV0YWNoZWQobUluc3RhbmNlKTsKKyAgICAgICAgYnJlYWs7CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIGNhc2UgU1BJTkVMX05FVF9ST0xFX1JPVVRFUjoKKyAgICAgICAgZXJyb3IgPSBvdFRocmVhZEJlY29tZVJvdXRlcihtSW5zdGFuY2UpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX05FVF9ST0xFX0xFQURFUjoKKyAgICAgICAgZXJyb3IgPSBvdFRocmVhZEJlY29tZUxlYWRlcihtSW5zdGFuY2UpOworICAgICAgICBicmVhazsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKworICAgIGNhc2UgU1BJTkVMX05FVF9ST0xFX0NISUxEOgorICAgICAgICBlcnJvciA9IG90VGhyZWFkQmVjb21lQ2hpbGQobUluc3RhbmNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX05FVF9ORVRXT1JLX05BTUUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBOVUxMOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVVRGOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmc3RyaW5nCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdCgocGFyc2VkTGVuZ3RoID4gMCkgJiYgKHN0cmluZyAhPSBOVUxMKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90VGhyZWFkU2V0TmV0d29ya05hbWUobUluc3RhbmNlLCBzdHJpbmcpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX05FVF9YUEFOSUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBjb25zdCB1aW50OF90ICpwdHIgPSBOVUxMOworICAgIHNwaW5lbF9zaXplX3QgbGVuOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgICAgICAgICAmcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAmbGVuCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdCgocGFyc2VkTGVuZ3RoID4gMCkgJiYgKGxlbiA9PSBzaXplb2Yoc3BpbmVsX25ldF94cGFuaWRfdCkpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGVycm9yID0gb3RUaHJlYWRTZXRFeHRlbmRlZFBhbklkKG1JbnN0YW5jZSwgcHRyKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9ORVRfTUFTVEVSX0tFWSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBjb25zdCB1aW50OF90ICpwdHIgPSBOVUxMOworICAgIHNwaW5lbF9zaXplX3QgbGVuOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgICAgICAgICAmcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAmbGVuCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdCgocGFyc2VkTGVuZ3RoID4gMCkgJiYgKGxlbiA9PSBPVF9NQVNURVJfS0VZX1NJWkUpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGVycm9yID0gb3RUaHJlYWRTZXRNYXN0ZXJLZXkobUluc3RhbmNlLCByZWludGVycHJldF9jYXN0PGNvbnN0IG90TWFzdGVyS2V5ICo+KHB0cikpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdW5zaWduZWQgaW50IGtleVNlcUNvdW50ZXI7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmtleVNlcUNvdW50ZXIKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb3RUaHJlYWRTZXRLZXlTZXF1ZW5jZUNvdW50ZXIobUluc3RhbmNlLCBrZXlTZXFDb3VudGVyKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9ORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVuc2lnbmVkIGludCBrZXlHdWFyZFRpbWU7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmtleUd1YXJkVGltZQorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdFRocmVhZFNldEtleVN3aXRjaEd1YXJkVGltZShtSW5zdGFuY2UsIGtleUd1YXJkVGltZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworI2lmIE9QRU5USFJFQURfRlRECitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IHdlaWdodDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZ3ZWlnaHQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb3RUaHJlYWRTZXRMb2NhbExlYWRlcldlaWdodChtSW5zdGFuY2UsIHdlaWdodCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfU1RSRUFNX05FVF9JTlNFQ1VSRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGNvbnN0IHVpbnQ4X3QgKmZyYW1lUHRyID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgZnJhbWVMZW4gPSAwOworICAgIGNvbnN0IHVpbnQ4X3QgKm1ldGFQdHIgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBtZXRhTGVuID0gMDsKKyAgICBvdE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgLy8gU1RSRUFNX05FVF9JTlNFQ1VSRSBwYWNrZXRzIGFyZSBub3Qgc2VjdXJlZCBhdCBsYXllciAyLgorICAgIG1lc3NhZ2UgPSBvdElwNk5ld01lc3NhZ2UobUluc3RhbmNlLCBmYWxzZSk7CisgICAgVmVyaWZ5T3JFeGl0KG1lc3NhZ2UgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9XTEVOX1MgICAvLyBGcmFtZSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TICAgICAgICAvLyBNZXRhIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICZtZXRhUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAmbWV0YUxlbgorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAvLyBXZSBpZ25vcmUgbWV0YWRhdGEgZm9yIG5vdy4KKyAgICAvLyBNYXkgbGF0ZXIgaW5jbHVkZSBUWCBwb3dlciwgYWxsb3cgcmV0cmFuc21pdHMsIGV0Yy4uLgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShtZXRhUHRyKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUobWV0YUxlbik7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKHBhcnNlZExlbmd0aCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RNZXNzYWdlQXBwZW5kKG1lc3NhZ2UsIGZyYW1lUHRyLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oZnJhbWVMZW4pKSk7CisKKyAgICAvLyBFbnN1cmUgdGhlIGluc2VjdXJlIG1lc3NhZ2UgaXMgZm9yd2FyZGVkIHVzaW5nIGRpcmVjdCB0cmFuc21pc3Npb24uCisgICAgb3RNZXNzYWdlU2V0RGlyZWN0VHJhbnNtaXNzaW9uKG1lc3NhZ2UsIHRydWUpOworCisgICAgZXJyb3IgPSBvdElwNlNlbmQobUluc3RhbmNlLCBtZXNzYWdlKTsKKworICAgIC8vIGBvdElwNlNlbmQoKWAgdGFrZXMgb3duZXJzaGlwIG9mIGBtZXNzYWdlYCAoaW4gYm90aCBzdWNjZXNzIG9yCisgICAgLy8gZmFpbHVyZSBjYXNlcykuIGBtZXNzYWdlYCBpcyBzZXQgdG8gTlVMTCBzbyBpdCBpcyBub3QgZnJlZWQgYXQKKyAgICAvLyBleGl0LgorICAgIG1lc3NhZ2UgPSBOVUxMOworCitleGl0OgorICAgIGlmIChtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VGcmVlKG1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgbUluYm91bmRJbnNlY3VyZUlwRnJhbWVDb3VudGVyKys7CisKKyAgICAgICAgaWYgKFNQSU5FTF9IRUFERVJfR0VUX1RJRChhSGVhZGVyKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBPbmx5IHNlbmQgYSBzdWNjZXNzZnVsIHN0YXR1cyB1cGRhdGUgaWYKKyAgICAgICAgICAgIC8vIHRoZXJlIHdhcyBhIHRyYW5zYWN0aW9uIGlkIGluIHRoZSBhSGVhZGVyLgorICAgICAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX09LKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRHJvcHBlZEluYm91bmRJcEZyYW1lQ291bnRlcisrOworCisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhS2V5KTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1RNRl9QUk9YWV9TVFJFQU0odWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBjb25zdCB1aW50OF90ICpmcmFtZVB0ciA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IGZyYW1lTGVuID0gMDsKKyAgICB1aW50MTZfdCBsb2NhdG9yOworICAgIHVpbnQxNl90IHBvcnQ7CisgICAgb3RNZXNzYWdlICptZXNzYWdlOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIC8vIFRIUkVBRF9UTUZfUFJPWFlfU1RSRUFNIHJlcXVpcmVzIGxheWVyIDIgc2VjdXJpdHkuCisgICAgbWVzc2FnZSA9IG90SXA2TmV3TWVzc2FnZShtSW5zdGFuY2UsIHRydWUpOworICAgIFZlcmlmeU9yRXhpdChtZXNzYWdlICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfV0xFTl9TICAvLyBGcmFtZSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAgIC8vIExvY2F0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAgLy8gUG9ydAorICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgJmxvY2F0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICZwb3J0CisgICAgICAgICAgICAgICAgICAgKTsKKworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90TWVzc2FnZUFwcGVuZChtZXNzYWdlLCBmcmFtZVB0ciwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGZyYW1lTGVuKSkpOworCisgICAgZXJyb3IgPSBvdFRtZlByb3h5U2VuZChtSW5zdGFuY2UsIG1lc3NhZ2UsIGxvY2F0b3IsIHBvcnQpOworCisgICAgLy8gYG90VG1mUHJveHlTZW5kKClgIHRha2VzIG93bmVyc2hpcCBvZiBgbWVzc2FnZWAgKGluIGJvdGggc3VjY2VzcworICAgIC8vIG9yIGZhaWx1cmUgY2FzZXMpLiBgbWVzc2FnZWAgaXMgc2V0IHRvIE5VTEwgc28gaXQgaXMgbm90IGZyZWVkIGF0CisgICAgLy8gZXhpdC4KKyAgICBtZXNzYWdlID0gTlVMTDsKKworZXhpdDoKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgb3RNZXNzYWdlRnJlZShtZXNzYWdlKTsKKyAgICB9CisKKyAgICBpZiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGlmIChTUElORUxfSEVBREVSX0dFVF9USUQoYUhlYWRlcikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gT25seSBzZW5kIGEgc3VjY2Vzc2Z1bCBzdGF0dXMgdXBkYXRlIGlmCisgICAgICAgICAgICAvLyB0aGVyZSB3YXMgYSB0cmFuc2FjdGlvbiBpZCBpbiB0aGUgYUhlYWRlci4KKyAgICAgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19PSyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisgICAgfQorCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFLZXkpOworCisgICAgcmV0dXJuIGVycm9yOworfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9TVFJFQU1fTkVUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgY29uc3QgdWludDhfdCAqZnJhbWVQdHIgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBmcmFtZUxlbiA9IDA7CisgICAgY29uc3QgdWludDhfdCAqbWV0YVB0ciA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IG1ldGFMZW4gPSAwOworICAgIG90TWVzc2FnZSAqbWVzc2FnZTsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBTVFJFQU1fTkVUIHJlcXVpcmVzIGxheWVyIDIgc2VjdXJpdHkuCisgICAgbWVzc2FnZSA9IG90SXA2TmV3TWVzc2FnZShtSW5zdGFuY2UsIHRydWUpOworICAgIFZlcmlmeU9yRXhpdChtZXNzYWdlICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfV0xFTl9TICAvLyBGcmFtZSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TICAgICAgIC8vIE1ldGEgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgJm1ldGFQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZtZXRhTGVuCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIC8vIFdlIGlnbm9yZSBtZXRhZGF0YSBmb3Igbm93LgorICAgIC8vIE1heSBsYXRlciBpbmNsdWRlIFRYIHBvd2VyLCBhbGxvdyByZXRyYW5zbWl0cywgZXRjLi4uCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKG1ldGFQdHIpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShtZXRhTGVuKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUocGFyc2VkTGVuZ3RoKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdE1lc3NhZ2VBcHBlbmQobWVzc2FnZSwgZnJhbWVQdHIsIHN0YXRpY19jYXN0PHVpbnQxNl90PihmcmFtZUxlbikpKTsKKworICAgIGVycm9yID0gb3RJcDZTZW5kKG1JbnN0YW5jZSwgbWVzc2FnZSk7CisKKyAgICAvLyBgb3RJcDZTZW5kKClgIHRha2VzIG93bmVyc2hpcCBvZiBgbWVzc2FnZWAgKGluIGJvdGggc3VjY2VzcyBvcgorICAgIC8vIGZhaWx1cmUgY2FzZXMpLiBgbWVzc2FnZWAgaXMgc2V0IHRvIE5VTEwgc28gaXQgaXMgbm90IGZyZWVkIGF0CisgICAgLy8gZXhpdC4KKyAgICBtZXNzYWdlID0gTlVMTDsKKworZXhpdDoKKworICAgIGlmIChtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VGcmVlKG1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgbUluYm91bmRTZWN1cmVJcEZyYW1lQ291bnRlcisrOworCisgICAgICAgIGlmIChTUElORUxfSEVBREVSX0dFVF9USUQoYUhlYWRlcikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gT25seSBzZW5kIGEgc3VjY2Vzc2Z1bCBzdGF0dXMgdXBkYXRlIGlmCisgICAgICAgICAgICAvLyB0aGVyZSB3YXMgYSB0cmFuc2FjdGlvbiBpZCBpbiB0aGUgYUhlYWRlci4KKyAgICAgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19PSyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbURyb3BwZWRJbmJvdW5kSXBGcmFtZUNvdW50ZXIrKzsKKworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUtleSk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX0lQVjZfTUxfUFJFRklYKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFWYWx1ZUxlbiA+PSA4LCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGVycm9yID0gb3RUaHJlYWRTZXRNZXNoTG9jYWxQcmVmaXgobUluc3RhbmNlLCBhVmFsdWVQdHIpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX0lQVjZfSUNNUF9QSU5HX09GRkxPQUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIGVuYWJsZWQgPSBmYWxzZTsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb3RJY21wNlNldEVjaG9FbmFibGVkKG1JbnN0YW5jZSwgZW5hYmxlZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1JMT0MxNl9ERUJVR19QQVNTVEhSVSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGJvb2wgZW5hYmxlZCA9IGZhbHNlOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBOb3RlIHJldmVyc2UgbG9naWM6IHBhc3N0aHJ1IGVuYWJsZWQgPSBmaWx0ZXIgZGlzYWJsZWQKKyAgICBvdElwNlNldFJlY2VpdmVGaWx0ZXJFbmFibGVkKG1JbnN0YW5jZSwgIWVuYWJsZWQpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9KT0lORVJfRkxBRyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCBqb2luZXJGbGFnID0gZmFsc2U7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZqb2luZXJGbGFnCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG1EaXNjb3ZlcnlTY2FuSm9pbmVyRmxhZyA9IGpvaW5lckZsYWc7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0VOQUJMRV9GSUxURVJJTkcodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGJvb2wgZW5hYmxlZCA9IGZhbHNlOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBtRGlzY292ZXJ5U2NhbkVuYWJsZUZpbHRlcmluZyA9IGVuYWJsZWQ7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX1BBTklEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50MTZfdCBwYW5pZDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICAgICAgICAmcGFuaWQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgbURpc2NvdmVyeVNjYW5QYW5JZCA9IHBhbmlkOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IG51bUVudHJpZXMgPSAwOworICAgIGNvbnN0IHVpbnQxNl90ICpwb3J0cyA9IG90SXA2R2V0VW5zZWN1cmVQb3J0cyhtSW5zdGFuY2UsICZudW1FbnRyaWVzKTsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgYm9vbCBwb3J0c0NoYW5nZWQgPSBmYWxzZTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIC8vIEZpcnN0LCB3ZSBuZWVkIHRvIHJlbW92ZSBhbGwgb2YgdGhlIGN1cnJlbnQgYXNzaXN0aW5nIHBvcnRzLgorICAgIGZvciAoOyBudW1FbnRyaWVzICE9IDA7IHBvcnRzKyssIG51bUVudHJpZXMtLSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNlJlbW92ZVVuc2VjdXJlUG9ydChtSW5zdGFuY2UsICpwb3J0cykpOworICAgICAgICBwb3J0c0NoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIHdoaWxlIChhVmFsdWVMZW4gPj0gMikKKyAgICB7CisgICAgICAgIHVpbnQxNl90IHBvcnQ7CisKKyAgICAgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNkFkZFVuc2VjdXJlUG9ydChtSW5zdGFuY2UsIHBvcnQpKTsKKworICAgICAgICBhVmFsdWVQdHIgKz0gcGFyc2VkTGVuZ3RoOworICAgICAgICBhVmFsdWVMZW4gLT0gcGFyc2VkTGVuZ3RoOworCisgICAgICAgIHBvcnRzQ2hhbmdlZCA9IHRydWU7CisgICAgfQorCisgICAgLy8gTm8gZXJyb3IgaGFwcGVuZWQgc28gdGhlIG5ldyBzdGF0ZSBvZiBwb3J0cyB3aWxsCisgICAgLy8gYmUgcmVwb3J0ZWQgaW4gdGhlIHJlc3BvbnNlLgorICAgIHBvcnRzQ2hhbmdlZCA9IGZhbHNlOworCitleGl0OgorICAgIGVycm9yID0gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworCisgICAgaWYgKHBvcnRzQ2hhbmdlZCkKKyAgICB7CisgICAgICAgIC8vIFdlIGhhZCBhbiBlcnJvciwgYnV0IHdlJ3ZlIGFjdHVhbGx5IGNoYW5nZWQKKyAgICAgICAgLy8gdGhlIHN0YXRlIG9mIHRoZXNlIHBvcnRzLS0tc28gd2UgbmVlZCB0byByZXBvcnQKKyAgICAgICAgLy8gdGhvc2UgaW5jb21wbGV0ZSBjaGFuZ2VzIHZpYSBhbiBhc3luY2hyb25vdXMKKyAgICAgICAgLy8gY2hhbmdlIGV2ZW50LgorICAgICAgICBIYW5kbGVDb21tYW5kUHJvcGVydHlHZXQoU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwgYUtleSk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0FMTE9XX0xPQ0FMX05FVF9EQVRBX0NIQU5HRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGJvb2wgdmFsdWUgPSBmYWxzZTsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgYm9vbCBzaG91bGRSZWdpc3RlcldpdGhMZWFkZXIgPSBmYWxzZTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWUKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gUmVnaXN0ZXIgYW55IG5ldCBkYXRhIGNoYW5nZXMgb24gdHJhbnNpdGlvbiBmcm9tIGB0cnVlYCB0byBgZmFsc2VgLgorICAgIHNob3VsZFJlZ2lzdGVyV2l0aExlYWRlciA9IChtQWxsb3dMb2NhbE5ldHdvcmtEYXRhQ2hhbmdlID09IHRydWUpICYmICh2YWx1ZSA9PSBmYWxzZSk7CisKKyAgICBtQWxsb3dMb2NhbE5ldHdvcmtEYXRhQ2hhbmdlID0gdmFsdWU7CisKK2V4aXQ6CisgICAgZXJyb3IgPSBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7CisKKyAgICBpZiAoc2hvdWxkUmVnaXN0ZXJXaXRoTGVhZGVyKQorICAgIHsKKyAgICAgICAgb3RCb3JkZXJSb3V0ZXJSZWdpc3RlcihtSW5zdGFuY2UpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisKKyNpZiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCBlbmFibGVkOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdFRocmVhZFNldFJvdXRlclJvbGVFbmFibGVkKG1JbnN0YW5jZSwgZW5hYmxlZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TVEVFUklOR19EQVRBX1NFVF9PT0IKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9TVEVFUklOR19EQVRBKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBvdEV4dEFkZHJlc3MgKmV4dEFkZHJlc3M7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZXh0QWRkcmVzcworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90VGhyZWFkU2V0U3RlZXJpbmdEYXRhKG1JbnN0YW5jZSwgZXh0QWRkcmVzcyk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBnZXQgaGFuZGxlciBmb3IgdGhpcyBwcm9wZXJ0eS4KKyAgICAgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TLAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0QWRkcmVzcy0+bTgKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCisjZW5kaWYgLy8gI2lmIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX0NOVFJfUkVTRVQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IHZhbHVlID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZQorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBWZXJpZnlPckV4aXQodmFsdWUgPT0gMSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgLy8gVE9ETzogSW1wbGVtZW50IGNvdW50ZXIgcmVzZXQhCisgICAgZXJyb3IgPSBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFLZXkpOworCisgICAgLy8gVGhlcmUgaXMgY3VycmVudGx5IG5vIGdldHRlciBmb3IgUFJPUF9DTlRSX1JFU0VULCBzbyB3ZSBqdXN0CisgICAgLy8gcmV0dXJuIFNQSU5FTF9TVEFUVVNfT0sgZm9yIHN1Y2Nlc3Mgd2hlbiB0aGUgY291bnRlcnMgYXJlIHJlc2V0LgorCisgICAgcmV0dXJuIFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCBlbmFibGVkID0gZmFsc2U7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZlbmFibGVkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChlbmFibGVkID09IGZhbHNlKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdENvbW1pc3Npb25lclN0b3AobUluc3RhbmNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdENvbW1pc3Npb25lclN0YXJ0KG1JbnN0YW5jZSk7CisgICAgfQorCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhS2V5KTsKKworICAgIHJldHVybiBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1dISVRFTElTVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGJvb2wgcmVwb3J0QXN5bmM7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgLy8gRmlyc3QsIGNsZWFyIHRoZSB3aGl0ZWxpc3QuCisgICAgb3RMaW5rQ2xlYXJXaGl0ZWxpc3QobUluc3RhbmNlKTsKKworICAgIHdoaWxlIChhVmFsdWVMZW4gPiAwKQorICAgIHsKKyAgICAgICAgb3RFeHRBZGRyZXNzICpleHRBZGRyZXNzID0gTlVMTDsKKyAgICAgICAgaW50OF90IHJzc2kgPSBSU1NJX09WRVJSSURFX0RJU0FCTEVEOworCisgICAgICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfU1RSVUNUX1MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TCisgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmcnNzaQorICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgIGlmIChwYXJzZWRMZW5ndGggPD0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcnNzaSA9IFJTU0lfT1ZFUlJJREVfRElTQUJMRUQ7CisgICAgICAgICAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dEFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgaWYgKHJzc2kgPT0gUlNTSV9PVkVSUklERV9ESVNBQkxFRCkKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90TGlua0FkZFdoaXRlbGlzdChtSW5zdGFuY2UsIGV4dEFkZHJlc3MtPm04KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RMaW5rQWRkV2hpdGVsaXN0UnNzaShtSW5zdGFuY2UsIGV4dEFkZHJlc3MtPm04LCByc3NpKSk7CisgICAgICAgIH0KKworICAgICAgICBhVmFsdWVQdHIgKz0gcGFyc2VkTGVuZ3RoOworICAgICAgICBhVmFsdWVMZW4gLT0gcGFyc2VkTGVuZ3RoOworICAgIH0KKworZXhpdDoKKyAgICAvLyBJZiB3ZSBoYWQgYW4gZXJyb3IsIHdlIG1heSBoYXZlIGFjdHVhbGx5IGNoYW5nZWQKKyAgICAvLyB0aGUgc3RhdGUgb2YgdGhlIHdoaXRlbGlzdC0tLXNvIHdlIG5lZWQgdG8gcmVwb3J0CisgICAgLy8gdGhvc2UgaW5jb21wbGV0ZSBjaGFuZ2VzIHZpYSBhbiBhc3luY2hyb25vdXMKKyAgICAvLyBjaGFuZ2UgZXZlbnQuCisgICAgcmVwb3J0QXN5bmMgPSAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSk7CisKKyAgICBlcnJvciA9IFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKKworICAgIGlmIChyZXBvcnRBc3luYykKKyAgICB7CisgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldChTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLCBhS2V5KTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX01BQ19XSElURUxJU1RfRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCBlbmFibGVkOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdExpbmtTZXRXaGl0ZWxpc3RFbmFibGVkKG1JbnN0YW5jZSwgZW5hYmxlZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX0JMQUNLTElTVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGJvb2wgcmVwb3J0QXN5bmM7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgLy8gRmlyc3QsIGNsZWFyIHRoZSBibGFja2xpc3QuCisgICAgb3RMaW5rQ2xlYXJCbGFja2xpc3QobUluc3RhbmNlKTsKKworICAgIHdoaWxlIChhVmFsdWVMZW4gPiAwKQorICAgIHsKKyAgICAgICAgb3RFeHRBZGRyZXNzICpleHRfYWRkciA9IE5VTEw7CisKKyAgICAgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUworICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHRfYWRkcgorICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RMaW5rQWRkQmxhY2tsaXN0KG1JbnN0YW5jZSwgZXh0X2FkZHItPm04KSk7CisKKyAgICAgICAgYVZhbHVlUHRyICs9IHBhcnNlZExlbmd0aDsKKyAgICAgICAgYVZhbHVlTGVuIC09IHBhcnNlZExlbmd0aDsKKyAgICB9CisKK2V4aXQ6CisgICAgLy8gSWYgd2UgaGFkIGFuIGVycm9yLCB3ZSBtYXkgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkCisgICAgLy8gdGhlIHN0YXRlIG9mIHRoZSBibGFja2xpc3QtLS1zbyB3ZSBuZWVkIHRvIHJlcG9ydAorICAgIC8vIHRob3NlIGluY29tcGxldGUgY2hhbmdlcyB2aWEgYW4gYXN5bmNocm9ub3VzCisgICAgLy8gY2hhbmdlIGV2ZW50LgorICAgIHJlcG9ydEFzeW5jID0gKGVycm9yICE9IE9UX0VSUk9SX05PTkUpOworCisgICAgZXJyb3IgPSBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7CisKKyAgICBpZiAocmVwb3J0QXN5bmMpCisgICAgeworICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldChTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLCBhS2V5KTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX01BQ19CTEFDS0xJU1RfRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCBlbmFibGVkOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdExpbmtTZXRCbGFja2xpc3RFbmFibGVkKG1JbnN0YW5jZSwgZW5hYmxlZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9NQUNfU1JDX01BVENIX0VOQUJMRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGJvb2wgZW5hYmxlZDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdExpbmtSYXdTcmNNYXRjaEVuYWJsZShtSW5zdGFuY2UsIGVuYWJsZWQpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgY29uc3QgdWludDhfdCAqZGF0YSA9IGFWYWx1ZVB0cjsKKyAgICB1aW50MTZfdCBkYXRhTGVuID0gYVZhbHVlTGVuOworCisgICAgLy8gQ2xlYXIgdGhlIGxpc3QgZmlyc3QKKyAgICBlcnJvciA9IG90TGlua1Jhd1NyY01hdGNoQ2xlYXJTaG9ydEVudHJpZXMobUluc3RhbmNlKTsKKworICAgIFZlcmlmeU9yRXhpdChlcnJvciA9PSBPVF9FUlJPUl9OT05FLCBzcGluZWxFcnJvciA9IFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKworICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgYWRkcmVzc2VzIGFuZCBhZGQgdGhlbQorICAgIHdoaWxlIChkYXRhTGVuID49IHNpemVvZih1aW50MTZfdCkpCisgICAgeworICAgICAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgICAgIHVpbnQxNl90IHNob3J0X2FkZHJlc3M7CisKKyAgICAgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNob3J0X2FkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgICAgICBkYXRhICs9IHBhcnNlZExlbmd0aDsKKyAgICAgICAgZGF0YUxlbiAtPSAodWludDE2X3QpcGFyc2VkTGVuZ3RoOworCisgICAgICAgIGVycm9yID0gb3RMaW5rUmF3U3JjTWF0Y2hBZGRTaG9ydEVudHJ5KG1JbnN0YW5jZSwgc2hvcnRfYWRkcmVzcyk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworICAgIH0KKworICAgIGVycm9yID0KKyAgICAgICAgU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgKTsKKworZXhpdDoKKworICAgIGlmIChzcGluZWxFcnJvciAhPSBTUElORUxfU1RBVFVTX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBzcGluZWxFcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9NQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEgPSBhVmFsdWVQdHI7CisgICAgdWludDE2X3QgZGF0YUxlbiA9IGFWYWx1ZUxlbjsKKworICAgIC8vIENsZWFyIHRoZSBsaXN0IGZpcnN0CisgICAgZXJyb3IgPSBvdExpbmtSYXdTcmNNYXRjaENsZWFyRXh0RW50cmllcyhtSW5zdGFuY2UpOworCisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBhZGRyZXNzZXMgYW5kIGFkZCB0aGVtCisgICAgd2hpbGUgKGRhdGFMZW4gPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykpCisgICAgeworICAgICAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgICAgIHVpbnQ4X3QgKmV4dEFkZHJlc3M7CisKKyAgICAgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0QWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgICAgIGRhdGEgKz0gcGFyc2VkTGVuZ3RoOworICAgICAgICBkYXRhTGVuIC09ICh1aW50MTZfdClwYXJzZWRMZW5ndGg7CisKKyAgICAgICAgZXJyb3IgPSBvdExpbmtSYXdTcmNNYXRjaEFkZEV4dEVudHJ5KG1JbnN0YW5jZSwgZXh0QWRkcmVzcyk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworICAgIH0KKworICAgIGVycm9yID0KKyAgICAgICAgU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgKTsKKworZXhpdDoKKworICAgIGlmIChzcGluZWxFcnJvciAhPSBTUElORUxfU1RBVFVTX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBzcGluZWxFcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX05FVF9QU0tDKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGNvbnN0IHVpbnQ4X3QgKnB0ciA9IE5VTEw7CisgICAgc3BpbmVsX3NpemVfdCBsZW47CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZsZW4KKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KChwYXJzZWRMZW5ndGggPiAwKSAmJiAobGVuID09IHNpemVvZihzcGluZWxfbmV0X3Bza2NfdCkpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGVycm9yID0gb3RUaHJlYWRTZXRQU0tjKG1JbnN0YW5jZSwgcHRyKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX01PREUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDhfdCBudW1lcmljTW9kZSA9IDA7CisgICAgb3RMaW5rTW9kZUNvbmZpZyBtb2RlQ29uZmlnOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJm51bWVyaWNNb2RlCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG1vZGVDb25maWcubVJ4T25XaGVuSWRsZSA9ICgobnVtZXJpY01vZGUgJiBTUElORUxfVEhSRUFEX01PREVfUlhfT05fV0hFTl9JRExFKSA9PSBTUElORUxfVEhSRUFEX01PREVfUlhfT05fV0hFTl9JRExFKTsKKyAgICBtb2RlQ29uZmlnLm1TZWN1cmVEYXRhUmVxdWVzdHMgPQorICAgICAgICAoKG51bWVyaWNNb2RlICYgU1BJTkVMX1RIUkVBRF9NT0RFX1NFQ1VSRV9EQVRBX1JFUVVFU1QpID09IFNQSU5FTF9USFJFQURfTU9ERV9TRUNVUkVfREFUQV9SRVFVRVNUKTsKKyAgICBtb2RlQ29uZmlnLm1EZXZpY2VUeXBlID0gKChudW1lcmljTW9kZSAmIFNQSU5FTF9USFJFQURfTU9ERV9GVUxMX0ZVTkNUSU9OX0RFVikgPT0gU1BJTkVMX1RIUkVBRF9NT0RFX0ZVTExfRlVOQ1RJT05fREVWKTsKKyAgICBtb2RlQ29uZmlnLm1OZXR3b3JrRGF0YSA9ICgobnVtZXJpY01vZGUgJiBTUElORUxfVEhSRUFEX01PREVfRlVMTF9ORVRXT1JLX0RBVEEpID09IFNQSU5FTF9USFJFQURfTU9ERV9GVUxMX05FVFdPUktfREFUQSk7CisKKyAgICBlcnJvciA9IG90VGhyZWFkU2V0TGlua01vZGUobUluc3RhbmNlLCBtb2RlQ29uZmlnKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0NISUxEX0NPVU5UX01BWCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQ4X3QgbWF4Q2hpbGRyZW4gPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJm1heENoaWxkcmVuCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGVycm9yID0gb3RUaHJlYWRTZXRNYXhBbGxvd2VkQ2hpbGRyZW4obUluc3RhbmNlLCBtYXhDaGlsZHJlbik7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0NISUxEX1RJTUVPVVQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDMyX3QgdGltZW91dCA9IDA7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnRpbWVvdXQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb3RUaHJlYWRTZXRDaGlsZFRpbWVvdXQobUluc3RhbmNlLCB0aW1lb3V0KTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDhfdCB0aHJlc2hvbGQgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnRocmVzaG9sZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdFRocmVhZFNldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQobUluc3RhbmNlLCB0aHJlc2hvbGQpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDhfdCB0aHJlc2hvbGQgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnRocmVzaG9sZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdFRocmVhZFNldFJvdXRlckRvd25ncmFkZVRocmVzaG9sZChtSW5zdGFuY2UsIHRocmVzaG9sZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IGppdHRlciA9IDA7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmaml0dGVyCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90VGhyZWFkU2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKG1JbnN0YW5jZSwgaml0dGVyKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfUFJFRkVSUkVEX1JPVVRFUl9JRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IHJvdXRlcklkID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZyb3V0ZXJJZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90VGhyZWFkU2V0UHJlZmVycmVkUm91dGVySWQobUluc3RhbmNlLCByb3V0ZXJJZCk7CisKK2V4aXQ6CisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJJZAorICAgICAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfREVCVUdfTkNQX0xPR19MRVZFTCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQ4X3Qgc3BpbmVsTmNwTG9nTGV2ZWwgPSAwOworICAgIG90TG9nTGV2ZWwgbG9nTGV2ZWw7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmc3BpbmVsTmNwTG9nTGV2ZWwKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgc3dpdGNoIChzcGluZWxOY3BMb2dMZXZlbCkKKyAgICB7CisgICAgY2FzZSBTUElORUxfTkNQX0xPR19MRVZFTF9FTUVSRzoKKyAgICBjYXNlIFNQSU5FTF9OQ1BfTE9HX0xFVkVMX0FMRVJUOgorICAgICAgICBsb2dMZXZlbCA9IE9UX0xPR19MRVZFTF9OT05FOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX05DUF9MT0dfTEVWRUxfQ1JJVDoKKyAgICAgICAgbG9nTGV2ZWwgPSBPVF9MT0dfTEVWRUxfQ1JJVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9OQ1BfTE9HX0xFVkVMX0VSUjoKKyAgICBjYXNlIFNQSU5FTF9OQ1BfTE9HX0xFVkVMX1dBUk46CisgICAgICAgIGxvZ0xldmVsID0gT1RfTE9HX0xFVkVMX1dBUk47CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfTkNQX0xPR19MRVZFTF9OT1RJQ0U6CisgICAgY2FzZSBTUElORUxfTkNQX0xPR19MRVZFTF9JTkZPOgorICAgICAgICBsb2dMZXZlbCA9IE9UX0xPR19MRVZFTF9JTkZPOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX05DUF9MT0dfTEVWRUxfREVCVUc6CisgICAgICAgIGxvZ0xldmVsID0gT1RfTE9HX0xFVkVMX0RFQkc7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGVycm9yID0gb3RTZXREeW5hbWljTG9nTGV2ZWwobUluc3RhbmNlLCBsb2dMZXZlbCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworI2lmIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9DT05URVhUX1JFVVNFX0RFTEFZKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQzMl90IGRlbGF5ID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZGVsYXkKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb3RUaHJlYWRTZXRDb250ZXh0SWRSZXVzZURlbGF5KG1JbnN0YW5jZSwgZGVsYXkpOworCisgZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfTkVUV09SS19JRF9USU1FT1VUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDhfdCB0aW1lb3V0ID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZ0aW1lb3V0CisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90VGhyZWFkU2V0TmV0d29ya0lkVGltZW91dChtSW5zdGFuY2UsIHRpbWVvdXQpOworCisgZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIGVuYWJsZWQ7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZlbmFibGVkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChlbmFibGVkKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFRtZlByb3h5U3RhcnQobUluc3RhbmNlLCAmTmNwQmFzZTo6SGFuZGxlVG1mUHJveHlTdHJlYW0sIHRoaXMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IG90VG1mUHJveHlTdG9wKG1JbnN0YW5jZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfSkFNX0RFVEVDVF9FTkFCTEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCBlbmFibGVkOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG90SmFtRGV0ZWN0aW9uU3RhcnQobUluc3RhbmNlLCAmTmNwQmFzZTo6SGFuZGxlSmFtU3RhdGVDaGFuZ2VfSnVtcCwgdGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG90SmFtRGV0ZWN0aW9uU3RvcChtSW5zdGFuY2UpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgaW50OF90IHRocmVzaG9sZCA9IDA7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZ0aHJlc2hvbGQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdEphbURldGVjdGlvblNldFJzc2lUaHJlc2hvbGQobUluc3RhbmNlLCB0aHJlc2hvbGQpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX0pBTV9ERVRFQ1RfV0lORE9XKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQ4X3Qgd2luZG93ID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZ3aW5kb3cKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdEphbURldGVjdGlvblNldFdpbmRvdyhtSW5zdGFuY2UsIHdpbmRvdyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfSkFNX0RFVEVDVF9CVVNZKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IGJ1c3kgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmJ1c3kKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdEphbURldGVjdGlvblNldEJ1c3lQZXJpb2QobUluc3RhbmNlLCBidXN5KTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCit2b2lkIE5jcEJhc2U6OkhhbmRsZUphbVN0YXRlQ2hhbmdlX0p1bXAoYm9vbCBhSmFtU3RhdGUsIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PE5jcEJhc2UgKj4oYUNvbnRleHQpLT5IYW5kbGVKYW1TdGF0ZUNoYW5nZShhSmFtU3RhdGUpOworfQorCit2b2lkIE5jcEJhc2U6OkhhbmRsZUphbVN0YXRlQ2hhbmdlKGJvb2wgYUphbVN0YXRlKQoreworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9KQU1fREVURUNURUQsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgIGFKYW1TdGF0ZQorICAgICAgICAgICAgICAgICk7CisKKyAgICAvLyBJZiB3ZSBjb3VsZCBub3Qgc2VuZCB0aGUgamFtIHN0YXRlIGNoYW5nZSBpbmRpY2F0b3IgKG5vCisgICAgLy8gYnVmZmVyIHNwYWNlKSwgd2Ugc2V0IGBtU2hvdWxkU2lnbmFsSmFtU3RhdGVDaGFuZ2VgIHRvIHRydWUgdG8gc2VuZAorICAgIC8vIGl0IG91dCB3aGVuIGJ1ZmZlciBzcGFjZSBiZWNvbWVzIGF2YWlsYWJsZS4KKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG1TaG91bGRTaWduYWxKYW1TdGF0ZUNoYW5nZSA9IHRydWU7CisgICAgfQorfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9ORVNUX1NUUkVBTV9NRkcodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGNoYXIgKnN0cmluZyA9IE5VTEw7CisgICAgY2hhciAqb3V0cHV0ID0gTlVMTDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VURjhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnN0cmluZworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBpZiAoKHBhcnNlZExlbmd0aCA+IDApICYmIChzdHJpbmcgIT0gTlVMTCkpCisgICAgeworICAgICAgICAvLyBhbGwgZGlhZ25vc3RpY3MgcmVsYXRlZCBmZWF0dXJlcyBhcmUgcHJvY2Vzc2VkIHdpdGhpbiBkaWFnbm9zdGljcyBtb2R1bGUKKyAgICAgICAgb3V0cHV0ID0gb3REaWFnUHJvY2Vzc0NtZExpbmUoc3RyaW5nKTsKKworICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KG91dHB1dCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4oc3RybGVuKG91dHB1dCkgKyAxKQorICAgICAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9ORVNUX0xFR0FDWV9VTEFfUFJFRklYKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgY29uc3QgdWludDhfdCAqcHRyID0gTlVMTDsKKyAgICBzcGluZWxfc2l6ZV90IGxlbjsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJmxlbgorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQoKHBhcnNlZExlbmd0aCA+IDApICYmIChsZW4gPD0gc2l6ZW9mKG1MZWdhY3lVbGFQcmVmaXgpKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBtZW1zZXQobUxlZ2FjeVVsYVByZWZpeCwgMCwgc2l6ZW9mKG1MZWdhY3lVbGFQcmVmaXgpKTsKKyAgICBtZW1jcHkobUxlZ2FjeVVsYVByZWZpeCwgcHRyLCBsZW4pOworCisgICAgaWYgKChtTGVnYWN5SGFuZGxlcnMgIT0gTlVMTCkgJiYgKG1MZWdhY3lIYW5kbGVycy0+bVNldExlZ2FjeVVsYVByZWZpeCAhPSBOVUxMKSkKKyAgICB7CisgICAgICAgIG1MZWdhY3lIYW5kbGVycy0+bVNldExlZ2FjeVVsYVByZWZpeChtTGVnYWN5VWxhUHJlZml4KTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogSW5kaXZpZHVhbCBQcm9wZXJ0eSBJbnNlcnRlcnMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCitvdEVycm9yIE5jcEJhc2U6Okluc2VydFByb3BlcnR5SGFuZGxlcl9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICB1aW50MTZfdCBzaG9ydF9hZGRyZXNzOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnNob3J0X2FkZHJlc3MKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBlcnJvciA9IG90TGlua1Jhd1NyY01hdGNoQWRkU2hvcnRFbnRyeShtSW5zdGFuY2UsIHNob3J0X2FkZHJlc3MpOworCisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsCisgICAgICAgICAgICAgICAgIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6SW5zZXJ0UHJvcGVydHlIYW5kbGVyX01BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIHVpbnQ4X3QgKmV4dEFkZHJlc3MgPSBOVUxMOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZXh0QWRkcmVzcworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgIGVycm9yID0gb3RMaW5rUmF3U3JjTWF0Y2hBZGRFeHRFbnRyeShtSW5zdGFuY2UsIGV4dEFkZHJlc3MpOworCisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsCisgICAgICAgICAgICAgICAgIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNlbmRpZgorCitvdEVycm9yIE5jcEJhc2U6Okluc2VydFByb3BlcnR5SGFuZGxlcl9JUFY2X0FERFJFU1NfVEFCTEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIG90TmV0aWZBZGRyZXNzIG5ldGlmQWRkcjsKKyAgICBvdElwNkFkZHJlc3MgKmFkZHJQdHI7CisgICAgdWludDMyX3QgcHJlZmVycmVkTGlmZXRpbWU7CisgICAgdWludDMyX3QgdmFsaWRMaWZldGltZTsKKyAgICB1aW50OF90ICBwcmVmaXhMZW47CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUyAgICAvLyBJUHY2IGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgLy8gUHJlZml4IGxlbmd0aCAoaW4gYml0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgICAgLy8gUHJlZmVycmVkIGxpZmV0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUyAgICAgIC8vIFZhbGlkIGxpZmV0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICZhZGRyUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAmcHJlZml4TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAmcHJlZmVycmVkTGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICZ2YWxpZExpZmV0aW1lCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgbmV0aWZBZGRyLm1BZGRyZXNzID0gKmFkZHJQdHI7CisgICAgbmV0aWZBZGRyLm1QcmVmaXhMZW5ndGggPSBwcmVmaXhMZW47CisgICAgbmV0aWZBZGRyLm1QcmVmZXJyZWQgPSBwcmVmZXJyZWRMaWZldGltZSAhPSAwOworICAgIG5ldGlmQWRkci5tVmFsaWQgPSB2YWxpZExpZmV0aW1lICE9IDA7CisKKyAgICBlcnJvciA9IG90SXA2QWRkVW5pY2FzdEFkZHJlc3MobUluc3RhbmNlLCAmbmV0aWZBZGRyKTsKKworICAgIFZlcmlmeU9yRXhpdChlcnJvciA9PSBPVF9FUlJPUl9OT05FLAorICAgICAgICAgICAgICAgICBzcGluZWxFcnJvciA9IFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJURUQsCisgICAgICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICAgICAgKTsKKworICAgIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKworZXhpdDoKKworICAgIGlmIChzcGluZWxFcnJvciAhPSBTUElORUxfU1RBVFVTX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBzcGluZWxFcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorb3RFcnJvciBOY3BCYXNlOjpJbnNlcnRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX09GRl9NRVNIX1JPVVRFUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyByb3V0ZUNvbmZpZzsKKyAgICBvdElwNkFkZHJlc3MgKmFkZHJQdHI7CisgICAgYm9vbCBzdGFibGUgPSBmYWxzZTsKKyAgICB1aW50OF90IGZsYWdzID0gMDsKKworICAgIG1lbXNldCgmcm91dGVDb25maWcsIDAsIHNpemVvZihvdEV4dGVybmFsUm91dGVDb25maWcpKTsKKworICAgIFZlcmlmeU9yRXhpdChtQWxsb3dMb2NhbE5ldHdvcmtEYXRhQ2hhbmdlID09IHRydWUsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19JTlZBTElEX1NUQVRFKTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUyAgLy8gUm91dGUgcHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgLy8gUHJlZml4IGxlbmd0aCAoaW4gYml0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MgICAgICAvLyBTdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAvLyBGbGFncyAoUm91dGUgUHJlZmVyZW5jZSkKKyAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZyb3V0ZUNvbmZpZy5tUHJlZml4Lm1MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICZzdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICZmbGFncworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgIHJvdXRlQ29uZmlnLm1QcmVmaXgubVByZWZpeCA9ICphZGRyUHRyOworICAgIHJvdXRlQ29uZmlnLm1TdGFibGUgPSBzdGFibGU7CisgICAgcm91dGVDb25maWcubVByZWZlcmVuY2UgPSBGbGFnQnl0ZVRvRXh0ZXJuYWxSb3V0ZVByZWZlcmVuY2UoZmxhZ3MpOworCisgICAgZXJyb3IgPSBvdEJvcmRlclJvdXRlckFkZFJvdXRlKG1JbnN0YW5jZSwgJnJvdXRlQ29uZmlnKTsKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCwKKyAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpJbnNlcnRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX09OX01FU0hfTkVUUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIG90Qm9yZGVyUm91dGVyQ29uZmlnIGJvcmRlclJvdXRlckNvbmZpZzsKKyAgICBvdElwNkFkZHJlc3MgKmFkZHJQdHI7CisgICAgYm9vbCBzdGFibGUgPSBmYWxzZTsKKyAgICB1aW50OF90IGZsYWdzID0gMDsKKworICAgIG1lbXNldCgmYm9yZGVyUm91dGVyQ29uZmlnLCAwLCBzaXplb2Yob3RCb3JkZXJSb3V0ZXJDb25maWcpKTsKKworICAgIFZlcmlmeU9yRXhpdChtQWxsb3dMb2NhbE5ldHdvcmtEYXRhQ2hhbmdlID09IHRydWUsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19JTlZBTElEX1NUQVRFKTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUyAgLy8gT24tbWVzaCBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAvLyBQcmVmaXggbGVuZ3RoIChpbiBiaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUyAgICAgIC8vIFN0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgIC8vIEZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICZhZGRyUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAmYm9yZGVyUm91dGVyQ29uZmlnLm1QcmVmaXgubUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgJnN0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmZsYWdzCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgYm9yZGVyUm91dGVyQ29uZmlnLm1QcmVmaXgubVByZWZpeCA9ICphZGRyUHRyOworICAgIGJvcmRlclJvdXRlckNvbmZpZy5tU3RhYmxlID0gc3RhYmxlOworICAgIGJvcmRlclJvdXRlckNvbmZpZy5tUHJlZmVyZW5jZSA9CisgICAgICAgICgoZmxhZ3MgJiBTUElORUxfTkVUX0ZMQUdfUFJFRkVSRU5DRV9NQVNLKSA+PiBTUElORUxfTkVUX0ZMQUdfUFJFRkVSRU5DRV9PRkZTRVQpOworICAgIGJvcmRlclJvdXRlckNvbmZpZy5tUHJlZmVycmVkID0gKChmbGFncyAmIFNQSU5FTF9ORVRfRkxBR19QUkVGRVJSRUQpICE9IDApOworICAgIGJvcmRlclJvdXRlckNvbmZpZy5tU2xhYWMgPSAoKGZsYWdzICYgU1BJTkVMX05FVF9GTEFHX1NMQUFDKSAhPSAwKTsKKyAgICBib3JkZXJSb3V0ZXJDb25maWcubURoY3AgPSAoKGZsYWdzICYgU1BJTkVMX05FVF9GTEFHX0RIQ1ApICE9IDApOworICAgIGJvcmRlclJvdXRlckNvbmZpZy5tQ29uZmlndXJlID0gKChmbGFncyAmIFNQSU5FTF9ORVRfRkxBR19DT05GSUdVUkUpICE9IDApOworICAgIGJvcmRlclJvdXRlckNvbmZpZy5tRGVmYXVsdFJvdXRlID0gKChmbGFncyAmIFNQSU5FTF9ORVRfRkxBR19ERUZBVUxUX1JPVVRFKSAhPSAwKTsKKyAgICBib3JkZXJSb3V0ZXJDb25maWcubU9uTWVzaCA9ICgoZmxhZ3MgJiBTUElORUxfTkVUX0ZMQUdfT05fTUVTSCkgIT0gMCk7CisKKyAgICBlcnJvciA9IG90Qm9yZGVyUm91dGVyQWRkT25NZXNoUHJlZml4KG1JbnN0YW5jZSwgJmJvcmRlclJvdXRlckNvbmZpZyk7CisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJURUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCitvdEVycm9yIE5jcEJhc2U6Okluc2VydFByb3BlcnR5SGFuZGxlcl9USFJFQURfQVNTSVNUSU5HX1BPUlRTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgdWludDE2X3QgcG9ydDsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZwb3J0CisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgZXJyb3IgPSBvdElwNkFkZFVuc2VjdXJlUG9ydChtSW5zdGFuY2UsIHBvcnQpOworICAgIFZlcmlmeU9yRXhpdChlcnJvciA9PSBPVF9FUlJPUl9OT05FLCBzcGluZWxFcnJvciA9IFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVEVELAorICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgIGFWYWx1ZUxlbgorICAgICAgICAgICAgKTsKKworZXhpdDoKKworICAgIGlmIChzcGluZWxFcnJvciAhPSBTUElORUxfU1RBVFVTX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBzcGluZWxFcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorCitvdEVycm9yIE5jcEJhc2U6Okluc2VydFByb3BlcnR5SGFuZGxlcl9NQUNfV0hJVEVMSVNUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgb3RFeHRBZGRyZXNzICpleHRBZGRyZXNzID0gTlVMTDsKKyAgICBpbnQ4X3QgcnNzaSA9IFJTU0lfT1ZFUlJJREVfRElTQUJMRUQ7CisKKyAgICBpZiAoYVZhbHVlTGVuID4gc3RhdGljX2Nhc3Q8c3BpbmVsX3NzaXplX3Q+KHNpemVvZihvdEV4dEFkZHJlc3MpKSkKKyAgICB7CisgICAgICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUyBTUElORUxfREFUQVRZUEVfSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmcnNzaQorICAgICAgICAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0QWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICApOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgaWYgKHJzc2kgPT0gUlNTSV9PVkVSUklERV9ESVNBQkxFRCkKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RMaW5rQWRkV2hpdGVsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcmVzcy0+bTgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IG90TGlua0FkZFdoaXRlbGlzdFJzc2kobUluc3RhbmNlLCBleHRBZGRyZXNzLT5tOCwgcnNzaSk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJURUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6SW5zZXJ0UHJvcGVydHlIYW5kbGVyX01BQ19CTEFDS0xJU1QodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICBvdEV4dEFkZHJlc3MgKmV4dEFkZHJlc3MgPSBOVUxMOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZXh0QWRkcmVzcworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgIGVycm9yID0gb3RMaW5rQWRkQmxhY2tsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcmVzcy0+bTgpOworICAgIFZlcmlmeU9yRXhpdChlcnJvciA9PSBPVF9FUlJPUl9OT05FLCBzcGluZWxFcnJvciA9IFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVEVELAorICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgIGFWYWx1ZUxlbgorICAgICAgICAgICAgKTsKKworZXhpdDoKKworICAgIGlmIChzcGluZWxFcnJvciAhPSBTUElORUxfU1RBVFVTX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBzcGluZWxFcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECitvdEVycm9yIE5jcEJhc2U6Okluc2VydFByb3BlcnR5SGFuZGxlcl9USFJFQURfSk9JTkVSUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICBvdEV4dEFkZHJlc3MgKmV4dEFkZHJlc3MgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmFQU0tkID0gTlVMTDsKKyAgICB1aW50MzJfdCBqb2luZXJUaW1lb3V0ID0gMDsKKworICAgIFZlcmlmeU9yRXhpdChtQWxsb3dMb2NhbE5ldHdvcmtEYXRhQ2hhbmdlID09IHRydWUsIHNwaW5lbEVycm9yID0gIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9TVEFURSk7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VURjhfUyAgICAgLy8gUFNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MgICAvLyBUaW1lb3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUyAgICAvLyBFeHRlbmRlZCBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICZhUFNLZCwKKyAgICAgICAgICAgICAgICAgICAgICAgJmpvaW5lclRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICZleHRBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIGlmIChwYXJzZWRMZW5ndGggPD0gMCkKKyAgICB7CisgICAgICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVVRGOF9TICAgICAvLyBQU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUyAgIC8vIFRpbWVvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmYVBTS2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmam9pbmVyVGltZW91dAorICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICBleHRBZGRyZXNzID0gTlVMTDsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgIGVycm9yID0gb3RDb21taXNzaW9uZXJBZGRKb2luZXIobUluc3RhbmNlLCBleHRBZGRyZXNzLCBhUFNLZCwgam9pbmVyVGltZW91dCk7CisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJURUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IEluZGl2aWR1YWwgUHJvcGVydHkgUmVtb3ZlcnMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorb3RFcnJvciBOY3BCYXNlOjpSZW1vdmVQcm9wZXJ0eUhhbmRsZXJfTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgdWludDE2X3Qgc2hvcnRBZGRyZXNzOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnNob3J0QWRkcmVzcworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgIGVycm9yID0gb3RMaW5rUmF3U3JjTWF0Y2hDbGVhclNob3J0RW50cnkobUluc3RhbmNlLCBzaG9ydEFkZHJlc3MpOworICAgIFZlcmlmeU9yRXhpdChlcnJvciA9PSBPVF9FUlJPUl9OT05FLCBzcGluZWxFcnJvciA9IFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6UmVtb3ZlUHJvcGVydHlIYW5kbGVyX01BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIHVpbnQ4X3QgKmV4dEFkZHJlc3M7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZleHRBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgZXJyb3IgPSBvdExpbmtSYXdTcmNNYXRjaENsZWFyRXh0RW50cnkobUluc3RhbmNlLCBleHRBZGRyZXNzKTsKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9SRU1PVkVELAorICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgIGFWYWx1ZUxlbgorICAgICAgICAgICAgKTsKKworZXhpdDoKKworICAgIGlmIChzcGluZWxFcnJvciAhPSBTUElORUxfU1RBVFVTX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBzcGluZWxFcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworb3RFcnJvciBOY3BCYXNlOjpSZW1vdmVQcm9wZXJ0eUhhbmRsZXJfSVBWNl9BRERSRVNTX1RBQkxFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICBvdElwNkFkZHJlc3MgKmFkZHJQdHI7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZhZGRyUHRyCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgZXJyb3IgPSBvdElwNlJlbW92ZVVuaWNhc3RBZGRyZXNzKG1JbnN0YW5jZSwgYWRkclB0cik7CisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCwKKyAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKK290RXJyb3IgTmNwQmFzZTo6UmVtb3ZlUHJvcGVydHlIYW5kbGVyX1RIUkVBRF9PRkZfTUVTSF9ST1VURVModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICBvdElwNlByZWZpeCBpcDZQcmVmaXg7CisgICAgb3RJcDZBZGRyZXNzICphZGRyUHRyOworCisgICAgbWVtc2V0KCZpcDZQcmVmaXgsIDAsIHNpemVvZihvdElwNlByZWZpeCkpOworCisgICAgVmVyaWZ5T3JFeGl0KG1BbGxvd0xvY2FsTmV0d29ya0RhdGFDaGFuZ2UgPT0gdHJ1ZSwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX0lOVkFMSURfU1RBVEUpOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TICAgICAvLyBSb3V0ZSBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAgICAvLyBQcmVmaXggbGVuZ3RoIChpbiBiaXRzKQorICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAmYWRkclB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJmlwNlByZWZpeC5tTGVuZ3RoCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgaXA2UHJlZml4Lm1QcmVmaXggPSAqYWRkclB0cjsKKworICAgIGVycm9yID0gb3RCb3JkZXJSb3V0ZXJSZW1vdmVSb3V0ZShtSW5zdGFuY2UsICZpcDZQcmVmaXgpOworICAgIFZlcmlmeU9yRXhpdChlcnJvciA9PSBPVF9FUlJPUl9OT05FLCBzcGluZWxFcnJvciA9IFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6UmVtb3ZlUHJvcGVydHlIYW5kbGVyX1RIUkVBRF9PTl9NRVNIX05FVFModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICBvdElwNlByZWZpeCBpcDZQcmVmaXg7CisgICAgb3RJcDZBZGRyZXNzICphZGRyUHRyOworCisgICAgbWVtc2V0KCZpcDZQcmVmaXgsIDAsIHNpemVvZihvdElwNlByZWZpeCkpOworCisgICAgVmVyaWZ5T3JFeGl0KG1BbGxvd0xvY2FsTmV0d29ya0RhdGFDaGFuZ2UgPT0gdHJ1ZSwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX0lOVkFMSURfU1RBVEUpOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TICAgICAvLyBPbi1tZXNoIHByZWZpeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgIC8vIFByZWZpeCBsZW5ndGggKGluIGJpdHMpCisgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICZhZGRyUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAmaXA2UHJlZml4Lm1MZW5ndGgKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBpcDZQcmVmaXgubVByZWZpeCA9ICphZGRyUHRyOworCisgICAgZXJyb3IgPSBvdEJvcmRlclJvdXRlclJlbW92ZU9uTWVzaFByZWZpeChtSW5zdGFuY2UsICZpcDZQcmVmaXgpOworCisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCwKKyAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZgorCitvdEVycm9yIE5jcEJhc2U6OlJlbW92ZVByb3BlcnR5SGFuZGxlcl9USFJFQURfQVNTSVNUSU5HX1BPUlRTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgdWludDE2X3QgcG9ydDsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZwb3J0CisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgZXJyb3IgPSBvdElwNlJlbW92ZVVuc2VjdXJlUG9ydChtSW5zdGFuY2UsIHBvcnQpOworICAgIFZlcmlmeU9yRXhpdChlcnJvciA9PSBPVF9FUlJPUl9OT05FLCBzcGluZWxFcnJvciA9IFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBOY3BCYXNlOjpSZW1vdmVQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICB1aW50OF90IHJvdXRlcklkOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmcm91dGVySWQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBlcnJvciA9IG90VGhyZWFkUmVsZWFzZVJvdXRlcklkKG1JbnN0YW5jZSwgcm91dGVySWQpOworICAgIFZlcmlmeU9yRXhpdChlcnJvciA9PSBPVF9FUlJPUl9OT05FLCBzcGluZWxFcnJvciA9IFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUCisKK290RXJyb3IgTmNwQmFzZTo6UmVtb3ZlUHJvcGVydHlIYW5kbGVyX01BQ19XSElURUxJU1QodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICBvdEV4dEFkZHJlc3MgKmV4dEFkZHJlc3MgPSBOVUxMOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZXh0QWRkcmVzcworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgIG90TGlua1JlbW92ZVdoaXRlbGlzdChtSW5zdGFuY2UsIGV4dEFkZHJlc3MtPm04KTsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6UmVtb3ZlUHJvcGVydHlIYW5kbGVyX01BQ19CTEFDS0xJU1QodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICBvdEV4dEFkZHJlc3MgKmV4dEFkZHJlc3MgPSBOVUxMOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZXh0QWRkcmVzcworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgICAgICBvdExpbmtSZW1vdmVCbGFja2xpc3QobUluc3RhbmNlLCBleHRBZGRyZXNzLT5tOCk7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9SRU1PVkVELAorICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgIGFWYWx1ZUxlbgorICAgICAgICAgICAgKTsKKworZXhpdDoKKworICAgIGlmIChzcGluZWxFcnJvciAhPSBTUElORUxfU1RBVFVTX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBzcGluZWxFcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisKK3ZvaWQgTmNwQmFzZTo6UmVnaXN0ZXJMZWdhY3lIYW5kbGVycyhjb25zdCBvdE5jcExlZ2FjeUhhbmRsZXJzICphSGFuZGxlcnMpCit7CisgICAgbUxlZ2FjeUhhbmRsZXJzID0gYUhhbmRsZXJzOworICAgIGJvb2wgaXNFbmFibGVkOworCisgICAgVmVyaWZ5T3JFeGl0KG1MZWdhY3lIYW5kbGVycyAhPSBOVUxMKTsKKworICAgIGlzRW5hYmxlZCA9IChvdFRocmVhZEdldERldmljZVJvbGUobUluc3RhbmNlKSAhPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCk7CisKKyAgICBpZiAoaXNFbmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKG1MZWdhY3lIYW5kbGVycy0+bVN0YXJ0TGVnYWN5KQorICAgICAgICB7CisgICAgICAgICAgICBtTGVnYWN5SGFuZGxlcnMtPm1TdGFydExlZ2FjeSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChtTGVnYWN5SGFuZGxlcnMtPm1TdG9wTGVnYWN5KQorICAgICAgICB7CisgICAgICAgICAgICBtTGVnYWN5SGFuZGxlcnMtPm1TdG9wTGVnYWN5KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobUxlZ2FjeUhhbmRsZXJzLT5tU2V0TGVnYWN5VWxhUHJlZml4KQorICAgIHsKKyAgICAgICAgbUxlZ2FjeUhhbmRsZXJzLT5tU2V0TGVnYWN5VWxhUHJlZml4KG1MZWdhY3lVbGFQcmVmaXgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlRGlkUmVjZWl2ZU5ld0xlZ2FjeVVsYVByZWZpeChjb25zdCB1aW50OF90ICphVWxhUHJlZml4KQoreworICAgIG1lbWNweShtTGVnYWN5VWxhUHJlZml4LCBhVWxhUHJlZml4LCBPVF9OQ1BfTEVHQUNZX1VMQV9QUkVGSVhfTEVOR1RIKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworCisgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICBTUElORUxfUFJPUF9ORVNUX0xFR0FDWV9VTEFfUFJFRklYLAorICAgICAgICAgICAgYVVsYVByZWZpeCwgT1RfTkNQX0xFR0FDWV9VTEFfUFJFRklYX0xFTkdUSAorICAgICAgICApKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIE5jcEJhc2U6OkhhbmRsZUxlZ2FjeU5vZGVEaWRKb2luKGNvbnN0IG90RXh0QWRkcmVzcyAqYUV4dEFkZHIpCit7CisgICAgbUxlZ2FjeU5vZGVEaWRKb2luID0gdHJ1ZTsKKworICAgIFN1Y2Nlc3NPckV4aXQoT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworCisgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVTVF9MRUdBQ1lfSk9JTkVEX05PREUsCisgICAgICAgICAgICBhRXh0QWRkci0+bTgKKyAgICAgICAgKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorCitvdEVycm9yIE5jcEJhc2U6OlN0cmVhbVdyaXRlKGludCBhU3RyZWFtSWQsIGNvbnN0IHVpbnQ4X3QgKmFEYXRhUHRyLCBpbnQgYURhdGFMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAoYVN0cmVhbUlkID09IDApCisgICAgeworICAgICAgICBhU3RyZWFtSWQgPSBTUElORUxfUFJPUF9TVFJFQU1fREVCVUc7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KCFtRGlzYWJsZVN0cmVhbVdyaXRlLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c3BpbmVsX3Byb3Bfa2V5X3Q+KGFTdHJlYW1JZCksCisgICAgICAgICAgICAgICAgYURhdGFQdHIsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFEYXRhTGVuKQorICAgICAgICAgICAgKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfRU5BQkxFX1BFRUtfUE9LRQorCit2b2lkIE5jcEJhc2U6OlJlZ2lzdGVyUGVla1Bva2VEZWxhZ2F0ZXMob3ROY3BEZWxlZ2F0ZUFsbG93UGVla1Bva2UgYUFsbG93UGVla0RlbGVnYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90TmNwRGVsZWdhdGVBbGxvd1BlZWtQb2tlIGFBbGxvd1Bva2VEZWxlZ2F0ZSkKK3sKKyAgICBtQWxsb3dQZWVrRGVsZWdhdGUgPSBhQWxsb3dQZWVrRGVsZWdhdGU7CisgICAgbUFsbG93UG9rZURlbGVnYXRlID0gYUFsbG93UG9rZURlbGVnYXRlOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfTkNQX0VOQUJMRV9QRUVLX1BPS0UKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IFZpcnR1YWwgRGF0YXN0cmVhbSBJL08gKFB1YmxpYyBBUEkpCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK290RXJyb3Igb3ROY3BTdHJlYW1Xcml0ZShpbnQgYVN0cmVhbUlkLCBjb25zdCB1aW50OF90ICphRGF0YVB0ciwgaW50IGFEYXRhTGVuKQoreworICAgIG90RXJyb3IgZXJyb3IgID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKyAgICBvdDo6TmNwQmFzZSAqbmNwID0gb3Q6Ok5jcEJhc2U6OkdldE5jcEluc3RhbmNlKCk7CisKKyAgICBpZiAobmNwICE9IE5VTEwpCisgICAgeworICAgICAgICBlcnJvciA9IG5jcC0+U3RyZWFtV3JpdGUoYVN0cmVhbUlkLCBhRGF0YVB0ciwgYURhdGFMZW4pOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogUGVlay9Qb2tlIGRlbGVnYXRlIEFQSQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvdEVycm9yIG90TmNwUmVnaXN0ZXJQZWVrUG9rZURlbGFnYXRlcyhvdE5jcERlbGVnYXRlQWxsb3dQZWVrUG9rZSBhQWxsb3dQZWVrRGVsZWdhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdE5jcERlbGVnYXRlQWxsb3dQZWVrUG9rZSBhQWxsb3dQb2tlRGVsZWdhdGUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfRU5BQkxFX1BFRUtfUE9LRQorICAgIG90OjpOY3BCYXNlICpuY3AgPSBvdDo6TmNwQmFzZTo6R2V0TmNwSW5zdGFuY2UoKTsKKworICAgIGlmIChuY3AgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5jcC0+UmVnaXN0ZXJQZWVrUG9rZURlbGFnYXRlcyhhQWxsb3dQZWVrRGVsZWdhdGUsIGFBbGxvd1Bva2VEZWxlZ2F0ZSk7CisgICAgfQorI2Vsc2UKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUFsbG93UGVla0RlbGVnYXRlKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUFsbG93UG9rZURlbGVnYXRlKTsKKworICAgIGVycm9yID0gT1RfRVJST1JfRElTQUJMRURfRkVBVFVSRTsKKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IExlZ2FjeSBuZXR3b3JrIEFQSXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBvdE5jcFJlZ2lzdGVyTGVnYWN5SGFuZGxlcnMoY29uc3Qgb3ROY3BMZWdhY3lIYW5kbGVycyAqYUhhbmRsZXJzKQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgIG90OjpOY3BCYXNlICpuY3AgPSBvdDo6TmNwQmFzZTo6R2V0TmNwSW5zdGFuY2UoKTsKKworICAgIGlmIChuY3AgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5jcC0+UmVnaXN0ZXJMZWdhY3lIYW5kbGVycyhhSGFuZGxlcnMpOworICAgIH0KKworI2Vsc2UKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUhhbmRsZXJzKTsKKyNlbmRpZgorfQorCit2b2lkIG90TmNwSGFuZGxlRGlkUmVjZWl2ZU5ld0xlZ2FjeVVsYVByZWZpeChjb25zdCB1aW50OF90ICphVWxhUHJlZml4KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgIG90OjpOY3BCYXNlICpuY3AgPSBvdDo6TmNwQmFzZTo6R2V0TmNwSW5zdGFuY2UoKTsKKworICAgIGlmIChuY3AgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5jcC0+SGFuZGxlRGlkUmVjZWl2ZU5ld0xlZ2FjeVVsYVByZWZpeChhVWxhUHJlZml4KTsKKyAgICB9CisKKyNlbHNlCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFVbGFQcmVmaXgpOworI2VuZGlmCit9CisKK3ZvaWQgb3ROY3BIYW5kbGVMZWdhY3lOb2RlRGlkSm9pbihjb25zdCBvdEV4dEFkZHJlc3MgKmFFeHRBZGRyKQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgIG90OjpOY3BCYXNlICpuY3AgPSBvdDo6TmNwQmFzZTo6R2V0TmNwSW5zdGFuY2UoKTsKKworICAgIGlmIChuY3AgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5jcC0+SGFuZGxlTGVnYWN5Tm9kZURpZEpvaW4oYUV4dEFkZHIpOworICAgIH0KKworI2Vsc2UKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUV4dEFkZHIpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9zcmMvbmNwL25jcF9iYXNlLmhwcCBiL3NyYy9uY3AvbmNwX2Jhc2UuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkM2ExODAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbmNwL25jcF9iYXNlLmhwcApAQCAtMCwwICsxLDY2MiBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgYSBzcGluZWwgaW50ZXJmYWNlIHRvIHRoZSBPcGVuVGhyZWFkIHN0YWNrLgorICovCisKKyNpZm5kZWYgTkNQX0JBU0VfSFBQXworI2RlZmluZSBOQ1BfQkFTRV9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9pcDYuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL21lc3NhZ2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL25jcC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJzcGluZWwuaCIKKyNpbmNsdWRlICJjb21tb24vdGFza2xldC5ocHAiCisjaW5jbHVkZSAibmNwL25jcF9idWZmZXIuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCisjZGVmaW5lIE5DUF9DT01NQU5EX0hBTkRMRVIobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG90RXJyb3IgQ29tbWFuZEhhbmRsZXJfIyNuYW1lKCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhSGVhZGVyLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYUNvbW1hbmQsICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFBcmdQdHIsICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUFyZ0xlbiAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICkKKworCisjZGVmaW5lIE5DUF9HRVRfUFJPUF9IQU5ETEVSKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG90RXJyb3IgR2V0UHJvcGVydHlIYW5kbGVyXyMjbmFtZSggICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhSGVhZGVyLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBzcGluZWxfcHJvcF9rZXlfdCBhS2V5ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgKQorCisjZGVmaW5lIE5DUF9TRVRfUFJPUF9IQU5ETEVSKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG90RXJyb3IgU2V0UHJvcGVydHlIYW5kbGVyXyMjbmFtZSggICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhSGVhZGVyLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICkKKworI2RlZmluZSBOQ1BfSU5TRVJUX1BST1BfSEFORExFUihuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBvdEVycm9yIEluc2VydFByb3BlcnR5SGFuZGxlcl8jI25hbWUoICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYUhlYWRlciwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbiAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICApCisKKyNkZWZpbmUgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVIobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgb3RFcnJvciBSZW1vdmVQcm9wZXJ0eUhhbmRsZXJfIyNuYW1lKCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFIZWFkZXIsICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5lbF9wcm9wX2tleV90IGFLZXksICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4gICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgKQorCitjbGFzcyBOY3BCYXNlCit7CitwdWJsaWM6CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYW5kIGluaXRpYWxpemVzIGFuIE5jcEJhc2UgaW5zdGFuY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqLworICAgIE5jcEJhc2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBzaW5nbGUgTkNQIGluc3RhbmNlLgorICAgICAqCisgICAgIEByZXR1cm5zIFBvaW50ZXIgdG8gdGhlIHNpbmdsZSBOQ1AgaW5zdGFuY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgTmNwQmFzZSAqR2V0TmNwSW5zdGFuY2Uodm9pZCk7CisKK3Byb3RlY3RlZDoKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBzdGFydCBhIG5ldyBvdXRib3VuZCBmcmFtZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCBhIG5ldyBmcmFtZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgdG8gc3RhcnQgYSBuZXcgZnJhbWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIE91dGJvdW5kRnJhbWVCZWdpbih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgZGF0YSB0byB0aGUgY3VycmVudCBvdXRib3VuZCBmcmFtZSBiZWluZyB3cml0dGVuLgorICAgICAqCisgICAgICogSWYgbm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZSwgdGhpcyBtZXRob2Qgc2hvdWxkIGRpc2NhcmQgYW5kIGNsZWFyIHRoZSBmcmFtZSBiZWZvcmUgcmV0dXJuaW5nIGFuIGVycm9yIHN0YXR1cy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEYXRhQnVmZmVyICAgICAgICBBIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYURhdGFCdWZmZXJMZW5ndGggIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCBuZXcgZGF0YSB0byB0aGUgZnJhbWUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIHRvIGFkZCBkYXRhLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBPdXRib3VuZEZyYW1lRmVlZERhdGEoY29uc3QgdWludDhfdCAqYURhdGFCdWZmZXIsIHVpbnQxNl90IGFEYXRhQnVmZmVyTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBtZXNzYWdlIHRvIHRoZSBjdXJyZW50IG91dGJvdW5kIGZyYW1lIGJlaW5nIHdyaXR0ZW4uCisgICAgICoKKyAgICAgKiBJZiBubyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLCB0aGlzIG1ldGhvZCBzaG91bGQgZGlzY2FyZCBhbmQgY2xlYXIgdGhlIGZyYW1lIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3Igc3RhdHVzLgorICAgICAqIEluIGNhc2Ugb2Ygc3VjY2VzcywgdGhlIHBhc3NlZC1pbiBtZXNzYWdlIEBhTWVzc2FnZSBzaG91bGQgYmUgb3duZWQgYnkgb3V0Ym91bmQgYnVmZmVyIGFuZCBzaG91bGQgYmUgZnJlZWQKKyAgICAgKiB3aGVuIGVpdGhlciB0aGUgdGhlIGZyYW1lIGlzIHN1Y2Nlc3NmdWxseSBzZW50IGFuZCByZW1vdmVkIG9yIGlmIHRoZSBmcmFtZSBpcyBkaXNjYXJkZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIHRvIGJlIGFkZGVkIHRvIGN1cnJlbnQgZnJhbWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgbWVzc2FnZSB0byB0aGUgZnJhbWUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSB0byBhZGQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgT3V0Ym91bmRGcmFtZUZlZWRNZXNzYWdlKG90TWVzc2FnZSAqYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZmluYWxpemVzIGFuZCBzZW5kcyB0aGUgY3VycmVudCBvdXRib3VuZCBmcmFtZQorICAgICAqCisgICAgICogSWYgbm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZSwgdGhpcyBtZXRob2Qgc2hvdWxkIGRpc2NhcmQgYW5kIGNsZWFyIHRoZSBmcmFtZSBiZWZvcmUgcmV0dXJuaW5nIGFuIGVycm9yIHN0YXR1cy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBtZXNzYWdlIHRvIHRoZSBmcmFtZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIHRvIGFkZCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBPdXRib3VuZEZyYW1lRW5kKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBmcmFtZXIgd2hlbmV2ZXIgYSBmcmFtaW5nIGVycm9yCisgICAgICogaXMgZGV0ZWN0ZWQuCisgICAgICovCisgICAgdm9pZCBJbmNyZW1lbnRGcmFtZUVycm9yQ291bnRlcih2b2lkKTsKKworcHJvdGVjdGVkOgorCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBzdWJjbGFzcyB0byBpbmRpY2F0ZSB3aGVuIGEgZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQuCisgICAgICovCisgICAgdm9pZCBIYW5kbGVSZWNlaXZlKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBzdWJjbGFzcyB0byBsZWFybiB3aGVuIHRoZSBob3N0IHdha2Ugb3BlcmF0aW9uIG11c3QgYmUgaXNzdWVkLgorICAgICAqLworICAgIGJvb2wgU2hvdWxkV2FrZUhvc3Qodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHN1YmNsYXNzIHRvIGxlYXJuIHdoZW4gdGhlIHRyYW5zZmVyIHRvIHRoZSBob3N0IHNob3VsZCBiZSBkZWZlcnJlZC4KKyAgICAgKi8KKyAgICBib29sIFNob3VsZERlZmVySG9zdFNlbmQodm9pZCk7CisKK3ByaXZhdGU6CisKKyAgICBvdEVycm9yIE91dGJvdW5kRnJhbWVTZW5kKHZvaWQpOworCisgICAgTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIEdldExhc3RPdXRib3VuZEZyYW1lVGFnKHZvaWQpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZICYmIE9QRU5USFJFQURfRlRECisgICAgc3RhdGljIHZvaWQgSGFuZGxlVG1mUHJveHlTdHJlYW0ob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYUxvY2F0b3IsIHVpbnQxNl90IGFQb3J0LCB2b2lkICphQ29udGV4dCk7CisgICAgdm9pZCBIYW5kbGVUbWZQcm94eVN0cmVhbShvdE1lc3NhZ2UgKmFNZXNzYWdlLCB1aW50MTZfdCBhTG9jYXRvciwgdWludDE2X3QgYVBvcnQpOworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorCisgICAgc3RhdGljIHZvaWQgSGFuZGxlRnJhbWVSZW1vdmVkRnJvbU5jcEJ1ZmZlcih2b2lkICphQ29udGV4dCwgTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIGFGcmFtZVRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5jcEZyYW1lQnVmZmVyICphTmNwQnVmZmVyKTsKKyAgICB2b2lkIEhhbmRsZUZyYW1lUmVtb3ZlZEZyb21OY3BCdWZmZXIoTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIGFGcmFtZVRhZyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVEYXRhZ3JhbUZyb21TdGFjayhvdE1lc3NhZ2UgKmFNZXNzYWdlLCB2b2lkICphQ29udGV4dCk7CisgICAgdm9pZCBIYW5kbGVEYXRhZ3JhbUZyb21TdGFjayhvdE1lc3NhZ2UgKmFNZXNzYWdlKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVJhd0ZyYW1lKGNvbnN0IG90UmFkaW9GcmFtZSAqYUZyYW1lLCB2b2lkICphQ29udGV4dCk7CisgICAgdm9pZCBIYW5kbGVSYXdGcmFtZShjb25zdCBvdFJhZGlvRnJhbWUgKmFGcmFtZSk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVBY3RpdmVTY2FuUmVzdWx0X0p1bXAob3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0LCB2b2lkICphQ29udGV4dCk7CisgICAgdm9pZCBIYW5kbGVBY3RpdmVTY2FuUmVzdWx0KG90QWN0aXZlU2NhblJlc3VsdCAqYVJlc3VsdCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0X0p1bXAob3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0LCB2b2lkICphQ29udGV4dCk7CisgICAgdm9pZCBIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0KG90RW5lcmd5U2NhblJlc3VsdCAqYVJlc3VsdCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVKYW1TdGF0ZUNoYW5nZV9KdW1wKGJvb2wgYUphbVN0YXRlLCB2b2lkICphQ29udGV4dCk7CisgICAgdm9pZCBIYW5kbGVKYW1TdGF0ZUNoYW5nZShib29sIGFKYW1TdGF0ZSk7CisKKyAgICBzdGF0aWMgdm9pZCBVcGRhdGVDaGFuZ2VkUHJvcHMoVGFza2xldCAmYVRhc2tsZXQpOworICAgIHZvaWQgVXBkYXRlQ2hhbmdlZFByb3BzKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgU2VuZERvbmVUYXNrKHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIFNlbmREb25lVGFzayh2b2lkKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgc3RhdGljIHZvaWQgTGlua1Jhd1JlY2VpdmVEb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKTsKKyAgICB2b2lkIExpbmtSYXdSZWNlaXZlRG9uZShvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpOworCisgICAgc3RhdGljIHZvaWQgTGlua1Jhd1RyYW5zbWl0RG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBib29sIGFGcmFtZVBlbmRpbmcsIG90RXJyb3IgYUVycm9yKTsKKyAgICB2b2lkIExpbmtSYXdUcmFuc21pdERvbmUob3RSYWRpb0ZyYW1lICphRnJhbWUsIGJvb2wgYUZyYW1lUGVuZGluZywgb3RFcnJvciBhRXJyb3IpOworCisgICAgc3RhdGljIHZvaWQgTGlua1Jhd0VuZXJneVNjYW5Eb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFFbmVyZ3lTY2FuTWF4UnNzaSk7CisgICAgdm9pZCBMaW5rUmF3RW5lcmd5U2NhbkRvbmUoaW50OF90IGFFbmVyZ3lTY2FuTWF4UnNzaSk7CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKHVpbnQzMl90IGFGbGFncywgdm9pZCAqYUNvbnRleHQpOworCitwcml2YXRlOgorCisgICAgb3RFcnJvciBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChjb25zdCBjaGFyICphUGFja0Zvcm1hdCwgLi4uKTsKKworICAgIG90RXJyb3IgT3V0Ym91bmRGcmFtZUZlZWRWUGFja2VkKGNvbnN0IGNoYXIgKmFQYWNrRm9ybWF0LCB2YV9saXN0IGFBcmdzKTsKKworcHJpdmF0ZToKKworICAgIG90RXJyb3IgSGFuZGxlQ29tbWFuZCh1aW50OF90IGFIZWFkZXIsIHVuc2lnbmVkIGludCBhQ29tbWFuZCwgY29uc3QgdWludDhfdCAqYUFyZ1B0ciwgdWludDE2X3QgYUFyZ0xlbik7CisKKyAgICBvdEVycm9yIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpOworCisgICAgb3RFcnJvciBIYW5kbGVDb21tYW5kUHJvcGVydHlTZXQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKTsKKworICAgIG90RXJyb3IgSGFuZGxlQ29tbWFuZFByb3BlcnR5SW5zZXJ0KHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbik7CisKKyAgICBvdEVycm9yIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eVJlbW92ZSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pOworCisgICAgb3RFcnJvciBTZW5kTGFzdFN0YXR1cyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9zdGF0dXNfdCBhTGFzdFN0YXR1cyk7CisKKyAgICBvdEVycm9yIEdldFByb3BlcnR5SGFuZGxlcl9DaGFubmVsTWFza0hlbHBlcih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIHVpbnQzMl90IGNoYW5uZWxfbWFzayk7CisKK3ByaXZhdGU6CisKKyAgICBvdEVycm9yIFNlbmRQcm9wZXJ0eVVwZGF0ZSh1aW50OF90IGFIZWFkZXIsIHVpbnQ4X3QgYUNvbW1hbmQsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pOworCisgICAgb3RFcnJvciBTZW5kUHJvcGVydHlVcGRhdGUodWludDhfdCBhSGVhZGVyLCB1aW50OF90IGFDb21tYW5kLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBvdE1lc3NhZ2UgKm1lc3NhZ2UpOworCisgICAgb3RFcnJvciBTZW5kUHJvcGVydHlVcGRhdGUodWludDhfdCBhSGVhZGVyLCB1aW50OF90IGFDb21tYW5kLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKKyAgICBvdEVycm9yIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgb3RFcnJvciBhRXJyb3IpOworCitwcml2YXRlOgorCisgICAgdHlwZWRlZiBvdEVycm9yKE5jcEJhc2U6OipDb21tYW5kSGFuZGxlclR5cGUpKHVpbnQ4X3QgYUhlYWRlciwgdW5zaWduZWQgaW50IGFDb21tYW5kLCBjb25zdCB1aW50OF90ICphQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQXJnTGVuKTsKKworICAgIHR5cGVkZWYgb3RFcnJvcihOY3BCYXNlOjoqR2V0UHJvcGVydHlIYW5kbGVyVHlwZSkodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KTsKKworICAgIHR5cGVkZWYgb3RFcnJvcihOY3BCYXNlOjoqU2V0UHJvcGVydHlIYW5kbGVyVHlwZSkodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pOworCisgICAgc3RydWN0IENvbW1hbmRIYW5kbGVyRW50cnkKKyAgICB7CisgICAgICAgIHNwaW5lbF9jaWRfdCBtQ29tbWFuZDsKKyAgICAgICAgQ29tbWFuZEhhbmRsZXJUeXBlIG1IYW5kbGVyOworICAgIH07CisKKyAgICBzdHJ1Y3QgR2V0UHJvcGVydHlIYW5kbGVyRW50cnkKKyAgICB7CisgICAgICAgIHNwaW5lbF9wcm9wX2tleV90IG1Qcm9wS2V5OworICAgICAgICBHZXRQcm9wZXJ0eUhhbmRsZXJUeXBlIG1IYW5kbGVyOworICAgIH07CisKKyAgICBzdHJ1Y3QgU2V0UHJvcGVydHlIYW5kbGVyRW50cnkKKyAgICB7CisgICAgICAgIHNwaW5lbF9wcm9wX2tleV90IG1Qcm9wS2V5OworICAgICAgICBTZXRQcm9wZXJ0eUhhbmRsZXJUeXBlIG1IYW5kbGVyOworICAgIH07CisKKyAgICBzdHJ1Y3QgSW5zZXJ0UHJvcGVydHlIYW5kbGVyRW50cnkKKyAgICB7CisgICAgICAgIHNwaW5lbF9wcm9wX2tleV90IG1Qcm9wS2V5OworICAgICAgICBTZXRQcm9wZXJ0eUhhbmRsZXJUeXBlIG1IYW5kbGVyOworICAgIH07CisKKyAgICBzdHJ1Y3QgUmVtb3ZlUHJvcGVydHlIYW5kbGVyRW50cnkKKyAgICB7CisgICAgICAgIHNwaW5lbF9wcm9wX2tleV90IG1Qcm9wS2V5OworICAgICAgICBTZXRQcm9wZXJ0eUhhbmRsZXJUeXBlIG1IYW5kbGVyOworICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgQ29tbWFuZEhhbmRsZXJFbnRyeSBtQ29tbWFuZEhhbmRsZXJUYWJsZVtdOworICAgIHN0YXRpYyBjb25zdCBHZXRQcm9wZXJ0eUhhbmRsZXJFbnRyeSBtR2V0UHJvcGVydHlIYW5kbGVyVGFibGVbXTsKKyAgICBzdGF0aWMgY29uc3QgU2V0UHJvcGVydHlIYW5kbGVyRW50cnkgbVNldFByb3BlcnR5SGFuZGxlclRhYmxlW107CisgICAgc3RhdGljIGNvbnN0IEluc2VydFByb3BlcnR5SGFuZGxlckVudHJ5IG1JbnNlcnRQcm9wZXJ0eUhhbmRsZXJUYWJsZVtdOworICAgIHN0YXRpYyBjb25zdCBSZW1vdmVQcm9wZXJ0eUhhbmRsZXJFbnRyeSBtUmVtb3ZlUHJvcGVydHlIYW5kbGVyVGFibGVbXTsKKworICAgIC8vIENvbW1hbmQgSGFuZGxlcnMKKworICAgIE5DUF9DT01NQU5EX0hBTkRMRVIoTk9PUCk7CisgICAgTkNQX0NPTU1BTkRfSEFORExFUihSRVNFVCk7CisgICAgTkNQX0NPTU1BTkRfSEFORExFUihQUk9QX1ZBTFVFX0dFVCk7CisgICAgTkNQX0NPTU1BTkRfSEFORExFUihQUk9QX1ZBTFVFX1NFVCk7CisgICAgTkNQX0NPTU1BTkRfSEFORExFUihQUk9QX1ZBTFVFX0lOU0VSVCk7CisgICAgTkNQX0NPTU1BTkRfSEFORExFUihQUk9QX1ZBTFVFX1JFTU9WRSk7CisgICAgTkNQX0NPTU1BTkRfSEFORExFUihORVRfU0FWRSk7CisgICAgTkNQX0NPTU1BTkRfSEFORExFUihORVRfQ0xFQVIpOworICAgIE5DUF9DT01NQU5EX0hBTkRMRVIoTkVUX1JFQ0FMTCk7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTkNQX0VOQUJMRV9QRUVLX1BPS0UKKyAgICBOQ1BfQ09NTUFORF9IQU5ETEVSKFBFRUspOworICAgIE5DUF9DT01NQU5EX0hBTkRMRVIoUE9LRSk7CisjZW5kaWYKKworICAgIC8vIFByb3BlcnR5IEdldCBIYW5kbGVycworCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTEFTVF9TVEFUVVMpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFBST1RPQ09MX1ZFUlNJT04pOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKElOVEVSRkFDRV9UWVBFKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihWRU5ET1JfSUQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKENBUFMpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE5DUF9WRVJTSU9OKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihJTlRFUkZBQ0VfQ09VTlQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFBPV0VSX1NUQVRFKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihIV0FERFIpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKExPQ0spOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKEhPU1RfUE9XRVJfU1RBVEUpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFBIWV9FTkFCTEVEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihQSFlfRlJFUSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoUEhZX0NIQU5fU1VQUE9SVEVEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihQSFlfQ0hBTik7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoUEhZX1JTU0kpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFBIWV9UWF9QT1dFUik7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoUEhZX1JYX1NFTlNJVElWSVRZKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfU0NBTl9TVEFURSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTUFDXzE1XzRfUEFOSUQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE1BQ18xNV80X0xBRERSKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfMTVfNF9TQUREUik7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTUFDX1JBV19TVFJFQU1fRU5BQkxFRCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTUFDX0VYVEVOREVEX0FERFIpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE1BQ19EQVRBX1BPTExfUEVSSU9EKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihORVRfU0FWRUQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE5FVF9JRl9VUCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTkVUX1NUQUNLX1VQKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihORVRfUk9MRSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTkVUX05FVFdPUktfTkFNRSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTkVUX1hQQU5JRCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTkVUX01BU1RFUl9LRVkpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE5FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUik7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTkVUX1BBUlRJVElPTl9JRCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfTEVBREVSKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihJUFY2X01MX1BSRUZJWCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSVBWNl9NTF9BRERSKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihJUFY2X0xMX0FERFIpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKElQVjZfQUREUkVTU19UQUJMRSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSVBWNl9ST1VURV9UQUJMRSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSVBWNl9JQ01QX1BJTkdfT0ZGTE9BRCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1JMT0MxNl9ERUJVR19QQVNTVEhSVSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX09GRl9NRVNIX1JPVVRFUyk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoU1RSRUFNX05FVCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTUFDX1NDQU5fTUFTSyk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTUFDX1NDQU5fUEVSSU9EKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfTEVBREVSX0FERFIpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9QQVJFTlQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ORUlHSEJPUl9UQUJMRSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0xFQURFUl9SSUQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9MRUFERVJfV0VJR0hUKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX05FVFdPUktfREFUQSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEEpOworI2VuZGlmCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX05FVFdPUktfREFUQV9WRVJTSU9OKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfU1RBQkxFX05FVFdPUktfREFUQV9WRVJTSU9OKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfTEVBREVSX05FVFdPUktfREFUQSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1NUQUJMRV9MRUFERVJfTkVUV09SS19EQVRBKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfUFJPTUlTQ1VPVVNfTU9ERSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0FTU0lTVElOR19QT1JUUyk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0FMTE9XX0xPQ0FMX05FVF9EQVRBX0NIQU5HRSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTUFDX0NOVFIpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE5DUF9DTlRSKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihJUF9DTlRSKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNU0dfQlVGRkVSX0NPVU5URVJTKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTUFDX1dISVRFTElTVCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTUFDX1dISVRFTElTVF9FTkFCTEVEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfQkxBQ0tMSVNUKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfQkxBQ0tMSVNUX0VOQUJMRUQpOworI2VuZGlmCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX01PREUpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9DSElMRF9USU1FT1VUKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfUkxPQzE2KTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfT05fTUVTSF9ORVRTKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihERUJVR19URVNUX0FTU0VSVCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoREVCVUdfTkNQX0xPR19MRVZFTCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0pPSU5FUl9GTEFHKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfRElTQ09WRVJZX1NDQU5fRU5BQkxFX0ZJTFRFUklORyk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX1BBTklEKTsKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9DSElMRF9UQUJMRSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0xPQ0FMX0xFQURFUl9XRUlHSFQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ST1VURVJfUk9MRV9FTkFCTEVEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihORVRfUFNLQyk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0NISUxEX0NPVU5UX01BWCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1JPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVIpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9DT05URVhUX1JFVVNFX0RFTEFZKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfTkVUV09SS19JRF9USU1FT1VUKTsKKyNlbmRpZiAvLyAjaWYgT1BFTlRIUkVBRF9GVEQKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQpOworI2VuZGlmCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVEKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSkFNX0RFVEVDVF9FTkFCTEUpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKEpBTV9ERVRFQ1RFRCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSkFNX0RFVEVDVF9SU1NJX1RIUkVTSE9MRCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSkFNX0RFVEVDVF9XSU5ET1cpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKEpBTV9ERVRFQ1RfQlVTWSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSkFNX0RFVEVDVF9ISVNUT1JZX0JJVE1BUCk7CisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihORVNUX0xFR0FDWV9VTEFfUFJFRklYKTsKKyNlbmRpZgorCisgICAgLy8gUHJvcGVydHkgU2V0IEhhbmRsZXJzCisKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihQT1dFUl9TVEFURSk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoSE9TVF9QT1dFUl9TVEFURSk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoUEhZX1RYX1BPV0VSKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihQSFlfQ0hBTik7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTUFDX1NDQU5fTUFTSyk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTUFDX1NDQU5fU1RBVEUpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ18xNV80X1BBTklEKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihNQUNfMTVfNF9MQUREUik7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTUFDX0RBVEFfUE9MTF9QRVJJT0QpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ19SQVdfU1RSRUFNX0VOQUJMRUQpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ18xNV80X1NBRERSKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihTVFJFQU1fUkFXKTsKKyNlbmRpZgorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE5FVF9JRl9VUCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTkVUX1NUQUNLX1VQKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihORVRfUk9MRSk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTkVUX05FVFdPUktfTkFNRSk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTkVUX1hQQU5JRCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTkVUX01BU1RFUl9LRVkpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE5FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUik7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihTVFJFQU1fTkVUX0lOU0VDVVJFKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihTVFJFQU1fTkVUKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihJUFY2X01MX1BSRUZJWCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoSVBWNl9JQ01QX1BJTkdfT0ZGTE9BRCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1JMT0MxNl9ERUJVR19QQVNTVEhSVSk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1RNRl9QUk9YWV9TVFJFQU0pOworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFBIWV9FTkFCTEVEKTsKKyNlbmRpZgorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ19QUk9NSVNDVU9VU19NT0RFKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihNQUNfU0NBTl9QRVJJT0QpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihNQUNfV0hJVEVMSVNUKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihNQUNfV0hJVEVMSVNUX0VOQUJMRUQpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ19CTEFDS0xJU1QpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ19CTEFDS0xJU1RfRU5BQkxFRCk7CisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihNQUNfU1JDX01BVENIX0VOQUJMRUQpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihNQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUyk7CisjZW5kaWYKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihUSFJFQURfTU9ERSk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9BTExPV19MT0NBTF9ORVRfREFUQV9DSEFOR0UpOworI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihORVRfUFNLQyk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0xPQ0FMX0xFQURFUl9XRUlHSFQpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9DSElMRF9DT1VOVF9NQVgpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9DSElMRF9USU1FT1VUKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihUSFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihUSFJFQURfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUik7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVkpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9QUkVGRVJSRURfUk9VVEVSX0lEKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihUSFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRCk7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9TVEVFUklOR19EQVRBKTsKKyNlbmRpZgorI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0ZURAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ESVNDT1ZFUllfU0NBTl9KT0lORVJfRkxBRyk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0VOQUJMRV9GSUxURVJJTkcpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ESVNDT1ZFUllfU0NBTl9QQU5JRCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0FTU0lTVElOR19QT1JUUyk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORyk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoQ05UUl9SRVNFVCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoREVCVUdfTkNQX0xPR19MRVZFTCk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0NPTU1JU1NJT05FUl9FTkFCTEVEKTsKKyNlbmRpZgorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9UTUZfUFJPWFlfRU5BQkxFRCk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKEpBTV9ERVRFQ1RfRU5BQkxFKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihKQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihKQU1fREVURUNUX1dJTkRPVyk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoSkFNX0RFVEVDVF9CVVNZKTsKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihORVNUX1NUUkVBTV9NRkcpOworI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTkVTVF9MRUdBQ1lfVUxBX1BSRUZJWCk7CisjZW5kaWYKKworICAgIC8vIFByb3BlcnR5IEluc2VydCBIYW5kbGVycworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVIoTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMpOworICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSKE1BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTKTsKKyNlbmRpZgorICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSKElQVjZfQUREUkVTU19UQUJMRSk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSKFRIUkVBRF9PRkZfTUVTSF9ST1VURVMpOworICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSKFRIUkVBRF9PTl9NRVNIX05FVFMpOworI2VuZGlmCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0FTU0lTVElOR19QT1JUUyk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSKE1BQ19XSElURUxJU1QpOworICAgIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSKE1BQ19CTEFDS0xJU1QpOworI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0pPSU5FUlMpOworI2VuZGlmCisKKyAgICAvLyBQcm9wZXJ0eSBSZW1vdmUgSGFuZGxlcnMKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSKE1BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTKTsKKyAgICBOQ1BfUkVNT1ZFX1BST1BfSEFORExFUihNQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUyk7CisjZW5kaWYKKyAgICBOQ1BfUkVNT1ZFX1BST1BfSEFORExFUihJUFY2X0FERFJFU1NfVEFCTEUpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKyAgICBOQ1BfUkVNT1ZFX1BST1BfSEFORExFUihUSFJFQURfT0ZGX01FU0hfUk9VVEVTKTsKKyAgICBOQ1BfUkVNT1ZFX1BST1BfSEFORExFUihUSFJFQURfT05fTUVTSF9ORVRTKTsKKyNlbmRpZgorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSKFRIUkVBRF9BU1NJU1RJTkdfUE9SVFMpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKyAgICBOQ1BfUkVNT1ZFX1BST1BfSEFORExFUihNQUNfV0hJVEVMSVNUKTsKKyAgICBOQ1BfUkVNT1ZFX1BST1BfSEFORExFUihNQUNfQkxBQ0tMSVNUKTsKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRlRECisgICAgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVIoVEhSRUFEX0FDVElWRV9ST1VURVJfSURTKTsKKyNlbmRpZgorCitwdWJsaWM6CisgICAgb3RFcnJvciBTdHJlYW1Xcml0ZShpbnQgYVN0cmVhbUlkLCBjb25zdCB1aW50OF90ICphRGF0YVB0ciwgaW50IGFEYXRhTGVuKTsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisgICAgdm9pZCBSZWdpc3RlclBlZWtQb2tlRGVsYWdhdGVzKG90TmNwRGVsZWdhdGVBbGxvd1BlZWtQb2tlIGFBbGxvd1BlZWtEZWxlZ2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ROY3BEZWxlZ2F0ZUFsbG93UGVla1Bva2UgYUFsbG93UG9rZURlbGVnYXRlKTsKKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCitwdWJsaWM6CisgICAgdm9pZCBIYW5kbGVMZWdhY3lOb2RlRGlkSm9pbihjb25zdCBvdEV4dEFkZHJlc3MgKmFFeHRBZGRyKTsKKyAgICB2b2lkIEhhbmRsZURpZFJlY2VpdmVOZXdMZWdhY3lVbGFQcmVmaXgoY29uc3QgdWludDhfdCAqYVVsYVByZWZpeCk7CisgICAgdm9pZCBSZWdpc3RlckxlZ2FjeUhhbmRsZXJzKGNvbnN0IG90TmNwTGVnYWN5SGFuZGxlcnMgKmFIYW5kbGVycyk7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBOY3BCYXNlICpzTmNwSW5zdGFuY2U7CisgICAgb3RJbnN0YW5jZSAqbUluc3RhbmNlOworICAgIE5jcEZyYW1lQnVmZmVyICBtVHhGcmFtZUJ1ZmZlcjsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVHhCdWZmZXJTaXplID0gT1BFTlRIUkVBRF9DT05GSUdfTkNQX1RYX0JVRkZFUl9TSVpFLCAgLy8gVHggQnVmZmVyIHNpemUgKHVzZWQgYnkgbVR4RnJhbWVCdWZmZXIpLgorICAgIH07CisKKyAgICBzcGluZWxfc3RhdHVzX3QgbUxhc3RTdGF0dXM7CisgICAgdWludDMyX3QgbVN1cHBvcnRlZENoYW5uZWxNYXNrOworICAgIHVpbnQzMl90IG1DaGFubmVsTWFzazsKKyAgICB1aW50MTZfdCBtU2NhblBlcmlvZDsKKyAgICBib29sIG1EaXNjb3ZlcnlTY2FuSm9pbmVyRmxhZzsKKyAgICBib29sIG1EaXNjb3ZlcnlTY2FuRW5hYmxlRmlsdGVyaW5nOworICAgIHVpbnQxNl90IG1EaXNjb3ZlcnlTY2FuUGFuSWQ7CisgICAgVGFza2xldCBtVXBkYXRlQ2hhbmdlZFByb3BzVGFzazsKKyAgICB1aW50MzJfdCBtQ2hhbmdlZEZsYWdzOworICAgIGJvb2wgbVNob3VsZFNpZ25hbEVuZE9mU2NhbjsKKyAgICBzcGluZWxfaG9zdF9wb3dlcl9zdGF0ZV90IG1Ib3N0UG93ZXJTdGF0ZTsKKyAgICBib29sIG1Ib3N0UG93ZXJTdGF0ZUluUHJvZ3Jlc3M7CisgICAgTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIG1Ib3N0UG93ZXJSZXBseUZyYW1lVGFnOworICAgIHVpbnQ4X3QgbUhvc3RQb3dlclN0YXRlSGVhZGVyOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorICAgIGJvb2wgbVNob3VsZFNpZ25hbEphbVN0YXRlQ2hhbmdlOworI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfRU5BQkxFX1BFRUtfUE9LRQorICAgIG90TmNwRGVsZWdhdGVBbGxvd1BlZWtQb2tlIG1BbGxvd1BlZWtEZWxlZ2F0ZTsKKyAgICBvdE5jcERlbGVnYXRlQWxsb3dQZWVrUG9rZSBtQWxsb3dQb2tlRGVsZWdhdGU7CisjZW5kaWYKKworICAgIHNwaW5lbF90aWRfdCBtRHJvcHBlZFJlcGx5VGlkOworICAgIHVpbnQxNl90IG1Ecm9wcGVkUmVwbHlUaWRCaXRTZXQ7CisgICAgc3BpbmVsX3RpZF90IG1OZXh0RXhwZWN0ZWRUaWQ7CisgICAgdWludDhfdCBtVHhCdWZmZXJba1R4QnVmZmVyU2l6ZV07CisKKyAgICBib29sIG1BbGxvd0xvY2FsTmV0d29ya0RhdGFDaGFuZ2U7CisgICAgYm9vbCBtUmVxdWlyZUpvaW5FeGlzdGluZ05ldHdvcms7CisgICAgYm9vbCBtSXNSYXdTdHJlYW1FbmFibGVkOworICAgIGJvb2wgbURpc2FibGVTdHJlYW1Xcml0ZTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIHVpbnQ4X3QgbUN1clRyYW5zbWl0VElEOworICAgIHVpbnQ4X3QgbUN1clJlY2VpdmVDaGFubmVsOworICAgIGludDhfdCAgbUN1clNjYW5DaGFubmVsOworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgdWludDMyX3QgbUZyYW1pbmdFcnJvckNvdW50ZXI7ICAgICAgICAgICAgIC8vIE51bWJlciBvZiBpbXByb3Blcmx5IGZvcm1lZCByZWNlaXZlZCBzcGluZWwgZnJhbWVzLgorICAgIHVpbnQzMl90IG1SeFNwaW5lbEZyYW1lQ291bnRlcjsgICAgICAgICAgICAvLyBOdW1iZXIgb2YgcmVjZWl2ZWQgKGluYm91bmQpIHNwaW5lbCBmcmFtZXMuCisgICAgdWludDMyX3QgbVJ4U3BpbmVsT3V0T2ZPcmRlclRpZENvdW50ZXI7ICAgIC8vIE51bWJlciBvZiBvdXQgb2Ygb3JkZXIgcmVjZWl2ZWQgc3BpbmVsIGZyYW1lcyAodGlkIGluY3JlYXNlID4gMSkuCisgICAgdWludDMyX3QgbVR4U3BpbmVsRnJhbWVDb3VudGVyOyAgICAgICAgICAgIC8vIE51bWJlciBvZiBzZW50IChvdXRib3VuZCkgc3BpbmVsIGZyYW1lcy4KKyAgICB1aW50MzJfdCBtSW5ib3VuZFNlY3VyZUlwRnJhbWVDb3VudGVyOyAgICAgLy8gTnVtYmVyIG9mIHNlY3VyZSBpbmJvdW5kIGRhdGEvSVAgZnJhbWVzLgorICAgIHVpbnQzMl90IG1JbmJvdW5kSW5zZWN1cmVJcEZyYW1lQ291bnRlcjsgICAvLyBOdW1iZXIgb2YgaW5zZWN1cmUgaW5ib3VuZCBkYXRhL0lQIGZyYW1lcy4KKyAgICB1aW50MzJfdCBtT3V0Ym91bmRTZWN1cmVJcEZyYW1lQ291bnRlcjsgICAgLy8gTnVtYmVyIG9mIHNlY3VyZSBvdXRib3VuZCBkYXRhL0lQIGZyYW1lcy4KKyAgICB1aW50MzJfdCBtT3V0Ym91bmRJbnNlY3VyZUlwRnJhbWVDb3VudGVyOyAgLy8gTnVtYmVyIG9mIGluc2VjdXJlIG91dGJvdW5kIGRhdGEvSVAgZnJhbWVzLgorICAgIHVpbnQzMl90IG1Ecm9wcGVkT3V0Ym91bmRJcEZyYW1lQ291bnRlcjsgICAvLyBOdW1iZXIgb2YgZHJvcHBlZCBvdXRib3VuZCBkYXRhL0lQIGZyYW1lcy4KKyAgICB1aW50MzJfdCBtRHJvcHBlZEluYm91bmRJcEZyYW1lQ291bnRlcjsgICAgLy8gTnVtYmVyIG9mIGRyb3BwZWQgaW5ib3VuZCBkYXRhL0lQIGZyYW1lcy4KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgIGNvbnN0IG90TmNwTGVnYWN5SGFuZGxlcnMgKm1MZWdhY3lIYW5kbGVyczsKKyAgICB1aW50OF90IG1MZWdhY3lVbGFQcmVmaXhbT1RfTkNQX0xFR0FDWV9VTEFfUFJFRklYX0xFTkdUSF07CisgICAgYm9vbCBtTGVnYWN5Tm9kZURpZEpvaW47CisjZW5kaWYKKworfTsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkNQX0JBU0VfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL25jcC9uY3BfYnVmZmVyLmNwcCBiL3NyYy9uY3AvbmNwX2J1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkODAwOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3AvbmNwX2J1ZmZlci5jcHAKQEAgLTAsMCArMSw2NzMgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgTkNQIGZyYW1lIGJ1ZmZlciBjbGFzcy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm5jcF9idWZmZXIuaHBwIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjb25zdCBOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgTmNwRnJhbWVCdWZmZXI6OmtJbnZhbGlkVGFnID0gTlVMTDsKKworTmNwRnJhbWVCdWZmZXI6Ok5jcEZyYW1lQnVmZmVyKHVpbnQ4X3QgKmFCdWZmZXIsIHVpbnQxNl90IGFCdWZmZXJMZW4pIDoKKyAgICBtQnVmZmVyKGFCdWZmZXIpLAorICAgIG1CdWZmZXJFbmQoYUJ1ZmZlciArIGFCdWZmZXJMZW4pLAorICAgIG1CdWZmZXJMZW5ndGgoYUJ1ZmZlckxlbikKK3sKKyAgICBvdE1lc3NhZ2VRdWV1ZUluaXQoJm1NZXNzYWdlUXVldWUpOworICAgIG90TWVzc2FnZVF1ZXVlSW5pdCgmbVdyaXRlRnJhbWVNZXNzYWdlUXVldWUpOworICAgIFNldEZyYW1lQWRkZWRDYWxsYmFjayhOVUxMLCBOVUxMKTsKKyAgICBTZXRGcmFtZVJlbW92ZWRDYWxsYmFjayhOVUxMLCBOVUxMKTsKKyAgICBDbGVhcigpOworfQorCit2b2lkIE5jcEZyYW1lQnVmZmVyOjpDbGVhcih2b2lkKQoreworICAgIG90TWVzc2FnZSAqbWVzc2FnZTsKKworICAgIC8vIFdyaXRlIChJbkZyYW1lKSByZWxhdGVkIHZhcmlhYmxlcworICAgIG1Xcml0ZUZyYW1lU3RhcnQgPSBtQnVmZmVyOworICAgIG1Xcml0ZVNlZ21lbnRIZWFkID0gbUJ1ZmZlcjsKKyAgICBtV3JpdGVTZWdtZW50VGFpbCA9IG1CdWZmZXI7CisgICAgbVdyaXRlRnJhbWVUYWcgPSBrSW52YWxpZFRhZzsKKworICAgIC8vIFJlYWQgKE91dEZyYW1lKSByZWxhdGVkIHZhcmlhYmxlcworICAgIG1SZWFkU3RhdGUgPSBrUmVhZFN0YXRlRG9uZTsKKyAgICBtUmVhZEZyYW1lTGVuZ3RoID0ga1Vua25vd25GcmFtZUxlbmd0aDsKKworICAgIG1SZWFkRnJhbWVTdGFydCA9IG1CdWZmZXI7CisgICAgbVJlYWRTZWdtZW50SGVhZCA9IG1CdWZmZXI7CisgICAgbVJlYWRTZWdtZW50VGFpbCA9IG1CdWZmZXI7CisgICAgbVJlYWRQb2ludGVyID0gbUJ1ZmZlcjsKKworICAgIG1SZWFkTWVzc2FnZSA9IE5VTEw7CisgICAgbVJlYWRNZXNzYWdlT2Zmc2V0ID0gMDsKKyAgICBtUmVhZE1lc3NhZ2VUYWlsID0gbU1lc3NhZ2VCdWZmZXI7CisKKyAgICAvLyBGcmVlIGFsbCBtZXNzYWdlcyBpbiB0aGUgcXVldWVzLgorCisgICAgd2hpbGUgKChtZXNzYWdlID0gb3RNZXNzYWdlUXVldWVHZXRIZWFkKCZtV3JpdGVGcmFtZU1lc3NhZ2VRdWV1ZSkpICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VRdWV1ZURlcXVldWUoJm1Xcml0ZUZyYW1lTWVzc2FnZVF1ZXVlLCBtZXNzYWdlKTsKKyAgICAgICAgb3RNZXNzYWdlRnJlZShtZXNzYWdlKTsKKyAgICB9CisKKyAgICB3aGlsZSAoKG1lc3NhZ2UgPSBvdE1lc3NhZ2VRdWV1ZUdldEhlYWQoJm1NZXNzYWdlUXVldWUpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgb3RNZXNzYWdlUXVldWVEZXF1ZXVlKCZtTWVzc2FnZVF1ZXVlLCBtZXNzYWdlKTsKKyAgICAgICAgb3RNZXNzYWdlRnJlZShtZXNzYWdlKTsKKyAgICB9Cit9CisKK3ZvaWQgTmNwRnJhbWVCdWZmZXI6OlNldEZyYW1lQWRkZWRDYWxsYmFjayhCdWZmZXJDYWxsYmFjayBhRnJhbWVBZGRlZENhbGxiYWNrLCB2b2lkICphRnJhbWVBZGRlZENvbnRleHQpCit7CisgICAgbUZyYW1lQWRkZWRDYWxsYmFjayA9IGFGcmFtZUFkZGVkQ2FsbGJhY2s7CisgICAgbUZyYW1lQWRkZWRDb250ZXh0ID0gYUZyYW1lQWRkZWRDb250ZXh0OworfQorCit2b2lkIE5jcEZyYW1lQnVmZmVyOjpTZXRGcmFtZVJlbW92ZWRDYWxsYmFjayhCdWZmZXJDYWxsYmFjayBhRnJhbWVSZW1vdmVkQ2FsbGJhY2ssIHZvaWQgKmFGcmFtZVJlbW92ZWRDb250ZXh0KQoreworICAgIG1GcmFtZVJlbW92ZWRDYWxsYmFjayA9IGFGcmFtZVJlbW92ZWRDYWxsYmFjazsKKyAgICBtRnJhbWVSZW1vdmVkQ29udGV4dCA9IGFGcmFtZVJlbW92ZWRDb250ZXh0OworfQorCisvLyBJbmNyZW1lbnRzIHRoZSBidWZmZXIgcG9pbnRlciBieSBvbmUgYnl0ZSB3aGlsZSBoYW5kbGluZyB0aGUgdGhlIHdyYXAtYXJvdW5kIGF0IHRoZSBlbmQgb2YgYnVmZmVyLgordWludDhfdCAqTmNwRnJhbWVCdWZmZXI6Ok5leHQodWludDhfdCAqYUJ1ZlB0cikgY29uc3QKK3sKKyAgICBhQnVmUHRyKys7CisgICAgcmV0dXJuIChhQnVmUHRyID09IG1CdWZmZXJFbmQpID8gbUJ1ZmZlciA6IGFCdWZQdHI7Cit9CisKKy8vIFJldHVybnMgYW4gYWR2YW5jZWQgKG1vdmVkIGZvcndhcmQpIHZlcnNpb24gb2YgdGhlIGdpdmVuIGJ1ZmZlciBwb2ludGVyIGJ5IHRoZSBnaXZlbiBvZmZzZXQuCit1aW50OF90ICpOY3BGcmFtZUJ1ZmZlcjo6QWR2YW5jZSh1aW50OF90ICphQnVmUHRyLCB1aW50MTZfdCBhT2Zmc2V0KSBjb25zdAoreworICAgIGFCdWZQdHIgKz0gYU9mZnNldDsKKworICAgIHdoaWxlIChhQnVmUHRyID49IG1CdWZmZXJFbmQpCisgICAgeworICAgICAgICBhQnVmUHRyIC09IG1CdWZmZXJMZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIGFCdWZQdHI7Cit9CisKKy8vIEdldHMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIGJ1ZmZlciBwb2ludGVycyAoYWRqdXN0cyBmb3IgdGhlIHdyYXAtYXJvdW5kKS4KK3VpbnQxNl90IE5jcEZyYW1lQnVmZmVyOjpHZXREaXN0YW5jZSh1aW50OF90ICphU3RhcnRQdHIsIHVpbnQ4X3QgKmFFbmRQdHIpIGNvbnN0Cit7CisgICAgc2l6ZV90IGRpc3RhbmNlOworCisgICAgaWYgKGFFbmRQdHIgPj0gYVN0YXJ0UHRyKQorICAgIHsKKyAgICAgICAgZGlzdGFuY2UgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGFFbmRQdHIgLSBhU3RhcnRQdHIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBkaXN0YW5jZSAgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1CdWZmZXJFbmQgLSBhU3RhcnRQdHIpOworICAgICAgICBkaXN0YW5jZSArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGFFbmRQdHIgLSBtQnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGRpc3RhbmNlKTsKK30KKworLy8gV3JpdGVzIGEgdWludDE2IHZhbHVlIGF0IHRoZSBnaXZlbiBidWZmZXIgcG9pbnRlciAoYmlnLWVuZGlhbiBzdHlsZSkuCit2b2lkIE5jcEZyYW1lQnVmZmVyOjpXcml0ZVVpbnQxNkF0KHVpbnQ4X3QgKmFCdWZQdHIsIHVpbnQxNl90IGFWYWx1ZSkKK3sKKyAgICAqYUJ1ZlB0ciA9IChhVmFsdWUgPj4gOCk7CisgICAgKk5leHQoYUJ1ZlB0cikgPSAoYVZhbHVlICYgMHhmZik7Cit9CisKKy8vIFJlYWRzIGEgdWludDE2IHZhbHVlIGF0IHRoZSBnaXZlbiBidWZmZXIgcG9pbnRlciAoYmlnLWVuZGlhbiBzdHlsZSkuCit1aW50MTZfdCBOY3BGcmFtZUJ1ZmZlcjo6UmVhZFVpbnQxNkF0KHVpbnQ4X3QgKmFCdWZQdHIpCit7CisgICAgdWludDE2X3QgdmFsdWU7CisKKyAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoKmFCdWZQdHIpIDw8IDgpOworICAgIHZhbHVlICs9ICpOZXh0KGFCdWZQdHIpOworCisgICAgcmV0dXJuIHZhbHVlOworfQorCisvLyBXcml0ZXMgYSBieXRlcyBhdCB0aGUgd3JpdGUgdGFpbCwgZGlzY2FyZHMgdGhlIGZyYW1lIGlmIGJ1ZmZlciBnZXRzIGZ1bGwuCitvdEVycm9yIE5jcEZyYW1lQnVmZmVyOjpJbkZyYW1lRmVlZEJ5dGUodWludDhfdCBhQnl0ZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90ICpuZXdUYWlsID0gTmV4dChtV3JpdGVTZWdtZW50VGFpbCk7CisKKyAgICBWZXJpZnlPckV4aXQobmV3VGFpbCAhPSBtUmVhZEZyYW1lU3RhcnQsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAqbVdyaXRlU2VnbWVudFRhaWwgPSBhQnl0ZTsKKyAgICBtV3JpdGVTZWdtZW50VGFpbCA9IG5ld1RhaWw7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIEluRnJhbWVEaXNjYXJkKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisvLyBUaGlzIG1ldGhvZCBiZWdpbnMgYSBuZXcgc2VnbWVudCAoaWYgb25lIGlzIG5vdCBhbHJlYWR5IG9wZW4pCitvdEVycm9yIE5jcEZyYW1lQnVmZmVyOjpJbkZyYW1lQmVnaW5TZWdtZW50KHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3QgaGVhZGVyRmxhZ3MgPSBrU2VnbWVudEhlYWRlck5vRmxhZzsKKworICAgIC8vIFZlcmlmeSB0aGF0IHNlZ21lbnQgaXMgbm90IHlldCBzdGFydGVkIChpLmUuLCBoZWFkIGFuZCB0YWlsIGFyZSB0aGUgc2FtZSkuCisgICAgVmVyaWZ5T3JFeGl0KG1Xcml0ZVNlZ21lbnRIZWFkID09IG1Xcml0ZVNlZ21lbnRUYWlsKTsKKworICAgIC8vIElmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgbmV3IGZyYW1lIChpLmUuLCBmcmFtZSBzdGFydCBpcyBzYW1lIGFzIHNlZ21lbnQgaGVhZCkKKyAgICBpZiAobVdyaXRlRnJhbWVTdGFydCA9PSBtV3JpdGVTZWdtZW50SGVhZCkKKyAgICB7CisgICAgICAgIGhlYWRlckZsYWdzIHw9IGtTZWdtZW50SGVhZGVyTmV3RnJhbWVGbGFnOworICAgIH0KKworICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIHRoZSBzZWdtZW50IGhlYWRlci4KKyAgICBmb3IgKHVpbnQxNl90IGkgPSBrU2VnbWVudEhlYWRlclNpemU7IGk7IGktLSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbkZyYW1lRmVlZEJ5dGUoMCkpOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBmbGFncyBhdCB0aGUgc2VnbWVudCBoZWFkCisgICAgV3JpdGVVaW50MTZBdChtV3JpdGVTZWdtZW50SGVhZCwgaGVhZGVyRmxhZ3MpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBjbG9zZXMvZW5kcyB0aGUgY3VycmVudCBzZWdtZW50Lgordm9pZCBOY3BGcmFtZUJ1ZmZlcjo6SW5GcmFtZUVuZFNlZ21lbnQodWludDE2X3QgYUhlYWRlckZsYWdzKQoreworICAgIHVpbnQxNl90IHNlZ21lbnRMZW5ndGg7CisgICAgdWludDE2X3QgaGVhZGVyOworCisgICAgc2VnbWVudExlbmd0aCA9IEdldERpc3RhbmNlKG1Xcml0ZVNlZ21lbnRIZWFkLCBtV3JpdGVTZWdtZW50VGFpbCk7CisKKyAgICBpZiAoc2VnbWVudExlbmd0aCA+PSBrU2VnbWVudEhlYWRlclNpemUpCisgICAgeworICAgICAgICAvLyBSZWR1Y2UgdGhlIGhlYWRlciBzaXplLgorICAgICAgICBzZWdtZW50TGVuZ3RoIC09IGtTZWdtZW50SGVhZGVyU2l6ZTsKKworICAgICAgICAvLyBVcGRhdGUgdGhlIGxlbmd0aCBhbmQgdGhlIGZsYWdzIGluIHNlZ21lbnQgaGVhZGVyIChhdCBzZWdtZW50IGhlYWQgcG9pbnRlcikuCisgICAgICAgIGhlYWRlciA9IFJlYWRVaW50MTZBdChtV3JpdGVTZWdtZW50SGVhZCk7CisgICAgICAgIGhlYWRlciB8PSAoc2VnbWVudExlbmd0aCAmIGtTZWdtZW50SGVhZGVyTGVuZ3RoTWFzayk7CisgICAgICAgIGhlYWRlciB8PSBhSGVhZGVyRmxhZ3M7CisgICAgICAgIFdyaXRlVWludDE2QXQobVdyaXRlU2VnbWVudEhlYWQsIGhlYWRlcik7CisKKyAgICAgICAgLy8gTW92ZSB0aGUgc2VnbWVudCBoZWFkIHRvIGN1cnJlbnQgdGFpbCAodG8gYmUgcmVhZHkgZm9yIGEgcG9zc2libGUgbmV4dCBzZWdtZW50KS4KKyAgICAgICAgbVdyaXRlU2VnbWVudEhlYWQgPSBtV3JpdGVTZWdtZW50VGFpbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBjdXJyZW50IHNlZ21lbnQgKG1vdmUgdGhlIHRhaWwgYmFjayB0byBoZWFkKS4KKyAgICAgICAgbVdyaXRlU2VnbWVudFRhaWwgPSBtV3JpdGVTZWdtZW50SGVhZDsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0aG9kIGRpc2NhcmRzIHRoZSBjdXJyZW50IGZyYW1lLgordm9pZCBOY3BGcmFtZUJ1ZmZlcjo6SW5GcmFtZURpc2NhcmQodm9pZCkKK3sKKyAgICBvdE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICAvLyBNb3ZlIHRoZSB3cml0ZSBzZWdtZW50IGhlYWQgYW5kIHRhaWwgcG9pbnRlcnMgYmFjayB0byBmcmFtZSBzdGFydC4KKyAgICBtV3JpdGVTZWdtZW50SGVhZCA9IG1Xcml0ZVNlZ21lbnRUYWlsID0gbVdyaXRlRnJhbWVTdGFydDsKKworICAgIC8vIEZyZWUgYW55IG1lc3NhZ2VzIGFzc29jaWF0ZWQgd2l0aCBjdXJyZW50IGZyYW1lLgorICAgIHdoaWxlICgobWVzc2FnZSA9IG90TWVzc2FnZVF1ZXVlR2V0SGVhZCgmbVdyaXRlRnJhbWVNZXNzYWdlUXVldWUpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgb3RNZXNzYWdlUXVldWVEZXF1ZXVlKCZtV3JpdGVGcmFtZU1lc3NhZ2VRdWV1ZSwgbWVzc2FnZSk7CisgICAgICAgIG90TWVzc2FnZUZyZWUobWVzc2FnZSk7CisgICAgfQorfQorCitvdEVycm9yIE5jcEZyYW1lQnVmZmVyOjpJbkZyYW1lQmVnaW4odm9pZCkKK3sKKyAgICAvLyBEaXNjYXJkIGFueSBwcmV2aW91cyBmcmFtZS4KKyAgICBJbkZyYW1lRGlzY2FyZCgpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTmNwRnJhbWVCdWZmZXI6OkluRnJhbWVGZWVkRGF0YShjb25zdCB1aW50OF90ICphRGF0YUJ1ZmZlciwgdWludDE2X3QgYURhdGFCdWZmZXJMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBCZWdpbiBhIG5ldyBzZWdtZW50IChpZiB3ZSBhcmUgbm90IGluIG1pZGRsZSBvZiBzZWdtZW50IGFscmVhZHkpLgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbkZyYW1lQmVnaW5TZWdtZW50KCkpOworCisgICAgLy8gV3JpdGUgdGhlIGRhdGEgYnVmZmVyCisgICAgd2hpbGUgKGFEYXRhQnVmZmVyTGVuZ3RoLS0pCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSW5GcmFtZUZlZWRCeXRlKCphRGF0YUJ1ZmZlcisrKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BGcmFtZUJ1ZmZlcjo6SW5GcmFtZUZlZWRNZXNzYWdlKG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBCZWdpbiBhIG5ldyBzZWdtZW50IChpZiB3ZSBhcmUgbm90IGluIG1pZGRsZSBvZiBzZWdtZW50IGFscmVhZHkpLgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbkZyYW1lQmVnaW5TZWdtZW50KCkpOworCisgICAgLy8gRW5xdWV1ZSB0aGUgbWVzc2FnZSBpbiB0aGUgY3VycmVudCB3cml0ZSBmcmFtZSBxdWV1ZS4KKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RNZXNzYWdlUXVldWVFbnF1ZXVlKCZtV3JpdGVGcmFtZU1lc3NhZ2VRdWV1ZSwgYU1lc3NhZ2UpKTsKKworICAgIC8vIEVuZC9DbG9zZSB0aGUgY3VycmVudCBzZWdtZW50IG1hcmtpbmcgdGhlIGZsYWcgdGhhdCBpdCBjb250YWlucyBhbiBhc3NvY2lhdGVkIG1lc3NhZ2UuCisgICAgSW5GcmFtZUVuZFNlZ21lbnQoa1NlZ21lbnRIZWFkZXJNZXNzYWdlSW5kaWNhdG9yRmxhZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEZyYW1lQnVmZmVyOjpJbkZyYW1lRW5kKHZvaWQpCit7CisgICAgb3RNZXNzYWdlICptZXNzYWdlOworCisgICAgLy8gRW5kL0Nsb3NlIHRoZSBjdXJyZW50IHNlZ21lbnQgKGlmIGFueSkuCisgICAgSW5GcmFtZUVuZFNlZ21lbnQoa1NlZ21lbnRIZWFkZXJOb0ZsYWcpOworCisgICAgLy8gU2F2ZSBhbmQgdXNlIHRoZSBmcmFtZSBzdGFydCBwb2ludGVyIGFzIHRoZSB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoZSBmcmFtZS4KKyAgICBtV3JpdGVGcmFtZVRhZyA9IG1Xcml0ZUZyYW1lU3RhcnQ7CisKKyAgICAvLyBVcGRhdGUgdGhlIGZyYW1lIHN0YXJ0IHBvaW50ZXIgdG8gY3VycmVudCBzZWdtZW50IGhlYWQgdG8gYmUgcmVhZHkgZm9yIG5leHQgZnJhbWUuCisgICAgbVdyaXRlRnJhbWVTdGFydCA9IG1Xcml0ZVNlZ21lbnRIZWFkOworCisgICAgLy8gTW92ZSBhbGwgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIGZyYW1lIHF1ZXVlIHRvIHRoZSBtYWluIHF1ZXVlLgorICAgIHdoaWxlICgobWVzc2FnZSA9IG90TWVzc2FnZVF1ZXVlR2V0SGVhZCgmbVdyaXRlRnJhbWVNZXNzYWdlUXVldWUpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgb3RNZXNzYWdlUXVldWVEZXF1ZXVlKCZtV3JpdGVGcmFtZU1lc3NhZ2VRdWV1ZSwgbWVzc2FnZSk7CisgICAgICAgIG90TWVzc2FnZVF1ZXVlRW5xdWV1ZSgmbU1lc3NhZ2VRdWV1ZSwgbWVzc2FnZSk7CisgICAgfQorCisgICAgaWYgKG1GcmFtZUFkZGVkQ2FsbGJhY2sgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1GcmFtZUFkZGVkQ2FsbGJhY2sobUZyYW1lQWRkZWRDb250ZXh0LCBtV3JpdGVGcmFtZVRhZywgdGhpcyk7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK05jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBOY3BGcmFtZUJ1ZmZlcjo6SW5GcmFtZUdldExhc3RUYWcodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVdyaXRlRnJhbWVUYWc7Cit9CisKK2Jvb2wgTmNwRnJhbWVCdWZmZXI6OklzRW1wdHkodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1SZWFkRnJhbWVTdGFydCA9PSBtV3JpdGVGcmFtZVN0YXJ0KTsKK30KKworLy8gU3RhcnQvUHJlcGFyZSBhIG5ldyBzZWdtZW50IGZvciByZWFkaW5nLgorb3RFcnJvciBOY3BGcmFtZUJ1ZmZlcjo6T3V0RnJhbWVQcmVwYXJlU2VnbWVudCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQxNl90IGhlYWRlcjsKKworICAgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgICAgLy8gR28gdG8gdGhlIG5leHQgc2VnbWVudCAoc2V0IHRoZSBzZWdtZW50IGhlYWQgdG8gY3VycmVudCBzZWdtZW50J3MgZW5kL3RhaWwpLgorICAgICAgICBtUmVhZFNlZ21lbnRIZWFkID0gbVJlYWRTZWdtZW50VGFpbDsKKworICAgICAgICAvLyBFbnN1cmUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlYWQgKGkuZS4gc2VnbWVudCBoZWFkIGlzIG5vdCBhdCBzdGFydCBvZiBmcmFtZSBiZWluZyB3cml0dGVuKS4KKyAgICAgICAgVmVyaWZ5T3JFeGl0KG1SZWFkU2VnbWVudEhlYWQgIT0gbVdyaXRlRnJhbWVTdGFydCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgICAgIC8vIFJlYWQgdGhlIHNlZ21lbnQgaGVhZGVyLgorICAgICAgICBoZWFkZXIgPSBSZWFkVWludDE2QXQobVJlYWRTZWdtZW50SGVhZCk7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBzZWdtZW50IGlzIHRoZSBzdGFydCBvZiBhIGZyYW1lLgorICAgICAgICBpZiAoaGVhZGVyICYga1NlZ21lbnRIZWFkZXJOZXdGcmFtZUZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoaXMgc2VnbWVudCBpcyBzdGFydCBvZiBjdXJyZW50IGZyYW1lLCBvdGhlcndpc2UgdGhlIGN1cnJlbnQgZnJhbWUgaXMgZmluaXNoZWQuCisgICAgICAgICAgICBWZXJpZnlPckV4aXQobVJlYWRTZWdtZW50SGVhZCA9PSBtUmVhZEZyYW1lU3RhcnQsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbmQgdGFpbC9lbmQgb2YgY3VycmVudCBzZWdtZW50LgorICAgICAgICBtUmVhZFNlZ21lbnRUYWlsID0gQWR2YW5jZShtUmVhZFNlZ21lbnRIZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2VnbWVudEhlYWRlclNpemUgKyAoaGVhZGVyICYga1NlZ21lbnRIZWFkZXJMZW5ndGhNYXNrKSk7CisKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IHJlYWQgcG9pbnRlciB0byBza2lwIHRoZSBzZWdtZW50IGhlYWRlci4KKyAgICAgICAgbVJlYWRQb2ludGVyID0gQWR2YW5jZShtUmVhZFNlZ21lbnRIZWFkLCBrU2VnbWVudEhlYWRlclNpemUpOworCisgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBkYXRhIGJ5dGVzIHRvIGJlIHJlYWQgaW4gdGhpcyBzZWdtZW50IChpLmUuIHJlYWQgcG9pbnRlciBub3QgYXQgdGhlIHRhaWwpLgorICAgICAgICBpZiAobVJlYWRQb2ludGVyICE9IG1SZWFkU2VnbWVudFRhaWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhdGUgdG8gYEluU2VnbWVudGAgYW5kIHJldHVybi4KKyAgICAgICAgICAgIG1SZWFkU3RhdGUgPSBrUmVhZFN0YXRlSW5TZWdtZW50OworCisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBObyBkYXRhIGluIHRoaXMgc2VnbWVudCwgIHByZXBhcmUgYW55IGFwcGVuZGVkL2Fzc29jaWF0ZWQgbWVzc2FnZSBvZiB0aGlzIHNlZ21lbnQuCisgICAgICAgIGlmIChPdXRGcmFtZVByZXBhcmVNZXNzYWdlKCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbWVzc2FnZSAoYFByZXBhcmVNZXNzYWdlKClgIHJldHVybmVkIGFuIGVycm9yKSwgbG9vcCBiYWNrIHRvIHByZXBhcmUgdGhlIG5leHQgc2VnbWVudC4KKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG1SZWFkU3RhdGUgPSBrUmVhZFN0YXRlRG9uZTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKy8vIFRoaXMgbWV0aG9kIHByZXBhcmVzIGFuIGFzc29jaWF0ZWQgbWVzc2FnZSBpbiBjdXJyZW50IHNlZ21lbnQgYW5kIGZpbGxzIHRoZSBtZXNzYWdlIGJ1ZmZlci4gSXQgcmV0dXJucworLy8gVGhyZWFkRXJyb3JfTm90Rm91bmQgaWYgdGhlcmUgaXMgbm8gbWVzc2FnZSBvciBpZiB0aGUgbWVzc2FnZSBoYXMgbm8gY29udGVudC4KK290RXJyb3IgTmNwRnJhbWVCdWZmZXI6Ok91dEZyYW1lUHJlcGFyZU1lc3NhZ2Uodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MTZfdCBoZWFkZXI7CisKKyAgICAvLyBSZWFkIHRoZSBzZWdtZW50IGhlYWRlcgorICAgIGhlYWRlciA9IFJlYWRVaW50MTZBdChtUmVhZFNlZ21lbnRIZWFkKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBzZWdtZW50IGhlYWRlciBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhbiBhc3NvY2lhdGVkIG1lc3NhZ2Ugb3IgcmV0dXJuIGBOb3RGb3VuZGAgZXJyb3IuCisgICAgVmVyaWZ5T3JFeGl0KChoZWFkZXIgJiBrU2VnbWVudEhlYWRlck1lc3NhZ2VJbmRpY2F0b3JGbGFnKSAhPSAwLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIGN1cnJlbnQgbWVzc2FnZSBmcm9tIHRoZSBxdWV1ZS4KKyAgICBtUmVhZE1lc3NhZ2UgPSAobVJlYWRNZXNzYWdlID09IE5VTEwpID8KKyAgICAgICAgICAgICAgICAgICBvdE1lc3NhZ2VRdWV1ZUdldEhlYWQoJm1NZXNzYWdlUXVldWUpIDoKKyAgICAgICAgICAgICAgICAgICBvdE1lc3NhZ2VRdWV1ZUdldE5leHQoJm1NZXNzYWdlUXVldWUsIG1SZWFkTWVzc2FnZSk7CisKKyAgICBWZXJpZnlPckV4aXQobVJlYWRNZXNzYWdlICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworICAgIC8vIFJlc2V0IHRoZSBvZmZzZXQgZm9yIHJlYWRpbmcgdGhlIG1lc3NhZ2UuCisgICAgbVJlYWRNZXNzYWdlT2Zmc2V0ID0gMDsKKworICAgIC8vIEZpbGwgdGhlIGNvbnRlbnQgZnJvbSBjdXJyZW50IG1lc3NhZ2UgaW50byB0aGUgbWVzc2FnZSBidWZmZXIuCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dEZyYW1lRmlsbE1lc3NhZ2VCdWZmZXIoKSk7CisKKyAgICAvLyBJZiBhbGwgc3VjY2Vzc2Z1bCwgc2V0IHRoZSBzdGF0ZSB0byBgSW5NZXNzYWdlYC4KKyAgICBtUmVhZFN0YXRlID0ga1JlYWRTdGF0ZUluTWVzc2FnZTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGZpbGxzIGNvbnRlbnQgZnJvbSBjdXJyZW50IG1lc3NhZ2UgaW50byB0aGUgbWVzc2FnZSBidWZmZXIuIEl0IHJldHVybnMgT1RfRVJST1JfTk9UX0ZPVU5EIGlmIG5vIG1vcmUKKy8vIGNvbnRlbnQgaW4gdGhlIGN1cnJlbnQgbWVzc2FnZS4KK290RXJyb3IgTmNwRnJhbWVCdWZmZXI6Ok91dEZyYW1lRmlsbE1lc3NhZ2VCdWZmZXIodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBpbnQgcmVhZExlbmd0aDsKKworICAgIFZlcmlmeU9yRXhpdChtUmVhZE1lc3NhZ2UgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgVmVyaWZ5T3JFeGl0KG1SZWFkTWVzc2FnZU9mZnNldCA8IG90TWVzc2FnZUdldExlbmd0aChtUmVhZE1lc3NhZ2UpLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICAvLyBSZWFkIHBvcnRpb24gb2YgY3VycmVudCBtZXNzYWdlIGZyb20gdGhlIG9mZnNldCBpbnRvIG1lc3NhZ2UgYnVmZmVyLgorICAgIHJlYWRMZW5ndGggPSBvdE1lc3NhZ2VSZWFkKG1SZWFkTWVzc2FnZSwgbVJlYWRNZXNzYWdlT2Zmc2V0LCBtTWVzc2FnZUJ1ZmZlciwgc2l6ZW9mKG1NZXNzYWdlQnVmZmVyKSk7CisKKyAgICBWZXJpZnlPckV4aXQocmVhZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgbWVzc2FnZSBvZmZzZXQsIHNldCB1cCB0aGUgbWVzc2FnZSB0YWlsLCBhbmQgc2V0IHJlYWQgcG9pbnRlciB0byBzdGFydCBvZiBtZXNzYWdlIGJ1ZmZlci4KKworICAgIG1SZWFkTWVzc2FnZU9mZnNldCArPSByZWFkTGVuZ3RoOworCisgICAgbVJlYWRNZXNzYWdlVGFpbCA9IG1NZXNzYWdlQnVmZmVyICsgcmVhZExlbmd0aDsKKworICAgIG1SZWFkUG9pbnRlciA9IG1NZXNzYWdlQnVmZmVyOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BGcmFtZUJ1ZmZlcjo6T3V0RnJhbWVCZWdpbih2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgbVJlYWRNZXNzYWdlID0gTlVMTDsKKworICAgIC8vIE1vdmUgdGhlIHNlZ21lbnQgaGVhZCBhbmQgdGFpbCB0byBzdGFydCBvZiBmcmFtZS4KKyAgICBtUmVhZFNlZ21lbnRIZWFkID0gbVJlYWRTZWdtZW50VGFpbCA9IG1SZWFkRnJhbWVTdGFydDsKKworICAgIC8vIFByZXBhcmUgdGhlIGN1cnJlbnQgc2VnbWVudCBmb3IgcmVhZGluZy4KKyAgICBlcnJvciA9IE91dEZyYW1lUHJlcGFyZVNlZ21lbnQoKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworYm9vbCBOY3BGcmFtZUJ1ZmZlcjo6T3V0RnJhbWVIYXNFbmRlZCh2b2lkKQoreworICAgIHJldHVybiAobVJlYWRTdGF0ZSA9PSBrUmVhZFN0YXRlRG9uZSk7Cit9CisKK3VpbnQ4X3QgTmNwRnJhbWVCdWZmZXI6Ok91dEZyYW1lUmVhZEJ5dGUodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIHVpbnQ4X3QgcmV0dmFsID0ga1JlYWRCeXRlQWZ0ZXJGcmFtZUhhc0VuZGVkOworCisgICAgc3dpdGNoIChtUmVhZFN0YXRlKQorICAgIHsKKyAgICBjYXNlIGtSZWFkU3RhdGVEb25lOgorCisgICAgICAgIHJldHZhbCA9IGtSZWFkQnl0ZUFmdGVyRnJhbWVIYXNFbmRlZDsKKworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga1JlYWRTdGF0ZUluU2VnbWVudDoKKworICAgICAgICAvLyBSZWFkIGEgYnl0ZSBmcm9tIGN1cnJlbnQgcmVhZCBwb2ludGVyIGFuZCBtb3ZlIHRoZSByZWFkIHBvaW50ZXIgZm9yd2FyZC4KKyAgICAgICAgcmV0dmFsID0gKm1SZWFkUG9pbnRlcjsKKyAgICAgICAgbVJlYWRQb2ludGVyID0gTmV4dChtUmVhZFBvaW50ZXIpOworCisgICAgICAgIC8vIENoZWNrIGlmIGF0IGVuZCBvZiBjdXJyZW50IHNlZ21lbnQuCisgICAgICAgIGlmIChtUmVhZFBvaW50ZXIgPT0gbVJlYWRTZWdtZW50VGFpbCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUHJlcGFyZSBhbnkgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZWdtZW50LgorICAgICAgICAgICAgZXJyb3IgPSBPdXRGcmFtZVByZXBhcmVNZXNzYWdlKCk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1lc3NhZ2UsIG1vdmUgdG8gbmV4dCBzZWdtZW50IChpZiBhbnkpLgorICAgICAgICAgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgT3V0RnJhbWVQcmVwYXJlU2VnbWVudCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtSZWFkU3RhdGVJbk1lc3NhZ2U6CisKKyAgICAgICAgLy8gUmVhZCBhIGJ5dGUgZnJvbSBjdXJyZW50IHJlYWQgcG9pbnRlciBhbmQgbW92ZSB0aGUgcmVhZCBwb2ludGVyIGZvcndhcmQuCisgICAgICAgIHJldHZhbCA9ICptUmVhZFBvaW50ZXI7CisgICAgICAgIG1SZWFkUG9pbnRlcisrOworCisgICAgICAgIC8vIENoZWNrIGlmIGF0IHRoZSBlbmQgb2YgY29udGVudCBpbiBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgICAgaWYgKG1SZWFkUG9pbnRlciA9PSBtUmVhZE1lc3NhZ2VUYWlsKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGaWxsIG1vcmUgYnl0ZXMgZnJvbSBjdXJyZW50IG1lc3NhZ2UgaW50byBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgICAgICAgIGVycm9yID0gT3V0RnJhbWVGaWxsTWVzc2FnZUJ1ZmZlcigpOworCisgICAgICAgICAgICAvLyBJZiBubyBtb3JlIGJ5dGVzIGluIHRoZSBtZXNzYWdlLCBtb3ZlIHRvIG5leHQgc2VnbWVudCAoaWYgYW55KS4KKyAgICAgICAgICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE91dEZyYW1lUHJlcGFyZVNlZ21lbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3VpbnQxNl90IE5jcEZyYW1lQnVmZmVyOjpPdXRGcmFtZVJlYWQodWludDE2X3QgYVJlYWRMZW5ndGgsIHVpbnQ4X3QgKmFEYXRhQnVmZmVyKQoreworICAgIHVpbnQxNl90IGJ5dGVzUmVhZCA9IDA7CisKKyAgICBmb3IgKGJ5dGVzUmVhZCA9IDA7IChieXRlc1JlYWQgPCBhUmVhZExlbmd0aCkgJiYgIU91dEZyYW1lSGFzRW5kZWQoKTsgYnl0ZXNSZWFkKyspCisgICAgeworICAgICAgICAqYURhdGFCdWZmZXIrKyA9IE91dEZyYW1lUmVhZEJ5dGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnl0ZXNSZWFkOworfQorCitvdEVycm9yIE5jcEZyYW1lQnVmZmVyOjpPdXRGcmFtZVJlbW92ZSh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmJ1ZlB0cjsKKyAgICBvdE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgdWludDE2X3QgaGVhZGVyOworICAgIEZyYW1lVGFnIHRhZzsKKworICAgIFZlcmlmeU9yRXhpdCghSXNFbXB0eSgpLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICAvLyBTYXZlIHRoZSBmcmFtZSBzdGFydCBwb2ludGVyIGFzIHRoZSB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoZSBmcmFtZSBiZWluZyByZW1vdmVkLgorICAgIHRhZyA9IG1SZWFkRnJhbWVTdGFydDsKKworICAgIC8vIEJlZ2luIGF0IHRoZSBzdGFydCBvZiBjdXJyZW50IGZyYW1lIGFuZCBtb3ZlIHRocm91Z2ggYWxsIHNlZ21lbnRzLgorCisgICAgYnVmUHRyID0gbVJlYWRGcmFtZVN0YXJ0OworCisgICAgd2hpbGUgKGJ1ZlB0ciAhPSBtV3JpdGVGcmFtZVN0YXJ0KQorICAgIHsKKyAgICAgICAgLy8gUmVhZCB0aGUgc2VnbWVudCBoZWFkZXIKKyAgICAgICAgaGVhZGVyID0gUmVhZFVpbnQxNkF0KGJ1ZlB0cik7CisKKyAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc2VnbWVudCBkZWZpbmVzIGEgbmV3IGZyYW1lLCBhbmQgaXQgaXMgbm90IHRoZSBzdGFydCBvZiBjdXJyZW50IGZyYW1lLCB0aGVuIHdlIGhhdmUgcmVhY2hlZAorICAgICAgICAvLyBlbmQgb2YgY3VycmVudCBmcmFtZS4KKyAgICAgICAgaWYgKGhlYWRlciAmIGtTZWdtZW50SGVhZGVyTmV3RnJhbWVGbGFnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYnVmUHRyICE9IG1SZWFkRnJhbWVTdGFydCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGN1cnJlbnQgc2VnbWVudCBoYXMgYW4gYXBwZW5kZWQgbWVzc2FnZSwgcmVtb3ZlIGl0IGZyb20gbWVzc2FnZSBxdWV1ZSBhbmQgZnJlZSBpdC4KKyAgICAgICAgaWYgKGhlYWRlciAmIGtTZWdtZW50SGVhZGVyTWVzc2FnZUluZGljYXRvckZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgobWVzc2FnZSA9IG90TWVzc2FnZVF1ZXVlR2V0SGVhZCgmbU1lc3NhZ2VRdWV1ZSkpICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RNZXNzYWdlUXVldWVEZXF1ZXVlKCZtTWVzc2FnZVF1ZXVlLCBtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBvdE1lc3NhZ2VGcmVlKG1lc3NhZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTW92ZSB0aGUgcG9pbnRlciB0byBuZXh0IHNlZ21lbnQuCisgICAgICAgIGJ1ZlB0ciA9IEFkdmFuY2UoYnVmUHRyLCBrU2VnbWVudEhlYWRlclNpemUgKyAoaGVhZGVyICYga1NlZ21lbnRIZWFkZXJMZW5ndGhNYXNrKSk7CisgICAgfQorCisgICAgbVJlYWRGcmFtZVN0YXJ0ID0gYnVmUHRyOworCisgICAgbVJlYWRTdGF0ZSA9IGtSZWFkU3RhdGVEb25lOworICAgIG1SZWFkRnJhbWVMZW5ndGggPSBrVW5rbm93bkZyYW1lTGVuZ3RoOworCisgICAgaWYgKG1GcmFtZVJlbW92ZWRDYWxsYmFjayAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbUZyYW1lUmVtb3ZlZENhbGxiYWNrKG1GcmFtZVJlbW92ZWRDb250ZXh0LCB0YWcsIHRoaXMpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKwordWludDE2X3QgTmNwRnJhbWVCdWZmZXI6Ok91dEZyYW1lR2V0TGVuZ3RoKHZvaWQpCit7CisgICAgdWludDE2X3QgZnJhbWVMZW5ndGggPSAwOworICAgIHVpbnQxNl90IGhlYWRlcjsKKyAgICB1aW50OF90ICpidWZQdHI7CisgICAgb3RNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKworICAgIC8vIElmIHRoZSBmcmFtZSBsZW5ndGggd2FzIGNhbGN1bGF0ZWQgYmVmb3JlLCByZXR1cm4gdGhlIHByZXZpb3VzbHkgY2FsY3VsYXRlZCBsZW5ndGguCisgICAgVmVyaWZ5T3JFeGl0KG1SZWFkRnJhbWVMZW5ndGggPT0ga1Vua25vd25GcmFtZUxlbmd0aCwgZnJhbWVMZW5ndGggPSBtUmVhZEZyYW1lTGVuZ3RoKTsKKworICAgIFZlcmlmeU9yRXhpdCghSXNFbXB0eSgpLCBmcmFtZUxlbmd0aCA9IDApOworCisgICAgLy8gQ2FsY3VsYXRlIGZyYW1lIGxlbmd0aCBieSBhZGRpbmcgbGVuZ3RoIG9mIGFsbCBzZWdtZW50cyBhbmQgbWVzc2FnZXMgd2l0aGluIHRoZSBjdXJyZW50IGZyYW1lLgorCisgICAgYnVmUHRyID0gbVJlYWRGcmFtZVN0YXJ0OworCisgICAgd2hpbGUgKGJ1ZlB0ciAhPSBtV3JpdGVGcmFtZVN0YXJ0KQorICAgIHsKKyAgICAgICAgLy8gUmVhZCB0aGUgc2VnbWVudCBoZWFkZXIKKyAgICAgICAgaGVhZGVyID0gUmVhZFVpbnQxNkF0KGJ1ZlB0cik7CisKKyAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc2VnbWVudCBkZWZpbmVzIGEgbmV3IGZyYW1lLCBhbmQgaXQgaXMgbm90IHRoZSBzdGFydCBvZiBjdXJyZW50IGZyYW1lLCB0aGVuIHdlIGhhdmUgcmVhY2hlZAorICAgICAgICAvLyBlbmQgb2YgY3VycmVudCBmcmFtZS4KKyAgICAgICAgaWYgKGhlYWRlciAmIGtTZWdtZW50SGVhZGVyTmV3RnJhbWVGbGFnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYnVmUHRyICE9IG1SZWFkRnJhbWVTdGFydCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGN1cnJlbnQgc2VnbWVudCBoYXMgYW4gYXNzb2NpYXRlZCBtZXNzYWdlLCBhZGQgaXRzIGxlbmd0aCB0byBmcmFtZSBsZW5ndGguCisgICAgICAgIGlmIChoZWFkZXIgJiBrU2VnbWVudEhlYWRlck1lc3NhZ2VJbmRpY2F0b3JGbGFnKQorICAgICAgICB7CisgICAgICAgICAgICBtZXNzYWdlID0gKG1lc3NhZ2UgPT0gTlVMTCkgPworICAgICAgICAgICAgICAgICAgICAgIG90TWVzc2FnZVF1ZXVlR2V0SGVhZCgmbU1lc3NhZ2VRdWV1ZSkgOgorICAgICAgICAgICAgICAgICAgICAgIG90TWVzc2FnZVF1ZXVlR2V0TmV4dCgmbU1lc3NhZ2VRdWV1ZSwgbWVzc2FnZSk7CisKKyAgICAgICAgICAgIGlmIChtZXNzYWdlICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVMZW5ndGggKz0gb3RNZXNzYWdlR2V0TGVuZ3RoKG1lc3NhZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIHRoZSBsZW5ndGggb2YgY3VycmVudCBzZWdtZW50IHRvIHRoZSBmcmFtZSBsZW5ndGguCisgICAgICAgIGZyYW1lTGVuZ3RoICs9IChoZWFkZXIgJiBrU2VnbWVudEhlYWRlckxlbmd0aE1hc2spOworCisgICAgICAgIC8vIE1vdmUgdGhlIHBvaW50ZXIgdG8gbmV4dCBzZWdtZW50LgorICAgICAgICBidWZQdHIgPSBBZHZhbmNlKGJ1ZlB0ciwga1NlZ21lbnRIZWFkZXJTaXplICsgKGhlYWRlciAmIGtTZWdtZW50SGVhZGVyTGVuZ3RoTWFzaykpOworICAgIH0KKworICAgIC8vIFJlbWVtYmVyIHRoZSBjYWxjdWxhdGVkIGZyYW1lIGxlbmd0aCBmb3IgY3VycmVudCBmcmFtZS4KKyAgICBtUmVhZEZyYW1lTGVuZ3RoID0gZnJhbWVMZW5ndGg7CisKK2V4aXQ6CisgICAgcmV0dXJuIGZyYW1lTGVuZ3RoOworfQorCitOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgTmNwRnJhbWVCdWZmZXI6Ok91dEZyYW1lR2V0VGFnKHZvaWQpIGNvbnN0Cit7CisgICAgLy8gSWYgYnVmZmVyIGlzIGVtcHR5IHVzZSBga0ludmFsaWRUYWdgLCBvdGhlcndpc2UgdXNlIHRoZSBmcmFtZSBzdGFydCBwb2ludGVyIGFzIHRoZSB0YWcgYXNzb2NpYXRlZCB3aXRoCisgICAgLy8gY3VycmVudCBvdXQgZnJhbWUgYmVpbmcgcmVhZAorCisgICAgcmV0dXJuIElzRW1wdHkoKSA/IGtJbnZhbGlkVGFnIDogbVJlYWRGcmFtZVN0YXJ0OworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9uY3AvbmNwX2J1ZmZlci5ocHAgYi9zcmMvbmNwL25jcF9idWZmZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOWZhMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbmNwL25jcF9idWZmZXIuaHBwCkBAIC0wLDAgKzEsNDE5IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIE5DUCBmcmFtZSBidWZmZXIgY2xhc3MuCisgKi8KKworI2lmbmRlZiBOQ1BfRlJBTUVfQlVGRkVSX0hQUF8KKyNkZWZpbmUgTkNQX0ZSQU1FX0JVRkZFUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgTmNwRnJhbWVCdWZmZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBmcmFtZSB0YWcgdHlwZS4gRnJhbWUgdGFncyBjYW4gYmUgY29tcGFyZWQgd2l0aCBvbmUgYW5vdGhlciB1c2luZyBvcGVyYXRvciBgPT1gLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiBjb25zdCB2b2lkICpGcmFtZVRhZzsKKworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIHRhZyB0byBpbmRpY2F0ZSBhbiBpbnZhbGlkIHRhZyAoZS5nLiwgd2hlbiB0aGVyZSBpcyBubyBmcmFtZSkuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgY29uc3QgRnJhbWVUYWcga0ludmFsaWRUYWc7CisKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIGEgZnVuY3Rpb24gcG9pbnRlciBjYWxsYmFjayB3aGljaCBpcyBpbnZva2VkIHRvIGluZm9ybSBhIGNoYW5nZSBpbiBgTmNwRnJhbWVCdWZmZXJgIGVpdGhlciB3aGVuIGEgbmV3CisgICAgICogZnJhbWUgaXMgYWRkZWQvd3JpdHRlbiB0byBgTmNwRnJhbWVCdWZmZXJgIG9yIHdoZW4gYSBmcmFtZSBpcyByZW1vdmVkIGZyb20gYE5jcEZyYW1lQnVmZmVyYC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFUYWcgICAgICAgICAgICAgVGhlIHRhZyBhc3NvY2lhdGVkIHdpdGggdGhlIGZyYW1lIHdoaWNoIGlzIGFkZGVkIG9yIHJlbW92ZWQuCisgICAgICogQHBhcmFtW2luXSAgYU5jcEZyYW1lQnVmZmVyICBBIHBvaW50ZXIgdG8gdGhlIGBOY3BGcmFtZUJ1ZmZlcmAuCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIHZvaWQgKCpCdWZmZXJDYWxsYmFjaykodm9pZCAqYUNvbnRleHQsIEZyYW1lVGFnIGFUYWcsIE5jcEZyYW1lQnVmZmVyICphTmNwRnJhbWVCdWZmZXIpOworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBjcmVhdGVzIGFuIE5DUCBmcmFtZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVmZmVyICAgICAgICBBIHBvaW50ZXIgdG8gYSBidWZmZXIgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IE5DUCBmcmFtZSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYUJ1ZmZlckxlbmd0aCAgVGhlIGJ1ZmZlciBzaXplIChpbiBieXRlcykuCisgICAgICoKKyAgICAgKi8KKyAgICBOY3BGcmFtZUJ1ZmZlcih1aW50OF90ICphQnVmZmVyLCB1aW50MTZfdCBhQnVmZmVyTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgTkNQIGZyYW1lIGJ1ZmZlci4gQWxsIHRoZSBmcmFtZXMgYXJlIGNsZWFyZWQvcmVtb3ZlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBgRnJhbWVBZGRlZGAgY2FsbGJhY2sgYW5kIGl0cyBjb250ZXh0LgorICAgICAqCisgICAgICogU3Vic2VxdWVudCBjYWxscyB0byB0aGlzIG1ldGhvZCB3aWxsIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgY2FsbGJhY2sgYW5kIGl0cyBjb250ZXh0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lQWRkZWRDYWxsYmFjayAgICAgIENhbGxiYWNrIGludm9rZWQgd2hlbiBhIG5ldyBmcmFtZSBpcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZUFkZGVkQ29udGV4dCAgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgdXNlZCB3aXRoIGZyYW1lIGFkZGVkIGNhbGxiYWNrLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRGcmFtZUFkZGVkQ2FsbGJhY2soQnVmZmVyQ2FsbGJhY2sgYUZyYW1lQWRkZWRDYWxsYmFjaywgdm9pZCAqYUZyYW1lQWRkZWRDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGBGcmFtZVJlbW92ZWRgIGNhbGxiYWNrIGFuZCBpdHMgY29udGV4dC4KKyAgICAgKgorICAgICAqIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcyBtZXRob2Qgd2lsbCBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGNhbGxiYWNrIGFuZCBpdHMgY29udGV4dC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZVJlbW92ZWRDYWxsYmFjayAgICBDYWxsYmFjayBpbnZva2VkIHdoZW4gYSBmcmFtZSBpcyByZW1vdmVkIGZyb20gYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZVJlbW92ZWRDb250ZXh0ICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgdXNlZCB3aXRoIGZyYW1lIHJlbW92ZWQgY2FsbGJhY2suCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEZyYW1lUmVtb3ZlZENhbGxiYWNrKEJ1ZmZlckNhbGxiYWNrIGFGcmFtZVJlbW92ZWRDYWxsYmFjaywgdm9pZCAqYUZyYW1lUmVtb3ZlZENvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYmVnaW5zIGEgbmV3IGlucHV0IGZyYW1lIHRvIGJlIGFkZGVkL3dyaXR0ZW4gdG8gdGhlIGZyYW1lIGJ1ZmZlci4KKworICAgICAqIElmIHRoZXJlIGlzIGEgcHJldmlvdXMgZnJhbWUgYmVpbmcgd3JpdHRlbiAoYEluRnJhbWVFbmQoKWAgaGFzIG5vdCB5ZXQgYmVlbiBjYWxsZWQgb24gdGhlIGZyYW1lKSwgdGhpcyBtZXRob2QKKyAgICAgKiB3aWxsIGRpc2NhcmQgYW5kIGNsZWFyIHRoZSBwcmV2aW91cyB1bmZpbmlzaGVkIGZyYW1lLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYSBuZXcgZnJhbWUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgdG8gc3RhcnQgYSBuZXcgZnJhbWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEluRnJhbWVCZWdpbih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgZGF0YSB0byB0aGUgY3VycmVudCBpbnB1dCBmcmFtZSBiZWluZyB3cml0dGVuIHRvIHRoZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBJZiBubyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLCB0aGlzIG1ldGhvZCB3aWxsIGRpc2NhcmQgYW5kIGNsZWFyIHRoZSBmcmFtZSBiZWZvcmUgcmV0dXJuaW5nIGFuIGVycm9yIHN0YXR1cy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEYXRhQnVmZmVyICAgICAgICBBIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYURhdGFCdWZmZXJMZW5ndGggIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIG5ldyBkYXRhIHRvIHRoZSBmcmFtZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSB0byBhZGQgZGF0YS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgSW5GcmFtZUZlZWREYXRhKGNvbnN0IHVpbnQ4X3QgKmFEYXRhQnVmZmVyLCB1aW50MTZfdCBhRGF0YUJ1ZmZlckxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgbWVzc2FnZSB0byB0aGUgY3VycmVudCBpbnB1dCBmcmFtZSBiZWluZyB3cml0dGVuIHRvIHRoZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBJZiBubyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLCB0aGlzIG1ldGhvZCB3aWxsIGRpc2NhcmQgYW5kIGNsZWFyIHRoZSBmcmFtZSBiZWZvcmUgcmV0dXJuaW5nIGFuIGVycm9yIHN0YXR1cy4KKyAgICAgKiBJbiBjYXNlIG9mIHN1Y2Nlc3MsIHRoZSBwYXNzZWQtaW4gbWVzc2FnZSBAcCBhTWVzc2FnZSB3aWxsIGJlIG93bmVkIGJ5IHRoZSBmcmFtZSBidWZmZXIgaW5zdGFuY2UgYW5kIHdpbGwgYmUKKyAgICAgKiBmcmVlZCB3aGVuIGVpdGhlciB0aGUgdGhlIGZyYW1lIGlzIHJlbW92ZWQgb3IgZGlzY2FyZGVkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICAgICBBICBtZXNzYWdlIHRvIGJlIGFkZGVkIHRvIGN1cnJlbnQgZnJhbWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgbWVzc2FnZSB0byB0aGUgZnJhbWUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSB0byBhZGQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgSW5GcmFtZUZlZWRNZXNzYWdlKG90TWVzc2FnZSAqYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZmluYWxpemVzL2VuZHMgdGhlIGN1cnJlbnQgaW5wdXQgZnJhbWUgYmVpbmcgd3JpdHRlbiB0byB0aGUgYnVmZmVyLgorICAgICAqCisgICAgICogSWYgbm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZSwgdGhpcyBtZXRob2Qgd2lsbCBkaXNjYXJkIGFuZCBjbGVhciB0aGUgZnJhbWUgYmVmb3JlIHJldHVybmluZyBhbiBlcnJvciBzdGF0dXMuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgbWVzc2FnZSB0byB0aGUgZnJhbWUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSB0byBhZGQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgSW5GcmFtZUVuZCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHRhZyBhc3NpZ25lZCB0byBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuL2FkZGVkIGZyYW1lIHRvIE5jcEJ1ZmZlciAoaS5lLiwgbGFzdCBpbnB1dAorICAgICAqIGZyYW1lIGZvciB3aGljaCBgSW5GcmFtZUVuZCgpYCB3YXMgY2FsbGVkIGFuZCByZXR1cm5lZCBzdWNjZXNzIHN0YXR1cykuIFRoZSB0YWcgaXMgYSB1bmlxdWUgdmFsdWUgKHdpdGhpbgorICAgICAqIGN1cnJlbnRseSBxdWV1ZWQgZnJhbWVzKSBhc3NvY2lhdGVkIHdpdGggZWFjaCBmcmFtZSBpbiB0aGUgYE5jcEZyYW1lQnVmZmVyYC4gVGhlIHRhZyBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB0aGUKKyAgICAgKiBzYW1lIGZyYW1lIHdoZW4gaXQgaXMgcmVhZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBOY3BCdWZmZXIuIFRhZ3MgY2FuIGJlIGNvbXBhcmVkIHVzaW5nIG9wZXJhdG9yIGA9PWAuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdGFnIG9mIGxhc3Qgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gZnJhbWUsIG9yIGBrSW52YWxpZFRhZ2AgaWYgbm8gZnJhbWUgaXMgd3JpdHRlbiBzbyBmYXIuCisgICAgICovCisgICAgRnJhbWVUYWcgSW5GcmFtZUdldExhc3RUYWcodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIGJ1ZmZlciBpcyBlbXB0eS4gQW4gbm9uLWVtcHR5IGJ1ZmZlciBjb250YWlucyBhdCBsZWFzdCBvbmUgZnVsbCBmcmFtZSBmb3IgcmVhZGluZy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgdHJ1ZSAgICAgICAgICAgICAgICAgQnVmZmVyIGlzIG5vdCBlbXB0eSBhbmQgY29udGFpbnMgYXQgbGVhc3Qgb25lIGZ1bGwgZnJhbWUgZm9yIHJlYWRpbmcuCisgICAgICogQHJldHZhbCBmYWxzZSAgICAgICAgICAgICAgICBCdWZmZXIgaXMgZW1wdHkgYW5kIGNvbnRhaW5zIG5vIGZyYW1lIGZvciByZWFkaW5nLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0VtcHR5KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYmVnaW5zL3ByZXBhcmVzIGEgbmV3IG91dHB1dCBmcmFtZSB0byBiZSByZWFkIGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIFRoZSBOQ1AgYnVmZmVyIG1haW50YWlucyBhIHJlYWQgb2Zmc2V0IGZvciB0aGUgY3VycmVudCBmcmFtZSBiZWluZyByZWFkLiBCZWZvcmUgcmVhZGluZyBhbnkgYnl0ZXMgZnJvbSB0aGUgZnJhbWUKKyAgICAgKiB0aGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHRvIHByZXBhcmUgdGhlIGZyYW1lIGFuZCBzZXQgdGhlIHJlYWQgb2Zmc2V0LgorICAgICAqCisgICAgICogSWYgcGFydCBvZiBjdXJyZW50IGZyYW1lIGhhcyBhbHJlYWR5IGJlZW4gcmVhZCwgYSBzdWItc2VxdWVudCBjYWxsIHRvIHRoaXMgbWV0aG9kIHdpbGwgcmVzZXQgdGhlIHJlYWQgb2Zmc2V0CisgICAgICogYmFjayB0byBiZWdpbm5pbmcgb2YgY3VycmVudCBvdXRwdXQgZnJhbWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQvcHJlcGFyZWQgYSBuZXcgb3V0cHV0IGZyYW1lIGZvciByZWFkaW5nLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBObyBmcmFtZSBhdmFpbGFibGUgaW4gYnVmZmVyIGZvciByZWFkaW5nLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBPdXRGcmFtZUJlZ2luKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBjdXJyZW50IG91dHB1dCBmcmFtZSAoYmVpbmcgcmVhZCkgaGFzIGVuZGVkLgorICAgICAqCisgICAgICogVGhlIE5DUCBidWZmZXIgbWFpbnRhaW5zIGEgcmVhZCBvZmZzZXQgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBmcmFtZSBiZWluZyByZWFkLiBUaGlzIG1ldGhvZCByZXR1cm5zIHRydWUgaWYgdGhlCisgICAgICogcmVhZCBvZmZzZXQgaXMgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUgYW5kIHRoZXJlIGFyZSBubyBtb3JlIGJ5dGVzIGF2YWlsYWJsZSB0byByZWFkIGZyb20gY3VycmVudCBmcmFtZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgdHJ1ZSAgICAgICAgICAgICAgICAgICBGcmFtZSBoYXMgZW5kZWQgKG5vIG1vcmUgYnl0ZXMgYXZhaWxhYmxlIHRvIHJlYWQgZnJvbSBjdXJyZW50IG91dHB1dCBmcmFtZSkuCisgICAgICogQHJldHZhbCBmYWxzZSAgICAgICAgICAgICAgICAgIEZyYW1lIGhhcyBkYXRhIChjYW4gcmVhZCBtb3JlIGJ5dGVzIGZyb20gY3VycmVudCBvdXRwdXQgZnJhbWUpLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBPdXRGcmFtZUhhc0VuZGVkKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVhZHMgYW5kIHJldHVybnMgdGhlIG5leHQgYnl0ZSBmcm9tIHRoZSBjdXJyZW50IG91dHB1dCBmcmFtZS4KKyAgICAgKgorICAgICAqIFRoZSBOQ1AgYnVmZmVyIG1haW50YWlucyBhIHJlYWQgb2Zmc2V0IGZvciB0aGUgY3VycmVudCBvdXRwdXQgZnJhbWUgYmVpbmcgcmVhZC4gVGhpcyBtZXRob2QgcmVhZHMgYW5kIHJldHVybnMKKyAgICAgKiB0aGUgbmV4dCBieXRlIGZyb20gdGhlIGN1cnJlbnQgZnJhbWUgYW5kIG1vdmVzIHRoZSByZWFkIG9mZnNldCBmb3J3YXJkLiBJZiByZWFkIG9mZnNldCBpcyBhbHJlYWR5IGF0IHRoZSBlbmQKKyAgICAgKiBjdXJyZW50IG91dHB1dCBmcmFtZSwgdGhpcyBtZXRob2QgcmV0dXJucyB6ZXJvLgorICAgICAqCisgICAgICogQHJldHVybnMgICAgIFRoZSBuZXh0IGJ5dGUgZnJvbSB0aGUgY3VycmVudCBvdXRwdXQgZnJhbWUgb3IgemVybyBpZiBmcmFtZSBoYXMgZW5kZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IE91dEZyYW1lUmVhZEJ5dGUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWFkcyBieXRlcyBmcm9tIHRoZSBjdXJyZW50IG91dHB1dCBmcmFtZS4KKyAgICAgKgorICAgICAqIFRoZSBOQ1AgYnVmZmVyIG1haW50YWlucyBhIHJlYWQgb2Zmc2V0IGZvciB0aGUgY3VycmVudCBvdXRwdXQgZnJhbWUgYmVpbmcgcmVhZC4gVGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gcmVhZAorICAgICAqIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgKEBwIGFEYXRhQnVmZmVyTGVuZ3RoKSBmcm9tIHRoZSBjdXJyZW50IGZyYW1lIGFuZCBjb3BpZXMgdGhlIGJ5dGVzIGludG8gdGhlIGdpdmVuCisgICAgICogZGF0YSBidWZmZXIgKEBwIGFEYXRhQnVmZmVyKS4gSXQgYWxzbyBtb3ZlcyB0aGUgcmVhZCBvZmZzZXQgZm9yd2FyZCBhY2NvcmRpbmdseS4gSWYgdGhlcmUgYXJlIGxlc3MgYnl0ZXMKKyAgICAgKiByZW1haW5pbmcgaW4gY3VycmVudCBmcmFtZSwgdGhlIGF2YWlsYWJsZSBieXRlcyBhcmUgcmVhZC9jb3BpZWQuIFRoaXMgbWV0aG9kcyByZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzCisgICAgICogcmVhZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEYXRhQnVmZmVyICAgICAgICBBIHBvaW50ZXIgdG8gYSBkYXRhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhUmVhZExlbmd0aCAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgYW5kIGNvcGllZCBpbnRvIGRhdGEgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgT3V0RnJhbWVSZWFkKHVpbnQxNl90IGFSZWFkTGVuZ3RoLCB1aW50OF90ICphRGF0YUJ1ZmZlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIHRoZSBjdXJyZW50L2Zyb250IG91dHB1dCBmcmFtZSBmcm9tIHRoZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBUaGUgTkNQIGJ1ZmZlciBzdG9yZXMgdGhlIGZyYW1lcyBpbiBGSUZPIG9yZGVyLiBUaGlzIG1ldGhvZCByZW1vdmVzIHRoZSBmcm9udCBmcmFtZSAod2hpY2ggbWF5IGJlIHRoZSBjdXJyZW50CisgICAgICogb3V0cHV0IGZyYW1lIGJlaW5nIHJlYWQpIGZyb20gdGhlIGJ1ZmZlci4gVGhlcmUgaXMgbm8gbmVlZCB0byBwcmVwYXJlL2JlZ2luIHJlYWRpbmcgdGhlIGN1cnJlbnQgZnJhbWUgYmVmb3JlCisgICAgICogcmVtb3ZpbmcgaXQsIHNvIHRoZSBmcm9udCBmcmFtZSBjYW4gYmUgcmVtb3ZlZCB3aXRob3V0IGEgcHJldmlvdXMgY2FsbCB0byBgT3V0RnJhbWVCZWdpbigpYC4KKyAgICAgKgorICAgICAqIFdoZW4gYSBmcmFtZSBpcyByZW1vdmVkIGFsbCBpdHMgYXNzb2NpYXRlZCBtZXNzYWdlcyB3aWxsIGJlIGZyZWVkLgorICAgICAqCisgICAgICogSWYgdGhlIHJlbW92ZSBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bCwgdGhpcyBtZXRob2Qgd2lsbCBpbnZva2UgdGhlIGBGcmFtZVJlbW92ZWRDYWxsYmFja2AgKGlmIHByb3ZpZGVkKS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgZnJvbnQgZnJhbWUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE5vIGZyYW1lIGF2YWlsYWJsZSBpbiBOQ1AgZnJhbWUgYnVmZmVyIHRvIHJlbW92ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgT3V0RnJhbWVSZW1vdmUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgKGxlbmd0aCkgb2YgY3VycmVudC9mcm9udCBmcmFtZSBpbiB0aGUgTkNQIGZyYW1lIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIFRoZSBOQ1AgYnVmZmVyIHN0b3JlcyB0aGUgZnJhbWVzIGluIEZJRk8gb3JkZXIuIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgZnJvbnQgZnJhbWUgKHdoaWNoIG1heQorICAgICAqIGJlIHRoZSBjdXJyZW50IG91dHB1dCBmcmFtZSBiZWluZyByZWFkKSBmcm9tIHRoZSBidWZmZXIuIFRoZXJlIGlzIG5vIG5lZWQgdG8gcHJlcGFyZS9iZWdpbiByZWFkaW5nIHRoZSBjdXJyZW50CisgICAgICogZnJhbWUgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2Qgc28gdGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgd2l0aG91dCBhIHByZXZpb3VzIGNhbGwgdG8gYE91dEZyYW1lQmVnaW4oKWAuCisgICAgICoKKyAgICAgKiBJZiB0aGVyZSBpcyBubyBmcmFtZSBpbiBidWZmZXIsIHRoaXMgbWV0aG9kIHJldHVybnMgemVyby4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgKGxlbmd0aCkgb2YgY3VycmVudC9mcm9udCBmcmFtZSwgb3IgemVybyBpZiBubyBmcmFtZSBpbiBidWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBPdXRGcmFtZUdldExlbmd0aCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHRhZyB2YWx1ZSBhc3NvY2lhdGVkIHRvIGN1cnJlbnQvZnJvbnQgZnJhbWUgaW4gdGhlIE5DUCBmcmFtZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBUaGUgTkNQIGJ1ZmZlciBzdG9yZXMgdGhlIGZyYW1lcyBpbiBGSUZPIG9yZGVyLiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0YWcgb2YgdGhlIGZyb250IGZyYW1lICh3aGljaCBtYXkKKyAgICAgKiBiZSB0aGUgY3VycmVudCBvdXRwdXQgZnJhbWUgYmVpbmcgcmVhZCkgZnJvbSB0aGUgYnVmZmVyLiBUaGVyZSBpcyBubyBuZWVkIHRvIHByZXBhcmUvYmVnaW4gcmVhZGluZyB0aGUgY3VycmVudAorICAgICAqIGZyYW1lIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kIHNvIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHdpdGhvdXQgYSBwcmV2aW91cyBjYWxsIHRvIGBPdXRGcmFtZUJlZ2luKClgLgorICAgICAqCisgICAgICogSWYgdGhlcmUgaXMgbm8gZnJhbWUgaW4gYnVmZmVyLCB0aGlzIG1ldGhvZCByZXR1cm5zIGBrSW52YWxpZFRhZ2AuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgICBUaGUgdGFnIGFzc2lnbmVkIHRvIHRoZSBjdXJyZW50L2Zyb20gb3V0cHV0IGZyYW1lLCBvciBga0ludmFsaWRUYWdgIGlmIG5vIGZyYW1lIGluIGJ1ZmZlci4KKyAgICAgKgorICAgICAqLworICAgIEZyYW1lVGFnIE91dEZyYW1lR2V0VGFnKHZvaWQpIGNvbnN0OworCitwcml2YXRlOgorCisgICAgLyoKKyAgICAgKiBOY3BGcmFtZUJ1ZmZlciBJbXBsZW1lbnRhdGlvbgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICoKKyAgICAgKiBOY3BGcmFtZUJ1ZmZlciBpbnRlcm5hbGx5IHN0b3JlcyBhIGZyYW1lIGFzIGEgc2VxdWVuY2Ugb2YgZGF0YSBzZWdtZW50cy4gVGhlIGRhdGEgc2VnbWVudHMgYXJlIHN0b3JlZCBpbiB0aGUKKyAgICAgKiB0aGUgbWFpbiBidWZmZXIgYG1CdWZmZXJgLiBtQnVmZmVyIGlzIHV0aWxpemVkIGFzIGEgY2lyY3VsYXIgYnVmZmVyLgorCisgICAgICogTWVzc2FnZXMgKHdoaWNoIGFyZSBhZGRlZCB1c2luZyBgSW5GcmFtZUZlZWRNZXNzYWdlZCgpYCkgYXJlIG5vdCBjb3BpZWQgaW4gdGhlIGBtQnVmZmVyYCBidXQgaW5zdGVhZCBhcmUKKyAgICAgKiBlbnF1ZXVlZCBpbiBhIG1lc3NhZ2UgcXVldWUgYG1NZXNzYWdlUXVldWVgLgorICAgICAqCisgICAgICogVGhlIGRhdGEgc2VnbWVudHMgaW5jbHVkZSBhIGhlYWRlciBiZWZvcmUgdGhlIGRhdGEgcG9ydGlvbi4gVGhlIGhlYWRlciBpcyAyIGJ5dGVzIGxvbmcgaXMgZm9ybWF0ZWQgYXMgZm9sbG93cworICAgICAqCisgICAgICogICAgQml0IDAtMTM6IEdpdmUgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBzZWdtZW50IChtYXggc2VnbWVudCBsZW4gaXMgMl4xNCA9IDE2LDM4NCBieXRlcykuCisgICAgICogICAgQml0IDE0OiAgIEZsYWcgYml0IHNldCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgc2VnbWVudCBoYXMgYW4gYXNzb2NpYXRlZCBgTWVzc2FnZWAgKGFwcGVuZGVkIHRvIGl0cyBlbmQpLgorICAgICAqICAgIEJpdCAxNTogICBGbGFnIGJpdCBzZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHNlZ21lbnQgZGVmaW5lcyB0aGUgc3RhcnQgb2YgYSBuZXcgZnJhbWUuCisgICAgICoKKyAgICAgKiAgICAgICAgQml0ICAxNSAgICAgICAgIEJpdCAxNCAgICAgICAgICAgIEJpdHM6IDAgLSAxMworICAgICAqICAgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgKiAgICB8ICAgTmV3IEZyYW1lICB8ICBIYXMgTWVzc2FnZSB8ICBMZW5ndGggb2Ygc2VnbWVudCAoZXhjbHVkaW5nIHRoZSBoZWFkZXIpICAgICAgICAgICAgICB8CisgICAgICogICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAqCisgICAgICogVGhlIGhlYWRlciBpcyBlbmNvZGVkIGluIGJpZy1lbmRpYW4gKG1zYiBmaXJzdCkgc3R5bGUuCisKKyAgICAgKiBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNhbGxzIHRvIGNyZWF0ZSBhIGZyYW1lOgorICAgICAqCisgICAgICogICAgbmNwQnVmZmVyLkluRnJhbWVCZWdpbigpOworICAgICAqICAgIG5jcEJ1ZmZlci5JbkZyYW1lRmVlZERhdGEoIkhlbGxvIiwgNSk7CisgICAgICogICAgbmNwQnVmZmVyLkluRnJhbWVGZWVkRGF0YSgiVGhlcmUiLCA1KTsKKyAgICAgKiAgICBuY3BCdWZmZXIuSW5GcmFtZUZlZWRNZXNzYWdlKCpzb21lTWVzc2FnZSk7CisgICAgICogICAgbmNwQnVmZmVyLkluRnJhbWVGZWVkRGF0YSgiQnllIiwgMyk7CisgICAgICogICAgbmNwQnVmZmVyLkluRnJhbWVFbmQoKTsKKyAgICAgKgorICAgICAqIFRoaXMgZnJhbWUgaXMgc3RvcmVkIGFzIHR3byBzZWdtZW50czoKKyAgICAgKgorICAgICAqICAgIC0gU2VnbWVudCAjMSBjb250YWlucyAiSGVsbG9UaGVyZSIgd2l0aCBhIGhlYWRlciBvZiBgMHhDMDBBYCB3aGljaCBzaG93cyB0aGF0IHRoaXMgc2VnbWVudCBjb250YWlucyAxMCBkYXRhCisgICAgICogICAgICBieXRlcywgYW5kIGl0IHN0YXJ0cyBhIG5ldyBmcmFtZSwgYW5kIGFsc28gbXVzdCBpbmNsdWRlIGEgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlIHF1ZXVlLgorICAgICAqCisgICAgICogICAgLSBTZWdtZW50ICMyIGNvbnRhaW5zICJCeWUiIHdpdGggYSBoZWFkZXIgdmFsdWUgb2YgYDB4MDAwM2Agc2hvd2luZyBsZW5ndGggb2YgMyBhbmQgbm8gYXBwZW5kZWQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqICAgICstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgICAgKiAgICB8IEMwICB8IDBBICB8IGBIYCB8ICdlJyB8ICdsJyB8ICdsJyB8ICdvJyB8ICdUJyB8ICdoJyB8ICdlJyB8ICdyJyB8ICdlJyB8IDAwICB8IDAzICB8ICdCJyB8ICd5JyB8ICdlJyB8CisgICAgICogICAgKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICAgICAqICAgICBcICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgLworICAgICAqICAgU2VnbWVudCAjMSBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWdtZW50ICMyIEhlYWRlcgorICAgICAqCisgICAgICoKKyAgICAgKiBCdWZmZXIgcG9pbnRlcnM6CisgICAgICoKKyAgICAgKiAgICAgICAgICBtUmVhZEZyYW1lU3RhcnQKKyAgICAgKiAgICAgICAgICB8CisgICAgICogICAgICAgICAgfCAgICAgICAgIG1SZWFkU2VnbWVudEhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Xcml0ZUZyYW1lU3RhcnQKKyAgICAgKiAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgIHwgICAgICAgICB8ICAgbVJlYWRQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgbVdyaXRlU2VnbWVudEhlYWQKKyAgICAgKiAgICAgICAgICB8ICAgICAgICAgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgICAgKiAgbUJ1ZmZlciB8ICAgICAgICAgfCAgIHwgICAgIG1SZWFkU2VnbWVudFRhaWwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICBtV3JpdGVTZWdtZW50VGFpbCBtQnVmZmVyRW5kCisgICAgICogIHwgICAgICAgfCAgICAgICAgIHwgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogIFYgICAgICAgViAgICAgICAgIFYgICBWICAgICBWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYgICAgICAgICBWICAgICAgICAgViAgICAgICAgICAgICAgICAgICAgICBWCisgICAgICogKy0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstCisgICAgICogfCAuLi4gICB8IFNlZyAxICAgfCBTZWcgMiAgIHwgU2VnIDMgfCAgIC4gLiAuICAgICAgICAgICAgICAgICAgfCBTZWcgMSAgIHwgU2VnIDIgICA6ICAgLiAuIC4gICAgICAgICAgICAgIHwKKyAgICAgKiArLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0KKyAgICAgKiAgICAgICAgIFwgICAgICAgICAgXCAgICAgICAgLyAgICAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgIC8KKyAgICAgKiAgICAgICAgIHwgICAgICAgICBDdXIgc2VnbWVudCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgIEN1cnJlbnQgT3V0RnJhbWUgKGJlaW5nIHJlYWQpICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgSW5GcmFtZSAoYmVpbmcgd3JpdHRlbikKKyAgICAgKgorICAgICAqLworCisgICAgZW51bQorICAgIHsKKyAgICAgICAga1JlYWRCeXRlQWZ0ZXJGcmFtZUhhc0VuZGVkICAgICAgICA9IDAsICAgICAgICAgIC8vIFZhbHVlIHJldHVybmVkIGJ5IFJlYWRCeXRlKCkgd2hlbiBmcmFtZSBoYXMgZW5kZWQuCisgICAgICAgIGtNZXNzYWdlUmVhZEJ1ZmZlclNpemUgICAgICAgICAgICAgPSAxNiwgICAgICAgICAvLyBTaXplIG9mIG1lc3NhZ2UgYnVmZmVyIGFycmF5LgorICAgICAgICBrVW5rbm93bkZyYW1lTGVuZ3RoICAgICAgICAgICAgICAgID0gMHhmZmZmLCAgICAgLy8gVmFsdWUgdXNlZCB3aGVuIGZyYW1lIGxlbmd0aCBpcyB1bmtub3duLgorICAgICAgICBrU2VnbWVudEhlYWRlclNpemUgICAgICAgICAgICAgICAgID0gMiwgICAgICAgICAgLy8gTGVuZ3RoIG9mIHRoZSBzZWdtZW50IGhlYWRlci4KKyAgICAgICAga1NlZ21lbnRIZWFkZXJMZW5ndGhNYXNrICAgICAgICAgICA9IDB4M2ZmZiwgICAgIC8vIEJpdCBtYXNrIHRvIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHNlZ21lbnQgaGVhZGVyCisKKyAgICAgICAga1NlZ21lbnRIZWFkZXJOb0ZsYWcgICAgICAgICAgICAgICA9IDAsICAgICAgICAgIC8vIE5vIGZsYWdzIGFyZSBzZXQuCisgICAgICAgIGtTZWdtZW50SGVhZGVyTmV3RnJhbWVGbGFnICAgICAgICAgPSAoMSA8PCAxNSksICAvLyBJbmRpY2F0ZXMgdGhhdCB0aGlzIHNlZ21lbnQgc3RhcnRzIGEgbmV3IGZyYW1lLgorICAgICAgICBrU2VnbWVudEhlYWRlck1lc3NhZ2VJbmRpY2F0b3JGbGFnID0gKDEgPDwgMTQpLCAgLy8gSW5kaWNhdGVzIHRoaXMgc2VnbWVudCBlbmRzIHdpdGggYSBNZXNzYWdlLgorICAgIH07CisKKyAgICBlbnVtIFJlYWRTdGF0ZQorICAgIHsKKyAgICAgICAga1JlYWRTdGF0ZUluU2VnbWVudCwgICAgICAgIC8vIEluIG1pZGRsZSBvZiBhIGRhdGEgc2VnbWVudCB3aGlsZSByZWFkaW5nIGN1cnJlbnQgKG91dCkgZnJhbWUuCisgICAgICAgIGtSZWFkU3RhdGVJbk1lc3NhZ2UsICAgICAgICAvLyBJbiBtaWRkbGUgb2YgYSBtZXNzYWdlIHdoaWxlIHJlYWRpbmcgY3VycmVudCAob3V0KSBmcmFtZS4KKyAgICAgICAga1JlYWRTdGF0ZURvbmUsICAgICAgICAgICAgIC8vIEN1cnJlbnQgKG91dCkgZnJhbWUgaXMgcmVhZCBmdWxseS4KKyAgICB9OworCisgICAgLy8gUHJpdmF0ZSBtZXRob2RzCisKKyAgICB1aW50OF90ICogICAgICAgTmV4dCh1aW50OF90ICphQnVmZmVyUHRyKSBjb25zdDsKKyAgICB1aW50OF90ICogICAgICAgQWR2YW5jZSh1aW50OF90ICphQnVmUHRyLCB1aW50MTZfdCBhT2Zmc2V0KSBjb25zdDsKKyAgICB1aW50MTZfdCAgICAgICAgR2V0RGlzdGFuY2UodWludDhfdCAqYVN0YXJ0UHRyLCB1aW50OF90ICphRW5kUHRyKSBjb25zdDsKKworICAgIHVpbnQxNl90ICAgICAgICBSZWFkVWludDE2QXQodWludDhfdCAqYUJ1ZlB0cik7CisgICAgdm9pZCAgICAgICAgICAgIFdyaXRlVWludDE2QXQodWludDhfdCAqYUJ1ZlB0ciwgdWludDE2X3QgYVZhbHVlKTsKKworICAgIG90RXJyb3IgICAgICAgICBJbkZyYW1lRmVlZEJ5dGUodWludDhfdCBhQnl0ZSk7CisgICAgb3RFcnJvciAgICAgICAgIEluRnJhbWVCZWdpblNlZ21lbnQodm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIEluRnJhbWVFbmRTZWdtZW50KHVpbnQxNl90IGFTZWdtZW50SGVhZGVyRmxhZ3MpOworICAgIHZvaWQgICAgICAgICAgICBJbkZyYW1lRGlzY2FyZCh2b2lkKTsKKworICAgIG90RXJyb3IgICAgICAgICBPdXRGcmFtZVByZXBhcmVTZWdtZW50KHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBPdXRGcmFtZU1vdmVUb05leHRTZWdtZW50KHZvaWQpOworICAgIG90RXJyb3IgICAgICAgICBPdXRGcmFtZVByZXBhcmVNZXNzYWdlKHZvaWQpOworICAgIG90RXJyb3IgICAgICAgICBPdXRGcmFtZUZpbGxNZXNzYWdlQnVmZmVyKHZvaWQpOworCisgICAgdWludDhfdCAqIGNvbnN0ICBtQnVmZmVyOyAgICAgICAgICAgICAgICAgICAgLy8gUG9pbnRlciB0byB0aGUgYnVmZmVyIHVzZWQgdG8gc3RvcmUgdGhlIGRhdGEuCisgICAgdWludDhfdCAqIGNvbnN0ICBtQnVmZmVyRW5kOyAgICAgICAgICAgICAgICAgLy8gUG9pbnRzIHRvIGFmdGVyIHRoZSBlbmQgb2YgYnVmZmVyLgorICAgIGNvbnN0IHVpbnQxNl90ICAgbUJ1ZmZlckxlbmd0aDsgICAgICAgICAgICAgIC8vIExlbmd0aCBvZiB0aGUgdGhlIGJ1ZmZlci4KKworICAgIEJ1ZmZlckNhbGxiYWNrICAgbUZyYW1lQWRkZWRDYWxsYmFjazsgICAgICAgIC8vIENhbGxiYWNrIHRvIHNpZ25hbCB3aGVuIGEgbmV3IGZyYW1lIGlzIGFkZGVkCisgICAgdm9pZCAqICAgICAgICAgICBtRnJhbWVBZGRlZENvbnRleHQ7ICAgICAgICAgLy8gQ29udGV4dCBwYXNzZWQgdG8gYG1GcmFtZUFkZGVkQ2FsbGJhY2tgLgorICAgIEJ1ZmZlckNhbGxiYWNrICAgbUZyYW1lUmVtb3ZlZENhbGxiYWNrOyAgICAgIC8vIENhbGxiYWNrIHRvIHNpZ25hbCB3aGVuIGEgZnJhbWUgaXMgcmVtb3ZlZC4KKyAgICB2b2lkICogICAgICAgICAgIG1GcmFtZVJlbW92ZWRDb250ZXh0OyAgICAgICAvLyBDb250ZXh0IHBhc3NlZCB0byBgbUZyYW1lUmVtb3ZlZENhbGxiYWNrYC4KKworICAgIG90TWVzc2FnZVF1ZXVlICAgbU1lc3NhZ2VRdWV1ZTsgICAgICAgICAgICAgIC8vIE1haW4gbWVzc2FnZSBxdWV1ZS4KKworICAgIG90TWVzc2FnZVF1ZXVlICAgbVdyaXRlRnJhbWVNZXNzYWdlUXVldWU7ICAgIC8vIE1lc3NhZ2UgcXVldWUgZm9yIHRoZSBjdXJyZW50IGZyYW1lIGJlaW5nIHdyaXR0ZW4uCisgICAgdWludDhfdCAqICAgICAgICBtV3JpdGVGcmFtZVN0YXJ0OyAgICAgICAgICAgLy8gUG9pbnRlciB0byBzdGFydCBvZiBjdXJyZW50IGZyYW1lIGJlaW5nIHdyaXR0ZW4uCisgICAgdWludDhfdCAqICAgICAgICBtV3JpdGVTZWdtZW50SGVhZDsgICAgICAgICAgLy8gUG9pbnRlciB0byBzdGFydCBvZiBjdXJyZW50IHNlZ21lbnQgaW4gdGhlIGZyYW1lIGJlaW5nIHdyaXR0ZW4uCisgICAgdWludDhfdCAqICAgICAgICBtV3JpdGVTZWdtZW50VGFpbDsgICAgICAgICAgLy8gUG9pbnRlciB0byBlbmQgb2YgY3VycmVudCBzZWdtZW50IGluIHRoZSBmcmFtZSBiZWluZyB3cml0dGVuLgorICAgIEZyYW1lVGFnICAgICAgICAgbVdyaXRlRnJhbWVUYWc7ICAgICAgICAgICAgIC8vIFRhZyBhc3NvY2lhdGVkIHdpdGggbGFzdCBzdWNjZXNzZnVsbHkgd3JpdHRlbiBmcmFtZS4KKworICAgIFJlYWRTdGF0ZSAgICAgICAgbVJlYWRTdGF0ZTsgICAgICAgICAgICAgICAgIC8vIFJlYWQgc3RhdGUuCisgICAgdWludDE2X3QgICAgICAgICBtUmVhZEZyYW1lTGVuZ3RoOyAgICAgICAgICAgLy8gTGVuZ3RoIG9mIGN1cnJlbnQgZnJhbWUgYmVpbmcgcmVhZC4KKworICAgIHVpbnQ4X3QgKiAgICAgICAgbVJlYWRGcmFtZVN0YXJ0OyAgICAgICAgICAgIC8vIFBvaW50ZXIgdG8gc3RhcnQgb2YgY3VycmVudCBmcmFtZSBiZWluZyByZWFkLgorICAgIHVpbnQ4X3QgKiAgICAgICAgbVJlYWRTZWdtZW50SGVhZDsgICAgICAgICAgIC8vIFBvaW50ZXIgdG8gc3RhcnQgb2YgY3VycmVudCBzZWdtZW50IGluIHRoZSBmcmFtZSBiZWluZyByZWFkLgorICAgIHVpbnQ4X3QgKiAgICAgICAgbVJlYWRTZWdtZW50VGFpbDsgICAgICAgICAgIC8vIFBvaW50ZXIgdG8gZW5kIG9mIGN1cnJlbnQgc2VnbWVudCBpbiB0aGUgZnJhbWUgYmVpbmcgcmVhZC4KKyAgICB1aW50OF90ICogICAgICAgIG1SZWFkUG9pbnRlcjsgICAgICAgICAgICAgICAvLyBQb2ludGVyIHRvIG5leHQgYnl0ZSB0byByZWFkIChlaXRoZXIgaW4gc2VnbWVudCBvciBpbiBtc2cgYnVmZmVyKS4KKworICAgIG90TWVzc2FnZSAqICAgICAgbVJlYWRNZXNzYWdlOyAgICAgICAgICAgICAgIC8vIEN1cnJlbnQgTWVzc2FnZSBpbiB0aGUgZnJhbWUgYmVpbmcgcmVhZC4KKyAgICB1aW50MTZfdCAgICAgICAgIG1SZWFkTWVzc2FnZU9mZnNldDsgICAgICAgICAvLyBPZmZzZXQgd2l0aGluIGN1cnJlbnQgbWVzc2FnZSBiZWluZyByZWFkLgorCisgICAgdWludDhfdCAgICAgICAgICBtTWVzc2FnZUJ1ZmZlcltrTWVzc2FnZVJlYWRCdWZmZXJTaXplXTsgICAvLyBCdWZmZXIgdG8gaG9sZCBwYXJ0IG9mIGN1cnJlbnQgbWVzc2FnZSBiZWluZyByZWFkLgorICAgIHVpbnQ4X3QgKiAgICAgICAgbVJlYWRNZXNzYWdlVGFpbDsgICAgICAgICAgIC8vIFBvaW50ZXIgdG8gZW5kIG9mIGN1cnJlbnQgcGFydCBpbiBtTWVzc2FnZUJ1ZmZlci4KK307CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5DUF9GUkFNRV9CVUZGRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL25jcC9uY3Bfc3BpLmNwcCBiL3NyYy9uY3AvbmNwX3NwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlZThlNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3AvbmNwX3NwaS5jcHAKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSBTUEkgaW50ZXJmYWNlIHRvIHRoZSBPcGVuVGhyZWFkIHN0YWNrLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibmNwX3NwaS5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL25jcC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vc3BpLXNsYXZlLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9taXNjLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9uZXcuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDYuaHBwIgorCisjZGVmaW5lIFNQSV9SRVNFVF9GTEFHICAgICAgICAgIDB4ODAKKyNkZWZpbmUgU1BJX0NSQ19GTEFHICAgICAgICAgICAgMHg0MAorI2RlZmluZSBTUElfUEFUVEVSTl9WQUxVRSAgICAgICAweDAyCisjZGVmaW5lIFNQSV9QQVRURVJOX01BU0sgICAgICAgIDB4MDMKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEkKKworbmFtZXNwYWNlIG90IHsKKworc3RhdGljIG90REVGSU5FX0FMSUdORURfVkFSKHNOY3BSYXcsIHNpemVvZihOY3BTcGkpLCB1aW50NjRfdCk7CisKK2V4dGVybiAiQyIgdm9pZCBvdE5jcEluaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIE5jcFNwaSAqbmNwU3BpID0gTlVMTDsKKworICAgIG5jcFNwaSA9IG5ldygmc05jcFJhdykgTmNwU3BpKGFJbnN0YW5jZSk7CisKKyAgICBpZiAobmNwU3BpID09IE5VTEwgfHwgbmNwU3BpICE9IE5jcEJhc2U6OkdldE5jcEluc3RhbmNlKCkpCisgICAgeworICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc3BpX2hlYWRlcl9zZXRfZmxhZ19ieXRlKHVpbnQ4X3QgKmhlYWRlciwgdWludDhfdCB2YWx1ZSkKK3sKKyAgICBoZWFkZXJbMF0gPSB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgc3BpX2hlYWRlcl9zZXRfYWNjZXB0X2xlbih1aW50OF90ICpoZWFkZXIsIHVpbnQxNl90IGxlbikKK3sKKyAgICBoZWFkZXJbMV0gPSAoKGxlbiA+PiAwKSAmIDB4ZmYpOworICAgIGhlYWRlclsyXSA9ICgobGVuID4+IDgpICYgMHhmZik7Cit9CisKK3N0YXRpYyB2b2lkIHNwaV9oZWFkZXJfc2V0X2RhdGFfbGVuKHVpbnQ4X3QgKmhlYWRlciwgdWludDE2X3QgbGVuKQoreworICAgIGhlYWRlclszXSA9ICgobGVuID4+IDApICYgMHhmZik7CisgICAgaGVhZGVyWzRdID0gKChsZW4gPj4gOCkgJiAweGZmKTsKK30KKworc3RhdGljIHVpbnQ4X3Qgc3BpX2hlYWRlcl9nZXRfZmxhZ19ieXRlKGNvbnN0IHVpbnQ4X3QgKmhlYWRlcikKK3sKKyAgICByZXR1cm4gaGVhZGVyWzBdOworfQorCitzdGF0aWMgdWludDE2X3Qgc3BpX2hlYWRlcl9nZXRfYWNjZXB0X2xlbihjb25zdCB1aW50OF90ICpoZWFkZXIpCit7CisgICAgcmV0dXJuICggaGVhZGVyWzFdICsgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGhlYWRlclsyXSA8PCA4KSApOworfQorCitzdGF0aWMgdWludDE2X3Qgc3BpX2hlYWRlcl9nZXRfZGF0YV9sZW4oY29uc3QgdWludDhfdCAqaGVhZGVyKQoreworICAgIHJldHVybiAoIGhlYWRlclszXSArIHN0YXRpY19jYXN0PHVpbnQxNl90PihoZWFkZXJbNF0gPDwgOCkgKTsKK30KKworTmNwU3BpOjpOY3BTcGkob3RJbnN0YW5jZSAqYUluc3RhbmNlKSA6CisgICAgTmNwQmFzZShhSW5zdGFuY2UpLAorICAgIG1UeFN0YXRlKGtUeFN0YXRlSWRsZSksCisgICAgbUhhbmRsaW5nUnhGcmFtZShmYWxzZSksCisgICAgbVJlc2V0RmxhZyh0cnVlKSwKKyAgICBtUHJlcGFyZVR4RnJhbWVUYXNrKGFJbnN0YW5jZS0+bUlwNi5tVGFza2xldFNjaGVkdWxlciwgJk5jcFNwaTo6UHJlcGFyZVR4RnJhbWUsIHRoaXMpLAorICAgIG1TZW5kRnJhbWVMZW4oMCkKK3sKKyAgICBtZW1zZXQobVNlbmRGcmFtZSwgMCwga1NwaUhlYWRlckxlbmd0aCk7CisgICAgbWVtc2V0KG1FbXB0eVNlbmRGcmFtZVplcm9BY2NlcHQsIDAsIGtTcGlIZWFkZXJMZW5ndGgpOworICAgIG1lbXNldChtRW1wdHlTZW5kRnJhbWVGdWxsQWNjZXB0LCAwLCBrU3BpSGVhZGVyTGVuZ3RoKTsKKworICAgIG1UeEZyYW1lQnVmZmVyLlNldEZyYW1lQWRkZWRDYWxsYmFjayhIYW5kbGVGcmFtZUFkZGVkVG9UeEJ1ZmZlciwgdGhpcyk7CisKKyAgICBzcGlfaGVhZGVyX3NldF9mbGFnX2J5dGUobVNlbmRGcmFtZSwgU1BJX1JFU0VUX0ZMQUcgfCBTUElfUEFUVEVSTl9WQUxVRSk7CisgICAgc3BpX2hlYWRlcl9zZXRfZmxhZ19ieXRlKG1FbXB0eVNlbmRGcmFtZVplcm9BY2NlcHQsIFNQSV9SRVNFVF9GTEFHIHwgU1BJX1BBVFRFUk5fVkFMVUUpOworICAgIHNwaV9oZWFkZXJfc2V0X2ZsYWdfYnl0ZShtRW1wdHlTZW5kRnJhbWVGdWxsQWNjZXB0LCBTUElfUkVTRVRfRkxBRyB8IFNQSV9QQVRURVJOX1ZBTFVFKTsKKworICAgIHNwaV9oZWFkZXJfc2V0X2FjY2VwdF9sZW4obVNlbmRGcmFtZSwgc2l6ZW9mKG1SZWNlaXZlRnJhbWUpIC0ga1NwaUhlYWRlckxlbmd0aCk7CisgICAgc3BpX2hlYWRlcl9zZXRfYWNjZXB0X2xlbihtRW1wdHlTZW5kRnJhbWVGdWxsQWNjZXB0LCBzaXplb2YobVJlY2VpdmVGcmFtZSkgLSBrU3BpSGVhZGVyTGVuZ3RoKTsKKyAgICBzcGlfaGVhZGVyX3NldF9hY2NlcHRfbGVuKG1FbXB0eVNlbmRGcmFtZVplcm9BY2NlcHQsIDApOworCisgICAgb3RQbGF0U3BpU2xhdmVFbmFibGUoJk5jcFNwaTo6U3BpVHJhbnNhY3Rpb25Db21wbGV0ZSwgJk5jcFNwaTo6U3BpVHJhbnNhY3Rpb25Qcm9jZXNzLCB0aGlzKTsKKworICAgIC8vIFdlIHNpZ25hbCBhbiBpbnRlcnJ1cHQgb24gdGhpcyBmaXJzdCB0cmFuc2FjdGlvbiB0bworICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBob3N0IHByb2Nlc3NvciBrbm93cyB0aGF0IG91cgorICAgIC8vIHJlc2V0IGZsYWcgd2FzIHNldC4KKworICAgIG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKG1FbXB0eVNlbmRGcmFtZVplcm9BY2NlcHQsIGtTcGlIZWFkZXJMZW5ndGgsIG1FbXB0eVJlY2VpdmVGcmFtZSwga1NwaUhlYWRlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKK30KKworYm9vbCBOY3BTcGk6OlNwaVRyYW5zYWN0aW9uQ29tcGxldGUodm9pZCAqYUNvbnRleHQsIHVpbnQ4X3QgKmFPdXRwdXRCdWYsIHVpbnQxNl90IGFPdXRwdXRCdWZMZW4sIHVpbnQ4X3QgKmFJbnB1dEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFJbnB1dEJ1ZkxlbiwgdWludDE2X3QgYVRyYW5zYWN0aW9uTGVuZ3RoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOY3BTcGkgKj4oYUNvbnRleHQpLT5TcGlUcmFuc2FjdGlvbkNvbXBsZXRlKGFPdXRwdXRCdWYsIGFPdXRwdXRCdWZMZW4sIGFJbnB1dEJ1ZiwgYUlucHV0QnVmTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVHJhbnNhY3Rpb25MZW5ndGgpOworfQorCitib29sIE5jcFNwaTo6U3BpVHJhbnNhY3Rpb25Db21wbGV0ZSh1aW50OF90ICphT3V0cHV0QnVmLCB1aW50MTZfdCBhT3V0cHV0QnVmTGVuLCB1aW50OF90ICphSW5wdXRCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhSW5wdXRCdWZMZW4sIHVpbnQxNl90IGFUcmFuc2FjdGlvbkxlbmd0aCkKK3sKKyAgICAvLyBUaGlzIG1heSBiZSBleGVjdXRlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LgorICAgIC8vIE11c3QgcmV0dXJuIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCisKKyAgICB1aW50MTZfdCByeF9kYXRhX2xlbiA9IDA7CisgICAgdWludDE2X3QgcnhfYWNjZXB0X2xlbiA9IDA7CisgICAgdWludDE2X3QgdHhfZGF0YV9sZW4gPSAwOworICAgIHVpbnQxNl90IHR4X2FjY2VwdF9sZW4gPSAwOworICAgIGJvb2wgc2hvdWxkUHJvY2VzcyA9IGZhbHNlOworCisgICAgLy8gVE9ETzogQ2hlY2sgYFBBVFRFUk5gIGJpdHMgb2YgYEhEUmAgYW5kIGlnbm9yZSBmcmFtZSBpZiBub3Qgc2V0LgorICAgIC8vICAgICAgIEhvbGRpbmcgb2ZmIG9uIGltcGxlbWVudGluZyB0aGlzIHNvIGFzIHRvIG5vdCBjYXVzZSBpbW1lZGlhdGUKKyAgICAvLyAgICAgICBjb21wYXRpYmlsaXR5IHByb2JsZW1zLCBldmVuIHRob3VnaCBpdCBpcyByZXF1aXJlZCBieSB0aGUgc3BlYy4KKworICAgIGlmIChhVHJhbnNhY3Rpb25MZW5ndGggPj0ga1NwaUhlYWRlckxlbmd0aCkKKyAgICB7CisgICAgICAgIGlmIChhT3V0cHV0QnVmTGVuID49IGtTcGlIZWFkZXJMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ4X2FjY2VwdF9sZW4gPSBzcGlfaGVhZGVyX2dldF9hY2NlcHRfbGVuKGFPdXRwdXRCdWYpOworICAgICAgICAgICAgdHhfZGF0YV9sZW4gPSBzcGlfaGVhZGVyX2dldF9kYXRhX2xlbihhT3V0cHV0QnVmKTsKKyAgICAgICAgICAgICh2b2lkKXNwaV9oZWFkZXJfZ2V0X2ZsYWdfYnl0ZShhT3V0cHV0QnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhSW5wdXRCdWZMZW4gPj0ga1NwaUhlYWRlckxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcnhfZGF0YV9sZW4gPSBzcGlfaGVhZGVyX2dldF9kYXRhX2xlbihhSW5wdXRCdWYpOworICAgICAgICAgICAgdHhfYWNjZXB0X2xlbiA9IHNwaV9oZWFkZXJfZ2V0X2FjY2VwdF9sZW4oYUlucHV0QnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbUhhbmRsaW5nUnhGcmFtZSAmJgorICAgICAgICAgICAgKHJ4X2RhdGFfbGVuID4gMCkgJiYKKyAgICAgICAgICAgIChyeF9kYXRhX2xlbiA8PSBhVHJhbnNhY3Rpb25MZW5ndGggLSBrU3BpSGVhZGVyTGVuZ3RoKSAmJgorICAgICAgICAgICAgKHJ4X2RhdGFfbGVuIDw9IHJ4X2FjY2VwdF9sZW4pKQorICAgICAgICB7CisgICAgICAgICAgICBtSGFuZGxpbmdSeEZyYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgIHNob3VsZFByb2Nlc3MgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChtVHhTdGF0ZSA9PSBrVHhTdGF0ZVNlbmRpbmcpICYmCisgICAgICAgICAgICAodHhfZGF0YV9sZW4gPiAwKSAmJgorICAgICAgICAgICAgKHR4X2RhdGFfbGVuIDw9IGFUcmFuc2FjdGlvbkxlbmd0aCAtIGtTcGlIZWFkZXJMZW5ndGgpICYmCisgICAgICAgICAgICAodHhfZGF0YV9sZW4gPD0gdHhfYWNjZXB0X2xlbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UeFN0YXRlID0ga1R4U3RhdGVIYW5kbGluZ1NlbmREb25lOworICAgICAgICAgICAgc2hvdWxkUHJvY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVJlc2V0RmxhZyAmJiAoYVRyYW5zYWN0aW9uTGVuZ3RoID4gMCkgJiYgKGFPdXRwdXRCdWZMZW4gPiAwKSkKKyAgICB7CisgICAgICAgIC8vIENsZWFyIHRoZSByZXNldCBmbGFnLgorICAgICAgICBtUmVzZXRGbGFnID0gZmFsc2U7CisgICAgICAgIHNwaV9oZWFkZXJfc2V0X2ZsYWdfYnl0ZShtU2VuZEZyYW1lLCBTUElfUEFUVEVSTl9WQUxVRSk7CisgICAgICAgIHNwaV9oZWFkZXJfc2V0X2ZsYWdfYnl0ZShtRW1wdHlTZW5kRnJhbWVaZXJvQWNjZXB0LCBTUElfUEFUVEVSTl9WQUxVRSk7CisgICAgICAgIHNwaV9oZWFkZXJfc2V0X2ZsYWdfYnl0ZShtRW1wdHlTZW5kRnJhbWVGdWxsQWNjZXB0LCBTUElfUEFUVEVSTl9WQUxVRSk7CisgICAgfQorCisgICAgaWYgKG1UeFN0YXRlID09IGtUeFN0YXRlU2VuZGluZykKKyAgICB7CisgICAgICAgIGFPdXRwdXRCdWYgPSBtU2VuZEZyYW1lOworICAgICAgICBhT3V0cHV0QnVmTGVuID0gbVNlbmRGcmFtZUxlbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYU91dHB1dEJ1ZiA9IChtSGFuZGxpbmdSeEZyYW1lKSA/IG1FbXB0eVNlbmRGcmFtZVplcm9BY2NlcHQgOiBtRW1wdHlTZW5kRnJhbWVGdWxsQWNjZXB0OworICAgICAgICBhT3V0cHV0QnVmTGVuID0ga1NwaUhlYWRlckxlbmd0aDsKKyAgICB9CisKKyAgICBpZiAobUhhbmRsaW5nUnhGcmFtZSkKKyAgICB7CisgICAgICAgIGFJbnB1dEJ1ZiA9IG1FbXB0eVJlY2VpdmVGcmFtZTsKKyAgICAgICAgYUlucHV0QnVmTGVuID0ga1NwaUhlYWRlckxlbmd0aDsKKyAgICAgICAgc3BpX2hlYWRlcl9zZXRfYWNjZXB0X2xlbihtU2VuZEZyYW1lLCAwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYUlucHV0QnVmID0gbVJlY2VpdmVGcmFtZTsKKyAgICAgICAgYUlucHV0QnVmTGVuID0gc2l6ZW9mKG1SZWNlaXZlRnJhbWUpOworICAgICAgICBzcGlfaGVhZGVyX3NldF9hY2NlcHRfbGVuKG1TZW5kRnJhbWUsIHNpemVvZihtUmVjZWl2ZUZyYW1lKSAtIGtTcGlIZWFkZXJMZW5ndGgpOworICAgIH0KKworICAgIG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKGFPdXRwdXRCdWYsIGFPdXRwdXRCdWZMZW4sIGFJbnB1dEJ1ZiwgYUlucHV0QnVmTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtVHhTdGF0ZSA9PSBrVHhTdGF0ZVNlbmRpbmcpKTsKKworICAgIHJldHVybiBzaG91bGRQcm9jZXNzOworfQorCit2b2lkIE5jcFNwaTo6U3BpVHJhbnNhY3Rpb25Qcm9jZXNzKHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PE5jcFNwaSAqPihhQ29udGV4dCktPlNwaVRyYW5zYWN0aW9uUHJvY2VzcygpOworfQorCit2b2lkIE5jcFNwaTo6U3BpVHJhbnNhY3Rpb25Qcm9jZXNzKHZvaWQpCit7CisgICAgaWYgKG1UeFN0YXRlID09IGtUeFN0YXRlSGFuZGxpbmdTZW5kRG9uZSkKKyAgICB7CisgICAgICAgIG1QcmVwYXJlVHhGcmFtZVRhc2suUG9zdCgpOworICAgIH0KKworICAgIGlmIChtSGFuZGxpbmdSeEZyYW1lKQorICAgIHsKKyAgICAgICAgSGFuZGxlUnhGcmFtZSgpOworICAgIH0KK30KKwordm9pZCBOY3BTcGk6OkhhbmRsZUZyYW1lQWRkZWRUb1R4QnVmZmVyKHZvaWQgKmFDb250ZXh0LCBOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgYVRhZywgTmNwRnJhbWVCdWZmZXIgKmFOY3BGcmFtZUJ1ZmZlcikKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU5jcEZyYW1lQnVmZmVyKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYVRhZyk7CisKKyAgICBzdGF0aWNfY2FzdDxOY3BTcGkgKj4oYUNvbnRleHQpLT5tUHJlcGFyZVR4RnJhbWVUYXNrLlBvc3QoKTsKK30KKworb3RFcnJvciBOY3BTcGk6OlByZXBhcmVOZXh0U3BpU2VuZEZyYW1lKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvckNvZGUgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQxNl90IGZyYW1lTGVuZ3RoOworICAgIHVpbnQxNl90IHJlYWRMZW5ndGg7CisKKyAgICBWZXJpZnlPckV4aXQoIW1UeEZyYW1lQnVmZmVyLklzRW1wdHkoKSk7CisKKyAgICBpZiAoU2hvdWxkV2FrZUhvc3QoKSkKKyAgICB7CisgICAgICAgIG90UGxhdFdha2VIb3N0KCk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvckNvZGUgPSBtVHhGcmFtZUJ1ZmZlci5PdXRGcmFtZUJlZ2luKCkpOworCisgICAgZnJhbWVMZW5ndGggPSBtVHhGcmFtZUJ1ZmZlci5PdXRGcmFtZUdldExlbmd0aCgpOworICAgIGFzc2VydChmcmFtZUxlbmd0aCA8PSBzaXplb2YobVNlbmRGcmFtZSkgLSBrU3BpSGVhZGVyTGVuZ3RoKTsKKworICAgIHNwaV9oZWFkZXJfc2V0X2RhdGFfbGVuKG1TZW5kRnJhbWUsIGZyYW1lTGVuZ3RoKTsKKworICAgIC8vIFRoZSAiYWNjZXB0IGxlbmd0aCIgaW4gYG1TZW5kRnJhbWVgIGlzIGFscmVhZHkgdXBkYXRlZCBiYXNlZAorICAgIC8vIG9uIGN1cnJlbnQgc3RhdGUgb2YgcmVjZWl2ZS4gSXQgaXMgY2hhbmdlZCBlaXRoZXIgZnJvbSB0aGUKKyAgICAvLyBgU3BpVHJhbnNhY3Rpb25Db21wbGV0ZSgpYCBjYWxsYmFjayBvciBmcm9tIGBIYW5kbGVSeEZyYW1lKClgLgorCisgICAgcmVhZExlbmd0aCA9IG1UeEZyYW1lQnVmZmVyLk91dEZyYW1lUmVhZChmcmFtZUxlbmd0aCwgbVNlbmRGcmFtZSArIGtTcGlIZWFkZXJMZW5ndGgpOworICAgIGFzc2VydChyZWFkTGVuZ3RoID09IGZyYW1lTGVuZ3RoKTsKKworICAgIG1TZW5kRnJhbWVMZW4gPSBmcmFtZUxlbmd0aCArIGtTcGlIZWFkZXJMZW5ndGg7CisKKyAgICBtVHhTdGF0ZSA9IGtUeFN0YXRlU2VuZGluZzsKKworICAgIC8vIFByZXBhcmUgbmV3IHRyYW5zYWN0aW9uIGJ5IHVzaW5nIGBtU2VuZEZyYW1lYCBhcyB0aGUgb3V0cHV0CisgICAgLy8gYnVmZmVyIHdoaWxlIGtlZXBpbmcgdGhlIGlucHV0IGJ1ZmZlciB1bmNoYW5nZWQuCisKKyAgICBlcnJvckNvZGUgPSBvdFBsYXRTcGlTbGF2ZVByZXBhcmVUcmFuc2FjdGlvbihtU2VuZEZyYW1lLCBtU2VuZEZyYW1lTGVuLCBOVUxMLCAwLCB0cnVlKTsKKworICAgIGlmIChlcnJvckNvZGUgPT0gT1RfRVJST1JfQlVTWSkKKyAgICB7CisgICAgICAgIC8vIEJlaW5nIGJ1c3kgaXMgT0suIFdlIHdpbGwgZ2V0IHRoZSB0cmFuc2FjdGlvbgorICAgICAgICAvLyBzZXQgdXAgcHJvcGVybHkgd2hlbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbgorICAgICAgICAvLyBpcyBjb21wbGV0ZWQuCisgICAgICAgIGVycm9yQ29kZSA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgaWYgKGVycm9yQ29kZSAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgbVR4U3RhdGUgPSBrVHhTdGF0ZUlkbGU7CisgICAgICAgIG1QcmVwYXJlVHhGcmFtZVRhc2suUG9zdCgpOworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgbVR4RnJhbWVCdWZmZXIuT3V0RnJhbWVSZW1vdmUoKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3JDb2RlOworfQorCit2b2lkIE5jcFNwaTo6UHJlcGFyZVR4RnJhbWUoVGFza2xldCAmYVRhc2tsZXQpCit7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFUYXNrbGV0KTsKKyAgICBzdGF0aWNfY2FzdDxOY3BTcGkgKj4oR2V0TmNwSW5zdGFuY2UoKSktPlByZXBhcmVUeEZyYW1lKCk7Cit9CisKK3ZvaWQgTmNwU3BpOjpQcmVwYXJlVHhGcmFtZSh2b2lkKQoreworICAgIHN3aXRjaCAobVR4U3RhdGUpCisgICAgeworICAgIGNhc2Uga1R4U3RhdGVIYW5kbGluZ1NlbmREb25lOgorICAgICAgICBtVHhTdGF0ZSA9IGtUeFN0YXRlSWRsZTsKKworICAgICAgICAvLyBGYWxsLXRocm91Z2ggdG8gbmV4dCBjYXNlIHRvIHByZXBhcmUgdGhlIG5leHQgZnJhbWUgKGlmIGFueSkuCisKKyAgICBjYXNlIGtUeFN0YXRlSWRsZToKKyAgICAgICAgUHJlcGFyZU5leHRTcGlTZW5kRnJhbWUoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtUeFN0YXRlU2VuZGluZzoKKyAgICAgICAgLy8gVGhlIG5leHQgZnJhbWUgaW4gcXVldWUgKGlmIGFueSkgd2lsbCBiZSBwcmVwYXJlZCB3aGVuIHRoZQorICAgICAgICAvLyBjdXJyZW50IGZyYW1lIGlzIHN1Y2Nlc3NmdWxseSBzZW50IGFuZCB0aGlzIHRhc2sgaXMgcG9zdGVkCisgICAgICAgIC8vIGFnYWluIGZyb20gdGhlIGBTcGlUcmFuc2FjdGlvbkNvbXBsZXRlKClgIGNhbGxiYWNrLgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgTmNwU3BpOjpIYW5kbGVSeEZyYW1lKHZvaWQpCit7CisgICAgLy8gUGFzcyB0aGUgcmVjZWl2ZWQgZnJhbWUgdG8gYmFzZSBjbGFzcyB0byBwcm9jZXNzLgorICAgIEhhbmRsZVJlY2VpdmUobVJlY2VpdmVGcmFtZSArIGtTcGlIZWFkZXJMZW5ndGgsIHNwaV9oZWFkZXJfZ2V0X2RhdGFfbGVuKG1SZWNlaXZlRnJhbWUpKTsKKworICAgIC8vIFRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGJlbG93IGlzIGltcG9ydGFudC4gV2Ugc2hvdWxkIGNsZWFyCisgICAgLy8gdGhlIGBtSGFuZGxpbmdSeEZyYW1lYCBiZWZvcmUgY2hlY2tpbmcgYG1UeFN0YXRlYCBhbmQgcG9zc2libHkKKyAgICAvLyBwcmVwYXJpbmcgdGhlIG5leHQgdHJhbnNhY3Rpb24uIE5vdGUgdGhhdCB0aGUgY2FsbGJhY2sKKyAgICAvLyBgU3BpVHJhbnNhY3Rpb25Db21wbGV0ZSgpYCBjYW4gYmUgaW52b2tlZCBmcm9tIElTUiBhdCBhbnkgcG9pbnQuCisgICAgLy8KKyAgICAvLyBJZiB3ZSBzd2l0Y2ggdGhlIG9yZGVyLCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgcmFjZSBzaXR1YXRpb246CisgICAgLy8gV2UgY2hlY2sgYG1UeFN0YXRlYCBhbmQgaXQgaXMgaW4gYGtUeFN0YXRlU2VuZGluZ2AsIHNvIHdlIHNraXAKKyAgICAvLyBwcmVwYXJpbmcgdGhlIHRyYW5zYWN0aW9uIGhlcmUuIEJ1dCBiZWZvcmUgd2Ugc2V0IHRoZQorICAgIC8vIGBtSGFuZGxpbmdSeEZyYW1lYCB0byBgZmFsc2VgLCB0aGUgYFNwaVRyYW5zYWN0aW9uQ29tcGxldGUoKWAKKyAgICAvLyBoYXBwZW5zIGFuZCBwcmVwYXJlcyB0aGUgbmV4dCB0cmFuc2FjdGlvbiBhbmQgc2V0cyB0aGUgYWNjZXB0CisgICAgLy8gbGVuZ3RoIHRvIHplcm8gb24gYG1TZW5kRnJhbWVgIChzaW5jZSBpdCBhc3N1bWVzIHdlIGFyZSBzdGlsbAorICAgIC8vIGhhbmRsaW5nIHRoZSBwcmV2aW91cyByZWNlaXZlZCBmcmFtZSkuCisKKyAgICBtSGFuZGxpbmdSeEZyYW1lID0gZmFsc2U7CisKKyAgICAvLyBJZiB0eCBzdGF0ZSBpcyBpbiBga1R4U3RhdGVTZW5kaW5nYCwgd2Ugd2FpdCBmb3IgdGhlIGNhbGxiYWNrCisgICAgLy8gYFNwaVRyYW5zYWN0aW9uQ29tcGxldGUoKWAgIHdoaWNoIHdpbGwgdGhlbiBzZXQgdXAgZXZlcnl0aGluZworICAgIC8vIGFuZCBwcmVwYXJlIHRoZSBuZXh0IHRyYW5zYWN0aW9uLgorCisgICAgaWYgKG1UeFN0YXRlICE9IGtUeFN0YXRlU2VuZGluZykKKyAgICB7CisgICAgICAgIHNwaV9oZWFkZXJfc2V0X2FjY2VwdF9sZW4obVNlbmRGcmFtZSwgc2l6ZW9mKG1SZWNlaXZlRnJhbWUpIC0ga1NwaUhlYWRlckxlbmd0aCk7CisKKyAgICAgICAgb3RQbGF0U3BpU2xhdmVQcmVwYXJlVHJhbnNhY3Rpb24obUVtcHR5U2VuZEZyYW1lRnVsbEFjY2VwdCwga1NwaUhlYWRlckxlbmd0aCwgbVJlY2VpdmVGcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1SZWNlaXZlRnJhbWUpLCBmYWxzZSk7CisKKyAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayB0aGUgZXJyb3Igc3RhdHVzLiBHZXR0aW5nIGBPVF9FUlJPUl9CVVNZYAorICAgICAgICAvLyBpcyBPSyBhcyBldmVyeXRoaW5nIHdpbGwgYmUgc2V0IHVwIHByb3Blcmx5IGZyb20gY2FsbGJhY2sgd2hlbgorICAgICAgICAvLyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQuCisgICAgfQorfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEkKZGlmZiAtLWdpdCBhL3NyYy9uY3AvbmNwX3NwaS5ocHAgYi9zcmMvbmNwL25jcF9zcGkuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MDUxOWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbmNwL25jcF9zcGkuaHBwCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgYSBTUEkgaW50ZXJmYWNlIHRvIHRoZSBPcGVuVGhyZWFkIHN0YWNrLgorICovCisKKyNpZm5kZWYgTkNQX1NQSV9IUFBfCisjZGVmaW5lIE5DUF9TUElfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm5jcC9uY3BfYmFzZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIE5jcFNwaSA6IHB1YmxpYyBOY3BCYXNlCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gdGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICAgICAqCisgICAgICovCisgICAgTmNwU3BpKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNQSSB0eCBhbmQgcnggYnVmZmVyIHNpemUgKHNob3VsZCBmaXQgYSBtYXggbGVuZ3RoIGZyYW1lICsgU1BJIGhlYWRlcikuCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBrU3BpQnVmZmVyU2l6ZSAgID0gT1BFTlRIUkVBRF9DT05GSUdfTkNQX1NQSV9CVUZGRVJfU0laRSwKKworICAgICAgICAvKioKKyAgICAgICAgICogU2l6ZSBvZiBTUEkgaGVhZGVyIGluIGJ5dGVzLgorICAgICAgICAgKgorICAgICAgICAgKi8KKyAgICAgICAga1NwaUhlYWRlckxlbmd0aCA9IDUsCisgICAgfTsKKworICAgIGVudW0gVHhTdGF0ZQorICAgIHsKKyAgICAgICAga1R4U3RhdGVJZGxlLCAgICAgICAgICAgICAgIC8vIE5vIGZyYW1lIHRvIHNlbmQuCisgICAgICAgIGtUeFN0YXRlU2VuZGluZywgICAgICAgICAgICAvLyBBIGZyYW1lIGlzIHJlYWR5IHRvIGJlIHNlbnQuCisgICAgICAgIGtUeFN0YXRlSGFuZGxpbmdTZW5kRG9uZSAgICAvLyBUaGUgZnJhbWUgd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5LCB3YWl0aW5nIHRvIHByZXBhcmUgdGhlIG5leHQgb25lIChpZiBhbnkpLgorICAgIH07CisKKyAgICBzdGF0aWMgYm9vbCBTcGlUcmFuc2FjdGlvbkNvbXBsZXRlKHZvaWQgKmFDb250ZXh0LCB1aW50OF90ICphT3V0cHV0QnVmLCB1aW50MTZfdCBhT3V0cHV0QnVmTGVuLCB1aW50OF90ICphSW5wdXRCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhSW5wdXRCdWZMZW4sIHVpbnQxNl90IGFUcmFuc2FjdGlvbkxlbmd0aCk7CisgICAgYm9vbCBTcGlUcmFuc2FjdGlvbkNvbXBsZXRlKHVpbnQ4X3QgKmFPdXRwdXRCdWYsIHVpbnQxNl90IGFPdXRwdXRCdWZMZW4sIHVpbnQ4X3QgKmFJbnB1dEJ1ZiwgdWludDE2X3QgYUlucHV0QnVmTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVHJhbnNhY3Rpb25MZW5ndGgpOworCisgICAgc3RhdGljIHZvaWQgU3BpVHJhbnNhY3Rpb25Qcm9jZXNzKHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIFNwaVRyYW5zYWN0aW9uUHJvY2Vzcyh2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUZyYW1lQWRkZWRUb1R4QnVmZmVyKHZvaWQgKmFDb250ZXh0LCBOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgYUZyYW1lVGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5jcEZyYW1lQnVmZmVyICphTmNwRnJhbWVCdWZmZXIpOworCisgICAgc3RhdGljIHZvaWQgUHJlcGFyZVR4RnJhbWUoVGFza2xldCAmYVRhc2tsZXQpOworICAgIHZvaWQgUHJlcGFyZVR4RnJhbWUodm9pZCk7CisgICAgdm9pZCBIYW5kbGVSeEZyYW1lKHZvaWQpOworCisgICAgb3RFcnJvciBQcmVwYXJlTmV4dFNwaVNlbmRGcmFtZSh2b2lkKTsKKworICAgIHZvbGF0aWxlIFR4U3RhdGUgbVR4U3RhdGU7CisgICAgdm9sYXRpbGUgYm9vbCBtSGFuZGxpbmdSeEZyYW1lOworICAgIHZvbGF0aWxlIGJvb2wgbVJlc2V0RmxhZzsKKworICAgIFRhc2tsZXQgbVByZXBhcmVUeEZyYW1lVGFzazsKKworICAgIHVpbnQxNl90IG1TZW5kRnJhbWVMZW47CisgICAgdWludDhfdCBtU2VuZEZyYW1lW2tTcGlCdWZmZXJTaXplXTsKKyAgICB1aW50OF90IG1SZWNlaXZlRnJhbWVba1NwaUJ1ZmZlclNpemVdOworCisgICAgdWludDhfdCBtRW1wdHlTZW5kRnJhbWVaZXJvQWNjZXB0W2tTcGlIZWFkZXJMZW5ndGhdOworICAgIHVpbnQ4X3QgbUVtcHR5U2VuZEZyYW1lRnVsbEFjY2VwdFtrU3BpSGVhZGVyTGVuZ3RoXTsKKyAgICB1aW50OF90IG1FbXB0eVJlY2VpdmVGcmFtZVtrU3BpSGVhZGVyTGVuZ3RoXTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5DUF9TUElfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL25jcC9uY3BfdWFydC5jcHAgYi9zcmMvbmNwL25jcF91YXJ0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFiZThkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL25jcC9uY3BfdWFydC5jcHAKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBhIFVBUlQgYmFzZWQgTkNQIGludGVyZmFjZSB0byB0aGUgT3BlblRocmVhZCBzdGFjay4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm5jcF91YXJ0LmhwcCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL25jcC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vdWFydC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL25ldy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX05DUF9VQVJUCisKK25hbWVzcGFjZSBvdCB7CisKK3N0YXRpYyBvdERFRklORV9BTElHTkVEX1ZBUihzTmNwUmF3LCBzaXplb2YoTmNwVWFydCksIHVpbnQ2NF90KTsKKworZXh0ZXJuICJDIiB2b2lkIG90TmNwSW5pdChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgTmNwVWFydCAqbmNwVWFydCA9IE5VTEw7CisgICAgbmNwVWFydCA9IG5ldygmc05jcFJhdykgTmNwVWFydChhSW5zdGFuY2UpOworCisgICAgaWYgKG5jcFVhcnQgPT0gTlVMTCB8fCBuY3BVYXJ0ICE9IE5jcEJhc2U6OkdldE5jcEluc3RhbmNlKCkpCisgICAgeworICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgIH0KK30KKworTmNwVWFydDo6VWFydFR4QnVmZmVyOjpVYXJ0VHhCdWZmZXIodm9pZCkKKyAgICA6IEhkbGM6OkVuY29kZXI6OkJ1ZmZlcldyaXRlSXRlcmF0b3IoKQoreworICAgIENsZWFyKCk7Cit9CisKK3ZvaWQgTmNwVWFydDo6VWFydFR4QnVmZmVyOjpDbGVhcih2b2lkKQoreworICAgIG1Xcml0ZVBvaW50ZXIgPSBtQnVmZmVyOworICAgIG1SZW1haW5pbmdMZW5ndGggPSBzaXplb2YobUJ1ZmZlcik7Cit9CisKK2Jvb2wgTmNwVWFydDo6VWFydFR4QnVmZmVyOjpJc0VtcHR5KHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1Xcml0ZVBvaW50ZXIgPT0gbUJ1ZmZlcjsKK30KKwordWludDE2X3QgTmNwVWFydDo6VWFydFR4QnVmZmVyOjpHZXRMZW5ndGgodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG1Xcml0ZVBvaW50ZXIgLSBtQnVmZmVyKTsKK30KKworY29uc3QgdWludDhfdCAqTmNwVWFydDo6VWFydFR4QnVmZmVyOjpHZXRCdWZmZXIodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUJ1ZmZlcjsKK30KKworTmNwVWFydDo6TmNwVWFydChvdEluc3RhbmNlICphSW5zdGFuY2UpOgorICAgIE5jcEJhc2UoYUluc3RhbmNlKSwKKyAgICBtRnJhbWVEZWNvZGVyKG1SeEJ1ZmZlciwgc2l6ZW9mKG1SeEJ1ZmZlciksICZOY3BVYXJ0OjpIYW5kbGVGcmFtZSwgJk5jcFVhcnQ6OkhhbmRsZUVycm9yLCB0aGlzKSwKKyAgICBtVWFydEJ1ZmZlcigpLAorICAgIG1TdGF0ZShrU3RhcnRpbmdGcmFtZSksCisgICAgbUJ5dGUoMCksCisgICAgbVVhcnRTZW5kVGFzayhhSW5zdGFuY2UtPm1JcDYubVRhc2tsZXRTY2hlZHVsZXIsIEVuY29kZUFuZFNlbmRUb1VhcnQsIHRoaXMpCit7CisgICAgbVR4RnJhbWVCdWZmZXIuU2V0RnJhbWVBZGRlZENhbGxiYWNrKEhhbmRsZUZyYW1lQWRkZWRUb05jcEJ1ZmZlciwgdGhpcyk7CisKKyAgICBvdFBsYXRVYXJ0RW5hYmxlKCk7Cit9CisKK3ZvaWQgTmNwVWFydDo6SGFuZGxlRnJhbWVBZGRlZFRvTmNwQnVmZmVyKHZvaWQgKmFDb250ZXh0LCBOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgYVRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5jcEZyYW1lQnVmZmVyICphTmNwRnJhbWVCdWZmZXIpCit7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFOY3BGcmFtZUJ1ZmZlcik7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFUYWcpOworCisgICAgc3RhdGljX2Nhc3Q8TmNwVWFydCAqPihhQ29udGV4dCktPkhhbmRsZUZyYW1lQWRkZWRUb05jcEJ1ZmZlcigpOworfQorCit2b2lkIE5jcFVhcnQ6OkhhbmRsZUZyYW1lQWRkZWRUb05jcEJ1ZmZlcih2b2lkKQoreworICAgIGlmIChtVWFydEJ1ZmZlci5Jc0VtcHR5KCkpCisgICAgeworICAgICAgICBtVWFydFNlbmRUYXNrLlBvc3QoKTsKKyAgICB9Cit9CisKK3ZvaWQgTmNwVWFydDo6RW5jb2RlQW5kU2VuZFRvVWFydChUYXNrbGV0ICZhVGFza2xldCkKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYVRhc2tsZXQpOworICAgIHN0YXRpY19jYXN0PE5jcFVhcnQgKj4oR2V0TmNwSW5zdGFuY2UoKSktPkVuY29kZUFuZFNlbmRUb1VhcnQoKTsKK30KKworLy8gVGhpcyBtZXRob2QgZW5jb2RlcyBhIGZyYW1lIGZyb20gdGhlIHR4IGZyYW1lIGJ1ZmZlciAobVR4RnJhbWVCdWZmZXIpIGludG8gdGhlIHVhcnQgYnVmZmVyIGFuZCBzZW5kcyBpdCBvdmVyIHVhcnQuCisvLyBJZiB0aGUgdWFydCBidWZmZXIgZ2V0cyBmdWxsLCBpdCBzZW5kcyB0aGUgY3VycmVudCBlbmNvZGVkIHBvcnRpb24uIFRoaXMgbWV0aG9kIHJlbWVtYmVycyBjdXJyZW50IHN0YXRlLCBzbyBvbgorLy8gc3ViLXNlcXVlbnQgY2FsbHMsIGl0IHJlc3RhcnRzIGVuY29kaW5nIHRoZSBieXRlcyBmcm9tIHdoZXJlIGl0IGxlZnQgb2YgaW4gdGhlIGZyYW1lIC4KK3ZvaWQgTmNwVWFydDo6RW5jb2RlQW5kU2VuZFRvVWFydCh2b2lkKQoreworICAgIHVpbnQxNl90IGxlbjsKKworICAgIHdoaWxlICghbVR4RnJhbWVCdWZmZXIuSXNFbXB0eSgpKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtU3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBrU3RhcnRpbmdGcmFtZToKKworICAgICAgICAgICAgaWYgKHN1cGVyX3Q6OlNob3VsZFdha2VIb3N0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RQbGF0V2FrZUhvc3QoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHN1cGVyX3Q6OlNob3VsZERlZmVySG9zdFNlbmQoKSA9PSBmYWxzZSk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KG1GcmFtZUVuY29kZXIuSW5pdChtVWFydEJ1ZmZlcikpOworCisgICAgICAgICAgICBtVHhGcmFtZUJ1ZmZlci5PdXRGcmFtZUJlZ2luKCk7CisKKyAgICAgICAgICAgIG1TdGF0ZSA9IGtFbmNvZGluZ0ZyYW1lOworCisgICAgICAgICAgICB3aGlsZSAoIW1UeEZyYW1lQnVmZmVyLk91dEZyYW1lSGFzRW5kZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtQnl0ZSA9IG1UeEZyYW1lQnVmZmVyLk91dEZyYW1lUmVhZEJ5dGUoKTsKKworICAgICAgICAgICAgY2FzZSBrRW5jb2RpbmdGcmFtZToKKworICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQobUZyYW1lRW5jb2Rlci5FbmNvZGUobUJ5dGUsIG1VYXJ0QnVmZmVyKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1UeEZyYW1lQnVmZmVyLk91dEZyYW1lUmVtb3ZlKCk7CisKKyAgICAgICAgICAgIG1TdGF0ZSA9IGtGaW5hbGl6aW5nRnJhbWU7CisKKyAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorCisgICAgICAgIGNhc2Uga0ZpbmFsaXppbmdGcmFtZToKKworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChtRnJhbWVFbmNvZGVyLkZpbmFsaXplKG1VYXJ0QnVmZmVyKSk7CisKKyAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGFydGluZ0ZyYW1lOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIGxlbiA9IG1VYXJ0QnVmZmVyLkdldExlbmd0aCgpOworCisgICAgaWYgKGxlbiA+IDApCisgICAgeworICAgICAgICBpZiAob3RQbGF0VWFydFNlbmQobVVhcnRCdWZmZXIuR2V0QnVmZmVyKCksIGxlbikgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdFVhcnRTZW5kRG9uZSh2b2lkKQoreworICAgIE5jcFVhcnQgKm5jcFVhcnQgPSBzdGF0aWNfY2FzdDxOY3BVYXJ0ICo+KE5jcEJhc2U6OkdldE5jcEluc3RhbmNlKCkpOworCisgICAgaWYgKG5jcFVhcnQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5jcFVhcnQtPkhhbmRsZVVhcnRTZW5kRG9uZSgpOworICAgIH0KK30KKwordm9pZCBOY3BVYXJ0OjpIYW5kbGVVYXJ0U2VuZERvbmUodm9pZCkKK3sKKyAgICBtVWFydEJ1ZmZlci5DbGVhcigpOworCisgICAgbVVhcnRTZW5kVGFzay5Qb3N0KCk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBvdFBsYXRVYXJ0UmVjZWl2ZWQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICBOY3BVYXJ0ICpuY3BVYXJ0ID0gc3RhdGljX2Nhc3Q8TmNwVWFydCAqPihOY3BCYXNlOjpHZXROY3BJbnN0YW5jZSgpKTsKKworICAgIGlmIChuY3BVYXJ0ICE9IE5VTEwpCisgICAgeworICAgICAgICBuY3BVYXJ0LT5IYW5kbGVVYXJ0UmVjZWl2ZURvbmUoYUJ1ZiwgYUJ1Zkxlbmd0aCk7CisgICAgfQorfQorCit2b2lkIE5jcFVhcnQ6OkhhbmRsZVVhcnRSZWNlaXZlRG9uZShjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG1GcmFtZURlY29kZXIuRGVjb2RlKGFCdWYsIGFCdWZMZW5ndGgpOworfQorCit2b2lkIE5jcFVhcnQ6OkhhbmRsZUZyYW1lKHZvaWQgKmFDb250ZXh0LCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIHN0YXRpY19jYXN0PE5jcFVhcnQgKj4oYUNvbnRleHQpLT5IYW5kbGVGcmFtZShhQnVmLCBhQnVmTGVuZ3RoKTsKK30KKwordm9pZCBOY3BVYXJ0OjpIYW5kbGVGcmFtZSh1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIHN1cGVyX3Q6OkhhbmRsZVJlY2VpdmUoYUJ1ZiwgYUJ1Zkxlbmd0aCk7Cit9CisKK3ZvaWQgTmNwVWFydDo6SGFuZGxlRXJyb3Iodm9pZCAqYUNvbnRleHQsIG90RXJyb3IgYUVycm9yLCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIHN0YXRpY19jYXN0PE5jcFVhcnQgKj4oYUNvbnRleHQpLT5IYW5kbGVFcnJvcihhRXJyb3IsIGFCdWYsIGFCdWZMZW5ndGgpOworfQorCit2b2lkIE5jcFVhcnQ6OkhhbmRsZUVycm9yKG90RXJyb3IgYUVycm9yLCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIGNoYXIgaGV4YnVmWzEyOF07CisgICAgdWludDE2X3QgaSA9IDA7CisKKyAgICBzdXBlcl90OjpJbmNyZW1lbnRGcmFtZUVycm9yQ291bnRlcigpOworCisgICAgLy8gV2UgY2FuIGdldCBhd2F5IHdpdGggc3ByaW50ZiBiZWNhdXNlIHdlIGtub3cKKyAgICAvLyBgaGV4YnVmYCBpcyBsYXJnZSBlbm91Z2guCisgICAgc25wcmludGYoaGV4YnVmLCBzaXplb2YoaGV4YnVmKSwgIkZyYW1pbmcgZXJyb3IgJWQ6IFsiLCBhRXJyb3IpOworCisgICAgLy8gV3JpdGUgb3V0IHRoZSBmaXJzdCBwYXJ0IG9mIG91ciBsb2cgbWVzc2FnZS4KKyAgICBvdE5jcFN0cmVhbVdyaXRlKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihoZXhidWYpLCBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihoZXhidWYpKSk7CisKKyAgICAvLyBUaGUgZmlyc3QgJzMnIGNvbWVzIGZyb20gdGhlIHRyYWlsaW5nICJdXG5cMDAwIiBhdCB0aGUgZW5kIG8gdGhlIHN0cmluZy4KKyAgICAvLyBUaGUgc2Vjb25kICczJyBjb21lcyBmcm9tIHRoZSBsZW5ndGggb2YgdHdvIGhleCBkaWdpdHMgYW5kIGEgc3BhY2UuCisgICAgZm9yIChpID0gMDsgKGkgPCBhQnVmTGVuZ3RoKSAmJiAoaSA8IChzaXplb2YoaGV4YnVmKSAtIDMpIC8gMyk7IGkrKykKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBnZXQgYXdheSB3aXRoIHNwcmludGYgYmVjYXVzZSB3ZSBrbm93CisgICAgICAgIC8vIGBoZXhidWZgIGlzIGxhcmdlIGVub3VnaCwgYmFzZWQgb24gb3VyIGNhbGN1bGF0aW9ucworICAgICAgICAvLyBhYm92ZS4KKyAgICAgICAgc25wcmludGYoJmhleGJ1ZltpICogM10sIHNpemVvZihoZXhidWYpIC0gaSAqIDMsICIgJTAyWCIsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFCdWZbaV0pKTsKKyAgICB9CisKKyAgICAvLyBBcHBlbmQgYSBmaW5hbCBjbG9zaW5nIGJyYWNrZXQgYW5kIG5ld2xpbmUgY2hhcmFjdGVyCisgICAgLy8gc28gb3VyIGxvZyBsaW5lIGxvb2tzIG5pY2UuCisgICAgc25wcmludGYoJmhleGJ1ZltpICogM10sIHNpemVvZihoZXhidWYpIC0gaSAqIDMsICJdXG4iKTsKKworICAgIC8vIFdyaXRlIG91dCB0aGUgc2Vjb25kIHBhcnQgb2Ygb3VyIGxvZyBtZXNzYWdlLgorICAgIC8vIFdlIHNraXAgdGhlIGZpcnN0IGJ5dGUgc2luY2UgaXQgaGFzIGEgc3BhY2UgaW4gaXQuCisgICAgb3ROY3BTdHJlYW1Xcml0ZSgwLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oaGV4YnVmICsgMSksIHN0YXRpY19jYXN0PGludD4oc3RybGVuKGhleGJ1ZikgLSAxKSk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCit2b2lkIG90UGxhdExvZyhvdExvZ0xldmVsIGFMb2dMZXZlbCwgb3RMb2dSZWdpb24gYUxvZ1JlZ2lvbiwgY29uc3QgY2hhciAqYUZvcm1hdCwgLi4uKQoreworICAgIGNoYXIgbG9nU3RyaW5nWzEyOF07CisgICAgaW50IGNoYXJzV3JpdHRlbjsKKyAgICB2YV9saXN0IGFyZ3M7CisKKyAgICB2YV9zdGFydChhcmdzLCBhRm9ybWF0KTsKKworICAgIGlmICgoY2hhcnNXcml0dGVuID0gdnNucHJpbnRmKGxvZ1N0cmluZywgc2l6ZW9mKGxvZ1N0cmluZyksIGFGb3JtYXQsIGFyZ3MpKSA+IDApCisgICAgeworICAgICAgICBpZiAoY2hhcnNXcml0dGVuID4gc3RhdGljX2Nhc3Q8aW50PihzaXplb2YobG9nU3RyaW5nKSAtIDEpKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyc1dyaXR0ZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihsb2dTdHJpbmcpIC0gMSk7CisgICAgICAgIH0KKworICAgICAgICBvdE5jcFN0cmVhbVdyaXRlKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihsb2dTdHJpbmcpLCBjaGFyc1dyaXR0ZW4pOworICAgIH0KKworICAgIHZhX2VuZChhcmdzKTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTG9nTGV2ZWwpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTG9nUmVnaW9uKTsKK30KKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ0xJX0xPR0dJTkcKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfVUFSVApkaWZmIC0tZ2l0IGEvc3JjL25jcC9uY3BfdWFydC5ocHAgYi9zcmMvbmNwL25jcF91YXJ0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjFmYTRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL25jcC9uY3BfdWFydC5ocHAKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBhIFVBUlQgYmFzZWQgTkNQIGludGVyZmFjZSB0byB0aGUgT3BlblRocmVhZCBzdGFjay4KKyAqLworCisjaWZuZGVmIE5DUF9VQVJUX0hQUF8KKyNkZWZpbmUgTkNQX1VBUlRfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm5jcC9oZGxjLmhwcCIKKyNpbmNsdWRlICJuY3AvbmNwX2Jhc2UuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBOY3BVYXJ0IDogcHVibGljIE5jcEJhc2UKK3sKKyAgICB0eXBlZGVmIE5jcEJhc2Ugc3VwZXJfdDsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqLworICAgIE5jcFVhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHVhcnQgdHggaXMgZmluaXNoZWQuIEl0IHByZXBhcmVzIGFuZCBzZW5kcyB0aGUgbmV4dCBkYXRhIGNodW5rIChpZiBhbnkpIHRvIHVhcnQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEhhbmRsZVVhcnRTZW5kRG9uZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHVhcnQgcmVjZWl2ZWQgYSBkYXRhIGJ1ZmZlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSGFuZGxlVWFydFJlY2VpdmVEb25lKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworCitwcml2YXRlOgorCisgICAgZW51bQorICAgIHsKKyAgICAgICAga1VhcnRUeEJ1ZmZlclNpemUgPSBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfVUFSVF9UWF9DSFVOS19TSVpFLCAgLy8gVWFydCB0eCBidWZmZXIgc2l6ZS4KKyAgICAgICAga1J4QnVmZmVyU2l6ZSA9IE9QRU5USFJFQURfQ09ORklHX05DUF9VQVJUX1JYX0JVRkZFUl9TSVpFLCAgICAgLy8gUnggYnVmZmVyIHNpemUgKHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggdG8gZml0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uZSB3aG9sZSAoZGVjb2RlZCkgcmVjZWl2ZWQgZnJhbWUpLgorICAgIH07CisKKyAgICBlbnVtIFVhcnRUeFN0YXRlCisgICAgeworICAgICAgICBrU3RhcnRpbmdGcmFtZSwgICAgICAgICAgLy8gU3RhcnRpbmcgYSBuZXcgZnJhbWUuCisgICAgICAgIGtFbmNvZGluZ0ZyYW1lLCAgICAgICAgICAvLyBJbiBtaWRkbGUgb2YgZW5jb2RpbmcgYSBmcmFtZS4KKyAgICAgICAga0ZpbmFsaXppbmdGcmFtZSwgICAgICAgIC8vIEZpbmFsaXppbmcgYSBmcmFtZS4KKyAgICB9OworCisgICAgY2xhc3MgVWFydFR4QnVmZmVyIDogcHVibGljIEhkbGM6OkVuY29kZXI6OkJ1ZmZlcldyaXRlSXRlcmF0b3IKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBVYXJ0VHhCdWZmZXIodm9pZCk7CisKKyAgICAgICAgdm9pZCAgICAgICAgICAgQ2xlYXIodm9pZCk7CisgICAgICAgIGJvb2wgICAgICAgICAgIElzRW1wdHkodm9pZCkgY29uc3Q7CisgICAgICAgIHVpbnQxNl90ICAgICAgIEdldExlbmd0aCh2b2lkKSBjb25zdDsKKyAgICAgICAgY29uc3QgdWludDhfdCAqR2V0QnVmZmVyKHZvaWQpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdWludDhfdCAgICAgICAgbUJ1ZmZlcltrVWFydFR4QnVmZmVyU2l6ZV07CisgICAgfTsKKworICAgIHZvaWQgICAgICAgICAgICBFbmNvZGVBbmRTZW5kVG9VYXJ0KHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBIYW5kbGVGcmFtZSh1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKTsKKyAgICB2b2lkICAgICAgICAgICAgSGFuZGxlRXJyb3Iob3RFcnJvciBhRXJyb3IsIHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworICAgIHZvaWQgICAgICAgICAgICBUeEZyYW1lQnVmZmVySGFzRGF0YSh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgSGFuZGxlRnJhbWVBZGRlZFRvTmNwQnVmZmVyKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgICAgIEVuY29kZUFuZFNlbmRUb1VhcnQoVGFza2xldCAmYVRhc2tsZXQpOworICAgIHN0YXRpYyB2b2lkICAgICBIYW5kbGVGcmFtZSh2b2lkICpjb250ZXh0LCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKTsKKyAgICBzdGF0aWMgdm9pZCAgICAgSGFuZGxlRXJyb3Iodm9pZCAqY29udGV4dCwgb3RFcnJvciBhRXJyb3IsIHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworICAgIHN0YXRpYyB2b2lkICAgICBIYW5kbGVGcmFtZUFkZGVkVG9OY3BCdWZmZXIodm9pZCAqYUNvbnRleHQsIE5jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBhVGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmNwRnJhbWVCdWZmZXIgKmFOY3BGcmFtZUJ1ZmZlcik7CisKKyAgICBIZGxjOjpFbmNvZGVyICAgbUZyYW1lRW5jb2RlcjsKKyAgICBIZGxjOjpEZWNvZGVyICAgbUZyYW1lRGVjb2RlcjsKKyAgICBVYXJ0VHhCdWZmZXIgICAgbVVhcnRCdWZmZXI7CisgICAgVWFydFR4U3RhdGUgICAgIG1TdGF0ZTsKKyAgICB1aW50OF90ICAgICAgICAgbUJ5dGU7CisgICAgdWludDhfdCAgICAgICAgIG1SeEJ1ZmZlcltrUnhCdWZmZXJTaXplXTsKKyAgICBUYXNrbGV0ICAgICAgICAgbVVhcnRTZW5kVGFzazsKK307CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5DUF9VQVJUX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9uY3Avc3BpbmVsLmMgYi9zcmMvbmNwL3NwaW5lbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NThmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbmNwL3NwaW5lbC5jCkBAIC0wLDAgKzEsMjA0OSBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogICMjIFVuaXQgVGVzdCAjIworICoKKyAqICBUaGlzIGZpbGUgaW5jbHVkZXMgaXRzIG93biB1bml0IHRlc3QuIFRvIGNvbXBpbGUgdGhlIHVuaXQgdGVzdCwKKyAqICBzaW1wbHkgY29tcGlsZSB0aGlzIGZpbGUgd2l0aCB0aGUgbWFjcm8gU1BJTkVMX1NFTEZfVEVTVCBzZXQgdG8gMS4KKyAqICBGb3IgZXhhbXBsZToKKyAqCisgKiAgICAgIGNjIHNwaW5lbC5jIC1XYWxsIC1EU1BJTkVMX1NFTEZfVEVTVD0xIC1vIHNwaW5lbAorICoKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogLQorLy8gTUFSSzogSGVhZGVycworCisjaW5jbHVkZSAic3BpbmVsLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWZuZGVmIFNQSU5FTF9QTEFURk9STV9IRUFERVIKKy8qIFRoZXNlIGFyZSBhbGwgYWxyZWFkeSBpbmNsdWRlZCBpbiB0aGUgc3BpbmVsIHBsYXRmb3JtIGhlYWRlcgorICogaWYgU1BJTkVMX1BMQVRGT1JNX0hFQURFUiB3YXMgZGVmaW5lZC4KKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYgLy8gI2lmbmRlZiBTUElORUxfUExBVEZPUk1fSEVBREVSCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IC0KKworLy8gSUFSJ3MgZXJybm8uaCBhcHBhcmVudGx5IGRvZXNuJ3QgZGVmaW5lIEVPVkVSRkxPVy4KKyNpZm5kZWYgRU9WRVJGTE9XCisvLyBUaGVyZSBpcyBubyByZWFsIGdvb2QgY2hvaWNlIGZvciB3aGF0IHRvIHNldAorLy8gZXJybm8gdG8gaW4gdGhpcyBjYXNlLCBzbyB3ZSBqdXN0IHBpY2sgdGhlCisvLyB2YWx1ZSAnMScgc29tZXdoYXQgYXJiaXRyYXJpbHkuCisjZGVmaW5lIEVPVkVSRkxPVyAxCisjZW5kaWYKKworLy8gSUFSJ3MgZXJybm8uaCBhcHBhcmVudGx5IGRvZXNuJ3QgZGVmaW5lIEVJTlZBTC4KKyNpZm5kZWYgRUlOVkFMCisvLyBUaGVyZSBpcyBubyByZWFsIGdvb2QgY2hvaWNlIGZvciB3aGF0IHRvIHNldAorLy8gZXJybm8gdG8gaW4gdGhpcyBjYXNlLCBzbyB3ZSBqdXN0IHBpY2sgdGhlCisvLyB2YWx1ZSAnMScgc29tZXdoYXQgYXJiaXRyYXJpbHkuCisjZGVmaW5lIEVJTlZBTCAxCisjZW5kaWYKKworI2lmZGVmIF9LRVJORUxfTU9ERQorI2RlZmluZSB2YV9jb3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UpICgoZGVzdGluYXRpb24pID0gKHNvdXJjZSkpCisjdW5kZWYgZXJybm8KKyNkZWZpbmUgYXNzZXJ0X3ByaW50ZihmbXQsIC4uLikKKyNlbmRpZgorCisjaWYgZGVmaW5lZChlcnJubykgJiYgU1BJTkVMX1BMQVRGT1JNX0RPRVNOVF9JTVBMRU1FTlRfRVJSTk9fVkFSCisjZXJyb3IgIlNQSU5FTF9QTEFURk9STV9ET0VTTlRfSU1QTEVNRU5UX0VSUk5PX1ZBUiBpcyBzZXQgYnV0IGVycm5vIGlzIGFscmVhZHkgZGVmaW5lZC4iCisjZW5kaWYKKworLy8gV29yay1hcm91bmQgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGltcGxlbWVudCB0aGUgYGVycm5vYCB2YXJpYWJsZS4KKyNpZiAhZGVmaW5lZChlcnJubykgJiYgU1BJTkVMX1BMQVRGT1JNX0RPRVNOVF9JTVBMRU1FTlRfRVJSTk9fVkFSCitzdGF0aWMgaW50IHNwaW5lbF9lcnJub193b3JrYXJvdW5kXzsKKyNkZWZpbmUgZXJybm8gc3BpbmVsX2Vycm5vX3dvcmthcm91bmRfCisjZW5kaWYgLy8gU1BJTkVMX1BMQVRGT1JNX0RPRVNOVF9JTVBMRU1FTlRfRVJSTk9fVkFSCisKKyNpZm5kZWYgYXNzZXJ0X3ByaW50ZgorI2lmIFNQSU5FTF9QTEFURk9STV9ET0VTTlRfSU1QTEVNRU5UX0ZQUklOVEYKKyNkZWZpbmUgYXNzZXJ0X3ByaW50ZihmbXQsIC4uLikgXAorICAgIHByaW50ZihfX0ZJTEVfXyAiOiVkOiAiIGZtdCAiXG4iLCBfX0xJTkVfXywgX19WQV9BUkdTX18pCisjZWxzZSAvLyBpZiBTUElORUxfUExBVEZPUk1fRE9FU05UX0lNUExFTUVOVF9GUFJJTlRGCisjZGVmaW5lIGFzc2VydF9wcmludGYoZm10LCAuLi4pIFwKKyAgICBmcHJpbnRmKHN0ZGVyciwgX19GSUxFX18gIjolZDogIiBmbXQgIlxuIiwgX19MSU5FX18sIF9fVkFfQVJHU19fKQorI2VuZGlmIC8vIGVsc2UgU1BJTkVMX1BMQVRGT1JNX0RPRVNOVF9JTVBMRU1FTlRfRlBSSU5URgorI2VuZGlmCisKKworI2lmbmRlZiByZXF1aXJlX2FjdGlvbgorI2lmIFNQSU5FTF9QTEFURk9STV9TSE9VTERfTE9HX0FTU0VSVFMKKyNkZWZpbmUgcmVxdWlyZV9hY3Rpb24oYywgbCwgYSkgXAorICAgIGRvIHsgaWYgKCEoYykpIHsgXAorICAgICAgICBhc3NlcnRfcHJpbnRmKCJSZXF1aXJlbWVudCBGYWlsZWQgKCVzKSIsICMgYyk7IFwKKyAgICAgICAgYTsgXAorICAgICAgICBnb3RvIGw7IFwKKyAgICB9IH0gd2hpbGUgKDApCisjZWxzZSAvLyBpZiBERUJVRworI2RlZmluZSByZXF1aXJlX2FjdGlvbihjLCBsLCBhKSBcCisgICAgZG8geyBpZiAoIShjKSkgeyBcCisgICAgICAgIGE7IFwKKyAgICAgICAgZ290byBsOyBcCisgICAgfSB9IHdoaWxlICgwKQorI2VuZGlmIC8vIGVsc2UgREVCVUcKKyNlbmRpZiAvLyBpZm5kZWYgcmVxdWlyZV9hY3Rpb24KKworI2lmbmRlZiByZXF1aXJlCisjZGVmaW5lIHJlcXVpcmUoYywgbCkgICByZXF1aXJlX2FjdGlvbihjLCBsLCB7fSkKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB2YV9saXN0IG9iajsKK30gdmFfbGlzdF9vYmo7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IC0KKworc3BpbmVsX3NzaXplX3QKK3NwaW5lbF9wYWNrZWRfdWludF9kZWNvZGUoY29uc3QgdWludDhfdCAqYnl0ZXMsIHNwaW5lbF9zaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgKnZhbHVlX3B0cikKK3sKKyAgICBzcGluZWxfc3NpemVfdCByZXQgPSAwOworICAgIHVuc2lnbmVkIGludCB2YWx1ZSA9IDA7CisKKyAgICBpbnQgaSA9IDA7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgaWYgKGxlbiA8IHNpemVvZih1aW50OF90KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlIHw9ICh1bnNpZ25lZCBpbnQpKChieXRlc1swXSAmIDB4N0YpIDw8IGkpOworICAgICAgICBpICs9IDc7CisgICAgICAgIHJldCArPSBzaXplb2YodWludDhfdCk7CisgICAgICAgIGJ5dGVzICs9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgbGVuIC09IHNpemVvZih1aW50OF90KTsKKyAgICB9CisgICAgd2hpbGUgKChieXRlc1stMV0gJiAweDgwKSA9PSAweDgwKTsKKworICAgIGlmICgocmV0ID4gMCkgJiYgKHZhbHVlX3B0ciAhPSBOVUxMKSkKKyAgICB7CisgICAgICAgICp2YWx1ZV9wdHIgPSB2YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzcGluZWxfc3NpemVfdAorc3BpbmVsX3BhY2tlZF91aW50X3NpemUodW5zaWduZWQgaW50IHZhbHVlKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHJldDsKKworICAgIGlmICh2YWx1ZSA8ICgxIDw8IDcpKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisgICAgZWxzZSBpZiAodmFsdWUgPCAoMSA8PCAxNCkpCisgICAgeworICAgICAgICByZXQgPSAyOworICAgIH0KKyAgICBlbHNlIGlmICh2YWx1ZSA8ICgxIDw8IDIxKSkKKyAgICB7CisgICAgICAgIHJldCA9IDM7CisgICAgfQorICAgIGVsc2UgaWYgKHZhbHVlIDwgKDEgPDwgMjgpKQorICAgIHsKKyAgICAgICAgcmV0ID0gNDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0ID0gNTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzcGluZWxfc3NpemVfdAorc3BpbmVsX3BhY2tlZF91aW50X2VuY29kZSh1aW50OF90ICpieXRlcywgc3BpbmVsX3NpemVfdCBsZW4sIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKyAgICBjb25zdCBzcGluZWxfc3NpemVfdCBlbmNvZGVkX3NpemUgPSBzcGluZWxfcGFja2VkX3VpbnRfc2l6ZSh2YWx1ZSk7CisKKyAgICBpZiAoKHNwaW5lbF9zc2l6ZV90KWxlbiA+PSBlbmNvZGVkX3NpemUpCisgICAgeworICAgICAgICBzcGluZWxfc3NpemVfdCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgIT0gZW5jb2RlZF9zaXplIC0gMTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICAqYnl0ZXMrKyA9ICh2YWx1ZSAmIDB4N0YpIHwgMHg4MDsKKyAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlID4+IDcpOworICAgICAgICB9CisKKyAgICAgICAgKmJ5dGVzKysgPSAodmFsdWUgJiAweDdGKTsKKyAgICB9CisKKyAgICByZXR1cm4gZW5jb2RlZF9zaXplOworfQorCitjb25zdCBjaGFyICoKK3NwaW5lbF9uZXh0X3BhY2tlZF9kYXRhdHlwZShjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCkKK3sKKyAgICBpbnQgZGVwdGggPSAwOworCisgICAgZG8KKyAgICB7CisgICAgICAgIHN3aXRjaCAoKisrcGFja19mb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICBkZXB0aCsrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnKSc6CisgICAgICAgICAgICBkZXB0aC0tOworCisgICAgICAgICAgICBpZiAoZGVwdGggPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYWNrX2Zvcm1hdCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoKGRlcHRoID4gMCkgJiYgKnBhY2tfZm9ybWF0ICE9IDApOworCisgICAgcmV0dXJuIHBhY2tfZm9ybWF0OworfQorCitzdGF0aWMgc3BpbmVsX3NzaXplX3QKK3NwaW5lbF9kYXRhdHlwZV92dW5wYWNrXyhjb25zdCB1aW50OF90ICpkYXRhX3B0ciwgc3BpbmVsX3NpemVfdCBkYXRhX2xlbiwgY29uc3QgY2hhciAqcGFja19mb3JtYXQsIHZhX2xpc3Rfb2JqICphcmdzKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHJldCA9IDA7CisKKyAgICBmb3IgKDsgKnBhY2tfZm9ybWF0ICE9IDA7IHBhY2tfZm9ybWF0ID0gc3BpbmVsX25leHRfcGFja2VkX2RhdGF0eXBlKHBhY2tfZm9ybWF0KSkKKyAgICB7CisgICAgICAgIGlmICgqcGFja19mb3JtYXQgPT0gJyknKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEb24ndCBnbyBwYXN0IHRoZSBlbmQgb2YgYSBzdHJ1Y3QuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoKHNwaW5lbF9kYXRhdHlwZV90KXBhY2tfZm9ybWF0WzBdKQorICAgICAgICB7CisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX0JPT0xfQzoKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCAqYXJnX3B0ciA9IHZhX2FyZyhhcmdzLT5vYmosIGJvb2wgKik7CisgICAgICAgICAgICByZXF1aXJlX2FjdGlvbihkYXRhX2xlbiA+PSBzaXplb2YodWludDhfdCksIGJhaWwsIChyZXQgPSAtMSwgZXJybm8gPSBFT1ZFUkZMT1cpKTsKKworICAgICAgICAgICAgaWYgKGFyZ19wdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmFyZ19wdHIgPSBkYXRhX3B0clswXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ICs9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIGRhdGFfbGVuIC09IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfSU5UOF9DOgorICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9DOgorICAgICAgICB7CisgICAgICAgICAgICB1aW50OF90ICphcmdfcHRyID0gdmFfYXJnKGFyZ3MtPm9iaiwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHJlcXVpcmVfYWN0aW9uKGRhdGFfbGVuID49IHNpemVvZih1aW50OF90KSwgYmFpbCwgKHJldCA9IC0xLCBlcnJubyA9IEVPVkVSRkxPVykpOworCisgICAgICAgICAgICBpZiAoYXJnX3B0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqYXJnX3B0ciA9IGRhdGFfcHRyWzBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgZGF0YV9wdHIgKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgZGF0YV9sZW4gLT0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9JTlQxNl9DOgorICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfQzoKKyAgICAgICAgeworICAgICAgICAgICAgdWludDE2X3QgKmFyZ19wdHIgPSB2YV9hcmcoYXJncy0+b2JqLCB1aW50MTZfdCAqKTsKKyAgICAgICAgICAgIHJlcXVpcmVfYWN0aW9uKGRhdGFfbGVuID49IHNpemVvZih1aW50MTZfdCksIGJhaWwsIChyZXQgPSAtMSwgZXJybm8gPSBFT1ZFUkZMT1cpKTsKKworICAgICAgICAgICAgaWYgKGFyZ19wdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmFyZ19wdHIgPSAodWludDE2X3QpKChkYXRhX3B0clsxXSA8PCA4KSB8IGRhdGFfcHRyWzBdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ICs9IHNpemVvZih1aW50MTZfdCk7CisgICAgICAgICAgICBkYXRhX3B0ciArPSBzaXplb2YodWludDE2X3QpOworICAgICAgICAgICAgZGF0YV9sZW4gLT0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfSU5UMzJfQzoKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfVUlOVDMyX0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90ICphcmdfcHRyID0gdmFfYXJnKGFyZ3MtPm9iaiwgdWludDMyX3QgKik7CisgICAgICAgICAgICByZXF1aXJlX2FjdGlvbihkYXRhX2xlbiA+PSBzaXplb2YodWludDMyX3QpLCBiYWlsLCAocmV0ID0gLTEsIGVycm5vID0gRU9WRVJGTE9XKSk7CisKKyAgICAgICAgICAgIGlmIChhcmdfcHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICphcmdfcHRyID0gKHVpbnQzMl90KSgoZGF0YV9wdHJbM10gPDwgMjQpIHwgKGRhdGFfcHRyWzJdIDw8IDE2KSB8IChkYXRhX3B0clsxXSA8PCA4KSB8IGRhdGFfcHRyWzBdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ICs9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICBkYXRhX3B0ciArPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgZGF0YV9sZW4gLT0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfQzoKKyAgICAgICAgeworICAgICAgICAgICAgc3BpbmVsX2lwdjZhZGRyX3QgKiphcmdfcHRyID0gdmFfYXJnKGFyZ3MtPm9iaiwgc3BpbmVsX2lwdjZhZGRyX3QgKiopOworICAgICAgICAgICAgcmVxdWlyZV9hY3Rpb24oZGF0YV9sZW4gPj0gc2l6ZW9mKHNwaW5lbF9pcHY2YWRkcl90KSwgYmFpbCwgKHJldCA9IC0xLCBlcnJubyA9IEVPVkVSRkxPVykpOworCisgICAgICAgICAgICBpZiAoYXJnX3B0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqYXJnX3B0ciA9IChzcGluZWxfaXB2NmFkZHJfdCAqKWRhdGFfcHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgKz0gc2l6ZW9mKHNwaW5lbF9pcHY2YWRkcl90KTsKKyAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVvZihzcGluZWxfaXB2NmFkZHJfdCk7CisgICAgICAgICAgICBkYXRhX2xlbiAtPSBzaXplb2Yoc3BpbmVsX2lwdjZhZGRyX3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9DOgorICAgICAgICB7CisgICAgICAgICAgICBzcGluZWxfZXVpNjRfdCAqKmFyZ19wdHIgPSB2YV9hcmcoYXJncy0+b2JqLCBzcGluZWxfZXVpNjRfdCAqKik7CisgICAgICAgICAgICByZXF1aXJlX2FjdGlvbihkYXRhX2xlbiA+PSBzaXplb2Yoc3BpbmVsX2V1aTY0X3QpLCBiYWlsLCAocmV0ID0gLTEsIGVycm5vID0gRU9WRVJGTE9XKSk7CisKKyAgICAgICAgICAgIGlmIChhcmdfcHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICphcmdfcHRyID0gKHNwaW5lbF9ldWk2NF90ICopZGF0YV9wdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCArPSBzaXplb2Yoc3BpbmVsX2V1aTY0X3QpOworICAgICAgICAgICAgZGF0YV9wdHIgKz0gc2l6ZW9mKHNwaW5lbF9ldWk2NF90KTsKKyAgICAgICAgICAgIGRhdGFfbGVuIC09IHNpemVvZihzcGluZWxfZXVpNjRfdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX0VVSTQ4X0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIHNwaW5lbF9ldWk0OF90ICoqYXJnX3B0ciA9IHZhX2FyZyhhcmdzLT5vYmosIHNwaW5lbF9ldWk0OF90ICoqKTsKKyAgICAgICAgICAgIHJlcXVpcmVfYWN0aW9uKGRhdGFfbGVuID49IHNpemVvZihzcGluZWxfZXVpNDhfdCksIGJhaWwsIChyZXQgPSAtMSwgZXJybm8gPSBFT1ZFUkZMT1cpKTsKKworICAgICAgICAgICAgaWYgKGFyZ19wdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmFyZ19wdHIgPSAoc3BpbmVsX2V1aTQ4X3QgKilkYXRhX3B0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ICs9IHNpemVvZihzcGluZWxfZXVpNDhfdCk7CisgICAgICAgICAgICBkYXRhX3B0ciArPSBzaXplb2Yoc3BpbmVsX2V1aTQ4X3QpOworICAgICAgICAgICAgZGF0YV9sZW4gLT0gc2l6ZW9mKHNwaW5lbF9ldWk0OF90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfQzoKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50ICphcmdfcHRyID0gdmFfYXJnKGFyZ3MtPm9iaiwgdW5zaWduZWQgaW50ICopOworICAgICAgICAgICAgc3BpbmVsX3NzaXplX3QgcHVpX2xlbiA9IHNwaW5lbF9wYWNrZWRfdWludF9kZWNvZGUoZGF0YV9wdHIsIGRhdGFfbGVuLCBhcmdfcHRyKTsKKworICAgICAgICAgICAgLy8gUmFuZ2UgY2hlY2sKKyAgICAgICAgICAgIHJlcXVpcmVfYWN0aW9uKE5VTEwgPT0gYXJnX3B0ciB8fCAoKmFyZ19wdHIgPCBTUElORUxfTUFYX1VJTlRfUEFDS0VEKSwgYmFpbCwge3JldCA9IC0xOyBlcnJubyA9IEVSQU5HRTt9KTsKKworICAgICAgICAgICAgcmVxdWlyZShwdWlfbGVuID4gMCwgYmFpbCk7CisKKyAgICAgICAgICAgIHJlcXVpcmUocHVpX2xlbiA8PSAoc3BpbmVsX3NzaXplX3QpZGF0YV9sZW4sIGJhaWwpOworCisgICAgICAgICAgICByZXQgKz0gcHVpX2xlbjsKKyAgICAgICAgICAgIGRhdGFfcHRyICs9IHB1aV9sZW47CisgICAgICAgICAgICBkYXRhX2xlbiAtPSAoc3BpbmVsX3NpemVfdClwdWlfbGVuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9VVEY4X0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKiphcmdfcHRyID0gdmFfYXJnKGFyZ3MtPm9iaiwgY29uc3QgY2hhciAqKik7CisgICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybmxlbigoY29uc3QgY2hhciAqKWRhdGFfcHRyLCBkYXRhX2xlbikgKyAxOworCisgICAgICAgICAgICByZXF1aXJlX2FjdGlvbigobGVuIDw9IGRhdGFfbGVuKSB8fCAoZGF0YV9wdHJbZGF0YV9sZW4gLSAxXSAhPSAwKSwgYmFpbCwgKHJldCA9IC0xLCBlcnJubyA9IEVPVkVSRkxPVykpOworCisgICAgICAgICAgICBpZiAoYXJnX3B0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqYXJnX3B0ciA9IChjb25zdCBjaGFyICopZGF0YV9wdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCArPSAoc3BpbmVsX3NpemVfdClsZW47CisgICAgICAgICAgICBkYXRhX3B0ciArPSBsZW47CisgICAgICAgICAgICBkYXRhX2xlbiAtPSAoc3BpbmVsX3NpemVfdClsZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX0RBVEFfQzoKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfREFUQV9XTEVOX0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIHNwaW5lbF9zc2l6ZV90IHB1aV9sZW4gPSAwOworICAgICAgICAgICAgdWludDE2X3QgYmxvY2tfbGVuID0gMDsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJsb2NrX3B0ciA9IGRhdGFfcHRyOworICAgICAgICAgICAgY29uc3QgdWludDhfdCAqKmJsb2NrX3B0cl9wdHIgPSAgdmFfYXJnKGFyZ3MtPm9iaiwgY29uc3QgdWludDhfdCAqKik7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmJsb2NrX2xlbl9wdHIgPSB2YV9hcmcoYXJncy0+b2JqLCB1bnNpZ25lZCBpbnQgKik7CisgICAgICAgICAgICBjaGFyIG5leHRmb3JtYXQgPSAqc3BpbmVsX25leHRfcGFja2VkX2RhdGF0eXBlKHBhY2tfZm9ybWF0KTsKKworICAgICAgICAgICAgaWYgKCAocGFja19mb3JtYXRbMF0gPT0gU1BJTkVMX0RBVEFUWVBFX0RBVEFfV0xFTl9DKQorICAgICAgICAgICAgICB8fCAoIChuZXh0Zm9ybWF0ICE9IDApICYmIChuZXh0Zm9ybWF0ICE9ICcpJykgKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgcHVpX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soZGF0YV9wdHIsIGRhdGFfbGVuLCBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsICZibG9ja19sZW4pOworICAgICAgICAgICAgICAgIGJsb2NrX3B0ciArPSBwdWlfbGVuOworCisgICAgICAgICAgICAgICAgcmVxdWlyZShwdWlfbGVuID4gMCwgYmFpbCk7CisgICAgICAgICAgICAgICAgcmVxdWlyZShibG9ja19sZW4gPCBTUElORUxfRlJBTUVfTUFYX1NJWkUsIGJhaWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJsb2NrX2xlbiA9ICh1aW50MTZfdClkYXRhX2xlbjsKKyAgICAgICAgICAgICAgICBwdWlfbGVuID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVxdWlyZV9hY3Rpb24oKHNwaW5lbF9zc2l6ZV90KWRhdGFfbGVuID49IChibG9ja19sZW4gKyBwdWlfbGVuKSwgYmFpbCwgKHJldCA9IC0xLCBlcnJubyA9IEVPVkVSRkxPVykpOworCisgICAgICAgICAgICBpZiAoTlVMTCAhPSBibG9ja19wdHJfcHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpibG9ja19wdHJfcHRyID0gYmxvY2tfcHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoTlVMTCAhPSBibG9ja19sZW5fcHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpibG9ja19sZW5fcHRyID0gYmxvY2tfbGVuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBibG9ja19sZW4gKz0gKHVpbnQxNl90KXB1aV9sZW47CisgICAgICAgICAgICByZXQgKz0gYmxvY2tfbGVuOworICAgICAgICAgICAgZGF0YV9wdHIgKz0gYmxvY2tfbGVuOworICAgICAgICAgICAgZGF0YV9sZW4gLT0gYmxvY2tfbGVuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCisgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfQzoKKyAgICAgICAgeworICAgICAgICAgICAgc3BpbmVsX3NzaXplX3QgcHVpX2xlbiA9IDA7CisgICAgICAgICAgICB1aW50MTZfdCBibG9ja19sZW4gPSAwOworICAgICAgICAgICAgc3BpbmVsX3NzaXplX3QgYWN0dWFsX2xlbiA9IDA7CisgICAgICAgICAgICBjb25zdCB1aW50OF90ICpibG9ja19wdHIgPSBkYXRhX3B0cjsKKyAgICAgICAgICAgIGNoYXIgbmV4dGZvcm1hdCA9ICpzcGluZWxfbmV4dF9wYWNrZWRfZGF0YXR5cGUocGFja19mb3JtYXQpOworCisgICAgICAgICAgICBpZiAoIChwYWNrX2Zvcm1hdFswXSA9PSBTUElORUxfREFUQVRZUEVfU1RSVUNUX0MpCisgICAgICAgICAgICAgIHx8ICggKG5leHRmb3JtYXQgIT0gMCkgJiYgKG5leHRmb3JtYXQgIT0gJyknKSApCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBwdWlfbGVuID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjayhkYXRhX3B0ciwgZGF0YV9sZW4sIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywgJmJsb2NrX2xlbik7CisgICAgICAgICAgICAgICAgYmxvY2tfcHRyICs9IHB1aV9sZW47CisKKyAgICAgICAgICAgICAgICByZXF1aXJlKHB1aV9sZW4gPiAwLCBiYWlsKTsKKyAgICAgICAgICAgICAgICByZXF1aXJlKGJsb2NrX2xlbiA8IFNQSU5FTF9GUkFNRV9NQVhfU0laRSwgYmFpbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmxvY2tfbGVuID0gKHVpbnQxNl90KWRhdGFfbGVuOworICAgICAgICAgICAgICAgIHB1aV9sZW4gPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXF1aXJlX2FjdGlvbigoc3BpbmVsX3NzaXplX3QpZGF0YV9sZW4gPj0gKGJsb2NrX2xlbiArIHB1aV9sZW4pLCBiYWlsLCAocmV0ID0gLTEsIGVycm5vID0gRU9WRVJGTE9XKSk7CisKKyAgICAgICAgICAgIGFjdHVhbF9sZW4gPSBzcGluZWxfZGF0YXR5cGVfdnVucGFja18oYmxvY2tfcHRyLCBibG9ja19sZW4sIHBhY2tfZm9ybWF0ICsgMiwgYXJncyk7CisKKyAgICAgICAgICAgIHJlcXVpcmVfYWN0aW9uKGFjdHVhbF9sZW4gPiAtMSwgYmFpbCwgKHJldCA9IC0xLCBlcnJubyA9IEVPVkVSRkxPVykpOworCisgICAgICAgICAgICBpZiAocHVpX2xlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBibG9ja19sZW4gKz0gKHVpbnQxNl90KXB1aV9sZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmxvY2tfbGVuID0gKHVpbnQxNl90KWFjdHVhbF9sZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCArPSBibG9ja19sZW47CisgICAgICAgICAgICBkYXRhX3B0ciArPSBibG9ja19sZW47CisgICAgICAgICAgICBkYXRhX2xlbiAtPSBibG9ja19sZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgJy4nOgorICAgICAgICAgICAgLy8gU2tpcC4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX0FSUkFZX0M6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBVbnN1cHBvcnRlZCBUeXBlIQorICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXQ7CisKK2JhaWw6CisgICAgcmV0dXJuIHJldDsKK30KKworc3BpbmVsX3NzaXplX3QKK3NwaW5lbF9kYXRhdHlwZV91bnBhY2soY29uc3QgdWludDhfdCAqZGF0YV9wdHIsIHNwaW5lbF9zaXplX3QgZGF0YV9sZW4sIGNvbnN0IGNoYXIgKnBhY2tfZm9ybWF0LCAuLi4pCit7CisgICAgc3BpbmVsX3NzaXplX3QgcmV0OworICAgIHZhX2xpc3Rfb2JqIGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncy5vYmosIHBhY2tfZm9ybWF0KTsKKworICAgIHJldCA9IHNwaW5lbF9kYXRhdHlwZV92dW5wYWNrXyhkYXRhX3B0ciwgZGF0YV9sZW4sIHBhY2tfZm9ybWF0LCAmYXJncyk7CisKKyAgICB2YV9lbmQoYXJncy5vYmopOworICAgIHJldHVybiByZXQ7Cit9CisKKworc3BpbmVsX3NzaXplX3QKK3NwaW5lbF9kYXRhdHlwZV92dW5wYWNrKGNvbnN0IHVpbnQ4X3QgKmRhdGFfcHRyLCBzcGluZWxfc2l6ZV90IGRhdGFfbGVuLCBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHJldDsKKyAgICB2YV9saXN0X29iaiBhcmdzX29iajsKKyAgICB2YV9jb3B5KGFyZ3Nfb2JqLm9iaiwgYXJncyk7CisKKyAgICByZXQgPSBzcGluZWxfZGF0YXR5cGVfdnVucGFja18oZGF0YV9wdHIsIGRhdGFfbGVuLCBwYWNrX2Zvcm1hdCwgJmFyZ3Nfb2JqKTsKKworICAgIHZhX2VuZChhcmdzX29iai5vYmopOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzcGluZWxfc3NpemVfdAorc3BpbmVsX2RhdGF0eXBlX3ZwYWNrXyh1aW50OF90ICpkYXRhX3B0ciwgc3BpbmVsX3NpemVfdCBkYXRhX2xlbl9tYXgsIGNvbnN0IGNoYXIgKnBhY2tfZm9ybWF0LCB2YV9saXN0X29iaiAqYXJncykKK3sKKyAgICBzcGluZWxfc3NpemVfdCByZXQgPSAwOworCisgICAgZm9yICg7ICpwYWNrX2Zvcm1hdCAhPSAwOyBwYWNrX2Zvcm1hdCA9IHNwaW5lbF9uZXh0X3BhY2tlZF9kYXRhdHlwZShwYWNrX2Zvcm1hdCkpCisgICAgeworICAgICAgICBpZiAoKnBhY2tfZm9ybWF0ID09ICcpJykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRG9uJ3QgZ28gcGFzdCB0aGUgZW5kIG9mIGEgc3RydWN0LgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKChzcGluZWxfZGF0YXR5cGVfdCkqcGFja19mb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfQk9PTF9DOgorICAgICAgICB7CisgICAgICAgICAgICBib29sIGFyZyA9IChib29sKXZhX2FyZyhhcmdzLT5vYmosIGludCk7CisgICAgICAgICAgICByZXQgKz0gc2l6ZW9mKHVpbnQ4X3QpOworCisgICAgICAgICAgICBpZiAoZGF0YV9sZW5fbWF4ID49IHNpemVvZih1aW50OF90KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX3B0clswXSA9IChhcmcgIT0gZmFsc2UpOworICAgICAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggLT0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfSU5UOF9DOgorICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9DOgorICAgICAgICB7CisgICAgICAgICAgICB1aW50OF90IGFyZyA9ICh1aW50OF90KXZhX2FyZyhhcmdzLT5vYmosIGludCk7CisgICAgICAgICAgICByZXQgKz0gc2l6ZW9mKHVpbnQ4X3QpOworCisgICAgICAgICAgICBpZiAoZGF0YV9sZW5fbWF4ID49IHNpemVvZih1aW50OF90KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX3B0clswXSA9IGFyZzsKKyAgICAgICAgICAgICAgICBkYXRhX3B0ciArPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4IC09IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX0lOVDE2X0M6CisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9DOgorICAgICAgICB7CisgICAgICAgICAgICB1aW50MTZfdCBhcmcgPSAodWludDE2X3QpdmFfYXJnKGFyZ3MtPm9iaiwgaW50KTsKKyAgICAgICAgICAgIHJldCArPSBzaXplb2YodWludDE2X3QpOworCisgICAgICAgICAgICBpZiAoZGF0YV9sZW5fbWF4ID49IHNpemVvZih1aW50MTZfdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9wdHJbMV0gPSAoYXJnID4+IDgpICYgMHhmZjsKKyAgICAgICAgICAgICAgICBkYXRhX3B0clswXSA9IChhcmcgPj4gMCkgJiAweGZmOworICAgICAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVvZih1aW50MTZfdCk7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4IC09IHNpemVvZih1aW50MTZfdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9JTlQzMl9DOgorICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfQzoKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgYXJnID0gKHVpbnQzMl90KXZhX2FyZyhhcmdzLT5vYmosIGludCk7CisgICAgICAgICAgICByZXQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKworICAgICAgICAgICAgaWYgKGRhdGFfbGVuX21heCA+PSBzaXplb2YodWludDMyX3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfcHRyWzNdID0gKGFyZyA+PiAyNCkgJiAweGZmOworICAgICAgICAgICAgICAgIGRhdGFfcHRyWzJdID0gKGFyZyA+PiAxNikgJiAweGZmOworICAgICAgICAgICAgICAgIGRhdGFfcHRyWzFdID0gKGFyZyA+PiA4KSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgZGF0YV9wdHJbMF0gPSAoYXJnID4+IDApICYgMHhmZjsKKyAgICAgICAgICAgICAgICBkYXRhX3B0ciArPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCAtPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfQzoKKyAgICAgICAgeworICAgICAgICAgICAgc3BpbmVsX2lwdjZhZGRyX3QgKmFyZyA9IHZhX2FyZyhhcmdzLT5vYmosIHNwaW5lbF9pcHY2YWRkcl90ICopOworICAgICAgICAgICAgcmV0ICs9IHNpemVvZihzcGluZWxfaXB2NmFkZHJfdCk7CisKKyAgICAgICAgICAgIGlmIChkYXRhX2xlbl9tYXggPj0gc2l6ZW9mKHNwaW5lbF9pcHY2YWRkcl90KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqKHNwaW5lbF9pcHY2YWRkcl90ICopZGF0YV9wdHIgPSAqYXJnOworICAgICAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVvZihzcGluZWxfaXB2NmFkZHJfdCk7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4IC09IHNpemVvZihzcGluZWxfaXB2NmFkZHJfdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9FVUk0OF9DOgorICAgICAgICB7CisgICAgICAgICAgICBzcGluZWxfZXVpNDhfdCAqYXJnID0gdmFfYXJnKGFyZ3MtPm9iaiwgc3BpbmVsX2V1aTQ4X3QgKik7CisgICAgICAgICAgICByZXQgKz0gc2l6ZW9mKHNwaW5lbF9ldWk0OF90KTsKKworICAgICAgICAgICAgaWYgKGRhdGFfbGVuX21heCA+PSBzaXplb2Yoc3BpbmVsX2V1aTQ4X3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICooc3BpbmVsX2V1aTQ4X3QgKilkYXRhX3B0ciA9ICphcmc7CisgICAgICAgICAgICAgICAgZGF0YV9wdHIgKz0gc2l6ZW9mKHNwaW5lbF9ldWk0OF90KTsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggLT0gc2l6ZW9mKHNwaW5lbF9ldWk0OF90KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIHNwaW5lbF9ldWk2NF90ICphcmcgPSB2YV9hcmcoYXJncy0+b2JqLCBzcGluZWxfZXVpNjRfdCAqKTsKKyAgICAgICAgICAgIHJldCArPSBzaXplb2Yoc3BpbmVsX2V1aTY0X3QpOworCisgICAgICAgICAgICBpZiAoZGF0YV9sZW5fbWF4ID49IHNpemVvZihzcGluZWxfZXVpNjRfdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKihzcGluZWxfZXVpNjRfdCAqKWRhdGFfcHRyID0gKmFyZzsKKyAgICAgICAgICAgICAgICBkYXRhX3B0ciArPSBzaXplb2Yoc3BpbmVsX2V1aTY0X3QpOworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCAtPSBzaXplb2Yoc3BpbmVsX2V1aTY0X3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfQzoKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgYXJnID0gdmFfYXJnKGFyZ3MtPm9iaiwgdWludDMyX3QpOworICAgICAgICAgICAgc3BpbmVsX3NzaXplX3QgZW5jb2RlZF9zaXplOworCisgICAgICAgICAgICAvLyBSYW5nZSBDaGVjaworICAgICAgICAgICAgcmVxdWlyZV9hY3Rpb24oYXJnIDwgU1BJTkVMX01BWF9VSU5UX1BBQ0tFRCwgYmFpbCwge3JldCA9IC0xOyBlcnJubyA9IEVJTlZBTDt9KTsKKworICAgICAgICAgICAgZW5jb2RlZF9zaXplID0gc3BpbmVsX3BhY2tlZF91aW50X2VuY29kZShkYXRhX3B0ciwgZGF0YV9sZW5fbWF4LCBhcmcpOworICAgICAgICAgICAgcmV0ICs9IGVuY29kZWRfc2l6ZTsKKworICAgICAgICAgICAgaWYgKChzcGluZWxfc3NpemVfdClkYXRhX2xlbl9tYXggPj0gZW5jb2RlZF9zaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfcHRyICs9IGVuY29kZWRfc2l6ZTsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggLT0gKHNwaW5lbF9zaXplX3QpZW5jb2RlZF9zaXplOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfVVRGOF9DOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmdfYXJnID0gdmFfYXJnKGFyZ3MtPm9iaiwgY29uc3QgY2hhciAqKTsKKyAgICAgICAgICAgIHNpemVfdCBzdHJpbmdfYXJnX2xlbiA9IDA7CisKKyAgICAgICAgICAgIGlmIChzdHJpbmdfYXJnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0cmluZ19hcmdfbGVuID0gc3RybGVuKHN0cmluZ19hcmcpICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdHJpbmdfYXJnID0gIiI7CisgICAgICAgICAgICAgICAgc3RyaW5nX2FyZ19sZW4gPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgKz0gKHNwaW5lbF9zaXplX3Qpc3RyaW5nX2FyZ19sZW47CisKKyAgICAgICAgICAgIGlmIChkYXRhX2xlbl9tYXggPj0gc3RyaW5nX2FyZ19sZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWVtY3B5KGRhdGFfcHRyLCBzdHJpbmdfYXJnLCBzdHJpbmdfYXJnX2xlbik7CisKKyAgICAgICAgICAgICAgICBkYXRhX3B0ciArPSBzdHJpbmdfYXJnX2xlbjsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggLT0gKHNwaW5lbF9zaXplX3Qpc3RyaW5nX2FyZ19sZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1dMRU5fQzoKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfREFUQV9DOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCB1aW50OF90ICphcmcgPSB2YV9hcmcoYXJncy0+b2JqLCBjb25zdCB1aW50OF90ICopOworICAgICAgICAgICAgdWludDMyX3QgZGF0YV9zaXplX2FyZyA9IHZhX2FyZyhhcmdzLT5vYmosIHVpbnQzMl90KTsKKyAgICAgICAgICAgIHNwaW5lbF9zc2l6ZV90IHNpemVfbGVuID0gMDsKKyAgICAgICAgICAgIGNoYXIgbmV4dGZvcm1hdCA9ICpzcGluZWxfbmV4dF9wYWNrZWRfZGF0YXR5cGUocGFja19mb3JtYXQpOworCisgICAgICAgICAgICBpZiAoIChwYWNrX2Zvcm1hdFswXSA9PSBTUElORUxfREFUQVRZUEVfREFUQV9XTEVOX0MpCisgICAgICAgICAgICAgIHx8ICggKG5leHRmb3JtYXQgIT0gMCkgJiYgKG5leHRmb3JtYXQgIT0gJyknKSApCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBzaXplX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV9wYWNrKGRhdGFfcHRyLCBkYXRhX2xlbl9tYXgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywgZGF0YV9zaXplX2FyZyk7CisgICAgICAgICAgICAgICAgcmVxdWlyZV9hY3Rpb24oc2l6ZV9sZW4gPiAwLCBiYWlsLCB7cmV0ID0gLTE7IGVycm5vID0gRUlOVkFMO30pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgKz0gKHNwaW5lbF9zaXplX3Qpc2l6ZV9sZW4gKyBkYXRhX3NpemVfYXJnOworCisgICAgICAgICAgICBpZiAoZGF0YV9sZW5fbWF4ID49IChzcGluZWxfc2l6ZV90KXNpemVfbGVuICsgZGF0YV9zaXplX2FyZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX3B0ciArPSBzaXplX2xlbjsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggLT0gKHNwaW5lbF9zaXplX3Qpc2l6ZV9sZW47CisKKyAgICAgICAgICAgICAgICBtZW1jcHkoZGF0YV9wdHIsIGFyZywgZGF0YV9zaXplX2FyZyk7CisKKyAgICAgICAgICAgICAgICBkYXRhX3B0ciArPSBkYXRhX3NpemVfYXJnOworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCAtPSBkYXRhX3NpemVfYXJnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSAnVCc6CisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9DOgorICAgICAgICB7CisgICAgICAgICAgICBzcGluZWxfc3NpemVfdCBzdHJ1Y3RfbGVuID0gMDsKKyAgICAgICAgICAgIHNwaW5lbF9zc2l6ZV90IHNpemVfbGVuID0gMDsKKyAgICAgICAgICAgIGNoYXIgbmV4dGZvcm1hdCA9ICpzcGluZWxfbmV4dF9wYWNrZWRfZGF0YXR5cGUocGFja19mb3JtYXQpOworCisgICAgICAgICAgICByZXF1aXJlX2FjdGlvbihwYWNrX2Zvcm1hdFsxXSA9PSAnKCcsIGJhaWwsIHtyZXQgPSAtMTsgZXJybm8gPSBFSU5WQUw7fSk7CisKKyAgICAgICAgICAgIC8vIEZpcnN0IHdlIGZpZ3VyZSBvdXQgdGhlIHNpemUgb2YgdGhlIHN0cnVjdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhX2xpc3Rfb2JqIHN1YmFyZ3M7CisgICAgICAgICAgICAgICAgdmFfY29weShzdWJhcmdzLm9iaiwgYXJncy0+b2JqKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3RfbGVuID0gc3BpbmVsX2RhdGF0eXBlX3ZwYWNrXyhOVUxMLCAwLCBwYWNrX2Zvcm1hdCArIDIsICZzdWJhcmdzKTsKKyAgICAgICAgICAgICAgICB2YV9lbmQoc3ViYXJncy5vYmopOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIChwYWNrX2Zvcm1hdFswXSA9PSBTUElORUxfREFUQVRZUEVfU1RSVUNUX0MpCisgICAgICAgICAgICAgIHx8ICggKG5leHRmb3JtYXQgIT0gMCkgJiYgKG5leHRmb3JtYXQgIT0gJyknKSApCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBzaXplX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV9wYWNrKGRhdGFfcHRyLCBkYXRhX2xlbl9tYXgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywgc3RydWN0X2xlbik7CisgICAgICAgICAgICAgICAgcmVxdWlyZV9hY3Rpb24oc2l6ZV9sZW4gPiAwLCBiYWlsLCB7cmV0ID0gLTE7IGVycm5vID0gRUlOVkFMO30pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgKz0gc2l6ZV9sZW4gKyBzdHJ1Y3RfbGVuOworCisgICAgICAgICAgICBpZiAoc3RydWN0X2xlbiArIHNpemVfbGVuIDw9IChzcGluZWxfc3NpemVfdClkYXRhX2xlbl9tYXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9wdHIgKz0gc2l6ZV9sZW47CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4IC09IChzcGluZWxfc2l6ZV90KXNpemVfbGVuOworCisgICAgICAgICAgICAgICAgc3RydWN0X2xlbiA9IHNwaW5lbF9kYXRhdHlwZV92cGFja18oZGF0YV9wdHIsIGRhdGFfbGVuX21heCwgcGFja19mb3JtYXQgKyAyLCBhcmdzKTsKKworICAgICAgICAgICAgICAgIGRhdGFfcHRyICs9IHN0cnVjdF9sZW47CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4IC09IChzcGluZWxfc2l6ZV90KXN0cnVjdF9sZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlICcuJzoKKyAgICAgICAgICAgIC8vIFNraXAuCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gVW5zdXBwb3J0ZWQgVHlwZSEKKyAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisKKyAgICAgICAgfQorICAgIH0KKworYmFpbDoKKyAgICByZXR1cm4gcmV0OworfQorCitzcGluZWxfc3NpemVfdAorc3BpbmVsX2RhdGF0eXBlX3BhY2sodWludDhfdCAqZGF0YV9wdHIsIHNwaW5lbF9zaXplX3QgZGF0YV9sZW5fbWF4LCBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgLi4uKQoreworICAgIGludCByZXQ7CisgICAgdmFfbGlzdF9vYmogYXJnczsKKyAgICB2YV9zdGFydChhcmdzLm9iaiwgcGFja19mb3JtYXQpOworCisgICAgcmV0ID0gc3BpbmVsX2RhdGF0eXBlX3ZwYWNrXyhkYXRhX3B0ciwgZGF0YV9sZW5fbWF4LCBwYWNrX2Zvcm1hdCwgJmFyZ3MpOworCisgICAgdmFfZW5kKGFyZ3Mub2JqKTsKKyAgICByZXR1cm4gcmV0OworfQorCisKK3NwaW5lbF9zc2l6ZV90CitzcGluZWxfZGF0YXR5cGVfdnBhY2sodWludDhfdCAqZGF0YV9wdHIsIHNwaW5lbF9zaXplX3QgZGF0YV9sZW5fbWF4LCBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICAgIGludCByZXQ7CisgICAgdmFfbGlzdF9vYmogYXJnc19vYmo7CisgICAgdmFfY29weShhcmdzX29iai5vYmosIGFyZ3MpOworCisgICAgcmV0ID0gc3BpbmVsX2RhdGF0eXBlX3ZwYWNrXyhkYXRhX3B0ciwgZGF0YV9sZW5fbWF4LCBwYWNrX2Zvcm1hdCwgJmFyZ3Nfb2JqKTsKKworICAgIHZhX2VuZChhcmdzX29iai5vYmopOworICAgIHJldHVybiByZXQ7Cit9CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogLQorCisvLyAqKioqIExDT1ZfRVhDTF9TVEFSVCAqKioqCisKK2NvbnN0IGNoYXIgKgorc3BpbmVsX3Byb3Bfa2V5X3RvX2NzdHIoc3BpbmVsX3Byb3Bfa2V5X3QgcHJvcF9rZXkpCit7CisgICAgY29uc3QgY2hhciAqcmV0ID0gIlVOS05PV04iOworCisgICAgc3dpdGNoIChwcm9wX2tleSkKKyAgICB7CisgICAgY2FzZSBTUElORUxfUFJPUF9MQVNUX1NUQVRVUzoKKyAgICAgICAgcmV0ID0gIlBST1BfTEFTVF9TVEFUVVMiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfUFJPVE9DT0xfVkVSU0lPTjoKKyAgICAgICAgcmV0ID0gIlBST1BfUFJPVE9DT0xfVkVSU0lPTiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9OQ1BfVkVSU0lPTjoKKyAgICAgICAgcmV0ID0gIlBST1BfTkNQX1ZFUlNJT04iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSU5URVJGQUNFX1RZUEU6CisgICAgICAgIHJldCA9ICJQUk9QX0lOVEVSRkFDRV9UWVBFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1ZFTkRPUl9JRDoKKyAgICAgICAgcmV0ID0gIlBST1BfVkVORE9SX0lEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NBUFM6CisgICAgICAgIHJldCA9ICJQUk9QX0NBUFMiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSU5URVJGQUNFX0NPVU5UOgorICAgICAgICByZXQgPSAiUFJPUF9JTlRFUkZBQ0VfQ09VTlQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfUE9XRVJfU1RBVEU6CisgICAgICAgIHJldCA9ICJQUk9QX1BPV0VSX1NUQVRFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0hXQUREUjoKKyAgICAgICAgcmV0ID0gIlBST1BfSFdBRERSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0xPQ0s6CisgICAgICAgIHJldCA9ICJQUk9QX0xPQ0siOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSEJPX01FTV9NQVg6CisgICAgICAgIHJldCA9ICJQUk9QX0hCT19NRU1fTUFYIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0hCT19CTE9DS19NQVg6CisgICAgICAgIHJldCA9ICJQUk9QX0hCT19CTE9DS19NQVgiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSE9TVF9QT1dFUl9TVEFURToKKyAgICAgICAgcmV0ID0gIlBST1BfSE9TVF9QT1dFUl9TVEFURSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9HUElPX0NPTkZJRzoKKyAgICAgICAgcmV0ID0gIlBST1BfR1BJT19DT05GSUciOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfR1BJT19TVEFURToKKyAgICAgICAgcmV0ID0gIlBST1BfR1BJT19TVEFURSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9HUElPX1NUQVRFX1NFVDoKKyAgICAgICAgcmV0ID0gIlBST1BfR1BJT19TVEFURV9TRVQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfR1BJT19TVEFURV9DTEVBUjoKKyAgICAgICAgcmV0ID0gIlBST1BfR1BJT19TVEFURV9DTEVBUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9UUk5HXzMyOgorICAgICAgICByZXQgPSAiUFJPUF9UUk5HXzMyIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RSTkdfMTI4OgorICAgICAgICByZXQgPSAiUFJPUF9UUk5HXzEyOCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9UUk5HX1JBV18zMjoKKyAgICAgICAgcmV0ID0gIlBST1BfVFJOR19SQVdfMzIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfUEhZX0VOQUJMRUQ6CisgICAgICAgIHJldCA9ICJQUk9QX1BIWV9FTkFCTEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1BIWV9DSEFOOgorICAgICAgICByZXQgPSAiUFJPUF9QSFlfQ0hBTiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9QSFlfQ0hBTl9TVVBQT1JURUQ6CisgICAgICAgIHJldCA9ICJQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9QSFlfRlJFUToKKyAgICAgICAgcmV0ID0gIlBST1BfUEhZX0ZSRVEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfUEhZX0NDQV9USFJFU0hPTEQ6CisgICAgICAgIHJldCA9ICJQUk9QX1BIWV9DQ0FfVEhSRVNIT0xEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1BIWV9UWF9QT1dFUjoKKyAgICAgICAgcmV0ID0gIlBST1BfUEhZX1RYX1BPV0VSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1BIWV9SU1NJOgorICAgICAgICByZXQgPSAiUFJPUF9QSFlfUlNTSSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9QSFlfUlhfU0VOU0lUSVZJVFk6CisgICAgICAgIHJldCA9ICJQUk9QX1BIWV9SWF9TRU5TSVRJVklUWSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9KQU1fREVURUNUX0VOQUJMRToKKyAgICAgICAgcmV0ID0gIlBST1BfSkFNX0RFVEVDVF9FTkFCTEUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSkFNX0RFVEVDVEVEOgorICAgICAgICByZXQgPSAiUFJPUF9KQU1fREVURUNURUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSkFNX0RFVEVDVF9SU1NJX1RIUkVTSE9MRDoKKyAgICAgICAgcmV0ID0gIlBST1BfSkFNX0RFVEVDVF9SU1NJX1RIUkVTSE9MRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9KQU1fREVURUNUX1dJTkRPVzoKKyAgICAgICAgcmV0ID0gIlBST1BfSkFNX0RFVEVDVF9XSU5ET1ciOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSkFNX0RFVEVDVF9CVVNZOgorICAgICAgICByZXQgPSAiUFJPUF9KQU1fREVURUNUX0JVU1kiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSkFNX0RFVEVDVF9ISVNUT1JZX0JJVE1BUDoKKyAgICAgICAgcmV0ID0gIlBST1BfSkFNX0RFVEVDVF9ISVNUT1JZX0JJVE1BUCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURToKKyAgICAgICAgcmV0ID0gIlBST1BfTUFDX1NDQU5fU1RBVEUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTUFDX1NDQU5fTUFTSzoKKyAgICAgICAgcmV0ID0gIlBST1BfTUFDX1NDQU5fTUFTSyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfU0NBTl9QRVJJT0Q6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19TQ0FOX1BFUklPRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfU0NBTl9CRUFDT046CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19TQ0FOX0JFQUNPTiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfMTVfNF9MQUREUjoKKyAgICAgICAgcmV0ID0gIlBST1BfTUFDXzE1XzRfTEFERFIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTUFDXzE1XzRfU0FERFI6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ18xNV80X1NBRERSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ18xNV80X1BBTklEOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfMTVfNF9QQU5JRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfUkFXX1NUUkVBTV9FTkFCTEVEOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfUkFXX1NUUkVBTV9FTkFCTEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfUFJPTUlTQ1VPVVNfTU9ERSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfRU5FUkdZX1NDQU5fUkVTVUxUOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfRU5FUkdZX1NDQU5fUkVTVUxUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19EQVRBX1BPTExfUEVSSU9EOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfREFUQV9QT0xMX1BFUklPRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfV0hJVEVMSVNUOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfV0hJVEVMSVNUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19XSElURUxJU1RfRU5BQkxFRDoKKyAgICAgICAgcmV0ID0gIlBST1BfTUFDX1dISVRFTElTVF9FTkFCTEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19FWFRFTkRFRF9BRERSOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfRVhURU5ERURfQUREUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VOQUJMRUQ6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19TUkNfTUFUQ0hfRU5BQkxFRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUzoKKyAgICAgICAgcmV0ID0gIlBST1BfTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVM6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19CTEFDS0xJU1Q6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19CTEFDS0xJU1QiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTUFDX0JMQUNLTElTVF9FTkFCTEVEOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfQkxBQ0tMSVNUX0VOQUJMRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVUX1NBVkVEOgorICAgICAgICByZXQgPSAiUFJPUF9ORVRfU0FWRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVUX0lGX1VQOgorICAgICAgICByZXQgPSAiUFJPUF9ORVRfSUZfVVAiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVUX1NUQUNLX1VQOgorICAgICAgICByZXQgPSAiUFJPUF9ORVRfU1RBQ0tfVVAiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVUX1JPTEU6CisgICAgICAgIHJldCA9ICJQUk9QX05FVF9ST0xFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX05FVF9ORVRXT1JLX05BTUU6CisgICAgICAgIHJldCA9ICJQUk9QX05FVF9ORVRXT1JLX05BTUUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVUX1hQQU5JRDoKKyAgICAgICAgcmV0ID0gIlBST1BfTkVUX1hQQU5JRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9ORVRfTUFTVEVSX0tFWToKKyAgICAgICAgcmV0ID0gIlBST1BfTkVUX01BU1RFUl9LRVkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSOgorICAgICAgICByZXQgPSAiUFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVUX1BBUlRJVElPTl9JRDoKKyAgICAgICAgcmV0ID0gIlBST1BfTkVUX1BBUlRJVElPTl9JRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HOgorICAgICAgICByZXQgPSAiUFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRToKKyAgICAgICAgcmV0ID0gIlBST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX05FVF9QU0tDOgorICAgICAgICByZXQgPSAiUFJPUF9ORVRfUFNLQyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfTEVBREVSX0FERFI6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9MRUFERVJfQUREUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfUEFSRU5UOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfUEFSRU5UIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9DSElMRF9UQUJMRToKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0NISUxEX1RBQkxFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9MRUFERVJfUklEOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfTEVBREVSX1JJRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfTEVBREVSX1dFSUdIVDoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0xFQURFUl9XRUlHSFQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX0xPQ0FMX0xFQURFUl9XRUlHSFQ6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9MT0NBTF9MRUFERVJfV0VJR0hUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEE6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX05FVFdPUktfREFUQV9WRVJTSU9OOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfTkVUV09SS19EQVRBX1ZFUlNJT04iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEE6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT046CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT04iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX09OX01FU0hfTkVUUzoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX09OX01FU0hfTkVUUyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfT0ZGX01FU0hfUk9VVEVTOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfT0ZGX01FU0hfUk9VVEVTIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFM6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFMiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX0FMTE9XX0xPQ0FMX05FVF9EQVRBX0NIQU5HRToKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0FMTE9XX0xPQ0FMX05FVF9EQVRBX0NIQU5HRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfTU9ERToKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX01PREUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX0NISUxEX1RJTUVPVVQ6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9DSElMRF9USU1FT1VUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9STE9DMTY6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9STE9DMTYiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9VUEdSQURFX1RIUkVTSE9MRDoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX1JPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWToKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX05FVFdPUktfSURfVElNRU9VVDoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX05FVFdPUktfSURfVElNRU9VVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfQUNUSVZFX1JPVVRFUl9JRFM6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9BQ1RJVkVfUk9VVEVSX0lEUyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9ST1VURVJfUk9MRV9FTkFCTEVEOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQ6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVI6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfUFJFRkVSUkVEX1JPVVRFUl9JRDoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX1BSRUZFUlJFRF9ST1VURVJfSUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX05FSUdIQk9SX1RBQkxFOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfTkVJR0hCT1JfVEFCTEUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX0NISUxEX0NPVU5UX01BWDoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0NISUxEX0NPVU5UX01BWCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfTEVBREVSX05FVFdPUktfREFUQToKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0xFQURFUl9ORVRXT1JLX0RBVEEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX1NUQUJMRV9MRUFERVJfTkVUV09SS19EQVRBOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfU1RBQkxFX0xFQURFUl9ORVRXT1JLX0RBVEEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX0pPSU5FUlM6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9KT0lORVJTIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9DT01NSVNTSU9ORVJfRU5BQkxFRDoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0NPTU1JU1NJT05FUl9FTkFCTEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9UTUZfUFJPWFlfRU5BQkxFRDoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9UTUZfUFJPWFlfU1RSRUFNOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfVE1GX1BST1hZX1NUUkVBTSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fSk9JTkVSX0ZMQUc6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9KT0lORVJfRkxBRyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fRU5BQkxFX0ZJTFRFUklORzoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0VOQUJMRV9GSUxURVJJTkciOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX1BBTklEOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX1NURUVSSU5HX0RBVEE6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9TVEVFUklOR19EQVRBIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0lQVjZfTExfQUREUjoKKyAgICAgICAgcmV0ID0gIlBST1BfSVBWNl9MTF9BRERSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0lQVjZfTUxfQUREUjoKKyAgICAgICAgcmV0ID0gIlBST1BfSVBWNl9NTF9BRERSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0lQVjZfTUxfUFJFRklYOgorICAgICAgICByZXQgPSAiUFJPUF9JUFY2X01MX1BSRUZJWCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9JUFY2X0FERFJFU1NfVEFCTEU6CisgICAgICAgIHJldCA9ICJQUk9QX0lQVjZfQUREUkVTU19UQUJMRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9JUFY2X1JPVVRFX1RBQkxFOgorICAgICAgICByZXQgPSAiUFJPUF9JUFY2X1JPVVRFX1RBQkxFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0lQVjZfSUNNUF9QSU5HX09GRkxPQUQ6CisgICAgICAgIHJldCA9ICJQUk9QX0lQVjZfSUNNUF9QSU5HX09GRkxPQUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfU1RSRUFNX0RFQlVHOgorICAgICAgICByZXQgPSAiUFJPUF9TVFJFQU1fREVCVUciOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfU1RSRUFNX1JBVzoKKyAgICAgICAgcmV0ID0gIlBST1BfU1RSRUFNX1JBVyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9TVFJFQU1fTkVUOgorICAgICAgICByZXQgPSAiUFJPUF9TVFJFQU1fTkVUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkU6CisgICAgICAgIHJldCA9ICJQUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVUFSVF9CSVRSQVRFOgorICAgICAgICByZXQgPSAiUFJPUF9VQVJUX0JJVFJBVEUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVUFSVF9YT05fWE9GRjoKKyAgICAgICAgcmV0ID0gIlBST1BfVUFSVF9YT05fWE9GRiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF8xNV80X1BJQl9QSFlfQ0hBTk5FTFNfU1VQUE9SVEVEOgorICAgICAgICByZXQgPSAiUFJPUF8xNV80X1BJQl9QSFlfQ0hBTk5FTFNfU1VQUE9SVEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QXzE1XzRfUElCX01BQ19QUk9NSVNDVU9VU19NT0RFOgorICAgICAgICByZXQgPSAiUFJPUF8xNV80X1BJQl9NQUNfUFJPTUlTQ1VPVVNfTU9ERSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF8xNV80X1BJQl9NQUNfU0VDVVJJVFlfRU5BQkxFRDoKKyAgICAgICAgcmV0ID0gIlBST1BfMTVfNF9QSUJfTUFDX1NFQ1VSSVRZX0VOQUJMRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SRVNFVDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SRVNFVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9UT1RBTDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9UWF9QS1RfVE9UQUwiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfQUNLX1JFUToKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9UWF9QS1RfQUNLX1JFUSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9BQ0tFRDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9UWF9QS1RfQUNLRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfTk9fQUNLX1JFUToKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9UWF9QS1RfTk9fQUNLX1JFUSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9EQVRBOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX1BLVF9EQVRBIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0RBVEFfUE9MTDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9UWF9QS1RfREFUQV9QT0xMIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0JFQUNPTjoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9UWF9QS1RfQkVBQ09OIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0JFQUNPTl9SRVE6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfVFhfUEtUX0JFQUNPTl9SRVEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfT1RIRVI6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfVFhfUEtUX09USEVSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX1JFVFJZOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX1BLVF9SRVRSWSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX0VSUl9DQ0E6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfVFhfRVJSX0NDQSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9VTklDQVNUOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX1BLVF9VTklDQVNUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0JST0FEQ0FTVDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9UWF9QS1RfQlJPQURDQVNUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfRVJSX0FCT1JUOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX0VSUl9BQk9SVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9UT1RBTDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SWF9QS1RfVE9UQUwiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfREFUQToKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SWF9QS1RfREFUQSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9EQVRBX1BPTEw6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfUEtUX0RBVEFfUE9MTCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9CRUFDT046CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfUEtUX0JFQUNPTiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9CRUFDT05fUkVROgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX1BLVF9CRUFDT05fUkVRIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX09USEVSOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX1BLVF9PVEhFUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9GSUxUX1dMOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX1BLVF9GSUxUX1dMIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0ZJTFRfREE6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfUEtUX0ZJTFRfREEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9FUlJfRU1QVFk6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfRVJSX0VNUFRZIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX1VLV05fTkJSOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX0VSUl9VS1dOX05CUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX0VSUl9OVkxEX1NBRERSOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX0VSUl9OVkxEX1NBRERSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX1NFQ1VSSVRZOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX0VSUl9TRUNVUklUWSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX0VSUl9CQURfRkNTOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX0VSUl9CQURfRkNTIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX09USEVSOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX0VSUl9PVEhFUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9EVVA6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfUEtUX0RVUCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9VTklDQVNUOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX1BLVF9VTklDQVNUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0JST0FEQ0FTVDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SWF9QS1RfQlJPQURDQVNUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfSVBfU0VDX1RPVEFMOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX0lQX1NFQ19UT1RBTCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX0lQX0lOU0VDX1RPVEFMOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX0lQX0lOU0VDX1RPVEFMIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfSVBfRFJPUFBFRDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9UWF9JUF9EUk9QUEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfSVBfU0VDX1RPVEFMOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX0lQX1NFQ19UT1RBTCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX0lQX0lOU0VDX1RPVEFMOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX0lQX0lOU0VDX1RPVEFMIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfSVBfRFJPUFBFRDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SWF9JUF9EUk9QUEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfU1BJTkVMX1RPVEFMOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX1NQSU5FTF9UT1RBTCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1NQSU5FTF9UT1RBTDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SWF9TUElORUxfVE9UQUwiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9TUElORUxfRVJSOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX1NQSU5FTF9FUlIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9TUElORUxfT1VUX09GX09SREVSX1RJRDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SWF9TUElORUxfT1VUX09GX09SREVSX1RJRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX0lQX1RYX1NVQ0NFU1M6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfSVBfVFhfU1VDQ0VTUyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX0lQX1JYX1NVQ0NFU1M6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfSVBfUlhfU1VDQ0VTUyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX0lQX1RYX0ZBSUxVUkU6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfSVBfVFhfRkFJTFVSRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX0lQX1JYX0ZBSUxVUkU6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfSVBfUlhfRkFJTFVSRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NU0dfQlVGRkVSX0NPVU5URVJTOgorICAgICAgICByZXQgPSAiUFJPUF9NU0dfQlVGRkVSX0NPVU5URVJTIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX05FU1RfU1RSRUFNX01GRzoKKyAgICAgICAgcmV0ID0gIlBST1BfTkVTVF9TVFJFQU1fTUZHIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX05FU1RfTEVHQUNZX1VMQV9QUkVGSVg6CisgICAgICAgIHJldCA9ICJQUk9QX05FU1RfTEVHQUNZX1VMQV9QUkVGSVgiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVTVF9MRUdBQ1lfSk9JTkVEX05PREU6CisgICAgICAgIHJldCA9ICJQUk9QX05FU1RfTEVHQUNZX0pPSU5FRF9OT0RFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0RFQlVHX1RFU1RfQVNTRVJUOgorICAgICAgICByZXQgPSAiUFJPUF9ERUJVR19URVNUX0FTU0VSVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9ERUJVR19OQ1BfTE9HX0xFVkVMOgorICAgICAgICByZXQgPSAiUFJPUF9ERUJVR19OQ1BfTE9HX0xFVkVMIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitjb25zdCBjaGFyICpzcGluZWxfbmV0X3JvbGVfdG9fY3N0cih1aW50OF90IG5ldF9yb2xlKQoreworICAgIGNvbnN0IGNoYXIgKnJldCA9ICJORVRfUk9MRV9VTktOT05XIjsKKworICAgIHN3aXRjaCAobmV0X3JvbGUpCisgICAgeworICAgIGNhc2UgU1BJTkVMX05FVF9ST0xFX0RFVEFDSEVEOgorICAgICAgICByZXQgPSAiTkVUX1JPTEVfREVUQUNIRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX05FVF9ST0xFX0NISUxEOgorICAgICAgICByZXQgPSAiTkVUX1JPTEVfQ0hJTEQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX05FVF9ST0xFX1JPVVRFUjoKKyAgICAgICAgcmV0ID0gIk5FVF9ST0xFX1JPVVRFUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfTkVUX1JPTEVfTEVBREVSOgorICAgICAgICByZXQgPSAiTkVUX1JPTEVfTEVBREVSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitjb25zdCBjaGFyICpzcGluZWxfc3RhdHVzX3RvX2NzdHIoc3BpbmVsX3N0YXR1c190IHN0YXR1cykKK3sKKyAgICBjb25zdCBjaGFyICpyZXQgPSAiVU5LTk9XTiI7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgY2FzZSBTUElORUxfU1RBVFVTX09LOgorICAgICAgICByZXQgPSAiU1RBVFVTX09LIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfRkFJTFVSRToKKyAgICAgICAgcmV0ID0gIlNUQVRVU19GQUlMVVJFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfVU5JTVBMRU1FTlRFRDoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19VTklNUExFTUVOVEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9BUkdVTUVOVDoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19JTlZBTElEX0FSR1VNRU5UIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9TVEFURToKKyAgICAgICAgcmV0ID0gIlNUQVRVU19JTlZBTElEX1NUQVRFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9DT01NQU5EOgorICAgICAgICByZXQgPSAiU1RBVFVTX0lOVkFMSURfQ09NTUFORCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0lOVkFMSURfSU5URVJGQUNFOgorICAgICAgICByZXQgPSAiU1RBVFVTX0lOVkFMSURfSU5URVJGQUNFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfSU5URVJOQUxfRVJST1I6CisgICAgICAgIHJldCA9ICJTVEFUVVNfSU5URVJOQUxfRVJST1IiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19TRUNVUklUWV9FUlJPUjoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19TRUNVUklUWV9FUlJPUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SOgorICAgICAgICByZXQgPSAiU1RBVFVTX1BBUlNFX0VSUk9SIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfSU5fUFJPR1JFU1M6CisgICAgICAgIHJldCA9ICJTVEFUVVNfSU5fUFJPR1JFU1MiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19OT01FTToKKyAgICAgICAgcmV0ID0gIlNUQVRVU19OT01FTSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0JVU1k6CisgICAgICAgIHJldCA9ICJTVEFUVVNfQlVTWSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX1BST1BfTk9UX0ZPVU5EOgorICAgICAgICByZXQgPSAiU1RBVFVTX1BST1BfTk9UX0ZPVU5EIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfRFJPUFBFRDoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19EUk9QUEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfRU1QVFk6CisgICAgICAgIHJldCA9ICJTVEFUVVNfRU1QVFkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19DTURfVE9PX0JJRzoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19DTURfVE9PX0JJRyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX05PX0FDSzoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19OT19BQ0siOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19DQ0FfRkFJTFVSRToKKyAgICAgICAgcmV0ID0gIlNUQVRVU19DQ0FfRkFJTFVSRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0FMUkVBRFk6CisgICAgICAgIHJldCA9ICJTVEFUVVNfQUxSRUFEWSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0lURU1fTk9UX0ZPVU5EOgorICAgICAgICByZXQgPSAiU1RBVFVTX0lURU1fTk9UX0ZPVU5EIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QOgorICAgICAgICByZXQgPSAiU1RBVFVTX0lOVkFMSURfQ09NTUFORF9GT1JfUFJPUCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0pPSU5fRkFJTFVSRToKKyAgICAgICAgcmV0ID0gIlNUQVRVU19KT0lOX0ZBSUxVUkUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19KT0lOX1NFQ1VSSVRZOgorICAgICAgICByZXQgPSAiU1RBVFVTX0pPSU5fU0VDVVJJVFkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19KT0lOX05PX1BFRVJTOgorICAgICAgICByZXQgPSAiU1RBVFVTX0pPSU5fTk9fUEVFUlMiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19KT0lOX0lOQ09NUEFUSUJMRToKKyAgICAgICAgcmV0ID0gIlNUQVRVU19KT0lOX0lOQ09NUEFUSUJMRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX1JFU0VUX1BPV0VSX09OOgorICAgICAgICByZXQgPSAiU1RBVFVTX1JFU0VUX1BPV0VSX09OIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfUkVTRVRfRVhURVJOQUw6CisgICAgICAgIHJldCA9ICJTVEFUVVNfUkVTRVRfRVhURVJOQUwiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19SRVNFVF9TT0ZUV0FSRToKKyAgICAgICAgcmV0ID0gIlNUQVRVU19SRVNFVF9TT0ZUV0FSRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX1JFU0VUX0ZBVUxUOgorICAgICAgICByZXQgPSAiU1RBVFVTX1JFU0VUX0ZBVUxUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfUkVTRVRfQ1JBU0g6CisgICAgICAgIHJldCA9ICJTVEFUVVNfUkVTRVRfQ1JBU0giOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19SRVNFVF9BU1NFUlQ6CisgICAgICAgIHJldCA9ICJTVEFUVVNfUkVTRVRfQVNTRVJUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfUkVTRVRfT1RIRVI6CisgICAgICAgIHJldCA9ICJTVEFUVVNfUkVTRVRfT1RIRVIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19SRVNFVF9VTktOT1dOOgorICAgICAgICByZXQgPSAiU1RBVFVTX1JFU0VUX1VOS05PV04iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19SRVNFVF9XQVRDSERPRzoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19SRVNFVF9XQVRDSERPRyI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworY29uc3QgY2hhciAqc3BpbmVsX2NhcGFiaWxpdHlfdG9fY3N0cih1bnNpZ25lZCBpbnQgY2FwYWJpbGl0eSkKK3sKKyAgICBjb25zdCBjaGFyICpyZXQgPSAiVU5LTk9XTiI7CisKKyAgICBzd2l0Y2ggKGNhcGFiaWxpdHkpCisgICAgeworICAgIGNhc2UgU1BJTkVMX0NBUF9MT0NLOgorICAgICAgICByZXQgPSAiQ0FQX0xPQ0siOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9ORVRfU0FWRToKKyAgICAgICAgcmV0ID0gIkNBUF9ORVRfU0FWRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX0hCTzoKKyAgICAgICAgcmV0ID0gIkNBUF9IQk8iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9QT1dFUl9TQVZFOgorICAgICAgICByZXQgPSAiQ0FQX1BPV0VSX1NBVkUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9DT1VOVEVSUzoKKyAgICAgICAgcmV0ID0gIkNBUF9DT1VOVEVSUyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX0pBTV9ERVRFQ1Q6CisgICAgICAgIHJldCA9ICJDQVBfSkFNX0RFVEVDVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX1BFRUtfUE9LRToKKyAgICAgICAgcmV0ID0gIkNBUF9QRUVLX1BPS0UiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9XUklUQUJMRV9SQVdfU1RSRUFNOgorICAgICAgICByZXQgPSAiQ0FQX1dSSVRBQkxFX1JBV19TVFJFQU0iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9HUElPOgorICAgICAgICByZXQgPSAiQ0FQX0dQSU8iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9UUk5HOgorICAgICAgICByZXQgPSAiQ0FQX1RSTkciOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9DTURfTVVMVEk6CisgICAgICAgIHJldCA9ICJDQVBfQ01EX01VTFRJIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfODAyXzE1XzRfMjAwMzoKKyAgICAgICAgcmV0ID0gIkNBUF84MDJfMTVfNF8yMDAzIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfODAyXzE1XzRfMjAwNjoKKyAgICAgICAgcmV0ID0gIkNBUF84MDJfMTVfNF8yMDA2IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfODAyXzE1XzRfMjAxMToKKyAgICAgICAgcmV0ID0gIkNBUF84MDJfMTVfNF8yMDExIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfODAyXzE1XzRfUElCOgorICAgICAgICByZXQgPSAiQ0FQXzgwMl8xNV80X1BJQiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQXzgwMl8xNV80XzI0NTBNSFpfT1FQU0s6CisgICAgICAgIHJldCA9ICJDQVBfODAyXzE1XzRfMjQ1ME1IWl9PUVBTSyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQXzgwMl8xNV80XzkxNU1IWl9PUVBTSzoKKyAgICAgICAgcmV0ID0gIkNBUF84MDJfMTVfNF85MTVNSFpfT1FQU0siOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF84MDJfMTVfNF84NjhNSFpfT1FQU0s6CisgICAgICAgIHJldCA9ICJDQVBfODAyXzE1XzRfODY4TUhaX09RUFNLIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfODAyXzE1XzRfOTE1TUhaX0JQU0s6CisgICAgICAgIHJldCA9ICJDQVBfODAyXzE1XzRfOTE1TUhaX0JQU0siOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF84MDJfMTVfNF84NjhNSFpfQlBTSzoKKyAgICAgICAgcmV0ID0gIkNBUF84MDJfMTVfNF84NjhNSFpfQlBTSyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQXzgwMl8xNV80XzkxNU1IWl9BU0s6CisgICAgICAgIHJldCA9ICJDQVBfODAyXzE1XzRfOTE1TUhaX0FTSyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQXzgwMl8xNV80Xzg2OE1IWl9BU0s6CisgICAgICAgIHJldCA9ICJDQVBfODAyXzE1XzRfODY4TUhaX0FTSyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX1JPTEVfUk9VVEVSOgorICAgICAgICByZXQgPSAiQ0FQX1JPTEVfUk9VVEVSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfUk9MRV9TTEVFUFk6CisgICAgICAgIHJldCA9ICJDQVBfUk9MRV9TTEVFUFkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9ORVRfVEhSRUFEXzFfMDoKKyAgICAgICAgcmV0ID0gIkNBUF9ORVRfVEhSRUFEXzFfMCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX01BQ19XSElURUxJU1Q6CisgICAgICAgIHJldCA9ICJDQVBfTUFDX1dISVRFTElTVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX01BQ19SQVc6CisgICAgICAgIHJldCA9ICJDQVBfTUFDX1JBVyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX09PQl9TVEVFUklOR19EQVRBOgorICAgICAgICByZXQgPSAiQ0FQX09PQl9TVEVFUklOR19EQVRBIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfVEhSRUFEX0NPTU1JU1NJT05FUjoKKyAgICAgICAgcmV0ID0gIkNBUF9USFJFQURfQ09NTUlTU0lPTkVSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfVEhSRUFEX1RNRl9QUk9YWToKKyAgICAgICAgcmV0ID0gIkNBUF9USFJFQURfVE1GX1BST1hZIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfTkVTVF9MRUdBQ1lfSU5URVJGQUNFOgorICAgICAgICByZXQgPSAiQ0FQX05FU1RfTEVHQUNZX0lOVEVSRkFDRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX05FU1RfTEVHQUNZX05FVF9XQUtFOgorICAgICAgICByZXQgPSAiQ0FQX05FU1RfTEVHQUNZX05FVF9XQUtFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfTkVTVF9UUkFOU01JVF9IT09LOgorICAgICAgICByZXQgPSAiQ0FQX05FU1RfVFJBTlNNSVRfSE9PSyI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworLy8gKioqKiBMQ09WX0VYQ0xfU1RPUCAqKioqCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBTUElORUxfU0VMRl9URVNUCisKK2ludAorbWFpbih2b2lkKQoreworICAgIGludCByZXQgPSAtMTsKKworICAgIGNvbnN0IGNoYXIgc3RhdGljX3N0cmluZ1tdID0gInN0YXRpY19zdHJpbmciOworICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOworICAgIHNzaXplX3QgbGVuOworCisgICAgbGVuID0gc3BpbmVsX2RhdGF0eXBlX3BhY2soYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIkNpaUxVIiwgMHg4OCwgOSwgMHhBMywgMHhERUFEQkVFRiwgc3RhdGljX3N0cmluZyk7CisKKyAgICBpZiAobGVuICE9IDIyKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJlcnJvcjolZDogbGVuICE9IDIyOyAoJWQpXG4iLCBfX0xJTkVfXywgKGludClsZW4pOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgeworICAgICAgICB1aW50OF90IGMgPSAwOworICAgICAgICB1bnNpZ25lZCBpbnQgaTEgPSAwOworICAgICAgICB1bnNpZ25lZCBpbnQgaTIgPSAwOworICAgICAgICB1aW50MzJfdCBsID0gMDsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyID0gTlVMTDsKKworICAgICAgICBsZW4gPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKGJ1ZmZlciwgKHNwaW5lbF9zaXplX3QpbGVuLCAiQ2lpTFUiLCAmYywgJmkxLCAmaTIsICZsLCAmc3RyKTsKKworICAgICAgICBpZiAobGVuICE9IDIyKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiVkOiBsZW4gIT0gMjI7ICglZClcbiIsIF9fTElORV9fLCAoaW50KWxlbik7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYyAhPSAweDg4KQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiB4ICE9IDB4ODg7ICglZClcbiIsIGMpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkxICE9IDkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IGkxICE9IDk7ICglZClcbiIsIGkxKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpMiAhPSAweEEzKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiBpMiAhPSAweEEzOyAoMHglMDJYKVxuIiwgaTIpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGwgIT0gMHhERUFEQkVFRikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJlcnJvcjogbCAhPSAweERFQURCRUVGOyAoMHglMDhYKVxuIiwgKHVuc2lnbmVkIGludClsKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJjbXAoc3RyLCBzdGF0aWNfc3RyaW5nKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiVkOiBzdHJjbXAoc3RyLHN0YXRpY19zdHJpbmcpICE9IDBcbiIsIF9fTElORV9fKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBtZW1zZXQoYnVmZmVyLCAweEFBLCBzaXplb2YoYnVmZmVyKSk7CisKKyAgICBsZW4gPSBzcGluZWxfZGF0YXR5cGVfcGFjayhidWZmZXIsIHNpemVvZihidWZmZXIpLCAiQ2l0KGlMKVUiLCAweDg4LCA5LCAweEEzLCAweERFQURCRUVGLCBzdGF0aWNfc3RyaW5nKTsKKworICAgIGlmIChsZW4gIT0gMjQpCisgICAgeworICAgICAgICBwcmludGYoImVycm9yOiVkOiBsZW4gIT0gMjQ7ICglZClcbiIsIF9fTElORV9fLCAoaW50KWxlbik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKworCisgICAgeworICAgICAgICB1aW50OF90IGMgPSAwOworICAgICAgICB1bnNpZ25lZCBpbnQgaTEgPSAwOworICAgICAgICB1bnNpZ25lZCBpbnQgaTIgPSAwOworICAgICAgICB1aW50MzJfdCBsID0gMDsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyID0gTlVMTDsKKworICAgICAgICBsZW4gPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKGJ1ZmZlciwgKHNwaW5lbF9zaXplX3QpbGVuLCAiQ2l0KGlMKVUiLCAmYywgJmkxLCAmaTIsICZsLCAmc3RyKTsKKworICAgICAgICBpZiAobGVuICE9IDI0KQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiVkOiBsZW4gIT0gMjQ7ICglZClcbiIsIF9fTElORV9fLCAoaW50KWxlbik7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYyAhPSAweDg4KQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiB4ICE9IDB4ODg7ICglZClcbiIsIGMpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkxICE9IDkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IGkxICE9IDk7ICglZClcbiIsIGkxKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpMiAhPSAweEEzKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiBpMiAhPSAweEEzOyAoMHglMDJYKVxuIiwgaTIpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGwgIT0gMHhERUFEQkVFRikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJlcnJvcjogbCAhPSAweERFQURCRUVGOyAoMHglMDhYKVxuIiwgKHVuc2lnbmVkIGludClsKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJjbXAoc3RyLCBzdGF0aWNfc3RyaW5nKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiVkOiBzdHJjbXAoc3RyLHN0YXRpY19zdHJpbmcpICE9IDBcbiIsIF9fTElORV9fKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgIH0KKworCisKKyAgICBwcmludGYoIk9LXG4iKTsKKyAgICByZXQgPSAwOworICAgIHJldHVybiByZXQ7CisKK2JhaWw6CisgICAgcHJpbnRmKCJGQUlMVVJFXG4iKTsKKyAgICByZXR1cm4gcmV0OworfQorCisjZW5kaWYgLy8gI2lmIFNQSU5FTF9TRUxGX1RFU1QKZGlmZiAtLWdpdCBhL3NyYy9uY3Avc3BpbmVsLmggYi9zcmMvbmNwL3NwaW5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMTJkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbmNwL3NwaW5lbC5oCkBAIC0wLDAgKzEsMTQzNSBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTUElORUxfSEVBREVSX0lOQ0xVREVECisjZGVmaW5lIFNQSU5FTF9IRUFERVJfSU5DTFVERUQgMQorCisjaWZkZWYgU1BJTkVMX1BMQVRGT1JNX0hFQURFUgorI2luY2x1ZGUgU1BJTkVMX1BMQVRGT1JNX0hFQURFUgorI2Vsc2UgLy8gaWZkZWYgU1BJTkVMX1BMQVRGT1JNX0hFQURFUgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZiAvLyBlbHNlIFNQSU5FTF9QTEFURk9STV9IRUFERVIKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUworCisjIGlmIGRlZmluZWQoX19HTlVDX18pCisjICBkZWZpbmUgU1BJTkVMX0FQSV9FWFRFUk4gICAgICAgICAgICAgZXh0ZXJuIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKKyMgIGRlZmluZSBTUElORUxfQVBJX05PTk5VTExfQUxMICAgICAgICBfX2F0dHJpYnV0ZV9fKChub25udWxsKSkKKyMgIGRlZmluZSBTUElORUxfQVBJX1dBUk5fVU5VU0VEX1JFU1VMVCBfX2F0dHJpYnV0ZV9fKCh3YXJuX3VudXNlZF9yZXN1bHQpKQorIyBlbmRpZiAvLyBpZmRlZiBfX0dOVUNfXworCisjIGlmICFkZWZpbmVkKF9fQkVHSU5fREVDTFMpIHx8ICFkZWZpbmVkKF9fRU5EX0RFQ0xTKQorIyAgaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgICBkZWZpbmUgX19CRUdJTl9ERUNMUyAgIGV4dGVybiAiQyIgeworIyAgIGRlZmluZSBfX0VORF9ERUNMUyAgICAgfQorIyAgZWxzZSAvLyBpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyAgIGRlZmluZSBfX0JFR0lOX0RFQ0xTCisjICAgZGVmaW5lIF9fRU5EX0RFQ0xTCisjICBlbmRpZiAvLyBlbHNlIGRlZmluZWQoX19jcGx1c3BsdXMpCisjIGVuZGlmIC8vIGlmICFkZWZpbmVkKF9fQkVHSU5fREVDTFMpIHx8ICFkZWZpbmVkKF9fRU5EX0RFQ0xTKQorCisjZW5kaWYgLy8gaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUworCisjaWZuZGVmIFNQSU5FTF9BUElfRVhURVJOCisjIGRlZmluZSBTUElORUxfQVBJX0VYVEVSTiAgICAgICAgICAgICAgZXh0ZXJuCisjZW5kaWYKKworI2lmbmRlZiBTUElORUxfQVBJX05PTk5VTExfQUxMCisjIGRlZmluZSBTUElORUxfQVBJX05PTk5VTExfQUxMCisjZW5kaWYKKworI2lmbmRlZiBTUElORUxfQVBJX1dBUk5fVU5VU0VEX1JFU1VMVAorIyBkZWZpbmUgU1BJTkVMX0FQSV9XQVJOX1VOVVNFRF9SRVNVTFQKKyNlbmRpZgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgU1BJTkVMX1BST1RPQ09MX1ZFUlNJT05fVEhSRUFEX01BSk9SICAgIDQKKyNkZWZpbmUgU1BJTkVMX1BST1RPQ09MX1ZFUlNJT05fVEhSRUFEX01JTk9SICAgIDMKKworI2RlZmluZSBTUElORUxfRlJBTUVfTUFYX1NJWkUgICAgICAgICAgIDEzMDAKKworLy8vIE1hY3JvIGZvciBnZW5lcmF0aW5nIGJpdCBtYXNrcyB1c2luZyBiaXQgaW5kZXggZnJvbSB0aGUgc3BlYworI2RlZmluZSBTUElORUxfQklUX01BU0soYml0X2luZGV4LGZpZWxkX2JpdF9jb3VudCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoMSA8PCAoKGZpZWxkX2JpdF9jb3VudCkgLSAxKSkgPj4gKGJpdF9pbmRleCkgKQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK19fQkVHSU5fREVDTFMKKwordHlwZWRlZiBlbnVtCit7CisgICAgU1BJTkVMX1NUQVRVU19PSyAgICAgICAgICAgICAgICAgICAgPSAwLCAvLy88IE9wZXJhdGlvbiBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKyAgICBTUElORUxfU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgICA9IDEsIC8vLzwgT3BlcmF0aW9uIGhhcyBmYWlsZWQgZm9yIHNvbWUgdW5kZWZpbmVkIHJlYXNvbi4KKworICAgIFNQSU5FTF9TVEFUVVNfVU5JTVBMRU1FTlRFRCAgICAgICAgID0gMiwgLy8vPCBHaXZlbiBvcGVyYXRpb24gaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkLgorICAgIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9BUkdVTUVOVCAgICAgID0gMywgLy8vPCBBbiBhcmd1bWVudCB0byB0aGUgb3BlcmF0aW9uIGlzIGludmFsaWQuCisgICAgU1BJTkVMX1NUQVRVU19JTlZBTElEX1NUQVRFICAgICAgICAgPSA0LCAvLy88IFRoaXMgb3BlcmF0aW9uIGlzIGludmFsaWQgZm9yIHRoZSBjdXJyZW50IGRldmljZSBzdGF0ZS4KKyAgICBTUElORUxfU1RBVFVTX0lOVkFMSURfQ09NTUFORCAgICAgICA9IDUsIC8vLzwgVGhpcyBjb21tYW5kIGlzIG5vdCByZWNvZ25pemVkLgorICAgIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9JTlRFUkZBQ0UgICAgID0gNiwgLy8vPCBUaGlzIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVkLgorICAgIFNQSU5FTF9TVEFUVVNfSU5URVJOQUxfRVJST1IgICAgICAgID0gNywgLy8vPCBBbiBpbnRlcm5hbCBydW50aW1lIGVycm9yIGhhcyBvY2N1cmVkLgorICAgIFNQSU5FTF9TVEFUVVNfU0VDVVJJVFlfRVJST1IgICAgICAgID0gOCwgLy8vPCBBIHNlY3VyaXR5L2F1dGhlbnRpY2F0aW9uIGVycm9yIGhhcyBvY2N1cmVkLgorICAgIFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IgICAgICAgICAgID0gOSwgLy8vPCBBIGVycm9yIGhhcyBvY2N1cmVkIHdoaWxlIHBhcnNpbmcgdGhlIGNvbW1hbmQuCisgICAgU1BJTkVMX1NUQVRVU19JTl9QUk9HUkVTUyAgICAgICAgICAgPSAxMCwgLy8vPCBUaGlzIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcy4KKyAgICBTUElORUxfU1RBVFVTX05PTUVNICAgICAgICAgICAgICAgICA9IDExLCAvLy88IE9wZXJhdGlvbiBwcmV2ZW50ZWQgZHVlIHRvIG1lbW9yeSBwcmVzc3VyZS4KKyAgICBTUElORUxfU1RBVFVTX0JVU1kgICAgICAgICAgICAgICAgICA9IDEyLCAvLy88IFRoZSBkZXZpY2UgaXMgY3VycmVudGx5IHBlcmZvcm1pbmcgYSBtdXR1YWxseSBleGNsdXNpdmUgb3BlcmF0aW9uCisgICAgU1BJTkVMX1NUQVRVU19QUk9QX05PVF9GT1VORCAgICAgICAgPSAxMywgLy8vPCBUaGUgZ2l2ZW4gcHJvcGVydHkgaXMgbm90IHJlY29nbml6ZWQuCisgICAgU1BJTkVMX1NUQVRVU19EUk9QUEVEICAgICAgICAgICAgICAgPSAxNCwgLy8vPCBBL1RoZSBwYWNrZXQgd2FzIGRyb3BwZWQuCisgICAgU1BJTkVMX1NUQVRVU19FTVBUWSAgICAgICAgICAgICAgICAgPSAxNSwgLy8vPCBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gaXMgZW1wdHkuCisgICAgU1BJTkVMX1NUQVRVU19DTURfVE9PX0JJRyAgICAgICAgICAgPSAxNiwgLy8vPCBUaGUgY29tbWFuZCB3YXMgdG9vIGxhcmdlIHRvIGZpdCBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyLgorICAgIFNQSU5FTF9TVEFUVVNfTk9fQUNLICAgICAgICAgICAgICAgID0gMTcsIC8vLzwgVGhlIHBhY2tldCB3YXMgbm90IGFja25vd2xlZGdlZC4KKyAgICBTUElORUxfU1RBVFVTX0NDQV9GQUlMVVJFICAgICAgICAgICA9IDE4LCAvLy88IFRoZSBwYWNrZXQgd2FzIG5vdCBzZW50IGR1ZSB0byBhIENDQSBmYWlsdXJlLgorICAgIFNQSU5FTF9TVEFUVVNfQUxSRUFEWSAgICAgICAgICAgICAgID0gMTksIC8vLzwgVGhlIG9wZXJhdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgorICAgIFNQSU5FTF9TVEFUVVNfSVRFTV9OT1RfRk9VTkQgICAgICAgID0gMjAsIC8vLzwgVGhlIGdpdmVuIGl0ZW0gY291bGQgbm90IGJlIGZvdW5kLgorICAgIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAyMSwgLy8vPCBUaGUgZ2l2ZW4gY29tbWFuZCBjYW5ub3QgYmUgcGVyZm9ybWVkIG9uIHRoaXMgcHJvcGVydHkuCisKKyAgICBTUElORUxfU1RBVFVTX0pPSU5fX0JFR0lOICAgICAgICAgICA9IDEwNCwKKworICAgIC8vLyBHZW5lcmljIGZhaWx1cmUgdG8gYXNzb2NpYXRlIHdpdGggb3RoZXIgcGVlcnMuCisgICAgLyoqCisgICAgICogIFRoaXMgc3RhdHVzIGVycm9yIHNob3VsZCBub3QgYmUgdXNlZCBieSBpbXBsZW1lbnRvcnMgaWYKKyAgICAgKiAgZW5vdWdoIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhhdCBvbmUgb2YgdGhlCisgICAgICogIGxhdGVyIGpvaW4gZmFpbHVyZSBzdGF0dXMgY29kZXMgd291bGQgYmUgbW9yZSBhY2N1cmF0ZS4KKyAgICAgKgorICAgICAqICBcc2EgU1BJTkVMX1BST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORworICAgICAqLworICAgIFNQSU5FTF9TVEFUVVNfSk9JTl9GQUlMVVJFICAgICAgICAgID0gU1BJTkVMX1NUQVRVU19KT0lOX19CRUdJTiArIDAsCisKKyAgICAvLy8gVGhlIG5vZGUgZm91bmQgb3RoZXIgcGVlcnMgYnV0IHdhcyB1bmFibGUgdG8gZGVjb2RlIHRoZWlyIHBhY2tldHMuCisgICAgLyoqCisgICAgICogIFR5cGljYWxseSB0aGlzIGVycm9yIGNvZGUgaW5kaWNhdGVzIHRoYXQgdGhlIG5ldHdvcmsKKyAgICAgKiAga2V5IGhhcyBiZWVuIHNldCBpbmNvcnJlY3RseS4KKyAgICAgKgorICAgICAqICBcc2EgU1BJTkVMX1BST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORworICAgICAqLworICAgIFNQSU5FTF9TVEFUVVNfSk9JTl9TRUNVUklUWSAgICAgICAgID0gU1BJTkVMX1NUQVRVU19KT0lOX19CRUdJTiArIDEsCisKKyAgICAvLy8gVGhlIG5vZGUgd2FzIHVuYWJsZSB0byBmaW5kIGFueSBvdGhlciBwZWVycyBvbiB0aGUgbmV0d29yay4KKyAgICAvKioKKyAgICAgKiAgXHNhIFNQSU5FTF9QUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkcKKyAgICAgKi8KKyAgICBTUElORUxfU1RBVFVTX0pPSU5fTk9fUEVFUlMgICAgICAgICA9IFNQSU5FTF9TVEFUVVNfSk9JTl9fQkVHSU4gKyAyLAorCisgICAgLy8vIFRoZSBvbmx5IHBvdGVudGlhbCBwZWVyIG5vZGVzIGZvdW5kIGFyZSBpbmNvbXBhdGlibGUuCisgICAgLyoqCisgICAgICogIFxzYSBTUElORUxfUFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HCisgICAgICovCisgICAgU1BJTkVMX1NUQVRVU19KT0lOX0lOQ09NUEFUSUJMRSAgICAgPSBTUElORUxfU1RBVFVTX0pPSU5fX0JFR0lOICsgMywKKworICAgIFNQSU5FTF9TVEFUVVNfSk9JTl9fRU5EICAgICAgICAgICAgID0gMTEyLAorCisgICAgU1BJTkVMX1NUQVRVU19SRVNFVF9fQkVHSU4gICAgICAgICAgPSAxMTIsCisgICAgU1BJTkVMX1NUQVRVU19SRVNFVF9QT1dFUl9PTiAgICAgICAgPSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTiArIDAsCisgICAgU1BJTkVMX1NUQVRVU19SRVNFVF9FWFRFUk5BTCAgICAgICAgPSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTiArIDEsCisgICAgU1BJTkVMX1NUQVRVU19SRVNFVF9TT0ZUV0FSRSAgICAgICAgPSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTiArIDIsCisgICAgU1BJTkVMX1NUQVRVU19SRVNFVF9GQVVMVCAgICAgICAgICAgPSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTiArIDMsCisgICAgU1BJTkVMX1NUQVRVU19SRVNFVF9DUkFTSCAgICAgICAgICAgPSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTiArIDQsCisgICAgU1BJTkVMX1NUQVRVU19SRVNFVF9BU1NFUlQgICAgICAgICAgPSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTiArIDUsCisgICAgU1BJTkVMX1NUQVRVU19SRVNFVF9PVEhFUiAgICAgICAgICAgPSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTiArIDYsCisgICAgU1BJTkVMX1NUQVRVU19SRVNFVF9VTktOT1dOICAgICAgICAgPSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTiArIDcsCisgICAgU1BJTkVMX1NUQVRVU19SRVNFVF9XQVRDSERPRyAgICAgICAgPSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTiArIDgsCisgICAgU1BJTkVMX1NUQVRVU19SRVNFVF9fRU5EICAgICAgICAgICAgPSAxMjgsCisKKyAgICBTUElORUxfU1RBVFVTX1ZFTkRPUl9fQkVHSU4gICAgICAgICA9IDE1MzYwLAorICAgIFNQSU5FTF9TVEFUVVNfVkVORE9SX19FTkQgICAgICAgICAgID0gMTYzODQsCisKKyAgICBTUElORUxfU1RBVFVTX1NUQUNLX05BVElWRV9fQkVHSU4gICA9IDE2Mzg0LAorICAgIFNQSU5FTF9TVEFUVVNfU1RBQ0tfTkFUSVZFX19FTkQgICAgID0gODE5MjAsCisKKyAgICBTUElORUxfU1RBVFVTX0VYUEVSSU1FTlRBTF9fQkVHSU4gICA9IDIwMDAwMDAsCisgICAgU1BJTkVMX1NUQVRVU19FWFBFUklNRU5UQUxfX0VORCAgICAgPSAyMDk3MTUyLAorfSBzcGluZWxfc3RhdHVzX3Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIFNQSU5FTF9ORVRfUk9MRV9ERVRBQ0hFRCAgICAgICAgICAgID0gMCwKKyAgICBTUElORUxfTkVUX1JPTEVfQ0hJTEQgICAgICAgICAgICAgICA9IDEsCisgICAgU1BJTkVMX05FVF9ST0xFX1JPVVRFUiAgICAgICAgICAgICAgPSAyLAorICAgIFNQSU5FTF9ORVRfUk9MRV9MRUFERVIgICAgICAgICAgICAgID0gMywKK30gc3BpbmVsX25ldF9yb2xlX3Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIFNQSU5FTF9TQ0FOX1NUQVRFX0lETEUgICAgICAgICAgICAgID0gMCwKKyAgICBTUElORUxfU0NBTl9TVEFURV9CRUFDT04gICAgICAgICAgICA9IDEsCisgICAgU1BJTkVMX1NDQU5fU1RBVEVfRU5FUkdZICAgICAgICAgICAgPSAyLAorICAgIFNQSU5FTF9TQ0FOX1NUQVRFX0RJU0NPVkVSICAgICAgICAgID0gMywKK30gc3BpbmVsX3NjYW5fc3RhdGVfdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgU1BJTkVMX1BPV0VSX1NUQVRFX09GRkxJTkUgICAgICAgICAgPSAwLAorICAgIFNQSU5FTF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQICAgICAgID0gMSwKKyAgICBTUElORUxfUE9XRVJfU1RBVEVfU1RBTkRCWSAgICAgICAgICA9IDIsCisgICAgU1BJTkVMX1BPV0VSX1NUQVRFX0xPV19QT1dFUiAgICAgICAgPSAzLAorICAgIFNQSU5FTF9QT1dFUl9TVEFURV9PTkxJTkUgICAgICAgICAgID0gNCwKK30gc3BpbmVsX3Bvd2VyX3N0YXRlX3Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX09GRkxJTkUgICAgID0gMCwKKyAgICBTUElORUxfSE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQICA9IDEsCisgICAgU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfUkVTRVJWRUQgICAgPSAyLAorICAgIFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX0xPV19QT1dFUiAgID0gMywKKyAgICBTUElORUxfSE9TVF9QT1dFUl9TVEFURV9PTkxJTkUgICAgICA9IDQsCit9IHNwaW5lbF9ob3N0X3Bvd2VyX3N0YXRlX3Q7CisKK2VudW0KK3sKKyAgICBTUElORUxfTkVUX0ZMQUdfT05fTUVTSCAgICAgICAgICAgICA9ICgxIDw8IDApLAorICAgIFNQSU5FTF9ORVRfRkxBR19ERUZBVUxUX1JPVVRFICAgICAgID0gKDEgPDwgMSksCisgICAgU1BJTkVMX05FVF9GTEFHX0NPTkZJR1VSRSAgICAgICAgICAgPSAoMSA8PCAyKSwKKyAgICBTUElORUxfTkVUX0ZMQUdfREhDUCAgICAgICAgICAgICAgICA9ICgxIDw8IDMpLAorICAgIFNQSU5FTF9ORVRfRkxBR19TTEFBQyAgICAgICAgICAgICAgID0gKDEgPDwgNCksCisgICAgU1BJTkVMX05FVF9GTEFHX1BSRUZFUlJFRCAgICAgICAgICAgPSAoMSA8PCA1KSwKKworICAgIFNQSU5FTF9ORVRfRkxBR19QUkVGRVJFTkNFX09GRlNFVCAgID0gNiwKKyAgICBTUElORUxfTkVUX0ZMQUdfUFJFRkVSRU5DRV9NQVNLICAgICA9ICgzIDw8IFNQSU5FTF9ORVRfRkxBR19QUkVGRVJFTkNFX09GRlNFVCksCit9OworCitlbnVtCit7CisgICAgU1BJTkVMX1JPVVRFX1BSRUZFUkVOQ0VfSElHSCAgICAgICAgPSAoMSA8PCBTUElORUxfTkVUX0ZMQUdfUFJFRkVSRU5DRV9PRkZTRVQpLAorICAgIFNQSU5FTF9ST1VURV9QUkVGRVJFTkNFX01FRElVTSAgICAgID0gKDAgPDwgU1BJTkVMX05FVF9GTEFHX1BSRUZFUkVOQ0VfT0ZGU0VUKSwKKyAgICBTUElORUxfUk9VVEVfUFJFRkVSRU5DRV9MT1cgICAgICAgICA9ICgzIDw8IFNQSU5FTF9ORVRfRkxBR19QUkVGRVJFTkNFX09GRlNFVCksCit9OworCitlbnVtCit7CisgICAgU1BJTkVMX1RIUkVBRF9NT0RFX0ZVTExfTkVUV09SS19EQVRBICAgID0gKDEgPDwgMCksCisgICAgU1BJTkVMX1RIUkVBRF9NT0RFX0ZVTExfRlVOQ1RJT05fREVWICAgID0gKDEgPDwgMSksCisgICAgU1BJTkVMX1RIUkVBRF9NT0RFX1NFQ1VSRV9EQVRBX1JFUVVFU1QgID0gKDEgPDwgMiksCisgICAgU1BJTkVMX1RIUkVBRF9NT0RFX1JYX09OX1dIRU5fSURMRSAgICAgID0gKDEgPDwgMyksCit9OworCitlbnVtIHsKKyAgICBTUElORUxfR1BJT19GTEFHX0RJUl9JTlBVVCAgICAgICAgICA9IDAsCisgICAgU1BJTkVMX0dQSU9fRkxBR19ESVJfT1VUUFVUICAgICAgICAgPSBTUElORUxfQklUX01BU0soMCwgOCksCisgICAgU1BJTkVMX0dQSU9fRkxBR19QVUxMX1VQICAgICAgICAgICAgPSBTUElORUxfQklUX01BU0soMSwgOCksCisgICAgU1BJTkVMX0dQSU9fRkxBR19QVUxMX0RPV04gICAgICAgICAgPSBTUElORUxfQklUX01BU0soMiwgOCksCisgICAgU1BJTkVMX0dQSU9fRkxBR19PUEVOX0RSQUlOICAgICAgICAgPSBTUElORUxfQklUX01BU0soMiwgOCksCisgICAgU1BJTkVMX0dQSU9fRkxBR19UUklHR0VSX05PTkUgICAgICAgPSAwLAorICAgIFNQSU5FTF9HUElPX0ZMQUdfVFJJR0dFUl9SSVNJTkcgICAgID0gU1BJTkVMX0JJVF9NQVNLKDMsIDgpLAorICAgIFNQSU5FTF9HUElPX0ZMQUdfVFJJR0dFUl9GQUxMSU5HICAgID0gU1BJTkVMX0JJVF9NQVNLKDQsIDgpLAorICAgIFNQSU5FTF9HUElPX0ZMQUdfVFJJR0dFUl9BTlkgICAgICAgID0gU1BJTkVMX0dQSU9fRkxBR19UUklHR0VSX1JJU0lORworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1BJTkVMX0dQSU9fRkxBR19UUklHR0VSX0ZBTExJTkcsCit9OworCitlbnVtCit7CisgICAgU1BJTkVMX1BST1RPQ09MX1RZUEVfQk9PVExPQURFUiAgICAgPSAwLAorICAgIFNQSU5FTF9QUk9UT0NPTF9UWVBFX1pJR0JFRV9JUCAgICAgID0gMiwKKyAgICBTUElORUxfUFJPVE9DT0xfVFlQRV9USFJFQUQgICAgICAgICA9IDMsCit9OworCitlbnVtCit7CisgICAgU1BJTkVMX01BQ19QUk9NSVNDVU9VU19NT0RFX09GRiAgICAgPSAwLCAvLy88IE5vcm1hbCBNQUMgZmlsdGVyaW5nIGlzIGluIHBsYWNlLgorICAgIFNQSU5FTF9NQUNfUFJPTUlTQ1VPVVNfTU9ERV9ORVRXT1JLID0gMSwgLy8vPCBBbGwgTUFDIHBhY2tldHMgbWF0Y2hpbmcgbmV0d29yayBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay4KKyAgICBTUElORUxfTUFDX1BST01JU0NVT1VTX01PREVfRlVMTCAgICA9IDIsIC8vLzwgQWxsIGRlY29kZWQgTUFDIHBhY2tldHMgYXJlIHBhc3NlZCB1cCB0aGUgc3RhY2suCit9OworCitlbnVtCit7CisgICAgU1BJTkVMX05DUF9MT0dfTEVWRUxfRU1FUkcgICAgICAgICAgPSAwLAorICAgIFNQSU5FTF9OQ1BfTE9HX0xFVkVMX0FMRVJUICAgICAgICAgID0gMSwKKyAgICBTUElORUxfTkNQX0xPR19MRVZFTF9DUklUICAgICAgICAgICA9IDIsCisgICAgU1BJTkVMX05DUF9MT0dfTEVWRUxfRVJSICAgICAgICAgICAgPSAzLAorICAgIFNQSU5FTF9OQ1BfTE9HX0xFVkVMX1dBUk4gICAgICAgICAgID0gNCwKKyAgICBTUElORUxfTkNQX0xPR19MRVZFTF9OT1RJQ0UgICAgICAgICA9IDUsCisgICAgU1BJTkVMX05DUF9MT0dfTEVWRUxfSU5GTyAgICAgICAgICAgPSA2LAorICAgIFNQSU5FTF9OQ1BfTE9HX0xFVkVMX0RFQlVHICAgICAgICAgID0gNywKK307CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDhfdCBieXRlc1s4XTsKK30gc3BpbmVsX2V1aTY0X3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDhfdCBieXRlc1s4XTsKK30gc3BpbmVsX25ldF94cGFuaWRfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50OF90IGJ5dGVzWzE2XTsKK30gc3BpbmVsX25ldF9wc2tjX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDhfdCBieXRlc1s2XTsKK30gc3BpbmVsX2V1aTQ4X3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDhfdCBieXRlc1sxNl07Cit9IHNwaW5lbF9pcHY2YWRkcl90OworCit0eXBlZGVmIGludCBzcGluZWxfc3NpemVfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHNwaW5lbF9zaXplX3Q7Cit0eXBlZGVmIHVpbnQ4X3Qgc3BpbmVsX3RpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgc3BpbmVsX2NpZF90OworCitlbnVtCit7CisgICAgU1BJTkVMX01EX0ZMQUdfVFggICAgICAgICAgICAgICAgICAgPSAweDAwMDEsIC8vITwgUGFja2V0IHdhcyB0cmFuc21pdHRlZCwgbm90IHJlY2VpdmVkLgorICAgIFNQSU5FTF9NRF9GTEFHX0JBRF9GQ1MgICAgICAgICAgICAgID0gMHgwMDA0LCAvLyE8IFBhY2tldCB3YXMgcmVjZWl2ZWQgd2l0aCBiYWQgRkNTCisgICAgU1BJTkVMX01EX0ZMQUdfRFVQRSAgICAgICAgICAgICAgICAgPSAweDAwMDgsIC8vITwgUGFja2V0IHNlZW1zIHRvIGJlIGEgZHVwbGljYXRlCisgICAgU1BJTkVMX01EX0ZMQUdfUkVTRVJWRUQgICAgICAgICAgICAgPSAweEZGRjIsIC8vITwgRmxhZ3MgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCit9OworCitlbnVtCit7CisgICAgU1BJTkVMX0NNRF9OT09QICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIFNQSU5FTF9DTURfUkVTRVQgICAgICAgICAgICAgICAgICAgID0gMSwKKyAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VUICAgICAgICAgICA9IDIsCisgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCAgICAgICAgICAgPSAzLAorICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlQgICAgICAgID0gNCwKKyAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFICAgICAgICA9IDUsCisgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTICAgICAgICAgICAgPSA2LAorICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCAgICAgID0gNywKKyAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCAgICAgICA9IDgsCisKKyAgICBTUElORUxfQ01EX05FVF9TQVZFICAgICAgICAgICAgICAgICA9IDksCisgICAgU1BJTkVMX0NNRF9ORVRfQ0xFQVIgICAgICAgICAgICAgICAgPSAxMCwKKyAgICBTUElORUxfQ01EX05FVF9SRUNBTEwgICAgICAgICAgICAgICA9IDExLAorCisgICAgU1BJTkVMX0NNRF9IQk9fT0ZGTE9BRCAgICAgICAgICAgICAgPSAxMiwKKyAgICBTUElORUxfQ01EX0hCT19SRUNMQUlNICAgICAgICAgICAgICA9IDEzLAorICAgIFNQSU5FTF9DTURfSEJPX0RST1AgICAgICAgICAgICAgICAgID0gMTQsCisgICAgU1BJTkVMX0NNRF9IQk9fT0ZGTE9BREVEICAgICAgICAgICAgPSAxNSwKKyAgICBTUElORUxfQ01EX0hCT19SRUNMQUlNRUQgICAgICAgICAgICA9IDE2LAorICAgIFNQSU5FTF9DTURfSEJPX0RST1BFRCAgICAgICAgICAgICAgID0gMTcsCisKKyAgICBTUElORUxfQ01EX1BFRUsgICAgICAgICAgICAgICAgICAgICA9IDE4LAorICAgIFNQSU5FTF9DTURfUEVFS19SRVQgICAgICAgICAgICAgICAgID0gMTksCisgICAgU1BJTkVMX0NNRF9QT0tFICAgICAgICAgICAgICAgICAgICAgPSAyMCwKKworICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9NVUxUSV9HRVQgICAgID0gMjEsCisgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVCAgICAgPSAyMiwKKyAgICBTUElORUxfQ01EX1BST1BfVkFMVUVTX0FSRSAgICAgICAgICA9IDIzLAorCisgICAgU1BJTkVMX0NNRF9ORVNUX19CRUdJTiAgICAgICAgICAgICAgPSAxNTI5NiwKKyAgICBTUElORUxfQ01EX05FU1RfX0VORCAgICAgICAgICAgICAgICA9IDE1MzYwLAorCisgICAgU1BJTkVMX0NNRF9WRU5ET1JfX0JFR0lOICAgICAgICAgICAgPSAxNTM2MCwKKyAgICBTUElORUxfQ01EX1ZFTkRPUl9fRU5EICAgICAgICAgICAgICA9IDE2Mzg0LAorCisgICAgU1BJTkVMX0NNRF9FWFBFUklNRU5UQUxfX0JFR0lOICAgICAgPSAyMDAwMDAwLAorICAgIFNQSU5FTF9DTURfRVhQRVJJTUVOVEFMX19FTkQgICAgICAgID0gMjA5NzE1MiwKK307CisKK2VudW0KK3sKKyAgICBTUElORUxfQ0FQX0xPQ0sgICAgICAgICAgICAgICAgICAgICA9IDEsCisgICAgU1BJTkVMX0NBUF9ORVRfU0FWRSAgICAgICAgICAgICAgICAgPSAyLAorICAgIFNQSU5FTF9DQVBfSEJPICAgICAgICAgICAgICAgICAgICAgID0gMywKKyAgICBTUElORUxfQ0FQX1BPV0VSX1NBVkUgICAgICAgICAgICAgICA9IDQsCisKKyAgICBTUElORUxfQ0FQX0NPVU5URVJTICAgICAgICAgICAgICAgICA9IDUsCisgICAgU1BJTkVMX0NBUF9KQU1fREVURUNUICAgICAgICAgICAgICAgPSA2LAorCisgICAgU1BJTkVMX0NBUF9QRUVLX1BPS0UgICAgICAgICAgICAgICAgPSA3LAorCisgICAgU1BJTkVMX0NBUF9XUklUQUJMRV9SQVdfU1RSRUFNICAgICAgPSA4LAorICAgIFNQSU5FTF9DQVBfR1BJTyAgICAgICAgICAgICAgICAgICAgID0gOSwKKyAgICBTUElORUxfQ0FQX1RSTkcgICAgICAgICAgICAgICAgICAgICA9IDEwLAorICAgIFNQSU5FTF9DQVBfQ01EX01VTFRJICAgICAgICAgICAgICAgID0gMTEsCisKKyAgICBTUElORUxfQ0FQXzgwMl8xNV80X19CRUdJTiAgICAgICAgICA9IDE2LAorICAgIFNQSU5FTF9DQVBfODAyXzE1XzRfMjAwMyAgICAgICAgICAgID0gKFNQSU5FTF9DQVBfODAyXzE1XzRfX0JFR0lOICsgMCksCisgICAgU1BJTkVMX0NBUF84MDJfMTVfNF8yMDA2ICAgICAgICAgICAgPSAoU1BJTkVMX0NBUF84MDJfMTVfNF9fQkVHSU4gKyAxKSwKKyAgICBTUElORUxfQ0FQXzgwMl8xNV80XzIwMTEgICAgICAgICAgICA9IChTUElORUxfQ0FQXzgwMl8xNV80X19CRUdJTiArIDIpLAorICAgIFNQSU5FTF9DQVBfODAyXzE1XzRfUElCICAgICAgICAgICAgID0gKFNQSU5FTF9DQVBfODAyXzE1XzRfX0JFR0lOICsgNSksCisgICAgU1BJTkVMX0NBUF84MDJfMTVfNF8yNDUwTUhaX09RUFNLICAgPSAoU1BJTkVMX0NBUF84MDJfMTVfNF9fQkVHSU4gKyA4KSwKKyAgICBTUElORUxfQ0FQXzgwMl8xNV80XzkxNU1IWl9PUVBTSyAgICA9IChTUElORUxfQ0FQXzgwMl8xNV80X19CRUdJTiArIDkpLAorICAgIFNQSU5FTF9DQVBfODAyXzE1XzRfODY4TUhaX09RUFNLICAgID0gKFNQSU5FTF9DQVBfODAyXzE1XzRfX0JFR0lOICsgMTApLAorICAgIFNQSU5FTF9DQVBfODAyXzE1XzRfOTE1TUhaX0JQU0sgICAgID0gKFNQSU5FTF9DQVBfODAyXzE1XzRfX0JFR0lOICsgMTEpLAorICAgIFNQSU5FTF9DQVBfODAyXzE1XzRfODY4TUhaX0JQU0sgICAgID0gKFNQSU5FTF9DQVBfODAyXzE1XzRfX0JFR0lOICsgMTIpLAorICAgIFNQSU5FTF9DQVBfODAyXzE1XzRfOTE1TUhaX0FTSyAgICAgID0gKFNQSU5FTF9DQVBfODAyXzE1XzRfX0JFR0lOICsgMTMpLAorICAgIFNQSU5FTF9DQVBfODAyXzE1XzRfODY4TUhaX0FTSyAgICAgID0gKFNQSU5FTF9DQVBfODAyXzE1XzRfX0JFR0lOICsgMTQpLAorICAgIFNQSU5FTF9DQVBfODAyXzE1XzRfX0VORCAgICAgICAgICAgID0gMzIsCisKKyAgICBTUElORUxfQ0FQX1JPTEVfX0JFR0lOICAgICAgICAgICAgICA9IDQ4LAorICAgIFNQSU5FTF9DQVBfUk9MRV9ST1VURVIgICAgICAgICAgICAgID0gKFNQSU5FTF9DQVBfUk9MRV9fQkVHSU4gKyAwKSwKKyAgICBTUElORUxfQ0FQX1JPTEVfU0xFRVBZICAgICAgICAgICAgICA9IChTUElORUxfQ0FQX1JPTEVfX0JFR0lOICsgMSksCisgICAgU1BJTkVMX0NBUF9ST0xFX19FTkQgICAgICAgICAgICAgICAgPSA1MiwKKworICAgIFNQSU5FTF9DQVBfTkVUX19CRUdJTiAgICAgICAgICAgICAgID0gNTIsCisgICAgU1BJTkVMX0NBUF9ORVRfVEhSRUFEXzFfMCAgICAgICAgICAgPSAoU1BJTkVMX0NBUF9ORVRfX0JFR0lOICsgMCksCisgICAgU1BJTkVMX0NBUF9ORVRfX0VORCAgICAgICAgICAgICAgICAgPSA2NCwKKworICAgIFNQSU5FTF9DQVBfT1BFTlRIUkVBRF9fQkVHSU4gICAgICAgID0gNTEyLAorICAgIFNQSU5FTF9DQVBfTUFDX1dISVRFTElTVCAgICAgICAgICAgID0gKFNQSU5FTF9DQVBfT1BFTlRIUkVBRF9fQkVHSU4gKyAwKSwKKyAgICBTUElORUxfQ0FQX01BQ19SQVcgICAgICAgICAgICAgICAgICA9IChTUElORUxfQ0FQX09QRU5USFJFQURfX0JFR0lOICsgMSksCisgICAgU1BJTkVMX0NBUF9PT0JfU1RFRVJJTkdfREFUQSAgICAgICAgPSAoU1BJTkVMX0NBUF9PUEVOVEhSRUFEX19CRUdJTiArIDIpLAorICAgIFNQSU5FTF9DQVBfT1BFTlRIUkVBRF9fRU5EICAgICAgICAgID0gNjQwLAorCisgICAgU1BJTkVMX0NBUF9USFJFQURfX0JFR0lOICAgICAgICAgICAgPSAxMDI0LAorICAgIFNQSU5FTF9DQVBfVEhSRUFEX0NPTU1JU1NJT05FUiAgICAgID0gKFNQSU5FTF9DQVBfVEhSRUFEX19CRUdJTiArIDApLAorICAgIFNQSU5FTF9DQVBfVEhSRUFEX1RNRl9QUk9YWSAgICAgICAgID0gKFNQSU5FTF9DQVBfVEhSRUFEX19CRUdJTiArIDEpLAorICAgIFNQSU5FTF9DQVBfVEhSRUFEX19FTkQgICAgICAgICAgICAgID0gMTE1MiwKKworICAgIFNQSU5FTF9DQVBfTkVTVF9fQkVHSU4gICAgICAgICAgICAgID0gMTUyOTYsCisgICAgU1BJTkVMX0NBUF9ORVNUX0xFR0FDWV9JTlRFUkZBQ0UgICAgPSAoU1BJTkVMX0NBUF9ORVNUX19CRUdJTiArIDApLAorICAgIFNQSU5FTF9DQVBfTkVTVF9MRUdBQ1lfTkVUX1dBS0UgICAgID0gKFNQSU5FTF9DQVBfTkVTVF9fQkVHSU4gKyAxKSwKKyAgICBTUElORUxfQ0FQX05FU1RfVFJBTlNNSVRfSE9PSyAgICAgICA9IChTUElORUxfQ0FQX05FU1RfX0JFR0lOICsgMiksCisgICAgU1BJTkVMX0NBUF9ORVNUX19FTkQgICAgICAgICAgICAgICAgPSAxNTM2MCwKKworICAgIFNQSU5FTF9DQVBfVkVORE9SX19CRUdJTiAgICAgICAgICAgID0gMTUzNjAsCisgICAgU1BJTkVMX0NBUF9WRU5ET1JfX0VORCAgICAgICAgICAgICAgPSAxNjM4NCwKKworICAgIFNQSU5FTF9DQVBfRVhQRVJJTUVOVEFMX19CRUdJTiAgICAgID0gMjAwMDAwMCwKKyAgICBTUElORUxfQ0FQX0VYUEVSSU1FTlRBTF9fRU5EICAgICAgICA9IDIwOTcxNTIsCit9OworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTUElORUxfUFJPUF9MQVNUX1NUQVRVUyAgICAgICAgICAgICA9IDAsICAgICAgICAvLy88IHN0YXR1cyBbaV0KKyAgICBTUElORUxfUFJPUF9QUk9UT0NPTF9WRVJTSU9OICAgICAgICA9IDEsICAgICAgICAvLy88IG1ham9yLCBtaW5vciBbaSxpXQorICAgIFNQSU5FTF9QUk9QX05DUF9WRVJTSU9OICAgICAgICAgICAgID0gMiwgICAgICAgIC8vLzwgdmVyc2lvbiBzdHJpbmcgW1VdCisgICAgU1BJTkVMX1BST1BfSU5URVJGQUNFX1RZUEUgICAgICAgICAgPSAzLCAgICAgICAgLy8vPCBbaV0KKyAgICBTUElORUxfUFJPUF9WRU5ET1JfSUQgICAgICAgICAgICAgICA9IDQsICAgICAgICAvLy88IFtpXQorICAgIFNQSU5FTF9QUk9QX0NBUFMgICAgICAgICAgICAgICAgICAgID0gNSwgICAgICAgIC8vLzwgY2FwYWJpbGl0eSBsaXN0IFtBKGkpXQorICAgIFNQSU5FTF9QUk9QX0lOVEVSRkFDRV9DT1VOVCAgICAgICAgID0gNiwgICAgICAgIC8vLzwgSW50ZXJmYWNlIGNvdW50IFtDXQorICAgIFNQSU5FTF9QUk9QX1BPV0VSX1NUQVRFICAgICAgICAgICAgID0gNywgICAgICAgIC8vLzwgUG93ZXJTdGF0ZSBbQ10KKyAgICBTUElORUxfUFJPUF9IV0FERFIgICAgICAgICAgICAgICAgICA9IDgsICAgICAgICAvLy88IFBlcm1FVUk2NCBbRV0KKyAgICBTUElORUxfUFJPUF9MT0NLICAgICAgICAgICAgICAgICAgICA9IDksICAgICAgICAvLy88IFByb3BMb2NrIFtiXQorICAgIFNQSU5FTF9QUk9QX0hCT19NRU1fTUFYICAgICAgICAgICAgID0gMTAsICAgICAgIC8vLzwgTWF4IG9mZmxvYWQgbWVtIFtTXQorICAgIFNQSU5FTF9QUk9QX0hCT19CTE9DS19NQVggICAgICAgICAgID0gMTEsICAgICAgIC8vLzwgTWF4IG9mZmxvYWQgYmxvY2sgW1NdCisgICAgU1BJTkVMX1BST1BfSE9TVF9QT1dFUl9TVEFURSAgICAgICAgPSAxMiwgICAgICAgLy8vPCBIb3N0IE1DVSBwb3dlciBzdGF0ZSBbQ10KKworICAgIFNQSU5FTF9QUk9QX0JBU0VfRVhUX19CRUdJTiAgICAgICAgID0gMHgxMDAwLAorCisgICAgLy8vIEdQSU8gQ29uZmlndXJhdGlvbgorICAgIC8qKiBGb3JtYXQ6IGBBKENDVSlgCisgICAgICogIFR5cGU6IFJlYWQtT25seSAoT3B0aW9uYWxseSBSZWFkLXdyaXRlIHVzaW5nIGBDTURfUFJPUF9WQUxVRV9JTlNFUlRgKQorICAgICAqCisgICAgICogQW4gYXJyYXkgb2Ygc3RydWN0dXJlcyB3aGljaCBjb250YWluIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorICAgICAqCisgICAgICogKiAgIGBDYDogR1BJTyBOdW1iZXIKKyAgICAgKiAqICAgYENgOiBHUElPIENvbmZpZ3VyYXRpb24gRmxhZ3MKKyAgICAgKiAqICAgYFVgOiBIdW1hbi1yZWFkYWJsZSBHUElPIG5hbWUKKyAgICAgKgorICAgICAqIEdQSU9zIHdoaWNoIGRvIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbnRyeSBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICAgKgorICAgICAqIFRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBmbGFncyBmb3IgdGhlCisgICAgICogR1BJTzoKKyAgICAgKgorICAgICAqICAgICAgIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3CisgICAgICogICAgICstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworICAgICAqICAgICB8RElSfFBVUHxQRE58VFJJR0dFUnwgIFJFU0VSVkVEIHwKKyAgICAgKiAgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisgICAgICogICAgICAgICAgICAgfE8vRHwKKyAgICAgKiAgICAgICAgICAgICArLS0tKworICAgICAqCisgICAgICogKiAgIGBESVJgOiBQaW4gZGlyZWN0aW9uLiBDbGVhciAoMCkgZm9yIGlucHV0LCBzZXQgKDEpIGZvciBvdXRwdXQuCisgICAgICogKiAgIGBQVVBgOiBQdWxsLXVwIGVuYWJsZWQgZmxhZy4KKyAgICAgKiAqICAgYFBETmAvYE8vRGA6IEZsYWcgbWVhbmluZyBkZXBlbmRzIG9uIHBpbiBkaXJlY3Rpb246CisgICAgICogICAgICogICBJbnB1dDogUHVsbC1kb3duIGVuYWJsZWQuCisgICAgICogICAgICogICBPdXRwdXQ6IE91dHB1dCBpcyBhbiBvcGVuLWRyYWluLgorICAgICAqICogICBgVFJJR0dFUmA6IEVudW1lcmF0aW9uIGRlc2NyaWJpbmcgaG93IHBpbiBjaGFuZ2VzIGdlbmVyYXRlCisgICAgICogICAgIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24gY29tbWFuZHMgKFRCRCkgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0LgorICAgICAqICAgICAqICAgMDogRmVhdHVyZSBkaXNhYmxlZCBmb3IgdGhpcyBwaW4KKyAgICAgKiAgICAgKiAgIDE6IFRyaWdnZXIgb24gZmFsbGluZyBlZGdlCisgICAgICogICAgICogICAyOiBUcmlnZ2VyIG9uIHJpc2luZyBlZGdlCisgICAgICogICAgICogICAzOiBUcmlnZ2VyIG9uIGxldmVsIGNoYW5nZQorICAgICAqICogICBgUkVTRVJWRURgOiBCaXRzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBBbHdheXMgY2xlYXJlZCB0byB6ZXJvCisgICAgICogICAgIGFuZCBpZ25vcmVkIHdoZW4gcmVhZC4KKyAgICAgKgorICAgICAqIEFzIGFuIG9wdGlvbmFsIGZlYXR1cmUsIHRoZSBjb25maWd1cmF0aW9uIG9mIGluZGl2aWR1YWwgcGlucyBtYXkgYmUKKyAgICAgKiBtb2RpZmllZCB1c2luZyB0aGUgYENNRF9QUk9QX1ZBTFVFX0lOU0VSVGAgY29tbWFuZC4gT25seSB0aGUgR1BJTworICAgICAqIG51bWJlciBhbmQgZmxhZ3MgZmllbGRzIE1VU1QgYmUgcHJlc2VudCwgdGhlIEdQSU8gbmFtZSAoaWYgcHJlc2VudCkKKyAgICAgKiB3b3VsZCBiZSBpZ25vcmVkLiBUaGlzIGNvbW1hbmQgY2FuIG9ubHkgYmUgdXNlZCB0byBtb2RpZnkgdGhlCisgICAgICogY29uZmlndXJhdGlvbiBvZiBHUElPcyB3aGljaCBhcmUgYWxyZWFkeSBleHBvc2VkLS0taXQgY2Fubm90IGJlIHVzZWQKKyAgICAgKiBieSB0aGUgaG9zdCB0byBhZGQgYWRkaXRpb25hbCBHUElPcy4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9HUElPX0NPTkZJRyAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX0JBU0VfRVhUX19CRUdJTiArIDAsCisKKyAgICAvLy8gR1BJTyBTdGF0ZSBCaXRtYXNrCisgICAgLyoqIEZvcm1hdDogYERgCisgICAgICogIFR5cGU6IFJlYWQtV3JpdGUKKyAgICAgKgorICAgICAqIENvbnRhaW5zIGEgYml0IGZpZWxkIGlkZW50aWZ5aW5nIHRoZSBzdGF0ZSBvZiB0aGUgR1BJT3MuIFRoZSBsZW5ndGggb2YKKyAgICAgKiB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlc2UgcHJvcGVydGllcyBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YKKyAgICAgKiBHUElPcy4gSWYgeW91IGhhdmUgMTAgR1BJT3MsIHlvdSdkIGhhdmUgdHdvIGJ5dGVzLiBHUElPcyBhcmUgbnVtYmVyZWQKKyAgICAgKiBmcm9tIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHRvIGxlYXN0IHNpZ25pZmljYW50IGJpdCwgc28gMHg4MCBpcyBHUElPIDAsCisgICAgICogMHg0MCBpcyBHUElPIDEsIGV0Yy4KKyAgICAgKgorICAgICAqIEZvciBHUElPcyBjb25maWd1cmVkIGFzIGlucHV0czoKKyAgICAgKgorICAgICAqICogICBgQ01EX1BST1BfVkFVRV9HRVRgOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGRlc2NyaWJlcyB0aGUKKyAgICAgKiAgICAgbG9naWMgbGV2ZWwgcmVhZCBmcm9tIHRoZSBwaW4uCisgICAgICogKiAgIGBDTURfUFJPUF9WQUxVRV9TRVRgOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGlzIGlnbm9yZWQKKyAgICAgKiAgICAgZm9yIHRoZXNlIHBpbnMuCisgICAgICoKKyAgICAgKiBGb3IgR1BJT3MgY29uZmlndXJlZCBhcyBvdXRwdXRzOgorICAgICAqCisgICAgICogKiAgIGBDTURfUFJPUF9WQVVFX0dFVGA6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMKKyAgICAgKiAgICAgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuCisgICAgICogKiAgIGBDTURfUFJPUF9WQUxVRV9TRVRgOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGRldGVybWluZXMKKyAgICAgKiAgICAgdGhlIG5ldyBsb2dpYyBsZXZlbCBvZiB0aGUgb3V0cHV0LiBJZiB0aGlzIHBpbiBpcyBjb25maWd1cmVkIGFzIGFuCisgICAgICogICAgIG9wZW4tZHJhaW4sIHNldHRpbmcgdGhlIGFzc29jaWF0ZWQgYml0IHRvIDEgd2lsbCBjYXVzZSB0aGUgcGluIHRvCisgICAgICogICAgIGVudGVyIGEgSGktWiBzdGF0ZS4KKyAgICAgKgorICAgICAqIEZvciBHUElPcyB3aGljaCBhcmUgbm90IHNwZWNpZmllZCBpbiBgUFJPUF9HUElPX0NPTkZJR2A6CisgICAgICoKKyAgICAgKiAqICAgYENNRF9QUk9QX1ZBVUVfR0VUYDogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBpcworICAgICAqICAgICBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4KKyAgICAgKiAqICAgYENNRF9QUk9QX1ZBTFVFX1NFVGA6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgTVVTVCBiZQorICAgICAqICAgICBpZ25vcmVkIGJ5IHRoZSBOQ1AuCisgICAgICoKKyAgICAgKiBXaGVuIHdyaXRpbmcsIHVuc3BlY2lmaWVkIGJpdHMgYXJlIGFzc3VtZWQgdG8gYmUgemVyby4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9HUElPX1NUQVRFICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX0JBU0VfRVhUX19CRUdJTiArIDIsCisKKyAgICAvLy8gR1BJTyBTdGF0ZSBTZXQtT25seSBCaXRtYXNrCisgICAgLyoqIEZvcm1hdDogYERgCisgICAgICogIFR5cGU6IFdyaXRlLU9ubHkKKyAgICAgKgorICAgICAqIEFsbG93cyBmb3IgdGhlIHN0YXRlIG9mIHZhcmlvdXMgb3V0cHV0IEdQSU9zIHRvIGJlIHNldCB3aXRob3V0IGFmZmVjdGluZworICAgICAqIG90aGVyIEdQSU8gc3RhdGVzLiBDb250YWlucyBhIGJpdCBmaWVsZCBpZGVudGlmeWluZyB0aGUgb3V0cHV0IEdQSU9zIHRoYXQKKyAgICAgKiBzaG91bGQgaGF2ZSB0aGVpciBzdGF0ZSBzZXQgdG8gMS4KKyAgICAgKgorICAgICAqIFdoZW4gd3JpdGluZywgdW5zcGVjaWZpZWQgYml0cyBhcmUgYXNzdW1lZCB0byBiZSB6ZXJvLiBUaGUgdmFsdWUgb2YKKyAgICAgKiBhbnkgYml0cyBmb3IgR1BJT3Mgd2hpY2ggYXJlIG5vdCBzcGVjaWZpZWQgaW4gYFBST1BfR1BJT19DT05GSUdgIE1VU1QKKyAgICAgKiBiZSBpZ25vcmVkLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX0dQSU9fU1RBVEVfU0VUICAgICAgICAgID0gU1BJTkVMX1BST1BfQkFTRV9FWFRfX0JFR0lOICsgMywKKworICAgIC8vLyBHUElPIFN0YXRlIENsZWFyLU9ubHkgQml0bWFzaworICAgIC8qKiBGb3JtYXQ6IGBEYAorICAgICAqICBUeXBlOiBXcml0ZS1Pbmx5CisgICAgICoKKyAgICAgKiBBbGxvd3MgZm9yIHRoZSBzdGF0ZSBvZiB2YXJpb3VzIG91dHB1dCBHUElPcyB0byBiZSBjbGVhcmVkIHdpdGhvdXQgYWZmZWN0aW5nCisgICAgICogb3RoZXIgR1BJTyBzdGF0ZXMuIENvbnRhaW5zIGEgYml0IGZpZWxkIGlkZW50aWZ5aW5nIHRoZSBvdXRwdXQgR1BJT3MgdGhhdAorICAgICAqIHNob3VsZCBoYXZlIHRoZWlyIHN0YXRlIGNsZWFyZWQgdG8gMC4KKyAgICAgKgorICAgICAqIFdoZW4gd3JpdGluZywgdW5zcGVjaWZpZWQgYml0cyBhcmUgYXNzdW1lZCB0byBiZSB6ZXJvLiBUaGUgdmFsdWUgb2YKKyAgICAgKiBhbnkgYml0cyBmb3IgR1BJT3Mgd2hpY2ggYXJlIG5vdCBzcGVjaWZpZWQgaW4gYFBST1BfR1BJT19DT05GSUdgIE1VU1QKKyAgICAgKiBiZSBpZ25vcmVkLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX0dQSU9fU1RBVEVfQ0xFQVIgICAgICAgID0gU1BJTkVMX1BST1BfQkFTRV9FWFRfX0JFR0lOICsgNCwKKworICAgIC8vLyAzMi1iaXQgcmFuZG9tIG51bWJlciBmcm9tIFRSTkcsIHJlYWR5LXRvLXVzZS4KKyAgICBTUElORUxfUFJPUF9UUk5HXzMyICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX0JBU0VfRVhUX19CRUdJTiArIDUsCisKKyAgICAvLy8gMTYgcmFuZG9tIGJ5dGVzIGZyb20gVFJORywgcmVhZHktdG8tdXNlLgorICAgIFNQSU5FTF9QUk9QX1RSTkdfMTI4ICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfQkFTRV9FWFRfX0JFR0lOICsgNiwKKworICAgIC8vLyBSYXcgc2FtcGxlcyBmcm9tIFRSTkcgZW50cm9weSBzb3VyY2UgcmVwcmVzZW50aW5nIDMyIGJpdHMgb2YgZW50cm9weS4KKyAgICBTUElORUxfUFJPUF9UUk5HX1JBV18zMiAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX0JBU0VfRVhUX19CRUdJTiArIDcsCisKKyAgICBTUElORUxfUFJPUF9CQVNFX0VYVF9fRU5EICAgICAgICAgICA9IDB4MTEwMCwKKworICAgIFNQSU5FTF9QUk9QX1BIWV9fQkVHSU4gICAgICAgICAgICAgID0gMHgyMCwKKyAgICBTUElORUxfUFJPUF9QSFlfRU5BQkxFRCAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1BIWV9fQkVHSU4gKyAwLCAvLy88IFtiXQorICAgIFNQSU5FTF9QUk9QX1BIWV9DSEFOICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfUEhZX19CRUdJTiArIDEsIC8vLzwgW0NdCisgICAgU1BJTkVMX1BST1BfUEhZX0NIQU5fU1VQUE9SVEVEICAgICAgPSBTUElORUxfUFJPUF9QSFlfX0JFR0lOICsgMiwgLy8vPCBbQShDKV0KKyAgICBTUElORUxfUFJPUF9QSFlfRlJFUSAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1BIWV9fQkVHSU4gKyAzLCAvLy88IGtIeiBbTF0KKyAgICBTUElORUxfUFJPUF9QSFlfQ0NBX1RIUkVTSE9MRCAgICAgICA9IFNQSU5FTF9QUk9QX1BIWV9fQkVHSU4gKyA0LCAvLy88IGRCbSBbY10KKyAgICBTUElORUxfUFJPUF9QSFlfVFhfUE9XRVIgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1BIWV9fQkVHSU4gKyA1LCAvLy88IFtjXQorICAgIFNQSU5FTF9QUk9QX1BIWV9SU1NJICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfUEhZX19CRUdJTiArIDYsIC8vLzwgZEJtIFtjXQorICAgIFNQSU5FTF9QUk9QX1BIWV9SWF9TRU5TSVRJVklUWSAgICAgID0gU1BJTkVMX1BST1BfUEhZX19CRUdJTiArIDcsIC8vLzwgZEJtIFtjXQorICAgIFNQSU5FTF9QUk9QX1BIWV9fRU5EICAgICAgICAgICAgICAgID0gMHgzMCwKKworICAgIFNQSU5FTF9QUk9QX1BIWV9FWFRfX0JFR0lOICAgICAgICAgID0gMHgxMjAwLAorCisgICAgLy8vIFNpZ25hbCBKYW1taW5nIERldGVjdGlvbiBFbmFibGUKKyAgICAvKiogRm9ybWF0OiBgYmAKKyAgICAgKgorICAgICAqIEluZGljYXRlcyBpZiBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBTZXQgdG8gdHJ1ZQorICAgICAqIHRvIGVuYWJsZSBqYW1taW5nIGRldGVjdGlvbi4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9KQU1fREVURUNUX0VOQUJMRSAgICAgICA9IFNQSU5FTF9QUk9QX1BIWV9FWFRfX0JFR0lOICsgMCwKKworICAgIC8vLyBTaWduYWwgSmFtbWluZyBEZXRlY3RlZCBJbmRpY2F0b3IKKyAgICAvKiogRm9ybWF0OiBgYmAgKFJlYWQtT25seSkKKyAgICAgKgorICAgICAqIFNldCB0byB0cnVlIGlmIHJhZGlvIGphbW1pbmcgaXMgZGV0ZWN0ZWQuIFNldCB0byBmYWxzZSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKiBXaGVuIGphbW1pbmcgZGV0ZWN0aW9uIGlzIGVuYWJsZWQsIGNoYW5nZXMgdG8gdGhlIHZhbHVlIG9mIHRoaXMKKyAgICAgKiBwcm9wZXJ0eSBhcmUgZW1pdHRlZCBhc3luY2hyb25vdXNseSB2aWEgYENNRF9QUk9QX1ZBTFVFX0lTYC4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9KQU1fREVURUNURUQgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1BIWV9FWFRfX0JFR0lOICsgMSwKKworICAgIC8vLyBKYW1taW5nIGRldGVjdGlvbiBSU1NJIHRocmVzaG9sZAorICAgIC8qKiBGb3JtYXQ6IGBjYAorICAgICAqICBVbml0czogZEJtCisgICAgICoKKyAgICAgKiBUaGlzIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIHRocmVzaG9sZCBSU1NJIGxldmVsIChtZWFzdXJlZCBpbgorICAgICAqIGRCbSkgYWJvdmUgd2hpY2ggdGhlIGphbW1pbmcgZGV0ZWN0aW9uIHdpbGwgY29uc2lkZXIgdGhlCisgICAgICogY2hhbm5lbCBibG9ja2VkLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX0pBTV9ERVRFQ1RfUlNTSV9USFJFU0hPTEQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1BIWV9FWFRfX0JFR0lOICsgMiwKKworICAgIC8vLyBKYW1taW5nIGRldGVjdGlvbiB3aW5kb3cgc2l6ZQorICAgIC8qKiBGb3JtYXQ6IGBDYAorICAgICAqICBVbml0czogU2Vjb25kcyAoMS02MykKKyAgICAgKgorICAgICAqIFRoaXMgcGFyYW1ldGVyIGRlc2NyaWJlcyB0aGUgd2luZG93IHBlcmlvZCBmb3Igc2lnbmFsIGphbW1pbmcKKyAgICAgKiBkZXRlY3Rpb24uCisgICAgICovCisgICAgU1BJTkVMX1BST1BfSkFNX0RFVEVDVF9XSU5ET1cgICAgICAgPSBTUElORUxfUFJPUF9QSFlfRVhUX19CRUdJTiArIDMsCisKKyAgICAvLy8gSmFtbWluZyBkZXRlY3Rpb24gYnVzeSBwZXJpb2QKKyAgICAvKiogRm9ybWF0OiBgQ2AKKyAgICAgKiAgVW5pdHM6IFNlY29uZHMgKDEtNjMpCisgICAgICoKKyAgICAgKiBUaGlzIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIG51bWJlciBvZiBhZ2dyZWdhdGUgc2Vjb25kcyB3aXRoaW4KKyAgICAgKiB0aGUgZGV0ZWN0aW9uIHdpbmRvdyB3aGVyZSB0aGUgUlNTSSBtdXN0IGJlIGFib3ZlCisgICAgICogYFBST1BfSkFNX0RFVEVDVF9SU1NJX1RIUkVTSE9MRGAgdG8gdHJpZ2dlciBkZXRlY3Rpb24uCisgICAgICoKKyAgICAgKiBUaGUgYmVoYXZpb3Igb2YgdGhlIGphbW1pbmcgZGV0ZWN0aW9uIGZlYXR1cmUgd2hlbiBgUFJPUF9KQU1fREVURUNUX0JVU1lgCisgICAgICogaXMgbGFyZ2VyIHRoYW4gYFBST1BfSkFNX0RFVEVDVF9XSU5ET1dgIGlzIHVuZGVmaW5lZC4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9KQU1fREVURUNUX0JVU1kgICAgICAgICA9IFNQSU5FTF9QUk9QX1BIWV9FWFRfX0JFR0lOICsgNCwKKworICAgIC8vLyBKYW1taW5nIGRldGVjdGlvbiBoaXN0b3J5IGJpdG1hcCAoZm9yIGRlYnVnZ2luZykKKyAgICAvKiogRm9ybWF0OiBgTExgIChyZWFkLW9ubHkpCisgICAgICoKKyAgICAgKiBUaGlzIHZhbHVlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgc3RhdGUgb2YgamFtbWluZyBkZXRlY3Rpb24KKyAgICAgKiBtb2R1bGUgZm9yIG1vbml0b3JpbmcvZGVidWdnaW5nIHB1cnBvc2UuIEl0IHJldHVybnMgYSA2NC1iaXQgdmFsdWUgd2hlcmUKKyAgICAgKiBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byBvbmUgc2Vjb25kIGludGVydmFsIHN0YXJ0aW5nIHdpdGggYml0IDAgZm9yIHRoZQorICAgICAqIG1vc3QgcmVjZW50IGludGVydmFsIGFuZCBiaXQgNjMgZm9yIHRoZSBvbGRlc3QgaW50ZXJ2YWxzICg2MyBzZWMgZWFybGllcikuCisgICAgICogVGhlIGJpdCBpcyBzZXQgdG8gMSBpZiB0aGUgamFtbWluZyBkZXRlY3Rpb24gbW9kdWxlIG9ic2VydmVkL2RldGVjdGVkCisgICAgICogaGlnaCBzaWduYWwgbGV2ZWwgZHVyaW5nIHRoZSBjb3JyZXNwb25kaW5nIG9uZSBzZWNvbmQgaW50ZXJ2YWwuCisgICAgICoKKyAgICAgKiBUaGUgdmFsdWUgaXMgcmVhZC1vbmx5IGFuZCBpcyBlbmNvZGVkIGFzIHR3byB1aW50MzIgdmFsdWVzIGluCisgICAgICogbGl0dGxlLWVuZGlhbiBmb3JtYXQgKGZpcnN0IHVpbnQzMiBnaXZlcyB0aGUgbG93ZXIgYml0cyBjb3JyZXNwb25kaW5nIHRvCisgICAgICogbW9yZSByZWNlbnQgaGlzdG9yeSkuCisgICAgICovCisgICAgU1BJTkVMX1BST1BfSkFNX0RFVEVDVF9ISVNUT1JZX0JJVE1BUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfUEhZX0VYVF9fQkVHSU4gKyA1LAorCisgICAgU1BJTkVMX1BST1BfUEhZX0VYVF9fRU5EICAgICAgICAgICAgPSAweDEzMDAsCisKKyAgICBTUElORUxfUFJPUF9NQUNfX0JFR0lOICAgICAgICAgICAgICA9IDB4MzAsCisgICAgU1BJTkVMX1BST1BfTUFDX1NDQU5fU1RBVEUgICAgICAgICAgPSBTUElORUxfUFJPUF9NQUNfX0JFR0lOICsgMCwgIC8vLzwgW0NdCisgICAgU1BJTkVMX1BST1BfTUFDX1NDQU5fTUFTSyAgICAgICAgICAgPSBTUElORUxfUFJPUF9NQUNfX0JFR0lOICsgMSwgIC8vLzwgW0EoQyldCisgICAgU1BJTkVMX1BST1BfTUFDX1NDQU5fUEVSSU9EICAgICAgICAgPSBTUElORUxfUFJPUF9NQUNfX0JFR0lOICsgMiwgIC8vLzwgbXMtcGVyLWNoYW5uZWwgW1NdCisgICAgU1BJTkVMX1BST1BfTUFDX1NDQU5fQkVBQ09OICAgICAgICAgPSBTUElORUxfUFJPUF9NQUNfX0JFR0lOICsgMywgIC8vLzwgY2hhbixyc3NpLG1hY19kYXRhLG5ldF9kYXRhIFtDY2REXQorICAgIFNQSU5FTF9QUk9QX01BQ18xNV80X0xBRERSICAgICAgICAgID0gU1BJTkVMX1BST1BfTUFDX19CRUdJTiArIDQsICAvLy88IFtFXQorICAgIFNQSU5FTF9QUk9QX01BQ18xNV80X1NBRERSICAgICAgICAgID0gU1BJTkVMX1BST1BfTUFDX19CRUdJTiArIDUsICAvLy88IFtTXQorICAgIFNQSU5FTF9QUk9QX01BQ18xNV80X1BBTklEICAgICAgICAgID0gU1BJTkVMX1BST1BfTUFDX19CRUdJTiArIDYsICAvLy88IFtTXQorICAgIFNQSU5FTF9QUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQgID0gU1BJTkVMX1BST1BfTUFDX19CRUdJTiArIDcsICAvLy88IFtDXQorICAgIFNQSU5FTF9QUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFICAgID0gU1BJTkVMX1BST1BfTUFDX19CRUdJTiArIDgsICAvLy88IFtDXQorICAgIFNQSU5FTF9QUk9QX01BQ19FTkVSR1lfU0NBTl9SRVNVTFQgID0gU1BJTkVMX1BST1BfTUFDX19CRUdJTiArIDksICAvLy88IGNoYW4sbWF4UnNzaSBbQ2NdCisgICAgU1BJTkVMX1BST1BfTUFDX0RBVEFfUE9MTF9QRVJJT0QgICAgPSBTUElORUxfUFJPUF9NQUNfX0JFR0lOICsgMTAsIC8vLzwgcG9sbFBlcmlvZCAoaW4gbXMpIFtMXQorICAgIFNQSU5FTF9QUk9QX01BQ19fRU5EICAgICAgICAgICAgICAgID0gMHg0MCwKKworICAgIFNQSU5FTF9QUk9QX01BQ19FWFRfX0JFR0lOICAgICAgICAgID0gMHgxMzAwLAorICAgIC8vLyBNQUMgV2hpdGVsaXN0CisgICAgLyoqIEZvcm1hdDogYEEodChFYykpYAorICAgICAqCisgICAgICogU3RydWN0dXJlIFBhcmFtZXRlcnM6CisgICAgICoKKyAgICAgKiAqIGBFYDogRVVJNjQgYWRkcmVzcyBvZiBub2RlCisgICAgICogKiBgY2A6IE9wdGlvbmFsIGZpeGVkIFJTU0kuIDEyNyBtZWFucyBub3Qgc2V0LgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX01BQ19XSElURUxJU1QgICAgICAgICAgID0gU1BJTkVMX1BST1BfTUFDX0VYVF9fQkVHSU4gKyAwLAorCisgICAgLy8vIE1BQyBXaGl0ZWxpc3QgRW5hYmxlZCBGbGFnCisgICAgLyoqIEZvcm1hdDogYGJgCisgICAgICovCisgICAgU1BJTkVMX1BST1BfTUFDX1dISVRFTElTVF9FTkFCTEVEICAgPSBTUElORUxfUFJPUF9NQUNfRVhUX19CRUdJTiArIDEsCisKKyAgICAvLy8gTUFDIEV4dGVuZGVkIEFkZHJlc3MKKyAgICAvKiogRm9ybWF0OiBgRWAKKyAgICAgKgorICAgICAqICBTcGVjaWZpZWQgYnkgVGhyZWFkLiBSYW5kb21seS1jaG9zZW4sIGJ1dCBub24tdm9sYXRpbGUgRVVJLTY0LgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX01BQ19FWFRFTkRFRF9BRERSICAgICAgID0gU1BJTkVMX1BST1BfTUFDX0VYVF9fQkVHSU4gKyAyLAorCisgICAgLy8vIE1BQyBTb3VyY2UgTWF0Y2ggRW5hYmxlZCBGbGFnCisgICAgLyoqIEZvcm1hdDogYGJgCisgICAgICovCisgICAgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEICAgPSBTUElORUxfUFJPUF9NQUNfRVhUX19CRUdJTiArIDMsCisKKyAgICAvLy8gTUFDIFNvdXJjZSBNYXRjaCBTaG9ydCBBZGRyZXNzIExpc3QKKyAgICAvKiogRm9ybWF0OiBgQShTKWAKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfTUFDX0VYVF9fQkVHSU4gKyA0LAorCisgICAgLy8vIE1BQyBTb3VyY2UgTWF0Y2ggRXh0ZW5kZWQgQWRkcmVzcyBMaXN0CisgICAgLyoqIEZvcm1hdDogYEEoRSlgCisgICAgICovCisgICAgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX01BQ19FWFRfX0JFR0lOICsgNSwKKworICAgIC8vLyBNQUMgQmxhY2tsaXN0CisgICAgLyoqIEZvcm1hdDogYEEodChFKSlgCisgICAgICoKKyAgICAgKiBTdHJ1Y3R1cmUgUGFyYW1ldGVyczoKKyAgICAgKgorICAgICAqICogYEVgOiBFVUk2NCBhZGRyZXNzIG9mIG5vZGUKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9NQUNfQkxBQ0tMSVNUICAgICAgICAgICA9IFNQSU5FTF9QUk9QX01BQ19FWFRfX0JFR0lOICsgNiwKKworICAgIC8vLyBNQUMgQmxhY2tsaXN0IEVuYWJsZWQgRmxhZworICAgIC8qKiBGb3JtYXQ6IGBiYAorICAgICAqLworICAgIFNQSU5FTF9QUk9QX01BQ19CTEFDS0xJU1RfRU5BQkxFRCAgID0gU1BJTkVMX1BST1BfTUFDX0VYVF9fQkVHSU4gKyA3LAorICAgIFNQSU5FTF9QUk9QX01BQ19FWFRfX0VORCAgICAgICAgICAgID0gMHgxNDAwLAorCisgICAgU1BJTkVMX1BST1BfTkVUX19CRUdJTiAgICAgICAgICAgICAgPSAweDQwLAorICAgIFNQSU5FTF9QUk9QX05FVF9TQVZFRCAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfTkVUX19CRUdJTiArIDAsIC8vLzwgW2JdCisgICAgU1BJTkVMX1BST1BfTkVUX0lGX1VQICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9ORVRfX0JFR0lOICsgMSwgLy8vPCBbYl0KKyAgICBTUElORUxfUFJPUF9ORVRfU1RBQ0tfVVAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX05FVF9fQkVHSU4gKyAyLCAvLy88IFtiXQorICAgIFNQSU5FTF9QUk9QX05FVF9ST0xFICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfTkVUX19CRUdJTiArIDMsIC8vLzwgW0NdCisgICAgU1BJTkVMX1BST1BfTkVUX05FVFdPUktfTkFNRSAgICAgICAgPSBTUElORUxfUFJPUF9ORVRfX0JFR0lOICsgNCwgLy8vPCBbVV0KKyAgICBTUElORUxfUFJPUF9ORVRfWFBBTklEICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX05FVF9fQkVHSU4gKyA1LCAvLy88IFtEXQorICAgIFNQSU5FTF9QUk9QX05FVF9NQVNURVJfS0VZICAgICAgICAgID0gU1BJTkVMX1BST1BfTkVUX19CRUdJTiArIDYsIC8vLzwgW0RdCisgICAgU1BJTkVMX1BST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9ORVRfX0JFR0lOICsgNywgLy8vPCBbTF0KKyAgICBTUElORUxfUFJPUF9ORVRfUEFSVElUSU9OX0lEICAgICAgICA9IFNQSU5FTF9QUk9QX05FVF9fQkVHSU4gKyA4LCAvLy88IFtMXQorCisgICAgLy8vIFJlcXVpcmUgSm9pbiBFeGlzdGluZworICAgIC8qKiBGb3JtYXQ6IGBiYAorICAgICAqICBEZWZhdWx0IFZhbHVlOiBgZmFsc2VgCisgICAgICoKKyAgICAgKiBUaGlzIGZsYWcgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIG5vZGVzIHRoYXQgYXJlIGFzc29jaWF0aW5nIHdpdGggYW4KKyAgICAgKiBleGlzdGluZyBuZXR3b3JrIGZvciB0aGUgZmlyc3QgdGltZS4gSWYgdGhpcyBpcyBzZXQgdG8gYHRydWVgIGJlZm9yZQorICAgICAqIGBQUk9QX05FVF9TVEFDS19VUGAgaXMgc2V0IHRvIGB0cnVlYCwgdGhlCisgICAgICogY3JlYXRpb24gb2YgYSBuZXcgcGFydGl0aW9uIGF0IGFzc29jaWF0aW9uIGlzIHByZXZlbnRlZC4gSWYgdGhlIG5vZGUKKyAgICAgKiBjYW5ub3QgYXNzb2NpYXRlIHdpdGggYW4gZXhpc3RpbmcgcGFydGl0aW9uLCBgUFJPUF9MQVNUX1NUQVRVU2Agd2lsbAorICAgICAqIGVtaXQgYSBzdGF0dXMgdGhhdCBpbmRpY2F0ZXMgd2h5IHRoZSBhc3NvY2lhdGlvbiBmYWlsZWQgYW5kCisgICAgICogYFBST1BfTkVUX1NUQUNLX1VQYCB3aWxsIGF1dG9tYXRpY2FsbHkgcmV2ZXJ0IHRvIGBmYWxzZWAuCisgICAgICoKKyAgICAgKiBPbmNlIGFzc29jaWF0ZWQgd2l0aCBhbiBleGlzdGluZyBwYXJ0aXRpb24sIHRoaXMgZmxhZyBhdXRvbWF0aWNhbGx5CisgICAgICogcmV2ZXJ0cyB0byBgZmFsc2VgLgorICAgICAqCisgICAgICogVGhlIGJlaGF2aW9yIG9mIHRoaXMgcHJvcGVydHkgYmVpbmcgc2V0IHRvIGB0cnVlYCB3aGVuCisgICAgICogYFBST1BfTkVUX1NUQUNLX1VQYCBpcyBhbHJlYWR5IHNldCB0byBgdHJ1ZWAgaXMgdW5kZWZpbmVkLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX05FVF9fQkVHSU4gKyA5LAorCisgICAgU1BJTkVMX1BST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9ORVRfX0JFR0lOICsgMTAsIC8vLzwgW0xdCisKKyAgICBTUElORUxfUFJPUF9ORVRfUFNLQyAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX05FVF9fQkVHSU4gKyAxMSwgLy8vPCBbRF0KKworICAgIFNQSU5FTF9QUk9QX05FVF9fRU5EICAgICAgICAgICAgICAgID0gMHg1MCwKKworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gICAgICAgICAgID0gMHg1MCwKKyAgICBTUElORUxfUFJPUF9USFJFQURfTEVBREVSX0FERFIgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyAwLCAvLy88IFs2XQorICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9QQVJFTlQgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDEsIC8vLzwgTEFERFIsIFNBRERSIFtFU10KKyAgICBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfVEFCTEUgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyAyLCAvLy88IGFycmF5KEVVSTY0LHJsb2MxNix0aW1lb3V0LGFnZSxuZXREYXRhVmVyLGluTHFpLGF2ZVJTUyxtb2RlKSBbQSh0KEVTTExDQ2NDKSldCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX0xFQURFUl9SSUQgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfX0JFR0lOICsgMywgLy8vPCBbQ10KKyAgICBTUElORUxfUFJPUF9USFJFQURfTEVBREVSX1dFSUdIVCAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyA0LCAvLy88IFtDXQorICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9MT0NBTF9MRUFERVJfV0VJR0hUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfX0JFR0lOICsgNSwgLy8vPCBbQ10KKyAgICBTUElORUxfUFJPUF9USFJFQURfTkVUV09SS19EQVRBICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyA2LCAvLy88IFtEXQorICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEFfVkVSU0lPTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDcsIC8vLzwgW1NdCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyA4LCAvLy88IFtEXQorICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyA5LCAgLy8vPCBbU10KKyAgICBTUElORUxfUFJPUF9USFJFQURfT05fTUVTSF9ORVRTICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyAxMCwgLy8vPCBhcnJheShpcHY2cHJlZml4LHByZWZpeGxlbixzdGFibGUsZmxhZ3MsaXNMb2NhbCkgW0EodCg2Q2JDYikpXQorCisgICAgLy8vIE9mZi1tZXNoIHJvdXRlcworICAgIC8qKiBGb3JtYXQ6IFtBKHQoNkNiQ2JiKSldCisgICAgICoKKyAgICAgKiBEYXRhIHBlciBpdGVtIGlzOgorICAgICAqCisgICAgICogIGA2YDogUm91dGUgUHJlZml4CisgICAgICogIGBDYDogUHJlZml4IGxlbmd0aCBpbiBiaXRzCisgICAgICogIGBiYDogU3RhYmxlIGZsYWcKKyAgICAgKiAgYENgOiBSb3V0ZSBwcmVmZXJlbmNlIGZsYWdzCisgICAgICogIGBiYDogIklzIGRlZmluZWQgbG9jYWxseSIgZmxhZy4gU2V0IGlmIHRoaXMgcm91dGUgaW5mbyB3YXMgbG9jYWxseQorICAgICAqICAgICAgIGRlZmluZWQgYXMgcGFydCBvZiBsb2NhbCBuZXR3b3JrIGRhdGEuIEFzc3VtZWQgdG8gYmUgdHJ1ZSBmb3Igc2V0LAorICAgICAqICAgICAgIGluc2VydCBhbmQgcmVwbGFjZS4gQ2xlYXIgaWYgdGhlIHJvdXRlIGlzIHBhcnQgb2YgcGFydGl0aW9uJ3MgbmV0d29yaworICAgICAqICAgICAgIGRhdGEuCisgICAgICogIGBiYDogIk5leHQgaG9wIGlzIHRoaXMgZGV2aWNlIiBmbGFnLiBTZXQgaWYgdGhlIG5leHQgaG9wIGZvciB0aGUKKyAgICAgKiAgICAgICByb3V0ZSBpcyB0aGlzIGRldmljZSBpdHNlbGYgKGkuZS4sIHJvdXRlIHdhcyBhZGRlZCBieSB0aGlzIGRldmljZSkKKyAgICAgKiAgICAgICBUaGlzIHZhbHVlIGlzIGlnbm9yZWQgd2hlbiBhZGRpbmcgYW4gZXh0ZXJuYWwgcm91dGUuIEZvciBhbnkgYWRkZWQKKyAgICAgKiAgICAgICByb3V0ZSB0aGUgbmV4dCBob3AgaXMgdGhpcyBkZXZpY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfT0ZGX01FU0hfUk9VVEVTICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyAxMSwKKworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFMgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDEyLCAvLy88IGFycmF5KHBvcnRuKSBbQShTKV0KKyAgICBTUElORUxfUFJPUF9USFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfX0JFR0lOICsgMTMsIC8vLzwgW2JdCisKKyAgICAvLy8gVGhyZWFkIE1vZGUKKyAgICAvKiogRm9ybWF0OiBgQ2AKKyAgICAgKgorICAgICAqICBUaGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZQorICAgICAqICBUTFYgZm9yIHRoaXMgbm9kZS4gVGhlIG1lYW5pbmcgb2YgdGhlIGJpdHMgaW4gdGhpcworICAgICAqICBiaXRmaWVsZCBhcmUgZGVmaW5lZCBieSBzZWN0aW9uIDQuNS4yIG9mIHRoZSBUaHJlYWQKKyAgICAgKiAgc3BlY2lmaWNhdGlvbi4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfTU9ERSAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyAxNCwKKyAgICBTUElORUxfUFJPUF9USFJFQURfX0VORCAgICAgICAgICAgICA9IDB4NjAsCisKKyAgICBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiAgICAgICA9IDB4MTUwMCwKKworICAgIC8vLyBUaHJlYWQgQ2hpbGQgVGltZW91dAorICAgIC8qKiBGb3JtYXQ6IGBMYAorICAgICAqCisgICAgICogIFVzZWQgd2hlbiBvcGVyYXRpbmcgaW4gdGhlIENoaWxkIHJvbGUuCisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX0NISUxEX1RJTUVPVVQgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDAsCisKKyAgICAvLy8gVGhyZWFkIFJMT0MxNgorICAgIC8qKiBGb3JtYXQ6IGBTYAorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9STE9DMTYgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyAxLAorCisgICAgLy8vIFRocmVhZCBSb3V0ZXIgVXBncmFkZSBUaHJlc2hvbGQKKyAgICAvKiogRm9ybWF0OiBgQ2AKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDIsCisKKyAgICAvLy8gVGhyZWFkIENvbnRleHQgUmV1c2UgRGVsYXkKKyAgICAvKiogRm9ybWF0OiBgTGAKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyAzLAorCisgICAgLy8vIFRocmVhZCBOZXR3b3JrIElEIFRpbWVvdXQKKyAgICAvKiogRm9ybWF0OiBgQ2AKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfTkVUV09SS19JRF9USU1FT1VUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDQsCisKKyAgICAvLy8gTGlzdCBvZiBhY3RpdmUgdGhyZWFkIHJvdXRlciBpZHMKKyAgICAvKiogRm9ybWF0OiBgQShDKWAKKyAgICAgKgorICAgICAqIE5vdGUgdGhhdCBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgbm90IHN1cHBvcnQgQ01EX0dFVF9WQUxVRQorICAgICAqIHJvdXRlcmlkcywgYnV0IG1heSBzdXBwb3J0IENNRF9SRU1PVkVfVkFMVUUgd2hlbiB0aGUgbm9kZSBpcworICAgICAqIGEgbGVhZGVyLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9BQ1RJVkVfUk9VVEVSX0lEUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyA1LAorCisgICAgLy8vIEZvcndhcmQgSVB2NiBwYWNrZXRzIHRoYXQgdXNlIFJMT0MxNiBhZGRyZXNzZXMgdG8gSE9TVC4KKyAgICAvKiogRm9ybWF0OiBgYmAKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDYsCisKKyAgICAvLy8gVGhpcyBwcm9wZXJ0eSBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGBSb3V0ZXIgUm9sZWAgaXMgZW5hYmxlZC4KKyAgICAvKiogRm9ybWF0IGBiYAorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ST1VURVJfUk9MRV9FTkFCTEVECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDcsCisKKyAgICAvLy8gVGhyZWFkIFJvdXRlciBEb3duZ3JhZGUgVGhyZXNob2xkCisgICAgLyoqIEZvcm1hdDogYENgCisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDgsCisKKyAgICAvLy8gVGhyZWFkIFJvdXRlciBTZWxlY3Rpb24gSml0dGVyCisgICAgLyoqIEZvcm1hdDogYENgCisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDksCisKKyAgICAvLy8gVGhyZWFkIFByZWZlcnJlZCBSb3V0ZXIgSWQKKyAgICAvKiogRm9ybWF0OiBgQ2AgLSBXcml0ZSBvbmx5CisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX1BSRUZFUlJFRF9ST1VURVJfSUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgMTAsCisKKyAgICAvLy8gVGhyZWFkIE5laWdoYm9yIFRhYmxlCisgICAgLyoqIEZvcm1hdDogYEEodChFU0xDY0NiTEwpKWAKKyAgICAgKiAgZXVpNjQsIHJsb2MxNiwgYWdlLCBpbkxxaSAsYXZlUlNTLCBtb2RlLCBpc0NoaWxkLiBsaW5rRnJhbWVDb3VudGVyLCBtbGVDb3VudGVyCisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX05FSUdIQk9SX1RBQkxFICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDExLAorCisgICAgLy8vIFRocmVhZCBNYXggQ2hpbGQgQ291bnQKKyAgICAvKiogRm9ybWF0OiBgQ2AKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfQ09VTlRfTUFYICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgMTIsCisKKyAgICAvLy8gTGVhZGVyIG5ldHdvcmsgZGF0YQorICAgIC8qKiBGb3JtYXQ6IGBEYCAtIFJlYWQgb25seQorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9MRUFERVJfTkVUV09SS19EQVRBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDEzLAorCisgICAgLy8vIFN0YWJsZSBsZWFkZXIgbmV0d29yayBkYXRhCisgICAgLyoqIEZvcm1hdDogYERgIC0gUmVhZCBvbmx5CisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX1NUQUJMRV9MRUFERVJfTkVUV09SS19EQVRBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDE0LAorCisgICAgLy8vIFRocmVhZCBqb2luZXIgZGF0YQorICAgIC8qKiBGb3JtYXQgYEEoVChVTEUpKWAKKyAgICAqICBQU0tkLCBqb2luZXIgdGltZW91dCwgZXVpNjQgKG9wdGlvbmFsKQorICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX0pPSU5FUlMgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDE1LAorCisgICAgLy8vIFRocmVhZCBjb21taXNzaW9uZXIgZW5hYmxlCisgICAgLyoqIEZvcm1hdCBgYmAKKyAgICAgKgorICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgMTYsCisKKyAgICAvLy8gVGhyZWFkIFRNRiBwcm94eSBlbmFibGUKKyAgICAvKiogRm9ybWF0IGBiYAorICAgICAqCisgICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9UTUZfUFJPWFlfRU5BQkxFRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyAxNywKKworICAgIC8vLyBUaHJlYWQgVE1GIHByb3h5IHN0cmVhbQorICAgIC8qKiBGb3JtYXQgYGRTU2AKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfVE1GX1BST1hZX1NUUkVBTSA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgMTgsCisKKyAgICAvLy8gVGhyZWFkICJqb2luZXIiIGZsYWcgdXNlZCBkdXJpbmcgZGlzY292ZXJ5IHNjYW4gb3BlcmF0aW9uCisgICAgLyoqIEZvcm1hdCBgYmAKKyAgICAgKgorICAgICAqIFRoaXMgcHJvcGVydHkgZGVmaW5lcyB0aGUgSm9pbmVyIEZsYWcgdmFsdWUgaW4gdGhlIERpc2NvdmVyeSBSZXF1ZXN0IFRMVi4KKyAgICAgKgorICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fSk9JTkVSX0ZMQUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgMTksCisKKyAgICAvLy8gRW5hYmxlIEVVSTY0IGZpbHRlcmluZyBmb3IgZGlzY292ZXJ5IHNjYW4gb3BlcmF0aW9uLgorICAgIC8qKiBGb3JtYXQgYGJgCisgICAgICoKKyAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fRU5BQkxFX0ZJTFRFUklORworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyAyMCwKKworICAgIC8vLyBQQU5JRCB1c2VkIGZvciBEaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24gKHVzZWQgZm9yIFBBTklEIGZpbHRlcmluZykuCisgICAgLyoqIEZvcm1hdDogYFNgCisgICAgICoKKyAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIDB4ZmZmZiAoQnJvYWRjYXN0IFBBTikgdG8gZGlzYWJsZSBQQU5JRCBmaWx0ZXJpbmcKKyAgICAgKgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9QQU5JRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyAyMSwKKworICAgIC8vLyBUaHJlYWQgKG91dCBvZiBiYW5kKSBzdGVlcmluZyBkYXRhIGZvciBNTEUgRGlzY292ZXJ5IFJlc3BvbnNlLgorICAgIC8qKiBGb3JtYXQgYEVgIC0gV3JpdGUgb25seQorICAgICAqCisgICAgICogUmVxdWlyZWQgY2FwYWJpbGl0eTogU1BJTkVMX0NBUF9PT0JfU1RFRVJJTkdfREFUQS4KKyAgICAgKgorICAgICAqIFdyaXRpbmcgdG8gdGhpcyBwcm9wZXJ0eSBhbGxvd3MgdG8gc2V0L3VwZGF0ZSB0aGUgdGhlIE1MRSBEaXNjb3ZlcnkgUmVzcG9uc2Ugc3RlZXJpbmcgZGF0YSBvdXQgb2YgYmFuZC4KKyAgICAgKgorICAgICAqICAtIEFsbCB6ZXJvcyB0byBjbGVhciB0aGUgc3RlZXJpbmcgZGF0YSAoaW5kaWNhdGluZyB0aGF0IHRoZXJlIGlzIG5vIHN0ZWVyaW5nIGRhdGEpLgorICAgICAqICAtIEFsbCAweEZGcyB0byBzZXQgc3RlZXJpbmcgZGF0YS9ibG9vbSBmaWx0ZXIgdG8gYWNjZXB0L2FsbG93IGFsbC4KKyAgICAgKiAgLSBBIHNwZWNpZmljIEVVSTY0IHdoaWNoIGlzIHRoZW4gYWRkZWQgdG8gY3VycmVudCBzdGVlcmluZyBkYXRhL2Jsb29tIGZpbHRlci4KKyAgICAgKgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9TVEVFUklOR19EQVRBICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyAyMiwKKworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0VORCAgICAgICAgID0gMHgxNjAwLAorCisgICAgU1BJTkVMX1BST1BfSVBWNl9fQkVHSU4gICAgICAgICAgICAgPSAweDYwLAorICAgIFNQSU5FTF9QUk9QX0lQVjZfTExfQUREUiAgICAgICAgICAgID0gU1BJTkVMX1BST1BfSVBWNl9fQkVHSU4gKyAwLCAvLy88IFs2XQorICAgIFNQSU5FTF9QUk9QX0lQVjZfTUxfQUREUiAgICAgICAgICAgID0gU1BJTkVMX1BST1BfSVBWNl9fQkVHSU4gKyAxLCAvLy88IFs2Q10KKyAgICBTUElORUxfUFJPUF9JUFY2X01MX1BSRUZJWCAgICAgICAgICA9IFNQSU5FTF9QUk9QX0lQVjZfX0JFR0lOICsgMiwgLy8vPCBbNkNdCisgICAgU1BJTkVMX1BST1BfSVBWNl9BRERSRVNTX1RBQkxFICAgICAgPSBTUElORUxfUFJPUF9JUFY2X19CRUdJTiArIDMsIC8vLzwgYXJyYXkoaXB2NmFkZHIscHJlZml4bGVuLHZhbGlkLHByZWZlcnJlZCxmbGFncykgW0EodCg2Q0xMQykpXQorICAgIFNQSU5FTF9QUk9QX0lQVjZfUk9VVEVfVEFCTEUgICAgICAgID0gU1BJTkVMX1BST1BfSVBWNl9fQkVHSU4gKyA0LCAvLy88IGFycmF5KGlwdjZwcmVmaXgscHJlZml4bGVuLGlmYWNlLGZsYWdzKSBbQSh0KDZDQ0MpKV0KKworICAgIC8vLyBJUHY2IElDTVAgUGluZyBPZmZsb2FkCisgICAgLyoqIEZvcm1hdDogYGJgCisgICAgICoKKyAgICAgKiBBbGxvdyB0aGUgTkNQIHRvIGRpcmVjdGx5IHJlc3BvbmQgdG8gSUNNUCBwaW5nIHJlcXVlc3RzLiBJZiB0aGlzIGlzCisgICAgICogdHVybmVkIG9uLCBwaW5nIHJlcXVlc3QgSUNNUCBwYWNrZXRzIHdpbGwgbm90IGJlIHBhc3NlZCB0byB0aGUgaG9zdC4KKyAgICAgKgorICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9JUFY2X0lDTVBfUElOR19PRkZMT0FEICA9IFNQSU5FTF9QUk9QX0lQVjZfX0JFR0lOICsgNSwgLy8vPCBbYl0KKworICAgIFNQSU5FTF9QUk9QX0lQVjZfX0VORCAgICAgICAgICAgICAgID0gMHg3MCwKKworICAgIFNQSU5FTF9QUk9QX1NUUkVBTV9fQkVHSU4gICAgICAgICAgID0gMHg3MCwKKyAgICBTUElORUxfUFJPUF9TVFJFQU1fREVCVUcgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1NUUkVBTV9fQkVHSU4gKyAwLCAvLy88IFtVXQorICAgIFNQSU5FTF9QUk9QX1NUUkVBTV9SQVcgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfU1RSRUFNX19CRUdJTiArIDEsIC8vLzwgW2REXQorICAgIFNQSU5FTF9QUk9QX1NUUkVBTV9ORVQgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfU1RSRUFNX19CRUdJTiArIDIsIC8vLzwgW2REXQorICAgIFNQSU5FTF9QUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkUgICAgID0gU1BJTkVMX1BST1BfU1RSRUFNX19CRUdJTiArIDMsIC8vLzwgW2REXQorICAgIFNQSU5FTF9QUk9QX1NUUkVBTV9fRU5EICAgICAgICAgICAgID0gMHg4MCwKKworICAgIC8vLyBVQVJUIEJpdHJhdGUKKyAgICAvKiogRm9ybWF0OiBgTGAKKyAgICAgKgorICAgICAqICBJZiB0aGUgTkNQIGlzIHVzaW5nIGEgVUFSVCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0LAorICAgICAqICB0aGlzIHByb3BlcnR5IGFsbG93cyB0aGUgaG9zdCB0byBjaGFuZ2UgdGhlIGJpdHJhdGUKKyAgICAgKiAgb2YgdGhlIHNlcmlhbCBjb25uZWN0aW9uLiBUaGUgdmFsdWUgZW5jb2RpbmcgaXMgYExgLAorICAgICAqICB3aGljaCBpcyBhIGxpdHRsZS1lbmRpYW4gMzItYml0IHVuc2lnbmVkIGludGVnZXIuCisgICAgICogIFRoZSBob3N0IHNob3VsZCBub3QgYXNzdW1lIHRoYXQgYWxsIHBvc3NpYmxlIG51bWVyaWMgdmFsdWVzCisgICAgICogIGFyZSBzdXBwb3J0ZWQuCisgICAgICoKKyAgICAgKiAgSWYgaW1wbGVtZW50ZWQgYnkgdGhlIE5DUCwgdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgcGVyc2lzdGVudAorICAgICAqICBhY3Jvc3Mgc29mdHdhcmUgcmVzZXRzIGFuZCBmb3Jnb3R0ZW4gdXBvbiBoYXJkd2FyZSByZXNldHMuCisgICAgICoKKyAgICAgKiAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGltcGxlbWVudGVkIHdoZW4gYSBVQVJUIGlzIGJlaW5nCisgICAgICogIHVzZWQgZm9yIFNwaW5lbC4gVGhpcyBwcm9wZXJ0eSBpcyBvcHRpb25hbC4KKyAgICAgKgorICAgICAqICBXaGVuIGNoYW5naW5nIHRoZSBiaXRyYXRlLCBhbGwgZnJhbWVzIHdpbGwgYmUgcmVjZWl2ZWQKKyAgICAgKiAgYXQgdGhlIHByZXZpb3VzIGJpdHJhdGUgdW50aWwgdGhlIHJlc3BvbnNlIGZyYW1lIHRvIHRoaXMgY29tbWFuZAorICAgICAqICBpcyByZWNlaXZlZC4gT25jZSBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJhbWUgaXMgcmVjZWl2ZWQgYnkKKyAgICAgKiAgdGhlIGhvc3QsIGFsbCBmdXJ0aGVyIGZyYW1lcyB3aWxsIGJlIHRyYW5zbWl0dGVkIGF0IHRoZSBuZXcKKyAgICAgKiAgYml0cmF0ZS4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9VQVJUX0JJVFJBVEUgICAgICAgICAgICA9IDB4MTAwLAorCisgICAgLy8vIFVBUlQgU29mdHdhcmUgRmxvdyBDb250cm9sCisgICAgLyoqIEZvcm1hdDogYGJgCisgICAgICoKKyAgICAgKiAgSWYgdGhlIE5DUCBpcyB1c2luZyBhIFVBUlQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdCwKKyAgICAgKiAgdGhpcyBwcm9wZXJ0eSBhbGxvd3MgdGhlIGhvc3QgdG8gZGV0ZXJtaW5lIGlmIHNvZnR3YXJlIGZsb3cKKyAgICAgKiAgY29udHJvbCAoWE9OL1hPRkYgc3R5bGUpIHNob3VsZCBiZSB1c2VkIGFuZCAob3B0aW9uYWxseSkgdG8KKyAgICAgKiAgdHVybiBpdCBvbiBvciBvZmYuCisgICAgICoKKyAgICAgKiAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGltcGxlbWVudGVkIHdoZW4gYSBVQVJUIGlzIGJlaW5nCisgICAgICogIHVzZWQgZm9yIFNwaW5lbC4gVGhpcyBwcm9wZXJ0eSBpcyBvcHRpb25hbC4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9VQVJUX1hPTl9YT0ZGICAgICAgICAgICA9IDB4MTAxLAorCisgICAgU1BJTkVMX1BST1BfMTVfNF9QSUJfX0JFR0lOICAgICAgICAgPSAxMDI0LAorICAgIC8vIEZvciBkaXJlY3QgYWNjZXNzIHRvIHRoZSA4MDIuMTUuNCBQSUQuCisgICAgLy8gSW5kaXZpZHVhbCByZWdpc3RlcnMgYXJlIGZldGNoZWQgdXNpbmcKKyAgICAvLyBgU1BJTkVMX1BST1BfMTVfNF9QSUJfX0JFR0lOK1tQSUJfSURFTlRJRklFUl1gCisgICAgLy8gT25seSBzdXBwb3J0ZWQgaWYgU1BJTkVMX0NBUF8xNV80X1BJQiBpcyBzZXQuCisgICAgLy8KKyAgICAvLyBGb3IgYnJldml0eSwgdGhlIGVudGlyZSA4MDIuMTUuNCBQSUIgc3BhY2UgaXMKKyAgICAvLyBub3QgZGVmaW5lZCBoZXJlLCBidXQgYSBmZXcgY2hvaWNlIGF0dHJpYnV0ZXMKKyAgICAvLyBhcmUgZGVmaW5lZCBmb3IgaWxsdXN0cmF0aW9uIGFuZCBjb252ZW5pZW5jZS4KKyAgICBTUElORUxfUFJPUF8xNV80X1BJQl9QSFlfQ0hBTk5FTFNfU1VQUE9SVEVECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF8xNV80X1BJQl9fQkVHSU4gKyAweDAxLCAvLy88IFtBKEwpXQorICAgIFNQSU5FTF9QUk9QXzE1XzRfUElCX01BQ19QUk9NSVNDVU9VU19NT0RFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF8xNV80X1BJQl9fQkVHSU4gKyAweDUxLCAvLy88IFtiXQorICAgIFNQSU5FTF9QUk9QXzE1XzRfUElCX01BQ19TRUNVUklUWV9FTkFCTEVECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF8xNV80X1BJQl9fQkVHSU4gKyAweDVkLCAvLy88IFtiXQorICAgIFNQSU5FTF9QUk9QXzE1XzRfUElCX19FTkQgICAgICAgICAgID0gMTI4MCwKKworICAgIFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICAgICAgICAgICAgID0gMTI4MCwKKworICAgIC8vLyBDb3VudGVyIHJlc2V0IGJlaGF2aW9yCisgICAgLyoqIEZvcm1hdDogYENgCisgICAgICogIFdyaXRpbmcgYSAnMScgdG8gdGhpcyBwcm9wZXJ0eSB3aWxsIHJlc2V0CisgICAgICogIGFsbCBvZiB0aGUgY291bnRlcnMgdG8gemVyby4gKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JFU0VUICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMCwKKworICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbnMuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfVE9UQUwgICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDEsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiB0cmFuc21pc3Npb25zIHdpdGggYWNrIHJlcXVlc3QuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfQUNLX1JFUSAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDIsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiB0cmFuc21pc3Npb25zIHRoYXQgd2VyZSBhY2tlZC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9BQ0tFRCAgICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMywKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbnMgd2l0aG91dCBhY2sgcmVxdWVzdC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9OT19BQ0tfUkVRICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgNCwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIGRhdGEuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfREFUQSAgICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDUsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBkYXRhIHBvbGwuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfREFUQV9QT0xMICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDYsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBiZWFjb24uCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfQkVBQ09OICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDcsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBiZWFjb24gcmVxdWVzdC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9CRUFDT05fUkVRICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgOCwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIG90aGVyIHR5cGVzIG9mIGZyYW1lcy4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9PVEhFUiAgICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgOSwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIHRpbWVzLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX1JFVFJZICAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMCwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIENDQSBmYWlsdXJlIHRpbWVzLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfRVJSX0NDQSAgICAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMSwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHVuaWNhc3QgcGFja2V0cyB0cmFuc21pdHRlZC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9VTklDQVNUICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTIsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiBicm9hZGNhc3QgcGFja2V0cyB0cmFuc21pdHRlZC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9CUk9BRENBU1QgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTMsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiBmcmFtZSB0cmFuc21pc3Npb24gZmFpbHVyZXMgZHVlIHRvIGFib3J0IGVycm9yLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfRVJSX0FCT1JUICAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxNCwKKworICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfVE9UQUwgICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDEwMCwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIGRhdGEuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfREFUQSAgICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDEwMSwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIGRhdGEgcG9sbC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9EQVRBX1BPTEwgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTAyLAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgYmVhY29uLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0JFQUNPTiAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMDMsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBiZWFjb24gcmVxdWVzdC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9CRUFDT05fUkVRICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTA0LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgb3RoZXIgdHlwZXMgb2YgZnJhbWVzLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX09USEVSICAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMDUsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIGZpbHRlcmVkIGJ5IHdoaXRlbGlzdC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9GSUxUX1dMICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTA2LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyBmaWx0ZXJlZCBieSBkZXN0aW5hdGlvbiBjaGVjay4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9GSUxUX0RBICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTA3LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyB0aGF0IGFyZSBlbXB0eS4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX0VSUl9FTVBUWSAgICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTA4LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyBmcm9tIGFuIHVua25vd24gbmVpZ2hib3IuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9FUlJfVUtXTl9OQlIgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDEwOSwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMgd2hvc2Ugc291cmNlIGFkZHJlc3MgaXMgaW52YWxpZC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX0VSUl9OVkxEX1NBRERSICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTEwLAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyB3aXRoIGEgc2VjdXJpdHkgZXJyb3IuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9FUlJfU0VDVVJJVFkgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDExMSwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMgd2l0aCBhIGNoZWNrc3VtIGVycm9yLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX0JBRF9GQ1MgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMTIsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIHdpdGggb3RoZXIgZXJyb3JzLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX09USEVSICAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMTMsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBkdXBsaWNhdGVkLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0RVUCAgICAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMTQsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiB1bmljYXN0IHBhY2tldHMgcmVjZWl2ZWQuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfVU5JQ0FTVCAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDExNSwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIGJyb2FkY2FzdCBwYWNrZXRzIHJlY2VpdmVkLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0JST0FEQ0FTVCAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMTYsCisKKyAgICAvLy8gVGhlIHRvdGFsIG51bWJlciBvZiBzZWN1cmUgdHJhbnNtaXR0ZWQgSVAgbWVzc2FnZXMuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9UWF9JUF9TRUNfVE9UQUwgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDIwMCwKKworICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIGluc2VjdXJlIHRyYW5zbWl0dGVkIElQIG1lc3NhZ2VzLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfSVBfSU5TRUNfVE9UQUwgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAyMDEsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiBkcm9wcGVkIChub3QgdHJhbnNtaXR0ZWQpIElQIG1lc3NhZ2VzLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfSVBfRFJPUFBFRCAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAyMDIsCisKKyAgICAvLy8gVGhlIHRvdGFsIG51bWJlciBvZiBzZWN1cmUgcmVjZWl2ZWQgSVAgbWVzc2FnZS4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX0lQX1NFQ19UT1RBTCAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMjAzLAorCisgICAgLy8vIFRoZSB0b3RhbCBudW1iZXIgb2YgaW5zZWN1cmUgcmVjZWl2ZWQgSVAgbWVzc2FnZS4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX0lQX0lOU0VDX1RPVEFMICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMjA0LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgZHJvcHBlZCByZWNlaXZlZCBJUCBtZXNzYWdlcy4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX0lQX0RST1BQRUQgICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMjA1LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgc3BpbmVsIGZyYW1lcy4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1NQSU5FTF9UT1RBTCAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMzAwLAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgc3BpbmVsIGZyYW1lcy4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX1NQSU5FTF9UT1RBTCAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMzAxLAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgc3BpbmVsIGZyYW1lcyB3aXRoIGVycm9yLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfU1BJTkVMX0VSUiAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAzMDIsCisKKyAgICAvLy8gTnVtYmVyIG9mIG91dCBvZiBvcmRlciByZWNlaXZlZCBzcGluZWwgZnJhbWVzICh0aWQgaW5jcmVhc2UgYnkgbW9yZSB0aGFuIDEpLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfU1BJTkVMX09VVF9PRl9PUkRFUl9USUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMzAzLAorCisgICAgLy8vIFRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bCBUeCBJUCBwYWNrZXRzCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9JUF9UWF9TVUNDRVNTICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDMwNCwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWwgUnggSVAgcGFja2V0cworICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfSVBfUlhfU1VDQ0VTUyAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAzMDUsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiBmYWlsZWQgVHggSVAgcGFja2V0cworICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfSVBfVFhfRkFJTFVSRSAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAzMDYsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiBmYWlsZWQgUnggSVAgcGFja2V0cworICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfSVBfUlhfRkFJTFVSRSAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAzMDcsCisKKyAgICAvLy8gVGhlIG1lc3NhZ2UgYnVmZmVyIGNvdW50ZXIgaW5mbworICAgIC8qKiBGb3JtYXQ6IGBTU1NTU1NTU1NTU1NTU1NTYCAoUmVhZC1vbmx5KQorICAgICAqICAgICAgYFNgLCAoVG90YWxCdWZmZXJzKSAgICAgICAgICAgVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBwb29sLgorICAgICAqICAgICAgYFNgLCAoRnJlZUJ1ZmZlcnMpICAgICAgICAgICAgVGhlIG51bWJlciBvZiBmcmVlIG1lc3NhZ2UgYnVmZmVycy4KKyAgICAgKiAgICAgIGBTYCwgKDZsb1NlbmRNZXNzYWdlcykgICAgICAgIFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIDZsbyBzZW5kIHF1ZXVlLgorICAgICAqICAgICAgYFNgLCAoNmxvU2VuZEJ1ZmZlcnMpICAgICAgICAgVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSA2bG8gc2VuZCBxdWV1ZS4KKyAgICAgKiAgICAgIGBTYCwgKDZsb1JlYXNzZW1ibHlNZXNzYWdlcykgIFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIDZMb1dQQU4gcmVhc3NlbWJseSBxdWV1ZS4KKyAgICAgKiAgICAgIGBTYCwgKDZsb1JlYXNzZW1ibHlCdWZmZXJzKSAgIFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgNkxvV1BBTiByZWFzc2VtYmx5IHF1ZXVlLgorICAgICAqICAgICAgYFNgLCAoSXA2TWVzc2FnZXMpICAgICAgICAgICAgVGhlIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgSVB2NiBzZW5kIHF1ZXVlLgorICAgICAqICAgICAgYFNgLCAoSXA2QnVmZmVycykgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBJUHY2IHNlbmQgcXVldWUuCisgICAgICogICAgICBgU2AsIChNcGxNZXNzYWdlcykgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBNUEwgc2VuZCBxdWV1ZS4KKyAgICAgKiAgICAgIGBTYCwgKE1wbEJ1ZmZlcnMpICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgTVBMIHNlbmQgcXVldWUuCisgICAgICogICAgICBgU2AsIChNbGVNZXNzYWdlcykgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBNTEUgc2VuZCBxdWV1ZS4KKyAgICAgKiAgICAgIGBTYCwgKE1sZUJ1ZmZlcnMpICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgTUxFIHNlbmQgcXVldWUuCisgICAgICogICAgICBgU2AsIChBcnBNZXNzYWdlcykgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBBUlAgc2VuZCBxdWV1ZS4KKyAgICAgKiAgICAgIGBTYCwgKEFycEJ1ZmZlcnMpICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgQVJQIHNlbmQgcXVldWUuCisgICAgICogICAgICBgU2AsIChDb2FwTWVzc2FnZXMpICAgICAgICAgICBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBDb0FQIHNlbmQgcXVldWUuCisgICAgICogICAgICBgU2AsIChDb2FwQnVmZmVycykgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIENvQVAgc2VuZCBxdWV1ZS4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9NU0dfQlVGRkVSX0NPVU5URVJTICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgNDAwLAorCisgICAgU1BJTkVMX1BST1BfQ05UUl9fRU5EICAgICAgICAgICAgICAgPSAyMDQ4LAorCisgICAgU1BJTkVMX1BST1BfTkVTVF9fQkVHSU4gICAgICAgICAgICAgPSAxNTI5NiwKKyAgICBTUElORUxfUFJPUF9ORVNUX1NUUkVBTV9NRkcgICAgICAgICA9IFNQSU5FTF9QUk9QX05FU1RfX0JFR0lOICsgMCwKKworICAgIC8vLyBUaGUgbGVnYWN5IG5ldHdvcmsgVUxBIHByZWZpeCAoOCBieXRlcykKKyAgICAvKiogRm9ybWF0OiAnRCcgKi8KKyAgICBTUElORUxfUFJPUF9ORVNUX0xFR0FDWV9VTEFfUFJFRklYICA9IFNQSU5FTF9QUk9QX05FU1RfX0JFR0lOICsgMSwKKworICAgIC8vLyBBIChuZXdseSkgam9pbmVkIGxlZ2FjeSBub2RlICh0aGlzIGlzIHNpZ25hbGVkIGZyb20gTkNQKQorICAgIC8qKiBGb3JtYXQ6ICdFJyAqLworICAgIFNQSU5FTF9QUk9QX05FU1RfTEVHQUNZX0pPSU5FRF9OT0RFID0gU1BJTkVMX1BST1BfTkVTVF9fQkVHSU4gKyAyLAorCisgICAgU1BJTkVMX1BST1BfTkVTVF9fRU5EICAgICAgICAgICAgICAgPSAxNTM2MCwKKworICAgIFNQSU5FTF9QUk9QX1ZFTkRPUl9fQkVHSU4gICAgICAgICAgID0gMTUzNjAsCisgICAgU1BJTkVMX1BST1BfVkVORE9SX19FTkQgICAgICAgICAgICAgPSAxNjM4NCwKKworICAgIFNQSU5FTF9QUk9QX0RFQlVHX19CRUdJTiAgICAgICAgICAgID0gMTYzODQsCisKKyAgICAvLy8gUmVhZGluZyB0aGlzIHByb3BlcnR5IHdpbGwgY2F1c2UgYW4gYXNzZXJ0IG9uIHRoZSBOQ1AuCisgICAgLy8vIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHRlc3RpbmcgdGhlIGFzc2VydCBmdW5jdGlvbmFsaXR5IG9mCisgICAgLy8vIHVuZGVybHlpbmcgcGxhdGZvcm0vTkNQLiBBc3NlcnQgc2hvdWxkIGlkZWFsbHkgY2F1c2UgdGhlCisgICAgLy8vIE5DUCB0byByZXNldCwgYnV0IGlmIHRoaXMgaXMgbm90IHN1cHBvcnRlZCBhIGBmYWxzZWAgYm9vbGVhbgorICAgIC8vLyBpcyByZXR1cm5lZCBpbiByZXNwb25zZS4KKyAgICAvKiogRm9ybWF0OiAnYicgKHJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9ERUJVR19URVNUX0FTU0VSVCAgICAgICA9IFNQSU5FTF9QUk9QX0RFQlVHX19CRUdJTiArIDAsCisKKyAgICAvLy8gVGhlIE5DUCBsb2cgbGV2ZWwuCisgICAgLyoqIEZvcm1hdDogYENgICovCisgICAgU1BJTkVMX1BST1BfREVCVUdfTkNQX0xPR19MRVZFTCAgICAgPSBTUElORUxfUFJPUF9ERUJVR19fQkVHSU4gKyAxLAorCisgICAgU1BJTkVMX1BST1BfREVCVUdfX0VORCAgICAgICAgICAgICAgPSAxNzQwOCwKKworICAgIFNQSU5FTF9QUk9QX0VYUEVSSU1FTlRBTF9fQkVHSU4gICAgID0gMjAwMDAwMCwKKyAgICBTUElORUxfUFJPUF9FWFBFUklNRU5UQUxfX0VORCAgICAgICA9IDIwOTcxNTIsCit9IHNwaW5lbF9wcm9wX2tleV90OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgU1BJTkVMX0hFQURFUl9GTEFHICAgICAgICAgICAgICAweDgwCisKKyNkZWZpbmUgU1BJTkVMX0hFQURFUl9USURfU0hJRlQgICAgICAgICAwCisjZGVmaW5lIFNQSU5FTF9IRUFERVJfVElEX01BU0sgICAgICAgICAgKDE1IDw8IFNQSU5FTF9IRUFERVJfVElEX1NISUZUKQorCisjZGVmaW5lIFNQSU5FTF9IRUFERVJfSUlEX1NISUZUICAgICAgICAgNAorI2RlZmluZSBTUElORUxfSEVBREVSX0lJRF9NQVNLICAgICAgICAgICgzIDw8IFNQSU5FTF9IRUFERVJfSUlEX1NISUZUKQorCisjZGVmaW5lIFNQSU5FTF9IRUFERVJfSUlEXzAgICAgICAgICAgICAgKDAgPDwgU1BJTkVMX0hFQURFUl9JSURfU0hJRlQpCisjZGVmaW5lIFNQSU5FTF9IRUFERVJfSUlEXzEgICAgICAgICAgICAgKDEgPDwgU1BJTkVMX0hFQURFUl9JSURfU0hJRlQpCisjZGVmaW5lIFNQSU5FTF9IRUFERVJfSUlEXzIgICAgICAgICAgICAgKDIgPDwgU1BJTkVMX0hFQURFUl9JSURfU0hJRlQpCisjZGVmaW5lIFNQSU5FTF9IRUFERVJfSUlEXzMgICAgICAgICAgICAgKDMgPDwgU1BJTkVMX0hFQURFUl9JSURfU0hJRlQpCisKKyNkZWZpbmUgU1BJTkVMX0hFQURFUl9HRVRfSUlEKHgpICAgICAgICAoKCh4KSAmIFNQSU5FTF9IRUFERVJfSUlEX01BU0spID4+IFNQSU5FTF9IRUFERVJfSUlEX1NISUZUKQorI2RlZmluZSBTUElORUxfSEVBREVSX0dFVF9USUQoeCkgICAgICAgIChzcGluZWxfdGlkX3QpKCgoeCkmU1BJTkVMX0hFQURFUl9USURfTUFTSyk+PlNQSU5FTF9IRUFERVJfVElEX1NISUZUKQorCisjZGVmaW5lIFNQSU5FTF9HRVRfTkVYVF9USUQoeCkgICAgICAgICAgKHNwaW5lbF90aWRfdCkoKHgpPj0weEY/MTooeCkrMSkKKworI2RlZmluZSBTUElORUxfQkVBQ09OX1RIUkVBRF9GTEFHX1ZFUlNJT05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIFNQSU5FTF9CRUFDT05fVEhSRUFEX0ZMQUdfVkVSU0lPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhmIDw8IFNQSU5FTF9CRUFDT05fVEhSRUFEX0ZMQUdfVkVSU0lPTl9TSElGVCkKKworI2RlZmluZSBTUElORUxfQkVBQ09OX1RIUkVBRF9GTEFHX0pPSU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKworI2RlZmluZSBTUElORUxfQkVBQ09OX1RIUkVBRF9GTEFHX05BVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0KK3sKKyAgICBTUElORUxfREFUQVRZUEVfTlVMTF9DICAgICAgICAgICAgICA9IDAsCisgICAgU1BJTkVMX0RBVEFUWVBFX1ZPSURfQyAgICAgICAgICAgICAgPSAnLicsCisgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfQyAgICAgICAgICAgICAgPSAnYicsCisgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X0MgICAgICAgICAgICAgPSAnQycsCisgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfQyAgICAgICAgICAgICAgPSAnYycsCisgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9DICAgICAgICAgICAgPSAnUycsCisgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDE2X0MgICAgICAgICAgICAgPSAncycsCisgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9DICAgICAgICAgICAgPSAnTCcsCisgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDMyX0MgICAgICAgICAgICAgPSAnbCcsCisgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX0MgICAgICAgPSAnaScsCisgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX0MgICAgICAgICAgPSAnNicsCisgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X0MgICAgICAgICAgICAgPSAnRScsCisgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTQ4X0MgICAgICAgICAgICAgPSAnZScsCisgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfV0xFTl9DICAgICAgICAgPSAnZCcsCisgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfQyAgICAgICAgICAgICAgPSAnRCcsCisgICAgU1BJTkVMX0RBVEFUWVBFX1VURjhfQyAgICAgICAgICAgICAgPSAnVScsIC8vITwgWmVyby1UZXJtaW5hdGVkIFVURjgtRW5jb2RlZCBTdHJpbmcKKyAgICBTUElORUxfREFUQVRZUEVfU1RSVUNUX0MgICAgICAgICAgICA9ICd0JywKKyAgICBTUElORUxfREFUQVRZUEVfQVJSQVlfQyAgICAgICAgICAgICA9ICdBJywKK307CisKK3R5cGVkZWYgY2hhciBzcGluZWxfZGF0YXR5cGVfdDsKKworI2RlZmluZSBTUElORUxfREFUQVRZUEVfTlVMTF9TICAgICAgICAgICIiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9WT0lEX1MgICAgICAgICAgIi4iCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MgICAgICAgICAgImIiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAgICAgIkMiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MgICAgICAgICAgImMiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAgICAgIlMiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9JTlQxNl9TICAgICAgICAgInMiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUyAgICAgICAgIkwiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9JTlQzMl9TICAgICAgICAgImwiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TICAgImkiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TICAgICAgIjYiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TICAgICAgICAgIkUiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9FVUk0OF9TICAgICAgICAgImUiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1dMRU5fUyAgICAgImQiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MgICAgICAgICAgIkQiCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9VVEY4X1MgICAgICAgICAgIlUiIC8vITwgWmVyby1UZXJtaW5hdGVkIFVURjgtRW5jb2RlZCBTdHJpbmcKKworI2RlZmluZSBTUElORUxfREFUQVRZUEVfQVJSQVlfUyh4KSAgICAgICJBKCIgeCAiKSIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKHgpICAgICAidCgiIHggIikiCisKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0FSUkFZX1NUUlVDVF9TKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9BUlJBWV9TKFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfV0xFTl9TKHgpKQorCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1MgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgLyogaGVhZGVyICAqLyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUyAvKiBjb21tYW5kICovCisKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUFJPUF9TICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9TICAgICAvKiBwcm9wIGNvbW1hbmQgICovICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TIC8qIHByb3BlcnR5IGlkICovCisKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX01BQ19TQ0FOX1JFU1VMVF9TKG1hY19mb3JtYXRfc3RyLCBuZXRfZm9ybWF0X3N0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TIC8qIENoYW5uZWwgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUyAgLyogUlNTSSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfU1RSVUNUX1MobWFjX2Zvcm1hdF9zdHIpIC8qIG1hYy1sYXllciBkYXRhICovICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUyhuZXRfZm9ybWF0X3N0cikgLyogbmV0LWxheWVyIGRhdGEgKi8KKworI2RlZmluZSBTUElORUxfODAyXzE1XzRfREFUQVRZUEVfTUFDX1NDQU5fUkVTVUxUX1YxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MgIC8qIGxhZGRyICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgLyogc2FkZHIgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAvKiBwYW5pZCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgIC8qIGxxaSAgICovCisKKyNkZWZpbmUgU1BJTkVMX05FVF9EQVRBVFlQRV9NQUNfU0NBTl9SRVNVTFRfVjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TIC8qIHR5cGUgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgLyogZmxhZ3MgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVVRGOF9TIC8qIG5ldHdvcmsgbmFtZSAqLyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1dMRU5fUyAvKiB4cGFuaWQgKi8KKworI2RlZmluZSBTUElORUxfTkVUX0RBVEFUWVBFX01BQ19TQ0FOX1JFU1VMVF9WMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX05FVF9EQVRBVFlQRV9NQUNfU0NBTl9SRVNVTFRfVjFfUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9XTEVOX1MgLyogc3RlZXJpbmcgZGF0YSAqLworCisKKyNkZWZpbmUgU1BJTkVMX01BWF9VSU5UX1BBQ0tFRCAgICAgICAgICAyMDk3MTUxCisKK1NQSU5FTF9BUElfRVhURVJOIHNwaW5lbF9zc2l6ZV90IHNwaW5lbF9kYXRhdHlwZV9wYWNrKHVpbnQ4X3QgKmRhdGFfb3V0LCBzcGluZWxfc2l6ZV90IGRhdGFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGFja19mb3JtYXQsIC4uLik7CitTUElORUxfQVBJX0VYVEVSTiBzcGluZWxfc3NpemVfdCBzcGluZWxfZGF0YXR5cGVfdnBhY2sodWludDhfdCAqZGF0YV9vdXQsIHNwaW5lbF9zaXplX3QgZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGFja19mb3JtYXQsIHZhX2xpc3QgYXJncyk7CitTUElORUxfQVBJX0VYVEVSTiBzcGluZWxfc3NpemVfdCBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKGNvbnN0IHVpbnQ4X3QgKmRhdGFfaW4sIHNwaW5lbF9zaXplX3QgZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhY2tfZm9ybWF0LCAuLi4pOworU1BJTkVMX0FQSV9FWFRFUk4gc3BpbmVsX3NzaXplX3Qgc3BpbmVsX2RhdGF0eXBlX3Z1bnBhY2soY29uc3QgdWludDhfdCAqZGF0YV9pbiwgc3BpbmVsX3NpemVfdCBkYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhY2tfZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworCitTUElORUxfQVBJX0VYVEVSTiBzcGluZWxfc3NpemVfdCBzcGluZWxfcGFja2VkX3VpbnRfZGVjb2RlKGNvbnN0IHVpbnQ4X3QgKmJ5dGVzLCBzcGluZWxfc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICp2YWx1ZSk7CitTUElORUxfQVBJX0VYVEVSTiBzcGluZWxfc3NpemVfdCBzcGluZWxfcGFja2VkX3VpbnRfZW5jb2RlKHVpbnQ4X3QgKmJ5dGVzLCBzcGluZWxfc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IHZhbHVlKTsKK1NQSU5FTF9BUElfRVhURVJOIHNwaW5lbF9zc2l6ZV90IHNwaW5lbF9wYWNrZWRfdWludF9zaXplKHVuc2lnbmVkIGludCB2YWx1ZSk7CisKK1NQSU5FTF9BUElfRVhURVJOIGNvbnN0IGNoYXIgKnNwaW5lbF9uZXh0X3BhY2tlZF9kYXRhdHlwZShjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCk7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1BJTkVMX0FQSV9FWFRFUk4gY29uc3QgY2hhciAqc3BpbmVsX3Byb3Bfa2V5X3RvX2NzdHIoc3BpbmVsX3Byb3Bfa2V5X3QgcHJvcF9rZXkpOworCitTUElORUxfQVBJX0VYVEVSTiBjb25zdCBjaGFyICpzcGluZWxfbmV0X3JvbGVfdG9fY3N0cih1aW50OF90IG5ldF9yb2xlKTsKKworU1BJTkVMX0FQSV9FWFRFUk4gY29uc3QgY2hhciAqc3BpbmVsX3N0YXR1c190b19jc3RyKHNwaW5lbF9zdGF0dXNfdCBzdGF0dXMpOworCitTUElORUxfQVBJX0VYVEVSTiBjb25zdCBjaGFyICpzcGluZWxfY2FwYWJpbGl0eV90b19jc3RyKHVuc2lnbmVkIGludCBjYXBhYmlsaXR5KTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogZGVmaW5lZChTUElORUxfSEVBREVSX0lOQ0xVREVEKSAqLwpkaWZmIC0tZ2l0IGEvc3JjL25jcC9zcGluZWxfcGxhdGZvcm0uaCBiL3NyYy9uY3Avc3BpbmVsX3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1N2NkOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3Avc3BpbmVsX3BsYXRmb3JtLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTUElORUxfUExBVEZPUk1fT1BFTlRIUkVBRF9IXworI2RlZmluZSBTUElORUxfUExBVEZPUk1fT1BFTlRIUkVBRF9IXworCisvKioKKyAqIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGhlYWRlciBmaWxlIHVzZWQgZm9yIHNwaW5lbCBvbgorICogT3BlblRocmVhZC4KKyAqCisgKiBUbyBtYWtlIHNwaW5lbCBjb2RlIG1vcmUgcG9ydGFibGUsIGFsbCBoZWFkZXIgZmlsZQorICogYCNpbmNsdWRlYHMgYXJlIGRlZmluZWQgaW4gYSBwbGF0Zm9ybSBzcGVjaWZpYyBoZWFkZXIKKyAqIGZpbGUgInNwaW5lbF9wbGF0Zm9ybS5oIiB3aGljaCBpcyB0aGVuIGluY2x1ZGVkIGZyb20KKyAqICJzcGluZWwuaCIuCisgKgorICogVGhpcyBmaWxlIHNob3VsZCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaGVhZGVyIGZpbGVzIChvcgorICogdGhlaXIgZXF1aXZhbGVudCBvbiB0aGUgcGxhdGZvcm0pOgorICoKKyAqICAgI2luY2x1ZGUgPHN0ZGFyZy5oPgorICogICAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICogICAjaW5jbHVkZSA8c3RkaW50Lmg+CisgKiAgICNpbmNsdWRlIDxzdGRpby5oPgorICogICAjaW5jbHVkZSA8c3RkbGliLmg+CisgKiAgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGJvb2wuaCIKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2VuZGlmIC8vIFNQSU5FTF9QTEFURk9STV9PUEVOVEhSRUFEX0hfCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NGU0YmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDg0IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKKyMgQWx3YXlzIHBhY2thZ2UgKGUuZy4gZm9yICdtYWtlIGRpc3QnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworRElTVF9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNjcmlwdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBBbHdheXMgYnVpbGQgKGUuZy4gZm9yICdtYWtlIGFsbCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9DTEkKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICB1bml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzY3JpcHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorZW5kaWYKKworIyBBbHdheXMgcHJldHR5IChlLmcuIGZvciAnbWFrZSBwcmV0dHknKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworUFJFVFRZX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9URVNUUworaWYgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKHdpbGRjYXJkICouZ2NkYSAqLmdjbm8pCisKK2lmIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0VfUkVQT1JUUworIyBUaGUgYnVuZGxlIHNob3VsZCBwb3NpdGl2ZWx5IGJlIHF1YWxpZmllZCB3aXRoIHRoZSBhYnNvbHV0ZSBidWlsZAorIyBwYXRoLiBPdGhlcndpc2UsIFZQQVRIIHdpbGwgZ2V0IGF1dG8tcHJlZml4ZWQgdG8gaXQgaWYgdGhlcmUgaXMKKyMgYWxyZWFkeSBzdWNoIGEgZGlyZWN0b3J5IGluIHRoZSBub24tY29sb2NhdGVkIHNvdXJjZSB0cmVlLgorCitPUEVOVEhSRUFEX0NPVkVSQUdFX0JVTkRMRSAgICAgICAgICAgICA9ICR7YWJzX2J1aWxkZGlyfS8ke1BBQ0tBR0V9JHtOTF9DT1ZFUkFHRV9CVU5ETEVfU1VGRklYfQorT1BFTlRIUkVBRF9DT1ZFUkFHRV9JTkZPICAgICAgICAgICAgICAgPSAke09QRU5USFJFQURfQ09WRVJBR0VfQlVORExFfS8ke1BBQ0tBR0V9JHtOTF9DT1ZFUkFHRV9JTkZPX1NVRkZJWH0KKworJChPUEVOVEhSRUFEX0NPVkVSQUdFX0JVTkRMRSk6CisJJChjYWxsIGNyZWF0ZS1kaXJlY3RvcnkpCisKKyQoT1BFTlRIUkVBRF9DT1ZFUkFHRV9JTkZPKTogY2hlY2sgfCAkKGRpciAkKE9QRU5USFJFQURfQ09WRVJBR0VfSU5GTykpCisJJChjYWxsIGdlbmVyYXRlLWNvdmVyYWdlLXJlcG9ydCwke3RvcF9idWlsZGRpcn0pCisKK2NvdmVyYWdlLWxvY2FsOiAkKE9QRU5USFJFQURfQ09WRVJBR0VfSU5GTykKKworY2xlYW4tbG9jYWw6IGNsZWFuLWxvY2FsLWNvdmVyYWdlCisKKy5QSE9OWTogY2xlYW4tbG9jYWwtY292ZXJhZ2UKK2NsZWFuLWxvY2FsLWNvdmVyYWdlOgorCS0kKEFNX1ZfYXQpcm0gLXJmICQoT1BFTlRIUkVBRF9DT1ZFUkFHRV9CVU5ETEUpCitlbmRpZiAjIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0VfUkVQT1JUUworZW5kaWYgIyBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCitlbmRpZiAjIE9QRU5USFJFQURfQlVJTERfVEVTVFMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90ZXN0cy9vdFRlc3RSdW5uZXIvQXBwLmNvbmZpZyBiL3Rlc3RzL290VGVzdFJ1bm5lci9BcHAuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZmE0MDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vdFRlc3RSdW5uZXIvQXBwLmNvbmZpZwpAQCAtMCwwICsxLDYgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiA/PgorPGNvbmZpZ3VyYXRpb24+CisgICAgPHN0YXJ0dXA+IAorICAgICAgICA8c3VwcG9ydGVkUnVudGltZSB2ZXJzaW9uPSJ2NC4wIiBza3U9Ii5ORVRGcmFtZXdvcmssVmVyc2lvbj12NC41LjIiIC8+CisgICAgPC9zdGFydHVwPgorPC9jb25maWd1cmF0aW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL290VGVzdFJ1bm5lci9Bc3NlbWJseUluZm8uY3MgYi90ZXN0cy9vdFRlc3RSdW5uZXIvQXNzZW1ibHlJbmZvLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZjJiN2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vdFRlc3RSdW5uZXIvQXNzZW1ibHlJbmZvLmNzCkBAIC0wLDAgKzEsNjQgQEAKK++7vy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisgdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247Cit1c2luZyBTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzOwordXNpbmcgU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzOworCisvLyBHZW5lcmFsIEluZm9ybWF0aW9uIGFib3V0IGFuIGFzc2VtYmx5IGlzIGNvbnRyb2xsZWQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIAorLy8gc2V0IG9mIGF0dHJpYnV0ZXMuIENoYW5nZSB0aGVzZSBhdHRyaWJ1dGUgdmFsdWVzIHRvIG1vZGlmeSB0aGUgaW5mb3JtYXRpb24KKy8vIGFzc29jaWF0ZWQgd2l0aCBhbiBhc3NlbWJseS4KK1thc3NlbWJseTogQXNzZW1ibHlUaXRsZSgib3RUZXN0UnVubmVyIildCitbYXNzZW1ibHk6IEFzc2VtYmx5RGVzY3JpcHRpb24oIiIpXQorW2Fzc2VtYmx5OiBBc3NlbWJseUNvbmZpZ3VyYXRpb24oIiIpXQorW2Fzc2VtYmx5OiBBc3NlbWJseUNvbXBhbnkoIiIpXQorW2Fzc2VtYmx5OiBBc3NlbWJseVByb2R1Y3QoIm90VGVzdFJ1bm5lciIpXQorW2Fzc2VtYmx5OiBBc3NlbWJseUNvcHlyaWdodCgiQ29weXJpZ2h0IMKpIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMgMjAxNiIpXQorW2Fzc2VtYmx5OiBBc3NlbWJseVRyYWRlbWFyaygiIildCitbYXNzZW1ibHk6IEFzc2VtYmx5Q3VsdHVyZSgiIildCisKKy8vIFNldHRpbmcgQ29tVmlzaWJsZSB0byBmYWxzZSBtYWtlcyB0aGUgdHlwZXMgaW4gdGhpcyBhc3NlbWJseSBub3QgdmlzaWJsZSAKKy8vIHRvIENPTSBjb21wb25lbnRzLiAgSWYgeW91IG5lZWQgdG8gYWNjZXNzIGEgdHlwZSBpbiB0aGlzIGFzc2VtYmx5IGZyb20gCisvLyBDT00sIHNldCB0aGUgQ29tVmlzaWJsZSBhdHRyaWJ1dGUgdG8gdHJ1ZSBvbiB0aGF0IHR5cGUuCitbYXNzZW1ibHk6IENvbVZpc2libGUoZmFsc2UpXQorCisvLyBUaGUgZm9sbG93aW5nIEdVSUQgaXMgZm9yIHRoZSBJRCBvZiB0aGUgdHlwZWxpYiBpZiB0aGlzIHByb2plY3QgaXMgZXhwb3NlZCB0byBDT00KK1thc3NlbWJseTogR3VpZCgiZDU1NzdlNTEtZmEzMS00ODAyLTg2NjktMWRiMzI4MDU5MzVlIildCisKKy8vIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIGFuIGFzc2VtYmx5IGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZm91ciB2YWx1ZXM6CisvLworLy8gICAgICBNYWpvciBWZXJzaW9uCisvLyAgICAgIE1pbm9yIFZlcnNpb24gCisvLyAgICAgIEJ1aWxkIE51bWJlcgorLy8gICAgICBSZXZpc2lvbgorLy8KKy8vIFlvdSBjYW4gc3BlY2lmeSBhbGwgdGhlIHZhbHVlcyBvciB5b3UgY2FuIGRlZmF1bHQgdGhlIEJ1aWxkIGFuZCBSZXZpc2lvbiBOdW1iZXJzIAorLy8gYnkgdXNpbmcgdGhlICcqJyBhcyBzaG93biBiZWxvdzoKKy8vIFthc3NlbWJseTogQXNzZW1ibHlWZXJzaW9uKCIxLjAuKiIpXQorW2Fzc2VtYmx5OiBBc3NlbWJseVZlcnNpb24oIjEuMC4wLjAiKV0KK1thc3NlbWJseTogQXNzZW1ibHlGaWxlVmVyc2lvbigiMS4wLjAuMCIpXQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3RUZXN0UnVubmVyL1Byb2dyYW0uY3MgYi90ZXN0cy9vdFRlc3RSdW5uZXIvUHJvZ3JhbS5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjU3ZmQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3RUZXN0UnVubmVyL1Byb2dyYW0uY3MKQEAgLTAsMCArMSwzOTIgQEAKK++7vy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwordXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLk5ldDsKK3VzaW5nIFN5c3RlbS5UZXh0OwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CisKK25hbWVzcGFjZSBvdFRlc3RSdW5uZXIKK3sKKyAgICBjbGFzcyBQcm9ncmFtCisgICAgeworICAgICAgICBzdHJ1Y3QgVGVzdFJlc3VsdHMKKyAgICAgICAgeworICAgICAgICAgICAgcHVibGljIGJvb2wgUGFzczsKKyAgICAgICAgICAgIHB1YmxpYyBMaXN0PHN0cmluZz4gT3V0cHV0OworICAgICAgICAgICAgcHVibGljIHN0cmluZyBFcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBzdHJpbmcgRXNjYXBlSnNvbihzdHJpbmcgZGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIEV4ZWN1dGVzIGFuIGV4ZSB3aXRoIHRoZSBnaXZlbiBhcmdzIGFuZCBjYXB0dXJlcyB0aGUgb3V0cHV0CisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHN0YXRpYyBhc3luYyBUYXNrPFRlc3RSZXN1bHRzPiBFeGVjdXRlQXN5bmMoc3RyaW5nIG5hbWUsIHN0cmluZyBhcmdzID0gbnVsbCwgaW50IHRpbWVvdXRNaWxsaXNlY29uZHMgPSAtMSwgaW50IGluc3RhbmNlSW5kZXggPSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgUHJvY2Vzc1N0YXJ0SW5mbyBzdGFydEluZm8gPSBuZXcgUHJvY2Vzc1N0YXJ0SW5mbygpOworICAgICAgICAgICAgc3RhcnRJbmZvLldpbmRvd1N0eWxlID0gUHJvY2Vzc1dpbmRvd1N0eWxlLkhpZGRlbjsKKyAgICAgICAgICAgIHN0YXJ0SW5mby5DcmVhdGVOb1dpbmRvdyA9IHRydWU7CisgICAgICAgICAgICBzdGFydEluZm8uVXNlU2hlbGxFeGVjdXRlID0gZmFsc2U7CisgICAgICAgICAgICBzdGFydEluZm8uUmVkaXJlY3RTdGFuZGFyZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHN0YXJ0SW5mby5SZWRpcmVjdFN0YW5kYXJkT3V0cHV0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHN0YXJ0SW5mby5GaWxlTmFtZSA9IG5hbWU7CisgICAgICAgICAgICBzdGFydEluZm8uQXJndW1lbnRzID0gYXJnczsKKworICAgICAgICAgICAgc3RhcnRJbmZvLkVudmlyb25tZW50VmFyaWFibGVzWyJOT0RFX1RZUEUiXSA9ICJ3aW4tc2ltIjsKKworICAgICAgICAgICAgaWYgKGluc3RhbmNlSW5kZXggIT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RhcnRJbmZvLkVudmlyb25tZW50VmFyaWFibGVzWyJJTlNUQU5DRSJdID0gaW5zdGFuY2VJbmRleC5Ub1N0cmluZygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUZXN0UmVzdWx0cyBSZXN1bHRzID0gbmV3IFRlc3RSZXN1bHRzKCk7CisgICAgICAgICAgICBSZXN1bHRzLlBhc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIFJlc3VsdHMuT3V0cHV0ID0gbmV3IExpc3Q8c3RyaW5nPigpOworICAgICAgICAgICAgUmVzdWx0cy5FcnJvciA9IG51bGw7CisgICAgICAgICAgICB2YXIgRXJyb3JzID0gbmV3IExpc3Q8c3RyaW5nPigpOworCisgICAgICAgICAgICBSZXN1bHRzLk91dHB1dC5BZGQoc3RyaW5nLkZvcm1hdCgiPiBzZXQgTk9ERV9UWVBFPXdpbi1zaW0iKSk7CisgICAgICAgICAgICBSZXN1bHRzLk91dHB1dC5BZGQoc3RyaW5nLkZvcm1hdCgiPiB7MH0gezF9IiwgbmFtZSwgYXJncykpOworICAgICAgICAgICAgUmVzdWx0cy5PdXRwdXQuQWRkKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisKKyAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgcHJvY2VzcworICAgICAgICAgICAgICAgIHVzaW5nIChQcm9jZXNzIHByb2Nlc3MgPSBQcm9jZXNzLlN0YXJ0KHN0YXJ0SW5mbykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLk91dHB1dERhdGFSZWNlaXZlZCArPQorICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdCBzZW5kZXIsIERhdGFSZWNlaXZlZEV2ZW50QXJncyBlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuRGF0YSAhPSBudWxsICYmIGUuRGF0YS5MZW5ndGggPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrIChSZXN1bHRzLk91dHB1dCkgeyBSZXN1bHRzLk91dHB1dC5BZGQoZS5EYXRhKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5FcnJvckRhdGFSZWNlaXZlZCArPQorICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdCBzZW5kZXIsIERhdGFSZWNlaXZlZEV2ZW50QXJncyBlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuRGF0YSAhPSBudWxsICYmIGUuRGF0YS5MZW5ndGggPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrIChSZXN1bHRzLk91dHB1dCkgeyBFcnJvcnMuQWRkKGUuRGF0YSk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5CZWdpbkVycm9yUmVhZExpbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5CZWdpbk91dHB1dFJlYWRMaW5lKCk7CisKKyNpZiBERUJVRworICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiU3RhcnRpbmcgezB9IHsxfSIsIG5hbWUsIGFyZ3MpOworI2VuZGlmCisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgcHJvY2VzcyB0byBjb21wbGV0ZQorICAgICAgICAgICAgICAgICAgICBhd2FpdCBUYXNrLlJ1bigKKyAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltZW91dE1pbGxpc2Vjb25kcyA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5XYWl0Rm9yRXhpdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFwcm9jZXNzLldhaXRGb3JFeGl0KHRpbWVvdXRNaWxsaXNlY29uZHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5LaWxsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdHMuT3V0cHV0LkFkZChzdHJpbmcuRm9ybWF0KCJLaWxsZWQgezB9IG9uIGV4ZWN1dGlvbiB0aW1lb3V0ISIsIG5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGEgYml0IGZvciBhbnkgb3V0cHV0IHRvIGNvbGxlY3QKKyAgICAgICAgICAgICAgICAgICAgYXdhaXQgVGFzay5EZWxheSgxMDAwKTsKKworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLkNhbmNlbE91dHB1dFJlYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5DYW5jZWxFcnJvclJlYWQoKTsKKworICAgICAgICAgICAgICAgICAgICBSZXN1bHRzLk91dHB1dC5BZGRSYW5nZShFcnJvcnMpOworICAgICAgICAgICAgICAgICAgICBSZXN1bHRzLlBhc3MgPSBFcnJvcnMuQ291bnQgPiAwICYmIEVycm9yc1tFcnJvcnMuQ291bnQgLSAxXSA9PSAiT0siOworCisgICAgICAgICAgICAgICAgICAgIGlmICghUmVzdWx0cy5QYXNzKSBSZXN1bHRzLkVycm9yID0gRXNjYXBlSnNvbihzdHJpbmcuSm9pbigiXFxyXFxuIiwgRXJyb3JzKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9jZXNzIGlzIGtpbGxlZAorICAgICAgICAgICAgICAgICAgICB0cnkgeyBwcm9jZXNzLktpbGwoKTsgfSBjYXRjaCAoRXhjZXB0aW9uKSB7IH0KKworI2lmIERFQlVHCisgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJDb21wbGV0ZWQgezB9IHsxfSIsIG5hbWUsIGFyZ3MpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJlc3VsdHMuT3V0cHV0LkFkZCgiRW5jb3VudGVyZWQgZXhjZXB0aW9uOiAiICsgZS5NZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBSZXN1bHRzLk91dHB1dC5BZGQoZS5TdGFja1RyYWNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdHM7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgYm9vbCBWZXJib3NlT3V0cHV0ID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBpbnQgUmV0aXJlc09uRmFpbHVyZSA9IDA7CisgICAgICAgIHN0YXRpYyBib29sIEFwcFZleW9yTW9kZSA9IGZhbHNlOworICAgICAgICBzdGF0aWMgc3RyaW5nIEFwcFZleW9yQXBpVXJsID0gbnVsbDsKKyAgICAgICAgc3RhdGljIHN0cmluZyBSZXN1bHRzRm9sZGVyID0gIlJlc3VsdHNfIiArIERhdGVUaW1lLk5vdy5Ub1N0cmluZygieXl5eU1NZGRfSEgubW0uc3MiKTsKKworICAgICAgICBzdGF0aWMgdm9pZCBVcGxvYWRBcHBWZXlvclRlc3RSZXN1bHQoc3RyaW5nIG5hbWUsIGJvb2wgcGFzc2VkLCBsb25nIGR1cmF0aW9uTVMsIHN0cmluZyBlcnJvciA9IG51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChBcHBWZXlvckFwaVVybCA9PSBudWxsKSByZXR1cm47CisKKyAgICAgICAgICAgIHN0cmluZyBqc29uRGF0YSA9IG51bGw7CisKKyAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gKEh0dHBXZWJSZXF1ZXN0KVdlYlJlcXVlc3QuQ3JlYXRlKFBhdGguQ29tYmluZShBcHBWZXlvckFwaVVybCwgImFwaS90ZXN0cyIpKTsKKworICAgICAgICAgICAgICAgIGpzb25EYXRhID0KKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICJ7eyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcInRlc3ROYW1lXCI6IFwiezB9XCIsICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcInRlc3RGcmFtZXdvcmtcIjogXCJNU1Rlc3RcIiwgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiZmlsZU5hbWVcIjogXCJ7MH0ucHlcIiwgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwib3V0Y29tZVwiOiBcInsxfVwiLCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJkdXJhdGlvbk1pbGxpc2Vjb25kc1wiOiBcInsyfVwiLCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJFcnJvck1lc3NhZ2VcIjogXCJ7M31cIiIgKworICAgICAgICAgICAgICAgICAgICAgICAgIn19IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgPyAiUGFzc2VkIiA6ICJGYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25NUywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID09IG51bGwgPyAiIiA6IGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBFbmNvZGluZy5VVEY4LkdldEJ5dGVzKGpzb25EYXRhKTsKKworICAgICAgICAgICAgICAgIHJlcXVlc3QuTWV0aG9kID0gIlBPU1QiOworICAgICAgICAgICAgICAgIHJlcXVlc3QuQ29udGVudFR5cGUgPSAiYXBwbGljYXRpb24vanNvbiI7CisgICAgICAgICAgICAgICAgcmVxdWVzdC5Db250ZW50TGVuZ3RoID0gZGF0YS5MZW5ndGg7CisKKyAgICAgICAgICAgICAgICB1c2luZyAodmFyIHN0cmVhbSA9IHJlcXVlc3QuR2V0UmVxdWVzdFN0cmVhbSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtLldyaXRlKGRhdGEsIDAsIGRhdGEuTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSAoSHR0cFdlYlJlc3BvbnNlKXJlcXVlc3QuR2V0UmVzcG9uc2UoKTsKKyAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2VTdHJpbmcgPSBuZXcgU3RyZWFtUmVhZGVyKHJlc3BvbnNlLkdldFJlc3BvbnNlU3RyZWFtKCkpLlJlYWRUb0VuZCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJFbmNvdW50ZXJlZCBleGNlcHRpb24gZm9yIGh0dHAgcG9zdDoiKTsKKyAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShlLk1lc3NhZ2UpOworICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKGUuU3RhY2tUcmFjZSk7CisKKyAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiSnNvbiBjb250ZW50OiIpOworICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKGpzb25EYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGVudW0gVGVzdFJlc3VsdAorICAgICAgICB7CisgICAgICAgICAgICBGYWlsLAorICAgICAgICAgICAgUGFzcywKKyAgICAgICAgICAgIFBhc3NXaXRoUmV0cnkKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIFJ1bnMgYSBweXRob24gdGVzdCBmaWxlIGFuZCByZXR1cm5zIHN1Y2Nlc3MvZmFpbHVyZQorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBzdGF0aWMgYXN5bmMgVGFzazxUZXN0UmVzdWx0PiBSdW5UZXN0KHN0cmluZyBmaWxlLCBpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyBweXRob25QYXRoID0gInB5dGhvbi5leGUiOworICAgICAgICAgICAgaWYgKEFwcFZleW9yTW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoRW52aXJvbm1lbnQuR2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiUGxhdGZvcm0iKS5Ub0xvd2VyKCkgPT0gIng2NCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBweXRob25QYXRoID0gQCJjOlxweXRob24zNS14NjRccHl0aG9uLmV4ZSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHB5dGhvblBhdGggPSBAImM6XHB5dGhvbjM1XHB5dGhvbi5leGUiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IHRyaWVzID0gMDsKKyAgICAgICAgICAgIFN0b3B3YXRjaCBUaW1lcjsKKyAgICAgICAgICAgIFRlc3RSZXN1bHRzIFJlc3VsdHM7CisKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGltZXIgPSBuZXcgU3RvcHdhdGNoKCk7CisgICAgICAgICAgICAgICAgVGltZXIuU3RhcnQoKTsKKworICAgICAgICAgICAgICAgIFJlc3VsdHMgPSBhd2FpdCBFeGVjdXRlQXN5bmMocHl0aG9uUGF0aCwgZmlsZSwgMzAgKiA2MCAqIDEwMDAsIGluZGV4KTsKKworICAgICAgICAgICAgICAgIFRpbWVyLlN0b3AoKTsKKworICAgICAgICAgICAgfSB3aGlsZSAoKyt0cmllcyA8IFJldGlyZXNPbkZhaWx1cmUgKyAxICYmIFJlc3VsdHMuUGFzcyA9PSBmYWxzZSk7CisKKyAgICAgICAgICAgIGlmIChWZXJib3NlT3V0cHV0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvY2sgKFJlc3VsdHNGb2xkZXIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgbGluZSBpbiBSZXN1bHRzLk91dHB1dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKGxpbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVXBsb2FkQXBwVmV5b3JUZXN0UmVzdWx0KFBhdGguR2V0RmlsZU5hbWVXaXRob3V0RXh0ZW5zaW9uKGZpbGUpLCBSZXN1bHRzLlBhc3MsIFRpbWVyLkVsYXBzZWRNaWxsaXNlY29uZHMsIFJlc3VsdHMuRXJyb3IpOworCisgICAgICAgICAgICAvLyBXcml0ZSB0aGUgb3V0cHV0IHRvIGEgZmlsZQorICAgICAgICAgICAgdmFyIGZpbGVQcmVmaXggPSBSZXN1bHRzLlBhc3MgPyAiUF8iIDogIkZfIjsKKyAgICAgICAgICAgIHZhciBvdXRwdXRGaWxlUGF0aCA9IFBhdGguQ29tYmluZShSZXN1bHRzRm9sZGVyLCBmaWxlUHJlZml4ICsgUGF0aC5HZXRGaWxlTmFtZVdpdGhvdXRFeHRlbnNpb24oZmlsZSkgKyAiLnR4dCIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBGaWxlLldyaXRlQWxsTGluZXMob3V0cHV0RmlsZVBhdGgsIFJlc3VsdHMuT3V0cHV0KTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IAorICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJFeGNlcHRpb24gd2hpbGUgdHJ5aW5nIHRvIHdyaXRlIHswfTpcbnsxfSEiLCBvdXRwdXRGaWxlUGF0aCwgZS5NZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdHMuUGFzcyA/CisgICAgICAgICAgICAgICAgKHRyaWVzID09IDEgPyBUZXN0UmVzdWx0LlBhc3MgOiBUZXN0UmVzdWx0LlBhc3NXaXRoUmV0cnkpIDoKKyAgICAgICAgICAgICAgICBUZXN0UmVzdWx0LkZhaWw7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBSdW5zIGFsbCB0aGUgdGVzdHMgYXMgaW5kaWNhdGVkIGJ5IGlucHV0IGFyZ3VtZW50cworICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhcmdzLkxlbmd0aCA8IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlVzYWdlOiBvdFRlc3RSdW5uZXIuZXhlIFtwYXRoXSBbc2VhcmNoIHBhdHRlcm5dIChwYXJhbGxlbDpuKSAodmVyYm9zZSkiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBmaWxlcyA9IERpcmVjdG9yeS5HZXRGaWxlcyhhcmdzWzBdLCBhcmdzWzFdKTsKKyAgICAgICAgICAgIGlmIChmaWxlcy5MZW5ndGggPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiTm8gdGVzdHMgZm91bmQgd2l0aCB0aGF0IHBhdGggJiBwYXR0ZXJuISIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIE51bWJlck9mVGVzdHNUb1J1bkluUGFyYWxsZWwgPSAxOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzLkxlbmd0aDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhcmdzW2ldLlN0YXJ0c1dpdGgoInBhcmFsbGVsOiIpKQorICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZlRlc3RzVG9SdW5JblBhcmFsbGVsID0gaW50LlBhcnNlKGFyZ3NbaV0uU3Vic3RyaW5nKDkpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmdzW2ldLlN0YXJ0c1dpdGgoInJldHJ5OiIpKQorICAgICAgICAgICAgICAgICAgICBSZXRpcmVzT25GYWlsdXJlID0gaW50LlBhcnNlKGFyZ3NbaV0uU3Vic3RyaW5nKDYpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmdzW2ldLlN0YXJ0c1dpdGgoInZlcmJvc2UiKSkKKyAgICAgICAgICAgICAgICAgICAgVmVyYm9zZU91dHB1dCA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJnc1tpXS5TdGFydHNXaXRoKCJhcHB2ZXlvciIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQXBwVmV5b3JNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgQXBwVmV5b3JBcGlVcmwgPSBFbnZpcm9ubWVudC5HZXRFbnZpcm9ubWVudFZhcmlhYmxlKCJBUFBWRVlPUl9BUElfVVJMIik7CisgICAgICAgICAgICAgICAgICAgIC8vQ29uc29sZS5Xcml0ZUxpbmUoIkFwcFZleW9yQXBpVXJsID0gezB9IiwgQXBwVmV5b3JBcGlVcmwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIEN1ck51bVRlc3RzUnVubmluZyA9IDA7CisgICAgICAgICAgICB2YXIgUmVhZHlUb1J1bkV2ZW50ID0gbmV3IE1hbnVhbFJlc2V0RXZlbnQodHJ1ZSk7CisKKyAgICAgICAgICAgIHZhciBUZXN0UGFzc0NvdW50ID0gMDsKKyAgICAgICAgICAgIFN0b3B3YXRjaCBUaW1lciA9IG5ldyBTdG9wd2F0Y2goKTsKKworICAgICAgICAgICAgRGlyZWN0b3J5LkNyZWF0ZURpcmVjdG9yeShSZXN1bHRzRm9sZGVyKTsKKyAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJUZXN0IHJlc3VsdHMgc2F2ZWQ6IC5cXHswfSIsIFJlc3VsdHNGb2xkZXIpOworCisgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiUnVubmluZyB7MH0gdGVzdHMsIHsxfSBhdCBhIHRpbWU6IiwgZmlsZXMuTGVuZ3RoLCBOdW1iZXJPZlRlc3RzVG9SdW5JblBhcmFsbGVsKTsKKyAgICAgICAgICAgIC8qZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5MZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShQYXRoLkdldEZpbGVOYW1lKGZpbGVzW2ldKSk7Ki8KKyAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIiKTsKKworICAgICAgICAgICAgVGltZXIuU3RhcnQoKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMuTGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGV2ZW50IHRvIGJlIHNldCwgaWYgbm90IGFscmVhZHkKKyAgICAgICAgICAgICAgICBSZWFkeVRvUnVuRXZlbnQuV2FpdE9uZSgpOworCisgICAgICAgICAgICAgICAgaWYgKGkgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgYSBiaXQgdG8gc3RhZ2dlciB0aGUgc3RhcnRzCisgICAgICAgICAgICAgICAgICAgIFRhc2suRGVsYXkoMTAwMCkuV2FpdCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxvY2sgKFJlc3VsdHNGb2xkZXIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKytDdXJOdW1UZXN0c1J1bm5pbmcgPT0gTnVtYmVyT2ZUZXN0c1RvUnVuSW5QYXJhbGxlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlYWR5VG9SdW5FdmVudC5SZXNldCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGk7CisgICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gZmlsZXNbaV07CisKKyAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgdGVzdCwgYnV0IGRvbid0IHdhaXQgZm9yIGl0CisgICAgICAgICAgICAgICAgVGFzay5SdW4oCisgICAgICAgICAgICAgICAgICAgIGFzeW5jICgpID0+CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBSdW5UZXN0KGZpbGVOYW1lLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NrIChSZXN1bHRzRm9sZGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBQcmV2Q29sb3IgPSBDb25zb2xlLkZvcmVncm91bmRDb2xvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IFRlc3RSZXN1bHQuRmFpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gVGVzdFJlc3VsdC5QYXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLkZvcmVncm91bmRDb2xvciA9IENvbnNvbGVDb2xvci5HcmVlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuRm9yZWdyb3VuZENvbG9yID0gQ29uc29sZUNvbG9yLlllbGxvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlKCJQQVNTIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RQYXNzQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Gb3JlZ3JvdW5kQ29sb3IgPSBDb25zb2xlQ29sb3IuUmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlKCJGQUlMIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuRm9yZWdyb3VuZENvbG9yID0gUHJldkNvbG9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCI6IHswfSIsIFBhdGguR2V0RmlsZU5hbWVXaXRob3V0RXh0ZW5zaW9uKGZpbGVOYW1lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VyTnVtVGVzdHNSdW5uaW5nLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZHlUb1J1bkV2ZW50LlNldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2FpdCBmb3IgYWxsIHRoZSB0ZXN0cyB0byBjb21wbGV0ZQorICAgICAgICAgICAgd2hpbGUgKEN1ck51bVRlc3RzUnVubmluZyAhPSAwKQorICAgICAgICAgICAgICAgIFJlYWR5VG9SdW5FdmVudC5XYWl0T25lKCk7CisKKyAgICAgICAgICAgIFRpbWVyLlN0b3AoKTsKKyAgICAgICAgICAgIFRpbWVTcGFuIHRzID0gVGltZXIuRWxhcHNlZDsKKyAgICAgICAgICAgIHN0cmluZyBlbGFwc2VkVGltZSA9IAorICAgICAgICAgICAgICAgIFN0cmluZy5Gb3JtYXQoInswOjAwfTp7MTowMH06ezI6MDB9LnszOjAwfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy5Ib3VycywgdHMuTWludXRlcywgdHMuU2Vjb25kcywgdHMuTWlsbGlzZWNvbmRzIC8gMTApOworCisgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiezB9IHRlc3RzIHJ1biBpbiB7MX0iLCBmaWxlcy5MZW5ndGgsIGVsYXBzZWRUaW1lKTsKKyAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ7MH0gcGFzc2VkIGFuZCB7MX0gZmFpbGVkIiwgVGVzdFBhc3NDb3VudCwgZmlsZXMuTGVuZ3RoIC0gVGVzdFBhc3NDb3VudCk7CisKKyAgICAgICAgICAgIGlmICghQXBwVmV5b3JNb2RlKQorICAgICAgICAgICAgICAgIEVudmlyb25tZW50LkV4aXRDb2RlID0gZmlsZXMuTGVuZ3RoID09IFRlc3RQYXNzQ291bnQgPyAwIDogMTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9zY3JpcHRzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmMzNzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNTYgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCisjIEFsd2F5cyBwYWNrYWdlIChlLmcuIGZvciAnbWFrZSBkaXN0JykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK0RJU1RfU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICB0aHJlYWQtY2VydCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKKyMgQWx3YXlzIGJ1aWxkIChlLmcuIGZvciAnbWFrZSBhbGwnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19QT1NJWAoraWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0xJCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgdGhyZWFkLWNlcnQgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKK2VuZGlmCisKKyMgQWx3YXlzIHByZXR0eSAoZS5nLiBmb3IgJ21ha2UgcHJldHR5JykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK1BSRVRUWV9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQorCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzAxX1JvdXRlckF0dGFjaC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDFfUm91dGVyQXR0YWNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmYWU2YjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzAxX1JvdXRlckF0dGFjaC5weQpAQCAtMCwwICsxLDE5MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZworaW1wb3J0IG1sZQoraW1wb3J0IG5ldHdvcmtfbGF5ZXIKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK1NOSUZGRVIgPSAzCisKKworY2xhc3MgQ2VydF81XzFfMDFfUm91dGVyQXR0YWNoKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYuc25pZmZlciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF90aHJlYWRfc25pZmZlcihTTklGRkVSKQorICAgICAgICBzZWxmLnNuaWZmZXIuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNuaWZmZXIuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLnNuaWZmZXIKKworICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHRpbWUuc2xlZXAoNCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBsZWFkZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoTEVBREVSKQorICAgICAgICByb3V0ZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSKQorCisgICAgICAgICMgMSAtIExlYWRlcgorICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRXaXRoSG9wTGltaXQoMjU1KQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvRGVzdGluYXRpb25BZGRyZXNzKCJmZjAyOjoxIikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU291cmNlQWRkcmVzcykKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGVhZGVyRGF0YSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuUm91dGU2NCkKKworICAgICAgICAjIDIgLSBSb3V0ZXIKKyAgICAgICAgbXNnID0gcm91dGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjIiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Nb2RlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNjYW5NYXNrKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorCisgICAgICAgIHNjYW5fbWFza190bHYgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5yb3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2Nhbl9tYXNrX3Rsdi5lbmRfZGV2aWNlKQorCisgICAgICAgICMgMyAtIExlYWRlcgorICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JPVVRFUl0pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNvdXJjZUFkZHJlc3MpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxlYWRlckRhdGEpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxpbmtMYXllckZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5NbGVGcmFtZUNvdW50ZXIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlJlc3BvbnNlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxpbmtNYXJnaW4pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNvbm5lY3Rpdml0eSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKworICAgICAgICAjIDQgLSBSb3V0ZXIKKyAgICAgICAgbXNnID0gcm91dGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9Ob2RlKHNlbGYubm9kZXNbTEVBREVSXSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuUmVzcG9uc2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxpbmtMYXllckZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5NbGVGcmFtZUNvdW50ZXIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLk1vZGUpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlRpbWVvdXQpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlRsdlJlcXVlc3QpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlRG9lc05vdENvbnRhaW5UbHYobWxlLkFkZHJlc3NSZWdpc3RyYXRpb24pCisKKyAgICAgICAgIyA1IC0gTGVhZGVyCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb05vZGUoc2VsZi5ub2Rlc1tST1VURVJdKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Tb3VyY2VBZGRyZXNzKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MZWFkZXJEYXRhKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5BZGRyZXNzMTYpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihtbGUuTmV0d29ya0RhdGEpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihtbGUuUm91dGU2NCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5BZGRyZXNzUmVnaXN0cmF0aW9uKQorCisgICAgICAgICMgNiAtIFJvdXRlcgorICAgICAgICBtc2cgPSByb3V0ZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXMiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VDb250YWluc1RsdihuZXR3b3JrX2xheWVyLk1hY0V4dGVuZGVkQWRkcmVzcykKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNUbHYobmV0d29ya19sYXllci5TdGF0dXMpCisKKyAgICAgICAgIyA3IC0gTGVhZGVyCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zVGx2KG5ldHdvcmtfbGF5ZXIuU3RhdHVzKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG5ldHdvcmtfbGF5ZXIuUm91dGVyTWFzaykKKworICAgICAgICBzdGF0dXNfdGx2ID0gbXNnLmdldF9jb2FwX21lc3NhZ2VfdGx2KG5ldHdvcmtfbGF5ZXIuU3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ldHdvcmtfbGF5ZXIuU3RhdHVzVmFsdWVzLlNVQ0NFU1MsIHN0YXR1c190bHYuc3RhdHVzKQorCisgICAgICAgICMgOCAtIFJvdXRlcgorICAgICAgICBtc2cgPSByb3V0ZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuTElOS19SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Tb3VyY2VBZGRyZXNzKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MZWFkZXJEYXRhKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlRsdlJlcXVlc3QpCisKKyAgICAgICAgdGx2X3JlcXVlc3QgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuVGx2UmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtbGUuVGx2VHlwZS5MSU5LX01BUkdJTiwgdGx2X3JlcXVlc3QudGx2cykKKworICAgICAgICAjIDkgLSBMZWFkZXIKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkxJTktfQUNDRVBUX0FORF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Tb3VyY2VBZGRyZXNzKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MZWFkZXJEYXRhKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5SZXNwb25zZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MaW5rTWFyZ2luKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLk1sZUZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5DaGFsbGVuZ2UpCisKKyAgICAgICAgIyAxMCAtIFJvdXRlcgorICAgICAgICBtc2cgPSByb3V0ZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRXaXRoSG9wTGltaXQoMjU1KQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvRGVzdGluYXRpb25BZGRyZXNzKCJmZjAyOjoxIikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU291cmNlQWRkcmVzcykKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGVhZGVyRGF0YSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuUm91dGU2NCkKKworICAgICAgICAjIDExIC0gTGVhZGVyLCBSb3V0ZXIxCisgICAgICAgIGZvciBhZGRyIGluIHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcnMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW1JPVVRFUl0ucGluZyhhZGRyKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wMl9DaGlsZEFkZHJlc3NUaW1lb3V0LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wMl9DaGlsZEFkZHJlc3NUaW1lb3V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc4NTU0NWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzAyX0NoaWxkQWRkcmVzc1RpbWVvdXQucHkKQEAgLTAsMCArMSwxNzMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb25maWcKK2ltcG9ydCBtbGUKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK0VEID0gMworU0VEID0gNAorU05JRkZFUiA9IDUKKworCitjbGFzcyBDZXJ0XzVfMV8wMl9DaGlsZEFkZHJlc3NUaW1lb3V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF90aW1lb3V0KDMpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbU0VEXS5zZXRfbW9kZSgnc24nKQorICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc2V0X3RpbWVvdXQoMykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYuc25pZmZlciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF90aHJlYWRfc25pZmZlcihTTklGRkVSKQorICAgICAgICBzZWxmLnNuaWZmZXIuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNuaWZmZXIuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLnNuaWZmZXIKKworICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHRpbWUuc2xlZXAoNCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGVkX2FkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VkX2FkZHJzID0gc2VsZi5ub2Rlc1tTRURdLmdldF9hZGRycygpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgZm9yIGFkZHIgaW4gZWRfYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLnN0b3AoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIGZvciBhZGRyIGluIHNlZF9hZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBsZWFkZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoTEVBREVSKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUikKKyAgICAgICAgZWRfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoRUQpCisgICAgICAgIHNlZF9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShTRUQpCisKKyAgICAgICAgIyAxIC0gQWxsCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgZWRfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorICAgICAgICBlZF9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorCisgICAgICAgIHNlZF9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisgICAgICAgIHNlZF9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorCisgICAgICAgICMgMyAtIExlYWRlcgorICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXEiKQorCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcSIpCisKKyAgICAgICAgIyA0IC0gUm91dGVyMQorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLmRvZXNfbm90X2NvbnRhaW5fY29hcF9tZXNzYWdlKCkKKworICAgICAgICAjIDYgLSBMZWFkZXIKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FxIikKKworICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXEiKQorCisgICAgICAgICMgNyAtIFJvdXRlcjEKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5kb2VzX25vdF9jb250YWluX2NvYXBfbWVzc2FnZSgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDNfUm91dGVyQWRkcmVzc1JlYWxsb2NhdGlvbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDNfUm91dGVyQWRkcmVzc1JlYWxsb2NhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMDY4YmJiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wM19Sb3V0ZXJBZGRyZXNzUmVhbGxvY2F0aW9uLnB5CkBAIC0wLDAgKzEsMjA2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbWxlCitpbXBvcnQgbmV0d29ya19sYXllcgoraW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCitTTklGRkVSID0gNAorCisKK2NsYXNzIENlcnRfNV8xXzAzX1JvdXRlckFkZHJlc3NSZWFsbG9jYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgNCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLnNuaWZmZXIgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfdGhyZWFkX3NuaWZmZXIoU05JRkZFUikKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0YXJ0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5zbmlmZmVyCisKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICB0aW1lLnNsZWVwKDQpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHJsb2MxNiA9IHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHIxNigpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbmV0d29ya19pZF90aW1lb3V0KDExMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0b3AoKQorICAgICAgICB0aW1lLnNsZWVwKDE0MCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHIxNigpLCBybG9jMTYpCisKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KExFQURFUikKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIxKQorICAgICAgICByb3V0ZXIyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjIpCisKKyAgICAgICAgIyAyIC0gQWxsCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorCisgICAgICAgICMgTGVhZGVyIG9yIFJvdXRlcjEgY2FuIGJlIHBhcmVudCBvZiBSb3V0ZXIyCisgICAgICAgIGlmIGxlYWRlcl9tZXNzYWdlcy5jb250YWluc19tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpOgorICAgICAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorCisgICAgICAgICAgICBtc2cgPSByb3V0ZXIyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisKKyAgICAgICAgZWxpZiByb3V0ZXIxX21lc3NhZ2VzLmNvbnRhaW5zX21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSk6CisgICAgICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorCisgICAgICAgICAgICBtc2cgPSByb3V0ZXIyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FzIikKKworICAgICAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKworICAgICAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisKKyAgICAgICAgIyA1IC0gUm91dGVyMQorICAgICAgICAjIFJvdXRlcjEgbWFrZSB0d28gYXR0ZW1wdHMgdG8gcmVjb25uZWN0IHRvIGl0cyBjdXJyZW50IFBhcnRpdGlvbi4KKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UoNCk6CisgICAgICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICAgICAgbXNnLmFzc2VydFNlbnRXaXRoSG9wTGltaXQoMjU1KQorICAgICAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MiIpCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Nb2RlKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQ2hhbGxlbmdlKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorCisgICAgICAgICAgICBzY2FuX21hc2tfdGx2ID0gbXNnLmdldF9tbGVfbWVzc2FnZV90bHYobWxlLlNjYW5NYXNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzY2FuX21hc2tfdGx2LnJvdXRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5lbmRfZGV2aWNlKQorCisgICAgICAgICMgNiAtIFJvdXRlcjEKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRXaXRoSG9wTGltaXQoMjU1KQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvRGVzdGluYXRpb25BZGRyZXNzKCJmZjAyOjoyIikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTW9kZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQ2hhbGxlbmdlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKworICAgICAgICBzY2FuX21hc2tfdGx2ID0gbXNnLmdldF9tbGVfbWVzc2FnZV90bHYobWxlLlNjYW5NYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNjYW5fbWFza190bHYucm91dGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNjYW5fbWFza190bHYuZW5kX2RldmljZSkKKworICAgICAgICAjIDcgLSBSb3V0ZXIxCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVRVUVTVCkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb05vZGUoc2VsZi5ub2Rlc1tST1VURVIyXSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuUmVzcG9uc2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxpbmtMYXllckZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5NbGVGcmFtZUNvdW50ZXIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLk1vZGUpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlRpbWVvdXQpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlRsdlJlcXVlc3QpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlRG9lc05vdENvbnRhaW5UbHYobWxlLkFkZHJlc3NSZWdpc3RyYXRpb24pCisKKyAgICAgICAgIyA4IC0gUm91dGVyMQorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FzIikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNUbHYobmV0d29ya19sYXllci5NYWNFeHRlbmRlZEFkZHJlc3MpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobmV0d29ya19sYXllci5SbG9jMTYpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zVGx2KG5ldHdvcmtfbGF5ZXIuU3RhdHVzKQorCisgICAgICAgICMgOCAtIFJvdXRlcjIKKyAgICAgICAgbXNnID0gcm91dGVyMl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDRfUm91dGVyQWRkcmVzc1JlYWxsb2NhdGlvbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDRfUm91dGVyQWRkcmVzc1JlYWxsb2NhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZTVmYWRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wNF9Sb3V0ZXJBZGRyZXNzUmVhbGxvY2F0aW9uLnB5CkBAIC0wLDAgKzEsMjE3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbWxlCitpbXBvcnQgbmV0d29ya19sYXllcgoraW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCitTTklGRkVSID0gNAorCisKK2NsYXNzIENlcnRfNV8xXzA0X1JvdXRlckFkZHJlc3NSZWFsbG9jYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgNCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLnNuaWZmZXIgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfdGhyZWFkX3NuaWZmZXIoU05JRkZFUikKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0YXJ0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5zbmlmZmVyCisKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICB0aW1lLnNsZWVwKDQpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHJsb2MxNiA9IHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHIxNigpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbmV0d29ya19pZF90aW1lb3V0KDIwMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0b3AoKQorICAgICAgICB0aW1lLnNsZWVwKDIyMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyMTYoKSwgcmxvYzE2KQorCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShMRUFERVIpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMSkKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIyKQorCisgICAgICAgICMgMiAtIEFsbAorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXMiKQorCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVRVUVTVCkKKworICAgICAgICAjIExlYWRlciBvciBSb3V0ZXIxIGNhbiBiZSBwYXJlbnQgb2YgUm91dGVyMgorICAgICAgICBpZiBsZWFkZXJfbWVzc2FnZXMuY29udGFpbnNfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKToKKyAgICAgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICAgICAgbXNnID0gcm91dGVyMl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXMiKQorCisgICAgICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjIuMDQiKQorCisgICAgICAgIGVsaWYgcm91dGVyMV9tZXNzYWdlcy5jb250YWluc19tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpOgorICAgICAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICAgICAgbXNnID0gcm91dGVyMl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXMiKQorCisgICAgICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisKKyAgICAgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjIuMDQiKQorCisgICAgICAgICMgNSAtIFJvdXRlcjEKKyAgICAgICAgIyBSb3V0ZXIxIG1ha2UgdHdvIGF0dGVtcHRzIHRvIHJlY29ubmVjdCB0byBpdHMgY3VycmVudCBQYXJ0aXRpb24uCisgICAgICAgIGZvciBfIGluIHJhbmdlKDQpOgorICAgICAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgICAgIG1zZy5hc3NlcnRTZW50V2l0aEhvcExpbWl0KDI1NSkKKyAgICAgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjIiKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTW9kZSkKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNjYW5NYXNrKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKworICAgICAgICAgICAgc2Nhbl9tYXNrX3RsdiA9IG1zZy5nZXRfbWxlX21lc3NhZ2VfdGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5yb3V0ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNjYW5fbWFza190bHYuZW5kX2RldmljZSkKKworICAgICAgICAjIDYgLSBSb3V0ZXIxCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRTZW50V2l0aEhvcExpbWl0KDI1NSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MiIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLk1vZGUpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisKKyAgICAgICAgc2Nhbl9tYXNrX3RsdiA9IG1zZy5nZXRfbWxlX21lc3NhZ2VfdGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzY2FuX21hc2tfdGx2LnJvdXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzY2FuX21hc2tfdGx2LmVuZF9kZXZpY2UpCisKKyAgICAgICAgIyA4IC0gUm91dGVyMgorICAgICAgICByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisKKyAgICAgICAgIyA5IC0gUm91dGVyMQorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb05vZGUoc2VsZi5ub2Rlc1tST1VURVIyXSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU291cmNlQWRkcmVzcykKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGVhZGVyRGF0YSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLk1sZUZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuUmVzcG9uc2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGlua01hcmdpbikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQ29ubmVjdGl2aXR5KQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9Ob2RlKHNlbGYubm9kZXNbUk9VVEVSMl0pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNvdXJjZUFkZHJlc3MpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxlYWRlckRhdGEpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkFkZHJlc3MxNikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5OZXR3b3JrRGF0YSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5Sb3V0ZTY0KQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLkFkZHJlc3NSZWdpc3RyYXRpb24pCisKKyAgICAgICAgIyAxMCAtIFJvdXRlcjEKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zVGx2KG5ldHdvcmtfbGF5ZXIuU3RhdHVzKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG5ldHdvcmtfbGF5ZXIuUm91dGVyTWFzaykKKworICAgICAgICBzdGF0dXNfdGx2ID0gbXNnLmdldF9jb2FwX21lc3NhZ2VfdGx2KG5ldHdvcmtfbGF5ZXIuU3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ldHdvcmtfbGF5ZXIuU3RhdHVzVmFsdWVzLlNVQ0NFU1MsIHN0YXR1c190bHYuc3RhdHVzKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA1X1JvdXRlckFkZHJlc3NUaW1lb3V0LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wNV9Sb3V0ZXJBZGRyZXNzVGltZW91dC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lM2M0ODczCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wNV9Sb3V0ZXJBZGRyZXNzVGltZW91dC5weQpAQCAtMCwwICsxLDE1NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZworaW1wb3J0IG1sZQoraW1wb3J0IG5ldHdvcmtfbGF5ZXIKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitTTklGRkVSID0gMworCisKK2NsYXNzIENlcnRfNV8xXzA1X1JvdXRlckFkZHJlc3NUaW1lb3V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYuX3NldFVwUm91dGVyMSgpCisKKyAgICAgICAgc2VsZi5zbmlmZmVyID0gY29uZmlnLmNyZWF0ZV9kZWZhdWx0X3RocmVhZF9zbmlmZmVyKFNOSUZGRVIpCisgICAgICAgIHNlbGYuc25pZmZlci5zdGFydCgpCisKKyAgICBkZWYgX3NldFVwUm91dGVyMShzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc25pZmZlci5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYuc25pZmZlcgorCisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgdGltZS5zbGVlcCg0KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgcmxvYzE2ID0gc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjE2KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnJlc2V0KCkKKyAgICAgICAgc2VsZi5fc2V0VXBSb3V0ZXIxKCkKKyAgICAgICAgdGltZS5zbGVlcCgyMDApCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjE2KCksIHJsb2MxNikKKworICAgICAgICBybG9jMTYgPSBzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyMTYoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnJlc2V0KCkKKyAgICAgICAgc2VsZi5fc2V0VXBSb3V0ZXIxKCkKKyAgICAgICAgdGltZS5zbGVlcCgzMDApCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjE2KCksIHJsb2MxNikKKworICAgICAgICBsZWFkZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoTEVBREVSKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjEpCisKKyAgICAgICAgIyAyIC0gQWxsCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgIyAzIC0gUm91dGVyMQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkxJTktfUkVRVUVTVCkKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXMiKQorCisgICAgICAgICMgNCAtIExlYWRlcgorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNUbHYobmV0d29ya19sYXllci5TdGF0dXMpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobmV0d29ya19sYXllci5Sb3V0ZXJNYXNrKQorCisgICAgICAgIHN0YXR1c190bHYgPSBtc2cuZ2V0X2NvYXBfbWVzc2FnZV90bHYobmV0d29ya19sYXllci5TdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV0d29ya19sYXllci5TdGF0dXNWYWx1ZXMuU1VDQ0VTUywgc3RhdHVzX3Rsdi5zdGF0dXMpCisKKyAgICAgICAgIyA2IC0gUm91dGVyMQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkxJTktfUkVRVUVTVCkKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXMiKQorCisgICAgICAgICMgNyAtIExlYWRlcgorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNUbHYobmV0d29ya19sYXllci5TdGF0dXMpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobmV0d29ya19sYXllci5Sb3V0ZXJNYXNrKQorCisgICAgICAgIHN0YXR1c190bHYgPSBtc2cuZ2V0X2NvYXBfbWVzc2FnZV90bHYobmV0d29ya19sYXllci5TdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV0d29ya19sYXllci5TdGF0dXNWYWx1ZXMuU1VDQ0VTUywgc3RhdHVzX3Rsdi5zdGF0dXMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDZfUmVtb3ZlUm91dGVySWQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA2X1JlbW92ZVJvdXRlcklkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1OTlhZjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA2X1JlbW92ZVJvdXRlcklkLnB5CkBAIC0wLDAgKzEsMTMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbWxlCitpbXBvcnQgbmV0d29ya19sYXllcgoraW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1NOSUZGRVIgPSAzCisKKworY2xhc3MgQ2VydF81XzFfMDZfUmVtb3ZlUm91dGVySWQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5zbmlmZmVyID0gY29uZmlnLmNyZWF0ZV9kZWZhdWx0X3RocmVhZF9zbmlmZmVyKFNOSUZGRVIpCisgICAgICAgIHNlbGYuc25pZmZlci5zdGFydCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc25pZmZlci5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYuc25pZmZlcgorCisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgdGltZS5zbGVlcCg0KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHJsb2MxNiA9IHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHIxNigpCisKKyAgICAgICAgZm9yIGFkZHIgaW4gc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcnMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVsZWFzZV9yb3V0ZXJfaWQocmxvYzE2ID4+IDEwKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgZm9yIGFkZHIgaW4gc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcnMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBsZWFkZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoTEVBREVSKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjEpCisKKyAgICAgICAgIyAxIC0gQWxsCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKworICAgICAgICAjIDMgLSBSb3V0ZXIxCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9Ob2RlKHNlbGYubm9kZXNbUk9VVEVSMV0pCisgICAgICAgICAgICAKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZShjb2RlPSIwLjAyIiwgdXJpX3BhdGg9Ii9hL2FzIikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNUbHYobmV0d29ya19sYXllci5NYWNFeHRlbmRlZEFkZHJlc3MpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zVGx2KG5ldHdvcmtfbGF5ZXIuU3RhdHVzKQorCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zVGx2KG5ldHdvcmtfbGF5ZXIuU3RhdHVzKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG5ldHdvcmtfbGF5ZXIuUm91dGVyTWFzaykKKworICAgICAgICBzdGF0dXNfdGx2ID0gbXNnLmdldF9jb2FwX21lc3NhZ2VfdGx2KG5ldHdvcmtfbGF5ZXIuU3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ldHdvcmtfbGF5ZXIuU3RhdHVzVmFsdWVzLlNVQ0NFU1MsIHN0YXR1c190bHYuc3RhdHVzKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA3X01heENoaWxkQ291bnQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA3X01heENoaWxkQ291bnQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTQ2MDk0YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDdfTWF4Q2hpbGRDb3VudC5weQpAQCAtMCwwICsxLDEwMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorU0VEMSA9IDcKKworY2xhc3MgQ2VydF81XzFfMDdfTWF4Q2hpbGRDb3VudCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMTMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21heF9jaGlsZHJlbigxMCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgzLCAxMyk6CisgICAgICAgICAgICBpZiBpIGluIHJhbmdlKDMsIDcpOgorICAgICAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X21vZGUoJ3MnKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW2ldLmdldF9hZGRyNjQoKSkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgdGltZS5zbGVlcCg0KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDMsIDEzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc3RhcnQoKQorICAgICAgICAgICAgdGltZS5zbGVlcCg3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW2ldLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGlwYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnIGFuZCAnZmY6ZmUwMCcgbm90IGluIGFkZHI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIsIHNpemU9MTIzMikpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgzLCAxMyk6CisgICAgICAgICAgICBpcGFkZHJzID0gc2VsZi5ub2Rlc1tpXS5nZXRfYWRkcnMoKQorICAgICAgICAgICAgZm9yIGFkZHIgaW4gaXBhZGRyczoKKyAgICAgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnIGFuZCAnZmY6ZmUwMCcgbm90IGluIGFkZHI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyLCBzaXplPTEwNikpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIAoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDhfUm91dGVyQXR0YWNoQ29ubmVjdGl2aXR5LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wOF9Sb3V0ZXJBdHRhY2hDb25uZWN0aXZpdHkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWMxNzU1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDhfUm91dGVyQXR0YWNoQ29ubmVjdGl2aXR5LnB5CkBAIC0wLDAgKzEsMTU2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbWxlCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK1JPVVRFUjMgPSA0CitST1VURVI0ID0gNQorU05JRkZFUiA9IDYKKworCitjbGFzcyBDZXJ0XzVfMV8wOF9Sb3V0ZXJBdHRhY2hDb25uZWN0aXZpdHkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgNik6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVI0XS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSNF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSNF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVI0XS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSNF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVI0XS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjRdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjRdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYuc25pZmZlciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF90aHJlYWRfc25pZmZlcihTTklGRkVSKQorICAgICAgICBzZWxmLnNuaWZmZXIuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNuaWZmZXIuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLnNuaWZmZXIKKworICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHRpbWUuc2xlZXAoNCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgyLCA2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc3RhcnQoKQorICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW2ldLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBsZWFkZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoTEVBREVSKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjEpCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMikKKyAgICAgICAgcm91dGVyM19tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIzKQorICAgICAgICByb3V0ZXI0X21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjQpCisKKyAgICAgICAgIyAxIC0gTGVhZGVyLCBSb3V0ZXIxLCBSb3V0ZXIyLCBSb3V0ZXIzCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKyAgICAgICAgcm91dGVyM19tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorCisgICAgICAgICMgMiAtIFJvdXRlcjQKKyAgICAgICAgbXNnID0gcm91dGVyNF9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRXaXRoSG9wTGltaXQoMjU1KQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvRGVzdGluYXRpb25BZGRyZXNzKCJmZjAyOjoyIikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTW9kZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQ2hhbGxlbmdlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKworICAgICAgICBzY2FuX21hc2tfdGx2ID0gbXNnLmdldF9tbGVfbWVzc2FnZV90bHYobWxlLlNjYW5NYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNjYW5fbWFza190bHYucm91dGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNjYW5fbWFza190bHYuZW5kX2RldmljZSkKKworICAgICAgICAjIDMgLSBSb3V0ZXIyLCBSb3V0ZXIzCisgICAgICAgIG1zZyA9IHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JPVVRFUjRdKQorCisgICAgICAgIG1zZyA9IHJvdXRlcjNfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JPVVRFUjRdKQorCisgICAgICAgICMgNCAtIFJvdXRlcjQKKyAgICAgICAgbXNnID0gcm91dGVyNF9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JPVVRFUjNdKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5SZXNwb25zZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLk1sZUZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTW9kZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGltZW91dCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGx2UmVxdWVzdCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VEb2VzTm90Q29udGFpblRsdihtbGUuQWRkcmVzc1JlZ2lzdHJhdGlvbikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wOV9SRUVEQXR0YWNoQ29ubmVjdGl2aXR5LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wOV9SRUVEQXR0YWNoQ29ubmVjdGl2aXR5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMxNzU4NDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA5X1JFRURBdHRhY2hDb25uZWN0aXZpdHkucHkKQEAgLTAsMCArMSwxODMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb25maWcKK2ltcG9ydCBtbGUKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitSRUVEMCA9IDMKK1JFRUQxID0gNAorUk9VVEVSMiA9IDUKK1NOSUZGRVIgPSA2CisKKworY2xhc3MgQ2VydF81XzFfMDlfUkVFREF0dGFjaENvbm5lY3Rpdml0eSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRDBdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMF0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQwXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDBdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDBdLnNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQoMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLnNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQoMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRDBdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLnNuaWZmZXIgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfdGhyZWFkX3NuaWZmZXIoU05JRkZFUikKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0YXJ0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5zbmlmZmVyCisKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICB0aW1lLnNsZWVwKDQpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JFRUQwXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRUQwXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRDFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBsZWFkZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoTEVBREVSKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjEpCisgICAgICAgIHJlZWQwX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJFRUQwKQorICAgICAgICByZWVkMV9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShSRUVEMSkKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIyKQorCisgICAgICAgICMgMSAtIExlYWRlciwgUm91dGVyMSwgUkVFRDEsIFJFRUQyCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgIyAyIC0gUm91dGVyMgorICAgICAgICBtc2cgPSByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjIiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Nb2RlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNjYW5NYXNrKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorCisgICAgICAgIHNjYW5fbWFza190bHYgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5yb3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2Nhbl9tYXNrX3Rsdi5lbmRfZGV2aWNlKQorCisgICAgICAgICMgNCAtIFJvdXRlcjIKKyAgICAgICAgbXNnID0gcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRXaXRoSG9wTGltaXQoMjU1KQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvRGVzdGluYXRpb25BZGRyZXNzKCJmZjAyOjoyIikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTW9kZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQ2hhbGxlbmdlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKworICAgICAgICBzY2FuX21hc2tfdGx2ID0gbXNnLmdldF9tbGVfbWVzc2FnZV90bHYobWxlLlNjYW5NYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNjYW5fbWFza190bHYucm91dGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNjYW5fbWFza190bHYuZW5kX2RldmljZSkKKworICAgICAgICAjIDUgLSBSRUVEMSwgUkVFRDIKKyAgICAgICAgbXNnID0gcmVlZDBfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorICAgICAgICBjb25uZWN0aXZpdHlfdGx2X3JlZWQwID0gbXNnLmdldF9tbGVfbWVzc2FnZV90bHYobWxlLkNvbm5lY3Rpdml0eSkKKworICAgICAgICBtc2cgPSByZWVkMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisgICAgICAgIGNvbm5lY3Rpdml0eV90bHZfcmVlZDEgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuQ29ubmVjdGl2aXR5KQorCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihjb25uZWN0aXZpdHlfdGx2X3JlZWQxLmxpbmtfcXVhbGl0eV8zLCBjb25uZWN0aXZpdHlfdGx2X3JlZWQwLmxpbmtfcXVhbGl0eV8zKQorCisgICAgICAgICMgNiAtIFJvdXRlcjIKKyAgICAgICAgbXNnID0gcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JFRUQxXSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuUmVzcG9uc2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxpbmtMYXllckZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5NbGVGcmFtZUNvdW50ZXIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLk1vZGUpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlRpbWVvdXQpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlRsdlJlcXVlc3QpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlRG9lc05vdENvbnRhaW5UbHYobWxlLkFkZHJlc3NSZWdpc3RyYXRpb24pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMTBfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzEwX1JvdXRlckF0dGFjaExpbmtRdWFsaXR5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwZDEzZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzEwX1JvdXRlckF0dGFjaExpbmtRdWFsaXR5LnB5CkBAIC0wLDAgKzEsMTcwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbWxlCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK1JPVVRFUjMgPSA0CitTTklGRkVSID0gNQorCisKK2NsYXNzIENlcnRfNV8xXzEwX1JvdXRlckF0dGFjaExpbmtRdWFsaXR5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCksIHJzc2k9LTg1KQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpLCByc3NpPS04NSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLnNuaWZmZXIgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfdGhyZWFkX3NuaWZmZXIoU05JRkZFUikKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0YXJ0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5zbmlmZmVyCisKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICB0aW1lLnNsZWVwKDQpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KExFQURFUikKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIxKQorICAgICAgICByb3V0ZXIyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjIpCisgICAgICAgIHJvdXRlcjNfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMykKKworICAgICAgICAjIDEgLSBMZWFkZXIsIFJvdXRlcjEsIFJvdXRlcjIKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FzIikKKworICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjIuMDQiKQorCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgbXNnID0gcm91dGVyMl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKworICAgICAgICAjIDMgLSBSb3V0ZXIzCisgICAgICAgIG1zZyA9IHJvdXRlcjNfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRTZW50V2l0aEhvcExpbWl0KDI1NSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MiIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLk1vZGUpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisKKyAgICAgICAgIyA0IC0gUm91dGVyMSwgUm91dGVyMgorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb05vZGUoc2VsZi5ub2Rlc1tST1VURVIzXSkKKworICAgICAgICBtc2cgPSByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb05vZGUoc2VsZi5ub2Rlc1tST1VURVIzXSkKKworICAgICAgICAjIDUgLSBSb3V0ZXIzCisgICAgICAgIG1zZyA9IHJvdXRlcjNfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVRVUVTVCkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb05vZGUoc2VsZi5ub2Rlc1tST1VURVIxXSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuUmVzcG9uc2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxpbmtMYXllckZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5NbGVGcmFtZUNvdW50ZXIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLk1vZGUpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlRpbWVvdXQpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlRsdlJlcXVlc3QpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlRG9lc05vdENvbnRhaW5UbHYobWxlLkFkZHJlc3NSZWdpc3RyYXRpb24pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMTFfUkVFREF0dGFjaExpbmtRdWFsaXR5LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8xMV9SRUVEQXR0YWNoTGlua1F1YWxpdHkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTViYjViZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMTFfUkVFREF0dGFjaExpbmtRdWFsaXR5LnB5CkBAIC0wLDAgKzEsMTY4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbWxlCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitSRUVEID0gMgorUk9VVEVSMiA9IDMKK1JPVVRFUjEgPSA0CitTTklGRkVSID0gNQorCisKK2NsYXNzIENlcnRfNV8xXzExX1JFRURBdHRhY2hMaW5rUXVhbGl0eSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKDApCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSwgcnNzaT0tODUpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCksIHJzc2k9LTg1KQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYuc25pZmZlciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF90aHJlYWRfc25pZmZlcihTTklGRkVSKQorICAgICAgICBzZWxmLnNuaWZmZXIuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNuaWZmZXIuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLnNuaWZmZXIKKworICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHRpbWUuc2xlZXAoNCkKKworICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRURdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBsZWFkZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoTEVBREVSKQorICAgICAgICByZWVkX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJFRUQpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMSkKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIyKQorCisgICAgICAgICMgMSAtIExlYWRlci4gUkVFRDEsIFJvdXRlcjIKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgcmVlZF9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKworICAgICAgICByZWVkX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorCisgICAgICAgIG1zZyA9IHJvdXRlcjJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXMiKQorCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisKKyAgICAgICAgcmVlZF9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorICAgICAgICByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgIyAzIC0gUm91dGVyMQorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjIiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Nb2RlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNjYW5NYXNrKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorCisgICAgICAgIHNjYW5fbWFza190bHYgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5yb3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2Nhbl9tYXNrX3Rsdi5lbmRfZGV2aWNlKQorCisgICAgICAgICMgNCAtIFJvdXRlcjIKKyAgICAgICAgbXNnID0gcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9Ob2RlKHNlbGYubm9kZXNbUk9VVEVSMV0pCisKKyAgICAgICAgIyA1IC0gUm91dGVyMQorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjIiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Nb2RlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNjYW5NYXNrKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorCisgICAgICAgIHNjYW5fbWFza190bHYgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5yb3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5lbmRfZGV2aWNlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzEyX05ld1JvdXRlck5laWdoYm9yU3luYy5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMTJfTmV3Um91dGVyTmVpZ2hib3JTeW5jLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNhNjc3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzEyX05ld1JvdXRlck5laWdoYm9yU3luYy5weQpAQCAtMCwwICsxLDE1NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZworaW1wb3J0IG1sZQoraW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCitTTklGRkVSID0gNAorCisKK2NsYXNzIENlcnRfNV8xXzEyX05ld1JvdXRlclN5bmModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgNCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYuc25pZmZlciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF90aHJlYWRfc25pZmZlcihTTklGRkVSKQorICAgICAgICBzZWxmLnNuaWZmZXIuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNuaWZmZXIuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLnNuaWZmZXIKKworICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB2ZXJpZnlfc3RlcF80KHNlbGYsIHJvdXRlcjFfbWVzc2FnZXMsIHJvdXRlcjJfbWVzc2FnZXMsIHJlcV9yZWNlaXZlciwgYWNjZXB0X3JlY2VpdmVyKToKKyAgICAgICAgaWYgcm91dGVyMl9tZXNzYWdlcy5jb250YWluc19tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuTElOS19SRVFVRVNUKSBhbmQgXAorICAgICAgICAgICAgKHJvdXRlcjFfbWVzc2FnZXMuY29udGFpbnNfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkxJTktfQUNDRVBUKSBvcgorICAgICAgICAgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMuY29udGFpbnNfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkxJTktfQUNDRVBUX0FORF9SRVFVRVNUKSk6CisKKyAgICAgICAgICAgIG1zZyA9IHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuTElOS19SRVFVRVNUKQorCisgICAgICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW3JlcV9yZWNlaXZlcl0pCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Tb3VyY2VBZGRyZXNzKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGVhZGVyRGF0YSkKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5UbHZSZXF1ZXN0KQorCisgICAgICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2Vfb2Zfb25lX29mX2NvbW1hbmRfdHlwZXMobWxlLkNvbW1hbmRUeXBlLkxJTktfQUNDRVBUX0FORF9SRVFVRVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sZS5Db21tYW5kVHlwZS5MSU5LX0FDQ0VQVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG1zZykKKworICAgICAgICAgICAgbXNnLmFzc2VydFNlbnRUb05vZGUoc2VsZi5ub2Rlc1thY2NlcHRfcmVjZWl2ZXJdKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU291cmNlQWRkcmVzcykKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxlYWRlckRhdGEpCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MaW5rTGF5ZXJGcmFtZUNvdW50ZXIpCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLk1sZUZyYW1lQ291bnRlcikKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MaW5rTWFyZ2luKQorCisgICAgICAgICAgICBpZiBtc2cubWxlLmNvbW1hbmQudHlwZSA9PSBtbGUuQ29tbWFuZFR5cGUuTElOS19BQ0NFUFRfQU5EX1JFUVVFU1Q6CisgICAgICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGx2UmVxdWVzdCkKKyAgICAgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgdGltZS5zbGVlcCg0KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShMRUFERVIpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMSkKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIyKQorCisgICAgICAgICMgMiAtIFJvdXRlcjEKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjEiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Tb3VyY2VBZGRyZXNzKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MZWFkZXJEYXRhKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Sb3V0ZTY0KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHRpbWUuc2xlZXAoMzUpCisKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KExFQURFUikKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIxKQorICAgICAgICByb3V0ZXIyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjIpCisKKyAgICAgICAgIyA0IC0gUm91dGVyMSwgUm91dGVyMgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi52ZXJpZnlfc3RlcF80KHJvdXRlcjFfbWVzc2FnZXMsIHJvdXRlcjJfbWVzc2FnZXMsIFJPVVRFUjEsIFJPVVRFUjIpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZlcmlmeV9zdGVwXzQocm91dGVyMl9tZXNzYWdlcywgcm91dGVyMV9tZXNzYWdlcywgUk9VVEVSMiwgUk9VVEVSMSkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzEzX1JvdXRlclJlc2V0LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8xM19Sb3V0ZXJSZXNldC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZjkwN2YxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8xM19Sb3V0ZXJSZXNldC5weQpAQCAtMCwwICsxLDE1OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZworaW1wb3J0IG1sZQoraW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorU05JRkZFUiA9IDMKKworCitjbGFzcyBDZXJ0XzVfMV8xM19Sb3V0ZXJSZXNldCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLl9zZXRVcFJvdXRlcigpCisKKyAgICAgICAgc2VsZi5zbmlmZmVyID0gY29uZmlnLmNyZWF0ZV9kZWZhdWx0X3RocmVhZF9zbmlmZmVyKFNOSUZGRVIpCisgICAgICAgIHNlbGYuc25pZmZlci5zdGFydCgpCisKKyAgICBkZWYgX3NldFVwUm91dGVyKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5zbmlmZmVyCisKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICB0aW1lLnNsZWVwKDQpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgcmxvYzE2ID0gc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyMTYoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZXNldCgpCisgICAgICAgIHNlbGYuX3NldFVwUm91dGVyKCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjE2KCksIHJsb2MxNikKKworICAgICAgICBsZWFkZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoTEVBREVSKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUikKKworICAgICAgICAjIDEgLSBBbGwKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FzIikKKworICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjIuMDQiKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuTElOS19SRVFVRVNUKQorICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZV9vZl9vbmVfb2ZfY29tbWFuZF90eXBlcyhtbGUuQ29tbWFuZFR5cGUuTElOS19BQ0NFUFRfQU5EX1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sZS5Db21tYW5kVHlwZS5MSU5LX0FDQ0VQVCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobXNnKQorCisgICAgICAgICMgMiAtIFJvdXRlcjEgLyBMZWFkZXIKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjEiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Tb3VyY2VBZGRyZXNzKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MZWFkZXJEYXRhKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Sb3V0ZTY0KQorCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjEiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Tb3VyY2VBZGRyZXNzKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MZWFkZXJEYXRhKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Sb3V0ZTY0KQorCisgICAgICAgICMgNCAtIFJvdXRlcjEKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5MSU5LX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjIiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlRsdlJlcXVlc3QpCisKKyAgICAgICAgdGx2X3JlcXVlc3QgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuVGx2UmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtbGUuVGx2VHlwZS5ST1VURTY0LCB0bHZfcmVxdWVzdC50bHZzKQorICAgICAgICBzZWxmLmFzc2VydEluKG1sZS5UbHZUeXBlLkFERFJFU1MxNiwgdGx2X3JlcXVlc3QudGx2cykKKworICAgICAgICAjIDUgLSBMZWFkZXIKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkxJTktfQUNDRVBUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JPVVRFUl0pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNvdXJjZUFkZHJlc3MpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxlYWRlckRhdGEpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlJlc3BvbnNlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MaW5rTGF5ZXJGcmFtZUNvdW50ZXIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihtbGUuTWxlRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5BZGRyZXNzMTYpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlJvdXRlNjQpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihtbGUuQ2hhbGxlbmdlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzAxX0JlY29tZUFjdGl2ZVJvdXRlci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDFfQmVjb21lQWN0aXZlUm91dGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczZjg5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzAxX0JlY29tZUFjdGl2ZVJvdXRlci5weQpAQCAtMCwwICsxLDgyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUkVFRCA9IDMKKworY2xhc3MgQ2VydF81XzJfMV9CZWNvbWVBY3RpdmVSb3V0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzAyX0xlYWRlclJlamVjdDFIb3AucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzAyX0xlYWRlclJlamVjdDFIb3AucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWIwNzc0ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDJfTGVhZGVyUmVqZWN0MUhvcC5weQpAQCAtMCwwICsxLDgwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitEVVQgPSAzMworCitjbGFzcyBDZXJ0XzVfMl8yX0xlYWRlclJlamVjdDFIb3AodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdID0gbm9kZS5Ob2RlKExFQURFUikKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQoMzIpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX2Rvd25ncmFkZV90aHJlc2hvbGQoMzMpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMiwzNCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tpXS5nZXRfYWRkcjY0KCkpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKDMzKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcm91dGVyX2Rvd25ncmFkZV90aHJlc2hvbGQoMzMpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMiwgMzMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zdGFydCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbaV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRFVUXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0RVVF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzAzX0xlYWRlclJlamVjdDJIb3BzLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMl8wM19MZWFkZXJSZWplY3QySG9wcy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YmVkOTczCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMl8wM19MZWFkZXJSZWplY3QySG9wcy5weQpAQCAtMCwwICsxLDkxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitEVVQgPSAzMworCitjbGFzcyBDZXJ0XzVfMl8zX0xlYWRlclJlamVjdDJIb3BzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXSA9IG5vZGUuTm9kZShMRUFERVIpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKDMyKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3JvdXRlcl9kb3duZ3JhZGVfdGhyZXNob2xkKDMzKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIsMzMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbaV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgzMykKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X3JvdXRlcl9kb3duZ3JhZGVfdGhyZXNob2xkKDMzKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0RVVF0gPSBub2RlLk5vZGUoRFVUKQorICAgICAgICBzZWxmLm5vZGVzW0RVVF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tEVVRdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tEVVRdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tEVVRdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tEVVRdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0RVVF0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgzMykKKyAgICAgICAgc2VsZi5ub2Rlc1tEVVRdLnNldF9yb3V0ZXJfZG93bmdyYWRlX3RocmVzaG9sZCgzMykKKyAgICAgICAgc2VsZi5ub2Rlc1tEVVRdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMiwgMzMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zdGFydCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbaV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRFVUXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0RVVF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzA0X1JFRURVcGdyYWRlLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMl8wNF9SRUVEVXBncmFkZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMmZjOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMl8wNF9SRUVEVXBncmFkZS5weQpAQCAtMCwwICsxLDk2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAxNgorUkVFRCA9IDE3CitFRCA9IDE4CisKK2NsYXNzIENlcnRfNV8yXzRfUkVFRFVwZ3JhZGUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMTkpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMiwxNyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tpXS5nZXRfYWRkcjY0KCkpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIsIDE3KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc3RhcnQoKQorICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW2ldLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzA1X0FkZHJlc3NRdWVyeS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDVfQWRkcmVzc1F1ZXJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2YmI0NzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzA1X0FkZHJlc3NRdWVyeS5weQpAQCAtMCwwICsxLDEzOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworRUQxID0gMQorQlIxID0gMgorTEVBREVSID0gMworUk9VVEVSMiA9IDQKK1JFRUQgPSA1CitFRDIgPSA2CitFRDMgPSA3CisKK2NsYXNzIENlcnRfNV8yXzVfQWRkcmVzc1F1ZXJ5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDgpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0JSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0JSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tCUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tCUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tCUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tCUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0JSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tCUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgwKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEM10uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEM10uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0JSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tCUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0JSMV0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mzo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tCUjFdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjQ6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbQlIxXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMl0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQzXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUkVFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0VEMl0ucGluZyhhZGRyKSkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzA2X1JvdXRlckRvd25ncmFkZS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDZfUm91dGVyRG93bmdyYWRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlYTM5YjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzA2X1JvdXRlckRvd25ncmFkZS5weQpAQCAtMCwwICsxLDczIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorCitjbGFzcyBDZXJ0XzVfMl8wNl9Sb3V0ZXJEb3duZ3JhZGUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDI2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKyAgICAgICAgICAgIGlmIGkgIT0gUk9VVEVSMToKKyAgICAgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQoMzIpCisgICAgICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcm91dGVyX2Rvd25ncmFkZV90aHJlc2hvbGQoMzIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgyLCAyNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnN0YXJ0KCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tpXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1syNV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1syNV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDdfUkVFRFN5bmNocm9uaXphdGlvbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDdfUkVFRFN5bmNocm9uaXphdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZWRhNzFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMl8wN19SRUVEU3luY2hyb25pemF0aW9uLnB5CkBAIC0wLDAgKzEsMTE0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUkVFRCA9IDMKK1JPVVRFUjIgPSA0CitST1VURVIzID0gNQorCitjbGFzcyBDZXJ0XzVfMl83X1JFRURTeW5jaHJvbml6YXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNik6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgwKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wMV9MaW5rTG9jYWwucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzAxX0xpbmtMb2NhbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YjI2YjNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wMV9MaW5rTG9jYWwucHkKQEAgLTAsMCArMSw4MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKKworY2xhc3MgQ2VydF81XzNfMV9MaW5rTG9jYWwodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSA9PSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIsIHNpemU9MjU2KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKCdmZjAyOjoxJywgc2l6ZT0yNTYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoJ2ZmMDI6OjEnKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoJ2ZmMDI6OjInLCBzaXplPTI1NikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYwMjo6MicpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wMl9SZWFsbUxvY2FsLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wMl9SZWFsbUxvY2FsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3ZDliOWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzAyX1JlYWxtTG9jYWwucHkKQEAgLTAsMCArMSwxMDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworU0VEMSA9IDQKKworY2xhc3MgQ2VydF81XzNfMl9SZWFsbUxvY2FsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9tb2RlKCdzbicpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfdGltZW91dCgzKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyLCBzaXplPTI1NikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYwMzo6MScsIG51bV9yZXNwb25zZXM9Miwgc2l6ZT0yNTYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoJ2ZmMDM6OjEnLCBudW1fcmVzcG9uc2VzPTIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYwMzo6MicsIG51bV9yZXNwb25zZXM9Miwgc2l6ZT0yNTYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoJ2ZmMDM6OjInLCBudW1fcmVzcG9uc2VzPTIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYzMzowMDQwOmZkZGU6YWQwMDpiZWVmOjA6MDoxJywgbnVtX3Jlc3BvbnNlcz0zLCBzaXplPTI1NikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYzMzowMDQwOmZkZGU6YWQwMDpiZWVmOjA6MDoxJywgbnVtX3Jlc3BvbnNlcz0zKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDNfQWRkcmVzc1F1ZXJ5LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wM19BZGRyZXNzUXVlcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTUyNDQ0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDNfQWRkcmVzc1F1ZXJ5LnB5CkBAIC0wLDAgKzEsMTUxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitCUiA9IDEKK0xFQURFUiA9IDIKK1JPVVRFUjIgPSAzCitST1VURVIzID0gNAorRUQyID0gNQorCitjbGFzcyBDZXJ0XzVfM18zX0FkZHJlc3NRdWVyeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tCUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0JSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0JSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbQlJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tCUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbQlJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zZXRfdGltZW91dCgzKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0JSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0JSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tCUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mzo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tCUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6NDo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tCUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMl0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tFRDJdLnBpbmcoYWRkcikpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRDJdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tCUl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0VEMl0ucGluZyhhZGRyKSkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tFRDJdLnBpbmcoYWRkcikpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnN0b3AoKQorICAgICAgICB0aW1lLnNsZWVwKDE0MCkKKworICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm5vZGVzW0VEMl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQyXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubm9kZXNbQlJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA0X0FkZHJlc3NNYXBDYWNoZS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDRfQWRkcmVzc01hcENhY2hlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQyMGNhZTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA0X0FkZHJlc3NNYXBDYWNoZS5weQpAQCAtMCwwICsxLDEzNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1NFRDEgPSAzCitFRDIgPSA0CitFRDMgPSA1CitFRDQgPSA2CitFRDUgPSA3CisKK2NsYXNzIENlcnRfNV8zXzRfQWRkcmVzc01hcENhY2hlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDgpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDRdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDVdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEM10uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VENF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDRdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VENF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VENF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDVdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQ1XS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDVdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDVdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQyXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEM10uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDNdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQ0XS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VENF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDVdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQ1XS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBmb3IgaSBpbiByYW5nZSg0LCA4KToKKyAgICAgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tpXS5nZXRfYWRkcnMoKQorICAgICAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbU0VEMV0ucGluZyhhZGRyKSkKKworICAgICAgICBmb3IgaSBpbiByYW5nZSg0LCA4KToKKyAgICAgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tpXS5nZXRfYWRkcnMoKQorICAgICAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbU0VEMV0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDVfUm91dGluZ0xpbmtRdWFsaXR5LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wNV9Sb3V0aW5nTGlua1F1YWxpdHkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTdlMmI3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDVfUm91dGluZ0xpbmtRdWFsaXR5LnB5CkBAIC0wLDAgKzEsMTM0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK1JPVVRFUjMgPSA0CisKK2NsYXNzIENlcnRfNV8zXzVfUm91dGluZ0xpbmtRdWFsaXR5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpLCByc3NpPS05NSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCksIHJzc2k9LTk1KQorCisgICAgICAgIHRpbWUuc2xlZXAoNzApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCksIHJzc2k9LTg1KQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSwgcnNzaT0tODUpCisKKyAgICAgICAgdGltZS5zbGVlcCg3MCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSwgcnNzaT0tMTAwKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSwgcnNzaT0tMTAwKQorCisgICAgICAgIHRpbWUuc2xlZXAoNzApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDZfUm91dGVySWRNYXNrLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wNl9Sb3V0ZXJJZE1hc2sucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmNmM2MzNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDZfUm91dGVySWRNYXNrLnB5CkBAIC0wLDAgKzEsOTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworCitjbGFzcyBDZXJ0XzVfM182X1JvdXRlcklkTWFzayh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYuX3NldFVwUm91dGVyMigpCisKKyAgICBkZWYgX3NldFVwUm91dGVyMihzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcFJvdXRlcjIoKQorCisgICAgICAgIHRpbWUuc2xlZXAoMzAwKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA2Yl9Sb3V0ZXJJZE1hc2sucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA2Yl9Sb3V0ZXJJZE1hc2sucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTZiOWNiZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDZiX1JvdXRlcklkTWFzay5weQpAQCAtMCwwICsxLDg3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKKworY2xhc3MgQ2VydF81XzNfNl9Sb3V0ZXJJZE1hc2sodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdG9wKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdG9wKCkKKworICAgICAgICB0aW1lLnNsZWVwKDMwMCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDdfRHVwbGljYXRlQWRkcmVzcy5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDdfRHVwbGljYXRlQWRkcmVzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNjU0YTQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wN19EdXBsaWNhdGVBZGRyZXNzLnB5CkBAIC0wLDAgKzEsMTI0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK0VEMSA9IDQKK0VEMiA9IDUKK0VEMyA9IDYKKworY2xhc3MgQ2VydF81XzNfN19EdXBsaWNhdGVBZGRyZXNzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDcpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEM10uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEM10uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDJdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEM10uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5hZGRfaXBhZGRyKCcyMDAxOjI6MDoxOjoxJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmFkZF9pcGFkZHIoJzIwMDE6MjowOjE6OjEnKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbRUQzXS5waW5nKCcyMDAxOjI6MDoxOjoxJykpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA4X0NoaWxkQWRkcmVzc1NldC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDhfQ2hpbGRBZGRyZXNzU2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmYjQxNjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA4X0NoaWxkQWRkcmVzc1NldC5weQpAQCAtMCwwICsxLDEwOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorRUQxID0gMgorRUQyID0gMworRUQzID0gNAorRUQ0ID0gNQorCitjbGFzcyBDZXJ0XzVfM184X0NoaWxkQWRkcmVzc1NldCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDRdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQ0XS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VENF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQ0XS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQ0XS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQyXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEM10uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDNdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQ0XS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VENF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMiw2KToKKyAgICAgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tpXS5nZXRfYWRkcnMoKQorICAgICAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wOV9BZGRyZXNzUXVlcnkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA5X0FkZHJlc3NRdWVyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NGRlZjRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wOV9BZGRyZXNzUXVlcnkucHkKQEAgLTAsMCArMSwxNDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworUk9VVEVSMyA9IDQKK1NFRDEgPSA1CisKK2NsYXNzIENlcnRfNV8zXzA5X0FkZHJlc3NRdWVyeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X21vZGUoJ3NuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF90aW1lb3V0KDMpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JywgJ3Bkcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjI6Oi82NCcsICdwZHJvJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICAjIHdhaXQgZm9yIHNlZCBnb3QgcmVwbGllZAorICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tTRUQxXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tST1VURVIxXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbU0VEMV0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnN0b3AoKQorICAgICAgICB0aW1lLnNsZWVwKDMwMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ub2Rlc1tTRUQxXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubm9kZXNbUk9VVEVSMV0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMTBfQWRkcmVzc1F1ZXJ5LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18xMF9BZGRyZXNzUXVlcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2Q0OGZmZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMTBfQWRkcmVzc1F1ZXJ5LnB5CkBAIC0wLDAgKzEsMTQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitCUiA9IDIKK1JPVVRFUjIgPSAzCitST1VURVIzID0gNAorU0VEMiA9IDUKKworY2xhc3MgQ2VydF81XzNfMTBfQWRkcmVzc1F1ZXJ5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0JSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbQlJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbQlJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tCUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0JSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tCUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zZXRfbW9kZSgnc24nKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uc2V0X3RpbWVvdXQoMykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQlJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQlJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0JSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDozOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW0JSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDo0OjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW0JSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDJdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbU0VEMl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0JSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbU0VEMl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnN0b3AoKQorICAgICAgICB0aW1lLnNsZWVwKDMwMCkKKyAgICAgICAgCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm5vZGVzW1NFRDJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zdG9wKCkKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ub2Rlc1tCUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDFfTGVhZGVyUmVzZXQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzAxX0xlYWRlclJlc2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY0MTk0NzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzAxX0xlYWRlclJlc2V0LnB5CkBAIC0wLDAgKzEsODQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKKworY2xhc3MgQ2VydF81XzVfMV9MZWFkZXJSZXNldCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5fc2V0VXBMZWFkZXIoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiBfc2V0VXBMZWFkZXIoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHJsb2MxNiA9IHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjE2KCkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVzZXQoKTsKKyAgICAgICAgc2VsZi5fc2V0VXBMZWFkZXIoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyMTYoKSwgcmxvYzE2KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNV8wMl9MZWFkZXJSZWJvb3QucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzAyX0xlYWRlclJlYm9vdC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jN2FjM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNV8wMl9MZWFkZXJSZWJvb3QucHkKQEAgLTAsMCArMSw5OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorRUQgPSAzCisKK2NsYXNzIENlcnRfNV81XzJfTGVhZGVyUmVib290KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDQpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLl9zZXRVcExlYWRlcigpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgX3NldFVwTGVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkgICAgICAgIAorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnJlc2V0KCkKKyAgICAgICAgc2VsZi5fc2V0VXBMZWFkZXIoKQorICAgICAgICB0aW1lLnNsZWVwKDE0MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tST1VURVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzAzX1NwbGl0TWVyZ2VDaGlsZHJlbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDNfU3BsaXRNZXJnZUNoaWxkcmVuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFiNjFhYmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzAzX1NwbGl0TWVyZ2VDaGlsZHJlbi5weQpAQCAtMCwwICsxLDE0MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCitFRDEgPSA0CitFRDIgPSA1CitFRDMgPSA2CisKK2NsYXNzIENlcnRfNV81XzNfU3BsaXRNZXJnZUNoaWxkcmVuKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDcpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLl9zZXRVcExlYWRlcigpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEM10uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIF9zZXRVcExlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMl0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQzXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcExlYWRlcigpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHRpbWUuc2xlZXAoMTQwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHRpbWUuc2xlZXAoMzApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW1JPVVRFUjJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzA0X1NwbGl0TWVyZ2VSb3V0ZXJzLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNV8wNF9TcGxpdE1lcmdlUm91dGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OTZkNTQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNV8wNF9TcGxpdE1lcmdlUm91dGVycy5weQpAQCAtMCwwICsxLDEyNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCitST1VURVIzID0gNAorUk9VVEVSNCA9IDUKKworY2xhc3MgQ2VydF81XzVfNF9TcGxpdE1lcmdlUm91dGVycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5fc2V0VXBMZWFkZXIoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjRdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVI0XS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjRdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVI0XS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjRdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjRdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIF9zZXRVcExlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkgICAgICAgIAorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVI0XS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjRdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcExlYWRlcigpCisgICAgICAgIHRpbWUuc2xlZXAoMTUwKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVI0XS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbUk9VVEVSM10ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDVfU3BsaXRNZXJnZVJFRUQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzA1X1NwbGl0TWVyZ2VSRUVELnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0NTZkOWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzA1X1NwbGl0TWVyZ2VSRUVELnB5CkBAIC0wLDAgKzEsMTEzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK1JPVVRFUjMgPSA0CitST1VURVIxNSA9IDE2CitSRUVEMSA9IDE3CisKK2NsYXNzIENlcnRfNV81XzVfU3BsaXRNZXJnZVJFRUQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMTgpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBmb3IgaSBpbiByYW5nZShST1VURVIyLCBST1VURVIxNSsxKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbaV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpICAgICAgICAgICAgCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoUk9VVEVSMiwgUk9VVEVSMTUrMSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKworICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoUk9VVEVSMiwgUk9VVEVSMTUrMSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnN0YXJ0KCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tpXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoMTQwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRUQxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW1JPVVRFUjFdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzA3X1NwbGl0TWVyZ2VUaHJlZVdheS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDdfU3BsaXRNZXJnZVRocmVlV2F5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlZTFlOGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzA3X1NwbGl0TWVyZ2VUaHJlZVdheS5weQpAQCAtMCwwICsxLDEyMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSMSA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworUk9VVEVSMyA9IDQKKworY2xhc3MgQ2VydF81XzVfN19TcGxpdE1lcmdlVGhyZWVXYXkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5fc2V0VXBMZWFkZXIxKCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiBfc2V0VXBMZWFkZXIxKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVIxXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5yZXNldCgpCisgICAgICAgIHNlbGYuX3NldFVwTGVhZGVyMSgpCisgICAgICAgIHRpbWUuc2xlZXAoMTQwKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDMwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tMRUFERVIxXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbUk9VVEVSMV0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW1JPVVRFUjFdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tST1VURVIxXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNV8wOF9TcGxpdFJvdXRlcnNMb3N0TGVhZGVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNV8wOF9TcGxpdFJvdXRlcnNMb3N0TGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBlODQwMGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzA4X1NwbGl0Um91dGVyc0xvc3RMZWFkZXIucHkKQEAgLTAsMCArMSwxMjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUjEgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK1JPVVRFUjMgPSA0CitFRDEgPSA1CisKK2NsYXNzIENlcnRfNV81XzhfU3BsaXRSb3V0ZXJzTG9zdExlYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5fc2V0VXBSb3V0ZXIzKCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiBfc2V0VXBSb3V0ZXIzKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVIxXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSMV0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnJlc2V0KCkKKyAgICAgICAgc2VsZi5fc2V0VXBSb3V0ZXIzKCkKKyAgICAgICAgdGltZS5zbGVlcCgxNDApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zdGFydCgpICAgICAgICAKKyAgICAgICAgdGltZS5zbGVlcCg2MCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSMV0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDFfTmV0d29ya0RhdGFSZWdpc3RlckJlZm9yZUF0dGFjaExlYWRlci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDFfTmV0d29ya0RhdGFSZWdpc3RlckJlZm9yZUF0dGFjaExlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTZlNDdlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wMV9OZXR3b3JrRGF0YVJlZ2lzdGVyQmVmb3JlQXR0YWNoTGVhZGVyLnB5CkBAIC0wLDAgKzEsMTExIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitFRDEgPSAzCitTRUQxID0gNAorCitjbGFzcyBDZXJ0XzVfNl8xX05ldHdvcmtEYXRhTGVhZGVyQXNCcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfbW9kZSgncycpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjI6Oi82NCcsICdwYXJvJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Mic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wMl9OZXR3b3JrRGF0YVJlZ2lzdGVyQmVmb3JlQXR0YWNoUm91dGVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wMl9OZXR3b3JrRGF0YVJlZ2lzdGVyQmVmb3JlQXR0YWNoUm91dGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwZGQ5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzAyX05ldHdvcmtEYXRhUmVnaXN0ZXJCZWZvcmVBdHRhY2hSb3V0ZXIucHkKQEAgLTAsMCArMSwxMTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK0VEMSA9IDMKK1NFRDEgPSA0CisKK2NsYXNzIENlcnRfNV82XzJfTmV0d29ya0RhdGFSb3V0ZXJBc0JyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mjo6LzY0JywgJ3Bhcm8nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzAzX05ldHdvcmtEYXRhUmVnaXN0ZXJBZnRlckF0dGFjaExlYWRlci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDNfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoTGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJiNmIwYTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzAzX05ldHdvcmtEYXRhUmVnaXN0ZXJBZnRlckF0dGFjaExlYWRlci5weQpAQCAtMCwwICsxLDExMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorRUQxID0gMworU0VEMSA9IDQKKworY2xhc3MgQ2VydF81XzZfM19OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hMZWFkZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X21vZGUoJ3MnKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfdGltZW91dCgzKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoyOjovNjQnLCAncGFybycpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKworICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Mic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wNF9OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hSb3V0ZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzA0X05ldHdvcmtEYXRhUmVnaXN0ZXJBZnRlckF0dGFjaFJvdXRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMTcxMmQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wNF9OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hSb3V0ZXIucHkKQEAgLTAsMCArMSwxMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK0VEMSA9IDMKK1NFRDEgPSA0CisKK2NsYXNzIENlcnRfNV82XzRfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoUm91dGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mjo6LzY0JywgJ3Bhcm8nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Mic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDVfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoUm91dGVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wNV9OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hSb3V0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmNjZDhiMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDVfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoUm91dGVyLnB5CkBAIC0wLDAgKzEsMTM0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitFRDEgPSAzCitTRUQxID0gNAorCitjbGFzcyBDZXJ0XzVfNl81X05ldHdvcmtEYXRhUmVnaXN0ZXJBZnRlckF0dGFjaFJvdXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfbW9kZSgncycpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjI6Oi82NCcsICdwYXJvJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDozXSA9PSAnMjAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjNdID09ICcyMDAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mzo6LzY0JywgJ3BhY3MnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjMnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDozXSA9PSAnMjAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjMnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDozXSA9PSAnMjAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzA2X05ldHdvcmtEYXRhRXhwaXJhdGlvbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDZfTmV0d29ya0RhdGFFeHBpcmF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhhY2JhOTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzA2X05ldHdvcmtEYXRhRXhwaXJhdGlvbi5weQpAQCAtMCwwICsxLDE1NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorRUQxID0gMworU0VEMSA9IDQKKworY2xhc3MgQ2VydF81XzZfNl9OZXR3b3JrRGF0YUV4cGlyYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X21vZGUoJ3MnKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfdGltZW91dCgzKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoyOjovNjQnLCAncGFybycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKworICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6M10gPT0gJzIwMCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDozXSA9PSAnMjAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjM6Oi82NCcsICdwYWNzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDozJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6M10gPT0gJzIwMCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDozJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6M10gPT0gJzIwMCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZW1vdmVfcHJlZml4KCcyMDAxOjI6MDozOjovNjQnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSgnMjAwMToyOjA6MycgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjNdID09ICcyMDAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjMnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDozXSA9PSAnMjAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0b3AoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wN19OZXR3b3JrRGF0YVJlcXVlc3RSRUVELnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wN19OZXR3b3JrRGF0YVJlcXVlc3RSRUVELnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIzNDA0YmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzA3X05ldHdvcmtEYXRhUmVxdWVzdFJFRUQucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK1JFRUQgPSAzCisKK2NsYXNzIENlcnRfNV82XzdfTmV0d29ya0RhdGFSZXF1ZXN0UkVFRCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgwKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5yZW1vdmVfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnJlbW92ZV93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mzo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgICAgIHRpbWUuc2xlZXAoMikKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUkVFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MycgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Myc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wOF9Db250ZXh0TWFuYWdlbWVudC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDhfQ29udGV4dE1hbmFnZW1lbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2VmZjFmMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDhfQ29udGV4dE1hbmFnZW1lbnQucHkKQEAgLTAsMCArMSwxMjYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK0VEID0gMworCitjbGFzcyBDZXJ0XzVfNl84X0NvbnRleHRNYW5hZ2VtZW50KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDQpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9jb250ZXh0X3JldXNlX2RlbGF5KDEwKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisgICAgICAgIHRpbWUuc2xlZXAoMikKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6M10gPT0gJzIwMCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbRURdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlbW92ZV9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6M10gPT0gJzIwMCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbRURdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjI6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjNdID09ICcyMDAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0VEXS5waW5nKGFkZHIpKQorCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjM6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjMnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDozXSA9PSAnMjAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tFRF0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDlfTmV0d29ya0RhdGFGb3J3YXJkaW5nLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wOV9OZXR3b3JrRGF0YUZvcndhcmRpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODczNmNiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDlfTmV0d29ya0RhdGFGb3J3YXJkaW5nLnB5CkBAIC0wLDAgKzEsMTMzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK0VEID0gNAorU0VEID0gNQorCitjbGFzcyBDZXJ0XzVfNl85X05ldHdvcmtEYXRhRm9yd2FyZGluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JywgJ3Bhcm9zJywgJ21lZCcpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfcm91dGUoJzIwMDE6MjowOjI6Oi82NCcsICdtZWQnKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnLCAnbG93JykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfcm91dGUoJzIwMDE6MjowOjI6Oi82NCcsICdoaWdoJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubm9kZXNbU0VEXS5waW5nKCcyMDAxOjI6MDoyOjoxJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm5vZGVzW1NFRF0ucGluZygnMjAwNzo6MScpKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0ucmVtb3ZlX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnLCAnaGlnaCcpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm5vZGVzW1NFRF0ucGluZygnMjAwNzo6MScpKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0ucmVtb3ZlX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnLCAnbWVkJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubm9kZXNbU0VEXS5waW5nKCcyMDA3OjoxJykpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV84XzAxX0tleVN5bmNocm9uaXphdGlvbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzhfMDFfS2V5U3luY2hyb25pemF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1ODM0ODAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV84XzAxX0tleVN5bmNocm9uaXphdGlvbi5weQpAQCAtMCwwICsxLDg0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitFRCA9IDIKKworY2xhc3MgQ2VydF81XzhfMV9LZXlTeW5jaHJvbml6YXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2tleV9zd2l0Y2hfZ3VhcmR0aW1lKDApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9rZXlfc3dpdGNoX2d1YXJkdGltZSgwKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiAnZmY6ZmUwMCcgbm90IGluIGFkZHI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbRURdLnBpbmcoYWRkcikpCisKKyAgICAgICAga2V5X3NlcXVlbmNlX2NvdW50ZXIgPSBzZWxmLm5vZGVzW0VEXS5nZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoa2V5X3NlcXVlbmNlX2NvdW50ZXIgKyAxMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmICdmZjpmZTAwJyBub3QgaW4gYWRkcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubm9kZXNbRURdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV84XzAyX0tleUluY3JlbWVudC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzhfMDJfS2V5SW5jcmVtZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiNDI4NWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV84XzAyX0tleUluY3JlbWVudC5weQpAQCAtMCwwICsxLDgyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCisKK2NsYXNzIENlcnRfNV84XzJfS2V5SW5jcmVtZW50KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2tleV9zd2l0Y2hfZ3VhcmR0aW1lKDApCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X2tleV9zd2l0Y2hfZ3VhcmR0aW1lKDApCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAicm91dGVyIikKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBrZXlfc2VxdWVuY2VfY291bnRlciA9IHNlbGYubm9kZXNbTEVBREVSXS5nZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2tleV9zZXF1ZW5jZV9jb3VudGVyKGtleV9zZXF1ZW5jZV9jb3VudGVyICsgMSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzhfMDNfS2V5SW5jcmVtZW50Um9sbE92ZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV84XzAzX0tleUluY3JlbWVudFJvbGxPdmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlmOWE5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV84XzAzX0tleUluY3JlbWVudFJvbGxPdmVyLnB5CkBAIC0wLDAgKzEsODQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKKworY2xhc3MgQ2VydF81XzhfM19LZXlJbmNyZW1lbnRSb2xsT3Zlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2tleV9zd2l0Y2hfZ3VhcmR0aW1lKDApCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoMTI3KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfa2V5X3N3aXRjaF9ndWFyZHRpbWUoMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAga2V5X3NlcXVlbmNlX2NvdW50ZXIgPSBzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2tleV9zZXF1ZW5jZV9jb3VudGVyKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9rZXlfc2VxdWVuY2VfY291bnRlcihrZXlfc2VxdWVuY2VfY291bnRlciArIDEpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzAxX1JvdXRlckF0dGFjaC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDFfUm91dGVyQXR0YWNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRiZTMxM2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzAxX1JvdXRlckF0dGFjaC5weQpAQCAtMCwwICsxLDY5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitFRCA9IDIKKworY2xhc3MgQ2VydF82XzFfMV9Sb3V0ZXJBdHRhY2godW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzAyX1JFRURBdHRhY2gucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzAyX1JFRURBdHRhY2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQwNGMzNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDJfUkVFREF0dGFjaC5weQpAQCAtMCwwICsxLDgyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitSRUVEID0gMgorRUQgPSAzCisKK2NsYXNzIENlcnRfNl8xXzJfUkVFREF0dGFjaCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKDApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRF0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMV8wM19Sb3V0ZXJBdHRhY2hDb25uZWN0aXZpdHkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzAzX1JvdXRlckF0dGFjaENvbm5lY3Rpdml0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZTQxNWZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMV8wM19Sb3V0ZXJBdHRhY2hDb25uZWN0aXZpdHkucHkKQEAgLTAsMCArMSwxMDYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworUk9VVEVSMyA9IDQKK0VEID0gNQorCitjbGFzcyBDZXJ0XzZfMV8zX1JvdXRlckF0dGFjaENvbm5lY3Rpdml0eSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgyLCA1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc3RhcnQoKQorICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW2ldLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRURdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbUk9VVEVSM10ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDRfUkVFREF0dGFjaENvbm5lY3Rpdml0eS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDRfUkVFREF0dGFjaENvbm5lY3Rpdml0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZDQ0MThhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMV8wNF9SRUVEQXR0YWNoQ29ubmVjdGl2aXR5LnB5CkBAIC0wLDAgKzEsMTEyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUkVFRDAgPSAzCitSRUVEMSA9IDQKK0VEID0gNQorCitjbGFzcyBDZXJ0XzZfMV80X1JFRURBdHRhY2hDb25uZWN0aXZpdHkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNik6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRUQwXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDBdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDBdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQwXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMF0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgwKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQwXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLnNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQoMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEMF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDBdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRDBdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRDFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDVfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzA1X1JvdXRlckF0dGFjaExpbmtRdWFsaXR5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ2M2FlNTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzA1X1JvdXRlckF0dGFjaExpbmtRdWFsaXR5LnB5CkBAIC0wLDAgKzEsOTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworRUQgPSA0CisKK2NsYXNzIENlcnRfNl8xXzVfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpLCByc3NpPS04NSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSwgcnNzaT0tODUpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMV8wNl9SRUVEQXR0YWNoTGlua1F1YWxpdHkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzA2X1JFRURBdHRhY2hMaW5rUXVhbGl0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZWZlYTI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMV8wNl9SRUVEQXR0YWNoTGlua1F1YWxpdHkucHkKQEAgLTAsMCArMSw5NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUkVFRCA9IDIKK1JPVVRFUjIgPSAzCitFRCA9IDQKKworY2xhc3MgQ2VydF82XzFfNl9SRUVEQXR0YWNoTGlua1F1YWxpdHkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQoMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSwgcnNzaT0tODUpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCksIHJzc2k9LTg1KQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRURdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDdfRURTeW5jaHJvbml6YXRpb24ucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzA3X0VEU3luY2hyb25pemF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3Y2JjNWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzA3X0VEU3luY2hyb25pemF0aW9uLnB5CkBAIC0wLDAgKzEsMTEzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorRUQgPSAzCitST1VURVIyID0gNAorUk9VVEVSMyA9IDUKKworY2xhc3MgQ2VydF82XzFfN19FRFN5bmNocm9uaXphdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzJfMDFfTmV3UGFydGl0aW9uLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMl8wMV9OZXdQYXJ0aXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmFjMDczZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzJfMDFfTmV3UGFydGl0aW9uLnB5CkBAIC0wLDAgKzEsOTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitFRCA9IDMKKworY2xhc3MgQ2VydF82XzJfMV9OZXdQYXJ0aXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoMTQwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tST1VURVIxXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMl8wMl9OZXdQYXJ0aXRpb24ucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8yXzAyX05ld1BhcnRpdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMWMzZjNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMl8wMl9OZXdQYXJ0aXRpb24ucHkKQEAgLTAsMCArMSwxMDYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworRUQgPSA0CisKK2NsYXNzIENlcnRfNl8yXzJfTmV3UGFydGl0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X25ldHdvcmtfaWRfdGltZW91dCgxMTApCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdG9wKCkKKyAgICAgICAgdGltZS5zbGVlcCgxNDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW1JPVVRFUjFdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8zXzAxX09ycGhhblJlYXR0YWNoLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfM18wMV9PcnBoYW5SZWF0dGFjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMWU1MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfM18wMV9PcnBoYW5SZWF0dGFjaC5weQpAQCAtMCwwICsxLDkzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitFRCA9IDMKKworY2xhc3MgQ2VydF82XzNfMV9PcnBoYW5SZWF0dGFjaCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfdGltZW91dCgxMCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdG9wKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHRpbWUuc2xlZXAoMjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRURdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfM18wMl9OZXR3b3JrRGF0YVVwZGF0ZS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzNfMDJfTmV0d29ya0RhdGFVcGRhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTNiOWFkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzNfMDJfTmV0d29ya0RhdGFVcGRhdGUucHkKQEAgLTAsMCArMSw5OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorRUQgPSAyCisKK2NsYXNzIENlcnRfNV82XzJfTmV0d29ya0RhdGFVcGRhdGUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfdGltZW91dCgxMCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRURdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVtb3ZlX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnJlbW92ZV93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mjo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Mic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNF8wMV9MaW5rTG9jYWwucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl80XzAxX0xpbmtMb2NhbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYmY4ZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNF8wMV9MaW5rTG9jYWwucHkKQEAgLTAsMCArMSw3OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorRUQgPSAyCisKK2NsYXNzIENlcnRfNl80XzFfTGlua0xvY2FsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gPT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyLCBzaXplPTI1NikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYwMjo6MScsIHNpemU9MjU2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKCdmZjAyOjoxJykpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl80XzAyX1JlYWxtTG9jYWwucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl80XzAyX1JlYWxtTG9jYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDNmODM0OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzRfMDJfUmVhbG1Mb2NhbC5weQpAQCAtMCwwICsxLDkzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitFRCA9IDMKKworY2xhc3MgQ2VydF81XzNfMl9SZWFsbUxvY2FsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRURdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkciwgc2l6ZT0yNTYpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoJ2ZmMDM6OjEnLCBudW1fcmVzcG9uc2VzPTIsIHNpemU9MjU2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKCdmZjAzOjoxJywgbnVtX3Jlc3BvbnNlcz0yKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoJ2ZmMzM6MDA0MDpmZGRlOmFkMDA6YmVlZjowOjA6MScsIG51bV9yZXNwb25zZXM9Miwgc2l6ZT0yNTYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoJ2ZmMzM6MDA0MDpmZGRlOmFkMDA6YmVlZjowOjA6MScsIG51bV9yZXNwb25zZXM9MikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl81XzAxX0NoaWxkUmVzZXRTeW5jaHJvbml6ZS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzVfMDFfQ2hpbGRSZXNldFN5bmNocm9uaXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4NGEwNGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl81XzAxX0NoaWxkUmVzZXRTeW5jaHJvbml6ZS5weQpAQCAtMCwwICsxLDk1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitFRCA9IDIKKworY2xhc3MgQ2VydF82XzVfMV9DaGlsZFJlc2V0U3luY2hyb25pemUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfdGltZW91dCgzKQorICAgICAgICBzZWxmLl9zZXRVcEVkKCkKKworICAgIGRlZiBfc2V0VXBFZChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkgICAgICAgIAorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcEVkKCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF90aW1lb3V0KDEwMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcEVkKCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfdGltZW91dCgxMDApCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gPT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzVfMDJfQ2hpbGRSZXNldFJlYXR0YWNoLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNV8wMl9DaGlsZFJlc2V0UmVhdHRhY2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDFjYjgyMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzVfMDJfQ2hpbGRSZXNldFJlYXR0YWNoLnB5CkBAIC0wLDAgKzEsOTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK0VEID0gMgorCitjbGFzcyBDZXJ0XzZfNV8yX0NoaWxkUmVzZXRSZWF0dGFjaCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYuX3NldFVwRWQoKQorCisgICAgZGVmIF9zZXRVcEVkKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnJlbW92ZV93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5yZW1vdmVfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcEVkKCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gPT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzZfMDFfS2V5SW5jcmVtZW50LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNl8wMV9LZXlJbmNyZW1lbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjAzY2FmMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzZfMDFfS2V5SW5jcmVtZW50LnB5CkBAIC0wLDAgKzEsODEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK0VEID0gMgorCitjbGFzcyBDZXJ0XzZfNl8xX0tleUluY3JlbWVudCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfa2V5X3N3aXRjaF9ndWFyZHRpbWUoMCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X2tleV9zd2l0Y2hfZ3VhcmR0aW1lKDApCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICJjaGlsZCIpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBrZXlfc2VxdWVuY2VfY291bnRlciA9IHNlbGYubm9kZXNbTEVBREVSXS5nZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2tleV9zZXF1ZW5jZV9jb3VudGVyKGtleV9zZXF1ZW5jZV9jb3VudGVyICsgMSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRURdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNl8wMl9LZXlJbmNyZW1lbnRSb2xsT3Zlci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzZfMDJfS2V5SW5jcmVtZW50Um9sbE92ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzk0N2MxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzZfMDJfS2V5SW5jcmVtZW50Um9sbE92ZXIucHkKQEAgLTAsMCArMSw4MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorRUQgPSAyCisKK2NsYXNzIENlcnRfNl82XzJfS2V5SW5jcmVtZW50MSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfa2V5X3N3aXRjaF9ndWFyZHRpbWUoMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9rZXlfc2VxdWVuY2VfY291bnRlcigxMjcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9rZXlfc3dpdGNoX2d1YXJkdGltZSgwKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBrZXlfc2VxdWVuY2VfY291bnRlciA9IHNlbGYubm9kZXNbTEVBREVSXS5nZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2tleV9zZXF1ZW5jZV9jb3VudGVyKGtleV9zZXF1ZW5jZV9jb3VudGVyICsgMSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRURdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzdfMV8wMV9Cb3JkZXJSb3V0ZXJBc0xlYWRlci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF83XzFfMDFfQm9yZGVyUm91dGVyQXNMZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmRiZDk2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF83XzFfMDFfQm9yZGVyUm91dGVyQXNMZWFkZXIucHkKQEAgLTAsMCArMSwxMTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK1NFRDEgPSAzCitFRDEgPSA0CisKK2NsYXNzIENlcnRfN18xXzFfQm9yZGVyUm91dGVyQXNMZWFkZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfbW9kZSgncycpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF90aW1lb3V0KDMpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoyOjovNjQnLCAncGFybycpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF83XzFfMDJfQm9yZGVyUm91dGVyQXNSb3V0ZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzAyX0JvcmRlclJvdXRlckFzUm91dGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZiZGRiMDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzAyX0JvcmRlclJvdXRlckFzUm91dGVyLnB5CkBAIC0wLDAgKzEsMTExIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitFRDIgPSAzCitTRUQyID0gNAorCitjbGFzcyBDZXJ0XzdfMV8yX0JvcmRlclJvdXRlckFzUm91dGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbU0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mjo6LzY0JywgJ3Bhcm8nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQyXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMl0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzAzX0JvcmRlclJvdXRlckFzTGVhZGVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzdfMV8wM19Cb3JkZXJSb3V0ZXJBc0xlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMjFjMGE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzdfMV8wM19Cb3JkZXJSb3V0ZXJBc0xlYWRlci5weQpAQCAtMCwwICsxLDExMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorU0VEMSA9IDMKK0VEMSA9IDQKKworY2xhc3MgQ2VydF83XzFfM19Cb3JkZXJSb3V0ZXJBc0xlYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3RpbWVvdXQoMykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjI6Oi82NCcsICdwYXJvJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Mic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzA0X0JvcmRlclJvdXRlckFzUm91dGVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzdfMV8wNF9Cb3JkZXJSb3V0ZXJBc1JvdXRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZWQxOTg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzdfMV8wNF9Cb3JkZXJSb3V0ZXJBc1JvdXRlci5weQpAQCAtMCwwICsxLDExMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorRUQyID0gMworU0VEMiA9IDQKKworY2xhc3MgQ2VydF83XzFfNF9Cb3JkZXJSb3V0ZXJBc1JvdXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zZXRfbW9kZSgncycpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDJdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQyXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjI6Oi82NCcsICdwYXJvJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzA1X0JvcmRlclJvdXRlckFzUm91dGVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzdfMV8wNV9Cb3JkZXJSb3V0ZXJBc1JvdXRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNzNhMDNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzdfMV8wNV9Cb3JkZXJSb3V0ZXJBc1JvdXRlci5weQpAQCAtMCwwICsxLDEzMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorRUQyID0gMworU0VEMiA9IDQKKworY2xhc3MgQ2VydF83XzFfNV9Cb3JkZXJSb3V0ZXJBc1JvdXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zZXRfbW9kZSgncycpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDJdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQyXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjI6Oi82NCcsICdwYXJvJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjM6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRDJdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MycgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Micgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Myc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQyXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDozJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDozJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOF8xXzAxX0NvbW1pc3Npb25pbmcucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOF8xXzAxX0NvbW1pc3Npb25pbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGFkZmYxYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF84XzFfMDFfQ29tbWlzc2lvbmluZy5weQpAQCAtMCwwICsxLDc2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitDT01NSVNTSU9ORVIgPSAxCitKT0lORVIgPSAyCisKK2NsYXNzIENlcnRfOF8xXzAxX0NvbW1pc3Npb25pbmcodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfbWFzdGVya2V5KCdkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9tYXN0ZXJrZXkoJzAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmJykKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uaW50ZXJmYWNlX3VwKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnRocmVhZF9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uY29tbWlzc2lvbmVyX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uY29tbWlzc2lvbmVyX2FkZF9qb2luZXIoc2VsZi5ub2Rlc1tKT0lORVJdLmdldF9oYXNobWFjYWRkcigpLCAnb3BlbnRocmVhZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLmludGVyZmFjZV91cCgpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5qb2luZXJfc3RhcnQoJ29wZW50aHJlYWQnKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbSk9JTkVSXS5nZXRfbWFzdGVya2V5KCksIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfbWFzdGVya2V5KCkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnRocmVhZF9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0pPSU5FUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzhfMV8wMl9Db21taXNzaW9uaW5nLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzhfMV8wMl9Db21taXNzaW9uaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxNWZlMjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOF8xXzAyX0NvbW1pc3Npb25pbmcucHkKQEAgLTAsMCArMSw3MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworQ09NTUlTU0lPTkVSID0gMQorSk9JTkVSID0gMgorCitjbGFzcyBDZXJ0XzhfMV8wMl9Db21taXNzaW9uaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21hc3RlcmtleSgnZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWYnKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5zZXRfbWFzdGVya2V5KCcwMDExMjIzMzQ0NTU2Njc3ODg5OWFhYmJjY2RkZWVmZicpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmludGVyZmFjZV91cCgpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS50aHJlYWRfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9hZGRfam9pbmVyKHNlbGYubm9kZXNbSk9JTkVSXS5nZXRfaGFzaG1hY2FkZHIoKSwgJ29wZW50aHJlYWQnKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5pbnRlcmZhY2VfdXAoKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uam9pbmVyX3N0YXJ0KCdkYWVyaHRuZXBvJykKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLm5vZGVzW0pPSU5FUl0uZ2V0X21hc3RlcmtleSgpLCBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X21hc3RlcmtleSgpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzhfMl8wMV9Kb2luZXJSb3V0ZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOF8yXzAxX0pvaW5lclJvdXRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NDI2YjMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzhfMl8wMV9Kb2luZXJSb3V0ZXIucHkKQEAgLTAsMCArMSwxMDcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0NPTU1JU1NJT05FUiA9IDEKK0pPSU5FUl9ST1VURVIgPSAyCitKT0lORVIgPSAzCisKK2NsYXNzIENlcnRfOF8yXzAxX0pvaW5lclJvdXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tYXN0ZXJrZXkoJ2RlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJfUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uc2V0X21hc3RlcmtleSgnMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYnKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5zZXRfbWFzdGVya2V5KCcwMDExMjIzMzQ0NTU2Njc3ODg5OWFhYmJjY2RkZWVmZicpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uaW50ZXJmYWNlX3VwKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnRocmVhZF9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfYWRkX2pvaW5lcihzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9oYXNobWFjYWRkcigpLCAnb3BlbnRocmVhZCcpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfYWRkX2pvaW5lcihzZWxmLm5vZGVzW0pPSU5FUl0uZ2V0X2hhc2htYWNhZGRyKCksICdvcGVudGhyZWFkMicpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9oYXNobWFjYWRkcigpKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmludGVyZmFjZV91cCgpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uam9pbmVyX3N0YXJ0KCdvcGVudGhyZWFkJykKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9tYXN0ZXJrZXkoKSwgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9tYXN0ZXJrZXkoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLnRocmVhZF9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tKT0lORVJdLmdldF9oYXNobWFjYWRkcigpKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uaW50ZXJmYWNlX3VwKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLmpvaW5lcl9zdGFydCgnb3BlbnRocmVhZDInKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbSk9JTkVSXS5nZXRfbWFzdGVya2V5KCksIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfbWFzdGVya2V5KCkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJfUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbSk9JTkVSXS5nZXRfYWRkcjY0KCkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnRocmVhZF9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0pPSU5FUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzhfMl8wMl9Kb2luZXJSb3V0ZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOF8yXzAyX0pvaW5lclJvdXRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTAwYzVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzhfMl8wMl9Kb2luZXJSb3V0ZXIucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0NPTU1JU1NJT05FUiA9IDEKK0pPSU5FUl9ST1VURVIgPSAyCitKT0lORVIgPSAzCisKK2NsYXNzIENlcnRfOF8yXzAyX0pvaW5lclJvdXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tYXN0ZXJrZXkoJ2RlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJfUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uc2V0X21hc3RlcmtleSgnMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYnKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5zZXRfbWFzdGVya2V5KCcwMDExMjIzMzQ0NTU2Njc3ODg5OWFhYmJjY2RkZWVmZicpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uaW50ZXJmYWNlX3VwKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnRocmVhZF9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfYWRkX2pvaW5lcihzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9oYXNobWFjYWRkcigpLCAnb3BlbnRocmVhZCcpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfYWRkX2pvaW5lcihzZWxmLm5vZGVzW0pPSU5FUl0uZ2V0X2hhc2htYWNhZGRyKCksICdvcGVudGhyZWFkMicpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9oYXNobWFjYWRkcigpKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmludGVyZmFjZV91cCgpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uam9pbmVyX3N0YXJ0KCdvcGVudGhyZWFkJykKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9tYXN0ZXJrZXkoKSwgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9tYXN0ZXJrZXkoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLnRocmVhZF9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tKT0lORVJdLmdldF9oYXNobWFjYWRkcigpKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uaW50ZXJmYWNlX3VwKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLmpvaW5lcl9zdGFydCgnMmRhZXJodG5lcG8nKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYubm9kZXNbSk9JTkVSXS5nZXRfbWFzdGVya2V5KCksIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfbWFzdGVya2V5KCkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzA0X0FjdGl2ZURhdGFzZXQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzA0X0FjdGl2ZURhdGFzZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWFjM2JjYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMDRfQWN0aXZlRGF0YXNldC5weQpAQCAtMCwwICsxLDE2MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworQ09NTUlTU0lPTkVSID0gMQorTEVBREVSID0gMgorCitjbGFzcyBDZXJ0XzlfMl8xNV9QZW5kaW5nUGFydGl0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfYWN0aXZlX2RhdGFzZXQoMTAsIHBhbmlkPTB4ZmFjZSwgbWFzdGVyX2tleT0nMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYnKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9hY3RpdmVfZGF0YXNldCgxMCwgcGFuaWQ9MHhmYWNlLCBtYXN0ZXJfa2V5PScwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9hY3RpdmVfc2V0KGFjdGl2ZV90aW1lc3RhbXA9MTAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbF9tYXNrPTB4MDAxZmZmZTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRlZF9wYW5pZD0nMDAwZGI3MDAwMDAwMDAwMCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrX25hbWU9J0dSTCcpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X25ldHdvcmtfbmFtZSgpLCAnR1JMJykKKworICAgICAgICAjIFN0ZXAgNgorICAgICAgICAjIEF0dGVtcHQgdG8gc2V0IENoYW5uZWwgVExWCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfYWN0aXZlX3NldChhY3RpdmVfdGltZXN0YW1wPTEwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWw9MTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hc2s9MHgwMDFmZmZlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkX3BhbmlkPScwMDBkYjcwMDAwMDAwMDAxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0ndGhyZWFkY2VydCcpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X25ldHdvcmtfbmFtZSgpLCAnR1JMJykKKworICAgICAgICAjIFN0ZXAgOAorICAgICAgICAjIEF0dGVtcHQgdG8gc2V0IE1lc2ggTG9jYWwgUHJlZml4IFRMVgorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X2FjdGl2ZV9zZXQoYWN0aXZlX3RpbWVzdGFtcD0xMDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hc2s9MHgwMDFmZmVlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkX3BhbmlkPScwMDBkYjcwMDAwMDAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2hfbG9jYWw9J2ZkMDA6MGRiNzo6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0nVUwnKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9uZXR3b3JrX25hbWUoKSwgJ0dSTCcpCisKKyAgICAgICAgIyBTdGVwIDEwCisgICAgICAgICMgQXR0ZW1wdCB0byBzZXQgTmV0d29yayBNYXN0ZXIgS2V5IFRMVgorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X2FjdGl2ZV9zZXQoYWN0aXZlX3RpbWVzdGFtcD0xMDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hc2s9MHgwMDFmZmZlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkX3BhbmlkPScwMDBkYjcwMDAwMDAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3Rlcl9rZXk9JzAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2hfbG9jYWw9J2ZkMDA6MGRiNzo6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0nVUwnKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9uZXR3b3JrX25hbWUoKSwgJ0dSTCcpCisKKyAgICAgICAgIyBTdGVwIDEyCisgICAgICAgICMgQXR0ZW1wdCB0byBzZXQgUEFOIElEIFRMVgorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X2FjdGl2ZV9zZXQoYWN0aXZlX3RpbWVzdGFtcD0xMDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hc2s9MHgwMDFmZmZlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkX3BhbmlkPScwMDBkYjcwMDAwMDAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3Rlcl9rZXk9JzAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2hfbG9jYWw9J2ZkMDA6MGRiNzo6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0nVUwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuaWQ9MHhhZmNlKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9uZXR3b3JrX25hbWUoKSwgJ0dSTCcpCisKKyAgICAgICAgIyBTdGVwIDE0CisgICAgICAgICMgSW52YWxpZCBDb21taXNzaW9uZXIgU2Vzc2lvbiBJRAorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X2FjdGl2ZV9zZXQoYWN0aXZlX3RpbWVzdGFtcD0xMDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hc2s9MHgwMDFmZmZlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkX3BhbmlkPScwMDBkYjcwMDAwMDAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0nVUwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5PScwYjAyYWJjZCcpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X25ldHdvcmtfbmFtZSgpLCAnR1JMJykKKworICAgICAgICAjIFN0ZXAgMTYKKyAgICAgICAgIyBPbGQgQWN0aXZlIFRpbWVzdGFtcAorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X2FjdGl2ZV9zZXQoYWN0aXZlX3RpbWVzdGFtcD0xMDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hc2s9MHgwMDFmZmZlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkX3BhbmlkPScwMDBkYjcwMDAwMDAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0nVUwnKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9uZXR3b3JrX25hbWUoKSwgJ0dSTCcpCisKKyAgICAgICAgIyBTdGVwIDE4CisgICAgICAgICMgVW5leHBlY3RlZCBTdGVlcmluZyBEYXRhIFRMVgorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X2FjdGl2ZV9zZXQoYWN0aXZlX3RpbWVzdGFtcD0xMDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hc2s9MHgwMDFmZmZlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkX3BhbmlkPScwMDBkYjcwMDAwMDAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0nVUwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5PScwODA2MTEzMzIwNDQwMDAwJykKKyAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfbmV0d29ya19uYW1lKCksICdVTCcpCisKKyAgICAgICAgIyBTdGVwIDIwCisgICAgICAgICMgVW5kZWZpbmVkIFRMVgorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X2FjdGl2ZV9zZXQoYWN0aXZlX3RpbWVzdGFtcD0xMDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hc2s9MHgwMDFmZmZlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkX3BhbmlkPScwMDBkYjcwMDAwMDAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0nR1JMJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeT0nODIwMmFhNTUnKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9uZXR3b3JrX25hbWUoKSwgJ0dSTCcpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgaXBhZGRyIGluIGlwYWRkcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoaXBhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMDdfRGVsYXlUaW1lci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMDdfRGVsYXlUaW1lci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MzQ3YjY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8wN19EZWxheVRpbWVyLnB5CkBAIC0wLDAgKzEsMTMyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitQQU5JRF9JTklUID0gMHhmYWNlCisKK0NPTU1JU1NJT05FUiA9IDEKK0xFQURFUiA9IDIKK1JPVVRFUiA9IDMKKworTEVBREVSX0FDVElWRV9USU1FU1RBTVAgPSAxMAorUk9VVEVSX0FDVElWRV9USU1FU1RBTVAgPSAyMAorUk9VVEVSX1BFTkRJTkdfVElNRVNUQU1QID0gMzAKK1JPVVRFUl9QRU5ESU5HX0FDVElWRV9USU1FU1RBTVAgPSAyNQorCitDT01NSVNTSU9ORVJfUEVORElOR19DSEFOTkVMID0gMjAKK0NPTU1JU1NJT05FUl9QRU5ESU5HX1BBTklEID0gMHhhZmNlCisKK2NsYXNzIENlcnRfOV8yXzdfRGVsYXlUaW1lcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KExFQURFUl9BQ1RJVkVfVElNRVNUQU1QKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3BhbmlkKFBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoUEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYXJ0aXRpb25faWQoMHhmZmZmZmZmZikKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9hY3RpdmVfZGF0YXNldChST1VURVJfQUNUSVZFX1RJTUVTVEFNUCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wZW5kaW5nX2RhdGFzZXQoUk9VVEVSX1BFTkRJTkdfVElNRVNUQU1QLCBST1VURVJfUEVORElOR19BQ1RJVkVfVElNRVNUQU1QKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKFBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFydGl0aW9uX2lkKDB4MSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICB0aW1lLnNsZWVwKDMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhpcGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfcGVuZGluZ19zZXQocGVuZGluZ190aW1lc3RhbXA9NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlX3RpbWVzdGFtcD04MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheV90aW1lcj0xMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsPUNPTU1JU1NJT05FUl9QRU5ESU5HX0NIQU5ORUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuaWQ9Q09NTUlTU0lPTkVSX1BFTkRJTkdfUEFOSUQpCisgICAgICAgIHRpbWUuc2xlZXAoNDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9wYW5pZCgpLCBDT01NSVNTSU9ORVJfUEVORElOR19QQU5JRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3BhbmlkKCksIENPTU1JU1NJT05FUl9QRU5ESU5HX1BBTklEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfcGFuaWQoKSwgQ09NTUlTU0lPTkVSX1BFTkRJTkdfUEFOSUQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2NoYW5uZWwoKSwgQ09NTUlTU0lPTkVSX1BFTkRJTkdfQ0hBTk5FTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2NoYW5uZWwoKSwgQ09NTUlTU0lPTkVSX1BFTkRJTkdfQ0hBTk5FTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2NoYW5uZWwoKSwgQ09NTUlTU0lPTkVSX1BFTkRJTkdfQ0hBTk5FTCkKKworICAgICAgICBpcGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRycygpCisgICAgICAgIGZvciBpcGFkZHIgaW4gaXBhZGRyczoKKyAgICAgICAgICAgIGlmIGlwYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoaXBhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMDhfUGVyc2lzdGVudERhdGFzZXRzLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8wOF9QZXJzaXN0ZW50RGF0YXNldHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTFhMjk3NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMDhfUGVyc2lzdGVudERhdGFzZXRzLnB5CkBAIC0wLDAgKzEsMTkwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitDT01NSVNTSU9ORVIgPSAxCitMRUFERVIgPSAyCitST1VURVIgPSAzCitFRCA9IDQKK1NFRCA9IDUKKworQ0hBTk5FTF9JTklUID0gMTkKK1BBTklEX0lOSVQgPSAweGZhY2UKK0xFQURFUl9BQ1RJVkVfVElNRVNUQU1QID0gMTAKKworQ09NTUlTU0lPTkVSX1BFTkRJTkdfQ0hBTk5FTCA9IDIwCitDT01NSVNTSU9ORVJfUEVORElOR19QQU5JRCA9IDB4YWZjZQorCitjbGFzcyBDZXJ0XzlfMl84X1BlcnNpc3RlbnREYXRhc2V0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KExFQURFUl9BQ1RJVkVfVElNRVNUQU1QLCBwYW5pZD1QQU5JRF9JTklULCBjaGFubmVsPUNIQU5ORUxfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9hY3RpdmVfZGF0YXNldChMRUFERVJfQUNUSVZFX1RJTUVTVEFNUCwgcGFuaWQ9UEFOSURfSU5JVCwgY2hhbm5lbD1DSEFOTkVMX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfYWN0aXZlX2RhdGFzZXQoTEVBREVSX0FDVElWRV9USU1FU1RBTVAsIHBhbmlkPVBBTklEX0lOSVQsIGNoYW5uZWw9Q0hBTk5FTF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLl9zZXRVcFJvdXRlcigpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X2FjdGl2ZV9kYXRhc2V0KExFQURFUl9BQ1RJVkVfVElNRVNUQU1QLCBwYW5pZD1QQU5JRF9JTklULCBjaGFubmVsPUNIQU5ORUxfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYuX3NldFVwRWQoKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEXS5zZXRfYWN0aXZlX2RhdGFzZXQoTEVBREVSX0FDVElWRV9USU1FU1RBTVAsIHBhbmlkPVBBTklEX0lOSVQsIGNoYW5uZWw9Q0hBTk5FTF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc2V0X21vZGUoJ3MnKQorICAgICAgICBzZWxmLl9zZXRVcFNlZCgpCisKKyAgICBkZWYgX3NldFVwUm91dGVyKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiBfc2V0VXBFZChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiBfc2V0VXBTZWQoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbU0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD0xMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wPTcwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTYwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWw9Q09NTUlTU0lPTkVSX1BFTkRJTkdfQ0hBTk5FTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pZD1DT01NSVNTSU9ORVJfUEVORElOR19QQU5JRCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZXNldCgpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnJlc2V0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLnJlc2V0KCkKKworICAgICAgICB0aW1lLnNsZWVwKDYwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9wYW5pZCgpLCBDT01NSVNTSU9ORVJfUEVORElOR19QQU5JRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3BhbmlkKCksIENPTU1JU1NJT05FUl9QRU5ESU5HX1BBTklEKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9jaGFubmVsKCksIENPTU1JU1NJT05FUl9QRU5ESU5HX0NIQU5ORUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9jaGFubmVsKCksIENPTU1JU1NJT05FUl9QRU5ESU5HX0NIQU5ORUwpCisgICAgICAgIAorICAgICAgICAjIHJlc2V0IHRoZSBkZXZpY2VzIGhlcmUgYWdhaW4gdG8gc2ltdWxhdGUgdGhlIGZhY3QgdGhhdCB0aGUgZGV2aWNlcyB3ZXJlIGRpc2FibGVkIHRoZSBlbnRpcmUgdGltZQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcFJvdXRlcigpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnJlc2V0KCkKKyAgICAgICAgc2VsZi5fc2V0VXBFZCgpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLnJlc2V0KCkKKyAgICAgICAgc2VsZi5fc2V0VXBTZWQoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc3RhcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9wYW5pZCgpLCBQQU5JRF9JTklUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9wYW5pZCgpLCBQQU5JRF9JTklUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEXS5nZXRfcGFuaWQoKSwgUEFOSURfSU5JVCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfY2hhbm5lbCgpLCBDSEFOTkVMX0lOSVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X2NoYW5uZWwoKSwgQ0hBTk5FTF9JTklUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEXS5nZXRfY2hhbm5lbCgpLCBDSEFOTkVMX0lOSVQpCisKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9wYW5pZCgpLCBDT01NSVNTSU9ORVJfUEVORElOR19QQU5JRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfcGFuaWQoKSwgQ09NTUlTU0lPTkVSX1BFTkRJTkdfUEFOSUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRURdLmdldF9wYW5pZCgpLCBDT01NSVNTSU9ORVJfUEVORElOR19QQU5JRCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfY2hhbm5lbCgpLCBDT01NSVNTSU9ORVJfUEVORElOR19DSEFOTkVMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9jaGFubmVsKCksIENPTU1JU1NJT05FUl9QRU5ESU5HX0NIQU5ORUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRURdLmdldF9jaGFubmVsKCksIENPTU1JU1NJT05FUl9QRU5ESU5HX0NIQU5ORUwpCisKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhpcGFkZHIpKQorIAorICAgICAgICBpcGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhpcGFkZHIpKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW1NFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhpcGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8wOV9QZW5kaW5nUGFydGl0aW9uLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8wOV9QZW5kaW5nUGFydGl0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFjMWNiNTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzA5X1BlbmRpbmdQYXJ0aXRpb24ucHkKQEAgLTAsMCArMSwxNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0NIQU5ORUxfSU5JVCA9IDE5CitQQU5JRF9JTklUID0gMHhmYWNlCisKK0NIQU5ORUxfRklOQUwgPSAxOQorUEFOSURfRklOQUwgPSAweGFiY2QKKworQ09NTUlTU0lPTkVSID0gMQorTEVBREVSID0gMgorUk9VVEVSMSA9IDMKK1JPVVRFUjIgPSA0CisKK2NsYXNzIENlcnRfOV8yXzA5X1BlbmRpbmdQYXJ0aXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9hY3RpdmVfZGF0YXNldCgxMCwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfYWN0aXZlX2RhdGFzZXQoMTAsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhcnRpdGlvbl9pZCgweGZmZmZmZmZmKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfYWN0aXZlX2RhdGFzZXQoMTAsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9hY3RpdmVfZGF0YXNldCgxMCwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X25ldHdvcmtfaWRfdGltZW91dCgxMDApCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD0zMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wPTIxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheV90aW1lcj01MDAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbD0yMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pZD0weGFmY2UpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVtb3ZlX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5yZW1vdmVfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHRpbWUuc2xlZXAoMTQwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZW5kX21nbXRfcGVuZGluZ19zZXQocGVuZGluZ190aW1lc3RhbXA9NTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV90aW1lc3RhbXA9NDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheV90aW1lcj0yMDAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWw9Q0hBTk5FTF9GSU5BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuaWQ9UEFOSURfRklOQUwpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHRpbWUuc2xlZXAoMjAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3BhbmlkKCksIFBBTklEX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2NoYW5uZWwoKSwgQ0hBTk5FTF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2NoYW5uZWwoKSwgQ0hBTk5FTF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9jaGFubmVsKCksIENIQU5ORUxfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfY2hhbm5lbCgpLCBDSEFOTkVMX0ZJTkFMKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRycygpCisgICAgICAgIGZvciBpcGFkZHIgaW4gaXBhZGRyczoKKyAgICAgICAgICAgIGlmIGlwYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhpcGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xMF9QZW5kaW5nUGFydGl0aW9uLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xMF9QZW5kaW5nUGFydGl0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjZGJkM2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzEwX1BlbmRpbmdQYXJ0aXRpb24ucHkKQEAgLTAsMCArMSwxNjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0NIQU5ORUxfSU5JVCA9IDE5CitQQU5JRF9JTklUID0gMHhmYWNlCisKK0NIQU5ORUxfRklOQUwgPSAxNgorUEFOSURfRklOQUwgPSAweGFmY2UKKworQ09NTUlTU0lPTkVSID0gMQorTEVBREVSID0gMgorUk9VVEVSMSA9IDMKK0VEMSA9IDQKK1NFRDEgPSA1CisKK2NsYXNzIENlcnRfOV8yXzEwX1BlbmRpbmdQYXJ0aXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNik6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9hY3RpdmVfZGF0YXNldCgxNSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfYWN0aXZlX2RhdGFzZXQoMTUsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhcnRpdGlvbl9pZCgweGZmZmZmZmZmKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfYWN0aXZlX2RhdGFzZXQoMTUsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9hY3RpdmVfZGF0YXNldCgxNSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9hY3RpdmVfZGF0YXNldCgxNSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X21vZGUoJ3MnKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uY29tbWlzc2lvbmVyX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCgzKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD0zMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wPTE2NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheV90aW1lcj0xNTAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbD1DSEFOTkVMX0ZJTkFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmlkPVBBTklEX0ZJTkFMKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9jaGFubmVsKCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfY2hhbm5lbCgpKQorICAgICAgICBwcmludChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9jaGFubmVsKCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbRUQxXS5nZXRfY2hhbm5lbCgpKQorICAgICAgICBwcmludChzZWxmLm5vZGVzW1NFRDFdLmdldF9jaGFubmVsKCkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnJlbW92ZV93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0ucmVtb3ZlX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICB0aW1lLnNsZWVwKDE2MCkKKworICAgICAgICBwcmludChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2NoYW5uZWwoKSkKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9jaGFubmVsKCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2NoYW5uZWwoKSkKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tFRDFdLmdldF9jaGFubmVsKCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbU0VEMV0uZ2V0X2NoYW5uZWwoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9wYW5pZCgpLCBQQU5JRF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDFdLmdldF9wYW5pZCgpLCBQQU5JRF9GSU5BTCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2NoYW5uZWwoKSwgQ0hBTk5FTF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X2NoYW5uZWwoKSwgQ0hBTk5FTF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDFdLmdldF9jaGFubmVsKCksIENIQU5ORUxfRklOQUwpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICB0aW1lLnNsZWVwKDYwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGlwYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzExX01hc3RlcktleS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTFfTWFzdGVyS2V5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlMjgyMmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzExX01hc3RlcktleS5weQpAQCAtMCwwICsxLDE2MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworS0VZMSA9ICcwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZicKK0tFWTIgPSAnMGYwZTBkMGMwYjBhMDkwODA3MDYwNTA0MDMwMjAxMDAnCisKK0NIQU5ORUxfSU5JVCA9IDE5CitQQU5JRF9JTklUID0gMHhmYWNlCisKK0NPTU1JU1NJT05FUiA9IDEKK0xFQURFUiA9IDIKK1JPVVRFUjEgPSAzCitFRDEgPSA0CitTRUQxID0gNQorCitjbGFzcyBDZXJ0XzlfMl8xMV9NYXN0ZXJLZXkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNik6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9hY3RpdmVfZGF0YXNldCgxMCwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQsIG1hc3Rlcl9rZXk9S0VZMSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9hY3RpdmVfZGF0YXNldCgxMCwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQsIG1hc3Rlcl9rZXk9S0VZMSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEwLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCwgbWFzdGVyX2tleT1LRVkxKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9hY3RpdmVfZGF0YXNldCgxMCwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQsIG1hc3Rlcl9rZXk9S0VZMSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEwLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCwgbWFzdGVyX2tleT1LRVkxKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfcGVuZGluZ19zZXQocGVuZGluZ190aW1lc3RhbXA9MTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlX3RpbWVzdGFtcD03MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheV90aW1lcj0xMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJfa2V5PUtFWTIpCisgICAgICAgIHRpbWUuc2xlZXAoMzEwKQorCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfbWFzdGVya2V5KCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfbWFzdGVya2V5KCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X21hc3RlcmtleSgpKQorICAgICAgICBwcmludChzZWxmLm5vZGVzW0VEMV0uZ2V0X21hc3RlcmtleSgpKQorICAgICAgICBwcmludChzZWxmLm5vZGVzW1NFRDFdLmdldF9tYXN0ZXJrZXkoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfbWFzdGVya2V5KCksIEtFWTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9tYXN0ZXJrZXkoKSwgS0VZMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9tYXN0ZXJrZXkoKSwgS0VZMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X21hc3RlcmtleSgpLCBLRVkyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X21hc3RlcmtleSgpLCBLRVkyKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhpcGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfcGVuZGluZ19zZXQocGVuZGluZ190aW1lc3RhbXA9MjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlX3RpbWVzdGFtcD0zMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheV90aW1lcj0xMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJfa2V5PUtFWTEpCisgICAgICAgIHRpbWUuc2xlZXAoMzEwKQorCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfbWFzdGVya2V5KCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfbWFzdGVya2V5KCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X21hc3RlcmtleSgpKQorICAgICAgICBwcmludChzZWxmLm5vZGVzW0VEMV0uZ2V0X21hc3RlcmtleSgpKQorICAgICAgICBwcmludChzZWxmLm5vZGVzW1NFRDFdLmdldF9tYXN0ZXJrZXkoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfbWFzdGVya2V5KCksIEtFWTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9tYXN0ZXJrZXkoKSwgS0VZMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9tYXN0ZXJrZXkoKSwgS0VZMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X21hc3RlcmtleSgpLCBLRVkxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X21hc3RlcmtleSgpLCBLRVkxKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhpcGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xMl9Bbm5vdW5jZS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTJfQW5ub3VuY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjcxNmUwZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTJfQW5ub3VuY2UucHkKQEAgLTAsMCArMSwxMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUjEgPSAxCitST1VURVIxID0gMgorTEVBREVSMiA9IDMKK1JPVVRFUjIgPSA0CitNRUQgPSA1CisKK0RBVEFTRVQxX1RJTUVTVEFNUCA9IDIwCitEQVRBU0VUMV9DSEFOTkVMID0gMTEKK0RBVEFTRVQxX1BBTklEID0gMHhmYWNlCisKK0RBVEFTRVQyX1RJTUVTVEFNUCA9IDEwCitEQVRBU0VUMl9DSEFOTkVMID0gMTIKK0RBVEFTRVQyX1BBTklEID0gMHhhZmNlCisKK2NsYXNzIENlcnRfOV8yXzEyX0Fubm91bmNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KERBVEFTRVQxX1RJTUVTVEFNUCwgY2hhbm5lbD1EQVRBU0VUMV9DSEFOTkVMLCBwYW5pZD1EQVRBU0VUMV9QQU5JRCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9hY3RpdmVfZGF0YXNldChEQVRBU0VUMV9USU1FU1RBTVAsIGNoYW5uZWw9REFUQVNFVDFfQ0hBTk5FTCwgcGFuaWQ9REFUQVNFVDFfUEFOSUQpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLnNldF9hY3RpdmVfZGF0YXNldChEQVRBU0VUMl9USU1FU1RBTVAsIGNoYW5uZWw9REFUQVNFVDJfQ0hBTk5FTCwgcGFuaWQ9REFUQVNFVDFfUEFOSUQpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9hY3RpdmVfZGF0YXNldChEQVRBU0VUMl9USU1FU1RBTVAsIGNoYW5uZWw9REFUQVNFVDJfQ0hBTk5FTCwgcGFuaWQ9REFUQVNFVDFfUEFOSUQpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW01FRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbTUVEXS5zZXRfYWN0aXZlX2RhdGFzZXQoREFUQVNFVDJfVElNRVNUQU1QLCBjaGFubmVsPURBVEFTRVQyX0NIQU5ORUwsIHBhbmlkPURBVEFTRVQxX1BBTklEKQorICAgICAgICBzZWxmLm5vZGVzW01FRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbTUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW01FRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5jb21taXNzaW9uZXJfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIyXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVIyXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW01FRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tNRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRycygpCisgICAgICAgIGZvciBpcGFkZHIgaW4gaXBhZGRyczoKKyAgICAgICAgICAgIGlmIGlwYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uYW5ub3VuY2VfYmVnaW4oMHgxMDAwLCAxLCAxMDAwLCBpcGFkZHIpCisgICAgICAgIHRpbWUuc2xlZXAoMzApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tNRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW01FRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUjFdLnBpbmcoaXBhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTNfRW5lcmd5U2Nhbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTNfRW5lcmd5U2Nhbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZGU0MDlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xM19FbmVyZ3lTY2FuLnB5CkBAIC0wLDAgKzEsMTE1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitDT01NSVNTSU9ORVIgPSAxCitMRUFERVIgPSAyCitST1VURVIxID0gMworRUQxID0gNAorCitjbGFzcyBDZXJ0XzlfMl8xM19FbmVyZ3lTY2FuKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnMnKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRycygpCisgICAgICAgIGZvciBpcGFkZHIgaW4gaXBhZGRyczoKKyAgICAgICAgICAgIGlmIGlwYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0ucGluZyhpcGFkZHIpKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZW5lcmd5X3NjYW4oMHg1MDAwMCwgMHgwMiwgMHgyMCwgMHgzZTgsIGlwYWRkcikKKworICAgICAgICBpcGFkZHJzID0gc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRycygpCisgICAgICAgIGZvciBpcGFkZHIgaW4gaXBhZGRyczoKKyAgICAgICAgICAgIGlmIGlwYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0ucGluZyhpcGFkZHIpKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZW5lcmd5X3NjYW4oMHg1MDAwMCwgMHgwMiwgMHgyMCwgMHgzZTgsIGlwYWRkcikKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZW5lcmd5X3NjYW4oMHg1MDAwMCwgMHgwMiwgMHgyMCwgMHgzZTgsICdmZjMzOjAwNDA6ZmRkZTphZDAwOmJlZWY6MDowOjEnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0ucGluZyhpcGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xNF9QYW5JZFF1ZXJ5LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xNF9QYW5JZFF1ZXJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjYWMzYjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzE0X1BhbklkUXVlcnkucHkKQEAgLTAsMCArMSwxMDYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0NPTU1JU1NJT05FUiA9IDEKK0xFQURFUjEgPSAyCitST1VURVIxID0gMworTEVBREVSMiA9IDQKKworY2xhc3MgQ2VydF85XzJfMTRfUGFuSWRRdWVyeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIyXS5zZXRfcGFuaWQoMHhkZWFkKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVIxXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSMl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRycygpCisgICAgICAgIGZvciBpcGFkZHIgaW4gaXBhZGRyczoKKyAgICAgICAgICAgIGlmIGlwYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5wYW5pZF9xdWVyeSgweGRlYWQsIDB4ZmZmZmZmZmYsIGlwYWRkcikKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0ucGFuaWRfcXVlcnkoMHhkZWFkLCAweGZmZmZmZmZmLCAnZmYzMzowMDQwOmZkZGU6YWQwMDpiZWVmOjA6MDoxJykKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnBpbmcoaXBhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTVfUGVuZGluZ1BhcnRpdGlvbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTVfUGVuZGluZ1BhcnRpdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MjA2ZDVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xNV9QZW5kaW5nUGFydGl0aW9uLnB5CkBAIC0wLDAgKzEsMTM4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitDSEFOTkVMX0lOSVQgPSAxOQorUEFOSURfSU5JVCA9IDB4ZmFjZQorCitQQU5JRF9GSU5BTCA9IDB4YWJjZAorCitDT01NSVNTSU9ORVIgPSAxCitMRUFERVIgPSAyCitST1VURVIxID0gMworUk9VVEVSMiA9IDQKKworY2xhc3MgQ2VydF85XzJfMTVfUGVuZGluZ1BhcnRpdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KDE1LCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9hY3RpdmVfZGF0YXNldCgxNSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFydGl0aW9uX2lkKDB4ZmZmZmZmZmYpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9hY3RpdmVfZGF0YXNldCgxNSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X2FjdGl2ZV9kYXRhc2V0KDE1LCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYuX3NldFVwUm91dGVyMigpCisKKyAgICBkZWYgX3NldFVwUm91dGVyMihzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X3BlbmRpbmdfc2V0KHBlbmRpbmdfdGltZXN0YW1wPTEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV90aW1lc3RhbXA9NzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlfdGltZXI9NjAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2hfbG9jYWw9J2ZkMDA6MGRiOTo6JykKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5yZXNldCgpCisgICAgICAgIHNlbGYuX3NldFVwUm91dGVyMigpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD0yMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wPTgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTIwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoX2xvY2FsPSdmZDAwOjBkYjc6OicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuaWQ9UEFOSURfRklOQUwpCisgICAgICAgIHRpbWUuc2xlZXAoMTAwKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHRpbWUuc2xlZXAoMTAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9wYW5pZCgpLCBQQU5JRF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3BhbmlkKCksIFBBTklEX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3BhbmlkKCksIFBBTklEX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3BhbmlkKCksIFBBTklEX0ZJTkFMKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRycygpCisgICAgICAgIGZvciBpcGFkZHIgaW4gaXBhZGRyczoKKyAgICAgICAgICAgIGlmIGlwYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoaXBhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTZfQWN0aXZlUGVuZGluZ1BhcnRpdGlvbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTZfQWN0aXZlUGVuZGluZ1BhcnRpdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xN2Y5YTBlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xNl9BY3RpdmVQZW5kaW5nUGFydGl0aW9uLnB5CkBAIC0wLDAgKzEsMTQ5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitDSEFOTkVMX0lOSVQgPSAxOQorUEFOSURfSU5JVCA9IDB4ZmFjZQorCitORVRXT1JLX05BTUVfRklOQUwgPSAndGhyZWFkQ2VydCcKK1BBTklEX0ZJTkFMID0gMHhhYmNkCisKK0NPTU1JU1NJT05FUiA9IDEKK0xFQURFUiA9IDIKK1JPVVRFUjEgPSAzCitST1VURVIyID0gNAorCitjbGFzcyBDZXJ0XzlfMl8xNl9BY3RpdmVQZW5kaW5nUGFydGl0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfYWN0aXZlX2RhdGFzZXQoMSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfYWN0aXZlX2RhdGFzZXQoMSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFydGl0aW9uX2lkKDB4ZmZmZmZmZmYpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9hY3RpdmVfZGF0YXNldCgxLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfYWN0aXZlX2RhdGFzZXQoMSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLl9zZXRVcFJvdXRlcjIoKQorCisgICAgZGVmIF9zZXRVcFJvdXRlcjIoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uY29tbWlzc2lvbmVyX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCgzKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD0xMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wPTEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTYwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoX2xvY2FsPSdmZDAwOjBkYjk6OicpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcFJvdXRlcjIoKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfcGVuZGluZ19zZXQocGVuZGluZ190aW1lc3RhbXA9MjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlX3RpbWVzdGFtcD0yMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheV90aW1lcj0yMDAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaF9sb2NhbD0nZmQwMDowZGI3OjonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmlkPVBBTklEX0ZJTkFMKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9hY3RpdmVfc2V0KGFjdGl2ZV90aW1lc3RhbXA9MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrX25hbWU9J3RocmVhZENlcnQnKQorICAgICAgICB0aW1lLnNsZWVwKDEwMCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9uZXR3b3JrX25hbWUoKSwgTkVUV09SS19OQU1FX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfbmV0d29ya19uYW1lKCksIE5FVFdPUktfTkFNRV9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9uZXR3b3JrX25hbWUoKSwgTkVUV09SS19OQU1FX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X25ldHdvcmtfbmFtZSgpLCBORVRXT1JLX05BTUVfRklOQUwpCisKKyAgICAgICAgdGltZS5zbGVlcCgxMDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3BhbmlkKCksIFBBTklEX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhpcGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xN19PcnBoYW4ucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzE3X09ycGhhbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMmQ3M2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xN19PcnBoYW4ucHkKQEAgLTAsMCArMSw5NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworQ0hBTk5FTDEgPSAxMQorQ0hBTk5FTDIgPSAxOAorQ0hBTk5FTF9NQVNLID0gMSA8PCAxOAorUEFOSURfSU5JVCA9IDB4ZmFjZQorCitMRUFERVIxID0gMQorTEVBREVSMiA9IDIKK0VEMSA9IDMKKworY2xhc3MgQ2VydF85XzJfMTdfT3JwaGFuKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDQpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEwLCBjaGFubmVsPUNIQU5ORUwxLCBwYW5pZD1QQU5JRF9JTklULCBjaGFubmVsX21hc2s9Q0hBTk5FTF9NQVNLKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIyXS5zZXRfYWN0aXZlX2RhdGFzZXQoMjAsIGNoYW5uZWw9Q0hBTk5FTDIsIHBhbmlkPVBBTklEX0lOSVQsIGNoYW5uZWxfbWFzaz1DSEFOTkVMX01BU0spCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfYWN0aXZlX2RhdGFzZXQoMTAsIGNoYW5uZWw9Q0hBTk5FTDEsIHBhbmlkPVBBTklEX0lOSVQsIGNoYW5uZWxfbWFzaz1DSEFOTkVMX01BU0spCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIyXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVIyXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnN0b3AoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHRpbWUuc2xlZXAoMjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9jaGFubmVsKCksIENIQU5ORUwyKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xOF9Sb2xsQmFja0FjdGl2ZVRpbWVzdGFtcC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMThfUm9sbEJhY2tBY3RpdmVUaW1lc3RhbXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjg3YzcyYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMThfUm9sbEJhY2tBY3RpdmVUaW1lc3RhbXAucHkKQEAgLTAsMCArMSwxNTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0tFWTEgPSAnMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYnCitLRVkyID0gJ2ZmZWVkZGNjYmJhYTk5ODg3NzY2NTU0NDMzMjIxMTAwJworCitDSEFOTkVMX0lOSVQgPSAxOQorUEFOSURfSU5JVCA9IDB4ZmFjZQorCitDT01NSVNTSU9ORVIgPSAxCitMRUFERVIgPSAyCitST1VURVIxID0gMworUk9VVEVSMiA9IDQKK0VEMSA9IDUKK1NFRDEgPSA2CisKK2NsYXNzIENlcnRfOV8yXzE4X1JvbGxCYWNrQWN0aXZlVGltZXN0YW1wKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDcpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfYWN0aXZlX2RhdGFzZXQoMSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQsIG1hc3Rlcl9rZXk9S0VZMSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9hY3RpdmVfZGF0YXNldCgxLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCwgbWFzdGVyX2tleT1LRVkxKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhcnRpdGlvbl9pZCgweGZmZmZmZmZmKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfYWN0aXZlX2RhdGFzZXQoMSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQsIG1hc3Rlcl9rZXk9S0VZMSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfYWN0aXZlX2RhdGFzZXQoMSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQsIG1hc3Rlcl9rZXk9S0VZMSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklULCBtYXN0ZXJfa2V5PUtFWTEpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9hY3RpdmVfZGF0YXNldCgxLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCwgbWFzdGVyX2tleT1LRVkxKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfYWN0aXZlX3NldChhY3RpdmVfdGltZXN0YW1wPTIwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lPSdHUkwnKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD0yMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wPTIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTIwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0nU2hvdWxkbm90YmUnKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD0yMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wPTIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTIwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0nTXlIb3VzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX2tleT1LRVkyKQorICAgICAgICB0aW1lLnNsZWVwKDMxMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfbWFzdGVya2V5KCksIEtFWTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9tYXN0ZXJrZXkoKSwgS0VZMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9tYXN0ZXJrZXkoKSwgS0VZMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X21hc3RlcmtleSgpLCBLRVkyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X21hc3RlcmtleSgpLCBLRVkyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X21hc3RlcmtleSgpLCBLRVkxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L01ha2VmaWxlLmFtIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzJlY2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDI4NyBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK0xPR19EUklWRVI9JChhYnNfdG9wX3NyY2RpcikvdGhpcmRfcGFydHkvb3BlbnRocmVhZC10ZXN0LWRyaXZlci90ZXN0LWRyaXZlcgorCitFWFRSQV9ESVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgQ2VydF81XzFfMDFfUm91dGVyQXR0YWNoLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDJfQ2hpbGRBZGRyZXNzVGltZW91dC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDNfUm91dGVyQWRkcmVzc1JlYWxsb2NhdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDRfUm91dGVyQWRkcmVzc1JlYWxsb2NhdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDVfUm91dGVyQWRkcmVzc1RpbWVvdXQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDZfUmVtb3ZlUm91dGVySWQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDdfTWF4Q2hpbGRDb3VudC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDhfUm91dGVyQXR0YWNoQ29ubmVjdGl2aXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDlfUkVFREF0dGFjaENvbm5lY3Rpdml0eS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMTBfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMTFfUkVFREF0dGFjaExpbmtRdWFsaXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMTJfTmV3Um91dGVyTmVpZ2hib3JTeW5jLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMTNfUm91dGVyUmVzZXQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDFfQmVjb21lQWN0aXZlUm91dGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDJfTGVhZGVyUmVqZWN0MUhvcC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDNfTGVhZGVyUmVqZWN0MkhvcHMucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDRfUkVFRFVwZ3JhZGUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDVfQWRkcmVzc1F1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDZfUm91dGVyRG93bmdyYWRlLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDdfUkVFRFN5bmNocm9uaXphdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDFfTGlua0xvY2FsLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDJfUmVhbG1Mb2NhbC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDNfQWRkcmVzc1F1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDRfQWRkcmVzc01hcENhY2hlLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDVfUm91dGluZ0xpbmtRdWFsaXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDZfUm91dGVySWRNYXNrLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDZiX1JvdXRlcklkTWFzay5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDdfRHVwbGljYXRlQWRkcmVzcy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDhfQ2hpbGRBZGRyZXNzU2V0LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDlfQWRkcmVzc1F1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMTBfQWRkcmVzc1F1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDFfTGVhZGVyUmVzZXQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDJfTGVhZGVyUmVib290LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDNfU3BsaXRNZXJnZUNoaWxkcmVuLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDRfU3BsaXRNZXJnZVJvdXRlcnMucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDVfU3BsaXRNZXJnZVJFRUQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDdfU3BsaXRNZXJnZVRocmVlV2F5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDhfU3BsaXRSb3V0ZXJzTG9zdExlYWRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDFfTmV0d29ya0RhdGFSZWdpc3RlckJlZm9yZUF0dGFjaExlYWRlci5weSAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDJfTmV0d29ya0RhdGFSZWdpc3RlckJlZm9yZUF0dGFjaFJvdXRlci5weSAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDNfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoTGVhZGVyLnB5ICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDRfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoUm91dGVyLnB5ICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDVfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoUm91dGVyLnB5ICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDZfTmV0d29ya0RhdGFFeHBpcmF0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDdfTmV0d29ya0RhdGFSZXF1ZXN0UkVFRC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDhfQ29udGV4dE1hbmFnZW1lbnQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDlfTmV0d29ya0RhdGFGb3J3YXJkaW5nLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzhfMDFfS2V5U3luY2hyb25pemF0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzhfMDJfS2V5SW5jcmVtZW50LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzhfMDNfS2V5SW5jcmVtZW50Um9sbE92ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDFfUm91dGVyQXR0YWNoLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDJfUkVFREF0dGFjaC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDNfUm91dGVyQXR0YWNoQ29ubmVjdGl2aXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDRfUkVFREF0dGFjaENvbm5lY3Rpdml0eS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDVfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDZfUkVFREF0dGFjaExpbmtRdWFsaXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDdfRURTeW5jaHJvbml6YXRpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzJfMDFfTmV3UGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzJfMDJfTmV3UGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzNfMDFfT3JwaGFuUmVhdHRhY2gucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzNfMDJfTmV0d29ya0RhdGFVcGRhdGUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzRfMDFfTGlua0xvY2FsLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzRfMDJfUmVhbG1Mb2NhbC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzVfMDFfQ2hpbGRSZXNldFN5bmNocm9uaXplLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzVfMDJfQ2hpbGRSZXNldFJlYXR0YWNoLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzZfMDFfS2V5SW5jcmVtZW50LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzZfMDJfS2V5SW5jcmVtZW50Um9sbE92ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF83XzFfMDFfQm9yZGVyUm91dGVyQXNMZWFkZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF83XzFfMDJfQm9yZGVyUm91dGVyQXNSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF83XzFfMDNfQm9yZGVyUm91dGVyQXNMZWFkZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF83XzFfMDRfQm9yZGVyUm91dGVyQXNSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF83XzFfMDVfQm9yZGVyUm91dGVyQXNSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzFfMDFfQ29tbWlzc2lvbmluZy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzFfMDJfQ29tbWlzc2lvbmluZy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzJfMDFfSm9pbmVyUm91dGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzJfMDJfSm9pbmVyUm91dGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDRfQWN0aXZlRGF0YXNldC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDdfRGVsYXlUaW1lci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDhfUGVyc2lzdGVudERhdGFzZXRzLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDlfUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTBfUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTFfTWFzdGVyS2V5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTJfQW5ub3VuY2UucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTNfRW5lcmd5U2Nhbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTRfUGFuSWRRdWVyeS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTVfUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTZfQWN0aXZlUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTdfT3JwaGFuLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMThfUm9sbEJhY2tBY3RpdmVUaW1lc3RhbXAucHkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29hcC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29uZmlnLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaXB2Ni5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG93cGFuLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFjODAyMTU0LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWVzc2FnZS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWxlLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmV0X2NyeXB0by5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmV0d29ya19kYXRhLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmV0d29ya19sYXllci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbm9kZS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbm9kZV9jbGkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc25pZmZlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc25pZmZlcl90cmFuc3BvcnQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9jb2FwLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9jb21tb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9jcnlwdG8ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9pcHY2LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9sb3dwYW4ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9tYWM4MDIxNTQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9tbGUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9uZXR3b3JrX2RhdGEucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9uZXR3b3JrX2xheWVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitjaGVja19QUk9HUkFNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitjaGVja19TQ1JJUFRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgdGVzdF9jb2FwLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9jb21tb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9jcnlwdG8ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9pcHY2LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9sb3dwYW4ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9tYWM4MDIxNTQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9tbGUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9uZXR3b3JrX2RhdGEucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9uZXR3b3JrX2xheWVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDFfUm91dGVyQXR0YWNoLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDJfQ2hpbGRBZGRyZXNzVGltZW91dC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDNfUm91dGVyQWRkcmVzc1JlYWxsb2NhdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDRfUm91dGVyQWRkcmVzc1JlYWxsb2NhdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDVfUm91dGVyQWRkcmVzc1RpbWVvdXQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDZfUmVtb3ZlUm91dGVySWQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDdfTWF4Q2hpbGRDb3VudC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDhfUm91dGVyQXR0YWNoQ29ubmVjdGl2aXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMDlfUkVFREF0dGFjaENvbm5lY3Rpdml0eS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMTBfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMTFfUkVFREF0dGFjaExpbmtRdWFsaXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMTJfTmV3Um91dGVyTmVpZ2hib3JTeW5jLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzFfMTNfUm91dGVyUmVzZXQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDFfQmVjb21lQWN0aXZlUm91dGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDJfTGVhZGVyUmVqZWN0MUhvcC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDNfTGVhZGVyUmVqZWN0MkhvcHMucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDRfUkVFRFVwZ3JhZGUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDVfQWRkcmVzc1F1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDZfUm91dGVyRG93bmdyYWRlLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzJfMDdfUkVFRFN5bmNocm9uaXphdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDFfTGlua0xvY2FsLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDJfUmVhbG1Mb2NhbC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDNfQWRkcmVzc1F1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDRfQWRkcmVzc01hcENhY2hlLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDVfUm91dGluZ0xpbmtRdWFsaXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDZfUm91dGVySWRNYXNrLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDZiX1JvdXRlcklkTWFzay5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDdfRHVwbGljYXRlQWRkcmVzcy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDhfQ2hpbGRBZGRyZXNzU2V0LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMDlfQWRkcmVzc1F1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzNfMTBfQWRkcmVzc1F1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDFfTGVhZGVyUmVzZXQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDJfTGVhZGVyUmVib290LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDNfU3BsaXRNZXJnZUNoaWxkcmVuLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDRfU3BsaXRNZXJnZVJvdXRlcnMucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDVfU3BsaXRNZXJnZVJFRUQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDdfU3BsaXRNZXJnZVRocmVlV2F5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzVfMDhfU3BsaXRSb3V0ZXJzTG9zdExlYWRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDFfTmV0d29ya0RhdGFSZWdpc3RlckJlZm9yZUF0dGFjaExlYWRlci5weSAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDJfTmV0d29ya0RhdGFSZWdpc3RlckJlZm9yZUF0dGFjaFJvdXRlci5weSAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDNfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoTGVhZGVyLnB5ICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDRfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoUm91dGVyLnB5ICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDVfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoUm91dGVyLnB5ICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDZfTmV0d29ya0RhdGFFeHBpcmF0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDdfTmV0d29ya0RhdGFSZXF1ZXN0UkVFRC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDhfQ29udGV4dE1hbmFnZW1lbnQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzZfMDlfTmV0d29ya0RhdGFGb3J3YXJkaW5nLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzhfMDFfS2V5U3luY2hyb25pemF0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzhfMDJfS2V5SW5jcmVtZW50LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF81XzhfMDNfS2V5SW5jcmVtZW50Um9sbE92ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDFfUm91dGVyQXR0YWNoLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDJfUkVFREF0dGFjaC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDNfUm91dGVyQXR0YWNoQ29ubmVjdGl2aXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDRfUkVFREF0dGFjaENvbm5lY3Rpdml0eS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDVfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDZfUkVFREF0dGFjaExpbmtRdWFsaXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzFfMDdfRURTeW5jaHJvbml6YXRpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzJfMDFfTmV3UGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzJfMDJfTmV3UGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzNfMDFfT3JwaGFuUmVhdHRhY2gucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzNfMDJfTmV0d29ya0RhdGFVcGRhdGUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzRfMDFfTGlua0xvY2FsLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzRfMDJfUmVhbG1Mb2NhbC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzVfMDFfQ2hpbGRSZXNldFN5bmNocm9uaXplLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzVfMDJfQ2hpbGRSZXNldFJlYXR0YWNoLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzZfMDFfS2V5SW5jcmVtZW50LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF82XzZfMDJfS2V5SW5jcmVtZW50Um9sbE92ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF83XzFfMDFfQm9yZGVyUm91dGVyQXNMZWFkZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF83XzFfMDJfQm9yZGVyUm91dGVyQXNSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF83XzFfMDNfQm9yZGVyUm91dGVyQXNMZWFkZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF83XzFfMDRfQm9yZGVyUm91dGVyQXNSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF83XzFfMDVfQm9yZGVyUm91dGVyQXNSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzFfMDFfQ29tbWlzc2lvbmluZy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzFfMDJfQ29tbWlzc2lvbmluZy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzJfMDFfSm9pbmVyUm91dGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzJfMDJfSm9pbmVyUm91dGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDRfQWN0aXZlRGF0YXNldC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDdfRGVsYXlUaW1lci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDhfUGVyc2lzdGVudERhdGFzZXRzLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDlfUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTBfUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTFfTWFzdGVyS2V5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTJfQW5ub3VuY2UucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTNfRW5lcmd5U2Nhbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTRfUGFuSWRRdWVyeS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTVfUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTZfQWN0aXZlUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTdfT3JwaGFuLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMThfUm9sbEJhY2tBY3RpdmVUaW1lc3RhbXAucHkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitURVNUU19FTlZJUk9OTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgZXhwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdG9wX2J1aWxkZGlyPSckKHRvcF9idWlsZGRpciknICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVkVSQk9TRT0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitURVNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChjaGVja19QUk9HUkFNUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChjaGVja19TQ1JJUFRTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitYRkFJTF9OQ1BfVEVTVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgQ2VydF81XzNfMDlfQWRkcmVzc1F1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzFfMDFfQ29tbWlzc2lvbmluZy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzFfMDJfQ29tbWlzc2lvbmluZy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzJfMDFfSm9pbmVyUm91dGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF84XzJfMDJfSm9pbmVyUm91dGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDRfQWN0aXZlRGF0YXNldC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDdfRGVsYXlUaW1lci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDhfUGVyc2lzdGVudERhdGFzZXRzLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMDlfUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTBfUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTFfTWFzdGVyS2V5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTJfQW5ub3VuY2UucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTNfRW5lcmd5U2Nhbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTRfUGFuSWRRdWVyeS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTVfUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTZfQWN0aXZlUGVuZGluZ1BhcnRpdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMTdfT3JwaGFuLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ2VydF85XzJfMThfUm9sbEJhY2tBY3RpdmVUaW1lc3RhbXAucHkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitYRkFJTF9URVNUUyA9ICQoaWYgJChmaWx0ZXIgJChOT0RFX1RZUEUpLG5jcC1zaW0pLCQoWEZBSUxfTkNQX1RFU1RTKSkKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L1Rlc3RfQ2xpLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9UZXN0X0NsaS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OTc2MmQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9UZXN0X0NsaS5weQpAQCAtMCwwICsxLDU1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCisKK2NsYXNzIENlcnRfQ2xpKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0gPSBub2RlLk5vZGUoTEVBREVSKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBjb21tYW5kcyA9IHNlbGYubm9kZXNbTEVBREVSXS5nZXRfY29tbWFuZHMoKQorCisgICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNlbmRfY29tbWFuZChjb21tYW5kICsgJyAtaCcpCisgICAgICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9UZXN0X01hY1NjYW4ucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L1Rlc3RfTWFjU2Nhbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MzE0MjAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9UZXN0X01hY1NjYW4ucHkKQEAgLTAsMCArMSw3NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorCitjbGFzcyBUZXN0X01hY1NjYW4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9jaGFubmVsKDEyKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X25ldHdvcmtfbmFtZSgnT3BlblRocmVhZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9jaGFubmVsKDEyKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X25ldHdvcmtfbmFtZSgnT3BlblRocmVhZCcpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICByZXN1bHRzID0gc2VsZi5ub2Rlc1tMRUFERVJdLnNjYW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzKSwgMTYpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L1Rlc3Rfb3RMd2YucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L1Rlc3Rfb3RMd2YucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2ODZiYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvVGVzdF9vdEx3Zi5weQpAQCAtMCwwICsxLDc3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgY3R5cGVzCisKK2NsYXNzIEdVSUQoY3R5cGVzLlN0cnVjdHVyZSk6CisgICAgX2ZpZWxkc18gPSBbKCJEYXRhMSIsIGN0eXBlcy5jX3VpbnQpLAorICAgICAgICAgICAgICAgICgiRGF0YTIiLCBjdHlwZXMuY191c2hvcnQpLAorICAgICAgICAgICAgICAgICgiRGF0YTMiLCBjdHlwZXMuY191c2hvcnQpLAorICAgICAgICAgICAgICAgICgiRGF0YTQiLCBjdHlwZXMuY191Ynl0ZSAqIDgpXQorICAgIAorY2xhc3Mgb3REZXZpY2VMaXN0KGN0eXBlcy5TdHJ1Y3R1cmUpOgorICAgIF9maWVsZHNfID0gWygiYURldmljZXNMZW5ndGgiLCBjdHlwZXMuY191c2hvcnQpLAorICAgICAgICAgICAgICAgICgiYURldmljZXMiLCBHVUlEICogNjQpXQorCitjbGFzcyBDZXJ0X290THdmKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisKKyAgICAgICAgIyBMb2FkIHRoZSBETEwKKyAgICAgICAgc2VsZi5BcGkgPSBjdHlwZXMuV2luRExMKCJvdEFwaS5kbGwiKQorICAgICAgICBpZiBzZWxmLkFwaSA9PSBOb25lOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiRmFpbGVkIHRvIGxvYWQgb3RBcGkuZGxsISIpCisgICAgICAgIAorICAgICAgICAjIERlZmluZSB0aGUgZnVuY3Rpb25zCisgICAgICAgIHNlbGYuQXBpLm90QXBpSW5pdC5yZXN0eXBlID0gY3R5cGVzLmNfdm9pZF9wCisgICAgICAgIHNlbGYuQXBpLm90QXBpRmluYWxpemUuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorICAgICAgICBzZWxmLkFwaS5vdEFwaUZpbmFsaXplLnJlc3R5cGUgPSBOb25lCisgICAgICAgIHNlbGYuQXBpLm90RnJlZU1lbW9yeS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90RnJlZU1lbW9yeS5yZXN0eXBlID0gTm9uZQorICAgICAgICBzZWxmLkFwaS5vdEVudW1lcmF0ZURldmljZXMuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorICAgICAgICBzZWxmLkFwaS5vdEVudW1lcmF0ZURldmljZXMucmVzdHlwZSA9IGN0eXBlcy5QT0lOVEVSKG90RGV2aWNlTGlzdCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5BcGlJbnN0YW5jZToKKyAgICAgICAgICAgIHNlbGYuQXBpLm90QXBpRmluYWxpemUoc2VsZi5BcGlJbnN0YW5jZSkKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAjIEluc3RhbnRpYXRlIHRoZSBBUEkKKyAgICAgICAgc2VsZi5BcGlJbnN0YW5jZSA9IHNlbGYuQXBpLm90QXBpSW5pdCgpCisgICAgICAgICMgQXNzZXJ0IHRoYXQgaXQgZGlkbid0IHJldHVybiBOVUxMCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5BcGlJbnN0YW5jZSwgTm9uZSkKKyAgICAgICAgIyBRdWVyeSB0aGUgZGV2aWNlIGxpc3QKKyAgICAgICAgZGV2aWNlcyA9IHNlbGYuQXBpLm90RW51bWVyYXRlRGV2aWNlcyhzZWxmLkFwaUluc3RhbmNlKQorICAgICAgICAjIEFzc2VydCB0aGF0IGl0IGRpZG4ndCByZXR1cm4gTlVMTAorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRldmljZXMsIE5vbmUpCisgICAgICAgICMgUHJpbnQgdGhlIG51bWJlciBvZiBkZXZpY2VzCisgICAgICAgIHByaW50KCJkZXZpY2VzIGZvdW5kOiAlZCIgJSBkZXZpY2VzLmNvbnRlbnRzLmFEZXZpY2VzTGVuZ3RoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9fX2luaXRfXy5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTAxNTY0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvX19pbml0X18ucHkKQEAgLTAsMCArMSwyOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvY29hcC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvY29hcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmEzY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9jb2FwLnB5CkBAIC0wLDAgKzEsMzg3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW8KK2ltcG9ydCBzdHJ1Y3QKKworZnJvbSBiaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQorZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtCisKKworY2xhc3MgQ29hcE1lc3NhZ2VUeXBlKEludEVudW0pOgorICAgIENPTiA9IDAgICMgQ29uZmlybWFibGUKKyAgICBOT04gPSAxICAjIE5vbi1jb25maXJtYWJsZQorICAgIEFDSyA9IDIgICMgQWNrbm93bGVkZ2VtZW50CisgICAgUlNUID0gMyAgIyBSZXNldAorCisKK2NsYXNzIENvYXBPcHRpb25zVHlwZXMoSW50RW51bSk6CisgICAgSUZfTUFUQ0ggPSAxCisgICAgVVJJX0hPU1QgPSAzCisgICAgRVRBRyA9IDQKKyAgICBJRl9OT1RfTUFUQ0ggPSA1CisgICAgVVJJX1BPUlQgPSA3CisgICAgTE9DQVRJT05fUEFUSCA9IDgKKyAgICBVUklfUEFUSCA9IDExCisgICAgQ09OVEVOVF9GT1JNQVQgPSAxMgorICAgIE1BWF9BR0UgPSAxNAorICAgIFVSSV9RVUVSWSA9IDE1CisgICAgQUNDRVBUID0gMTcKKyAgICBMT0NBVElPTl9RVUVSWSA9IDIwCisgICAgUFJPWFlfVVJJID0gMzUKKyAgICBQUk9YWV9TQ0hFTUUgPSAzOQorICAgIFNJWkUxID0gNjAKKworCitjbGFzcyBDb2FwT3B0aW9uSGVhZGVyKG9iamVjdCk6CisKKyAgICAiIiIgQ2xhc3MgcmVwcmVzZW50aW5nIENvQVAgb3B0aW9uYSBoZWFkZXIuICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlbHRhLCBsZW5ndGgpOgorICAgICAgICBzZWxmLl9kZWx0YSA9IGRlbHRhCisgICAgICAgIHNlbGYuX2xlbmd0aCA9IGxlbmd0aAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlbHRhKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVsdGEKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsZW5ndGgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9sZW5ndGgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19wYXlsb2FkX21hcmtlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVsdGEgPT0gMHhmIGFuZCBzZWxmLmxlbmd0aCA9PSAweGYKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcmVhZF9leHRlbmRlZF92YWx1ZShjbHMsIGRhdGEsIHZhbHVlKToKKyAgICAgICAgaWYgdmFsdWUgPT0gMTM6CisgICAgICAgICAgICByZXR1cm4gb3JkKGRhdGEucmVhZCgxKSkgKyAxMworICAgICAgICBlbGlmIHZhbHVlID09IDE0OgorICAgICAgICAgICAgZGF0YS5yZWFkKDEpCisgICAgICAgICAgICByZXR1cm4gb3JkKGRhdGEucmVhZCgxKSkgKyAyNjkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fYnl0ZXMoY2xzLCBkYXRhKToKKyAgICAgICAgaW5pdGlhbF9ieXRlID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBkZWx0YSA9IChpbml0aWFsX2J5dGUgPj4gNCkgJiAweGYKKyAgICAgICAgbGVuZ3RoID0gaW5pdGlhbF9ieXRlICYgMHhmCisKKyAgICAgICAgZGVsdGEgPSBjbHMuX3JlYWRfZXh0ZW5kZWRfdmFsdWUoZGF0YSwgZGVsdGEpCisgICAgICAgIGxlbmd0aCA9IGNscy5fcmVhZF9leHRlbmRlZF92YWx1ZShkYXRhLCBsZW5ndGgpCisKKyAgICAgICAgcmV0dXJuIGNscyhkZWx0YSwgbGVuZ3RoKQorCisKK2NsYXNzIENvYXBPcHRpb24ob2JqZWN0KToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgQ29BUCBvcHRpb24uICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIF90eXBlLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3R5cGUgPSBfdHlwZQorICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3R5cGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB2YWx1ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQ29hcE9wdGlvbih0eXBlPXt9LCB2YWx1ZT17fSkiLmZvcm1hdChzZWxmLnR5cGUsIGhleGxpZnkoc2VsZi52YWx1ZSkpCisKKworY2xhc3MgQ29hcE9wdGlvbnNGYWN0b3J5KG9iamVjdCk6CisKKyAgICAiIiIgRmFjdG9yeSB0aGF0IHByb2R1Y2VzIENvQVAgb3B0aW9ucy4gIiIiCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgb3B0aW9ucyA9IFtdCisKKyAgICAgICAgX3R5cGUgPSAwCisgICAgICAgIHdoaWxlIGRhdGEudGVsbCgpIDwgbGVuKGRhdGEuZ2V0dmFsdWUoKSk6CisgICAgICAgICAgICBvcHRpb25faGVhZGVyID0gQ29hcE9wdGlvbkhlYWRlci5mcm9tX2J5dGVzKGRhdGEpCisgICAgICAgICAgICBpZiBvcHRpb25faGVhZGVyLmlzX3BheWxvYWRfbWFya2VyOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIF90eXBlICs9IG9wdGlvbl9oZWFkZXIuZGVsdGEKKyAgICAgICAgICAgIHZhbHVlID0gZGF0YS5yZWFkKG9wdGlvbl9oZWFkZXIubGVuZ3RoKQorCisgICAgICAgICAgICBvcHRpb24gPSBDb2FwT3B0aW9uKF90eXBlLCB2YWx1ZSkKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKG9wdGlvbikKKworICAgICAgICByZXR1cm4gb3B0aW9ucworCisKK2NsYXNzIENvYXBDb2RlKG9iamVjdCk6CisKKyAgICAiIiIgQ2xhc3MgcmVwcmVzZW50aW5nIENvQVAgY29kZS4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29kZSk6CisgICAgICAgIHNlbGYuX2NvZGUgPSBjb2RlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvZGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfY2xhc3Moc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5jb2RlID4+IDUpICYgMHg3CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGV0YWlsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jb2RlICYgMHgxZgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fY2xhc3NfYW5kX2RldGFpbChjbHMsIF9jbGFzcywgZGV0YWlsKToKKyAgICAgICAgcmV0dXJuIGNscygoKF9jbGFzcyAmIDB4NykgPDwgNSkgfCAoZGV0YWlsICYgMHgxZikpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9kb3R0ZWQoY2xzLCBkb3R0ZWRfc3RyKToKKyAgICAgICAgX2NsYXNzLCBkZXRhaWwgPSBkb3R0ZWRfc3RyLnNwbGl0KCIuIikKKyAgICAgICAgcmV0dXJuIGNscy5mcm9tX2NsYXNzX2FuZF9kZXRhaWwoaW50KF9jbGFzcyksIGludChkZXRhaWwpKQorCisgICAgZGVmIGlzX2VxdWFsX2RvdHRlZChzZWxmLCBkb3R0ZWRfY29kZSk6CisgICAgICAgIG90aGVyID0gc2VsZi5mcm9tX2RvdHRlZChkb3R0ZWRfY29kZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY29kZSA9PSBvdGhlci5jb2RlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZG90dGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gIi4iLmpvaW4oWyJ7OjAxZH0iLmZvcm1hdChzZWxmLl9jbGFzcyksICJ7OjAyZH0iLmZvcm1hdChzZWxmLmRldGFpbCldKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGludCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb2RlID09IG90aGVyCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG90aGVyLCBzdHIpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaXNfZXF1YWxfZG90dGVkKG90aGVyKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29kZSA9PSBvdGhlci5jb2RlCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ291bGQgbm90IGNvbXBhcmUge30gYW5kIHt9Ii5mb3JtYXQodHlwZShzZWxmKSwgdHlwZShvdGhlcikpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kb3R0ZWQKKworCitjbGFzcyBDb2FwTWVzc2FnZShvYmplY3QpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBDb0FQIG1lc3NhZ2UuICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcnNpb24sIF90eXBlLCBjb2RlLCBtZXNzYWdlX2lkLCB0b2tlbiwgb3B0aW9ucywgcGF5bG9hZCwgdXJpX3BhdGg9Tm9uZSk6CisgICAgICAgIHNlbGYuX3ZlcnNpb24gPSB2ZXJzaW9uCisgICAgICAgIHNlbGYuX3R5cGUgPSBfdHlwZQorICAgICAgICBzZWxmLl9jb2RlID0gY29kZQorICAgICAgICBzZWxmLl9tZXNzYWdlX2lkID0gbWVzc2FnZV9pZAorICAgICAgICBzZWxmLl90b2tlbiA9IHRva2VuCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3BheWxvYWQgPSBwYXlsb2FkCisgICAgICAgIHNlbGYuX3VyaV9wYXRoID0gdXJpX3BhdGgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB2ZXJzaW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdmVyc2lvbgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHR5cGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90eXBlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvZGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtZXNzYWdlX2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWVzc2FnZV9pZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRva2VuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdG9rZW4KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0a2woc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fdG9rZW4pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX29wdGlvbnMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXlsb2FkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcGF5bG9hZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHVyaV9wYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdXJpX3BhdGgKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgb3B0aW9uc19zdHIgPSAiLCAiLmpvaW4oW3JlcHIob3B0KSBmb3Igb3B0IGluIHNlbGYub3B0aW9uc10pCisgICAgICAgIHJldHVybiAiQ29hcE1lc3NhZ2UodmVyc2lvbj17fSwgdHlwZT17fSwgY29kZT17fSwgbWVzc2FnZV9pZD17fSwgdG9rZW49e30sIG9wdGlvbnM9W3t9XSwgcGF5bG9hZD17fSwgdXJpLXBhdGg9J3t9JykiLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYudmVyc2lvbiwgQ29hcE1lc3NhZ2VUeXBlLm5hbWVbc2VsZi50eXBlXSwgc2VsZi5jb2RlLCBzZWxmLm1lc3NhZ2VfaWQsIGhleGxpZnkoc2VsZi50b2tlbiksCisgICAgICAgICAgICBvcHRpb25zX3N0ciwgc2VsZi5wYXlsb2FkLCBzZWxmLnVyaV9wYXRoKQorCisKK2NsYXNzIENvYXBNZXNzYWdlUHJveHkob2JqZWN0KToKKworICAgICIiIiBQcm94eSBjbGFzcyBvZiBDb0FQIG1lc3NhZ2UuIAorCisgICAgVGhlIG1haW4gaWRlYSBiZWhpbmQgdGhpcyBjbGFzcyBpcyB0byBkZWxheSBwYXJzaW5nIHBheWxvYWQuIER1ZSB0byBhcmNoaXRlY3R1cmUgb2YgdGhlIGV4aXN0aW5nIHNvbHV0aW9uIAorICAgIGl0IGlzIHBvc3NpYmxlIHRvIHByb2Nlc3MgY29uZmlybWF0aW9uIG1lc3NhZ2UgYmVmb3JlIGEgcmVxdWVzdCBtZXNzYWdlLiBJbiBzdWNoIGNhc2UgaXQgaXMgbm90IHBvc3NpYmxlIAorICAgIHRvIGdldCBVUkkgcGF0aCB0byBnZXQgcHJvcGVyIHBheWxvYWQgcGFyc2VyLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvYXBfbWVzc2FnZSwgbWVzc2FnZV9pbmZvLCBtaWRfdG9fdXJpX3BhdGhfYmluZGVyLCB1cmlfcGF0aF9iYXNlZF9wYXlsb2FkX2ZhY3Rvcmllcyk6CisgICAgICAgIHNlbGYuX2NvYXBfbWVzc2FnZSA9IGNvYXBfbWVzc2FnZQorICAgICAgICBzZWxmLl9tZXNzYWdlX2luZm8gPSBtZXNzYWdlX2luZm8KKyAgICAgICAgc2VsZi5fbWlkX3RvX3VyaV9wYXRoX2JpbmRlciA9IG1pZF90b191cmlfcGF0aF9iaW5kZXIKKyAgICAgICAgc2VsZi5fdXJpX3BhdGhfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXMgPSB1cmlfcGF0aF9iYXNlZF9wYXlsb2FkX2ZhY3RvcmllcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2FwX21lc3NhZ2UudmVyc2lvbgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHR5cGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2FwX21lc3NhZ2UudHlwZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2FwX21lc3NhZ2UuY29kZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1lc3NhZ2VfaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2FwX21lc3NhZ2UubWVzc2FnZV9pZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRva2VuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29hcF9tZXNzYWdlLnRva2VuCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGtsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29hcF9tZXNzYWdlLnRrbAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG9wdGlvbnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2FwX21lc3NhZ2Uub3B0aW9ucworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBheWxvYWQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJpbmRlZF91cmlfcGF0aCA9IHNlbGYuX21pZF90b191cmlfcGF0aF9iaW5kZXIuZ2V0X3VyaV9wYXRoX2ZvcihzZWxmLm1lc3NhZ2VfaWQsIHNlbGYudG9rZW4pCisKKyAgICAgICAgICAgIGZhY3RvcnkgPSBzZWxmLl91cmlfcGF0aF9iYXNlZF9wYXlsb2FkX2ZhY3Rvcmllc1tiaW5kZWRfdXJpX3BhdGhdCisKKyAgICAgICAgICAgIHJldHVybiBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oc2VsZi5fY29hcF9tZXNzYWdlLnBheWxvYWQpLCBzZWxmLl9tZXNzYWdlX2luZm8pCisKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2FwX21lc3NhZ2UucGF5bG9hZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHVyaV9wYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29hcF9tZXNzYWdlLnVyaV9wYXRoCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIG9wdGlvbnNfc3RyID0gIiwgIi5qb2luKFtyZXByKG9wdCkgZm9yIG9wdCBpbiBzZWxmLm9wdGlvbnNdKQorICAgICAgICByZXR1cm4gIkNvYXBNZXNzYWdlUHJveHkodmVyc2lvbj17fSwgdHlwZT17fSwgY29kZT17fSwgbWVzc2FnZV9pZD17fSwgdG9rZW49e30sIG9wdGlvbnM9W3t9XSwgcGF5bG9hZD17fSwgdXJpLXBhdGg9J3t9JykiLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYudmVyc2lvbiwgc2VsZi50eXBlLCBzZWxmLmNvZGUsIHNlbGYubWVzc2FnZV9pZCwgaGV4bGlmeShzZWxmLnRva2VuKSwKKyAgICAgICAgICAgIG9wdGlvbnNfc3RyLCBzZWxmLnBheWxvYWQsIHNlbGYudXJpX3BhdGgpCisKKworY2xhc3MgQ29hcE1lc3NhZ2VJZFRvVXJpUGF0aEJpbmRlcjoKKworICAgICIiIiBDbGFzcyBiaW5kcyBtZXNzYWdlIGlkIGFuZCB0b2tlbiB3aXRoIFVSSSBwYXRoLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fdXJpX3BhdGhfYmluZHMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdCkKKworICAgIGRlZiBhZGRfdXJpX3BhdGhfZm9yKHNlbGYsIG1lc3NhZ2VfaWQsIHRva2VuLCB1cmlfcGF0aCk6CisgICAgICAgIHNlbGYuX3VyaV9wYXRoX2JpbmRzW21lc3NhZ2VfaWRdW2hleGxpZnkodG9rZW4pXSA9IHVyaV9wYXRoCisKKyAgICBkZWYgZ2V0X3VyaV9wYXRoX2ZvcihzZWxmLCBtZXNzYWdlX2lkLCB0b2tlbik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl91cmlfcGF0aF9iaW5kc1ttZXNzYWdlX2lkXVtoZXhsaWZ5KHRva2VuKV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgZmluZCBVUkkgUEFUSCBmb3IgbWVzc2FnZV9pZDoge30gYW5kIHRva2VuOiB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQsIGhleGxpZnkodG9rZW4pKSkKKworCitjbGFzcyBDb2FwTWVzc2FnZUZhY3Rvcnkob2JqZWN0KToKKworICAgICIiIiBGYWN0b3J5IHRoYXQgcHJvZHVjZXMgQ29BUCBtZXNzYWdlcy4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9uc19mYWN0b3J5LCB1cmlfcGF0aF9iYXNlZF9wYXlsb2FkX2ZhY3RvcmllcywgbWVzc2FnZV9pZF90b191cmlfcGF0aF9iaW5kZXIpOgorICAgICAgICBzZWxmLl9vcHRpb25zX2ZhY3RvcnkgPSBvcHRpb25zX2ZhY3RvcnkKKyAgICAgICAgc2VsZi5fdXJpX3BhdGhfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXMgPSB1cmlfcGF0aF9iYXNlZF9wYXlsb2FkX2ZhY3RvcmllcworICAgICAgICBzZWxmLl9taWRfdG9fdXJpX3BhdGhfYmluZGVyID0gbWVzc2FnZV9pZF90b191cmlfcGF0aF9iaW5kZXIKKworICAgIGRlZiBfdXJpX3BhdGhfZnJvbShzZWxmLCBvcHRpb25zKToKKyAgICAgICAgdXJpX3BhdGhfb3B0aW9ucyA9IFtdCisKKyAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICAgICAgaWYgb3B0aW9uLnR5cGUgPT0gQ29hcE9wdGlvbnNUeXBlcy5VUklfUEFUSDoKKyAgICAgICAgICAgICAgICB1cmlfcGF0aF9vcHRpb25zLmFwcGVuZChvcHRpb24udmFsdWUuZGVjb2RlKCJ1dGYtOCIpKQorCisgICAgICAgIGlmIG5vdCB1cmlfcGF0aF9vcHRpb25zOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gIi8iICsgIi8iLmpvaW4odXJpX3BhdGhfb3B0aW9ucykKKworICAgIGRlZiBfcGFyc2VfaW5pdGlhbF9ieXRlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGluaXRpYWxfYnl0ZSA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgdmVyc2lvbiA9IChpbml0aWFsX2J5dGUgPj4gNikgJiAweDMKKyAgICAgICAgX3R5cGUgPSBDb2FwTWVzc2FnZVR5cGUoKGluaXRpYWxfYnl0ZSA+PiA0KSAmIDB4MykKKyAgICAgICAgdG9rZW5fbGVuZ3RoID0gaW5pdGlhbF9ieXRlICYgMHhmCisKKyAgICAgICAgcmV0dXJuIHZlcnNpb24sIF90eXBlLCB0b2tlbl9sZW5ndGgKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICB2ZXJzaW9uLCBfdHlwZSwgdG9rZW5fbGVuZ3RoID0gc2VsZi5fcGFyc2VfaW5pdGlhbF9ieXRlKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICBjb2RlID0gQ29hcENvZGUob3JkKGRhdGEucmVhZCgxKSkpCisgICAgICAgIG1lc3NhZ2VfaWQgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgdG9rZW4gPSBkYXRhLnJlYWQodG9rZW5fbGVuZ3RoKQorCisgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRpb25zX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIHVyaV9wYXRoID0gc2VsZi5fdXJpX3BhdGhfZnJvbShvcHRpb25zKQorICAgICAgICBpZiB1cmlfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX21pZF90b191cmlfcGF0aF9iaW5kZXIuYWRkX3VyaV9wYXRoX2ZvcihtZXNzYWdlX2lkLCB0b2tlbiwgdXJpX3BhdGgpCisKKyAgICAgICAgY29hcF9tZXNzYWdlID0gQ29hcE1lc3NhZ2UodmVyc2lvbiwgX3R5cGUsIGNvZGUsIG1lc3NhZ2VfaWQsIHRva2VuLCBvcHRpb25zLCBkYXRhLnJlYWQoKSwgdXJpX3BhdGgpCisKKyAgICAgICAgcmV0dXJuIENvYXBNZXNzYWdlUHJveHkoY29hcF9tZXNzYWdlLCBtZXNzYWdlX2luZm8sIHNlbGYuX21pZF90b191cmlfcGF0aF9iaW5kZXIsIHNlbGYuX3VyaV9wYXRoX2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9jb21tb24ucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L2NvbW1vbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2NiMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9jb21tb24ucHkKQEAgLTAsMCArMSwxNjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCisKK2Zyb20gYmluYXNjaWkgaW1wb3J0IGhleGxpZnkKK2Zyb20gZW51bSBpbXBvcnQgSW50RW51bQorCitpbXBvcnQgaXBhZGRyZXNzCisKKworZGVmIGV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcik6CisgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJFeHBlY3RlZCB0aGUgc2FtZSBjbGFzcy4gR290IHt9IGFuZCB7fSIuZm9ybWF0KHR5cGUoc2VsZiksIHR5cGUob3RoZXIpKSkKKworCitjbGFzcyBNZXNzYWdlSW5mbyhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmF1eF9zZWNfaGRyID0gTm9uZQorICAgICAgICBzZWxmLmF1eF9zZWNfaGRyX2J5dGVzID0gTm9uZQorCisgICAgICAgIHNlbGYubWhyX2J5dGVzID0gTm9uZQorICAgICAgICBzZWxmLm5vbnBheWxvYWRfZmllbGRzID0gTm9uZQorCisgICAgICAgIHNlbGYuc291cmNlX21hY19hZGRyZXNzID0gTm9uZQorICAgICAgICBzZWxmLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gTm9uZQorCisgICAgICAgIHNlbGYuX3NvdXJjZV9pcHY2ID0gTm9uZQorICAgICAgICBzZWxmLl9kZXN0aW5hdGlvbl9pcHY2ID0gTm9uZQorCisgICAgICAgIHNlbGYuX3NyY19wb3J0ID0gTm9uZQorICAgICAgICBzZWxmLl9kc3RfcG9ydCA9IE5vbmUKKworICAgICAgICBzZWxmLnN0YWJsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5wYXlsb2FkX2xlbmd0aCA9IDAKKworICAgIGRlZiBfY29udmVydF92YWx1ZV90b19pcF9hZGRyZXNzKHNlbGYsIHZhbHVlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYnl0ZWFycmF5KToKKyAgICAgICAgICAgIHZhbHVlID0gYnl0ZXModmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpIGFuZCBzeXMudmVyc2lvbl9pbmZvWzBdID09IDI6CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmRlY29kZSgidXRmLTgiKQorCisgICAgICAgIHJldHVybiBpcGFkZHJlc3MuaXBfYWRkcmVzcyh2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzb3VyY2VfaXB2NihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvdXJjZV9pcHY2CisKKyAgICBAc291cmNlX2lwdjYuc2V0dGVyCisgICAgZGVmIHNvdXJjZV9pcHY2KHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fc291cmNlX2lwdjYgPSBzZWxmLl9jb252ZXJ0X3ZhbHVlX3RvX2lwX2FkZHJlc3ModmFsdWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVzdGluYXRpb25faXB2NihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc3RpbmF0aW9uX2lwdjYKKworICAgIEBkZXN0aW5hdGlvbl9pcHY2LnNldHRlcgorICAgIGRlZiBkZXN0aW5hdGlvbl9pcHY2KHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fZGVzdGluYXRpb25faXB2NiA9IHNlbGYuX2NvbnZlcnRfdmFsdWVfdG9faXBfYWRkcmVzcyh2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzcmNfcG9ydChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NyY19wb3J0CisKKyAgICBAc3JjX3BvcnQuc2V0dGVyCisgICAgZGVmIHNyY19wb3J0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fc3JjX3BvcnQgPSB2YWx1ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRzdF9wb3J0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZHN0X3BvcnQKKworICAgIEBkc3RfcG9ydC5zZXR0ZXIKKyAgICBkZWYgZHN0X3BvcnQoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9kc3RfcG9ydCA9IHZhbHVlCisKKworY2xhc3MgTWFjQWRkcmVzc1R5cGUoSW50RW51bSk6CisgICAgU0hPUlQgPSAwCisgICAgTE9ORyA9IDEKKworCitjbGFzcyBNYWNBZGRyZXNzKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFjX2FkZHJlc3MsIF90eXBlLCBiaWdfZW5kaWFuPVRydWUpOgorICAgICAgICBpZiBfdHlwZSA9PSBNYWNBZGRyZXNzVHlwZS5TSE9SVDoKKyAgICAgICAgICAgIGxlbmd0aCA9IDIKKyAgICAgICAgZWxpZiBfdHlwZSA9PSBNYWNBZGRyZXNzVHlwZS5MT05HOgorICAgICAgICAgICAgbGVuZ3RoID0gOAorCisgICAgICAgIGlmIG5vdCBiaWdfZW5kaWFuOgorICAgICAgICAgICAgbWFjX2FkZHJlc3MgPSBtYWNfYWRkcmVzc1s6Oi0xXQorCisgICAgICAgIHNlbGYuX21hY19hZGRyZXNzID0gYnl0ZWFycmF5KG1hY19hZGRyZXNzWzpsZW5ndGhdKQorICAgICAgICBzZWxmLl90eXBlID0gX3R5cGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHlwZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1hY19hZGRyZXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWFjX2FkZHJlc3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBybG9jKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygiPkgiLCBzZWxmLl9tYWNfYWRkcmVzcylbMF0KKworICAgIGRlZiBjb252ZXJ0X3RvX2lpZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fdHlwZSA9PSBNYWNBZGRyZXNzVHlwZS5TSE9SVDoKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmUsIDB4MDBdKSArIHNlbGYuX21hY19hZGRyZXNzWzoyXQorICAgICAgICBlbGlmIHNlbGYuX3R5cGUgPT0gTWFjQWRkcmVzc1R5cGUuTE9ORzoKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoW3NlbGYuX21hY19hZGRyZXNzWzBdIF4gMHgwMl0pICsgc2VsZi5fbWFjX2FkZHJlc3NbMTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IHRvIElJRC4gSW52YWxpZCBNQUMgYWRkcmVzcyB0eXBlOiB7fSIuZm9ybWF0KHNlbGYuX3R5cGUpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fZXVpNjQoY2xzLCBldWk2NCwgYmlnX2VuZGlhbj1UcnVlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXVpNjQsIGJ5dGVhcnJheSk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgTUFDIGFkZHJlc3MgZnJvbSBFVUk2NC4gSW52YWxpZCBkYXRhIHR5cGU6IHt9Ii5mb3JtYXQodHlwZShldWk2NCkpKQorCisgICAgICAgIHJldHVybiBjbHMoZXVpNjQsIE1hY0FkZHJlc3NUeXBlLkxPTkcpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ybG9jMTYoY2xzLCBybG9jMTYsIGJpZ19lbmRpYW49VHJ1ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UocmxvYzE2LCBpbnQpOgorICAgICAgICAgICAgbWFjX2FkZHJlc3MgPSBzdHJ1Y3QucGFjaygiPkgiLCBybG9jMTYpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShybG9jMTYsIGJ5dGVhcnJheSk6CisgICAgICAgICAgICBtYWNfYWRkcmVzcyA9IHJsb2MxNls6Ml0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ291bGQgbm90IGNyZWF0ZSBNQUMgYWRkcmVzcyBmcm9tIFJMT0MxNi4gSW52YWxpZCBkYXRhIHR5cGU6IHt9Ii5mb3JtYXQodHlwZShybG9jMTYpKSkKKworICAgICAgICByZXR1cm4gY2xzKG1hY19hZGRyZXNzLCBNYWNBZGRyZXNzVHlwZS5TSE9SVCkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYudHlwZSA9PSBvdGhlci50eXBlKSBhbmQgKHNlbGYubWFjX2FkZHJlc3MgPT0gb3RoZXIubWFjX2FkZHJlc3MpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTWFjQWRkcmVzcyhtYWNfYWRkcmVzcz1iJ3t9JywgdHlwZT17fSkiLmZvcm1hdChoZXhsaWZ5KHNlbGYubWFjX2FkZHJlc3MpLCBNYWNBZGRyZXNzVHlwZShzZWxmLl90eXBlKSkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvY29uZmlnLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9jb25maWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyNzhhYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvY29uZmlnLnB5CkBAIC0wLDAgKzEsMzA0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IGNvYXAKK2ltcG9ydCBpcHY2CitpbXBvcnQgbG93cGFuCitpbXBvcnQgbWVzc2FnZQoraW1wb3J0IG1sZQoraW1wb3J0IG5ldF9jcnlwdG8KK2ltcG9ydCBuZXR3b3JrX2RhdGEKK2ltcG9ydCBuZXR3b3JrX2xheWVyCitpbXBvcnQgc25pZmZlcgorCitERUZBVUxUX01BU1RFUl9LRVkgPSBieXRlYXJyYXkoWzB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgsIDB4OTksIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4ZWUsIDB4ZmZdKQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfcHJlZml4X3N1Yl90bHZzX2ZhY3RvcmllcygpOgorICAgIHJldHVybiB7CisgICAgICAgIG5ldHdvcmtfZGF0YS5UbHZUeXBlLkhBU19ST1VURTogbmV0d29ya19kYXRhLkhhc1JvdXRlRmFjdG9yeSgKKyAgICAgICAgICAgIHJvdXRlc19mYWN0b3J5PW5ldHdvcmtfZGF0YS5Sb3V0ZXNGYWN0b3J5KAorICAgICAgICAgICAgICAgIHJvdXRlX2ZhY3Rvcnk9bmV0d29ya19kYXRhLlJvdXRlRmFjdG9yeSgpKQorICAgICAgICApLAorICAgICAgICBuZXR3b3JrX2RhdGEuVGx2VHlwZS5CT1JERVJfUk9VVEVSOiBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyRmFjdG9yeSgpLAorICAgICAgICBuZXR3b3JrX2RhdGEuVGx2VHlwZS5MT1dQQU5fSUQ6IG5ldHdvcmtfZGF0YS5Mb3dwYW5JZEZhY3RvcnkoKQorICAgIH0KKworCitkZWYgY3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3ByZWZpeF9zdWJfdGx2c19mYWN0b3J5KCk6CisgICAgcmV0dXJuIG5ldHdvcmtfZGF0YS5QcmVmaXhTdWJUbHZzRmFjdG9yeSgKKyAgICAgICAgc3ViX3RsdnNfZmFjdG9yaWVzPWNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV9wcmVmaXhfc3ViX3RsdnNfZmFjdG9yaWVzKCkpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV9zZXJ2aWNlX3N1Yl90bHZzX2ZhY3RvcmllcygpOgorICAgIHJldHVybiB7CisgICAgICAgIG5ldHdvcmtfZGF0YS5UbHZUeXBlLlNFUlZFUjogbmV0d29ya19kYXRhLlNlcnZlckZhY3RvcnkoKQorICAgIH0KKworCitkZWYgY3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3NlcnZpY2Vfc3ViX3RsdnNfZmFjdG9yeSgpOgorICAgIHJldHVybiBuZXR3b3JrX2RhdGEuU2VydmljZVN1YlRsdnNGYWN0b3J5KAorICAgICAgICBzdWJfdGx2c19mYWN0b3JpZXM9Y3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3NlcnZpY2Vfc3ViX3RsdnNfZmFjdG9yaWVzKCkpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV9jb21taXNzaW9uaW5nX2RhdGFfc3ViX3RsdnNfZmFjdG9yaWVzKCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgbmV0d29ya19kYXRhLk1lc2hjb3BUbHZUeXBlLlNURUVSSU5HX0RBVEE6IG5ldHdvcmtfZGF0YS5TdGVlcmluZ0RhdGFGYWN0b3J5KCksCisgICAgICAgIG5ldHdvcmtfZGF0YS5NZXNoY29wVGx2VHlwZS5CT1JERVJfQUdFTlRfTE9DQVRPUjogbmV0d29ya19kYXRhLkJvcmRlckFnZW50TG9jYXRvckZhY3RvcnkoKSwKKyAgICAgICAgbmV0d29ya19kYXRhLk1lc2hjb3BUbHZUeXBlLkNPTU1JU1NJT05FUl9TRVNTSU9OX0lEOiBuZXR3b3JrX2RhdGEuQ29tbWlzc2lvbmVyU2Vzc2lvbklkRmFjdG9yeSgpLAorICAgICAgICBuZXR3b3JrX2RhdGEuTWVzaGNvcFRsdlR5cGUuQ09NTUlTU0lPTkVSX1VEUF9QT1JUOiBuZXR3b3JrX2RhdGEuQ29tbWlzc2lvbmVyVWRwUG9ydEZhY3RvcnkoKSwKKyAgICB9CisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV9jb21taXNzaW9uaW5nX2RhdGFfc3ViX3RsdnNfZmFjdG9yeSgpOgorICAgIHJldHVybiBuZXR3b3JrX2RhdGEuQ29tbWlzc2lvbmluZ0RhdGFTdWJUbHZzRmFjdG9yeSgKKyAgICAgICAgc3ViX3RsdnNfZmFjdG9yaWVzPWNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV9jb21taXNzaW9uaW5nX2RhdGFfc3ViX3RsdnNfZmFjdG9yaWVzKCkpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV90bHZzX2ZhY3RvcmllcygpOgorICAgIHJldHVybiB7CisgICAgICAgIG5ldHdvcmtfZGF0YS5UbHZUeXBlLlBSRUZJWDogbmV0d29ya19kYXRhLlByZWZpeEZhY3RvcnkoCisgICAgICAgICAgICBzdWJfdGx2c19mYWN0b3J5PWNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV9wcmVmaXhfc3ViX3RsdnNfZmFjdG9yeSgpCisgICAgICAgICksCisgICAgICAgIG5ldHdvcmtfZGF0YS5UbHZUeXBlLlNFUlZJQ0U6IG5ldHdvcmtfZGF0YS5TZXJ2aWNlRmFjdG9yeSgKKyAgICAgICAgICAgIHN1Yl90bHZzX2ZhY3Rvcnk9Y3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3NlcnZpY2Vfc3ViX3RsdnNfZmFjdG9yeSgpCisgICAgICAgICksCisgICAgICAgIG5ldHdvcmtfZGF0YS5UbHZUeXBlLkNPTU1JU1NJT05JTkc6IG5ldHdvcmtfZGF0YS5Db21taXNzaW9uaW5nRGF0YUZhY3RvcnkoCisgICAgICAgICAgICBzdWJfdGx2c19mYWN0b3J5PWNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV9jb21taXNzaW9uaW5nX2RhdGFfc3ViX3RsdnNfZmFjdG9yeSgpCisgICAgICAgICksCisgICAgfQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfdGx2c19mYWN0b3J5KCk6CisgICAgcmV0dXJuIG5ldHdvcmtfZGF0YS5OZXR3b3JrRGF0YVRsdnNGYWN0b3J5KAorICAgICAgICBzdWJfdGx2c19mYWN0b3JpZXM9Y3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3RsdnNfZmFjdG9yaWVzKCkpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X21sZV90bHZfcm91dGU2NF9mYWN0b3J5KCk6CisgICAgcmV0dXJuIG1sZS5Sb3V0ZTY0RmFjdG9yeSgKKyAgICAgICAgbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhX2ZhY3Rvcnk9bWxlLkxpbmtRdWFsaXR5QW5kUm91dGVEYXRhRmFjdG9yeSgpKQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9tbGVfdGx2X25ldHdvcmtfZGF0YV9mYWN0b3J5KCk6CisgICAgcmV0dXJuIG1sZS5OZXR3b3JrRGF0YUZhY3RvcnkoCisgICAgICAgIG5ldHdvcmtfZGF0YV90bHZzX2ZhY3Rvcnk9Y3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3RsdnNfZmFjdG9yeSgpKQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9tbGVfdGx2X2FkZHJlc3NfcmVnaXN0cmF0aW9uX2ZhY3RvcnkoKToKKyAgICByZXR1cm4gbWxlLkFkZHJlc3NSZWdpc3RyYXRpb25GYWN0b3J5KAorICAgICAgICBhZGRyX2NvbXByZXNzZWRfZmFjdG9yeT1tbGUuQWRkcmVzc0NvbXByZXNzZWRGYWN0b3J5KCksCisgICAgICAgIGFkZHJfZnVsbF9mYWN0b3J5PW1sZS5BZGRyZXNzRnVsbEZhY3RvcnkoKSkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfbWxlX3RsdnNfZmFjdG9yaWVzKCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgbWxlLlRsdlR5cGUuU09VUkNFX0FERFJFU1M6IG1sZS5Tb3VyY2VBZGRyZXNzRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5NT0RFOiBtbGUuTW9kZUZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuVElNRU9VVDogbWxlLlRpbWVvdXRGYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLkNIQUxMRU5HRTogbWxlLkNoYWxsZW5nZUZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuUkVTUE9OU0U6IG1sZS5SZXNwb25zZUZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuTElOS19MQVlFUl9GUkFNRV9DT1VOVEVSOiBtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5NTEVfRlJBTUVfQ09VTlRFUjogbWxlLk1sZUZyYW1lQ291bnRlckZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuUk9VVEU2NDogY3JlYXRlX2RlZmF1bHRfbWxlX3Rsdl9yb3V0ZTY0X2ZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuQUREUkVTUzE2OiBtbGUuQWRkcmVzczE2RmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5MRUFERVJfREFUQTogbWxlLkxlYWRlckRhdGFGYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLk5FVFdPUktfREFUQTogY3JlYXRlX2RlZmF1bHRfbWxlX3Rsdl9uZXR3b3JrX2RhdGFfZmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5UTFZfUkVRVUVTVDogbWxlLlRsdlJlcXVlc3RGYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLlNDQU5fTUFTSzogbWxlLlNjYW5NYXNrRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5DT05ORUNUSVZJVFk6IG1sZS5Db25uZWN0aXZpdHlGYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLkxJTktfTUFSR0lOOiBtbGUuTGlua01hcmdpbkZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuU1RBVFVTOiBtbGUuU3RhdHVzRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5WRVJTSU9OOiBtbGUuVmVyc2lvbkZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuQUREUkVTU19SRUdJU1RSQVRJT046IGNyZWF0ZV9kZWZhdWx0X21sZV90bHZfYWRkcmVzc19yZWdpc3RyYXRpb25fZmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5DSEFOTkVMOiBtbGUuQ2hhbm5lbEZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuUEFOSUQ6IG1sZS5QYW5JZEZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuQUNUSVZFX1RJTUVTVEFNUDogbWxlLkFjdGl2ZVRpbWVzdGFtcEZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuUEVORElOR19USU1FU1RBTVA6IG1sZS5QZW5kaW5nVGltZXN0YW1wRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5BQ1RJVkVfT1BFUkFUSU9OQUxfREFUQVNFVDogbWxlLkFjdGl2ZU9wZXJhdGlvbmFsRGF0YXNldEZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuUEVORElOR19PUEVSQVRJT05BTF9EQVRBU0VUOiBtbGUuUGVuZGluZ09wZXJhdGlvbmFsRGF0YXNldEZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuVEhSRUFEX0RJU0NPVkVSWTogbWxlLlRocmVhZERpc2NvdmVyeUZhY3RvcnkoKQorICAgIH0KKworCitkZWYgY3JlYXRlX2RlZmF1bHRfbWxlX2NyeXB0b19lbmdpbmUobWFzdGVyX2tleSk6CisgICAgcmV0dXJuIG5ldF9jcnlwdG8uQ3J5cHRvRW5naW5lKGNyeXB0b19tYXRlcmlhbF9jcmVhdG9yPW5ldF9jcnlwdG8uTWxlQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yKG1hc3Rlcl9rZXkpKQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9tbGVfbWVzc2FnZV9mYWN0b3J5KG1hc3Rlcl9rZXkpOgorICAgIHJldHVybiBtbGUuTWxlTWVzc2FnZUZhY3RvcnkoCisgICAgICAgIGF1eF9zZWNfaGRyX2ZhY3Rvcnk9bmV0X2NyeXB0by5BdXhpbGlhcnlTZWN1cml0eUhlYWRlckZhY3RvcnkoKSwKKyAgICAgICAgbWxlX2NvbW1hbmRfZmFjdG9yeT1tbGUuTWxlQ29tbWFuZEZhY3RvcnkoCisgICAgICAgICAgICB0bHZzX2ZhY3Rvcmllcz1jcmVhdGVfZGVmYXVsdF9tbGVfdGx2c19mYWN0b3JpZXMoKSksCisgICAgICAgIGNyeXB0b19lbmdpbmU9Y3JlYXRlX2RlZmF1bHRfbWxlX2NyeXB0b19lbmdpbmUobWFzdGVyX2tleSkpCisKKworZGVmIGNyZWF0ZV9kZWFmdWx0X25ldHdvcmtfdGx2c19mYWN0b3JpZXMoKToKKyAgICByZXR1cm4geworICAgICAgICBuZXR3b3JrX2xheWVyLlRsdlR5cGUuVEFSR0VUX0VJRDogbmV0d29ya19sYXllci5UYXJnZXRFaWRGYWN0b3J5KCksCisgICAgICAgIG5ldHdvcmtfbGF5ZXIuVGx2VHlwZS5NQUNfRVhURU5ERURfQUREUkVTUzogbmV0d29ya19sYXllci5NYWNFeHRlbmRlZEFkZHJlc3NGYWN0b3J5KCksCisgICAgICAgIG5ldHdvcmtfbGF5ZXIuVGx2VHlwZS5STE9DMTY6IG5ldHdvcmtfbGF5ZXIuUmxvYzE2RmFjdG9yeSgpLAorICAgICAgICBuZXR3b3JrX2xheWVyLlRsdlR5cGUuTUxfRUlEOiBuZXR3b3JrX2xheWVyLk1sRWlkRmFjdG9yeSgpLAorICAgICAgICBuZXR3b3JrX2xheWVyLlRsdlR5cGUuU1RBVFVTOiBuZXR3b3JrX2xheWVyLlN0YXR1c0ZhY3RvcnkoKSwKKyAgICAgICAgbmV0d29ya19sYXllci5UbHZUeXBlLlRJTUVfU0lOQ0VfTEFTVF9UUkFOU0FDVElPTjogbmV0d29ya19sYXllci5UaW1lU2luY2VMYXN0VHJhbnNhY3Rpb25GYWN0b3J5KCksCisgICAgICAgIG5ldHdvcmtfbGF5ZXIuVGx2VHlwZS5ST1VURVJfTUFTSzogbmV0d29ya19sYXllci5Sb3V0ZXJNYXNrRmFjdG9yeSgpLAorICAgICAgICBuZXR3b3JrX2xheWVyLlRsdlR5cGUuTkRfT1BUSU9OOiBuZXR3b3JrX2xheWVyLk5kT3B0aW9uRmFjdG9yeSgpLAorICAgICAgICBuZXR3b3JrX2xheWVyLlRsdlR5cGUuTkRfREFUQTogbmV0d29ya19sYXllci5OZERhdGFGYWN0b3J5KCksCisgICAgICAgIG5ldHdvcmtfbGF5ZXIuVGx2VHlwZS5USFJFQURfTkVUV09SS19EQVRBOiBuZXR3b3JrX2xheWVyLlRocmVhZE5ldHdvcmtEYXRhRmFjdG9yeShjcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfdGx2c19mYWN0b3J5KSwKKworICAgICAgICAjIFJvdXRpbmcgaW5mb3JtYXRpb24gYXJlIGRpc3RyaWJ1dGVkIGluIGEgVGhyZWFkIG5ldHdvcmsgYnkgTUxFIFJvdXRpbmcgVExWCisgICAgICAgICMgd2hpY2ggaXMgaW4gZmFjdCBNTEUgUm91dGU2NCBUTFYuIFRocmVhZCBzcGVjaWZpY2F0b24gdjEuMS4gLSBDaGFwdGVyIDUuMjAKKyAgICAgICAgbmV0d29ya19sYXllci5UbHZUeXBlLk1MRV9ST1VUSU5HOiBjcmVhdGVfZGVmYXVsdF9tbGVfdGx2X3JvdXRlNjRfZmFjdG9yeSgpCisgICAgfQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9uZXR3b3JrX3RsdnNfZmFjdG9yeSgpOgorICAgIHJldHVybiBuZXR3b3JrX2xheWVyLk5ldHdvcmtMYXllclRsdnNGYWN0b3J5KAorICAgICAgICB0bHZzX2ZhY3Rvcmllcz1jcmVhdGVfZGVhZnVsdF9uZXR3b3JrX3RsdnNfZmFjdG9yaWVzKCkpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X3VyaV9wYXRoX2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzKCk6CisgICAgbmV0d29ya19sYXllcl90bHZzX2ZhY3RvcnkgPSBjcmVhdGVfZGVmYXVsdF9uZXR3b3JrX3RsdnNfZmFjdG9yeSgpCisKKyAgICByZXR1cm4geworICAgICAgICAiL2EvYXMiOiBuZXR3b3JrX2xheWVyX3RsdnNfZmFjdG9yeSwKKyAgICAgICAgIi9hL2FxIjogbmV0d29ya19sYXllcl90bHZzX2ZhY3RvcnksCisgICAgICAgICIvYS9hbiI6IG5ldHdvcmtfbGF5ZXJfdGx2c19mYWN0b3J5CisgICAgfQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9jb2FwX21lc3NhZ2VfZmFjdG9yeSgpOgorICAgIHJldHVybiBjb2FwLkNvYXBNZXNzYWdlRmFjdG9yeShvcHRpb25zX2ZhY3Rvcnk9Y29hcC5Db2FwT3B0aW9uc0ZhY3RvcnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpX3BhdGhfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXM9Y3JlYXRlX2RlZmF1bHRfdXJpX3BhdGhfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZF90b191cmlfcGF0aF9iaW5kZXI9Y29hcC5Db2FwTWVzc2FnZUlkVG9VcmlQYXRoQmluZGVyKCkpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X2lwdjZfaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3RvcmllcygpOgorICAgIHJldHVybiB7CisgICAgICAgIDEwOTogaXB2Ni5NUExPcHRpb25GYWN0b3J5KCkKKyAgICB9CisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X2lwdjZfaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3RvcnkoKToKKyAgICByZXR1cm4gaXB2Ni5Ib3BCeUhvcE9wdGlvbnNGYWN0b3J5KAorICAgICAgICBvcHRpb25zX2ZhY3Rvcmllcz1jcmVhdGVfZGVmYXVsdF9pcHY2X2hvcF9ieV9ob3Bfb3B0aW9uc19mYWN0b3JpZXMoKSkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfYmFzZWRfb25fc3JjX2RzdF9wb3J0c191ZHBfcGF5bG9hZF9mYWN0b3J5KG1hc3Rlcl9rZXkpOgorICAgIG1sZV9tZXNzYWdlX2ZhY3RvcnkgPSBjcmVhdGVfZGVmYXVsdF9tbGVfbWVzc2FnZV9mYWN0b3J5KG1hc3Rlcl9rZXkpCisgICAgY29hcF9tZXNzYWdlX2ZhY3RvcnkgPSBjcmVhdGVfZGVmYXVsdF9jb2FwX21lc3NhZ2VfZmFjdG9yeSgpCisKKyAgICByZXR1cm4gaXB2Ni5VZHBCYXNlZE9uU3JjRHN0UG9ydHNQYXlsb2FkRmFjdG9yeSgKKyAgICAgICAgc3JjX2RzdF9wb3J0X2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgIDE5Nzg4OiBtbGVfbWVzc2FnZV9mYWN0b3J5LAorICAgICAgICAgICAgNjE2MzE6IGNvYXBfbWVzc2FnZV9mYWN0b3J5CisgICAgICAgIH0KKyAgICApCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X2lwdjZfaWNtcF9ib2R5X2ZhY3RvcmllcygpOgorICAgIHJldHVybiB7CisgICAgICAgIGlwdjYuSUNNUF9ERVNUSU5BVElPTl9VTlJFQUNIQUJMRTogaXB2Ni5JQ01QdjZEZXN0aW5hdGlvblVucmVhY2hhYmxlRmFjdG9yeSgpLAorICAgICAgICBpcHY2LklDTVBfRUNIT19SRVFVRVNUOiBpcHY2LklDTVB2NkVjaG9Cb2R5RmFjdG9yeSgpLAorICAgICAgICBpcHY2LklDTVBfRUNIT19SRVNQT05TRTogaXB2Ni5JQ01QdjZFY2hvQm9keUZhY3RvcnkoKSwKKyAgICAgICAgImRlZmF1bHQiOiBpcHY2LkJ5dGVzUGF5bG9hZEZhY3RvcnkoKQorICAgIH0KKworCitkZWYgY3JlYXRlX2RlZmF1bHRfaXB2Nl91cHBlcl9sYXllcl9mYWN0b3JpZXMobWFzdGVyX2tleSk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgaXB2Ni5JUFY2X05FWFRfSEVBREVSX1VEUDogaXB2Ni5VRFBEYXRhZ3JhbUZhY3RvcnkoCisgICAgICAgICAgICB1ZHBfaGVhZGVyX2ZhY3Rvcnk9aXB2Ni5VRFBIZWFkZXJGYWN0b3J5KCksCisgICAgICAgICAgICB1ZHBfcGF5bG9hZF9mYWN0b3J5PWNyZWF0ZV9kZWZhdWx0X2Jhc2VkX29uX3NyY19kc3RfcG9ydHNfdWRwX3BheWxvYWRfZmFjdG9yeShtYXN0ZXJfa2V5KQorICAgICAgICApLAorICAgICAgICBpcHY2LklQVjZfTkVYVF9IRUFERVJfSUNNUDogaXB2Ni5JQ01QdjZGYWN0b3J5KAorICAgICAgICAgICAgYm9keV9mYWN0b3JpZXM9Y3JlYXRlX2RlZmF1bHRfaXB2Nl9pY21wX2JvZHlfZmFjdG9yaWVzKCkKKyAgICAgICAgKQorICAgIH0KKworCitkZWYgY3JlYXRlX2RlZmF1bHRfbG93cGFuX2V4dGVuc2lvbl9oZWFkZXJzX2ZhY3RvcmllcygpOgorICAgIHJldHVybiB7CisgICAgICAgIGlwdjYuSVBWNl9ORVhUX0hFQURFUl9IT1BfQllfSE9QOiBsb3dwYW4uTG93cGFuSG9wQnlIb3BGYWN0b3J5KAorICAgICAgICAgICAgaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3Rvcnk9Y3JlYXRlX2RlZmF1bHRfaXB2Nl9ob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yeSgpCisgICAgICAgICkKKyAgICB9CisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X2lwdjZfZXh0ZW5zaW9uX2hlYWRlcnNfZmFjdG9yaWVzKCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgaXB2Ni5JUFY2X05FWFRfSEVBREVSX0hPUF9CWV9IT1A6ICBpcHY2LkhvcEJ5SG9wRmFjdG9yeSgKKyAgICAgICAgICAgIGhvcF9ieV9ob3Bfb3B0aW9uc19mYWN0b3J5PWNyZWF0ZV9kZWZhdWx0X2lwdjZfaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3RvcnkoKSkKKyAgICB9CisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X2lwdjZfcGFja2V0X2ZhY3RvcnkobWFzdGVyX2tleSk6CisgICAgcmV0dXJuIGlwdjYuSVB2NlBhY2tldEZhY3RvcnkoCisgICAgICAgIGVoZj1jcmVhdGVfZGVmYXVsdF9pcHY2X2V4dGVuc2lvbl9oZWFkZXJzX2ZhY3RvcmllcygpLAorICAgICAgICB1bHBmPWNyZWF0ZV9kZWZhdWx0X2lwdjZfdXBwZXJfbGF5ZXJfZmFjdG9yaWVzKG1hc3Rlcl9rZXkpCisgICAgKQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fZGVjb21wcmVzc29yKGNvbnRleHRfbWFuYWdlcik6CisgICAgcmV0dXJuIGxvd3Bhbi5Mb3dwYW5EZWNvbXByZXNzb3IoCisgICAgICAgIGxvd3Bhbl9pcF9oZWFkZXJfZmFjdG9yeT1sb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoCisgICAgICAgICAgICBjb250ZXh0X21hbmFnZXI9Y29udGV4dF9tYW5hZ2VyCisgICAgICAgICksCisgICAgICAgIGxvd3Bhbl9leHRlbnNpb25faGVhZGVyc19mYWN0b3J5PWxvd3Bhbi5Mb3dwYW5FeHRlbnNpb25IZWFkZXJzRmFjdG9yeSgKKyAgICAgICAgICAgIGV4dF9oZWFkZXJzX2ZhY3Rvcmllcz1jcmVhdGVfZGVmYXVsdF9sb3dwYW5fZXh0ZW5zaW9uX2hlYWRlcnNfZmFjdG9yaWVzKCkKKyAgICAgICAgKSwKKyAgICAgICAgbG93cGFuX3VkcF9oZWFkZXJfZmFjdG9yeT1sb3dwYW4uTG93cGFuVWRwSGVhZGVyRmFjdG9yeSgpCisgICAgKQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF90aHJlYWRfY29udGV4dF9tYW5hZ2VyKCk6CisgICAgY29udGV4dF9tYW5hZ2VyID0gbG93cGFuLkNvbnRleHRNYW5hZ2VyKCkKKyAgICBjb250ZXh0X21hbmFnZXJbMF0gPSBsb3dwYW4uQ29udGV4dCgiZmQwMDowZGI4OjovNjQiKQorCisgICAgcmV0dXJuIGNvbnRleHRfbWFuYWdlcgorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlciwgbWFzdGVyX2tleT1ERUZBVUxUX01BU1RFUl9LRVkpOgorICAgIHJldHVybiBsb3dwYW4uTG93cGFuUGFyc2VyKAorICAgICAgICBsb3dwYW5fbWVzaF9oZWFkZXJfZmFjdG9yeT1sb3dwYW4uTG93cGFuTWVzaEhlYWRlckZhY3RvcnkoKSwKKyAgICAgICAgbG93cGFuX2RlY29tcHJlc3Nvcj1jcmVhdGVfZGVmYXVsdF9sb3dwYW5fZGVjb21wcmVzc29yKGNvbnRleHRfbWFuYWdlciksCisgICAgICAgIGxvd3Bhbl9mcmFnZW1lbnRzX2J1ZmZlcnNfbWFuYWdlcj1sb3dwYW4uTG93cGFuRnJhZ21lbnRzQnVmZmVyc01hbmFnZXIoKSwKKyAgICAgICAgaXB2Nl9wYWNrZXRfZmFjdG9yeT1jcmVhdGVfZGVmYXVsdF9pcHY2X3BhY2tldF9mYWN0b3J5KG1hc3Rlcl9rZXkpCisgICAgKQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF90aHJlYWRfbWVzc2FnZV9mYWN0b3J5KG1hc3Rlcl9rZXk9REVGQVVMVF9NQVNURVJfS0VZKToKKyAgICBjb250ZXh0X21hbmFnZXIgPSBjcmVhdGVfZGVmYXVsdF90aHJlYWRfY29udGV4dF9tYW5hZ2VyKCkKKyAgICBsb3dwYW5fcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIsIG1hc3Rlcl9rZXkpCisKKyAgICByZXR1cm4gbWVzc2FnZS5NZXNzYWdlRmFjdG9yeShsb3dwYW5fcGFyc2VyPWxvd3Bhbl9wYXJzZXIpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X3RocmVhZF9zbmlmZmVyKG5vZGVpZCk6CisgICAgcmV0dXJuIHNuaWZmZXIuU25pZmZlcihub2RlaWQsIGNyZWF0ZV9kZWZhdWx0X3RocmVhZF9tZXNzYWdlX2ZhY3RvcnkoKSkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvaXB2Ni5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvaXB2Ni5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjQwNDdiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9pcHY2LnB5CkBAIC0wLDAgKzEsMTE0OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBhYmMKK2ltcG9ydCBpbworaW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworCitmcm9tIGJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5Citmcm9tIGlwYWRkcmVzcyBpbXBvcnQgaXBfYWRkcmVzcworCit0cnk6CisgICAgZnJvbSBpdGVydG9vbHMgaW1wb3J0IGl6aXBfbG9uZ2VzdCBhcyB6aXBfbG9uZ2VzdAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gaXRlcnRvb2xzIGltcG9ydCB6aXBfbG9uZ2VzdAorCisKKyMgTmV4dCBoZWFkZXJzIGZvciBJUHY2IHByb3RvY29scworSVBWNl9ORVhUX0hFQURFUl9IT1BfQllfSE9QID0gMAorSVBWNl9ORVhUX0hFQURFUl9UQ1AgPSA2CitJUFY2X05FWFRfSEVBREVSX1VEUCA9IDE3CitJUFY2X05FWFRfSEVBREVSX0lDTVAgPSA1OAorCitVUFBFUl9MQVlFUl9QUk9UT0NPTFMgPSBbCisgICAgSVBWNl9ORVhUX0hFQURFUl9UQ1AsCisgICAgSVBWNl9ORVhUX0hFQURFUl9VRFAsCisgICAgSVBWNl9ORVhUX0hFQURFUl9JQ01QLAorXQorCisjIElDTVAgUHJvdG9jb2wgY29kZXMKK0lDTVBfREVTVElOQVRJT05fVU5SRUFDSEFCTEUgPSAxCitJQ01QX0VDSE9fUkVRVUVTVCA9IDEyOAorSUNNUF9FQ0hPX1JFU1BPTlNFID0gMTI5CisKKyMgRGVmYXVsdCBob3AgbGltaXQgZm9yIElQdjYKK0hPUF9MSU1JVF9ERUZBVUxUID0gNjQKKworCitkZWYgY2FsY3VsYXRlX2NoZWNrc3VtKGRhdGEpOgorICAgICIiIiBDYWxjdWxhdGUgY2hlY2tzdW0gZnJvbSBkYXRhIGJ5dGVzLgorCisgICAgSG93IHRvIGNhbGN1bGF0ZSBjaGVja3N1bSAoUkZDIDI0NjApOgorICAgICAgICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjQ2MCNwYWdlLTI3CisKKyAgICBBcmdzOgorICAgICAgICBkYXRhIChieXRlcyk6IGlucHV0IGRhdGEgZnJvbSB3aGljaCBjaGVja3N1bSB3aWxsIGJlIGNhbGN1bGF0ZWQKKworICAgIFJldHVybnM6CisgICAgICAgIGludDogY2FsY3VsYXRlZCBjaGVja3N1bQorICAgICIiIgorICAgICMgQ3JlYXRlIGhhbGZ3b3JkcyBmcm9tIGRhdGEgYnl0ZXMuIEV4YW1wbGU6IGRhdGFbMF0gPSAweDAxLCBkYXRhWzFdID0gMHhiMiA9PiAweDAxYjIKKyAgICBoYWxmd29yZHMgPSBbKChieXRlMCA8PCA4KSB8IGJ5dGUxKSBmb3IgYnl0ZTAsIGJ5dGUxIGluIHppcF9sb25nZXN0KGRhdGFbOjoyXSwgZGF0YVsxOjoyXSwgZmlsbHZhbHVlPTB4MDApXQorCisgICAgY2hlY2tzdW0gPSAwCisgICAgZm9yIGhhbGZ3b3JkIGluIGhhbGZ3b3JkczoKKyAgICAgICAgY2hlY2tzdW0gKz0gaGFsZndvcmQKKyAgICAgICAgY2hlY2tzdW0gPSAoY2hlY2tzdW0gJiAweEZGRkYpICsgKGNoZWNrc3VtID4+IDE2KQorCisgICAgY2hlY2tzdW0gXj0gMHhGRkZGCisKKyAgICBpZiBjaGVja3N1bSA9PSAwOgorICAgICAgICByZXR1cm4gMHhGRkZGCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGNoZWNrc3VtCisKKworY2xhc3MgUGFja2V0RmFjdG9yeShvYmplY3QpOgorCisgICAgIiIiIEludGVyZmFjZSBmb3IgY2xhc3NlcyB0aGF0IHByb2R1Y2Ugb2JqZWN0cyBmcm9tIGRhdGEuICIiIgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgICIiIiBDb252ZXJ0IGRhdGEgdG8gb2JqZWN0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBkYXRhIChCeXRlc0lPKQorICAgICAgICAgICAgbWVzc2FnZV9pbmZvIChNZXNzYWdlSW5mbykKKworICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIEJ1aWxkYWJsZUZyb21CeXRlcyhvYmplY3QpOgorCisgICAgIiIiIEludGVyZmFjZSBmb3IgY2xhc3NlcyB3aGljaCBjYW4gYmUgYnVpbHQgZnJvbSBieXRlcy4gIiIiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ieXRlcyhjbHMsIGRhdGEpOgorICAgICAgICAiIiIgQ29udmVydCBkYXRhIHRvIG9iamVjdC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZGF0YSAoYnl0ZXMpCisKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBDb252ZXJ0aWJsZVRvQnl0ZXMob2JqZWN0KToKKworICAgICIiIiBJbnRlcmZhY2UgZm9yIGNsYXNzZXMgd2hpY2ggY2FuIGJlIGNvbnZlcnRlZCB0byBieXRlcy4gIiIiCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgICIiIiBDb252ZXJ0IG9iamVjdCB0byBkYXRhLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBieXRlcworICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICIiIiBMZW5ndGggb2YgZGF0YSAoaW4gYnl0ZXMpLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBpbnQKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBIZWFkZXIob2JqZWN0KToKKworICAgICIiIiBJbnRlcmZhY2UgZm9yIGhlYWRlciBjbGFzc2VzLiAiIiIKKworICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorCisgICAgQGFiYy5hYnN0cmFjdHByb3BlcnR5CisgICAgZGVmIHR5cGUoc2VsZik6CisgICAgICAgICIiIiBOdW1iZXIgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIG5leHQgaGVhZGVyIGZpZWxkIGluIElQdjYgaGVhZGVyIG9yIG5leHQgaGVhZGVycy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgaW50CisgICAgICAgICIiIgorCisKK2NsYXNzIEV4dGVuc2lvbkhlYWRlcihvYmplY3QpOgorCisgICAgIiIiIEJhc2UgZm9yIGNsYXNzZXMgcmVwcmVzZW50aW5nIEV4dGVuc2lvbiBIZWFkZXJzIGluIElQdjYgcGFja2V0cy4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmV4dF9oZWFkZXIsIGhkcl9leHRfbGVuPTApOgorICAgICAgICBzZWxmLm5leHRfaGVhZGVyID0gbmV4dF9oZWFkZXIKKyAgICAgICAgc2VsZi5oZHJfZXh0X2xlbiA9IGhkcl9leHRfbGVuCisKKworY2xhc3MgVXBwZXJMYXllclByb3RvY29sKEhlYWRlciwgQ29udmVydGlibGVUb0J5dGVzKToKKworICAgICIiIiBCYXNlIGZvciBjbGFzc2VzIHJlcHJlc2VudGluZyB1cHBlciBsYXllciBwcm90b2NvbCBwYXlsb2FkIGluIElQdjYgcGFja2V0cy4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGVhZGVyKToKKyAgICAgICAgc2VsZi5oZWFkZXIgPSBoZWFkZXIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjaGVja3N1bShzZWxmKToKKyAgICAgICAgIiIiIFJldHVybiBjaGVja3N1bSBmcm9tIHVwcGVyIGxheWVyIHByb3RvY29sIGhlYWRlci4gIiIiCisgICAgICAgIHJldHVybiBzZWxmLmhlYWRlci5jaGVja3N1bQorCisgICAgQGNoZWNrc3VtLnNldHRlcgorICAgIGRlZiBjaGVja3N1bShzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIiBTZXQgY2hlY2tzdW0gdmFsdWUgaW4gdXBwZXIgbGF5ZXIgcHJvdG9jb2wgaGVhZGVyLiAiIiIKKyAgICAgICAgc2VsZi5oZWFkZXIuY2hlY2tzdW0gPSB2YWx1ZQorCisgICAgZGVmIGlzX3ZhbGlkX2NoZWNrc3VtKHNlbGYpOgorICAgICAgICAiIiIgUmV0dXJuIGluZm9ybWF0aW9uIGlmIHNldCBjaGVja3N1bSBpcyB2YWxpZC4KKworICAgICAgICBJdCBpcyBub3QgcG9zc2libGUgdG8gZ2V0IHplcm8gZnJvbSBjaGVja3N1bSBjYWxjdWxhdGlvbi4KKyAgICAgICAgWmVybyBpbmRpY2F0ZXMgaW52YWxpZCBjaGVja3N1bSB2YWx1ZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgYm9vbAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuY2hlY2tzdW0gIT0gMAorCisKK2NsYXNzIElQdjZQc2V1ZG9IZWFkZXIoQ29udmVydGlibGVUb0J5dGVzKToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgSVB2NiBwc2V1ZG8gaGVhZGVyIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGNhbGN1bGF0ZQorICAgIHVwcGVyIGxheWVyIHByb3RvY29sIChsaWtlIGUuZy4gVURQIG9yIElDTVB2NikgY2hlY2tzdW0uCisKKyAgICBUaGlzIGNsYXNzIGlzIHVzZWQgb25seSBkdXJpbmcgdXBwZXIgbGF5ZXIgcHJvdG9jb2wgY2hlY2tzdW0gY2FsY3VsYXRpb24uIERvIG5vdCB1c2UgaXQgb3V0c2lkZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZV9hZGRyZXNzLCBkZXN0aW5hdGlvbl9hZGRyZXNzLCBwYXlsb2FkX2xlbmd0aCwgbmV4dF9oZWFkZXIpOgorICAgICAgICBzZWxmLl9zb3VyY2VfYWRkcmVzcyA9IHNlbGYuX2NvbnZlcnRfdG9faXBhZGRyZXNzKHNvdXJjZV9hZGRyZXNzKQorICAgICAgICBzZWxmLl9kZXN0aW5hdGlvbl9hZGRyZXNzID0gc2VsZi5fY29udmVydF90b19pcGFkZHJlc3MoZGVzdGluYXRpb25fYWRkcmVzcykKKyAgICAgICAgc2VsZi5wYXlsb2FkX2xlbmd0aCA9IHBheWxvYWRfbGVuZ3RoCisgICAgICAgIHNlbGYubmV4dF9oZWFkZXIgPSBuZXh0X2hlYWRlcgorCisgICAgZGVmIF9jb252ZXJ0X3RvX2lwYWRkcmVzcyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVhcnJheSk6CisgICAgICAgICAgICB2YWx1ZSA9IGJ5dGVzKHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKSBhbmQgc3lzLnZlcnNpb25faW5mb1swXSA9PSAyOgorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5kZWNvZGUoInV0Zi04IikKKworICAgICAgICByZXR1cm4gaXBfYWRkcmVzcyh2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzb3VyY2VfYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvdXJjZV9hZGRyZXNzCisKKyAgICBAc291cmNlX2FkZHJlc3Muc2V0dGVyCisgICAgZGVmIHNvdXJjZV9hZGRyZXNzKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fc291cmNlX2FkZHJlc3MgPSBzZWxmLl9jb252ZXJ0X3RvX2lwYWRkcmVzcyh2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZXN0aW5hdGlvbl9hZGRyZXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzdGluYXRpb25fYWRkcmVzcworCisgICAgQGRlc3RpbmF0aW9uX2FkZHJlc3Muc2V0dGVyCisgICAgZGVmIGRlc3RpbmF0aW9uX2FkZHJlc3Moc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9zb3VyY2VfYWRkcmVzcyA9IHNlbGYuX2NvbnZlcnRfdG9faXBhZGRyZXNzKHZhbHVlKQorCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KCkKKyAgICAgICAgZGF0YSArPSBzZWxmLnNvdXJjZV9hZGRyZXNzLnBhY2tlZAorICAgICAgICBkYXRhICs9IHNlbGYuZGVzdGluYXRpb25fYWRkcmVzcy5wYWNrZWQKKyAgICAgICAgZGF0YSArPSBzdHJ1Y3QucGFjaygiPkkiLCBzZWxmLnBheWxvYWRfbGVuZ3RoKQorICAgICAgICBkYXRhICs9IHN0cnVjdC5wYWNrKCI+SSIsIHNlbGYubmV4dF9oZWFkZXIpCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworCitjbGFzcyBJUHY2SGVhZGVyKENvbnZlcnRpYmxlVG9CeXRlcywgQnVpbGRhYmxlRnJvbUJ5dGVzKToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgSVB2NiBwYWNrZXQgaGVhZGVyLiAiIiIKKworICAgIF92ZXJzaW9uID0gNgorCisgICAgX2hlYWRlcl9sZW5ndGggPSA0MAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZV9hZGRyZXNzLCBkZXN0aW5hdGlvbl9hZGRyZXNzLCB0cmFmZmljX2NsYXNzPTAsIGZsb3dfbGFiZWw9MCwgaG9wX2xpbWl0PTY0LAorICAgICAgICAgICAgICAgICBwYXlsb2FkX2xlbmd0aD0wLCBuZXh0X2hlYWRlcj0wKToKKyAgICAgICAgc2VsZi52ZXJzaW9uID0gc2VsZi5fdmVyc2lvbgorICAgICAgICBzZWxmLl9zb3VyY2VfYWRkcmVzcyA9IHNlbGYuX2NvbnZlcnRfdG9faXBhZGRyZXNzKHNvdXJjZV9hZGRyZXNzKQorICAgICAgICBzZWxmLl9kZXN0aW5hdGlvbl9hZGRyZXNzID0gc2VsZi5fY29udmVydF90b19pcGFkZHJlc3MoZGVzdGluYXRpb25fYWRkcmVzcykKKyAgICAgICAgc2VsZi50cmFmZmljX2NsYXNzID0gdHJhZmZpY19jbGFzcworICAgICAgICBzZWxmLmZsb3dfbGFiZWwgPSBmbG93X2xhYmVsCisgICAgICAgIHNlbGYuaG9wX2xpbWl0ID0gaG9wX2xpbWl0CisgICAgICAgIHNlbGYucGF5bG9hZF9sZW5ndGggPSBwYXlsb2FkX2xlbmd0aAorICAgICAgICBzZWxmLm5leHRfaGVhZGVyID0gbmV4dF9oZWFkZXIKKworICAgIGRlZiBfY29udmVydF90b19pcGFkZHJlc3Moc2VsZiwgdmFsdWUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBieXRlYXJyYXkpOgorICAgICAgICAgICAgdmFsdWUgPSBieXRlcyh2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cikgYW5kIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMjoKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZGVjb2RlKCJ1dGYtOCIpCisKKyAgICAgICAgcmV0dXJuIGlwX2FkZHJlc3ModmFsdWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc291cmNlX2FkZHJlc3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zb3VyY2VfYWRkcmVzcworCisgICAgQHNvdXJjZV9hZGRyZXNzLnNldHRlcgorICAgIGRlZiBzb3VyY2VfYWRkcmVzcyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3NvdXJjZV9hZGRyZXNzID0gc2VsZi5fY29udmVydF90b19pcGFkZHJlc3ModmFsdWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVzdGluYXRpb25fYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc3RpbmF0aW9uX2FkZHJlc3MKKworICAgIGRlZiB0b19ieXRlcyhzZWxmKToKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbCisgICAgICAgICAgICAoKHNlbGYudmVyc2lvbiAmIDB4MEYpIDw8IDQpIHwgKChzZWxmLnRyYWZmaWNfY2xhc3MgPj4gNCkgJiAweDBGKSwKKyAgICAgICAgICAgICgoc2VsZi50cmFmZmljX2NsYXNzICYgMHgwRikgPDwgNCkgfCAoKHNlbGYuZmxvd19sYWJlbCA+PiAxNikgJiAweDBGKSwKKyAgICAgICAgICAgICgoc2VsZi5mbG93X2xhYmVsID4+IDgpICYgMHhGRiksCisgICAgICAgICAgICAoKHNlbGYuZmxvd19sYWJlbCAmIDB4RkYpKQorICAgICAgICBdKQorICAgICAgICBkYXRhICs9IHN0cnVjdC5wYWNrKCI+SCIsIHNlbGYucGF5bG9hZF9sZW5ndGgpCisgICAgICAgIGRhdGEgKz0gYnl0ZWFycmF5KFtzZWxmLm5leHRfaGVhZGVyLCBzZWxmLmhvcF9saW1pdF0pCisgICAgICAgIGRhdGEgKz0gc2VsZi5zb3VyY2VfYWRkcmVzcy5wYWNrZWQKKyAgICAgICAgZGF0YSArPSBzZWxmLmRlc3RpbmF0aW9uX2FkZHJlc3MucGFja2VkCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2J5dGVzKGNscywgZGF0YSk6CisgICAgICAgIGIgPSBieXRlYXJyYXkoZGF0YS5yZWFkKDQpKQorCisgICAgICAgIHZlcnNpb24gPSAoYlswXSA+PiA0KSAmIDB4MEYKKyAgICAgICAgdHJhZmZpY19jbGFzcyA9ICgoYlswXSAmIDB4MEYpIDw8IDQpIHwgKChiWzFdID4+IDQpICYgMHgwRikKKyAgICAgICAgZmxvd19sYWJlbCA9ICgoYlsxXSAmIDB4MEYpIDw8IDE2KSB8IChiWzJdIDw8IDgpIHwgYlszXQorCisgICAgICAgIHBheWxvYWRfbGVuZ3RoID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgIG5leHRfaGVhZGVyID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgaG9wX2xpbWl0ID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgc3JjX2FkZHIgPSBieXRlYXJyYXkoZGF0YS5yZWFkKDE2KSkKKyAgICAgICAgZHN0X2FkZHIgPSBieXRlYXJyYXkoZGF0YS5yZWFkKDE2KSkKKworICAgICAgICByZXR1cm4gY2xzKHNyY19hZGRyLAorICAgICAgICAgICAgICAgICAgIGRzdF9hZGRyLAorICAgICAgICAgICAgICAgICAgIHRyYWZmaWNfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgZmxvd19sYWJlbCwKKyAgICAgICAgICAgICAgICAgICBob3BfbGltaXQsCisgICAgICAgICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgbmV4dF9oZWFkZXIpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiSVB2NkhlYWRlcihzb3VyY2VfYWRkcmVzcz17fSwgZGVzdGluYXRpb25fYWRkcmVzcz17fSwgbmV4dF9oZWFkZXI9e30sIHBheWxvYWRfbGVuZ3RoPXt9LCBcCisgICAgICAgICAgICBob3BfbGltaXQ9e30sIHRyYWZmaWNfY2xhc3M9e30sIGZsb3dfbGFiZWw9e30pIi5mb3JtYXQoc2VsZi5zb3VyY2VfYWRkcmVzcy5jb21wcmVzc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVzdGluYXRpb25fYWRkcmVzcy5jb21wcmVzc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dF9oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXlsb2FkX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvcF9saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRyYWZmaWNfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mbG93X2xhYmVsKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oZWFkZXJfbGVuZ3RoCisKKworY2xhc3MgSVB2NlBhY2tldChDb252ZXJ0aWJsZVRvQnl0ZXMpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBJUHY2IHBhY2tldC4KKworICAgIElQdjYgcGFja2V0IGNvbnNpc3RzIG9mIElQdjYgaGVhZGVyLCBvcHRpb25hbCBleHRlbnNpb24gaGVhZGVyLCBhbmQgdXBwZXIgbGF5ZXIgcHJvdG9jb2wuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVB2NiBwYWNrZXQKKworICAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgfCBJUHY2IGhlYWRlciB8IGV4dGVuc2lvbiBoZWFkZXJzICh6ZXJvIG9yIG1vcmUpIHwgdXBwZXIgbGF5ZXIgcHJvdG9jb2wgKGUuZy4gVURQLCBUQ1AsIElDTVB2NikgfAorICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgICBFeHRlbnNpb24gaGVhZGVyczoKKyAgICAgICAgLSBIb3BCeUhvcAorICAgICAgICAtIFJvdXRpbmcgaGVhZGVyIChub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBtb2R1bGUpCisKKyAgICBVcHBlciBsYXllciBwcm90b2NvbHM6CisgICAgICAgIC0gSUNNUHY2CisgICAgICAgIC0gVURQCisgICAgICAgIC0gVENQIChub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBtb2R1bGUpCisKKyAgICBFeGFtcGxlOgorICAgICAgICBJUHY2IHBhY2tldCBjb25zdHJ1Y3Rpb24gd2l0aG91dCBleHRlbnNpb24gaGVhZGVyczoKKworICAgICAgICBpcHY2X3BhY2tldCA9IElQdjZQYWNrZXQoSVB2NkhlYWRlcigiZmQwMDoxMjM0OjQ1NTU6OmZmOmZlMDA6MTgwMCIsICJmZjAzOjoxIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ01QdjYoSUNNUHY2SGVhZGVyKDEyOCwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUNNUHY2RWNob0JvZHkoMCwgMiwgIGJ5dGVzKFsweDgwLCAweDAwLCAweGM3LCAweGJmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDEsIDB4NDFdKSkpKQorCisgICAgICAgIElQdjYgcGFja2V0IGNvbnN0cnVjdGlvbiB3aXRoIGV4dGVuc2lvbiBoZWFkZXJzOgorCisgICAgICAgIGlwdjZfcGFja2V0ID0gSVB2NlBhY2tldChJUHY2SGVhZGVyKCJmZDAwOjEyMzQ6NDU1NTo6ZmY6ZmUwMDoxODAwIiwgImZmMDM6OjEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElDTVB2NihJQ01QdjZIZWFkZXIoMTI4LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ01QdjZFY2hvQm9keSgwLCAyLCAgYnl0ZXMoWzB4ODAsIDB4MDAsIDB4YzcsIDB4YmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIb3BCeUhvcChvcHRpb25zPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3BCeUhvcE9wdGlvbihIb3BCeUhvcE9wdGlvbkhlYWRlcihfdHlwZT0weDZkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUExPcHRpb24oUz0xLCBNPTAsIFY9MCwgc2VxdWVuY2U9Miwgc2VlZF9pZD1ieXRlcyhbMHgwMCwgMHgxOF0pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXSkKKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlwdjZfaGVhZGVyLCB1cHBlcl9sYXllcl9wcm90b2NvbCwgZXh0ZW5zaW9uX2hlYWRlcnM9Tm9uZSk6CisgICAgICAgIHNlbGYuaXB2Nl9oZWFkZXIgPSBpcHY2X2hlYWRlcgorCisgICAgICAgIHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wgPSB1cHBlcl9sYXllcl9wcm90b2NvbAorCisgICAgICAgIHNlbGYuZXh0ZW5zaW9uX2hlYWRlcnMgPSBleHRlbnNpb25faGVhZGVycyBpZiBleHRlbnNpb25faGVhZGVycyBpcyBub3QgTm9uZSBlbHNlIFtdCisKKyAgICAgICAgc2VsZi5fdXBkYXRlX25leHRfaGVhZGVyX3ZhbHVlc19pbl9oZWFkZXJzKCkKKworICAgICAgICBpZiBub3QgdXBwZXJfbGF5ZXJfcHJvdG9jb2wuaXNfdmFsaWRfY2hlY2tzdW0oKToKKyAgICAgICAgICAgIHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wuY2hlY2tzdW0gPSBzZWxmLmNhbGN1bGF0ZV9jaGVja3N1bSgpCisKKyAgICBkZWYgX3ZhbGlkYXRlX2NoZWNrc3VtKHNlbGYpOgorICAgICAgICBjaGVja3N1bSA9IHNlbGYuY2FsY3VsYXRlX2NoZWNrc3VtKCkKKworICAgICAgICBpZiBzZWxmLnVwcGVyX2xheWVyX3Byb3RvY29sLmNoZWNrc3VtICE9IGNoZWNrc3VtOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgY3JlYXRlIElQdjYgcGFja2V0LiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgY2hlY2tzdW06IHt9IT17fSIuZm9ybWF0KHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wuY2hlY2tzdW0sIGNoZWNrc3VtKSkKKworICAgICAgICBzZWxmLnVwcGVyX2xheWVyX3Byb3RvY29sLmNoZWNrc3VtID0gY2hlY2tzdW0KKworICAgIGRlZiBfdXBkYXRlX3BheWxvYWRfbGVuZ3RoX3ZhbHVlX2luX2lwdjZfaGVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmlwdjZfaGVhZGVyLnBheWxvYWRfbGVuZ3RoID0gbGVuKHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wpICsgXAorICAgICAgICAgICAgc3VtKFtsZW4oZXh0ZW5zaW9uX2hlYWRlcikgZm9yIGV4dGVuc2lvbl9oZWFkZXIgaW4gc2VsZi5leHRlbnNpb25faGVhZGVyc10pCisKKyAgICBkZWYgX3VwZGF0ZV9uZXh0X2hlYWRlcl92YWx1ZXNfaW5faGVhZGVycyhzZWxmKToKKyAgICAgICAgbGFzdF9oZWFkZXIgPSBzZWxmLmlwdjZfaGVhZGVyCisKKyAgICAgICAgZm9yIGV4dGVuc2lvbl9oZWFkZXIgaW4gc2VsZi5leHRlbnNpb25faGVhZGVyczoKKyAgICAgICAgICAgIGxhc3RfaGVhZGVyLm5leHRfaGVhZGVyID0gZXh0ZW5zaW9uX2hlYWRlci50eXBlCisgICAgICAgICAgICBsYXN0X2hlYWRlciA9IGV4dGVuc2lvbl9oZWFkZXIKKworICAgICAgICBsYXN0X2hlYWRlci5uZXh0X2hlYWRlciA9IHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wudHlwZQorCisgICAgZGVmIGNhbGN1bGF0ZV9jaGVja3N1bShzZWxmKToKKyAgICAgICAgc2F2ZWRfY2hlY2tzdW0gPSBzZWxmLnVwcGVyX2xheWVyX3Byb3RvY29sLmNoZWNrc3VtCisKKyAgICAgICAgc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbC5jaGVja3N1bSA9IDAKKworICAgICAgICB1cHBlcl9sYXllcl9wcm90b2NvbF9ieXRlcyA9IHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wudG9fYnl0ZXMoKQorCisgICAgICAgIHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wuY2hlY2tzdW0gPSBzYXZlZF9jaGVja3N1bQorCisgICAgICAgIHBzZXVkb19oZWFkZXIgPSBJUHY2UHNldWRvSGVhZGVyKHNlbGYuaXB2Nl9oZWFkZXIuc291cmNlX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaXB2Nl9oZWFkZXIuZGVzdGluYXRpb25fYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHVwcGVyX2xheWVyX3Byb3RvY29sX2J5dGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbC50eXBlKQorCisgICAgICAgIHJldHVybiBjYWxjdWxhdGVfY2hlY2tzdW0ocHNldWRvX2hlYWRlci50b19ieXRlcygpICsgdXBwZXJfbGF5ZXJfcHJvdG9jb2xfYnl0ZXMpCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuX3VwZGF0ZV9wYXlsb2FkX2xlbmd0aF92YWx1ZV9pbl9pcHY2X2hlYWRlcigpCisgICAgICAgIHNlbGYuX3VwZGF0ZV9uZXh0X2hlYWRlcl92YWx1ZXNfaW5faGVhZGVycygpCisgICAgICAgIHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wuY2hlY2tzdW0gPSBzZWxmLmNhbGN1bGF0ZV9jaGVja3N1bSgpCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBzZWxmLmlwdjZfaGVhZGVyLnRvX2J5dGVzKCkKKworICAgICAgICBmb3IgZXh0ZW5zaW9uX2hlYWRlciBpbiBzZWxmLmV4dGVuc2lvbl9oZWFkZXJzOgorICAgICAgICAgICAgaXB2Nl9wYWNrZXQgKz0gZXh0ZW5zaW9uX2hlYWRlci50b19ieXRlcygpCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgKz0gc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbC50b19ieXRlcygpCisKKyAgICAgICAgcmV0dXJuIGlwdjZfcGFja2V0CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiSVB2NlBhY2tldChoZWFkZXI9e30sIHVwcGVyX2xheWVyX3Byb3RvY29sPXt9KSIuZm9ybWF0KHNlbGYuaXB2Nl9oZWFkZXIsIHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wpCisKKworY2xhc3MgVURQSGVhZGVyKENvbnZlcnRpYmxlVG9CeXRlcywgQnVpbGRhYmxlRnJvbUJ5dGVzKToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgVURQIGRhdGFncmFtIGhlYWRlci4KKworICAgIFRoaXMgaGVhZGVyIGlzIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCBVRFAgZGF0YWdyYW0uCisKKyAgICAiIiIKKworICAgIF9oZWFkZXJfbGVuZ3RoID0gOAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyY19wb3J0LCBkc3RfcG9ydCwgcGF5bG9hZF9sZW5ndGg9MCwgY2hlY2tzdW09MCk6CisgICAgICAgIHNlbGYuc3JjX3BvcnQgPSBzcmNfcG9ydAorICAgICAgICBzZWxmLmRzdF9wb3J0ID0gZHN0X3BvcnQKKworICAgICAgICBzZWxmLl9wYXlsb2FkX2xlbmd0aCA9IHBheWxvYWRfbGVuZ3RoCisgICAgICAgIHNlbGYuY2hlY2tzdW0gPSBjaGVja3N1bQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHR5cGUoc2VsZik6CisgICAgICAgIHJldHVybiAxNworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBheWxvYWRfbGVuZ3RoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcGF5bG9hZF9sZW5ndGgKKworICAgIEBwYXlsb2FkX2xlbmd0aC5zZXR0ZXIKKyAgICBkZWYgcGF5bG9hZF9sZW5ndGgoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9wYXlsb2FkX2xlbmd0aCA9IHNlbGYuX2hlYWRlcl9sZW5ndGggKyB2YWx1ZQorCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICBkYXRhID0gc3RydWN0LnBhY2soIj5IIiwgc2VsZi5zcmNfcG9ydCkKKyAgICAgICAgZGF0YSArPSBzdHJ1Y3QucGFjaygiPkgiLCBzZWxmLmRzdF9wb3J0KQorICAgICAgICBkYXRhICs9IHN0cnVjdC5wYWNrKCI+SCIsIHNlbGYucGF5bG9hZF9sZW5ndGgpCisgICAgICAgIGRhdGEgKz0gc3RydWN0LnBhY2soIj5IIiwgc2VsZi5jaGVja3N1bSkKKworICAgICAgICByZXR1cm4gZGF0YQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fYnl0ZXMoY2xzLCBkYXRhKToKKyAgICAgICAgc3JjX3BvcnQgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgZHN0X3BvcnQgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgcGF5bG9hZF9sZW5ndGggPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgY2hlY2tzdW0gPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKworICAgICAgICByZXR1cm4gY2xzKHNyY19wb3J0LCBkc3RfcG9ydCwgcGF5bG9hZF9sZW5ndGgsIGNoZWNrc3VtKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oZWFkZXJfbGVuZ3RoCisKKworY2xhc3MgVURQRGF0YWdyYW0oVXBwZXJMYXllclByb3RvY29sKToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgVURQIGRhdGFncmFtLgorCisgICAgVURQIGlzIGFuIHVwcGVyIGxheWVyIHByb3RvY29sIGZvciBJUHY2IHNvIGl0IGNhbiBiZSBwYXNzZWQgdG8gSVB2NiBwYWNrZXQgYXMgdXBwZXJfbGF5ZXJfcHJvdG9jb2wuCisKKyAgICBUaGlzIGNsYXNzIGNvbnNpc3RzIG9mIGEgVURQIGhlYWRlciBhbmQgcGF5bG9hZC4gVGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IGEgVURQIGRhdGFncmFtIGNhbiBiZSBjb25zdHJ1Y3RlZC4KKworICAgIEV4YW1wbGU6CisgICAgICAgIHVkcF9kZ3JhbSA9IFVEUERhdGFncmFtKFVEUEhlYWRlcihzcmNfcG9ydD0xOTc4OCwgZHN0X3BvcnQ9MTk3ODgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcyhbMHgwMCwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4MDEsIDB4MDEsIDB4MGIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAweGM2LCAweDY5LCAweDczLCAweDUxLCAweDBlLCAweDAxLCAweDgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgwMiwgMHgwMCwgMHgwMSwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZl0pKQorCisgICAgIiIiCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIDE3CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGVhZGVyLCBwYXlsb2FkKToKKyAgICAgICAgc3VwZXIoVURQRGF0YWdyYW0sIHNlbGYpLl9faW5pdF9fKGhlYWRlcikKKyAgICAgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZAorCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICBzZWxmLmhlYWRlci5wYXlsb2FkX2xlbmd0aCA9IGxlbihzZWxmLnBheWxvYWQpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheSgpCisgICAgICAgIGRhdGEgKz0gc2VsZi5oZWFkZXIudG9fYnl0ZXMoKQorICAgICAgICBkYXRhICs9IHNlbGYucGF5bG9hZC50b19ieXRlcygpCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmhlYWRlcikgKyBsZW4oc2VsZi5wYXlsb2FkKQorCisKK2NsYXNzIElDTVB2NkhlYWRlcihDb252ZXJ0aWJsZVRvQnl0ZXMsIEJ1aWxkYWJsZUZyb21CeXRlcyk6CisKKyAgICAiIiIgQ2xhc3MgcmVwcmVzZW50aW5nIElDTVB2NiBtZXNzYWdlIGhlYWRlci4KKworICAgIFRoaXMgaGVhZGVyIGlzIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCBJQ01QdjYgbWVzc2FnZS4KKworICAgICIiIgorCisgICAgX2hlYWRlcl9sZW5ndGggPSA0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgX3R5cGUsIGNvZGUsIGNoZWNrc3VtPTApOgorICAgICAgICBzZWxmLnR5cGUgPSBfdHlwZQorICAgICAgICBzZWxmLmNvZGUgPSBjb2RlCisKKyAgICAgICAgc2VsZi5jaGVja3N1bSA9IGNoZWNrc3VtCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBieXRlYXJyYXkoW3NlbGYudHlwZSwgc2VsZi5jb2RlXSkgKyBzdHJ1Y3QucGFjaygiPkgiLCBzZWxmLmNoZWNrc3VtKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fYnl0ZXMoY2xzLCBkYXRhKToKKyAgICAgICAgX3R5cGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBjb2RlID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgY2hlY2tzdW0gPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKworICAgICAgICByZXR1cm4gY2xzKF90eXBlLCBjb2RlLCBjaGVja3N1bSkKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faGVhZGVyX2xlbmd0aAorCisKK2NsYXNzIElDTVB2NihVcHBlckxheWVyUHJvdG9jb2wpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBJQ01QdjYgbWVzc2FnZS4KKworICAgIElDTVB2NiBpcyBhbiB1cHBlciBsYXllciBwcm90b2NvbCBmb3IgSVB2NiBzbyBpdCBjYW4gYmUgcGFzc2VkIHRvIElQdjYgcGFja2V0IGFzIHVwcGVyX2xheWVyX3Byb3RvY29sLgorCisgICAgVGhpcyBjbGFzcyBjb25zaXN0cyBvZiBhbiBJQ01QdjYgaGVhZGVyIGFuZCBib2R5LiBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgYW4gSUNNUHY2IG1lc3NhZ2UgY2FuIGJlIGNvbnN0cnVjdGVkLgorCisgICAgRXhhbXBsZToKKyAgICAgICAgaWNtcHY2X21zZyA9IElDTVB2NihJQ01QdjZIZWFkZXIoMTI4LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ01QdjZFY2hvQm9keSgwLCAyLCBieXRlcyhbMHg4MCwgMHgwMCwgMHhjNywgMHhiZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MV0pKSkKKworICAgICIiIgorICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gNTgKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoZWFkZXIsIGJvZHkpOgorICAgICAgICBzdXBlcihJQ01QdjYsIHNlbGYpLl9faW5pdF9fKGhlYWRlcikKKyAgICAgICAgc2VsZi5ib2R5ID0gYm9keQorCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gYnl0ZWFycmF5KHNlbGYuaGVhZGVyLnRvX2J5dGVzKCkgKyBzZWxmLmJvZHkudG9fYnl0ZXMoKSkKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuaGVhZGVyKSArIGxlbihzZWxmLmJvZHkpCisKKworY2xhc3MgSG9wQnlIb3AoRXh0ZW5zaW9uSGVhZGVyKToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgSG9wQnlIb3AgZXh0ZW5zaW9uIGhlYWRlci4KKworICAgIEhvcEJ5SG9wIGV4dGVuc2lvbiBoZWFkZXIgY29uc2lzdHMgb2Y6CisgICAgICAgIC0gbmV4dF9oZWFkZXIgdHlwZQorICAgICAgICAtIGV4dGVuc2lvbiBoZWFkZXIgbGVuZ3RoIHdoaWNoIGlzIG11bHRpcGxlIG9mIDgKKyAgICAgICAgLSBvcHRpb25zCisKKyAgICAiIiIKKyAgICBfb25lX2J5dGVfcGFkZGluZyA9IDB4MDAKKyAgICBfbWFueV9ieXRlc19wYWRkaW5nID0gMHgwMQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHR5cGUoc2VsZik6CisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmV4dF9oZWFkZXI9Tm9uZSwgb3B0aW9ucz1Ob25lLCBoZHJfZXh0X2xlbj1Ob25lKToKKyAgICAgICAgc3VwZXIoSG9wQnlIb3AsIHNlbGYpLl9faW5pdF9fKG5leHRfaGVhZGVyLCBoZHJfZXh0X2xlbikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucyBpZiBvcHRpb25zIGlzIG5vdCBOb25lIGVsc2UgW10KKworICAgICAgICBpZiBoZHJfZXh0X2xlbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaGRyX2V4dF9sZW4gPSBoZHJfZXh0X2xlbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGggPSBzZWxmLl9jYWxjdWxhdGVfcGF5bG9hZF9sZW5ndGgoKQorICAgICAgICAgICAgc2VsZi5oZHJfZXh0X2xlbiA9IHNlbGYuX2NhbGN1bGF0ZV9oZHJfZXh0X2xlbihwYXlsb2FkX2xlbmd0aCkKKworICAgIGRlZiBfY2FsY3VsYXRlX3BheWxvYWRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IDIKKworICAgICAgICBmb3Igb3B0aW9uIGluIHNlbGYub3B0aW9uczoKKyAgICAgICAgICAgIHBheWxvYWRfbGVuZ3RoICs9IGxlbihvcHRpb24pCisKKyAgICAgICAgcmV0dXJuIHBheWxvYWRfbGVuZ3RoCisKKyAgICBkZWYgX2NhbGN1bGF0ZV9oZHJfZXh0X2xlbihzZWxmLCBwYXlsb2FkX2xlbmd0aCk6CisgICAgICAgIGNvdW50ID0gcGF5bG9hZF9sZW5ndGggPj4gMworCisgICAgICAgIGlmIChwYXlsb2FkX2xlbmd0aCAmIDB4NykgPT0gMCBhbmQgY291bnQgPiAwOgorICAgICAgICAgICAgcmV0dXJuIGNvdW50IC0gMQorCisgICAgICAgIHJldHVybiBjb3VudAorCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtzZWxmLm5leHRfaGVhZGVyLCBzZWxmLmhkcl9leHRfbGVuXSkKKworICAgICAgICBmb3Igb3B0aW9uIGluIHNlbGYub3B0aW9uczoKKyAgICAgICAgICAgIGRhdGEgKz0gb3B0aW9uLnRvX2J5dGVzKCkKKworICAgICAgICAjIFBhZGRpbmcKKyAgICAgICAgIworICAgICAgICAjIE1vcmUgZGV0YWlsczoKKyAgICAgICAgIyAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNDYwI3NlY3Rpb24tNC4yCisgICAgICAgICMKKyAgICAgICAgZXhjZXNzX2J5dGVzID0gbGVuKGRhdGEpICYgMHg3CisKKyAgICAgICAgaWYgZXhjZXNzX2J5dGVzID4gMDoKKyAgICAgICAgICAgIHBhZGRpbmdfbGVuZ3RoID0gOCAtIGV4Y2Vzc19ieXRlcworCisgICAgICAgICAgICBpZiBwYWRkaW5nX2xlbmd0aCA9PSAxOgorICAgICAgICAgICAgICAgIGRhdGEgKz0gYnl0ZWFycmF5KFtzZWxmLl9vbmVfYnl0ZV9wYWRkaW5nXSkKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYWRkaW5nX2xlbmd0aCAtPSAyCisgICAgICAgICAgICAgICAgZGF0YSArPSBieXRlYXJyYXkoW3NlbGYuX21hbnlfYnl0ZXNfcGFkZGluZywgcGFkZGluZ19sZW5ndGhdKQorICAgICAgICAgICAgICAgIGRhdGEgKz0gYnl0ZWFycmF5KFsweDAwIGZvciBfIGluIHJhbmdlKHBhZGRpbmdfbGVuZ3RoKV0pCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAiIiIgSG9wQnlIb3AgZXh0ZW5zaW9uIGhlYWRlciBsZW5ndGgKKworICAgICAgICBNb3JlIGRldGFpbHM6CisgICAgICAgICAgICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjQ2MCNzZWN0aW9uLTQuMworCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gKHNlbGYuaGRyX2V4dF9sZW4gKyAxKSAqIDgKKworCitjbGFzcyBIb3BCeUhvcE9wdGlvbkhlYWRlcihDb252ZXJ0aWJsZVRvQnl0ZXMsIEJ1aWxkYWJsZUZyb21CeXRlcyk6CisKKyAgICAiIiIgQ2xhc3MgcmVwcmVzZW50aW5nIEhvcEJ5SG9wIG9wdGlvbiBoZWFkZXIuICIiIgorCisgICAgX2hlYWRlcl9sZW5ndGggPSAyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgX3R5cGUsIGxlbmd0aD1Ob25lKToKKyAgICAgICAgc2VsZi50eXBlID0gX3R5cGUKKyAgICAgICAgc2VsZi5sZW5ndGggPSBsZW5ndGggaWYgbGVuZ3RoIGlzIG5vdCBOb25lIGVsc2UgMAorCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gYnl0ZWFycmF5KFtzZWxmLnR5cGUsIHNlbGYubGVuZ3RoXSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2J5dGVzKGNscywgZGF0YSk6CisgICAgICAgIF90eXBlID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgbGVuZ3RoID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgcmV0dXJuIGNscyhfdHlwZSwgbGVuZ3RoKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oZWFkZXJfbGVuZ3RoCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiSG9wQnlIb3BPcHRpb25IZWFkZXIodHlwZT17fSwgbGVuZ3RoPXt9KSIuZm9ybWF0KHNlbGYudHlwZSwgc2VsZi5sZW5ndGgpCisKKworY2xhc3MgSG9wQnlIb3BPcHRpb24oQ29udmVydGlibGVUb0J5dGVzKToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgSG9wQnlIb3Agb3B0aW9uLgorCisgICAgQ2xhc3MgY29uc2lzdHMgb2YgdHdvIGVsZW1lbnRzOiBIb3BCeUhvcE9wdGlvbkhlYWRlciBhbmQgdmFsdWUgKGUuZy4gZm9yIE1QTE9wdGlvbikuCisKKyAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IGFueSBIb3BCeUhvcCBvcHRpb24gY2FuIGJlIGNvbnN0cnVjdGVkLgorCisgICAgRXhhbXBsZToKKyAgICAgICAgSG9wQnlIb3AobmV4dF9oZWFkZXI9MHgzYSwKKyAgICAgICAgICAgICAgICAgb3B0aW9ucz1bSG9wQnlIb3BPcHRpb24oSG9wQnlIb3BPcHRpb25IZWFkZXIoX3R5cGU9MHg2ZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QTE9wdGlvbihTPTEsIE09MCwgVj0wLCBzZXF1ZW5jZT0yLCBzZWVkX2lkPWJ5dGVzKFsweDAwLCAweDE4XSkpKQorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGVhZGVyLCB2YWx1ZSk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgICAgIHNlbGYuaGVhZGVyID0gaGVhZGVyCisgICAgICAgIHNlbGYuaGVhZGVyLmxlbmd0aCA9IGxlbihzZWxmLnZhbHVlKQorCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5oZWFkZXIudG9fYnl0ZXMoKSArIHNlbGYudmFsdWUudG9fYnl0ZXMoKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5oZWFkZXIpICsgbGVuKHNlbGYudmFsdWUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiSG9wQnlIb3BPcHRpb24oaGVhZGVyPXt9LCB2YWx1ZT17fSkiLmZvcm1hdChzZWxmLmhlYWRlciwgc2VsZi52YWx1ZSkKKworCitjbGFzcyBNUExPcHRpb24oQ29udmVydGlibGVUb0J5dGVzKToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgTVBMIG9wdGlvbi4gIiIiCisKKyAgICBfaGVhZGVyX2xlbmd0aCA9IDIKKworICAgIF9zZWVkX2lkX2xlbmd0aCA9IHsKKyAgICAgICAgMDogMCwKKyAgICAgICAgMTogMiwKKyAgICAgICAgMjogOCwKKyAgICAgICAgMzogMTYKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgUywgTSwgViwgc2VxdWVuY2UsIHNlZWRfaWQpOgorICAgICAgICBzZWxmLlMgPSBTCisgICAgICAgIHNlbGYuTSA9IE0KKyAgICAgICAgc2VsZi5WID0gVgorICAgICAgICBzZWxmLnNlcXVlbmNlID0gc2VxdWVuY2UKKyAgICAgICAgc2VsZi5zZWVkX2lkID0gc2VlZF9pZAorCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICBzbXYgPSAoKHNlbGYuUyAmIDB4MDMpIDw8IDYpIHwgKChzZWxmLk0gJiAweDAxKSA8PCA1KSB8ICgoc2VsZi5WICYgMHgwMSkgPDwgNCkKKworICAgICAgICByZXR1cm4gYnl0ZWFycmF5KFtzbXYsIHNlbGYuc2VxdWVuY2VdKSArIHNlbGYuc2VlZF9pZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fYnl0ZXMoY2xzLCBkYXRhKToKKyAgICAgICAgYiA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgcyA9ICgoYiA+PiA2KSAmIDB4MDMpCisgICAgICAgIG0gPSAoKGIgPj4gNSkgJiAweDAxKQorICAgICAgICB2ID0gKChiID4+IDQpICYgMHgwMSkKKworICAgICAgICBzZXF1ZW5jZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIHNlZWRfaWQgPSBkYXRhLnJlYWQoY2xzLl9zZWVkX2lkX2xlbmd0aFtzXSkKKworICAgICAgICByZXR1cm4gY2xzKHMsIG0sIHYsIHNlcXVlbmNlLCBzZWVkX2lkKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oZWFkZXJfbGVuZ3RoICsgc2VsZi5fc2VlZF9pZF9sZW5ndGhbc2VsZi5TXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIk1QTE9wdGlvbihTPXt9LCBNPXt9LCBWPXt9LCBzZXF1ZW5jZT17fSwgc2VlZF9pZD17fSkiLmZvcm1hdChzZWxmLlMsIHNlbGYuTSwgc2VsZi5WLCBzZWxmLnNlcXVlbmNlLCBoZXhsaWZ5KHNlbGYuc2VlZF9pZCkpCisKKworY2xhc3MgSVB2NlBhY2tldEZhY3RvcnkoUGFja2V0RmFjdG9yeSk6CisKKyAgICAiIiIgRmFjdG9yeSB0aGF0IHByb2R1Y2VzIElQdjYgcGFja2V0cyBmcm9tIGRhdGEuCisKKyAgICBUaGlzIGZhY3RvcnkgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIGZhY3RvcmllcyB3aGljaCBhbGxvdyB0byBwYXJzZSBleHRlbnNpb24gaGVhZGVycyBhbmQgdXBwZXIgbGF5ZXIgcHJvdG9jb2xzLgorCisgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHByZWZlcmFibGUgc2V0dXAgb2YgSVB2NlBhY2tldEZhY3RvcnkuCisKKyAgICBIZWFkZXIgdHlwZXM6CisgICAgICAgIDA6IEhvcEJ5SG9wCisgICAgICAgIDE3OiBVRFAKKyAgICAgICAgNTg6IElDTVB2NgorCisgICAgT3B0aW9uIHR5cGVzOgorICAgICAgICAxMDk6IE1QTAorCisgICAgSUNNUHY2IGJvZHkgdHlwZXM6CisgICAgICAgIDEyODogRWNobyByZXF1ZXN0CisgICAgICAgIDEyOTogRWNobyByZXNwb25zZQorCisgICAgRXhhbXBsZSB1c2FnZToKKworICAgICAgICBpcHY2X2ZhY3RvcnkgPSBJUHY2UGFja2V0RmFjdG9yeSgKKyAgICAgICAgICAgIGVoZj17CisgICAgICAgICAgICAgICAgMDogSG9wQnlIb3BGYWN0b3J5KG9wdGlvbnNfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgICAgICAgICAgMTA5OiBNUExPcHRpb25GYWN0b3J5KCkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHVscGY9eworICAgICAgICAgICAgICAgIDE3OiBVRFBEYXRhZ3JhbUZhY3RvcnkoZHN0X3BvcnRfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgICAgICAgICAgMTk3ODg6IE1MRU1lc3NhZ2VGYWN0b3J5KCksCisgICAgICAgICAgICAgICAgICAgIDE5Nzg5OiBDb0FQTWVzc2FnZUZhY3RvcnkoKQorICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgICAgIDU4OiBJQ01QdjZGYWN0b3J5KGJvZHlfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgICAgICAgICAgMTI4OiBJQ01QdjZFY2hvQm9keUZhY3RvcnkoKSwKKyAgICAgICAgICAgICAgICAgICAgMTI5OiBJQ01QdjZFY2hvQm9keUZhY3RvcnkoKQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9CisgICAgICAgICkKKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVoZj1Ob25lLCB1bHBmPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgZWhmIC0gRXh0ZW5zaW9uIEhlYWRlciBGYWN0b3J5CisgICAgICAgIHVscGYgLSBVcHBlciBMYXllciBQcm90b2NvbCBGYWN0b3J5CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGVoZihkaWN0W2ludDogUGFja2V0RmFjdG9yeV0pOiBEaWN0aW9uYXJ5IG1hcHBpbmcgZXh0ZW5zaW9uIGhlYWRlciB0eXBlcyBvbiBzcGVjaWFsaXplZCBmYWN0b3JpZXMuCisgICAgICAgICAgICB1bHBmKGRpY3RbaW50OiBQYWNrZXRGYWN0b3J5XSk6IERpY3Rpb25hcnkgbWFwcGluZyB1cHBlciBsYXllciBwcm90b2NvbCB0eXBlcyBvbiBzcGVjaWFsaXplZCBmYWN0b3JpZXMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9laGYgPSBlaGYgaWYgZWhmIGlzIG5vdCBOb25lIGVsc2Uge30KKyAgICAgICAgc2VsZi5fdWxwZiA9IHVscGYgaWYgdWxwZiBpcyBub3QgTm9uZSBlbHNlIHt9CisKKyAgICBkZWYgX2lzX2V4dGVuc2lvbl9oZWFkZXIoc2VsZiwgaGVhZGVyX3R5cGUpOgorICAgICAgICByZXR1cm4gbm90IGhlYWRlcl90eXBlIGluIFVQUEVSX0xBWUVSX1BST1RPQ09MUworCisgICAgZGVmIF9nZXRfZXh0ZW5zaW9uX2hlYWRlcl9mYWN0b3J5X2ZvcihzZWxmLCBuZXh0X2hlYWRlcik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9laGZbbmV4dF9oZWFkZXJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ291bGQgbm90IGdldCBFeHRlbnNpb24gSGVhZGVyIGZhY3RvcnkgZm9yIG5leHRfaGVhZGVyPXt9LiIuZm9ybWF0KG5leHRfaGVhZGVyKSkKKworICAgIGRlZiBfZ2V0X3VwcGVyX2xheWVyX3Byb3RvY29sX2ZhY3RvcnlfZm9yKHNlbGYsIG5leHRfaGVhZGVyKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3VscGZbbmV4dF9oZWFkZXJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ291bGQgbm90IGdldCBVcHBlciBMYXllciBQcm90b2NvbCBmYWN0b3J5IGZvciBuZXh0X2hlYWRlcj17fS4iLmZvcm1hdChuZXh0X2hlYWRlcikpCisKKyAgICBkZWYgX3BhcnNlX2V4dGVuc2lvbl9oZWFkZXJzKHNlbGYsIGRhdGEsIG5leHRfaGVhZGVyLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBleHRlbnNpb25faGVhZGVycyA9IFtdCisKKyAgICAgICAgd2hpbGUgc2VsZi5faXNfZXh0ZW5zaW9uX2hlYWRlcihuZXh0X2hlYWRlcik6CisgICAgICAgICAgICBmYWN0b3J5ID0gc2VsZi5fZ2V0X2V4dGVuc2lvbl9oZWFkZXJfZmFjdG9yeV9mb3IobmV4dF9oZWFkZXIpCisKKyAgICAgICAgICAgIGV4dGVuc2lvbl9oZWFkZXIgPSBmYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAgICAgbmV4dF9oZWFkZXIgPSBleHRlbnNpb25faGVhZGVyLm5leHRfaGVhZGVyCisKKyAgICAgICAgICAgIGV4dGVuc2lvbl9oZWFkZXJzLmFwcGVuZChleHRlbnNpb25faGVhZGVyKQorCisgICAgICAgIHJldHVybiBuZXh0X2hlYWRlciwgZXh0ZW5zaW9uX2hlYWRlcnMKKworICAgIGRlZiBfcGFyc2VfdXBwZXJfbGF5ZXJfcHJvdG9jb2woc2VsZiwgZGF0YSwgbmV4dF9oZWFkZXIsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGZhY3RvcnkgPSBzZWxmLl9nZXRfdXBwZXJfbGF5ZXJfcHJvdG9jb2xfZmFjdG9yeV9mb3IobmV4dF9oZWFkZXIpCisKKyAgICAgICAgcmV0dXJuIGZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGlwdjZfaGVhZGVyID0gSVB2NkhlYWRlci5mcm9tX2J5dGVzKGRhdGEpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9pcHY2ID0gaXB2Nl9oZWFkZXIuc291cmNlX2FkZHJlc3MKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX2lwdjYgPSBpcHY2X2hlYWRlci5kZXN0aW5hdGlvbl9hZGRyZXNzCisKKyAgICAgICAgbmV4dF9oZWFkZXIsIGV4dGVuc2lvbl9oZWFkZXJzID0gc2VsZi5fcGFyc2VfZXh0ZW5zaW9uX2hlYWRlcnMoZGF0YSwgaXB2Nl9oZWFkZXIubmV4dF9oZWFkZXIsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICB1cHBlcl9sYXllcl9wcm90b2NvbCA9IHNlbGYuX3BhcnNlX3VwcGVyX2xheWVyX3Byb3RvY29sKGRhdGEsIG5leHRfaGVhZGVyLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgcmV0dXJuIElQdjZQYWNrZXQoaXB2Nl9oZWFkZXIsIHVwcGVyX2xheWVyX3Byb3RvY29sLCBleHRlbnNpb25faGVhZGVycykKKworCitjbGFzcyBIb3BCeUhvcE9wdGlvbnNGYWN0b3J5KG9iamVjdCk6CisKKyAgICAiIiIgRmFjdG9yeSB0aGF0IHByb2R1Y2VzIEhvcEJ5SG9wIG9wdGlvbnMuICIiIgorCisgICAgX29uZV9ieXRlX3BhZGRpbmcgPSAweDAwCisgICAgX21hbnlfYnl0ZXNfcGFkZGluZyA9IDB4MDEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zX2ZhY3Rvcmllcz1Ob25lKToKKyAgICAgICAgc2VsZi5fb3B0aW9uc19mYWN0b3JpZXMgPSBvcHRpb25zX2ZhY3RvcmllcyBpZiBvcHRpb25zX2ZhY3RvcmllcyBpcyBub3QgTm9uZSBlbHNlIHt9CisKKyAgICBkZWYgX2dldF9Ib3BCeUhvcE9wdGlvbl92YWx1ZV9mYWN0b3J5KHNlbGYsIF90eXBlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29wdGlvbnNfZmFjdG9yaWVzW190eXBlXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNvdWxkIG5vdCBmaW5kIEhvcEJ5SG9wT3B0aW9uIHZhbHVlIGZhY3RvcnkgZm9yIHR5cGU9e30uIi5mb3JtYXQoX3R5cGUpKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIG9wdGlvbnMgPSBbXQorCisgICAgICAgIHdoaWxlIGRhdGEudGVsbCgpIDwgbGVuKGRhdGEuZ2V0dmFsdWUoKSk6CisgICAgICAgICAgICBvcHRpb25faGVhZGVyID0gSG9wQnlIb3BPcHRpb25IZWFkZXIuZnJvbV9ieXRlcyhkYXRhKQorCisgICAgICAgICAgICBpZiBvcHRpb25faGVhZGVyLnR5cGUgPT0gc2VsZi5fb25lX2J5dGVfcGFkZGluZzoKKyAgICAgICAgICAgICAgICAjIHNraXAgb25lIGJ5dGUgcGFkZGluZworICAgICAgICAgICAgICAgIGRhdGEucmVhZCgxKQorCisgICAgICAgICAgICBlbGlmIG9wdGlvbl9oZWFkZXIudHlwZSA9PSBzZWxmLl9tYW55X2J5dGVzX3BhZGRpbmc6CisgICAgICAgICAgICAgICAgIyBza2lwIG4gYnl0ZXMgcGFkZGluZworICAgICAgICAgICAgICAgIGRhdGEucmVhZChvcHRpb25faGVhZGVyLmxlbmd0aCkKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmYWN0b3J5ID0gc2VsZi5fZ2V0X0hvcEJ5SG9wT3B0aW9uX3ZhbHVlX2ZhY3Rvcnkob3B0aW9uX2hlYWRlci50eXBlKQorCisgICAgICAgICAgICAgICAgb3B0aW9uX2RhdGEgPSBkYXRhLnJlYWQob3B0aW9uX2hlYWRlci5sZW5ndGgpCisKKyAgICAgICAgICAgICAgICBvcHRpb24gPSBIb3BCeUhvcE9wdGlvbihvcHRpb25faGVhZGVyLCBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8ob3B0aW9uX2RhdGEpLCBtZXNzYWdlX2luZm8pKQorCisgICAgICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQob3B0aW9uKQorCisgICAgICAgIHJldHVybiBvcHRpb25zCisKKworY2xhc3MgSG9wQnlIb3BGYWN0b3J5KFBhY2tldEZhY3RvcnkpOgorCisgICAgIiIiIEZhY3RvcnkgdGhhdCBwcm9kdWNlcyBIb3BCeUhvcCBleHRlbnNpb24gaGVhZGVycyBmcm9tIGRhdGEuICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvcF9ieV9ob3Bfb3B0aW9uc19mYWN0b3J5KToKKyAgICAgICAgc2VsZi5faG9wX2J5X2hvcF9vcHRpb25zX2ZhY3RvcnkgPSBob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yeQorCisgICAgZGVmIF9jYWxjdWxhdGVfZXh0ZW5zaW9uX2hlYWRlcl9sZW5ndGgoc2VsZiwgaGRyX2V4dF9sZW4pOgorICAgICAgICByZXR1cm4gKGhkcl9leHRfbGVuICsgMSkgKiA4CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgbmV4dF9oZWFkZXIgPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIGhkcl9leHRfbGVuID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICAjIE5vdGUhIFR3byBieXRlcyB3ZXJlIHJlYWQgKG5leHRfaGVhZGVyIGFuZCBoZHJfZXh0X2xlbikgc28gdGhleSBtdXN0IGJlIHN1YnN0cmFjdGVkIGZyb20gaGVhZGVyIGxlbmd0aAorICAgICAgICBob3BfYnlfaG9wX2xlbmd0aCA9IHNlbGYuX2NhbGN1bGF0ZV9leHRlbnNpb25faGVhZGVyX2xlbmd0aChoZHJfZXh0X2xlbikgLSAyCisKKyAgICAgICAgaG9wX2J5X2hvcF9kYXRhID0gZGF0YS5yZWFkKGhvcF9ieV9ob3BfbGVuZ3RoKQorCisgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9ob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGhvcF9ieV9ob3BfZGF0YSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICBob3BfYnlfaG9wID0gSG9wQnlIb3AobmV4dF9oZWFkZXIsIG9wdGlvbnMsIGhkcl9leHRfbGVuKQorCisgICAgICAgIG1lc3NhZ2VfaW5mby5wYXlsb2FkX2xlbmd0aCArPSBsZW4oaG9wX2J5X2hvcCkKKworICAgICAgICByZXR1cm4gaG9wX2J5X2hvcAorCisKK2NsYXNzIE1QTE9wdGlvbkZhY3RvcnkoUGFja2V0RmFjdG9yeSk6CisKKyAgICAiIiIgRmFjdG9yeSB0aGF0IHByb2R1Y2VzIE1QTCBvcHRpb25zIGZvciBIb3BCeUhvcCBleHRlbnNpb24gaGVhZGVyLiAiIiIKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICByZXR1cm4gTVBMT3B0aW9uLmZyb21fYnl0ZXMoZGF0YSkKKworCitjbGFzcyBVRFBIZWFkZXJGYWN0b3J5OgorCisgICAgIiIiIEZhY3RvcnkgdGhhdCBwcm9kdWNlcyBVRFAgaGVhZGVyLiAiIiIKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICByZXR1cm4gVURQSGVhZGVyLmZyb21fYnl0ZXMoZGF0YSkKKworCitjbGFzcyBVZHBCYXNlZE9uU3JjRHN0UG9ydHNQYXlsb2FkRmFjdG9yeToKKworICAgICMgVE9ETzogVW5pdHRlc3RzCisKKyAgICAiIiIgRmFjdG9yeSB0aGF0IHByb2R1Y2VzIFVEUCBwYXlsb2FkLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmNfZHN0X3BvcnRfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXMpOgorICAgICAgICAiIiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHNyY19kc3RfcG9ydF9iYXNlZF9wYXlsb2FkX2ZhY3RvcmllcyAoUGFja2V0RmFjdG9yeSk6IEZhY3RvcmllcyBwYXJzZSBVRFAgcGF5bG9hZCBiYXNlZCBvbiBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcG9ydC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2ZhY3RvcmllcyA9IHNyY19kc3RfcG9ydF9iYXNlZF9wYXlsb2FkX2ZhY3RvcmllcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGZhY3RvcnkgPSBOb25lCisKKyAgICAgICAgaWYgbWVzc2FnZV9pbmZvLmRzdF9wb3J0IGluIHNlbGYuX2ZhY3RvcmllczoKKyAgICAgICAgICAgIGZhY3RvcnkgPSBzZWxmLl9mYWN0b3JpZXNbbWVzc2FnZV9pbmZvLmRzdF9wb3J0XQorCisgICAgICAgIGlmIG1lc3NhZ2VfaW5mby5zcmNfcG9ydCBpbiBzZWxmLl9mYWN0b3JpZXM6CisgICAgICAgICAgICBmYWN0b3J5ID0gc2VsZi5fZmFjdG9yaWVzW21lc3NhZ2VfaW5mby5zcmNfcG9ydF0KKworICAgICAgICBpZiBmYWN0b3J5IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZhY3RvcnkgdG8gYnVpbGQgVURQIHBheWxvYWQuIikKKworICAgICAgICByZXR1cm4gZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKworY2xhc3MgVURQRGF0YWdyYW1GYWN0b3J5KFBhY2tldEZhY3RvcnkpOgorCisgICAgIyBUT0RPOiBVbml0dGVzdHMKKworICAgICIiIiBGYWN0b3J5IHRoYXQgcHJvZHVjZXMgVURQIGRhdGFncmFtcy4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWRwX2hlYWRlcl9mYWN0b3J5LCB1ZHBfcGF5bG9hZF9mYWN0b3J5KToKKyAgICAgICAgc2VsZi5fdWRwX2hlYWRlcl9mYWN0b3J5ID0gdWRwX2hlYWRlcl9mYWN0b3J5CisgICAgICAgIHNlbGYuX3VkcF9wYXlsb2FkX2ZhY3RvcnkgPSB1ZHBfcGF5bG9hZF9mYWN0b3J5CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgaGVhZGVyID0gc2VsZi5fdWRwX2hlYWRlcl9mYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFVwZGF0ZSBtZXNzYWdlIHBheWxvYWQgbGVuZ3RoOiBVRFAgaGVhZGVyICg4QikgKyBwYXlsb2FkIGxlbmd0aAorICAgICAgICBtZXNzYWdlX2luZm8ucGF5bG9hZF9sZW5ndGggKz0gbGVuKGhlYWRlcikgKyAobGVuKGRhdGEuZ2V0dmFsdWUoKSkgLSBkYXRhLnRlbGwoKSkKKworICAgICAgICBtZXNzYWdlX2luZm8uc3JjX3BvcnQgPSBoZWFkZXIuc3JjX3BvcnQKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRzdF9wb3J0ID0gaGVhZGVyLmRzdF9wb3J0CisKKyAgICAgICAgcGF5bG9hZCA9IHNlbGYuX3VkcF9wYXlsb2FkX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIHJldHVybiBVRFBEYXRhZ3JhbShoZWFkZXIsIHBheWxvYWQpCisKKworY2xhc3MgSUNNUHY2RmFjdG9yeShQYWNrZXRGYWN0b3J5KToKKworICAgICIiIiBGYWN0b3J5IHRoYXQgcHJvZHVjZXMgSUNNUHY2IG1lc3NhZ2VzIGZyb20gZGF0YS4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYm9keV9mYWN0b3JpZXM9Tm9uZSk6CisgICAgICAgIHNlbGYuX2JvZHlfZmFjdG9yaWVzID0gYm9keV9mYWN0b3JpZXMgaWYgYm9keV9mYWN0b3JpZXMgaXMgbm90IE5vbmUgZWxzZSB7fQorCisgICAgZGVmIF9nZXRfaWNtcHY2X2JvZHlfZmFjdG9yeShzZWxmLCBfdHlwZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ib2R5X2ZhY3Rvcmllc1tfdHlwZV0KKworICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpZiAiZGVmYXVsdCIgbm90IGluIHNlbGYuX2JvZHlfZmFjdG9yaWVzOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ291bGQgbm90IGZpbmQgc3BlY2lhbGl6ZWQgZmFjdG9yeSB0byBwYXJzZSBJQ01QIGJvZHkuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIElDTVAgdHlwZToge30iLmZvcm1hdChfdHlwZSkpCisKKyAgICAgICAgICAgIGRlZmF1bHRfZmFjdG9yeSA9IHNlbGYuX2JvZHlfZmFjdG9yaWVzWyJkZWZhdWx0Il0KKworICAgICAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBmaW5kIHNwZWNpYWxpemVkIGZhY3RvcnkgdG8gcGFyc2UgSUNNUCBib2R5LiAiCisgICAgICAgICAgICAgICAgICAiVGFrZSB0aGUgZGVmYXVsdCBvbmU6IHt9Ii5mb3JtYXQodHlwZShkZWZhdWx0X2ZhY3RvcnkpKSkKKworICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRfZmFjdG9yeQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGhlYWRlciA9IElDTVB2NkhlYWRlci5mcm9tX2J5dGVzKGRhdGEpCisKKyAgICAgICAgZmFjdG9yeSA9IHNlbGYuX2dldF9pY21wdjZfYm9keV9mYWN0b3J5KGhlYWRlci50eXBlKQorCisgICAgICAgIG1lc3NhZ2VfaW5mby5wYXlsb2FkX2xlbmd0aCArPSBsZW4oaGVhZGVyKSArIChsZW4oZGF0YS5nZXR2YWx1ZSgpKSAtIGRhdGEudGVsbCgpKQorCisgICAgICAgIHJldHVybiBJQ01QdjYoaGVhZGVyLCBmYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykpCisKKworY2xhc3MgSUNNUHY2RWNob0JvZHlGYWN0b3J5KFBhY2tldEZhY3RvcnkpOgorCisgICAgIiIiIEZhY3RvcnkgdGhhdCBwcm9kdWNlcyBJQ01QdjYgZWNobyBtZXNzYWdlIGJvZHkuICIiIgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHJldHVybiBJQ01QdjZFY2hvQm9keS5mcm9tX2J5dGVzKGRhdGEpCisKKworY2xhc3MgQnl0ZXNQYXlsb2FkKENvbnZlcnRpYmxlVG9CeXRlcywgQnVpbGRhYmxlRnJvbUJ5dGVzKToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgYnl0ZXMgcGF5bG9hZC4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKworICAgIGRlZiB0b19ieXRlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShzZWxmLmRhdGEpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ieXRlcyhjbHMsIGRhdGEpOgorICAgICAgICByZXR1cm4gY2xzKGRhdGEpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRhdGEpCisKKworY2xhc3MgQnl0ZXNQYXlsb2FkRmFjdG9yeShQYWNrZXRGYWN0b3J5KToKKworICAgICIiIiBGYWN0b3J5IHRoYXQgcHJvZHVjZXMgYnl0ZXMgcGF5bG9hZC4gIiIiCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcmV0dXJuIEJ5dGVzUGF5bG9hZChkYXRhLnJlYWQoKSkKKworCitjbGFzcyBJQ01QdjZFY2hvQm9keShDb252ZXJ0aWJsZVRvQnl0ZXMsIEJ1aWxkYWJsZUZyb21CeXRlcyk6CisKKyAgICAiIiIgQ2xhc3MgcmVwcmVzZW50aW5nIGJvZHkgb2YgSUNNUHY2IGVjaG8gbWVzc2FnZXMuICIiIgorCisgICAgX2hlYWRlcl9sZW5ndGggPSA0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaWRlbnRpZmllciwgc2VxdWVuY2VfbnVtYmVyLCBkYXRhKToKKyAgICAgICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcgorICAgICAgICBzZWxmLnNlcXVlbmNlX251bWJlciA9IHNlcXVlbmNlX251bWJlcgorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygiPkgiLCBzZWxmLmlkZW50aWZpZXIpCisgICAgICAgIGRhdGEgKz0gc3RydWN0LnBhY2soIj5IIiwgc2VsZi5zZXF1ZW5jZV9udW1iZXIpCisgICAgICAgIGRhdGEgKz0gc2VsZi5kYXRhCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ieXRlcyhjbHMsIGRhdGEpOgorICAgICAgICBpZGVudGlmaWVyID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgIHNlcXVlbmNlX251bWJlciA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorCisgICAgICAgIHJldHVybiBjbHMoaWRlbnRpZmllciwgc2VxdWVuY2VfbnVtYmVyLCBkYXRhLnJlYWQoKSkKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faGVhZGVyX2xlbmd0aCArIGxlbihzZWxmLmRhdGEpCisKKworY2xhc3MgSUNNUHY2RGVzdGluYXRpb25VbnJlYWNoYWJsZUZhY3RvcnkoUGFja2V0RmFjdG9yeSk6CisKKyAgICAiIiIgRmFjdG9yeSB0aGF0IHByb2R1Y2VzIElDTVB2NiBlY2hvIG1lc3NhZ2UgYm9keS4gIiIiCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcmV0dXJuIElDTVB2NkRlc3RpbmF0aW9uVW5yZWFjaGFibGUuZnJvbV9ieXRlcyhkYXRhKQorCisKK2NsYXNzIElDTVB2NkRlc3RpbmF0aW9uVW5yZWFjaGFibGUoQ29udmVydGlibGVUb0J5dGVzLCBCdWlsZGFibGVGcm9tQnl0ZXMpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBib2R5IG9mIElDTVB2NiBEZXN0aW5hdGlvbiBVbnJlYWNoYWJsZSBtZXNzYWdlcy4gIiIiCisKKyAgICBfaGVhZGVyX2xlbmd0aCA9IDQKKyAgICBfdW51c2VkID0gMAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoc3RydWN0LnBhY2soIj5JIiwgc2VsZi5fdW51c2VkKSkKKyAgICAgICAgZGF0YSArPSBzZWxmLmRhdGEKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2J5dGVzKGNscywgZGF0YSk6CisgICAgICAgIHVudXNlZCA9IHN0cnVjdC51bnBhY2soIj5JIiwgZGF0YS5yZWFkKDQpKVswXQorICAgICAgICBpZiB1bnVzZWQgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAiSW52YWxpZCB2YWx1ZSBvZiB1bnVzZWQgZmllbGQgaW4gdGhlIElDTVB2NiBEZXN0aW5hdGlvbiBVbnJlYWNoYWJsZSBkYXRhLiBFeHBlY3RlZCB2YWx1ZTogMC4iKQorCisgICAgICAgIHJldHVybiBjbHMoYnl0ZWFycmF5KGRhdGEucmVhZCgpKSkKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faGVhZGVyX2xlbmd0aCArIGxlbihzZWxmLmRhdGEpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L2xvd3Bhbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbG93cGFuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhODgzMDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L2xvd3Bhbi5weQpAQCAtMCwwICsxLDExMDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBpbworaW1wb3J0IGlwYWRkcmVzcworaW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworCitpbXBvcnQgY29tbW9uCitpbXBvcnQgY29uZmlnCitpbXBvcnQgaXB2NgorCisKK2NsYXNzIExvd3BhbklQSEM6CisgICAgIiIiCisgICAgQ2xhc3MgcmVwcmVzZW50aW5nIGEgY29tcHJlc3NlZCBJUCBoZWFkZXIuCisKKyAgICBNb3JlIGRldGFpbHM6CisgICAgICAgIC0gVVJMOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjI4MgorICAgICAgICAtIHNlY3Rpb246IDMuMS4gTE9XUEFOX0lQSEMgRW5jb2RpbmcgRm9ybWF0CisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGYsIG5oLCBobGltLCBjaWQsIHNhYywgc2FtLCBtLCBkYWMsIGRhbSk6CisgICAgICAgIHNlbGYuX3RmID0gdGYKKyAgICAgICAgc2VsZi5fbmggPSBuaAorICAgICAgICBzZWxmLl9obGltID0gaGxpbQorICAgICAgICBzZWxmLl9jaWQgPSBjaWQKKyAgICAgICAgc2VsZi5fc2FjID0gc2FjCisgICAgICAgIHNlbGYuX3NhbSA9IHNhbQorICAgICAgICBzZWxmLl9tID0gbQorICAgICAgICBzZWxmLl9kYWMgPSBkYWMKKyAgICAgICAgc2VsZi5fZGFtID0gZGFtCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90ZgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5oKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBobGltKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faGxpbQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NpZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNhYyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NhYworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNhbShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NhbQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGFjKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGFjCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGFtKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGFtCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ieXRlcyhjbHMsIGRhdGFfYnl0ZXMpOgorICAgICAgICBkYXRhX2J5dGUgPSBkYXRhX2J5dGVzWzBdCisKKyAgICAgICAgaGRyID0gKGRhdGFfYnl0ZSA+PiA1KSAmIDB4MDcKKyAgICAgICAgaWYgaGRyICE9IDB4MDM6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIk5vdCBhIDZMb3dQQU4gcGFja2V0LiIpCisKKyAgICAgICAgdGYgPSAoZGF0YV9ieXRlID4+IDMpICYgMHgwMworICAgICAgICBuaCA9IChkYXRhX2J5dGUgPj4gMikgJiAweDAxCisgICAgICAgIGhsaW0gPSBkYXRhX2J5dGUgJiAweDAzCisKKyAgICAgICAgZGF0YV9ieXRlID0gZGF0YV9ieXRlc1sxXQorCisgICAgICAgIGNpZCA9IChkYXRhX2J5dGUgPj4gNykgJiAweDAxCisgICAgICAgIHNhYyA9IChkYXRhX2J5dGUgPj4gNikgJiAweDAxCisgICAgICAgIHNhbSA9IChkYXRhX2J5dGUgPj4gNCkgJiAweDAzCisgICAgICAgIG0gPSAoZGF0YV9ieXRlID4+IDMpICYgMHgwMQorICAgICAgICBkYWMgPSAoZGF0YV9ieXRlID4+IDIpICYgMHgwMQorICAgICAgICBkYW0gPSBkYXRhX2J5dGUgJiAweDAzCisKKyAgICAgICAgcmV0dXJuIGNscyh0ZiwgbmgsIGhsaW0sIGNpZCwgc2FjLCBzYW0sIG0sIGRhYywgZGFtKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkxvd3BhbklQSEModGY9e30sIG5oPXt9LCBobGltPXt9LCBjaWQ9e30sIHNhYz17fSwgc2FtPXt9LCBtPXt9LCBkYWM9e30sIGRhbT17fSkiLmZvcm1hdChzZWxmLnRmLCBzZWxmLm5oLCBzZWxmLmhsaW0sIHNlbGYuY2lkLCBzZWxmLnNhYywgc2VsZi5zYW0sIHNlbGYubSwgc2VsZi5kYWMsIHNlbGYuZGFtKQorCisKK2NsYXNzIExvd3Bhbk5IQzoKKyAgICAiIiIKKyAgICBDbGFzcyByZXByZXNlbnRpbmcgYSBjb21wcmVzc2VkIGV4dGVuc2lvbiBoZWFkZXIuCisKKyAgICBNb3JlIGRldGFpbHM6CisgICAgICAgIC0gVVJMOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjI4MgorICAgICAgICAtIHNlY3Rpb246IDQuMS4gTE9XUEFOX05IQyBGb3JtYXQKKworICAgICIiIgorCisgICAgTkhDX0VJRF9IT1BfQllfSE9QID0gMAorICAgIE5IQ19FSURfUk9VVElORyA9IDEKKyAgICBOSENfRUlEX0ZSQUdNRU5UID0gMgorICAgIE5IQ19FSURfRFNUX09QVCA9IDMKKyAgICBOSENfRUlEX01PQklMSVRZID0gNAorICAgIE5IQ19FSURfSVBWNl9IRFIgPSA3CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZWlkLCBuaCk6CisgICAgICAgIHNlbGYuX2VpZCA9IGVpZAorICAgICAgICBzZWxmLl9uaCA9IG5oCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZWlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZWlkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uaAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fYnl0ZXMoY2xzLCBkYXRhX2J5dGVzKToKKyAgICAgICAgaGVhZGVyX2J5dGUgPSBkYXRhX2J5dGVzWzBdCisKKyAgICAgICAgZWlkID0gKGhlYWRlcl9ieXRlID4+IDEpICYgMHgwNworICAgICAgICBuaCA9IGhlYWRlcl9ieXRlICYgMHgwMQorCisgICAgICAgIHJldHVybiBjbHMoZWlkLCBuaCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJMb3dwYW5OSEMoZWlkPXt9LCBuaD17fSkiLmZvcm1hdChzZWxmLmVpZCwgc2VsZi5uaCkKKworCitjbGFzcyBMb3dwYW5VRFBIQzoKKyAgICAiIiIKKyAgICBDbGFzcyByZXByZXNlbnRpbmcgY29tcHJlc3NlZCBVRFAgaGVhZGVyLgorCisgICAgTW9yZSBkZXRhaWxzOgorICAgICAgICAtIFVSTDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYyODIKKyAgICAgICAgLSBzZWN0aW9uOiA0LjMuMy4gVURQIExPV1BBTl9OSEMgRm9ybWF0CisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjLCBwKToKKyAgICAgICAgc2VsZi5fYyA9IGMKKyAgICAgICAgc2VsZi5fcCA9IHAKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ieXRlcyhjbHMsIGRhdGFfYnl0ZXMpOgorICAgICAgICBkYXRhX2J5dGUgPSBkYXRhX2J5dGVzWzBdCisKKyAgICAgICAgaGRyID0gKGRhdGFfYnl0ZSA+PiAzKSAmIDB4MWYKKyAgICAgICAgaWYgaGRyICE9IDB4MWU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIk5vdCBhIDZMb3dQQU4gVURQIGhlYWRlci4iKQorCisgICAgICAgIGMgPSAoZGF0YV9ieXRlID4+IDIpICYgMHgwMQorICAgICAgICBwID0gZGF0YV9ieXRlICYgMHgwMworCisgICAgICAgIHJldHVybiBjbHMoYywgcCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJMb3dwYW5VRFBIQyhjPXt9LCBwPXt9KSIuZm9ybWF0KHNlbGYuYywgc2VsZi5wKQorCisKK2NsYXNzIExvd3BhbkhvcEJ5SG9wRmFjdG9yeToKKworICAgICIiIiBGYWN0b3J5IHRoYXQgcHJvZHVjZXMgSG9wQnlIb3AgZXh0ZW5zaW9uIGhlYWRlci4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3RvcnkpOgorICAgICAgICBzZWxmLl9ob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yeSA9IGhvcF9ieV9ob3Bfb3B0aW9uc19mYWN0b3J5CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbmV4dF9oZWFkZXIsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGV4dF9oZWFkZXJfbGVuZ3RoID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBleHRfaGVhZGVyX2RhdGEgPSBkYXRhLnJlYWQoZXh0X2hlYWRlcl9sZW5ndGgpCisKKyAgICAgICAgb3B0aW9ucyA9IHNlbGYuX2hvcF9ieV9ob3Bfb3B0aW9uc19mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZXh0X2hlYWRlcl9kYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIGV4dF9oZWFkZXIgPSBpcHY2LkhvcEJ5SG9wKG5leHRfaGVhZGVyLCBvcHRpb25zKQorCisgICAgICAgIG1lc3NhZ2VfaW5mby5wYXlsb2FkX2xlbmd0aCArPSBsZW4oZXh0X2hlYWRlcikKKworICAgICAgICByZXR1cm4gZXh0X2hlYWRlcgorCisKK2NsYXNzIExvd3BhbkV4dGVuc2lvbkhlYWRlcnNGYWN0b3J5OgorCisgICAgIiIiIEZhY3RvcnkgdGhhdCBwcm9kdWNlcyBleHRlbnNpb24gaGVhZGVycy4gIiIiCisKKyAgICBOSENfTkhfSU5MSU5FID0gMAorICAgIE5IQ19OSF9DT01QUkVTU0VEID0gMQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4dF9oZWFkZXJzX2ZhY3Rvcmllcyk6CisgICAgICAgIHNlbGYuX2V4dF9oZWFkZXJzX2ZhY3RvcmllcyA9IGV4dF9oZWFkZXJzX2ZhY3RvcmllcyBpZiBleHRfaGVhZGVyc19mYWN0b3JpZXMgaXMgbm90IE5vbmUgZWxzZSB7fQorCisgICAgZGVmIF9kZWNvbXByZXNzX25oKHNlbGYsIGhjLCBkYXRhKToKKyAgICAgICAgaWYgaGMubmggPT0gc2VsZi5OSENfTkhfSU5MSU5FOgorICAgICAgICAgICAgcmV0dXJuIG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgZWxpZiBoYy5uaCA9PSBzZWxmLk5IQ19OSF9DT01QUkVTU0VEOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfZ2V0X2V4dF9oZWFkZXJzX2ZhY3Rvcnkoc2VsZiwgZWlkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4dF9oZWFkZXJzX2ZhY3Rvcmllc1tlaWRdCisKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgZmluZCBhbiBleHRlbnNpb24gaGVhZGVyIGZhY3RvcnkgZm9yIHRoZSBFSUQgdHlwZToge30iLmZvcm1hdChlaWQpKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIG5oYyA9IExvd3Bhbk5IQy5mcm9tX2J5dGVzKGJ5dGVhcnJheShkYXRhLnJlYWQoMSkpKQorCisgICAgICAgIG5leHRfaGVhZGVyID0gc2VsZi5fZGVjb21wcmVzc19uaChuaGMsIGRhdGEpCisKKyAgICAgICAgZmFjdG9yeSA9IHNlbGYuX2dldF9leHRfaGVhZGVyc19mYWN0b3J5KG5oYy5laWQpCisKKyAgICAgICAgcmV0dXJuIGZhY3RvcnkucGFyc2UoZGF0YSwgbmV4dF9oZWFkZXIsIG1lc3NhZ2VfaW5mbykKKworCitjbGFzcyBMb3dwYW5VZHBIZWFkZXJGYWN0b3J5OgorCisgICAgIiIiIEZhY3RvcnkgcHJvZHVjaW5nIFVEUCBoZWFkZXIuICIiIgorCisgICAgVURQX0hDX0NfSU5MSU5FID0gMAorICAgIFVEUF9IQ19DX0VMSURFRCA9IDEKKworICAgIFVEUF9IQ19QX0JPVEhfRlVMTCA9IDAKKyAgICBVRFBfSENfUF9EU1RfQ09NUFIgPSAxCisgICAgVURQX0hDX1BfU1JDX0NPTVBSID0gMgorICAgIFVEUF9IQ19QX0JPVEhfQ09NUFIgPSAzCisKKyAgICBkZWYgX2RlY29tcHJlc3NfdWRwX3BvcnRzKHNlbGYsIHVkcGhjLCBkYXRhKToKKyAgICAgICAgaWYgdWRwaGMucCA9PSBzZWxmLlVEUF9IQ19QX0JPVEhfRlVMTDoKKyAgICAgICAgICAgIHNyY19wb3J0ID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgICAgICBkc3RfcG9ydCA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorCisgICAgICAgIGVsaWYgdWRwaGMucCA9PSBzZWxmLlVEUF9IQ19QX0RTVF9DT01QUjoKKyAgICAgICAgICAgIHNyY19wb3J0ID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgICAgICBkc3RfcG9ydCA9IDB4ZjAwMCArIG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgZWxpZiB1ZHBoYy5wID09IHNlbGYuVURQX0hDX1BfU1JDX0NPTVBSOgorICAgICAgICAgICAgc3JjX3BvcnQgPSAweGYwMDAgKyBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICAgICAgZHN0X3BvcnQgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKworICAgICAgICBlbGlmIHVkcGhjLnAgPT0gc2VsZi5VRFBfSENfUF9CT1RIX0NPTVBSOgorICAgICAgICAgICAgdWRwX3BvcnRzX2J5dGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICAgICAgc3JjX3BvcnQgPSAweGYwYjAgKyAoKHVkcF9wb3J0c19ieXRlID4+IDQpICYgMHgwRikKKyAgICAgICAgICAgIGRzdF9wb3J0ID0gMHhmMGIwICsgKHVkcF9wb3J0c19ieXRlICYgMHgwRikKKworICAgICAgICByZXR1cm4gc3JjX3BvcnQsIGRzdF9wb3J0CisKKyAgICBkZWYgX2RlY29tcHJlc3NfdWRwX2NoZWNrc3VtKHNlbGYsIHVkcGhjLCBkYXRhKToKKyAgICAgICAgaWYgdWRwaGMuYyA9PSBzZWxmLlVEUF9IQ19DX0lOTElORToKKyAgICAgICAgICAgIGNoZWNrc3VtID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisKKyAgICAgICAgaWYgdWRwaGMuYyA9PSBzZWxmLlVEUF9IQ19DX0VMSURFRDoKKyAgICAgICAgICAgIGNoZWNrc3VtID0gMAorCisgICAgICAgIHJldHVybiBjaGVja3N1bQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHVkcGhjID0gTG93cGFuVURQSEMuZnJvbV9ieXRlcyhieXRlYXJyYXkoZGF0YS5yZWFkKDEpKSkKKworICAgICAgICBzcmNfcG9ydCwgZHN0X3BvcnQgPSBzZWxmLl9kZWNvbXByZXNzX3VkcF9wb3J0cyh1ZHBoYywgZGF0YSkKKworICAgICAgICBjaGVja3N1bSA9IHNlbGYuX2RlY29tcHJlc3NfdWRwX2NoZWNrc3VtKHVkcGhjLCBkYXRhKQorCisgICAgICAgIGhlYWRlciA9IGlwdjYuVURQSGVhZGVyKHNyY19wb3J0LCBkc3RfcG9ydCwgY2hlY2tzdW09Y2hlY2tzdW0pCisKKyAgICAgICAgcmV0dXJuIGhlYWRlcgorCisKK2NsYXNzIENvbnRleHQoKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmVmaXgsIHByZWZpeF9sZW5ndGg9Tm9uZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UocHJlZml4LCBzdHIpOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA9PSAyOgorICAgICAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeC5kZWNvZGUoInV0Zi04IikKKworICAgICAgICAgICAgcHJlZml4LCBwcmVmaXhfbGVuZ3RoID0gcHJlZml4LnNwbGl0KCIvIikKKyAgICAgICAgICAgIHByZWZpeF9sZW5ndGggPSBpbnQocHJlZml4X2xlbmd0aCkKKworICAgICAgICAgICAgYSA9IGlwYWRkcmVzcy5pcF9hZGRyZXNzKHByZWZpeCkKKworICAgICAgICAgICAgc2VsZi5fcHJlZml4ID0gYnl0ZWFycmF5KGEucGFja2VkKQorICAgICAgICAgICAgc2VsZi5fcHJlZml4X2xlbmd0aCA9IHByZWZpeF9sZW5ndGgKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UocHJlZml4LCBieXRlYXJyYXkpOgorICAgICAgICAgICAgc2VsZi5fcHJlZml4ID0gcHJlZml4CisgICAgICAgICAgICBzZWxmLl9wcmVmaXhfbGVuZ3RoID0gcHJlZml4X2xlbmd0aCBpZiBwcmVmaXhfbGVuZ3RoIGlzIG5vdCBOb25lIGVsc2UgbGVuKHNlbGYuX3ByZWZpeCkgKiA4CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJlZml4KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJlZml4WzpzZWxmLnByZWZpeF9sZW5ndGhfYWxsX2J5dGVzXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZWZpeF9mdWxsX2J5dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJlZml4WzpzZWxmLnByZWZpeF9sZW5ndGhfZnVsbF9ieXRlc10KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmVmaXhfbGVuZ3RoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJlZml4X2xlbmd0aAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZWZpeF9sZW5ndGhfZnVsbF9ieXRlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGludChzZWxmLl9wcmVmaXhfbGVuZ3RoIC8gOCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmVmaXhfbGVuZ3RoX3Jlc3RfYml0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGludChzZWxmLl9wcmVmaXhfbGVuZ3RoICUgOCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmVmaXhfbGVuZ3RoX2FsbF9ieXRlcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5wcmVmaXhfbGVuZ3RoX3Jlc3RfYml0cyA+IDA6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYucHJlZml4X2xlbmd0aF9mdWxsX2J5dGVzICsgMSkKKworICAgICAgICByZXR1cm4gc2VsZi5wcmVmaXhfbGVuZ3RoX2Z1bGxfYnl0ZXMKKworCitjbGFzcyBDb250ZXh0TWFuYWdlcihkaWN0KToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgQ29udGV4dCBNYW5hZ2VyLiAiIiIKKworICAgIGRlZiBfX2NoZWNrX2luZGV4KHNlbGYsIGluZGV4KToKKyAgICAgICAgaWYgaW5kZXggPCAwIG9yIGluZGV4ID4gMTU6CisgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKCJJbnZhbGlkIGluZGV4OiB7fS4gVmFsaWQgaW5kZXggaXMgaW4gcmFuZ2UgWzAsIDE1XSIuZm9ybWF0KGluZGV4KSkKKworICAgIGRlZiBfX2NoZWNrX3R5cGUoc2VsZiwgdmFsdWUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgQ29udGV4dCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkludmFsaWQgdmFsdWUgdHlwZToge30iLmZvcm1hdCh0eXBlKHZhbHVlKSkpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICBzZWxmLl9fY2hlY2tfaW5kZXgoaW5kZXgpCisKKyAgICAgICAgcmV0dXJuIHN1cGVyKENvbnRleHRNYW5hZ2VyLCBzZWxmKS5fX2dldGl0ZW1fXyhpbmRleCkKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgdmFsdWUpOgorICAgICAgICBzZWxmLl9fY2hlY2tfaW5kZXgoaW5kZXgpCisgICAgICAgIHNlbGYuX19jaGVja190eXBlKHZhbHVlKQorCisgICAgICAgIHJldHVybiBzdXBlcihDb250ZXh0TWFuYWdlciwgc2VsZikuX19zZXRpdGVtX18oaW5kZXgsIHZhbHVlKQorCisKK2NsYXNzIExvd3BhbklwdjZIZWFkZXJGYWN0b3J5OgorCisgICAgIiIiIEZhY3RvcnkgdGhhdCBwcm9kdWNlcyBJUHY2IGhlYWRlci4gIiIiCisKKyAgICBJUFY2X0xJTktMT0NBTF9QUkVGSVggPSBieXRlYXJyYXkoWzB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKQorCisgICAgU0hPUlRfQUREUl9QQURESU5HX0JZVEVTID0gYnl0ZWFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZlLCAweDAwXSkKKworICAgIElQSENfVEZfNEIgPSAwCisgICAgSVBIQ19URl8zQiA9IDEKKyAgICBJUEhDX1RGXzFCID0gMgorICAgIElQSENfVEZfRUxJREVEID0gMworCisgICAgSVBIQ19OSF9JTkxJTkUgPSAwCisgICAgSVBIQ19OSF9DT01QUkVTU0VEID0gMQorCisgICAgSVBIQ19ITElNX0NBTENVTEFURSA9IC0xCisgICAgSVBIQ19ITElNX0lOTElORSA9IDAKKyAgICBJUEhDX0hMSU1fMSA9IDEKKyAgICBJUEhDX0hMSU1fNjQgPSAyCisgICAgSVBIQ19ITElNXzI1NSA9IDMKKworICAgIElQSENfQ0lEX0NMRUFSID0gMAorICAgIElQSENfQ0lEX1NFVCA9IDEKKworICAgIElQSENfU0FDX1NUQVRFTEVTUyA9IDAKKyAgICBJUEhDX1NBQ19TVEFURUZVTCA9IDEKKworICAgIElQSENfU0FNXzEyOEIgPSAwCisgICAgSVBIQ19TQU1fVU5TUEVDSUZJRUQgPSAwCisgICAgSVBIQ19TQU1fNjRCID0gMQorICAgIElQSENfU0FNXzE2QiA9IDIKKyAgICBJUEhDX1NBTV8wQiA9IDMKKyAgICBJUEhDX1NBTV9FTElERUQgPSAzCisKKyAgICBJUEhDX01fTk8gPSAwCisgICAgSVBIQ19NX1lFUyA9IDEKKworICAgIElQSENfREFDX1NUQVRFTEVTUyA9IDAKKyAgICBJUEhDX0RBQ19TVEFURUZVTCA9IDEKKworICAgIElQSENfREFNXzEyOEIgPSAwCisgICAgSVBIQ19EQU1fNjRCID0gMQorICAgIElQSENfREFNXzQ4QiA9IDEKKyAgICBJUEhDX0RBTV8zMkIgPSAyCisgICAgSVBIQ19EQU1fMTZCID0gMgorICAgIElQSENfREFNXzhCID0gMworICAgIElQSENfREFNXzBCID0gMworICAgIElQSENfREFNX0VMSURFRCA9IDMKKworICAgIElQSENfTV9EQU1fMDAgPSAwCisgICAgSVBIQ19NX0RBTV8wMSA9IDEKKyAgICBJUEhDX01fREFNXzEwID0gMgorICAgIElQSENfTV9EQU1fMTEgPSAzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dF9tYW5hZ2VyPU5vbmUpOgorICAgICAgICBzZWxmLl9jb250ZXh0X21hbmFnZXIgPSBjb250ZXh0X21hbmFnZXIKKworICAgIGRlZiBfZmxvd19sYWJlbChzZWxmLCBkYXRhX2J5dGVzKToKKyAgICAgICAgZmxvd19sYWJlbCA9IChkYXRhX2J5dGVzWzBdICYgMHgwRikgPDwgMTYKKyAgICAgICAgZmxvd19sYWJlbCArPSBkYXRhX2J5dGVzWzFdIDw8IDgKKyAgICAgICAgZmxvd19sYWJlbCArPSBkYXRhX2J5dGVzWzJdCisgICAgICAgIHJldHVybiBmbG93X2xhYmVsCisKKyAgICBkZWYgX3RyYWZmaWNfY2xhc3Moc2VsZiwgZHNjcCwgZWNuKToKKyAgICAgICAgcmV0dXJuIChkc2NwIDw8IDIpIHwgZWNuCisKKyAgICBkZWYgX3VucGFja19kc2NwKHNlbGYsIGRhdGFfYnl0ZSk6CisgICAgICAgIHJldHVybiAoZGF0YV9ieXRlICYgMHgzRikKKworICAgIGRlZiBfdW5wYWNrX2VjbihzZWxmLCBkYXRhX2J5dGUpOgorICAgICAgICByZXR1cm4gKGRhdGFfYnl0ZSA+PiA2KQorCisgICAgZGVmIF9kZWNvbXByZXNzX3RmXzRieXRlcyhzZWxmLCBkYXRhKToKKyAgICAgICAgZGF0YV9ieXRlcyA9IFtiIGZvciBiIGluIGJ5dGVhcnJheShkYXRhLnJlYWQoNCkpXQorCisgICAgICAgIGRzY3AgPSBzZWxmLl91bnBhY2tfZHNjcChkYXRhX2J5dGVzWzBdKQorICAgICAgICBlY24gPSBzZWxmLl91bnBhY2tfZWNuKGRhdGFfYnl0ZXNbMF0pCisKKyAgICAgICAgdHJhZmZpY19jbGFzcyA9IHNlbGYuX3RyYWZmaWNfY2xhc3MoZHNjcCwgZWNuKQorICAgICAgICBmbG93X2xhYmVsID0gc2VsZi5fZmxvd19sYWJlbChkYXRhX2J5dGVzWzE6XSkKKworICAgICAgICByZXR1cm4gdHJhZmZpY19jbGFzcywgZmxvd19sYWJlbAorCisgICAgZGVmIF9kZWNvbXByZXNzX3RmXzNieXRlcyhzZWxmLCBkYXRhKToKKyAgICAgICAgZGF0YV9ieXRlcyA9IFtiIGZvciBiIGluIGJ5dGVhcnJheShkYXRhLnJlYWQoMykpXQorCisgICAgICAgIGVjbiA9IHNlbGYuX3VucGFja19lY24oZGF0YV9ieXRlc1swXSkKKworICAgICAgICB0cmFmZmljX2NsYXNzID0gc2VsZi5fdHJhZmZpY19jbGFzcyhkc2NwPTAsIGVjbj1lY24pCisgICAgICAgIGZsb3dfbGFiZWwgPSBzZWxmLl9mbG93X2xhYmVsKGRhdGFfYnl0ZXMpCisKKyAgICAgICAgcmV0dXJuIHRyYWZmaWNfY2xhc3MsIGZsb3dfbGFiZWwKKworICAgIGRlZiBfZGVjb21wcmVzc190Zl8xYnl0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgZGF0YV9ieXRlID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBkc2NwID0gc2VsZi5fdW5wYWNrX2RzY3AoZGF0YV9ieXRlKQorICAgICAgICBlY24gPSBzZWxmLl91bnBhY2tfZWNuKGRhdGFfYnl0ZSkKKworICAgICAgICB0cmFmZmljX2NsYXNzID0gc2VsZi5fdHJhZmZpY19jbGFzcyhkc2NwLCBlY24pCisgICAgICAgIGZsb3dfbGFiZWwgPSAwCisKKyAgICAgICAgcmV0dXJuIHRyYWZmaWNfY2xhc3MsIGZsb3dfbGFiZWwKKworICAgIGRlZiBfZGVjb21wcmVzc190ZihzZWxmLCBpcGhjLCBkYXRhKToKKyAgICAgICAgaWYgaXBoYy50ZiA9PSBzZWxmLklQSENfVEZfNEI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVjb21wcmVzc190Zl80Ynl0ZXMoZGF0YSkKKworICAgICAgICBlbGlmIGlwaGMudGYgPT0gc2VsZi5JUEhDX1RGXzNCOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RlY29tcHJlc3NfdGZfM2J5dGVzKGRhdGEpCisKKyAgICAgICAgZWxpZiBpcGhjLnRmID09IHNlbGYuSVBIQ19URl8xQjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZWNvbXByZXNzX3RmXzFieXRlKGRhdGEpCisKKyAgICAgICAgZWxpZiBpcGhjLnRmID09IHNlbGYuSVBIQ19URl9FTElERUQ6CisgICAgICAgICAgICByZXR1cm4gMCwgMAorCisgICAgZGVmIF9kZWNvbXByZXNzX25oKHNlbGYsIGhjLCBkYXRhKToKKyAgICAgICAgaWYgaGMubmggPT0gc2VsZi5JUEhDX05IX0lOTElORToKKyAgICAgICAgICAgIHJldHVybiBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIGVsaWYgaGMubmggPT0gc2VsZi5JUEhDX05IX0NPTVBSRVNTRUQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9kZWNvbXByZXNzX2hsaW0oc2VsZiwgaXBoYywgZGF0YSk6CisgICAgICAgIGlmIGlwaGMuaGxpbSA9PSBzZWxmLklQSENfSExJTV9JTkxJTkU6CisgICAgICAgICAgICByZXR1cm4gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBlbGlmIGlwaGMuaGxpbSA9PSBzZWxmLklQSENfSExJTV8xOgorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBlbGlmIGlwaGMuaGxpbSA9PSBzZWxmLklQSENfSExJTV82NDoKKyAgICAgICAgICAgIHJldHVybiA2NAorCisgICAgICAgIGVsaWYgaXBoYy5obGltID09IHNlbGYuSVBIQ19ITElNXzI1NToKKyAgICAgICAgICAgIHJldHVybiAyNTUKKworICAgIGRlZiBfZGVjb21wcmVzc19jaWQoc2VsZiwgaXBoYywgZGF0YSk6CisgICAgICAgIGlmIGlwaGMuY2lkID09IHNlbGYuSVBIQ19DSURfU0VUOgorICAgICAgICAgICAgY2lkID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICAgICAgc2NpID0gKGNpZCA+PiA0KSAmIDB4MGYKKyAgICAgICAgICAgIGRjaSA9IGNpZCAmIDB4MGYKKworICAgICAgICAgICAgcmV0dXJuIHNjaSwgZGNpCisKKyAgICAgICAgZWxpZiBpcGhjLmNpZCA9PSBzZWxmLklQSENfQ0lEX0NMRUFSOgorICAgICAgICAgICAgcmV0dXJuIDAsIDAKKworICAgIGRlZiBfZGVjb21wcmVzc19zcmNfYWRkcl9zdGF0ZWxlc3Moc2VsZiwgaXBoYywgc3JjX21hY19hZGRyLCBkYXRhKToKKyAgICAgICAgaWYgaXBoYy5zYW0gPT0gc2VsZi5JUEhDX1NBTV8xMjhCOgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShkYXRhLnJlYWQoMTYpKQorCisgICAgICAgIGVsaWYgaXBoYy5zYW0gPT0gc2VsZi5JUEhDX1NBTV82NEI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5JUFY2X0xJTktMT0NBTF9QUkVGSVggKyBieXRlYXJyYXkoZGF0YS5yZWFkKDgpKQorCisgICAgICAgIGVsaWYgaXBoYy5zYW0gPT0gc2VsZi5JUEhDX1NBTV8xNkI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5JUFY2X0xJTktMT0NBTF9QUkVGSVggKyBzZWxmLlNIT1JUX0FERFJfUEFERElOR19CWVRFUyArIGJ5dGVhcnJheShkYXRhLnJlYWQoMikpCisKKyAgICAgICAgZWxpZiBpcGhjLnNhbSA9PSBzZWxmLklQSENfU0FNX0VMSURFRDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLklQVjZfTElOS0xPQ0FMX1BSRUZJWCArIHNyY19tYWNfYWRkci5jb252ZXJ0X3RvX2lpZCgpCisKKyAgICBkZWYgX21lcmdlX3ByZWZpeF93aXRoX2FkZHJlc3Moc2VsZiwgcHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBhZGRyZXNzX2J5dGVzKToKKyAgICAgICAgcmVxdWlyZWRfYnl0ZXMgPSAxNgorCisgICAgICAgIHByZWZpeF9sZW5ndGhfZnVsbF9ieXRlcyA9IGludChwcmVmaXhfbGVuZ3RoIC8gOCkKKyAgICAgICAgcHJlZml4X2xlbmd0aF9yZXN0X2JpdHMgPSBpbnQocHJlZml4X2xlbmd0aCAlIDgpCisKKyAgICAgICAgcHJlZml4X2xlbmd0aF9hbGxfYnl0ZXMgPSBwcmVmaXhfbGVuZ3RoX2Z1bGxfYnl0ZXMKKworICAgICAgICBpZiBwcmVmaXhfbGVuZ3RoX3Jlc3RfYml0cyA+IDA6CisgICAgICAgICAgICBwcmVmaXhfbGVuZ3RoX2FsbF9ieXRlcyArPSAxCisKKyAgICAgICAgIyBDYXNlIGluIHdoaWNoIHNvbWUgYnl0ZXMgb3ZlcmxhcAorICAgICAgICBpZiAocHJlZml4X2xlbmd0aF9hbGxfYnl0ZXMgKyBsZW4oYWRkcmVzc19ieXRlcykpID4gcmVxdWlyZWRfYnl0ZXM6CisgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgIyBFeGFtcGxlOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUb3RhbCBhZGRyZXNzIGxlbmd0aDogMTI4IGJpdHMKKyAgICAgICAgICAgICMgICAqIHByZWZpeCBsZW5ndGg6IDY4IGJpdHMKKyAgICAgICAgICAgICMgICAqIGFkZHJlc3MgbGVuZ3RoOiA2NCBiaXRzCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjICAgb3ZlcmxhcDogNCBiaXRzID09PiB0aGUgbGFzdCA0IGJpdHMgb2YgdGhlIGFkZHJlc3MgbXVzdCBiZSByZXBsYWNlZCBieSB0aGUgbGFzdCA0IGJpdHMgb2YgcHJlZml4CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFJlc3VsdDoKKyAgICAgICAgICAgICMgICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAjICB8ICBwcmVmaXggKDY4IGJpdHMpICB8ICBhZGRyZXNzICg2NCBiaXRzKSAgfAorICAgICAgICAgICAgIyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgICAgIHNyY19hZGRyID0gcHJlZml4WzpwcmVmaXhfbGVuZ3RoX2Z1bGxfYnl0ZXNdCisgICAgICAgICAgICByZXF1aXJlZF9ieXRlcyAtPSBwcmVmaXhfbGVuZ3RoX2Z1bGxfYnl0ZXMKKworICAgICAgICAgICAgaWYgcHJlZml4X2xlbmd0aF9yZXN0X2JpdHMgPiAwOgorICAgICAgICAgICAgICAgIHByZWZpeF9vdmVybGFwcGluZ19ieXRlID0gcHJlZml4W3ByZWZpeF9sZW5ndGhfYWxsX2J5dGVzIC0gMV0KKyAgICAgICAgICAgICAgICBhZGRyZXNzX292ZXJsYXBwaW5nX2J5dGUgPSBhZGRyZXNzX2J5dGVzWy1yZXF1aXJlZF9ieXRlc10KKworICAgICAgICAgICAgICAgIG92ZXJsYXBwaW5nX2J5dGUgPSBwcmVmaXhfb3ZlcmxhcHBpbmdfYnl0ZSAmIH4oMHhmZiA+PiBwcmVmaXhfbGVuZ3RoX3Jlc3RfYml0cykKKyAgICAgICAgICAgICAgICBvdmVybGFwcGluZ19ieXRlIHw9IGFkZHJlc3Nfb3ZlcmxhcHBpbmdfYnl0ZSAmICgweGZmID4+IHByZWZpeF9sZW5ndGhfcmVzdF9iaXRzKQorCisgICAgICAgICAgICAgICAgc3JjX2FkZHIgKz0gYnl0ZWFycmF5KFtvdmVybGFwcGluZ19ieXRlXSkKKyAgICAgICAgICAgICAgICByZXF1aXJlZF9ieXRlcyAtPSAxCisKKyAgICAgICAgICAgIGlmIHJlcXVpcmVkX2J5dGVzID4gMDoKKyAgICAgICAgICAgICAgICBzcmNfYWRkciArPSBhZGRyZXNzX2J5dGVzWy1yZXF1aXJlZF9ieXRlczpdCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcXVpcmVkX2J5dGVzIC09IHByZWZpeF9sZW5ndGhfYWxsX2J5dGVzCisgICAgICAgICAgICByZXF1aXJlZF9ieXRlcyAtPSBsZW4oYWRkcmVzc19ieXRlcykKKworICAgICAgICAgICAgc3JjX2FkZHIgPSBwcmVmaXhbOnByZWZpeF9sZW5ndGhfYWxsX2J5dGVzXSArIGJ5dGVhcnJheShbMHgwMF0gKiByZXF1aXJlZF9ieXRlcykgKyBhZGRyZXNzX2J5dGVzCisKKyAgICAgICAgcmV0dXJuIHNyY19hZGRyCisKKyAgICBkZWYgX2RlY29tcHJlc3Nfc3JjX2FkZHJfc3RhdGVmdWwoc2VsZiwgaXBoYywgc3JjX21hY19hZGRyLCBzY2ksIGRhdGEpOgorICAgICAgICBpZiBpcGhjLnNhbSA9PSBzZWxmLklQSENfU0FNX1VOU1BFQ0lGSUVEOgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShbMHgwMF0gKiAxNikKKworICAgICAgICBlbGlmIGlwaGMuc2FtID09IHNlbGYuSVBIQ19TQU1fNjRCOgorICAgICAgICAgICAgY29udGV4dCA9IHNlbGYuX2NvbnRleHRfbWFuYWdlcltzY2ldCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9tZXJnZV9wcmVmaXhfd2l0aF9hZGRyZXNzKHByZWZpeD1jb250ZXh0LnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9sZW5ndGg9Y29udGV4dC5wcmVmaXhfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19ieXRlcz1ieXRlYXJyYXkoZGF0YS5yZWFkKDgpKSkKKworICAgICAgICBlbGlmIGlwaGMuc2FtID09IHNlbGYuSVBIQ19TQU1fMTZCOgorICAgICAgICAgICAgY29udGV4dCA9IHNlbGYuX2NvbnRleHRfbWFuYWdlcltzY2ldCisgICAgICAgICAgICBhZGRyZXNzX2J5dGVzID0gc2VsZi5TSE9SVF9BRERSX1BBRERJTkdfQllURVMgKyBieXRlYXJyYXkoZGF0YS5yZWFkKDIpKQorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbWVyZ2VfcHJlZml4X3dpdGhfYWRkcmVzcyhwcmVmaXg9Y29udGV4dC5wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfbGVuZ3RoPWNvbnRleHQucHJlZml4X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfYnl0ZXM9YWRkcmVzc19ieXRlcykKKworICAgICAgICBlbGlmIGlwaGMuc2FtID09IHNlbGYuSVBIQ19TQU1fMEI6CisgICAgICAgICAgICBjb250ZXh0ID0gc2VsZi5fY29udGV4dF9tYW5hZ2VyW3NjaV0KKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21lcmdlX3ByZWZpeF93aXRoX2FkZHJlc3MocHJlZml4PWNvbnRleHQucHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2xlbmd0aD1jb250ZXh0LnByZWZpeF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX2J5dGVzPXNyY19tYWNfYWRkci5jb252ZXJ0X3RvX2lpZCgpKQorCisgICAgZGVmIF9kZWNvbXByZXNzX3NyY19hZGRyKHNlbGYsIGlwaGMsIHNyY19tYWNfYWRkciwgc2NpLCBkYXRhKToKKyAgICAgICAgaWYgaXBoYy5zYWMgPT0gc2VsZi5JUEhDX1NBQ19TVEFURUxFU1M6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVjb21wcmVzc19zcmNfYWRkcl9zdGF0ZWxlc3MoaXBoYywgc3JjX21hY19hZGRyLCBkYXRhKQorCisgICAgICAgIGVsaWYgaXBoYy5zYWMgPT0gc2VsZi5JUEhDX1NBQ19TVEFURUZVTDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZWNvbXByZXNzX3NyY19hZGRyX3N0YXRlZnVsKGlwaGMsIHNyY19tYWNfYWRkciwgc2NpLCBkYXRhKQorCisgICAgZGVmIF9kZWNvbXByZXNzX3VuaWNhc3RfZHN0X2FkZHJfc3RhdGVsZXNzKHNlbGYsIGlwaGMsIGRzdF9tYWNfYWRkciwgZGF0YSk6CisgICAgICAgIGlmIGlwaGMuZGFtID09IHNlbGYuSVBIQ19EQU1fMTI4QjoKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoZGF0YS5yZWFkKDE2KSkKKworICAgICAgICBlbGlmIGlwaGMuZGFtID09IHNlbGYuSVBIQ19EQU1fNjRCOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuSVBWNl9MSU5LTE9DQUxfUFJFRklYICsgYnl0ZWFycmF5KGRhdGEucmVhZCg4KSkKKworICAgICAgICBlbGlmIGlwaGMuZGFtID09IHNlbGYuSVBIQ19EQU1fMTZCOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuSVBWNl9MSU5LTE9DQUxfUFJFRklYICsgc2VsZi5TSE9SVF9BRERSX1BBRERJTkdfQllURVMgKyBieXRlYXJyYXkoZGF0YS5yZWFkKDIpKQorCisgICAgICAgIGVsaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX0RBTV9FTElERUQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5JUFY2X0xJTktMT0NBTF9QUkVGSVggKyBkc3RfbWFjX2FkZHIuY29udmVydF90b19paWQoKQorCisgICAgZGVmIF9kZWNvbXByZXNzX3VuaWNhc3RfZHN0X2FkZHJfc3RhdGVmdWwoc2VsZiwgaXBoYywgZHN0X21hY19hZGRyLCBkY2ksIGRhdGEpOgorICAgICAgICBpZiBpcGhjLmRhbSA9PSBzZWxmLklQSENfREFNXzEyOEI6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlJlc2VydmVkIikKKworICAgICAgICBlbGlmIGlwaGMuZGFtID09IHNlbGYuSVBIQ19EQU1fNjRCOgorICAgICAgICAgICAgY29udGV4dCA9IHNlbGYuX2NvbnRleHRfbWFuYWdlcltkY2ldCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9tZXJnZV9wcmVmaXhfd2l0aF9hZGRyZXNzKHByZWZpeD1jb250ZXh0LnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9sZW5ndGg9Y29udGV4dC5wcmVmaXhfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19ieXRlcz1ieXRlYXJyYXkoZGF0YS5yZWFkKDgpKSkKKworICAgICAgICBlbGlmIGlwaGMuZGFtID09IHNlbGYuSVBIQ19EQU1fMTZCOgorICAgICAgICAgICAgY29udGV4dCA9IHNlbGYuX2NvbnRleHRfbWFuYWdlcltkY2ldCisgICAgICAgICAgICBhZGRyZXNzX2J5dGVzID0gc2VsZi5TSE9SVF9BRERSX1BBRERJTkdfQllURVMgKyBieXRlYXJyYXkoZGF0YS5yZWFkKDIpKQorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbWVyZ2VfcHJlZml4X3dpdGhfYWRkcmVzcyhwcmVmaXg9Y29udGV4dC5wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfbGVuZ3RoPWNvbnRleHQucHJlZml4X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfYnl0ZXM9YWRkcmVzc19ieXRlcykKKworICAgICAgICBlbGlmIGlwaGMuZGFtID09IHNlbGYuSVBIQ19EQU1fMEI6CisgICAgICAgICAgICBjb250ZXh0ID0gc2VsZi5fY29udGV4dF9tYW5hZ2VyW2RjaV0KKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21lcmdlX3ByZWZpeF93aXRoX2FkZHJlc3MocHJlZml4PWNvbnRleHQucHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2xlbmd0aD1jb250ZXh0LnByZWZpeF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX2J5dGVzPWRzdF9tYWNfYWRkci5jb252ZXJ0X3RvX2lpZCgpKQorCisgICAgZGVmIF9kZWNvbXByZXNzX3VuaWNhc3RfZHN0X2FkZHIoc2VsZiwgaXBoYywgZHN0X21hY19hZGRyLCBkY2ksIGRhdGEpOgorICAgICAgICBpZiBpcGhjLmRhYyA9PSBzZWxmLklQSENfREFDX1NUQVRFTEVTUzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZWNvbXByZXNzX3VuaWNhc3RfZHN0X2FkZHJfc3RhdGVsZXNzKGlwaGMsIGRzdF9tYWNfYWRkciwgZGF0YSkKKworICAgICAgICBlbGlmIGlwaGMuZGFjID09IHNlbGYuSVBIQ19EQUNfU1RBVEVGVUw6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVjb21wcmVzc191bmljYXN0X2RzdF9hZGRyX3N0YXRlZnVsKGlwaGMsIGRzdF9tYWNfYWRkciwgZGNpLCBkYXRhKQorCisgICAgZGVmIF9kZWNvbXByZXNzX211bHRpY2FzdF9kc3RfYWRkcl9zdGF0ZWxlc3Moc2VsZiwgaXBoYywgZGF0YSk6CisgICAgICAgIGlmIGlwaGMuZGFtID09IHNlbGYuSVBIQ19EQU1fMTI4QjoKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoZGF0YS5yZWFkKDE2KSkKKworICAgICAgICBlbGlmIGlwaGMuZGFtID09IHNlbGYuSVBIQ19EQU1fNDhCOgorICAgICAgICAgICAgYWRkcjQ4YiA9IGJ5dGVhcnJheShkYXRhLnJlYWQoNikpCisgICAgICAgICAgICByZXR1cm4gYnl0ZWFycmF5KFsweGZmLCBhZGRyNDhiWzBdXSkgKyBieXRlYXJyYXkoWzB4MDBdICogOSkgKyBhZGRyNDhiWzE6XQorCisgICAgICAgIGVsaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX0RBTV8zMkI6CisgICAgICAgICAgICBhZGRyMzJiID0gYnl0ZWFycmF5KGRhdGEucmVhZCg0KSkKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoWzB4RkYsIGFkZHIzMmJbMF1dKSArIGJ5dGVhcnJheShbMHgwMF0gKiAxMSkgKyBhZGRyMzJiWzE6XQorCisgICAgICAgIGVsaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX0RBTV84QjoKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoWzB4RkYsIDB4MDJdKSArIGJ5dGVhcnJheShbMHgwMF0gKiAxMykgKyBkYXRhLnJlYWQoMSkKKworICAgIGRlZiBfZGVjb21wcmVzc19tdWx0aWNhc3RfZHN0X2FkZHJfc3RhdGVmdWwoc2VsZiwgaXBoYywgZGNpLCBkYXRhKToKKyAgICAgICAgaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX01fREFNXzAwOgorICAgICAgICAgICAgY29udGV4dCA9IHNlbGYuX2NvbnRleHRfbWFuYWdlcltkY2ldCisKKyAgICAgICAgICAgIGFkZHI0OGIgPSBieXRlYXJyYXkoZGF0YS5yZWFkKDYpKQorCisgICAgICAgICAgICBwX2J5dGVzX2NvdW50ID0gOAorCisgICAgICAgICAgICBwcmVmaXggPSBjb250ZXh0LnByZWZpeFs6cF9ieXRlc19jb3VudF0KKyAgICAgICAgICAgIHByZWZpeF9sZW5ndGggPSBjb250ZXh0LnByZWZpeF9sZW5ndGgKKworICAgICAgICAgICAgbWlzc2luZ19ieXRlcyA9IHBfYnl0ZXNfY291bnQgLSBsZW4ocHJlZml4KQorCisgICAgICAgICAgICBpZiBtaXNzaW5nX2J5dGVzID4gMDoKKyAgICAgICAgICAgICAgICBwcmVmaXggKz0gYnl0ZWFycmF5KFsweDAwXSAqIG1pc3NpbmdfYnl0ZXMpCisKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoWzB4ZmZdKSArIGFkZHI0OGJbOjJdICsgYnl0ZWFycmF5KFtwcmVmaXhfbGVuZ3RoXSkgKyBwcmVmaXggKyBhZGRyNDhiWzI6XQorCisgICAgICAgIGVsaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX01fREFNXzAxOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJSZXNlcnZlZCIpCisKKyAgICAgICAgZWxpZiBpcGhjLmRhbSA9PSBzZWxmLklQSENfTV9EQU1fMTA6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlJlc2VydmVkIikKKworICAgICAgICBlbGlmIGlwaGMuZGFtID09IHNlbGYuSVBIQ19NX0RBTV8xMToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUmVzZXJ2ZWQiKQorCisgICAgZGVmIF9kZWNvbXByZXNzX211bHRpY2FzdF9kc3RfYWRkcihzZWxmLCBpcGhjLCBkY2ksIGRhdGEpOgorICAgICAgICBpZiBpcGhjLmRhYyA9PSBzZWxmLklQSENfREFDX1NUQVRFTEVTUzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZWNvbXByZXNzX211bHRpY2FzdF9kc3RfYWRkcl9zdGF0ZWxlc3MoaXBoYywgZGF0YSkKKworICAgICAgICBlbGlmIGlwaGMuZGFjID09IHNlbGYuSVBIQ19EQUNfU1RBVEVGVUw6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVjb21wcmVzc19tdWx0aWNhc3RfZHN0X2FkZHJfc3RhdGVmdWwoaXBoYywgZGNpLCBkYXRhKQorCisgICAgZGVmIF9kZWNvbXByZXNzX2RzdF9hZGRyKHNlbGYsIGlwaGMsIGRzdF9tYWNfYWRkciwgZGNpLCBkYXRhKToKKyAgICAgICAgaWYgaXBoYy5tID09IHNlbGYuSVBIQ19NX05POgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RlY29tcHJlc3NfdW5pY2FzdF9kc3RfYWRkcihpcGhjLCBkc3RfbWFjX2FkZHIsIGRjaSwgZGF0YSkKKworICAgICAgICBlbGlmIGlwaGMubSA9PSBzZWxmLklQSENfTV9ZRVM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVjb21wcmVzc19tdWx0aWNhc3RfZHN0X2FkZHIoaXBoYywgZGNpLCBkYXRhKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGlwaGMgPSBMb3dwYW5JUEhDLmZyb21fYnl0ZXMoYnl0ZWFycmF5KGRhdGEucmVhZCgyKSkpCisKKyAgICAgICAgc2NpLCBkY2kgPSBzZWxmLl9kZWNvbXByZXNzX2NpZChpcGhjLCBkYXRhKQorCisgICAgICAgIHRyYWZmaWNfY2xhc3MsIGZsb3dfbGFiZWwgPSBzZWxmLl9kZWNvbXByZXNzX3RmKGlwaGMsIGRhdGEpCisKKyAgICAgICAgbmV4dF9oZWFkZXIgPSBzZWxmLl9kZWNvbXByZXNzX25oKGlwaGMsIGRhdGEpCisKKyAgICAgICAgaG9wX2xpbWl0ID0gc2VsZi5fZGVjb21wcmVzc19obGltKGlwaGMsIGRhdGEpCisKKyAgICAgICAgc3JjX2FkZHJlc3MgPSBzZWxmLl9kZWNvbXByZXNzX3NyY19hZGRyKGlwaGMsIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MsIHNjaSwgZGF0YSkKKworICAgICAgICBkc3RfYWRkcmVzcyA9IHNlbGYuX2RlY29tcHJlc3NfZHN0X2FkZHIoaXBoYywgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzLCBkY2ksIGRhdGEpCisKKyAgICAgICAgaGVhZGVyID0gaXB2Ni5JUHY2SGVhZGVyKHNyY19hZGRyZXNzLCBkc3RfYWRkcmVzcywgdHJhZmZpY19jbGFzcywgZmxvd19sYWJlbCwgaG9wX2xpbWl0KQorCisgICAgICAgIGhlYWRlci5uZXh0X2hlYWRlciA9IG5leHRfaGVhZGVyCisKKyAgICAgICAgcmV0dXJuIGhlYWRlcgorCisKK2NsYXNzIExvd3BhbkRlY29tcHJlc3NvcjoKKworICAgICIiIiBDbGFzcyBkZWNvbXByZXNzaW5nIDZMb1dQQU4gcGFja2V0cy4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG93cGFuX2lwX2hlYWRlcl9mYWN0b3J5LCBsb3dwYW5fZXh0ZW5zaW9uX2hlYWRlcnNfZmFjdG9yeSwgbG93cGFuX3VkcF9oZWFkZXJfZmFjdG9yeSk6CisgICAgICAgIHNlbGYuX2xvd3Bhbl9pcF9oZWFkZXJfZmFjdG9yeSA9IGxvd3Bhbl9pcF9oZWFkZXJfZmFjdG9yeQorICAgICAgICBzZWxmLl9sb3dwYW5fZXh0ZW5zaW9uX2hlYWRlcnNfZmFjdG9yeSA9IGxvd3Bhbl9leHRlbnNpb25faGVhZGVyc19mYWN0b3J5CisgICAgICAgIHNlbGYuX2xvd3Bhbl91ZHBfaGVhZGVyX2ZhY3RvcnkgPSBsb3dwYW5fdWRwX2hlYWRlcl9mYWN0b3J5CisKKyAgICBkZWYgX2lzX2lwdjZfZXh0ZW5zaW9uX2hlYWRlcihzZWxmLCBoZWFkZXJfZmlyc3RfYnl0ZSk6CisgICAgICAgIHJldHVybiAoKGhlYWRlcl9maXJzdF9ieXRlID4+IDQpICYgMHgwZikgPT0gMHgwZQorCisgICAgZGVmIF9pc191ZHBfaGVhZGVyKHNlbGYsIGhlYWRlcl9maXJzdF9ieXRlKToKKyAgICAgICAgcmV0dXJuICgoaGVhZGVyX2ZpcnN0X2J5dGUgPj4gNCkgJiAweDBmKSA9PSAweDBmCisKKyAgICBkZWYgX3BlZWtfbl9ieXRlcyhzZWxmLCBkYXRhLCBuKToKKyAgICAgICAgcmVhZF9kYXRhID0gZGF0YS5yZWFkKG4pCisgICAgICAgIGRhdGEuc2VlaygtbiwgaW8uU0VFS19DVVIpCisgICAgICAgIHJldHVybiByZWFkX2RhdGEKKworICAgIGRlZiBfaXNfbmV4dF9oZWFkZXJfY29tcHJlc3NlZChzZWxmLCBoZWFkZXIpOgorICAgICAgICByZXR1cm4gKGhlYWRlci5uZXh0X2hlYWRlciBpcyBOb25lKQorCisgICAgZGVmIGRlY29tcHJlc3Moc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgaXB2Nl9oZWFkZXIgPSBzZWxmLl9sb3dwYW5faXBfaGVhZGVyX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIHByZXZpb3VzX2hlYWRlciA9IGlwdjZfaGVhZGVyCisKKyAgICAgICAgZXh0ZW5zaW9uX2hlYWRlcnMgPSBbXQorICAgICAgICB1ZHBfaGVhZGVyID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYuX2lzX25leHRfaGVhZGVyX2NvbXByZXNzZWQoaXB2Nl9oZWFkZXIpOgorCisgICAgICAgICAgICB3aGlsZSBkYXRhLnRlbGwoKSA8IGxlbihkYXRhLmdldHZhbHVlKCkpOgorICAgICAgICAgICAgICAgIGhlYWRlcl9maXJzdF9ieXRlID0gb3JkKHNlbGYuX3BlZWtfbl9ieXRlcyhkYXRhLCAxKSkKKworICAgICAgICAgICAgICAgIGlmIHNlbGYuX2lzX2lwdjZfZXh0ZW5zaW9uX2hlYWRlcihoZWFkZXJfZmlyc3RfYnl0ZSk6CisgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbl9oZWFkZXIgPSBzZWxmLl9sb3dwYW5fZXh0ZW5zaW9uX2hlYWRlcnNfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbl9oZWFkZXJzLmFwcGVuZChleHRlbnNpb25faGVhZGVyKQorCisgICAgICAgICAgICAgICAgICAgICMgVXBkYXRlIG5leHQgaGVhZGVyIGZpZWxkIGluIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfaGVhZGVyLm5leHRfaGVhZGVyID0gZXh0ZW5zaW9uX2hlYWRlci50eXBlCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX2hlYWRlciA9IGV4dGVuc2lvbl9oZWFkZXIKKworICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5faXNfbmV4dF9oZWFkZXJfY29tcHJlc3NlZChleHRlbnNpb25faGVhZGVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlcmUgaXMgbm90IG1vcmUgY29tcHJlc3NlZCBoZWFkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9pc191ZHBfaGVhZGVyKGhlYWRlcl9maXJzdF9ieXRlKToKKyAgICAgICAgICAgICAgICAgICAgdWRwX2hlYWRlciA9IHNlbGYuX2xvd3Bhbl91ZHBfaGVhZGVyX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICAgICAgICAgICAgICMgVXBkYXRlIG5leHQgaGVhZGVyIGZpZWxkIGluIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfaGVhZGVyLm5leHRfaGVhZGVyID0gdWRwX2hlYWRlci50eXBlCisKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVyZSBpcyBub3QgbW9yZSBoZWFkZXJzIGFmdGVyIFVEUCBoZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gaXB2Nl9oZWFkZXIsIGV4dGVuc2lvbl9oZWFkZXJzLCB1ZHBfaGVhZGVyCisKKworY2xhc3MgTG93cGFuTWVzaEhlYWRlcihvYmplY3QpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyA2TG9XUEFOIG1lc2ggaGVhZGVyIChSRkMgNDk0NCA1LjIpLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3BzX2xlZnQsIG9yaWdpbmF0b3JfYWRkcmVzcywgZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX2hvcHNfbGVmdCA9IGhvcHNfbGVmdAorICAgICAgICBzZWxmLl9vcmlnaW5hdG9yX2FkZHJlc3MgPSBvcmlnaW5hdG9yX2FkZHJlc3MKKyAgICAgICAgc2VsZi5fZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcyA9IGZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBob3BzX2xlZnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9ob3BzX2xlZnQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBvcmlnaW5hdG9yX2FkZHJlc3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9vcmlnaW5hdG9yX2FkZHJlc3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmaW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcworCisKK2NsYXNzIExvd3Bhbk1lc2hIZWFkZXJGYWN0b3J5OgorCisgICAgZGVmIF9wYXJzZV9hZGRyZXNzKHNlbGYsIGRhdGEsIGlzX3Nob3J0KToKKyAgICAgICAgaWYgaXNfc2hvcnQ6CisgICAgICAgICAgICByZXR1cm4gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ybG9jMTYoYnl0ZWFycmF5KGRhdGEucmVhZCgyKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NChieXRlYXJyYXkoZGF0YS5yZWFkKDgpKSkKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBkYXRhX2J5dGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIGlzX3Nob3J0X29yaWdpbmF0b3JfYWRkcmVzcyA9IGJvb2woZGF0YV9ieXRlICYgMHgyMCkKKyAgICAgICAgaXNfc2hvcnRfZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcyA9IGJvb2woZGF0YV9ieXRlICYgMHgxMCkKKworICAgICAgICBpZiAoZGF0YV9ieXRlICYgMHgwZikgIT0gMHgwZjoKKyAgICAgICAgICAgIGhvcHNfbGVmdCA9IChkYXRhX2J5dGUgJiAweDBmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaG9wc19sZWZ0ID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBvcmlnaW5hdG9yX2FkZHJlc3MgPSBzZWxmLl9wYXJzZV9hZGRyZXNzKGRhdGEsIGlzX3Nob3J0X29yaWdpbmF0b3JfYWRkcmVzcykKKyAgICAgICAgZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcyA9IHNlbGYuX3BhcnNlX2FkZHJlc3MoZGF0YSwgaXNfc2hvcnRfZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcykKKworICAgICAgICByZXR1cm4gTG93cGFuTWVzaEhlYWRlcihob3BzX2xlZnQsIG9yaWdpbmF0b3JfYWRkcmVzcywgZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcykKKworCitjbGFzcyBMb3dwYW5GcmFnbWVudGF0aW9uSGVhZGVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YWdyYW1fc2l6ZSwgZGF0YWdyYW1fdGFnLCBkYXRhZ3JhbV9vZmZzZXQ9MCk6CisgICAgICAgIHNlbGYuX2RhdGFncmFtX3NpemUgPSBkYXRhZ3JhbV9zaXplCisgICAgICAgIHNlbGYuX2RhdGFncmFtX3RhZyA9IGRhdGFncmFtX3RhZworICAgICAgICBzZWxmLl9kYXRhZ3JhbV9vZmZzZXQgPSBkYXRhZ3JhbV9vZmZzZXQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkYXRhZ3JhbV9zaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGF0YWdyYW1fc2l6ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRhdGFncmFtX3RhZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RhdGFncmFtX3RhZworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRhdGFncmFtX29mZnNldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RhdGFncmFtX29mZnNldAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2ZpcnN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhZ3JhbV9vZmZzZXQgPT0gMAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fYnl0ZXMoY2xzLCBkYXRhKToKKyAgICAgICAgZGF0YWdyYW1fc2l6ZSA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICBoYXNfb2Zmc2V0ID0gKChkYXRhZ3JhbV9zaXplID4+IDExKSAmIDB4MWYpID09IDB4MWMKKworICAgICAgICBkYXRhZ3JhbV9zaXplICY9IDB4N2ZmCisgICAgICAgIGRhdGFncmFtX3RhZyA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICBkYXRhZ3JhbV9vZmZzZXQgPSAwCisKKyAgICAgICAgaWYgaGFzX29mZnNldDoKKyAgICAgICAgICAgIGRhdGFncmFtX29mZnNldCA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgcmV0dXJuIGNscyhkYXRhZ3JhbV9zaXplLCBkYXRhZ3JhbV90YWcsIGRhdGFncmFtX29mZnNldCkKKworCitjbGFzcyBMb3dwYW5GcmFnbWVudHNCdWZmZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWZmZXJfc2l6ZSk6CisgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtOb25lXSAqIGJ1ZmZlcl9zaXplCisgICAgICAgIHNlbGYuX3Bvc2l0aW9uID0gMAorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiAoc2VsZi5fcG9zaXRpb24gKyBsZW4oZGF0YSkpID4gbGVuKHNlbGYuX2J1ZmZlcik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJXcml0ZSBmYWlsdXJlLiBEYXRhIGxlbmd0aCBpcyBiaWdnZXIgdGhhbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGxlbmd0aC4iKQorCisgICAgICAgIGZvciBpLCBieXRlIGluIGVudW1lcmF0ZShkYXRhKToKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcltzZWxmLl9wb3NpdGlvbiArIGldID0gYnl0ZQorCisgICAgICAgIHNlbGYuX3Bvc2l0aW9uICs9IGxlbihkYXRhKQorICAgICAgICByZXR1cm4gbGVuKGRhdGEpCisKKyAgICBkZWYgc2VlayhzZWxmLCBvZmZzZXQpOgorICAgICAgICBpZiBvZmZzZXQgPj0gbGVuKHNlbGYuX2J1ZmZlcik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDb3VsZCBub3Qgc2VlayBjdXJyZW50IG9mZnNldC4gT2Zmc2V0IHZhbHVlIGlzIGJpZ2dlciB0aGFuIHRoZSBidWZmZXIgbGVuZ3RoLiIpCisKKyAgICAgICAgc2VsZi5fcG9zaXRpb24gPSBvZmZzZXQKKworICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcG9zaXRpb24KKworICAgIGRlZiB3aG9sZV9wYWNrZXRfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBhbGwoW2J5dGUgaXMgbm90IE5vbmUgZm9yIGJ5dGUgaW4gc2VsZi5fYnVmZmVyXSkKKworICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi53aG9sZV9wYWNrZXRfcmVjZWl2ZWQoKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk9ubHkgYSBwYXJ0IG9mIHRoZSBwYWNrZXQgaGFzIGJlZW4gc3RvcmVkIGluIHRoZSBidWZmZXIuIikKKworICAgICAgICByZXR1cm4gYnl0ZWFycmF5KHNlbGYuX2J1ZmZlcikKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2J1ZmZlcikKKworCitjbGFzcyBMb3dwYW5GcmFnbWVudHNCdWZmZXJzTWFuYWdlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9mcmFnbWVudHNfYnVmZmVycyA9IHt9CisKKyAgICBkZWYgX2NyZWF0ZV9rZXkoc2VsZiwgbWVzc2FnZV9pbmZvLCBkYXRhZ3JhbV90YWcpOgorICAgICAgICBrZXkgPSBieXRlcyhtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzLm1hY19hZGRyZXNzKSArXAorICAgICAgICAgICAgYnl0ZXMobWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzLm1hY19hZGRyZXNzKSArXAorICAgICAgICAgICAgYnl0ZXMoZGF0YWdyYW1fdGFnKQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgX2FsbG9jYXRlX2ZyYWdtZW50c19idWZmZXIoc2VsZiwga2V5LCBkYXRhZ3JhbV9zaXplKToKKyAgICAgICAgaWYgZGF0YWdyYW1fc2l6ZSBpcyBOb25lIG9yIGRhdGFncmFtX3NpemUgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ291bGQgbm90IGFsbG9jYXRlIGZyYWdtZW50cyBidWZmZXIuIEludmFsaWQgZGF0YWdyYW0gc2l6ZToge30iLmZvcm1hdChkYXRhZ3JhbV9zaXplKSkKKworICAgICAgICBmcmFnbWVudHNfYnVmZmVyID0gTG93cGFuRnJhZ21lbnRzQnVmZmVyKGRhdGFncmFtX3NpemUpCisKKyAgICAgICAgc2VsZi5fZnJhZ21lbnRzX2J1ZmZlcnNba2V5XSA9IGZyYWdtZW50c19idWZmZXIKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50c19idWZmZXIKKworICAgIGRlZiBnZXRfZnJhZ21lbnRzX2J1ZmZlcihzZWxmLCBtZXNzYWdlX2luZm8sIGRhdGFncmFtX3RhZywgZGF0YWdyYW1fc2l6ZT1Ob25lKToKKyAgICAgICAga2V5ID0gc2VsZi5fY3JlYXRlX2tleShtZXNzYWdlX2luZm8sIGRhdGFncmFtX3RhZykKKworICAgICAgICBpZiBub3Qga2V5IGluIHNlbGYuX2ZyYWdtZW50c19idWZmZXJzOgorICAgICAgICAgICAgc2VsZi5fYWxsb2NhdGVfZnJhZ21lbnRzX2J1ZmZlcihrZXksIGRhdGFncmFtX3NpemUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZyYWdtZW50c19idWZmZXJzW2tleV0KKworICAgIGRlZiBmcmVlX2ZyYWdtZW50c19idWZmZXIoc2VsZiwgbWVzc2FnZV9pbmZvLCBkYXRhZ3JhbV90YWcpOgorICAgICAgICBrZXkgPSBzZWxmLl9jcmVhdGVfa2V5KG1lc3NhZ2VfaW5mbywgZGF0YWdyYW1fdGFnKQorCisgICAgICAgIGRlbCBzZWxmLl9mcmFnbWVudHNfYnVmZmVyc1trZXldCisKKworY2xhc3MgTG93cGFuUGFyc2VyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG93cGFuX21lc2hfaGVhZGVyX2ZhY3RvcnksIGxvd3Bhbl9kZWNvbXByZXNzb3IsIGxvd3Bhbl9mcmFnZW1lbnRzX2J1ZmZlcnNfbWFuYWdlciwgaXB2Nl9wYWNrZXRfZmFjdG9yeSk6CisgICAgICAgIHNlbGYuX2xvd3Bhbl9tZXNoX2hlYWRlcl9mYWN0b3J5ID0gbG93cGFuX21lc2hfaGVhZGVyX2ZhY3RvcnkKKyAgICAgICAgc2VsZi5fbG93cGFuX2RlY29tcHJlc3NvciA9IGxvd3Bhbl9kZWNvbXByZXNzb3IKKyAgICAgICAgc2VsZi5fbG93cGFuX2ZyYWdtZW50c19idWZmZXJzX21hbmFnZXIgPSBsb3dwYW5fZnJhZ2VtZW50c19idWZmZXJzX21hbmFnZXIKKyAgICAgICAgc2VsZi5faXB2Nl9wYWNrZXRfZmFjdG9yeSA9IGlwdjZfcGFja2V0X2ZhY3RvcnkKKworICAgIGRlZiBfcGVla19uX2J5dGVzKHNlbGYsIGRhdGEsIG4pOgorICAgICAgICBkYXRhX2J5dGVzID0gZGF0YS5yZWFkKG4pCisgICAgICAgIGRhdGEuc2VlaygtbiwgaW8uU0VFS19DVVIpCisgICAgICAgIHJldHVybiBkYXRhX2J5dGVzCisKKyAgICBkZWYgX2lzX21lc2hfaGVhZGVyKHNlbGYsIGZpcnN0X2J5dGUpOgorICAgICAgICByZXR1cm4gKCgoZmlyc3RfYnl0ZSA+PiA2KSAmIDB4MDMpID09IDB4MDIpCisKKyAgICBkZWYgX2lzX2ZpcnN0X2ZyYWdtZW50YXRpb25faGVhZGVyKHNlbGYsIGZpcnN0X2J5dGUpOgorICAgICAgICByZXR1cm4gKCgoZmlyc3RfYnl0ZSA+PiAzKSAmIDB4MWYpID09IDB4MTgpCisKKyAgICBkZWYgX2lzX3N1YnNlcXVlbnRfZnJhZ21lbnRhdGlvbl9oZWFkZXIoc2VsZiwgZmlyc3RfYnl0ZSk6CisgICAgICAgIHJldHVybiAoKChmaXJzdF9ieXRlID4+IDMpICYgMHgxZikgPT0gMHgxYykKKworICAgIGRlZiBfaXNfaXBoYyhzZWxmLCBmaXJzdF9ieXRlKToKKyAgICAgICAgcmV0dXJuICgoKGZpcnN0X2J5dGUgPj4gNSkgJiAweDA3KSA9PSAweDAzKQorCisgICAgZGVmIF9kZWNvbXByZXNzX2lwaGMoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvd3Bhbl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICBkZWYgX2hhbmRsZV9maXJzdF9mcmFnbWVudGF0aW9uX2hlYWRlcihzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBmcmFnbWVudGF0aW9uX2hlYWRlciA9IExvd3BhbkZyYWdtZW50YXRpb25IZWFkZXIuZnJvbV9ieXRlcyhkYXRhKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIgPSBzZWxmLl9sb3dwYW5fZnJhZ21lbnRzX2J1ZmZlcnNfbWFuYWdlci5nZXRfZnJhZ21lbnRzX2J1ZmZlcigKKyAgICAgICAgICAgIG1lc3NhZ2VfaW5mbywgZnJhZ21lbnRhdGlvbl9oZWFkZXIuZGF0YWdyYW1fdGFnLCBmcmFnbWVudGF0aW9uX2hlYWRlci5kYXRhZ3JhbV9zaXplKQorCisgICAgICAgIGlwdjZfaGVhZGVyLCBleHRlbnNpb25faGVhZGVycywgdWRwX2hlYWRlciA9IHNlbGYuX2RlY29tcHJlc3NfaXBoYyhkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgdW5jb21wcmVzc2VkX2RhdGEgPSBkYXRhLnJlYWQoKQorCisgICAgICAgICMgVXBkYXRlIHBheWxvYWQgbGVuZ3RocworICAgICAgICBpcHY2X2hlYWRlci5wYXlsb2FkX2xlbmd0aCA9IGZyYWdtZW50YXRpb25faGVhZGVyLmRhdGFncmFtX3NpemUgLSBsZW4oaXB2Nl9oZWFkZXIpCisKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci5zZWVrKDApCisgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUoaXB2Nl9oZWFkZXIudG9fYnl0ZXMoKSkKKworICAgICAgICBmb3IgZXh0ZW5zaW9uX2hlYWRlciBpbiBleHRlbnNpb25faGVhZGVyczoKKyAgICAgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUoZXh0ZW5zaW9uX2hlYWRlci50b19ieXRlcygpKQorCisgICAgICAgIGlmIHVkcF9oZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmcmFnbWVudHNfYnVmZmVyLndyaXRlKHVkcF9oZWFkZXIudG9fYnl0ZXMoKSkKKworICAgICAgICBmcmFnbWVudHNfYnVmZmVyLndyaXRlKHVuY29tcHJlc3NlZF9kYXRhKQorCisgICAgICAgIGlmIGZyYWdtZW50c19idWZmZXIud2hvbGVfcGFja2V0X3JlY2VpdmVkKCk6CisgICAgICAgICAgICBkYXRhID0gaW8uQnl0ZXNJTyhmcmFnbWVudHNfYnVmZmVyLnJlYWQoKSkKKworICAgICAgICAgICAgc2VsZi5fbG93cGFuX2ZyYWdtZW50c19idWZmZXJzX21hbmFnZXIuZnJlZV9mcmFnbWVudHNfYnVmZmVyKG1lc3NhZ2VfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudGF0aW9uX2hlYWRlci5kYXRhZ3JhbV90YWcpCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pcHY2X3BhY2tldF9mYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9oYW5kbGVfc3Vic2VxdWVudF9mcmFnbWVudGF0aW9uX2hlYWRlcihzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBmcmFnbWVudGF0aW9uX2hlYWRlciA9IExvd3BhbkZyYWdtZW50YXRpb25IZWFkZXIuZnJvbV9ieXRlcyhkYXRhKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIgPSBzZWxmLl9sb3dwYW5fZnJhZ21lbnRzX2J1ZmZlcnNfbWFuYWdlci5nZXRfZnJhZ21lbnRzX2J1ZmZlcigKKyAgICAgICAgICAgIG1lc3NhZ2VfaW5mbywgZnJhZ21lbnRhdGlvbl9oZWFkZXIuZGF0YWdyYW1fdGFnLCBmcmFnbWVudGF0aW9uX2hlYWRlci5kYXRhZ3JhbV9zaXplKQorCisgICAgICAgIG9mZnNldCA9IChmcmFnbWVudGF0aW9uX2hlYWRlci5kYXRhZ3JhbV9vZmZzZXQgKiA4KQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIuc2VlayhvZmZzZXQpCisgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUoZGF0YS5yZWFkKCkpCisKKyAgICAgICAgaWYgZnJhZ21lbnRzX2J1ZmZlci53aG9sZV9wYWNrZXRfcmVjZWl2ZWQoKToKKyAgICAgICAgICAgIGRhdGEgPSBpby5CeXRlc0lPKGZyYWdtZW50c19idWZmZXIucmVhZCgpKQorCisgICAgICAgICAgICBzZWxmLl9sb3dwYW5fZnJhZ21lbnRzX2J1ZmZlcnNfbWFuYWdlci5mcmVlX2ZyYWdtZW50c19idWZmZXIobWVzc2FnZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50YXRpb25faGVhZGVyLmRhdGFncmFtX3RhZykKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lwdjZfcGFja2V0X2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2hhbmRsZV9pcGhjX2hlYWRlcihzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBpcHY2X2hlYWRlciwgZXh0ZW5zaW9uX2hlYWRlcnMsIHVkcF9oZWFkZXIgPSBzZWxmLl9kZWNvbXByZXNzX2lwaGMoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIHVuY29tcHJlc3NlZF9kYXRhID0gZGF0YS5yZWFkKCkKKworICAgICAgICBkZWNvbXByZXNzZWRfZGF0YSA9IGJ5dGVhcnJheShbXSkKKworICAgICAgICBmb3IgZXh0ZW5zaW9uX2hlYWRlciBpbiBleHRlbnNpb25faGVhZGVyczoKKyAgICAgICAgICAgIGRlY29tcHJlc3NlZF9kYXRhICs9IGV4dGVuc2lvbl9oZWFkZXIudG9fYnl0ZXMoKQorCisgICAgICAgIGlmIHVkcF9oZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB1ZHBfaGVhZGVyLnBheWxvYWRfbGVuZ3RoID0gbGVuKHVuY29tcHJlc3NlZF9kYXRhKQorCisgICAgICAgICAgICBkZWNvbXByZXNzZWRfZGF0YSArPSB1ZHBfaGVhZGVyLnRvX2J5dGVzKCkKKworICAgICAgICBkZWNvbXByZXNzZWRfZGF0YSArPSB1bmNvbXByZXNzZWRfZGF0YQorCisgICAgICAgIGlwdjZfaGVhZGVyLnBheWxvYWRfbGVuZ3RoID0gbGVuKGRlY29tcHJlc3NlZF9kYXRhKQorCisgICAgICAgIGRlY29tcHJlc3NlZF9kYXRhID0gaXB2Nl9oZWFkZXIudG9fYnl0ZXMoKSArIGRlY29tcHJlc3NlZF9kYXRhCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lwdjZfcGFja2V0X2ZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkZWNvbXByZXNzZWRfZGF0YSksIG1lc3NhZ2VfaW5mbykKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorCisgICAgICAgIHdoaWxlIGRhdGEudGVsbCgpIDwgbGVuKGRhdGEuZ2V0dmFsdWUoKSk6CisgICAgICAgICAgICBmaXJzdF9ieXRlID0gb3JkKHNlbGYuX3BlZWtfbl9ieXRlcyhkYXRhLCBuPTEpKQorCisgICAgICAgICAgICBpZiBzZWxmLl9pc19tZXNoX2hlYWRlcihmaXJzdF9ieXRlKToKKyAgICAgICAgICAgICAgICBtZXNoX2hlYWRlciA9IHNlbGYuX2xvd3Bhbl9tZXNoX2hlYWRlcl9mYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBtZXNoX2hlYWRlci5vcmlnaW5hdG9yX2FkZHJlc3MKKyAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBtZXNoX2hlYWRlci5maW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzCisKKyAgICAgICAgICAgIGVsaWYgc2VsZi5faXNfZmlyc3RfZnJhZ21lbnRhdGlvbl9oZWFkZXIoZmlyc3RfYnl0ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZV9maXJzdF9mcmFnbWVudGF0aW9uX2hlYWRlcihkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgICAgIGVsaWYgc2VsZi5faXNfc3Vic2VxdWVudF9mcmFnbWVudGF0aW9uX2hlYWRlcihmaXJzdF9ieXRlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlX3N1YnNlcXVlbnRfZnJhZ21lbnRhdGlvbl9oZWFkZXIoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICAgICBlbGlmIHNlbGYuX2lzX2lwaGMoZmlyc3RfYnl0ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZV9pcGhjX2hlYWRlcihkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJVbnN1cHBvcnRlZCBoZWFkZXIgdHlwZTogMHh7OjAyeH0iLmZvcm1hdChmaXJzdF9ieXRlKSkKKyAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbWFjODAyMTU0LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9tYWM4MDIxNTQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2NmU2NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbWFjODAyMTU0LnB5CkBAIC0wLDAgKzEsMjYzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworIiIiCisgICAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc2ltcGxlIDgwMi4xNS40IE1BQyBwYXJzZXIuCisiIiIKKworaW1wb3J0IGlvCitpbXBvcnQgc3RydWN0CisKK2ltcG9ydCBjb25maWcKK2Zyb20gY29tbW9uIGltcG9ydCBNYWNBZGRyZXNzLCBNYWNBZGRyZXNzVHlwZSwgTWVzc2FnZUluZm8KK2Zyb20gbmV0X2NyeXB0byBpbXBvcnQgQXV4aWxpYXJ5U2VjdXJpdHlIZWFkZXIsIENyeXB0b0VuZ2luZSwgTWFjQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yCisKKworY2xhc3MgRGV2aWNlRGVzY3JpcHRvcnM6CisKKyAgICAiIiJDbGFzcyByZXByZXNlbnRpbmcgODAyLjE1LjQgRGV2aWNlIERlc2NyaXB0b3JzLiIiIgorCisgICAgZGV2aWNlX2Rlc2NyaXB0b3JzID0ge30KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBhZGQoY2xzLCBzaG9ydF9hZGRyZXNzLCBleHRlbmRlZF9hZGRyZXNzKToKKyAgICAgICAgc2hvcnRfYWRkcmVzcyA9IGNscy5fZ2V0X3Nob3J0X2FkZHJlc3NfdmFsdWUoc2hvcnRfYWRkcmVzcykKKyAgICAgICAgY2xzLmRldmljZV9kZXNjcmlwdG9yc1tzaG9ydF9hZGRyZXNzXSA9IGV4dGVuZGVkX2FkZHJlc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfZXh0ZW5kZWQoY2xzLCBzaG9ydF9hZGRyZXNzKToKKyAgICAgICAgc2hvcnRfYWRkcmVzcyA9IGNscy5fZ2V0X3Nob3J0X2FkZHJlc3NfdmFsdWUoc2hvcnRfYWRkcmVzcykKKyAgICAgICAgcmV0dXJuIGNscy5kZXZpY2VfZGVzY3JpcHRvcnNbc2hvcnRfYWRkcmVzc10KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dldF9zaG9ydF9hZGRyZXNzX3ZhbHVlKHNob3J0X2FkZHJlc3MpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNob3J0X2FkZHJlc3MsIE1hY0FkZHJlc3MpOgorICAgICAgICAgICAgc2hvcnRfYWRkcmVzcyA9IHNob3J0X2FkZHJlc3MucmxvYworICAgICAgICByZXR1cm4gc2hvcnRfYWRkcmVzcworCisKK2NsYXNzIE1hY0hlYWRlcjoKKworICAgICIiIkNsYXNzIHJlcHJlc2VudGluZyA4MDIuMTUuNCBNQUMgaGVhZGVyLiIiIgorCisgICAgY2xhc3MgRnJhbWVUeXBlOgorICAgICAgICBCRUFDT04gPSAwCisgICAgICAgIERBVEEgPSAxCisgICAgICAgIEFDSyA9IDIKKyAgICAgICAgQ09NTUFORCA9IDMKKworICAgIGNsYXNzIEFkZHJlc3NNb2RlOgorICAgICAgICBOT1RfUFJFU0VOVCA9IDAKKyAgICAgICAgU0hPUlQgPSAyCisgICAgICAgIEVYVEVOREVEID0gMworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lX3R5cGUsIGZyYW1lX3BlbmRpbmcsIGFja19yZXF1ZXN0LCBmcmFtZV92ZXJzaW9uLCBzZXEsCisgICAgICAgICAgICAgICAgIGRlc3RfcGFuX2lkPU5vbmUsIGRlc3RfYWRkcmVzcz1Ob25lLCBzcmNfcGFuX2lkPU5vbmUsIHNyY19hZGRyZXNzPU5vbmUsIGNvbW1hbmRfdHlwZT1Ob25lLAorICAgICAgICAgICAgICAgICBhdXhfc2VjX2hlYWRlcj1Ob25lLCBtaWM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZmNzPU5vbmUpOgorCisgICAgICAgIHNlbGYuZnJhbWVfdHlwZSA9IGZyYW1lX3R5cGUKKyAgICAgICAgc2VsZi5mcmFtZV9wZW5kaW5nID0gZnJhbWVfcGVuZGluZworICAgICAgICBzZWxmLmFja19yZXF1ZXN0ID0gYWNrX3JlcXVlc3QKKyAgICAgICAgc2VsZi5mcmFtZV92ZXJzaW9uID0gZnJhbWVfdmVyc2lvbgorICAgICAgICBzZWxmLnNlcSA9IHNlcQorCisgICAgICAgIHNlbGYuZGVzdF9wYW5faWQgPSBkZXN0X3Bhbl9pZAorICAgICAgICBzZWxmLmRlc3RfYWRkcmVzcyA9IGRlc3RfYWRkcmVzcworICAgICAgICBzZWxmLnNyY19wYW5faWQgPSBzcmNfcGFuX2lkCisgICAgICAgIHNlbGYuc3JjX2FkZHJlc3MgPSBzcmNfYWRkcmVzcworCisgICAgICAgIHNlbGYuYXV4X3NlY19oZWFkZXIgPSBhdXhfc2VjX2hlYWRlcgorICAgICAgICBzZWxmLm1pYyA9IG1pYworCisgICAgICAgIHNlbGYuZmNzID0gZmNzCisKKworY2xhc3MgTWFjUGF5bG9hZDoKKworICAgICIiIkNsYXNzIHJlcHJlc2VudGluZyA4MDIuMTUuNCBNQUMgcGF5bG9hZC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5kYXRhID0gYnl0ZWFycmF5KGRhdGEpCisKKworY2xhc3MgTWFjRnJhbWU6CisKKyAgICAiIiJDbGFzcyByZXByZXNlbnRpbmcgODAyLjE1LjQgTUFDIGZyYW1lLiIiIgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEpOgorICAgICAgICBtaHJfc3RhcnQgPSBkYXRhLnRlbGwoKQorCisgICAgICAgIGZjLCBzZXEgPSBzdHJ1Y3QudW5wYWNrKCI8SEIiLCBkYXRhLnJlYWQoMykpCisKKyAgICAgICAgZnJhbWVfdHlwZSA9IGZjICYgMHgwMDA3CisgICAgICAgIHNlY3VyaXR5X2VuYWJsZWQgPSBib29sKGZjICYgMHgwMDA4KQorICAgICAgICBmcmFtZV9wZW5kaW5nID0gYm9vbChmYyAmIDB4MDAxMCkKKyAgICAgICAgYWNrX3JlcXVlc3QgPSBib29sKGZjICYgMHgwMDIwKQorICAgICAgICBwYW5pZF9jb21wcmVzc2lvbiA9IGJvb2woZmMgJiAweDAwNDApCisgICAgICAgIGRlc3RfYWRkcl9tb2RlID0gKGZjICYgMHgwYzAwKSA+PiAxMAorICAgICAgICBmcmFtZV92ZXJzaW9uID0gKGZjICYgMHgzMDAwKSA+PiAxMgorICAgICAgICBzb3VyY2VfYWRkcl9tb2RlID0gKGZjICYgMHhjMDAwKSA+PiAxNAorCisgICAgICAgIGlmIGZyYW1lX3R5cGUgPT0gTWFjSGVhZGVyLkZyYW1lVHlwZS5BQ0s6CisgICAgICAgICAgICBmY3MgPSBzZWxmLl9wYXJzZV9mY3MoZGF0YSwgZGF0YS50ZWxsKCkpCisgICAgICAgICAgICBzZWxmLmhlYWRlciA9IE1hY0hlYWRlcihmcmFtZV90eXBlLCBmcmFtZV9wZW5kaW5nLCBhY2tfcmVxdWVzdCwgZnJhbWVfdmVyc2lvbiwgc2VxLCBmY3M9ZmNzKQorICAgICAgICAgICAgc2VsZi5wYXlsb2FkID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBQcmVzZW5jZSBvZiBQQU4gSWRzIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZCB5ZXQgYnV0IHNob3VsZCBiZSBlbm91Z2ggZm9yIFRocmVhZC4KKyAgICAgICAgZGVzdF9wYW5faWQgPSBzdHJ1Y3QudW5wYWNrKCI8SCIsIGRhdGEucmVhZCgyKSlbMF0KKworICAgICAgICBkZXN0X2FkZHJlc3MgPSBzZWxmLl9wYXJzZV9hZGRyZXNzKGRhdGEsIGRlc3RfYWRkcl9tb2RlKQorCisgICAgICAgIGlmIG5vdCBwYW5pZF9jb21wcmVzc2lvbjoKKyAgICAgICAgICAgIHNyY19wYW5faWQgPSBzdHJ1Y3QudW5wYWNrKCI8SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNyY19wYW5faWQgPSBkZXN0X3Bhbl9pZAorCisgICAgICAgIHNyY19hZGRyZXNzID0gc2VsZi5fcGFyc2VfYWRkcmVzcyhkYXRhLCBzb3VyY2VfYWRkcl9tb2RlKQorCisgICAgICAgIG1ocl9lbmQgPSBkYXRhLnRlbGwoKQorCisgICAgICAgIGlmIHNlY3VyaXR5X2VuYWJsZWQ6CisgICAgICAgICAgICBhdXhfc2VjX2hlYWRlciA9IHNlbGYuX3BhcnNlX2F1eF9zZWNfaGVhZGVyKGRhdGEpCisgICAgICAgICAgICBhdXhfc2VjX2hlYWRlcl9lbmQgPSBkYXRhLnRlbGwoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXV4X3NlY19oZWFkZXIgPSBOb25lCisKKyAgICAgICAgIyBDaGVjayBlbmQgb2YgTUFDIGZyYW1lCisgICAgICAgIGlmIGZyYW1lX3R5cGUgPT0gTWFjSGVhZGVyLkZyYW1lVHlwZS5DT01NQU5EOgorICAgICAgICAgICAgY29tbWFuZF90eXBlID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbW1hbmRfdHlwZSA9IE5vbmUKKworICAgICAgICBwYXlsb2FkX3BvcyA9IGRhdGEudGVsbCgpCisKKyAgICAgICAgZGF0YS5zZWVrKC0yLCBpby5TRUVLX0VORCkKKyAgICAgICAgZmNzX3N0YXJ0ID0gZGF0YS50ZWxsKCkKKworICAgICAgICBpZiBhdXhfc2VjX2hlYWRlciBhbmQgYXV4X3NlY19oZWFkZXIuc2VjdXJpdHlfbGV2ZWw6CisgICAgICAgICAgICBtaWMsIHBheWxvYWRfZW5kID0gc2VsZi5fcGFyc2VfbWljKGRhdGEsIGF1eF9zZWNfaGVhZGVyLnNlY3VyaXR5X2xldmVsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF5bG9hZF9lbmQgPSBkYXRhLnRlbGwoKQorICAgICAgICAgICAgbWljID0gTm9uZQorCisgICAgICAgIGZjcyA9IHNlbGYuX3BhcnNlX2ZjcyhkYXRhLCBmY3Nfc3RhcnQpCisKKyAgICAgICAgIyBDcmVhdGUgSGVhZGVyIG9iamVjdAorICAgICAgICBzZWxmLmhlYWRlciA9IE1hY0hlYWRlcihmcmFtZV90eXBlLCBmcmFtZV9wZW5kaW5nLCBhY2tfcmVxdWVzdCwgZnJhbWVfdmVyc2lvbiwgc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3Bhbl9pZCwgZGVzdF9hZGRyZXNzLCBzcmNfcGFuX2lkLCBzcmNfYWRkcmVzcywgY29tbWFuZF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXhfc2VjX2hlYWRlciwgbWljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY3MpCisKKyAgICAgICAgIyBDcmVhdGUgUGF5bG9hZCBvYmplY3QKKyAgICAgICAgcGF5bG9hZF9sZW4gPSBwYXlsb2FkX2VuZCAtIHBheWxvYWRfcG9zCisgICAgICAgIGRhdGEuc2VlayhwYXlsb2FkX3BvcykKKworICAgICAgICBwYXlsb2FkID0gZGF0YS5yZWFkKHBheWxvYWRfbGVuKQorCisgICAgICAgIGlmIHNlY3VyaXR5X2VuYWJsZWQ6CisgICAgICAgICAgICBtaHJfbGVuID0gbWhyX2VuZCAtIG1ocl9zdGFydAorICAgICAgICAgICAgZGF0YS5zZWVrKG1ocl9zdGFydCkKKyAgICAgICAgICAgIG1ocl9ieXRlcyA9IGRhdGEucmVhZChtaHJfbGVuKQorCisgICAgICAgICAgICBhdXhfc2VjX2hlYWRlcl9sZW4gPSBhdXhfc2VjX2hlYWRlcl9lbmQgLSBtaHJfZW5kCisgICAgICAgICAgICBhdXhfc2VjX2hkcl9ieXRlcyA9IGRhdGEucmVhZChhdXhfc2VjX2hlYWRlcl9sZW4pCisKKyAgICAgICAgICAgIG5vbl9wYXlsb2FkX2ZpZWxkcyA9IGJ5dGVhcnJheShbXSkKKworICAgICAgICAgICAgaWYgY29tbWFuZF90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG5vbl9wYXlsb2FkX2ZpZWxkcy5hcHBlbmQoY29tbWFuZF90eXBlKQorCisgICAgICAgICAgICBtZXNzYWdlX2luZm8gPSBNZXNzYWdlSW5mbygpCisgICAgICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIgPSBhdXhfc2VjX2hlYWRlcgorICAgICAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyX2J5dGVzID0gYXV4X3NlY19oZHJfYnl0ZXMKKyAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5ub25wYXlsb2FkX2ZpZWxkcyA9IG5vbl9wYXlsb2FkX2ZpZWxkcworICAgICAgICAgICAgbWVzc2FnZV9pbmZvLm1ocl9ieXRlcyA9IG1ocl9ieXRlcworICAgICAgICAgICAgaWYgc3JjX2FkZHJlc3MudHlwZSA9PSBNYWNBZGRyZXNzVHlwZS5TSE9SVDoKKyAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gRGV2aWNlRGVzY3JpcHRvcnMuZ2V0X2V4dGVuZGVkKHNyY19hZGRyZXNzKS5tYWNfYWRkcmVzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gc3JjX2FkZHJlc3MubWFjX2FkZHJlc3MKKworICAgICAgICAgICAgc2VjX29iaiA9IENyeXB0b0VuZ2luZShNYWNDcnlwdG9NYXRlcmlhbENyZWF0b3IoY29uZmlnLkRFRkFVTFRfTUFTVEVSX0tFWSkpCisgICAgICAgICAgICBzZWxmLnBheWxvYWQgPSBNYWNQYXlsb2FkKHNlY19vYmouZGVjcnlwdChwYXlsb2FkLCBtaWMsIG1lc3NhZ2VfaW5mbykpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucGF5bG9hZCA9IE1hY1BheWxvYWQocGF5bG9hZCkKKworICAgIGRlZiBfcGFyc2VfYWRkcmVzcyhzZWxmLCBkYXRhLCBtb2RlKToKKyAgICAgICAgaWYgbW9kZSA9PSBNYWNIZWFkZXIuQWRkcmVzc01vZGUuU0hPUlQ6CisgICAgICAgICAgICByZXR1cm4gTWFjQWRkcmVzcyhkYXRhLnJlYWQoMiksIE1hY0FkZHJlc3NUeXBlLlNIT1JULCBiaWdfZW5kaWFuPUZhbHNlKQorCisgICAgICAgIGlmIG1vZGUgPT0gTWFjSGVhZGVyLkFkZHJlc3NNb2RlLkVYVEVOREVEOgorICAgICAgICAgICAgcmV0dXJuIE1hY0FkZHJlc3MoZGF0YS5yZWFkKDgpLCBNYWNBZGRyZXNzVHlwZS5MT05HLCBiaWdfZW5kaWFuPUZhbHNlKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9wYXJzZV9hdXhfc2VjX2hlYWRlcihzZWxmLCBkYXRhKToKKyAgICAgICAgc2VjdXJpdHlfY29udHJvbCwgZnJhbWVfY291bnRlciA9IHN0cnVjdC51bnBhY2soIjxCTCIsIGRhdGEucmVhZCg1KSkKKworICAgICAgICBzZWN1cml0eV9sZXZlbCA9IHNlY3VyaXR5X2NvbnRyb2wgJiAweDA3CisgICAgICAgIGtleV9pZF9tb2RlID0gKHNlY3VyaXR5X2NvbnRyb2wgJiAweDE4KSA+PiAzCisKKyAgICAgICAgaWYga2V5X2lkX21vZGUgPT0gMToKKyAgICAgICAgICAgIGtleV9pZCA9IGRhdGEucmVhZCgxKQorICAgICAgICBlbGlmIGtleV9pZF9tb2RlID09IDI6CisgICAgICAgICAgICBrZXlfaWQgPSBkYXRhLnJlYWQoNSkKKyAgICAgICAgZWxpZiBrZXlfaWRfbW9kZSA9PSAzOgorICAgICAgICAgICAga2V5X2lkID0gZGF0YS5yZWFkKDkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrZXlfc291cmNlID0gTm9uZQorICAgICAgICAgICAga2V5X2luZGV4ID0gTm9uZQorCisgICAgICAgIHJldHVybiBBdXhpbGlhcnlTZWN1cml0eUhlYWRlcihrZXlfaWRfbW9kZSwgc2VjdXJpdHlfbGV2ZWwsIGZyYW1lX2NvdW50ZXIsIGtleV9pZCwgYmlnX2VuZGlhbj1GYWxzZSkKKworICAgIGRlZiBfcGFyc2VfbWljKHNlbGYsIGRhdGEsIHNlY3VyaXR5X2xldmVsKToKKyAgICAgICAgaWYgc2VjdXJpdHlfbGV2ZWwgaW4gKDEsIDUpOgorICAgICAgICAgICAgZGF0YS5zZWVrKC00LCBpby5TRUVLX0NVUikKKyAgICAgICAgICAgIHBheWxvYWRfZW5kID0gZGF0YS50ZWxsKCkKKyAgICAgICAgICAgIG1pYyA9IGRhdGEucmVhZCg0KQorICAgICAgICBlbGlmIHNlY3VyaXR5X2xldmVsIGluICgyLCA2KToKKyAgICAgICAgICAgIGRhdGEuc2VlaygtOCwgaW8uU0VFS19DVVIpCisgICAgICAgICAgICBwYXlsb2FkX2VuZCA9IGRhdGEudGVsbCgpCisgICAgICAgICAgICBtaWMgPSBkYXRhLnJlYWQoOCkKKyAgICAgICAgZWxpZiBzZWN1cml0eV9sZXZlbCBpbiAoMywgNyk6CisgICAgICAgICAgICBkYXRhLnNlZWsoLTE2LCBpby5TRUVLX0NVUikKKyAgICAgICAgICAgIHBheWxvYWRfZW5kID0gZGF0YS50ZWxsKCkKKyAgICAgICAgICAgIG1pYyA9IGRhdGEucmVhZCgxNikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBheWxvYWRfZW5kID0gZGF0YS50ZWxsKCkKKworICAgICAgICByZXR1cm4gbWljLCBwYXlsb2FkX2VuZAorCisgICAgZGVmIF9wYXJzZV9mY3Moc2VsZiwgZGF0YSwgZmNzX3N0YXJ0KToKKyAgICAgICAgZGF0YS5zZWVrKGZjc19zdGFydCkKKyAgICAgICAgZmNzID0gYnl0ZWFycmF5KGRhdGEucmVhZCgyKSkKKyAgICAgICAgcmV0dXJuIGZjcwpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9tZXNzYWdlLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9tZXNzYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YjgwY2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L21lc3NhZ2UucHkKQEAgLTAsMCArMSwzODUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgaW8KK2ltcG9ydCBpcGFkZHJlc3MKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKKworaW1wb3J0IGNvYXAKK2ltcG9ydCBjb21tb24KK2ltcG9ydCBpcHY2CitpbXBvcnQgbG93cGFuCitpbXBvcnQgbWFjODAyMTU0CitpbXBvcnQgbWxlCisKK2Zyb20gZW51bSBpbXBvcnQgSW50RW51bQorCitjbGFzcyBNZXNzYWdlVHlwZShJbnRFbnVtKToKKyAgICBNTEUgPSAwCisgICAgQ09BUCA9IDEKKyAgICBJQ01QID0gMgorICAgIEFDSyA9IDMgCisgICAgQkVBQ09OID0gNAorICAgIERBVEEgPSA1CisKKworY2xhc3MgTWVzc2FnZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl90eXBlID0gTm9uZQorICAgICAgICBzZWxmLl9jaGFubmVsID0gTm9uZQorICAgICAgICBzZWxmLl9tYWNfaGVhZGVyID0gTm9uZQorICAgICAgICBzZWxmLl9pcHY2X3BhY2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5fY29hcCA9IE5vbmUKKyAgICAgICAgc2VsZi5fbWxlID0gTm9uZQorICAgICAgICBzZWxmLl9pY21wID0gTm9uZQorCisgICAgZGVmIF9leHRyYWN0X3VkcF9kYXRhZ3JhbShzZWxmLCB1ZHBfZGF0YWdyYW0pOgorICAgICAgICBpZiBpc2luc3RhbmNlKHVkcF9kYXRhZ3JhbS5wYXlsb2FkLCBtbGUuTWxlTWVzc2FnZSk6CisgICAgICAgICAgICBzZWxmLl90eXBlID0gTWVzc2FnZVR5cGUuTUxFCisgICAgICAgICAgICBzZWxmLl9tbGUgPSB1ZHBfZGF0YWdyYW0ucGF5bG9hZAorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh1ZHBfZGF0YWdyYW0ucGF5bG9hZCwgKGNvYXAuQ29hcE1lc3NhZ2UsIGNvYXAuQ29hcE1lc3NhZ2VQcm94eSkpOgorICAgICAgICAgICAgc2VsZi5fdHlwZSA9IE1lc3NhZ2VUeXBlLkNPQVAKKyAgICAgICAgICAgIHNlbGYuX2NvYXAgPSB1ZHBfZGF0YWdyYW0ucGF5bG9hZAorCisgICAgZGVmIF9leHRyYWN0X3VwcGVyX2xheWVyX3Byb3RvY29sKHNlbGYsIHVwcGVyX2xheWVyX3Byb3RvY29sKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh1cHBlcl9sYXllcl9wcm90b2NvbCwgaXB2Ni5JQ01QdjYpOgorICAgICAgICAgICAgc2VsZi5fdHlwZSA9IE1lc3NhZ2VUeXBlLklDTVAKKyAgICAgICAgICAgIHNlbGYuX2ljbXAgPSB1cHBlcl9sYXllcl9wcm90b2NvbAorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh1cHBlcl9sYXllcl9wcm90b2NvbCwgaXB2Ni5VRFBEYXRhZ3JhbSk6CisgICAgICAgICAgICBzZWxmLl9leHRyYWN0X3VkcF9kYXRhZ3JhbSh1cHBlcl9sYXllcl9wcm90b2NvbCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHlwZQorCisgICAgQHR5cGUuc2V0dGVyCisgICAgZGVmIHR5cGUoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl90eXBlID0gdmFsdWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjaGFubmVsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2hhbm5lbAorCisgICAgQGNoYW5uZWwuc2V0dGVyCisgICAgZGVmIGNoYW5uZWwoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9jaGFubmVsID0gdmFsdWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtYWNfaGVhZGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWFjX2hlYWRlcgorCisgICAgQG1hY19oZWFkZXIuc2V0dGVyCisgICAgZGVmIG1hY19oZWFkZXIoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9tYWNfaGVhZGVyID0gdmFsdWUKKworICAgICAgICBpZiBzZWxmLl9tYWNfaGVhZGVyLmZyYW1lX3R5cGUgPT0gbWFjODAyMTU0Lk1hY0hlYWRlci5GcmFtZVR5cGUuQkVBQ09OOgorICAgICAgICAgICAgc2VsZi5fdHlwZSA9IE1lc3NhZ2VUeXBlLkJFQUNPTgorCisgICAgICAgIGVsaWYgc2VsZi5fbWFjX2hlYWRlci5mcmFtZV90eXBlID09IG1hYzgwMjE1NC5NYWNIZWFkZXIuRnJhbWVUeXBlLkFDSzoKKyAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBNZXNzYWdlVHlwZS5BQ0sKKworICAgICAgICBlbGlmIHNlbGYuX21hY19oZWFkZXIuZnJhbWVfdHlwZSA9PSBtYWM4MDIxNTQuTWFjSGVhZGVyLkZyYW1lVHlwZS5EQVRBOgorICAgICAgICAgICAgc2VsZi5fdHlwZSA9IE1lc3NhZ2VUeXBlLkRBVEEKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpcHY2X3BhY2tldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lwdjZfcGFja2V0CisKKyAgICBAaXB2Nl9wYWNrZXQuc2V0dGVyCisgICAgZGVmIGlwdjZfcGFja2V0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5faXB2Nl9wYWNrZXQgPSB2YWx1ZQorICAgICAgICBzZWxmLl9leHRyYWN0X3VwcGVyX2xheWVyX3Byb3RvY29sKHZhbHVlLnVwcGVyX2xheWVyX3Byb3RvY29sKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNvYXAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2FwCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWxlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaWNtcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ljbXAKKworICAgIEBpY21wLnNldHRlcgorICAgIGRlZiBpY21wKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5faWNtcCA9IHZhbHVlCisKKyAgICBkZWYgZ2V0X21sZV9tZXNzYWdlX3RsdihzZWxmLCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgIGlmIHNlbGYudHlwZSAhPSBNZXNzYWdlVHlwZS5NTEU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1lc3NhZ2UgdHlwZS4gRXhwZWN0ZWQgTUxFIG1lc3NhZ2UuIikKKworICAgICAgICBmb3IgdGx2IGluIHNlbGYubWxlLmNvbW1hbmQudGx2czoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGx2LCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRsdgorCisgICAgZGVmIGFzc2VydE1sZU1lc3NhZ2VJc1R5cGUoc2VsZiwgY29tbWFuZF90eXBlKToKKyAgICAgICAgaWYgc2VsZi50eXBlICE9IE1lc3NhZ2VUeXBlLk1MRToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbWVzc2FnZSB0eXBlLiBFeHBlY3RlZCBNTEUgbWVzc2FnZS4iKQorCisgICAgICAgIGFzc2VydChzZWxmLm1sZS5jb21tYW5kLnR5cGUgPT0gY29tbWFuZF90eXBlKQorCisgICAgZGVmIGFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihzZWxmLCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgIGlmIHNlbGYudHlwZSAhPSBNZXNzYWdlVHlwZS5NTEU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1lc3NhZ2UgdHlwZS4gRXhwZWN0ZWQgTUxFIG1lc3NhZ2UuIikKKworICAgICAgICBjb250YWluc190bHYgPSBGYWxzZQorICAgICAgICBmb3IgdGx2IGluIHNlbGYubWxlLmNvbW1hbmQudGx2czoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGx2LCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgICAgICAgICAgY29udGFpbnNfdGx2ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgYXNzZXJ0KGNvbnRhaW5zX3RsdiA9PSBUcnVlKQorCisgICAgZGVmIGFzc2VydE1sZU1lc3NhZ2VEb2VzTm90Q29udGFpblRsdihzZWxmLCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgIGlmIHNlbGYudHlwZSAhPSBNZXNzYWdlVHlwZS5NTEU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1lc3NhZ2UgdHlwZS4gRXhwZWN0ZWQgTUxFIG1lc3NhZ2UuIikKKworICAgICAgICBjb250YWluc190bHYgPSBGYWxzZQorICAgICAgICBmb3IgdGx2IGluIHNlbGYubWxlLmNvbW1hbmQudGx2czoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGx2LCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgICAgICAgICAgY29udGFpbnNfdGx2ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgYXNzZXJ0KGNvbnRhaW5zX3RsdiA9PSBGYWxzZSkKKworICAgIGRlZiBhc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihzZWxmLCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgIGlmIHNlbGYudHlwZSAhPSBNZXNzYWdlVHlwZS5NTEU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1lc3NhZ2UgdHlwZS4gRXhwZWN0ZWQgTUxFIG1lc3NhZ2UuIikKKworICAgICAgICBjb250YWluc190bHYgPSBGYWxzZQorICAgICAgICBmb3IgdGx2IGluIHNlbGYubWxlLmNvbW1hbmQudGx2czoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGx2LCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgICAgICAgICAgY29udGFpbnNfdGx2ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcHJpbnQoIk1sZU1lc3NhZ2UgZG9lc24ndCBjb250YWluIG9wdGlvbmFsIFRMVjoge30iLmZvcm1hdCh0bHZfY2xhc3NfdHlwZSkpCisKKyAgICBkZWYgZ2V0X2NvYXBfbWVzc2FnZV90bHYoc2VsZiwgdGx2X2NsYXNzX3R5cGUpOgorICAgICAgICBpZiBzZWxmLnR5cGUgIT0gTWVzc2FnZVR5cGUuQ09BUDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbWVzc2FnZSB0eXBlLiBFeHBlY3RlZCBDb0FQIG1lc3NhZ2UuIikKKworICAgICAgICBmb3IgdGx2IGluIHNlbGYuY29hcC5wYXlsb2FkOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0bHYsIHRsdl9jbGFzc190eXBlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGx2CisKKyAgICBkZWYgYXNzZXJ0Q29hcE1lc3NhZ2VDb250YWluc1RsdihzZWxmLCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgIGlmIHNlbGYudHlwZSAhPSBNZXNzYWdlVHlwZS5DT0FQOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtZXNzYWdlIHR5cGUuIEV4cGVjdGVkIENvQVAgbWVzc2FnZS4iKQorCisgICAgICAgIGNvbnRhaW5zX3RsdiA9IEZhbHNlCisgICAgICAgIGZvciB0bHYgaW4gc2VsZi5jb2FwLnBheWxvYWQ6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRsdiwgdGx2X2NsYXNzX3R5cGUpOgorICAgICAgICAgICAgICAgIGNvbnRhaW5zX3RsdiA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGFzc2VydChjb250YWluc190bHYgPT0gVHJ1ZSkKKworICAgIGRlZiBhc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYoc2VsZiwgdGx2X2NsYXNzX3R5cGUpOgorICAgICAgICBpZiBzZWxmLnR5cGUgIT0gTWVzc2FnZVR5cGUuQ09BUDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbWVzc2FnZSB0eXBlLiBFeHBlY3RlZCBDb0FQIG1lc3NhZ2UuIikKKworICAgICAgICBjb250YWluc190bHYgPSBGYWxzZQorICAgICAgICBmb3IgdGx2IGluIHNlbGYuY29hcC5wYXlsb2FkOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0bHYsIHRsdl9jbGFzc190eXBlKToKKyAgICAgICAgICAgICAgICBjb250YWluc190bHYgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBwcmludCgiQ29hcE1lc3NhZ2UgZG9lc24ndCBjb250YWluIG9wdGlvbmFsIFRMVjoge30iLmZvcm1hdCh0bHZfY2xhc3NfdHlwZSkpCisKKyAgICBkZWYgYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aChzZWxmLCB1cmlfcGF0aCk6CisgICAgICAgIGlmIHNlbGYudHlwZSAhPSBNZXNzYWdlVHlwZS5DT0FQOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtZXNzYWdlIHR5cGUuIEV4cGVjdGVkIENvQVAgbWVzc2FnZS4iKQorCisgICAgICAgIGFzc2VydCh1cmlfcGF0aCA9PSBzZWxmLmNvYXAudXJpX3BhdGgpCisKKyAgICBkZWYgYXNzZXJ0Q29hcE1lc3NhZ2VDb2RlKHNlbGYsIGNvZGUpOgorICAgICAgICBpZiBzZWxmLnR5cGUgIT0gTWVzc2FnZVR5cGUuQ09BUDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbWVzc2FnZSB0eXBlLiBFeHBlY3RlZCBDb0FQIG1lc3NhZ2UuIikKKworICAgICAgICBhc3NlcnQoY29kZSA9PSBzZWxmLmNvYXAuY29kZSkKKworICAgIGRlZiBhc3NlcnRTZW50VG9Ob2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBzZW50X3RvX25vZGUgPSBGYWxzZQorICAgICAgICBkc3RfYWRkciA9IHNlbGYuaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIuZGVzdGluYXRpb25fYWRkcmVzcworCisgICAgICAgIGZvciBhZGRyIGluIG5vZGUuZ2V0X2FkZHJzKCk6CisgICAgICAgICAgICBpZiBkc3RfYWRkciA9PSBpcGFkZHJlc3MuaXBfYWRkcmVzcyhhZGRyKToKKyAgICAgICAgICAgICAgICBzZW50X3RvX25vZGUgPSBUcnVlCisKKyAgICAgICAgYXNzZXJ0IHNlbnRfdG9fbm9kZSA9PSBUcnVlCisKKyAgICBkZWYgYXNzZXJ0U2VudFRvRGVzdGluYXRpb25BZGRyZXNzKHNlbGYsIGlwdjZfYWRkcmVzcyk6CisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMjoKKyAgICAgICAgICAgIGlwdjZfYWRkcmVzcyA9IGlwdjZfYWRkcmVzcy5kZWNvZGUoInV0Zi04IikKKworICAgICAgICBhc3NlcnQgc2VsZi5pcHY2X3BhY2tldC5pcHY2X2hlYWRlci5kZXN0aW5hdGlvbl9hZGRyZXNzID09IGlwYWRkcmVzcy5pcF9hZGRyZXNzKGlwdjZfYWRkcmVzcykKKworICAgIGRlZiBhc3NlcnRTZW50V2l0aEhvcExpbWl0KHNlbGYsIGhvcF9saW1pdCk6CisgICAgICAgIGFzc2VydCBzZWxmLmlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLmhvcF9saW1pdCA9PSBob3BfbGltaXQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJNZXNzYWdlKHR5cGU9e30pIi5mb3JtYXQoTWVzc2FnZVR5cGUoc2VsZi50eXBlKS5uYW1lKQorCisKK2NsYXNzIE1lc3NhZ2VzU2V0KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZXMpOgorICAgICAgICBzZWxmLl9tZXNzYWdlcyA9IG1lc3NhZ2VzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWVzc2FnZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tZXNzYWdlcworCisgICAgZGVmIG5leHRfY29hcF9tZXNzYWdlKHNlbGYsIGNvZGUsIHVyaV9wYXRoPU5vbmUsIGFzc2VydF9lbmFibGVkPVRydWUpOgorICAgICAgICBtZXNzYWdlID0gTm9uZQorCisgICAgICAgIHdoaWxlIHNlbGYubWVzc2FnZXM6CisgICAgICAgICAgICBtID0gc2VsZi5tZXNzYWdlcy5wb3AoMCkKKworICAgICAgICAgICAgaWYgbS50eXBlICE9IE1lc3NhZ2VUeXBlLkNPQVA6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgdXJpX3BhdGggaXMgbm90IE5vbmUgYW5kIG0uY29hcC51cmlfcGF0aCAhPSB1cmlfcGF0aDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBtLmNvYXAuY29kZS5pc19lcXVhbF9kb3R0ZWQoY29kZSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtCisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGFzc2VydF9lbmFibGVkOgorICAgICAgICAgICAgYXNzZXJ0IG1lc3NhZ2UgaXMgbm90IE5vbmUsICJDb3VsZCBub3QgZmluZCBDb2FwTWVzc2FnZSB3aXRoIGNvZGU6IHt9Ii5mb3JtYXQoY29kZSkKKworICAgICAgICByZXR1cm4gbWVzc2FnZQorCisgICAgZGVmIG5leHRfbWxlX21lc3NhZ2Uoc2VsZiwgY29tbWFuZF90eXBlLCBhc3NlcnRfZW5hYmxlZD1UcnVlKToKKyAgICAgICAgbWVzc2FnZSA9IHNlbGYubmV4dF9tbGVfbWVzc2FnZV9vZl9vbmVfb2ZfY29tbWFuZF90eXBlcyhjb21tYW5kX3R5cGUsKQorCisgICAgICAgIGlmIGFzc2VydF9lbmFibGVkOgorICAgICAgICAgICAgYXNzZXJ0IG1lc3NhZ2UgaXMgbm90IE5vbmUsICJDb3VsZCBub3QgZmluZCBNbGVNZXNzYWdlIG9mIHRoZSB0eXBlOiB7fSIuZm9ybWF0KGNvbW1hbmRfdHlwZSkKKworICAgICAgICByZXR1cm4gbWVzc2FnZQorCisgICAgZGVmIG5leHRfbWxlX21lc3NhZ2Vfb2Zfb25lX29mX2NvbW1hbmRfdHlwZXMoc2VsZiwgKmNvbW1hbmRfdHlwZXMpOgorICAgICAgICBtZXNzYWdlID0gTm9uZQorCisgICAgICAgIHdoaWxlIHNlbGYubWVzc2FnZXM6CisgICAgICAgICAgICBtID0gc2VsZi5tZXNzYWdlcy5wb3AoMCkKKworICAgICAgICAgICAgaWYgbS50eXBlICE9IE1lc3NhZ2VUeXBlLk1MRToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBjb21tYW5kX2ZvdW5kID0gRmFsc2UKKworICAgICAgICAgICAgZm9yIGNvbW1hbmRfdHlwZSBpbiBjb21tYW5kX3R5cGVzOgorICAgICAgICAgICAgICAgIGlmIG0ubWxlLmNvbW1hbmQudHlwZSA9PSBjb21tYW5kX3R5cGU6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIGNvbW1hbmRfZm91bmQ6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG0KKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiBtZXNzYWdlCisKKyAgICBkZWYgY29udGFpbnNfbWxlX21lc3NhZ2Uoc2VsZiwgY29tbWFuZF90eXBlKToKKyAgICAgICAgZm9yIG0gaW4gc2VsZi5tZXNzYWdlczoKKyAgICAgICAgICAgIGlmIG0udHlwZSAhPSBNZXNzYWdlVHlwZS5NTEU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbS5tbGUuY29tbWFuZC50eXBlID09IGNvbW1hbmRfdHlwZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGRvZXNfbm90X2NvbnRhaW5fY29hcF9tZXNzYWdlKHNlbGYpOgorICAgICAgICBmb3IgbSBpbiBzZWxmLm1lc3NhZ2VzOgorICAgICAgICAgICAgaWYgbS50eXBlICE9IE1lc3NhZ2VUeXBlLkNPQVA6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBNZXNzYWdlRmFjdG9yeToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb3dwYW5fcGFyc2VyKToKKyAgICAgICAgc2VsZi5fbG93cGFuX3BhcnNlciA9IGxvd3Bhbl9wYXJzZXIKKworICAgIGRlZiBfYWRkX2RldmljZV9kZXNjcmlwdG9ycyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgZm9yIHRsdiBpbiBtZXNzYWdlLm1sZS5jb21tYW5kLnRsdnM6CisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGx2LCBtbGUuU291cmNlQWRkcmVzcyk6CisgICAgICAgICAgICAgICAgbWFjODAyMTU0LkRldmljZURlc2NyaXB0b3JzLmFkZCh0bHYuYWRkcmVzcywgbWVzc2FnZS5tYWNfaGVhZGVyLnNyY19hZGRyZXNzKQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRsdiwgbWxlLkFkZHJlc3MxNik6CisgICAgICAgICAgICAgICAgbWFjODAyMTU0LkRldmljZURlc2NyaXB0b3JzLmFkZCh0bHYuYWRkcmVzcywgbWVzc2FnZS5tYWNfaGVhZGVyLmRlc3RfYWRkcmVzcykKKworICAgIGRlZiBfcGFyc2VfbWFjX2ZyYW1lKHNlbGYsIGRhdGEpOgorICAgICAgICBtYWNfZnJhbWUgPSBtYWM4MDIxNTQuTWFjRnJhbWUoKQorICAgICAgICBtYWNfZnJhbWUucGFyc2UoZGF0YSkKKyAgICAgICAgcmV0dXJuIG1hY19mcmFtZQorCisgICAgZGVmIGNyZWF0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2UoKQorICAgICAgICBtZXNzYWdlLmNoYW5uZWwgPSBzdHJ1Y3QudW5wYWNrKCI+QiIsIGRhdGEucmVhZCgxKSkKKworICAgICAgICAjIFBhcnNlIE1BQyBoZWFkZXIKKyAgICAgICAgbWFjX2ZyYW1lID0gc2VsZi5fcGFyc2VfbWFjX2ZyYW1lKGRhdGEpCisgICAgICAgIG1lc3NhZ2UubWFjX2hlYWRlciA9IG1hY19mcmFtZS5oZWFkZXIKKworICAgICAgICBpZiBtZXNzYWdlLm1hY19oZWFkZXIuZnJhbWVfdHlwZSAhPSBtYWM4MDIxNTQuTWFjSGVhZGVyLkZyYW1lVHlwZS5EQVRBOgorICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gbWVzc2FnZS5tYWNfaGVhZGVyLnNyY19hZGRyZXNzCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IG1lc3NhZ2UubWFjX2hlYWRlci5kZXN0X2FkZHJlc3MKKworICAgICAgICAjIENyZWF0ZSBzdHJlYW0gd2l0aCA2TG9XUEFOIGRhdGFncmFtCisgICAgICAgIGxvd3Bhbl9wYXlsb2FkID0gaW8uQnl0ZXNJTyhtYWNfZnJhbWUucGF5bG9hZC5kYXRhKQorCisgICAgICAgIGlwdjZfcGFja2V0ID0gc2VsZi5fbG93cGFuX3BhcnNlci5wYXJzZShsb3dwYW5fcGF5bG9hZCwgbWVzc2FnZV9pbmZvKQorICAgICAgICBpZiBpcHY2X3BhY2tldCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UKKworICAgICAgICBtZXNzYWdlLmlwdjZfcGFja2V0ID0gaXB2Nl9wYWNrZXQKKworICAgICAgICBpZiBtZXNzYWdlLnR5cGUgPT0gTWVzc2FnZVR5cGUuTUxFOgorICAgICAgICAgICAgc2VsZi5fYWRkX2RldmljZV9kZXNjcmlwdG9ycyhtZXNzYWdlKQorCisgICAgICAgIHJldHVybiBtZXNzYWdlCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L21sZS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MTM1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L21sZS5weQpAQCAtMCwwICsxLDExNTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgaW8KK2ltcG9ydCBpcGFkZHJlc3MKK2ltcG9ydCBzdHJ1Y3QKKworZnJvbSBiaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQorCitpbXBvcnQgY29tbW9uCitpbXBvcnQgbmV0d29ya19kYXRhCisKK2Zyb20gZW51bSBpbXBvcnQgSW50RW51bQorCisKK2NsYXNzIENvbW1hbmRUeXBlKEludEVudW0pOgorICAgIExJTktfUkVRVUVTVCA9IDAKKyAgICBMSU5LX0FDQ0VQVCA9IDEKKyAgICBMSU5LX0FDQ0VQVF9BTkRfUkVRVUVTVCA9IDIKKyAgICBMSU5LX1JFSkVDVCA9IDMKKyAgICBBRFZFUlRJU0VNRU5UID0gNAorICAgIFVQREFURSA9IDUKKyAgICBVUERBVEVfUkVRVUVTVCA9IDYKKyAgICBEQVRBX1JFUVVFU1QgPSA3CisgICAgREFUQV9SRVNQT05TRSA9IDgKKyAgICBQQVJFTlRfUkVRVUVTVCA9IDkKKyAgICBQQVJFTlRfUkVTUE9OU0UgPSAxMAorICAgIENISUxEX0lEX1JFUVVFU1QgPSAxMQorICAgIENISUxEX0lEX1JFU1BPTlNFID0gMTIKKyAgICBDSElMRF9VUERBVEVfUkVRVUVTVCA9IDEzCisgICAgQ0hJTERfVVBEQVRFX1JFU1BPTlNFID0gMTQKKyAgICBBTk5PVU5DRSA9IDE1CisgICAgRElTQ09WRVJZX1JFUVVFU1QgPSAxNgorICAgIERJU0NPVkVSWV9SRVNQT05TRSA9IDE3CisKKworY2xhc3MgVGx2VHlwZShJbnRFbnVtKToKKyAgICBTT1VSQ0VfQUREUkVTUyA9IDAKKyAgICBNT0RFID0gMQorICAgIFRJTUVPVVQgPSAyCisgICAgQ0hBTExFTkdFID0gMworICAgIFJFU1BPTlNFID0gNAorICAgIExJTktfTEFZRVJfRlJBTUVfQ09VTlRFUiA9IDUKKyAgICBNTEVfRlJBTUVfQ09VTlRFUiA9IDgKKyAgICBST1VURTY0ID0gOQorICAgIEFERFJFU1MxNiA9IDEwCisgICAgTEVBREVSX0RBVEEgPSAxMQorICAgIE5FVFdPUktfREFUQSA9IDEyCisgICAgVExWX1JFUVVFU1QgPSAxMworICAgIFNDQU5fTUFTSyA9IDE0CisgICAgQ09OTkVDVElWSVRZID0gMTUKKyAgICBMSU5LX01BUkdJTiA9IDE2CisgICAgU1RBVFVTID0gMTcKKyAgICBWRVJTSU9OID0gMTgKKyAgICBBRERSRVNTX1JFR0lTVFJBVElPTiA9IDE5CisgICAgQ0hBTk5FTCA9IDIwCisgICAgUEFOSUQgPSAyMQorICAgIEFDVElWRV9USU1FU1RBTVAgPSAyMgorICAgIFBFTkRJTkdfVElNRVNUQU1QID0gMjMKKyAgICBBQ1RJVkVfT1BFUkFUSU9OQUxfREFUQVNFVCA9IDI0CisgICAgUEVORElOR19PUEVSQVRJT05BTF9EQVRBU0VUID0gMjUKKyAgICBUSFJFQURfRElTQ09WRVJZID0gMjYKKworCitjbGFzcyBTb3VyY2VBZGRyZXNzKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBhZGRyZXNzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FkZHJlc3MKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLmFkZHJlc3MgPT0gb3RoZXIuYWRkcmVzcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlNvdXJjZUFkZHJlc3MoYWRkcmVzcz17fSkiLmZvcm1hdChoZXgoc2VsZi5fYWRkcmVzcykpCisKKworY2xhc3MgU291cmNlQWRkcmVzc0ZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgYWRkcmVzcyA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICByZXR1cm4gU291cmNlQWRkcmVzcyhhZGRyZXNzKQorCisKK2NsYXNzIE1vZGUob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWNlaXZlciwgc2VjdXJlLCBkZXZpY2VfdHlwZSwgbmV0d29ya19kYXRhKToKKyAgICAgICAgc2VsZi5fcmVjZWl2ZXIgPSByZWNlaXZlcgorICAgICAgICBzZWxmLl9zZWN1cmUgPSBzZWN1cmUKKyAgICAgICAgc2VsZi5fZGV2aWNlX3R5cGUgPSBkZXZpY2VfdHlwZQorICAgICAgICBzZWxmLl9uZXR3b3JrX2RhdGEgPSBuZXR3b3JrX2RhdGEKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZWNlaXZlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlY2VpdmVyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2VjdXJlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2VjdXJlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGV2aWNlX3R5cGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VfdHlwZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5ldHdvcmtfZGF0YShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25ldHdvcmtfZGF0YQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmVjZWl2ZXIgPT0gb3RoZXIucmVjZWl2ZXIgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuc2VjdXJlID09IG90aGVyLnNlY3VyZSBhbmQgXAorICAgICAgICAgICAgc2VsZi5kZXZpY2VfdHlwZSA9PSBvdGhlci5kZXZpY2VfdHlwZSBhbmQgXAorICAgICAgICAgICAgc2VsZi5uZXR3b3JrX2RhdGEgPT0gb3RoZXIubmV0d29ya19kYXRhCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTW9kZShyZWNlaXZlcj17fSwgc2VjdXJlPXt9LCBkZXZpY2VfdHlwZT17fSwgbmV0d29ya19kYXRhPXt9KSIuZm9ybWF0KHNlbGYucmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VjdXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5ldHdvcmtfZGF0YSkKKworCitjbGFzcyBNb2RlRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBtb2RlID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgcmVjZWl2ZXIgPSAobW9kZSA+PiAzKSAmIDB4MDEKKyAgICAgICAgc2VjdXJlID0gKG1vZGUgPj4gMikgJiAweDAxCisgICAgICAgIGRldmljZV90eXBlID0gKG1vZGUgPj4gMSkgJiAweDAxCisgICAgICAgIG5ldHdvcmtfZGF0YSA9IChtb2RlID4+IDApICYgMHgwMQorICAgICAgICByZXR1cm4gTW9kZShyZWNlaXZlciwgc2VjdXJlLCBkZXZpY2VfdHlwZSwgbmV0d29ya19kYXRhKQorCisKK2NsYXNzIFRpbWVvdXQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgc2VsZi5fdGltZW91dCA9IHRpbWVvdXQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0aW1lb3V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGltZW91dAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYudGltZW91dCA9PSBvdGhlci50aW1lb3V0CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiVGltZW91dCh0aW1lb3V0PXt9KSIuZm9ybWF0KHNlbGYudGltZW91dCkKKworCitjbGFzcyBUaW1lb3V0RmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICB0aW1lb3V0ID0gc3RydWN0LnVucGFjaygiPkkiLCBkYXRhLnJlYWQoNCkpWzBdCisgICAgICAgIHJldHVybiBUaW1lb3V0KHRpbWVvdXQpCisKKworY2xhc3MgQ2hhbGxlbmdlKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hhbGxlbmdlKToKKyAgICAgICAgc2VsZi5fY2hhbGxlbmdlID0gY2hhbGxlbmdlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY2hhbGxlbmdlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2hhbGxlbmdlCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5jaGFsbGVuZ2UgPT0gb3RoZXIuY2hhbGxlbmdlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQ2hhbGxlbmdlKGNoYWxsZW5nZT17fSkiLmZvcm1hdChoZXhsaWZ5KHNlbGYuY2hhbGxlbmdlKSkKKworCitjbGFzcyBDaGFsbGVuZ2VGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGNoYWxsZW5nZSA9IGRhdGEucmVhZCgpCisgICAgICAgIHJldHVybiBDaGFsbGVuZ2UoY2hhbGxlbmdlKQorCisKK2NsYXNzIFJlc3BvbnNlKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVzcG9uc2UpOgorICAgICAgICBzZWxmLl9yZXNwb25zZSA9IHJlc3BvbnNlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVzcG9uc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZXNwb25zZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmVzcG9uc2UgPT0gb3RoZXIucmVzcG9uc2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJSZXNwb25zZShyZXNwb25zZT17fSkiLmZvcm1hdChoZXhsaWZ5KHNlbGYucmVzcG9uc2UpKQorCisKK2NsYXNzIFJlc3BvbnNlRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICByZXNwb25zZSA9IGRhdGEucmVhZCgpCisgICAgICAgIHJldHVybiBSZXNwb25zZShyZXNwb25zZSkKKworCitjbGFzcyBMaW5rTGF5ZXJGcmFtZUNvdW50ZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZV9jb3VudGVyKToKKyAgICAgICAgc2VsZi5fZnJhbWVfY291bnRlciA9IGZyYW1lX2NvdW50ZXIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmcmFtZV9jb3VudGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZnJhbWVfY291bnRlcgorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZnJhbWVfY291bnRlciA9PSBvdGhlci5mcmFtZV9jb3VudGVyCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTGlua0xheWVyRnJhbWVDb3VudGVyKGZyYW1lX2NvdW50ZXI9e30pIi5mb3JtYXQoc2VsZi5mcmFtZV9jb3VudGVyKQorCisKK2NsYXNzIExpbmtMYXllckZyYW1lQ291bnRlckZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgZnJhbWVfY291bnRlciA9IHN0cnVjdC51bnBhY2soIj5JIiwgZGF0YS5yZWFkKDQpKVswXQorICAgICAgICByZXR1cm4gTGlua0xheWVyRnJhbWVDb3VudGVyKGZyYW1lX2NvdW50ZXIpCisKKworY2xhc3MgTWxlRnJhbWVDb3VudGVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWVfY291bnRlcik6CisgICAgICAgIHNlbGYuX2ZyYW1lX2NvdW50ZXIgPSBmcmFtZV9jb3VudGVyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZnJhbWVfY291bnRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZyYW1lX2NvdW50ZXIKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLmZyYW1lX2NvdW50ZXIgPT0gb3RoZXIuZnJhbWVfY291bnRlcgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIk1sZUZyYW1lQ291bnRlcihmcmFtZV9jb3VudGVyPXt9KSIuZm9ybWF0KHNlbGYuZnJhbWVfY291bnRlcikKKworCitjbGFzcyBNbGVGcmFtZUNvdW50ZXJGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGZyYW1lX2NvdW50ZXIgPSBzdHJ1Y3QudW5wYWNrKCI+SSIsIGRhdGEucmVhZCg0KSlbMF0KKyAgICAgICAgcmV0dXJuIE1sZUZyYW1lQ291bnRlcihmcmFtZV9jb3VudGVyKQorCisKK2NsYXNzIExpbmtRdWFsaXR5QW5kUm91dGVEYXRhKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0LCBfaW5wdXQsIHJvdXRlKToKKyAgICAgICAgc2VsZi5fb3V0cHV0ID0gb3V0cHV0CisgICAgICAgIHNlbGYuX2lucHV0ID0gX2lucHV0CisgICAgICAgIHNlbGYuX3JvdXRlID0gcm91dGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBvdXRwdXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpbnB1dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lucHV0CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcm91dGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yb3V0ZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYub3V0cHV0ID09IG90aGVyLm91dHB1dCBhbmQgc2VsZi5pbnB1dCA9PSBvdGhlci5pbnB1dCBhbmQgc2VsZi5yb3V0ZSA9PSBvdGhlci5yb3V0ZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkxpbmtRdWFsaXR5QW5kUm91dGVEYXRhKG91cHV0PXt9LCBpbnB1dD17fSwgcm91dGU9e30pIi5mb3JtYXQoc2VsZi5vdXRwdXQsIHNlbGYuaW5wdXQsIHNlbGYucm91dGUpCisKKworY2xhc3MgTGlua1F1YWxpdHlBbmRSb3V0ZURhdGFGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGxxcmQgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBvdXRwdXQgPSAobHFyZCA+PiA2KSAmIDB4MworICAgICAgICBfaW5wdXQgPSAobHFyZCA+PiA0KSAmIDB4MworICAgICAgICByb3V0ZSA9IGxxcmQgJiAweDBmCisgICAgICAgIHJldHVybiBMaW5rUXVhbGl0eUFuZFJvdXRlRGF0YShvdXRwdXQsIF9pbnB1dCwgcm91dGUpCisKKworY2xhc3MgUm91dGU2NChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlkX3NlcXVlbmNlLCByb3V0ZXJfaWRfbWFzaywgbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhKToKKyAgICAgICAgc2VsZi5faWRfc2VxdWVuY2UgPSBpZF9zZXF1ZW5jZQorICAgICAgICBzZWxmLl9yb3V0ZXJfaWRfbWFzayA9IHJvdXRlcl9pZF9tYXNrCisgICAgICAgIHNlbGYuX2xpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSA9IGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlkX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faWRfc2VxdWVuY2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByb3V0ZXJfaWRfbWFzayhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JvdXRlcl9pZF9tYXNrCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5pZF9zZXF1ZW5jZSA9PSBvdGhlci5pZF9zZXF1ZW5jZSBhbmQgXAorICAgICAgICAgICAgc2VsZi5yb3V0ZXJfaWRfbWFzayA9PSBvdGhlci5yb3V0ZXJfaWRfbWFzayBhbmQgXAorICAgICAgICAgICAgc2VsZi5saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEgPT0gb3RoZXIubGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGxxcmRfc3RyID0gIiwgIi5qb2luKFsie30iLmZvcm1hdChscXJkKSBmb3IgbHFyZCBpbiBzZWxmLmxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YV0pCisgICAgICAgIHJldHVybiAiUm91dGU2NChpZF9zZXF1ZW5jZT17fSwgcm91dGVyX2lkX21hc2s9e30sIGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YT1be31dKSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5pZF9zZXF1ZW5jZSwgaGV4KHNlbGYucm91dGVyX2lkX21hc2spLCBscXJkX3N0cikKKworCitjbGFzcyBSb3V0ZTY0RmFjdG9yeToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGFfZmFjdG9yeSk6CisgICAgICAgIHNlbGYuX2xxcmRfZmFjdG9yeSA9IGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YV9mYWN0b3J5CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgaWRfc2VxdWVuY2UgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICByb3V0ZXJfaWRfbWFzayA9IHN0cnVjdC51bnBhY2soIj5RIiwgZGF0YS5yZWFkKDgpKVswXQorCisgICAgICAgIGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSA9IFtdCisKKyAgICAgICAgd2hpbGUgZGF0YS50ZWxsKCkgPCBsZW4oZGF0YS5nZXR2YWx1ZSgpKToKKyAgICAgICAgICAgIGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YS5hcHBlbmQoc2VsZi5fbHFyZF9mYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykpCisKKyAgICAgICAgcmV0dXJuIFJvdXRlNjQoaWRfc2VxdWVuY2UsIHJvdXRlcl9pZF9tYXNrLCBsaW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEpCisKKworY2xhc3MgQWRkcmVzczE2KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBhZGRyZXNzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FkZHJlc3MKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLmFkZHJlc3MgPT0gb3RoZXIuYWRkcmVzcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkFkZHJlc3MxNihhZGRyZXNzPXt9KSIuZm9ybWF0KGhleChzZWxmLmFkZHJlc3MpKQorCisKK2NsYXNzIEFkZHJlc3MxNkZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgYWRkcmVzcyA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICByZXR1cm4gQWRkcmVzczE2KGFkZHJlc3MpCisKKworY2xhc3MgTGVhZGVyRGF0YShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnRpdGlvbl9pZCwgd2VpZ2h0aW5nLCBkYXRhX3ZlcnNpb24sIHN0YWJsZV9kYXRhX3ZlcnNpb24sIGxlYWRlcl9yb3V0ZXJfaWQpOgorICAgICAgICBzZWxmLl9wYXJ0aXRpb25faWQgPSBwYXJ0aXRpb25faWQKKyAgICAgICAgc2VsZi5fd2VpZ2h0aW5nID0gd2VpZ2h0aW5nCisgICAgICAgIHNlbGYuX2RhdGFfdmVyc2lvbiA9IGRhdGFfdmVyc2lvbgorICAgICAgICBzZWxmLl9zdGFibGVfZGF0YV92ZXJzaW9uID0gc3RhYmxlX2RhdGFfdmVyc2lvbgorICAgICAgICBzZWxmLl9sZWFkZXJfcm91dGVyX2lkID0gbGVhZGVyX3JvdXRlcl9pZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcnRpdGlvbl9pZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnRpdGlvbl9pZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHdlaWdodGluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dlaWdodGluZworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRhdGFfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RhdGFfdmVyc2lvbgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN0YWJsZV9kYXRhX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zdGFibGVfZGF0YV92ZXJzaW9uCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGVhZGVyX3JvdXRlcl9pZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xlYWRlcl9yb3V0ZXJfaWQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLnBhcnRpdGlvbl9pZCA9PSBvdGhlci5wYXJ0aXRpb25faWQgYW5kIFwKKyAgICAgICAgICAgIHNlbGYud2VpZ2h0aW5nID09IG90aGVyLndlaWdodGluZyBhbmQgXAorICAgICAgICAgICAgc2VsZi5kYXRhX3ZlcnNpb24gPT0gb3RoZXIuZGF0YV92ZXJzaW9uIGFuZCBcCisgICAgICAgICAgICBzZWxmLnN0YWJsZV9kYXRhX3ZlcnNpb24gPT0gb3RoZXIuc3RhYmxlX2RhdGFfdmVyc2lvbiBhbmQgXAorICAgICAgICAgICAgc2VsZi5sZWFkZXJfcm91dGVyX2lkID09IG90aGVyLmxlYWRlcl9yb3V0ZXJfaWQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJMZWFkZXJEYXRhKHBhcnRpdGlvbl9pZD17fSwgd2VpZ2h0aW5nPXt9LCBkYXRhX3ZlcnNpb249e30sIHN0YWJsZV9kYXRhX3ZlcnNpb249e30sIGxlYWRlcl9yb3V0ZXJfaWQ9e30pIi5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLnBhcnRpdGlvbl9pZCwgc2VsZi53ZWlnaHRpbmcsIHNlbGYuZGF0YV92ZXJzaW9uLCBzZWxmLnN0YWJsZV9kYXRhX3ZlcnNpb24sIHNlbGYubGVhZGVyX3JvdXRlcl9pZCkKKworCitjbGFzcyBMZWFkZXJEYXRhRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBwYXJ0aXRpb25faWQgPSBzdHJ1Y3QudW5wYWNrKCI+SSIsIGRhdGEucmVhZCg0KSlbMF0KKyAgICAgICAgd2VpZ2h0aW5nID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgZGF0YV92ZXJzaW9uID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgc3RhYmxlX2RhdGFfdmVyc2lvbiA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIGxlYWRlcl9yb3V0ZXJfaWQgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICByZXR1cm4gTGVhZGVyRGF0YShwYXJ0aXRpb25faWQsIHdlaWdodGluZywgZGF0YV92ZXJzaW9uLCBzdGFibGVfZGF0YV92ZXJzaW9uLCBsZWFkZXJfcm91dGVyX2lkKQorCisKK2NsYXNzIE5ldHdvcmtEYXRhKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGx2cyk6CisgICAgICAgIHNlbGYuX3RsdnMgPSB0bHZzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGx2cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RsdnMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLnRsdnMgPT0gb3RoZXIudGx2cworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICB0bHZzX3N0ciA9ICIsICIuam9pbihbInt9Ii5mb3JtYXQodGx2KSBmb3IgdGx2IGluIHNlbGYudGx2c10pCisgICAgICAgIHJldHVybiAiTmV0d29ya0RhdGEodGx2cz1be31dKSIuZm9ybWF0KHRsdnNfc3RyKQorCisKK2NsYXNzIE5ldHdvcmtEYXRhRmFjdG9yeToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuZXR3b3JrX2RhdGFfdGx2c19mYWN0b3J5KToKKyAgICAgICAgc2VsZi5fdGx2c19mYWN0b3J5ID0gbmV0d29ya19kYXRhX3RsdnNfZmFjdG9yeQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHRsdnMgPSBzZWxmLl90bHZzX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorICAgICAgICByZXR1cm4gTmV0d29ya0RhdGEodGx2cykKKworCitjbGFzcyBUbHZSZXF1ZXN0KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGx2cyk6CisgICAgICAgIHNlbGYuX3RsdnMgPSB0bHZzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGx2cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RsdnMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLnRsdnMgPT0gb3RoZXIudGx2cworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICB0bHZzX3N0ciA9ICIsICIuam9pbihbInt9Ii5mb3JtYXQodGx2KSBmb3IgdGx2IGluIHNlbGYudGx2c10pCisgICAgICAgIHJldHVybiAiVGx2UmVxdWVzdCh0bHZzPVt7fV0pIi5mb3JtYXQodGx2c19zdHIpCisKKworY2xhc3MgVGx2UmVxdWVzdEZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgdGx2cyA9IFtiIGZvciBiIGluIGJ5dGVhcnJheShkYXRhLnJlYWQoKSldCisgICAgICAgIHJldHVybiBUbHZSZXF1ZXN0KHRsdnMpCisKKworY2xhc3MgU2Nhbk1hc2sob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb3V0ZXIsIGVuZF9kZXZpY2UpOgorICAgICAgICBzZWxmLl9yb3V0ZXIgPSByb3V0ZXIKKyAgICAgICAgc2VsZi5fZW5kX2RldmljZSA9IGVuZF9kZXZpY2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByb3V0ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yb3V0ZXIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBlbmRfZGV2aWNlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZW5kX2RldmljZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucm91dGVyID09IG90aGVyLnJvdXRlciBhbmQgc2VsZi5lbmRfZGV2aWNlID09IG90aGVyLmVuZF9kZXZpY2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJTY2FuTWFzayhyb3V0ZXI9e30sIGVuZF9kZXZpY2U9e30pIi5mb3JtYXQoc2VsZi5yb3V0ZXIsIHNlbGYuZW5kX2RldmljZSkKKworCitjbGFzcyBTY2FuTWFza0ZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgc2Nhbl9tYXNrID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgcm91dGVyID0gKHNjYW5fbWFzayA+PiA3KSAmIDB4MDEKKyAgICAgICAgZW5kX2RldmljZSA9IChzY2FuX21hc2sgPj4gNikgJiAweDAxCisgICAgICAgIHJldHVybiBTY2FuTWFzayhyb3V0ZXIsIGVuZF9kZXZpY2UpCisKKworY2xhc3MgQ29ubmVjdGl2aXR5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgcHAsCisgICAgICAgICAgICAgICAgIGxpbmtfcXVhbGl0eV8zLAorICAgICAgICAgICAgICAgICBsaW5rX3F1YWxpdHlfMiwKKyAgICAgICAgICAgICAgICAgbGlua19xdWFsaXR5XzEsCisgICAgICAgICAgICAgICAgIGxlYWRlcl9jb3N0LAorICAgICAgICAgICAgICAgICBpZF9zZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgYWN0aXZlX3JvdXRlcnMsCisgICAgICAgICAgICAgICAgIHNlZF9idWZmZXJfc2l6ZT1Ob25lLAorICAgICAgICAgICAgICAgICBzZWRfZGF0YWdyYW1fY291bnQ9Tm9uZSk6CisgICAgICAgIHNlbGYuX3BwID0gcHAKKyAgICAgICAgc2VsZi5fbGlua19xdWFsaXR5XzMgPSBsaW5rX3F1YWxpdHlfMworICAgICAgICBzZWxmLl9saW5rX3F1YWxpdHlfMiA9IGxpbmtfcXVhbGl0eV8yCisgICAgICAgIHNlbGYuX2xpbmtfcXVhbGl0eV8xID0gbGlua19xdWFsaXR5XzEKKyAgICAgICAgc2VsZi5fbGVhZGVyX2Nvc3QgPSBsZWFkZXJfY29zdAorICAgICAgICBzZWxmLl9pZF9zZXF1ZW5jZSA9IGlkX3NlcXVlbmNlCisgICAgICAgIHNlbGYuX2FjdGl2ZV9yb3V0ZXJzID0gYWN0aXZlX3JvdXRlcnMKKyAgICAgICAgc2VsZi5fc2VkX2J1ZmZlcl9zaXplID0gc2VkX2J1ZmZlcl9zaXplCisgICAgICAgIHNlbGYuX3NlZF9kYXRhZ3JhbV9jb3VudCA9IHNlZF9kYXRhZ3JhbV9jb3VudAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBwKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHAKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsaW5rX3F1YWxpdHlfMyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpbmtfcXVhbGl0eV8zCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGlua19xdWFsaXR5XzIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9saW5rX3F1YWxpdHlfMgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxpbmtfcXVhbGl0eV8xKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlua19xdWFsaXR5XzEKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsZWFkZXJfY29zdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xlYWRlcl9jb3N0CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaWRfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pZF9zZXF1ZW5jZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFjdGl2ZV9yb3V0ZXJzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYWN0aXZlX3JvdXRlcnMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzZWRfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZWRfYnVmZmVyX3NpemUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzZWRfZGF0YWdyYW1fY291bnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZWRfZGF0YWdyYW1fY291bnQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLnBwID09IG90aGVyLnBwIGFuZCBcCisgICAgICAgICAgICBzZWxmLmxpbmtfcXVhbGl0eV8zID09IG90aGVyLmxpbmtfcXVhbGl0eV8zIGFuZCBcCisgICAgICAgICAgICBzZWxmLmxpbmtfcXVhbGl0eV8yID09IG90aGVyLmxpbmtfcXVhbGl0eV8yIGFuZCBcCisgICAgICAgICAgICBzZWxmLmxpbmtfcXVhbGl0eV8xID09IG90aGVyLmxpbmtfcXVhbGl0eV8xIGFuZCBcCisgICAgICAgICAgICBzZWxmLmxlYWRlcl9jb3N0ID09IG90aGVyLmxlYWRlcl9jb3N0IGFuZCBcCisgICAgICAgICAgICBzZWxmLmlkX3NlcXVlbmNlID09IG90aGVyLmlkX3NlcXVlbmNlIGFuZCBcCisgICAgICAgICAgICBzZWxmLmFjdGl2ZV9yb3V0ZXJzID09IG90aGVyLmFjdGl2ZV9yb3V0ZXJzIGFuZCBcCisgICAgICAgICAgICBzZWxmLnNlZF9idWZmZXJfc2l6ZSA9PSBvdGhlci5zZWRfYnVmZmVyX3NpemUgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuc2VkX2RhdGFncmFtX2NvdW50ID09IG90aGVyLnNlZF9kYXRhZ3JhbV9jb3VudAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gciJDb25uZWN0aXZpdHkocHA9e30sIFwKKyAgICAgICAgICAgICAgICAgbGlua19xdWFsaXR5XzM9e30sIFwKKyAgICAgICAgICAgICAgICAgbGlua19xdWFsaXR5XzI9e30sIFwKKyAgICAgICAgICAgICAgICAgbGlua19xdWFsaXR5XzE9e30sIFwKKyAgICAgICAgICAgICAgICAgbGVhZGVyX2Nvc3Q9e30sIFwKKyAgICAgICAgICAgICAgICAgaWRfc2VxdWVuY2U9e30sIFwKKyAgICAgICAgICAgICAgICAgYWN0aXZlX3JvdXRlcnM9e30sIFwKKyAgICAgICAgICAgICAgICAgc2VkX2J1ZmZlcl9zaXplPXt9LCBcCisgICAgICAgICAgICAgICAgIHNlZF9kYXRhZ3JhbV9jb3VudD17fSkiLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYucHAsCisgICAgICAgICAgICBzZWxmLmxpbmtfcXVhbGl0eV8zLAorICAgICAgICAgICAgc2VsZi5saW5rX3F1YWxpdHlfMiwKKyAgICAgICAgICAgIHNlbGYubGlua19xdWFsaXR5XzEsCisgICAgICAgICAgICBzZWxmLmxlYWRlcl9jb3N0LAorICAgICAgICAgICAgc2VsZi5pZF9zZXF1ZW5jZSwKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlX3JvdXRlcnMsCisgICAgICAgICAgICBzZWxmLnNlZF9idWZmZXJfc2l6ZSwKKyAgICAgICAgICAgIHNlbGYuc2VkX2RhdGFncmFtX2NvdW50CisgICAgICAgICkKKworCitjbGFzcyBDb25uZWN0aXZpdHlGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHBwID0gb3JkKGRhdGEucmVhZCgxKSkgJiAweDAzCisgICAgICAgIGxpbmtfcXVhbGl0eV8zID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgbGlua19xdWFsaXR5XzIgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBsaW5rX3F1YWxpdHlfMSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIGxlYWRlcl9jb3N0ID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgaWRfc2VxdWVuY2UgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBhY3RpdmVfcm91dGVycyA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgc2VkX2RhdGEgPSBpby5CeXRlc0lPKGRhdGEucmVhZCgzKSkKKworICAgICAgICBpZiBsZW4oc2VkX2RhdGEuZ2V0dmFsdWUoKSkgPiAwOgorICAgICAgICAgICAgc2VkX2J1ZmZlcl9zaXplID0gc3RydWN0LnVucGFjaygiPkgiLCBzZWRfZGF0YS5yZWFkKDIpKVswXQorICAgICAgICAgICAgc2VkX2RhdGFncmFtX2NvdW50ID0gb3JkKHNlZF9kYXRhLnJlYWQoMSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWRfYnVmZmVyX3NpemUgPSBOb25lCisgICAgICAgICAgICBzZWRfZGF0YWdyYW1fY291bnQgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIENvbm5lY3Rpdml0eShwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3F1YWxpdHlfMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3F1YWxpdHlfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3F1YWxpdHlfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkZXJfY29zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZF9zZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfcm91dGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWRfYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkX2RhdGFncmFtX2NvdW50KQorCisKK2NsYXNzIExpbmtNYXJnaW4ob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5rX21hcmdpbik6CisgICAgICAgIHNlbGYuX2xpbmtfbWFyZ2luID0gbGlua19tYXJnaW4KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsaW5rX21hcmdpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpbmtfbWFyZ2luCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5saW5rX21hcmdpbiA9PSBvdGhlci5saW5rX21hcmdpbgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkxpbmtNYXJnaW4obGlua19tYXJnaW49e30pIi5mb3JtYXQoc2VsZi5saW5rX21hcmdpbikKKworCitjbGFzcyBMaW5rTWFyZ2luRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBsaW5rX21hcmdpbiA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIHJldHVybiBMaW5rTWFyZ2luKGxpbmtfbWFyZ2luKQorCisKK2NsYXNzIFN0YXR1cyhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHNlbGYuX3N0YXR1cyA9IHN0YXR1cworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN0YXR1cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXR1cworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RhdHVzID09IG90aGVyLnN0YXR1cworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlN0YXR1cyhzdGF0dXM9e30pIi5mb3JtYXQoc2VsZi5zdGF0dXMpCisKKworY2xhc3MgU3RhdHVzRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBzdGF0dXMgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICByZXR1cm4gU3RhdHVzKHN0YXR1cykKKworCitjbGFzcyBWZXJzaW9uKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmVyc2lvbik6CisgICAgICAgIHNlbGYuX3ZlcnNpb24gPSB2ZXJzaW9uCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZlcnNpb24KKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLnZlcnNpb24gPT0gb3RoZXIudmVyc2lvbgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlZlcnNpb24odmVyc2lvbj17fSkiLmZvcm1hdChzZWxmLnZlcnNpb24pCisKKworY2xhc3MgVmVyc2lvbkZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgdmVyc2lvbiA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICByZXR1cm4gVmVyc2lvbih2ZXJzaW9uKQorCisKK2NsYXNzIEFkZHJlc3NGdWxsKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXB2Nl9hZGRyZXNzKToKKyAgICAgICAgc2VsZi5faXB2Nl9hZGRyZXNzID0gaXB2Nl9hZGRyZXNzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXB2Nl9hZGRyZXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faXB2Nl9hZGRyZXNzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5pcHY2X2FkZHJlc3MgPT0gb3RoZXIuaXB2Nl9hZGRyZXNzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQWRkcmVzc0Z1bGwoaXB2Nl9hZGRyZXNzPXt9JykiLmZvcm1hdChoZXhsaWZ5KHNlbGYuaXB2Nl9hZGRyZXNzKSkKKworCitjbGFzcyBBZGRyZXNzRnVsbEZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgZGF0YS5yZWFkKDEpICAjIGZpcnN0IGJ5dGUgaXMgaWdub3JlZAorICAgICAgICBpcHY2X2FkZHJlc3MgPSBkYXRhLnJlYWQoMTYpCisgICAgICAgIHJldHVybiBBZGRyZXNzRnVsbChpcHY2X2FkZHJlc3MpCisKKworY2xhc3MgQWRkcmVzc0NvbXByZXNzZWQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaWQsIGlpZCk6CisgICAgICAgIHNlbGYuX2NpZCA9IGNpZAorICAgICAgICBzZWxmLl9paWQgPSBpaWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jaWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9paWQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLmNpZCA9PSBvdGhlci5jaWQgYW5kIHNlbGYuaWlkID09IG90aGVyLmlpZAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkFkZHJlc3NDb21wcmVzc2VkKGNpZD17fSwgaWlkPXt9JykiLmZvcm1hdChzZWxmLmNpZCwgaGV4bGlmeShzZWxmLmlpZCkpCisKKworY2xhc3MgQWRkcmVzc0NvbXByZXNzZWRGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGNpZCA9IChvcmQoZGF0YS5yZWFkKDEpKSAmIDB4MEYpCisgICAgICAgIGlpZCA9IGJ5dGVhcnJheShkYXRhLnJlYWQoOCkpCisgICAgICAgIHJldHVybiBBZGRyZXNzQ29tcHJlc3NlZChjaWQsIGlpZCkKKworCitjbGFzcyBBZGRyZXNzUmVnaXN0cmF0aW9uKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzc2VzKToKKyAgICAgICAgc2VsZi5fYWRkcmVzc2VzID0gYWRkcmVzc2VzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWRkcmVzc2VzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYWRkcmVzc2VzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5hZGRyZXNzZXMgPT0gb3RoZXIuYWRkcmVzc2VzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGFkZHJlc3Nlc19zdHIgPSAiLCAiLmpvaW4oWyJ7fSIuZm9ybWF0KGFkZHJlc3MpIGZvciBhZGRyZXNzIGluIHNlbGYuYWRkcmVzc2VzXSkKKyAgICAgICAgcmV0dXJuICJBZGRyZXNzUmVnaXN0cmF0aW9uKGFkZHJlc3Nlcz1be31dKSIuZm9ybWF0KGFkZHJlc3Nlc19zdHIpCisKKworY2xhc3MgQWRkcmVzc1JlZ2lzdHJhdGlvbkZhY3Rvcnk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcl9jb21wcmVzc2VkX2ZhY3RvcnksIGFkZHJfZnVsbF9mYWN0b3J5KToKKyAgICAgICAgc2VsZi5fYWRkcl9jb21wcmVzc2VkX2ZhY3RvcnkgPSBhZGRyX2NvbXByZXNzZWRfZmFjdG9yeQorICAgICAgICBzZWxmLl9hZGRyX2Z1bGxfZmFjdG9yeSA9IGFkZHJfZnVsbF9mYWN0b3J5CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgYWRkcmVzc2VzID0gW10KKworICAgICAgICB3aGlsZSBkYXRhLnRlbGwoKSA8IGxlbihkYXRhLmdldHZhbHVlKCkpOgorICAgICAgICAgICAgY29tcHJlc3NlZCA9IChvcmQoZGF0YS5yZWFkKDEpKSA+PiA3KSAmIDB4MDEKKyAgICAgICAgICAgIGRhdGEuc2VlaygtMSwgaW8uU0VFS19DVVIpCisKKyAgICAgICAgICAgIGlmIGNvbXByZXNzZWQ6CisgICAgICAgICAgICAgICAgYWRkcmVzc2VzLmFwcGVuZChzZWxmLl9hZGRyX2NvbXByZXNzZWRfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhZGRyZXNzZXMuYXBwZW5kKHNlbGYuX2FkZHJfZnVsbF9mYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykpCisKKyAgICAgICAgcmV0dXJuIEFkZHJlc3NSZWdpc3RyYXRpb24oYWRkcmVzc2VzKQorCisKK2NsYXNzIENoYW5uZWwob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsX3BhZ2UsIGNoYW5uZWwpOgorICAgICAgICBzZWxmLl9jaGFubmVsX3BhZ2UgPSBjaGFubmVsX3BhZ2UKKyAgICAgICAgc2VsZi5fY2hhbm5lbCA9IGNoYW5uZWwKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjaGFubmVsX3BhZ2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jaGFubmVsX3BhZ2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjaGFubmVsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2hhbm5lbAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuY2hhbm5lbF9wYWdlID09IG90aGVyLmNoYW5uZWxfcGFnZSBhbmQgXAorICAgICAgICAgICAgc2VsZi5jaGFubmVsID09IG90aGVyLmNoYW5uZWwKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDaGFubmVsKGNoYW5uZWxfcGFnZT17fSwgY2hhbm5lbD17fSkiLmZvcm1hdChzZWxmLmNoYW5uZWxfcGFnZSwgY2hhbm5lbCkKKworCitjbGFzcyBDaGFubmVsRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBjaGFubmVsX3BhZ2UgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBjaGFubmVsID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgIHJldHVybiBDaGFubmVsKGNoYW5uZWxfcGFnZSwgY2hhbm5lbCkKKworCitjbGFzcyBQYW5JZDoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYW5faWQpOgorICAgICAgICBzZWxmLl9wYW5faWQgPSBwYW5faWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYW5faWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wYW5faWQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLnBhbl9pZCA9PSBvdGhlci5wYW5faWQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJQYW5JZChwYW5faWQ9e30pIi5mb3JtYXQoc2VsZi5wYW5faWQpCisKKworY2xhc3MgUGFuSWRGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHBhbl9pZCA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICByZXR1cm4gUGFuSWQocGFuX2lkKQorCisKK2NsYXNzIEFjdGl2ZVRpbWVzdGFtcChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVzdGFtcF9zZWNvbmRzLCB0aW1lc3RhbXBfdGlja3MsIHUpOgorICAgICAgICBzZWxmLl90aW1lc3RhbXBfc2Vjb25kcyA9IHRpbWVzdGFtcF9zZWNvbmRzCisgICAgICAgIHNlbGYuX3RpbWVzdGFtcF90aWNrcyA9IHRpbWVzdGFtcF90aWNrcworICAgICAgICBzZWxmLl91ID0gdQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRpbWVzdGFtcF9zZWNvbmRzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGltZXN0YW1wX3NlY29uZHMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0aW1lc3RhbXBfdGlja3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90aW1lc3RhbXBfdGlja3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB1KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYudGltZXN0YW1wX3NlY29uZHMgPT0gb3RoZXIudGltZXN0YW1wX3NlY29uZHMgYW5kIFwKKyAgICAgICAgICAgIHNlbGYudGltZXN0YW1wX3RpY2tzID09IG90aGVyLnRpbWVzdGFtcF90aWNrcyBhbmQgXAorICAgICAgICAgICAgc2VsZi51ID09IG90aGVyLnUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJBY3RpdmVUaW1lc3RhbXAodGltZXN0YW1wX3NlY29uZHM9e30sIHRpbWVzdGFtcF90aWNrcz17fSwgdT17fSkiLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYudGltZXN0YW1wX3NlY29uZHMsIHNlbGYudGltZXN0YW1wX3RpY2tzLCBzZWxmLnUpCisKKworY2xhc3MgQWN0aXZlVGltZXN0YW1wRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBzZWNvbmRzID0gYnl0ZWFycmF5KFsweDAwLCAweDAwXSkgKyBieXRlYXJyYXkoZGF0YS5yZWFkKDYpKQorICAgICAgICB0aWNrcyA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorCisgICAgICAgIHRpbWVzdGFtcF9zZWNvbmRzID0gc3RydWN0LnVucGFjaygiPlEiLCBieXRlcyhzZWNvbmRzKSlbMF0KKyAgICAgICAgdGltZXN0YW1wX3RpY2tzID0gKHRpY2tzID4+IDEpCisgICAgICAgIHUgPSB0aWNrcyAmIDB4MDEKKyAgICAgICAgcmV0dXJuIEFjdGl2ZVRpbWVzdGFtcCh0aW1lc3RhbXBfc2Vjb25kcywgdGltZXN0YW1wX3RpY2tzLCB1KQorCisKK2NsYXNzIFBlbmRpbmdUaW1lc3RhbXAob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lc3RhbXBfc2Vjb25kcywgdGltZXN0YW1wX3RpY2tzLCB1KToKKyAgICAgICAgc2VsZi5fdGltZXN0YW1wX3NlY29uZHMgPSB0aW1lc3RhbXBfc2Vjb25kcworICAgICAgICBzZWxmLl90aW1lc3RhbXBfdGlja3MgPSB0aW1lc3RhbXBfdGlja3MKKyAgICAgICAgc2VsZi5fdSA9IHUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0aW1lc3RhbXBfc2Vjb25kcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWVzdGFtcF9zZWNvbmRzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGltZXN0YW1wX3RpY2tzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGltZXN0YW1wX3RpY2tzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3UKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLnRpbWVzdGFtcF9zZWNvbmRzID09IG90aGVyLnRpbWVzdGFtcF9zZWNvbmRzIGFuZCBcCisgICAgICAgICAgICBzZWxmLnRpbWVzdGFtcF90aWNrcyA9PSBvdGhlci50aW1lc3RhbXBfdGlja3MgYW5kIFwKKyAgICAgICAgICAgIHNlbGYudSA9PSBvdGhlci51CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiUGVuZGluZ1RpbWVzdGFtcCh0aW1lc3RhbXBfc2Vjb25kcz17fSwgdGltZXN0YW1wX3RpY2tzPXt9LCB1PXt9KSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi50aW1lc3RhbXBfc2Vjb25kcywgc2VsZi50aW1lc3RhbXBfdGlja3MsIHNlbGYudSkKKworCitjbGFzcyBQZW5kaW5nVGltZXN0YW1wRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBzZWNvbmRzID0gYnl0ZWFycmF5KFsweDAwLCAweDAwXSkgKyBieXRlYXJyYXkoZGF0YS5yZWFkKDYpKQorICAgICAgICB0aWNrcyA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorCisgICAgICAgIHRpbWVzdGFtcF9zZWNvbmRzID0gc3RydWN0LnVucGFjaygiPlEiLCBieXRlcyhzZWNvbmRzKSlbMF0KKyAgICAgICAgdGltZXN0YW1wX3RpY2tzID0gKHRpY2tzID4+IDEpCisgICAgICAgIHUgPSB0aWNrcyAmIDB4MDEKKyAgICAgICAgcmV0dXJuIFBlbmRpbmdUaW1lc3RhbXAodGltZXN0YW1wX3NlY29uZHMsIHRpbWVzdGFtcF90aWNrcywgdSkKKworCitjbGFzcyBBY3RpdmVPcGVyYXRpb25hbERhdGFzZXQ6CisgICAgIyBUT0RPOiBOb3QgaW1wbGVtZW50ZWQgeWV0CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHByaW50KCJBY3RpdmVPcGVyYXRpb25hbERhdGFzZXQgaXMgbm90IGltcGxlbWVudGVkIHlldC4iKQorCisKK2NsYXNzIEFjdGl2ZU9wZXJhdGlvbmFsRGF0YXNldEZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcmV0dXJuIEFjdGl2ZU9wZXJhdGlvbmFsRGF0YXNldCgpCisKKworY2xhc3MgUGVuZGluZ09wZXJhdGlvbmFsRGF0YXNldDoKKyAgICAjIFRPRE86IE5vdCBpbXBsZW1lbnRlZCB5ZXQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgcHJpbnQoIlBlbmRpbmdPcGVyYXRpb25hbERhdGFzZXQgaXMgbm90IGltcGxlbWVudGVkIHlldC4iKQorCisKK2NsYXNzIFBlbmRpbmdPcGVyYXRpb25hbERhdGFzZXRGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHJldHVybiBQZW5kaW5nT3BlcmF0aW9uYWxEYXRhc2V0KCkKKworCitjbGFzcyBUaHJlYWREaXNjb3Zlcnk6CisgICAgIyBUT0RPOiBOb3QgaW1wbGVtZW50ZWQgeWV0CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHByaW50KCJUaHJlYWREaXNjb3ZlcnkgaXMgbm90IGltcGxlbWVudGVkIHlldC4iKQorCisKK2NsYXNzIFRocmVhZERpc2NvdmVyeUZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcmV0dXJuIFRocmVhZERpc2NvdmVyeSgpCisKKworY2xhc3MgTWxlQ29tbWFuZChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIF90eXBlLCB0bHZzKToKKyAgICAgICAgc2VsZi5fdHlwZSA9IF90eXBlCisgICAgICAgIHNlbGYuX3RsdnMgPSB0bHZzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3R5cGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0bHZzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGx2cworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICB0bHZzX3N0ciA9ICIsICIuam9pbihbInt9Ii5mb3JtYXQodGx2KSBmb3IgdGx2IGluIHNlbGYudGx2c10pCisgICAgICAgIHJldHVybiAiTWxlQ29tbWFuZCh0eXBlPXt9LCB0bHZzPVt7fV0pIi5mb3JtYXQoc2VsZi50eXBlLm5hbWUsIHRsdnNfc3RyKQorCisKK2NsYXNzIE1sZUNvbW1hbmRGYWN0b3J5OgorCisgICAgX01BUktFUl9FWFRFTkRFRF9MRU5HVEggPSAweGZmCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGx2c19mYWN0b3JpZXMpOgorICAgICAgICBzZWxmLl90bHZzX2ZhY3RvcmllcyA9IHRsdnNfZmFjdG9yaWVzCisKKyAgICBkZWYgX2dldF9sZW5ndGgoc2VsZiwgZGF0YSk6CisgICAgICAgIGxlbmd0aCA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgaWYgbGVuZ3RoID09IHNlbGYuX01BUktFUl9FWFRFTkRFRF9MRU5HVEg6CisgICAgICAgICAgICBsZW5ndGggPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKworICAgICAgICByZXR1cm4gbGVuZ3RoCisKKyAgICBkZWYgX2dldF90bHZfZmFjdG9yeShzZWxmLCBfdHlwZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl90bHZzX2ZhY3Rvcmllc1tfdHlwZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoIkNvdWxkIG5vdCBmaW5kIFRMViBmYWN0b3J5LiBVbnN1cHBvcnRlZCBUTFYgdHlwZToge30iLmZvcm1hdChfdHlwZSkpCisKKyAgICBkZWYgX3BhcnNlX3RsdihzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBfdHlwZSA9IFRsdlR5cGUob3JkKGRhdGEucmVhZCgxKSkpCisgICAgICAgIGxlbmd0aCA9IHNlbGYuX2dldF9sZW5ndGgoZGF0YSkKKyAgICAgICAgdmFsdWUgPSBkYXRhLnJlYWQobGVuZ3RoKQorCisgICAgICAgIGZhY3RvcnkgPSBzZWxmLl9nZXRfdGx2X2ZhY3RvcnkoX3R5cGUpCisKKyAgICAgICAgcmV0dXJuIGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyh2YWx1ZSksIG1lc3NhZ2VfaW5mbykKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBjbWRfdHlwZSA9IENvbW1hbmRUeXBlKG9yZChkYXRhLnJlYWQoMSkpKQorICAgICAgICB0bHZzID0gW10KKworICAgICAgICB3aGlsZSBkYXRhLnRlbGwoKSA8IGxlbihkYXRhLmdldHZhbHVlKCkpOgorICAgICAgICAgICAgdGx2ID0gc2VsZi5fcGFyc2VfdGx2KGRhdGEsIG1lc3NhZ2VfaW5mbykKKyAgICAgICAgICAgIHRsdnMuYXBwZW5kKHRsdikKKworICAgICAgICByZXR1cm4gTWxlQ29tbWFuZChjbWRfdHlwZSwgdGx2cykKKworCitjbGFzcyBNbGVNZXNzYWdlKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHNlbGYuX2NvbW1hbmQgPSBjb21tYW5kCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29tbWFuZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbW1hbmQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJNbGVNZXNzYWdlKGNvbW1hbmQ9e30pIi5mb3JtYXQoc2VsZi5jb21tYW5kKQorCisKK2NsYXNzIE1sZU1lc3NhZ2VTZWN1cmVkKE1sZU1lc3NhZ2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF1eF9zZWNfaGRyLCBjb21tYW5kLCBtaWMpOgorICAgICAgICBzdXBlcihNbGVNZXNzYWdlU2VjdXJlZCwgc2VsZikuX19pbml0X18oY29tbWFuZCkKKyAgICAgICAgc2VsZi5fYXV4X3NlY19oZHIgPSBhdXhfc2VjX2hkcgorICAgICAgICBzZWxmLl9taWMgPSBtaWMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhdXhfc2VjX2hkcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2F1eF9zZWNfaGRyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWljKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWljCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTWxlTWVzc2FnZVNlY3VyZWQoYXV4X3NlY19oZHI9e30sIGNvbW1hbmQ9e30sIG1pYz1cInt9XCIpIi5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLmF1eF9zZWNfaGRyLCBzZWxmLmNvbW1hbmQsIGhleGxpZnkoc2VsZi5taWMpKQorCisKK2NsYXNzIE1sZU1lc3NhZ2VGYWN0b3J5OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF1eF9zZWNfaGRyX2ZhY3RvcnksIG1sZV9jb21tYW5kX2ZhY3RvcnksIGNyeXB0b19lbmdpbmUpOgorICAgICAgICBzZWxmLl9hdXhfc2VjX2hkcl9mYWN0b3J5ID0gYXV4X3NlY19oZHJfZmFjdG9yeQorICAgICAgICBzZWxmLl9tbGVfY29tbWFuZF9mYWN0b3J5ID0gbWxlX2NvbW1hbmRfZmFjdG9yeQorICAgICAgICBzZWxmLl9jcnlwdG9fZW5naW5lID0gY3J5cHRvX2VuZ2luZQorCisgICAgZGVmIF9jcmVhdGVfbWxlX3NlY3VyZWRfbWVzc2FnZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBhdXhfc2VjX2hkciA9IHNlbGYuX2F1eF9zZWNfaGRyX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIGVuY19kYXRhX2xlbmd0aCA9IGxlbihkYXRhLmdldHZhbHVlKCkpCisKKyAgICAgICAgZW5jX2RhdGEgPSBieXRlYXJyYXkoZGF0YS5yZWFkKGVuY19kYXRhX2xlbmd0aCAtIGRhdGEudGVsbCgpIC0gc2VsZi5fY3J5cHRvX2VuZ2luZS5taWNfbGVuZ3RoKSkKKyAgICAgICAgbWljID0gYnl0ZWFycmF5KGRhdGEucmVhZCgpKQorCisgICAgICAgIGRlY19kYXRhID0gc2VsZi5fY3J5cHRvX2VuZ2luZS5kZWNyeXB0KGVuY19kYXRhLCBtaWMsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICBjb21tYW5kID0gc2VsZi5fbWxlX2NvbW1hbmRfZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRlY19kYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIHJldHVybiBNbGVNZXNzYWdlU2VjdXJlZChhdXhfc2VjX2hkciwgY29tbWFuZCwgbWljKQorCisgICAgZGVmIF9jcmVhdGVfbWxlX21lc3NhZ2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgY29tbWFuZCA9IHNlbGYuX21sZV9jb21tYW5kX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIHJldHVybiBNbGVNZXNzYWdlKGNvbW1hbmQpCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgc2VjdXJpdHlfaW5kaWNhdG9yID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBpZiBzZWN1cml0eV9pbmRpY2F0b3IgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jcmVhdGVfbWxlX3NlY3VyZWRfbWVzc2FnZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgZWxpZiBzZWN1cml0eV9pbmRpY2F0b3IgPT0gMjU1OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NyZWF0ZV9tbGVfbWVzc2FnZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNyZWF0ZSBNTEUgbWVzc2FnZS4gVW5rbm93biBzZWN1cml0eSBpbmRpY2F0b3IgdmFsdWU6IHt9Ii5mb3JtYXQoc2VjdXJpdHlfaW5kaWNhdG9yKSkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbmV0X2NyeXB0by5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbmV0X2NyeXB0by5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTlhMjMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9uZXRfY3J5cHRvLnB5CkBAIC0wLDAgKzEsMzU5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IGhtYWMKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgc3RydWN0CisKK2Zyb20gYmluYXNjaWkgaW1wb3J0IGhleGxpZnkKKworZnJvbSBDcnlwdG8uQ2lwaGVyIGltcG9ydCBBRVMKKworCitjbGFzcyBDcnlwdG9FbmdpbmU6CisKKyAgICAiIiIgQ2xhc3MgcmVzcG9uc2libGUgZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb2YgZGF0YS4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3J5cHRvX21hdGVyaWFsX2NyZWF0b3IpOgorICAgICAgICAiIiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG1hc3Rlcl9rZXkgKGJ5dGVhcnJheSkKKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY3J5cHRvX21hdGVyaWFsX2NyZWF0b3IgPSBjcnlwdG9fbWF0ZXJpYWxfY3JlYXRvcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1pY19sZW5ndGgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jcnlwdG9fbWF0ZXJpYWxfY3JlYXRvci5taWNfbGVuZ3RoCisKKyAgICBkZWYgZW5jcnlwdChzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICAiIiIgRW5jcnlwdCBtZXNzYWdlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBkYXRhIChieXRlYXJyYXkpCisgICAgICAgICAgICBtZXNzYWdlX2luZm8gKE1lc3NhZ2VJbmZvKQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICB0dXBsZTogRW5jcnlwdGVkIG1lc3NhZ2UgKGJ5dGVhcnJheSksIE1JQyAoYnl0ZWFycmF5KQorCisgICAgICAgICIiIgorICAgICAgICBrZXksIG5vbmNlLCBhdXRoX2RhdGEgPSBzZWxmLl9jcnlwdG9fbWF0ZXJpYWxfY3JlYXRvci5jcmVhdGVfa2V5X2FuZF9ub25jZV9hbmRfYXV0aGVudGljYXRlZF9kYXRhKG1lc3NhZ2VfaW5mbykKKworICAgICAgICBjaXBoZXIgPSBBRVMubmV3KGtleSwgQUVTLk1PREVfQ0NNLCBub25jZSwgbWFjX2xlbj1zZWxmLm1pY19sZW5ndGgpCisgICAgICAgIGNpcGhlci51cGRhdGUoYXV0aF9kYXRhKQorCisgICAgICAgIHJldHVybiBjaXBoZXIuZW5jcnlwdF9hbmRfZGlnZXN0KGJ5dGVzKGRhdGEpKQorCisgICAgZGVmIGRlY3J5cHQoc2VsZiwgZW5jX2RhdGEsIG1pYywgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgIiIiIERlY3J5cHQgTUxFIG1lc3NhZ2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGVuY19kYXRhIChieXRlYXJyYXkpCisgICAgICAgICAgICBtaWMgKGJ5dGVhcnJheSkKKyAgICAgICAgICAgIG1lc3NhZ2VfaW5mbyAoTWVzc2FnZUluZm8pCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGJ5dGVhcnJheTogRGVjcnlwdGVkIG1lc3NhZ2UuCisKKyAgICAgICAgIiIiCisgICAgICAgIGtleSwgbm9uY2UsIGF1dGhfZGF0YSA9IHNlbGYuX2NyeXB0b19tYXRlcmlhbF9jcmVhdG9yLmNyZWF0ZV9rZXlfYW5kX25vbmNlX2FuZF9hdXRoZW50aWNhdGVkX2RhdGEobWVzc2FnZV9pbmZvKQorCisgICAgICAgIGNpcGhlciA9IEFFUy5uZXcoa2V5LCBBRVMuTU9ERV9DQ00sIG5vbmNlLCBtYWNfbGVuPXNlbGYubWljX2xlbmd0aCkKKyAgICAgICAgY2lwaGVyLnVwZGF0ZShhdXRoX2RhdGEpCisKKyAgICAgICAgZGVjX2RhdGEgPSBjaXBoZXIuZGVjcnlwdF9hbmRfdmVyaWZ5KGJ5dGVzKGVuY19kYXRhKSwgYnl0ZXMobWljKSkKKyAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShkZWNfZGF0YSkKKworCitjbGFzcyBDcnlwdG9NYXRlcmlhbENyZWF0b3Iob2JqZWN0KToKKworICAgIF9zYWx0ID0gYidUaHJlYWQnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyX2tleSk6CisgICAgICAgICIiIgorICAgICAgICBBcmdzOgorICAgICAgICAgICAgbWFzdGVyX2tleSAoYnl0ZWFycmF5KQorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLm1hc3Rlcl9rZXkgPSBtYXN0ZXJfa2V5CisKKyAgICBkZWYgX2dlbmVyYXRlX2tleXMoc2VsZiwgc2VxdWVuY2VfY291bnRlcik6CisgICAgICAgICIiIiBHZW5lcmF0ZSBNTEUgYW5kIE1BQyBrZXlzLgorCisgICAgICAgIFJlYWQgbW9yZTogNy4xLjQuIEtleSBHZW5lcmF0aW9uIC0gVGhyZWFkIHYxLjEgU3BlY2lmaWNhdGlvbiBGaW5hbAorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXF1ZW5jZV9jb3VudGVyIChpbnQpCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIHR1cGxlOiBNTEUgYW5kIE1BQyBhcyBieXRlcworCisgICAgICAgICIiIgorICAgICAgICBrID0gc2VsZi5tYXN0ZXJfa2V5CisgICAgICAgIHMgPSBzdHJ1Y3QucGFjaygiPkwiLCBzZXF1ZW5jZV9jb3VudGVyKSArIHNlbGYuX3NhbHQKKyAgICAgICAgZCA9IGhtYWMubmV3KGssIHMsIGRpZ2VzdG1vZD1oYXNobGliLnNoYTI1NikuZGlnZXN0KCkKKworICAgICAgICBtbGUgPSBkWzoxNl0KKyAgICAgICAgbWFjID0gZFsxNjpdCisgICAgICAgIHJldHVybiBtbGUsIG1hYworCisgICAgZGVmIGNyZWF0ZV9rZXlfYW5kX25vbmNlX2FuZF9hdXRoZW50aWNhdGVkX2RhdGEoc2VsZiwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1pY19sZW5ndGgoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBNYWNDcnlwdG9NYXRlcmlhbENyZWF0b3IoQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXJfa2V5KToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBtYXN0ZXJfa2V5IChieXRlYXJyYXkpCisKKyAgICAgICAgIiIiCisgICAgICAgIHN1cGVyKE1hY0NyeXB0b01hdGVyaWFsQ3JlYXRvciwgc2VsZikuX19pbml0X18obWFzdGVyX2tleSkKKworICAgIGRlZiBfY3JlYXRlX25vbmNlKHNlbGYsIGV1aTY0LCBmcmFtZV9jb3VudGVyLCBzZWN1cml0eV9sZXZlbCk6CisgICAgICAgICIiIiBDcmVhdGUgQ0NNIE5vbmNlIHJlcXVpcmVkIGJ5IEFFUy0xMjggQ0NNIGZvciBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLgorCisgICAgICAgIFJlYWQgbW9yZTogNy42LjMuMiBDQ00gTm9uY2UgLSBTdGQgODAyLjE1LjQtMjAwNgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBldWk2NCAoYnl0ZXMpCisgICAgICAgICAgICBmcmFtZV9jb3VudGVyIChpbnQpCisgICAgICAgICAgICBzZWN1cml0eV9sZXZlbCAoaW50KQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBieXRlczogY3JlYXRlZCBOb25jZQorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gYnl0ZXMoZXVpNjQgKyBzdHJ1Y3QucGFjaygiPkxCIiwgZnJhbWVfY291bnRlciwgc2VjdXJpdHlfbGV2ZWwpKQorCisgICAgZGVmIF9jcmVhdGVfYXV0aGVudGljYXRlZF9kYXRhKHNlbGYsIG1ociwgYXV4aWxpYXJ5X3NlY3VyaXR5X2hlYWRlciwgbm9ucGF5bG9hZF9maWVsZHMpOgorICAgICAgICAiIiIgQ3JlYXRlIEF1dGhlbnRpY2F0ZWQgRGF0YQorCisgICAgICAgIFJlYWQgbW9yZTogNy42LjMuMyBDQ00gcHJlcmVxdWlzaXRlcyAtIFN0ZCA4MDIuMTUuNC0yMDA2CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG1ociAoYnl0ZXMpCisgICAgICAgICAgICBhdXhpbGlhcnlfc2VjdXJpdHlfaGVhZGVyIChieXRlcykKKyAgICAgICAgICAgIG5vbnBheWxvYWRfZmllbGRzIChieXRlcykKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgYnl0ZXM6IEF1dGhlbnRpY2F0ZWQgRGF0YQorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gYnl0ZXMobWhyICsgYXV4aWxpYXJ5X3NlY3VyaXR5X2hlYWRlciArIG5vbnBheWxvYWRfZmllbGRzKQorCisgICAgZGVmIGNyZWF0ZV9rZXlfYW5kX25vbmNlX2FuZF9hdXRoZW50aWNhdGVkX2RhdGEoc2VsZiwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgXywgbWFjX2tleSA9IHNlbGYuX2dlbmVyYXRlX2tleXMobWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyLnNlcXVlbmNlX2NvdW50ZXIpCisKKyAgICAgICAgbm9uY2UgPSBzZWxmLl9jcmVhdGVfbm9uY2UobWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyLmZyYW1lX2NvdW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkci5zZWN1cml0eV9sZXZlbCkKKworICAgICAgICBhdXRoX2RhdGEgPSBzZWxmLl9jcmVhdGVfYXV0aGVudGljYXRlZF9kYXRhKG1lc3NhZ2VfaW5mby5taHJfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5ub25wYXlsb2FkX2ZpZWxkcykKKworICAgICAgICByZXR1cm4gbWFjX2tleSwgbm9uY2UsIGF1dGhfZGF0YQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1pY19sZW5ndGgoc2VsZik6CisgICAgICAgIHJldHVybiA0CisKKworY2xhc3MgTWxlQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yKENyeXB0b01hdGVyaWFsQ3JlYXRvcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyX2tleSk6CisgICAgICAgICIiIgorICAgICAgICBBcmdzOgorICAgICAgICAgICAgbWFzdGVyX2tleSAoYnl0ZWFycmF5KQorCisgICAgICAgICIiIgorICAgICAgICBzdXBlcihNbGVDcnlwdG9NYXRlcmlhbENyZWF0b3IsIHNlbGYpLl9faW5pdF9fKG1hc3Rlcl9rZXkpCisKKyAgICBkZWYgX2NyZWF0ZV9ub25jZShzZWxmLCBzb3VyY2VfZXVpNjQsIGZyYW1lX2NvdW50ZXIsIHNlY3VyaXR5X2xldmVsKToKKyAgICAgICAgIiIiIENyZWF0ZSBDQ00gTm9uY2UgcmVxdWlyZWQgYnkgQUVTLTEyOCBDQ00gZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uCisKKyAgICAgICAgUmVhZCBtb3JlOiA3LjYuMy4yIENDTSBOb25jZSAtIFN0ZCA4MDIuMTUuNC0yMDA2CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGV1aTY0IChieXRlYXJyYXkpCisgICAgICAgICAgICBmcmFtZV9jb3VudGVyIChpbnQpCisgICAgICAgICAgICBzZWN1cml0eV9sZXZlbCAoaW50KQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBieXRlczogY3JlYXRlZCBOb25jZQorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gYnl0ZXMoc291cmNlX2V1aTY0Wzo4XSArIHN0cnVjdC5wYWNrKCI+TEIiLCBmcmFtZV9jb3VudGVyLCBzZWN1cml0eV9sZXZlbCkpCisKKyAgICBkZWYgX2NyZWF0ZV9hdXRoZW50aWNhdGVkX2RhdGEoc2VsZiwgc291cmNlX2FkZHJlc3MsIGRlc3RpbmF0aW9uX2FkZHJlc3MsIGF1eGlsaWFyeV9zZWN1cml0eV9oZWFkZXIpOgorICAgICAgICAiIiIgQ3JlYXRlIEF1dGhlbnRpY2F0ZWQgRGF0YQorCisgICAgICAgIFJlYWQgbW9yZTogNC44IC0gVGhyZWFkIHYxLjAgU3BlY2lmaWNhdGlvbgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcyAoaXBfYWRkcmVzcykKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uX2FkZHJlc3MgKGlwX2FkZHJlc3MpCisgICAgICAgICAgICBhdXhpbGlhcnlfc2VjdXJpdHlfaGVhZGVyIChieXRlYXJyYXkpCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGJ5dGVzOiBBdXRoZW50aWNhdGVkIERhdGEKKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGJ5dGVzKHNvdXJjZV9hZGRyZXNzLnBhY2tlZCArIGRlc3RpbmF0aW9uX2FkZHJlc3MucGFja2VkICsgYXV4aWxpYXJ5X3NlY3VyaXR5X2hlYWRlcikKKworICAgIGRlZiBjcmVhdGVfa2V5X2FuZF9ub25jZV9hbmRfYXV0aGVudGljYXRlZF9kYXRhKHNlbGYsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIG1sZV9rZXksIF8gPSBzZWxmLl9nZW5lcmF0ZV9rZXlzKG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkci5zZXF1ZW5jZV9jb3VudGVyKQorCisgICAgICAgIG5vbmNlID0gc2VsZi5fY3JlYXRlX25vbmNlKG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MubWFjX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkci5mcmFtZV9jb3VudGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIuc2VjdXJpdHlfbGV2ZWwpCisKKyAgICAgICAgYXV0aF9kYXRhID0gc2VsZi5fY3JlYXRlX2F1dGhlbnRpY2F0ZWRfZGF0YShtZXNzYWdlX2luZm8uc291cmNlX2lwdjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX2lwdjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyX2J5dGVzKQorCisgICAgICAgIHJldHVybiBtbGVfa2V5LCBub25jZSwgYXV0aF9kYXRhCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWljX2xlbmd0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIDQKKworCitjbGFzcyBBdXhpbGlhcnlTZWN1cml0eUhlYWRlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZXlfaWRfbW9kZSwgc2VjdXJpdHlfbGV2ZWwsIGZyYW1lX2NvdW50ZXIsIGtleV9pZCwgYmlnX2VuZGlhbj1UcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBrZXlfaWRfbW9kZSAoaW50KQorICAgICAgICAgICAgc2VjdXJpdHlfbGV2ZWwgKGludCkKKyAgICAgICAgICAgIGZyYW1lX2NvdW50ZXIgKGludCkKKyAgICAgICAgICAgIGtleV9pZCAoYnl0ZWFycmF5KQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fa2V5X2lkX21vZGUgPSBrZXlfaWRfbW9kZQorICAgICAgICBzZWxmLl9zZWN1cml0eV9sZXZlbCA9IHNlY3VyaXR5X2xldmVsCisgICAgICAgIHNlbGYuX2ZyYW1lX2NvdW50ZXIgPSBmcmFtZV9jb3VudGVyCisgICAgICAgIHNlbGYuX2tleV9pZCA9IGtleV9pZAorICAgICAgICBzZWxmLl9iaWdfZW5kaWFuID0gYmlnX2VuZGlhbgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNlcXVlbmNlX2NvdW50ZXIoc2VsZik6CisgICAgICAgICIiIiBDb21wdXRlIG9yIGV4dHJhY3Qgc2VxdWVuY2UgY291bnRlciBiYXNlZCBvbiBjdXJyZW50bHkgc2V0IEtleSBJbmRleCBNb2RlLiAiIiIKKworICAgICAgICBpZiBzZWxmLmtleV9pZF9tb2RlID09IDE6CisgICAgICAgICAgICAjIFRyeSB0byBndWVzcyB2YWxpZCBLZXkgU2VxdWVuY2UgQ291bnRlciBiYXNlZCBvbiBLZXkgSW5kZXguIFRoaXMgb25lIHNob3VsZCB3b3JrIGZvciBub3cuCisgICAgICAgICAgICByZXR1cm4gc2VsZi5rZXlfaW5kZXggLSAxCisgICAgICAgIGVsaWYgc2VsZi5rZXlfaWRfbW9kZSA9PSAyOgorICAgICAgICAgICAgIyBJbiB0aGlzIG1vZGUgc2VxdWVuY2UgY291bnRlciBpcyBzdG9yZWQgb24gdGhlIGZpcnN0IGZvdXIgYnl0ZXMgb2YgS2V5IElELgorICAgICAgICAgICAga2V5X3NvdXJjZSA9IHNlbGYua2V5X2lkWzo0XQorICAgICAgICAgICAgZm9ybWF0ID0gIj5JIiBpZiBzZWxmLl9iaWdfZW5kaWFuIGVsc2UgIjxJIgorICAgICAgICBlbGlmIHNlbGYua2V5X2lkX21vZGUgPT0gMzoKKyAgICAgICAgICAgIGtleV9zb3VyY2UgPSBzZWxmLmtleV9pZFs6OF0KKyAgICAgICAgICAgIGZvcm1hdCA9ICI+USIgaWYgc2VsZi5fYmlnX2VuZGlhbiBlbHNlICI8USIKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgS2V5IEluZGV4IE1vZGU6IHt9Ii5mb3JtYXQoc2VsZi5rZXlfaWRfbW9kZSkpCisKKyAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soZm9ybWF0LCBrZXlfc291cmNlKVswXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGtleV9pbmRleChzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soIj5CIiwgc2VsZi5rZXlfaWRbLTE6XSlbMF0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBrZXlfaWRfbW9kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2tleV9pZF9tb2RlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2VjdXJpdHlfbGV2ZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZWN1cml0eV9sZXZlbAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZyYW1lX2NvdW50ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9mcmFtZV9jb3VudGVyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYga2V5X2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fa2V5X2lkCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQXV4aWxpYXJ5U2VjdXJpdHlIZWFkZXIoa2V5X2lkX21vZGU9e30sIHNlY3VyaXR5X2xldmVsPXt9LCBmcmFtZV9jb3VudGVyPXt9LCBrZXlfaWQ9e30pIi5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLmtleV9pZF9tb2RlLCBzZWxmLnNlY3VyaXR5X2xldmVsLCBzZWxmLmZyYW1lX2NvdW50ZXIsIGhleGxpZnkoc2VsZi5rZXlfaWQpKQorCisKK2NsYXNzIEF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyRmFjdG9yeToKKworICAgIF9TRUNVUklUWV9DT05UUk9MX0xFTkdUSCA9IDEKKyAgICBfRlJBTUVfQ09VTlRFUl9MRU5HVEggPSA0CisKKyAgICBfS0VZX0lEX0xFTkdUSF9LRVlfSURfMCA9IDAKKyAgICBfS0VZX0lEX0xFTkdUSF9LRVlfSURfMSA9IDEKKyAgICBfS0VZX0lEX0xFTkdUSF9LRVlfSURfMiA9IDUKKyAgICBfS0VZX0lEX0xFTkdUSF9LRVlfSURfMyA9IDkKKworICAgIF9rZXlfaWRfbGVuZ3RocyA9IHsKKyAgICAgICAgMDogX0tFWV9JRF9MRU5HVEhfS0VZX0lEXzAsCisgICAgICAgIDE6IF9LRVlfSURfTEVOR1RIX0tFWV9JRF8xLAorICAgICAgICAyOiBfS0VZX0lEX0xFTkdUSF9LRVlfSURfMiwKKyAgICAgICAgMzogX0tFWV9JRF9MRU5HVEhfS0VZX0lEXzMKKyAgICB9CisKKyAgICBkZWYgX3BhcnNlX3NlY3VyaXR5X2NvbnRyb2woc2VsZiwgc2VjdXJpdHlfY29udHJvbF9ieXRlKToKKyAgICAgICAgc2VjdXJpdHlfbGV2ZWwgPSAoc2VjdXJpdHlfY29udHJvbF9ieXRlICYgMHgwNykKKyAgICAgICAga2V5X2lkX21vZGUgPSAoc2VjdXJpdHlfY29udHJvbF9ieXRlID4+IDMpICYgMHgwMworCisgICAgICAgIHJldHVybiBzZWN1cml0eV9sZXZlbCwga2V5X2lkX21vZGUKKworICAgIGRlZiBfcGFyc2VfZnJhbWVfY291bnRlcihzZWxmLCBmcmFtZV9jb3VudGVyX2J5dGVzKToKKyAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soIjxJIiwgZnJhbWVfY291bnRlcl9ieXRlcylbMF0KKworICAgIGRlZiBfa2V5X2lkX2xlbmd0aChzZWxmLCBrZXlfaWRfbW9kZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9rZXlfaWRfbGVuZ3Roc1trZXlfaWRfbW9kZV0KKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBzZWN1cml0eV9jb250cm9sX2J5dGVzID0gYnl0ZWFycmF5KGRhdGEucmVhZChzZWxmLl9TRUNVUklUWV9DT05UUk9MX0xFTkdUSCkpCisgICAgICAgIGZyYW1lX2NvdW50ZXJfYnl0ZXMgPSBieXRlYXJyYXkoZGF0YS5yZWFkKHNlbGYuX0ZSQU1FX0NPVU5URVJfTEVOR1RIKSkKKworICAgICAgICBzZWN1cml0eV9sZXZlbCwga2V5X2lkX21vZGUgPSBzZWxmLl9wYXJzZV9zZWN1cml0eV9jb250cm9sKHNlY3VyaXR5X2NvbnRyb2xfYnl0ZXNbMF0pCisgICAgICAgIGZyYW1lX2NvdW50ZXIgPSBzZWxmLl9wYXJzZV9mcmFtZV9jb3VudGVyKGZyYW1lX2NvdW50ZXJfYnl0ZXMpCisKKyAgICAgICAga2V5X2lkX2xlbmd0aCA9IHNlbGYuX2tleV9pZF9sZW5ndGgoa2V5X2lkX21vZGUpCisgICAgICAgIGtleV9pZF9ieXRlcyA9IGJ5dGVhcnJheShkYXRhLnJlYWQoa2V5X2lkX2xlbmd0aCkpCisKKyAgICAgICAgYXV4X3NlY19oZHIgPSBBdXhpbGlhcnlTZWN1cml0eUhlYWRlcihrZXlfaWRfbW9kZSwgc2VjdXJpdHlfbGV2ZWwsIGZyYW1lX2NvdW50ZXIsIGtleV9pZF9ieXRlcykKKworICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHJfYnl0ZXMgPSBzZWN1cml0eV9jb250cm9sX2J5dGVzICsgZnJhbWVfY291bnRlcl9ieXRlcyArIGtleV9pZF9ieXRlcworICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIgPSBhdXhfc2VjX2hkcgorCisgICAgICAgIHJldHVybiBhdXhfc2VjX2hkcgpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9uZXR3b3JrX2RhdGEucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25ldHdvcmtfZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjA3N2MxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9uZXR3b3JrX2RhdGEucHkKQEAgLTAsMCArMSw2NTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgaW8KK2ltcG9ydCBtYXRoCitpbXBvcnQgc3RydWN0CisKK2Zyb20gYmluYXNjaWkgaW1wb3J0IGhleGxpZnkKK2Zyb20gZW51bSBpbXBvcnQgSW50RW51bQorCitpbXBvcnQgY29tbW9uCisKKworY2xhc3MgVGx2VHlwZShJbnRFbnVtKToKKyAgICBIQVNfUk9VVEUgPSAwCisgICAgUFJFRklYID0gMQorICAgIEJPUkRFUl9ST1VURVIgPSAyCisgICAgTE9XUEFOX0lEID0gMworICAgIENPTU1JU1NJT05JTkcgPSA0CisgICAgU0VSVklDRSA9IDUKKyAgICBTRVJWRVIgPSA2CisKKworY2xhc3MgTWVzaGNvcFRsdlR5cGUoSW50RW51bSk6CisgICAgU1RFRVJJTkdfREFUQSA9IDgKKyAgICBCT1JERVJfQUdFTlRfTE9DQVRPUiA9IDkKKyAgICBDT01NSVNTSU9ORVJfU0VTU0lPTl9JRCA9IDExCisgICAgQ09NTUlTU0lPTkVSX1VEUF9QT1JUID0gMTUKKworCitjbGFzcyBOZXR3b3JrRGF0YShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YWJsZSk6CisgICAgICAgIHNlbGYuX3N0YWJsZSA9IHN0YWJsZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN0YWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0YWJsZQorCisKK2NsYXNzIFN1YlRsdnNGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3ViX3RsdnNfZmFjdG9yaWVzKToKKyAgICAgICAgc2VsZi5fc3ViX3RsdnNfZmFjdG9yaWVzID0gc3ViX3RsdnNfZmFjdG9yaWVzCisKKyAgICBkZWYgX2dldF9mYWN0b3J5KHNlbGYsIF90eXBlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N1Yl90bHZzX2ZhY3Rvcmllc1tfdHlwZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgZmluZCBmYWN0b3J5LiBGYWN0b3J5IHR5cGUgPSB7fS4iLmZvcm1hdChfdHlwZSkpCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgc3ViX3RsdnMgPSBbXQorCisgICAgICAgIHdoaWxlIGRhdGEudGVsbCgpIDwgbGVuKGRhdGEuZ2V0dmFsdWUoKSk6CisgICAgICAgICAgICBfdHlwZSA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgICAgIGxlbmd0aCA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgICAgICB2YWx1ZSA9IGRhdGEucmVhZChsZW5ndGgpCisKKyAgICAgICAgICAgIGZhY3RvcnkgPSBzZWxmLl9nZXRfZmFjdG9yeShfdHlwZSkKKworICAgICAgICAgICAgbWVzc2FnZV9pbmZvLmxlbmd0aCA9IGxlbmd0aAorICAgICAgICAgICAgdGx2ID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKHZhbHVlKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICAgICBzdWJfdGx2cy5hcHBlbmQodGx2KQorCisgICAgICAgIHJldHVybiBzdWJfdGx2cworCisKK2NsYXNzIE5ldHdvcmtEYXRhU3ViVGx2c0ZhY3RvcnkoU3ViVGx2c0ZhY3RvcnkpOgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHN1Yl90bHZzID0gW10KKworICAgICAgICB3aGlsZSBkYXRhLnRlbGwoKSA8IGxlbihkYXRhLmdldHZhbHVlKCkpOgorICAgICAgICAgICAgZGF0YV9ieXRlID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICAgICAgc3RhYmxlID0gZGF0YV9ieXRlICYgMHgwMQorICAgICAgICAgICAgX3R5cGUgPSAoZGF0YV9ieXRlID4+IDEpICYgMHg3ZgorCisgICAgICAgICAgICBsZW5ndGggPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICAgICAgdmFsdWUgPSBkYXRhLnJlYWQobGVuZ3RoKQorCisgICAgICAgICAgICBmYWN0b3J5ID0gc2VsZi5fZ2V0X2ZhY3RvcnkoX3R5cGUpCisKKyAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5zdGFibGUgPSBzdGFibGUKKyAgICAgICAgICAgIHRsdiA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyh2YWx1ZSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAgICAgc3ViX3RsdnMuYXBwZW5kKHRsdikKKworICAgICAgICByZXR1cm4gc3ViX3RsdnMKKworCitjbGFzcyBSb3V0ZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJvcmRlcl9yb3V0ZXJfMTYsIHByZik6CisgICAgICAgIHNlbGYuX2JvcmRlcl9yb3V0ZXJfMTYgPSBib3JkZXJfcm91dGVyXzE2CisgICAgICAgIHNlbGYuX3ByZiA9IHByZgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGJvcmRlcl9yb3V0ZXJfMTYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9ib3JkZXJfcm91dGVyXzE2CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJmKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJmCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5ib3JkZXJfcm91dGVyXzE2ID09IG90aGVyLmJvcmRlcl9yb3V0ZXJfMTYgYW5kIHNlbGYucHJmID09IG90aGVyLnByZgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlJvdXRlKGJvcmRlcl9yb3V0ZXJfMTY9e30sIHByZj17fSkiLmZvcm1hdChzZWxmLmJvcmRlcl9yb3V0ZXJfMTYsIHNlbGYucHJmKQorCisKK2NsYXNzIFJvdXRlRmFjdG9yeShvYmplY3QpOgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGJvcmRlcl9yb3V0ZXJfMTYgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKworICAgICAgICBkYXRhX2J5dGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBwcmYgPSAoZGF0YV9ieXRlID4+IDYpICYgMHgwMworCisgICAgICAgIHJldHVybiBSb3V0ZShib3JkZXJfcm91dGVyXzE2LCBwcmYpCisKKworY2xhc3MgUm91dGVzRmFjdG9yeShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlX2ZhY3RvcnkpOgorICAgICAgICBzZWxmLl9yb3V0ZV9mYWN0b3J5ID0gcm91dGVfZmFjdG9yeQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHJvdXRlcyA9IFtdCisKKyAgICAgICAgd2hpbGUgZGF0YS50ZWxsKCkgPCBsZW4oZGF0YS5nZXR2YWx1ZSgpKToKKyAgICAgICAgICAgIHJvdXRlID0gc2VsZi5fcm91dGVfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgICAgIHJvdXRlcy5hcHBlbmQocm91dGUpCisKKyAgICAgICAgcmV0dXJuIHJvdXRlcworCisKK2NsYXNzIEhhc1JvdXRlKE5ldHdvcmtEYXRhKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb3V0ZXMsIHN0YWJsZSk6CisgICAgICAgIHN1cGVyKEhhc1JvdXRlLCBzZWxmKS5fX2luaXRfXyhzdGFibGUpCisgICAgICAgIHNlbGYuX3JvdXRlcyA9IHJvdXRlcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJvdXRlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JvdXRlcworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucm91dGVzID09IG90aGVyLnJvdXRlcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByb3V0ZXNfc3RyID0gIiwgIi5qb2luKFsie30iLmZvcm1hdChyb3V0ZSkgZm9yIHJvdXRlIGluIHNlbGYucm91dGVzXSkKKyAgICAgICAgcmV0dXJuICJIYXNSb3V0ZShzdGFibGU9e30sIHJvdXRlcz1be31dKSIuZm9ybWF0KHNlbGYuc3RhYmxlLCByb3V0ZXNfc3RyKQorCisKK2NsYXNzIEhhc1JvdXRlRmFjdG9yeShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlc19mYWN0b3J5KToKKyAgICAgICAgc2VsZi5fcm91dGVzX2ZhY3RvcnkgPSByb3V0ZXNfZmFjdG9yeQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHJvdXRlcyA9IHNlbGYuX3JvdXRlc19mYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICByZXR1cm4gSGFzUm91dGUocm91dGVzLCBtZXNzYWdlX2luZm8uc3RhYmxlKQorCisKK2NsYXNzIFByZWZpeChOZXR3b3JrRGF0YSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZG9tYWluX2lkLCBwcmVmaXhfbGVuZ3RoLCBwcmVmaXgsIHN1Yl90bHZzLCBzdGFibGUpOgorICAgICAgICBzdXBlcihQcmVmaXgsIHNlbGYpLl9faW5pdF9fKHN0YWJsZSkKKyAgICAgICAgc2VsZi5fZG9tYWluX2lkID0gZG9tYWluX2lkCisgICAgICAgIHNlbGYuX3ByZWZpeF9sZW5ndGggPSBwcmVmaXhfbGVuZ3RoCisgICAgICAgIHNlbGYuX3ByZWZpeCA9IHByZWZpeAorICAgICAgICBzZWxmLl9zdWJfdGx2cyA9IHN1Yl90bHZzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZG9tYWluX2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9tYWluX2lkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJlZml4X2xlbmd0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ByZWZpeF9sZW5ndGgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmVmaXgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcmVmaXgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdWJfdGx2cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N1Yl90bHZzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5kb21haW5faWQgPT0gb3RoZXIuZG9tYWluX2lkIGFuZCBcCisgICAgICAgICAgICBzZWxmLnByZWZpeF9sZW5ndGggPT0gb3RoZXIucHJlZml4X2xlbmd0aCBhbmQgXAorICAgICAgICAgICAgc2VsZi5wcmVmaXggPT0gb3RoZXIucHJlZml4IGFuZCBcCisgICAgICAgICAgICBzZWxmLnN1Yl90bHZzID09IG90aGVyLnN1Yl90bHZzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHN1Yl90bHZzX3N0ciA9ICIsICIuam9pbihbInt9Ii5mb3JtYXQodGx2KSBmb3IgdGx2IGluIHNlbGYuc3ViX3RsdnNdKQorICAgICAgICByZXR1cm4gIlByZWZpeChzdGFibGU9e30sIGRvbWFpbl9pZD17fSwgcHJlZml4X2xlbmd0aD17fSwgcHJlZml4PXt9LCBzdWJfdGx2cz1be31dKSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5zdGFibGUsIHNlbGYuZG9tYWluX2lkLCBzZWxmLnByZWZpeF9sZW5ndGgsIGhleGxpZnkoc2VsZi5wcmVmaXgpLCBzdWJfdGx2c19zdHIpCisKKworY2xhc3MgUHJlZml4U3ViVGx2c0ZhY3RvcnkoTmV0d29ya0RhdGFTdWJUbHZzRmFjdG9yeSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3ViX3RsdnNfZmFjdG9yaWVzKToKKyAgICAgICAgc3VwZXIoUHJlZml4U3ViVGx2c0ZhY3RvcnksIHNlbGYpLl9faW5pdF9fKHN1Yl90bHZzX2ZhY3RvcmllcykKKworCitjbGFzcyBQcmVmaXhGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3ViX3RsdnNfZmFjdG9yeSk6CisgICAgICAgIHNlbGYuX3N1Yl90bHZzX2ZhY3RvcnkgPSBzdWJfdGx2c19mYWN0b3J5CisKKyAgICBkZWYgX2JpdHNfdG9fYnl0ZXMoc2VsZiwgYml0cyk6CisgICAgICAgIHJldHVybiBpbnQobWF0aC5jZWlsKGJpdHMgLyA4KSkKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBkb21haW5faWQgPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIHByZWZpeF9sZW5ndGggPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIHByZWZpeCA9IGJ5dGVhcnJheShkYXRhLnJlYWQoc2VsZi5fYml0c190b19ieXRlcyhwcmVmaXhfbGVuZ3RoKSkpCisKKyAgICAgICAgc3ViX3RsdnMgPSBzZWxmLl9zdWJfdGx2c19mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YS5yZWFkKCkpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgcmV0dXJuIFByZWZpeChkb21haW5faWQsIHByZWZpeF9sZW5ndGgsIHByZWZpeCwgc3ViX3RsdnMsIG1lc3NhZ2VfaW5mby5zdGFibGUpCisKKworY2xhc3MgQm9yZGVyUm91dGVyKE5ldHdvcmtEYXRhKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBib3JkZXJfcm91dGVyXzE2LCBwcmYsIHAsIHMsIGQsIGMsIHIsIG8sIG4sIHN0YWJsZSk6CisgICAgICAgIHN1cGVyKEJvcmRlclJvdXRlciwgc2VsZikuX19pbml0X18oc3RhYmxlKQorICAgICAgICBzZWxmLl9ib3JkZXJfcm91dGVyXzE2ID0gYm9yZGVyX3JvdXRlcl8xNgorICAgICAgICBzZWxmLl9wcmYgPSBwcmYKKyAgICAgICAgc2VsZi5fcCA9IHAKKyAgICAgICAgc2VsZi5fcyA9IHMKKyAgICAgICAgc2VsZi5fZCA9IGQKKyAgICAgICAgc2VsZi5fYyA9IGMKKyAgICAgICAgc2VsZi5fciA9IHIKKyAgICAgICAgc2VsZi5fbyA9IG8KKyAgICAgICAgc2VsZi5fbiA9IG4KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBib3JkZXJfcm91dGVyXzE2KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYm9yZGVyX3JvdXRlcl8xNgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ByZgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3IKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBvKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbworCisgICAgQHByb3BlcnR5CisgICAgZGVmIG4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gIHNlbGYuYm9yZGVyX3JvdXRlcl8xNiA9PSBvdGhlci5ib3JkZXJfcm91dGVyXzE2IGFuZCBcCisgICAgICAgICAgICBzZWxmLnByZiA9PSBvdGhlci5wcmYgYW5kIFwKKyAgICAgICAgICAgIHNlbGYucCA9PSBvdGhlci5wIGFuZCBcCisgICAgICAgICAgICBzZWxmLnMgPT0gb3RoZXIucyBhbmQgXAorICAgICAgICAgICAgc2VsZi5kID09IG90aGVyLmQgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuYyA9PSBvdGhlci5jIGFuZCBcCisgICAgICAgICAgICBzZWxmLnIgPT0gb3RoZXIuciBhbmQgXAorICAgICAgICAgICAgc2VsZi5vID09IG90aGVyLm8gYW5kIFwKKyAgICAgICAgICAgIHNlbGYubiA9PSBvdGhlci5uCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQm9yZGVyUm91dGVyKHN0YWJsZT17fSwgYm9yZGVyX3JvdXRlcl8xNj17fSwgcHJmPXt9LCBwPXt9LCBzPXt9LCBkPXt9LCBjPXt9LCByPXt9LCBvPXt9LCBuPXt9KSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5zdGFibGUsIHNlbGYuYm9yZGVyX3JvdXRlcl8xNiwgc2VsZi5wcmYsIHNlbGYucCwgc2VsZi5zLCBzZWxmLmQsIHNlbGYuYywgc2VsZi5yLCBzZWxmLm8sIHNlbGYubikKKworCitjbGFzcyBCb3JkZXJSb3V0ZXJGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgYm9yZGVyX3JvdXRlcl8xNiA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorCisgICAgICAgIGRhdGFfYnl0ZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIG8gPSAoZGF0YV9ieXRlICYgMHgwMSkKKyAgICAgICAgciA9IChkYXRhX2J5dGUgPj4gMSkgJiAweDAxCisgICAgICAgIGMgPSAoZGF0YV9ieXRlID4+IDIpICYgMHgwMQorICAgICAgICBkID0gKGRhdGFfYnl0ZSA+PiAzKSAmIDB4MDEKKyAgICAgICAgcyA9IChkYXRhX2J5dGUgPj4gNCkgJiAweDAxCisgICAgICAgIHAgPSAoZGF0YV9ieXRlID4+IDUpICYgMHgwMQorICAgICAgICBwcmYgPSAoZGF0YV9ieXRlID4+IDYpICYgMHgwMworCisgICAgICAgIGRhdGFfYnl0ZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIG4gPSAoZGF0YV9ieXRlID4+IDcpICYgMHgwMQorCisgICAgICAgIHJldHVybiBCb3JkZXJSb3V0ZXIoYm9yZGVyX3JvdXRlcl8xNiwgcHJmLCBwLCBzLCBkLCBjLCByLCBvLCBuLCBtZXNzYWdlX2luZm8uc3RhYmxlKQorCisKK2NsYXNzIExvd3BhbklkKE5ldHdvcmtEYXRhKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjLCBjaWQsIGNvbnRleHRfbGVuZ3RoLCBzdGFibGUpOgorICAgICAgICBzdXBlcihMb3dwYW5JZCwgc2VsZikuX19pbml0X18oc3RhYmxlKQorICAgICAgICBzZWxmLl9jID0gYworICAgICAgICBzZWxmLl9jaWQgPSBjaWQKKyAgICAgICAgc2VsZi5fY29udGV4dF9sZW5ndGggPSBjb250ZXh0X2xlbmd0aAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2lkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29udGV4dF9sZW5ndGgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb250ZXh0X2xlbmd0aAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuICBzZWxmLmMgPT0gb3RoZXIuYyBhbmQgXAorICAgICAgICAgICAgc2VsZi5jaWQgPT0gb3RoZXIuY2lkIGFuZCBcCisgICAgICAgICAgICBzZWxmLmNvbnRleHRfbGVuZ3RoID09IG90aGVyLmNvbnRleHRfbGVuZ3RoCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTG93cGFuSWQoc3RhYmxlPXt9LCBjPXt9LCBjaWQ9e30sIGNvbnRleHRfbGVuZ3RoPXt9KSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5zdGFibGUsIHNlbGYuYywgc2VsZi5jaWQsIHNlbGYuY29udGV4dF9sZW5ndGgpCisKKworY2xhc3MgTG93cGFuSWRGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgZGF0YV9ieXRlID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBjaWQgPSAoZGF0YV9ieXRlICYgMHgwZikKKyAgICAgICAgYyA9IChkYXRhX2J5dGUgPj4gNCkgJiAweDAxCisKKyAgICAgICAgY29udGV4dF9sZW5ndGggPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIHJldHVybiBMb3dwYW5JZChjLCBjaWQsIGNvbnRleHRfbGVuZ3RoLCBtZXNzYWdlX2luZm8uc3RhYmxlKQorCisKK2NsYXNzIENvbW1pc3Npb25pbmdEYXRhKE5ldHdvcmtEYXRhKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJfdGx2cywgc3RhYmxlKToKKyAgICAgICAgc3VwZXIoQ29tbWlzc2lvbmluZ0RhdGEsIHNlbGYpLl9faW5pdF9fKHN0YWJsZSkKKyAgICAgICAgc2VsZi5fc3ViX3RsdnMgPSBzdWJfdGx2cworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN1Yl90bHZzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3ViX3RsdnMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiAgc2VsZi5zdWJfdGx2cyA9PSBvdGhlci5zdWJfdGx2cworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBzdWJfdGx2c19zdHIgPSAiLCAiLmZvcm1hdChbInt9Ii5mb3JtYXQodGx2KSBmb3IgdGx2IGluIHNlbGYuX3N1Yl90bHZzXSkKKyAgICAgICAgcmV0dXJuICJDb21taXNzaW9uaW5nRGF0YShzdGFibGU9e30sIHN1Yl90bHZzPVt7fV0pIi5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLl9zdGFibGUsIHN1Yl90bHZzX3N0cikKKworCitjbGFzcyBDb21taXNzaW9uaW5nRGF0YVN1YlRsdnNGYWN0b3J5KFN1YlRsdnNGYWN0b3J5KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJfdGx2c19mYWN0b3JpZXMpOgorICAgICAgICBzdXBlcihDb21taXNzaW9uaW5nRGF0YVN1YlRsdnNGYWN0b3J5LCBzZWxmKS5fX2luaXRfXyhzdWJfdGx2c19mYWN0b3JpZXMpCisKKworY2xhc3MgQ29tbWlzc2lvbmluZ0RhdGFGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3ViX3RsdnNfZmFjdG9yeSk6CisgICAgICAgIHNlbGYuX3N1Yl90bHZzX2ZhY3RvcnkgPSBzdWJfdGx2c19mYWN0b3J5CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgc3ViX3RsdnMgPSBzZWxmLl9zdWJfdGx2c19mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YS5yZWFkKCkpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgcmV0dXJuIENvbW1pc3Npb25pbmdEYXRhKHN1Yl90bHZzLCBtZXNzYWdlX2luZm8uc3RhYmxlKQorCisKK2NsYXNzIFN0ZWVyaW5nRGF0YShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJsb29tX2ZpbHRlcik6CisgICAgICAgIHNlbGYuX2Jsb29tX2ZpbHRlciA9IGJsb29tX2ZpbHRlcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGJsb29tX2ZpbHRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Jsb29tX2ZpbHRlcgorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Jsb29tX2ZpbHRlciA9PSBvdGhlci5fYmxvb21fZmlsdGVyCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiU3RlZXJpbmdEYXRhKGJsb29tX2ZpbHRlcj17fSkiLmZvcm1hdChoZXhsaWZ5KHNlbGYuX2Jsb29tX2ZpbHRlcikpCisKKworY2xhc3MgU3RlZXJpbmdEYXRhRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBibG9vbV9maWx0ZXIgPSBkYXRhLnJlYWQobWVzc2FnZV9pbmZvLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0ZWVyaW5nRGF0YShibG9vbV9maWx0ZXIpCisKKworY2xhc3MgQm9yZGVyQWdlbnRMb2NhdG9yKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX3VkcF9wb3J0ID0gYWRkcmVzcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHVkcF9wb3J0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdWRwX3BvcnQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLl91ZHBfcG9ydCA9PSBvdGhlci5fdWRwX3BvcnQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJCb3JkZXJBZ2VudExvY2F0b3IocmxvYzE2PXt9KSIuZm9ybWF0KGhleChzZWxmLl91ZHBfcG9ydCkpCisKKworY2xhc3MgQm9yZGVyQWdlbnRMb2NhdG9yRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBib3JkZXJfYWdlbnRfbG9jYXRvciA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICByZXR1cm4gQm9yZGVyQWdlbnRMb2NhdG9yKGJvcmRlcl9hZ2VudF9sb2NhdG9yKQorCisKK2NsYXNzIENvbW1pc3Npb25lclNlc3Npb25JZChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1pc3Npb25lcl9zZXNzaW9uX2lkKToKKyAgICAgICAgc2VsZi5fdWRwX3BvcnQgPSBjb21taXNzaW9uZXJfc2Vzc2lvbl9pZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHVkcF9wb3J0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdWRwX3BvcnQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLl91ZHBfcG9ydCA9PSBvdGhlci5fdWRwX3BvcnQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDb21taXNzaW9uZXJTZXNzaW9uSWQoaWQ9e30pIi5mb3JtYXQoaGV4KHNlbGYuX3VkcF9wb3J0KSkKKworCitjbGFzcyBDb21taXNzaW9uZXJTZXNzaW9uSWRGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHNlc3Npb25faWQgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgcmV0dXJuIENvbW1pc3Npb25lclNlc3Npb25JZChzZXNzaW9uX2lkKQorCisKK2NsYXNzIENvbW1pc3Npb25lclVkcFBvcnQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1ZHBfcG9ydCk6CisgICAgICAgIHNlbGYuX3VkcF9wb3J0ID0gdWRwX3BvcnQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB1ZHBfcG9ydChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3VkcF9wb3J0CisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5fdWRwX3BvcnQgPT0gb3RoZXIuX3VkcF9wb3J0CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQ29tbWlzc2lvbmVyVWRwUG9ydCh1ZHBfcG9ydD17fSkiLmZvcm1hdChzZWxmLl91ZHBfcG9ydCkKKworCitjbGFzcyBDb21taXNzaW9uZXJVZHBQb3J0RmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICB1ZHBfcG9ydCA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICByZXR1cm4gQ29tbWlzc2lvbmVyVWRwUG9ydCh1ZHBfcG9ydCkKKworCitjbGFzcyBTZXJ2aWNlKE5ldHdvcmtEYXRhKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0LCBfaWQsIGVudGVycHJpc2VfbnVtYmVyLCBzZXJ2aWNlX2RhdGFfbGVuZ3RoLCBzZXJ2aWNlX2RhdGEsIHN1Yl90bHZzLCBzdGFibGUpOgorICAgICAgICBzdXBlcihTZXJ2aWNlLCBzZWxmKS5fX2luaXRfXyhzdGFibGUpCisgICAgICAgIHNlbGYuX3QgPSB0CisgICAgICAgIHNlbGYuX2lkID0gX2lkCisgICAgICAgIHNlbGYuX2VudGVycHJpc2VfbnVtYmVyID0gZW50ZXJwcmlzZV9udW1iZXIKKyAgICAgICAgc2VsZi5fc2VydmljZV9kYXRhX2xlbmd0aCA9IHNlcnZpY2VfZGF0YV9sZW5ndGgKKyAgICAgICAgc2VsZi5fc2VydmljZV9kYXRhID0gc2VydmljZV9kYXRhCisgICAgICAgIHNlbGYuX3N1Yl90bHZzID0gc3ViX3RsdnMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBlbnRlcnByaXNlX251bWJlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2VudGVycHJpc2VfbnVtYmVyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2VydmljZV9kYXRhX2xlbmd0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlcnZpY2VfZGF0YV9sZW5ndGgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzZXJ2aWNlX2RhdGEoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZXJ2aWNlX2RhdGEKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdWJfdGx2cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N1Yl90bHZzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gIHNlbGYudCA9PSBvdGhlci50IGFuZCBcCisgICAgICAgICAgICBzZWxmLmlkID09IG90aGVyLmlkIGFuZCBcCisgICAgICAgICAgICBzZWxmLmVudGVycHJpc2VfbnVtYmVyID09IG90aGVyLmVudGVycHJpc2VfbnVtYmVyIGFuZCBcCisgICAgICAgICAgICBzZWxmLnNlcnZpY2VfZGF0YV9sZW5ndGggPT0gb3RoZXIuc2VydmljZV9kYXRhX2xlbmd0aCBhbmQgXAorICAgICAgICAgICAgc2VsZi5zZXJ2aWNlX2RhdGEgPT0gb3RoZXIuc2VydmljZV9kYXRhIGFuZCBcCisgICAgICAgICAgICBzZWxmLnN1Yl90bHZzID09IG90aGVyLnN1Yl90bHZzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHN1Yl90bHZzX3N0ciA9ICIsICIuZm9ybWF0KFsie30iLmZvcm1hdCh0bHYpIGZvciB0bHYgaW4gc2VsZi5zdWJfdGx2c10pCisgICAgICAgIHJldHVybiAiTG93cGFuSWQoc3RhYmxlPXt9LCB0PXt9LCBpZD17fSwgZW50ZXJwcmlzZV9udW1iZXI9e30sIHNlcnZpY2VfZGF0YV9sZW5ndGg9e30sIHNlcnZpY2VfZGF0YT17fSwgc3ViX3RsdnM9W3t9XSkiLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuc3RhYmxlLCBzZWxmLnQsIHNlbGYuaWQsIHNlbGYuZW50ZXJwcmlzZV9udW1iZXIsIHNlbGYuc2VydmljZV9kYXRhX2xlbmd0aCwgc2VsZi5zZXJ2aWNlX2RhdGEsIHN1Yl90bHZzX3N0cikKKworCitjbGFzcyBTZXJ2aWNlU3ViVGx2c0ZhY3RvcnkoTmV0d29ya0RhdGFTdWJUbHZzRmFjdG9yeSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3ViX3RsdnNfZmFjdG9yaWVzKToKKyAgICAgICAgc3VwZXIoU2VydmljZVN1YlRsdnNGYWN0b3J5LCBzZWxmKS5fX2luaXRfXyhzdWJfdGx2c19mYWN0b3JpZXMpCisKKworY2xhc3MgU2VydmljZUZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJfdGx2c19mYWN0b3J5KToKKyAgICAgICAgc2VsZi5fc3ViX3RsdnNfZmFjdG9yeSA9IHN1Yl90bHZzX2ZhY3RvcnkKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBkYXRhX2J5dGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICB0ID0gKGRhdGFfYnl0ZSA+PiA3KSAmIDB4MDEKKyAgICAgICAgX2lkID0gKGRhdGFfYnl0ZSAmIDB4MGYpCisKKyAgICAgICAgZW50ZXJwcmlzZV9udW1iZXIgPSBzdHJ1Y3QudW5wYWNrKCI+TCIsIGRhdGEucmVhZCg0KSlbMF0KKyAgICAgICAgc2VydmljZV9kYXRhX2xlbmd0aCA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIHNlcnZpY2VfZGF0YSA9IGRhdGEucmVhZChzZXJ2aWNlX2RhdGFfbGVuZ3RoKQorCisgICAgICAgIHN1Yl90bHZzID0gc2VsZi5fc3ViX3RsdnNfZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEucmVhZCgpKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIHJldHVybiBTZXJ2aWNlKHQsIF9pZCwgZW50ZXJwcmlzZV9udW1iZXIsIHNlcnZpY2VfZGF0YV9sZW5ndGgsIHNlcnZpY2VfZGF0YSwgc3ViX3RsdnMsIG1lc3NhZ2VfaW5mby5zdGFibGUpCisKKworY2xhc3MgU2VydmVyKE5ldHdvcmtEYXRhKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJfMTYsIHNlcnZlcl9kYXRhLCBzdGFibGUpOgorICAgICAgICBzdXBlcihTZXJ2ZXIsIHNlbGYpLl9faW5pdF9fKHN0YWJsZSkKKyAgICAgICAgc2VsZi5fc2VydmVyXzE2ID0gc2VydmVyXzE2CisgICAgICAgIHNlbGYuX3NlcnZlcl9kYXRhID0gc2VydmVyX2RhdGEKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzZXJ2ZXJfMTYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZXJ2ZXJfMTYKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzZXJ2ZXJfZGF0YShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlcnZlcl9kYXRhCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXJfMTYgPT0gb3RoZXIuc2VydmVyXzE2IGFuZCBcCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9kYXRhID09IG90aGVyLnNlcnZlcl9kYXRhCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTG93cGFuSWQoc3RhYmxlPXt9LCBzZXJ2ZXJfMTY9e30sIHNlcnZlcl9kYXRhPWIne30nKSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5zdGFibGUsIHNlbGYuc2VydmVyXzE2LCBoZXhsaWZ5KHNlbGYuc2VydmVyX2RhdGEpKQorCisKK2NsYXNzIFNlcnZlckZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBzZXJ2ZXJfMTYgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgc2VydmVyX2RhdGEgPSBieXRlYXJyYXkoZGF0YS5yZWFkKCkpCisKKyAgICAgICAgcmV0dXJuIFNlcnZlcihzZXJ2ZXJfMTYsIHNlcnZlcl9kYXRhLCBtZXNzYWdlX2luZm8uc3RhYmxlKQorCisKK2NsYXNzIE5ldHdvcmtEYXRhVGx2c0ZhY3RvcnkoTmV0d29ya0RhdGFTdWJUbHZzRmFjdG9yeSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3ViX3RsdnNfZmFjdG9yaWVzKToKKyAgICAgICAgc3VwZXIoTmV0d29ya0RhdGFUbHZzRmFjdG9yeSwgc2VsZikuX19pbml0X18oc3ViX3RsdnNfZmFjdG9yaWVzKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9uZXR3b3JrX2xheWVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9uZXR3b3JrX2xheWVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZWI2MzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25ldHdvcmtfbGF5ZXIucHkKQEAgLTAsMCArMSwzMjIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgaW8KK2ltcG9ydCBzdHJ1Y3QKKworZnJvbSBiaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQorZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtCisKK2ltcG9ydCBjb21tb24KKworCitjbGFzcyBUbHZUeXBlKEludEVudW0pOgorICAgIFRBUkdFVF9FSUQgPSAwCisgICAgTUFDX0VYVEVOREVEX0FERFJFU1MgPSAxCisgICAgUkxPQzE2ID0gMgorICAgIE1MX0VJRCA9IDMKKyAgICBTVEFUVVMgPSA0CisgICAgVElNRV9TSU5DRV9MQVNUX1RSQU5TQUNUSU9OID0gNgorICAgIFJPVVRFUl9NQVNLID0gNworICAgIE5EX09QVElPTiA9IDgKKyAgICBORF9EQVRBID0gOQorICAgIFRIUkVBRF9ORVRXT1JLX0RBVEEgPSAxMAorICAgIE1MRV9ST1VUSU5HID0gMTEKKworCitjbGFzcyBTdGF0dXNWYWx1ZXMoSW50RW51bSk6CisgICAgU1VDQ0VTUyA9IDAKKyAgICBOT19BRERSRVNTX0FWQUlMQUJMRSA9IDEKKyAgICBUT09fRkVXX1JPVVRFUlMgPSAyCisgICAgSEFWRV9DSElMRF9JRF9SRVFVRVNUID0gMworICAgIFBBUkVOVF9QQVJUSVRJT05fQ0hBTkdFID0gNAorCisKK2NsYXNzIFRhcmdldEVpZChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVpZCk6CisgICAgICAgIHNlbGYuX2VpZCA9IGVpZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2VpZAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLmVpZCA9PSBvdGhlci5laWQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJUYXJnZXRFaWQoZWlkPXt9KSIuZm9ybWF0KGhleGxpZnkoc2VsZi5laWQpKQorCisKK2NsYXNzIFRhcmdldEVpZEZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBlaWQgPSBieXRlYXJyYXkoZGF0YS5yZWFkKDE2KSkKKworICAgICAgICByZXR1cm4gVGFyZ2V0RWlkKGVpZCkKKworCitjbGFzcyBNYWNFeHRlbmRlZEFkZHJlc3Mob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNfYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX21hY19hZGRyZXNzID0gbWFjX2FkZHJlc3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtYWNfYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hY19hZGRyZXNzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYubWFjX2FkZHJlc3MgPT0gb3RoZXIubWFjX2FkZHJlc3MKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJNYWNFeHRlbmRlZEFkZHJlc3MobWFjX2FkZHJlc3M9e30pIi5mb3JtYXQoaGV4bGlmeShzZWxmLm1hY19hZGRyZXNzKSkKKworCitjbGFzcyBNYWNFeHRlbmRlZEFkZHJlc3NGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgbWFjX2FkZHJlc3MgPSBieXRlYXJyYXkoZGF0YS5yZWFkKDgpKQorCisgICAgICAgIHJldHVybiBNYWNFeHRlbmRlZEFkZHJlc3MobWFjX2FkZHJlc3MpCisKKworY2xhc3MgUmxvYzE2KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmxvYzE2KToKKyAgICAgICAgc2VsZi5fcmxvYzE2ID0gcmxvYzE2CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmxvYzE2KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmxvYzE2CisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYucmxvYzE2ID09IG90aGVyLnJsb2MxNgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlJsb2MxNihybG9jMTY9e30pIi5mb3JtYXQoaGV4KHNlbGYucmxvYzE2KSkKKworCitjbGFzcyBSbG9jMTZGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcmxvYzE2ID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisKKyAgICAgICAgcmV0dXJuIFJsb2MxNihybG9jMTYpCisKKworY2xhc3MgTWxFaWQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtbF9laWQpOgorICAgICAgICBzZWxmLl9tbF9laWQgPSBtbF9laWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtbF9laWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tbF9laWQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZi5tbF9laWQgPT0gb3RoZXIubWxfZWlkCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTWxFaWQobWxfZWlkPXt9KSIuZm9ybWF0KGhleGxpZnkoc2VsZi5tbF9laWQpKQorCisKK2NsYXNzIE1sRWlkRmFjdG9yeShvYmplY3QpOgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIG1sX2VpZCA9IGJ5dGVhcnJheShkYXRhLnJlYWQoOCkpCisKKyAgICAgICAgcmV0dXJuIE1sRWlkKG1sX2VpZCkKKworCitjbGFzcyBTdGF0dXMob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0dXMpOgorICAgICAgICBzZWxmLl9zdGF0dXMgPSBzdGF0dXMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdGF0dXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zdGF0dXMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZi5zdGF0dXMgPT0gb3RoZXIuc3RhdHVzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiU3RhdHVzKHN0YXR1cz17fSkiLmZvcm1hdChzZWxmLnN0YXR1cykKKworCitjbGFzcyBTdGF0dXNGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgc3RhdHVzID0gU3RhdHVzVmFsdWVzKG9yZChkYXRhLnJlYWQoMSkpKQorCisgICAgICAgIHJldHVybiBTdGF0dXMoc3RhdHVzKQorCisKK2NsYXNzIFRpbWVTaW5jZUxhc3RUcmFuc2FjdGlvbihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlY29uZHMpOgorICAgICAgICBzZWxmLl9zZWNvbmRzID0gc2Vjb25kcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNlY29uZHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZWNvbmRzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vjb25kcyA9PSBvdGhlci5zZWNvbmRzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiVGltZVNpbmNlTGFzdFRyYW5zYWN0aW9uKHNlY29uZHM9e30pIi5mb3JtYXQoc2VsZi5zZWNvbmRzKQorCisKK2NsYXNzIFRpbWVTaW5jZUxhc3RUcmFuc2FjdGlvbkZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBzZWNvbmRzID0gc3RydWN0LnVucGFjaygiPkwiLCBkYXRhLnJlYWQoNCkpWzBdCisKKyAgICAgICAgcmV0dXJuIFRpbWVTaW5jZUxhc3RUcmFuc2FjdGlvbihzZWNvbmRzKQorCisKK2NsYXNzIFJvdXRlck1hc2sob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpZF9zZXF1ZW5jZSwgcm91dGVyX2lkX21hc2spOgorICAgICAgICBzZWxmLl9pZF9zZXF1ZW5jZSA9IGlkX3NlcXVlbmNlCisgICAgICAgIHNlbGYuX3JvdXRlcl9pZF9tYXNrID0gcm91dGVyX2lkX21hc2sKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpZF9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lkX3NlcXVlbmNlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcm91dGVyX2lkX21hc2soc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yb3V0ZXJfaWRfbWFzaworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLmlkX3NlcXVlbmNlID09IG90aGVyLmlkX3NlcXVlbmNlIGFuZCBzZWxmLnJvdXRlcl9pZF9tYXNrID09IG90aGVyLnJvdXRlcl9pZF9tYXNrCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiUm91dGVyTWFzayhpZF9zZXF1ZW5jZT17fSwgcm91dGVyX2lkX21hc2s9e30pIi5mb3JtYXQoc2VsZi5pZF9zZXF1ZW5jZSwgaGV4KHNlbGYucm91dGVyX2lkX21hc2spKQorCisKK2NsYXNzIFJvdXRlck1hc2tGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgaWRfc2VxdWVuY2UgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICByb3V0ZXJfaWRfbWFzayA9IHN0cnVjdC51bnBhY2soIj5RIiwgZGF0YS5yZWFkKDgpKVswXQorCisgICAgICAgIHJldHVybiBSb3V0ZXJNYXNrKGlkX3NlcXVlbmNlLCByb3V0ZXJfaWRfbWFzaykKKworCitjbGFzcyBOZE9wdGlvbihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworCisgICAgQHByb3BlcnR5CisgICAgZGVmIG9wdGlvbnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9vcHRpb25zCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYub3B0aW9ucyA9PSBvdGhlci5vcHRpb25zCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTmRPcHRpb24ob3B0aW9ucz1be31dKSIuZm9ybWF0KCIsICIuam9pbihbc3RyKG9wdCkgZm9yIG9wdCBpbiBzZWxmLm9wdGlvbnNdKSkKKworCitjbGFzcyBOZE9wdGlvbkZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBvcHRpb25zID0gW29wdCBmb3Igb3B0IGluIGJ5dGVhcnJheShkYXRhLnJlYWQoKSldCisgICAgICAgIHJldHVybiBOZE9wdGlvbihvcHRpb25zKQorCisKK2NsYXNzIE5kRGF0YShvYmplY3QpOgorICAgICMgVE9ETzogTm90IGltcGxlbWVudGVkIHlldAorICAgIHBhc3MKKworCitjbGFzcyBOZERhdGFGYWN0b3J5KG9iamVjdCk6CisgICAgIyBUT0RPOiBOb3QgaW1wbGVtZW50ZWQgeWV0CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiVE9ETzogTm90IGltcGxlbWVudGVkIHlldCIpCisKKworY2xhc3MgVGhyZWFkTmV0d29ya0RhdGEob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0bHZzKToKKyAgICAgICAgc2VsZi5fdGx2cyA9IHRsdnMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0bHZzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGx2cworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLnRsdnMgPT0gb3RoZXIudGx2cworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlRocmVhZE5ldHdvcmtEYXRhKHRsdnM9W3t9XSkiLmZvcm1hdCgiLCAiLmpvaW4oW3N0cih0bHYpIGZvciB0bHYgaW4gc2VsZi50bHZzXSkpCisKKworY2xhc3MgVGhyZWFkTmV0d29ya0RhdGFGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmV0d29ya19kYXRhX3RsdnNfZmFjdG9yeSk6CisgICAgICAgIHNlbGYuX25ldHdvcmtfZGF0YV90bHZzX2ZhY3RvcnkgPSBuZXR3b3JrX2RhdGFfdGx2c19mYWN0b3J5CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgdGx2cyA9IHNlbGYuX25ldHdvcmtfZGF0YV90bHZzX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorICAgICAgICByZXR1cm4gVGhyZWFkTmV0d29ya0RhdGEodGx2cykKKworCitjbGFzcyBOZXR3b3JrTGF5ZXJUbHZzRmFjdG9yeShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRsdnNfZmFjdG9yaWVzKToKKyAgICAgICAgc2VsZi5fdGx2c19mYWN0b3JpZXMgPSB0bHZzX2ZhY3RvcmllcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHRsdnMgPSBbXQorCisgICAgICAgIHdoaWxlIGRhdGEudGVsbCgpIDwgbGVuKGRhdGEuZ2V0dmFsdWUoKSk6CisgICAgICAgICAgICBfdHlwZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgICAgICBsZW5ndGggPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgICAgICBmYWN0b3J5ID0gc2VsZi5fdGx2c19mYWN0b3JpZXNbX3R5cGVdCisgICAgICAgICAgICB0bHYgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YS5yZWFkKGxlbmd0aCkpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgICAgIHRsdnMuYXBwZW5kKHRsdikKKworICAgICAgICByZXR1cm4gdGx2cwpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9ub2RlLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9ub2RlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhiOGY0MDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25vZGUucHkKQEAgLTAsMCArMSwyNDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKyAgICBpbXBvcnQgbm9kZV9jbGkKK2Vsc2U6CisgICAgaW1wb3J0IG5vZGVfYXBpCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgTm9kZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZWlkKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmludGVyZmFjZSA9IG5vZGVfY2xpLm90Q2xpKG5vZGVpZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaW50ZXJmYWNlID0gbm9kZV9hcGkub3RBcGkobm9kZWlkKQorCisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmNsZWFyX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmRpc2FibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2V0X3RpbWVvdXQoMTAwKQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIGRlbCBzZWxmLmludGVyZmFjZQorCisgICAgZGVmIHNldF9tb2RlKHNlbGYsIG1vZGUpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfbW9kZShtb2RlKQorCisgICAgZGVmIGRlYnVnKHNlbGYsIGxldmVsKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UuZGVidWcobGV2ZWwpCisKKyAgICBkZWYgaW50ZXJmYWNlX3VwKHNlbGYpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5pbnRlcmZhY2VfdXAoKQorCisgICAgZGVmIGludGVyZmFjZV9kb3duKHNlbGYpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5pbnRlcmZhY2VfZG93bigpCisKKyAgICBkZWYgdGhyZWFkX3N0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmludGVyZmFjZS50aHJlYWRfc3RhcnQoKQorCisgICAgZGVmIHRocmVhZF9zdG9wKHNlbGYpOgorICAgICAgICBzZWxmLmludGVyZmFjZS50aHJlYWRfc3RvcCgpCisgICAgICAgICAgICAKKyAgICBkZWYgY29tbWlzc2lvbmVyX3N0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5jb21taXNzaW9uZXJfc3RhcnQoKQorCisgICAgZGVmIGNvbW1pc3Npb25lcl9hZGRfam9pbmVyKHNlbGYsIGFkZHIsIHBzayk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmNvbW1pc3Npb25lcl9hZGRfam9pbmVyKGFkZHIsIHBzaykKKworICAgIGRlZiBqb2luZXJfc3RhcnQoc2VsZiwgcHNrZD0nJywgcHJvdmlzaW9uaW5nX3VybD0nJyk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmpvaW5lcl9zdGFydChwc2tkLCBwcm92aXNpb25pbmdfdXJsKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5pbnRlcmZhY2VfdXAoKQorICAgICAgICBzZWxmLmludGVyZmFjZS50aHJlYWRfc3RhcnQoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnRocmVhZF9zdG9wKCkKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UuaW50ZXJmYWNlX2Rvd24oKQorCisgICAgZGVmIGNsZWFyX3doaXRlbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UuY2xlYXJfd2hpdGVsaXN0KCkKKworICAgIGRlZiBlbmFibGVfd2hpdGVsaXN0KHNlbGYpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiBkaXNhYmxlX3doaXRlbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UuZGlzYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIGFkZF93aGl0ZWxpc3Qoc2VsZiwgYWRkciwgcnNzaT1Ob25lKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UuYWRkX3doaXRlbGlzdChhZGRyLCByc3NpKQorCisgICAgZGVmIHJlbW92ZV93aGl0ZWxpc3Qoc2VsZiwgYWRkcik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnJlbW92ZV93aGl0ZWxpc3QoYWRkcikKKworICAgIGRlZiBnZXRfYWRkcjE2KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UuZ2V0X2FkZHIxNigpCisKKyAgICBkZWYgZ2V0X2FkZHI2NChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJmYWNlLmdldF9hZGRyNjQoKQorCisgICAgZGVmIGdldF9oYXNobWFjYWRkcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJmYWNlLmdldF9oYXNobWFjYWRkcigpCisKKyAgICBkZWYgZ2V0X2NoYW5uZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmludGVyZmFjZS5nZXRfY2hhbm5lbCgpCisKKyAgICBkZWYgc2V0X2NoYW5uZWwoc2VsZiwgY2hhbm5lbCk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF9jaGFubmVsKGNoYW5uZWwpCisKKyAgICBkZWYgZ2V0X21hc3RlcmtleShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJmYWNlLmdldF9tYXN0ZXJrZXkoKQorCisgICAgZGVmIHNldF9tYXN0ZXJrZXkoc2VsZiwgbWFzdGVya2V5KToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2V0X21hc3RlcmtleShtYXN0ZXJrZXkpCisKKyAgICBkZWYgZ2V0X2tleV9zZXF1ZW5jZV9jb3VudGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UuZ2V0X2tleV9zZXF1ZW5jZV9jb3VudGVyKCkKKworICAgIGRlZiBzZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoc2VsZiwga2V5X3NlcXVlbmNlX2NvdW50ZXIpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoa2V5X3NlcXVlbmNlX2NvdW50ZXIpCisKKyAgICBkZWYgc2V0X2tleV9zd2l0Y2hfZ3VhcmR0aW1lKHNlbGYsIGtleV9zd2l0Y2hfZ3VhcmR0aW1lKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2V0X2tleV9zd2l0Y2hfZ3VhcmR0aW1lKGtleV9zd2l0Y2hfZ3VhcmR0aW1lKQorCisgICAgZGVmIHNldF9uZXR3b3JrX2lkX3RpbWVvdXQoc2VsZiwgbmV0d29ya19pZF90aW1lb3V0KToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2V0X25ldHdvcmtfaWRfdGltZW91dChuZXR3b3JrX2lkX3RpbWVvdXQpCisKKyAgICBkZWYgZ2V0X25ldHdvcmtfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJmYWNlLmdldF9uZXR3b3JrX25hbWUoKQorCisgICAgZGVmIHNldF9uZXR3b3JrX25hbWUoc2VsZiwgbmV0d29ya19uYW1lKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2V0X25ldHdvcmtfbmFtZShuZXR3b3JrX25hbWUpCisKKyAgICBkZWYgZ2V0X3BhbmlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UuZ2V0X3BhbmlkKCkKKworICAgIGRlZiBzZXRfcGFuaWQoc2VsZiwgcGFuaWQpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfcGFuaWQocGFuaWQpCisKKyAgICBkZWYgZ2V0X3BhcnRpdGlvbl9pZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJmYWNlLmdldF9wYXJ0aXRpb25faWQoKQorCisgICAgZGVmIHNldF9wYXJ0aXRpb25faWQoc2VsZiwgcGFydGl0aW9uX2lkKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2V0X3BhcnRpdGlvbl9pZChwYXJ0aXRpb25faWQpCisKKyAgICBkZWYgc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZChzZWxmLCB0aHJlc2hvbGQpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKHRocmVzaG9sZCkKKworICAgIGRlZiBzZXRfcm91dGVyX2Rvd25ncmFkZV90aHJlc2hvbGQoc2VsZiwgdGhyZXNob2xkKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2V0X3JvdXRlcl9kb3duZ3JhZGVfdGhyZXNob2xkKHRocmVzaG9sZCkKKworICAgIGRlZiByZWxlYXNlX3JvdXRlcl9pZChzZWxmLCByb3V0ZXJfaWQpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5yZWxlYXNlX3JvdXRlcl9pZChyb3V0ZXJfaWQpCisKKyAgICBkZWYgZ2V0X3N0YXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UuZ2V0X3N0YXRlKCkKKworICAgIGRlZiBzZXRfc3RhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfc3RhdGUoc3RhdGUpCisKKyAgICBkZWYgZ2V0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmludGVyZmFjZS5nZXRfdGltZW91dCgpCisKKyAgICBkZWYgc2V0X3RpbWVvdXQoc2VsZiwgdGltZW91dCk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF90aW1lb3V0KHRpbWVvdXQpCisKKyAgICBkZWYgc2V0X21heF9jaGlsZHJlbihzZWxmLCBudW1iZXIpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfbWF4X2NoaWxkcmVuKG51bWJlcikKKworICAgIGRlZiBnZXRfd2VpZ2h0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UuZ2V0X3dlaWdodCgpCisKKyAgICBkZWYgc2V0X3dlaWdodChzZWxmLCB3ZWlnaHQpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfd2VpZ2h0KHdlaWdodCkKKworICAgIGRlZiBhZGRfaXBhZGRyKHNlbGYsIGlwYWRkcik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmFkZF9pcGFkZHIoaXBhZGRyKQorCisgICAgZGVmIGdldF9hZGRycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJmYWNlLmdldF9hZGRycygpCisKKyAgICBkZWYgZ2V0X2NvbnRleHRfcmV1c2VfZGVsYXkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmludGVyZmFjZS5nZXRfY29udGV4dF9yZXVzZV9kZWxheSgpCisKKyAgICBkZWYgc2V0X2NvbnRleHRfcmV1c2VfZGVsYXkoc2VsZiwgZGVsYXkpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfY29udGV4dF9yZXVzZV9kZWxheShkZWxheSkKKworICAgIGRlZiBhZGRfcHJlZml4KHNlbGYsIHByZWZpeCwgZmxhZ3MsIHByZiA9ICdtZWQnKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UuYWRkX3ByZWZpeChwcmVmaXgsIGZsYWdzLCBwcmYpCisKKyAgICBkZWYgcmVtb3ZlX3ByZWZpeChzZWxmLCBwcmVmaXgpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5yZW1vdmVfcHJlZml4KHByZWZpeCkKKworICAgIGRlZiBhZGRfcm91dGUoc2VsZiwgcHJlZml4LCBwcmYgPSAnbWVkJyk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmFkZF9yb3V0ZShwcmVmaXgsIHByZikKKworICAgIGRlZiByZW1vdmVfcm91dGUoc2VsZiwgcHJlZml4KToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UucmVtb3ZlX3JvdXRlKHByZWZpeCkKKworICAgIGRlZiByZWdpc3Rlcl9uZXRkYXRhKHNlbGYpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5yZWdpc3Rlcl9uZXRkYXRhKCkKKworICAgIGRlZiBlbmVyZ3lfc2NhbihzZWxmLCBtYXNrLCBjb3VudCwgcGVyaW9kLCBzY2FuX2R1cmF0aW9uLCBpcGFkZHIpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5lbmVyZ3lfc2NhbihtYXNrLCBjb3VudCwgcGVyaW9kLCBzY2FuX2R1cmF0aW9uLCBpcGFkZHIpCisKKyAgICBkZWYgcGFuaWRfcXVlcnkoc2VsZiwgcGFuaWQsIG1hc2ssIGlwYWRkcik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnBhbmlkX3F1ZXJ5KHBhbmlkLCBtYXNrLCBpcGFkZHIpCisKKyAgICBkZWYgc2NhbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJmYWNlLnNjYW4oKQorCisgICAgZGVmIHBpbmcoc2VsZiwgaXBhZGRyLCBudW1fcmVzcG9uc2VzPTEsIHNpemU9Tm9uZSwgdGltZW91dD01MDAwKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJmYWNlLnBpbmcoaXBhZGRyLCBudW1fcmVzcG9uc2VzLCBzaXplLCB0aW1lb3V0KQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UucmVzZXQoKQorCisgICAgZGVmIHNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcihzZWxmLCBqaXR0ZXIpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoaml0dGVyKQorCisgICAgZGVmIHNldF9hY3RpdmVfZGF0YXNldChzZWxmLCB0aW1lc3RhbXAsIHBhbmlkPU5vbmUsIGNoYW5uZWw9Tm9uZSwgY2hhbm5lbF9tYXNrPU5vbmUsIG1hc3Rlcl9rZXk9Tm9uZSk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF9hY3RpdmVfZGF0YXNldCh0aW1lc3RhbXAsIHBhbmlkLCBjaGFubmVsLCBjaGFubmVsX21hc2ssIG1hc3Rlcl9rZXkpCisKKyAgICBkZWYgc2V0X3BlbmRpbmdfZGF0YXNldChzZWxmLCBwZW5kaW5ndGltZXN0YW1wLCBhY3RpdmV0aW1lc3RhbXAsIHBhbmlkPU5vbmUsIGNoYW5uZWw9Tm9uZSk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF9wZW5kaW5nX2RhdGFzZXQocGVuZGluZ3RpbWVzdGFtcCwgYWN0aXZldGltZXN0YW1wLCBwYW5pZCwgY2hhbm5lbCkKKworICAgIGRlZiBhbm5vdW5jZV9iZWdpbihzZWxmLCBtYXNrLCBjb3VudCwgcGVyaW9kLCBpcGFkZHIpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5hbm5vdW5jZV9iZWdpbihtYXNrLCBjb3VudCwgcGVyaW9kLCBpcGFkZHIpCisKKyAgICBkZWYgc2VuZF9tZ210X2FjdGl2ZV9zZXQoc2VsZiwgYWN0aXZlX3RpbWVzdGFtcD1Ob25lLCBjaGFubmVsPU5vbmUsIGNoYW5uZWxfbWFzaz1Ob25lLCBleHRlbmRlZF9wYW5pZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pZD1Ob25lLCBtYXN0ZXJfa2V5PU5vbmUsIG1lc2hfbG9jYWw9Tm9uZSwgbmV0d29ya19uYW1lPU5vbmUsIGJpbmFyeT1Ob25lKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2VuZF9tZ210X2FjdGl2ZV9zZXQoYWN0aXZlX3RpbWVzdGFtcCwgY2hhbm5lbCwgY2hhbm5lbF9tYXNrLCBleHRlbmRlZF9wYW5pZCwgcGFuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3Rlcl9rZXksIG1lc2hfbG9jYWwsIG5ldHdvcmtfbmFtZSwgYmluYXJ5KQorCisgICAgZGVmIHNlbmRfbWdtdF9wZW5kaW5nX3NldChzZWxmLCBwZW5kaW5nX3RpbWVzdGFtcD1Ob25lLCBhY3RpdmVfdGltZXN0YW1wPU5vbmUsIGRlbGF5X3RpbWVyPU5vbmUsIGNoYW5uZWw9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmlkPU5vbmUsIG1hc3Rlcl9rZXk9Tm9uZSwgbWVzaF9sb2NhbD1Ob25lLCBuZXR3b3JrX25hbWU9Tm9uZSk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcCwgYWN0aXZlX3RpbWVzdGFtcCwgZGVsYXlfdGltZXIsIGNoYW5uZWwsIHBhbmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX2tleSwgbWVzaF9sb2NhbCwgbmV0d29ya19uYW1lKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9ub2RlX2FwaS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbm9kZV9hcGkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM0NTk0YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbm9kZV9hcGkucHkKQEAgLTAsMCArMSw1OTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgY3R5cGVzCisKK2NsYXNzIG90QXBpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub2RlaWQpOgorICAgICAgICBzZWxmLnZlcmJvc2UgPSBpbnQoZmxvYXQob3MuZ2V0ZW52KCdWRVJCT1NFJywgMCkpKQorICAgICAgICBzZWxmLl9faW5pdF9kbGwobm9kZWlkKQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUZpbmFsaXplKHNlbGYub3ROb2RlKQorCisgICAgZGVmIHNldF9tb2RlKHNlbGYsIG1vZGUpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRNb2RlKHNlbGYub3ROb2RlLCBtb2RlLmVuY29kZSgndXRmLTgnKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVNldE1vZGUgZmFpbGVkISIpCisKKyAgICBkZWYgaW50ZXJmYWNlX3VwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVJbnRlcmZhY2VVcChzZWxmLm90Tm9kZSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZUludGVyZmFjZVVwIGZhaWxlZCEiKQorCisgICAgZGVmIGludGVyZmFjZV9kb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVJbnRlcmZhY2VEb3duKHNlbGYub3ROb2RlKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlSW50ZXJmYWNlRG93biBmYWlsZWQhIikKKworICAgIGRlZiB0aHJlYWRfc3RhcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVRocmVhZFN0YXJ0KHNlbGYub3ROb2RlKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlVGhyZWFkU3RhcnQgZmFpbGVkISIpCisKKyAgICBkZWYgdGhyZWFkX3N0b3Aoc2VsZik6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVRocmVhZFN0b3Aoc2VsZi5vdE5vZGUpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVUaHJlYWRTdG9wIGZhaWxlZCEiKQorICAgICAgICAgICAgCisgICAgZGVmIGNvbW1pc3Npb25lcl9zdGFydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlQ29tbWlzc2lvbmVyU3RhcnQoc2VsZi5vdE5vZGUpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVDb21taXNzaW9uZXJTdGFydCBmYWlsZWQhIikKKworICAgIGRlZiBjb21taXNzaW9uZXJfYWRkX2pvaW5lcihzZWxmLCBhZGRyLCBwc2spOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVDb21taXNzaW9uZXJKb2luZXJBZGQoc2VsZi5vdE5vZGUsIGFkZHIuZW5jb2RlKCd1dGYtOCcpLCBwc2suZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlQ29tbWlzc2lvbmVySm9pbmVyQWRkIGZhaWxlZCEiKQorCisgICAgZGVmIGpvaW5lcl9zdGFydChzZWxmLCBwc2tkPScnLCBwcm92aXNpb25pbmdfdXJsPScnKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlSm9pbmVyU3RhcnQoc2VsZi5vdE5vZGUsIHBza2QuZW5jb2RlKCd1dGYtOCcpLCBwcm92aXNpb25pbmdfdXJsLmVuY29kZSgndXRmLTgnKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZUpvaW5lclN0YXJ0IGZhaWxlZCEiKQorCisgICAgZGVmIGNsZWFyX3doaXRlbGlzdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlQ2xlYXJXaGl0ZWxpc3Qoc2VsZi5vdE5vZGUpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVDbGVhcldoaXRlbGlzdCBmYWlsZWQhIikKKworICAgIGRlZiBlbmFibGVfd2hpdGVsaXN0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVFbmFibGVXaGl0ZWxpc3Qoc2VsZi5vdE5vZGUpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVFbmFibGVXaGl0ZWxpc3QgZmFpbGVkISIpCisKKyAgICBkZWYgZGlzYWJsZV93aGl0ZWxpc3Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZURpc2FibGVXaGl0ZWxpc3Qoc2VsZi5vdE5vZGUpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVEaXNhYmxlV2hpdGVsaXN0IGZhaWxlZCEiKQorCisgICAgZGVmIGFkZF93aGl0ZWxpc3Qoc2VsZiwgYWRkciwgcnNzaT1Ob25lKToKKyAgICAgICAgaWYgcnNzaSA9PSBOb25lOgorICAgICAgICAgICAgcnNzaSA9IDAKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlQWRkV2hpdGVsaXN0KHNlbGYub3ROb2RlLCBhZGRyLmVuY29kZSgndXRmLTgnKSwgY3R5cGVzLmNfYnl0ZShyc3NpKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZUFkZFdoaXRlbGlzdCBmYWlsZWQhIikKKworICAgIGRlZiByZW1vdmVfd2hpdGVsaXN0KHNlbGYsIGFkZHIpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVSZW1vdmVXaGl0ZWxpc3Qoc2VsZi5vdE5vZGUsIGFkZHIuZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlUmVtb3ZlV2hpdGVsaXN0IGZhaWxlZCEiKQorCisgICAgZGVmIGdldF9hZGRyMTYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLkFwaS5vdE5vZGVHZXRBZGRyMTYoc2VsZi5vdE5vZGUpCisKKyAgICBkZWYgZ2V0X2FkZHI2NChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuQXBpLm90Tm9kZUdldEFkZHI2NChzZWxmLm90Tm9kZSkuZGVjb2RlKCd1dGYtOCcpCisKKyAgICBkZWYgZ2V0X2hhc2htYWNhZGRyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5BcGkub3ROb2RlR2V0SGFzaE1hY0FkZHJlc3Moc2VsZi5vdE5vZGUpLmRlY29kZSgndXRmLTgnKQorCisgICAgZGVmIGdldF9jaGFubmVsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5BcGkub3ROb2RlR2V0Q2hhbm5lbChzZWxmLm90Tm9kZSkKKworICAgIGRlZiBzZXRfY2hhbm5lbChzZWxmLCBjaGFubmVsKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2V0Q2hhbm5lbChzZWxmLm90Tm9kZSwgY3R5cGVzLmNfdWJ5dGUoY2hhbm5lbCkpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRDaGFubmVsIGZhaWxlZCEiKQorCisgICAgZGVmIGdldF9tYXN0ZXJrZXkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLkFwaS5vdE5vZGVHZXRNYXN0ZXJrZXkoc2VsZi5vdE5vZGUpLmRlY29kZSgidXRmLTgiKQorCisgICAgZGVmIHNldF9tYXN0ZXJrZXkoc2VsZiwgbWFzdGVya2V5KToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2V0TWFzdGVya2V5KHNlbGYub3ROb2RlLCBtYXN0ZXJrZXkuZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0TWFzdGVya2V5IGZhaWxlZCEiKQorCisgICAgZGVmIGdldF9rZXlfc2VxdWVuY2VfY291bnRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuQXBpLm90Tm9kZUdldEtleVNlcXVlbmNlQ291bnRlcihzZWxmLm90Tm9kZSkKKworICAgIGRlZiBzZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoc2VsZiwga2V5X3NlcXVlbmNlX2NvdW50ZXIpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRLZXlTZXF1ZW5jZUNvdW50ZXIoc2VsZi5vdE5vZGUsIGN0eXBlcy5jX3VpbnQoa2V5X3NlcXVlbmNlX2NvdW50ZXIpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0S2V5U2VxdWVuY2VDb3VudGVyIGZhaWxlZCEiKQorCisgICAgZGVmIHNldF9rZXlfc3dpdGNoX2d1YXJkdGltZShzZWxmLCBrZXlfc3dpdGNoX2d1YXJkdGltZSk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNldEtleVN3aXRjaEd1YXJkVGltZShzZWxmLm90Tm9kZSwgY3R5cGVzLmNfdWludChrZXlfc3dpdGNoX2d1YXJkdGltZSkpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRLZXlTd2l0Y2hHdWFyZFRpbWUgZmFpbGVkISIpCisKKyAgICBkZWYgc2V0X25ldHdvcmtfaWRfdGltZW91dChzZWxmLCBuZXR3b3JrX2lkX3RpbWVvdXQpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXROZXR3b3JrSWRUaW1lb3V0KHNlbGYub3ROb2RlLCBjdHlwZXMuY191Ynl0ZShuZXR3b3JrX2lkX3RpbWVvdXQpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0TmV0d29ya0lkVGltZW91dCBmYWlsZWQhIikKKworICAgIGRlZiBnZXRfbmV0d29ya19uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5BcGkub3ROb2RlR2V0TmV0d29ya05hbWUoc2VsZi5vdE5vZGUpLmRlY29kZSgidXRmLTgiKQorCisgICAgZGVmIHNldF9uZXR3b3JrX25hbWUoc2VsZiwgbmV0d29ya19uYW1lKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2V0TmV0d29ya05hbWUoc2VsZi5vdE5vZGUsIG5ldHdvcmtfbmFtZS5lbmNvZGUoJ3V0Zi04JykpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXROZXR3b3JrTmFtZSBmYWlsZWQhIikKKworICAgIGRlZiBnZXRfcGFuaWQoc2VsZik6CisgICAgICAgIHJldHVybiBpbnQoc2VsZi5BcGkub3ROb2RlR2V0UGFuSWQoc2VsZi5vdE5vZGUpKQorCisgICAgZGVmIHNldF9wYW5pZChzZWxmLCBwYW5pZCk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNldFBhbklkKHNlbGYub3ROb2RlLCBjdHlwZXMuY191c2hvcnQocGFuaWQpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0UGFuSWQgZmFpbGVkISIpCisKKyAgICBkZWYgZ2V0X3BhcnRpdGlvbl9pZChzZWxmKToKKyAgICAgICAgcmV0dXJuIGludChzZWxmLkFwaS5vdE5vZGVHZXRQYXJ0aXRpb25JZChzZWxmLm90Tm9kZSkpCisKKyAgICBkZWYgc2V0X3BhcnRpdGlvbl9pZChzZWxmLCBwYXJ0aXRpb25faWQpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRQYXJ0aXRpb25JZChzZWxmLm90Tm9kZSwgY3R5cGVzLmNfdWludChwYXJ0aXRpb25faWQpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0UGFydGl0aW9uSWQgZmFpbGVkISIpCisKKyAgICBkZWYgc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZChzZWxmLCB0aHJlc2hvbGQpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKHNlbGYub3ROb2RlLCBjdHlwZXMuY191Ynl0ZSh0aHJlc2hvbGQpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZCBmYWlsZWQhIikKKworICAgIGRlZiBzZXRfcm91dGVyX2Rvd25ncmFkZV90aHJlc2hvbGQoc2VsZiwgdGhyZXNob2xkKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKHNlbGYub3ROb2RlLCBjdHlwZXMuY191Ynl0ZSh0aHJlc2hvbGQpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkIGZhaWxlZCEiKQorCisgICAgZGVmIHJlbGVhc2Vfcm91dGVyX2lkKHNlbGYsIHJvdXRlcl9pZCk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVJlbGVhc2VSb3V0ZXJJZChzZWxmLm90Tm9kZSwgY3R5cGVzLmNfdWJ5dGUocm91dGVyX2lkKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVJlbGVhc2VSb3V0ZXJJZCBmYWlsZWQhIikKKworICAgIGRlZiBnZXRfc3RhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLkFwaS5vdE5vZGVHZXRTdGF0ZShzZWxmLm90Tm9kZSkuZGVjb2RlKCd1dGYtOCcpCisKKyAgICBkZWYgc2V0X3N0YXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2V0U3RhdGUoc2VsZi5vdE5vZGUsIHN0YXRlLmVuY29kZSgndXRmLTgnKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVNldFN0YXRlIGZhaWxlZCEiKQorCisgICAgZGVmIGdldF90aW1lb3V0KHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KHNlbGYuQXBpLm90Tm9kZUdldFRpbWVvdXQoc2VsZi5vdE5vZGUpKQorCisgICAgZGVmIHNldF90aW1lb3V0KHNlbGYsIHRpbWVvdXQpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRUaW1lb3V0KHNlbGYub3ROb2RlLCBjdHlwZXMuY191aW50KHRpbWVvdXQpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0VGltZW91dCBmYWlsZWQhIikKKworICAgIGRlZiBzZXRfbWF4X2NoaWxkcmVuKHNlbGYsIG51bWJlcik6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNldE1heENoaWxkcmVuKHNlbGYub3ROb2RlLCBjdHlwZXMuY191Ynl0ZShudW1iZXIpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0TWF4Q2hpbGRyZW4gZmFpbGVkISIpCisKKyAgICBkZWYgZ2V0X3dlaWdodChzZWxmKToKKyAgICAgICAgcmV0dXJuIGludChzZWxmLkFwaS5vdE5vZGVHZXRXZWlnaHQoc2VsZi5vdE5vZGUpKQorCisgICAgZGVmIHNldF93ZWlnaHQoc2VsZiwgd2VpZ2h0KToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2V0V2VpZ2h0KHNlbGYub3ROb2RlLCBjdHlwZXMuY191Ynl0ZSh3ZWlnaHQpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0V2VpZ2h0IGZhaWxlZCEiKQorCisgICAgZGVmIGFkZF9pcGFkZHIoc2VsZiwgaXBhZGRyKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlQWRkSXBBZGRyKHNlbGYub3ROb2RlLCBpcGFkZHIuZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlQWRkSXBBZGRyIGZhaWxlZCEiKQorCisgICAgZGVmIGdldF9hZGRycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuQXBpLm90Tm9kZUdldEFkZHJzKHNlbGYub3ROb2RlKS5kZWNvZGUoInV0Zi04Iikuc3BsaXQoIlxuIikKKworICAgIGRlZiBnZXRfY29udGV4dF9yZXVzZV9kZWxheShzZWxmKToKKyAgICAgICAgcmV0dXJuIGludChzZWxmLkFwaS5vdE5vZGVHZXRDb250ZXh0UmV1c2VEZWxheShzZWxmLm90Tm9kZSkpCisKKyAgICBkZWYgc2V0X2NvbnRleHRfcmV1c2VfZGVsYXkoc2VsZiwgZGVsYXkpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRDb250ZXh0UmV1c2VEZWxheShzZWxmLm90Tm9kZSwgY3R5cGVzLmNfdWludChkZWxheSkpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRDb250ZXh0UmV1c2VEZWxheSBmYWlsZWQhIikKKworICAgIGRlZiBhZGRfcHJlZml4KHNlbGYsIHByZWZpeCwgZmxhZ3MsIHByZiA9ICdtZWQnKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlQWRkUHJlZml4KHNlbGYub3ROb2RlLCBwcmVmaXguZW5jb2RlKCd1dGYtOCcpLCBmbGFncy5lbmNvZGUoJ3V0Zi04JyksIHByZi5lbmNvZGUoJ3V0Zi04JykpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVBZGRQcmVmaXggZmFpbGVkISIpCisKKyAgICBkZWYgcmVtb3ZlX3ByZWZpeChzZWxmLCBwcmVmaXgpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVSZW1vdmVQcmVmaXgoc2VsZi5vdE5vZGUsIHByZWZpeC5lbmNvZGUoJ3V0Zi04JykpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVSZW1vdmVQcmVmaXggZmFpbGVkISIpCisKKyAgICBkZWYgYWRkX3JvdXRlKHNlbGYsIHByZWZpeCwgcHJmID0gJ21lZCcpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVBZGRSb3V0ZShzZWxmLm90Tm9kZSwgcHJlZml4LmVuY29kZSgndXRmLTgnKSwgcHJmLmVuY29kZSgndXRmLTgnKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZUFkZFJvdXRlIGZhaWxlZCEiKQorCisgICAgZGVmIHJlbW92ZV9yb3V0ZShzZWxmLCBwcmVmaXgpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVSZW1vdmVSb3V0ZShzZWxmLm90Tm9kZSwgcHJlZml4LmVuY29kZSgndXRmLTgnKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVJlbW92ZVByZWZpeCBmYWlsZWQhIikKKworICAgIGRlZiByZWdpc3Rlcl9uZXRkYXRhKHNlbGYpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVSZWdpc3Rlck5ldGRhdGEoc2VsZi5vdE5vZGUpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVSZWdpc3Rlck5ldGRhdGEgZmFpbGVkISIpCisKKyAgICBkZWYgZW5lcmd5X3NjYW4oc2VsZiwgbWFzaywgY291bnQsIHBlcmlvZCwgc2Nhbl9kdXJhdGlvbiwgaXBhZGRyKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlRW5lcmd5U2NhbihzZWxmLm90Tm9kZSwgY3R5cGVzLmNfdWludChtYXNrKSwgY3R5cGVzLmNfdWJ5dGUoY291bnQpLCBjdHlwZXMuY191c2hvcnQocGVyaW9kKSwgY3R5cGVzLmNfdXNob3J0KHNjYW5fZHVyYXRpb24pLCBpcGFkZHIuZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlRW5lcmd5U2NhbiBmYWlsZWQhIikKKworICAgIGRlZiBwYW5pZF9xdWVyeShzZWxmLCBwYW5pZCwgbWFzaywgaXBhZGRyKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlUGFuSWRRdWVyeShzZWxmLm90Tm9kZSwgY3R5cGVzLmNfdXNob3J0KHBhbmlkKSwgY3R5cGVzLmNfdWludChtYXNrKSwgaXBhZGRyLmVuY29kZSgndXRmLTgnKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVBhbklkUXVlcnkgZmFpbGVkISIpCisKKyAgICBkZWYgc2NhbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuQXBpLm90Tm9kZVNjYW4oc2VsZi5vdE5vZGUpLmRlY29kZSgidXRmLTgiKS5zcGxpdCgiXG4iKQorCisgICAgZGVmIHBpbmcoc2VsZiwgaXBhZGRyLCBudW1fcmVzcG9uc2VzPTEsIHNpemU9Tm9uZSwgdGltZW91dD01MDAwKToKKyAgICAgICAgaWYgc2l6ZSA9PSBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IDEwMAorICAgICAgICBudW1iZXJPZlJlc3BvbmRlcnMgPSBzZWxmLkFwaS5vdE5vZGVQaW5nKHNlbGYub3ROb2RlLCBpcGFkZHIuZW5jb2RlKCd1dGYtOCcpLCBjdHlwZXMuY191c2hvcnQoc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludChudW1fcmVzcG9uc2VzKSwgY3R5cGVzLmNfdWludDE2KHRpbWVvdXQpKQorICAgICAgICByZXR1cm4gbnVtYmVyT2ZSZXNwb25kZXJzID49IG51bV9yZXNwb25zZXMKKworICAgIGRlZiBzZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoc2VsZiwgaml0dGVyKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKHNlbGYub3ROb2RlLCBjdHlwZXMuY191Ynl0ZShqaXR0ZXIpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0Um91dGVyU2VsZWN0aW9uSml0dGVyIGZhaWxlZCEiKQorCisgICAgZGVmIHNldF9hY3RpdmVfZGF0YXNldChzZWxmLCB0aW1lc3RhbXAsIHBhbmlkPU5vbmUsIGNoYW5uZWw9Tm9uZSwgY2hhbm5lbF9tYXNrPU5vbmUsIG1hc3Rlcl9rZXk9Tm9uZSk6CisgICAgICAgIGlmIHBhbmlkID09IE5vbmU6CisgICAgICAgICAgICBwYW5pZCA9IDAKKyAgICAgICAgaWYgY2hhbm5lbCA9PSBOb25lOgorICAgICAgICAgICAgY2hhbm5lbCA9IDAKKyAgICAgICAgaWYgY2hhbm5lbF9tYXNrID09IE5vbmU6CisgICAgICAgICAgICBjaGFubmVsX21hc2sgPSAwCisgICAgICAgIGlmIG1hc3Rlcl9rZXkgPT0gTm9uZToKKyAgICAgICAgICAgIG1hc3Rlcl9rZXkgPSAiIgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRBY3RpdmVEYXRhc2V0KAorICAgICAgICAgICAgICAgIHNlbGYub3ROb2RlLAorICAgICAgICAgICAgICAgIGN0eXBlcy5jX3Vsb25nbG9uZyh0aW1lc3RhbXApLAorICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydChwYW5pZCksCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0KGNoYW5uZWwpLAorICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnQoY2hhbm5lbF9tYXNrKSwKKyAgICAgICAgICAgICAgICBtYXN0ZXJfa2V5LmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0QWN0aXZlRGF0YXNldCBmYWlsZWQhIikKKworICAgIGRlZiBzZXRfcGVuZGluZ19kYXRhc2V0KHNlbGYsIHBlbmRpbmd0aW1lc3RhbXAsIGFjdGl2ZXRpbWVzdGFtcCwgcGFuaWQ9Tm9uZSwgY2hhbm5lbD1Ob25lKToKKyAgICAgICAgaWYgcGVuZGluZ3RpbWVzdGFtcCA9PSBOb25lOgorICAgICAgICAgICAgcGVuZGluZ3RpbWVzdGFtcCA9IDAKKyAgICAgICAgaWYgYWN0aXZldGltZXN0YW1wID09IE5vbmU6CisgICAgICAgICAgICBhY3RpdmV0aW1lc3RhbXAgPSAwCisgICAgICAgIGlmIHBhbmlkID09IE5vbmU6CisgICAgICAgICAgICBwYW5pZCA9IDAKKyAgICAgICAgaWYgY2hhbm5lbCA9PSBOb25lOgorICAgICAgICAgICAgY2hhbm5lbCA9IDAKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2V0UGVuZGluZ0RhdGFzZXQoCisgICAgICAgICAgICAgICAgc2VsZi5vdE5vZGUsCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWxvbmdsb25nKGFjdGl2ZXRpbWVzdGFtcCksCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWxvbmdsb25nKHBlbmRpbmd0aW1lc3RhbXApLAorICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydChwYW5pZCksCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0KGNoYW5uZWwpCisgICAgICAgICAgICApICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRQZW5kaW5nRGF0YXNldCBmYWlsZWQhIikKKworICAgIGRlZiBhbm5vdW5jZV9iZWdpbihzZWxmLCBtYXNrLCBjb3VudCwgcGVyaW9kLCBpcGFkZHIpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVDb21taXNzaW9uZXJBbm5vdW5jZUJlZ2luKHNlbGYub3ROb2RlLCBjdHlwZXMuY191aW50KG1hc2spLCBjdHlwZXMuY191Ynl0ZShjb3VudCksIGN0eXBlcy5jX3VzaG9ydChwZXJpb2QpLCBpcGFkZHIuZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlQ29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbiBmYWlsZWQhIikKKworICAgIGRlZiBzZW5kX21nbXRfYWN0aXZlX3NldChzZWxmLCBhY3RpdmVfdGltZXN0YW1wPU5vbmUsIGNoYW5uZWw9Tm9uZSwgY2hhbm5lbF9tYXNrPU5vbmUsIGV4dGVuZGVkX3BhbmlkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmlkPU5vbmUsIG1hc3Rlcl9rZXk9Tm9uZSwgbWVzaF9sb2NhbD1Ob25lLCBuZXR3b3JrX25hbWU9Tm9uZSwgYmluYXJ5PU5vbmUpOgorICAgICAgICBpZiBhY3RpdmVfdGltZXN0YW1wID09IE5vbmU6CisgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wID0gMAorICAgICAgICBpZiBwYW5pZCA9PSBOb25lOgorICAgICAgICAgICAgcGFuaWQgPSAwCisgICAgICAgIGlmIGNoYW5uZWwgPT0gTm9uZToKKyAgICAgICAgICAgIGNoYW5uZWwgPSAwCisgICAgICAgIGlmIGNoYW5uZWxfbWFzayA9PSBOb25lOgorICAgICAgICAgICAgY2hhbm5lbF9tYXNrID0gMAorICAgICAgICBpZiBleHRlbmRlZF9wYW5pZCA9PSBOb25lOgorICAgICAgICAgICAgZXh0ZW5kZWRfcGFuaWQgPSAiIgorICAgICAgICBpZiBtYXN0ZXJfa2V5ID09IE5vbmU6CisgICAgICAgICAgICBtYXN0ZXJfa2V5ID0gIiIKKyAgICAgICAgaWYgbWVzaF9sb2NhbCA9PSBOb25lOgorICAgICAgICAgICAgbWVzaF9sb2NhbCA9ICIiCisgICAgICAgIGlmIG5ldHdvcmtfbmFtZSA9PSBOb25lOgorICAgICAgICAgICAgbmV0d29ya19uYW1lID0gIiIKKyAgICAgICAgaWYgYmluYXJ5ID09IE5vbmU6CisgICAgICAgICAgICBiaW5hcnkgPSAiIgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZW5kQWN0aXZlU2V0KAorICAgICAgICAgICAgICAgIHNlbGYub3ROb2RlLCAKKyAgICAgICAgICAgICAgICBjdHlwZXMuY191bG9uZ2xvbmcoYWN0aXZlX3RpbWVzdGFtcCksIAorICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydChwYW5pZCksIAorICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydChjaGFubmVsKSwgCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludChjaGFubmVsX21hc2spLCAKKyAgICAgICAgICAgICAgICBleHRlbmRlZF9wYW5pZC5lbmNvZGUoJ3V0Zi04JyksIAorICAgICAgICAgICAgICAgIG1hc3Rlcl9rZXkuZW5jb2RlKCd1dGYtOCcpLCAKKyAgICAgICAgICAgICAgICBtZXNoX2xvY2FsLmVuY29kZSgndXRmLTgnKSwgCisgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lLmVuY29kZSgndXRmLTgnKSwgCisgICAgICAgICAgICAgICAgYmluYXJ5LmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2VuZEFjdGl2ZVNldCBmYWlsZWQhIikKKworICAgIGRlZiBzZW5kX21nbXRfcGVuZGluZ19zZXQoc2VsZiwgcGVuZGluZ190aW1lc3RhbXA9Tm9uZSwgYWN0aXZlX3RpbWVzdGFtcD1Ob25lLCBkZWxheV90aW1lcj1Ob25lLCBjaGFubmVsPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pZD1Ob25lLCBtYXN0ZXJfa2V5PU5vbmUsIG1lc2hfbG9jYWw9Tm9uZSwgbmV0d29ya19uYW1lPU5vbmUpOgorICAgICAgICBpZiBwZW5kaW5nX3RpbWVzdGFtcCA9PSBOb25lOgorICAgICAgICAgICAgcGVuZGluZ190aW1lc3RhbXAgPSAwCisgICAgICAgIGlmIGFjdGl2ZV90aW1lc3RhbXAgPT0gTm9uZToKKyAgICAgICAgICAgIGFjdGl2ZV90aW1lc3RhbXAgPSAwCisgICAgICAgIGlmIGRlbGF5X3RpbWVyID09IE5vbmU6CisgICAgICAgICAgICBkZWxheV90aW1lciA9IDAKKyAgICAgICAgaWYgcGFuaWQgPT0gTm9uZToKKyAgICAgICAgICAgIHBhbmlkID0gMAorICAgICAgICBpZiBjaGFubmVsID09IE5vbmU6CisgICAgICAgICAgICBjaGFubmVsID0gMAorICAgICAgICBpZiBtYXN0ZXJfa2V5ID09IE5vbmU6CisgICAgICAgICAgICBtYXN0ZXJfa2V5ID0gIiIKKyAgICAgICAgaWYgbWVzaF9sb2NhbCA9PSBOb25lOgorICAgICAgICAgICAgbWVzaF9sb2NhbCA9ICIiCisgICAgICAgIGlmIG5ldHdvcmtfbmFtZSA9PSBOb25lOgorICAgICAgICAgICAgbmV0d29ya19uYW1lID0gIiIKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2VuZFBlbmRpbmdTZXQoCisgICAgICAgICAgICAgICAgc2VsZi5vdE5vZGUsCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWxvbmdsb25nKGFjdGl2ZV90aW1lc3RhbXApLAorICAgICAgICAgICAgICAgIGN0eXBlcy5jX3Vsb25nbG9uZyhwZW5kaW5nX3RpbWVzdGFtcCksCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludChkZWxheV90aW1lciksCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0KHBhbmlkKSwKKyAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQoY2hhbm5lbCksCisgICAgICAgICAgICAgICAgbWFzdGVyX2tleS5lbmNvZGUoJ3V0Zi04JyksCisgICAgICAgICAgICAgICAgbWVzaF9sb2NhbC5lbmNvZGUoJ3V0Zi04JyksCisgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2VuZFBlbmRpbmdTZXQgZmFpbGVkISIpCisKKyAgICBkZWYgbG9nKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBzZWxmLkFwaS5vdE5vZGVMb2cobWVzc2FnZSkKKworICAgIGRlZiBfX2luaXRfZGxsKHNlbGYsIG5vZGVpZCk6CisgICAgICAgICIiIiBJbml0aWFsaXplIHRoZSBBUEkgZnJvbSBhIFdpbmRvd3MgRExMLiAiIiIKKworICAgICAgICAjIExvYWQgdGhlIERMTAorICAgICAgICBzZWxmLkFwaSA9IGN0eXBlcy5XaW5ETEwoIm90bm9kZWFwaS5kbGwiKQorICAgICAgICBpZiBzZWxmLkFwaSA9PSBOb25lOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiRmFpbGVkIHRvIGxvYWQgb3Rub2RlYXBpLmRsbCEiKQorICAgICAgICAKKyAgICAgICAgIyBEZWZpbmUgdGhlIGZ1bmN0aW9ucworICAgICAgICBzZWxmLkFwaS5vdE5vZGVMb2cuYXJndHlwZXMgPSBbY3R5cGVzLmNfY2hhcl9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUluaXQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdWludF0KKyAgICAgICAgc2VsZi5BcGkub3ROb2RlSW5pdC5yZXN0eXBlID0gY3R5cGVzLmNfdm9pZF9wCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlRmluYWxpemUuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNldE1vZGUuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlSW50ZXJmYWNlVXAuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUludGVyZmFjZURvd24uYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVRocmVhZFN0YXJ0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVUaHJlYWRTdG9wLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVDb21taXNzaW9uZXJTdGFydC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlQ29tbWlzc2lvbmVySm9pbmVyQWRkLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlQ29tbWlzc2lvbmVyU3RvcC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlSm9pbmVyU3RhcnQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlSm9pbmVyU3RvcC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlQ2xlYXJXaGl0ZWxpc3QuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUVuYWJsZVdoaXRlbGlzdC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlRGlzYWJsZVdoaXRlbGlzdC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlQWRkV2hpdGVsaXN0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfYnl0ZV0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVSZW1vdmVXaGl0ZWxpc3QuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKyAgICAgICAgCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldEFkZHIxNi5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldEFkZHIxNi5yZXN0eXBlID0gY3R5cGVzLmNfdXNob3J0CisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRBZGRyNjQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRBZGRyNjQucmVzdHlwZSA9IGN0eXBlcy5jX2NoYXJfcAorICAgICAgICAKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0SGFzaE1hY0FkZHJlc3MuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRIYXNoTWFjQWRkcmVzcy5yZXN0eXBlID0gY3R5cGVzLmNfY2hhcl9wCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2V0Q2hhbm5lbC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VieXRlXQorICAgICAgICAKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0Q2hhbm5lbC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldENoYW5uZWwucmVzdHlwZSA9IGN0eXBlcy5jX3VieXRlCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2V0TWFzdGVya2V5LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3BdCisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRNYXN0ZXJrZXkuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRNYXN0ZXJrZXkucmVzdHlwZSA9IGN0eXBlcy5jX2NoYXJfcAorICAgICAgICAKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0S2V5U2VxdWVuY2VDb3VudGVyLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0S2V5U2VxdWVuY2VDb3VudGVyLnJlc3R5cGUgPSBjdHlwZXMuY191aW50CisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2V0S2V5U2VxdWVuY2VDb3VudGVyLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50XQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNldEtleVN3aXRjaEd1YXJkVGltZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXROZXR3b3JrSWRUaW1lb3V0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWJ5dGVdCisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXROZXR3b3JrTmFtZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldE5ldHdvcmtOYW1lLnJlc3R5cGUgPSBjdHlwZXMuY19jaGFyX3AKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXROZXR3b3JrTmFtZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3BdCisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRQYW5JZC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldFBhbklkLnJlc3R5cGUgPSBjdHlwZXMuY191c2hvcnQKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRQYW5JZC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnRdCisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRQYXJ0aXRpb25JZC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldFBhcnRpdGlvbklkLnJlc3R5cGUgPSBjdHlwZXMuY191aW50CisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2V0UGFydGl0aW9uSWQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWJ5dGVdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191Ynl0ZV0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVSZWxlYXNlUm91dGVySWQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VieXRlXQorICAgICAgICAKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0U3RhdGUuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRTdGF0ZS5yZXN0eXBlID0gY3R5cGVzLmNfY2hhcl9wCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2V0U3RhdGUuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wXQorICAgICAgICAKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0VGltZW91dC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldFRpbWVvdXQucmVzdHlwZSA9IGN0eXBlcy5jX3VpbnQKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRUaW1lb3V0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnRdCisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRXZWlnaHQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRXZWlnaHQucmVzdHlwZSA9IGN0eXBlcy5jX3VieXRlCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2V0V2VpZ2h0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191Ynl0ZV0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVBZGRJcEFkZHIuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKyAgICAgICAgCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldEFkZHJzLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0QWRkcnMucmVzdHlwZSA9IGN0eXBlcy5jX2NoYXJfcAorICAgICAgICAKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0Q29udGV4dFJldXNlRGVsYXkuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRDb250ZXh0UmV1c2VEZWxheS5yZXN0eXBlID0gY3R5cGVzLmNfdWludAorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNldENvbnRleHRSZXVzZURlbGF5LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnRdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlQWRkUHJlZml4LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVSZW1vdmVQcmVmaXguYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVBZGRSb3V0ZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlUmVtb3ZlUm91dGUuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVJlZ2lzdGVyTmV0ZGF0YS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlRW5lcmd5U2Nhbi5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VieXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVBhbklkUXVlcnkuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTY2FuLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2Nhbi5yZXN0eXBlID0gY3R5cGVzLmNfY2hhcl9wCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlUGluZy5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50MTZdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVBpbmcucmVzdHlwZSA9IGN0eXBlcy5jX3VpbnQKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VieXRlXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUNvbW1pc3Npb25lckFubm91bmNlQmVnaW4uYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWJ5dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRBY3RpdmVEYXRhc2V0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191bG9uZ2xvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRQZW5kaW5nRGF0YXNldC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3Vsb25nbG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWxvbmdsb25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZW5kUGVuZGluZ1NldC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3Vsb25nbG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWxvbmdsb25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZW5kQWN0aXZlU2V0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191bG9uZ2xvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2V0TWF4Q2hpbGRyZW4uYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWJ5dGVdCisgICAgICAgIAorICAgICAgICAjIEluaXRpYWxpemUgYSBuZXcgbm9kZQorICAgICAgICBzZWxmLm90Tm9kZSA9IHNlbGYuQXBpLm90Tm9kZUluaXQoY3R5cGVzLmNfdWludChub2RlaWQpKQorICAgICAgICBpZiBzZWxmLm90Tm9kZSA9PSBOb25lOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlSW5pdCBmYWlsZWQhIikKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbm9kZV9jbGkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25vZGVfY2xpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5Njg3YzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25vZGVfY2xpLnB5CkBAIC0wLDAgKzEsNTc5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHBleHBlY3QKKworY2xhc3Mgb3RDbGk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGVpZCk6CisgICAgICAgIHNlbGYubm9kZWlkID0gbm9kZWlkCisgICAgICAgIHNlbGYudmVyYm9zZSA9IGludChmbG9hdChvcy5nZXRlbnYoJ1ZFUkJPU0UnLCAwKSkpCisgICAgICAgIHNlbGYubm9kZV90eXBlID0gb3MuZ2V0ZW52KCdOT0RFX1RZUEUnLCAnc2ltJykKKworICAgICAgICBpZiBzZWxmLm5vZGVfdHlwZSA9PSAnc29jJzoKKyAgICAgICAgICAgIHNlbGYuX19pbml0X3NvYyhub2RlaWQpCisgICAgICAgIGVsaWYgc2VsZi5ub2RlX3R5cGUgPT0gJ25jcC1zaW0nOgorICAgICAgICAgICAgc2VsZi5fX2luaXRfbmNwX3NpbShub2RlaWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9faW5pdF9zaW0obm9kZWlkKQorCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYucGV4cGVjdC5sb2dmaWxlX3JlYWQgPSBzeXMuc3Rkb3V0CisKKyAgICBkZWYgX19pbml0X3NpbShzZWxmLCBub2RlaWQpOgorICAgICAgICAiIiIgSW5pdGlhbGl6ZSBhIHNpbXVsYXRpb24gbm9kZS4gIiIiCisgICAgICAgIGlmICJPVF9DTElfUEFUSCIgaW4gb3MuZW52aXJvbi5rZXlzKCk6CisgICAgICAgICAgICBjbWQgPSBvcy5lbnZpcm9uWydPVF9DTElfUEFUSCddCisgICAgICAgIGVsaWYgInRvcF9idWlsZGRpciIgaW4gb3MuZW52aXJvbi5rZXlzKCk6CisgICAgICAgICAgICBzcmNkaXIgPSBvcy5lbnZpcm9uWyd0b3BfYnVpbGRkaXInXQorICAgICAgICAgICAgY21kID0gJyVzL2V4YW1wbGVzL2FwcHMvY2xpL290LWNsaS1mdGQnICUgc3JjZGlyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAnLi9vdC1jbGktZnRkJworICAgICAgICBjbWQgKz0gJyAlZCcgJSBub2RlaWQKKyAgICAgICAgcHJpbnQgKCIlcyIgJSBjbWQpCisKKyAgICAgICAgc2VsZi5wZXhwZWN0ID0gcGV4cGVjdC5zcGF3bihjbWQsIHRpbWVvdXQ9NCkKKworICAgICAgICAjIEFkZCBkZWxheSB0byBlbnN1cmUgdGhhdCB0aGUgcHJvY2VzcyBpcyByZWFkeSB0byByZWNlaXZlIGNvbW1hbmRzLgorICAgICAgICB0aW1lLnNsZWVwKDAuMikKKworCisgICAgZGVmIF9faW5pdF9uY3Bfc2ltKHNlbGYsIG5vZGVpZCk6CisgICAgICAgICIiIiBJbml0aWFsaXplIGFuIE5DUCBzaW11bGF0aW9uIG5vZGUuICIiIgorICAgICAgICBpZiAidG9wX2J1aWxkZGlyIiBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgICAgIGJ1aWxkZGlyID0gb3MuZW52aXJvblsndG9wX2J1aWxkZGlyJ10KKyAgICAgICAgICAgIGNtZCA9ICdzcGluZWwtY2xpLnB5IC1wICVzL2V4YW1wbGVzL2FwcHMvbmNwL290LW5jcC1mdGQgLW4nICUgKGJ1aWxkZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gJy4vb3QtbmNwLWZ0ZCcKKyAgICAgICAgY21kICs9ICcgJWQnICUgbm9kZWlkCisgICAgICAgIHByaW50ICgiJXMiICUgY21kKQorCisgICAgICAgIHNlbGYucGV4cGVjdCA9IHBleHBlY3Quc3Bhd24oY21kLCB0aW1lb3V0PTQpCisgICAgICAgIHRpbWUuc2xlZXAoMC4yKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdzcGluZWwtY2xpID4nKQorICAgICAgICBzZWxmLmRlYnVnKGludChvcy5nZXRlbnYoJ0RFQlVHJywgJzAnKSkpCisgCisgICAgZGVmIF9faW5pdF9zb2Moc2VsZiwgbm9kZWlkKToKKyAgICAgICAgIiIiIEluaXRpYWxpemUgYSBTeXN0ZW0tb24tYS1jaGlwIG5vZGUgY29ubmVjdGVkIHZpYSBVQVJULiAiIiIKKyAgICAgICAgaW1wb3J0IGZkcGV4cGVjdAorICAgICAgICBzZXJpYWxQb3J0ID0gJy9kZXYvdHR5VVNCJWQnICUgKChub2RlaWQtMSkqMikKKyAgICAgICAgc2VsZi5wZXhwZWN0ID0gZmRwZXhwZWN0LmZkc3Bhd24ob3Mub3BlbihzZXJpYWxQb3J0LCBvcy5PX1JEV1J8b3MuT19OT05CTE9DS3xvcy5PX05PQ1RUWSkpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5wZXhwZWN0LmlzYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdleGl0JykKKyAgICAgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QocGV4cGVjdC5FT0YpCisgICAgICAgICAgICBzZWxmLnBleHBlY3QudGVybWluYXRlKCkKKyAgICAgICAgICAgIHNlbGYucGV4cGVjdC5jbG9zZShmb3JjZT1UcnVlKQorCisgICAgZGVmIHNlbmRfY29tbWFuZChzZWxmLCBjbWQpOgorICAgICAgICBwcmludCAoIiVkOiAlcyIgJSAoc2VsZi5ub2RlaWQsIGNtZCkpCisgICAgICAgIHNlbGYucGV4cGVjdC5zZW5kbGluZShjbWQpCisKKyAgICBkZWYgZ2V0X2NvbW1hbmRzKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnPycpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0NvbW1hbmRzOicpCisgICAgICAgIGNvbW1hbmRzID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGkgPSBzZWxmLnBleHBlY3QuZXhwZWN0KFsnRG9uZScsICcoXFMrKSddKQorICAgICAgICAgICAgaWYgaSAhPSAwOgorICAgICAgICAgICAgICAgIGNvbW1hbmRzLmFwcGVuZChzZWxmLnBleHBlY3QubWF0Y2guZ3JvdXBzKClbMF0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBjb21tYW5kcworCisgICAgZGVmIHNldF9tb2RlKHNlbGYsIG1vZGUpOgorICAgICAgICBjbWQgPSAnbW9kZSAnICsgbW9kZQorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGRlYnVnKHNlbGYsIGxldmVsKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ2RlYnVnICcrc3RyKGxldmVsKSkKKworICAgIGRlZiBpbnRlcmZhY2VfdXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdpZmNvbmZpZyB1cCcpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGludGVyZmFjZV9kb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnaWZjb25maWcgZG93bicpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHRocmVhZF9zdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ3RocmVhZCBzdGFydCcpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHRocmVhZF9zdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgndGhyZWFkIHN0b3AnKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKyAgICAgICAgICAgIAorICAgIGRlZiBjb21taXNzaW9uZXJfc3RhcnQoc2VsZik6CisgICAgICAgIGNtZCA9ICdjb21taXNzaW9uZXIgc3RhcnQnCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgY29tbWlzc2lvbmVyX2FkZF9qb2luZXIoc2VsZiwgYWRkciwgcHNrKToKKyAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBqb2luZXIgYWRkICcgKyBhZGRyICsgJyAnICsgcHNrCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgam9pbmVyX3N0YXJ0KHNlbGYsIHBza2Q9JycsIHByb3Zpc2lvbmluZ191cmw9JycpOgorICAgICAgICBjbWQgPSAnam9pbmVyIHN0YXJ0ICcgKyBwc2tkICsgJyAnICsgcHJvdmlzaW9uaW5nX3VybAorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGNsZWFyX3doaXRlbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ3doaXRlbGlzdCBjbGVhcicpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGVuYWJsZV93aGl0ZWxpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCd3aGl0ZWxpc3QgZW5hYmxlJykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgZGlzYWJsZV93aGl0ZWxpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCd3aGl0ZWxpc3QgZGlzYWJsZScpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGFkZF93aGl0ZWxpc3Qoc2VsZiwgYWRkciwgcnNzaT1Ob25lKToKKyAgICAgICAgY21kID0gJ3doaXRlbGlzdCBhZGQgJyArIGFkZHIKKyAgICAgICAgaWYgcnNzaSAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICcgJyArIHN0cihyc3NpKQorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHJlbW92ZV93aGl0ZWxpc3Qoc2VsZiwgYWRkcik6CisgICAgICAgIGNtZCA9ICd3aGl0ZWxpc3QgcmVtb3ZlICcgKyBhZGRyCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgZ2V0X2FkZHIxNihzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ3Jsb2MxNicpCisgICAgICAgIGkgPSBzZWxmLnBleHBlY3QuZXhwZWN0KCcoWzAtOWEtZkEtRl17NH0pJykKKyAgICAgICAgaWYgaSA9PSAwOgorICAgICAgICAgICAgYWRkcjE2ID0gaW50KHNlbGYucGV4cGVjdC5tYXRjaC5ncm91cHMoKVswXSwgMTYpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICByZXR1cm4gYWRkcjE2CisKKyAgICBkZWYgZ2V0X2FkZHI2NChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ2V4dGFkZHInKQorICAgICAgICBpID0gc2VsZi5wZXhwZWN0LmV4cGVjdCgnKFswLTlhLWZBLUZdezE2fSknKQorICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICBhZGRyNjQgPSBzZWxmLnBleHBlY3QubWF0Y2guZ3JvdXBzKClbMF0uZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICByZXR1cm4gYWRkcjY0CisKKyAgICBkZWYgZ2V0X2hhc2htYWNhZGRyKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnaGFzaG1hY2FkZHInKQorICAgICAgICBpID0gc2VsZi5wZXhwZWN0LmV4cGVjdCgnKFswLTlhLWZBLUZdezE2fSknKQorICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICBhZGRyID0gc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpWzBdLmRlY29kZSgidXRmLTgiKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKyAgICAgICAgcmV0dXJuIGFkZHIKKworICAgIGRlZiBnZXRfY2hhbm5lbChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ2NoYW5uZWwnKQorICAgICAgICBpID0gc2VsZi5wZXhwZWN0LmV4cGVjdCgnKFxkKylcclxuJykKKyAgICAgICAgaWYgaSA9PSAwOgorICAgICAgICAgICAgY2hhbm5lbCA9IGludChzZWxmLnBleHBlY3QubWF0Y2guZ3JvdXBzKClbMF0pCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICByZXR1cm4gY2hhbm5lbAorCisgICAgZGVmIHNldF9jaGFubmVsKHNlbGYsIGNoYW5uZWwpOgorICAgICAgICBjbWQgPSAnY2hhbm5lbCAlZCcgJSBjaGFubmVsCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgZ2V0X21hc3RlcmtleShzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ21hc3RlcmtleScpCisgICAgICAgIGkgPSBzZWxmLnBleHBlY3QuZXhwZWN0KCcoWzAtOWEtZkEtRl17MzJ9KScpCisgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgIG1hc3RlcmtleSA9IHNlbGYucGV4cGVjdC5tYXRjaC5ncm91cHMoKVswXS5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisgICAgICAgIHJldHVybiBtYXN0ZXJrZXkKKworICAgIGRlZiBzZXRfbWFzdGVya2V5KHNlbGYsIG1hc3RlcmtleSk6CisgICAgICAgIGNtZCA9ICdtYXN0ZXJrZXkgJyArIG1hc3RlcmtleQorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGdldF9rZXlfc2VxdWVuY2VfY291bnRlcihzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ2tleXNlcXVlbmNlIGNvdW50ZXInKQorICAgICAgICBpID0gc2VsZi5wZXhwZWN0LmV4cGVjdCgnKFxkKylcclxuJykKKyAgICAgICAgaWYgaSA9PSAwOgorICAgICAgICAgICAga2V5X3NlcXVlbmNlX2NvdW50ZXIgPSBpbnQoc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpWzBdKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKyAgICAgICAgcmV0dXJuIGtleV9zZXF1ZW5jZV9jb3VudGVyCisKKyAgICBkZWYgc2V0X2tleV9zZXF1ZW5jZV9jb3VudGVyKHNlbGYsIGtleV9zZXF1ZW5jZV9jb3VudGVyKToKKyAgICAgICAgY21kID0gJ2tleXNlcXVlbmNlIGNvdW50ZXIgJWQnICUga2V5X3NlcXVlbmNlX2NvdW50ZXIKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBzZXRfa2V5X3N3aXRjaF9ndWFyZHRpbWUoc2VsZiwga2V5X3N3aXRjaF9ndWFyZHRpbWUpOgorICAgICAgICBjbWQgPSAna2V5c2VxdWVuY2UgZ3VhcmR0aW1lICVkJyAlIGtleV9zd2l0Y2hfZ3VhcmR0aW1lCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgc2V0X25ldHdvcmtfaWRfdGltZW91dChzZWxmLCBuZXR3b3JrX2lkX3RpbWVvdXQpOgorICAgICAgICBjbWQgPSAnbmV0d29ya2lkdGltZW91dCAlZCcgJSBuZXR3b3JrX2lkX3RpbWVvdXQKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBnZXRfbmV0d29ya19uYW1lKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnbmV0d29ya25hbWUnKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaSA9IHNlbGYucGV4cGVjdC5leHBlY3QoWydEb25lJywgJyhcUyspJ10pCisgICAgICAgICAgICBpZiBpICE9IDA6CisgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lID0gc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpWzBdLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gbmV0d29ya19uYW1lCisKKyAgICBkZWYgc2V0X25ldHdvcmtfbmFtZShzZWxmLCBuZXR3b3JrX25hbWUpOgorICAgICAgICBjbWQgPSAnbmV0d29ya25hbWUgJyArIG5ldHdvcmtfbmFtZQorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGdldF9wYW5pZChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ3BhbmlkJykKKyAgICAgICAgaSA9IHNlbGYucGV4cGVjdC5leHBlY3QoJyhbMC05YS1mQS1GXXs0fSknKQorICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICBwYW5pZCA9IGludChzZWxmLnBleHBlY3QubWF0Y2guZ3JvdXBzKClbMF0sIDE2KQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKyAgICAgICAgcmV0dXJuIHBhbmlkCisKKyAgICBkZWYgc2V0X3BhbmlkKHNlbGYsIHBhbmlkKToKKyAgICAgICAgY21kID0gJ3BhbmlkICVkJyAlIHBhbmlkCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgZ2V0X3BhcnRpdGlvbl9pZChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ2xlYWRlcnBhcnRpdGlvbmlkJykKKyAgICAgICAgaSA9IHNlbGYucGV4cGVjdC5leHBlY3QoJyhcZCspXHJcbicpCisgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgIHdlaWdodCA9IHNlbGYucGV4cGVjdC5tYXRjaC5ncm91cHMoKVswXQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKyAgICAgICAgcmV0dXJuIHdlaWdodAorCisgICAgZGVmIHNldF9wYXJ0aXRpb25faWQoc2VsZiwgcGFydGl0aW9uX2lkKToKKyAgICAgICAgY21kID0gJ2xlYWRlcnBhcnRpdGlvbmlkICVkJyAlIHBhcnRpdGlvbl9pZAorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQoc2VsZiwgdGhyZXNob2xkKToKKyAgICAgICAgY21kID0gJ3JvdXRlcnVwZ3JhZGV0aHJlc2hvbGQgJWQnICUgdGhyZXNob2xkCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgc2V0X3JvdXRlcl9kb3duZ3JhZGVfdGhyZXNob2xkKHNlbGYsIHRocmVzaG9sZCk6CisgICAgICAgIGNtZCA9ICdyb3V0ZXJkb3duZ3JhZGV0aHJlc2hvbGQgJWQnICUgdGhyZXNob2xkCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgcmVsZWFzZV9yb3V0ZXJfaWQoc2VsZiwgcm91dGVyX2lkKToKKyAgICAgICAgY21kID0gJ3JlbGVhc2Vyb3V0ZXJpZCAlZCcgJSByb3V0ZXJfaWQKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBnZXRfc3RhdGUoc2VsZik6CisgICAgICAgIHN0YXRlcyA9IFsnZGV0YWNoZWQnLCAnY2hpbGQnLCAncm91dGVyJywgJ2xlYWRlciddCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdzdGF0ZScpCisgICAgICAgIG1hdGNoID0gc2VsZi5wZXhwZWN0LmV4cGVjdChzdGF0ZXMpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICByZXR1cm4gc3RhdGVzW21hdGNoXQorCisgICAgZGVmIHNldF9zdGF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAgIGNtZCA9ICdzdGF0ZSAnICsgc3RhdGUKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBnZXRfdGltZW91dChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ2NoaWxkdGltZW91dCcpCisgICAgICAgIGkgPSBzZWxmLnBleHBlY3QuZXhwZWN0KCcoXGQrKVxyXG4nKQorICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpWzBdCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICByZXR1cm4gdGltZW91dAorCisgICAgZGVmIHNldF90aW1lb3V0KHNlbGYsIHRpbWVvdXQpOgorICAgICAgICBjbWQgPSAnY2hpbGR0aW1lb3V0ICVkJyAlIHRpbWVvdXQKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBzZXRfbWF4X2NoaWxkcmVuKHNlbGYsIG51bWJlcik6CisgICAgICAgIGNtZCA9ICdjaGlsZG1heCAlZCcgJSBudW1iZXIKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBnZXRfd2VpZ2h0KHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnbGVhZGVyd2VpZ2h0JykKKyAgICAgICAgaSA9IHNlbGYucGV4cGVjdC5leHBlY3QoJyhcZCspXHJcbicpCisgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgIHdlaWdodCA9IHNlbGYucGV4cGVjdC5tYXRjaC5ncm91cHMoKVswXQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKyAgICAgICAgcmV0dXJuIHdlaWdodAorCisgICAgZGVmIHNldF93ZWlnaHQoc2VsZiwgd2VpZ2h0KToKKyAgICAgICAgY21kID0gJ2xlYWRlcndlaWdodCAlZCcgJSB3ZWlnaHQKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBhZGRfaXBhZGRyKHNlbGYsIGlwYWRkcik6CisgICAgICAgIGNtZCA9ICdpcGFkZHIgYWRkICcgKyBpcGFkZHIKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBnZXRfYWRkcnMoc2VsZik6CisgICAgICAgIGFkZHJzID0gW10KKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ2lwYWRkcicpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGkgPSBzZWxmLnBleHBlY3QuZXhwZWN0KFsnKFxTKzpcUyspXHJcbicsICdEb25lJ10pCisgICAgICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICAgICAgYWRkcnMuYXBwZW5kKHNlbGYucGV4cGVjdC5tYXRjaC5ncm91cHMoKVswXS5kZWNvZGUoInV0Zi04IikpCisgICAgICAgICAgICBlbGlmIGkgPT0gMToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiBhZGRycworCisgICAgZGVmIGdldF9jb250ZXh0X3JldXNlX2RlbGF5KHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnY29udGV4dHJldXNlZGVsYXknKQorICAgICAgICBpID0gc2VsZi5wZXhwZWN0LmV4cGVjdCgnKFxkKylcclxuJykKKyAgICAgICAgaWYgaSA9PSAwOgorICAgICAgICAgICAgdGltZW91dCA9IHNlbGYucGV4cGVjdC5tYXRjaC5ncm91cHMoKVswXQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKyAgICAgICAgcmV0dXJuIHRpbWVvdXQKKworICAgIGRlZiBzZXRfY29udGV4dF9yZXVzZV9kZWxheShzZWxmLCBkZWxheSk6CisgICAgICAgIGNtZCA9ICdjb250ZXh0cmV1c2VkZWxheSAlZCcgJSBkZWxheQorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGFkZF9wcmVmaXgoc2VsZiwgcHJlZml4LCBmbGFncywgcHJmID0gJ21lZCcpOgorICAgICAgICBjbWQgPSAncHJlZml4IGFkZCAnICsgcHJlZml4ICsgJyAnICsgZmxhZ3MgKyAnICcgKyBwcmYKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiByZW1vdmVfcHJlZml4KHNlbGYsIHByZWZpeCk6CisgICAgICAgIGNtZCA9ICdwcmVmaXggcmVtb3ZlICcgKyBwcmVmaXgKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBhZGRfcm91dGUoc2VsZiwgcHJlZml4LCBwcmYgPSAnbWVkJyk6CisgICAgICAgIGNtZCA9ICdyb3V0ZSBhZGQgJyArIHByZWZpeCArICcgJyArIHByZgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHJlbW92ZV9yb3V0ZShzZWxmLCBwcmVmaXgpOgorICAgICAgICBjbWQgPSAncm91dGUgcmVtb3ZlICcgKyBwcmVmaXgKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiByZWdpc3Rlcl9uZXRkYXRhKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnbmV0ZGF0YXJlZ2lzdGVyJykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgZW5lcmd5X3NjYW4oc2VsZiwgbWFzaywgY291bnQsIHBlcmlvZCwgc2Nhbl9kdXJhdGlvbiwgaXBhZGRyKToKKyAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBlbmVyZ3kgJyArIHN0cihtYXNrKSArICcgJyArIHN0cihjb3VudCkgKyAnICcgKyBzdHIocGVyaW9kKSArICcgJyArIHN0cihzY2FuX2R1cmF0aW9uKSArICcgJyArIGlwYWRkcgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0VuZXJneTonLCB0aW1lb3V0PTgpCisKKyAgICBkZWYgcGFuaWRfcXVlcnkoc2VsZiwgcGFuaWQsIG1hc2ssIGlwYWRkcik6CisgICAgICAgIGNtZCA9ICdjb21taXNzaW9uZXIgcGFuaWQgJyArIHN0cihwYW5pZCkgKyAnICcgKyBzdHIobWFzaykgKyAnICcgKyBpcGFkZHIKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdDb25mbGljdDonLCB0aW1lb3V0PTgpCisKKyAgICBkZWYgc2NhbihzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ3NjYW4nKQorCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaSA9IHNlbGYucGV4cGVjdC5leHBlY3QoWydcfFxzKFxTKylccytcfFxzKFxTKylccytcfFxzKFswLTlhLWZBLUZdezR9KVxzXHxccyhbMC05YS1mQS1GXXsxNn0pXHNcfFxzKFxkKylcclxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRG9uZSddKQorICAgICAgICAgICAgaWYgaSA9PSAwOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHNlbGYucGV4cGVjdC5tYXRjaC5ncm91cHMoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gcmVzdWx0cworCisgICAgZGVmIHBpbmcoc2VsZiwgaXBhZGRyLCBudW1fcmVzcG9uc2VzPTEsIHNpemU9Tm9uZSwgdGltZW91dD01MDAwKToKKyAgICAgICAgY21kID0gJ3BpbmcgJyArIGlwYWRkcgorICAgICAgICBpZiBzaXplICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJyAnICsgc3RyKHNpemUpCisKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorCisgICAgICAgIHJlc3VsdCA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uZGVycyA9IHt9CisgICAgICAgICAgICB3aGlsZSBsZW4ocmVzcG9uZGVycykgPCBudW1fcmVzcG9uc2VzOgorICAgICAgICAgICAgICAgIGkgPSBzZWxmLnBleHBlY3QuZXhwZWN0KFsnZnJvbSAoXFMrKTonXSkKKyAgICAgICAgICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJlc3BvbmRlcnNbc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpWzBdXSA9IDEKKyAgICAgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ1xuJykKKyAgICAgICAgZXhjZXB0IHBleHBlY3QuVElNRU9VVDoKKyAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgncmVzZXQnKQorCisgICAgZGVmIHNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcihzZWxmLCBqaXR0ZXIpOgorICAgICAgICBjbWQgPSAncm91dGVyc2VsZWN0aW9uaml0dGVyICVkJyAlIGppdHRlcgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHNldF9hY3RpdmVfZGF0YXNldChzZWxmLCB0aW1lc3RhbXAsIHBhbmlkPU5vbmUsIGNoYW5uZWw9Tm9uZSwgY2hhbm5lbF9tYXNrPU5vbmUsIG1hc3Rlcl9rZXk9Tm9uZSk6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdkYXRhc2V0IGNsZWFyJykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICAgICAgY21kID0gJ2RhdGFzZXQgYWN0aXZldGltZXN0YW1wICVkJyAlIHRpbWVzdGFtcAorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgICAgIGlmIHBhbmlkICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBwYW5pZCAlZCcgJSBwYW5pZAorICAgICAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICAgICAgaWYgY2hhbm5lbCAhPSBOb25lOgorICAgICAgICAgICAgY21kID0gJ2RhdGFzZXQgY2hhbm5lbCAlZCcgJSBjaGFubmVsCisgICAgICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgICAgICBpZiBjaGFubmVsX21hc2sgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCA9ICdkYXRhc2V0IGNoYW5uZWxtYXNrICVkJyAlIGNoYW5uZWxfbWFzaworICAgICAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICAgICAgaWYgbWFzdGVyX2tleSAhPSBOb25lOgorICAgICAgICAgICAgY21kID0gJ2RhdGFzZXQgbWFzdGVya2V5ICcgKyBtYXN0ZXJfa2V5CisgICAgICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnZGF0YXNldCBjb21taXQgYWN0aXZlJykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgc2V0X3BlbmRpbmdfZGF0YXNldChzZWxmLCBwZW5kaW5ndGltZXN0YW1wLCBhY3RpdmV0aW1lc3RhbXAsIHBhbmlkPU5vbmUsIGNoYW5uZWw9Tm9uZSk6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdkYXRhc2V0IGNsZWFyJykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICAgICAgY21kID0gJ2RhdGFzZXQgcGVuZGluZ3RpbWVzdGFtcCAlZCcgJSBwZW5kaW5ndGltZXN0YW1wCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICAgICAgY21kID0gJ2RhdGFzZXQgYWN0aXZldGltZXN0YW1wICVkJyAlIGFjdGl2ZXRpbWVzdGFtcAorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgICAgIGlmIHBhbmlkICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBwYW5pZCAlZCcgJSBwYW5pZAorICAgICAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICAgICAgaWYgY2hhbm5lbCAhPSBOb25lOgorICAgICAgICAgICAgY21kID0gJ2RhdGFzZXQgY2hhbm5lbCAlZCcgJSBjaGFubmVsCisgICAgICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnZGF0YXNldCBjb21taXQgcGVuZGluZycpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGFubm91bmNlX2JlZ2luKHNlbGYsIG1hc2ssIGNvdW50LCBwZXJpb2QsIGlwYWRkcik6CisgICAgICAgIGNtZCA9ICdjb21taXNzaW9uZXIgYW5ub3VuY2UgJyArIHN0cihtYXNrKSArICcgJyArIHN0cihjb3VudCkgKyAnICcgKyBzdHIocGVyaW9kKSArICcgJyArIGlwYWRkcgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHNlbmRfbWdtdF9hY3RpdmVfc2V0KHNlbGYsIGFjdGl2ZV90aW1lc3RhbXA9Tm9uZSwgY2hhbm5lbD1Ob25lLCBjaGFubmVsX21hc2s9Tm9uZSwgZXh0ZW5kZWRfcGFuaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuaWQ9Tm9uZSwgbWFzdGVyX2tleT1Ob25lLCBtZXNoX2xvY2FsPU5vbmUsIG5ldHdvcmtfbmFtZT1Ob25lLCBiaW5hcnk9Tm9uZSk6CisgICAgICAgIGNtZCA9ICdkYXRhc2V0IG1nbXRzZXRjb21tYW5kIGFjdGl2ZSAnCisKKyAgICAgICAgaWYgYWN0aXZlX3RpbWVzdGFtcCAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICdhY3RpdmV0aW1lc3RhbXAgJWQgJyAlIGFjdGl2ZV90aW1lc3RhbXAKKworICAgICAgICBpZiBjaGFubmVsICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJ2NoYW5uZWwgJWQgJyAlIGNoYW5uZWwKKworICAgICAgICBpZiBjaGFubmVsX21hc2sgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnY2hhbm5lbG1hc2sgJWQgJyAlIGNoYW5uZWxfbWFzaworCisgICAgICAgIGlmIGV4dGVuZGVkX3BhbmlkICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJ2V4dHBhbmlkICcgKyBleHRlbmRlZF9wYW5pZCArICcgJworCisgICAgICAgIGlmIHBhbmlkICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJ3BhbmlkICVkICcgJSBwYW5pZAorCisgICAgICAgIGlmIG1hc3Rlcl9rZXkgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnbWFzdGVya2V5ICcgKyBtYXN0ZXJfa2V5ICsgJyAnCisKKyAgICAgICAgaWYgbWVzaF9sb2NhbCAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICdsb2NhbHByZWZpeCAnICsgbWVzaF9sb2NhbCArICcgJworCisgICAgICAgIGlmIG5ldHdvcmtfbmFtZSAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICduZXR3b3JrbmFtZSAnICsgbmV0d29ya19uYW1lICsgJyAnCisKKyAgICAgICAgaWYgYmluYXJ5ICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJ2JpbmFyeSAnICsgYmluYXJ5ICsgJyAnCisKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBzZW5kX21nbXRfcGVuZGluZ19zZXQoc2VsZiwgcGVuZGluZ190aW1lc3RhbXA9Tm9uZSwgYWN0aXZlX3RpbWVzdGFtcD1Ob25lLCBkZWxheV90aW1lcj1Ob25lLCBjaGFubmVsPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pZD1Ob25lLCBtYXN0ZXJfa2V5PU5vbmUsIG1lc2hfbG9jYWw9Tm9uZSwgbmV0d29ya19uYW1lPU5vbmUpOgorICAgICAgICBjbWQgPSAnZGF0YXNldCBtZ210c2V0Y29tbWFuZCBwZW5kaW5nICcKKworICAgICAgICBpZiBwZW5kaW5nX3RpbWVzdGFtcCAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICdwZW5kaW5ndGltZXN0YW1wICVkICcgJSBwZW5kaW5nX3RpbWVzdGFtcAorCisgICAgICAgIGlmIGFjdGl2ZV90aW1lc3RhbXAgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnYWN0aXZldGltZXN0YW1wICVkICcgJSBhY3RpdmVfdGltZXN0YW1wCisKKyAgICAgICAgaWYgZGVsYXlfdGltZXIgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnZGVsYXl0aW1lciAlZCAnICUgZGVsYXlfdGltZXIKKworICAgICAgICBpZiBjaGFubmVsICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJ2NoYW5uZWwgJWQgJyAlIGNoYW5uZWwKKworICAgICAgICBpZiBwYW5pZCAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICdwYW5pZCAlZCAnICUgcGFuaWQKKworICAgICAgICBpZiBtYXN0ZXJfa2V5ICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJ21hc3RlcmtleSAnICsgbWFzdGVyX2tleSArICcgJworCisgICAgICAgIGlmIG1lc2hfbG9jYWwgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnbG9jYWxwcmVmaXggJyArIG1lc2hfbG9jYWwgKyAnICcKKworICAgICAgICBpZiBuZXR3b3JrX25hbWUgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnbmV0d29ya25hbWUgJyArIG5ldHdvcmtfbmFtZSArICcgJworCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3JlcXVpcmVtZW50cy50eHQgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3JlcXVpcmVtZW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzMDJjMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvcmVxdWlyZW1lbnRzLnR4dApAQCAtMCwwICsxLDQgQEAKK2VudW0zND09MS4xLjIKK2lwYWRkcmVzcz09MS4wLjE2CitwZXhwZWN0PT00LjAuMQorcHljcnlwdG9kb21lPT0zLjQuMwpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9zbmlmZmVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9zbmlmZmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjk1YTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3NuaWZmZXIucHkKQEAgLTAsMCArMSwxMzYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBpbworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0aHJlYWRpbmcKKwordHJ5OgorICAgIGltcG9ydCBRdWV1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBxdWV1ZSBhcyBRdWV1ZQorCitpbXBvcnQgbWVzc2FnZQoraW1wb3J0IHNuaWZmZXJfdHJhbnNwb3J0CisKKworY2xhc3MgU25pZmZlcjoKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgdGhlIFNuaWZmaW5nIG5vZGUsIHdob3NlIG1haW4gdGFzayBpcyBsaXN0ZW5pbmcgYW5kIGxvZ2dpbmcgbWVzc2FnZSBleGNoYW5nZSBwZXJmb3JtZWQgYnkgb3RoZXIgbm9kZXMuICIiIgorCisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInNuaWZmZXIuU25pZmZlciIpCisKKyAgICBSRUNWX0JVRkZFUl9TSVpFID0gNDA5NgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGVpZCwgbWVzc2FnZV9mYWN0b3J5KToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBub2RlaWQgKGludCk6IE5vZGUgaWRlbnRpZmllcgorICAgICAgICAgICAgbWVzc2FnZV9mYWN0b3J5IChNZXNzYWdlRmFjdG9yeSk6IENsYXNzIHByb2R1Y2luZyBtZXNzYWdlcyBmcm9tIGRhdGEgYnl0ZXMuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYubm9kZWlkID0gbm9kZWlkCisgICAgICAgIHNlbGYuX21lc3NhZ2VfZmFjdG9yeSA9IG1lc3NhZ2VfZmFjdG9yeQorCisgICAgICAgICMgQ3JlYXRlIHRyYW5zcG9ydAorICAgICAgICB0cmFuc3BvcnRfZmFjdG9yeSA9IHNuaWZmZXJfdHJhbnNwb3J0LlNuaWZmZXJUcmFuc3BvcnRGYWN0b3J5KCkKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2ZhY3RvcnkuY3JlYXRlX3RyYW5zcG9ydChub2RlaWQpCisKKyAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQorICAgICAgICBzZWxmLl90aHJlYWRfYWxpdmUgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLl90aHJlYWRfYWxpdmUuY2xlYXIoKQorCisgICAgICAgIHNlbGYuX2J1Y2tldHMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChRdWV1ZS5RdWV1ZSkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5fdHJhbnNwb3J0CisKKyAgICBkZWYgX3NuaWZmZXJfbWFpbl9sb29wKHNlbGYpOgorICAgICAgICAiIiIgU25pZmZlciBtYWluIGxvb3AuICIiIgorCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTbmlmZmVyIHN0YXJ0ZWQuIikKKworICAgICAgICB3aGlsZSBzZWxmLl90aHJlYWRfYWxpdmUuaXNfc2V0KCk6CisgICAgICAgICAgICBkYXRhLCBub2RlaWQgPSBzZWxmLl90cmFuc3BvcnQucmVjdihzZWxmLlJFQ1ZfQlVGRkVSX1NJWkUpCisKKyAgICAgICAgICAgICMgSWdub3JlIGFueSBleGNlcHRpb25zCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5fbWVzc2FnZV9mYWN0b3J5LmNyZWF0ZShpby5CeXRlc0lPKGRhdGEpKQorCisgICAgICAgICAgICAgICAgaWYgbXNnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiUmVjZWl2ZWQgbWVzc2FnZToge30iLmZvcm1hdChtc2cpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWNrZXRzW25vZGVpZF0ucHV0KG1zZykKKworICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICMgSnVzdCBwcmludCB0aGUgZXhjZXB0aW9uIHRvIHRoZSBjb25zb2xlCisgICAgICAgICAgICAgICAgcHJpbnQoIkVYQ0VQVElPTjogJXMiICUgZSkKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlNuaWZmZXIgc3RvcHBlZC4iKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICAiIiIgU3RhcnQgc25pZmZpbmcuICIiIgorCisgICAgICAgIHNlbGYuX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuX3NuaWZmZXJfbWFpbl9sb29wKQorICAgICAgICBzZWxmLl90aHJlYWQuZGFlbW9uID0gVHJ1ZQorCisgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5vcGVuKCkKKworICAgICAgICBzZWxmLl90aHJlYWRfYWxpdmUuc2V0KCkKKyAgICAgICAgc2VsZi5fdGhyZWFkLnN0YXJ0KCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiIgU3RvcCBzbmlmZmluZy4gIiIiCisKKyAgICAgICAgc2VsZi5fdGhyZWFkX2FsaXZlLmNsZWFyKCkKKworICAgICAgICBzZWxmLl90cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICAKKyAgICAgICAgc2VsZi5fdGhyZWFkLmpvaW4oKQorICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisKKyAgICBkZWYgZ2V0X21lc3NhZ2VzX3NlbnRfYnkoc2VsZiwgbm9kZWlkKToKKyAgICAgICAgIiIiIEdldCBzbmlmZmVkIG1lc3NhZ2VzLgorCisgICAgICAgIE5vdGUhIFRoaXMgbWV0aG9kIGZsdXNoZXMgdGhlIG1lc3NhZ2UgcXVldWUgc28gY2FsbGluZyB0aGlzIG1ldGhvZCBhZ2FpbiB3aWxsIHJldHVybiBvbmx5IHRoZSBuZXdseSBsb2dnZWQgbWVzc2FnZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG5vZGVpZCAoaW50KTogbm9kZSBpZAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBNZXNzYWdlc1NldDogYSBzZXQgd2l0aCByZWNlaXZlZCBtZXNzYWdlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGJ1Y2tldCA9IHNlbGYuX2J1Y2tldHNbbm9kZWlkXQorICAgICAgICBtZXNzYWdlcyA9IFtdCisKKyAgICAgICAgd2hpbGUgbm90IGJ1Y2tldC5lbXB0eSgpOgorICAgICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKGJ1Y2tldC5nZXRfbm93YWl0KCkpCisKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2UuTWVzc2FnZXNTZXQobWVzc2FnZXMpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3NuaWZmZXJfdHJhbnNwb3J0LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9zbmlmZmVyX3RyYW5zcG9ydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWZlMTlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9zbmlmZmVyX3RyYW5zcG9ydC5weQpAQCAtMCwwICsxLDIxOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBjdHlwZXMKK2ltcG9ydCBvcworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworCitjbGFzcyBTbmlmZmVyVHJhbnNwb3J0KG9iamVjdCk6CisgICAgIiIiIEludGVyZmFjZSBmb3IgdHJhbnNwb3J0IHRoYXQgYWxsb3dzIGVhdmVzZHJvcCBvdGhlciBub2Rlcy4gIiIiCisKKyAgICBkZWYgb3BlbihzZWxmKToKKyAgICAgICAgIiIiIE9wZW4gdHJhbnNwb3J0LiAKKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBSdW50aW1lRXJyb3I6IHdoZW4gdHJhbnNwb3J0IGlzIGFscmVhZHkgb3BlbmVkIG9yIHdoZW4gdHJhbnNwb3J0IG9wZW5pbmcgZmFpbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiIgQ2xvc2UgdHJhbnNwb3J0LiAKKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBSdW50aW1lRXJyb3I6IHdoZW4gdHJhbnNwb3J0IGlzIGFscmVhZHkgY2xvc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX29wZW5lZChzZWxmKToKKyAgICAgICAgIiIiIENoZWNrIGlmIHRyYW5zcG9ydCBpcyBvcGVuZWQuIAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBib29sOiBUcnVlIGlmIHRoZSB0cmFuc3BvcnQgaXMgb3BlbmVkLCBGYWxzZSBpbiBvdGhlcndpc2UKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEsIG5vZGVpZCk6CisgICAgICAgICIiIiBTZW5kIGRhdGEgdG8gdGhlIG5vZGUgd2l0aCBub2RlaWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRhdGEgKGJ5dGVhcnJheSk6IG91dGNvbWluZyBkYXRhLgorICAgICAgICAgICAgbm9kZWlkIChpbnQpOiBub2RlIGlkCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGludDogbnVtYmVyIG9mIHNlbnQgYnl0ZXMKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZWN2KHNlbGYsIGJ1ZnNpemUpOgorICAgICAgICAiIiIgUmVjZWl2ZSBkYXRhIHNlbnQgYnkgb3RoZXIgbm9kZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYnVmc2l6ZSAoaW50KTogc2l6ZSBvZiBidWZmZXIgZm9yIGluY29taW5nIGRhdGEuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgdHVwbGUgY29udGFpbnMgZGF0YSBhbmQgbm9kZSBpZC4gCisKKyAgICAgICAgICAgIEZvciBleGFtcGxlOgorICAgICAgICAgICAgKGJ5dGVhcnJheShbMHgwMCwgMHgwMS4uLl0sIDEpCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgU25pZmZlclNvY2tldFRyYW5zcG9ydChTbmlmZmVyVHJhbnNwb3J0KToKKyAgICAiIiIgU29ja2V0IGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNuaWZmZXIgdHJhbnNwb3J0LiAiIiIKKworICAgIEJBU0VfUE9SVCA9IDkwMDAKKworICAgIFdFTExLTk9XTl9OT0RFX0lEID0gMzQKKworICAgIFBPUlRfT0ZGU0VUID0gaW50KG9zLmdldGVudignUE9SVF9PRkZTRVQnLCAiMCIpKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGVpZCk6CisgICAgICAgIHNlbGYuX25vZGVpZCA9IG5vZGVpZAorICAgICAgICBzZWxmLl9zb2NrZXQgPSBOb25lCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfb3BlbmVkOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgX25vZGVpZF90b19hZGRyZXNzKHNlbGYsIG5vZGVpZCwgaXBfYWRkcmVzcz0iIik6CisgICAgICAgIHJldHVybiBpcF9hZGRyZXNzLCBzZWxmLkJBU0VfUE9SVCArIChzZWxmLlBPUlRfT0ZGU0VUICogc2VsZi5XRUxMS05PV05fTk9ERV9JRCkgKyBub2RlaWQKKworICAgIGRlZiBfYWRkcmVzc190b19ub2RlaWQoc2VsZiwgYWRkcmVzcyk6CisgICAgICAgIF8sIHBvcnQgPSBhZGRyZXNzCisgICAgICAgIHJldHVybiAocG9ydCAtIHNlbGYuQkFTRV9QT1JUIC0gKHNlbGYuUE9SVF9PRkZTRVQgKiBzZWxmLldFTExLTk9XTl9OT0RFX0lEKSkKKworICAgIGRlZiBvcGVuKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlzX29wZW5lZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVHJhbnNwb3J0IGlzIGFscmVhZHkgb3BlbmVkLiIpCisKKyAgICAgICAgc2VsZi5fc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfb3BlbmVkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJUcmFuc3BvcnQgb3BlbmluZyBmYWlsZWQuIikKKworICAgICAgICBzZWxmLl9zb2NrZXQuYmluZChzZWxmLl9ub2RlaWRfdG9fYWRkcmVzcyhzZWxmLl9ub2RlaWQpKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19vcGVuZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlRyYW5zcG9ydCBpcyBjbG9zZWQuIikKKworICAgICAgICBzZWxmLl9zb2NrZXQuY2xvc2UoKQorICAgICAgICBzZWxmLl9zb2NrZXQgPSBOb25lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfb3BlbmVkKHNlbGYpOgorICAgICAgICByZXR1cm4gYm9vbChzZWxmLl9zb2NrZXQgaXMgbm90IE5vbmUpCisKKyAgICBkZWYgc2VuZChzZWxmLCBkYXRhLCBub2RlaWQpOgorICAgICAgICBhZGRyZXNzID0gc2VsZi5fbm9kZWlkX3RvX2FkZHJlc3Mobm9kZWlkKQorCisgICAgICAgIHJldHVybiBzZWxmLl9zb2NrZXQuc2VuZHRvKGRhdGEsIGFkZHJlc3MpCisKKyAgICBkZWYgcmVjdihzZWxmLCBidWZzaXplKToKKyAgICAgICAgZGF0YSwgYWRkcmVzcyA9IHNlbGYuX3NvY2tldC5yZWN2ZnJvbShidWZzaXplKQorCisgICAgICAgIG5vZGVpZCA9IHNlbGYuX2FkZHJlc3NfdG9fbm9kZWlkKGFkZHJlc3MpCisKKyAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShkYXRhKSwgbm9kZWlkCisKKworY2xhc3MgTWFjRnJhbWUoY3R5cGVzLlN0cnVjdHVyZSk6CisgICAgX2ZpZWxkc18gPSBbKCJidWZmZXIiLCBjdHlwZXMuY191Ynl0ZSAqIDEyOCksCisgICAgICAgICAgICAgICAgKCJsZW5ndGgiLCBjdHlwZXMuY191Ynl0ZSksCisgICAgICAgICAgICAgICAgKCJub2RlaWQiLCBjdHlwZXMuY191aW50KV0KKworY2xhc3MgU25pZmZlclZpcnR1YWxUcmFuc3BvcnQoU25pZmZlclRyYW5zcG9ydCk6CisgICAgIiIiIFZpcnR1YWwgaW50ZXJmYWNlIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNuaWZmZXIgdHJhbnNwb3J0LiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub2RlaWQpOgorICAgICAgICBzZWxmLkhhbmRsZSA9IE5vbmUKKworICAgICAgICAjIExvYWQgdGhlIERMTAorICAgICAgICBzZWxmLkFwaSA9IGN0eXBlcy5XaW5ETEwoIm90bm9kZWFwaS5kbGwiKQorICAgICAgICBpZiBzZWxmLkFwaSA9PSBOb25lOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiRmFpbGVkIHRvIGxvYWQgb3Rub2RlYXBpLmRsbCEiKQorCisgICAgICAgICMgRGVmaW5lIHRoZSBmdW5jdGlvbnMKKyAgICAgICAgc2VsZi5BcGkub3RMaXN0ZW5lckluaXQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdWludF0KKyAgICAgICAgc2VsZi5BcGkub3RMaXN0ZW5lckluaXQucmVzdHlwZSA9IGN0eXBlcy5jX3ZvaWRfcAorCisgICAgICAgIHNlbGYuQXBpLm90TGlzdGVuZXJGaW5hbGl6ZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3RMaXN0ZW5lclJlYWQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCBjdHlwZXMuUE9JTlRFUihNYWNGcmFtZSldCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfb3BlbmVkOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgb3BlbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pc19vcGVuZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlRyYW5zcG9ydCBpcyBhbHJlYWR5IG9wZW5lZC4iKQorCisgICAgICAgICMgSW5pdGlhbGl6ZSBhIGxpc3RlbmVyCisgICAgICAgIHNlbGYuSGFuZGxlID0gc2VsZi5BcGkub3RMaXN0ZW5lckluaXQoMCkKKworICAgICAgICBpZiBub3Qgc2VsZi5pc19vcGVuZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlRyYW5zcG9ydCBvcGVuaW5nIGZhaWxlZC4iKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19vcGVuZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlRyYW5zcG9ydCBpcyBjbG9zZWQuIikKKworICAgICAgICBzZWxmLkFwaS5vdExpc3RlbmVyRmluYWxpemUoc2VsZi5IYW5kbGUpOworICAgICAgICBzZWxmLkhhbmRsZSA9IE5vbmUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19vcGVuZWQoc2VsZik6CisgICAgICAgIHJldHVybiBib29sKHNlbGYuSGFuZGxlIGlzIG5vdCBOb25lKQorCisgICAgZGVmIHJlY3Yoc2VsZiwgYnVmc2l6ZSk6CisgICAgICAgIGZyYW1lID0gTWFjRnJhbWUoKQorICAgICAgICBwRnJhbWUgPSBjdHlwZXMucG9pbnRlcihmcmFtZSk7CisKKyAgICAgICAgc2VsZi5BcGkub3RMaXN0ZW5lclJlYWQoc2VsZi5IYW5kbGUsIHBGcmFtZSkKKworICAgICAgICByZXR1cm4gYnl0ZWFycmF5KGZyYW1lLmJ1ZmZlcilbOmZyYW1lLmxlbmd0aF0sIGZyYW1lLm5vZGVpZAorCisKK2NsYXNzIFNuaWZmZXJUcmFuc3BvcnRGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgY3JlYXRlX3RyYW5zcG9ydChzZWxmLCBub2RlaWQpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKKyAgICAgICAgICAgIHJldHVybiBTbmlmZmVyU29ja2V0VHJhbnNwb3J0KG5vZGVpZCkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFNuaWZmZXJWaXJ0dWFsVHJhbnNwb3J0KG5vZGVpZCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9jb2FwLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2NvYXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDdlYmJhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9jb2FwLnB5CkBAIC0wLDAgKzEsNTI0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IGlvCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvYXAKK2ltcG9ydCBjb25maWcKKworCitkZWYgYW55X2RlbHRhKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg0KQorCisKK2RlZiBhbnlfY29hcF9vcHRpb25fdHlwZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNCkKKworCitkZWYgYW55X3ZhbHVlKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfNGJpdHNfdmFsdWVfZGlmZmVyZW50X3RoYW5fMTNfYW5kXzE0KCk6CisgICAgdmFsdWUgPSBOb25lCisgICAgd2hpbGUgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgdmFsdWUgPSByYW5kb20uZ2V0cmFuZGJpdHMoNCkKKyAgICAgICAgaWYgdmFsdWUgPT0gMTMgb3IgdmFsdWUgPT0gMTQ6CisgICAgICAgICAgICB2YWx1ZSA9IE5vbmUKKworICAgIHJldHVybiB2YWx1ZQorCisKK2RlZiBhbnlfNGJpdHNfdmFsdWVfbG93ZXJfb3JfZXF1YWxfdGhhbl8xMigpOgorICAgIHZhbHVlID0gTm9uZQorICAgIHdoaWxlIHZhbHVlIGlzIE5vbmU6CisgICAgICAgIHZhbHVlID0gcmFuZG9tLmdldHJhbmRiaXRzKDQpCisgICAgICAgIGlmIHZhbHVlID4gMTI6CisgICAgICAgICAgICB2YWx1ZSA9IE5vbmUKKworICAgIHJldHVybiB2YWx1ZQorCisKK2RlZiBhbnlfYnl0ZWFycmF5KGxlbmd0aCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGxlbmd0aCldKQorCisKK2RlZiBhbnlfdmVyc2lvbigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMikKKworCitkZWYgYW55X3R5cGUoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDIpCisKKworZGVmIGFueV9jb2RlKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfbWVzc2FnZV9pZCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTYpCisKKworZGVmIGFueV90b2tlbigpOgorICAgIGxlbmd0aCA9IHJhbmRvbS5yYW5kaW50KDAsIDgpCisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGxlbmd0aCldKQorCisKK2RlZiBhbnlfb3B0aW9ucygpOgorICAgIHJldHVybiBbXQorCisKK2RlZiBhbnlfcGF5bG9hZChsZW5ndGg9Tm9uZSk6CisgICAgbGVuZ3RoID0gbGVuZ3RoIGlmIGxlbmd0aCBpcyBub3QgTm9uZSBlbHNlIHJhbmRvbS5yYW5kaW50KDAsIDY0KQorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShsZW5ndGgpXSkKKworCitkZWYgYW55X3VyaV9wYXRoKCk6CisgICAgcmV0dXJuICIvIiArIHJhbmRvbS5jaG9pY2Uoc3RyaW5nLmFzY2lpX2xvd2VyY2FzZSkKKworCitjbGFzcyBUZXN0Q29hcE1lc3NhZ2VPcHRpb25IZWFkZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9wYXNzZWRfb25fdmFsdWVfd2hlbl9yZWFkX2V4dGVuZGVkX3ZhbHVlX2lzX2NhbGxlZF93aXRoX3ZhbHVlX2RpZmZlcmVudF90aGFuXzEzX2FuZF8xNChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB2YWx1ZSA9IGFueV80Yml0c192YWx1ZV9kaWZmZXJlbnRfdGhhbl8xM19hbmRfMTQoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdmFsdWUgPSBjb2FwLkNvYXBPcHRpb25IZWFkZXIuX3JlYWRfZXh0ZW5kZWRfdmFsdWUoTm9uZSwgdmFsdWUpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIGFjdHVhbF92YWx1ZSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdmFsdWVfc3RvcmVkX2luX2ZpcnN0X2J5dGVfcGx1c18xM193aGVuX3JlYWRfZXh0ZW5kZWRfdmFsdWVfaXNfY2FsbGVkX3dpdGhfdmFsdWVfZXF1YWxfMTMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdmFsdWUgPSAxMworICAgICAgICBleHRlbmRlZF92YWx1ZSA9IGFueV92YWx1ZSgpCisKKyAgICAgICAgZGF0YSA9IGlvLkJ5dGVzSU8oYnl0ZWFycmF5KFtleHRlbmRlZF92YWx1ZV0pKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdmFsdWUgPSBjb2FwLkNvYXBPcHRpb25IZWFkZXIuX3JlYWRfZXh0ZW5kZWRfdmFsdWUoZGF0YSwgdmFsdWUpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0ZW5kZWRfdmFsdWUgKyAxMywgYWN0dWFsX3ZhbHVlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl92YWx1ZV9zdG9yZWRfaW5fZmlyc3RfYnl0ZV9wbHVzXzI2OV93aGVuX3JlYWRfZXh0ZW5kZWRfdmFsdWVfaXNfY2FsbGVkX3dpdGhfdmFsdWVfZXF1YWxfMTQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdmFsdWUgPSAxNAorICAgICAgICBleHRlbmRlZF92YWx1ZSA9IGFueV92YWx1ZSgpCisKKyAgICAgICAgZGF0YSA9IGlvLkJ5dGVzSU8oYnl0ZWFycmF5KFthbnlfdmFsdWUoKSwgZXh0ZW5kZWRfdmFsdWVdKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3ZhbHVlID0gY29hcC5Db2FwT3B0aW9uSGVhZGVyLl9yZWFkX2V4dGVuZGVkX3ZhbHVlKGRhdGEsIHZhbHVlKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dGVuZGVkX3ZhbHVlICsgMjY5LCBhY3R1YWxfdmFsdWUpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0NvYXBPcHRpb25IZWFkZXJfd2hlbl9mcm9tX2J5dGVzX2NsYXNzbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkZWx0YSA9IGFueV80Yml0c192YWx1ZV9kaWZmZXJlbnRfdGhhbl8xM19hbmRfMTQoKQorICAgICAgICBsZW5ndGggPSBhbnlfNGJpdHNfdmFsdWVfZGlmZmVyZW50X3RoYW5fMTNfYW5kXzE0KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtkZWx0YSA8PCA0IHwgbGVuZ3RoXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgb3B0aW9uX2hlYWRlciA9IGNvYXAuQ29hcE9wdGlvbkhlYWRlci5mcm9tX2J5dGVzKGlvLkJ5dGVzSU8oZGF0YSkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVsdGEsIG9wdGlvbl9oZWFkZXIuZGVsdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoLCBvcHRpb25faGVhZGVyLmxlbmd0aCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fVHJ1ZV93aGVuX2lzX3BheWxvYWRfbWFya2VyX3Byb3BlcnR5X2NhbGxlZF93aXRoX2RlbHRhX2FuZF9sZW5ndGhfZXF1YWxfMTUoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGVsdGEgPSAxNQorICAgICAgICBsZW5ndGggPSAxNQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW2RlbHRhIDw8IDQgfCBsZW5ndGhdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBvcHRpb25faGVhZGVyID0gY29hcC5Db2FwT3B0aW9uSGVhZGVyLmZyb21fYnl0ZXMoaW8uQnl0ZXNJTyhkYXRhKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wdGlvbl9oZWFkZXIuaXNfcGF5bG9hZF9tYXJrZXIpCisKKworY2xhc3MgVGVzdENvYXBPcHRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl90eXBlX3ZhbHVlX3doZW5fdHlwZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgX3R5cGUgPSBhbnlfY29hcF9vcHRpb25fdHlwZSgpCisKKyAgICAgICAgY29hcF9vcHQgPSBjb2FwLkNvYXBPcHRpb24oX3R5cGUsIGFueV92YWx1ZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdHlwZSA9IGNvYXBfb3B0LnR5cGUKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdHlwZSwgYWN0dWFsX3R5cGUpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3ZhbHVlX3ZhbHVlX3doZW5fdmFsdWVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHZhbHVlID0gYW55X3ZhbHVlKCkKKworICAgICAgICBjb2FwX29wdCA9IGNvYXAuQ29hcE9wdGlvbihhbnlfY29hcF9vcHRpb25fdHlwZSgpLCB2YWx1ZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3ZhbHVlID0gY29hcF9vcHQudmFsdWUKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgYWN0dWFsX3ZhbHVlKQorCisKK2NsYXNzIFRlc3RDb2FwT3B0aW9uc0ZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9saXN0X29mX0NvYXBPcHRpb25fZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRlbHRhID0gYW55XzRiaXRzX3ZhbHVlX2xvd2VyX29yX2VxdWFsX3RoYW5fMTIoKQorICAgICAgICBsZW5ndGggPSBhbnlfNGJpdHNfdmFsdWVfbG93ZXJfb3JfZXF1YWxfdGhhbl8xMigpCisgICAgICAgIHZhbHVlID0gYW55X2J5dGVhcnJheShsZW5ndGgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbZGVsdGEgPDwgNCB8IGxlbmd0aF0pICsgdmFsdWUKKworICAgICAgICBmYWN0b3J5ID0gY29hcC5Db2FwT3B0aW9uc0ZhY3RvcnkoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBjb2FwX29wdGlvbnMgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIE5vbmUpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGNvYXBfb3B0aW9ucykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVsdGEsIGNvYXBfb3B0aW9uc1swXS50eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBjb2FwX29wdGlvbnNbMF0udmFsdWUpCisKKworY2xhc3MgVGVzdENvYXBDb2RlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fY29kZV92YWx1ZV93aGVuX2NvZGVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNvZGUgPSBhbnlfY29kZSgpCisKKyAgICAgICAgY29kZV9vYmogPSBjb2FwLkNvYXBDb2RlKGNvZGUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9jb2RlID0gY29kZV9vYmouY29kZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIGFjdHVhbF9jb2RlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9jbGFzc192YWx1ZV93aGVuX2NsYXNzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjb2RlID0gYW55X2NvZGUoKQorCisgICAgICAgIGNvZGVfb2JqID0gY29hcC5Db2FwQ29kZShjb2RlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfY2xhc3MgPSBjb2RlX29iai5fY2xhc3MKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoY29kZSA+PiA1KSAmIDB4NywgYWN0dWFsX2NsYXNzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9kZXRhaWxfdmFsdWVfd2hlbl9kZXRhaWxfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNvZGUgPSBhbnlfY29kZSgpCisKKyAgICAgICAgY29kZV9vYmogPSBjb2FwLkNvYXBDb2RlKGNvZGUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kZXRhaWwgPSBjb2RlX29iai5kZXRhaWwKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlICYgMHgxZiwgYWN0dWFsX2RldGFpbCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fZG90dGVkX3ZhbHVlX3doZW5fZG90dGVkX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjb2RlID0gYW55X2NvZGUoKQorCisgICAgICAgIGNvZGVfb2JqID0gY29hcC5Db2FwQ29kZShjb2RlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZG90dGVkID0gY29kZV9vYmouZG90dGVkCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIF9jbGFzcywgZGV0YWlsID0gYWN0dWFsX2RvdHRlZC5zcGxpdCgiLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZSwgKGludChfY2xhc3MpIDw8IDUpIHwgaW50KGRldGFpbCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0NvYXBDb2RlX3doZW5fZnJvbV9jbGFzc19hbmRfZGV0YWlsX2NsYXNzbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjb2RlID0gYW55X2NvZGUoKQorCisgICAgICAgIF9jbGFzcyA9IChjb2RlID4+IDUpICYgMHg3CisgICAgICAgIGRldGFpbCA9IGNvZGUgJiAweDFmCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9jb2FwX29iaiA9IGNvYXAuQ29hcENvZGUuZnJvbV9jbGFzc19hbmRfZGV0YWlsKF9jbGFzcywgZGV0YWlsKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIGFjdHVhbF9jb2FwX29iai5jb2RlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9Db2FwQ29kZV93aGVuX2Zyb21fZG90dGVkX3N0cmluZ19jbGFzc21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY29kZSA9IGFueV9jb2RlKCkKKworICAgICAgICBjb2RlX29iaiA9IGNvYXAuQ29hcENvZGUoY29kZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NvYXBfb2JqID0gY29hcC5Db2FwQ29kZS5mcm9tX2RvdHRlZChjb2RlX29iai5kb3R0ZWQpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZSwgYWN0dWFsX2NvYXBfb2JqLmNvZGUpCisKKworY2xhc3MgVGVzdENvYXBNZXNzYWdlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdmVyc2lvbl92YWx1ZV93aGVuX3ZlcnNpb25fcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHZlcnNpb24gPSBhbnlfdmVyc2lvbigpCisKKyAgICAgICAgY29hcF9tZXNzYWdlID0gY29hcC5Db2FwTWVzc2FnZSh2ZXJzaW9uLCBhbnlfdHlwZSgpLCBhbnlfY29kZSgpLCBhbnlfbWVzc2FnZV9pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV90b2tlbigpLCBhbnlfb3B0aW9ucygpLCBhbnlfcGF5bG9hZCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdmVyc2lvbiA9IGNvYXBfbWVzc2FnZS52ZXJzaW9uCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVyc2lvbiwgYWN0dWFsX3ZlcnNpb24pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3R5cGVfdmFsdWVfd2hlbl90eXBlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBfdHlwZSA9IGFueV90eXBlKCkKKworICAgICAgICBjb2FwX21lc3NhZ2UgPSBjb2FwLkNvYXBNZXNzYWdlKGFueV92ZXJzaW9uKCksIF90eXBlLCBhbnlfY29kZSgpLCBhbnlfbWVzc2FnZV9pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV90b2tlbigpLCBhbnlfb3B0aW9ucygpLCBhbnlfcGF5bG9hZCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdHlwZSA9IGNvYXBfbWVzc2FnZS50eXBlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3R5cGUsIGFjdHVhbF90eXBlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9jb2RlX3ZhbHVlX3doZW5fY29kZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY29kZSA9IGFueV9jb2RlKCkKKworICAgICAgICBjb2FwX21lc3NhZ2UgPSBjb2FwLkNvYXBNZXNzYWdlKGFueV92ZXJzaW9uKCksIGFueV90eXBlKCksIGNvZGUsIGFueV9tZXNzYWdlX2lkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3Rva2VuKCksIGFueV9vcHRpb25zKCksIGFueV9wYXlsb2FkKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9jb2RlID0gY29hcF9tZXNzYWdlLmNvZGUKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLCBhY3R1YWxfY29kZSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fbWVzc2FnZV9pZF92YWx1ZV93aGVuX21lc3NhZ2VfaWRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1lc3NhZ2VfaWQgPSBhbnlfbWVzc2FnZV9pZCgpCisKKyAgICAgICAgY29hcF9tZXNzYWdlID0gY29hcC5Db2FwTWVzc2FnZShhbnlfdmVyc2lvbigpLCBhbnlfdHlwZSgpLCBhbnlfY29kZSgpLCBtZXNzYWdlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV90b2tlbigpLCBhbnlfb3B0aW9ucygpLCBhbnlfcGF5bG9hZCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbWVzc2FnZV9pZCA9IGNvYXBfbWVzc2FnZS5tZXNzYWdlX2lkCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZV9pZCwgYWN0dWFsX21lc3NhZ2VfaWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3Rva2VuX3ZhbHVlX3doZW5fdG9rZW5fcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHRva2VuID0gYW55X3Rva2VuKCkKKworICAgICAgICBjb2FwX21lc3NhZ2UgPSBjb2FwLkNvYXBNZXNzYWdlKGFueV92ZXJzaW9uKCksIGFueV90eXBlKCksIGFueV9jb2RlKCksIGFueV9tZXNzYWdlX2lkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sIGFueV9vcHRpb25zKCksIGFueV9wYXlsb2FkKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90b2tlbiA9IGNvYXBfbWVzc2FnZS50b2tlbgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRva2VuLCBhY3R1YWxfdG9rZW4pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3RrbF92YWx1ZV93aGVuX3RrbF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdG9rZW4gPSBhbnlfdG9rZW4oKQorCisgICAgICAgIGNvYXBfbWVzc2FnZSA9IGNvYXAuQ29hcE1lc3NhZ2UoYW55X3ZlcnNpb24oKSwgYW55X3R5cGUoKSwgYW55X2NvZGUoKSwgYW55X21lc3NhZ2VfaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgYW55X29wdGlvbnMoKSwgYW55X3BheWxvYWQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3RrbCA9IGNvYXBfbWVzc2FnZS50a2wKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odG9rZW4pLCBhY3R1YWxfdGtsKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9vcHRpb25zX3ZhbHVlX3doZW5fb3B0aW9uc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgb3B0aW9ucyA9IGFueV9vcHRpb25zKCkKKworICAgICAgICBjb2FwX21lc3NhZ2UgPSBjb2FwLkNvYXBNZXNzYWdlKGFueV92ZXJzaW9uKCksIGFueV90eXBlKCksIGFueV9jb2RlKCksIGFueV9tZXNzYWdlX2lkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3Rva2VuKCksIG9wdGlvbnMsIGFueV9wYXlsb2FkKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9vcHRpb25zID0gY29hcF9tZXNzYWdlLm9wdGlvbnMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb25zLCBhY3R1YWxfb3B0aW9ucykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcGF5bG9hZF92YWx1ZV93aGVuX3BheWxvYWRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHBheWxvYWQgPSBhbnlfcGF5bG9hZCgpCisKKyAgICAgICAgY29hcF9tZXNzYWdlID0gY29hcC5Db2FwTWVzc2FnZShhbnlfdmVyc2lvbigpLCBhbnlfdHlwZSgpLCBhbnlfY29kZSgpLCBhbnlfbWVzc2FnZV9pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV90b2tlbigpLCBhbnlfb3B0aW9ucygpLCBwYXlsb2FkKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcGF5bG9hZCA9IGNvYXBfbWVzc2FnZS5wYXlsb2FkCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF5bG9hZCwgYWN0dWFsX3BheWxvYWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3VyaV9wYXRoX3ZhbHVlX3doZW5fdXJpX3BhdGhfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHVyaV9wYXRoID0gYW55X3VyaV9wYXRoKCkKKworICAgICAgICBjb2FwX21lc3NhZ2UgPSBjb2FwLkNvYXBNZXNzYWdlKGFueV92ZXJzaW9uKCksIGFueV90eXBlKCksIGFueV9jb2RlKCksIGFueV9tZXNzYWdlX2lkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3Rva2VuKCksIGFueV9vcHRpb25zKCksIGFueV9wYXlsb2FkKCksIHVyaV9wYXRoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdXJpX3BhdGggPSBjb2FwX21lc3NhZ2UudXJpX3BhdGgKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmlfcGF0aCwgYWN0dWFsX3VyaV9wYXRoKQorCisKK2NsYXNzIFRlc3RDb2FwTWVzc2FnZUlkVG9VcmlQYXRoQmluZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9hZGRfdXJpX3BhdGhfdG9fYmluZHNfd2hlbl9hZGRfdXJpX3BhdGhfZm9yX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWVzc2FnZV9pZCA9IGFueV9tZXNzYWdlX2lkKCkKKyAgICAgICAgdG9rZW4gPSBhbnlfdG9rZW4oKQorICAgICAgICB1cmlfcGF0aCA9IGFueV91cmlfcGF0aCgpCisKKyAgICAgICAgYmluZGVyID0gY29hcC5Db2FwTWVzc2FnZUlkVG9VcmlQYXRoQmluZGVyKCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYmluZGVyLmFkZF91cmlfcGF0aF9mb3IobWVzc2FnZV9pZCwgdG9rZW4sIHVyaV9wYXRoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaV9wYXRoLCBiaW5kZXIuZ2V0X3VyaV9wYXRoX2ZvcihtZXNzYWdlX2lkLCB0b2tlbikpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmFpc2VfS2V5RXJyb3Jfd2hlbl9nZXRfdXJpX3BhdGhfZm9yX2lzX2NhbGxlZF9idXRfaXRfaXNfbm90X3ByZXNlbnRfaW5fZGF0YWJhc2Uoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWVzc2FnZV9pZCA9IGFueV9tZXNzYWdlX2lkKCkKKyAgICAgICAgdG9rZW4gPSBhbnlfdG9rZW4oKQorICAgICAgICB1cmlfcGF0aCA9IGFueV91cmlfcGF0aCgpCisKKyAgICAgICAgYmluZGVyID0gY29hcC5Db2FwTWVzc2FnZUlkVG9VcmlQYXRoQmluZGVyKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBiaW5kZXIuZ2V0X3VyaV9wYXRoX2ZvciwgbWVzc2FnZV9pZCwgdG9rZW4pCisKKworY2xhc3MgVGVzdENvYXBNZXNzYWdlRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2NyZWF0ZV9kdW1teV9wYXlsb2FkX2ZhY3Rvcnkoc2VsZik6CisgICAgICAgIGNsYXNzIER1bW15UGF5bG9hZEZhY3Rvcnk6CisKKyAgICAgICAgICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnJlYWQoKQorCisgICAgICAgIHJldHVybiBEdW1teVBheWxvYWRGYWN0b3J5KCkKKworICAgIGRlZiBfY3JlYXRlX2NvYXBfbWVzc2FnZV9mYWN0b3J5KHNlbGYpOgorICAgICAgICByZXR1cm4gY29hcC5Db2FwTWVzc2FnZUZhY3RvcnkoCisgICAgICAgICAgICBvcHRpb25zX2ZhY3Rvcnk9Y29hcC5Db2FwT3B0aW9uc0ZhY3RvcnkoKSwKKyAgICAgICAgICAgIHVyaV9wYXRoX2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgICAgICAiL2EvYXMiOiBzZWxmLl9jcmVhdGVfZHVtbXlfcGF5bG9hZF9mYWN0b3J5KCkKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBtZXNzYWdlX2lkX3RvX3VyaV9wYXRoX2JpbmRlcj1jb2FwLkNvYXBNZXNzYWdlSWRUb1VyaVBhdGhCaW5kZXIoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQ29hcE1lc3NhZ2VfZnJvbV9zb2xpY2l0X3JlcXVlc3RfZGF0YV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbMHg0MiwgMHgwMiwgMHgwMCwgMHhiZCwgMHg2NSwgMHhlZSwgMHhiMSwgMHg2MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHg2MSwgMHg3MywgMHhmZiwgMHgwMSwgMHgwOCwgMHgxNiwgMHg2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMl0pCisKKyAgICAgICAgZmFjdG9yeSA9IHNlbGYuX2NyZWF0ZV9jb2FwX21lc3NhZ2VfZmFjdG9yeSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGNvYXBfbWVzc2FnZSA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgTm9uZSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBjb2FwX21lc3NhZ2UudmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBjb2FwX21lc3NhZ2UudHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBjb2FwX21lc3NhZ2UudGtsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGNvYXBfbWVzc2FnZS5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE4OSwgY29hcF9tZXNzYWdlLm1lc3NhZ2VfaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDY1LCAweGVlXSksIGNvYXBfbWVzc2FnZS50b2tlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGNvYXBfbWVzc2FnZS5vcHRpb25zWzBdLnZhbHVlLmRlY29kZSgidXRmLTgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYXMiLCBjb2FwX21lc3NhZ2Uub3B0aW9uc1sxXS52YWx1ZS5kZWNvZGUoInV0Zi04IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIi9hL2FzIiwgY29hcF9tZXNzYWdlLnVyaV9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgwMSwgMHgwOCwgMHgxNiwgMHg2ZSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDJdKSwgY29hcF9tZXNzYWdlLnBheWxvYWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0NvYXBNZXNzYWdlX2Zyb21fc29saWNpdF9yZXNwb25zZV9kYXRhX3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsweDYyLCAweDQ0LCAweDAwLCAweGJkLCAweDY1LCAweGVlLCAweGZmLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxLCAweDAwLCAweDAyLCAweDAyLCAweDAwLCAweDAwLCAweDA3LCAweDA5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDc2LCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwXSkKKworICAgICAgICBtaWRfYmluZGVyID0gY29hcC5Db2FwTWVzc2FnZUlkVG9VcmlQYXRoQmluZGVyKCkKKyAgICAgICAgbWlkX2JpbmRlci5hZGRfdXJpX3BhdGhfZm9yKDE4OSwgYnl0ZWFycmF5KFsweDY1LCAweGVlXSksICIvYS9hcyIpCisKKyAgICAgICAgZmFjdG9yeSA9IGNvYXAuQ29hcE1lc3NhZ2VGYWN0b3J5KAorICAgICAgICAgICAgb3B0aW9uc19mYWN0b3J5PWNvYXAuQ29hcE9wdGlvbnNGYWN0b3J5KCksCisgICAgICAgICAgICB1cmlfcGF0aF9iYXNlZF9wYXlsb2FkX2ZhY3Rvcmllcz17CisgICAgICAgICAgICAgICAgIi9hL2FzIjogc2VsZi5fY3JlYXRlX2R1bW15X3BheWxvYWRfZmFjdG9yeSgpCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgbWVzc2FnZV9pZF90b191cmlfcGF0aF9iaW5kZXI9bWlkX2JpbmRlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgY29hcF9tZXNzYWdlID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBOb25lKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGNvYXBfbWVzc2FnZS52ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGNvYXBfbWVzc2FnZS50eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGNvYXBfbWVzc2FnZS50a2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjIuMDQiLCBjb2FwX21lc3NhZ2UuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxODksIGNvYXBfbWVzc2FnZS5tZXNzYWdlX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHg2NSwgMHhlZV0pLCBjb2FwX21lc3NhZ2UudG9rZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgY29hcF9tZXNzYWdlLnVyaV9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgwNCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksIDB4NzYsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwXSksIGNvYXBfbWVzc2FnZS5wYXlsb2FkKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2NvbW1vbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9jb21tb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGNlNGMzNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9jb21tb24ucHkKQEAgLTAsMCArMSwxNjkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgaXBhZGRyZXNzCisKK2ltcG9ydCBjb21tb24KKworCitkZWYgYW55X2V1aTY0KCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDgpXSkKKworCitkZWYgYW55X3Jsb2MxNl9pbnQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE2KQorCisKK2RlZiBhbnlfcmxvYzE2X2J5dGVhcnJheSgpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSgyKV0pCisKKworZGVmIGFueV9pcHY2X2FkZHJlc3MoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoMTYpXSkKKworCitjbGFzcyBUZXN0TWVzc2FnZUluZm8odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zb3VyY2VfaXB2Nl92YWx1ZV93aGVuX3NvdXJjZV9pcHY2X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzb3VyY2VfaXB2NiA9IGFueV9pcHY2X2FkZHJlc3MoKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfaXB2NiA9IHNvdXJjZV9pcHY2CisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zb3VyY2VfaXB2NiA9IG1lc3NhZ2VfaW5mby5zb3VyY2VfaXB2NgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkcmVzcy5pcF9hZGRyZXNzKGJ5dGVzKHNvdXJjZV9pcHY2KSksIGFjdHVhbF9zb3VyY2VfaXB2NikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fZGVzdGluYXRpb25faXB2Nl92YWx1ZV93aGVuX2Rlc3RpbmF0aW9uX2lwdjZfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRlc3RpbmF0aW9uX2lwdjYgPSBhbnlfaXB2Nl9hZGRyZXNzKCkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25faXB2NiA9IGRlc3RpbmF0aW9uX2lwdjYKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2Rlc3RpbmF0aW9uX2lwdjYgPSBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25faXB2NgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkcmVzcy5pcF9hZGRyZXNzKGJ5dGVzKGRlc3RpbmF0aW9uX2lwdjYpKSwgYWN0dWFsX2Rlc3RpbmF0aW9uX2lwdjYpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3NvdXJjZV9ldWk2NF92YWx1ZV93aGVuX3NvdXJjZV9ldWk2NF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc291cmNlX21hY19hZGRyZXNzID0gYW55X2V1aTY0KCkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gc291cmNlX21hY19hZGRyZXNzCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zb3VyY2VfbWFjX2FkZHJlc3MgPSBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cmNlX21hY19hZGRyZXNzLCBhY3R1YWxfc291cmNlX21hY19hZGRyZXNzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9kZXN0aW5hdGlvbl9ldWk2NF92YWx1ZV93aGVuX2Rlc3RpbmF0aW9uX2V1aTY0X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGFueV9ldWk2NCgpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gZGVzdGluYXRpb25fbWFjX2FkZHJlc3MKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2Rlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzdGluYXRpb25fbWFjX2FkZHJlc3MsIGFjdHVhbF9kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcykKKworCitjbGFzcyBUZXN0TWFjQWRkcmVzcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX01hY0FkZHJlc3NfZnJvbV9ldWk2NF93aGVuX2Zyb21fZXVpNjRfY2xhc3NtZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGV1aTY0ID0gYW55X2V1aTY0KCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KGV1aTY0KQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1vbi5NYWNBZGRyZXNzVHlwZS5MT05HLCBtYWNfYWRkcmVzcy50eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV1aTY0LCBtYWNfYWRkcmVzcy5tYWNfYWRkcmVzcykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTWFjQWRkcmVzc19mcm9tX3Jsb2MxNl9pbnRfd2hlbl9mcm9tX3Jsb2MxNl9jbGFzc21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcmxvYzE2ID0gYW55X3Jsb2MxNl9pbnQoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBtYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fcmxvYzE2KGludChybG9jMTYpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1vbi5NYWNBZGRyZXNzVHlwZS5TSE9SVCwgbWFjX2FkZHJlc3MudHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ1Y3QucGFjaygiPkgiLCBybG9jMTYpLCBtYWNfYWRkcmVzcy5tYWNfYWRkcmVzcykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTWFjQWRkcmVzc19mcm9tX3Jsb2MxNl9ieXRlYXJyYXlfd2hlbl9mcm9tX3Jsb2MxNl9jbGFzc21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcmxvYzE2ID0gYW55X3Jsb2MxNl9ieXRlYXJyYXkoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBtYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fcmxvYzE2KHJsb2MxNikKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tb24uTWFjQWRkcmVzc1R5cGUuU0hPUlQsIG1hY19hZGRyZXNzLnR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmxvYzE2LCBtYWNfYWRkcmVzcy5tYWNfYWRkcmVzcykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jb252ZXJ0X3Nob3J0X01hY0FkZHJlc3NfdG9faWlkX3doZW5fY29udmVydF9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHJsb2MxNiA9IGFueV9ybG9jMTZfYnl0ZWFycmF5KCkKKworICAgICAgICBtYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fcmxvYzE2KHJsb2MxNikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaWlkID0gbWFjX2FkZHJlc3MuY29udmVydF90b19paWQoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZSwgMHgwMF0pICsgcmxvYzE2LCBpaWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY29udmVydF9zaG9ydF9NYWNBZGRyZXNzX3RvX2lpZF93aGVuX2NvbnZlcnRfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBldWk2NCA9IGFueV9ldWk2NCgpCisKKyAgICAgICAgbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KGV1aTY0KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpaWQgPSBtYWNfYWRkcmVzcy5jb252ZXJ0X3RvX2lpZCgpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFtldWk2NFswXSBeIDB4MDJdKSArIGV1aTY0WzE6XSwgaWlkKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfY3J5cHRvLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2NyeXB0by5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NGY4NjNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2NyeXB0by5weQpAQCAtMCwwICsxLDQzMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBpbworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgaXBhZGRyZXNzCisKK2ltcG9ydCBjb21tb24KK2ltcG9ydCBuZXRfY3J5cHRvCitpbXBvcnQgbWxlCisKK21hc3Rlcl9rZXkgPSBieXRlYXJyYXkoWzB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmXSkKKworCitkZWYgY29udmVydF9hdXhfc2VjX2hkcl90b19ieXRlYXJyYXkoYXV4X3NlY19oZHIpOgorICAgIGRhdGEgPSBieXRlYXJyYXkoW2F1eF9zZWNfaGRyLnNlY3VyaXR5X2xldmVsIHwgKChhdXhfc2VjX2hkci5rZXlfaWRfbW9kZSAmIDB4MDMpIDw8IDMpXSkKKyAgICBkYXRhICs9IHN0cnVjdC5wYWNrKCI8TCIsIGF1eF9zZWNfaGRyLmZyYW1lX2NvdW50ZXIpCisgICAgZGF0YSArPSBhdXhfc2VjX2hkci5rZXlfaWQKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBhbnlfZXVpNjQoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoOCldKQorCisKK2RlZiBhbnlfc2VjdXJpdHlfbGV2ZWwoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDMpCisKKworZGVmIGFueV9rZXlfaWRfbW9kZSgpOgorICAgICIiIgorICAgIE9ubHkga2V5IGlkIG1vZGUgMi4KKyAgICAiIiIKKyAgICByZXR1cm4gMgorCisKK2RlZiBhbnlfa2V5X2lkKGtleV9pZF9tb2RlKToKKyAgICBpZiBrZXlfaWRfbW9kZSA9PSAyOgorICAgICAgICBsZW5ndGggPSA1CisKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKV0pCisKKworZGVmIGFueV9hdXhpbGlhcnlfc2VjdXJpdHlfaGVhZGVyKCk6CisgICAga2V5X2lkX21vZGUgPSBhbnlfa2V5X2lkX21vZGUoKQorICAgIGtleV9pZCA9IGFueV9rZXlfaWQoa2V5X2lkX21vZGUpCisKKyAgICByZXR1cm4gbmV0X2NyeXB0by5BdXhpbGlhcnlTZWN1cml0eUhlYWRlcihrZXlfaWRfbW9kZSwgYW55X3NlY3VyaXR5X2xldmVsKCksIGFueV9mcmFtZV9jb3VudGVyKCksIGtleV9pZCkKKworCitkZWYgYW55X2ZyYW1lX2NvdW50ZXIoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDMyKQorCisKK2RlZiBhbnlfaXBfYWRkcmVzcygpOgorICAgIGlwX2FkZHJlc3NfYnl0ZXMgPSBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSgxNildKQorICAgIHJldHVybiBpcGFkZHJlc3MuaXBfYWRkcmVzcyhieXRlcyhpcF9hZGRyZXNzX2J5dGVzKSkKKworCitkZWYgYW55X2RhdGEobGVuZ3RoPU5vbmUpOgorICAgIGxlbmd0aCA9IGxlbmd0aCBpZiBsZW5ndGggaXMgbm90IE5vbmUgZWxzZSByYW5kb20ucmFuZGludCgwLCAxMjgpCisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGxlbmd0aCldKQorCisKK2RlZiBhbnlfbWFzdGVyX2tleSgpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSgxNildKQorCisKK2NsYXNzIFRlc3RDcnlwdG9FbmdpbmUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2RlY3J5cHRfYnl0ZWFycmF5X3RvX21sZV9tZXNzYWdlX3doZW5fZGVjcnlwdF9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDM1LCAweGNjLCAweDk0LCAweGQ3LCAweDdhLCAweDA3LCAweGU4XSkpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9pcHY2ID0gImZlODA6OjIzNTpjYzk0OmQ3N2E6MDdlOCIKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX2lwdjYgPSAiZmYwMjo6MiIKKworICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIgPSBuZXRfY3J5cHRvLkF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKGtleV9pZF9tb2RlPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlfbGV2ZWw9NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZV9jb3VudGVyPTI2MjE2NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfaWQ9Ynl0ZWFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkcl9ieXRlcyA9IGNvbnZlcnRfYXV4X3NlY19oZHJfdG9fYnl0ZWFycmF5KG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkcikKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsweDlhLCAweDVhLCAweDlhLCAweDViLCAweGJhLCAweDI1LCAweDljLCAweDVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDU4LCAweGEyLCAweDdlLCAweDc1LCAweDc0LCAweGVmLCAweDc5LCAweGJjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDRmLCAweGEzLCAweGY5LCAweGFlLCAweGE4LCAweDM0LCAweGY2LCAweGYyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDM3LCAweDIxLCAweDkzLCAweDYwXSkKKworICAgICAgICBtaWMgPSBieXRlYXJyYXkoWzB4ZTEsIDB4YjUsIDB4YTIsIDB4NTNdKQorCisgICAgICAgIG5ldF9jcnlwdG9fZW5naW5lID0gbmV0X2NyeXB0by5DcnlwdG9FbmdpbmUobmV0X2NyeXB0by5NbGVDcnlwdG9NYXRlcmlhbENyZWF0b3IobWFzdGVyX2tleSkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG1sZV9tc2cgPSBuZXRfY3J5cHRvX2VuZ2luZS5kZWNyeXB0KGRhdGEsIG1pYywgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBleHBlY3RlZF9tbGVfbXNnID0gYnl0ZWFycmF5KFsweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA5LCAweDBiLCAweDhmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxLCAweGYxLCAweDBiLCAweDA4LCAweDY1LCAweDVlLCAweDBmLCAweDgzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwLCAweGM3LCAweDgzLCAweDMxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9tbGVfbXNnLCBtbGVfbXNnKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2VuY3J5cHRfbWxlX21lc3NhZ2VfdG9fYnl0ZWFycmF5X3doZW5fZW5jcnlwdF9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDM1LCAweGNjLCAweDk0LCAweGQ3LCAweDdhLCAweDA3LCAweGU4XSkpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9pcHY2ID0gImZlODA6OjIzNTpjYzk0OmQ3N2E6MDdlOCIKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX2lwdjYgPSAiZmYwMjo6MiIKKworICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIgPSBuZXRfY3J5cHRvLkF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKGtleV9pZF9tb2RlPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlfbGV2ZWw9NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZV9jb3VudGVyPTI2MjE2NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfaWQ9Ynl0ZWFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkcl9ieXRlcyA9IGNvbnZlcnRfYXV4X3NlY19oZHJfdG9fYnl0ZWFycmF5KG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkcikKKworICAgICAgICBtbGVfbXNnID0gYnl0ZWFycmF5KFsweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA5LCAweDBiLCAweDhmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxLCAweGYxLCAweDBiLCAweDA4LCAweDY1LCAweDVlLCAweDBmLCAweDgzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwLCAweGM3LCAweDgzLCAweDMxXSkKKworICAgICAgICBuZXRfY3J5cHRvX2VuZ2luZSA9IG5ldF9jcnlwdG8uQ3J5cHRvRW5naW5lKG5ldF9jcnlwdG8uTWxlQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yKG1hc3Rlcl9rZXkpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBlbmNyeXB0ZWRfZGF0YSwgbWljID0gbmV0X2NyeXB0b19lbmdpbmUuZW5jcnlwdChtbGVfbXNnLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIGV4cGVjdGVkX2VuY3J5cHRlZF9kYXRhID0gYnl0ZWFycmF5KFsweDlhLCAweDVhLCAweDlhLCAweDViLCAweGJhLCAweDI1LCAweDljLCAweDVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1OCwgMHhhMiwgMHg3ZSwgMHg3NSwgMHg3NCwgMHhlZiwgMHg3OSwgMHhiYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGYsIDB4YTMsIDB4ZjksIDB4YWUsIDB4YTgsIDB4MzQsIDB4ZjYsIDB4ZjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM3LCAweDIxLCAweDkzLCAweDYwLCAweGUxLCAweGI1LCAweGEyLCAweDUzXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2VuY3J5cHRlZF9kYXRhLCBlbmNyeXB0ZWRfZGF0YSArIG1pYykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9lbmNyeXB0X2FuZF9kZWNyeXB0X3JhbmRvbV9kYXRhX2NvbnRlbnRfd2hlbl9wcm9wZXJfbWV0aG9kc19hcmVfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBhbnlfZGF0YSgpCisKKyAgICAgICAgbWFzdGVyX2tleSA9IGFueV9tYXN0ZXJfa2V5KCkKKworICAgICAgICBrZXlfaWRfbW9kZSA9IDIKKyAgICAgICAgc2VjdXJpdHlfbGV2ZWwgPSA1CisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoYW55X2V1aTY0KCkpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9pcHY2ID0gYW55X2lwX2FkZHJlc3MoKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25faXB2NiA9IGFueV9pcF9hZGRyZXNzKCkKKworICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIgPSBuZXRfY3J5cHRvLkF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKGtleV9pZF9tb2RlPWtleV9pZF9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5X2xldmVsPXNlY3VyaXR5X2xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lX2NvdW50ZXI9YW55X2ZyYW1lX2NvdW50ZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfaWQ9YW55X2tleV9pZChrZXlfaWRfbW9kZSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkcl9ieXRlcyA9IGNvbnZlcnRfYXV4X3NlY19oZHJfdG9fYnl0ZWFycmF5KG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkcikKKworICAgICAgICBuZXRfY3J5cHRvX2VuZ2luZSA9IG5ldF9jcnlwdG8uQ3J5cHRvRW5naW5lKG5ldF9jcnlwdG8uTWxlQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yKG1hc3Rlcl9rZXkpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBlbmNfZGF0YSwgbWljID0gbmV0X2NyeXB0b19lbmdpbmUuZW5jcnlwdChkYXRhLCBtZXNzYWdlX2luZm8pCisgICAgICAgIGRlY19kYXRhID0gbmV0X2NyeXB0b19lbmdpbmUuZGVjcnlwdChlbmNfZGF0YSwgbWljLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZGVjX2RhdGEpCisKKworY2xhc3MgVGVzdENyeXB0b01hdGVyaWFsQ3JlYXRvcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiIgS2V5IGdlbmVyYWlvbiB3YXMgZGVzY3JpYmVkIGluIFRocmVhZCBzcGVjaWZpY2F0aW9uLgorCisgICAgUmVhZCBtb3JlOiBUaHJlYWQgMS4xLjAgU3BlY2lmaWNhdGlvbiBDYW5kaWRhdGUgRmluYWwgLSA3LjEuNCBLZXkgR2VuZXJhdGlvbgorCisgICAgVGVzdCB2ZWN0b3JzIHdhcyB0YWtlbiBmcm9tIHRocmVhZCBzcGVjaWZpY2F0aW9uLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2dlbmVyYXRlX21sZV9hbmRfbWFjX2tleV93aGVuX2dlbmVyYXRlX2tleXNfbWV0aG9kX2lzX2NhbGxlZF93aXRoX3NlcXVlbmNlX2NvdW50ZXJfZXF1YWxfMChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIDcuMS40LjEgVGVzdCBWZWN0b3IgMQorICAgICAgICAiIiIKKworICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlcXVlbmNlX2NvdW50ZXIgPSAwCisKKyAgICAgICAgY3JlYXRvciA9IG5ldF9jcnlwdG8uQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yKG1hc3Rlcl9rZXkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG1sZV9rZXksIG1hY19rZXkgPSBjcmVhdG9yLl9nZW5lcmF0ZV9rZXlzKHNlcXVlbmNlX2NvdW50ZXIpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlX2tleSwgYnl0ZWFycmF5KFsweDU0LCAweDQ1LCAweGY0LCAweDE1LCAweDhmLCAweGQ3LCAweDU5LCAweDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNywgMHg1OCwgMHgwOSwgMHhmOCwgMHhiNSwgMHg3YSwgMHg2NiwgMHhhNF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hY19rZXksIGJ5dGVhcnJheShbMHhkZSwgMHg4OSwgMHhjNSwgMHgzYSwgMHhmMywgMHg4MiwgMHhiNCwgMHgyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAsIDB4ZmQsIDB4ZTUsIDB4YTksIDB4YmEsIDB4ZTMsIDB4YmUsIDB4ZjBdKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9nZW5lcmF0ZV9tbGVfYW5kX21hY19rZXlfd2hlbl9nZW5lcmF0ZV9rZXlzX21ldGhvZF9pc19jYWxsZWRfd2l0aF9zZXF1ZW5jZV9jb3VudGVyX2VxdWFsXzEoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICA3LjEuNC4yIFRlc3QgVmVjdG9yIDIKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzZXF1ZW5jZV9jb3VudGVyID0gMQorCisgICAgICAgIGNyZWF0b3IgPSBuZXRfY3J5cHRvLkNyeXB0b01hdGVyaWFsQ3JlYXRvcihtYXN0ZXJfa2V5KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBtbGVfa2V5LCBtYWNfa2V5ID0gY3JlYXRvci5fZ2VuZXJhdGVfa2V5cyhzZXF1ZW5jZV9jb3VudGVyKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZV9rZXksIGJ5dGVhcnJheShbMHg4ZiwgMHg0YywgMHhkMSwgMHhhMiwgMHg3ZCwgMHg5NSwgMHhjMCwgMHg3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4ZGIsIDB4ODksIDB4NzQsIDB4YmQsIDB4NjEsIDB4NWMsIDB4MTNdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWNfa2V5LCBieXRlYXJyYXkoWzB4OWIsIDB4ZTAsIDB4ZDEsIDB4YWYsIDB4N2IsIDB4ZDgsIDB4NzMsIDB4NTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGRlLCAweGFiLCAweGNkLCAweGQwLCAweDdmLCAweGViLCAweGI5LCAweGQ1XSkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfZ2VuZXJhdGVfbWxlX2FuZF9tYWNfa2V5X3doZW5fZ2VuZXJhdGVfa2V5c19tZXRob2RfaXNfY2FsbGVkX3dpdGhfc2VxdWVuY2VfY291bnRlcl9lcXVhbF8yKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgNy4xLjQuMyBUZXN0IFZlY3RvciAzCisgICAgICAgICIiIgorCisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2VxdWVuY2VfY291bnRlciA9IDIKKworICAgICAgICBjcmVhdG9yID0gbmV0X2NyeXB0by5DcnlwdG9NYXRlcmlhbENyZWF0b3IobWFzdGVyX2tleSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgbWxlX2tleSwgbWFjX2tleSA9IGNyZWF0b3IuX2dlbmVyYXRlX2tleXMoc2VxdWVuY2VfY291bnRlcikKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGVfa2V5LCBieXRlYXJyYXkoWzB4MDEsIDB4NmUsIDB4MmEsIDB4YjgsIDB4ZWMsIDB4ODgsIDB4ODcsIDB4OTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3LCAweGE3LCAweDJlLCAweDBhLCAweDM1LCAweDdlLCAweGNmLCAweDJhXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjX2tleSwgYnl0ZWFycmF5KFsweDU2LCAweDQxLCAweDA5LCAweGU5LCAweGQyLCAweGFhLCAweGQ3LCAweGY3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMywgMHhlYywgMHgzYiwgMHg5NiwgMHgxMSwgMHgwZSwgMHhlZiwgMHhhM10pKQorCisKK2NsYXNzIFRlc3RNbGVDcnlwdG9NYXRlcmlhbENyZWF0b3IodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9ub25jZV93aGVuX2NyZWF0ZV9ub25jZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNvdXJjZV9ldWk2NCA9IGFueV9ldWk2NCgpCisgICAgICAgIGZyYW1lX2NvdW50ZXIgPSBhbnlfZnJhbWVfY291bnRlcigpCisgICAgICAgIHNlY3VyaXR5X2xldmVsID0gYW55X3NlY3VyaXR5X2xldmVsKCkKKworICAgICAgICBjcmVhdG9yID0gbmV0X2NyeXB0by5NbGVDcnlwdG9NYXRlcmlhbENyZWF0b3IobWFzdGVyX2tleSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgbm9uY2UgPSBjcmVhdG9yLl9jcmVhdGVfbm9uY2Uoc291cmNlX2V1aTY0LCBmcmFtZV9jb3VudGVyLCBzZWN1cml0eV9sZXZlbCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgbm9uY2VfYnl0ZXMgPSBpby5CeXRlc0lPKG5vbmNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cmNlX2V1aTY0LCBub25jZV9ieXRlcy5yZWFkKDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnVjdC5wYWNrKCI+TCIsIGZyYW1lX2NvdW50ZXIpLCBub25jZV9ieXRlcy5yZWFkKDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlY3VyaXR5X2xldmVsLCBvcmQobm9uY2VfYnl0ZXMucmVhZCgxKSkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX2F1dGhlbnRpY2F0ZWRfZGF0YV93aGVuX2NyZWF0ZV9hdXRoZW50aWNhdGVkX2RhdGFfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIE9ubHkgS2V5IGlkIG1vZGUgMi4KKyAgICAgICAgTGVuZ3RoIG9mIHRoZSBBdXhpbGlhcnkgU2VjdXJpdHkgSGVhZGVyIGlzIGNvbnN0YW50bHkgZXF1YWwgMTAuCisgICAgICAgICIiIgorCisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc291cmNlX2FkZHJlc3MgPSBhbnlfaXBfYWRkcmVzcygpCisgICAgICAgIGRlc3RpbmF0aW9uX2FkZHJlc3MgPSBhbnlfaXBfYWRkcmVzcygpCisgICAgICAgIGF1eGlsaWFyeV9zZWN1cml0eV9oZWFkZXJfYnl0ZXMgPSBjb252ZXJ0X2F1eF9zZWNfaGRyX3RvX2J5dGVhcnJheShhbnlfYXV4aWxpYXJ5X3NlY3VyaXR5X2hlYWRlcigpKQorCisgICAgICAgIGNyZWF0b3IgPSBuZXRfY3J5cHRvLk1sZUNyeXB0b01hdGVyaWFsQ3JlYXRvcihtYXN0ZXJfa2V5KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhdXRoZW50aWNhdGVkX2RhdGEgPSBjcmVhdG9yLl9jcmVhdGVfYXV0aGVudGljYXRlZF9kYXRhKAorICAgICAgICAgICAgc291cmNlX2FkZHJlc3MsIGRlc3RpbmF0aW9uX2FkZHJlc3MsIGF1eGlsaWFyeV9zZWN1cml0eV9oZWFkZXJfYnl0ZXMpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIGF1dGhlbnRpY2F0ZWRfZGF0YV9ieXRlcyA9IGlvLkJ5dGVzSU8oYXV0aGVudGljYXRlZF9kYXRhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cmNlX2FkZHJlc3MucGFja2VkLCBhdXRoZW50aWNhdGVkX2RhdGFfYnl0ZXMucmVhZCgxNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzdGluYXRpb25fYWRkcmVzcy5wYWNrZWQsIGF1dGhlbnRpY2F0ZWRfZGF0YV9ieXRlcy5yZWFkKDE2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdXhpbGlhcnlfc2VjdXJpdHlfaGVhZGVyX2J5dGVzLCBhdXRoZW50aWNhdGVkX2RhdGFfYnl0ZXMucmVhZCgxMCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX2tleV9hbmRfbm9uY2VfYW5kX2F1dGhlbnRpY2F0ZWRfZGF0YV93aGVuX2NyZWF0ZV9rZXlfYW5kX25vbmNlX2FuZF9hdXRoZW50aWNhdGVkX2RhdGFfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KGFueV9ldWk2NCgpKQorCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfaXB2NiA9IGFueV9pcF9hZGRyZXNzKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX2lwdjYgPSBhbnlfaXBfYWRkcmVzcygpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyID0gYW55X2F1eGlsaWFyeV9zZWN1cml0eV9oZWFkZXIoKQorICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHJfYnl0ZXMgPSBjb252ZXJ0X2F1eF9zZWNfaGRyX3RvX2J5dGVhcnJheShtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIpCisKKyAgICAgICAgY3JlYXRvciA9IG5ldF9jcnlwdG8uTWxlQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yKG1hc3Rlcl9rZXkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGtleSwgbm9uY2UsIGF1dGhfZGF0YSA9IGNyZWF0b3IuY3JlYXRlX2tleV9hbmRfbm9uY2VfYW5kX2F1dGhlbnRpY2F0ZWRfZGF0YShtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcy5tYWNfYWRkcmVzcyArCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soIj5MQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyLmZyYW1lX2NvdW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyLnNlY3VyaXR5X2xldmVsKSwgbm9uY2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlX2luZm8uc291cmNlX2lwdjYucGFja2VkICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25faXB2Ni5wYWNrZWQgKworICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkcl9ieXRlcywgYXV0aF9kYXRhKQorCisKK2NsYXNzIFRlc3RBdXhpbGlhcnlTZWN1cml0eUhlYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2tleV9pZF9tb2RlX3ZhbHVlX3doZW5fa2V5X2lkX21vZGVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGtleV9pZF9tb2RlID0gYW55X2tleV9pZF9tb2RlKCkKKworICAgICAgICBhdXhfc2VjX2hkcl9vYmogPSBuZXRfY3J5cHRvLkF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKAorICAgICAgICAgICAga2V5X2lkX21vZGUsIGFueV9zZWN1cml0eV9sZXZlbCgpLCBhbnlfZnJhbWVfY291bnRlcigpLCBhbnlfa2V5X2lkKGtleV9pZF9tb2RlKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2tleV9pZF9tb2RlID0gYXV4X3NlY19oZHJfb2JqLmtleV9pZF9tb2RlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5X2lkX21vZGUsIGFjdHVhbF9rZXlfaWRfbW9kZSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc2VjdXJpdHlfbGV2ZWxfdmFsdWVfd2hlbl9zZWN1cml0eV9sZXZlbF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2VjdXJpdHlfbGV2ZWwgPSBhbnlfc2VjdXJpdHlfbGV2ZWwoKQorICAgICAgICBrZXlfaWRfbW9kZSA9IGFueV9rZXlfaWRfbW9kZSgpCisKKyAgICAgICAgYXV4X3NlY19oZHJfb2JqID0gbmV0X2NyeXB0by5BdXhpbGlhcnlTZWN1cml0eUhlYWRlcigKKyAgICAgICAgICAgIGtleV9pZF9tb2RlLCBzZWN1cml0eV9sZXZlbCwgYW55X2ZyYW1lX2NvdW50ZXIoKSwgYW55X2tleV9pZChrZXlfaWRfbW9kZSkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zZWN1cml0eV9sZXZlbCA9IGF1eF9zZWNfaGRyX29iai5zZWN1cml0eV9sZXZlbAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlY3VyaXR5X2xldmVsLCBhY3R1YWxfc2VjdXJpdHlfbGV2ZWwpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2ZyYW1lX2NvdW50ZXJfdmFsdWVfd2hlbl9mcmFtZV9jb3VudGVyX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmcmFtZV9jb3VudGVyID0gYW55X2ZyYW1lX2NvdW50ZXIoKQorICAgICAgICBrZXlfaWRfbW9kZSA9IGFueV9rZXlfaWRfbW9kZSgpCisKKyAgICAgICAgYXV4X3NlY19oZHJfb2JqID0gbmV0X2NyeXB0by5BdXhpbGlhcnlTZWN1cml0eUhlYWRlcigKKyAgICAgICAgICAgIGtleV9pZF9tb2RlLCBhbnlfc2VjdXJpdHlfbGV2ZWwoKSwgZnJhbWVfY291bnRlciwgYW55X2tleV9pZChrZXlfaWRfbW9kZSkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9mcmFtZV9jb3VudGVyID0gYXV4X3NlY19oZHJfb2JqLmZyYW1lX2NvdW50ZXIKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcmFtZV9jb3VudGVyLCBhY3R1YWxfZnJhbWVfY291bnRlcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fa2V5X2lkX3ZhbHVlX3doZW5fa2V5X2lkX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBrZXlfaWRfbW9kZSA9IGFueV9rZXlfaWRfbW9kZSgpCisgICAgICAgIGtleV9pZCA9IGFueV9rZXlfaWQoa2V5X2lkX21vZGUpCisKKyAgICAgICAgYXV4X3NlY19oZHJfb2JqID0gbmV0X2NyeXB0by5BdXhpbGlhcnlTZWN1cml0eUhlYWRlcigKKyAgICAgICAgICAgIGtleV9pZF9tb2RlLCBhbnlfc2VjdXJpdHlfbGV2ZWwoKSwgYW55X2ZyYW1lX2NvdW50ZXIoKSwga2V5X2lkKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfa2V5X2lkID0gYXV4X3NlY19oZHJfb2JqLmtleV9pZAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleV9pZCwgYWN0dWFsX2tleV9pZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc2VxdWVuY2VfY291bnRlcl92YWx1ZV93aGVuX3NlcXVlbmNlX2NvdW50ZXJfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGtleV9pZF9tb2RlID0gMgorICAgICAgICBrZXlfaWQgPSBhbnlfa2V5X2lkKGtleV9pZF9tb2RlKQorCisgICAgICAgIGF1eF9zZWNfaGRyX29iaiA9IG5ldF9jcnlwdG8uQXV4aWxpYXJ5U2VjdXJpdHlIZWFkZXIoCisgICAgICAgICAgICBrZXlfaWRfbW9kZSwgYW55X3NlY3VyaXR5X2xldmVsKCksIGFueV9mcmFtZV9jb3VudGVyKCksIGtleV9pZCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NlcXVlbmNlX2NvdW50ZXIgPSBhdXhfc2VjX2hkcl9vYmouc2VxdWVuY2VfY291bnRlcgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnVjdC51bnBhY2soIj5JIiwga2V5X2lkWzo0XSlbMF0sIGFjdHVhbF9zZXF1ZW5jZV9jb3VudGVyKQorCisKK2NsYXNzIFRlc3RBdXhpbGlhcnlTZWN1cml0eUhlYWRlckZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9BdXhpbGlhcnlTZWN1cml0eUhlYWRlcl9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAga2V5X2lkX21vZGUgPSBhbnlfa2V5X2lkX21vZGUoKQorICAgICAgICBzZWNfbHZsID0gYW55X3NlY3VyaXR5X2xldmVsKCkKKyAgICAgICAgZnJhbWVfY291bnRlciA9IGFueV9mcmFtZV9jb3VudGVyKCkKKyAgICAgICAga2V5X2lkID0gYW55X2tleV9pZChrZXlfaWRfbW9kZSkKKworICAgICAgICBmYWN0b3J5ID0gbmV0X2NyeXB0by5BdXhpbGlhcnlTZWN1cml0eUhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW3NlY19sdmwgfCBrZXlfaWRfbW9kZSA8PCAzXSkgKyBzdHJ1Y3QucGFjaygiPEkiLCBmcmFtZV9jb3VudGVyKSArIGtleV9pZAorCisgICAgICAgICMgV0hFTgorICAgICAgICBhdXhfc2VjX2hkciA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgY29tbW9uLk1lc3NhZ2VJbmZvKCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGF1eF9zZWNfaGRyLCBuZXRfY3J5cHRvLkF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlfaWRfbW9kZSwgYXV4X3NlY19oZHIua2V5X2lkX21vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VjX2x2bCwgYXV4X3NlY19oZHIuc2VjdXJpdHlfbGV2ZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJhbWVfY291bnRlciwgYXV4X3NlY19oZHIuZnJhbWVfY291bnRlcikKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9pcHY2LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2lwdjYucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODAzNzk5NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9pcHY2LnB5CkBAIC0wLDAgKzEsMTM2OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBpbworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHN0cmluZworaW1wb3J0IHN0cnVjdAoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gaXBhZGRyZXNzIGltcG9ydCBpcF9hZGRyZXNzCisKK2Zyb20gaXB2NiBpbXBvcnQgSUNNUHY2SGVhZGVyLCBVRFBIZWFkZXIsIElQdjZIZWFkZXIsIElQdjZQYWNrZXRGYWN0b3J5LCBVRFBEYXRhZ3JhbSwgXAorICAgIFVEUERhdGFncmFtRmFjdG9yeSwgSUNNUHY2RmFjdG9yeSwgSG9wQnlIb3BGYWN0b3J5LCBNUExPcHRpb25GYWN0b3J5LCBJQ01QdjYsIEhvcEJ5SG9wT3B0aW9uSGVhZGVyLCBIb3BCeUhvcE9wdGlvbiwgXAorICAgIEhvcEJ5SG9wLCBNUExPcHRpb24sIEhvcEJ5SG9wRmFjdG9yeSwgSVB2NlBhY2tldCwgSUNNUHY2RWNob0JvZHksIEJ5dGVzUGF5bG9hZCwgSUNNUHY2RWNob0JvZHlGYWN0b3J5LCBcCisgICAgVXBwZXJMYXllclByb3RvY29sLCBVRFBIZWFkZXJGYWN0b3J5LCBIb3BCeUhvcE9wdGlvbnNGYWN0b3J5LCBJQ01QdjZEZXN0aW5hdGlvblVucmVhY2hhYmxlRmFjdG9yeSwgXAorICAgIEJ5dGVzUGF5bG9hZEZhY3RvcnksIElDTVB2NkRlc3RpbmF0aW9uVW5yZWFjaGFibGUsIFVkcEJhc2VkT25TcmNEc3RQb3J0c1BheWxvYWRGYWN0b3J5CisKK2ltcG9ydCBjb21tb24KKworCitjbGFzcyBIb3BCeUhvcE9wdGlvbkJ5dGVzVmFsdWU6CisKKyAgICAiIiIgVGVzdCBoZWxwZXIgY2xhc3MgIiIiCisKKyAgICBfdmFsdWUgPSAidmFsdWUiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgX2J5dGVzKToKKyAgICAgICAgc2VsZi5ieXRlcyA9IF9ieXRlcworCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ieXRlcworCisgICAgZGVmIHRvX2RpY3Qoc2VsZiwgZD1Ob25lKToKKyAgICAgICAgZCA9IGQgaWYgZCBpcyBub3QgTm9uZSBlbHNlIGRpY3QoKQorCisgICAgICAgIGRbc2VsZi5fdmFsdWVdID0gc2VsZi5ieXRlcworICAgICAgICByZXR1cm4gZAorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5ieXRlcykKKworCitjbGFzcyBJQ01QdjZCeXRlc0JvZHk6CisKKyAgICAiIiIgVGVzdCBoZWxwZXIgY2xhc3MgIiIiCisKKyAgICBfaWNtcF9ib2R5ID0gImljbXBfYm9keSIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfYnl0ZXMpOgorICAgICAgICBzZWxmLmJ5dGVzID0gX2J5dGVzCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJ5dGVzCisKKyAgICBkZWYgdG9fZGljdChzZWxmLCBkPU5vbmUpOgorCisgICAgICAgIGRbc2VsZi5faWNtcF9ib2R5XSA9IHNlbGYuYnl0ZXMKKyAgICAgICAgcmV0dXJuIGQKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuYnl0ZXMpCisKKworY2xhc3MgSUNNUHY2Qnl0ZXNCb2R5RmFjdG9yeToKKworICAgICIiIiBUZXN0IGhlbHBlciBjbGFzcyAiIiIKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBjb250ZXh0KToKKyAgICAgICAgcmV0dXJuIElDTVB2NkJ5dGVzQm9keShkYXRhLnJlYWQoKSkKKworCitjbGFzcyBEdW1teUhlYWRlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja3N1bSA9IDAKKworCitjbGFzcyBEdW1teVVwcGVyTGF5ZXJQcm90b2NvbChVcHBlckxheWVyUHJvdG9jb2wpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhlYWRlciwgZGF0YSwgX3R5cGUpOgorICAgICAgICBzdXBlcihEdW1teVVwcGVyTGF5ZXJQcm90b2NvbCwgc2VsZikuX19pbml0X18oaGVhZGVyKQorICAgICAgICBzZWxmLl9kYXRhID0gZGF0YQorICAgICAgICBzZWxmLl90eXBlID0gX3R5cGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHlwZQorCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGF0YQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fZGF0YSkKKworCitkZWYgYW55X3VpbnQoYml0cyk6CisgICAgcmV0dXJuIHJhbmRvbS5yYW5kaW50KDAsICgxIDw8IGJpdHMpIC0gMSkKKworCitkZWYgYW55X3R5cGUoKToKKyAgICByZXR1cm4gYW55X3VpbnQoOCkKKworCitkZWYgYW55X2NvZGUoKToKKyAgICByZXR1cm4gYW55X3VpbnQoOCkKKworCitkZWYgYW55X2NoZWNrc3VtKCk6CisgICAgcmV0dXJuIGFueV91aW50KDE2KQorCisKK2RlZiBhbnlfaWNtcF9wYXlsb2FkKF90eXBlLCBjb2RlLCBjaGVja3N1bSwgYm9keSk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbX3R5cGUsIGNvZGUsIChjaGVja3N1bSA+PiA4KSAmIDB4RkYsIGNoZWNrc3VtICYgMHhGRl0pICsgYm9keQorCisKK2RlZiBhbnlfdWRwX3BheWxvYWQoc3JjX3BvcnQsIGRzdF9wb3J0LCBwYXlsb2FkLCBjaGVja3N1bSk6CisgICAgcGF5bG9hZF9sZW4gPSBsZW4ocGF5bG9hZCkgKyA4CisgICAgcmV0dXJuIGJ5dGVhcnJheShbKHNyY19wb3J0ID4+IDgpICYgMHhGRiwgc3JjX3BvcnQgJiAweEZGLAorICAgICAgICAgICAgICAgICAgICAgIChkc3RfcG9ydCA+PiA4KSAmIDB4RkYsIGRzdF9wb3J0ICYgMHhGRiwKKyAgICAgICAgICAgICAgICAgICAgICAocGF5bG9hZF9sZW4gPj4gOCkgJiAweEZGLCBwYXlsb2FkX2xlbiAmIDB4RkYsCisgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrc3VtID4+IDgpICYgMHhGRiwgY2hlY2tzdW0gJiAweEZGXSkgKyBwYXlsb2FkCisKKworZGVmIGFueV9ob3BfYnlfaG9wX3BheWxvYWQobmV4dF9oZWFkZXIsIGhkcl9leHRfbGVuLCBwYXlsb2FkKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtuZXh0X2hlYWRlciwgaGRyX2V4dF9sZW5dKSArIHBheWxvYWQKKworCitkZWYgYW55X2JvZHkoKToKKyAgICBsZW5ndGggPSBhbnlfdWludCg4KQorICAgIGJvZHkgPSAiIi5qb2luKFtyYW5kb20uY2hvaWNlKHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cyArIHN0cmluZy5oZXhkaWdpdHMpIGZvciBfIGluIHJhbmdlKGxlbmd0aCldKQorICAgIHJldHVybiBieXRlYXJyYXkoYm9keS5lbmNvZGUoInV0Zi04IikpCisKKworZGVmIGFueV9wYXlsb2FkKCk6CisgICAgbGVuZ3RoID0gYW55X3VpbnQoOCkKKyAgICBwYXlsb2FkID0gIiIuam9pbihbcmFuZG9tLmNob2ljZShzdHJpbmcucHJpbnRhYmxlKSBmb3IgXyBpbiByYW5nZShsZW5ndGgpXSkKKyAgICByZXR1cm4gYnl0ZWFycmF5KHBheWxvYWQuZW5jb2RlKCJ1dGYtOCIpKQorCisKK2RlZiBhbnlfaXBfYWRkcmVzcygpOgorICAgIHJldHVybiBieXRlYXJyYXkoWzB4ZmUsIDB4ODBdKSArIGJ5dGVhcnJheShbMHgwMF0gKiA2KSArIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpXSAqIDgpCisKKworZGVmIGFueV9wb3J0KCk6CisgICAgcmV0dXJuIGFueV91aW50KDE2KQorCisKK2RlZiBhbnlfbXBsX29wdF90eXBlKCk6CisgICAgcmV0dXJuIGFueV91aW50KDgpCisKKworZGVmIGFueV9tcGxfb3B0X2RhdGFfbGVuKCk6CisgICAgcmV0dXJuIGFueV91aW50KDgpCisKKworZGVmIGFueV9tcGxfUygpOgorICAgIHJldHVybiBhbnlfdWludCgyKQorCisKK2RlZiBhbnlfbXBsX00oKToKKyAgICByZXR1cm4gYW55X3VpbnQoMSkKKworCitkZWYgYW55X21wbF9WKCk6CisgICAgcmV0dXJuIGFueV91aW50KDEpCisKKworZGVmIGFueV9tcGxfc2VxdWVuY2UoKToKKyAgICByZXR1cm4gYW55X3VpbnQoOCkKKworCitkZWYgYW55X21wbF9zZWVkX2lkKFMpOgorICAgIGxlbmd0aCA9IE1QTE9wdGlvbi5fc2VlZF9pZF9sZW5ndGhbU10KKyAgICBzZWVkX2lkID0gIiIuam9pbihbcmFuZG9tLmNob2ljZShzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyBzdHJpbmcuaGV4ZGlnaXRzKSBmb3IgXyBpbiByYW5nZShsZW5ndGgpXSkKKyAgICByZXR1cm4gYnl0ZWFycmF5KHNlZWRfaWQuZW5jb2RlKCJ1dGYtOCIpKQorCisKK2RlZiBhbnlfbmV4dF9oZWFkZXIoKToKKyAgICByZXR1cm4gYW55X3VpbnQoOCkKKworCitkZWYgYW55X3RyYWZmaWNfY2xhc3MoKToKKyAgICByZXR1cm4gYW55X3VpbnQoOCkKKworCitkZWYgYW55X2Zsb3dfbGFiZWwoKToKKyAgICByZXR1cm4gYW55X3VpbnQoMjApCisKKworZGVmIGFueV9ob3BfbGltaXQoKToKKyAgICByZXR1cm4gYW55X3VpbnQoOCkKKworCitkZWYgYW55X3BheWxvYWRfbGVuZ3RoKCk6CisgICAgcmV0dXJuIGFueV91aW50KDE2KQorCisKK2RlZiBhbnlfaGRyX2V4dF9sZW4oKToKKyAgICByZXR1cm4gYW55X3VpbnQoMykKKworCitkZWYgYW55X2xlbmd0aCgpOgorICAgIHJldHVybiBhbnlfdWludCg0KQorCisKK2RlZiBhbnlfc3RyKGxlbmd0aD04KToKKyAgICBzID0gIiIuam9pbihyYW5kb20uY2hvaWNlKHN0cmluZy5wcmludGFibGUpIGZvciBfIGluIHJhbmdlKGxlbmd0aCkpCisgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYtOCIpCisKKworZGVmIGFueV9ieXRlcyhsZW5ndGg9NCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShhbnlfc3RyKGxlbmd0aCkpCisKKworZGVmIGFueV9kaWN0KGtleXNfY291bnQ9NCk6CisgICAga2V5cyA9IFthbnlfc3RyKCkgZm9yIF8gaW4gcmFuZ2Uoa2V5c19jb3VudCldCisKKyAgICBkID0ge30KKyAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgIGRba2V5XSA9IGFueV9ieXRlcygpCisKKyAgICByZXR1cm4gZAorCisKK2RlZiBhbnlfbXBsX29wdGlvbigpOgorICAgIFMgPSBhbnlfbXBsX1MoKQorICAgIE0gPSBhbnlfbXBsX00oKQorICAgIFYgPSBhbnlfbXBsX1YoKQorICAgIHNlcXVlbmNlID0gYW55X21wbF9zZXF1ZW5jZSgpCisgICAgc2VlZF9pZCA9IGFueV9tcGxfc2VlZF9pZChTKQorCisgICAgcmV0dXJuIE1QTE9wdGlvbihTLCBNLCBWLCBzZXF1ZW5jZSwgc2VlZF9pZCkKKworCitkZWYgYW55X2hvcF9ieV9ob3BfYnl0ZXNfb3B0aW9uX2hlYWRlcihsZW5ndGg9NCk6CisgICAgX3R5cGUgPSBhbnlfdHlwZSgpCisKKyAgICAjIDAgb3IgMSBtZWFucyBwYWRkaW5nLCBzbyB0eXBlIGhhdmUgdG8gYmUgaGlnaGVyIHRoYW4gMQorICAgIHdoaWxlIF90eXBlIDw9IDE6CisgICAgICAgIF90eXBlID0gYW55X3R5cGUoKQorCisgICAgcmV0dXJuIEhvcEJ5SG9wT3B0aW9uSGVhZGVyKF90eXBlLCBsZW5ndGgpCisKKworZGVmIGFueV9ob3BfYnlfaG9wX2J5dGVzX3ZhbHVlKGxlbmd0aD0yKToKKyAgICByZXR1cm4gSG9wQnlIb3BPcHRpb25CeXRlc1ZhbHVlKGFueV9ieXRlcyhsZW5ndGgpKQorCisKK2RlZiBhbnlfaG9wX2J5X2hvcF9ieXRlc19vcHRpb24oKToKKyAgICBsZW5ndGggPSBhbnlfbGVuZ3RoKCkKKyAgICByZXR1cm4gSG9wQnlIb3BPcHRpb24oYW55X2hvcF9ieV9ob3BfYnl0ZXNfb3B0aW9uX2hlYWRlcihsZW5ndGgpLCBhbnlfaG9wX2J5X2hvcF9ieXRlc192YWx1ZShsZW5ndGgpKQorCisKK2RlZiBhbnlfaG9wX2J5X2hvcF9tcGxfb3B0aW9uKCk6CisgICAgbXBsX29wdGlvbiA9IGFueV9tcGxfb3B0aW9uKCkKKyAgICByZXR1cm4gSG9wQnlIb3BPcHRpb24oYW55X2hvcF9ieV9ob3BfYnl0ZXNfb3B0aW9uX2hlYWRlcihsZW4obXBsX29wdGlvbikpLCBtcGxfb3B0aW9uKQorCisKK2RlZiBhbnlfaWRlbnRpZmllcigpOgorICAgIHJldHVybiBhbnlfdWludCgxNikKKworCitkZWYgYW55X3NlcXVlbmNlX251bWJlcigpOgorICAgIHJldHVybiBhbnlfdWludCgxNikKKworCitkZWYgYW55X2RhdGEoKToKKyAgICByZXR1cm4gYW55X2J5dGVzKHJhbmRvbS5yYW5kaW50KDAsIDMyKSkKKworCitkZWYgYW55X3VwcGVyX2xheWVyX3BheWxvYWQoZGF0YSwgX3R5cGUpOgorICAgIHJldHVybiBEdW1teVVwcGVyTGF5ZXJQcm90b2NvbChEdW1teUhlYWRlcigpLCBkYXRhLCBfdHlwZSkKKworCitkZWYgYW55X2V4dGVuc2lvbl9oZWFkZXJzKCk6CisgICAgcmV0dXJuIFtdCisKKworZGVmIGFueV9tZXNzYWdlX2luZm8oKToKKyAgICByZXR1cm4gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKworCitjbGFzcyBUZXN0SVB2NkhlYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY29udmVydF9JUHY2X2hlYWRlcl90b19ieXRlc193aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdHJhZmZpY19jbGFzcyA9IGFueV90cmFmZmljX2NsYXNzKCkKKyAgICAgICAgZmxvd19sYWJlbCA9IGFueV9mbG93X2xhYmVsKCkKKyAgICAgICAgcGF5bG9hZF9sZW5ndGggPSBhbnlfcGF5bG9hZF9sZW5ndGgoKQorICAgICAgICBuZXh0X2hlYWRlciA9IGFueV9uZXh0X2hlYWRlcigpCisgICAgICAgIGhvcF9saW1pdCA9IGFueV9ob3BfbGltaXQoKQorICAgICAgICBzb3VyY2VfYWRkcmVzcyA9IGFueV9pcF9hZGRyZXNzKCkKKyAgICAgICAgZGVzdGluYXRpb25fYWRkcmVzcyA9IGFueV9pcF9hZGRyZXNzKCkKKworICAgICAgICBpcHY2X2hlYWRlciA9IElQdjZIZWFkZXIoc291cmNlX2FkZHJlc3MsIGRlc3RpbmF0aW9uX2FkZHJlc3MsIHRyYWZmaWNfY2xhc3MsIGZsb3dfbGFiZWwsIGhvcF9saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRfbGVuZ3RoLCBuZXh0X2hlYWRlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgZGF0YSA9IGlwdjZfaGVhZGVyLnRvX2J5dGVzKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2LCBkYXRhWzBdID4+IDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhZmZpY19jbGFzcywgKChkYXRhWzBdIDw8IDggfCBkYXRhWzFdKSA+PiA0KSAmIDB4RkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvd19sYWJlbCwgKChkYXRhWzFdICYgMHgwRikgPDwgMTYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YVsyXSA8PCA4KSB8IGRhdGFbM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF5bG9hZF9sZW5ndGgsIHN0cnVjdC51bnBhY2soIiFIIiwgZGF0YVs0OjZdKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0X2hlYWRlciwgZGF0YVs2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3BfbGltaXQsIGRhdGFbN10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cmNlX2FkZHJlc3MsIGRhdGFbODoyNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzdGluYXRpb25fYWRkcmVzcywgZGF0YVsyNDo0MF0pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0lQdjZIZWFkZXJfd2hlbl9mcm9tX2J5dGVzX2NsYXNzbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0cmFmZmljX2NsYXNzID0gYW55X3RyYWZmaWNfY2xhc3MoKQorICAgICAgICBmbG93X2xhYmVsID0gYW55X2Zsb3dfbGFiZWwoKQorICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IGFueV9wYXlsb2FkX2xlbmd0aCgpCisgICAgICAgIG5leHRfaGVhZGVyID0gYW55X25leHRfaGVhZGVyKCkKKyAgICAgICAgaG9wX2xpbWl0ID0gYW55X2hvcF9saW1pdCgpCisgICAgICAgIHNvdXJjZV9hZGRyZXNzID0gYW55X2lwX2FkZHJlc3MoKQorICAgICAgICBkZXN0aW5hdGlvbl9hZGRyZXNzID0gYW55X2lwX2FkZHJlc3MoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWyg2IDw8IDQpIHwgKHRyYWZmaWNfY2xhc3MgPj4gNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh0cmFmZmljX2NsYXNzICYgMHhGKSA8PCA0IHwgKGZsb3dfbGFiZWwgPj4gMTYpICYgMHhGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvd19sYWJlbCA+PiA4KSAmIDB4RkYsIGZsb3dfbGFiZWwgJiAweEZGLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkX2xlbmd0aCA+PiA4LCBwYXlsb2FkX2xlbmd0aCAmIDB4RkYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfaGVhZGVyLCBob3BfbGltaXRdKQorICAgICAgICBkYXRhICs9IGlwX2FkZHJlc3MoYnl0ZXMoc291cmNlX2FkZHJlc3MpKS5wYWNrZWQgKyBpcF9hZGRyZXNzKGJ5dGVzKGRlc3RpbmF0aW9uX2FkZHJlc3MpKS5wYWNrZWQKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaXB2Nl9oZWFkZXIgPSBJUHY2SGVhZGVyLmZyb21fYnl0ZXMoaW8uQnl0ZXNJTyhkYXRhKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2LCBpcHY2X2hlYWRlci52ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWZmaWNfY2xhc3MsIGlwdjZfaGVhZGVyLnRyYWZmaWNfY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvd19sYWJlbCwgaXB2Nl9oZWFkZXIuZmxvd19sYWJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXlsb2FkX2xlbmd0aCwgaXB2Nl9oZWFkZXIucGF5bG9hZF9sZW5ndGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dF9oZWFkZXIsIGlwdjZfaGVhZGVyLm5leHRfaGVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvcF9saW1pdCwgaXB2Nl9oZWFkZXIuaG9wX2xpbWl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXJjZV9hZGRyZXNzLCBpcHY2X2hlYWRlci5zb3VyY2VfYWRkcmVzcy5wYWNrZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzdGluYXRpb25fYWRkcmVzcywgaXB2Nl9oZWFkZXIuZGVzdGluYXRpb25fYWRkcmVzcy5wYWNrZWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3Byb3Blcl9oZWFkZXJfbGVuZ3RoX3doZW5fSVB2NlBhY2tldF9vYmplY3RfaXNfY2FsbGVkX2luX2xlbihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpcHY2X2hlYWRlciA9IElQdjZIZWFkZXIoYW55X3RyYWZmaWNfY2xhc3MoKSwgYW55X2Zsb3dfbGFiZWwoKSwgYW55X3BheWxvYWRfbGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbmV4dF9oZWFkZXIoKSwgYW55X2hvcF9saW1pdCgpLCBhbnlfaXBfYWRkcmVzcygpLCBhbnlfaXBfYWRkcmVzcygpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpcHY2X2hlYWRlcl9sZW5ndGggPSBsZW4oaXB2Nl9oZWFkZXIpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDAsIGlwdjZfaGVhZGVyX2xlbmd0aCkKKworCitjbGFzcyBUZXN0VURQSGVhZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jb252ZXJ0X1VEUF9oZWFkZXJfdG9fYnl0ZXNfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNyY19wb3J0ID0gYW55X3BvcnQoKQorICAgICAgICBkc3RfcG9ydCA9IGFueV9wb3J0KCkKKyAgICAgICAgcGF5bG9hZF9sZW5ndGggPSBhbnlfcGF5bG9hZF9sZW5ndGgoKQorICAgICAgICBjaGVja3N1bSA9IGFueV9jaGVja3N1bSgpCisKKyAgICAgICAgdWRwX2hlYWRlciA9IFVEUEhlYWRlcihzcmNfcG9ydCwgZHN0X3BvcnQsIHBheWxvYWRfbGVuZ3RoLCBjaGVja3N1bSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgZGF0YSA9IHVkcF9oZWFkZXIudG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY19wb3J0LCBzdHJ1Y3QudW5wYWNrKCIhSCIsIGRhdGFbMDoyXSlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHN0X3BvcnQsIHN0cnVjdC51bnBhY2soIiFIIiwgZGF0YVsyOjRdKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXlsb2FkX2xlbmd0aCwgc3RydWN0LnVucGFjaygiIUgiLCBkYXRhWzQ6Nl0pWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoZWNrc3VtLCBzdHJ1Y3QudW5wYWNrKCIhSCIsIGRhdGFbNjpdKVswXSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfVURQSGVhZGVyX3doZW5fZnJvbV9ieXRlc19jbGFzc21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc3JjX3BvcnQgPSBhbnlfcG9ydCgpCisgICAgICAgIGRzdF9wb3J0ID0gYW55X3BvcnQoKQorICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IGFueV9wYXlsb2FkX2xlbmd0aCgpCisgICAgICAgIGNoZWNrc3VtID0gYW55X2NoZWNrc3VtKCkKKworICAgICAgICBkYXRhID0gc3RydWN0LnBhY2soIiFIIiwgc3JjX3BvcnQpICsgc3RydWN0LnBhY2soIiFIIiwgZHN0X3BvcnQpICsgXAorICAgICAgICAgICAgc3RydWN0LnBhY2soIiFIIiwgcGF5bG9hZF9sZW5ndGgpICsgc3RydWN0LnBhY2soIiFIIiwgY2hlY2tzdW0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHVkcF9oZWFkZXIgPSBVRFBIZWFkZXIuZnJvbV9ieXRlcyhpby5CeXRlc0lPKGRhdGEpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY19wb3J0LCB1ZHBfaGVhZGVyLnNyY19wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzdF9wb3J0LCB1ZHBfaGVhZGVyLmRzdF9wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBheWxvYWRfbGVuZ3RoLCB1ZHBfaGVhZGVyLnBheWxvYWRfbGVuZ3RoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoZWNrc3VtLCB1ZHBfaGVhZGVyLmNoZWNrc3VtKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9wcm9wZXJfaGVhZGVyX2xlbmd0aF93aGVuX1VEUEhlYWRlcl9vYmplY3RfaXNfY2FsbGVkX2luX2xlbihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB1ZHBfaGVhZGVyID0gVURQSGVhZGVyKGFueV9wb3J0KCksIGFueV9wb3J0KCksIGFueV9wYXlsb2FkX2xlbmd0aCgpLCBhbnlfY2hlY2tzdW0oKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgdWRwX2hlYWRlcl9sZW5ndGggPSBsZW4odWRwX2hlYWRlcikKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg4LCB1ZHBfaGVhZGVyX2xlbmd0aCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fMTdfd2hlbl90eXBlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB1ZHBfaGVhZGVyID0gVURQSGVhZGVyKGFueV9wb3J0KCksIGFueV9wb3J0KCksIGFueV9wYXlsb2FkX2xlbmd0aCgpLCBhbnlfY2hlY2tzdW0oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxNywgdWRwX2hlYWRlci50eXBlKQorCisKK2NsYXNzIFRlc3RJQ01QdjZIZWFkZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NvbnZlcnRfaWNtcF9tZXNzYWdlX2hlYWRlcl90b19ieXRlc193aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgX3R5cGUgPSBhbnlfdHlwZSgpCisgICAgICAgIGNvZGUgPSBhbnlfY29kZSgpCisgICAgICAgIGNoZWNrc3VtID0gYW55X2NoZWNrc3VtKCkKKworICAgICAgICBpY21wdjZfaGVhZGVyID0gSUNNUHY2SGVhZGVyKF90eXBlLCBjb2RlLCBjaGVja3N1bSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgZGF0YSA9IGljbXB2Nl9oZWFkZXIudG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90eXBlLCBkYXRhWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIGRhdGFbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hlY2tzdW0sIHN0cnVjdC51bnBhY2soIiFIIiwgZGF0YVsyOl0pWzBdKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9JQ01QdjZIZWFkZXJfd2hlbl90b19ieXRlc19jbGFzc21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgX3R5cGUgPSBhbnlfdHlwZSgpCisgICAgICAgIGNvZGUgPSBhbnlfY29kZSgpCisgICAgICAgIGNoZWNrc3VtID0gYW55X2NoZWNrc3VtKCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtfdHlwZSwgY29kZV0pICsgc3RydWN0LnBhY2soIiFIIiwgY2hlY2tzdW0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGljbXB2Nl9oZWFkZXIgPSBJQ01QdjZIZWFkZXIuZnJvbV9ieXRlcyhpby5CeXRlc0lPKGRhdGEpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90eXBlLCBpY21wdjZfaGVhZGVyLnR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZSwgaWNtcHY2X2hlYWRlci5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoZWNrc3VtLCBpY21wdjZfaGVhZGVyLmNoZWNrc3VtKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9wcm9wZXJfaGVhZGVyX2xlbmd0aF93aGVuX0lDTVB2NkhlYWRlcl9vYmplY3RfaXNfY2FsbGVkX2luX2xlbihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpY21wdjZfaGVhZGVyID0gSUNNUHY2SGVhZGVyKGFueV90eXBlKCksIGFueV9jb2RlKCksIGFueV9jaGVja3N1bSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpY21wdjZfaGVhZGVyX2xlbmd0aCA9IGxlbihpY21wdjZfaGVhZGVyKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQsIGljbXB2Nl9oZWFkZXJfbGVuZ3RoKQorCisKK2NsYXNzIFRlc3RJUHY2UGFja2V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9idWlsZF9JUHY2UGFja2V0X3dpdGhfSUNNUF9wYXlsb2FkX2Zyb21fd2VsbF9rbm93X3ZhbHVlc193aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKworICAgICAgICBpcHY2X3BhY2tldCA9IElQdjZQYWNrZXQoSVB2NkhlYWRlcihzb3VyY2VfYWRkcmVzcz0iZmQwMDoxMjM0OjQ1NTU6OmZmOmZlMDA6MTgwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uX2FkZHJlc3M9ImZmMDM6OjEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElDTVB2NihJQ01QdjZIZWFkZXIoMTI4LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ01QdjZFY2hvQm9keSgwLCAyLCBieXRlYXJyYXkoWzB4ODAsIDB4MDAsIDB4YzcsIDB4YmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MV0pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSG9wQnlIb3Aob3B0aW9ucz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9wQnlIb3BPcHRpb24oSG9wQnlIb3BPcHRpb25IZWFkZXIoX3R5cGU9MHg2ZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBMT3B0aW9uKFM9MSwgTT0wLCBWPTAsIHNlcXVlbmNlPTIsIHNlZWRfaWQ9Ynl0ZWFycmF5KFsweDAwLCAweDE4XSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSldKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpcHY2X3BhY2tldF9ieXRlcyA9IGlwdjZfcGFja2V0LnRvX2J5dGVzKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgZXhwZWN0ZWRfaXB2Nl9wYWNrZXRfYnl0ZXMgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZkLCAweDAwLCAweDEyLCAweDM0LCAweDQ1LCAweDU1LCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZSwgMHgwMCwgMHgxOCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzYSwgMHgwMCwgMHg2ZCwgMHgwNCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgxOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4ODcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweGM3LCAweGJmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDEsIDB4NDFdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaXB2Nl9wYWNrZXRfYnl0ZXMsIGlwdjZfcGFja2V0X2J5dGVzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2J1aWxkX0lQdjZQYWNrZXRfd2l0aF9VRFBfcGF5bG9hZF9mcm9tX3dlbGxfa25vd192YWx1ZXNfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGlwdjZfaGVhZGVyID0gSVB2NkhlYWRlcihzb3VyY2VfYWRkcmVzcz0iZmU4MDo6MSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbl9hZGRyZXNzPSJmZjAyOjoyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcF9saW1pdD0yNTUpCisKKyAgICAgICAgdWRwX2RncmFtID0gVURQRGF0YWdyYW0oVURQSGVhZGVyKHNyY19wb3J0PTE5Nzg4LCBkc3RfcG9ydD0xOTc4OCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVzUGF5bG9hZChieXRlYXJyYXkoWzB4MDAsIDB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4MDEsIDB4MDEsIDB4MGIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4YzYsIDB4NjksIDB4NzMsIDB4NTEsIDB4MGUsIDB4MDEsIDB4ODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MDIsIDB4MDAsIDB4MDEsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWZdKSkpCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBJUHY2UGFja2V0KGlwdjZfaGVhZGVyLCB1ZHBfZGdyYW0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGlwdjZfcGFja2V0X2J5dGVzID0gaXB2Nl9wYWNrZXQudG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBleHBlY3RlZF9pcHY2X3BhY2tldF9ieXRlcyA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgxMSwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRkLCAweDRjLCAweDRkLCAweDRjLCAweDAwLCAweDI4LCAweGU5LCAweGY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4MDEsIDB4MDEsIDB4MGIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAweGM2LCAweDY5LCAweDczLCAweDUxLCAweDBlLCAweDAxLCAweDgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgwMiwgMHgwMCwgMHgwMSwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZl0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9pcHY2X3BhY2tldF9ieXRlcywgaXB2Nl9wYWNrZXRfYnl0ZXMpCisKKworY2xhc3MgVGVzdElQdjZQYWNrZXRGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfSVB2NlBhY2tldF93aXRoX01QTF9leHRlbnNpb25faGVhZGVyX2FuZF9JQ01QX3VwcGVyX2xheWVyX3Byb3RvY29sX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpcHY2X3BhY2tldF9ieXRlcyA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmQsIDB4MDAsIDB4MTIsIDB4MzQsIDB4NDUsIDB4NTUsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZlLCAweDAwLCAweDE4LCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNhLCAweDAwLCAweDZkLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHg4NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4YzcsIDB4YmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MV0pCisKKyAgICAgICAgaXB2Nl9mYWN0b3J5ID0gSVB2NlBhY2tldEZhY3RvcnkoCisgICAgICAgICAgICBlaGY9eworICAgICAgICAgICAgICAgIDA6IEhvcEJ5SG9wRmFjdG9yeSgKKyAgICAgICAgICAgICAgICAgICAgaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3Rvcnk9SG9wQnlIb3BPcHRpb25zRmFjdG9yeSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDk6IE1QTE9wdGlvbkZhY3RvcnkoKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHVscGY9eworICAgICAgICAgICAgICAgIDU4OiBJQ01QdjZGYWN0b3J5KGJvZHlfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgICAgICAgICAgMTI4OiBJQ01QdjZFY2hvQm9keUZhY3RvcnkoKQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpcHY2X3BhY2tldCA9IGlwdjZfZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGlwdjZfcGFja2V0X2J5dGVzKSwgYW55X21lc3NhZ2VfaW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmZDAwOjEyMzQ6NDU1NTo6ZmY6ZmUwMDoxODAwJywgIGlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLnNvdXJjZV9hZGRyZXNzLmNvbXByZXNzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ZmMDM6OjEnLCBpcHY2X3BhY2tldC5pcHY2X2hlYWRlci5kZXN0aW5hdGlvbl9hZGRyZXNzLmNvbXByZXNzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNjQsIGlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLmhvcF9saW1pdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBpcHY2X3BhY2tldC5pcHY2X2hlYWRlci5uZXh0X2hlYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzNCwgaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIucGF5bG9hZF9sZW5ndGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIuZmxvd19sYWJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBpcHY2X3BhY2tldC5pcHY2X2hlYWRlci50cmFmZmljX2NsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIGlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLnZlcnNpb24pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBpcHY2X3BhY2tldC5leHRlbnNpb25faGVhZGVyc1swXS5vcHRpb25zWzBdLnZhbHVlLlMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgaXB2Nl9wYWNrZXQuZXh0ZW5zaW9uX2hlYWRlcnNbMF0ub3B0aW9uc1swXS52YWx1ZS5NKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGlwdjZfcGFja2V0LmV4dGVuc2lvbl9oZWFkZXJzWzBdLm9wdGlvbnNbMF0udmFsdWUuVikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBpcHY2X3BhY2tldC5leHRlbnNpb25faGVhZGVyc1swXS5vcHRpb25zWzBdLnZhbHVlLnNlcXVlbmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgwMCwgMHgxOF0pLCBpcHY2X3BhY2tldC5leHRlbnNpb25faGVhZGVyc1swXS5vcHRpb25zWzBdLnZhbHVlLnNlZWRfaWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzNDU3OCwgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuaGVhZGVyLmNoZWNrc3VtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEyOCwgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuaGVhZGVyLnR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuaGVhZGVyLmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuYm9keS5pZGVudGlmaWVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGlwdjZfcGFja2V0LnVwcGVyX2xheWVyX3Byb3RvY29sLmJvZHkuc2VxdWVuY2VfbnVtYmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInXHg4MFx4MDBceGM3XHhiZlx4MDBceDAwXHgwMFx4MDFBQUFBQUFBQUFBJywgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuYm9keS5kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9JUHY2UGFja2V0X3dpdGhvdXRfYW55X2V4dGVuc2lvbl9oZWFkZXJfd2l0aF9JQ01QX3VwcGVyX2xheWVyX3Byb3RvY29sX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpcHY2X3BhY2tldF9ieXRlcyA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQSwgMHgzQSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmQsIDB4MDAsIDB4MTIsIDB4MzQsIDB4NDUsIDB4NTUsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZlLCAweDAwLCAweDE4LCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweDg3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhjNywgMHhiZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxXSkKKworICAgICAgICBpcHY2X2ZhY3RvcnkgPSBJUHY2UGFja2V0RmFjdG9yeSgKKyAgICAgICAgICAgIHVscGY9eworICAgICAgICAgICAgICAgIDU4OiBJQ01QdjZGYWN0b3J5KGJvZHlfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgICAgICAgICAgMTI4OiBJQ01QdjZFY2hvQm9keUZhY3RvcnkoKQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpcHY2X3BhY2tldCA9IGlwdjZfZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGlwdjZfcGFja2V0X2J5dGVzKSwgYW55X21lc3NhZ2VfaW5mbygpKQorICAgICAgICBpcHY2X3BhY2tldC5fdmFsaWRhdGVfY2hlY2tzdW0oKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmZDAwOjEyMzQ6NDU1NTo6ZmY6ZmUwMDoxODAwJywgaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIuc291cmNlX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZmYwMzo6MScsIGlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLmRlc3RpbmF0aW9uX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2NCwgaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIuaG9wX2xpbWl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDU4LCBpcHY2X3BhY2tldC5pcHY2X2hlYWRlci5uZXh0X2hlYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyNiwgaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIucGF5bG9hZF9sZW5ndGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIuZmxvd19sYWJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBpcHY2X3BhY2tldC5pcHY2X2hlYWRlci50cmFmZmljX2NsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIGlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLnZlcnNpb24pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzNDU3OCwgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuaGVhZGVyLmNoZWNrc3VtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEyOCwgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuaGVhZGVyLnR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuaGVhZGVyLmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuYm9keS5pZGVudGlmaWVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGlwdjZfcGFja2V0LnVwcGVyX2xheWVyX3Byb3RvY29sLmJvZHkuc2VxdWVuY2VfbnVtYmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInXHg4MFx4MDBceGM3XHhiZlx4MDBceDAwXHgwMFx4MDFBQUFBQUFBQUFBJywgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuYm9keS5kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3NldF9tZXNzYWdlX2luZm9fZmllbGRfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGlwdjZfcGFja2V0X2RhdGEgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUEsIDB4M0EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmQsIDB4MDAsIDB4MTIsIDB4MzQsIDB4NDUsIDB4NTUsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MTgsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4ODcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4YzcsIDB4YmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDEsIDB4NDFdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGFueV9tZXNzYWdlX2luZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX2lwdjYgPSAiZmY6OiIKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX2FkZHJlc3MgPSAiZmY6OiIKKworICAgICAgICBmYWN0b3J5ID0gSVB2NlBhY2tldEZhY3RvcnkoCisgICAgICAgICAgICB1bHBmPXsKKyAgICAgICAgICAgICAgICA1ODogSUNNUHY2RmFjdG9yeShib2R5X2ZhY3Rvcmllcz17CisgICAgICAgICAgICAgICAgICAgIDEyODogSUNNUHY2RWNob0JvZHlGYWN0b3J5KCkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgfSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGlwdjZfcGFja2V0X2RhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZkMDA6MTIzNDo0NTU1OjpmZjpmZTAwOjE4MDAiLCBtZXNzYWdlX2luZm8uc291cmNlX2lwdjYuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZmYwMzo6MSIsIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9pcHY2LmNvbXByZXNzZWQpCisKKworY2xhc3MgVGVzdFVEUERhdGFncmFtKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVzX2J5dGVzX2Zyb21fVURQSGVhZGVyX2FuZF9wYXlsb2FkX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzcmNfcG9ydCA9IGFueV9wb3J0KCkKKyAgICAgICAgZHN0X3BvcnQgPSBhbnlfcG9ydCgpCisgICAgICAgIGNoZWNrc3VtID0gYW55X2NoZWNrc3VtKCkKKworICAgICAgICBwYXlsb2FkID0gYW55X3BheWxvYWQoKQorICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IGxlbihwYXlsb2FkKSArIDggICMgVURQIGxlbmd0aCBjb25zaXN0cyBvZiBVRFAgaGVhZGVyIGxlbmd0aCBhbmQgcGF5bG9hZCBsZW5ndGgKKworICAgICAgICB1ZHBfaGVhZGVyID0gVURQSGVhZGVyKHNyY19wb3J0LCBkc3RfcG9ydCwgcGF5bG9hZF9sZW5ndGgsIGNoZWNrc3VtKQorICAgICAgICB1ZHBfcGF5bG9hZCA9IEJ5dGVzUGF5bG9hZChwYXlsb2FkKQorICAgICAgICB1ZHBfZGdyYW0gPSBVRFBEYXRhZ3JhbSh1ZHBfaGVhZGVyLCB1ZHBfcGF5bG9hZCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgdWRwX2RncmFtX2J5dGVzID0gdWRwX2RncmFtLnRvX2J5dGVzKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgZXhwZWN0ZWRfdWRwX2RncmFtX2J5dGVzID0gc3RydWN0LnBhY2soIiFIIiwgc3JjX3BvcnQpICsgc3RydWN0LnBhY2soIiFIIiwgZHN0X3BvcnQpICsgXAorICAgICAgICAgICAgc3RydWN0LnBhY2soIiFIIiwgcGF5bG9hZF9sZW5ndGgpICsgc3RydWN0LnBhY2soIiFIIiwgY2hlY2tzdW0pICsgcGF5bG9hZAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdWRwX2RncmFtX2J5dGVzLCB1ZHBfZGdyYW1fYnl0ZXMpCisKKworY2xhc3MgVGVzdElDTVB2Nih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlc19ieXRlc19mcm9tX0lDTVB2NkhlYWRlcl9hbmRfYm9keV93aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgX3R5cGUgPSBhbnlfdHlwZSgpCisgICAgICAgIGNvZGUgPSBhbnlfY29kZSgpCisgICAgICAgIGNoZWNrc3VtID0gYW55X2NoZWNrc3VtKCkKKyAgICAgICAgYm9keSA9IGFueV9ib2R5KCkKKworICAgICAgICBpY21wdjZfaGVhZGVyID0gSUNNUHY2SGVhZGVyKF90eXBlLCBjb2RlLCBjaGVja3N1bSkKKyAgICAgICAgaWNtcHY2X2JvZHkgPSBJQ01QdjZCeXRlc0JvZHkoYm9keSkKKyAgICAgICAgaWNtcHY2X21zZyA9IElDTVB2NihpY21wdjZfaGVhZGVyLCBpY21wdjZfYm9keSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsID0gaWNtcHY2X21zZy50b19ieXRlcygpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIGV4cGVjdGVkID0gYnl0ZWFycmF5KFtfdHlwZSwgY29kZV0pICsgc3RydWN0LnBhY2soIiFIIiwgY2hlY2tzdW0pICsgYm9keQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKKworCitjbGFzcyBUZXN0SG9wQnlIb3AodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9jYWxjdWxhdGVfaGRyX2V4dF9sZW4oc2VsZiwgcGF5bG9hZF9sZW4pOgorICAgICAgICBjb3VudCA9IHBheWxvYWRfbGVuIC8vIDgKKyAgICAgICAgcmVzdCA9IHBheWxvYWRfbGVuICUgOAorCisgICAgICAgIGlmIHJlc3QgIT0gMDoKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKworICAgICAgICBpZiBjb3VudCA9PSAwIGFuZCByZXN0ID09IDA6CisgICAgICAgICAgICByZXR1cm4gY291bnQKKworICAgICAgICByZXR1cm4gY291bnQgLSAxCisKKyAgICBkZWYgX2NhbGN1bGF0ZV9yZXF1aXJlZF9wYWRkaW5nKHNlbGYsIGNvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgZXhjZXNzX2J5dGVzID0gY29udGVudF9sZW5ndGggJiAweDcKKworICAgICAgICBpZiBleGNlc3NfYnl0ZXMgPiAwOgorICAgICAgICAgICAgcmV0dXJuIDggLSBleGNlc3NfYnl0ZXMKKworICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIGNyZWF0ZV9wYWRkaW5nKHNlbGYsIHBhZGRpbmdfbGVuZ3RoKToKKyAgICAgICAgaWYgcGFkZGluZ19sZW5ndGggPT0gMToKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoWzB4MDBdKQorICAgICAgICBlbGlmIHBhZGRpbmdfbGVuZ3RoID4gMToKKyAgICAgICAgICAgIHBhZGRpbmdfbGVuZ3RoIC09IDIKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoWzB4MDEsIHBhZGRpbmdfbGVuZ3RoXSkgKyBieXRlYXJyYXkoWzB4MDAgZm9yIF8gaW4gcmFuZ2UocGFkZGluZ19sZW5ndGgpXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9ieXRlc19mcm9tX0hvcEJ5SG9wX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBuZXh0X2hlYWRlciA9IGFueV9uZXh0X2hlYWRlcigpCisgICAgICAgIGhvcF9ieV9ob3Bfb3B0aW9uID0gYW55X2hvcF9ieV9ob3BfYnl0ZXNfb3B0aW9uKCkKKyAgICAgICAgaGRyX2V4dF9sZW4gPSBzZWxmLl9jYWxjdWxhdGVfaGRyX2V4dF9sZW4oMiArIGxlbihob3BfYnlfaG9wX29wdGlvbikpCisKKyAgICAgICAgaG9wX2J5X2hvcCA9IEhvcEJ5SG9wKG5leHRfaGVhZGVyLCBbaG9wX2J5X2hvcF9vcHRpb25dKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBkYXRhID0gaG9wX2J5X2hvcC50b19ieXRlcygpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIGV4cGVjdGVkX2RhdGEgPSBieXRlYXJyYXkoW25leHRfaGVhZGVyLCBoZHJfZXh0X2xlbl0pICsgaG9wX2J5X2hvcF9vcHRpb24udG9fYnl0ZXMoKQorICAgICAgICBwYWRkaW5nX2xlbmd0aCA9IHNlbGYuX2NhbGN1bGF0ZV9yZXF1aXJlZF9wYWRkaW5nKGxlbihleHBlY3RlZF9kYXRhKSkKKyAgICAgICAgZXhwZWN0ZWRfZGF0YSArPSBzZWxmLmNyZWF0ZV9wYWRkaW5nKHBhZGRpbmdfbGVuZ3RoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGF0YSwgZGF0YSkKKworCitjbGFzcyBUZXN0TVBMT3B0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jb252ZXJ0X01QTE9wdGlvbl90b19ieXRlc193aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgUyA9IGFueV9tcGxfUygpCisgICAgICAgIE0gPSBhbnlfbXBsX00oKQorICAgICAgICBWID0gYW55X21wbF9WKCkKKyAgICAgICAgc2VxdWVuY2UgPSBhbnlfbXBsX3NlcXVlbmNlKCkKKyAgICAgICAgc2VlZF9pZCA9IGFueV9tcGxfc2VlZF9pZChTKQorCisgICAgICAgIG1wbF9vcHRpb24gPSBNUExPcHRpb24oUywgTSwgViwgc2VxdWVuY2UsIHNlZWRfaWQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGRhdGEgPSBtcGxfb3B0aW9uLnRvX2J5dGVzKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgZXhwZWN0ZWRfZGF0YSA9IGJ5dGVhcnJheShbKFMgPDwgNikgfCAoTSA8PCA1KSB8IChWIDw8IDQpLCBzZXF1ZW5jZV0pICsgc2VlZF9pZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2RhdGEsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX01QTE9wdGlvbl93aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWRfd2l0aF9kYXRhKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIFMgPSBhbnlfbXBsX1MoKQorICAgICAgICBNID0gYW55X21wbF9NKCkKKyAgICAgICAgViA9IGFueV9tcGxfVigpCisgICAgICAgIHNlcXVlbmNlID0gYW55X21wbF9zZXF1ZW5jZSgpCisgICAgICAgIHNlZWRfaWQgPSBhbnlfbXBsX3NlZWRfaWQoUykKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsoUyA8PCA2KSB8IChNIDw8IDUpIHwgKFYgPDwgNCksIHNlcXVlbmNlXSkgKyBzZWVkX2lkCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG1wbF9vcHRpb24gPSBNUExPcHRpb24uZnJvbV9ieXRlcyhpby5CeXRlc0lPKGRhdGEpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFMsIG1wbF9vcHRpb24uUykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNLCBtcGxfb3B0aW9uLk0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoViwgbXBsX29wdGlvbi5WKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcXVlbmNlLCBtcGxfb3B0aW9uLnNlcXVlbmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlZWRfaWQsIG1wbF9vcHRpb24uc2VlZF9pZCkKKworICAgIGRlZiB0ZXN0X2NoZWNrX2lmX21wbF9zZWVkX2lkX2xlbmd0aF92YWx1ZXNfd2FzX25vdF9jaGFuZ2VkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIE1QTE9wdGlvbi5fc2VlZF9pZF9sZW5ndGhbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgTVBMT3B0aW9uLl9zZWVkX2lkX2xlbmd0aFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg4LCBNUExPcHRpb24uX3NlZWRfaWRfbGVuZ3RoWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE2LCBNUExPcHRpb24uX3NlZWRfaWRfbGVuZ3RoWzNdKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9wcm9wZXJfbGVuZ3RoX3doZW5fbGVuX2lzX2NhbGxlZF93aXRoX21wbF9vcHRpb25fb2JqZWN0KHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIFMgPSBhbnlfbXBsX1MoKQorICAgICAgICBNID0gYW55X21wbF9NKCkKKyAgICAgICAgViA9IGFueV9tcGxfVigpCisgICAgICAgIHNlcXVlbmNlID0gYW55X21wbF9zZXF1ZW5jZSgpCisgICAgICAgIHNlZWRfaWQgPSBhbnlfbXBsX3NlZWRfaWQoUykKKworICAgICAgICBtcGxfb3B0aW9uID0gTVBMT3B0aW9uKFMsIE0sIFYsIHNlcXVlbmNlLCBzZWVkX2lkKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBtcGxfb3B0aW9uX2xlbmd0aCA9IGxlbihtcGxfb3B0aW9uKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBTTVZfYW5kX3NlcXVlbmNlX2xlbmd0aCA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTTVZfYW5kX3NlcXVlbmNlX2xlbmd0aCArIGxlbihzZWVkX2lkKSwgbXBsX29wdGlvbl9sZW5ndGgpCisKKworY2xhc3MgVGVzdGNsYXNzSG9wQnlIb3BPcHRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NvbnZlcnRfSG9wQnlIb3BPcHRpb25fdG9fYnl0ZXNfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxlbmd0aCA9IGFueV9sZW5ndGgoKQorICAgICAgICBoZWFkZXIgPSBhbnlfaG9wX2J5X2hvcF9ieXRlc19vcHRpb25faGVhZGVyKGxlbmd0aCkKKyAgICAgICAgdmFsdWUgPSBhbnlfaG9wX2J5X2hvcF9ieXRlc192YWx1ZShsZW5ndGgpCisKKyAgICAgICAgaG9wX2J5X2hvcF9vcHRpb24gPSBIb3BCeUhvcE9wdGlvbihoZWFkZXIsIHZhbHVlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBkYXRhID0gaG9wX2J5X2hvcF9vcHRpb24udG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBleHBlY3RlZF9kYXRhID0gaGVhZGVyLnRvX2J5dGVzKCkgKyB2YWx1ZS50b19ieXRlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGF0YSwgZGF0YSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fbGVuZ3RoX29mX0hvcEJ5SG9wT3B0aW9uX3doZW5fbGVuX2lzX2NhbGxlZF93aXRoX2hvcF9ieV9ob3Bfb3B0aW9uX29iamVjdChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsZW5ndGggPSBhbnlfbGVuZ3RoKCkKKyAgICAgICAgaGVhZGVyID0gYW55X2hvcF9ieV9ob3BfYnl0ZXNfb3B0aW9uX2hlYWRlcihsZW5ndGgpCisgICAgICAgIHZhbHVlID0gYW55X2hvcF9ieV9ob3BfYnl0ZXNfdmFsdWUobGVuZ3RoKQorCisgICAgICAgIGhvcF9ieV9ob3Bfb3B0aW9uID0gSG9wQnlIb3BPcHRpb24oaGVhZGVyLCB2YWx1ZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaG9wX2J5X2hvcF9vcHRpb25fbGVuZ3RoID0gbGVuKGhvcF9ieV9ob3Bfb3B0aW9uKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBoZWFkZXJfbGVuZ3RoID0gMgorICAgICAgICBleHBlY3RlZF9ob3BfYnlfaG9wX29wdGlvbl9sZW5ndGggPSBoZWFkZXJfbGVuZ3RoICsgbGVuZ3RoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaG9wX2J5X2hvcF9vcHRpb25fbGVuZ3RoLCBob3BfYnlfaG9wX29wdGlvbl9sZW5ndGgpCisKKworY2xhc3MgVGVzdEhvcEJ5SG9wT3B0aW9uSGVhZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jb252ZXJ0X0hvcEJ5SG9wT3B0aW9uSGVhZGVyX3RvX2J5dGVzX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBfdHlwZSA9IGFueV90eXBlKCkKKyAgICAgICAgbGVuZ3RoID0gYW55X2xlbmd0aCgpCisKKyAgICAgICAgaG9wX2J5X2hvcF9vcHRpb25faGVhZGVyID0gSG9wQnlIb3BPcHRpb25IZWFkZXIoX3R5cGUsIGxlbmd0aCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgZGF0YSA9IGhvcF9ieV9ob3Bfb3B0aW9uX2hlYWRlci50b19ieXRlcygpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIGV4cGVjdGVkX2RhdGEgPSBieXRlYXJyYXkoW190eXBlLCBsZW5ndGhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2RhdGEsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0hvcEJ5SG9wT3B0aW9uSGVhZGVyX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZF93aXRoX2RhdGEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgX3R5cGUgPSBhbnlfdHlwZSgpCisgICAgICAgIGxlbmd0aCA9IGFueV9sZW5ndGgoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW190eXBlLCBsZW5ndGhdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBvcHRpb25faGVhZGVyID0gSG9wQnlIb3BPcHRpb25IZWFkZXIuZnJvbV9ieXRlcyhpby5CeXRlc0lPKGRhdGEpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90eXBlLCBvcHRpb25faGVhZGVyLnR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoLCBvcHRpb25faGVhZGVyLmxlbmd0aCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcHJvcGVyX2xlbmd0aF93aGVuX2xlbl9pc19jYWxsZWRfd2l0aF9Ib3BCeUhvcE9wdGlvbkhlYWRlcl9vYmplY3Qoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgX3R5cGUgPSBhbnlfdHlwZSgpCisgICAgICAgIGxlbmd0aCA9IGFueV9sZW5ndGgoKQorCisgICAgICAgIG9wdGlvbl9oZWFkZXIgPSBIb3BCeUhvcE9wdGlvbkhlYWRlcihfdHlwZSwgbGVuZ3RoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBvcHRpb25faGVhZGVyX2xlbmd0aCA9IGxlbihvcHRpb25faGVhZGVyKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBleHBlY3RlZF9vcHRpb25faGVhZGVyX2xlbmd0aCA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9vcHRpb25faGVhZGVyX2xlbmd0aCwgb3B0aW9uX2hlYWRlcl9sZW5ndGgpCisKKworY2xhc3MgVGVzdEhvcEJ5SG9wRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2NhbGN1bGF0ZV9oZHJfZXh0X2xlbihzZWxmLCBwYXlsb2FkX2xlbmd0aCk6CisgICAgICAgIGNvdW50ID0gcGF5bG9hZF9sZW5ndGggPj4gMworCisgICAgICAgIGlmIChwYXlsb2FkX2xlbmd0aCAmIDB4NykgPT0gMCBhbmQgY291bnQgPiAwOgorICAgICAgICAgICAgcmV0dXJuIGNvdW50IC0gMQorCisgICAgICAgIHJldHVybiBjb3VudAorCisgICAgZGVmIHBhZGRpbmcoc2VsZiwgY29udGVudF9sZW5ndGgpOgorICAgICAgICBleGNlc3NfYnl0ZXMgPSBjb250ZW50X2xlbmd0aCAmIDB4NworCisgICAgICAgIGlmIGV4Y2Vzc19ieXRlcyA+IDA6CisgICAgICAgICAgICBwYWRkaW5nX2xlbmd0aCA9IDggLSBleGNlc3NfYnl0ZXMKKworICAgICAgICAgICAgaWYgcGFkZGluZ19sZW5ndGggPT0gMToKKyAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZWFycmF5KFsweDAwXSkKKyAgICAgICAgICAgIGVsaWYgcGFkZGluZ19sZW5ndGggPiAxOgorICAgICAgICAgICAgICAgIHBhZGRpbmdfbGVuZ3RoIC09IDIKKyAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZWFycmF5KFsweDAxLCBwYWRkaW5nX2xlbmd0aF0pICsgYnl0ZWFycmF5KFsweDAwIGZvciBfIGluIHJhbmdlKHBhZGRpbmdfbGVuZ3RoKV0pCisKKyAgICAgICAgcmV0dXJuIGJ5dGVhcnJheSgpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0hvcEJ5SG9wX29iamVjdF9pbnN0YW5jZV93aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWRfd2l0aF9kYXRhKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGhvcF9ieV9ob3Bfb3B0aW9uID0gYW55X2hvcF9ieV9ob3BfbXBsX29wdGlvbigpCisgICAgICAgIGhvcF9ieV9ob3Bfb3B0aW9uX3R5cGUgPSBob3BfYnlfaG9wX29wdGlvbi5oZWFkZXIudHlwZQorCisgICAgICAgIG5leHRfaGVhZGVyID0gYW55X25leHRfaGVhZGVyKCkKKyAgICAgICAgaGRyX2V4dF9sZW4gPSBzZWxmLl9jYWxjdWxhdGVfaGRyX2V4dF9sZW4oMiArIGxlbihob3BfYnlfaG9wX29wdGlvbikpCisKKyAgICAgICAgaG9wX2J5X2hvcF9mYWN0b3J5ID0gSG9wQnlIb3BGYWN0b3J5KAorICAgICAgICAgICAgaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3Rvcnk9SG9wQnlIb3BPcHRpb25zRmFjdG9yeSgKKyAgICAgICAgICAgICAgICBvcHRpb25zX2ZhY3Rvcmllcz17CisgICAgICAgICAgICAgICAgICAgIGhvcF9ieV9ob3Bfb3B0aW9uX3R5cGU6IE1QTE9wdGlvbkZhY3RvcnkoKQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICkKKyAgICAgICAgKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW25leHRfaGVhZGVyLCBoZHJfZXh0X2xlbl0pICsgaG9wX2J5X2hvcF9vcHRpb24udG9fYnl0ZXMoKQorICAgICAgICBkYXRhICs9IHNlbGYucGFkZGluZyhsZW4oZGF0YSkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGhvcF9ieV9ob3AgPSBob3BfYnlfaG9wX2ZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgYW55X21lc3NhZ2VfaW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvcF9ieV9ob3Bfb3B0aW9uLnZhbHVlLlMsIGhvcF9ieV9ob3Aub3B0aW9uc1swXS52YWx1ZS5TKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvcF9ieV9ob3Bfb3B0aW9uLnZhbHVlLlYsIGhvcF9ieV9ob3Aub3B0aW9uc1swXS52YWx1ZS5WKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvcF9ieV9ob3Bfb3B0aW9uLnZhbHVlLk0sIGhvcF9ieV9ob3Aub3B0aW9uc1swXS52YWx1ZS5NKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvcF9ieV9ob3Bfb3B0aW9uLnZhbHVlLnNlcXVlbmNlLCBob3BfYnlfaG9wLm9wdGlvbnNbMF0udmFsdWUuc2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9wX2J5X2hvcF9vcHRpb24udmFsdWUuc2VlZF9pZCwgaG9wX2J5X2hvcC5vcHRpb25zWzBdLnZhbHVlLnNlZWRfaWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmFpc2VfUnVudGltZUVycm9yX3doZW5fbm9fb3B0aW9uX2ZhY3RvcnlfaXNfc2V0X2FuZF9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGhvcF9ieV9ob3Bfb3B0aW9uID0gYW55X2hvcF9ieV9ob3BfbXBsX29wdGlvbigpCisgICAgICAgIGhvcF9ieV9ob3Bfb3B0aW9uX3R5cGUgPSBob3BfYnlfaG9wX29wdGlvbi5oZWFkZXIudHlwZQorCisgICAgICAgIG5leHRfaGVhZGVyID0gYW55X25leHRfaGVhZGVyKCkKKyAgICAgICAgaGRyX2V4dF9sZW4gPSBzZWxmLl9jYWxjdWxhdGVfaGRyX2V4dF9sZW4oMiArIGxlbihob3BfYnlfaG9wX29wdGlvbikpCisKKyAgICAgICAgaG9wX2J5X2hvcF9mYWN0b3J5ID0gSG9wQnlIb3BGYWN0b3J5KGhvcF9ieV9ob3Bfb3B0aW9uc19mYWN0b3J5PUhvcEJ5SG9wT3B0aW9uc0ZhY3RvcnkoKSkKKworICAgICAgICBkYXRhID0gYnl0ZXMoW25leHRfaGVhZGVyLCBoZHJfZXh0X2xlbl0pICsgaG9wX2J5X2hvcF9vcHRpb24udG9fYnl0ZXMoKQorICAgICAgICBkYXRhICs9IHNlbGYucGFkZGluZyhsZW4oZGF0YSkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgaG9wX2J5X2hvcF9mYWN0b3J5LnBhcnNlLCBpby5CeXRlc0lPKGRhdGEpLCBhbnlfbWVzc2FnZV9pbmZvKCkpCisKKworY2xhc3MgVGVzdE1QTE9wdGlvbkZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3Byb2R1Y2VfTVBMT3B0aW9uX2Zyb21fYnl0ZXNfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkX3dpdGhfZGF0YShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBTID0gYW55X21wbF9TKCkKKyAgICAgICAgTSA9IGFueV9tcGxfTSgpCisgICAgICAgIFYgPSBhbnlfbXBsX1YoKQorICAgICAgICBzZXF1ZW5jZSA9IGFueV9tcGxfc2VxdWVuY2UoKQorICAgICAgICBzZWVkX2lkID0gYW55X21wbF9zZWVkX2lkKFMpCisKKyAgICAgICAgU01WID0gKFMgPDwgNikgfCAoTSA8PCA1KSB8IChWIDw8IDQpCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW1NNViwgc2VxdWVuY2VdKSArIHNlZWRfaWQKKworICAgICAgICBmYWN0b3J5ID0gTVBMT3B0aW9uRmFjdG9yeSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG1wbF9vcHQgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGFueV9tZXNzYWdlX2luZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtcGxfb3B0LlMsIFMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXBsX29wdC5NLCBNKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1wbF9vcHQuViwgVikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtcGxfb3B0LnNlcXVlbmNlLCBzZXF1ZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtcGxfb3B0LnNlZWRfaWQsIHNlZWRfaWQpCisKKworY2xhc3MgVGVzdFVkcEJhc2VkT25TcmNEc3RQb3J0c1BheWxvYWRGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfcGF5bG9hZF9mcm9tX2RhdGFfd2hlbl9zcmNfcG9ydF9mYWN0b3J5X2lzX2RlZmluZWRfYW5kX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YSA9IGFueV9kYXRhKCkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc3JjX3BvcnQgPSBhbnlfcG9ydCgpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kc3RfcG9ydCA9IGFueV9wb3J0KCkKKworICAgICAgICBmYWN0b3J5ID0gVWRwQmFzZWRPblNyY0RzdFBvcnRzUGF5bG9hZEZhY3RvcnkoCisgICAgICAgICAgICBzcmNfZHN0X3BvcnRfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXM9eworICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5zcmNfcG9ydDogQnl0ZXNQYXlsb2FkRmFjdG9yeSgpCisgICAgICAgICAgICB9KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZGF0YSA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGFjdHVhbF9kYXRhLmRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX3BheWxvYWRfZnJvbV9kYXRhX3doZW5fZHN0X3BvcnRfZmFjdG9yeV9pc19kZWZpbmVkX2FuZF9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBhbnlfZGF0YSgpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNyY19wb3J0ID0gYW55X3BvcnQoKQorICAgICAgICBtZXNzYWdlX2luZm8uZHN0X3BvcnQgPSBhbnlfcG9ydCgpCisKKyAgICAgICAgZmFjdG9yeSA9IFVkcEJhc2VkT25TcmNEc3RQb3J0c1BheWxvYWRGYWN0b3J5KAorICAgICAgICAgICAgc3JjX2RzdF9wb3J0X2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uZHN0X3BvcnQ6IEJ5dGVzUGF5bG9hZEZhY3RvcnkoKQorICAgICAgICAgICAgfSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RhdGEgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBhY3R1YWxfZGF0YS5kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX1J1bnRpbWVFcnJvcl93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWRfYnV0X3JlcXVpcmVkX2ZhY3RvcnlfaXNfbm90X2RlZmluZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YSA9IGFueV9kYXRhKCkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc3JjX3BvcnQgPSBhbnlfcG9ydCgpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kc3RfcG9ydCA9IGFueV9wb3J0KCkKKworICAgICAgICBmYWN0b3J5ID0gVWRwQmFzZWRPblNyY0RzdFBvcnRzUGF5bG9hZEZhY3Rvcnkoc3JjX2RzdF9wb3J0X2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzPXt9KQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGZhY3RvcnkucGFyc2UsIGlvLkJ5dGVzSU8oZGF0YSksIG1lc3NhZ2VfaW5mbykKKworCitjbGFzcyBUZXN0VURQRGF0YWdyYW1GYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wcm9kdWNlX1VEUERhdGFncmFtX2Zyb21fYnl0ZXNfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkX3dpdGhfZGF0YShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzcmNfcG9ydCA9IGFueV9wb3J0KCkKKyAgICAgICAgZHN0X3BvcnQgPSBhbnlfcG9ydCgpCisgICAgICAgIGNoZWNrc3VtID0gYW55X2NoZWNrc3VtKCkKKworICAgICAgICBwYXlsb2FkID0gYW55X3BheWxvYWQoKQorICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IGxlbihwYXlsb2FkKSArIGxlbihVRFBIZWFkZXIoMCwgMCkpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbKHNyY19wb3J0ID4+IDgpLCAoc3JjX3BvcnQgJiAweEZGKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRzdF9wb3J0ID4+IDgpLCAoZHN0X3BvcnQgJiAweEZGKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHBheWxvYWRfbGVuZ3RoID4+IDgpLCAocGF5bG9hZF9sZW5ndGggJiAweEZGKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrc3VtID4+IDgpLCAoY2hlY2tzdW0gJiAweEZGKV0pICsgcGF5bG9hZAorCisgICAgICAgIGZhY3RvcnkgPSBVRFBEYXRhZ3JhbUZhY3RvcnkoVURQSGVhZGVyRmFjdG9yeSgpLCBCeXRlc1BheWxvYWRGYWN0b3J5KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHVkcF9kZ3JhbSA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgYW55X21lc3NhZ2VfaW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVkcF9kZ3JhbS5oZWFkZXIuc3JjX3BvcnQsIHNyY19wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVkcF9kZ3JhbS5oZWFkZXIuZHN0X3BvcnQsIGRzdF9wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVkcF9kZ3JhbS5oZWFkZXIucGF5bG9hZF9sZW5ndGgsIHBheWxvYWRfbGVuZ3RoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVkcF9kZ3JhbS5oZWFkZXIuY2hlY2tzdW0sIGNoZWNrc3VtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVkcF9kZ3JhbS5wYXlsb2FkLmRhdGEsIHBheWxvYWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfc2V0X3NyY19hbmRfZHN0X3BvcnRfaW5fbWVzc2FnZV9pbmZvX3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtZXNzYWdlX2luZm8gPSBhbnlfbWVzc2FnZV9pbmZvKCkKKworICAgICAgICBzcmNfcG9ydCA9IGFueV9wb3J0KCkKKyAgICAgICAgZHN0X3BvcnQgPSBhbnlfcG9ydCgpCisgICAgICAgIGNoZWNrc3VtID0gYW55X2NoZWNrc3VtKCkKKworICAgICAgICBwYXlsb2FkID0gYW55X3BheWxvYWQoKQorICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IGxlbihwYXlsb2FkKSArIGxlbihVRFBIZWFkZXIoMCwgMCkpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbKHNyY19wb3J0ID4+IDgpLCAoc3JjX3BvcnQgJiAweEZGKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRzdF9wb3J0ID4+IDgpLCAoZHN0X3BvcnQgJiAweEZGKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHBheWxvYWRfbGVuZ3RoID4+IDgpLCAocGF5bG9hZF9sZW5ndGggJiAweEZGKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrc3VtID4+IDgpLCAoY2hlY2tzdW0gJiAweEZGKV0pICsgcGF5bG9hZAorCisgICAgICAgIGZhY3RvcnkgPSBVRFBEYXRhZ3JhbUZhY3RvcnkoVURQSGVhZGVyRmFjdG9yeSgpLCBCeXRlc1BheWxvYWRGYWN0b3J5KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHVkcF9kZ3JhbSA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY19wb3J0LCBtZXNzYWdlX2luZm8uc3JjX3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHN0X3BvcnQsIG1lc3NhZ2VfaW5mby5kc3RfcG9ydCkKKworCitjbGFzcyBUZXN0SUNNUHY2RmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcHJvZHVjZV9JQ01QdjZfZnJvbV9ieXRlc193aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWRfd2l0aF9kYXRhKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIF90eXBlID0gYW55X3R5cGUoKQorICAgICAgICBjb2RlID0gYW55X2NvZGUoKQorICAgICAgICBjaGVja3N1bSA9IGFueV9jaGVja3N1bSgpCisgICAgICAgIGJvZHkgPSBhbnlfYm9keSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbX3R5cGUsIGNvZGUsIChjaGVja3N1bSA+PiA4KSwgKGNoZWNrc3VtICYgMHhGRildKSArIGJvZHkKKworICAgICAgICBmYWN0b3J5ID0gSUNNUHY2RmFjdG9yeShib2R5X2ZhY3Rvcmllcz17X3R5cGU6IElDTVB2NkJ5dGVzQm9keUZhY3RvcnkoKX0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGljbXB2Nl9tc2cgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGFueV9tZXNzYWdlX2luZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpY21wdjZfbXNnLmhlYWRlci50eXBlLCBfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpY21wdjZfbXNnLmhlYWRlci5jb2RlLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGljbXB2Nl9tc2cuaGVhZGVyLmNoZWNrc3VtLCBjaGVja3N1bSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpY21wdjZfbXNnLmJvZHkuYnl0ZXMsIGJvZHkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmFpc2VfUnVudGltZUVycm9yX3doZW5fbWV0aG9kX3BhcnNlX2lzX2NhbGxlZF9idXRfYm9keV9mYWN0b3J5X2lzX25vdF9wcmVzZW50KHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIF90eXBlID0gYW55X3R5cGUoKQorICAgICAgICBjb2RlID0gYW55X2NvZGUoKQorICAgICAgICBjaGVja3N1bSA9IGFueV9jaGVja3N1bSgpCisgICAgICAgIGJvZHkgPSBhbnlfYm9keSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVzKFtfdHlwZSwgY29kZSwgKGNoZWNrc3VtID4+IDgpLCAoY2hlY2tzdW0gJiAweEZGKV0pICsgYm9keQorCisgICAgICAgIGZhY3RvcnkgPSBJQ01QdjZGYWN0b3J5KCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmYWN0b3J5LnBhcnNlLCBpby5CeXRlc0lPKGRhdGEpLCBhbnlfbWVzc2FnZV9pbmZvKCkpCisKKworY2xhc3MgVGVzdEJ5dGVzUGF5bG9hZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0J5dGVzUGF5bG9hZF93aGVuX2Zyb21fYnl0ZXNfY2xhc3NfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYW55X2RhdGEoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWwgPSBCeXRlc1BheWxvYWQuZnJvbV9ieXRlcyhkYXRhKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGFjdHVhbC5kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9leGFjdGx5X3RoZV9zYW1lX2RhdGFfYXNfcGFzc2VkX3RvX2NvbnN0cnVjdG9yX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYW55X2RhdGEoKQorICAgICAgICBwYXlsb2FkID0gQnl0ZXNQYXlsb2FkKGRhdGEpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbCA9IHBheWxvYWQudG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGFjdHVhbCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdGhlX3NhbWVfbGVuZ3RoX2FzX2RhdGFfcGFzc2VkX3RvX2NvbnN0cnVjdG9yX3doZW5fbGVuX2lzX2NhbGxlZF9vbl9CeXRlc1BheWxvYWRfb2JqZWN0KHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBhbnlfZGF0YSgpCisgICAgICAgIHBheWxvYWQgPSBCeXRlc1BheWxvYWQoZGF0YSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsID0gbGVuKHBheWxvYWQpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRhdGEpLCBhY3R1YWwpCisKKworY2xhc3MgVGVzdElDTVB2NkVjaG9Cb2R5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnZlcnRfSUNNUHY2X2VjaG9fYm9keV90b19kYXRhX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpZGVudGlmaWVyID0gYW55X2lkZW50aWZpZXIoKQorICAgICAgICBzZXF1ZW5jZV9udW1iZXIgPSBhbnlfc2VxdWVuY2VfbnVtYmVyKCkKKyAgICAgICAgZGF0YSA9IGFueV9kYXRhKCkKKworICAgICAgICBib2R5ID0gSUNNUHY2RWNob0JvZHkoaWRlbnRpZmllciwgc2VxdWVuY2VfbnVtYmVyLCBkYXRhKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWwgPSBib2R5LnRvX2J5dGVzKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgZXhwZWN0ZWQgPSBieXRlYXJyYXkoW2lkZW50aWZpZXIgPj4gOCwgaWRlbnRpZmllciAmIDB4RkYsIHNlcXVlbmNlX251bWJlciA+PiA4LCBzZXF1ZW5jZV9udW1iZXIgJiAweEZGXSkgKyBkYXRhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfSUNNUHY2RWNob0JvZHlfZnJvbV9kYXRhX3doZW5fZnJvbV9ieXRlc19jbGFzc21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaWRlbnRpZmllciA9IGFueV9pZGVudGlmaWVyKCkKKyAgICAgICAgc2VxdWVuY2VfbnVtYmVyID0gYW55X3NlcXVlbmNlX251bWJlcigpCisgICAgICAgIGJvZHlfZGF0YSA9IGFueV9kYXRhKCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsoaWRlbnRpZmllciA+PiA4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGlkZW50aWZpZXIgJiAweEZGKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlcXVlbmNlX251bWJlciA+PiA4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlcXVlbmNlX251bWJlciAmIDB4RkYpXSkKKyAgICAgICAgZGF0YSArPSBib2R5X2RhdGEKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsID0gSUNNUHY2RWNob0JvZHkuZnJvbV9ieXRlcyhpby5CeXRlc0lPKGRhdGEpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkZW50aWZpZXIsIGFjdHVhbC5pZGVudGlmaWVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcXVlbmNlX251bWJlciwgYWN0dWFsLnNlcXVlbmNlX251bWJlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib2R5X2RhdGEsIGFjdHVhbC5kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2J1aWxkX0lDTVB2NkVjaG9Cb2R5X2Zyb21fd2VsbF9rbm93X3ZhbHVlc193aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYm9keSA9IElDTVB2NkVjaG9Cb2R5KDAsIDIsIGJ5dGVhcnJheShbMHg4MCwgMHgwMCwgMHhjNywgMHhiZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MV0pKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWwgPSBib2R5LnRvX2J5dGVzKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgZXhwZWN0ZWQgPSBieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDAsIDB4YzcsIDB4YmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MV0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQorCisKK2NsYXNzIFRlc3RJQ01QdjZFY2hvQm9keUZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2J1aWxkX0lDTVB2NkVjaG9Cb2R5X3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpZGVudGlmaWVyID0gYW55X2lkZW50aWZpZXIoKQorICAgICAgICBzZXF1ZW5jZV9udW1iZXIgPSBhbnlfc2VxdWVuY2VfbnVtYmVyKCkKKyAgICAgICAgYm9keV9kYXRhID0gYW55X2RhdGEoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWyhpZGVudGlmaWVyID4+IDgpICYgMHhGRiwgaWRlbnRpZmllciAmIDB4RkYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXF1ZW5jZV9udW1iZXIgPj4gOCkgJiAweEZGLCBzZXF1ZW5jZV9udW1iZXIgJiAweEZGXSkgKyBib2R5X2RhdGEKKworICAgICAgICBmYWN0b3J5ID0gSUNNUHY2RWNob0JvZHlGYWN0b3J5KCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBhbnlfbWVzc2FnZV9pbmZvKCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbCwgSUNNUHY2RWNob0JvZHkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWRlbnRpZmllciwgYWN0dWFsLmlkZW50aWZpZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VxdWVuY2VfbnVtYmVyLCBhY3R1YWwuc2VxdWVuY2VfbnVtYmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvZHlfZGF0YSwgYWN0dWFsLmRhdGEpCisKKworY2xhc3MgVGVzdElDTVB2NkRlc3RpbmF0aW9uVW5yZWFjaGFibGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NvbnZlcnRfSUNNUHY2RGVzdGluYXRpb25VbnJlYWNoYWJsZV90b19ieXRlYXJyYXlfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBhbnlfZGF0YSgpCisKKyAgICAgICAgaWNtcHY2X2Rlc3RfdW5yZWFjaGFibGUgPSBJQ01QdjZEZXN0aW5hdGlvblVucmVhY2hhYmxlKGRhdGEpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kYXRhID0gaWNtcHY2X2Rlc3RfdW5yZWFjaGFibGUudG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pICsgZGF0YSwgYWN0dWFsX2RhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY29udmVydF9ieXRlYXJyYXlfdG9fSUNNUHY2RGVzdGluYXRpb25VbnJlYWNoYWJsZV93aGVuX2Zyb21fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYW55X2RhdGEoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpY21wdjZfZGVzdF91bnJlYWNoYWJsZSA9IElDTVB2NkRlc3RpbmF0aW9uVW5yZWFjaGFibGUuZnJvbV9ieXRlcygKKyAgICAgICAgICAgIGlvLkJ5dGVzSU8oYnl0ZWFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAwXSkgKyBkYXRhKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBpY21wdjZfZGVzdF91bnJlYWNoYWJsZS5kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX1J1bnRpbWVFcnJvcl93aGVuX2Zyb21fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYW55X2RhdGEoKQorCisgICAgICAgIHVudXNlZCA9IHJhbmRvbS5yYW5kaW50KDEsIDEgPDwgMzIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgSUNNUHY2RGVzdGluYXRpb25VbnJlYWNoYWJsZS5mcm9tX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpby5CeXRlc0lPKGJ5dGVhcnJheShzdHJ1Y3QucGFjaygiPkkiLCB1bnVzZWQpKSArIGRhdGEpKQorCisKK2NsYXNzIFRlc3RJQ01QdjZEZXN0aW5hdGlvblVucmVhY2hhYmxlRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0lDTVB2NkRlc3RpbmF0aW9uVW5yZWFjaGFibGVfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGljbXBfZGF0YSA9IGFueV9kYXRhKCkKKworICAgICAgICBmYWN0b3J5ID0gSUNNUHY2RGVzdGluYXRpb25VbnJlYWNoYWJsZUZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKSArIGljbXBfZGF0YQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpY21wdjZfZGVzdF91bnJlYWNoYWJsZT1mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGFueV9tZXNzYWdlX2luZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpY21wX2RhdGEsIGljbXB2Nl9kZXN0X3VucmVhY2hhYmxlLmRhdGEpCisKKworY2xhc3MgVGVzdFVEUEhlYWRlckZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9VRFBIZWFkZXJfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3Rvcnk9VURQSGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgc3JjX3BvcnQ9YW55X3BvcnQoKQorICAgICAgICBkc3RfcG9ydD1hbnlfcG9ydCgpCisgICAgICAgIHBheWxvYWRfbGVuZ3RoPWFueV9wYXlsb2FkX2xlbmd0aCgpCisgICAgICAgIGNoZWNrc3VtPWFueV9jaGVja3N1bSgpCisKKyAgICAgICAgZGF0YT1zdHJ1Y3QucGFjaygiIUgiLCBzcmNfcG9ydCkgKyBzdHJ1Y3QucGFjaygiIUgiLCBkc3RfcG9ydCkgKyBcCisgICAgICAgICAgICBzdHJ1Y3QucGFjaygiIUgiLCBwYXlsb2FkX2xlbmd0aCkgKyBzdHJ1Y3QucGFjaygiIUgiLCBjaGVja3N1bSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgdWRwX2hlYWRlcj1mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGFueV9tZXNzYWdlX2luZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNfcG9ydCwgdWRwX2hlYWRlci5zcmNfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3RfcG9ydCwgdWRwX2hlYWRlci5kc3RfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXlsb2FkX2xlbmd0aCwgdWRwX2hlYWRlci5wYXlsb2FkX2xlbmd0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGVja3N1bSwgdWRwX2hlYWRlci5jaGVja3N1bSkKKworCitjbGFzcyBUZXN0SG9wQnlIb3BPcHRpb25zRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX29wdGlvbl9mcm9tX2J5dGVhcnJheV93aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKworICAgICAgICBjbGFzcyBEdW1teU9wdGlvbkZhY3Rvcnk6CisKKyAgICAgICAgICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnJlYWQoKQorCisgICAgICAgIGZhY3Rvcnk9SG9wQnlIb3BPcHRpb25zRmFjdG9yeShvcHRpb25zX2ZhY3RvcmllcyA9IHsyOiBEdW1teU9wdGlvbkZhY3RvcnkoKX0pCisKKyAgICAgICAgZGF0YT1ieXRlYXJyYXkoWzB4MDIsIDB4MDMsIDB4MTEsIDB4MjIsIDB4MzMsIDB4MDEsIDB4MDBdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfb3B0aW9ucz1mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGFueV9tZXNzYWdlX2luZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oYWN0dWFsX29wdGlvbnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGFjdHVhbF9vcHRpb25zWzBdLmhlYWRlci50eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGFjdHVhbF9vcHRpb25zWzBdLmhlYWRlci5sZW5ndGgpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9sb3dwYW4ucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfbG93cGFuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5ZjViMjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfbG93cGFuLnB5CkBAIC0wLDAgKzEsMjY5NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBpbworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb21tb24KK2ltcG9ydCBjb25maWcKK2ltcG9ydCBpcHY2CitpbXBvcnQgbG93cGFuCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9wYXJzZXIoY29udGV4dF9tYW5hZ2VyKToKKyAgICByZXR1cm4gbG93cGFuLkxvd3BhblBhcnNlcigKKyAgICAgICAgbG93cGFuX21lc2hfaGVhZGVyX2ZhY3Rvcnk9bG93cGFuLkxvd3Bhbk1lc2hIZWFkZXJGYWN0b3J5KCksCisgICAgICAgIGxvd3Bhbl9kZWNvbXByZXNzb3I9Y29uZmlnLmNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9kZWNvbXByZXNzb3IoY29udGV4dF9tYW5hZ2VyKSwKKyAgICAgICAgbG93cGFuX2ZyYWdlbWVudHNfYnVmZmVyc19tYW5hZ2VyPWxvd3Bhbi5Mb3dwYW5GcmFnbWVudHNCdWZmZXJzTWFuYWdlcigpLAorICAgICAgICBpcHY2X3BhY2tldF9mYWN0b3J5PWlwdjYuSVB2NlBhY2tldEZhY3RvcnkoCisgICAgICAgICAgICBlaGY9Y29uZmlnLmNyZWF0ZV9kZWZhdWx0X2lwdjZfZXh0ZW5zaW9uX2hlYWRlcnNfZmFjdG9yaWVzKCksCisgICAgICAgICAgICB1bHBmPXsKKyAgICAgICAgICAgICAgICAxNzogaXB2Ni5VRFBEYXRhZ3JhbUZhY3RvcnkoCisgICAgICAgICAgICAgICAgICAgIHVkcF9oZWFkZXJfZmFjdG9yeT1pcHY2LlVEUEhlYWRlckZhY3RvcnkoKSwKKyAgICAgICAgICAgICAgICAgICAgdWRwX3BheWxvYWRfZmFjdG9yeT1pcHY2LkJ5dGVzUGF5bG9hZEZhY3RvcnkoKSksCisgICAgICAgICAgICAgICAgNTg6IGlwdjYuSUNNUHY2RmFjdG9yeSgKKyAgICAgICAgICAgICAgICAgICAgYm9keV9mYWN0b3JpZXM9Y29uZmlnLmNyZWF0ZV9kZWZhdWx0X2lwdjZfaWNtcF9ib2R5X2ZhY3RvcmllcygpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgfQorICAgICAgICApCisgICAgKQorCisKK2RlZiBhbnlfdGYoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDIpCisKKworZGVmIGFueV9uaCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X2hsaW0oKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDIpCisKKworZGVmIGFueV9jaWQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9zYWMoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9zYW0oKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDIpCisKKworZGVmIGFueV9tKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfZGFjKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfZGFtKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygyKQorCisKK2RlZiBhbnlfZWNuKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygyKQorCisKK2RlZiBhbnlfZHNjcCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNikKKworCitkZWYgYW55X2Zsb3dfbGFiZWwoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDYpCisKKworZGVmIGFueV9ob3BfbGltaXQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9zcmNfYWRkcigpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSgxNildKQorCisKK2RlZiBhbnlfZHN0X2FkZHIoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoMTYpXSkKKworCitkZWYgYW55X2V1aTY0KCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDgpXSkKKworCitkZWYgYW55X3Jsb2MxNigpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSgyKV0pCisKKworZGVmIGFueV80OGJpdHNfYWRkcigpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSg2KV0pCisKKworZGVmIGFueV8zMmJpdHNfYWRkcigpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSg0KV0pCisKKworZGVmIGFueV84Yml0c19hZGRyKCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpXSkKKworCitkZWYgYW55X2MoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9wKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygyKQorCisKK2RlZiBhbnlfc3JjX3BvcnQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE2KQorCisKK2RlZiBhbnlfZHN0X3BvcnQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE2KQorCisKK2RlZiBhbnlfY29tcHJlc3NhYmxlX3NyY19wb3J0KCk6CisgICAgcmV0dXJuIDB4ZjAwMCArIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfY29tcHJlc3NhYmxlX2RzdF9wb3J0KCk6CisgICAgcmV0dXJuIDB4ZjAwMCArIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfbmliYmxlX3NyY19wb3J0KCk6CisgICAgcmV0dXJuIDB4ZjBiMCArIHJhbmRvbS5nZXRyYW5kYml0cyg0KQorCisKK2RlZiBhbnlfbmliYmxlX2RzdF9wb3J0KCk6CisgICAgcmV0dXJuIDB4ZjBiMCArIHJhbmRvbS5nZXRyYW5kYml0cyg0KQorCisKK2RlZiBhbnlfY2hlY2tzdW0oKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE2KQorCisKK2RlZiBhbnlfbmV4dF9oZWFkZXIoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9zY2koKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDQpCisKKworZGVmIGFueV9kY2koKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDQpCisKKworZGVmIGFueV9zcmNfbWFjX2FkZHIoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoOCldKQorCisKK2RlZiBhbnlfZHN0X21hY19hZGRyKCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDgpXSkKKworCitkZWYgYW55X2NvbnRleHQoKToKKyAgICBwcmVmaXggPSBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShyYW5kb20ucmFuZGludCgyLCAxNSkpXSkKKyAgICBwcmVmaXhfbGVuZ3RoID0gbGVuKHByZWZpeCkKKyAgICByZXR1cm4gbG93cGFuLkNvbnRleHQocHJlZml4LCBwcmVmaXhfbGVuZ3RoICogOCkKKworCitkZWYgYW55X21hY19hZGRyZXNzKCk6CisgICAgbGVuZ3RoID0gcmFuZG9tLmNob2ljZShbMiwgOF0pCisgICAgaWYgbGVuZ3RoID09IDI6CisgICAgICAgIHJldHVybiBjb21tb24uTWFjQWRkcmVzcy5mcm9tX3Jsb2MxNihieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShsZW5ndGgpXSkpCisgICAgZWxpZiBsZW5ndGggPT0gODoKKyAgICAgICAgcmV0dXJuIGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKV0pKQorCisKK2RlZiBhbnlfaG9wc19sZWZ0KCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfZGF0YShsZW5ndGg9Tm9uZSk6CisgICAgbGVuZ3RoID0gbGVuZ3RoIGlmIGxlbmd0aCBpcyBub3QgTm9uZSBlbHNlIHJhbmRvbS5yYW5kaW50KDEsIDY0KQorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShsZW5ndGgpXSkKKworCitkZWYgYW55X2RhdGFncmFtX3NpemUoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDExKQorCisKK2RlZiBhbnlfZGF0YWdyYW1fdGFnKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxNikKKworCitkZWYgYW55X2RhdGFncmFtX29mZnNldCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitjbGFzcyBUZXN0TG93cGFuSVBIQyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0xvd3BhbklQSENfb2JqZWN0X3doZW5fZnJvbV9ieXRlc19jbGFzc21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdGYgPSBhbnlfdGYoKQorICAgICAgICBuaCA9IGFueV9uaCgpCisgICAgICAgIGhsaW0gPSBhbnlfaGxpbSgpCisgICAgICAgIGNpZCA9IGFueV9jaWQoKQorICAgICAgICBzYWMgPSBhbnlfc2FjKCkKKyAgICAgICAgc2FtID0gYW55X3NhbSgpCisgICAgICAgIG0gPSBhbnlfbSgpCisgICAgICAgIGRhYyA9IGFueV9kYWMoKQorICAgICAgICBkYW0gPSBhbnlfZGFtKCkKKworICAgICAgICBieXRlMCA9ICgzIDw8IDUpIHwgKHRmIDw8IDMpIHwgKG5oIDw8IDIpIHwgaGxpbQorICAgICAgICBieXRlMSA9IChjaWQgPDwgNykgfCAoc2FjIDw8IDYpIHwgKHNhbSA8PCA0KSB8IChtIDw8IDMpIHwgKGRhYyA8PCAyKSB8IGRhbQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBieXRlYXJyYXkoW2J5dGUwLCBieXRlMV0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbCA9IGxvd3Bhbi5Mb3dwYW5JUEhDLmZyb21fYnl0ZXMoZGF0YV9ieXRlcykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZiwgYWN0dWFsLnRmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5oLCBhY3R1YWwubmgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGxpbSwgYWN0dWFsLmhsaW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2lkLCBhY3R1YWwuY2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNhYywgYWN0dWFsLnNhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzYW0sIGFjdHVhbC5zYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgYWN0dWFsLm0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFjLCBhY3R1YWwuZGFjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbSwgYWN0dWFsLmRhbSkKKworCitjbGFzcyBUZXN0TG93cGFuUGFyc2VyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV82bG93cGFuX3BhY2tldF93aXRoX21lc2hfaGVhZGVyX3RoYXRfY29udGFpbnNfaG9wX2xpbWl0X3N0b3JlZF9vbl90d29fYnl0ZXNfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHhiZiwgMHgxMywgMHg5MCwgMHgwMCwgMHg0OCwgMHgwMSwgMHg3YywgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZiwgMHhmMiwgMHhiZiwgMHhjMCwgMHgwMCwgMHgyNCwgMHhiMSwgMHg2MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHgwMiwgMHhmMCwgMHhiYSwgMHgwZCwgMHhmZiwgMHgwNCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMiwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwNywgMHgwOSwgMHg1MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMF0pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MTEsIDB4M2YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZkLCAweDAwLCAweDBkLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZSwgMHgwMCwgMHg5MCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmQsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZlLCAweDAwLCAweDQ4LCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMCwgMHhiZiwgMHhjMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHhlMiwgMHhkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjIsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4YmEsIDB4MGQsIDB4ZmYsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxLCAweDAwLCAweDAyLCAweDAyLCAweDA4LCAweDAwLCAweDA3LCAweDA5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MCwgMHgyMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbMF0gPSBsb3dwYW4uQ29udGV4dChwcmVmaXg9ImZkMDA6ZGI4OjovNjQiKQorCisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9wYXJzZXIoY29udGV4dF9tYW5hZ2VyKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaXB2Nl9wYWNrZXQgPSBwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhsb3dwYW5fcGFja2V0KSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwdjZfcGFja2V0LCBhY3R1YWxfaXB2Nl9wYWNrZXQudG9fYnl0ZXMoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV82bG93cGFuX3BhY2tldF93aXRoX25vdF9jb21wcmVzc2VkX3VkcF9hbmRfd2l0aG91dF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHgzMywgMHgxMSwgMHgxNiwgMHgzMywgMHgxNiwgMHgzNCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHhjZiwgMHg2MywgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwgMHgwYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTEsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM2LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNiwgMHgzMywgMHgxNiwgMHgzNCwgMHgwMCwgMHgxNCwgMHhjZiwgMHg2MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4ZmEsIDB4YTUsIDB4MGIsIDB4YzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgwMCwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMF0pKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDM0LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE3XSkpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXI9Tm9uZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9jb21wcmVzc2VkX3VkcF9hbmRfd2l0aG91dF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3ZSwgMHgzMywgMHhmMCwgMHgxNiwgMHgzMywgMHgxNiwgMHgzNCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhkMiwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwgMHgwYiwgMHhjMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTEsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM2LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNiwgMHgzMywgMHgxNiwgMHgzNCwgMHgwMCwgMHgxNCwgMHhjZiwgMHg2MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4ZmEsIDB4YTUsIDB4MGIsIDB4YzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgwMCwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMF0pKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDM0LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE3XSkpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXI9Tm9uZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9ub3RfY29tcHJlc3NlZF91ZHBfYW5kX3dpdGhfbm90X2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxvd3Bhbl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4N2EsIDB4MzMsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NmQsIDB4MDQsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MTgsIDB4MTYsIDB4MzMsIDB4MTYsIDB4MzQsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGMsIDB4MDQsIDB4ZDIsIDB4ODAsIDB4MDAsIDB4ZmEsIDB4YTUsIDB4MGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzAsIDB4MDAsIDB4MDQsIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIGlwdjZfcGFja2V0ID0gYnl0ZWFycmF5KFsweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNiwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4MDAsIDB4NmQsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2LCAweDMzLCAweDE2LCAweDM0LCAweDAwLCAweDE0LCAweGNmLCAweDYzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcj1Ob25lKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaXB2Nl9wYWNrZXQgPSBwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhsb3dwYW5fcGFja2V0KSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwdjZfcGFja2V0LCBhY3R1YWxfaXB2Nl9wYWNrZXQudG9fYnl0ZXMoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV82bG93cGFuX3BhY2tldF93aXRoX25vdF9jb21wcmVzc2VkX3VkcF9hbmRfd2l0aF9jb21wcmVzc2VkX2hvcF9ieV9ob3BfZXh0ZW5zaW9uX2hlYWRlcl93aGVuX2RlY29tcHJlc3NfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdlLCAweDMzLCAweGUwLCAweDExLCAweDA2LCAweDZkLCAweDA0LCAweDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDAwLCAweDE4LCAweDE2LCAweDMzLCAweDE2LCAweDM0LCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjLCAweDA0LCAweGQyLCAweDgwLCAweDAwLCAweGZhLCAweGE1LCAweDBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMwLCAweDAwLCAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzYsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDAwLCAweDZkLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNiwgMHgzMywgMHgxNiwgMHgzNCwgMHgwMCwgMHgxNCwgMHhjZiwgMHg2MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4ZmEsIDB4YTUsIDB4MGIsIDB4YzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgwMCwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMF0pKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDM0LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE3XSkpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXI9Tm9uZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9jb21wcmVzc2VkX3VkcF9hbmRfd2l0aF9jb21wcmVzc2VkX2hvcF9ieV9ob3BfZXh0ZW5zaW9uX2hlYWRlcl93aGVuX2RlY29tcHJlc3NfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdlLCAweDMzLCAweGUxLCAweDA2LCAweDZkLCAweDA0LCAweDQwLCAweDAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDE4LCAweGYwLCAweDE2LCAweDMzLCAweDE2LCAweDM0LCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGQyLCAweDgwLCAweDAwLCAweGZhLCAweGE1LCAweDBiLCAweGMwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzYsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDAwLCAweDZkLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNiwgMHgzMywgMHgxNiwgMHgzNCwgMHgwMCwgMHgxNCwgMHhjZiwgMHg2MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4ZmEsIDB4YTUsIDB4MGIsIDB4YzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgwMCwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMF0pKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDM0LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE3XSkpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXI9Tm9uZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9jb21wcmVzc2VkX2ljbXBfYW5kX3dpdGhvdXRfY29tcHJlc3NlZF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHhkNSwgMHhhYSwgMHgzYSwgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMSwgMHgzNiwgMHgyOSwgMHg5NiwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhhYywgMHhmZiwgMHgxOCwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4M2EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAweDAwLCAweDBkLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM2LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHg5NywgMHhmMywgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbMTBdID0gbG93cGFuLkNvbnRleHQocHJlZml4PSIyMDAwOjBkYjg6Oi82NCIpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfY29tcHJlc3NlZF9pY21wX2FuZF93aXRob3V0X2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkXzEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHhkNSwgMHhhYSwgMHgzYSwgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMSwgMHgzNiwgMHgyOSwgMHg5NiwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhhYywgMHhmZiwgMHgxOCwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4M2EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAweDAwLCAweDBkLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM2LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHg5NywgMHhmMywgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbMTBdID0gbG93cGFuLkNvbnRleHQocHJlZml4PSIyMDAwOjBkYjg6Oi82NCIpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfY29tcHJlc3NlZF9pY21wX2FuZF93aXRob3V0X2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkXzIoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHhmMCwgMHhhMCwgMHgzYSwgMHgyMCwgMHgwZCwgMHgxNCwgMHg1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHg1NSwgMHgwMCwgMHgwMCwgMHgyNSwgMHgxNCwgMHg0NiwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhkZCwgMHgyYSwgMHhmZSwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4M2EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAweDAwLCAweDBkLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MGQsIDB4MTQsIDB4NTYsIDB4MTIsIDB4NTUsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI1LCAweDE0LCAweDQ2LCAweGZmLCAweGZlLCAweGRkLCAweDJhLCAweGZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhiMywgMHhmMywgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbMTBdID0gbG93cGFuLkNvbnRleHQocHJlZml4PSIyMDAwOjBkYjg6Oi82NCIpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfY29tcHJlc3NlZF9pY21wX2FuZF93aXRob3V0X2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkXzMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHhkNSwgMHhhYSwgMHgzYSwgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMSwgMHgzNiwgMHgyOSwgMHg5NiwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhhYywgMHhmZiwgMHgxOCwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4M2EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAweDAwLCAweDBkLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM2LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHg5NywgMHhmMywgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbMTBdID0gbG93cGFuLkNvbnRleHQocHJlZml4PSIyMDAwOjBkYjg6Oi82NCIpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfY29tcHJlc3NlZF9pY21wX2FuZF93aXRob3V0X2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkXzQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHhmNSwgMHhhYSwgMHgzYSwgMHgzNiwgMHgyOSwgMHg5NiwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhhYywgMHhmZiwgMHgxOCwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4M2EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAweDAwLCAweDBkLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM2LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHg5NywgMHhmNCwgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbMTBdID0gbG93cGFuLkNvbnRleHQocHJlZml4PSIyMDAwOjBkYjg6Oi82NCIpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfY29tcHJlc3NlZF9pY21wX2FuZF93aXRob3V0X2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkXzUoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHhmNywgMHhhYywgMHgzYSwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4M2EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAweDAwLCAweDBkLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MGQsIDB4MTQsIDB4NTYsIDB4MTIsIDB4NTUsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI1LCAweDE0LCAweDQ2LCAweGZmLCAweGZlLCAweGRkLCAweDJhLCAweGZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhiMywgMHhmMywgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbMTBdID0gbG93cGFuLkNvbnRleHQocHJlZml4PSIyMDAwOjBkYjg6Oi82NCIpCisgICAgICAgIGNvbnRleHRfbWFuYWdlclsxMl0gPSBsb3dwYW4uQ29udGV4dChwcmVmaXg9IjIwMGQ6MTQ1NjoxMjU1OjAwMDA6MjUxNDo0NmZmOmZlZGQ6MmFmZS8xMjgiKQorCisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9wYXJzZXIoY29udGV4dF9tYW5hZ2VyKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaXB2Nl9wYWNrZXQgPSBwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhsb3dwYW5fcGFja2V0KSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwdjZfcGFja2V0LCBhY3R1YWxfaXB2Nl9wYWNrZXQudG9fYnl0ZXMoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV82bG93cGFuX3BhY2tldF93aXRoX2NvbXByZXNzZWRfaWNtcF9hbmRfd2l0aG91dF9jb21wcmVzc2VkX2hvcF9ieV9ob3BfZXh0ZW5zaW9uX2hlYWRlcl93aGVuX2RlY29tcHJlc3NfbWV0aG9kX2lzX2NhbGxlZF82KHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxvd3Bhbl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4N2EsIDB4ZjAsIDB4YzAsIDB4M2EsIDB4MjAsIDB4MGQsIDB4MTQsIDB4NTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4NTQsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NTQsIDB4MTEsIDB4ZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4MWMsIDB4N2UsIDB4ZmYsIDB4ODAsIDB4MDAsIDB4ZmEsIDB4YTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGIsIDB4YzAsIDB4MDAsIDB4MDQsIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIGlwdjZfcGFja2V0ID0gYnl0ZWFycmF5KFsweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDNhLCAweDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHgwZCwgMHgxNCwgMHg1NiwgMHgxMiwgMHg1NSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUsIDB4MTQsIDB4NDYsIDB4ZmYsIDB4ZmUsIDB4ZGQsIDB4MmEsIDB4ZmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAweDBkLCAweDE0LCAweDU2LCAweDEyLCAweDU0LCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHg1NCwgMHgxMSwgMHhmZiwgMHhmZSwgMHgxYywgMHg3ZSwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4YTUsIDB4NDAsIDB4MGIsIDB4YzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgwMCwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMF0pKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDM0LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE3XSkpCisKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyID0gbG93cGFuLkNvbnRleHRNYW5hZ2VyKCkKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyWzEyXSA9IGxvd3Bhbi5Db250ZXh0KHByZWZpeD0iMjAwZDoxNDU2OjEyNTU6MDAwMDoyNTE0OjQ2ZmY6ZmVkZDoyYWZlLzEyOCIpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfY29tcHJlc3NlZF9pY21wX2FuZF93aXRob3V0X2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkXzcoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHhkMCwgMHhkMCwgMHgzYSwgMHgwMCwgMHgwMiwgMHg5OCwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHgyMiwgMHgxMiwgMHgwMCwgMHgyMCwgMHgwZCwgMHgxNCwgMHg1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHg1NSwgMHgwMCwgMHgwMCwgMHgyNSwgMHgxNCwgMHg0NiwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhkZCwgMHgyYSwgMHhmZSwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4M2EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3NywgMHg4MiwgMHg5OCwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMiwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MGQsIDB4MTQsIDB4NTYsIDB4MTIsIDB4NTUsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI1LCAweDE0LCAweDQ2LCAweGZmLCAweGZlLCAweGRkLCAweDJhLCAweGZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhmNSwgMHgyOCwgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbMTNdID0gbG93cGFuLkNvbnRleHQocHJlZml4PSJBQUJCOkNDREQ6MDAwMDowMDAwOjc3OTY6Oi83NSIpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfY29tcHJlc3NlZF9pY21wX2FuZF93aXRob3V0X2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkXzgoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHhmMCwgMHhkMCwgMHgzYSwgMHgyMCwgMHgwZCwgMHgxNCwgMHg1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHg1NSwgMHgwMCwgMHgwMCwgMHgyNSwgMHgxNCwgMHg0NiwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhkZCwgMHgyYSwgMHhmZSwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4M2EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3NywgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MGQsIDB4MTQsIDB4NTYsIDB4MTIsIDB4NTUsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI1LCAweDE0LCAweDQ2LCAweGZmLCAweGZlLCAweGRkLCAweDJhLCAweGZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhmNSwgMHgxMSwgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbMTNdID0gbG93cGFuLkNvbnRleHQocHJlZml4PSJBQUJCOkNDREQ6MDAwMDowMDAwOjc3OTY6Oi83NSIpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfY29tcHJlc3NlZF9pY21wX2FuZF93aXRob3V0X2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkXzkoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHhmMCwgMHhkMCwgMHgzYSwgMHgyMCwgMHgwZCwgMHgxNCwgMHg1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHg1NSwgMHgwMCwgMHgwMCwgMHgyNSwgMHgxNCwgMHg0NiwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhkZCwgMHgyYSwgMHhmZSwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4M2EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3NywgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MGQsIDB4MTQsIDB4NTYsIDB4MTIsIDB4NTUsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI1LCAweDE0LCAweDQ2LCAweGZmLCAweGZlLCAweGRkLCAweDJhLCAweGZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhmNSwgMHgxMSwgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyID0gbG93cGFuLkNvbnRleHRNYW5hZ2VyKCkKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyWzEzXSA9IGxvd3Bhbi5Db250ZXh0KHByZWZpeD0iQUFCQjpDQ0REOjAwMDA6MDAwMDo3Nzk2OjovNzUiKQorCisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9wYXJzZXIoY29udGV4dF9tYW5hZ2VyKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaXB2Nl9wYWNrZXQgPSBwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhsb3dwYW5fcGFja2V0KSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwdjZfcGFja2V0LCBhY3R1YWxfaXB2Nl9wYWNrZXQudG9fYnl0ZXMoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9kZWZyYWdtZW50X2JpZ19JUHY2X3BhY2tldF93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWRfd2l0aF9mcmFnbWVudHNfaW5fcmFuZG9tX29yZGVyKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZyYWdtZW50XzEgPSBieXRlYXJyYXkoWzB4QzUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4N0EsIDB4MzMsIDB4M0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4NDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NEMsIDB4NjYsIDB4NEVdKQorCisgICAgICAgIGZyYWdtZW50XzIgPSBieXRlYXJyYXkoWzB4RTUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4YTMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4MUIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUFdKQorCisgICAgICAgIGZyYWdtZW50XzMgPSBieXRlYXJyYXkoWzB4RTUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4RDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4Q0MsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4NDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkMsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzddKQorCisgICAgICAgIGZyYWdtZW50XzQgPSBieXRlYXJyYXkoWzB4RTUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4MjksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4NDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTldKQorCisgICAgICAgIGZyYWdtZW50XzUgPSBieXRlYXJyYXkoWzB4RTUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4MzUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NEMsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4YTMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUFdKQorCisgICAgICAgIGZyYWdtZW50XzYgPSBieXRlYXJyYXkoWzB4RTUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4NDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4MUIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjcsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4RDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAsIDB4MDAsIDB4RkEsIDB4MTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4Q0MsIDB4NEVdKQorCisgICAgICAgIGZyYWdtZW50XzcgPSBieXRlYXJyYXkoWzB4RTUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4NEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4NDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkMsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkEsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4M0EsIDB4NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKQorCisgICAgICAgIGZyYWdtZW50XzggPSBieXRlYXJyYXkoWzB4RTUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4NTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MUEsIDB4MkEsIDB4M0YsIDB4MDksIDB4QUIsIDB4NDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAsIDB4MDAsIDB4RjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4M0EsIDB4NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MUEsIDB4MkEsIDB4M0YsIDB4MDksIDB4QUIsIDB4NDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4NDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkMsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzddKQorCisgICAgICAgIGZyYWdtZW50XzkgPSBieXRlYXJyYXkoWzB4RTUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4NjUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NEMsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4YTMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NEQsIDB4NjYsIDB4NzcsIDB4OTldKQorCisgICAgICAgIGZyYWdtZW50XzEwID0gYnl0ZWFycmF5KFsweEU1LCAweDAwLCAweDMxLCAweDlGLCAweDcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweEZBLCAweEE1LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHgxQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIsIDB4QkIsIDB4NTEsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhEMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBXSkKKworICAgICAgICBmcmFnbWVudF8xMSA9IGJ5dGVhcnJheShbMHhFNSwgMHgwMCwgMHgzMSwgMHg5RiwgMHg3RCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweENDLCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweDRBLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQywgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweEZBLCAweEE1LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RV0pCisKKyAgICAgICAgZnJhZ21lbnRfMTIgPSBieXRlYXJyYXkoWzB4RTUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4ODksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4NDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDNBLCAweDQ0LCAweDY2LCAweDc3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDRDLCAweDY2LCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUFdKQorCisgICAgICAgIGZyYWdtZW50XzEzID0gYnl0ZWFycmF5KFsweEU1LCAweDAwLCAweDMxLCAweDlGLCAweDk1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhhMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgxQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4MUIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4RDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjZdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1XSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MUEsIDB4MkEsIDB4M0YsIDB4MDksIDB4QUIsIDB4NDNdKSkKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcj1Ob25lKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhmcmFnbWVudF80KSwgbWVzc2FnZV9pbmZvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8oZnJhZ21lbnRfMiksIG1lc3NhZ2VfaW5mbykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGZyYWdtZW50XzMpLCBtZXNzYWdlX2luZm8pKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhmcmFnbWVudF8xMyksIG1lc3NhZ2VfaW5mbykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGZyYWdtZW50XzUpLCBtZXNzYWdlX2luZm8pKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhmcmFnbWVudF82KSwgbWVzc2FnZV9pbmZvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8oZnJhZ21lbnRfNyksIG1lc3NhZ2VfaW5mbykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGZyYWdtZW50XzgpLCBtZXNzYWdlX2luZm8pKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhmcmFnbWVudF85KSwgbWVzc2FnZV9pbmZvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8oZnJhZ21lbnRfMTApLCBtZXNzYWdlX2luZm8pKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhmcmFnbWVudF8xMSksIG1lc3NhZ2VfaW5mbykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGZyYWdtZW50XzEyKSwgbWVzc2FnZV9pbmZvKSkKKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8oZnJhZ21lbnRfMSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4RDgsIDB4M0EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDAwLCAweDFBLCAweDJBLCAweDNGLCAweDA5LCAweEFCLCAweDQzLCAgIyAvICogNDAgKiAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweEFCLCAweDY0LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0MywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLCAgIyAvICogMTIwICogLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NEMsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4YTMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgICMgLyAqIDIwMCAqIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweDFCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweEQzLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsICAjIC8gKiAyODAgKiAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwLCAweDAwLCAweEZBLCAweEE1LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHhDQywgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0MywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkMsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLCAgIyAvICogMzYwICogLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4NDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDRDLCAweDY2LCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweGEzLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweEZBLCAweEE1LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHgxQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjcsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhEMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDMCwgMHgwMCwgMHhGQSwgMHgxNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4Q0MsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4NDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJDLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQSwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4M0EsIDB4NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDAwLCAweDFBLCAweDJBLCAweDNGLCAweDA5LCAweEFCLCAweDQzLCAgIyAvICogNzIwICogLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MCwgMHgwMCwgMHhGMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzQSwgMHg2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDAwLCAweDAwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MUEsIDB4MkEsIDB4M0YsIDB4MDksIDB4QUIsIDB4NDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweEZBLCAweEE1LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0MywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkMsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NEMsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4YTMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NEQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweDFCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMiwgMHhCQiwgMHg1MSwgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweEQzLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwLCAweDAwLCAweEZBLCAweEE1LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHhDQywgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0QSwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkMsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLCAgIyAvICogMTA4MCAqIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweDQzLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgzQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweEZBLCAweEE1LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0QywgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhhMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgxQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4MUIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4RDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjZdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwdjZfcGFja2V0LCBhY3R1YWxfaXB2Nl9wYWNrZXQudG9fYnl0ZXMoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9kZWZyYWdtZW50X0lQdjZfcGFja2V0X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZF93aXRoX2ZyYWdtZW50cyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNV0pKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDAwLCAweDFBLCAweDJBLCAweDNGLCAweDA5LCAweEFCLCAweDQzXSkpCisKKyAgICAgICAgZnJhZ21lbnRfMSA9IGJ5dGVhcnJheShbMHhDMCwgMHgzOCwgMHgxMiwgMHgzNCwgMHg3QSwgMHgzMywgMHgzQSwgMHg4MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgxQSwgMHgzMywgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNF0pCisKKyAgICAgICAgZnJhZ21lbnRfMiA9IGJ5dGVhcnJheShbMHhFMCwgMHgzOCwgMHgxMiwgMHgzNCwgMHgwNiwgMHg0RSwgMHg5MiwgMHhCQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MywgMHgxMSwgMHgxMiwgMHgxMywgMHgxNF0pCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihOb25lKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhmcmFnbWVudF8xKSwgbWVzc2FnZV9pbmZvPW1lc3NhZ2VfaW5mbykpCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGZyYWdtZW50XzIpLCBtZXNzYWdlX2luZm89bWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzQSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDAwLCAweDAwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MUEsIDB4MkEsIDB4M0YsIDB4MDksIDB4QUIsIDB4NDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweDFBLCAweDMzLCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHgxMiwgMHgxMywgMHgxNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisKK2NsYXNzIFRlc3RMb3dwYW5VZHBIZWFkZXJGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV91ZHBfZGF0YWdyYW1fcG9ydHNfd2hlbl9kZWNvbXByZXNzX3VkcF9wb3J0c19tZXRob2RfaXNfY2FsbGVkX3dpdGhfdWRwaGNfcF9lcXVhbF8wKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuVWRwSGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgcCA9IGZhY3RvcnkuVURQX0hDX1BfQk9USF9GVUxMCisKKyAgICAgICAgdWRwaGMgPSBsb3dwYW4uTG93cGFuVURQSEMoYW55X2MoKSwgcCkKKworICAgICAgICBzcmNfcG9ydCA9IGFueV9zcmNfcG9ydCgpCisgICAgICAgIGRzdF9wb3J0ID0gYW55X2RzdF9wb3J0KCkKKworICAgICAgICBkYXRhX2J5dGVzID0gc3RydWN0LnBhY2soIj5IIiwgc3JjX3BvcnQpICsgc3RydWN0LnBhY2soIj5IIiwgZHN0X3BvcnQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zcmNfcG9ydCwgYWN0dWFsX2RzdF9wb3J0ID0gZmFjdG9yeS5fZGVjb21wcmVzc191ZHBfcG9ydHModWRwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjX3BvcnQsIGFjdHVhbF9zcmNfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3RfcG9ydCwgYWN0dWFsX2RzdF9wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHApCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfdWRwX2RhdGFncmFtX3BvcnRzX3doZW5fZGVjb21wcmVzc191ZHBfcG9ydHNfbWV0aG9kX2lzX2NhbGxlZF93aXRoX3VkcGhjX3BfZXF1YWxfMShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhblVkcEhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIHAgPSBmYWN0b3J5LlVEUF9IQ19QX0RTVF9DT01QUgorCisgICAgICAgIHVkcGhjID0gbG93cGFuLkxvd3BhblVEUEhDKGFueV9jKCksIHApCisKKyAgICAgICAgc3JjX3BvcnQgPSBhbnlfc3JjX3BvcnQoKQorICAgICAgICBkc3RfcG9ydCA9IGFueV9jb21wcmVzc2FibGVfZHN0X3BvcnQoKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBzdHJ1Y3QucGFjaygiPkgiLCBzcmNfcG9ydCkgKyBieXRlYXJyYXkoW3N0cnVjdC5wYWNrKCI+SCIsIGRzdF9wb3J0KVsxXV0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zcmNfcG9ydCwgYWN0dWFsX2RzdF9wb3J0ID0gZmFjdG9yeS5fZGVjb21wcmVzc191ZHBfcG9ydHModWRwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNfcG9ydCwgYWN0dWFsX3NyY19wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzdF9wb3J0LCBhY3R1YWxfZHN0X3BvcnQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfdWRwX2RhdGFncmFtX3BvcnRzX3doZW5fZGVjb21wcmVzc191ZHBfcG9ydHNfbWV0aG9kX2lzX2NhbGxlZF93aXRoX3VkcGhjX3BfZXF1YWxfMihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhblVkcEhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIHAgPSBmYWN0b3J5LlVEUF9IQ19QX1NSQ19DT01QUgorCisgICAgICAgIHVkcGhjID0gbG93cGFuLkxvd3BhblVEUEhDKGFueV9jKCksIHApCisKKyAgICAgICAgc3JjX3BvcnQgPSBhbnlfY29tcHJlc3NhYmxlX3NyY19wb3J0KCkKKyAgICAgICAgZHN0X3BvcnQgPSBhbnlfZHN0X3BvcnQoKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBieXRlYXJyYXkoW3N0cnVjdC5wYWNrKCI+SCIsIHNyY19wb3J0KVsxXV0pICsgc3RydWN0LnBhY2soIj5IIiwgZHN0X3BvcnQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zcmNfcG9ydCwgYWN0dWFsX2RzdF9wb3J0ID0gZmFjdG9yeS5fZGVjb21wcmVzc191ZHBfcG9ydHModWRwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNfcG9ydCwgYWN0dWFsX3NyY19wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzdF9wb3J0LCBhY3R1YWxfZHN0X3BvcnQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfdWRwX2RhdGFncmFtX3BvcnRzX3doZW5fZGVjb21wcmVzc191ZHBfcG9ydHNfbWV0aG9kX2lzX2NhbGxlZF93aXRoX3VkcGhjX3BfZXF1YWxfMyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhblVkcEhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIHAgPSBmYWN0b3J5LlVEUF9IQ19QX0JPVEhfQ09NUFIKKworICAgICAgICB1ZHBoYyA9IGxvd3Bhbi5Mb3dwYW5VRFBIQyhhbnlfYygpLCBwKQorCisgICAgICAgIHNyY19wb3J0ID0gYW55X25pYmJsZV9zcmNfcG9ydCgpCisgICAgICAgIGRzdF9wb3J0ID0gYW55X25pYmJsZV9kc3RfcG9ydCgpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheShbKChzcmNfcG9ydCAmIDB4MEYpIDw8IDQpIHwgKGRzdF9wb3J0ICYgMHgwRildKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3JjX3BvcnQsIGFjdHVhbF9kc3RfcG9ydCA9IGZhY3RvcnkuX2RlY29tcHJlc3NfdWRwX3BvcnRzKHVkcGhjLCBpby5CeXRlc0lPKGRhdGFfYnl0ZXMpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjX3BvcnQsIGFjdHVhbF9zcmNfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3RfcG9ydCwgYWN0dWFsX2RzdF9wb3J0KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3VkcF9kYXRhZ3JhbV9jaGVja3N1bV93aGVuX2RlY29tcHJlc3NfdWRwX2NoZWNrc3VtX2lzX2NhbGxlZF93aXRoX3VkcGhjX2NfZXF1YWxfMChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhblVkcEhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIGMgPSBmYWN0b3J5LlVEUF9IQ19DX0lOTElORQorCisgICAgICAgIHVkcGhjID0gbG93cGFuLkxvd3BhblVEUEhDKGMsIGFueV9wKCkpCisKKyAgICAgICAgY2hlY2tzdW0gPSBhbnlfY2hlY2tzdW0oKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBzdHJ1Y3QucGFjaygiPkgiLCBjaGVja3N1bSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NoZWNrc3VtID0gZmFjdG9yeS5fZGVjb21wcmVzc191ZHBfY2hlY2tzdW0odWRwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGVja3N1bSwgYWN0dWFsX2NoZWNrc3VtKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3VkcF9kYXRhZ3JhbV9jaGVja3N1bV93aGVuX2RlY29tcHJlc3NfdWRwX2NoZWNrc3VtX2lzX2NhbGxlZF93aXRoX3VkcGhjX2NfZXF1YWxfMShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhblVkcEhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIGMgPSBmYWN0b3J5LlVEUF9IQ19DX0VMSURFRAorCisgICAgICAgIHVkcGhjID0gbG93cGFuLkxvd3BhblVEUEhDKGMsIGFueV9wKCkpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9IGZhY3RvcnkuX2RlY29tcHJlc3NfdWRwX2NoZWNrc3VtKHVkcGhjLCBpby5CeXRlc0lPKGRhdGFfYnl0ZXMpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYWN0dWFsX2NoZWNrc3VtKQorCisKK2NsYXNzIFRlc3RMb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBJUFY2X0xJTktMT0NBTF9QUkVGSVggPSBieXRlYXJyYXkoWzB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3RyYWZmaWNfY2xhc3NfYW5kX2Zsb3dfbGFiZWxfd2hlbl9kZWNvbXByZXNzX3RmX21ldGhvZF9pc19jYWxsZWRfd2l0aF9pcGhjX3RmX2VxdWFsXzAoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZWNuID0gYW55X2VjbigpCisgICAgICAgIGRzY3AgPSBhbnlfZHNjcCgpCisgICAgICAgIGZsb3dfbGFiZWwgPSBhbnlfZmxvd19sYWJlbCgpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheSgpCisgICAgICAgIGRhdGFfYnl0ZXMuYXBwZW5kKChlY24gPDwgNikgfCBkc2NwKQorICAgICAgICBkYXRhX2J5dGVzLmFwcGVuZCgoZmxvd19sYWJlbCA+PiAxNikgJiAweDBGKQorICAgICAgICBkYXRhX2J5dGVzLmFwcGVuZCgoZmxvd19sYWJlbCA+PiA4KSAmIDB4RkYpCisgICAgICAgIGRhdGFfYnl0ZXMuYXBwZW5kKGZsb3dfbGFiZWwgJiAweEZGKQorCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIHRmID0gZmFjdG9yeS5JUEhDX1RGXzRCCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyh0ZiwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBhbnlfbSgpLCBhbnlfZGFjKCksIGFueV9kYW0oKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3RyYWZmaWNfY2xhc3MsIGFjdHVhbF9mbG93X2xhYmVsID0gZmFjdG9yeS5fZGVjb21wcmVzc190ZihpcGhjLCBpby5CeXRlc0lPKGRhdGFfYnl0ZXMpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHRmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChkc2NwIDw8IDIpIHwgZWNuLCBhY3R1YWxfdHJhZmZpY19jbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG93X2xhYmVsLCBhY3R1YWxfZmxvd19sYWJlbCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV90cmFmZmljX2NsYXNzX2FuZF9mbG93X2xhYmVsX3doZW5fZGVjb21wcmVzc190Zl9tZXRob2RfaXNfY2FsbGVkX3dpdGhfaXBoY190Zl9lcXVhbF8xKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGVjbiA9IGFueV9lY24oKQorICAgICAgICBmbG93X2xhYmVsID0gYW55X2Zsb3dfbGFiZWwoKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBieXRlYXJyYXkoKQorICAgICAgICBkYXRhX2J5dGVzLmFwcGVuZCgoZWNuIDw8IDYpIHwgKGZsb3dfbGFiZWwgPj4gMTYpICYgMHgwRikKKyAgICAgICAgZGF0YV9ieXRlcy5hcHBlbmQoKGZsb3dfbGFiZWwgPj4gOCkgJiAweEZGKQorICAgICAgICBkYXRhX2J5dGVzLmFwcGVuZChmbG93X2xhYmVsICYgMHhGRikKKworICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICB0ZiA9IGZhY3RvcnkuSVBIQ19URl8zQgorICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEModGYsIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgYW55X20oKSwgYW55X2RhYygpLCBhbnlfZGFtKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90cmFmZmljX2NsYXNzLCBhY3R1YWxfZmxvd19sYWJlbCA9IGZhY3RvcnkuX2RlY29tcHJlc3NfdGYoaXBoYywgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlY24sIGFjdHVhbF90cmFmZmljX2NsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb3dfbGFiZWwsIGFjdHVhbF9mbG93X2xhYmVsKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3RyYWZmaWNfY2xhc3NfYW5kX2Zsb3dfbGFiZWxfd2hlbl9kZWNvbXByZXNzX3RmX21ldGhvZF9pc19jYWxsZWRfd2l0aF9pcGhjX3RmX2VxdWFsXzIoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZWNuID0gYW55X2VjbigpCisgICAgICAgIGRzY3AgPSBhbnlfZHNjcCgpCisgICAgICAgIGZsb3dfbGFiZWwgPSBhbnlfZmxvd19sYWJlbCgpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheShbKGVjbiA8PCA2KSB8IGRzY3BdKQorCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIHRmID0gZmFjdG9yeS5JUEhDX1RGXzFCCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyh0ZiwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBhbnlfbSgpLCBhbnlfZGFjKCksIGFueV9kYW0oKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3RyYWZmaWNfY2xhc3MsIGFjdHVhbF9mbG93X2xhYmVsID0gZmFjdG9yeS5fZGVjb21wcmVzc190ZihpcGhjLCBpby5CeXRlc0lPKGRhdGFfYnl0ZXMpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHRmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChkc2NwIDw8IDIpIHwgZWNuLCBhY3R1YWxfdHJhZmZpY19jbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBhY3R1YWxfZmxvd19sYWJlbCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV90cmFmZmljX2NsYXNzX2FuZF9mbG93X2xhYmVsX3doZW5fZGVjb21wcmVzc190Zl9tZXRob2RfaXNfY2FsbGVkX3dpdGhfaXBoY190Zl9lcXVhbF8zKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZsb3dfbGFiZWwgPSBhbnlfZmxvd19sYWJlbCgpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheSgpCisKKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgdGYgPSBmYWN0b3J5LklQSENfVEZfRUxJREVECisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyh0ZiwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBhbnlfbSgpLCBhbnlfZGFjKCksIGFueV9kYW0oKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3RyYWZmaWNfY2xhc3MsIGFjdHVhbF9mbG93X2xhYmVsID0gZmFjdG9yeS5fZGVjb21wcmVzc190ZihpcGhjLCBpby5CeXRlc0lPKGRhdGFfYnl0ZXMpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHRmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGFjdHVhbF90cmFmZmljX2NsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGFjdHVhbF9mbG93X2xhYmVsKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3RyYWZmaWNfY2xhc3NfYW5kX2Zsb3dfbGFiZWxfd2hlbl9kZWNvbXByZXNzX25oX21ldGhvZF9pc19jYWxsZWRfd2l0aF9pcGhjX25oX2VxdWFsXzAoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgbmV4dF9oZWFkZXIgPSBhbnlfbmV4dF9oZWFkZXIoKQorCisgICAgICAgIG5oID0gZmFjdG9yeS5JUEhDX05IX0lOTElORQorICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIG5oLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgYW55X20oKSwgYW55X2RhYygpLCBhbnlfZGFtKCkpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheShbbmV4dF9oZWFkZXJdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbmV4dF9oZWFkZXIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX25oKGlwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbmgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dF9oZWFkZXIsIGFjdHVhbF9uZXh0X2hlYWRlcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV90cmFmZmljX2NsYXNzX2FuZF9mbG93X2xhYmVsX3doZW5fZGVjb21wcmVzc19uaF9tZXRob2RfaXNfY2FsbGVkX3dpdGhfaXBoY19uaF9lcXVhbF8xKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIG5oID0gZmFjdG9yeS5JUEhDX05IX0NPTVBSRVNTRUQKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBuaCwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBieXRlYXJyYXkoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbmV4dF9oZWFkZXIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX25oKGlwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbmgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgYWN0dWFsX25leHRfaGVhZGVyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2hvcF9saW1pdF93aGVuX2RlY29tcHJlc3NfaGxpbV9pc19jYWxsZWRfd2l0aF9pcGhjX2hsaW1fZXF1YWxfMChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBob3BfbGltaXQgPSBhbnlfaG9wX2xpbWl0KCkKKworICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBobGltID0gZmFjdG9yeS5JUEhDX0hMSU1fSU5MSU5FCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGhsaW0sIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBhbnlfbSgpLCBhbnlfZGFjKCksIGFueV9kYW0oKSkKKworICAgICAgICBkYXRhX2J5dGVzID0gYnl0ZWFycmF5KFtob3BfbGltaXRdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaG9wX2xpbWl0ID0gZmFjdG9yeS5fZGVjb21wcmVzc19obGltKGlwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgaGxpbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3BfbGltaXQsIGFjdHVhbF9ob3BfbGltaXQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfaG9wX2xpbWl0X3doZW5fZGVjb21wcmVzc19obGltX2lzX2NhbGxlZF93aXRoX2lwaGNfaGxpbV9lcXVhbF8xKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIGhsaW0gPSBmYWN0b3J5LklQSENfSExJTV8xCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGhsaW0sIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBhbnlfbSgpLCBhbnlfZGFjKCksIGFueV9kYW0oKSkKKworICAgICAgICBkYXRhX2J5dGVzID0gYnl0ZWFycmF5KCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2hvcF9saW1pdCA9IGZhY3RvcnkuX2RlY29tcHJlc3NfaGxpbShpcGhjLCBpby5CeXRlc0lPKGRhdGFfYnl0ZXMpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGhsaW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgYWN0dWFsX2hvcF9saW1pdCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9ob3BfbGltaXRfd2hlbl9kZWNvbXByZXNzX2hsaW1faXNfY2FsbGVkX3dpdGhfaXBoY19obGltX2VxdWFsXzIoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgaGxpbSA9IGZhY3RvcnkuSVBIQ19ITElNXzY0CisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGhsaW0sIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBhbnlfbSgpLCBhbnlfZGFjKCksIGFueV9kYW0oKSkKKworICAgICAgICBkYXRhX2J5dGVzID0gYnl0ZWFycmF5KCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2hvcF9saW1pdCA9IGZhY3RvcnkuX2RlY29tcHJlc3NfaGxpbShpcGhjLCBpby5CeXRlc0lPKGRhdGFfYnl0ZXMpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGhsaW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNjQsIGFjdHVhbF9ob3BfbGltaXQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfaG9wX2xpbWl0X3doZW5fZGVjb21wcmVzc19obGltX2lzX2NhbGxlZF93aXRoX2lwaGNfaGxpbV9lcXVhbF8zKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIGhsaW0gPSBmYWN0b3J5LklQSENfSExJTV8yNTUKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgaGxpbSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBieXRlYXJyYXkoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaG9wX2xpbWl0ID0gZmFjdG9yeS5fZGVjb21wcmVzc19obGltKGlwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgaGxpbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyNTUsIGFjdHVhbF9ob3BfbGltaXQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2Vfc291cmNlX2FkZHJlc3Nfd2hlbl9kZWNvbXByZXNzX3NyY19hZGRyX2lzX2NhbGxlZF93aXRoX3NhY19lcXVhbF8wX2FuZF9zYW1fZXF1YWxfMChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBzcmNfYWRkciA9IGFueV9zcmNfYWRkcigpCisKKyAgICAgICAgc2FjID0gZmFjdG9yeS5JUEhDX1NBQ19TVEFURUxFU1MKKyAgICAgICAgc2FtID0gZmFjdG9yeS5JUEhDX1NBTV8xMjhCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBzYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW0sIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3JjX2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3NyY19hZGRyKGlwaGMsIGFueV9zcmNfbWFjX2FkZHIoKSwgYW55X3NjaSgpLCBpby5CeXRlc0lPKHNyY19hZGRyKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2FtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKHNyY19hZGRyKSwgYWN0dWFsX3NyY19hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3NvdXJjZV9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19zcmNfYWRkcl9pc19jYWxsZWRfd2l0aF9zYWNfZXF1YWxfMF9hbmRfc2FtX2VxdWFsXzEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgZXVpNjQgPSBhbnlfZXVpNjQoKQorCisgICAgICAgIHNhYyA9IGZhY3RvcnkuSVBIQ19TQUNfU1RBVEVMRVNTCisgICAgICAgIHNhbSA9IGZhY3RvcnkuSVBIQ19TQU1fNjRCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBzYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW0sIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3JjX2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3NyY19hZGRyKGlwaGMsIGFueV9zcmNfbWFjX2FkZHIoKSwgYW55X3NjaSgpLCBpby5CeXRlc0lPKGV1aTY0KSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2FtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuSVBWNl9MSU5LTE9DQUxfUFJFRklYICsgZXVpNjQsIGFjdHVhbF9zcmNfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9zb3VyY2VfYWRkcmVzc193aGVuX2RlY29tcHJlc3Nfc3JjX2FkZHJfaXNfY2FsbGVkX3dpdGhfc2FjX2VxdWFsXzBfYW5kX3NhbV9lcXVhbF8yKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIHJsb2MxNiA9IGFueV9ybG9jMTYoKQorCisgICAgICAgIHNhYyA9IGZhY3RvcnkuSVBIQ19TQUNfU1RBVEVMRVNTCisgICAgICAgIHNhbSA9IGZhY3RvcnkuSVBIQ19TQU1fMTZCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBzYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW0sIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3JjX2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3NyY19hZGRyKGlwaGMsIGFueV9zcmNfbWFjX2FkZHIoKSwgYW55X3NjaSgpLCBpby5CeXRlc0lPKHJsb2MxNikpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2FjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLklQVjZfTElOS0xPQ0FMX1BSRUZJWCArCisgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZlLCAweDAwXSkgKyBybG9jMTYsIGFjdHVhbF9zcmNfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9zb3VyY2VfYWRkcmVzc193aGVuX2RlY29tcHJlc3Nfc3JjX2FkZHJfaXNfY2FsbGVkX3dpdGhfc2FjX2VxdWFsXzBfYW5kX3NhbV9lcXVhbF8zKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIHNyY19tYWNfYWRkciA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoYW55X3NyY19tYWNfYWRkcigpKQorCisgICAgICAgIHNhYyA9IGZhY3RvcnkuSVBIQ19TQUNfU1RBVEVMRVNTCisgICAgICAgIHNhbSA9IGZhY3RvcnkuSVBIQ19TQU1fRUxJREVECisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBzYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW0sIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBieXRlYXJyYXkoW10pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zcmNfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3Nfc3JjX2FkZHIoaXBoYywgc3JjX21hY19hZGRyLCBhbnlfc2NpKCksIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2FjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHNhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLklQVjZfTElOS0xPQ0FMX1BSRUZJWCArCisgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KFtzcmNfbWFjX2FkZHIubWFjX2FkZHJlc3NbMF0gXiAweDAyXSkgKworICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19tYWNfYWRkci5tYWNfYWRkcmVzc1sxOl0sIGFjdHVhbF9zcmNfYWRkcikKKworICAgIGRlZiBfbWVyZ2VfcHJlZml4X2FuZF9hZGRyZXNzKHNlbGYsIHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYWRkcmVzcyk6CisgICAgICAgIHRvdGFsX2J5dGVzID0gMTYKKworICAgICAgICBwcmVmaXhfbGVuZ3RoX2luX2J5dGVzID0gaW50KHByZWZpeF9sZW5ndGggLyA4KQorCisgICAgICAgIGlmIChwcmVmaXhfbGVuZ3RoX2luX2J5dGVzICsgbGVuKGFkZHJlc3MpKSA+IHRvdGFsX2J5dGVzOgorICAgICAgICAgICAgdG90YWxfYnl0ZXMgLT0gcHJlZml4X2xlbmd0aF9pbl9ieXRlcworCisgICAgICAgICAgICByZXR1cm4gcHJlZml4WzpwcmVmaXhfbGVuZ3RoX2luX2J5dGVzXSArIGFkZHJlc3NbLXRvdGFsX2J5dGVzOl0KKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdG90YWxfYnl0ZXMgLT0gcHJlZml4X2xlbmd0aF9pbl9ieXRlcworICAgICAgICAgICAgdG90YWxfYnl0ZXMgLT0gbGVuKGFkZHJlc3MpCisKKyAgICAgICAgICAgIHJldHVybiBwcmVmaXhbOnByZWZpeF9sZW5ndGhfaW5fYnl0ZXNdICsgYnl0ZWFycmF5KFsweDAwXSAqIHRvdGFsX2J5dGVzKSArIGFkZHJlc3MKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9zb3VyY2VfYWRkcmVzc193aGVuX2RlY29tcHJlc3Nfc3JjX2FkZHJfaXNfY2FsbGVkX3dpdGhfc2FjX2VxdWFsXzFfYW5kX3NhbV9lcXVhbF8wKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoTm9uZSkKKworICAgICAgICBzcmNfYWRkciA9IGFueV9zcmNfYWRkcigpCisKKyAgICAgICAgc2FjID0gZmFjdG9yeS5JUEhDX1NBQ19TVEFURUZVTAorICAgICAgICBzYW0gPSBmYWN0b3J5LklQSENfU0FNX1VOU1BFQ0lGSUVECisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBzYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW0sIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3JjX2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3NyY19hZGRyKGlwaGMsIGFueV9zcmNfbWFjX2FkZHIoKSwgYW55X3NjaSgpLCBpby5CeXRlc0lPKHNyY19hZGRyKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2FtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgwMF0gKiAxNiksIGFjdHVhbF9zcmNfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9zb3VyY2VfYWRkcmVzc193aGVuX2RlY29tcHJlc3Nfc3JjX2FkZHJfaXNfY2FsbGVkX3dpdGhfc2FjX2VxdWFsXzFfYW5kX3NhbV9lcXVhbF8xKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNjaSA9IGFueV9zY2koKQorCisgICAgICAgIGNvbnRleHQgPSBhbnlfY29udGV4dCgpCisKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyID0gbG93cGFuLkNvbnRleHRNYW5hZ2VyKCkKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyW3NjaV0gPSBjb250ZXh0CisKKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeShjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgZXVpNjQgPSBhbnlfZXVpNjQoKQorCisgICAgICAgIHNhYyA9IGZhY3RvcnkuSVBIQ19TQUNfU1RBVEVGVUwKKyAgICAgICAgc2FtID0gZmFjdG9yeS5JUEhDX1NBTV82NEIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIHNhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbSwgYW55X20oKSwgYW55X2RhYygpLCBhbnlfZGFtKCkpCisKKyAgICAgICAgc3JjX2FkZHIgPSBzZWxmLl9tZXJnZV9wcmVmaXhfYW5kX2FkZHJlc3MoY29udGV4dC5wcmVmaXgsIGNvbnRleHQucHJlZml4X2xlbmd0aCwgZXVpNjQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zcmNfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3Nfc3JjX2FkZHIoaXBoYywgYW55X3NyY19tYWNfYWRkcigpLCBzY2ksIGlvLkJ5dGVzSU8oZXVpNjQpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjX2FkZHIsIGFjdHVhbF9zcmNfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9zb3VyY2VfYWRkcmVzc193aGVuX2RlY29tcHJlc3Nfc3JjX2FkZHJfaXNfY2FsbGVkX3dpdGhfc2FjX2VxdWFsXzFfYW5kX3NhbV9lcXVhbF8yKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNjaSA9IGFueV9zY2koKQorCisgICAgICAgIGNvbnRleHQgPSBhbnlfY29udGV4dCgpCisKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyID0gbG93cGFuLkNvbnRleHRNYW5hZ2VyKCkKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyW3NjaV0gPSBjb250ZXh0CisKKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeShjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgcmxvYzE2ID0gYW55X3Jsb2MxNigpCisKKyAgICAgICAgc2FjID0gZmFjdG9yeS5JUEhDX1NBQ19TVEFURUZVTAorICAgICAgICBzYW0gPSBmYWN0b3J5LklQSENfU0FNXzE2QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgc2FjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtLCBhbnlfbSgpLCBhbnlfZGFjKCksIGFueV9kYW0oKSkKKworICAgICAgICBpaWQgPSBieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmUsIDB4MDBdKSArIHJsb2MxNgorCisgICAgICAgIHNyY19hZGRyID0gc2VsZi5fbWVyZ2VfcHJlZml4X2FuZF9hZGRyZXNzKGNvbnRleHQucHJlZml4LCBjb250ZXh0LnByZWZpeF9sZW5ndGgsIGlpZCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NyY19hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19zcmNfYWRkcihpcGhjLCBhbnlfc3JjX21hY19hZGRyKCksIHNjaSwgaW8uQnl0ZXNJTyhybG9jMTYpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjX2FkZHIsIGFjdHVhbF9zcmNfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9zb3VyY2VfYWRkcmVzc193aGVuX2RlY29tcHJlc3Nfc3JjX2FkZHJfaXNfY2FsbGVkX3dpdGhfc2FjX2VxdWFsXzFfYW5kX3NhbV9lcXVhbF8zKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNjaSA9IGFueV9zY2koKQorCisgICAgICAgIGNvbnRleHQgPSBhbnlfY29udGV4dCgpCisKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyID0gbG93cGFuLkNvbnRleHRNYW5hZ2VyKCkKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyW3NjaV0gPSBjb250ZXh0CisKKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeShjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgc3JjX21hY19hZGRyID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NChhbnlfc3JjX21hY19hZGRyKCkpCisKKyAgICAgICAgc2FjID0gZmFjdG9yeS5JUEhDX1NBQ19TVEFURUZVTAorICAgICAgICBzYW0gPSBmYWN0b3J5LklQSENfU0FNXzBCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBzYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW0sIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgIGlpZCA9IGJ5dGVhcnJheShbc3JjX21hY19hZGRyLm1hY19hZGRyZXNzWzBdIF4gMHgwMl0pICsgc3JjX21hY19hZGRyLm1hY19hZGRyZXNzWzE6XQorCisgICAgICAgIHNyY19hZGRyID0gc2VsZi5fbWVyZ2VfcHJlZml4X2FuZF9hZGRyZXNzKGNvbnRleHQucHJlZml4LCBjb250ZXh0LnByZWZpeF9sZW5ndGgsIGlpZCkKKworICAgICAgICBkYXRhX2J5dGVzID0gYnl0ZWFycmF5KFtdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3JjX2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3NyY19hZGRyKGlwaGMsIHNyY19tYWNfYWRkciwgc2NpLCBpby5CeXRlc0lPKGRhdGFfYnl0ZXMpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBzYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjX2FkZHIsIGFjdHVhbF9zcmNfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kZXN0aW5hdGlvbl9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzBfYW5kX2RhY19lcXVhbF8wX2FuZF9kYW1fZXF1YWxfMChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBpcHY2X2FkZHIgPSBhbnlfZHN0X2FkZHIoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9OTworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFTEVTUworICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzEyOEIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgbSwgZGFjLCBkYW0pCisKKyAgICAgICAgZHN0X21hY19hZGRyID0gYnl0ZWFycmF5KFsweDAwXSAqIDgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kc3RfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3NfZHN0X2FkZHIoaXBoYywgZHN0X21hY19hZGRyLCBhbnlfZGNpKCksIGlvLkJ5dGVzSU8oaXB2Nl9hZGRyKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGRhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBkYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9hZGRyLCBhY3R1YWxfZHN0X2FkZHIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfZGVzdGluYXRpb25fYWRkcmVzc193aGVuX2RlY29tcHJlc3NfZHN0X2FkZHJfaXNfY2FsbGVkX3dpdGhfbV9lcXVhbF8wX2FuZF9kYWNfZXF1YWxfMF9hbmRfZGFtX2VxdWFsXzEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgZXVpNjQgPSBhbnlfZXVpNjQoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9OTworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFTEVTUworICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzY0QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBtLCBkYWMsIGRhbSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RzdF9hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBhbnlfZHN0X21hY19hZGRyKCksIGFueV9kY2koKSwgaW8uQnl0ZXNJTyhldWk2NCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBkYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZGFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuSVBWNl9MSU5LTE9DQUxfUFJFRklYICsgZXVpNjQsIGFjdHVhbF9kc3RfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kZXN0aW5hdGlvbl9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzBfYW5kX2RhY19lcXVhbF8wX2FuZF9kYW1fZXF1YWxfMihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBybG9jMTYgPSBhbnlfcmxvYzE2KCkKKworICAgICAgICBtID0gZmFjdG9yeS5JUEhDX01fTk8KKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUxFU1MKKyAgICAgICAgZGFtID0gZmFjdG9yeS5JUEhDX0RBTV8xNkIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgbSwgZGFjLCBkYW0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kc3RfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3NfZHN0X2FkZHIoaXBoYywgYW55X2RzdF9tYWNfYWRkcigpLCBhbnlfZGNpKCksIGlvLkJ5dGVzSU8ocmxvYzE2KSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGRhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBkYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5JUFY2X0xJTktMT0NBTF9QUkVGSVggKworICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZSwgMHgwMF0pICsgcmxvYzE2LCBhY3R1YWxfZHN0X2FkZHIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfZGVzdGluYXRpb25fYWRkcmVzc193aGVuX2RlY29tcHJlc3NfZHN0X2FkZHJfaXNfY2FsbGVkX3dpdGhfbV9lcXVhbF8wX2FuZF9kYWNfZXF1YWxfMF9hbmRfZGFtX2VxdWFsXzMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgZHN0X21hY19hZGRyID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NChhbnlfZHN0X21hY19hZGRyKCkpCisKKyAgICAgICAgbSA9IGZhY3RvcnkuSVBIQ19NX05PCisgICAgICAgIGRhYyA9IGZhY3RvcnkuSVBIQ19EQUNfU1RBVEVMRVNTCisgICAgICAgIGRhbSA9IGZhY3RvcnkuSVBIQ19EQU1fRUxJREVECisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBieXRlYXJyYXkoW10pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kc3RfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3NfZHN0X2FkZHIoaXBoYywgZHN0X21hY19hZGRyLCBhbnlfZGNpKCksIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBkYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgZGFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuSVBWNl9MSU5LTE9DQUxfUFJFRklYICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoW2RzdF9tYWNfYWRkci5tYWNfYWRkcmVzc1swXSBeIDB4MDJdKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X21hY19hZGRyLm1hY19hZGRyZXNzWzE6XSwgYWN0dWFsX2RzdF9hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX1J1bnRpbWVFcnJvcl93aGVuX2RlY29tcHJlc3NfZHN0X2FkZHJfaXNfY2FsbGVkX3dpdGhfbV9lcXVhbF8wX2FuZF9kYWNfZXF1YWxfMV9hbmRfZGFtX2VxdWFsXzAoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgaXB2Nl9hZGRyID0gYW55X2RzdF9hZGRyKCkKKworICAgICAgICBtID0gZmFjdG9yeS5JUEhDX01fTk8KKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUZVTAorICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzEyOEIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgbSwgZGFjLCBkYW0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkciwgaXBoYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2RzdF9tYWNfYWRkcigpLCBhbnlfZGNpKCksIGlvLkJ5dGVzSU8oaXB2Nl9hZGRyKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kZXN0aW5hdGlvbl9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzBfYW5kX2RhY19lcXVhbF8xX2FuZF9kYW1fZXF1YWxfMShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkY2kgPSBhbnlfZGNpKCkKKworICAgICAgICBjb250ZXh0ID0gYW55X2NvbnRleHQoKQorCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisgICAgICAgIGNvbnRleHRfbWFuYWdlcltkY2ldID0gY29udGV4dAorCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoY29udGV4dF9tYW5hZ2VyKQorCisgICAgICAgIGV1aTY0ID0gYW55X2V1aTY0KCkKKworICAgICAgICBtID0gZmFjdG9yeS5JUEhDX01fTk8KKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUZVTAorICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzY0QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBtLCBkYWMsIGRhbSkKKworICAgICAgICBkc3RfYWRkciA9IHNlbGYuX21lcmdlX3ByZWZpeF9hbmRfYWRkcmVzcyhjb250ZXh0LnByZWZpeCwgY29udGV4dC5wcmVmaXhfbGVuZ3RoLCBldWk2NCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RzdF9hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBhbnlfZHN0X21hY19hZGRyKCksIGRjaSwgaW8uQnl0ZXNJTyhldWk2NCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBkYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZGFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzdF9hZGRyLCBhY3R1YWxfZHN0X2FkZHIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfZGVzdGluYXRpb25fYWRkcmVzc193aGVuX2RlY29tcHJlc3NfZHN0X2FkZHJfaXNfY2FsbGVkX3dpdGhfbV9lcXVhbF8wX2FuZF9kYWNfZXF1YWxfMV9hbmRfZGFtX2VxdWFsXzIoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGNpID0gYW55X2RjaSgpCisKKyAgICAgICAgY29udGV4dCA9IGFueV9jb250ZXh0KCkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbZGNpXSA9IGNvbnRleHQKKworICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICBybG9jMTYgPSBhbnlfcmxvYzE2KCkKKworICAgICAgICBtID0gZmFjdG9yeS5JUEhDX01fTk8KKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUZVTAorICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzE2QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBtLCBkYWMsIGRhbSkKKworICAgICAgICBpaWQgPSBieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmUsIDB4MDBdKSArIHJsb2MxNgorCisgICAgICAgIGRzdF9hZGRyID0gc2VsZi5fbWVyZ2VfcHJlZml4X2FuZF9hZGRyZXNzKGNvbnRleHQucHJlZml4LCBjb250ZXh0LnByZWZpeF9sZW5ndGgsIGlpZCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RzdF9hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBhbnlfZHN0X21hY19hZGRyKCksIGRjaSwgaW8uQnl0ZXNJTyhybG9jMTYpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZGFjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGRhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3RfYWRkciwgYWN0dWFsX2RzdF9hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2Rlc3RpbmF0aW9uX2FkZHJlc3Nfd2hlbl9kZWNvbXByZXNzX2RzdF9hZGRyX2lzX2NhbGxlZF93aXRoX21fZXF1YWxfMF9hbmRfZGFjX2VxdWFsXzFfYW5kX2RhbV9lcXVhbF8zKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRjaSA9IGFueV9kY2koKQorCisgICAgICAgIGNvbnRleHQgPSBhbnlfY29udGV4dCgpCisKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyID0gbG93cGFuLkNvbnRleHRNYW5hZ2VyKCkKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyW2RjaV0gPSBjb250ZXh0CisKKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeShjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgZHN0X21hY19hZGRyID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NChhbnlfZHN0X21hY19hZGRyKCkpCisKKyAgICAgICAgbSA9IGZhY3RvcnkuSVBIQ19NX05PCisgICAgICAgIGRhYyA9IGZhY3RvcnkuSVBIQ19EQUNfU1RBVEVGVUwKKyAgICAgICAgZGFtID0gZmFjdG9yeS5JUEhDX0RBTV8wQgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBtLCBkYWMsIGRhbSkKKworICAgICAgICBpaWQgPSBieXRlYXJyYXkoW2RzdF9tYWNfYWRkci5tYWNfYWRkcmVzc1swXSBeIDB4MDJdKSArIGRzdF9tYWNfYWRkci5tYWNfYWRkcmVzc1sxOl0KKworICAgICAgICBkc3RfYWRkciA9IHNlbGYuX21lcmdlX3ByZWZpeF9hbmRfYWRkcmVzcyhjb250ZXh0LnByZWZpeCwgY29udGV4dC5wcmVmaXhfbGVuZ3RoLCBpaWQpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheShbXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RzdF9hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBkc3RfbWFjX2FkZHIsIGRjaSwgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGRhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBkYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHN0X2FkZHIsIGFjdHVhbF9kc3RfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kZXN0aW5hdGlvbl9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzFfYW5kX2RhY19lcXVhbF8wX2FuZF9kYW1fZXF1YWxfMChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBpcHY2X2FkZHIgPSBhbnlfZHN0X2FkZHIoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9ZRVMKKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUxFU1MKKyAgICAgICAgZGFtID0gZmFjdG9yeS5JUEhDX0RBTV8xMjhCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZHN0X2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX2RzdF9hZGRyKGlwaGMsIGFueV9kc3RfbWFjX2FkZHIoKSwgYW55X2RjaSgpLCBpby5CeXRlc0lPKGlwdjZfYWRkcikpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBkYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZGFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwdjZfYWRkciwgYWN0dWFsX2RzdF9hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2Rlc3RpbmF0aW9uX2FkZHJlc3Nfd2hlbl9kZWNvbXByZXNzX2RzdF9hZGRyX2lzX2NhbGxlZF93aXRoX21fZXF1YWxfMV9hbmRfZGFjX2VxdWFsXzBfYW5kX2RhbV9lcXVhbF8xKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIGFkZHI0OGIgPSBhbnlfNDhiaXRzX2FkZHIoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9ZRVMKKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUxFU1MKKyAgICAgICAgZGFtID0gZmFjdG9yeS5JUEhDX0RBTV80OEIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgbSwgZGFjLCBkYW0pCisKKyAgICAgICAgZXhwZWN0ZWRfZHN0X2FkZHIgPSBieXRlYXJyYXkoWzB4ZmYsIGFkZHI0OGJbMF0sIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCBhZGRyNDhiWzFdLCBhZGRyNDhiWzJdLCBhZGRyNDhiWzNdLCBhZGRyNDhiWzRdLCBhZGRyNDhiWzVdXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RzdF9hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBhbnlfZHN0X21hY19hZGRyKCksIGFueV9kY2koKSwgaW8uQnl0ZXNJTyhhZGRyNDhiKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGRhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBkYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZHN0X2FkZHIsIGFjdHVhbF9kc3RfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kZXN0aW5hdGlvbl9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzFfYW5kX2RhY19lcXVhbF8wX2FuZF9kYW1fZXF1YWxfMihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBhZGRyMzJiID0gYW55XzMyYml0c19hZGRyKCkKKworICAgICAgICBtID0gZmFjdG9yeS5JUEhDX01fWUVTCisgICAgICAgIGRhYyA9IGZhY3RvcnkuSVBIQ19EQUNfU1RBVEVMRVNTCisgICAgICAgIGRhbSA9IGZhY3RvcnkuSVBIQ19EQU1fMzJCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgIGV4cGVjdGVkX2RzdF9hZGRyID0gYnl0ZWFycmF5KFsweGZmLCBhZGRyMzJiWzBdLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgYWRkcjMyYlsxXSwgYWRkcjMyYlsyXSwgYWRkcjMyYlszXV0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kc3RfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3NfZHN0X2FkZHIoaXBoYywgYW55X2RzdF9tYWNfYWRkcigpLCBhbnlfZGNpKCksIGlvLkJ5dGVzSU8oYWRkcjMyYikpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBkYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgZGFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2RzdF9hZGRyLCBhY3R1YWxfZHN0X2FkZHIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfZGVzdGluYXRpb25fYWRkcmVzc193aGVuX2RlY29tcHJlc3NfZHN0X2FkZHJfaXNfY2FsbGVkX3dpdGhfbV9lcXVhbF8xX2FuZF9kYWNfZXF1YWxfMF9hbmRfZGFtX2VxdWFsXzMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgYWRkcjhiID0gYW55XzhiaXRzX2FkZHIoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9ZRVMKKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUxFU1MKKyAgICAgICAgZGFtID0gZmFjdG9yeS5JUEhDX0RBTV84QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBtLCBkYWMsIGRhbSkKKworICAgICAgICBleHBlY3RlZF9kc3RfYWRkciA9IGJ5dGVhcnJheShbMHhmZiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIGFkZHI4YlswXV0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kc3RfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3NfZHN0X2FkZHIoaXBoYywgYW55X2RzdF9tYWNfYWRkcigpLCBhbnlfZGNpKCksIGlvLkJ5dGVzSU8oYWRkcjhiKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGRhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBkYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZHN0X2FkZHIsIGFjdHVhbF9kc3RfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yYWlzZV9SdW50aW1lRXJyb3Jfd2hlbl9kZWNvbXByZXNzX2RzdF9hZGRyX2lzX2NhbGxlZF93aXRoX21fZXF1YWxfMV9hbmRfZGFjX2VxdWFsXzFfYW5kX2RhbV9lcXVhbF8wKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRjaSA9IGFueV9kY2koKQorCisgICAgICAgIGNvbnRleHQgPSBhbnlfY29udGV4dCgpCisKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyID0gbG93cGFuLkNvbnRleHRNYW5hZ2VyKCkKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyW2RjaV0gPSBjb250ZXh0CisKKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeShjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgYWRkcjQ4YiA9IGFueV80OGJpdHNfYWRkcigpCisKKyAgICAgICAgbSA9IGZhY3RvcnkuSVBIQ19NX1lFUworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFRlVMCisgICAgICAgIGRhbSA9IGZhY3RvcnkuSVBIQ19EQU1fMTI4QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBtLCBkYWMsIGRhbSkKKworICAgICAgICBwcmVmaXggPSBjb250ZXh0LnByZWZpeFs6OF0KKworICAgICAgICBpZiBsZW4ocHJlZml4KSA8IDg6CisgICAgICAgICAgICBtaXNzaW5nX2J5dGVzX2NvdW50ID0gOCAtIGxlbihwcmVmaXgpCisgICAgICAgICAgICBwcmVmaXggKz0gYnl0ZWFycmF5KFsweDAwXSAqIG1pc3NpbmdfYnl0ZXNfY291bnQpCisKKyAgICAgICAgcHJlZml4X2xlbmd0aCA9IGNvbnRleHQucHJlZml4X2xlbmd0aAorCisgICAgICAgIGRzdF9hZGRyID0gYnl0ZWFycmF5KFsweGZmXSkgKyBhZGRyNDhiWzoyXSArIGJ5dGVhcnJheShbcHJlZml4X2xlbmd0aF0pICsgcHJlZml4ICsgYWRkcjQ4YlsyOl0KKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RzdF9hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBhbnlfZHN0X21hY19hZGRyKCksIGRjaSwgaW8uQnl0ZXNJTyhhZGRyNDhiKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGRhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBkYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHN0X2FkZHIsIGFjdHVhbF9kc3RfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yYWlzZV9SdW50aW1lRXJyb3Jfd2hlbl9kZWNvbXByZXNzX2RzdF9hZGRyX2lzX2NhbGxlZF93aXRoX21fZXF1YWxfMV9hbmRfZGFjX2VxdWFsXzFfYW5kX2RhbV9lcXVhbF8xKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIGFkZHI0OGIgPSBhbnlfNDhiaXRzX2FkZHIoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9ZRVMKKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUZVTAorICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzQ4QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBtLCBkYWMsIGRhbSkKKworICAgICAgICBleHBlY3RlZF9kc3RfYWRkciA9IGJ5dGVhcnJheShbMHhmZiwgYWRkcjQ4YlswXSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIGFkZHI0OGJbMV0sIGFkZHI0OGJbMl0sIGFkZHI0OGJbM10sIGFkZHI0OGJbNF0sIGFkZHI0OGJbNV1dKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGZhY3RvcnkuX2RlY29tcHJlc3NfZHN0X2FkZHIsIGlwaGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9kc3RfbWFjX2FkZHIoKSwgYW55X2RjaSgpLCBpby5CeXRlc0lPKGFkZHI0OGIpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX1J1bnRpbWVFcnJvcl93aGVuX2RlY29tcHJlc3NfZHN0X2FkZHJfaXNfY2FsbGVkX3dpdGhfbV9lcXVhbF8xX2FuZF9kYWNfZXF1YWxfMV9hbmRfZGFtX2VxdWFsXzIoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgYWRkcjMyYiA9IGFueV8zMmJpdHNfYWRkcigpCisKKyAgICAgICAgbSA9IGZhY3RvcnkuSVBIQ19NX1lFUworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFRlVMCisgICAgICAgIGRhbSA9IGZhY3RvcnkuSVBIQ19EQU1fMzJCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgIGV4cGVjdGVkX2RzdF9hZGRyID0gYnl0ZWFycmF5KFsweGZmLCBhZGRyMzJiWzBdLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgYWRkcjMyYlsxXSwgYWRkcjMyYlsyXSwgYWRkcjMyYlszXV0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkciwgaXBoYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2RzdF9tYWNfYWRkcigpLCBhbnlfZGNpKCksIGlvLkJ5dGVzSU8oYWRkcjMyYikpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfZGVzdGluYXRpb25fYWRkcmVzc193aGVuX2RlY29tcHJlc3NfZHN0X2FkZHJfaXNfY2FsbGVkX3dpdGhfbV9lcXVhbF8xX2FuZF9kYWNfZXF1YWxfMV9hbmRfZGFtX2VxdWFsXzMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgYWRkcjhiID0gYW55XzhiaXRzX2FkZHIoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9ZRVMKKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUZVTAorICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzhCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgIGV4cGVjdGVkX2RzdF9hZGRyID0gYnl0ZWFycmF5KFsweGZmLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgYWRkcjhiWzBdXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmYWN0b3J5Ll9kZWNvbXByZXNzX2RzdF9hZGRyLCBpcGhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfZHN0X21hY19hZGRyKCksIGFueV9kY2koKSwgaW8uQnl0ZXNJTyhhZGRyOGIpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX21lcmdlX3ByZWZpeF93aXRoX2FkZHJlc3NfYnl0ZXNfd2hlbl9tZXJnZV9tZXRob2RfaXNfY2FsbGVkX3dpdGhfcHJlZml4X3Nob3J0ZXJfdGhhbl9taXNzaW5nX2JpdHMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgcHJlZml4ID0gYnl0ZWFycmF5KFsweDIwLCAweDAwLCAweDBkLCAweGI4XSkKKyAgICAgICAgcHJlZml4X2xlbmd0aCA9IDMyCisKKyAgICAgICAgYWRkcmVzc19ieXRlcyA9IGJ5dGVhcnJheShbMHgxYSwgMHgyYiwgMHgzYywgMHg0ZCwgMHg1ZSwgMHg2ZiwgMHg3MCwgMHg4MV0pCisKKyAgICAgICAgYWRkciA9IHByZWZpeCArIGJ5dGVhcnJheShbMHgwMF0gKiA0KSArIGFkZHJlc3NfYnl0ZXMKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2FkZHIgPSBmYWN0b3J5Ll9tZXJnZV9wcmVmaXhfd2l0aF9hZGRyZXNzKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYWRkcmVzc19ieXRlcykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyLCBhY3R1YWxfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9tZXJnZV9wcmVmaXhfd2l0aF9hZGRyZXNzX2J5dGVzX3doZW5fbWVyZ2VfbWV0aG9kX2lzX2NhbGxlZF93aXRoX3ByZWZpeF9sb25nZXJfdGhhbl9taXNzaW5nX2JpdHNfb3ZlcmxhcHBpbmcoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgcHJlZml4ID0gYnl0ZWFycmF5KFsweDIwLCAweDAwLCAweDBkLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyXSkKKyAgICAgICAgcHJlZml4X2xlbmd0aCA9IDY4CisKKyAgICAgICAgYWRkcmVzc19ieXRlcyA9IGJ5dGVhcnJheShbMHgxYSwgMHgyYiwgMHgzYywgMHg0ZCwgMHg1ZSwgMHg2ZiwgMHg3MCwgMHg4MV0pCisKKyAgICAgICAgYWRkciA9IHByZWZpeFs6LTFdICsgYnl0ZWFycmF5KFsweDJhXSkgKyBhZGRyZXNzX2J5dGVzWzE6XQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfYWRkciA9IGZhY3RvcnkuX21lcmdlX3ByZWZpeF93aXRoX2FkZHJlc3MocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBhZGRyZXNzX2J5dGVzKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZHIsIGFjdHVhbF9hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX21lcmdlX3ByZWZpeF93aXRoX2FkZHJlc3NfYnl0ZXNfd2hlbl9tZXJnZV9tZXRob2RfaXNfY2FsbGVkX3dpdGhfcHJlZml4X2xvbmdlcl90aGFuX21pc3NpbmdfYml0cyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBwcmVmaXggPSBieXRlYXJyYXkoWzB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMiwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMSwgMHgxMSwgMHgwMSwgMHgyMl0pCisgICAgICAgIHByZWZpeF9sZW5ndGggPSAxMjgKKworICAgICAgICBhZGRyZXNzX2J5dGVzID0gYnl0ZWFycmF5KFsweDFhLCAweDJiLCAweDNjLCAweDRkLCAweDVlLCAweDZmLCAweDcwLCAweDgxXSkKKworICAgICAgICBhZGRyID0gcHJlZml4CisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9hZGRyID0gZmFjdG9yeS5fbWVyZ2VfcHJlZml4X3dpdGhfYWRkcmVzcyhwcmVmaXgsIHByZWZpeF9sZW5ndGgsIGFkZHJlc3NfYnl0ZXMpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkciwgYWN0dWFsX2FkZHIpCisKKworY2xhc3MgVGVzdENvbnRleHQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2V4dHJhY3RfY29udGV4dF9mcm9tX3N0cl9yZXByZXNlbnRhdGlvbl93aGVuX2NvbnN0cnVjdG9yX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBwcmVmaXggPSAiMjAwMDpkYjg6Oi82NCIKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYyA9IGxvd3Bhbi5Db250ZXh0KHByZWZpeCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKSwgYy5wcmVmaXgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNjQsIGMucHJlZml4X2xlbmd0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg4LCBjLnByZWZpeF9sZW5ndGhfZnVsbF9ieXRlcykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9leHRyYWN0X2NvbnRleHRfZnJvbV9ieXRlYXJyYXlfd2hlbl9jb25zdHJ1Y3RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHByZWZpeCA9IGJ5dGVhcnJheShbMHgyMCwgMHgwMCwgMHgwZCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGMgPSBsb3dwYW4uQ29udGV4dChwcmVmaXgpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDIwLCAweDAwLCAweDBkLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwXSksIGMucHJlZml4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIGMucHJlZml4X2xlbmd0aF9mdWxsX2J5dGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDY0LCBjLnByZWZpeF9sZW5ndGgpCisKKworY2xhc3MgVGVzdENvbnRleHRNYW5hZ2VyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yYWlzZV9JbmRleEVycm9yX3doZW5faW5kZXhfaXNfbGFyZ2VyX3RoYW5fMTUoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY29udGV4dF9tYW5hZ2VyID0gbG93cGFuLkNvbnRleHRNYW5hZ2VyKCkKKworICAgICAgICBpbmRleCA9IHJhbmRvbS5yYW5kaW50KDE2LCAyNTUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBjb250ZXh0X21hbmFnZXJbaW5kZXhdID0gYW55X2NvbnRleHQoKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX0luZGV4RXJyb3Jfd2hlbl9pbmRleF9pc19zbWFsbGVyX3RoYW5fMChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorCisgICAgICAgIGluZGV4ID0gcmFuZG9tLnJhbmRpbnQoLTI1NSwgLTEpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBjb250ZXh0X21hbmFnZXJbaW5kZXhdID0gYW55X2NvbnRleHQoKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX1R5cGVFcnJvcl93aGVuX3NldF92YWx1ZV9pc19ub3RfQ29udGV4dChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjb250ZXh0X21hbmFnZXJbMF0gPSBpbnQKKworCitjbGFzcyBUZXN0TG93cGFuTWVzaEhlYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2hvcHNfbGVmdF92YWx1ZV93aGVuX2hvcHNfbGVmdF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaG9wc19sZWZ0ID0gYW55X2hvcHNfbGVmdCgpCisKKyAgICAgICAgbWVzaF9oZWFkZXIgPSBsb3dwYW4uTG93cGFuTWVzaEhlYWRlcihob3BzX2xlZnQsIGFueV9tYWNfYWRkcmVzcygpLCBhbnlfbWFjX2FkZHJlc3MoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2hvcHNfbGVmdCA9IG1lc2hfaGVhZGVyLmhvcHNfbGVmdAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvcHNfbGVmdCwgYWN0dWFsX2hvcHNfbGVmdCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fb3JpZ2luYXRvcl9hZGRyZXNzX3ZhbHVlX3doZW5fb3JpZ2luYXRvcl9hZGRyZXNzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBvcmlnaW5hdG9yX2FkZHJlc3MgPSBhbnlfbWFjX2FkZHJlc3MoKQorCisgICAgICAgIG1lc2hfaGVhZGVyID0gbG93cGFuLkxvd3Bhbk1lc2hIZWFkZXIoYW55X2hvcHNfbGVmdCgpLCBvcmlnaW5hdG9yX2FkZHJlc3MsIGFueV9tYWNfYWRkcmVzcygpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfb3JpZ2luYXRvcl9hZGRyZXNzID0gbWVzaF9oZWFkZXIub3JpZ2luYXRvcl9hZGRyZXNzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZ2luYXRvcl9hZGRyZXNzLCBhY3R1YWxfb3JpZ2luYXRvcl9hZGRyZXNzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9maW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzX3ZhbHVlX3doZW5fZmluYWxfZGVzdGluYXRpb25fYWRkcmVzc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcyA9IGFueV9tYWNfYWRkcmVzcygpCisKKyAgICAgICAgbWVzaF9oZWFkZXIgPSBsb3dwYW4uTG93cGFuTWVzaEhlYWRlcihhbnlfaG9wc19sZWZ0KCksIGFueV9tYWNfYWRkcmVzcygpLCBmaW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcyA9IG1lc2hfaGVhZGVyLmZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3MKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzLCBhY3R1YWxfZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcykKKworCitjbGFzcyBUZXN0TG93cGFuTWVzaEhlYWRlckZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9Mb3dwYW5NZXNoSGVhZGVyX3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBob3BzX2xlZnQgPSBhbnlfaG9wc19sZWZ0KCkKKworICAgICAgICBvcmlnaW5hdG9yX2FkZHJlc3MgPSBhbnlfbWFjX2FkZHJlc3MoKQorICAgICAgICBmaW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzID0gYW55X21hY19hZGRyZXNzKCkKKworICAgICAgICB2ID0gaW50KG9yaWdpbmF0b3JfYWRkcmVzcy50eXBlID09IGNvbW1vbi5NYWNBZGRyZXNzVHlwZS5TSE9SVCkKKyAgICAgICAgZiA9IGludChmaW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzLnR5cGUgPT0gY29tbW9uLk1hY0FkZHJlc3NUeXBlLlNIT1JUKQorCisgICAgICAgIG1lc2hfaGVhZGVyX2ZpcnN0X2J5dGUgPSAoMiA8PCA2KSB8ICh2IDw8IDUpIHwgKGYgPDwgNCkKKworICAgICAgICBpZiBob3BzX2xlZnQgPj0gMHgwZjoKKyAgICAgICAgICAgIG1lc2hfaGVhZGVyX2RhdGEgPSBieXRlYXJyYXkoW21lc2hfaGVhZGVyX2ZpcnN0X2J5dGUgfCAweDBmLCBob3BzX2xlZnRdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWVzaF9oZWFkZXJfZGF0YSA9IGJ5dGVhcnJheShbbWVzaF9oZWFkZXJfZmlyc3RfYnl0ZSB8IGhvcHNfbGVmdF0pCisKKyAgICAgICAgbWVzaF9oZWFkZXJfZGF0YSArPSBvcmlnaW5hdG9yX2FkZHJlc3MubWFjX2FkZHJlc3MgKyBmaW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzLm1hY19hZGRyZXNzCisKKyAgICAgICAgbWVzaF9oZWFkZXJfZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5NZXNoSGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG1lc2hfaGVhZGVyID0gbWVzaF9oZWFkZXJfZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKG1lc2hfaGVhZGVyX2RhdGEpLCBOb25lKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvcHNfbGVmdCwgbWVzaF9oZWFkZXIuaG9wc19sZWZ0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWdpbmF0b3JfYWRkcmVzcywgbWVzaF9oZWFkZXIub3JpZ2luYXRvcl9hZGRyZXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3MsIG1lc2hfaGVhZGVyLmZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3MpCisKKworY2xhc3MgVGVzdExvd3BhbkZyYWdtZW50YXRpb25IZWFkZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9kYXRhZ3JhbV9zaXplX3ZhbHVlX3doZW5fZGF0YWdyYW1fc2l6ZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YWdyYW1fc2l6ZSA9IGFueV9kYXRhZ3JhbV9zaXplKCkKKworICAgICAgICBmcmFnbWVudGF0aW9uX2hlYWRlciA9IGxvd3Bhbi5Mb3dwYW5GcmFnbWVudGF0aW9uSGVhZGVyKAorICAgICAgICAgICAgZGF0YWdyYW1fc2l6ZSwgYW55X2RhdGFncmFtX3RhZygpLCBhbnlfZGF0YWdyYW1fb2Zmc2V0KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kYXRhZ3JhbV9zaXplID0gZnJhZ21lbnRhdGlvbl9oZWFkZXIuZGF0YWdyYW1fc2l6ZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFncmFtX3NpemUsIGFjdHVhbF9kYXRhZ3JhbV9zaXplKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9kYXRhZ3JhbV90YWdfdmFsdWVfd2hlbl9kYXRhZ3JhbV90YWdfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGFncmFtX3RhZyA9IGFueV9kYXRhZ3JhbV90YWcoKQorCisgICAgICAgIGZyYWdtZW50YXRpb25faGVhZGVyID0gbG93cGFuLkxvd3BhbkZyYWdtZW50YXRpb25IZWFkZXIoCisgICAgICAgICAgICBhbnlfZGF0YWdyYW1fc2l6ZSgpLCBkYXRhZ3JhbV90YWcsIGFueV9kYXRhZ3JhbV9vZmZzZXQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RhdGFncmFtX3RhZyA9IGZyYWdtZW50YXRpb25faGVhZGVyLmRhdGFncmFtX3RhZworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFncmFtX3RhZywgYWN0dWFsX2RhdGFncmFtX3RhZykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fZGF0YWdyYW1fb2Zmc2V0X3ZhbHVlX3doZW5fZGF0YWdyYW1fb2Zmc2V0X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhZ3JhbV9vZmZzZXQgPSBhbnlfZGF0YWdyYW1fb2Zmc2V0KCkKKworICAgICAgICBmcmFnbWVudGF0aW9uX2hlYWRlciA9IGxvd3Bhbi5Mb3dwYW5GcmFnbWVudGF0aW9uSGVhZGVyKAorICAgICAgICAgICAgYW55X2RhdGFncmFtX3NpemUoKSwgYW55X2RhdGFncmFtX3RhZygpLCBkYXRhZ3JhbV9vZmZzZXQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kYXRhZ3JhbV9vZmZzZXQgPSBmcmFnbWVudGF0aW9uX2hlYWRlci5kYXRhZ3JhbV9vZmZzZXQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhZ3JhbV9vZmZzZXQsIGFjdHVhbF9kYXRhZ3JhbV9vZmZzZXQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX0ZhbHNlX3doZW5faXNfZmlyc3RfcHJvcGVydHlfaXNfY2FsbGVkX2FuZF9kYXRhZ3JhbV9vZmZzZXRfaXNfbm90X2VxdWFsXzAoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YWdyYW1fb2Zmc2V0ID0gcmFuZG9tLnJhbmRpbnQoMSwgKDEgPDwgOCkgLSAxKQorCisgICAgICAgIGZyYWdtZW50YXRpb25faGVhZGVyID0gbG93cGFuLkxvd3BhbkZyYWdtZW50YXRpb25IZWFkZXIoCisgICAgICAgICAgICBhbnlfZGF0YWdyYW1fc2l6ZSgpLCBhbnlfZGF0YWdyYW1fdGFnKCksIGRhdGFncmFtX29mZnNldCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaXNfZmlyc3QgPSBmcmFnbWVudGF0aW9uX2hlYWRlci5pc19maXJzdAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX2ZpcnN0KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3RvX2J5dGVzX0xvd3BhbkZyYWdtZW50YXRpb25IZWFkZXJfZnJvbV9ieXRlc193aGVuX2Zyb21fYnl0ZXNfY2xhc3NfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhZ3JhbV9zaXplID0gYW55X2RhdGFncmFtX3NpemUoKQorICAgICAgICBkYXRhZ3JhbV90YWcgPSBhbnlfZGF0YWdyYW1fdGFnKCkKKyAgICAgICAgZGF0YWdyYW1fb2Zmc2V0ID0gYW55X2RhdGFncmFtX29mZnNldCgpCisKKyAgICAgICAgZGF0YSA9IHN0cnVjdC5wYWNrKCI+SEhCIiwgKCgzIDw8IDE0KSB8IChpbnQoZGF0YWdyYW1fb2Zmc2V0ICE9IDApIDw8IDEzKSB8IGRhdGFncmFtX3NpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWdyYW1fdGFnLCBkYXRhZ3JhbV9vZmZzZXQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGZyYWdtZW50YXRpb25faGVhZGVyID0gbG93cGFuLkxvd3BhbkZyYWdtZW50YXRpb25IZWFkZXIuZnJvbV9ieXRlcyhpby5CeXRlc0lPKGRhdGEpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFncmFtX3NpemUsIGZyYWdtZW50YXRpb25faGVhZGVyLmRhdGFncmFtX3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YWdyYW1fdGFnLCBmcmFnbWVudGF0aW9uX2hlYWRlci5kYXRhZ3JhbV90YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YWdyYW1fb2Zmc2V0LCBmcmFnbWVudGF0aW9uX2hlYWRlci5kYXRhZ3JhbV9vZmZzZXQpCisKKworY2xhc3MgVGVzdExvd3BhbkRlY29tcHJlc3Nvcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfcGFyZW50X3JlcXVlc3Rfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbMHg3ZiwgMHgzYiwgMHgwMiwgMHhmMCwgMHg0ZCwgMHg0YywgMHg0ZCwgMHg0YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1ZSwgMHhhZiwgMHgwMCwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzYiwgMHhmYiwgMHgwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzYiwgMHgxNSwgMHhhMSwgMHhmOSwgMHhmNSwgMHg2NCwgMHhmNCwgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlZiwgMHg3MCwgMHg3OCwgMHg2YywgMHgzYywgMHgwZiwgMHg1NCwgMHg0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NSwgMHhlOCwgMHhmNSwgMHgyNywgMHg0YywgMHhmY10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MTIsIDB4Y2YsIDB4ZDMsIDB4OGIsIDB4M2IsIDB4NjEsIDB4NTUsIDB4NThdKSkKKworICAgICAgICBkZWNvbXByZXNzb3IgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfbG93cGFuX2RlY29tcHJlc3Nvcihjb250ZXh0X21hbmFnZXI9Tm9uZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaXB2Nl9oZWFkZXIsIGV4dGVuc2lvbl9oZWFkZXJzLCB1ZHBfaGVhZGVyID0gZGVjb21wcmVzc29yLmRlY29tcHJlc3MoaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmZTgwOjoxMGNmOmQzOGI6M2I2MTo1NTU4IiwgaXB2Nl9oZWFkZXIuc291cmNlX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZmYwMjo6MiIsIGlwdjZfaGVhZGVyLmRlc3RpbmF0aW9uX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxNywgaXB2Nl9oZWFkZXIubmV4dF9oZWFkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjU1LCBpcHY2X2hlYWRlci5ob3BfbGltaXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgZXh0ZW5zaW9uX2hlYWRlcnMpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfcGFyZW50X3Jlc3BvbnNlX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWzB4N2YsIDB4MzMsIDB4ZjAsIDB4NGQsIDB4NGMsIDB4NGQsIDB4NGMsIDB4MGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTgsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzEsIDB4YjgsIDB4MTYsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEsIDB4Y2MsIDB4OTgsIDB4OTAsIDB4ZDYsIDB4ZmQsIDB4NjksIDB4ZDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODksIDB4YTAsIDB4MzAsIDB4NDksIDB4ODMsIDB4N2MsIDB4ZjcsIDB4YjUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YsIDB4ODMsIDB4MmEsIDB4MDQsIDB4ZjYsIDB4M2IsIDB4OGMsIDB4ZTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YjYsIDB4MzcsIDB4NTEsIDB4NWIsIDB4MjgsIDB4OWEsIDB4M2IsIDB4YmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGQsIDB4YjMsIDB4NGUsIDB4OWYsIDB4ZDgsIDB4MTQsIDB4YzgsIDB4YzksCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjQsIDB4MjgsIDB4ZjYsIDB4OGQsIDB4YjcsIDB4ZjAsIDB4N2QsIDB4NDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTMsIDB4YzIsIDB4YjEsIDB4NjksIDB4NGQsIDB4YWUsIDB4YzEsIDB4MjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTYsIDB4NjIsIDB4OTAsIDB4ZWEsIDB4ZmYsIDB4MWIsIDB4YjcsIDB4ZDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWUsIDB4NWNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDNhLCAweDNlLCAweDllLCAweGVkLCAweDdhLCAweDAxLCAweDM2LCAweGE1XSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MTIsIDB4Y2YsIDB4ZDMsIDB4OGIsIDB4M2IsIDB4NjEsIDB4NTUsIDB4NThdKSkKKworICAgICAgICBkZWNvbXByZXNzb3IgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfbG93cGFuX2RlY29tcHJlc3Nvcihjb250ZXh0X21hbmFnZXI9Tm9uZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaXB2Nl9oZWFkZXIsIGV4dGVuc2lvbl9oZWFkZXJzLCB1ZHBfaGVhZGVyID0gZGVjb21wcmVzc29yLmRlY29tcHJlc3MoaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmZTgwOjozODNlOjllZWQ6N2EwMTozNmE1IiwgaXB2Nl9oZWFkZXIuc291cmNlX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZmU4MDo6MTBjZjpkMzhiOjNiNjE6NTU1OCIsIGlwdjZfaGVhZGVyLmRlc3RpbmF0aW9uX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxNywgaXB2Nl9oZWFkZXIubmV4dF9oZWFkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjU1LCBpcHY2X2hlYWRlci5ob3BfbGltaXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgZXh0ZW5zaW9uX2hlYWRlcnMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxOTc4OCwgdWRwX2hlYWRlci5zcmNfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxOTc4OCwgdWRwX2hlYWRlci5kc3RfcG9ydCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9jaGlsZF9pZF9yZXF1ZXN0X3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWzB4N2YsIDB4MzMsIDB4ZjAsIDB4NGQsIDB4NGMsIDB4NGQsIDB4NGMsIDB4OWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjIsIDB4MDAsIDB4MTUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTQsIDB4MDMsIDB4ZTMsIDB4NzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAsIDB4NGYsIDB4OGMsIDB4NWMsIDB4NDIsIDB4ODEsIDB4NjgsIDB4ZTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4ZmMsIDB4ZjUsIDB4OGMsIDB4NjIsIDB4OGUsIDB4ODMsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTcsIDB4MjYsIDB4ODYsIDB4MzQsIDB4M2IsIDB4YTcsIDB4NjgsIDB4YzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTMsIDB4ZmIsIDB4NzIsIDB4ZDksIDB4Y2MsIDB4MTMsIDB4NWUsIDB4NWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTYsIDB4MGUsIDB4ZjEsIDB4ODAsIDB4MDMsIDB4NTUsIDB4NGYsIDB4MjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzIsIDB4OTYsIDB4ZjQsIDB4OWMsIDB4NjUsIDB4ODIsIDB4OTcsIDB4Y2YsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTcsIDB4MzUsIDB4ODksIDB4YzJdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDEyLCAweGNmLCAweGQzLCAweDhiLCAweDNiLCAweDYxLCAweDU1LCAweDU4XSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4M2EsIDB4M2UsIDB4OWUsIDB4ZWQsIDB4N2EsIDB4MDEsIDB4MzYsIDB4YTVdKSkKKworICAgICAgICBkZWNvbXByZXNzb3IgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfbG93cGFuX2RlY29tcHJlc3Nvcihjb250ZXh0X21hbmFnZXI9Tm9uZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaXB2Nl9oZWFkZXIsIGV4dGVuc2lvbl9oZWFkZXJzLCB1ZHBfaGVhZGVyID0gZGVjb21wcmVzc29yLmRlY29tcHJlc3MoaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmZTgwOjoxMGNmOmQzOGI6M2I2MTo1NTU4IiwgaXB2Nl9oZWFkZXIuc291cmNlX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZmU4MDo6MzgzZTo5ZWVkOjdhMDE6MzZhNSIsIGlwdjZfaGVhZGVyLmRlc3RpbmF0aW9uX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxNywgaXB2Nl9oZWFkZXIubmV4dF9oZWFkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjU1LCBpcHY2X2hlYWRlci5ob3BfbGltaXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgZXh0ZW5zaW9uX2hlYWRlcnMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxOTc4OCwgdWRwX2hlYWRlci5zcmNfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxOTc4OCwgdWRwX2hlYWRlci5kc3RfcG9ydCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9jaGlsZF9pZF9yZXNwb25zZV93aGVuX2RlY29tcHJlc3NfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsweDdmLCAweDMzLCAweGYwLCAweDRkLCAweDRjLCAweDRkLCAweDRjLCAweDdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweGUzLCAweDAwLCAweDE1LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweDU3LCAweGJmLCAweDJmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweGMwLCAweDRiLCAweDFkLCAweGFjLCAweDNjLCAweDI0LCAweDE2LCAweGRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweGViLCAweDk2LCAweGViLCAweGRhLCAweDQyLCAweGViLCAweDAwLCAweDg5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDVmLCAweDM5LCAweGM5LCAweDJiLCAweDdkLCAweDMxLCAweGQ1LCAweDgzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDlkLCAweGRiLCAweGI3LCAweGM4LCAweGU2LCAweDI1LCAweGQzLCAweDdhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDFlLCAweDVmLCAweDY2LCAweDllLCAweDYzLCAweDJkLCAweDQyLCAweDI3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5LCAweDQxLCAweGRjLCAweGM0LCAweGM0LCAweGMwLCAweDhjLCAweDA3XSkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzYSwgMHgzZSwgMHg5ZSwgMHhlZCwgMHg3YSwgMHgwMSwgMHgzNiwgMHhhNV0pKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDEyLCAweGNmLCAweGQzLCAweDhiLCAweDNiLCAweDYxLCAweDU1LCAweDU4XSkpCisKKyAgICAgICAgZGVjb21wcmVzc29yID0gY29uZmlnLmNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9kZWNvbXByZXNzb3IoY29udGV4dF9tYW5hZ2VyPU5vbmUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGlwdjZfaGVhZGVyLCBleHRlbnNpb25faGVhZGVycywgdWRwX2hlYWRlciA9IGRlY29tcHJlc3Nvci5kZWNvbXByZXNzKGlvLkJ5dGVzSU8oZGF0YSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZmU4MDo6MzgzZTo5ZWVkOjdhMDE6MzZhNSIsIGlwdjZfaGVhZGVyLnNvdXJjZV9hZGRyZXNzLmNvbXByZXNzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZlODA6OjEwY2Y6ZDM4YjozYjYxOjU1NTgiLCBpcHY2X2hlYWRlci5kZXN0aW5hdGlvbl9hZGRyZXNzLmNvbXByZXNzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTcsIGlwdjZfaGVhZGVyLm5leHRfaGVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDI1NSwgaXB2Nl9oZWFkZXIuaG9wX2xpbWl0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIGV4dGVuc2lvbl9oZWFkZXJzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTk3ODgsIHVkcF9oZWFkZXIuc3JjX3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTk3ODgsIHVkcF9oZWFkZXIuZHN0X3BvcnQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfYWR2ZXJ0aXNlbWVudF93aGVuX2RlY29tcHJlc3NfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsweDdmLCAweDNiLCAweDAxLCAweGYwLCAweDRkLCAweDRjLCAweDRkLCAweDRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDM1LCAweDlmLCAweDAwLCAweDE1LCAweDA3LCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDllLCAweGI4LCAweGQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDJmLCAweDJhLCAweGUwLCAweDAwLCAweDVkLCAweDY2LCAweDYzLCAweDA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweGEwLCAweDU5LCAweGIwLCAweGQ0LCAweDk1LCAweDdmLCAweGU2LCAweDc5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3LCAweDg3LCAweDJjLCAweDFkLCAweDgzLCAweGFkLCAweGMyLCAweDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ3LCAweDIwLCAweDdhLCAweGUyXSkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzYSwgMHgzZSwgMHg5ZSwgMHhlZCwgMHg3YSwgMHgwMSwgMHgzNiwgMHhhNV0pKQorCisgICAgICAgIGRlY29tcHJlc3NvciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF9sb3dwYW5fZGVjb21wcmVzc29yKGNvbnRleHRfbWFuYWdlcj1Ob25lKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpcHY2X2hlYWRlciwgZXh0ZW5zaW9uX2hlYWRlcnMsIHVkcF9oZWFkZXIgPSBkZWNvbXByZXNzb3IuZGVjb21wcmVzcyhpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZlODA6OjM4M2U6OWVlZDo3YTAxOjM2YTUiLCBpcHY2X2hlYWRlci5zb3VyY2VfYWRkcmVzcy5jb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmZjAyOjoxIiwgaXB2Nl9oZWFkZXIuZGVzdGluYXRpb25fYWRkcmVzcy5jb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE3LCBpcHY2X2hlYWRlci5uZXh0X2hlYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyNTUsIGlwdjZfaGVhZGVyLmhvcF9saW1pdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBleHRlbnNpb25faGVhZGVycykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE5Nzg4LCB1ZHBfaGVhZGVyLnNyY19wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE5Nzg4LCB1ZHBfaGVhZGVyLmRzdF9wb3J0KQorCisKK2NsYXNzIFRlc3RMb3dwYW5GcmFnbWVudHNCdWZmZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX1ZhbHVlRXJyb3Jfd2hlbl93cml0ZV9tZXRob2RfaXNfY2FsbGVkX3dpdGhfZGF0YV9sZW5ndGhfYmlnZ2VyX3RoYW5fYnVmZmVyX2xlbmd0aChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsZW5ndGggPSByYW5kb20ucmFuZGludCgxLCAxMjgwKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIgPSBsb3dwYW4uTG93cGFuRnJhZ21lbnRzQnVmZmVyKGJ1ZmZlcl9zaXplPShsZW5ndGggLSAxKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnJhZ21lbnRzX2J1ZmZlci53cml0ZSwgYW55X2RhdGEobGVuZ3RoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9tb3ZlX3dyaXRlX3Bvc2l0aW9uX2J5X3RoZV9kYXRhX2xlbmd0aF93aGVuX3dyaXRlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbGVuZ3RoID0gcmFuZG9tLnJhbmRpbnQoMSwgMTI4MCkKKworICAgICAgICBmcmFnbWVudHNfYnVmZmVyID0gbG93cGFuLkxvd3BhbkZyYWdtZW50c0J1ZmZlcihidWZmZXJfc2l6ZT1sZW5ndGgpCisKKyAgICAgICAgc3RhcnRfcG9zaXRpb24gPSBmcmFnbWVudHNfYnVmZmVyLnRlbGwoKQorCisgICAgICAgIGRhdGEgPSBhbnlfZGF0YShsZW5ndGg9cmFuZG9tLnJhbmRpbnQoMSwgbGVuZ3RoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci53cml0ZShkYXRhKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyYWdtZW50c19idWZmZXIudGVsbCgpIC0gc3RhcnRfcG9zaXRpb24sIGxlbihkYXRhKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yYWlzZV9WYWx1ZUVycm9yX3doZW5fcmVhZF9tZXRob2RfaXNfY2FsbGVkX2J1dF9ub3Rfd2hvbGVfcGFja2V0X2hhc19iZWVuX3N0b3JlZF9pbl9idWZmZXIoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YSA9IGFueV9kYXRhKGxlbmd0aD0zKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIgPSBsb3dwYW4uTG93cGFuRnJhZ21lbnRzQnVmZmVyKGJ1ZmZlcl9zaXplPXJhbmRvbS5yYW5kaW50KDQsIDEyODApKQorICAgICAgICBmcmFnbWVudHNfYnVmZmVyLndyaXRlKGRhdGEpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZyYWdtZW50c19idWZmZXIucmVhZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yYWlzZV9WYWx1ZUVycm9yX3doZW5fc2Vla19tZXRob2RfaXNfY2FsbGVkX3dpdGhfb2Zmc2V0X2JpZ2dlcl90aGFuX2J1ZmZlcl9sZW5ndGgoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgb2Zmc2V0ID0gcmFuZG9tLnJhbmRpbnQoMTI4MSwgMjUwMCkKKworICAgICAgICBmcmFnbWVudHNfYnVmZmVyID0gbG93cGFuLkxvd3BhbkZyYWdtZW50c0J1ZmZlcihidWZmZXJfc2l6ZT0xMjgwKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmcmFnbWVudHNfYnVmZmVyLnNlZWssIG9mZnNldCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9zZXRfd3JpdGVfcG9zaXRpb25fd2hlbl9zZWVrX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbGVuZ3RoID0gcmFuZG9tLnJhbmRpbnQoMSwgMTI4MCkKKyAgICAgICAgb2Zmc2V0ID0gcmFuZG9tLnJhbmRpbnQoMCwgbGVuZ3RoIC0gMSkKKworICAgICAgICBmcmFnbWVudHNfYnVmZmVyID0gbG93cGFuLkxvd3BhbkZyYWdtZW50c0J1ZmZlcihidWZmZXJfc2l6ZT1sZW5ndGgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGZyYWdtZW50c19idWZmZXIuc2VlayhvZmZzZXQpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2Zmc2V0LCBmcmFnbWVudHNfYnVmZmVyLnRlbGwoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF93cml0ZV93aG9sZV9wYWNrZXRfdG9fYnVmZmVyX3doZW5fd3JpdGVfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYW55X2RhdGEobGVuZ3RoPXJhbmRvbS5yYW5kaW50KDEsIDEyODApKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIgPSBsb3dwYW4uTG93cGFuRnJhZ21lbnRzQnVmZmVyKGJ1ZmZlcl9zaXplPWxlbihkYXRhKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci53cml0ZShkYXRhKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGZyYWdtZW50c19idWZmZXIucmVhZCgpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3dyaXRlX21hbnlfZnJhZ21lbnRzX3RvX3RoZV9idWZmZXJfYW5kX3JldHVybl93aG9sZV9tZXNzYWdlX3doZW5fd3JpdGVfbWV0aG9kX2lzX2NhbGxlZF9tYW55X3RpbWVzKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGJ1ZmZlcl9zaXplID0gNDIKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlciA9IGxvd3Bhbi5Mb3dwYW5GcmFnbWVudHNCdWZmZXIoYnVmZmVyX3NpemU9YnVmZmVyX3NpemUpCisKKyAgICAgICAgb2Zmc2V0XzEgPSAwCisgICAgICAgIGZyYWdtZW50XzEgPSBieXRlYXJyYXkoWzB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDhdKQorCisgICAgICAgIG9mZnNldF8yID0gOAorICAgICAgICBmcmFnbWVudF8yID0gYnl0ZWFycmF5KFsweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwXSkKKworICAgICAgICBvZmZzZXRfMyA9IDE2CisgICAgICAgIGZyYWdtZW50XzMgPSBieXRlYXJyYXkoWzB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MThdKQorCisgICAgICAgIG9mZnNldF80ID0gMjQKKyAgICAgICAgZnJhZ21lbnRfNCA9IGJ5dGVhcnJheShbMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwgMHgyMF0pCisKKyAgICAgICAgb2Zmc2V0XzUgPSAzMgorICAgICAgICBmcmFnbWVudF81ID0gYnl0ZWFycmF5KFsweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LCAweDI4XSkKKworICAgICAgICBvZmZzZXRfNiA9IDQwCisgICAgICAgIGZyYWdtZW50XzYgPSBieXRlYXJyYXkoWzB4MjksIDB4MmFdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBmcmFnbWVudHNfYnVmZmVyLnNlZWsob2Zmc2V0XzEpCisgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUoZnJhZ21lbnRfMSkKKworICAgICAgICBmcmFnbWVudHNfYnVmZmVyLnNlZWsob2Zmc2V0XzIpCisgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUoZnJhZ21lbnRfMikKKworICAgICAgICBmcmFnbWVudHNfYnVmZmVyLnNlZWsob2Zmc2V0XzMpCisgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUoZnJhZ21lbnRfMykKKworICAgICAgICBmcmFnbWVudHNfYnVmZmVyLnNlZWsob2Zmc2V0XzQpCisgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUoZnJhZ21lbnRfNCkKKworICAgICAgICBmcmFnbWVudHNfYnVmZmVyLnNlZWsob2Zmc2V0XzUpCisgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUoZnJhZ21lbnRfNSkKKworICAgICAgICBmcmFnbWVudHNfYnVmZmVyLnNlZWsob2Zmc2V0XzYpCisgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUoZnJhZ21lbnRfNikKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsIDB4MjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LCAweDI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOSwgMHgyYV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50c19idWZmZXIucmVhZCgpKQorCisKK2NsYXNzIFRlc3RMb3dwYW5GcmFnbWVudHNCdWZmZXJzTWFuYWdlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmFpc2VfVmFsdWVFcnJvcl93aGVuX2dldF9mcmFnbWVudHNfYnVmZmVyX21ldGhvZF9pc19jYWxsZWRfd2l0aF9pbnZhbGlkX2RhdGFncmFtX3NpemUoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGFueV9tYWNfYWRkcmVzcygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGFueV9tYWNfYWRkcmVzcygpCisKKyAgICAgICAgbmVnYXRpdmVfaW50ID0gLXJhbmRvbS5yYW5kaW50KDEsIDEyODApCisKKyAgICAgICAgbWFuYWdlciA9IGxvd3Bhbi5Mb3dwYW5GcmFnbWVudHNCdWZmZXJzTWFuYWdlcigpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hbmFnZXIuZ2V0X2ZyYWdtZW50c19idWZmZXIsIG1lc3NhZ2VfaW5mbywgYW55X2RhdGFncmFtX3RhZygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYW5hZ2VyLmdldF9mcmFnbWVudHNfYnVmZmVyLCBtZXNzYWdlX2luZm8sIGFueV9kYXRhZ3JhbV90YWcoKSwgbmVnYXRpdmVfaW50KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9Mb3dwYW5GcmFnbWVudHNCdWZmZXJfd2hlbl9nZXRfZnJhZ21lbnRzX2J1ZmZlcl9tZXRob2RfaXNfY2FsbGVkX3dpdGhfdmFsaWRfZGF0YWdyYW1fc2l6ZShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gYW55X21hY19hZGRyZXNzKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gYW55X21hY19hZGRyZXNzKCkKKworICAgICAgICBkYXRhZ3JhbV9zaXplID0gYW55X2RhdGFncmFtX3NpemUoKQorCisgICAgICAgIG1hbmFnZXIgPSBsb3dwYW4uTG93cGFuRnJhZ21lbnRzQnVmZmVyc01hbmFnZXIoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBmcmFnbWVudHNfYnVmZmVyID0gbWFuYWdlci5nZXRfZnJhZ21lbnRzX2J1ZmZlcihtZXNzYWdlX2luZm8sIGFueV9kYXRhZ3JhbV90YWcoKSwgZGF0YWdyYW1fc2l6ZSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZyYWdtZW50c19idWZmZXIsIGxvd3Bhbi5Mb3dwYW5GcmFnbWVudHNCdWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YWdyYW1fc2l6ZSwgbGVuKGZyYWdtZW50c19idWZmZXIpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTEpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfbWFjODAyMTU0LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X21hYzgwMjE1NC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mODQwNGQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X21hYzgwMjE1NC5weQpAQCAtMCwwICsxLDIzNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBpbworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gY29tbW9uIGltcG9ydCBNYWNBZGRyZXNzLCBNYWNBZGRyZXNzVHlwZQoraW1wb3J0IG1hYzgwMjE1NAorCitsb25nYWRkcnMgPSBieXRlYXJyYXkoWzB4NjEsIDB4Y2MsIDB4MDAsIDB4Y2UsIDB4ZmFdKQorc2hvcnRhZGRycyA9IGJ5dGVhcnJheShbMHg2MSwgMHg4OCwgMHgwMCwgMHhjZSwgMHhmYV0pCitsb25nc2hvcnRhZGRycyA9IGJ5dGVhcnJheShbMHg2MSwgMHhjOCwgMHgwMCwgMHhjZSwgMHhmYV0pCitzaG9ydGxvbmdhZGRycyA9IGJ5dGVhcnJheShbMHg2MSwgMHg4YywgMHgwMCwgMHhjZSwgMHhmYV0pCisKKworY2xhc3MgVGVzdE1hY1BhcnNlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfYWNrX2ZyYW1lKHNlbGYpOgorICAgICAgICBmcmFtZSA9IG1hYzgwMjE1NC5NYWNGcmFtZSgpCisgICAgICAgIGZyYW1lLnBhcnNlKGlvLkJ5dGVzSU8oYnl0ZWFycmF5KFsweDEyLCAweDAwLCAweDEyLCAweDM0LCAweDU2XSkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjODAyMTU0Lk1hY0hlYWRlci5GcmFtZVR5cGUuQUNLLCBmcmFtZS5oZWFkZXIuZnJhbWVfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBmcmFtZS5oZWFkZXIuZnJhbWVfcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgZnJhbWUuaGVhZGVyLmFja19yZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGZyYW1lLmhlYWRlci5mcmFtZV92ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4MTIsIGZyYW1lLmhlYWRlci5zZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDM0LCAweDU2XSksIGZyYW1lLmhlYWRlci5mY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnJhbWUucGF5bG9hZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kYXRhX2ZyYW1lX3dpdGhfc2hvcnRfYWRkcmVzc2VzKHNlbGYpOgorICAgICAgICBmcmFtZSA9IG1hYzgwMjE1NC5NYWNGcmFtZSgpCisgICAgICAgIGZyYW1lLnBhcnNlKGlvLkJ5dGVzSU8oYnl0ZWFycmF5KFsweDYxLCAweDg4LCAweDM0LCAweGNlLCAweGZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhZCwgMHhkZSwgMHhlZiwgMHhiZSwgMHgxMiwgMHgzNCwgMHhmZSwgMHhkY10pKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hYzgwMjE1NC5NYWNIZWFkZXIuRnJhbWVUeXBlLkRBVEEsIGZyYW1lLmhlYWRlci5mcmFtZV90eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBmcmFtZS5oZWFkZXIuZnJhbWVfcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBmcmFtZS5oZWFkZXIuYWNrX3JlcXVlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZnJhbWUuaGVhZGVyLmZyYW1lX3ZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHgzNCwgZnJhbWUuaGVhZGVyLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4ZmUsIDB4ZGNdKSwgZnJhbWUuaGVhZGVyLmZjcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZhY2UsIGZyYW1lLmhlYWRlci5kZXN0X3Bhbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGRlYWQsIGZyYW1lLmhlYWRlci5kZXN0X2FkZHJlc3MucmxvYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZhY2UsIGZyYW1lLmhlYWRlci5zcmNfcGFuX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4YmVlZiwgZnJhbWUuaGVhZGVyLnNyY19hZGRyZXNzLnJsb2MpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4MTIsIDB4MzRdKSwgZnJhbWUucGF5bG9hZC5kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2RhdGFfZnJhbWVfd2l0aF9leHRlbmRlZF9hZGRyZXNzZXMoc2VsZik6CisgICAgICAgIGZyYW1lID0gbWFjODAyMTU0Lk1hY0ZyYW1lKCkKKyAgICAgICAgZnJhbWUucGFyc2UoaW8uQnl0ZXNJTyhieXRlYXJyYXkoWzB4NjEsIDB4Y2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjZSwgMHhmYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBiLCAweGFkLCAweGYwLCAweDBkLCAweGJhLCAweGQwLCAweGQwLCAweDBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgzNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ZGNdKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWM4MDIxNTQuTWFjSGVhZGVyLkZyYW1lVHlwZS5EQVRBLCBmcmFtZS5oZWFkZXIuZnJhbWVfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgZnJhbWUuaGVhZGVyLmZyYW1lX3BlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgZnJhbWUuaGVhZGVyLmFja19yZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGZyYW1lLmhlYWRlci5mcmFtZV92ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4NTYsIGZyYW1lLmhlYWRlci5zZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweGZlLCAweGRjXSksIGZyYW1lLmhlYWRlci5mY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmYWNlLCBmcmFtZS5oZWFkZXIuZGVzdF9wYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KHJldmVyc2VkKFsweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmhlYWRlci5kZXN0X2FkZHJlc3MubWFjX2FkZHJlc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmYWNlLCBmcmFtZS5oZWFkZXIuc3JjX3Bhbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkocmV2ZXJzZWQoWzB4MGIsIDB4YWQsIDB4ZjAsIDB4MGQsIDB4YmEsIDB4ZDAsIDB4ZDAsIDB4MGRdKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaGVhZGVyLnNyY19hZGRyZXNzLm1hY19hZGRyZXNzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDEyLCAweDM0XSksIGZyYW1lLnBheWxvYWQuZGF0YSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kYXRhX2ZyYW1lX3dpdGhfc2hvcnRfYW5kX2V4dGVuZGVkX2FkZHJlc3NlcyhzZWxmKToKKyAgICAgICAgZnJhbWUgPSBtYWM4MDIxNTQuTWFjRnJhbWUoKQorICAgICAgICBmcmFtZS5wYXJzZShpby5CeXRlc0lPKGJ5dGVhcnJheShbMHg2MSwgMHhjOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGNlLCAweGZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhZCwgMHhkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGIsIDB4YWQsIDB4ZjAsIDB4MGQsIDB4YmEsIDB4ZDAsIDB4ZDAsIDB4MGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDM0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhkY10pKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hYzgwMjE1NC5NYWNIZWFkZXIuRnJhbWVUeXBlLkRBVEEsIGZyYW1lLmhlYWRlci5mcmFtZV90eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBmcmFtZS5oZWFkZXIuZnJhbWVfcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBmcmFtZS5oZWFkZXIuYWNrX3JlcXVlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZnJhbWUuaGVhZGVyLmZyYW1lX3ZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHg1NiwgZnJhbWUuaGVhZGVyLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4ZmUsIDB4ZGNdKSwgZnJhbWUuaGVhZGVyLmZjcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZhY2UsIGZyYW1lLmhlYWRlci5kZXN0X3Bhbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGRlYWQsIGZyYW1lLmhlYWRlci5kZXN0X2FkZHJlc3MucmxvYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZhY2UsIGZyYW1lLmhlYWRlci5zcmNfcGFuX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShyZXZlcnNlZChbMHgwYiwgMHhhZCwgMHhmMCwgMHgwZCwgMHhiYSwgMHhkMCwgMHhkMCwgMHgwZF0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oZWFkZXIuc3JjX2FkZHJlc3MubWFjX2FkZHJlc3MpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4MTIsIDB4MzRdKSwgZnJhbWUucGF5bG9hZC5kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2RhdGFfZnJhbWVfd2l0aF9leHRlbmRlZF9hbmRfc2hvcnRfYWRkcmVzc2VzKHNlbGYpOgorICAgICAgICBmcmFtZSA9IG1hYzgwMjE1NC5NYWNGcmFtZSgpCisgICAgICAgIGZyYW1lLnBhcnNlKGlvLkJ5dGVzSU8oYnl0ZWFycmF5KFsweDYxLCAweDhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Y2UsIDB4ZmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZCwgMHhmMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweGRjXSkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjODAyMTU0Lk1hY0hlYWRlci5GcmFtZVR5cGUuREFUQSwgZnJhbWUuaGVhZGVyLmZyYW1lX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGZyYW1lLmhlYWRlci5mcmFtZV9wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGZyYW1lLmhlYWRlci5hY2tfcmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBmcmFtZS5oZWFkZXIuZnJhbWVfdmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDU2LCBmcmFtZS5oZWFkZXIuc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHhmZSwgMHhkY10pLCBmcmFtZS5oZWFkZXIuZmNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmFjZSwgZnJhbWUuaGVhZGVyLmRlc3RfcGFuX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShyZXZlcnNlZChbMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZl0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oZWFkZXIuZGVzdF9hZGRyZXNzLm1hY19hZGRyZXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmFjZSwgZnJhbWUuaGVhZGVyLnNyY19wYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmMDBkLCBmcmFtZS5oZWFkZXIuc3JjX2FkZHJlc3MucmxvYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgxMiwgMHgzNF0pLCBmcmFtZS5wYXlsb2FkLmRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfZGF0YV9yZXF1ZXN0X2NvbW1hbmQoc2VsZik6CisgICAgICAgIGZyYW1lID0gbWFjODAyMTU0Lk1hY0ZyYW1lKCkKKyAgICAgICAgZnJhbWUucGFyc2UoaW8uQnl0ZXNJTyhieXRlYXJyYXkoWzB4NjMsIDB4ODgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjZSwgMHhmYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YWQsIDB4ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBkLCAweGYwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ZGNdKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWM4MDIxNTQuTWFjSGVhZGVyLkZyYW1lVHlwZS5DT01NQU5ELCBmcmFtZS5oZWFkZXIuZnJhbWVfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgZnJhbWUuaGVhZGVyLmZyYW1lX3BlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgZnJhbWUuaGVhZGVyLmFja19yZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGZyYW1lLmhlYWRlci5mcmFtZV92ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4NzgsIGZyYW1lLmhlYWRlci5zZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweGZlLCAweGRjXSksIGZyYW1lLmhlYWRlci5mY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmYWNlLCBmcmFtZS5oZWFkZXIuZGVzdF9wYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhkZWFkLCBmcmFtZS5oZWFkZXIuZGVzdF9hZGRyZXNzLnJsb2MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmYWNlLCBmcmFtZS5oZWFkZXIuc3JjX3Bhbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGYwMGQsIGZyYW1lLmhlYWRlci5zcmNfYWRkcmVzcy5ybG9jKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFtdKSwgZnJhbWUucGF5bG9hZC5kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2RlY3J5cHRfZGF0YV9mcmFtZShzZWxmKToKKworICAgICAgICBtYWM4MDIxNTQuRGV2aWNlRGVzY3JpcHRvcnMuYWRkKDB4MjAwMSwgTWFjQWRkcmVzcyhieXRlYXJyYXkoWzB4MTYsIDB4NmUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjQWRkcmVzc1R5cGUuTE9ORykpCisKKyAgICAgICAgZnJhbWUgPSBtYWM4MDIxNTQuTWFjRnJhbWUoKQorICAgICAgICBmcmFtZS5wYXJzZShpby5CeXRlc0lPKGJ5dGVhcnJheShbMHg2OSwgMHg5OCwgMHg2OCwgICMgRkMsIHNlcQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjZSwgMHhmYSwgICAgICAgIyBQYW4gSWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MjAsICAgICAgICMgRHN0IGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEsIDB4MjAsICAgICAgICMgU3JjIGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsICAgICAgICAgICAgICMgQXV4IFNlY3VyaXR5IEhlYWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhiNSwgMHg1YSwgMHgwZCwgMHg4ZSwgMHgxOCwgMHg1YywgMHhiMSwgMHgwNiwgICMgUGF5bG9hZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjNCwgMHg2ZiwgMHg3ZCwgMHg2YiwgMHhiNSwgMHg0YSwgMHg4NywgMHgxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YWUsIDB4ZGQsIDB4OGUsIDB4YjcsIDB4MzcsIDB4NjIsIDB4MjcsIDB4NDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGM5LCAweDUzLCAweDBjLCAweDQ0LCAweDMxLCAweDU5LCAweDhiLCAweGEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MywgMHg1OSwgMHhhMSwgMHg0MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzQsIDB4ZTAsIDB4MmEsIDB4ZjYsICAjIE1JQyAodmFsaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweGZjXSkpKSAgICAgICAgICAgIyBGQ1MgKHZhbGlkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjODAyMTU0Lk1hY0hlYWRlci5GcmFtZVR5cGUuREFUQSwgZnJhbWUuaGVhZGVyLmZyYW1lX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGZyYW1lLmhlYWRlci5mcmFtZV9wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGZyYW1lLmhlYWRlci5hY2tfcmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmcmFtZS5oZWFkZXIuZnJhbWVfdmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDY4LCBmcmFtZS5oZWFkZXIuc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHg5OSwgMHhmY10pLCBmcmFtZS5oZWFkZXIuZmNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmFjZSwgZnJhbWUuaGVhZGVyLmRlc3RfcGFuX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4MjAwMCwgZnJhbWUuaGVhZGVyLmRlc3RfYWRkcmVzcy5ybG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmFjZSwgZnJhbWUuaGVhZGVyLnNyY19wYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHgyMDAxLCBmcmFtZS5oZWFkZXIuc3JjX2FkZHJlc3MucmxvYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGZyYW1lLmhlYWRlci5hdXhfc2VjX2hlYWRlci5mcmFtZV9jb3VudGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIGZyYW1lLmhlYWRlci5hdXhfc2VjX2hlYWRlci5zZWN1cml0eV9sZXZlbCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGJ5dGVhcnJheShbMHg3YywgMHg3NywgMHg4MCwgMHhmMCwgMHg0ZCwgMHg0ZCwgMHg0ZCwgMHg0ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAsIDB4MDQsIDB4NDQsIDB4MDIsIDB4NDQsIDB4NjYsIDB4MTMsIDB4NWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyLCAweDgwLCAweGIxLCAweDYxLCAweDAyLCAweDYxLCAweDczLCAweDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYSwgMHhmZiwgMHgwMSwgMHgwOCwgMHgxNiwgMHg2ZSwgMHgwYSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDddKSksIGZyYW1lLnBheWxvYWQuZGF0YSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9kZWNyeXB0X2NvbW1hbmRfZnJhbWUoc2VsZik6CisgICAgICAgIGZyYW1lID0gbWFjODAyMTU0Lk1hY0ZyYW1lKCkKKyAgICAgICAgZnJhbWUucGFyc2UoaW8uQnl0ZXNJTyhieXRlYXJyYXkoWzB4NmIsIDB4ZGMsIDB4Y2UsIDB4Y2UsIDB4ZmEsIDB4MDIsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDBhLCAweDZlLCAweDE2LCAweDAzLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwYSwgMHg2ZSwgMHgxNiwgMHgwZCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MmQsIDB4YmMsIDB4MTIsIDB4YmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBhLCAweDRmXSkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjODAyMTU0Lk1hY0hlYWRlci5GcmFtZVR5cGUuQ09NTUFORCwgZnJhbWUuaGVhZGVyLmZyYW1lX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGZyYW1lLmhlYWRlci5mcmFtZV9wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGZyYW1lLmhlYWRlci5hY2tfcmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmcmFtZS5oZWFkZXIuZnJhbWVfdmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyMDYsIGZyYW1lLmhlYWRlci5zZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDBhLCAweDRmXSksIGZyYW1lLmhlYWRlci5mY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmYWNlLCBmcmFtZS5oZWFkZXIuZGVzdF9wYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDE2LCAweDZlLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaGVhZGVyLmRlc3RfYWRkcmVzcy5tYWNfYWRkcmVzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZhY2UsIGZyYW1lLmhlYWRlci5zcmNfcGFuX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgxNiwgMHg2ZSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwM10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmhlYWRlci5zcmNfYWRkcmVzcy5tYWNfYWRkcmVzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGZyYW1lLmhlYWRlci5hdXhfc2VjX2hlYWRlci5mcmFtZV9jb3VudGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIGZyYW1lLmhlYWRlci5hdXhfc2VjX2hlYWRlci5zZWN1cml0eV9sZXZlbCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X21sZS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9tbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzhiYTI1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9tbGUucHkKQEAgLTAsMCArMSwxNzkzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IGlvCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RydWN0CitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbW1vbgoraW1wb3J0IGNvbmZpZworaW1wb3J0IG5ldF9jcnlwdG8KK2ltcG9ydCBtbGUKK2ltcG9ydCBuZXR3b3JrX2RhdGEKKworZnJvbSBpcGFkZHJlc3MgaW1wb3J0IGlwX2FkZHJlc3MKKworCitkZWYgYW55X2FkZHJlc3MoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE2KQorCisKK2RlZiBhbnlfcmVjZWl2ZXIoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9zZWN1cmUoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9kZXZpY2VfdHlwZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X25ldHdvcmtfZGF0YSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworbW9kZV9tYXAgPSB7CisgICAgMHgwMDogeyJyZWNlaXZlciI6IDAsICJzZWN1cmUiOiAwLCAiZGV2aWNlX3R5cGUiOiAwLCAibmV0d29ya19kYXRhIjogMH0sCisgICAgMHgwODogeyJyZWNlaXZlciI6IDEsICJzZWN1cmUiOiAwLCAiZGV2aWNlX3R5cGUiOiAwLCAibmV0d29ya19kYXRhIjogMH0sCisgICAgMHgwNDogeyJyZWNlaXZlciI6IDAsICJzZWN1cmUiOiAxLCAiZGV2aWNlX3R5cGUiOiAwLCAibmV0d29ya19kYXRhIjogMH0sCisgICAgMHgwQzogeyJyZWNlaXZlciI6IDEsICJzZWN1cmUiOiAxLCAiZGV2aWNlX3R5cGUiOiAwLCAibmV0d29ya19kYXRhIjogMH0sCisgICAgMHgwMjogeyJyZWNlaXZlciI6IDAsICJzZWN1cmUiOiAwLCAiZGV2aWNlX3R5cGUiOiAxLCAibmV0d29ya19kYXRhIjogMH0sCisgICAgMHgwQTogeyJyZWNlaXZlciI6IDEsICJzZWN1cmUiOiAwLCAiZGV2aWNlX3R5cGUiOiAxLCAibmV0d29ya19kYXRhIjogMH0sCisgICAgMHgwNjogeyJyZWNlaXZlciI6IDAsICJzZWN1cmUiOiAxLCAiZGV2aWNlX3R5cGUiOiAxLCAibmV0d29ya19kYXRhIjogMH0sCisgICAgMHgwRTogeyJyZWNlaXZlciI6IDEsICJzZWN1cmUiOiAxLCAiZGV2aWNlX3R5cGUiOiAxLCAibmV0d29ya19kYXRhIjogMH0sCisgICAgMHgwMTogeyJyZWNlaXZlciI6IDAsICJzZWN1cmUiOiAwLCAiZGV2aWNlX3R5cGUiOiAwLCAibmV0d29ya19kYXRhIjogMX0sCisgICAgMHgwOTogeyJyZWNlaXZlciI6IDEsICJzZWN1cmUiOiAwLCAiZGV2aWNlX3R5cGUiOiAwLCAibmV0d29ya19kYXRhIjogMX0sCisgICAgMHgwNTogeyJyZWNlaXZlciI6IDAsICJzZWN1cmUiOiAxLCAiZGV2aWNlX3R5cGUiOiAwLCAibmV0d29ya19kYXRhIjogMX0sCisgICAgMHgwRDogeyJyZWNlaXZlciI6IDEsICJzZWN1cmUiOiAxLCAiZGV2aWNlX3R5cGUiOiAwLCAibmV0d29ya19kYXRhIjogMX0sCisgICAgMHgwMzogeyJyZWNlaXZlciI6IDAsICJzZWN1cmUiOiAwLCAiZGV2aWNlX3R5cGUiOiAxLCAibmV0d29ya19kYXRhIjogMX0sCisgICAgMHgwQjogeyJyZWNlaXZlciI6IDEsICJzZWN1cmUiOiAwLCAiZGV2aWNlX3R5cGUiOiAxLCAibmV0d29ya19kYXRhIjogMX0sCisgICAgMHgwNzogeyJyZWNlaXZlciI6IDAsICJzZWN1cmUiOiAxLCAiZGV2aWNlX3R5cGUiOiAxLCAibmV0d29ya19kYXRhIjogMX0sCisgICAgMHgwRjogeyJyZWNlaXZlciI6IDEsICJzZWN1cmUiOiAxLCAiZGV2aWNlX3R5cGUiOiAxLCAibmV0d29ya19kYXRhIjogMX0KK30KKworCitkZWYgYW55X21vZGUoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDQpCisKKworZGVmIGFueV90aW1lb3V0KCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygzMikKKworCitkZWYgYW55X2NoYWxsZW5nZSgpOgorICAgIGxlbmd0aCA9IHJhbmRvbS5yYW5kaW50KDQsIDgpCisgICAgcmV0dXJuIGJ5dGVhcnJheShyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKSkKKworCitkZWYgYW55X3Jlc3BvbnNlKCk6CisgICAgbGVuZ3RoID0gcmFuZG9tLnJhbmRpbnQoNCwgOCkKKyAgICByZXR1cm4gYnl0ZWFycmF5KHJhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShsZW5ndGgpKQorCisKK2RlZiBhbnlfbGlua19sYXllcl9mcmFtZV9jb3VudGVyKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygzMikKKworCitkZWYgYW55X21sZV9mcmFtZV9jb3VudGVyKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygzMikKKworCitkZWYgYW55X291dHB1dCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMikKKworCitkZWYgYW55X2lucHV0KCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygyKQorCisKK2RlZiBhbnlfcm91dGUoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDQpCisKKworZGVmIGFueV9pZF9zZXF1ZW5jZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X3JvdXRlcl9pZF9tYXNrKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg2NCkKKworCitkZWYgYW55X2xpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YShsZW5ndGg9Tm9uZSk6CisgICAgbGVuZ3RoID0gbGVuZ3RoIGlmIGxlbmd0aCBpcyBub3QgTm9uZSBlbHNlIHJhbmRvbS5yYW5kaW50KDAsIDYzKQorICAgIHJldHVybiBbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGxlbmd0aCldCisKKworZGVmIGFueV9wYXJ0aXRpb25faWQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDMyKQorCisKK2RlZiBhbnlfd2VpZ2h0aW5nKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfZGF0YV92ZXJzaW9uKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfc3RhYmxlX2RhdGFfdmVyc2lvbigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X2xlYWRlcl9yb3V0ZXJfaWQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKK3NjYW5fbWFza19tYXAgPSB7CisgICAgMHgwMDogeyJyb3V0ZXIiOiAwLCAiZW5kX2RldmljZSI6IDB9LAorICAgIDB4NDA6IHsicm91dGVyIjogMCwgImVuZF9kZXZpY2UiOiAxfSwKKyAgICAweDgwOiB7InJvdXRlciI6IDEsICJlbmRfZGV2aWNlIjogMH0sCisgICAgMHhDMDogeyJyb3V0ZXIiOiAxLCAiZW5kX2RldmljZSI6IDF9LAorfQorCisKK2RlZiBhbnlfc2Nhbl9tYXNrX3JvdXRlcigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X3NjYW5fbWFza19lbmRfZGV2aWNlKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfc2Nhbl9tYXNrKCk6CisgICAgcmV0dXJuIChyYW5kb20uZ2V0cmFuZGJpdHMoMikgPDwgNikKKworCitkZWYgYW55X2xpbmtfbWFyZ2luKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfc3RhdHVzKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfdmVyc2lvbigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTYpCisKKworZGVmIGFueV9jaGFubmVsX3BhZ2UoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9jaGFubmVsKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxNikKKworCitkZWYgYW55X3Bhbl9pZCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTYpCisKKworZGVmIGFueV90aW1lc3RhbXBfc2Vjb25kcygpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNDgpCisKKworZGVmIGFueV90aW1lc3RhbXBfdGlja3MoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE1KQorCisKK2RlZiBhbnlfdSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X3BwKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygyKQorCisKK2RlZiBhbnlfbGlua19xdWFsaXR5XzMoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9saW5rX3F1YWxpdHlfMigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X2xpbmtfcXVhbGl0eV8xKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfbGVhZGVyX2Nvc3QoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9pZF9zZXF1ZW5jZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X2FjdGl2ZV9yb3V0ZXJzKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfc2VkX2J1ZmZlcl9zaXplKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxNikKKworCitkZWYgYW55X3NlZF9kYXRhZ3JhbV9jb3VudCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X3RsdnMobGVuZ3RoPU5vbmUpOgorICAgIGlmIGxlbmd0aCBpcyBOb25lOgorICAgICAgICBsZW5ndGggPSByYW5kb20ucmFuZGludCgwLCAxNikKKworICAgIHJldHVybiBbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGxlbmd0aCldCisKKworZGVmIGFueV9jaWQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDQpCisKKworZGVmIGFueV9paWQoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoOCldKQorCisKK2RlZiBhbnlfaXB2Nl9hZGRyZXNzKCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDE2KV0pCisKKworZGVmIGFueV9hZGRyZXNzZXMoKToKKyAgICBhZGRyZXNzZXMgPSBbCisgICAgICAgIG1sZS5BZGRyZXNzQ29tcHJlc3NlZChhbnlfY2lkKCksIGFueV9paWQoKSksCisgICAgICAgIG1sZS5BZGRyZXNzRnVsbChhbnlfaXB2Nl9hZGRyZXNzKCkpCisgICAgXQorCisgICAgcmV0dXJuIGFkZHJlc3NlcworCisKK2RlZiBhbnlfa2V5X2lkX21vZGUoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDIpCisKKworZGVmIGFueV9zZWN1cml0eV9sZXZlbCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMykKKworCitkZWYgYW55X2ZyYW1lX2NvdW50ZXIoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDMyKQorCisKK2RlZiBhbnlfa2V5X2lkKGtleV9pZF9tb2RlKToKKyAgICBpZiBrZXlfaWRfbW9kZSA9PSAwOgorICAgICAgICBsZW5ndGggPSAwCisgICAgZWxpZiBrZXlfaWRfbW9kZSA9PSAxOgorICAgICAgICBsZW5ndGggPSAxCisgICAgZWxpZiBrZXlfaWRfbW9kZSA9PSAyOgorICAgICAgICBsZW5ndGggPSA1CisgICAgZWxpZiBrZXlfaWRfbW9kZSA9PSAzOgorICAgICAgICBsZW5ndGggPSA5CisKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKV0pCisKKworZGVmIGFueV9ldWk2NCgpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSg4KV0pCisKKworY2xhc3MgVGVzdFNvdXJjZUFkZHJlc3ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9hZGRyZXNzX3ZhbHVlX3doZW5fYWRkcmVzc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYWRkcmVzcyA9IGFueV9hZGRyZXNzKCkKKworICAgICAgICBzb3VyY2VfYWRkcmVzcyA9IG1sZS5Tb3VyY2VBZGRyZXNzKGFkZHJlc3MpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9hZGRyZXNzID0gc291cmNlX2FkZHJlc3MuYWRkcmVzcworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZHJlc3MsIGFjdHVhbF9hZGRyZXNzKQorCisKK2NsYXNzIFRlc3RTb3VyY2VBZGRyZXNzRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1NvdXJjZUFkZHJlc3NfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGFkZHJlc3MgPSBhbnlfYWRkcmVzcygpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5Tb3VyY2VBZGRyZXNzRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IHN0cnVjdC5wYWNrKCI+SCIsIGFkZHJlc3MpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zb3VyY2VfYWRkcmVzcyA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfc291cmNlX2FkZHJlc3MsIG1sZS5Tb3VyY2VBZGRyZXNzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyZXNzLCBhY3R1YWxfc291cmNlX2FkZHJlc3MuYWRkcmVzcykKKworCitjbGFzcyBUZXN0TW9kZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3JlY2VpdmVyX3ZhbHVlX3doZW5fcmVjZWl2ZXJfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHJlY2VpdmVyID0gYW55X3JlY2VpdmVyKCkKKworICAgICAgICBtb2RlID0gbWxlLk1vZGUocmVjZWl2ZXIsIGFueV9zZWN1cmUoKSwgYW55X2RldmljZV90eXBlKCksIGFueV9uZXR3b3JrX2RhdGEoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3JlY2VpdmVyID0gbW9kZS5yZWNlaXZlcgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY2VpdmVyLCBhY3R1YWxfcmVjZWl2ZXIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3NlY3VyZV92YWx1ZV93aGVuX3NlY3VyZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2VjdXJlID0gYW55X3NlY3VyZSgpCisKKyAgICAgICAgbW9kZSA9IG1sZS5Nb2RlKGFueV9yZWNlaXZlcigpLCBzZWN1cmUsIGFueV9kZXZpY2VfdHlwZSgpLCBhbnlfbmV0d29ya19kYXRhKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zZWN1cmUgPSBtb2RlLnNlY3VyZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlY3VyZSwgYWN0dWFsX3NlY3VyZSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fZGV2aWNlX3R5cGVfdmFsdWVfd2hlbl9kZXZpY2VfdHlwZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGV2aWNlX3R5cGUgPSBhbnlfZGV2aWNlX3R5cGUoKQorCisgICAgICAgIG1vZGUgPSBtbGUuTW9kZShhbnlfcmVjZWl2ZXIoKSwgYW55X3NlY3VyZSgpLCBkZXZpY2VfdHlwZSwgYW55X25ldHdvcmtfZGF0YSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZGV2aWNlX3R5cGUgPSBtb2RlLmRldmljZV90eXBlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGV2aWNlX3R5cGUsIGFjdHVhbF9kZXZpY2VfdHlwZSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fbmV0d29ya19kYXRhX3ZhbHVlX3doZW5fbmV0d29ya19kYXRhX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBuZXR3b3JrX2RhdGEgPSBhbnlfbmV0d29ya19kYXRhKCkKKworICAgICAgICBtb2RlID0gbWxlLk1vZGUoYW55X3JlY2VpdmVyKCksIGFueV9zZWN1cmUoKSwgYW55X2RldmljZV90eXBlKCksIG5ldHdvcmtfZGF0YSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX25ldHdvcmtfZGF0YSA9IG1vZGUubmV0d29ya19kYXRhCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV0d29ya19kYXRhLCBhY3R1YWxfbmV0d29ya19kYXRhKQorCisKK2NsYXNzIFRlc3RNb2RlRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX01vZGVfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1vZGUgPSBhbnlfbW9kZSgpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5Nb2RlRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbbW9kZV0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9tb2RlID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9tb2RlLCBtbGUuTW9kZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZV9tYXBbbW9kZV1bInJlY2VpdmVyIl0sIGFjdHVhbF9tb2RlLnJlY2VpdmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVfbWFwW21vZGVdWyJzZWN1cmUiXSwgYWN0dWFsX21vZGUuc2VjdXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVfbWFwW21vZGVdWyJkZXZpY2VfdHlwZSJdLCBhY3R1YWxfbW9kZS5kZXZpY2VfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RlX21hcFttb2RlXVsibmV0d29ya19kYXRhIl0sIGFjdHVhbF9tb2RlLm5ldHdvcmtfZGF0YSkKKworCitjbGFzcyBUZXN0VGltZW91dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3RpbWVvdXRfdmFsdWVfd2hlbl90aW1lb3V0X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0aW1lb3V0ID0gYW55X3RpbWVvdXQoKQorCisgICAgICAgIHRpbWVvdXRfb2JqID0gbWxlLlRpbWVvdXQodGltZW91dCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3RpbWVvdXQgPSB0aW1lb3V0X29iai50aW1lb3V0CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZW91dCwgYWN0dWFsX3RpbWVvdXQpCisKKworY2xhc3MgVGVzdFRpbWVvdXRGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfVGltZW91dF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdGltZW91dCA9IGFueV90aW1lb3V0KCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLlRpbWVvdXRGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gc3RydWN0LnBhY2soIj5JIiwgdGltZW91dCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3RpbWVvdXQgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3RpbWVvdXQsIG1sZS5UaW1lb3V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lb3V0LCBhY3R1YWxfdGltZW91dC50aW1lb3V0KQorCisKK2NsYXNzIFRlc3RDaGFsbGVuZ2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9jaGFsbGVuZ2VfdmFsdWVfd2hlbl9jaGFsbGVuZ2VfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNoYWxsZW5nZSA9IGFueV9jaGFsbGVuZ2UoKQorCisgICAgICAgIGNoYWxsZW5nZV9vYmogPSBtbGUuQ2hhbGxlbmdlKGNoYWxsZW5nZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NoYWxsZW5nZSA9IGNoYWxsZW5nZV9vYmouY2hhbGxlbmdlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hhbGxlbmdlLCBhY3R1YWxfY2hhbGxlbmdlKQorCisKK2NsYXNzIFRlc3RDaGFsbGVuZ2VGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQ2hhbGxlbmdlX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjaGFsbGVuZ2UgPSBhbnlfY2hhbGxlbmdlKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLkNoYWxsZW5nZUZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBjaGFsbGVuZ2UKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NoYWxsZW5nZSA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfY2hhbGxlbmdlLCBtbGUuQ2hhbGxlbmdlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFsbGVuZ2UsIGFjdHVhbF9jaGFsbGVuZ2UuY2hhbGxlbmdlKQorCisKK2NsYXNzIFRlc3RSZXNwb25zZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3Jlc3BvbnNlX3ZhbHVlX3doZW5fcmVzcG9uc2VfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHJlc3BvbnNlID0gYW55X3Jlc3BvbnNlKCkKKworICAgICAgICByZXNwb25zZV9vYmogPSBtbGUuUmVzcG9uc2UocmVzcG9uc2UpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9yZXNwb25zZSA9IHJlc3BvbnNlX29iai5yZXNwb25zZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLCBhY3R1YWxfcmVzcG9uc2UpCisKKworY2xhc3MgVGVzdFJlc3BvbnNlRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0NoYWxsZW5nZV9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcmVzcG9uc2UgPSBhbnlfcmVzcG9uc2UoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuUmVzcG9uc2VGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gcmVzcG9uc2UKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3Jlc3BvbnNlID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9yZXNwb25zZSwgbWxlLlJlc3BvbnNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZSwgYWN0dWFsX3Jlc3BvbnNlLnJlc3BvbnNlKQorCisKK2NsYXNzIFRlc3RMaW5rTGF5ZXJGcmFtZUNvdW50ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9mcmFtZV9jb3VudGVyX3ZhbHVlX3doZW5fZnJhbWVfY291bnRlcl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbGlua19sYXllcl9mcmFtZV9jb3VudGVyID0gYW55X2xpbmtfbGF5ZXJfZnJhbWVfY291bnRlcigpCisKKyAgICAgICAgbGlua19sYXllcl9mcmFtZV9jb3VudGVyX29iaiA9IG1sZS5MaW5rTGF5ZXJGcmFtZUNvdW50ZXIobGlua19sYXllcl9mcmFtZV9jb3VudGVyKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbGlua19sYXllcl9mcmFtZV9jb3VudGVyID0gbGlua19sYXllcl9mcmFtZV9jb3VudGVyX29iai5mcmFtZV9jb3VudGVyCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlua19sYXllcl9mcmFtZV9jb3VudGVyLCBhY3R1YWxfbGlua19sYXllcl9mcmFtZV9jb3VudGVyKQorCisKK2NsYXNzIFRlc3RMaW5rTGF5ZXJGcmFtZUNvdW50ZXJGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTGlua0xheWVyRnJhbWVDb3VudGVyX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsaW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIgPSBhbnlfbGlua19sYXllcl9mcmFtZV9jb3VudGVyKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLkxpbmtMYXllckZyYW1lQ291bnRlckZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygiPkkiLCBsaW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9saW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX2xpbmtfbGF5ZXJfZnJhbWVfY291bnRlciwgbWxlLkxpbmtMYXllckZyYW1lQ291bnRlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlua19sYXllcl9mcmFtZV9jb3VudGVyLCBhY3R1YWxfbGlua19sYXllcl9mcmFtZV9jb3VudGVyLmZyYW1lX2NvdW50ZXIpCisKKworY2xhc3MgVGVzdE1sZUZyYW1lQ291bnRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2ZyYW1lX2NvdW50ZXJfdmFsdWVfd2hlbl9mcmFtZV9jb3VudGVyX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtbGVfZnJhbWVfY291bnRlciA9IGFueV9tbGVfZnJhbWVfY291bnRlcigpCisKKyAgICAgICAgbWxlX2ZyYW1lX2NvdW50ZXJfb2JqID0gbWxlLk1sZUZyYW1lQ291bnRlcihtbGVfZnJhbWVfY291bnRlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX21sZV9mcmFtZV9jb3VudGVyID0gbWxlX2ZyYW1lX2NvdW50ZXJfb2JqLmZyYW1lX2NvdW50ZXIKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGVfZnJhbWVfY291bnRlciwgYWN0dWFsX21sZV9mcmFtZV9jb3VudGVyKQorCisKK2NsYXNzIFRlc3RNbGVGcmFtZUNvdW50ZXJGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTWxlRnJhbWVDb3VudGVyX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtbGVfZnJhbWVfY291bnRlciA9IGFueV9tbGVfZnJhbWVfY291bnRlcigpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5NbGVGcmFtZUNvdW50ZXJGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gc3RydWN0LnBhY2soIj5JIiwgbWxlX2ZyYW1lX2NvdW50ZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9tbGVfZnJhbWVfY291bnRlciA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfbWxlX2ZyYW1lX2NvdW50ZXIsIG1sZS5NbGVGcmFtZUNvdW50ZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZV9mcmFtZV9jb3VudGVyLCBhY3R1YWxfbWxlX2ZyYW1lX2NvdW50ZXIuZnJhbWVfY291bnRlcikKKworCitjbGFzcyBUZXN0TGlua1F1YWxpdHlBbmRSb3V0ZURhdGEodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9vdXRwdXRfdmFsdWVfd2hlbl9vdXRwdXRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG91dHB1dCA9IGFueV9vdXRwdXQoKQorCisgICAgICAgIGxxcmQgPSBtbGUuTGlua1F1YWxpdHlBbmRSb3V0ZURhdGEob3V0cHV0LCBhbnlfaW5wdXQoKSwgYW55X3JvdXRlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9vdXRwdXQgPSBscXJkLm91dHB1dAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgYWN0dWFsX291dHB1dCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5faW5wdXRfdmFsdWVfd2hlbl9pbnB1dF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgX2lucHV0ID0gYW55X2lucHV0KCkKKworICAgICAgICBscXJkID0gbWxlLkxpbmtRdWFsaXR5QW5kUm91dGVEYXRhKGFueV9vdXRwdXQoKSwgX2lucHV0LCBhbnlfcm91dGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lucHV0ID0gbHFyZC5pbnB1dAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9pbnB1dCwgYWN0dWFsX2lucHV0KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9yb3V0ZV92YWx1ZV93aGVuX3JvdXRlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICByb3V0ZSA9IGFueV9yb3V0ZSgpCisKKyAgICAgICAgbHFyZCA9IG1sZS5MaW5rUXVhbGl0eUFuZFJvdXRlRGF0YShhbnlfb3V0cHV0KCksIGFueV9pbnB1dCgpLCByb3V0ZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3JvdXRlID0gbHFyZC5yb3V0ZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdXRlLCBhY3R1YWxfcm91dGUpCisKKworY2xhc3MgVGVzdExpbmtRdWFsaXR5QW5kUm91dGVEYXRhRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0xpbmtRdWFsaXR5QW5kUm91dGVEYXRhX2Zyb21fd2VsbF9rbm93bl9ieXRlX3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbWxlLkxpbmtRdWFsaXR5QW5kUm91dGVEYXRhRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbMHg2Nl0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9scXJkID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgYWN0dWFsX2xxcmQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGFjdHVhbF9scXJkLmlucHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIGFjdHVhbF9scXJkLnJvdXRlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9MaW5rUXVhbGl0eUFuZFJvdXRlRGF0YV9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgb3V0cHV0ID0gYW55X291dHB1dCgpCisgICAgICAgIF9pbnB1dCA9IGFueV9pbnB1dCgpCisgICAgICAgIHJvdXRlID0gYW55X3JvdXRlKCkKKworICAgICAgICBscXJkID0gKG91dHB1dCA8PCA2KSB8IChfaW5wdXQgPDwgNCkgfCByb3V0ZQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuTGlua1F1YWxpdHlBbmRSb3V0ZURhdGFGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtscXJkXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2xxcmQgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX2xxcmQsIG1sZS5MaW5rUXVhbGl0eUFuZFJvdXRlRGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBhY3R1YWxfbHFyZC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2lucHV0LCBhY3R1YWxfbHFyZC5pbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3V0ZSwgYWN0dWFsX2xxcmQucm91dGUpCisKKworY2xhc3MgVGVzdFJvdXRlNjQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9pZF9zZXF1ZW5jZV92YWx1ZV93aGVuX2lkX3NlcXVlbmNlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpZF9zZXF1ZW5jZSA9IGFueV9pZF9zZXF1ZW5jZSgpCisKKyAgICAgICAgcm91dGU2NF9vYmogPSBtbGUuUm91dGU2NChpZF9zZXF1ZW5jZSwgYW55X3JvdXRlcl9pZF9tYXNrKCksIGFueV9saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lkX3NlcXVlbmNlID0gcm91dGU2NF9vYmouaWRfc2VxdWVuY2UKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZF9zZXF1ZW5jZSwgYWN0dWFsX2lkX3NlcXVlbmNlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9yb3V0ZXJfaWRfbWFza192YWx1ZV93aGVuX3JvdXRlcl9pZF9tYXNrX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICByb3V0ZXJfaWRfbWFzayA9IGFueV9yb3V0ZXJfaWRfbWFzaygpCisKKyAgICAgICAgcm91dGU2NF9vYmogPSBtbGUuUm91dGU2NChhbnlfaWRfc2VxdWVuY2UoKSwgcm91dGVyX2lkX21hc2ssIGFueV9saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3JvdXRlcl9pZF9tYXNrID0gcm91dGU2NF9vYmoucm91dGVyX2lkX21hc2sKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3V0ZXJfaWRfbWFzaywgYWN0dWFsX3JvdXRlcl9pZF9tYXNrKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGFfdmFsdWVfd2hlbl9saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGFfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSA9IGFueV9saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEoKQorCisgICAgICAgIHJvdXRlNjRfb2JqID0gbWxlLlJvdXRlNjQoYW55X2lkX3NlcXVlbmNlKCksIGFueV9yb3V0ZXJfaWRfbWFzaygpLCBsaW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEgPSByb3V0ZTY0X29iai5saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEsIGFjdHVhbF9saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEpCisKKworY2xhc3MgVGVzdFJvdXRlNjRGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfUm91dGU2NF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY2xhc3MgRHVtbXlMUVJERmFjdG9yeToKKworICAgICAgICAgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIGNvbnRleHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIGlkX3NlcXVlbmNlID0gYW55X2lkX3NlcXVlbmNlKCkKKyAgICAgICAgcm91dGVyX2lkX21hc2sgPSBhbnlfcm91dGVyX2lkX21hc2soKQorCisgICAgICAgIHJvdXRlcl9jb3VudCA9IDAKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNjQpOgorICAgICAgICAgICAgcm91dGVyX2NvdW50ICs9IChyb3V0ZXJfaWRfbWFzayA+PiBpKSAmIDB4MDEKKworICAgICAgICBsaW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEgPSBhbnlfbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhKHJvdXRlcl9jb3VudCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLlJvdXRlNjRGYWN0b3J5KER1bW15TFFSREZhY3RvcnkoKSkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtpZF9zZXF1ZW5jZV0pICsgc3RydWN0LnBhY2soIj5RIiwgcm91dGVyX2lkX21hc2spICsgYnl0ZWFycmF5KGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3JvdXRlNjQgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3JvdXRlNjQsIG1sZS5Sb3V0ZTY0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZF9zZXF1ZW5jZSwgYWN0dWFsX3JvdXRlNjQuaWRfc2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91dGVyX2lkX21hc2ssIGFjdHVhbF9yb3V0ZTY0LnJvdXRlcl9pZF9tYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiIGZvciBiIGluIGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YV0sIGFjdHVhbF9yb3V0ZTY0LmxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSkKKworCitjbGFzcyBUZXN0QWRkcmVzczE2KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fYWRkcmVzc192YWx1ZV93aGVuX2FkZHJlc3NfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGFkZHJlc3MgPSBhbnlfYWRkcmVzcygpCisKKyAgICAgICAgYWRkcmVzczE2ID0gbWxlLkFkZHJlc3MxNihhZGRyZXNzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfYWRkcmVzcyA9IGFkZHJlc3MxNi5hZGRyZXNzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkcmVzcywgYWN0dWFsX2FkZHJlc3MpCisKKworY2xhc3MgVGVzdEFkZHJlc3MxNkZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9BZGRyZXNzMTZfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGFkZHJlc3MgPSBhbnlfYWRkcmVzcygpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5BZGRyZXNzMTZGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gc3RydWN0LnBhY2soIj5IIiwgYWRkcmVzcykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2FkZHJlc3MxNiA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfYWRkcmVzczE2LCBtbGUuQWRkcmVzczE2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyZXNzLCBhY3R1YWxfYWRkcmVzczE2LmFkZHJlc3MpCisKKworY2xhc3MgVGVzdExlYWRlckRhdGEodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9wYXJ0aXRpb25faWRfdmFsdWVfd2hlbl9wYXJ0aXRpb25faWRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHBhcnRpdGlvbl9pZCA9IGFueV9wYXJ0aXRpb25faWQoKQorCisgICAgICAgIGxlYWRlcl9kYXRhID0gbWxlLkxlYWRlckRhdGEocGFydGl0aW9uX2lkLCBhbnlfd2VpZ2h0aW5nKCksIGFueV9kYXRhX3ZlcnNpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc3RhYmxlX2RhdGFfdmVyc2lvbigpLCBhbnlfbGVhZGVyX3JvdXRlcl9pZCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcGFydGl0aW9uX2lkID0gbGVhZGVyX2RhdGEucGFydGl0aW9uX2lkCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydGl0aW9uX2lkLCBhY3R1YWxfcGFydGl0aW9uX2lkKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl93ZWlnaHRpbmdfdmFsdWVfd2hlbl93ZWlnaHRpbmdfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHdlaWdodGluZyA9IGFueV93ZWlnaHRpbmcoKQorCisgICAgICAgIGxlYWRlcl9kYXRhID0gbWxlLkxlYWRlckRhdGEoYW55X3BhcnRpdGlvbl9pZCgpLCB3ZWlnaHRpbmcsIGFueV9kYXRhX3ZlcnNpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc3RhYmxlX2RhdGFfdmVyc2lvbigpLCBhbnlfbGVhZGVyX3JvdXRlcl9pZCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfd2VpZ2h0aW5nID0gbGVhZGVyX2RhdGEud2VpZ2h0aW5nCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2VpZ2h0aW5nLCBhY3R1YWxfd2VpZ2h0aW5nKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9kYXRhX3ZlcnNpb25fdmFsdWVfd2hlbl9kYXRhX3ZlcnNpb25fcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGFfdmVyc2lvbiA9IGFueV9kYXRhX3ZlcnNpb24oKQorCisgICAgICAgIGxlYWRlcl9kYXRhID0gbWxlLkxlYWRlckRhdGEoYW55X3BhcnRpdGlvbl9pZCgpLCBhbnlfd2VpZ2h0aW5nKCksIGRhdGFfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc3RhYmxlX2RhdGFfdmVyc2lvbigpLCBhbnlfbGVhZGVyX3JvdXRlcl9pZCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZGF0YV92ZXJzaW9uID0gbGVhZGVyX2RhdGEuZGF0YV92ZXJzaW9uCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YV92ZXJzaW9uLCBhY3R1YWxfZGF0YV92ZXJzaW9uKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zdGFibGVfZGF0YV92ZXJzaW9uX3ZhbHVlX3doZW5fc3RhYmxlX2RhdGFfdmVyc2lvbl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc3RhYmxlX2RhdGFfdmVyc2lvbiA9IGFueV9zdGFibGVfZGF0YV92ZXJzaW9uKCkKKworICAgICAgICBsZWFkZXJfZGF0YSA9IG1sZS5MZWFkZXJEYXRhKGFueV9wYXJ0aXRpb25faWQoKSwgYW55X3dlaWdodGluZygpLCBhbnlfZGF0YV92ZXJzaW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhYmxlX2RhdGFfdmVyc2lvbiwgYW55X2xlYWRlcl9yb3V0ZXJfaWQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3N0YWJsZV9kYXRhX3ZlcnNpb24gPSBsZWFkZXJfZGF0YS5zdGFibGVfZGF0YV92ZXJzaW9uCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhYmxlX2RhdGFfdmVyc2lvbiwgYWN0dWFsX3N0YWJsZV9kYXRhX3ZlcnNpb24pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2xlYWRlcl9yb3V0ZXJfaWRfdmFsdWVfd2hlbl9sZWFkZXJfcm91dGVyX2lkX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsZWFkZXJfcm91dGVyX2lkID0gYW55X2xlYWRlcl9yb3V0ZXJfaWQoKQorCisgICAgICAgIGxlYWRlcl9kYXRhID0gbWxlLkxlYWRlckRhdGEoYW55X3BhcnRpdGlvbl9pZCgpLCBhbnlfd2VpZ2h0aW5nKCksIGFueV9kYXRhX3ZlcnNpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc3RhYmxlX2RhdGFfdmVyc2lvbigpLCBsZWFkZXJfcm91dGVyX2lkKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbGVhZGVyX3JvdXRlcl9pZCA9IGxlYWRlcl9kYXRhLmxlYWRlcl9yb3V0ZXJfaWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZWFkZXJfcm91dGVyX2lkLCBhY3R1YWxfbGVhZGVyX3JvdXRlcl9pZCkKKworCitjbGFzcyBUZXN0TGVhZGVyRGF0YUZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9BZGRyZXNzMTZfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHBhcnRpdGlvbl9pZCA9IGFueV9wYXJ0aXRpb25faWQoKQorICAgICAgICB3ZWlnaHRpbmcgPSBhbnlfd2VpZ2h0aW5nKCkKKyAgICAgICAgZGF0YV92ZXJzaW9uID0gYW55X2RhdGFfdmVyc2lvbigpCisgICAgICAgIHN0YWJsZV9kYXRhX3ZlcnNpb24gPSBhbnlfc3RhYmxlX2RhdGFfdmVyc2lvbigpCisgICAgICAgIGxlYWRlcl9yb3V0ZXJfaWQgPSBhbnlfbGVhZGVyX3JvdXRlcl9pZCgpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5MZWFkZXJEYXRhRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShzdHJ1Y3QucGFjaygiPkkiLCBwYXJ0aXRpb25faWQpKSArIFwKKyAgICAgICAgICAgIGJ5dGVhcnJheShbd2VpZ2h0aW5nLCBkYXRhX3ZlcnNpb24sIHN0YWJsZV9kYXRhX3ZlcnNpb24sIGxlYWRlcl9yb3V0ZXJfaWRdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbGVhZGVyX2RhdGEgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX2xlYWRlcl9kYXRhLCBtbGUuTGVhZGVyRGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydGl0aW9uX2lkLCBhY3R1YWxfbGVhZGVyX2RhdGEucGFydGl0aW9uX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdlaWdodGluZywgYWN0dWFsX2xlYWRlcl9kYXRhLndlaWdodGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhX3ZlcnNpb24sIGFjdHVhbF9sZWFkZXJfZGF0YS5kYXRhX3ZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhYmxlX2RhdGFfdmVyc2lvbiwgYWN0dWFsX2xlYWRlcl9kYXRhLnN0YWJsZV9kYXRhX3ZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVhZGVyX3JvdXRlcl9pZCwgYWN0dWFsX2xlYWRlcl9kYXRhLmxlYWRlcl9yb3V0ZXJfaWQpCisKKworY2xhc3MgVGVzdE5ldHdvcmtEYXRhKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdGx2c192YWx1ZV93aGVuX3RsdnNfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHRsdnMgPSBhbnlfdGx2cygpCisKKyAgICAgICAgbmV0d29ya19kYXRhID0gbWxlLk5ldHdvcmtEYXRhKHRsdnMpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90bHZzID0gbmV0d29ya19kYXRhLnRsdnMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bHZzLCBhY3R1YWxfdGx2cykKKworCitjbGFzcyBUZXN0TmV0d29ya0RhdGFGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfVGx2UmVxdWVzdF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY2xhc3MgRHVtbXlOZXR3b3JrVGx2c0ZhY3Rvcnk6CisKKyAgICAgICAgICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBjb250ZXh0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gW2IgZm9yIGIgaW4gYnl0ZWFycmF5KGRhdGEucmVhZCgpKV0KKworICAgICAgICB0bHZzID0gYW55X3RsdnMoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuTmV0d29ya0RhdGFGYWN0b3J5KER1bW15TmV0d29ya1RsdnNGYWN0b3J5KCkpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheSh0bHZzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbmV0d29ya19kYXRhID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9uZXR3b3JrX2RhdGEsIG1sZS5OZXR3b3JrRGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGx2cywgYWN0dWFsX25ldHdvcmtfZGF0YS50bHZzKQorCisKK2NsYXNzIFRlc3RUbHZSZXF1ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdGx2c192YWx1ZV93aGVuX3RsdnNfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHRsdnMgPSBhbnlfdGx2cygpCisKKyAgICAgICAgdGx2X3JlcXVlc3QgPSBtbGUuVGx2UmVxdWVzdCh0bHZzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdGx2cyA9IHRsdl9yZXF1ZXN0LnRsdnMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bHZzLCBhY3R1YWxfdGx2cykKKworCitjbGFzcyBUZXN0VGx2UmVxdWVzdEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9UbHZSZXF1ZXN0X2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0bHZzID0gYW55X3RsdnMoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuVGx2UmVxdWVzdEZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkodGx2cykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3Rsdl9yZXF1ZXN0ID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF90bHZfcmVxdWVzdCwgbWxlLlRsdlJlcXVlc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRsdnMsIGFjdHVhbF90bHZfcmVxdWVzdC50bHZzKQorCisKK2NsYXNzIFRlc3RTY2FuTWFzayh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3JvdXRlcl92YWx1ZV93aGVuX3JvdXRlcl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcm91dGVyID0gYW55X3NjYW5fbWFza19yb3V0ZXIoKQorCisgICAgICAgIHNjYW5fbWFzayA9IG1sZS5TY2FuTWFzayhyb3V0ZXIsIGFueV9zY2FuX21hc2tfZW5kX2RldmljZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcm91dGVyID0gc2Nhbl9tYXNrLnJvdXRlcgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdXRlciwgYWN0dWFsX3JvdXRlcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fZW5kX2RldmljZV92YWx1ZV93aGVuX2VuZF9kZXZpY2VfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGVuZF9kZXZpY2UgPSBhbnlfc2Nhbl9tYXNrX2VuZF9kZXZpY2UoKQorCisgICAgICAgIHNjYW5fbWFzayA9IG1sZS5TY2FuTWFzayhhbnlfc2Nhbl9tYXNrX3JvdXRlcigpLCBlbmRfZGV2aWNlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZW5kX2RldmljZSA9IHNjYW5fbWFzay5lbmRfZGV2aWNlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5kX2RldmljZSwgYWN0dWFsX2VuZF9kZXZpY2UpCisKKworY2xhc3MgVGVzdFNjYW5NYXNrRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1NjYW5NYXNrX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzY2FuX21hc2sgPSBhbnlfc2Nhbl9tYXNrKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLlNjYW5NYXNrRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbc2Nhbl9tYXNrXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NjYW5fbWFzayA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfc2Nhbl9tYXNrLCBtbGUuU2Nhbk1hc2spKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjYW5fbWFza19tYXBbc2Nhbl9tYXNrXVsicm91dGVyIl0sIGFjdHVhbF9zY2FuX21hc2sucm91dGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjYW5fbWFza19tYXBbc2Nhbl9tYXNrXVsiZW5kX2RldmljZSJdLCBhY3R1YWxfc2Nhbl9tYXNrLmVuZF9kZXZpY2UpCisKKworY2xhc3MgVGVzdENvbm5lY3Rpdml0eSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3BwX3ZhbHVlX3doZW5fcHBfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHBwID0gYW55X3BwKCkKKworICAgICAgICBjb25uZWN0aXZpdHlfb2JqID0gbWxlLkNvbm5lY3Rpdml0eShwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xlYWRlcl9jb3N0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9pZF9zZXF1ZW5jZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfYWN0aXZlX3JvdXRlcnMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlZF9idWZmZXJfc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VkX2RhdGFncmFtX2NvdW50KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9wcCA9IGNvbm5lY3Rpdml0eV9vYmoucHAKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgYWN0dWFsX3BwKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9saW5rX3F1YWxpdHlfM192YWx1ZV93aGVuX2xpbmtfcXVhbGl0eV8zX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsaW5rX3F1YWxpdHlfMyA9IGFueV9saW5rX3F1YWxpdHlfMygpCisKKyAgICAgICAgY29ubmVjdGl2aXR5X29iaiA9IG1sZS5Db25uZWN0aXZpdHkoYW55X3BwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfcXVhbGl0eV8zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8xKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9sZWFkZXJfY29zdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfaWRfc2VxdWVuY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2FjdGl2ZV9yb3V0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZWRfYnVmZmVyX3NpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlZF9kYXRhZ3JhbV9jb3VudCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbGlua19xdWFsaXR5XzMgPSBjb25uZWN0aXZpdHlfb2JqLmxpbmtfcXVhbGl0eV8zCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlua19xdWFsaXR5XzMsIGFjdHVhbF9saW5rX3F1YWxpdHlfMykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fbGlua19xdWFsaXR5XzJfdmFsdWVfd2hlbl9saW5rX3F1YWxpdHlfMl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbGlua19xdWFsaXR5XzIgPSBhbnlfbGlua19xdWFsaXR5XzIoKQorCisgICAgICAgIGNvbm5lY3Rpdml0eV9vYmogPSBtbGUuQ29ubmVjdGl2aXR5KGFueV9wcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua19xdWFsaXR5XzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGVhZGVyX2Nvc3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2lkX3NlcXVlbmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9hY3RpdmVfcm91dGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VkX2J1ZmZlcl9zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZWRfZGF0YWdyYW1fY291bnQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2xpbmtfcXVhbGl0eV8yID0gY29ubmVjdGl2aXR5X29iai5saW5rX3F1YWxpdHlfMgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtfcXVhbGl0eV8yLCBhY3R1YWxfbGlua19xdWFsaXR5XzIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2xpbmtfcXVhbGl0eV8xX3ZhbHVlX3doZW5fbGlua19xdWFsaXR5XzFfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxpbmtfcXVhbGl0eV8xID0gYW55X2xpbmtfcXVhbGl0eV8xKCkKKworICAgICAgICBjb25uZWN0aXZpdHlfb2JqID0gbWxlLkNvbm5lY3Rpdml0eShhbnlfcHAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3F1YWxpdHlfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xlYWRlcl9jb3N0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9pZF9zZXF1ZW5jZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfYWN0aXZlX3JvdXRlcnMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlZF9idWZmZXJfc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VkX2RhdGFncmFtX2NvdW50KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9saW5rX3F1YWxpdHlfMSA9IGNvbm5lY3Rpdml0eV9vYmoubGlua19xdWFsaXR5XzEKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5rX3F1YWxpdHlfMSwgYWN0dWFsX2xpbmtfcXVhbGl0eV8xKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9sZWFkZXJfY29zdF92YWx1ZV93aGVuX2xlYWRlcl9jb3N0X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsZWFkZXJfY29zdCA9IGFueV9sZWFkZXJfY29zdCgpCisKKyAgICAgICAgY29ubmVjdGl2aXR5X29iaiA9IG1sZS5Db25uZWN0aXZpdHkoYW55X3BwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8xKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYWRlcl9jb3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfaWRfc2VxdWVuY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2FjdGl2ZV9yb3V0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZWRfYnVmZmVyX3NpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlZF9kYXRhZ3JhbV9jb3VudCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbGVhZGVyX2Nvc3QgPSBjb25uZWN0aXZpdHlfb2JqLmxlYWRlcl9jb3N0CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVhZGVyX2Nvc3QsIGFjdHVhbF9sZWFkZXJfY29zdCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5faWRfc2VxdWVuY2VfdmFsdWVfd2hlbl9pZF9zZXF1ZW5jZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaWRfc2VxdWVuY2UgPSBhbnlfaWRfc2VxdWVuY2UoKQorCisgICAgICAgIGNvbm5lY3Rpdml0eV9vYmogPSBtbGUuQ29ubmVjdGl2aXR5KGFueV9wcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8yKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGVhZGVyX2Nvc3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRfc2VxdWVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9hY3RpdmVfcm91dGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VkX2J1ZmZlcl9zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZWRfZGF0YWdyYW1fY291bnQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lkX3NlcXVlbmNlID0gY29ubmVjdGl2aXR5X29iai5pZF9zZXF1ZW5jZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkX3NlcXVlbmNlLCBhY3R1YWxfaWRfc2VxdWVuY2UpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2FjdGl2ZV9yb3V0ZXJzX3ZhbHVlX3doZW5fYWN0aXZlX3JvdXRlcnNfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGFjdGl2ZV9yb3V0ZXJzID0gYW55X2FjdGl2ZV9yb3V0ZXJzKCkKKworICAgICAgICBjb25uZWN0aXZpdHlfb2JqID0gbWxlLkNvbm5lY3Rpdml0eShhbnlfcHAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xlYWRlcl9jb3N0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9pZF9zZXF1ZW5jZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfcm91dGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlZF9idWZmZXJfc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VkX2RhdGFncmFtX2NvdW50KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9hY3RpdmVfcm91dGVycyA9IGNvbm5lY3Rpdml0eV9vYmouYWN0aXZlX3JvdXRlcnMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3RpdmVfcm91dGVycywgYWN0dWFsX2FjdGl2ZV9yb3V0ZXJzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zZWRfYnVmZmVyX3NpemVfdmFsdWVfd2hlbl9zZWRfYnVmZmVyX3NpemVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlZF9idWZmZXJfc2l6ZSA9IGFueV9zZWRfYnVmZmVyX3NpemUoKQorCisgICAgICAgIGNvbm5lY3Rpdml0eV9vYmogPSBtbGUuQ29ubmVjdGl2aXR5KGFueV9wcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8yKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGVhZGVyX2Nvc3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2lkX3NlcXVlbmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9hY3RpdmVfcm91dGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWRfYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZWRfZGF0YWdyYW1fY291bnQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NlZF9idWZmZXJfc2l6ZSA9IGNvbm5lY3Rpdml0eV9vYmouc2VkX2J1ZmZlcl9zaXplCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VkX2J1ZmZlcl9zaXplLCBhY3R1YWxfc2VkX2J1ZmZlcl9zaXplKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zZWRfZGF0YWdyYW1fY291bnRfdmFsdWVfd2hlbl9zZWRfZGF0YWdyYW1fY291bnRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlZF9kYXRhZ3JhbV9jb3VudCA9IGFueV9zZWRfZGF0YWdyYW1fY291bnQoKQorCisgICAgICAgIGNvbm5lY3Rpdml0eV9vYmogPSBtbGUuQ29ubmVjdGl2aXR5KGFueV9wcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8yKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGVhZGVyX2Nvc3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2lkX3NlcXVlbmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9hY3RpdmVfcm91dGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VkX2J1ZmZlcl9zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZF9kYXRhZ3JhbV9jb3VudCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NlZF9kYXRhZ3JhbV9jb3VudCA9IGNvbm5lY3Rpdml0eV9vYmouc2VkX2RhdGFncmFtX2NvdW50CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VkX2RhdGFncmFtX2NvdW50LCBhY3R1YWxfc2VkX2RhdGFncmFtX2NvdW50KQorCisKK2NsYXNzIFRlc3RDb25uZWN0aXZpdHlGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQ29ubmVjdGl2aXR5X2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBwcCA9IGFueV9wcCgpCisgICAgICAgIGxpbmtfcXVhbGl0eV8zID0gYW55X2xpbmtfcXVhbGl0eV8zKCkKKyAgICAgICAgbGlua19xdWFsaXR5XzIgPSBhbnlfbGlua19xdWFsaXR5XzIoKQorICAgICAgICBsaW5rX3F1YWxpdHlfMSA9IGFueV9saW5rX3F1YWxpdHlfMSgpCisgICAgICAgIGxlYWRlcl9jb3N0ID0gYW55X2xlYWRlcl9jb3N0KCkKKyAgICAgICAgaWRfc2VxdWVuY2UgPSBhbnlfaWRfc2VxdWVuY2UoKQorICAgICAgICBhY3RpdmVfcm91dGVycyA9IGFueV9hY3RpdmVfcm91dGVycygpCisgICAgICAgIHNlZF9idWZmZXJfc2l6ZSA9IGFueV9zZWRfYnVmZmVyX3NpemUoKQorICAgICAgICBzZWRfZGF0YWdyYW1fY291bnQgPSBhbnlfc2VkX2RhdGFncmFtX2NvdW50KCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLkNvbm5lY3Rpdml0eUZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW3BwLCBsaW5rX3F1YWxpdHlfMywgbGlua19xdWFsaXR5XzIsIGxpbmtfcXVhbGl0eV8xLCBsZWFkZXJfY29zdCwgaWRfc2VxdWVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9yb3V0ZXJzXSkgKyBzdHJ1Y3QucGFjaygiPkgiLCBzZWRfYnVmZmVyX3NpemUpICsgYnl0ZWFycmF5KFtzZWRfZGF0YWdyYW1fY291bnRdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfY29ubmVjdGl2aXR5ID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9jb25uZWN0aXZpdHksIG1sZS5Db25uZWN0aXZpdHkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBhY3R1YWxfY29ubmVjdGl2aXR5LnBwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtfcXVhbGl0eV8zLCBhY3R1YWxfY29ubmVjdGl2aXR5LmxpbmtfcXVhbGl0eV8zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtfcXVhbGl0eV8yLCBhY3R1YWxfY29ubmVjdGl2aXR5LmxpbmtfcXVhbGl0eV8yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtfcXVhbGl0eV8xLCBhY3R1YWxfY29ubmVjdGl2aXR5LmxpbmtfcXVhbGl0eV8xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlYWRlcl9jb3N0LCBhY3R1YWxfY29ubmVjdGl2aXR5LmxlYWRlcl9jb3N0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkX3NlcXVlbmNlLCBhY3R1YWxfY29ubmVjdGl2aXR5LmlkX3NlcXVlbmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGl2ZV9yb3V0ZXJzLCBhY3R1YWxfY29ubmVjdGl2aXR5LmFjdGl2ZV9yb3V0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlZF9idWZmZXJfc2l6ZSwgYWN0dWFsX2Nvbm5lY3Rpdml0eS5zZWRfYnVmZmVyX3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VkX2RhdGFncmFtX2NvdW50LCBhY3R1YWxfY29ubmVjdGl2aXR5LnNlZF9kYXRhZ3JhbV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQ29ubmVjdGl2aXR5X3dpdGhvdXRfc2VkX2RhdGFfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHBwID0gYW55X3BwKCkKKyAgICAgICAgbGlua19xdWFsaXR5XzMgPSBhbnlfbGlua19xdWFsaXR5XzMoKQorICAgICAgICBsaW5rX3F1YWxpdHlfMiA9IGFueV9saW5rX3F1YWxpdHlfMigpCisgICAgICAgIGxpbmtfcXVhbGl0eV8xID0gYW55X2xpbmtfcXVhbGl0eV8xKCkKKyAgICAgICAgbGVhZGVyX2Nvc3QgPSBhbnlfbGVhZGVyX2Nvc3QoKQorICAgICAgICBpZF9zZXF1ZW5jZSA9IGFueV9pZF9zZXF1ZW5jZSgpCisgICAgICAgIGFjdGl2ZV9yb3V0ZXJzID0gYW55X2FjdGl2ZV9yb3V0ZXJzKCkKKyAgICAgICAgc2VkX2J1ZmZlcl9zaXplID0gYW55X3NlZF9idWZmZXJfc2l6ZSgpCisgICAgICAgIHNlZF9kYXRhZ3JhbV9jb3VudCA9IGFueV9zZWRfZGF0YWdyYW1fY291bnQoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuQ29ubmVjdGl2aXR5RmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbcHAsIGxpbmtfcXVhbGl0eV8zLCBsaW5rX3F1YWxpdHlfMiwgbGlua19xdWFsaXR5XzEsIGxlYWRlcl9jb3N0LCBpZF9zZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlX3JvdXRlcnNdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfY29ubmVjdGl2aXR5ID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9jb25uZWN0aXZpdHksIG1sZS5Db25uZWN0aXZpdHkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBhY3R1YWxfY29ubmVjdGl2aXR5LnBwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtfcXVhbGl0eV8zLCBhY3R1YWxfY29ubmVjdGl2aXR5LmxpbmtfcXVhbGl0eV8zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtfcXVhbGl0eV8yLCBhY3R1YWxfY29ubmVjdGl2aXR5LmxpbmtfcXVhbGl0eV8yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtfcXVhbGl0eV8xLCBhY3R1YWxfY29ubmVjdGl2aXR5LmxpbmtfcXVhbGl0eV8xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlYWRlcl9jb3N0LCBhY3R1YWxfY29ubmVjdGl2aXR5LmxlYWRlcl9jb3N0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkX3NlcXVlbmNlLCBhY3R1YWxfY29ubmVjdGl2aXR5LmlkX3NlcXVlbmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGl2ZV9yb3V0ZXJzLCBhY3R1YWxfY29ubmVjdGl2aXR5LmFjdGl2ZV9yb3V0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGFjdHVhbF9jb25uZWN0aXZpdHkuc2VkX2J1ZmZlcl9zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGFjdHVhbF9jb25uZWN0aXZpdHkuc2VkX2RhdGFncmFtX2NvdW50KQorCisKK2NsYXNzIFRlc3RMaW5rTWFyZ2luKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fbGlua19tYXJnaW5fdmFsdWVfd2hlbl9saW5rX21hcmdpbl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbGlua19tYXJnaW4gPSBhbnlfbGlua19tYXJnaW4oKQorCisgICAgICAgIGxpbmtfbWFyZ2luX29iaiA9IG1sZS5MaW5rTWFyZ2luKGxpbmtfbWFyZ2luKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbGlua19tYXJnaW4gPSBsaW5rX21hcmdpbl9vYmoubGlua19tYXJnaW4KKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5rX21hcmdpbiwgYWN0dWFsX2xpbmtfbWFyZ2luKQorCisKK2NsYXNzIFRlc3RMaW5rTWFyZ2luRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0xpbmtNYXJnaW5fZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxpbmtfbWFyZ2luID0gYW55X2xpbmtfbWFyZ2luKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLkxpbmtNYXJnaW5GYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtsaW5rX21hcmdpbl0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9saW5rX21hcmdpbiA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfbGlua19tYXJnaW4sIG1sZS5MaW5rTWFyZ2luKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5rX21hcmdpbiwgYWN0dWFsX2xpbmtfbWFyZ2luLmxpbmtfbWFyZ2luKQorCisKK2NsYXNzIFRlc3RTdGF0dXModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zdGF0dXNfdmFsdWVfd2hlbl9zdGF0dXNfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHN0YXR1cyA9IGFueV9zdGF0dXMoKQorCisgICAgICAgIHN0YXR1c19vYmogPSBtbGUuU3RhdHVzKHN0YXR1cykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3N0YXR1cyA9IHN0YXR1c19vYmouc3RhdHVzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCBhY3R1YWxfc3RhdHVzKQorCisKK2NsYXNzIFRlc3RTdGF0dXNGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfU3RhdHVzX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdGF0dXMgPSBhbnlfc3RhdHVzKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLlN0YXR1c0ZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW3N0YXR1c10pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zdGF0dXMgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3N0YXR1cywgbWxlLlN0YXR1cykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCBhY3R1YWxfc3RhdHVzLnN0YXR1cykKKworCitjbGFzcyBUZXN0VmVyc2lvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3ZlcnNpb25fdmFsdWVfd2hlbl92ZXJzaW9uX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB2ZXJzaW9uID0gYW55X3ZlcnNpb24oKQorCisgICAgICAgIHZlcnNpb25fb2JqID0gbWxlLlZlcnNpb24odmVyc2lvbikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3ZlcnNpb24gPSB2ZXJzaW9uX29iai52ZXJzaW9uCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVyc2lvbiwgYWN0dWFsX3ZlcnNpb24pCisKKworY2xhc3MgVGVzdFZlcnNpb25GYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfVmVyc2lvbl9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdmVyc2lvbiA9IGFueV92ZXJzaW9uKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLlZlcnNpb25GYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gc3RydWN0LnBhY2soIj5IIiwgdmVyc2lvbikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3ZlcnNpb24gPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3ZlcnNpb24sIG1sZS5WZXJzaW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2ZXJzaW9uLCBhY3R1YWxfdmVyc2lvbi52ZXJzaW9uKQorCisKK2NsYXNzIFRlc3RBZGRyZXNzUmVnaXN0cmF0aW9uRnVsbCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2lwdjZfYWRkcmVzc192YWx1ZV93aGVuX2lwdjZfYWRkcmVzc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaXB2Nl9hZGRyZXNzID0gYW55X2lwdjZfYWRkcmVzcygpCisKKyAgICAgICAgYWRkcl9yZWdfZnVsbF9vYmogPSBtbGUuQWRkcmVzc0Z1bGwoaXB2Nl9hZGRyZXNzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaXB2Nl9hZGRyZXNzID0gYWRkcl9yZWdfZnVsbF9vYmouaXB2Nl9hZGRyZXNzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9hZGRyZXNzLCBhY3R1YWxfaXB2Nl9hZGRyZXNzKQorCisKK2NsYXNzIFRlc3RBZGRyZXNzUmVnaXN0cmF0aW9uRnVsbEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9BZGRyZXNzRnVsbF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaXB2Nl9hZGRyZXNzID0gYW55X2lwdjZfYWRkcmVzcygpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5BZGRyZXNzRnVsbEZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWzB4MDBdKSArIGJ5dGVhcnJheShpcHY2X2FkZHJlc3MpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9hZGRyX3JlZ19mdWxsID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9hZGRyX3JlZ19mdWxsLCBtbGUuQWRkcmVzc0Z1bGwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwdjZfYWRkcmVzcywgYWN0dWFsX2FkZHJfcmVnX2Z1bGwuaXB2Nl9hZGRyZXNzKQorCisKK2NsYXNzIFRlc3RBZGRyZXNzUmVnaXN0cmF0aW9uQ29tcHJlc3NlZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2NpZF92YWx1ZV93aGVuX2NpZF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY2lkID0gYW55X2NpZCgpCisKKyAgICAgICAgYWRkcl9yZWdfY29tcHJlc3NlZF9vYmogPSBtbGUuQWRkcmVzc0NvbXByZXNzZWQoY2lkLCBhbnlfaWlkKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9jaWQgPSBhZGRyX3JlZ19jb21wcmVzc2VkX29iai5jaWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaWQsIGFjdHVhbF9jaWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2NpZF92YWx1ZV93aGVuX2lpZF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaWlkID0gYW55X2lpZCgpCisKKyAgICAgICAgYWRkcl9yZWdfY29tcHJlc3NlZF9vYmogPSBtbGUuQWRkcmVzc0NvbXByZXNzZWQoYW55X2NpZCgpLCBpaWQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9paWQgPSBhZGRyX3JlZ19jb21wcmVzc2VkX29iai5paWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpaWQsIGFjdHVhbF9paWQpCisKKworY2xhc3MgVGVzdEFkZHJlc3NSZWdpc3RyYXRpb25Db21wcmVzc2VkRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0FkZHJlc3NSZWdpc3RyYXRpb25Db21wcmVzc2VkX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjaWQgPSBhbnlfY2lkKCkKKyAgICAgICAgaWlkID0gYW55X2lpZCgpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5BZGRyZXNzQ29tcHJlc3NlZEZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWygxIDw8IDcpIHwgY2lkXSkgKyBpaWQKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2FkZHJfcmVnX2NvbXByZXNzZWQgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX2FkZHJfcmVnX2NvbXByZXNzZWQsIG1sZS5BZGRyZXNzQ29tcHJlc3NlZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2lkLCBhY3R1YWxfYWRkcl9yZWdfY29tcHJlc3NlZC5jaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWlkLCBhY3R1YWxfYWRkcl9yZWdfY29tcHJlc3NlZC5paWQpCisKKworY2xhc3MgVGVzdEFkZHJlc3NSZWdpc3RyYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9hZGRyZXNzZXNfdmFsdWVfd2hlbl9hZGRyZXNzZXNfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGFkZHJlc3NlcyA9IGFueV9hZGRyZXNzZXMoKQorCisgICAgICAgIGFkZHJfcmVnX29iaiA9IG1sZS5BZGRyZXNzUmVnaXN0cmF0aW9uKGFkZHJlc3NlcykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2FkZHJlc3NlcyA9IGFkZHJfcmVnX29iai5hZGRyZXNzZXMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyZXNzZXMsIGFjdHVhbF9hZGRyZXNzZXMpCisKKworY2xhc3MgVGVzdEFkZHJlc3NSZWdpc3RyYXRpb25GYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQWRkcmVzc1JlZ2lzdHJhdGlvbl9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY2lkID0gYW55X2NpZCgpCisgICAgICAgIGlpZCA9IGFueV9paWQoKQorICAgICAgICBpcHY2X2FkZHJlc3MgPSBhbnlfaXB2Nl9hZGRyZXNzKCkKKworICAgICAgICBhZGRyZXNzZXMgPSBbCisgICAgICAgICAgICBtbGUuQWRkcmVzc0NvbXByZXNzZWQoY2lkLCBpaWQpLAorICAgICAgICAgICAgbWxlLkFkZHJlc3NGdWxsKGlwdjZfYWRkcmVzcykKKyAgICAgICAgXQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuQWRkcmVzc1JlZ2lzdHJhdGlvbkZhY3RvcnkobWxlLkFkZHJlc3NDb21wcmVzc2VkRmFjdG9yeSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sZS5BZGRyZXNzRnVsbEZhY3RvcnkoKSkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsoMSA8PCA3KSB8IGNpZF0pICsgaWlkICsgYnl0ZWFycmF5KFswXSkgKyBpcHY2X2FkZHJlc3MKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2FkZHJfcmVnID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9hZGRyX3JlZywgbWxlLkFkZHJlc3NSZWdpc3RyYXRpb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZHJlc3Nlc1swXS5jaWQsIGFjdHVhbF9hZGRyX3JlZy5hZGRyZXNzZXNbMF0uY2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZHJlc3Nlc1swXS5paWQsIGFjdHVhbF9hZGRyX3JlZy5hZGRyZXNzZXNbMF0uaWlkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZHJlc3Nlc1sxXS5pcHY2X2FkZHJlc3MsIGFjdHVhbF9hZGRyX3JlZy5hZGRyZXNzZXNbMV0uaXB2Nl9hZGRyZXNzKQorCisKK2NsYXNzIFRlc3RDaGFubmVsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fY2hhbm5lbF9wYWdlX3ZhbHVlX3doZW5fY2hhbm5lbF9wYWdlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjaGFubmVsX3BhZ2UgPSBhbnlfY2hhbm5lbF9wYWdlKCkKKworICAgICAgICBjaGFubmVsX29iaiA9IG1sZS5DaGFubmVsKGNoYW5uZWxfcGFnZSwgYW55X2NoYW5uZWwoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NoYW5uZWxfcGFnZSA9IGNoYW5uZWxfb2JqLmNoYW5uZWxfcGFnZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoYW5uZWxfcGFnZSwgYWN0dWFsX2NoYW5uZWxfcGFnZSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fY2hhbm5lbF92YWx1ZV93aGVuX2NoYW5uZWxfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNoYW5uZWwgPSBhbnlfY2hhbm5lbCgpCisKKyAgICAgICAgY2hhbm5lbF9vYmogPSBtbGUuQ2hhbm5lbChhbnlfY2hhbm5lbF9wYWdlKCksIGNoYW5uZWwpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9jaGFubmVsID0gY2hhbm5lbF9vYmouY2hhbm5lbAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoYW5uZWwsIGFjdHVhbF9jaGFubmVsKQorCisKK2NsYXNzIFRlc3RDaGFubmVsRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0NoYW5uZWxfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNoYW5uZWxfcGFnZSA9IGFueV9jaGFubmVsX3BhZ2UoKQorICAgICAgICBjaGFubmVsID0gYW55X2NoYW5uZWwoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuQ2hhbm5lbEZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW2NoYW5uZWxfcGFnZV0pICsgc3RydWN0LnBhY2soIj5IIiwgY2hhbm5lbCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NoYW5uZWwgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX2NoYW5uZWwsIG1sZS5DaGFubmVsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFubmVsX3BhZ2UsIGFjdHVhbF9jaGFubmVsLmNoYW5uZWxfcGFnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFubmVsLCBhY3R1YWxfY2hhbm5lbC5jaGFubmVsKQorCisKK2NsYXNzIFRlc3RQYW5JZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3Bhbl9pZF92YWx1ZV93aGVuX3Bhbl9pZF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcGFuX2lkID0gYW55X3Bhbl9pZCgpCisKKyAgICAgICAgcGFuX2lkX29iaiA9IG1sZS5QYW5JZChwYW5faWQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9wYW5faWQgPSBwYW5faWRfb2JqLnBhbl9pZAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhbl9pZCwgYWN0dWFsX3Bhbl9pZCkKKworCitjbGFzcyBUZXN0UGFuSWRGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfUGFuSWRfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHBhbl9pZCA9IGFueV9wYW5faWQoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuUGFuSWRGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gc3RydWN0LnBhY2soIj5IIiwgcGFuX2lkKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcGFuX2lkID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9wYW5faWQsIG1sZS5QYW5JZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFuX2lkLCBhY3R1YWxfcGFuX2lkLnBhbl9pZCkKKworCitjbGFzcyBUZXN0QWN0aXZlVGltZXN0YW1wKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdGltZXN0YW1wX3NlY29uZHNfdmFsdWVfd2hlbl90aW1lc3RhbXBfc2Vjb25kc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdGltZXN0YW1wX3NlY29uZHMgPSBhbnlfdGltZXN0YW1wX3NlY29uZHMoKQorCisgICAgICAgIGFjdGl2ZV90aW1lc3RhbXBfb2JqID0gbWxlLkFjdGl2ZVRpbWVzdGFtcCh0aW1lc3RhbXBfc2Vjb25kcywgYW55X3RpbWVzdGFtcF90aWNrcygpLCBhbnlfdSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdGltZXN0YW1wX3NlY29uZHMgPSBhY3RpdmVfdGltZXN0YW1wX29iai50aW1lc3RhbXBfc2Vjb25kcworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVzdGFtcF9zZWNvbmRzLCBhY3R1YWxfdGltZXN0YW1wX3NlY29uZHMpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3RpbWVzdGFtcF90aWNrc192YWx1ZV93aGVuX3RpbWVzdGFtcF90aWNrc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdGltZXN0YW1wX3RpY2tzID0gYW55X3RpbWVzdGFtcF90aWNrcygpCisKKyAgICAgICAgYWN0aXZlX3RpbWVzdGFtcF9vYmogPSBtbGUuQWN0aXZlVGltZXN0YW1wKGFueV90aW1lc3RhbXBfc2Vjb25kcygpLCB0aW1lc3RhbXBfdGlja3MsIGFueV91KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90aW1lc3RhbXBfdGlja3MgPSBhY3RpdmVfdGltZXN0YW1wX29iai50aW1lc3RhbXBfdGlja3MKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lc3RhbXBfdGlja3MsIGFjdHVhbF90aW1lc3RhbXBfdGlja3MpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3VfdmFsdWVfd2hlbl91X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB1ID0gYW55X3UoKQorCisgICAgICAgIGFjdGl2ZV90aW1lc3RhbXBfb2JqID0gbWxlLkFjdGl2ZVRpbWVzdGFtcChhbnlfdGltZXN0YW1wX3NlY29uZHMoKSwgYW55X3RpbWVzdGFtcF90aWNrcygpLCB1KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdSA9IGFjdGl2ZV90aW1lc3RhbXBfb2JqLnUKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBhY3R1YWxfdSkKKworCitjbGFzcyBUZXN0QWN0aXZlVGltZXN0YW1wRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0FjdGl2ZVRpbWVzdGFtcF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdGltZXN0YW1wX3NlY29uZHMgPSBhbnlfdGltZXN0YW1wX3NlY29uZHMoKQorICAgICAgICB0aW1lc3RhbXBfdGlja3MgPSBhbnlfdGltZXN0YW1wX3RpY2tzKCkKKyAgICAgICAgdSA9IGFueV91KCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLkFjdGl2ZVRpbWVzdGFtcEZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygiPlEiLCB0aW1lc3RhbXBfc2Vjb25kcylbMjpdICsgc3RydWN0LnBhY2soIj5IIiwgKHRpbWVzdGFtcF90aWNrcyA8PCAxKSB8IHUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdGl2ZV90aW1lc3RhbXAgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0aXZlX3RpbWVzdGFtcCwgbWxlLkFjdGl2ZVRpbWVzdGFtcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZXN0YW1wX3NlY29uZHMsIGFjdGl2ZV90aW1lc3RhbXAudGltZXN0YW1wX3NlY29uZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZXN0YW1wX3RpY2tzLCBhY3RpdmVfdGltZXN0YW1wLnRpbWVzdGFtcF90aWNrcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBhY3RpdmVfdGltZXN0YW1wLnUpCisKKworY2xhc3MgVGVzdFBlbmRpbmdUaW1lc3RhbXAodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl90aW1lc3RhbXBfc2Vjb25kc192YWx1ZV93aGVuX3RpbWVzdGFtcF9zZWNvbmRzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0aW1lc3RhbXBfc2Vjb25kcyA9IGFueV90aW1lc3RhbXBfc2Vjb25kcygpCisKKyAgICAgICAgcGVuZGluZ190aW1lc3RhbXBfb2JqID0gbWxlLlBlbmRpbmdUaW1lc3RhbXAodGltZXN0YW1wX3NlY29uZHMsIGFueV90aW1lc3RhbXBfdGlja3MoKSwgYW55X3UoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3RpbWVzdGFtcF9zZWNvbmRzID0gcGVuZGluZ190aW1lc3RhbXBfb2JqLnRpbWVzdGFtcF9zZWNvbmRzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZXN0YW1wX3NlY29uZHMsIGFjdHVhbF90aW1lc3RhbXBfc2Vjb25kcykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdGltZXN0YW1wX3RpY2tzX3ZhbHVlX3doZW5fdGltZXN0YW1wX3RpY2tzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0aW1lc3RhbXBfdGlja3MgPSBhbnlfdGltZXN0YW1wX3RpY2tzKCkKKworICAgICAgICBwZW5kaW5nX3RpbWVzdGFtcF9vYmogPSBtbGUuUGVuZGluZ1RpbWVzdGFtcChhbnlfdGltZXN0YW1wX3NlY29uZHMoKSwgdGltZXN0YW1wX3RpY2tzLCBhbnlfdSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdGltZXN0YW1wX3RpY2tzID0gcGVuZGluZ190aW1lc3RhbXBfb2JqLnRpbWVzdGFtcF90aWNrcworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVzdGFtcF90aWNrcywgYWN0dWFsX3RpbWVzdGFtcF90aWNrcykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdV92YWx1ZV93aGVuX3VfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHUgPSBhbnlfdSgpCisKKyAgICAgICAgcGVuZGluZ190aW1lc3RhbXBfb2JqID0gbWxlLlBlbmRpbmdUaW1lc3RhbXAoYW55X3RpbWVzdGFtcF9zZWNvbmRzKCksIGFueV90aW1lc3RhbXBfdGlja3MoKSwgdSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3UgPSBwZW5kaW5nX3RpbWVzdGFtcF9vYmoudQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIGFjdHVhbF91KQorCisKK2NsYXNzIFRlc3RQZW5kaW5nVGltZXN0YW1wRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1BlbmRpbmdUaW1lc3RhbXBfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHRpbWVzdGFtcF9zZWNvbmRzID0gYW55X3RpbWVzdGFtcF9zZWNvbmRzKCkKKyAgICAgICAgdGltZXN0YW1wX3RpY2tzID0gYW55X3RpbWVzdGFtcF90aWNrcygpCisgICAgICAgIHUgPSBhbnlfdSgpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5QZW5kaW5nVGltZXN0YW1wRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IHN0cnVjdC5wYWNrKCI+USIsIHRpbWVzdGFtcF9zZWNvbmRzKVsyOl0gKyBzdHJ1Y3QucGFjaygiPkgiLCAodGltZXN0YW1wX3RpY2tzIDw8IDEpIHwgdSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgcGVuZGluZ190aW1lc3RhbXAgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocGVuZGluZ190aW1lc3RhbXAsIG1sZS5QZW5kaW5nVGltZXN0YW1wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lc3RhbXBfc2Vjb25kcywgcGVuZGluZ190aW1lc3RhbXAudGltZXN0YW1wX3NlY29uZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZXN0YW1wX3RpY2tzLCBwZW5kaW5nX3RpbWVzdGFtcC50aW1lc3RhbXBfdGlja3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgcGVuZGluZ190aW1lc3RhbXAudSkKKworCitjbGFzcyBUZXN0TWxlQ29tbWFuZEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9NbGVDb21tYW5kX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbMHgwYiwgMHgwNCwgMHgwOCwgMHhhNSwgMHhmMiwgMHg5YiwgMHhkZSwgMHhlMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhkOCwgMHhiZSwgMHhiOSwgMHgwNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSwgMHgwZCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgwMiwgMHgwMCwgMHgwMiwgMHgxMywgMHgwOSwgMHg4MCwgMHg4NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMiwgMHgxYiwgMHg4MSwgMHg2ZCwgMHhiOCwgMHhiNSwgMHhlOCwgMHgwZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgwYSwgMHgwYywgMHgwOV0pCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5NbGVDb21tYW5kRmFjdG9yeShjb25maWcuY3JlYXRlX2RlZmF1bHRfbWxlX3RsdnNfZmFjdG9yaWVzKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9tbGVfY29tbWFuZCA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgTm9uZSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX21sZV9jb21tYW5kLCBtbGUuTWxlQ29tbWFuZCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMSwgYWN0dWFsX21sZV9jb21tYW5kLnR5cGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuUmVzcG9uc2UoYnl0ZWFycmF5KFsweGE1LCAweGYyLCAweDliLCAweGRlLCAweGUzLCAweGQ4LCAweGJlLCAweGI5XSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9tbGVfY29tbWFuZC50bHZzWzBdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLkxpbmtMYXllckZyYW1lQ291bnRlcigwKSwgYWN0dWFsX21sZV9jb21tYW5kLnRsdnNbMV0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuTWxlRnJhbWVDb3VudGVyKDEpLCBhY3R1YWxfbWxlX2NvbW1hbmQudGx2c1syXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZS5Nb2RlKHJlY2VpdmVyPTEsIHNlY3VyZT0xLCBkZXZpY2VfdHlwZT0wLCBuZXR3b3JrX2RhdGE9MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX21sZV9jb21tYW5kLnRsdnNbM10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuVGltZW91dCgyNDApLCBhY3R1YWxfbWxlX2NvbW1hbmQudGx2c1s0XSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZS5WZXJzaW9uKDIpLCBhY3R1YWxfbWxlX2NvbW1hbmQudGx2c1s1XSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZS5BZGRyZXNzUmVnaXN0cmF0aW9uKGFkZHJlc3Nlcz1bCisgICAgICAgICAgICBtbGUuQWRkcmVzc0NvbXByZXNzZWQoY2lkPTAsIGlpZD1ieXRlYXJyYXkoWzB4ODYsIDB4YTIsIDB4MWIsIDB4ODEsIDB4NmQsIDB4YjgsIDB4YjUsIDB4ZThdKSldKSwKKyAgICAgICAgICAgIGFjdHVhbF9tbGVfY29tbWFuZC50bHZzWzZdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLlRsdlJlcXVlc3QodGx2cz1bMTAsIDEyLCA5XSksIGFjdHVhbF9tbGVfY29tbWFuZC50bHZzWzddKQorCisKK2NsYXNzIFRlc3RNbGVNZXNzYWdlRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX01sZU1lc3NhZ2VTZWN1cmVkX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX2lwdjYgPSAiZmU4MDo6MTBjZjpkMzhiOjNiNjE6NTU1OCIKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX2lwdjYgPSAiZmU4MDo6MzgzZTo5ZWVkOjdhMDE6MzZhNSIKKworICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgxMiwgMHhjZiwgMHhkMywgMHg4YiwgMHgzYiwgMHg2MSwgMHg1NSwgMHg1OF0pKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDNhLCAweDNlLCAweDllLCAweGVkLCAweDdhLCAweDAxLCAweDM2LCAweGE1XSkpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbMHgwMCwgMHgxNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgxNCwgMHgwMywgMHhlMywgMHg3MiwgMHg1MCwgMHg0ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YywgMHg1YywgMHg0MiwgMHg4MSwgMHg2OCwgMHhlMiwgMHgxMSwgMHhmYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmNSwgMHg4YywgMHg2MiwgMHg4ZSwgMHg4MywgMHg5OSwgMHhlNywgMHgyNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NiwgMHgzNCwgMHgzYiwgMHhhNywgMHg2OCwgMHhjNywgMHg5MywgMHhmYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MiwgMHhkOSwgMHhjYywgMHgxMywgMHg1ZSwgMHg1YiwgMHg5NiwgMHgwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMSwgMHg4MCwgMHgwMywgMHg1NSwgMHg0ZiwgMHgyNywgMHhjMiwgMHg5NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmNCwgMHg5YywgMHg2NSwgMHg4MiwgMHg5NywgMHhjZiwgMHg5NywgMHgzNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OSwgMHhjMl0pCisKKyAgICAgICAgZmFjdG9yeSA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF9tbGVfbWVzc2FnZV9mYWN0b3J5KG1hc3Rlcl9rZXk9Y29uZmlnLkRFRkFVTFRfTUFTVEVSX0tFWSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX21sZV9tZXNzYWdlID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9tbGVfbWVzc2FnZSwgbWxlLk1sZU1lc3NhZ2VTZWN1cmVkKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDExLCBhY3R1YWxfbWxlX21lc3NhZ2UuY29tbWFuZC50eXBlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLlJlc3BvbnNlKGJ5dGVhcnJheShbMHhhNSwgMHhmMiwgMHg5YiwgMHhkZSwgMHhlMywgMHhkOCwgMHhiZSwgMHhiOV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfbWxlX21lc3NhZ2UuY29tbWFuZC50bHZzWzBdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLkxpbmtMYXllckZyYW1lQ291bnRlcigwKSwgYWN0dWFsX21sZV9tZXNzYWdlLmNvbW1hbmQudGx2c1sxXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZS5NbGVGcmFtZUNvdW50ZXIoMSksIGFjdHVhbF9tbGVfbWVzc2FnZS5jb21tYW5kLnRsdnNbMl0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuTW9kZShyZWNlaXZlcj0xLCBzZWN1cmU9MSwgZGV2aWNlX3R5cGU9MCwgbmV0d29ya19kYXRhPTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9tbGVfbWVzc2FnZS5jb21tYW5kLnRsdnNbM10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuVGltZW91dCgyNDApLCBhY3R1YWxfbWxlX21lc3NhZ2UuY29tbWFuZC50bHZzWzRdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLlZlcnNpb24oMiksIGFjdHVhbF9tbGVfbWVzc2FnZS5jb21tYW5kLnRsdnNbNV0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuQWRkcmVzc1JlZ2lzdHJhdGlvbihhZGRyZXNzZXM9WworICAgICAgICAgICAgbWxlLkFkZHJlc3NDb21wcmVzc2VkKGNpZD0wLCBpaWQ9Ynl0ZWFycmF5KFsweDg2LCAweGEyLCAweDFiLCAweDgxLCAweDZkLCAweGI4LCAweGI1LCAweGU4XSkpXSksCisgICAgICAgICAgICBhY3R1YWxfbWxlX21lc3NhZ2UuY29tbWFuZC50bHZzWzZdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLlRsdlJlcXVlc3QodGx2cz1bMTAsIDEyLCA5XSksIGFjdHVhbF9tbGVfbWVzc2FnZS5jb21tYW5kLnRsdnNbN10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoZGF0YVstNDpdKSwgYWN0dWFsX21sZV9tZXNzYWdlLm1pYykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTWxlTWVzc2FnZVNlY3VyZWRfd2l0aF9NTEVfRGF0YV9SZXNwb25zZV9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9pcHY2ID0gImZlODA6OjI0MWM6YjExYjo3YjYyOmNhZjEiCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9pcHY2ID0gImZmMDI6OjEiCisKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MjYsIDB4MWMsIDB4YjEsIDB4MWIsIDB4N2IsIDB4NjIsIDB4Y2EsIDB4ZjFdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzYSwgMHhiYSwgMHhhZCwgMHhjYSwgMHhmZSwgMHhkZSwgMHhmZiwgMHhhNV0pKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWzB4MDAsIDB4MTUsIDB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDEsIDB4Y2EsIDB4ZDMsIDB4NDUsIDB4ZTIsIDB4MzUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWQsIDB4MDAsIDB4MmQsIDB4NzIsIDB4NzEsIDB4YjEsIDB4MTksIDB4YWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGIsIDB4MDUsIDB4ZDksIDB4NTIsIDB4NzQsIDB4Y2UsIDB4ZTYsIDB4MzYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTMsIDB4ZWIsIDB4YzYsIDB4MjUsIDB4OTQsIDB4MDEsIDB4NmQsIDB4MjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZGYsIDB4MzAsIDB4ODIsIDB4ZjgsIDB4YmIsIDB4MzQsIDB4NDcsIDB4NDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAsIDB4ZTksIDB4NDEsIDB4YTcsIDB4MzMsIDB4YTVdKQorCisgICAgICAgIGZhY3RvcnkgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfbWxlX21lc3NhZ2VfZmFjdG9yeShtYXN0ZXJfa2V5PWNvbmZpZy5ERUZBVUxUX01BU1RFUl9LRVkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9tbGVfbWVzc2FnZSA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfbWxlX21lc3NhZ2UsIG1sZS5NbGVNZXNzYWdlU2VjdXJlZCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg4LCBhY3R1YWxfbWxlX21lc3NhZ2UuY29tbWFuZC50eXBlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLlNvdXJjZUFkZHJlc3MoYWRkcmVzcz0weDk0MDApLCBhY3R1YWxfbWxlX21lc3NhZ2UuY29tbWFuZC50bHZzWzBdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLkxlYWRlckRhdGEoCisgICAgICAgICAgICBwYXJ0aXRpb25faWQ9MHgwNmQwMTRjYSwKKyAgICAgICAgICAgIHdlaWdodGluZz02NCwKKyAgICAgICAgICAgIGRhdGFfdmVyc2lvbj0xMzEsCisgICAgICAgICAgICBzdGFibGVfZGF0YV92ZXJzaW9uPTE2OCwKKyAgICAgICAgICAgIGxlYWRlcl9yb3V0ZXJfaWQ9MzcKKyAgICAgICAgKSwgYWN0dWFsX21sZV9tZXNzYWdlLmNvbW1hbmQudGx2c1sxXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZS5OZXR3b3JrRGF0YSh0bHZzPVsKKyAgICAgICAgICAgIG5ldHdvcmtfZGF0YS5QcmVmaXgoCisgICAgICAgICAgICAgICAgZG9tYWluX2lkPTAsCisgICAgICAgICAgICAgICAgcHJlZml4X2xlbmd0aD02NCwKKyAgICAgICAgICAgICAgICBwcmVmaXg9Ynl0ZWFycmF5KFsweDEyLCAweDM0LCAweDEyLCAweDM0LCAweDEyLCAweDM0LCAweDEyLCAweDM0XSksCisgICAgICAgICAgICAgICAgc3ViX3RsdnM9WworICAgICAgICAgICAgICAgICAgICBuZXR3b3JrX2RhdGEuTG93cGFuSWQoYz0xLCBjaWQ9MSwgY29udGV4dF9sZW5ndGg9NjQsIHN0YWJsZT0xKSwKKyAgICAgICAgICAgICAgICAgICAgbmV0d29ya19kYXRhLkJvcmRlclJvdXRlcihib3JkZXJfcm91dGVyXzE2PTM3ODg4LCBwcmY9MCwgcD0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM9MSwgZD0wLCBjPTAsIHI9MSwgbz0xLCBuPTAsIHN0YWJsZT0xKQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgc3RhYmxlPTEKKyAgICAgICAgICAgICkKKyAgICAgICAgXSksIGFjdHVhbF9tbGVfbWVzc2FnZS5jb21tYW5kLnRsdnNbMl0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoZGF0YVstNDpdKSwgYWN0dWFsX21sZV9tZXNzYWdlLm1pYykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X25ldHdvcmtfZGF0YS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9uZXR3b3JrX2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2M0MzczMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9uZXR3b3JrX2RhdGEucHkKQEAgLTAsMCArMSw5NjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgaW8KK2ltcG9ydCBtYXRoCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RydWN0CitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbW1vbgoraW1wb3J0IGNvbmZpZworaW1wb3J0IG5ldHdvcmtfZGF0YQorCisKK2RlZiBjb252ZXJ0X3JvdXRlX3RvX2J5dGVhcnJheShyb3V0ZSk6CisgICAgcmV0dXJuIHN0cnVjdC5wYWNrKCI+SEIiLCByb3V0ZS5ib3JkZXJfcm91dGVyXzE2LCAoKHJvdXRlLnByZiAmIDB4MDMpIDw8IDYpKQorCisKK2RlZiBjb252ZXJ0X3JvdXRlc190b19ieXRlYXJyYXkocm91dGVzKToKKyAgICBkYXRhID0gYnl0ZWFycmF5KCkKKyAgICBmb3Igcm91dGUgaW4gcm91dGVzOgorICAgICAgICBkYXRhICs9IGNvbnZlcnRfcm91dGVfdG9fYnl0ZWFycmF5KHJvdXRlKQorCisgICAgcmV0dXJuIGRhdGEKKworCitkZWYgY29udmVydF9oYXNfcm91dGVfdG9fYnl0ZWFycmF5KGhhc19yb3V0ZSk6CisgICAgcmV0dXJuIGNvbnZlcnRfcm91dGVzX3RvX2J5dGVhcnJheShoYXNfcm91dGUucm91dGVzKQorCisKK2RlZiBjb252ZXJ0X2JvcmRlcl9yb3V0ZXJfdG9fYnl0ZWFycmF5KGJvcmRlcl9yb3V0ZXIpOgorICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygiPkhCQiIsIGJvcmRlcl9yb3V0ZXIuYm9yZGVyX3JvdXRlcl8xNiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGJvcmRlcl9yb3V0ZXIubyAmIDB4MDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgKChib3JkZXJfcm91dGVyLnIgJiAweDAxKSA8PCAxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICgoYm9yZGVyX3JvdXRlci5jICYgMHgwMSkgPDwgMikgfAorICAgICAgICAgICAgICAgICAgICAgICAoKGJvcmRlcl9yb3V0ZXIuZCAmIDB4MDEpIDw8IDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgKChib3JkZXJfcm91dGVyLnMgJiAweDAxKSA8PCA0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICgoYm9yZGVyX3JvdXRlci5wICYgMHgwMSkgPDwgNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAoKGJvcmRlcl9yb3V0ZXIucHJmICYgMHgwMykgPDwgNiksCisgICAgICAgICAgICAgICAgICAgICAgICgoYm9yZGVyX3JvdXRlci5uICYgMHgwMSkgPDwgNykpCisKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBjb252ZXJ0X2xvd3Bhbl9pZF90b19ieXRlYXJyYXkobG93cGFuX2lkKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtsb3dwYW5faWQuY2lkIHwgKGxvd3Bhbl9pZC5jIDw8IDQpLCBsb3dwYW5faWQuY29udGV4dF9sZW5ndGhdKQorCisKK2RlZiBjb252ZXJ0X3ByZWZpeF9zdWJfdGx2c190b19ieXRlYXJyYXkoc3ViX3RsdnMpOgorICAgIGRhdGEgPSBieXRlYXJyYXkoKQorCisgICAgZm9yIHN1Yl90bHYgaW4gc3ViX3RsdnM6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3ViX3RsdiwgbmV0d29ya19kYXRhLkhhc1JvdXRlKToKKyAgICAgICAgICAgIHZhbHVlID0gY29udmVydF9oYXNfcm91dGVfdG9fYnl0ZWFycmF5KHN1Yl90bHYpCisgICAgICAgICAgICBfdHlwZSA9IHN1Yl90bHYuc3RhYmxlIHwgKCgwICYgMHg3ZikgPDwgMSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc3ViX3RsdiwgbmV0d29ya19kYXRhLkJvcmRlclJvdXRlcik6CisgICAgICAgICAgICB2YWx1ZSA9IGNvbnZlcnRfYm9yZGVyX3JvdXRlcl90b19ieXRlYXJyYXkoc3ViX3RsdikKKyAgICAgICAgICAgIF90eXBlID0gc3ViX3Rsdi5zdGFibGUgfCAoKDIgJiAweDdmKSA8PCAxKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzdWJfdGx2LCBuZXR3b3JrX2RhdGEuTG93cGFuSWQpOgorICAgICAgICAgICAgdmFsdWUgPSBjb252ZXJ0X2xvd3Bhbl9pZF90b19ieXRlYXJyYXkoc3ViX3RsdikKKyAgICAgICAgICAgIF90eXBlID0gc3ViX3Rsdi5zdGFibGUgfCAoKDMgJiAweDdmKSA8PCAxKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisKKyAgICAgICAgZGF0YSArPSBieXRlYXJyYXkoW190eXBlLCBsZW4odmFsdWUpXSkgKyB2YWx1ZQorCisgICAgcmV0dXJuIGRhdGEKKworCitkZWYgY29udmVydF9zZXJ2ZXJfdG9fYnl0ZWFycmF5KHNlcnZlcik6CisgICAgcmV0dXJuIHN0cnVjdC5wYWNrKCI+SCIsIHNlcnZlci5zZXJ2ZXJfMTYpICsgc2VydmVyLnNlcnZlcl9kYXRhCisKKworZGVmIGNvbnZlcnRfc2VydmljZV9zdWJfdGx2c190b19ieXRlYXJyYXkoc3ViX3RsdnMpOgorICAgIGRhdGEgPSBieXRlYXJyYXkoKQorCisgICAgZm9yIHN1Yl90bHYgaW4gc3ViX3RsdnM6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3ViX3RsdiwgbmV0d29ya19kYXRhLlNlcnZlcik6CisgICAgICAgICAgICB2YWx1ZSA9IGNvbnZlcnRfc2VydmVyX3RvX2J5dGVhcnJheShzdWJfdGx2KQorICAgICAgICAgICAgX3R5cGUgPSBzdWJfdGx2LnN0YWJsZSB8ICgoNiAmIDB4N2YpIDw8IDEpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKworICAgICAgICBkYXRhICs9IGJ5dGVhcnJheShbX3R5cGUsIGxlbih2YWx1ZSldKSArIHZhbHVlCisKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBjb252ZXJ0X3NlcnZpY2VfdG9fYnl0ZWFycmF5KHNlcnZpY2UpOgorICAgIHJldHVybiBzdHJ1Y3QucGFjaygiPkJMQiIsICgoc2VydmljZS50ICYgMHgwMSkgPDwgNykgfCAoKHNlcnZpY2UuaWQpICYgMHgwZiksCisgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuZW50ZXJwcmlzZV9udW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2Uuc2VydmljZV9kYXRhX2xlbmd0aCkgKyBcCisgICAgICAgIHNlcnZpY2Uuc2VydmljZV9kYXRhICsgXAorICAgICAgICBjb252ZXJ0X3NlcnZpY2Vfc3ViX3RsdnNfdG9fYnl0ZWFycmF5KHNlcnZpY2Uuc3ViX3RsdnMpCisKKworZGVmIGFueV9ib3JkZXJfcm91dGVyXzE2KCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxNikKKworCitkZWYgYW55X3ByZigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMikKKworCitkZWYgYW55X3JvdXRlKCk6CisgICAgcmV0dXJuIG5ldHdvcmtfZGF0YS5Sb3V0ZShhbnlfYm9yZGVyX3JvdXRlcl8xNigpLCBhbnlfcHJmKCkpCisKKworZGVmIGFueV9yb3V0ZXMoY291bnQ9Tm9uZSk6CisgICAgaWYgY291bnQgaXMgTm9uZToKKyAgICAgICAgY291bnQgPSByYW5kb20ucmFuZGludCgwLCAxNikKKworICAgIHJldHVybiBbYW55X3JvdXRlKCkgZm9yIF8gaW4gcmFuZ2UoNildCisKKworZGVmIGFueV9oYXNfcm91dGUoKToKKyAgICByZXR1cm4gbmV0d29ya19kYXRhLkhhc1JvdXRlKGFueV9yb3V0ZXMoKSwgYW55X3N0YWJsZSgpKQorCisKK2RlZiBhbnlfZG9tYWluX2lkKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfcHJlZml4X2xlbmd0aCgpOgorICAgIHJldHVybiByYW5kb20ucmFuZGludCgxLCAxNikKKworCitkZWYgYW55X3ByZWZpeChwcmVmaXhfbGVuZ3RoPU5vbmUpOgorICAgIGlmIHByZWZpeF9sZW5ndGggaXMgTm9uZToKKyAgICAgICAgcHJlZml4X2xlbmd0aCA9IGFueV9wcmVmaXhfbGVuZ3RoKCkKKworICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShpbnQobWF0aC5jZWlsKHByZWZpeF9sZW5ndGggLyA4KSkpXSkKKworCitkZWYgYW55X3AoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9zKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfZCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X2MoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9yKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfbygpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X24oKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9jaWQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDQpCisKKworZGVmIGFueV9jb250ZXh0X2xlbmd0aCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X2JvcmRlcl9yb3V0ZXIoKToKKyAgICByZXR1cm4gbmV0d29ya19kYXRhLkJvcmRlclJvdXRlcihhbnlfYm9yZGVyX3JvdXRlcl8xNigpLCBhbnlfcHJmKCksIGFueV9wKCksIGFueV9zKCksIGFueV9kKCksIGFueV9jKCksIGFueV9yKCksIGFueV9vKCksIGFueV9uKCksIGFueV9zdGFibGUoKSkKKworCitkZWYgYW55X2xvd3Bhbl9pZCgpOgorICAgIHJldHVybiBuZXR3b3JrX2RhdGEuTG93cGFuSWQoYW55X2MoKSwgYW55X2NpZCgpLCBhbnlfY29udGV4dF9sZW5ndGgoKSwgYW55X3N0YWJsZSgpKQorCisKK2RlZiBhbnlfcHJlZml4X3N1Yl90bHZzKCk6CisgICAgY3JlYXRvciA9IFsKKyAgICAgICAgYW55X2hhc19yb3V0ZSwKKyAgICAgICAgYW55X2JvcmRlcl9yb3V0ZXIsCisgICAgICAgIGFueV9sb3dwYW5faWQKKyAgICBdCisKKyAgICBzdWJfdGx2cyA9IFtdCisKKyAgICBmb3IgX2lkIGluIHJhbmdlKHJhbmRvbS5yYW5kaW50KDEsIDEpKToKKyAgICAgICAgYyA9IHJhbmRvbS5jaG9pY2UoY3JlYXRvcikKKyAgICAgICAgc3ViX3RsdnMuYXBwZW5kKGMoKSkKKworICAgIHJldHVybiBzdWJfdGx2cworCisKK2RlZiBhbnlfdCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X2lkKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg0KQorCisKK2RlZiBhbnlfZW50ZXJwcmlzZV9udW1iZXIoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDMyKQorCisKK2RlZiBhbnlfc2VydmljZV9kYXRhX2xlbmd0aCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X3NlcnZpY2VfZGF0YShkYXRhX2xlbmd0aD1Ob25lKToKKyAgICBpZiBkYXRhX2xlbmd0aCBpcyBOb25lOgorICAgICAgICBkYXRhX2xlbmd0aCA9IHJhbmRvbS5yYW5kaW50KDAsIDE2KQorCisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGRhdGFfbGVuZ3RoKV0pCisKKworZGVmIGFueV9zZXJ2ZXJfMTYoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE2KQorCisKK2RlZiBhbnlfc2VydmVyX2RhdGEoZGF0YV9sZW5ndGg9Tm9uZSk6CisgICAgaWYgZGF0YV9sZW5ndGggaXMgTm9uZToKKyAgICAgICAgZGF0YV9sZW5ndGggPSByYW5kb20ucmFuZGludCgwLCAzMikKKworICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShkYXRhX2xlbmd0aCldKQorCisKK2RlZiBhbnlfc2VydmVyKCk6CisgICAgcmV0dXJuIG5ldHdvcmtfZGF0YS5TZXJ2ZXIoYW55X3NlcnZlcl8xNigpLCBhbnlfc2VydmVyX2RhdGEoKSwgYW55X3N0YWJsZSgpKQorCisKK2RlZiBhbnlfc2VydmljZV9zdWJfdGx2cygpOgorICAgIGNyZWF0b3IgPSBbCisgICAgICAgIGFueV9zZXJ2ZXIKKyAgICBdCisKKyAgICBzdWJfdGx2cyA9IFtdCisKKyAgICBmb3IgX2lkIGluIHJhbmdlKHJhbmRvbS5yYW5kaW50KDAsIDE2KSk6CisgICAgICAgIGMgPSByYW5kb20uY2hvaWNlKGNyZWF0b3IpCisgICAgICAgIHN1Yl90bHZzLmFwcGVuZChjKCkpCisKKyAgICByZXR1cm4gc3ViX3RsdnMKKworCitkZWYgYW55X3N0YWJsZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitjbGFzcyBUZXN0Um91dGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9ib3JkZXJfcm91dGVyXzE2X3ZhbHVlX3doZW5fYm9yZGVyX3JvdXRlcl8xNl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYm9yZGVyX3JvdXRlcl8xNiA9IGFueV9ib3JkZXJfcm91dGVyXzE2KCkKKworICAgICAgICByb3V0ZSA9IG5ldHdvcmtfZGF0YS5Sb3V0ZShib3JkZXJfcm91dGVyXzE2LCBhbnlfcHJmKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9ib3JkZXJfcm91dGVyXzE2ID0gcm91dGUuYm9yZGVyX3JvdXRlcl8xNgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvcmRlcl9yb3V0ZXJfMTYsIGFjdHVhbF9ib3JkZXJfcm91dGVyXzE2KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9wcmZfdmFsdWVfd2hlbl9wcmZfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHByZiA9IGFueV9wcmYoKQorCisgICAgICAgIHJvdXRlID0gbmV0d29ya19kYXRhLlJvdXRlKGFueV9ib3JkZXJfcm91dGVyXzE2KCksIHByZikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3ByZiA9IHJvdXRlLnByZgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByZiwgYWN0dWFsX3ByZikKKworCitjbGFzcyBUZXN0Um91dGVGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfUm91dGVfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGJvcmRlcl9yb3V0ZXJfMTYgPSBhbnlfYm9yZGVyX3JvdXRlcl8xNigpCisgICAgICAgIHByZiA9IGFueV9wcmYoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2RhdGEuUm91dGVGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gY29udmVydF9yb3V0ZV90b19ieXRlYXJyYXkobmV0d29ya19kYXRhLlJvdXRlKGJvcmRlcl9yb3V0ZXJfMTYsIHByZikpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9yb3V0ZSA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgTm9uZSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3JvdXRlLCBuZXR3b3JrX2RhdGEuUm91dGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvcmRlcl9yb3V0ZXJfMTYsIGFjdHVhbF9yb3V0ZS5ib3JkZXJfcm91dGVyXzE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByZiwgYWN0dWFsX3JvdXRlLnByZikKKworCitjbGFzcyBUZXN0Um91dGVzRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1JvdXRlX2xpc3RfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHJvdXRlcyA9IGFueV9yb3V0ZXMoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2RhdGEuUm91dGVzRmFjdG9yeShuZXR3b3JrX2RhdGEuUm91dGVGYWN0b3J5KCkpCisKKyAgICAgICAgZGF0YSA9IGNvbnZlcnRfcm91dGVzX3RvX2J5dGVhcnJheShyb3V0ZXMpCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcm91dGVzID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBOb25lKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfcm91dGVzLCBsaXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3V0ZXMsIGFjdHVhbF9yb3V0ZXMpCisKKworY2xhc3MgVGVzdEhhc1JvdXRlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcm91dGVzX3ZhbHVlX3doZW5fcm91dGVzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICByb3V0ZXMgPSBhbnlfcm91dGVzKCkKKworICAgICAgICBoYXNfcm91dGUgPSBuZXR3b3JrX2RhdGEuSGFzUm91dGUocm91dGVzLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9yb3V0ZXMgPSBoYXNfcm91dGUucm91dGVzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91dGVzLCBhY3R1YWxfcm91dGVzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zdGFibGVfdmFsdWVfd2hlbl9zdGFibGVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHN0YWJsZSA9IGFueV9zdGFibGUoKQorCisgICAgICAgIGhhc19yb3V0ZSA9IG5ldHdvcmtfZGF0YS5IYXNSb3V0ZShhbnlfcm91dGVzKCksIHN0YWJsZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3N0YWJsZSA9IGhhc19yb3V0ZS5zdGFibGUKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFibGUsIGFjdHVhbF9zdGFibGUpCisKKworY2xhc3MgVGVzdEhhc1JvdXRlRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0hhc1JvdXRlX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICByb3V0ZXMgPSBhbnlfcm91dGVzKCkKKyAgICAgICAgc3RhYmxlID0gYW55X3N0YWJsZSgpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfZGF0YS5IYXNSb3V0ZUZhY3RvcnkobmV0d29ya19kYXRhLlJvdXRlc0ZhY3RvcnkobmV0d29ya19kYXRhLlJvdXRlRmFjdG9yeSgpKSkKKworICAgICAgICBkYXRhID0gY29udmVydF9yb3V0ZXNfdG9fYnl0ZWFycmF5KHJvdXRlcykKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc3RhYmxlID0gc3RhYmxlCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9oYXNfcm91dGUgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX2hhc19yb3V0ZSwgbmV0d29ya19kYXRhLkhhc1JvdXRlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3V0ZXMsIGFjdHVhbF9oYXNfcm91dGUucm91dGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YWJsZSwgYWN0dWFsX2hhc19yb3V0ZS5zdGFibGUpCisKKworY2xhc3MgVGVzdFByZWZpeCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2RvbWFpbl9pZF92YWx1ZV93aGVuX2RvbWFpbl9pZF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZG9tYWluX2lkID0gYW55X2RvbWFpbl9pZCgpCisKKyAgICAgICAgcHJlZml4ID0gbmV0d29ya19kYXRhLlByZWZpeChkb21haW5faWQsIGFueV9wcmVmaXhfbGVuZ3RoKCksIGFueV9wcmVmaXgoKSwgYW55X3ByZWZpeF9zdWJfdGx2cygpLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kb21haW5faWQgPSBwcmVmaXguZG9tYWluX2lkCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9tYWluX2lkLCBhY3R1YWxfZG9tYWluX2lkKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9wcmVmaXhfbGVuZ3RoX3ZhbHVlX3doZW5fcHJlZml4X2xlbmd0aF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcHJlZml4X2xlbmd0aCA9IGFueV9wcmVmaXhfbGVuZ3RoKCkKKworICAgICAgICBwcmVmaXggPSBuZXR3b3JrX2RhdGEuUHJlZml4KGFueV9kb21haW5faWQoKSwgcHJlZml4X2xlbmd0aCwgYW55X3ByZWZpeCgpLCBhbnlfcHJlZml4X3N1Yl90bHZzKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3ByZWZpeF9sZW5ndGggPSBwcmVmaXgucHJlZml4X2xlbmd0aAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByZWZpeF9sZW5ndGgsIGFjdHVhbF9wcmVmaXhfbGVuZ3RoKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9wcmVmaXhfdmFsdWVfd2hlbl9wcmVmaXhfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHByZWZpeCA9IGFueV9wcmVmaXgoKQorCisgICAgICAgIHByZWZpeF9vYmogPSBuZXR3b3JrX2RhdGEuUHJlZml4KGFueV9kb21haW5faWQoKSwgYW55X3ByZWZpeF9sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LCBhbnlfcHJlZml4X3N1Yl90bHZzKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3ByZWZpeCA9IHByZWZpeF9vYmoucHJlZml4CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJlZml4LCBhY3R1YWxfcHJlZml4KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zdWJfdGx2c192YWx1ZV93aGVuX3N1Yl90bHZzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdWJfdGx2cyA9IGFueV9wcmVmaXhfc3ViX3RsdnMoKQorCisgICAgICAgIHByZWZpeF9vYmogPSBuZXR3b3JrX2RhdGEuUHJlZml4KGFueV9kb21haW5faWQoKSwgYW55X3ByZWZpeF9sZW5ndGgoKSwgYW55X3ByZWZpeCgpLCBzdWJfdGx2cywgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3ViX3RsdnMgPSBwcmVmaXhfb2JqLnN1Yl90bHZzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX3RsdnMsIGFjdHVhbF9zdWJfdGx2cykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc3RhYmxlX3ZhbHVlX3doZW5fc3RhYmxlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdGFibGUgPSBhbnlfc3RhYmxlKCkKKworICAgICAgICBwcmVmaXhfb2JqID0gbmV0d29ya19kYXRhLlByZWZpeChhbnlfZG9tYWluX2lkKCksIGFueV9wcmVmaXhfbGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9wcmVmaXgoKSwgYW55X3ByZWZpeF9zdWJfdGx2cygpLCBzdGFibGUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zdGFibGUgPSBwcmVmaXhfb2JqLnN0YWJsZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YWJsZSwgYWN0dWFsX3N0YWJsZSkKKworCitjbGFzcyBUZXN0UHJlZml4U3ViVGx2c0ZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9TdWJUbHZzX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdWJfdGx2cyA9IGFueV9wcmVmaXhfc3ViX3RsdnMoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2RhdGEuUHJlZml4U3ViVGx2c0ZhY3RvcnkoY29uZmlnLmNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV9wcmVmaXhfc3ViX3RsdnNfZmFjdG9yaWVzKCkpCisKKyAgICAgICAgZGF0YSA9IGNvbnZlcnRfcHJlZml4X3N1Yl90bHZzX3RvX2J5dGVhcnJheShzdWJfdGx2cykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3N1Yl90bHZzID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBjb21tb24uTWVzc2FnZUluZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3N1Yl90bHZzLCBsaXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJfdGx2cywgYWN0dWFsX3N1Yl90bHZzKQorCisKK2NsYXNzIFRlc3RQcmVmaXhGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfUHJlZml4X2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkb21haW5faWQgPSBhbnlfZG9tYWluX2lkKCkKKyAgICAgICAgcHJlZml4X2xlbmd0aCA9IGFueV9wcmVmaXhfbGVuZ3RoKCkKKyAgICAgICAgcHJlZml4ID0gYW55X3ByZWZpeChwcmVmaXhfbGVuZ3RoKQorICAgICAgICBzdWJfdGx2cyA9IGFueV9wcmVmaXhfc3ViX3RsdnMoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2RhdGEuUHJlZml4RmFjdG9yeShjb25maWcuY3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3ByZWZpeF9zdWJfdGx2c19mYWN0b3J5KCkpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbZG9tYWluX2lkLCBwcmVmaXhfbGVuZ3RoXSkgKyBwcmVmaXggKyBjb252ZXJ0X3ByZWZpeF9zdWJfdGx2c190b19ieXRlYXJyYXkoc3ViX3RsdnMpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3ByZWZpeCA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfcHJlZml4LCBuZXR3b3JrX2RhdGEuUHJlZml4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb21haW5faWQsIGFjdHVhbF9wcmVmaXguZG9tYWluX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByZWZpeF9sZW5ndGgsIGFjdHVhbF9wcmVmaXgucHJlZml4X2xlbmd0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcmVmaXgsIGFjdHVhbF9wcmVmaXgucHJlZml4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl90bHZzLCBhY3R1YWxfcHJlZml4LnN1Yl90bHZzKQorCisKK2NsYXNzIFRlc3RCb3JkZXJSb3V0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9ib3JkZXJfcm91dGVyXzE2X3ZhbHVlX3doZW5fYm9yZGVyX3JvdXRlcl8xNl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYm9yZGVyX3JvdXRlcl8xNiA9IGFueV9ib3JkZXJfcm91dGVyXzE2KCkKKworICAgICAgICBib3JkZXJfcm91dGVyID0gbmV0d29ya19kYXRhLkJvcmRlclJvdXRlcihib3JkZXJfcm91dGVyXzE2LCBhbnlfcHJmKAorICAgICAgICApLCBhbnlfcCgpLCBhbnlfcygpLCBhbnlfZCgpLCBhbnlfYygpLCBhbnlfcigpLCBhbnlfbygpLCBhbnlfbigpLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9ib3JkZXJfcm91dGVyXzE2ID0gYm9yZGVyX3JvdXRlci5ib3JkZXJfcm91dGVyXzE2CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9yZGVyX3JvdXRlcl8xNiwgYWN0dWFsX2JvcmRlcl9yb3V0ZXJfMTYpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3ByZl92YWx1ZV93aGVuX3ByZl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcHJmID0gYW55X3ByZigpCisKKyAgICAgICAgYm9yZGVyX3JvdXRlciA9IG5ldHdvcmtfZGF0YS5Cb3JkZXJSb3V0ZXIoYW55X2JvcmRlcl9yb3V0ZXJfMTYoCisgICAgICAgICksIHByZiwgYW55X3AoKSwgYW55X3MoKSwgYW55X2QoKSwgYW55X2MoKSwgYW55X3IoKSwgYW55X28oKSwgYW55X24oKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcHJmID0gYm9yZGVyX3JvdXRlci5wcmYKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcmYsIGFjdHVhbF9wcmYpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3BfdmFsdWVfd2hlbl9wX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBwID0gYW55X3AoKQorCisgICAgICAgIGJvcmRlcl9yb3V0ZXIgPSBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKGFueV9ib3JkZXJfcm91dGVyXzE2KCksIGFueV9wcmYoCisgICAgICAgICksIHAsIGFueV9zKCksIGFueV9kKCksIGFueV9jKCksIGFueV9yKCksIGFueV9vKCksIGFueV9uKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3AgPSBib3JkZXJfcm91dGVyLnAKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBhY3R1YWxfcCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc192YWx1ZV93aGVuX3NfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHMgPSBhbnlfcygpCisKKyAgICAgICAgYm9yZGVyX3JvdXRlciA9IG5ldHdvcmtfZGF0YS5Cb3JkZXJSb3V0ZXIoYW55X2JvcmRlcl9yb3V0ZXJfMTYoKSwgYW55X3ByZigKKyAgICAgICAgKSwgYW55X3AoKSwgcywgYW55X2QoKSwgYW55X2MoKSwgYW55X3IoKSwgYW55X28oKSwgYW55X24oKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcyA9IGJvcmRlcl9yb3V0ZXIucworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGFjdHVhbF9zKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9kX3ZhbHVlX3doZW5fZF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZCA9IGFueV9kKCkKKworICAgICAgICBib3JkZXJfcm91dGVyID0gbmV0d29ya19kYXRhLkJvcmRlclJvdXRlcihhbnlfYm9yZGVyX3JvdXRlcl8xNigpLCBhbnlfcHJmKAorICAgICAgICApLCBhbnlfcCgpLCBhbnlfcygpLCBkLCBhbnlfYygpLCBhbnlfcigpLCBhbnlfbygpLCBhbnlfbigpLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kID0gYm9yZGVyX3JvdXRlci5kCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgYWN0dWFsX2QpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2NfdmFsdWVfd2hlbl9jX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjID0gYW55X2MoKQorCisgICAgICAgIGJvcmRlcl9yb3V0ZXIgPSBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKGFueV9ib3JkZXJfcm91dGVyXzE2KCksIGFueV9wcmYoCisgICAgICAgICksIGFueV9wKCksIGFueV9zKCksIGFueV9kKCksIGMsIGFueV9yKCksIGFueV9vKCksIGFueV9uKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2MgPSBib3JkZXJfcm91dGVyLmMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBhY3R1YWxfYykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcl92YWx1ZV93aGVuX3JfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHIgPSBhbnlfcigpCisKKyAgICAgICAgYm9yZGVyX3JvdXRlciA9IG5ldHdvcmtfZGF0YS5Cb3JkZXJSb3V0ZXIoYW55X2JvcmRlcl9yb3V0ZXJfMTYoKSwgYW55X3ByZigKKyAgICAgICAgKSwgYW55X3AoKSwgYW55X3MoKSwgYW55X2QoKSwgYW55X2MoKSwgciwgYW55X28oKSwgYW55X24oKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfciA9IGJvcmRlcl9yb3V0ZXIucgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIGFjdHVhbF9yKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9vX3ZhbHVlX3doZW5fb19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbyA9IGFueV9vKCkKKworICAgICAgICBib3JkZXJfcm91dGVyID0gbmV0d29ya19kYXRhLkJvcmRlclJvdXRlcihhbnlfYm9yZGVyX3JvdXRlcl8xNigpLCBhbnlfcHJmKAorICAgICAgICApLCBhbnlfcCgpLCBhbnlfcygpLCBhbnlfZCgpLCBhbnlfYygpLCBhbnlfcigpLCBvLCBhbnlfbigpLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9vID0gYm9yZGVyX3JvdXRlci5vCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobywgYWN0dWFsX28pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX25fdmFsdWVfd2hlbl9uX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBuID0gYW55X24oKQorCisgICAgICAgIGJvcmRlcl9yb3V0ZXIgPSBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKGFueV9ib3JkZXJfcm91dGVyXzE2KCksIGFueV9wcmYoCisgICAgICAgICksIGFueV9wKCksIGFueV9zKCksIGFueV9kKCksIGFueV9jKCksIGFueV9yKCksIGFueV9vKCksIG4sIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX24gPSBib3JkZXJfcm91dGVyLm4KKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCBhY3R1YWxfbikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc3RhYmxlX3ZhbHVlX3doZW5fc3RhYmxlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdGFibGUgPSBhbnlfc3RhYmxlKCkKKworICAgICAgICBib3JkZXJfcm91dGVyID0gbmV0d29ya19kYXRhLkJvcmRlclJvdXRlcihhbnlfYm9yZGVyX3JvdXRlcl8xNigpLCBhbnlfcHJmKAorICAgICAgICApLCBhbnlfcCgpLCBhbnlfcygpLCBhbnlfZCgpLCBhbnlfYygpLCBhbnlfcigpLCBhbnlfbygpLCBhbnlfbigpLCBzdGFibGUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zdGFibGUgPSBib3JkZXJfcm91dGVyLnN0YWJsZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YWJsZSwgYWN0dWFsX3N0YWJsZSkKKworCitjbGFzcyBUZXN0Qm9yZGVyUm91dGVyRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0JvcmRlclJvdXRlcl9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYm9yZGVyX3JvdXRlcl8xNiA9IGFueV9ib3JkZXJfcm91dGVyXzE2KCkKKyAgICAgICAgcHJmID0gYW55X3ByZigpCisgICAgICAgIHAgPSBhbnlfcCgpCisgICAgICAgIHMgPSBhbnlfcygpCisgICAgICAgIGQgPSBhbnlfZCgpCisgICAgICAgIGMgPSBhbnlfYygpCisgICAgICAgIHIgPSBhbnlfcigpCisgICAgICAgIG8gPSBhbnlfbygpCisgICAgICAgIG4gPSBhbnlfbigpCisgICAgICAgIHN0YWJsZSA9IGFueV9zdGFibGUoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGNvbnZlcnRfYm9yZGVyX3JvdXRlcl90b19ieXRlYXJyYXkoCisgICAgICAgICAgICBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKGJvcmRlcl9yb3V0ZXJfMTYsIHByZiwgcCwgcywgZCwgYywgciwgbywgbiwgc3RhYmxlKSkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc3RhYmxlID0gc3RhYmxlCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9ib3JkZXJfcm91dGVyID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9ib3JkZXJfcm91dGVyLCBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib3JkZXJfcm91dGVyXzE2LCBhY3R1YWxfYm9yZGVyX3JvdXRlci5ib3JkZXJfcm91dGVyXzE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByZiwgYWN0dWFsX2JvcmRlcl9yb3V0ZXIucHJmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIGFjdHVhbF9ib3JkZXJfcm91dGVyLnApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgYWN0dWFsX2JvcmRlcl9yb3V0ZXIucykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBhY3R1YWxfYm9yZGVyX3JvdXRlci5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGFjdHVhbF9ib3JkZXJfcm91dGVyLmMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgYWN0dWFsX2JvcmRlcl9yb3V0ZXIucikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLCBhY3R1YWxfYm9yZGVyX3JvdXRlci5vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGFjdHVhbF9ib3JkZXJfcm91dGVyLm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhYmxlLCBhY3R1YWxfYm9yZGVyX3JvdXRlci5zdGFibGUpCisKKworY2xhc3MgVGVzdExvd3BhbklkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fY192YWx1ZV93aGVuX2NfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGMgPSBhbnlfYygpCisKKyAgICAgICAgbG93cGFuX2lkID0gbmV0d29ya19kYXRhLkxvd3BhbklkKGMsIGFueV9jaWQoKSwgYW55X2NvbnRleHRfbGVuZ3RoKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2MgPSBsb3dwYW5faWQuYworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGFjdHVhbF9jKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9jaWRfdmFsdWVfd2hlbl9jaWRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNpZCA9IGFueV9jaWQoKQorCisgICAgICAgIGxvd3Bhbl9pZCA9IG5ldHdvcmtfZGF0YS5Mb3dwYW5JZChhbnlfYygpLCBjaWQsIGFueV9jb250ZXh0X2xlbmd0aCgpLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9jaWQgPSBsb3dwYW5faWQuY2lkCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2lkLCBhY3R1YWxfY2lkKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9jb250ZXh0X2xlbmd0aF92YWx1ZV93aGVuX2NvbnRleHRfbGVuZ3RoX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjb250ZXh0X2xlbmd0aCA9IGFueV9jb250ZXh0X2xlbmd0aCgpCisKKyAgICAgICAgbG93cGFuX2lkID0gbmV0d29ya19kYXRhLkxvd3BhbklkKGFueV9jKCksIGFueV9jaWQoKSwgY29udGV4dF9sZW5ndGgsIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NvbnRleHRfbGVuZ3RoID0gbG93cGFuX2lkLmNvbnRleHRfbGVuZ3RoCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGV4dF9sZW5ndGgsIGFjdHVhbF9jb250ZXh0X2xlbmd0aCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc3RhYmxlX3ZhbHVlX3doZW5fc3RhYmxlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdGFibGUgPSBhbnlfc3RhYmxlKCkKKworICAgICAgICBsb3dwYW5faWQgPSBuZXR3b3JrX2RhdGEuTG93cGFuSWQoYW55X2MoKSwgYW55X2NpZCgpLCBhbnlfY29udGV4dF9sZW5ndGgoKSwgc3RhYmxlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3RhYmxlID0gbG93cGFuX2lkLnN0YWJsZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YWJsZSwgYWN0dWFsX3N0YWJsZSkKKworCitjbGFzcyBUZXN0TG93cGFuSWRGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTG93cGFuSWRfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGMgPSBhbnlfYygpCisgICAgICAgIGNpZCA9IGFueV9jaWQoKQorICAgICAgICBjb250ZXh0X2xlbmd0aCA9IGFueV9jb250ZXh0X2xlbmd0aCgpCisgICAgICAgIHN0YWJsZSA9IGFueV9zdGFibGUoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2RhdGEuTG93cGFuSWRGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gY29udmVydF9sb3dwYW5faWRfdG9fYnl0ZWFycmF5KG5ldHdvcmtfZGF0YS5Mb3dwYW5JZChjLCBjaWQsIGNvbnRleHRfbGVuZ3RoLCBzdGFibGUpKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zdGFibGUgPSBzdGFibGUKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2xvd3Bhbl9pZCA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfbG93cGFuX2lkLCBuZXR3b3JrX2RhdGEuTG93cGFuSWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGFjdHVhbF9sb3dwYW5faWQuYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaWQsIGFjdHVhbF9sb3dwYW5faWQuY2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRleHRfbGVuZ3RoLCBhY3R1YWxfbG93cGFuX2lkLmNvbnRleHRfbGVuZ3RoKQorCisKK2NsYXNzIFRlc3RTZXJ2aWNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdF92YWx1ZV93aGVuX3RfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHQgPSBhbnlfdCgpCisKKyAgICAgICAgc2VydmljZSA9IG5ldHdvcmtfZGF0YS5TZXJ2aWNlKHQsIGFueV9pZCgpLCBhbnlfZW50ZXJwcmlzZV9udW1iZXIoKSwgYW55X3NlcnZpY2VfZGF0YV9sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZXJ2aWNlX2RhdGEoKSwgYW55X3NlcnZpY2Vfc3ViX3RsdnMoKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdCA9IHNlcnZpY2UudAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIGFjdHVhbF90KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9pZF92YWx1ZV93aGVuX2lkX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBfaWQgPSBhbnlfaWQoKQorCisgICAgICAgIHNlcnZpY2UgPSBuZXR3b3JrX2RhdGEuU2VydmljZShhbnlfdCgpLCBfaWQsIGFueV9lbnRlcnByaXNlX251bWJlcigpLCBhbnlfc2VydmljZV9kYXRhX2xlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlcnZpY2VfZGF0YSgpLCBhbnlfc2VydmljZV9zdWJfdGx2cygpLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pZCA9IHNlcnZpY2UuaWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfaWQsIGFjdHVhbF9pZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fZW50ZXJwcmlzZV9udW1iZXJfdmFsdWVfd2hlbl9lbnRlcnByaXNlX251bWJlcl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZW50ZXJwcmlzZV9udW1iZXIgPSBhbnlfZW50ZXJwcmlzZV9udW1iZXIoKQorCisgICAgICAgIHNlcnZpY2UgPSBuZXR3b3JrX2RhdGEuU2VydmljZShhbnlfdCgpLCBhbnlfaWQoKSwgZW50ZXJwcmlzZV9udW1iZXIsIGFueV9zZXJ2aWNlX2RhdGFfbGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VydmljZV9kYXRhKCksIGFueV9zZXJ2aWNlX3N1Yl90bHZzKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2VudGVycHJpc2VfbnVtYmVyID0gc2VydmljZS5lbnRlcnByaXNlX251bWJlcgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudGVycHJpc2VfbnVtYmVyLCBhY3R1YWxfZW50ZXJwcmlzZV9udW1iZXIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3NlcnZpY2VfZGF0YV9sZW5ndGhfdmFsdWVfd2hlbl9zZXJ2aWNlX2RhdGFfbGVuZ3RoX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzZXJ2aWNlX2RhdGFfbGVuZ3RoID0gYW55X3NlcnZpY2VfZGF0YV9sZW5ndGgoKQorCisgICAgICAgIHNlcnZpY2UgPSBuZXR3b3JrX2RhdGEuU2VydmljZShhbnlfdCgpLCBhbnlfaWQoKSwgYW55X2VudGVycHJpc2VfbnVtYmVyKCksIHNlcnZpY2VfZGF0YV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VydmljZV9kYXRhKCksIGFueV9zZXJ2aWNlX3N1Yl90bHZzKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NlcnZpY2VfZGF0YV9sZW5ndGggPSBzZXJ2aWNlLnNlcnZpY2VfZGF0YV9sZW5ndGgKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2aWNlX2RhdGFfbGVuZ3RoLCBhY3R1YWxfc2VydmljZV9kYXRhX2xlbmd0aCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc2VydmljZV9kYXRhX3ZhbHVlX3doZW5fc2VydmljZV9kYXRhX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzZXJ2aWNlX2RhdGEgPSBhbnlfc2VydmljZV9kYXRhKCkKKworICAgICAgICBzZXJ2aWNlID0gbmV0d29ya19kYXRhLlNlcnZpY2UoYW55X3QoKSwgYW55X2lkKCksIGFueV9lbnRlcnByaXNlX251bWJlcigpLCBhbnlfc2VydmljZV9kYXRhX2xlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZV9kYXRhLCBhbnlfc2VydmljZV9zdWJfdGx2cygpLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zZXJ2aWNlX2RhdGEgPSBzZXJ2aWNlLnNlcnZpY2VfZGF0YQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZpY2VfZGF0YSwgYWN0dWFsX3NlcnZpY2VfZGF0YSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc3ViX3RsdnNfdmFsdWVfd2hlbl9zdWJfdGx2c19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc3ViX3RsdnMgPSBhbnlfc2VydmljZV9zdWJfdGx2cygpCisKKyAgICAgICAgc2VydmljZSA9IG5ldHdvcmtfZGF0YS5TZXJ2aWNlKGFueV90KCksIGFueV9pZCgpLCBhbnlfZW50ZXJwcmlzZV9udW1iZXIoKSwgYW55X3NlcnZpY2VfZGF0YV9sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZXJ2aWNlX2RhdGEoKSwgc3ViX3RsdnMsIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3N1Yl90bHZzID0gc2VydmljZS5zdWJfdGx2cworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl90bHZzLCBhY3R1YWxfc3ViX3RsdnMpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3N0YWJsZV92YWx1ZV93aGVuX3N0YWJsZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc3RhYmxlID0gYW55X3N0YWJsZSgpCisKKyAgICAgICAgc2VydmljZSA9IG5ldHdvcmtfZGF0YS5TZXJ2aWNlKGFueV90KCksIGFueV9pZCgpLCBhbnlfZW50ZXJwcmlzZV9udW1iZXIoKSwgYW55X3NlcnZpY2VfZGF0YV9sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZXJ2aWNlX2RhdGEoKSwgYW55X3NlcnZpY2Vfc3ViX3RsdnMoKSwgc3RhYmxlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3RhYmxlID0gc2VydmljZS5zdGFibGUKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFibGUsIGFjdHVhbF9zdGFibGUpCisKKworY2xhc3MgVGVzdFNlcnZpY2VTdWJUbHZzRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1N1YlRsdnNfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHN1Yl90bHZzID0gYW55X3NlcnZpY2Vfc3ViX3RsdnMoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2RhdGEuU2VydmljZVN1YlRsdnNGYWN0b3J5KGNvbmZpZy5jcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfc2VydmljZV9zdWJfdGx2c19mYWN0b3JpZXMoKSkKKworICAgICAgICBkYXRhID0gY29udmVydF9zZXJ2aWNlX3N1Yl90bHZzX3RvX2J5dGVhcnJheShzdWJfdGx2cykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3N1Yl90bHZzID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBjb21tb24uTWVzc2FnZUluZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3N1Yl90bHZzLCBsaXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJfdGx2cywgYWN0dWFsX3N1Yl90bHZzKQorCisKK2NsYXNzIFRlc3RTZXJ2aWNlRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1NlcnZpY2VfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHQgPSBhbnlfdCgpCisgICAgICAgIF9pZCA9IGFueV9pZCgpCisgICAgICAgIGVudGVycHJpc2VfbnVtYmVyID0gYW55X2VudGVycHJpc2VfbnVtYmVyKCkKKyAgICAgICAgc2VydmljZV9kYXRhX2xlbmd0aCA9IGFueV9zZXJ2aWNlX2RhdGFfbGVuZ3RoKCkKKyAgICAgICAgc2VydmljZV9kYXRhID0gYW55X3NlcnZpY2VfZGF0YShzZXJ2aWNlX2RhdGFfbGVuZ3RoKQorICAgICAgICBzdWJfdGx2cyA9IGFueV9zZXJ2aWNlX3N1Yl90bHZzKCkKKyAgICAgICAgc3RhYmxlID0gYW55X3N0YWJsZSgpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfZGF0YS5TZXJ2aWNlRmFjdG9yeShjb25maWcuY3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3NlcnZpY2Vfc3ViX3RsdnNfZmFjdG9yeSgpKQorCisgICAgICAgIGRhdGEgPSBjb252ZXJ0X3NlcnZpY2VfdG9fYnl0ZWFycmF5KG5ldHdvcmtfZGF0YS5TZXJ2aWNlKAorICAgICAgICAgICAgdCwgX2lkLCBlbnRlcnByaXNlX251bWJlciwgc2VydmljZV9kYXRhX2xlbmd0aCwgc2VydmljZV9kYXRhLCBzdWJfdGx2cywgc3RhYmxlKSkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc3RhYmxlID0gc3RhYmxlCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zZXJ2aWNlID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9zZXJ2aWNlLCBuZXR3b3JrX2RhdGEuU2VydmljZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgYWN0dWFsX3NlcnZpY2UudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfaWQsIGFjdHVhbF9zZXJ2aWNlLmlkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudGVycHJpc2VfbnVtYmVyLCBhY3R1YWxfc2VydmljZS5lbnRlcnByaXNlX251bWJlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2aWNlX2RhdGFfbGVuZ3RoLCBhY3R1YWxfc2VydmljZS5zZXJ2aWNlX2RhdGFfbGVuZ3RoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZpY2VfZGF0YSwgYWN0dWFsX3NlcnZpY2Uuc2VydmljZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl90bHZzLCBhY3R1YWxfc2VydmljZS5zdWJfdGx2cykKKworCitjbGFzcyBUZXN0U2VydmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc2VydmVyXzE2X3ZhbHVlX3doZW5fc2VydmVyXzE2X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzZXJ2ZXJfMTYgPSBhbnlfc2VydmVyXzE2KCkKKworICAgICAgICBzZXJ2ZXIgPSBuZXR3b3JrX2RhdGEuU2VydmVyKHNlcnZlcl8xNiwgYW55X3NlcnZlcl9kYXRhKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NlcnZlcl8xNiA9IHNlcnZlci5zZXJ2ZXJfMTYKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfMTYsIGFjdHVhbF9zZXJ2ZXJfMTYpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3NlcnZlcl9kYXRhX3ZhbHVlX3doZW5fc2VydmVyX2RhdGFfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlcnZlcl9kYXRhID0gYW55X3NlcnZlcl9kYXRhKCkKKworICAgICAgICBzZXJ2ZXIgPSBuZXR3b3JrX2RhdGEuU2VydmVyKGFueV9zZXJ2ZXJfMTYoKSwgc2VydmVyX2RhdGEsIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NlcnZlcl9kYXRhID0gc2VydmVyLnNlcnZlcl9kYXRhCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyX2RhdGEsIGFjdHVhbF9zZXJ2ZXJfZGF0YSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc3RhYmxlX3ZhbHVlX3doZW5fc3RhYmxlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdGFibGUgPSBhbnlfc3RhYmxlKCkKKworICAgICAgICBzZXJ2ZXIgPSBuZXR3b3JrX2RhdGEuU2VydmVyKGFueV9zZXJ2ZXJfMTYoKSwgYW55X3NlcnZlcl9kYXRhKCksIHN0YWJsZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3N0YWJsZSA9IHNlcnZlci5zdGFibGUKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFibGUsIGFjdHVhbF9zdGFibGUpCisKKworY2xhc3MgVGVzdFNlcnZlckZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9TZXJ2ZXJfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlcnZlcl8xNiA9IGFueV9zZXJ2ZXJfMTYoKQorICAgICAgICBzZXJ2ZXJfZGF0YSA9IGFueV9zZXJ2ZXJfZGF0YSgpCisgICAgICAgIHN0YWJsZSA9IGFueV9zdGFibGUoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2RhdGEuU2VydmVyRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGNvbnZlcnRfc2VydmVyX3RvX2J5dGVhcnJheShuZXR3b3JrX2RhdGEuU2VydmVyKHNlcnZlcl8xNiwgc2VydmVyX2RhdGEsIHN0YWJsZSkpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnN0YWJsZSA9IHN0YWJsZQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc2VydmVyID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9zZXJ2ZXIsIG5ldHdvcmtfZGF0YS5TZXJ2ZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlcl8xNiwgYWN0dWFsX3NlcnZlci5zZXJ2ZXJfMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyX2RhdGEsIGFjdHVhbF9zZXJ2ZXIuc2VydmVyX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhYmxlLCBhY3R1YWxfc2VydmVyLnN0YWJsZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X25ldHdvcmtfbGF5ZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfbmV0d29ya19sYXllci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMGJhZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X25ldHdvcmtfbGF5ZXIucHkKQEAgLTAsMCArMSw1MDQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgaW8KK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29tbW9uCitpbXBvcnQgbmV0d29ya19sYXllcgorCisKK2RlZiBhbnlfZWlkKCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDE2KV0pCisKKworZGVmIGFueV9tYWNfZXh0ZW5kZWRfYWRkcmVzcygpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSg4KV0pCisKKworZGVmIGFueV9ybG9jMTYoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE2KQorCisKK2RlZiBhbnlfbWxfZWlkKCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDgpXSkKKworCitkZWYgYW55X3N0YXR1cygpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X3NlY29uZHMoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDMyKQorCisKK2RlZiBhbnlfaWRfc2VxdWVuY2UoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9yb3V0ZXJfaWRfbWFzaygpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNjQpCisKKworZGVmIGFueV9vcHRpb25zKGNvdW50PU5vbmUpOgorICAgIGNvdW50ID0gY291bnQgaWYgY291bnQgaXMgbm90IE5vbmUgZWxzZSByYW5kb20ucmFuZGludCgwLCAyNTUpCisgICAgcmV0dXJuIFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoY291bnQpXQorCisKK2RlZiBhbnlfdGx2X2RhdGEobGVuZ3RoPU5vbmUpOgorICAgIF90eXBlID0gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisgICAgbGVuZ3RoID0gbGVuZ3RoIGlmIGxlbmd0aCBpcyBub3QgTm9uZSBlbHNlIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorICAgIHZhbHVlID0gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKV0pCisKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtfdHlwZSwgbGVuZ3RoXSkgKyB2YWx1ZQorCisKK2RlZiBhbnlfdGx2c19kYXRhKGNvdW50PU5vbmUpOgorICAgIGNvdW50ID0gY291bnQgaWYgY291bnQgaXMgbm90IE5vbmUgZWxzZSByYW5kb20ucmFuZGludCgwLCAxNikKKyAgICBkYXRhID0gYnl0ZWFycmF5KCkKKworICAgIGZvciBfIGluIHJhbmdlKGNvdW50KToKKyAgICAgICAgZGF0YSArPSBhbnlfdGx2X2RhdGEocmFuZG9tLnJhbmRpbnQoMSwgMTUpKQorCisgICAgcmV0dXJuIGRhdGEKKworCitjbGFzcyBUZXN0VGFyZ2V0RWlkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fZWlkX3ZhbHVlX3doZW5fZWlkX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBlaWQgPSBhbnlfZWlkKCkKKworICAgICAgICB0YXJnZXRfZWlkID0gbmV0d29ya19sYXllci5UYXJnZXRFaWQoZWlkKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZWlkID0gdGFyZ2V0X2VpZC5laWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlaWQsIGFjdHVhbF9laWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX1RydWVfd2hlbl90cnlfdG9fZXF1YWxfdHdvX3RoZV9zYW1lX3R5cGVfb2JqZWN0c193aXRoX3RoZV9zYW1lX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBlaWQgPSBhbnlfZWlkKCkKKworICAgICAgICB0YXJnZXRfZWlkID0gbmV0d29ya19sYXllci5UYXJnZXRFaWQoZWlkKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmdldF9laWQsIG5ldHdvcmtfbGF5ZXIuVGFyZ2V0RWlkKGVpZCkpCisKKworY2xhc3MgVGVzdFRhcmdldEVpZEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9UYXJnZXRFaWRfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGVpZCA9IGFueV9laWQoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2xheWVyLlRhcmdldEVpZEZhY3RvcnkoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICB0YXJnZXRfZWlkID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGVpZCksIGNvbW1vbi5NZXNzYWdlSW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh0YXJnZXRfZWlkLCBuZXR3b3JrX2xheWVyLlRhcmdldEVpZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWlkLCB0YXJnZXRfZWlkLmVpZCkKKworCitjbGFzcyBUZXN0TWFjRXh0ZW5kZWRBZGRyZXNzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fbWFjX2FkZHJlc3NfdmFsdWVfd2hlbl9tYWNfYWRkcmVzc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWFjX2FkZHJlc3MgPSBhbnlfbWFjX2V4dGVuZGVkX2FkZHJlc3MoKQorCisgICAgICAgIG1hY19leHRlbmRlZF9hZGRyZXNzID0gbmV0d29ya19sYXllci5NYWNFeHRlbmRlZEFkZHJlc3MobWFjX2FkZHJlc3MpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9tYWNfYWRkcmVzcyA9IG1hY19leHRlbmRlZF9hZGRyZXNzLm1hY19hZGRyZXNzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjX2FkZHJlc3MsIGFjdHVhbF9tYWNfYWRkcmVzcykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fVHJ1ZV93aGVuX3RyeV90b19lcXVhbF90d29fdGhlX3NhbWVfdHlwZV9vYmplY3RzX3dpdGhfdGhlX3NhbWVfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1hY19hZGRyZXNzID0gYW55X21hY19leHRlbmRlZF9hZGRyZXNzKCkKKworICAgICAgICBtYWNfZXh0ZW5kZWRfYWRkcmVzcyA9IG5ldHdvcmtfbGF5ZXIuTWFjRXh0ZW5kZWRBZGRyZXNzKG1hY19hZGRyZXNzKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hY19leHRlbmRlZF9hZGRyZXNzLCBuZXR3b3JrX2xheWVyLk1hY0V4dGVuZGVkQWRkcmVzcyhtYWNfYWRkcmVzcykpCisKKworY2xhc3MgVGVzdE1hY0V4dGVuZGVkQWRkcmVzc0ZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9NYWNFeHRlbmRlZEFkZHJlc3NfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1hY19hZGRyZXNzID0gYW55X21hY19leHRlbmRlZF9hZGRyZXNzKCkKKworICAgICAgICBmYWN0b3J5ID0gbmV0d29ya19sYXllci5NYWNFeHRlbmRlZEFkZHJlc3NGYWN0b3J5KCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgbWFjX2V4dGVuZGVkX2FkZHJlc3MgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8obWFjX2FkZHJlc3MpLCBjb21tb24uTWVzc2FnZUluZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobWFjX2V4dGVuZGVkX2FkZHJlc3MsIG5ldHdvcmtfbGF5ZXIuTWFjRXh0ZW5kZWRBZGRyZXNzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWNfYWRkcmVzcywgbWFjX2V4dGVuZGVkX2FkZHJlc3MubWFjX2FkZHJlc3MpCisKKworY2xhc3MgVGVzdFJsb2MxNih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3Jsb2MxNl92YWx1ZV93aGVuX3Jsb2MxNl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcmxvYzE2ID0gYW55X3Jsb2MxNigpCisKKyAgICAgICAgcmxvYzE2X29iaiA9IG5ldHdvcmtfbGF5ZXIuUmxvYzE2KHJsb2MxNikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3Jsb2MxNiA9IHJsb2MxNl9vYmoucmxvYzE2CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmxvYzE2LCBhY3R1YWxfcmxvYzE2KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9UcnVlX3doZW5fdHJ5X3RvX2VxdWFsX3R3b190aGVfc2FtZV90eXBlX29iamVjdHNfd2l0aF90aGVfc2FtZV92YWx1ZXMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcmxvYzE2ID0gYW55X3Jsb2MxNigpCisKKyAgICAgICAgcmxvYzE2X29iaiA9IG5ldHdvcmtfbGF5ZXIuUmxvYzE2KHJsb2MxNikKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChybG9jMTZfb2JqLCBuZXR3b3JrX2xheWVyLlJsb2MxNihybG9jMTYpKQorCisKK2NsYXNzIFRlc3RSbG9jMTZGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfUmxvYzE2X2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBybG9jMTYgPSBhbnlfcmxvYzE2KCkKKworICAgICAgICBmYWN0b3J5ID0gbmV0d29ya19sYXllci5SbG9jMTZGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KHN0cnVjdC5wYWNrKCI+SCIsIHJsb2MxNikpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHJsb2MxNl9vYmogPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGNvbW1vbi5NZXNzYWdlSW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShybG9jMTZfb2JqLCBuZXR3b3JrX2xheWVyLlJsb2MxNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmxvYzE2LCBybG9jMTZfb2JqLnJsb2MxNikKKworCitjbGFzcyBUZXN0TWxFaWQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9tbF9laWRfdmFsdWVfd2hlbl9tbF9laWRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1sX2VpZCA9IGFueV9tbF9laWQoKQorCisgICAgICAgIG1sX2VpZF9vYmogPSBuZXR3b3JrX2xheWVyLk1sRWlkKG1sX2VpZCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX21sX2VpZCA9IG1sX2VpZF9vYmoubWxfZWlkCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxfZWlkLCBhY3R1YWxfbWxfZWlkKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9UcnVlX3doZW5fdHJ5X3RvX2VxdWFsX3R3b190aGVfc2FtZV90eXBlX29iamVjdHNfd2l0aF90aGVfc2FtZV92YWx1ZXMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWxfZWlkID0gYW55X21sX2VpZCgpCisKKyAgICAgICAgbWxfZWlkX29iaiA9IG5ldHdvcmtfbGF5ZXIuTWxFaWQobWxfZWlkKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sX2VpZF9vYmosIG5ldHdvcmtfbGF5ZXIuTWxFaWQobWxfZWlkKSkKKworCitjbGFzcyBUZXN0TWxFaWRGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTWxFaWRfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1sX2VpZCA9IGFueV9tbF9laWQoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2xheWVyLk1sRWlkRmFjdG9yeSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG1sX2VpZF9vYmogPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8obWxfZWlkKSwgY29tbW9uLk1lc3NhZ2VJbmZvKCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1sX2VpZF9vYmosIG5ldHdvcmtfbGF5ZXIuTWxFaWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sX2VpZCwgbWxfZWlkX29iai5tbF9laWQpCisKKworY2xhc3MgVGVzdFN0YXR1cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3N0YXR1c192YWx1ZV93aGVuX3N0YXR1c19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc3RhdHVzID0gYW55X3N0YXR1cygpCisKKyAgICAgICAgc3RhdHVzX29iaiA9IG5ldHdvcmtfbGF5ZXIuU3RhdHVzKHN0YXR1cykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3N0YXR1cyA9IHN0YXR1c19vYmouc3RhdHVzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCBhY3R1YWxfc3RhdHVzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9UcnVlX3doZW5fdHJ5X3RvX2VxdWFsX3R3b190aGVfc2FtZV90eXBlX29iamVjdHNfd2l0aF90aGVfc2FtZV92YWx1ZXMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc3RhdHVzID0gYW55X3N0YXR1cygpCisKKyAgICAgICAgc3RhdHVzX29iaiA9IG5ldHdvcmtfbGF5ZXIuU3RhdHVzKHN0YXR1cykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXNfb2JqLCBuZXR3b3JrX2xheWVyLlN0YXR1cyhzdGF0dXMpKQorCisKK2NsYXNzIFRlc3RTdGF0dXNGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfU3RhdHVzX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdGF0dXMgPSBhbnlfc3RhdHVzKCkKKworICAgICAgICBmYWN0b3J5ID0gbmV0d29ya19sYXllci5TdGF0dXNGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtzdGF0dXNdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBzdGF0dXNfb2JqID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBjb21tb24uTWVzc2FnZUluZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3RhdHVzX29iaiwgbmV0d29ya19sYXllci5TdGF0dXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgc3RhdHVzX29iai5zdGF0dXMpCisKKworY2xhc3MgVGVzdFRpbWVTaW5jZUxhc3RUcmFuc2FjdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3NlY29uZHNfdmFsdWVfd2hlbl9zZWNvbmRzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzZWNvbmRzID0gYW55X3NlY29uZHMoKQorCisgICAgICAgIHRpbWVfc2luY2VfbGFzdF90cmFuc2FjdGlvbiA9IG5ldHdvcmtfbGF5ZXIuVGltZVNpbmNlTGFzdFRyYW5zYWN0aW9uKHNlY29uZHMpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zZWNvbmRzID0gdGltZV9zaW5jZV9sYXN0X3RyYW5zYWN0aW9uLnNlY29uZHMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWNvbmRzLCBhY3R1YWxfc2Vjb25kcykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fVHJ1ZV93aGVuX3RyeV90b19lcXVhbF90d29fdGhlX3NhbWVfdHlwZV9vYmplY3RzX3dpdGhfdGhlX3NhbWVfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlY29uZHMgPSBhbnlfc2Vjb25kcygpCisKKyAgICAgICAgdGltZV9zaW5jZV9sYXN0X3RyYW5zYWN0aW9uID0gbmV0d29ya19sYXllci5UaW1lU2luY2VMYXN0VHJhbnNhY3Rpb24oc2Vjb25kcykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lX3NpbmNlX2xhc3RfdHJhbnNhY3Rpb24sIG5ldHdvcmtfbGF5ZXIuVGltZVNpbmNlTGFzdFRyYW5zYWN0aW9uKHNlY29uZHMpKQorCisKK2NsYXNzIFRlc3RUaW1lU2luY2VMYXN0VHJhbnNhY3Rpb25GYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfVGltZVNpbmNlTGFzdFRyYW5zYWN0aW9uX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzZWNvbmRzID0gYW55X3NlY29uZHMoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2xheWVyLlRpbWVTaW5jZUxhc3RUcmFuc2FjdGlvbkZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoc3RydWN0LnBhY2soIj5MIiwgc2Vjb25kcykpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHRpbWVfc2luY2VfbGFzdF90cmFuc2FjdGlvbiA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgY29tbW9uLk1lc3NhZ2VJbmZvKCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHRpbWVfc2luY2VfbGFzdF90cmFuc2FjdGlvbiwgbmV0d29ya19sYXllci5UaW1lU2luY2VMYXN0VHJhbnNhY3Rpb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlY29uZHMsIHRpbWVfc2luY2VfbGFzdF90cmFuc2FjdGlvbi5zZWNvbmRzKQorCisKK2NsYXNzIFRlc3RSb3V0ZXJNYXNrKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5faWRfc2VxdWVuY2VfdmFsdWVfd2hlbl9pZF9zZXF1ZW5jZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaWRfc2VxdWVuY2UgPSBhbnlfaWRfc2VxdWVuY2UoKQorCisgICAgICAgIHJvdXRlcl9tYXNrID0gbmV0d29ya19sYXllci5Sb3V0ZXJNYXNrKGlkX3NlcXVlbmNlLCBhbnlfcm91dGVyX2lkX21hc2soKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lkX3NlcXVlbmNlID0gcm91dGVyX21hc2suaWRfc2VxdWVuY2UKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZF9zZXF1ZW5jZSwgYWN0dWFsX2lkX3NlcXVlbmNlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9yb3V0ZXJfaWRfbWFza192YWx1ZV93aGVuX3JvdXRlcl9pZF9tYXNrX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICByb3V0ZXJfaWRfbWFzayA9IGFueV9yb3V0ZXJfaWRfbWFzaygpCisKKyAgICAgICAgcm91dGVyX21hc2sgPSBuZXR3b3JrX2xheWVyLlJvdXRlck1hc2soYW55X2lkX3NlcXVlbmNlKCksIHJvdXRlcl9pZF9tYXNrKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcm91dGVyX2lkX21hc2sgPSByb3V0ZXJfbWFzay5yb3V0ZXJfaWRfbWFzaworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdXRlcl9pZF9tYXNrLCBhY3R1YWxfcm91dGVyX2lkX21hc2spCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX1RydWVfd2hlbl90cnlfdG9fZXF1YWxfdHdvX3RoZV9zYW1lX3R5cGVfb2JqZWN0c193aXRoX3RoZV9zYW1lX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpZF9zZXF1ZW5jZSA9IGFueV9pZF9zZXF1ZW5jZSgpCisgICAgICAgIHJvdXRlcl9pZF9tYXNrID0gYW55X3JvdXRlcl9pZF9tYXNrKCkKKworICAgICAgICByb3V0ZXJfbWFzayA9IG5ldHdvcmtfbGF5ZXIuUm91dGVyTWFzayhpZF9zZXF1ZW5jZSwgcm91dGVyX2lkX21hc2spCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91dGVyX21hc2ssIG5ldHdvcmtfbGF5ZXIuUm91dGVyTWFzayhpZF9zZXF1ZW5jZSwgcm91dGVyX2lkX21hc2spKQorCisKK2NsYXNzIFRlc3RSb3V0ZXJNYXNrRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1JvdXRlck1hc2tfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGlkX3NlcXVlbmNlID0gYW55X2lkX3NlcXVlbmNlKCkKKyAgICAgICAgcm91dGVyX2lkX21hc2sgPSBhbnlfcm91dGVyX2lkX21hc2soKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2xheWVyLlJvdXRlck1hc2tGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtpZF9zZXF1ZW5jZV0pICsgc3RydWN0LnBhY2soIj5RIiwgcm91dGVyX2lkX21hc2spCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHJvdXRlcl9tYXNrID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBjb21tb24uTWVzc2FnZUluZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uocm91dGVyX21hc2ssIG5ldHdvcmtfbGF5ZXIuUm91dGVyTWFzaykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWRfc2VxdWVuY2UsIHJvdXRlcl9tYXNrLmlkX3NlcXVlbmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdXRlcl9pZF9tYXNrLCByb3V0ZXJfbWFzay5yb3V0ZXJfaWRfbWFzaykKKworCitjbGFzcyBUZXN0TmRPcHRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9vcHRpb25zX3ZhbHVlX3doZW5fb3B0aW9uc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgb3B0aW9ucyA9IGFueV9vcHRpb25zKCkKKworICAgICAgICBuZF9vcHRpb24gPSBuZXR3b3JrX2xheWVyLk5kT3B0aW9uKG9wdGlvbnMpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9vcHRpb25zID0gbmRfb3B0aW9uLm9wdGlvbnMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb25zLCBhY3R1YWxfb3B0aW9ucykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fVHJ1ZV93aGVuX3RyeV90b19lcXVhbF90d29fdGhlX3NhbWVfdHlwZV9vYmplY3RzX3dpdGhfdGhlX3NhbWVfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG9wdGlvbnMgPSBhbnlfb3B0aW9ucygpCisKKyAgICAgICAgbmRfb3B0aW9uID0gbmV0d29ya19sYXllci5OZE9wdGlvbihvcHRpb25zKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kX29wdGlvbiwgbmV0d29ya19sYXllci5OZE9wdGlvbihvcHRpb25zKSkKKworCitjbGFzcyBUZXN0TmRPcHRpb25GYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTmRPcHRpb25fZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG9wdGlvbnMgPSBhbnlfb3B0aW9ucygpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfbGF5ZXIuTmRPcHRpb25GYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KG9wdGlvbnMpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG5kX29wdGlvbiA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgY29tbW9uLk1lc3NhZ2VJbmZvKCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG5kX29wdGlvbiwgbmV0d29ya19sYXllci5OZE9wdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9ucywgbmRfb3B0aW9uLm9wdGlvbnMpCisKKworY2xhc3MgVGVzdFRocmVhZE5ldHdvcmtEYXRhKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fb3B0aW9uc192YWx1ZV93aGVuX29wdGlvbnNfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHRsdnMgPSBhbnlfdGx2c19kYXRhKCkKKworICAgICAgICB0aHJlYWRfbmV0d29ya19kYXRhID0gbmV0d29ya19sYXllci5UaHJlYWROZXR3b3JrRGF0YSh0bHZzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdGx2cyA9IHRocmVhZF9uZXR3b3JrX2RhdGEudGx2cworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRsdnMsIGFjdHVhbF90bHZzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9UcnVlX3doZW5fdHJ5X3RvX2VxdWFsX3R3b190aGVfc2FtZV90eXBlX29iamVjdHNfd2l0aF90aGVfc2FtZV92YWx1ZXMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdGx2cyA9IGFueV90bHZzX2RhdGEoKQorCisgICAgICAgIHRocmVhZF9uZXR3b3JrX2RhdGEgPSBuZXR3b3JrX2xheWVyLlRocmVhZE5ldHdvcmtEYXRhKHRsdnMpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhyZWFkX25ldHdvcmtfZGF0YSwgbmV0d29ya19sYXllci5UaHJlYWROZXR3b3JrRGF0YSh0bHZzKSkKKworCitjbGFzcyBUZXN0VGhyZWFkTmV0d29ya0RhdGFGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfVGhyZWFkTmV0d29ya0RhdGFfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHRsdnMgPSBhbnlfdGx2c19kYXRhKCkKKworICAgICAgICBjbGFzcyBEdW1teU5ldHdvcmtEYXRhVGx2c0ZhY3Rvcnk6CisKKyAgICAgICAgICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoZGF0YS5yZWFkKCkpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfbGF5ZXIuVGhyZWFkTmV0d29ya0RhdGFGYWN0b3J5KER1bW15TmV0d29ya0RhdGFUbHZzRmFjdG9yeSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICB0aHJlYWRfbmV0d29ya19kYXRhID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKHRsdnMpLCBjb21tb24uTWVzc2FnZUluZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodGhyZWFkX25ldHdvcmtfZGF0YSwgbmV0d29ya19sYXllci5UaHJlYWROZXR3b3JrRGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGx2cywgdGhyZWFkX25ldHdvcmtfZGF0YS50bHZzKQorCisKK2NsYXNzIFRlc3ROZXR3b3JrTGF5ZXJUbHZzRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX3Rsdl93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY2xhc3MgRHVtbXlOZXR3b3JrRGF0YVRsdnNGYWN0b3J5OgorCisgICAgICAgICAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZWFycmF5KGRhdGEucmVhZCgpKQorCisgICAgICAgIHRsdiA9IGFueV90bHZfZGF0YSgpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfbGF5ZXIuTmV0d29ya0xheWVyVGx2c0ZhY3Rvcnkoe3RsdlswXTogRHVtbXlOZXR3b3JrRGF0YVRsdnNGYWN0b3J5KCl9KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdGx2cyA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyh0bHYpLCBOb25lKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRsdlsyOl0sIGFjdHVhbF90bHZzWzBdKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC9NYWtlZmlsZS5hbSBiL3Rlc3RzL3VuaXQvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYzMDBhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwyMDAgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworIworIyBMb2NhbCBoZWFkZXJzIHRvIGJ1aWxkIGFnYWluc3QgYW5kIGRpc3RyaWJ1dGUgYnV0IG5vdCB0byBpbnN0YWxsCisjIHNpbmNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwYWNrYWdlLgorIworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICB0ZXN0X3BsYXRmb3JtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF9sb3dwYW4uaHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3RfdXRpbC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X3V0aWwuaHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjCisjIE90aGVyIGZpbGVzIHdlIGRvIHdhbnQgdG8gZGlzdHJpYnV0ZSB3aXRoIHRoZSBwYWNrYWdlLgorIworRVhUUkFfRElTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfQlVJTERfVEVTVFMKKyMgQyBwcmVwcm9jZXNzb3Igb3B0aW9uIGZsYWdzIHRoYXQgd2lsbCBhcHBseSB0byBhbGwgY29tcGlsZWQgb2JqZWN0cyBpbiB0aGlzCisjIG1ha2VmaWxlLgorCitBTV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIC1ET1BFTlRIUkVBRF9GVEQ9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMvY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX05DUAorCitDT01NT05fTERBREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQodG9wX2J1aWxkZGlyKS9zcmMvbmNwL2xpYm9wZW50aHJlYWQtbmNwLWZ0ZC5hICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9idWlsZGRpcikvc3JjL2NvcmUvbGlib3BlbnRocmVhZC1mdGQuYSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLWxwdGhyZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworZWxzZQorCitDT01NT05fTERBREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQodG9wX2J1aWxkZGlyKS9zcmMvY29yZS9saWJvcGVudGhyZWFkLWZ0ZC5hICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtbHB0aHJlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitlbmRpZiAjIE9QRU5USFJFQURfRU5BQkxFX05DUAorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9CVUlMVElOX01CRURUTFMKK0FNX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ09NTU9OX0xEQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvdGhpcmRfcGFydHkvbWJlZHRscy9saWJtYmVkY3J5cHRvLmEgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VOQUJMRV9CVUlMVElOX01CRURUTFMKKworIyBUZXN0IGFwcGxpY2F0aW9ucyB0aGF0IHNob3VsZCBiZSBydW4gd2hlbiB0aGUgJ2NoZWNrJyB0YXJnZXQgaXMgcnVuLgorCitjaGVja19QUk9HUkFNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHRlc3QtYWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0LWZ1enogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdC1obWFjLXNoYTI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3QtbG93cGFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0LWxpbmstcXVhbGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdC1tYWMtZnJhbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3QtbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0LW1lc3NhZ2UtcXVldWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdC1wcmlvcml0eS1xdWV1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3Qtc3RybGNhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0LXN0cmxjcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdC1zdHJubGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3QtdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0LXRvb2xjaGFpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitYRkFJTF9URVNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworY2hlY2tfUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICB0ZXN0LWRpYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX05DUAorY2hlY2tfUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICB0ZXN0LW5jcC1idWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VOQUJMRV9OQ1AKKworaWYgT1BFTlRIUkVBRF9XSVRIX0FERFJFU1NfU0FOSVRJWkVSCitjaGVja19QUk9HUkFNUyAgICAgICAgICAgICAgICAgKz0gdGVzdC1hZGRyZXNzLXNhbml0aXplcgorWEZBSUxfVEVTVFMgICAgICAgICAgICAgICAgICAgICs9IHRlc3QtYWRkcmVzcy1zYW5pdGl6ZXIKK3Rlc3RfYWRkcmVzc19zYW5pdGl6ZXJfU09VUkNFUyAgPSB0ZXN0X2FkZHJlc3Nfc2FuaXRpemVyLmNwcAorZW5kaWYgIyBPUEVOVEhSRUFEX1dJVEhfQUREUkVTU19TQU5JVElaRVIKKworCisjIFRlc3QgYXBwbGljYXRpb25zIGFuZCBzY3JpcHRzIHRoYXQgc2hvdWxkIGJlIGJ1aWx0IGFuZCBydW4gd2hlbiB0aGUKKyMgJ2NoZWNrJyB0YXJnZXQgaXMgcnVuLgorCitURVNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoY2hlY2tfUFJPR1JBTVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKKyMgVGhlIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB0aGVpciB2YWx1ZXMgdGhhdCB3aWxsIGJlCisjIG1hZGUgYXZhaWxhYmxlIHRvIGFsbCBwcm9ncmFtcyBhbmQgc2NyaXB0cyBpbiBURVNUUy4KKworVEVTVFNfRU5WSVJPTk1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKKyMgU291cmNlLCBjb21waWxlciwgYW5kIGxpbmtlciBvcHRpb25zIGZvciB0ZXN0IHByb2dyYW1zLgorCit0ZXN0X2Flc19MREFERCAgICAgICAgICAgICAgID0gJChDT01NT05fTERBREQpCit0ZXN0X2Flc19TT1VSQ0VTICAgICAgICAgICAgID0gdGVzdF9wbGF0Zm9ybS5jcHAgdGVzdF9hZXMuY3BwCisKK3Rlc3RfZnV6el9MREFERCAgICAgICAgICAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3RfZnV6el9TT1VSQ0VTICAgICAgICAgICAgPSB0ZXN0X3BsYXRmb3JtLmNwcCB0ZXN0X2Z1enouY3BwCisKK3Rlc3RfaG1hY19zaGEyNTZfTERBREQgICAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3RfaG1hY19zaGEyNTZfU09VUkNFUyAgICAgPSB0ZXN0X3BsYXRmb3JtLmNwcCB0ZXN0X2htYWNfc2hhMjU2LmNwcAorCit0ZXN0X2xpbmtfcXVhbGl0eV9MREFERCAgICAgID0gJChDT01NT05fTERBREQpCit0ZXN0X2xpbmtfcXVhbGl0eV9TT1VSQ0VTICAgID0gdGVzdF9wbGF0Zm9ybS5jcHAgdGVzdF9saW5rX3F1YWxpdHkuY3BwCisKK3Rlc3RfbG93cGFuX0xEQUREICAgICAgICAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3RfbG93cGFuX1NPVVJDRVMgICAgICAgICAgPSB0ZXN0X3BsYXRmb3JtLmNwcCB0ZXN0X2xvd3Bhbi5jcHAgdGVzdF91dGlsLmNwcAorCit0ZXN0X21hY19mcmFtZV9MREFERCAgICAgICAgID0gJChDT01NT05fTERBREQpCit0ZXN0X21hY19mcmFtZV9TT1VSQ0VTICAgICAgID0gdGVzdF9wbGF0Zm9ybS5jcHAgdGVzdF9tYWNfZnJhbWUuY3BwCisKK3Rlc3RfbWVzc2FnZV9MREFERCAgICAgICAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3RfbWVzc2FnZV9TT1VSQ0VTICAgICAgICAgPSB0ZXN0X3BsYXRmb3JtLmNwcCB0ZXN0X21lc3NhZ2UuY3BwCisKK3Rlc3RfbWVzc2FnZV9xdWV1ZV9MREFERCAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3RfbWVzc2FnZV9xdWV1ZV9TT1VSQ0VTICAgPSB0ZXN0X3BsYXRmb3JtLmNwcCB0ZXN0X21lc3NhZ2VfcXVldWUuY3BwCisKK3Rlc3RfbmNwX2J1ZmZlcl9MREFERCAgICAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3RfbmNwX2J1ZmZlcl9TT1VSQ0VTICAgICAgPSB0ZXN0X3BsYXRmb3JtLmNwcCB0ZXN0X25jcF9idWZmZXIuY3BwCisKK3Rlc3RfcHJpb3JpdHlfcXVldWVfTERBREQgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3RfcHJpb3JpdHlfcXVldWVfU09VUkNFUyAgPSB0ZXN0X3BsYXRmb3JtLmNwcCB0ZXN0X3ByaW9yaXR5X3F1ZXVlLmNwcAorCit0ZXN0X3N0cmxjYXRfTERBREQgICAgICAgICAgID0gJChDT01NT05fTERBREQpCit0ZXN0X3N0cmxjYXRfU09VUkNFUyAgICAgICAgID0gdGVzdF9zdHJsY2F0LmMKKwordGVzdF9zdHJsY3B5X0xEQUREICAgICAgICAgICA9ICQoQ09NTU9OX0xEQUREKQordGVzdF9zdHJsY3B5X1NPVVJDRVMgICAgICAgICA9IHRlc3Rfc3RybGNweS5jCisKK3Rlc3Rfc3Rybmxlbl9MREFERCAgICAgICAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3Rfc3Rybmxlbl9TT1VSQ0VTICAgICAgICAgPSB0ZXN0X3N0cm5sZW4uYworCit0ZXN0X3RpbWVyX0xEQUREICAgICAgICAgICAgID0gJChDT01NT05fTERBREQpCit0ZXN0X3RpbWVyX1NPVVJDRVMgICAgICAgICAgID0gdGVzdF9wbGF0Zm9ybS5jcHAgdGVzdF90aW1lci5jcHAKKwordGVzdF90b29sY2hhaW5fTERBREQgICAgICAgICA9ICQoQ09NTU9OX0xEQUREKQordGVzdF90b29sY2hhaW5fU09VUkNFUyAgICAgICA9IHRlc3RfcGxhdGZvcm0uY3BwIHRlc3RfdG9vbGNoYWluLmNwcCB0ZXN0X3Rvb2xjaGFpbl9jLmMKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRwordGVzdF9kaWFnX0xEQUREICAgICAgICAgICAgICA9ICQodG9wX2J1aWxkZGlyKS9zcmMvZGlhZy9saWJvcGVudGhyZWFkLWRpYWcuYSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L2xpYm9wZW50aHJlYWQtcG9zaXguYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChOVUxMKQordGVzdF9kaWFnX1NPVVJDRVMgICAgICAgICAgICA9IHRlc3RfZGlhZy5jcHAKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKK0NMRUFORklMRVMgICAgICAgICAgICAgICAgICAgPSAkKHdpbGRjYXJkICouZ2NkYSAqLmdjbm8pCitlbmRpZiAjIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKKworZW5kaWYgIyBPUEVOVEhSRUFEX0JVSUxEX1RFU1RTCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X2FkZHJlc3Nfc2FuaXRpemVyLmNwcCBiL3Rlc3RzL3VuaXQvdGVzdF9hZGRyZXNzX3Nhbml0aXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4MDRiYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF9hZGRyZXNzX3Nhbml0aXplci5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKworI2lmZGVmIEVOQUJMRV9URVNUX01BSU4KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgKHZvaWQpYXJndjsKKyAgICBpbnQgc3RhY2tfYXJyYXlbMTAwXTsKKyAgICBpbnQgYXJyYXlfaW5kZXggPSBhcmdjICsgMTAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB7CisJc3RhY2tfYXJyYXlbaV0gPSBpOworICAgIH0KKworICAgIHByaW50Zigic3RhY2tfYXJyYXlbJWRdID0gJWRcbiIsIGFycmF5X2luZGV4LCBzdGFja19hcnJheVthcnJheV9pbmRleF0pOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF9hZXMuY3BwIGIvdGVzdHMvdW5pdC90ZXN0X2Flcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmNGQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF9hZXMuY3BwCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL2Flc19jY20uaHBwIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJ0ZXN0X3BsYXRmb3JtLmgiCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisKKy8qKgorICogVmVyaWZpZXMgdGVzdCB2ZWN0b3JzIGZyb20gSUVFRSA4MDIuMTUuNC0yMDA2IEFubmV4IEMgU2VjdGlvbiBDLjIuMQorICovCit2b2lkIFRlc3RNYWNCZWFjb25GcmFtZSh2b2lkKQoreworICAgIHVpbnQ4X3Qga2V5W10gPQorICAgIHsKKyAgICAgICAgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKKyAgICAgICAgMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwKKyAgICB9OworCisgICAgdWludDhfdCB0ZXN0W10gPQorICAgIHsKKyAgICAgICAgMHgwOCwgMHhEMCwgMHg4NCwgMHgyMSwgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHgwMiwgMHgwNSwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg1NSwgMHhDRiwgMHgwMCwgMHgwMCwgMHg1MSwgMHg1MiwKKyAgICAgICAgMHg1MywgMHg1NCwgMHgyMiwgMHgzQiwgMHhDMSwgMHhFQywgMHg4NCwgMHgxQSwKKyAgICAgICAgMHhCNSwgMHg1MworICAgIH07CisKKyAgICB1aW50OF90IGVuY3J5cHRlZFtdID0KKyAgICB7CisgICAgICAgIDB4MDgsIDB4RDAsIDB4ODQsIDB4MjEsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4NDgsIDB4REUsIDB4QUMsIDB4MDIsIDB4MDUsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4NTUsIDB4Q0YsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NTIsCisgICAgICAgIDB4NTMsIDB4NTQsIDB4MjIsIDB4M0IsIDB4QzEsIDB4RUMsIDB4ODQsIDB4MUEsCisgICAgICAgIDB4QjUsIDB4NTMKKyAgICB9OworCisgICAgdWludDhfdCBkZWNyeXB0ZWRbXSA9CisgICAgeworICAgICAgICAweDA4LCAweEQwLCAweDg0LCAweDIxLCAweDQzLCAweDAxLCAweDAwLCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDQ4LCAweERFLCAweEFDLCAweDAyLCAweDA1LCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDU1LCAweENGLCAweDAwLCAweDAwLCAweDUxLCAweDUyLAorICAgICAgICAweDUzLCAweDU0LCAweDIyLCAweDNCLCAweEMxLCAweEVDLCAweDg0LCAweDFBLAorICAgICAgICAweEI1LCAweDUzCisgICAgfTsKKworICAgIG90SW5zdGFuY2UgKmluc3RhbmNlID0gdGVzdEluaXRJbnN0YW5jZSgpOworICAgIG90OjpDcnlwdG86OkFlc0NjbSBhZXNDY207CisgICAgdWludDMyX3QgaGVhZGVyTGVuZ3RoID0gc2l6ZW9mKHRlc3QpIC0gODsKKyAgICB1aW50MzJfdCBwYXlsb2FkTGVuZ3RoID0gMDsKKyAgICB1aW50OF90IHRhZ0xlbmd0aCA9IDg7CisKKyAgICB1aW50OF90IG5vbmNlW10gPQorICAgIHsKKyAgICAgICAgMHhBQywgMHhERSwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMiwKKyAgICB9OworCisgICAgVmVyaWZ5T3JRdWl0KGluc3RhbmNlICE9IE5VTEwsICJOdWxsIE9wZW5UaHJlYWQgaW5zdGFuY2UiKTsKKworICAgIGFlc0NjbS5TZXRLZXkoa2V5LCBzaXplb2Yoa2V5KSk7CisgICAgYWVzQ2NtLkluaXQoaGVhZGVyTGVuZ3RoLCBwYXlsb2FkTGVuZ3RoLCB0YWdMZW5ndGgsIG5vbmNlLCBzaXplb2Yobm9uY2UpKTsKKyAgICBhZXNDY20uSGVhZGVyKHRlc3QsIGhlYWRlckxlbmd0aCk7CisgICAgYWVzQ2NtLkZpbmFsaXplKHRlc3QgKyBoZWFkZXJMZW5ndGgsICZ0YWdMZW5ndGgpOworCisgICAgVmVyaWZ5T3JRdWl0KG1lbWNtcCh0ZXN0LCBlbmNyeXB0ZWQsIHNpemVvZihlbmNyeXB0ZWQpKSA9PSAwLAorICAgICAgICAgICAgICAgICAiVGVzdE1hY0JlYWNvbkZyYW1lIGVuY3J5cHQgZmFpbGVkIik7CisKKyAgICBhZXNDY20uSW5pdChoZWFkZXJMZW5ndGgsIHBheWxvYWRMZW5ndGgsIHRhZ0xlbmd0aCwgbm9uY2UsIHNpemVvZihub25jZSkpOworICAgIGFlc0NjbS5IZWFkZXIodGVzdCwgaGVhZGVyTGVuZ3RoKTsKKyAgICBhZXNDY20uRmluYWxpemUodGVzdCArIGhlYWRlckxlbmd0aCwgJnRhZ0xlbmd0aCk7CisKKyAgICBWZXJpZnlPclF1aXQobWVtY21wKHRlc3QsIGRlY3J5cHRlZCwgc2l6ZW9mKGRlY3J5cHRlZCkpID09IDAsCisgICAgICAgICAgICAgICAgICJUZXN0TWFjQmVhY29uRnJhbWUgZGVjcnlwdCBmYWlsZWQiKTsKKworICAgIHRlc3RGcmVlSW5zdGFuY2UoaW5zdGFuY2UpOworfQorCisvKioKKyAqIFZlcmlmaWVzIHRlc3QgdmVjdG9ycyBmcm9tIElFRUUgODAyLjE1LjQtMjAwNiBBbm5leCBDIFNlY3Rpb24gQy4yLjEKKyAqLwordm9pZCBUZXN0TWFjRGF0YUZyYW1lKCkKK3sKKyAgICB1aW50OF90IGtleVtdID0KKyAgICB7CisgICAgICAgIDB4YzAsIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsCisgICAgICAgIDB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsCisgICAgfTsKKworICAgIHVpbnQ4X3QgdGVzdFtdID0KKyAgICB7CisgICAgICAgIDB4NjksIDB4REMsIDB4ODQsIDB4MjEsIDB4NDMsIDB4MDIsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4NDgsIDB4REUsIDB4QUMsIDB4MDEsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4NDgsIDB4REUsIDB4QUMsIDB4MDQsIDB4MDUsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQKKyAgICB9OworCisgICAgdWludDhfdCBlbmNyeXB0ZWRbXSA9CisgICAgeworICAgICAgICAweDY5LCAweERDLCAweDg0LCAweDIxLCAweDQzLCAweDAyLCAweDAwLCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDQ4LCAweERFLCAweEFDLCAweDAxLCAweDAwLCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDQ4LCAweERFLCAweEFDLCAweDA0LCAweDA1LCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweEQ0LCAweDNFLCAweDAyLCAweDJCCisgICAgfTsKKworICAgIHVpbnQ4X3QgZGVjcnlwdGVkW10gPQorICAgIHsKKyAgICAgICAgMHg2OSwgMHhEQywgMHg4NCwgMHgyMSwgMHg0MywgMHgwMiwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHgwMSwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHgwNCwgMHgwNSwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NAorICAgIH07CisKKyAgICBvdDo6Q3J5cHRvOjpBZXNDY20gYWVzQ2NtOworICAgIHVpbnQzMl90IGhlYWRlckxlbmd0aCA9IHNpemVvZih0ZXN0KSAtIDQ7CisgICAgdWludDMyX3QgcGF5bG9hZExlbmd0aCA9IDQ7CisgICAgdWludDhfdCB0YWdMZW5ndGggPSAwOworCisgICAgdWludDhfdCBub25jZVtdID0KKyAgICB7CisgICAgICAgIDB4QUMsIDB4REUsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDQsCisgICAgfTsKKworICAgIGFlc0NjbS5TZXRLZXkoa2V5LCBzaXplb2Yoa2V5KSk7CisgICAgYWVzQ2NtLkluaXQoaGVhZGVyTGVuZ3RoLCBwYXlsb2FkTGVuZ3RoLCB0YWdMZW5ndGgsIG5vbmNlLCBzaXplb2Yobm9uY2UpKTsKKyAgICBhZXNDY20uSGVhZGVyKHRlc3QsIGhlYWRlckxlbmd0aCk7CisgICAgYWVzQ2NtLlBheWxvYWQodGVzdCArIGhlYWRlckxlbmd0aCwgdGVzdCArIGhlYWRlckxlbmd0aCwgcGF5bG9hZExlbmd0aCwgdHJ1ZSk7CisgICAgYWVzQ2NtLkZpbmFsaXplKHRlc3QgKyBoZWFkZXJMZW5ndGggKyBwYXlsb2FkTGVuZ3RoLCAmdGFnTGVuZ3RoKTsKKworICAgIFZlcmlmeU9yUXVpdChtZW1jbXAodGVzdCwgZW5jcnlwdGVkLCBzaXplb2YoZW5jcnlwdGVkKSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgIlRlc3RNYWNEYXRhRnJhbWUgZW5jcnlwdCBmYWlsZWQiKTsKKworICAgIGFlc0NjbS5Jbml0KGhlYWRlckxlbmd0aCwgcGF5bG9hZExlbmd0aCwgdGFnTGVuZ3RoLCBub25jZSwgc2l6ZW9mKG5vbmNlKSk7CisgICAgYWVzQ2NtLkhlYWRlcih0ZXN0LCBoZWFkZXJMZW5ndGgpOworICAgIGFlc0NjbS5QYXlsb2FkKHRlc3QgKyBoZWFkZXJMZW5ndGgsIHRlc3QgKyBoZWFkZXJMZW5ndGgsIHBheWxvYWRMZW5ndGgsIGZhbHNlKTsKKyAgICBhZXNDY20uRmluYWxpemUodGVzdCArIGhlYWRlckxlbmd0aCArIHBheWxvYWRMZW5ndGgsICZ0YWdMZW5ndGgpOworCisgICAgVmVyaWZ5T3JRdWl0KG1lbWNtcCh0ZXN0LCBkZWNyeXB0ZWQsIHNpemVvZihkZWNyeXB0ZWQpKSA9PSAwLAorICAgICAgICAgICAgICAgICAiVGVzdE1hY0RhdGFGcmFtZSBkZWNyeXB0IGZhaWxlZCIpOworfQorCisvKioKKyAqIFZlcmlmaWVzIHRlc3QgdmVjdG9ycyBmcm9tIElFRUUgODAyLjE1LjQtMjAwNiBBbm5leCBDIFNlY3Rpb24gQy4yLjMKKyAqLwordm9pZCBUZXN0TWFjQ29tbWFuZEZyYW1lKCkKK3sKKyAgICB1aW50OF90IGtleVtdID0KKyAgICB7CisgICAgICAgIDB4YzAsIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsCisgICAgICAgIDB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsCisgICAgfTsKKworICAgIHVpbnQ4X3QgdGVzdFtdID0KKyAgICB7CisgICAgICAgIDB4MkIsIDB4REMsIDB4ODQsIDB4MjEsIDB4NDMsIDB4MDIsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4NDgsIDB4REUsIDB4QUMsIDB4RkYsIDB4RkYsIDB4MDEsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4REUsIDB4QUMsIDB4MDYsCisgICAgICAgIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4Q0UsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgfTsKKworICAgIHVpbnQzMl90IGhlYWRlckxlbmd0aCA9IDI5LCBwYXlsb2FkTGVuZ3RoID0gMTsKKyAgICB1aW50OF90IHRhZ0xlbmd0aCA9IDg7CisKKyAgICB1aW50OF90IGVuY3J5cHRlZFtdID0KKyAgICB7CisgICAgICAgIDB4MkIsIDB4REMsIDB4ODQsIDB4MjEsIDB4NDMsIDB4MDIsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4NDgsIDB4REUsIDB4QUMsIDB4RkYsIDB4RkYsIDB4MDEsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4REUsIDB4QUMsIDB4MDYsCisgICAgICAgIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4RDgsIDB4NEYsIDB4REUsCisgICAgICAgIDB4NTIsIDB4OTAsIDB4NjEsIDB4RjksIDB4QzYsIDB4RjEsCisgICAgfTsKKworICAgIHVpbnQ4X3QgZGVjcnlwdGVkW10gPQorICAgIHsKKyAgICAgICAgMHgyQiwgMHhEQywgMHg4NCwgMHgyMSwgMHg0MywgMHgwMiwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHhGRiwgMHhGRiwgMHgwMSwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHgwNiwKKyAgICAgICAgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhDRSwgMHg0RiwgMHhERSwKKyAgICAgICAgMHg1MiwgMHg5MCwgMHg2MSwgMHhGOSwgMHhDNiwgMHhGMSwKKyAgICB9OworCisgICAgdWludDhfdCBub25jZVtdID0KKyAgICB7CisgICAgICAgIDB4QUMsIDB4REUsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDYsCisgICAgfTsKKworICAgIG90OjpDcnlwdG86OkFlc0NjbSBhZXNDY207CisgICAgYWVzQ2NtLlNldEtleShrZXksIHNpemVvZihrZXkpKTsKKyAgICBhZXNDY20uSW5pdChoZWFkZXJMZW5ndGgsIHBheWxvYWRMZW5ndGgsIHRhZ0xlbmd0aCwgbm9uY2UsIHNpemVvZihub25jZSkpOworICAgIGFlc0NjbS5IZWFkZXIodGVzdCwgaGVhZGVyTGVuZ3RoKTsKKyAgICBhZXNDY20uUGF5bG9hZCh0ZXN0ICsgaGVhZGVyTGVuZ3RoLCB0ZXN0ICsgaGVhZGVyTGVuZ3RoLCBwYXlsb2FkTGVuZ3RoLCB0cnVlKTsKKyAgICBhZXNDY20uRmluYWxpemUodGVzdCArIGhlYWRlckxlbmd0aCArIHBheWxvYWRMZW5ndGgsICZ0YWdMZW5ndGgpOworICAgIFZlcmlmeU9yUXVpdChtZW1jbXAodGVzdCwgZW5jcnlwdGVkLCBzaXplb2YoZW5jcnlwdGVkKSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgIlRlc3RNYWNDb21tYW5kRnJhbWUgZW5jcnlwdCBmYWlsZWRcbiIpOworCisgICAgYWVzQ2NtLkluaXQoaGVhZGVyTGVuZ3RoLCBwYXlsb2FkTGVuZ3RoLCB0YWdMZW5ndGgsIG5vbmNlLCBzaXplb2Yobm9uY2UpKTsKKyAgICBhZXNDY20uSGVhZGVyKHRlc3QsIGhlYWRlckxlbmd0aCk7CisgICAgYWVzQ2NtLlBheWxvYWQodGVzdCArIGhlYWRlckxlbmd0aCwgdGVzdCArIGhlYWRlckxlbmd0aCwgcGF5bG9hZExlbmd0aCwgZmFsc2UpOworICAgIGFlc0NjbS5GaW5hbGl6ZSh0ZXN0ICsgaGVhZGVyTGVuZ3RoICsgcGF5bG9hZExlbmd0aCwgJnRhZ0xlbmd0aCk7CisKKyAgICBWZXJpZnlPclF1aXQobWVtY21wKHRlc3QsIGRlY3J5cHRlZCwgc2l6ZW9mKGRlY3J5cHRlZCkpID09IDAsCisgICAgICAgICAgICAgICAgICJUZXN0TWFjQ29tbWFuZEZyYW1lIGRlY3J5cHQgZmFpbGVkXG4iKTsKK30KKworI2lmZGVmIEVOQUJMRV9URVNUX01BSU4KK2ludCBtYWluKHZvaWQpCit7CisgICAgVGVzdE1hY0JlYWNvbkZyYW1lKCk7CisgICAgVGVzdE1hY0RhdGFGcmFtZSgpOworICAgIFRlc3RNYWNDb21tYW5kRnJhbWUoKTsKKyAgICBwcmludGYoIkFsbCB0ZXN0cyBwYXNzZWRcbiIpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfZGlhZy5jcHAgYi90ZXN0cy91bml0L3Rlc3RfZGlhZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExNGFhNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF9kaWFnLmNwcApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvZGlhZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisKK2V4dGVybiAiQyIgdm9pZCBvdFRhc2tsZXRzU2lnbmFsUGVuZGluZyhvdEluc3RhbmNlICopCit7Cit9CisKK2V4dGVybiAiQyIgYm9vbCBvdFRhc2tsZXRzQXJlUGVuZGluZyhvdEluc3RhbmNlICopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitleHRlcm4gIkMiIHZvaWQgb3RQbGF0VWFydFNlbmREb25lKHZvaWQpCit7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBvdFBsYXRVYXJ0UmVjZWl2ZWQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICAodm9pZClhQnVmOworICAgICh2b2lkKWFCdWZMZW5ndGg7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBvdFBsYXRBbGFybUZpcmVkKG90SW5zdGFuY2UgKikKK3sKK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdFJhZGlvVHhEb25lKG90SW5zdGFuY2UgKiwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90UmFkaW9GcmFtZSAqYUFja0ZyYW1lLCAgb3RFcnJvciBhRXJyb3IpCit7CisgICAgKHZvaWQpYUZyYW1lOworICAgICh2b2lkKWFBY2tGcmFtZTsKKyAgICAodm9pZClhRXJyb3I7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKG90SW5zdGFuY2UgKiwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgICh2b2lkKWFGcmFtZTsKKyAgICAodm9pZClhRXJyb3I7Cit9CisKKworLyoqCisgKiAgZGlhZ25vc3RpY3MgbW9kdWxlIHRlc3RzCisgKi8KK3ZvaWQgVGVzdERpYWcoKQoreworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmNvbW1hbmQ7CisgICAgICAgIGNvbnN0IGNoYXIgKm91dHB1dDsKKyAgICB9IHRlc3RzW10gPQorICAgIHsKKyAgICAgICAgeworICAgICAgICAgICAgImRpYWdcbiIsCisgICAgICAgICAgICAiZGlhZ25vc3RpY3MgbW9kZSBpcyBkaXNhYmxlZFxyXG4iLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZGlhZyBzZW5kIDEwIDEwMFxuIiwKKyAgICAgICAgICAgICJmYWlsZWRcclxuc3RhdHVzIDB4ZFxyXG4iLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZGlhZyBzdGFydFxuIiwKKyAgICAgICAgICAgICJzdGFydCBkaWFnbm9zdGljcyBtb2RlXHJcbnN0YXR1cyAweDAwXHJcbiIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJkaWFnXG4iLAorICAgICAgICAgICAgImRpYWdub3N0aWNzIG1vZGUgaXMgZW5hYmxlZFxyXG4iLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZGlhZyBjaGFubmVsIDEwXG4iLAorICAgICAgICAgICAgImZhaWxlZFxyXG5zdGF0dXMgMHg3XHJcbiIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJkaWFnIGNoYW5uZWwgMTFcbiIsCisgICAgICAgICAgICAic2V0IGNoYW5uZWwgdG8gMTFcclxuc3RhdHVzIDB4MDBcclxuIiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImRpYWcgY2hhbm5lbFxuIiwKKyAgICAgICAgICAgICJjaGFubmVsOiAxMVxyXG4iLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZGlhZyBwb3dlciAtMTBcbiIsCisgICAgICAgICAgICAic2V0IHR4IHBvd2VyIHRvIC0xMCBkQm1cclxuc3RhdHVzIDB4MDBcclxuIiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImRpYWcgcG93ZXJcbiIsCisgICAgICAgICAgICAidHggcG93ZXI6IC0xMCBkQm1cclxuIiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImRpYWcgc3RhdHNcbiIsCisgICAgICAgICAgICAicmVjZWl2ZWQgcGFja2V0czogMFxyXG5zZW50IHBhY2tldHM6IDBcclxuZmlyc3QgcmVjZWl2ZWQgcGFja2V0OiByc3NpPTAsIGxxaT0wXHJcbiIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJkaWFnIHNlbmQgMjAgMTAwXG4iLAorICAgICAgICAgICAgInNlbmRpbmcgMHgxNCBwYWNrZXQocyksIGxlbmd0aCAweDY0XHJcbnN0YXR1cyAweDAwXHJcbiIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJkaWFnIHJlcGVhdCAxMDAgMTAwXG4iLAorICAgICAgICAgICAgInNlbmRpbmcgcGFja2V0cyBvZiBsZW5ndGggMHg2NCBhdCB0aGUgZGVsYXkgb2YgMHg2NCBtc1xyXG5zdGF0dXMgMHgwMFxyXG4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJkaWFnIHNsZWVwXG4iLAorICAgICAgICAgICAgInNsZWVwaW5nIG5vdy4uLlxyXG4iLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZGlhZyBzdG9wXG4iLAorICAgICAgICAgICAgInJlY2VpdmVkIHBhY2tldHM6IDBcclxuc2VudCBwYWNrZXRzOiAwXHJcbmZpcnN0IHJlY2VpdmVkIHBhY2tldDogcnNzaT0wLCBscWk9MFxyXG5cbnN0b3AgZGlhZ25vc3RpY3MgbW9kZVxyXG5zdGF0dXMgMHgwMFxyXG4iLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZGlhZ1xuIiwKKyAgICAgICAgICAgICJkaWFnbm9zdGljcyBtb2RlIGlzIGRpc2FibGVkXHJcbiIsCisgICAgICAgIH0sCisgICAgfTsKKworICAgIC8vIGluaXRpYWxpemUgcGxhdGZvcm0gbGF5ZXIKKyAgICBpbnQgYXJnYyA9IDI7CisgICAgY2hhciAqYXJndls4XSA9IHsoY2hhciAqKSJ0ZXN0X2RpYWciLCAoY2hhciAqKSIxIn07CisgICAgUGxhdGZvcm1Jbml0KGFyZ2MsIGFyZ3YpOworCisgICAgLy8gaW5pdGlhbGl6ZSBkaWFnbm9zdGljcyBtb2R1bGUKKyAgICBvdERpYWdJbml0KE5VTEwpOworCisgICAgLy8gdGVzdCBkaWFnbm9zdGljcyBjb21tYW5kcworICAgIFZlcmlmeU9yUXVpdCghb3REaWFnSXNFbmFibGVkKCksICJkaWFnbm9zdGljcyBtb2RlIHNob3VkIGJlIGRpc2FibGVkIGFzIGRlZmF1bHRcbiIpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplb2YodGVzdHMpIC8gc2l6ZW9mKHRlc3RzWzBdKTsgIGkrKykKKyAgICB7CisgICAgICAgIGNoYXIgc3RyaW5nWzUwXTsKKyAgICAgICAgY2hhciAqb3V0cHV0ID0gTlVMTDsKKworICAgICAgICBtZW1jcHkoc3RyaW5nLCB0ZXN0c1tpXS5jb21tYW5kLCBzdHJsZW4odGVzdHNbaV0uY29tbWFuZCkgKyAxKTsKKworICAgICAgICBvdXRwdXQgPSBvdERpYWdQcm9jZXNzQ21kTGluZShzdHJpbmcpOworICAgICAgICBWZXJpZnlPclF1aXQobWVtY21wKG91dHB1dCwgdGVzdHNbaV0ub3V0cHV0LCBzdHJsZW4odGVzdHNbaV0ub3V0cHV0KSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0IERpYWdub3N0aWNzIG1vZHVsZSBmYWlsZWRcclxuIik7CisgICAgfQorfQorCisjaWZkZWYgRU5BQkxFX1RFU1RfTUFJTgoraW50IG1haW4odm9pZCkKK3sKKyAgICBUZXN0RGlhZygpOworICAgIHByaW50ZigiQWxsIHRlc3RzIHBhc3NlZFxuIik7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF9mdXp6LmNwcCBiL3Rlc3RzL3VuaXQvdGVzdF9mdXp6LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTRhYjcyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X2Z1enouY3BwCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAidGVzdF9wbGF0Zm9ybS5oIgorLy8jaW5jbHVkZSA8bWFjL21hY19mcmFtZS5ocHA+CisKKy8vI2RlZmluZSBEQkdfRlVaWiAxCisKK2Jvb2wgZ19mUmFkaW9FbmFibGVkID0gZmFsc2U7Cit1aW50OF90IGdfUmVjdkNoYW5uZWwgPSAwOwordWludDhfdCBnX1RyYW5zbWl0UHNkdVsxMjhdOworb3RSYWRpb0ZyYW1lIGdfVHJhbnNtaXRSYWRpb0ZyYW1lOworYm9vbCBnX2ZUcmFuc21pdCA9IGZhbHNlOworCitib29sIHRlc3RGdXp6UmFkaW9Jc0VuYWJsZWQob3RJbnN0YW5jZSAqKQoreworICAgIHJldHVybiBnX2ZSYWRpb0VuYWJsZWQ7Cit9CisKK290RXJyb3IgdGVzdEZ1enpSYWRpb0VuYWJsZShvdEluc3RhbmNlICopCit7CisjaWZkZWYgREJHX0ZVWloKKyAgICBMb2coIlJhZGlvIGVuYWJsZWQiKTsKKyNlbmRpZgorICAgIGdfZlJhZGlvRW5hYmxlZCA9IHRydWU7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgdGVzdEZ1enpSYWRpb0Rpc2FibGUob3RJbnN0YW5jZSAqKQoreworI2lmZGVmIERCR19GVVpaCisgICAgTG9nKCJSYWRpbyBkaXNhYmxlZCIpOworI2VuZGlmCisgICAgZ19mUmFkaW9FbmFibGVkID0gZmFsc2U7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgdGVzdEZ1enpSYWRpb1JlY2VpdmUob3RJbnN0YW5jZSAqLCB1aW50OF90IGFDaGFubmVsKQoreworI2lmZGVmIERCR19GVVpaCisgICAgTG9nKCI9PT4gcmVjZWl2ZSIpOworI2VuZGlmCisgICAgZ19SZWN2Q2hhbm5lbCA9IGFDaGFubmVsOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIHRlc3RGdXp6UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICopCit7CisjaWZkZWYgREJHX0ZVWloKKyAgICBMb2coIj09PiB0cmFuc21pdCIpOworI2VuZGlmCisgICAgZ19mVHJhbnNtaXQgPSB0cnVlOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdFJhZGlvRnJhbWUgKnRlc3RGdXp6dFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIob3RJbnN0YW5jZSAqKQoreworICAgIHJldHVybiAmZ19UcmFuc21pdFJhZGlvRnJhbWU7Cit9CisKK3ZvaWQgVGVzdEZ1enoodWludDMyX3QgYVNlY29uZHMpCit7CisgICAgLy8gU2V0IHRoZSByYWRpbyBjYXBhYmlsaXRpZXMgdG8gZGlzYWJsZSBhbnkgTWFjIHJlbGF0ZWQgdGltZXIgZGVwZW5kZW5jaWVzCisgICAgZ190ZXN0UGxhdFJhZGlvQ2FwcyA9IChvdFJhZGlvQ2FwcykoT1RfUkFESU9fQ0FQU19BQ0tfVElNRU9VVCB8IE9UX1JBRElPX0NBUFNfVFJBTlNNSVRfUkVUUklFUyk7CisKKyAgICAvLyBTZXQgdGhlIHBsYXRmb3JtIGZ1bmN0aW9uIHBvaW50ZXJzCisgICAgZ19UcmFuc21pdFJhZGlvRnJhbWUubVBzZHUgPSBnX1RyYW5zbWl0UHNkdTsKKyAgICBnX3Rlc3RQbGF0UmFkaW9Jc0VuYWJsZWQgPSB0ZXN0RnV6elJhZGlvSXNFbmFibGVkOworICAgIGdfdGVzdFBsYXRSYWRpb0VuYWJsZSA9IHRlc3RGdXp6UmFkaW9FbmFibGU7CisgICAgZ190ZXN0UGxhdFJhZGlvRGlzYWJsZSA9IHRlc3RGdXp6UmFkaW9EaXNhYmxlOworICAgIGdfdGVzdFBsYXRSYWRpb1JlY2VpdmUgPSB0ZXN0RnV6elJhZGlvUmVjZWl2ZTsKKyAgICBnX3Rlc3RQbGF0UmFkaW9UcmFuc21pdCA9IHRlc3RGdXp6UmFkaW9UcmFuc21pdDsKKyAgICBnX3Rlc3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlciA9IHRlc3RGdXp6dFJhZGlvR2V0VHJhbnNtaXRCdWZmZXI7CisKKyAgICAvLyBJbml0aWFsaXplIG91ciB0aW1pbmcgdmFyaWFibGVzCisgICAgdWludDMyX3QgdFN0YXJ0ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKyAgICB1aW50MzJfdCB0RW5kID0gdFN0YXJ0ICsgKGFTZWNvbmRzICogMTAwMCk7CisKKyAgICBvdEluc3RhbmNlICphSW5zdGFuY2U7CisKKyNpZmRlZiBfV0lOMzIKKyAgICB1aW50MzJfdCBzZWVkID0gKHVpbnQzMl90KXRpbWUoTlVMTCk7CisgICAgc3JhbmQoc2VlZCk7CisgICAgTG9nKCJJbml0aWFsaXplZCBzZWVkID0gMHglWCIsIHNlZWQpOworI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBzaXplX3Qgb3RJbnN0YW5jZUJ1ZmZlckxlbmd0aCA9IDA7CisgICAgdWludDhfdCAqb3RJbnN0YW5jZUJ1ZmZlciA9IE5VTEw7CisKKyAgICAvLyBDYWxsIHRvIHF1ZXJ5IHRoZSBidWZmZXIgc2l6ZQorICAgICh2b2lkKW90SW5zdGFuY2VJbml0KE5VTEwsICZvdEluc3RhbmNlQnVmZmVyTGVuZ3RoKTsKKworICAgIC8vIENhbGwgdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlcgorICAgIG90SW5zdGFuY2VCdWZmZXIgPSAodWludDhfdCAqKW1hbGxvYyhvdEluc3RhbmNlQnVmZmVyTGVuZ3RoKTsKKyAgICBWZXJpZnlPclF1aXQob3RJbnN0YW5jZUJ1ZmZlciAhPSBOVUxMLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG90SW5zdGFuY2UiKTsKKyAgICBtZW1zZXQob3RJbnN0YW5jZUJ1ZmZlciwgMCwgb3RJbnN0YW5jZUJ1ZmZlckxlbmd0aCk7CisKKyAgICAvLyBJbml0aWFsaXplIE9wZW5UaHJlYWQgd2l0aCB0aGUgYnVmZmVyCisgICAgYUluc3RhbmNlID0gb3RJbnN0YW5jZUluaXQob3RJbnN0YW5jZUJ1ZmZlciwgJm90SW5zdGFuY2VCdWZmZXJMZW5ndGgpOworI2Vsc2UKKyAgICBhSW5zdGFuY2UgPSBvdEluc3RhbmNlSW5pdFNpbmdsZSgpOworI2VuZGlmCisKKyAgICBWZXJpZnlPclF1aXQoYUluc3RhbmNlICE9IE5VTEwsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBvdEluc3RhbmNlIik7CisKKyAgICAvLyBTdGFydCB0aGUgVGhyZWFkIG5ldHdvcmsKKyAgICBvdExpbmtTZXRQYW5JZChhSW5zdGFuY2UsIChvdFBhbklkKTB4RkFDRSk7CisgICAgb3RJcDZTZXRFbmFibGVkKGFJbnN0YW5jZSwgdHJ1ZSk7CisgICAgb3RUaHJlYWRTZXRFbmFibGVkKGFJbnN0YW5jZSwgdHJ1ZSk7CisKKyAgICB1aW50MzJfdCBjb3VudFJlY3YgPSAwOworCisgICAgd2hpbGUgKG90UGxhdEFsYXJtR2V0Tm93KCkgPCB0RW5kKQorICAgIHsKKyAgICAgICAgb3RUYXNrbGV0c1Byb2Nlc3MoYUluc3RhbmNlKTsKKworICAgICAgICBpZiAoZ190ZXN0UGxhdEFsYXJtU2V0ICYmIG90UGxhdEFsYXJtR2V0Tm93KCkgPj0gZ190ZXN0UGxhdEFsYXJtTmV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ190ZXN0UGxhdEFsYXJtU2V0ID0gZmFsc2U7CisgICAgICAgICAgICBvdFBsYXRBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ19mUmFkaW9FbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZ19mVHJhbnNtaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ19mVHJhbnNtaXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShhSW5zdGFuY2UsICZnX1RyYW5zbWl0UmFkaW9GcmFtZSwgTlVMTCwgT1RfRVJST1JfTk9ORSk7CisjaWZkZWYgREJHX0ZVWloKKyAgICAgICAgICAgICAgICBMb2coIjw9PSB0cmFuc21pdCIpOworI2VuZGlmCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChnX1JlY3ZDaGFubmVsICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWludDhfdCBmdXp6UmVjdkJ1ZmZbMTI4XTsKKyAgICAgICAgICAgICAgICBvdFJhZGlvRnJhbWUgZnV6elBhY2tldDsKKworICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHJhZGlvIHBhY2tldCB3aXRoIGEgcmFuZG9tIGxlbmd0aAorICAgICAgICAgICAgICAgIG1lbXNldCgmZnV6elBhY2tldCwgMCwgc2l6ZW9mKGZ1enpQYWNrZXQpKTsKKyAgICAgICAgICAgICAgICBmdXp6UGFja2V0Lm1Qc2R1ID0gZnV6elJlY3ZCdWZmOworICAgICAgICAgICAgICAgIGZ1enpQYWNrZXQubUNoYW5uZWwgPSBnX1JlY3ZDaGFubmVsOworICAgICAgICAgICAgICAgIGZ1enpQYWNrZXQubUxlbmd0aCA9ICh1aW50OF90KShvdFBsYXRSYW5kb21HZXQoKSAlIDEyNyk7CisKKyAgICAgICAgICAgICAgICAvLyBQb3B1bGF0ZSB0aGUgbGVuZ3RoIHdpdGggcmFuZG9tCisgICAgICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgZnV6elBhY2tldC5tTGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmdXp6UmVjdkJ1ZmZbaV0gPSAodWludDhfdClvdFBsYXRSYW5kb21HZXQoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZ2xvYmFsIGZsYWcKKyAgICAgICAgICAgICAgICBnX1JlY3ZDaGFubmVsID0gMDsKKworICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHRoZSByZWNlaXZlIGNvbXBsZXRlCisgICAgICAgICAgICAgICAgb3RQbGF0UmFkaW9SZWNlaXZlRG9uZShhSW5zdGFuY2UsICZmdXp6UGFja2V0LCBPVF9FUlJPUl9OT05FKTsKKworICAgICAgICAgICAgICAgIGNvdW50UmVjdisrOworI2lmZGVmIERCR19GVVpaCisgICAgICAgICAgICAgICAgTG9nKCI8PT0gcmVjZWl2ZSAoJWxsdSwgJXUgYnl0ZXMpIiwgY291bnRSZWN2LCBmdXp6UGFja2V0Lm1MZW5ndGgpOworI2VuZGlmCisKKyAgICAgICAgICAgICAgICAvLyBIYWNrIHRvIGdldCBhIHJlY2VpdmUgcG9sbCBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgIG90TGlua1NldENoYW5uZWwoYUluc3RhbmNlLCAxMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2coIiV1IHBhY2tldHMgcmVjZWl2ZWQiLCBjb3VudFJlY3YpOworCisgICAgLy8gQ2xlYW4gdXAgdGhlIGluc3RhbmNlCisgICAgb3RJbnN0YW5jZUZpbmFsaXplKGFJbnN0YW5jZSk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBmcmVlKG90SW5zdGFuY2VCdWZmZXIpOworI2VuZGlmCit9CisKKyNpZmRlZiBFTkFCTEVfVEVTVF9NQUlOCitpbnQgbWFpbih2b2lkKQoreworICAgIFRlc3RGdXp6KDMwKTsKKyAgICBwcmludGYoIkFsbCB0ZXN0cyBwYXNzZWRcbiIpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfaG1hY19zaGEyNTYuY3BwIGIvdGVzdHMvdW5pdC90ZXN0X2htYWNfc2hhMjU2LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQ4ODExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X2htYWNfc2hhMjU2LmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL2htYWNfc2hhMjU2LmhwcCIKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAidGVzdF9wbGF0Zm9ybS5oIgorI2luY2x1ZGUgInRlc3RfdXRpbC5oIgorCit2b2lkIFRlc3RIbWFjU2hhMjU2KHZvaWQpCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdAorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqa2V5OworICAgICAgICBjb25zdCBjaGFyICpkYXRhOworICAgICAgICB1aW50OF90IGhhc2hbb3Q6OkNyeXB0bzo6SG1hY1NoYTI1Njo6a0hhc2hTaXplXTsKKyAgICB9IHRlc3RzW10gPQorICAgIHsKKyAgICAgICAgeworICAgICAgICAgICAgIlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiIiwKKyAgICAgICAgICAgICJIaSBUaGVyZSIsCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgMHhiMCwgMHgzNCwgMHg0YywgMHg2MSwgMHhkOCwgMHhkYiwgMHgzOCwgMHg1MywKKyAgICAgICAgICAgICAgICAweDVjLCAweGE4LCAweGFmLCAweGNlLCAweGFmLCAweDBiLCAweGYxLCAweDJiLAorICAgICAgICAgICAgICAgIDB4ODgsIDB4MWQsIDB4YzIsIDB4MDAsIDB4YzksIDB4ODMsIDB4M2QsIDB4YTcsCisgICAgICAgICAgICAgICAgMHgyNiwgMHhlOSwgMHgzNywgMHg2YywgMHgyZSwgMHgzMiwgMHhjZiwgMHhmNywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAge30sCisgICAgICAgIH0sCisgICAgfTsKKworICAgIG90SW5zdGFuY2UgKmluc3RhbmNlID0gdGVzdEluaXRJbnN0YW5jZSgpOworICAgIG90OjpDcnlwdG86OkhtYWNTaGEyNTYgaG1hYzsKKyAgICB1aW50OF90IGhhc2hbb3Q6OkNyeXB0bzo6SG1hY1NoYTI1Njo6a0hhc2hTaXplXTsKKworICAgIFZlcmlmeU9yUXVpdChpbnN0YW5jZSAhPSBOVUxMLCAiTnVsbCBPcGVuVGhyZWFkIGluc3RhbmNlIik7CisKKyAgICBmb3IgKGludCBpID0gMDsgdGVzdHNbaV0ua2V5ICE9IE5VTEw7IGkrKykKKyAgICB7CisgICAgICAgIGhtYWMuU3RhcnQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KHRlc3RzW2ldLmtleSksIHN0YXRpY19jYXN0PHVpbnQxNl90PihzdHJsZW4odGVzdHNbaV0ua2V5KSkpOworICAgICAgICBobWFjLlVwZGF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4odGVzdHNbaV0uZGF0YSksIHN0YXRpY19jYXN0PHVpbnQxNl90PihzdHJsZW4odGVzdHNbaV0uZGF0YSkpKTsKKyAgICAgICAgaG1hYy5GaW5pc2goaGFzaCk7CisKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1lbWNtcChoYXNoLCB0ZXN0c1tpXS5oYXNoLCBzaXplb2YodGVzdHNbaV0uaGFzaCkpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAiSE1BQy1TSEEtMjU2IGZhaWxlZFxuIik7CisgICAgfQorCisgICAgdGVzdEZyZWVJbnN0YW5jZShpbnN0YW5jZSk7Cit9CisKKyNpZmRlZiBFTkFCTEVfVEVTVF9NQUlOCitpbnQgbWFpbih2b2lkKQoreworICAgIFRlc3RIbWFjU2hhMjU2KCk7CisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X2xpbmtfcXVhbGl0eS5jcHAgYi90ZXN0cy91bml0L3Rlc3RfbGlua19xdWFsaXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjYxYzM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X2xpbmtfcXVhbGl0eS5jcHAKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgInRocmVhZC9saW5rX3F1YWxpdHkuaHBwIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKworbmFtZXNwYWNlIG90IHsKKworZW51bQoreworICAgIGtNYXhSc3NWYWx1ZSAgICAgICAgPSAwLAorICAgIGtNaW5Sc3NWYWx1ZSAgICAgICAgPSAtMTI4LAorCisgICAga1N0cmluZ0J1ZmZmZXJTaXplICA9IDgwLAorCisgICAga1Jzc0F2ZXJhZ2VNYXhEaWZmICA9IDE2LAorICAgIGtOdW1Sc3NBZGRzICAgICAgICAgPSAzMDAsCisKKyAgICBrRW5jb2RlZEF2ZXJhZ2VCaXRTaGlmdCA9IDMsCisgICAga0VuY29kZWRBdmVyYWdlTXVsdGlwbGUgPSAoMSA8PCBrRW5jb2RlZEF2ZXJhZ2VCaXRTaGlmdCksCisgICAga0VuY29kZWRBdmVyYWdlQml0TWFzayAgPSAoMSA8PCBrRW5jb2RlZEF2ZXJhZ2VCaXRTaGlmdCkgLSAxLAorfTsKKworI2RlZmluZSBNSU5fUlNTKF9yc3MxLCBfcnNzMikgICAoKChfcnNzMSkgPCAoX3JzczIpKSA/IChfcnNzMSkgOiAoX3JzczIpKQorI2RlZmluZSBNQVhfUlNTKF9yc3MxLCBfcnNzMikgICAoKChfcnNzMSkgPCAoX3JzczIpKSA/IChfcnNzMikgOiAoX3JzczEpKQorI2RlZmluZSBBQlModmFsdWUpICAgICAgICAgICAgICAoKCh2YWx1ZSkgPj0gMCkgPyAodmFsdWUpIDogLSh2YWx1ZSkpCisKKy8vIFRoaXMgc3RydWN0IGNvbnRhaW5zIFJTUyB2YWx1ZXMgYW5kIHRlc3QgZGF0YSBmb3IgY2hlY2tpbmcgbGluayBxdWFsaXR5IGluZm8gY2Fsc3MuCitzdHJ1Y3QgUnNzVGVzdERhdGEKK3sKKyAgICBjb25zdCBpbnQ4X3QgKm1Sc3NMaXN0OyAgICAgICAgICAgICAgICAgLy8gQXJyYXkgb2YgUlNTIHZhbHVlcy4KKyAgICBzaXplX3QgICAgICAgIG1Sc3NMaXN0U2l6ZTsgICAgICAgICAgICAgLy8gU2l6ZSBvZiBSU1MgbGlzdC4KKyAgICB1aW50OF90ICAgICAgIG1FeHBlY3RlZExpbmtRdWFsaXR5OyAgICAgLy8gRXhwZWN0ZWQgZmluYWwgbGluayBxdWFsaXR5IHZhbHVlLgorfTsKKworaW50OF90IHNOb2lzZUZsb29yID0gLTEwMDsgIC8vIGRCbQorCisvLyBDaGVja3MgdGhlIGVuY29kZWQgYXZlcmFnZSBSU1MgdmFsdWUgdG8gbWF0Y2ggdGhlIHZhbHVlIGZyb20gR2V0QXZlcmFnZVJzcygpLgordm9pZCBWZXJpZnlFbmNvZGVkUnNzVmFsdWUoTGlua1F1YWxpdHlJbmZvICZhTGlua0luZm8pCit7CisgICAgaW50OF90ICAgcnNzID0gYUxpbmtJbmZvLkdldEF2ZXJhZ2VSc3MoKTsKKyAgICB1aW50MTZfdCBlbmNvZGVkUnNzID0gYUxpbmtJbmZvLkdldEF2ZXJhZ2VSc3NBc0VuY29kZWRXb3JkKCk7CisKKyAgICBpZiAocnNzICE9IE9UX1JBRElPX1JTU0lfSU5WQUxJRCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yUXVpdChyc3MgPT0gLXN0YXRpY19jYXN0PGludDE2X3Q+KChlbmNvZGVkUnNzICsgKGtFbmNvZGVkQXZlcmFnZU11bHRpcGxlIC8gMikpID4+IGtFbmNvZGVkQXZlcmFnZUJpdFNoaWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIGZhaWxlZCAtIEVjb2RlZCBSU1MgZG9lcyBub3QgbWF0Y2ggdGhlIHZhbHVlIGZyb20gR2V0QXZlcmFnZVJzcygpLiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBWZXJpZnlPclF1aXQoZW5jb2RlZFJzcyA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3RMaW5rUXVhbGl0eUluZm8gZmFpbGVkIC0gRWNvZGVkIFJTUyBkb2VzIG5vdCBtYXRjaCB0aGUgdmFsdWUgZnJvbSBHZXRBdmVyYWdlUnNzKCkuIik7CisgICAgfQorfQorCisvLyBUaGlzIGZ1bmN0aW9uIHByaW50cyB0aGUgdmFsdWVzIGluIHRoZSBwYXNzZWQgaW4gbGluayBpbmZvIGluc3RhbmNlLiBJdCBpcyBpbnZva2VkIGFzIHRoZSBmaW5hbCBzdGVwIGluIHRlc3QtY2FzZS4KK3ZvaWQgUHJpbnRPdXRjb21lKExpbmtRdWFsaXR5SW5mbyAmYUxpbmtJbmZvKQoreworICAgIGNoYXIgICAgIHN0cmluZ0J1ZltrU3RyaW5nQnVmZmZlclNpemVdOworCisgICAgU3VjY2Vzc09yUXVpdChhTGlua0luZm8uR2V0QXZlcmFnZVJzc0FzU3RyaW5nKHN0cmluZ0J1Ziwgc2l6ZW9mKHN0cmluZ0J1ZikpLAorICAgICAgICAgICAgICAgICAgIlRlc3RMaW5rUXVhbGl0eUluZm8gZmFpbGVkIC0gR2V0QXZlcmFnZVJzc0FzU3RyaW5nKCkgZmFpbGVkLiIpOworCisgICAgcHJpbnRmKCJBdmVSc3MgPSAlLTRkLCBcIiUtMTRzXCIsICIsIGFMaW5rSW5mby5HZXRBdmVyYWdlUnNzKCksIHN0cmluZ0J1Zik7CisgICAgcHJpbnRmKCJMaW5rTWFyZ2luID0gJS00ZCwgTGlua1F1YWxpdHkgPSAlZCIsIGFMaW5rSW5mby5HZXRMaW5rTWFyZ2luKHNOb2lzZUZsb29yKSwKKyAgICAgICAgICAgYUxpbmtJbmZvLkdldExpbmtRdWFsaXR5KHNOb2lzZUZsb29yKSk7CisKKyAgICAvLyBUaGlzIHRlc3QtY2FzZSBzdWNjZWVkZWQuCisgICAgcHJpbnRmKCIgLT4gUEFTU1xuIik7Cit9CisKK3ZvaWQgVGVzdExpbmtRdWFsaXR5RGF0YShSc3NUZXN0RGF0YSBhblJzc0RhdGEpCit7CisgICAgTGlua1F1YWxpdHlJbmZvIGxpbmtJbmZvOworICAgIGludDhfdCByc3MsIGF2ZSwgbWluLCBtYXg7CisgICAgc2l6ZV90IGk7CisKKyAgICBwcmludGYoIi0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtXG4iKTsKKyAgICBtaW4gPSBrTWluUnNzVmFsdWU7CisgICAgbWF4ID0ga01heFJzc1ZhbHVlOworCisgICAgZm9yIChpID0gMDsgaSA8IGFuUnNzRGF0YS5tUnNzTGlzdFNpemU7IGkrKykKKyAgICB7CisgICAgICAgIHJzcyA9IGFuUnNzRGF0YS5tUnNzTGlzdFtpXTsKKyAgICAgICAgbWluID0gTUlOX1JTUyhyc3MsIG1pbik7CisgICAgICAgIG1heCA9IE1BWF9SU1MocnNzLCBtYXgpOworICAgICAgICBsaW5rSW5mby5BZGRSc3Moc05vaXNlRmxvb3IsIHJzcyk7CisgICAgICAgIGF2ZSA9IGxpbmtJbmZvLkdldEF2ZXJhZ2VSc3MoKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGF2ZSA+PSBtaW4sCisgICAgICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBHZXRBdmVyYWdlUnNzKCkgaXMgc21hbGxlciB0aGFuIG1pbiB2YWx1ZS4iKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGF2ZSA8PSBtYXgsCisgICAgICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBHZXRBdmVyYWdlUnNzKCkgaXMgbGFyZ2VyIHRoYW4gbWluIHZhbHVlIik7CisgICAgICAgIFZlcmlmeUVuY29kZWRSc3NWYWx1ZShsaW5rSW5mbyk7CisgICAgICAgIHByaW50ZigiJTAydSkgQWRkUnNzKCU0ZCk6ICIsICh1bnNpZ25lZCBpbnQpaSwgcnNzKTsKKyAgICAgICAgUHJpbnRPdXRjb21lKGxpbmtJbmZvKTsKKyAgICB9CisKKyAgICBWZXJpZnlPclF1aXQobGlua0luZm8uR2V0TGlua1F1YWxpdHkoc05vaXNlRmxvb3IpID09IGFuUnNzRGF0YS5tRXhwZWN0ZWRMaW5rUXVhbGl0eSwKKyAgICAgICAgICAgICAgICAgIlRlc3RMaW5rUXVhbGl0eUluZm8gZmFpbGVkIC0gR2V0TGlua1F1YWxpdHkoKSBpcyBpbmNvcnJlY3QiKTsKK30KKwordm9pZCBUZXN0UnNzQXZlcmFnaW5nKHZvaWQpCit7CisgICAgTGlua1F1YWxpdHlJbmZvIGxpbmtJbmZvOworICAgIGludDhfdCAgICAgICAgICByc3MsIHJzczIsIGF2ZTsKKyAgICBpbnQxNl90ICAgICAgICAgZGlmZjsKKyAgICBzaXplX3QgICAgICAgICAgaSwgaiwgazsKKyAgICBjb25zdCBpbnQ4X3QgICAgcnNzVmFsdWVzW10gPSB7IGtNaW5Sc3NWYWx1ZSwgLTcwLCAtNDAsIC00MSwgLTEwLCBrTWF4UnNzVmFsdWV9OworCisgICAgLy8tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KKyAgICAvLyBWYWx1ZXMgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uCisKKyAgICBwcmludGYoIlxuQWZ0ZXIgSW5pdGlhbGl6YXRpb246ICIpOworICAgIFZlcmlmeU9yUXVpdChsaW5rSW5mby5HZXRBdmVyYWdlUnNzKCkgPT0gT1RfUkFESU9fUlNTSV9JTlZBTElELAorICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBJbml0YWwgdmFsdWUgZnJvbSBHZXRBdmVyYWdlUnNzKCkgaXMgaW5jb3JyZWN0LiIpOworICAgIFZlcmlmeU9yUXVpdChsaW5rSW5mby5HZXRMaW5rTWFyZ2luKHNOb2lzZUZsb29yKSA9PSAwLAorICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBJbml0YWwgdmFsdWUgZm9yIGxpbmsgbWFyZ2luIGlzIGluY29ycmVjdC4iKTsKKyAgICBWZXJpZnlFbmNvZGVkUnNzVmFsdWUobGlua0luZm8pOworICAgIFByaW50T3V0Y29tZShsaW5rSW5mbyk7CisKKyAgICAvLy0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorICAgIC8vIEFkZGluZyBhIHNpbmdsZSB2YWx1ZQorICAgIHJzcyA9IC03MDsKKyAgICBwcmludGYoIkFkZFJzcyglZCk6ICIsIHJzcyk7CisgICAgbGlua0luZm8uQWRkUnNzKHNOb2lzZUZsb29yLCByc3MpOworICAgIFZlcmlmeU9yUXVpdChsaW5rSW5mby5HZXRBdmVyYWdlUnNzKCkgPT0gcnNzLAorICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyAtIEdldEF2ZXJhZ2VSc3MoKSBmYWlsZWQgYWZ0ZXIgYSBzaW5nbGUgQWRkUnNzKCkuIik7CisgICAgVmVyaWZ5RW5jb2RlZFJzc1ZhbHVlKGxpbmtJbmZvKTsKKyAgICBQcmludE91dGNvbWUobGlua0luZm8pOworCisgICAgLy8tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KKyAgICAvLyBDbGVhcgorCisgICAgcHJpbnRmKCJDbGVhcigpOiAiKTsKKyAgICBsaW5rSW5mby5DbGVhcigpOworICAgIFZlcmlmeU9yUXVpdChsaW5rSW5mby5HZXRBdmVyYWdlUnNzKCkgPT0gT1RfUkFESU9fUlNTSV9JTlZBTElELAorICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBHZXRBdmVyYWdlUnNzKCkgYWZ0ZXIgQ2xlYXIoKSBpcyBpbmNvcnJlY3QuIik7CisgICAgVmVyaWZ5T3JRdWl0KGxpbmtJbmZvLkdldExpbmtNYXJnaW4oc05vaXNlRmxvb3IpID09IDAsCisgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIGZhaWxlZCAtIGxpbmsgbWFyZ2luIHZhbHVlIGFmdGVyIENsZWFyKCkgaXMgaW5jb3JyZWN0LiIpOworICAgIFZlcmlmeUVuY29kZWRSc3NWYWx1ZShsaW5rSW5mbyk7CisgICAgUHJpbnRPdXRjb21lKGxpbmtJbmZvKTsKKworICAgIC8vLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCisgICAgLy8gQWRkaW5nIHRoZSBzYW1lIHZhbHVlIG1hbnkgdGltZXMuCisKKyAgICBwcmludGYoIi0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtXG4iKTsKKworICAgIGZvciAoaiA9IDA7IGogPCBzaXplb2YocnNzVmFsdWVzKTsgaisrKQorICAgIHsKKyAgICAgICAgbGlua0luZm8uQ2xlYXIoKTsKKyAgICAgICAgcnNzID0gcnNzVmFsdWVzW2pdOworICAgICAgICBwcmludGYoIkFkZFJzcyglNGQpICVkIHRpbWVzOiAiLCByc3MsIGtOdW1Sc3NBZGRzKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwga051bVJzc0FkZHM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbGlua0luZm8uQWRkUnNzKHNOb2lzZUZsb29yLCByc3MpOworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGxpbmtJbmZvLkdldEF2ZXJhZ2VSc3MoKSA9PSByc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RMaW5rUXVhbGl0eUluZm8gZmFpbGVkIC0gR2V0QXZlcmFnZVJzcygpIHJldHVybmVkIGluY29ycmVjdCB2YWx1ZS4iKTsKKyAgICAgICAgICAgIFZlcmlmeUVuY29kZWRSc3NWYWx1ZShsaW5rSW5mbyk7CisgICAgICAgIH0KKworICAgICAgICBQcmludE91dGNvbWUobGlua0luZm8pOworCisgICAgfQorCisgICAgLy8tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KKyAgICAvLyBBZGRpbmcgdHdvIFJTUyB2YWx1ZXM6CisKKyAgICBwcmludGYoIi0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtXG4iKTsKKworICAgIGZvciAoaiA9IDA7IGogPCBzaXplb2YocnNzVmFsdWVzKTsgaisrKQorICAgIHsKKyAgICAgICAgcnNzID0gcnNzVmFsdWVzW2pdOworCisgICAgICAgIGZvciAoayA9IDA7IGsgPCBzaXplb2YocnNzVmFsdWVzKTsgaysrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoayA9PSBqKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByc3MyID0gcnNzVmFsdWVzW2tdOworICAgICAgICAgICAgbGlua0luZm8uQ2xlYXIoKTsKKyAgICAgICAgICAgIGxpbmtJbmZvLkFkZFJzcyhzTm9pc2VGbG9vciwgcnNzKTsKKyAgICAgICAgICAgIGxpbmtJbmZvLkFkZFJzcyhzTm9pc2VGbG9vciwgcnNzMik7CisgICAgICAgICAgICBwcmludGYoIkFkZFJzcyglNGQpLCBBZGRSc3MoJTRkKTogIiwgcnNzLCByc3MyKTsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChsaW5rSW5mby5HZXRBdmVyYWdlUnNzKCkgPT0gKChyc3MgKyByc3MyKSA+PiAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBHZXRBdmVyYWdlUnNzKCkgcmV0dXJuZWQgaW5jb3JyZWN0IHZhbHVlLiIpOworICAgICAgICAgICAgVmVyaWZ5RW5jb2RlZFJzc1ZhbHVlKGxpbmtJbmZvKTsKKyAgICAgICAgICAgIFByaW50T3V0Y29tZShsaW5rSW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorICAgIC8vIEFkZGluZyBvbmUgdmFsdWUgbWFueSB0aW1lcyBhbmQgYSBkaWZmZXJlbnQgdmFsdWUgb25jZToKKworICAgIHByaW50ZigiLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC1cbiIpOworCisgICAgZm9yIChqID0gMDsgaiA8IHNpemVvZihyc3NWYWx1ZXMpOyBqKyspCisgICAgeworICAgICAgICByc3MgPSByc3NWYWx1ZXNbal07CisKKyAgICAgICAgZm9yIChrID0gMDsgayA8IHNpemVvZihyc3NWYWx1ZXMpOyBrKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChrID09IGopCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJzczIgPSByc3NWYWx1ZXNba107CisgICAgICAgICAgICBsaW5rSW5mby5DbGVhcigpOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwga051bVJzc0FkZHM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsaW5rSW5mby5BZGRSc3Moc05vaXNlRmxvb3IsIHJzcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpbmtJbmZvLkFkZFJzcyhzTm9pc2VGbG9vciwgcnNzMik7CisgICAgICAgICAgICBwcmludGYoIkFkZFJzcyglNGQpICVkIHRpbWVzLCBBZGRSc3MoJTRkKTogIiwgcnNzLCBrTnVtUnNzQWRkcywgcnNzMik7CisgICAgICAgICAgICBhdmUgPSBsaW5rSW5mby5HZXRBdmVyYWdlUnNzKCk7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQoYXZlID49IE1JTl9SU1MocnNzLCByc3MyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBHZXRBdmVyYWdlUnNzKCkgcmV0dXJuZWQgaW5jb3JyZWN0IHZhbHVlLiIpOworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGF2ZSA8PSBNQVhfUlNTKHJzcywgcnNzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RMaW5rUXVhbGl0eUluZm8gZmFpbGVkIC0gR2V0QXZlcmFnZVJzcygpIHJldHVybmVkIGluY29ycmVjdCB2YWx1ZS4iKTsKKyAgICAgICAgICAgIFZlcmlmeUVuY29kZWRSc3NWYWx1ZShsaW5rSW5mbyk7CisgICAgICAgICAgICBQcmludE91dGNvbWUobGlua0luZm8pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KKyAgICAvLyBBZGRpbmcgdHdvIGFsdGVyYWluZyB2YWx1ZXMgbWFueSB0aW1lczoKKworICAgIHByaW50ZigiLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC1cbiIpOworCisgICAgZm9yIChqID0gMDsgaiA8IHNpemVvZihyc3NWYWx1ZXMpOyBqKyspCisgICAgeworICAgICAgICByc3MgPSByc3NWYWx1ZXNbal07CisKKyAgICAgICAgZm9yIChrID0gMDsgayA8IHNpemVvZihyc3NWYWx1ZXMpOyBrKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChrID09IGopCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJzczIgPSByc3NWYWx1ZXNba107CisgICAgICAgICAgICBsaW5rSW5mby5DbGVhcigpOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwga051bVJzc0FkZHM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsaW5rSW5mby5BZGRSc3Moc05vaXNlRmxvb3IsIHJzcyk7CisgICAgICAgICAgICAgICAgbGlua0luZm8uQWRkUnNzKHNOb2lzZUZsb29yLCByc3MyKTsKKyAgICAgICAgICAgICAgICBhdmUgPSBsaW5rSW5mby5HZXRBdmVyYWdlUnNzKCk7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGF2ZSA+PSBNSU5fUlNTKHJzcywgcnNzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIGZhaWxlZCAtIEdldEF2ZXJhZ2VSc3MoKSBpcyBzbWFsbGVyIHRoYW4gbWluIHZhbHVlLiIpOworICAgICAgICAgICAgICAgIFZlcmlmeU9yUXVpdChhdmUgPD0gTUFYX1JTUyhyc3MsIHJzczIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBHZXRBdmVyYWdlUnNzKCkgaXMgbGFyZ2VyIHRoYW4gbWluIHZhbHVlLiIpOworICAgICAgICAgICAgICAgIGRpZmYgPSBhdmU7CisgICAgICAgICAgICAgICAgZGlmZiAtPSAocnNzICsgcnNzMikgPj4gMTsKKyAgICAgICAgICAgICAgICBWZXJpZnlPclF1aXQoQUJTKGRpZmYpIDw9IGtSc3NBdmVyYWdlTWF4RGlmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RMaW5rUXVhbGl0eUluZm8gZmFpbGVkIC0gR2V0QXZlcmFnZVJzcygpIGlzIGluY29ycmVjdCIpOworICAgICAgICAgICAgICAgIFZlcmlmeUVuY29kZWRSc3NWYWx1ZShsaW5rSW5mbyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByaW50ZigiW0FkZFJzcyglNGQpLCAgQWRkUnNzKCU0ZCldICVkIHRpbWVzOiAiLCByc3MsIHJzczIsIGtOdW1Sc3NBZGRzKTsKKyAgICAgICAgICAgIFByaW50T3V0Y29tZShsaW5rSW5mbyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGVzdExpbmtRdWFsaXR5Q2FsY3VsYXRpb25zKHZvaWQpCit7CisgICAgY29uc3QgaW50OF90ICByc3NMaXN0MVtdID0geyAtODEsIC04MCwgLTc5LCAtNzgsIC03NiwgLTgwLCAtNzcsIC03NSwgLTc3LCAtNzYsIC03NywgLTc0fTsKKyAgICBjb25zdCBSc3NUZXN0RGF0YSByc3NEYXRhMSA9CisgICAgeworICAgICAgICByc3NMaXN0MSwgICAgICAgICAgIC8vIG1Sc3NMaXN0CisgICAgICAgIHNpemVvZihyc3NMaXN0MSksICAgLy8gbVJzc0xpc3RTaXplCisgICAgICAgIDMgICAgICAgICAgICAgICAgICAgLy8gbUV4cGVjdGVkTGlua1F1YWxpdHkKKyAgICB9OworCisgICAgY29uc3QgaW50OF90ICByc3NMaXN0MltdID0geyAtOTAsIC04MCwgLTg1IH07CisgICAgY29uc3QgUnNzVGVzdERhdGEgcnNzRGF0YTIgPQorICAgIHsKKyAgICAgICAgcnNzTGlzdDIsICAgICAgICAgICAvLyBtUnNzTGlzdAorICAgICAgICBzaXplb2YocnNzTGlzdDIpLCAgIC8vIG1Sc3NMaXN0U2l6ZQorICAgICAgICAyICAgICAgICAgICAgICAgICAgIC8vIG1FeHBlY3RlZExpbmtRdWFsaXR5CisgICAgfTsKKworICAgIGNvbnN0IGludDhfdCAgcnNzTGlzdDNbXSA9IHsgLTk1LCAtOTYsIC05OCwgLTk5LCAtMTAwLCAtMTAwLCAtOTgsIC05OSwgLTEwMCwgLTEwMCwgLTEwMCwgLTEwMCwgLTEwMCB9OworICAgIGNvbnN0IFJzc1Rlc3REYXRhIHJzc0RhdGEzID0KKyAgICB7CisgICAgICAgIHJzc0xpc3QzLCAgICAgICAgICAgLy8gbVJzc0xpc3QKKyAgICAgICAgc2l6ZW9mKHJzc0xpc3QzKSwgICAvLyBtUnNzTGlzdFNpemUKKyAgICAgICAgMCAgICAgICAgICAgICAgICAgICAvLyBtRXhwZWN0ZWRMaW5rUXVhbGl0eQorICAgIH07CisKKyAgICBjb25zdCBpbnQ4X3QgIHJzc0xpc3Q0W10gPSB7IC03NSwgLTEwMCwgLTEwMCwgLTEwMCwgLTEwMCwgLTEwMCwgLTk1LCAtOTIsIC05MywgLTk0LCAtOTMsIC05MyB9OworICAgIGNvbnN0IFJzc1Rlc3REYXRhIHJzc0RhdGE0ID0KKyAgICB7CisgICAgICAgIHJzc0xpc3Q0LCAgICAgICAgICAgLy8gbVJzc0xpc3QKKyAgICAgICAgc2l6ZW9mKHJzc0xpc3Q0KSwgICAvLyBtUnNzTGlzdFNpemUKKyAgICAgICAgMSAgICAgICAgICAgICAgICAgICAvLyBtRXhwZWN0ZWRMaW5rUXVhbGl0eQorICAgIH07CisKKyAgICBUZXN0TGlua1F1YWxpdHlEYXRhKHJzc0RhdGExKTsKKyAgICBUZXN0TGlua1F1YWxpdHlEYXRhKHJzc0RhdGEyKTsKKyAgICBUZXN0TGlua1F1YWxpdHlEYXRhKHJzc0RhdGEzKTsKKyAgICBUZXN0TGlua1F1YWxpdHlEYXRhKHJzc0RhdGE0KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNpZmRlZiBFTkFCTEVfVEVTVF9NQUlOCitpbnQgbWFpbih2b2lkKQoreworICAgIG90OjpUZXN0UnNzQXZlcmFnaW5nKCk7CisgICAgb3Q6OlRlc3RMaW5rUXVhbGl0eUNhbGN1bGF0aW9ucygpOworICAgIHByaW50ZigiQWxsIHRlc3RzIHBhc3NlZFxuIik7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF9sb3dwYW4uY3BwIGIvdGVzdHMvdW5pdC90ZXN0X2xvd3Bhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk3YjAwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF9sb3dwYW4uY3BwCkBAIC0wLDAgKzEsMTk2NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInRlc3RfbG93cGFuLmhwcCIKKworI2luY2x1ZGUgInRlc3RfcGxhdGZvcm0uaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaHBwIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7Cit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKKworbmFtZXNwYWNlIG90IHsKKworb3RJbnN0YW5jZSAqc0luc3RhbmNlOworSXA2OjpJcDYgKnNJcDY7CitUaHJlYWROZXRpZiAqc1RocmVhZE5ldGlmOworTG93cGFuOjpMb3dwYW4gKnNMb3dwYW47CisKK3ZvaWQgVGVzdElwaGNWZWN0b3I6OkdldENvbXByZXNzZWRTdHJlYW0odWludDhfdCAqYUlwaGMsIHVpbnQxNl90ICZhSXBoY0xlbmd0aCkKK3sKKyAgICBtZW1jcHkoYUlwaGMsIG1JcGhjSGVhZGVyLm1EYXRhLCBtSXBoY0hlYWRlci5tTGVuZ3RoKTsKKyAgICBtZW1jcHkoYUlwaGMgKyBtSXBoY0hlYWRlci5tTGVuZ3RoLCBtUGF5bG9hZC5tRGF0YSwgbVBheWxvYWQubUxlbmd0aCk7CisKKyAgICBhSXBoY0xlbmd0aCA9IG1JcGhjSGVhZGVyLm1MZW5ndGggKyBtUGF5bG9hZC5tTGVuZ3RoOworfQorCit2b2lkIFRlc3RJcGhjVmVjdG9yOjpHZXRVbmNvbXByZXNzZWRTdHJlYW0odWludDhfdCAqYUlwNiwgdWludDE2X3QgJmFJcDZMZW5ndGgpCit7CisgICAgYUlwNkxlbmd0aCA9IDA7CisKKyAgICBtZW1jcHkoYUlwNiwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZtSXBIZWFkZXIpLCBzaXplb2YobUlwSGVhZGVyKSk7CisgICAgYUlwNkxlbmd0aCArPSBzaXplb2YobUlwSGVhZGVyKTsKKworICAgIGlmIChtRXh0SGVhZGVyLm1MZW5ndGgpCisgICAgeworICAgICAgICBtZW1jcHkoYUlwNiArIGFJcDZMZW5ndGgsIG1FeHRIZWFkZXIubURhdGEsIG1FeHRIZWFkZXIubUxlbmd0aCk7CisgICAgICAgIGFJcDZMZW5ndGggKz0gbUV4dEhlYWRlci5tTGVuZ3RoOworICAgIH0KKworICAgIGlmIChtSXBUdW5uZWxlZEhlYWRlci5HZXRQYXlsb2FkTGVuZ3RoKCkpCisgICAgeworICAgICAgICBtZW1jcHkoYUlwNiArIGFJcDZMZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmbUlwVHVubmVsZWRIZWFkZXIpLCBzaXplb2YobUlwVHVubmVsZWRIZWFkZXIpKTsKKyAgICAgICAgYUlwNkxlbmd0aCArPSBzaXplb2YobUlwVHVubmVsZWRIZWFkZXIpOworICAgIH0KKworICAgIGlmIChtVWRwSGVhZGVyLkdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgbWVtY3B5KGFJcDYgKyBhSXA2TGVuZ3RoLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJm1VZHBIZWFkZXIpLCBzaXplb2YobVVkcEhlYWRlcikpOworICAgICAgICBhSXA2TGVuZ3RoICs9IHNpemVvZihtVWRwSGVhZGVyKTsKKyAgICB9CisKKyAgICBtZW1jcHkoYUlwNiArIGFJcDZMZW5ndGgsIG1QYXlsb2FkLm1EYXRhLCBtUGF5bG9hZC5tTGVuZ3RoKTsKKyAgICBhSXA2TGVuZ3RoICs9IG1QYXlsb2FkLm1MZW5ndGg7Cit9CisKK3ZvaWQgVGVzdElwaGNWZWN0b3I6OkdldFVuY29tcHJlc3NlZFN0cmVhbShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBTdWNjZXNzT3JRdWl0KGFNZXNzYWdlLkFwcGVuZChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJm1JcEhlYWRlciksIHNpemVvZihtSXBIZWFkZXIpKSwKKyAgICAgICAgICAgICAgICAgICI2bG86IE1lc3NhZ2U6OkFwcGVuZCBmYWlsZWQiKTsKKworICAgIGlmIChtRXh0SGVhZGVyLm1MZW5ndGgpCisgICAgeworICAgICAgICBTdWNjZXNzT3JRdWl0KGFNZXNzYWdlLkFwcGVuZChtRXh0SGVhZGVyLm1EYXRhLCBtRXh0SGVhZGVyLm1MZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAgICI2bG86IE1lc3NhZ2U6OkFwcGVuZCBmYWlsZWQiKTsKKyAgICB9CisKKyAgICBpZiAobUlwVHVubmVsZWRIZWFkZXIuR2V0UGF5bG9hZExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yUXVpdChhTWVzc2FnZS5BcHBlbmQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZtSXBUdW5uZWxlZEhlYWRlciksIHNpemVvZihtSXBUdW5uZWxlZEhlYWRlcikpLAorICAgICAgICAgICAgICAgICAgICAgICI2bG86IE1lc3NhZ2U6OkFwcGVuZCBmYWlsZWQiKTsKKyAgICB9CisKKyAgICBpZiAobVVkcEhlYWRlci5HZXRMZW5ndGgoKSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPclF1aXQoYU1lc3NhZ2UuQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmbVVkcEhlYWRlciksIHNpemVvZihtVWRwSGVhZGVyKSksCisgICAgICAgICAgICAgICAgICAgICAgIjZsbzogTWVzc2FnZTo6QXBwZW5kIGZhaWxlZCIpOworICAgIH0KKworICAgIFN1Y2Nlc3NPclF1aXQoYU1lc3NhZ2UuQXBwZW5kKG1QYXlsb2FkLm1EYXRhLCBtUGF5bG9hZC5tTGVuZ3RoKSwgIjZsbzogTWVzc2FnZTo6QXBwZW5kIGZhaWxlZDUiKTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIFRocmVhZCBJbnRlcmZhY2UuCisgKgorICovCitzdGF0aWMgdm9pZCBJbml0KCkKK3sKKyAgICB1aW50OF90IG1lc2hMb2NhbFByZWZpeFtdID0gezB4ZmQsIDB4MDAsIDB4Y2EsIDB4ZmUsIDB4ZmEsIDB4Y2UsIDB4MTIsIDB4MzR9OworICAgIHNUaHJlYWROZXRpZi0+R2V0TWxlKCkuU2V0TWVzaExvY2FsUHJlZml4KG1lc2hMb2NhbFByZWZpeCk7CisKKyAgICAvLyBFbXVsYXRlIGdsb2JhbCBwcmVmaXhlcyB3aXRoIGNvbnRleHRlcy4KKyAgICB1aW50OF90IG1vY2tOZXR3b3JrRGF0YVtdID0KKyAgICB7CisgICAgICAgIC8vIFByZWZpeCAyMDAxOjI6MDoxOjovNjQKKyAgICAgICAgMHgwMywgMHgwZSwgLy8gUHJlZml4IFRMVgorICAgICAgICAweDAwLCAweDQwLAorICAgICAgICAweDIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorICAgICAgICAweDA3LCAweDAyLCAvLyA2TG9XUEFOIENvbnRleHQgSUQgVExWCisgICAgICAgIDB4MTEsIDB4NDAsIC8vIENvbnRleHQgSUQgPSAxLCBDID0gVFJVRQorCisgICAgICAgIC8vIFByZWZpeCAyMDAxOjI6MDoyOjovNjQKKyAgICAgICAgMHgwMywgMHgwZSwgLy8gUHJlZml4IFRMVgorICAgICAgICAweDAwLCAweDQwLAorICAgICAgICAweDIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorICAgICAgICAweDA3LCAweDAyLCAvLyA2TG9XUEFOIENvbnRleHQgSUQgVExWCisgICAgICAgIDB4MDIsIDB4NDAgIC8vIENvbnRleHQgSUQgPSAyLCBDID0gRkFMU0UKKyAgICB9OworCisgICAgc1RocmVhZE5ldGlmLT5HZXROZXR3b3JrRGF0YUxlYWRlcigpLlNldE5ldHdvcmtEYXRhKDAsIDAsIHRydWUsIG1vY2tOZXR3b3JrRGF0YSwgc2l6ZW9mKG1vY2tOZXR3b3JrRGF0YSkpOworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgY29tcHJlc3Npb24gb3IvYW5kIGRlY29tcHJlc3Npb24gYmFzZWQgb24gdGhlIGdpdmVuIHRlc3QgdmVjdG9yLgorICoKKyAqIEBub3RlIFBlcmZvcm1pbmcgZGVjb21wcmVzc2lvbiBhbmQgY29tcHJlc3Npb24gb24gdGhlIHNhbWUgTE9XUEFOX0lQSEMgZnJhbWUgbWF5IGdpdmUgZGlmZmVyZW50IHJlc3VsdC4KKyAqICAgICAgIFRoaXMgc2l0dWF0aW9uIG1heSBvY2N1ciB3aGVuIHNlbmRlciBkb2VzIG5vdCB1c2UgdGhlIGJlc3QgcG9zc2libGUgY29tcHJlc3Npb24sCisgKiAgICAgICBlLmcuIGRvZXNuJ3QgdXNlIExPV1BBTl9OSEMgZm9yIFVEUCAtIHdoaWNoIGlzIHN0aWxsIHZhbGlkLgorICoKKyAqIEBwYXJhbSBhVmVjdG9yICAgICBUZXN0IHZlY3RvciB0aGF0IGhhcyB0byBiZSB0ZXN0ZWQuCisgKiBAcGFyYW0gYUNvbXByZXNzICAgU2V0IHRvIFRSVUUsIGlmIGNvbXByZXNzaW9uIHNob3VsZCBiZSB0ZXN0ZWQuCisgKiBAcGFyYW0gYURlY29tcHJlc3MgU2V0IHRvIFRSVUUsIGlmIGRlY29tcnBlc3Npb24gc2hvdWxkIGJlIHRlc3RlZC4KKyAqLworc3RhdGljIHZvaWQgVGVzdChUZXN0SXBoY1ZlY3RvciAmYVZlY3RvciwgYm9vbCBhQ29tcHJlc3MsIGJvb2wgYURlY29tcHJlc3MpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgICAgdWludDhfdCByZXN1bHRbNTEyXTsKKyAgICB1aW50OF90IGlwaGNbNTEyXTsKKyAgICB1aW50OF90IGlwNls1MTJdOworICAgIHVpbnQxNl90IGlwaGNMZW5ndGg7CisgICAgdWludDE2X3QgaXA2TGVuZ3RoOworCisgICAgYVZlY3Rvci5HZXRDb21wcmVzc2VkU3RyZWFtKGlwaGMsIGlwaGNMZW5ndGgpOworICAgIGFWZWN0b3IuR2V0VW5jb21wcmVzc2VkU3RyZWFtKGlwNiwgaXA2TGVuZ3RoKTsKKworICAgIHByaW50ZigiXG49PT0gVGVzdCBuYW1lOiAlcyA9PT1cblxuIiwgYVZlY3Rvci5tVGVzdE5hbWUpOworCisgICAgcHJpbnRmKCJFeHBlY3RlZCBlcnJvciAtLS0tLS0tLS0tLS0tLSAlc1xuIiwgYVZlY3Rvci5tRXJyb3IgPyAieWVzIiA6ICJubyIpOworICAgIHByaW50ZigiVURQIHByZXNlbnQgLS0tLS0tLS0tLS0tLS0tLS0gJXNcbiIsIGFWZWN0b3IubVVkcEhlYWRlci5HZXRMZW5ndGgoKSA/ICJ5ZXMiIDogIm5vIik7CisgICAgcHJpbnRmKCJFeHRlbnNpb24gSGVhZGVycyBwcmVzZW50IC0tLSAlc1xuIiwgYVZlY3Rvci5tRXh0SGVhZGVyLm1MZW5ndGggPyAieWVzIiA6ICJubyIpOworICAgIHByaW50ZigiSVAtaW4tSVAgcHJlc2VudCAtLS0tLS0tLS0tLS0gJXNcbiIsIGFWZWN0b3IubUlwVHVubmVsZWRIZWFkZXIuR2V0UGF5bG9hZExlbmd0aCgpID8gInllcyIgOiAibm8iKTsKKyAgICBwcmludGYoIkxPV1BBTl9JUEhDIGxlbmd0aCAtLS0tLS0tLS0tICVkXG4iLCBhVmVjdG9yLm1JcGhjSGVhZGVyLm1MZW5ndGgpOworICAgIHByaW50ZigiSVB2NiB1bmNvbXByZXNzZWQgb2Zmc2V0IC0tLS0gJWRcblxuIiwgYVZlY3Rvci5tUGF5bG9hZE9mZnNldCk7CisKKyAgICBwcmludGYoIkV4cGVjdGVkIElQdjYgdW5jb21wcmVzc2VkIHBhY2tldDogXG4iKTsKKyAgICBvdFRlc3RQcmludEhleChpcDYsIGlwNkxlbmd0aCk7CisgICAgcHJpbnRmKCJcbiIpOworCisgICAgcHJpbnRmKCJFeHBlY3RlZCBMT1dQQU5fSVBIQyBjb21wcmVzc2VkIGZyYW1lOiBcbiIpOworICAgIG90VGVzdFByaW50SGV4KGlwaGMsIGlwaGNMZW5ndGgpOworICAgIHByaW50ZigiXG4iKTsKKworICAgIGlmIChhQ29tcHJlc3MpCisgICAgeworICAgICAgICBWZXJpZnlPclF1aXQoKG1lc3NhZ2UgPSBzSXA2LT5tTWVzc2FnZVBvb2wuTmV3KE1lc3NhZ2U6OmtUeXBlSXA2LCAwKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICI2bG86IElwNjo6TmV3TWVzc2FnZSBmYWlsZWQiKTsKKworICAgICAgICBhVmVjdG9yLkdldFVuY29tcHJlc3NlZFN0cmVhbSgqbWVzc2FnZSk7CisKKyAgICAgICAgaW50IGNvbXByZXNzQnl0ZXMgPSBzTG93cGFuLT5Db21wcmVzcygqbWVzc2FnZSwgYVZlY3Rvci5tTWFjU291cmNlLCBhVmVjdG9yLm1NYWNEZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworCisgICAgICAgIGlmIChhVmVjdG9yLm1FcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBBcHBlbmQgcGF5bG9hZCB0byB0aGUgTE9XUEFOX0lQSEMuCisgICAgICAgICAgICBtZXNzYWdlLT5SZWFkKG1lc3NhZ2UtPkdldE9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIG1lc3NhZ2UtPkdldE9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKyBjb21wcmVzc0J5dGVzKTsKKworICAgICAgICAgICAgcHJpbnRmKCJSZXN1bHRlZCBMT1dQQU5fSVBIQyBjb21wcmVzc2VkIGZyYW1lOiBcbiIpOworICAgICAgICAgICAgb3RUZXN0UHJpbnRIZXgocmVzdWx0LCBjb21wcmVzc0J5dGVzICsgbWVzc2FnZS0+R2V0TGVuZ3RoKCkgLSBtZXNzYWdlLT5HZXRPZmZzZXQoKSk7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChjb21wcmVzc0J5dGVzID09IGFWZWN0b3IubUlwaGNIZWFkZXIubUxlbmd0aCwgIjZsbzogTG93cGFuOjpDb21wcmVzcyBmYWlsZWQiKTsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlLT5HZXRPZmZzZXQoKSA9PSBhVmVjdG9yLm1QYXlsb2FkT2Zmc2V0LCAiNmxvOiBMb3dwYW46OkNvbXByZXNzIGZhaWxlZCIpOworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KG1lbWNtcChpcGhjLCByZXN1bHQsIGlwaGNMZW5ndGgpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIjZsbzogTG93cGFuOjpDb21wcmVzcyBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChjb21wcmVzc0J5dGVzIDwgMCwgIjZsbzogTG93cGFuOjpDb21wcmVzcyBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICAgICAgbWVzc2FnZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKGFEZWNvbXByZXNzKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KChtZXNzYWdlID0gc0lwNi0+bU1lc3NhZ2VQb29sLk5ldyhNZXNzYWdlOjprVHlwZUlwNiwgMCkpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAiNmxvOiBJcDY6Ok5ld01lc3NhZ2UgZmFpbGVkIik7CisKKyAgICAgICAgaW50IGRlY29tcHJlc3NlZEJ5dGVzID0gc0xvd3Bhbi0+RGVjb21wcmVzcygqbWVzc2FnZSwgYVZlY3Rvci5tTWFjU291cmNlLCBhVmVjdG9yLm1NYWNEZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGhjLCBpcGhjTGVuZ3RoLCAwKTsKKworICAgICAgICBtZXNzYWdlLT5SZWFkKDAsIG1lc3NhZ2UtPkdldExlbmd0aCgpLCByZXN1bHQpOworCisgICAgICAgIGlmIChhVmVjdG9yLm1FcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBBcHBlbmQgcGF5bG9hZCB0byB0aGUgSVB2NiBQYWNrZXQuCisgICAgICAgICAgICBtZW1jcHkocmVzdWx0ICsgbWVzc2FnZS0+R2V0TGVuZ3RoKCksIGlwaGMgKyBkZWNvbXByZXNzZWRCeXRlcywKKyAgICAgICAgICAgICAgICAgICBpcGhjTGVuZ3RoIC0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGRlY29tcHJlc3NlZEJ5dGVzKSk7CisKKyAgICAgICAgICAgIHByaW50ZigiUmVzdWx0ZWQgSVB2NiB1bmNvbXByZXNzZWQgcGFja2V0OiBcbiIpOworICAgICAgICAgICAgb3RUZXN0UHJpbnRIZXgocmVzdWx0LCBtZXNzYWdlLT5HZXRMZW5ndGgoKSArIGlwaGNMZW5ndGggLSBkZWNvbXByZXNzZWRCeXRlcyk7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChkZWNvbXByZXNzZWRCeXRlcyA9PSBhVmVjdG9yLm1JcGhjSGVhZGVyLm1MZW5ndGgsICI2bG86IExvd3Bhbjo6RGVjb21wcmVzcyBmYWlsZWQiKTsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlLT5HZXRPZmZzZXQoKSA9PSBhVmVjdG9yLm1QYXlsb2FkT2Zmc2V0LCAiNmxvOiBMb3dwYW46OkRlY29tcHJlc3MgZmFpbGVkIik7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQobWVzc2FnZS0+R2V0T2Zmc2V0KCkgPT0gbWVzc2FnZS0+R2V0TGVuZ3RoKCksICI2bG86IExvd3Bhbjo6RGVjb21wcmVzcyBmYWlsZWQiKTsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChtZW1jbXAoaXA2LCByZXN1bHQsIGlwNkxlbmd0aCkgPT0gMCwgIjZsbzogTG93cGFuOjpEZWNvbXByZXNzIGZhaWxlZCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGRlY29tcHJlc3NlZEJ5dGVzIDwgMCwgIjZsbzogTG93cGFuOjpEZWNvbXByZXNzIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgICAgICBtZXNzYWdlID0gTlVMTDsKKyAgICB9CisKKyAgICBwcmludGYoIlBBU1NcblxuIik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIFRlc3QgY29uc3RhbnRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZ1tdID0gezB4MDAsIDB4MDAsIDB4NWUsIDB4ZWYsIDB4MTAsIDB4MjIsIDB4MTEsIDB4MDB9Oworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nW10gPSB7MHgwMCwgMHgwMCwgMHg1ZSwgMHhlZiwgMHgxMCwgMHhhYSwgMHhiYiwgMHhjY307CisKK3N0YXRpYyB1aW50MTZfdCBzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCA9IDB4MDAwMDsKK3N0YXRpYyB1aW50MTZfdCBzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdFNob3J0ID0gMHhjMDAzOworc3RhdGljIHVpbnQxNl90IHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QgPSAweGZmZmY7CisKK3N0YXRpYyBjb25zdCB1aW50OF90IHNUZXN0UGF5bG9hZERlZmF1bHRbXSA9IHsweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2fTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBAc2VjdGlvbiBUZXN0IGNhc2VzLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIFRlc3RGdWxseUNvbXByZXNzYWJsZUxvbmdBZGRyZXNzZXModm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJGdWxseSBjb21wcmVzc2FibGUgSVB2NiBhZGRyZXNzZXMgdXNpbmcgbG9uZyBNQUMgYWRkcmVzc2VzIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwYWE6YmJjYyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDMzLCAweDNhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RGdWxseUNvbXByZXNzYWJsZVNob3J0QWRkcmVzc2VzKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiRnVsbHkgY29tcHJlc3NhYmxlIElQdjYgYWRkcmVzc2VzIHVzaW5nIHNob3J0IE1BQyBhZGRyZXNzZXMiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjpmZjpmZTAwOmMwMDMiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgzMywgMHgzYX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RnVsbHlDb21wcmVzc2FibGVTaG9ydExvbmdBZGRyZXNzZXModm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJGdWxseSBjb21wcmVzc2FibGUgSVB2NiBhZGRyZXNzZXMgdXNpbmcgc2hvcnQgYW5kIGxvbmcgTUFDIGFkZHJlc3NlcyIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6MDAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTBhYTpiYmNjIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4MzMsIDB4M2F9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEZ1bGx5Q29tcHJlc3NhYmxlTG9uZ1Nob3J0QWRkcmVzc2VzKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiRnVsbHkgY29tcHJlc3NhYmxlIElQdjYgYWRkcmVzc2VzIHVzaW5nIGxvbmcgYW5kIHNob3J0IE1BQyBhZGRyZXNzZXMiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdFNob3J0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6YzAwMyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDMzLCAweDNhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTb3VyY2VVbnNwZWNpZmllZEFkZHJlc3Modm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJVbnNwZWNpZmllZCBzb3VyY2UgSVB2NiBhZGRyZXNzIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiOjoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6YzAwMyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDQzLCAweDNhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTb3VyY2UxMjhiaXREZXN0aW5hdGlvbjEyOGJpdEFkZHJlc3Nlcyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIklQdjYgYWRkcmVzc2VzIGlubGluZSIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDE6MjowOjM6YWFhYTpiYmJiOmNjY2M6ZGRkZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMToyOjA6NDo6Iik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4MDAsIDB4M2EsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMywgMHhhYSwgMHhhYSwgMHhiYiwgMHhiYiwgMHhjYywKKyAgICAgICAgICAgICAgICAgICAgICAweGNjLCAweGRkLCAweGRkLCAweDIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMAorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTb3VyY2U2NGJpdERlc3RpbmF0aW9uNjRiaXRMb25nQWRkcmVzc2VzKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiSVB2NiBhZGRyZXNzZXMgNjQtYml0IHVzaW5nIGxvbmcgTUFDIGFkZHJlc3NlcyIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMGFhOmJiY2QiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgxMSwgMHgzYSwgMHgwMiwgMHgwMCwgMHg1ZSwgMHhlZiwgMHgxMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDIyLCAweDExLCAweDAxLCAweDAyLCAweDAwLCAweDVlLCAweGVmLCAweDEwLAorICAgICAgICAgICAgICAgICAgICAgIDB4YWEsIDB4YmIsIDB4Y2QKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0U291cmNlNjRiaXREZXN0aW5hdGlvbjY0Yml0U2hvcnRBZGRyZXNzZXModm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJJUHY2IGFkZHJlc3NlcyA2NC1iaXQgdXNpbmcgc2hvcnQgTUFDIGFkZHJlc3NlcyIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdFNob3J0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwYWE6YmJjZCIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDExLCAweDNhLCAweDAyLCAweDAwLCAweDVlLCAweGVmLCAweDEwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MjIsIDB4MTEsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NWUsIDB4ZWYsIDB4MTAsCisgICAgICAgICAgICAgICAgICAgICAgMHhhYSwgMHhiYiwgMHhjZAorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTb3VyY2UxNmJpdERlc3RpbmF0aW9uMTZiaXRBZGRyZXNzZXModm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJJUHY2IGFkZHJlc3NlcyAxNi1iaXQgdXNpbmcgc2hvcnQgTUFDIGFkZHJlc3NlcyIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdFNob3J0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjpmZjpmZTAwOjAwMDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6YzAwNCIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDIyLCAweDNhLCAweDAwLCAweDAxLCAweGMwLCAweDA0fTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTb3VyY2VDb21wcmVzc2VkRGVzdGluYXRpb24xNmJpdEFkZHJlc3Nlcyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkZ1bGx5IGNvbXByZXNzYWJsZSBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gMTYtYml0IHVzaW5nIGxvbmcgTUFDIGFkZHJlc3NlcyIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjpmZjpmZTAwOmJlYWYiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgzMiwgMHgzYSwgMHhiZSwgMHhhZn07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0U291cmNlQ29tcHJlc3NlZERlc3RpbmF0aW9uMTI4Yml0QWRkcmVzc2VzKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiRnVsbHkgY29tcHJlc3NhYmxlIElQdjYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbmxpbmUgdXNpbmcgbG9uZyBNQUMgYWRkcmVzc2VzIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDE6MjowOjQ6OiIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDMwLCAweDNhLCAweDIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMAorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKKworc3RhdGljIHZvaWQgVGVzdE11bHRpY2FzdDEyOGJpdEFkZHJlc3Modm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJNdWx0aWNhc3QgYWRkcmVzcyBpbmxpbmUiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uQnJvYWRjYXN0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDU6OjEwMDowMDMwOjAwMDEiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgzOCwgMHgzYSwgMHhmZiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MzAsIDB4MDAsIDB4MDEKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0TXVsdGljYXN0NDhiaXRBZGRyZXNzKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiTXVsdGljYXN0IGFkZHJlc3MgNDgtYml0Iik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkJyb2FkY2FzdCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZjA1OjoxOjAwMzA6MDAwMSIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDM5LCAweDNhLCAweDA1LCAweDAxLCAweDAwLCAweDMwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0TXVsdGljYXN0MzJiaXRBZGRyZXNzKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiTXVsdGljYXN0IGFkZHJlc3MgMzItYml0Iik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwMjI6MTEwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmYwMzo6ZmMiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgxYSwgMHgzYSwgMHgwMiwgMHgwMCwgMHg1ZSwgMHhlZiwgMHgxMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDIyLCAweDExLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGZjCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdE11bHRpY2FzdDhiaXRBZGRyZXNzKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiTXVsdGljYXN0IGFkZHJlc3MgOC1iaXQiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uQnJvYWRjYXN0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDI6OjIiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgzYiwgMHgzYSwgMHgwMn07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0U3RhdGVmdWxTb3VyY2U2NGJpdERlc3RpbmF0aW9uNjRiaXRDb250ZXh0MCh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlN0YXRlZnVsIGNvbXByZXNzaW9uIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIDY0LWJpdCwgY29udGV4dCAwIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6YWJjZDplZjAxOjIzNDU6Njc4OSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDpjMzFkOmE3MDI6MGQ0MTpiZWVmIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4NTUsIDB4M2EsIDB4YWIsIDB4Y2QsIDB4ZWYsIDB4MDEsIDB4MjMsCisgICAgICAgICAgICAgICAgICAgICAgMHg0NSwgMHg2NywgMHg4OSwgMHhjMywgMHgxZCwgMHhhNywgMHgwMiwgMHgwZCwKKyAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweGJlLCAweGVmCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFN0YXRlZnVsU291cmNlNjRiaXREZXN0aW5hdGlvbjY0Yml0Q29udGV4dDBJZkNvbnRleHRJbkxpbmUodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJTdGF0ZWZ1bCBjb21wcmVzc2lvbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyA2NC1iaXQsIGNvbnRleHQgMCBpbmxpbmUiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDphYmNkOmVmMDE6MjM0NTo2Nzg5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OmMzMWQ6YTcwMjowZDQxOmJlZWYiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHhkNSwgMHgwMCwgMHgzYSwgMHhhYiwgMHhjZCwgMHhlZiwgMHgwMSwgMHgyMywKKyAgICAgICAgICAgICAgICAgICAgICAweDQ1LCAweDY3LCAweDg5LCAweGMzLCAweDFkLCAweGE3LCAweDAyLCAweDBkLAorICAgICAgICAgICAgICAgICAgICAgIDB4NDEsIDB4YmUsIDB4ZWYKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBkZWNvbXByZXNzaW9uIHRlc3Qgb25seS4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIGZhbHNlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFN0YXRlZnVsU291cmNlMTZiaXREZXN0aW5hdGlvbjE2Yml0Q29udGV4dDAodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJTdGF0ZWZ1bCBjb21wcmVzc2lvbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyAxNi1iaXQsIGNvbnRleHQgMCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdFNob3J0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOmZmZmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6OmZmOmZlMDA6ZmZmZSIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDY2LCAweDNhLCAweGZmLCAweGZjLCAweGZmLCAweGZlfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTdGF0ZWZ1bENvbXByZXNzYWJsZUxvbmdBZGRyZXNzZXNDb250ZXh0MCh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlN0YXRlZnVsIGNvbXByZXNzaW9uIGNvbXByZXNzYWJsZSBsb25nIGFkZHJlc3NlcywgY29udGV4dCAwIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjAyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6MDIwMDo1ZWVmOjEwYWE6YmJjYyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDc3LCAweDNhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTdGF0ZWZ1bENvbXByZXNzYWJsZVNob3J0QWRkcmVzc2VzQ29udGV4dDAodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJTdGF0ZWZ1bCBjb21wcmVzc2lvbiBjb21wcmVzc2FibGUgc2hvcnQgYWRkcmVzc2VzLCBjb250ZXh0IDAiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOmMwMDMiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHg3NywgMHgzYX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0U3RhdGVmdWxDb21wcmVzc2FibGVMb25nU2hvcnRBZGRyZXNzZXNDb250ZXh0MCh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlN0YXRlZnVsIGNvbXByZXNzaW9uIGNvbXByZXNzYWJsZSBsb25nIGFuZCBzaG9ydCBhZGRyZXNzZXMsIGNvbnRleHQgMCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6MDIwMDo1ZWVmOjEwMjI6MTEwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDo6ZmY6ZmUwMDpjMDAzIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4NzcsIDB4M2F9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFN0YXRlZnVsU291cmNlNjRiaXREZXN0aW5hdGlvbjEyOGJpdENvbnRleHQxKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiU3RhdGVmdWwgY29tcHJlc3Npb24gc291cmNlIGFkZHJlc3NlcyA2NC1iaXQgYW5kIGRlc3RpbmF0aW9uIGlubGluZSwgY29udGV4dCAxIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDE6MjowOjE6YWJjZDplZjAxOjIzNDU6Njc4OSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMToyOjA6MzpjMzFkOmE3MDI6MGQ0MTpiZWVmIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4ZDAsIDB4MTAsIDB4M2EsIDB4YWIsIDB4Y2QsIDB4ZWYsIDB4MDEsIDB4MjMsCisgICAgICAgICAgICAgICAgICAgICAgMHg0NSwgMHg2NywgMHg4OSwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAzLCAweGMzLCAweDFkLCAweGE3LCAweDAyLCAweDBkLCAweDQxLCAweGJlLAorICAgICAgICAgICAgICAgICAgICAgIDB4ZWYKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0U3RhdGVmdWxTb3VyY2U2NGJpdERlc3RpbmF0aW9uNjRiaXRDb250ZXh0MSh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlN0YXRlZnVsIGNvbXByZXNzaW9uIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIDY0LWJpdCwgY29udGV4dCAxIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDE6MjowOjE6YWJjZDplZjAxOjIzNDU6Njc4OSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMToyOjA6MTpjMzFkOmE3MDI6MGQ0MTpiZWVmIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4ZDUsIDB4MTEsIDB4M2EsIDB4YWIsIDB4Y2QsIDB4ZWYsIDB4MDEsIDB4MjMsCisgICAgICAgICAgICAgICAgICAgICAgMHg0NSwgMHg2NywgMHg4OSwgMHhjMywgMHgxZCwgMHhhNywgMHgwMiwgMHgwZCwgMHg0MSwKKyAgICAgICAgICAgICAgICAgICAgICAweGJlLCAweGVmCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFN0YXRlZnVsU291cmNlRGVzdGluYXRpb25JbmxpbmVDb250ZXh0MkNJREZhbHNlKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiU3RhdGVmdWwgY29tcHJlc3Npb24gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgaW5saW5lLCBjb250ZXh0IDIgKEM9RkFMU0UpIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDE6MjowOjI6YWJjZDplZjAxOjIzNDU6Njc4OSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMToyOjA6MjpjMzFkOmE3MDI6MGQ0MTpiZWVmIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4MDAsIDB4M2EsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMiwgMHhhYiwgMHhjZCwgMHhlZiwgMHgwMSwgMHgyMywKKyAgICAgICAgICAgICAgICAgICAgICAweDQ1LCAweDY3LCAweDg5LCAweDIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDIsIDB4YzMsIDB4MWQsIDB4YTcsIDB4MDIsIDB4MGQsCisgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHhiZSwgMHhlZgorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIHRlc3Qgb25seS4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFN0YXRlZnVsTXVsdGljYXN0RGVzdGluYXRpb240OGJpdENvbnRleHQwKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiU3RhdGVmdWwgY29tcHJlc3Npb24gbXVsdGljYXN0IGFkZHJlc3MsIGNvbnRleHQgMCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6MDIwMDo1ZWVmOjEwMjI6MTEwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmYzMzowMDQwOmZkMDA6Y2FmZTpmYWNlOjEyMzQ6MDAwMDowMDAxIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4N2MsIDB4M2EsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMQorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFRyYWZmaWNDbGFzc0Zsb3dMYWJlbDNCeXRlcyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlRyYWZmaWMgQ2xhc3MgYW5kIEZsb3cgTGFiZWwgMyBieXRlcyIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAxMWFjNTksIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMGFhOmJiY2MiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg2YSwgMHgzMywgMHg0MSwgMHhhYywgMHg1OSwgMHgzYX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0VHJhZmZpY0NsYXNzRmxvd0xhYmVsMUJ5dGUodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJUcmFmZmljIENsYXNzIGFuZCBGbG93IExhYmVsIDEgYnl0ZSIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjBkMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMGFhOmJiY2MiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3MiwgMHgzMywgMHg0MywgMHgzYX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0VHJhZmZpY0NsYXNzRmxvd0xhYmVsMUJ5dGVFY25Pbmx5KHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiVHJhZmZpYyBDbGFzcyBhbmQgRmxvdyBMYWJlbCAxIGJ5dGUgd2l0aCBlY24gb25seSIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAxMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMGFhOmJiY2MiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3MiwgMHgzMywgMHg0MCwgMHgzYX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0VHJhZmZpY0NsYXNzRmxvd0xhYmVsSW5saW5lKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiVHJhZmZpYyBDbGFzcyBhbmQgRmxvdyBMYWJlbCBpbmxpbmUiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDZlYTEyMzQ1LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwMjI6MTEwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTBhYTpiYmNjIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4NjIsIDB4MzMsIDB4QkEsIDB4MDEsIDB4MjMsIDB4NDUsIDB4M2F9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEhvcExpbWl0MSh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkhvcCBMaW1pdCAxIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjpmZjpmZTAwOmMwMDMiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3OSwgMHgzMywgMHgzYX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0SG9wTGltaXQyNTUodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJIb3AgTGltaXQgMjU1Iik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6YzAwMyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdCLCAweDMzLCAweDNhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RIb3BMaW1pdElubGluZSh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkhvcCBMaW1pdCBJbmxpbmUiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjpmZjpmZTAwOmMwMDMiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3OCwgMHgzMywgMHgzYSwgMHgzZn07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0VWRwU291cmNlRGVzdGluYXRpb25JbmxpbmUodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJVRFAgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbmxpbmUiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCBJcDY6OmtQcm90b1VkcCwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMGFhOmJiY2MiKTsKKworICAgIC8vIFNldHVwIFVEUCBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRVRFBIZWFkZXIoNTY4MywgNTY4NCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgMHhiZWVmKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHgzMywgMHhmMCwgMHgxNiwgMHgzMywgMHgxNiwgMHgzNCwgMHhiZSwgMHhlZn07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQ4KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0VWRwU291cmNlSW5saW5lRGVzdGluYXRpb244Yml0KHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiVURQIHNvdXJjZSBpbmxpbmUgZGVzdGluYXRpb24gOC1iaXQiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCBJcDY6OmtQcm90b1VkcCwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMGFhOmJiY2MiKTsKKworICAgIC8vIFNldHVwIFVEUCBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRVRFBIZWFkZXIoNTY4MywgNjE0NDEsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDgsIDB4YmVlZik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2UsIDB4MzMsIDB4ZjEsIDB4MTYsIDB4MzMsIDB4MDEsIDB4YmUsIDB4ZWZ9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0OCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFVkcFNvdXJjZThiaXREZXN0aW5hdGlvbklubGluZSh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlVEUCBzb3VyY2UgOC1iaXQgZGVzdGluYXRpb24gOC1iaXQiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCBJcDY6OmtQcm90b1VkcCwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMGFhOmJiY2MiKTsKKworICAgIC8vIFNldHVwIFVEUCBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRVRFBIZWFkZXIoNjE2OTUsIDU2ODMsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDgsIDB4YmVlZik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2UsIDB4MzMsIDB4ZjIsIDB4ZmYsIDB4MTYsIDB4MzMsIDB4YmUsIDB4ZWZ9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0OCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFVkcEZ1bGx5Q29tcHJlc3NlZCh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlVEUCBmdWxseSBjb21wcmVzc2VkIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgSXA2OjprUHJvdG9VZHAsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwMjI6MTEwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTBhYTpiYmNjIik7CisKKyAgICAvLyBTZXR1cCBVRFAgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0VURQSGVhZGVyKDYxNjE2LCA2MTYzMSwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgMHhmYWNlKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHgzMywgMHhmMywgMHgwZiwgMHhmYSwgMHhjZX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQ4KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0VWRwRnVsbHlDb21wcmVzc2VkTXVsdGljYXN0KHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiVURQIGZ1bGx5IGNvbXByZXNzZWQgd2l0aCBJUCBtdWx0aWNhc3QiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCBJcDY6OmtQcm90b1VkcCwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZjAyOjoxIik7CisKKyAgICAvLyBTZXR1cCBVRFAgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0VURQSGVhZGVyKDYxNjE2LCA2MTYzMSwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgMHhmYWNlKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHgzYiwgMHgwMSwgMHhmMywgMHgwZiwgMHhmYSwgMHhjZX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQ4KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0VWRwV2l0aG91dE5oYyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlVEUCB3aXRob3V0IExPV1BBTl9OSEMgY29tcHJlc3Npb24iKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9VZHAsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6MDAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6ZmY6ZmUwMDpjMDAzIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4MzMsIDB4MTF9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gb25seSBkZWNvbXByZXNzaW9uIHRlc3QuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCBmYWxzZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RFeHRlbnNpb25IZWFkZXJIb3BCeUhvcE5vUGFkZGluZyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkV4dGVuc2lvbiBIZWFkZXIgLSBIb3AtYnktSG9wIHdpdGggbm8gcGFkZGluZyIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uQnJvYWRjYXN0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgSXA2OjprUHJvdG9Ib3BPcHRzLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDM6OjEiKTsKKworICAgIC8vIFNldHVwIGV4dGVuc2lvbiBoZWFkZXIuCisgICAgdWludDhfdCBleHRIZWFkZXJbXSA9IHsweDNhLCAweDAwLCAweDZkLCAweDA0LCAweDYwLCAweDExLCAweDAwLCAweDBjfTsKKyAgICB0ZXN0VmVjdG9yLlNldEV4dEhlYWRlcihleHRIZWFkZXIsIHNpemVvZihleHRIZWFkZXIpKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHg3YSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHgzYSwKKyAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDZkLCAweDA0LCAweDYwLCAweDExLCAweDAwLCAweDBjCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0OCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkMSh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkV4dGVuc2lvbiBIZWFkZXIgLSBIb3AtYnktSG9wIHdpdGggUGFkMSIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uQnJvYWRjYXN0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgSXA2OjprUHJvdG9Ib3BPcHRzLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDM6OjEiKTsKKworICAgIC8vIFNldHVwIGV4dGVuc2lvbiBoZWFkZXIuCisgICAgdWludDhfdCBleHRIZWFkZXJbXSA9IHsweDNhLCAweDAwLCAweDZkLCAweDAzLCAweDYwLCAweDExLCAweDAwLCAweDAwfTsKKyAgICB0ZXN0VmVjdG9yLlNldEV4dEhlYWRlcihleHRIZWFkZXIsIHNpemVvZihleHRIZWFkZXIpKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHg3YSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHgzYSwKKyAgICAgICAgICAgICAgICAgICAgICAweDA1LCAweDZkLCAweDAzLCAweDYwLCAweDExLCAweDAwCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0OCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkTjIodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJFeHRlbnNpb24gSGVhZGVyIC0gSG9wLWJ5LUhvcCB3aXRoIFBhZE4yIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCBJcDY6OmtQcm90b0hvcE9wdHMsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6OmZmOmZlMDA6MDAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmYwMzo6MSIpOworCisgICAgLy8gU2V0dXAgZXh0ZW5zaW9uIGhlYWRlci4KKyAgICB1aW50OF90IGV4dEhlYWRlcltdID0gezB4M2EsIDB4MDAsIDB4NmQsIDB4MDIsIDB4NjAsIDB4MTEsIDB4MDEsIDB4MDB9OworICAgIHRlc3RWZWN0b3IuU2V0RXh0SGVhZGVyKGV4dEhlYWRlciwgc2l6ZW9mKGV4dEhlYWRlcikpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDdhLCAweDAzLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweDNhLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4NmQsIDB4MDIsIDB4NjAsIDB4MTEKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQ4KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXh0ZW5zaW9uSGVhZGVySG9wQnlIb3BQYWROMyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkV4dGVuc2lvbiBIZWFkZXIgLSBIb3AtYnktSG9wIHdpdGggUGFkTjMiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkJyb2FkY2FzdCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDgsIElwNjo6a1Byb3RvSG9wT3B0cywgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZjAzOjoxIik7CisKKyAgICAvLyBTZXR1cCBleHRlbnNpb24gaGVhZGVyLgorICAgIHVpbnQ4X3QgZXh0SGVhZGVyW10gPSB7MHgzYSwgMHgwMCwgMHg2ZCwgMHgwMSwgMHg2MCwgMHgwMSwgMHgwMSwgMHgwMH07CisgICAgdGVzdFZlY3Rvci5TZXRFeHRIZWFkZXIoZXh0SGVhZGVyLCBzaXplb2YoZXh0SGVhZGVyKSk7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2UsIDB4N2EsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4M2EsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHg2ZCwgMHgwMSwgMHg2MAorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDgpOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RFeHRlbnNpb25IZWFkZXJIb3BCeUhvcFBhZE40KHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiRXh0ZW5zaW9uIEhlYWRlciAtIEhvcC1ieS1Ib3Agd2l0aCBQYWRONCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uQnJvYWRjYXN0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgSXA2OjprUHJvdG9Ib3BPcHRzLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDM6OjEiKTsKKworICAgIC8vIFNldHVwIGV4dGVuc2lvbiBoZWFkZXIuCisgICAgdWludDhfdCBleHRIZWFkZXJbXSA9IHsweDNhLCAweDAwLCAweDZkLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDAwfTsKKyAgICB0ZXN0VmVjdG9yLlNldEV4dEhlYWRlcihleHRIZWFkZXIsIHNpemVvZihleHRIZWFkZXIpKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHg3YSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHgzYSwKKyAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDZkLCAweDAwCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0OCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkTjUodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJFeHRlbnNpb24gSGVhZGVyIC0gSG9wLWJ5LUhvcCB3aXRoIFBhZE41Iik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyAxNiwgSXA2OjprUHJvdG9Ib3BPcHRzLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDM6OjEiKTsKKworICAgIC8vIFNldHVwIGV4dGVuc2lvbiBoZWFkZXIuCisgICAgdWludDhfdCBleHRIZWFkZXJbXSA9IHsweDNhLCAweDAxLCAweDZkLCAweDA3LCAweDAxLCAweDAyLCAweDAxLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgzMywgMHgwMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMAorICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0RXh0SGVhZGVyKGV4dEhlYWRlciwgc2l6ZW9mKGV4dEhlYWRlcikpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDdhLCAweDAzLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweDNhLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDksIDB4NmQsIDB4MDcsIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgzMworICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNTYpOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RFeHRlbnNpb25IZWFkZXJIb3BCeUhvcFBhZE42KHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiRXh0ZW5zaW9uIEhlYWRlciAtIEhvcC1ieS1Ib3Agd2l0aCBQYWRONiIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uQnJvYWRjYXN0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgMjQsIElwNjo6a1Byb3RvSG9wT3B0cywgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZjAzOjoxIik7CisKKyAgICAvLyBTZXR1cCBleHRlbnNpb24gaGVhZGVyLgorICAgIHVpbnQ4X3QgZXh0SGVhZGVyW10gPSB7MHgzYSwgMHgwMiwgMHg2ZCwgMHgwZSwgMHgwMSwgMHgwMiwgMHgwMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MzMsIDB4MDEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDAwLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRFeHRIZWFkZXIoZXh0SGVhZGVyLCBzaXplb2YoZXh0SGVhZGVyKSk7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2UsIDB4N2EsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4M2EsCisgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHg2ZCwgMHgwZSwgMHgwMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDMzLCAweDAxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDExLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDY0KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXh0ZW5zaW9uSGVhZGVySG9wQnlIb3BQYWRONyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkV4dGVuc2lvbiBIZWFkZXIgLSBIb3AtYnktSG9wIHdpdGggUGFkTjciKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkJyb2FkY2FzdCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDI0LCBJcDY6OmtQcm90b0hvcE9wdHMsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6OmZmOmZlMDA6MDAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmYwMzo6MSIpOworCisgICAgLy8gU2V0dXAgZXh0ZW5zaW9uIGhlYWRlci4KKyAgICB1aW50OF90IGV4dEhlYWRlcltdID0gezB4M2EsIDB4MDIsIDB4NmQsIDB4MGQsIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDMzLCAweDAxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHgwMSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0RXh0SGVhZGVyKGV4dEhlYWRlciwgc2l6ZW9mKGV4dEhlYWRlcikpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDdhLCAweDAzLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweDNhLAorICAgICAgICAgICAgICAgICAgICAgIDB4MGYsIDB4NmQsIDB4MGQsIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgzMywgMHgwMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMQorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNjQpOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RFeHRlbnNpb25IZWFkZXJIb3BCeUhvcFBhZE4yVWRwRnVsbHlDb21wcmVzc2VkKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiRXh0ZW5zaW9uIEhlYWRlciAtIEhvcC1ieS1Ib3Agd2l0aCBQYWROMiBhbmQgVURQIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyAxNiwgSXA2OjprUHJvdG9Ib3BPcHRzLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDM6OjEiKTsKKworICAgIC8vIFNldHVwIGV4dGVuc2lvbiBoZWFkZXIuCisgICAgdWludDhfdCBleHRIZWFkZXJbXSA9IHsweDExLCAweDAwLCAweDZkLCAweDAyLCAweDYwLCAweDExLCAweDAxLCAweDAwfTsKKyAgICB0ZXN0VmVjdG9yLlNldEV4dEhlYWRlcihleHRIZWFkZXIsIHNpemVvZihleHRIZWFkZXIpKTsKKworICAgIC8vIFNldHVwIFVEUCBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRVRFBIZWFkZXIoNjE2MTYsIDYxNjMxLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCAweGZhY2UpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDdhLCAweDAzLCAweDAwLCAweDAwLCAweDAxLCAweGUxLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgIDB4NmQsIDB4MDIsIDB4NjAsIDB4MTEsIDB4ZjMsIDB4MGYsIDB4ZmEsIDB4Y2UKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDU2KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0SXBJbklwSG9wQnlIb3BQYWROMlVkcFNvdXJjZURlc3RpbmF0aW9uSW5saW5lKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiSVAtaW4tSVAgd2l0aCBIb3AtYnktSG9wIHdpdGggUGFkTjIgYW5kIFVEUCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uQnJvYWRjYXN0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgNTYsIElwNjo6a1Byb3RvSG9wT3B0cywgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZjAzOjpmYyIpOworCisgICAgLy8gU2V0dXAgZXh0ZW5zaW9uIGhlYWRlci4KKyAgICB1aW50OF90IGV4dEhlYWRlcltdID0gezB4MjksIDB4MDAsIDB4NmQsIDB4MDIsIDB4MDAsIDB4MTEsIDB4MDEsIDB4MDB9OworICAgIHRlc3RWZWN0b3IuU2V0RXh0SGVhZGVyKGV4dEhlYWRlciwgc2l6ZW9mKGV4dEhlYWRlcikpOworCisgICAgLy8gU2V0dXAgSVB2NiB0dW5uZWxlZCBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcFR1bm5lbGVkSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDgsIElwNjo6a1Byb3RvVWRwLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6OmZmOmZlMDA6MDAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZjA1OjoxIik7CisKKyAgICAvLyBTZXR1cCBVRFAgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0VURQSGVhZGVyKDU2ODMsIDU2ODQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDgsIDB4YmVlZik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2UsIDB4N2EsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZTEsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgMHg2ZCwgMHgwMiwgMHgwMCwgMHgxMSwgMHhlZSwgMHg3ZSwgMHg3YSwgMHgwNSwKKyAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweDE2LCAweDMzLCAweDE2LCAweDM0LAorICAgICAgICAgICAgICAgICAgICAgIDB4YmUsIDB4ZWYKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDk2KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0SXBJbklwV2l0aG91dEV4dGVuc2lvbkhlYWRlcih2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIklQLWluLUlQIHdpdGhvdXQgZXh0ZW5zaW9uIGhlYWRlciIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDQwLCBJcDY6OmtQcm90b0lwNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZjAzOjoxIik7CisKKyAgICAvLyBTZXR1cCBJUHY2IHR1bm5lbGVkIGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwVHVubmVsZWRIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwYWE6YmJjYyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDNhLCAweDAzLCAweDAwLCAweDAwLCAweDAxLCAweGVlLCAweDc5LAorICAgICAgICAgICAgICAgICAgICAgIDB4MzMsIDB4M2EKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDgwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXJyb3JOb0lwaGNEaXNwYXRjaCh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkludmFsaWQgZGlzcGF0Y2giKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDQwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2fTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFBlcmZvcm0gZGVjb21wcmVzc2lvbiB0ZXN0LgorICAgIFRlc3QodGVzdFZlY3RvciwgZmFsc2UsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXJyb3JUcnVuY2F0ZWRJcGhjKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiVHJ1bmNhdGVkIExPV1BBTl9JUEhDIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgwMH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBQZXJmb3JtIGRlY29tcHJlc3Npb24gdGVzdC4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIGZhbHNlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEVycm9yUmVzZXJ2ZWRWYWx1ZURlc3RpbmF0aW9uMDEwMCh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlJlc2VydmVkIHZhbHVlIG9mIE0tREFDLURBTSAtIDAxMDAiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDM0LCAweDNBfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFBlcmZvcm0gZGVjb21wcmVzc2lvbiB0ZXN0LgorICAgIFRlc3QodGVzdFZlY3RvciwgZmFsc2UsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXJyb3JSZXNlcnZlZFZhbHVlRGVzdGluYXRpb24xMTAxKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiUmVzZXJ2ZWQgdmFsdWUgb2YgTS1EQUMtREFNIC0gMTEwMSIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4M0QsIDB4M0F9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gUGVyZm9ybSBkZWNvbXByZXNzaW9uIHRlc3QuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCBmYWxzZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RFcnJvclJlc2VydmVkVmFsdWVEZXN0aW5hdGlvbjExMTAodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJSZXNlcnZlZCB2YWx1ZSBvZiBNLURBQy1EQU0gLSAxMTEwIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgzRSwgMHgzQX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBQZXJmb3JtIGRlY29tcHJlc3Npb24gdGVzdC4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIGZhbHNlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEVycm9yUmVzZXJ2ZWRWYWx1ZURlc3RpbmF0aW9uMTExMSh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlJlc2VydmVkIHZhbHVlIG9mIE0tREFDLURBTSAtIDExMTEiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDNGLCAweDNBfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFBlcmZvcm0gZGVjb21wcmVzc2lvbiB0ZXN0LgorICAgIFRlc3QodGVzdFZlY3RvciwgZmFsc2UsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXJyb3JVbmtub3duTmhjKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiVW5rbm93biB2YWx1ZSBvZiBMT1dQQU5fTkhDIElEIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHgzMywgMHgwMH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBQZXJmb3JtIGRlY29tcHJlc3Npb24gdGVzdC4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIGZhbHNlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEVycm9yUmVzZXJ2ZWROaGM1KHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiUmVzZXJ2ZWQgdmFsdWUgb2YgTE9XUEFOX05IQyBFSUQgLSAweDA1Iik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHgzMywgMHhlYX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBQZXJmb3JtIGRlY29tcHJlc3Npb24gdGVzdC4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIGZhbHNlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEVycm9yUmVzZXJ2ZWROaGM2KHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiUmVzZXJ2ZWQgdmFsdWUgb2YgTE9XUEFOX05IQyBFSUQgLSAweDA2Iik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHgzMywgMHhlY307CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBQZXJmb3JtIGRlY29tcHJlc3Npb24gdGVzdC4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIGZhbHNlLCB0cnVlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gTWFpbiB0ZXN0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIFRlc3RMb3dwYW5JcGhjKHZvaWQpCit7CisgICAgc0luc3RhbmNlID0gdGVzdEluaXRJbnN0YW5jZSgpOworCisgICAgVmVyaWZ5T3JRdWl0KHNJbnN0YW5jZSAhPSBOVUxMLCAiTlVMTCBpbnN0YW5jZSIpOworCisgICAgc0lwNiA9ICZzSW5zdGFuY2UtPm1JcDY7CisgICAgc1RocmVhZE5ldGlmID0gJnNJbnN0YW5jZS0+bVRocmVhZE5ldGlmOworICAgIHNMb3dwYW4gPSAmc1RocmVhZE5ldGlmLT5HZXRMb3dwYW4oKTsKKworICAgIEluaXQoKTsKKworICAgIC8vIFN0YXRlbGVzcyB1bmljYXN0IGFkZHJlc3NlcyBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdEZ1bGx5Q29tcHJlc3NhYmxlTG9uZ0FkZHJlc3NlcygpOworICAgIFRlc3RGdWxseUNvbXByZXNzYWJsZVNob3J0QWRkcmVzc2VzKCk7CisgICAgVGVzdEZ1bGx5Q29tcHJlc3NhYmxlU2hvcnRMb25nQWRkcmVzc2VzKCk7CisgICAgVGVzdEZ1bGx5Q29tcHJlc3NhYmxlTG9uZ1Nob3J0QWRkcmVzc2VzKCk7CisgICAgVGVzdFNvdXJjZVVuc3BlY2lmaWVkQWRkcmVzcygpOworICAgIFRlc3RTb3VyY2UxMjhiaXREZXN0aW5hdGlvbjEyOGJpdEFkZHJlc3NlcygpOworICAgIFRlc3RTb3VyY2U2NGJpdERlc3RpbmF0aW9uNjRiaXRMb25nQWRkcmVzc2VzKCk7CisgICAgVGVzdFNvdXJjZTY0Yml0RGVzdGluYXRpb242NGJpdFNob3J0QWRkcmVzc2VzKCk7CisgICAgVGVzdFNvdXJjZTE2Yml0RGVzdGluYXRpb24xNmJpdEFkZHJlc3NlcygpOworICAgIFRlc3RTb3VyY2VDb21wcmVzc2VkRGVzdGluYXRpb24xNmJpdEFkZHJlc3NlcygpOworICAgIFRlc3RTb3VyY2VDb21wcmVzc2VkRGVzdGluYXRpb24xMjhiaXRBZGRyZXNzZXMoKTsKKworICAgIC8vIFN0YXRlbGVzcyBtdWx0aWNhc3QgYWRkcmVzc2VzIGNvbXByZXNzaW9uIC8gZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0TXVsdGljYXN0MTI4Yml0QWRkcmVzcygpOworICAgIFRlc3RNdWx0aWNhc3Q0OGJpdEFkZHJlc3MoKTsKKyAgICBUZXN0TXVsdGljYXN0MzJiaXRBZGRyZXNzKCk7CisgICAgVGVzdE11bHRpY2FzdDhiaXRBZGRyZXNzKCk7CisKKyAgICAvLyBTdGF0ZWZ1bCB1bmljYXN0IGFkZHJlc3NlcyBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdFN0YXRlZnVsU291cmNlNjRiaXREZXN0aW5hdGlvbjY0Yml0Q29udGV4dDAoKTsKKyAgICBUZXN0U3RhdGVmdWxTb3VyY2U2NGJpdERlc3RpbmF0aW9uNjRiaXRDb250ZXh0MElmQ29udGV4dEluTGluZSgpOworICAgIFRlc3RTdGF0ZWZ1bFNvdXJjZTE2Yml0RGVzdGluYXRpb24xNmJpdENvbnRleHQwKCk7CisgICAgVGVzdFN0YXRlZnVsQ29tcHJlc3NhYmxlTG9uZ0FkZHJlc3Nlc0NvbnRleHQwKCk7CisgICAgVGVzdFN0YXRlZnVsQ29tcHJlc3NhYmxlU2hvcnRBZGRyZXNzZXNDb250ZXh0MCgpOworICAgIFRlc3RTdGF0ZWZ1bENvbXByZXNzYWJsZUxvbmdTaG9ydEFkZHJlc3Nlc0NvbnRleHQwKCk7CisgICAgVGVzdFN0YXRlZnVsU291cmNlNjRiaXREZXN0aW5hdGlvbjEyOGJpdENvbnRleHQxKCk7CisgICAgVGVzdFN0YXRlZnVsU291cmNlNjRiaXREZXN0aW5hdGlvbjY0Yml0Q29udGV4dDEoKTsKKyAgICBUZXN0U3RhdGVmdWxTb3VyY2VEZXN0aW5hdGlvbklubGluZUNvbnRleHQyQ0lERmFsc2UoKTsKKworICAgIC8vIFN0YXRlZnVsIG11bHRpY2FzdCBhZGRyZXNzZXMgY29tcHJlc3Npb24gLyBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3RTdGF0ZWZ1bE11bHRpY2FzdERlc3RpbmF0aW9uNDhiaXRDb250ZXh0MCgpOworCisgICAgLy8gVHJhZmZpYyBDbGFzcyBhbmQgRmxvdyBMYWJlbCBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdFRyYWZmaWNDbGFzc0Zsb3dMYWJlbDNCeXRlcygpOworICAgIFRlc3RUcmFmZmljQ2xhc3NGbG93TGFiZWwxQnl0ZSgpOworICAgIFRlc3RUcmFmZmljQ2xhc3NGbG93TGFiZWwxQnl0ZUVjbk9ubHkoKTsKKyAgICBUZXN0VHJhZmZpY0NsYXNzRmxvd0xhYmVsSW5saW5lKCk7CisKKyAgICAvLyBIb3AgTGltaXQgY29tcHJlc3Npb24gLyBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3RIb3BMaW1pdDEoKTsKKyAgICBUZXN0SG9wTGltaXQyNTUoKTsKKyAgICBUZXN0SG9wTGltaXRJbmxpbmUoKTsKKworICAgIC8vIFVEUCBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdFVkcFNvdXJjZURlc3RpbmF0aW9uSW5saW5lKCk7CisgICAgVGVzdFVkcFNvdXJjZUlubGluZURlc3RpbmF0aW9uOGJpdCgpOworICAgIFRlc3RVZHBTb3VyY2U4Yml0RGVzdGluYXRpb25JbmxpbmUoKTsKKyAgICBUZXN0VWRwRnVsbHlDb21wcmVzc2VkKCk7CisgICAgVGVzdFVkcEZ1bGx5Q29tcHJlc3NlZE11bHRpY2FzdCgpOworICAgIFRlc3RVZHBXaXRob3V0TmhjKCk7CisKKyAgICAvLyBFeHRlbnNpb24gSGVhZGVycyBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wTm9QYWRkaW5nKCk7CisgICAgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkMSgpOworICAgIFRlc3RFeHRlbnNpb25IZWFkZXJIb3BCeUhvcFBhZE4yKCk7CisgICAgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkTjMoKTsKKyAgICBUZXN0RXh0ZW5zaW9uSGVhZGVySG9wQnlIb3BQYWRONCgpOworICAgIFRlc3RFeHRlbnNpb25IZWFkZXJIb3BCeUhvcFBhZE41KCk7CisgICAgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkTjYoKTsKKyAgICBUZXN0RXh0ZW5zaW9uSGVhZGVySG9wQnlIb3BQYWRONygpOworICAgIFRlc3RFeHRlbnNpb25IZWFkZXJIb3BCeUhvcFBhZE4yVWRwRnVsbHlDb21wcmVzc2VkKCk7CisKKyAgICAvLyBJUC1pbi1JUCBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdElwSW5JcEhvcEJ5SG9wUGFkTjJVZHBTb3VyY2VEZXN0aW5hdGlvbklubGluZSgpOworICAgIFRlc3RJcEluSXBXaXRob3V0RXh0ZW5zaW9uSGVhZGVyKCk7CisKKyAgICAvLyBJbnZhbGlkIGZyYW1lIHRvIGJlIGRlY29tcHJlc3NlZC4KKyAgICBUZXN0RXJyb3JOb0lwaGNEaXNwYXRjaCgpOworICAgIFRlc3RFcnJvclRydW5jYXRlZElwaGMoKTsKKyAgICBUZXN0RXJyb3JSZXNlcnZlZFZhbHVlRGVzdGluYXRpb24wMTAwKCk7CisgICAgVGVzdEVycm9yUmVzZXJ2ZWRWYWx1ZURlc3RpbmF0aW9uMTEwMSgpOworICAgIFRlc3RFcnJvclJlc2VydmVkVmFsdWVEZXN0aW5hdGlvbjExMTAoKTsKKyAgICBUZXN0RXJyb3JSZXNlcnZlZFZhbHVlRGVzdGluYXRpb24xMTExKCk7CisgICAgVGVzdEVycm9yVW5rbm93bk5oYygpOworICAgIFRlc3RFcnJvclJlc2VydmVkTmhjNSgpOworICAgIFRlc3RFcnJvclJlc2VydmVkTmhjNigpOworCisgICAgdGVzdEZyZWVJbnN0YW5jZShzSW5zdGFuY2UpOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2lmZGVmIEVOQUJMRV9URVNUX01BSU4KK2ludCBtYWluKHZvaWQpCit7CisgICAgVGVzdExvd3BhbklwaGMoKTsKKworICAgIHByaW50ZigiQWxsIHRlc3RzIHBhc3NlZFxuIik7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF9sb3dwYW4uaHBwIGIvdGVzdHMvdW5pdC90ZXN0X2xvd3Bhbi5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjZWI1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF9sb3dwYW4uaHBwCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRFU1RfTE9XUEFOX0hQUAorI2RlZmluZSBURVNUX0xPV1BBTl9IUFAKKworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAibWFjL21hYy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9oZWFkZXJzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbG93cGFuLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUZXN0SXBoY1ZlY3RvcgoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtDb250ZXh0VW51c2VkID0gMjU1LAorICAgICAgICBrUGF5bG9hZE1heExlbmd0aCA9IDUxMgorICAgIH07CisKKyAgICBzdHJ1Y3QgUGF5bG9hZAorICAgIHsKKyAgICAgICAgdWludDhfdCBtRGF0YVtrUGF5bG9hZE1heExlbmd0aF07CisgICAgICAgIHVpbnQxNl90IG1MZW5ndGg7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBUZXN0SXBoY1ZlY3Rvcihjb25zdCBjaGFyICphVGVzdE5hbWUpIHsKKyAgICAgICAgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOworICAgICAgICBtVGVzdE5hbWUgPSBhVGVzdE5hbWU7CisgICAgICAgIG1TcmNDb250ZXh0Lm1Db250ZXh0SWQgPSBrQ29udGV4dFVudXNlZDsKKyAgICAgICAgbURzdENvbnRleHQubUNvbnRleHRJZCA9IGtDb250ZXh0VW51c2VkOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgbG9uZyBNQUMgc291cmNlIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYUFkZHJlc3MgUG9pbnRlciB0byB0aGUgbG9uZyBNQUMgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWFjU291cmNlKGNvbnN0IHVpbnQ4X3QgKmFBZGRyZXNzKSB7CisgICAgICAgIG1NYWNTb3VyY2UubUxlbmd0aCA9IE9UX0VYVF9BRERSRVNTX1NJWkU7CisgICAgICAgIG1lbWNweSgmbU1hY1NvdXJjZS5tRXh0QWRkcmVzcywgYUFkZHJlc3MsIG1NYWNTb3VyY2UubUxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBzaG9ydCBNQUMgc291cmNlIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYUFkZHJlc3MgU2hvcnQgTUFDIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1hY1NvdXJjZSh1aW50MTZfdCBhQWRkcmVzcykgeworICAgICAgICBtTWFjU291cmNlLm1MZW5ndGggPSAyOworICAgICAgICBtTWFjU291cmNlLm1TaG9ydEFkZHJlc3MgPSBhQWRkcmVzczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGxvbmcgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYUFkZHJlc3MgUG9pbnRlciB0byB0aGUgbG9uZyBNQUMgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWFjRGVzdGluYXRpb24oY29uc3QgdWludDhfdCAqYUFkZHJlc3MpIHsKKyAgICAgICAgbU1hY0Rlc3RpbmF0aW9uLm1MZW5ndGggPSBPVF9FWFRfQUREUkVTU19TSVpFOworICAgICAgICBtZW1jcHkoJm1NYWNEZXN0aW5hdGlvbi5tRXh0QWRkcmVzcywgYUFkZHJlc3MsIG1NYWNEZXN0aW5hdGlvbi5tTGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHNob3J0IE1BQyBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtIGFBZGRyZXNzIFNob3J0IE1BQyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYWNEZXN0aW5hdGlvbih1aW50MTZfdCBhQWRkcmVzcykgeworICAgICAgICBtTWFjRGVzdGluYXRpb24ubUxlbmd0aCA9IDI7CisgICAgICAgIG1NYWNEZXN0aW5hdGlvbi5tU2hvcnRBZGRyZXNzID0gYUFkZHJlc3M7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgSVB2NiBIZWFkZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYVZlcnNpb25DbGFzc0Zsb3cgVmFsdWUgb2YgdGhlIFZlcnNpb24sIFRyYWZmaWMgY2xhc3MgYW5kIEZsb3cgY29udHJvbCBmaWVsZHMuCisgICAgICogQHBhcmFtIGFQYXlsb2FkTGVuZ3RoICAgIFZhbHVlIG9mIHRoZSBwYXlsb2FkIGxlbmd0aCBmaWVsZC4KKyAgICAgKiBAcGFyYW0gYU5leHRIZWFkZXIgICAgICAgVmFsdWUgb2YgdGhlIG5leHQgaGVhZGVyIGZpZWxkLgorICAgICAqIEBwYXJhbSBhSG9wTGltaXQgICAgICAgICBWYWx1ZSBvZiB0aGUgaG9wIGxpbWl0IGZpZWxkLgorICAgICAqIEBwYXJhbSBhU291cmNlICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50cyBJUHY2IHNvdXJjZSBhZGRyZXNzLgorICAgICAqIEBwYXJhbSBhRGVzdGluYXRpb24gICAgICBTdHJpbmcgcmVwcmVzZW50cyBJUHY2IGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElwSGVhZGVyKHVpbnQzMl90IGFWZXJzaW9uQ2xhc3NGbG93LCB1aW50MTZfdCBhUGF5bG9hZExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIElwNjo6SXBQcm90byBhTmV4dEhlYWRlciwgdWludDhfdCBhSG9wTGltaXQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphU291cmNlLCBjb25zdCBjaGFyICphRGVzdGluYXRpb24pIHsKKyAgICAgICAgbUlwSGVhZGVyLkluaXQoYVZlcnNpb25DbGFzc0Zsb3cpOworICAgICAgICBtSXBIZWFkZXIuU2V0UGF5bG9hZExlbmd0aChhUGF5bG9hZExlbmd0aCk7CisgICAgICAgIG1JcEhlYWRlci5TZXROZXh0SGVhZGVyKGFOZXh0SGVhZGVyKTsKKyAgICAgICAgbUlwSGVhZGVyLlNldEhvcExpbWl0KGFIb3BMaW1pdCk7CisgICAgICAgIG1JcEhlYWRlci5HZXRTb3VyY2UoKS5Gcm9tU3RyaW5nKGFTb3VyY2UpOworICAgICAgICBtSXBIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Gcm9tU3RyaW5nKGFEZXN0aW5hdGlvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgSVB2NiBFbmNhcHN1bGF0ZWQgSGVhZGVyLgorICAgICAqCisgICAgICogQHBhcmFtIGFWZXJzaW9uQ2xhc3NGbG93IFZhbHVlIG9mIHRoZSBWZXJzaW9uLCBUcmFmZmljIGNsYXNzIGFuZCBGbG93IGNvbnRyb2wgZmllbGRzLgorICAgICAqIEBwYXJhbSBhUGF5bG9hZExlbmd0aCAgICBWYWx1ZSBvZiB0aGUgcGF5bG9hZCBsZW5ndGggZmllbGQuCisgICAgICogQHBhcmFtIGFOZXh0SGVhZGVyICAgICAgIFZhbHVlIG9mIHRoZSBuZXh0IGhlYWRlciBmaWVsZC4KKyAgICAgKiBAcGFyYW0gYUhvcExpbWl0ICAgICAgICAgVmFsdWUgb2YgdGhlIGhvcCBsaW1pdCBmaWVsZC4KKyAgICAgKiBAcGFyYW0gYVNvdXJjZSAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudHMgSVB2NiBzb3VyY2UgYWRkcmVzcy4KKyAgICAgKiBAcGFyYW0gYURlc3RpbmF0aW9uICAgICAgU3RyaW5nIHJlcHJlc2VudHMgSVB2NiBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJcFR1bm5lbGVkSGVhZGVyKHVpbnQzMl90IGFWZXJzaW9uQ2xhc3NGbG93LCB1aW50MTZfdCBhUGF5bG9hZExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXA2OjpJcFByb3RvIGFOZXh0SGVhZGVyLCB1aW50OF90IGFIb3BMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVNvdXJjZSwgY29uc3QgY2hhciAqYURlc3RpbmF0aW9uKSB7CisgICAgICAgIG1JcFR1bm5lbGVkSGVhZGVyLkluaXQoYVZlcnNpb25DbGFzc0Zsb3cpOworICAgICAgICBtSXBUdW5uZWxlZEhlYWRlci5TZXRQYXlsb2FkTGVuZ3RoKGFQYXlsb2FkTGVuZ3RoKTsKKyAgICAgICAgbUlwVHVubmVsZWRIZWFkZXIuU2V0TmV4dEhlYWRlcihhTmV4dEhlYWRlcik7CisgICAgICAgIG1JcFR1bm5lbGVkSGVhZGVyLlNldEhvcExpbWl0KGFIb3BMaW1pdCk7CisgICAgICAgIG1JcFR1bm5lbGVkSGVhZGVyLkdldFNvdXJjZSgpLkZyb21TdHJpbmcoYVNvdXJjZSk7CisgICAgICAgIG1JcFR1bm5lbGVkSGVhZGVyLkdldERlc3RpbmF0aW9uKCkuRnJvbVN0cmluZyhhRGVzdGluYXRpb24pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIElQdjYgRXh0ZW5zaW9uIEhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhRXh0SGVhZGVyICAgICAgICBQb2ludGVyIHRvIHRoZSBleHRlbnNpb24gaGVhZGVyIGRhdGEuCisgICAgICogQHBhcmFtIGFFeHRIZWFkZXJMZW5ndGggIExlbmd0aCBvZiB0aGUgZXh0ZW5zaW9uIGhlYWRlciBkYXRhLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRFeHRIZWFkZXIoY29uc3QgdWludDhfdCAqYUV4dEhlYWRlciwgdWludDE2X3QgYUV4dEhlYWRlckxlbmd0aCkgeworICAgICAgICBtZW1jcHkobUV4dEhlYWRlci5tRGF0YSwgYUV4dEhlYWRlciwgYUV4dEhlYWRlckxlbmd0aCk7CisgICAgICAgIG1FeHRIZWFkZXIubUxlbmd0aCA9IGFFeHRIZWFkZXJMZW5ndGg7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgVURQIEhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhU291cmNlICAgICAgIFZhbHVlIG9mIHRoZSBzb3VyY2UgcG9ydC4KKyAgICAgKiBAcGFyYW0gYURlc3RpbmF0aW9uICBWYWx1ZSBvZiB0aGUgZGVzdGluYXRpb24gcG9ydC4KKyAgICAgKiBAcGFyYW0gYUxlbmd0aCAgICAgICBWYWx1ZSBvZiB0aGUgbGVuZ3RoIGZpZWxkLgorICAgICAqIEBwYXJhbSBhQ2hlY2tzdW0gICAgIFZhbHVlIG9mIHRoZSBjaGVja3N1bSBmaWVsZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VURQSGVhZGVyKHVpbnQxNl90IGFTb3VyY2UsIHVpbnQxNl90IGFEZXN0aW5hdGlvbiwgdWludDE2X3QgYUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQ2hlY2tzdW0pIHsKKyAgICAgICAgbVVkcEhlYWRlci5TZXRTb3VyY2VQb3J0KGFTb3VyY2UpOworICAgICAgICBtVWRwSGVhZGVyLlNldERlc3RpbmF0aW9uUG9ydChhRGVzdGluYXRpb24pOworICAgICAgICBtVWRwSGVhZGVyLlNldExlbmd0aChhTGVuZ3RoKTsKKyAgICAgICAgbVVkcEhlYWRlci5TZXRDaGVja3N1bShhQ2hlY2tzdW0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIExPV1BBTl9JUEhDIEhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhSXBoYyAgICAgICAgUG9pbnRlciB0byB0aGUgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgICAqIEBwYXJhbSBhSXBoY0xlbmd0aCAgTGVuZ3RoIG9mIHRoZSBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElwaGNIZWFkZXIoY29uc3QgdWludDhfdCAqYUlwaGMsIHVpbnQxNl90IGFJcGhjTGVuZ3RoKSB7CisgICAgICAgIG1lbWNweShtSXBoY0hlYWRlci5tRGF0YSwgYUlwaGMsIGFJcGhjTGVuZ3RoKTsKKyAgICAgICAgbUlwaGNIZWFkZXIubUxlbmd0aCA9IGFJcGhjTGVuZ3RoOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGV4cGVjdCByZXN1bHQgb2YgdGhlIGNvbXByZXNzaW9uIC8gZGVjb21wcmVzc2lvbiBwcm9jZWR1cmUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYUVycm9yICBFeHBlY3RlZCByZXN1bHQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEVycm9yKG90RXJyb3IgYUVycm9yKSB7IG1FcnJvciA9IGFFcnJvcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgSVB2NiBQYXlsb2FkICh1bmNvbXByZXNzZWQgZGF0YSkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYVBheWxvYWQgIFBvaW50ZXIgdG8gdGhlIHBheWxvYWQgZGF0YS4KKyAgICAgKiBAcGFyYW0gYUxlbmd0aCAgIExlbmd0aCBvZiB0aGUgcGF5bG9hZCBkYXRhLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQYXlsb2FkKGNvbnN0IHVpbnQ4X3QgKmFQYXlsb2FkLCB1aW50MTZfdCBhTGVuZ3RoKSB7CisgICAgICAgIG1lbWNweShtUGF5bG9hZC5tRGF0YSwgYVBheWxvYWQsIGFMZW5ndGgpOworICAgICAgICBtUGF5bG9hZC5tTGVuZ3RoID0gYUxlbmd0aDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBJUHY2IGhlYWRlciB0byB0aGUgdW5jb21wcmVzc2VkCisgICAgICogcGF5bG9hZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhUGF5bG9hZE9mZnNldCAgVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIElQdjYgaGVhZGVyIHRvIHRoZSB1bmNvbXByZXNzZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBheWxvYWRPZmZzZXQodWludDE2X3QgYVBheWxvYWRPZmZzZXQpIHsgbVBheWxvYWRPZmZzZXQgPSBhUGF5bG9hZE9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBjb21wcmVzc2VkIExPV1BBTl9JUEhDIGZyYW1lLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGNvbXByZXNzZWQgc3RyZWFtLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBHZXRDb21wcmVzc2VkU3RyZWFtKHVpbnQ4X3QgKmFJcGhjLCB1aW50MTZfdCAmYUlwaGNMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBtZXNzYWdlIG9iamVjdCB3aXRoIHRoZSB1bmNvbXByZXNzZWQgSVB2NiBwYWNrZXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbWVzc2FnZSBvYmplY3Qgd2l0aCB0aGUgdW5jb21wcmVzc2VkIElQdjYgcGFja2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBHZXRVbmNvbXByZXNzZWRTdHJlYW0oTWVzc2FnZSAmYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBkYXRhIHdpdGggdGhlIHVuY29tcHJlc3NlZCBJUHY2IHBhY2tldC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBkYXRhIHdpdGggdGhlIHVuY29tcHJlc3NlZCBJUHY2IHBhY2tldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgR2V0VW5jb21wcmVzc2VkU3RyZWFtKHVpbnQ4X3QgKmFJcDYsIHVpbnQxNl90ICZhSXA2TGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgZmllbGRzIHJlcHJlc2VudCB1bmNvbXByZXNzZWQgSVB2NiBwYWNrZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBNYWM6OkFkZHJlc3MgICBtTWFjU291cmNlOworICAgIE1hYzo6QWRkcmVzcyAgIG1NYWNEZXN0aW5hdGlvbjsKKyAgICBJcDY6OkhlYWRlciAgICBtSXBIZWFkZXI7CisgICAgUGF5bG9hZCAgICAgICAgbUV4dEhlYWRlcjsKKyAgICBJcDY6OkhlYWRlciAgICBtSXBUdW5uZWxlZEhlYWRlcjsKKyAgICBJcDY6OlVkcEhlYWRlciBtVWRwSGVhZGVyOworCisgICAgLyoqCisgICAgICogVGhpcyBmaWVsZHMgcmVwcmVzZW50IGNvbXByZXNzZWQgSVB2NiBwYWNrZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBQYXlsb2FkICAgICAgICAgICBtSXBoY0hlYWRlcjsKKyAgICB1aW50MTZfdCAgICAgICAgICBtUGF5bG9hZE9mZnNldDsKKyAgICBMb3dwYW46OkNvbnRleHQgICBtU3JjQ29udGV4dDsKKyAgICBMb3dwYW46OkNvbnRleHQgICBtRHN0Q29udGV4dDsKKworICAgIC8qKgorICAgICAqIEdlbmVyYWwgcHVycG9zZSBmaWVsZHMuCisgICAgICoKKyAgICAgKi8KKyAgICBQYXlsb2FkICAgICAgICAgICBtUGF5bG9hZDsKKyAgICBvdEVycm9yICAgICAgIG1FcnJvcjsKKyAgICBjb25zdCBjaGFyICAgICAgICptVGVzdE5hbWU7Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIFRFU1RfTE9XUEFOX0hQUApkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X21hY19mcmFtZS5jcHAgYi90ZXN0cy91bml0L3Rlc3RfbWFjX2ZyYW1lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWJkNzRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X21hY19mcmFtZS5jcHAKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisKK25hbWVzcGFjZSBvdCB7CisKK3ZvaWQgVGVzdE1hY0hlYWRlcih2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QKKyAgICB7CisgICAgICAgIHVpbnQxNl90IGZjZjsKKyAgICAgICAgdWludDhfdCBzZWNDdGw7CisgICAgICAgIHVpbnQ4X3QgaGVhZGVyTGVuZ3RoOworICAgIH0gdGVzdHNbXSA9CisgICAgeworICAgICAgICB7IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyTm9uZSB8IE1hYzo6RnJhbWU6OmtGY2ZTcmNBZGRyTm9uZSwgMCwgMyB9LAorICAgICAgICB7IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyTm9uZSB8IE1hYzo6RnJhbWU6OmtGY2ZTcmNBZGRyU2hvcnQsIDAsIDcgfSwKKyAgICAgICAgeyBNYWM6OkZyYW1lOjprRmNmRHN0QWRkck5vbmUgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkckV4dCwgMCwgMTMgfSwKKyAgICAgICAgeyBNYWM6OkZyYW1lOjprRmNmRHN0QWRkclNob3J0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJOb25lLCAwLCA3IH0sCisgICAgICAgIHsgTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJFeHQgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkck5vbmUsIDAsIDEzIH0sCisgICAgICAgIHsgTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJTaG9ydCB8IE1hYzo6RnJhbWU6OmtGY2ZTcmNBZGRyU2hvcnQsIDAsIDExIH0sCisgICAgICAgIHsgTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJTaG9ydCB8IE1hYzo6RnJhbWU6OmtGY2ZTcmNBZGRyRXh0LCAwLCAxNyB9LAorICAgICAgICB7IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyRXh0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJTaG9ydCwgMCwgMTcgfSwKKyAgICAgICAgeyBNYWM6OkZyYW1lOjprRmNmRHN0QWRkckV4dCB8IE1hYzo6RnJhbWU6OmtGY2ZTcmNBZGRyRXh0LCAwLCAyMyB9LAorCisgICAgICAgIHsgTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJTaG9ydCB8IE1hYzo6RnJhbWU6OmtGY2ZTcmNBZGRyU2hvcnQgfCBNYWM6OkZyYW1lOjprRmNmUGFuaWRDb21wcmVzc2lvbiwgMCwgOSB9LAorICAgICAgICB7IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkckV4dCB8IE1hYzo6RnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uLCAwLCAxNSB9LAorICAgICAgICB7IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyRXh0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJTaG9ydCB8IE1hYzo6RnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uLCAwLCAxNSB9LAorICAgICAgICB7IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyRXh0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJFeHQgfCBNYWM6OkZyYW1lOjprRmNmUGFuaWRDb21wcmVzc2lvbiwgMCwgMjEgfSwKKworICAgICAgICB7CisgICAgICAgICAgICBNYWM6OkZyYW1lOjprRmNmRHN0QWRkclNob3J0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJTaG9ydCB8IE1hYzo6RnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uIHwKKyAgICAgICAgICAgIE1hYzo6RnJhbWU6OmtGY2ZTZWN1cml0eUVuYWJsZWQsIE1hYzo6RnJhbWU6OmtTZWNNaWMzMiB8IE1hYzo6RnJhbWU6OmtLZXlJZE1vZGUxLCAxNQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICBNYWM6OkZyYW1lOjprRmNmRHN0QWRkclNob3J0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJTaG9ydCB8IE1hYzo6RnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uIHwKKyAgICAgICAgICAgIE1hYzo6RnJhbWU6OmtGY2ZTZWN1cml0eUVuYWJsZWQsIE1hYzo6RnJhbWU6OmtTZWNNaWMzMiB8IE1hYzo6RnJhbWU6OmtLZXlJZE1vZGUyLCAxOQorICAgICAgICB9LAorICAgIH07CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKHRlc3RzKSAvIHNpemVvZih0ZXN0c1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgcHNkdVtNYWM6OkZyYW1lOjprTVRVXTsKKyAgICAgICAgTWFjOjpGcmFtZSBmcmFtZTsKKworICAgICAgICBmcmFtZS5tUHNkdSA9IHBzZHU7CisKKyAgICAgICAgZnJhbWUuSW5pdE1hY0hlYWRlcih0ZXN0c1tpXS5mY2YsIHRlc3RzW2ldLnNlY0N0bCk7CisgICAgICAgIHByaW50ZigiJWRcbiIsIGZyYW1lLkdldEhlYWRlckxlbmd0aCgpKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGZyYW1lLkdldEhlYWRlckxlbmd0aCgpID09IHRlc3RzW2ldLmhlYWRlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICJNYWNIZWFkZXIgdGVzdCBmYWlsZWRcbiIpOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNpZmRlZiBFTkFCTEVfVEVTVF9NQUlOCitpbnQgbWFpbih2b2lkKQoreworICAgIG90OjpUZXN0TWFjSGVhZGVyKCk7CisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X21lc3NhZ2UuY3BwIGIvdGVzdHMvdW5pdC90ZXN0X21lc3NhZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NmVhZTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3RfbWVzc2FnZS5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJ0ZXN0X3BsYXRmb3JtLmgiCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisKK3ZvaWQgVGVzdE1lc3NhZ2Uodm9pZCkKK3sKKyAgICBvdEluc3RhbmNlICppbnN0YW5jZTsKKyAgICBvdDo6TWVzc2FnZVBvb2wgKm1lc3NhZ2VQb29sOworICAgIG90OjpNZXNzYWdlICptZXNzYWdlOworICAgIHVpbnQ4X3Qgd3JpdGVCdWZmZXJbMTAyNF07CisgICAgdWludDhfdCByZWFkQnVmZmVyWzEwMjRdOworCisgICAgaW5zdGFuY2UgPSB0ZXN0SW5pdEluc3RhbmNlKCk7CisgICAgVmVyaWZ5T3JRdWl0KGluc3RhbmNlICE9IE5VTEwsICJOdWxsIE9wZW5UaHJlYWQgaW5zdGFuY2VcbiIpOworCisgICAgbWVzc2FnZVBvb2wgPSAmaW5zdGFuY2UtPm1JcDYubU1lc3NhZ2VQb29sOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZih3cml0ZUJ1ZmZlcik7IGkrKykKKyAgICB7CisgICAgICAgIHdyaXRlQnVmZmVyW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocmFuZG9tKCkpOworICAgIH0KKworICAgIFZlcmlmeU9yUXVpdCgobWVzc2FnZSA9IG1lc3NhZ2VQb29sLT5OZXcob3Q6Ok1lc3NhZ2U6OmtUeXBlSXA2LCAwKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgIk1lc3NhZ2U6Ok5ldyBmYWlsZWRcbiIpOworICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZS0+U2V0TGVuZ3RoKHNpemVvZih3cml0ZUJ1ZmZlcikpLAorICAgICAgICAgICAgICAgICAgIk1lc3NhZ2U6OlNldExlbmd0aCBmYWlsZWRcbiIpOworICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlLT5Xcml0ZSgwLCBzaXplb2Yod3JpdGVCdWZmZXIpLCB3cml0ZUJ1ZmZlcikgPT0gc2l6ZW9mKHdyaXRlQnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgIk1lc3NhZ2U6OldyaXRlIGZhaWxlZFxuIik7CisgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UtPlJlYWQoMCwgc2l6ZW9mKHJlYWRCdWZmZXIpLCByZWFkQnVmZmVyKSA9PSBzaXplb2YocmVhZEJ1ZmZlciksCisgICAgICAgICAgICAgICAgICJNZXNzYWdlOjpSZWFkIGZhaWxlZFxuIik7CisgICAgVmVyaWZ5T3JRdWl0KG1lbWNtcCh3cml0ZUJ1ZmZlciwgcmVhZEJ1ZmZlciwgc2l6ZW9mKHdyaXRlQnVmZmVyKSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgIk1lc3NhZ2UgY29tcGFyZSBmYWlsZWRcbiIpOworICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlLT5HZXRMZW5ndGgoKSA9PSAxMDI0LAorICAgICAgICAgICAgICAgICAiTWVzc2FnZTo6R2V0TGVuZ3RoIGZhaWxlZFxuIik7CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlLT5GcmVlKCksCisgICAgICAgICAgICAgICAgICAiTWVzc2FnZTo6RnJlZSBmYWlsZWRcbiIpOworCisgICAgdGVzdEZyZWVJbnN0YW5jZShpbnN0YW5jZSk7Cit9CisKKyNpZmRlZiBFTkFCTEVfVEVTVF9NQUlOCitpbnQgbWFpbih2b2lkKQoreworICAgIFRlc3RNZXNzYWdlKCk7CisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X21lc3NhZ2VfcXVldWUuY3BwIGIvdGVzdHMvdW5pdC90ZXN0X21lc3NhZ2VfcXVldWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDFlOTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3RfbWVzc2FnZV9xdWV1ZS5jcHAKQEAgLTAsMCArMSwyNzcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgInRlc3RfcGxhdGZvcm0uaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgInRlc3RfdXRpbC5oIgorCisjZGVmaW5lIGtOdW1UZXN0TWVzc2FnZXMgICAgICA1CisKK3N0YXRpYyBvdEluc3RhbmNlICpzSW5zdGFuY2U7CitzdGF0aWMgb3Q6Ok1lc3NhZ2VQb29sICpzTWVzc2FnZVBvb2w7CisKKy8vIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgcXVldWUgdG8gbWF0Y2ggdGhlIHBhc3NlZCBpbiBtZXNzYWdlcwordm9pZCBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50KG90OjpNZXNzYWdlUXVldWUgJmFNZXNzYWdlUXVldWUsIGludCBhRXhwZWN0ZWRMZW5ndGgsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgb3Q6Ok1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgb3Q6Ok1lc3NhZ2UgKm1zZ0FyZzsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIGFFeHBlY3RlZExlbmd0aCk7CisKKyAgICBpZiAoYUV4cGVjdGVkTGVuZ3RoID09IDApCisgICAgeworICAgICAgICBtZXNzYWdlID0gYU1lc3NhZ2VRdWV1ZS5HZXRIZWFkKCk7CisgICAgICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlID09IE5VTEwsICJNZXNzYWdlUXVldWUgaXMgbm90IGVtcHR5IHdoZW4gZXhwZWN0ZWQgbGVuIGlzIHplcm8uXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChtZXNzYWdlID0gYU1lc3NhZ2VRdWV1ZS5HZXRIZWFkKCk7IG1lc3NhZ2UgIT0gTlVMTDsgbWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGFFeHBlY3RlZExlbmd0aCAhPSAwLCAiTWVzc2FnZVF1ZXVlIGNvbnRhaW5zIG1vcmUgZW50cmllcyB0aGFuIGV4cGVjdGVkXG4iKTsKKworICAgICAgICAgICAgbXNnQXJnID0gdmFfYXJnKGFyZ3MsIG90OjpNZXNzYWdlICopOworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KG1zZ0FyZyA9PSBtZXNzYWdlLCAiTWVzc2FnZVF1ZXVlIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggd2hhdCBpcyBleHBlY3RlZC5cbiIpOworCisgICAgICAgICAgICBhRXhwZWN0ZWRMZW5ndGgtLTsKKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeU9yUXVpdChhRXhwZWN0ZWRMZW5ndGggPT0gMCwgIk1lc3NhZ2VRdWV1ZSBjb250YWlucyBsZXNzIGVudHJpZXMgdGhhbiBleHBlY3RlZFxuIik7CisgICAgfQorCisgICAgdmFfZW5kKGFyZ3MpOworfQorCit2b2lkIFRlc3RNZXNzYWdlUXVldWUodm9pZCkKK3sKKyAgICBvdDo6TWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZTsKKyAgICBvdDo6TWVzc2FnZSAqbXNnW2tOdW1UZXN0TWVzc2FnZXNdOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgdWludDE2X3QgbXNnQ291bnQsIGJ1ZmZlckNvdW50OworCisgICAgc0luc3RhbmNlID0gdGVzdEluaXRJbnN0YW5jZSgpOworICAgIFZlcmlmeU9yUXVpdChzSW5zdGFuY2UgIT0gTlVMTCwgIk51bGwgaW5zdGFuY2UiKTsKKworICAgIHNNZXNzYWdlUG9vbCA9ICZzSW5zdGFuY2UtPm1JcDYubU1lc3NhZ2VQb29sOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtVGVzdE1lc3NhZ2VzOyBpKyspCisgICAgeworICAgICAgICBtc2dbaV0gPSBzTWVzc2FnZVBvb2wtPk5ldyhvdDo6TWVzc2FnZTo6a1R5cGVJcDYsIDApOworICAgICAgICBWZXJpZnlPclF1aXQobXNnW2ldICE9IE5VTEwsICJNZXNzYWdlOjpOZXcgZmFpbGVkXG4iKTsKKyAgICB9CisKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgMCk7CisKKyAgICAvLyBFbnF1ZXVlIDEgbWVzc2FnZSBhbmQgcmVtb3ZlIGl0CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRW5xdWV1ZSgqbXNnWzBdKSwgIk1lc3NhZ2VRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAxLCBtc2dbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkRlcXVldWUoKm1zZ1swXSksICJNZXNzYWdlUXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgMCk7CisKKyAgICAvLyBFbnF1ZXVlIDUgbWVzc2FnZXMKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5FbnF1ZXVlKCptc2dbMF0pLCAiTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDEsIG1zZ1swXSk7CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRW5xdWV1ZSgqbXNnWzFdKSwgIk1lc3NhZ2VRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAyLCBtc2dbMF0sIG1zZ1sxXSk7CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRW5xdWV1ZSgqbXNnWzJdKSwgIk1lc3NhZ2VRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAzLCBtc2dbMF0sIG1zZ1sxXSwgbXNnWzJdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5FbnF1ZXVlKCptc2dbM10pLCAiTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDQsIG1zZ1swXSwgbXNnWzFdLCBtc2dbMl0sIG1zZ1szXSk7CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRW5xdWV1ZSgqbXNnWzRdKSwgIk1lc3NhZ2VRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCA1LCBtc2dbMF0sIG1zZ1sxXSwgbXNnWzJdLCBtc2dbM10sIG1zZ1s0XSk7CisKKyAgICAvLyBDaGVjayB0aGUgR2V0SW5mbygpCisgICAgbWVzc2FnZVF1ZXVlLkdldEluZm8obXNnQ291bnQsIGJ1ZmZlckNvdW50KTsKKyAgICBWZXJpZnlPclF1aXQobXNnQ291bnQgPT0gNSwgIk1lc3NhZ2VRdWV1ZTo6R2V0SW5mbygpIGZhaWxlZC5cbiIpOworCisgICAgLy8gUmVtb3ZlIGZyb20gaGVhZAorICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkRlcXVldWUoKm1zZ1swXSksICJNZXNzYWdlUXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgNCwgbXNnWzFdLCBtc2dbMl0sIG1zZ1szXSwgbXNnWzRdKTsKKworICAgIC8vIFJlbW92ZSBhIG1lc3NhZ2UgaW4gbWlkZGxlCisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRGVxdWV1ZSgqbXNnWzNdKSwgIk1lc3NhZ2VRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAzLCBtc2dbMV0sIG1zZ1syXSwgbXNnWzRdKTsKKworICAgIC8vIFJlbW92ZSBmcm9tIHRhaWwKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5EZXF1ZXVlKCptc2dbNF0pLCAiTWVzc2FnZVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDIsIG1zZ1sxXSwgbXNnWzJdKTsKKworICAgIC8vIEFkZCBhZnRlciByZW1vdmVzCisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRW5xdWV1ZSgqbXNnWzBdKSwgIk1lc3NhZ2VRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAzLCBtc2dbMV0sIG1zZ1syXSwgbXNnWzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5FbnF1ZXVlKCptc2dbM10pLCAiTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDQsIG1zZ1sxXSwgbXNnWzJdLCBtc2dbMF0sIG1zZ1szXSk7CisKKyAgICAvLyBSZW1vdmUgYWxsIG1lc3NhZ2VzCisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRGVxdWV1ZSgqbXNnWzJdKSwgIk1lc3NhZ2VRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAzLCBtc2dbMV0sIG1zZ1swXSwgbXNnWzNdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5EZXF1ZXVlKCptc2dbMV0pLCAiTWVzc2FnZVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDIsIG1zZ1swXSwgbXNnWzNdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5EZXF1ZXVlKCptc2dbM10pLCAiTWVzc2FnZVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDEsIG1zZ1swXSk7CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRGVxdWV1ZSgqbXNnWzBdKSwgIk1lc3NhZ2VRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAwKTsKKworICAgIC8vIENoZWNrIHRoZSBmYWlsdXJlIGNhc2VzOiBFbnF1ZXVlIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2Ugb3IgZGVxdWV1ZSBhIG1lc3NhZ2Ugbm90IGluIHRoZSBxdWV1ZS4KKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5FbnF1ZXVlKCptc2dbMF0pLCAiTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDEsIG1zZ1swXSk7CisgICAgZXJyb3IgPSBtZXNzYWdlUXVldWUuRW5xdWV1ZSgqbXNnWzBdKTsKKyAgICBWZXJpZnlPclF1aXQoZXJyb3IgPT0gT1RfRVJST1JfQUxSRUFEWSwgIkVucXVldWluZyBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlIGRpZCBub3QgZmFpbCBhcyBleHBlY3RlZC5cbiIpOworICAgIGVycm9yID0gbWVzc2FnZVF1ZXVlLkRlcXVldWUoKm1zZ1sxXSk7CisgICAgVmVyaWZ5T3JRdWl0KGVycm9yID09IE9UX0VSUk9SX05PVF9GT1VORCwKKyAgICAgICAgICAgICAgICAgIkRlcXVldWluZyBhIG1lc3NhZ2Ugbm90IGluIHRoZSBxdWV1ZSBkaWQgbm90IGZhaWwgYXMgZXhwZWN0ZWQuXG4iKTsKKworICAgIHRlc3RGcmVlSW5zdGFuY2Uoc0luc3RhbmNlKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyB0aGUgY29udGVudCBvZiB0aGUgbWVzc2FnZSBxdWV1ZSB0byBtYXRjaCB0aGUgcGFzc2VkIGluIG1lc3NhZ2VzCit2b2lkIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnRVc2luZ090QXBpKG90TWVzc2FnZVF1ZXVlICphUXVldWUsIGludCBhRXhwZWN0ZWRMZW5ndGgsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgb3RNZXNzYWdlICptZXNzYWdlOworICAgIG90TWVzc2FnZSAqbXNnQXJnOworCisgICAgdmFfc3RhcnQoYXJncywgYUV4cGVjdGVkTGVuZ3RoKTsKKworICAgIGlmIChhRXhwZWN0ZWRMZW5ndGggPT0gMCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UgPSBvdE1lc3NhZ2VRdWV1ZUdldEhlYWQoYVF1ZXVlKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UgPT0gTlVMTCwgIk1lc3NhZ2VRdWV1ZSBpcyBub3QgZW1wdHkgd2hlbiBleHBlY3RlZCBsZW4gaXMgemVyby5cbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKG1lc3NhZ2UgPSBvdE1lc3NhZ2VRdWV1ZUdldEhlYWQoYVF1ZXVlKTsKKyAgICAgICAgICAgICBtZXNzYWdlICE9IE5VTEw7CisgICAgICAgICAgICAgbWVzc2FnZSA9IG90TWVzc2FnZVF1ZXVlR2V0TmV4dChhUXVldWUsIG1lc3NhZ2UpCisgICAgICAgICAgICApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChhRXhwZWN0ZWRMZW5ndGggIT0gMCwgIk1lc3NhZ2VRdWV1ZSBjb250YWlucyBtb3JlIGVudHJpZXMgdGhhbiBleHBlY3RlZFxuIik7CisKKyAgICAgICAgICAgIG1zZ0FyZyA9IHZhX2FyZyhhcmdzLCBvdE1lc3NhZ2UgKik7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQobXNnQXJnID09IG1lc3NhZ2UsICJNZXNzYWdlUXVldWUgY29udGVudCBkb2VzIG5vdCBtYXRjaCB3aGF0IGlzIGV4cGVjdGVkLlxuIik7CisKKyAgICAgICAgICAgIGFFeHBlY3RlZExlbmd0aC0tOworICAgICAgICB9CisKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGFFeHBlY3RlZExlbmd0aCA9PSAwLCAiTWVzc2FnZVF1ZXVlIGNvbnRhaW5zIGxlc3MgZW50cmllcyB0aGFuIGV4cGVjdGVkXG4iKTsKKyAgICB9CisKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKKy8vIFRoaXMgdGVzdCBjaGVja3MgYWxsIHRoZSBPcGVuVGhyZWFkIEMgQVBJcyBmb3IgYG90TWVzc2FnZVF1ZXVlYAordm9pZCBUZXN0TWVzc2FnZVF1ZXVlT3RBcGlzKHZvaWQpCit7CisgICAgb3RNZXNzYWdlICptc2dba051bVRlc3RNZXNzYWdlc107CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBvdE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgb3RNZXNzYWdlUXVldWUgcXVldWUsIHF1ZXVlMjsKKworICAgIHNJbnN0YW5jZSA9IHRlc3RJbml0SW5zdGFuY2UoKTsKKyAgICBWZXJpZnlPclF1aXQoc0luc3RhbmNlICE9IE5VTEwsICJOdWxsIGluc3RhbmNlIik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1UZXN0TWVzc2FnZXM7IGkrKykKKyAgICB7CisgICAgICAgIG1zZ1tpXSA9IG90SXA2TmV3TWVzc2FnZShzSW5zdGFuY2UsIHRydWUpOworICAgICAgICBWZXJpZnlPclF1aXQobXNnW2ldICE9IE5VTEwsICJvdElwNk5ld01lc3NhZ2UoKSBmYWlsZWQuXG4iKTsKKyAgICB9CisKKyAgICBvdE1lc3NhZ2VRdWV1ZUluaXQoJnF1ZXVlKTsKKyAgICBvdE1lc3NhZ2VRdWV1ZUluaXQoJnF1ZXVlMik7CisKKyAgICAvLyBDaGVjayBhbiBlbXB0eSBxdWV1ZS4KKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50VXNpbmdPdEFwaSgmcXVldWUsIDApOworCisgICAgLy8gQWRkIG1lc3NhZ2UgdG8gdGhlIHF1ZXVlIGFuZCBjaGVjayB0aGUgY29udGVudAorICAgIFN1Y2Nlc3NPclF1aXQob3RNZXNzYWdlUXVldWVFbnF1ZXVlKCZxdWV1ZSwgbXNnWzBdKSwgIkZhaWxlZCB0byBlbnF1ZXVlIGEgbWVzc2FnZSB0byBvdE1lc3NhZ2VRdWV1ZS5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnRVc2luZ090QXBpKCZxdWV1ZSwgMSwgbXNnWzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG90TWVzc2FnZVF1ZXVlRW5xdWV1ZSgmcXVldWUsIG1zZ1sxXSksICJGYWlsZWQgdG8gZW5xdWV1ZSBhIG1lc3NhZ2UgdG8gb3RNZXNzYWdlUXVldWUuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50VXNpbmdPdEFwaSgmcXVldWUsIDIsIG1zZ1swXSwgbXNnWzFdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG90TWVzc2FnZVF1ZXVlRW5xdWV1ZSgmcXVldWUsIG1zZ1syXSksICJGYWlsZWQgdG8gZW5xdWV1ZSBhIG1lc3NhZ2UgdG8gb3RNZXNzYWdlUXVldWUuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50VXNpbmdPdEFwaSgmcXVldWUsIDMsIG1zZ1swXSwgbXNnWzFdLCBtc2dbMl0pOworICAgIFN1Y2Nlc3NPclF1aXQob3RNZXNzYWdlUXVldWVFbnF1ZXVlKCZxdWV1ZSwgbXNnWzNdKSwgIkZhaWxlZCB0byBlbnF1ZXVlIGEgbWVzc2FnZSB0byBvdE1lc3NhZ2VRdWV1ZS5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnRVc2luZ090QXBpKCZxdWV1ZSwgNCwgbXNnWzBdLCBtc2dbMV0sIG1zZ1syXSwgbXNnWzNdKTsKKworICAgIC8vIFJlbW92ZSBlbGVtZW50cyBhbmQgY2hlY2sgdGhlIGNvbnRlbnQKKyAgICBTdWNjZXNzT3JRdWl0KG90TWVzc2FnZVF1ZXVlRGVxdWV1ZSgmcXVldWUsIG1zZ1sxXSksICJGYWlsZWQgdG8gZGVxdWV1ZSBhIG1lc3NhZ2UgZnJvbSBvdE1lc3NhZ2VRdWV1ZS5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnRVc2luZ090QXBpKCZxdWV1ZSwgMywgbXNnWzBdLCBtc2dbMl0sIG1zZ1szXSk7CisgICAgU3VjY2Vzc09yUXVpdChvdE1lc3NhZ2VRdWV1ZURlcXVldWUoJnF1ZXVlLCBtc2dbMF0pLCAiRmFpbGVkIHRvIGRlcXVldWUgYSBtZXNzYWdlIGZyb20gb3RNZXNzYWdlUXVldWUuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50VXNpbmdPdEFwaSgmcXVldWUsIDIsIG1zZ1syXSwgbXNnWzNdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG90TWVzc2FnZVF1ZXVlRGVxdWV1ZSgmcXVldWUsIG1zZ1szXSksICJGYWlsZWQgdG8gZGVxdWV1ZSBhIG1lc3NhZ2UgZnJvbSBvdE1lc3NhZ2VRdWV1ZS5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnRVc2luZ090QXBpKCZxdWV1ZSwgMSwgbXNnWzJdKTsKKworICAgIC8vIENoZWNrIHRoZSBleHBlY3RlZCBmYWlsdXJlIGNhc2VzIGZvciB0aGUgZW5xdWV1ZSBhbmQgZGVxdWV1ZToKKyAgICBlcnJvciA9IG90TWVzc2FnZVF1ZXVlRW5xdWV1ZSgmcXVldWUsIG1zZ1syXSk7CisgICAgVmVyaWZ5T3JRdWl0KGVycm9yID09IE9UX0VSUk9SX0FMUkVBRFksICJFbnF1ZXVpbmcgYW4gYWxyZWFkeSBxdWV1ZWQgbWVzc2FnZSBkaWQgbm90IGZhaWwgYXMgZXhwZWN0ZWQuXG4iKTsKKyAgICBlcnJvciA9IG90TWVzc2FnZVF1ZXVlRGVxdWV1ZSgmcXVldWUsIG1zZ1swXSk7CisgICAgVmVyaWZ5T3JRdWl0KGVycm9yID09IE9UX0VSUk9SX05PVF9GT1VORCwKKyAgICAgICAgICAgICAgICAgIkRlcXVldWluZyBhIG1lc3NhZ2Ugbm90IGluIHRoZSBxdWV1ZSBkaWQgbm90IGZhaWwgYXMgZXhwZWN0ZWQuXG4iKTsKKworICAgIC8vIENoZWNrIHRoZSBmYWlsdXJlIGNhc2VzIGZvciBvdE1lc3NhZ2VRdWV1ZUdldE5leHQoKQorICAgIG1lc3NhZ2UgPSBvdE1lc3NhZ2VRdWV1ZUdldE5leHQoJnF1ZXVlLCBOVUxMKTsKKyAgICBWZXJpZnlPclF1aXQobWVzc2FnZSA9PSBOVUxMLCAib3RNZXNzYWdlUXVldWVHZXROZXh0KHF1ZXVlLCBOVUxMKSBkaWQgbm90IHJldHVybiBOVUxMLlxuIik7CisgICAgbWVzc2FnZSA9IG90TWVzc2FnZVF1ZXVlR2V0TmV4dCgmcXVldWUsIG1zZ1sxXSk7CisgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UgPT0gTlVMTCwgIm90TWVzc2FnZVF1ZXVlR2V0TmV4dCgpIGRpZCBub3QgcmV0dXJuIE5VTEwgZm9yIGEgbWVzc2FnZSBub3QgaW4gdGhlIHF1ZXVlLlxuIik7CisKKyAgICAvLyBDaGVjayB0aGUgZmFpbHVyZSBjYXNlIHdoZW4gYXR0ZW1wdGluZyB0byBkbyBvdE1lc3NhZ2VRdWV1ZUdldE5leHQoKSBidXQgcGFzc2luZyBpbiBhIHdyb25nIHF1ZXVlIHBvaW50ZXIuCisgICAgU3VjY2Vzc09yUXVpdChvdE1lc3NhZ2VRdWV1ZUVucXVldWUoJnF1ZXVlMiwgbXNnWzBdKSwgIkZhaWxlZCB0byBlbnF1ZXVlIGEgbWVzc2FnZSB0byBvdE1lc3NhZ2VRdWV1ZS5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnRVc2luZ090QXBpKCZxdWV1ZTIsIDEsIG1zZ1swXSk7CisgICAgU3VjY2Vzc09yUXVpdChvdE1lc3NhZ2VRdWV1ZUVucXVldWUoJnF1ZXVlMiwgbXNnWzFdKSwgIkZhaWxlZCB0byBlbnF1ZXVlIGEgbWVzc2FnZSB0byBvdE1lc3NhZ2VRdWV1ZS5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnRVc2luZ090QXBpKCZxdWV1ZTIsIDIsIG1zZ1swXSwgbXNnWzFdKTsKKworICAgIG1lc3NhZ2UgPSBvdE1lc3NhZ2VRdWV1ZUdldE5leHQoJnF1ZXVlMiwgbXNnWzBdKTsKKyAgICBWZXJpZnlPclF1aXQobWVzc2FnZSA9PSBtc2dbMV0sICJvdE1lc3NhZ2VRdWV1ZUdldE5leHQoKSBmYWlsZWRcbiIpOworICAgIG1lc3NhZ2UgPSBvdE1lc3NhZ2VRdWV1ZUdldE5leHQoJnF1ZXVlLCBtc2dbMF0pOworICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlID09IE5VTEwsICJvdE1lc3NhZ2VRdWV1ZUdldE5leHQoKSBkaWQgbm90IHJldHVybiBOVUxMIGZvciBtZXNzYWdlIG5vdCBpbiAgdGhlIHF1ZXVlLlxuIik7CisKKyAgICAvLyBSZW1vdmUgYWxsIGVsZW1lbnQgYW5kIG1ha2Ugc3VyZSBxdWV1ZSBpcyBlbXB0eQorICAgIFN1Y2Nlc3NPclF1aXQob3RNZXNzYWdlUXVldWVEZXF1ZXVlKCZxdWV1ZSwgbXNnWzJdKSwgIkZhaWxlZCB0byBkZXF1ZXVlIGEgbWVzc2FnZSBmcm9tIG90TWVzc2FnZVF1ZXVlLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudFVzaW5nT3RBcGkoJnF1ZXVlLCAwKTsKKworICAgIHRlc3RGcmVlSW5zdGFuY2Uoc0luc3RhbmNlKTsKK30KKworI2lmZGVmIEVOQUJMRV9URVNUX01BSU4KK2ludCBtYWluKHZvaWQpCit7CisgICAgVGVzdE1lc3NhZ2VRdWV1ZSgpOworICAgIFRlc3RNZXNzYWdlUXVldWVPdEFwaXMoKTsKKyAgICBwcmludGYoIkFsbCB0ZXN0cyBwYXNzZWRcbiIpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfbmNwX2J1ZmZlci5jcHAgYi90ZXN0cy91bml0L3Rlc3RfbmNwX2J1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0YzRmZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF9uY3BfYnVmZmVyLmNwcApAQCAtMCwwICsxLDcwOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm5jcC9uY3BfYnVmZmVyLmhwcCIKKworI2luY2x1ZGUgInRlc3RfcGxhdGZvcm0uaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKworbmFtZXNwYWNlIG90IHsKKworLy8gVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB1bml0LXRlc3QgZm9yIE5jcEZyYW1lQnVmZmVyIGNsYXNzLgorCitlbnVtCit7CisgICAga1Rlc3RCdWZmZXJTaXplID0gMjUwMCwKKyAgICBrVGVzdEl0ZXJhdGlvbkF0dGVtcHMgPSAxMDAwMCwKKyAgICBrVGFnQXJyYXlTaXplID0gMTAwMCwKK307CisKKy8vICBNZXNzYWdlcyB1c2VkIGZvciBidWlsZGluZyBmcmFtZXMuLi4KK3N0YXRpYyBjb25zdCB1aW50OF90IHNPcGVuVGhyZWFkVGV4dFtdID0gIk9wZW5UaHJlYWQgUm9ja3MiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc0hlbGxvVGV4dFtdICAgICAgPSAiSGVsbG8gdGhlcmUhIjsKK3N0YXRpYyBjb25zdCB1aW50OF90IHNNb3R0b1RleHRbXSAgICAgID0gIlRoaW5rIGdvb2QgdGhvdWdodHMsIHNheSBnb29kIHdvcmRzLCBkbyBnb29kIGRlZWRzISI7CitzdGF0aWMgY29uc3QgdWludDhfdCBzTXlzdGVyeVRleHRbXSAgICA9ICI0ODcxKFxcKTp8KDMkfXs0fC80LzIlMTQoXFwpIjsKKworc3RhdGljIG90SW5zdGFuY2UgKnNJbnN0YW5jZTsKK3N0YXRpYyBNZXNzYWdlUG9vbCAqc01lc3NhZ2VQb29sOworCitzdHJ1Y3QgQ2FsbGJhY2tDb250ZXh0Cit7CisgICAgdWludDMyX3QgbUZyYW1lQWRkZWRDb3VudDsgICAgICAgICAgIC8vIE51bWJlciBvZiB0aW1lcyBGcmFtZUFkZGVkQ2FsbGJhY2sgaXMgaW52b2tlZC4KKyAgICB1aW50MzJfdCBtRnJhbWVSZW1vdmVkQ291bnQ7ICAgICAgICAgLy8gTnVtYmVyIG9mIHRpbWVzIEZyYW1lUmVtb3ZlZENhbGxiYWNrIGlzIGludm9rZWQuCit9OworCitDYWxsYmFja0NvbnRleHQgc0NvbnRleHQ7CisKK05jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBzVGFnSGlzdG9yeUFycmF5W2tUYWdBcnJheVNpemVdOwordWludDMyX3Qgc1RhZ0hpc3RvcnlIZWFkID0gMDsKK3VpbnQzMl90IHNUYWdIaXN0b3J5VGFpbCA9IDA7CitOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgc0V4cGVjdGVkUmVtb3ZlZFRhZyA9IE5jcEZyYW1lQnVmZmVyOjprSW52YWxpZFRhZzsKKwordm9pZCBDbGVhclRhZ0hpc3Rvcnkodm9pZCkKK3sKKyAgICBzVGFnSGlzdG9yeUhlYWQgPSBzVGFnSGlzdG9yeVRhaWw7Cit9CisKK3ZvaWQgQWRkVGFnVG9IaXN0b3J5KE5jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBhVGFnKQoreworICAgIHNUYWdIaXN0b3J5QXJyYXlbc1RhZ0hpc3RvcnlUYWlsXSA9IGFUYWc7CisKKyAgICBpZiAoKytzVGFnSGlzdG9yeVRhaWwgPT0ga1RhZ0FycmF5U2l6ZSkKKyAgICB7CisgICAgICAgIHNUYWdIaXN0b3J5VGFpbCA9IDA7CisgICAgfQorCisgICAgVmVyaWZ5T3JRdWl0KHNUYWdIaXN0b3J5VGFpbCAhPSBzVGFnSGlzdG9yeUhlYWQsICJSYW4gb3V0IG9mIHNwYWNlIGluIGBUYWdIaXN0b3J5QXJyYXlgLCBpbmNyZWFzZSBpdHMgc2l6ZS4iKTsKK30KKwordm9pZCBWZXJpZnlBbmRSZW1vdmVUYWdGcm9tSGlzdG9yeShOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgYVRhZykKK3sKKyAgICBWZXJpZnlPclF1aXQoc1RhZ0hpc3RvcnlIZWFkICE9IHNUYWdIaXN0b3J5VGFpbCwgIlRhZyBoaXN0b3J5IGlzIGVtcHR5LCIpOworICAgIFZlcmlmeU9yUXVpdChhVGFnID09IHNUYWdIaXN0b3J5QXJyYXlbc1RhZ0hpc3RvcnlIZWFkXSwgIlJlbW92ZWQgdGFnIGRvZXMgbm90IG1hdGNoIHRoZSBhZGRlZCBvbmUiKTsKKworICAgIGlmICgrK3NUYWdIaXN0b3J5SGVhZCA9PSBrVGFnQXJyYXlTaXplKQorICAgIHsKKyAgICAgICAgc1RhZ0hpc3RvcnlIZWFkID0gMDsKKyAgICB9CisKKyAgICBpZiAoc0V4cGVjdGVkUmVtb3ZlZFRhZyAhPSBOY3BGcmFtZUJ1ZmZlcjo6a0ludmFsaWRUYWcpCisgICAgeworICAgICAgICBWZXJpZnlPclF1aXQoc0V4cGVjdGVkUmVtb3ZlZFRhZyA9PSBhVGFnLCAiUmVtb3ZlZCB0YWcgZG9lcyBtYXRjaCB0aGUgcHJldmlvdXMgT3V0RnJhbWVHZXRUYWcoKSIpOworICAgICAgICBzRXhwZWN0ZWRSZW1vdmVkVGFnID0gTmNwRnJhbWVCdWZmZXI6OmtJbnZhbGlkVGFnOworICAgIH0KK30KKwordm9pZCBGcmFtZUFkZGVkQ2FsbGJhY2sodm9pZCAqYUNvbnRleHQsIE5jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBhVGFnLCBOY3BGcmFtZUJ1ZmZlciAqYU5jcEJ1ZmZlcikKK3sKKyAgICBDYWxsYmFja0NvbnRleHQgKmNhbGxiYWNrQ29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbGJhY2tDb250ZXh0ICo+KGFDb250ZXh0KTsKKworICAgIFZlcmlmeU9yUXVpdChhTmNwQnVmZmVyICE9IE5VTEwsICJOdWxsIE5jcEZyYW1lQnVmZmVyIGluIHRoZSBjYWxsYmFjayIpOworICAgIFZlcmlmeU9yUXVpdChjYWxsYmFja0NvbnRleHQgIT0gTlVMTCwgIk51bGwgY29udGV4dCBpbiB0aGUgY2FsbGJhY2siKTsKKyAgICBWZXJpZnlPclF1aXQoYVRhZyAhPSBOY3BGcmFtZUJ1ZmZlcjo6a0ludmFsaWRUYWcsICJJbnZhbGlkIHRhZyBpbiB0aGUgY2FsbGJhY2siKTsKKyAgICBWZXJpZnlPclF1aXQoYVRhZyA9PSBhTmNwQnVmZmVyLT5JbkZyYW1lR2V0TGFzdFRhZygpLCAiSW5GcmFtZUdldExhc3RUYWcoKSBkb2VzIG5vdCBtYXRjaCB0aGUgdGFnIGZyb20gY2FsbGJhY2siKTsKKyAgICBBZGRUYWdUb0hpc3RvcnkoYVRhZyk7CisKKyAgICBjYWxsYmFja0NvbnRleHQtPm1GcmFtZUFkZGVkQ291bnQrKzsKK30KKwordm9pZCBGcmFtZVJlbW92ZWRDYWxsYmFjayh2b2lkICphQ29udGV4dCwgTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIGFUYWcsIE5jcEZyYW1lQnVmZmVyICphTmNwQnVmZmVyKQoreworICAgIENhbGxiYWNrQ29udGV4dCAqY2FsbGJhY2tDb250ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxDYWxsYmFja0NvbnRleHQgKj4oYUNvbnRleHQpOworCisgICAgVmVyaWZ5T3JRdWl0KGFOY3BCdWZmZXIgIT0gTlVMTCwgIk51bGwgTmNwRnJhbWVCdWZmZXIgaW4gdGhlIGNhbGxiYWNrIik7CisgICAgVmVyaWZ5T3JRdWl0KGNhbGxiYWNrQ29udGV4dCAhPSBOVUxMLCAiTnVsbCBjb250ZXh0IGluIHRoZSBjYWxsYmFjayIpOworICAgIFZlcmlmeU9yUXVpdChhVGFnICE9IE5jcEZyYW1lQnVmZmVyOjprSW52YWxpZFRhZywgIkludmFsaWQgdGFnIGluIHRoZSBjYWxsYmFjayIpOworICAgIFZlcmlmeUFuZFJlbW92ZVRhZ0Zyb21IaXN0b3J5KGFUYWcpOworCisgICAgY2FsbGJhY2tDb250ZXh0LT5tRnJhbWVSZW1vdmVkQ291bnQrKzsKK30KKworLy8gRHVtcCB0aGUgYnVmZmVyIGNvbnRlbnQgdG8gc2NyZWVuLgordm9pZCBEdW1wQnVmZmVyKGNvbnN0IGNoYXIgKmFUZXh0TWVzc2FnZSwgdWludDhfdCAqYUJ1ZmZlciwgdWludDE2X3QgYUJ1ZmZlckxlbmd0aCkKK3sKKyAgICBlbnVtCisgICAgeworICAgICAgICBrQnl0ZXNQZXJMaW5lID0gMzIsICAgIC8vIE51bWJlciBvZiBieXRlcyBwZXIgbGluZS4KKyAgICB9OworCisgICAgY2hhciBjaGFyQnVmZltrQnl0ZXNQZXJMaW5lICsgMV07CisgICAgdWludDE2X3QgY291bnRlcjsKKyAgICB1aW50OF90IGJ5dGU7CisKKyAgICBwcmludGYoIlxuJXMgLSBsZW4gPSAldVxuICAgICIsIGFUZXh0TWVzc2FnZSwgYUJ1ZmZlckxlbmd0aCk7CisKKyAgICBjb3VudGVyID0gMDsKKworICAgIHdoaWxlIChhQnVmZmVyTGVuZ3RoLS0pCisgICAgeworICAgICAgICBieXRlID0gKmFCdWZmZXIrKzsKKyAgICAgICAgcHJpbnRmKCIlMDJYICIsIGJ5dGUpOworICAgICAgICBjaGFyQnVmZltjb3VudGVyXSA9IGlzcHJpbnQoYnl0ZSkgPyBzdGF0aWNfY2FzdDxjaGFyPihieXRlKSA6ICcuJzsKKyAgICAgICAgY291bnRlcisrOworCisgICAgICAgIGlmIChjb3VudGVyID09IGtCeXRlc1BlckxpbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXJCdWZmW2NvdW50ZXJdID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiICAgICVzXG4gICAgIiwgY2hhckJ1ZmYpOworICAgICAgICAgICAgY291bnRlciA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjaGFyQnVmZltjb3VudGVyXSA9IDA7CisKKyAgICB3aGlsZSAoY291bnRlcisrIDwga0J5dGVzUGVyTGluZSkKKyAgICB7CisgICAgICAgIHByaW50ZigiICAgIik7CisgICAgfQorCisgICAgcHJpbnRmKCIgICAgJXNcbiIsIGNoYXJCdWZmKTsKK30KKworLy8gUmVhZHMgYnl0ZXMgZnJvbSB0aGUgbmNwIGJ1ZmZlciwgYW5kIHZlcmlmaWVzIHRoYXQgaXQgbWF0Y2hlcyB3aXRoIHRoZSBnaXZlbiBjb250ZW50IGJ1ZmZlci4KK3ZvaWQgUmVhZEFuZFZlcmlmeUNvbnRlbnQoTmNwRnJhbWVCdWZmZXIgJmFOY3BCdWZmZXIsIGNvbnN0IHVpbnQ4X3QgKmFDb250ZW50QnVmZmVyLCB1aW50MTZfdCBhQnVmZmVyTGVuZ3RoKQoreworICAgIHdoaWxlIChhQnVmZmVyTGVuZ3RoLS0pCisgICAgeworICAgICAgICBWZXJpZnlPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZUhhc0VuZGVkKCkgPT0gZmFsc2UsICJPdXQgZnJhbWUgZW5kZWQgYmVmb3JlIGVuZCBvZiBleHBlY3RlZCBjb250ZW50LiIpOworCisgICAgICAgIFZlcmlmeU9yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lUmVhZEJ5dGUoKSA9PSAqYUNvbnRlbnRCdWZmZXIrKywKKyAgICAgICAgICAgICAgICAgICAgICJPdXQgZnJhbWUgcmVhZCBieXRlIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIGNvbnRlbnQiKTsKKyAgICB9Cit9CisKK3ZvaWQgV3JpdGVUZXN0RnJhbWUxKE5jcEZyYW1lQnVmZmVyICZhTmNwQnVmZmVyKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgQ2FsbGJhY2tDb250ZXh0IG9sZENvbnRleHQ7CisKKyAgICBtZXNzYWdlID0gc01lc3NhZ2VQb29sLT5OZXcoTWVzc2FnZTo6a1R5cGVJcDYsIDApOworICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlICE9IE5VTEwsICJOdWxsIE1lc3NhZ2UiKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2UtPlNldExlbmd0aChzaXplb2Yoc01vdHRvVGV4dCkpLCAiQ291bGQgbm90IHNldCB0aGUgbGVuZ3RoIG9mIG1lc3NhZ2UuIik7CisgICAgbWVzc2FnZS0+V3JpdGUoMCwgc2l6ZW9mKHNNb3R0b1RleHQpLCBzTW90dG9UZXh0KTsKKworICAgIG9sZENvbnRleHQgPSBzQ29udGV4dDsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUJlZ2luKCksICJJbkZyYW1lQmVnaW4oKSBmYWlsZWQuIik7CisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLkluRnJhbWVGZWVkRGF0YShzTW90dG9UZXh0LCBzaXplb2Yoc01vdHRvVGV4dCkpLCAiSW5GcmFtZUZlZWREYXRhKCkgZmFpbGVkLiIpOworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5JbkZyYW1lRmVlZERhdGEoc015c3RlcnlUZXh0LCBzaXplb2Yoc015c3RlcnlUZXh0KSksICJJbkZyYW1lRmVlZERhdGEoKSBmYWlsZWQuIik7CisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLkluRnJhbWVGZWVkTWVzc2FnZShtZXNzYWdlKSwgIkluRnJhbWVGZWVkTWVzc2FnZSgpIGZhaWxlZC4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUZlZWREYXRhKHNIZWxsb1RleHQsIHNpemVvZihzSGVsbG9UZXh0KSksICJJbkZyYW1lRmVlZERhdGEoKSBmYWlsZWQuIik7CisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLkluRnJhbWVFbmQoKSwgIkluRnJhbWVFbmQoKSBmYWlsZWQuIik7CisKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVBZGRlZENvdW50ICsgMSA9PSBzQ29udGV4dC5tRnJhbWVBZGRlZENvdW50LCAiRnJhbWVBZGRlZENhbGxiYWNrIGZhaWxlZC4iKTsKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVSZW1vdmVkQ291bnQgPT0gc0NvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50LCAiRnJhbWVSZW1vdmVkQ2FsbGJhY2sgZmFpbGVkLiIpOworfQorCit2b2lkIFZlcmlmeUFuZFJlbW92ZUZyYW1lMShOY3BGcmFtZUJ1ZmZlciAmYU5jcEJ1ZmZlcikKK3sKKyAgICBDYWxsYmFja0NvbnRleHQgb2xkQ29udGV4dCA9IHNDb250ZXh0OworCisgICAgc0V4cGVjdGVkUmVtb3ZlZFRhZyA9IGFOY3BCdWZmZXIuT3V0RnJhbWVHZXRUYWcoKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVCZWdpbigpLCAiT3V0RnJhbWVCZWdpbigpIGZhaWxlZCB1bmV4cGVjdGVkbHkuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNFeHBlY3RlZFJlbW92ZWRUYWcgPT0gYU5jcEJ1ZmZlci5PdXRGcmFtZUdldFRhZygpLCAiT3V0RnJhbWVHZXRUYWcoKSB2YWx1ZSBjaGFuZ2VkIHVuZXhwZWN0ZWRseS4iKTsKKworICAgIFZlcmlmeU9yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKHNNb3R0b1RleHQpICsgc2l6ZW9mKHNNeXN0ZXJ5VGV4dCkgKyBzaXplb2Yoc01vdHRvVGV4dCkKKyAgICAgICAgICAgICAgICAgKyBzaXplb2Yoc0hlbGxvVGV4dCksICJHZXRMZW5ndGgoKSBpcyBpbmNvcnJlY3QuIik7CisKKyAgICBSZWFkQW5kVmVyaWZ5Q29udGVudChhTmNwQnVmZmVyLCBzTW90dG9UZXh0LCBzaXplb2Yoc01vdHRvVGV4dCkpOworICAgIFJlYWRBbmRWZXJpZnlDb250ZW50KGFOY3BCdWZmZXIsIHNNeXN0ZXJ5VGV4dCwgc2l6ZW9mKHNNeXN0ZXJ5VGV4dCkpOworICAgIFJlYWRBbmRWZXJpZnlDb250ZW50KGFOY3BCdWZmZXIsIHNNb3R0b1RleHQsIHNpemVvZihzTW90dG9UZXh0KSk7CisgICAgUmVhZEFuZFZlcmlmeUNvbnRlbnQoYU5jcEJ1ZmZlciwgc0hlbGxvVGV4dCwgc2l6ZW9mKHNIZWxsb1RleHQpKTsKKworICAgIFZlcmlmeU9yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lSGFzRW5kZWQoKSA9PSB0cnVlLCAiRnJhbWUgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuIik7CisgICAgVmVyaWZ5T3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVSZWFkQnl0ZSgpID09IDAsICJSZWFkQnl0ZSgpIHJldHVybmVkIG5vbi16ZXJvIGFmdGVyIGVuZCBvZiBmcmFtZS4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0V4cGVjdGVkUmVtb3ZlZFRhZyA9PSBhTmNwQnVmZmVyLk91dEZyYW1lR2V0VGFnKCksICJPdXRGcmFtZUdldFRhZygpIHZhbHVlIGNoYW5nZWQgdW5leHBlY3RlZGx5LiIpOworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZVJlbW92ZSgpLCAiUmVtb3ZlKCkgZmFpbGVkLiIpOworCisgICAgVmVyaWZ5T3JRdWl0KG9sZENvbnRleHQubUZyYW1lQWRkZWRDb3VudCA9PSBzQ29udGV4dC5tRnJhbWVBZGRlZENvdW50LCAiRnJhbWVBZGRlZENhbGxiYWNrIGZhaWxlZC4iKTsKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVSZW1vdmVkQ291bnQgKyAxID09IHNDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCwgIkZyYW1lUmVtb3ZlZENhbGxiYWNrIGZhaWxlZC4iKTsKK30KKwordm9pZCBXcml0ZVRlc3RGcmFtZTIoTmNwRnJhbWVCdWZmZXIgJmFOY3BCdWZmZXIpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZTE7CisgICAgTWVzc2FnZSAqbWVzc2FnZTI7CisgICAgQ2FsbGJhY2tDb250ZXh0IG9sZENvbnRleHQgPSBzQ29udGV4dDsKKworICAgIG1lc3NhZ2UxID0gc01lc3NhZ2VQb29sLT5OZXcoTWVzc2FnZTo6a1R5cGVJcDYsIDApOworICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlMSAhPSBOVUxMLCAiTnVsbCBNZXNzYWdlIik7CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlMS0+U2V0TGVuZ3RoKHNpemVvZihzTXlzdGVyeVRleHQpKSwgIkNvdWxkIG5vdCBzZXQgdGhlIGxlbmd0aCBvZiBtZXNzYWdlLiIpOworICAgIG1lc3NhZ2UxLT5Xcml0ZSgwLCBzaXplb2Yoc015c3RlcnlUZXh0KSwgc015c3RlcnlUZXh0KTsKKworICAgIG1lc3NhZ2UyID0gc01lc3NhZ2VQb29sLT5OZXcoTWVzc2FnZTo6a1R5cGVJcDYsIDApOworICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlMiAhPSBOVUxMLCAiTnVsbCBNZXNzYWdlIik7CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlMi0+U2V0TGVuZ3RoKHNpemVvZihzSGVsbG9UZXh0KSksICJDb3VsZCBub3Qgc2V0IHRoZSBsZW5ndGggb2YgbWVzc2FnZS4iKTsKKyAgICBtZXNzYWdlMi0+V3JpdGUoMCwgc2l6ZW9mKHNIZWxsb1RleHQpLCBzSGVsbG9UZXh0KTsKKworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5JbkZyYW1lQmVnaW4oKSwgIkluRnJhbWVGZWVkQmVnaW4oKSBmYWlsZWQuIik7CisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLkluRnJhbWVGZWVkTWVzc2FnZShtZXNzYWdlMSksICJJbkZyYW1lRmVlZE1lc3NhZ2UoKSBmYWlsZWQuIik7CisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLkluRnJhbWVGZWVkRGF0YShzT3BlblRocmVhZFRleHQsIHNpemVvZihzT3BlblRocmVhZFRleHQpKSwgIkluRnJhbWVGZWVkRGF0YSgpIGZhaWxlZC4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUZlZWRNZXNzYWdlKG1lc3NhZ2UyKSwgIkluRnJhbWVGZWVkTWVzc2FnZSgpIGZhaWxlZC4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUVuZCgpLCAiSW5GcmFtZUVuZCgpIGZhaWxlZC4iKTsKKworICAgIFZlcmlmeU9yUXVpdChvbGRDb250ZXh0Lm1GcmFtZUFkZGVkQ291bnQgKyAxID09IHNDb250ZXh0Lm1GcmFtZUFkZGVkQ291bnQsICJGcmFtZUFkZGVkQ2FsbGJhY2sgZmFpbGVkLiIpOworICAgIFZlcmlmeU9yUXVpdChvbGRDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCA9PSBzQ29udGV4dC5tRnJhbWVSZW1vdmVkQ291bnQsICJGcmFtZVJlbW92ZWRDYWxsYmFjayBmYWlsZWQuIik7Cit9CisKK3ZvaWQgVmVyaWZ5QW5kUmVtb3ZlRnJhbWUyKE5jcEZyYW1lQnVmZmVyICZhTmNwQnVmZmVyKQoreworICAgIENhbGxiYWNrQ29udGV4dCBvbGRDb250ZXh0ID0gc0NvbnRleHQ7CisKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVCZWdpbigpLCAiT3V0RnJhbWVCZWdpbigpIGZhaWxlZCB1bmV4cGVjdGVkbHkuIik7CisKKyAgICBWZXJpZnlPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZUdldExlbmd0aCgpID09IHNpemVvZihzTXlzdGVyeVRleHQpICsgc2l6ZW9mKHNIZWxsb1RleHQpICsgc2l6ZW9mKHNPcGVuVGhyZWFkVGV4dCksCisgICAgICAgICAgICAgICAgICJHZXRMZW5ndGgoKSBpcyBpbmNvcnJlY3QuIik7CisKKyAgICBSZWFkQW5kVmVyaWZ5Q29udGVudChhTmNwQnVmZmVyLCBzTXlzdGVyeVRleHQsIHNpemVvZihzTXlzdGVyeVRleHQpKTsKKyAgICBSZWFkQW5kVmVyaWZ5Q29udGVudChhTmNwQnVmZmVyLCBzT3BlblRocmVhZFRleHQsIHNpemVvZihzT3BlblRocmVhZFRleHQpKTsKKyAgICBSZWFkQW5kVmVyaWZ5Q29udGVudChhTmNwQnVmZmVyLCBzSGVsbG9UZXh0LCBzaXplb2Yoc0hlbGxvVGV4dCkpOworCisgICAgVmVyaWZ5T3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVIYXNFbmRlZCgpID09IHRydWUsICJGcmFtZSBsb25nZXIgdGhhbiBleHBlY3RlZC4iKTsKKyAgICBWZXJpZnlPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZVJlYWRCeXRlKCkgPT0gMCwgIlJlYWRCeXRlKCkgcmV0dXJuZWQgbm9uLXplcm8gYWZ0ZXIgZW5kIG9mIGZyYW1lLiIpOworICAgIHNFeHBlY3RlZFJlbW92ZWRUYWcgPSBhTmNwQnVmZmVyLk91dEZyYW1lR2V0VGFnKCk7CisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lUmVtb3ZlKCksICJSZW1vdmUoKSBmYWlsZWQuIik7CisKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVBZGRlZENvdW50ID09IHNDb250ZXh0Lm1GcmFtZUFkZGVkQ291bnQsICJGcmFtZUFkZGVkQ2FsbGJhY2sgZmFpbGVkLiIpOworICAgIFZlcmlmeU9yUXVpdChvbGRDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCArIDEgPT0gc0NvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50LCAiRnJhbWVSZW1vdmVkQ2FsbGJhY2sgZmFpbGVkLiIpOworfQorCit2b2lkIFdyaXRlVGVzdEZyYW1lMyhOY3BGcmFtZUJ1ZmZlciAmYU5jcEJ1ZmZlcikKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlMTsKKyAgICBDYWxsYmFja0NvbnRleHQgb2xkQ29udGV4dCA9IHNDb250ZXh0OworCisgICAgbWVzc2FnZTEgPSBzTWVzc2FnZVBvb2wtPk5ldyhNZXNzYWdlOjprVHlwZUlwNiwgMCk7CisgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UxICE9IE5VTEwsICJOdWxsIE1lc3NhZ2UiKTsKKworICAgIC8vIEFuIGVtcHR5IG1lc3NhZ2Ugd2l0aCBubyBjb250ZW50LgorICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZTEtPlNldExlbmd0aCgwKSwgIkNvdWxkIG5vdCBzZXQgdGhlIGxlbmd0aCBvZiBtZXNzYWdlLiIpOworCisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLkluRnJhbWVCZWdpbigpLCAiSW5GcmFtZUZlZWRCZWdpbigpIGZhaWxlZC4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUZlZWRNZXNzYWdlKG1lc3NhZ2UxKSwgIkluRnJhbWVGZWVkTWVzc2FnZSgpIGZhaWxlZC4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUZlZWREYXRhKHNNeXN0ZXJ5VGV4dCwgc2l6ZW9mKHNNeXN0ZXJ5VGV4dCkpLCAiSW5GcmFtZUZlZWREYXRhKCkgZmFpbGVkLiIpOworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5JbkZyYW1lRW5kKCksICJJbkZyYW1lRW5kKCkgZmFpbGVkLiIpOworCisgICAgVmVyaWZ5T3JRdWl0KG9sZENvbnRleHQubUZyYW1lQWRkZWRDb3VudCArIDEgPT0gc0NvbnRleHQubUZyYW1lQWRkZWRDb3VudCwgIkZyYW1lQWRkZWRDYWxsYmFjayBmYWlsZWQuIik7CisgICAgVmVyaWZ5T3JRdWl0KG9sZENvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50ID09IHNDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCwgIkZyYW1lUmVtb3ZlZENhbGxiYWNrIGZhaWxlZC4iKTsKK30KKwordm9pZCBWZXJpZnlBbmRSZW1vdmVGcmFtZTMoTmNwRnJhbWVCdWZmZXIgJmFOY3BCdWZmZXIpCit7CisgICAgQ2FsbGJhY2tDb250ZXh0IG9sZENvbnRleHQgPSBzQ29udGV4dDsKKworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZUJlZ2luKCksICJPdXRGcmFtZUJlZ2luKCkgZmFpbGVkIHVuZXhwZWN0ZWRseS4iKTsKKworICAgIFZlcmlmeU9yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKHNNeXN0ZXJ5VGV4dCksICJHZXRMZW5ndGgoKSBpcyBpbmNvcnJlY3QuIik7CisKKyAgICBSZWFkQW5kVmVyaWZ5Q29udGVudChhTmNwQnVmZmVyLCBzTXlzdGVyeVRleHQsIHNpemVvZihzTXlzdGVyeVRleHQpKTsKKworICAgIFZlcmlmeU9yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lSGFzRW5kZWQoKSA9PSB0cnVlLCAiRnJhbWUgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuIik7CisgICAgVmVyaWZ5T3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVSZWFkQnl0ZSgpID09IDAsICJSZWFkQnl0ZSgpIHJldHVybmVkIG5vbi16ZXJvIGFmdGVyIGVuZCBvZiBmcmFtZS4iKTsKKyAgICBzRXhwZWN0ZWRSZW1vdmVkVGFnID0gYU5jcEJ1ZmZlci5PdXRGcmFtZUdldFRhZygpOworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZVJlbW92ZSgpLCAiUmVtb3ZlKCkgZmFpbGVkLiIpOworCisgICAgVmVyaWZ5T3JRdWl0KG9sZENvbnRleHQubUZyYW1lQWRkZWRDb3VudCA9PSBzQ29udGV4dC5tRnJhbWVBZGRlZENvdW50LCAiRnJhbWVBZGRlZENhbGxiYWNrIGZhaWxlZC4iKTsKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVSZW1vdmVkQ291bnQgKyAxID09IHNDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCwgIkZyYW1lUmVtb3ZlZENhbGxiYWNrIGZhaWxlZC4iKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBOY3BGcmFtZUJ1ZmZlciB0ZXN0cwordm9pZCBUZXN0TmNwRnJhbWVCdWZmZXIodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBpLCBqOworICAgIHVpbnQ4X3QgYnVmZmVyW2tUZXN0QnVmZmVyU2l6ZV07CisgICAgTmNwRnJhbWVCdWZmZXIgbmNwQnVmZmVyKGJ1ZmZlciwga1Rlc3RCdWZmZXJTaXplKTsKKworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgdWludDhfdCByZWFkQnVmZmVyWzE2XTsKKyAgICB1aW50MTZfdCByZWFkTGVuLCByZWFkT2Zmc2V0OworCisgICAgc0luc3RhbmNlID0gdGVzdEluaXRJbnN0YW5jZSgpOworICAgIHNNZXNzYWdlUG9vbCA9ICZzSW5zdGFuY2UtPm1JcDYubU1lc3NhZ2VQb29sOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihidWZmZXIpOyBpKyspCisgICAgeworICAgICAgICBidWZmZXJbaV0gPSAwOworICAgIH0KKworICAgIHNDb250ZXh0Lm1GcmFtZUFkZGVkQ291bnQgPSAwOworICAgIHNDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCA9IDA7CisgICAgQ2xlYXJUYWdIaXN0b3J5KCk7CisKKyAgICAvLyBTZXQgdGhlIGNhbGxiYWNrcy4KKyAgICBuY3BCdWZmZXIuU2V0RnJhbWVBZGRlZENhbGxiYWNrKEZyYW1lQWRkZWRDYWxsYmFjaywgJnNDb250ZXh0KTsKKyAgICBuY3BCdWZmZXIuU2V0RnJhbWVSZW1vdmVkQ2FsbGJhY2soRnJhbWVSZW1vdmVkQ2FsbGJhY2ssICZzQ29udGV4dCk7CisKKyAgICBwcmludGYoIlxuLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSIpOworICAgIHByaW50ZigiXG5UZXN0IDE6IENoZWNrIGluaXRpYWwgYnVmZmVyIHN0YXRlIik7CisKKyAgICBWZXJpZnlPclF1aXQobmNwQnVmZmVyLklzRW1wdHkoKSA9PSB0cnVlLCAiTm90IGVtcHR5IGFmdGVyIGluaXQuIik7CisgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5JbkZyYW1lR2V0TGFzdFRhZygpID09IE5jcEZyYW1lQnVmZmVyOjprSW52YWxpZFRhZywgIkluY29ycmVjdCB0YWcgYWZ0ZXIgaW5pdC4iKTsKKyAgICBWZXJpZnlPclF1aXQobmNwQnVmZmVyLk91dEZyYW1lR2V0VGFnKCkgPT0gTmNwRnJhbWVCdWZmZXI6OmtJbnZhbGlkVGFnLCAiSW5jb3JyZWN0IE91dEZyYW1lVGFnIGFmdGVyIGluaXQuIik7CisKKyAgICBwcmludGYoIlxuLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSIpOworICAgIHByaW50ZigiXG5UZXN0IDI6IFdyaXRlIGEgZnJhbWUgMSAiKTsKKworICAgIFdyaXRlVGVzdEZyYW1lMShuY3BCdWZmZXIpOworICAgIER1bXBCdWZmZXIoIlxuQnVmZmVyIGFmdGVyIGZyYW1lMSIsIGJ1ZmZlciwga1Rlc3RCdWZmZXJTaXplKTsKKyAgICBwcmludGYoIlxuRnJhbWVMZW4gaXMgJXUiLCBuY3BCdWZmZXIuT3V0RnJhbWVHZXRMZW5ndGgoKSk7CisKKyAgICBWZXJpZnlBbmRSZW1vdmVGcmFtZTEobmNwQnVmZmVyKTsKKworICAgIHByaW50ZigiXG5JdGVyYXRpb25zOiAiKTsKKworICAgIC8vIFJlcGVhdCB0aGlzIG11bHRpcGxlIHRpbWVzLgorICAgIGZvciAoaiA9IDA7IGogPCBrVGVzdEl0ZXJhdGlvbkF0dGVtcHM7IGorKykKKyAgICB7CisgICAgICAgIHByaW50ZigiKiIpOworICAgICAgICBXcml0ZVRlc3RGcmFtZTEobmNwQnVmZmVyKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5Jc0VtcHR5KCkgPT0gZmFsc2UsICJJc0VtcHR5KCkgaXMgaW5jb3JyZWN0IHdoZW4gYnVmZmVyIGlzIG5vbi1lbXB0eSIpOworCisgICAgICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMShuY3BCdWZmZXIpOworICAgICAgICBWZXJpZnlPclF1aXQobmNwQnVmZmVyLklzRW1wdHkoKSA9PSB0cnVlLCAiSXNFbXB0eSgpIGlzIGluY29ycmVjdCB3aGVuIGJ1ZmZlciBpcyBlbXB0eS4iKTsKKyAgICB9CisKKyAgICBwcmludGYoIiAtLSBQQVNTXG4iKTsKKworICAgIHByaW50ZigiXG4tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIik7CisgICAgcHJpbnRmKCJcblRlc3QgMzogTXVsdGlwbGUgZnJhbWVzIHdyaXRlIGFuZCByZWFkICIpOworCisgICAgV3JpdGVUZXN0RnJhbWUyKG5jcEJ1ZmZlcik7CisgICAgV3JpdGVUZXN0RnJhbWUzKG5jcEJ1ZmZlcik7CisgICAgV3JpdGVUZXN0RnJhbWUyKG5jcEJ1ZmZlcik7CisgICAgV3JpdGVUZXN0RnJhbWUyKG5jcEJ1ZmZlcik7CisKKyAgICBEdW1wQnVmZmVyKCJcbkJ1ZmZlciBhZnRlciBtdWx0aXBsZSBmcmFtZXMiLCBidWZmZXIsIGtUZXN0QnVmZmVyU2l6ZSk7CisKKyAgICBWZXJpZnlBbmRSZW1vdmVGcmFtZTIobmNwQnVmZmVyKTsKKyAgICBWZXJpZnlBbmRSZW1vdmVGcmFtZTMobmNwQnVmZmVyKTsKKyAgICBWZXJpZnlBbmRSZW1vdmVGcmFtZTIobmNwQnVmZmVyKTsKKyAgICBWZXJpZnlBbmRSZW1vdmVGcmFtZTIobmNwQnVmZmVyKTsKKworICAgIHByaW50ZigiXG5JdGVyYXRpb25zOiAiKTsKKworICAgIC8vIFJlcGVhdCB0aGlzIG11bHRpcGxlIHRpbWVzLgorICAgIGZvciAoaiA9IDA7IGogPCBrVGVzdEl0ZXJhdGlvbkF0dGVtcHM7IGorKykKKyAgICB7CisgICAgICAgIHByaW50ZigiKiIpOworCisgICAgICAgIFdyaXRlVGVzdEZyYW1lMihuY3BCdWZmZXIpOworICAgICAgICBXcml0ZVRlc3RGcmFtZTMobmNwQnVmZmVyKTsKKyAgICAgICAgV3JpdGVUZXN0RnJhbWUyKG5jcEJ1ZmZlcik7CisKKyAgICAgICAgVmVyaWZ5QW5kUmVtb3ZlRnJhbWUyKG5jcEJ1ZmZlcik7CisgICAgICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMyhuY3BCdWZmZXIpOworCisgICAgICAgIFdyaXRlVGVzdEZyYW1lMihuY3BCdWZmZXIpOworICAgICAgICBXcml0ZVRlc3RGcmFtZTMobmNwQnVmZmVyKTsKKworICAgICAgICBWZXJpZnlBbmRSZW1vdmVGcmFtZTIobmNwQnVmZmVyKTsKKyAgICAgICAgVmVyaWZ5QW5kUmVtb3ZlRnJhbWUyKG5jcEJ1ZmZlcik7CisgICAgICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMyhuY3BCdWZmZXIpOworCisgICAgICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuSXNFbXB0eSgpID09IHRydWUsICJJc0VtcHR5KCkgaXMgaW5jb3JyZWN0IHdoZW4gYnVmZmVyIGlzIGVtcHR5LiIpOworICAgIH0KKworICAgIHByaW50ZigiIC0tIFBBU1NcbiIpOworCisgICAgcHJpbnRmKCJcbi0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0iKTsKKyAgICBwcmludGYoIlxuVGVzdCA0OiBGcmFtZSBkaXNjYXJkIHdoZW4gYnVmZmVyIGZ1bGwgYW5kIHBhcnRpYWwgcmVhZCByZXN0YXJ0Iik7CisKKyAgICBmb3IgKGogPSAwOyBqIDwga1Rlc3RJdGVyYXRpb25BdHRlbXBzOyBqKyspCisgICAgeworICAgICAgICBXcml0ZVRlc3RGcmFtZTIobmNwQnVmZmVyKTsKKyAgICAgICAgV3JpdGVUZXN0RnJhbWUzKG5jcEJ1ZmZlcik7CisKKyAgICAgICAgbmNwQnVmZmVyLkluRnJhbWVCZWdpbigpOworICAgICAgICBuY3BCdWZmZXIuSW5GcmFtZUZlZWREYXRhKHNIZWxsb1RleHQsIHNpemVvZihzSGVsbG9UZXh0KSk7CisKKyAgICAgICAgbWVzc2FnZSA9IHNNZXNzYWdlUG9vbC0+TmV3KE1lc3NhZ2U6OmtUeXBlSXA2LCAwKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UgIT0gTlVMTCwgIk51bGwgTWVzc2FnZSIpOworICAgICAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2UtPlNldExlbmd0aChzaXplb2Yoc015c3RlcnlUZXh0KSksICJDb3VsZCBub3Qgc2V0IHRoZSBsZW5ndGggb2YgbWVzc2FnZS4iKTsKKyAgICAgICAgbWVzc2FnZS0+V3JpdGUoMCwgc2l6ZW9mKHNNeXN0ZXJ5VGV4dCksIHNNeXN0ZXJ5VGV4dCk7CisKKyAgICAgICAgbmNwQnVmZmVyLkluRnJhbWVGZWVkTWVzc2FnZShtZXNzYWdlKTsKKworICAgICAgICAvLyBOb3cgY2F1c2UgYSByZXN0YXJ0IHRoZSBjdXJyZW50IGZyYW1lIGFuZCB0ZXN0IGlmIGl0J3MgZGlzY2FyZGVkIG9rLgorICAgICAgICBXcml0ZVRlc3RGcmFtZTIobmNwQnVmZmVyKTsKKworICAgICAgICBpZiAoaiA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBEdW1wQnVmZmVyKCJcbkFmdGVyIGZyYW1lIGdldHMgZGlzY2FyZGVkIiwgYnVmZmVyLCBrVGVzdEJ1ZmZlclNpemUpOworICAgICAgICAgICAgcHJpbnRmKCJcbkl0ZXJhdGlvbnM6ICIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIqIik7CisgICAgICAgIH0KKworICAgICAgICBWZXJpZnlBbmRSZW1vdmVGcmFtZTIobmNwQnVmZmVyKTsKKworICAgICAgICAvLyBTdGFydCByZWFkaW5nIGZldyBieXRlcyBmcm9tIHRoZSBmcmFtZQorICAgICAgICBuY3BCdWZmZXIuT3V0RnJhbWVCZWdpbigpOworICAgICAgICBuY3BCdWZmZXIuT3V0RnJhbWVSZWFkQnl0ZSgpOworICAgICAgICBuY3BCdWZmZXIuT3V0RnJhbWVSZWFkQnl0ZSgpOworICAgICAgICBuY3BCdWZmZXIuT3V0RnJhbWVSZWFkQnl0ZSgpOworCisgICAgICAgIC8vIE5vdyByZXNldCB0aGUgcmVhZCBwb2ludGVyIGFuZCByZWFkL3ZlcmlmeSB0aGUgZnJhbWUgZnJvbSBzdGFydC4KKyAgICAgICAgVmVyaWZ5QW5kUmVtb3ZlRnJhbWUzKG5jcEJ1ZmZlcik7CisgICAgICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMihuY3BCdWZmZXIpOworCisgICAgICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuSXNFbXB0eSgpID09IHRydWUsICJJc0VtcHR5KCkgaXMgaW5jb3JyZWN0IHdoZW4gYnVmZmVyIGlzIGVtcHR5LiIpOworICAgIH0KKworICAgIHByaW50ZigiIC0tIFBBU1NcbiIpOworCisgICAgcHJpbnRmKCJcbi0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0iKTsKKyAgICBwcmludGYoIlxuVGVzdCA1OiBDbGVhcigpIGFuZCBlbXB0eSBidWZmZXIgbWV0aG9kIHRlc3RzIik7CisKKyAgICBXcml0ZVRlc3RGcmFtZTEobmNwQnVmZmVyKTsKKworICAgIG5jcEJ1ZmZlci5DbGVhcigpOworICAgIENsZWFyVGFnSGlzdG9yeSgpOworCisgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5JbkZyYW1lR2V0TGFzdFRhZygpID09IE5jcEZyYW1lQnVmZmVyOjprSW52YWxpZFRhZywgIkluY29ycmVjdCBsYXN0IHRhZyBhZnRlciBDbGVhcigpLiIpOworICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuT3V0RnJhbWVHZXRUYWcoKSA9PSBOY3BGcmFtZUJ1ZmZlcjo6a0ludmFsaWRUYWcsICJJbmNvcnJlY3QgT3V0RnJhbWVUYWcgYWZ0ZXIgQ2xlYXIoKS4iKTsKKyAgICBWZXJpZnlPclF1aXQobmNwQnVmZmVyLklzRW1wdHkoKSA9PSB0cnVlLCAiSXNFbXB0eSgpIGlzIGluY29ycmVjdCB3aGVuIGJ1ZmZlciBpcyBlbXB0eS4iKTsKKyAgICBWZXJpZnlPclF1aXQobmNwQnVmZmVyLk91dEZyYW1lSGFzRW5kZWQoKSA9PSB0cnVlLCAiT3V0RnJhbWVIYXNFbmRlZCgpIGlzIGluY29ycmVjdCB3aGVuIG5vIGRhdGEgaW4gYnVmZmVyLiIpOworICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuT3V0RnJhbWVSZW1vdmUoKSA9PSBPVF9FUlJPUl9OT1RfRk9VTkQsCisgICAgICAgICAgICAgICAgICJSZW1vdmUoKSByZXR1cm5lZCBpbmNvcnJlY3QgZXJyb3Igc3RhdHVzIHdoZW4gYnVmZmVyIGlzIGVtcHR5LiIpOworICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuT3V0RnJhbWVHZXRMZW5ndGgoKSA9PSAwLCAiT3V0RnJhbWVHZXRMZW5ndGgoKSByZXR1cm5lZCBub24temVybyBsZW5ndGggd2hlbiBidWZmZXIgaXMgZW1wdHkuIik7CisKKyAgICBXcml0ZVRlc3RGcmFtZTEobmNwQnVmZmVyKTsKKyAgICBWZXJpZnlBbmRSZW1vdmVGcmFtZTEobmNwQnVmZmVyKTsKKworICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuSXNFbXB0eSgpID09IHRydWUsICJJc0VtcHR5KCkgaXMgaW5jb3JyZWN0IHdoZW4gYnVmZmVyIGlzIGVtcHR5LiIpOworICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuT3V0RnJhbWVIYXNFbmRlZCgpID09IHRydWUsICJPdXRGcmFtZUhhc0VuZGVkKCkgaXMgaW5jb3JyZWN0IHdoZW4gbm8gZGF0YSBpbiBidWZmZXIuIik7CisgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5PdXRGcmFtZVJlbW92ZSgpID09IE9UX0VSUk9SX05PVF9GT1VORCwKKyAgICAgICAgICAgICAgICAgIlJlbW92ZSgpIHJldHVybmVkIGluY29ycmVjdCBlcnJvciBzdGF0dXMgd2hlbiBidWZmZXIgaXMgZW1wdHkuIik7CisgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5PdXRGcmFtZUdldExlbmd0aCgpID09IDAsICJPdXRGcmFtZUdldExlbmd0aCgpIHJldHVybmVkIG5vbi16ZXJvIGxlbmd0aCB3aGVuIGJ1ZmZlciBpcyBlbXB0eS4iKTsKKworICAgIHByaW50ZigiIC0tIFBBU1NcbiIpOworCisgICAgcHJpbnRmKCJcbi0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0iKTsKKyAgICBwcmludGYoIlxuVGVzdCA2OiBPdXRGcmFtZVJlYWQoKSBpbiBwYXJ0c1xuIik7CisKKyAgICBuY3BCdWZmZXIuSW5GcmFtZUJlZ2luKCk7CisgICAgbmNwQnVmZmVyLkluRnJhbWVGZWVkRGF0YShzTW90dG9UZXh0LCBzaXplb2Yoc01vdHRvVGV4dCkpOworICAgIG5jcEJ1ZmZlci5JbkZyYW1lRW5kKCk7CisKKyAgICBuY3BCdWZmZXIuT3V0RnJhbWVCZWdpbigpOworICAgIHJlYWRPZmZzZXQgPSAwOworCisgICAgd2hpbGUgKChyZWFkTGVuID0gbmNwQnVmZmVyLk91dEZyYW1lUmVhZChzaXplb2YocmVhZEJ1ZmZlciksIHJlYWRCdWZmZXIpKSAhPSAwKQorICAgIHsKKyAgICAgICAgRHVtcEJ1ZmZlcigiUmVhZCgpIHJldHVybmVkIiwgcmVhZEJ1ZmZlciwgcmVhZExlbik7CisKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1lbWNtcChyZWFkQnVmZmVyLCBzTW90dG9UZXh0ICsgcmVhZE9mZnNldCwgcmVhZExlbikgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICJSZWFkKCkgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgY29udGVudC4iKTsKKworICAgICAgICByZWFkT2Zmc2V0ICs9IHJlYWRMZW47CisgICAgfQorCisgICAgVmVyaWZ5T3JRdWl0KHJlYWRPZmZzZXQgPT0gc2l6ZW9mKHNNb3R0b1RleHQpLCAiUmVhZCBsZW4gZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgbGVuZ3RoLiIpOworICAgIHByaW50ZigiXG4gLS0gUEFTU1xuIik7CisKKyAgICB0ZXN0RnJlZUluc3RhbmNlKHNJbnN0YW5jZSk7Cit9CisKKy8qKgorICogTkNQIEJ1ZmZlciBGdXp6IHRlc3RpbmcKKyAqCisgKiBSYW5kb21seSBkZWNpZGUgaWYgdG8gcmVhZCBvciB3cml0ZSBhIGZyYW1lIHRvIHRoZSBOQ1AgYnVmZmVyICh1c2UgYGtSZWFkUHJvYmFiaWxpdHlgIGluIHBlcmNlbnQgdG8gY29udHJvbCB0aGUKKyAqIGJlaGF2aW9yKS4KKyAqCisgKiBXaGVuIHdyaXRpbmcgYSBmcmFtZSwgdXNlIGEgcmFuZG9tIGxlbmd0aCAoMSB1cCB0byBga01heEZyYW1lTGVuYCkgYW5kIGdlbmVyYXRlIHJhbmRvbSBieXRlIHNlcXVlbmNlcy4KKyAqIFdoZW4gcmVhZGluZyBhIGZyYW1lIGVuc3VyZSB0aGUgbGVuZ3RoIGFuZCB0aGUgY29udGVudCBtYXRjaGVzIHdoYXQgd2FzIHdyaXR0ZW4gZWFybGllci4KKyAqIEhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgYnVmZmVyIGdldHMgZnVsbCBvciBlbXB0eS4KKyAqCisgKi8KKworZW51bQoreworICAgIGtGdXpUZXN0QnVmZmVyU2l6ZSA9IDIwMDAsICAgICAgICAgICAgIC8vIFNpemUgb2YgdGhlIGJ1ZmZlciB1c2VkIGR1cmluZyBmdXp6IHRlc3RpbmcKKyAgICBrRnV6VGVzdEl0ZXJhdGlvbkF0dGVtcHRzID0gNTAwMDAwLCAgICAvLyBOdW1iZXIgb2YgaXRlcmF0aW9ucyAgdG8gcnVuCisgICAga0xlbnNBcnJheVNpemUgPSA1MDAsICAgICAgICAgICAgICAgICAgLy8gU2l6ZSBvZiAiTGVuZ3RocyIgYXJyYXkuCisgICAga01heEZyYW1lTGVuID0gNDAwLCAgICAgICAgICAgICAgICAgICAgLy8gTWF4aW11bSBmcmFtZSBsZW5ndGgKKyAgICBrUmVhZFByb2JhYmlsaXR5ID0gNTAsICAgICAgICAgICAgICAgICAvLyBQcm9iYWJpbGl0eSAoaW4gcGVyY2VudCkgdG8gcmFuZG9tbHkgY2hvb3NlIHRvIHJlYWQgdnMgd3JpdGUgZnJhbWUKKyAgICBrVXNlVHJ1ZVJhbmRvbU51bWJlckdlbmVyYXRvciA9IDEsICAgICAvLyBUbyB1c2UgdHJ1ZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvciBub3QuCit9OworCit1aW50OF90IHNGcmFtZUJ1ZmZlcltrRnV6VGVzdEJ1ZmZlclNpemVdOwordWludDMyX3Qgc0ZyYW1lQnVmZmVyVGFpbEluZGV4ID0gMDsKKwordWludDMyX3QgR2V0UmFuZG9tKHVpbnQzMl90IG1heCkKK3sKKyAgICB1aW50MzJfdCB2YWx1ZTsKKworICAgIGlmIChrVXNlVHJ1ZVJhbmRvbU51bWJlckdlbmVyYXRvcikKKyAgICB7CisgICAgICAgIG90UGxhdFJhbmRvbUdldFRydWUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2YWx1ZSA9IG90UGxhdFJhbmRvbUdldCgpOworICAgIH0KKworICAgIHJldHVybiB2YWx1ZSAlIG1heDsKK30KKworb3RFcnJvciBXcml0ZVJhbmRvbUZyYW1lKHVpbnQzMl90IGFMZW5ndGgsIE5jcEZyYW1lQnVmZmVyICZhTmNwQnVmZmVyKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgdWludDhfdCBieXRlOworICAgIENhbGxiYWNrQ29udGV4dCBvbGRDb250ZXh0ID0gc0NvbnRleHQ7CisgICAgdWludDMyX3QgdGFpbCA9IHNGcmFtZUJ1ZmZlclRhaWxJbmRleDsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTmNwQnVmZmVyLkluRnJhbWVCZWdpbigpKTsKKworICAgIHdoaWxlIChhTGVuZ3RoLS0pCisgICAgeworICAgICAgICBieXRlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0UmFuZG9tKDI1NikpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU5jcEJ1ZmZlci5JbkZyYW1lRmVlZERhdGEoJmJ5dGUsIHNpemVvZihieXRlKSkpOworICAgICAgICBzRnJhbWVCdWZmZXJbdGFpbCsrXSA9IGJ5dGU7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFOY3BCdWZmZXIuSW5GcmFtZUVuZCgpKTsKKworICAgIHNGcmFtZUJ1ZmZlclRhaWxJbmRleCA9IHRhaWw7CisKKyAgICAvLyBjaGVjayB0aGUgY2FsbGJhY2tzCisgICAgVmVyaWZ5T3JRdWl0KG9sZENvbnRleHQubUZyYW1lQWRkZWRDb3VudCArIDEgPT0gc0NvbnRleHQubUZyYW1lQWRkZWRDb3VudCwgIkZyYW1lQWRkZWRDYWxsYmFjayBmYWlsZWQuIik7CisgICAgVmVyaWZ5T3JRdWl0KG9sZENvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50ID09IHNDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCwgIkZyYW1lUmVtb3ZlZENhbGxiYWNrIGZhaWxlZC4iKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgUmVhZFJhbmRvbUZyYW1lKHVpbnQzMl90IGFMZW5ndGgsIE5jcEZyYW1lQnVmZmVyICZhTmNwQnVmZmVyKQoreworICAgIENhbGxiYWNrQ29udGV4dCBvbGRDb250ZXh0ID0gc0NvbnRleHQ7CisKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVCZWdpbigpLCAiT3V0RnJhbWVCZWdpbiBmYWlsZWQiKTsKKyAgICBWZXJpZnlPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZUdldExlbmd0aCgpID09IGFMZW5ndGgsICJPdXRGcmFtZUdldExlbmd0aCgpIGRvZXMgbm90IG1hdGNoIik7CisKKyAgICAvLyBSZWFkIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29udGVudCBpcyBzYW1lIGFzIHNGcmFtZUJ1ZmZlciB2YWx1ZXMuLi4KKyAgICBSZWFkQW5kVmVyaWZ5Q29udGVudChhTmNwQnVmZmVyLCBzRnJhbWVCdWZmZXIsIHN0YXRpY19jYXN0PHVpbnQxNl90PihhTGVuZ3RoKSk7CisgICAgc0V4cGVjdGVkUmVtb3ZlZFRhZyA9IGFOY3BCdWZmZXIuT3V0RnJhbWVHZXRUYWcoKTsKKworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZVJlbW92ZSgpLCAiT3V0RnJhbWVSZW1vdmUgZmFpbGVkIik7CisKKyAgICBzRnJhbWVCdWZmZXJUYWlsSW5kZXggLT0gYUxlbmd0aDsKKyAgICBtZW1tb3ZlKHNGcmFtZUJ1ZmZlciwgc0ZyYW1lQnVmZmVyICsgYUxlbmd0aCwgc0ZyYW1lQnVmZmVyVGFpbEluZGV4KTsKKworICAgIC8vIElmIHN1Y2Nlc3NmdWwgY2hlY2sgdGhlIGNhbGxiYWNrcworICAgIFZlcmlmeU9yUXVpdChvbGRDb250ZXh0Lm1GcmFtZUFkZGVkQ291bnQgPT0gc0NvbnRleHQubUZyYW1lQWRkZWRDb3VudCwgIkZyYW1lQWRkZWRDYWxsYmFjayBmYWlsZWQuIik7CisgICAgVmVyaWZ5T3JRdWl0KG9sZENvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50ICsgMSA9PSBzQ29udGV4dC5tRnJhbWVSZW1vdmVkQ291bnQsICJGcmFtZVJlbW92ZWRDYWxsYmFjayBmYWlsZWQuIik7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworCisvLyBUaGlzIHJ1bnMgYSBmdXp6IHRlc3Qgb2YgTkNQIGJ1ZmZlcgordm9pZCBUZXN0RnV6ek5jcEZyYW1lQnVmZmVyKHZvaWQpCit7CisgICAgdWludDhfdCBidWZmZXJba0Z1elRlc3RCdWZmZXJTaXplXTsKKyAgICBOY3BGcmFtZUJ1ZmZlciBuY3BCdWZmZXIoYnVmZmVyLCBrRnV6VGVzdEJ1ZmZlclNpemUpOworCisgICAgdWludDMyX3QgbGVuc0FycmF5W2tMZW5zQXJyYXlTaXplXTsgICAgICAgICAgLy8gS2VlcHMgdHJhY2sgb2YgbGVuZ3RoIG9mIHdyaXR0ZW4gZnJhbWVzIHNvIGZhcgorICAgIHVpbnQzMl90IGxlbnNBcnJheVN0YXJ0OworICAgIHVpbnQzMl90IGxlbnNBcnJheUNvdW50OworCisgICAgc0luc3RhbmNlID0gdGVzdEluaXRJbnN0YW5jZSgpOworICAgIHNNZXNzYWdlUG9vbCA9ICZzSW5zdGFuY2UtPm1JcDYubU1lc3NhZ2VQb29sOworCisgICAgbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOworCisgICAgbWVtc2V0KGxlbnNBcnJheSwgMCwgc2l6ZW9mKGxlbnNBcnJheSkpOworICAgIGxlbnNBcnJheVN0YXJ0ID0gMDsKKyAgICBsZW5zQXJyYXlDb3VudCA9IDA7CisKKyAgICBzQ29udGV4dC5tRnJhbWVBZGRlZENvdW50ID0gMDsKKyAgICBzQ29udGV4dC5tRnJhbWVSZW1vdmVkQ291bnQgPSAwOworICAgIENsZWFyVGFnSGlzdG9yeSgpOworCisgICAgbmNwQnVmZmVyLlNldEZyYW1lQWRkZWRDYWxsYmFjayhGcmFtZUFkZGVkQ2FsbGJhY2ssICZzQ29udGV4dCk7CisgICAgbmNwQnVmZmVyLlNldEZyYW1lUmVtb3ZlZENhbGxiYWNrKEZyYW1lUmVtb3ZlZENhbGxiYWNrLCAmc0NvbnRleHQpOworCisgICAgZm9yICh1aW50MzJfdCBpdGVyID0gMDsgaXRlciA8IGtGdXpUZXN0SXRlcmF0aW9uQXR0ZW1wdHM7IGl0ZXIrKykKKyAgICB7CisgICAgICAgIGJvb2wgc2hvdWxkUmVhZDsKKworICAgICAgICBpZiAobGVuc0FycmF5Q291bnQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc2hvdWxkUmVhZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxlbnNBcnJheUNvdW50ID09IGtMZW5zQXJyYXlTaXplIC0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgc2hvdWxkUmVhZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBSYW5kb21seSBkZWNpZGUgdG8gcmVhZCBvciB3cml0ZS4KKyAgICAgICAgICAgIHNob3VsZFJlYWQgPSAoR2V0UmFuZG9tKDEwMCkgPCBrUmVhZFByb2JhYmlsaXR5KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRSZWFkKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBsZW4gPSBsZW5zQXJyYXlbbGVuc0FycmF5U3RhcnRdOworCisgICAgICAgICAgICBsZW5zQXJyYXlTdGFydCA9IChsZW5zQXJyYXlTdGFydCArIDEpICUga0xlbnNBcnJheVNpemU7CisgICAgICAgICAgICBsZW5zQXJyYXlDb3VudC0tOworCisgICAgICAgICAgICBwcmludGYoIlIlZCAiLCBsZW4pOworCisgICAgICAgICAgICBTdWNjZXNzT3JRdWl0KFJlYWRSYW5kb21GcmFtZShsZW4sIG5jcEJ1ZmZlciksICJGYWlsZWQgdG8gcmVhZCByYW5kb20gZnJhbWUuIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBsZW4gPSBHZXRSYW5kb20oa01heEZyYW1lTGVuKSArIDE7CisKKyAgICAgICAgICAgIGlmIChXcml0ZVJhbmRvbUZyYW1lKGxlbiwgbmNwQnVmZmVyKSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxlbnNBcnJheVsobGVuc0FycmF5U3RhcnQgKyBsZW5zQXJyYXlDb3VudCkgJSBrTGVuc0FycmF5U2l6ZV0gPSBsZW47CisgICAgICAgICAgICAgICAgbGVuc0FycmF5Q291bnQrKzsKKworICAgICAgICAgICAgICAgIHByaW50ZigiVyVkICIsIGxlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJGVUxMICIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGxlbnNBcnJheUNvdW50ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuSXNFbXB0eSgpID09IHRydWUsICJJc0VtcHR5IGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHByaW50ZigiRU1QVFkgIik7CisgICAgICAgIH0KKworICAgIH0KKworICAgIHByaW50ZigiXG4gLS0gUEFTU1xuIik7CisKKyAgICB0ZXN0RnJlZUluc3RhbmNlKHNJbnN0YW5jZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjaWZkZWYgRU5BQkxFX1RFU1RfTUFJTgoraW50IG1haW4odm9pZCkKK3sKKyAgICBvdDo6VGVzdE5jcEZyYW1lQnVmZmVyKCk7CisgICAgb3Q6OlRlc3RGdXp6TmNwRnJhbWVCdWZmZXIoKTsKKyAgICBwcmludGYoIlxuQWxsIHRlc3RzIHBhc3NlZC5cbiIpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfcGxhdGZvcm0uY3BwIGIvdGVzdHMvdW5pdC90ZXN0X3BsYXRmb3JtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWNhZmRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3BsYXRmb3JtLmNwcApAQCAtMCwwICsxLDUzNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInRlc3RfcGxhdGZvcm0uaCIKKworI2lmIF9XSU4zMgorX19mb3JjZWlubGluZSBpbnQgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgc3RydWN0IHRpbWV6b25lICopCit7CisgICAgRFdPUkQgdGljayA9IEdldFRpY2tDb3VudCgpOworICAgIHR2LT50dl9zZWMgPSAobG9uZykodGljayAvIDEwMDApOworICAgIHR2LT50dl91c2VjID0gKGxvbmcpKHRpY2sgKiAxMDAwKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorCitib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdFBsYXRBbGFybVNldCA9IGZhbHNlOwordWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RQbGF0QWxhcm1OZXh0ID0gMDsKK3Rlc3RQbGF0QWxhcm1TdG9wICAgICAgICAgICAgICAgZ190ZXN0UGxhdEFsYXJtU3RvcCA9IE5VTEw7Cit0ZXN0UGxhdEFsYXJtU3RhcnRBdCAgICAgICAgICAgIGdfdGVzdFBsYXRBbGFybVN0YXJ0QXQgPSBOVUxMOwordGVzdFBsYXRBbGFybUdldE5vdyAgICAgICAgICAgICBnX3Rlc3RQbGF0QWxhcm1HZXROb3cgPSBOVUxMOworCitvdFJhZGlvQ2FwcyAgICAgICAgICAgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb0NhcHMgPSBPVF9SQURJT19DQVBTX05PTkU7Cit0ZXN0UGxhdFJhZGlvU2V0UGFuSWQgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb1NldFBhbklkID0gTlVMTDsKK3Rlc3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MgZ190ZXN0UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzID0gTlVMTDsKK3Rlc3RQbGF0UmFkaW9Jc0VuYWJsZWQgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvSXNFbmFibGVkID0gTlVMTDsKK3Rlc3RQbGF0UmFkaW9FbmFibGUgICAgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvRW5hYmxlID0gTlVMTDsKK3Rlc3RQbGF0UmFkaW9EaXNhYmxlICAgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvRGlzYWJsZSA9IE5VTEw7Cit0ZXN0UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzICAgIGdfdGVzdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcyA9IE5VTEw7Cit0ZXN0UGxhdFJhZGlvUmVjZWl2ZSAgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb1JlY2VpdmUgPSBOVUxMOwordGVzdFBsYXRSYWRpb1RyYW5zbWl0ICAgICAgICAgICBnX3Rlc3RQbGF0UmFkaW9UcmFuc21pdCA9IE5VTEw7Cit0ZXN0UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIgIGdfdGVzdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyID0gTlVMTDsKKwordm9pZCB0ZXN0UGxhdFJlc2V0VG9EZWZhdWx0cyh2b2lkKQoreworICAgIGdfdGVzdFBsYXRBbGFybVNldCA9IGZhbHNlOworICAgIGdfdGVzdFBsYXRBbGFybU5leHQgPSAwOworICAgIGdfdGVzdFBsYXRBbGFybVN0b3AgPSBOVUxMOworICAgIGdfdGVzdFBsYXRBbGFybVN0YXJ0QXQgPSBOVUxMOworICAgIGdfdGVzdFBsYXRBbGFybUdldE5vdyA9IE5VTEw7CisKKyAgICBnX3Rlc3RQbGF0UmFkaW9DYXBzID0gT1RfUkFESU9fQ0FQU19OT05FOworICAgIGdfdGVzdFBsYXRSYWRpb1NldFBhbklkID0gTlVMTDsKKyAgICBnX3Rlc3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MgPSBOVUxMOworICAgIGdfdGVzdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcyA9IE5VTEw7CisgICAgZ190ZXN0UGxhdFJhZGlvSXNFbmFibGVkID0gTlVMTDsKKyAgICBnX3Rlc3RQbGF0UmFkaW9FbmFibGUgPSBOVUxMOworICAgIGdfdGVzdFBsYXRSYWRpb0Rpc2FibGUgPSBOVUxMOworICAgIGdfdGVzdFBsYXRSYWRpb1JlY2VpdmUgPSBOVUxMOworICAgIGdfdGVzdFBsYXRSYWRpb1RyYW5zbWl0ID0gTlVMTDsKKyAgICBnX3Rlc3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlciA9IE5VTEw7Cit9CisKK290SW5zdGFuY2UgKnRlc3RJbml0SW5zdGFuY2Uodm9pZCkKK3sKKyAgICBvdEluc3RhbmNlICppbnN0YW5jZSA9IE5VTEw7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBzaXplX3QgaW5zdGFuZUJ1ZmZlckxlbmd0aCA9IDA7CisgICAgdWludDhfdCAqaW5zdGFuY2VCdWZmZXIgPSBOVUxMOworCisgICAgLy8gQ2FsbCB0byBxdWVyeSB0aGUgYnVmZmVyIHNpemUKKyAgICAodm9pZClvdEluc3RhbmNlSW5pdChOVUxMLCAmaW5zdGFuZUJ1ZmZlckxlbmd0aCk7CisKKyAgICAvLyBDYWxsIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIKKyAgICBpbnN0YW5jZUJ1ZmZlciA9ICh1aW50OF90ICopbWFsbG9jKGluc3RhbmVCdWZmZXJMZW5ndGgpOworICAgIFZlcmlmeU9yUXVpdChpbnN0YW5jZUJ1ZmZlciAhPSBOVUxMLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG90SW5zdGFuY2UiKTsKKyAgICBtZW1zZXQoaW5zdGFuY2VCdWZmZXIsIDAsIGluc3RhbmVCdWZmZXJMZW5ndGgpOworCisgICAgLy8gSW5pdGlhbGl6ZSBPcGVuVGhyZWFkIHdpdGggdGhlIGJ1ZmZlcgorICAgIGluc3RhbmNlID0gb3RJbnN0YW5jZUluaXQoaW5zdGFuY2VCdWZmZXIsICZpbnN0YW5lQnVmZmVyTGVuZ3RoKTsKKyNlbHNlCisgICAgaW5zdGFuY2UgPSBvdEluc3RhbmNlSW5pdFNpbmdsZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQgdGVzdEZyZWVJbnN0YW5jZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RJbnN0YW5jZUZpbmFsaXplKGFJbnN0YW5jZSk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBmcmVlKGFJbnN0YW5jZSk7CisjZW5kaWYKK30KKworYm9vbCBzRGlhZ01vZGUgPSBmYWxzZTsKKworZXh0ZXJuICJDIiB7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICB2b2lkICpvdFBsYXRDQWxsb2Moc2l6ZV90IGFOdW0sIHNpemVfdCBhU2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsb2MoYU51bSwgYVNpemUpOworICAgIH0KKworICAgIHZvaWQgb3RQbGF0RnJlZSh2b2lkICphUHRyKQorICAgIHsKKyAgICAgICAgZnJlZShhUHRyKTsKKyAgICB9CisjZW5kaWYKKworICAgIHZvaWQgb3RUYXNrbGV0c1NpZ25hbFBlbmRpbmcob3RJbnN0YW5jZSAqKQorICAgIHsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEFsYXJtCisgICAgLy8KKworICAgIHZvaWQgb3RQbGF0QWxhcm1TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKKyAgICB7CisgICAgICAgIGlmIChnX3Rlc3RQbGF0QWxhcm1TdG9wKQorICAgICAgICB7CisgICAgICAgICAgICBnX3Rlc3RQbGF0QWxhcm1TdG9wKGFJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBnX3Rlc3RQbGF0QWxhcm1TZXQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3RQbGF0QWxhcm1TdGFydEF0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVQwLCB1aW50MzJfdCBhRHQpCisgICAgeworICAgICAgICBpZiAoZ190ZXN0UGxhdEFsYXJtU3RhcnRBdCkKKyAgICAgICAgeworICAgICAgICAgICAgZ190ZXN0UGxhdEFsYXJtU3RhcnRBdChhSW5zdGFuY2UsIGFUMCwgYUR0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdfdGVzdFBsYXRBbGFybVNldCA9IHRydWU7CisgICAgICAgICAgICBnX3Rlc3RQbGF0QWxhcm1OZXh0ID0gYVQwICsgYUR0OworICAgICAgICB9CisgICAgfQorCisgICAgdWludDMyX3Qgb3RQbGF0QWxhcm1HZXROb3codm9pZCkKKyAgICB7CisgICAgICAgIGlmIChnX3Rlc3RQbGF0QWxhcm1HZXROb3cpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnX3Rlc3RQbGF0QWxhcm1HZXROb3coKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgICAgICAgICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisgICAgICAgICAgICByZXR1cm4gKHVpbnQzMl90KSgodHYudHZfc2VjICogMTAwMCkgKyAodHYudHZfdXNlYyAvIDEwMDApICsgMTIzNDU2KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gUmFkaW8KKyAgICAvLworCisgICAgdm9pZCBvdFBsYXRSYWRpb0dldEllZWVFdWk2NChvdEluc3RhbmNlICosIHVpbnQ4X3QgKikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBvdFBsYXRSYWRpb1NldFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBhbklkKQorICAgIHsKKyAgICAgICAgaWYgKGdfdGVzdFBsYXRSYWRpb1NldFBhbklkKQorICAgICAgICB7CisgICAgICAgICAgICBnX3Rlc3RQbGF0UmFkaW9TZXRQYW5JZChhSW5zdGFuY2UsIGFQYW5JZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG90UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCAqYUV4dEFkZHIpCisgICAgeworICAgICAgICBpZiAoZ190ZXN0UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBnX3Rlc3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MoYUluc3RhbmNlLCBhRXh0QWRkcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG90UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVNob3J0QWRkcikKKyAgICB7CisgICAgICAgIGlmIChnX3Rlc3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcyhhSW5zdGFuY2UsIGFTaG9ydEFkZHIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKiwgYm9vbCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvdFBsYXRSYWRpb0lzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCisgICAgeworICAgICAgICBpZiAoZ190ZXN0UGxhdFJhZGlvSXNFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ190ZXN0UGxhdFJhZGlvSXNFbmFibGVkKGFJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0UmFkaW9FbmFibGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgaWYgKGdfdGVzdFBsYXRSYWRpb0VuYWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdGVzdFBsYXRSYWRpb0VuYWJsZShhSW5zdGFuY2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCisgICAgeworICAgICAgICBpZiAoZ190ZXN0UGxhdFJhZGlvRW5hYmxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ190ZXN0UGxhdFJhZGlvRGlzYWJsZShhSW5zdGFuY2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFJhZGlvU2xlZXAob3RJbnN0YW5jZSAqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgb3RFcnJvciBvdFBsYXRSYWRpb1JlY2VpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFDaGFubmVsKQorICAgIHsKKyAgICAgICAgaWYgKGdfdGVzdFBsYXRSYWRpb1JlY2VpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnX3Rlc3RQbGF0UmFkaW9SZWNlaXZlKGFJbnN0YW5jZSwgYUNoYW5uZWwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFJhZGlvVHJhbnNtaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSkKKyAgICB7CisgICAgICAgICh2b2lkKWFGcmFtZTsKKworICAgICAgICBpZiAoZ190ZXN0UGxhdFJhZGlvVHJhbnNtaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnX3Rlc3RQbGF0UmFkaW9UcmFuc21pdChhSW5zdGFuY2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdFJhZGlvRnJhbWUgKm90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgaWYgKGdfdGVzdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ190ZXN0UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIoYUluc3RhbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAob3RSYWRpb0ZyYW1lICopMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludDhfdCBvdFBsYXRSYWRpb0dldFJzc2kob3RJbnN0YW5jZSAqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgb3RSYWRpb0NhcHMgb3RQbGF0UmFkaW9HZXRDYXBzKG90SW5zdGFuY2UgKikKKyAgICB7CisgICAgICAgIHJldHVybiBnX3Rlc3RQbGF0UmFkaW9DYXBzOworICAgIH0KKworICAgIGJvb2wgb3RQbGF0UmFkaW9HZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICopCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBvdFBsYXRSYWRpb0VuYWJsZVNyY01hdGNoKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgICAgICAodm9pZClhRW5hYmxlOworICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgICAgICAodm9pZClhU2hvcnRBZGRyZXNzOworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgICAgICAodm9pZClhRXh0QWRkcmVzczsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKKyAgICB7CisgICAgICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAgICAgKHZvaWQpYVNob3J0QWRkcmVzczsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgICAgICAodm9pZClhRXh0QWRkcmVzczsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgdm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgIH0KKworICAgIHZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisgICAgfQorCisgICAgb3RFcnJvciBvdFBsYXRSYWRpb0VuZXJneVNjYW4ob3RJbnN0YW5jZSAqLCB1aW50OF90LCB1aW50MTZfdCkKKyAgICB7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7CisgICAgfQorCisgICAgdm9pZCBvdFBsYXRSYWRpb1NldERlZmF1bHRUeFBvd2VyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFQb3dlcikKKyAgICB7CisgICAgICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAgICAgKHZvaWQpYVBvd2VyOworICAgIH0KKworICAgIGludDhfdCBvdFBsYXRSYWRpb0dldFJlY2VpdmVTZW5zaXRpdml0eShvdEluc3RhbmNlICphSW5zdGFuY2UpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvLworICAgIC8vIFJhbmRvbQorICAgIC8vCisKKyAgICB1aW50MzJfdCBvdFBsYXRSYW5kb21HZXQodm9pZCkKKyAgICB7CisjaWYgX1dJTjMyCisgICAgICAgIHJldHVybiAodWludDMyX3QpcmFuZCgpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuICh1aW50MzJfdClyYW5kb20oKTsKKyNlbmRpZgorICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0UmFuZG9tR2V0VHJ1ZSh1aW50OF90ICphT3V0cHV0LCB1aW50MTZfdCBhT3V0cHV0TGVuZ3RoKQorICAgIHsKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFPdXRwdXQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICAgICBmb3IgKHVpbnQxNl90IGxlbmd0aCA9IDA7IGxlbmd0aCA8IGFPdXRwdXRMZW5ndGg7IGxlbmd0aCsrKQorICAgICAgICB7CisgICAgICAgICAgICBhT3V0cHV0W2xlbmd0aF0gPSAodWludDhfdClvdFBsYXRSYW5kb21HZXQoKTsKKyAgICAgICAgfQorCitleGl0OgorICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEaWFnCisgICAgLy8KKworICAgIHZvaWQgb3RQbGF0RGlhZ1Byb2Nlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCkKKyAgICB7CisgICAgICAgIC8vIG5vIG1vcmUgZGlhZ25vc3RpY3MgZmVhdHVyZXMgZm9yIFBvc2l4IHBsYXRmb3JtCisgICAgICAgIHNwcmludGYoYU91dHB1dCwgImRpYWcgZmVhdHVyZSAnJXMnIGlzIG5vdCBzdXBwb3J0ZWRcclxuIiwgYXJndlswXSk7CisgICAgICAgICh2b2lkKWFyZ2M7CisgICAgfQorCisgICAgdm9pZCBvdFBsYXREaWFnTW9kZVNldChib29sIGFNb2RlKQorICAgIHsKKyAgICAgICAgc0RpYWdNb2RlID0gYU1vZGU7CisgICAgfQorCisgICAgYm9vbCBvdFBsYXREaWFnTW9kZUdldCgpCisgICAgeworICAgICAgICByZXR1cm4gc0RpYWdNb2RlOworICAgIH0KKworICAgIHZvaWQgb3RQbGF0RGlhZ0FsYXJtRmlyZWQob3RJbnN0YW5jZSAqKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIG90UGxhdERpYWdSYWRpb1RyYW5zbWl0RG9uZShvdEluc3RhbmNlICosIG90UmFkaW9GcmFtZSAqLCBvdEVycm9yKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIG90UGxhdERpYWdSYWRpb1JlY2VpdmVEb25lKG90SW5zdGFuY2UgKiwgb3RSYWRpb0ZyYW1lICosIG90RXJyb3IpCisgICAgeworICAgIH0KKworICAgIC8vCisgICAgLy8gVWFydAorICAgIC8vCisKKyAgICB2b2lkIG90UGxhdFVhcnRTZW5kRG9uZSh2b2lkKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIG90UGxhdFVhcnRSZWNlaXZlZChjb25zdCB1aW50OF90ICosIHVpbnQxNl90KQorICAgIHsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE1pc2MKKyAgICAvLworCisgICAgdm9pZCBvdFBsYXRSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisgICAgfQorCisgICAgb3RQbGF0UmVzZXRSZWFzb24gb3RQbGF0R2V0UmVzZXRSZWFzb24ob3RJbnN0YW5jZSAqYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgICAgICByZXR1cm4gT1RfUExBVF9SRVNFVF9SRUFTT05fUE9XRVJfT047CisgICAgfQorCisgICAgdm9pZCBvdFBsYXRMb2cob3RMb2dMZXZlbCwgb3RMb2dSZWdpb24sIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNldHRpbmdzCisgICAgLy8KKworICAgIHZvaWQgb3RQbGF0U2V0dGluZ3NJbml0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKKyAgICB7CisgICAgICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFNldHRpbmdzQmVnaW5DaGFuZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0U2V0dGluZ3NBYmFuZG9uQ2hhbmdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKKyAgICB7CisgICAgICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFNldHRpbmdzR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUtleSwgaW50IGFJbmRleCwgdWludDhfdCAqYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKmFWYWx1ZUxlbmd0aCkKKyAgICB7CisgICAgICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAgICAgKHZvaWQpYUtleTsKKyAgICAgICAgKHZvaWQpYUluZGV4OworICAgICAgICAodm9pZClhVmFsdWU7CisgICAgICAgICh2b2lkKWFWYWx1ZUxlbmd0aDsKKworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0U2V0dGluZ3NTZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWUsIHVpbnQxNl90IGFWYWx1ZUxlbmd0aCkKKyAgICB7CisgICAgICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAgICAgKHZvaWQpYUtleTsKKyAgICAgICAgKHZvaWQpYVZhbHVlOworICAgICAgICAodm9pZClhVmFsdWVMZW5ndGg7CisKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgb3RFcnJvciBvdFBsYXRTZXR0aW5nc0FkZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZSwgdWludDE2X3QgYVZhbHVlTGVuZ3RoKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgICAgICAodm9pZClhS2V5OworICAgICAgICAodm9pZClhVmFsdWU7CisgICAgICAgICh2b2lkKWFWYWx1ZUxlbmd0aDsKKworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFNldHRpbmdzRGVsZXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUtleSwgaW50IGFJbmRleCkKKyAgICB7CisgICAgICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAgICAgKHZvaWQpYUtleTsKKyAgICAgICAgKHZvaWQpYUluZGV4OworCisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIHZvaWQgb3RQbGF0U2V0dGluZ3NXaXBlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKKyAgICB7CisgICAgICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICB9CisKK30gLy8gZXh0ZXJuICJDIgpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X3BsYXRmb3JtLmggYi90ZXN0cy91bml0L3Rlc3RfcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJmZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3BsYXRmb3JtLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBURVNUX1BMQVRGT1JNX0gKKyNkZWZpbmUgVEVTVF9QTEFURk9STV9ICisKKyNpZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisKKy8vCisvLyBBbGFybSBQbGF0Zm9ybQorLy8KKwordHlwZWRlZiB2b2lkICgqdGVzdFBsYXRBbGFybVN0b3ApKG90SW5zdGFuY2UgKik7Cit0eXBlZGVmIHZvaWQgKCp0ZXN0UGxhdEFsYXJtU3RhcnRBdCkob3RJbnN0YW5jZSAqLCB1aW50MzJfdCwgdWludDMyX3QpOwordHlwZWRlZiB1aW50MzJfdCAoKnRlc3RQbGF0QWxhcm1HZXROb3cpKHZvaWQpOworCitleHRlcm4gYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0UGxhdEFsYXJtU2V0OworZXh0ZXJuIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdFBsYXRBbGFybU5leHQ7CitleHRlcm4gdGVzdFBsYXRBbGFybVN0b3AgICAgICAgICAgICAgICAgZ190ZXN0UGxhdEFsYXJtU3RvcDsKK2V4dGVybiB0ZXN0UGxhdEFsYXJtU3RhcnRBdCAgICAgICAgICAgICBnX3Rlc3RQbGF0QWxhcm1TdGFydEF0OworZXh0ZXJuIHRlc3RQbGF0QWxhcm1HZXROb3cgICAgICAgICAgICAgIGdfdGVzdFBsYXRBbGFybUdldE5vdzsKKworLy8KKy8vIFJhZGlvIFBsYXRmb3JtCisvLworCit0eXBlZGVmIHZvaWQgKCp0ZXN0UGxhdFJhZGlvU2V0UGFuSWQpKG90SW5zdGFuY2UgKiwgdWludDE2X3QpOwordHlwZWRlZiB2b2lkICgqdGVzdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcykob3RJbnN0YW5jZSAqLCB1aW50OF90ICopOwordHlwZWRlZiB2b2lkICgqdGVzdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcykob3RJbnN0YW5jZSAqLCB1aW50MTZfdCk7CisKK3R5cGVkZWYgYm9vbCgqdGVzdFBsYXRSYWRpb0lzRW5hYmxlZCkob3RJbnN0YW5jZSAqKTsKK3R5cGVkZWYgb3RFcnJvcigqdGVzdFBsYXRSYWRpb0VuYWJsZSkob3RJbnN0YW5jZSAqKTsKK3R5cGVkZWYgb3RFcnJvcigqdGVzdFBsYXRSYWRpb0Rpc2FibGUpKG90SW5zdGFuY2UgKik7Cit0eXBlZGVmIG90RXJyb3IoKnRlc3RQbGF0UmFkaW9SZWNlaXZlKShvdEluc3RhbmNlICosIHVpbnQ4X3QpOwordHlwZWRlZiBvdEVycm9yKCp0ZXN0UGxhdFJhZGlvVHJhbnNtaXQpKG90SW5zdGFuY2UgKik7Cit0eXBlZGVmIG90UmFkaW9GcmFtZSAqKCp0ZXN0UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIpKG90SW5zdGFuY2UgKik7CisKK2V4dGVybiBvdFJhZGlvQ2FwcyAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RQbGF0UmFkaW9DYXBzOworZXh0ZXJuIHRlc3RQbGF0UmFkaW9TZXRQYW5JZCAgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb1NldFBhbklkOworZXh0ZXJuIHRlc3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MgIGdfdGVzdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzczsKK2V4dGVybiB0ZXN0UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzICAgICBnX3Rlc3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3M7CitleHRlcm4gdGVzdFBsYXRSYWRpb0lzRW5hYmxlZCAgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvSXNFbmFibGVkOworZXh0ZXJuIHRlc3RQbGF0UmFkaW9FbmFibGUgICAgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb0VuYWJsZTsKK2V4dGVybiB0ZXN0UGxhdFJhZGlvRGlzYWJsZSAgICAgICAgICAgICBnX3Rlc3RQbGF0UmFkaW9EaXNhYmxlOworZXh0ZXJuIHRlc3RQbGF0UmFkaW9SZWNlaXZlICAgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb1JlY2VpdmU7CitleHRlcm4gdGVzdFBsYXRSYWRpb1RyYW5zbWl0ICAgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvVHJhbnNtaXQ7CitleHRlcm4gdGVzdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyICAgZ190ZXN0UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXI7CisKK290SW5zdGFuY2UgKnRlc3RJbml0SW5zdGFuY2Uodm9pZCk7Cit2b2lkIHRlc3RGcmVlSW5zdGFuY2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLy8gUmVzZXRzIHBsYXRmb3JtIGZ1bmN0aW9ucyB0byBkZWZhdWx0cwordm9pZCB0ZXN0UGxhdFJlc2V0VG9EZWZhdWx0cyh2b2lkKTsKKworI2VuZGlmIC8vIFRFU1RfUExBVEZPUk1fSApkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X3ByaW9yaXR5X3F1ZXVlLmNwcCBiL3Rlc3RzL3VuaXQvdGVzdF9wcmlvcml0eV9xdWV1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3YzFmMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF9wcmlvcml0eV9xdWV1ZS5jcHAKQEAgLTAsMCArMSw0MTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQtaW5zdGFuY2UuaD4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJ0ZXN0X3BsYXRmb3JtLmgiCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisKKyNkZWZpbmUga051bVRlc3RNZXNzYWdlcyAgICAgIDMKKworLy8gVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyB0aGUgY29udGVudCBvZiB0aGUgcHJpb3JpdHkgcXVldWUgdG8gbWF0Y2ggdGhlIHBhc3NlZCBpbiBtZXNzYWdlcwordm9pZCBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChvdDo6UHJpb3JpdHlRdWV1ZSAmYVByaW9yaXR5UXVldWUsIGludCBhRXhwZWN0ZWRMZW5ndGgsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgb3Q6Ok1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgb3Q6Ok1lc3NhZ2UgKm1zZ0FyZzsKKyAgICB1aW50OF90IGN1clByaW9yaXR5ID0gMHhmZjsKKyAgICB1aW50MTZfdCBtc2dDb3VudCwgYnVmQ291bnQ7CisKKyAgICAvLyBDaGVjayB0aGUgYEdldEluZm9gCisgICAgYVByaW9yaXR5UXVldWUuR2V0SW5mbyhtc2dDb3VudCwgYnVmQ291bnQpOworICAgIFZlcmlmeU9yUXVpdChtc2dDb3VudCA9PSBhRXhwZWN0ZWRMZW5ndGgsICJHZXRJbmZvKCkgcmVzdWx0IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIGxlbi5cbiIpOworCisgICAgdmFfc3RhcnQoYXJncywgYUV4cGVjdGVkTGVuZ3RoKTsKKworICAgIGlmIChhRXhwZWN0ZWRMZW5ndGggPT0gMCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UgPSBhUHJpb3JpdHlRdWV1ZS5HZXRIZWFkKCk7CisgICAgICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlID09IE5VTEwsICJQcmlvcml0eVF1ZXVlIGlzIG5vdCBlbXB0eSB3aGVuIGV4cGVjdGVkIGxlbiBpcyB6ZXJvLlxuIik7CisKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGFQcmlvcml0eVF1ZXVlLkdldEhlYWRGb3JQcmlvcml0eSgwKSA9PSBOVUxMLCAiR2V0SGVhZEZvclByaW9yaXR5KCkgbm9uLU5VTEwgd2hlbiBlbXB0eVxuIik7CisgICAgICAgIFZlcmlmeU9yUXVpdChhUHJpb3JpdHlRdWV1ZS5HZXRIZWFkRm9yUHJpb3JpdHkoMSkgPT0gTlVMTCwgIkdldEhlYWRGb3JQcmlvcml0eSgpIG5vbi1OVUxMIHdoZW4gZW1wdHlcbiIpOworICAgICAgICBWZXJpZnlPclF1aXQoYVByaW9yaXR5UXVldWUuR2V0SGVhZEZvclByaW9yaXR5KDIpID09IE5VTEwsICJHZXRIZWFkRm9yUHJpb3JpdHkoKSBub24tTlVMTCB3aGVuIGVtcHR5XG4iKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGFQcmlvcml0eVF1ZXVlLkdldEhlYWRGb3JQcmlvcml0eSgzKSA9PSBOVUxMLCAiR2V0SGVhZEZvclByaW9yaXR5KCkgbm9uLU5VTEwgd2hlbiBlbXB0eVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIEdvIHRocm91Z2ggYWxsIG1lc3NhZ2VzIGluIHRoZSBxdWV1ZSBhbmQgdmVyaWZ5IHRoZXkgbWF0Y2ggdGhlIHBhc3NlZC1pbiBtZXNzYWdlcworICAgICAgICBmb3IgKG1lc3NhZ2UgPSBhUHJpb3JpdHlRdWV1ZS5HZXRIZWFkKCk7IG1lc3NhZ2UgIT0gTlVMTDsgbWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGFFeHBlY3RlZExlbmd0aCAhPSAwLCAiUHJpb3JpdHlRdWV1ZSBjb250YWlucyBtb3JlIGVudHJpZXMgdGhhbiBleHBlY3RlZC5cbiIpOworCisgICAgICAgICAgICBtc2dBcmcgPSB2YV9hcmcoYXJncywgb3Q6Ok1lc3NhZ2UgKik7CisKKyAgICAgICAgICAgIGlmIChtc2dBcmctPkdldFByaW9yaXR5KCkgIT0gY3VyUHJpb3JpdHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChjdXJQcmlvcml0eSsrOyBjdXJQcmlvcml0eSAhPSBtc2dBcmctPkdldFByaW9yaXR5KCk7IGN1clByaW9yaXR5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGUgYEdldEhlYWRGb3JQcmlvcml0eWAgaXMgTlVMTCBpZiB0aGVyZSBhcmUgbm8gZXhwZWN0ZWQgbWVzc2FnZSBmb3IgdGhpcyBwcmlvcml0eSBsZXZlbC4KKyAgICAgICAgICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KAorICAgICAgICAgICAgICAgICAgICAgICAgYVByaW9yaXR5UXVldWUuR2V0SGVhZEZvclByaW9yaXR5KGN1clByaW9yaXR5KSA9PSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIlByaW9yaXR5UXVldWU6OkdldEhlYWRGb3JQcmlvcml0eSBpcyBub24tTlVMTCB3aGVuIG5vIGV4cGVjdGVkIG1zZyBmb3IgdGhpcyBwcmlvcml0eS5cbiIKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGUgYEdldEhlYWRGb3JQcmlvcml0eWAuCisgICAgICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KAorICAgICAgICAgICAgICAgICAgICBhUHJpb3JpdHlRdWV1ZS5HZXRIZWFkRm9yUHJpb3JpdHkoY3VyUHJpb3JpdHkpID09IG1zZ0FyZywKKyAgICAgICAgICAgICAgICAgICAgIlByaW9yaXR5UXVldWU6OkdldEhlYWRGb3JQcmlvcml0eSBmYWlsZWQuXG4iCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIHF1ZXVlZCBtZXNzYWdlIHRvIG1hdGNoIHRoZSBvbmUgZnJvbSBhcmd1bWVudCBsaXN0CisgICAgICAgICAgICBWZXJpZnlPclF1aXQobXNnQXJnID09IG1lc3NhZ2UsICJQcmlvcml0eVF1ZXVlIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggd2hhdCBpcyBleHBlY3RlZC5cbiIpOworCisgICAgICAgICAgICBhRXhwZWN0ZWRMZW5ndGgtLTsKKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeU9yUXVpdChhRXhwZWN0ZWRMZW5ndGggPT0gMCwgIlByaW9yaXR5UXVldWUgY29udGFpbnMgbGVzcyBlbnRyaWVzIHRoYW4gZXhwZWN0ZWQuXG4iKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgYEdldEhlYWRGb3JQcmlvcml0eWAgaXMgTlVMTCBpZiB0aGVyZSBhcmUgbm8gZXhwZWN0ZWQgbWVzc2FnZSBmb3IgYW55IHJlbWFpbmluZyBwcmlvcml0eSBsZXZlbC4KKyAgICAgICAgZm9yIChjdXJQcmlvcml0eSsrOyBjdXJQcmlvcml0eSA8IDQ7IGN1clByaW9yaXR5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdCgKKyAgICAgICAgICAgICAgICBhUHJpb3JpdHlRdWV1ZS5HZXRIZWFkRm9yUHJpb3JpdHkoY3VyUHJpb3JpdHkpID09IE5VTEwsCisgICAgICAgICAgICAgICAgIlByaW9yaXR5UXVldWU6OkdldEhlYWRGb3JQcmlvcml0eSBpcyBub24tTlVMTCB3aGVuIG5vIGV4cGVjdGVkIG1zZyBmb3IgdGhpcyBwcmlvcml0eS5cbiIKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGFsbCBtZXNzYWdlIHF1ZXVlIHRvIG1hdGNoIHRoZSBwYXNzZWQgaW4gbWVzc2FnZXMKK3ZvaWQgVmVyaWZ5QWxsTWVzc2FnZXNDb250ZW50KG90OjpNZXNzYWdlUG9vbCAqYU1lc3NhZ2VQb29sLCBpbnQgYUV4cGVjdGVkTGVuZ3RoLCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIG90OjpNZXNzYWdlUG9vbDo6SXRlcmF0b3IgaXQ7CisgICAgb3Q6Ok1lc3NhZ2UgKm1zZ0FyZzsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIGFFeHBlY3RlZExlbmd0aCk7CisKKyAgICBpZiAoYUV4cGVjdGVkTGVuZ3RoID09IDApCisgICAgeworICAgICAgICBWZXJpZnlPclF1aXQoYU1lc3NhZ2VQb29sLT5HZXRBbGxNZXNzYWdlc0hlYWQoKS5Jc0VtcHR5KCksICJIZWFkIGlzIG5vdCBlbXB0eSB3aGVuIGV4cGVjdGVkIGxlbiBpcyB6ZXJvLlxuIik7CisgICAgICAgIFZlcmlmeU9yUXVpdChhTWVzc2FnZVBvb2wtPkdldEFsbE1lc3NhZ2VzVGFpbCgpLklzRW1wdHkoKSwgIlRhaWwgaXMgbm90IGVtcHR5IHdoZW4gZXhwZWN0ZWQgbGVuIGlzIHplcm8uXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChpdCA9IGFNZXNzYWdlUG9vbC0+R2V0QWxsTWVzc2FnZXNIZWFkKCk7ICFpdC5IYXNFbmRlZCgpIDsgaXQuR29Ub05leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGFFeHBlY3RlZExlbmd0aCAhPSAwLCAiQWxsTWVzc2FnZXNRdWV1ZSBjb250YWlucyBtb3JlIGVudHJpZXMgdGhhbiBleHBlY3RlZC5cbiIpOworICAgICAgICAgICAgbXNnQXJnID0gdmFfYXJnKGFyZ3MsIG90OjpNZXNzYWdlICopOworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KG1zZ0FyZyA9PSBpdC5HZXRNZXNzYWdlKCksICJBbGxNZXNzYWdlc1F1ZXVlIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggd2hhdCBpcyBleHBlY3RlZC5cbiIpOworICAgICAgICAgICAgYUV4cGVjdGVkTGVuZ3RoLS07CisgICAgICAgIH0KKworICAgICAgICBWZXJpZnlPclF1aXQoYUV4cGVjdGVkTGVuZ3RoID09IDAsICJBbGxNZXNzYWdlc1F1ZXVlIGNvbnRhaW5zIGxlc3MgZW50cmllcyB0aGFuIGV4cGVjdGVkLlxuIik7CisgICAgfQorCisgICAgdmFfZW5kKGFyZ3MpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoZSBjb250ZW50IG9mIHRoZSBhbGwgbWVzc2FnZSBxdWV1ZSB0byBtYXRjaCB0aGUgcGFzc2VkIGluIG1lc3NhZ2VzLiBJdCBnb2VzCisvLyB0aHJvdWdoIHRoZSBBbGxNZXNzYWdlcyBsaXN0IGluIHJldmVyc2UuCit2b2lkIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudEluUmV2ZXJzZShvdDo6TWVzc2FnZVBvb2wgKmFNZXNzYWdlUG9vbCwgaW50IGFFeHBlY3RlZExlbmd0aCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICBvdDo6TWVzc2FnZVBvb2w6Okl0ZXJhdG9yIGl0OworICAgIG90OjpNZXNzYWdlICptc2dBcmc7CisKKyAgICB2YV9zdGFydChhcmdzLCBhRXhwZWN0ZWRMZW5ndGgpOworCisgICAgaWYgKGFFeHBlY3RlZExlbmd0aCA9PSAwKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGFNZXNzYWdlUG9vbC0+R2V0QWxsTWVzc2FnZXNIZWFkKCkuSXNFbXB0eSgpLCAiSGVhZCBpcyBub3QgZW1wdHkgd2hlbiBleHBlY3RlZCBsZW4gaXMgemVyby5cbiIpOworICAgICAgICBWZXJpZnlPclF1aXQoYU1lc3NhZ2VQb29sLT5HZXRBbGxNZXNzYWdlc1RhaWwoKS5Jc0VtcHR5KCksICJUYWlsIGlzIG5vdCBlbXB0eSB3aGVuIGV4cGVjdGVkIGxlbiBpcyB6ZXJvLlxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoaXQgPSBhTWVzc2FnZVBvb2wtPkdldEFsbE1lc3NhZ2VzVGFpbCgpOyAhaXQuSGFzRW5kZWQoKSA7IGl0LkdvVG9QcmV2KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChhRXhwZWN0ZWRMZW5ndGggIT0gMCwgIkFsbE1lc3NhZ2VzUXVldWUgY29udGFpbnMgbW9yZSBlbnRyaWVzIHRoYW4gZXhwZWN0ZWQuXG4iKTsKKyAgICAgICAgICAgIG1zZ0FyZyA9IHZhX2FyZyhhcmdzLCBvdDo6TWVzc2FnZSAqKTsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChtc2dBcmcgPT0gaXQuR2V0TWVzc2FnZSgpLCAiQWxsTWVzc2FnZXNRdWV1ZSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHdoYXQgaXMgZXhwZWN0ZWQuXG4iKTsKKyAgICAgICAgICAgIGFFeHBlY3RlZExlbmd0aC0tOworICAgICAgICB9CisKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGFFeHBlY3RlZExlbmd0aCA9PSAwLCAiQWxsTWVzc2FnZXNRdWV1ZSBjb250YWlucyBsZXNzIGVudHJpZXMgdGhhbiBleHBlY3RlZC5cbiIpOworICAgIH0KKworICAgIHZhX2VuZChhcmdzKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyB0aGUgY29udGVudCBvZiB0aGUgbWVzc2FnZSBxdWV1ZSB0byBtYXRjaCB0aGUgcGFzc2VkIGluIG1lc3NhZ2VzCit2b2lkIFZlcmlmeU1zZ1F1ZXVlQ29udGVudChvdDo6TWVzc2FnZVF1ZXVlICZhTWVzc2FnZVF1ZXVlLCBpbnQgYUV4cGVjdGVkTGVuZ3RoLCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIG90OjpNZXNzYWdlICptZXNzYWdlOworICAgIG90OjpNZXNzYWdlICptc2dBcmc7CisKKyAgICB2YV9zdGFydChhcmdzLCBhRXhwZWN0ZWRMZW5ndGgpOworCisgICAgaWYgKGFFeHBlY3RlZExlbmd0aCA9PSAwKQorICAgIHsKKyAgICAgICAgbWVzc2FnZSA9IGFNZXNzYWdlUXVldWUuR2V0SGVhZCgpOworICAgICAgICBWZXJpZnlPclF1aXQobWVzc2FnZSA9PSBOVUxMLCAiTWVzc2FnZVF1ZXVlIGlzIG5vdCBlbXB0eSB3aGVuIGV4cGVjdGVkIGxlbiBpcyB6ZXJvLlxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAobWVzc2FnZSA9IGFNZXNzYWdlUXVldWUuR2V0SGVhZCgpOyBtZXNzYWdlICE9IE5VTEw7IG1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChhRXhwZWN0ZWRMZW5ndGggIT0gMCwgIk1lc3NhZ2VRdWV1ZSBjb250YWlucyBtb3JlIGVudHJpZXMgdGhhbiBleHBlY3RlZFxuIik7CisKKyAgICAgICAgICAgIG1zZ0FyZyA9IHZhX2FyZyhhcmdzLCBvdDo6TWVzc2FnZSAqKTsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChtc2dBcmcgPT0gbWVzc2FnZSwgIk1lc3NhZ2VRdWV1ZSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHdoYXQgaXMgZXhwZWN0ZWQuXG4iKTsKKworICAgICAgICAgICAgYUV4cGVjdGVkTGVuZ3RoLS07CisgICAgICAgIH0KKworICAgICAgICBWZXJpZnlPclF1aXQoYUV4cGVjdGVkTGVuZ3RoID09IDAsICJNZXNzYWdlUXVldWUgY29udGFpbnMgbGVzcyBlbnRyaWVzIHRoYW4gZXhwZWN0ZWRcbiIpOworICAgIH0KKworICAgIHZhX2VuZChhcmdzKTsKK30KKwordm9pZCBUZXN0UHJpb3JpdHlRdWV1ZSh2b2lkKQoreworICAgIG90SW5zdGFuY2UgKmluc3RhbmNlOworICAgIG90OjpNZXNzYWdlUG9vbCAqbWVzc2FnZVBvb2w7CisgICAgb3Q6OlByaW9yaXR5UXVldWUgcXVldWU7CisgICAgb3Q6Ok1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWU7CisgICAgb3Q6Ok1lc3NhZ2UgKm1zZ0hpZ2ggICAgW2tOdW1UZXN0TWVzc2FnZXNdOworICAgIG90OjpNZXNzYWdlICptc2dNZWQgICAgIFtrTnVtVGVzdE1lc3NhZ2VzXTsKKyAgICBvdDo6TWVzc2FnZSAqbXNnTG93ICAgICBba051bVRlc3RNZXNzYWdlc107CisgICAgb3Q6Ok1lc3NhZ2UgKm1zZ1ZlcnlMb3cgW2tOdW1UZXN0TWVzc2FnZXNdOworICAgIG90OjpNZXNzYWdlUG9vbDo6SXRlcmF0b3IgaXQ7CisKKyAgICBpbnN0YW5jZSA9IHRlc3RJbml0SW5zdGFuY2UoKTsKKyAgICBWZXJpZnlPclF1aXQoaW5zdGFuY2UgIT0gTlVMTCwgIk51bGwgT3BlblRocmVhZCBpbnN0YW5jZVxuIik7CisKKyAgICBtZXNzYWdlUG9vbCA9ICZpbnN0YW5jZS0+bUlwNi5tTWVzc2FnZVBvb2w7CisKKyAgICAvLyBBbGxvY2F0ZSBtZXNzYWdlcyB3aXRoIGRpZmZlcmVudCBwcmlvcml0aWVzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwga051bVRlc3RNZXNzYWdlczsgaSsrKQorICAgIHsKKyAgICAgICAgbXNnSGlnaFtpXSA9IG1lc3NhZ2VQb29sLT5OZXcob3Q6Ok1lc3NhZ2U6OmtUeXBlSXA2LCAwKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1zZ0hpZ2hbaV0gIT0gTlVMTCwgIk1lc3NhZ2U6Ok5ldyBmYWlsZWRcbiIpOworICAgICAgICBTdWNjZXNzT3JRdWl0KG1zZ0hpZ2hbaV0tPlNldFByaW9yaXR5KDApLCAiTWVzc2FnZTpTZXRQcmlvcml0eSBmYWlsZWRcbiIpOworICAgICAgICBtc2dNZWRbaV0gPSBtZXNzYWdlUG9vbC0+TmV3KG90OjpNZXNzYWdlOjprVHlwZUlwNiwgMCk7CisgICAgICAgIFZlcmlmeU9yUXVpdChtc2dNZWRbaV0gIT0gTlVMTCwgIk1lc3NhZ2U6Ok5ldyBmYWlsZWRcbiIpOworICAgICAgICBTdWNjZXNzT3JRdWl0KG1zZ01lZFtpXS0+U2V0UHJpb3JpdHkoMSksICJNZXNzYWdlOlNldFByaW9yaXR5IGZhaWxlZFxuIik7CisgICAgICAgIG1zZ0xvd1tpXSA9IG1lc3NhZ2VQb29sLT5OZXcob3Q6Ok1lc3NhZ2U6OmtUeXBlSXA2LCAwKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1zZ0xvd1tpXSAhPSBOVUxMLCAiTWVzc2FnZTo6TmV3IGZhaWxlZFxuIik7CisgICAgICAgIFN1Y2Nlc3NPclF1aXQobXNnTG93W2ldLT5TZXRQcmlvcml0eSgyKSwgIk1lc3NhZ2U6U2V0UHJpb3JpdHkgZmFpbGVkXG4iKTsKKyAgICAgICAgbXNnVmVyeUxvd1tpXSA9IG1lc3NhZ2VQb29sLT5OZXcob3Q6Ok1lc3NhZ2U6OmtUeXBlSXA2LCAwKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1zZ1ZlcnlMb3dbaV0gIT0gTlVMTCwgIk1lc3NhZ2U6Ok5ldyBmYWlsZWRcbiIpOworICAgICAgICBTdWNjZXNzT3JRdWl0KG1zZ1ZlcnlMb3dbaV0tPlNldFByaW9yaXR5KDMpLCAiTWVzc2FnZTpTZXRQcmlvcml0eSBmYWlsZWRcbiIpOworICAgIH0KKworICAgIC8vIENoZWNrIHRoZSBmYWlsdXJlIGNhc2UgZm9yIGBTZXRQcmlvcml0eWAgZm9yIGludmFsaWQgYXJndW1lbnQuCisgICAgVmVyaWZ5T3JRdWl0KAorICAgICAgICBtc2dIaWdoWzJdLT5TZXRQcmlvcml0eShvdDo6TWVzc2FnZTo6a051bVByaW9yaXRpZXMpID09IE9UX0VSUk9SX0lOVkFMSURfQVJHUywKKyAgICAgICAgIk1lc3NhZ2U6OlNldFByaW9yaXR5KCkgd2l0aCBvdXQgb2YgcmFuZ2UgdmFsdWUgZGlkIG5vdCBmYWlsIGFzIGV4cGVjdGVkLlxuIgorICAgICk7CisKKyAgICAvLyBDaGVjayB0aGUgYEdldFByaW9yaXR5KClgCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtVGVzdE1lc3NhZ2VzOyBpKyspCisgICAgeworICAgICAgICBWZXJpZnlPclF1aXQobXNnSGlnaFtpXS0+R2V0UHJpb3JpdHkoKSA9PSAwLCAiTWVzc2FnZTo6R2V0UHJpb3JpdHkgZmFpbGVkLlxuIik7CisgICAgICAgIFZlcmlmeU9yUXVpdChtc2dNZWRbaV0tPkdldFByaW9yaXR5KCkgPT0gMSwgIk1lc3NhZ2U6OkdldFByaW9yaXR5IGZhaWxlZC5cbiIpOworICAgICAgICBWZXJpZnlPclF1aXQobXNnTG93W2ldLT5HZXRQcmlvcml0eSgpID09IDIsICJNZXNzYWdlOjpHZXRQcmlvcml0eSBmYWlsZWQuXG4iKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1zZ1ZlcnlMb3dbaV0tPkdldFByaW9yaXR5KCkgPT0gMywgIk1lc3NhZ2U6OkdldFByaW9yaXR5IGZhaWxlZC5cbiIpOworICAgIH0KKworICAgIC8vIFZlcmlmeSBjYXNlIG9mIGFuIGVtcHR5IHF1ZXVlLgorICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAwKTsKKworICAgIC8vIEFkZCBtc2dzIGluIGRpZmZlcmVudCBvcmRlcnMgYW5kIGNoZWNrIHRoZSBjb250ZW50IG9mIHF1ZXVlLgorICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRW5xdWV1ZSgqbXNnTWVkWzBdKSwgIlByaW9yaXR5UXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMSwgbXNnTWVkWzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkVucXVldWUoKm1zZ01lZFsxXSksICJQcmlvcml0eVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDIsIG1zZ01lZFswXSwgbXNnTWVkWzFdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkVucXVldWUoKm1zZ0hpZ2hbMF0pLCAiUHJpb3JpdHlRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAzLCBtc2dIaWdoWzBdLCBtc2dNZWRbMF0sIG1zZ01lZFsxXSk7CisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5FbnF1ZXVlKCptc2dIaWdoWzFdKSwgIlByaW9yaXR5UXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgNCwgbXNnSGlnaFswXSwgbXNnSGlnaFsxXSwgbXNnTWVkWzBdLCBtc2dNZWRbMV0pOworICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRW5xdWV1ZSgqbXNnTWVkWzJdKSwgIlByaW9yaXR5UXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgNSwgbXNnSGlnaFswXSwgbXNnSGlnaFsxXSwgbXNnTWVkWzBdLCBtc2dNZWRbMV0sIG1zZ01lZFsyXSk7CisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5FbnF1ZXVlKCptc2dWZXJ5TG93WzBdKSwgIlByaW9yaXR5UXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgNiwgbXNnSGlnaFswXSwgbXNnSGlnaFsxXSwgbXNnTWVkWzBdLCBtc2dNZWRbMV0sIG1zZ01lZFsyXSwgbXNnVmVyeUxvd1swXSk7CisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5FbnF1ZXVlKCptc2dMb3dbMF0pLCAiUHJpb3JpdHlRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCA3LCBtc2dIaWdoWzBdLCBtc2dIaWdoWzFdLCBtc2dNZWRbMF0sIG1zZ01lZFsxXSwgbXNnTWVkWzJdLCBtc2dMb3dbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnVmVyeUxvd1swXSk7CisKKyAgICAvLyBDaGVjayB0aGUgTWVzc2FnZVBvb2w6Okl0ZXJhdG9yIG1ldGhvZHMuCisgICAgVmVyaWZ5T3JRdWl0KGl0LklzRW1wdHkoKSwgIkl0ZXJhdG9yOjpJc0VtcHR5KCkgZmFpbGVkIHRvIHJldHVybiBgdHJ1ZWAgZm9yIGFuIGVtcHR5IGl0ZXJhdG9yLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KGl0LkdldE5leHQoKS5Jc0VtcHR5KCksICJJdGVyYXRvcjo6SXNFbXB0eSgpIGZhaWxlZCB0byByZXR1cm4gYHRydWVgIGZvciBhbiBlbXB0eSBpdGVyYXRvci5cbiIpOworICAgIFZlcmlmeU9yUXVpdChpdC5HZXRQcmV2KCkuSXNFbXB0eSgpLCAiSXRlcmF0b3I6OklzRW1wdHkoKSBmYWlsZWQgdG8gcmV0dXJuIGB0cnVlYCBmb3IgYW4gZW1wdHkgaXRlcmF0b3IuXG4iKTsKKyAgICBpdC5Hb1RvTmV4dCgpOworICAgIFZlcmlmeU9yUXVpdChpdC5Jc0VtcHR5KCksICJJdGVyYXRvcjo6SXNFbXB0eSgpIGZhaWxlZCB0byByZXR1cm4gYHRydWVgIGZvciBhbiBlbXB0eSBpdGVyYXRvci5cbiIpOworICAgIGl0LkdvVG9OZXh0KCk7CisgICAgVmVyaWZ5T3JRdWl0KGl0LklzRW1wdHkoKSwgIkl0ZXJhdG9yOjpJc0VtcHR5KCkgZmFpbGVkIHRvIHJldHVybiBgdHJ1ZWAgZm9yIGFuIGVtcHR5IGl0ZXJhdG9yLlxuIik7CisKKyAgICBpdCA9IG1lc3NhZ2VQb29sLT5HZXRBbGxNZXNzYWdlc0hlYWQoKTsKKyAgICBWZXJpZnlPclF1aXQoIWl0LklzRW1wdHkoKSwgIkl0ZXJhdG9yOjpJc0VtcHR5KCkgZmFpbGVkIHRvIHJldHVybiBgZmFsc2VgIHdoZW4gaXQgaXMgbm90IGVtcHR5LlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KGl0LkdldE1lc3NhZ2UoKSA9PSBtc2dIaWdoWzBdLCAiSXRlcmF0b3I6OkdldE1lc3NhZ2UoKSBmYWlsZWQuXG4iKTsKKyAgICBpdCA9IGl0LkdldE5leHQoKTsKKyAgICBWZXJpZnlPclF1aXQoIWl0LklzRW1wdHkoKSwgIkl0ZXJhdG9yOjpJc0VtcHR5KCkgZmFpbGVkIHRvIHJldHVybiBgZmFsc2VgIHdoZW4gaXQgaXMgbm90IGVtcHR5LlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KGl0LkdldE1lc3NhZ2UoKSA9PSBtc2dIaWdoWzFdLCAiSXRlcmF0b3I6OkdldE5leHQoKSBmYWlsZWQuXG4iKTsKKyAgICBpdCA9IGl0LkdldFByZXYoKTsKKyAgICBWZXJpZnlPclF1aXQoaXQuR2V0TWVzc2FnZSgpID09IG1zZ0hpZ2hbMF0sICJJdGVyYXRvcjo6R2V0UHJldigpIGZhaWxlZC5cbiIpOworICAgIGl0ID0gaXQuR2V0UHJldigpOworICAgIFZlcmlmeU9yUXVpdChpdC5IYXNFbmRlZCgpLCAiSXRlcmF0b3I6OkdldFByZXYoKSBmYWlsZWQgdG8gcmV0dXJuIGVtcHR5IGF0IGhlYWQuXG4iKTsKKyAgICBpdCA9IG1lc3NhZ2VQb29sLT5HZXRBbGxNZXNzYWdlc1RhaWwoKTsKKyAgICBpdCA9IGl0LkdldE5leHQoKTsKKyAgICBWZXJpZnlPclF1aXQoaXQuSGFzRW5kZWQoKSwgIkl0ZXJhdG9yOjpHZXROZXh0KCkgZmFpbGVkIHRvIHJldHVybiBlbXB0eSBhdCB0YWlsLlxuIik7CisKKyAgICAvLyBDaGVjayB0aGUgQWxsTWVzc2FnZSBxdWV1ZSBjb250ZW50cyAoc2hvdWxkIG1hdGNoIHRoZSBjb250ZW50IG9mIHByaW9yaXR5IHF1ZXVlKS4KKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDcsIG1zZ0hpZ2hbMF0sIG1zZ0hpZ2hbMV0sIG1zZ01lZFswXSwgbXNnTWVkWzFdLCBtc2dNZWRbMl0sIG1zZ0xvd1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnVmVyeUxvd1swXSk7CisgICAgVmVyaWZ5QWxsTWVzc2FnZXNDb250ZW50SW5SZXZlcnNlKG1lc3NhZ2VQb29sLCA3LCBtc2dWZXJ5TG93WzBdLCBtc2dMb3dbMF0sIG1zZ01lZFsyXSwgbXNnTWVkWzFdLCBtc2dNZWRbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ0hpZ2hbMV0sIG1zZ0hpZ2hbMF0pOworCisgICAgLy8gUmVtb3ZlIG1lc3NhZ2VzIGluIGRpZmZlcmVudCBvcmRlciBhbmQgY2hlY2sgdGhlIGNvbnRlbnQgb2YgcXVldWUgaW4gZWFjaCBzdGVwLgorICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRGVxdWV1ZSgqbXNnSGlnaFswXSksICJQcmlvcml0eVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDYsIG1zZ0hpZ2hbMV0sIG1zZ01lZFswXSwgbXNnTWVkWzFdLCBtc2dNZWRbMl0sIG1zZ0xvd1swXSwgbXNnVmVyeUxvd1swXSk7CisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5EZXF1ZXVlKCptc2dNZWRbMl0pLCAiUHJpb3JpdHlRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCA1LCBtc2dIaWdoWzFdLCBtc2dNZWRbMF0sIG1zZ01lZFsxXSwgbXNnTG93WzBdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkRlcXVldWUoKm1zZ0xvd1swXSksICJQcmlvcml0eVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDQsIG1zZ0hpZ2hbMV0sIG1zZ01lZFswXSwgbXNnTWVkWzFdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkRlcXVldWUoKm1zZ01lZFsxXSksICJQcmlvcml0eVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDMsIG1zZ0hpZ2hbMV0sIG1zZ01lZFswXSwgbXNnVmVyeUxvd1swXSk7CisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5EZXF1ZXVlKCptc2dWZXJ5TG93WzBdKSwgIlByaW9yaXR5UXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMiwgbXNnSGlnaFsxXSwgbXNnTWVkWzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkRlcXVldWUoKm1zZ0hpZ2hbMV0pLCAiUHJpb3JpdHlRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAxLCBtc2dNZWRbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRGVxdWV1ZSgqbXNnTWVkWzBdKSwgIlByaW9yaXR5UXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMCk7CisgICAgVmVyaWZ5QWxsTWVzc2FnZXNDb250ZW50KG1lc3NhZ2VQb29sLCAwKTsKKworICAgIC8vIENoZWNrIHRoZSBmYWlsdXJlIGNhc2VzOiBFbnF1ZXVpbmcgYW4gYWxyZWFkeSBxdWV1ZWQgbWVzc2FnZSwgb3IgZGVxdWV1aW5nIGEgbWVzc2FnZSBub3QgcXVldWVkLgorICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRW5xdWV1ZSgqbXNnSGlnaFswXSksICJQcmlvcml0eVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDEsIG1zZ0hpZ2hbMF0pOworICAgIFZlcmlmeU9yUXVpdCgKKyAgICAgICAgcXVldWUuRW5xdWV1ZSgqbXNnSGlnaFswXSkgPT0gT1RfRVJST1JfQUxSRUFEWSwKKyAgICAgICAgIkVucXVldWluZyBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlIGRpZCBub3QgZmFpbCBhcyBleHBlY3RlZC5cbiIKKyAgICApOworICAgIFZlcmlmeU9yUXVpdCgKKyAgICAgICAgcXVldWUuRGVxdWV1ZSgqbXNnTWVkWzBdKSA9PSBPVF9FUlJPUl9OT1RfRk9VTkQsCisgICAgICAgICJEZXF1ZXVpbmcgYSBtZXNzYWdlIG5vdCBxdWV1ZWQsIGRpZCBub3QgZmFpbCBhcyBleHBlY3RlZC5cbiIKKyAgICApOworICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRGVxdWV1ZSgqbXNnSGlnaFswXSksICJQcmlvcml0eVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDApOworCisgICAgLy8gQ2hhbmdlIHRoZSBwcmlvcml0eSBvZiBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlIGFuZCBjaGVjayB0aGUgb3JkZXIgY2hhbmdlIGluIHRoZSBxdWV1ZS4KKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkVucXVldWUoKm1zZ0xvd1swXSksICJQcmlvcml0eVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDEsIG1zZ0xvd1swXSk7CisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5FbnF1ZXVlKCptc2dNZWRbMF0pLCAiUHJpb3JpdHlRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAyLCBtc2dNZWRbMF0sIG1zZ0xvd1swXSk7CisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5FbnF1ZXVlKCptc2dWZXJ5TG93WzBdKSwgIlByaW9yaXR5UXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMywgbXNnTWVkWzBdLCBtc2dMb3dbMF0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudChtZXNzYWdlUG9vbCwgMywgbXNnTWVkWzBdLCBtc2dMb3dbMF0sIG1zZ1ZlcnlMb3dbMF0pOworCisgICAgU3VjY2Vzc09yUXVpdChtc2dMb3dbMF0tPlNldFByaW9yaXR5KDApLCAiU2V0UHJpb3JpdHkgZmFpbGVkIGZvciBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDMsIG1zZ0xvd1swXSwgbXNnTWVkWzBdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1zZ1ZlcnlMb3dbMF0tPlNldFByaW9yaXR5KDMpLCAiU2V0UHJpb3JpdHkgZmFpbGVkIGZvciBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDMsIG1zZ0xvd1swXSwgbXNnTWVkWzBdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1zZ1ZlcnlMb3dbMF0tPlNldFByaW9yaXR5KDIpLCAiU2V0UHJpb3JpdHkgZmFpbGVkIGZvciBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDMsIG1zZ0xvd1swXSwgbXNnTWVkWzBdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1zZ1ZlcnlMb3dbMF0tPlNldFByaW9yaXR5KDEpLCAiU2V0UHJpb3JpdHkgZmFpbGVkIGZvciBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDMsIG1zZ0xvd1swXSwgbXNnTWVkWzBdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDMsIG1zZ0xvd1swXSwgbXNnTWVkWzBdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1zZ1ZlcnlMb3dbMF0tPlNldFByaW9yaXR5KDApLCAiU2V0UHJpb3JpdHkgZmFpbGVkIGZvciBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDMsIG1zZ0xvd1swXSwgbXNnVmVyeUxvd1swXSwgbXNnTWVkWzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1zZ0xvd1swXS0+U2V0UHJpb3JpdHkoMiksICJTZXRQcmlvcml0eSBmYWlsZWQgZm9yIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UuXG4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1zZ1ZlcnlMb3dbMF0tPlNldFByaW9yaXR5KDMpLCAiU2V0UHJpb3JpdHkgZmFpbGVkIGZvciBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDMsIG1zZ01lZFswXSwgbXNnTG93WzBdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDMsIG1zZ01lZFswXSwgbXNnTG93WzBdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnRJblJldmVyc2UobWVzc2FnZVBvb2wsIDMsIG1zZ1ZlcnlMb3dbMF0sIG1zZ0xvd1swXSwgbXNnTWVkWzBdKTsKKworICAgIC8vIENoZWNraW5nIHRoZSBBbGxNZXNzYWdlcyBxdWV1ZSB3aGVuIGFkZGluZyBtZXNzYWdlcyBmcm9tIHNhbWUgcG9vbCB0byBhbm90aGVyIHF1ZXVlLgorICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkVucXVldWUoKm1zZ0xvd1sxXSksICJNZXNzYWdlUXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDQsIG1zZ01lZFswXSwgbXNnTG93WzBdLCBtc2dMb3dbMV0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkVucXVldWUoKm1zZ01lZFsxXSksICJNZXNzYWdlUXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDUsIG1zZ01lZFswXSwgbXNnTWVkWzFdLCBtc2dMb3dbMF0sIG1zZ0xvd1sxXSwgbXNnVmVyeUxvd1swXSk7CisgICAgVmVyaWZ5QWxsTWVzc2FnZXNDb250ZW50SW5SZXZlcnNlKG1lc3NhZ2VQb29sLCA1LCBtc2dWZXJ5TG93WzBdLCBtc2dMb3dbMV0sIG1zZ0xvd1swXSwgbXNnTWVkWzFdLCBtc2dNZWRbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkVucXVldWUoKm1zZ0hpZ2hbMV0pLCAiTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5QWxsTWVzc2FnZXNDb250ZW50KG1lc3NhZ2VQb29sLCA2LCBtc2dIaWdoWzFdLCBtc2dNZWRbMF0sIG1zZ01lZFsxXSwgbXNnTG93WzBdLCBtc2dMb3dbMV0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFZlcmlmeU1zZ1F1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDMsIG1zZ0xvd1sxXSwgbXNnTWVkWzFdLCBtc2dIaWdoWzFdKTsKKworICAgIC8vIENoYW5nZSBwcmlvcml0eSBvZiBtZXNzYWdlIGFuZCBjaGVjayB0aGF0IG9yZGVyIGNoYW5nZXMgaW4gdGhlIEFsbE1lc3NhZ2UgcXVldWUgYW5kIG5vdCBpbiBtZXNzYWdlUXVldWUuCisgICAgU3VjY2Vzc09yUXVpdChtc2dMb3dbMV0tPlNldFByaW9yaXR5KDApLCAiU2V0UHJpb3JpdHkgZmFpbGVkIGZvciBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlLlxuIik7CisgICAgVmVyaWZ5QWxsTWVzc2FnZXNDb250ZW50KG1lc3NhZ2VQb29sLCA2LCBtc2dIaWdoWzFdLCBtc2dMb3dbMV0sIG1zZ01lZFswXSwgbXNnTWVkWzFdLCBtc2dMb3dbMF0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudEluUmV2ZXJzZShtZXNzYWdlUG9vbCwgNiwgbXNnVmVyeUxvd1swXSwgbXNnTG93WzBdLCBtc2dNZWRbMV0sIG1zZ01lZFswXSwgbXNnTG93WzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dIaWdoWzFdKTsKKyAgICBWZXJpZnlNc2dRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAzLCBtc2dMb3dbMV0sIG1zZ01lZFsxXSwgbXNnSGlnaFsxXSk7CisKKyAgICBTdWNjZXNzT3JRdWl0KG1zZ1ZlcnlMb3dbMF0tPlNldFByaW9yaXR5KDEpLCAiU2V0UHJpb3JpdHkgZmFpbGVkIGZvciBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlLlxuIik7CisgICAgVmVyaWZ5QWxsTWVzc2FnZXNDb250ZW50KG1lc3NhZ2VQb29sLCA2LCBtc2dIaWdoWzFdLCBtc2dMb3dbMV0sIG1zZ01lZFswXSwgbXNnTWVkWzFdLCBtc2dWZXJ5TG93WzBdLCBtc2dMb3dbMF0pOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAzLCBtc2dNZWRbMF0sIG1zZ1ZlcnlMb3dbMF0sIG1zZ0xvd1swXSk7CisgICAgVmVyaWZ5TXNnUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgMywgbXNnTG93WzFdLCBtc2dNZWRbMV0sIG1zZ0hpZ2hbMV0pOworCisgICAgLy8gUmVtb3ZlIG1lc3NhZ2VzIGZyb20gdGhlIHR3byBxdWV1ZXMgYW5kIHZlcmlmeSB0aGF0IEFsbE1lc3NhZ2UgcXVldWUgaXMgdXBkYXRlZCBjb3JyZWN0bHkuCisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5EZXF1ZXVlKCptc2dNZWRbMF0pLCAiUHJpb3JpdHlRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudChtZXNzYWdlUG9vbCwgNSwgbXNnSGlnaFsxXSwgbXNnTG93WzFdLCBtc2dNZWRbMV0sIG1zZ1ZlcnlMb3dbMF0sIG1zZ0xvd1swXSk7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDIsIG1zZ1ZlcnlMb3dbMF0sIG1zZ0xvd1swXSk7CisgICAgVmVyaWZ5TXNnUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgMywgbXNnTG93WzFdLCBtc2dNZWRbMV0sIG1zZ0hpZ2hbMV0pOworCisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRGVxdWV1ZSgqbXNnSGlnaFsxXSksICJNZXNzYWdlUXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDQsIG1zZ0xvd1sxXSwgbXNnTWVkWzFdLCBtc2dWZXJ5TG93WzBdLCBtc2dMb3dbMF0pOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAyLCBtc2dWZXJ5TG93WzBdLCBtc2dMb3dbMF0pOworICAgIFZlcmlmeU1zZ1F1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDIsIG1zZ0xvd1sxXSwgbXNnTWVkWzFdKTsKKworICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkRlcXVldWUoKm1zZ01lZFsxXSksICJNZXNzYWdlUXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDMsIG1zZ0xvd1sxXSwgbXNnVmVyeUxvd1swXSwgbXNnTG93WzBdKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMiwgbXNnVmVyeUxvd1swXSwgbXNnTG93WzBdKTsKKyAgICBWZXJpZnlNc2dRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAxLCBtc2dMb3dbMV0pOworCisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5EZXF1ZXVlKCptc2dWZXJ5TG93WzBdKSwgIlByaW9yaXR5UXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDIsIG1zZ0xvd1sxXSwgbXNnTG93WzBdKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMSwgbXNnTG93WzBdKTsKKyAgICBWZXJpZnlNc2dRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAxLCBtc2dMb3dbMV0pOworCisgICAgdGVzdEZyZWVJbnN0YW5jZShpbnN0YW5jZSk7Cit9CisKKyNpZmRlZiBFTkFCTEVfVEVTVF9NQUlOCitpbnQgbWFpbih2b2lkKQoreworICAgIFRlc3RQcmlvcml0eVF1ZXVlKCk7CisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X3N0cmxjYXQuYyBiL3Rlc3RzL3VuaXQvdGVzdF9zdHJsY2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RhNTU5NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF9zdHJsY2F0LmMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGNoYXIgc3RyaW5nX2FbOF0gPSAiZm9vIjsKKyAgICBjaGFyIHN0cmluZ19iWzhdID0gImJhcmJhciI7CisgICAgc2l6ZV90IHJldCA9IDA7CisgICAgaW50IGVycm9ycyA9IDA7CisKKyAgICAodm9pZClhcmdjOworICAgICh2b2lkKWFyZ3Y7CisKKyAgICByZXQgPSBtaXNzaW5nX3N0cmxjYXQoc3RyaW5nX2EsIHN0cmluZ19iLCBzaXplb2Yoc3RyaW5nX2EpKTsKKworICAgIGlmICgwICE9IHN0cmNtcChzdHJpbmdfYSwgImZvb2JhcmIiKSkKKyAgICB7CisgICAgICAgIHByaW50Zigic3RyY21wIGZhaWxlZFxuIik7CisgICAgICAgIGVycm9ycysrOworICAgIH0KKworICAgIGlmIChyZXQgIT0gOSkKKyAgICB7CisgICAgICAgIHByaW50Zigic3RybGNhdCByZXR1cm4gdmFsdWUgaXMgd3JvbmcgKCVkKVxuIiwgKGludClyZXQpOworICAgICAgICBlcnJvcnMrKzsKKyAgICB9CisKKyAgICBpZiAoZXJyb3JzICE9IDApCisgICAgeworICAgICAgICBwcmludGYoIkZBSUxcbiIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAgIHByaW50ZigiT0tcbiIpOworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3Rfc3RybGNweS5jIGIvdGVzdHMvdW5pdC90ZXN0X3N0cmxjcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTEzYmE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3N0cmxjcHkuYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgY2hhciBzdHJpbmdfYVs4XSA9ICJmb28iOworICAgIGNoYXIgc3RyaW5nX2JbXSA9ICJiYXJiYXJiYXIiOworICAgIHNpemVfdCByZXQgPSAwOworICAgIGludCBlcnJvcnMgPSAwOworCisgICAgKHZvaWQpYXJnYzsKKyAgICAodm9pZClhcmd2OworICAgIHJldCA9IHN0cmxjcHkoc3RyaW5nX2EsIHN0cmluZ19iLCBzaXplb2Yoc3RyaW5nX2EpKTsKKworICAgIGlmICgwICE9IHN0cmNtcChzdHJpbmdfYSwgImJhcmJhcmIiKSkKKyAgICB7CisgICAgICAgIHByaW50Zigic3RyY21wIGZhaWxlZFxuIik7CisgICAgICAgIGVycm9ycysrOworICAgIH0KKworICAgIGlmIChyZXQgIT0gOSkKKyAgICB7CisgICAgICAgIHByaW50Zigic3RybGNweSByZXR1cm4gdmFsdWUgaXMgd3JvbmcgKCVkKVxuIiwgKGludClyZXQpOworICAgICAgICBlcnJvcnMrKzsKKyAgICB9CisKKyAgICBpZiAoZXJyb3JzICE9IDApCisgICAgeworICAgICAgICBwcmludGYoIkZBSUxcbiIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAgIHByaW50ZigiT0tcbiIpOworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3Rfc3Rybmxlbi5jIGIvdGVzdHMvdW5pdC90ZXN0X3N0cm5sZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2JlNjI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3N0cm5sZW4uYwpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworc3RhdGljIHZvaWQgZmFpbChjb25zdCBjaGFyICptc2cpCit7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBjaGFyIHN0cmluZ19hWzVdID0gIlwwZm9vIjsKKyAgICBjaGFyIHN0cmluZ19iWzhdID0gImZvb1wwYmFyIjsKKworICAgICh2b2lkKWFyZ2M7CisgICAgKHZvaWQpYXJndjsKKworICAgIGlmICgwICE9IG1pc3Npbmdfc3RybmxlbihzdHJpbmdfYSwgMCkpCisgICAgeworICAgICAgICBmYWlsKCIwbGVuIDAgZmFpbHMiKTsKKyAgICB9CisKKyAgICBpZiAoMCAhPSBtaXNzaW5nX3N0cm5sZW4oc3RyaW5nX2EsIDEpKQorICAgIHsKKyAgICAgICAgZmFpbCgiMGxlbiAxIGZhaWxzIik7CisgICAgfQorCisgICAgaWYgKDAgIT0gbWlzc2luZ19zdHJubGVuKHN0cmluZ19hLCAyKSkKKyAgICB7CisgICAgICAgIGZhaWwoIjBsZW4gMiBmYWlscyIpOworICAgIH0KKworICAgIGlmICgwICE9IG1pc3Npbmdfc3RybmxlbihzdHJpbmdfYiwgMCkpCisgICAgeworICAgICAgICBmYWlsKCIzbGVuIDAgZmFpbHMiKTsKKyAgICB9CisKKyAgICBpZiAoMSAhPSBtaXNzaW5nX3N0cm5sZW4oc3RyaW5nX2IsIDEpKQorICAgIHsKKyAgICAgICAgZmFpbCgiM2xlbiAxIGZhaWxzIik7CisgICAgfQorCisgICAgaWYgKDIgIT0gbWlzc2luZ19zdHJubGVuKHN0cmluZ19iLCAyKSkKKyAgICB7CisgICAgICAgIGZhaWwoIjNsZW4gMiBmYWlscyIpOworICAgIH0KKworICAgIGlmICgzICE9IG1pc3Npbmdfc3RybmxlbihzdHJpbmdfYiwgMykpCisgICAgeworICAgICAgICBmYWlsKCIzbGVuIDMgZmFpbHMiKTsKKyAgICB9CisKKyAgICBpZiAoMyAhPSBtaXNzaW5nX3N0cm5sZW4oc3RyaW5nX2IsIDQpKQorICAgIHsKKyAgICAgICAgZmFpbCgiM2xlbiA0IGZhaWxzIik7CisgICAgfQorCisgICAgaWYgKDMgIT0gbWlzc2luZ19zdHJubGVuKHN0cmluZ19iLCA1KSkKKyAgICB7CisgICAgICAgIGZhaWwoIjNsZW4gNSBmYWlscyIpOworICAgIH0KKworICAgIGlmICgzICE9IG1pc3Npbmdfc3RybmxlbihzdHJpbmdfYiwgNikpCisgICAgeworICAgICAgICBmYWlsKCIzbGVuIDYgZmFpbHMiKTsKKyAgICB9CisKKyAgICBwcmludGYoIk9LXG4iKTsKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X3RpbWVyLmNwcCBiL3Rlc3RzL3VuaXQvdGVzdF90aW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjNDE1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF90aW1lci5jcHAKQEAgLTAsMCArMSw2NjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJ0ZXN0X3BsYXRmb3JtLmgiCisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorCitlbnVtCit7CisgICAga0NhbGxDb3VudEluZGV4QWxhcm1TdG9wID0gMCwKKyAgICBrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0LAorICAgIGtDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlciwKKworICAgIGtDYWxsQ291bnRJbmRleE1heAorfTsKKwordWludDMyX3Qgc05vdzsKK3VpbnQzMl90IHNQbGF0VDA7Cit1aW50MzJfdCBzUGxhdER0OworYm9vbCAgICAgc1RpbWVyT247Cit1aW50MzJfdCBzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleE1heF07CisKK3ZvaWQgdGVzdFRpbWVyQWxhcm1TdG9wKG90SW5zdGFuY2UgKikKK3sKKyAgICBzVGltZXJPbiA9IGZhbHNlOworICAgIHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSsrOworfQorCit2b2lkIHRlc3RUaW1lckFsYXJtU3RhcnRBdChvdEluc3RhbmNlICosIHVpbnQzMl90IGFUMCwgdWludDMyX3QgYUR0KQoreworICAgIHNUaW1lck9uID0gdHJ1ZTsKKyAgICBzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdKys7CisgICAgc1BsYXRUMCA9IGFUMDsKKyAgICBzUGxhdER0ID0gYUR0OworfQorCit1aW50MzJfdCB0ZXN0VGltZXJBbGFybUdldE5vdyh2b2lkKQoreworICAgIHJldHVybiBzTm93OworfQorCit2b2lkIEluaXRUZXN0VGltZXIodm9pZCkKK3sKKyAgICBnX3Rlc3RQbGF0QWxhcm1TdG9wID0gdGVzdFRpbWVyQWxhcm1TdG9wOworICAgIGdfdGVzdFBsYXRBbGFybVN0YXJ0QXQgPSB0ZXN0VGltZXJBbGFybVN0YXJ0QXQ7CisgICAgZ190ZXN0UGxhdEFsYXJtR2V0Tm93ID0gdGVzdFRpbWVyQWxhcm1HZXROb3c7Cit9CisKK3ZvaWQgSW5pdENvdW50ZXJzKHZvaWQpCit7CisgICAgbWVtc2V0KHNDYWxsQ291bnQsIDAsIHNpemVvZihzQ2FsbENvdW50KSk7Cit9CisKKy8qKgorICogYFRlc3RUaW1lcmAgc3ViLWNsYXNzZXMgYG90OjpUaW1lcmAgYW5kIHByb3ZpZGVzIGEgaGFuZGxlciBhbmQgYSBjb3VudGVyIHRvIGtlZXAgdHJhY2sgb2YgbnVtYmVyIG9mIHRpbWVzIHRpbWVyIGdldHMKKyAqIGZpcmVkLgorICovCitjbGFzcyBUZXN0VGltZXI6IHB1YmxpYyBvdDo6VGltZXIKK3sKK3B1YmxpYzoKKyAgICBUZXN0VGltZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKToKKyAgICAgICAgb3Q6OlRpbWVyKGFJbnN0YW5jZS0+bUlwNi5tVGltZXJTY2hlZHVsZXIsIFRlc3RUaW1lcjo6SGFuZGxlVGltZXJGaXJlZCwgTlVMTCksCisgICAgICAgIG1GaXJlZENvdW50ZXIoMCkKKyAgICB7IH0KKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyRmlyZWQob3Q6OlRpbWVyICZhVGltZXIpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8VGVzdFRpbWVyICY+KGFUaW1lcikuSGFuZGxlVGltZXJGaXJlZCgpOworICAgIH0KKworICAgIHZvaWQgSGFuZGxlVGltZXJGaXJlZCh2b2lkKSB7CisgICAgICAgIHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSsrOworICAgICAgICBtRmlyZWRDb3VudGVyKys7CisgICAgfQorCisgICAgdWludDMyX3QgR2V0RmlyZWRDb3VudGVyKHZvaWQpIHsgcmV0dXJuIG1GaXJlZENvdW50ZXI7IH0KKworICAgIHZvaWQgUmVzZXRGaXJlZENvdW50ZXIodm9pZCkgeyBtRmlyZWRDb3VudGVyID0gMDsgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1GaXJlZENvdW50ZXI7ICAvLzwgTnVtYmVyIG9mIHRpbWVzIHRpbWVyIGhhcyBiZWVuIGZpcmVkIHNvIGZhcgorfTsKKworLyoqCisgKiBUZXN0IHRoZSBUaW1lclNjaGVkdWxlcidzIGJlaGF2aW9yIG9mIG9uZSB0aW1lciBzdGFydGVkIGFuZCBmaXJlZC4KKyAqLworaW50IFRlc3RPbmVUaW1lcih2b2lkKQoreworICAgIGNvbnN0IHVpbnQzMl90IGtUaW1lVDAgPSAxMDAwOworICAgIGNvbnN0IHVpbnQzMl90IGtUaW1lckludGVydmFsID0gMTA7CisgICAgb3RJbnN0YW5jZSAqaW5zdGFuY2UgPSB0ZXN0SW5pdEluc3RhbmNlKCk7CisgICAgVGVzdFRpbWVyIHRpbWVyKGluc3RhbmNlKTsKKworICAgIC8vIFRlc3Qgb25lIFRpbWVyIGJhc2ljIG9wZXJhdGlvbi4KKworICAgIEluaXRUZXN0VGltZXIoKTsKKyAgICBJbml0Q291bnRlcnMoKTsKKworICAgIHByaW50ZigiVGVzdE9uZVRpbWVyKCkgIik7CisKKyAgICBzTm93ID0ga1RpbWVUMDsKKyAgICB0aW1lci5TdGFydChrVGltZXJJbnRlcnZhbCk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAxLCAiVGVzdE9uZVRpbWVyOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMCwgIlRlc3RPbmVUaW1lcjogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMCwgIlRlc3RPbmVUaW1lcjogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNQbGF0VDAgPT0gMTAwMCAmJiBzUGxhdER0ID09IDEwLCAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogU3RhcnQgcGFyYW1zIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lci5Jc1J1bm5pbmcoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0T25lVGltZXI6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBzTm93ICs9IGtUaW1lckludGVydmFsOworCisgICAgb3RQbGF0QWxhcm1GaXJlZChpbnN0YW5jZSk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAxLCAiVGVzdE9uZVRpbWVyOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMSwgIlRlc3RPbmVUaW1lcjogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMSwgIlRlc3RPbmVUaW1lcjogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24gPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIC8vIFRlc3Qgb25lIFRpbWVyIHRoYXQgc3BhbnMgdGhlIDMyLWJpdCB3cmFwLgorCisgICAgSW5pdENvdW50ZXJzKCk7CisKKyAgICBzTm93ID0gMCAtIChrVGltZXJJbnRlcnZhbCAtIDIpOworICAgIHRpbWVyLlN0YXJ0KGtUaW1lckludGVydmFsKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDEsICAgICAgICAiVGVzdE9uZVRpbWVyOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMCwgICAgICAgICJUZXN0T25lVGltZXI6IFN0b3AgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IDAsICAgICAgICAiVGVzdE9uZVRpbWVyOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXRUMCA9PSAwIC0gKGtUaW1lckludGVydmFsIC0gMikgJiYgc1BsYXREdCA9PSAxMCwgIlRlc3RPbmVUaW1lcjogU3RhcnQgcGFyYW1zIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lci5Jc1J1bm5pbmcoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIHNOb3cgKz0ga1RpbWVySW50ZXJ2YWw7CisKKyAgICBvdFBsYXRBbGFybUZpcmVkKGluc3RhbmNlKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDEsICJUZXN0T25lVGltZXI6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAxLCAiVGVzdE9uZVRpbWVyOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAxLCAiVGVzdE9uZVRpbWVyOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIuSXNSdW5uaW5nKCkgPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0T25lVGltZXI6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgLy8gVGVzdCBvbmUgVGltZXIgdGhhdCBpcyBsYXRlIGJ5IHNldmVyYWwgbXNlYworCisgICAgSW5pdENvdW50ZXJzKCk7CisKKyAgICBzTm93ID0ga1RpbWVUMDsKKyAgICB0aW1lci5TdGFydChrVGltZXJJbnRlcnZhbCk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAxLCAiVGVzdE9uZVRpbWVyOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMCwgIlRlc3RPbmVUaW1lcjogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMCwgIlRlc3RPbmVUaW1lcjogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNQbGF0VDAgPT0gMTAwMCAmJiBzUGxhdER0ID09IDEwLCAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogU3RhcnQgcGFyYW1zIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lci5Jc1J1bm5pbmcoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0T25lVGltZXI6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBzTm93ICs9IGtUaW1lckludGVydmFsICsgNTsKKworICAgIG90UGxhdEFsYXJtRmlyZWQoaW5zdGFuY2UpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMSwgIlRlc3RPbmVUaW1lcjogU3RhcnQgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IDEsICJUZXN0T25lVGltZXI6IFN0b3AgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IDEsICJUZXN0T25lVGltZXI6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lci5Jc1J1bm5pbmcoKSA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICJUZXN0T25lVGltZXI6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICAvLyBUZXN0IG9uZSBUaW1lciB0aGF0IGlzIGVhcmx5IGJ5IHNldmVyYWwgbXNlYworCisgICAgSW5pdENvdW50ZXJzKCk7CisKKyAgICBzTm93ID0ga1RpbWVUMDsKKyAgICB0aW1lci5TdGFydChrVGltZXJJbnRlcnZhbCk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAxLCAiVGVzdE9uZVRpbWVyOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMCwgIlRlc3RPbmVUaW1lcjogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMCwgIlRlc3RPbmVUaW1lcjogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNQbGF0VDAgPT0gMTAwMCAmJiBzUGxhdER0ID09IDEwLCAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogU3RhcnQgcGFyYW1zIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lci5Jc1J1bm5pbmcoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0T25lVGltZXI6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBzTm93ICs9IGtUaW1lckludGVydmFsIC0gMjsKKworICAgIG90UGxhdEFsYXJtRmlyZWQoaW5zdGFuY2UpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMiwgIlRlc3RPbmVUaW1lcjogU3RhcnQgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IDAsICJUZXN0T25lVGltZXI6IFN0b3AgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IDAsICJUZXN0T25lVGltZXI6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lci5Jc1J1bm5pbmcoKSA9PSB0cnVlLCAgICAgICAgICAgICAgICAgICAgICJUZXN0T25lVGltZXI6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uID09IHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBzTm93ICs9IGtUaW1lckludGVydmFsOworCisgICAgb3RQbGF0QWxhcm1GaXJlZChpbnN0YW5jZSk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAyLCAiVGVzdE9uZVRpbWVyOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMSwgIlRlc3RPbmVUaW1lcjogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMSwgIlRlc3RPbmVUaW1lcjogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24gPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIHByaW50ZigiIC0tPiBQQVNTRURcbiIpOworCisgICAgdGVzdEZyZWVJbnN0YW5jZShpbnN0YW5jZSk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoqCisgKiBUZXN0IHRoZSBUaW1lclNjaGVkdWxlcidzIGJlaGF2aW9yIG9mIHR3byB0aW1lcnMgc3RhcnRlZCBhbmQgZmlyZWQuCisgKi8KK2ludCBUZXN0VHdvVGltZXJzKHZvaWQpCit7CisgICAgY29uc3QgdWludDMyX3Qga1RpbWVUMCA9IDEwMDA7CisgICAgY29uc3QgdWludDMyX3Qga1RpbWVySW50ZXJ2YWwgPSAxMDsKKyAgICBvdEluc3RhbmNlICppbnN0YW5jZSA9IHRlc3RJbml0SW5zdGFuY2UoKTsKKyAgICBUZXN0VGltZXIgdGltZXIxKGluc3RhbmNlKTsKKyAgICBUZXN0VGltZXIgdGltZXIyKGluc3RhbmNlKTsKKworICAgIEluaXRUZXN0VGltZXIoKTsKKyAgICBwcmludGYoIlRlc3RUd29UaW1lcnMoKSAiKTsKKworICAgIC8vIFRlc3Qgd2hlbiBzZWNvbmQgdGltZXIgc3RhcnMgYXQgdGhlIGZpcmUgdGltZSBvZiBmaXJzdCB0aW1lciAoYmVmb3JlIGFsYXJtIGNhbGxiYWNrKS4KKworICAgIEluaXRDb3VudGVycygpOworCisgICAgc05vdyA9IGtUaW1lVDA7CisgICAgdGltZXIxLlN0YXJ0KGtUaW1lckludGVydmFsKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDEsICAgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAgICJUZXN0VHdvVGltZXJzOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAwLCAgICJUZXN0VHdvVGltZXJzOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXRUMCA9PSBrVGltZVQwICYmIHNQbGF0RHQgPT0ga1RpbWVySW50ZXJ2YWwsICJUZXN0VHdvVGltZXJzOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMS5Jc1J1bm5pbmcoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgc05vdyArPSBrVGltZXJJbnRlcnZhbDsKKworICAgIHRpbWVyMi5TdGFydChrVGltZXJJbnRlcnZhbCk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAxLCAgICJUZXN0VHdvVGltZXJzOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMCwgICAiVGVzdFR3b1RpbWVyczogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMCwgICAiVGVzdFR3b1RpbWVyczogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNQbGF0VDAgPT0ga1RpbWVUMCAmJiBzUGxhdER0ID09IGtUaW1lckludGVydmFsLCAiVGVzdFR3b1RpbWVyczogU3RhcnQgcGFyYW1zIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjEuSXNSdW5uaW5nKCkgPT0gdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMi5Jc1J1bm5pbmcoKSA9PSB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIG90UGxhdEFsYXJtRmlyZWQoaW5zdGFuY2UpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMiwgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAiVGVzdFR3b1RpbWVyczogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMSwgIlRlc3RUd29UaW1lcnM6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjEuR2V0RmlyZWRDb3VudGVyKCkgPT0gMSwgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBGaXJlIENvdW50ZXIgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNQbGF0VDAgPT0gc05vdyAmJiBzUGxhdER0ID09IGtUaW1lckludGVydmFsLCAgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IHBhcmFtcyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIxLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLklzUnVubmluZygpID09IHRydWUsICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24gPT0gdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBzTm93ICs9IGtUaW1lckludGVydmFsOworICAgIG90UGxhdEFsYXJtRmlyZWQoaW5zdGFuY2UpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMiwgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAxLCAiVGVzdFR3b1RpbWVyczogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMiwgIlRlc3RUd29UaW1lcnM6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjIuR2V0RmlyZWRDb3VudGVyKCkgPT0gMSwgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBGaXJlIENvdW50ZXIgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMS5Jc1J1bm5pbmcoKSA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMi5Jc1J1bm5pbmcoKSA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgLy8gVGVzdCB3aGVuIHNlY29uZCB0aW1lciBzdGFydHMgYXQgdGhlIGZpcmUgdGltZSBvZiBmaXJzdCB0aW1lciAoYmVmb3JlIG90UGxhdEFsYXJtRmlyZWQoKSkgYW5kIGl0cyBmaXJlIHRpbWUKKyAgICAvLyBpcyBiZWZvcmUgdGhlIGZpcnN0IHRpbWVyLiBFbnN1cmUgdGhhdCB0aGUgc2Vjb25kIHRpbWVyIGhhbmRsZXIgaXMgaW52b2tlZCBiZWZvcmUgdGhlIGZpcnN0IG9uZS4KKworICAgIEluaXRDb3VudGVycygpOworICAgIHRpbWVyMS5SZXNldEZpcmVkQ291bnRlcigpOworICAgIHRpbWVyMi5SZXNldEZpcmVkQ291bnRlcigpOworCisgICAgc05vdyA9IGtUaW1lVDA7CisgICAgdGltZXIxLlN0YXJ0KGtUaW1lckludGVydmFsKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDEsICAgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAgICJUZXN0VHdvVGltZXJzOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAwLCAgICJUZXN0VHdvVGltZXJzOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXRUMCA9PSBrVGltZVQwICYmIHNQbGF0RHQgPT0ga1RpbWVySW50ZXJ2YWwsICJUZXN0VHdvVGltZXJzOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMS5Jc1J1bm5pbmcoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgc05vdyArPSBrVGltZXJJbnRlcnZhbDsKKworICAgIHRpbWVyMi5TdGFydEF0KGtUaW1lVDAsIGtUaW1lckludGVydmFsIC0gMik7ICAvLyBUaW1lciAyIGlzIGV2ZW4gYmVmb3JlIHRpbWVyIDEKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IDAsICAgIlRlc3RUd29UaW1lcnM6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjEuSXNSdW5uaW5nKCkgPT0gdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMi5Jc1J1bm5pbmcoKSA9PSB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIG90UGxhdEFsYXJtRmlyZWQoaW5zdGFuY2UpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMCwgIlRlc3RUd29UaW1lcnM6IFN0b3AgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IDEsICJUZXN0VHdvVGltZXJzOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLkdldEZpcmVkQ291bnRlcigpID09IDEsICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogRmlyZSBDb3VudGVyIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzUGxhdFQwID09IHNOb3cgJiYgc1BsYXREdCA9PSAwLCAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMS5Jc1J1bm5pbmcoKSA9PSB0cnVlLCAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMi5Jc1J1bm5pbmcoKSA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uID09IHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgb3RQbGF0QWxhcm1GaXJlZChpbnN0YW5jZSk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAxLCAiVGVzdFR3b1RpbWVyczogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMiwgIlRlc3RUd29UaW1lcnM6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjEuR2V0RmlyZWRDb3VudGVyKCkgPT0gMSwgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBGaXJlIENvdW50ZXIgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMS5Jc1J1bm5pbmcoKSA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMi5Jc1J1bm5pbmcoKSA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgLy8gVGltZXIgMSBmaXJlIGNhbGxiYWNrIGlzIGxhdGUgYnkgc29tZSB0aWNrcy9tcywgYW5kIHNlY29uZCB0aW1lciBpcyBzY2hlZHVsZWQgKGJlZm9yZSBjYWxsIHRvIG90UGxhdEFsYXJtRmlyZWQpCisgICAgLy8gd2l0aCBhIG1heGltdW0gaW50ZXJ2YWwuIFRoaXMgaXMgdG8gdGVzdCAoY29ybmVyLWNhc2UpIHNjZW5hcmlvIHdoZXJlIHRoZSBmaXJlIHRpbWUgb2YgdHdvIHRpbWVycyBzcGFubmluZyBvdmVyCisgICAgLy8gdGhlIG1heGltdW0gaW50ZXJ2YWwuCisKKyAgICBJbml0Q291bnRlcnMoKTsKKyAgICB0aW1lcjEuUmVzZXRGaXJlZENvdW50ZXIoKTsKKyAgICB0aW1lcjIuUmVzZXRGaXJlZENvdW50ZXIoKTsKKworICAgIHNOb3cgPSBrVGltZVQwOworICAgIHRpbWVyMS5TdGFydChrVGltZXJJbnRlcnZhbCk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAxLCAgICJUZXN0VHdvVGltZXJzOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMCwgICAiVGVzdFR3b1RpbWVyczogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMCwgICAiVGVzdFR3b1RpbWVyczogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNQbGF0VDAgPT0ga1RpbWVUMCAmJiBzUGxhdER0ID09IGtUaW1lckludGVydmFsLCAiVGVzdFR3b1RpbWVyczogU3RhcnQgcGFyYW1zIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjEuSXNSdW5uaW5nKCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMi5Jc1J1bm5pbmcoKSA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIHNOb3cgKz0ga1RpbWVySW50ZXJ2YWwgKyA1OworCisgICAgdGltZXIyLlN0YXJ0KG90OjpUaW1lcjo6a01heER0KTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDEsICAgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAgICJUZXN0VHdvVGltZXJzOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAwLCAgICJUZXN0VHdvVGltZXJzOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIxLklzUnVubmluZygpID09IHRydWUsICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjIuSXNSdW5uaW5nKCkgPT0gdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBvdFBsYXRBbGFybUZpcmVkKGluc3RhbmNlKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDIsICJUZXN0VHdvVGltZXJzOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMCwgIlRlc3RUd29UaW1lcnM6IFN0b3AgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IDEsICJUZXN0VHdvVGltZXJzOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIxLkdldEZpcmVkQ291bnRlcigpID09IDEsICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogRmlyZSBDb3VudGVyIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzUGxhdFQwID09IHNOb3csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNQbGF0RHQgPT0gb3Q6OlRpbWVyOjprTWF4RHQsICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IHBhcmFtcyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIxLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLklzUnVubmluZygpID09IHRydWUsICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24gPT0gdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBzTm93ICs9IG90OjpUaW1lcjo6a01heER0OworICAgIG90UGxhdEFsYXJtRmlyZWQoaW5zdGFuY2UpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMiwgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAxLCAiVGVzdFR3b1RpbWVyczogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMiwgIlRlc3RUd29UaW1lcnM6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjIuR2V0RmlyZWRDb3VudGVyKCkgPT0gMSwgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBGaXJlIENvdW50ZXIgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMS5Jc1J1bm5pbmcoKSA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMi5Jc1J1bm5pbmcoKSA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgcHJpbnRmKCIgLS0+IFBBU1NFRFxuIik7CisKKyAgICB0ZXN0RnJlZUluc3RhbmNlKGluc3RhbmNlKTsKKworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIFRlc3QgdGhlIFRpbWVyU2NoZWR1bGVyJ3MgYmVoYXZpb3Igb2YgdGVuIHRpbWVycyBzdGFydGVkIGFuZCBmaXJlZC4KKyAqCisgKiBgYVRpbWVTaGlmdGAgaXMgYWRkZWQgdG8gdGhlIHQwIGFuZCB0cmlnZ2VyIHRpbWVzIGZvciBhbGwgdGltZXJzLiBJdCBjYW4gYmUgdXNlZCB0byBjaGVjayB0aGUgdGVuIHRpbWVyIGJlaGF2aW9yCisgKiBhdCBkaWZmZXJlbnQgc3RhcnQgdGltZSAoZS5nLiwgYXJvdW5kIGEgMzItYml0IHdyYXApLgorICovCitzdGF0aWMgdm9pZCBUZW5UaW1lcnModWludDMyX3QgYVRpbWVTaGlmdCkKK3sKKyAgICBjb25zdCB1aW50MzJfdCBrTnVtVGltZXJzID0gMTA7CisgICAgY29uc3QgdWludDMyX3Qga051bVRyaWdnZXJzID0gNzsKKyAgICBjb25zdCB1aW50MzJfdCBrVGltZVQwW2tOdW1UaW1lcnNdID0KKyAgICB7CisgICAgICAgIDEwMDAsCisgICAgICAgIDEwMDAsCisgICAgICAgIDEwMDEsCisgICAgICAgIDEwMDIsCisgICAgICAgIDEwMDMsCisgICAgICAgIDEwMDQsCisgICAgICAgIDEwMDUsCisgICAgICAgIDEwMDYsCisgICAgICAgIDEwMDcsCisgICAgICAgIDEwMDgKKyAgICB9OworICAgIGNvbnN0IHVpbnQzMl90IGtUaW1lckludGVydmFsW2tOdW1UaW1lcnNdID0KKyAgICB7CisgICAgICAgIDIwLAorICAgICAgICAxMDAsCisgICAgICAgIChvdDo6VGltZXI6OmtNYXhEdCAtIGtUaW1lVDBbMl0pLAorICAgICAgICAxMDAwMDAsCisgICAgICAgIDEwMDAwMDAsCisgICAgICAgIDEwLAorICAgICAgICBvdDo6VGltZXI6OmtNYXhEdCwKKyAgICAgICAgMjAwLAorICAgICAgICAyMDAsCisgICAgICAgIDIwMAorICAgIH07CisgICAgLy8gRXhwZWN0ZWQgdGltZXIgZmlyZSBvcmRlcgorICAgIC8vIHRpbWVyICMgICAgIFRyaWdnZXIgdGltZQorICAgIC8vICAgNSAgICAgICAgICAgIDEwMTQKKyAgICAvLyAgIDAgICAgICAgICAgICAxMDIwCisgICAgLy8gICAxICAgICAgICAgICAgMTEwMAorICAgIC8vICAgNyAgICAgICAgICAgIDEyMDYKKyAgICAvLyAgIDggICAgICAgICAgICAxMjA3CisgICAgLy8gICA5ICAgICAgICAgICAgMTIwOAorICAgIC8vICAgMyAgICAgICAgICAxMDEwMDIKKyAgICAvLyAgIDQgICAgICAgICAxMDAxMDAzCisgICAgLy8gICAyICAgICAgICAgIGtNYXhEdAorICAgIC8vICAgNiAgIGtNYXhEdCArIDEwMDUKKyAgICBjb25zdCB1aW50MzJfdCBrVHJpZ2dlclRpbWVzW2tOdW1UcmlnZ2Vyc10gPQorICAgIHsKKyAgICAgICAgMTAxNCwKKyAgICAgICAgMTAyMCwKKyAgICAgICAgMTEwMCwKKyAgICAgICAgMTIwNywKKyAgICAgICAgMTAxMDA0LAorICAgICAgICBvdDo6VGltZXI6OmtNYXhEdCwKKyAgICAgICAgb3Q6OlRpbWVyOjprTWF4RHQgKyBrVGltZVQwWzZdCisgICAgfTsKKyAgICAvLyBFeHBlY3RlZCB0aW1lcnMgZmlyZWQgYnkgZWFjaCBrVHJpZ2dlclRpbWVzW10gdmFsdWUKKyAgICAvLyAgVHJpZ2dlciAjICAgIFRpbWVycyBGaXJlZAorICAgIC8vICAgIDAgICAgICAgICAgICAgNQorICAgIC8vICAgIDEgICAgICAgICAgICAgMAorICAgIC8vICAgIDIgICAgICAgICAgICAgMQorICAgIC8vICAgIDMgICAgICAgICAgICAgNywgOAorICAgIC8vICAgIDQgICAgICAgICAgICAgOSwgMworICAgIC8vICAgIDUgICAgICAgICAgICAgNCwgMgorICAgIC8vICAgIDYgICAgICAgICAgICAgNgorICAgIGNvbnN0IGJvb2wga1RpbWVyU3RhdGVBZnRlclRyaWdnZXIgW2tOdW1UcmlnZ2Vyc11ba051bVRpbWVyc10gPQorICAgIHsKKyAgICAgICAgeyAgdHJ1ZSwgIHRydWUsICB0cnVlLCAgdHJ1ZSwgIHRydWUsIGZhbHNlLCB0cnVlLCAgIHRydWUsICB0cnVlLCAgdHJ1ZX0sICAvLyA1CisgICAgICAgIHsgZmFsc2UsICB0cnVlLCAgdHJ1ZSwgIHRydWUsICB0cnVlLCBmYWxzZSwgdHJ1ZSwgICB0cnVlLCAgdHJ1ZSwgIHRydWV9LCAgLy8gMAorICAgICAgICB7IGZhbHNlLCBmYWxzZSwgIHRydWUsICB0cnVlLCAgdHJ1ZSwgZmFsc2UsIHRydWUsICAgdHJ1ZSwgIHRydWUsICB0cnVlfSwgIC8vIDEKKyAgICAgICAgeyBmYWxzZSwgZmFsc2UsICB0cnVlLCAgdHJ1ZSwgIHRydWUsIGZhbHNlLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCAgdHJ1ZX0sICAvLyA3LCA4CisgICAgICAgIHsgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICB0cnVlLCBmYWxzZSwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2V9LCAgLy8gOSwgMworICAgICAgICB7IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlfSwgIC8vIDQsIDIKKyAgICAgICAgeyBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX0gICAvLyA2CisgICAgfTsKKworICAgIGNvbnN0IGJvb2wga1NjaGVkdWxlclN0YXRlQWZ0ZXJUcmlnZ2VyW2tOdW1UcmlnZ2Vyc10gPQorICAgIHsKKyAgICAgICAgdHJ1ZSwKKyAgICAgICAgdHJ1ZSwKKyAgICAgICAgdHJ1ZSwKKyAgICAgICAgdHJ1ZSwKKyAgICAgICAgdHJ1ZSwKKyAgICAgICAgdHJ1ZSwKKyAgICAgICAgZmFsc2UKKyAgICB9OworCisgICAgY29uc3QgdWludDMyX3Qga1RpbWVySGFuZGxlckNvdW50QWZ0ZXJUcmlnZ2VyW2tOdW1UcmlnZ2Vyc10gPQorICAgIHsKKyAgICAgICAgMSwKKyAgICAgICAgMiwKKyAgICAgICAgMywKKyAgICAgICAgNSwKKyAgICAgICAgNywKKyAgICAgICAgOSwKKyAgICAgICAgMTAKKyAgICB9OworCisgICAgY29uc3QgdWludDMyX3Qga1RpbWVyU3RvcENvdW50QWZ0ZXJUcmlnZ2VyW2tOdW1UcmlnZ2Vyc10gPQorICAgIHsKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMQorICAgIH07CisKKyAgICBjb25zdCB1aW50MzJfdCBrVGltZXJTdGFydENvdW50QWZ0ZXJUcmlnZ2VyW2tOdW1UcmlnZ2Vyc10gPQorICAgIHsKKyAgICAgICAgMywKKyAgICAgICAgNCwKKyAgICAgICAgNSwKKyAgICAgICAgNywKKyAgICAgICAgOSwKKyAgICAgICAgMTEsCisgICAgICAgIDExCisgICAgfTsKKworICAgIG90SW5zdGFuY2UgKmluc3RhbmNlID0gdGVzdEluaXRJbnN0YW5jZSgpOworCisgICAgVGVzdFRpbWVyIHRpbWVyMChpbnN0YW5jZSk7CisgICAgVGVzdFRpbWVyIHRpbWVyMShpbnN0YW5jZSk7CisgICAgVGVzdFRpbWVyIHRpbWVyMihpbnN0YW5jZSk7CisgICAgVGVzdFRpbWVyIHRpbWVyMyhpbnN0YW5jZSk7CisgICAgVGVzdFRpbWVyIHRpbWVyNChpbnN0YW5jZSk7CisgICAgVGVzdFRpbWVyIHRpbWVyNShpbnN0YW5jZSk7CisgICAgVGVzdFRpbWVyIHRpbWVyNihpbnN0YW5jZSk7CisgICAgVGVzdFRpbWVyIHRpbWVyNyhpbnN0YW5jZSk7CisgICAgVGVzdFRpbWVyIHRpbWVyOChpbnN0YW5jZSk7CisgICAgVGVzdFRpbWVyIHRpbWVyOShpbnN0YW5jZSk7CisgICAgVGVzdFRpbWVyICp0aW1lcnNba051bVRpbWVyc10gPQorICAgIHsKKyAgICAgICAgJnRpbWVyMCwKKyAgICAgICAgJnRpbWVyMSwKKyAgICAgICAgJnRpbWVyMiwKKyAgICAgICAgJnRpbWVyMywKKyAgICAgICAgJnRpbWVyNCwKKyAgICAgICAgJnRpbWVyNSwKKyAgICAgICAgJnRpbWVyNiwKKyAgICAgICAgJnRpbWVyNywKKyAgICAgICAgJnRpbWVyOCwKKyAgICAgICAgJnRpbWVyOQorICAgIH07CisgICAgc2l6ZV90IGk7CisKKyAgICBwcmludGYoIlRlc3RUZW5UaW1lcigpIHdpdGggYVRpbWVTaGlmdD0lLTEwdSAiLCBhVGltZVNoaWZ0KTsKKworICAgIC8vIFN0YXJ0IHRoZSBUZW4gdGltZXJzLgorCisgICAgSW5pdFRlc3RUaW1lcigpOworICAgIEluaXRDb3VudGVycygpOworCisgICAgZm9yIChpID0gMDsgaSA8IGtOdW1UaW1lcnMgOyBpKyspCisgICAgeworICAgICAgICBzTm93ID0ga1RpbWVUMFtpXSArIGFUaW1lU2hpZnQ7CisgICAgICAgIHRpbWVyc1tpXS0+U3RhcnQoa1RpbWVySW50ZXJ2YWxbaV0pOworICAgIH0KKworICAgIC8vIGdpdmVuIHRoZSBvcmRlciBpbiB3aGljaCB0aW1lcnMgYXJlIHN0YXJ0ZWQsIHRoZSBUaW1lclNjaGVkdWxlciBzaG91bGQgY2FsbCBvdFBsYXRBbGFybVN0YXJ0QXQgMiB0aW1lcy4KKyAgICAvLyBvbmUgZm9yIHRpbWVyWzBdIGFuZCBvbmUgZm9yIHRpbWVyWzVdIHdoaWNoIHdpbGwgc3VwZXJjZWRlIHRpbWVyWzBdLgorICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDIsICJUZXN0VGVuVGltZXI6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAiVGVzdFRlblRpbWVyOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAwLCAiVGVzdFRlblRpbWVyOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXRUMCA9PSBrVGltZVQwWzVdICsgYVRpbWVTaGlmdCwgICAgICAgICAgICAiVGVzdFRlblRpbWVyOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNQbGF0RHQgPT0ga1RpbWVySW50ZXJ2YWxbNV0sICAgICAgICAgICAgICAgICAgIlRlc3RUZW5UaW1lcjogU3RhcnQgcGFyYW1zIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0VGVuVGltZXI6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgZm9yIChpID0gMCA7IGkgPCBrTnVtVGltZXJzIDsgaSsrKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KHRpbWVyc1tpXS0+SXNSdW5uaW5nKCksICJUZXN0VGVuVGltZXI6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgfQorCisgICAgLy8gSXNzdWUgdGhlIHRyaWdnZXJzIGFuZCB0ZXN0IHRoZSBTdGF0ZSBhZnRlciBlYWNoIHRyaWdnZXIuCisKKyAgICBmb3IgKHNpemVfdCB0cmlnZ2VyID0gMCA7IHRyaWdnZXIgPCBrTnVtVHJpZ2dlcnMgOyB0cmlnZ2VyKyspCisgICAgeworICAgICAgICBzTm93ID0ga1RyaWdnZXJUaW1lc1t0cmlnZ2VyXSArIGFUaW1lU2hpZnQ7CisKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgLy8gQnkgZGVzaWduLCBlYWNoIGNhbGwgdG8gb3RQbGF0QWxhcm1GaXJlZCgpIGNhbiByZXN1bHQgaW4gMCBvciAxIGNhbGxzIHRvIGEgdGltZXIgaGFuZGxlci4KKyAgICAgICAgICAgIC8vIEZvciBzb21lIGNvbWJpbmF0aW9ucyBvZiBzTm93IGFuZCBUaW1lcnMgcXVldWVkLCBpdCBpcyBuZWNlc3NhcnkgdG8gY2FsbCBvdFBsYXRBbGFybUZpcmVkKCkKKyAgICAgICAgICAgIC8vIG11bHRpcGxlIHRpbWVzIGluIG9yZGVyIHRvIGhhbmRsZSBhbGwgdGhlIGV4cGlyZWQgdGltZXJzLiAgSXQgY2FuIGJlIGRldGVybWluZWQgdGhhdCBhbm90aGVyCisgICAgICAgICAgICAvLyB0aW1lciBpcyByZWFkeSB0byBiZSB0cmlnZ2VyZWQgYnkgZXhhbWluaW5nIHRoZSBhRHQgYXJnIHBhc3NlZCBpbnRvIG90UGxhdEFsYXJtU3RhcnRBdCgpLiAgSWYKKyAgICAgICAgICAgIC8vIHRoYXQgdmFsdWUgaXMgMCwgdGhlbiBvdFBsYXRBbGFybUZpcmVkIHNob3VsZCBiZSBmaXJlZCBpbW1lZGlhdGVseS4gVGhpcyBsb29wIGNhbGxzIG90UGxhdEFsYXJtRmlyZWQoKQorICAgICAgICAgICAgLy8gdGhlIHJlcXVpc2l0ZSBudW1iZXIgb2YgdGltZXMgYmFzZWQgb24gdGhlIGFEdCBhcmd1bWVudC4KKyAgICAgICAgICAgIG90UGxhdEFsYXJtRmlyZWQoaW5zdGFuY2UpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChzUGxhdER0ID09IDApOworCisgICAgICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IGtUaW1lclN0YXJ0Q291bnRBZnRlclRyaWdnZXJbdHJpZ2dlcl0sCisgICAgICAgICAgICAgICAgICAgICAiVGVzdFRlblRpbWVyOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IGtUaW1lclN0b3BDb3VudEFmdGVyVHJpZ2dlclt0cmlnZ2VyXSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0VGVuVGltZXI6IFN0b3AgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgICAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSBrVGltZXJIYW5kbGVyQ291bnRBZnRlclRyaWdnZXJbdHJpZ2dlcl0sCisgICAgICAgICAgICAgICAgICAgICAiVGVzdFRlblRpbWVyOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0ga1NjaGVkdWxlclN0YXRlQWZ0ZXJUcmlnZ2VyW3RyaWdnZXJdLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3RUZW5UaW1lcjogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICAgICAgZm9yIChpID0gMCA7IGkgPCBrTnVtVGltZXJzIDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQoCisgICAgICAgICAgICAgICAgdGltZXJzW2ldLT5Jc1J1bm5pbmcoKSA9PSBrVGltZXJTdGF0ZUFmdGVyVHJpZ2dlclt0cmlnZ2VyXVtpXSwKKyAgICAgICAgICAgICAgICAiVGVzdFRlblRpbWVyOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwIDsgaSA8IGtOdW1UaW1lcnMgOyBpKyspCisgICAgeworICAgICAgICBWZXJpZnlPclF1aXQodGltZXJzW2ldLT5HZXRGaXJlZENvdW50ZXIoKSA9PSAxLCAiVGVzdFRlblRpbWVyOiBUaW1lciBmaXJlZCBjb3VudGVyIEZhaWxlZC5cbiIpOworICAgIH0KKworICAgIHByaW50ZigiLS0+IFBBU1NFRFxuIik7CisKKyAgICB0ZXN0RnJlZUluc3RhbmNlKGluc3RhbmNlKTsKK30KKworaW50IFRlc3RUZW5UaW1lcnModm9pZCkKK3sKKyAgICAvLyBUaW1lIHNoaWZ0IHRvIGNoYW5nZSB0aGUgc3RhcnQvZmlyZSB0aW1lIG9mIHRlbiB0aW1lcnMuCisgICAgY29uc3QgdWludDMyX3Qga1RpbWVTaGlmdFtdID0KKyAgICB7CisgICAgICAgIDAsCisgICAgICAgIDEwMDAwMFUsCisgICAgICAgIDBVIC0gMVUsCisgICAgICAgIDBVIC0gMTEwMFUsCisgICAgICAgIG90OjpUaW1lcjo6a01heER0LAorICAgICAgICBvdDo6VGltZXI6OmtNYXhEdCArIDEwMjBVLAorICAgIH07CisKKyAgICBzaXplX3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2Yoa1RpbWVTaGlmdCkgLyBzaXplb2Yoa1RpbWVTaGlmdFswXSk7IGkrKykKKyAgICB7CisgICAgICAgIFRlblRpbWVycyhrVGltZVNoaWZ0W2ldKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBSdW5UaW1lclRlc3RzKHZvaWQpCit7CisgICAgVGVzdE9uZVRpbWVyKCk7CisgICAgVGVzdFR3b1RpbWVycygpOworICAgIFRlc3RUZW5UaW1lcnMoKTsKK30KKworI2lmZGVmIEVOQUJMRV9URVNUX01BSU4KK2ludCBtYWluKHZvaWQpCit7CisgICAgUnVuVGltZXJUZXN0cygpOworICAgIHByaW50ZigiQWxsIHRlc3RzIHBhc3NlZFxuIik7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF90b29sY2hhaW4uY3BwIGIvdGVzdHMvdW5pdC90ZXN0X3Rvb2xjaGFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiZGYxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF90b29sY2hhaW4uY3BwCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vdG9vbGNoYWluLmg+CisKKyNpbmNsdWRlICJ0aHJlYWQvdG9wb2xvZ3kuaHBwIgorI2luY2x1ZGUgInRlc3RfdXRpbC5oIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKK2V4dGVybiAiQyIgeworICAgIHVpbnQzMl90IG90TmV0aWZBZGRyZXNzX1NpemVfYygpOworICAgIHVpbnQzMl90IG90TmV0aWZBZGRyZXNzX29mZnNldF9tTmV4dF9jKCk7CisgICAgb3ROZXRpZkFkZHJlc3MgQ3JlYXRlTmV0aWZfYygpOworfQorCit2b2lkIHRlc3RfcGFja2VkMSgpCit7CisgICAgT1RfVE9PTF9QQUNLRURfQkVHSU4KKyAgICBzdHJ1Y3QgcGFja2VkX3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgIG1CeXRlOworICAgICAgICB1aW50MzJfdCBtV29yZDsKKyAgICAgICAgdWludDE2X3QgbVNob3J0OworICAgIH0gT1RfVE9PTF9QQUNLRURfRU5EOworCisgICAgQ29tcGlsZVRpbWVBc3NlcnQoc2l6ZW9mKHBhY2tlZF90KSA9PSA3LCAicGFja2VkX3Qgc2hvdWxkIGJlIHBhY2tlZCB0byA3IGJ5dGVzIik7CisKKyAgICBWZXJpZnlPclF1aXQoc2l6ZW9mKHBhY2tlZF90KSA9PSA3LCAiVG9vbGNoYWluOjpPVF9UT09MX1BBQ0tFRCBmYWlsZWQgMVxuIik7Cit9CisKK3ZvaWQgdGVzdF9wYWNrZWQyKCkKK3sKKyAgICBPVF9UT09MX1BBQ0tFRF9CRUdJTgorICAgIHN0cnVjdCBwYWNrZWRfdAorICAgIHsKKyAgICAgICAgdWludDhfdCBtQnl0ZXNbM107CisgICAgICAgIHVpbnQ4X3QgbUJ5dGU7CisgICAgfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKyAgICBDb21waWxlVGltZUFzc2VydChzaXplb2YocGFja2VkX3QpID09IDQsICJwYWNrZWRfdCBzaG91bGQgYmUgcGFja2VkIHRvIDQgYnl0ZXMiKTsKKworICAgIFZlcmlmeU9yUXVpdChzaXplb2YocGFja2VkX3QpID09IDQsICJUb29sY2hhaW46Ok9UX1RPT0xfUEFDS0VEIGZhaWxlZCAyXG4iKTsKK30KKwordm9pZCB0ZXN0X3BhY2tlZF91bmlvbigpCit7CisgICAgdHlwZWRlZiBzdHJ1Y3QKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG1GaWVsZDsKKyAgICB9IG5lc3RlZF90OworCisgICAgT1RfVE9PTF9QQUNLRURfQkVHSU4KKyAgICBzdHJ1Y3QgcGFja2VkX3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgbUJ5dGVzWzNdOworICAgICAgICB1bmlvbgorICAgICAgICB7CisgICAgICAgICAgICBuZXN0ZWRfdCBtTmVzdGVkU3RydWN0OworICAgICAgICAgICAgdWludDhfdCAgbUJ5dGU7CisgICAgICAgIH0gT1RfVE9PTF9QQUNLRURfRklFTEQ7CisgICAgfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKyAgICBDb21waWxlVGltZUFzc2VydChzaXplb2YocGFja2VkX3QpID09IDUsICJwYWNrZWRfdCBzaG91bGQgYmUgcGFja2VkIHRvIDUgYnl0ZXMiKTsKKworICAgIFZlcmlmeU9yUXVpdChzaXplb2YocGFja2VkX3QpID09IDUsICJUb29sY2hhaW46Ok9UX1RPT0xfUEFDS0VEIGZhaWxlZCAzXG4iKTsKK30KKwordm9pZCB0ZXN0X3BhY2tlZF9lbnVtKCkKK3sKKyAgICBvdDo6TmVpZ2hib3IgbmVpZ2hib3I7CisgICAgbmVpZ2hib3IuU2V0U3RhdGUob3Q6Ok5laWdoYm9yOjprU3RhdGVWYWxpZCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB3aGVuIHdlIHJlYWQgdGhlIDMgYml0IGZpZWxkIGl0IGlzIHJlYWQgYXMgdW5zaWduZWQsIHNvIGl0IHJldHVybiAnNCcKKyAgICBWZXJpZnlPclF1aXQobmVpZ2hib3IuR2V0U3RhdGUoKSA9PSBvdDo6TmVpZ2hib3I6OmtTdGF0ZVZhbGlkLCAiVG9vbGNoYWluOjpPVF9UT09MX1BBQ0tFRCBmYWlsZWQgNFxuIik7Cit9CisKK3ZvaWQgdGVzdF9hZGRyX3NpemVzKCkKK3sKKyAgICBWZXJpZnlPclF1aXQob2Zmc2V0b2Yob3ROZXRpZkFkZHJlc3MsIG1OZXh0KSA9PSBvdE5ldGlmQWRkcmVzc19vZmZzZXRfbU5leHRfYygpLAorICAgICAgICAgICAgICAgICAibU5leHQgc2hvdWxkIG9mZnNldCB0aGUgc2FtZSBpbiBDICYgQysrIik7CisgICAgVmVyaWZ5T3JRdWl0KHNpemVvZihvdE5ldGlmQWRkcmVzcykgPT0gb3ROZXRpZkFkZHJlc3NfU2l6ZV9jKCksICJvdE5ldGlmQWRkcmVzcyBzaG91bGQgdGhlIHNhbWUgaW4gQyAmIEMrKyIpOworfQorCit2b2lkIHRlc3RfYWRkcl9iaXRmaWVsZCgpCit7CisgICAgVmVyaWZ5T3JRdWl0KENyZWF0ZU5ldGlmX2MoKS5tU2NvcGVPdmVycmlkZVZhbGlkID09IHRydWUsICJUb29sY2hhaW46OnRlc3RfYWRkcl9zaXplX2NwcFxuIik7Cit9CisKK3ZvaWQgVGVzdFRvb2xjaGFpbih2b2lkKQoreworICAgIHRlc3RfcGFja2VkMSgpOworICAgIHRlc3RfcGFja2VkMigpOworICAgIHRlc3RfcGFja2VkX3VuaW9uKCk7CisgICAgdGVzdF9wYWNrZWRfZW51bSgpOworICAgIHRlc3RfYWRkcl9zaXplcygpOworICAgIHRlc3RfYWRkcl9iaXRmaWVsZCgpOworfQorCisjaWZkZWYgRU5BQkxFX1RFU1RfTUFJTgoraW50IG1haW4odm9pZCkKK3sKKyAgICBUZXN0VG9vbGNoYWluKCk7CisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X3Rvb2xjaGFpbl9jLmMgYi90ZXN0cy91bml0L3Rlc3RfdG9vbGNoYWluX2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQ2NWEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3Rvb2xjaGFpbl9jLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3Rvb2xjaGFpbi5oPgorCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisKK3VpbnQzMl90IG90TmV0aWZBZGRyZXNzX1NpemVfYygpCit7CisgICAgcmV0dXJuIHNpemVvZihvdE5ldGlmQWRkcmVzcyk7Cit9CisKK3VpbnQzMl90IG90TmV0aWZBZGRyZXNzX29mZnNldF9tTmV4dF9jKCkKK3sKKyAgICByZXR1cm4gb2Zmc2V0b2Yob3ROZXRpZkFkZHJlc3MsIG1OZXh0KTsKK30KKworb3ROZXRpZkFkZHJlc3MgQ3JlYXRlTmV0aWZfYygpCit7CisgICAgb3ROZXRpZkFkZHJlc3MgYWRkcjsKKyAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgYWRkci5tU2NvcGVPdmVycmlkZVZhbGlkID0gdHJ1ZTsKKyAgICByZXR1cm4gYWRkcjsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF91dGlsLmNwcCBiL3Rlc3RzL3VuaXQvdGVzdF91dGlsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjlkNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3V0aWwuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKwordm9pZCBvdFRlc3RIZXhUb1ZlY3RvcihzdGQ6OnN0cmluZyAmYUhleCwgc3RkOjp2ZWN0b3I8dWludDhfdD4gJmFPdXRCeXRlcykKK3sKKyAgICBzdGQ6OmlzdHJpbmdzdHJlYW0gc3MoYUhleCk7CisgICAgc3RkOjpzdHJpbmcgd29yZDsKKworICAgIHdoaWxlIChzcyA+PiB3b3JkKQorICAgIHsKKyAgICAgICAgdWludDhfdCBuID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RydG9sKHdvcmQuZGF0YSgpLCBOVUxMLCAxNikpOworICAgICAgICBhT3V0Qnl0ZXMucHVzaF9iYWNrKG4pOworICAgIH0KK30KKwordm9pZCBvdFRlc3RQcmludEhleCh1aW50OF90ICphQnVmZmVyLCBpbnQgYUxlbmd0aCkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBwcmludGYoIiUwMnggIiwgYUJ1ZmZlcltpXSk7CisKKyAgICAgICAgaWYgKGkgJSAxNiA9PSA3KSB7IHByaW50ZigiICIpOyB9CisKKyAgICAgICAgaWYgKGkgJSAxNiA9PSAxNSAmJiBhTGVuZ3RoICE9IGkgKyAxKSB7IHByaW50ZigiXG4iKTsgfQorICAgIH0KKworICAgIHByaW50ZigiXG4iKTsKK30KKwordm9pZCBvdFRlc3RQcmludEhleChzdGQ6OnN0cmluZyAmYVN0cmluZykKK3sKKyAgICBvdFRlc3RQcmludEhleCgodWludDhfdCAqKWFTdHJpbmcuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGFTdHJpbmcuc2l6ZSgpKSk7Cit9CisKK3ZvaWQgb3RUZXN0UHJpbnRIZXgoc3RkOjp2ZWN0b3I8dWludDhfdD4gJmFCeXRlcykKK3sKKyAgICBvdFRlc3RQcmludEhleCgodWludDhfdCAqKSZhQnl0ZXNbMF0sIHN0YXRpY19jYXN0PGludD4oYUJ5dGVzLnNpemUoKSkpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X3V0aWwuaCBiL3Rlc3RzL3VuaXQvdGVzdF91dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzZmIwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF91dGlsLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBURVNUX1VUSUxfSAorI2RlZmluZSBURVNUX1VUSUxfSAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmbmRlZiBfV0lOMzIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvLyBFbmFibGUgbWFpbiBmdW5jdGlvbnMKKyNkZWZpbmUgRU5BQkxFX1RFU1RfTUFJTgorCisjZGVmaW5lIFN1Y2Nlc3NPclF1aXQoRVJSLCBNU0cpICAgICAgICAgICAgICAgICBcCisgIGRvIHsgXAorICAgIGlmICgoRVJSKSAhPSBPVF9FUlJPUl9OT05FKSAgICAgXAorICAgIHsgXAorICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBGQUlMRUQ6ICIsIF9fRlVOQ1RJT05fXyk7IFwKKyAgICAgIGZwdXRzKE1TRywgc3RkZXJyKTsgXAorICAgICAgZXhpdCgtMSk7IFwKKyAgICB9IFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBWZXJpZnlPclF1aXQoVFNULCBNU0cpIFwKKyAgZG8geyBcCisgICAgaWYgKCEoVFNUKSkgXAorICAgIHsgXAorICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBGQUlMRUQ6ICIsIF9fRlVOQ1RJT05fXyk7IFwKKyAgICAgIGZwdXRzKE1TRywgc3RkZXJyKTsgXAorICAgICAgZXhpdCgtMSk7IFwKKyAgICB9IFwKKyAgfSB3aGlsZSAoMCkKKworLy8jZGVmaW5lIENvbXBpbGVUaW1lQXNzZXJ0KENPTkQsIE1TRykgdHlwZWRlZiBjaGFyIF9fQ19BU1NFUlRfX1soQ09ORCk/MTotMV0KKworLy8gSSB3b3VsZCB1c2UgdGhlIGFib3ZlIGRlZmluaXRpb24gZm9yIENvbXBpbGVUaW1lQXNzZXJ0LCBidXQgSSBhbSBnZXR0aW5nIHRoZSBmb2xsb3dpbmcgZXJyb3JzCisvLyB3aGVuIEkgcnVuICdtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLXBvc2l4IGRpc3RjaGVjayc6CisvLworLy8gICAgICBlcnJvcjogdHlwZWRlZiAiX19DX0FTU0VSVF9fIiBsb2NhbGx5IGRlZmluZWQgYnV0IG5vdCB1c2VkIFstV2Vycm9yPXVudXNlZC1sb2NhbC10eXBlZGVmc10KKy8vCisjZGVmaW5lIENvbXBpbGVUaW1lQXNzZXJ0KENPTkQsIE1TRykKKworI2RlZmluZSBMb2coYUZvcm1hdCwgLi4uKSBwcmludGYoYUZvcm1hdCAiXG4iLCAjIyBfX1ZBX0FSR1NfXykKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vsc2UKKwordHlwZWRlZiB2b2lkICgqdXRBc3NlcnRUcnVlKShib29sIGNvbmRpdGlvbiwgY29uc3Qgd2NoYXJfdCAqbWVzc2FnZSk7CitleHRlcm4gdXRBc3NlcnRUcnVlIHNfQXNzZXJ0VHJ1ZTsKKwordHlwZWRlZiB2b2lkICgqdXRMb2dNZXNzYWdlKShjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CitleHRlcm4gdXRMb2dNZXNzYWdlIHNfTG9nTWVzc2FnZTsKKworI2RlZmluZSBTdWNjZXNzT3JRdWl0KEVSUiwgTVNHKSBzX0Fzc2VydFRydWUoKEVSUikgPT0gT1RfRVJST1JfTk9ORSwgTCMjTVNHKQorCisjZGVmaW5lIFZlcmlmeU9yUXVpdChFUlIsIE1TRykgc19Bc3NlcnRUcnVlKEVSUiwgTCMjTVNHKQorCisjZGVmaW5lIENvbXBpbGVUaW1lQXNzZXJ0KENPTkQsIE1TRykgc3RhdGljX2Fzc2VydChDT05ELCBNU0cpCisKKyNkZWZpbmUgTG9nKGFGb3JtYXQsIC4uLikgc19Mb2dNZXNzYWdlKGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfdXRpbC5ocHAgYi90ZXN0cy91bml0L3Rlc3RfdXRpbC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQyNWYzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF91dGlsLmhwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRFU1RfVVRJTF9IUFAKKyNkZWZpbmUgVEVTVF9VVElMX0hQUAorCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisKKy8vIFNUTCBpcyBva2F5IGluIHVuaXQgdGVzdHMuCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKwordm9pZCBvdFRlc3RIZXhUb1ZlY3RvcihzdGQ6OnN0cmluZyAmYUhleCwgc3RkOjp2ZWN0b3I8dWludDhfdD4gJmFPdXRCeXRlcyk7CisKK3ZvaWQgb3RUZXN0UHJpbnRIZXgodWludDhfdCAqYUJ1ZmZlciwgaW50IGFMZW5ndGgpOworCit2b2lkIG90VGVzdFByaW50SGV4KHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZhQnl0ZXMpOworCit2b2lkIG90VGVzdFByaW50SGV4KHN0ZDo6c3RyaW5nICZhU3RyaW5nKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3Rfd2luZG93cy5jcHAgYi90ZXN0cy91bml0L3Rlc3Rfd2luZG93cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjMTUxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF93aW5kb3dzLmNwcApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPFNES0RES1Zlci5oPgorI2luY2x1ZGUgIkNwcFVuaXRUZXN0LmgiCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisjaW5jbHVkZSAidGVzdF9wbGF0Zm9ybS5oIgorCit1c2luZyBuYW1lc3BhY2UgTWljcm9zb2Z0OjpWaXN1YWxTdHVkaW86OkNwcFVuaXRUZXN0RnJhbWV3b3JrOworCisjcHJhZ21hIHJlZ2lvbiBUZXN0IERlY2xhcmF0aW9ucworCisvLyB0ZXN0X2Flcy5jcHAKK3ZvaWQgVGVzdE1hY0JlYWNvbkZyYW1lKCk7Cit2b2lkIFRlc3RNYWNEYXRhRnJhbWUoKTsKK3ZvaWQgVGVzdE1hY0NvbW1hbmRGcmFtZSgpOworCisvLyB0ZXN0X2htYWNfc2hhMjU2LmNwcAordm9pZCBUZXN0SG1hY1NoYTI1NigpOworCisvLyB0ZXN0X2xpbmtfcXVhbGl0eS5jcHAKK25hbWVzcGFjZSBvdAoreworICAgIHZvaWQgVGVzdFJzc0F2ZXJhZ2luZygpOworICAgIHZvaWQgVGVzdExpbmtRdWFsaXR5Q2FsY3VsYXRpb25zKCk7Cit9CisKKy8vIHRlc3RfbG93cGFuLmNwcAorbmFtZXNwYWNlIG90Cit7CisgICAgdm9pZCBUZXN0TG93cGFuSXBoYygpOworfQorCisvLyB0ZXN0X21hY19mcmFtZS5jcHAKK25hbWVzcGFjZSBvdAoreworICAgIHZvaWQgVGVzdE1hY0hlYWRlcigpOworfQorCisvLyB0ZXN0X21lc3NhZ2UuY3BwCit2b2lkIFRlc3RNZXNzYWdlKCk7CisKKy8vIHRlc3RfbWVzc2FnZV9xdWV1ZS5jcHAKK3ZvaWQgVGVzdE1lc3NhZ2VRdWV1ZSgpOworCisvLyB0ZXN0X3ByaW9yaXR5X3F1ZXVlLmNwcAordm9pZCBUZXN0UHJpb3JpdHlRdWV1ZSgpOworCisvLyB0ZXN0X25jcF9idWZmZXIuY3BwCituYW1lc3BhY2Ugb3QKK3sKKyAgICB2b2lkIFRlc3ROY3BGcmFtZUJ1ZmZlcih2b2lkKTsKK30KKworLy8gdGVzdF90aW1lci5jcHAKK2ludCBUZXN0T25lVGltZXIoKTsKK2ludCBUZXN0VHdvVGltZXJzKCk7CitpbnQgVGVzdFRlblRpbWVycygpOworCisvLyB0ZXN0X3Rvb2xjaGFpbi5jcHAKK3ZvaWQgdGVzdF9wYWNrZWQxKCk7Cit2b2lkIHRlc3RfcGFja2VkMigpOwordm9pZCB0ZXN0X3BhY2tlZF91bmlvbigpOwordm9pZCB0ZXN0X3BhY2tlZF9lbnVtKCk7Cit2b2lkIHRlc3RfYWRkcl9zaXplcygpOwordm9pZCB0ZXN0X2FkZHJfYml0ZmllbGQoKTsKKworLy8gdGVzdF9mdXp6LmNwcAordm9pZCBUZXN0RnV6eih1aW50MzJfdCBhU2Vjb25kcyk7CisKKyNwcmFnbWEgZW5kcmVnaW9uCisKK3V0QXNzZXJ0VHJ1ZSBzX0Fzc2VydFRydWU7Cit1dExvZ01lc3NhZ2Ugc19Mb2dNZXNzYWdlOworCituYW1lc3BhY2Ugb3QKK3sKKyAgICBURVNUX0NMQVNTKFVuaXRUZXN0cykKKyAgICB7CisgICAgcHVibGljOgorCisgICAgICAgIFVuaXRUZXN0cygpIHsgc19Bc3NlcnRUcnVlID0gQXNzZXJ0VHJ1ZTsgc19Mb2dNZXNzYWdlID0gTG9nTWVzc2FnZTsgfQorCisgICAgICAgIC8vIEhlbHBlciBmb3Igb3BlbnRocmVhZCB0ZXN0IGNvZGUgdG8gY2FsbAorICAgICAgICBzdGF0aWMgdm9pZCBBc3NlcnRUcnVlKGJvb2wgY29uZGl0aW9uLCBjb25zdCB3Y2hhcl90KiBtZXNzYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQ6OklzVHJ1ZShjb25kaXRpb24sIG1lc3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGVscGVyIGZvciBsb2dnaW5nIGEgbWVzc2FnZQorICAgICAgICBzdGF0aWMgdm9pZCBMb2dNZXNzYWdlKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyIG1lc3NhZ2VbNTEyXTsKKworICAgICAgICAgICAgdmFfbGlzdCBhcmdzOworICAgICAgICAgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICAgICAgICAgIHZzbnByaW50ZihtZXNzYWdlLCBzaXplb2YobWVzc2FnZSksIGZvcm1hdCwgYXJncyk7CisgICAgICAgICAgICB2YV9lbmQoYXJncyk7CisKKyAgICAgICAgICAgIExvZ2dlcjo6V3JpdGVNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0ZXN0IHBsYXRmb3JtIGZ1bmN0aW9ucyBiZWZvcmUgZWFjaCB0ZXN0CisgICAgICAgIFRFU1RfTUVUSE9EX0lOSVRJQUxJWkUoVGVzdE1ldGhvZEluaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RQbGF0UmVzZXRUb0RlZmF1bHRzKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyB0ZXN0X2Flcy5jcHAKKyAgICAgICAgVEVTVF9NRVRIT0QoVGVzdE1hY0JlYWNvbkZyYW1lKSB7IDo6VGVzdE1hY0JlYWNvbkZyYW1lKCk7IH0KKyAgICAgICAgVEVTVF9NRVRIT0QoVGVzdE1hY0RhdGFGcmFtZSkgeyA6OlRlc3RNYWNEYXRhRnJhbWUoKTsgfQorICAgICAgICBURVNUX01FVEhPRChUZXN0TWFjQ29tbWFuZEZyYW1lKSB7IDo6VGVzdE1hY0NvbW1hbmRGcmFtZSgpOyB9CisKKyAgICAgICAgLy8gdGVzdF9obWFjX3NoYTI1Ni5jcHAKKyAgICAgICAgVEVTVF9NRVRIT0QoVGVzdEhtYWNTaGEyNTYpIHsgOjpUZXN0SG1hY1NoYTI1NigpOyB9CisKKyAgICAgICAgLy8gdGVzdF9saW5rX3F1YWxpdHkuY3BwCisgICAgICAgIFRFU1RfTUVUSE9EKFRlc3RSc3NBdmVyYWdpbmcpIHsgb3Q6OlRlc3RSc3NBdmVyYWdpbmcoKTsgfQorICAgICAgICBURVNUX01FVEhPRChUZXN0TGlua1F1YWxpdHlDYWxjdWxhdGlvbnMpIHsgb3Q6OlRlc3RMaW5rUXVhbGl0eUNhbGN1bGF0aW9ucygpOyB9CisKKyAgICAgICAgLy8gdGVzdF9sb3dwYW4uY3BwCisgICAgICAgIFRFU1RfTUVUSE9EKFRlc3RMb3dwYW5JcGhjKSB7IG90OjpUZXN0TG93cGFuSXBoYygpOyB9CisKKyAgICAgICAgLy8gdGVzdF9tYWNfZnJhbWUuY3BwCisgICAgICAgIFRFU1RfTUVUSE9EKFRlc3RNYWNIZWFkZXIpIHsgb3Q6OlRlc3RNYWNIZWFkZXIoKTsgfQorCisgICAgICAgIC8vIHRlc3RfbWVzc2FnZS5jcHAKKyAgICAgICAgVEVTVF9NRVRIT0QoVGVzdE1lc3NhZ2UpIHsgOjpUZXN0TWVzc2FnZSgpOyB9CisKKyAgICAgICAgLy8gdGVzdF9tZXNzYWdlX3F1ZXVlLmNwcAorICAgICAgICBURVNUX01FVEhPRChUZXN0TWVzc2FnZVF1ZXVlKSB7IDo6VGVzdE1lc3NhZ2VRdWV1ZSgpOyB9CisKKyAgICAgICAgLy8gdGVzdF9tZXNzYWdlX3F1ZXVlLmNwcAorICAgICAgICBURVNUX01FVEhPRChUZXN0UHJpb3JpdHlRdWV1ZSkgeyA6OlRlc3RQcmlvcml0eVF1ZXVlKCk7IH0KKworICAgICAgICAvLyB0ZXN0X3RpbWVyLmNwcAorICAgICAgICBURVNUX01FVEhPRChUZXN0T25lVGltZXIpIHsgOjpUZXN0T25lVGltZXIoKTsgfQorICAgICAgICBURVNUX01FVEhPRChUZXN0VHdvVGltZXJzKSB7IDo6VGVzdFR3b1RpbWVycygpOyB9CisgICAgICAgIFRFU1RfTUVUSE9EKFRlc3RUZW5UaW1lcnMpIHsgOjpUZXN0VGVuVGltZXJzKCk7IH0KKworICAgICAgICAvLyB0ZXN0X25jcF9idWZmZXIuY3BwCisgICAgICAgIFRFU1RfTUVUSE9EKFRlc3ROY3BGcmFtZUJ1ZmZlcikgeyBvdDo6VGVzdE5jcEZyYW1lQnVmZmVyKCk7IH0KKworICAgICAgICAvLyB0ZXN0X3Rvb2xjaGFpbi5jcHAKKyAgICAgICAgVEVTVF9NRVRIT0QodGVzdF9wYWNrZWQxKSB7IDo6dGVzdF9wYWNrZWQxKCk7IH0KKyAgICAgICAgVEVTVF9NRVRIT0QodGVzdF9wYWNrZWQyKSB7IDo6dGVzdF9wYWNrZWQyKCk7IH0KKyAgICAgICAgVEVTVF9NRVRIT0QodGVzdF9wYWNrZWRfdW5pb24pIHsgOjp0ZXN0X3BhY2tlZF91bmlvbigpOyB9CisgICAgICAgIFRFU1RfTUVUSE9EKHRlc3RfcGFja2VkX2VudW0pIHsgOjp0ZXN0X3BhY2tlZF9lbnVtKCk7IH0KKyAgICAgICAgVEVTVF9NRVRIT0QodGVzdF9hZGRyX3NpemVzKSB7IDo6dGVzdF9hZGRyX3NpemVzKCk7IH0KKyAgICAgICAgVEVTVF9NRVRIT0QodGVzdF9hZGRyX2JpdGZpZWxkKSB7IDo6dGVzdF9hZGRyX2JpdGZpZWxkKCk7IH0KKworICAgICAgICAvLyB0ZXN0X3NldHRpbmdzLmNwcAorICAgICAgICBURVNUX01FVEhPRChSdW5UZXN0RnV6eikgeyA6OlRlc3RGdXp6KDMwKTsgfQorICAgIH07Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS8uZ2l0YXR0cmlidXRlcyBiL3RoaXJkX3BhcnR5Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYzAyZTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxLDQgQEAKKyMgRGlzYWJsZSBhdXRvbWF0aWMgdGV4dCBmaWxlIGxpbmUtZW5kaW5nCisjIG5vcm1hbGl6YXRpb24gZm9yIHRoaXJkLXBhcnR5IGNvZGUuCisqICF0ZXh0CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L01ha2VmaWxlLmFtIGIvdGhpcmRfcGFydHkvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmZjMxZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNTggQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworRVhUUkFfRElTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGRpYWxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG54cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5sYnVpbGQtYXV0b3Rvb2xzICAgICAgICAgICAgICAgICAgICAgXAorICAgIG9wZW50aHJlYWQtdGVzdC1kcml2ZXIgICAgICAgICAgICAgICAgXAorICAgIE5vcmRpY1NlbWljb25kdWN0b3IgICAgICAgICAgICAgICAgICAgXAorICAgIHN5bm9wc3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19FRlIzMgorRVhUUkFfRElTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIHNpbGFicyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmCisKKyMgQWx3YXlzIHBhY2thZ2UgKGUuZy4gZm9yICdtYWtlIGRpc3QnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworRElTVF9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIG1iZWR0bHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfQlVJTFRJTl9NQkVEVExTCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgbWJlZHRscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VOQUJMRV9CVUlMVElOX01CRURUTFMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL1JFQURNRS5tZCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkN2QyNGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL1JFQURNRS5tZApAQCAtMCwwICsxLDE4IEBACitEZXNjcmlwdGlvbjoKK1RoaXMgZm9sZGVyIGNvbnNpc3RzIG9mIHNlbGVjdGVkIGNvbXBvbmVudHMgZnJvbSB0aGUgblJGNSBTREssIHRoYXQgYXJlIHVzZWQKK2luIHByb2Nlc3Mgb2YgYnVpbGRpbmcgdGhlIE9wZW5UaHJlYWQncyBuUkY1Mjg0MCBwbGF0Zm9ybS4KKworblJGNSBTREtzIHVzZWQ6CisgLSBuUkY1IFNESyAxMi4yLjA6IFtVUkxdW25yZjUtc2RrLTEyLTItMF0KKyAtIG5SRjUgU0RLIDEzLjAuMDogW1VSTF1bbnJmNS1zZGstMTMtMC0wXQorCitEaXJlY3RvcnkgY29uc2lzdHMgb2YgZm9sbG93aW5nIGZvbGRlcnM6CisgLSAvY21zaXMgICAgICAtIENvcmUgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVycyBmaWxlcyAoblJGNSBTREsgMTIuMi4wKQorIC0gL2RldmljZSAgICAgLSBNREsgZm9yIHRoZSBuUkY1Mjg0MCBjaGlwIChuUkY1IFNESyAxMi4yLjApCisgLSAvZHJpdmVycyAgICAtIERyaXZlcnMgZm9yIHRoZSBuUkY1Mjg0MCB0aGF0IGFyZSB1c2VkIGluIHRoZSBwbGF0Zm9ybSAoY3VzdG9tIGZpbGVzKQorIC0gL2hhbCAgICAgICAgLSBIYXJkd2FyZSBBY2Nlc3MgTGF5ZXIgZm9yIHRoZSBuUkY1Mjg0MCBjaGlwIChuUkY1IFNESyAxMi4yLjApCisgLSAvc2VnZ2VyX3J0dCAtIExpYnJhcnkgZm9yIHRoZSBSVFQgY29tbXVuaWNhdGlvbiAoblJGNSBTREsgMTIuMi4wKQorIC0gL3NvZnRkZXZpY2UgLSBTb2Z0RGV2aWNlIHMxNDAgaGVhZGVycyAoblJGNSBTREsgMTMuMC4wKQorCisgW25yZjUtc2RrLTEyLTItMF06IGh0dHA6Ly9kZXZlbG9wZXIubm9yZGljc2VtaS5jb20vblJGNV9TREsvblJGNV9TREtfdjEyLngueC9uUkY1X1NES18xMi4yLjBfZjAxMmVmYS56aXAKKyBbbnJmNS1zZGstMTMtMC0wXTogaHR0cDovL2RldmVsb3Blci5ub3JkaWNzZW1pLmNvbS9uUkY1X1NESy9uUkY1X1NES192MTMueC54L25SRjVfU0RLXzEzLjAuMF8wNGEwYmZkLnppcApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9hcm1fbWF0aC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9hcm1fbWF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOTU5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2FybV9tYXRoLmgKQEAgLTAsMCArMSw3MTY1IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNSBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisqDQorKiAkRGF0ZTogICAgICAgIDIwLiBPY3RvYmVyIDIwMTUNCisqICRSZXZpc2lvbjogICAgVjEuNC41IGINCisqDQorKiBQcm9qZWN0OiAgICAgIENNU0lTIERTUCBMaWJyYXJ5DQorKiBUaXRsZTogICAgICAgIGFybV9tYXRoLmgNCisqDQorKiBEZXNjcmlwdGlvbjogIFB1YmxpYyBoZWFkZXIgZmlsZSBmb3IgQ01TSVMgRFNQIExpYnJhcnkNCisqDQorKiBUYXJnZXQgUHJvY2Vzc29yOiBDb3J0ZXgtTTcvQ29ydGV4LU00L0NvcnRleC1NMy9Db3J0ZXgtTTANCisqDQorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KKyogYXJlIG1ldDoNCisqICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisqICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbg0KKyogICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisqICAgICBkaXN0cmlidXRpb24uDQorKiAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gTElNSVRFRCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMNCisqICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMNCisqICAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisqDQorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KKyogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MNCisqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFDQorKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLA0KKyogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUDQorKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTg0KKyogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAgIFxtYWlucGFnZSBDTVNJUyBEU1AgU29mdHdhcmUgTGlicmFyeQ0KKyAgICoNCisgICAqIEludHJvZHVjdGlvbg0KKyAgICogLS0tLS0tLS0tLS0tDQorICAgKg0KKyAgICogVGhpcyB1c2VyIG1hbnVhbCBkZXNjcmliZXMgdGhlIENNU0lTIERTUCBzb2Z0d2FyZSBsaWJyYXJ5LA0KKyAgICogYSBzdWl0ZSBvZiBjb21tb24gc2lnbmFsIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGZvciB1c2Ugb24gQ29ydGV4LU0gcHJvY2Vzc29yIGJhc2VkIGRldmljZXMuDQorICAgKg0KKyAgICogVGhlIGxpYnJhcnkgaXMgZGl2aWRlZCBpbnRvIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyBlYWNoIGNvdmVyaW5nIGEgc3BlY2lmaWMgY2F0ZWdvcnk6DQorICAgKiAtIEJhc2ljIG1hdGggZnVuY3Rpb25zDQorICAgKiAtIEZhc3QgbWF0aCBmdW5jdGlvbnMNCisgICAqIC0gQ29tcGxleCBtYXRoIGZ1bmN0aW9ucw0KKyAgICogLSBGaWx0ZXJzDQorICAgKiAtIE1hdHJpeCBmdW5jdGlvbnMNCisgICAqIC0gVHJhbnNmb3Jtcw0KKyAgICogLSBNb3RvciBjb250cm9sIGZ1bmN0aW9ucw0KKyAgICogLSBTdGF0aXN0aWNhbCBmdW5jdGlvbnMNCisgICAqIC0gU3VwcG9ydCBmdW5jdGlvbnMNCisgICAqIC0gSW50ZXJwb2xhdGlvbiBmdW5jdGlvbnMNCisgICAqDQorICAgKiBUaGUgbGlicmFyeSBoYXMgc2VwYXJhdGUgZnVuY3Rpb25zIGZvciBvcGVyYXRpbmcgb24gOC1iaXQgaW50ZWdlcnMsIDE2LWJpdCBpbnRlZ2VycywNCisgICAqIDMyLWJpdCBpbnRlZ2VyIGFuZCAzMi1iaXQgZmxvYXRpbmctcG9pbnQgdmFsdWVzLg0KKyAgICoNCisgICAqIFVzaW5nIHRoZSBMaWJyYXJ5DQorICAgKiAtLS0tLS0tLS0tLS0NCisgICAqDQorICAgKiBUaGUgbGlicmFyeSBpbnN0YWxsZXIgY29udGFpbnMgcHJlYnVpbHQgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcmllcyBpbiB0aGUgPGNvZGU+TGliPC9jb2RlPiBmb2xkZXIuDQorICAgKiAtIGFybV9jb3J0ZXhNN2xmZHBfbWF0aC5saWIgKExpdHRsZSBlbmRpYW4gYW5kIERvdWJsZSBQcmVjaXNpb24gRmxvYXRpbmcgUG9pbnQgVW5pdCBvbiBDb3J0ZXgtTTcpDQorICAgKiAtIGFybV9jb3J0ZXhNN2JmZHBfbWF0aC5saWIgKEJpZyBlbmRpYW4gYW5kIERvdWJsZSBQcmVjaXNpb24gRmxvYXRpbmcgUG9pbnQgVW5pdCBvbiBDb3J0ZXgtTTcpDQorICAgKiAtIGFybV9jb3J0ZXhNN2xmc3BfbWF0aC5saWIgKExpdHRsZSBlbmRpYW4gYW5kIFNpbmdsZSBQcmVjaXNpb24gRmxvYXRpbmcgUG9pbnQgVW5pdCBvbiBDb3J0ZXgtTTcpDQorICAgKiAtIGFybV9jb3J0ZXhNN2Jmc3BfbWF0aC5saWIgKEJpZyBlbmRpYW4gYW5kIFNpbmdsZSBQcmVjaXNpb24gRmxvYXRpbmcgUG9pbnQgVW5pdCBvbiBDb3J0ZXgtTTcpDQorICAgKiAtIGFybV9jb3J0ZXhNN2xfbWF0aC5saWIgKExpdHRsZSBlbmRpYW4gb24gQ29ydGV4LU03KQ0KKyAgICogLSBhcm1fY29ydGV4TTdiX21hdGgubGliIChCaWcgZW5kaWFuIG9uIENvcnRleC1NNykNCisgICAqIC0gYXJtX2NvcnRleE00bGZfbWF0aC5saWIgKExpdHRsZSBlbmRpYW4gYW5kIEZsb2F0aW5nIFBvaW50IFVuaXQgb24gQ29ydGV4LU00KQ0KKyAgICogLSBhcm1fY29ydGV4TTRiZl9tYXRoLmxpYiAoQmlnIGVuZGlhbiBhbmQgRmxvYXRpbmcgUG9pbnQgVW5pdCBvbiBDb3J0ZXgtTTQpDQorICAgKiAtIGFybV9jb3J0ZXhNNGxfbWF0aC5saWIgKExpdHRsZSBlbmRpYW4gb24gQ29ydGV4LU00KQ0KKyAgICogLSBhcm1fY29ydGV4TTRiX21hdGgubGliIChCaWcgZW5kaWFuIG9uIENvcnRleC1NNCkNCisgICAqIC0gYXJtX2NvcnRleE0zbF9tYXRoLmxpYiAoTGl0dGxlIGVuZGlhbiBvbiBDb3J0ZXgtTTMpDQorICAgKiAtIGFybV9jb3J0ZXhNM2JfbWF0aC5saWIgKEJpZyBlbmRpYW4gb24gQ29ydGV4LU0zKQ0KKyAgICogLSBhcm1fY29ydGV4TTBsX21hdGgubGliIChMaXR0bGUgZW5kaWFuIG9uIENvcnRleC1NMCAvIENvcnRleE0wKykNCisgICAqIC0gYXJtX2NvcnRleE0wYl9tYXRoLmxpYiAoQmlnIGVuZGlhbiBvbiBDb3J0ZXgtTTAgLyBDb3J0ZXhNMCspDQorICAgKg0KKyAgICogVGhlIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBpbiB0aGUgcHVibGljIGZpbGUgPGNvZGU+YXJtX21hdGguaDwvY29kZT4gd2hpY2ggaXMgcGxhY2VkIGluIHRoZSA8Y29kZT5JbmNsdWRlPC9jb2RlPiBmb2xkZXIuDQorICAgKiBTaW1wbHkgaW5jbHVkZSB0aGlzIGZpbGUgYW5kIGxpbmsgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcnkgaW4gdGhlIGFwcGxpY2F0aW9uIGFuZCBiZWdpbiBjYWxsaW5nIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucy4gVGhlIExpYnJhcnkgc3VwcG9ydHMgc2luZ2xlDQorICAgKiBwdWJsaWMgaGVhZGVyIGZpbGUgPGNvZGU+IGFybV9tYXRoLmg8L2NvZGU+IGZvciBDb3J0ZXgtTTcvTTQvTTMvTTAvTTArIHdpdGggbGl0dGxlIGVuZGlhbiBhbmQgYmlnIGVuZGlhbi4gU2FtZSBoZWFkZXIgZmlsZSB3aWxsIGJlIHVzZWQgZm9yIGZsb2F0aW5nIHBvaW50IHVuaXQoRlBVKSB2YXJpYW50cy4NCisgICAqIERlZmluZSB0aGUgYXBwcm9wcmlhdGUgcHJlIHByb2Nlc3NvciBNQUNSTyBBUk1fTUFUSF9DTTcgb3IgQVJNX01BVEhfQ000IG9yICBBUk1fTUFUSF9DTTMgb3INCisgICAqIEFSTV9NQVRIX0NNMCBvciBBUk1fTUFUSF9DTTBQTFVTIGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpbiB0aGUgYXBwbGljYXRpb24uDQorICAgKg0KKyAgICogRXhhbXBsZXMNCisgICAqIC0tLS0tLS0tDQorICAgKg0KKyAgICogVGhlIGxpYnJhcnkgc2hpcHMgd2l0aCBhIG51bWJlciBvZiBleGFtcGxlcyB3aGljaCBkZW1vbnN0cmF0ZSBob3cgdG8gdXNlIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucy4NCisgICAqDQorICAgKiBUb29sY2hhaW4gU3VwcG9ydA0KKyAgICogLS0tLS0tLS0tLS0tDQorICAgKg0KKyAgICogVGhlIGxpYnJhcnkgaGFzIGJlZW4gZGV2ZWxvcGVkIGFuZCB0ZXN0ZWQgd2l0aCBNREstQVJNIHZlcnNpb24gNS4xNC4wLjANCisgICAqIFRoZSBsaWJyYXJ5IGlzIGJlaW5nIHRlc3RlZCBpbiBHQ0MgYW5kIElBUiB0b29sY2hhaW5zIGFuZCB1cGRhdGVzIG9uIHRoaXMgYWN0aXZpdHkgd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSBzaG9ydGx5Lg0KKyAgICoNCisgICAqIEJ1aWxkaW5nIHRoZSBMaWJyYXJ5DQorICAgKiAtLS0tLS0tLS0tLS0NCisgICAqDQorICAgKiBUaGUgbGlicmFyeSBpbnN0YWxsZXIgY29udGFpbnMgYSBwcm9qZWN0IGZpbGUgdG8gcmUgYnVpbGQgbGlicmFyaWVzIG9uIE1ESy1BUk0gVG9vbCBjaGFpbiBpbiB0aGUgPGNvZGU+Q01TSVNcXERTUF9MaWJcXFNvdXJjZVxcQVJNPC9jb2RlPiBmb2xkZXIuDQorICAgKiAtIGFybV9jb3J0ZXhNX21hdGgudXZwcm9qeA0KKyAgICoNCisgICAqDQorICAgKiBUaGUgbGlicmFyaWVzIGNhbiBiZSBidWlsdCBieSBvcGVuaW5nIHRoZSBhcm1fY29ydGV4TV9tYXRoLnV2cHJvanggcHJvamVjdCBpbiBNREstQVJNLCBzZWxlY3RpbmcgYSBzcGVjaWZpYyB0YXJnZXQsIGFuZCBkZWZpbmluZyB0aGUgb3B0aW9uYWwgcHJlIHByb2Nlc3NvciBNQUNST3MgZGV0YWlsZWQgYWJvdmUuDQorICAgKg0KKyAgICogUHJlLXByb2Nlc3NvciBNYWNyb3MNCisgICAqIC0tLS0tLS0tLS0tLQ0KKyAgICoNCisgICAqIEVhY2ggbGlicmFyeSBwcm9qZWN0IGhhdmUgZGlmZmVyYW50IHByZS1wcm9jZXNzb3IgbWFjcm9zLg0KKyAgICoNCisgICAqIC0gVU5BTElHTkVEX1NVUFBPUlRfRElTQUJMRToNCisgICAqDQorICAgKiBEZWZpbmUgbWFjcm8gVU5BTElHTkVEX1NVUFBPUlRfRElTQUJMRSwgSWYgdGhlIHNpbGljb24gZG9lcyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcw0KKyAgICoNCisgICAqIC0gQVJNX01BVEhfQklHX0VORElBTjoNCisgICAqDQorICAgKiBEZWZpbmUgbWFjcm8gQVJNX01BVEhfQklHX0VORElBTiB0byBidWlsZCB0aGUgbGlicmFyeSBmb3IgYmlnIGVuZGlhbiB0YXJnZXRzLiBCeSBkZWZhdWx0IGxpYnJhcnkgYnVpbGRzIGZvciBsaXR0bGUgZW5kaWFuIHRhcmdldHMuDQorICAgKg0KKyAgICogLSBBUk1fTUFUSF9NQVRSSVhfQ0hFQ0s6DQorICAgKg0KKyAgICogRGVmaW5lIG1hY3JvIEFSTV9NQVRIX01BVFJJWF9DSEVDSyBmb3IgY2hlY2tpbmcgb24gdGhlIGlucHV0IGFuZCBvdXRwdXQgc2l6ZXMgb2YgbWF0cmljZXMNCisgICAqDQorICAgKiAtIEFSTV9NQVRIX1JPVU5ESU5HOg0KKyAgICoNCisgICAqIERlZmluZSBtYWNybyBBUk1fTUFUSF9ST1VORElORyBmb3Igcm91bmRpbmcgb24gc3VwcG9ydCBmdW5jdGlvbnMNCisgICAqDQorICAgKiAtIEFSTV9NQVRIX0NNeDoNCisgICAqDQorICAgKiBEZWZpbmUgbWFjcm8gQVJNX01BVEhfQ000IGZvciBidWlsZGluZyB0aGUgbGlicmFyeSBvbiBDb3J0ZXgtTTQgdGFyZ2V0LCBBUk1fTUFUSF9DTTMgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb24gQ29ydGV4LU0zIHRhcmdldA0KKyAgICogYW5kIEFSTV9NQVRIX0NNMCBmb3IgYnVpbGRpbmcgbGlicmFyeSBvbiBDb3J0ZXgtTTAgdGFyZ2V0LCBBUk1fTUFUSF9DTTBQTFVTIGZvciBidWlsZGluZyBsaWJyYXJ5IG9uIENvcnRleC1NMCsgdGFyZ2V0LCBhbmQNCisgICAqIEFSTV9NQVRIX0NNNyBmb3IgYnVpbGRpbmcgdGhlIGxpYnJhcnkgb24gY29ydGV4LU03Lg0KKyAgICoNCisgICAqIC0gX19GUFVfUFJFU0VOVDoNCisgICAqDQorICAgKiBJbml0aWFsaXplIG1hY3JvIF9fRlBVX1BSRVNFTlQgPSAxIHdoZW4gYnVpbGRpbmcgb24gRlBVIHN1cHBvcnRlZCBUYXJnZXRzLiBFbmFibGUgdGhpcyBtYWNybyBmb3IgTTRiZiBhbmQgTTRsZiBsaWJyYXJpZXMNCisgICAqDQorICAgKiA8aHI+DQorICAgKiBDTVNJUy1EU1AgaW4gQVJNOjpDTVNJUyBQYWNrDQorICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICoNCisgICAqIFRoZSBmb2xsb3dpbmcgZmlsZXMgcmVsZXZhbnQgdG8gQ01TSVMtRFNQIGFyZSBwcmVzZW50IGluIHRoZSA8Yj5BUk06OkNNU0lTPC9iPiBQYWNrIGRpcmVjdG9yaWVzOg0KKyAgICogfEZpbGUvRm9sZGVyICAgICAgICAgICAgICAgICAgIHxDb250ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCisgICAqIHxcYiBDTVNJU1xcRG9jdW1lbnRhdGlvblxcRFNQICB8IFRoaXMgZG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgICogfFxiIENNU0lTXFxEU1BfTGliICAgICAgICAgICAgIHwgU29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgKGxpY2Vuc2UudHh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgKiB8XGIgQ01TSVNcXERTUF9MaWJcXEV4YW1wbGVzICAgfCBFeGFtcGxlIHByb2plY3RzIGRlbW9uc3RyYXRpbmcgdGhlIHVzYWdlIG9mIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucyAgICAgIHwNCisgICAqIHxcYiBDTVNJU1xcRFNQX0xpYlxcU291cmNlICAgICB8IFNvdXJjZSBmaWxlcyBmb3IgcmVidWlsZGluZyB0aGUgbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgICoNCisgICAqIDxocj4NCisgICAqIFJldmlzaW9uIEhpc3Rvcnkgb2YgQ01TSVMtRFNQDQorICAgKiAtLS0tLS0tLS0tLS0NCisgICAqIFBsZWFzZSByZWZlciB0byBccmVmIENoYW5nZUxvZ19wZy4NCisgICAqDQorICAgKiBDb3B5cmlnaHQgTm90aWNlDQorICAgKiAtLS0tLS0tLS0tLS0NCisgICAqDQorICAgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNSBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgICAqLw0KKw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBncm91cE1hdGggQmFzaWMgTWF0aCBGdW5jdGlvbnMNCisgKi8NCisNCisvKioNCisgKiBAZGVmZ3JvdXAgZ3JvdXBGYXN0TWF0aCBGYXN0IE1hdGggRnVuY3Rpb25zDQorICogVGhpcyBzZXQgb2YgZnVuY3Rpb25zIHByb3ZpZGVzIGEgZmFzdCBhcHByb3hpbWF0aW9uIHRvIHNpbmUsIGNvc2luZSwgYW5kIHNxdWFyZSByb290Lg0KKyAqIEFzIGNvbXBhcmVkIHRvIG1vc3Qgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgQ01TSVMgbWF0aCBsaWJyYXJ5LCB0aGUgZmFzdCBtYXRoIGZ1bmN0aW9ucw0KKyAqIG9wZXJhdGUgb24gaW5kaXZpZHVhbCB2YWx1ZXMgYW5kIG5vdCBhcnJheXMuDQorICogVGhlcmUgYXJlIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgUTE1LCBRMzEsIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhLg0KKyAqDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIGdyb3VwQ21wbHhNYXRoIENvbXBsZXggTWF0aCBGdW5jdGlvbnMNCisgKiBUaGlzIHNldCBvZiBmdW5jdGlvbnMgb3BlcmF0ZXMgb24gY29tcGxleCBkYXRhIHZlY3RvcnMuDQorICogVGhlIGRhdGEgaW4gdGhlIGNvbXBsZXggYXJyYXlzIGlzIHN0b3JlZCBpbiBhbiBpbnRlcmxlYXZlZCBmYXNoaW9uDQorICogKHJlYWwsIGltYWcsIHJlYWwsIGltYWcsIC4uLikuDQorICogSW4gdGhlIEFQSSBmdW5jdGlvbnMsIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBpbiBhIGNvbXBsZXggYXJyYXkgcmVmZXJzDQorICogdG8gdGhlIG51bWJlciBvZiBjb21wbGV4IHZhbHVlczsgdGhlIGFycmF5IGNvbnRhaW5zIHR3aWNlIHRoaXMgbnVtYmVyIG9mDQorICogcmVhbCB2YWx1ZXMuDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIGdyb3VwRmlsdGVycyBGaWx0ZXJpbmcgRnVuY3Rpb25zDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIGdyb3VwTWF0cml4IE1hdHJpeCBGdW5jdGlvbnMNCisgKg0KKyAqIFRoaXMgc2V0IG9mIGZ1bmN0aW9ucyBwcm92aWRlcyBiYXNpYyBtYXRyaXggbWF0aCBvcGVyYXRpb25zLg0KKyAqIFRoZSBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBtYXRyaXggZGF0YSBzdHJ1Y3R1cmVzLiAgRm9yIGV4YW1wbGUsDQorICogdGhlIHR5cGUNCisgKiBkZWZpbml0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgbWF0cml4IHN0cnVjdHVyZSBpcyBzaG93bg0KKyAqIGJlbG93Og0KKyAqIDxwcmU+DQorICogICAgIHR5cGVkZWYgc3RydWN0DQorICogICAgIHsNCisgKiAgICAgICB1aW50MTZfdCBudW1Sb3dzOyAgICAgLy8gbnVtYmVyIG9mIHJvd3Mgb2YgdGhlIG1hdHJpeC4NCisgKiAgICAgICB1aW50MTZfdCBudW1Db2xzOyAgICAgLy8gbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIG1hdHJpeC4NCisgKiAgICAgICBmbG9hdDMyX3QgKnBEYXRhOyAgICAgLy8gcG9pbnRzIHRvIHRoZSBkYXRhIG9mIHRoZSBtYXRyaXguDQorICogICAgIH0gYXJtX21hdHJpeF9pbnN0YW5jZV9mMzI7DQorICogPC9wcmU+DQorICogVGhlcmUgYXJlIHNpbWlsYXIgZGVmaW5pdGlvbnMgZm9yIFExNSBhbmQgUTMxIGRhdGEgdHlwZXMuDQorICoNCisgKiBUaGUgc3RydWN0dXJlIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgbWF0cml4IGFuZCB0aGVuIHBvaW50cyB0bw0KKyAqIGFuIGFycmF5IG9mIGRhdGEuICBUaGUgYXJyYXkgaXMgb2Ygc2l6ZSA8Y29kZT5udW1Sb3dzIFggbnVtQ29sczwvY29kZT4NCisgKiBhbmQgdGhlIHZhbHVlcyBhcmUgYXJyYW5nZWQgaW4gcm93IG9yZGVyLiAgVGhhdCBpcywgdGhlDQorICogbWF0cml4IGVsZW1lbnQgKGksIGopIGlzIHN0b3JlZCBhdDoNCisgKiA8cHJlPg0KKyAqICAgICBwRGF0YVtpKm51bUNvbHMgKyBqXQ0KKyAqIDwvcHJlPg0KKyAqDQorICogXHBhciBJbml0IEZ1bmN0aW9ucw0KKyAqIFRoZXJlIGlzIGFuIGFzc29jaWF0ZWQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGVhY2ggdHlwZSBvZiBtYXRyaXgNCisgKiBkYXRhIHN0cnVjdHVyZS4NCisgKiBUaGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gc2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgZmllbGRzLg0KKyAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiA8Y29kZT5hcm1fbWF0X2luaXRfZjMyKCk8L2NvZGU+LCA8Y29kZT5hcm1fbWF0X2luaXRfcTMxKCk8L2NvZGU+DQorICogYW5kIDxjb2RlPmFybV9tYXRfaW5pdF9xMTUoKTwvY29kZT4gZm9yIGZsb2F0aW5nLXBvaW50LCBRMzEgYW5kIFExNSB0eXBlcywgIHJlc3BlY3RpdmVseS4NCisgKg0KKyAqIFxwYXINCisgKiBVc2Ugb2YgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiBIb3dldmVyLCBpZiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyB1c2VkDQorICogdGhlbiB0aGUgaW5zdGFuY2Ugc3RydWN0dXJlIGNhbm5vdCBiZSBwbGFjZWQgaW50byBhIGNvbnN0IGRhdGEgc2VjdGlvbi4NCisgKiBUbyBwbGFjZSB0aGUgaW5zdGFuY2Ugc3RydWN0dXJlIGluIGEgY29uc3QgZGF0YQ0KKyAqIHNlY3Rpb24sIG1hbnVhbGx5IGluaXRpYWxpemUgdGhlIGRhdGEgc3RydWN0dXJlLiAgRm9yIGV4YW1wbGU6DQorICogPHByZT4NCisgKiA8Y29kZT5hcm1fbWF0cml4X2luc3RhbmNlX2YzMiBTID0ge25Sb3dzLCBuQ29sdW1ucywgcERhdGF9OzwvY29kZT4NCisgKiA8Y29kZT5hcm1fbWF0cml4X2luc3RhbmNlX3EzMSBTID0ge25Sb3dzLCBuQ29sdW1ucywgcERhdGF9OzwvY29kZT4NCisgKiA8Y29kZT5hcm1fbWF0cml4X2luc3RhbmNlX3ExNSBTID0ge25Sb3dzLCBuQ29sdW1ucywgcERhdGF9OzwvY29kZT4NCisgKiA8L3ByZT4NCisgKiB3aGVyZSA8Y29kZT5uUm93czwvY29kZT4gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygcm93cywgPGNvZGU+bkNvbHVtbnM8L2NvZGU+DQorICogc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY29sdW1ucywgYW5kIDxjb2RlPnBEYXRhPC9jb2RlPiBwb2ludHMgdG8gdGhlDQorICogZGF0YSBhcnJheS4NCisgKg0KKyAqIFxwYXIgU2l6ZSBDaGVja2luZw0KKyAqIEJ5IGRlZmF1bHQgYWxsIG9mIHRoZSBtYXRyaXggZnVuY3Rpb25zIHBlcmZvcm0gc2l6ZSBjaGVja2luZyBvbiB0aGUgaW5wdXQgYW5kDQorICogb3V0cHV0IG1hdHJpY2VzLiAgRm9yIGV4YW1wbGUsIHRoZSBtYXRyaXggYWRkaXRpb24gZnVuY3Rpb24gdmVyaWZpZXMgdGhhdCB0aGUNCisgKiB0d28gaW5wdXQgbWF0cmljZXMgYW5kIHRoZSBvdXRwdXQgbWF0cml4IGFsbCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiByb3dzIGFuZA0KKyAqIGNvbHVtbnMuICBJZiB0aGUgc2l6ZSBjaGVjayBmYWlscyB0aGUgZnVuY3Rpb25zIHJldHVybjoNCisgKiA8cHJlPg0KKyAqICAgICBBUk1fTUFUSF9TSVpFX01JU01BVENIDQorICogPC9wcmU+DQorICogT3RoZXJ3aXNlIHRoZSBmdW5jdGlvbnMgcmV0dXJuDQorICogPHByZT4NCisgKiAgICAgQVJNX01BVEhfU1VDQ0VTUw0KKyAqIDwvcHJlPg0KKyAqIFRoZXJlIGlzIHNvbWUgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWF0cml4IHNpemUgY2hlY2tpbmcuDQorICogVGhlIG1hdHJpeCBzaXplIGNoZWNraW5nIGlzIGVuYWJsZWQgdmlhIHRoZSBcI2RlZmluZQ0KKyAqIDxwcmU+DQorICogICAgIEFSTV9NQVRIX01BVFJJWF9DSEVDSw0KKyAqIDwvcHJlPg0KKyAqIHdpdGhpbiB0aGUgbGlicmFyeSBwcm9qZWN0IHNldHRpbmdzLiAgQnkgZGVmYXVsdCB0aGlzIG1hY3JvIGlzIGRlZmluZWQNCisgKiBhbmQgc2l6ZSBjaGVja2luZyBpcyBlbmFibGVkLiAgQnkgY2hhbmdpbmcgdGhlIHByb2plY3Qgc2V0dGluZ3MgYW5kDQorICogdW5kZWZpbmluZyB0aGlzIG1hY3JvIHNpemUgY2hlY2tpbmcgaXMgZWxpbWluYXRlZCBhbmQgdGhlIGZ1bmN0aW9ucw0KKyAqIHJ1biBhIGJpdCBmYXN0ZXIuICBXaXRoIHNpemUgY2hlY2tpbmcgZGlzYWJsZWQgdGhlIGZ1bmN0aW9ucyBhbHdheXMNCisgKiByZXR1cm4gPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4uDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIGdyb3VwVHJhbnNmb3JtcyBUcmFuc2Zvcm0gRnVuY3Rpb25zDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIGdyb3VwQ29udHJvbGxlciBDb250cm9sbGVyIEZ1bmN0aW9ucw0KKyAqLw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBncm91cFN0YXRzIFN0YXRpc3RpY3MgRnVuY3Rpb25zDQorICovDQorLyoqDQorICogQGRlZmdyb3VwIGdyb3VwU3VwcG9ydCBTdXBwb3J0IEZ1bmN0aW9ucw0KKyAqLw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBncm91cEludGVycG9sYXRpb24gSW50ZXJwb2xhdGlvbiBGdW5jdGlvbnMNCisgKiBUaGVzZSBmdW5jdGlvbnMgcGVyZm9ybSAxLSBhbmQgMi1kaW1lbnNpb25hbCBpbnRlcnBvbGF0aW9uIG9mIGRhdGEuDQorICogTGluZWFyIGludGVycG9sYXRpb24gaXMgdXNlZCBmb3IgMS1kaW1lbnNpb25hbCBkYXRhIGFuZA0KKyAqIGJpbGluZWFyIGludGVycG9sYXRpb24gaXMgdXNlZCBmb3IgMi1kaW1lbnNpb25hbCBkYXRhLg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBncm91cEV4YW1wbGVzIEV4YW1wbGVzDQorICovDQorI2lmbmRlZiBfQVJNX01BVEhfSA0KKyNkZWZpbmUgX0FSTV9NQVRIX0gNCisNCisvKiBpZ25vcmUgc29tZSBHQ0Mgd2FybmluZ3MgKi8NCisjaWYgZGVmaW5lZCAoIF9fR05VQ19fICkNCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gNCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc2lnbi1jb252ZXJzaW9uIg0KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIg0KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtcGFyYW1ldGVyIg0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgX19DTVNJU19HRU5FUklDICAgICAgICAgLyogZGlzYWJsZSBOVklDIGFuZCBTeXN0aWNrIGZ1bmN0aW9ucyAqLw0KKw0KKyNpZiBkZWZpbmVkKEFSTV9NQVRIX0NNNykNCisjaW5jbHVkZSAiY29yZV9jbTcuaCINCisjZWxpZiBkZWZpbmVkIChBUk1fTUFUSF9DTTQpDQorI2luY2x1ZGUgImNvcmVfY200LmgiDQorI2VsaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00zKQ0KKyNpbmNsdWRlICJjb3JlX2NtMy5oIg0KKyNlbGlmIGRlZmluZWQgKEFSTV9NQVRIX0NNMCkNCisjaW5jbHVkZSAiY29yZV9jbTAuaCINCisjZGVmaW5lIEFSTV9NQVRIX0NNMF9GQU1JTFkNCisjZWxpZiBkZWZpbmVkIChBUk1fTUFUSF9DTTBQTFVTKQ0KKyNpbmNsdWRlICJjb3JlX2NtMHBsdXMuaCINCisjZGVmaW5lIEFSTV9NQVRIX0NNMF9GQU1JTFkNCisjZWxzZQ0KKyNlcnJvciAiRGVmaW5lIGFjY29yZGluZyB0aGUgdXNlZCBDb3J0ZXggY29yZSBBUk1fTUFUSF9DTTcsIEFSTV9NQVRIX0NNNCwgQVJNX01BVEhfQ00zLCBBUk1fTUFUSF9DTTBQTFVTIG9yIEFSTV9NQVRIX0NNMCINCisjZW5kaWYNCisNCisjdW5kZWYgIF9fQ01TSVNfR0VORVJJQyAgICAgICAgIC8qIGVuYWJsZSBOVklDIGFuZCBTeXN0aWNrIGZ1bmN0aW9ucyAqLw0KKyNpbmNsdWRlICJzdHJpbmcuaCINCisjaW5jbHVkZSAibWF0aC5oIg0KKyNpZmRlZiAgIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorDQorLyoqDQorICogQGJyaWVmIE1hY3JvcyByZXF1aXJlZCBmb3IgcmVjaXByb2NhbCBjYWxjdWxhdGlvbiBpbiBOb3JtYWxpemVkIExNUw0KKyAqLw0KKw0KKyNkZWZpbmUgREVMVEFfUTMxICAgICAgICAgICgweDEwMCkNCisjZGVmaW5lIERFTFRBX1ExNSAgICAgICAgICAweDUNCisjZGVmaW5lIElOREVYX01BU0sgICAgICAgICAweDAwMDAwMDNGDQorI2lmbmRlZiBQSQ0KKyNkZWZpbmUgUEkgICAgICAgICAgICAgICAgIDMuMTQxNTkyNjUzNTg5NzlmDQorI2VuZGlmDQorDQorLyoqDQorICogQGJyaWVmIE1hY3JvcyByZXF1aXJlZCBmb3IgU0lORSBhbmQgQ09TSU5FIEZhc3QgbWF0aCBhcHByb3hpbWF0aW9ucw0KKyAqLw0KKw0KKyNkZWZpbmUgRkFTVF9NQVRIX1RBQkxFX1NJWkUgIDUxMg0KKyNkZWZpbmUgRkFTVF9NQVRIX1EzMV9TSElGVCAgICgzMiAtIDEwKQ0KKyNkZWZpbmUgRkFTVF9NQVRIX1ExNV9TSElGVCAgICgxNiAtIDEwKQ0KKyNkZWZpbmUgQ09OVFJPTExFUl9RMzFfU0hJRlQgICgzMiAtIDkpDQorI2RlZmluZSBUQUJMRV9TSVpFICAyNTYNCisjZGVmaW5lIFRBQkxFX1NQQUNJTkdfUTMxICAgICAweDQwMDAwMA0KKyNkZWZpbmUgVEFCTEVfU1BBQ0lOR19RMTUgICAgIDB4ODANCisNCisvKioNCisgKiBAYnJpZWYgTWFjcm9zIHJlcXVpcmVkIGZvciBTSU5FIGFuZCBDT1NJTkUgQ29udHJvbGxlciBmdW5jdGlvbnMNCisgKi8NCisvKiAxLjMxKHEzMSkgRml4ZWQgdmFsdWUgb2YgMi8zNjAgKi8NCisvKiAtMSB0byArMSBpcyBkaXZpZGVkIGludG8gMzYwIHZhbHVlcyBzbyB0b3RhbCBzcGFjaW5nIGlzICgyLzM2MCkgKi8NCisjZGVmaW5lIElOUFVUX1NQQUNJTkcgICAgICAgICAweEI2MEI2MQ0KKw0KKy8qKg0KKyAqIEBicmllZiBNYWNybyBmb3IgVW5hbGlnbmVkIFN1cHBvcnQNCisgKi8NCisjaWZuZGVmIFVOQUxJR05FRF9TVVBQT1JUX0RJU0FCTEUNCisjZGVmaW5lIEFMSUdONA0KKyNlbHNlDQorI2lmIGRlZmluZWQgIChfX0dOVUNfXykNCisjZGVmaW5lIEFMSUdONCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSkNCisjZWxzZQ0KKyNkZWZpbmUgQUxJR040IF9fYWxpZ24oNCkNCisjZW5kaWYNCisjZW5kaWYgICAvKiAjaWZuZGVmIFVOQUxJR05FRF9TVVBQT1JUX0RJU0FCTEUgKi8NCisNCisvKioNCisgKiBAYnJpZWYgRXJyb3Igc3RhdHVzIHJldHVybmVkIGJ5IHNvbWUgZnVuY3Rpb25zIGluIHRoZSBsaWJyYXJ5Lg0KKyAqLw0KKw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgQVJNX01BVEhfU1VDQ0VTUyA9IDAsICAgICAgICAgICAgICAgIC8qKjwgTm8gZXJyb3IgKi8NCisgICAgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgPSAtMSwgICAgICAgIC8qKjwgT25lIG9yIG1vcmUgYXJndW1lbnRzIGFyZSBpbmNvcnJlY3QgKi8NCisgICAgQVJNX01BVEhfTEVOR1RIX0VSUk9SID0gLTIsICAgICAgICAgIC8qKjwgTGVuZ3RoIG9mIGRhdGEgYnVmZmVyIGlzIGluY29ycmVjdCAqLw0KKyAgICBBUk1fTUFUSF9TSVpFX01JU01BVENIID0gLTMsICAgICAgICAgLyoqPCBTaXplIG9mIG1hdHJpY2VzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIG9wZXJhdGlvbi4gKi8NCisgICAgQVJNX01BVEhfTkFOSU5GID0gLTQsICAgICAgICAgICAgICAgIC8qKjwgTm90LWEtbnVtYmVyIChOYU4pIG9yIGluZmluaXR5IGlzIGdlbmVyYXRlZCAqLw0KKyAgICBBUk1fTUFUSF9TSU5HVUxBUiA9IC01LCAgICAgICAgICAgICAgLyoqPCBHZW5lcmF0ZWQgYnkgbWF0cml4IGludmVyc2lvbiBpZiB0aGUgaW5wdXQgbWF0cml4IGlzIHNpbmd1bGFyIGFuZCBjYW5ub3QgYmUgaW52ZXJ0ZWQuICovDQorICAgIEFSTV9NQVRIX1RFU1RfRkFJTFVSRSA9IC02ICAgICAgICAgICAvKio8IFRlc3QgRmFpbGVkICAqLw0KK30gYXJtX3N0YXR1czsNCisNCisvKioNCisgKiBAYnJpZWYgOC1iaXQgZnJhY3Rpb25hbCBkYXRhIHR5cGUgaW4gMS43IGZvcm1hdC4NCisgKi8NCit0eXBlZGVmIGludDhfdCBxN190Ow0KKw0KKy8qKg0KKyAqIEBicmllZiAxNi1iaXQgZnJhY3Rpb25hbCBkYXRhIHR5cGUgaW4gMS4xNSBmb3JtYXQuDQorICovDQordHlwZWRlZiBpbnQxNl90IHExNV90Ow0KKw0KKy8qKg0KKyAqIEBicmllZiAzMi1iaXQgZnJhY3Rpb25hbCBkYXRhIHR5cGUgaW4gMS4zMSBmb3JtYXQuDQorICovDQordHlwZWRlZiBpbnQzMl90IHEzMV90Ow0KKw0KKy8qKg0KKyAqIEBicmllZiA2NC1iaXQgZnJhY3Rpb25hbCBkYXRhIHR5cGUgaW4gMS42MyBmb3JtYXQuDQorICovDQordHlwZWRlZiBpbnQ2NF90IHE2M190Ow0KKw0KKy8qKg0KKyAqIEBicmllZiAzMi1iaXQgZmxvYXRpbmctcG9pbnQgdHlwZSBkZWZpbml0aW9uLg0KKyAqLw0KK3R5cGVkZWYgZmxvYXQgZmxvYXQzMl90Ow0KKw0KKy8qKg0KKyAqIEBicmllZiA2NC1iaXQgZmxvYXRpbmctcG9pbnQgdHlwZSBkZWZpbml0aW9uLg0KKyAqLw0KK3R5cGVkZWYgZG91YmxlIGZsb2F0NjRfdDsNCisNCisvKioNCisgKiBAYnJpZWYgZGVmaW5pdGlvbiB0byByZWFkL3dyaXRlIHR3byAxNiBiaXQgdmFsdWVzLg0KKyAqLw0KKyNpZiBkZWZpbmVkIF9fQ0NfQVJNDQorI2RlZmluZSBfX1NJTUQzMl9UWVBFIGludDMyX3QgX19wYWNrZWQNCisjZGVmaW5lIENNU0lTX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQ0KKw0KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApDQorI2RlZmluZSBfX1NJTUQzMl9UWVBFIGludDMyX3QNCisjZGVmaW5lIENNU0lTX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQ0KKw0KKyNlbGlmIGRlZmluZWQgX19HTlVDX18NCisjZGVmaW5lIF9fU0lNRDMyX1RZUEUgaW50MzJfdA0KKyNkZWZpbmUgQ01TSVNfVU5VU0VEIF9fYXR0cmlidXRlX18oKHVudXNlZCkpDQorDQorI2VsaWYgZGVmaW5lZCBfX0lDQ0FSTV9fDQorI2RlZmluZSBfX1NJTUQzMl9UWVBFIGludDMyX3QgX19wYWNrZWQNCisjZGVmaW5lIENNU0lTX1VOVVNFRA0KKw0KKyNlbGlmIGRlZmluZWQgX19DU01DX18NCisjZGVmaW5lIF9fU0lNRDMyX1RZUEUgaW50MzJfdA0KKyNkZWZpbmUgQ01TSVNfVU5VU0VEDQorDQorI2VsaWYgZGVmaW5lZCBfX1RBU0tJTkdfXw0KKyNkZWZpbmUgX19TSU1EMzJfVFlQRSBfX3VuYWxpZ25lZCBpbnQzMl90DQorI2RlZmluZSBDTVNJU19VTlVTRUQNCisNCisjZWxzZQ0KKyNlcnJvciBVbmtub3duIGNvbXBpbGVyDQorI2VuZGlmDQorDQorI2RlZmluZSBfX1NJTUQzMihhZGRyKSAgICAgICAgKCooX19TSU1EMzJfVFlQRSAqKikgJiAoYWRkcikpDQorI2RlZmluZSBfX1NJTUQzMl9DT05TVChhZGRyKSAgKChfX1NJTUQzMl9UWVBFICopKGFkZHIpKQ0KKyNkZWZpbmUgX1NJTUQzMl9PRkZTRVQoYWRkcikgICgqKF9fU0lNRDMyX1RZUEUgKikgIChhZGRyKSkNCisjZGVmaW5lIF9fU0lNRDY0KGFkZHIpICAgICAgICAoKihpbnQ2NF90ICoqKSAmIChhZGRyKSkNCisNCisjaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00zKSB8fCBkZWZpbmVkIChBUk1fTUFUSF9DTTBfRkFNSUxZKQ0KKy8qKg0KKyAqIEBicmllZiBkZWZpbml0aW9uIHRvIHBhY2sgdHdvIDE2IGJpdCB2YWx1ZXMuDQorICovDQorI2RlZmluZSBfX1BLSEJUKEFSRzEsIEFSRzIsIEFSRzMpICAgICAgKCAoKChpbnQzMl90KShBUkcxKSA8PCAgMCkgJiAoaW50MzJfdCkweDAwMDBGRkZGKSB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGludDMyX3QpKEFSRzIpIDw8IEFSRzMpICYgKGludDMyX3QpMHhGRkZGMDAwMCkgICkNCisjZGVmaW5lIF9fUEtIVEIoQVJHMSwgQVJHMiwgQVJHMykgICAgICAoICgoKGludDMyX3QpKEFSRzEpIDw8ICAwKSAmIChpbnQzMl90KTB4RkZGRjAwMDApIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkoQVJHMikgPj4gQVJHMykgJiAoaW50MzJfdCkweDAwMDBGRkZGKSAgKQ0KKw0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyogQGJyaWVmIGRlZmluaXRpb24gdG8gcGFjayBmb3VyIDggYml0IHZhbHVlcy4NCisqLw0KKyNpZm5kZWYgQVJNX01BVEhfQklHX0VORElBTg0KKw0KKyNkZWZpbmUgX19QQUNLcTcodjAsdjEsdjIsdjMpICggKCgoaW50MzJfdCkodjApIDw8ICAwKSAmIChpbnQzMl90KTB4MDAwMDAwRkYpIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkodjEpIDw8ICA4KSAmIChpbnQzMl90KTB4MDAwMEZGMDApIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkodjIpIDw8IDE2KSAmIChpbnQzMl90KTB4MDBGRjAwMDApIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkodjMpIDw8IDI0KSAmIChpbnQzMl90KTB4RkYwMDAwMDApICApDQorI2Vsc2UNCisNCisjZGVmaW5lIF9fUEFDS3E3KHYwLHYxLHYyLHYzKSAoICgoKGludDMyX3QpKHYzKSA8PCAgMCkgJiAoaW50MzJfdCkweDAwMDAwMEZGKSB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGludDMyX3QpKHYyKSA8PCAgOCkgJiAoaW50MzJfdCkweDAwMDBGRjAwKSB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGludDMyX3QpKHYxKSA8PCAxNikgJiAoaW50MzJfdCkweDAwRkYwMDAwKSB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGludDMyX3QpKHYwKSA8PCAyNCkgJiAoaW50MzJfdCkweEZGMDAwMDAwKSAgKQ0KKw0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDbGlwcyBRNjMgdG8gUTMxIHZhbHVlcy4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgcTMxX3QgY2xpcF9xNjNfdG9fcTMxKA0KKyAgICBxNjNfdCB4KQ0KK3sNCisgICAgcmV0dXJuICgocTMxX3QpKHggPj4gMzIpICE9ICgocTMxX3QpIHggPj4gMzEpKSA/DQorICAgICAgICAgICAoKDB4N0ZGRkZGRkYgXiAoKHEzMV90KSh4ID4+IDYzKSkpKSA6IChxMzFfdCkgeDsNCit9DQorDQorLyoqDQorICogQGJyaWVmIENsaXBzIFE2MyB0byBRMTUgdmFsdWVzLg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSBxMTVfdCBjbGlwX3E2M190b19xMTUoDQorICAgIHE2M190IHgpDQorew0KKyAgICByZXR1cm4gKChxMzFfdCkoeCA+PiAzMikgIT0gKChxMzFfdCkgeCA+PiAzMSkpID8NCisgICAgICAgICAgICgoMHg3RkZGIF4gKChxMTVfdCkoeCA+PiA2MykpKSkgOiAocTE1X3QpKHggPj4gMTUpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgQ2xpcHMgUTMxIHRvIFE3IHZhbHVlcy4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgcTdfdCBjbGlwX3EzMV90b19xNygNCisgICAgcTMxX3QgeCkNCit7DQorICAgIHJldHVybiAoKHEzMV90KSh4ID4+IDI0KSAhPSAoKHEzMV90KSB4ID4+IDIzKSkgPw0KKyAgICAgICAgICAgKCgweDdGIF4gKChxN190KSh4ID4+IDMxKSkpKSA6IChxN190KSB4Ow0KK30NCisNCisvKioNCisgKiBAYnJpZWYgQ2xpcHMgUTMxIHRvIFExNSB2YWx1ZXMuDQorICovDQorc3RhdGljIF9fSU5MSU5FIHExNV90IGNsaXBfcTMxX3RvX3ExNSgNCisgICAgcTMxX3QgeCkNCit7DQorICAgIHJldHVybiAoKHEzMV90KSh4ID4+IDE2KSAhPSAoKHEzMV90KSB4ID4+IDE1KSkgPw0KKyAgICAgICAgICAgKCgweDdGRkYgXiAoKHExNV90KSh4ID4+IDMxKSkpKSA6IChxMTVfdCkgeDsNCit9DQorDQorLyoqDQorICogQGJyaWVmIE11bHRpcGxpZXMgMzIgWCA2NCBhbmQgcmV0dXJucyAzMiBiaXQgcmVzdWx0IGluIDIuMzAgZm9ybWF0Lg0KKyAqLw0KKw0KK3N0YXRpYyBfX0lOTElORSBxNjNfdCBtdWx0MzJ4NjQoDQorICAgIHE2M190IHgsDQorICAgIHEzMV90IHkpDQorew0KKyAgICByZXR1cm4gKCgoKHE2M190KSh4ICYgMHgwMDAwMDAwMEZGRkZGRkZGKSAqIHkpID4+IDMyKSArDQorICAgICAgICAgICAgKCgocTYzX3QpKHggPj4gMzIpICogeSkpKTsNCit9DQorDQorLyoNCisgICNpZiBkZWZpbmVkIChBUk1fTUFUSF9DTTBfRkFNSUxZKSAmJiBkZWZpbmVkICggX19DQ19BUk0gICApDQorICAjZGVmaW5lIF9fQ0xaIF9fY2x6DQorICAjZW5kaWYNCisgKi8NCisvKiBub3RlOiBmdW5jdGlvbiBjYW4gYmUgcmVtb3ZlZCB3aGVuIGFsbCB0b29sY2hhaW4gc3VwcG9ydCBfX0NMWiBmb3IgQ29ydGV4LU0wICovDQorI2lmIGRlZmluZWQgKEFSTV9NQVRIX0NNMF9GQU1JTFkpICYmICgoZGVmaW5lZCAoX19JQ0NBUk1fXykpICApDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fQ0xaKA0KKyAgICBxMzFfdCBkYXRhKTsNCisNCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19DTFooDQorICAgIHEzMV90IGRhdGEpDQorew0KKyAgICB1aW50MzJfdCBjb3VudCA9IDA7DQorICAgIHVpbnQzMl90IG1hc2sgPSAweDgwMDAwMDAwOw0KKw0KKyAgICB3aGlsZSAoKGRhdGEgJiBtYXNrKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBjb3VudCArPSAxdTsNCisgICAgICAgIG1hc2sgPSBtYXNrID4+IDF1Ow0KKyAgICB9DQorDQorICAgIHJldHVybiAoY291bnQpOw0KK30NCisjZW5kaWYNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gdG8gQ2FsY3VsYXRlcyAxL2luIChyZWNpcHJvY2FsKSB2YWx1ZSBvZiBRMzEgRGF0YSB0eXBlLg0KKyAqLw0KKw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBhcm1fcmVjaXBfcTMxKA0KKyAgICBxMzFfdCBpbiwNCisgICAgcTMxX3QgKmRzdCwNCisgICAgcTMxX3QgKnBSZWNpcFRhYmxlKQ0KK3sNCisgICAgcTMxX3Qgb3V0Ow0KKyAgICB1aW50MzJfdCB0ZW1wVmFsOw0KKyAgICB1aW50MzJfdCBpbmRleCwgaTsNCisgICAgdWludDMyX3Qgc2lnbkJpdHM7DQorDQorICAgIGlmIChpbiA+IDApDQorICAgIHsNCisgICAgICAgIHNpZ25CaXRzID0gKCh1aW50MzJfdCkoX19DTFooaW4pIC0gMSkpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgc2lnbkJpdHMgPSAoKHVpbnQzMl90KShfX0NMWigtaW4pIC0gMSkpOw0KKyAgICB9DQorDQorICAgIC8qIENvbnZlcnQgaW5wdXQgc2FtcGxlIHRvIDEuMzEgZm9ybWF0ICovDQorICAgIGluID0gKGluIDw8IHNpZ25CaXRzKTsNCisNCisgICAgLyogY2FsY3VsYXRpb24gb2YgaW5kZXggZm9yIGluaXRpYWwgYXBwcm94aW1hdGVkIFZhbCAqLw0KKyAgICBpbmRleCA9ICh1aW50MzJfdCkoaW4gPj4gMjQpOw0KKyAgICBpbmRleCA9IChpbmRleCAmIElOREVYX01BU0spOw0KKw0KKyAgICAvKiAxLjMxIHdpdGggZXhwIDEgKi8NCisgICAgb3V0ID0gcFJlY2lwVGFibGVbaW5kZXhdOw0KKw0KKyAgICAvKiBjYWxjdWxhdGlvbiBvZiByZWNpcHJvY2FsIHZhbHVlICovDQorICAgIC8qIHJ1bm5pbmcgYXBwcm94aW1hdGlvbiBmb3IgdHdvIGl0ZXJhdGlvbnMgKi8NCisgICAgZm9yIChpID0gMHU7IGkgPCAydTsgaSsrKQ0KKyAgICB7DQorICAgICAgICB0ZW1wVmFsID0gKHVpbnQzMl90KSgoKHE2M190KSBpbiAqIG91dCkgPj4gMzEpOw0KKyAgICAgICAgdGVtcFZhbCA9IDB4N0ZGRkZGRkZ1IC0gdGVtcFZhbDsNCisgICAgICAgIC8qICAgICAgMS4zMSB3aXRoIGV4cCAxICovDQorICAgICAgICAvKiBvdXQgPSAocTMxX3QpICgoKHE2M190KSBvdXQgKiB0ZW1wVmFsKSA+PiAzMCk7ICovDQorICAgICAgICBvdXQgPSBjbGlwX3E2M190b19xMzEoKChxNjNfdCkgb3V0ICogdGVtcFZhbCkgPj4gMzApOw0KKyAgICB9DQorDQorICAgIC8qIHdyaXRlIG91dHB1dCAqLw0KKyAgICAqZHN0ID0gb3V0Ow0KKw0KKyAgICAvKiByZXR1cm4gbnVtIG9mIHNpZ25iaXRzIG9mIG91dCA9IDEvaW4gdmFsdWUgKi8NCisgICAgcmV0dXJuIChzaWduQml0cyArIDF1KTsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIHRvIENhbGN1bGF0ZXMgMS9pbiAocmVjaXByb2NhbCkgdmFsdWUgb2YgUTE1IERhdGEgdHlwZS4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgYXJtX3JlY2lwX3ExNSgNCisgICAgcTE1X3QgaW4sDQorICAgIHExNV90ICpkc3QsDQorICAgIHExNV90ICpwUmVjaXBUYWJsZSkNCit7DQorICAgIHExNV90IG91dCA9IDA7DQorICAgIHVpbnQzMl90IHRlbXBWYWwgPSAwOw0KKyAgICB1aW50MzJfdCBpbmRleCA9IDAsIGkgPSAwOw0KKyAgICB1aW50MzJfdCBzaWduQml0cyA9IDA7DQorDQorICAgIGlmIChpbiA+IDApDQorICAgIHsNCisgICAgICAgIHNpZ25CaXRzID0gKCh1aW50MzJfdCkoX19DTFooaW4pIC0gMTcpKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHNpZ25CaXRzID0gKCh1aW50MzJfdCkoX19DTFooLWluKSAtIDE3KSk7DQorICAgIH0NCisNCisgICAgLyogQ29udmVydCBpbnB1dCBzYW1wbGUgdG8gMS4xNSBmb3JtYXQgKi8NCisgICAgaW4gPSAoaW4gPDwgc2lnbkJpdHMpOw0KKw0KKyAgICAvKiBjYWxjdWxhdGlvbiBvZiBpbmRleCBmb3IgaW5pdGlhbCBhcHByb3hpbWF0ZWQgVmFsICovDQorICAgIGluZGV4ID0gKHVpbnQzMl90KShpbiA+PiAgOCk7DQorICAgIGluZGV4ID0gKGluZGV4ICYgSU5ERVhfTUFTSyk7DQorDQorICAgIC8qICAgICAgMS4xNSB3aXRoIGV4cCAxICAqLw0KKyAgICBvdXQgPSBwUmVjaXBUYWJsZVtpbmRleF07DQorDQorICAgIC8qIGNhbGN1bGF0aW9uIG9mIHJlY2lwcm9jYWwgdmFsdWUgKi8NCisgICAgLyogcnVubmluZyBhcHByb3hpbWF0aW9uIGZvciB0d28gaXRlcmF0aW9ucyAqLw0KKyAgICBmb3IgKGkgPSAwdTsgaSA8IDJ1OyBpKyspDQorICAgIHsNCisgICAgICAgIHRlbXBWYWwgPSAodWludDMyX3QpKCgocTMxX3QpIGluICogb3V0KSA+PiAxNSk7DQorICAgICAgICB0ZW1wVmFsID0gMHg3RkZGdSAtIHRlbXBWYWw7DQorICAgICAgICAvKiAgICAgIDEuMTUgd2l0aCBleHAgMSAqLw0KKyAgICAgICAgb3V0ID0gKHExNV90KSgoKHEzMV90KSBvdXQgKiB0ZW1wVmFsKSA+PiAxNCk7DQorICAgICAgICAvKiBvdXQgPSBjbGlwX3EzMV90b19xMTUoKChxMzFfdCkgb3V0ICogdGVtcFZhbCkgPj4gMTQpOyAqLw0KKyAgICB9DQorDQorICAgIC8qIHdyaXRlIG91dHB1dCAqLw0KKyAgICAqZHN0ID0gb3V0Ow0KKw0KKyAgICAvKiByZXR1cm4gbnVtIG9mIHNpZ25iaXRzIG9mIG91dCA9IDEvaW4gdmFsdWUgKi8NCisgICAgcmV0dXJuIChzaWduQml0cyArIDEpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIGludHJpbmlzaWMgZnVuY3Rpb24gZm9yIG9ubHkgTTAgcHJvY2Vzc29ycw0KKyAqLw0KKyNpZiBkZWZpbmVkKEFSTV9NQVRIX0NNMF9GQU1JTFkpDQorc3RhdGljIF9fSU5MSU5FIHEzMV90IF9fU1NBVCgNCisgICAgcTMxX3QgeCwNCisgICAgdWludDMyX3QgeSkNCit7DQorICAgIGludDMyX3QgcG9zTWF4LCBuZWdNaW47DQorICAgIHVpbnQzMl90IGk7DQorDQorICAgIHBvc01heCA9IDE7DQorDQorICAgIGZvciAoaSA9IDA7IGkgPCAoeSAtIDEpOyBpKyspDQorICAgIHsNCisgICAgICAgIHBvc01heCA9IHBvc01heCAqIDI7DQorICAgIH0NCisNCisgICAgaWYgKHggPiAwKQ0KKyAgICB7DQorICAgICAgICBwb3NNYXggPSAocG9zTWF4IC0gMSk7DQorDQorICAgICAgICBpZiAoeCA+IHBvc01heCkNCisgICAgICAgIHsNCisgICAgICAgICAgICB4ID0gcG9zTWF4Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgbmVnTWluID0gLXBvc01heDsNCisNCisgICAgICAgIGlmICh4IDwgbmVnTWluKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHggPSBuZWdNaW47DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuICh4KTsNCit9DQorI2VuZGlmIC8qIGVuZCBvZiBBUk1fTUFUSF9DTTBfRkFNSUxZICovDQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBpbnRyaW5zaWMgZnVuY3Rpb24gZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorI2lmIGRlZmluZWQgKEFSTV9NQVRIX0NNMykgfHwgZGVmaW5lZCAoQVJNX01BVEhfQ00wX0ZBTUlMWSkNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFBREQ4IGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycw0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1FBREQ4KA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5KQ0KK3sNCisgICAgcTMxX3QgciwgcywgdCwgdTsNCisNCisgICAgciA9IF9fU1NBVCgoKCgocTMxX3QpeCA8PCAyNCkgPj4gMjQpICsgKCgocTMxX3QpeSA8PCAyNCkgPj4gMjQpKSwgOCkgJiAoaW50MzJfdCkweDAwMDAwMEZGOw0KKyAgICBzID0gX19TU0FUKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAyNCkgKyAoKChxMzFfdCl5IDw8IDE2KSA+PiAyNCkpLCA4KSAmIChpbnQzMl90KTB4MDAwMDAwRkY7DQorICAgIHQgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgIDgpID4+IDI0KSArICgoKHEzMV90KXkgPDwgIDgpID4+IDI0KSksIDgpICYgKGludDMyX3QpMHgwMDAwMDBGRjsNCisgICAgdSA9IF9fU1NBVCgoKCgocTMxX3QpeCkgPj4gMjQpICsgKCgocTMxX3QpeSkgPj4gMjQpKSwgOCkgJiAoaW50MzJfdCkweDAwMDAwMEZGOw0KKw0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKHUgPDwgMjQpIHwgKHQgPDwgMTYpIHwgKHMgPDwgIDgpIHwgKHIpKSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgUVNVQjggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fUVNVQjgoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHkpDQorew0KKyAgICBxMzFfdCByLCBzLCB0LCB1Ow0KKw0KKyAgICByID0gX19TU0FUKCgoKChxMzFfdCl4IDw8IDI0KSA+PiAyNCkgLSAoKChxMzFfdCl5IDw8IDI0KSA+PiAyNCkpLCA4KSAmIChpbnQzMl90KTB4MDAwMDAwRkY7DQorICAgIHMgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDI0KSAtICgoKHEzMV90KXkgPDwgMTYpID4+IDI0KSksIDgpICYgKGludDMyX3QpMHgwMDAwMDBGRjsNCisgICAgdCA9IF9fU1NBVCgoKCgocTMxX3QpeCA8PCAgOCkgPj4gMjQpIC0gKCgocTMxX3QpeSA8PCAgOCkgPj4gMjQpKSwgOCkgJiAoaW50MzJfdCkweDAwMDAwMEZGOw0KKyAgICB1ID0gX19TU0FUKCgoKChxMzFfdCl4KSA+PiAyNCkgLSAoKChxMzFfdCl5KSA+PiAyNCkpLCA4KSAmIChpbnQzMl90KTB4MDAwMDAwRkY7DQorDQorICAgIHJldHVybiAoKHVpbnQzMl90KSgodSA8PCAyNCkgfCAodCA8PCAxNikgfCAocyA8PCAgOCkgfCAocikpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBRQUREMTYgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fUUFERDE2KA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5KQ0KK3sNCisgICAgLyogIHEzMV90IHIsICAgICBzOyAgd2l0aG91dCBpbml0aWFsaXNhdGlvbiAnYXJtX29mZnNldF9xMTUgdGVzdCcgZmFpbHMgIGJ1dCAnaW50cmluc2ljJyB0ZXN0cyBwYXNzISBmb3IgYXJtQ0MgKi8NCisgICAgcTMxX3QgciA9IDAsIHMgPSAwOw0KKw0KKyAgICByID0gX19TU0FUKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKyAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpLCAxNikgJiAoaW50MzJfdCkweDAwMDBGRkZGOw0KKyAgICBzID0gX19TU0FUKCgoKChxMzFfdCl4KSA+PiAxNikgKyAoKChxMzFfdCl5KSA+PiAxNikpLCAxNikgJiAoaW50MzJfdCkweDAwMDBGRkZGOw0KKw0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKHMgPDwgMTYpIHwgKHIpKSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU0hBREQxNiBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TSEFERDE2KA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5KQ0KK3sNCisgICAgcTMxX3QgciwgczsNCisNCisgICAgciA9ICgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICsgKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSA+PiAxKSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorICAgIHMgPSAoKCgoKHEzMV90KXgpID4+IDE2KSArICgoKHEzMV90KXkpID4+IDE2KSkgPj4gMSkgJiAoaW50MzJfdCkweDAwMDBGRkZGOw0KKw0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKHMgPDwgMTYpIHwgKHIpKSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgUVNVQjE2IGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycw0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1FTVUIxNigNCisgICAgdWludDMyX3QgeCwNCisgICAgdWludDMyX3QgeSkNCit7DQorICAgIHEzMV90IHIsIHM7DQorDQorICAgIHIgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAtICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorICAgIHMgPSBfX1NTQVQoKCgoKHEzMV90KXgpID4+IDE2KSAtICgoKHEzMV90KXkpID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorDQorICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAocikpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTSFNVQjE2IGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycw0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NIU1VCMTYoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHkpDQorew0KKyAgICBxMzFfdCByLCBzOw0KKw0KKyAgICByID0gKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgLSAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsNCisgICAgcyA9ICgoKCgocTMxX3QpeCkgPj4gMTYpIC0gKCgocTMxX3QpeSkgPj4gMTYpKSA+PiAxKSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorDQorICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAocikpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBRQVNYIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycw0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1FBU1goDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHkpDQorew0KKyAgICBxMzFfdCByLCBzOw0KKw0KKyAgICByID0gX19TU0FUKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgLSAoKChxMzFfdCl5KSA+PiAxNikpLCAxNikgJiAoaW50MzJfdCkweDAwMDBGRkZGOw0KKyAgICBzID0gX19TU0FUKCgoKChxMzFfdCl4KSA+PiAxNikgKyAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpLCAxNikgJiAoaW50MzJfdCkweDAwMDBGRkZGOw0KKw0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKHMgPDwgMTYpIHwgKHIpKSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU0hBU1ggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU0hBU1goDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHkpDQorew0KKyAgICBxMzFfdCByLCBzOw0KKw0KKyAgICByID0gKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgLSAoKChxMzFfdCl5KSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsNCisgICAgcyA9ICgoKCgocTMxX3QpeCkgPj4gMTYpICsgKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSA+PiAxKSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorDQorICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAocikpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBRU0FYIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycw0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1FTQVgoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHkpDQorew0KKyAgICBxMzFfdCByLCBzOw0KKw0KKyAgICByID0gX19TU0FUKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKyAoKChxMzFfdCl5KSA+PiAxNikpLCAxNikgJiAoaW50MzJfdCkweDAwMDBGRkZGOw0KKyAgICBzID0gX19TU0FUKCgoKChxMzFfdCl4KSA+PiAxNikgLSAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpLCAxNikgJiAoaW50MzJfdCkweDAwMDBGRkZGOw0KKw0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKHMgPDwgMTYpIHwgKHIpKSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU0hTQVggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU0hTQVgoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHkpDQorew0KKyAgICBxMzFfdCByLCBzOw0KKw0KKyAgICByID0gKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKyAoKChxMzFfdCl5KSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsNCisgICAgcyA9ICgoKCgocTMxX3QpeCkgPj4gMTYpIC0gKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSA+PiAxKSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorDQorICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAocikpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTTVVTRFggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01VU0RYKA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5KQ0KK3sNCisgICAgcmV0dXJuICgodWludDMyX3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5KSA+PiAxNikpIC0NCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4KSA+PiAxNikgKiAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpKSk7DQorfQ0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01VQURYIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycw0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NNVUFEWCgNCisgICAgdWludDMyX3QgeCwNCisgICAgdWludDMyX3QgeSkNCit7DQorICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSkgPj4gMTYpKSArDQorICAgICAgICAgICAgICAgICAgICAgICAoKCgocTMxX3QpeCkgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFBREQgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIGludDMyX3QgX19RQUREKA0KKyAgICBpbnQzMl90IHgsDQorICAgIGludDMyX3QgeSkNCit7DQorICAgIHJldHVybiAoKGludDMyX3QpKGNsaXBfcTYzX3RvX3EzMSgocTYzX3QpeCArIChxMzFfdCl5KSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFTVUIgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIGludDMyX3QgX19RU1VCKA0KKyAgICBpbnQzMl90IHgsDQorICAgIGludDMyX3QgeSkNCit7DQorICAgIHJldHVybiAoKGludDMyX3QpKGNsaXBfcTYzX3RvX3EzMSgocTYzX3QpeCAtIChxMzFfdCl5KSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNTEFEIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycw0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NNTEFEKA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5LA0KKyAgICB1aW50MzJfdCBzdW0pDQorew0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAqICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgKw0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXgpID4+IDE2KSAqICgoKHEzMV90KXkpID4+IDE2KSkgKw0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgocTMxX3Qpc3VtKSkpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTTUxBRFggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01MQURYKA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5LA0KKyAgICB1aW50MzJfdCBzdW0pDQorew0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAqICgoKHEzMV90KXkpID4+IDE2KSkgKw0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXgpID4+IDE2KSAqICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgKw0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgocTMxX3Qpc3VtKSkpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTTUxTRFggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01MU0RYKA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5LA0KKyAgICB1aW50MzJfdCBzdW0pDQorew0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAqICgoKHEzMV90KXkpID4+IDE2KSkgLQ0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXgpID4+IDE2KSAqICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgKw0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgocTMxX3Qpc3VtKSkpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTTUxBTEQgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEKA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5LA0KKyAgICB1aW50NjRfdCBzdW0pDQorew0KKyAgICAvKiAgcmV0dXJuIChzdW0gKyAoKHExNV90KSAoeCA+PiAxNikgKiAocTE1X3QpICh5ID4+IDE2KSkgKyAoKHExNV90KSB4ICogKHExNV90KSB5KSk7ICovDQorICAgIHJldHVybiAoKHVpbnQ2NF90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSArDQorICAgICAgICAgICAgICAgICAgICAgICAoKCgocTMxX3QpeCkgPj4gMTYpICogKCgocTMxX3QpeSkgPj4gMTYpKSArDQorICAgICAgICAgICAgICAgICAgICAgICAoKChxNjNfdClzdW0pKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNTEFMRFggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEWCgNCisgICAgdWludDMyX3QgeCwNCisgICAgdWludDMyX3QgeSwNCisgICAgdWludDY0X3Qgc3VtKQ0KK3sNCisgICAgLyogIHJldHVybiAoc3VtICsgKChxMTVfdCkgKHggPj4gMTYpICogKHExNV90KSB5KSkgKyAoKHExNV90KSB4ICogKHExNV90KSAoeSA+PiAxNikpOyAqLw0KKyAgICByZXR1cm4gKCh1aW50NjRfdCkoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAqICgoKHEzMV90KXkpID4+IDE2KSkgKw0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXgpID4+IDE2KSAqICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgKw0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgocTYzX3Qpc3VtKSkpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTTVVBRCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TTVVBRCgNCisgICAgdWludDMyX3QgeCwNCisgICAgdWludDMyX3QgeSkNCit7DQorICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSArDQorICAgICAgICAgICAgICAgICAgICAgICAoKCgocTMxX3QpeCkgPj4gMTYpICogKCgocTMxX3QpeSkgPj4gMTYpKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNVVNEIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycw0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NNVVNEKA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5KQ0KK3sNCisgICAgcmV0dXJuICgodWludDMyX3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpIC0NCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4KSA+PiAxNikgKiAoKChxMzFfdCl5KSA+PiAxNikpKSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU1hUQjE2IGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycw0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NYVEIxNigNCisgICAgdWludDMyX3QgeCkNCit7DQorICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAyNCkgPj4gMjQpICYgKHEzMV90KTB4MDAwMEZGRkYpIHwNCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4IDw8ICA4KSA+PiAgOCkgJiAocTMxX3QpMHhGRkZGMDAwMCkpKTsNCit9DQorDQorI2VuZGlmIC8qIGRlZmluZWQgKEFSTV9NQVRIX0NNMykgfHwgZGVmaW5lZCAoQVJNX01BVEhfQ00wX0ZBTUlMWSkgKi8NCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTcgRklSIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgIC8qKjwgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgcTdfdCAqcFN0YXRlOyAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzICsgYmxvY2tTaXplLTEuICovDQorICAgIHE3X3QgKnBDb2VmZnM7ICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4qLw0KK30gYXJtX2Zpcl9pbnN0YW5jZV9xNzsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IEZJUiBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAgICAgLyoqPCBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzICsgYmxvY2tTaXplLTEuICovDQorICAgIHExNV90ICpwQ29lZmZzOyAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8NCit9IGFybV9maXJfaW5zdGFuY2VfcTE1Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgRklSIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAvKio8IG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovDQorICAgIHEzMV90ICpwU3RhdGU7ICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMgKyBibG9ja1NpemUtMS4gKi8NCisgICAgcTMxX3QgKnBDb2VmZnM7ICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8NCit9IGFybV9maXJfaW5zdGFuY2VfcTMxOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgLyoqPCBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMgKyBibG9ja1NpemUtMS4gKi8NCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLw0KK30gYXJtX2Zpcl9pbnN0YW5jZV9mMzI7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRNyBGSVIgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRNyBGSVIgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9xNygNCisgICAgY29uc3QgYXJtX2Zpcl9pbnN0YW5jZV9xNyAqUywNCisgICAgcTdfdCAqcFNyYywNCisgICAgcTdfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTcgRklSIGZpbHRlci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTcgRklSIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIE51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgYXJlIHByb2Nlc3NlZC4NCisgKi8NCit2b2lkIGFybV9maXJfaW5pdF9xNygNCisgICAgYXJtX2Zpcl9pbnN0YW5jZV9xNyAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgcTdfdCAqcENvZWZmcywNCisgICAgcTdfdCAqcFN0YXRlLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fZmlyX3ExNSgNCisgICAgY29uc3QgYXJtX2Zpcl9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZhc3QgUTE1IEZJUiBmaWx0ZXIgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00Lg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9maXJfZmFzdF9xMTUoDQorICAgIGNvbnN0IGFybV9maXJfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBOdW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiBNdXN0IGJlIGV2ZW4gYW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA0Lg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IGFyZSBwcm9jZXNzZWQgYXQgYSB0aW1lLg0KKyAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZg0KKyAqIDxjb2RlPm51bVRhcHM8L2NvZGU+IGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZS4NCisgKi8NCithcm1fc3RhdHVzIGFybV9maXJfaW5pdF9xMTUoDQorICAgIGFybV9maXJfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICB1aW50MTZfdCBudW1UYXBzLA0KKyAgICBxMTVfdCAqcENvZWZmcywNCisgICAgcTE1X3QgKnBTdGF0ZSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBGSVIgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9maXJfcTMxKA0KKyAgICBjb25zdCBhcm1fZmlyX2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmFzdCBRMzEgRklSIGZpbHRlciBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBGSVIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fZmlyX2Zhc3RfcTMxKA0KKyAgICBjb25zdCBhcm1fZmlyX2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGZpbHRlci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEZJUiBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBOdW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IGFyZSBwcm9jZXNzZWQgYXQgYSB0aW1lLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9pbml0X3EzMSgNCisgICAgYXJtX2Zpcl9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIHEzMV90ICpwQ29lZmZzLA0KKyAgICBxMzFfdCAqcFN0YXRlLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgRklSIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9mMzIoDQorICAgIGNvbnN0IGFybV9maXJfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGZpbHRlci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBOdW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IGFyZSBwcm9jZXNzZWQgYXQgYSB0aW1lLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9pbml0X2YzMigNCisgICAgYXJtX2Zpcl9pbnN0YW5jZV9mMzIgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIGZsb2F0MzJfdCAqcENvZWZmcywNCisgICAgZmxvYXQzMl90ICpwU3RhdGUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIGludDhfdCBudW1TdGFnZXM7ICAgICAgICAvKio8IG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICBPdmVyYWxsIG9yZGVyIGlzIDIqbnVtU3RhZ2VzLiAqLw0KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAgICAgLyoqPCBQb2ludHMgdG8gdGhlIGFycmF5IG9mIHN0YXRlIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNCpudW1TdGFnZXMuICovDQorICAgIHExNV90ICpwQ29lZmZzOyAgICAgICAgICAvKio8IFBvaW50cyB0byB0aGUgYXJyYXkgb2YgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA1Km51bVN0YWdlcy4gKi8NCisgICAgaW50OF90IHBvc3RTaGlmdDsgICAgICAgIC8qKjwgQWRkaXRpb25hbCBzaGlmdCwgaW4gYml0cywgYXBwbGllZCB0byBlYWNoIG91dHB1dCBzYW1wbGUuICovDQorfSBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfcTE1Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MzJfdCBudW1TdGFnZXM7ICAgICAgLyoqPCBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAgT3ZlcmFsbCBvcmRlciBpcyAyKm51bVN0YWdlcy4gKi8NCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgIC8qKjwgUG9pbnRzIHRvIHRoZSBhcnJheSBvZiBzdGF0ZSBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDQqbnVtU3RhZ2VzLiAqLw0KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgICAgLyoqPCBQb2ludHMgdG8gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNSpudW1TdGFnZXMuICovDQorICAgIHVpbnQ4X3QgcG9zdFNoaWZ0OyAgICAgICAvKio8IEFkZGl0aW9uYWwgc2hpZnQsIGluIGJpdHMsIGFwcGxpZWQgdG8gZWFjaCBvdXRwdXQgc2FtcGxlLiAqLw0KK30gYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3EzMTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MzJfdCBudW1TdGFnZXM7ICAgICAgLyoqPCBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAgT3ZlcmFsbCBvcmRlciBpcyAyKm51bVN0YWdlcy4gKi8NCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgIC8qKjwgUG9pbnRzIHRvIHRoZSBhcnJheSBvZiBzdGF0ZSBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDQqbnVtU3RhZ2VzLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgICAgLyoqPCBQb2ludHMgdG8gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNSpudW1TdGFnZXMuICovDQorfSBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfZjMyOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9xMTUoDQorICAgIGNvbnN0IGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9xMTUgKlMsDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1TdGFnZXMgIG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBwb3N0U2hpZnQgIFNoaWZ0IHRvIGJlIGFwcGxpZWQgdG8gdGhlIG91dHB1dC4gVmFyaWVzIGFjY29yZGluZyB0byB0aGUgY29lZmZpY2llbnRzIGZvcm1hdA0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9pbml0X3ExNSgNCisgICAgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3ExNSAqUywNCisgICAgdWludDhfdCBudW1TdGFnZXMsDQorICAgIHExNV90ICpwQ29lZmZzLA0KKyAgICBxMTVfdCAqcFN0YXRlLA0KKyAgICBpbnQ4X3QgcG9zdFNoaWZ0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRmFzdCBidXQgbGVzcyBwcmVjaXNlIHByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgQmlxdWFkIGNhc2NhZGUgZmlsdGVyIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNC4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9mYXN0X3ExNSgNCisgICAgY29uc3QgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3ExNSAqUywNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEJpcXVhZCBjYXNjYWRlIGZpbHRlcg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgQmlxdWFkIGNhc2NhZGUgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX3EzMSgNCisgICAgY29uc3QgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGYXN0IGJ1dCBsZXNzIHByZWNpc2UgcHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00Lg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgQmlxdWFkIGNhc2NhZGUgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX2Zhc3RfcTMxKA0KKyAgICBjb25zdCBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfcTMxICpTLA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFEzMSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBCaXF1YWQgY2FzY2FkZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgbnVtU3RhZ2VzICBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgcG9zdFNoaWZ0ICBTaGlmdCB0byBiZSBhcHBsaWVkIHRvIHRoZSBvdXRwdXQuIFZhcmllcyBhY2NvcmRpbmcgdG8gdGhlIGNvZWZmaWNpZW50cyBmb3JtYXQNCisgKi8NCit2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjFfaW5pdF9xMzEoDQorICAgIGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9xMzEgKlMsDQorICAgIHVpbnQ4X3QgbnVtU3RhZ2VzLA0KKyAgICBxMzFfdCAqcENvZWZmcywNCisgICAgcTMxX3QgKnBTdGF0ZSwNCisgICAgaW50OF90IHBvc3RTaGlmdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9mMzIoDQorICAgIGNvbnN0IGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1TdGFnZXMgIG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKi8NCit2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjFfaW5pdF9mMzIoDQorICAgIGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9mMzIgKlMsDQorICAgIHVpbnQ4X3QgbnVtU3RhZ2VzLA0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnMsDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgbWF0cml4IHN0cnVjdHVyZS4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtUm93czsgICAgIC8qKjwgbnVtYmVyIG9mIHJvd3Mgb2YgdGhlIG1hdHJpeC4gICAgICovDQorICAgIHVpbnQxNl90IG51bUNvbHM7ICAgICAvKio8IG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBtYXRyaXguICAqLw0KKyAgICBmbG9hdDMyX3QgKnBEYXRhOyAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGRhdGEgb2YgdGhlIG1hdHJpeC4gKi8NCit9IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1Sb3dzOyAgICAgLyoqPCBudW1iZXIgb2Ygcm93cyBvZiB0aGUgbWF0cml4LiAgICAgKi8NCisgICAgdWludDE2X3QgbnVtQ29sczsgICAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIG1hdHJpeC4gICovDQorICAgIGZsb2F0NjRfdCAqcERhdGE7ICAgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSBvZiB0aGUgbWF0cml4LiAqLw0KK30gYXJtX21hdHJpeF9pbnN0YW5jZV9mNjQ7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBtYXRyaXggc3RydWN0dXJlLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1Sb3dzOyAgICAgLyoqPCBudW1iZXIgb2Ygcm93cyBvZiB0aGUgbWF0cml4LiAgICAgKi8NCisgICAgdWludDE2X3QgbnVtQ29sczsgICAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIG1hdHJpeC4gICovDQorICAgIHExNV90ICpwRGF0YTsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSBvZiB0aGUgbWF0cml4LiAqLw0KK30gYXJtX21hdHJpeF9pbnN0YW5jZV9xMTU7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBtYXRyaXggc3RydWN0dXJlLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1Sb3dzOyAgICAgLyoqPCBudW1iZXIgb2Ygcm93cyBvZiB0aGUgbWF0cml4LiAgICAgKi8NCisgICAgdWludDE2X3QgbnVtQ29sczsgICAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIG1hdHJpeC4gICovDQorICAgIHEzMV90ICpwRGF0YTsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSBvZiB0aGUgbWF0cml4LiAqLw0KK30gYXJtX21hdHJpeF9pbnN0YW5jZV9xMzE7DQorDQorDQorLyoqDQorICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IG1hdHJpeCBhZGRpdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfYWRkX2YzMigNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTE1IG1hdHJpeCBhZGRpdGlvbi4NCisgKiBAcGFyYW1baW5dICAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbl0gICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtvdXRdICBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfYWRkX3ExNSgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTMxIG1hdHJpeCBhZGRpdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfYWRkX3EzMSgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQsIGNvbXBsZXgsIG1hdHJpeCBtdWx0aXBsaWNhdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfY21wbHhfbXVsdF9mMzIoDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpwU3JjQSwNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnBTcmNCLA0KKyAgICBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFExNSwgY29tcGxleCwgIG1hdHJpeCBtdWx0aXBsaWNhdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfY21wbHhfbXVsdF9xMTUoDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwU3JjQSwNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBTcmNCLA0KKyAgICBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcERzdCwNCisgICAgcTE1X3QgKnBTY3JhdGNoKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTMxLCBjb21wbGV4LCBtYXRyaXggbXVsdGlwbGljYXRpb24uDQorICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcg0KKyAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuDQorICovDQorYXJtX3N0YXR1cyBhcm1fbWF0X2NtcGx4X211bHRfcTMxKA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcFNyY0EsDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwU3JjQiwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGbG9hdGluZy1wb2ludCBtYXRyaXggdHJhbnNwb3NlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgIHBvaW50cyB0byB0aGUgaW5wdXQgbWF0cml4DQorICogQHBhcmFtW291dF0gcERzdCAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgbWF0cml4DQorICogQHJldHVybiAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIgIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+DQorICogb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfdHJhbnNfZjMyKA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcFNyYywNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMTUgbWF0cml4IHRyYW5zcG9zZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICBwb2ludHMgdG8gdGhlIGlucHV0IG1hdHJpeA0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgIHBvaW50cyB0byB0aGUgb3V0cHV0IG1hdHJpeA0KKyAqIEByZXR1cm4gICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyICA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPg0KKyAqIG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuDQorICovDQorYXJtX3N0YXR1cyBhcm1fbWF0X3RyYW5zX3ExNSgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBTcmMsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTMxIG1hdHJpeCB0cmFuc3Bvc2UuDQorICogQHBhcmFtW2luXSAgcFNyYyAgcG9pbnRzIHRvIHRoZSBpbnB1dCBtYXRyaXgNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICBwb2ludHMgdG8gdGhlIG91dHB1dCBtYXRyaXgNCisgKiBAcmV0dXJuICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciAgPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4NCisgKiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF90cmFuc19xMzEoDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwU3JjLA0KKyAgICBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IG1hdHJpeCBtdWx0aXBsaWNhdGlvbg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9tdWx0X2YzMigNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTE1IG1hdHJpeCBtdWx0aXBsaWNhdGlvbg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgcFNyY0IgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW291dF0gcERzdCAgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3RhdGUgIHBvaW50cyB0byB0aGUgYXJyYXkgZm9yIHN0b3JpbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9tdWx0X3ExNSgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwRHN0LA0KKyAgICBxMTVfdCAqcFN0YXRlKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTE1IG1hdHJpeCBtdWx0aXBsaWNhdGlvbiAoZmFzdCB2YXJpYW50KSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgcFN0YXRlICBwb2ludHMgdG8gdGhlIGFycmF5IGZvciBzdG9yaW5nIGludGVybWVkaWF0ZSByZXN1bHRzDQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfbXVsdF9mYXN0X3ExNSgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwRHN0LA0KKyAgICBxMTVfdCAqcFN0YXRlKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTMxIG1hdHJpeCBtdWx0aXBsaWNhdGlvbg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9tdWx0X3EzMSgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTMxIG1hdHJpeCBtdWx0aXBsaWNhdGlvbiAoZmFzdCB2YXJpYW50KSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfbXVsdF9mYXN0X3EzMSgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgbWF0cml4IHN1YnRyYWN0aW9uDQorICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcg0KKyAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuDQorICovDQorYXJtX3N0YXR1cyBhcm1fbWF0X3N1Yl9mMzIoDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpwU3JjQSwNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnBTcmNCLA0KKyAgICBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFExNSBtYXRyaXggc3VidHJhY3Rpb24NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfc3ViX3ExNSgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTMxIG1hdHJpeCBzdWJ0cmFjdGlvbg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9zdWJfcTMxKA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcFNyY0EsDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwU3JjQiwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGbG9hdGluZy1wb2ludCBtYXRyaXggc2NhbGluZy4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBtYXRyaXgNCisgKiBAcGFyYW1baW5dICBzY2FsZSAgc2NhbGUgZmFjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byB0aGUgb3V0cHV0IG1hdHJpeA0KKyAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcg0KKyAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuDQorICovDQorYXJtX3N0YXR1cyBhcm1fbWF0X3NjYWxlX2YzMigNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnBTcmMsDQorICAgIGZsb2F0MzJfdCBzY2FsZSwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMTUgbWF0cml4IHNjYWxpbmcuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIGlucHV0IG1hdHJpeA0KKyAqIEBwYXJhbVtpbl0gIHNjYWxlRnJhY3QgIGZyYWN0aW9uYWwgcG9ydGlvbiBvZiB0aGUgc2NhbGUgZmFjdG9yDQorICogQHBhcmFtW2luXSAgc2hpZnQgICAgICAgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgdGhlIHJlc3VsdCBieQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4DQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfc2NhbGVfcTE1KA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcFNyYywNCisgICAgcTE1X3Qgc2NhbGVGcmFjdCwNCisgICAgaW50MzJfdCBzaGlmdCwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMzEgbWF0cml4IHNjYWxpbmcuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIGlucHV0IG1hdHJpeA0KKyAqIEBwYXJhbVtpbl0gIHNjYWxlRnJhY3QgIGZyYWN0aW9uYWwgcG9ydGlvbiBvZiB0aGUgc2NhbGUgZmFjdG9yDQorICogQHBhcmFtW2luXSAgc2hpZnQgICAgICAgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgdGhlIHJlc3VsdCBieQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcg0KKyAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuDQorICovDQorYXJtX3N0YXR1cyBhcm1fbWF0X3NjYWxlX3EzMSgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBTcmMsDQorICAgIHEzMV90IHNjYWxlRnJhY3QsDQorICAgIGludDMyX3Qgc2hpZnQsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFEzMSBtYXRyaXggaW5pdGlhbGl6YXRpb24uDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgbWF0cml4IHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBuUm93cyAgICAgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4NCisgKiBAcGFyYW1baW5dICAgICBuQ29sdW1ucyAgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIG1hdHJpeC4NCisgKiBAcGFyYW1baW5dICAgICBwRGF0YSAgICAgcG9pbnRzIHRvIHRoZSBtYXRyaXggZGF0YSBhcnJheS4NCisgKi8NCit2b2lkIGFybV9tYXRfaW5pdF9xMzEoDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpTLA0KKyAgICB1aW50MTZfdCBuUm93cywNCisgICAgdWludDE2X3QgbkNvbHVtbnMsDQorICAgIHEzMV90ICpwRGF0YSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBRMTUgbWF0cml4IGluaXRpYWxpemF0aW9uLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgblJvd3MgICAgIG51bWJlciBvZiByb3dzIGluIHRoZSBtYXRyaXguDQorICogQHBhcmFtW2luXSAgICAgbkNvbHVtbnMgIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguDQorICogQHBhcmFtW2luXSAgICAgcERhdGEgICAgIHBvaW50cyB0byB0aGUgbWF0cml4IGRhdGEgYXJyYXkuDQorICovDQordm9pZCBhcm1fbWF0X2luaXRfcTE1KA0KKyAgICBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqUywNCisgICAgdWludDE2X3QgblJvd3MsDQorICAgIHVpbnQxNl90IG5Db2x1bW5zLA0KKyAgICBxMTVfdCAqcERhdGEpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgbWF0cml4IGluaXRpYWxpemF0aW9uLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgblJvd3MgICAgIG51bWJlciBvZiByb3dzIGluIHRoZSBtYXRyaXguDQorICogQHBhcmFtW2luXSAgICAgbkNvbHVtbnMgIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguDQorICogQHBhcmFtW2luXSAgICAgcERhdGEgICAgIHBvaW50cyB0byB0aGUgbWF0cml4IGRhdGEgYXJyYXkuDQorICovDQordm9pZCBhcm1fbWF0X2luaXRfZjMyKA0KKyAgICBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDE2X3QgblJvd3MsDQorICAgIHVpbnQxNl90IG5Db2x1bW5zLA0KKyAgICBmbG9hdDMyX3QgKnBEYXRhKTsNCisNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IFBJRCBDb250cm9sLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBxMTVfdCBBMDsgICAgICAgICAgIC8qKjwgVGhlIGRlcml2ZWQgZ2FpbiwgQTAgPSBLcCArIEtpICsgS2QgLiAqLw0KKyNpZmRlZiBBUk1fTUFUSF9DTTBfRkFNSUxZDQorICAgIHExNV90IEExOw0KKyAgICBxMTVfdCBBMjsNCisjZWxzZQ0KKyAgICBxMzFfdCBBMTsgICAgICAgICAgIC8qKjwgVGhlIGRlcml2ZWQgZ2FpbiBBMSA9IC1LcCAtIDJLZCB8IEtkLiovDQorI2VuZGlmDQorICAgIHExNV90IHN0YXRlWzNdOyAgICAgLyoqPCBUaGUgc3RhdGUgYXJyYXkgb2YgbGVuZ3RoIDMuICovDQorICAgIHExNV90IEtwOyAgICAgICAgICAgLyoqPCBUaGUgcHJvcG9ydGlvbmFsIGdhaW4uICovDQorICAgIHExNV90IEtpOyAgICAgICAgICAgLyoqPCBUaGUgaW50ZWdyYWwgZ2Fpbi4gKi8NCisgICAgcTE1X3QgS2Q7ICAgICAgICAgICAvKio8IFRoZSBkZXJpdmF0aXZlIGdhaW4uICovDQorfSBhcm1fcGlkX2luc3RhbmNlX3ExNTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIFBJRCBDb250cm9sLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBxMzFfdCBBMDsgICAgICAgICAgICAvKio8IFRoZSBkZXJpdmVkIGdhaW4sIEEwID0gS3AgKyBLaSArIEtkIC4gKi8NCisgICAgcTMxX3QgQTE7ICAgICAgICAgICAgLyoqPCBUaGUgZGVyaXZlZCBnYWluLCBBMSA9IC1LcCAtIDJLZC4gKi8NCisgICAgcTMxX3QgQTI7ICAgICAgICAgICAgLyoqPCBUaGUgZGVyaXZlZCBnYWluLCBBMiA9IEtkIC4gKi8NCisgICAgcTMxX3Qgc3RhdGVbM107ICAgICAgLyoqPCBUaGUgc3RhdGUgYXJyYXkgb2YgbGVuZ3RoIDMuICovDQorICAgIHEzMV90IEtwOyAgICAgICAgICAgIC8qKjwgVGhlIHByb3BvcnRpb25hbCBnYWluLiAqLw0KKyAgICBxMzFfdCBLaTsgICAgICAgICAgICAvKio8IFRoZSBpbnRlZ3JhbCBnYWluLiAqLw0KKyAgICBxMzFfdCBLZDsgICAgICAgICAgICAvKio8IFRoZSBkZXJpdmF0aXZlIGdhaW4uICovDQorfSBhcm1fcGlkX2luc3RhbmNlX3EzMTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgUElEIENvbnRyb2wuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIGZsb2F0MzJfdCBBMDsgICAgICAgICAgLyoqPCBUaGUgZGVyaXZlZCBnYWluLCBBMCA9IEtwICsgS2kgKyBLZCAuICovDQorICAgIGZsb2F0MzJfdCBBMTsgICAgICAgICAgLyoqPCBUaGUgZGVyaXZlZCBnYWluLCBBMSA9IC1LcCAtIDJLZC4gKi8NCisgICAgZmxvYXQzMl90IEEyOyAgICAgICAgICAvKio8IFRoZSBkZXJpdmVkIGdhaW4sIEEyID0gS2QgLiAqLw0KKyAgICBmbG9hdDMyX3Qgc3RhdGVbM107ICAgIC8qKjwgVGhlIHN0YXRlIGFycmF5IG9mIGxlbmd0aCAzLiAqLw0KKyAgICBmbG9hdDMyX3QgS3A7ICAgICAgICAgIC8qKjwgVGhlIHByb3BvcnRpb25hbCBnYWluLiAqLw0KKyAgICBmbG9hdDMyX3QgS2k7ICAgICAgICAgIC8qKjwgVGhlIGludGVncmFsIGdhaW4uICovDQorICAgIGZsb2F0MzJfdCBLZDsgICAgICAgICAgLyoqPCBUaGUgZGVyaXZhdGl2ZSBnYWluLiAqLw0KK30gYXJtX3BpZF9pbnN0YW5jZV9mMzI7DQorDQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IFBJRCBDb250cm9sLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFBJRCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgcmVzZXRTdGF0ZUZsYWcgIGZsYWcgdG8gcmVzZXQgdGhlIHN0YXRlLiAwID0gbm8gY2hhbmdlIGluIHN0YXRlIDEgPSByZXNldCB0aGUgc3RhdGUuDQorICovDQordm9pZCBhcm1fcGlkX2luaXRfZjMyKA0KKyAgICBhcm1fcGlkX2luc3RhbmNlX2YzMiAqUywNCisgICAgaW50MzJfdCByZXNldFN0YXRlRmxhZyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBSZXNldCBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IFBJRCBDb250cm9sLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBQSUQgQ29udHJvbCBzdHJ1Y3R1cmUNCisgKi8NCit2b2lkIGFybV9waWRfcmVzZXRfZjMyKA0KKyAgICBhcm1fcGlkX2luc3RhbmNlX2YzMiAqUyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFEzMSBQSUQgQ29udHJvbC4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgUElEIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICByZXNldFN0YXRlRmxhZyAgZmxhZyB0byByZXNldCB0aGUgc3RhdGUuIDAgPSBubyBjaGFuZ2UgaW4gc3RhdGUgMSA9IHJlc2V0IHRoZSBzdGF0ZS4NCisgKi8NCit2b2lkIGFybV9waWRfaW5pdF9xMzEoDQorICAgIGFybV9waWRfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBpbnQzMl90IHJlc2V0U3RhdGVGbGFnKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFJlc2V0IGZ1bmN0aW9uIGZvciB0aGUgUTMxIFBJRCBDb250cm9sLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBQSUQgQ29udHJvbCBzdHJ1Y3R1cmUNCisgKi8NCisNCit2b2lkIGFybV9waWRfcmVzZXRfcTMxKA0KKyAgICBhcm1fcGlkX2luc3RhbmNlX3EzMSAqUyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBQSUQgQ29udHJvbC4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgUElEIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICByZXNldFN0YXRlRmxhZyAgZmxhZyB0byByZXNldCB0aGUgc3RhdGUuIDAgPSBubyBjaGFuZ2UgaW4gc3RhdGUgMSA9IHJlc2V0IHRoZSBzdGF0ZS4NCisgKi8NCit2b2lkIGFybV9waWRfaW5pdF9xMTUoDQorICAgIGFybV9waWRfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBpbnQzMl90IHJlc2V0U3RhdGVGbGFnKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFJlc2V0IGZ1bmN0aW9uIGZvciB0aGUgUTE1IFBJRCBDb250cm9sLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgcTE1IFBJRCBDb250cm9sIHN0cnVjdHVyZQ0KKyAqLw0KK3ZvaWQgYXJtX3BpZF9yZXNldF9xMTUoDQorICAgIGFybV9waWRfaW5zdGFuY2VfcTE1ICpTKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgTGluZWFyIEludGVycG9sYXRlIGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MzJfdCBuVmFsdWVzOyAgICAgICAgICAgLyoqPCBuVmFsdWVzICovDQorICAgIGZsb2F0MzJfdCB4MTsgICAgICAgICAgICAgICAvKio8IHgxICovDQorICAgIGZsb2F0MzJfdCB4U3BhY2luZzsgICAgICAgICAvKio8IHhTcGFjaW5nICovDQorICAgIGZsb2F0MzJfdCAqcFlEYXRhOyAgICAgICAgICAvKio8IHBvaW50ZXIgdG8gdGhlIHRhYmxlIG9mIFkgdmFsdWVzICovDQorfSBhcm1fbGluZWFyX2ludGVycF9pbnN0YW5jZV9mMzI7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IGJpbGluZWFyIGludGVycG9sYXRpb24gZnVuY3Rpb24uDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVJvd3M7ICAgLyoqPCBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZGF0YSB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgbnVtQ29sczsgICAvKio8IG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBkYXRhIHRhYmxlLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBEYXRhOyAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIHRhYmxlLiAqLw0KK30gYXJtX2JpbGluZWFyX2ludGVycF9pbnN0YW5jZV9mMzI7DQorDQorLyoqDQorKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIGJpbGluZWFyIGludGVycG9sYXRpb24gZnVuY3Rpb24uDQorKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtUm93czsgICAvKio8IG51bWJlciBvZiByb3dzIGluIHRoZSBkYXRhIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCBudW1Db2xzOyAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGRhdGEgdGFibGUuICovDQorICAgIHEzMV90ICpwRGF0YTsgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGRhdGEgdGFibGUuICovDQorfSBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX3EzMTsNCisNCisvKioNCisqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbi4NCisqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1Sb3dzOyAgIC8qKjwgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGRhdGEgdGFibGUuICovDQorICAgIHVpbnQxNl90IG51bUNvbHM7ICAgLyoqPCBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZGF0YSB0YWJsZS4gKi8NCisgICAgcTE1X3QgKnBEYXRhOyAgICAgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSB0YWJsZS4gKi8NCit9IGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfcTE1Ow0KKw0KKy8qKg0KKyogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBiaWxpbmVhciBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLg0KKyovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVJvd3M7ICAgLyoqPCBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZGF0YSB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgbnVtQ29sczsgICAvKio8IG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBkYXRhIHRhYmxlLiAqLw0KKyAgICBxN190ICpwRGF0YTsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIHRhYmxlLiAqLw0KK30gYXJtX2JpbGluZWFyX2ludGVycF9pbnN0YW5jZV9xNzsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTcgdmVjdG9yIG11bHRpcGxpY2F0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX211bHRfcTcoDQorICAgIHE3X3QgKnBTcmNBLA0KKyAgICBxN190ICpwU3JjQiwNCisgICAgcTdfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTE1IHZlY3RvciBtdWx0aXBsaWNhdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9tdWx0X3ExNSgNCisgICAgcTE1X3QgKnBTcmNBLA0KKyAgICBxMTVfdCAqcFNyY0IsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMzEgdmVjdG9yIG11bHRpcGxpY2F0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX211bHRfcTMxKA0KKyAgICBxMzFfdCAqcFNyY0EsDQorICAgIHEzMV90ICpwU3JjQiwNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IHZlY3RvciBtdWx0aXBsaWNhdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9tdWx0X2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjQSwNCisgICAgZmxvYXQzMl90ICpwU3JjQiwNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8NCisgICAgdWludDhfdCBpZmZ0RmxhZzsgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZz0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZz0xKSB0cmFuc2Zvcm0uICovDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWc7ICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZz0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLw0KKyAgICBxMTVfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgU2luIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYml0IHJldmVyc2FsIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCB0d2lkQ29lZk1vZGlmaWVyOyAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHVpbnQxNl90IGJpdFJldkZhY3RvcjsgICAgICAgICAgIC8qKjwgYml0IHJldmVyc2FsIG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8NCit9IGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9xMTU7DQorDQorLyogRGVwcmVjYXRlZCAqLw0KK2FybV9zdGF0dXMgYXJtX2NmZnRfcmFkaXgyX2luaXRfcTE1KA0KKyAgICBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICB1aW50MTZfdCBmZnRMZW4sDQorICAgIHVpbnQ4X3QgaWZmdEZsYWcsDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOw0KKw0KKy8qIERlcHJlY2F0ZWQgKi8NCit2b2lkIGFybV9jZmZ0X3JhZGl4Ml9xMTUoDQorICAgIGNvbnN0IGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90ICpwU3JjKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IENGRlQvQ0lGRlQgZnVuY3Rpb24uDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IGZmdExlbjsgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBGRlQuICovDQorICAgIHVpbnQ4X3QgaWZmdEZsYWc7ICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IHNlbGVjdHMgZm9yd2FyZCAoaWZmdEZsYWc9MCkgb3IgaW52ZXJzZSAoaWZmdEZsYWc9MSkgdHJhbnNmb3JtLiAqLw0KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnOyAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZz0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWc9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8NCisgICAgcTE1X3QgKnBUd2lkZGxlOyAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYml0IHJldmVyc2FsIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCB0d2lkQ29lZk1vZGlmaWVyOyAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHVpbnQxNl90IGJpdFJldkZhY3RvcjsgICAgICAgICAgIC8qKjwgYml0IHJldmVyc2FsIG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8NCit9IGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMTU7DQorDQorLyogRGVwcmVjYXRlZCAqLw0KK2FybV9zdGF0dXMgYXJtX2NmZnRfcmFkaXg0X2luaXRfcTE1KA0KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICB1aW50MTZfdCBmZnRMZW4sDQorICAgIHVpbnQ4X3QgaWZmdEZsYWcsDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOw0KKw0KKy8qIERlcHJlY2F0ZWQgKi8NCit2b2lkIGFybV9jZmZ0X3JhZGl4NF9xMTUoDQorICAgIGNvbnN0IGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90ICpwU3JjKTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUmFkaXgtMiBRMzEgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8NCisgICAgdWludDhfdCBpZmZ0RmxhZzsgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZz0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZz0xKSB0cmFuc2Zvcm0uICovDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWc7ICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZz0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLw0KKyAgICBxMzFfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgVHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovDQorICAgIHVpbnQxNl90IHR3aWRDb2VmTW9kaWZpZXI7ICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgYml0UmV2RmFjdG9yOyAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgYml0IHJldmVyc2FsIHRhYmxlLiAqLw0KK30gYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX3EzMTsNCisNCisvKiBEZXByZWNhdGVkICovDQorYXJtX3N0YXR1cyBhcm1fY2ZmdF9yYWRpeDJfaW5pdF9xMzEoDQorICAgIGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHVpbnQxNl90IGZmdExlbiwNCisgICAgdWludDhfdCBpZmZ0RmxhZywNCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7DQorDQorLyogRGVwcmVjYXRlZCAqLw0KK3ZvaWQgYXJtX2NmZnRfcmFkaXgyX3EzMSgNCisgICAgY29uc3QgYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8NCisgICAgdWludDhfdCBpZmZ0RmxhZzsgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZz0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZz0xKSB0cmFuc2Zvcm0uICovDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWc7ICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZz0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLw0KKyAgICBxMzFfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovDQorICAgIHVpbnQxNl90IHR3aWRDb2VmTW9kaWZpZXI7ICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgYml0UmV2RmFjdG9yOyAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgYml0IHJldmVyc2FsIHRhYmxlLiAqLw0KK30gYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3EzMTsNCisNCisvKiBEZXByZWNhdGVkICovDQordm9pZCBhcm1fY2ZmdF9yYWRpeDRfcTMxKA0KKyAgICBjb25zdCBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBxMzFfdCAqcFNyYyk7DQorDQorLyogRGVwcmVjYXRlZCAqLw0KK2FybV9zdGF0dXMgYXJtX2NmZnRfcmFkaXg0X2luaXRfcTMxKA0KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTMxICpTLA0KKyAgICB1aW50MTZfdCBmZnRMZW4sDQorICAgIHVpbnQ4X3QgaWZmdEZsYWcsDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBDRkZUL0NJRkZUIGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBGRlQuICovDQorICAgIHVpbnQ4X3QgaWZmdEZsYWc7ICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZz0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZz0xKSB0cmFuc2Zvcm0uICovDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWc7ICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWc9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovDQorICAgIGZsb2F0MzJfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIFR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovDQorICAgIHVpbnQxNl90IHR3aWRDb2VmTW9kaWZpZXI7ICAgICAgICAgLyoqPCB0d2lkZGxlIGNvZWZmaWNpZW50IG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCBiaXRSZXZGYWN0b3I7ICAgICAgICAgICAgIC8qKjwgYml0IHJldmVyc2FsIG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8NCisgICAgZmxvYXQzMl90IG9uZWJ5ZmZ0TGVuOyAgICAgICAgICAgICAvKio8IHZhbHVlIG9mIDEvZmZ0TGVuLiAqLw0KK30gYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX2YzMjsNCisNCisvKiBEZXByZWNhdGVkICovDQorYXJtX3N0YXR1cyBhcm1fY2ZmdF9yYWRpeDJfaW5pdF9mMzIoDQorICAgIGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9mMzIgKlMsDQorICAgIHVpbnQxNl90IGZmdExlbiwNCisgICAgdWludDhfdCBpZmZ0RmxhZywNCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7DQorDQorLyogRGVwcmVjYXRlZCAqLw0KK3ZvaWQgYXJtX2NmZnRfcmFkaXgyX2YzMigNCisgICAgY29uc3QgYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjKTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLw0KKyAgICB1aW50OF90IGlmZnRGbGFnOyAgICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IHNlbGVjdHMgZm9yd2FyZCAoaWZmdEZsYWc9MCkgb3IgaW52ZXJzZSAoaWZmdEZsYWc9MSkgdHJhbnNmb3JtLiAqLw0KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnOyAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZz0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLw0KKyAgICBmbG9hdDMyX3QgKnBUd2lkZGxlOyAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBUd2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgKnBCaXRSZXZUYWJsZTsgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYml0IHJldmVyc2FsIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCB0d2lkQ29lZk1vZGlmaWVyOyAgICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgYml0UmV2RmFjdG9yOyAgICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovDQorICAgIGZsb2F0MzJfdCBvbmVieWZmdExlbjsgICAgICAgICAgICAgLyoqPCB2YWx1ZSBvZiAxL2ZmdExlbi4gKi8NCit9IGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9mMzI7DQorDQorLyogRGVwcmVjYXRlZCAqLw0KK2FybV9zdGF0dXMgYXJtX2NmZnRfcmFkaXg0X2luaXRfZjMyKA0KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfZjMyICpTLA0KKyAgICB1aW50MTZfdCBmZnRMZW4sDQorICAgIHVpbnQ4X3QgaWZmdEZsYWcsDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOw0KKw0KKy8qIERlcHJlY2F0ZWQgKi8NCit2b2lkIGFybV9jZmZ0X3JhZGl4NF9mMzIoDQorICAgIGNvbnN0IGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCAqcFNyYyk7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZpeGVkLXBvaW50IENGRlQvQ0lGRlQgZnVuY3Rpb24uDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IGZmdExlbjsgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8NCisgICAgY29uc3QgcTE1X3QgKnBUd2lkZGxlOyAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgVHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIGNvbnN0IHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgYml0UmV2TGVuZ3RoOyAgICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCB0YWJsZSBsZW5ndGguICovDQorfSBhcm1fY2ZmdF9pbnN0YW5jZV9xMTU7DQorDQordm9pZCBhcm1fY2ZmdF9xMTUoDQorICAgIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3ExNSAqUywNCisgICAgcTE1X3QgKnAxLA0KKyAgICB1aW50OF90IGlmZnRGbGFnLA0KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnKTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZml4ZWQtcG9pbnQgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLw0KKyAgICBjb25zdCBxMzFfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBUd2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgY29uc3QgdWludDE2X3QgKnBCaXRSZXZUYWJsZTsgICAgICAvKio8IHBvaW50cyB0byB0aGUgYml0IHJldmVyc2FsIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCBiaXRSZXZMZW5ndGg7ICAgICAgICAgICAgIC8qKjwgYml0IHJldmVyc2FsIHRhYmxlIGxlbmd0aC4gKi8NCit9IGFybV9jZmZ0X2luc3RhbmNlX3EzMTsNCisNCit2b2lkIGFybV9jZmZ0X3EzMSgNCisgICAgY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBxMzFfdCAqcDEsDQorICAgIHVpbnQ4X3QgaWZmdEZsYWcsDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBDRkZUL0NJRkZUIGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBGRlQuICovDQorICAgIGNvbnN0IGZsb2F0MzJfdCAqcFR3aWRkbGU7ICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIFR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICBjb25zdCB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovDQorICAgIHVpbnQxNl90IGJpdFJldkxlbmd0aDsgICAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgdGFibGUgbGVuZ3RoLiAqLw0KK30gYXJtX2NmZnRfaW5zdGFuY2VfZjMyOw0KKw0KK3ZvaWQgYXJtX2NmZnRfZjMyKA0KKyAgICBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCAqcDEsDQorICAgIHVpbnQ4X3QgaWZmdEZsYWcsDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgUkZGVC9SSUZGVCBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDMyX3QgZmZ0TGVuUmVhbDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIHJlYWwgRkZULiAqLw0KKyAgICB1aW50OF90IGlmZnRGbGFnUjsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnUj0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZ1I9MSkgdHJhbnNmb3JtLiAqLw0KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnUjsgICAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZ1I9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnUj0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLw0KKyAgICB1aW50MzJfdCB0d2lkQ29lZlJNb2RpZmllcjsgICAgICAgICAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHExNV90ICpwVHdpZGRsZUFSZWFsOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWFsIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICBxMTVfdCAqcFR3aWRkbGVCUmVhbDsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgaW1hZyB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTE1ICpwQ2ZmdDsgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvbXBsZXggRkZUIGluc3RhbmNlLiAqLw0KK30gYXJtX3JmZnRfaW5zdGFuY2VfcTE1Ow0KKw0KK2FybV9zdGF0dXMgYXJtX3JmZnRfaW5pdF9xMTUoDQorICAgIGFybV9yZmZ0X2luc3RhbmNlX3ExNSAqUywNCisgICAgdWludDMyX3QgZmZ0TGVuUmVhbCwNCisgICAgdWludDMyX3QgaWZmdEZsYWdSLA0KKyAgICB1aW50MzJfdCBiaXRSZXZlcnNlRmxhZyk7DQorDQordm9pZCBhcm1fcmZmdF9xMTUoDQorICAgIGNvbnN0IGFybV9yZmZ0X2luc3RhbmNlX3ExNSAqUywNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHExNV90ICpwRHN0KTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIFJGRlQvUklGRlQgZnVuY3Rpb24uDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQzMl90IGZmdExlblJlYWw7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIHJlYWwgRkZULiAqLw0KKyAgICB1aW50OF90IGlmZnRGbGFnUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IHNlbGVjdHMgZm9yd2FyZCAoaWZmdEZsYWdSPTApIG9yIGludmVyc2UgKGlmZnRGbGFnUj0xKSB0cmFuc2Zvcm0uICovDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWdSOyAgICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWdSPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZ1I9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8NCisgICAgdWludDMyX3QgdHdpZENvZWZSTW9kaWZpZXI7ICAgICAgICAgICAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHEzMV90ICpwVHdpZGRsZUFSZWFsOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlYWwgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHEzMV90ICpwVHdpZGRsZUJSZWFsOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGltYWcgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3EzMSAqcENmZnQ7ICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvbXBsZXggRkZUIGluc3RhbmNlLiAqLw0KK30gYXJtX3JmZnRfaW5zdGFuY2VfcTMxOw0KKw0KK2FybV9zdGF0dXMgYXJtX3JmZnRfaW5pdF9xMzEoDQorICAgIGFybV9yZmZ0X2luc3RhbmNlX3EzMSAqUywNCisgICAgdWludDMyX3QgZmZ0TGVuUmVhbCwNCisgICAgdWludDMyX3QgaWZmdEZsYWdSLA0KKyAgICB1aW50MzJfdCBiaXRSZXZlcnNlRmxhZyk7DQorDQordm9pZCBhcm1fcmZmdF9xMzEoDQorICAgIGNvbnN0IGFybV9yZmZ0X2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0KTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgUkZGVC9SSUZGVCBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDMyX3QgZmZ0TGVuUmVhbDsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgcmVhbCBGRlQuICovDQorICAgIHVpbnQxNl90IGZmdExlbkJ5MjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIGNvbXBsZXggRkZULiAqLw0KKyAgICB1aW50OF90IGlmZnRGbGFnUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IHNlbGVjdHMgZm9yd2FyZCAoaWZmdEZsYWdSPTApIG9yIGludmVyc2UgKGlmZnRGbGFnUj0xKSB0cmFuc2Zvcm0uICovDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWdSOyAgICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWdSPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZ1I9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8NCisgICAgdWludDMyX3QgdHdpZENvZWZSTW9kaWZpZXI7ICAgICAgICAgICAgICAgICAgICAgLyoqPCB0d2lkZGxlIGNvZWZmaWNpZW50IG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBUd2lkZGxlQVJlYWw7ICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWFsIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBUd2lkZGxlQlJlYWw7ICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBpbWFnIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfZjMyICpwQ2ZmdDsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb21wbGV4IEZGVCBpbnN0YW5jZS4gKi8NCit9IGFybV9yZmZ0X2luc3RhbmNlX2YzMjsNCisNCithcm1fc3RhdHVzIGFybV9yZmZ0X2luaXRfZjMyKA0KKyAgICBhcm1fcmZmdF9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9mMzIgKlNfQ0ZGVCwNCisgICAgdWludDMyX3QgZmZ0TGVuUmVhbCwNCisgICAgdWludDMyX3QgaWZmdEZsYWdSLA0KKyAgICB1aW50MzJfdCBiaXRSZXZlcnNlRmxhZyk7DQorDQordm9pZCBhcm1fcmZmdF9mMzIoDQorICAgIGNvbnN0IGFybV9yZmZ0X2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBSRkZUL1JJRkZUIGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBhcm1fY2ZmdF9pbnN0YW5jZV9mMzIgU2ludDsgICAgICAvKio8IEludGVybmFsIENGRlQgc3RydWN0dXJlLiAqLw0KKyAgICB1aW50MTZfdCBmZnRMZW5SRkZUOyAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgcmVhbCBzZXF1ZW5jZSAqLw0KKyAgICBmbG9hdDMyX3QgKnBUd2lkZGxlUkZGVDsgICAgICAgICAvKio8IFR3aWRkbGUgZmFjdG9ycyByZWFsIHN0YWdlICAqLw0KK30gYXJtX3JmZnRfZmFzdF9pbnN0YW5jZV9mMzIgOw0KKw0KK2FybV9zdGF0dXMgYXJtX3JmZnRfZmFzdF9pbml0X2YzMigNCisgICAgYXJtX3JmZnRfZmFzdF9pbnN0YW5jZV9mMzIgKlMsDQorICAgIHVpbnQxNl90IGZmdExlbik7DQorDQordm9pZCBhcm1fcmZmdF9mYXN0X2YzMigNCisgICAgYXJtX3JmZnRfZmFzdF9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCAqcCwgZmxvYXQzMl90ICpwT3V0LA0KKyAgICB1aW50OF90IGlmZnRGbGFnKTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRENUNC9JRENUNCBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgTjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBEQ1Q0LiAqLw0KKyAgICB1aW50MTZfdCBOYnkyOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBoYWxmIG9mIHRoZSBsZW5ndGggb2YgdGhlIERDVDQuICovDQorICAgIGZsb2F0MzJfdCBub3JtYWxpemU7ICAgICAgICAgICAgICAgICAvKio8IG5vcm1hbGl6aW5nIGZhY3Rvci4gKi8NCisgICAgZmxvYXQzMl90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgZmxvYXQzMl90ICpwQ29zRmFjdG9yOyAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb3NGYWN0b3IgdGFibGUuICovDQorICAgIGFybV9yZmZ0X2luc3RhbmNlX2YzMiAqcFJmZnQ7ICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgcmVhbCBGRlQgaW5zdGFuY2UuICovDQorICAgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9mMzIgKnBDZmZ0OyAvKio8IHBvaW50cyB0byB0aGUgY29tcGxleCBGRlQgaW5zdGFuY2UuICovDQorfSBhcm1fZGN0NF9pbnN0YW5jZV9mMzI7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IERDVDQvSURDVDQuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgZmxvYXRpbmctcG9pbnQgRENUNC9JRENUNCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgU19SRkZUICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgZmxvYXRpbmctcG9pbnQgUkZGVC9SSUZGVCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgU19DRkZUICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgZmxvYXRpbmctcG9pbnQgQ0ZGVC9DSUZGVCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgTiAgICAgICAgICBsZW5ndGggb2YgdGhlIERDVDQuDQorICogQHBhcmFtW2luXSAgICAgTmJ5MiAgICAgICBoYWxmIG9mIHRoZSBsZW5ndGggb2YgdGhlIERDVDQuDQorICogQHBhcmFtW2luXSAgICAgbm9ybWFsaXplICBub3JtYWxpemluZyBmYWN0b3IuDQorICogQHJldHVybiAgICAgIGFybV9zdGF0dXMgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgPGNvZGU+ZmZ0TGVuUmVhbDwvY29kZT4gaXMgbm90IGEgc3VwcG9ydGVkIHRyYW5zZm9ybSBsZW5ndGguDQorICovDQorYXJtX3N0YXR1cyBhcm1fZGN0NF9pbml0X2YzMigNCisgICAgYXJtX2RjdDRfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBhcm1fcmZmdF9pbnN0YW5jZV9mMzIgKlNfUkZGVCwNCisgICAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX2YzMiAqU19DRkZULA0KKyAgICB1aW50MTZfdCBOLA0KKyAgICB1aW50MTZfdCBOYnkyLA0KKyAgICBmbG9hdDMyX3Qgbm9ybWFsaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IERDVDQvSURDVDQuDQorICogQHBhcmFtW2luXSAgICAgUyAgICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBEQ1Q0L0lEQ1Q0IHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbixvdXRdIHBJbmxpbmVCdWZmZXIgIHBvaW50cyB0byB0aGUgaW4tcGxhY2UgaW5wdXQgYW5kIG91dHB1dCBidWZmZXIuDQorICovDQordm9pZCBhcm1fZGN0NF9mMzIoDQorICAgIGNvbnN0IGFybV9kY3Q0X2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3RhdGUsDQorICAgIGZsb2F0MzJfdCAqcElubGluZUJ1ZmZlcik7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBEQ1Q0L0lEQ1Q0IGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBOOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIERDVDQuICovDQorICAgIHVpbnQxNl90IE5ieTI7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IGhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgRENUNC4gKi8NCisgICAgcTMxX3Qgbm9ybWFsaXplOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgbm9ybWFsaXppbmcgZmFjdG9yLiAqLw0KKyAgICBxMzFfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICBxMzFfdCAqcENvc0ZhY3RvcjsgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvc0ZhY3RvciB0YWJsZS4gKi8NCisgICAgYXJtX3JmZnRfaW5zdGFuY2VfcTMxICpwUmZmdDsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWFsIEZGVCBpbnN0YW5jZS4gKi8NCisgICAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3EzMSAqcENmZnQ7IC8qKjwgcG9pbnRzIHRvIHRoZSBjb21wbGV4IEZGVCBpbnN0YW5jZS4gKi8NCit9IGFybV9kY3Q0X2luc3RhbmNlX3EzMTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIERDVDQvSURDVDQuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgUTMxIERDVDQvSURDVDQgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIFNfUkZGVCAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIFEzMSBSRkZUL1JJRkZUIHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbl0gICAgIFNfQ0ZGVCAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIFEzMSBDRkZUL0NJRkZUIHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbl0gICAgIE4gICAgICAgICAgbGVuZ3RoIG9mIHRoZSBEQ1Q0Lg0KKyAqIEBwYXJhbVtpbl0gICAgIE5ieTIgICAgICAgaGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBEQ1Q0Lg0KKyAqIEBwYXJhbVtpbl0gICAgIG5vcm1hbGl6ZSAgbm9ybWFsaXppbmcgZmFjdG9yLg0KKyAqIEByZXR1cm4gICAgICBhcm1fc3RhdHVzIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIDxjb2RlPk48L2NvZGU+IGlzIG5vdCBhIHN1cHBvcnRlZCB0cmFuc2Zvcm0gbGVuZ3RoLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX2RjdDRfaW5pdF9xMzEoDQorICAgIGFybV9kY3Q0X2luc3RhbmNlX3EzMSAqUywNCisgICAgYXJtX3JmZnRfaW5zdGFuY2VfcTMxICpTX1JGRlQsDQorICAgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMzEgKlNfQ0ZGVCwNCisgICAgdWludDE2X3QgTiwNCisgICAgdWludDE2X3QgTmJ5MiwNCisgICAgcTMxX3Qgbm9ybWFsaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBEQ1Q0L0lEQ1Q0Lg0KKyAqIEBwYXJhbVtpbl0gICAgIFMgICAgICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIERDVDQgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgICAgIHBvaW50cyB0byBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luLG91dF0gcElubGluZUJ1ZmZlciAgcG9pbnRzIHRvIHRoZSBpbi1wbGFjZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlci4NCisgKi8NCit2b2lkIGFybV9kY3Q0X3EzMSgNCisgICAgY29uc3QgYXJtX2RjdDRfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBxMzFfdCAqcFN0YXRlLA0KKyAgICBxMzFfdCAqcElubGluZUJ1ZmZlcik7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBEQ1Q0L0lEQ1Q0IGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBOOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIERDVDQuICovDQorICAgIHVpbnQxNl90IE5ieTI7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IGhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgRENUNC4gKi8NCisgICAgcTE1X3Qgbm9ybWFsaXplOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgbm9ybWFsaXppbmcgZmFjdG9yLiAqLw0KKyAgICBxMTVfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICBxMTVfdCAqcENvc0ZhY3RvcjsgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvc0ZhY3RvciB0YWJsZS4gKi8NCisgICAgYXJtX3JmZnRfaW5zdGFuY2VfcTE1ICpwUmZmdDsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWFsIEZGVCBpbnN0YW5jZS4gKi8NCisgICAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3ExNSAqcENmZnQ7IC8qKjwgcG9pbnRzIHRvIHRoZSBjb21wbGV4IEZGVCBpbnN0YW5jZS4gKi8NCit9IGFybV9kY3Q0X2luc3RhbmNlX3ExNTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IERDVDQvSURDVDQuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgUTE1IERDVDQvSURDVDQgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIFNfUkZGVCAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIFExNSBSRkZUL1JJRkZUIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBTX0NGRlQgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBRMTUgQ0ZGVC9DSUZGVCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgTiAgICAgICAgICBsZW5ndGggb2YgdGhlIERDVDQuDQorICogQHBhcmFtW2luXSAgICAgTmJ5MiAgICAgICBoYWxmIG9mIHRoZSBsZW5ndGggb2YgdGhlIERDVDQuDQorICogQHBhcmFtW2luXSAgICAgbm9ybWFsaXplICBub3JtYWxpemluZyBmYWN0b3IuDQorICogQHJldHVybiAgICAgIGFybV9zdGF0dXMgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgPGNvZGU+TjwvY29kZT4gaXMgbm90IGEgc3VwcG9ydGVkIHRyYW5zZm9ybSBsZW5ndGguDQorICovDQorYXJtX3N0YXR1cyBhcm1fZGN0NF9pbml0X3ExNSgNCisgICAgYXJtX2RjdDRfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBhcm1fcmZmdF9pbnN0YW5jZV9xMTUgKlNfUkZGVCwNCisgICAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3ExNSAqU19DRkZULA0KKyAgICB1aW50MTZfdCBOLA0KKyAgICB1aW50MTZfdCBOYnkyLA0KKyAgICBxMTVfdCBub3JtYWxpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IERDVDQvSURDVDQuDQorICogQHBhcmFtW2luXSAgICAgUyAgICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRENUNCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW4sb3V0XSBwSW5saW5lQnVmZmVyICBwb2ludHMgdG8gdGhlIGluLXBsYWNlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVyLg0KKyAqLw0KK3ZvaWQgYXJtX2RjdDRfcTE1KA0KKyAgICBjb25zdCBhcm1fZGN0NF9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90ICpwU3RhdGUsDQorICAgIHExNV90ICpwSW5saW5lQnVmZmVyKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgdmVjdG9yIGFkZGl0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2FkZF9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyY0EsDQorICAgIGZsb2F0MzJfdCAqcFNyY0IsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTcgdmVjdG9yIGFkZGl0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2FkZF9xNygNCisgICAgcTdfdCAqcFNyY0EsDQorICAgIHE3X3QgKnBTcmNCLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMTUgdmVjdG9yIGFkZGl0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2FkZF9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTMxIHZlY3RvciBhZGRpdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9hZGRfcTMxKA0KKyAgICBxMzFfdCAqcFNyY0EsDQorICAgIHEzMV90ICpwU3JjQiwNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IHZlY3RvciBzdWJ0cmFjdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9zdWJfZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmNBLA0KKyAgICBmbG9hdDMyX3QgKnBTcmNCLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFE3IHZlY3RvciBzdWJ0cmFjdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9zdWJfcTcoDQorICAgIHE3X3QgKnBTcmNBLA0KKyAgICBxN190ICpwU3JjQiwNCisgICAgcTdfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTE1IHZlY3RvciBzdWJ0cmFjdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9zdWJfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFEzMSB2ZWN0b3Igc3VidHJhY3Rpb24uDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fc3ViX3EzMSgNCisgICAgcTMxX3QgKnBTcmNBLA0KKyAgICBxMzFfdCAqcFNyY0IsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBNdWx0aXBsaWVzIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yIGJ5IGEgc2NhbGFyLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBzY2FsZSAgICAgIHNjYWxlIGZhY3RvciB0byBiZSBhcHBsaWVkDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9zY2FsZV9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgZmxvYXQzMl90IHNjYWxlLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIE11bHRpcGxpZXMgYSBRNyB2ZWN0b3IgYnkgYSBzY2FsYXIuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBzY2FsZUZyYWN0ICBmcmFjdGlvbmFsIHBvcnRpb24gb2YgdGhlIHNjYWxlIHZhbHVlDQorICogQHBhcmFtW2luXSAgc2hpZnQgICAgICAgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgdGhlIHJlc3VsdCBieQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9zY2FsZV9xNygNCisgICAgcTdfdCAqcFNyYywNCisgICAgcTdfdCBzY2FsZUZyYWN0LA0KKyAgICBpbnQ4X3Qgc2hpZnQsDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIE11bHRpcGxpZXMgYSBRMTUgdmVjdG9yIGJ5IGEgc2NhbGFyLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgc2NhbGVGcmFjdCAgZnJhY3Rpb25hbCBwb3J0aW9uIG9mIHRoZSBzY2FsZSB2YWx1ZQ0KKyAqIEBwYXJhbVtpbl0gIHNoaWZ0ICAgICAgIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0IHRoZSByZXN1bHQgYnkNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yDQorICovDQordm9pZCBhcm1fc2NhbGVfcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3Qgc2NhbGVGcmFjdCwNCisgICAgaW50OF90IHNoaWZ0LA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgTXVsdGlwbGllcyBhIFEzMSB2ZWN0b3IgYnkgYSBzY2FsYXIuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBzY2FsZUZyYWN0ICBmcmFjdGlvbmFsIHBvcnRpb24gb2YgdGhlIHNjYWxlIHZhbHVlDQorICogQHBhcmFtW2luXSAgc2hpZnQgICAgICAgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgdGhlIHJlc3VsdCBieQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9zY2FsZV9xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCBzY2FsZUZyYWN0LA0KKyAgICBpbnQ4X3Qgc2hpZnQsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRNyB2ZWN0b3IgYWJzb2x1dGUgdmFsdWUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgYnVmZmVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2Fic19xNygNCisgICAgcTdfdCAqcFNyYywNCisgICAgcTdfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgdmVjdG9yIGFic29sdXRlIHZhbHVlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBidWZmZXINCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IGJ1ZmZlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9hYnNfZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTE1IHZlY3RvciBhYnNvbHV0ZSB2YWx1ZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgYnVmZmVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCBidWZmZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fYWJzX3ExNSgNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMzEgdmVjdG9yIGFic29sdXRlIHZhbHVlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBidWZmZXINCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IGJ1ZmZlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9hYnNfcTMxKA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIERvdCBwcm9kdWN0IG9mIGZsb2F0aW5nLXBvaW50IHZlY3RvcnMuDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHJlc3VsdCAgICAgb3V0cHV0IHJlc3VsdCByZXR1cm5lZCBoZXJlDQorICovDQordm9pZCBhcm1fZG90X3Byb2RfZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmNBLA0KKyAgICBmbG9hdDMyX3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIGZsb2F0MzJfdCAqcmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRG90IHByb2R1Y3Qgb2YgUTcgdmVjdG9ycy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICogQHBhcmFtW291dF0gcmVzdWx0ICAgICBvdXRwdXQgcmVzdWx0IHJldHVybmVkIGhlcmUNCisgKi8NCit2b2lkIGFybV9kb3RfcHJvZF9xNygNCisgICAgcTdfdCAqcFNyY0EsDQorICAgIHE3X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHEzMV90ICpyZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBEb3QgcHJvZHVjdCBvZiBRMTUgdmVjdG9ycy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICogQHBhcmFtW291dF0gcmVzdWx0ICAgICBvdXRwdXQgcmVzdWx0IHJldHVybmVkIGhlcmUNCisgKi8NCit2b2lkIGFybV9kb3RfcHJvZF9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHE2M190ICpyZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBEb3QgcHJvZHVjdCBvZiBRMzEgdmVjdG9ycy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICogQHBhcmFtW291dF0gcmVzdWx0ICAgICBvdXRwdXQgcmVzdWx0IHJldHVybmVkIGhlcmUNCisgKi8NCit2b2lkIGFybV9kb3RfcHJvZF9xMzEoDQorICAgIHEzMV90ICpwU3JjQSwNCisgICAgcTMxX3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHE2M190ICpyZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgU2hpZnRzIHRoZSBlbGVtZW50cyBvZiBhIFE3IHZlY3RvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgc2hpZnRCaXRzICBudW1iZXIgb2YgYml0cyB0byBzaGlmdC4gIEEgcG9zaXRpdmUgdmFsdWUgc2hpZnRzIGxlZnQ7IGEgbmVnYXRpdmUgdmFsdWUgc2hpZnRzIHJpZ2h0Lg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yDQorICovDQordm9pZCBhcm1fc2hpZnRfcTcoDQorICAgIHE3X3QgKnBTcmMsDQorICAgIGludDhfdCBzaGlmdEJpdHMsDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBTaGlmdHMgdGhlIGVsZW1lbnRzIG9mIGEgUTE1IHZlY3RvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgc2hpZnRCaXRzICBudW1iZXIgb2YgYml0cyB0byBzaGlmdC4gIEEgcG9zaXRpdmUgdmFsdWUgc2hpZnRzIGxlZnQ7IGEgbmVnYXRpdmUgdmFsdWUgc2hpZnRzIHJpZ2h0Lg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yDQorICovDQordm9pZCBhcm1fc2hpZnRfcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgaW50OF90IHNoaWZ0Qml0cywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBTaGlmdHMgdGhlIGVsZW1lbnRzIG9mIGEgUTMxIHZlY3RvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgc2hpZnRCaXRzICBudW1iZXIgb2YgYml0cyB0byBzaGlmdC4gIEEgcG9zaXRpdmUgdmFsdWUgc2hpZnRzIGxlZnQ7IGEgbmVnYXRpdmUgdmFsdWUgc2hpZnRzIHJpZ2h0Lg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yDQorICovDQordm9pZCBhcm1fc2hpZnRfcTMxKA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgaW50OF90IHNoaWZ0Qml0cywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBBZGRzIGEgY29uc3RhbnQgb2Zmc2V0IHRvIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBvZmZzZXQgICAgIGlzIHRoZSBvZmZzZXQgdG8gYmUgYWRkZWQNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX29mZnNldF9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgZmxvYXQzMl90IG9mZnNldCwNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgQWRkcyBhIGNvbnN0YW50IG9mZnNldCB0byBhIFE3IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgb2Zmc2V0ICAgICBpcyB0aGUgb2Zmc2V0IHRvIGJlIGFkZGVkDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9vZmZzZXRfcTcoDQorICAgIHE3X3QgKnBTcmMsDQorICAgIHE3X3Qgb2Zmc2V0LA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgQWRkcyBhIGNvbnN0YW50IG9mZnNldCB0byBhIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG9mZnNldCAgICAgaXMgdGhlIG9mZnNldCB0byBiZSBhZGRlZA0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yDQorICovDQordm9pZCBhcm1fb2Zmc2V0X3ExNSgNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHExNV90IG9mZnNldCwNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBBZGRzIGEgY29uc3RhbnQgb2Zmc2V0IHRvIGEgUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgb2Zmc2V0ICAgICBpcyB0aGUgb2Zmc2V0IHRvIGJlIGFkZGVkDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9vZmZzZXRfcTMxKA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3Qgb2Zmc2V0LA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIE5lZ2F0ZXMgdGhlIGVsZW1lbnRzIG9mIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX25lZ2F0ZV9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgTmVnYXRlcyB0aGUgZWxlbWVudHMgb2YgYSBRNyB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yDQorICovDQordm9pZCBhcm1fbmVnYXRlX3E3KA0KKyAgICBxN190ICpwU3JjLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgTmVnYXRlcyB0aGUgZWxlbWVudHMgb2YgYSBRMTUgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX25lZ2F0ZV9xMTUoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIE5lZ2F0ZXMgdGhlIGVsZW1lbnRzIG9mIGEgUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9uZWdhdGVfcTMxKA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBDb3BpZXMgdGhlIGVsZW1lbnRzIG9mIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9jb3B5X2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBDb3BpZXMgdGhlIGVsZW1lbnRzIG9mIGEgUTcgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9jb3B5X3E3KA0KKyAgICBxN190ICpwU3JjLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgQ29waWVzIHRoZSBlbGVtZW50cyBvZiBhIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqLw0KK3ZvaWQgYXJtX2NvcHlfcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBDb3BpZXMgdGhlIGVsZW1lbnRzIG9mIGEgUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICovDQordm9pZCBhcm1fY29weV9xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEZpbGxzIGEgY29uc3RhbnQgdmFsdWUgaW50byBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICB2YWx1ZSAgICAgIGlucHV0IHZhbHVlIHRvIGJlIGZpbGxlZA0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9maWxsX2YzMigNCisgICAgZmxvYXQzMl90IHZhbHVlLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBGaWxscyBhIGNvbnN0YW50IHZhbHVlIGludG8gYSBRNyB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgdmFsdWUgICAgICBpbnB1dCB2YWx1ZSB0byBiZSBmaWxsZWQNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICovDQordm9pZCBhcm1fZmlsbF9xNygNCisgICAgcTdfdCB2YWx1ZSwNCisgICAgcTdfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEZpbGxzIGEgY29uc3RhbnQgdmFsdWUgaW50byBhIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgdmFsdWUgICAgICBpbnB1dCB2YWx1ZSB0byBiZSBmaWxsZWQNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICovDQordm9pZCBhcm1fZmlsbF9xMTUoDQorICAgIHExNV90IHZhbHVlLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEZpbGxzIGEgY29uc3RhbnQgdmFsdWUgaW50byBhIFEzMSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgdmFsdWUgICAgICBpbnB1dCB2YWx1ZSB0byBiZSBmaWxsZWQNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICovDQordm9pZCBhcm1fZmlsbF9xMzEoDQorICAgIHEzMV90IHZhbHVlLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgZmxvYXRpbmctcG9pbnQgc2VxdWVuY2VzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBvdXRwdXQgcmVzdWx0IGlzIHdyaXR0ZW4uICBMZW5ndGggc3JjQUxlbiArIHNyY0JMZW4tMS4NCisgKi8NCit2b2lkIGFybV9jb252X2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgZmxvYXQzMl90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgZmxvYXQzMl90ICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCBzcmNBTGVuICsgc3JjQkxlbi0xLg0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMSAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLg0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMiAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWluKHNyY0FMZW4sIHNyY0JMZW4pLg0KKyAqLw0KK3ZvaWQgYXJtX2NvbnZfb3B0X3ExNSgNCisgICAgcTE1X3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMTVfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHExNV90ICpwRHN0LA0KKyAgICBxMTVfdCAqcFNjcmF0Y2gxLA0KKyAgICBxMTVfdCAqcFNjcmF0Y2gyKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgb3V0cHV0IHJlc3VsdCBpcyB3cml0dGVuLiAgTGVuZ3RoIHNyY0FMZW4gKyBzcmNCTGVuLTEuDQorICovDQordm9pZCBhcm1fY29udl9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxMTVfdCAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvbnZvbHV0aW9uIG9mIFExNSBzZXF1ZW5jZXMgKGZhc3QgdmVyc2lvbikgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00DQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCBzcmNBTGVuICsgc3JjQkxlbi0xLg0KKyAqLw0KK3ZvaWQgYXJtX2NvbnZfZmFzdF9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxMTVfdCAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvbnZvbHV0aW9uIG9mIFExNSBzZXF1ZW5jZXMgKGZhc3QgdmVyc2lvbikgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00DQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggc3JjQUxlbiArIHNyY0JMZW4tMS4NCisgKiBAcGFyYW1baW5dICBwU2NyYXRjaDEgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1heChzcmNBTGVuLCBzcmNCTGVuKSArIDIqbWluKHNyY0FMZW4sIHNyY0JMZW4pIC0gMi4NCisgKiBAcGFyYW1baW5dICBwU2NyYXRjaDIgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1pbihzcmNBTGVuLCBzcmNCTGVuKS4NCisgKi8NCit2b2lkIGFybV9jb252X2Zhc3Rfb3B0X3ExNSgNCisgICAgcTE1X3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMTVfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHExNV90ICpwRHN0LA0KKyAgICBxMTVfdCAqcFNjcmF0Y2gxLA0KKyAgICBxMTVfdCAqcFNjcmF0Y2gyKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTMxIHNlcXVlbmNlcy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIHNyY0FMZW4gKyBzcmNCTGVuLTEuDQorICovDQordm9pZCBhcm1fY29udl9xMzEoDQorICAgIHEzMV90ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTMxX3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxMzFfdCAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvbnZvbHV0aW9uIG9mIFEzMSBzZXF1ZW5jZXMgKGZhc3QgdmVyc2lvbikgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00DQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCBzcmNBTGVuICsgc3JjQkxlbi0xLg0KKyAqLw0KK3ZvaWQgYXJtX2NvbnZfZmFzdF9xMzEoDQorICAgIHEzMV90ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTMxX3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxMzFfdCAqcERzdCk7DQorDQorDQorLyoqDQorKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTcgc2VxdWVuY2VzLg0KKyogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyogQHBhcmFtW2luXSAgc3JjQUxlbiAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCBzcmNBTGVuICsgc3JjQkxlbi0xLg0KKyogQHBhcmFtW2luXSAgcFNjcmF0Y2gxICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIob2YgdHlwZSBxMTVfdCkgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuDQorKiBAcGFyYW1baW5dICBwU2NyYXRjaDIgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciAob2YgdHlwZSBxMTVfdCkgb2Ygc2l6ZSBtaW4oc3JjQUxlbiwgc3JjQkxlbikuDQorKi8NCit2b2lkIGFybV9jb252X29wdF9xNygNCisgICAgcTdfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHE3X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICBxMTVfdCAqcFNjcmF0Y2gxLA0KKyAgICBxMTVfdCAqcFNjcmF0Y2gyKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTcgc2VxdWVuY2VzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggc3JjQUxlbiArIHNyY0JMZW4tMS4NCisgKi8NCit2b2lkIGFybV9jb252X3E3KA0KKyAgICBxN190ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTdfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHE3X3QgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQYXJ0aWFsIGNvbnZvbHV0aW9uIG9mIGZsb2F0aW5nLXBvaW50IHNlcXVlbmNlcy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguDQorICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLg0KKyAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuICsgc3JjQkxlbi0yXS4NCisgKi8NCithcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBmbG9hdDMyX3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGZpcnN0SW5kZXgsDQorICAgIHVpbnQzMl90IG51bVBvaW50cyk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguDQorICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLg0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMSAgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1heChzcmNBTGVuLCBzcmNCTGVuKSArIDIqbWluKHNyY0FMZW4sIHNyY0JMZW4pIC0gMi4NCisgKiBAcGFyYW1baW5dICBwU2NyYXRjaDIgICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtaW4oc3JjQUxlbiwgc3JjQkxlbikuDQorICogQHJldHVybiAgUmV0dXJucyBlaXRoZXIgQVJNX01BVEhfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIGNvcnJlY3RseSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiB0aGUgcmVxdWVzdGVkIHN1YnNldCBpcyBub3QgaW4gdGhlIHJhbmdlIFswIHNyY0FMZW4gKyBzcmNCTGVuLTJdLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX2NvbnZfcGFydGlhbF9vcHRfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGZpcnN0SW5kZXgsDQorICAgIHVpbnQzMl90IG51bVBvaW50cywNCisgICAgcTE1X3QgKnBTY3JhdGNoMSwNCisgICAgcTE1X3QgKnBTY3JhdGNoMik7DQorDQorDQorLyoqDQorICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguDQorICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLg0KKyAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuICsgc3JjQkxlbi0yXS4NCisgKi8NCithcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGZpcnN0SW5kZXgsDQorICAgIHVpbnQzMl90IG51bVBvaW50cyk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguDQorICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLg0KKyAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuICsgc3JjQkxlbi0yXS4NCisgKi8NCithcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfZmFzdF9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgZmlyc3RJbmRleCwNCisgICAgdWludDMyX3QgbnVtUG9pbnRzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNA0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4NCisgKiBAcGFyYW1baW5dICBudW1Qb2ludHMgICBpcyB0aGUgbnVtYmVyIG9mIG91dHB1dCBwb2ludHMgdG8gYmUgY29tcHV0ZWQuDQorICogQHBhcmFtW2luXSAgcFNjcmF0Y2gxICAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLg0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMiAgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1pbihzcmNBTGVuLCBzcmNCTGVuKS4NCisgKiBAcmV0dXJuICBSZXR1cm5zIGVpdGhlciBBUk1fTUFUSF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgY29ycmVjdGx5IG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIHRoZSByZXF1ZXN0ZWQgc3Vic2V0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAgc3JjQUxlbiArIHNyY0JMZW4tMl0uDQorICovDQorYXJtX3N0YXR1cyBhcm1fY29udl9wYXJ0aWFsX2Zhc3Rfb3B0X3ExNSgNCisgICAgcTE1X3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMTVfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBmaXJzdEluZGV4LA0KKyAgICB1aW50MzJfdCBudW1Qb2ludHMsDQorICAgIHExNV90ICpwU2NyYXRjaDEsDQorICAgIHExNV90ICpwU2NyYXRjaDIpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQYXJ0aWFsIGNvbnZvbHV0aW9uIG9mIFEzMSBzZXF1ZW5jZXMuDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBmaXJzdEluZGV4ICBpcyB0aGUgZmlyc3Qgb3V0cHV0IHNhbXBsZSB0byBzdGFydCB3aXRoLg0KKyAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4NCisgKiBAcmV0dXJuICBSZXR1cm5zIGVpdGhlciBBUk1fTUFUSF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgY29ycmVjdGx5IG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIHRoZSByZXF1ZXN0ZWQgc3Vic2V0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAgc3JjQUxlbiArIHNyY0JMZW4tMl0uDQorICovDQorYXJtX3N0YXR1cyBhcm1fY29udl9wYXJ0aWFsX3EzMSgNCisgICAgcTMxX3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMzFfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBmaXJzdEluZGV4LA0KKyAgICB1aW50MzJfdCBudW1Qb2ludHMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQYXJ0aWFsIGNvbnZvbHV0aW9uIG9mIFEzMSBzZXF1ZW5jZXMgKGZhc3QgdmVyc2lvbikgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00DQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBmaXJzdEluZGV4ICBpcyB0aGUgZmlyc3Qgb3V0cHV0IHNhbXBsZSB0byBzdGFydCB3aXRoLg0KKyAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4NCisgKiBAcmV0dXJuICBSZXR1cm5zIGVpdGhlciBBUk1fTUFUSF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgY29ycmVjdGx5IG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIHRoZSByZXF1ZXN0ZWQgc3Vic2V0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAgc3JjQUxlbiArIHNyY0JMZW4tMl0uDQorICovDQorYXJtX3N0YXR1cyBhcm1fY29udl9wYXJ0aWFsX2Zhc3RfcTMxKA0KKyAgICBxMzFfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHEzMV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGZpcnN0SW5kZXgsDQorICAgIHVpbnQzMl90IG51bVBvaW50cyk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTcgc2VxdWVuY2VzDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBmaXJzdEluZGV4ICBpcyB0aGUgZmlyc3Qgb3V0cHV0IHNhbXBsZSB0byBzdGFydCB3aXRoLg0KKyAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4NCisgKiBAcGFyYW1baW5dICBwU2NyYXRjaDEgICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIob2YgdHlwZSBxMTVfdCkgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuDQorICogQHBhcmFtW2luXSAgcFNjcmF0Y2gyICAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIChvZiB0eXBlIHExNV90KSBvZiBzaXplIG1pbihzcmNBTGVuLCBzcmNCTGVuKS4NCisgKiBAcmV0dXJuICBSZXR1cm5zIGVpdGhlciBBUk1fTUFUSF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgY29ycmVjdGx5IG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIHRoZSByZXF1ZXN0ZWQgc3Vic2V0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAgc3JjQUxlbiArIHNyY0JMZW4tMl0uDQorICovDQorYXJtX3N0YXR1cyBhcm1fY29udl9wYXJ0aWFsX29wdF9xNygNCisgICAgcTdfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHE3X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBmaXJzdEluZGV4LA0KKyAgICB1aW50MzJfdCBudW1Qb2ludHMsDQorICAgIHExNV90ICpwU2NyYXRjaDEsDQorICAgIHExNV90ICpwU2NyYXRjaDIpOw0KKw0KKw0KKy8qKg0KKyAgICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTcgc2VxdWVuY2VzLg0KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAgICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4NCisgICAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4NCisgICAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuICsgc3JjQkxlbi0yXS4NCisgICAqLw0KK2FybV9zdGF0dXMgYXJtX2NvbnZfcGFydGlhbF9xNygNCisgICAgcTdfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHE3X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBmaXJzdEluZGV4LA0KKyAgICB1aW50MzJfdCBudW1Qb2ludHMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgRklSIGRlY2ltYXRvci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDhfdCBNOyAgICAgICAgICAgICAgICAgIC8qKjwgZGVjaW1hdGlvbiBmYWN0b3IuICovDQorICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAgICAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovDQorICAgIHExNV90ICpwU3RhdGU7ICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcyArIGJsb2NrU2l6ZS0xLiAqLw0KK30gYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMTU7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBGSVIgZGVjaW1hdG9yLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50OF90IE07ICAgICAgICAgICAgICAgICAgLyoqPCBkZWNpbWF0aW9uIGZhY3Rvci4gKi8NCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8NCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzICsgYmxvY2tTaXplLTEuICovDQorfSBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX3EzMTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGRlY2ltYXRvci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDhfdCBNOyAgICAgICAgICAgICAgICAgIC8qKjwgZGVjaW1hdGlvbiBmYWN0b3IuICovDQorICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAgICAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcyArIGJsb2NrU2l6ZS0xLiAqLw0KK30gYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9mMzI7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZGVjaW1hdG9yLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZGVjaW1hdG9yIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuDQorICovDQordm9pZCBhcm1fZmlyX2RlY2ltYXRlX2YzMigNCisgICAgY29uc3QgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZGVjaW1hdG9yLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZGVjaW1hdG9yIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBNICAgICAgICAgIGRlY2ltYXRpb24gZmFjdG9yLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqIEByZXR1cm4gICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG9yIEFSTV9NQVRIX0xFTkdUSF9FUlJPUiBpZg0KKyAqIDxjb2RlPmJsb2NrU2l6ZTwvY29kZT4gaXMgbm90IGEgbXVsdGlwbGUgb2YgPGNvZGU+TTwvY29kZT4uDQorICovDQorYXJtX3N0YXR1cyBhcm1fZmlyX2RlY2ltYXRlX2luaXRfZjMyKA0KKyAgICBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgdWludDhfdCBNLA0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnMsDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBkZWNpbWF0b3IuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgZGVjaW1hdG9yIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuDQorICovDQordm9pZCBhcm1fZmlyX2RlY2ltYXRlX3ExNSgNCisgICAgY29uc3QgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgZGVjaW1hdG9yIChmYXN0IHZhcmlhbnQpIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNC4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKi8NCit2b2lkIGFybV9maXJfZGVjaW1hdGVfZmFzdF9xMTUoDQorICAgIGNvbnN0IGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgZGVjaW1hdG9yLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGRlY2ltYXRvciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgTSAgICAgICAgICBkZWNpbWF0aW9uIGZhY3Rvci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKiBAcmV0dXJuICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9MRU5HVEhfRVJST1IgaWYNCisgKiA8Y29kZT5ibG9ja1NpemU8L2NvZGU+IGlzIG5vdCBhIG11bHRpcGxlIG9mIDxjb2RlPk08L2NvZGU+Lg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX2Zpcl9kZWNpbWF0ZV9pbml0X3ExNSgNCisgICAgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIHVpbnQ4X3QgTSwNCisgICAgcTE1X3QgKnBDb2VmZnMsDQorICAgIHExNV90ICpwU3RhdGUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGRlY2ltYXRvci4NCisgKiBAcGFyYW1baW5dICBTICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBGSVIgZGVjaW1hdG9yIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gYmxvY2tTaXplIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuDQorICovDQordm9pZCBhcm1fZmlyX2RlY2ltYXRlX3EzMSgNCisgICAgY29uc3QgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBGSVIgZGVjaW1hdG9yIChmYXN0IHZhcmlhbnQpIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNC4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKi8NCit2b2lkIGFybV9maXJfZGVjaW1hdGVfZmFzdF9xMzEoDQorICAgIGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFEzMSBGSVIgZGVjaW1hdG9yLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIGRlY2ltYXRvciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgTSAgICAgICAgICBkZWNpbWF0aW9uIGZhY3Rvci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKiBAcmV0dXJuICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9MRU5HVEhfRVJST1IgaWYNCisgKiA8Y29kZT5ibG9ja1NpemU8L2NvZGU+IGlzIG5vdCBhIG11bHRpcGxlIG9mIDxjb2RlPk08L2NvZGU+Lg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX2Zpcl9kZWNpbWF0ZV9pbml0X3EzMSgNCisgICAgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIHVpbnQ4X3QgTSwNCisgICAgcTMxX3QgKnBDb2VmZnMsDQorICAgIHEzMV90ICpwU3RhdGUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBGSVIgaW50ZXJwb2xhdG9yLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50OF90IEw7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgdXBzYW1wbGUgZmFjdG9yLiAqLw0KKyAgICB1aW50MTZfdCBwaGFzZUxlbmd0aDsgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIGVhY2ggcG9seXBoYXNlIGZpbHRlciBjb21wb25lbnQuICovDQorICAgIHExNV90ICpwQ29lZmZzOyAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIEwqcGhhc2VMZW5ndGguICovDQorICAgIHExNV90ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIGJsb2NrU2l6ZSArIHBoYXNlTGVuZ3RoLTEuICovDQorfSBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX3ExNTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIEZJUiBpbnRlcnBvbGF0b3IuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQ4X3QgTDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCB1cHNhbXBsZSBmYWN0b3IuICovDQorICAgIHVpbnQxNl90IHBoYXNlTGVuZ3RoOyAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgZWFjaCBwb2x5cGhhc2UgZmlsdGVyIGNvbXBvbmVudC4gKi8NCisgICAgcTMxX3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggTCpwaGFzZUxlbmd0aC4gKi8NCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggYmxvY2tTaXplICsgcGhhc2VMZW5ndGgtMS4gKi8NCit9IGFybV9maXJfaW50ZXJwb2xhdGVfaW5zdGFuY2VfcTMxOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgaW50ZXJwb2xhdG9yLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50OF90IEw7ICAgICAgICAgICAgICAgICAgICAgLyoqPCB1cHNhbXBsZSBmYWN0b3IuICovDQorICAgIHVpbnQxNl90IHBoYXNlTGVuZ3RoOyAgICAgICAgICAvKio8IGxlbmd0aCBvZiBlYWNoIHBvbHlwaGFzZSBmaWx0ZXIgY29tcG9uZW50LiAqLw0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIEwqcGhhc2VMZW5ndGguICovDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggcGhhc2VMZW5ndGggKyBudW1UYXBzLTEuICovDQorfSBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX2YzMjsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgaW50ZXJwb2xhdG9yLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGludGVycG9sYXRvciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKi8NCit2b2lkIGFybV9maXJfaW50ZXJwb2xhdGVfcTE1KA0KKyAgICBjb25zdCBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX3ExNSAqUywNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMTUgRklSIGludGVycG9sYXRvci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBpbnRlcnBvbGF0b3Igc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIEwgICAgICAgICAgdXBzYW1wbGUgZmFjdG9yLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50IGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKiBAcmV0dXJuICAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfTEVOR1RIX0VSUk9SIGlmDQorICogdGhlIGZpbHRlciBsZW5ndGggPGNvZGU+bnVtVGFwczwvY29kZT4gaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGludGVycG9sYXRpb24gZmFjdG9yIDxjb2RlPkw8L2NvZGU+Lg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbml0X3ExNSgNCisgICAgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHVpbnQ4X3QgTCwNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgcTE1X3QgKnBDb2VmZnMsDQorICAgIHExNV90ICpwU3RhdGUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGludGVycG9sYXRvci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBpbnRlcnBvbGF0b3Igc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuDQorICovDQordm9pZCBhcm1fZmlyX2ludGVycG9sYXRlX3EzMSgNCisgICAgY29uc3QgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEZJUiBpbnRlcnBvbGF0b3IuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBGSVIgaW50ZXJwb2xhdG9yIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBMICAgICAgICAgIHVwc2FtcGxlIGZhY3Rvci4NCisgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudCBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuDQorICogQHJldHVybiAgICAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG9yIEFSTV9NQVRIX0xFTkdUSF9FUlJPUiBpZg0KKyAqIHRoZSBmaWx0ZXIgbGVuZ3RoIDxjb2RlPm51bVRhcHM8L2NvZGU+IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBpbnRlcnBvbGF0aW9uIGZhY3RvciA8Y29kZT5MPC9jb2RlPi4NCisgKi8NCithcm1fc3RhdHVzIGFybV9maXJfaW50ZXJwb2xhdGVfaW5pdF9xMzEoDQorICAgIGFybV9maXJfaW50ZXJwb2xhdGVfaW5zdGFuY2VfcTMxICpTLA0KKyAgICB1aW50OF90IEwsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIHEzMV90ICpwQ29lZmZzLA0KKyAgICBxMzFfdCAqcFN0YXRlLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGludGVycG9sYXRvci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGludGVycG9sYXRvciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKi8NCit2b2lkIGFybV9maXJfaW50ZXJwb2xhdGVfZjMyKA0KKyAgICBjb25zdCBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBpbnRlcnBvbGF0b3IuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBpbnRlcnBvbGF0b3Igc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIEwgICAgICAgICAgdXBzYW1wbGUgZmFjdG9yLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50IGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKiBAcmV0dXJuICAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfTEVOR1RIX0VSUk9SIGlmDQorICogdGhlIGZpbHRlciBsZW5ndGggPGNvZGU+bnVtVGFwczwvY29kZT4gaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGludGVycG9sYXRpb24gZmFjdG9yIDxjb2RlPkw8L2NvZGU+Lg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbml0X2YzMigNCisgICAgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9mMzIgKlMsDQorICAgIHVpbnQ4X3QgTCwNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgZmxvYXQzMl90ICpwQ29lZmZzLA0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgaGlnaCBwcmVjaXNpb24gUTMxIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDhfdCBudW1TdGFnZXM7ICAgICAgIC8qKjwgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4gIE92ZXJhbGwgb3JkZXIgaXMgMipudW1TdGFnZXMuICovDQorICAgIHE2M190ICpwU3RhdGU7ICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygc3RhdGUgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA0Km51bVN0YWdlcy4gKi8NCisgICAgcTMxX3QgKnBDb2VmZnM7ICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDUqbnVtU3RhZ2VzLiAqLw0KKyAgICB1aW50OF90IHBvc3RTaGlmdDsgICAgICAgLyoqPCBhZGRpdGlvbmFsIHNoaWZ0LCBpbiBiaXRzLCBhcHBsaWVkIHRvIGVhY2ggb3V0cHV0IHNhbXBsZS4gKi8NCit9IGFybV9iaXF1YWRfY2FzX2RmMV8zMng2NF9pbnNfcTMxOw0KKw0KKw0KKy8qKg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBoaWdoIHByZWNpc2lvbiBRMzEgQmlxdWFkIGNhc2NhZGUgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fYmlxdWFkX2Nhc19kZjFfMzJ4NjRfcTMxKA0KKyAgICBjb25zdCBhcm1fYmlxdWFkX2Nhc19kZjFfMzJ4NjRfaW5zX3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBoaWdoIHByZWNpc2lvbiBRMzEgQmlxdWFkIGNhc2NhZGUgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1TdGFnZXMgIG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBwb3N0U2hpZnQgIHNoaWZ0IHRvIGJlIGFwcGxpZWQgdG8gdGhlIG91dHB1dC4gVmFyaWVzIGFjY29yZGluZyB0byB0aGUgY29lZmZpY2llbnRzIGZvcm1hdA0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNfZGYxXzMyeDY0X2luaXRfcTMxKA0KKyAgICBhcm1fYmlxdWFkX2Nhc19kZjFfMzJ4NjRfaW5zX3EzMSAqUywNCisgICAgdWludDhfdCBudW1TdGFnZXMsDQorICAgIHEzMV90ICpwQ29lZmZzLA0KKyAgICBxNjNfdCAqcFN0YXRlLA0KKyAgICB1aW50OF90IHBvc3RTaGlmdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50OF90IG51bVN0YWdlczsgICAgICAgICAvKio8IG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICBPdmVyYWxsIG9yZGVyIGlzIDIqbnVtU3RhZ2VzLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygc3RhdGUgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCAyKm51bVN0YWdlcy4gKi8NCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNSpudW1TdGFnZXMuICovDQorfSBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYyVF9pbnN0YW5jZV9mMzI7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50OF90IG51bVN0YWdlczsgICAgICAgICAvKio8IG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICBPdmVyYWxsIG9yZGVyIGlzIDIqbnVtU3RhZ2VzLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygc3RhdGUgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA0Km51bVN0YWdlcy4gKi8NCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNSpudW1TdGFnZXMuICovDQorfSBhcm1fYmlxdWFkX2Nhc2NhZGVfc3RlcmVvX2RmMlRfaW5zdGFuY2VfZjMyOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDhfdCBudW1TdGFnZXM7ICAgICAgICAgLyoqPCBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAgT3ZlcmFsbCBvcmRlciBpcyAyKm51bVN0YWdlcy4gKi8NCisgICAgZmxvYXQ2NF90ICpwU3RhdGU7ICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIHN0YXRlIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggMipudW1TdGFnZXMuICovDQorICAgIGZsb2F0NjRfdCAqcENvZWZmczsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDUqbnVtU3RhZ2VzLiAqLw0KK30gYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5zdGFuY2VfZjY0Ow0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdHJhbnNwb3NlZCBkaXJlY3QgZm9ybSBJSSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZpbHRlciBkYXRhIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYyVF9mMzIoDQorICAgIGNvbnN0IGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4gMiBjaGFubmVscw0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmaWx0ZXIgZGF0YSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX3N0ZXJlb19kZjJUX2YzMigNCisgICAgY29uc3QgYXJtX2JpcXVhZF9jYXNjYWRlX3N0ZXJlb19kZjJUX2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmlsdGVyIGRhdGEgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2Y2NCgNCisgICAgY29uc3QgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5zdGFuY2VfZjY0ICpTLA0KKyAgICBmbG9hdDY0X3QgKnBTcmMsDQorICAgIGZsb2F0NjRfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdHJhbnNwb3NlZCBkaXJlY3QgZm9ybSBJSSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZpbHRlciBkYXRhIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1TdGFnZXMgIG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKi8NCit2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2luaXRfZjMyKA0KKyAgICBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYyVF9pbnN0YW5jZV9mMzIgKlMsDQorICAgIHVpbnQ4X3QgbnVtU3RhZ2VzLA0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnMsDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdHJhbnNwb3NlZCBkaXJlY3QgZm9ybSBJSSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZpbHRlciBkYXRhIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1TdGFnZXMgIG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKi8NCit2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9zdGVyZW9fZGYyVF9pbml0X2YzMigNCisgICAgYXJtX2JpcXVhZF9jYXNjYWRlX3N0ZXJlb19kZjJUX2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDhfdCBudW1TdGFnZXMsDQorICAgIGZsb2F0MzJfdCAqcENvZWZmcywNCisgICAgZmxvYXQzMl90ICpwU3RhdGUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmlsdGVyIGRhdGEgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVN0YWdlcyAgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5pdF9mNjQoDQorICAgIGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2luc3RhbmNlX2Y2NCAqUywNCisgICAgdWludDhfdCBudW1TdGFnZXMsDQorICAgIGZsb2F0NjRfdCAqcENvZWZmcywNCisgICAgZmxvYXQ2NF90ICpwU3RhdGUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgRklSIGxhdHRpY2UgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1TdGFnZXM7ICAgICAgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgZmlsdGVyIHN0YWdlcy4gKi8NCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovDQorICAgIHExNV90ICpwQ29lZmZzOyAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLw0KK30gYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX3ExNTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIEZJUiBsYXR0aWNlIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtU3RhZ2VzOyAgICAgICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGZpbHRlciBzdGFnZXMuICovDQorICAgIHEzMV90ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLw0KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4gKi8NCit9IGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9xMzE7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBsYXR0aWNlIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtU3RhZ2VzOyAgICAgICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGZpbHRlciBzdGFnZXMuICovDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4gKi8NCit9IGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9mMzI7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBsYXR0aWNlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGxhdHRpY2Ugc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gbnVtU3RhZ2VzICBudW1iZXIgb2YgZmlsdGVyIHN0YWdlcy4NCisgKiBAcGFyYW1baW5dIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4NCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4NCisgKi8NCit2b2lkIGFybV9maXJfbGF0dGljZV9pbml0X3ExNSgNCisgICAgYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX3ExNSAqUywNCisgICAgdWludDE2X3QgbnVtU3RhZ2VzLA0KKyAgICBxMTVfdCAqcENvZWZmcywNCisgICAgcTE1X3QgKnBTdGF0ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgRklSIGxhdHRpY2UgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGxhdHRpY2Ugc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fZmlyX2xhdHRpY2VfcTE1KA0KKyAgICBjb25zdCBhcm1fZmlyX2xhdHRpY2VfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEZJUiBsYXR0aWNlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIGxhdHRpY2Ugc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gbnVtU3RhZ2VzICBudW1iZXIgb2YgZmlsdGVyIHN0YWdlcy4NCisgKiBAcGFyYW1baW5dIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4NCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuICAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuDQorICovDQordm9pZCBhcm1fZmlyX2xhdHRpY2VfaW5pdF9xMzEoDQorICAgIGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHVpbnQxNl90IG51bVN0YWdlcywNCisgICAgcTMxX3QgKnBDb2VmZnMsDQorICAgIHEzMV90ICpwU3RhdGUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEZJUiBsYXR0aWNlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEZJUiBsYXR0aWNlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fZmlyX2xhdHRpY2VfcTMxKA0KKyAgICBjb25zdCBhcm1fZmlyX2xhdHRpY2VfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGxhdHRpY2UgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBsYXR0aWNlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIG51bVN0YWdlcyAgbnVtYmVyIG9mIGZpbHRlciBzdGFnZXMuDQorICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuDQorICogQHBhcmFtW2luXSBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuDQorICovDQordm9pZCBhcm1fZmlyX2xhdHRpY2VfaW5pdF9mMzIoDQorICAgIGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9mMzIgKlMsDQorICAgIHVpbnQxNl90IG51bVN0YWdlcywNCisgICAgZmxvYXQzMl90ICpwQ29lZmZzLA0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgbGF0dGljZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBsYXR0aWNlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fZmlyX2xhdHRpY2VfZjMyKA0KKyAgICBjb25zdCBhcm1fZmlyX2xhdHRpY2VfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IElJUiBsYXR0aWNlIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtU3RhZ2VzOyAgICAgICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcyArIGJsb2NrU2l6ZS4gKi8NCisgICAgcTE1X3QgKnBrQ29lZmZzOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWZsZWN0aW9uIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4gKi8NCisgICAgcTE1X3QgKnB2Q29lZmZzOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBsYWRkZXIgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzICsgMS4gKi8NCit9IGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9xMTU7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBJSVIgbGF0dGljZSBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVN0YWdlczsgICAgICAgICAgICAgICAgICAvKio8IG51bWJlciBvZiBzdGFnZXMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMgKyBibG9ja1NpemUuICovDQorICAgIHEzMV90ICpwa0NvZWZmczsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgcmVmbGVjdGlvbiBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovDQorICAgIHEzMV90ICpwdkNvZWZmczsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgbGFkZGVyIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcyArIDEuICovDQorfSBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfcTMxOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBJSVIgbGF0dGljZSBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVN0YWdlczsgICAgICAgICAgICAgICAgICAvKio8IG51bWJlciBvZiBzdGFnZXMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMgKyBibG9ja1NpemUuICovDQorICAgIGZsb2F0MzJfdCAqcGtDb2VmZnM7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgcmVmbGVjdGlvbiBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovDQorICAgIGZsb2F0MzJfdCAqcHZDb2VmZnM7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgbGFkZGVyIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcyArIDEuICovDQorfSBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfZjMyOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgSUlSIGxhdHRpY2UgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBJSVIgbGF0dGljZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9paXJfbGF0dGljZV9mMzIoDQorICAgIGNvbnN0IGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IElJUiBsYXR0aWNlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBJSVIgbGF0dGljZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBudW1TdGFnZXMgIG51bWJlciBvZiBzdGFnZXMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dIHBrQ29lZmZzICAgcG9pbnRzIHRvIHRoZSByZWZsZWN0aW9uIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLg0KKyAqIEBwYXJhbVtpbl0gcHZDb2VmZnMgICBwb2ludHMgdG8gdGhlIGxhZGRlciBjb2VmZmljaWVudCBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcyArIDEuDQorICogQHBhcmFtW2luXSBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMgKyBibG9ja1NpemUtMS4NCisgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9paXJfbGF0dGljZV9pbml0X2YzMigNCisgICAgYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDE2X3QgbnVtU3RhZ2VzLA0KKyAgICBmbG9hdDMyX3QgKnBrQ29lZmZzLA0KKyAgICBmbG9hdDMyX3QgKnB2Q29lZmZzLA0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBJSVIgbGF0dGljZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBJSVIgbGF0dGljZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9paXJfbGF0dGljZV9xMzEoDQorICAgIGNvbnN0IGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgSUlSIGxhdHRpY2UgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBJSVIgbGF0dGljZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBudW1TdGFnZXMgIG51bWJlciBvZiBzdGFnZXMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dIHBrQ29lZmZzICAgcG9pbnRzIHRvIHRoZSByZWZsZWN0aW9uIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLg0KKyAqIEBwYXJhbVtpbl0gcHZDb2VmZnMgICBwb2ludHMgdG8gdGhlIGxhZGRlciBjb2VmZmljaWVudCBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcyArIDEuDQorICogQHBhcmFtW2luXSBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMgKyBibG9ja1NpemUuDQorICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1faWlyX2xhdHRpY2VfaW5pdF9xMzEoDQorICAgIGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHVpbnQxNl90IG51bVN0YWdlcywNCisgICAgcTMxX3QgKnBrQ29lZmZzLA0KKyAgICBxMzFfdCAqcHZDb2VmZnMsDQorICAgIHEzMV90ICpwU3RhdGUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgSUlSIGxhdHRpY2UgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgSUlSIGxhdHRpY2Ugc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1faWlyX2xhdHRpY2VfcTE1KA0KKyAgICBjb25zdCBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IElJUiBsYXR0aWNlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmaXhlZC1wb2ludCBRMTUgSUlSIGxhdHRpY2Ugc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gbnVtU3RhZ2VzICBudW1iZXIgb2Ygc3RhZ2VzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSBwa0NvZWZmcyAgIHBvaW50cyB0byByZWZsZWN0aW9uIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLg0KKyAqIEBwYXJhbVtpbl0gcHZDb2VmZnMgICBwb2ludHMgdG8gbGFkZGVyIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzICsgMS4NCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzICsgYmxvY2tTaXplLg0KKyAqIEBwYXJhbVtpbl0gYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqLw0KK3ZvaWQgYXJtX2lpcl9sYXR0aWNlX2luaXRfcTE1KA0KKyAgICBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICB1aW50MTZfdCBudW1TdGFnZXMsDQorICAgIHExNV90ICpwa0NvZWZmcywNCisgICAgcTE1X3QgKnB2Q29lZmZzLA0KKyAgICBxMTVfdCAqcFN0YXRlLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBMTVMgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMgKyBibG9ja1NpemUtMS4gKi8NCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovDQorICAgIGZsb2F0MzJfdCBtdTsgICAgICAgIC8qKjwgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuICovDQorfSBhcm1fbG1zX2luc3RhbmNlX2YzMjsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgZmxvYXRpbmctcG9pbnQgTE1TIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgcFJlZiAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIHJlZmVyZW5jZSBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBPdXQgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRXJyICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgZXJyb3IgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fbG1zX2YzMigNCisgICAgY29uc3QgYXJtX2xtc19pbnN0YW5jZV9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgZmxvYXQzMl90ICpwUmVmLA0KKyAgICBmbG9hdDMyX3QgKnBPdXQsDQorICAgIGZsb2F0MzJfdCAqcEVyciwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGZsb2F0aW5nLXBvaW50IExNUyBmaWx0ZXIuDQorICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBudW1UYXBzICAgIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dIG11ICAgICAgICAgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuDQorICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fbG1zX2luaXRfZjMyKA0KKyAgICBhcm1fbG1zX2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgZmxvYXQzMl90ICpwQ29lZmZzLA0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZSwNCisgICAgZmxvYXQzMl90IG11LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgTE1TIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovDQorICAgIHExNV90ICpwU3RhdGU7ICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzICsgYmxvY2tTaXplLTEuICovDQorICAgIHExNV90ICpwQ29lZmZzOyAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLw0KKyAgICBxMTVfdCBtdTsgICAgICAgICAgICAvKio8IHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLiAqLw0KKyAgICB1aW50MzJfdCBwb3N0U2hpZnQ7ICAvKio8IGJpdCBzaGlmdCBhcHBsaWVkIHRvIGNvZWZmaWNpZW50cy4gKi8NCit9IGFybV9sbXNfaW5zdGFuY2VfcTE1Ow0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBMTVMgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBMTVMgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dIG11ICAgICAgICAgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuDQorICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICogQHBhcmFtW2luXSBwb3N0U2hpZnQgIGJpdCBzaGlmdCBhcHBsaWVkIHRvIGNvZWZmaWNpZW50cy4NCisgKi8NCit2b2lkIGFybV9sbXNfaW5pdF9xMTUoDQorICAgIGFybV9sbXNfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICB1aW50MTZfdCBudW1UYXBzLA0KKyAgICBxMTVfdCAqcENvZWZmcywNCisgICAgcTE1X3QgKnBTdGF0ZSwNCisgICAgcTE1X3QgbXUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgdWludDMyX3QgcG9zdFNoaWZ0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgUTE1IExNUyBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBMTVMgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBwUmVmICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgcmVmZXJlbmNlIGRhdGEuDQorICogQHBhcmFtW291dF0gcE91dCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBFcnIgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBlcnJvciBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9sbXNfcTE1KA0KKyAgICBjb25zdCBhcm1fbG1zX2luc3RhbmNlX3ExNSAqUywNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHExNV90ICpwUmVmLA0KKyAgICBxMTVfdCAqcE91dCwNCisgICAgcTE1X3QgKnBFcnIsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBMTVMgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMgKyBibG9ja1NpemUtMS4gKi8NCisgICAgcTMxX3QgKnBDb2VmZnM7ICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovDQorICAgIHEzMV90IG11OyAgICAgICAgICAgIC8qKjwgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuICovDQorICAgIHVpbnQzMl90IHBvc3RTaGlmdDsgIC8qKjwgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLiAqLw0KK30gYXJtX2xtc19pbnN0YW5jZV9xMzE7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIFEzMSBMTVMgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgcFJlZiAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIHJlZmVyZW5jZSBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBPdXQgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRXJyICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgZXJyb3IgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fbG1zX3EzMSgNCisgICAgY29uc3QgYXJtX2xtc19pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcFJlZiwNCisgICAgcTMxX3QgKnBPdXQsDQorICAgIHEzMV90ICpwRXJyLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgUTMxIExNUyBmaWx0ZXIuDQorICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIExNUyBmaWx0ZXIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gbnVtVGFwcyAgICBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dIHBDb2VmZnMgICAgcG9pbnRzIHRvIGNvZWZmaWNpZW50IGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dIG11ICAgICAgICAgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuDQorICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICogQHBhcmFtW2luXSBwb3N0U2hpZnQgIGJpdCBzaGlmdCBhcHBsaWVkIHRvIGNvZWZmaWNpZW50cy4NCisgKi8NCit2b2lkIGFybV9sbXNfaW5pdF9xMzEoDQorICAgIGFybV9sbXNfaW5zdGFuY2VfcTMxICpTLA0KKyAgICB1aW50MTZfdCBudW1UYXBzLA0KKyAgICBxMzFfdCAqcENvZWZmcywNCisgICAgcTMxX3QgKnBTdGF0ZSwNCisgICAgcTMxX3QgbXUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgdWludDMyX3QgcG9zdFNoaWZ0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgbm9ybWFsaXplZCBMTVMgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcyArIGJsb2NrU2l6ZS0xLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovDQorICAgIGZsb2F0MzJfdCBtdTsgICAgICAgICAvKio8IHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2wgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuICovDQorICAgIGZsb2F0MzJfdCBlbmVyZ3k7ICAgICAvKio8IHNhdmVzIHByZXZpb3VzIGZyYW1lIGVuZXJneS4gKi8NCisgICAgZmxvYXQzMl90IHgwOyAgICAgICAgIC8qKjwgc2F2ZXMgcHJldmlvdXMgaW5wdXQgc2FtcGxlLiAqLw0KK30gYXJtX2xtc19ub3JtX2luc3RhbmNlX2YzMjsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgZmxvYXRpbmctcG9pbnQgbm9ybWFsaXplZCBMTVMgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBub3JtYWxpemVkIExNUyBmaWx0ZXIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIHBSZWYgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiByZWZlcmVuY2UgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwT3V0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcEVyciAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGVycm9yIGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2xtc19ub3JtX2YzMigNCisgICAgYXJtX2xtc19ub3JtX2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBSZWYsDQorICAgIGZsb2F0MzJfdCAqcE91dCwNCisgICAgZmxvYXQzMl90ICpwRXJyLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgZmxvYXRpbmctcG9pbnQgbm9ybWFsaXplZCBMTVMgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IExNUyBmaWx0ZXIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gbnVtVGFwcyAgICBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dIHBDb2VmZnMgICAgcG9pbnRzIHRvIGNvZWZmaWNpZW50IGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dIG11ICAgICAgICAgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuDQorICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fbG1zX25vcm1faW5pdF9mMzIoDQorICAgIGFybV9sbXNfbm9ybV9pbnN0YW5jZV9mMzIgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIGZsb2F0MzJfdCAqcENvZWZmcywNCisgICAgZmxvYXQzMl90ICpwU3RhdGUsDQorICAgIGZsb2F0MzJfdCBtdSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBxMzFfdCAqcFN0YXRlOyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMgKyBibG9ja1NpemUtMS4gKi8NCisgICAgcTMxX3QgKnBDb2VmZnM7ICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLw0KKyAgICBxMzFfdCBtdTsgICAgICAgICAgICAgLyoqPCBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4gKi8NCisgICAgdWludDhfdCBwb3N0U2hpZnQ7ICAgIC8qKjwgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLiAqLw0KKyAgICBxMzFfdCAqcmVjaXBUYWJsZTsgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlY2lwcm9jYWwgaW5pdGlhbCB2YWx1ZSB0YWJsZS4gKi8NCisgICAgcTMxX3QgZW5lcmd5OyAgICAgICAgIC8qKjwgc2F2ZXMgcHJldmlvdXMgZnJhbWUgZW5lcmd5LiAqLw0KKyAgICBxMzFfdCB4MDsgICAgICAgICAgICAgLyoqPCBzYXZlcyBwcmV2aW91cyBpbnB1dCBzYW1wbGUuICovDQorfSBhcm1fbG1zX25vcm1faW5zdGFuY2VfcTMxOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciBRMzEgbm9ybWFsaXplZCBMTVMgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgbm9ybWFsaXplZCBMTVMgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBwUmVmICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgcmVmZXJlbmNlIGRhdGEuDQorICogQHBhcmFtW291dF0gcE91dCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBFcnIgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBlcnJvciBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9sbXNfbm9ybV9xMzEoDQorICAgIGFybV9sbXNfbm9ybV9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcFJlZiwNCisgICAgcTMxX3QgKnBPdXQsDQorICAgIHEzMV90ICpwRXJyLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgUTMxIG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4NCisgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgbm9ybWFsaXplZCBMTVMgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byBjb2VmZmljaWVudCBidWZmZXIuDQorICogQHBhcmFtW2luXSBwU3RhdGUgICAgIHBvaW50cyB0byBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSBtdSAgICAgICAgIHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLg0KKyAqIEBwYXJhbVtpbl0gYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqIEBwYXJhbVtpbl0gcG9zdFNoaWZ0ICBiaXQgc2hpZnQgYXBwbGllZCB0byBjb2VmZmljaWVudHMuDQorICovDQordm9pZCBhcm1fbG1zX25vcm1faW5pdF9xMzEoDQorICAgIGFybV9sbXNfbm9ybV9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIHEzMV90ICpwQ29lZmZzLA0KKyAgICBxMzFfdCAqcFN0YXRlLA0KKyAgICBxMzFfdCBtdSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICB1aW50OF90IHBvc3RTaGlmdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBub3JtYWxpemVkIExNUyBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAvKio8IE51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzICsgYmxvY2tTaXplLTEuICovDQorICAgIHExNV90ICpwQ29lZmZzOyAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8NCisgICAgcTE1X3QgbXU7ICAgICAgICAgICAgIC8qKjwgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuICovDQorICAgIHVpbnQ4X3QgcG9zdFNoaWZ0OyAgICAvKio8IGJpdCBzaGlmdCBhcHBsaWVkIHRvIGNvZWZmaWNpZW50cy4gKi8NCisgICAgcTE1X3QgKnJlY2lwVGFibGU7ICAgIC8qKjwgUG9pbnRzIHRvIHRoZSByZWNpcHJvY2FsIGluaXRpYWwgdmFsdWUgdGFibGUuICovDQorICAgIHExNV90IGVuZXJneTsgICAgICAgICAvKio8IHNhdmVzIHByZXZpb3VzIGZyYW1lIGVuZXJneS4gKi8NCisgICAgcTE1X3QgeDA7ICAgICAgICAgICAgIC8qKjwgc2F2ZXMgcHJldmlvdXMgaW5wdXQgc2FtcGxlLiAqLw0KK30gYXJtX2xtc19ub3JtX2luc3RhbmNlX3ExNTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgUTE1IG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IG5vcm1hbGl6ZWQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgcFJlZiAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIHJlZmVyZW5jZSBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBPdXQgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRXJyICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgZXJyb3IgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fbG1zX25vcm1fcTE1KA0KKyAgICBhcm1fbG1zX25vcm1faW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBSZWYsDQorICAgIHExNV90ICpwT3V0LA0KKyAgICBxMTVfdCAqcEVyciwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIFExNSBub3JtYWxpemVkIExNUyBmaWx0ZXIuDQorICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IG5vcm1hbGl6ZWQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBudW1UYXBzICAgIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gY29lZmZpY2llbnQgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gbXUgICAgICAgICBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4NCisgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKiBAcGFyYW1baW5dIHBvc3RTaGlmdCAgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLg0KKyAqLw0KK3ZvaWQgYXJtX2xtc19ub3JtX2luaXRfcTE1KA0KKyAgICBhcm1fbG1zX25vcm1faW5zdGFuY2VfcTE1ICpTLA0KKyAgICB1aW50MTZfdCBudW1UYXBzLA0KKyAgICBxMTVfdCAqcENvZWZmcywNCisgICAgcTE1X3QgKnBTdGF0ZSwNCisgICAgcTE1X3QgbXUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgdWludDhfdCBwb3N0U2hpZnQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBmbG9hdGluZy1wb2ludCBzZXF1ZW5jZXMuDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCAyICogbWF4KHNyY0FMZW4sIHNyY0JMZW4pIC0gMS4NCisgKi8NCit2b2lkIGFybV9jb3JyZWxhdGVfZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBmbG9hdDMyX3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyogQGJyaWVmIENvcnJlbGF0aW9uIG9mIFExNSBzZXF1ZW5jZXMNCisqIEBwYXJhbVtpbl0gIHBTcmNBICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyogQHBhcmFtW2luXSAgc3JjQUxlbiAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorKiBAcGFyYW1baW5dICBwU3JjQiAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorKiBAcGFyYW1baW5dICBzcmNCTGVuICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLg0KKyogQHBhcmFtW2luXSAgcFNjcmF0Y2ggIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1heChzcmNBTGVuLCBzcmNCTGVuKSArIDIqbWluKHNyY0FMZW4sIHNyY0JMZW4pIC0gMi4NCisqLw0KK3ZvaWQgYXJtX2NvcnJlbGF0ZV9vcHRfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHExNV90ICpwU2NyYXRjaCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIFExNSBzZXF1ZW5jZXMuDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCAyICogbWF4KHNyY0FMZW4sIHNyY0JMZW4pIC0gMS4NCisgKi8NCisNCit2b2lkIGFybV9jb3JyZWxhdGVfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTE1X3QgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBRMTUgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNC4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLg0KKyAqLw0KKw0KK3ZvaWQgYXJtX2NvcnJlbGF0ZV9mYXN0X3ExNSgNCisgICAgcTE1X3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMTVfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHExNV90ICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29ycmVsYXRpb24gb2YgUTE1IHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQuDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLg0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuDQorICovDQordm9pZCBhcm1fY29ycmVsYXRlX2Zhc3Rfb3B0X3ExNSgNCisgICAgcTE1X3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMTVfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHExNV90ICpwRHN0LA0KKyAgICBxMTVfdCAqcFNjcmF0Y2gpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBRMzEgc2VxdWVuY2VzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggMiAqIG1heChzcmNBTGVuLCBzcmNCTGVuKSAtIDEuDQorICovDQordm9pZCBhcm1fY29ycmVsYXRlX3EzMSgNCisgICAgcTMxX3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMzFfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHEzMV90ICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29ycmVsYXRpb24gb2YgUTMxIHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLg0KKyAqLw0KK3ZvaWQgYXJtX2NvcnJlbGF0ZV9mYXN0X3EzMSgNCisgICAgcTMxX3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMzFfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHEzMV90ICpwRHN0KTsNCisNCisNCisvKioNCisgICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIFE3IHNlcXVlbmNlcy4NCisgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLg0KKyAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDEgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlcihvZiB0eXBlIHExNV90KSBvZiBzaXplIG1heChzcmNBTGVuLCBzcmNCTGVuKSArIDIqbWluKHNyY0FMZW4sIHNyY0JMZW4pIC0gMi4NCisgICogQHBhcmFtW2luXSAgcFNjcmF0Y2gyICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgKG9mIHR5cGUgcTE1X3QpIG9mIHNpemUgbWluKHNyY0FMZW4sIHNyY0JMZW4pLg0KKyAgKi8NCit2b2lkIGFybV9jb3JyZWxhdGVfb3B0X3E3KA0KKyAgICBxN190ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTdfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHExNV90ICpwU2NyYXRjaDEsDQorICAgIHExNV90ICpwU2NyYXRjaDIpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBRNyBzZXF1ZW5jZXMuDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCAyICogbWF4KHNyY0FMZW4sIHNyY0JMZW4pIC0gMS4NCisgKi8NCit2b2lkIGFybV9jb3JyZWxhdGVfcTcoDQorICAgIHE3X3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxN190ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTdfdCAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHNwYXJzZSBGSVIgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgICAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgdWludDE2X3Qgc3RhdGVJbmRleDsgICAgICAgICAgLyoqPCBzdGF0ZSBidWZmZXIgaW5kZXguICBQb2ludHMgdG8gdGhlIG9sZGVzdCBzYW1wbGUgaW4gdGhlIHN0YXRlIGJ1ZmZlci4gKi8NCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlciBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBtYXhEZWxheSArIGJsb2NrU2l6ZS0xLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4qLw0KKyAgICB1aW50MTZfdCBtYXhEZWxheTsgICAgICAgICAgICAvKio8IG1heGltdW0gb2Zmc2V0IHNwZWNpZmllZCBieSB0aGUgcFRhcERlbGF5IGFycmF5LiAqLw0KKyAgICBpbnQzMl90ICpwVGFwRGVsYXk7ICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2YgZGVsYXkgdmFsdWVzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLw0KK30gYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfZjMyOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgc3BhcnNlIEZJUiBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICB1aW50MTZfdCBzdGF0ZUluZGV4OyAgICAgICAgICAvKio8IHN0YXRlIGJ1ZmZlciBpbmRleC4gIFBvaW50cyB0byB0aGUgb2xkZXN0IHNhbXBsZSBpbiB0aGUgc3RhdGUgYnVmZmVyLiAqLw0KKyAgICBxMzFfdCAqcFN0YXRlOyAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG1heERlbGF5ICsgYmxvY2tTaXplLTEuICovDQorICAgIHEzMV90ICpwQ29lZmZzOyAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovDQorICAgIHVpbnQxNl90IG1heERlbGF5OyAgICAgICAgICAgIC8qKjwgbWF4aW11bSBvZmZzZXQgc3BlY2lmaWVkIGJ5IHRoZSBwVGFwRGVsYXkgYXJyYXkuICovDQorICAgIGludDMyX3QgKnBUYXBEZWxheTsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBkZWxheSB2YWx1ZXMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovDQorfSBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xMzE7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBzcGFyc2UgRklSIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovDQorICAgIHVpbnQxNl90IHN0YXRlSW5kZXg7ICAgICAgICAgIC8qKjwgc3RhdGUgYnVmZmVyIGluZGV4LiAgUG9pbnRzIHRvIHRoZSBvbGRlc3Qgc2FtcGxlIGluIHRoZSBzdGF0ZSBidWZmZXIuICovDQorICAgIHExNV90ICpwU3RhdGU7ICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbWF4RGVsYXkgKyBibG9ja1NpemUtMS4gKi8NCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8NCisgICAgdWludDE2X3QgbWF4RGVsYXk7ICAgICAgICAgICAgLyoqPCBtYXhpbXVtIG9mZnNldCBzcGVjaWZpZWQgYnkgdGhlIHBUYXBEZWxheSBhcnJheS4gKi8NCisgICAgaW50MzJfdCAqcFRhcERlbGF5OyAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGRlbGF5IHZhbHVlcy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8NCit9IGFybV9maXJfc3BhcnNlX2luc3RhbmNlX3ExNTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTcgc3BhcnNlIEZJUiBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICB1aW50MTZfdCBzdGF0ZUluZGV4OyAgICAgICAgICAvKio8IHN0YXRlIGJ1ZmZlciBpbmRleC4gIFBvaW50cyB0byB0aGUgb2xkZXN0IHNhbXBsZSBpbiB0aGUgc3RhdGUgYnVmZmVyLiAqLw0KKyAgICBxN190ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG1heERlbGF5ICsgYmxvY2tTaXplLTEuICovDQorICAgIHE3X3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovDQorICAgIHVpbnQxNl90IG1heERlbGF5OyAgICAgICAgICAgIC8qKjwgbWF4aW11bSBvZmZzZXQgc3BlY2lmaWVkIGJ5IHRoZSBwVGFwRGVsYXkgYXJyYXkuICovDQorICAgIGludDMyX3QgKnBUYXBEZWxheTsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBkZWxheSB2YWx1ZXMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovDQorfSBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xNzsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHNwYXJzZSBGSVIgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBwU2NyYXRjaEluICBwb2ludHMgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHNpemUgYmxvY2tTaXplLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuDQorICovDQordm9pZCBhcm1fZmlyX3NwYXJzZV9mMzIoDQorICAgIGFybV9maXJfc3BhcnNlX2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIGZsb2F0MzJfdCAqcFNjcmF0Y2hJbiwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgc3BhcnNlIEZJUiBmaWx0ZXIuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IHNwYXJzZSBGSVIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIG5vbnplcm8gY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBwVGFwRGVsYXkgIHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygb2Zmc2V0IHRpbWVzLg0KKyAqIEBwYXJhbVtpbl0gICAgIG1heERlbGF5ICAgbWF4aW11bSBvZmZzZXQgdGltZSBzdXBwb3J0ZWQuDQorICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkIHBlciBibG9jay4NCisgKi8NCit2b2lkIGFybV9maXJfc3BhcnNlX2luaXRfZjMyKA0KKyAgICBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9mMzIgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIGZsb2F0MzJfdCAqcENvZWZmcywNCisgICAgZmxvYXQzMl90ICpwU3RhdGUsDQorICAgIGludDMyX3QgKnBUYXBEZWxheSwNCisgICAgdWludDE2X3QgbWF4RGVsYXksDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgc3BhcnNlIEZJUiBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBwU2NyYXRjaEluICBwb2ludHMgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHNpemUgYmxvY2tTaXplLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuDQorICovDQordm9pZCBhcm1fZmlyX3NwYXJzZV9xMzEoDQorICAgIGFybV9maXJfc3BhcnNlX2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICBxMzFfdCAqcFNjcmF0Y2hJbiwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIHNwYXJzZSBGSVIgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBudW1iZXIgb2Ygbm9uemVybyBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgYXJyYXkgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBUYXBEZWxheSAgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBvZmZzZXQgdGltZXMuDQorICogQHBhcmFtW2luXSAgICAgbWF4RGVsYXkgICBtYXhpbXVtIG9mZnNldCB0aW1lIHN1cHBvcnRlZC4NCisgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQgcGVyIGJsb2NrLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9zcGFyc2VfaW5pdF9xMzEoDQorICAgIGFybV9maXJfc3BhcnNlX2luc3RhbmNlX3EzMSAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgcTMxX3QgKnBDb2VmZnMsDQorICAgIHEzMV90ICpwU3RhdGUsDQorICAgIGludDMyX3QgKnBUYXBEZWxheSwNCisgICAgdWludDE2X3QgbWF4RGVsYXksDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgc3BhcnNlIEZJUiBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IHNwYXJzZSBGSVIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBwU2NyYXRjaEluICAgcG9pbnRzIHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiBzaXplIGJsb2NrU2l6ZS4NCisgKiBAcGFyYW1baW5dICBwU2NyYXRjaE91dCAgcG9pbnRzIHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiBzaXplIGJsb2NrU2l6ZS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgICAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKi8NCit2b2lkIGFybV9maXJfc3BhcnNlX3ExNSgNCisgICAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHExNV90ICpwU2NyYXRjaEluLA0KKyAgICBxMzFfdCAqcFNjcmF0Y2hPdXQsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBzcGFyc2UgRklSIGZpbHRlci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IHNwYXJzZSBGSVIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIG5vbnplcm8gY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBwVGFwRGVsYXkgIHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygb2Zmc2V0IHRpbWVzLg0KKyAqIEBwYXJhbVtpbl0gICAgIG1heERlbGF5ICAgbWF4aW11bSBvZmZzZXQgdGltZSBzdXBwb3J0ZWQuDQorICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkIHBlciBibG9jay4NCisgKi8NCit2b2lkIGFybV9maXJfc3BhcnNlX2luaXRfcTE1KA0KKyAgICBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIHExNV90ICpwQ29lZmZzLA0KKyAgICBxMTVfdCAqcFN0YXRlLA0KKyAgICBpbnQzMl90ICpwVGFwRGVsYXksDQorICAgIHVpbnQxNl90IG1heERlbGF5LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTcgc3BhcnNlIEZJUiBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTcgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoSW4gICBwb2ludHMgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHNpemUgYmxvY2tTaXplLg0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoT3V0ICBwb2ludHMgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHNpemUgYmxvY2tTaXplLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9zcGFyc2VfcTcoDQorICAgIGFybV9maXJfc3BhcnNlX2luc3RhbmNlX3E3ICpTLA0KKyAgICBxN190ICpwU3JjLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICBxN190ICpwU2NyYXRjaEluLA0KKyAgICBxMzFfdCAqcFNjcmF0Y2hPdXQsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFE3IHNwYXJzZSBGSVIgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRNyBzcGFyc2UgRklSIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBub256ZXJvIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgcFRhcERlbGF5ICBwb2ludHMgdG8gdGhlIGFycmF5IG9mIG9mZnNldCB0aW1lcy4NCisgKiBAcGFyYW1baW5dICAgICBtYXhEZWxheSAgIG1heGltdW0gb2Zmc2V0IHRpbWUgc3VwcG9ydGVkLg0KKyAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdGhhdCB3aWxsIGJlIHByb2Nlc3NlZCBwZXIgYmxvY2suDQorICovDQordm9pZCBhcm1fZmlyX3NwYXJzZV9pbml0X3E3KA0KKyAgICBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xNyAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgcTdfdCAqcENvZWZmcywNCisgICAgcTdfdCAqcFN0YXRlLA0KKyAgICBpbnQzMl90ICpwVGFwRGVsYXksDQorICAgIHVpbnQxNl90IG1heERlbGF5LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgc2luX2NvcyBmdW5jdGlvbi4NCisgKiBAcGFyYW1baW5dICB0aGV0YSAgIGlucHV0IHZhbHVlIGluIGRlZ3JlZXMNCisgKiBAcGFyYW1bb3V0XSBwU2luVmFsICBwb2ludHMgdG8gdGhlIHByb2Nlc3NlZCBzaW5lIG91dHB1dC4NCisgKiBAcGFyYW1bb3V0XSBwQ29zVmFsICBwb2ludHMgdG8gdGhlIHByb2Nlc3NlZCBjb3Mgb3V0cHV0Lg0KKyAqLw0KK3ZvaWQgYXJtX3Npbl9jb3NfZjMyKA0KKyAgICBmbG9hdDMyX3QgdGhldGEsDQorICAgIGZsb2F0MzJfdCAqcFNpblZhbCwNCisgICAgZmxvYXQzMl90ICpwQ29zVmFsKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFEzMSBzaW5fY29zIGZ1bmN0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHRoZXRhICAgIHNjYWxlZCBpbnB1dCB2YWx1ZSBpbiBkZWdyZWVzDQorICogQHBhcmFtW291dF0gcFNpblZhbCAgcG9pbnRzIHRvIHRoZSBwcm9jZXNzZWQgc2luZSBvdXRwdXQuDQorICogQHBhcmFtW291dF0gcENvc1ZhbCAgcG9pbnRzIHRvIHRoZSBwcm9jZXNzZWQgY29zaW5lIG91dHB1dC4NCisgKi8NCit2b2lkIGFybV9zaW5fY29zX3EzMSgNCisgICAgcTMxX3QgdGhldGEsDQorICAgIHEzMV90ICpwU2luVmFsLA0KKyAgICBxMzFfdCAqcENvc1ZhbCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBjb21wbGV4IGNvbmp1Z2F0ZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9jbXBseF9jb25qX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IG51bVNhbXBsZXMpOw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTMxIGNvbXBsZXggY29uanVnYXRlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X2NvbmpfcTMxKA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IG51bVNhbXBsZXMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTE1IGNvbXBsZXggY29uanVnYXRlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X2NvbmpfcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IG51bVNhbXBsZXMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgY29tcGxleCBtYWduaXR1ZGUgc3F1YXJlZA0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIHJlYWwgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gdGhlIGlucHV0IHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X21hZ19zcXVhcmVkX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IG51bVNhbXBsZXMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTMxIGNvbXBsZXggbWFnbml0dWRlIHNxdWFyZWQNCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSByZWFsIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIHRoZSBpbnB1dCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9jbXBseF9tYWdfc3F1YXJlZF9xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBRMTUgY29tcGxleCBtYWduaXR1ZGUgc3F1YXJlZA0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIHJlYWwgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gdGhlIGlucHV0IHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X21hZ19zcXVhcmVkX3ExNSgNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBudW1TYW1wbGVzKTsNCisNCisNCisvKioNCisgICogQGluZ3JvdXAgZ3JvdXBDb250cm9sbGVyDQorICAqLw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBQSUQgUElEIE1vdG9yIENvbnRyb2wNCisgKg0KKyAqIEEgUHJvcG9ydGlvbmFsIEludGVncmFsIERlcml2YXRpdmUgKFBJRCkgY29udHJvbGxlciBpcyBhIGdlbmVyaWMgZmVlZGJhY2sgY29udHJvbA0KKyAqIGxvb3AgbWVjaGFuaXNtIHdpZGVseSB1c2VkIGluIGluZHVzdHJpYWwgY29udHJvbCBzeXN0ZW1zLg0KKyAqIEEgUElEIGNvbnRyb2xsZXIgaXMgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCB0eXBlIG9mIGZlZWRiYWNrIGNvbnRyb2xsZXIuDQorICoNCisgKiBUaGlzIHNldCBvZiBmdW5jdGlvbnMgaW1wbGVtZW50cyAoUElEKSBjb250cm9sbGVycw0KKyAqIGZvciBRMTUsIFEzMSwgYW5kIGZsb2F0aW5nLXBvaW50IGRhdGEgdHlwZXMuICBUaGUgZnVuY3Rpb25zIG9wZXJhdGUgb24gYSBzaW5nbGUgc2FtcGxlDQorICogb2YgZGF0YSBhbmQgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgc2luZ2xlIHByb2Nlc3NlZCB2YWx1ZS4NCisgKiA8Y29kZT5TPC9jb2RlPiBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFBJRCBjb250cm9sIGRhdGEgc3RydWN0dXJlLiAgPGNvZGU+aW48L2NvZGU+DQorICogaXMgdGhlIGlucHV0IHNhbXBsZSB2YWx1ZS4gVGhlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG91dHB1dCB2YWx1ZS4NCisgKg0KKyAqIFxwYXIgQWxnb3JpdGhtOg0KKyAqIDxwcmU+DQorICogICAgeVtuXSA9IHlbbi0xXSArIEEwICogeFtuXSArIEExICogeFtuLTFdICsgQTIgKiB4W24tMl0NCisgKiAgICBBMCA9IEtwICsgS2kgKyBLZA0KKyAqICAgIEExID0gKC1LcCApIC0gKDIgKiBLZCApDQorICogICAgQTIgPSBLZCAgPC9wcmU+DQorICoNCisgKiBccGFyDQorICogd2hlcmUgXGMgS3AgaXMgcHJvcG9ydGlvbmFsIGNvbnN0YW50LCBcYyBLaSBpcyBJbnRlZ3JhbCBjb25zdGFudCBhbmQgXGMgS2QgaXMgRGVyaXZhdGl2ZSBjb25zdGFudA0KKyAqDQorICogXHBhcg0KKyAqIFxpbWFnZSBodG1sIFBJRC5naWYgIlByb3BvcnRpb25hbCBJbnRlZ3JhbCBEZXJpdmF0aXZlIENvbnRyb2xsZXIiDQorICoNCisgKiBccGFyDQorICogVGhlIFBJRCBjb250cm9sbGVyIGNhbGN1bGF0ZXMgYW4gImVycm9yIiB2YWx1ZSBhcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuDQorICogdGhlIG1lYXN1cmVkIG91dHB1dCBhbmQgdGhlIHJlZmVyZW5jZSBpbnB1dC4NCisgKiBUaGUgY29udHJvbGxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgZXJyb3IgYnkgYWRqdXN0aW5nIHRoZSBwcm9jZXNzIGNvbnRyb2wgaW5wdXRzLg0KKyAqIFRoZSBwcm9wb3J0aW9uYWwgdmFsdWUgZGV0ZXJtaW5lcyB0aGUgcmVhY3Rpb24gdG8gdGhlIGN1cnJlbnQgZXJyb3IsDQorICogdGhlIGludGVncmFsIHZhbHVlIGRldGVybWluZXMgdGhlIHJlYWN0aW9uIGJhc2VkIG9uIHRoZSBzdW0gb2YgcmVjZW50IGVycm9ycywNCisgKiBhbmQgdGhlIGRlcml2YXRpdmUgdmFsdWUgZGV0ZXJtaW5lcyB0aGUgcmVhY3Rpb24gYmFzZWQgb24gdGhlIHJhdGUgYXQgd2hpY2ggdGhlIGVycm9yIGhhcyBiZWVuIGNoYW5naW5nLg0KKyAqDQorICogXHBhciBJbnN0YW5jZSBTdHJ1Y3R1cmUNCisgKiBUaGUgR2FpbnMgQTAsIEExLCBBMiBhbmQgc3RhdGUgdmFyaWFibGVzIGZvciBhIFBJRCBjb250cm9sbGVyIGFyZSBzdG9yZWQgdG9nZXRoZXIgaW4gYW4gaW5zdGFuY2UgZGF0YSBzdHJ1Y3R1cmUuDQorICogQSBzZXBhcmF0ZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgbXVzdCBiZSBkZWZpbmVkIGZvciBlYWNoIFBJRCBDb250cm9sbGVyLg0KKyAqIFRoZXJlIGFyZSBzZXBhcmF0ZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zIGZvciBlYWNoIG9mIHRoZSAzIHN1cHBvcnRlZCBkYXRhIHR5cGVzLg0KKyAqDQorICogXHBhciBSZXNldCBGdW5jdGlvbnMNCisgKiBUaGVyZSBpcyBhbHNvIGFuIGFzc29jaWF0ZWQgcmVzZXQgZnVuY3Rpb24gZm9yIGVhY2ggZGF0YSB0eXBlIHdoaWNoIGNsZWFycyB0aGUgc3RhdGUgYXJyYXkuDQorICoNCisgKiBccGFyIEluaXRpYWxpemF0aW9uIEZ1bmN0aW9ucw0KKyAqIFRoZXJlIGlzIGFsc28gYW4gYXNzb2NpYXRlZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgZWFjaCBkYXRhIHR5cGUuDQorICogVGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczoNCisgKiAtIEluaXRpYWxpemVzIHRoZSBHYWlucyBBMCwgQTEsIEEyIGZyb20gS3AsS2ksIEtkIGdhaW5zLg0KKyAqIC0gWmVyb3Mgb3V0IHRoZSB2YWx1ZXMgaW4gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKg0KKyAqIFxwYXINCisgKiBJbnN0YW5jZSBzdHJ1Y3R1cmUgY2Fubm90IGJlIHBsYWNlZCBpbnRvIGEgY29uc3QgZGF0YSBzZWN0aW9uIGFuZCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLg0KKyAqDQorICogXHBhciBGaXhlZC1Qb2ludCBCZWhhdmlvcg0KKyAqIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHVzaW5nIHRoZSBmaXhlZC1wb2ludCB2ZXJzaW9ucyBvZiB0aGUgUElEIENvbnRyb2xsZXIgZnVuY3Rpb25zLg0KKyAqIEluIHBhcnRpY3VsYXIsIHRoZSBvdmVyZmxvdyBhbmQgc2F0dXJhdGlvbiBiZWhhdmlvciBvZiB0aGUgYWNjdW11bGF0b3IgdXNlZCBpbiBlYWNoIGZ1bmN0aW9uIG11c3QgYmUgY29uc2lkZXJlZC4NCisgKiBSZWZlciB0byB0aGUgZnVuY3Rpb24gc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBiZWxvdyBmb3IgdXNhZ2UgZ3VpZGVsaW5lcy4NCisgKi8NCisNCisvKioNCisgKiBAYWRkdG9ncm91cCBQSUQNCisgKiBAew0KKyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IFBJRCBDb250cm9sLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgUElEIENvbnRyb2wgc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgICAgaW4gIGlucHV0IHNhbXBsZSB0byBwcm9jZXNzDQorICogQHJldHVybiBvdXQgcHJvY2Vzc2VkIG91dHB1dCBzYW1wbGUuDQorICovDQorc3RhdGljIF9fSU5MSU5FIGZsb2F0MzJfdCBhcm1fcGlkX2YzMigNCisgICAgYXJtX3BpZF9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCBpbikNCit7DQorICAgIGZsb2F0MzJfdCBvdXQ7DQorDQorICAgIC8qIHlbbl0gPSB5W24tMV0gKyBBMCAqIHhbbl0gKyBBMSAqIHhbbi0xXSArIEEyICogeFtuLTJdICAqLw0KKyAgICBvdXQgPSAoUy0+QTAgKiBpbikgKw0KKyAgICAgICAgICAoUy0+QTEgKiBTLT5zdGF0ZVswXSkgKyAoUy0+QTIgKiBTLT5zdGF0ZVsxXSkgKyAoUy0+c3RhdGVbMl0pOw0KKw0KKyAgICAvKiBVcGRhdGUgc3RhdGUgKi8NCisgICAgUy0+c3RhdGVbMV0gPSBTLT5zdGF0ZVswXTsNCisgICAgUy0+c3RhdGVbMF0gPSBpbjsNCisgICAgUy0+c3RhdGVbMl0gPSBvdXQ7DQorDQorICAgIC8qIHJldHVybiB0byBhcHBsaWNhdGlvbiAqLw0KKyAgICByZXR1cm4gKG91dCk7DQorDQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBQSUQgQ29udHJvbC4NCisgKiBAcGFyYW1baW4sb3V0XSBTICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBQSUQgQ29udHJvbCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICAgICBpbiAgaW5wdXQgc2FtcGxlIHRvIHByb2Nlc3MNCisgKiBAcmV0dXJuIG91dCBwcm9jZXNzZWQgb3V0cHV0IHNhbXBsZS4NCisgKg0KKyAqIDxiPlNjYWxpbmcgYW5kIE92ZXJmbG93IEJlaGF2aW9yOjwvYj4NCisgKiBccGFyDQorICogVGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHVzaW5nIGFuIGludGVybmFsIDY0LWJpdCBhY2N1bXVsYXRvci4NCisgKiBUaGUgYWNjdW11bGF0b3IgaGFzIGEgMi42MiBmb3JtYXQgYW5kIG1haW50YWlucyBmdWxsIHByZWNpc2lvbiBvZiB0aGUgaW50ZXJtZWRpYXRlIG11bHRpcGxpY2F0aW9uIHJlc3VsdHMgYnV0IHByb3ZpZGVzIG9ubHkgYSBzaW5nbGUgZ3VhcmQgYml0Lg0KKyAqIFRodXMsIGlmIHRoZSBhY2N1bXVsYXRvciByZXN1bHQgb3ZlcmZsb3dzIGl0IHdyYXBzIGFyb3VuZCByYXRoZXIgdGhhbiBjbGlwLg0KKyAqIEluIG9yZGVyIHRvIGF2b2lkIG92ZXJmbG93cyBjb21wbGV0ZWx5IHRoZSBpbnB1dCBzaWduYWwgbXVzdCBiZSBzY2FsZWQgZG93biBieSAyIGJpdHMgYXMgdGhlcmUgYXJlIGZvdXIgYWRkaXRpb25zLg0KKyAqIEFmdGVyIGFsbCBtdWx0aXBseS1hY2N1bXVsYXRlcyBhcmUgcGVyZm9ybWVkLCB0aGUgMi42MiBhY2N1bXVsYXRvciBpcyB0cnVuY2F0ZWQgdG8gMS4zMiBmb3JtYXQgYW5kIHRoZW4gc2F0dXJhdGVkIHRvIDEuMzEgZm9ybWF0Lg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSBxMzFfdCBhcm1fcGlkX3EzMSgNCisgICAgYXJtX3BpZF9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90IGluKQ0KK3sNCisgICAgcTYzX3QgYWNjOw0KKyAgICBxMzFfdCBvdXQ7DQorDQorICAgIC8qIGFjYyA9IEEwICogeFtuXSAgKi8NCisgICAgYWNjID0gKHE2M190KSBTLT5BMCAqIGluOw0KKw0KKyAgICAvKiBhY2MgKz0gQTEgKiB4W24tMV0gKi8NCisgICAgYWNjICs9IChxNjNfdCkgUy0+QTEgKiBTLT5zdGF0ZVswXTsNCisNCisgICAgLyogYWNjICs9IEEyICogeFtuLTJdICAqLw0KKyAgICBhY2MgKz0gKHE2M190KSBTLT5BMiAqIFMtPnN0YXRlWzFdOw0KKw0KKyAgICAvKiBjb252ZXJ0IG91dHB1dCB0byAxLjMxIGZvcm1hdCB0byBhZGQgeVtuLTFdICovDQorICAgIG91dCA9IChxMzFfdCkoYWNjID4+IDMxdSk7DQorDQorICAgIC8qIG91dCArPSB5W24tMV0gKi8NCisgICAgb3V0ICs9IFMtPnN0YXRlWzJdOw0KKw0KKyAgICAvKiBVcGRhdGUgc3RhdGUgKi8NCisgICAgUy0+c3RhdGVbMV0gPSBTLT5zdGF0ZVswXTsNCisgICAgUy0+c3RhdGVbMF0gPSBpbjsNCisgICAgUy0+c3RhdGVbMl0gPSBvdXQ7DQorDQorICAgIC8qIHJldHVybiB0byBhcHBsaWNhdGlvbiAqLw0KKyAgICByZXR1cm4gKG91dCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIFExNSBQSUQgQ29udHJvbC4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgUElEIENvbnRyb2wgc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgICAgaW4gIGlucHV0IHNhbXBsZSB0byBwcm9jZXNzDQorICogQHJldHVybiBvdXQgcHJvY2Vzc2VkIG91dHB1dCBzYW1wbGUuDQorICoNCisgKiA8Yj5TY2FsaW5nIGFuZCBPdmVyZmxvdyBCZWhhdmlvcjo8L2I+DQorICogXHBhcg0KKyAqIFRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIDY0LWJpdCBpbnRlcm5hbCBhY2N1bXVsYXRvci4NCisgKiBCb3RoIEdhaW5zIGFuZCBzdGF0ZSB2YXJpYWJsZXMgYXJlIHJlcHJlc2VudGVkIGluIDEuMTUgZm9ybWF0IGFuZCBtdWx0aXBsaWNhdGlvbnMgeWllbGQgYSAyLjMwIHJlc3VsdC4NCisgKiBUaGUgMi4zMCBpbnRlcm1lZGlhdGUgcmVzdWx0cyBhcmUgYWNjdW11bGF0ZWQgaW4gYSA2NC1iaXQgYWNjdW11bGF0b3IgaW4gMzQuMzAgZm9ybWF0Lg0KKyAqIFRoZXJlIGlzIG5vIHJpc2sgb2YgaW50ZXJuYWwgb3ZlcmZsb3cgd2l0aCB0aGlzIGFwcHJvYWNoIGFuZCB0aGUgZnVsbCBwcmVjaXNpb24gb2YgaW50ZXJtZWRpYXRlIG11bHRpcGxpY2F0aW9ucyBpcyBwcmVzZXJ2ZWQuDQorICogQWZ0ZXIgYWxsIGFkZGl0aW9ucyBoYXZlIGJlZW4gcGVyZm9ybWVkLCB0aGUgYWNjdW11bGF0b3IgaXMgdHJ1bmNhdGVkIHRvIDM0LjE1IGZvcm1hdCBieSBkaXNjYXJkaW5nIGxvdyAxNSBiaXRzLg0KKyAqIExhc3RseSwgdGhlIGFjY3VtdWxhdG9yIGlzIHNhdHVyYXRlZCB0byB5aWVsZCBhIHJlc3VsdCBpbiAxLjE1IGZvcm1hdC4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgcTE1X3QgYXJtX3BpZF9xMTUoDQorICAgIGFybV9waWRfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMTVfdCBpbikNCit7DQorICAgIHE2M190IGFjYzsNCisgICAgcTE1X3Qgb3V0Ow0KKw0KKyNpZm5kZWYgQVJNX01BVEhfQ00wX0ZBTUlMWQ0KKyAgICBfX1NJTUQzMl9UWVBFICp2c3RhdGU7DQorDQorICAgIC8qIEltcGxlbWVudGF0aW9uIG9mIFBJRCBjb250cm9sbGVyICovDQorDQorICAgIC8qIGFjYyA9IEEwICogeFtuXSAgKi8NCisgICAgYWNjID0gKHEzMV90KSBfX1NNVUFEKCh1aW50MzJfdClTLT5BMCwgKHVpbnQzMl90KWluKTsNCisNCisgICAgLyogYWNjICs9IEExICogeFtuLTFdICsgQTIgKiB4W24tMl0gICovDQorICAgIHZzdGF0ZSA9IF9fU0lNRDMyX0NPTlNUKFMtPnN0YXRlKTsNCisgICAgYWNjID0gKHE2M190KV9fU01MQUxEKCh1aW50MzJfdClTLT5BMSwgKHVpbnQzMl90KSAqIHZzdGF0ZSwgKHVpbnQ2NF90KWFjYyk7DQorI2Vsc2UNCisgICAgLyogYWNjID0gQTAgKiB4W25dICAqLw0KKyAgICBhY2MgPSAoKHEzMV90KSBTLT5BMCkgKiBpbjsNCisNCisgICAgLyogYWNjICs9IEExICogeFtuLTFdICsgQTIgKiB4W24tMl0gICovDQorICAgIGFjYyArPSAocTMxX3QpIFMtPkExICogUy0+c3RhdGVbMF07DQorICAgIGFjYyArPSAocTMxX3QpIFMtPkEyICogUy0+c3RhdGVbMV07DQorI2VuZGlmDQorDQorICAgIC8qIGFjYyArPSB5W24tMV0gKi8NCisgICAgYWNjICs9IChxMzFfdCkgUy0+c3RhdGVbMl0gPDwgMTU7DQorDQorICAgIC8qIHNhdHVyYXRlIHRoZSBvdXRwdXQgKi8NCisgICAgb3V0ID0gKHExNV90KShfX1NTQVQoKGFjYyA+PiAxNSksIDE2KSk7DQorDQorICAgIC8qIFVwZGF0ZSBzdGF0ZSAqLw0KKyAgICBTLT5zdGF0ZVsxXSA9IFMtPnN0YXRlWzBdOw0KKyAgICBTLT5zdGF0ZVswXSA9IGluOw0KKyAgICBTLT5zdGF0ZVsyXSA9IG91dDsNCisNCisgICAgLyogcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovDQorICAgIHJldHVybiAob3V0KTsNCit9DQorDQorLyoqDQorICogQH0gZW5kIG9mIFBJRCBncm91cA0KKyAqLw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGbG9hdGluZy1wb2ludCBtYXRyaXggaW52ZXJzZS4NCisgKiBAcGFyYW1baW5dICBzcmMgICBwb2ludHMgdG8gdGhlIGluc3RhbmNlIG9mIHRoZSBpbnB1dCBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtvdXRdIGRzdCAgIHBvaW50cyB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIG91dHB1dCBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLg0KKyAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU0laRV9NSVNNQVRDSCwgaWYgdGhlIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoLg0KKyAqIElmIHRoZSBpbnB1dCBtYXRyaXggaXMgc2luZ3VsYXIgKGRvZXMgbm90IGhhdmUgYW4gaW52ZXJzZSksIHRoZW4gdGhlIGFsZ29yaXRobSB0ZXJtaW5hdGVzIGFuZCByZXR1cm5zIGVycm9yIHN0YXR1cyBBUk1fTUFUSF9TSU5HVUxBUi4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfaW52ZXJzZV9mMzIoDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpzcmMsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpkc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGbG9hdGluZy1wb2ludCBtYXRyaXggaW52ZXJzZS4NCisgKiBAcGFyYW1baW5dICBzcmMgICBwb2ludHMgdG8gdGhlIGluc3RhbmNlIG9mIHRoZSBpbnB1dCBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtvdXRdIGRzdCAgIHBvaW50cyB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIG91dHB1dCBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLg0KKyAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU0laRV9NSVNNQVRDSCwgaWYgdGhlIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoLg0KKyAqIElmIHRoZSBpbnB1dCBtYXRyaXggaXMgc2luZ3VsYXIgKGRvZXMgbm90IGhhdmUgYW4gaW52ZXJzZSksIHRoZW4gdGhlIGFsZ29yaXRobSB0ZXJtaW5hdGVzIGFuZCByZXR1cm5zIGVycm9yIHN0YXR1cyBBUk1fTUFUSF9TSU5HVUxBUi4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfaW52ZXJzZV9mNjQoDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjY0ICpzcmMsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjY0ICpkc3QpOw0KKw0KKw0KKw0KKy8qKg0KKyAqIEBpbmdyb3VwIGdyb3VwQ29udHJvbGxlcg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBjbGFya2UgVmVjdG9yIENsYXJrZSBUcmFuc2Zvcm0NCisgKiBGb3J3YXJkIENsYXJrZSB0cmFuc2Zvcm0gY29udmVydHMgdGhlIGluc3RhbnRhbmVvdXMgc3RhdG9yIHBoYXNlcyBpbnRvIGEgdHdvLWNvb3JkaW5hdGUgdGltZSBpbnZhcmlhbnQgdmVjdG9yLg0KKyAqIEdlbmVyYWxseSB0aGUgQ2xhcmtlIHRyYW5zZm9ybSB1c2VzIHRocmVlLXBoYXNlIGN1cnJlbnRzIDxjb2RlPklhLCBJYiBhbmQgSWM8L2NvZGU+IHRvIGNhbGN1bGF0ZSBjdXJyZW50cw0KKyAqIGluIHRoZSB0d28tcGhhc2Ugb3J0aG9nb25hbCBzdGF0b3IgYXhpcyA8Y29kZT5JYWxwaGE8L2NvZGU+IGFuZCA8Y29kZT5JYmV0YTwvY29kZT4uDQorICogV2hlbiA8Y29kZT5JYWxwaGE8L2NvZGU+IGlzIHN1cGVycG9zZWQgd2l0aCA8Y29kZT5JYTwvY29kZT4gYXMgc2hvd24gaW4gdGhlIGZpZ3VyZSBiZWxvdw0KKyAqIFxpbWFnZSBodG1sIGNsYXJrZS5naWYgU3RhdG9yIGN1cnJlbnQgc3BhY2UgdmVjdG9yIGFuZCBpdHMgY29tcG9uZW50cyBpbiAoYSxiKS4NCisgKiBhbmQgPGNvZGU+SWEgKyBJYiArIEljID0gMDwvY29kZT4sIGluIHRoaXMgY29uZGl0aW9uIDxjb2RlPklhbHBoYTwvY29kZT4gYW5kIDxjb2RlPkliZXRhPC9jb2RlPg0KKyAqIGNhbiBiZSBjYWxjdWxhdGVkIHVzaW5nIG9ubHkgPGNvZGU+SWE8L2NvZGU+IGFuZCA8Y29kZT5JYjwvY29kZT4uDQorICoNCisgKiBUaGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24gYSBzaW5nbGUgc2FtcGxlIG9mIGRhdGEgYW5kIGVhY2ggY2FsbCB0byB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJvY2Vzc2VkIG91dHB1dC4NCisgKiBUaGUgbGlicmFyeSBwcm92aWRlcyBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIFEzMSBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4NCisgKiBccGFyIEFsZ29yaXRobQ0KKyAqIFxpbWFnZSBodG1sIGNsYXJrZUZvcm11bGEuZ2lmDQorICogd2hlcmUgPGNvZGU+SWE8L2NvZGU+IGFuZCA8Y29kZT5JYjwvY29kZT4gYXJlIHRoZSBpbnN0YW50YW5lb3VzIHN0YXRvciBwaGFzZXMgYW5kDQorICogPGNvZGU+cElhbHBoYTwvY29kZT4gYW5kIDxjb2RlPnBJYmV0YTwvY29kZT4gYXJlIHRoZSB0d28gY29vcmRpbmF0ZXMgb2YgdGltZSBpbnZhcmlhbnQgdmVjdG9yLg0KKyAqIFxwYXIgRml4ZWQtUG9pbnQgQmVoYXZpb3INCisgKiBDYXJlIG11c3QgYmUgdGFrZW4gd2hlbiB1c2luZyB0aGUgUTMxIHZlcnNpb24gb2YgdGhlIENsYXJrZSB0cmFuc2Zvcm0uDQorICogSW4gcGFydGljdWxhciwgdGhlIG92ZXJmbG93IGFuZCBzYXR1cmF0aW9uIGJlaGF2aW9yIG9mIHRoZSBhY2N1bXVsYXRvciB1c2VkIG11c3QgYmUgY29uc2lkZXJlZC4NCisgKiBSZWZlciB0byB0aGUgZnVuY3Rpb24gc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBiZWxvdyBmb3IgdXNhZ2UgZ3VpZGVsaW5lcy4NCisgKi8NCisNCisvKioNCisgKiBAYWRkdG9ncm91cCBjbGFya2UNCisgKiBAew0KKyAqLw0KKw0KKy8qKg0KKyAqDQorICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBDbGFya2UgdHJhbnNmb3JtDQorICogQHBhcmFtW2luXSAgSWEgICAgICAgaW5wdXQgdGhyZWUtcGhhc2UgY29vcmRpbmF0ZSA8Y29kZT5hPC9jb2RlPg0KKyAqIEBwYXJhbVtpbl0gIEliICAgICAgIGlucHV0IHRocmVlLXBoYXNlIGNvb3JkaW5hdGUgPGNvZGU+YjwvY29kZT4NCisgKiBAcGFyYW1bb3V0XSBwSWFscGhhICBwb2ludHMgdG8gb3V0cHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGFscGhhDQorICogQHBhcmFtW291dF0gcEliZXRhICAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBiZXRhDQorICovDQorc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2NsYXJrZV9mMzIoDQorICAgIGZsb2F0MzJfdCBJYSwNCisgICAgZmxvYXQzMl90IEliLA0KKyAgICBmbG9hdDMyX3QgKnBJYWxwaGEsDQorICAgIGZsb2F0MzJfdCAqcEliZXRhKQ0KK3sNCisgICAgLyogQ2FsY3VsYXRlIHBJYWxwaGEgdXNpbmcgdGhlIGVxdWF0aW9uLCBwSWFscGhhID0gSWEgKi8NCisgICAgKnBJYWxwaGEgPSBJYTsNCisNCisgICAgLyogQ2FsY3VsYXRlIHBJYmV0YSB1c2luZyB0aGUgZXF1YXRpb24sIHBJYmV0YSA9ICgxL3NxcnQoMykpICogSWEgKyAoMi9zcXJ0KDMpKSAqIEliICovDQorICAgICpwSWJldGEgPSAoKGZsb2F0MzJfdCkgMC41NzczNTAyNjkxOSAqIElhICsgKGZsb2F0MzJfdCkgMS4xNTQ3MDA1MzgzOCAqIEliKTsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmICBDbGFya2UgdHJhbnNmb3JtIGZvciBRMzEgdmVyc2lvbg0KKyAqIEBwYXJhbVtpbl0gIElhICAgICAgIGlucHV0IHRocmVlLXBoYXNlIGNvb3JkaW5hdGUgPGNvZGU+YTwvY29kZT4NCisgKiBAcGFyYW1baW5dICBJYiAgICAgICBpbnB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmI8L2NvZGU+DQorICogQHBhcmFtW291dF0gcElhbHBoYSAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBhbHBoYQ0KKyAqIEBwYXJhbVtvdXRdIHBJYmV0YSAgIHBvaW50cyB0byBvdXRwdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYmV0YQ0KKyAqDQorICogPGI+U2NhbGluZyBhbmQgT3ZlcmZsb3cgQmVoYXZpb3I6PC9iPg0KKyAqIFxwYXINCisgKiBUaGUgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYW4gaW50ZXJuYWwgMzItYml0IGFjY3VtdWxhdG9yLg0KKyAqIFRoZSBhY2N1bXVsYXRvciBtYWludGFpbnMgMS4zMSBmb3JtYXQgYnkgdHJ1bmNhdGluZyBsb3dlciAzMSBiaXRzIG9mIHRoZSBpbnRlcm1lZGlhdGUgbXVsdGlwbGljYXRpb24gaW4gMi42MiBmb3JtYXQuDQorICogVGhlcmUgaXMgc2F0dXJhdGlvbiBvbiB0aGUgYWRkaXRpb24sIGhlbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuDQorICovDQorc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2NsYXJrZV9xMzEoDQorICAgIHEzMV90IElhLA0KKyAgICBxMzFfdCBJYiwNCisgICAgcTMxX3QgKnBJYWxwaGEsDQorICAgIHEzMV90ICpwSWJldGEpDQorew0KKyAgICBxMzFfdCBwcm9kdWN0MSwgcHJvZHVjdDI7ICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgdmFyaWFibGVzIHVzZWQgdG8gc3RvcmUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgKi8NCisNCisgICAgLyogQ2FsY3VsYXRpbmcgcElhbHBoYSBmcm9tIElhIGJ5IGVxdWF0aW9uIHBJYWxwaGEgPSBJYSAqLw0KKyAgICAqcElhbHBoYSA9IElhOw0KKw0KKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5ICgxLyhzcXJ0KDMpKSAqIElhKSAqLw0KKyAgICBwcm9kdWN0MSA9IChxMzFfdCkoKChxNjNfdCkgSWEgKiAweDI0RjM0RThCKSA+PiAzMCk7DQorDQorICAgIC8qIEludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgYnkgKDIvc3FydCgzKSAqIEliKSAqLw0KKyAgICBwcm9kdWN0MiA9IChxMzFfdCkoKChxNjNfdCkgSWIgKiAweDQ5RTY5RDE2KSA+PiAzMCk7DQorDQorICAgIC8qIHBJYmV0YSBpcyBjYWxjdWxhdGVkIGJ5IGFkZGluZyB0aGUgaW50ZXJtZWRpYXRlIHByb2R1Y3RzICovDQorICAgICpwSWJldGEgPSBfX1FBREQocHJvZHVjdDEsIHByb2R1Y3QyKTsNCit9DQorDQorLyoqDQorICogQH0gZW5kIG9mIGNsYXJrZSBncm91cA0KKyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiAgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBRNyB2ZWN0b3IgdG8gUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICovDQordm9pZCBhcm1fcTdfdG9fcTMxKA0KKyAgICBxN190ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisNCisvKioNCisgKiBAaW5ncm91cCBncm91cENvbnRyb2xsZXINCisgKi8NCisNCisvKioNCisgKiBAZGVmZ3JvdXAgaW52X2NsYXJrZSBWZWN0b3IgSW52ZXJzZSBDbGFya2UgVHJhbnNmb3JtDQorICogSW52ZXJzZSBDbGFya2UgdHJhbnNmb3JtIGNvbnZlcnRzIHRoZSB0d28tY29vcmRpbmF0ZSB0aW1lIGludmFyaWFudCB2ZWN0b3IgaW50byBpbnN0YW50YW5lb3VzIHN0YXRvciBwaGFzZXMuDQorICoNCisgKiBUaGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24gYSBzaW5nbGUgc2FtcGxlIG9mIGRhdGEgYW5kIGVhY2ggY2FsbCB0byB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJvY2Vzc2VkIG91dHB1dC4NCisgKiBUaGUgbGlicmFyeSBwcm92aWRlcyBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIFEzMSBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4NCisgKiBccGFyIEFsZ29yaXRobQ0KKyAqIFxpbWFnZSBodG1sIGNsYXJrZUludkZvcm11bGEuZ2lmDQorICogd2hlcmUgPGNvZGU+cElhPC9jb2RlPiBhbmQgPGNvZGU+cEliPC9jb2RlPiBhcmUgdGhlIGluc3RhbnRhbmVvdXMgc3RhdG9yIHBoYXNlcyBhbmQNCisgKiA8Y29kZT5JYWxwaGE8L2NvZGU+IGFuZCA8Y29kZT5JYmV0YTwvY29kZT4gYXJlIHRoZSB0d28gY29vcmRpbmF0ZXMgb2YgdGltZSBpbnZhcmlhbnQgdmVjdG9yLg0KKyAqIFxwYXIgRml4ZWQtUG9pbnQgQmVoYXZpb3INCisgKiBDYXJlIG11c3QgYmUgdGFrZW4gd2hlbiB1c2luZyB0aGUgUTMxIHZlcnNpb24gb2YgdGhlIENsYXJrZSB0cmFuc2Zvcm0uDQorICogSW4gcGFydGljdWxhciwgdGhlIG92ZXJmbG93IGFuZCBzYXR1cmF0aW9uIGJlaGF2aW9yIG9mIHRoZSBhY2N1bXVsYXRvciB1c2VkIG11c3QgYmUgY29uc2lkZXJlZC4NCisgKiBSZWZlciB0byB0aGUgZnVuY3Rpb24gc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBiZWxvdyBmb3IgdXNhZ2UgZ3VpZGVsaW5lcy4NCisgKi8NCisNCisvKioNCisgKiBAYWRkdG9ncm91cCBpbnZfY2xhcmtlDQorICogQHsNCisgKi8NCisNCisvKioNCisqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgSW52ZXJzZSBDbGFya2UgdHJhbnNmb3JtDQorKiBAcGFyYW1baW5dICBJYWxwaGEgIGlucHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGFscGhhDQorKiBAcGFyYW1baW5dICBJYmV0YSAgIGlucHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGJldGENCisqIEBwYXJhbVtvdXRdIHBJYSAgICAgcG9pbnRzIHRvIG91dHB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmE8L2NvZGU+DQorKiBAcGFyYW1bb3V0XSBwSWIgICAgIHBvaW50cyB0byBvdXRwdXQgdGhyZWUtcGhhc2UgY29vcmRpbmF0ZSA8Y29kZT5iPC9jb2RlPg0KKyovDQorc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2ludl9jbGFya2VfZjMyKA0KKyAgICBmbG9hdDMyX3QgSWFscGhhLA0KKyAgICBmbG9hdDMyX3QgSWJldGEsDQorICAgIGZsb2F0MzJfdCAqcElhLA0KKyAgICBmbG9hdDMyX3QgKnBJYikNCit7DQorICAgIC8qIENhbGN1bGF0aW5nIHBJYSBmcm9tIElhbHBoYSBieSBlcXVhdGlvbiBwSWEgPSBJYWxwaGEgKi8NCisgICAgKnBJYSA9IElhbHBoYTsNCisNCisgICAgLyogQ2FsY3VsYXRpbmcgcEliIGZyb20gSWFscGhhIGFuZCBJYmV0YSBieSBlcXVhdGlvbiBwSWIgPSAtKDEvMikgKiBJYWxwaGEgKyAoc3FydCgzKS8yKSAqIEliZXRhICovDQorICAgICpwSWIgPSAtMC41ZiAqIElhbHBoYSArIDAuODY2MDI1NDAzOWYgKiBJYmV0YTsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbnZlcnNlIENsYXJrZSB0cmFuc2Zvcm0gZm9yIFEzMSB2ZXJzaW9uDQorICogQHBhcmFtW2luXSAgSWFscGhhICBpbnB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBhbHBoYQ0KKyAqIEBwYXJhbVtpbl0gIEliZXRhICAgaW5wdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYmV0YQ0KKyAqIEBwYXJhbVtvdXRdIHBJYSAgICAgcG9pbnRzIHRvIG91dHB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmE8L2NvZGU+DQorICogQHBhcmFtW291dF0gcEliICAgICBwb2ludHMgdG8gb3V0cHV0IHRocmVlLXBoYXNlIGNvb3JkaW5hdGUgPGNvZGU+YjwvY29kZT4NCisgKg0KKyAqIDxiPlNjYWxpbmcgYW5kIE92ZXJmbG93IEJlaGF2aW9yOjwvYj4NCisgKiBccGFyDQorICogVGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHVzaW5nIGFuIGludGVybmFsIDMyLWJpdCBhY2N1bXVsYXRvci4NCisgKiBUaGUgYWNjdW11bGF0b3IgbWFpbnRhaW5zIDEuMzEgZm9ybWF0IGJ5IHRydW5jYXRpbmcgbG93ZXIgMzEgYml0cyBvZiB0aGUgaW50ZXJtZWRpYXRlIG11bHRpcGxpY2F0aW9uIGluIDIuNjIgZm9ybWF0Lg0KKyAqIFRoZXJlIGlzIHNhdHVyYXRpb24gb24gdGhlIHN1YnRyYWN0aW9uLCBoZW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93Lg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB2b2lkIGFybV9pbnZfY2xhcmtlX3EzMSgNCisgICAgcTMxX3QgSWFscGhhLA0KKyAgICBxMzFfdCBJYmV0YSwNCisgICAgcTMxX3QgKnBJYSwNCisgICAgcTMxX3QgKnBJYikNCit7DQorICAgIHEzMV90IHByb2R1Y3QxLCBwcm9kdWN0MjsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLw0KKw0KKyAgICAvKiBDYWxjdWxhdGluZyBwSWEgZnJvbSBJYWxwaGEgYnkgZXF1YXRpb24gcElhID0gSWFscGhhICovDQorICAgICpwSWEgPSBJYWxwaGE7DQorDQorICAgIC8qIEludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgYnkgKDEvKDIqc3FydCgzKSkgKiBJYSkgKi8NCisgICAgcHJvZHVjdDEgPSAocTMxX3QpKCgocTYzX3QpKElhbHBoYSkgKiAoMHg0MDAwMDAwMCkpID4+IDMxKTsNCisNCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoMS9zcXJ0KDMpICogcEliKSAqLw0KKyAgICBwcm9kdWN0MiA9IChxMzFfdCkoKChxNjNfdCkoSWJldGEpICogKDB4NkVEOUVCQTEpKSA+PiAzMSk7DQorDQorICAgIC8qIHBJYiBpcyBjYWxjdWxhdGVkIGJ5IHN1YnRyYWN0aW5nIHRoZSBwcm9kdWN0cyAqLw0KKyAgICAqcEliID0gX19RU1VCKHByb2R1Y3QyLCBwcm9kdWN0MSk7DQorfQ0KKw0KKy8qKg0KKyAqIEB9IGVuZCBvZiBpbnZfY2xhcmtlIGdyb3VwDQorICovDQorDQorLyoqDQorICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFE3IHZlY3RvciB0byBRMTUgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9xN190b19xMTUoDQorICAgIHE3X3QgKnBTcmMsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKw0KKy8qKg0KKyAqIEBpbmdyb3VwIGdyb3VwQ29udHJvbGxlcg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBwYXJrIFZlY3RvciBQYXJrIFRyYW5zZm9ybQ0KKyAqDQorICogRm9yd2FyZCBQYXJrIHRyYW5zZm9ybSBjb252ZXJ0cyB0aGUgaW5wdXQgdHdvLWNvb3JkaW5hdGUgdmVjdG9yIHRvIGZsdXggYW5kIHRvcnF1ZSBjb21wb25lbnRzLg0KKyAqIFRoZSBQYXJrIHRyYW5zZm9ybSBjYW4gYmUgdXNlZCB0byByZWFsaXplIHRoZSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgPGNvZGU+SWFscGhhPC9jb2RlPiBhbmQgdGhlIDxjb2RlPkliZXRhPC9jb2RlPiBjdXJyZW50cw0KKyAqIGZyb20gdGhlIHN0YXRpb25hcnkgdG8gdGhlIG1vdmluZyByZWZlcmVuY2UgZnJhbWUgYW5kIGNvbnRyb2wgdGhlIHNwYXRpYWwgcmVsYXRpb25zaGlwIGJldHdlZW4NCisgKiB0aGUgc3RhdG9yIHZlY3RvciBjdXJyZW50IGFuZCByb3RvciBmbHV4IHZlY3Rvci4NCisgKiBJZiB3ZSBjb25zaWRlciB0aGUgZCBheGlzIGFsaWduZWQgd2l0aCB0aGUgcm90b3IgZmx1eCwgdGhlIGRpYWdyYW0gYmVsb3cgc2hvd3MgdGhlDQorICogY3VycmVudCB2ZWN0b3IgYW5kIHRoZSByZWxhdGlvbnNoaXAgZnJvbSB0aGUgdHdvIHJlZmVyZW5jZSBmcmFtZXM6DQorICogXGltYWdlIGh0bWwgcGFyay5naWYgIlN0YXRvciBjdXJyZW50IHNwYWNlIHZlY3RvciBhbmQgaXRzIGNvbXBvbmVudCBpbiAoYSxiKSBhbmQgaW4gdGhlIGQscSByb3RhdGluZyByZWZlcmVuY2UgZnJhbWUiDQorICoNCisgKiBUaGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24gYSBzaW5nbGUgc2FtcGxlIG9mIGRhdGEgYW5kIGVhY2ggY2FsbCB0byB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJvY2Vzc2VkIG91dHB1dC4NCisgKiBUaGUgbGlicmFyeSBwcm92aWRlcyBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIFEzMSBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4NCisgKiBccGFyIEFsZ29yaXRobQ0KKyAqIFxpbWFnZSBodG1sIHBhcmtGb3JtdWxhLmdpZg0KKyAqIHdoZXJlIDxjb2RlPklhbHBoYTwvY29kZT4gYW5kIDxjb2RlPkliZXRhPC9jb2RlPiBhcmUgdGhlIHN0YXRvciB2ZWN0b3IgY29tcG9uZW50cywNCisgKiA8Y29kZT5wSWQ8L2NvZGU+IGFuZCA8Y29kZT5wSXE8L2NvZGU+IGFyZSByb3RvciB2ZWN0b3IgY29tcG9uZW50cyBhbmQgPGNvZGU+Y29zVmFsPC9jb2RlPiBhbmQgPGNvZGU+c2luVmFsPC9jb2RlPiBhcmUgdGhlDQorICogY29zaW5lIGFuZCBzaW5lIHZhbHVlcyBvZiB0aGV0YSAocm90b3IgZmx1eCBwb3NpdGlvbikuDQorICogXHBhciBGaXhlZC1Qb2ludCBCZWhhdmlvcg0KKyAqIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHVzaW5nIHRoZSBRMzEgdmVyc2lvbiBvZiB0aGUgUGFyayB0cmFuc2Zvcm0uDQorICogSW4gcGFydGljdWxhciwgdGhlIG92ZXJmbG93IGFuZCBzYXR1cmF0aW9uIGJlaGF2aW9yIG9mIHRoZSBhY2N1bXVsYXRvciB1c2VkIG11c3QgYmUgY29uc2lkZXJlZC4NCisgKiBSZWZlciB0byB0aGUgZnVuY3Rpb24gc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBiZWxvdyBmb3IgdXNhZ2UgZ3VpZGVsaW5lcy4NCisgKi8NCisNCisvKioNCisgKiBAYWRkdG9ncm91cCBwYXJrDQorICogQHsNCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgUGFyayB0cmFuc2Zvcm0NCisgKiBAcGFyYW1baW5dICBJYWxwaGEgIGlucHV0IHR3by1waGFzZSB2ZWN0b3IgY29vcmRpbmF0ZSBhbHBoYQ0KKyAqIEBwYXJhbVtpbl0gIEliZXRhICAgaW5wdXQgdHdvLXBoYXNlIHZlY3RvciBjb29yZGluYXRlIGJldGENCisgKiBAcGFyYW1bb3V0XSBwSWQgICAgIHBvaW50cyB0byBvdXRwdXQgICByb3RvciByZWZlcmVuY2UgZnJhbWUgZA0KKyAqIEBwYXJhbVtvdXRdIHBJcSAgICAgcG9pbnRzIHRvIG91dHB1dCAgIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBxDQorICogQHBhcmFtW2luXSAgc2luVmFsICBzaW5lIHZhbHVlIG9mIHJvdGF0aW9uIGFuZ2xlIHRoZXRhDQorICogQHBhcmFtW2luXSAgY29zVmFsICBjb3NpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGENCisgKg0KKyAqIFRoZSBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBmb3J3YXJkIFBhcmsgdHJhbnNmb3JtLg0KKyAqDQorICovDQorc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX3BhcmtfZjMyKA0KKyAgICBmbG9hdDMyX3QgSWFscGhhLA0KKyAgICBmbG9hdDMyX3QgSWJldGEsDQorICAgIGZsb2F0MzJfdCAqcElkLA0KKyAgICBmbG9hdDMyX3QgKnBJcSwNCisgICAgZmxvYXQzMl90IHNpblZhbCwNCisgICAgZmxvYXQzMl90IGNvc1ZhbCkNCit7DQorICAgIC8qIENhbGN1bGF0ZSBwSWQgdXNpbmcgdGhlIGVxdWF0aW9uLCBwSWQgPSBJYWxwaGEgKiBjb3NWYWwgKyBJYmV0YSAqIHNpblZhbCAqLw0KKyAgICAqcElkID0gSWFscGhhICogY29zVmFsICsgSWJldGEgKiBzaW5WYWw7DQorDQorICAgIC8qIENhbGN1bGF0ZSBwSXEgdXNpbmcgdGhlIGVxdWF0aW9uLCBwSXEgPSAtIElhbHBoYSAqIHNpblZhbCArIEliZXRhICogY29zVmFsICovDQorICAgICpwSXEgPSAtSWFscGhhICogc2luVmFsICsgSWJldGEgKiBjb3NWYWw7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUGFyayB0cmFuc2Zvcm0gZm9yIFEzMSB2ZXJzaW9uDQorICogQHBhcmFtW2luXSAgSWFscGhhICBpbnB1dCB0d28tcGhhc2UgdmVjdG9yIGNvb3JkaW5hdGUgYWxwaGENCisgKiBAcGFyYW1baW5dICBJYmV0YSAgIGlucHV0IHR3by1waGFzZSB2ZWN0b3IgY29vcmRpbmF0ZSBiZXRhDQorICogQHBhcmFtW291dF0gcElkICAgICBwb2ludHMgdG8gb3V0cHV0IHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBkDQorICogQHBhcmFtW291dF0gcElxICAgICBwb2ludHMgdG8gb3V0cHV0IHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBxDQorICogQHBhcmFtW2luXSAgc2luVmFsICBzaW5lIHZhbHVlIG9mIHJvdGF0aW9uIGFuZ2xlIHRoZXRhDQorICogQHBhcmFtW2luXSAgY29zVmFsICBjb3NpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGENCisgKg0KKyAqIDxiPlNjYWxpbmcgYW5kIE92ZXJmbG93IEJlaGF2aW9yOjwvYj4NCisgKiBccGFyDQorICogVGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHVzaW5nIGFuIGludGVybmFsIDMyLWJpdCBhY2N1bXVsYXRvci4NCisgKiBUaGUgYWNjdW11bGF0b3IgbWFpbnRhaW5zIDEuMzEgZm9ybWF0IGJ5IHRydW5jYXRpbmcgbG93ZXIgMzEgYml0cyBvZiB0aGUgaW50ZXJtZWRpYXRlIG11bHRpcGxpY2F0aW9uIGluIDIuNjIgZm9ybWF0Lg0KKyAqIFRoZXJlIGlzIHNhdHVyYXRpb24gb24gdGhlIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiwgaGVuY2UgdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fcGFya19xMzEoDQorICAgIHEzMV90IElhbHBoYSwNCisgICAgcTMxX3QgSWJldGEsDQorICAgIHEzMV90ICpwSWQsDQorICAgIHEzMV90ICpwSXEsDQorICAgIHEzMV90IHNpblZhbCwNCisgICAgcTMxX3QgY29zVmFsKQ0KK3sNCisgICAgcTMxX3QgcHJvZHVjdDEsIHByb2R1Y3QyOyAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IHZhcmlhYmxlcyB1c2VkIHRvIHN0b3JlIGludGVybWVkaWF0ZSByZXN1bHRzICovDQorICAgIHEzMV90IHByb2R1Y3QzLCBwcm9kdWN0NDsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLw0KKw0KKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJYWxwaGEgKiBjb3NWYWwpICovDQorICAgIHByb2R1Y3QxID0gKHEzMV90KSgoKHE2M190KShJYWxwaGEpICogKGNvc1ZhbCkpID4+IDMxKTsNCisNCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoSWJldGEgKiBzaW5WYWwpICovDQorICAgIHByb2R1Y3QyID0gKHEzMV90KSgoKHE2M190KShJYmV0YSkgKiAoc2luVmFsKSkgPj4gMzEpOw0KKw0KKw0KKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJYWxwaGEgKiBzaW5WYWwpICovDQorICAgIHByb2R1Y3QzID0gKHEzMV90KSgoKHE2M190KShJYWxwaGEpICogKHNpblZhbCkpID4+IDMxKTsNCisNCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoSWJldGEgKiBjb3NWYWwpICovDQorICAgIHByb2R1Y3Q0ID0gKHEzMV90KSgoKHE2M190KShJYmV0YSkgKiAoY29zVmFsKSkgPj4gMzEpOw0KKw0KKyAgICAvKiBDYWxjdWxhdGUgcElkIGJ5IGFkZGluZyB0aGUgdHdvIGludGVybWVkaWF0ZSBwcm9kdWN0cyAxIGFuZCAyICovDQorICAgICpwSWQgPSBfX1FBREQocHJvZHVjdDEsIHByb2R1Y3QyKTsNCisNCisgICAgLyogQ2FsY3VsYXRlIHBJcSBieSBzdWJ0cmFjdGluZyB0aGUgdHdvIGludGVybWVkaWF0ZSBwcm9kdWN0cyAzIGZyb20gNCAqLw0KKyAgICAqcElxID0gX19RU1VCKHByb2R1Y3Q0LCBwcm9kdWN0Myk7DQorfQ0KKw0KKy8qKg0KKyAqIEB9IGVuZCBvZiBwYXJrIGdyb3VwDQorICovDQorDQorLyoqDQorICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFE3IHZlY3RvciB0byBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9xN190b19mbG9hdCgNCisgICAgcTdfdCAqcFNyYywNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBpbmdyb3VwIGdyb3VwQ29udHJvbGxlcg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBpbnZfcGFyayBWZWN0b3IgSW52ZXJzZSBQYXJrIHRyYW5zZm9ybQ0KKyAqIEludmVyc2UgUGFyayB0cmFuc2Zvcm0gY29udmVydHMgdGhlIGlucHV0IGZsdXggYW5kIHRvcnF1ZSBjb21wb25lbnRzIHRvIHR3by1jb29yZGluYXRlIHZlY3Rvci4NCisgKg0KKyAqIFRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbiBhIHNpbmdsZSBzYW1wbGUgb2YgZGF0YSBhbmQgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcm9jZXNzZWQgb3V0cHV0Lg0KKyAqIFRoZSBsaWJyYXJ5IHByb3ZpZGVzIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgUTMxIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzLg0KKyAqIFxwYXIgQWxnb3JpdGhtDQorICogXGltYWdlIGh0bWwgcGFya0ludkZvcm11bGEuZ2lmDQorICogd2hlcmUgPGNvZGU+cElhbHBoYTwvY29kZT4gYW5kIDxjb2RlPnBJYmV0YTwvY29kZT4gYXJlIHRoZSBzdGF0b3IgdmVjdG9yIGNvbXBvbmVudHMsDQorICogPGNvZGU+SWQ8L2NvZGU+IGFuZCA8Y29kZT5JcTwvY29kZT4gYXJlIHJvdG9yIHZlY3RvciBjb21wb25lbnRzIGFuZCA8Y29kZT5jb3NWYWw8L2NvZGU+IGFuZCA8Y29kZT5zaW5WYWw8L2NvZGU+IGFyZSB0aGUNCisgKiBjb3NpbmUgYW5kIHNpbmUgdmFsdWVzIG9mIHRoZXRhIChyb3RvciBmbHV4IHBvc2l0aW9uKS4NCisgKiBccGFyIEZpeGVkLVBvaW50IEJlaGF2aW9yDQorICogQ2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gdXNpbmcgdGhlIFEzMSB2ZXJzaW9uIG9mIHRoZSBQYXJrIHRyYW5zZm9ybS4NCisgKiBJbiBwYXJ0aWN1bGFyLCB0aGUgb3ZlcmZsb3cgYW5kIHNhdHVyYXRpb24gYmVoYXZpb3Igb2YgdGhlIGFjY3VtdWxhdG9yIHVzZWQgbXVzdCBiZSBjb25zaWRlcmVkLg0KKyAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGJlbG93IGZvciB1c2FnZSBndWlkZWxpbmVzLg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBhZGR0b2dyb3VwIGludl9wYXJrDQorICogQHsNCisgKi8NCisNCisvKioNCisqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgSW52ZXJzZSBQYXJrIHRyYW5zZm9ybQ0KKyogQHBhcmFtW2luXSAgSWQgICAgICAgaW5wdXQgY29vcmRpbmF0ZSBvZiByb3RvciByZWZlcmVuY2UgZnJhbWUgZA0KKyogQHBhcmFtW2luXSAgSXEgICAgICAgaW5wdXQgY29vcmRpbmF0ZSBvZiByb3RvciByZWZlcmVuY2UgZnJhbWUgcQ0KKyogQHBhcmFtW291dF0gcElhbHBoYSAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBhbHBoYQ0KKyogQHBhcmFtW291dF0gcEliZXRhICAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBiZXRhDQorKiBAcGFyYW1baW5dICBzaW5WYWwgICBzaW5lIHZhbHVlIG9mIHJvdGF0aW9uIGFuZ2xlIHRoZXRhDQorKiBAcGFyYW1baW5dICBjb3NWYWwgICBjb3NpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGENCisqLw0KK3N0YXRpYyBfX0lOTElORSB2b2lkIGFybV9pbnZfcGFya19mMzIoDQorICAgIGZsb2F0MzJfdCBJZCwNCisgICAgZmxvYXQzMl90IElxLA0KKyAgICBmbG9hdDMyX3QgKnBJYWxwaGEsDQorICAgIGZsb2F0MzJfdCAqcEliZXRhLA0KKyAgICBmbG9hdDMyX3Qgc2luVmFsLA0KKyAgICBmbG9hdDMyX3QgY29zVmFsKQ0KK3sNCisgICAgLyogQ2FsY3VsYXRlIHBJYWxwaGEgdXNpbmcgdGhlIGVxdWF0aW9uLCBwSWFscGhhID0gSWQgKiBjb3NWYWwgLSBJcSAqIHNpblZhbCAqLw0KKyAgICAqcElhbHBoYSA9IElkICogY29zVmFsIC0gSXEgKiBzaW5WYWw7DQorDQorICAgIC8qIENhbGN1bGF0ZSBwSWJldGEgdXNpbmcgdGhlIGVxdWF0aW9uLCBwSWJldGEgPSBJZCAqIHNpblZhbCArIElxICogY29zVmFsICovDQorICAgICpwSWJldGEgPSBJZCAqIHNpblZhbCArIElxICogY29zVmFsOw0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgIEludmVyc2UgUGFyayB0cmFuc2Zvcm0gZm9yICAgUTMxIHZlcnNpb24NCisgKiBAcGFyYW1baW5dICBJZCAgICAgICBpbnB1dCBjb29yZGluYXRlIG9mIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBkDQorICogQHBhcmFtW2luXSAgSXEgICAgICAgaW5wdXQgY29vcmRpbmF0ZSBvZiByb3RvciByZWZlcmVuY2UgZnJhbWUgcQ0KKyAqIEBwYXJhbVtvdXRdIHBJYWxwaGEgIHBvaW50cyB0byBvdXRwdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYWxwaGENCisgKiBAcGFyYW1bb3V0XSBwSWJldGEgICBwb2ludHMgdG8gb3V0cHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGJldGENCisgKiBAcGFyYW1baW5dICBzaW5WYWwgICBzaW5lIHZhbHVlIG9mIHJvdGF0aW9uIGFuZ2xlIHRoZXRhDQorICogQHBhcmFtW2luXSAgY29zVmFsICAgY29zaW5lIHZhbHVlIG9mIHJvdGF0aW9uIGFuZ2xlIHRoZXRhDQorICoNCisgKiA8Yj5TY2FsaW5nIGFuZCBPdmVyZmxvdyBCZWhhdmlvcjo8L2I+DQorICogXHBhcg0KKyAqIFRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB1c2luZyBhbiBpbnRlcm5hbCAzMi1iaXQgYWNjdW11bGF0b3IuDQorICogVGhlIGFjY3VtdWxhdG9yIG1haW50YWlucyAxLjMxIGZvcm1hdCBieSB0cnVuY2F0aW5nIGxvd2VyIDMxIGJpdHMgb2YgdGhlIGludGVybWVkaWF0ZSBtdWx0aXBsaWNhdGlvbiBpbiAyLjYyIGZvcm1hdC4NCisgKiBUaGVyZSBpcyBzYXR1cmF0aW9uIG9uIHRoZSBhZGRpdGlvbiwgaGVuY2UgdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1faW52X3BhcmtfcTMxKA0KKyAgICBxMzFfdCBJZCwNCisgICAgcTMxX3QgSXEsDQorICAgIHEzMV90ICpwSWFscGhhLA0KKyAgICBxMzFfdCAqcEliZXRhLA0KKyAgICBxMzFfdCBzaW5WYWwsDQorICAgIHEzMV90IGNvc1ZhbCkNCit7DQorICAgIHEzMV90IHByb2R1Y3QxLCBwcm9kdWN0MjsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLw0KKyAgICBxMzFfdCBwcm9kdWN0MywgcHJvZHVjdDQ7ICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgdmFyaWFibGVzIHVzZWQgdG8gc3RvcmUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgKi8NCisNCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoSWQgKiBjb3NWYWwpICovDQorICAgIHByb2R1Y3QxID0gKHEzMV90KSgoKHE2M190KShJZCkgKiAoY29zVmFsKSkgPj4gMzEpOw0KKw0KKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJcSAqIHNpblZhbCkgKi8NCisgICAgcHJvZHVjdDIgPSAocTMxX3QpKCgocTYzX3QpKElxKSAqIChzaW5WYWwpKSA+PiAzMSk7DQorDQorDQorICAgIC8qIEludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgYnkgKElkICogc2luVmFsKSAqLw0KKyAgICBwcm9kdWN0MyA9IChxMzFfdCkoKChxNjNfdCkoSWQpICogKHNpblZhbCkpID4+IDMxKTsNCisNCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoSXEgKiBjb3NWYWwpICovDQorICAgIHByb2R1Y3Q0ID0gKHEzMV90KSgoKHE2M190KShJcSkgKiAoY29zVmFsKSkgPj4gMzEpOw0KKw0KKyAgICAvKiBDYWxjdWxhdGUgcElhbHBoYSBieSB1c2luZyB0aGUgdHdvIGludGVybWVkaWF0ZSBwcm9kdWN0cyAxIGFuZCAyICovDQorICAgICpwSWFscGhhID0gX19RU1VCKHByb2R1Y3QxLCBwcm9kdWN0Mik7DQorDQorICAgIC8qIENhbGN1bGF0ZSBwSWJldGEgYnkgdXNpbmcgdGhlIHR3byBpbnRlcm1lZGlhdGUgcHJvZHVjdHMgMyBhbmQgNCAqLw0KKyAgICAqcEliZXRhID0gX19RQUREKHByb2R1Y3Q0LCBwcm9kdWN0Myk7DQorfQ0KKw0KKy8qKg0KKyAqIEB9IGVuZCBvZiBJbnZlcnNlIHBhcmsgZ3JvdXANCisgKi8NCisNCisNCisvKioNCisgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTMxIHZlY3RvciB0byBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9xMzFfdG9fZmxvYXQoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorLyoqDQorICogQGluZ3JvdXAgZ3JvdXBJbnRlcnBvbGF0aW9uDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIExpbmVhckludGVycG9sYXRlIExpbmVhciBJbnRlcnBvbGF0aW9uDQorICoNCisgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBpcyBhIG1ldGhvZCBvZiBjdXJ2ZSBmaXR0aW5nIHVzaW5nIGxpbmVhciBwb2x5bm9taWFscy4NCisgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiB3b3JrcyBieSBlZmZlY3RpdmVseSBkcmF3aW5nIGEgc3RyYWlnaHQgbGluZSBiZXR3ZWVuIHR3byBuZWlnaGJvcmluZyBzYW1wbGVzIGFuZCByZXR1cm5pbmcgdGhlIGFwcHJvcHJpYXRlIHBvaW50IGFsb25nIHRoYXQgbGluZQ0KKyAqDQorICogXHBhcg0KKyAqIFxpbWFnZSBodG1sIExpbmVhckludGVycC5naWYgIkxpbmVhciBpbnRlcnBvbGF0aW9uIg0KKyAqDQorICogXHBhcg0KKyAqIEEgIExpbmVhciBJbnRlcnBvbGF0ZSBmdW5jdGlvbiBjYWxjdWxhdGVzIGFuIG91dHB1dCB2YWx1ZSh5KSwgZm9yIHRoZSBpbnB1dCh4KQ0KKyAqIHVzaW5nIGxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIHRoZSBpbnB1dCB2YWx1ZXMgeDAsIHgxKCBuZWFyZXN0IGlucHV0IHZhbHVlcykgYW5kIHRoZSBvdXRwdXQgdmFsdWVzIHkwIGFuZCB5MShuZWFyZXN0IG91dHB1dCB2YWx1ZXMpDQorICoNCisgKiBccGFyIEFsZ29yaXRobToNCisgKiA8cHJlPg0KKyAqICAgICAgIHkgPSB5MCArICh4IC0geDApICogKCh5MSAtIHkwKS8oeDEteDApKQ0KKyAqICAgICAgIHdoZXJlIHgwLCB4MSBhcmUgbmVhcmVzdCB2YWx1ZXMgb2YgaW5wdXQgeA0KKyAqICAgICAgICAgICAgIHkwLCB5MSBhcmUgbmVhcmVzdCB2YWx1ZXMgdG8gb3V0cHV0IHkNCisgKiA8L3ByZT4NCisgKg0KKyAqIFxwYXINCisgKiBUaGlzIHNldCBvZiBmdW5jdGlvbnMgaW1wbGVtZW50cyBMaW5lYXIgaW50ZXJwb2xhdGlvbiBwcm9jZXNzDQorICogZm9yIFE3LCBRMTUsIFEzMSwgYW5kIGZsb2F0aW5nLXBvaW50IGRhdGEgdHlwZXMuICBUaGUgZnVuY3Rpb25zIG9wZXJhdGUgb24gYSBzaW5nbGUNCisgKiBzYW1wbGUgb2YgZGF0YSBhbmQgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgc2luZ2xlIHByb2Nlc3NlZCB2YWx1ZS4NCisgKiA8Y29kZT5TPC9jb2RlPiBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIExpbmVhciBJbnRlcnBvbGF0ZSBmdW5jdGlvbiBkYXRhIHN0cnVjdHVyZS4NCisgKiA8Y29kZT54PC9jb2RlPiBpcyB0aGUgaW5wdXQgc2FtcGxlIHZhbHVlLiBUaGUgZnVuY3Rpb25zIHJldHVybnMgdGhlIG91dHB1dCB2YWx1ZS4NCisgKg0KKyAqIFxwYXINCisgKiBpZiB4IGlzIG91dHNpZGUgb2YgdGhlIHRhYmxlIGJvdW5kYXJ5LCBMaW5lYXIgaW50ZXJwb2xhdGlvbiByZXR1cm5zIGZpcnN0IHZhbHVlIG9mIHRoZSB0YWJsZQ0KKyAqIGlmIHggaXMgYmVsb3cgaW5wdXQgcmFuZ2UgYW5kIHJldHVybnMgbGFzdCB2YWx1ZSBvZiB0YWJsZSBpZiB4IGlzIGFib3ZlIHJhbmdlLg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBhZGR0b2dyb3VwIExpbmVhckludGVycG9sYXRlDQorICogQHsNCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgIFByb2Nlc3MgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBMaW5lYXIgSW50ZXJwb2xhdGlvbiBGdW5jdGlvbi4NCisgKiBAcGFyYW1baW4sb3V0XSBTICBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgTGluZWFyIEludGVycG9sYXRpb24gc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgICAgeCAgaW5wdXQgc2FtcGxlIHRvIHByb2Nlc3MNCisgKiBAcmV0dXJuIHkgcHJvY2Vzc2VkIG91dHB1dCBzYW1wbGUuDQorICoNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgZmxvYXQzMl90IGFybV9saW5lYXJfaW50ZXJwX2YzMigNCisgICAgYXJtX2xpbmVhcl9pbnRlcnBfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBmbG9hdDMyX3QgeCkNCit7DQorICAgIGZsb2F0MzJfdCB5Ow0KKyAgICBmbG9hdDMyX3QgeDAsIHgxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IGlucHV0IHZhbHVlcyAqLw0KKyAgICBmbG9hdDMyX3QgeTAsIHkxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8NCisgICAgZmxvYXQzMl90IHhTcGFjaW5nID0gUy0+eFNwYWNpbmc7ICAgICAgICAgICAgLyogc3BhY2luZyBiZXR3ZWVuIGlucHV0IHZhbHVlcyAqLw0KKyAgICBpbnQzMl90IGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmRleCB2YXJpYWJsZSAqLw0KKyAgICBmbG9hdDMyX3QgKnBZRGF0YSA9IFMtPnBZRGF0YTsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG91dHB1dCB0YWJsZSAqLw0KKw0KKyAgICAvKiBDYWxjdWxhdGlvbiBvZiBpbmRleCAqLw0KKyAgICBpID0gKGludDMyX3QpKCh4IC0gUy0+eDEpIC8geFNwYWNpbmcpOw0KKw0KKyAgICBpZiAoaSA8IDApDQorICAgIHsNCisgICAgICAgIC8qIEluaWF0aWxpemUgb3V0cHV0IGZvciBiZWxvdyBzcGVjaWZpZWQgcmFuZ2UgYXMgbGVhc3Qgb3V0cHV0IHZhbHVlIG9mIHRhYmxlICovDQorICAgICAgICB5ID0gcFlEYXRhWzBdOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKCh1aW50MzJfdClpID49IFMtPm5WYWx1ZXMpDQorICAgIHsNCisgICAgICAgIC8qIEluaWF0aWxpemUgb3V0cHV0IGZvciBhYm92ZSBzcGVjaWZpZWQgcmFuZ2UgYXMgbGFzdCBvdXRwdXQgdmFsdWUgb2YgdGFibGUgKi8NCisgICAgICAgIHkgPSBwWURhdGFbUy0+blZhbHVlcyAtIDFdOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgLyogQ2FsY3VsYXRpb24gb2YgbmVhcmVzdCBpbnB1dCB2YWx1ZXMgKi8NCisgICAgICAgIHgwID0gUy0+eDEgKyAgaSAgICAgICogeFNwYWNpbmc7DQorICAgICAgICB4MSA9IFMtPngxICsgKGkgKyAxKSAqIHhTcGFjaW5nOw0KKw0KKyAgICAgICAgLyogUmVhZCBvZiBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8NCisgICAgICAgIHkwID0gcFlEYXRhW2ldOw0KKyAgICAgICAgeTEgPSBwWURhdGFbaSArIDFdOw0KKw0KKyAgICAgICAgLyogQ2FsY3VsYXRpb24gb2Ygb3V0cHV0ICovDQorICAgICAgICB5ID0geTAgKyAoeCAtIHgwKSAqICgoeTEgLSB5MCkgLyAoeDEgLSB4MCkpOw0KKw0KKyAgICB9DQorDQorICAgIC8qIHJldHVybnMgb3V0cHV0IHZhbHVlICovDQorICAgIHJldHVybiAoeSk7DQorfQ0KKw0KKw0KKy8qKg0KKyoNCisqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBMaW5lYXIgSW50ZXJwb2xhdGlvbiBGdW5jdGlvbi4NCisqIEBwYXJhbVtpbl0gcFlEYXRhICAgcG9pbnRlciB0byBRMzEgTGluZWFyIEludGVycG9sYXRpb24gdGFibGUNCisqIEBwYXJhbVtpbl0geCAgICAgICAgaW5wdXQgc2FtcGxlIHRvIHByb2Nlc3MNCisqIEBwYXJhbVtpbl0gblZhbHVlcyAgbnVtYmVyIG9mIHRhYmxlIHZhbHVlcw0KKyogQHJldHVybiB5IHByb2Nlc3NlZCBvdXRwdXQgc2FtcGxlLg0KKyoNCisqIFxwYXINCisqIElucHV0IHNhbXBsZSA8Y29kZT54PC9jb2RlPiBpcyBpbiAxMi4yMCBmb3JtYXQgd2hpY2ggY29udGFpbnMgMTIgYml0cyBmb3IgdGFibGUgaW5kZXggYW5kIDIwIGJpdHMgZm9yIGZyYWN0aW9uYWwgcGFydC4NCisqIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgbWF4aW11bSBvZiB0YWJsZSBzaXplIDJeMTIuDQorKg0KKyovDQorc3RhdGljIF9fSU5MSU5FIHEzMV90IGFybV9saW5lYXJfaW50ZXJwX3EzMSgNCisgICAgcTMxX3QgKnBZRGF0YSwNCisgICAgcTMxX3QgeCwNCisgICAgdWludDMyX3QgblZhbHVlcykNCit7DQorICAgIHEzMV90IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG91dHB1dCAqLw0KKyAgICBxMzFfdCB5MCwgeTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8NCisgICAgcTMxX3QgZnJhY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJhY3Rpb25hbCBwYXJ0ICovDQorICAgIGludDMyX3QgaW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IHRvIHJlYWQgbmVhcmVzdCBvdXRwdXQgdmFsdWVzICovDQorDQorICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8NCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8NCisgICAgaW5kZXggPSAoKHggJiAocTMxX3QpMHhGRkYwMDAwMCkgPj4gMjApOw0KKw0KKyAgICBpZiAoaW5kZXggPj0gKGludDMyX3QpKG5WYWx1ZXMgLSAxKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIChwWURhdGFbblZhbHVlcyAtIDFdKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChpbmRleCA8IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiAocFlEYXRhWzBdKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8NCisgICAgICAgIC8qIHNoaWZ0IGxlZnQgYnkgMTEgdG8ga2VlcCBmcmFjdCBpbiAxLjMxIGZvcm1hdCAqLw0KKyAgICAgICAgZnJhY3QgPSAoeCAmIDB4MDAwRkZGRkYpIDw8IDExOw0KKw0KKyAgICAgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4IGluIDEuMzEocTMxKSBmb3JtYXQgKi8NCisgICAgICAgIHkwID0gcFlEYXRhW2luZGV4XTsNCisgICAgICAgIHkxID0gcFlEYXRhW2luZGV4ICsgMV07DQorDQorICAgICAgICAvKiBDYWxjdWxhdGlvbiBvZiB5MCAqICgxLWZyYWN0KSBhbmQgeSBpcyBpbiAyLjMwIGZvcm1hdCAqLw0KKyAgICAgICAgeSA9ICgocTMxX3QpKChxNjNfdCkgeTAgKiAoMHg3RkZGRkZGRiAtIGZyYWN0KSA+PiAzMikpOw0KKw0KKyAgICAgICAgLyogQ2FsY3VsYXRpb24gb2YgeTAgKiAoMS1mcmFjdCkgKyB5MSAqZnJhY3QgYW5kIHkgaXMgaW4gMi4zMCBmb3JtYXQgKi8NCisgICAgICAgIHkgKz0gKChxMzFfdCkoKChxNjNfdCkgeTEgKiBmcmFjdCkgPj4gMzIpKTsNCisNCisgICAgICAgIC8qIENvbnZlcnQgeSB0byAxLjMxIGZvcm1hdCAqLw0KKyAgICAgICAgcmV0dXJuICh5IDw8IDF1KTsNCisgICAgfQ0KK30NCisNCisNCisvKioNCisgKg0KKyAqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIFExNSBMaW5lYXIgSW50ZXJwb2xhdGlvbiBGdW5jdGlvbi4NCisgKiBAcGFyYW1baW5dIHBZRGF0YSAgIHBvaW50ZXIgdG8gUTE1IExpbmVhciBJbnRlcnBvbGF0aW9uIHRhYmxlDQorICogQHBhcmFtW2luXSB4ICAgICAgICBpbnB1dCBzYW1wbGUgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtpbl0gblZhbHVlcyAgbnVtYmVyIG9mIHRhYmxlIHZhbHVlcw0KKyAqIEByZXR1cm4geSBwcm9jZXNzZWQgb3V0cHV0IHNhbXBsZS4NCisgKg0KKyAqIFxwYXINCisgKiBJbnB1dCBzYW1wbGUgPGNvZGU+eDwvY29kZT4gaXMgaW4gMTIuMjAgZm9ybWF0IHdoaWNoIGNvbnRhaW5zIDEyIGJpdHMgZm9yIHRhYmxlIGluZGV4IGFuZCAyMCBiaXRzIGZvciBmcmFjdGlvbmFsIHBhcnQuDQorICogVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCBtYXhpbXVtIG9mIHRhYmxlIHNpemUgMl4xMi4NCisgKg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSBxMTVfdCBhcm1fbGluZWFyX2ludGVycF9xMTUoDQorICAgIHExNV90ICpwWURhdGEsDQorICAgIHEzMV90IHgsDQorICAgIHVpbnQzMl90IG5WYWx1ZXMpDQorew0KKyAgICBxNjNfdCB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgKi8NCisgICAgcTE1X3QgeTAsIHkxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVhcmVzdCBvdXRwdXQgdmFsdWVzICovDQorICAgIHEzMV90IGZyYWN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyYWN0aW9uYWwgcGFydCAqLw0KKyAgICBpbnQzMl90IGluZGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmRleCB0byByZWFkIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLw0KKw0KKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8NCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovDQorICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovDQorICAgIGluZGV4ID0gKCh4ICYgKGludDMyX3QpMHhGRkYwMDAwMCkgPj4gMjApOw0KKw0KKyAgICBpZiAoaW5kZXggPj0gKGludDMyX3QpKG5WYWx1ZXMgLSAxKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIChwWURhdGFbblZhbHVlcyAtIDFdKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChpbmRleCA8IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiAocFlEYXRhWzBdKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8NCisgICAgICAgIC8qIGZyYWN0IGlzIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICAgICAgZnJhY3QgPSAoeCAmIDB4MDAwRkZGRkYpOw0KKw0KKyAgICAgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4ICovDQorICAgICAgICB5MCA9IHBZRGF0YVtpbmRleF07DQorICAgICAgICB5MSA9IHBZRGF0YVtpbmRleCArIDFdOw0KKw0KKyAgICAgICAgLyogQ2FsY3VsYXRpb24gb2YgeTAgKiAoMS1mcmFjdCkgYW5kIHkgaXMgaW4gMTMuMzUgZm9ybWF0ICovDQorICAgICAgICB5ID0gKChxNjNfdCkgeTAgKiAoMHhGRkZGRiAtIGZyYWN0KSk7DQorDQorICAgICAgICAvKiBDYWxjdWxhdGlvbiBvZiAoeTAgKiAoMS1mcmFjdCkgKyB5MSAqIGZyYWN0KSBhbmQgeSBpcyBpbiAxMy4zNSBmb3JtYXQgKi8NCisgICAgICAgIHkgKz0gKChxNjNfdCkgeTEgKiAoZnJhY3QpKTsNCisNCisgICAgICAgIC8qIGNvbnZlcnQgeSB0byAxLjE1IGZvcm1hdCAqLw0KKyAgICAgICAgcmV0dXJuIChxMTVfdCkoeSA+PiAyMCk7DQorICAgIH0NCit9DQorDQorDQorLyoqDQorICoNCisgKiBAYnJpZWYgIFByb2Nlc3MgZnVuY3Rpb24gZm9yIHRoZSBRNyBMaW5lYXIgSW50ZXJwb2xhdGlvbiBGdW5jdGlvbi4NCisgKiBAcGFyYW1baW5dIHBZRGF0YSAgIHBvaW50ZXIgdG8gUTcgTGluZWFyIEludGVycG9sYXRpb24gdGFibGUNCisgKiBAcGFyYW1baW5dIHggICAgICAgIGlucHV0IHNhbXBsZSB0byBwcm9jZXNzDQorICogQHBhcmFtW2luXSBuVmFsdWVzICBudW1iZXIgb2YgdGFibGUgdmFsdWVzDQorICogQHJldHVybiB5IHByb2Nlc3NlZCBvdXRwdXQgc2FtcGxlLg0KKyAqDQorICogXHBhcg0KKyAqIElucHV0IHNhbXBsZSA8Y29kZT54PC9jb2RlPiBpcyBpbiAxMi4yMCBmb3JtYXQgd2hpY2ggY29udGFpbnMgMTIgYml0cyBmb3IgdGFibGUgaW5kZXggYW5kIDIwIGJpdHMgZm9yIGZyYWN0aW9uYWwgcGFydC4NCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBzdXBwb3J0IG1heGltdW0gb2YgdGFibGUgc2l6ZSAyXjEyLg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSBxN190IGFybV9saW5lYXJfaW50ZXJwX3E3KA0KKyAgICBxN190ICpwWURhdGEsDQorICAgIHEzMV90IHgsDQorICAgIHVpbnQzMl90IG5WYWx1ZXMpDQorew0KKyAgICBxMzFfdCB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgKi8NCisgICAgcTdfdCB5MCwgeTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVhcmVzdCBvdXRwdXQgdmFsdWVzICovDQorICAgIHEzMV90IGZyYWN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyYWN0aW9uYWwgcGFydCAqLw0KKyAgICB1aW50MzJfdCBpbmRleDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmRleCB0byByZWFkIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLw0KKw0KKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8NCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovDQorICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovDQorICAgIGlmICh4IDwgMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIChwWURhdGFbMF0pOw0KKyAgICB9DQorDQorICAgIGluZGV4ID0gKHggPj4gMjApICYgMHhmZmY7DQorDQorICAgIGlmIChpbmRleCA+PSAoblZhbHVlcyAtIDEpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKHBZRGF0YVtuVmFsdWVzIC0gMV0pOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLw0KKyAgICAgICAgLyogZnJhY3QgaXMgaW4gMTIuMjAgZm9ybWF0ICovDQorICAgICAgICBmcmFjdCA9ICh4ICYgMHgwMDBGRkZGRik7DQorDQorICAgICAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggYW5kIGFyZSBpbiAxLjcocTcpIGZvcm1hdCAqLw0KKyAgICAgICAgeTAgPSBwWURhdGFbaW5kZXhdOw0KKyAgICAgICAgeTEgPSBwWURhdGFbaW5kZXggKyAxXTsNCisNCisgICAgICAgIC8qIENhbGN1bGF0aW9uIG9mIHkwICogKDEtZnJhY3QgKSBhbmQgeSBpcyBpbiAxMy4yNyhxMjcpIGZvcm1hdCAqLw0KKyAgICAgICAgeSA9ICgoeTAgKiAoMHhGRkZGRiAtIGZyYWN0KSkpOw0KKw0KKyAgICAgICAgLyogQ2FsY3VsYXRpb24gb2YgeTEgKiBmcmFjdCArIHkwICogKDEtZnJhY3QpIGFuZCB5IGlzIGluIDEzLjI3KHEyNykgZm9ybWF0ICovDQorICAgICAgICB5ICs9ICh5MSAqIGZyYWN0KTsNCisNCisgICAgICAgIC8qIGNvbnZlcnQgeSB0byAxLjcocTcpIGZvcm1hdCAqLw0KKyAgICAgICAgcmV0dXJuIChxN190KSh5ID4+IDIwKTsNCisgICAgfQ0KK30NCisNCisvKioNCisgKiBAfSBlbmQgb2YgTGluZWFySW50ZXJwb2xhdGUgZ3JvdXANCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgIEZhc3QgYXBwcm94aW1hdGlvbiB0byB0aGUgdHJpZ29ub21ldHJpYyBzaW5lIGZ1bmN0aW9uIGZvciBmbG9hdGluZy1wb2ludCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0geCAgaW5wdXQgdmFsdWUgaW4gcmFkaWFucy4NCisgKiBAcmV0dXJuICBzaW4oeCkuDQorICovDQorZmxvYXQzMl90IGFybV9zaW5fZjMyKA0KKyAgICBmbG9hdDMyX3QgeCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBGYXN0IGFwcHJveGltYXRpb24gdG8gdGhlIHRyaWdvbm9tZXRyaWMgc2luZSBmdW5jdGlvbiBmb3IgUTMxIGRhdGEuDQorICogQHBhcmFtW2luXSB4ICBTY2FsZWQgaW5wdXQgdmFsdWUgaW4gcmFkaWFucy4NCisgKiBAcmV0dXJuICBzaW4oeCkuDQorICovDQorcTMxX3QgYXJtX3Npbl9xMzEoDQorICAgIHEzMV90IHgpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmFzdCBhcHByb3hpbWF0aW9uIHRvIHRoZSB0cmlnb25vbWV0cmljIHNpbmUgZnVuY3Rpb24gZm9yIFExNSBkYXRhLg0KKyAqIEBwYXJhbVtpbl0geCAgU2NhbGVkIGlucHV0IHZhbHVlIGluIHJhZGlhbnMuDQorICogQHJldHVybiAgc2luKHgpLg0KKyAqLw0KK3ExNV90IGFybV9zaW5fcTE1KA0KKyAgICBxMTVfdCB4KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEZhc3QgYXBwcm94aW1hdGlvbiB0byB0aGUgdHJpZ29ub21ldHJpYyBjb3NpbmUgZnVuY3Rpb24gZm9yIGZsb2F0aW5nLXBvaW50IGRhdGEuDQorICogQHBhcmFtW2luXSB4ICBpbnB1dCB2YWx1ZSBpbiByYWRpYW5zLg0KKyAqIEByZXR1cm4gIGNvcyh4KS4NCisgKi8NCitmbG9hdDMyX3QgYXJtX2Nvc19mMzIoDQorICAgIGZsb2F0MzJfdCB4KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRmFzdCBhcHByb3hpbWF0aW9uIHRvIHRoZSB0cmlnb25vbWV0cmljIGNvc2luZSBmdW5jdGlvbiBmb3IgUTMxIGRhdGEuDQorICogQHBhcmFtW2luXSB4ICBTY2FsZWQgaW5wdXQgdmFsdWUgaW4gcmFkaWFucy4NCisgKiBAcmV0dXJuICBjb3MoeCkuDQorICovDQorcTMxX3QgYXJtX2Nvc19xMzEoDQorICAgIHEzMV90IHgpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmFzdCBhcHByb3hpbWF0aW9uIHRvIHRoZSB0cmlnb25vbWV0cmljIGNvc2luZSBmdW5jdGlvbiBmb3IgUTE1IGRhdGEuDQorICogQHBhcmFtW2luXSB4ICBTY2FsZWQgaW5wdXQgdmFsdWUgaW4gcmFkaWFucy4NCisgKiBAcmV0dXJuICBjb3MoeCkuDQorICovDQorcTE1X3QgYXJtX2Nvc19xMTUoDQorICAgIHExNV90IHgpOw0KKw0KKw0KKy8qKg0KKyAqIEBpbmdyb3VwIGdyb3VwRmFzdE1hdGgNCisgKi8NCisNCisNCisvKioNCisgKiBAZGVmZ3JvdXAgU1FSVCBTcXVhcmUgUm9vdA0KKyAqDQorICogQ29tcHV0ZXMgdGhlIHNxdWFyZSByb290IG9mIGEgbnVtYmVyLg0KKyAqIFRoZXJlIGFyZSBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIFExNSwgUTMxLCBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4NCisgKiBUaGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24gaXMgY29tcHV0ZWQgdXNpbmcgdGhlIE5ld3Rvbi1SYXBoc29uIGFsZ29yaXRobS4NCisgKiBUaGlzIGlzIGFuIGl0ZXJhdGl2ZSBhbGdvcml0aG0gb2YgdGhlIGZvcm06DQorICogPHByZT4NCisgKiAgICAgIHgxID0geDAgLSBmKHgwKS9mJyh4MCkNCisgKiA8L3ByZT4NCisgKiB3aGVyZSA8Y29kZT54MTwvY29kZT4gaXMgdGhlIGN1cnJlbnQgZXN0aW1hdGUsDQorICogPGNvZGU+eDA8L2NvZGU+IGlzIHRoZSBwcmV2aW91cyBlc3RpbWF0ZSwgYW5kDQorICogPGNvZGU+ZicoeDApPC9jb2RlPiBpcyB0aGUgZGVyaXZhdGl2ZSBvZiA8Y29kZT5mKCk8L2NvZGU+IGV2YWx1YXRlZCBhdCA8Y29kZT54MDwvY29kZT4uDQorICogRm9yIHRoZSBzcXVhcmUgcm9vdCBmdW5jdGlvbiwgdGhlIGFsZ29yaXRobSByZWR1Y2VzIHRvOg0KKyAqIDxwcmU+DQorICogICAgIHgwID0gaW4vMiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5pdGlhbCBndWVzc10NCisgKiAgICAgeDEgPSAxLzIgKiAoIHgwICsgaW4gLyB4MCkgICAgICAgIFtlYWNoIGl0ZXJhdGlvbl0NCisgKiA8L3ByZT4NCisgKi8NCisNCisNCisvKioNCisgKiBAYWRkdG9ncm91cCBTUVJUDQorICogQHsNCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IHNxdWFyZSByb290IGZ1bmN0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIGluICAgIGlucHV0IHZhbHVlLg0KKyAqIEBwYXJhbVtvdXRdIHBPdXQgIHNxdWFyZSByb290IG9mIGlucHV0IHZhbHVlLg0KKyAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbnB1dCB2YWx1ZSBpcyBwb3NpdGl2ZSB2YWx1ZSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZg0KKyAqIDxjb2RlPmluPC9jb2RlPiBpcyBuZWdhdGl2ZSB2YWx1ZSBhbmQgcmV0dXJucyB6ZXJvIG91dHB1dCBmb3IgbmVnYXRpdmUgdmFsdWVzLg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSBhcm1fc3RhdHVzIGFybV9zcXJ0X2YzMigNCisgICAgZmxvYXQzMl90IGluLA0KKyAgICBmbG9hdDMyX3QgKnBPdXQpDQorew0KKyAgICBpZiAoaW4gPj0gMC4wZikNCisgICAgew0KKw0KKyNpZiAgIChfX0ZQVV9VU0VEID09IDEpICYmIGRlZmluZWQgKCBfX0NDX0FSTSAgICkNCisgICAgICAgICpwT3V0ID0gX19zcXJ0Zihpbik7DQorI2VsaWYgKF9fRlBVX1VTRUQgPT0gMSkgJiYgKGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApKQ0KKyAgICAgICAgKnBPdXQgPSBfX2J1aWx0aW5fc3FydGYoaW4pOw0KKyNlbGlmIChfX0ZQVV9VU0VEID09IDEpICYmIGRlZmluZWQoX19HTlVDX18pDQorICAgICAgICAqcE91dCA9IF9fYnVpbHRpbl9zcXJ0Zihpbik7DQorI2VsaWYgKF9fRlBVX1VTRUQgPT0gMSkgJiYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKSAmJiAoX19WRVJfXyA+PSA2MDQwMDAwKQ0KKyAgICAgICAgX19BU00oIlZTUVJULkYzMiAlMCwlMSIgOiAiPXQiKCpwT3V0KSA6ICJ0IihpbikpOw0KKyNlbHNlDQorICAgICAgICAqcE91dCA9IHNxcnRmKGluKTsNCisjZW5kaWYNCisNCisgICAgICAgIHJldHVybiAoQVJNX01BVEhfU1VDQ0VTUyk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICAqcE91dCA9IDAuMGY7DQorICAgICAgICByZXR1cm4gKEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SKTsNCisgICAgfQ0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgUTMxIHNxdWFyZSByb290IGZ1bmN0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIGluICAgIGlucHV0IHZhbHVlLiAgVGhlIHJhbmdlIG9mIHRoZSBpbnB1dCB2YWx1ZSBpcyBbMCArMSkgb3IgMHgwMDAwMDAwMCB0byAweDdGRkZGRkZGLg0KKyAqIEBwYXJhbVtvdXRdIHBPdXQgIHNxdWFyZSByb290IG9mIGlucHV0IHZhbHVlLg0KKyAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbnB1dCB2YWx1ZSBpcyBwb3NpdGl2ZSB2YWx1ZSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZg0KKyAqIDxjb2RlPmluPC9jb2RlPiBpcyBuZWdhdGl2ZSB2YWx1ZSBhbmQgcmV0dXJucyB6ZXJvIG91dHB1dCBmb3IgbmVnYXRpdmUgdmFsdWVzLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX3NxcnRfcTMxKA0KKyAgICBxMzFfdCBpbiwNCisgICAgcTMxX3QgKnBPdXQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTE1IHNxdWFyZSByb290IGZ1bmN0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIGluICAgIGlucHV0IHZhbHVlLiAgVGhlIHJhbmdlIG9mIHRoZSBpbnB1dCB2YWx1ZSBpcyBbMCArMSkgb3IgMHgwMDAwIHRvIDB4N0ZGRi4NCisgKiBAcGFyYW1bb3V0XSBwT3V0ICBzcXVhcmUgcm9vdCBvZiBpbnB1dCB2YWx1ZS4NCisgKiBAcmV0dXJuIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5wdXQgdmFsdWUgaXMgcG9zaXRpdmUgdmFsdWUgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYNCisgKiA8Y29kZT5pbjwvY29kZT4gaXMgbmVnYXRpdmUgdmFsdWUgYW5kIHJldHVybnMgemVybyBvdXRwdXQgZm9yIG5lZ2F0aXZlIHZhbHVlcy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9zcXJ0X3ExNSgNCisgICAgcTE1X3QgaW4sDQorICAgIHExNV90ICpwT3V0KTsNCisNCisvKioNCisgKiBAfSBlbmQgb2YgU1FSVCBncm91cA0KKyAqLw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBmbG9hdGluZy1wb2ludCBDaXJjdWxhciB3cml0ZSBmdW5jdGlvbi4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2lyY3VsYXJXcml0ZV9mMzIoDQorICAgIGludDMyX3QgKmNpcmNCdWZmZXIsDQorICAgIGludDMyX3QgTCwNCisgICAgdWludDE2X3QgKndyaXRlT2Zmc2V0LA0KKyAgICBpbnQzMl90IGJ1ZmZlckluYywNCisgICAgY29uc3QgaW50MzJfdCAqc3JjLA0KKyAgICBpbnQzMl90IHNyY0luYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplKQ0KK3sNCisgICAgdWludDMyX3QgaSA9IDB1Ow0KKyAgICBpbnQzMl90IHdPZmZzZXQ7DQorDQorICAgIC8qIENvcHkgdGhlIHZhbHVlIG9mIEluZGV4IHBvaW50ZXIgdGhhdCBwb2ludHMNCisgICAgICogdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gd2hlcmUgdGhlIGlucHV0IHNhbXBsZXMgdG8gYmUgY29waWVkICovDQorICAgIHdPZmZzZXQgPSAqd3JpdGVPZmZzZXQ7DQorDQorICAgIC8qIExvb3Agb3ZlciB0aGUgYmxvY2tTaXplICovDQorICAgIGkgPSBibG9ja1NpemU7DQorDQorICAgIHdoaWxlIChpID4gMHUpDQorICAgIHsNCisgICAgICAgIC8qIGNvcHkgdGhlIGlucHV0IHNhbXBsZSB0byB0aGUgY2lyY3VsYXIgYnVmZmVyICovDQorICAgICAgICBjaXJjQnVmZmVyW3dPZmZzZXRdID0gKnNyYzsNCisNCisgICAgICAgIC8qIFVwZGF0ZSB0aGUgaW5wdXQgcG9pbnRlciAqLw0KKyAgICAgICAgc3JjICs9IHNyY0luYzsNCisNCisgICAgICAgIC8qIENpcmN1bGFybHkgdXBkYXRlIHdPZmZzZXQuICBXYXRjaCBvdXQgZm9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZSAqLw0KKyAgICAgICAgd09mZnNldCArPSBidWZmZXJJbmM7DQorDQorICAgICAgICBpZiAod09mZnNldCA+PSBMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHdPZmZzZXQgLT0gTDsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8qIERlY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovDQorICAgICAgICBpLS07DQorICAgIH0NCisNCisgICAgLyogVXBkYXRlIHRoZSBpbmRleCBwb2ludGVyICovDQorICAgICp3cml0ZU9mZnNldCA9ICh1aW50MTZfdCl3T2Zmc2V0Ow0KK30NCisNCisNCisNCisvKioNCisgKiBAYnJpZWYgZmxvYXRpbmctcG9pbnQgQ2lyY3VsYXIgUmVhZCBmdW5jdGlvbi4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2lyY3VsYXJSZWFkX2YzMigNCisgICAgaW50MzJfdCAqY2lyY0J1ZmZlciwNCisgICAgaW50MzJfdCBMLA0KKyAgICBpbnQzMl90ICpyZWFkT2Zmc2V0LA0KKyAgICBpbnQzMl90IGJ1ZmZlckluYywNCisgICAgaW50MzJfdCAqZHN0LA0KKyAgICBpbnQzMl90ICpkc3RfYmFzZSwNCisgICAgaW50MzJfdCBkc3RfbGVuZ3RoLA0KKyAgICBpbnQzMl90IGRzdEluYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplKQ0KK3sNCisgICAgdWludDMyX3QgaSA9IDB1Ow0KKyAgICBpbnQzMl90IHJPZmZzZXQsIGRzdF9lbmQ7DQorDQorICAgIC8qIENvcHkgdGhlIHZhbHVlIG9mIEluZGV4IHBvaW50ZXIgdGhhdCBwb2ludHMNCisgICAgICogdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gZnJvbSB3aGVyZSB0aGUgaW5wdXQgc2FtcGxlcyB0byBiZSByZWFkICovDQorICAgIHJPZmZzZXQgPSAqcmVhZE9mZnNldDsNCisgICAgZHN0X2VuZCA9IChpbnQzMl90KShkc3RfYmFzZSArIGRzdF9sZW5ndGgpOw0KKw0KKyAgICAvKiBMb29wIG92ZXIgdGhlIGJsb2NrU2l6ZSAqLw0KKyAgICBpID0gYmxvY2tTaXplOw0KKw0KKyAgICB3aGlsZSAoaSA+IDB1KQ0KKyAgICB7DQorICAgICAgICAvKiBjb3B5IHRoZSBzYW1wbGUgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgKi8NCisgICAgICAgICpkc3QgPSBjaXJjQnVmZmVyW3JPZmZzZXRdOw0KKw0KKyAgICAgICAgLyogVXBkYXRlIHRoZSBpbnB1dCBwb2ludGVyICovDQorICAgICAgICBkc3QgKz0gZHN0SW5jOw0KKw0KKyAgICAgICAgaWYgKGRzdCA9PSAoaW50MzJfdCAqKSBkc3RfZW5kKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRzdCA9IGRzdF9iYXNlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogQ2lyY3VsYXJseSB1cGRhdGUgck9mZnNldC4gIFdhdGNoIG91dCBmb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlICAqLw0KKyAgICAgICAgck9mZnNldCArPSBidWZmZXJJbmM7DQorDQorICAgICAgICBpZiAock9mZnNldCA+PSBMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJPZmZzZXQgLT0gTDsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8qIERlY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovDQorICAgICAgICBpLS07DQorICAgIH0NCisNCisgICAgLyogVXBkYXRlIHRoZSBpbmRleCBwb2ludGVyICovDQorICAgICpyZWFkT2Zmc2V0ID0gck9mZnNldDsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIFExNSBDaXJjdWxhciB3cml0ZSBmdW5jdGlvbi4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2lyY3VsYXJXcml0ZV9xMTUoDQorICAgIHExNV90ICpjaXJjQnVmZmVyLA0KKyAgICBpbnQzMl90IEwsDQorICAgIHVpbnQxNl90ICp3cml0ZU9mZnNldCwNCisgICAgaW50MzJfdCBidWZmZXJJbmMsDQorICAgIGNvbnN0IHExNV90ICpzcmMsDQorICAgIGludDMyX3Qgc3JjSW5jLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpDQorew0KKyAgICB1aW50MzJfdCBpID0gMHU7DQorICAgIGludDMyX3Qgd09mZnNldDsNCisNCisgICAgLyogQ29weSB0aGUgdmFsdWUgb2YgSW5kZXggcG9pbnRlciB0aGF0IHBvaW50cw0KKyAgICAgKiB0byB0aGUgY3VycmVudCBsb2NhdGlvbiB3aGVyZSB0aGUgaW5wdXQgc2FtcGxlcyB0byBiZSBjb3BpZWQgKi8NCisgICAgd09mZnNldCA9ICp3cml0ZU9mZnNldDsNCisNCisgICAgLyogTG9vcCBvdmVyIHRoZSBibG9ja1NpemUgKi8NCisgICAgaSA9IGJsb2NrU2l6ZTsNCisNCisgICAgd2hpbGUgKGkgPiAwdSkNCisgICAgew0KKyAgICAgICAgLyogY29weSB0aGUgaW5wdXQgc2FtcGxlIHRvIHRoZSBjaXJjdWxhciBidWZmZXIgKi8NCisgICAgICAgIGNpcmNCdWZmZXJbd09mZnNldF0gPSAqc3JjOw0KKw0KKyAgICAgICAgLyogVXBkYXRlIHRoZSBpbnB1dCBwb2ludGVyICovDQorICAgICAgICBzcmMgKz0gc3JjSW5jOw0KKw0KKyAgICAgICAgLyogQ2lyY3VsYXJseSB1cGRhdGUgd09mZnNldC4gIFdhdGNoIG91dCBmb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlICovDQorICAgICAgICB3T2Zmc2V0ICs9IGJ1ZmZlckluYzsNCisNCisgICAgICAgIGlmICh3T2Zmc2V0ID49IEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgd09mZnNldCAtPSBMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogRGVjcmVtZW50IHRoZSBsb29wIGNvdW50ZXIgKi8NCisgICAgICAgIGktLTsNCisgICAgfQ0KKw0KKyAgICAvKiBVcGRhdGUgdGhlIGluZGV4IHBvaW50ZXIgKi8NCisgICAgKndyaXRlT2Zmc2V0ID0gKHVpbnQxNl90KXdPZmZzZXQ7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMTUgQ2lyY3VsYXIgUmVhZCBmdW5jdGlvbi4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2lyY3VsYXJSZWFkX3ExNSgNCisgICAgcTE1X3QgKmNpcmNCdWZmZXIsDQorICAgIGludDMyX3QgTCwNCisgICAgaW50MzJfdCAqcmVhZE9mZnNldCwNCisgICAgaW50MzJfdCBidWZmZXJJbmMsDQorICAgIHExNV90ICpkc3QsDQorICAgIHExNV90ICpkc3RfYmFzZSwNCisgICAgaW50MzJfdCBkc3RfbGVuZ3RoLA0KKyAgICBpbnQzMl90IGRzdEluYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplKQ0KK3sNCisgICAgdWludDMyX3QgaSA9IDA7DQorICAgIGludDMyX3Qgck9mZnNldCwgZHN0X2VuZDsNCisNCisgICAgLyogQ29weSB0aGUgdmFsdWUgb2YgSW5kZXggcG9pbnRlciB0aGF0IHBvaW50cw0KKyAgICAgKiB0byB0aGUgY3VycmVudCBsb2NhdGlvbiBmcm9tIHdoZXJlIHRoZSBpbnB1dCBzYW1wbGVzIHRvIGJlIHJlYWQgKi8NCisgICAgck9mZnNldCA9ICpyZWFkT2Zmc2V0Ow0KKw0KKyAgICBkc3RfZW5kID0gKGludDMyX3QpKGRzdF9iYXNlICsgZHN0X2xlbmd0aCk7DQorDQorICAgIC8qIExvb3Agb3ZlciB0aGUgYmxvY2tTaXplICovDQorICAgIGkgPSBibG9ja1NpemU7DQorDQorICAgIHdoaWxlIChpID4gMHUpDQorICAgIHsNCisgICAgICAgIC8qIGNvcHkgdGhlIHNhbXBsZSBmcm9tIHRoZSBjaXJjdWxhciBidWZmZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAqLw0KKyAgICAgICAgKmRzdCA9IGNpcmNCdWZmZXJbck9mZnNldF07DQorDQorICAgICAgICAvKiBVcGRhdGUgdGhlIGlucHV0IHBvaW50ZXIgKi8NCisgICAgICAgIGRzdCArPSBkc3RJbmM7DQorDQorICAgICAgICBpZiAoZHN0ID09IChxMTVfdCAqKSBkc3RfZW5kKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRzdCA9IGRzdF9iYXNlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogQ2lyY3VsYXJseSB1cGRhdGUgd09mZnNldC4gIFdhdGNoIG91dCBmb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlICovDQorICAgICAgICByT2Zmc2V0ICs9IGJ1ZmZlckluYzsNCisNCisgICAgICAgIGlmIChyT2Zmc2V0ID49IEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgck9mZnNldCAtPSBMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogRGVjcmVtZW50IHRoZSBsb29wIGNvdW50ZXIgKi8NCisgICAgICAgIGktLTsNCisgICAgfQ0KKw0KKyAgICAvKiBVcGRhdGUgdGhlIGluZGV4IHBvaW50ZXIgKi8NCisgICAgKnJlYWRPZmZzZXQgPSByT2Zmc2V0Ow0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgUTcgQ2lyY3VsYXIgd3JpdGUgZnVuY3Rpb24uDQorICovDQorc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2NpcmN1bGFyV3JpdGVfcTcoDQorICAgIHE3X3QgKmNpcmNCdWZmZXIsDQorICAgIGludDMyX3QgTCwNCisgICAgdWludDE2X3QgKndyaXRlT2Zmc2V0LA0KKyAgICBpbnQzMl90IGJ1ZmZlckluYywNCisgICAgY29uc3QgcTdfdCAqc3JjLA0KKyAgICBpbnQzMl90IHNyY0luYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplKQ0KK3sNCisgICAgdWludDMyX3QgaSA9IDB1Ow0KKyAgICBpbnQzMl90IHdPZmZzZXQ7DQorDQorICAgIC8qIENvcHkgdGhlIHZhbHVlIG9mIEluZGV4IHBvaW50ZXIgdGhhdCBwb2ludHMNCisgICAgICogdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gd2hlcmUgdGhlIGlucHV0IHNhbXBsZXMgdG8gYmUgY29waWVkICovDQorICAgIHdPZmZzZXQgPSAqd3JpdGVPZmZzZXQ7DQorDQorICAgIC8qIExvb3Agb3ZlciB0aGUgYmxvY2tTaXplICovDQorICAgIGkgPSBibG9ja1NpemU7DQorDQorICAgIHdoaWxlIChpID4gMHUpDQorICAgIHsNCisgICAgICAgIC8qIGNvcHkgdGhlIGlucHV0IHNhbXBsZSB0byB0aGUgY2lyY3VsYXIgYnVmZmVyICovDQorICAgICAgICBjaXJjQnVmZmVyW3dPZmZzZXRdID0gKnNyYzsNCisNCisgICAgICAgIC8qIFVwZGF0ZSB0aGUgaW5wdXQgcG9pbnRlciAqLw0KKyAgICAgICAgc3JjICs9IHNyY0luYzsNCisNCisgICAgICAgIC8qIENpcmN1bGFybHkgdXBkYXRlIHdPZmZzZXQuICBXYXRjaCBvdXQgZm9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZSAqLw0KKyAgICAgICAgd09mZnNldCArPSBidWZmZXJJbmM7DQorDQorICAgICAgICBpZiAod09mZnNldCA+PSBMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHdPZmZzZXQgLT0gTDsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8qIERlY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovDQorICAgICAgICBpLS07DQorICAgIH0NCisNCisgICAgLyogVXBkYXRlIHRoZSBpbmRleCBwb2ludGVyICovDQorICAgICp3cml0ZU9mZnNldCA9ICh1aW50MTZfdCl3T2Zmc2V0Ow0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgUTcgQ2lyY3VsYXIgUmVhZCBmdW5jdGlvbi4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2lyY3VsYXJSZWFkX3E3KA0KKyAgICBxN190ICpjaXJjQnVmZmVyLA0KKyAgICBpbnQzMl90IEwsDQorICAgIGludDMyX3QgKnJlYWRPZmZzZXQsDQorICAgIGludDMyX3QgYnVmZmVySW5jLA0KKyAgICBxN190ICpkc3QsDQorICAgIHE3X3QgKmRzdF9iYXNlLA0KKyAgICBpbnQzMl90IGRzdF9sZW5ndGgsDQorICAgIGludDMyX3QgZHN0SW5jLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpDQorew0KKyAgICB1aW50MzJfdCBpID0gMDsNCisgICAgaW50MzJfdCByT2Zmc2V0LCBkc3RfZW5kOw0KKw0KKyAgICAvKiBDb3B5IHRoZSB2YWx1ZSBvZiBJbmRleCBwb2ludGVyIHRoYXQgcG9pbnRzDQorICAgICAqIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uIGZyb20gd2hlcmUgdGhlIGlucHV0IHNhbXBsZXMgdG8gYmUgcmVhZCAqLw0KKyAgICByT2Zmc2V0ID0gKnJlYWRPZmZzZXQ7DQorDQorICAgIGRzdF9lbmQgPSAoaW50MzJfdCkoZHN0X2Jhc2UgKyBkc3RfbGVuZ3RoKTsNCisNCisgICAgLyogTG9vcCBvdmVyIHRoZSBibG9ja1NpemUgKi8NCisgICAgaSA9IGJsb2NrU2l6ZTsNCisNCisgICAgd2hpbGUgKGkgPiAwdSkNCisgICAgew0KKyAgICAgICAgLyogY29weSB0aGUgc2FtcGxlIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciB0byB0aGUgZGVzdGluYXRpb24gYnVmZmVyICovDQorICAgICAgICAqZHN0ID0gY2lyY0J1ZmZlcltyT2Zmc2V0XTsNCisNCisgICAgICAgIC8qIFVwZGF0ZSB0aGUgaW5wdXQgcG9pbnRlciAqLw0KKyAgICAgICAgZHN0ICs9IGRzdEluYzsNCisNCisgICAgICAgIGlmIChkc3QgPT0gKHE3X3QgKikgZHN0X2VuZCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBkc3QgPSBkc3RfYmFzZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8qIENpcmN1bGFybHkgdXBkYXRlIHJPZmZzZXQuICBXYXRjaCBvdXQgZm9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZSAqLw0KKyAgICAgICAgck9mZnNldCArPSBidWZmZXJJbmM7DQorDQorICAgICAgICBpZiAock9mZnNldCA+PSBMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJPZmZzZXQgLT0gTDsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8qIERlY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovDQorICAgICAgICBpLS07DQorICAgIH0NCisNCisgICAgLyogVXBkYXRlIHRoZSBpbmRleCBwb2ludGVyICovDQorICAgICpyZWFkT2Zmc2V0ID0gck9mZnNldDsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmICBTdW0gb2YgdGhlIHNxdWFyZXMgb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fcG93ZXJfcTMxKA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxNjNfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBTdW0gb2YgdGhlIHNxdWFyZXMgb2YgdGhlIGVsZW1lbnRzIG9mIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4NCisgKi8NCit2b2lkIGFybV9wb3dlcl9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBmbG9hdDMyX3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgU3VtIG9mIHRoZSBzcXVhcmVzIG9mIHRoZSBlbGVtZW50cyBvZiBhIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX3Bvd2VyX3ExNSgNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTYzX3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgU3VtIG9mIHRoZSBzcXVhcmVzIG9mIHRoZSBlbGVtZW50cyBvZiBhIFE3IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fcG93ZXJfcTcoDQorICAgIHE3X3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTMxX3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgTWVhbiB2YWx1ZSBvZiBhIFE3IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fbWVhbl9xNygNCisgICAgcTdfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxN190ICpwUmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIE1lYW4gdmFsdWUgb2YgYSBRMTUgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4NCisgKi8NCit2b2lkIGFybV9tZWFuX3ExNSgNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTE1X3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgTWVhbiB2YWx1ZSBvZiBhIFEzMSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX21lYW5fcTMxKA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxMzFfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBNZWFuIHZhbHVlIG9mIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4NCisgKi8NCit2b2lkIGFybV9tZWFuX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIGZsb2F0MzJfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBWYXJpYW5jZSBvZiB0aGUgZWxlbWVudHMgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX3Zhcl9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBmbG9hdDMyX3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgVmFyaWFuY2Ugb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fdmFyX3EzMSgNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTMxX3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgVmFyaWFuY2Ugb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTE1IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fdmFyX3ExNSgNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTE1X3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUm9vdCBNZWFuIFNxdWFyZSBvZiB0aGUgZWxlbWVudHMgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX3Jtc19mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBmbG9hdDMyX3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUm9vdCBNZWFuIFNxdWFyZSBvZiB0aGUgZWxlbWVudHMgb2YgYSBRMzEgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4NCisgKi8NCit2b2lkIGFybV9ybXNfcTMxKA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxMzFfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBSb290IE1lYW4gU3F1YXJlIG9mIHRoZSBlbGVtZW50cyBvZiBhIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX3Jtc19xMTUoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHExNV90ICpwUmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgZWxlbWVudHMgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX3N0ZF9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBmbG9hdDMyX3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgU3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBlbGVtZW50cyBvZiBhIFEzMSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX3N0ZF9xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHEzMV90ICpwUmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgZWxlbWVudHMgb2YgYSBRMTUgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4NCisgKi8NCit2b2lkIGFybV9zdGRfcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxMTVfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBjb21wbGV4IG1hZ25pdHVkZQ0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIHJlYWwgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gdGhlIGlucHV0IHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X21hZ19mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBudW1TYW1wbGVzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFEzMSBjb21wbGV4IG1hZ25pdHVkZQ0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIHJlYWwgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gdGhlIGlucHV0IHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X21hZ19xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBRMTUgY29tcGxleCBtYWduaXR1ZGUNCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSByZWFsIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIHRoZSBpbnB1dCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9jbXBseF9tYWdfcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IG51bVNhbXBsZXMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTE1IGNvbXBsZXggZG90IHByb2R1Y3QNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSByZWFsUmVzdWx0ICByZWFsIHBhcnQgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBoZXJlDQorICogQHBhcmFtW291dF0gaW1hZ1Jlc3VsdCAgaW1hZ2luYXJ5IHBhcnQgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBoZXJlDQorICovDQordm9pZCBhcm1fY21wbHhfZG90X3Byb2RfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcywNCisgICAgcTMxX3QgKnJlYWxSZXN1bHQsDQorICAgIHEzMV90ICppbWFnUmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFEzMSBjb21wbGV4IGRvdCBwcm9kdWN0DQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICogQHBhcmFtW291dF0gcmVhbFJlc3VsdCAgcmVhbCBwYXJ0IG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgaGVyZQ0KKyAqIEBwYXJhbVtvdXRdIGltYWdSZXN1bHQgIGltYWdpbmFyeSBwYXJ0IG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgaGVyZQ0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X2RvdF9wcm9kX3EzMSgNCisgICAgcTMxX3QgKnBTcmNBLA0KKyAgICBxMzFfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IG51bVNhbXBsZXMsDQorICAgIHE2M190ICpyZWFsUmVzdWx0LA0KKyAgICBxNjNfdCAqaW1hZ1Jlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBjb21wbGV4IGRvdCBwcm9kdWN0DQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICogQHBhcmFtW291dF0gcmVhbFJlc3VsdCAgcmVhbCBwYXJ0IG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgaGVyZQ0KKyAqIEBwYXJhbVtvdXRdIGltYWdSZXN1bHQgIGltYWdpbmFyeSBwYXJ0IG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgaGVyZQ0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X2RvdF9wcm9kX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjQSwNCisgICAgZmxvYXQzMl90ICpwU3JjQiwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcywNCisgICAgZmxvYXQzMl90ICpyZWFsUmVzdWx0LA0KKyAgICBmbG9hdDMyX3QgKmltYWdSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTE1IGNvbXBsZXgtYnktcmVhbCBtdWx0aXBsaWNhdGlvbg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNDbXBseCAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjUmVhbCAgICBwb2ludHMgdG8gdGhlIHJlYWwgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcENtcGx4RHN0ICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X211bHRfcmVhbF9xMTUoDQorICAgIHExNV90ICpwU3JjQ21wbHgsDQorICAgIHExNV90ICpwU3JjUmVhbCwNCisgICAgcTE1X3QgKnBDbXBseERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBRMzEgY29tcGxleC1ieS1yZWFsIG11bHRpcGxpY2F0aW9uDQorICogQHBhcmFtW2luXSAgcFNyY0NtcGx4ICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNSZWFsICAgIHBvaW50cyB0byB0aGUgcmVhbCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwQ21wbHhEc3QgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfbXVsdF9yZWFsX3EzMSgNCisgICAgcTMxX3QgKnBTcmNDbXBseCwNCisgICAgcTMxX3QgKnBTcmNSZWFsLA0KKyAgICBxMzFfdCAqcENtcGx4RHN0LA0KKyAgICB1aW50MzJfdCBudW1TYW1wbGVzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IGNvbXBsZXgtYnktcmVhbCBtdWx0aXBsaWNhdGlvbg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNDbXBseCAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjUmVhbCAgICBwb2ludHMgdG8gdGhlIHJlYWwgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcENtcGx4RHN0ICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X211bHRfcmVhbF9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyY0NtcGx4LA0KKyAgICBmbG9hdDMyX3QgKnBTcmNSZWFsLA0KKyAgICBmbG9hdDMyX3QgKnBDbXBseERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBNaW5pbXVtIHZhbHVlIG9mIGEgUTcgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSByZXN1bHQgICAgIGlzIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgaW5kZXggICAgICBpcyB0aGUgYXJyYXkgaW5kZXggb2YgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIGlucHV0IGJ1ZmZlci4NCisgKi8NCit2b2lkIGFybV9taW5fcTcoDQorICAgIHE3X3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTdfdCAqcmVzdWx0LA0KKyAgICB1aW50MzJfdCAqaW5kZXgpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgTWluaW11bSB2YWx1ZSBvZiBhIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBwSW5kZXggICAgIGlzIHRoZSBhcnJheSBpbmRleCBvZiB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgaW5wdXQgYnVmZmVyLg0KKyAqLw0KK3ZvaWQgYXJtX21pbl9xMTUoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHExNV90ICpwUmVzdWx0LA0KKyAgICB1aW50MzJfdCAqcEluZGV4KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIE1pbmltdW0gdmFsdWUgb2YgYSBRMzEgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcEluZGV4ICAgICBpcyB0aGUgYXJyYXkgaW5kZXggb2YgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIGlucHV0IGJ1ZmZlci4NCisgKi8NCit2b2lkIGFybV9taW5fcTMxKA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxMzFfdCAqcFJlc3VsdCwNCisgICAgdWludDMyX3QgKnBJbmRleCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBNaW5pbXVtIHZhbHVlIG9mIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcEluZGV4ICAgICBpcyB0aGUgYXJyYXkgaW5kZXggb2YgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIGlucHV0IGJ1ZmZlci4NCisgKi8NCit2b2lkIGFybV9taW5fZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgZmxvYXQzMl90ICpwUmVzdWx0LA0KKyAgICB1aW50MzJfdCAqcEluZGV4KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgTWF4aW11bSB2YWx1ZSBvZiBhIFE3IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgYnVmZmVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBsZW5ndGggb2YgdGhlIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgbWF4aW11bSB2YWx1ZSByZXR1cm5lZCBoZXJlDQorICogQHBhcmFtW291dF0gcEluZGV4ICAgICBpbmRleCBvZiBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUNCisgKi8NCit2b2lkIGFybV9tYXhfcTcoDQorICAgIHE3X3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTdfdCAqcFJlc3VsdCwNCisgICAgdWludDMyX3QgKnBJbmRleCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIE1heGltdW0gdmFsdWUgb2YgYSBRMTUgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBidWZmZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGxlbmd0aCBvZiB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUNCisgKiBAcGFyYW1bb3V0XSBwSW5kZXggICAgIGluZGV4IG9mIG1heGltdW0gdmFsdWUgcmV0dXJuZWQgaGVyZQ0KKyAqLw0KK3ZvaWQgYXJtX21heF9xMTUoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHExNV90ICpwUmVzdWx0LA0KKyAgICB1aW50MzJfdCAqcEluZGV4KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgTWF4aW11bSB2YWx1ZSBvZiBhIFEzMSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbGVuZ3RoIG9mIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIG1heGltdW0gdmFsdWUgcmV0dXJuZWQgaGVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBJbmRleCAgICAgaW5kZXggb2YgbWF4aW11bSB2YWx1ZSByZXR1cm5lZCBoZXJlDQorICovDQordm9pZCBhcm1fbWF4X3EzMSgNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTMxX3QgKnBSZXN1bHQsDQorICAgIHVpbnQzMl90ICpwSW5kZXgpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBNYXhpbXVtIHZhbHVlIG9mIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBidWZmZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGxlbmd0aCBvZiB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUNCisgKiBAcGFyYW1bb3V0XSBwSW5kZXggICAgIGluZGV4IG9mIG1heGltdW0gdmFsdWUgcmV0dXJuZWQgaGVyZQ0KKyAqLw0KK3ZvaWQgYXJtX21heF9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBmbG9hdDMyX3QgKnBSZXN1bHQsDQorICAgIHVpbnQzMl90ICpwSW5kZXgpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTE1IGNvbXBsZXgtYnktY29tcGxleCBtdWx0aXBsaWNhdGlvbg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X211bHRfY21wbHhfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IG51bVNhbXBsZXMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTMxIGNvbXBsZXgtYnktY29tcGxleCBtdWx0aXBsaWNhdGlvbg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X211bHRfY21wbHhfcTMxKA0KKyAgICBxMzFfdCAqcFNyY0EsDQorICAgIHEzMV90ICpwU3JjQiwNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IG51bVNhbXBsZXMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgY29tcGxleC1ieS1jb21wbGV4IG11bHRpcGxpY2F0aW9uDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfbXVsdF9jbXBseF9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyY0EsDQorICAgIGZsb2F0MzJfdCAqcFNyY0IsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgZmxvYXRpbmctcG9pbnQgdmVjdG9yIHRvIFEzMSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGZsb2F0aW5nLXBvaW50IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBRMzEgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbGVuZ3RoIG9mIHRoZSBpbnB1dCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9mbG9hdF90b19xMzEoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgZmxvYXRpbmctcG9pbnQgdmVjdG9yIHRvIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGZsb2F0aW5nLXBvaW50IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBRMTUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbGVuZ3RoIG9mIHRoZSBpbnB1dCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9mbG9hdF90b19xMTUoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgZmxvYXRpbmctcG9pbnQgdmVjdG9yIHRvIFE3IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgZmxvYXRpbmctcG9pbnQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIFE3IG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGxlbmd0aCBvZiB0aGUgaW5wdXQgdmVjdG9yDQorICovDQordm9pZCBhcm1fZmxvYXRfdG9fcTcoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgcTdfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTMxIHZlY3RvciB0byBRMTUgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgaXMgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICovDQordm9pZCBhcm1fcTMxX3RvX3ExNSgNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBRMzEgdmVjdG9yIHRvIFE3IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIGlzIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqLw0KK3ZvaWQgYXJtX3EzMV90b19xNygNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFExNSB2ZWN0b3IgdG8gZmxvYXRpbmctcG9pbnQgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgaXMgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICovDQordm9pZCBhcm1fcTE1X3RvX2Zsb2F0KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBRMTUgdmVjdG9yIHRvIFEzMSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9xMTVfdG9fcTMxKA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFExNSB2ZWN0b3IgdG8gUTcgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgaXMgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICovDQordm9pZCBhcm1fcTE1X3RvX3E3KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTdfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAaW5ncm91cCBncm91cEludGVycG9sYXRpb24NCisgKi8NCisNCisvKioNCisgKiBAZGVmZ3JvdXAgQmlsaW5lYXJJbnRlcnBvbGF0ZSBCaWxpbmVhciBJbnRlcnBvbGF0aW9uDQorICoNCisgKiBCaWxpbmVhciBpbnRlcnBvbGF0aW9uIGlzIGFuIGV4dGVuc2lvbiBvZiBsaW5lYXIgaW50ZXJwb2xhdGlvbiBhcHBsaWVkIHRvIGEgdHdvIGRpbWVuc2lvbmFsIGdyaWQuDQorICogVGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gPGNvZGU+Zih4LCB5KTwvY29kZT4gaXMgc2FtcGxlZCBvbiBhIHJlZ3VsYXIgZ3JpZCBhbmQgdGhlIGludGVycG9sYXRpb24gcHJvY2Vzcw0KKyAqIGRldGVybWluZXMgdmFsdWVzIGJldHdlZW4gdGhlIGdyaWQgcG9pbnRzLg0KKyAqIEJpbGluZWFyIGludGVycG9sYXRpb24gaXMgZXF1aXZhbGVudCB0byB0d28gc3RlcCBsaW5lYXIgaW50ZXJwb2xhdGlvbiwgZmlyc3QgaW4gdGhlIHgtZGltZW5zaW9uIGFuZCB0aGVuIGluIHRoZSB5LWRpbWVuc2lvbi4NCisgKiBCaWxpbmVhciBpbnRlcnBvbGF0aW9uIGlzIG9mdGVuIHVzZWQgaW4gaW1hZ2UgcHJvY2Vzc2luZyB0byByZXNjYWxlIGltYWdlcy4NCisgKiBUaGUgQ01TSVMgRFNQIGxpYnJhcnkgcHJvdmlkZXMgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbnMgZm9yIFE3LCBRMTUsIFEzMSwgYW5kIGZsb2F0aW5nLXBvaW50IGRhdGEgdHlwZXMuDQorICoNCisgKiA8Yj5BbGdvcml0aG08L2I+DQorICogXHBhcg0KKyAqIFRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbnMgZGVzY3JpYmVzIGEgdHdvIGRpbWVuc2lvbmFsIGRhdGEgdGFibGUuDQorICogRm9yIGZsb2F0aW5nLXBvaW50LCB0aGUgaW5zdGFuY2Ugc3RydWN0dXJlIGlzIGRlZmluZWQgYXM6DQorICogPHByZT4NCisgKiAgIHR5cGVkZWYgc3RydWN0DQorICogICB7DQorICogICAgIHVpbnQxNl90IG51bVJvd3M7DQorICogICAgIHVpbnQxNl90IG51bUNvbHM7DQorICogICAgIGZsb2F0MzJfdCAqcERhdGE7DQorICogfSBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX2YzMjsNCisgKiA8L3ByZT4NCisgKg0KKyAqIFxwYXINCisgKiB3aGVyZSA8Y29kZT5udW1Sb3dzPC9jb2RlPiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZTsNCisgKiA8Y29kZT5udW1Db2xzPC9jb2RlPiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSB0YWJsZTsNCisgKiBhbmQgPGNvZGU+cERhdGE8L2NvZGU+IHBvaW50cyB0byBhbiBhcnJheSBvZiBzaXplIDxjb2RlPm51bVJvd3MqbnVtQ29sczwvY29kZT4gdmFsdWVzLg0KKyAqIFRoZSBkYXRhIHRhYmxlIDxjb2RlPnBUYWJsZTwvY29kZT4gaXMgb3JnYW5pemVkIGluIHJvdyBvcmRlciBhbmQgdGhlIHN1cHBsaWVkIGRhdGEgdmFsdWVzIGZhbGwgb24gaW50ZWdlciBpbmRleGVzLg0KKyAqIFRoYXQgaXMsIHRhYmxlIGVsZW1lbnQgKHgseSkgaXMgbG9jYXRlZCBhdCA8Y29kZT5wVGFibGVbeCArIHkqbnVtQ29sc108L2NvZGU+IHdoZXJlIHggYW5kIHkgYXJlIGludGVnZXJzLg0KKyAqDQorICogXHBhcg0KKyAqIExldCA8Y29kZT4oeCwgeSk8L2NvZGU+IHNwZWNpZnkgdGhlIGRlc2lyZWQgaW50ZXJwb2xhdGlvbiBwb2ludC4gIFRoZW4gZGVmaW5lOg0KKyAqIDxwcmU+DQorICogICAgIFhGID0gZmxvb3IoeCkNCisgKiAgICAgWUYgPSBmbG9vcih5KQ0KKyAqIDwvcHJlPg0KKyAqIFxwYXINCisgKiBUaGUgaW50ZXJwb2xhdGVkIG91dHB1dCBwb2ludCBpcyBjb21wdXRlZCBhczoNCisgKiA8cHJlPg0KKyAqICBmKHgsIHkpID0gZihYRiwgWUYpICogKDEtKHgtWEYpKSAqICgxLSh5LVlGKSkNCisgKiAgICAgICAgICAgKyBmKFhGICsgMSwgWUYpICogKHgtWEYpKigxLSh5LVlGKSkNCisgKiAgICAgICAgICAgKyBmKFhGLCBZRiArIDEpICogKDEtKHgtWEYpKSooeS1ZRikNCisgKiAgICAgICAgICAgKyBmKFhGICsgMSwgWUYgKyAxKSAqICh4LVhGKSooeS1ZRikNCisgKiA8L3ByZT4NCisgKiBOb3RlIHRoYXQgdGhlIGNvb3JkaW5hdGVzICh4LCB5KSBjb250YWluIGludGVnZXIgYW5kIGZyYWN0aW9uYWwgY29tcG9uZW50cy4NCisgKiBUaGUgaW50ZWdlciBjb21wb25lbnRzIHNwZWNpZnkgd2hpY2ggcG9ydGlvbiBvZiB0aGUgdGFibGUgdG8gdXNlIHdoaWxlIHRoZQ0KKyAqIGZyYWN0aW9uYWwgY29tcG9uZW50cyBjb250cm9sIHRoZSBpbnRlcnBvbGF0aW9uIHByb2Nlc3Nvci4NCisgKg0KKyAqIFxwYXINCisgKiBpZiAoeCx5KSBhcmUgb3V0c2lkZSBvZiB0aGUgdGFibGUgYm91bmRhcnksIEJpbGluZWFyIGludGVycG9sYXRpb24gcmV0dXJucyB6ZXJvIG91dHB1dC4NCisgKi8NCisNCisvKioNCisgKiBAYWRkdG9ncm91cCBCaWxpbmVhckludGVycG9sYXRlDQorICogQHsNCisgKi8NCisNCisNCisvKioNCisqDQorKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IGJpbGluZWFyIGludGVycG9sYXRpb24uDQorKiBAcGFyYW1baW4sb3V0XSBTICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGludGVycG9sYXRpb24gc3RydWN0dXJlLg0KKyogQHBhcmFtW2luXSAgICAgWCAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlLg0KKyogQHBhcmFtW2luXSAgICAgWSAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlLg0KKyogQHJldHVybiBvdXQgaW50ZXJwb2xhdGVkIHZhbHVlLg0KKyovDQorc3RhdGljIF9fSU5MSU5FIGZsb2F0MzJfdCBhcm1fYmlsaW5lYXJfaW50ZXJwX2YzMigNCisgICAgY29uc3QgYXJtX2JpbGluZWFyX2ludGVycF9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCBYLA0KKyAgICBmbG9hdDMyX3QgWSkNCit7DQorICAgIGZsb2F0MzJfdCBvdXQ7DQorICAgIGZsb2F0MzJfdCBmMDAsIGYwMSwgZjEwLCBmMTE7DQorICAgIGZsb2F0MzJfdCAqcERhdGEgPSBTLT5wRGF0YTsNCisgICAgaW50MzJfdCB4SW5kZXgsIHlJbmRleCwgaW5kZXg7DQorICAgIGZsb2F0MzJfdCB4ZGlmZiwgeWRpZmY7DQorICAgIGZsb2F0MzJfdCBiMSwgYjIsIGIzLCBiNDsNCisNCisgICAgeEluZGV4ID0gKGludDMyX3QpIFg7DQorICAgIHlJbmRleCA9IChpbnQzMl90KSBZOw0KKw0KKyAgICAvKiBDYXJlIHRha2VuIGZvciB0YWJsZSBvdXRzaWRlIGJvdW5kYXJ5ICovDQorICAgIC8qIFJldHVybnMgemVybyBvdXRwdXQgd2hlbiB2YWx1ZXMgYXJlIG91dHNpZGUgdGFibGUgYm91bmRhcnkgKi8NCisgICAgaWYgKHhJbmRleCA8IDAgfHwgeEluZGV4ID4gKFMtPm51bVJvd3MgLSAxKSB8fCB5SW5kZXggPCAwIHx8IHlJbmRleCA+IChTLT5udW1Db2xzIC0gMSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiAoMCk7DQorICAgIH0NCisNCisgICAgLyogQ2FsY3VsYXRpb24gb2YgaW5kZXggZm9yIHR3byBuZWFyZXN0IHBvaW50cyBpbiBYLWRpcmVjdGlvbiAqLw0KKyAgICBpbmRleCA9ICh4SW5kZXggLSAxKSArICh5SW5kZXggLSAxKSAqIFMtPm51bUNvbHM7DQorDQorDQorICAgIC8qIFJlYWQgdHdvIG5lYXJlc3QgcG9pbnRzIGluIFgtZGlyZWN0aW9uICovDQorICAgIGYwMCA9IHBEYXRhW2luZGV4XTsNCisgICAgZjAxID0gcERhdGFbaW5kZXggKyAxXTsNCisNCisgICAgLyogQ2FsY3VsYXRpb24gb2YgaW5kZXggZm9yIHR3byBuZWFyZXN0IHBvaW50cyBpbiBZLWRpcmVjdGlvbiAqLw0KKyAgICBpbmRleCA9ICh4SW5kZXggLSAxKSArICh5SW5kZXgpICogUy0+bnVtQ29sczsNCisNCisNCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBwb2ludHMgaW4gWS1kaXJlY3Rpb24gKi8NCisgICAgZjEwID0gcERhdGFbaW5kZXhdOw0KKyAgICBmMTEgPSBwRGF0YVtpbmRleCArIDFdOw0KKw0KKyAgICAvKiBDYWxjdWxhdGlvbiBvZiBpbnRlcm1lZGlhdGUgdmFsdWVzICovDQorICAgIGIxID0gZjAwOw0KKyAgICBiMiA9IGYwMSAtIGYwMDsNCisgICAgYjMgPSBmMTAgLSBmMDA7DQorICAgIGI0ID0gZjAwIC0gZjAxIC0gZjEwICsgZjExOw0KKw0KKyAgICAvKiBDYWxjdWxhdGlvbiBvZiBmcmFjdGlvbmFsIHBhcnQgaW4gWCAqLw0KKyAgICB4ZGlmZiA9IFggLSB4SW5kZXg7DQorDQorICAgIC8qIENhbGN1bGF0aW9uIG9mIGZyYWN0aW9uYWwgcGFydCBpbiBZICovDQorICAgIHlkaWZmID0gWSAtIHlJbmRleDsNCisNCisgICAgLyogQ2FsY3VsYXRpb24gb2YgYmktbGluZWFyIGludGVycG9sYXRlZCBvdXRwdXQgKi8NCisgICAgb3V0ID0gYjEgKyBiMiAqIHhkaWZmICsgYjMgKiB5ZGlmZiArIGI0ICogeGRpZmYgKiB5ZGlmZjsNCisNCisgICAgLyogcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovDQorICAgIHJldHVybiAob3V0KTsNCit9DQorDQorDQorLyoqDQorKg0KKyogQGJyaWVmICBRMzEgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbi4NCisqIEBwYXJhbVtpbixvdXRdIFMgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBzdHJ1Y3R1cmUuDQorKiBAcGFyYW1baW5dICAgICBYICBpbnRlcnBvbGF0aW9uIGNvb3JkaW5hdGUgaW4gMTIuMjAgZm9ybWF0Lg0KKyogQHBhcmFtW2luXSAgICAgWSAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlIGluIDEyLjIwIGZvcm1hdC4NCisqIEByZXR1cm4gb3V0IGludGVycG9sYXRlZCB2YWx1ZS4NCisqLw0KK3N0YXRpYyBfX0lOTElORSBxMzFfdCBhcm1fYmlsaW5lYXJfaW50ZXJwX3EzMSgNCisgICAgYXJtX2JpbGluZWFyX2ludGVycF9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90IFgsDQorICAgIHEzMV90IFkpDQorew0KKyAgICBxMzFfdCBvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3Jhcnkgb3V0cHV0ICovDQorICAgIHEzMV90IGFjYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG91dHB1dCAqLw0KKyAgICBxMzFfdCB4ZnJhY3QsIHlmcmFjdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBYLCBZIGZyYWN0aW9uYWwgcGFydHMgKi8NCisgICAgcTMxX3QgeDEsIHgyLCB5MSwgeTI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVhcmVzdCBvdXRwdXQgdmFsdWVzICovDQorICAgIGludDMyX3QgckksIGNJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJvdyBhbmQgY29sdW1uIGluZGljZXMgKi8NCisgICAgcTMxX3QgKnBZRGF0YSA9IFMtPnBEYXRhOyAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBvdXRwdXQgdGFibGUgdmFsdWVzICovDQorICAgIHVpbnQzMl90IG5Db2xzID0gUy0+bnVtQ29sczsgICAgICAgICAgICAgICAgIC8qIG51bSBvZiByb3dzICovDQorDQorICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8NCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8NCisgICAgckkgPSAoKFggJiAocTMxX3QpMHhGRkYwMDAwMCkgPj4gMjApOw0KKw0KKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8NCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovDQorICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovDQorICAgIGNJID0gKChZICYgKHEzMV90KTB4RkZGMDAwMDApID4+IDIwKTsNCisNCisgICAgLyogQ2FyZSB0YWtlbiBmb3IgdGFibGUgb3V0c2lkZSBib3VuZGFyeSAqLw0KKyAgICAvKiBSZXR1cm5zIHplcm8gb3V0cHV0IHdoZW4gdmFsdWVzIGFyZSBvdXRzaWRlIHRhYmxlIGJvdW5kYXJ5ICovDQorICAgIGlmIChySSA8IDAgfHwgckkgPiAoUy0+bnVtUm93cyAtIDEpIHx8IGNJIDwgMCB8fCBjSSA+IChTLT5udW1Db2xzIC0gMSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiAoMCk7DQorICAgIH0NCisNCisgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLw0KKyAgICAvKiBzaGlmdCBsZWZ0IHhmcmFjdCBieSAxMSB0byBrZWVwIDEuMzEgZm9ybWF0ICovDQorICAgIHhmcmFjdCA9IChYICYgMHgwMDBGRkZGRikgPDwgMTF1Ow0KKw0KKyAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggKi8NCisgICAgeDEgPSBwWURhdGFbKHJJKSArIChpbnQzMl90KW5Db2xzICogKGNJKSAgICBdOw0KKyAgICB4MiA9IHBZRGF0YVsockkpICsgKGludDMyX3QpbkNvbHMgKiAoY0kpICsgMV07DQorDQorICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8NCisgICAgLyogc2hpZnQgbGVmdCB5ZnJhY3QgYnkgMTEgdG8ga2VlcCAxLjMxIGZvcm1hdCAqLw0KKyAgICB5ZnJhY3QgPSAoWSAmIDB4MDAwRkZGRkYpIDw8IDExdTsNCisNCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4ICovDQorICAgIHkxID0gcFlEYXRhWyhySSkgKyAoaW50MzJfdCluQ29scyAqIChjSSArIDEpICAgIF07DQorICAgIHkyID0gcFlEYXRhWyhySSkgKyAoaW50MzJfdCluQ29scyAqIChjSSArIDEpICsgMV07DQorDQorICAgIC8qIENhbGN1bGF0aW9uIG9mIHgxICogKDEteGZyYWN0ICkgKiAoMS15ZnJhY3QpIGFuZCBhY2MgaXMgaW4gMy4yOShxMjkpIGZvcm1hdCAqLw0KKyAgICBvdXQgPSAoKHEzMV90KSgoKHE2M190KSB4MSAgKiAoMHg3RkZGRkZGRiAtIHhmcmFjdCkpID4+IDMyKSk7DQorICAgIGFjYyA9ICgocTMxX3QpKCgocTYzX3QpIG91dCAqICgweDdGRkZGRkZGIC0geWZyYWN0KSkgPj4gMzIpKTsNCisNCisgICAgLyogeDIgKiAoeGZyYWN0KSAqICgxLXlmcmFjdCkgIGluIDMuMjkocTI5KSBhbmQgYWRkaW5nIHRvIGFjYyAqLw0KKyAgICBvdXQgPSAoKHEzMV90KSgocTYzX3QpIHgyICogKDB4N0ZGRkZGRkYgLSB5ZnJhY3QpID4+IDMyKSk7DQorICAgIGFjYyArPSAoKHEzMV90KSgocTYzX3QpIG91dCAqICh4ZnJhY3QpID4+IDMyKSk7DQorDQorICAgIC8qIHkxICogKDEgLSB4ZnJhY3QpICogKHlmcmFjdCkgIGluIDMuMjkocTI5KSBhbmQgYWRkaW5nIHRvIGFjYyAqLw0KKyAgICBvdXQgPSAoKHEzMV90KSgocTYzX3QpIHkxICogKDB4N0ZGRkZGRkYgLSB4ZnJhY3QpID4+IDMyKSk7DQorICAgIGFjYyArPSAoKHEzMV90KSgocTYzX3QpIG91dCAqICh5ZnJhY3QpID4+IDMyKSk7DQorDQorICAgIC8qIHkyICogKHhmcmFjdCkgKiAoeWZyYWN0KSAgaW4gMy4yOShxMjkpIGFuZCBhZGRpbmcgdG8gYWNjICovDQorICAgIG91dCA9ICgocTMxX3QpKChxNjNfdCkgeTIgKiAoeGZyYWN0KSA+PiAzMikpOw0KKyAgICBhY2MgKz0gKChxMzFfdCkoKHE2M190KSBvdXQgKiAoeWZyYWN0KSA+PiAzMikpOw0KKw0KKyAgICAvKiBDb252ZXJ0IGFjYyB0byAxLjMxKHEzMSkgZm9ybWF0ICovDQorICAgIHJldHVybiAoKHEzMV90KShhY2MgPDwgMikpOw0KK30NCisNCisNCisvKioNCisqIEBicmllZiAgUTE1IGJpbGluZWFyIGludGVycG9sYXRpb24uDQorKiBAcGFyYW1baW4sb3V0XSBTICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGludGVycG9sYXRpb24gc3RydWN0dXJlLg0KKyogQHBhcmFtW2luXSAgICAgWCAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlIGluIDEyLjIwIGZvcm1hdC4NCisqIEBwYXJhbVtpbl0gICAgIFkgIGludGVycG9sYXRpb24gY29vcmRpbmF0ZSBpbiAxMi4yMCBmb3JtYXQuDQorKiBAcmV0dXJuIG91dCBpbnRlcnBvbGF0ZWQgdmFsdWUuDQorKi8NCitzdGF0aWMgX19JTkxJTkUgcTE1X3QgYXJtX2JpbGluZWFyX2ludGVycF9xMTUoDQorICAgIGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMzFfdCBYLA0KKyAgICBxMzFfdCBZKQ0KK3sNCisgICAgcTYzX3QgYWNjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3V0cHV0ICovDQorICAgIHEzMV90IG91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBvdXRwdXQgKi8NCisgICAgcTE1X3QgeDEsIHgyLCB5MSwgeTI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVhcmVzdCBvdXRwdXQgdmFsdWVzICovDQorICAgIHEzMV90IHhmcmFjdCwgeWZyYWN0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFgsIFkgZnJhY3Rpb25hbCBwYXJ0cyAqLw0KKyAgICBpbnQzMl90IHJJLCBjSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSb3cgYW5kIGNvbHVtbiBpbmRpY2VzICovDQorICAgIHExNV90ICpwWURhdGEgPSBTLT5wRGF0YTsgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gb3V0cHV0IHRhYmxlIHZhbHVlcyAqLw0KKyAgICB1aW50MzJfdCBuQ29scyA9IFMtPm51bUNvbHM7ICAgICAgICAgICAgICAgICAvKiBudW0gb2Ygcm93cyAqLw0KKw0KKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8NCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovDQorICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovDQorICAgIHJJID0gKChYICYgKHEzMV90KTB4RkZGMDAwMDApID4+IDIwKTsNCisNCisgICAgLyogSW5wdXQgaXMgaW4gMTIuMjAgZm9ybWF0ICovDQorICAgIC8qIDEyIGJpdHMgZm9yIHRoZSB0YWJsZSBpbmRleCAqLw0KKyAgICAvKiBJbmRleCB2YWx1ZSBjYWxjdWxhdGlvbiAqLw0KKyAgICBjSSA9ICgoWSAmIChxMzFfdCkweEZGRjAwMDAwKSA+PiAyMCk7DQorDQorICAgIC8qIENhcmUgdGFrZW4gZm9yIHRhYmxlIG91dHNpZGUgYm91bmRhcnkgKi8NCisgICAgLyogUmV0dXJucyB6ZXJvIG91dHB1dCB3aGVuIHZhbHVlcyBhcmUgb3V0c2lkZSB0YWJsZSBib3VuZGFyeSAqLw0KKyAgICBpZiAockkgPCAwIHx8IHJJID4gKFMtPm51bVJvd3MgLSAxKSB8fCBjSSA8IDAgfHwgY0kgPiAoUy0+bnVtQ29scyAtIDEpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKDApOw0KKyAgICB9DQorDQorICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8NCisgICAgLyogeGZyYWN0IHNob3VsZCBiZSBpbiAxMi4yMCBmb3JtYXQgKi8NCisgICAgeGZyYWN0ID0gKFggJiAweDAwMEZGRkZGKTsNCisNCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4ICovDQorICAgIHgxID0gcFlEYXRhWygodWludDMyX3QpckkpICsgbkNvbHMgKiAoKHVpbnQzMl90KWNJKSAgICBdOw0KKyAgICB4MiA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSkgKyAxXTsNCisNCisgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLw0KKyAgICAvKiB5ZnJhY3Qgc2hvdWxkIGJlIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICB5ZnJhY3QgPSAoWSAmIDB4MDAwRkZGRkYpOw0KKw0KKyAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggKi8NCisgICAgeTEgPSBwWURhdGFbKCh1aW50MzJfdClySSkgKyBuQ29scyAqICgodWludDMyX3QpY0kgKyAxKSAgICBdOw0KKyAgICB5MiA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSArIDEpICsgMV07DQorDQorICAgIC8qIENhbGN1bGF0aW9uIG9mIHgxICogKDEteGZyYWN0ICkgKiAoMS15ZnJhY3QpIGFuZCBhY2MgaXMgaW4gMTMuNTEgZm9ybWF0ICovDQorDQorICAgIC8qIHgxIGlzIGluIDEuMTUocTE1KSwgeGZyYWN0IGluIDEyLjIwIGZvcm1hdCBhbmQgb3V0IGlzIGluIDEzLjM1IGZvcm1hdCAqLw0KKyAgICAvKiBjb252ZXJ0IDEzLjM1IHRvIDEzLjMxIGJ5IHJpZ2h0IHNoaWZ0aW5nICBhbmQgb3V0IGlzIGluIDEuMzEgKi8NCisgICAgb3V0ID0gKHEzMV90KSgoKHE2M190KSB4MSAqICgweEZGRkZGIC0geGZyYWN0KSkgPj4gNHUpOw0KKyAgICBhY2MgPSAoKHE2M190KSBvdXQgKiAoMHhGRkZGRiAtIHlmcmFjdCkpOw0KKw0KKyAgICAvKiB4MiAqICh4ZnJhY3QpICogKDEteWZyYWN0KSAgaW4gMS41MSBhbmQgYWRkaW5nIHRvIGFjYyAqLw0KKyAgICBvdXQgPSAocTMxX3QpKCgocTYzX3QpIHgyICogKDB4RkZGRkYgLSB5ZnJhY3QpKSA+PiA0dSk7DQorICAgIGFjYyArPSAoKHE2M190KSBvdXQgKiAoeGZyYWN0KSk7DQorDQorICAgIC8qIHkxICogKDEgLSB4ZnJhY3QpICogKHlmcmFjdCkgIGluIDEuNTEgYW5kIGFkZGluZyB0byBhY2MgKi8NCisgICAgb3V0ID0gKHEzMV90KSgoKHE2M190KSB5MSAqICgweEZGRkZGIC0geGZyYWN0KSkgPj4gNHUpOw0KKyAgICBhY2MgKz0gKChxNjNfdCkgb3V0ICogKHlmcmFjdCkpOw0KKw0KKyAgICAvKiB5MiAqICh4ZnJhY3QpICogKHlmcmFjdCkgIGluIDEuNTEgYW5kIGFkZGluZyB0byBhY2MgKi8NCisgICAgb3V0ID0gKHEzMV90KSgoKHE2M190KSB5MiAqICh4ZnJhY3QpKSA+PiA0dSk7DQorICAgIGFjYyArPSAoKHE2M190KSBvdXQgKiAoeWZyYWN0KSk7DQorDQorICAgIC8qIGFjYyBpcyBpbiAxMy41MSBmb3JtYXQgYW5kIGRvd24gc2hpZnQgYWNjIGJ5IDM2IHRpbWVzICovDQorICAgIC8qIENvbnZlcnQgb3V0IHRvIDEuMTUgZm9ybWF0ICovDQorICAgIHJldHVybiAoKHExNV90KShhY2MgPj4gMzYpKTsNCit9DQorDQorDQorLyoqDQorKiBAYnJpZWYgIFE3IGJpbGluZWFyIGludGVycG9sYXRpb24uDQorKiBAcGFyYW1baW4sb3V0XSBTICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGludGVycG9sYXRpb24gc3RydWN0dXJlLg0KKyogQHBhcmFtW2luXSAgICAgWCAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlIGluIDEyLjIwIGZvcm1hdC4NCisqIEBwYXJhbVtpbl0gICAgIFkgIGludGVycG9sYXRpb24gY29vcmRpbmF0ZSBpbiAxMi4yMCBmb3JtYXQuDQorKiBAcmV0dXJuIG91dCBpbnRlcnBvbGF0ZWQgdmFsdWUuDQorKi8NCitzdGF0aWMgX19JTkxJTkUgcTdfdCBhcm1fYmlsaW5lYXJfaW50ZXJwX3E3KA0KKyAgICBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX3E3ICpTLA0KKyAgICBxMzFfdCBYLA0KKyAgICBxMzFfdCBZKQ0KK3sNCisgICAgcTYzX3QgYWNjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3V0cHV0ICovDQorICAgIHEzMV90IG91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBvdXRwdXQgKi8NCisgICAgcTMxX3QgeGZyYWN0LCB5ZnJhY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgLyogWCwgWSBmcmFjdGlvbmFsIHBhcnRzICovDQorICAgIHE3X3QgeDEsIHgyLCB5MSwgeTI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLw0KKyAgICBpbnQzMl90IHJJLCBjSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSb3cgYW5kIGNvbHVtbiBpbmRpY2VzICovDQorICAgIHE3X3QgKnBZRGF0YSA9IFMtPnBEYXRhOyAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gb3V0cHV0IHRhYmxlIHZhbHVlcyAqLw0KKyAgICB1aW50MzJfdCBuQ29scyA9IFMtPm51bUNvbHM7ICAgICAgICAgICAgICAgICAvKiBudW0gb2Ygcm93cyAqLw0KKw0KKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8NCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovDQorICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovDQorICAgIHJJID0gKChYICYgKHEzMV90KTB4RkZGMDAwMDApID4+IDIwKTsNCisNCisgICAgLyogSW5wdXQgaXMgaW4gMTIuMjAgZm9ybWF0ICovDQorICAgIC8qIDEyIGJpdHMgZm9yIHRoZSB0YWJsZSBpbmRleCAqLw0KKyAgICAvKiBJbmRleCB2YWx1ZSBjYWxjdWxhdGlvbiAqLw0KKyAgICBjSSA9ICgoWSAmIChxMzFfdCkweEZGRjAwMDAwKSA+PiAyMCk7DQorDQorICAgIC8qIENhcmUgdGFrZW4gZm9yIHRhYmxlIG91dHNpZGUgYm91bmRhcnkgKi8NCisgICAgLyogUmV0dXJucyB6ZXJvIG91dHB1dCB3aGVuIHZhbHVlcyBhcmUgb3V0c2lkZSB0YWJsZSBib3VuZGFyeSAqLw0KKyAgICBpZiAockkgPCAwIHx8IHJJID4gKFMtPm51bVJvd3MgLSAxKSB8fCBjSSA8IDAgfHwgY0kgPiAoUy0+bnVtQ29scyAtIDEpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKDApOw0KKyAgICB9DQorDQorICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8NCisgICAgLyogeGZyYWN0IHNob3VsZCBiZSBpbiAxMi4yMCBmb3JtYXQgKi8NCisgICAgeGZyYWN0ID0gKFggJiAocTMxX3QpMHgwMDBGRkZGRik7DQorDQorICAgIC8qIFJlYWQgdHdvIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyBmcm9tIHRoZSBpbmRleCAqLw0KKyAgICB4MSA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSkgICAgXTsNCisgICAgeDIgPSBwWURhdGFbKCh1aW50MzJfdClySSkgKyBuQ29scyAqICgodWludDMyX3QpY0kpICsgMV07DQorDQorICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8NCisgICAgLyogeWZyYWN0IHNob3VsZCBiZSBpbiAxMi4yMCBmb3JtYXQgKi8NCisgICAgeWZyYWN0ID0gKFkgJiAocTMxX3QpMHgwMDBGRkZGRik7DQorDQorICAgIC8qIFJlYWQgdHdvIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyBmcm9tIHRoZSBpbmRleCAqLw0KKyAgICB5MSA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSArIDEpICAgIF07DQorICAgIHkyID0gcFlEYXRhWygodWludDMyX3QpckkpICsgbkNvbHMgKiAoKHVpbnQzMl90KWNJICsgMSkgKyAxXTsNCisNCisgICAgLyogQ2FsY3VsYXRpb24gb2YgeDEgKiAoMS14ZnJhY3QgKSAqICgxLXlmcmFjdCkgYW5kIGFjYyBpcyBpbiAxNi40NyBmb3JtYXQgKi8NCisgICAgb3V0ID0gKCh4MSAqICgweEZGRkZGIC0geGZyYWN0KSkpOw0KKyAgICBhY2MgPSAoKChxNjNfdCkgb3V0ICogKDB4RkZGRkYgLSB5ZnJhY3QpKSk7DQorDQorICAgIC8qIHgyICogKHhmcmFjdCkgKiAoMS15ZnJhY3QpICBpbiAyLjIyIGFuZCBhZGRpbmcgdG8gYWNjICovDQorICAgIG91dCA9ICgoeDIgKiAoMHhGRkZGRiAtIHlmcmFjdCkpKTsNCisgICAgYWNjICs9ICgoKHE2M190KSBvdXQgKiAoeGZyYWN0KSkpOw0KKw0KKyAgICAvKiB5MSAqICgxIC0geGZyYWN0KSAqICh5ZnJhY3QpICBpbiAyLjIyIGFuZCBhZGRpbmcgdG8gYWNjICovDQorICAgIG91dCA9ICgoeTEgKiAoMHhGRkZGRiAtIHhmcmFjdCkpKTsNCisgICAgYWNjICs9ICgoKHE2M190KSBvdXQgKiAoeWZyYWN0KSkpOw0KKw0KKyAgICAvKiB5MiAqICh4ZnJhY3QpICogKHlmcmFjdCkgIGluIDIuMjIgYW5kIGFkZGluZyB0byBhY2MgKi8NCisgICAgb3V0ID0gKCh5MiAqICh5ZnJhY3QpKSk7DQorICAgIGFjYyArPSAoKChxNjNfdCkgb3V0ICogKHhmcmFjdCkpKTsNCisNCisgICAgLyogYWNjIGluIDE2LjQ3IGZvcm1hdCBhbmQgZG93biBzaGlmdCBieSA0MCB0byBjb252ZXJ0IHRvIDEuNyBmb3JtYXQgKi8NCisgICAgcmV0dXJuICgocTdfdCkoYWNjID4+IDQwKSk7DQorfQ0KKw0KKy8qKg0KKyAqIEB9IGVuZCBvZiBCaWxpbmVhckludGVycG9sYXRlIGdyb3VwDQorICovDQorDQorDQorLyogU01NTEFSICovDQorI2RlZmluZSBtdWx0QWNjXzMyeDMyX2tlZXAzMl9SKGEsIHgsIHkpIFwNCisgICAgYSA9IChxMzFfdCkgKCgoKChxNjNfdCkgYSkgPDwgMzIpICsgKChxNjNfdCkgeCAqIHkpICsgMHg4MDAwMDAwMExMICkgPj4gMzIpDQorDQorLyogU01NTFNSICovDQorI2RlZmluZSBtdWx0U3ViXzMyeDMyX2tlZXAzMl9SKGEsIHgsIHkpIFwNCisgICAgYSA9IChxMzFfdCkgKCgoKChxNjNfdCkgYSkgPDwgMzIpIC0gKChxNjNfdCkgeCAqIHkpICsgMHg4MDAwMDAwMExMICkgPj4gMzIpDQorDQorLyogU01NVUxSICovDQorI2RlZmluZSBtdWx0XzMyeDMyX2tlZXAzMl9SKGEsIHgsIHkpIFwNCisgICAgYSA9IChxMzFfdCkgKCgocTYzX3QpIHggKiB5ICsgMHg4MDAwMDAwMExMICkgPj4gMzIpDQorDQorLyogU01NTEEgKi8NCisjZGVmaW5lIG11bHRBY2NfMzJ4MzJfa2VlcDMyKGEsIHgsIHkpIFwNCisgICAgYSArPSAocTMxX3QpICgoKHE2M190KSB4ICogeSkgPj4gMzIpDQorDQorLyogU01NTFMgKi8NCisjZGVmaW5lIG11bHRTdWJfMzJ4MzJfa2VlcDMyKGEsIHgsIHkpIFwNCisgICAgYSAtPSAocTMxX3QpICgoKHE2M190KSB4ICogeSkgPj4gMzIpDQorDQorLyogU01NVUwgKi8NCisjZGVmaW5lIG11bHRfMzJ4MzJfa2VlcDMyKGEsIHgsIHkpIFwNCisgICAgYSA9IChxMzFfdCkgKCgocTYzX3QpIHggKiB5ICkgPj4gMzIpDQorDQorDQorI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApDQorLyogRW50ZXIgbG93IG9wdGltaXphdGlvbiByZWdpb24gLSBwbGFjZSBkaXJlY3RseSBhYm92ZSBmdW5jdGlvbiBkZWZpbml0aW9uICovDQorI2lmIGRlZmluZWQoIEFSTV9NQVRIX0NNNCApIHx8IGRlZmluZWQoIEFSTV9NQVRIX0NNNykNCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVIgXA0KKyAgICAgICBfUHJhZ21hICgicHVzaCIpICAgICAgICAgXA0KKyAgICAgICBfUHJhZ21hICgiTzEiKQ0KKyNlbHNlDQorI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VOVEVSDQorI2VuZGlmDQorDQorLyogRXhpdCBsb3cgb3B0aW1pemF0aW9uIHJlZ2lvbiAtIHBsYWNlIGRpcmVjdGx5IGFmdGVyIGVuZCBvZiBmdW5jdGlvbiBkZWZpbml0aW9uICovDQorI2lmIGRlZmluZWQoIEFSTV9NQVRIX0NNNCApIHx8IGRlZmluZWQoIEFSTV9NQVRIX0NNNykNCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRVhJVCBcDQorICAgICAgIF9QcmFnbWEgKCJwb3AiKQ0KKyNlbHNlDQorI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VYSVQNCisjZW5kaWYNCisNCisvKiBFbnRlciBsb3cgb3B0aW1pemF0aW9uIHJlZ2lvbiAtIHBsYWNlIGRpcmVjdGx5IGFib3ZlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8NCisjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRU5URVINCisNCisvKiBFeGl0IGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWZ0ZXIgZW5kIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8NCisjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRVhJVA0KKw0KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApDQorI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VOVEVSDQorI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VYSVQNCisjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRU5URVINCisjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRVhJVA0KKw0KKyNlbGlmIGRlZmluZWQoX19HTlVDX18pDQorI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VOVEVSIF9fYXR0cmlidXRlX18oKCBvcHRpbWl6ZSgiLU8xIikgKSkNCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRVhJVA0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUg0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FWElUDQorDQorI2VsaWYgZGVmaW5lZChfX0lDQ0FSTV9fKQ0KKy8qIEVudGVyIGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWJvdmUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLw0KKyNpZiBkZWZpbmVkKCBBUk1fTUFUSF9DTTQgKSB8fCBkZWZpbmVkKCBBUk1fTUFUSF9DTTcpDQorI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VOVEVSIFwNCisgICAgICAgX1ByYWdtYSAoIm9wdGltaXplPWxvdyIpDQorI2Vsc2UNCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVINCisjZW5kaWYNCisNCisvKiBFeGl0IGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWZ0ZXIgZW5kIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8NCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRVhJVA0KKw0KKy8qIEVudGVyIGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWJvdmUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLw0KKyNpZiBkZWZpbmVkKCBBUk1fTUFUSF9DTTQgKSB8fCBkZWZpbmVkKCBBUk1fTUFUSF9DTTcpDQorI2RlZmluZSBJQVJfT05MWV9MT1dfT1BUSU1JWkFUSU9OX0VOVEVSIFwNCisgICAgICAgX1ByYWdtYSAoIm9wdGltaXplPWxvdyIpDQorI2Vsc2UNCisjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRU5URVINCisjZW5kaWYNCisNCisvKiBFeGl0IGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWZ0ZXIgZW5kIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8NCisjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRVhJVA0KKw0KKyNlbGlmIGRlZmluZWQoX19DU01DX18pDQorI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VOVEVSDQorI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VYSVQNCisjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRU5URVINCisjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRVhJVA0KKw0KKyNlbGlmIGRlZmluZWQoX19UQVNLSU5HX18pDQorI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VOVEVSDQorI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VYSVQNCisjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRU5URVINCisjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRVhJVA0KKw0KKyNlbmRpZg0KKw0KKw0KKyNpZmRlZiAgIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKw0KKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQ0KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wDQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9BUk1fTUFUSF9IICovDQorDQorLyoqDQorICoNCisgKiBFbmQgb2YgZmlsZS4NCisgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2Ntc2lzX2FybWNjLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2Ntc2lzX2FybWNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyNGYxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY21zaXNfYXJtY2MuaApAQCAtMCwwICsxLDczNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KKyAqIEBmaWxlICAgICBjbXNpc19hcm1jYy5oDQorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NIENvcmUgRnVuY3Rpb24vSW5zdHJ1Y3Rpb24gSGVhZGVyIEZpbGUNCisgKiBAdmVyc2lvbiAgVjQuMzANCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQ0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNSBBUk0gTElNSVRFRA0KKw0KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQNCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICAgKg0KKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFDQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQorICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisjaWZuZGVmIF9fQ01TSVNfQVJNQ0NfSA0KKyNkZWZpbmUgX19DTVNJU19BUk1DQ19IDQorDQorDQorI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OIDwgNDAwNjc3KQ0KKyNlcnJvciAiUGxlYXNlIHVzZSBBUk0gQ29tcGlsZXIgVG9vbGNoYWluIFY0LjAuNjc3IG9yIGxhdGVyISINCisjZW5kaWYNCisNCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgRnVuY3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8NCisvKiogXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UNCisgICAgXGRlZmdyb3VwIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zIENNU0lTIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucw0KKyAgQHsNCisgKi8NCisNCisvKiBpbnRyaW5zaWMgdm9pZCBfX2VuYWJsZV9pcnEoKTsgICAgICovDQorLyogaW50cmluc2ljIHZvaWQgX19kaXNhYmxlX2lycSgpOyAgICAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IENvbnRyb2wgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIENvbnRyb2wgUmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgQ29udHJvbCBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9DT05UUk9MKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ0NvbnRyb2wgICAgICAgICBfX0FTTSgiY29udHJvbCIpOw0KKyAgICByZXR1cm4gKF9fcmVnQ29udHJvbCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IENvbnRyb2wgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIENvbnRyb2wgUmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBjb250cm9sICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0NPTlRST0wodWludDMyX3QgY29udHJvbCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnQ29udHJvbCAgICAgICAgIF9fQVNNKCJjb250cm9sIik7DQorICAgIF9fcmVnQ29udHJvbCA9IGNvbnRyb2w7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IElQU1IgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIElQU1IgUmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgSVBTUiBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9JUFNSKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ0lQU1IgICAgICAgICAgX19BU00oImlwc3IiKTsNCisgICAgcmV0dXJuIChfX3JlZ0lQU1IpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBBUFNSIFJlZ2lzdGVyDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBBUFNSIFJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIEFQU1IgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfQVBTUih2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdBUFNSICAgICAgICAgIF9fQVNNKCJhcHNyIik7DQorICAgIHJldHVybiAoX19yZWdBUFNSKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgeFBTUiBSZWdpc3Rlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgeFBTUiBSZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICB4UFNSIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X3hQU1Iodm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnWFBTUiAgICAgICAgICBfX0FTTSgieHBzciIpOw0KKyAgICByZXR1cm4gKF9fcmVnWFBTUik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFBTUCBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9QU1Aodm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnUHJvY2Vzc1N0YWNrUG9pbnRlciAgX19BU00oInBzcCIpOw0KKyAgICByZXR1cm4gKF9fcmVnUHJvY2Vzc1N0YWNrUG9pbnRlcik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKS4NCisgIFxwYXJhbSBbaW5dICAgIHRvcE9mUHJvY1N0YWNrICBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0DQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFNQKHVpbnQzMl90IHRvcE9mUHJvY1N0YWNrKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdQcm9jZXNzU3RhY2tQb2ludGVyICBfX0FTTSgicHNwIik7DQorICAgIF9fcmVnUHJvY2Vzc1N0YWNrUG9pbnRlciA9IHRvcE9mUHJvY1N0YWNrOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBNYWluIFN0YWNrIFBvaW50ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBNU1AgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfTVNQKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ01haW5TdGFja1BvaW50ZXIgICAgIF9fQVNNKCJtc3AiKTsNCisgICAgcmV0dXJuIChfX3JlZ01haW5TdGFja1BvaW50ZXIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBNYWluIFN0YWNrIFBvaW50ZXINCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBNYWluIFN0YWNrIFBvaW50ZXIgKE1TUCkuDQorICBccGFyYW0gW2luXSAgICB0b3BPZk1haW5TdGFjayAgTWFpbiBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X01TUCh1aW50MzJfdCB0b3BPZk1haW5TdGFjaykNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnTWFpblN0YWNrUG9pbnRlciAgICAgX19BU00oIm1zcCIpOw0KKyAgICBfX3JlZ01haW5TdGFja1BvaW50ZXIgPSB0b3BPZk1haW5TdGFjazsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgUHJpb3JpdHkgTWFzaw0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcHJpb3JpdHkgbWFzayBiaXQgZnJvbSB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQcmlvcml0eSBNYXNrIHZhbHVlDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X1BSSU1BU0sodm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnUHJpTWFzayAgICAgICAgIF9fQVNNKCJwcmltYXNrIik7DQorICAgIHJldHVybiAoX19yZWdQcmlNYXNrKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgTWFzaw0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBwcmlNYXNrICBQcmlvcml0eSBNYXNrDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFJJTUFTSyh1aW50MzJfdCBwcmlNYXNrKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdQcmlNYXNrICAgICAgICAgX19BU00oInByaW1hc2siKTsNCisgICAgX19yZWdQcmlNYXNrID0gKHByaU1hc2spOw0KK30NCisNCisNCisjaWYgICAgICAgKF9fQ09SVEVYX00gPj0gMHgwM1UpIHx8IChfX0NPUlRFWF9TQyA+PSAzMDBVKQ0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRW5hYmxlIEZJUQ0KKyAgXGRldGFpbHMgRW5hYmxlcyBGSVEgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgRi1iaXQgaW4gdGhlIENQU1IuDQorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLg0KKyAqLw0KKyNkZWZpbmUgX19lbmFibGVfZmF1bHRfaXJxICAgICAgICAgICAgICAgIF9fZW5hYmxlX2ZpcQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRGlzYWJsZSBGSVENCisgIFxkZXRhaWxzIERpc2FibGVzIEZJUSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIEYtYml0IGluIHRoZSBDUFNSLg0KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4NCisgKi8NCisjZGVmaW5lIF9fZGlzYWJsZV9mYXVsdF9pcnEgICAgICAgICAgICAgICBfX2Rpc2FibGVfZmlxDQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgQmFzZSBQcmlvcml0eQ0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIHZhbHVlDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90ICBfX2dldF9CQVNFUFJJKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ0Jhc2VQcmkgICAgICAgICBfX0FTTSgiYmFzZXByaSIpOw0KKyAgICByZXR1cm4gKF9fcmVnQmFzZVByaSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IEJhc2UgUHJpb3JpdHkNCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyLg0KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJKHVpbnQzMl90IGJhc2VQcmkpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ0Jhc2VQcmkgICAgICAgICBfX0FTTSgiYmFzZXByaSIpOw0KKyAgICBfX3JlZ0Jhc2VQcmkgPSAoYmFzZVByaSAmIDB4RkZVKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eSB3aXRoIGNvbmRpdGlvbg0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgb25seSBpZiBCQVNFUFJJIG1hc2tpbmcgaXMgZGlzYWJsZWQsDQorICAgICAgICAgICBvciB0aGUgbmV3IHZhbHVlIGluY3JlYXNlcyB0aGUgQkFTRVBSSSBwcmlvcml0eSBsZXZlbC4NCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0DQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfQkFTRVBSSV9NQVgodWludDMyX3QgYmFzZVByaSkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnQmFzZVByaU1heCAgICAgIF9fQVNNKCJiYXNlcHJpX21heCIpOw0KKyAgICBfX3JlZ0Jhc2VQcmlNYXggPSAoYmFzZVByaSAmIDB4RkZVKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgRmF1bHQgTWFzaw0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgRmF1bHQgTWFzayByZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGYXVsdCBNYXNrIHJlZ2lzdGVyIHZhbHVlDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZBVUxUTUFTSyh2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdGYXVsdE1hc2sgICAgICAgX19BU00oImZhdWx0bWFzayIpOw0KKyAgICByZXR1cm4gKF9fcmVnRmF1bHRNYXNrKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgRmF1bHQgTWFzaw0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEZhdWx0IE1hc2sgcmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBmYXVsdE1hc2sgIEZhdWx0IE1hc2sgdmFsdWUgdG8gc2V0DQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfRkFVTFRNQVNLKHVpbnQzMl90IGZhdWx0TWFzaykNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnRmF1bHRNYXNrICAgICAgIF9fQVNNKCJmYXVsdG1hc2siKTsNCisgICAgX19yZWdGYXVsdE1hc2sgPSAoZmF1bHRNYXNrICYgKHVpbnQzMl90KTEpOw0KK30NCisNCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPj0gMHgwM1UpIHx8IChfX0NPUlRFWF9TQyA+PSAzMDBVKSAqLw0KKw0KKw0KKyNpZiAgICAgICAoX19DT1JURVhfTSA9PSAweDA0VSkgfHwgKF9fQ09SVEVYX00gPT0gMHgwN1UpDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgRlBTQ1INCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyIHZhbHVlDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZQU0NSKHZvaWQpDQorew0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpDQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnZnBzY3IgICAgICAgICBfX0FTTSgiZnBzY3IiKTsNCisgICAgcmV0dXJuIChfX3JlZ2Zwc2NyKTsNCisjZWxzZQ0KKyAgICByZXR1cm4gKDBVKTsNCisjZW5kaWYNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgRlBTQ1INCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIGZwc2NyICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCB2YWx1ZSB0byBzZXQNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9GUFNDUih1aW50MzJfdCBmcHNjcikNCit7DQorI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdmcHNjciAgICAgICAgIF9fQVNNKCJmcHNjciIpOw0KKyAgICBfX3JlZ2Zwc2NyID0gKGZwc2NyKTsNCisjZW5kaWYNCit9DQorDQorI2VuZGlmIC8qIChfX0NPUlRFWF9NID09IDB4MDRVKSB8fCAoX19DT1JURVhfTSA9PSAweDA3VSkgKi8NCisNCisNCisNCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX1JlZ0FjY0Z1bmN0aW9ucyAqLw0KKw0KKw0KKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLw0KKy8qKiBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSBDTVNJUyBDb3JlIEluc3RydWN0aW9uIEludGVyZmFjZQ0KKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBpbnN0cnVjdGlvbnMNCisgIEB7DQorKi8NCisNCisvKioNCisgIFxicmllZiAgIE5vIE9wZXJhdGlvbg0KKyAgXGRldGFpbHMgTm8gT3BlcmF0aW9uIGRvZXMgbm90aGluZy4gVGhpcyBpbnN0cnVjdGlvbiBjYW4gYmUgdXNlZCBmb3IgY29kZSBhbGlnbm1lbnQgcHVycG9zZXMuDQorICovDQorI2RlZmluZSBfX05PUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ub3ANCisNCisNCisvKioNCisgIFxicmllZiAgIFdhaXQgRm9yIEludGVycnVwdA0KKyAgXGRldGFpbHMgV2FpdCBGb3IgSW50ZXJydXB0IGlzIGEgaGludCBpbnN0cnVjdGlvbiB0aGF0IHN1c3BlbmRzIGV4ZWN1dGlvbiB1bnRpbCBvbmUgb2YgYSBudW1iZXIgb2YgZXZlbnRzIG9jY3Vycy4NCisgKi8NCisjZGVmaW5lIF9fV0ZJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dmaQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgV2FpdCBGb3IgRXZlbnQNCisgIFxkZXRhaWxzIFdhaXQgRm9yIEV2ZW50IGlzIGEgaGludCBpbnN0cnVjdGlvbiB0aGF0IHBlcm1pdHMgdGhlIHByb2Nlc3NvciB0byBlbnRlcg0KKyAgICAgICAgICAgYSBsb3ctcG93ZXIgc3RhdGUgdW50aWwgb25lIG9mIGEgbnVtYmVyIG9mIGV2ZW50cyBvY2N1cnMuDQorICovDQorI2RlZmluZSBfX1dGRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193ZmUNCisNCisNCisvKioNCisgIFxicmllZiAgIFNlbmQgRXZlbnQNCisgIFxkZXRhaWxzIFNlbmQgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uLiBJdCBjYXVzZXMgYW4gZXZlbnQgdG8gYmUgc2lnbmFsZWQgdG8gdGhlIENQVS4NCisgKi8NCisjZGVmaW5lIF9fU0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Nldg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIEJhcnJpZXINCisgIFxkZXRhaWxzIEluc3RydWN0aW9uIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyIGZsdXNoZXMgdGhlIHBpcGVsaW5lIGluIHRoZSBwcm9jZXNzb3IsDQorICAgICAgICAgICBzbyB0aGF0IGFsbCBpbnN0cnVjdGlvbnMgZm9sbG93aW5nIHRoZSBJU0IgYXJlIGZldGNoZWQgZnJvbSBjYWNoZSBvciBtZW1vcnksDQorICAgICAgICAgICBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gY29tcGxldGVkLg0KKyAqLw0KKyNkZWZpbmUgX19JU0IoKSBkbyB7XA0KKyAgICAgICAgICAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTtcDQorICAgICAgICAgICAgICAgICAgIF9faXNiKDB4Rik7XA0KKyAgICAgICAgICAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTtcDQorICAgICAgICAgICAgICAgIH0gd2hpbGUgKDBVKQ0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRGF0YSBTeW5jaHJvbml6YXRpb24gQmFycmllcg0KKyAgXGRldGFpbHMgQWN0cyBhcyBhIHNwZWNpYWwga2luZCBvZiBEYXRhIE1lbW9yeSBCYXJyaWVyLg0KKyAgICAgICAgICAgSXQgY29tcGxldGVzIHdoZW4gYWxsIGV4cGxpY2l0IG1lbW9yeSBhY2Nlc3NlcyBiZWZvcmUgdGhpcyBpbnN0cnVjdGlvbiBjb21wbGV0ZS4NCisgKi8NCisjZGVmaW5lIF9fRFNCKCkgZG8ge1wNCisgICAgICAgICAgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7XA0KKyAgICAgICAgICAgICAgICAgICBfX2RzYigweEYpO1wNCisgICAgICAgICAgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7XA0KKyAgICAgICAgICAgICAgICB9IHdoaWxlICgwVSkNCisNCisvKioNCisgIFxicmllZiAgIERhdGEgTWVtb3J5IEJhcnJpZXINCisgIFxkZXRhaWxzIEVuc3VyZXMgdGhlIGFwcGFyZW50IG9yZGVyIG9mIHRoZSBleHBsaWNpdCBtZW1vcnkgb3BlcmF0aW9ucyBiZWZvcmUNCisgICAgICAgICAgIGFuZCBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24sIHdpdGhvdXQgZW5zdXJpbmcgdGhlaXIgY29tcGxldGlvbi4NCisgKi8NCisjZGVmaW5lIF9fRE1CKCkgZG8ge1wNCisgICAgICAgICAgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7XA0KKyAgICAgICAgICAgICAgICAgICBfX2RtYigweEYpO1wNCisgICAgICAgICAgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7XA0KKyAgICAgICAgICAgICAgICB9IHdoaWxlICgwVSkNCisNCisvKioNCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciAoMzIgYml0KQ0KKyAgXGRldGFpbHMgUmV2ZXJzZXMgdGhlIGJ5dGUgb3JkZXIgaW4gaW50ZWdlciB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlDQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUNCisgKi8NCisjZGVmaW5lIF9fUkVWICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jldg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgxNiBiaXQpDQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiB0d28gdW5zaWduZWQgc2hvcnQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQ0KKyAqLw0KKyNpZm5kZWYgX19OT19FTUJFRERFRF9BU00NCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV2MTZfdGV4dCIpKSkgX19TVEFUSUNfSU5MSU5FIF9fQVNNIHVpbnQzMl90IF9fUkVWMTYodWludDMyX3QgdmFsdWUpDQorew0KKyAgICByZXYxNiByMCwgcjANCisgICAgYnggbHINCit9DQorI2VuZGlmDQorDQorLyoqDQorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgaW4gc2lnbmVkIHNob3J0IHZhbHVlDQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiBhIHNpZ25lZCBzaG9ydCB2YWx1ZSB3aXRoIHNpZ24gZXh0ZW5zaW9uIHRvIGludGVnZXIuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlDQorICovDQorI2lmbmRlZiBfX05PX0VNQkVEREVEX0FTTQ0KK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXZzaF90ZXh0IikpKSBfX1NUQVRJQ19JTkxJTkUgX19BU00gaW50MzJfdCBfX1JFVlNIKGludDMyX3QgdmFsdWUpDQorew0KKyAgICByZXZzaCByMCwgcjANCisgICAgYnggbHINCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBSb3RhdGUgUmlnaHQgaW4gdW5zaWduZWQgdmFsdWUgKDMyIGJpdCkNCisgIFxkZXRhaWxzIFJvdGF0ZSBSaWdodCAoaW1tZWRpYXRlKSBwcm92aWRlcyB0aGUgdmFsdWUgb2YgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgcm90YXRlZCBieSBhIHZhcmlhYmxlIG51bWJlciBvZiBiaXRzLg0KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJvdGF0ZQ0KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIE51bWJlciBvZiBCaXRzIHRvIHJvdGF0ZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJvdGF0ZWQgdmFsdWUNCisgKi8NCisjZGVmaW5lIF9fUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jvcg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgQnJlYWtwb2ludA0KKyAgXGRldGFpbHMgQ2F1c2VzIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXIgRGVidWcgc3RhdGUuDQorICAgICAgICAgICBEZWJ1ZyB0b29scyBjYW4gdXNlIHRoaXMgdG8gaW52ZXN0aWdhdGUgc3lzdGVtIHN0YXRlIHdoZW4gdGhlIGluc3RydWN0aW9uIGF0IGEgcGFydGljdWxhciBhZGRyZXNzIGlzIHJlYWNoZWQuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgaXMgaWdub3JlZCBieSB0aGUgcHJvY2Vzc29yLg0KKyAgICAgICAgICAgICAgICAgSWYgcmVxdWlyZWQsIGEgZGVidWdnZXIgY2FuIHVzZSBpdCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBicmVha3BvaW50Lg0KKyAqLw0KKyNkZWZpbmUgX19CS1BUKHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgX19icmVha3BvaW50KHZhbHVlKQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUmV2ZXJzZSBiaXQgb3JkZXIgb2YgdmFsdWUNCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBiaXQgb3JkZXIgb2YgdGhlIGdpdmVuIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQ0KKyAqLw0KKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpDQorI2RlZmluZSBfX1JCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmJpdA0KKyNlbHNlDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JCSVQodWludDMyX3QgdmFsdWUpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorICAgIGludDMyX3QgcyA9IDQgLypzaXplb2YodikqLyAqIDggLSAxOyAvKiBleHRyYSBzaGlmdCBuZWVkZWQgYXQgZW5kICovDQorDQorICAgIHJlc3VsdCA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAvKiByIHdpbGwgYmUgcmV2ZXJzZWQgYml0cyBvZiB2OyBmaXJzdCBnZXQgTFNCIG9mIHYgKi8NCisNCisgICAgZm9yICh2YWx1ZSA+Pj0gMVU7IHZhbHVlOyB2YWx1ZSA+Pj0gMVUpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA8PD0gMVU7DQorICAgICAgICByZXN1bHQgfD0gdmFsdWUgJiAxVTsNCisgICAgICAgIHMtLTsNCisgICAgfQ0KKw0KKyAgICByZXN1bHQgPDw9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hpZnQgd2hlbiB2J3MgaGlnaGVzdCBiaXRzIGFyZSB6ZXJvICovDQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBDb3VudCBsZWFkaW5nIHplcm9zDQorICBcZGV0YWlscyBDb3VudHMgdGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIGEgZGF0YSB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gY291bnQgdGhlIGxlYWRpbmcgemVyb3MNCisgIFxyZXR1cm4gICAgICAgICAgICAgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3MgaW4gdmFsdWUNCisgKi8NCisjZGVmaW5lIF9fQ0xaICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nseg0KKw0KKw0KKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpDQorDQorLyoqDQorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICg4IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWUuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQ4X3QgYXQgKCpwdHIpDQorICovDQorI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OIDwgNTA2MDAyMCkNCisjZGVmaW5lIF9fTERSRVhCKHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCApIF9fbGRyZXgocHRyKSkNCisjZWxzZQ0KKyNkZWZpbmUgX19MRFJFWEIocHRyKSAgICAgICAgICBfUHJhZ21hKCJwdXNoIikgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcyAzNzMxIikgKCh1aW50OF90ICkgX19sZHJleChwdHIpKSAgX1ByYWdtYSgicG9wIikNCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDE2IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQ0KKyAqLw0KKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA8IDUwNjAwMjApDQorI2RlZmluZSBfX0xEUkVYSChwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KSBfX2xkcmV4KHB0cikpDQorI2Vsc2UNCisjZGVmaW5lIF9fTERSRVhIKHB0cikgICAgICAgICAgX1ByYWdtYSgicHVzaCIpIF9QcmFnbWEoImRpYWdfc3VwcHJlc3MgMzczMSIpICgodWludDE2X3QpIF9fbGRyZXgocHRyKSkgIF9QcmFnbWEoInBvcCIpDQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikNCisgKi8NCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPCA1MDYwMDIwKQ0KKyNkZWZpbmUgX19MRFJFWFcocHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCApIF9fbGRyZXgocHRyKSkNCisjZWxzZQ0KKyNkZWZpbmUgX19MRFJFWFcocHRyKSAgICAgICAgICBfUHJhZ21hKCJwdXNoIikgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcyAzNzMxIikgKCh1aW50MzJfdCApIF9fbGRyZXgocHRyKSkgIF9QcmFnbWEoInBvcCIpDQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICg4IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZA0KKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQNCisgKi8NCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPCA1MDYwMDIwKQ0KKyNkZWZpbmUgX19TVFJFWEIodmFsdWUsIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJleCh2YWx1ZSwgcHRyKQ0KKyNlbHNlDQorI2RlZmluZSBfX1NUUkVYQih2YWx1ZSwgcHRyKSAgIF9QcmFnbWEoInB1c2giKSBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDM3MzEiKSBfX3N0cmV4KHZhbHVlLCBwdHIpICAgICAgICBfUHJhZ21hKCJwb3AiKQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoMTYgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZA0KKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQNCisgKi8NCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPCA1MDYwMDIwKQ0KKyNkZWZpbmUgX19TVFJFWEgodmFsdWUsIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJleCh2YWx1ZSwgcHRyKQ0KKyNlbHNlDQorI2RlZmluZSBfX1NUUkVYSCh2YWx1ZSwgcHRyKSAgIF9QcmFnbWEoInB1c2giKSBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDM3MzEiKSBfX3N0cmV4KHZhbHVlLCBwdHIpICAgICAgICBfUHJhZ21hKCJwb3AiKQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoMzIgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZA0KKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQNCisgKi8NCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPCA1MDYwMDIwKQ0KKyNkZWZpbmUgX19TVFJFWFcodmFsdWUsIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJleCh2YWx1ZSwgcHRyKQ0KKyNlbHNlDQorI2RlZmluZSBfX1NUUkVYVyh2YWx1ZSwgcHRyKSAgIF9QcmFnbWEoInB1c2giKSBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDM3MzEiKSBfX3N0cmV4KHZhbHVlLCBwdHIpICAgICAgICBfUHJhZ21hKCJwb3AiKQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUmVtb3ZlIHRoZSBleGNsdXNpdmUgbG9jaw0KKyAgXGRldGFpbHMgUmVtb3ZlcyB0aGUgZXhjbHVzaXZlIGxvY2sgd2hpY2ggaXMgY3JlYXRlZCBieSBMRFJFWC4NCisgKi8NCisjZGVmaW5lIF9fQ0xSRVggICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NscmV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTaWduZWQgU2F0dXJhdGUNCisgIFxkZXRhaWxzIFNhdHVyYXRlcyBhIHNpZ25lZCB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gYmUgc2F0dXJhdGVkDQorICBccGFyYW0gW2luXSAgICBzYXQgIEJpdCBwb3NpdGlvbiB0byBzYXR1cmF0ZSB0byAoMS4uMzIpDQorICBccmV0dXJuICAgICAgICAgICAgIFNhdHVyYXRlZCB2YWx1ZQ0KKyAqLw0KKyNkZWZpbmUgX19TU0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3NhdA0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgVW5zaWduZWQgU2F0dXJhdGUNCisgIFxkZXRhaWxzIFNhdHVyYXRlcyBhbiB1bnNpZ25lZCB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gYmUgc2F0dXJhdGVkDQorICBccGFyYW0gW2luXSAgICBzYXQgIEJpdCBwb3NpdGlvbiB0byBzYXR1cmF0ZSB0byAoMC4uMzEpDQorICBccmV0dXJuICAgICAgICAgICAgIFNhdHVyYXRlZCB2YWx1ZQ0KKyAqLw0KKyNkZWZpbmUgX19VU0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXNhdA0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUm90YXRlIFJpZ2h0IHdpdGggRXh0ZW5kICgzMiBiaXQpDQorICBcZGV0YWlscyBNb3ZlcyBlYWNoIGJpdCBvZiBhIGJpdHN0cmluZyByaWdodCBieSBvbmUgYml0Lg0KKyAgICAgICAgICAgVGhlIGNhcnJ5IGlucHV0IGlzIHNoaWZ0ZWQgaW4gYXQgdGhlIGxlZnQgZW5kIG9mIHRoZSBiaXRzdHJpbmcuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcm90YXRlDQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQ0KKyAqLw0KKyNpZm5kZWYgX19OT19FTUJFRERFRF9BU00NCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucnJ4X3RleHQiKSkpIF9fU1RBVElDX0lOTElORSBfX0FTTSB1aW50MzJfdCBfX1JSWCh1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIHJyeCByMCwgcjANCisgICAgYnggbHINCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoOCBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikNCisgKi8NCisjZGVmaW5lIF9fTERSQlQocHRyKSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QgKSAgX19sZHJ0KHB0cikpDQorDQorDQorLyoqDQorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoMTYgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQ0KKyAqLw0KKyNkZWZpbmUgX19MRFJIVChwdHIpICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpICBfX2xkcnQocHRyKSkNCisNCisNCisvKioNCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpDQorICovDQorI2RlZmluZSBfX0xEUlQocHRyKSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCApIF9fbGRydChwdHIpKQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDggYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICovDQorI2RlZmluZSBfX1NUUkJUKHZhbHVlLCBwdHIpICAgICAgICAgICAgICAgX19zdHJ0KHZhbHVlLCBwdHIpDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoMTYgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAqLw0KKyNkZWZpbmUgX19TVFJIVCh2YWx1ZSwgcHRyKSAgICAgICAgICAgICAgIF9fc3RydCh2YWx1ZSwgcHRyKQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDMyIGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgKi8NCisjZGVmaW5lIF9fU1RSVCh2YWx1ZSwgcHRyKSAgICAgICAgICAgICAgICBfX3N0cnQodmFsdWUsIHB0cikNCisNCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPj0gMHgwM1UpIHx8IChfX0NPUlRFWF9TQyA+PSAzMDBVKSAqLw0KKw0KKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSAqLw0KKw0KKw0KKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMgIENvbXBpbGVyIHNwZWNpZmljIEludHJpbnNpY3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLw0KKy8qKiBcZGVmZ3JvdXAgQ01TSVNfU0lNRF9pbnRyaW5zaWNzIENNU0lTIFNJTUQgSW50cmluc2ljcw0KKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBTSU1EIGluc3RydWN0aW9ucw0KKyAgQHsNCisqLw0KKw0KKyNpZiAoX19DT1JURVhfTSA+PSAweDA0VSkgIC8qIG9ubHkgZm9yIENvcnRleC1NNCBhbmQgYWJvdmUgKi8NCisNCisjZGVmaW5lIF9fU0FERDggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NhZGQ4DQorI2RlZmluZSBfX1FBREQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19xYWRkOA0KKyNkZWZpbmUgX19TSEFERDggICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2hhZGQ4DQorI2RlZmluZSBfX1VBREQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgX191YWRkOA0KKyNkZWZpbmUgX19VUUFERDggICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXFhZGQ4DQorI2RlZmluZSBfX1VIQUREOCAgICAgICAgICAgICAgICAgICAgICAgICAgX191aGFkZDgNCisjZGVmaW5lIF9fU1NVQjggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NzdWI4DQorI2RlZmluZSBfX1FTVUI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19xc3ViOA0KKyNkZWZpbmUgX19TSFNVQjggICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2hzdWI4DQorI2RlZmluZSBfX1VTVUI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgX191c3ViOA0KKyNkZWZpbmUgX19VUVNVQjggICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXFzdWI4DQorI2RlZmluZSBfX1VIU1VCOCAgICAgICAgICAgICAgICAgICAgICAgICAgX191aHN1YjgNCisjZGVmaW5lIF9fU0FERDE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NhZGQxNg0KKyNkZWZpbmUgX19RQUREMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcWFkZDE2DQorI2RlZmluZSBfX1NIQUREMTYgICAgICAgICAgICAgICAgICAgICAgICAgX19zaGFkZDE2DQorI2RlZmluZSBfX1VBREQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgX191YWRkMTYNCisjZGVmaW5lIF9fVVFBREQxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3VxYWRkMTYNCisjZGVmaW5lIF9fVUhBREQxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3VoYWRkMTYNCisjZGVmaW5lIF9fU1NVQjE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NzdWIxNg0KKyNkZWZpbmUgX19RU1VCMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcXN1YjE2DQorI2RlZmluZSBfX1NIU1VCMTYgICAgICAgICAgICAgICAgICAgICAgICAgX19zaHN1YjE2DQorI2RlZmluZSBfX1VTVUIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgX191c3ViMTYNCisjZGVmaW5lIF9fVVFTVUIxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Vxc3ViMTYNCisjZGVmaW5lIF9fVUhTVUIxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Voc3ViMTYNCisjZGVmaW5lIF9fU0FTWCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Nhc3gNCisjZGVmaW5lIF9fUUFTWCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Fhc3gNCisjZGVmaW5lIF9fU0hBU1ggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NoYXN4DQorI2RlZmluZSBfX1VBU1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgX191YXN4DQorI2RlZmluZSBfX1VRQVNYICAgICAgICAgICAgICAgICAgICAgICAgICAgX191cWFzeA0KKyNkZWZpbmUgX19VSEFTWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWhhc3gNCisjZGVmaW5lIF9fU1NBWCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NzYXgNCisjZGVmaW5lIF9fUVNBWCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3FzYXgNCisjZGVmaW5lIF9fU0hTQVggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Noc2F4DQorI2RlZmluZSBfX1VTQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgX191c2F4DQorI2RlZmluZSBfX1VRU0FYICAgICAgICAgICAgICAgICAgICAgICAgICAgX191cXNheA0KKyNkZWZpbmUgX19VSFNBWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWhzYXgNCisjZGVmaW5lIF9fVVNBRDggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VzYWQ4DQorI2RlZmluZSBfX1VTQURBOCAgICAgICAgICAgICAgICAgICAgICAgICAgX191c2FkYTgNCisjZGVmaW5lIF9fU1NBVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NzYXQxNg0KKyNkZWZpbmUgX19VU0FUMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXNhdDE2DQorI2RlZmluZSBfX1VYVEIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgX191eHRiMTYNCisjZGVmaW5lIF9fVVhUQUIxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3V4dGFiMTYNCisjZGVmaW5lIF9fU1hUQjE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N4dGIxNg0KKyNkZWZpbmUgX19TWFRBQjE2ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3h0YWIxNg0KKyNkZWZpbmUgX19TTVVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc211YWQNCisjZGVmaW5lIF9fU01VQURYICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtdWFkeA0KKyNkZWZpbmUgX19TTUxBRCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc21sYWQNCisjZGVmaW5lIF9fU01MQURYICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtbGFkeA0KKyNkZWZpbmUgX19TTUxBTEQgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc21sYWxkDQorI2RlZmluZSBfX1NNTEFMRFggICAgICAgICAgICAgICAgICAgICAgICAgX19zbWxhbGR4DQorI2RlZmluZSBfX1NNVVNEICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbXVzZA0KKyNkZWZpbmUgX19TTVVTRFggICAgICAgICAgICAgICAgICAgICAgICAgIF9fc211c2R4DQorI2RlZmluZSBfX1NNTFNEICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbWxzZA0KKyNkZWZpbmUgX19TTUxTRFggICAgICAgICAgICAgICAgICAgICAgICAgIF9fc21sc2R4DQorI2RlZmluZSBfX1NNTFNMRCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbWxzbGQNCisjZGVmaW5lIF9fU01MU0xEWCAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtbHNsZHgNCisjZGVmaW5lIF9fU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlbA0KKyNkZWZpbmUgX19RQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcWFkZA0KKyNkZWZpbmUgX19RU1VCICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcXN1Yg0KKw0KKyNkZWZpbmUgX19QS0hCVChBUkcxLEFSRzIsQVJHMykgICAgICAgICAgKCAoKCgodWludDMyX3QpKEFSRzEpKSAgICAgICAgICApICYgMHgwMDAwRkZGRlVMKSB8ICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKCh1aW50MzJfdCkoQVJHMikpIDw8IChBUkczKSkgJiAweEZGRkYwMDAwVUwpICApDQorDQorI2RlZmluZSBfX1BLSFRCKEFSRzEsQVJHMixBUkczKSAgICAgICAgICAoICgoKCh1aW50MzJfdCkoQVJHMSkpICAgICAgICAgICkgJiAweEZGRkYwMDAwVUwpIHwgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHVpbnQzMl90KShBUkcyKSkgPj4gKEFSRzMpKSAmIDB4MDAwMEZGRkZVTCkgICkNCisNCisjZGVmaW5lIF9fU01NTEEoQVJHMSxBUkcyLEFSRzMpICAgICAgICAgICggKGludDMyX3QpKCgoKGludDY0X3QpKEFSRzEpICogKEFSRzIpKSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGludDY0X3QpKEFSRzMpIDw8IDMyVSkgICAgICkgPj4gMzJVKSkNCisNCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPj0gMHgwNCkgKi8NCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgKi8NCisNCisNCisjZW5kaWYgLyogX19DTVNJU19BUk1DQ19IICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jbXNpc19hcm1jY19WNi5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jbXNpc19hcm1jY19WNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGQzZjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2Ntc2lzX2FybWNjX1Y2LmgKQEAgLTAsMCArMSwxODE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQorICogQGZpbGUgICAgIGNtc2lzX2FybWNjX1Y2LmgNCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gQ29yZSBGdW5jdGlvbi9JbnN0cnVjdGlvbiBIZWFkZXIgRmlsZQ0KKyAqIEB2ZXJzaW9uICBWNC4zMA0KKyAqIEBkYXRlICAgICAyMC4gT2N0b2JlciAyMDE1DQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVEDQorDQorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZA0KKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgICAqDQorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUNCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YNCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MNCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTg0KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpDQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKyNpZm5kZWYgX19DTVNJU19BUk1DQ19WNl9IDQorI2RlZmluZSBfX0NNU0lTX0FSTUNDX1Y2X0gNCisNCisNCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgRnVuY3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8NCisvKiogXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UNCisgICAgXGRlZmdyb3VwIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zIENNU0lTIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucw0KKyAgQHsNCisgKi8NCisNCisvKioNCisgIFxicmllZiAgIEVuYWJsZSBJUlEgSW50ZXJydXB0cw0KKyAgXGRldGFpbHMgRW5hYmxlcyBJUlEgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgSS1iaXQgaW4gdGhlIENQU1IuDQorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2VuYWJsZV9pcnEodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJjcHNpZSBpIiA6IDogOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRGlzYWJsZSBJUlEgSW50ZXJydXB0cw0KKyAgXGRldGFpbHMgRGlzYWJsZXMgSVJRIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgSS1iaXQgaW4gdGhlIENQU1IuDQorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2Rpc2FibGVfaXJxKHZvaWQpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiY3BzaWQgaSIgOiA6IDogIm1lbW9yeSIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBDb250cm9sIFJlZ2lzdGVyDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBDb250cm9sIFJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0NPTlRST0wodm9pZCkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgY29udHJvbCIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkNCisvKioNCisgIFxicmllZiAgIEdldCBDb250cm9sIFJlZ2lzdGVyIChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgbm9uLXNlY3VyZSBDb250cm9sIFJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIG1vZGUuDQorICBccmV0dXJuICAgICAgICAgICAgICAgbm9uLXNlY3VyZSBDb250cm9sIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9DT05UUk9MX05TKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIGNvbnRyb2xfbnMiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBDb250cm9sIFJlZ2lzdGVyDQorICBcZGV0YWlscyBXcml0ZXMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBDb250cm9sIFJlZ2lzdGVyLg0KKyAgXHBhcmFtIFtpbl0gICAgY29udHJvbCAgQ29udHJvbCBSZWdpc3RlciB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfQ09OVFJPTCh1aW50MzJfdCBjb250cm9sKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBjb250cm9sLCAlMCIgOiA6ICJyIihjb250cm9sKSA6ICJtZW1vcnkiKTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IENvbnRyb2wgUmVnaXN0ZXIgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBXcml0ZXMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIENvbnRyb2wgUmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccGFyYW0gW2luXSAgICBjb250cm9sICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9DT05UUk9MX05TKHVpbnQzMl90IGNvbnRyb2wpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIGNvbnRyb2xfbnMsICUwIiA6IDogInIiKGNvbnRyb2wpIDogIm1lbW9yeSIpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBJUFNSIFJlZ2lzdGVyDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBJUFNSIFJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIElQU1IgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0lQU1Iodm9pZCkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgaXBzciIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkNCisvKioNCisgIFxicmllZiAgIEdldCBJUFNSIFJlZ2lzdGVyIChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgbm9uLXNlY3VyZSBJUFNSIFJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIElQU1IgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X0lQU1JfTlModm9pZCkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgaXBzcl9ucyIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEFQU1IgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIEFQU1IgUmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgQVBTUiBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfQVBTUih2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBhcHNyIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEFQU1IgUmVnaXN0ZXIgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBub24tc2VjdXJlIEFQU1IgUmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccmV0dXJuICAgICAgICAgICAgICAgQVBTUiBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfQVBTUl9OUyh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBhcHNyX25zIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgeFBTUiBSZWdpc3Rlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgeFBTUiBSZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICB4UFNSIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF94UFNSKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIHhwc3IiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpDQorLyoqDQorICBcYnJpZWYgICBHZXQgeFBTUiBSZWdpc3RlciAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIG5vbi1zZWN1cmUgeFBTUiBSZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICB4UFNSIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF94UFNSX05TKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIHhwc3JfbnMiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQU1AgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X1BTUCh2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBwc3AiICA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlciAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG5vbi1zZWN1cmUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApIHdoZW4gaW4gc2VjdXJlIHN0YXRlLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFBTUCBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfUFNQX05TKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIHBzcF9ucyIgIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXINCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkuDQorICBccGFyYW0gW2luXSAgICB0b3BPZlByb2NTdGFjayAgUHJvY2VzcyBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9QU1AodWludDMyX3QgdG9wT2ZQcm9jU3RhY2spDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIHBzcCwgJTAiIDogOiAiciIodG9wT2ZQcm9jU3RhY2spIDogInNwIik7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkNCisvKioNCisgIFxicmllZiAgIFNldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccGFyYW0gW2luXSAgICB0b3BPZlByb2NTdGFjayAgUHJvY2VzcyBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9QU1BfTlModWludDMyX3QgdG9wT2ZQcm9jU3RhY2spDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIHBzcF9ucywgJTAiIDogOiAiciIodG9wT2ZQcm9jU3RhY2spIDogInNwIik7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IE1haW4gU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIE1TUCBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfTVNQKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIG1zcCIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkNCisvKioNCisgIFxicmllZiAgIEdldCBNYWluIFN0YWNrIFBvaW50ZXIgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBub24tc2VjdXJlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBNU1AgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X01TUF9OUyh2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBtc3BfbnMiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBNYWluIFN0YWNrIFBvaW50ZXINCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBNYWluIFN0YWNrIFBvaW50ZXIgKE1TUCkuDQorICBccGFyYW0gW2luXSAgICB0b3BPZk1haW5TdGFjayAgTWFpbiBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9NU1AodWludDMyX3QgdG9wT2ZNYWluU3RhY2spDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIG1zcCwgJTAiIDogOiAiciIodG9wT2ZNYWluU3RhY2spIDogInNwIik7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkNCisvKioNCisgIFxicmllZiAgIFNldCBNYWluIFN0YWNrIFBvaW50ZXIgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBNYWluIFN0YWNrIFBvaW50ZXIgKE1TUCkgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccGFyYW0gW2luXSAgICB0b3BPZk1haW5TdGFjayAgTWFpbiBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9NU1BfTlModWludDMyX3QgdG9wT2ZNYWluU3RhY2spDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIG1zcF9ucywgJTAiIDogOiAiciIodG9wT2ZNYWluU3RhY2spIDogInNwIik7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IFByaW9yaXR5IE1hc2sNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHByaW9yaXR5IG1hc2sgYml0IGZyb20gdGhlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgUHJpb3JpdHkgTWFzayB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfUFJJTUFTSyh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBwcmltYXNrIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IFByaW9yaXR5IE1hc2sgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBub24tc2VjdXJlIHByaW9yaXR5IG1hc2sgYml0IGZyb20gdGhlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccmV0dXJuICAgICAgICAgICAgICAgUHJpb3JpdHkgTWFzayB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfUFJJTUFTS19OUyh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBwcmltYXNrX25zIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgTWFzaw0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBwcmlNYXNrICBQcmlvcml0eSBNYXNrDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BSSU1BU0sodWludDMyX3QgcHJpTWFzaykNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgcHJpbWFzaywgJTAiIDogOiAiciIocHJpTWFzaykgOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkNCisvKioNCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBNYXNrIChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgUHJpb3JpdHkgTWFzayBSZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxwYXJhbSBbaW5dICAgIHByaU1hc2sgIFByaW9yaXR5IE1hc2sNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfUFJJTUFTS19OUyh1aW50MzJfdCBwcmlNYXNrKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBwcmltYXNrX25zLCAlMCIgOiA6ICJyIihwcmlNYXNrKSA6ICJtZW1vcnkiKTsNCit9DQorI2VuZGlmDQorDQorDQorI2lmICgoX19BUk1fQVJDSF83TV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF83RU1fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIHRoaXMgaXMgb2sgZm9yIGNvcnRleCA+PTMgKi8NCisNCisvKioNCisgIFxicmllZiAgIEVuYWJsZSBGSVENCisgIFxkZXRhaWxzIEVuYWJsZXMgRklRIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIEYtYml0IGluIHRoZSBDUFNSLg0KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19lbmFibGVfZmF1bHRfaXJxKHZvaWQpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiY3BzaWUgZiIgOiA6IDogIm1lbW9yeSIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIERpc2FibGUgRklRDQorICBcZGV0YWlscyBEaXNhYmxlcyBGSVEgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBGLWJpdCBpbiB0aGUgQ1BTUi4NCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZGlzYWJsZV9mYXVsdF9pcnEodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJjcHNpZCBmIiA6IDogOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEJhc2UgUHJpb3JpdHkNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgQmFzZSBQcmlvcml0eSByZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfQkFTRVBSSSh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBiYXNlcHJpIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEJhc2UgUHJpb3JpdHkgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBub24tc2VjdXJlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccmV0dXJuICAgICAgICAgICAgICAgQmFzZSBQcmlvcml0eSByZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfQkFTRVBSSV9OUyh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBiYXNlcHJpX25zIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eQ0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBiYXNlUHJpICBCYXNlIFByaW9yaXR5IHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJKHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBiYXNlcHJpLCAlMCIgOiA6ICJyIih2YWx1ZSkgOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkNCisvKioNCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5IChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgQmFzZSBQcmlvcml0eSByZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X0JBU0VQUklfTlModWludDMyX3QgdmFsdWUpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIGJhc2VwcmlfbnMsICUwIiA6IDogInIiKHZhbHVlKSA6ICJtZW1vcnkiKTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eSB3aXRoIGNvbmRpdGlvbg0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgb25seSBpZiBCQVNFUFJJIG1hc2tpbmcgaXMgZGlzYWJsZWQsDQorICAgICAgICAgICBvciB0aGUgbmV3IHZhbHVlIGluY3JlYXNlcyB0aGUgQkFTRVBSSSBwcmlvcml0eSBsZXZlbC4NCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0JBU0VQUklfTUFYKHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBiYXNlcHJpX21heCwgJTAiIDogOiAiciIodmFsdWUpIDogIm1lbW9yeSIpOw0KK30NCisNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpDQorLyoqDQorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eSB3aXRoIGNvbmRpdGlvbiAobm9uX3NlY3VyZSkNCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUgb25seSBpZiBCQVNFUFJJIG1hc2tpbmcgaXMgZGlzYWJsZWQsDQorICAgICAgICAgICBvciB0aGUgbmV3IHZhbHVlIGluY3JlYXNlcyB0aGUgQkFTRVBSSSBwcmlvcml0eSBsZXZlbC4NCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X0JBU0VQUklfTUFYX05TKHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBiYXNlcHJpX21heF9ucywgJTAiIDogOiAiciIodmFsdWUpIDogIm1lbW9yeSIpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBGYXVsdCBNYXNrDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBGYXVsdCBNYXNrIHJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZhdWx0IE1hc2sgcmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZBVUxUTUFTSyh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBmYXVsdG1hc2siIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpDQorLyoqDQorICBcYnJpZWYgICBHZXQgRmF1bHQgTWFzayAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG5vbi1zZWN1cmUgRmF1bHQgTWFzayByZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGYXVsdCBNYXNrIHJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9GQVVMVE1BU0tfTlModm9pZCkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgZmF1bHRtYXNrX25zIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgRmF1bHQgTWFzaw0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEZhdWx0IE1hc2sgcmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBmYXVsdE1hc2sgIEZhdWx0IE1hc2sgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0ZBVUxUTUFTSyh1aW50MzJfdCBmYXVsdE1hc2spDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIGZhdWx0bWFzaywgJTAiIDogOiAiciIoZmF1bHRNYXNrKSA6ICJtZW1vcnkiKTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IEZhdWx0IE1hc2sgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBGYXVsdCBNYXNrIHJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLg0KKyAgXHBhcmFtIFtpbl0gICAgZmF1bHRNYXNrICBGYXVsdCBNYXNrIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9GQVVMVE1BU0tfTlModWludDMyX3QgZmF1bHRNYXNrKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBmYXVsdG1hc2tfbnMsICUwIiA6IDogInIiKGZhdWx0TWFzaykgOiAibWVtb3J5Iik7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKyNlbmRpZiAvKiAoKF9fQVJNX0FSQ0hfN01fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICovDQorDQorDQorI2lmIChfX0FSTV9BUkNIXzhNX18gPT0gMVUpDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0DQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgTGltaXQgKFBTUExJTSkuDQorICBccmV0dXJuICAgICAgICAgICAgICAgUFNQTElNIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9QU1BMSU0odm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgcHNwbGltIiAgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkgJiYgKF9fQVJNX0FSQ0hfUFJPRklMRSA9PSAnTScpICAgICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIHByZWRlZmluZWQgbWFjcm8gZm9yIG1haW5saW5lICovDQorLyoqDQorICBcYnJpZWYgICBHZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0IChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbm9uLXNlY3VyZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgTGltaXQgKFBTUExJTSkgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccmV0dXJuICAgICAgICAgICAgICAgUFNQTElNIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9QU1BMSU1fTlModm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgcHNwbGltX25zIiAgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdA0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCAoUFNQTElNKS4NCisgIFxwYXJhbSBbaW5dICAgIFByb2NTdGFja1B0ckxpbWl0ICBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgTGltaXQgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BTUExJTSh1aW50MzJfdCBQcm9jU3RhY2tQdHJMaW1pdCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgcHNwbGltLCAlMCIgOiA6ICJyIihQcm9jU3RhY2tQdHJMaW1pdCkpOw0KK30NCisNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpICYmIChfX0FSTV9BUkNIX1BST0ZJTEUgPT0gJ00nKSAgICAgLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBwcmVkZWZpbmVkIG1hY3JvIGZvciBtYWlubGluZSAqLw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlciAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCAoUFNQTElNKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxwYXJhbSBbaW5dICAgIFByb2NTdGFja1B0ckxpbWl0ICBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgTGltaXQgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X1BTUExJTV9OUyh1aW50MzJfdCBQcm9jU3RhY2tQdHJMaW1pdCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgcHNwbGltX25zLCAlMFxuIiA6IDogInIiKFByb2NTdGFja1B0ckxpbWl0KSk7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IE1haW4gU3RhY2sgUG9pbnRlciBMaW1pdA0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTWFpbiBTdGFjayBQb2ludGVyIExpbWl0IChNU1BMSU0pLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIE1TUExJTSBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfTVNQTElNKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIG1zcGxpbSIgOiAiPXIiKHJlc3VsdCkpOw0KKw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkgJiYgKF9fQVJNX0FSQ0hfUFJPRklMRSA9PSAnTScpICAgICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIHByZWRlZmluZWQgbWFjcm8gZm9yIG1haW5saW5lICovDQorLyoqDQorICBcYnJpZWYgICBHZXQgTWFpbiBTdGFjayBQb2ludGVyIExpbWl0IChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbm9uLXNlY3VyZSBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQoTVNQTElNKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBNU1BMSU0gUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X01TUExJTV9OUyh2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBtc3BsaW1fbnMiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQNCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgKE1TUExJTSkuDQorICBccGFyYW0gW2luXSAgICBNYWluU3RhY2tQdHJMaW1pdCAgTWFpbiBTdGFjayBQb2ludGVyIExpbWl0IHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9NU1BMSU0odWludDMyX3QgTWFpblN0YWNrUHRyTGltaXQpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIG1zcGxpbSwgJTAiIDogOiAiciIoTWFpblN0YWNrUHRyTGltaXQpKTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKSAmJiAoX19BUk1fQVJDSF9QUk9GSUxFID09ICdNJykgICAgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgcHJlZGVmaW5lZCBtYWNybyBmb3IgbWFpbmxpbmUgKi8NCisvKioNCisgIFxicmllZiAgIFNldCBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgKE1TUExJTSkgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccGFyYW0gW2luXSAgICBNYWluU3RhY2tQdHJMaW1pdCAgTWFpbiBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9NU1BMSU1fTlModWludDMyX3QgTWFpblN0YWNrUHRyTGltaXQpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIG1zcGxpbV9ucywgJTAiIDogOiAiciIoTWFpblN0YWNrUHRyTGltaXQpKTsNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIChfX0FSTV9BUkNIXzhNX18gPT0gMVUpICovDQorDQorDQorI2lmICgoX19BUk1fQVJDSF83RU1fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIHRoaXMgaXMgb2sgZm9yIGNvcnRleCA+PTQgKi8NCisNCisvKioNCisgIFxicmllZiAgIEdldCBGUFNDUg0KKyAgXGRldGFpbHMgZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3RlciB2YWx1ZQ0KKyAqLw0KKyNkZWZpbmUgX19nZXRfRlBTQ1IgICAgICBfX2J1aWx0aW5fYXJtX2dldF9mcHNjcg0KKyNpZiAwDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9GUFNDUih2b2lkKQ0KK3sNCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQ0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiVk1SUyAlMCwgZnBzY3IiIDogIj1yIihyZXN1bHQpKTsNCisgICAgX19BU00gdm9sYXRpbGUoIiIpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorI2Vsc2UNCisgICAgcmV0dXJuICgwKTsNCisjZW5kaWYNCit9DQorI2VuZGlmDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEZQU0NSIChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbm9uLXNlY3VyZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfRlBTQ1JfTlModm9pZCkNCit7DQorI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVtcHR5IGFzbSBzdGF0ZW1lbnQgd29ya3MgYXMgYSBzY2hlZHVsaW5nIGJhcnJpZXIgKi8NCisgICAgX19BU00gdm9sYXRpbGUoIlZNUlMgJTAsIGZwc2NyX25zIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIF9fQVNNIHZvbGF0aWxlKCIiKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KKyNlbHNlDQorICAgIHJldHVybiAoMCk7DQorI2VuZGlmDQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IEZQU0NSDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBmcHNjciAgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgdmFsdWUgdG8gc2V0DQorICovDQorI2RlZmluZSBfX3NldF9GUFNDUiAgICAgIF9fYnVpbHRpbl9hcm1fc2V0X2Zwc2NyDQorI2lmIDANCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfRlBTQ1IodWludDMyX3QgZnBzY3IpDQorew0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpDQorICAgIF9fQVNNIHZvbGF0aWxlKCIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiVk1TUiBmcHNjciwgJTAiIDogOiAiciIoZnBzY3IpIDogInZmcGNjIik7DQorICAgIF9fQVNNIHZvbGF0aWxlKCIiKTsNCisjZW5kaWYNCit9DQorI2VuZGlmDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IEZQU0NSIChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccGFyYW0gW2luXSAgICBmcHNjciAgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X0ZQU0NSX05TKHVpbnQzMl90IGZwc2NyKQ0KK3sNCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQ0KKyAgICBfX0FTTSB2b2xhdGlsZSgiIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVtcHR5IGFzbSBzdGF0ZW1lbnQgd29ya3MgYXMgYSBzY2hlZHVsaW5nIGJhcnJpZXIgKi8NCisgICAgX19BU00gdm9sYXRpbGUoIlZNU1IgZnBzY3JfbnMsICUwIiA6IDogInIiKGZwc2NyKSA6ICJ2ZnBjYyIpOw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiIik7DQorI2VuZGlmDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiAoKF9fQVJNX0FSQ0hfN0VNX18gPT0gMVUpIHx8IChfX0FSTV9BUkNIXzhNX18gPT0gMVUpKSAqLw0KKw0KKw0KKw0KKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zICovDQorDQorDQorLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovDQorLyoqIFxkZWZncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlIENNU0lTIENvcmUgSW5zdHJ1Y3Rpb24gSW50ZXJmYWNlDQorICBBY2Nlc3MgdG8gZGVkaWNhdGVkIGluc3RydWN0aW9ucw0KKyAgQHsNCisqLw0KKw0KKy8qIERlZmluZSBtYWNyb3MgZm9yIHBvcnRpbmcgdG8gYm90aCB0aHVtYjEgYW5kIHRodW1iMi4NCisgKiBGb3IgdGh1bWIxLCB1c2UgbG93IHJlZ2lzdGVyIChyMC1yNyksIHNwZWNpZmllZCBieSBjb25zdHJhaW50ICJsIg0KKyAqIE90aGVyd2lzZSwgdXNlIGdlbmVyYWwgcmVnaXN0ZXJzLCBzcGVjaWZpZWQgYnkgY29uc3RyYWludCAiciIgKi8NCisjaWYgZGVmaW5lZCAoX190aHVtYl9fKSAmJiAhZGVmaW5lZCAoX190aHVtYjJfXykNCisjZGVmaW5lIF9fQ01TSVNfR0NDX09VVF9SRUcocikgIj1sIiAocikNCisjZGVmaW5lIF9fQ01TSVNfR0NDX1VTRV9SRUcocikgImwiIChyKQ0KKyNlbHNlDQorI2RlZmluZSBfX0NNU0lTX0dDQ19PVVRfUkVHKHIpICI9ciIgKHIpDQorI2RlZmluZSBfX0NNU0lTX0dDQ19VU0VfUkVHKHIpICJyIiAocikNCisjZW5kaWYNCisNCisvKioNCisgIFxicmllZiAgIE5vIE9wZXJhdGlvbg0KKyAgXGRldGFpbHMgTm8gT3BlcmF0aW9uIGRvZXMgbm90aGluZy4gVGhpcyBpbnN0cnVjdGlvbiBjYW4gYmUgdXNlZCBmb3IgY29kZSBhbGlnbm1lbnQgcHVycG9zZXMuDQorICovDQorI2RlZmluZSBfX05PUCAgICAgICAgICBfX2J1aWx0aW5fYXJtX25vcA0KKw0KKy8qKg0KKyAgXGJyaWVmICAgV2FpdCBGb3IgSW50ZXJydXB0DQorICBcZGV0YWlscyBXYWl0IEZvciBJbnRlcnJ1cHQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgc3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIG9uZSBvZiBhIG51bWJlciBvZiBldmVudHMgb2NjdXJzLg0KKyAqLw0KKyNkZWZpbmUgX19XRkkgICAgICAgICAgX19idWlsdGluX2FybV93ZmkNCisNCisNCisvKioNCisgIFxicmllZiAgIFdhaXQgRm9yIEV2ZW50DQorICBcZGV0YWlscyBXYWl0IEZvciBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24gdGhhdCBwZXJtaXRzIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXINCisgICAgICAgICAgIGEgbG93LXBvd2VyIHN0YXRlIHVudGlsIG9uZSBvZiBhIG51bWJlciBvZiBldmVudHMgb2NjdXJzLg0KKyAqLw0KKyNkZWZpbmUgX19XRkUgICAgICAgICAgX19idWlsdGluX2FybV93ZmUNCisNCisNCisvKioNCisgIFxicmllZiAgIFNlbmQgRXZlbnQNCisgIFxkZXRhaWxzIFNlbmQgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uLiBJdCBjYXVzZXMgYW4gZXZlbnQgdG8gYmUgc2lnbmFsZWQgdG8gdGhlIENQVS4NCisgKi8NCisjZGVmaW5lIF9fU0VWICAgICAgICAgIF9fYnVpbHRpbl9hcm1fc2V2DQorDQorDQorLyoqDQorICBcYnJpZWYgICBJbnN0cnVjdGlvbiBTeW5jaHJvbml6YXRpb24gQmFycmllcg0KKyAgXGRldGFpbHMgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIEJhcnJpZXIgZmx1c2hlcyB0aGUgcGlwZWxpbmUgaW4gdGhlIHByb2Nlc3NvciwNCisgICAgICAgICAgIHNvIHRoYXQgYWxsIGluc3RydWN0aW9ucyBmb2xsb3dpbmcgdGhlIElTQiBhcmUgZmV0Y2hlZCBmcm9tIGNhY2hlIG9yIG1lbW9yeSwNCisgICAgICAgICAgIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWQuDQorICovDQorI2RlZmluZSBfX0lTQigpICAgICAgICBfX2J1aWx0aW5fYXJtX2lzYigweEYpOw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRGF0YSBTeW5jaHJvbml6YXRpb24gQmFycmllcg0KKyAgXGRldGFpbHMgQWN0cyBhcyBhIHNwZWNpYWwga2luZCBvZiBEYXRhIE1lbW9yeSBCYXJyaWVyLg0KKyAgICAgICAgICAgSXQgY29tcGxldGVzIHdoZW4gYWxsIGV4cGxpY2l0IG1lbW9yeSBhY2Nlc3NlcyBiZWZvcmUgdGhpcyBpbnN0cnVjdGlvbiBjb21wbGV0ZS4NCisgKi8NCisjZGVmaW5lIF9fRFNCKCkgICAgICAgIF9fYnVpbHRpbl9hcm1fZHNiKDB4Rik7DQorDQorDQorLyoqDQorICBcYnJpZWYgICBEYXRhIE1lbW9yeSBCYXJyaWVyDQorICBcZGV0YWlscyBFbnN1cmVzIHRoZSBhcHBhcmVudCBvcmRlciBvZiB0aGUgZXhwbGljaXQgbWVtb3J5IG9wZXJhdGlvbnMgYmVmb3JlDQorICAgICAgICAgICBhbmQgYWZ0ZXIgdGhlIGluc3RydWN0aW9uLCB3aXRob3V0IGVuc3VyaW5nIHRoZWlyIGNvbXBsZXRpb24uDQorICovDQorI2RlZmluZSBfX0RNQigpICAgICAgICBfX2J1aWx0aW5fYXJtX2RtYigweEYpOw0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgzMiBiaXQpDQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiBpbnRlZ2VyIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQ0KKyAqLw0KKyNkZWZpbmUgX19SRVYgICAgICAgICAgX19idWlsdGluX2Jzd2FwMzINCisNCisNCisvKioNCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciAoMTYgYml0KQ0KKyAgXGRldGFpbHMgUmV2ZXJzZXMgdGhlIGJ5dGUgb3JkZXIgaW4gdHdvIHVuc2lnbmVkIHNob3J0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlDQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUNCisgKi8NCisjZGVmaW5lIF9fUkVWMTYgICAgICAgICAgX19idWlsdGluX2Jzd2FwMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIF9fYnVpbHRpbl9ic3dhcDE2IGNvdWxkIGJlIHVzZWQgKi8NCisjaWYgMA0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19SRVYxNih1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInJldjE2ICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHKHJlc3VsdCkgOiBfX0NNU0lTX0dDQ19VU0VfUkVHKHZhbHVlKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgaW4gc2lnbmVkIHNob3J0IHZhbHVlDQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiBhIHNpZ25lZCBzaG9ydCB2YWx1ZSB3aXRoIHNpZ24gZXh0ZW5zaW9uIHRvIGludGVnZXIuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlDQorICovDQorLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBpZiBfX2J1aWx0aW5fYnN3YXAxNiBjb3VsZCBiZSB1c2VkICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSBpbnQzMl90IF9fUkVWU0goaW50MzJfdCB2YWx1ZSkNCit7DQorICAgIGludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgicmV2c2ggJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcodmFsdWUpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFJvdGF0ZSBSaWdodCBpbiB1bnNpZ25lZCB2YWx1ZSAoMzIgYml0KQ0KKyAgXGRldGFpbHMgUm90YXRlIFJpZ2h0IChpbW1lZGlhdGUpIHByb3ZpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciByb3RhdGVkIGJ5IGEgdmFyaWFibGUgbnVtYmVyIG9mIGJpdHMuDQorICBccGFyYW0gW2luXSAgICBvcDEgIFZhbHVlIHRvIHJvdGF0ZQ0KKyAgXHBhcmFtIFtpbl0gICAgb3AyICBOdW1iZXIgb2YgQml0cyB0byByb3RhdGUNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSb3RhdGVkIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JPUih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHJldHVybiAob3AxID4+IG9wMikgfCAob3AxIDw8ICgzMlUgLSBvcDIpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBCcmVha3BvaW50DQorICBcZGV0YWlscyBDYXVzZXMgdGhlIHByb2Nlc3NvciB0byBlbnRlciBEZWJ1ZyBzdGF0ZS4NCisgICAgICAgICAgICBEZWJ1ZyB0b29scyBjYW4gdXNlIHRoaXMgdG8gaW52ZXN0aWdhdGUgc3lzdGVtIHN0YXRlIHdoZW4gdGhlIGluc3RydWN0aW9uIGF0IGEgcGFydGljdWxhciBhZGRyZXNzIGlzIHJlYWNoZWQuDQorICAgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBpcyBpZ25vcmVkIGJ5IHRoZSBwcm9jZXNzb3IuDQorICAgICAgICAgICAgICAgICAgIElmIHJlcXVpcmVkLCBhIGRlYnVnZ2VyIGNhbiB1c2UgaXQgdG8gc3RvcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnJlYWtwb2ludC4NCisgKi8NCisjZGVmaW5lIF9fQktQVCh2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fQVNNIHZvbGF0aWxlICgiYmtwdCAiI3ZhbHVlKQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUmV2ZXJzZSBiaXQgb3JkZXIgb2YgdmFsdWUNCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBiaXQgb3JkZXIgb2YgdGhlIGdpdmVuIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQ0KKyAqLw0KKy8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgaWYgX19idWlsdGluX2FybV9yYml0IGlzIHN1cHBvcnRlZCAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19SQklUKHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyNpZiAoKF9fQVJNX0FSQ0hfN01fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfN0VNX18gPT0gMVUpIHx8IChfX0FSTV9BUkNIXzhNX18gPT0gMVUpKSAgLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBpZiB0aGlzIGlzIG9rIGZvciBjb3J0ZXggPj0zICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJyYml0ICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiciIodmFsdWUpKTsNCisjZWxzZQ0KKyAgICBpbnQzMl90IHMgPSA0IC8qc2l6ZW9mKHYpKi8gKiA4IC0gMTsgLyogZXh0cmEgc2hpZnQgbmVlZGVkIGF0IGVuZCAqLw0KKw0KKyAgICByZXN1bHQgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgLyogciB3aWxsIGJlIHJldmVyc2VkIGJpdHMgb2YgdjsgZmlyc3QgZ2V0IExTQiBvZiB2ICovDQorDQorICAgIGZvciAodmFsdWUgPj49IDFVOyB2YWx1ZTsgdmFsdWUgPj49IDFVKQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPDw9IDFVOw0KKyAgICAgICAgcmVzdWx0IHw9IHZhbHVlICYgMVU7DQorICAgICAgICBzLS07DQorICAgIH0NCisNCisgICAgcmVzdWx0IDw8PSBzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNoaWZ0IHdoZW4gdidzIGhpZ2hlc3QgYml0cyBhcmUgemVybyAqLw0KKyNlbmRpZg0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgQ291bnQgbGVhZGluZyB6ZXJvcw0KKyAgXGRldGFpbHMgQ291bnRzIHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBhIGRhdGEgdmFsdWUuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGNvdW50IHRoZSBsZWFkaW5nIHplcm9zDQorICBccmV0dXJuICAgICAgICAgICAgIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIGluIHZhbHVlDQorICovDQorI2RlZmluZSBfX0NMWiAgICAgICAgICAgICBfX2J1aWx0aW5fY2x6DQorDQorDQorI2lmICgoX19BUk1fQVJDSF83TV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF83RU1fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIHRoaXMgaXMgb2sgZm9yIGNvcnRleCA+PTMgKi8NCisNCisvKioNCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDggYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikNCisgKi8NCisjZGVmaW5lIF9fTERSRVhCICAgICAgICAodWludDhfdClfX2J1aWx0aW5fYXJtX2xkcmV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MTZfdCBhdCAoKnB0cikNCisgKi8NCisjZGVmaW5lIF9fTERSRVhIICAgICAgICAodWludDE2X3QpX19idWlsdGluX2FybV9sZHJleA0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTERSIEV4Y2x1c2l2ZSAoMzIgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpDQorICovDQorI2RlZmluZSBfX0xEUkVYVyAgICAgICAgKHVpbnQzMl90KV9fYnVpbHRpbl9hcm1fbGRyZXgNCisNCisNCisvKioNCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDggYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkDQorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZA0KKyAqLw0KKyNkZWZpbmUgX19TVFJFWEIgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX3N0cmV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkDQorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZA0KKyAqLw0KKyNkZWZpbmUgX19TVFJFWEggICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX3N0cmV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkDQorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZA0KKyAqLw0KKyNkZWZpbmUgX19TVFJFWFcgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX3N0cmV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZW1vdmUgdGhlIGV4Y2x1c2l2ZSBsb2NrDQorICBcZGV0YWlscyBSZW1vdmVzIHRoZSBleGNsdXNpdmUgbG9jayB3aGljaCBpcyBjcmVhdGVkIGJ5IExEUkVYLg0KKyAqLw0KKyNkZWZpbmUgX19DTFJFWCAgICAgICAgICAgICBfX2J1aWx0aW5fYXJtX2NscmV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTaWduZWQgU2F0dXJhdGUNCisgIFxkZXRhaWxzIFNhdHVyYXRlcyBhIHNpZ25lZCB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gYmUgc2F0dXJhdGVkDQorICBccGFyYW0gW2luXSAgICBzYXQgIEJpdCBwb3NpdGlvbiB0byBzYXR1cmF0ZSB0byAoMS4uMzIpDQorICBccmV0dXJuICAgICAgICAgICAgIFNhdHVyYXRlZCB2YWx1ZQ0KKyAqLw0KKy8qI2RlZmluZSBfX1NTQVQgICAgICAgICAgICAgX19idWlsdGluX2FybV9zc2F0Ki8NCisjZGVmaW5lIF9fU1NBVChBUkcxLEFSRzIpIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgaW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcDQorICBfX0FTTSAoInNzYXQgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwNCisgIF9fUkVTOyBcDQorIH0pDQorDQorDQorLyoqDQorICBcYnJpZWYgICBVbnNpZ25lZCBTYXR1cmF0ZQ0KKyAgXGRldGFpbHMgU2F0dXJhdGVzIGFuIHVuc2lnbmVkIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBiZSBzYXR1cmF0ZWQNCisgIFxwYXJhbSBbaW5dICAgIHNhdCAgQml0IHBvc2l0aW9uIHRvIHNhdHVyYXRlIHRvICgwLi4zMSkNCisgIFxyZXR1cm4gICAgICAgICAgICAgU2F0dXJhdGVkIHZhbHVlDQorICovDQorI2RlZmluZSBfX1VTQVQgICAgICAgICAgICAgX19idWlsdGluX2FybV91c2F0DQorI2lmIDANCisjZGVmaW5lIF9fVVNBVChBUkcxLEFSRzIpIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXA0KKyAgX19BU00gKCJ1c2F0ICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJJIiAoQVJHMiksICJyIiAoX19BUkcxKSApOyBcDQorICBfX1JFUzsgXA0KKyB9KQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUm90YXRlIFJpZ2h0IHdpdGggRXh0ZW5kICgzMiBiaXQpDQorICBcZGV0YWlscyBNb3ZlcyBlYWNoIGJpdCBvZiBhIGJpdHN0cmluZyByaWdodCBieSBvbmUgYml0Lg0KKyAgICAgICAgICAgVGhlIGNhcnJ5IGlucHV0IGlzIHNoaWZ0ZWQgaW4gYXQgdGhlIGxlZnQgZW5kIG9mIHRoZSBiaXRzdHJpbmcuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcm90YXRlDQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19SUlgodWludDMyX3QgdmFsdWUpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJycnggJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcodmFsdWUpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICg4IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBfX0xEUkJUKHZvbGF0aWxlIHVpbnQ4X3QgKnB0cikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoImxkcmJ0ICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiUSIoKnB0cikpOw0KKyAgICByZXR1cm4gKCh1aW50OF90KSByZXN1bHQpOyAgICAvKiBBZGQgZXhwbGljaXQgdHlwZSBjYXN0IGhlcmUgKi8NCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoMTYgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDE2X3QgX19MRFJIVCh2b2xhdGlsZSB1aW50MTZfdCAqcHRyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRyaHQgJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJRIigqcHRyKSk7DQorICAgIHJldHVybiAoKHVpbnQxNl90KSByZXN1bHQpOyAgICAvKiBBZGQgZXhwbGljaXQgdHlwZSBjYXN0IGhlcmUgKi8NCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoMzIgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQzMl90IGF0ICgqcHRyKQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19MRFJUKHZvbGF0aWxlIHVpbnQzMl90ICpwdHIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJsZHJ0ICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiUSIoKnB0cikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDggYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RSQlQodWludDhfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDhfdCAqcHRyKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoInN0cmJ0ICUxLCAlMCIgOiAiPVEiKCpwdHIpIDogInIiKCh1aW50MzJfdCl2YWx1ZSkpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RSSFQodWludDE2X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQxNl90ICpwdHIpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3RyaHQgJTEsICUwIiA6ICI9USIoKnB0cikgOiAiciIoKHVpbnQzMl90KXZhbHVlKSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDMyIGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJUKHVpbnQzMl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MzJfdCAqcHRyKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoInN0cnQgJTEsICUwIiA6ICI9USIoKnB0cikgOiAiciIodmFsdWUpKTsNCit9DQorDQorI2VuZGlmIC8qICgoX19BUk1fQVJDSF83TV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF83RU1fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICovDQorDQorDQorI2lmIChfX0FSTV9BUkNIXzhNX18gPT0gMVUpDQorDQorLyoqDQorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgKDggYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBMREFCIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgX19MREFCKHZvbGF0aWxlIHVpbnQ4X3QgKnB0cikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoImxkYWIgJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJRIigqcHRyKSk7DQorICAgIHJldHVybiAoKHVpbnQ4X3QpIHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTG9hZC1BY3F1aXJlICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIExEQUggaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MTZfdCBhdCAoKnB0cikNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IF9fTERBSCh2b2xhdGlsZSB1aW50MTZfdCAqcHRyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRhaCAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogIlEiKCpwdHIpKTsNCisgICAgcmV0dXJuICgodWludDE2X3QpIHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTG9hZC1BY3F1aXJlICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIExEQSBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQzMl90IGF0ICgqcHRyKQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19MREEodm9sYXRpbGUgdWludDMyX3QgKnB0cikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoImxkYSAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogIlEiKCpwdHIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFN0b3JlLVJlbGVhc2UgKDggYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBTVExCIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVExCKHVpbnQ4X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQ4X3QgKnB0cikNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJzdGxiICUxLCAlMCIgOiAiPVEiKCpwdHIpIDogInIiKCh1aW50MzJfdCl2YWx1ZSkpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFN0b3JlLVJlbGVhc2UgKDE2IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgU1RMSCBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NUTEgodWludDE2X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQxNl90ICpwdHIpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3RsaCAlMSwgJTAiIDogIj1RIigqcHRyKSA6ICJyIigodWludDMyX3QpdmFsdWUpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTdG9yZS1SZWxlYXNlICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFNUTCBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NUTCh1aW50MzJfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDMyX3QgKnB0cikNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJzdGwgJTEsICUwIiA6ICI9USIoKnB0cikgOiAiciIoKHVpbnQzMl90KXZhbHVlKSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTG9hZC1BY3F1aXJlIEV4Y2x1c2l2ZSAoOCBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIExEQUIgZXhjbHVzaXZlIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikNCisgKi8NCisjZGVmaW5lICAgICBfX0xEQUVYQiAgICAgICAgICAgICAgICAgKHVpbnQ4X3QpX19idWlsdGluX2FybV9sZGFleA0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTG9hZC1BY3F1aXJlIEV4Y2x1c2l2ZSAoMTYgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBMREFIIGV4Y2x1c2l2ZSBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQ0KKyAqLw0KKyNkZWZpbmUgICAgIF9fTERBRVhIICAgICAgICAgICAgICAgICAodWludDE2X3QpX19idWlsdGluX2FybV9sZGFleA0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTG9hZC1BY3F1aXJlIEV4Y2x1c2l2ZSAoMzIgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBMREEgZXhjbHVzaXZlIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpDQorICovDQorI2RlZmluZSAgICAgX19MREFFWCAgICAgICAgICAgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX2xkYWV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTdG9yZS1SZWxlYXNlIEV4Y2x1c2l2ZSAoOCBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFNUTEIgZXhjbHVzaXZlIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkDQorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZA0KKyAqLw0KKyNkZWZpbmUgICAgIF9fU1RMRVhCICAgICAgICAgICAgICAgICAodWludDMyX3QpX19idWlsdGluX2FybV9zdGxleA0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU3RvcmUtUmVsZWFzZSBFeGNsdXNpdmUgKDE2IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgU1RMSCBleGNsdXNpdmUgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkDQorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZA0KKyAqLw0KKyNkZWZpbmUgICAgIF9fU1RMRVhIICAgICAgICAgICAgICAgICAodWludDMyX3QpX19idWlsdGluX2FybV9zdGxleA0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU3RvcmUtUmVsZWFzZSBFeGNsdXNpdmUgKDMyIGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgU1RMIGV4Y2x1c2l2ZSBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQNCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkDQorICovDQorI2RlZmluZSAgICAgX19TVExFWCAgICAgICAgICAgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX3N0bGV4DQorDQorI2VuZGlmIC8qIChfX0FSTV9BUkNIXzhNX18gPT0gMVUpICovDQorDQorLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlICovDQorDQorDQorLyogIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29tcGlsZXIgc3BlY2lmaWMgSW50cmluc2ljcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovDQorLyoqIFxkZWZncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgQ01TSVMgU0lNRCBJbnRyaW5zaWNzDQorICBBY2Nlc3MgdG8gZGVkaWNhdGVkIFNJTUQgaW5zdHJ1Y3Rpb25zDQorICBAew0KKyovDQorDQorI2lmIChfX0FSTV9GRUFUVVJFX0RTUCA9PSAxVSkgICAgICAgIC8qIFRvRG86ICBBUk1DQ19WNjogVGhpcyBzaG91bGQgYmUgQVJDSCA+PSBBUk12Ny1NICsgU0lNRCAqLw0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNoYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWFkZDggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cWFkZDggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSEFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1aGFkZDggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNzdWI4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUVNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNoc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidXN1YjggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUVNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cXN1YjggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSFNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1aHN1YjggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSEFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2hhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cWFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVoYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSFNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2hzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cXN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVoc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2FzeCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxYXN4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzaGFzeCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1YXN4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cWFzeCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWhhc3ggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3NheCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxc2F4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzaHNheCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1c2F4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cXNheCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWhzYXggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU0FEOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVzYWQ4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNBREE4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1c2FkYTggJTAsICUxLCAlMiwgJTMiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpLCAiciIob3AzKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorI2RlZmluZSBfX1NTQVQxNihBUkcxLEFSRzIpIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXA0KKyAgX19BU00gKCJzc2F0MTYgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwNCisgIF9fUkVTOyBcDQorIH0pDQorDQorI2RlZmluZSBfX1VTQVQxNihBUkcxLEFSRzIpIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXA0KKyAgX19BU00gKCJ1c2F0MTYgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwNCisgIF9fUkVTOyBcDQorIH0pDQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VYVEIxNih1aW50MzJfdCBvcDEpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1eHRiMTYgJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVhUQUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInV4dGFiMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TWFRCMTYodWludDMyX3Qgb3AxKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3h0YjE2ICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NYVEFCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzeHRhYjE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VQUQodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbXVhZCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVUFEWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtdWFkeCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTEFEKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxhZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMiksICJyIihvcDMpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MQURYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxhZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpLCAiciIob3AzKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTEFMRCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQ0KK3sNCisgICAgdW5pb24gbGxyZWdfdQ0KKyAgICB7DQorICAgICAgICB1aW50MzJfdCB3MzJbMl07DQorICAgICAgICB1aW50NjRfdCB3NjQ7DQorICAgIH0gbGxyOw0KKyAgICBsbHIudzY0ID0gYWNjOw0KKw0KKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sYWxkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIobGxyLnczMlswXSksICI9ciIobGxyLnczMlsxXSk6ICJyIihvcDEpLCAiciIob3AyKSAsICIwIihsbHIudzMyWzBdKSwNCisgICAgICAgICAgICAgICAgICAgIjEiKGxsci53MzJbMV0pKTsNCisjZWxzZSAgICAgICAgICAgICAgIC8qIEJpZyBlbmRpYW4gKi8NCisgICAgX19BU00gdm9sYXRpbGUoInNtbGFsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKGxsci53MzJbMV0pLCAiPXIiKGxsci53MzJbMF0pOiAiciIob3AxKSwgInIiKG9wMikgLCAiMCIobGxyLnczMlsxXSksDQorICAgICAgICAgICAgICAgICAgICIxIihsbHIudzMyWzBdKSk7DQorI2VuZGlmDQorDQorICAgIHJldHVybiAobGxyLnc2NCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDY0X3QgX19TTUxBTERYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpDQorew0KKyAgICB1bmlvbiBsbHJlZ191DQorICAgIHsNCisgICAgICAgIHVpbnQzMl90IHczMlsyXTsNCisgICAgICAgIHVpbnQ2NF90IHc2NDsNCisgICAgfSBsbHI7DQorICAgIGxsci53NjQgPSBhY2M7DQorDQorI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxhbGR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIobGxyLnczMlswXSksICI9ciIobGxyLnczMlsxXSk6ICJyIihvcDEpLCAiciIob3AyKSAsICIwIihsbHIudzMyWzBdKSwNCisgICAgICAgICAgICAgICAgICAgIjEiKGxsci53MzJbMV0pKTsNCisjZWxzZSAgICAgICAgICAgICAgIC8qIEJpZyBlbmRpYW4gKi8NCisgICAgX19BU00gdm9sYXRpbGUoInNtbGFsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzFdKSwgIj1yIihsbHIudzMyWzBdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMV0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlswXSkpOw0KKyNlbmRpZg0KKw0KKyAgICByZXR1cm4gKGxsci53NjQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VU0QodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbXVzZCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVVNEWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtdXNkeCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTFNEKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxzZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMiksICJyIihvcDMpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MU0RYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxzZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpLCAiciIob3AzKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTFNMRCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQ0KK3sNCisgICAgdW5pb24gbGxyZWdfdQ0KKyAgICB7DQorICAgICAgICB1aW50MzJfdCB3MzJbMl07DQorICAgICAgICB1aW50NjRfdCB3NjQ7DQorICAgIH0gbGxyOw0KKyAgICBsbHIudzY0ID0gYWNjOw0KKw0KKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sc2xkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIobGxyLnczMlswXSksICI9ciIobGxyLnczMlsxXSk6ICJyIihvcDEpLCAiciIob3AyKSAsICIwIihsbHIudzMyWzBdKSwNCisgICAgICAgICAgICAgICAgICAgIjEiKGxsci53MzJbMV0pKTsNCisjZWxzZSAgICAgICAgICAgICAgIC8qIEJpZyBlbmRpYW4gKi8NCisgICAgX19BU00gdm9sYXRpbGUoInNtbHNsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKGxsci53MzJbMV0pLCAiPXIiKGxsci53MzJbMF0pOiAiciIob3AxKSwgInIiKG9wMikgLCAiMCIobGxyLnczMlsxXSksDQorICAgICAgICAgICAgICAgICAgICIxIihsbHIudzMyWzBdKSk7DQorI2VuZGlmDQorDQorICAgIHJldHVybiAobGxyLnc2NCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDY0X3QgX19TTUxTTERYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpDQorew0KKyAgICB1bmlvbiBsbHJlZ191DQorICAgIHsNCisgICAgICAgIHVpbnQzMl90IHczMlsyXTsNCisgICAgICAgIHVpbnQ2NF90IHc2NDsNCisgICAgfSBsbHI7DQorICAgIGxsci53NjQgPSBhY2M7DQorDQorI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxzbGR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIobGxyLnczMlswXSksICI9ciIobGxyLnczMlsxXSk6ICJyIihvcDEpLCAiciIob3AyKSAsICIwIihsbHIudzMyWzBdKSwNCisgICAgICAgICAgICAgICAgICAgIjEiKGxsci53MzJbMV0pKTsNCisjZWxzZSAgICAgICAgICAgICAgIC8qIEJpZyBlbmRpYW4gKi8NCisgICAgX19BU00gdm9sYXRpbGUoInNtbHNsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzFdKSwgIj1yIihsbHIudzMyWzBdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMV0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlswXSkpOw0KKyNlbmRpZg0KKw0KKyAgICByZXR1cm4gKGxsci53NjQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0VMKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2VsICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FICBpbnQzMl90IF9fUUFERChpbnQzMl90IG9wMSwgIGludDMyX3Qgb3AyKQ0KK3sNCisgICAgaW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxYWRkICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FICBpbnQzMl90IF9fUVNVQihpbnQzMl90IG9wMSwgIGludDMyX3Qgb3AyKQ0KK3sNCisgICAgaW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxc3ViICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisjZGVmaW5lIF9fUEtIQlQoQVJHMSxBUkcyLEFSRzMpIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKSwgX19BUkcyID0gKEFSRzIpOyBcDQorICBfX0FTTSAoInBraGJ0ICUwLCAlMSwgJTIsIGxzbCAlMyIgOiAiPXIiIChfX1JFUykgOiAgInIiIChfX0FSRzEpLCAiciIgKF9fQVJHMiksICJJIiAoQVJHMykgICk7IFwNCisgIF9fUkVTOyBcDQorIH0pDQorDQorI2RlZmluZSBfX1BLSFRCKEFSRzEsQVJHMixBUkczKSBcDQorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSksIF9fQVJHMiA9IChBUkcyKTsgXA0KKyAgaWYgKEFSRzMgPT0gMCkgXA0KKyAgICBfX0FTTSAoInBraHRiICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJyIiAoX19BUkcxKSwgInIiIChfX0FSRzIpICApOyBcDQorICBlbHNlIFwNCisgICAgX19BU00gKCJwa2h0YiAlMCwgJTEsICUyLCBhc3IgJTMiIDogIj1yIiAoX19SRVMpIDogICJyIiAoX19BUkcxKSwgInIiIChfX0FSRzIpLCAiSSIgKEFSRzMpICApOyBcDQorICBfX1JFUzsgXA0KKyB9KQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTU1MQShpbnQzMl90IG9wMSwgaW50MzJfdCBvcDIsIGludDMyX3Qgb3AzKQ0KK3sNCisgICAgaW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbW1sYSAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKHJlc3VsdCk6ICJyIihvcDEpLCAiciIob3AyKSwgInIiKG9wMykpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKyNlbmRpZiAvKiAoX19BUk1fRkVBVFVSRV9EU1AgPT0gMVUpICovDQorLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0lNRF9pbnRyaW5zaWNzICovDQorDQorDQorI2VuZGlmIC8qIF9fQ01TSVNfQVJNQ0NfVjZfSCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY21zaXNfZ2NjLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2Ntc2lzX2djYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzhmMDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2Ntc2lzX2djYy5oCkBAIC0wLDAgKzEsMTM4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KKyAqIEBmaWxlICAgICBjbXNpc19nY2MuaA0KKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTSBDb3JlIEZ1bmN0aW9uL0luc3RydWN0aW9uIEhlYWRlciBGaWxlDQorICogQHZlcnNpb24gIFY0LjMwDQorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQNCisNCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkDQorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAgICoNCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQ0KKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0KKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0KKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElODQorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQ0KKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorI2lmbmRlZiBfX0NNU0lTX0dDQ19IDQorI2RlZmluZSBfX0NNU0lTX0dDQ19IDQorDQorLyogaWdub3JlIHNvbWUgR0NDIHdhcm5pbmdzICovDQorI2lmIGRlZmluZWQgKCBfX0dOVUNfXyApDQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoDQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3NpZ24tY29udmVyc2lvbiINCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XY29udmVyc2lvbiINCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXBhcmFtZXRlciINCisjZW5kaWYNCisNCisNCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgRnVuY3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8NCisvKiogXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UNCisgICAgXGRlZmdyb3VwIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zIENNU0lTIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucw0KKyAgQHsNCisgKi8NCisNCisvKioNCisgIFxicmllZiAgIEVuYWJsZSBJUlEgSW50ZXJydXB0cw0KKyAgXGRldGFpbHMgRW5hYmxlcyBJUlEgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgSS1iaXQgaW4gdGhlIENQU1IuDQorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2VuYWJsZV9pcnEodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJjcHNpZSBpIiA6IDogOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRGlzYWJsZSBJUlEgSW50ZXJydXB0cw0KKyAgXGRldGFpbHMgRGlzYWJsZXMgSVJRIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgSS1iaXQgaW4gdGhlIENQU1IuDQorICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2Rpc2FibGVfaXJxKHZvaWQpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiY3BzaWQgaSIgOiA6IDogIm1lbW9yeSIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBDb250cm9sIFJlZ2lzdGVyDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBDb250cm9sIFJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0NPTlRST0wodm9pZCkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgY29udHJvbCIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IENvbnRyb2wgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIENvbnRyb2wgUmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBjb250cm9sICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9DT05UUk9MKHVpbnQzMl90IGNvbnRyb2wpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIGNvbnRyb2wsICUwIiA6IDogInIiKGNvbnRyb2wpIDogIm1lbW9yeSIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBJUFNSIFJlZ2lzdGVyDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBJUFNSIFJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIElQU1IgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0lQU1Iodm9pZCkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgaXBzciIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEFQU1IgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIEFQU1IgUmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgQVBTUiBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfQVBTUih2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBhcHNyIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgeFBTUiBSZWdpc3Rlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgeFBTUiBSZWdpc3Rlci4NCisNCisgICAgXHJldHVybiAgICAgICAgICAgICAgIHhQU1IgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X3hQU1Iodm9pZCkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgeHBzciIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFBTUCBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfUFNQKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIHBzcFxuIiAgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKS4NCisgIFxwYXJhbSBbaW5dICAgIHRvcE9mUHJvY1N0YWNrICBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BTUCh1aW50MzJfdCB0b3BPZlByb2NTdGFjaykNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgcHNwLCAlMFxuIiA6IDogInIiKHRvcE9mUHJvY1N0YWNrKSA6ICJzcCIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBNYWluIFN0YWNrIFBvaW50ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBNU1AgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X01TUCh2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBtc3BcbiIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IE1haW4gU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKS4NCisNCisgICAgXHBhcmFtIFtpbl0gICAgdG9wT2ZNYWluU3RhY2sgIE1haW4gU3RhY2sgUG9pbnRlciB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfTVNQKHVpbnQzMl90IHRvcE9mTWFpblN0YWNrKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBtc3AsICUwXG4iIDogOiAiciIodG9wT2ZNYWluU3RhY2spIDogInNwIik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IFByaW9yaXR5IE1hc2sNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHByaW9yaXR5IG1hc2sgYml0IGZyb20gdGhlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgUHJpb3JpdHkgTWFzayB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfUFJJTUFTSyh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBwcmltYXNrIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgTWFzaw0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBwcmlNYXNrICBQcmlvcml0eSBNYXNrDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BSSU1BU0sodWludDMyX3QgcHJpTWFzaykNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgcHJpbWFzaywgJTAiIDogOiAiciIocHJpTWFzaykgOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkNCisNCisvKioNCisgIFxicmllZiAgIEVuYWJsZSBGSVENCisgIFxkZXRhaWxzIEVuYWJsZXMgRklRIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIEYtYml0IGluIHRoZSBDUFNSLg0KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19lbmFibGVfZmF1bHRfaXJxKHZvaWQpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiY3BzaWUgZiIgOiA6IDogIm1lbW9yeSIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIERpc2FibGUgRklRDQorICBcZGV0YWlscyBEaXNhYmxlcyBGSVEgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBGLWJpdCBpbiB0aGUgQ1BTUi4NCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZGlzYWJsZV9mYXVsdF9pcnEodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJjcHNpZCBmIiA6IDogOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEJhc2UgUHJpb3JpdHkNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgQmFzZSBQcmlvcml0eSByZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfQkFTRVBSSSh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBiYXNlcHJpIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eQ0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBiYXNlUHJpICBCYXNlIFByaW9yaXR5IHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJKHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBiYXNlcHJpLCAlMCIgOiA6ICJyIih2YWx1ZSkgOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IEJhc2UgUHJpb3JpdHkgd2l0aCBjb25kaXRpb24NCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIG9ubHkgaWYgQkFTRVBSSSBtYXNraW5nIGlzIGRpc2FibGVkLA0KKyAgICAgICAgICAgb3IgdGhlIG5ldyB2YWx1ZSBpbmNyZWFzZXMgdGhlIEJBU0VQUkkgcHJpb3JpdHkgbGV2ZWwuDQorICBccGFyYW0gW2luXSAgICBiYXNlUHJpICBCYXNlIFByaW9yaXR5IHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJX01BWCh1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgYmFzZXByaV9tYXgsICUwIiA6IDogInIiKHZhbHVlKSA6ICJtZW1vcnkiKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgRmF1bHQgTWFzaw0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgRmF1bHQgTWFzayByZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGYXVsdCBNYXNrIHJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9GQVVMVE1BU0sodm9pZCkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgZmF1bHRtYXNrIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgRmF1bHQgTWFzaw0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEZhdWx0IE1hc2sgcmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBmYXVsdE1hc2sgIEZhdWx0IE1hc2sgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0ZBVUxUTUFTSyh1aW50MzJfdCBmYXVsdE1hc2spDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIGZhdWx0bWFzaywgJTAiIDogOiAiciIoZmF1bHRNYXNrKSA6ICJtZW1vcnkiKTsNCit9DQorDQorI2VuZGlmIC8qIChfX0NPUlRFWF9NID49IDB4MDNVKSAqLw0KKw0KKw0KKyNpZiAgICAgICAoX19DT1JURVhfTSA9PSAweDA0VSkgfHwgKF9fQ09SVEVYX00gPT0gMHgwN1UpDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgRlBTQ1INCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9GUFNDUih2b2lkKQ0KK3sNCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQ0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIC8qIEVtcHR5IGFzbSBzdGF0ZW1lbnQgd29ya3MgYXMgYSBzY2hlZHVsaW5nIGJhcnJpZXIgKi8NCisgICAgX19BU00gdm9sYXRpbGUoIiIpOw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiVk1SUyAlMCwgZnBzY3IiIDogIj1yIihyZXN1bHQpKTsNCisgICAgX19BU00gdm9sYXRpbGUoIiIpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorI2Vsc2UNCisgICAgcmV0dXJuICgwKTsNCisjZW5kaWYNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgRlBTQ1INCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIGZwc2NyICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfRlBTQ1IodWludDMyX3QgZnBzY3IpDQorew0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpDQorICAgIC8qIEVtcHR5IGFzbSBzdGF0ZW1lbnQgd29ya3MgYXMgYSBzY2hlZHVsaW5nIGJhcnJpZXIgKi8NCisgICAgX19BU00gdm9sYXRpbGUoIiIpOw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiVk1TUiBmcHNjciwgJTAiIDogOiAiciIoZnBzY3IpIDogInZmcGNjIik7DQorICAgIF9fQVNNIHZvbGF0aWxlKCIiKTsNCisjZW5kaWYNCit9DQorDQorI2VuZGlmIC8qIChfX0NPUlRFWF9NID09IDB4MDRVKSB8fCAoX19DT1JURVhfTSA9PSAweDA3VSkgKi8NCisNCisNCisNCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX1JlZ0FjY0Z1bmN0aW9ucyAqLw0KKw0KKw0KKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLw0KKy8qKiBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSBDTVNJUyBDb3JlIEluc3RydWN0aW9uIEludGVyZmFjZQ0KKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBpbnN0cnVjdGlvbnMNCisgIEB7DQorKi8NCisNCisvKiBEZWZpbmUgbWFjcm9zIGZvciBwb3J0aW5nIHRvIGJvdGggdGh1bWIxIGFuZCB0aHVtYjIuDQorICogRm9yIHRodW1iMSwgdXNlIGxvdyByZWdpc3RlciAocjAtcjcpLCBzcGVjaWZpZWQgYnkgY29uc3RyYWludCAibCINCisgKiBPdGhlcndpc2UsIHVzZSBnZW5lcmFsIHJlZ2lzdGVycywgc3BlY2lmaWVkIGJ5IGNvbnN0cmFpbnQgInIiICovDQorI2lmIGRlZmluZWQgKF9fdGh1bWJfXykgJiYgIWRlZmluZWQgKF9fdGh1bWIyX18pDQorI2RlZmluZSBfX0NNU0lTX0dDQ19PVVRfUkVHKHIpICI9bCIgKHIpDQorI2RlZmluZSBfX0NNU0lTX0dDQ19VU0VfUkVHKHIpICJsIiAocikNCisjZWxzZQ0KKyNkZWZpbmUgX19DTVNJU19HQ0NfT1VUX1JFRyhyKSAiPXIiIChyKQ0KKyNkZWZpbmUgX19DTVNJU19HQ0NfVVNFX1JFRyhyKSAiciIgKHIpDQorI2VuZGlmDQorDQorLyoqDQorICBcYnJpZWYgICBObyBPcGVyYXRpb24NCisgIFxkZXRhaWxzIE5vIE9wZXJhdGlvbiBkb2VzIG5vdGhpbmcuIFRoaXMgaW5zdHJ1Y3Rpb24gY2FuIGJlIHVzZWQgZm9yIGNvZGUgYWxpZ25tZW50IHB1cnBvc2VzLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX05PUCh2b2lkKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIm5vcCIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFdhaXQgRm9yIEludGVycnVwdA0KKyAgXGRldGFpbHMgV2FpdCBGb3IgSW50ZXJydXB0IGlzIGEgaGludCBpbnN0cnVjdGlvbiB0aGF0IHN1c3BlbmRzIGV4ZWN1dGlvbiB1bnRpbCBvbmUgb2YgYSBudW1iZXIgb2YgZXZlbnRzIG9jY3Vycy4NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19XRkkodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJ3ZmkiKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBXYWl0IEZvciBFdmVudA0KKyAgXGRldGFpbHMgV2FpdCBGb3IgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgcGVybWl0cyB0aGUgcHJvY2Vzc29yIHRvIGVudGVyDQorICAgIGEgbG93LXBvd2VyIHN0YXRlIHVudGlsIG9uZSBvZiBhIG51bWJlciBvZiBldmVudHMgb2NjdXJzLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1dGRSh2b2lkKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIndmZSIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNlbmQgRXZlbnQNCisgIFxkZXRhaWxzIFNlbmQgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uLiBJdCBjYXVzZXMgYW4gZXZlbnQgdG8gYmUgc2lnbmFsZWQgdG8gdGhlIENQVS4NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TRVYodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJzZXYiKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBJbnN0cnVjdGlvbiBTeW5jaHJvbml6YXRpb24gQmFycmllcg0KKyAgXGRldGFpbHMgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIEJhcnJpZXIgZmx1c2hlcyB0aGUgcGlwZWxpbmUgaW4gdGhlIHByb2Nlc3NvciwNCisgICAgICAgICAgIHNvIHRoYXQgYWxsIGluc3RydWN0aW9ucyBmb2xsb3dpbmcgdGhlIElTQiBhcmUgZmV0Y2hlZCBmcm9tIGNhY2hlIG9yIG1lbW9yeSwNCisgICAgICAgICAgIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWQuDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fSVNCKHZvaWQpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiaXNiIDB4RiI6OjogIm1lbW9yeSIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIERhdGEgU3luY2hyb25pemF0aW9uIEJhcnJpZXINCisgIFxkZXRhaWxzIEFjdHMgYXMgYSBzcGVjaWFsIGtpbmQgb2YgRGF0YSBNZW1vcnkgQmFycmllci4NCisgICAgICAgICAgIEl0IGNvbXBsZXRlcyB3aGVuIGFsbCBleHBsaWNpdCBtZW1vcnkgYWNjZXNzZXMgYmVmb3JlIHRoaXMgaW5zdHJ1Y3Rpb24gY29tcGxldGUuDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fRFNCKHZvaWQpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiZHNiIDB4RiI6OjogIm1lbW9yeSIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIERhdGEgTWVtb3J5IEJhcnJpZXINCisgIFxkZXRhaWxzIEVuc3VyZXMgdGhlIGFwcGFyZW50IG9yZGVyIG9mIHRoZSBleHBsaWNpdCBtZW1vcnkgb3BlcmF0aW9ucyBiZWZvcmUNCisgICAgICAgICAgIGFuZCBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24sIHdpdGhvdXQgZW5zdXJpbmcgdGhlaXIgY29tcGxldGlvbi4NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19ETUIodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJkbWIgMHhGIjo6OiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgzMiBiaXQpDQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiBpbnRlZ2VyIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19SRVYodWludDMyX3QgdmFsdWUpDQorew0KKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA1KQ0KKyAgICByZXR1cm4gX19idWlsdGluX2Jzd2FwMzIodmFsdWUpOw0KKyNlbHNlDQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInJldiAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyhyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyh2YWx1ZSkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorI2VuZGlmDQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgxNiBiaXQpDQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiB0d28gdW5zaWduZWQgc2hvcnQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19SRVYxNih1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInJldjE2ICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHKHJlc3VsdCkgOiBfX0NNU0lTX0dDQ19VU0VfUkVHKHZhbHVlKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgaW4gc2lnbmVkIHNob3J0IHZhbHVlDQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiBhIHNpZ25lZCBzaG9ydCB2YWx1ZSB3aXRoIHNpZ24gZXh0ZW5zaW9uIHRvIGludGVnZXIuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSBpbnQzMl90IF9fUkVWU0goaW50MzJfdCB2YWx1ZSkNCit7DQorI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDgpDQorICAgIHJldHVybiAoc2hvcnQpX19idWlsdGluX2Jzd2FwMTYodmFsdWUpOw0KKyNlbHNlDQorICAgIGludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgicmV2c2ggJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcodmFsdWUpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KKyNlbmRpZg0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFJvdGF0ZSBSaWdodCBpbiB1bnNpZ25lZCB2YWx1ZSAoMzIgYml0KQ0KKyAgXGRldGFpbHMgUm90YXRlIFJpZ2h0IChpbW1lZGlhdGUpIHByb3ZpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciByb3RhdGVkIGJ5IGEgdmFyaWFibGUgbnVtYmVyIG9mIGJpdHMuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcm90YXRlDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgTnVtYmVyIG9mIEJpdHMgdG8gcm90YXRlDQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19ST1IodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICByZXR1cm4gKG9wMSA+PiBvcDIpIHwgKG9wMSA8PCAoMzJVIC0gb3AyKSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgQnJlYWtwb2ludA0KKyAgXGRldGFpbHMgQ2F1c2VzIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXIgRGVidWcgc3RhdGUuDQorICAgICAgICAgICBEZWJ1ZyB0b29scyBjYW4gdXNlIHRoaXMgdG8gaW52ZXN0aWdhdGUgc3lzdGVtIHN0YXRlIHdoZW4gdGhlIGluc3RydWN0aW9uIGF0IGEgcGFydGljdWxhciBhZGRyZXNzIGlzIHJlYWNoZWQuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgaXMgaWdub3JlZCBieSB0aGUgcHJvY2Vzc29yLg0KKyAgICAgICAgICAgICAgICAgSWYgcmVxdWlyZWQsIGEgZGVidWdnZXIgY2FuIHVzZSBpdCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBicmVha3BvaW50Lg0KKyAqLw0KKyNkZWZpbmUgX19CS1BUKHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgX19BU00gdm9sYXRpbGUgKCJia3B0ICIjdmFsdWUpDQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZXZlcnNlIGJpdCBvcmRlciBvZiB2YWx1ZQ0KKyAgXGRldGFpbHMgUmV2ZXJzZXMgdGhlIGJpdCBvcmRlciBvZiB0aGUgZ2l2ZW4gdmFsdWUuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JCSVQodWludDMyX3QgdmFsdWUpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkNCisgICAgX19BU00gdm9sYXRpbGUoInJiaXQgJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJyIih2YWx1ZSkpOw0KKyNlbHNlDQorICAgIGludDMyX3QgcyA9IDQgLypzaXplb2YodikqLyAqIDggLSAxOyAvKiBleHRyYSBzaGlmdCBuZWVkZWQgYXQgZW5kICovDQorDQorICAgIHJlc3VsdCA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAvKiByIHdpbGwgYmUgcmV2ZXJzZWQgYml0cyBvZiB2OyBmaXJzdCBnZXQgTFNCIG9mIHYgKi8NCisNCisgICAgZm9yICh2YWx1ZSA+Pj0gMVU7IHZhbHVlOyB2YWx1ZSA+Pj0gMVUpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA8PD0gMVU7DQorICAgICAgICByZXN1bHQgfD0gdmFsdWUgJiAxVTsNCisgICAgICAgIHMtLTsNCisgICAgfQ0KKw0KKyAgICByZXN1bHQgPDw9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hpZnQgd2hlbiB2J3MgaGlnaGVzdCBiaXRzIGFyZSB6ZXJvICovDQorI2VuZGlmDQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBDb3VudCBsZWFkaW5nIHplcm9zDQorICBcZGV0YWlscyBDb3VudHMgdGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIGEgZGF0YSB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gY291bnQgdGhlIGxlYWRpbmcgemVyb3MNCisgIFxyZXR1cm4gICAgICAgICAgICAgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3MgaW4gdmFsdWUNCisgKi8NCisjZGVmaW5lIF9fQ0xaICAgICAgICAgICAgIF9fYnVpbHRpbl9jbHoNCisNCisNCisjaWYgICAgICAgKF9fQ09SVEVYX00gPj0gMHgwM1UpIHx8IChfX0NPUlRFWF9TQyA+PSAzMDBVKQ0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTERSIEV4Y2x1c2l2ZSAoOCBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBfX0xEUkVYQih2b2xhdGlsZSB1aW50OF90ICphZGRyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA4KQ0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRyZXhiICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiUSIoKmFkZHIpKTsNCisjZWxzZQ0KKyAgICAvKiBQcmlvciB0byBHQ0MgNC44LCAiUSIgd2lsbCBiZSBleHBhbmRlZCB0byBbcngsICMwXSB3aGljaCBpcyBub3QNCisgICAgICAgYWNjZXB0ZWQgYnkgYXNzZW1ibGVyLiBTbyBoYXMgdG8gdXNlIGZvbGxvd2luZyBsZXNzIGVmZmljaWVudCBwYXR0ZXJuLg0KKyAgICAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRyZXhiICUwLCBbJTFdIiA6ICI9ciIocmVzdWx0KSA6ICJyIihhZGRyKSA6ICJtZW1vcnkiKTsNCisjZW5kaWYNCisgICAgcmV0dXJuICgodWludDhfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovDQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTERSIEV4Y2x1c2l2ZSAoMTYgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDE2X3QgYXQgKCpwdHIpDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MTZfdCBfX0xEUkVYSCh2b2xhdGlsZSB1aW50MTZfdCAqYWRkcikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisjaWYgKF9fR05VQ19fID4gNCkgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gOCkNCisgICAgX19BU00gdm9sYXRpbGUoImxkcmV4aCAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogIlEiKCphZGRyKSk7DQorI2Vsc2UNCisgICAgLyogUHJpb3IgdG8gR0NDIDQuOCwgIlEiIHdpbGwgYmUgZXhwYW5kZWQgdG8gW3J4LCAjMF0gd2hpY2ggaXMgbm90DQorICAgICAgIGFjY2VwdGVkIGJ5IGFzc2VtYmxlci4gU28gaGFzIHRvIHVzZSBmb2xsb3dpbmcgbGVzcyBlZmZpY2llbnQgcGF0dGVybi4NCisgICAgKi8NCisgICAgX19BU00gdm9sYXRpbGUoImxkcmV4aCAlMCwgWyUxXSIgOiAiPXIiKHJlc3VsdCkgOiAiciIoYWRkcikgOiAibWVtb3J5Iik7DQorI2VuZGlmDQorICAgIHJldHVybiAoKHVpbnQxNl90KSByZXN1bHQpOyAgICAvKiBBZGQgZXhwbGljaXQgdHlwZSBjYXN0IGhlcmUgKi8NCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fTERSRVhXKHZvbGF0aWxlIHVpbnQzMl90ICphZGRyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRyZXggJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJRIigqYWRkcikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoOCBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQNCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NUUkVYQih1aW50OF90IHZhbHVlLCB2b2xhdGlsZSB1aW50OF90ICphZGRyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3RyZXhiICUwLCAlMiwgJTEiIDogIj0mciIocmVzdWx0KSwgIj1RIigqYWRkcikgOiAiciIoKHVpbnQzMl90KXZhbHVlKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkDQorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TVFJFWEgodWludDE2X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQxNl90ICphZGRyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3RyZXhoICUwLCAlMiwgJTEiIDogIj0mciIocmVzdWx0KSwgIj1RIigqYWRkcikgOiAiciIoKHVpbnQzMl90KXZhbHVlKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkDQorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TVFJFWFcodWludDMyX3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQzMl90ICphZGRyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3RyZXggJTAsICUyLCAlMSIgOiAiPSZyIihyZXN1bHQpLCAiPVEiKCphZGRyKSA6ICJyIih2YWx1ZSkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUmVtb3ZlIHRoZSBleGNsdXNpdmUgbG9jaw0KKyAgXGRldGFpbHMgUmVtb3ZlcyB0aGUgZXhjbHVzaXZlIGxvY2sgd2hpY2ggaXMgY3JlYXRlZCBieSBMRFJFWC4NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19DTFJFWCh2b2lkKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoImNscmV4IiA6OjogIm1lbW9yeSIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNpZ25lZCBTYXR1cmF0ZQ0KKyAgXGRldGFpbHMgU2F0dXJhdGVzIGEgc2lnbmVkIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBiZSBzYXR1cmF0ZWQNCisgIFxwYXJhbSBbaW5dICAgIHNhdCAgQml0IHBvc2l0aW9uIHRvIHNhdHVyYXRlIHRvICgxLi4zMikNCisgIFxyZXR1cm4gICAgICAgICAgICAgU2F0dXJhdGVkIHZhbHVlDQorICovDQorI2RlZmluZSBfX1NTQVQoQVJHMSxBUkcyKSBcDQorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSk7IFwNCisgIF9fQVNNICgic3NhdCAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXA0KKyAgX19SRVM7IFwNCisgfSkNCisNCisNCisvKioNCisgIFxicmllZiAgIFVuc2lnbmVkIFNhdHVyYXRlDQorICBcZGV0YWlscyBTYXR1cmF0ZXMgYW4gdW5zaWduZWQgdmFsdWUuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGJlIHNhdHVyYXRlZA0KKyAgXHBhcmFtIFtpbl0gICAgc2F0ICBCaXQgcG9zaXRpb24gdG8gc2F0dXJhdGUgdG8gKDAuLjMxKQ0KKyAgXHJldHVybiAgICAgICAgICAgICBTYXR1cmF0ZWQgdmFsdWUNCisgKi8NCisjZGVmaW5lIF9fVVNBVChBUkcxLEFSRzIpIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXA0KKyAgX19BU00gKCJ1c2F0ICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJJIiAoQVJHMiksICJyIiAoX19BUkcxKSApOyBcDQorICBfX1JFUzsgXA0KKyB9KQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUm90YXRlIFJpZ2h0IHdpdGggRXh0ZW5kICgzMiBiaXQpDQorICBcZGV0YWlscyBNb3ZlcyBlYWNoIGJpdCBvZiBhIGJpdHN0cmluZyByaWdodCBieSBvbmUgYml0Lg0KKyAgICAgICAgICAgVGhlIGNhcnJ5IGlucHV0IGlzIHNoaWZ0ZWQgaW4gYXQgdGhlIGxlZnQgZW5kIG9mIHRoZSBiaXRzdHJpbmcuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcm90YXRlDQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19SUlgodWludDMyX3QgdmFsdWUpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJycnggJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcodmFsdWUpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICg4IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBfX0xEUkJUKHZvbGF0aWxlIHVpbnQ4X3QgKmFkZHIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDgpDQorICAgIF9fQVNNIHZvbGF0aWxlKCJsZHJidCAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogIlEiKCphZGRyKSk7DQorI2Vsc2UNCisgICAgLyogUHJpb3IgdG8gR0NDIDQuOCwgIlEiIHdpbGwgYmUgZXhwYW5kZWQgdG8gW3J4LCAjMF0gd2hpY2ggaXMgbm90DQorICAgICAgIGFjY2VwdGVkIGJ5IGFzc2VtYmxlci4gU28gaGFzIHRvIHVzZSBmb2xsb3dpbmcgbGVzcyBlZmZpY2llbnQgcGF0dGVybi4NCisgICAgKi8NCisgICAgX19BU00gdm9sYXRpbGUoImxkcmJ0ICUwLCBbJTFdIiA6ICI9ciIocmVzdWx0KSA6ICJyIihhZGRyKSA6ICJtZW1vcnkiKTsNCisjZW5kaWYNCisgICAgcmV0dXJuICgodWludDhfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovDQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDE2IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MTZfdCBhdCAoKnB0cikNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IF9fTERSSFQodm9sYXRpbGUgdWludDE2X3QgKmFkZHIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDgpDQorICAgIF9fQVNNIHZvbGF0aWxlKCJsZHJodCAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogIlEiKCphZGRyKSk7DQorI2Vsc2UNCisgICAgLyogUHJpb3IgdG8gR0NDIDQuOCwgIlEiIHdpbGwgYmUgZXhwYW5kZWQgdG8gW3J4LCAjMF0gd2hpY2ggaXMgbm90DQorICAgICAgIGFjY2VwdGVkIGJ5IGFzc2VtYmxlci4gU28gaGFzIHRvIHVzZSBmb2xsb3dpbmcgbGVzcyBlZmZpY2llbnQgcGF0dGVybi4NCisgICAgKi8NCisgICAgX19BU00gdm9sYXRpbGUoImxkcmh0ICUwLCBbJTFdIiA6ICI9ciIocmVzdWx0KSA6ICJyIihhZGRyKSA6ICJtZW1vcnkiKTsNCisjZW5kaWYNCisgICAgcmV0dXJuICgodWludDE2X3QpIHJlc3VsdCk7ICAgIC8qIEFkZCBleHBsaWNpdCB0eXBlIGNhc3QgaGVyZSAqLw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX0xEUlQodm9sYXRpbGUgdWludDMyX3QgKmFkZHIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJsZHJ0ICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiUSIoKmFkZHIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICg4IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NUUkJUKHVpbnQ4X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQ4X3QgKmFkZHIpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3RyYnQgJTEsICUwIiA6ICI9USIoKmFkZHIpIDogInIiKCh1aW50MzJfdCl2YWx1ZSkpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RSSFQodWludDE2X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQxNl90ICphZGRyKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoInN0cmh0ICUxLCAlMCIgOiAiPVEiKCphZGRyKSA6ICJyIigodWludDMyX3QpdmFsdWUpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoMzIgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NUUlQodWludDMyX3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQzMl90ICphZGRyKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoInN0cnQgJTEsICUwIiA6ICI9USIoKmFkZHIpIDogInIiKHZhbHVlKSk7DQorfQ0KKw0KKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpICovDQorDQorLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlICovDQorDQorDQorLyogIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29tcGlsZXIgc3BlY2lmaWMgSW50cmluc2ljcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovDQorLyoqIFxkZWZncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgQ01TSVMgU0lNRCBJbnRyaW5zaWNzDQorICBBY2Nlc3MgdG8gZGVkaWNhdGVkIFNJTUQgaW5zdHJ1Y3Rpb25zDQorICBAew0KKyovDQorDQorI2lmIChfX0NPUlRFWF9NID49IDB4MDRVKSAgLyogb25seSBmb3IgQ29ydGV4LU00IGFuZCBhYm92ZSAqLw0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNoYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWFkZDggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cWFkZDggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSEFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1aGFkZDggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNzdWI4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUVNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNoc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidXN1YjggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUVNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cXN1YjggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSFNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1aHN1YjggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSEFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2hhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cWFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVoYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSFNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2hzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cXN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVoc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2FzeCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxYXN4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzaGFzeCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1YXN4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cWFzeCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWhhc3ggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3NheCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJxc2F4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzaHNheCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1c2F4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1cXNheCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWhzYXggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU0FEOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVzYWQ4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNBREE4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1c2FkYTggJTAsICUxLCAlMiwgJTMiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpLCAiciIob3AzKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorI2RlZmluZSBfX1NTQVQxNihBUkcxLEFSRzIpIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgaW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcDQorICBfX0FTTSAoInNzYXQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXA0KKyAgX19SRVM7IFwNCisgfSkNCisNCisjZGVmaW5lIF9fVVNBVDE2KEFSRzEsQVJHMikgXA0KKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcDQorICBfX0FTTSAoInVzYXQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXA0KKyAgX19SRVM7IFwNCisgfSkNCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVhUQjE2KHVpbnQzMl90IG9wMSkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInV4dGIxNiAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VWFRBQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidXh0YWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NYVEIxNih1aW50MzJfdCBvcDEpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzeHRiMTYgJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1hUQUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInN4dGFiMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVBRCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtdWFkICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VQURYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic211YWR4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MQUQodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtbGFkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSwgInIiKG9wMykpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxBRFgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtbGFkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMiksICJyIihvcDMpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpDQorew0KKyAgICB1bmlvbiBsbHJlZ191DQorICAgIHsNCisgICAgICAgIHVpbnQzMl90IHczMlsyXTsNCisgICAgICAgIHVpbnQ2NF90IHc2NDsNCisgICAgfSBsbHI7DQorICAgIGxsci53NjQgPSBhY2M7DQorDQorI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxhbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzBdKSwgIj1yIihsbHIudzMyWzFdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMF0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlsxXSkpOw0KKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sYWxkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIobGxyLnczMlsxXSksICI9ciIobGxyLnczMlswXSk6ICJyIihvcDEpLCAiciIob3AyKSAsICIwIihsbHIudzMyWzFdKSwNCisgICAgICAgICAgICAgICAgICAgIjEiKGxsci53MzJbMF0pKTsNCisjZW5kaWYNCisNCisgICAgcmV0dXJuIChsbHIudzY0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTEFMRFgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykNCit7DQorICAgIHVuaW9uIGxscmVnX3UNCisgICAgew0KKyAgICAgICAgdWludDMyX3QgdzMyWzJdOw0KKyAgICAgICAgdWludDY0X3QgdzY0Ow0KKyAgICB9IGxscjsNCisgICAgbGxyLnc2NCA9IGFjYzsNCisNCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8NCisgICAgX19BU00gdm9sYXRpbGUoInNtbGFsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzBdKSwgIj1yIihsbHIudzMyWzFdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMF0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlsxXSkpOw0KKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sYWxkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKGxsci53MzJbMV0pLCAiPXIiKGxsci53MzJbMF0pOiAiciIob3AxKSwgInIiKG9wMikgLCAiMCIobGxyLnczMlsxXSksDQorICAgICAgICAgICAgICAgICAgICIxIihsbHIudzMyWzBdKSk7DQorI2VuZGlmDQorDQorICAgIHJldHVybiAobGxyLnc2NCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVTRCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtdXNkICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VU0RYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic211c2R4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MU0QodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtbHNkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSwgInIiKG9wMykpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxTRFgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtbHNkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMiksICJyIihvcDMpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MU0xEKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpDQorew0KKyAgICB1bmlvbiBsbHJlZ191DQorICAgIHsNCisgICAgICAgIHVpbnQzMl90IHczMlsyXTsNCisgICAgICAgIHVpbnQ2NF90IHc2NDsNCisgICAgfSBsbHI7DQorICAgIGxsci53NjQgPSBhY2M7DQorDQorI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxzbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzBdKSwgIj1yIihsbHIudzMyWzFdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMF0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlsxXSkpOw0KKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sc2xkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIobGxyLnczMlsxXSksICI9ciIobGxyLnczMlswXSk6ICJyIihvcDEpLCAiciIob3AyKSAsICIwIihsbHIudzMyWzFdKSwNCisgICAgICAgICAgICAgICAgICAgIjEiKGxsci53MzJbMF0pKTsNCisjZW5kaWYNCisNCisgICAgcmV0dXJuIChsbHIudzY0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTFNMRFgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykNCit7DQorICAgIHVuaW9uIGxscmVnX3UNCisgICAgew0KKyAgICAgICAgdWludDMyX3QgdzMyWzJdOw0KKyAgICAgICAgdWludDY0X3QgdzY0Ow0KKyAgICB9IGxscjsNCisgICAgbGxyLnc2NCA9IGFjYzsNCisNCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8NCisgICAgX19BU00gdm9sYXRpbGUoInNtbHNsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzBdKSwgIj1yIihsbHIudzMyWzFdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMF0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlsxXSkpOw0KKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sc2xkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKGxsci53MzJbMV0pLCAiPXIiKGxsci53MzJbMF0pOiAiciIob3AxKSwgInIiKG9wMikgLCAiMCIobGxyLnczMlsxXSksDQorICAgICAgICAgICAgICAgICAgICIxIihsbHIudzMyWzBdKSk7DQorI2VuZGlmDQorDQorICAgIHJldHVybiAobGxyLnc2NCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TRUwodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzZWwgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgIGludDMyX3QgX19RQUREKGludDMyX3Qgb3AxLCAgaW50MzJfdCBvcDIpDQorew0KKyAgICBpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFhZGQgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgIGludDMyX3QgX19RU1VCKGludDMyX3Qgb3AxLCAgaW50MzJfdCBvcDIpDQorew0KKyAgICBpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFzdWIgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKyNkZWZpbmUgX19QS0hCVChBUkcxLEFSRzIsQVJHMykgXA0KKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpLCBfX0FSRzIgPSAoQVJHMik7IFwNCisgIF9fQVNNICgicGtoYnQgJTAsICUxLCAlMiwgbHNsICUzIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSwgIkkiIChBUkczKSAgKTsgXA0KKyAgX19SRVM7IFwNCisgfSkNCisNCisjZGVmaW5lIF9fUEtIVEIoQVJHMSxBUkcyLEFSRzMpIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKSwgX19BUkcyID0gKEFSRzIpOyBcDQorICBpZiAoQVJHMyA9PSAwKSBcDQorICAgIF9fQVNNICgicGtodGIgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgInIiIChfX0FSRzEpLCAiciIgKF9fQVJHMikgICk7IFwNCisgIGVsc2UgXA0KKyAgICBfX0FTTSAoInBraHRiICUwLCAlMSwgJTIsIGFzciAlMyIgOiAiPXIiIChfX1JFUykgOiAgInIiIChfX0FSRzEpLCAiciIgKF9fQVJHMiksICJJIiAoQVJHMykgICk7IFwNCisgIF9fUkVTOyBcDQorIH0pDQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTUxBKGludDMyX3Qgb3AxLCBpbnQzMl90IG9wMiwgaW50MzJfdCBvcDMpDQorew0KKyAgICBpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtbWxhICUwLCAlMSwgJTIsICUzIiA6ICI9ciIocmVzdWx0KTogInIiKG9wMSksICJyIihvcDIpLCAiciIob3AzKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorI2VuZGlmIC8qIChfX0NPUlRFWF9NID49IDB4MDQpICovDQorLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0lNRF9pbnRyaW5zaWNzICovDQorDQorDQorI2lmIGRlZmluZWQgKCBfX0dOVUNfXyApDQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3ANCisjZW5kaWYNCisNCisjZW5kaWYgLyogX19DTVNJU19HQ0NfSCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY29yZV9jbTQuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY29yZV9jbTQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZlZWQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jb3JlX2NtNC5oCkBAIC0wLDAgKzEsMTk0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KKyAqIEBmaWxlICAgICBjb3JlX2NtNC5oDQorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NNCBDb3JlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIEhlYWRlciBGaWxlDQorICogQHZlcnNpb24gIFY0LjMwDQorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQNCisNCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkDQorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAgICoNCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQ0KKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0KKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0KKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElODQorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQ0KKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQ0KKyNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovDQorI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkNCisjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8NCisjZW5kaWYNCisNCisjaWZuZGVmIF9fQ09SRV9DTTRfSF9HRU5FUklDDQorI2RlZmluZSBfX0NPUkVfQ000X0hfR0VORVJJQw0KKw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgIFxwYWdlIENNU0lTX01JU1JBX0V4Y2VwdGlvbnMgIE1JU1JBLUM6MjAwNCBDb21wbGlhbmNlIEV4Y2VwdGlvbnMNCisgIENNU0lTIHZpb2xhdGVzIHRoZSBmb2xsb3dpbmcgTUlTUkEtQzoyMDA0IHJ1bGVzOg0KKw0KKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDguNSwgb2JqZWN0L2Z1bmN0aW9uIGRlZmluaXRpb24gaW4gaGVhZGVyIGZpbGUuPGJyPg0KKyAgICAgRnVuY3Rpb24gZGVmaW5pdGlvbnMgaW4gaGVhZGVyIGZpbGVzIGFyZSB1c2VkIHRvIGFsbG93ICdpbmxpbmluZycuDQorDQorICAgXGxpIFJlcXVpcmVkIFJ1bGUgMTguNCwgZGVjbGFyYXRpb24gb2YgdW5pb24gdHlwZSBvciBvYmplY3Qgb2YgdW5pb24gdHlwZTogJ3suLi59Jy48YnI+DQorICAgICBVbmlvbnMgYXJlIHVzZWQgZm9yIGVmZmVjdGl2ZSByZXByZXNlbnRhdGlvbiBvZiBjb3JlIHJlZ2lzdGVycy4NCisNCisgICBcbGkgQWR2aXNvcnkgUnVsZSAxOS43LCBGdW5jdGlvbi1saWtlIG1hY3JvIGRlZmluZWQuPGJyPg0KKyAgICAgRnVuY3Rpb24tbGlrZSBtYWNyb3MgYXJlIHVzZWQgdG8gYWxsb3cgbW9yZSBlZmZpY2llbnQgY29kZS4NCisgKi8NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICBDTVNJUyBkZWZpbml0aW9ucw0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqDQorICBcaW5ncm91cCBDb3J0ZXhfTTQNCisgIEB7DQorICovDQorDQorLyogIENNU0lTIENNNCBkZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgX19DTTRfQ01TSVNfVkVSU0lPTl9NQUlOICAoMHgwNFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFszMToxNl0gQ01TSVMgSEFMIG1haW4gdmVyc2lvbiAqLw0KKyNkZWZpbmUgX19DTTRfQ01TSVNfVkVSU0lPTl9TVUIgICAoMHgxRVUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFsxNTowXSAgQ01TSVMgSEFMIHN1YiB2ZXJzaW9uICovDQorI2RlZmluZSBfX0NNNF9DTVNJU19WRVJTSU9OICAgICAgICgoX19DTTRfQ01TSVNfVkVSU0lPTl9NQUlOIDw8IDE2VSkgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19DTTRfQ01TSVNfVkVSU0lPTl9TVUIgICAgICAgICAgICkgICAgICAgIC8qITwgQ01TSVMgSEFMIHZlcnNpb24gbnVtYmVyICovDQorDQorI2RlZmluZSBfX0NPUlRFWF9NICAgICAgICAgICAgICAgICgweDA0VSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29ydGV4LU0gQ29yZSAqLw0KKw0KKw0KKyNpZiAgIGRlZmluZWQgKCBfX0NDX0FSTSApDQorI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8NCisjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLw0KKyNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUNCisNCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQ0KKyNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovDQorI2RlZmluZSBfX0lOTElORSAgICAgICAgIF9faW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8NCisjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lDQorDQorI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkNCisjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEdOVSBDb21waWxlciAqLw0KKyNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovDQorI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUNCisNCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApDQorI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBJQVIgQ29tcGlsZXIgKi8NCisjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIElBUiBDb21waWxlci4gT25seSBhdmFpbGFibGUgaW4gSGlnaCBvcHRpbWl6YXRpb24gbW9kZSEgKi8NCisjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQ0KKw0KKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkNCisjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRJIENDUyBDb21waWxlciAqLw0KKyNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lDQorDQorI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkNCisjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8NCisjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8NCisjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQ0KKw0KKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApDQorI2RlZmluZSBfX3BhY2tlZA0KKyNkZWZpbmUgX19BU00gICAgICAgICAgICBfYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBDT1NNSUMgQ29tcGlsZXIgKi8NCisjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyLiBVc2UgLXBjOTkgb24gY29tcGlsZSBsaW5lICovDQorI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUNCisNCisjZWxzZQ0KKyNlcnJvciBVbmtub3duIGNvbXBpbGVyDQorI2VuZGlmDQorDQorLyoqIF9fRlBVX1VTRUQgaW5kaWNhdGVzIHdoZXRoZXIgYW4gRlBVIGlzIHVzZWQgb3Igbm90Lg0KKyAgICBGb3IgdGhpcywgX19GUFVfUFJFU0VOVCBoYXMgdG8gYmUgY2hlY2tlZCBwcmlvciB0byBtYWtpbmcgdXNlIG9mIEZQVSBzcGVjaWZpYyByZWdpc3RlcnMgYW5kIGZ1bmN0aW9ucy4NCisqLw0KKyNpZiBkZWZpbmVkICggX19DQ19BUk0gKQ0KKyNpZiBkZWZpbmVkIF9fVEFSR0VUX0ZQVV9WRlANCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVDQorI2Vsc2UNCisjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVDQorI2VuZGlmDQorI2Vsc2UNCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQ0KKyNlbmRpZg0KKw0KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApDQorI2lmIGRlZmluZWQgX19BUk1fUENTX1ZGUA0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxKQ0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQ0KKyNlbHNlDQorI3dhcm5pbmcgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVDQorI2VuZGlmDQorI2Vsc2UNCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQ0KKyNlbmRpZg0KKw0KKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApDQorI2lmIGRlZmluZWQgKF9fVkZQX0ZQX18pICYmICFkZWZpbmVkKF9fU09GVEZQX18pDQorI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQ0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQ0KKyNlbHNlDQorI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIg0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQ0KKyNlbmRpZg0KKyNlbHNlDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUNCisjZW5kaWYNCisNCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApDQorI2lmIGRlZmluZWQgX19BUk1WRlBfXw0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkNCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUNCisjZWxzZQ0KKyNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSINCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUNCisjZW5kaWYNCisjZWxzZQ0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVDQorI2VuZGlmDQorDQorI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQ0KKyNpZiBkZWZpbmVkIF9fVElfVkZQX1NVUFBPUlRfXw0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkNCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUNCisjZWxzZQ0KKyNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSINCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUNCisjZW5kaWYNCisjZWxzZQ0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVDQorI2VuZGlmDQorDQorI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkNCisjaWYgZGVmaW5lZCBfX0ZQVV9WRlBfXw0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkNCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUNCisjZWxzZQ0KKyNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSINCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUNCisjZW5kaWYNCisjZWxzZQ0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVDQorI2VuZGlmDQorDQorI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkNCisjaWYgKCBfX0NTTUNfXyAmIDB4NDAwVSkNCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVDQorI2Vsc2UNCisjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVDQorI2VuZGlmDQorI2Vsc2UNCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQ0KKyNlbmRpZg0KKw0KKyNlbmRpZg0KKw0KKyNpbmNsdWRlICJjb3JlX2NtSW5zdHIuaCIgICAgICAgICAgICAgICAgLyogQ29yZSBJbnN0cnVjdGlvbiBBY2Nlc3MgKi8NCisjaW5jbHVkZSAiY29yZV9jbUZ1bmMuaCIgICAgICAgICAgICAgICAgIC8qIENvcmUgRnVuY3Rpb24gQWNjZXNzICovDQorI2luY2x1ZGUgImNvcmVfY21TaW1kLmgiICAgICAgICAgICAgICAgICAvKiBDb21waWxlciBzcGVjaWZpYyBTSU1EIEludHJpbnNpY3MgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9fQ09SRV9DTTRfSF9HRU5FUklDICovDQorDQorI2lmbmRlZiBfX0NNU0lTX0dFTkVSSUMNCisNCisjaWZuZGVmIF9fQ09SRV9DTTRfSF9ERVBFTkRBTlQNCisjZGVmaW5lIF9fQ09SRV9DTTRfSF9ERVBFTkRBTlQNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBjaGVjayBkZXZpY2UgZGVmaW5lcyBhbmQgdXNlIGRlZmF1bHRzICovDQorI2lmIGRlZmluZWQgX19DSEVDS19ERVZJQ0VfREVGSU5FUw0KKyNpZm5kZWYgX19DTTRfUkVWDQorI2RlZmluZSBfX0NNNF9SRVYgICAgICAgICAgICAgICAweDAwMDBVDQorI3dhcm5pbmcgIl9fQ000X1JFViBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIg0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19GUFVfUFJFU0VOVA0KKyNkZWZpbmUgX19GUFVfUFJFU0VOVCAgICAgICAgICAgICAwVQ0KKyN3YXJuaW5nICJfX0ZQVV9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX01QVV9QUkVTRU5UDQorI2RlZmluZSBfX01QVV9QUkVTRU5UICAgICAgICAgICAgIDBVDQorI3dhcm5pbmcgIl9fTVBVX1BSRVNFTlQgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISINCisjZW5kaWYNCisNCisjaWZuZGVmIF9fTlZJQ19QUklPX0JJVFMNCisjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgNFUNCisjd2FybmluZyAiX19OVklDX1BSSU9fQklUUyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIg0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19WZW5kb3JfU3lzVGlja0NvbmZpZw0KKyNkZWZpbmUgX19WZW5kb3JfU3lzVGlja0NvbmZpZyAgICAwVQ0KKyN3YXJuaW5nICJfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyogSU8gZGVmaW5pdGlvbnMgKGFjY2VzcyByZXN0cmljdGlvbnMgdG8gcGVyaXBoZXJhbCByZWdpc3RlcnMpICovDQorLyoqDQorICAgIFxkZWZncm91cCBDTVNJU19nbG9iX2RlZnMgQ01TSVMgR2xvYmFsIERlZmluZXMNCisNCisgICAgPHN0cm9uZz5JTyBUeXBlIFF1YWxpZmllcnM8L3N0cm9uZz4gYXJlIHVzZWQNCisgICAgXGxpIHRvIHNwZWNpZnkgdGhlIGFjY2VzcyB0byBwZXJpcGhlcmFsIHZhcmlhYmxlcy4NCisgICAgXGxpIGZvciBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBwZXJpcGhlcmFsIHJlZ2lzdGVyIGRlYnVnIGluZm9ybWF0aW9uLg0KKyovDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovDQorI2Vsc2UNCisjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSBjb25zdCAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8NCisjZW5kaWYNCisjZGVmaW5lICAgICBfX08gICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAnd3JpdGUgb25seScgcGVybWlzc2lvbnMgKi8NCisjZGVmaW5lICAgICBfX0lPICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCAvIHdyaXRlJyBwZXJtaXNzaW9ucyAqLw0KKw0KKy8qIGZvbGxvd2luZyBkZWZpbmVzIHNob3VsZCBiZSB1c2VkIGZvciBzdHJ1Y3R1cmUgbWVtYmVycyAqLw0KKyNkZWZpbmUgICAgIF9fSU0gICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgLyohIERlZmluZXMgJ3JlYWQgb25seScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLw0KKyNkZWZpbmUgICAgIF9fT00gICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3dyaXRlIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8NCisjZGVmaW5lICAgICBfX0lPTSAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8NCisNCisvKkB9IGVuZCBvZiBncm91cCBDb3J0ZXhfTTQgKi8NCisNCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICBSZWdpc3RlciBBYnN0cmFjdGlvbg0KKyAgQ29yZSBSZWdpc3RlciBjb250YWluOg0KKyAgLSBDb3JlIFJlZ2lzdGVyDQorICAtIENvcmUgTlZJQyBSZWdpc3Rlcg0KKyAgLSBDb3JlIFNDQiBSZWdpc3Rlcg0KKyAgLSBDb3JlIFN5c1RpY2sgUmVnaXN0ZXINCisgIC0gQ29yZSBEZWJ1ZyBSZWdpc3Rlcg0KKyAgLSBDb3JlIE1QVSBSZWdpc3Rlcg0KKyAgLSBDb3JlIEZQVSBSZWdpc3Rlcg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqDQorICBcZGVmZ3JvdXAgQ01TSVNfY29yZV9yZWdpc3RlciBEZWZpbmVzIGFuZCBUeXBlIERlZmluaXRpb25zDQorICBcYnJpZWYgVHlwZSBkZWZpbml0aW9ucyBhbmQgZGVmaW5lcyBmb3IgQ29ydGV4LU0gcHJvY2Vzc29yIGJhc2VkIGRldmljZXMuDQorKi8NCisNCisvKioNCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXINCisgIFxkZWZncm91cCAgIENNU0lTX0NPUkUgIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcnMNCisgIFxicmllZiAgICAgIENvcmUgUmVnaXN0ZXIgdHlwZSBkZWZpbml0aW9ucy4NCisgIEB7DQorICovDQorDQorLyoqDQorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoQVBTUikuDQorICovDQordHlwZWRlZiB1bmlvbg0KK3sNCisgICAgc3RydWN0DQorICAgIHsNCisgICAgICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6IDE2OyAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLjE1ICBSZXNlcnZlZCAqLw0KKyAgICAgICAgdWludDMyX3QgR0U6IDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAxNi4uMTkgIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCBmbGFncyAqLw0KKyAgICAgICAgdWludDMyX3QgX3Jlc2VydmVkMTogNzsgICAgICAgICAgICAgIC8qITwgYml0OiAyMC4uMjYgIFJlc2VydmVkICovDQorICAgICAgICB1aW50MzJfdCBROiAxOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNyAgU2F0dXJhdGlvbiBjb25kaXRpb24gZmxhZyAqLw0KKyAgICAgICAgdWludDMyX3QgVjogMTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8NCisgICAgICAgIHVpbnQzMl90IEM6IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovDQorICAgICAgICB1aW50MzJfdCBaOiAxOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovDQorICAgICAgICB1aW50MzJfdCBOOiAxOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLw0KKyAgICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLw0KKyAgICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLw0KK30gQVBTUl9UeXBlOw0KKw0KKy8qIEFQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIEFQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gUG9zaXRpb24gKi8NCisjZGVmaW5lIEFQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gTWFzayAqLw0KKw0KKyNkZWZpbmUgQVBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQVBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBNYXNrICovDQorDQorI2RlZmluZSBBUFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIFBvc2l0aW9uICovDQorI2RlZmluZSBBUFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIE1hc2sgKi8NCisNCisjZGVmaW5lIEFQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgUG9zaXRpb24gKi8NCisjZGVmaW5lIEFQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgTWFzayAqLw0KKw0KKyNkZWZpbmUgQVBTUl9RX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogUSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQVBTUl9RX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfUV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogUSBNYXNrICovDQorDQorI2RlZmluZSBBUFNSX0dFX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBHRSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQVBTUl9HRV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGVUwgPDwgQVBTUl9HRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogR0UgTWFzayAqLw0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgSW50ZXJydXB0IFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChJUFNSKS4NCisgKi8NCit0eXBlZGVmIHVuaW9uDQorew0KKyAgICBzdHJ1Y3QNCisgICAgew0KKyAgICAgICAgdWludDMyX3QgSVNSOiA5OyAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uIDggIEV4Y2VwdGlvbiBudW1iZXIgKi8NCisgICAgICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6IDIzOyAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjMxICBSZXNlcnZlZCAqLw0KKyAgICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLw0KKyAgICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLw0KK30gSVBTUl9UeXBlOw0KKw0KKy8qIElQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIElQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElQU1I6IElTUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IElQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIE1hc2sgKi8NCisNCisNCisvKioNCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIFNwZWNpYWwtUHVycG9zZSBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlcnMgKHhQU1IpLg0KKyAqLw0KK3R5cGVkZWYgdW5pb24NCit7DQorICAgIHN0cnVjdA0KKyAgICB7DQorICAgICAgICB1aW50MzJfdCBJU1I6IDk7ICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLw0KKyAgICAgICAgdWludDMyX3QgX3Jlc2VydmVkMDogNzsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMTUgIFJlc2VydmVkICovDQorICAgICAgICB1aW50MzJfdCBHRTogNDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6IDE2Li4xOSAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIGZsYWdzICovDQorICAgICAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOiA0OyAgICAgICAgICAgICAgLyohPCBiaXQ6IDIwLi4yMyAgUmVzZXJ2ZWQgKi8NCisgICAgICAgIHVpbnQzMl90IFQ6IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI0ICBUaHVtYiBiaXQgICAgICAgIChyZWFkIDApICovDQorICAgICAgICB1aW50MzJfdCBJVDogMjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6IDI1Li4yNiAgc2F2ZWQgSVQgc3RhdGUgICAocmVhZCAwKSAqLw0KKyAgICAgICAgdWludDMyX3QgUTogMTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjcgIFNhdHVyYXRpb24gY29uZGl0aW9uIGZsYWcgKi8NCisgICAgICAgIHVpbnQzMl90IFY6IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI4ICBPdmVyZmxvdyBjb25kaXRpb24gY29kZSBmbGFnICovDQorICAgICAgICB1aW50MzJfdCBDOiAxOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLw0KKyAgICAgICAgdWludDMyX3QgWjogMTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLw0KKyAgICAgICAgdWludDMyX3QgTjogMTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzEgIE5lZ2F0aXZlIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8NCisgICAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8NCisgICAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8NCit9IHhQU1JfVHlwZTsNCisNCisvKiB4UFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSB4UFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIFBvc2l0aW9uICovDQorI2RlZmluZSB4UFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIE1hc2sgKi8NCisNCisjZGVmaW5lIHhQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogUG9zaXRpb24gKi8NCisjZGVmaW5lIHhQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogTWFzayAqLw0KKw0KKyNkZWZpbmUgeFBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgeFBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBNYXNrICovDQorDQorI2RlZmluZSB4UFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIFBvc2l0aW9uICovDQorI2RlZmluZSB4UFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIE1hc2sgKi8NCisNCisjZGVmaW5lIHhQU1JfUV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFEgUG9zaXRpb24gKi8NCisjZGVmaW5lIHhQU1JfUV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1FfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFEgTWFzayAqLw0KKw0KKyNkZWZpbmUgeFBTUl9JVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVQgUG9zaXRpb24gKi8NCisjZGVmaW5lIHhQU1JfSVRfTXNrICAgICAgICAgICAgICAgICAgICAgICAgKDNVTCA8PCB4UFNSX0lUX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElUIE1hc2sgKi8NCisNCisjZGVmaW5lIHhQU1JfVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgUG9zaXRpb24gKi8NCisjZGVmaW5lIHhQU1JfVF9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1RfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgTWFzayAqLw0KKw0KKyNkZWZpbmUgeFBTUl9HRV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogR0UgUG9zaXRpb24gKi8NCisjZGVmaW5lIHhQU1JfR0VfTXNrICAgICAgICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IHhQU1JfR0VfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEdFIE1hc2sgKi8NCisNCisjZGVmaW5lIHhQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgeFBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IHhQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIE1hc2sgKi8NCisNCisNCisvKioNCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIENvbnRyb2wgUmVnaXN0ZXJzIChDT05UUk9MKS4NCisgKi8NCit0eXBlZGVmIHVuaW9uDQorew0KKyAgICBzdHJ1Y3QNCisgICAgew0KKyAgICAgICAgdWludDMyX3QgblBSSVY6IDE7ICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDAgIEV4ZWN1dGlvbiBwcml2aWxlZ2UgaW4gVGhyZWFkIG1vZGUgKi8NCisgICAgICAgIHVpbnQzMl90IFNQU0VMOiAxOyAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAxICBTdGFjayB0byBiZSB1c2VkICovDQorICAgICAgICB1aW50MzJfdCBGUENBOiAxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMiAgRlAgZXh0ZW5zaW9uIGFjdGl2ZSBmbGFnICovDQorICAgICAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOiAyOTsgICAgICAgICAgICAgLyohPCBiaXQ6ICAzLi4zMSAgUmVzZXJ2ZWQgKi8NCisgICAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8NCisgICAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8NCit9IENPTlRST0xfVHlwZTsNCisNCisvKiBDT05UUk9MIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBDT05UUk9MX0ZQQ0FfUG9zICAgICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBGUENBIFBvc2l0aW9uICovDQorI2RlZmluZSBDT05UUk9MX0ZQQ0FfTXNrICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQ09OVFJPTF9GUENBX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBGUENBIE1hc2sgKi8NCisNCisjZGVmaW5lIENPTlRST0xfU1BTRUxfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IFNQU0VMIFBvc2l0aW9uICovDQorI2RlZmluZSBDT05UUk9MX1NQU0VMX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgQ09OVFJPTF9TUFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTUFNFTCBNYXNrICovDQorDQorI2RlZmluZSBDT05UUk9MX25QUklWX1BvcyAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBuUFJJViBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ09OVFJPTF9uUFJJVl9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgQ09OVFJPTF9uUFJJVl9Qb3MqLykgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogblBSSVYgTWFzayAqLw0KKw0KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NPUkUgKi8NCisNCisNCisvKioNCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXINCisgIFxkZWZncm91cCAgIENNU0lTX05WSUMgIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykNCisgIFxicmllZiAgICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBOVklDIFJlZ2lzdGVycw0KKyAgQHsNCisgKi8NCisNCisvKioNCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBfX0lPTSB1aW50MzJfdCBJU0VSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIEludGVycnVwdCBTZXQgRW5hYmxlIFJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVEMFsyNFVdOw0KKyAgICBfX0lPTSB1aW50MzJfdCBJQ0VSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODAgKFIvVykgIEludGVycnVwdCBDbGVhciBFbmFibGUgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgUlNFUlZFRDFbMjRVXTsNCisgICAgX19JT00gdWludDMyX3QgSVNQUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IFBlbmRpbmcgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQyWzI0VV07DQorICAgIF9fSU9NIHVpbnQzMl90IElDUFJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDE4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIFBlbmRpbmcgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQzWzI0VV07DQorICAgIF9fSU9NIHVpbnQzMl90IElBQlJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDIwMCAoUi9XKSAgSW50ZXJydXB0IEFjdGl2ZSBiaXQgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQ0WzU2VV07DQorICAgIF9fSU9NIHVpbnQ4X3QgIElQWzI0MFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwMCAoUi9XKSAgSW50ZXJydXB0IFByaW9yaXR5IFJlZ2lzdGVyICg4Qml0IHdpZGUpICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVENVs2NDRVXTsNCisgICAgX19PTSAgdWludDMyX3QgU1RJUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTAwICggL1cpICBTb2Z0d2FyZSBUcmlnZ2VyIEludGVycnVwdCBSZWdpc3RlciAqLw0KK30gIE5WSUNfVHlwZTsNCisNCisvKiBTb2Z0d2FyZSBUcmlnZ2VyZWQgSW50ZXJydXB0IFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBOVklDX1NUSVJfSU5USURfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTVElSOiBJTlRMSU5FU05VTSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTlZJQ19TVElSX0lOVElEX01zayAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IE5WSUNfU1RJUl9JTlRJRF9Qb3MqLykgICAgICAgIC8qITwgU1RJUjogSU5UTElORVNOVU0gTWFzayAqLw0KKw0KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX05WSUMgKi8NCisNCisNCisvKioNCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyDQorICBcZGVmZ3JvdXAgQ01TSVNfU0NCICAgICBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKQ0KKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayBSZWdpc3RlcnMNCisgIEB7DQorICovDQorDQorLyoqDQorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIF9fSU0gIHVpbnQzMl90IENQVUlEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgQ1BVSUQgQmFzZSBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBJQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEludGVycnVwdCBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBWVE9SOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFZlY3RvciBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgQUlSQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgU0NSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBDQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIENvbmZpZ3VyYXRpb24gQ29udHJvbCBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50OF90DQorICAgIFNIUFsxMlVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxOCAoUi9XKSAgU3lzdGVtIEhhbmRsZXJzIFByaW9yaXR5IFJlZ2lzdGVycyAoNC03LCA4LTExLCAxMi0xNSkgKi8NCisgICAgX19JT00gdWludDMyX3QgU0hDU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBDRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjggKFIvVykgIENvbmZpZ3VyYWJsZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgSEZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDJDIChSL1cpICBIYXJkRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IERGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzMCAoUi9XKSAgRGVidWcgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IE1NRkFSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzNCAoUi9XKSAgTWVtTWFuYWdlIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgQkZBUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM4IChSL1cpICBCdXNGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IEFGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzQyAoUi9XKSAgQXV4aWxpYXJ5IEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBQRlJbMlVdOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDAgKFIvICkgIFByb2Nlc3NvciBGZWF0dXJlIFJlZ2lzdGVyICovDQorICAgIF9fSU0gIHVpbnQzMl90IERGUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0OCAoUi8gKSAgRGVidWcgRmVhdHVyZSBSZWdpc3RlciAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBBRFI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNEMgKFIvICkgIEF1eGlsaWFyeSBGZWF0dXJlIFJlZ2lzdGVyICovDQorICAgIF9fSU0gIHVpbnQzMl90IE1NRlJbNFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1MCAoUi8gKSAgTWVtb3J5IE1vZGVsIEZlYXR1cmUgUmVnaXN0ZXIgKi8NCisgICAgX19JTSAgdWludDMyX3QgSVNBUls1VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDYwIChSLyApICBJbnN0cnVjdGlvbiBTZXQgQXR0cmlidXRlcyBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDBbNVVdOw0KKyAgICBfX0lPTSB1aW50MzJfdCBDUEFDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODggKFIvVykgIENvcHJvY2Vzc29yIEFjY2VzcyBDb250cm9sIFJlZ2lzdGVyICovDQorfSBTQ0JfVHlwZTsNCisNCisvKiBTQ0IgQ1BVSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Nc2sgICAgICAgICAgKDB4RkZVTCA8PCBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfUG9zKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfUG9zICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQ1BVSURfVkFSSUFOVF9Nc2sgICAgICAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1BVSURfVkFSSUFOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFZBUklBTlQgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9DUFVJRF9BUkNISVRFQ1RVUkVfTXNrICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9BUkNISVRFQ1RVUkVfUG9zKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogQVJDSElURUNUVVJFIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fUG9zICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQ1BVSURfUEFSVE5PX01zayAgICAgICAgICAgICAgICgweEZGRlVMIDw8IFNDQl9DUFVJRF9QQVJUTk9fUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFBBUlROTyBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fTXNrICAgICAgICAgICAgICgweEZVTCAvKjw8IFNDQl9DUFVJRF9SRVZJU0lPTl9Qb3MqLykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIE1hc2sgKi8NCisNCisvKiBTQ0IgSW50ZXJydXB0IENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBOTUlQRU5EU0VUIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfSUNTUl9OTUlQRU5EU0VUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogTk1JUEVORFNFVCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZTRVRfUG9zICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWU0VUIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZTRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWU0VUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVkNMUl9Qb3MgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZDTFIgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVkNMUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1ZDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZDTFIgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUU0VUX1BvcyAgICAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVFNFVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVFNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVFNFVCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RDTFJfUG9zICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUQ0xSIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNUQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUQ0xSIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zICAgICAgICAgICAgMjNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQUkVFTVBUIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfSUNTUl9JU1JQUkVFTVBUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUFJFRU1QVCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcyAgICAgICAgICAgIDIyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUEVORElORyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUEVORElOR19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBFTkRJTkcgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfUG9zICAgICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Nc2sgICAgICAgICAgICgweDFGRlVMIDw8IFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX1BvcykgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0lDU1JfUkVUVE9CQVNFX1BvcyAgICAgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFJFVFRPQkFTRSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0lDU1JfUkVUVE9CQVNFX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1JFVFRPQkFTRV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFJFVFRPQkFTRSBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVEFDVElWRV9Nc2sgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zKi8pICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RBQ1RJVkUgTWFzayAqLw0KKw0KKy8qIFNDQiBWZWN0b3IgVGFibGUgT2Zmc2V0IFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfUG9zICAgICAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfTXNrICAgICAgICAgICAgICAgICgweDFGRkZGRkZVTCA8PCBTQ0JfVlRPUl9UQkxPRkZfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIE1hc2sgKi8NCisNCisvKiBTQ0IgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZX01zayAgICAgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWSBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfTXNrICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zKSAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zICAgICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQUlSQ1JfRU5ESUFORVNTX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX0VORElBTkVTU19Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IEVORElBTkVTUyBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFBSSUdST1VQIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrICAgICAgICAgICAgICg3VUwgPDwgU0NCX0FJUkNSX1BSSUdST1VQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFBSSUdST1VQIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Nc2sgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUUkVTRVQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUUkVTRVRfTXNrICAgICAgICAgICAgKDFVTCAvKjw8IFNDQl9BSVJDUl9WRUNUUkVTRVRfUG9zKi8pICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVFJFU0VUIE1hc2sgKi8NCisNCisvKiBTQ0IgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0VWT05QRU5EX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX1BvcyAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBERUVQX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQT05FWElUIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0NSX1NMRUVQT05FWElUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUE9ORVhJVCBNYXNrICovDQorDQorLyogU0NCIENvbmZpZ3VyYXRpb24gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Qb3MgICAgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1NUS0FMSUdOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9DQ1JfQkZIRk5NSUdOX1BvcyAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IEJGSEZOTUlHTiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0NDUl9CRkhGTk1JR05fTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfQkZIRk5NSUdOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogQkZIRk5NSUdOIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9DQ1JfRElWXzBfVFJQX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IERJVl8wX1RSUCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0NDUl9ESVZfMF9UUlBfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfRElWXzBfVFJQX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogRElWXzBfVFJQIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfUG9zICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfQ0NSX1VTRVJTRVRNUEVORF9Qb3MgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVU0VSU0VUTVBFTkQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9DQ1JfVVNFUlNFVE1QRU5EX01zayAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VTRVJTRVRNUEVORF9Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVTRVJTRVRNUEVORCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX1BvcyAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBOT05CQVNFVEhSREVOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Nc2sgICAgICAgICAoMVVMIC8qPDwgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Qb3MqLykgICAgICAgIC8qITwgU0NCIENDUjogTk9OQkFTRVRIUkRFTkEgTWFzayAqLw0KKw0KKy8qIFNDQiBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcyAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEVOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9VU0dGQVVMVEVOQV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEVOQSBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxURU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX0JVU0ZBVUxURU5BX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxURU5BIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfTUVNRkFVTFRFTkFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExQRU5ERURfTXNrICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMUEVOREVEIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MgICAgICAgMTRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRQRU5ERUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Nc2sgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRQRU5ERURfUG9zKSAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRQRU5ERUQgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcyAgICAgICAxM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVFBFTkRFRCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NRU1GQVVMVFBFTkRFRF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVFBFTkRFRCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUUEVOREVEIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfTXNrICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxUUEVOREVEX1BvcykgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUUEVOREVEIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TSENTUl9TWVNUSUNLQUNUX1BvcyAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1lTVElDS0FDVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TWVNUSUNLQUNUX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTWVNUSUNLQUNUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfUG9zICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0hDU1JfUEVORFNWQUNUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1BFTkRTVkFDVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFBFTkRTVkFDVCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfU0hDU1JfTU9OSVRPUkFDVF9Qb3MgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1PTklUT1JBQ1QgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9TSENTUl9NT05JVE9SQUNUX01zayAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfTU9OSVRPUkFDVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTU9OSVRPUkFDVCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX1BvcyAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTEFDVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TVkNBTExBQ1RfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExBQ1QgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcyAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEFDVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9VU0dGQVVMVEFDVF9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEFDVCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfUG9zICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUQUNUIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX0JVU0ZBVUxUQUNUX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUQUNUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRBQ1QgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Nc2sgICAgICAgICAgKDFVTCAvKjw8IFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Qb3MqLykgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRBQ1QgTWFzayAqLw0KKw0KKy8qIFNDQiBDb25maWd1cmFibGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBTQ0JfQ0ZTUl9VU0dGQVVMVFNSX1BvcyAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogVXNhZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQ0ZTUl9VU0dGQVVMVFNSX01zayAgICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQ0ZTUl9VU0dGQVVMVFNSX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogVXNhZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9DRlNSX0JVU0ZBVUxUU1JfUG9zICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBCdXMgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQ0ZTUl9CVVNGQVVMVFNSX01zayAgICAgICAgICAgICgweEZGVUwgPDwgU0NCX0NGU1JfQlVTRkFVTFRTUl9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogQnVzIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfQ0ZTUl9NRU1GQVVMVFNSX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogTWVtb3J5IE1hbmFnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9DRlNSX01FTUZBVUxUU1JfTXNrICAgICAgICAgICAgKDB4RkZVTCAvKjw8IFNDQl9DRlNSX01FTUZBVUxUU1JfUG9zKi8pICAgICAgICAvKiE8IFNDQiBDRlNSOiBNZW1vcnkgTWFuYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovDQorDQorLyogU0NCIEhhcmQgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBTQ0JfSEZTUl9ERUJVR0VWVF9Qb3MgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogREVCVUdFVlQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9IRlNSX0RFQlVHRVZUX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9ERUJVR0VWVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBERUJVR0VWVCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfSEZTUl9GT1JDRURfUG9zICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogRk9SQ0VEIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfSEZTUl9GT1JDRURfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0hGU1JfRk9SQ0VEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogRk9SQ0VEIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9IRlNSX1ZFQ1RUQkxfUG9zICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBWRUNUVEJMIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfSEZTUl9WRUNUVEJMX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0hGU1JfVkVDVFRCTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogVkVDVFRCTCBNYXNrICovDQorDQorLyogU0NCIERlYnVnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgU0NCX0RGU1JfRVhURVJOQUxfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEVYVEVSTkFMIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfREZTUl9FWFRFUk5BTF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfRVhURVJOQUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRVhURVJOQUwgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0RGU1JfVkNBVENIX1BvcyAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IFZDQVRDSCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0RGU1JfVkNBVENIX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX1ZDQVRDSF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IFZDQVRDSCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfREZTUl9EV1RUUkFQX1BvcyAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRFdUVFJBUCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0RGU1JfRFdUVFJBUF9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX0RXVFRSQVBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IERXVFRSQVAgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0RGU1JfQktQVF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEJLUFQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9ERlNSX0JLUFRfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9CS1BUX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBCS1BUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9ERlNSX0hBTFRFRF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBIQUxURUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9ERlNSX0hBTFRFRF9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IFNDQl9ERlNSX0hBTFRFRF9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBIQUxURUQgTWFzayAqLw0KKw0KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDQiAqLw0KKw0KKw0KKy8qKg0KKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXINCisgIFxkZWZncm91cCBDTVNJU19TQ25TQ0IgU3lzdGVtIENvbnRyb2xzIG5vdCBpbiBTQ0IgKFNDblNDQikNCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2wgYW5kIElEIFJlZ2lzdGVyIG5vdCBpbiB0aGUgU0NCDQorICBAew0KKyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBDb250cm9sIGFuZCBJRCBSZWdpc3RlciBub3QgaW4gdGhlIFNDQi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDMyX3QgUkVTRVJWRUQwWzFVXTsNCisgICAgX19JTSAgdWludDMyX3QgSUNUUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSLyApICBJbnRlcnJ1cHQgQ29udHJvbGxlciBUeXBlIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IEFDVExSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIgKi8NCit9IFNDblNDQl9UeXBlOw0KKw0KKy8qIEludGVycnVwdCBDb250cm9sbGVyIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX1BvcyAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElDVFI6IElOVExJTkVTTlVNIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ25TQ0JfSUNUUl9JTlRMSU5FU05VTV9Nc2sgICAgICAgICgweEZVTCAvKjw8IFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX1BvcyovKSAgLyohPCBJQ1RSOiBJTlRMSU5FU05VTSBNYXNrICovDQorDQorLyogQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNPT0ZQX1BvcyAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNPT0ZQIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTT09GUF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NuU0NCX0FDVExSX0RJU09PRlBfUG9zKSAgICAgICAgICAgLyohPCBBQ1RMUjogRElTT09GUCBNYXNrICovDQorDQorI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTRlBDQV9Qb3MgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRElTRlBDQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0ZQQ0FfTXNrICAgICAgICAgICAoMVVMIDw8IFNDblNDQl9BQ1RMUl9ESVNGUENBX1BvcykgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0ZQQ0EgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0ZPTERfUG9zICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0ZPTEQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNGT0xEX01zayAgICAgICAgICAgKDFVTCA8PCBTQ25TQ0JfQUNUTFJfRElTRk9MRF9Qb3MpICAgICAgICAgICAvKiE8IEFDVExSOiBESVNGT0xEIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNERUZXQlVGX1BvcyAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNERUZXQlVGIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTREVGV0JVRl9Nc2sgICAgICAgICgxVUwgPDwgU0NuU0NCX0FDVExSX0RJU0RFRldCVUZfUG9zKSAgICAgICAgLyohPCBBQ1RMUjogRElTREVGV0JVRiBNYXNrICovDQorDQorI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTTUNZQ0lOVF9Qb3MgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRElTTUNZQ0lOVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU01DWUNJTlRfTXNrICAgICAgICAoMVVMIC8qPDwgU0NuU0NCX0FDVExSX0RJU01DWUNJTlRfUG9zKi8pICAgIC8qITwgQUNUTFI6IERJU01DWUNJTlQgTWFzayAqLw0KKw0KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDbm90U0NCICovDQorDQorDQorLyoqDQorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3Rlcg0KKyAgXGRlZmdyb3VwIENNU0lTX1N5c1RpY2sgICAgIFN5c3RlbSBUaWNrIFRpbWVyIChTeXNUaWNrKQ0KKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gVGltZXIgUmVnaXN0ZXJzLg0KKyAgQHsNCisgKi8NCisNCisvKioNCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gVGltZXIgKFN5c1RpY2spLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIFN5c1RpY2sgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IExPQUQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgU3lzVGljayBSZWxvYWQgVmFsdWUgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgVkFMOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBTeXNUaWNrIEN1cnJlbnQgVmFsdWUgUmVnaXN0ZXIgKi8NCisgICAgX19JTSAgdWludDMyX3QgQ0FMSUI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSLyApICBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyICovDQorfSBTeXNUaWNrX1R5cGU7DQorDQorLyogU3lzVGljayBDb250cm9sIC8gU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgTWFzayAqLw0KKw0KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgUG9zaXRpb24gKi8NCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIE1hc2sgKi8NCisNCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcyAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcykgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIE1hc2sgKi8NCisNCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovDQorI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICgxVUwgLyo8PCBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBNYXNrICovDQorDQorLyogU3lzVGljayBSZWxvYWQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIFBvc2l0aW9uICovDQorI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBNYXNrICovDQorDQorLyogU3lzVGljayBDdXJyZW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU3lzVGlja19WQUxfQ1VSUkVOVF9Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zKi8pICAgIC8qITwgU3lzVGljayBWQUw6IENVUlJFTlQgTWFzayAqLw0KKw0KKy8qIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIFBvc2l0aW9uICovDQorI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX01zayAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBNYXNrICovDQorDQorI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfUG9zICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIFBvc2l0aW9uICovDQorI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfTXNrICAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9TS0VXX1BvcykgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIE1hc2sgKi8NCisNCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIFBvc2l0aW9uICovDQorI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19DQUxJQl9URU5NU19Qb3MqLykgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBNYXNrICovDQorDQorLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU3lzVGljayAqLw0KKw0KKw0KKy8qKg0KKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXINCisgIFxkZWZncm91cCBDTVNJU19JVE0gICAgIEluc3RydW1lbnRhdGlvbiBUcmFjZSBNYWNyb2NlbGwgKElUTSkNCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCAoSVRNKQ0KKyAgQHsNCisgKi8NCisNCisvKioNCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIFJlZ2lzdGVyIChJVE0pLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBfX09NICB1bmlvbg0KKyAgICB7DQorICAgICAgICBfX09NICB1aW50OF90ICAgIHU4OyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCA4LWJpdCAqLw0KKyAgICAgICAgX19PTSAgdWludDE2X3QgICB1MTY7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgMTYtYml0ICovDQorICAgICAgICBfX09NICB1aW50MzJfdCAgIHUzMjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCAzMi1iaXQgKi8NCisgICAgfSAgUE9SVCBbMzJVXTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCBSZWdpc3RlcnMgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQwWzg2NFVdOw0KKyAgICBfX0lPTSB1aW50MzJfdCBURVI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFMDAgKFIvVykgIElUTSBUcmFjZSBFbmFibGUgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQxWzE1VV07DQorICAgIF9fSU9NIHVpbnQzMl90IFRQUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEU0MCAoUi9XKSAgSVRNIFRyYWNlIFByaXZpbGVnZSBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDJbMTVVXTsNCisgICAgX19JT00gdWludDMyX3QgVENSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTgwIChSL1cpICBJVE0gVHJhY2UgQ29udHJvbCBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDNbMjlVXTsNCisgICAgX19PTSAgdWludDMyX3QgSVdSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUY4ICggL1cpICBJVE0gSW50ZWdyYXRpb24gV3JpdGUgUmVnaXN0ZXIgKi8NCisgICAgX19JTSAgdWludDMyX3QgSVJSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUZDIChSLyApICBJVE0gSW50ZWdyYXRpb24gUmVhZCBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBJTUNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGMDAgKFIvVykgIElUTSBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQ0WzQzVV07DQorICAgIF9fT00gIHVpbnQzMl90IExBUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZCMCAoIC9XKSAgSVRNIExvY2sgQWNjZXNzIFJlZ2lzdGVyICovDQorICAgIF9fSU0gIHVpbnQzMl90IExTUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZCNCAoUi8gKSAgSVRNIExvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVENVs2VV07DQorICAgIF9fSU0gIHVpbnQzMl90IFBJRDQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEMCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzQgKi8NCisgICAgX19JTSAgdWludDMyX3QgUElENTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkQ0IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNSAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBQSUQ2OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRDggKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM2ICovDQorICAgIF9fSU0gIHVpbnQzMl90IFBJRDc7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEQyAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzcgKi8NCisgICAgX19JTSAgdWludDMyX3QgUElEMDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkUwIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMCAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBQSUQxOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRTQgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMxICovDQorICAgIF9fSU0gIHVpbnQzMl90IFBJRDI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFOCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzIgKi8NCisgICAgX19JTSAgdWludDMyX3QgUElEMzsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkVDIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMyAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBDSUQwOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRjAgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMwICovDQorICAgIF9fSU0gIHVpbnQzMl90IENJRDE7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGNCAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzEgKi8NCisgICAgX19JTSAgdWludDMyX3QgQ0lEMjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkY4IChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMiAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBDSUQzOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRkMgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMzICovDQorfSBJVE1fVHlwZTsNCisNCisvKiBJVE0gVHJhY2UgUHJpdmlsZWdlIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBJVE1fVFBSX1BSSVZNQVNLX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVFBSOiBQUklWTUFTSyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVRNX1RQUl9QUklWTUFTS19Nc2sgICAgICAgICAgICAgICAoMHhGVUwgLyo8PCBJVE1fVFBSX1BSSVZNQVNLX1BvcyovKSAgICAgICAgICAgIC8qITwgSVRNIFRQUjogUFJJVk1BU0sgTWFzayAqLw0KKw0KKy8qIElUTSBUcmFjZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBJVE1fVENSX0JVU1lfUG9zICAgICAgICAgICAgICAgICAgIDIzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBCVVNZIFBvc2l0aW9uICovDQorI2RlZmluZSBJVE1fVENSX0JVU1lfTXNrICAgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9CVVNZX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBCVVNZIE1hc2sgKi8NCisNCisjZGVmaW5lIElUTV9UQ1JfVHJhY2VCdXNJRF9Qb3MgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEFUQklEIFBvc2l0aW9uICovDQorI2RlZmluZSBJVE1fVENSX1RyYWNlQnVzSURfTXNrICAgICAgICAgICAgICgweDdGVUwgPDwgSVRNX1RDUl9UcmFjZUJ1c0lEX1BvcykgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBBVEJJRCBNYXNrICovDQorDQorI2RlZmluZSBJVE1fVENSX0dUU0ZSRVFfUG9zICAgICAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBHbG9iYWwgdGltZXN0YW1wIGZyZXF1ZW5jeSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVRNX1RDUl9HVFNGUkVRX01zayAgICAgICAgICAgICAgICAoM1VMIDw8IElUTV9UQ1JfR1RTRlJFUV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogR2xvYmFsIHRpbWVzdGFtcCBmcmVxdWVuY3kgTWFzayAqLw0KKw0KKyNkZWZpbmUgSVRNX1RDUl9UU1ByZXNjYWxlX1BvcyAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNQcmVzY2FsZSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVRNX1RDUl9UU1ByZXNjYWxlX01zayAgICAgICAgICAgICAoM1VMIDw8IElUTV9UQ1JfVFNQcmVzY2FsZV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNQcmVzY2FsZSBNYXNrICovDQorDQorI2RlZmluZSBJVE1fVENSX1NXT0VOQV9Qb3MgICAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTV09FTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIElUTV9UQ1JfU1dPRU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX1NXT0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNXT0VOQSBNYXNrICovDQorDQorI2RlZmluZSBJVE1fVENSX0RXVEVOQV9Qb3MgICAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBEV1RFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIElUTV9UQ1JfRFdURU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX0RXVEVOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IERXVEVOQSBNYXNrICovDQorDQorI2RlZmluZSBJVE1fVENSX1NZTkNFTkFfUG9zICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTWU5DRU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBJVE1fVENSX1NZTkNFTkFfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9TWU5DRU5BX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTWU5DRU5BIE1hc2sgKi8NCisNCisjZGVmaW5lIElUTV9UQ1JfVFNFTkFfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTRU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBJVE1fVENSX1RTRU5BX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9UU0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU0VOQSBNYXNrICovDQorDQorI2RlZmluZSBJVE1fVENSX0lUTUVOQV9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBJVE0gRW5hYmxlIGJpdCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVRNX1RDUl9JVE1FTkFfTXNrICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX1RDUl9JVE1FTkFfUG9zKi8pICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogSVRNIEVuYWJsZSBiaXQgTWFzayAqLw0KKw0KKy8qIElUTSBJbnRlZ3JhdGlvbiBXcml0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgSVRNX0lXUl9BVFZBTElETV9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIElXUjogQVRWQUxJRE0gUG9zaXRpb24gKi8NCisjZGVmaW5lIElUTV9JV1JfQVRWQUxJRE1fTXNrICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9JV1JfQVRWQUxJRE1fUG9zKi8pICAgICAgICAgICAgICAvKiE8IElUTSBJV1I6IEFUVkFMSURNIE1hc2sgKi8NCisNCisvKiBJVE0gSW50ZWdyYXRpb24gUmVhZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgSVRNX0lSUl9BVFJFQURZTV9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIElSUjogQVRSRUFEWU0gUG9zaXRpb24gKi8NCisjZGVmaW5lIElUTV9JUlJfQVRSRUFEWU1fTXNrICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9JUlJfQVRSRUFEWU1fUG9zKi8pICAgICAgICAgICAgICAvKiE8IElUTSBJUlI6IEFUUkVBRFlNIE1hc2sgKi8NCisNCisvKiBJVE0gSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBJVE1fSU1DUl9JTlRFR1JBVElPTl9Qb3MgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gSU1DUjogSU5URUdSQVRJT04gUG9zaXRpb24gKi8NCisjZGVmaW5lIElUTV9JTUNSX0lOVEVHUkFUSU9OX01zayAgICAgICAgICAgKDFVTCAvKjw8IElUTV9JTUNSX0lOVEVHUkFUSU9OX1BvcyovKSAgICAgICAgICAvKiE8IElUTSBJTUNSOiBJTlRFR1JBVElPTiBNYXNrICovDQorDQorLyogSVRNIExvY2sgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBJVE1fTFNSX0J5dGVBY2NfUG9zICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBCeXRlQWNjIFBvc2l0aW9uICovDQorI2RlZmluZSBJVE1fTFNSX0J5dGVBY2NfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX0xTUl9CeXRlQWNjX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBCeXRlQWNjIE1hc2sgKi8NCisNCisjZGVmaW5lIElUTV9MU1JfQWNjZXNzX1BvcyAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEFjY2VzcyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVRNX0xTUl9BY2Nlc3NfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9MU1JfQWNjZXNzX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQWNjZXNzIE1hc2sgKi8NCisNCisjZGVmaW5lIElUTV9MU1JfUHJlc2VudF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IFByZXNlbnQgUG9zaXRpb24gKi8NCisjZGVmaW5lIElUTV9MU1JfUHJlc2VudF9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9MU1JfUHJlc2VudF9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IFByZXNlbnQgTWFzayAqLw0KKw0KKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfSVRNICovDQorDQorDQorLyoqDQorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3Rlcg0KKyAgXGRlZmdyb3VwIENNU0lTX0RXVCAgICAgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSAoRFdUKQ0KKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIChEV1QpDQorICBAew0KKyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgUmVnaXN0ZXIgKERXVCkuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgQ29udHJvbCBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBDWUNDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEN5Y2xlIENvdW50IFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IENQSUNOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgQ1BJIENvdW50IFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IEVYQ0NOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRXhjZXB0aW9uIE92ZXJoZWFkIENvdW50IFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IFNMRUVQQ05UOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgU2xlZXAgQ291bnQgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgTFNVQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBMU1UgQ291bnQgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgRk9MRENOVDsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBGb2xkZWQtaW5zdHJ1Y3Rpb24gQ291bnQgUmVnaXN0ZXIgKi8NCisgICAgX19JTSAgdWludDMyX3QgUENTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDFDIChSLyApICBQcm9ncmFtIENvdW50ZXIgU2FtcGxlIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IENPTVAwOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAwICovDQorICAgIF9fSU9NIHVpbnQzMl90IE1BU0swOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgTWFzayBSZWdpc3RlciAwICovDQorICAgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMDsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyOCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMCAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDBbMVVdOw0KKyAgICBfX0lPTSB1aW50MzJfdCBDT01QMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMSAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBNQVNLMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMSAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjE7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDEgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQxWzFVXTsNCisgICAgX19JT00gdWludDMyX3QgQ09NUDI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDIgKi8NCisgICAgX19JT00gdWludDMyX3QgTUFTSzI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQ0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDIgKi8NCisgICAgX19JT00gdWludDMyX3QgRlVOQ1RJT04yOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQ4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAyICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVEMlsxVV07DQorICAgIF9fSU9NIHVpbnQzMl90IENPTVAzOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1MCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAzICovDQorICAgIF9fSU9NIHVpbnQzMl90IE1BU0szOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1NCAoUi9XKSAgTWFzayBSZWdpc3RlciAzICovDQorICAgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMzsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1OCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMyAqLw0KK30gRFdUX1R5cGU7DQorDQorLyogRFdUIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIERXVF9DVFJMX05VTUNPTVBfUG9zICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOVU1DT01QIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9OVU1DT01QX01zayAgICAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9OVU1DT01QX1BvcykgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTlVNQ09NUCBNYXNrICovDQorDQorI2RlZmluZSBEV1RfQ1RSTF9OT1RSQ1BLVF9Qb3MgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9UUkNQS1QgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX05PVFJDUEtUX01zayAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PVFJDUEtUX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1RSQ1BLVCBNYXNrICovDQorDQorI2RlZmluZSBEV1RfQ1RSTF9OT0VYVFRSSUdfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9FWFRUUklHIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9OT0VYVFRSSUdfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT0VYVFRSSUdfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9FWFRUUklHIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX05PQ1lDQ05UX1BvcyAgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0NZQ0NOVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0NUUkxfTk9DWUNDTlRfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9DWUNDTlRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PQ1lDQ05UIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX05PUFJGQ05UX1BvcyAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1BSRkNOVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0NUUkxfTk9QUkZDTlRfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9QUkZDTlRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PUFJGQ05UIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX0NZQ0VWVEVOQV9Qb3MgICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNFVlRFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX0NZQ0VWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NZQ0VWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNFVlRFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfRk9MREVWVEVOQV9Qb3MgICAgICAgICAgICAyMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEZPTERFVlRFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX0ZPTERFVlRFTkFfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0ZPTERFVlRFTkFfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBGT0xERVZURU5BIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX0xTVUVWVEVOQV9Qb3MgICAgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBMU1VFVlRFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX0xTVUVWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0xTVUVWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBMU1VFVlRFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfU0xFRVBFVlRFTkFfUG9zICAgICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFNMRUVQRVZURU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Nc2sgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Qb3MpICAgICAgICAgLyohPCBEV1QgQ1RSTDogU0xFRVBFVlRFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfRVhDRVZURU5BX1BvcyAgICAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ0VWVEVOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0NUUkxfRVhDRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRVhDRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ0VWVEVOQSBNYXNrICovDQorDQorI2RlZmluZSBEV1RfQ1RSTF9DUElFVlRFTkFfUG9zICAgICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1BJRVZURU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9DUElFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DUElFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1BJRVZURU5BIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX0VYQ1RSQ0VOQV9Qb3MgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENUUkNFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX0VYQ1RSQ0VOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0VYQ1RSQ0VOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENUUkNFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfUENTQU1QTEVOQV9Qb3MgICAgICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBDU0FNUExFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX1BDU0FNUExFTkFfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX1BDU0FNUExFTkFfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQQ1NBTVBMRU5BIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX1NZTkNUQVBfUG9zICAgICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBTWU5DVEFQIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9TWU5DVEFQX01zayAgICAgICAgICAgICAgICgweDNVTCA8PCBEV1RfQ1RSTF9TWU5DVEFQX1BvcykgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogU1lOQ1RBUCBNYXNrICovDQorDQorI2RlZmluZSBEV1RfQ1RSTF9DWUNUQVBfUG9zICAgICAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDVEFQIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9DWUNUQVBfTXNrICAgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DWUNUQVBfUG9zKSAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDVEFQIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX1BPU1RJTklUX1BvcyAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUSU5JVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0NUUkxfUE9TVElOSVRfTXNrICAgICAgICAgICAgICAoMHhGVUwgPDwgRFdUX0NUUkxfUE9TVElOSVRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RJTklUIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX1BPU1RQUkVTRVRfUG9zICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUUFJFU0VUIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9QT1NUUFJFU0VUX01zayAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9QT1NUUFJFU0VUX1BvcykgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVFBSRVNFVCBNYXNrICovDQorDQorI2RlZmluZSBEV1RfQ1RSTF9DWUNDTlRFTkFfUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDQ05URU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9DWUNDTlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCAvKjw8IERXVF9DVFJMX0NZQ0NOVEVOQV9Qb3MqLykgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDQ05URU5BIE1hc2sgKi8NCisNCisvKiBEV1QgQ1BJIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBEV1RfQ1BJQ05UX0NQSUNOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1BJQ05UOiBDUElDTlQgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DUElDTlRfQ1BJQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9DUElDTlRfQ1BJQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBDUElDTlQ6IENQSUNOVCBNYXNrICovDQorDQorLyogRFdUIEV4Y2VwdGlvbiBPdmVyaGVhZCBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgRFdUX0VYQ0NOVF9FWENDTlRfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEVYQ0NOVDogRVhDQ05UIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfRVhDQ05UX0VYQ0NOVF9Nc2sgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfRVhDQ05UX0VYQ0NOVF9Qb3MqLykgICAgICAgLyohPCBEV1QgRVhDQ05UOiBFWENDTlQgTWFzayAqLw0KKw0KKy8qIERXVCBTbGVlcCBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIFNMRUVQQ05UOiBTTEVFUENOVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX01zayAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX1BvcyovKSAgIC8qITwgRFdUIFNMRUVQQ05UOiBTTEVFUENOVCBNYXNrICovDQorDQorLyogRFdUIExTVSBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgRFdUX0xTVUNOVF9MU1VDTlRfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIExTVUNOVDogTFNVQ05UIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfTFNVQ05UX0xTVUNOVF9Nc2sgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfTFNVQ05UX0xTVUNOVF9Qb3MqLykgICAgICAgLyohPCBEV1QgTFNVQ05UOiBMU1VDTlQgTWFzayAqLw0KKw0KKy8qIERXVCBGb2xkZWQtaW5zdHJ1Y3Rpb24gQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIERXVF9GT0xEQ05UX0ZPTERDTlRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGT0xEQ05UOiBGT0xEQ05UIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfRk9MRENOVF9GT0xEQ05UX01zayAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfRk9MRENOVF9GT0xEQ05UX1BvcyovKSAgICAgLyohPCBEV1QgRk9MRENOVDogRk9MRENOVCBNYXNrICovDQorDQorLyogRFdUIENvbXBhcmF0b3IgTWFzayBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgRFdUX01BU0tfTUFTS19Qb3MgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIE1BU0s6IE1BU0sgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9NQVNLX01BU0tfTXNrICAgICAgICAgICAgICAgICAgKDB4MUZVTCAvKjw8IERXVF9NQVNLX01BU0tfUG9zKi8pICAgICAgICAgICAvKiE8IERXVCBNQVNLOiBNQVNLIE1hc2sgKi8NCisNCisvKiBEV1QgQ29tcGFyYXRvciBGdW5jdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX01BVENIRURfUG9zICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBNQVRDSEVEIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfRlVOQ1RJT05fTUFUQ0hFRF9Nc2sgICAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fTUFUQ0hFRF9Qb3MpICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IE1BVENIRUQgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjFfUG9zICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIxIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMV9Nc2sgICAgICAgICgweEZVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZBRERSMV9Qb3MpICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjEgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjBfUG9zICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIwIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMF9Nc2sgICAgICAgICgweEZVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZBRERSMF9Qb3MpICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjAgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Qb3MgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVlNJWkUgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVlNJWkVfTXNrICAgICAgICAgKDB4M1VMIDw8IERXVF9GVU5DVElPTl9EQVRBVlNJWkVfUG9zKSAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZTSVpFIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9GVU5DVElPTl9MTksxRU5BX1BvcyAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTE5LMUVOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0xOSzFFTkFfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0xOSzFFTkFfUG9zKSAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBMTksxRU5BIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVk1BVENIX1BvcyAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZNQVRDSCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWTUFUQ0hfTXNrICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWTUFUQ0hfUG9zKSAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVk1BVENIIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9GVU5DVElPTl9DWUNNQVRDSF9Qb3MgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogQ1lDTUFUQ0ggUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9GVU5DVElPTl9DWUNNQVRDSF9Nc2sgICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9DWUNNQVRDSF9Qb3MpICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogQ1lDTUFUQ0ggTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Qb3MgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBFTUlUUkFOR0UgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9GVU5DVElPTl9FTUlUUkFOR0VfTXNrICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9FTUlUUkFOR0VfUG9zKSAgICAgICAvKiE8IERXVCBGVU5DVElPTjogRU1JVFJBTkdFIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9GVU5DVElPTl9GVU5DVElPTl9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogRlVOQ1RJT04gUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9GVU5DVElPTl9GVU5DVElPTl9Nc2sgICAgICAgICAgKDB4RlVMIC8qPDwgRFdUX0ZVTkNUSU9OX0ZVTkNUSU9OX1BvcyovKSAgICAvKiE8IERXVCBGVU5DVElPTjogRlVOQ1RJT04gTWFzayAqLw0KKw0KKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfRFdUICovDQorDQorDQorLyoqDQorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3Rlcg0KKyAgXGRlZmdyb3VwIENNU0lTX1RQSSAgICAgVHJhY2UgUG9ydCBJbnRlcmZhY2UgKFRQSSkNCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgVHJhY2UgUG9ydCBJbnRlcmZhY2UgKFRQSSkNCisgIEB7DQorICovDQorDQorLyoqDQorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgVHJhY2UgUG9ydCBJbnRlcmZhY2UgUmVnaXN0ZXIgKFRQSSkuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIF9fSU9NIHVpbnQzMl90IFNTUFNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgU3VwcG9ydGVkIFBhcmFsbGVsIFBvcnQgU2l6ZSBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBDU1BTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEN1cnJlbnQgUGFyYWxsZWwgUG9ydCBTaXplIFJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVEMFsyVV07DQorICAgIF9fSU9NIHVpbnQzMl90IEFDUFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgQXN5bmNocm9ub3VzIENsb2NrIFByZXNjYWxlciBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDFbNTVVXTsNCisgICAgX19JT00gdWludDMyX3QgU1BQUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MEYwIChSL1cpICBTZWxlY3RlZCBQaW4gUHJvdG9jb2wgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQyWzEzMVVdOw0KKyAgICBfX0lNICB1aW50MzJfdCBGRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDAgKFIvICkgIEZvcm1hdHRlciBhbmQgRmx1c2ggU3RhdHVzIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IEZGQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwNCAoUi9XKSAgRm9ybWF0dGVyIGFuZCBGbHVzaCBDb250cm9sIFJlZ2lzdGVyICovDQorICAgIF9fSU0gIHVpbnQzMl90IEZTQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwOCAoUi8gKSAgRm9ybWF0dGVyIFN5bmNocm9uaXphdGlvbiBDb3VudGVyIFJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVEM1s3NTlVXTsNCisgICAgX19JTSAgdWludDMyX3QgVFJJR0dFUjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUU4IChSLyApICBUUklHR0VSICovDQorICAgIF9fSU0gIHVpbnQzMl90IEZJRk8wOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVFQyAoUi8gKSAgSW50ZWdyYXRpb24gRVRNIERhdGEgKi8NCisgICAgX19JTSAgdWludDMyX3QgSVRBVEJDVFIyOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUYwIChSLyApICBJVEFUQkNUUjIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQ0WzFVXTsNCisgICAgX19JTSAgdWludDMyX3QgSVRBVEJDVFIwOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUY4IChSLyApICBJVEFUQkNUUjAgKi8NCisgICAgX19JTSAgdWludDMyX3QgRklGTzE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUZDIChSLyApICBJbnRlZ3JhdGlvbiBJVE0gRGF0YSAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBJVENUUkw7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGMDAgKFIvVykgIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDVbMzlVXTsNCisgICAgX19JT00gdWludDMyX3QgQ0xBSU1TRVQ7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkEwIChSL1cpICBDbGFpbSB0YWcgc2V0ICovDQorICAgIF9fSU9NIHVpbnQzMl90IENMQUlNQ0xSOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZBNCAoUi9XKSAgQ2xhaW0gdGFnIGNsZWFyICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVEN1s4VV07DQorICAgIF9fSU0gIHVpbnQzMl90IERFVklEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZDOCAoUi8gKSAgVFBJVV9ERVZJRCAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBERVZUWVBFOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQ0MgKFIvICkgIFRQSVVfREVWVFlQRSAqLw0KK30gVFBJX1R5cGU7DQorDQorLyogVFBJIEFzeW5jaHJvbm91cyBDbG9jayBQcmVzY2FsZXIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFRQSV9BQ1BSX1BSRVNDQUxFUl9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBBQ1BSOiBQUkVTQ0FMRVIgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9BQ1BSX1BSRVNDQUxFUl9Nc2sgICAgICAgICAgICAgKDB4MUZGRlVMIC8qPDwgVFBJX0FDUFJfUFJFU0NBTEVSX1BvcyovKSAgICAvKiE8IFRQSSBBQ1BSOiBQUkVTQ0FMRVIgTWFzayAqLw0KKw0KKy8qIFRQSSBTZWxlY3RlZCBQaW4gUHJvdG9jb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFRQSV9TUFBSX1RYTU9ERV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBTUFBSOiBUWE1PREUgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9TUFBSX1RYTU9ERV9Nc2sgICAgICAgICAgICAgICAgKDB4M1VMIC8qPDwgVFBJX1NQUFJfVFhNT0RFX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBTUFBSOiBUWE1PREUgTWFzayAqLw0KKw0KKy8qIFRQSSBGb3JtYXR0ZXIgYW5kIEZsdXNoIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgVFBJX0ZGU1JfRnROb25TdG9wX1BvcyAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0Tm9uU3RvcCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZGU1JfRnROb25TdG9wX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGU1JfRnROb25TdG9wX1BvcykgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0Tm9uU3RvcCBNYXNrICovDQorDQorI2RlZmluZSBUUElfRkZTUl9UQ1ByZXNlbnRfUG9zICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogVENQcmVzZW50IFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRkZTUl9UQ1ByZXNlbnRfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZTUl9UQ1ByZXNlbnRfUG9zKSAgICAgICAgICAgLyohPCBUUEkgRkZTUjogVENQcmVzZW50IE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GRlNSX0Z0U3RvcHBlZF9Qb3MgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdFN0b3BwZWQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9GRlNSX0Z0U3RvcHBlZF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRlNSX0Z0U3RvcHBlZF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdFN0b3BwZWQgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0ZGU1JfRmxJblByb2dfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZsSW5Qcm9nIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRkZTUl9GbEluUHJvZ19Nc2sgICAgICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9GRlNSX0ZsSW5Qcm9nX1BvcyovKSAgICAgICAgLyohPCBUUEkgRkZTUjogRmxJblByb2cgTWFzayAqLw0KKw0KKy8qIFRQSSBGb3JtYXR0ZXIgYW5kIEZsdXNoIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFRQSV9GRkNSX1RyaWdJbl9Qb3MgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBUcmlnSW4gUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9GRkNSX1RyaWdJbl9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRkNSX1RyaWdJbl9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBUcmlnSW4gTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0ZGQ1JfRW5GQ29udF9Qb3MgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IEVuRkNvbnQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9GRkNSX0VuRkNvbnRfTXNrICAgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRkNSX0VuRkNvbnRfUG9zKSAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBFbkZDb250IE1hc2sgKi8NCisNCisvKiBUUEkgVFJJR0dFUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgVFBJX1RSSUdHRVJfVFJJR0dFUl9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIFRSSUdHRVI6IFRSSUdHRVIgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9UUklHR0VSX1RSSUdHRVJfTXNrICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX1RSSUdHRVJfVFJJR0dFUl9Qb3MqLykgICAgICAvKiE8IFRQSSBUUklHR0VSOiBUUklHR0VSIE1hc2sgKi8NCisNCisvKiBUUEkgSW50ZWdyYXRpb24gRVRNIERhdGEgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKEZJRk8wKSAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX1BvcyAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fQVRWQUxJRCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fQVRWQUxJRCBNYXNrICovDQorDQorI2RlZmluZSBUUElfRklGTzBfSVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9ieXRlY291bnQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9JVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX2J5dGVjb3VudCBNYXNrICovDQorDQorI2RlZmluZSBUUElfRklGTzBfRVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9BVFZBTElEIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzBfRVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfRVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9BVFZBTElEIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0VUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fYnl0ZWNvdW50IE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0yX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTJfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMF9FVE0yX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0yIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0xX1BvcyAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTFfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMF9FVE0xX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0xIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0wX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTBfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgVFBJX0ZJRk8wX0VUTTBfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0wIE1hc2sgKi8NCisNCisvKiBUUEkgSVRBVEJDVFIyIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBUUElfSVRBVEJDVFIyX0FUUkVBRFlfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRBVEJDVFIyOiBBVFJFQURZIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfSVRBVEJDVFIyX0FUUkVBRFlfTXNrICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9JVEFUQkNUUjJfQVRSRUFEWV9Qb3MqLykgICAgLyohPCBUUEkgSVRBVEJDVFIyOiBBVFJFQURZIE1hc2sgKi8NCisNCisvKiBUUEkgSW50ZWdyYXRpb24gSVRNIERhdGEgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKEZJRk8xKSAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9BVFZBTElEX1BvcyAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fQVRWQUxJRCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0lUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fQVRWQUxJRCBNYXNrICovDQorDQorI2RlZmluZSBUUElfRklGTzFfSVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9ieXRlY291bnQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX2J5dGVjb3VudCBNYXNrICovDQorDQorI2RlZmluZSBUUElfRklGTzFfRVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9BVFZBTElEIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzFfRVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfRVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9BVFZBTElEIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fYnl0ZWNvdW50IE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0yX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTJfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMV9JVE0yX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0yIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0xX1BvcyAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTFfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMV9JVE0xX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0xIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0wX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTBfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgVFBJX0ZJRk8xX0lUTTBfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0wIE1hc2sgKi8NCisNCisvKiBUUEkgSVRBVEJDVFIwIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBUUElfSVRBVEJDVFIwX0FUUkVBRFlfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRBVEJDVFIwOiBBVFJFQURZIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfSVRBVEJDVFIwX0FUUkVBRFlfTXNrICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9JVEFUQkNUUjBfQVRSRUFEWV9Qb3MqLykgICAgLyohPCBUUEkgSVRBVEJDVFIwOiBBVFJFQURZIE1hc2sgKi8NCisNCisvKiBUUEkgSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBUUElfSVRDVFJMX01vZGVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRDVFJMOiBNb2RlIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfSVRDVFJMX01vZGVfTXNrICAgICAgICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9JVENUUkxfTW9kZV9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgSVRDVFJMOiBNb2RlIE1hc2sgKi8NCisNCisvKiBUUEkgREVWSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFRQSV9ERVZJRF9OUlpWQUxJRF9Qb3MgICAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTlJaVkFMSUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9ERVZJRF9OUlpWQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9OUlpWQUxJRF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTlJaVkFMSUQgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0RFVklEX01BTkNWQUxJRF9Qb3MgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNQU5DVkFMSUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9ERVZJRF9NQU5DVkFMSURfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9NQU5DVkFMSURfUG9zKSAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTUFOQ1ZBTElEIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9ERVZJRF9QVElOVkFMSURfUG9zICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogUFRJTlZBTElEIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfREVWSURfUFRJTlZBTElEX01zayAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfUFRJTlZBTElEX1BvcykgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IFBUSU5WQUxJRCBNYXNrICovDQorDQorI2RlZmluZSBUUElfREVWSURfTWluQnVmU3pfUG9zICAgICAgICAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1pbkJ1ZlN6IFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfREVWSURfTWluQnVmU3pfTXNrICAgICAgICAgICAgICgweDdVTCA8PCBUUElfREVWSURfTWluQnVmU3pfUG9zKSAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1pbkJ1ZlN6IE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9ERVZJRF9Bc3luQ2xrSW5fUG9zICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogQXN5bkNsa0luIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfREVWSURfQXN5bkNsa0luX01zayAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfQXN5bkNsa0luX1BvcykgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IEFzeW5DbGtJbiBNYXNrICovDQorDQorI2RlZmluZSBUUElfREVWSURfTnJUcmFjZUlucHV0X1BvcyAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE5yVHJhY2VJbnB1dCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0RFVklEX05yVHJhY2VJbnB1dF9Nc2sgICAgICAgICAoMHgxRlVMIC8qPDwgVFBJX0RFVklEX05yVHJhY2VJbnB1dF9Qb3MqLykgIC8qITwgVFBJIERFVklEOiBOclRyYWNlSW5wdXQgTWFzayAqLw0KKw0KKy8qIFRQSSBERVZUWVBFIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBUUElfREVWVFlQRV9NYWpvclR5cGVfUG9zICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWVFlQRTogTWFqb3JUeXBlIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfREVWVFlQRV9NYWpvclR5cGVfTXNrICAgICAgICAgICgweEZVTCA8PCBUUElfREVWVFlQRV9NYWpvclR5cGVfUG9zKSAgICAgICAgLyohPCBUUEkgREVWVFlQRTogTWFqb3JUeXBlIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9ERVZUWVBFX1N1YlR5cGVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBTdWJUeXBlIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfREVWVFlQRV9TdWJUeXBlX01zayAgICAgICAgICAgICgweEZVTCAvKjw8IFRQSV9ERVZUWVBFX1N1YlR5cGVfUG9zKi8pICAgICAgLyohPCBUUEkgREVWVFlQRTogU3ViVHlwZSBNYXNrICovDQorDQorLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19UUEkgKi8NCisNCisNCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMVUpDQorLyoqDQorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3Rlcg0KKyAgXGRlZmdyb3VwIENNU0lTX01QVSAgICAgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKQ0KKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpDQorICBAew0KKyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIF9fSU0gIHVpbnQzMl90IFRZUEU7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgTVBVIFR5cGUgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBNUFUgQ29udHJvbCBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBSTlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIE1QVSBSZWdpb24gUk5SYmVyIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IFJCQVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgUkFTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBSQkFSX0ExOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIE1QVSBBbGlhcyAxIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgUkFTUl9BMTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBNUFUgQWxpYXMgMSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxQyAoUi9XKSAgTVBVIEFsaWFzIDIgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBSQVNSX0EyOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjAgKFIvVykgIE1QVSBBbGlhcyAyIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgUkJBUl9BMzsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBNUFUgQWxpYXMgMyBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IFJBU1JfQTM7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyOCAoUi9XKSAgTVBVIEFsaWFzIDMgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLw0KK30gTVBVX1R5cGU7DQorDQorLyogTVBVIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fUG9zICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfVFlQRV9JUkVHSU9OX01zayAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1RZUEVfSVJFR0lPTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogSVJFR0lPTiBNYXNrICovDQorDQorI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX1BvcyAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX1RZUEVfRFJFR0lPTl9Nc2sgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9UWVBFX0RSRUdJT05fUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IERSRUdJT04gTWFzayAqLw0KKw0KKyNkZWZpbmUgTVBVX1RZUEVfU0VQQVJBVEVfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IFNFUEFSQVRFIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfVFlQRV9TRVBBUkFURV9Nc2sgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfVFlQRV9TRVBBUkFURV9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogU0VQQVJBVEUgTWFzayAqLw0KKw0KKy8qIE1QVSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBNUFVfQ1RSTF9QUklWREVGRU5BX1BvcyAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogUFJJVkRFRkVOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX0NUUkxfUFJJVkRFRkVOQV9Nc2sgICAgICAgICAgICAoMVVMIDw8IE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IFBSSVZERUZFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgTVBVX0NUUkxfSEZOTUlFTkFfUG9zICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEhGTk1JRU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgTVBVX0NUUkxfSEZOTUlFTkFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgTVBVX0NUUkxfRU5BQkxFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEVOQUJMRSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEVOQUJMRSBNYXNrICovDQorDQorLyogTVBVIFJlZ2lvbiBOdW1iZXIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIE1QVV9STlJfUkVHSU9OX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSTlI6IFJFR0lPTiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX1JOUl9SRUdJT05fTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgTVBVX1JOUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJOUjogUkVHSU9OIE1hc2sgKi8NCisNCisvKiBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Qb3MgICAgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9SQkFSX0FERFJfTXNrICAgICAgICAgICAgICAgICAgKDB4N0ZGRkZGRlVMIDw8IE1QVV9SQkFSX0FERFJfUG9zKSAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBBRERSIE1hc2sgKi8NCisNCisjZGVmaW5lIE1QVV9SQkFSX1ZBTElEX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBWQUxJRCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX1JCQVJfVkFMSURfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQkFSX1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFZBTElEIE1hc2sgKi8NCisNCisjZGVmaW5lIE1QVV9SQkFSX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBSRUdJT04gUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9SQkFSX1JFR0lPTl9Nc2sgICAgICAgICAgICAgICAgKDB4RlVMIC8qPDwgTVBVX1JCQVJfUkVHSU9OX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBSRUdJT04gTWFzayAqLw0KKw0KKy8qIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBNUFVfUkFTUl9BVFRSU19Qb3MgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgZmllbGQgUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9SQVNSX0FUVFJTX01zayAgICAgICAgICAgICAgICAgKDB4RkZGRlVMIDw8IE1QVV9SQVNSX0FUVFJTX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBmaWVsZCBNYXNrICovDQorDQorI2RlZmluZSBNUFVfUkFTUl9YTl9Qb3MgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuWE4gUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9SQVNSX1hOX01zayAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9YTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5YTiBNYXNrICovDQorDQorI2RlZmluZSBNUFVfUkFTUl9BUF9Qb3MgICAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQVAgUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9SQVNSX0FQX01zayAgICAgICAgICAgICAgICAgICAgKDB4N1VMIDw8IE1QVV9SQVNSX0FQX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5BUCBNYXNrICovDQorDQorI2RlZmluZSBNUFVfUkFTUl9URVhfUG9zICAgICAgICAgICAgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuVEVYIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfUkFTUl9URVhfTXNrICAgICAgICAgICAgICAgICAgICgweDdVTCA8PCBNUFVfUkFTUl9URVhfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuVEVYIE1hc2sgKi8NCisNCisjZGVmaW5lIE1QVV9SQVNSX1NfUG9zICAgICAgICAgICAgICAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5TIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfUkFTUl9TX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfU19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuUyBNYXNrICovDQorDQorI2RlZmluZSBNUFVfUkFTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX1JBU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkMgTWFzayAqLw0KKw0KKyNkZWZpbmUgTVBVX1JBU1JfQl9Qb3MgICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkIgUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9SQVNSX0JfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9CX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5CIE1hc2sgKi8NCisNCisjZGVmaW5lIE1QVV9SQVNSX1NSRF9Qb3MgICAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBTdWItUmVnaW9uIERpc2FibGUgUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9SQVNSX1NSRF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfUkFTUl9TUkRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBTdWItUmVnaW9uIERpc2FibGUgTWFzayAqLw0KKw0KKyNkZWZpbmUgTVBVX1JBU1JfU0laRV9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBTaXplIEZpZWxkIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfUkFTUl9TSVpFX01zayAgICAgICAgICAgICAgICAgICgweDFGVUwgPDwgTVBVX1JBU1JfU0laRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIFNpemUgRmllbGQgTWFzayAqLw0KKw0KKyNkZWZpbmUgTVBVX1JBU1JfRU5BQkxFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBlbmFibGUgYml0IFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfUkFTUl9FTkFCTEVfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfUkFTUl9FTkFCTEVfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIGVuYWJsZSBiaXQgRGlzYWJsZSBNYXNrICovDQorDQorLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTVBVICovDQorI2VuZGlmDQorDQorDQorI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQ0KKy8qKg0KKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXINCisgIFxkZWZncm91cCBDTVNJU19GUFUgICAgIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkNCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgRmxvYXRpbmcgUG9pbnQgVW5pdCAoRlBVKQ0KKyAgQHsNCisgKi8NCisNCisvKioNCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDBbMVVdOw0KKyAgICBfX0lPTSB1aW50MzJfdCBGUENDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEZsb2F0aW5nLVBvaW50IENvbnRleHQgQ29udHJvbCBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBGUENBUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIEZsb2F0aW5nLVBvaW50IENvbnRleHQgQWRkcmVzcyBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBGUERTQ1I7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEZsb2F0aW5nLVBvaW50IERlZmF1bHQgU3RhdHVzIENvbnRyb2wgUmVnaXN0ZXIgKi8NCisgICAgX19JTSAgdWludDMyX3QgTVZGUjA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSLyApICBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAwICovDQorICAgIF9fSU0gIHVpbnQzMl90IE1WRlIxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi8gKSAgTWVkaWEgYW5kIEZQIEZlYXR1cmUgUmVnaXN0ZXIgMSAqLw0KK30gRlBVX1R5cGU7DQorDQorLyogRmxvYXRpbmctUG9pbnQgQ29udGV4dCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBGUFVfRlBDQ1JfQVNQRU5fUG9zICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogQVNQRU4gYml0IFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfRlBDQ1JfQVNQRU5fTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX0FTUEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogQVNQRU4gYml0IE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9GUENDUl9MU1BFTl9Qb3MgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMU1BFTiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX0ZQQ0NSX0xTUEVOX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9MU1BFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IExTUEVOIGJpdCBNYXNrICovDQorDQorI2RlZmluZSBGUFVfRlBDQ1JfTU9OUkRZX1BvcyAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTU9OUkRZIFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfRlBDQ1JfTU9OUkRZX01zayAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX01PTlJEWV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTU9OUkRZIGJpdCBNYXNrICovDQorDQorI2RlZmluZSBGUFVfRlBDQ1JfQkZSRFlfUG9zICAgICAgICAgICAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogQkZSRFkgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9GUENDUl9CRlJEWV9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfQkZSRFlfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBCRlJEWSBiaXQgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX0ZQQ0NSX01NUkRZX1BvcyAgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IE1NUkRZIFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfRlBDQ1JfTU1SRFlfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX01NUkRZX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTU1SRFkgYml0IE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9GUENDUl9IRlJEWV9Qb3MgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBIRlJEWSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX0ZQQ0NSX0hGUkRZX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9IRlJEWV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEhGUkRZIGJpdCBNYXNrICovDQorDQorI2RlZmluZSBGUFVfRlBDQ1JfVEhSRUFEX1BvcyAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogcHJvY2Vzc29yIG1vZGUgYml0IFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfRlBDQ1JfVEhSRUFEX01zayAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX1RIUkVBRF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogcHJvY2Vzc29yIG1vZGUgYWN0aXZlIGJpdCBNYXNrICovDQorDQorI2RlZmluZSBGUFVfRlBDQ1JfVVNFUl9Qb3MgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogcHJpdmlsZWdlIGxldmVsIGJpdCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX0ZQQ0NSX1VTRVJfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9VU0VSX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IHByaXZpbGVnZSBsZXZlbCBiaXQgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX0ZQQ0NSX0xTUEFDVF9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IExhenkgc3RhdGUgcHJlc2VydmF0aW9uIGFjdGl2ZSBiaXQgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9GUENDUl9MU1BBQ1RfTXNrICAgICAgICAgICAgICAgKDFVTCAvKjw8IEZQVV9GUENDUl9MU1BBQ1RfUG9zKi8pICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMYXp5IHN0YXRlIHByZXNlcnZhdGlvbiBhY3RpdmUgYml0IE1hc2sgKi8NCisNCisvKiBGbG9hdGluZy1Qb2ludCBDb250ZXh0IEFkZHJlc3MgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIEZQVV9GUENBUl9BRERSRVNTX1BvcyAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0FSOiBBRERSRVNTIGJpdCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX0ZQQ0FSX0FERFJFU1NfTXNrICAgICAgICAgICAgICAoMHgxRkZGRkZGRlVMIDw8IEZQVV9GUENBUl9BRERSRVNTX1BvcykgICAgICAgIC8qITwgRlBDQVI6IEFERFJFU1MgYml0IE1hc2sgKi8NCisNCisvKiBGbG9hdGluZy1Qb2ludCBEZWZhdWx0IFN0YXR1cyBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBGUFVfRlBEU0NSX0FIUF9Qb3MgICAgICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEFIUCBiaXQgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9GUERTQ1JfQUhQX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBEU0NSX0FIUF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogQUhQIGJpdCBNYXNrICovDQorDQorI2RlZmluZSBGUFVfRlBEU0NSX0ROX1BvcyAgICAgICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEROIGJpdCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX0ZQRFNDUl9ETl9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUERTQ1JfRE5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBETiBiaXQgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX0ZQRFNDUl9GWl9Qb3MgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBGWiBiaXQgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9GUERTQ1JfRlpfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBEU0NSX0ZaX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogRlogYml0IE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9GUERTQ1JfUk1vZGVfUG9zICAgICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogUk1vZGUgYml0IFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfRlBEU0NSX1JNb2RlX01zayAgICAgICAgICAgICAgICgzVUwgPDwgRlBVX0ZQRFNDUl9STW9kZV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IFJNb2RlIGJpdCBNYXNrICovDQorDQorLyogTWVkaWEgYW5kIEZQIEZlYXR1cmUgUmVnaXN0ZXIgMCBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgRlBVX01WRlIwX0ZQX3JvdW5kaW5nX21vZGVzX1BvcyAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IEZQIHJvdW5kaW5nIG1vZGVzIGJpdHMgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9NVkZSMF9GUF9yb3VuZGluZ19tb2Rlc19Nc2sgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9GUF9yb3VuZGluZ19tb2Rlc19Qb3MpICAgICAvKiE8IE1WRlIwOiBGUCByb3VuZGluZyBtb2RlcyBiaXRzIE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9NVkZSMF9TaG9ydF92ZWN0b3JzX1BvcyAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBTaG9ydCB2ZWN0b3JzIGJpdHMgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9NVkZSMF9TaG9ydF92ZWN0b3JzX01zayAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9TaG9ydF92ZWN0b3JzX1BvcykgICAgICAgICAvKiE8IE1WRlIwOiBTaG9ydCB2ZWN0b3JzIGJpdHMgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX01WRlIwX1NxdWFyZV9yb290X1BvcyAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IFNxdWFyZSByb290IGJpdHMgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9NVkZSMF9TcXVhcmVfcm9vdF9Nc2sgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9TcXVhcmVfcm9vdF9Qb3MpICAgICAgICAgICAvKiE8IE1WRlIwOiBTcXVhcmUgcm9vdCBiaXRzIE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9NVkZSMF9EaXZpZGVfUG9zICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBEaXZpZGUgYml0cyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX01WRlIwX0RpdmlkZV9Nc2sgICAgICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0RpdmlkZV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IERpdmlkZSBiaXRzIE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9NVkZSMF9GUF9leGNlcF90cmFwcGluZ19Qb3MgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBGUCBleGNlcHRpb24gdHJhcHBpbmcgYml0cyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX01WRlIwX0ZQX2V4Y2VwX3RyYXBwaW5nX01zayAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0ZQX2V4Y2VwX3RyYXBwaW5nX1BvcykgICAgIC8qITwgTVZGUjA6IEZQIGV4Y2VwdGlvbiB0cmFwcGluZyBiaXRzIE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9NVkZSMF9Eb3VibGVfcHJlY2lzaW9uX1BvcyAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBEb3VibGUtcHJlY2lzaW9uIGJpdHMgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9NVkZSMF9Eb3VibGVfcHJlY2lzaW9uX01zayAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9Eb3VibGVfcHJlY2lzaW9uX1BvcykgICAgICAvKiE8IE1WRlIwOiBEb3VibGUtcHJlY2lzaW9uIGJpdHMgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX01WRlIwX1NpbmdsZV9wcmVjaXNpb25fUG9zICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IFNpbmdsZS1wcmVjaXNpb24gYml0cyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX01WRlIwX1NpbmdsZV9wcmVjaXNpb25fTXNrICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX1NpbmdsZV9wcmVjaXNpb25fUG9zKSAgICAgIC8qITwgTVZGUjA6IFNpbmdsZS1wcmVjaXNpb24gYml0cyBNYXNrICovDQorDQorI2RlZmluZSBGUFVfTVZGUjBfQV9TSU1EX3JlZ2lzdGVyc19Qb3MgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogQV9TSU1EIHJlZ2lzdGVycyBiaXRzIFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfTVZGUjBfQV9TSU1EX3JlZ2lzdGVyc19Nc2sgICAgICgweEZVTCAvKjw8IEZQVV9NVkZSMF9BX1NJTURfcmVnaXN0ZXJzX1BvcyovKSAgLyohPCBNVkZSMDogQV9TSU1EIHJlZ2lzdGVycyBiaXRzIE1hc2sgKi8NCisNCisvKiBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAxIERlZmluaXRpb25zICovDQorI2RlZmluZSBGUFVfTVZGUjFfRlBfZnVzZWRfTUFDX1BvcyAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRlAgZnVzZWQgTUFDIGJpdHMgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9NVkZSMV9GUF9mdXNlZF9NQUNfTXNrICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMV9GUF9mdXNlZF9NQUNfUG9zKSAgICAgICAgICAvKiE8IE1WRlIxOiBGUCBmdXNlZCBNQUMgYml0cyBNYXNrICovDQorDQorI2RlZmluZSBGUFVfTVZGUjFfRlBfSFBGUF9Qb3MgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRlAgSFBGUCBiaXRzIFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfTVZGUjFfRlBfSFBGUF9Nc2sgICAgICAgICAgICAgICgweEZVTCA8PCBGUFVfTVZGUjFfRlBfSFBGUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRlAgSFBGUCBiaXRzIE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9NVkZSMV9EX05hTl9tb2RlX1BvcyAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBEX05hTiBtb2RlIGJpdHMgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9NVkZSMV9EX05hTl9tb2RlX01zayAgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMV9EX05hTl9tb2RlX1BvcykgICAgICAgICAgICAvKiE8IE1WRlIxOiBEX05hTiBtb2RlIGJpdHMgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX01WRlIxX0Z0Wl9tb2RlX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IEZ0WiBtb2RlIGJpdHMgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9NVkZSMV9GdFpfbW9kZV9Nc2sgICAgICAgICAgICAgKDB4RlVMIC8qPDwgRlBVX01WRlIxX0Z0Wl9tb2RlX1BvcyovKSAgICAgICAgICAvKiE8IE1WRlIxOiBGdFogbW9kZSBiaXRzIE1hc2sgKi8NCisNCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19GUFUgKi8NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyDQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZURlYnVnICAgICAgIENvcmUgRGVidWcgUmVnaXN0ZXJzIChDb3JlRGVidWcpDQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIENvcmUgRGVidWcgUmVnaXN0ZXJzDQorICBAew0KKyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIENvcmUgRGVidWcgUmVnaXN0ZXIgKENvcmVEZWJ1ZykuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIF9fSU9NIHVpbnQzMl90IERIQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgRGVidWcgSGFsdGluZyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8NCisgICAgX19PTSAgdWludDMyX3QgRENSU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0ICggL1cpICBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIFNlbGVjdG9yIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IERDUkRSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgRGVidWcgQ29yZSBSZWdpc3RlciBEYXRhIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IERFTUNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRGVidWcgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgKi8NCit9IENvcmVEZWJ1Z19UeXBlOw0KKw0KKy8qIERlYnVnIEhhbHRpbmcgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfREJHS0VZX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IERCR0tFWSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0RCR0tFWV9Nc2sgICAgICAgICAoMHhGRkZGVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0RCR0tFWV9Qb3MpICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBEQkdLRVkgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVTRVRfU1RfUG9zICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFU0VUX1NUIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfUkVTRVRfU1RfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVTRVRfU1QgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVUSVJFX1NUX1BvcyAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFVElSRV9TVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVUSVJFX1NUX01zayAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1JFVElSRV9TVF9Qb3MpICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFVElSRV9TVCBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19MT0NLVVBfUG9zICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfTE9DS1VQIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19MT0NLVVBfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfTE9DS1VQX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfTE9DS1VQIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1NMRUVQX1BvcyAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19TTEVFUCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfTXNrICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1NMRUVQX1BvcykgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1NMRUVQIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfUG9zICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19IQUxUIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19IQUxUX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfSEFMVCBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRUdSRFlfUG9zICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVHUkRZIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRUdSRFlfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfUkVHUkRZX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVHUkRZIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Qb3MgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TTkFQU1RBTEwgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Nc2sgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19TTkFQU1RBTExfUG9zKSAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TTkFQU1RBTEwgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfTUFTS0lOVFNfUG9zICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX01BU0tJTlRTIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfTUFTS0lOVFNfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfTUFTS0lOVFMgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Qb3MgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NURVAgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NURVBfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19TVEVQX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TVEVQIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfUG9zICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19IQUxUIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19IQUxUX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfSEFMVF9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfSEFMVCBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX1BvcyAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfREVCVUdFTiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfREVCVUdFTl9Nc2sgICAgICAoMVVMIC8qPDwgQ29yZURlYnVnX0RIQ1NSX0NfREVCVUdFTl9Qb3MqLykgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0RFQlVHRU4gTWFzayAqLw0KKw0KKy8qIERlYnVnIENvcmUgUmVnaXN0ZXIgU2VsZWN0b3IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdXblJfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHV25SIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHV25SX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1duUiBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHU0VMX1BvcyAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1NFTCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1NFTF9Nc2sgICAgICAgICAoMHgxRlVMIC8qPDwgQ29yZURlYnVnX0RDUlNSX1JFR1NFTF9Qb3MqLykgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdTRUwgTWFzayAqLw0KKw0KKy8qIERlYnVnIEV4Y2VwdGlvbiBhbmQgTW9uaXRvciBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX1BvcyAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFRSQ0VOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBUUkNFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9SRVFfUG9zICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fUkVRIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Nc2sgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9SRVFfUG9zKSAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9SRVEgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX1BvcyAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fU1RFUCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9NT05fU1RFUF9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fU1RFUCBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfUG9zICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9QRU5EIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9QRU5EX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9QRU5EIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fRU5fUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX0VOIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9FTl9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9FTiBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSEFSREVSUl9Qb3MgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0hBUkRFUlIgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfSEFSREVSUl9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSEFSREVSUiBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSU5URVJSX1BvcyAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0lOVEVSUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19JTlRFUlJfUG9zKSAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19JTlRFUlIgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0JVU0VSUl9Qb3MgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19CVVNFUlIgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfQlVTRVJSX1BvcykgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQlVTRVJSIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19TVEFURVJSX1BvcyAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfU1RBVEVSUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19TVEFURVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19TVEFURVJSIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DSEtFUlJfUG9zICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ0hLRVJSIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX01zayAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0NIS0VSUl9Qb3MpICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NIS0VSUiBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTk9DUEVSUl9Qb3MgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX05PQ1BFUlIgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfTk9DUEVSUl9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTk9DUEVSUiBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfUG9zICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX01NRVJSIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX01NRVJSX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX01NRVJSIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfUG9zICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ09SRVJFU0VUIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX01zayAgICgxVUwgLyo8PCBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX1BvcyovKSAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NPUkVSRVNFVCBNYXNrICovDQorDQorLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfQ29yZURlYnVnICovDQorDQorDQorLyoqDQorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyDQorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2JpdGZpZWxkICAgICBDb3JlIHJlZ2lzdGVyIGJpdCBmaWVsZCBtYWNyb3MNCisgIFxicmllZiAgICAgIE1hY3JvcyBmb3IgdXNlIHdpdGggYml0IGZpZWxkIGRlZmluaXRpb25zICh4eHhfUG9zLCB4eHhfTXNrKS4NCisgIEB7DQorICovDQorDQorLyoqDQorICBcYnJpZWYgICBNYXNrIGFuZCBzaGlmdCBhIGJpdCBmaWVsZCB2YWx1ZSBmb3IgdXNlIGluIGEgcmVnaXN0ZXIgYml0IHJhbmdlLg0KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLg0KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgdGhlIGJpdCBmaWVsZC4NCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCB2YWx1ZS4NCisqLw0KKyNkZWZpbmUgX1ZBTDJGTEQoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlIDw8IGZpZWxkICMjIF9Qb3MpICYgZmllbGQgIyMgX01zaykNCisNCisvKioNCisgIFxicmllZiAgICAgTWFzayBhbmQgc2hpZnQgYSByZWdpc3RlciB2YWx1ZSB0byBleHRyYWN0IGEgYml0IGZpbGVkIHZhbHVlLg0KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLg0KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgcmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICBNYXNrZWQgYW5kIHNoaWZ0ZWQgYml0IGZpZWxkIHZhbHVlLg0KKyovDQorI2RlZmluZSBfRkxEMlZBTChmaWVsZCwgdmFsdWUpICAgICgodmFsdWUgJiBmaWVsZCAjIyBfTXNrKSA+PiBmaWVsZCAjIyBfUG9zKQ0KKw0KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX2NvcmVfYml0ZmllbGQgKi8NCisNCisNCisvKioNCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXINCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYmFzZSAgICAgQ29yZSBEZWZpbml0aW9ucw0KKyAgXGJyaWVmICAgICAgRGVmaW5pdGlvbnMgZm9yIGJhc2UgYWRkcmVzc2VzLCB1bmlvbnMsIGFuZCBzdHJ1Y3R1cmVzLg0KKyAgQHsNCisgKi8NCisNCisvKiBNZW1vcnkgbWFwcGluZyBvZiBDb3J0ZXgtTTQgSGFyZHdhcmUgKi8NCisjZGVmaW5lIFNDU19CQVNFICAgICAgICAgICAgKDB4RTAwMEUwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBTcGFjZSBCYXNlIEFkZHJlc3MgKi8NCisjZGVmaW5lIElUTV9CQVNFICAgICAgICAgICAgKDB4RTAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gQmFzZSBBZGRyZXNzICovDQorI2RlZmluZSBEV1RfQkFTRSAgICAgICAgICAgICgweEUwMDAxMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEJhc2UgQWRkcmVzcyAqLw0KKyNkZWZpbmUgVFBJX0JBU0UgICAgICAgICAgICAoMHhFMDA0MDAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBCYXNlIEFkZHJlc3MgKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19CQVNFICAgICAgKDB4RTAwMEVERjBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlIERlYnVnIEJhc2UgQWRkcmVzcyAqLw0KKyNkZWZpbmUgU3lzVGlja19CQVNFICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQmFzZSBBZGRyZXNzICovDQorI2RlZmluZSBOVklDX0JBU0UgICAgICAgICAgIChTQ1NfQkFTRSArICAweDAxMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBCYXNlIEFkZHJlc3MgKi8NCisjZGVmaW5lIFNDQl9CQVNFICAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEQwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBCbG9jayBCYXNlIEFkZHJlc3MgKi8NCisNCisjZGVmaW5lIFNDblNDQiAgICAgICAgICAgICAgKChTQ25TQ0JfVHlwZSAgICAqKSAgICAgU0NTX0JBU0UgICAgICApICAgLyohPCBTeXN0ZW0gY29udHJvbCBSZWdpc3RlciBub3QgaW4gU0NCICovDQorI2RlZmluZSBTQ0IgICAgICAgICAgICAgICAgICgoU0NCX1R5cGUgICAgICAgKikgICAgIFNDQl9CQVNFICAgICAgKSAgIC8qITwgU0NCIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovDQorI2RlZmluZSBTeXNUaWNrICAgICAgICAgICAgICgoU3lzVGlja19UeXBlICAgKikgICAgIFN5c1RpY2tfQkFTRSAgKSAgIC8qITwgU3lzVGljayBjb25maWd1cmF0aW9uIHN0cnVjdCAqLw0KKyNkZWZpbmUgTlZJQyAgICAgICAgICAgICAgICAoKE5WSUNfVHlwZSAgICAgICopICAgICBOVklDX0JBU0UgICAgICkgICAvKiE8IE5WSUMgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8NCisjZGVmaW5lIElUTSAgICAgICAgICAgICAgICAgKChJVE1fVHlwZSAgICAgICAqKSAgICAgSVRNX0JBU0UgICAgICApICAgLyohPCBJVE0gY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8NCisjZGVmaW5lIERXVCAgICAgICAgICAgICAgICAgKChEV1RfVHlwZSAgICAgICAqKSAgICAgRFdUX0JBU0UgICAgICApICAgLyohPCBEV1QgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8NCisjZGVmaW5lIFRQSSAgICAgICAgICAgICAgICAgKChUUElfVHlwZSAgICAgICAqKSAgICAgVFBJX0JBU0UgICAgICApICAgLyohPCBUUEkgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8NCisjZGVmaW5lIENvcmVEZWJ1ZyAgICAgICAgICAgKChDb3JlRGVidWdfVHlwZSAqKSAgICAgQ29yZURlYnVnX0JBU0UpICAgLyohPCBDb3JlIERlYnVnIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovDQorDQorI2lmIChfX01QVV9QUkVTRU5UID09IDFVKQ0KKyNkZWZpbmUgTVBVX0JBU0UgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEQ5MFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICovDQorI2RlZmluZSBNUFUgICAgICAgICAgICAgICAoKE1QVV9UeXBlICAgICAgICopICAgICBNUFVfQkFTRSAgICAgICkgICAvKiE8IE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKi8NCisjZW5kaWYNCisNCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpDQorI2RlZmluZSBGUFVfQkFTRSAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRjMwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEZsb2F0aW5nIFBvaW50IFVuaXQgKi8NCisjZGVmaW5lIEZQVSAgICAgICAgICAgICAgICgoRlBVX1R5cGUgICAgICAgKikgICAgIEZQVV9CQVNFICAgICAgKSAgIC8qITwgRmxvYXRpbmcgUG9pbnQgVW5pdCAqLw0KKyNlbmRpZg0KKw0KKy8qQH0gKi8NCisNCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyDQorICBDb3JlIEZ1bmN0aW9uIEludGVyZmFjZSBjb250YWluczoNCisgIC0gQ29yZSBOVklDIEZ1bmN0aW9ucw0KKyAgLSBDb3JlIFN5c1RpY2sgRnVuY3Rpb25zDQorICAtIENvcmUgRGVidWcgRnVuY3Rpb25zDQorICAtIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucw0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqDQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZSBGdW5jdGlvbnMgYW5kIEluc3RydWN0aW9ucyBSZWZlcmVuY2UNCisqLw0KKw0KKw0KKw0KKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgTlZJQyBmdW5jdGlvbnMgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLw0KKy8qKg0KKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UNCisgIFxkZWZncm91cCBDTVNJU19Db3JlX05WSUNGdW5jdGlvbnMgTlZJQyBGdW5jdGlvbnMNCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBtYW5hZ2UgaW50ZXJydXB0cyBhbmQgZXhjZXB0aW9ucyB2aWEgdGhlIE5WSUMuDQorICBAew0KKyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IFByaW9yaXR5IEdyb3VwaW5nDQorICBcZGV0YWlscyBTZXRzIHRoZSBwcmlvcml0eSBncm91cGluZyBmaWVsZCB1c2luZyB0aGUgcmVxdWlyZWQgdW5sb2NrIHNlcXVlbmNlLg0KKyAgICAgICAgICAgVGhlIHBhcmFtZXRlciBQcmlvcml0eUdyb3VwIGlzIGFzc2lnbmVkIHRvIHRoZSBmaWVsZCBTQ0ItPkFJUkNSIFsxMDo4XSBQUklHUk9VUCBmaWVsZC4NCisgICAgICAgICAgIE9ubHkgdmFsdWVzIGZyb20gMC4uNyBhcmUgdXNlZC4NCisgICAgICAgICAgIEluIGNhc2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHByaW9yaXR5IGdyb3VwaW5nIGFuZCBhdmFpbGFibGUNCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpLCB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0Lg0KKyAgXHBhcmFtIFtpbl0gICAgICBQcmlvcml0eUdyb3VwICBQcmlvcml0eSBncm91cGluZyBmaWVsZC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5R3JvdXBpbmcodWludDMyX3QgUHJpb3JpdHlHcm91cCkNCit7DQorICAgIHVpbnQzMl90IHJlZ192YWx1ZTsNCisgICAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgICAgICAgICAgIC8qIG9ubHkgdmFsdWVzIDAuLjcgYXJlIHVzZWQgICAgICAgICAgKi8NCisNCisgICAgcmVnX3ZhbHVlICA9ICBTQ0ItPkFJUkNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWQgb2xkIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gICAgKi8NCisgICAgcmVnX3ZhbHVlICY9IH4oKHVpbnQzMl90KShTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2sgfCBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSk7IC8qIGNsZWFyIGJpdHMgdG8gY2hhbmdlICAgICAgICAgICAgICAgKi8NCisgICAgcmVnX3ZhbHVlICA9IChyZWdfdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NUZBVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSB8DQorICAgICAgICAgICAgICAgICAgKFByaW9yaXR5R3JvdXBUbXAgPDwgOFUpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnNlcnQgd3JpdGUga2V5IGFuZCBwcmlvcnR5IGdyb3VwICovDQorICAgIFNDQi0+QUlSQ1IgPSAgcmVnX3ZhbHVlOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBQcmlvcml0eSBHcm91cGluZw0KKyAgXGRldGFpbHMgUmVhZHMgdGhlIHByaW9yaXR5IGdyb3VwaW5nIGZpZWxkIGZyb20gdGhlIE5WSUMgSW50ZXJydXB0IENvbnRyb2xsZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgIFByaW9yaXR5IGdyb3VwaW5nIGZpZWxkIChTQ0ItPkFJUkNSIFsxMDo4XSBQUklHUk9VUCBmaWVsZCkuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UHJpb3JpdHlHcm91cGluZyh2b2lkKQ0KK3sNCisgICAgcmV0dXJuICgodWludDMyX3QpKChTQ0ItPkFJUkNSICYgU0NCX0FJUkNSX1BSSUdST1VQX01zaykgPj4gU0NCX0FJUkNSX1BSSUdST1VQX1BvcykpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEVuYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQNCisgIFxkZXRhaWxzIEVuYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLg0KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19FbmFibGVJUlEoSVJRbl9UeXBlIElSUW4pDQorew0KKyAgICBOVklDLT5JU0VSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBEaXNhYmxlIEV4dGVybmFsIEludGVycnVwdA0KKyAgXGRldGFpbHMgRGlzYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLg0KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19EaXNhYmxlSVJRKElSUW5fVHlwZSBJUlFuKQ0KK3sNCisgICAgTlZJQy0+SUNFUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IFBlbmRpbmcgSW50ZXJydXB0DQorICBcZGV0YWlscyBSZWFkcyB0aGUgcGVuZGluZyByZWdpc3RlciBpbiB0aGUgTlZJQyBhbmQgcmV0dXJucyB0aGUgcGVuZGluZyBiaXQgZm9yIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0Lg0KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAwICBJbnRlcnJ1cHQgc3RhdHVzIGlzIG5vdCBwZW5kaW5nLg0KKyAgXHJldHVybiAgICAgICAgICAgICAxICBJbnRlcnJ1cHQgc3RhdHVzIGlzIHBlbmRpbmcuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikNCit7DQorICAgIHJldHVybiAoKHVpbnQzMl90KSgoKE5WSUMtPklTUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gJiAoMVVMIDw8ICgoKHVpbnQzMl90KSgNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IFBlbmRpbmcgSW50ZXJydXB0DQorICBcZGV0YWlscyBTZXRzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuDQorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pDQorew0KKyAgICBOVklDLT5JU1BSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBDbGVhciBQZW5kaW5nIEludGVycnVwdA0KKyAgXGRldGFpbHMgQ2xlYXJzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuDQorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0NsZWFyUGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikNCit7DQorICAgIE5WSUMtPklDUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBBY3RpdmUgSW50ZXJydXB0DQorICBcZGV0YWlscyBSZWFkcyB0aGUgYWN0aXZlIHJlZ2lzdGVyIGluIE5WSUMgYW5kIHJldHVybnMgdGhlIGFjdGl2ZSBiaXQuDQorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuDQorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IGFjdGl2ZS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBhY3RpdmUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0QWN0aXZlKElSUW5fVHlwZSBJUlFuKQ0KK3sNCisgICAgcmV0dXJuICgodWludDMyX3QpKCgoTlZJQy0+SUFCUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpICE9IDBVTCkgPyAxVUwgOiAwVUwpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgSW50ZXJydXB0IFByaW9yaXR5DQorICBcZGV0YWlscyBTZXRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuDQorICBcbm90ZSAgICBUaGUgcHJpb3JpdHkgY2Fubm90IGJlIHNldCBmb3IgZXZlcnkgY29yZSBpbnRlcnJ1cHQuDQorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuDQorICBccGFyYW0gW2luXSAgcHJpb3JpdHkgIFByaW9yaXR5IHRvIHNldC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuLCB1aW50MzJfdCBwcmlvcml0eSkNCit7DQorICAgIGlmICgoaW50MzJfdCkoSVJRbikgPCAwKQ0KKyAgICB7DQorICAgICAgICBTQ0ItPlNIUFsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4RlVMKSAtIDRVTF0gPSAodWludDhfdCkoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KTB4RkZVTCk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBOVklDLT5JUFsoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pXSAgICAgICAgICAgICAgID0gKHVpbnQ4X3QpKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKTsNCisgICAgfQ0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBJbnRlcnJ1cHQgUHJpb3JpdHkNCisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuDQorICAgICAgICAgICBUaGUgaW50ZXJydXB0IG51bWJlciBjYW4gYmUgcG9zaXRpdmUgdG8gc3BlY2lmeSBhbiBleHRlcm5hbCAoZGV2aWNlIHNwZWNpZmljKSBpbnRlcnJ1cHQsDQorICAgICAgICAgICBvciBuZWdhdGl2ZSB0byBzcGVjaWZ5IGFuIGludGVybmFsIChjb3JlKSBpbnRlcnJ1cHQuDQorICBccGFyYW0gW2luXSAgIElSUW4gIEludGVycnVwdCBudW1iZXIuDQorICBccmV0dXJuICAgICAgICAgICAgIEludGVycnVwdCBQcmlvcml0eS4NCisgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgaXMgYWxpZ25lZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBpbXBsZW1lbnRlZCBwcmlvcml0eSBiaXRzIG9mIHRoZSBtaWNyb2NvbnRyb2xsZXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4pDQorew0KKw0KKyAgICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuICgoKHVpbnQzMl90KVNDQi0+U0hQWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHhGVUwpIC0gNFVMXSA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuICgoKHVpbnQzMl90KU5WSUMtPklQWygodWludDMyX3QpKGludDMyX3QpSVJRbildICAgICAgICAgICAgICAgPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsNCisgICAgfQ0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEVuY29kZSBQcmlvcml0eQ0KKyAgXGRldGFpbHMgRW5jb2RlcyB0aGUgcHJpb3JpdHkgZm9yIGFuIGludGVycnVwdCB3aXRoIHRoZSBnaXZlbiBwcmlvcml0eSBncm91cCwNCisgICAgICAgICAgIHByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUsIGFuZCBzdWJwcmlvcml0eSB2YWx1ZS4NCisgICAgICAgICAgIEluIGNhc2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHByaW9yaXR5IGdyb3VwaW5nIGFuZCBhdmFpbGFibGUNCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpLCB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0Lg0KKyAgXHBhcmFtIFtpbl0gICAgIFByaW9yaXR5R3JvdXAgIFVzZWQgcHJpb3JpdHkgZ3JvdXAuDQorICBccGFyYW0gW2luXSAgIFByZWVtcHRQcmlvcml0eSAgUHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4NCisgIFxwYXJhbSBbaW5dICAgICAgIFN1YlByaW9yaXR5ICBTdWJwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICBFbmNvZGVkIHByaW9yaXR5LiBWYWx1ZSBjYW4gYmUgdXNlZCBpbiB0aGUgZnVuY3Rpb24gXHJlZiBOVklDX1NldFByaW9yaXR5KCkuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfRW5jb2RlUHJpb3JpdHkodWludDMyX3QgUHJpb3JpdHlHcm91cCwgdWludDMyX3QgUHJlZW1wdFByaW9yaXR5LCB1aW50MzJfdCBTdWJQcmlvcml0eSkNCit7DQorICAgIHVpbnQzMl90IFByaW9yaXR5R3JvdXBUbXAgPSAoUHJpb3JpdHlHcm91cCAmICh1aW50MzJfdCkweDA3VUwpOyAgIC8qIG9ubHkgdmFsdWVzIDAuLjcgYXJlIHVzZWQgICAgICAgICAgKi8NCisgICAgdWludDMyX3QgUHJlZW1wdFByaW9yaXR5Qml0czsNCisgICAgdWludDMyX3QgU3ViUHJpb3JpdHlCaXRzOw0KKw0KKyAgICBQcmVlbXB0UHJpb3JpdHlCaXRzID0gKCg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKSA+ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpID8gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSA6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApOw0KKyAgICBTdWJQcmlvcml0eUJpdHMgICAgID0gKChQcmlvcml0eUdyb3VwVG1wICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPCAodWludDMyX3QpN1VMKSA/ICh1aW50MzJfdCkwVUwgOiAodWludDMyX3QpKCgNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eUdyb3VwVG1wIC0gN1VMKSArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpOw0KKw0KKyAgICByZXR1cm4gKA0KKyAgICAgICAgICAgICAgICgoUHJlZW1wdFByaW9yaXR5ICYgKHVpbnQzMl90KSgoMVVMIDw8IChQcmVlbXB0UHJpb3JpdHlCaXRzKSkgLSAxVUwpKSA8PCBTdWJQcmlvcml0eUJpdHMpIHwNCisgICAgICAgICAgICAgICAoKFN1YlByaW9yaXR5ICAgICAmICh1aW50MzJfdCkoKDFVTCA8PCAoU3ViUHJpb3JpdHlCaXRzKSkgLSAxVUwpKSkNCisgICAgICAgICAgICk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRGVjb2RlIFByaW9yaXR5DQorICBcZGV0YWlscyBEZWNvZGVzIGFuIGludGVycnVwdCBwcmlvcml0eSB2YWx1ZSB3aXRoIGEgZ2l2ZW4gcHJpb3JpdHkgZ3JvdXAgdG8NCisgICAgICAgICAgIHByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUgYW5kIHN1YnByaW9yaXR5IHZhbHVlLg0KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQ0KKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUykgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByaW9yaXR5IGdyb3VwIGlzIHNldC4NCisgIFxwYXJhbSBbaW5dICAgICAgICAgUHJpb3JpdHkgICBQcmlvcml0eSB2YWx1ZSwgd2hpY2ggY2FuIGJlIHJldHJpZXZlZCB3aXRoIHRoZSBmdW5jdGlvbiBccmVmIE5WSUNfR2V0UHJpb3JpdHkoKS4NCisgIFxwYXJhbSBbaW5dICAgICBQcmlvcml0eUdyb3VwICBVc2VkIHByaW9yaXR5IGdyb3VwLg0KKyAgXHBhcmFtIFtvdXRdIHBQcmVlbXB0UHJpb3JpdHkgIFByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuDQorICBccGFyYW0gW291dF0gICAgIHBTdWJQcmlvcml0eSAgU3VicHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19EZWNvZGVQcmlvcml0eSh1aW50MzJfdCBQcmlvcml0eSwgdWludDMyX3QgUHJpb3JpdHlHcm91cCwgdWludDMyX3QgKmNvbnN0IHBQcmVlbXB0UHJpb3JpdHksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqY29uc3QgcFN1YlByaW9yaXR5KQ0KK3sNCisgICAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLw0KKyAgICB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHlCaXRzOw0KKyAgICB1aW50MzJfdCBTdWJQcmlvcml0eUJpdHM7DQorDQorICAgIFByZWVtcHRQcmlvcml0eUJpdHMgPSAoKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApID4gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpIDoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCk7DQorICAgIFN1YlByaW9yaXR5Qml0cyAgICAgPSAoKFByaW9yaXR5R3JvdXBUbXAgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA8ICh1aW50MzJfdCk3VUwpID8gKHVpbnQzMl90KTBVTCA6ICh1aW50MzJfdCkoKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5R3JvdXBUbXAgLSA3VUwpICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSk7DQorDQorICAgICpwUHJlZW1wdFByaW9yaXR5ID0gKFByaW9yaXR5ID4+IFN1YlByaW9yaXR5Qml0cykgJiAodWludDMyX3QpKCgxVUwgPDwgKFByZWVtcHRQcmlvcml0eUJpdHMpKSAtIDFVTCk7DQorICAgICpwU3ViUHJpb3JpdHkgICAgID0gKFByaW9yaXR5KSAmICh1aW50MzJfdCkoKDFVTCA8PCAoU3ViUHJpb3JpdHlCaXRzKSkgLSAxVUwpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFN5c3RlbSBSZXNldA0KKyAgXGRldGFpbHMgSW5pdGlhdGVzIGEgc3lzdGVtIHJlc2V0IHJlcXVlc3QgdG8gcmVzZXQgdGhlIE1DVS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1N5c3RlbVJlc2V0KHZvaWQpDQorew0KKyAgICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgYWxsIG91dHN0YW5kaW5nIG1lbW9yeSBhY2Nlc3NlcyBpbmNsdWRlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyZWQgd3JpdGUgYXJlIGNvbXBsZXRlZCBiZWZvcmUgcmVzZXQgKi8NCisgICAgU0NCLT5BSVJDUiAgPSAodWludDMyX3QpKCgweDVGQVVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgICAgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNDQi0+QUlSQ1IgJiBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrKTsgICAgICAgICAgICAgLyogS2VlcCBwcmlvcml0eSBncm91cCB1bmNoYW5nZWQgKi8NCisgICAgX19EU0IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIGNvbXBsZXRpb24gb2YgbWVtb3J5IGFjY2VzcyAqLw0KKw0KKyAgICBmb3IgKDs7KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2FpdCB1bnRpbCByZXNldCAqLw0KKyAgICB7DQorICAgICAgICBfX05PUCgpOw0KKyAgICB9DQorfQ0KKw0KKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyAqLw0KKw0KKw0KKw0KKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgU3lzVGljayBmdW5jdGlvbiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8NCisvKioNCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlDQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zIFN5c1RpY2sgRnVuY3Rpb25zDQorICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgY29uZmlndXJlIHRoZSBTeXN0ZW0uDQorICBAew0KKyAqLw0KKw0KKyNpZiAoX19WZW5kb3JfU3lzVGlja0NvbmZpZyA9PSAwVSkNCisNCisvKioNCisgIFxicmllZiAgIFN5c3RlbSBUaWNrIENvbmZpZ3VyYXRpb24NCisgIFxkZXRhaWxzIEluaXRpYWxpemVzIHRoZSBTeXN0ZW0gVGltZXIgYW5kIGl0cyBpbnRlcnJ1cHQsIGFuZCBzdGFydHMgdGhlIFN5c3RlbSBUaWNrIFRpbWVyLg0KKyAgICAgICAgICAgQ291bnRlciBpcyBpbiBmcmVlIHJ1bm5pbmcgbW9kZSB0byBnZW5lcmF0ZSBwZXJpb2RpYyBpbnRlcnJ1cHRzLg0KKyAgXHBhcmFtIFtpbl0gIHRpY2tzICBOdW1iZXIgb2YgdGlja3MgYmV0d2VlbiB0d28gaW50ZXJydXB0cy4NCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkLg0KKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQuDQorICBcbm90ZSAgICBXaGVuIHRoZSB2YXJpYWJsZSA8Yj5fX1ZlbmRvcl9TeXNUaWNrQ29uZmlnPC9iPiBpcyBzZXQgdG8gMSwgdGhlbiB0aGUNCisgICAgICAgICAgIGZ1bmN0aW9uIDxiPlN5c1RpY2tfQ29uZmlnPC9iPiBpcyBub3QgaW5jbHVkZWQuIEluIHRoaXMgY2FzZSwgdGhlIGZpbGUgPGI+PGk+ZGV2aWNlPC9pPi5oPC9iPg0KKyAgICAgICAgICAgbXVzdCBjb250YWluIGEgdmVuZG9yLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFN5c1RpY2tfQ29uZmlnKHVpbnQzMl90IHRpY2tzKQ0KK3sNCisgICAgaWYgKCh0aWNrcyAtIDFVTCkgPiBTeXNUaWNrX0xPQURfUkVMT0FEX01zaykNCisgICAgew0KKyAgICAgICAgcmV0dXJuICgxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbG9hZCB2YWx1ZSBpbXBvc3NpYmxlICovDQorICAgIH0NCisNCisgICAgU3lzVGljay0+TE9BRCAgPSAodWludDMyX3QpKHRpY2tzIC0gMVVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHJlbG9hZCByZWdpc3RlciAqLw0KKyAgICBOVklDX1NldFByaW9yaXR5KFN5c1RpY2tfSVJRbiwgKDFVTCA8PCBfX05WSUNfUFJJT19CSVRTKSAtIDFVTCk7ICAvKiBzZXQgUHJpb3JpdHkgZm9yIFN5c3RpY2sgSW50ZXJydXB0ICovDQorICAgIFN5c1RpY2stPlZBTCAgID0gMFVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvYWQgdGhlIFN5c1RpY2sgQ291bnRlciBWYWx1ZSAqLw0KKyAgICBTeXNUaWNrLT5DVFJMICA9IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrIHwNCisgICAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICB8DQorICAgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBTeXNUaWNrIElSUSBhbmQgU3lzVGljayBUaW1lciAqLw0KKyAgICByZXR1cm4gKDBVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGdW5jdGlvbiBzdWNjZXNzZnVsICovDQorfQ0KKw0KKyNlbmRpZg0KKw0KKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfU3lzVGlja0Z1bmN0aW9ucyAqLw0KKw0KKw0KKw0KKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRGVidWcgSW4vT3V0cHV0IGZ1bmN0aW9uICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8NCisvKioNCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlDQorICBcZGVmZ3JvdXAgQ01TSVNfY29yZV9EZWJ1Z0Z1bmN0aW9ucyBJVE0gRnVuY3Rpb25zDQorICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgYWNjZXNzIHRoZSBJVE0gZGVidWcgaW50ZXJmYWNlLg0KKyAgQHsNCisgKi8NCisNCitleHRlcm4gdm9sYXRpbGUgaW50MzJfdCBJVE1fUnhCdWZmZXI7ICAgICAgICAgICAgICAgICAgICAvKiE8IEV4dGVybmFsIHZhcmlhYmxlIHRvIHJlY2VpdmUgY2hhcmFjdGVycy4gKi8NCisjZGVmaW5lICAgICAgICAgICAgICAgICBJVE1fUlhCVUZGRVJfRU1QVFkgICAweDVBQTU1QUE1VSAvKiE8IFZhbHVlIGlkZW50aWZ5aW5nIFxyZWYgSVRNX1J4QnVmZmVyIGlzIHJlYWR5IGZvciBuZXh0IGNoYXJhY3Rlci4gKi8NCisNCisNCisvKioNCisgIFxicmllZiAgIElUTSBTZW5kIENoYXJhY3Rlcg0KKyAgXGRldGFpbHMgVHJhbnNtaXRzIGEgY2hhcmFjdGVyIHZpYSB0aGUgSVRNIGNoYW5uZWwgMCwgYW5kDQorICAgICAgICAgICBcbGkgSnVzdCByZXR1cm5zIHdoZW4gbm8gZGVidWdnZXIgaXMgY29ubmVjdGVkIHRoYXQgaGFzIGJvb2tlZCB0aGUgb3V0cHV0Lg0KKyAgICAgICAgICAgXGxpIElzIGJsb2NraW5nIHdoZW4gYSBkZWJ1Z2dlciBpcyBjb25uZWN0ZWQsIGJ1dCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHNlbnQgaGFzIG5vdCBiZWVuIHRyYW5zbWl0dGVkLg0KKyAgXHBhcmFtIFtpbl0gICAgIGNoICBDaGFyYWN0ZXIgdG8gdHJhbnNtaXQuDQorICBccmV0dXJucyAgICAgICAgICAgIENoYXJhY3RlciB0byB0cmFuc21pdC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgSVRNX1NlbmRDaGFyKHVpbnQzMl90IGNoKQ0KK3sNCisgICAgaWYgKCgoSVRNLT5UQ1IgJiBJVE1fVENSX0lUTUVOQV9Nc2spICE9IDBVTCkgJiYgICAgICAvKiBJVE0gZW5hYmxlZCAqLw0KKyAgICAgICAgKChJVE0tPlRFUiAmIDFVTCkgIT0gMFVMKSkgICAgICAgICAgICAgICAgICAgICAgIC8qIElUTSBQb3J0ICMwIGVuYWJsZWQgKi8NCisgICAgew0KKyAgICAgICAgd2hpbGUgKElUTS0+UE9SVFswVV0udTMyID09IDBVTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBfX05PUCgpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgSVRNLT5QT1JUWzBVXS51OCA9ICh1aW50OF90KWNoOw0KKyAgICB9DQorDQorICAgIHJldHVybiAoY2gpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIElUTSBSZWNlaXZlIENoYXJhY3Rlcg0KKyAgXGRldGFpbHMgSW5wdXRzIGEgY2hhcmFjdGVyIHZpYSB0aGUgZXh0ZXJuYWwgdmFyaWFibGUgXHJlZiBJVE1fUnhCdWZmZXIuDQorICBccmV0dXJuICAgICAgICAgICAgIFJlY2VpdmVkIGNoYXJhY3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAtMSAgTm8gY2hhcmFjdGVyIHBlbmRpbmcuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGludDMyX3QgSVRNX1JlY2VpdmVDaGFyKHZvaWQpDQorew0KKyAgICBpbnQzMl90IGNoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gY2hhcmFjdGVyIGF2YWlsYWJsZSAqLw0KKw0KKyAgICBpZiAoSVRNX1J4QnVmZmVyICE9IElUTV9SWEJVRkZFUl9FTVBUWSkNCisgICAgew0KKyAgICAgICAgY2ggPSBJVE1fUnhCdWZmZXI7DQorICAgICAgICBJVE1fUnhCdWZmZXIgPSBJVE1fUlhCVUZGRVJfRU1QVFk7ICAgICAgIC8qIHJlYWR5IGZvciBuZXh0IGNoYXJhY3RlciAqLw0KKyAgICB9DQorDQorICAgIHJldHVybiAoY2gpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIElUTSBDaGVjayBDaGFyYWN0ZXINCisgIFxkZXRhaWxzIENoZWNrcyB3aGV0aGVyIGEgY2hhcmFjdGVyIGlzIHBlbmRpbmcgZm9yIHJlYWRpbmcgaW4gdGhlIHZhcmlhYmxlIFxyZWYgSVRNX1J4QnVmZmVyLg0KKyAgXHJldHVybiAgICAgICAgICAwICBObyBjaGFyYWN0ZXIgYXZhaWxhYmxlLg0KKyAgXHJldHVybiAgICAgICAgICAxICBDaGFyYWN0ZXIgYXZhaWxhYmxlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBpbnQzMl90IElUTV9DaGVja0NoYXIodm9pZCkNCit7DQorDQorICAgIGlmIChJVE1fUnhCdWZmZXIgPT0gSVRNX1JYQlVGRkVSX0VNUFRZKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiAoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgY2hhcmFjdGVyIGF2YWlsYWJsZSAqLw0KKyAgICB9DQorfQ0KKw0KKy8qQH0gZW5kIG9mIENNU0lTX2NvcmVfRGVidWdGdW5jdGlvbnMgKi8NCisNCisNCisNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9fQ09SRV9DTTRfSF9ERVBFTkRBTlQgKi8NCisNCisjZW5kaWYgLyogX19DTVNJU19HRU5FUklDICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jb3JlX2NtRnVuYy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jb3JlX2NtRnVuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOTY4ODUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2NvcmVfY21GdW5jLmgKQEAgLTAsMCArMSw4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KKyAqIEBmaWxlICAgICBjb3JlX2NtRnVuYy5oDQorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NIENvcmUgRnVuY3Rpb24gQWNjZXNzIEhlYWRlciBGaWxlDQorICogQHZlcnNpb24gIFY0LjMwDQorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQNCisNCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkDQorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAgICoNCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQ0KKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0KKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0KKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElODQorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQ0KKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQ0KKyNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovDQorI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkNCisjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8NCisjZW5kaWYNCisNCisjaWZuZGVmIF9fQ09SRV9DTUZVTkNfSA0KKyNkZWZpbmUgX19DT1JFX0NNRlVOQ19IDQorDQorDQorLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDb3JlIEZ1bmN0aW9uIEFjY2VzcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovDQorLyoqIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlDQorICAgIFxkZWZncm91cCBDTVNJU19Db3JlX1JlZ0FjY0Z1bmN0aW9ucyBDTVNJUyBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMNCisgIEB7DQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBSZWFsVmlldyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkNCisjaW5jbHVkZSAiY21zaXNfYXJtY2MuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBBUk0gQ29tcGlsZXIgVjYgLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkNCisjaW5jbHVkZSAiY21zaXNfYXJtY2NfVjYuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBHTlUgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkNCisjaW5jbHVkZSAiY21zaXNfZ2NjLmgiDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gSUNDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkNCisjaW5jbHVkZSA8Y21zaXNfaWFyLmg+DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gVEkgQ0NTIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkNCisjaW5jbHVkZSA8Y21zaXNfY2NzLmg+DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gVEFTS0lORyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApDQorLyoNCisgKiBUaGUgQ01TSVMgZnVuY3Rpb25zIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBhcyBpbnRyaW5zaWNzIGluIHRoZSBjb21waWxlci4NCisgKiBQbGVhc2UgdXNlICJjYXJtIC0/aSIgdG8gZ2V0IGFuIHVwIHRvIGRhdGUgbGlzdCBvZiBhbGwgaW50cmluc2ljcywNCisgKiBJbmNsdWRpbmcgdGhlIENNU0lTIG9uZXMuDQorICovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gQ09TTUlDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApDQorI2luY2x1ZGUgPGNtc2lzX2NzbS5oPg0KKw0KKyNlbmRpZg0KKw0KKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zICovDQorDQorI2VuZGlmIC8qIF9fQ09SRV9DTUZVTkNfSCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY29yZV9jbUluc3RyLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2NvcmVfY21JbnN0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NGJkNDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2NvcmVfY21JbnN0ci5oCkBAIC0wLDAgKzEsODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCisgKiBAZmlsZSAgICAgY29yZV9jbUluc3RyLmgNCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gQ29yZSBJbnN0cnVjdGlvbiBBY2Nlc3MgSGVhZGVyIEZpbGUNCisgKiBAdmVyc2lvbiAgVjQuMzANCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQ0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNSBBUk0gTElNSVRFRA0KKw0KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQNCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICAgKg0KKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFDQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQorICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApDQorI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8NCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQ0KKyNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLw0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19DT1JFX0NNSU5TVFJfSA0KKyNkZWZpbmUgX19DT1JFX0NNSU5TVFJfSA0KKw0KKw0KKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLw0KKy8qKiBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSBDTVNJUyBDb3JlIEluc3RydWN0aW9uIEludGVyZmFjZQ0KKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBpbnN0cnVjdGlvbnMNCisgIEB7DQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBSZWFsVmlldyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkNCisjaW5jbHVkZSAiY21zaXNfYXJtY2MuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBBUk0gQ29tcGlsZXIgVjYgLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkNCisjaW5jbHVkZSAiY21zaXNfYXJtY2NfVjYuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBHTlUgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkNCisjaW5jbHVkZSAiY21zaXNfZ2NjLmgiDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gSUNDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkNCisjaW5jbHVkZSA8Y21zaXNfaWFyLmg+DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gVEkgQ0NTIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkNCisjaW5jbHVkZSA8Y21zaXNfY2NzLmg+DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gVEFTS0lORyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApDQorLyoNCisgKiBUaGUgQ01TSVMgZnVuY3Rpb25zIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBhcyBpbnRyaW5zaWNzIGluIHRoZSBjb21waWxlci4NCisgKiBQbGVhc2UgdXNlICJjYXJtIC0/aSIgdG8gZ2V0IGFuIHVwIHRvIGRhdGUgbGlzdCBvZiBhbGwgaW50cmluc2ljcywNCisgKiBJbmNsdWRpbmcgdGhlIENNU0lTIG9uZXMuDQorICovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gQ09TTUlDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApDQorI2luY2x1ZGUgPGNtc2lzX2NzbS5oPg0KKw0KKyNlbmRpZg0KKw0KKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSAqLw0KKw0KKyNlbmRpZiAvKiBfX0NPUkVfQ01JTlNUUl9IICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jb3JlX2NtU2ltZC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jb3JlX2NtU2ltZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNzJlZDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2NvcmVfY21TaW1kLmgKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KKyAqIEBmaWxlICAgICBjb3JlX2NtU2ltZC5oDQorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NIFNJTUQgSGVhZGVyIEZpbGUNCisgKiBAdmVyc2lvbiAgVjQuMzANCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQ0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNSBBUk0gTElNSVRFRA0KKw0KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQNCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICAgKg0KKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFDQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQorICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApDQorI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8NCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQ0KKyNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLw0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19DT1JFX0NNU0lNRF9IDQorI2RlZmluZSBfX0NPUkVfQ01TSU1EX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisNCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjICBDb21waWxlciBzcGVjaWZpYyBJbnRyaW5zaWNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8NCisvKiogXGRlZmdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyBDTVNJUyBTSU1EIEludHJpbnNpY3MNCisgIEFjY2VzcyB0byBkZWRpY2F0ZWQgU0lNRCBpbnN0cnVjdGlvbnMNCisgIEB7DQorKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBSZWFsVmlldyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkNCisjaW5jbHVkZSAiY21zaXNfYXJtY2MuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBBUk0gQ29tcGlsZXIgVjYgLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkNCisjaW5jbHVkZSAiY21zaXNfYXJtY2NfVjYuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBHTlUgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkNCisjaW5jbHVkZSAiY21zaXNfZ2NjLmgiDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gSUNDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkNCisjaW5jbHVkZSA8Y21zaXNfaWFyLmg+DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gVEkgQ0NTIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkNCisjaW5jbHVkZSA8Y21zaXNfY2NzLmg+DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gVEFTS0lORyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApDQorLyoNCisgKiBUaGUgQ01TSVMgZnVuY3Rpb25zIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBhcyBpbnRyaW5zaWNzIGluIHRoZSBjb21waWxlci4NCisgKiBQbGVhc2UgdXNlICJjYXJtIC0/aSIgdG8gZ2V0IGFuIHVwIHRvIGRhdGUgbGlzdCBvZiBhbGwgaW50cmluc2ljcywNCisgKiBJbmNsdWRpbmcgdGhlIENNU0lTIG9uZXMuDQorICovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0gQ09TTUlDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApDQorI2luY2x1ZGUgPGNtc2lzX2NzbS5oPg0KKw0KKyNlbmRpZg0KKw0KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyAqLw0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX19DT1JFX0NNU0lNRF9IICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvY29tcGlsZXJfYWJzdHJhY3Rpb24uaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL2NvbXBpbGVyX2Fic3RyYWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmViYjc1ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL2NvbXBpbGVyX2Fic3RyYWN0aW9uLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisjaWZuZGVmIF9DT01QSUxFUl9BQlNUUkFDVElPTl9IDQorI2RlZmluZSBfQ09NUElMRVJfQUJTVFJBQ1RJT05fSA0KKw0KKy8qbGludCArK2ZsYiAiRW50ZXIgbGlicmFyeSByZWdpb24iICovDQorDQorI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApDQorDQorI2lmbmRlZiBfX0FTTQ0KKyNkZWZpbmUgX19BU00gICAgICAgICAgICAgICBfX2FzbQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19JTkxJTkUNCisjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgICAgX19pbmxpbmUNCisjZW5kaWYNCisNCisjaWZuZGVmIF9fV0VBSw0KKyNkZWZpbmUgX19XRUFLICAgICAgICAgICAgICBfX3dlYWsNCisjZW5kaWYNCisNCisjaWZuZGVmIF9fQUxJR04NCisjZGVmaW5lIF9fQUxJR04obikgICAgICAgICAgX19hbGlnbihuKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19QQUNLRUQNCisjZGVmaW5lIF9fUEFDS0VEICAgICAgICAgICAgX19wYWNrZWQNCisjZW5kaWYNCisNCisjZGVmaW5lIEdFVF9TUCgpICAgICAgICAgICAgICAgIF9fY3VycmVudF9zcCgpDQorDQorI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQ0KKw0KKyNpZm5kZWYgX19BU00NCisjZGVmaW5lIF9fQVNNICAgICAgICAgICAgICAgX19hc20NCisjZW5kaWYNCisNCisjaWZuZGVmIF9fSU5MSU5FDQorI2RlZmluZSBfX0lOTElORSAgICAgICAgICAgIGlubGluZQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19XRUFLDQorI2RlZmluZSBfX1dFQUsgICAgICAgICAgICAgIF9fd2Vhaw0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19BTElHTg0KKyNkZWZpbmUgU1RSSU5HX1BSQUdNQSh4KSBfUHJhZ21hKCN4KQ0KKyNkZWZpbmUgX19BTElHTihuKSBTVFJJTkdfUFJBR01BKGRhdGFfYWxpZ25tZW50ID0gbikNCisjZW5kaWYNCisNCisjaWZuZGVmIF9fUEFDS0VEDQorI2RlZmluZSBfX1BBQ0tFRCAgICAgICAgICAgIF9fcGFja2VkDQorI2VuZGlmDQorDQorI2RlZmluZSBHRVRfU1AoKSAgICAgICAgICAgICAgICBfX2dldF9TUCgpDQorDQorI2VsaWYgZGVmaW5lZCAgICggX19HTlVDX18gKQ0KKw0KKyNpZm5kZWYgX19BU00NCisjZGVmaW5lIF9fQVNNICAgICAgICAgICAgICAgX19hc20NCisjZW5kaWYNCisNCisjaWZuZGVmIF9fSU5MSU5FDQorI2RlZmluZSBfX0lOTElORSAgICAgICAgICAgIGlubGluZQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19XRUFLDQorI2RlZmluZSBfX1dFQUsgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHdlYWspKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19BTElHTg0KKyNkZWZpbmUgX19BTElHTihuKSAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKG4pKSkNCisjZW5kaWYNCisNCisjaWZuZGVmIF9fUEFDS0VEDQorI2RlZmluZSBfX1BBQ0tFRCAgICAgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSkNCisjZW5kaWYNCisNCisjZGVmaW5lIEdFVF9TUCgpICAgICAgICAgICAgICAgIGdjY19jdXJyZW50X3NwKCkNCisNCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnY2NfY3VycmVudF9zcCh2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdW5zaWduZWQgc3AgX19BU00oInNwIik7DQorICAgIHJldHVybiBzcDsNCit9DQorDQorI2VsaWYgZGVmaW5lZCAgICggX19UQVNLSU5HX18gKQ0KKw0KKyNpZm5kZWYgX19BU00NCisjZGVmaW5lIF9fQVNNICAgICAgICAgICAgICAgX19hc20NCisjZW5kaWYNCisNCisjaWZuZGVmIF9fSU5MSU5FDQorI2RlZmluZSBfX0lOTElORSAgICAgICAgICAgIGlubGluZQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19XRUFLDQorI2RlZmluZSBfX1dFQUsgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHdlYWspKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19BTElHTg0KKyNkZWZpbmUgX19BTElHTihuKSAgICAgICAgICBfX2FsaWduKG4pDQorI2VuZGlmDQorDQorLyogTm90IGRlZmluZWQgZm9yIFRBU0tJTkcuICovDQorI2lmbmRlZiBfX1BBQ0tFRA0KKyNkZWZpbmUgX19QQUNLRUQNCisjZW5kaWYNCisNCisjZGVmaW5lIEdFVF9TUCgpICAgICAgICAgICAgICAgIF9fZ2V0X01TUCgpDQorDQorI2VuZGlmDQorDQorLypsaW50IC0tZmxiICJMZWF2ZSBsaWJyYXJ5IHJlZ2lvbiIgKi8NCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9nY2Nfc3RhcnR1cF9ucmY1Mjg0MC5TIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvZ2NjX3N0YXJ0dXBfbnJmNTI4NDAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzQ2Mjc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvZ2NjX3N0YXJ0dXBfbnJmNTI4NDAuUwpAQCAtMCwwICsxLDUzOCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEzIEFSTSBMSU1JVEVEDQorDQorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZA0KKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQ0KKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0KKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0KKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElODQorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQ0KKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLnN5bnRheCB1bmlmaWVkDQorLmFyY2ggYXJtdjdlLW0NCisNCisjaWZkZWYgX19TVEFSVFVQX0NPTkZJRw0KKyNpbmNsdWRlICJzdGFydHVwX2NvbmZpZy5oIg0KKyNlbmRpZg0KKw0KKy5zZWN0aW9uIC5zdGFjaw0KKy5hbGlnbiAzDQorI2lmIGRlZmluZWQoX19TVEFSVFVQX0NPTkZJRykNCisuZXF1ICAgIFN0YWNrX1NpemUsIF9fU1RBUlRVUF9DT05GSUdfU1RBQ0tfU0laRQ0KKyNlbGlmIGRlZmluZWQoX19TVEFDS19TSVpFKQ0KKy5lcXUgICAgU3RhY2tfU2l6ZSwgX19TVEFDS19TSVpFDQorI2Vsc2UNCisuZXF1ICAgIFN0YWNrX1NpemUsIDgxOTINCisjZW5kaWYNCisuZ2xvYmwgX19TdGFja1RvcA0KKy5nbG9ibCBfX1N0YWNrTGltaXQNCitfX1N0YWNrTGltaXQ6DQorLnNwYWNlIFN0YWNrX1NpemUNCisuc2l6ZSBfX1N0YWNrTGltaXQsIC4gLSBfX1N0YWNrTGltaXQNCitfX1N0YWNrVG9wOg0KKy5zaXplIF9fU3RhY2tUb3AsIC4gLSBfX1N0YWNrVG9wDQorDQorLnNlY3Rpb24gLmhlYXANCisuYWxpZ24gMw0KKyNpZiBkZWZpbmVkKF9fU1RBUlRVUF9DT05GSUcpDQorLmVxdSBIZWFwX1NpemUsIF9fU1RBUlRVUF9DT05GSUdfSEVBUF9TSVpFDQorI2VsaWYgZGVmaW5lZChfX0hFQVBfU0laRSkNCisuZXF1IEhlYXBfU2l6ZSwgX19IRUFQX1NJWkUNCisjZWxzZQ0KKy5lcXUgICAgSGVhcF9TaXplLCA4MTkyDQorI2VuZGlmDQorLmdsb2JsIF9fSGVhcEJhc2UNCisuZ2xvYmwgX19IZWFwTGltaXQNCitfX0hlYXBCYXNlOg0KKy5pZiBIZWFwX1NpemUNCisuc3BhY2UgSGVhcF9TaXplDQorLmVuZGlmDQorLnNpemUgX19IZWFwQmFzZSwgLiAtIF9fSGVhcEJhc2UNCitfX0hlYXBMaW1pdDoNCisuc2l6ZSBfX0hlYXBMaW1pdCwgLiAtIF9fSGVhcExpbWl0DQorDQorLnNlY3Rpb24gLmlzcl92ZWN0b3INCisuYWxpZ24gMg0KKy5nbG9ibCBfX2lzcl92ZWN0b3INCitfX2lzcl92ZWN0b3I6DQorLmxvbmcgICBfX1N0YWNrVG9wICAgICAgICAgICAgICAgICAgLyogVG9wIG9mIFN0YWNrICovDQorLmxvbmcgICBSZXNldF9IYW5kbGVyDQorLmxvbmcgICBOTUlfSGFuZGxlcg0KKy5sb25nICAgSGFyZEZhdWx0X0hhbmRsZXINCisubG9uZyAgIE1lbW9yeU1hbmFnZW1lbnRfSGFuZGxlcg0KKy5sb25nICAgQnVzRmF1bHRfSGFuZGxlcg0KKy5sb25nICAgVXNhZ2VGYXVsdF9IYW5kbGVyDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgU1ZDX0hhbmRsZXINCisubG9uZyAgIERlYnVnTW9uX0hhbmRsZXINCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICBQZW5kU1ZfSGFuZGxlcg0KKy5sb25nICAgU3lzVGlja19IYW5kbGVyDQorDQorLyogRXh0ZXJuYWwgSW50ZXJydXB0cyAqLw0KKy5sb25nICAgUE9XRVJfQ0xPQ0tfSVJRSGFuZGxlcg0KKy5sb25nICAgUkFESU9fSVJRSGFuZGxlcg0KKy5sb25nICAgVUFSVEUwX1VBUlQwX0lSUUhhbmRsZXINCisubG9uZyAgIFNQSU0wX1NQSVMwX1RXSU0wX1RXSVMwX1NQSTBfVFdJMF9JUlFIYW5kbGVyDQorLmxvbmcgICBTUElNMV9TUElTMV9UV0lNMV9UV0lTMV9TUEkxX1RXSTFfSVJRSGFuZGxlcg0KKy5sb25nICAgTkZDVF9JUlFIYW5kbGVyDQorLmxvbmcgICBHUElPVEVfSVJRSGFuZGxlcg0KKy5sb25nICAgU0FBRENfSVJRSGFuZGxlcg0KKy5sb25nICAgVElNRVIwX0lSUUhhbmRsZXINCisubG9uZyAgIFRJTUVSMV9JUlFIYW5kbGVyDQorLmxvbmcgICBUSU1FUjJfSVJRSGFuZGxlcg0KKy5sb25nICAgUlRDMF9JUlFIYW5kbGVyDQorLmxvbmcgICBURU1QX0lSUUhhbmRsZXINCisubG9uZyAgIFJOR19JUlFIYW5kbGVyDQorLmxvbmcgICBFQ0JfSVJRSGFuZGxlcg0KKy5sb25nICAgQ0NNX0FBUl9JUlFIYW5kbGVyDQorLmxvbmcgICBXRFRfSVJRSGFuZGxlcg0KKy5sb25nICAgUlRDMV9JUlFIYW5kbGVyDQorLmxvbmcgICBRREVDX0lSUUhhbmRsZXINCisubG9uZyAgIENPTVBfTFBDT01QX0lSUUhhbmRsZXINCisubG9uZyAgIFNXSTBfRUdVMF9JUlFIYW5kbGVyDQorLmxvbmcgICBTV0kxX0VHVTFfSVJRSGFuZGxlcg0KKy5sb25nICAgU1dJMl9FR1UyX0lSUUhhbmRsZXINCisubG9uZyAgIFNXSTNfRUdVM19JUlFIYW5kbGVyDQorLmxvbmcgICBTV0k0X0VHVTRfSVJRSGFuZGxlcg0KKy5sb25nICAgU1dJNV9FR1U1X0lSUUhhbmRsZXINCisubG9uZyAgIFRJTUVSM19JUlFIYW5kbGVyDQorLmxvbmcgICBUSU1FUjRfSVJRSGFuZGxlcg0KKy5sb25nICAgUFdNMF9JUlFIYW5kbGVyDQorLmxvbmcgICBQRE1fSVJRSGFuZGxlcg0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICBNV1VfSVJRSGFuZGxlcg0KKy5sb25nICAgUFdNMV9JUlFIYW5kbGVyDQorLmxvbmcgICBQV00yX0lSUUhhbmRsZXINCisubG9uZyAgIFNQSU0yX1NQSVMyX1NQSTJfSVJRSGFuZGxlcg0KKy5sb25nICAgUlRDMl9JUlFIYW5kbGVyDQorLmxvbmcgICBJMlNfSVJRSGFuZGxlcg0KKy5sb25nICAgRlBVX0lSUUhhbmRsZXINCisubG9uZyAgIFVTQkRfSVJRSGFuZGxlcg0KKy5sb25nICAgVUFSVEUxX0lSUUhhbmRsZXINCisubG9uZyAgIFFTUElfSVJRSGFuZGxlcg0KKy5sb25nICAgQ1JZUFRPQ0VMTF9JUlFIYW5kbGVyDQorLmxvbmcgICBTUElNM19JUlFIYW5kbGVyDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgUFdNM19JUlFIYW5kbGVyDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisNCisuc2l6ZSBfX2lzcl92ZWN0b3IsIC4gLSBfX2lzcl92ZWN0b3INCisNCisvKiBSZXNldCBIYW5kbGVyICovDQorDQorDQorLnRleHQNCisudGh1bWINCisudGh1bWJfZnVuYw0KKy5hbGlnbiAxDQorLmdsb2JsIFJlc2V0X0hhbmRsZXINCisudHlwZSBSZXNldF9IYW5kbGVyLCAlIGZ1bmN0aW9uDQorUmVzZXRfSGFuZGxlcjoNCisNCisNCisvKiBMb29wIHRvIGNvcHkgZGF0YSBmcm9tIHJlYWQgb25seSBtZW1vcnkgdG8gUkFNLg0KKyAqIFRoZSByYW5nZXMgb2YgY29weSBmcm9tL3RvIGFyZSBzcGVjaWZpZWQgYnkgZm9sbG93aW5nIHN5bWJvbHM6DQorICogICAgICBfX2V0ZXh0OiBMTUEgb2Ygc3RhcnQgb2YgdGhlIHNlY3Rpb24gdG8gY29weSBmcm9tLiBVc3VhbGx5IGVuZCBvZiB0ZXh0DQorICogICAgICBfX2RhdGFfc3RhcnRfXzogVk1BIG9mIHN0YXJ0IG9mIHRoZSBzZWN0aW9uIHRvIGNvcHkgdG8uDQorICogICAgICBfX2Jzc19zdGFydF9fOiBWTUEgb2YgZW5kIG9mIHRoZSBzZWN0aW9uIHRvIGNvcHkgdG8uIE5vcm1hbGx5IF9fZGF0YV9lbmRfXyBpcyB1c2VkLCBidXQgYnkgdXNpbmcgX19ic3Nfc3RhcnRfXw0KKyAqICAgICAgICAgICAgICAgICAgICB0aGUgdXNlciBjYW4gYWRkIHRoZWlyIG93biBpbml0aWFsaXplZCBkYXRhIHNlY3Rpb24gYmVmb3JlIEJTUyBzZWN0aW9uIHdpdGggdGhlIElOVEVSVCBBRlRFUiBjb21tYW5kLg0KKyAqDQorICogQWxsIGFkZHJlc3NlcyBtdXN0IGJlIGFsaWduZWQgdG8gNCBieXRlcyBib3VuZGFyeS4NCisgKi8NCitsZHIgcjEsID0gX19ldGV4dA0KKyAgICAgICAgICBsZHIgcjIsID0gX19kYXRhX3N0YXJ0X18NCisgICAgICAgICAgICAgICAgICAgIGxkciByMywgPSBfX2Jzc19zdGFydF9fDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicyByMywgcjINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGUgLkxfbG9vcDFfZG9uZQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5MX2xvb3AxOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnMgcjMsICM0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGRyIHIwLCBbcjEsIHIzXQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciByMCwgW3IyLCByM10NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ3QgLkxfbG9vcDENCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuTF9sb29wMV9kb25lOg0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgcGFydCBvZiB3b3JrIHVzdWFsbHkgaXMgZG9uZSBpbiBDIGxpYnJhcnkgc3RhcnR1cCBjb2RlLiBPdGhlcndpc2UsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZGVmaW5lIF9fU1RBUlRVUF9DTEVBUl9CU1MgdG8gZW5hYmxlIGl0IGluIHRoaXMgc3RhcnR1cC4gVGhpcyBzZWN0aW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2xlYXJzIHRoZSBSQU0gd2hlcmUgQlNTIGRhdGEgaXMgbG9jYXRlZC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZSBCU1Mgc2VjdGlvbiBpcyBzcGVjaWZpZWQgYnkgZm9sbG93aW5nIHN5bWJvbHMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICBfX2Jzc19zdGFydF9fOiBzdGFydCBvZiB0aGUgQlNTIHNlY3Rpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgX19ic3NfZW5kX186IGVuZCBvZiB0aGUgQlNTIHNlY3Rpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBBbGwgYWRkcmVzc2VzIG11c3QgYmUgYWxpZ25lZCB0byA0IGJ5dGVzIGJvdW5kYXJ5Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyNpZmRlZiBfX1NUQVJUVVBfQ0xFQVJfQlNTDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGRyIHIxLCA9IF9fYnNzX3N0YXJ0X18NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGRyIHIyLCA9IF9fYnNzX2VuZF9fDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZzIHIwLCAwDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzIHIyLCByMQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlIC5MX2xvb3AzX2RvbmUNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5MX2xvb3AzOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicyByMiwgIzQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciByMCwgW3IxLCByMl0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJndCAuTF9sb29wMw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkxfbG9vcDNfZG9uZToNCisjZW5kaWYgLyogX19TVEFSVFVQX0NMRUFSX0JTUyAqLw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhlY3V0ZSBTeXN0ZW1Jbml0IGZ1bmN0aW9uLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmwgU3lzdGVtSW5pdA0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbCBfc3RhcnQgZnVuY3Rpb24gcHJvdmlkZWQgYnkgbGlicmFyaWVzLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSWYgdGhvc2UgbGlicmFyaWVzIGFyZSBub3QgYWNjZXNzaWJsZSwgZGVmaW5lIF9fU1RBUlQgYXMgeW91ciBlbnRyeSBwb2ludC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyNpZm5kZWYgX19TVEFSVA0KKyNkZWZpbmUgX19TVEFSVCBfc3RhcnQNCisjZW5kaWYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsIF9fU1RBUlQNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wb29sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2l6ZSAgIFJlc2V0X0hhbmRsZXIsIC4gLSBSZXNldF9IYW5kbGVyDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2VjdGlvbiAiLnRleHQiDQorDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEdW1teSBFeGNlcHRpb24gSGFuZGxlcnMgKGluZmluaXRlIGxvb3BzIHdoaWNoIGNhbiBiZSBtb2RpZmllZCkgKi8NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53ZWFrICAgTk1JX0hhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgTk1JX0hhbmRsZXIsICUgZnVuY3Rpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5NSV9IYW5kbGVyOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAgICAgICAuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2l6ZSAgIE5NSV9IYW5kbGVyLCAuIC0gTk1JX0hhbmRsZXINCisNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53ZWFrICAgSGFyZEZhdWx0X0hhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgSGFyZEZhdWx0X0hhbmRsZXIsICUgZnVuY3Rpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhcmRGYXVsdF9IYW5kbGVyOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAgICAgICAuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2l6ZSAgIEhhcmRGYXVsdF9IYW5kbGVyLCAuIC0gSGFyZEZhdWx0X0hhbmRsZXINCisNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53ZWFrICAgTWVtb3J5TWFuYWdlbWVudF9IYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgIE1lbW9yeU1hbmFnZW1lbnRfSGFuZGxlciwgJSBmdW5jdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5TWFuYWdlbWVudF9IYW5kbGVyOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAgICAgICAuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2l6ZSAgIE1lbW9yeU1hbmFnZW1lbnRfSGFuZGxlciwgLiAtIE1lbW9yeU1hbmFnZW1lbnRfSGFuZGxlcg0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndlYWsgICBCdXNGYXVsdF9IYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgIEJ1c0ZhdWx0X0hhbmRsZXIsICUgZnVuY3Rpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1c0ZhdWx0X0hhbmRsZXI6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICAgICAgIC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaXplICAgQnVzRmF1bHRfSGFuZGxlciwgLiAtIEJ1c0ZhdWx0X0hhbmRsZXINCisNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53ZWFrICAgVXNhZ2VGYXVsdF9IYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgIFVzYWdlRmF1bHRfSGFuZGxlciwgJSBmdW5jdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNhZ2VGYXVsdF9IYW5kbGVyOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAgICAgICAuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2l6ZSAgIFVzYWdlRmF1bHRfSGFuZGxlciwgLiAtIFVzYWdlRmF1bHRfSGFuZGxlcg0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndlYWsgICBTVkNfSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICBTVkNfSGFuZGxlciwgJSBmdW5jdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1ZDX0hhbmRsZXI6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICAgICAgIC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaXplICAgU1ZDX0hhbmRsZXIsIC4gLSBTVkNfSGFuZGxlcg0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndlYWsgICBEZWJ1Z01vbl9IYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgIERlYnVnTW9uX0hhbmRsZXIsICUgZnVuY3Rpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnTW9uX0hhbmRsZXI6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICAgICAgIC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaXplICAgRGVidWdNb25fSGFuZGxlciwgLiAtIERlYnVnTW9uX0hhbmRsZXINCisNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53ZWFrICAgUGVuZFNWX0hhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgUGVuZFNWX0hhbmRsZXIsICUgZnVuY3Rpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlbmRTVl9IYW5kbGVyOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAgICAgICAuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2l6ZSAgIFBlbmRTVl9IYW5kbGVyLCAuIC0gUGVuZFNWX0hhbmRsZXINCisNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53ZWFrICAgU3lzVGlja19IYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgIFN5c1RpY2tfSGFuZGxlciwgJSBmdW5jdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzVGlja19IYW5kbGVyOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAgICAgICAuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2l6ZSAgIFN5c1RpY2tfSGFuZGxlciwgLiAtIFN5c1RpY2tfSGFuZGxlcg0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVJRIEhhbmRsZXJzICovDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2xvYmwgIERlZmF1bHRfSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICBEZWZhdWx0X0hhbmRsZXIsICUgZnVuY3Rpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgICAgICAgLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNpemUgICBEZWZhdWx0X0hhbmRsZXIsIC4gLSBEZWZhdWx0X0hhbmRsZXINCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYWNybyAgSVJRIGhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53ZWFrICAgXGhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXQgICAgXGhhbmRsZXIsIERlZmF1bHRfSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmVuZG0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgUE9XRVJfQ0xPQ0tfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBSQURJT19JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFVBUlRFMF9VQVJUMF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFNQSU0wX1NQSVMwX1RXSU0wX1RXSVMwX1NQSTBfVFdJMF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFNQSU0xX1NQSVMxX1RXSU0xX1RXSVMxX1NQSTFfVFdJMV9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIE5GQ1RfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBHUElPVEVfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBTQUFEQ19JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFRJTUVSMF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFRJTUVSMV9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFRJTUVSMl9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFJUQzBfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBURU1QX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgUk5HX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgRUNCX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgQ0NNX0FBUl9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFdEVF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFJUQzFfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBRREVDX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgQ09NUF9MUENPTVBfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBTV0kwX0VHVTBfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBTV0kxX0VHVTFfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBTV0kyX0VHVTJfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBTV0kzX0VHVTNfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBTV0k0X0VHVTRfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBTV0k1X0VHVTVfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBUSU1FUjNfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBUSU1FUjRfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBQV00wX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgUERNX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgTVdVX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgUFdNMV9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFBXTTJfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBTUElNMl9TUElTMl9TUEkyX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgUlRDMl9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIEkyU19JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIEZQVV9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFVTQkRfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBVQVJURTFfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBRU1BJX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgQ1JZUFRPQ0VMTF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFNQSU0zX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgUFdNM19JUlFIYW5kbGVyDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZW5kDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQ5MzBjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmLmgKQEAgLTAsMCArMSw4NCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX0gNCisjZGVmaW5lIE5SRl9IDQorDQorLyogTURLIHZlcnNpb24gKi8NCisjZGVmaW5lIE1ES19NQUpPUl9WRVJTSU9OICAgOA0KKyNkZWZpbmUgTURLX01JTk9SX1ZFUlNJT04gICAxMQ0KKyNkZWZpbmUgTURLX01JQ1JPX1ZFUlNJT04gICAxDQorDQorLyogUmVkZWZpbmUgIm9sZCIgdG9vLWdlbmVyaWMgbmFtZSBOUkY1MiB0byBOUkY1MjgzMl9YWEFBIHRvIGtlZXAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovDQorI2lmIGRlZmluZWQgKE5SRjUyKQ0KKyNpZm5kZWYgTlJGNTI4MzJfWFhBQQ0KKyNkZWZpbmUgTlJGNTI4MzJfWFhBQQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qIERlZmluZSBOUkY1Ml9TRVJJRVMgZm9yIGNvbW1vbiB1c2UgaW4gblJGNTIgc2VyaWVzIGRldmljZXMuICovDQorI2lmIGRlZmluZWQgKE5SRjUyODMyX1hYQUEpIHx8IGRlZmluZWQgKE5SRjUyODQwX1hYQUEpDQorI2RlZmluZSBOUkY1Ml9TRVJJRVMNCisjZW5kaWYNCisNCisNCisjaWYgZGVmaW5lZChfV0lOMzIpDQorLyogRG8gbm90IGluY2x1ZGUgbnJmIHNwZWNpZmljIGZpbGVzIHdoZW4gYnVpbGRpbmcgZm9yIFBDIGhvc3QgKi8NCisjZWxpZiBkZWZpbmVkKF9fdW5peCkNCisvKiBEbyBub3QgaW5jbHVkZSBucmYgc3BlY2lmaWMgZmlsZXMgd2hlbiBidWlsZGluZyBmb3IgUEMgaG9zdCAqLw0KKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQ0KKy8qIERvIG5vdCBpbmNsdWRlIG5yZiBzcGVjaWZpYyBmaWxlcyB3aGVuIGJ1aWxkaW5nIGZvciBQQyBob3N0ICovDQorI2Vsc2UNCisNCisvKiBEZXZpY2Ugc2VsZWN0aW9uIGZvciBkZXZpY2UgaW5jbHVkZXMuICovDQorI2lmIGRlZmluZWQgKE5SRjUxKQ0KKyNpbmNsdWRlICJucmY1MS5oIg0KKyNpbmNsdWRlICJucmY1MV9iaXRmaWVsZHMuaCINCisjaW5jbHVkZSAibnJmNTFfZGVwcmVjYXRlZC5oIg0KKyNlbGlmIGRlZmluZWQgKE5SRjUyODQwX1hYQUEpDQorI2luY2x1ZGUgIm5yZjUyODQwLmgiDQorI2luY2x1ZGUgIm5yZjUyODQwX2JpdGZpZWxkcy5oIg0KKyNpbmNsdWRlICJucmY1MV90b19ucmY1Mjg0MC5oIg0KKyNpbmNsdWRlICJucmY1Ml90b19ucmY1Mjg0MC5oIg0KKyNlbGlmIGRlZmluZWQgKE5SRjUyODMyX1hYQUEpDQorI2luY2x1ZGUgIm5yZjUyLmgiDQorI2luY2x1ZGUgIm5yZjUyX2JpdGZpZWxkcy5oIg0KKyNpbmNsdWRlICJucmY1MV90b19ucmY1Mi5oIg0KKyNpbmNsdWRlICJucmY1Ml9uYW1lX2NoYW5nZS5oIg0KKyNlbHNlDQorI2Vycm9yICJEZXZpY2UgbXVzdCBiZSBkZWZpbmVkLiBTZWUgbnJmLmguIg0KKyNlbmRpZiAvKiBOUkY1MSwgTlJGNTI4MzJfWFhBQSwgTlJGNTI4NDBfWFhBQSAqLw0KKw0KKyNpbmNsdWRlICJjb21waWxlcl9hYnN0cmFjdGlvbi5oIg0KKw0KKyNlbmRpZiAvKiBfV0lOMzIgfHwgX191bml4IHx8IF9fQVBQTEVfXyAqLw0KKw0KKyNlbmRpZiAvKiBOUkZfSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUxX3RvX25yZjUyLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1MV90b19ucmY1Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOThiNmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1MV90b19ucmY1Mi5oCkBAIC0wLDAgKzEsOTUyIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkY1MV9UT19OUkY1Ml9IDQorI2RlZmluZSBOUkY1MV9UT19OUkY1Ml9IDQorDQorLypsaW50ICsrZmxiICJFbnRlciBsaWJyYXJ5IHJlZ2lvbiAqLw0KKw0KKy8qIFRoaXMgZmlsZSBpcyBnaXZlbiB0byBwcmV2ZW50IHlvdXIgU1cgZnJvbSBub3QgY29tcGlsaW5nIHdpdGggdGhlIG5hbWUgY2hhbmdlcyBiZXR3ZWVuIG5SRjUxIGFuZCBuUkY1MiBkZXZpY2VzLg0KKyAqIEl0IHJlZGVmaW5lcyB0aGUgb2xkIG5SRjUxIG5hbWVzIGludG8gdGhlIG5ldyBvbmVzIGFzIGxvbmcgYXMgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgc3RpbGwgc3VwcG9ydGVkLiBJZiB0aGUNCisgKiBmdW5jdGlvbmFsaXR5IGlzIGdvbmUsIHRoZXJlIG9sZCBuYW1lcyBhcmUgbm90IGRlZmluZWQsIHNvIGNvbXBpbGF0aW9uIHdpbGwgZmFpbC4gTm90ZSB0aGF0IGFsc28gaW5jbHVkZXMgbWFjcm9zDQorICogZnJvbSB0aGUgbnJmNTFfZGVwcmVjYXRlZC5oIGZpbGUuICovDQorDQorDQorLyogSVJRICovDQorLyogU2V2ZXJhbCBwZXJpcGhlcmFscyBoYXZlIGJlZW4gYWRkZWQgdG8gc2V2ZXJhbCBpbmRleGVzLiBOYW1lcyBvZiBJUlEgaGFuZGxlcnMgYW5kIElSUSBudW1iZXJzIGhhdmUgY2hhbmdlZC4gKi8NCisjZGVmaW5lIFVBUlQwX0lSUUhhbmRsZXIgICAgICAgIFVBUlRFMF9VQVJUMF9JUlFIYW5kbGVyDQorI2RlZmluZSBTUEkwX1RXSTBfSVJRSGFuZGxlciAgICBTUElNMF9TUElTMF9UV0lNMF9UV0lTMF9TUEkwX1RXSTBfSVJRSGFuZGxlcg0KKyNkZWZpbmUgU1BJMV9UV0kxX0lSUUhhbmRsZXIgICAgU1BJTTFfU1BJUzFfVFdJTTFfVFdJUzFfU1BJMV9UV0kxX0lSUUhhbmRsZXINCisjZGVmaW5lIEFEQ19JUlFIYW5kbGVyICAgICAgICAgIFNBQURDX0lSUUhhbmRsZXINCisjZGVmaW5lIExQQ09NUF9JUlFIYW5kbGVyICAgICAgIENPTVBfTFBDT01QX0lSUUhhbmRsZXINCisjZGVmaW5lIFNXSTBfSVJRSGFuZGxlciAgICAgICAgIFNXSTBfRUdVMF9JUlFIYW5kbGVyDQorI2RlZmluZSBTV0kxX0lSUUhhbmRsZXIgICAgICAgICBTV0kxX0VHVTFfSVJRSGFuZGxlcg0KKyNkZWZpbmUgU1dJMl9JUlFIYW5kbGVyICAgICAgICAgU1dJMl9FR1UyX0lSUUhhbmRsZXINCisjZGVmaW5lIFNXSTNfSVJRSGFuZGxlciAgICAgICAgIFNXSTNfRUdVM19JUlFIYW5kbGVyDQorI2RlZmluZSBTV0k0X0lSUUhhbmRsZXIgICAgICAgICBTV0k0X0VHVTRfSVJRSGFuZGxlcg0KKyNkZWZpbmUgU1dJNV9JUlFIYW5kbGVyICAgICAgICAgU1dJNV9FR1U1X0lSUUhhbmRsZXINCisNCisjZGVmaW5lIFVBUlQwX0lSUW4gICAgICAgICAgICAgIFVBUlRFMF9VQVJUMF9JUlFuDQorI2RlZmluZSBTUEkwX1RXSTBfSVJRbiAgICAgICAgICBTUElNMF9TUElTMF9UV0lNMF9UV0lTMF9TUEkwX1RXSTBfSVJRbg0KKyNkZWZpbmUgU1BJMV9UV0kxX0lSUW4gICAgICAgICAgU1BJTTFfU1BJUzFfVFdJTTFfVFdJUzFfU1BJMV9UV0kxX0lSUW4NCisjZGVmaW5lIEFEQ19JUlFuICAgICAgICAgICAgICAgIFNBQURDX0lSUW4NCisjZGVmaW5lIExQQ09NUF9JUlFuICAgICAgICAgICAgIENPTVBfTFBDT01QX0lSUW4NCisjZGVmaW5lIFNXSTBfSVJRbiAgICAgICAgICAgICAgIFNXSTBfRUdVMF9JUlFuDQorI2RlZmluZSBTV0kxX0lSUW4gICAgICAgICAgICAgICBTV0kxX0VHVTFfSVJRbg0KKyNkZWZpbmUgU1dJMl9JUlFuICAgICAgICAgICAgICAgU1dJMl9FR1UyX0lSUW4NCisjZGVmaW5lIFNXSTNfSVJRbiAgICAgICAgICAgICAgIFNXSTNfRUdVM19JUlFuDQorI2RlZmluZSBTV0k0X0lSUW4gICAgICAgICAgICAgICBTV0k0X0VHVTRfSVJRbg0KKyNkZWZpbmUgU1dJNV9JUlFuICAgICAgICAgICAgICAgU1dJNV9FR1U1X0lSUW4NCisNCisNCisvKiBVSUNSICovDQorLyogUmVnaXN0ZXIgUkJQQ09ORiB3YXMgcmVuYW1lZCB0byBBUFBST1RFQ1QuICovDQorI2RlZmluZSBSQlBDT05GICAgICBBUFBST1RFQ1QNCisNCisjZGVmaW5lIFVJQ1JfUkJQQ09ORl9QQUxMX1BvcyAgICAgICAgICAgVUlDUl9BUFBST1RFQ1RfUEFMTF9Qb3MNCisjZGVmaW5lIFVJQ1JfUkJQQ09ORl9QQUxMX01zayAgICAgICAgICAgVUlDUl9BUFBST1RFQ1RfUEFMTF9Nc2sNCisjZGVmaW5lIFVJQ1JfUkJQQ09ORl9QQUxMX0VuYWJsZWQgICAgICAgVUlDUl9BUFBST1RFQ1RfUEFMTF9FbmFibGVkDQorI2RlZmluZSBVSUNSX1JCUENPTkZfUEFMTF9EaXNhYmxlZCAgICAgIFVJQ1JfQVBQUk9URUNUX1BBTExfRGlzYWJsZWQNCisNCisNCisvKiBHUElPICovDQorLyogR1BJTyBwb3J0IHdhcyByZW5hbWVkIHRvIFAwLiAqLw0KKyNkZWZpbmUgTlJGX0dQSU8gICAgICAgIE5SRl9QMA0KKyNkZWZpbmUgTlJGX0dQSU9fQkFTRSAgIE5SRl9QMF9CQVNFDQorDQorDQorLyogUURFQyAqLw0KKy8qIFRoZSByZWdpc3RlcnMgUFNFTEEsIFBTRUxCIGFuZCBQU0VMTEVEIHdlcmUgcmVzdHJ1Y3R1cmVkIGludG8gYSBzdHJ1Y3QuICovDQorI2RlZmluZSBQU0VMTEVEICAgICBQU0VMLkxFRA0KKyNkZWZpbmUgUFNFTEEgICAgICAgUFNFTC5BDQorI2RlZmluZSBQU0VMQiAgICAgICBQU0VMLkINCisNCisNCisvKiBTUElTICovDQorLyogVGhlIHJlZ2lzdGVycyBQU0VMU0NLLCBQU0VMTUlTTywgUFNFTE1PU0ksIFBTRUxDU04gd2VyZSByZXN0cnVjdHVyZWQgaW50byBhIHN0cnVjdC4gKi8NCisjZGVmaW5lIFBTRUxTQ0sgICAgICAgUFNFTC5TQ0sNCisjZGVmaW5lIFBTRUxNSVNPICAgICAgUFNFTC5NSVNPDQorI2RlZmluZSBQU0VMTU9TSSAgICAgIFBTRUwuTU9TSQ0KKyNkZWZpbmUgUFNFTENTTiAgICAgICBQU0VMLkNTTg0KKw0KKy8qIFRoZSByZWdpc3RlcnMgUlhEUFRSLCBNQVhSWCwgQU1PVU5UUlggd2VyZSByZXN0cnVjdHVyZWQgaW50byBhIHN0cnVjdCAqLw0KKyNkZWZpbmUgUlhEUFRSICAgICAgICBSWEQuUFRSDQorI2RlZmluZSBNQVhSWCAgICAgICAgIFJYRC5NQVhDTlQNCisjZGVmaW5lIEFNT1VOVFJYICAgICAgUlhELkFNT1VOVA0KKw0KKyNkZWZpbmUgU1BJU19NQVhSWF9NQVhSWF9Qb3MgICAgICAgIFNQSVNfUlhEX01BWENOVF9NQVhDTlRfUG9zDQorI2RlZmluZSBTUElTX01BWFJYX01BWFJYX01zayAgICAgICAgU1BJU19SWERfTUFYQ05UX01BWENOVF9Nc2sNCisNCisjZGVmaW5lIFNQSVNfQU1PVU5UUlhfQU1PVU5UUlhfUG9zICBTUElTX1JYRF9BTU9VTlRfQU1PVU5UX1Bvcw0KKyNkZWZpbmUgU1BJU19BTU9VTlRSWF9BTU9VTlRSWF9Nc2sgIFNQSVNfUlhEX0FNT1VOVF9BTU9VTlRfTXNrDQorDQorLyogVGhlIHJlZ2lzdGVycyBUWERQVFIsIE1BWFRYLCBBTU9VTlRUWCB3ZXJlIHJlc3RydWN0dXJlZCBpbnRvIGEgc3RydWN0ICovDQorI2RlZmluZSBUWERQVFIgICAgICAgIFRYRC5QVFINCisjZGVmaW5lIE1BWFRYICAgICAgICAgVFhELk1BWENOVA0KKyNkZWZpbmUgQU1PVU5UVFggICAgICBUWEQuQU1PVU5UDQorDQorI2RlZmluZSBTUElTX01BWFRYX01BWFRYX1BvcyAgICAgICAgU1BJU19UWERfTUFYQ05UX01BWENOVF9Qb3MNCisjZGVmaW5lIFNQSVNfTUFYVFhfTUFYVFhfTXNrICAgICAgICBTUElTX1RYRF9NQVhDTlRfTUFYQ05UX01zaw0KKw0KKyNkZWZpbmUgU1BJU19BTU9VTlRUWF9BTU9VTlRUWF9Qb3MgIFNQSVNfVFhEX0FNT1VOVF9BTU9VTlRfUG9zDQorI2RlZmluZSBTUElTX0FNT1VOVFRYX0FNT1VOVFRYX01zayAgU1BJU19UWERfQU1PVU5UX0FNT1VOVF9Nc2sNCisNCisNCisvKiBNUFUgKi8NCisvKiBQYXJ0IG9mIE1QVSBtb2R1bGUgd2FzIHJlbmFtZWQgQlBST1QsIHdoaWxlIHRoZSByZXN0IHdhcyBlbGltaW5hdGVkLiAqLw0KKyNkZWZpbmUgTlJGX01QVSAgICAgTlJGX0JQUk9UDQorDQorLyogUmVnaXN0ZXIgRElTQUJMRUlOREVCVUcgbWFjcm9zIHdlcmUgYWZmZWN0ZWQuICovDQorI2RlZmluZSBNUFVfRElTQUJMRUlOREVCVUdfRElTQUJMRUlOREVCVUdfUG9zICAgICAgIEJQUk9UX0RJU0FCTEVJTkRFQlVHX0RJU0FCTEVJTkRFQlVHX1Bvcw0KKyNkZWZpbmUgTVBVX0RJU0FCTEVJTkRFQlVHX0RJU0FCTEVJTkRFQlVHX01zayAgICAgICBCUFJPVF9ESVNBQkxFSU5ERUJVR19ESVNBQkxFSU5ERUJVR19Nc2sNCisjZGVmaW5lIE1QVV9ESVNBQkxFSU5ERUJVR19ESVNBQkxFSU5ERUJVR19FbmFibGVkICAgQlBST1RfRElTQUJMRUlOREVCVUdfRElTQUJMRUlOREVCVUdfRW5hYmxlZA0KKyNkZWZpbmUgTVBVX0RJU0FCTEVJTkRFQlVHX0RJU0FCTEVJTkRFQlVHX0Rpc2FibGVkICBCUFJPVF9ESVNBQkxFSU5ERUJVR19ESVNBQkxFSU5ERUJVR19EaXNhYmxlZA0KKw0KKy8qIFJlZ2lzdGVycyBQUk9URU5TRVQwIGFuZCBQUk9URU5TRVQxIHdlcmUgYWZmZWN0ZWQgYW5kIHJlbmFtZWQgYXMgQ09ORklHMCBhbmQgQ09ORklHMS4gKi8NCisjZGVmaW5lIFBST1RFTlNFVDAgIENPTkZJRzANCisjZGVmaW5lIFBST1RFTlNFVDEgIENPTkZJRzENCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2M19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjNfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjNfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYzX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYzX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT042M19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYzX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT042M19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjNfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYzX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2Ml9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjJfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjJfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYyX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYyX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT042Ml9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYyX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT042Ml9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjJfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYyX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2MV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjFfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjFfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYxX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYxX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT042MV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYxX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT042MV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjFfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYxX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2MF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjBfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjBfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYwX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYwX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT042MF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYwX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT042MF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjBfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYwX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1OV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTlfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTlfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU5X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU5X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT041OV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU5X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT041OV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTlfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU5X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1OF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONThfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNThfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU4X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU4X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT041OF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU4X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT041OF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNThfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU4X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1N19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTdfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTdfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU3X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU3X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT041N19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU3X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT041N19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTdfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU3X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1Nl9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTZfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTZfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU2X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU2X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT041Nl9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU2X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT041Nl9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTZfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU2X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1NV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTVfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTVfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU1X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU1X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT041NV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU1X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT041NV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTVfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU1X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1NF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTRfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTRfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU0X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU0X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT041NF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU0X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT041NF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTRfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU0X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1M19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTNfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTNfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUzX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUzX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT041M19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUzX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT041M19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTNfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUzX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1Ml9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTJfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTJfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUyX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUyX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT041Ml9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUyX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT041Ml9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTJfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUyX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1MV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTFfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTFfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUxX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUxX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT041MV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUxX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT041MV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTFfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUxX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1MF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTBfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTBfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUwX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUwX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT041MF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUwX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT041MF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTBfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUwX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0OV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDlfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDlfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ5X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ5X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT040OV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ5X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT040OV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDlfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ5X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0OF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDhfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDhfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ4X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ4X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT040OF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ4X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT040OF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDhfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ4X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0N19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDdfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDdfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ3X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ3X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT040N19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ3X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT040N19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDdfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ3X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0Nl9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDZfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDZfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ2X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ2X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT040Nl9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ2X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT040Nl9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDZfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ2X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0NV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDVfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDVfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ1X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ1X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT040NV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ1X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT040NV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDVfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ1X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0NF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDRfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDRfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ0X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ0X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT040NF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ0X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT040NF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDRfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ0X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0M19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDNfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDNfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQzX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQzX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT040M19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQzX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT040M19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDNfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQzX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0Ml9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDJfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDJfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQyX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQyX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT040Ml9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQyX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT040Ml9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDJfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQyX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0MV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDFfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDFfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQxX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQxX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT040MV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQxX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT040MV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDFfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQxX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0MF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDBfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDBfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQwX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQwX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT040MF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQwX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT040MF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDBfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQwX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczOV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzlfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzlfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM5X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM5X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT04zOV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM5X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT04zOV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzlfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM5X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczOF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzhfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzhfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM4X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM4X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT04zOF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM4X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT04zOF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzhfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM4X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczN19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzdfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzdfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM3X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM3X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT04zN19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM3X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT04zN19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzdfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM3X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczNl9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzZfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzZfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM2X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM2X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT04zNl9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM2X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT04zNl9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzZfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM2X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczNV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzVfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzVfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM1X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM1X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT04zNV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM1X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT04zNV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzVfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM1X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczNF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzRfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzRfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM0X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM0X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT04zNF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM0X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT04zNF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzRfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM0X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczM19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzNfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzNfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjMzX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzMzX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT04zM19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzMzX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT04zM19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzNfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjMzX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczMl9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzJfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzJfTXNrICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjMyX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzMyX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMV9SRUdJT04zMl9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzMyX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMV9SRUdJT04zMl9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzJfU2V0ICAgICAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjMyX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUczMV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMzFfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMzFfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjMxX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzMxX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04zMV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzMxX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04zMV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMzFfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjMxX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUczMF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMzBfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMzBfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjMwX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzMwX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04zMF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzMwX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04zMF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMzBfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjMwX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyOV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjlfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjlfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI5X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI5X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04yOV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI5X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04yOV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjlfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI5X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyOF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjhfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjhfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI4X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI4X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04yOF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI4X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04yOF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjhfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI4X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyN19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjdfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjdfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI3X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI3X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04yN19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI3X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04yN19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjdfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI3X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyNl9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjZfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjZfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI2X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI2X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04yNl9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI2X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04yNl9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjZfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI2X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyNV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjVfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjVfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI1X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI1X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04yNV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI1X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04yNV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjVfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI1X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyNF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjRfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjRfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI0X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI0X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04yNF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI0X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04yNF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjRfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI0X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyM19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjNfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjNfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIzX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIzX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04yM19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIzX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04yM19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjNfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIzX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyMl9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjJfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjJfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIyX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIyX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04yMl9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIyX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04yMl9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjJfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIyX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyMV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjFfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjFfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIxX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIxX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04yMV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIxX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04yMV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjFfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIxX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyMF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjBfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjBfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIwX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIwX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04yMF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIwX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04yMF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjBfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIwX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxOV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTlfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTlfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE5X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE5X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04xOV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE5X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04xOV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTlfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE5X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxOF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMThfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMThfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE4X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE4X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04xOF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE4X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04xOF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMThfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE4X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxN19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTdfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTdfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE3X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE3X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04xN19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE3X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04xN19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTdfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE3X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxNl9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTZfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTZfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE2X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE2X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04xNl9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE2X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04xNl9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTZfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE2X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxNV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTVfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTVfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE1X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE1X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04xNV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE1X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04xNV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTVfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE1X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxNF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTRfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTRfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE0X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE0X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04xNF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE0X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04xNF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTRfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE0X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxM19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTNfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTNfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEzX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzEzX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04xM19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzEzX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04xM19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTNfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEzX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxMl9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTJfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTJfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEyX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzEyX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04xMl9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzEyX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04xMl9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTJfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEyX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxMV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTFfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTFfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjExX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzExX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04xMV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzExX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04xMV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTFfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjExX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxMF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTBfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTBfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEwX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzEwX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04xMF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzEwX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04xMF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTBfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEwX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc5X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT045X1Bvcw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzlfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjlfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHOV9EaXNhYmxlZCAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OOV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzlfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjlfRW5hYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzlfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjlfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzhfUG9zICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjhfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHOF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OOF9Nc2sNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc4X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT044X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHOF9FbmFibGVkICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OOF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHOF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OOF9FbmFibGVkDQorDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHN19Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ON19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc3X01zayAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT043X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzdfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjdfRGlzYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc3X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT043X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc3X1NldCAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT043X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc2X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT042X1Bvcw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzZfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjZfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHNl9EaXNhYmxlZCAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ONl9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzZfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjZfRW5hYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzZfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjZfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzVfUG9zICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjVfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHNV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ONV9Nc2sNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc1X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT041X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHNV9FbmFibGVkICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ONV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHNV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ONV9FbmFibGVkDQorDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHNF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ONF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc0X01zayAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT040X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzRfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjRfRGlzYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc0X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT040X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc0X1NldCAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT040X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUczX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04zX1Bvcw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzNfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjNfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHM19EaXNhYmxlZCAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OM19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzNfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjNfRW5hYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzNfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjNfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzJfUG9zICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjJfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMl9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMl9Nc2sNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04yX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMl9FbmFibGVkICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMl9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMl9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMl9FbmFibGVkDQorDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxX01zayAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzFfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjFfRGlzYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04xX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxX1NldCAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcwX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04wX1Bvcw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzBfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjBfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMF9EaXNhYmxlZCAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzBfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjBfRW5hYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzBfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjBfRW5hYmxlZA0KKw0KKw0KKy8qIEZyb20gbnJmNTFfZGVwcmVjYXRlZC5oICovDQorDQorLyogTlZNQyAqLw0KKy8qIFRoZSByZWdpc3RlciBFUkFTRVBST1RFQ1RFRFBBR0UgY2hhbmdlZCBuYW1lIHRvIEVSQVNFUENSMCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gKi8NCisjZGVmaW5lIEVSQVNFUFJPVEVDVEVEUEFHRSAgICAgIEVSQVNFUENSMA0KKw0KKw0KKy8qIElSUSAqLw0KKy8qIENPTVAgbW9kdWxlIHdhcyBlbGltaW5hdGVkLiBBZGFwdGVkIHRvIG5yZjUyIGhlYWRlcnMuICovDQorI2RlZmluZSBMUENPTVBfQ09NUF9JUlFIYW5kbGVyICBDT01QX0xQQ09NUF9JUlFIYW5kbGVyDQorI2RlZmluZSBMUENPTVBfQ09NUF9JUlFuICAgICAgICBDT01QX0xQQ09NUF9JUlFuDQorDQorDQorLyogUkVGU0VMIHJlZ2lzdGVyIHJlZGVmaW5lZCBlbnVtZXJhdGVkIHZhbHVlcyBhbmQgYWRkZWQgc29tZSBtb3JlLiAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfU3VwcGx5T25lRWlnaHRoUHJlc2NhbGluZyAgICAgICAgICBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWYxXzhWZGQNCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1N1cHBseVR3b0VpZ2h0aHNQcmVzY2FsaW5nICAgICAgICAgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmMl84VmRkDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9TdXBwbHlUaHJlZUVpZ2h0aHNQcmVzY2FsaW5nICAgICAgIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjNfOFZkZA0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfU3VwcGx5Rm91ckVpZ2h0aHNQcmVzY2FsaW5nICAgICAgICBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY0XzhWZGQNCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1N1cHBseUZpdmVFaWdodGhzUHJlc2NhbGluZyAgICAgICAgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmNV84VmRkDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9TdXBwbHlTaXhFaWdodGhzUHJlc2NhbGluZyAgICAgICAgIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjZfOFZkZA0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfU3VwcGx5U2V2ZW5FaWdodGhzUHJlc2NhbGluZyAgICAgICBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY3XzhWZGQNCisNCisNCisvKiBSQURJTyAqLw0KKy8qIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCBTS0lQQUREUiB3YXMgY29ycmVjdGVkLiBPbGQgbWFjcm9zIGFkZGVkIGZvciBjb21wYXRpYmlsaXR5LiAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX1NLSVBfQUREUl9Qb3MgICAgICBSQURJT19DUkNDTkZfU0tJUEFERFJfUG9zDQorI2RlZmluZSBSQURJT19DUkNDTkZfU0tJUF9BRERSX01zayAgICAgIFJBRElPX0NSQ0NORl9TS0lQQUREUl9Nc2sNCisjZGVmaW5lIFJBRElPX0NSQ0NORl9TS0lQX0FERFJfSW5jbHVkZSAgUkFESU9fQ1JDQ05GX1NLSVBBRERSX0luY2x1ZGUNCisjZGVmaW5lIFJBRElPX0NSQ0NORl9TS0lQX0FERFJfU2tpcCAgICAgUkFESU9fQ1JDQ05GX1NLSVBBRERSX1NraXANCisNCisNCisvKiBGSUNSICovDQorLyogVGhlIHJlZ2lzdGVycyBGSUNSLkRFVklDRUlEMCBhbmQgRklDUi5ERVZJQ0VJRDEgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkuICovDQorI2RlZmluZSBERVZJQ0VJRDAgICAgICAgREVWSUNFSURbMF0NCisjZGVmaW5lIERFVklDRUlEMSAgICAgICBERVZJQ0VJRFsxXQ0KKw0KKy8qIFRoZSByZWdpc3RlcnMgRklDUi5FUjAsIEZJQ1IuRVIxLCBGSUNSLkVSMiBhbmQgRklDUi5FUjMgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkuICovDQorI2RlZmluZSBFUjAgICAgICAgICAgICAgRVJbMF0NCisjZGVmaW5lIEVSMSAgICAgICAgICAgICBFUlsxXQ0KKyNkZWZpbmUgRVIyICAgICAgICAgICAgIEVSWzJdDQorI2RlZmluZSBFUjMgICAgICAgICAgICAgRVJbM10NCisNCisvKiBUaGUgcmVnaXN0ZXJzIEZJQ1IuSVIwLCBGSUNSLklSMSwgRklDUi5JUjIgYW5kIEZJQ1IuSVIzIHdlcmUgcmVuYW1lZCBpbnRvIGFuIGFycmF5LiAqLw0KKyNkZWZpbmUgSVIwICAgICAgICAgICAgIElSWzBdDQorI2RlZmluZSBJUjEgICAgICAgICAgICAgSVJbMV0NCisjZGVmaW5lIElSMiAgICAgICAgICAgICBJUlsyXQ0KKyNkZWZpbmUgSVIzICAgICAgICAgICAgIElSWzNdDQorDQorLyogVGhlIHJlZ2lzdGVycyBGSUNSLkRFVklDRUFERFIwIGFuZCBGSUNSLkRFVklDRUFERFIxIHdlcmUgcmVuYW1lZCBpbnRvIGFuIGFycmF5LiAqLw0KKyNkZWZpbmUgREVWSUNFQUREUjAgICAgIERFVklDRUFERFJbMF0NCisjZGVmaW5lIERFVklDRUFERFIxICAgICBERVZJQ0VBRERSWzFdDQorDQorDQorLyogUFBJICovDQorLyogVGhlIHRhc2tzIFBQSS5UQVNLU19DSEd4RU4gYW5kIFBQSS5UQVNLU19DSEd4RElTIHdlcmUgcmVuYW1lZCBpbnRvIGFuIGFycmF5IG9mIHN0cnVjdHMuICovDQorI2RlZmluZSBUQVNLU19DSEcwRU4gICAgIFRBU0tTX0NIR1swXS5FTg0KKyNkZWZpbmUgVEFTS1NfQ0hHMERJUyAgICBUQVNLU19DSEdbMF0uRElTDQorI2RlZmluZSBUQVNLU19DSEcxRU4gICAgIFRBU0tTX0NIR1sxXS5FTg0KKyNkZWZpbmUgVEFTS1NfQ0hHMURJUyAgICBUQVNLU19DSEdbMV0uRElTDQorI2RlZmluZSBUQVNLU19DSEcyRU4gICAgIFRBU0tTX0NIR1syXS5FTg0KKyNkZWZpbmUgVEFTS1NfQ0hHMkRJUyAgICBUQVNLU19DSEdbMl0uRElTDQorI2RlZmluZSBUQVNLU19DSEczRU4gICAgIFRBU0tTX0NIR1szXS5FTg0KKyNkZWZpbmUgVEFTS1NfQ0hHM0RJUyAgICBUQVNLU19DSEdbM10uRElTDQorDQorLyogVGhlIHJlZ2lzdGVycyBQUEkuQ0h4X0VFUCBhbmQgUFBJLkNIeF9URVAgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkgb2Ygc3RydWN0cy4gKi8NCisjZGVmaW5lIENIMF9FRVAgICAgICAgICAgQ0hbMF0uRUVQDQorI2RlZmluZSBDSDBfVEVQICAgICAgICAgIENIWzBdLlRFUA0KKyNkZWZpbmUgQ0gxX0VFUCAgICAgICAgICBDSFsxXS5FRVANCisjZGVmaW5lIENIMV9URVAgICAgICAgICAgQ0hbMV0uVEVQDQorI2RlZmluZSBDSDJfRUVQICAgICAgICAgIENIWzJdLkVFUA0KKyNkZWZpbmUgQ0gyX1RFUCAgICAgICAgICBDSFsyXS5URVANCisjZGVmaW5lIENIM19FRVAgICAgICAgICAgQ0hbM10uRUVQDQorI2RlZmluZSBDSDNfVEVQICAgICAgICAgIENIWzNdLlRFUA0KKyNkZWZpbmUgQ0g0X0VFUCAgICAgICAgICBDSFs0XS5FRVANCisjZGVmaW5lIENINF9URVAgICAgICAgICAgQ0hbNF0uVEVQDQorI2RlZmluZSBDSDVfRUVQICAgICAgICAgIENIWzVdLkVFUA0KKyNkZWZpbmUgQ0g1X1RFUCAgICAgICAgICBDSFs1XS5URVANCisjZGVmaW5lIENINl9FRVAgICAgICAgICAgQ0hbNl0uRUVQDQorI2RlZmluZSBDSDZfVEVQICAgICAgICAgIENIWzZdLlRFUA0KKyNkZWZpbmUgQ0g3X0VFUCAgICAgICAgICBDSFs3XS5FRVANCisjZGVmaW5lIENIN19URVAgICAgICAgICAgQ0hbN10uVEVQDQorI2RlZmluZSBDSDhfRUVQICAgICAgICAgIENIWzhdLkVFUA0KKyNkZWZpbmUgQ0g4X1RFUCAgICAgICAgICBDSFs4XS5URVANCisjZGVmaW5lIENIOV9FRVAgICAgICAgICAgQ0hbOV0uRUVQDQorI2RlZmluZSBDSDlfVEVQICAgICAgICAgIENIWzldLlRFUA0KKyNkZWZpbmUgQ0gxMF9FRVAgICAgICAgICBDSFsxMF0uRUVQDQorI2RlZmluZSBDSDEwX1RFUCAgICAgICAgIENIWzEwXS5URVANCisjZGVmaW5lIENIMTFfRUVQICAgICAgICAgQ0hbMTFdLkVFUA0KKyNkZWZpbmUgQ0gxMV9URVAgICAgICAgICBDSFsxMV0uVEVQDQorI2RlZmluZSBDSDEyX0VFUCAgICAgICAgIENIWzEyXS5FRVANCisjZGVmaW5lIENIMTJfVEVQICAgICAgICAgQ0hbMTJdLlRFUA0KKyNkZWZpbmUgQ0gxM19FRVAgICAgICAgICBDSFsxM10uRUVQDQorI2RlZmluZSBDSDEzX1RFUCAgICAgICAgIENIWzEzXS5URVANCisjZGVmaW5lIENIMTRfRUVQICAgICAgICAgQ0hbMTRdLkVFUA0KKyNkZWZpbmUgQ0gxNF9URVAgICAgICAgICBDSFsxNF0uVEVQDQorI2RlZmluZSBDSDE1X0VFUCAgICAgICAgIENIWzE1XS5FRVANCisjZGVmaW5lIENIMTVfVEVQICAgICAgICAgQ0hbMTVdLlRFUA0KKw0KKy8qIFRoZSByZWdpc3RlcnMgUFBJLkNIRzAsIFBQSS5DSEcxLCBQUEkuQ0hHMiBhbmQgUFBJLkNIRzMgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkuICovDQorI2RlZmluZSBDSEcwICAgICAgICAgICAgIENIR1swXQ0KKyNkZWZpbmUgQ0hHMSAgICAgICAgICAgICBDSEdbMV0NCisjZGVmaW5lIENIRzIgICAgICAgICAgICAgQ0hHWzJdDQorI2RlZmluZSBDSEczICAgICAgICAgICAgIENIR1szXQ0KKw0KKy8qIEFsbCBiaXRmaWVsZCBtYWNyb3MgZm9yIHRoZSBDSEd4IHJlZ2lzdGVycyB0aGVyZWZvcmUgY2hhbmdlZCBuYW1lLiAqLw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNV9Qb3MgICAgICAgUFBJX0NIR19DSDE1X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNV9Nc2sgICAgICAgUFBJX0NIR19DSDE1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNV9FeGNsdWRlZCAgUFBJX0NIR19DSDE1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDE1X0luY2x1ZGVkICBQUElfQ0hHX0NIMTVfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTRfUG9zICAgICAgIFBQSV9DSEdfQ0gxNF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTRfTXNrICAgICAgIFBQSV9DSEdfQ0gxNF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTRfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxNF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNF9JbmNsdWRlZCAgUFBJX0NIR19DSDE0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDEzX1BvcyAgICAgICBQUElfQ0hHX0NIMTNfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDEzX01zayAgICAgICBQUElfQ0hHX0NIMTNfTXNrDQorI2RlZmluZSBQUElfQ0hHMF9DSDEzX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTNfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMl9Qb3MgICAgICAgUFBJX0NIR19DSDEyX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMl9Nc2sgICAgICAgUFBJX0NIR19DSDEyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMl9FeGNsdWRlZCAgUFBJX0NIR19DSDEyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDEyX0luY2x1ZGVkICBQUElfQ0hHX0NIMTJfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTFfUG9zICAgICAgIFBQSV9DSEdfQ0gxMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTFfTXNrICAgICAgIFBQSV9DSEdfQ0gxMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTFfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMV9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMV9JbmNsdWRlZCAgUFBJX0NIR19DSDExX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDEwX1BvcyAgICAgICBQUElfQ0hHX0NIMTBfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDEwX01zayAgICAgICBQUElfQ0hHX0NIMTBfTXNrDQorI2RlZmluZSBQUElfQ0hHMF9DSDEwX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTBfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g5X1BvcyAgICAgICAgUFBJX0NIR19DSDlfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDlfTXNrICAgICAgICBQUElfQ0hHX0NIOV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIOV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g5X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDlfSW5jbHVkZWQgICBQUElfQ0hHX0NIOV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g4X1BvcyAgICAgICAgUFBJX0NIR19DSDhfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDhfTXNrICAgICAgICBQUElfQ0hHX0NIOF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIOF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g4X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDhfSW5jbHVkZWQgICBQUElfQ0hHX0NIOF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g3X1BvcyAgICAgICAgUFBJX0NIR19DSDdfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDdfTXNrICAgICAgICBQUElfQ0hHX0NIN19Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIN19FeGNsdWRlZCAgIFBQSV9DSEdfQ0g3X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDdfSW5jbHVkZWQgICBQUElfQ0hHX0NIN19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g2X1BvcyAgICAgICAgUFBJX0NIR19DSDZfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDZfTXNrICAgICAgICBQUElfQ0hHX0NINl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NINl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g2X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDZfSW5jbHVkZWQgICBQUElfQ0hHX0NINl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g1X1BvcyAgICAgICAgUFBJX0NIR19DSDVfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDVfTXNrICAgICAgICBQUElfQ0hHX0NINV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NINV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDVfSW5jbHVkZWQgICBQUElfQ0hHX0NINV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g0X1BvcyAgICAgICAgUFBJX0NIR19DSDRfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDRfTXNrICAgICAgICBQUElfQ0hHX0NINF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NINF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDRfSW5jbHVkZWQgICBQUElfQ0hHX0NINF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gzX1BvcyAgICAgICAgUFBJX0NIR19DSDNfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDNfTXNrICAgICAgICBQUElfQ0hHX0NIM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIM19FeGNsdWRlZCAgIFBQSV9DSEdfQ0gzX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDNfSW5jbHVkZWQgICBQUElfQ0hHX0NIM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gyX1BvcyAgICAgICAgUFBJX0NIR19DSDJfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDJfTXNrICAgICAgICBQUElfQ0hHX0NIMl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDJfSW5jbHVkZWQgICBQUElfQ0hHX0NIMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxX1BvcyAgICAgICAgUFBJX0NIR19DSDFfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDFfTXNrICAgICAgICBQUElfQ0hHX0NIMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gxX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDFfSW5jbHVkZWQgICBQUElfQ0hHX0NIMV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gwX1BvcyAgICAgICAgUFBJX0NIR19DSDBfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDBfTXNrICAgICAgICBQUElfQ0hHX0NIMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gwX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDBfSW5jbHVkZWQgICBQUElfQ0hHX0NIMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNV9Qb3MgICAgICAgUFBJX0NIR19DSDE1X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNV9Nc2sgICAgICAgUFBJX0NIR19DSDE1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNV9FeGNsdWRlZCAgUFBJX0NIR19DSDE1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDE1X0luY2x1ZGVkICBQUElfQ0hHX0NIMTVfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTRfUG9zICAgICAgIFBQSV9DSEdfQ0gxNF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTRfTXNrICAgICAgIFBQSV9DSEdfQ0gxNF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTRfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxNF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNF9JbmNsdWRlZCAgUFBJX0NIR19DSDE0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDEzX1BvcyAgICAgICBQUElfQ0hHX0NIMTNfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDEzX01zayAgICAgICBQUElfQ0hHX0NIMTNfTXNrDQorI2RlZmluZSBQUElfQ0hHMV9DSDEzX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTNfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMl9Qb3MgICAgICAgUFBJX0NIR19DSDEyX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMl9Nc2sgICAgICAgUFBJX0NIR19DSDEyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMl9FeGNsdWRlZCAgUFBJX0NIR19DSDEyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDEyX0luY2x1ZGVkICBQUElfQ0hHX0NIMTJfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTFfUG9zICAgICAgIFBQSV9DSEdfQ0gxMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTFfTXNrICAgICAgIFBQSV9DSEdfQ0gxMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTFfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMV9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMV9JbmNsdWRlZCAgUFBJX0NIR19DSDExX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDEwX1BvcyAgICAgICBQUElfQ0hHX0NIMTBfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDEwX01zayAgICAgICBQUElfQ0hHX0NIMTBfTXNrDQorI2RlZmluZSBQUElfQ0hHMV9DSDEwX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTBfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g5X1BvcyAgICAgICAgUFBJX0NIR19DSDlfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDlfTXNrICAgICAgICBQUElfQ0hHX0NIOV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIOV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g5X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDlfSW5jbHVkZWQgICBQUElfQ0hHX0NIOV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g4X1BvcyAgICAgICAgUFBJX0NIR19DSDhfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDhfTXNrICAgICAgICBQUElfQ0hHX0NIOF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIOF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g4X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDhfSW5jbHVkZWQgICBQUElfQ0hHX0NIOF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g3X1BvcyAgICAgICAgUFBJX0NIR19DSDdfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDdfTXNrICAgICAgICBQUElfQ0hHX0NIN19Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIN19FeGNsdWRlZCAgIFBQSV9DSEdfQ0g3X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDdfSW5jbHVkZWQgICBQUElfQ0hHX0NIN19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g2X1BvcyAgICAgICAgUFBJX0NIR19DSDZfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDZfTXNrICAgICAgICBQUElfQ0hHX0NINl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NINl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g2X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDZfSW5jbHVkZWQgICBQUElfQ0hHX0NINl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g1X1BvcyAgICAgICAgUFBJX0NIR19DSDVfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDVfTXNrICAgICAgICBQUElfQ0hHX0NINV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NINV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDVfSW5jbHVkZWQgICBQUElfQ0hHX0NINV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g0X1BvcyAgICAgICAgUFBJX0NIR19DSDRfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDRfTXNrICAgICAgICBQUElfQ0hHX0NINF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NINF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDRfSW5jbHVkZWQgICBQUElfQ0hHX0NINF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gzX1BvcyAgICAgICAgUFBJX0NIR19DSDNfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDNfTXNrICAgICAgICBQUElfQ0hHX0NIM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIM19FeGNsdWRlZCAgIFBQSV9DSEdfQ0gzX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDNfSW5jbHVkZWQgICBQUElfQ0hHX0NIM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gyX1BvcyAgICAgICAgUFBJX0NIR19DSDJfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDJfTXNrICAgICAgICBQUElfQ0hHX0NIMl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDJfSW5jbHVkZWQgICBQUElfQ0hHX0NIMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxX1BvcyAgICAgICAgUFBJX0NIR19DSDFfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDFfTXNrICAgICAgICBQUElfQ0hHX0NIMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gxX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDFfSW5jbHVkZWQgICBQUElfQ0hHX0NIMV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gwX1BvcyAgICAgICAgUFBJX0NIR19DSDBfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDBfTXNrICAgICAgICBQUElfQ0hHX0NIMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gwX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDBfSW5jbHVkZWQgICBQUElfQ0hHX0NIMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNV9Qb3MgICAgICAgUFBJX0NIR19DSDE1X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNV9Nc2sgICAgICAgUFBJX0NIR19DSDE1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNV9FeGNsdWRlZCAgUFBJX0NIR19DSDE1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDE1X0luY2x1ZGVkICBQUElfQ0hHX0NIMTVfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTRfUG9zICAgICAgIFBQSV9DSEdfQ0gxNF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTRfTXNrICAgICAgIFBQSV9DSEdfQ0gxNF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTRfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxNF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNF9JbmNsdWRlZCAgUFBJX0NIR19DSDE0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDEzX1BvcyAgICAgICBQUElfQ0hHX0NIMTNfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDEzX01zayAgICAgICBQUElfQ0hHX0NIMTNfTXNrDQorI2RlZmluZSBQUElfQ0hHMl9DSDEzX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTNfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMl9Qb3MgICAgICAgUFBJX0NIR19DSDEyX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMl9Nc2sgICAgICAgUFBJX0NIR19DSDEyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMl9FeGNsdWRlZCAgUFBJX0NIR19DSDEyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDEyX0luY2x1ZGVkICBQUElfQ0hHX0NIMTJfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTFfUG9zICAgICAgIFBQSV9DSEdfQ0gxMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTFfTXNrICAgICAgIFBQSV9DSEdfQ0gxMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTFfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMV9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMV9JbmNsdWRlZCAgUFBJX0NIR19DSDExX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDEwX1BvcyAgICAgICBQUElfQ0hHX0NIMTBfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDEwX01zayAgICAgICBQUElfQ0hHX0NIMTBfTXNrDQorI2RlZmluZSBQUElfQ0hHMl9DSDEwX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTBfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g5X1BvcyAgICAgICAgUFBJX0NIR19DSDlfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDlfTXNrICAgICAgICBQUElfQ0hHX0NIOV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIOV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g5X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDlfSW5jbHVkZWQgICBQUElfQ0hHX0NIOV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g4X1BvcyAgICAgICAgUFBJX0NIR19DSDhfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDhfTXNrICAgICAgICBQUElfQ0hHX0NIOF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIOF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g4X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDhfSW5jbHVkZWQgICBQUElfQ0hHX0NIOF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g3X1BvcyAgICAgICAgUFBJX0NIR19DSDdfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDdfTXNrICAgICAgICBQUElfQ0hHX0NIN19Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIN19FeGNsdWRlZCAgIFBQSV9DSEdfQ0g3X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDdfSW5jbHVkZWQgICBQUElfQ0hHX0NIN19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g2X1BvcyAgICAgICAgUFBJX0NIR19DSDZfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDZfTXNrICAgICAgICBQUElfQ0hHX0NINl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NINl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g2X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDZfSW5jbHVkZWQgICBQUElfQ0hHX0NINl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g1X1BvcyAgICAgICAgUFBJX0NIR19DSDVfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDVfTXNrICAgICAgICBQUElfQ0hHX0NINV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NINV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDVfSW5jbHVkZWQgICBQUElfQ0hHX0NINV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g0X1BvcyAgICAgICAgUFBJX0NIR19DSDRfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDRfTXNrICAgICAgICBQUElfQ0hHX0NINF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NINF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDRfSW5jbHVkZWQgICBQUElfQ0hHX0NINF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gzX1BvcyAgICAgICAgUFBJX0NIR19DSDNfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDNfTXNrICAgICAgICBQUElfQ0hHX0NIM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIM19FeGNsdWRlZCAgIFBQSV9DSEdfQ0gzX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDNfSW5jbHVkZWQgICBQUElfQ0hHX0NIM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gyX1BvcyAgICAgICAgUFBJX0NIR19DSDJfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDJfTXNrICAgICAgICBQUElfQ0hHX0NIMl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDJfSW5jbHVkZWQgICBQUElfQ0hHX0NIMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxX1BvcyAgICAgICAgUFBJX0NIR19DSDFfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDFfTXNrICAgICAgICBQUElfQ0hHX0NIMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gxX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDFfSW5jbHVkZWQgICBQUElfQ0hHX0NIMV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gwX1BvcyAgICAgICAgUFBJX0NIR19DSDBfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDBfTXNrICAgICAgICBQUElfQ0hHX0NIMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gwX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDBfSW5jbHVkZWQgICBQUElfQ0hHX0NIMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNV9Qb3MgICAgICAgUFBJX0NIR19DSDE1X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNV9Nc2sgICAgICAgUFBJX0NIR19DSDE1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNV9FeGNsdWRlZCAgUFBJX0NIR19DSDE1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDE1X0luY2x1ZGVkICBQUElfQ0hHX0NIMTVfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEczX0NIMTRfUG9zICAgICAgIFBQSV9DSEdfQ0gxNF9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMTRfTXNrICAgICAgIFBQSV9DSEdfQ0gxNF9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMTRfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxNF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNF9JbmNsdWRlZCAgUFBJX0NIR19DSDE0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDEzX1BvcyAgICAgICBQUElfQ0hHX0NIMTNfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDEzX01zayAgICAgICBQUElfQ0hHX0NIMTNfTXNrDQorI2RlZmluZSBQUElfQ0hHM19DSDEzX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMTNfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMl9Qb3MgICAgICAgUFBJX0NIR19DSDEyX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMl9Nc2sgICAgICAgUFBJX0NIR19DSDEyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMl9FeGNsdWRlZCAgUFBJX0NIR19DSDEyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDEyX0luY2x1ZGVkICBQUElfQ0hHX0NIMTJfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEczX0NIMTFfUG9zICAgICAgIFBQSV9DSEdfQ0gxMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMTFfTXNrICAgICAgIFBQSV9DSEdfQ0gxMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMTFfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMV9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMV9JbmNsdWRlZCAgUFBJX0NIR19DSDExX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDEwX1BvcyAgICAgICBQUElfQ0hHX0NIMTBfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDEwX01zayAgICAgICBQUElfQ0hHX0NIMTBfTXNrDQorI2RlZmluZSBQUElfQ0hHM19DSDEwX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMTBfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g5X1BvcyAgICAgICAgUFBJX0NIR19DSDlfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDlfTXNrICAgICAgICBQUElfQ0hHX0NIOV9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIOV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g5X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDlfSW5jbHVkZWQgICBQUElfQ0hHX0NIOV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g4X1BvcyAgICAgICAgUFBJX0NIR19DSDhfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDhfTXNrICAgICAgICBQUElfQ0hHX0NIOF9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIOF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g4X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDhfSW5jbHVkZWQgICBQUElfQ0hHX0NIOF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g3X1BvcyAgICAgICAgUFBJX0NIR19DSDdfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDdfTXNrICAgICAgICBQUElfQ0hHX0NIN19Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIN19FeGNsdWRlZCAgIFBQSV9DSEdfQ0g3X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDdfSW5jbHVkZWQgICBQUElfQ0hHX0NIN19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g2X1BvcyAgICAgICAgUFBJX0NIR19DSDZfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDZfTXNrICAgICAgICBQUElfQ0hHX0NINl9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NINl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g2X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDZfSW5jbHVkZWQgICBQUElfQ0hHX0NINl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g1X1BvcyAgICAgICAgUFBJX0NIR19DSDVfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDVfTXNrICAgICAgICBQUElfQ0hHX0NINV9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NINV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDVfSW5jbHVkZWQgICBQUElfQ0hHX0NINV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g0X1BvcyAgICAgICAgUFBJX0NIR19DSDRfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDRfTXNrICAgICAgICBQUElfQ0hHX0NINF9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NINF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDRfSW5jbHVkZWQgICBQUElfQ0hHX0NINF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gzX1BvcyAgICAgICAgUFBJX0NIR19DSDNfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDNfTXNrICAgICAgICBQUElfQ0hHX0NIM19Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIM19FeGNsdWRlZCAgIFBQSV9DSEdfQ0gzX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDNfSW5jbHVkZWQgICBQUElfQ0hHX0NIM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gyX1BvcyAgICAgICAgUFBJX0NIR19DSDJfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDJfTXNrICAgICAgICBQUElfQ0hHX0NIMl9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDJfSW5jbHVkZWQgICBQUElfQ0hHX0NIMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxX1BvcyAgICAgICAgUFBJX0NIR19DSDFfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDFfTXNrICAgICAgICBQUElfQ0hHX0NIMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gxX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDFfSW5jbHVkZWQgICBQUElfQ0hHX0NIMV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gwX1BvcyAgICAgICAgUFBJX0NIR19DSDBfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDBfTXNrICAgICAgICBQUElfQ0hHX0NIMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gwX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDBfSW5jbHVkZWQgICBQUElfQ0hHX0NIMF9JbmNsdWRlZA0KKw0KKw0KKw0KKw0KKy8qbGludCAtLWZsYiAiTGVhdmUgbGlicmFyeSByZWdpb24iICovDQorDQorI2VuZGlmIC8qIE5SRjUxX1RPX05SRjUyX0ggKi8NCisNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1MV90b19ucmY1Mjg0MC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmNTFfdG9fbnJmNTI4NDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWY5ZTczCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmNTFfdG9fbnJmNTI4NDAuaApAQCAtMCwwICsxLDU2NyBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGNTFfVE9fTlJGNTI4NDBfSA0KKyNkZWZpbmUgTlJGNTFfVE9fTlJGNTI4NDBfSA0KKw0KKy8qbGludCArK2ZsYiAiRW50ZXIgbGlicmFyeSByZWdpb24gKi8NCisNCisvKiBUaGlzIGZpbGUgaXMgZ2l2ZW4gdG8gcHJldmVudCB5b3VyIFNXIGZyb20gbm90IGNvbXBpbGluZyB3aXRoIHRoZSBuYW1lIGNoYW5nZXMgYmV0d2VlbiBuUkY1MSBhbmQgblJGNTI4NDAgZGV2aWNlcy4NCisgKiBJdCByZWRlZmluZXMgdGhlIG9sZCBuUkY1MSBuYW1lcyBpbnRvIHRoZSBuZXcgb25lcyBhcyBsb25nIGFzIHRoZSBmdW5jdGlvbmFsaXR5IGlzIHN0aWxsIHN1cHBvcnRlZC4gSWYgdGhlDQorICogZnVuY3Rpb25hbGl0eSBpcyBnb25lLCB0aGVyZSBvbGQgbmFtZXMgYXJlIG5vdCBkZWZpbmVkLCBzbyBjb21waWxhdGlvbiB3aWxsIGZhaWwuIE5vdGUgdGhhdCBhbHNvIGluY2x1ZGVzIG1hY3Jvcw0KKyAqIGZyb20gdGhlIG5yZjUxX2RlcHJlY2F0ZWQuaCBmaWxlLiAqLw0KKw0KKw0KKy8qIElSUSAqLw0KKy8qIFNldmVyYWwgcGVyaXBoZXJhbHMgaGF2ZSBiZWVuIGFkZGVkIHRvIHNldmVyYWwgaW5kZXhlcy4gTmFtZXMgb2YgSVJRIGhhbmRsZXJzIGFuZCBJUlEgbnVtYmVycyBoYXZlIGNoYW5nZWQuICovDQorI2RlZmluZSBVQVJUMF9JUlFIYW5kbGVyICAgICAgICBVQVJURTBfVUFSVDBfSVJRSGFuZGxlcg0KKyNkZWZpbmUgU1BJMF9UV0kwX0lSUUhhbmRsZXIgICAgU1BJTTBfU1BJUzBfVFdJTTBfVFdJUzBfU1BJMF9UV0kwX0lSUUhhbmRsZXINCisjZGVmaW5lIFNQSTFfVFdJMV9JUlFIYW5kbGVyICAgIFNQSU0xX1NQSVMxX1RXSU0xX1RXSVMxX1NQSTFfVFdJMV9JUlFIYW5kbGVyDQorI2RlZmluZSBBRENfSVJRSGFuZGxlciAgICAgICAgICBTQUFEQ19JUlFIYW5kbGVyDQorI2RlZmluZSBMUENPTVBfSVJRSGFuZGxlciAgICAgICBDT01QX0xQQ09NUF9JUlFIYW5kbGVyDQorI2RlZmluZSBTV0kwX0lSUUhhbmRsZXIgICAgICAgICBTV0kwX0VHVTBfSVJRSGFuZGxlcg0KKyNkZWZpbmUgU1dJMV9JUlFIYW5kbGVyICAgICAgICAgU1dJMV9FR1UxX0lSUUhhbmRsZXINCisjZGVmaW5lIFNXSTJfSVJRSGFuZGxlciAgICAgICAgIFNXSTJfRUdVMl9JUlFIYW5kbGVyDQorI2RlZmluZSBTV0kzX0lSUUhhbmRsZXIgICAgICAgICBTV0kzX0VHVTNfSVJRSGFuZGxlcg0KKyNkZWZpbmUgU1dJNF9JUlFIYW5kbGVyICAgICAgICAgU1dJNF9FR1U0X0lSUUhhbmRsZXINCisjZGVmaW5lIFNXSTVfSVJRSGFuZGxlciAgICAgICAgIFNXSTVfRUdVNV9JUlFIYW5kbGVyDQorDQorI2RlZmluZSBVQVJUMF9JUlFuICAgICAgICAgICAgICBVQVJURTBfVUFSVDBfSVJRbg0KKyNkZWZpbmUgU1BJMF9UV0kwX0lSUW4gICAgICAgICAgU1BJTTBfU1BJUzBfVFdJTTBfVFdJUzBfU1BJMF9UV0kwX0lSUW4NCisjZGVmaW5lIFNQSTFfVFdJMV9JUlFuICAgICAgICAgIFNQSU0xX1NQSVMxX1RXSU0xX1RXSVMxX1NQSTFfVFdJMV9JUlFuDQorI2RlZmluZSBBRENfSVJRbiAgICAgICAgICAgICAgICBTQUFEQ19JUlFuDQorI2RlZmluZSBMUENPTVBfSVJRbiAgICAgICAgICAgICBDT01QX0xQQ09NUF9JUlFuDQorI2RlZmluZSBTV0kwX0lSUW4gICAgICAgICAgICAgICBTV0kwX0VHVTBfSVJRbg0KKyNkZWZpbmUgU1dJMV9JUlFuICAgICAgICAgICAgICAgU1dJMV9FR1UxX0lSUW4NCisjZGVmaW5lIFNXSTJfSVJRbiAgICAgICAgICAgICAgIFNXSTJfRUdVMl9JUlFuDQorI2RlZmluZSBTV0kzX0lSUW4gICAgICAgICAgICAgICBTV0kzX0VHVTNfSVJRbg0KKyNkZWZpbmUgU1dJNF9JUlFuICAgICAgICAgICAgICAgU1dJNF9FR1U0X0lSUW4NCisjZGVmaW5lIFNXSTVfSVJRbiAgICAgICAgICAgICAgIFNXSTVfRUdVNV9JUlFuDQorDQorDQorLyogVUlDUiAqLw0KKy8qIFJlZ2lzdGVyIFJCUENPTkYgd2FzIHJlbmFtZWQgdG8gQVBQUk9URUNULiAqLw0KKyNkZWZpbmUgUkJQQ09ORiAgICAgQVBQUk9URUNUDQorDQorI2RlZmluZSBVSUNSX1JCUENPTkZfUEFMTF9Qb3MgICAgICAgICAgIFVJQ1JfQVBQUk9URUNUX1BBTExfUG9zDQorI2RlZmluZSBVSUNSX1JCUENPTkZfUEFMTF9Nc2sgICAgICAgICAgIFVJQ1JfQVBQUk9URUNUX1BBTExfTXNrDQorI2RlZmluZSBVSUNSX1JCUENPTkZfUEFMTF9FbmFibGVkICAgICAgIFVJQ1JfQVBQUk9URUNUX1BBTExfRW5hYmxlZA0KKyNkZWZpbmUgVUlDUl9SQlBDT05GX1BBTExfRGlzYWJsZWQgICAgICBVSUNSX0FQUFJPVEVDVF9QQUxMX0Rpc2FibGVkDQorDQorDQorLyogR1BJTyAqLw0KKy8qIEdQSU8gcG9ydCB3YXMgcmVuYW1lZCB0byBQMC4gKi8NCisjZGVmaW5lIE5SRl9HUElPICAgICAgICBOUkZfUDANCisjZGVmaW5lIE5SRl9HUElPX0JBU0UgICBOUkZfUDBfQkFTRQ0KKw0KKw0KKy8qIFFERUMgKi8NCisvKiBUaGUgcmVnaXN0ZXJzIFBTRUxBLCBQU0VMQiBhbmQgUFNFTExFRCB3ZXJlIHJlc3RydWN0dXJlZCBpbnRvIGEgc3RydWN0LiAqLw0KKyNkZWZpbmUgUFNFTExFRCAgICAgUFNFTC5MRUQNCisjZGVmaW5lIFBTRUxBICAgICAgIFBTRUwuQQ0KKyNkZWZpbmUgUFNFTEIgICAgICAgUFNFTC5CDQorDQorDQorLyogU1BJUyAqLw0KKy8qIFRoZSByZWdpc3RlcnMgUFNFTFNDSywgUFNFTE1JU08sIFBTRUxNT1NJLCBQU0VMQ1NOIHdlcmUgcmVzdHJ1Y3R1cmVkIGludG8gYSBzdHJ1Y3QuICovDQorI2RlZmluZSBQU0VMU0NLICAgICAgIFBTRUwuU0NLDQorI2RlZmluZSBQU0VMTUlTTyAgICAgIFBTRUwuTUlTTw0KKyNkZWZpbmUgUFNFTE1PU0kgICAgICBQU0VMLk1PU0kNCisjZGVmaW5lIFBTRUxDU04gICAgICAgUFNFTC5DU04NCisNCisvKiBUaGUgcmVnaXN0ZXJzIFJYRFBUUiwgTUFYUlgsIEFNT1VOVFJYIHdlcmUgcmVzdHJ1Y3R1cmVkIGludG8gYSBzdHJ1Y3QgKi8NCisjZGVmaW5lIFJYRFBUUiAgICAgICAgUlhELlBUUg0KKyNkZWZpbmUgTUFYUlggICAgICAgICBSWEQuTUFYQ05UDQorI2RlZmluZSBBTU9VTlRSWCAgICAgIFJYRC5BTU9VTlQNCisNCisjZGVmaW5lIFNQSVNfTUFYUlhfTUFYUlhfUG9zICAgICAgICBTUElTX1JYRF9NQVhDTlRfTUFYQ05UX1Bvcw0KKyNkZWZpbmUgU1BJU19NQVhSWF9NQVhSWF9Nc2sgICAgICAgIFNQSVNfUlhEX01BWENOVF9NQVhDTlRfTXNrDQorDQorI2RlZmluZSBTUElTX0FNT1VOVFJYX0FNT1VOVFJYX1BvcyAgU1BJU19SWERfQU1PVU5UX0FNT1VOVF9Qb3MNCisjZGVmaW5lIFNQSVNfQU1PVU5UUlhfQU1PVU5UUlhfTXNrICBTUElTX1JYRF9BTU9VTlRfQU1PVU5UX01zaw0KKw0KKy8qIFRoZSByZWdpc3RlcnMgVFhEUFRSLCBNQVhUWCwgQU1PVU5UVFggd2VyZSByZXN0cnVjdHVyZWQgaW50byBhIHN0cnVjdCAqLw0KKyNkZWZpbmUgVFhEUFRSICAgICAgICBUWEQuUFRSDQorI2RlZmluZSBNQVhUWCAgICAgICAgIFRYRC5NQVhDTlQNCisjZGVmaW5lIEFNT1VOVFRYICAgICAgVFhELkFNT1VOVA0KKw0KKyNkZWZpbmUgU1BJU19NQVhUWF9NQVhUWF9Qb3MgICAgICAgIFNQSVNfVFhEX01BWENOVF9NQVhDTlRfUG9zDQorI2RlZmluZSBTUElTX01BWFRYX01BWFRYX01zayAgICAgICAgU1BJU19UWERfTUFYQ05UX01BWENOVF9Nc2sNCisNCisjZGVmaW5lIFNQSVNfQU1PVU5UVFhfQU1PVU5UVFhfUG9zICBTUElTX1RYRF9BTU9VTlRfQU1PVU5UX1Bvcw0KKyNkZWZpbmUgU1BJU19BTU9VTlRUWF9BTU9VTlRUWF9Nc2sgIFNQSVNfVFhEX0FNT1VOVF9BTU9VTlRfTXNrDQorDQorDQorLyogVUFSVCAqLw0KKy8qIFRoZSByZWdpc3RlcnMgUFNFTFJUUywgUFNFTFRYRCwgUFNFTENUUywgUFNFTFJYRCB3ZXJlIHJlc3RydWN0dXJlZCBpbnRvIGEgc3RydWN0LiAqLw0KKyNkZWZpbmUgUFNFTFJUUyAgICAgICBQU0VMLlJUUw0KKyNkZWZpbmUgUFNFTFRYRCAgICAgICBQU0VMLlRYRA0KKyNkZWZpbmUgUFNFTENUUyAgICAgICBQU0VMLkNUUw0KKyNkZWZpbmUgUFNFTFJYRCAgICAgICBQU0VMLlJYRA0KKw0KKy8qIFRXSSAqLw0KKy8qIFRoZSByZWdpc3RlcnMgUFNFTFNDTCwgUFNFTFNEQSB3ZXJlIHJlc3RydWN0dXJlZCBpbnRvIGEgc3RydWN0LiAqLw0KKyNkZWZpbmUgUFNFTFNDTCAgICAgICBQU0VMLlNDTA0KKyNkZWZpbmUgUFNFTFNEQSAgICAgICBQU0VMLlNEQQ0KKw0KKw0KKw0KKy8qIEZyb20gbnJmNTFfZGVwcmVjYXRlZC5oICovDQorDQorLyogTlZNQyAqLw0KKy8qIFRoZSByZWdpc3RlciBFUkFTRVBST1RFQ1RFRFBBR0UgY2hhbmdlZCBuYW1lIHRvIEVSQVNFUENSMCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gKi8NCisjZGVmaW5lIEVSQVNFUFJPVEVDVEVEUEFHRSAgICAgIEVSQVNFUENSMA0KKw0KKw0KKy8qIElSUSAqLw0KKy8qIENPTVAgbW9kdWxlIHdhcyBlbGltaW5hdGVkLiBBZGFwdGVkIHRvIG5yZjUyODQwIGhlYWRlcnMuICovDQorI2RlZmluZSBMUENPTVBfQ09NUF9JUlFIYW5kbGVyICBDT01QX0xQQ09NUF9JUlFIYW5kbGVyDQorI2RlZmluZSBMUENPTVBfQ09NUF9JUlFuICAgICAgICBDT01QX0xQQ09NUF9JUlFuDQorDQorDQorLyogUkVGU0VMIHJlZ2lzdGVyIHJlZGVmaW5lZCBlbnVtZXJhdGVkIHZhbHVlcyBhbmQgYWRkZWQgc29tZSBtb3JlLiAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfU3VwcGx5T25lRWlnaHRoUHJlc2NhbGluZyAgICAgICAgICBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWYxXzhWZGQNCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1N1cHBseVR3b0VpZ2h0aHNQcmVzY2FsaW5nICAgICAgICAgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmMl84VmRkDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9TdXBwbHlUaHJlZUVpZ2h0aHNQcmVzY2FsaW5nICAgICAgIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjNfOFZkZA0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfU3VwcGx5Rm91ckVpZ2h0aHNQcmVzY2FsaW5nICAgICAgICBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY0XzhWZGQNCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1N1cHBseUZpdmVFaWdodGhzUHJlc2NhbGluZyAgICAgICAgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmNV84VmRkDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9TdXBwbHlTaXhFaWdodGhzUHJlc2NhbGluZyAgICAgICAgIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjZfOFZkZA0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfU3VwcGx5U2V2ZW5FaWdodGhzUHJlc2NhbGluZyAgICAgICBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY3XzhWZGQNCisNCisNCisvKiBSQURJTyAqLw0KKy8qIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCBTS0lQQUREUiB3YXMgY29ycmVjdGVkLiBPbGQgbWFjcm9zIGFkZGVkIGZvciBjb21wYXRpYmlsaXR5LiAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX1NLSVBfQUREUl9Qb3MgICAgICBSQURJT19DUkNDTkZfU0tJUEFERFJfUG9zDQorI2RlZmluZSBSQURJT19DUkNDTkZfU0tJUF9BRERSX01zayAgICAgIFJBRElPX0NSQ0NORl9TS0lQQUREUl9Nc2sNCisjZGVmaW5lIFJBRElPX0NSQ0NORl9TS0lQX0FERFJfSW5jbHVkZSAgUkFESU9fQ1JDQ05GX1NLSVBBRERSX0luY2x1ZGUNCisjZGVmaW5lIFJBRElPX0NSQ0NORl9TS0lQX0FERFJfU2tpcCAgICAgUkFESU9fQ1JDQ05GX1NLSVBBRERSX1NraXANCisNCisNCisvKiBGSUNSICovDQorLyogVGhlIHJlZ2lzdGVycyBGSUNSLkRFVklDRUlEMCBhbmQgRklDUi5ERVZJQ0VJRDEgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkuICovDQorI2RlZmluZSBERVZJQ0VJRDAgICAgICAgREVWSUNFSURbMF0NCisjZGVmaW5lIERFVklDRUlEMSAgICAgICBERVZJQ0VJRFsxXQ0KKw0KKy8qIFRoZSByZWdpc3RlcnMgRklDUi5FUjAsIEZJQ1IuRVIxLCBGSUNSLkVSMiBhbmQgRklDUi5FUjMgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkuICovDQorI2RlZmluZSBFUjAgICAgICAgICAgICAgRVJbMF0NCisjZGVmaW5lIEVSMSAgICAgICAgICAgICBFUlsxXQ0KKyNkZWZpbmUgRVIyICAgICAgICAgICAgIEVSWzJdDQorI2RlZmluZSBFUjMgICAgICAgICAgICAgRVJbM10NCisNCisvKiBUaGUgcmVnaXN0ZXJzIEZJQ1IuSVIwLCBGSUNSLklSMSwgRklDUi5JUjIgYW5kIEZJQ1IuSVIzIHdlcmUgcmVuYW1lZCBpbnRvIGFuIGFycmF5LiAqLw0KKyNkZWZpbmUgSVIwICAgICAgICAgICAgIElSWzBdDQorI2RlZmluZSBJUjEgICAgICAgICAgICAgSVJbMV0NCisjZGVmaW5lIElSMiAgICAgICAgICAgICBJUlsyXQ0KKyNkZWZpbmUgSVIzICAgICAgICAgICAgIElSWzNdDQorDQorLyogVGhlIHJlZ2lzdGVycyBGSUNSLkRFVklDRUFERFIwIGFuZCBGSUNSLkRFVklDRUFERFIxIHdlcmUgcmVuYW1lZCBpbnRvIGFuIGFycmF5LiAqLw0KKyNkZWZpbmUgREVWSUNFQUREUjAgICAgIERFVklDRUFERFJbMF0NCisjZGVmaW5lIERFVklDRUFERFIxICAgICBERVZJQ0VBRERSWzFdDQorDQorDQorLyogUFBJICovDQorLyogVGhlIHRhc2tzIFBQSS5UQVNLU19DSEd4RU4gYW5kIFBQSS5UQVNLU19DSEd4RElTIHdlcmUgcmVuYW1lZCBpbnRvIGFuIGFycmF5IG9mIHN0cnVjdHMuICovDQorI2RlZmluZSBUQVNLU19DSEcwRU4gICAgIFRBU0tTX0NIR1swXS5FTg0KKyNkZWZpbmUgVEFTS1NfQ0hHMERJUyAgICBUQVNLU19DSEdbMF0uRElTDQorI2RlZmluZSBUQVNLU19DSEcxRU4gICAgIFRBU0tTX0NIR1sxXS5FTg0KKyNkZWZpbmUgVEFTS1NfQ0hHMURJUyAgICBUQVNLU19DSEdbMV0uRElTDQorI2RlZmluZSBUQVNLU19DSEcyRU4gICAgIFRBU0tTX0NIR1syXS5FTg0KKyNkZWZpbmUgVEFTS1NfQ0hHMkRJUyAgICBUQVNLU19DSEdbMl0uRElTDQorI2RlZmluZSBUQVNLU19DSEczRU4gICAgIFRBU0tTX0NIR1szXS5FTg0KKyNkZWZpbmUgVEFTS1NfQ0hHM0RJUyAgICBUQVNLU19DSEdbM10uRElTDQorDQorLyogVGhlIHJlZ2lzdGVycyBQUEkuQ0h4X0VFUCBhbmQgUFBJLkNIeF9URVAgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkgb2Ygc3RydWN0cy4gKi8NCisjZGVmaW5lIENIMF9FRVAgICAgICAgICAgQ0hbMF0uRUVQDQorI2RlZmluZSBDSDBfVEVQICAgICAgICAgIENIWzBdLlRFUA0KKyNkZWZpbmUgQ0gxX0VFUCAgICAgICAgICBDSFsxXS5FRVANCisjZGVmaW5lIENIMV9URVAgICAgICAgICAgQ0hbMV0uVEVQDQorI2RlZmluZSBDSDJfRUVQICAgICAgICAgIENIWzJdLkVFUA0KKyNkZWZpbmUgQ0gyX1RFUCAgICAgICAgICBDSFsyXS5URVANCisjZGVmaW5lIENIM19FRVAgICAgICAgICAgQ0hbM10uRUVQDQorI2RlZmluZSBDSDNfVEVQICAgICAgICAgIENIWzNdLlRFUA0KKyNkZWZpbmUgQ0g0X0VFUCAgICAgICAgICBDSFs0XS5FRVANCisjZGVmaW5lIENINF9URVAgICAgICAgICAgQ0hbNF0uVEVQDQorI2RlZmluZSBDSDVfRUVQICAgICAgICAgIENIWzVdLkVFUA0KKyNkZWZpbmUgQ0g1X1RFUCAgICAgICAgICBDSFs1XS5URVANCisjZGVmaW5lIENINl9FRVAgICAgICAgICAgQ0hbNl0uRUVQDQorI2RlZmluZSBDSDZfVEVQICAgICAgICAgIENIWzZdLlRFUA0KKyNkZWZpbmUgQ0g3X0VFUCAgICAgICAgICBDSFs3XS5FRVANCisjZGVmaW5lIENIN19URVAgICAgICAgICAgQ0hbN10uVEVQDQorI2RlZmluZSBDSDhfRUVQICAgICAgICAgIENIWzhdLkVFUA0KKyNkZWZpbmUgQ0g4X1RFUCAgICAgICAgICBDSFs4XS5URVANCisjZGVmaW5lIENIOV9FRVAgICAgICAgICAgQ0hbOV0uRUVQDQorI2RlZmluZSBDSDlfVEVQICAgICAgICAgIENIWzldLlRFUA0KKyNkZWZpbmUgQ0gxMF9FRVAgICAgICAgICBDSFsxMF0uRUVQDQorI2RlZmluZSBDSDEwX1RFUCAgICAgICAgIENIWzEwXS5URVANCisjZGVmaW5lIENIMTFfRUVQICAgICAgICAgQ0hbMTFdLkVFUA0KKyNkZWZpbmUgQ0gxMV9URVAgICAgICAgICBDSFsxMV0uVEVQDQorI2RlZmluZSBDSDEyX0VFUCAgICAgICAgIENIWzEyXS5FRVANCisjZGVmaW5lIENIMTJfVEVQICAgICAgICAgQ0hbMTJdLlRFUA0KKyNkZWZpbmUgQ0gxM19FRVAgICAgICAgICBDSFsxM10uRUVQDQorI2RlZmluZSBDSDEzX1RFUCAgICAgICAgIENIWzEzXS5URVANCisjZGVmaW5lIENIMTRfRUVQICAgICAgICAgQ0hbMTRdLkVFUA0KKyNkZWZpbmUgQ0gxNF9URVAgICAgICAgICBDSFsxNF0uVEVQDQorI2RlZmluZSBDSDE1X0VFUCAgICAgICAgIENIWzE1XS5FRVANCisjZGVmaW5lIENIMTVfVEVQICAgICAgICAgQ0hbMTVdLlRFUA0KKw0KKy8qIFRoZSByZWdpc3RlcnMgUFBJLkNIRzAsIFBQSS5DSEcxLCBQUEkuQ0hHMiBhbmQgUFBJLkNIRzMgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkuICovDQorI2RlZmluZSBDSEcwICAgICAgICAgICAgIENIR1swXQ0KKyNkZWZpbmUgQ0hHMSAgICAgICAgICAgICBDSEdbMV0NCisjZGVmaW5lIENIRzIgICAgICAgICAgICAgQ0hHWzJdDQorI2RlZmluZSBDSEczICAgICAgICAgICAgIENIR1szXQ0KKw0KKy8qIEFsbCBiaXRmaWVsZCBtYWNyb3MgZm9yIHRoZSBDSEd4IHJlZ2lzdGVycyB0aGVyZWZvcmUgY2hhbmdlZCBuYW1lLiAqLw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNV9Qb3MgICAgICAgUFBJX0NIR19DSDE1X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNV9Nc2sgICAgICAgUFBJX0NIR19DSDE1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNV9FeGNsdWRlZCAgUFBJX0NIR19DSDE1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDE1X0luY2x1ZGVkICBQUElfQ0hHX0NIMTVfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTRfUG9zICAgICAgIFBQSV9DSEdfQ0gxNF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTRfTXNrICAgICAgIFBQSV9DSEdfQ0gxNF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTRfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxNF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNF9JbmNsdWRlZCAgUFBJX0NIR19DSDE0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDEzX1BvcyAgICAgICBQUElfQ0hHX0NIMTNfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDEzX01zayAgICAgICBQUElfQ0hHX0NIMTNfTXNrDQorI2RlZmluZSBQUElfQ0hHMF9DSDEzX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTNfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMl9Qb3MgICAgICAgUFBJX0NIR19DSDEyX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMl9Nc2sgICAgICAgUFBJX0NIR19DSDEyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMl9FeGNsdWRlZCAgUFBJX0NIR19DSDEyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDEyX0luY2x1ZGVkICBQUElfQ0hHX0NIMTJfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTFfUG9zICAgICAgIFBQSV9DSEdfQ0gxMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTFfTXNrICAgICAgIFBQSV9DSEdfQ0gxMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTFfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMV9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMV9JbmNsdWRlZCAgUFBJX0NIR19DSDExX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDEwX1BvcyAgICAgICBQUElfQ0hHX0NIMTBfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDEwX01zayAgICAgICBQUElfQ0hHX0NIMTBfTXNrDQorI2RlZmluZSBQUElfQ0hHMF9DSDEwX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTBfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g5X1BvcyAgICAgICAgUFBJX0NIR19DSDlfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDlfTXNrICAgICAgICBQUElfQ0hHX0NIOV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIOV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g5X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDlfSW5jbHVkZWQgICBQUElfQ0hHX0NIOV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g4X1BvcyAgICAgICAgUFBJX0NIR19DSDhfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDhfTXNrICAgICAgICBQUElfQ0hHX0NIOF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIOF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g4X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDhfSW5jbHVkZWQgICBQUElfQ0hHX0NIOF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g3X1BvcyAgICAgICAgUFBJX0NIR19DSDdfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDdfTXNrICAgICAgICBQUElfQ0hHX0NIN19Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIN19FeGNsdWRlZCAgIFBQSV9DSEdfQ0g3X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDdfSW5jbHVkZWQgICBQUElfQ0hHX0NIN19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g2X1BvcyAgICAgICAgUFBJX0NIR19DSDZfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDZfTXNrICAgICAgICBQUElfQ0hHX0NINl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NINl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g2X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDZfSW5jbHVkZWQgICBQUElfQ0hHX0NINl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g1X1BvcyAgICAgICAgUFBJX0NIR19DSDVfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDVfTXNrICAgICAgICBQUElfQ0hHX0NINV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NINV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDVfSW5jbHVkZWQgICBQUElfQ0hHX0NINV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g0X1BvcyAgICAgICAgUFBJX0NIR19DSDRfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDRfTXNrICAgICAgICBQUElfQ0hHX0NINF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NINF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDRfSW5jbHVkZWQgICBQUElfQ0hHX0NINF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gzX1BvcyAgICAgICAgUFBJX0NIR19DSDNfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDNfTXNrICAgICAgICBQUElfQ0hHX0NIM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIM19FeGNsdWRlZCAgIFBQSV9DSEdfQ0gzX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDNfSW5jbHVkZWQgICBQUElfQ0hHX0NIM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gyX1BvcyAgICAgICAgUFBJX0NIR19DSDJfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDJfTXNrICAgICAgICBQUElfQ0hHX0NIMl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDJfSW5jbHVkZWQgICBQUElfQ0hHX0NIMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxX1BvcyAgICAgICAgUFBJX0NIR19DSDFfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDFfTXNrICAgICAgICBQUElfQ0hHX0NIMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gxX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDFfSW5jbHVkZWQgICBQUElfQ0hHX0NIMV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gwX1BvcyAgICAgICAgUFBJX0NIR19DSDBfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDBfTXNrICAgICAgICBQUElfQ0hHX0NIMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gwX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDBfSW5jbHVkZWQgICBQUElfQ0hHX0NIMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNV9Qb3MgICAgICAgUFBJX0NIR19DSDE1X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNV9Nc2sgICAgICAgUFBJX0NIR19DSDE1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNV9FeGNsdWRlZCAgUFBJX0NIR19DSDE1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDE1X0luY2x1ZGVkICBQUElfQ0hHX0NIMTVfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTRfUG9zICAgICAgIFBQSV9DSEdfQ0gxNF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTRfTXNrICAgICAgIFBQSV9DSEdfQ0gxNF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTRfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxNF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNF9JbmNsdWRlZCAgUFBJX0NIR19DSDE0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDEzX1BvcyAgICAgICBQUElfQ0hHX0NIMTNfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDEzX01zayAgICAgICBQUElfQ0hHX0NIMTNfTXNrDQorI2RlZmluZSBQUElfQ0hHMV9DSDEzX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTNfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMl9Qb3MgICAgICAgUFBJX0NIR19DSDEyX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMl9Nc2sgICAgICAgUFBJX0NIR19DSDEyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMl9FeGNsdWRlZCAgUFBJX0NIR19DSDEyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDEyX0luY2x1ZGVkICBQUElfQ0hHX0NIMTJfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTFfUG9zICAgICAgIFBQSV9DSEdfQ0gxMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTFfTXNrICAgICAgIFBQSV9DSEdfQ0gxMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTFfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMV9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMV9JbmNsdWRlZCAgUFBJX0NIR19DSDExX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDEwX1BvcyAgICAgICBQUElfQ0hHX0NIMTBfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDEwX01zayAgICAgICBQUElfQ0hHX0NIMTBfTXNrDQorI2RlZmluZSBQUElfQ0hHMV9DSDEwX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTBfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g5X1BvcyAgICAgICAgUFBJX0NIR19DSDlfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDlfTXNrICAgICAgICBQUElfQ0hHX0NIOV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIOV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g5X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDlfSW5jbHVkZWQgICBQUElfQ0hHX0NIOV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g4X1BvcyAgICAgICAgUFBJX0NIR19DSDhfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDhfTXNrICAgICAgICBQUElfQ0hHX0NIOF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIOF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g4X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDhfSW5jbHVkZWQgICBQUElfQ0hHX0NIOF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g3X1BvcyAgICAgICAgUFBJX0NIR19DSDdfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDdfTXNrICAgICAgICBQUElfQ0hHX0NIN19Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIN19FeGNsdWRlZCAgIFBQSV9DSEdfQ0g3X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDdfSW5jbHVkZWQgICBQUElfQ0hHX0NIN19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g2X1BvcyAgICAgICAgUFBJX0NIR19DSDZfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDZfTXNrICAgICAgICBQUElfQ0hHX0NINl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NINl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g2X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDZfSW5jbHVkZWQgICBQUElfQ0hHX0NINl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g1X1BvcyAgICAgICAgUFBJX0NIR19DSDVfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDVfTXNrICAgICAgICBQUElfQ0hHX0NINV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NINV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDVfSW5jbHVkZWQgICBQUElfQ0hHX0NINV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g0X1BvcyAgICAgICAgUFBJX0NIR19DSDRfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDRfTXNrICAgICAgICBQUElfQ0hHX0NINF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NINF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDRfSW5jbHVkZWQgICBQUElfQ0hHX0NINF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gzX1BvcyAgICAgICAgUFBJX0NIR19DSDNfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDNfTXNrICAgICAgICBQUElfQ0hHX0NIM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIM19FeGNsdWRlZCAgIFBQSV9DSEdfQ0gzX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDNfSW5jbHVkZWQgICBQUElfQ0hHX0NIM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gyX1BvcyAgICAgICAgUFBJX0NIR19DSDJfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDJfTXNrICAgICAgICBQUElfQ0hHX0NIMl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDJfSW5jbHVkZWQgICBQUElfQ0hHX0NIMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxX1BvcyAgICAgICAgUFBJX0NIR19DSDFfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDFfTXNrICAgICAgICBQUElfQ0hHX0NIMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gxX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDFfSW5jbHVkZWQgICBQUElfQ0hHX0NIMV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gwX1BvcyAgICAgICAgUFBJX0NIR19DSDBfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDBfTXNrICAgICAgICBQUElfQ0hHX0NIMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gwX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDBfSW5jbHVkZWQgICBQUElfQ0hHX0NIMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNV9Qb3MgICAgICAgUFBJX0NIR19DSDE1X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNV9Nc2sgICAgICAgUFBJX0NIR19DSDE1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNV9FeGNsdWRlZCAgUFBJX0NIR19DSDE1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDE1X0luY2x1ZGVkICBQUElfQ0hHX0NIMTVfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTRfUG9zICAgICAgIFBQSV9DSEdfQ0gxNF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTRfTXNrICAgICAgIFBQSV9DSEdfQ0gxNF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTRfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxNF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNF9JbmNsdWRlZCAgUFBJX0NIR19DSDE0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDEzX1BvcyAgICAgICBQUElfQ0hHX0NIMTNfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDEzX01zayAgICAgICBQUElfQ0hHX0NIMTNfTXNrDQorI2RlZmluZSBQUElfQ0hHMl9DSDEzX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTNfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMl9Qb3MgICAgICAgUFBJX0NIR19DSDEyX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMl9Nc2sgICAgICAgUFBJX0NIR19DSDEyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMl9FeGNsdWRlZCAgUFBJX0NIR19DSDEyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDEyX0luY2x1ZGVkICBQUElfQ0hHX0NIMTJfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTFfUG9zICAgICAgIFBQSV9DSEdfQ0gxMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTFfTXNrICAgICAgIFBQSV9DSEdfQ0gxMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTFfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMV9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMV9JbmNsdWRlZCAgUFBJX0NIR19DSDExX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDEwX1BvcyAgICAgICBQUElfQ0hHX0NIMTBfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDEwX01zayAgICAgICBQUElfQ0hHX0NIMTBfTXNrDQorI2RlZmluZSBQUElfQ0hHMl9DSDEwX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTBfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g5X1BvcyAgICAgICAgUFBJX0NIR19DSDlfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDlfTXNrICAgICAgICBQUElfQ0hHX0NIOV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIOV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g5X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDlfSW5jbHVkZWQgICBQUElfQ0hHX0NIOV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g4X1BvcyAgICAgICAgUFBJX0NIR19DSDhfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDhfTXNrICAgICAgICBQUElfQ0hHX0NIOF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIOF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g4X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDhfSW5jbHVkZWQgICBQUElfQ0hHX0NIOF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g3X1BvcyAgICAgICAgUFBJX0NIR19DSDdfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDdfTXNrICAgICAgICBQUElfQ0hHX0NIN19Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIN19FeGNsdWRlZCAgIFBQSV9DSEdfQ0g3X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDdfSW5jbHVkZWQgICBQUElfQ0hHX0NIN19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g2X1BvcyAgICAgICAgUFBJX0NIR19DSDZfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDZfTXNrICAgICAgICBQUElfQ0hHX0NINl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NINl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g2X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDZfSW5jbHVkZWQgICBQUElfQ0hHX0NINl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g1X1BvcyAgICAgICAgUFBJX0NIR19DSDVfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDVfTXNrICAgICAgICBQUElfQ0hHX0NINV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NINV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDVfSW5jbHVkZWQgICBQUElfQ0hHX0NINV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g0X1BvcyAgICAgICAgUFBJX0NIR19DSDRfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDRfTXNrICAgICAgICBQUElfQ0hHX0NINF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NINF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDRfSW5jbHVkZWQgICBQUElfQ0hHX0NINF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gzX1BvcyAgICAgICAgUFBJX0NIR19DSDNfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDNfTXNrICAgICAgICBQUElfQ0hHX0NIM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIM19FeGNsdWRlZCAgIFBQSV9DSEdfQ0gzX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDNfSW5jbHVkZWQgICBQUElfQ0hHX0NIM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gyX1BvcyAgICAgICAgUFBJX0NIR19DSDJfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDJfTXNrICAgICAgICBQUElfQ0hHX0NIMl9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDJfSW5jbHVkZWQgICBQUElfQ0hHX0NIMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxX1BvcyAgICAgICAgUFBJX0NIR19DSDFfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDFfTXNrICAgICAgICBQUElfQ0hHX0NIMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gxX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDFfSW5jbHVkZWQgICBQUElfQ0hHX0NIMV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gwX1BvcyAgICAgICAgUFBJX0NIR19DSDBfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDBfTXNrICAgICAgICBQUElfQ0hHX0NIMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gwX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDBfSW5jbHVkZWQgICBQUElfQ0hHX0NIMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNV9Qb3MgICAgICAgUFBJX0NIR19DSDE1X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNV9Nc2sgICAgICAgUFBJX0NIR19DSDE1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNV9FeGNsdWRlZCAgUFBJX0NIR19DSDE1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDE1X0luY2x1ZGVkICBQUElfQ0hHX0NIMTVfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEczX0NIMTRfUG9zICAgICAgIFBQSV9DSEdfQ0gxNF9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMTRfTXNrICAgICAgIFBQSV9DSEdfQ0gxNF9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMTRfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxNF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNF9JbmNsdWRlZCAgUFBJX0NIR19DSDE0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDEzX1BvcyAgICAgICBQUElfQ0hHX0NIMTNfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDEzX01zayAgICAgICBQUElfQ0hHX0NIMTNfTXNrDQorI2RlZmluZSBQUElfQ0hHM19DSDEzX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMTNfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMl9Qb3MgICAgICAgUFBJX0NIR19DSDEyX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMl9Nc2sgICAgICAgUFBJX0NIR19DSDEyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMl9FeGNsdWRlZCAgUFBJX0NIR19DSDEyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDEyX0luY2x1ZGVkICBQUElfQ0hHX0NIMTJfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEczX0NIMTFfUG9zICAgICAgIFBQSV9DSEdfQ0gxMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMTFfTXNrICAgICAgIFBQSV9DSEdfQ0gxMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMTFfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMV9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMV9JbmNsdWRlZCAgUFBJX0NIR19DSDExX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDEwX1BvcyAgICAgICBQUElfQ0hHX0NIMTBfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDEwX01zayAgICAgICBQUElfQ0hHX0NIMTBfTXNrDQorI2RlZmluZSBQUElfQ0hHM19DSDEwX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMTBfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g5X1BvcyAgICAgICAgUFBJX0NIR19DSDlfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDlfTXNrICAgICAgICBQUElfQ0hHX0NIOV9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIOV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g5X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDlfSW5jbHVkZWQgICBQUElfQ0hHX0NIOV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g4X1BvcyAgICAgICAgUFBJX0NIR19DSDhfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDhfTXNrICAgICAgICBQUElfQ0hHX0NIOF9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIOF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g4X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDhfSW5jbHVkZWQgICBQUElfQ0hHX0NIOF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g3X1BvcyAgICAgICAgUFBJX0NIR19DSDdfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDdfTXNrICAgICAgICBQUElfQ0hHX0NIN19Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIN19FeGNsdWRlZCAgIFBQSV9DSEdfQ0g3X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDdfSW5jbHVkZWQgICBQUElfQ0hHX0NIN19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g2X1BvcyAgICAgICAgUFBJX0NIR19DSDZfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDZfTXNrICAgICAgICBQUElfQ0hHX0NINl9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NINl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g2X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDZfSW5jbHVkZWQgICBQUElfQ0hHX0NINl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g1X1BvcyAgICAgICAgUFBJX0NIR19DSDVfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDVfTXNrICAgICAgICBQUElfQ0hHX0NINV9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NINV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g1X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDVfSW5jbHVkZWQgICBQUElfQ0hHX0NINV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g0X1BvcyAgICAgICAgUFBJX0NIR19DSDRfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDRfTXNrICAgICAgICBQUElfQ0hHX0NINF9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NINF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0g0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDRfSW5jbHVkZWQgICBQUElfQ0hHX0NINF9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gzX1BvcyAgICAgICAgUFBJX0NIR19DSDNfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDNfTXNrICAgICAgICBQUElfQ0hHX0NIM19Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIM19FeGNsdWRlZCAgIFBQSV9DSEdfQ0gzX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDNfSW5jbHVkZWQgICBQUElfQ0hHX0NIM19JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gyX1BvcyAgICAgICAgUFBJX0NIR19DSDJfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDJfTXNrICAgICAgICBQUElfQ0hHX0NIMl9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMl9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gyX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDJfSW5jbHVkZWQgICBQUElfQ0hHX0NIMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxX1BvcyAgICAgICAgUFBJX0NIR19DSDFfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDFfTXNrICAgICAgICBQUElfQ0hHX0NIMV9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMV9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gxX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDFfSW5jbHVkZWQgICBQUElfQ0hHX0NIMV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gwX1BvcyAgICAgICAgUFBJX0NIR19DSDBfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDBfTXNrICAgICAgICBQUElfQ0hHX0NIMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMF9FeGNsdWRlZCAgIFBQSV9DSEdfQ0gwX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDBfSW5jbHVkZWQgICBQUElfQ0hHX0NIMF9JbmNsdWRlZA0KKw0KKw0KKw0KKw0KKy8qbGludCAtLWZsYiAiTGVhdmUgbGlicmFyeSByZWdpb24iICovDQorDQorI2VuZGlmIC8qIE5SRjUxX1RPX05SRjUyODQwX0ggKi8NCisNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1Mjg0MC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmNTI4NDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDFhNzdmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmNTI4NDAuaApAQCAtMCwwICsxLDI0MjAgQEAKKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KKyAqIEBmaWxlICAgICBucmY1Mjg0MC5oDQorICoNCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU00IFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIEhlYWRlciBGaWxlIGZvcg0KKyAqICAgICAgICAgICBucmY1Mjg0MCBmcm9tIE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICogQHZlcnNpb24gIFYxDQorICogQGRhdGUgICAgIDE4LiBOb3ZlbWJlciAyMDE2DQorICoNCisgKiBAbm90ZSAgICAgR2VuZXJhdGVkIHdpdGggU1ZEQ29udiBWMi44MWQNCisgKiAgICAgICAgICAgZnJvbSBDTVNJUyBTVkQgRmlsZSAnbnJmNTI4NDAuc3ZkJyBWZXJzaW9uIDEsDQorICoNCisgKiBAcGFyICAgICAgQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqICAgICAgICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiAgICAgICAgICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgICAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgICAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgICAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgICAgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICAgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICAgICAgICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqICAgICAgICAgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogICAgICAgICAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqICAgICAgICAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogICAgICAgICAgIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogICAgICAgICAgIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogICAgICAgICAgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogICAgICAgICAgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogICAgICAgICAgIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogICAgICAgICAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KKw0KKy8qKiBAYWRkdG9ncm91cCBOb3JkaWMgU2VtaWNvbmR1Y3Rvcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgbnJmNTI4NDANCisgICogQHsNCisgICovDQorDQorI2lmbmRlZiBOUkY1Mjg0MF9IDQorI2RlZmluZSBOUkY1Mjg0MF9IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSW50ZXJydXB0IE51bWJlciBEZWZpbml0aW9uICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCit0eXBlZGVmIGVudW0gew0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIENvcnRleC1NNCBQcm9jZXNzb3IgRXhjZXB0aW9ucyBOdW1iZXJzICAtLS0tLS0tLS0tLS0tLS0tLS0tICovDQorICBSZXNldF9JUlFuICAgICAgICAgICAgICAgICAgICA9IC0xNSwgICAgICAgICAgICAgIC8qITwgICAxICBSZXNldCBWZWN0b3IsIGludm9rZWQgb24gUG93ZXIgdXAgYW5kIHdhcm0gcmVzZXQgICAgICAgICAgICAgICAgICovDQorICBOb25NYXNrYWJsZUludF9JUlFuICAgICAgICAgICA9IC0xNCwgICAgICAgICAgICAgIC8qITwgICAyICBOb24gbWFza2FibGUgSW50ZXJydXB0LCBjYW5ub3QgYmUgc3RvcHBlZCBvciBwcmVlbXB0ZWQgICAgICAgICAgICovDQorICBIYXJkRmF1bHRfSVJRbiAgICAgICAgICAgICAgICA9IC0xMywgICAgICAgICAgICAgIC8qITwgICAzICBIYXJkIEZhdWx0LCBhbGwgY2xhc3NlcyBvZiBGYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBNZW1vcnlNYW5hZ2VtZW50X0lSUW4gICAgICAgICA9IC0xMiwgICAgICAgICAgICAgIC8qITwgICA0ICBNZW1vcnkgTWFuYWdlbWVudCwgTVBVIG1pc21hdGNoLCBpbmNsdWRpbmcgQWNjZXNzIFZpb2xhdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBObyBNYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgQnVzRmF1bHRfSVJRbiAgICAgICAgICAgICAgICAgPSAtMTEsICAgICAgICAgICAgICAvKiE8ICAgNSAgQnVzIEZhdWx0LCBQcmUtRmV0Y2gtLCBNZW1vcnkgQWNjZXNzIEZhdWx0LCBvdGhlciBhZGRyZXNzL21lbW9yeQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgRmF1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgVXNhZ2VGYXVsdF9JUlFuICAgICAgICAgICAgICAgPSAtMTAsICAgICAgICAgICAgICAvKiE8ICAgNiAgVXNhZ2UgRmF1bHQsIGkuZS4gVW5kZWYgSW5zdHJ1Y3Rpb24sIElsbGVnYWwgU3RhdGUgVHJhbnNpdGlvbiAgICAqLw0KKyAgU1ZDYWxsX0lSUW4gICAgICAgICAgICAgICAgICAgPSAgLTUsICAgICAgICAgICAgICAvKiE8ICAxMSAgU3lzdGVtIFNlcnZpY2UgQ2FsbCB2aWEgU1ZDIGluc3RydWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRGVidWdNb25pdG9yX0lSUW4gICAgICAgICAgICAgPSAgLTQsICAgICAgICAgICAgICAvKiE8ICAxMiAgRGVidWcgTW9uaXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgUGVuZFNWX0lSUW4gICAgICAgICAgICAgICAgICAgPSAgLTIsICAgICAgICAgICAgICAvKiE8ICAxNCAgUGVuZGFibGUgcmVxdWVzdCBmb3Igc3lzdGVtIHNlcnZpY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgU3lzVGlja19JUlFuICAgICAgICAgICAgICAgICAgPSAgLTEsICAgICAgICAgICAgICAvKiE8ICAxNSAgU3lzdGVtIFRpY2sgVGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgbnJmNTI4NDAgU3BlY2lmaWMgSW50ZXJydXB0IE51bWJlcnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorICBQT1dFUl9DTE9DS19JUlFuICAgICAgICAgICAgICA9ICAgMCwgICAgICAgICAgICAgIC8qITwgICAwICBQT1dFUl9DTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBSQURJT19JUlFuICAgICAgICAgICAgICAgICAgICA9ICAgMSwgICAgICAgICAgICAgIC8qITwgICAxICBSQURJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBVQVJURTBfVUFSVDBfSVJRbiAgICAgICAgICAgICA9ICAgMiwgICAgICAgICAgICAgIC8qITwgICAyICBVQVJURTBfVUFSVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTUElNMF9TUElTMF9UV0lNMF9UV0lTMF9TUEkwX1RXSTBfSVJRbj0gICAzLCAgICAgIC8qITwgICAzICBTUElNMF9TUElTMF9UV0lNMF9UV0lTMF9TUEkwX1RXSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTUElNMV9TUElTMV9UV0lNMV9UV0lTMV9TUEkxX1RXSTFfSVJRbj0gICA0LCAgICAgIC8qITwgICA0ICBTUElNMV9TUElTMV9UV0lNMV9UV0lTMV9TUEkxX1RXSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBORkNUX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAgNSwgICAgICAgICAgICAgIC8qITwgICA1ICBORkNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBHUElPVEVfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAgNiwgICAgICAgICAgICAgIC8qITwgICA2ICBHUElPVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTQUFEQ19JUlFuICAgICAgICAgICAgICAgICAgICA9ICAgNywgICAgICAgICAgICAgIC8qITwgICA3ICBTQUFEQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBUSU1FUjBfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAgOCwgICAgICAgICAgICAgIC8qITwgICA4ICBUSU1FUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBUSU1FUjFfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAgOSwgICAgICAgICAgICAgIC8qITwgICA5ICBUSU1FUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBUSU1FUjJfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAxMCwgICAgICAgICAgICAgIC8qITwgIDEwICBUSU1FUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBSVEMwX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAxMSwgICAgICAgICAgICAgIC8qITwgIDExICBSVEMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBURU1QX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAxMiwgICAgICAgICAgICAgIC8qITwgIDEyICBURU1QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBSTkdfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAxMywgICAgICAgICAgICAgIC8qITwgIDEzICBSTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBFQ0JfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAxNCwgICAgICAgICAgICAgIC8qITwgIDE0ICBFQ0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBDQ01fQUFSX0lSUW4gICAgICAgICAgICAgICAgICA9ICAxNSwgICAgICAgICAgICAgIC8qITwgIDE1ICBDQ01fQUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBXRFRfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAxNiwgICAgICAgICAgICAgIC8qITwgIDE2ICBXRFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBSVEMxX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAxNywgICAgICAgICAgICAgIC8qITwgIDE3ICBSVEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBRREVDX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAxOCwgICAgICAgICAgICAgIC8qITwgIDE4ICBRREVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBDT01QX0xQQ09NUF9JUlFuICAgICAgICAgICAgICA9ICAxOSwgICAgICAgICAgICAgIC8qITwgIDE5ICBDT01QX0xQQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTV0kwX0VHVTBfSVJRbiAgICAgICAgICAgICAgICA9ICAyMCwgICAgICAgICAgICAgIC8qITwgIDIwICBTV0kwX0VHVTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTV0kxX0VHVTFfSVJRbiAgICAgICAgICAgICAgICA9ICAyMSwgICAgICAgICAgICAgIC8qITwgIDIxICBTV0kxX0VHVTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTV0kyX0VHVTJfSVJRbiAgICAgICAgICAgICAgICA9ICAyMiwgICAgICAgICAgICAgIC8qITwgIDIyICBTV0kyX0VHVTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTV0kzX0VHVTNfSVJRbiAgICAgICAgICAgICAgICA9ICAyMywgICAgICAgICAgICAgIC8qITwgIDIzICBTV0kzX0VHVTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTV0k0X0VHVTRfSVJRbiAgICAgICAgICAgICAgICA9ICAyNCwgICAgICAgICAgICAgIC8qITwgIDI0ICBTV0k0X0VHVTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTV0k1X0VHVTVfSVJRbiAgICAgICAgICAgICAgICA9ICAyNSwgICAgICAgICAgICAgIC8qITwgIDI1ICBTV0k1X0VHVTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBUSU1FUjNfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAyNiwgICAgICAgICAgICAgIC8qITwgIDI2ICBUSU1FUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBUSU1FUjRfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAyNywgICAgICAgICAgICAgIC8qITwgIDI3ICBUSU1FUjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBQV00wX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAyOCwgICAgICAgICAgICAgIC8qITwgIDI4ICBQV00wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBQRE1fSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAyOSwgICAgICAgICAgICAgIC8qITwgIDI5ICBQRE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBNV1VfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAzMiwgICAgICAgICAgICAgIC8qITwgIDMyICBNV1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBQV00xX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAzMywgICAgICAgICAgICAgIC8qITwgIDMzICBQV00xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBQV00yX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAzNCwgICAgICAgICAgICAgIC8qITwgIDM0ICBQV00yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTUElNMl9TUElTMl9TUEkyX0lSUW4gICAgICAgICA9ICAzNSwgICAgICAgICAgICAgIC8qITwgIDM1ICBTUElNMl9TUElTMl9TUEkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBSVEMyX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAzNiwgICAgICAgICAgICAgIC8qITwgIDM2ICBSVEMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBJMlNfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAzNywgICAgICAgICAgICAgIC8qITwgIDM3ICBJMlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBGUFVfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAzOCwgICAgICAgICAgICAgIC8qITwgIDM4ICBGUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBVU0JEX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAzOSwgICAgICAgICAgICAgIC8qITwgIDM5ICBVU0JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBVQVJURTFfSVJRbiAgICAgICAgICAgICAgICAgICA9ICA0MCwgICAgICAgICAgICAgIC8qITwgIDQwICBVQVJURTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBRU1BJX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICA0MSwgICAgICAgICAgICAgIC8qITwgIDQxICBRU1BJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBDUllQVE9DRUxMX0lSUW4gICAgICAgICAgICAgICA9ICA0MiwgICAgICAgICAgICAgIC8qITwgIDQyICBDUllQVE9DRUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTUElNM19JUlFuICAgICAgICAgICAgICAgICAgICA9ICA0MywgICAgICAgICAgICAgIC8qITwgIDQzICBTUElNMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBQV00zX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICA0NSAgICAgICAgICAgICAgIC8qITwgIDQ1ICBQV00zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBJUlFuX1R5cGU7DQorDQorDQorLyoqIEBhZGR0b2dyb3VwIENvbmZpZ3VyYXRpb25fb2ZfQ01TSVMNCisgICogQHsNCisgICovDQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgUHJvY2Vzc29yIGFuZCBDb3JlIFBlcmlwaGVyYWwgU2VjdGlvbiAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLUNvbmZpZ3VyYXRpb24gb2YgdGhlIENvcnRleC1NNCBQcm9jZXNzb3IgYW5kIENvcmUgUGVyaXBoZXJhbHMtLS0tLS0tLS0tLS0tLS0tICovDQorI2RlZmluZSBfX0NNNF9SRVYgICAgICAgICAgICAgICAgIDB4MDAwMSAgICAgICAgICAgIC8qITwgQ29ydGV4LU00IENvcmUgUmV2aXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBfX01QVV9QUkVTRU5UICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgIC8qITwgTVBVIHByZXNlbnQgb3Igbm90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBfX05WSUNfUFJJT19CSVRTICAgICAgICAgICAgICAgMyAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIEJpdHMgdXNlZCBmb3IgUHJpb3JpdHkgTGV2ZWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnICAgICAgICAgMCAgICAgICAgICAgIC8qITwgU2V0IHRvIDEgaWYgZGlmZmVyZW50IFN5c1RpY2sgQ29uZmlnIGlzIHVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBfX0ZQVV9QUkVTRU5UICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgIC8qITwgRlBVIHByZXNlbnQgb3Igbm90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyoqIEB9ICovIC8qIEVuZCBvZiBncm91cCBDb25maWd1cmF0aW9uX29mX0NNU0lTICovDQorDQorI2lmIGRlZmluZWQgKCBfX0dOVUNfXyApDQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoDQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3BlZGFudGljIg0KKyNlbmRpZg0KKyNpbmNsdWRlICJjb3JlX2NtNC5oIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcnRleC1NNCBwcm9jZXNzb3IgYW5kIGNvcmUgcGVyaXBoZXJhbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQ0KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wDQorI2VuZGlmDQorDQorI2luY2x1ZGUgInN5c3RlbV9ucmY1Mjg0MC5oIiAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgbnJmNTI4NDAgU3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgIERldmljZSBTcGVjaWZpYyBQZXJpcGhlcmFsIFNlY3Rpb24gICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqIEBhZGR0b2dyb3VwIERldmljZV9QZXJpcGhlcmFsX1JlZ2lzdGVycw0KKyAgKiBAew0KKyAgKi8NCisNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBTdGFydCBvZiBzZWN0aW9uIHVzaW5nIGFub255bW91cyB1bmlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQ0KKyAgI3ByYWdtYSBwdXNoDQorICAjcHJhZ21hIGFub25fdW5pb25zDQorI2VsaWYgZGVmaW5lZChfX0lDQ0FSTV9fKQ0KKyAgI3ByYWdtYSBsYW5ndWFnZT1leHRlbmRlZA0KKyNlbGlmIGRlZmluZWQoX19HTlVDX18pDQorICAvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8NCisjZWxpZiBkZWZpbmVkKF9fVE1TNDcwX18pDQorLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovDQorI2VsaWYgZGVmaW5lZChfX1RBU0tJTkdfXykNCisgICNwcmFnbWEgd2FybmluZyA1ODYNCisjZWxzZQ0KKyAgI3dhcm5pbmcgTm90IHN1cHBvcnRlZCBjb21waWxlciB0eXBlDQorI2VuZGlmDQorDQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JICB1aW50MzJfdCAgUEFSVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBhcnQgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgVkFSSUFOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBhcnQgdmFyaWFudCAoaGFyZHdhcmUgdmVyc2lvbiBhbmQgcHJvZHVjdGlvbiBjb25maWd1cmF0aW9uKS4gICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUEFDS0FHRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBhY2thZ2Ugb3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkFNOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJBTSB2YXJpYW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgRkxBU0g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZsYXNoIHZhcmlhbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVU5VU0VEMFszXTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gRklDUl9JTkZPX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JICB1aW50MzJfdCAgQTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIGRlZmluaXRpb24gQTAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIGRlZmluaXRpb24gQTEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIGRlZmluaXRpb24gQTIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQTM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIGRlZmluaXRpb24gQTMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIGRlZmluaXRpb24gQTQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIGRlZmluaXRpb24gQTUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IEIwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IEIxLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IEIyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IEIzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IEI0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQjU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IEI1LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgVDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlZ21lbnQgZW5kIFQwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgVDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlZ21lbnQgZW5kIFQxLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgVDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlZ21lbnQgZW5kIFQyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgVDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlZ21lbnQgZW5kIFQzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgVDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlZ21lbnQgZW5kIFQ0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gRklDUl9URU1QX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JICB1aW50MzJfdCAgVEFHSEVBREVSMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlZmF1bHQgaGVhZGVyIGZvciBORkMgVGFnLiBTb2Z0d2FyZSBjYW4gcmVhZCB0aGVzZSB2YWx1ZXMgdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZSBORkNJRDFfM1JEX0xBU1QsIE5GQ0lEMV8yTkRfTEFTVCBhbmQgTkZDSUQxX0xBU1QuICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFRBR0hFQURFUjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZWZhdWx0IGhlYWRlciBmb3IgTkZDIFRhZy4gU29mdHdhcmUgY2FuIHJlYWQgdGhlc2UgdmFsdWVzIHRvDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGUgTkZDSUQxXzNSRF9MQVNULCBORkNJRDFfMk5EX0xBU1QgYW5kIE5GQ0lEMV9MQVNULiAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBUQUdIRUFERVIyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVmYXVsdCBoZWFkZXIgZm9yIE5GQyBUYWcuIFNvZnR3YXJlIGNhbiByZWFkIHRoZXNlIHZhbHVlcyB0bw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlIE5GQ0lEMV8zUkRfTEFTVCwgTkZDSUQxXzJORF9MQVNUIGFuZCBORkNJRDFfTEFTVC4gICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgVEFHSEVBREVSMzsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlZmF1bHQgaGVhZGVyIGZvciBORkMgVGFnLiBTb2Z0d2FyZSBjYW4gcmVhZCB0aGVzZSB2YWx1ZXMgdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZSBORkNJRDFfM1JEX0xBU1QsIE5GQ0lEMV8yTkRfTEFTVCBhbmQgTkZDSUQxX0xBU1QuICAgICAgICAgICAgKi8NCit9IEZJQ1JfTkZDX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUE9XRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IFJBTTAgcG93ZXIgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgUE9XRVJTRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IFJBTTAgcG93ZXIgY29udHJvbCBzZXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgUE9XRVJDTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IFJBTTAgcG93ZXIgY29udHJvbCBjbGVhciByZWdpc3RlciAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwOw0KK30gUE9XRVJfUkFNX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFJUUyBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVFhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFRYRCBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ1RTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIENUUyBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUlhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFJYRCBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gVUFSVEVfUFNFTF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFNT1VOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgKi8NCit9IFVBUlRFX1JYRF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiB0cmFuc21pdCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFNT1VOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgKi8NCit9IFVBUlRFX1RYRF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFJUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBSVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFRYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBUWEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBDVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBSWEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFVBUlRfUFNFTF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFNDSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBTQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1PU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBNT1NJIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1JU087ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBNSVNPIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENTTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBDU04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFNQSU1fUFNFTF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFNT1VOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIExJU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFYXN5RE1BIGxpc3QgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFNQSU1fUlhEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBieXRlcyBpbiB0cmFuc21pdCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTElTVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVhc3lETUEgbGlzdCB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gU1BJTV9UWERfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBSWERFTEFZOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2FtcGxlIGRlbGF5IGZvciBpbnB1dCBzZXJpYWwgZGF0YSBvbiBNSVNPICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDU05EVVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTWluaW11bSBkdXJhdGlvbiBiZXR3ZWVuIGVkZ2Ugb2YgQ1NOIGFuZCBlZGdlIG9mIFNDSyBhbmQgbWluaW11bQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uIENTTiBtdXN0IHN0YXkgaGlnaCBiZXR3ZWVuIHRyYW5zYWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gU1BJTV9JRlRJTUlOR19UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFNDSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBTQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1JU087ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBNSVNPIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1PU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBNT1NJIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENTTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBDU04gc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFNQSVNfUFNFTF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWEQgZGF0YSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFNT1VOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gbGFzdCBncmFudGVkIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgKi8NCit9IFNQSVNfUlhEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYRCBkYXRhIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBieXRlcyB0cmFuc21pdHRlZCBpbiBsYXN0IGdyYW50ZWQgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAqLw0KK30gU1BJU19UWERfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBTQ0w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgU0NMIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBTREE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgU0RBIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBUV0lNX1BTRUxfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNQVhDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gcmVjZWl2ZSBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBTU9VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBMSVNUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRWFzeURNQSBsaXN0IHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBUV0lNX1JYRF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiB0cmFuc21pdCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFNT1VOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIExJU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFYXN5RE1BIGxpc3QgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFRXSU1fVFhEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgU0NMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFNDTCBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgU0RBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFNEQSBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gVFdJU19QU0VMX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYRCBEYXRhIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIFJYRCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCBSWEQgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAqLw0KK30gVFdJU19SWERfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFhEIERhdGEgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNQVhDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gVFhEIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBTU9VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IFRYRCB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICovDQorfSBUV0lTX1RYRF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFNDSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBTQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1PU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBNT1NJIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1JU087ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBNSVNPIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFNQSV9QU0VMX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgU0NMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFNDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgU0RBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFNEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gVFdJX1BTRUxfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBSWDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVzdWx0IG9mIGxhc3QgaW5jb21pbmcgZnJhbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBORkNUX0ZSQU1FU1RBVFVTX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgRlJBTUVDT05GSUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyYXRpb24gb2Ygb3V0Z29pbmcgZnJhbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNpemUgb2Ygb3V0Z29pbmcgZnJhbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTkZDVF9UWERfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBGUkFNRUNPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJhdGlvbiBvZiBpbmNvbWluZyBmcmFtZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBTU9VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2l6ZSBvZiBsYXN0IGluY29taW5nIGZyYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBORkNUX1JYRF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIExJTUlUSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBMYXN0IHJlc3VsdHMgaXMgZXF1YWwgb3IgYWJvdmUgQ0hbMF0uTElNSVQuSElHSCAqLw0KKyAgX19JTyB1aW50MzJfdCAgTElNSVRMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IExhc3QgcmVzdWx0cyBpcyBlcXVhbCBvciBiZWxvdyBDSFswXS5MSU1JVC5MT1cgKi8NCit9IFNBQURDX0VWRU5UU19DSF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBTRUxQOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBJbnB1dCBwb3NpdGl2ZSBwaW4gc2VsZWN0aW9uIGZvciBDSFswXSAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFBTRUxOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBJbnB1dCBuZWdhdGl2ZSBwaW4gc2VsZWN0aW9uIGZvciBDSFswXSAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBJbnB1dCBjb25maWd1cmF0aW9uIGZvciBDSFswXSAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIExJTUlUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBIaWdoL2xvdyBsaW1pdHMgZm9yIGV2ZW50IG1vbml0b3JpbmcNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNoYW5uZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFNBQURDX0NIX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1heGltdW0gbnVtYmVyIG9mIGJ1ZmZlciB3b3JkcyB0byB0cmFuc2ZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBidWZmZXIgd29yZHMgdHJhbnNmZXJyZWQgc2luY2UgbGFzdCBTVEFSVCAgICAgICAgICAgICAgICAgICAqLw0KK30gU0FBRENfUkVTVUxUX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgTEVEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIExFRCBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIEEgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIEIgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gUURFQ19QU0VMX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IEJlZ2lubmluZyBhZGRyZXNzIGluIERhdGEgUkFNIG9mIHNlcXVlbmNlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogQW1vdW50IG9mIHZhbHVlcyAoZHV0eSBjeWNsZXMpIGluIHNlcXVlbmNlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBSRUZSRVNIOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogQW1vdW50IG9mIGFkZGl0aW9uYWwgUFdNIHBlcmlvZHMgYmV0d2Vlbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXMgbG9hZGVkIHRvIGNvbXBhcmUgcmVnaXN0ZXIgKGxvYWQgZXZlcnkgQ05UKzEgUFdNIHBlcmlvZHMpICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRU5EREVMQVk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IFRpbWUgYWRkZWQgYWZ0ZXIgdGhlIHNlcXVlbmNlICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzRdOw0KK30gUFdNX1NFUV9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIE9VVFs0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBPdXRwdXQgcGluIHNlbGVjdCBmb3IgUFdNIGNoYW5uZWwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFBXTV9QU0VMX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgQ0xLOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBudW1iZXIgY29uZmlndXJhdGlvbiBmb3IgUERNIENMSyBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRElOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBudW1iZXIgY29uZmlndXJhdGlvbiBmb3IgUERNIERJTiBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gUERNX1BTRUxfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUkFNIGFkZHJlc3MgcG9pbnRlciB0byB3cml0ZSBzYW1wbGVzIHRvIHdpdGggRWFzeURNQSAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNQVhDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIHNhbXBsZXMgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBpbiBFYXN5RE1BIG1vZGUgICAgICAgICAgICAgICovDQorfSBQRE1fU0FNUExFX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgQUREUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IENvbmZpZ3VyZSB0aGUgd29yZC1hbGlnbmVkIHN0YXJ0IGFkZHJlc3MNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiByZWdpb24gMCB0byBwcm90ZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNJWkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBTaXplIG9mIHJlZ2lvbiB0byBwcm90ZWN0IGNvdW50aW5nIGZyb20NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIEFDTFswXS5BRERSLiBXcml0ZSAnMCcgYXMgbm8gZWZmZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFBFUk07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBBY2Nlc3MgcGVybWlzc2lvbnMgZm9yIHJlZ2lvbiAwIGFzIGRlZmluZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBzdGFydCBhZGRyZXNzIEFDTFswXS5BRERSIGFuZCBzaXplIEFDTFswXS5TSVpFICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFVOVVNFRDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IEFDTF9BQ0xfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX08gIHVpbnQzMl90ICBFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogRW5hYmxlIGNoYW5uZWwgZ3JvdXAgMCAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBESVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogRGlzYWJsZSBjaGFubmVsIGdyb3VwIDAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBQUElfVEFTS1NfQ0hHX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgRUVQOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IENoYW5uZWwgMCBldmVudCBlbmQtcG9pbnQgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVEVQOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IENoYW5uZWwgMCB0YXNrIGVuZC1wb2ludCAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gUFBJX0NIX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgVEVQOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IENoYW5uZWwgMCB0YXNrIGVuZC1wb2ludCAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gUFBJX0ZPUktfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBXQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogV3JpdGUgYWNjZXNzIHRvIHJlZ2lvbiAwIGRldGVjdGVkICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBSQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogUmVhZCBhY2Nlc3MgdG8gcmVnaW9uIDAgZGV0ZWN0ZWQgICAgICAgICAgICAgICovDQorfSBNV1VfRVZFTlRTX1JFR0lPTl9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFdBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBXcml0ZSBhY2Nlc3MgdG8gcGVyaXBoZXJhbCByZWdpb24gMA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUkE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IFJlYWQgYWNjZXNzIHRvIHBlcmlwaGVyYWwgcmVnaW9uIDAgZGV0ZWN0ZWQgICAqLw0KK30gTVdVX0VWRU5UU19QUkVHSU9OX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgU1VCU1RBVFdBOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IFNvdXJjZSBvZiBldmVudC9pbnRlcnJ1cHQgaW4gcmVnaW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgd3JpdGUgYWNjZXNzIGRldGVjdGVkIHdoaWxlIGNvcnJlc3BvbmRpbmcgc3VicmVnaW9uIHdhcyBlbmFibGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3YXRjaGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBTVUJTVEFUUkE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogU291cmNlIG9mIGV2ZW50L2ludGVycnVwdCBpbiByZWdpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCByZWFkIGFjY2VzcyBkZXRlY3RlZCB3aGlsZSBjb3JyZXNwb25kaW5nIHN1YnJlZ2lvbiB3YXMgZW5hYmxlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igd2F0Y2hpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTVdVX1BFUlJFR0lPTl9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFNUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBTdGFydCBhZGRyZXNzIGZvciByZWdpb24gMCAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVORDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBFbmQgYWRkcmVzcyBvZiByZWdpb24gMCAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsyXTsNCit9IE1XVV9SRUdJT05fVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0kgIHVpbnQzMl90ICBTVEFSVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBFTkQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBTVUJTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogU3VicmVnaW9ucyBvZiByZWdpb24gMCAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDM7DQorfSBNV1VfUFJFR0lPTl9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIE1PREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlMgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJYRU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWNlcHRpb24gKFJYKSBlbmFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFRYRU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUcmFuc21pc3Npb24gKFRYKSBlbmFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1DS0VOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXN0ZXIgY2xvY2sgZ2VuZXJhdG9yIGVuYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1DS0ZSRVE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXN0ZXIgY2xvY2sgZ2VuZXJhdG9yIGZyZXF1ZW5jeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJBVElPOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNQ0sgLyBMUkNLIHJhdGlvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNXSURUSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTYW1wbGUgd2lkdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEFMSUdOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBbGlnbm1lbnQgb2Ygc2FtcGxlIHdpdGhpbiBhIGZyYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEZPUk1BVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGcmFtZSBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENIQU5ORUxTOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgY2hhbm5lbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IEkyU19DT05GSUdfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBidWZmZXIgUkFNIHN0YXJ0IGFkZHJlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBJMlNfUlhEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRyYW5zbWl0IGJ1ZmZlciBSQU0gc3RhcnQgYWRkcmVzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gSTJTX1RYRF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaXplIG9mIFJYRCBhbmQgVFhEIGJ1ZmZlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IEkyU19SWFRYRF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIE1DSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBNQ0sgc2lnbmFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNDSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBTQ0sgc2lnbmFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIExSQ0s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBMUkNLIHNpZ25hbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNESU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBTRElOIHNpZ25hbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNET1VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBTRE9VVCBzaWduYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IEkyU19QU0VMX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JICB1aW50MzJfdCAgRVBJTls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IElOIGVuZHBvaW50IGhhbHRlZCBzdGF0dXMuIENhbiBiZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgYXMgaXMgYXMgcmVzcG9uc2UgdG8gYSBHZXRTdGF0dXMoKSByZXF1ZXN0IHRvIGVuZHBvaW50LiAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0Ow0KKyAgX19JICB1aW50MzJfdCAgRVBPVVRbOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IE9VVCBlbmRwb2ludCBoYWx0ZWQgc3RhdHVzLiBDYW4gYmUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGFzIGlzIGFzIHJlc3BvbnNlIHRvIGEgR2V0U3RhdHVzKCkgcmVxdWVzdCB0byBlbmRwb2ludC4gICAgICAgICAgKi8NCit9IFVTQkRfSEFMVEVEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgRVBPVVRbOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IEFtb3VudCBvZiBieXRlcyByZWNlaXZlZCBsYXN0IGluDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRhdGEgc3RhZ2Ugb2YgdGhpcyBPVVQgZW5kcG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJU09PVVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQW1vdW50IG9mIGJ5dGVzIHJlY2VpdmVkIGxhc3Qgb24gdGhpcyBpc28gT1VUIGRhdGEgZW5kcG9pbnQgICAgICAgICAgICovDQorfSBVU0JEX1NJWkVfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogRGF0YSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNQVhDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBTU9VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbMl07DQorfSBVU0JEX0VQSU5fVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNQVhDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBTU9VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICovDQorfSBVU0JEX0lTT0lOX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IERhdGEgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzJdOw0KK30gVVNCRF9FUE9VVF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFNT1VOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgKi8NCit9IFVTQkRfSVNPT1VUX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgU1JDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZsYXNoIG1lbW9yeSBzb3VyY2UgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRFNUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJBTSBkZXN0aW5hdGlvbiBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlYWQgdHJhbnNmZXIgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gUVNQSV9SRUFEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgRFNUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZsYXNoIGRlc3RpbmF0aW9uIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgU1JDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJBTSBzb3VyY2UgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdyaXRlIHRyYW5zZmVyIGxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gUVNQSV9XUklURV9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBhZGRyZXNzIG9mIGZsYXNoIGJsb2NrIHRvIGJlIGVyYXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIExFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaXplIG9mIGJsb2NrIHRvIGJlIGVyYXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFFTUElfRVJBU0VfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBTQ0s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3Igc2VyaWFsIGNsb2NrIFNDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDU047ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgY2hpcCBzZWxlY3Qgc2lnbmFsIENTTi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDc7DQorICBfX0lPIHVpbnQzMl90ICBJTzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3Igc2VyaWFsIGRhdGEgTU9TSS9JTzAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3Igc2VyaWFsIGRhdGEgTUlTTy9JTzEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3Igc2VyaWFsIGRhdGEgSU8yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3Igc2VyaWFsIGRhdGEgSU8zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBRU1BJX1BTRUxfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgRklDUiAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIEZhY3RvcnkgSW5mb3JtYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKEZJQ1IpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZJQ1IgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzRdOw0KKyAgX19JICB1aW50MzJfdCAgQ09ERVBBR0VTSVpFOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvZGUgbWVtb3J5IHBhZ2Ugc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQ09ERVNJWkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvZGUgbWVtb3J5IHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzE4XTsNCisgIF9fSSAgdWludDMyX3QgIERFVklDRUlEWzJdOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBEZXZpY2UgaWRlbnRpZmllciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMls2XTsNCisgIF9fSSAgdWludDMyX3QgIEVSWzRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBFbmNyeXB0aW9uIHJvb3QsIHdvcmQgMCAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIElSWzRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBJZGVudGl0eSBSb290LCB3b3JkIDAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIERFVklDRUFERFJUWVBFOyAgICAgICAgICAgICAgICAgICAgLyohPCBEZXZpY2UgYWRkcmVzcyB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIERFVklDRUFERFJbMl07ICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBEZXZpY2UgYWRkcmVzcyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1syMV07DQorICBGSUNSX0lORk9fVHlwZSBJTkZPOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGV2aWNlIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbMTg1XTsNCisgIEZJQ1JfVEVNUF9UeXBlIFRFTVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWdpc3RlcnMgc3RvcmluZyBmYWN0b3J5IFRFTVAgbW9kdWxlIGxpbmVhcml6YXRpb24gY29lZmZpY2llbnRzICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVsyXTsNCisgIEZJQ1JfTkZDX1R5cGUgTkZDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9GSUNSX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFVJQ1IgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBVc2VyIEluZm9ybWF0aW9uIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzIChVSUNSKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSUNSIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFVOVVNFRDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFVOVVNFRDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFVOVVNFRDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMDsNCisgIF9fSU8gdWludDMyX3QgIFVOVVNFRDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE5SRkZXWzE1XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBSZXNlcnZlZCBmb3IgTm9yZGljIGZpcm13YXJlIGRlc2lnbiAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE5SRkhXWzEyXTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBSZXNlcnZlZCBmb3IgTm9yZGljIGhhcmR3YXJlIGRlc2lnbiAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENVU1RPTUVSWzMyXTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBSZXNlcnZlZCBmb3IgY3VzdG9tZXIgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs2NF07DQorICBfX0lPIHVpbnQzMl90ICBQU0VMUkVTRVRbMl07ICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogTWFwcGluZyBvZiB0aGUgblJFU0VUIGZ1bmN0aW9uICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBBUFBST1RFQ1Q7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQWNjZXNzIHBvcnQgcHJvdGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBORkNQSU5TOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0dGluZyBvZiBwaW5zIGRlZGljYXRlZCB0byBORkMgZnVuY3Rpb25hbGl0eTogTkZDIGFudGVubmENCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBHUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMls2MF07DQorICBfX0lPIHVpbnQzMl90ICBFWFRTVVBQTFk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGV4dGVybmFsIGNpcmN1aXRyeSB0byBiZSBzdXBwbGllZCBmcm9tIFZERCBwaW4uIEFwcGxpY2FibGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiAnSGlnaCB2b2x0YWdlIG1vZGUnIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJFR09VVDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIHJlZmVyZW5jZSB2b2x0YWdlIC8gZXh0ZXJuYWwgb3V0cHV0IHN1cHBseSB2b2x0YWdlIGluICdIaWdoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdGFnZSBtb2RlJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfVUlDUl9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBQT1dFUiAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgUG93ZXIgY29udHJvbCAoUE9XRVIpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBPV0VSIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzMwXTsNCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NPTlNUTEFUOyAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgY29uc3RhbnQgbGF0ZW5jeSBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0xPV1BXUjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgbG93IHBvd2VyIG1vZGUgKHZhcmlhYmxlIGxhdGVuY3kpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVszNF07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUE9GV0FSTjsgICAgICAgICAgICAgICAgICAgIC8qITwgUG93ZXIgZmFpbHVyZSB3YXJuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMl07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU0xFRVBFTlRFUjsgICAgICAgICAgICAgICAgIC8qITwgQ1BVIGVudGVyZWQgV0ZJL1dGRSBzbGVlcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU0xFRVBFWElUOyAgICAgICAgICAgICAgICAgIC8qITwgQ1BVIGV4aXRlZCBXRkkvV0ZFIHNsZWVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVVNCREVURUNURUQ7ICAgICAgICAgICAgICAgIC8qITwgVm9sdGFnZSBzdXBwbHkgZGV0ZWN0ZWQgb24gVkJVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVVNCUkVNT1ZFRDsgICAgICAgICAgICAgICAgIC8qITwgVm9sdGFnZSBzdXBwbHkgcmVtb3ZlZCBmcm9tIFZCVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVVNCUFdSUkRZOyAgICAgICAgICAgICAgICAgIC8qITwgVVNCIDMuMyBWIHN1cHBseSByZWFkeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbMTE5XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs2MV07DQorICBfX0lPIHVpbnQzMl90ICBSRVNFVFJFQVM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVzZXQgcmVhc29uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbOV07DQorICBfX0kgIHVpbnQzMl90ICBSQU1TVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVwcmVjYXRlZCByZWdpc3RlciAtIFJBTSBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbM107DQorICBfX0kgIHVpbnQzMl90ICBVU0JSRUdTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIHN1cHBseSBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbNDldOw0KKyAgX19PICB1aW50MzJfdCAgU1lTVEVNT0ZGOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBPRkYgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ4WzNdOw0KKyAgX19JTyB1aW50MzJfdCAgUE9GQ09OOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBvd2VyIGZhaWx1cmUgY29tcGFyYXRvciBjb25maWd1cmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5WzJdOw0KKyAgX19JTyB1aW50MzJfdCAgR1BSRUdSRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdlbmVyYWwgcHVycG9zZSByZXRlbnRpb24gcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgR1BSRUdSRVQyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdlbmVyYWwgcHVycG9zZSByZXRlbnRpb24gcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMFsyMV07DQorICBfX0lPIHVpbnQzMl90ICBEQ0RDRU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIERDL0RDIGNvbnZlcnRlciBmb3IgUkVHMSBzdGFnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDExOw0KKyAgX19JTyB1aW50MzJfdCAgRENEQ0VOMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBEQy9EQyBjb252ZXJ0ZXIgZm9yIFJFRzAgc3RhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMls0N107DQorICBfX0kgIHVpbnQzMl90ICBNQUlOUkVHU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgIC8qITwgTWFpbiBzdXBwbHkgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEzWzE3NV07DQorICBQT1dFUl9SQU1fVHlwZSBSQU1bOV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfUE9XRVJfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgQ0xPQ0sgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIENsb2NrIGNvbnRyb2wgKENMT0NLKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTE9DSyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0hGQ0xLU1RBUlQ7ICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBIRkNMSyBjcnlzdGFsIG9zY2lsbGF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0hGQ0xLU1RPUDsgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIEhGQ0xLIGNyeXN0YWwgb3NjaWxsYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0xGQ0xLU1RBUlQ7ICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBMRkNMSyBzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0xGQ0xLU1RPUDsgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIExGQ0xLIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NBTDsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBjYWxpYnJhdGlvbiBvZiBMRlJDIG9yIExGVUxQIG9zY2lsbGF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NUU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBjYWxpYnJhdGlvbiB0aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NUU1RPUDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIGNhbGlicmF0aW9uIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs1N107DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfSEZDTEtTVEFSVEVEOyAgICAgICAgICAgICAgIC8qITwgSEZDTEsgb3NjaWxsYXRvciBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfTEZDTEtTVEFSVEVEOyAgICAgICAgICAgICAgIC8qITwgTEZDTEsgc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE7DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRE9ORTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2FsaWJyYXRpb24gb2YgTEZDTEsgUkMgb3NjaWxsYXRvciBjb21wbGV0ZSBldmVudCAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ1RUTzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2FsaWJyYXRpb24gdGltZXIgdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMTI0XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s2M107DQorICBfX0kgIHVpbnQzMl90ICBIRkNMS1JVTjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhdHVzIGluZGljYXRpbmcgdGhhdCBIRkNMS1NUQVJUIHRhc2sgaGFzIGJlZW4gdHJpZ2dlcmVkICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBIRkNMS1NUQVQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSEZDTEsgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQ7DQorICBfX0kgIHVpbnQzMl90ICBMRkNMS1JVTjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhdHVzIGluZGljYXRpbmcgdGhhdCBMRkNMS1NUQVJUIHRhc2sgaGFzIGJlZW4gdHJpZ2dlcmVkICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBMRkNMS1NUQVQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTEZDTEsgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBMRkNMS1NSQ0NPUFk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29weSBvZiBMRkNMS1NSQyByZWdpc3Rlciwgc2V0IHdoZW4gTEZDTEtTVEFSVCB0YXNrIHdhcyB0cmlnZ2VyZWQgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbNjJdOw0KKyAgX19JTyB1aW50MzJfdCAgTEZDTEtTUkM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENsb2NrIHNvdXJjZSBmb3IgdGhlIExGQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzddOw0KKyAgX19JTyB1aW50MzJfdCAgQ1RJVjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENhbGlicmF0aW9uIHRpbWVyIGludGVydmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ3WzhdOw0KKyAgX19JTyB1aW50MzJfdCAgVFJBQ0VDT05GSUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENsb2NraW5nIG9wdGlvbnMgZm9yIHRoZSBUcmFjZSBQb3J0IGRlYnVnIGludGVyZmFjZSAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0NMT0NLX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFJBRElPICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiAyLjQgR0h6IFJhZGlvIChSQURJTykNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUkFESU8gU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19UWEVOOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIFJBRElPIGluIFRYIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19SWEVOOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIFJBRElPIGluIFJYIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgUkFESU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVE9QOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCBSQURJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19ESVNBQkxFOyAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBSQURJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19SU1NJU1RBUlQ7ICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgdGhlIFJTU0kgYW5kIHRha2Ugb25lIHNpbmdsZSBzYW1wbGUgb2YgdGhlIHJlY2VpdmUgc2lnbmFsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZW5ndGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19SU1NJU1RPUDsgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCB0aGUgUlNTSSBtZWFzdXJlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19CQ1NUQVJUOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgdGhlIGJpdCBjb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19CQ1NUT1A7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCB0aGUgYml0IGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19FRFNUQVJUOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgdGhlIEVuZXJneSBEZXRlY3QgbWVhc3VyZW1lbnQgdXNlZCBpbiBJRUVFIDgwMi4xNS40IG1vZGUgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19FRFNUT1A7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCB0aGUgRW5lcmd5IERldGVjdCBtZWFzdXJlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19DQ0FTVEFSVDsgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgdGhlIENsZWFyIENoYW5uZWwgQXNzZXNzbWVudCB1c2VkIGluIElFRUUgODAyLjE1LjQgbW9kZSAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19DQ0FTVE9QOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCB0aGUgQ2xlYXIgQ2hhbm5lbCBBc3Nlc3NtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNTFdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JFQURZOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJBRElPIGhhcyByYW1wZWQgdXAgYW5kIGlzIHJlYWR5IHRvIGJlIHN0YXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0FERFJFU1M7ICAgICAgICAgICAgICAgICAgICAvKiE8IEFkZHJlc3Mgc2VudCBvciByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1BBWUxPQUQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFBhY2tldCBwYXlsb2FkIHNlbnQgb3IgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VORDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBhY2tldCBzZW50IG9yIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0RJU0FCTEVEOyAgICAgICAgICAgICAgICAgICAvKiE8IFJBRElPIGhhcyBiZWVuIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0RFVk1BVENIOyAgICAgICAgICAgICAgICAgICAvKiE8IEEgZGV2aWNlIGFkZHJlc3MgbWF0Y2ggb2NjdXJyZWQgb24gdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0ICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0RFVk1JU1M7ICAgICAgICAgICAgICAgICAgICAvKiE8IE5vIGRldmljZSBhZGRyZXNzIG1hdGNoIG9jY3VycmVkIG9uIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldCAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JTU0lFTkQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFNhbXBsaW5nIG9mIHJlY2VpdmUgc2lnbmFsIHN0cmVuZ3RoIGNvbXBsZXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzJdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0JDTUFUQ0g7ICAgICAgICAgICAgICAgICAgICAvKiE8IEJpdCBjb3VudGVyIHJlYWNoZWQgYml0IGNvdW50IHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0NSQ09LOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBvayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0NSQ0VSUk9SOyAgICAgICAgICAgICAgICAgICAvKiE8IFBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0ZSQU1FU1RBUlQ7ICAgICAgICAgICAgICAgICAvKiE8IElFRUUgODAyLjE1LjQgbGVuZ3RoIGZpZWxkIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VERU5EOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNhbXBsaW5nIG9mIEVuZXJneSBEZXRlY3Rpb24gY29tcGxldGUuIEEgbmV3IEVEIHNhbXBsZSBpcyByZWFkeQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciByZWFkb3V0IGZyb20gdGhlIFJBRElPLkVEU0FNUExFIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VEU1RPUFBFRDsgICAgICAgICAgICAgICAgICAvKiE8IFRoZSBzYW1wbGluZyBvZiBFbmVyZ3kgRGV0ZWN0aW9uIGhhcyBzdG9wcGVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0NDQUlETEU7ICAgICAgICAgICAgICAgICAgICAvKiE8IFdpcmVsZXNzIG1lZGl1bSBpbiBpZGxlIC0gY2xlYXIgdG8gc2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0NDQUJVU1k7ICAgICAgICAgICAgICAgICAgICAvKiE8IFdpcmVsZXNzIG1lZGl1bSBidXN5IC0gZG8gbm90IHNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0NDQVNUT1BQRUQ7ICAgICAgICAgICAgICAgICAvKiE8IFRoZSBDQ0EgaGFzIHN0b3BwZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JBVEVCT09TVDsgICAgICAgICAgICAgICAgICAvKiE8IEJsZV9MUiBDSSBmaWVsZCByZWNlaXZlZCwgcmVjZWl2ZSBtb2RlIGlzIGNoYW5nZWQgZnJvbSBCbGVfTFIxMjVLYml0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQmxlX0xSNTAwS2JpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVFhSRUFEWTsgICAgICAgICAgICAgICAgICAgIC8qITwgUkFESU8gaGFzIHJhbXBlZCB1cCBhbmQgaXMgcmVhZHkgdG8gYmUgc3RhcnRlZCBUWCBwYXRoICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUlhSRUFEWTsgICAgICAgICAgICAgICAgICAgIC8qITwgUkFESU8gaGFzIHJhbXBlZCB1cCBhbmQgaXMgcmVhZHkgdG8gYmUgc3RhcnRlZCBSWCBwYXRoICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfTUhSTUFUQ0g7ICAgICAgICAgICAgICAgICAgIC8qITwgTUFDIEhlYWRlciBtYXRjaCBmb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbNDBdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzY0XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVs2MV07DQorICBfX0kgIHVpbnQzMl90ICBDUkNTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDY7DQorICBfX0kgIHVpbnQzMl90ICBSWE1BVENIOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZWQgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSWENSQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDIGZpZWxkIG9mIHByZXZpb3VzbHkgcmVjZWl2ZWQgcGFja2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBEQUk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGV2aWNlIGFkZHJlc3MgbWF0Y2ggaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbNjBdOw0KKyAgX19JTyB1aW50MzJfdCAgUEFDS0VUUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBhY2tldCBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRlJFUVVFTkNZOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZyZXF1ZW5jeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVFhQT1dFUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE91dHB1dCBwb3dlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTU9ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgcmF0ZSBhbmQgbW9kdWxhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUENORjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBhY2tldCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUENORjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBhY2tldCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQkFTRTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJhc2UgYWRkcmVzcyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQkFTRTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJhc2UgYWRkcmVzcyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUFJFRklYMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFByZWZpeGVzIGJ5dGVzIGZvciBsb2dpY2FsIGFkZHJlc3NlcyAwLTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUFJFRklYMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFByZWZpeGVzIGJ5dGVzIGZvciBsb2dpY2FsIGFkZHJlc3NlcyA0LTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVFhBRERSRVNTOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRyYW5zbWl0IGFkZHJlc3Mgc2VsZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUlhBRERSRVNTRVM7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlY2VpdmUgYWRkcmVzcyBzZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ1JDQ05GOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQyBjb25maWd1cmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ1JDUE9MWTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQyBwb2x5bm9taWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ1JDSU5JVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQyBpbml0aWFsIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ4Ow0KKyAgX19JTyB1aW50MzJfdCAgVElGUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEludGVyIEZyYW1lIFNwYWNpbmcgaW4gdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUlNTSVNBTVBMRTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJTU0kgc2FtcGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5Ow0KKyAgX19JICB1aW50MzJfdCAgU1RBVEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEN1cnJlbnQgcmFkaW8gc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgREFUQVdISVRFSVY7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgd2hpdGVuaW5nIGluaXRpYWwgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMFsyXTsNCisgIF9fSU8gdWludDMyX3QgIEJDQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCaXQgY291bnRlciBjb21wYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTFbMzldOw0KKyAgX19JTyB1aW50MzJfdCAgREFCWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IERldmljZSBhZGRyZXNzIGJhc2Ugc2VnbWVudCAwICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgREFQWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IERldmljZSBhZGRyZXNzIHByZWZpeCAwICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgREFDTkY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERldmljZSBhZGRyZXNzIG1hdGNoIGNvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUhSTUFUQ0hDT05GOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlYXJjaCBQYXR0ZXJuIENvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUhSTUFUQ0hNQVM7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBhdHRlcm4gbWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMjsNCisgIF9fSU8gdWludDMyX3QgIE1PREVDTkYwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSYWRpbyBtb2RlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTNbM107DQorICBfX0lPIHVpbnQzMl90ICBTRkQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSUVFRSA4MDIuMTUuNCBTdGFydCBvZiBGcmFtZSBEZWxpbWl0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFRENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSUVFRSA4MDIuMTUuNCBFbmVyZ3kgRGV0ZWN0IExvb3AgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFRFNBTVBMRTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSUVFRSA4MDIuMTUuNCBFbmVyZ3kgRGV0ZWN0IExldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDQ0FDVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSUVFRSA4MDIuMTUuNCBDbGVhciBDaGFubmVsIEFzc2Vzc21lbnQgQ29udHJvbCAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE0WzYxMV07DQorICBfX0lPIHVpbnQzMl90ICBQT1dFUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGVyaXBoZXJhbCBwb3dlciBjb250cm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfUkFESU9fVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgVUFSVEUgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFVBUlQgd2l0aCBFYXN5RE1BIDAgKFVBUlRFKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJURSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUUlg7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBVQVJUIHJlY2VpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1BSWDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIFVBUlQgcmVjZWl2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUVFg7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBVQVJUIHRyYW5zbWl0dGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1BUWDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIFVBUlQgdHJhbnNtaXR0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs3XTsNCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0ZMVVNIUlg7ICAgICAgICAgICAgICAgICAgICAgLyohPCBGbHVzaCBSWCBGSUZPIGludG8gUlggYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs1Ml07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ1RTOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1RTIGlzIGFjdGl2YXRlZCAoc2V0IGxvdykuIENsZWFyIFRvIFNlbmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfTkNUUzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1RTIGlzIGRlYWN0aXZhdGVkIChzZXQgaGlnaCkuIE5vdCBDbGVhciBUbyBTZW5kLiAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUlhEUkRZOyAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSByZWNlaXZlZCBpbiBSWEQgKGJ1dCBwb3RlbnRpYWxseSBub3QgeWV0IHRyYW5zZmVycmVkIHRvDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSBSQU0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDI7DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5EUlg7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBidWZmZXIgaXMgZmlsbGVkIHVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbMl07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVFhEUkRZOyAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSBzZW50IGZyb20gVFhEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5EVFg7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgTGFzdCBUWCBieXRlIHRyYW5zbWl0dGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRVJST1I7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXJyb3IgZGV0ZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbN107DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUlhUTzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZXIgdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDU7DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUlhTVEFSVEVEOyAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCByZWNlaXZlciBoYXMgc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVFhTVEFSVEVEOyAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCB0cmFuc21pdHRlciBoYXMgc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDY7DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVFhTVE9QUEVEOyAgICAgICAgICAgICAgICAgIC8qITwgVHJhbnNtaXR0ZXIgc3RvcHBlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbNDFdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ4WzYzXTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOVs5M107DQorICBfX0lPIHVpbnQzMl90ICBFUlJPUlNSQzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXJyb3Igc291cmNlIE5vdGUgOiB0aGlzIHJlZ2lzdGVyIGlzIHJlYWQgLyB3cml0ZSBvbmUgdG8gY2xlYXIuICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEwWzMxXTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgVUFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTE7DQorICBVQVJURV9QU0VMX1R5cGUgUFNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEyWzNdOw0KKyAgX19JTyB1aW50MzJfdCAgQkFVRFJBVEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJhdWQgcmF0ZS4gQWNjdXJhY3kgZGVwZW5kcyBvbiB0aGUgSEZDTEsgc291cmNlIHNlbGVjdGVkLiAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxM1szXTsNCisgIFVBUlRFX1JYRF9UeXBlIFJYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWEQgRWFzeURNQSBjaGFubmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTQ7DQorICBVQVJURV9UWERfVHlwZSBUWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFhEIEVhc3lETUEgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE1WzddOw0KKyAgX19JTyB1aW50MzJfdCAgQ09ORklHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyYXRpb24gb2YgcGFyaXR5IGFuZCBoYXJkd2FyZSBmbG93IGNvbnRyb2wgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1VBUlRFX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFVBUlQgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBVbml2ZXJzYWwgQXN5bmNocm9ub3VzIFJlY2VpdmVyL1RyYW5zbWl0dGVyIChVQVJUKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUUlg7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBVQVJUIHJlY2VpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1BSWDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIFVBUlQgcmVjZWl2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUVFg7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBVQVJUIHRyYW5zbWl0dGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1BUWDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIFVBUlQgdHJhbnNtaXR0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFszXTsNCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NVU1BFTkQ7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTdXNwZW5kIFVBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs1Nl07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ1RTOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1RTIGlzIGFjdGl2YXRlZCAoc2V0IGxvdykuIENsZWFyIFRvIFNlbmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfTkNUUzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1RTIGlzIGRlYWN0aXZhdGVkIChzZXQgaGlnaCkuIE5vdCBDbGVhciBUbyBTZW5kLiAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUlhEUkRZOyAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSByZWNlaXZlZCBpbiBSWEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbNF07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVFhEUkRZOyAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSBzZW50IGZyb20gVFhEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDM7DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRVJST1I7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXJyb3IgZGV0ZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbN107DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUlhUTzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZXIgdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbNDZdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzY0XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1s5M107DQorICBfX0lPIHVpbnQzMl90ICBFUlJPUlNSQzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXJyb3Igc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDhbMzFdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBVQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5Ow0KKyAgVUFSVF9QU0VMX1R5cGUgUFNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUlhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYRCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVFhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYRCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMDsNCisgIF9fSU8gdWludDMyX3QgIEJBVURSQVRFOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCYXVkIHJhdGUuIEFjY3VyYWN5IGRlcGVuZHMgb24gdGhlIEhGQ0xLIHNvdXJjZSBzZWxlY3RlZC4gICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTFbMTddOw0KKyAgX19JTyB1aW50MzJfdCAgQ09ORklHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyYXRpb24gb2YgcGFyaXR5IGFuZCBoYXJkd2FyZSBmbG93IGNvbnRyb2wgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1VBUlRfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgU1BJTSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSBNYXN0ZXIgd2l0aCBFYXN5RE1BIDAgKFNQSU0pDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSU0gU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzRdOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IFNQSSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgU1BJIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1VTUEVORDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN1c3BlbmQgU1BJIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfUkVTVU1FOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlc3VtZSBTUEkgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzU2XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVE9QUEVEOyAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkgdHJhbnNhY3Rpb24gaGFzIHN0b3BwZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1syXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkRSWDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmQgb2YgUlhEIGJ1ZmZlciByZWFjaGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmQgb2YgUlhEIGJ1ZmZlciBhbmQgVFhEIGJ1ZmZlciByZWFjaGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkRUWDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmQgb2YgVFhEIGJ1ZmZlciByZWFjaGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENlsxMF07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU1RBUlRFRDsgICAgICAgICAgICAgICAgICAgIC8qITwgVHJhbnNhY3Rpb24gc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbNDRdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ4WzY0XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOVs2MV07DQorICBfX0lPIHVpbnQzMl90ICBTVEFMTFNUQVQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhbGwgc3RhdHVzIGZvciBFYXN5RE1BIFJBTSBhY2Nlc3Nlcy4gVGhlIGZpZWxkcyBpbiB0aGlzIHJlZ2lzdGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIFNUQUxMIGJ5IGhhcmR3YXJlIHdoZW5ldmVyIGEgc3RhbGwgb2NjdXJyZXMgYW5kIGNhbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBjbGVhcmVkIChzZXQgdG8gTk9TVEFMTCkgYnkgdGhlIENQVS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMFs2M107DQorICBfX0lPIHVpbnQzMl90ICBFTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIFNQSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDExOw0KKyAgU1BJTV9QU0VMX1R5cGUgUFNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMlszXTsNCisgIF9fSU8gdWludDMyX3QgIEZSRVFVRU5DWTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkgZnJlcXVlbmN5LiBBY2N1cmFjeSBkZXBlbmRzIG9uIHRoZSBIRkNMSyBzb3VyY2Ugc2VsZWN0ZWQuICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTNbM107DQorICBTUElNX1JYRF9UeXBlIFJYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlhEIEVhc3lETUEgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTUElNX1RYRF9UeXBlIFRYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFhEIEVhc3lETUEgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDT05GSUc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJhdGlvbiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE0WzJdOw0KKyAgU1BJTV9JRlRJTUlOR19UeXBlIElGVElNSU5HOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxNVsyMl07DQorICBfX0lPIHVpbnQzMl90ICBPUkM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQnl0ZSB0cmFuc21pdHRlZCBhZnRlciBUWEQuTUFYQ05UIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjYXNlIHdoZW4gUlhELk1BWENOVCBpcyBncmVhdGVyIHRoYW4gVFhELk1BWENOVCAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1NQSU1fVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgU1BJUyAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFNQSSBTbGF2ZSAwIChTUElTKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElTIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs5XTsNCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0FDUVVJUkU7ICAgICAgICAgICAgICAgICAgICAgLyohPCBBY3F1aXJlIFNQSSBzZW1hcGhvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1JFTEVBU0U7ICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWxlYXNlIFNQSSBzZW1hcGhvcmUsIGVuYWJsaW5nIHRoZSBTUEkgc2xhdmUgdG8gYWNxdWlyZSBpdCAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs1NF07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5EOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR3JhbnRlZCB0cmFuc2FjdGlvbiBjb21wbGV0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMl07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5EUlg7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5kIG9mIFJYRCBidWZmZXIgcmVhY2hlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbNV07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQUNRVUlSRUQ7ICAgICAgICAgICAgICAgICAgIC8qITwgU2VtYXBob3JlIGFjcXVpcmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbNTNdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzY0XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENls2MV07DQorICBfX0kgIHVpbnQzMl90ICBTRU1TVEFUOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VtYXBob3JlIHN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbMTVdOw0KKyAgX19JTyB1aW50MzJfdCAgU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXR1cyBmcm9tIGxhc3QgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ4WzQ3XTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgU1BJIHNsYXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOTsNCisgIFNQSVNfUFNFTF9UeXBlIFBTRUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTBbN107DQorICBTUElTX1JYRF9UeXBlIFJYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDExOw0KKyAgU1BJU19UWERfVHlwZSBUWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMjsNCisgIF9fSU8gdWludDMyX3QgIENPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTM7DQorICBfX0lPIHVpbnQzMl90ICBERUY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVmYXVsdCBjaGFyYWN0ZXIuIENoYXJhY3RlciBjbG9ja2VkIG91dCBpbiBjYXNlIG9mIGFuIGlnbm9yZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTRbMjRdOw0KKyAgX19JTyB1aW50MzJfdCAgT1JDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE92ZXItcmVhZCBjaGFyYWN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1NQSVNfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgVFdJTSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIEkyQyBjb21wYXRpYmxlIFR3by1XaXJlIE1hc3RlciBJbnRlcmZhY2Ugd2l0aCBFYXN5RE1BIDAgKFRXSU0pDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRXSU0gU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlRSWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IFRXSSByZWNlaXZlIHNlcXVlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlRUWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IFRXSSB0cmFuc21pdCBzZXF1ZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzJdOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgVFdJIHRyYW5zYWN0aW9uLiBNdXN0IGJlIGlzc3VlZCB3aGlsZSB0aGUgVFdJIG1hc3RlciBpcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzdXNwZW5kZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1VTUEVORDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN1c3BlbmQgVFdJIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfUkVTVU1FOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlc3VtZSBUV0kgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzU2XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVE9QUEVEOyAgICAgICAgICAgICAgICAgICAgLyohPCBUV0kgc3RvcHBlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs3XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FUlJPUjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBUV0kgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVs4XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVVNQRU5ERUQ7ICAgICAgICAgICAgICAgICAgLyohPCBMYXN0IGJ5dGUgaGFzIGJlZW4gc2VudCBvdXQgYWZ0ZXIgdGhlIFNVU1BFTkQgdGFzayBoYXMgYmVlbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlZCwgVFdJIHRyYWZmaWMgaXMgbm93IHN1c3BlbmRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JYU1RBUlRFRDsgICAgICAgICAgICAgICAgICAvKiE8IFJlY2VpdmUgc2VxdWVuY2Ugc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1RYU1RBUlRFRDsgICAgICAgICAgICAgICAgICAvKiE8IFRyYW5zbWl0IHNlcXVlbmNlIHN0YXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzJdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0xBU1RSWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IEJ5dGUgYm91bmRhcnksIHN0YXJ0aW5nIHRvIHJlY2VpdmUgdGhlIGxhc3QgYnl0ZSAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0xBU1RUWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IEJ5dGUgYm91bmRhcnksIHN0YXJ0aW5nIHRvIHRyYW5zbWl0IHRoZSBsYXN0IGJ5dGUgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ3WzM5XTsNCisgIF9fSU8gdWludDMyX3QgIFNIT1JUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaG9ydGN1dCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOFs2M107DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDlbMTEwXTsNCisgIF9fSU8gdWludDMyX3QgIEVSUk9SU1JDOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFcnJvciBzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTBbMTRdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBUV0lNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMTsNCisgIFRXSU1fUFNFTF9UeXBlIFBTRUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTJbNV07DQorICBfX0lPIHVpbnQzMl90ICBGUkVRVUVOQ1k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFdJIGZyZXF1ZW5jeS4gQWNjdXJhY3kgZGVwZW5kcyBvbiB0aGUgSEZDTEsgc291cmNlIHNlbGVjdGVkLiAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEzWzNdOw0KKyAgVFdJTV9SWERfVHlwZSBSWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYRCBFYXN5RE1BIGNoYW5uZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgVFdJTV9UWERfVHlwZSBUWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYRCBFYXN5RE1BIGNoYW5uZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxNFsxM107DQorICBfX0lPIHVpbnQzMl90ICBBRERSRVNTOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQWRkcmVzcyB1c2VkIGluIHRoZSBUV0kgdHJhbnNmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfVFdJTV9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBUV0lTICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgSTJDIGNvbXBhdGlibGUgVHdvLVdpcmUgU2xhdmUgSW50ZXJmYWNlIHdpdGggRWFzeURNQSAwIChUV0lTKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUV0lTIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs1XTsNCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIFRXSSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTsNCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NVU1BFTkQ7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTdXNwZW5kIFRXSSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1JFU1VNRTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZXN1bWUgVFdJIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlszXTsNCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1BSRVBBUkVSWDsgICAgICAgICAgICAgICAgICAgLyohPCBQcmVwYXJlIHRoZSBUV0kgc2xhdmUgdG8gcmVzcG9uZCB0byBhIHdyaXRlIGNvbW1hbmQgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1BSRVBBUkVUWDsgICAgICAgICAgICAgICAgICAgLyohPCBQcmVwYXJlIHRoZSBUV0kgc2xhdmUgdG8gcmVzcG9uZCB0byBhIHJlYWQgY29tbWFuZCAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s1MV07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU1RPUFBFRDsgICAgICAgICAgICAgICAgICAgIC8qITwgVFdJIHN0b3BwZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbN107DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRVJST1I7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFdJIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbOV07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUlhTVEFSVEVEOyAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBzZXF1ZW5jZSBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVFhTVEFSVEVEOyAgICAgICAgICAgICAgICAgIC8qITwgVHJhbnNtaXQgc2VxdWVuY2Ugc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbNF07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfV1JJVEU7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgV3JpdGUgY29tbWFuZCByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUkVBRDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVhZCBjb21tYW5kIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbMzddOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ4WzYzXTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOVsxMTNdOw0KKyAgX19JTyB1aW50MzJfdCAgRVJST1JTUkM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVycm9yIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgTUFUQ0g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXR1cyByZWdpc3RlciBpbmRpY2F0aW5nIHdoaWNoIGFkZHJlc3MgaGFkIGEgbWF0Y2ggICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMFsxMF07DQorICBfX0lPIHVpbnQzMl90ICBFTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIFRXSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDExOw0KKyAgVFdJU19QU0VMX1R5cGUgUFNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMls5XTsNCisgIFRXSVNfUlhEX1R5cGUgUlhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWEQgRWFzeURNQSBjaGFubmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTM7DQorICBUV0lTX1RYRF9UeXBlIFRYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFhEIEVhc3lETUEgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE0WzE0XTsNCisgIF9fSU8gdWludDMyX3QgIEFERFJFU1NbMl07ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBUV0kgc2xhdmUgYWRkcmVzcyAwICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTU7DQorICBfX0lPIHVpbnQzMl90ICBDT05GSUc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJhdGlvbiByZWdpc3RlciBmb3IgdGhlIGFkZHJlc3MgbWF0Y2ggbWVjaGFuaXNtICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE2WzEwXTsNCisgIF9fSU8gdWludDMyX3QgIE9SQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPdmVyLXJlYWQgY2hhcmFjdGVyLiBDaGFyYWN0ZXIgc2VudCBvdXQgaW4gY2FzZSBvZiBhbiBvdmVyLXJlYWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdHJhbnNtaXQgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9UV0lTX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBTUEkgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMCAoU1BJKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs2Nl07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUkVBRFk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFhEIGJ5dGUgc2VudCBhbmQgUlhEIGJ5dGUgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMTI2XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsxMjVdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBTUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzOw0KKyAgU1BJX1BTRUxfVHlwZSBQU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0Ow0KKyAgX19JICB1aW50MzJfdCAgUlhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYRCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVFhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYRCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1Ow0KKyAgX19JTyB1aW50MzJfdCAgRlJFUVVFTkNZOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBmcmVxdWVuY3kuIEFjY3VyYWN5IGRlcGVuZHMgb24gdGhlIEhGQ0xLIHNvdXJjZSBzZWxlY3RlZC4gICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzExXTsNCisgIF9fSU8gdWludDMyX3QgIENPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9TUElfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIFRXSSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIEkyQyBjb21wYXRpYmxlIFR3by1XaXJlIEludGVyZmFjZSAwIChUV0kpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRXSSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlRSWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IFRXSSByZWNlaXZlIHNlcXVlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlRUWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IFRXSSB0cmFuc21pdCBzZXF1ZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzJdOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgVFdJIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1VTUEVORDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN1c3BlbmQgVFdJIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfUkVTVU1FOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlc3VtZSBUV0kgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzU2XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVE9QUEVEOyAgICAgICAgICAgICAgICAgICAgLyohPCBUV0kgc3RvcHBlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SWERSRUFEWTsgICAgICAgICAgICAgICAgICAgLyohPCBUV0kgUlhEIGJ5dGUgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs0XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19UWERTRU5UOyAgICAgICAgICAgICAgICAgICAgLyohPCBUV0kgVFhEIGJ5dGUgc2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FUlJPUjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBUV0kgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENls0XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19CQjsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUV0kgYnl0ZSBib3VuZGFyeSwgZ2VuZXJhdGVkIGJlZm9yZSBlYWNoIGJ5dGUgdGhhdCBpcyBzZW50IG9yDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbM107DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU1VTUEVOREVEOyAgICAgICAgICAgICAgICAgIC8qITwgVFdJIGVudGVyZWQgdGhlIHN1c3BlbmRlZCBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDhbNDVdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5WzY0XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTBbMTEwXTsNCisgIF9fSU8gdWludDMyX3QgIEVSUk9SU1JDOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFcnJvciBzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTFbMTRdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBUV0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMjsNCisgIFRXSV9QU0VMX1R5cGUgUFNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTNbMl07DQorICBfX0kgIHVpbnQzMl90ICBSWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlhEIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBUWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFhEIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE0Ow0KKyAgX19JTyB1aW50MzJfdCAgRlJFUVVFTkNZOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRXSSBmcmVxdWVuY3kuIEFjY3VyYWN5IGRlcGVuZHMgb24gdGhlIEhGQ0xLIHNvdXJjZSBzZWxlY3RlZC4gICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxNVsyNF07DQorICBfX0lPIHVpbnQzMl90ICBBRERSRVNTOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQWRkcmVzcyB1c2VkIGluIHRoZSBUV0kgdHJhbnNmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfVFdJX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIE5GQ1QgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBORkMtQSBjb21wYXRpYmxlIHJhZGlvIChORkNUKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBORkNUIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0FDVElWQVRFOyAgICAgICAgICAgICAgICAgICAgLyohPCBBY3RpdmF0ZSBORkNUIHBlcmlwaGVyYWwgZm9yIGluY29taW5nIGFuZCBvdXRnb2luZyBmcmFtZXMsIGNoYW5nZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlIHRvIGFjdGl2YXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfRElTQUJMRTsgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgTkZDVCBwZXJpcGhlcmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU0VOU0U7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBORkMgc2Vuc2UgZmllbGQgbW9kZSwgY2hhbmdlIHN0YXRlIHRvIHNlbnNlIG1vZGUgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlRUWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IHRyYW5zbWlzc2lvbiBvZiBhbiBvdXRnb2luZyBmcmFtZSwgY2hhbmdlIHN0YXRlIHRvIHRyYW5zbWl0ICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzNdOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfRU5BQkxFUlhEQVRBOyAgICAgICAgICAgICAgICAvKiE8IEluaXRpYWxpemVzIHRoZSBFYXN5RE1BIGZvciByZWNlaXZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfR09JRExFOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZvcmNlIHN0YXRlIG1hY2hpbmUgdG8gSURMRSBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfR09TTEVFUDsgICAgICAgICAgICAgICAgICAgICAvKiE8IEZvcmNlIHN0YXRlIG1hY2hpbmUgdG8gU0xFRVBfQSBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzUzXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SRUFEWTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgTkZDVCBwZXJpcGhlcmFsIGlzIHJlYWR5IHRvIHJlY2VpdmUgYW5kIHNlbmQgZnJhbWVzICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19GSUVMRERFVEVDVEVEOyAgICAgICAgICAgICAgLyohPCBSZW1vdGUgTkZDIGZpZWxkIGRldGVjdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19GSUVMRExPU1Q7ICAgICAgICAgICAgICAgICAgLyohPCBSZW1vdGUgTkZDIGZpZWxkIGxvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19UWEZSQU1FU1RBUlQ7ICAgICAgICAgICAgICAgLyohPCBNYXJrcyB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHN5bWJvbCBvZiBhIHRyYW5zbWl0dGVkIGZyYW1lICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19UWEZSQU1FRU5EOyAgICAgICAgICAgICAgICAgLyohPCBNYXJrcyB0aGUgZW5kIG9mIHRoZSBsYXN0IHRyYW5zbWl0dGVkIG9uLWFpciBzeW1ib2wgb2YgYSBmcmFtZSAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SWEZSQU1FU1RBUlQ7ICAgICAgICAgICAgICAgLyohPCBNYXJrcyB0aGUgZW5kIG9mIHRoZSBmaXJzdCBzeW1ib2wgb2YgYSByZWNlaXZlZCBmcmFtZSAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SWEZSQU1FRU5EOyAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlZCBkYXRhIGhhcyBiZWVuIGNoZWNrZWQgKENSQywgcGFyaXR5KSBhbmQgdHJhbnNmZXJyZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBSQU0sIGFuZCBFYXN5RE1BIGhhcyBlbmRlZCBhY2Nlc3NpbmcgdGhlIFJYIGJ1ZmZlciAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FUlJPUjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBORkMgZXJyb3IgcmVwb3J0ZWQuIFRoZSBFUlJPUlNUQVRVUyByZWdpc3RlciBjb250YWlucyBkZXRhaWxzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHNvdXJjZSBvZiB0aGUgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbMl07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUlhFUlJPUjsgICAgICAgICAgICAgICAgICAgIC8qITwgTkZDIFJYIGZyYW1lIGVycm9yIHJlcG9ydGVkLiBUaGUgRlJBTUVTVEFUVVMuUlggcmVnaXN0ZXIgY29udGFpbnMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzIG9uIHRoZSBzb3VyY2Ugb2YgdGhlIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkRSWDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWCBidWZmZXIgKGFzIGRlZmluZWQgYnkgUEFDS0VUUFRSIGFuZCBNQVhMRU4pIGluIERhdGEgUkFNIGZ1bGwuICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkRUWDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBUcmFuc21pc3Npb24gb2YgZGF0YSBpbiBSQU0gaGFzIGVuZGVkLCBhbmQgRWFzeURNQSBoYXMgZW5kZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpbmcgdGhlIFRYIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19BVVRPQ09MUkVTU1RBUlRFRDsgICAgICAgICAgLyohPCBBdXRvIGNvbGxpc2lvbiByZXNvbHV0aW9uIHByb2Nlc3MgaGFzIHN0YXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVszXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19DT0xMSVNJT047ICAgICAgICAgICAgICAgICAgLyohPCBORkMgYXV0byBjb2xsaXNpb24gcmVzb2x1dGlvbiBlcnJvciByZXBvcnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TRUxFQ1RFRDsgICAgICAgICAgICAgICAgICAgLyohPCBORkMgYXV0byBjb2xsaXNpb24gcmVzb2x1dGlvbiBzdWNjZXNzZnVsbHkgY29tcGxldGVkICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVEFSVEVEOyAgICAgICAgICAgICAgICAgICAgLyohPCBFYXN5RE1BIGlzIHJlYWR5IHRvIHJlY2VpdmUgb3Igc2VuZCBmcmFtZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENls0M107DQorICBfX0lPIHVpbnQzMl90ICBTSE9SVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2hvcnRjdXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbNjNdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ4WzYyXTsNCisgIF9fSU8gdWludDMyX3QgIEVSUk9SU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBORkMgRXJyb3IgU3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOTsNCisgIE5GQ1RfRlJBTUVTVEFUVVNfVHlwZSBGUkFNRVNUQVRVUzsgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIE5GQ1RBR1NUQVRFOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOZmNUYWcgc3RhdGUgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTBbMTBdOw0KKyAgX19JICB1aW50MzJfdCAgRklFTERQUkVTRU5UOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IEluZGljYXRlcyB0aGUgcHJlc2VuY2Ugb3Igbm90IG9mIGEgdmFsaWQgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMVs0OV07DQorICBfX0lPIHVpbnQzMl90ICBGUkFNRURFTEFZTUlOOyAgICAgICAgICAgICAgICAgICAgIC8qITwgTWluaW11bSBmcmFtZSBkZWxheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBGUkFNRURFTEFZTUFYOyAgICAgICAgICAgICAgICAgICAgIC8qITwgTWF4aW11bSBmcmFtZSBkZWxheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBGUkFNRURFTEFZTU9ERTsgICAgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJhdGlvbiByZWdpc3RlciBmb3IgdGhlIEZyYW1lIERlbGF5IFRpbWVyICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBQQUNLRVRQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGFja2V0IHBvaW50ZXIgZm9yIFRYRCBhbmQgUlhEIGRhdGEgc3RvcmFnZSBpbiBEYXRhIFJBTSAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNQVhMRU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2l6ZSBvZiB0aGUgUkFNIGJ1ZmZlciBhbGxvY2F0ZWQgdG8gVFhEIGFuZCBSWEQgZGF0YSBzdG9yYWdlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBORkNUX1RYRF9UeXBlIFRYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBORkNUX1JYRF9UeXBlIFJYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEyWzI2XTsNCisgIF9fSU8gdWludDMyX3QgIE5GQ0lEMV9MQVNUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBMYXN0IE5GQ0lEMSBwYXJ0ICg0LCA3IG9yIDEwIGJ5dGVzIElEKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE5GQ0lEMV8yTkRfTEFTVDsgICAgICAgICAgICAgICAgICAgLyohPCBTZWNvbmQgbGFzdCBORkNJRDEgcGFydCAoNyBvciAxMCBieXRlcyBJRCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE5GQ0lEMV8zUkRfTEFTVDsgICAgICAgICAgICAgICAgICAgLyohPCBUaGlyZCBsYXN0IE5GQ0lEMSBwYXJ0ICgxMCBieXRlcyBJRCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEFVVE9DT0xSRVNDT05GSUc7ICAgICAgICAgICAgICAgICAgLyohPCBDb250cm9scyB0aGUgYXV0byBjb2xsaXNpb24gcmVzb2x1dGlvbiBmdW5jdGlvbi4gVGhpcyBzZXR0aW5nDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgTkZDVCBwZXJpcGhlcmFsIGlzIGVuYWJsZWQuICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBTRU5TUkVTOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTkZDLUEgU0VOU19SRVMgYXV0by1yZXNwb25zZSBzZXR0aW5ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBTRUxSRVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTkZDLUEgU0VMX1JFUyBhdXRvLXJlc3BvbnNlIHNldHRpbmdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfTkZDVF9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgIEdQSU9URSAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgR1BJTyBUYXNrcyBhbmQgRXZlbnRzIChHUElPVEUpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9URSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfT1VUWzhdOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFRhc2sgZm9yIHdyaXRpbmcgdG8gcGluIHNwZWNpZmllZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIENPTkZJR1swXS5QU0VMLiBBY3Rpb24gb24gcGluIGlzIGNvbmZpZ3VyZWQgaW4gQ09ORklHWzBdLlBPTEFSSVRZLiAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzRdOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU0VUWzhdOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFRhc2sgZm9yIHdyaXRpbmcgdG8gcGluIHNwZWNpZmllZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIENPTkZJR1swXS5QU0VMLiBBY3Rpb24gb24gcGluIGlzIHRvIHNldCBpdCBoaWdoLiAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzRdOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfQ0xSWzhdOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFRhc2sgZm9yIHdyaXRpbmcgdG8gcGluIHNwZWNpZmllZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIENPTkZJR1swXS5QU0VMLiBBY3Rpb24gb24gcGluIGlzIHRvIHNldCBpdCBsb3cuICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzMyXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19JTls4XTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBFdmVudCBnZW5lcmF0ZWQgZnJvbSBwaW4gc3BlY2lmaWVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQ09ORklHWzBdLlBTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbMjNdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1BPUlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEV2ZW50IGdlbmVyYXRlZCBmcm9tIG11bHRpcGxlIGlucHV0IEdQSU8gcGlucyB3aXRoIFNFTlNFIG1lY2hhbmlzbQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0Wzk3XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVsxMjldOw0KKyAgX19JTyB1aW50MzJfdCAgQ09ORklHWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IENvbmZpZ3VyYXRpb24gZm9yIE9VVFtuXSwgU0VUW25dDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIENMUltuXSB0YXNrcyBhbmQgSU5bbl0gZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfR1BJT1RFX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFNBQURDICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0ZXIgKFNBQURDKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQUFEQyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCB0aGUgQURDIGFuZCBwcmVwYXJlIHRoZSByZXN1bHQgYnVmZmVyIGluIFJBTSAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NBTVBMRTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBUYWtlIG9uZSBBREMgc2FtcGxlLCBpZiBzY2FuIGlzIGVuYWJsZWQgYWxsIGNoYW5uZWxzIGFyZSBzYW1wbGVkICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIHRoZSBBREMgYW5kIHRlcm1pbmF0ZSBhbnkgb24tZ29pbmcgY29udmVyc2lvbiAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NBTElCUkFURU9GRlNFVDsgICAgICAgICAgICAgLyohPCBTdGFydHMgb2Zmc2V0IGF1dG8tY2FsaWJyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs2MF07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU1RBUlRFRDsgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIEFEQyBoYXMgc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5EOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIEFEQyBoYXMgZmlsbGVkIHVwIHRoZSBSZXN1bHQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRE9ORTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQSBjb252ZXJzaW9uIHRhc2sgaGFzIGJlZW4gY29tcGxldGVkLiBEZXBlbmRpbmcgb24gdGhlIG1vZGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgY29udmVyc2lvbnMgbWlnaHQgYmUgbmVlZGVkIGZvciBhIHJlc3VsdCB0byBiZSB0cmFuc2ZlcnJlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBSQU0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JFU1VMVERPTkU7ICAgICAgICAgICAgICAgICAvKiE8IEEgcmVzdWx0IGlzIHJlYWR5IHRvIGdldCB0cmFuc2ZlcnJlZCB0byBSQU0uICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0NBTElCUkFURURPTkU7ICAgICAgICAgICAgICAvKiE8IENhbGlicmF0aW9uIGlzIGNvbXBsZXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NUT1BQRUQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSBBREMgaGFzIHN0b3BwZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgU0FBRENfRVZFTlRTX0NIX1R5cGUgRVZFTlRTX0NIWzhdOyAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzEwNl07DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbNjFdOw0KKyAgX19JICB1aW50MzJfdCAgU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzYzXTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBBREMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFszXTsNCisgIFNBQURDX0NIX1R5cGUgQ0hbOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVsyNF07DQorICBfX0lPIHVpbnQzMl90ICBSRVNPTFVUSU9OOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVzb2x1dGlvbiBjb25maWd1cmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBPVkVSU0FNUExFOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT3ZlcnNhbXBsaW5nIGNvbmZpZ3VyYXRpb24uIE9WRVJTQU1QTEUgc2hvdWxkIG5vdCBiZSBjb21iaW5lZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggU0NBTi4gVGhlIFJFU09MVVRJT04gaXMgYXBwbGllZCBiZWZvcmUgYXZlcmFnaW5nLCB0aHVzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBoaWdoIE9WRVJTQU1QTEUgYSBoaWdoZXIgUkVTT0xVVElPTiBzaG91bGQgYmUgdXNlZC4gICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBTQU1QTEVSQVRFOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29udHJvbHMgbm9ybWFsIG9yIGNvbnRpbnVvdXMgc2FtcGxlIHJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbMTJdOw0KKyAgU0FBRENfUkVTVUxUX1R5cGUgUkVTVUxUOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJFU1VMVCBFYXN5RE1BIGNoYW5uZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1NBQURDX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFRJTUVSICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBUaW1lci9Db3VudGVyIDAgKFRJTUVSKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBUaW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIFRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NPVU5UOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJbmNyZW1lbnQgVGltZXIgKENvdW50ZXIgbW9kZSBvbmx5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NMRUFSOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDbGVhciB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NIVVRET1dOOyAgICAgICAgICAgICAgICAgICAgLyohPCBEZXByZWNhdGVkIHJlZ2lzdGVyIC0gU2h1dCBkb3duIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFsxMV07DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19DQVBUVVJFWzZdOyAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogQ2FwdHVyZSBUaW1lciB2YWx1ZSB0byBDQ1swXSByZWdpc3RlciAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbNThdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0NPTVBBUkVbNl07ICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IENvbXBhcmUgZXZlbnQgb24gQ0NbMF0gbWF0Y2ggICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzQyXTsNCisgIF9fSU8gdWludDMyX3QgIFNIT1JUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaG9ydGN1dCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s2NF07DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbNjFdOw0KKyAgX19JICB1aW50MzJfdCAgU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRpbWVyIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzY0XTsNCisgIF9fSU8gdWludDMyX3QgIE1PREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaW1lciBtb2RlIHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEJJVE1PREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmUgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgYnkgdGhlIFRJTUVSICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENjsNCisgIF9fSU8gdWludDMyX3QgIFBSRVNDQUxFUjsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaW1lciBwcmVzY2FsZXIgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1sxMV07DQorICBfX0lPIHVpbnQzMl90ICBDQ1s2XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogQ2FwdHVyZS9Db21wYXJlIHJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfVElNRVJfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIFJUQyAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFJlYWwgdGltZSBjb3VudGVyIDAgKFJUQykNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgUlRDIENPVU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVE9QOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCBSVEMgQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19DTEVBUjsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2xlYXIgUlRDIENPVU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19UUklHT1ZSRkxXOyAgICAgICAgICAgICAgICAgIC8qITwgU2V0IENPVU5URVIgdG8gMHhGRkZGRjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNjBdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1RJQ0s7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEV2ZW50IG9uIENPVU5URVIgaW5jcmVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX09WUkZMVzsgICAgICAgICAgICAgICAgICAgICAvKiE8IEV2ZW50IG9uIENPVU5URVIgb3ZlcmZsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzE0XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19DT01QQVJFWzRdOyAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBDb21wYXJlIGV2ZW50IG9uIENDWzBdIG1hdGNoICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsxMDldOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzEzXTsNCisgIF9fSU8gdWludDMyX3QgIEVWVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBldmVudCByb3V0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgZXZlbnQgcm91dGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGV2ZW50IHJvdXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFsxMTBdOw0KKyAgX19JICB1aW50MzJfdCAgQ09VTlRFUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEN1cnJlbnQgQ09VTlRFUiB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUFJFU0NBTEVSOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IDEyIGJpdCBwcmVzY2FsZXIgZm9yIENPVU5URVIgZnJlcXVlbmN5ICgzMjc2OC8oUFJFU0NBTEVSKzEpKS5NdXN0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgd3JpdHRlbiB3aGVuIFJUQyBpcyBzdG9wcGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbMTNdOw0KKyAgX19JTyB1aW50MzJfdCAgQ0NbNF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IENvbXBhcmUgcmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1JUQ19UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBURU1QICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgVGVtcGVyYXR1cmUgU2Vuc29yIChURU1QKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBURU1QIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs2Ml07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfREFUQVJEWTsgICAgICAgICAgICAgICAgICAgIC8qITwgVGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQgY29tcGxldGUsIGRhdGEgcmVhZHkgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMTI4XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsxMjddOw0KKyAgX19JICBpbnQzMl90ICAgVEVNUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRlbXBlcmF0dXJlIGluIGRlZ0MgKDAuMjVkZWcgc3RlcHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzVdOw0KKyAgX19JTyB1aW50MzJfdCAgQTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIG9mIDFzdCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIG9mIDJuZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIG9mIDNyZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQTM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIG9mIDR0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIG9mIDV0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsb3BlIG9mIDZ0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzJdOw0KKyAgX19JTyB1aW50MzJfdCAgQjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IG9mIDFzdCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IG9mIDJuZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IG9mIDNyZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IG9mIDR0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IG9mIDV0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQjU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHktaW50ZXJjZXB0IG9mIDZ0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzJdOw0KKyAgX19JTyB1aW50MzJfdCAgVDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuZCBwb2ludCBvZiAxc3QgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuZCBwb2ludCBvZiAybmQgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuZCBwb2ludCBvZiAzcmQgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuZCBwb2ludCBvZiA0dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuZCBwb2ludCBvZiA1dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1RFTVBfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIFJORyAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChSTkcpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJORyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRhc2sgc3RhcnRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRhc2sgc3RvcHBpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzYyXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19WQUxSRFk7ICAgICAgICAgICAgICAgICAgICAgLyohPCBFdmVudCBiZWluZyBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IG5ldyByYW5kb20gbnVtYmVyIHdyaXR0ZW4gdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgVkFMVUUgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs2M107DQorICBfX0lPIHVpbnQzMl90ICBTSE9SVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2hvcnRjdXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbNjRdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzEyNl07DQorICBfX0lPIHVpbnQzMl90ICBDT05GSUc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJhdGlvbiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBWQUxVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT3V0cHV0IHJhbmRvbSBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfUk5HX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBFQ0IgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBBRVMgRUNCIE1vZGUgRW5jcnlwdGlvbiAoRUNCKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0IgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJURUNCOyAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBFQ0IgYmxvY2sgZW5jcnlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1BFQ0I7ICAgICAgICAgICAgICAgICAgICAgLyohPCBBYm9ydCBhIHBvc3NpYmxlIGV4ZWN1dGluZyBFQ0Igb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs2Ml07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5ERUNCOyAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNCIGJsb2NrIGVuY3J5cHQgY29tcGxldGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRVJST1JFQ0I7ICAgICAgICAgICAgICAgICAgIC8qITwgRUNCIGJsb2NrIGVuY3J5cHQgYWJvcnRlZCBiZWNhdXNlIG9mIGEgU1RPUEVDQiB0YXNrIG9yIGR1ZSB0bw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzEyN107DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMTI2XTsNCisgIF9fSU8gdWludDMyX3QgIEVDQkRBVEFQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0IgYmxvY2sgZW5jcnlwdCBtZW1vcnkgcG9pbnRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9FQ0JfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIENDTSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIEFFUyBDQ00gTW9kZSBFbmNyeXB0aW9uIChDQ00pDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENDTSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfS1NHRU47ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IGdlbmVyYXRpb24gb2Yga2V5LXN0cmVhbS4gVGhpcyBvcGVyYXRpb24gd2lsbCBzdG9wIGJ5DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRzZWxmIHdoZW4gY29tcGxldGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19DUllQVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLiBUaGlzIG9wZXJhdGlvbiB3aWxsIHN0b3AgYnkgaXRzZWxmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBjb21wbGV0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVE9QOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19SQVRFT1ZFUlJJREU7ICAgICAgICAgICAgICAgIC8qITwgT3ZlcnJpZGUgREFUQVJBVEUgc2V0dGluZyBpbiBNT0RFIHJlZ2lzdGVyIHdpdGggdGhlIGNvbnRlbnRzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIFJBVEVPVkVSUklERSByZWdpc3RlciBmb3IgYW55IG9uZ29pbmcgZW5jcnlwdGlvbi9kZWNyeXB0aW9uICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNjBdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VOREtTR0VOOyAgICAgICAgICAgICAgICAgICAvKiE8IEtleS1zdHJlYW0gZ2VuZXJhdGlvbiBjb21wbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VORENSWVBUOyAgICAgICAgICAgICAgICAgICAvKiE8IEVuY3J5cHQvZGVjcnlwdCBjb21wbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VSUk9SOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlcHJlY2F0ZWQgcmVnaXN0ZXIgLSBDQ00gZXJyb3IgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzYxXTsNCisgIF9fSU8gdWludDMyX3QgIFNIT1JUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaG9ydGN1dCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMls2NF07DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbNjFdOw0KKyAgX19JICB1aW50MzJfdCAgTUlDU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1JQyBjaGVjayByZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzYzXTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1PREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPcGVyYXRpb24gbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENORlBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQb2ludGVyIHRvIGRhdGEgc3RydWN0dXJlIGhvbGRpbmcgQUVTIGtleSBhbmQgTk9OQ0UgdmVjdG9yICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJbnB1dCBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE9VVFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPdXRwdXQgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNDUkFUQ0hQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQb2ludGVyIHRvIGRhdGEgYXJlYSB1c2VkIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWFBBQ0tFVFNJWkU7ICAgICAgICAgICAgICAgICAgICAgLyohPCBMZW5ndGggb2Yga2V5LXN0cmVhbSBnZW5lcmF0ZWQgd2hlbiBNT0RFLkxFTkdUSCA9IEV4dGVuZGVkLiAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJBVEVPVkVSUklERTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHJhdGUgb3ZlcnJpZGUgc2V0dGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9DQ01fVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIEFBUiAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIEFjY2VsZXJhdGVkIEFkZHJlc3MgUmVzb2x2ZXIgKEFBUikNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUFSIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgcmVzb2x2aW5nIGFkZHJlc3NlcyBiYXNlZCBvbiBJUktzIHNwZWNpZmllZCBpbiB0aGUgSVJLDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDA7DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVE9QOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCByZXNvbHZpbmcgYWRkcmVzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbNjFdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VORDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFkZHJlc3MgcmVzb2x1dGlvbiBwcm9jZWR1cmUgY29tcGxldGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JFU09MVkVEOyAgICAgICAgICAgICAgICAgICAvKiE8IEFkZHJlc3MgcmVzb2x2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX05PVFJFU09MVkVEOyAgICAgICAgICAgICAgICAvKiE8IEFkZHJlc3Mgbm90IHJlc29sdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzEyNl07DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbNjFdOw0KKyAgX19JICB1aW50MzJfdCAgU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlc29sdXRpb24gc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzYzXTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgQUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE5JUks7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgSVJLcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElSS1BUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQb2ludGVyIHRvIElSSyBkYXRhIHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENTsNCisgIF9fSU8gdWludDMyX3QgIEFERFJQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQb2ludGVyIHRvIHRoZSByZXNvbHZhYmxlIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNDUkFUQ0hQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQb2ludGVyIHRvIGRhdGEgYXJlYSB1c2VkIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9BQVJfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIFdEVCAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFdhdGNoZG9nIFRpbWVyIChXRFQpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVCBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IHRoZSB3YXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzYzXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19USU1FT1VUOyAgICAgICAgICAgICAgICAgICAgLyohPCBXYXRjaGRvZyB0aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVsxMjhdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzYxXTsNCisgIF9fSSAgdWludDMyX3QgIFJVTlNUQVRVUzsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSdW4gc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFUVNUQVRVUzsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZXF1ZXN0IHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s2M107DQorICBfX0lPIHVpbnQzMl90ICBDUlY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ291bnRlciByZWxvYWQgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBSUkVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIHJlZ2lzdGVyIGZvciByZWxvYWQgcmVxdWVzdCByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDT05GSUc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJhdGlvbiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbNjBdOw0KKyAgX19PICB1aW50MzJfdCAgUlJbOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFJlbG9hZCByZXF1ZXN0IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1dEVF9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBRREVDICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgUXVhZHJhdHVyZSBEZWNvZGVyIChRREVDKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRREVDIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUYXNrIHN0YXJ0aW5nIHRoZSBxdWFkcmF0dXJlIGRlY29kZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUYXNrIHN0b3BwaW5nIHRoZSBxdWFkcmF0dXJlIGRlY29kZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1JFQURDTFJBQ0M7ICAgICAgICAgICAgICAgICAgLyohPCBSZWFkIGFuZCBjbGVhciBBQ0MgYW5kIEFDQ0RCTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1JEQ0xSQUNDOyAgICAgICAgICAgICAgICAgICAgLyohPCBSZWFkIGFuZCBjbGVhciBBQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1JEQ0xSREJMOyAgICAgICAgICAgICAgICAgICAgLyohPCBSZWFkIGFuZCBjbGVhciBBQ0NEQkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs1OV07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU0FNUExFUkRZOyAgICAgICAgICAgICAgICAgIC8qITwgRXZlbnQgYmVpbmcgZ2VuZXJhdGVkIGZvciBldmVyeSBuZXcgc2FtcGxlIHZhbHVlIHdyaXR0ZW4gdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgU0FNUExFIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SRVBPUlRSRFk7ICAgICAgICAgICAgICAgICAgLyohPCBOb24tbnVsbCByZXBvcnQgcmVhZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19BQ0NPRjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ0Mgb3IgQUNDREJMIHJlZ2lzdGVyIG92ZXJmbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19EQkxSRFk7ICAgICAgICAgICAgICAgICAgICAgLyohPCBEb3VibGUgZGlzcGxhY2VtZW50KHMpIGRldGVjdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVE9QUEVEOyAgICAgICAgICAgICAgICAgICAgLyohPCBRREVDIGhhcyBiZWVuIHN0b3BwZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs1OV07DQorICBfX0lPIHVpbnQzMl90ICBTSE9SVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2hvcnRjdXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbNjRdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzEyNV07DQorICBfX0lPIHVpbnQzMl90ICBFTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIHRoZSBxdWFkcmF0dXJlIGRlY29kZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBMRURQT0w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTEVEIG91dHB1dCBwaW4gcG9sYXJpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBTQU1QTEVQRVI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2FtcGxlIHBlcmlvZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIGludDMyX3QgICBTQU1QTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTW90aW9uIHNhbXBsZSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBSRVBPUlRQRVI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIHNhbXBsZXMgdG8gYmUgdGFrZW4gYmVmb3JlIFJFUE9SVFJEWSBhbmQgREJMUkRZIGV2ZW50cw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBnZW5lcmF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICBpbnQzMl90ICAgQUNDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlZ2lzdGVyIGFjY3VtdWxhdGluZyB0aGUgdmFsaWQgdHJhbnNpdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICBpbnQzMl90ICAgQUNDUkVBRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNuYXBzaG90IG9mIHRoZSBBQ0MgcmVnaXN0ZXIsIHVwZGF0ZWQgYnkgdGhlIFJFQURDTFJBQ0Mgb3IgUkRDTFJBQ0MNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFFERUNfUFNFTF9UeXBlIFBTRUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIERCRkVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW5wdXQgZGVib3VuY2UgZmlsdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs1XTsNCisgIF9fSU8gdWludDMyX3QgIExFRFBSRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaW1lIHBlcmlvZCB0aGUgTEVEIGlzIHN3aXRjaGVkIE9OIHByaW9yIHRvIHNhbXBsaW5nICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFDQ0RCTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWdpc3RlciBhY2N1bXVsYXRpbmcgdGhlIG51bWJlciBvZiBkZXRlY3RlZCBkb3VibGUgdHJhbnNpdGlvbnMgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFDQ0RCTFJFQUQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTbmFwc2hvdCBvZiB0aGUgQUNDREJMLCB1cGRhdGVkIGJ5IHRoZSBSRUFEQ0xSQUNDIG9yIFJEQ0xSREJMDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfUURFQ19UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBDT01QICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgQ29tcGFyYXRvciAoQ09NUCkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09NUCBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgY29tcGFyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVE9QOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCBjb21wYXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TQU1QTEU7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2FtcGxlIGNvbXBhcmF0b3IgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNjFdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JFQURZOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTVAgaXMgcmVhZHkgYW5kIG91dHB1dCBpcyB2YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0RPV047ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERvd253YXJkIGNyb3NzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1VQOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVwd2FyZCBjcm9zc2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0NST1NTOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IERvd253YXJkIG9yIHVwd2FyZCBjcm9zc2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzYwXTsNCisgIF9fSU8gdWludDMyX3QgIFNIT1JUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaG9ydGN1dCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMls2M107DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbNjFdOw0KKyAgX19JICB1aW50MzJfdCAgUkVTVUxUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbXBhcmUgcmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzYzXTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT01QIGVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFBTRUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJFRlNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWZlcmVuY2Ugc291cmNlIHNlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVYVFJFRlNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFeHRlcm5hbCByZWZlcmVuY2Ugc2VsZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVs4XTsNCisgIF9fSU8gdWludDMyX3QgIFRIOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaHJlc2hvbGQgY29uZmlndXJhdGlvbiBmb3IgaHlzdGVyZXNpcyB1bml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1PREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNb2RlIGNvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEhZU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb21wYXJhdG9yIGh5c3RlcmVzaXMgZW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElTT1VSQ0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDdXJyZW50IHNvdXJjZSBzZWxlY3Qgb24gYW5hbG9nIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9DT01QX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgTFBDT01QICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBMb3cgUG93ZXIgQ29tcGFyYXRvciAoTFBDT01QKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBMUENPTVAgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBjb21wYXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIGNvbXBhcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NBTVBMRTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTYW1wbGUgY29tcGFyYXRvciB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs2MV07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUkVBRFk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgTFBDT01QIGlzIHJlYWR5IGFuZCBvdXRwdXQgaXMgdmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRE9XTjsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRG93bndhcmQgY3Jvc3NpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVVA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVXB3YXJkIGNyb3NzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ1JPU1M7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgRG93bndhcmQgb3IgdXB3YXJkIGNyb3NzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbNjBdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzY0XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s2MV07DQorICBfX0kgIHVpbnQzMl90ICBSRVNVTFQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29tcGFyZSByZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbNjNdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBMUENPTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUFNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElucHV0IHBpbiBzZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUkVGU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlZmVyZW5jZSBzZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVhUUkVGU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEV4dGVybmFsIHJlZmVyZW5jZSBzZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzRdOw0KKyAgX19JTyB1aW50MzJfdCAgQU5BREVURUNUOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFuYWxvZyBkZXRlY3QgY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzVdOw0KKyAgX19JTyB1aW50MzJfdCAgSFlTVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbXBhcmF0b3IgaHlzdGVyZXNpcyBlbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0xQQ09NUF9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgU1dJICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgU29mdHdhcmUgaW50ZXJydXB0IDAgKFNXSSkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1dJIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBVTlVTRUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW51c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfU1dJX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBFR1UgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBFdmVudCBHZW5lcmF0b3IgVW5pdCAwIChFR1UpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVHVSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfVFJJR0dFUlsxNl07ICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFRyaWdnZXIgMCBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSSUdHRVJFRFswXSBldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzQ4XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19UUklHR0VSRURbMTZdOyAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBFdmVudCBudW1iZXIgMCBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbMF0gdGFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzExMl07DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfRUdVX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBQV00gICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIFVuaXQgMCAoUFdNKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQV00gU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMDsNCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wcyBQV00gcHVsc2UgZ2VuZXJhdGlvbiBvbiBhbGwgY2hhbm5lbHMgYXQgdGhlIGVuZCBvZiBjdXJyZW50DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdNIHBlcmlvZCwgYW5kIHN0b3BzIHNlcXVlbmNlIHBsYXliYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TRVFTVEFSVFsyXTsgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogTG9hZHMgdGhlIGZpcnN0IFBXTSB2YWx1ZSBvbiBhbGwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIGNoYW5uZWxzIGZyb20gc2VxdWVuY2UgMCwgYW5kIHN0YXJ0cyBwbGF5aW5nIHRoYXQgc2VxdWVuY2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIHJhdGUgZGVmaW5lZCBpbiBTRVFbMF1SRUZSRVNIIGFuZC9vciBERUNPREVSLk1PREUuIENhdXNlcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQV00gZ2VuZXJhdGlvbiB0byBzdGFydCBpdCB3YXMgbm90IHJ1bm5pbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfTkVYVFNURVA7ICAgICAgICAgICAgICAgICAgICAvKiE8IFN0ZXBzIGJ5IG9uZSB2YWx1ZSBpbiB0aGUgY3VycmVudCBzZXF1ZW5jZSBvbiBhbGwgZW5hYmxlZCBjaGFubmVscw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIERFQ09ERVIuTU9ERT1OZXh0U3RlcC4gRG9lcyBub3QgY2F1c2UgUFdNIGdlbmVyYXRpb24gdG8gc3RhcnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2FzIG5vdCBydW5uaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs2MF07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU1RPUFBFRDsgICAgICAgICAgICAgICAgICAgIC8qITwgUmVzcG9uc2UgdG8gU1RPUCB0YXNrLCBlbWl0dGVkIHdoZW4gUFdNIHB1bHNlcyBhcmUgbm8gbG9uZ2VyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU0VRU1RBUlRFRFsyXTsgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogRmlyc3QgUFdNIHBlcmlvZCBzdGFydGVkIG9uIHNlcXVlbmNlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU0VRRU5EWzJdOyAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogRW1pdHRlZCBhdCBlbmQgb2YgZXZlcnkgc2VxdWVuY2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB3aGVuIGxhc3QgdmFsdWUgZnJvbSBSQU0gaGFzIGJlZW4gYXBwbGllZCB0byB3YXZlIGNvdW50ZXIgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19QV01QRVJJT0RFTkQ7ICAgICAgICAgICAgICAgLyohPCBFbWl0dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBQV00gcGVyaW9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19MT09QU0RPTkU7ICAgICAgICAgICAgICAgICAgLyohPCBDb25jYXRlbmF0ZWQgc2VxdWVuY2VzIGhhdmUgYmVlbiBwbGF5ZWQgdGhlIGFtb3VudCBvZiB0aW1lcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgaW4gTE9PUC5DTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzU2XTsNCisgIF9fSU8gdWludDMyX3QgIFNIT1JUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaG9ydGN1dCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s2M107DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbMTI1XTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQV00gbW9kdWxlIGVuYWJsZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1PREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3RzIG9wZXJhdGluZyBtb2RlIG9mIHRoZSB3YXZlIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENPVU5URVJUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBWYWx1ZSB1cCB0byB3aGljaCB0aGUgcHVsc2UgZ2VuZXJhdG9yIGNvdW50ZXIgY291bnRzICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFBSRVNDQUxFUjsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmF0aW9uIGZvciBQV01fQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIERFQ09ERVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmF0aW9uIG9mIHRoZSBkZWNvZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIExPT1A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBbW91bnQgb2YgcGxheWJhY2sgb2YgYSBsb29wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVsyXTsNCisgIFBXTV9TRVFfVHlwZSBTRVFbMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFBXTV9QU0VMX1R5cGUgUFNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9QV01fVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIFBETSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFB1bHNlIERlbnNpdHkgTW9kdWxhdGlvbiAoRGlnaXRhbCBNaWNyb3Bob25lKSBJbnRlcmZhY2UgKFBETSkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnRzIGNvbnRpbnVvdXMgUERNIHRyYW5zZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVE9QOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcHMgUERNIHRyYW5zZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNjJdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NUQVJURUQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFBETSB0cmFuc2ZlciBoYXMgc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NUT1BQRUQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFBETSB0cmFuc2ZlciBoYXMgZmluaXNoZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VORDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSBQRE0gaGFzIHdyaXR0ZW4gdGhlIGxhc3Qgc2FtcGxlIHNwZWNpZmllZCBieSBTQU1QTEUuTUFYQ05UDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBsYXN0IHNhbXBsZSBhZnRlciBhIFNUT1AgdGFzayBoYXMgYmVlbiByZWNlaXZlZCkgdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSBSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVsxMjVdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzEyNV07DQorICBfX0lPIHVpbnQzMl90ICBFTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNIG1vZHVsZSBlbmFibGUgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBQRE1DTEtDVFJMOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNIGNsb2NrIGdlbmVyYXRvciBjb250cm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNT0RFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVmaW5lcyB0aGUgcm91dGluZyBvZiB0aGUgY29ubmVjdGVkIFBETSBtaWNyb3Bob25lcycgc2lnbmFscyAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbM107DQorICBfX0lPIHVpbnQzMl90ICBHQUlOTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTGVmdCBvdXRwdXQgZ2FpbiBhZGp1c3RtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBHQUlOUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmlnaHQgb3V0cHV0IGdhaW4gYWRqdXN0bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBSQVRJTzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VsZWN0cyB0aGUgcmF0aW8gYmV0d2VlbiBQRE1fQ0xLIGFuZCBvdXRwdXQgc2FtcGxlIHJhdGUuIENoYW5nZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBETUNMS0NUUkwgYWNjb3JkaW5nbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzddOw0KKyAgUERNX1BTRUxfVHlwZSBQU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzZdOw0KKyAgUERNX1NBTVBMRV9UeXBlIFNBTVBMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1BETV9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBOVk1DICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgTm9uIFZvbGF0aWxlIE1lbW9yeSBDb250cm9sbGVyIChOVk1DKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOVk1DIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFsyNTZdOw0KKyAgX19JICB1aW50MzJfdCAgUkVBRFk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlYWR5IGZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzY0XTsNCisgIF9fSU8gdWludDMyX3QgIENPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisNCisgIF9fSU8gdWludDMyX3QgIEVSQVNFUEFHRTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWdpc3RlciBmb3IgZXJhc2luZyBhIHBhZ2UgaW4gQ29kZSBhcmVhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVSQVNFQUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWdpc3RlciBmb3IgZXJhc2luZyBhbGwgbm9uLXZvbGF0aWxlIHVzZXIgbWVtb3J5ICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVSQVNFUENSMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXByZWNhdGVkIHJlZ2lzdGVyIC0gUmVnaXN0ZXIgZm9yIGVyYXNpbmcgYSBwYWdlIGluIENvZGUgYXJlYS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcXVpdmFsZW50IHRvIEVSQVNFUEFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVSQVNFVUlDUjsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWdpc3RlciBmb3IgZXJhc2luZyBVc2VyIEluZm9ybWF0aW9uIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsxMF07DQorICBfX0lPIHVpbnQzMl90ICBJQ0FDSEVDTkY7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSS1Db2RlIGNhY2hlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDM7DQorICBfX0lPIHVpbnQzMl90ICBJSElUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSS1Db2RlIGNhY2hlIGhpdCBjb3VudGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTUlTUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSS1Db2RlIGNhY2hlIG1pc3MgY291bnRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfTlZNQ19UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgQUNMICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgQWNjZXNzIGNvbnRyb2wgbGlzdHMgKEFDTCkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNMIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNDQ5XTsNCisgIF9fSU8gdWludDMyX3QgIERJU0FCTEVJTkRFQlVHOyAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGFsbCBBQ0wgcHJvdGVjdGlvbiBtZWNoYW5pc21zIGZvciByZWdpb25zIHdoaWxlIGluIGRlYnVnDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbNjJdOw0KKyAgQUNMX0FDTF9UeXBlIEFDTFs4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0FDTF9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgUFBJICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgUHJvZ3JhbW1hYmxlIFBlcmlwaGVyYWwgSW50ZXJjb25uZWN0IChQUEkpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBQSSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgUFBJX1RBU0tTX0NIR19UeXBlIFRBU0tTX0NIR1s2XTsgICAgICAgICAgICAgICAgICAvKiE8IENoYW5uZWwgZ3JvdXAgdGFza3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzMwOF07DQorICBfX0lPIHVpbnQzMl90ICBDSEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2hhbm5lbCBlbmFibGUgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDSEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2hhbm5lbCBlbmFibGUgc2V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDSEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2hhbm5lbCBlbmFibGUgY2xlYXIgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE7DQorICBQUElfQ0hfVHlwZSBDSFsyMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUFBJIENoYW5uZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMTQ4XTsNCisgIF9fSU8gdWludDMyX3QgIENIR1s2XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBDaGFubmVsIGdyb3VwIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s2Ml07DQorICBQUElfRk9SS19UeXBlIEZPUktbMzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRm9yayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfUFBJX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBNV1UgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBNZW1vcnkgV2F0Y2ggVW5pdCAoTVdVKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNV1UgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs2NF07DQorICBNV1VfRVZFTlRTX1JFR0lPTl9UeXBlIEVWRU5UU19SRUdJT05bNF07ICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMTZdOw0KKyAgTVdVX0VWRU5UU19QUkVHSU9OX1R5cGUgRVZFTlRTX1BSRUdJT05bMl07ICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzEwMF07DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbNV07DQorICBfX0lPIHVpbnQzMl90ICBOTUlFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBOTUlFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBOTUlFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbNTNdOw0KKyAgTVdVX1BFUlJFR0lPTl9UeXBlIFBFUlJFR0lPTlsyXTsgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzY0XTsNCisgIF9fSU8gdWludDMyX3QgIFJFR0lPTkVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUvZGlzYWJsZSByZWdpb25zIHdhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJFR0lPTkVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgcmVnaW9ucyB3YXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJFR0lPTkVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIHJlZ2lvbnMgd2F0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENls1N107DQorICBNV1VfUkVHSU9OX1R5cGUgUkVHSU9OWzRdOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbMzJdOw0KKyAgTVdVX1BSRUdJT05fVHlwZSBQUkVHSU9OWzJdOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX01XVV9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgSTJTICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgSW50ZXItSUMgU291bmQgKEkyUykNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnRzIGNvbnRpbnVvdXMgSTJTIHRyYW5zZmVyLiBBbHNvIHN0YXJ0cyBNQ0sgZ2VuZXJhdG9yIHdoZW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIGVuYWJsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wcyBJMlMgdHJhbnNmZXIuIEFsc28gc3RvcHMgTUNLIGdlbmVyYXRvci4gVHJpZ2dlcmluZyB0aGlzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayB3aWxsIGNhdXNlIHRoZSB7ZXZlbnQ6U1RPUFBFRH0gZXZlbnQgdG8gYmUgZ2VuZXJhdGVkLiAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNjNdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JYUFRSVVBEOyAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSBSWEQuUFRSIHJlZ2lzdGVyIGhhcyBiZWVuIGNvcGllZCB0byBpbnRlcm5hbCBkb3VibGUtYnVmZmVycy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBJMlMgbW9kdWxlIGlzIHN0YXJ0ZWQgYW5kIFJYIGlzIGVuYWJsZWQsIHRoaXMgZXZlbnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IFJYVFhELk1BWENOVCB3b3JkcyB0aGF0IGFyZSByZWNlaXZlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgU0RJTiBwaW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NUT1BQRUQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IEkyUyB0cmFuc2ZlciBzdG9wcGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzJdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1RYUFRSVVBEOyAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSBURFguUFRSIHJlZ2lzdGVyIGhhcyBiZWVuIGNvcGllZCB0byBpbnRlcm5hbCBkb3VibGUtYnVmZmVycy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBJMlMgbW9kdWxlIGlzIHN0YXJ0ZWQgYW5kIFRYIGlzIGVuYWJsZWQsIHRoaXMgZXZlbnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IFJYVFhELk1BWENOVCB3b3JkcyB0aGF0IGFyZSBzZW50DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBTRE9VVCBwaW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMTIyXTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1sxMjVdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBJMlMgbW9kdWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgSTJTX0NPTkZJR19UeXBlIENPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzNdOw0KKyAgSTJTX1JYRF9UeXBlIFJYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1Ow0KKyAgSTJTX1RYRF9UeXBlIFRYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzNdOw0KKyAgSTJTX1JYVFhEX1R5cGUgUlhUWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ3WzNdOw0KKyAgSTJTX1BTRUxfVHlwZSBQU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0kyU19UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgRlBVICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgRlBVIChGUFUpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQVSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgVU5VU0VEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVudXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0ZQVV9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBVU0JEICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgVW5pdmVyc2FsIFNlcmlhbCBCdXMgZGV2aWNlIChVU0JEKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMDsNCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJURVBJTls4XTsgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBDYXB0dXJlcyB0aGUgRVBJTlswXS5QVFIsIEVQSU5bMF0uTUFYQ05UDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIEVQSU5bMF0uQ09ORklHIHJlZ2lzdGVycyB2YWx1ZXMsIGFuZCBlbmFibGVzIGVuZHBvaW50IElODQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgdG8gcmVzcG9uZCB0byB0cmFmZmljIGZyb20gaG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVElTT0lOOyAgICAgICAgICAgICAgICAgIC8qITwgQ2FwdHVyZXMgdGhlIElTT0lOLlBUUiwgSVNPSU4uTUFYQ05UIGFuZCBJU09JTi5DT05GSUcgcmVnaXN0ZXJzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLCBhbmQgZW5hYmxlcyBzZW5kaW5nIGRhdGEgb24gaXNvIGVuZHBvaW50ICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVEVQT1VUWzhdOyAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogQ2FwdHVyZXMgdGhlIEVQT1VUWzBdLlBUUiwgRVBPVVRbMF0uTUFYQ05UDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIEVQT1VUWzBdLkNPTkZJRyByZWdpc3RlcnMgdmFsdWVzLCBhbmQgZW5hYmxlcyBlbmRwb2ludCAwDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJlc3BvbmQgdG8gdHJhZmZpYyBmcm9tIGhvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVElTT09VVDsgICAgICAgICAgICAgICAgIC8qITwgQ2FwdHVyZXMgdGhlIElTT09VVC5QVFIsIElTT09VVC5NQVhDTlQgYW5kIElTT09VVC5DT05GSUcgcmVnaXN0ZXJzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLCBhbmQgZW5hYmxlcyByZWNlaXZpbmcgb2YgZGF0YSBvbiBpc28gZW5kcG9pbnQgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19FUDBSQ1ZPVVQ7ICAgICAgICAgICAgICAgICAgIC8qITwgQWxsb3dzIE9VVCBkYXRhIHN0YWdlIG9uIGNvbnRyb2wgZW5kcG9pbnQgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19FUDBTVEFUVVM7ICAgICAgICAgICAgICAgICAgIC8qITwgQWxsb3dzIHN0YXR1cyBzdGFnZSBvbiBjb250cm9sIGVuZHBvaW50IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19FUDBTVEFMTDsgICAgICAgICAgICAgICAgICAgIC8qITwgU1RBTExzIGRhdGEgYW5kIHN0YXR1cyBzdGFnZSBvbiBjb250cm9sIGVuZHBvaW50IDAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19EUERNRFJJVkU7ICAgICAgICAgICAgICAgICAgIC8qITwgRm9yY2VzIEQrIGFuZCBELWxpbmVzIHRvIHRoZSBzdGF0ZSBkZWZpbmVkIGluIHRoZSBEUERNVkFMVUUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0RQRE1OT0RSSVZFOyAgICAgICAgICAgICAgICAgLyohPCBTdG9wcyBmb3JjaW5nIEQrIGFuZCBELSBsaW5lcyB0byBhbnkgc3RhdGUgKFVTQiBlbmdpbmUgdGFrZXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs0MF07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVVNCUkVTRVQ7ICAgICAgICAgICAgICAgICAgIC8qITwgU2lnbmFscyB0aGF0IGEgVVNCIHJlc2V0IGNvbmRpdGlvbiBoYXMgYmVlbiBkZXRlY3RlZCBvbiB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0IgbGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVEFSVEVEOyAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maXJtcyB0aGF0IHRoZSBFUElOW25dLlBUUiwgRVBJTltuXS5NQVhDTlQsIEVQSU5bbl0uQ09ORklHLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIEVQT1VUW25dLlBUUiwgRVBPVVRbbl0uTUFYQ05UIGFuZCBFUE9VVFtuXS5DT05GSUcgcmVnaXN0ZXJzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYmVlbiBjYXB0dXJlZCBvbiBhbGwgZW5kcG9pbnRzIHJlcG9ydGVkIGluIHRoZSBFUFNUQVRVUw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VOREVQSU5bOF07ICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFRoZSB3aG9sZSBFUElOWzBdIGJ1ZmZlciBoYXMgYmVlbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVkLiBUaGUgUkFNIGJ1ZmZlciBjYW4gYmUgYWNjZXNzZWQgc2FmZWx5IGJ5IHNvZnR3YXJlLiAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VQMERBVEFET05FOyAgICAgICAgICAgICAgICAvKiE8IEFuIGFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIGhhcyB0YWtlbiBwbGFjZSBvbiB0aGUgY29udHJvbA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VORElTT0lOOyAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB3aG9sZSBJU09JTiBidWZmZXIgaGFzIGJlZW4gY29uc3VtZWQuIFRoZSBSQU0gYnVmZmVyIGNhbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGFjY2Vzc2VkIHNhZmVseSBieSBzb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VOREVQT1VUWzhdOyAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFRoZSB3aG9sZSBFUE9VVFswXSBidWZmZXIgaGFzIGJlZW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lZC4gVGhlIFJBTSBidWZmZXIgY2FuIGJlIGFjY2Vzc2VkIHNhZmVseSBieSBzb2Z0d2FyZS4gICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkRJU09PVVQ7ICAgICAgICAgICAgICAgICAgLyohPCBUaGUgd2hvbGUgSVNPT1VUIGJ1ZmZlciBoYXMgYmVlbiBjb25zdW1lZC4gVGhlIFJBTSBidWZmZXIgY2FuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYWNjZXNzZWQgc2FmZWx5IGJ5IHNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU09GOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2lnbmFscyB0aGF0IGEgU09GIChzdGFydCBvZiBmcmFtZSkgY29uZGl0aW9uIGhhcyBiZWVuIGRldGVjdGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIFVTQiBsaW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVVNCRVZFTlQ7ICAgICAgICAgICAgICAgICAgIC8qITwgQW4gZXZlbnQgb3IgYW4gZXJyb3Igbm90IGNvdmVyZWQgYnkgc3BlY2lmaWMgZXZlbnRzIGhhcyBvY2N1cnJlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayBFVkVOVENBVVNFIHJlZ2lzdGVyIHRvIGZpbmQgdGhlIGNhdXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FUDBTRVRVUDsgICAgICAgICAgICAgICAgICAgLyohPCBBIHZhbGlkIFNFVFVQIHRva2VuIGhhcyBiZWVuIHJlY2VpdmVkIChhbmQgYWNrbm93bGVkZ2VkKSBvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb250cm9sIGVuZHBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VQREFUQTsgICAgICAgICAgICAgICAgICAgICAvKiE8IEEgZGF0YSB0cmFuc2ZlciBoYXMgb2NjdXJyZWQgb24gYSBkYXRhIGVuZHBvaW50LCBpbmRpY2F0ZWQgYnkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRVBEQVRBU1RBVFVTIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19BQ0NFU1NGQVVMVDsgICAgICAgICAgICAgICAgLyohPCBBY2Nlc3MgdG8gYW4gdW5hdmFpbGFibGUgVVNCIHJlZ2lzdGVyIGhhcyBiZWVuIGF0dGVtcHRlZCAoc29mdHdhcmUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBFYXN5RE1BKS4gVGhpcyBldmVudCBjYW4gZ2V0IGZpcmVkIGV2ZW4gd2hlbiBVU0JEIGlzIG5vdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkFCTEVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzM4XTsNCisgIF9fSU8gdWludDMyX3QgIFNIT1JUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaG9ydGN1dCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s2M107DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbNjFdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRDQVVTRTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERldGFpbHMgb24gZXZlbnQgdGhhdCBjYXVzZWQgdGhlIFVTQkVWRU5UIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQlVTU1RBVEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFByb3ZpZGVzIHRoZSBsb2dpYyBzdGF0ZSBvZiB0aGUgRCsgYW5kIEQtIGxpbmVzICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzZdOw0KKyAgVVNCRF9IQUxURURfVHlwZSBIQUxURUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2Ow0KKyAgX19JTyB1aW50MzJfdCAgRVBTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHdoaWNoIGVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgaGF2ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZW4gY2FwdHVyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVBEQVRBU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHdoaWNoIGVuZHBvaW50KHMpIGFuIGFja25vd2xlZGdlZCBkYXRhDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIgaGFzIG9jY3VycmVkIChFUERBVEEgZXZlbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBVU0JBRERSOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGV2aWNlIFVTQiBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbM107DQorICBfX0kgIHVpbnQzMl90ICBCTVJFUVVFU1RUWVBFOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU0VUVVAgZGF0YSwgYnl0ZSAwLCBibVJlcXVlc3RUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBCUkVRVUVTVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0VUVVAgZGF0YSwgYnl0ZSAxLCBiUmVxdWVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBXVkFMVUVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0VUVVAgZGF0YSwgYnl0ZSAyLCBMU0Igb2Ygd1ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBXVkFMVUVIOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0VUVVAgZGF0YSwgYnl0ZSAzLCBNU0Igb2Ygd1ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBXSU5ERVhMOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0VUVVAgZGF0YSwgYnl0ZSA0LCBMU0Igb2Ygd0luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBXSU5ERVhIOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0VUVVAgZGF0YSwgYnl0ZSA1LCBNU0Igb2Ygd0luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBXTEVOR1RITDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0VUVVAgZGF0YSwgYnl0ZSA2LCBMU0Igb2Ygd0xlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBXTEVOR1RISDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0VUVVAgZGF0YSwgYnl0ZSA3LCBNU0Igb2Ygd0xlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBVU0JEX1NJWkVfVHlwZSBTSVpFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDhbMTVdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBVU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVVNCUFVMTFVQOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbnRyb2wgb2YgdGhlIFVTQiBwdWxsLXVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRFBETVZBTFVFOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXRlIGF0IHdoaWNoIHRoZSBEUERNRFJJVkUgdGFzayB3aWxsIGZvcmNlIEQrIGFuZCBELS4gVGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFBETU5PRFJJVkUgdGFzayByZXZlcnRzIHRoZSBjb250cm9sIG9mIHRoZSBsaW5lcyB0byBNQUMgSVANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vIGZvcmNpbmcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIERUT0dHTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHRvZ2dsZSBjb250cm9sIGFuZCBzdGF0dXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVQSU5FTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmRwb2ludCBJTiBlbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVQT1VURU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmRwb2ludCBPVVQgZW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIEVQU1RBTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTVEFMTCBlbmRwb2ludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElTT1NQTElUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb250cm9scyB0aGUgc3BsaXQgb2YgSVNPIGJ1ZmZlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEZSQU1FQ05UUjsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzdGFydCBvZiBmcmFtZSBjb3VudGVyICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOVszXTsNCisgIF9fSU8gdWludDMyX3QgIElTT0lOQ09ORklHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb250cm9scyB0aGUgcmVzcG9uc2Ugb2YgdGhlIElTTyBJTiBlbmRwb2ludCB0byBhbiBJTiB0b2tlbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gbm8gZGF0YSBpcyByZWFkeSB0byBiZSBzZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMFs1MV07DQorICBVU0JEX0VQSU5fVHlwZSBFUElOWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBVU0JEX0lTT0lOX1R5cGUgSVNPSU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDExWzIxXTsNCisgIFVTQkRfRVBPVVRfVHlwZSBFUE9VVFs4XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFVTQkRfSVNPT1VUX1R5cGUgSVNPT1VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9VU0JEX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFFTUEkgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBFeHRlcm5hbCBmbGFzaCBpbnRlcmZhY2UgKFFTUEkpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUEkgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfQUNUSVZBVEU7ICAgICAgICAgICAgICAgICAgICAvKiE8IEFjdGl2YXRlIFFTUEkgaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfUkVBRFNUQVJUOyAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IHRyYW5zZmVyIGZyb20gZXh0ZXJuYWwgZmxhc2ggbWVtb3J5IHRvIGludGVybmFsIFJBTSAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfV1JJVEVTVEFSVDsgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IHRyYW5zZmVyIGZyb20gaW50ZXJuYWwgUkFNIHRvIGV4dGVybmFsIGZsYXNoIG1lbW9yeSAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfRVJBU0VTVEFSVDsgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IGV4dGVybmFsIGZsYXNoIG1lbW9yeSBlcmFzZSBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzYwXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SRUFEWTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJIHBlcmlwaGVyYWwgaXMgcmVhZHkuIFRoaXMgZXZlbnQgd2lsbCBiZSBnZW5lcmF0ZWQgYXMgYQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlIHRvIGFueSBRU1BJIHRhc2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzEyN107DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMTI1XTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgUVNQSSBwZXJpcGhlcmFsIGFuZCBhY3F1aXJlIHRoZSBwaW5zIHNlbGVjdGVkIGluIFBTRUxuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBRU1BJX1JFQURfVHlwZSBSRUFEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBRU1BJX1dSSVRFX1R5cGUgV1JJVEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBRU1BJX0VSQVNFX1R5cGUgRVJBU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBRU1BJX1BTRUxfVHlwZSBQU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBYSVBPRkZTRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQWRkcmVzcyBvZmZzZXQgaW50byB0aGUgZXh0ZXJuYWwgbWVtb3J5IGZvciBFeGVjdXRlIGluIFBsYWNlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJRkNPTkZJRzA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbNDZdOw0KKyAgX19JTyB1aW50MzJfdCAgSUZDT05GSUcxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEludGVyZmFjZSBjb25maWd1cmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXR1cyByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzNdOw0KKyAgX19JTyB1aW50MzJfdCAgRFBNRFVSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNldCB0aGUgZHVyYXRpb24gcmVxdWlyZWQgdG8gZW50ZXIvZXhpdCBkZWVwIHBvd2VyLWRvd24gbW9kZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEUE0pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzNdOw0KKyAgX19JTyB1aW50MzJfdCAgQUREUkNPTkY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEV4dGVuZGVkIGFkZHJlc3MgY29uZmlndXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzNdOw0KKyAgX19JTyB1aW50MzJfdCAgQ0lOU1RSQ09ORjsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEN1c3RvbSBpbnN0cnVjdGlvbiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ0lOU1RSREFUMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEN1c3RvbSBpbnN0cnVjdGlvbiBkYXRhIHJlZ2lzdGVyIDAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ0lOU1RSREFUMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEN1c3RvbSBpbnN0cnVjdGlvbiBkYXRhIHJlZ2lzdGVyIDEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSUZUSU1JTkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBpbnRlcmZhY2UgdGltaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1FTUElfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgR1BJTyAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIEdQSU8gUG9ydCAxIChHUElPKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFszMjFdOw0KKyAgX19JTyB1aW50MzJfdCAgT1VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdyaXRlIEdQSU8gcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgT1VUU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNldCBpbmRpdmlkdWFsIGJpdHMgaW4gR1BJTyBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgT1VUQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENsZWFyIGluZGl2aWR1YWwgYml0cyBpbiBHUElPIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgSU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlYWQgR1BJTyBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRElSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpcmVjdGlvbiBvZiBHUElPIHBpbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRElSU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERJUiBzZXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRElSQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERJUiBjbGVhciByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTEFUQ0g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IExhdGNoIHJlZ2lzdGVyIGluZGljYXRpbmcgd2hhdCBHUElPIHBpbnMgdGhhdCBoYXZlIG1ldCB0aGUgY3JpdGVyaWENCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgaW4gdGhlIFBJTl9DTkZbbl0uU0VOU0UgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIERFVEVDVE1PREU7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3QgYmV0d2VlbiBkZWZhdWx0IERFVEVDVCBzaWduYWwgYmVoYXZpb3VyIGFuZCBMREVURUNUIG1vZGUgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVsxMThdOw0KKyAgX19JTyB1aW50MzJfdCAgUElOX0NORlszMl07ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IENvbmZpZ3VyYXRpb24gb2YgR1BJTyBwaW5zICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0dQSU9fVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgQ1JZUFRPQ0VMTCAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIEFSTSBDcnlwdG9DZWxsIHJlZ2lzdGVyIGludGVyZmFjZSAoQ1JZUFRPQ0VMTCkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JZUFRPQ0VMTCBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbMzIwXTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb250cm9sIHBvd2VyIGFuZCBjbG9jayBmb3IgQVJNIENyeXB0b0NlbGwgc3Vic3lzdGVtICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9DUllQVE9DRUxMX1R5cGU7DQorDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEVuZCBvZiBzZWN0aW9uIHVzaW5nIGFub255bW91cyB1bmlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisjaWYgZGVmaW5lZChfX0NDX0FSTSkNCisgICNwcmFnbWEgcG9wDQorI2VsaWYgZGVmaW5lZChfX0lDQ0FSTV9fKQ0KKyAgLyogbGVhdmUgYW5vbnltb3VzIHVuaW9ucyBlbmFibGVkICovDQorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykNCisgIC8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLw0KKyNlbGlmIGRlZmluZWQoX19UTVM0NzBfXykNCisgIC8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLw0KKyNlbGlmIGRlZmluZWQoX19UQVNLSU5HX18pDQorICAjcHJhZ21hIHdhcm5pbmcgcmVzdG9yZQ0KKyNlbHNlDQorICAjd2FybmluZyBOb3Qgc3VwcG9ydGVkIGNvbXBpbGVyIHR5cGUNCisjZW5kaWYNCisNCisNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgIFBlcmlwaGVyYWwgbWVtb3J5IG1hcCAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisjZGVmaW5lIE5SRl9GSUNSX0JBU0UgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMFVMDQorI2RlZmluZSBOUkZfVUlDUl9CQVNFICAgICAgICAgICAgICAgICAgIDB4MTAwMDEwMDBVTA0KKyNkZWZpbmUgTlJGX1BPV0VSX0JBU0UgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwVUwNCisjZGVmaW5lIE5SRl9DTE9DS19CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMFVMDQorI2RlZmluZSBOUkZfUkFESU9fQkFTRSAgICAgICAgICAgICAgICAgIDB4NDAwMDEwMDBVTA0KKyNkZWZpbmUgTlJGX1VBUlRFMF9CQVNFICAgICAgICAgICAgICAgICAweDQwMDAyMDAwVUwNCisjZGVmaW5lIE5SRl9VQVJUMF9CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAwMjAwMFVMDQorI2RlZmluZSBOUkZfU1BJTTBfQkFTRSAgICAgICAgICAgICAgICAgIDB4NDAwMDMwMDBVTA0KKyNkZWZpbmUgTlJGX1NQSVMwX0JBU0UgICAgICAgICAgICAgICAgICAweDQwMDAzMDAwVUwNCisjZGVmaW5lIE5SRl9UV0lNMF9CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAwMzAwMFVMDQorI2RlZmluZSBOUkZfVFdJUzBfQkFTRSAgICAgICAgICAgICAgICAgIDB4NDAwMDMwMDBVTA0KKyNkZWZpbmUgTlJGX1NQSTBfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDAzMDAwVUwNCisjZGVmaW5lIE5SRl9UV0kwX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAwMzAwMFVMDQorI2RlZmluZSBOUkZfU1BJTTFfQkFTRSAgICAgICAgICAgICAgICAgIDB4NDAwMDQwMDBVTA0KKyNkZWZpbmUgTlJGX1NQSVMxX0JBU0UgICAgICAgICAgICAgICAgICAweDQwMDA0MDAwVUwNCisjZGVmaW5lIE5SRl9UV0lNMV9CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAwNDAwMFVMDQorI2RlZmluZSBOUkZfVFdJUzFfQkFTRSAgICAgICAgICAgICAgICAgIDB4NDAwMDQwMDBVTA0KKyNkZWZpbmUgTlJGX1NQSTFfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDA0MDAwVUwNCisjZGVmaW5lIE5SRl9UV0kxX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAwNDAwMFVMDQorI2RlZmluZSBOUkZfTkZDVF9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMDUwMDBVTA0KKyNkZWZpbmUgTlJGX0dQSU9URV9CQVNFICAgICAgICAgICAgICAgICAweDQwMDA2MDAwVUwNCisjZGVmaW5lIE5SRl9TQUFEQ19CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAwNzAwMFVMDQorI2RlZmluZSBOUkZfVElNRVIwX0JBU0UgICAgICAgICAgICAgICAgIDB4NDAwMDgwMDBVTA0KKyNkZWZpbmUgTlJGX1RJTUVSMV9CQVNFICAgICAgICAgICAgICAgICAweDQwMDA5MDAwVUwNCisjZGVmaW5lIE5SRl9USU1FUjJfQkFTRSAgICAgICAgICAgICAgICAgMHg0MDAwQTAwMFVMDQorI2RlZmluZSBOUkZfUlRDMF9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMEIwMDBVTA0KKyNkZWZpbmUgTlJGX1RFTVBfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDBDMDAwVUwNCisjZGVmaW5lIE5SRl9STkdfQkFTRSAgICAgICAgICAgICAgICAgICAgMHg0MDAwRDAwMFVMDQorI2RlZmluZSBOUkZfRUNCX0JBU0UgICAgICAgICAgICAgICAgICAgIDB4NDAwMEUwMDBVTA0KKyNkZWZpbmUgTlJGX0NDTV9CQVNFICAgICAgICAgICAgICAgICAgICAweDQwMDBGMDAwVUwNCisjZGVmaW5lIE5SRl9BQVJfQkFTRSAgICAgICAgICAgICAgICAgICAgMHg0MDAwRjAwMFVMDQorI2RlZmluZSBOUkZfV0RUX0JBU0UgICAgICAgICAgICAgICAgICAgIDB4NDAwMTAwMDBVTA0KKyNkZWZpbmUgTlJGX1JUQzFfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDExMDAwVUwNCisjZGVmaW5lIE5SRl9RREVDX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAxMjAwMFVMDQorI2RlZmluZSBOUkZfQ09NUF9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMTMwMDBVTA0KKyNkZWZpbmUgTlJGX0xQQ09NUF9CQVNFICAgICAgICAgICAgICAgICAweDQwMDEzMDAwVUwNCisjZGVmaW5lIE5SRl9TV0kwX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAxNDAwMFVMDQorI2RlZmluZSBOUkZfRUdVMF9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMTQwMDBVTA0KKyNkZWZpbmUgTlJGX1NXSTFfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDE1MDAwVUwNCisjZGVmaW5lIE5SRl9FR1UxX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAxNTAwMFVMDQorI2RlZmluZSBOUkZfU1dJMl9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMTYwMDBVTA0KKyNkZWZpbmUgTlJGX0VHVTJfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDE2MDAwVUwNCisjZGVmaW5lIE5SRl9TV0kzX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAxNzAwMFVMDQorI2RlZmluZSBOUkZfRUdVM19CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMTcwMDBVTA0KKyNkZWZpbmUgTlJGX1NXSTRfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDE4MDAwVUwNCisjZGVmaW5lIE5SRl9FR1U0X0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAxODAwMFVMDQorI2RlZmluZSBOUkZfU1dJNV9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMTkwMDBVTA0KKyNkZWZpbmUgTlJGX0VHVTVfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDE5MDAwVUwNCisjZGVmaW5lIE5SRl9USU1FUjNfQkFTRSAgICAgICAgICAgICAgICAgMHg0MDAxQTAwMFVMDQorI2RlZmluZSBOUkZfVElNRVI0X0JBU0UgICAgICAgICAgICAgICAgIDB4NDAwMUIwMDBVTA0KKyNkZWZpbmUgTlJGX1BXTTBfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDFDMDAwVUwNCisjZGVmaW5lIE5SRl9QRE1fQkFTRSAgICAgICAgICAgICAgICAgICAgMHg0MDAxRDAwMFVMDQorI2RlZmluZSBOUkZfTlZNQ19CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMUUwMDBVTA0KKyNkZWZpbmUgTlJGX0FDTF9CQVNFICAgICAgICAgICAgICAgICAgICAweDQwMDFFMDAwVUwNCisjZGVmaW5lIE5SRl9QUElfQkFTRSAgICAgICAgICAgICAgICAgICAgMHg0MDAxRjAwMFVMDQorI2RlZmluZSBOUkZfTVdVX0JBU0UgICAgICAgICAgICAgICAgICAgIDB4NDAwMjAwMDBVTA0KKyNkZWZpbmUgTlJGX1BXTTFfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDIxMDAwVUwNCisjZGVmaW5lIE5SRl9QV00yX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAyMjAwMFVMDQorI2RlZmluZSBOUkZfU1BJTTJfQkFTRSAgICAgICAgICAgICAgICAgIDB4NDAwMjMwMDBVTA0KKyNkZWZpbmUgTlJGX1NQSVMyX0JBU0UgICAgICAgICAgICAgICAgICAweDQwMDIzMDAwVUwNCisjZGVmaW5lIE5SRl9TUEkyX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAyMzAwMFVMDQorI2RlZmluZSBOUkZfUlRDMl9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMjQwMDBVTA0KKyNkZWZpbmUgTlJGX0kyU19CQVNFICAgICAgICAgICAgICAgICAgICAweDQwMDI1MDAwVUwNCisjZGVmaW5lIE5SRl9GUFVfQkFTRSAgICAgICAgICAgICAgICAgICAgMHg0MDAyNjAwMFVMDQorI2RlZmluZSBOUkZfVVNCRF9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMjcwMDBVTA0KKyNkZWZpbmUgTlJGX1VBUlRFMV9CQVNFICAgICAgICAgICAgICAgICAweDQwMDI4MDAwVUwNCisjZGVmaW5lIE5SRl9RU1BJX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAyOTAwMFVMDQorI2RlZmluZSBOUkZfU1BJTTNfQkFTRSAgICAgICAgICAgICAgICAgIDB4NDAwMkIwMDBVTA0KKyNkZWZpbmUgTlJGX1BXTTNfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDJEMDAwVUwNCisjZGVmaW5lIE5SRl9QMF9CQVNFICAgICAgICAgICAgICAgICAgICAgMHg1MDAwMDAwMFVMDQorI2RlZmluZSBOUkZfUDFfQkFTRSAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDAzMDBVTA0KKyNkZWZpbmUgTlJGX0NSWVBUT0NFTExfQkFTRSAgICAgICAgICAgICAweDUwMDJBMDAwVUwNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgUGVyaXBoZXJhbCBkZWNsYXJhdGlvbiAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisjZGVmaW5lIE5SRl9GSUNSICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfRklDUl9UeXBlICAgICAgICAgICAqKSBOUkZfRklDUl9CQVNFKQ0KKyNkZWZpbmUgTlJGX1VJQ1IgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9VSUNSX1R5cGUgICAgICAgICAgICopIE5SRl9VSUNSX0JBU0UpDQorI2RlZmluZSBOUkZfUE9XRVIgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1BPV0VSX1R5cGUgICAgICAgICAgKikgTlJGX1BPV0VSX0JBU0UpDQorI2RlZmluZSBOUkZfQ0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0NMT0NLX1R5cGUgICAgICAgICAgKikgTlJGX0NMT0NLX0JBU0UpDQorI2RlZmluZSBOUkZfUkFESU8gICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1JBRElPX1R5cGUgICAgICAgICAgKikgTlJGX1JBRElPX0JBU0UpDQorI2RlZmluZSBOUkZfVUFSVEUwICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1VBUlRFX1R5cGUgICAgICAgICAgKikgTlJGX1VBUlRFMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1VBUlQwICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9VQVJUX1R5cGUgICAgICAgICAgICopIE5SRl9VQVJUMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1NQSU0wICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9TUElNX1R5cGUgICAgICAgICAgICopIE5SRl9TUElNMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1NQSVMwICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9TUElTX1R5cGUgICAgICAgICAgICopIE5SRl9TUElTMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1RXSU0wICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9UV0lNX1R5cGUgICAgICAgICAgICopIE5SRl9UV0lNMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1RXSVMwICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9UV0lTX1R5cGUgICAgICAgICAgICopIE5SRl9UV0lTMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1NQSTAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9TUElfVHlwZSAgICAgICAgICAgICopIE5SRl9TUEkwX0JBU0UpDQorI2RlZmluZSBOUkZfVFdJMCAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1RXSV9UeXBlICAgICAgICAgICAgKikgTlJGX1RXSTBfQkFTRSkNCisjZGVmaW5lIE5SRl9TUElNMSAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU1BJTV9UeXBlICAgICAgICAgICAqKSBOUkZfU1BJTTFfQkFTRSkNCisjZGVmaW5lIE5SRl9TUElTMSAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU1BJU19UeXBlICAgICAgICAgICAqKSBOUkZfU1BJUzFfQkFTRSkNCisjZGVmaW5lIE5SRl9UV0lNMSAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfVFdJTV9UeXBlICAgICAgICAgICAqKSBOUkZfVFdJTTFfQkFTRSkNCisjZGVmaW5lIE5SRl9UV0lTMSAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfVFdJU19UeXBlICAgICAgICAgICAqKSBOUkZfVFdJUzFfQkFTRSkNCisjZGVmaW5lIE5SRl9TUEkxICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU1BJX1R5cGUgICAgICAgICAgICAqKSBOUkZfU1BJMV9CQVNFKQ0KKyNkZWZpbmUgTlJGX1RXSTEgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9UV0lfVHlwZSAgICAgICAgICAgICopIE5SRl9UV0kxX0JBU0UpDQorI2RlZmluZSBOUkZfTkZDVCAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX05GQ1RfVHlwZSAgICAgICAgICAgKikgTlJGX05GQ1RfQkFTRSkNCisjZGVmaW5lIE5SRl9HUElPVEUgICAgICAgICAgICAgICAgICAgICAgKChOUkZfR1BJT1RFX1R5cGUgICAgICAgICAqKSBOUkZfR1BJT1RFX0JBU0UpDQorI2RlZmluZSBOUkZfU0FBREMgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1NBQURDX1R5cGUgICAgICAgICAgKikgTlJGX1NBQURDX0JBU0UpDQorI2RlZmluZSBOUkZfVElNRVIwICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1RJTUVSX1R5cGUgICAgICAgICAgKikgTlJGX1RJTUVSMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1RJTUVSMSAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9USU1FUl9UeXBlICAgICAgICAgICopIE5SRl9USU1FUjFfQkFTRSkNCisjZGVmaW5lIE5SRl9USU1FUjIgICAgICAgICAgICAgICAgICAgICAgKChOUkZfVElNRVJfVHlwZSAgICAgICAgICAqKSBOUkZfVElNRVIyX0JBU0UpDQorI2RlZmluZSBOUkZfUlRDMCAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1JUQ19UeXBlICAgICAgICAgICAgKikgTlJGX1JUQzBfQkFTRSkNCisjZGVmaW5lIE5SRl9URU1QICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfVEVNUF9UeXBlICAgICAgICAgICAqKSBOUkZfVEVNUF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1JORyAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9STkdfVHlwZSAgICAgICAgICAgICopIE5SRl9STkdfQkFTRSkNCisjZGVmaW5lIE5SRl9FQ0IgICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfRUNCX1R5cGUgICAgICAgICAgICAqKSBOUkZfRUNCX0JBU0UpDQorI2RlZmluZSBOUkZfQ0NNICAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0NDTV9UeXBlICAgICAgICAgICAgKikgTlJGX0NDTV9CQVNFKQ0KKyNkZWZpbmUgTlJGX0FBUiAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9BQVJfVHlwZSAgICAgICAgICAgICopIE5SRl9BQVJfQkFTRSkNCisjZGVmaW5lIE5SRl9XRFQgICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfV0RUX1R5cGUgICAgICAgICAgICAqKSBOUkZfV0RUX0JBU0UpDQorI2RlZmluZSBOUkZfUlRDMSAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1JUQ19UeXBlICAgICAgICAgICAgKikgTlJGX1JUQzFfQkFTRSkNCisjZGVmaW5lIE5SRl9RREVDICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUURFQ19UeXBlICAgICAgICAgICAqKSBOUkZfUURFQ19CQVNFKQ0KKyNkZWZpbmUgTlJGX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9DT01QX1R5cGUgICAgICAgICAgICopIE5SRl9DT01QX0JBU0UpDQorI2RlZmluZSBOUkZfTFBDT01QICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0xQQ09NUF9UeXBlICAgICAgICAgKikgTlJGX0xQQ09NUF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1NXSTAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9TV0lfVHlwZSAgICAgICAgICAgICopIE5SRl9TV0kwX0JBU0UpDQorI2RlZmluZSBOUkZfRUdVMCAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0VHVV9UeXBlICAgICAgICAgICAgKikgTlJGX0VHVTBfQkFTRSkNCisjZGVmaW5lIE5SRl9TV0kxICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU1dJX1R5cGUgICAgICAgICAgICAqKSBOUkZfU1dJMV9CQVNFKQ0KKyNkZWZpbmUgTlJGX0VHVTEgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9FR1VfVHlwZSAgICAgICAgICAgICopIE5SRl9FR1UxX0JBU0UpDQorI2RlZmluZSBOUkZfU1dJMiAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1NXSV9UeXBlICAgICAgICAgICAgKikgTlJGX1NXSTJfQkFTRSkNCisjZGVmaW5lIE5SRl9FR1UyICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfRUdVX1R5cGUgICAgICAgICAgICAqKSBOUkZfRUdVMl9CQVNFKQ0KKyNkZWZpbmUgTlJGX1NXSTMgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9TV0lfVHlwZSAgICAgICAgICAgICopIE5SRl9TV0kzX0JBU0UpDQorI2RlZmluZSBOUkZfRUdVMyAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0VHVV9UeXBlICAgICAgICAgICAgKikgTlJGX0VHVTNfQkFTRSkNCisjZGVmaW5lIE5SRl9TV0k0ICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU1dJX1R5cGUgICAgICAgICAgICAqKSBOUkZfU1dJNF9CQVNFKQ0KKyNkZWZpbmUgTlJGX0VHVTQgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9FR1VfVHlwZSAgICAgICAgICAgICopIE5SRl9FR1U0X0JBU0UpDQorI2RlZmluZSBOUkZfU1dJNSAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1NXSV9UeXBlICAgICAgICAgICAgKikgTlJGX1NXSTVfQkFTRSkNCisjZGVmaW5lIE5SRl9FR1U1ICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfRUdVX1R5cGUgICAgICAgICAgICAqKSBOUkZfRUdVNV9CQVNFKQ0KKyNkZWZpbmUgTlJGX1RJTUVSMyAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9USU1FUl9UeXBlICAgICAgICAgICopIE5SRl9USU1FUjNfQkFTRSkNCisjZGVmaW5lIE5SRl9USU1FUjQgICAgICAgICAgICAgICAgICAgICAgKChOUkZfVElNRVJfVHlwZSAgICAgICAgICAqKSBOUkZfVElNRVI0X0JBU0UpDQorI2RlZmluZSBOUkZfUFdNMCAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1BXTV9UeXBlICAgICAgICAgICAgKikgTlJGX1BXTTBfQkFTRSkNCisjZGVmaW5lIE5SRl9QRE0gICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUERNX1R5cGUgICAgICAgICAgICAqKSBOUkZfUERNX0JBU0UpDQorI2RlZmluZSBOUkZfTlZNQyAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX05WTUNfVHlwZSAgICAgICAgICAgKikgTlJGX05WTUNfQkFTRSkNCisjZGVmaW5lIE5SRl9BQ0wgICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfQUNMX1R5cGUgICAgICAgICAgICAqKSBOUkZfQUNMX0JBU0UpDQorI2RlZmluZSBOUkZfUFBJICAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1BQSV9UeXBlICAgICAgICAgICAgKikgTlJGX1BQSV9CQVNFKQ0KKyNkZWZpbmUgTlJGX01XVSAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9NV1VfVHlwZSAgICAgICAgICAgICopIE5SRl9NV1VfQkFTRSkNCisjZGVmaW5lIE5SRl9QV00xICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUFdNX1R5cGUgICAgICAgICAgICAqKSBOUkZfUFdNMV9CQVNFKQ0KKyNkZWZpbmUgTlJGX1BXTTIgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9QV01fVHlwZSAgICAgICAgICAgICopIE5SRl9QV00yX0JBU0UpDQorI2RlZmluZSBOUkZfU1BJTTIgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1NQSU1fVHlwZSAgICAgICAgICAgKikgTlJGX1NQSU0yX0JBU0UpDQorI2RlZmluZSBOUkZfU1BJUzIgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1NQSVNfVHlwZSAgICAgICAgICAgKikgTlJGX1NQSVMyX0JBU0UpDQorI2RlZmluZSBOUkZfU1BJMiAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1NQSV9UeXBlICAgICAgICAgICAgKikgTlJGX1NQSTJfQkFTRSkNCisjZGVmaW5lIE5SRl9SVEMyICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUlRDX1R5cGUgICAgICAgICAgICAqKSBOUkZfUlRDMl9CQVNFKQ0KKyNkZWZpbmUgTlJGX0kyUyAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9JMlNfVHlwZSAgICAgICAgICAgICopIE5SRl9JMlNfQkFTRSkNCisjZGVmaW5lIE5SRl9GUFUgICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfRlBVX1R5cGUgICAgICAgICAgICAqKSBOUkZfRlBVX0JBU0UpDQorI2RlZmluZSBOUkZfVVNCRCAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1VTQkRfVHlwZSAgICAgICAgICAgKikgTlJGX1VTQkRfQkFTRSkNCisjZGVmaW5lIE5SRl9VQVJURTEgICAgICAgICAgICAgICAgICAgICAgKChOUkZfVUFSVEVfVHlwZSAgICAgICAgICAqKSBOUkZfVUFSVEUxX0JBU0UpDQorI2RlZmluZSBOUkZfUVNQSSAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1FTUElfVHlwZSAgICAgICAgICAgKikgTlJGX1FTUElfQkFTRSkNCisjZGVmaW5lIE5SRl9TUElNMyAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU1BJTV9UeXBlICAgICAgICAgICAqKSBOUkZfU1BJTTNfQkFTRSkNCisjZGVmaW5lIE5SRl9QV00zICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUFdNX1R5cGUgICAgICAgICAgICAqKSBOUkZfUFdNM19CQVNFKQ0KKyNkZWZpbmUgTlJGX1AwICAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9HUElPX1R5cGUgICAgICAgICAgICopIE5SRl9QMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1AxICAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9HUElPX1R5cGUgICAgICAgICAgICopIE5SRl9QMV9CQVNFKQ0KKyNkZWZpbmUgTlJGX0NSWVBUT0NFTEwgICAgICAgICAgICAgICAgICAoKE5SRl9DUllQVE9DRUxMX1R5cGUgICAgICopIE5SRl9DUllQVE9DRUxMX0JBU0UpDQorDQorDQorLyoqIEB9ICovIC8qIEVuZCBvZiBncm91cCBEZXZpY2VfUGVyaXBoZXJhbF9SZWdpc3RlcnMgKi8NCisvKiogQH0gKi8gLyogRW5kIG9mIGdyb3VwIG5yZjUyODQwICovDQorLyoqIEB9ICovIC8qIEVuZCBvZiBncm91cCBOb3JkaWMgU2VtaWNvbmR1Y3RvciAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisNCisjZW5kaWYgIC8qIG5yZjUyODQwX0ggKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1Mjg0MF9iaXRmaWVsZHMuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyODQwX2JpdGZpZWxkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjFhMGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1Mjg0MF9iaXRmaWVsZHMuaApAQCAtMCwwICsxLDE0NjMzIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBfX05SRjUyODQwX0JJVFNfSA0KKyNkZWZpbmUgX19OUkY1Mjg0MF9CSVRTX0gNCisNCisvKmxpbnQgKytmbGIgIkVudGVyIGxpYnJhcnkgcmVnaW9uIiAqLw0KKw0KKy8qIFBlcmlwaGVyYWw6IEFBUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBBY2NlbGVyYXRlZCBBZGRyZXNzIFJlc29sdmVyICovDQorDQorLyogUmVnaXN0ZXI6IEFBUl9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgTk9UUkVTT0xWRUQgZXZlbnQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9OT1RSRVNPTFZFRF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBOT1RSRVNPTFZFRCBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9OT1RSRVNPTFZFRF9Nc2sgKDB4MVVMIDw8IEFBUl9JTlRFTlNFVF9OT1RSRVNPTFZFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTk9UUkVTT0xWRUQgZmllbGQuICovDQorI2RlZmluZSBBQVJfSU5URU5TRVRfTk9UUkVTT0xWRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOU0VUX05PVFJFU09MVkVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBBQVJfSU5URU5TRVRfTk9UUkVTT0xWRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVTT0xWRUQgZXZlbnQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9SRVNPTFZFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVNPTFZFRCBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9SRVNPTFZFRF9Nc2sgKDB4MVVMIDw8IEFBUl9JTlRFTlNFVF9SRVNPTFZFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVTT0xWRUQgZmllbGQuICovDQorI2RlZmluZSBBQVJfSU5URU5TRVRfUkVTT0xWRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOU0VUX1JFU09MVkVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBBQVJfSU5URU5TRVRfUkVTT0xWRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EIGV2ZW50ICovDQorI2RlZmluZSBBQVJfSU5URU5TRVRfRU5EX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9FTkRfTXNrICgweDFVTCA8PCBBQVJfSU5URU5TRVRfRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBBQVJfSU5URU5TRVRfRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9FTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9FTkRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IEFBUl9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBOT1RSRVNPTFZFRCBldmVudCAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOQ0xSX05PVFJFU09MVkVEX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIE5PVFJFU09MVkVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOQ0xSX05PVFJFU09MVkVEX01zayAoMHgxVUwgPDwgQUFSX0lOVEVOQ0xSX05PVFJFU09MVkVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBOT1RSRVNPTFZFRCBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9JTlRFTkNMUl9OT1RSRVNPTFZFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBBQVJfSU5URU5DTFJfTk9UUkVTT0xWRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTkNMUl9OT1RSRVNPTFZFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVTT0xWRUQgZXZlbnQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTkNMUl9SRVNPTFZFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVNPTFZFRCBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9JTlRFTkNMUl9SRVNPTFZFRF9Nc2sgKDB4MVVMIDw8IEFBUl9JTlRFTkNMUl9SRVNPTFZFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVTT0xWRUQgZmllbGQuICovDQorI2RlZmluZSBBQVJfSU5URU5DTFJfUkVTT0xWRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOQ0xSX1JFU09MVkVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBBQVJfSU5URU5DTFJfUkVTT0xWRURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOQ0xSX0VORF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBBQVJfSU5URU5DTFJfRU5EX01zayAoMHgxVUwgPDwgQUFSX0lOVEVOQ0xSX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOQ0xSX0VORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBBQVJfSU5URU5DTFJfRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBBQVJfSU5URU5DTFJfRU5EX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBBQVJfU1RBVFVTICovDQorLyogRGVzY3JpcHRpb246IFJlc29sdXRpb24gc3RhdHVzICovDQorDQorLyogQml0cyAzLi4wIDogVGhlIElSSyB0aGF0IHdhcyB1c2VkIGxhc3QgdGltZSBhbiBhZGRyZXNzIHdhcyByZXNvbHZlZCAqLw0KKyNkZWZpbmUgQUFSX1NUQVRVU19TVEFUVVNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX1NUQVRVU19TVEFUVVNfTXNrICgweEZVTCA8PCBBQVJfU1RBVFVTX1NUQVRVU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBVFVTIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBBQVJfRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBBQVIgKi8NCisNCisvKiBCaXRzIDEuLjAgOiBFbmFibGUgb3IgZGlzYWJsZSBBQVIgKi8NCisjZGVmaW5lIEFBUl9FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9FTkFCTEVfRU5BQkxFX01zayAoMHgzVUwgPDwgQUFSX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgQUFSX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoM1VMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBBQVJfTklSSyAqLw0KKy8qIERlc2NyaXB0aW9uOiBOdW1iZXIgb2YgSVJLcyAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IE51bWJlciBvZiBJZGVudGl0eSByb290IGtleXMgYXZhaWxhYmxlIGluIHRoZSBJUksgZGF0YSBzdHJ1Y3R1cmUgKi8NCisjZGVmaW5lIEFBUl9OSVJLX05JUktfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTklSSyBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9OSVJLX05JUktfTXNrICgweDFGVUwgPDwgQUFSX05JUktfTklSS19Qb3MpIC8qITwgQml0IG1hc2sgb2YgTklSSyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogQUFSX0lSS1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBQb2ludGVyIHRvIElSSyBkYXRhIHN0cnVjdHVyZSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBQb2ludGVyIHRvIHRoZSBJUksgZGF0YSBzdHJ1Y3R1cmUgKi8NCisjZGVmaW5lIEFBUl9JUktQVFJfSVJLUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIElSS1BUUiBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9JUktQVFJfSVJLUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IEFBUl9JUktQVFJfSVJLUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBJUktQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEFBUl9BRERSUFRSICovDQorLyogRGVzY3JpcHRpb246IFBvaW50ZXIgdG8gdGhlIHJlc29sdmFibGUgYWRkcmVzcyAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBQb2ludGVyIHRvIHRoZSByZXNvbHZhYmxlIGFkZHJlc3MgKDYtYnl0ZXMpICovDQorI2RlZmluZSBBQVJfQUREUlBUUl9BRERSUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFJQVFIgZmllbGQuICovDQorI2RlZmluZSBBQVJfQUREUlBUUl9BRERSUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IEFBUl9BRERSUFRSX0FERFJQVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFJQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEFBUl9TQ1JBVENIUFRSICovDQorLyogRGVzY3JpcHRpb246IFBvaW50ZXIgdG8gZGF0YSBhcmVhIHVzZWQgZm9yIHRlbXBvcmFyeSBzdG9yYWdlICovDQorDQorLyogQml0cyAzMS4uMCA6IFBvaW50ZXIgdG8gYSBzY3JhdGNoIGRhdGEgYXJlYSB1c2VkIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSBkdXJpbmcgcmVzb2x1dGlvbi5BIHNwYWNlIG9mIG1pbmltdW0gMyBieXRlcyBtdXN0IGJlIHJlc2VydmVkLiAqLw0KKyNkZWZpbmUgQUFSX1NDUkFUQ0hQVFJfU0NSQVRDSFBUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTQ1JBVENIUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX1NDUkFUQ0hQVFJfU0NSQVRDSFBUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBBQVJfU0NSQVRDSFBUUl9TQ1JBVENIUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTQ1JBVENIUFRSIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IEFDTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBBY2Nlc3MgY29udHJvbCBsaXN0cyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBBQ0xfRElTQUJMRUlOREVCVUcgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBhbGwgQUNMIHByb3RlY3Rpb24gbWVjaGFuaXNtcyBmb3IgcmVnaW9ucyB3aGlsZSBpbiBkZWJ1ZyBtb2RlICovDQorDQorLyogQml0IDAgOiBEaXNhYmxlIHRoZSBwcm90ZWN0aW9uIG1lY2hhbmlzbSBmb3IgcmVnaW9ucyB3aGlsZSBpbiBkZWJ1ZyBtb2RlLiAqLw0KKyNkZWZpbmUgQUNMX0RJU0FCTEVJTkRFQlVHX0RJU0FCTEVJTkRFQlVHX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERJU0FCTEVJTkRFQlVHIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUNMX0RJU0FCTEVJTkRFQlVHX0RJU0FCTEVJTkRFQlVHX01zayAoMHgxVUwgPDwgQUNMX0RJU0FCTEVJTkRFQlVHX0RJU0FCTEVJTkRFQlVHX1BvcykgLyohPCBCaXQgbWFzayBvZiBESVNBQkxFSU5ERUJVRyBmaWVsZC4gKi8NCisjZGVmaW5lIEFDTF9ESVNBQkxFSU5ERUJVR19ESVNBQkxFSU5ERUJVR19FbmFibGVkICgwVUwpIC8qITwgQUNMIGlzIGVuYWJsZWQgaW4gZGVidWcgbW9kZSAqLw0KKyNkZWZpbmUgQUNMX0RJU0FCTEVJTkRFQlVHX0RJU0FCTEVJTkRFQlVHX0Rpc2FibGVkICgxVUwpIC8qITwgQUNMIGlzIGRpc2FibGVkIGluIGRlYnVnIG1vZGUgKi8NCisNCisvKiBSZWdpc3RlcjogQUNMX0FDTF9BRERSICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBDb25maWd1cmUgdGhlIHdvcmQtYWxpZ25lZCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbiAwIHRvIHByb3RlY3QgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogVmFsaWQgd29yZC1hbGlnbmVkIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uIDAgdG8gcHJvdGVjdC4gQWRkcmVzcyBtdXN0IHBvaW50IHRvIGEgZmxhc2ggcGFnZSBib3VuZGFyeS4gKi8NCisjZGVmaW5lIEFDTF9BQ0xfQUREUl9BRERSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFIgZmllbGQuICovDQorI2RlZmluZSBBQ0xfQUNMX0FERFJfQUREUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBBQ0xfQUNMX0FERFJfQUREUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUREUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogQUNMX0FDTF9TSVpFICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBTaXplIG9mIHJlZ2lvbiB0byBwcm90ZWN0IGNvdW50aW5nIGZyb20gYWRkcmVzcyBBQ0xbMF0uQUREUi4gV3JpdGUgJzAnIGFzIG5vIGVmZmVjdC4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogU2l6ZSBvZiBmbGFzaCByZWdpb24gMCBpbiBieXRlcy4gTXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBmbGFzaCBwYWdlIHNpemUuICovDQorI2RlZmluZSBBQ0xfQUNMX1NJWkVfU0laRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTSVpFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUNMX0FDTF9TSVpFX1NJWkVfTXNrICgweEZGRkZGRkZGVUwgPDwgQUNMX0FDTF9TSVpFX1NJWkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNJWkUgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEFDTF9BQ0xfUEVSTSAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgQWNjZXNzIHBlcm1pc3Npb25zIGZvciByZWdpb24gMCBhcyBkZWZpbmVkIGJ5IHN0YXJ0IGFkZHJlc3MgQUNMWzBdLkFERFIgYW5kIHNpemUgQUNMWzBdLlNJWkUgKi8NCisNCisvKiBCaXQgMiA6IENvbmZpZ3VyZSByZWFkIHBlcm1pc3Npb25zIGZvciByZWdpb24gMC4gV3JpdGUgJzAnIGhhcyBubyBlZmZlY3QuICovDQorI2RlZmluZSBBQ0xfQUNMX1BFUk1fUkVBRF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUNMX0FDTF9QRVJNX1JFQURfTXNrICgweDFVTCA8PCBBQ0xfQUNMX1BFUk1fUkVBRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRCBmaWVsZC4gKi8NCisjZGVmaW5lIEFDTF9BQ0xfUEVSTV9SRUFEX0VuYWJsZSAoMFVMKSAvKiE8IEFsbG93IHJlYWQgaW5zdHJ1Y3Rpb25zIHRvIHJlZ2lvbiAwICovDQorI2RlZmluZSBBQ0xfQUNMX1BFUk1fUkVBRF9EaXNhYmxlICgxVUwpIC8qITwgQmxvY2sgcmVhZCBpbnN0cnVjdGlvbnMgdG8gcmVnaW9uIDAgKi8NCisNCisvKiBCaXQgMSA6IENvbmZpZ3VyZSB3cml0ZSBhbmQgZXJhc2UgcGVybWlzc2lvbnMgZm9yIHJlZ2lvbiAwLiBXcml0ZSAnMCcgaGFzIG5vIGVmZmVjdC4gKi8NCisjZGVmaW5lIEFDTF9BQ0xfUEVSTV9XUklURV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBXUklURSBmaWVsZC4gKi8NCisjZGVmaW5lIEFDTF9BQ0xfUEVSTV9XUklURV9Nc2sgKDB4MVVMIDw8IEFDTF9BQ0xfUEVSTV9XUklURV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgV1JJVEUgZmllbGQuICovDQorI2RlZmluZSBBQ0xfQUNMX1BFUk1fV1JJVEVfRW5hYmxlICgwVUwpIC8qITwgQWxsb3cgd3JpdGUgYW5kIGVyYXNlIGluc3RydWN0aW9ucyB0byByZWdpb24gMCAqLw0KKyNkZWZpbmUgQUNMX0FDTF9QRVJNX1dSSVRFX0Rpc2FibGUgKDFVTCkgLyohPCBCbG9jayB3cml0ZSBhbmQgZXJhc2UgaW5zdHJ1Y3Rpb25zIHRvIHJlZ2lvbiAwICovDQorDQorDQorLyogUGVyaXBoZXJhbDogQ0NNICovDQorLyogRGVzY3JpcHRpb246IEFFUyBDQ00gTW9kZSBFbmNyeXB0aW9uICovDQorDQorLyogUmVnaXN0ZXI6IENDTV9TSE9SVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogU2hvcnRjdXQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMCA6IFNob3J0Y3V0IGJldHdlZW4gRU5ES1NHRU4gZXZlbnQgYW5kIENSWVBUIHRhc2sgKi8NCisjZGVmaW5lIENDTV9TSE9SVFNfRU5ES1NHRU5fQ1JZUFRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ES1NHRU5fQ1JZUFQgZmllbGQuICovDQorI2RlZmluZSBDQ01fU0hPUlRTX0VOREtTR0VOX0NSWVBUX01zayAoMHgxVUwgPDwgQ0NNX1NIT1JUU19FTkRLU0dFTl9DUllQVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ES1NHRU5fQ1JZUFQgZmllbGQuICovDQorI2RlZmluZSBDQ01fU0hPUlRTX0VOREtTR0VOX0NSWVBUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgQ0NNX1NIT1JUU19FTkRLU0dFTl9DUllQVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IENDTV9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FUlJPUl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FUlJPUl9Nc2sgKDB4MVVMIDw8IENDTV9JTlRFTlNFVF9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBDQ01fSU5URU5TRVRfRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOU0VUX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDQ01fSU5URU5TRVRfRVJST1JfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EQ1JZUFQgZXZlbnQgKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FTkRDUllQVF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRDUllQVCBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FTkRDUllQVF9Nc2sgKDB4MVVMIDw8IENDTV9JTlRFTlNFVF9FTkRDUllQVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EQ1JZUFQgZmllbGQuICovDQorI2RlZmluZSBDQ01fSU5URU5TRVRfRU5EQ1JZUFRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOU0VUX0VORENSWVBUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDQ01fSU5URU5TRVRfRU5EQ1JZUFRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ES1NHRU4gZXZlbnQgKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FTkRLU0dFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRLU0dFTiBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FTkRLU0dFTl9Nc2sgKDB4MVVMIDw8IENDTV9JTlRFTlNFVF9FTkRLU0dFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ES1NHRU4gZmllbGQuICovDQorI2RlZmluZSBDQ01fSU5URU5TRVRfRU5ES1NHRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOU0VUX0VOREtTR0VOX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDQ01fSU5URU5TRVRfRU5ES1NHRU5fU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IENDTV9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOQ0xSX0VSUk9SX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOQ0xSX0VSUk9SX01zayAoMHgxVUwgPDwgQ0NNX0lOVEVOQ0xSX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9JTlRFTkNMUl9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDQ01fSU5URU5DTFJfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENDTV9JTlRFTkNMUl9FUlJPUl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5EQ1JZUFQgZXZlbnQgKi8NCisjZGVmaW5lIENDTV9JTlRFTkNMUl9FTkRDUllQVF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRDUllQVCBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9JTlRFTkNMUl9FTkRDUllQVF9Nc2sgKDB4MVVMIDw8IENDTV9JTlRFTkNMUl9FTkRDUllQVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EQ1JZUFQgZmllbGQuICovDQorI2RlZmluZSBDQ01fSU5URU5DTFJfRU5EQ1JZUFRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOQ0xSX0VORENSWVBUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDQ01fSU5URU5DTFJfRU5EQ1JZUFRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREtTR0VOIGV2ZW50ICovDQorI2RlZmluZSBDQ01fSU5URU5DTFJfRU5ES1NHRU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ES1NHRU4gZmllbGQuICovDQorI2RlZmluZSBDQ01fSU5URU5DTFJfRU5ES1NHRU5fTXNrICgweDFVTCA8PCBDQ01fSU5URU5DTFJfRU5ES1NHRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREtTR0VOIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOQ0xSX0VOREtTR0VOX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENDTV9JTlRFTkNMUl9FTkRLU0dFTl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOQ0xSX0VOREtTR0VOX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDQ01fTUlDU1RBVFVTICovDQorLyogRGVzY3JpcHRpb246IE1JQyBjaGVjayByZXN1bHQgKi8NCisNCisvKiBCaXQgMCA6IFRoZSByZXN1bHQgb2YgdGhlIE1JQyBjaGVjayBwZXJmb3JtZWQgZHVyaW5nIHRoZSBwcmV2aW91cyBkZWNyeXB0aW9uIG9wZXJhdGlvbiAqLw0KKyNkZWZpbmUgQ0NNX01JQ1NUQVRVU19NSUNTVEFUVVNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUlDU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX01JQ1NUQVRVU19NSUNTVEFUVVNfTXNrICgweDFVTCA8PCBDQ01fTUlDU1RBVFVTX01JQ1NUQVRVU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUlDU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX01JQ1NUQVRVU19NSUNTVEFUVVNfQ2hlY2tGYWlsZWQgKDBVTCkgLyohPCBNSUMgY2hlY2sgZmFpbGVkICovDQorI2RlZmluZSBDQ01fTUlDU1RBVFVTX01JQ1NUQVRVU19DaGVja1Bhc3NlZCAoMVVMKSAvKiE8IE1JQyBjaGVjayBwYXNzZWQgKi8NCisNCisvKiBSZWdpc3RlcjogQ0NNX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgKi8NCisNCisvKiBCaXRzIDEuLjAgOiBFbmFibGUgb3IgZGlzYWJsZSBDQ00gKi8NCisjZGVmaW5lIENDTV9FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9FTkFCTEVfRU5BQkxFX01zayAoMHgzVUwgPDwgQ0NNX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgQ0NNX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoMlVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDQ01fTU9ERSAqLw0KKy8qIERlc2NyaXB0aW9uOiBPcGVyYXRpb24gbW9kZSAqLw0KKw0KKy8qIEJpdCAyNCA6IFBhY2tldCBsZW5ndGggY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgQ0NNX01PREVfTEVOR1RIX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBMRU5HVEggZmllbGQuICovDQorI2RlZmluZSBDQ01fTU9ERV9MRU5HVEhfTXNrICgweDFVTCA8PCBDQ01fTU9ERV9MRU5HVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExFTkdUSCBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9NT0RFX0xFTkdUSF9EZWZhdWx0ICgwVUwpIC8qITwgRGVmYXVsdCBsZW5ndGguIEVmZmVjdGl2ZSBsZW5ndGggb2YgTEVOR1RIIGZpZWxkIGluIGVuY3J5cHRlZC9kZWNyeXB0ZWQgcGFja2V0IGlzIDUgYml0cy4gQSBrZXktc3RyZWFtIGZvciBwYWNrZXRzIHVwIHRvIDI3IGJ5dGVzIHdpbGwgYmUgZ2VuZXJhdGVkLiAqLw0KKyNkZWZpbmUgQ0NNX01PREVfTEVOR1RIX0V4dGVuZGVkICgxVUwpIC8qITwgRXh0ZW5kZWQgbGVuZ3RoLiBFZmZlY3RpdmUgbGVuZ3RoIG9mIExFTkdUSCBmaWVsZCBpbiBlbmNyeXB0ZWQvZGVjcnlwdGVkIHBhY2tldCBpcyA4IGJpdHMuIEEga2V5LXN0cmVhbSBmb3IgcGFja2V0cyB1cCB0byBNQVhQQUNLRVRTSVpFIGJ5dGVzIHdpbGwgYmUgZ2VuZXJhdGVkLiAqLw0KKw0KKy8qIEJpdHMgMTcuLjE2IDogUmFkaW8gZGF0YSByYXRlIHRoYXQgdGhlIENDTSBzaGFsbCBydW4gc3luY2hyb25vdXMgd2l0aCAqLw0KKyNkZWZpbmUgQ0NNX01PREVfREFUQVJBVEVfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIERBVEFSQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX01PREVfREFUQVJBVEVfTXNrICgweDNVTCA8PCBDQ01fTU9ERV9EQVRBUkFURV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgREFUQVJBVEUgZmllbGQuICovDQorI2RlZmluZSBDQ01fTU9ERV9EQVRBUkFURV8xTWJpdCAoMFVMKSAvKiE8IDEgTWJwcyAqLw0KKyNkZWZpbmUgQ0NNX01PREVfREFUQVJBVEVfMk1iaXQgKDFVTCkgLyohPCAyIE1icHMgKi8NCisjZGVmaW5lIENDTV9NT0RFX0RBVEFSQVRFXzEyNUticHMgKDJVTCkgLyohPCAxMjUgS2JwcyAqLw0KKyNkZWZpbmUgQ0NNX01PREVfREFUQVJBVEVfNTAwS2JwcyAoM1VMKSAvKiE8IDUwMCBLYnBzICovDQorDQorLyogQml0IDAgOiBUaGUgbW9kZSBvZiBvcGVyYXRpb24gdG8gYmUgdXNlZC4gVGhlIHNldHRpbmdzIGluIHRoaXMgcmVnaXN0ZXIgYXBwbHkgd2hlbmV2ZXIgZWl0aGVyIHRoZSBLU0dFTiBvciBDUllQVCB0YXNrcyBhcmUgdHJpZ2dlcmVkLiAqLw0KKyNkZWZpbmUgQ0NNX01PREVfTU9ERV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX01PREVfTU9ERV9Nc2sgKDB4MVVMIDw8IENDTV9NT0RFX01PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBDQ01fTU9ERV9NT0RFX0VuY3J5cHRpb24gKDBVTCkgLyohPCBBRVMgQ0NNIHBhY2tldCBlbmNyeXB0aW9uIG1vZGUgKi8NCisjZGVmaW5lIENDTV9NT0RFX01PREVfRGVjcnlwdGlvbiAoMVVMKSAvKiE8IEFFUyBDQ00gcGFja2V0IGRlY3J5cHRpb24gbW9kZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDQ01fQ05GUFRSICovDQorLyogRGVzY3JpcHRpb246IFBvaW50ZXIgdG8gZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyBBRVMga2V5IGFuZCBOT05DRSB2ZWN0b3IgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUG9pbnRlciB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUgQUVTIGtleSBhbmQgdGhlIENDTSBOT05DRSB2ZWN0b3IgKHNlZSBUYWJsZSAxIENDTSBkYXRhIHN0cnVjdHVyZSBvdmVydmlldykgKi8NCisjZGVmaW5lIENDTV9DTkZQVFJfQ05GUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENORlBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9DTkZQVFJfQ05GUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IENDTV9DTkZQVFJfQ05GUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBDTkZQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IENDTV9JTlBUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBJbnB1dCBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IElucHV0IHBvaW50ZXIgKi8NCisjZGVmaW5lIENDTV9JTlBUUl9JTlBUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBJTlBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9JTlBUUl9JTlBUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBDQ01fSU5QVFJfSU5QVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElOUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDQ01fT1VUUFRSICovDQorLyogRGVzY3JpcHRpb246IE91dHB1dCBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IE91dHB1dCBwb2ludGVyICovDQorI2RlZmluZSBDQ01fT1VUUFRSX09VVFBUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPVVRQVFIgZmllbGQuICovDQorI2RlZmluZSBDQ01fT1VUUFRSX09VVFBUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBDQ01fT1VUUFRSX09VVFBUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1VUUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDQ01fU0NSQVRDSFBUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBQb2ludGVyIHRvIGRhdGEgYXJlYSB1c2VkIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBQb2ludGVyIHRvIGEgc2NyYXRjaCBkYXRhIGFyZWEgdXNlZCBmb3IgdGVtcG9yYXJ5IHN0b3JhZ2UgZHVyaW5nIGtleS1zdHJlYW0gZ2VuZXJhdGlvbiwgTUlDIGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4gKi8NCisjZGVmaW5lIENDTV9TQ1JBVENIUFRSX1NDUkFUQ0hQVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU0NSQVRDSFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9TQ1JBVENIUFRSX1NDUkFUQ0hQVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgQ0NNX1NDUkFUQ0hQVFJfU0NSQVRDSFBUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0NSQVRDSFBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogQ0NNX01BWFBBQ0tFVFNJWkUgKi8NCisvKiBEZXNjcmlwdGlvbjogTGVuZ3RoIG9mIGtleS1zdHJlYW0gZ2VuZXJhdGVkIHdoZW4gTU9ERS5MRU5HVEggPSBFeHRlbmRlZC4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBMZW5ndGggb2Yga2V5LXN0cmVhbSBnZW5lcmF0ZWQgd2hlbiBNT0RFLkxFTkdUSCA9IEV4dGVuZGVkLiBUaGlzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgc3Vic2VxdWVudCBwYWNrZXQgdG8gYmUgZW5jcnlwdGVkL2RlY3J5cHRlZC4gKi8NCisjZGVmaW5lIENDTV9NQVhQQUNLRVRTSVpFX01BWFBBQ0tFVFNJWkVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUFYUEFDS0VUU0laRSBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9NQVhQQUNLRVRTSVpFX01BWFBBQ0tFVFNJWkVfTXNrICgweEZGVUwgPDwgQ0NNX01BWFBBQ0tFVFNJWkVfTUFYUEFDS0VUU0laRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYUEFDS0VUU0laRSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogQ0NNX1JBVEVPVkVSUklERSAqLw0KKy8qIERlc2NyaXB0aW9uOiBEYXRhIHJhdGUgb3ZlcnJpZGUgc2V0dGluZy4gKi8NCisNCisvKiBCaXRzIDEuLjAgOiBEYXRhIHJhdGUgb3ZlcnJpZGUgc2V0dGluZy4gKi8NCisjZGVmaW5lIENDTV9SQVRFT1ZFUlJJREVfUkFURU9WRVJSSURFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJBVEVPVkVSUklERSBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9SQVRFT1ZFUlJJREVfUkFURU9WRVJSSURFX01zayAoMHgzVUwgPDwgQ0NNX1JBVEVPVkVSUklERV9SQVRFT1ZFUlJJREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJBVEVPVkVSUklERSBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9SQVRFT1ZFUlJJREVfUkFURU9WRVJSSURFXzFNYml0ICgwVUwpIC8qITwgMSBNYnBzICovDQorI2RlZmluZSBDQ01fUkFURU9WRVJSSURFX1JBVEVPVkVSUklERV8yTWJpdCAoMVVMKSAvKiE8IDIgTWJwcyAqLw0KKyNkZWZpbmUgQ0NNX1JBVEVPVkVSUklERV9SQVRFT1ZFUlJJREVfMTI1S2JwcyAoMlVMKSAvKiE8IDEyNSBLYnBzICovDQorI2RlZmluZSBDQ01fUkFURU9WRVJSSURFX1JBVEVPVkVSUklERV81MDBLYnBzICgzVUwpIC8qITwgNTAwIEticHMgKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBDTE9DSyAqLw0KKy8qIERlc2NyaXB0aW9uOiBDbG9jayBjb250cm9sICovDQorDQorLyogUmVnaXN0ZXI6IENMT0NLX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDVFRPIGV2ZW50ICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9DVFRPX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENUVE8gZmllbGQuICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9DVFRPX01zayAoMHgxVUwgPDwgQ0xPQ0tfSU5URU5TRVRfQ1RUT19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1RUTyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0NUVE9fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfQ1RUT19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfQ1RUT19TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBET05FIGV2ZW50ICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9ET05FX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIERPTkUgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9ET05FX01zayAoMHgxVUwgPDwgQ0xPQ0tfSU5URU5TRVRfRE9ORV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0RPTkVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfRE9ORV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfRE9ORV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBMRkNMS1NUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0xGQ0xLU1RBUlRFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBMRkNMS1NUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9MRkNMS1NUQVJURURfTXNrICgweDFVTCA8PCBDTE9DS19JTlRFTlNFVF9MRkNMS1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExGQ0xLU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0xGQ0xLU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9MRkNMS1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0xGQ0xLU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBIRkNMS1NUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0hGQ0xLU1RBUlRFRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBIRkNMS1NUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9IRkNMS1NUQVJURURfTXNrICgweDFVTCA8PCBDTE9DS19JTlRFTlNFVF9IRkNMS1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEhGQ0xLU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0hGQ0xLU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9IRkNMS1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0hGQ0xLU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogQ0xPQ0tfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ1RUTyBldmVudCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfQ1RUT19Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDVFRPIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfQ1RUT19Nc2sgKDB4MVVMIDw8IENMT0NLX0lOVEVOQ0xSX0NUVE9fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENUVE8gZmllbGQuICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9DVFRPX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0NUVE9fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0NUVE9fQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIERPTkUgZXZlbnQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0RPTkVfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0RPTkVfTXNrICgweDFVTCA8PCBDTE9DS19JTlRFTkNMUl9ET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfRE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9ET05FX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9ET05FX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBMRkNMS1NUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0xGQ0xLU1RBUlRFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBMRkNMS1NUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9MRkNMS1NUQVJURURfTXNrICgweDFVTCA8PCBDTE9DS19JTlRFTkNMUl9MRkNMS1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExGQ0xLU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0xGQ0xLU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9MRkNMS1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0xGQ0xLU1RBUlRFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgSEZDTEtTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9IRkNMS1NUQVJURURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgSEZDTEtTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfSEZDTEtTVEFSVEVEX01zayAoMHgxVUwgPDwgQ0xPQ0tfSU5URU5DTFJfSEZDTEtTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBIRkNMS1NUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9IRkNMS1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfSEZDTEtTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9IRkNMS1NUQVJURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IENMT0NLX0hGQ0xLUlVOICovDQorLyogRGVzY3JpcHRpb246IFN0YXR1cyBpbmRpY2F0aW5nIHRoYXQgSEZDTEtTVEFSVCB0YXNrIGhhcyBiZWVuIHRyaWdnZXJlZCAqLw0KKw0KKy8qIEJpdCAwIDogSEZDTEtTVEFSVCB0YXNrIHRyaWdnZXJlZCBvciBub3QgKi8NCisjZGVmaW5lIENMT0NLX0hGQ0xLUlVOX1NUQVRVU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19IRkNMS1JVTl9TVEFUVVNfTXNrICgweDFVTCA8PCBDTE9DS19IRkNMS1JVTl9TVEFUVVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0hGQ0xLUlVOX1NUQVRVU19Ob3RUcmlnZ2VyZWQgKDBVTCkgLyohPCBUYXNrIG5vdCB0cmlnZ2VyZWQgKi8NCisjZGVmaW5lIENMT0NLX0hGQ0xLUlVOX1NUQVRVU19UcmlnZ2VyZWQgKDFVTCkgLyohPCBUYXNrIHRyaWdnZXJlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDTE9DS19IRkNMS1NUQVQgKi8NCisvKiBEZXNjcmlwdGlvbjogSEZDTEsgc3RhdHVzICovDQorDQorLyogQml0IDE2IDogSEZDTEsgc3RhdGUgKi8NCisjZGVmaW5lIENMT0NLX0hGQ0xLU1RBVF9TVEFURV9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgU1RBVEUgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19IRkNMS1NUQVRfU1RBVEVfTXNrICgweDFVTCA8PCBDTE9DS19IRkNMS1NUQVRfU1RBVEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSEZDTEtTVEFUX1NUQVRFX05vdFJ1bm5pbmcgKDBVTCkgLyohPCBIRkNMSyBub3QgcnVubmluZyAqLw0KKyNkZWZpbmUgQ0xPQ0tfSEZDTEtTVEFUX1NUQVRFX1J1bm5pbmcgKDFVTCkgLyohPCBIRkNMSyBydW5uaW5nICovDQorDQorLyogQml0IDAgOiBTb3VyY2Ugb2YgSEZDTEsgKi8NCisjZGVmaW5lIENMT0NLX0hGQ0xLU1RBVF9TUkNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1JDIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSEZDTEtTVEFUX1NSQ19Nc2sgKDB4MVVMIDw8IENMT0NLX0hGQ0xLU1RBVF9TUkNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSQyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0hGQ0xLU1RBVF9TUkNfUkMgKDBVTCkgLyohPCA2NCBNSHogaW50ZXJuYWwgb3NjaWxsYXRvciAoSEZJTlQpICovDQorI2RlZmluZSBDTE9DS19IRkNMS1NUQVRfU1JDX1h0YWwgKDFVTCkgLyohPCA2NCBNSHogY3J5c3RhbCBvc2NpbGxhdG9yIChIRlhPKSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDTE9DS19MRkNMS1JVTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBTdGF0dXMgaW5kaWNhdGluZyB0aGF0IExGQ0xLU1RBUlQgdGFzayBoYXMgYmVlbiB0cmlnZ2VyZWQgKi8NCisNCisvKiBCaXQgMCA6IExGQ0xLU1RBUlQgdGFzayB0cmlnZ2VyZWQgb3Igbm90ICovDQorI2RlZmluZSBDTE9DS19MRkNMS1JVTl9TVEFUVVNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtSVU5fU1RBVFVTX01zayAoMHgxVUwgPDwgQ0xPQ0tfTEZDTEtSVU5fU1RBVFVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1JVTl9TVEFUVVNfTm90VHJpZ2dlcmVkICgwVUwpIC8qITwgVGFzayBub3QgdHJpZ2dlcmVkICovDQorI2RlZmluZSBDTE9DS19MRkNMS1JVTl9TVEFUVVNfVHJpZ2dlcmVkICgxVUwpIC8qITwgVGFzayB0cmlnZ2VyZWQgKi8NCisNCisvKiBSZWdpc3RlcjogQ0xPQ0tfTEZDTEtTVEFUICovDQorLyogRGVzY3JpcHRpb246IExGQ0xLIHN0YXR1cyAqLw0KKw0KKy8qIEJpdCAxNiA6IExGQ0xLIHN0YXRlICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NUQVRfU1RBVEVfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTVEFUX1NUQVRFX01zayAoMHgxVUwgPDwgQ0xPQ0tfTEZDTEtTVEFUX1NUQVRFX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFURSBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1RBVF9TVEFURV9Ob3RSdW5uaW5nICgwVUwpIC8qITwgTEZDTEsgbm90IHJ1bm5pbmcgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1RBVF9TVEFURV9SdW5uaW5nICgxVUwpIC8qITwgTEZDTEsgcnVubmluZyAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IFNvdXJjZSBvZiBMRkNMSyAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTVEFUX1NSQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUkMgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NUQVRfU1JDX01zayAoMHgzVUwgPDwgQ0xPQ0tfTEZDTEtTVEFUX1NSQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1JDIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTVEFUX1NSQ19SQyAoMFVMKSAvKiE8IDMyLjc2OCBrSHogUkMgb3NjaWxsYXRvciAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTVEFUX1NSQ19YdGFsICgxVUwpIC8qITwgMzIuNzY4IGtIeiBjcnlzdGFsIG9zY2lsbGF0b3IgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1RBVF9TUkNfU3ludGggKDJVTCkgLyohPCAzMi43Njgga0h6IHN5bnRoZXNpemVkIGZyb20gSEZDTEsgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1RBVF9TUkNfTEZVTFAgKDNVTCkgLyohPCAzMi43Njgga0h6IHVsdHJhIGxvdyBwb3dlciBSQyBvc2NpbGxhdG9yICovDQorDQorLyogUmVnaXN0ZXI6IENMT0NLX0xGQ0xLU1JDQ09QWSAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb3B5IG9mIExGQ0xLU1JDIHJlZ2lzdGVyLCBzZXQgd2hlbiBMRkNMS1NUQVJUIHRhc2sgd2FzIHRyaWdnZXJlZCAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IENsb2NrIHNvdXJjZSAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNDT1BZX1NSQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUkMgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ0NPUFlfU1JDX01zayAoMHgzVUwgPDwgQ0xPQ0tfTEZDTEtTUkNDT1BZX1NSQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1JDIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNDT1BZX1NSQ19SQyAoMFVMKSAvKiE8IDMyLjc2OCBrSHogUkMgb3NjaWxsYXRvciAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNDT1BZX1NSQ19YdGFsICgxVUwpIC8qITwgMzIuNzY4IGtIeiBjcnlzdGFsIG9zY2lsbGF0b3IgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1JDQ09QWV9TUkNfU3ludGggKDJVTCkgLyohPCAzMi43Njgga0h6IHN5bnRoZXNpemVkIGZyb20gSEZDTEsgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1JDQ09QWV9TUkNfTEZVTFAgKDNVTCkgLyohPCAzMi43Njgga0h6IHVsdHJhIGxvdyBwb3dlciBSQyBvc2NpbGxhdG9yICovDQorDQorLyogUmVnaXN0ZXI6IENMT0NLX0xGQ0xLU1JDICovDQorLyogRGVzY3JpcHRpb246IENsb2NrIHNvdXJjZSBmb3IgdGhlIExGQ0xLICovDQorDQorLyogQml0IDE3IDogRW5hYmxlIG9yIGRpc2FibGUgZXh0ZXJuYWwgc291cmNlIGZvciBMRkNMSyAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNfRVhURVJOQUxfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVYVEVSTkFMIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNfRVhURVJOQUxfTXNrICgweDFVTCA8PCBDTE9DS19MRkNMS1NSQ19FWFRFUk5BTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVhURVJOQUwgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ19FWFRFUk5BTF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgZXh0ZXJuYWwgc291cmNlICh1c2Ugd2l0aCBYdGFsKSAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNfRVhURVJOQUxfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSB1c2Ugb2YgZXh0ZXJuYWwgc291cmNlIGluc3RlYWQgb2YgWHRhbCAoU1JDIG5lZWRzIHRvIGJlIHNldCB0byBYdGFsKSAqLw0KKw0KKy8qIEJpdCAxNiA6IEVuYWJsZSBvciBkaXNhYmxlIGJ5cGFzcyBvZiBMRkNMSyBjcnlzdGFsIG9zY2lsbGF0b3Igd2l0aCBleHRlcm5hbCBjbG9jayBzb3VyY2UgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1JDX0JZUEFTU19Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQllQQVNTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNfQllQQVNTX01zayAoMHgxVUwgPDwgQ0xPQ0tfTEZDTEtTUkNfQllQQVNTX1BvcykgLyohPCBCaXQgbWFzayBvZiBCWVBBU1MgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ19CWVBBU1NfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICh1c2Ugd2l0aCBYdGFsIG9yIGxvdy1zd2luZyBleHRlcm5hbCBzb3VyY2UpICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ19CWVBBU1NfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAodXNlIHdpdGggcmFpbC10by1yYWlsIGV4dGVybmFsIHNvdXJjZSkgKi8NCisNCisvKiBCaXRzIDEuLjAgOiBDbG9jayBzb3VyY2UgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1JDX1NSQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUkMgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ19TUkNfTXNrICgweDNVTCA8PCBDTE9DS19MRkNMS1NSQ19TUkNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSQyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1JDX1NSQ19SQyAoMFVMKSAvKiE8IDMyLjc2OCBrSHogUkMgb3NjaWxsYXRvciAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNfU1JDX1h0YWwgKDFVTCkgLyohPCAzMi43Njgga0h6IGNyeXN0YWwgb3NjaWxsYXRvciAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNfU1JDX1N5bnRoICgyVUwpIC8qITwgMzIuNzY4IGtIeiBzeW50aGVzaXplZCBmcm9tIEhGQ0xLICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ19TUkNfTEZVTFAgKDNVTCkgLyohPCAzMi43Njgga0h6IHVsdHJhIGxvdyBwb3dlciBSQyBvc2NpbGxhdG9yICovDQorDQorLyogUmVnaXN0ZXI6IENMT0NLX0NUSVYgKi8NCisvKiBEZXNjcmlwdGlvbjogQ2FsaWJyYXRpb24gdGltZXIgaW50ZXJ2YWwgKi8NCisNCisvKiBCaXRzIDYuLjAgOiBDYWxpYnJhdGlvbiB0aW1lciBpbnRlcnZhbCBpbiBtdWx0aXBsZSBvZiAwLjI1IHNlY29uZHMuIFJhbmdlOiAwLjI1IHNlY29uZHMgdG8gMzEuNzUgc2Vjb25kcy4gKi8NCisjZGVmaW5lIENMT0NLX0NUSVZfQ1RJVl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDVElWIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfQ1RJVl9DVElWX01zayAoMHg3RlVMIDw8IENMT0NLX0NUSVZfQ1RJVl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1RJViBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogQ0xPQ0tfVFJBQ0VDT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogQ2xvY2tpbmcgb3B0aW9ucyBmb3IgdGhlIFRyYWNlIFBvcnQgZGVidWcgaW50ZXJmYWNlICovDQorDQorLyogQml0cyAxNy4uMTYgOiBQaW4gbXVsdGlwbGV4aW5nIG9mIHRyYWNlIHNpZ25hbHMuICovDQorI2RlZmluZSBDTE9DS19UUkFDRUNPTkZJR19UUkFDRU1VWF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgVFJBQ0VNVVggZmllbGQuICovDQorI2RlZmluZSBDTE9DS19UUkFDRUNPTkZJR19UUkFDRU1VWF9Nc2sgKDB4M1VMIDw8IENMT0NLX1RSQUNFQ09ORklHX1RSQUNFTVVYX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUkFDRU1VWCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX1RSQUNFQ09ORklHX1RSQUNFTVVYX0dQSU8gKDBVTCkgLyohPCBHUElPcyBtdWx0aXBsZXhlZCBvbnRvIGFsbCB0cmFjZS1waW5zICovDQorI2RlZmluZSBDTE9DS19UUkFDRUNPTkZJR19UUkFDRU1VWF9TZXJpYWwgKDFVTCkgLyohPCBTV08gbXVsdGlwbGV4ZWQgb250byBQMC4xOCwgR1BJTyBtdWx0aXBsZXhlZCBvbnRvIG90aGVyIHRyYWNlIHBpbnMgKi8NCisjZGVmaW5lIENMT0NLX1RSQUNFQ09ORklHX1RSQUNFTVVYX1BhcmFsbGVsICgyVUwpIC8qITwgVFJBQ0VDTEsgYW5kIFRSQUNFREFUQSBtdWx0aXBsZXhlZCBvbnRvIFAwLjIwLCBQMC4xOCwgUDAuMTYsIFAwLjE1IGFuZCBQMC4xNC4gKi8NCisNCisvKiBCaXRzIDEuLjAgOiBTcGVlZCBvZiBUcmFjZSBQb3J0IGNsb2NrLiBOb3RlIHRoYXQgdGhlIFRSQUNFQ0xLIHBpbiB3aWxsIG91dHB1dCB0aGlzIGNsb2NrIGRpdmlkZWQgYnkgdHdvLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VQT1JUU1BFRURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVFJBQ0VQT1JUU1BFRUQgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19UUkFDRUNPTkZJR19UUkFDRVBPUlRTUEVFRF9Nc2sgKDB4M1VMIDw8IENMT0NLX1RSQUNFQ09ORklHX1RSQUNFUE9SVFNQRUVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUkFDRVBPUlRTUEVFRCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX1RSQUNFQ09ORklHX1RSQUNFUE9SVFNQRUVEXzMyTUh6ICgwVUwpIC8qITwgMzIgTUh6IFRyYWNlIFBvcnQgY2xvY2sgKFRSQUNFQ0xLID0gMTYgTUh6KSAqLw0KKyNkZWZpbmUgQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VQT1JUU1BFRURfMTZNSHogKDFVTCkgLyohPCAxNiBNSHogVHJhY2UgUG9ydCBjbG9jayAoVFJBQ0VDTEsgPSA4IE1IeikgKi8NCisjZGVmaW5lIENMT0NLX1RSQUNFQ09ORklHX1RSQUNFUE9SVFNQRUVEXzhNSHogKDJVTCkgLyohPCA4IE1IeiBUcmFjZSBQb3J0IGNsb2NrIChUUkFDRUNMSyA9IDQgTUh6KSAqLw0KKyNkZWZpbmUgQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VQT1JUU1BFRURfNE1IeiAoM1VMKSAvKiE8IDQgTUh6IFRyYWNlIFBvcnQgY2xvY2sgKFRSQUNFQ0xLID0gMiBNSHopICovDQorDQorDQorLyogUGVyaXBoZXJhbDogQ09NUCAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb21wYXJhdG9yICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDQgOiBTaG9ydGN1dCBiZXR3ZWVuIENST1NTIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX0NST1NTX1NUT1BfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQ1JPU1NfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX0NST1NTX1NUT1BfTXNrICgweDFVTCA8PCBDT01QX1NIT1JUU19DUk9TU19TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUk9TU19TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9TSE9SVFNfQ1JPU1NfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX0NST1NTX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAzIDogU2hvcnRjdXQgYmV0d2VlbiBVUCBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBDT01QX1NIT1JUU19VUF9TVE9QX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFVQX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBDT01QX1NIT1JUU19VUF9TVE9QX01zayAoMHgxVUwgPDwgQ09NUF9TSE9SVFNfVVBfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVBfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX1VQX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBDT01QX1NIT1JUU19VUF9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMiA6IFNob3J0Y3V0IGJldHdlZW4gRE9XTiBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBDT01QX1NIT1JUU19ET1dOX1NUT1BfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRE9XTl9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9TSE9SVFNfRE9XTl9TVE9QX01zayAoMHgxVUwgPDwgQ09NUF9TSE9SVFNfRE9XTl9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBET1dOX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBDT01QX1NIT1JUU19ET1dOX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBDT01QX1NIT1JUU19ET1dOX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxIDogU2hvcnRjdXQgYmV0d2VlbiBSRUFEWSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBDT01QX1NIT1JUU19SRUFEWV9TVE9QX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBDT01QX1NIT1JUU19SRUFEWV9TVE9QX01zayAoMHgxVUwgPDwgQ09NUF9TSE9SVFNfUkVBRFlfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFlfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX1JFQURZX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBDT01QX1NIT1JUU19SRUFEWV9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMCA6IFNob3J0Y3V0IGJldHdlZW4gUkVBRFkgZXZlbnQgYW5kIFNBTVBMRSB0YXNrICovDQorI2RlZmluZSBDT01QX1NIT1JUU19SRUFEWV9TQU1QTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFlfU0FNUExFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9TSE9SVFNfUkVBRFlfU0FNUExFX01zayAoMHgxVUwgPDwgQ09NUF9TSE9SVFNfUkVBRFlfU0FNUExFX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWV9TQU1QTEUgZmllbGQuICovDQorI2RlZmluZSBDT01QX1NIT1JUU19SRUFEWV9TQU1QTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBDT01QX1NIT1JUU19SRUFEWV9TQU1QTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDT01QX0lOVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAzIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDUk9TUyBldmVudCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTl9DUk9TU19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBDUk9TUyBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSU5URU5fQ1JPU1NfTXNrICgweDFVTCA8PCBDT01QX0lOVEVOX0NST1NTX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUk9TUyBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSU5URU5fQ1JPU1NfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBDT01QX0lOVEVOX0NST1NTX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVVAgZXZlbnQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5fVVBfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgVVAgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOX1VQX01zayAoMHgxVUwgPDwgQ09NUF9JTlRFTl9VUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVAgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOX1VQX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTl9VUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIERPV04gZXZlbnQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5fRE9XTl9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBET1dOIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTl9ET1dOX01zayAoMHgxVUwgPDwgQ09NUF9JTlRFTl9ET1dOX1BvcykgLyohPCBCaXQgbWFzayBvZiBET1dOIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTl9ET1dOX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTl9ET1dOX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5fUkVBRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOX1JFQURZX01zayAoMHgxVUwgPDwgQ09NUF9JTlRFTl9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOX1JFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTl9SRUFEWV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENST1NTIGV2ZW50ICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX0NST1NTX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENST1NTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTlNFVF9DUk9TU19Nc2sgKDB4MVVMIDw8IENPTVBfSU5URU5TRVRfQ1JPU1NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENST1NTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTlNFVF9DUk9TU19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX0NST1NTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX0NST1NTX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFVQIGV2ZW50ICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX1VQX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTlNFVF9VUF9Nc2sgKDB4MVVMIDw8IENPTVBfSU5URU5TRVRfVVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTlNFVF9VUF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX1VQX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX1VQX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIERPV04gZXZlbnQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5TRVRfRE9XTl9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBET1dOIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTlNFVF9ET1dOX01zayAoMHgxVUwgPDwgQ09NUF9JTlRFTlNFVF9ET1dOX1BvcykgLyohPCBCaXQgbWFzayBvZiBET1dOIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTlNFVF9ET1dOX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5TRVRfRE9XTl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTlNFVF9ET1dOX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJFQURZIGV2ZW50ICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX1JFQURZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTlNFVF9SRUFEWV9Nc2sgKDB4MVVMIDw8IENPTVBfSU5URU5TRVRfUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTlNFVF9SRUFEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX1JFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX1JFQURZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDT01QX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENST1NTIGV2ZW50ICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX0NST1NTX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENST1NTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTkNMUl9DUk9TU19Nc2sgKDB4MVVMIDw8IENPTVBfSU5URU5DTFJfQ1JPU1NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENST1NTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTkNMUl9DUk9TU19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX0NST1NTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX0NST1NTX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBVUCBldmVudCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTkNMUl9VUF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBVUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSU5URU5DTFJfVVBfTXNrICgweDFVTCA8PCBDT01QX0lOVEVOQ0xSX1VQX1BvcykgLyohPCBCaXQgbWFzayBvZiBVUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSU5URU5DTFJfVVBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTkNMUl9VUF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTkNMUl9VUF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRE9XTiBldmVudCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTkNMUl9ET1dOX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIERPV04gZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX0RPV05fTXNrICgweDFVTCA8PCBDT01QX0lOVEVOQ0xSX0RPV05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERPV04gZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX0RPV05fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTkNMUl9ET1dOX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX0RPV05fQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFQURZIGV2ZW50ICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX1JFQURZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTkNMUl9SRUFEWV9Nc2sgKDB4MVVMIDw8IENPTVBfSU5URU5DTFJfUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTkNMUl9SRUFEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX1JFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX1JFQURZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDT01QX1JFU1VMVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb21wYXJlIHJlc3VsdCAqLw0KKw0KKy8qIEJpdCAwIDogUmVzdWx0IG9mIGxhc3QgY29tcGFyZS4gRGVjaXNpb24gcG9pbnQgU0FNUExFIHRhc2suICovDQorI2RlZmluZSBDT01QX1JFU1VMVF9SRVNVTFRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVTVUxUIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9SRVNVTFRfUkVTVUxUX01zayAoMHgxVUwgPDwgQ09NUF9SRVNVTFRfUkVTVUxUX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNVTFQgZmllbGQuICovDQorI2RlZmluZSBDT01QX1JFU1VMVF9SRVNVTFRfQmVsb3cgKDBVTCkgLyohPCBJbnB1dCB2b2x0YWdlIGlzIGJlbG93IHRoZSB0aHJlc2hvbGQgKFZJTisgJmx0OyBWSU4tKSAqLw0KKyNkZWZpbmUgQ09NUF9SRVNVTFRfUkVTVUxUX0Fib3ZlICgxVUwpIC8qITwgSW5wdXQgdm9sdGFnZSBpcyBhYm92ZSB0aGUgdGhyZXNob2xkIChWSU4rICZndDsgVklOLSkgKi8NCisNCisvKiBSZWdpc3RlcjogQ09NUF9FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogQ09NUCBlbmFibGUgKi8NCisNCisvKiBCaXRzIDEuLjAgOiBFbmFibGUgb3IgZGlzYWJsZSBDT01QICovDQorI2RlZmluZSBDT01QX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9FTkFCTEVfRU5BQkxFX01zayAoMHgzVUwgPDwgQ09NUF9FTkFCTEVfRU5BQkxFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBDT01QX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBDT01QX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoMlVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDT01QX1BTRUwgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCAqLw0KKw0KKy8qIEJpdHMgMi4uMCA6IEFuYWxvZyBwaW4gc2VsZWN0ICovDQorI2RlZmluZSBDT01QX1BTRUxfUFNFTF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9QU0VMX1BTRUxfTXNrICgweDdVTCA8PCBDT01QX1BTRUxfUFNFTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFNFTCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfUFNFTF9QU0VMX0FuYWxvZ0lucHV0MCAoMFVMKSAvKiE8IEFJTjAgc2VsZWN0ZWQgYXMgYW5hbG9nIGlucHV0ICovDQorI2RlZmluZSBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDEgKDFVTCkgLyohPCBBSU4xIHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKyNkZWZpbmUgQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQyICgyVUwpIC8qITwgQUlOMiBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIENPTVBfUFNFTF9QU0VMX0FuYWxvZ0lucHV0MyAoM1VMKSAvKiE8IEFJTjMgc2VsZWN0ZWQgYXMgYW5hbG9nIGlucHV0ICovDQorI2RlZmluZSBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDQgKDRVTCkgLyohPCBBSU40IHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKyNkZWZpbmUgQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQ1ICg1VUwpIC8qITwgQUlONSBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIENPTVBfUFNFTF9QU0VMX0FuYWxvZ0lucHV0NiAoNlVMKSAvKiE8IEFJTjYgc2VsZWN0ZWQgYXMgYW5hbG9nIGlucHV0ICovDQorI2RlZmluZSBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDcgKDdVTCkgLyohPCBBSU43IHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDT01QX1JFRlNFTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWZlcmVuY2Ugc291cmNlIHNlbGVjdCAqLw0KKw0KKy8qIEJpdHMgMi4uMCA6IFJlZmVyZW5jZSBzZWxlY3QgKi8NCisjZGVmaW5lIENPTVBfUkVGU0VMX1JFRlNFTF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUZTRUwgZmllbGQuICovDQorI2RlZmluZSBDT01QX1JFRlNFTF9SRUZTRUxfTXNrICgweDdVTCA8PCBDT01QX1JFRlNFTF9SRUZTRUxfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFRlNFTCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfUkVGU0VMX1JFRlNFTF9JbnQxVjIgKDBVTCkgLyohPCBWUkVGID0gaW50ZXJuYWwgMS4yIFYgcmVmZXJlbmNlIChWREQgJmd0Oz0gMS43IFYpICovDQorI2RlZmluZSBDT01QX1JFRlNFTF9SRUZTRUxfSW50MVY4ICgxVUwpIC8qITwgVlJFRiA9IGludGVybmFsIDEuOCBWIHJlZmVyZW5jZSAoVkREICZndDs9IFZSRUYgKyAwLjIgVikgKi8NCisjZGVmaW5lIENPTVBfUkVGU0VMX1JFRlNFTF9JbnQyVjQgKDJVTCkgLyohPCBWUkVGID0gaW50ZXJuYWwgMi40IFYgcmVmZXJlbmNlIChWREQgJmd0Oz0gVlJFRiArIDAuMiBWKSAqLw0KKyNkZWZpbmUgQ09NUF9SRUZTRUxfUkVGU0VMX1ZERCAoNFVMKSAvKiE8IFZSRUYgPSBWREQgKi8NCisjZGVmaW5lIENPTVBfUkVGU0VMX1JFRlNFTF9BUmVmICg3VUwpIC8qITwgVlJFRiA9IEFSRUYgKFZERCAmZ3Q7PSBWUkVGICZndDs9IEFSRUZNSU4pICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfRVhUUkVGU0VMICovDQorLyogRGVzY3JpcHRpb246IEV4dGVybmFsIHJlZmVyZW5jZSBzZWxlY3QgKi8NCisNCisvKiBCaXQgMCA6IEV4dGVybmFsIGFuYWxvZyByZWZlcmVuY2Ugc2VsZWN0ICovDQorI2RlZmluZSBDT01QX0VYVFJFRlNFTF9FWFRSRUZTRUxfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVhUUkVGU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9FWFRSRUZTRUxfRVhUUkVGU0VMX01zayAoMHgxVUwgPDwgQ09NUF9FWFRSRUZTRUxfRVhUUkVGU0VMX1BvcykgLyohPCBCaXQgbWFzayBvZiBFWFRSRUZTRUwgZmllbGQuICovDQorI2RlZmluZSBDT01QX0VYVFJFRlNFTF9FWFRSRUZTRUxfQW5hbG9nUmVmZXJlbmNlMCAoMFVMKSAvKiE8IFVzZSBBSU4wIGFzIGV4dGVybmFsIGFuYWxvZyByZWZlcmVuY2UgKi8NCisjZGVmaW5lIENPTVBfRVhUUkVGU0VMX0VYVFJFRlNFTF9BbmFsb2dSZWZlcmVuY2UxICgxVUwpIC8qITwgVXNlIEFJTjEgYXMgZXh0ZXJuYWwgYW5hbG9nIHJlZmVyZW5jZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDT01QX1RIICovDQorLyogRGVzY3JpcHRpb246IFRocmVzaG9sZCBjb25maWd1cmF0aW9uIGZvciBoeXN0ZXJlc2lzIHVuaXQgKi8NCisNCisvKiBCaXRzIDEzLi44IDogVlVQID0gKFRIVVArMSkvNjQqVlJFRiAqLw0KKyNkZWZpbmUgQ09NUF9USF9USFVQX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRIVVAgZmllbGQuICovDQorI2RlZmluZSBDT01QX1RIX1RIVVBfTXNrICgweDNGVUwgPDwgQ09NUF9USF9USFVQX1BvcykgLyohPCBCaXQgbWFzayBvZiBUSFVQIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNS4uMCA6IFZET1dOID0gKFRIRE9XTisxKS82NCpWUkVGICovDQorI2RlZmluZSBDT01QX1RIX1RIRE9XTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUSERPV04gZmllbGQuICovDQorI2RlZmluZSBDT01QX1RIX1RIRE9XTl9Nc2sgKDB4M0ZVTCA8PCBDT01QX1RIX1RIRE9XTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVEhET1dOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDT01QX01PREUgKi8NCisvKiBEZXNjcmlwdGlvbjogTW9kZSBjb25maWd1cmF0aW9uICovDQorDQorLyogQml0IDggOiBNYWluIG9wZXJhdGlvbiBtb2RlICovDQorI2RlZmluZSBDT01QX01PREVfTUFJTl9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBNQUlOIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9NT0RFX01BSU5fTXNrICgweDFVTCA8PCBDT01QX01PREVfTUFJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFJTiBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfTU9ERV9NQUlOX1NFICgwVUwpIC8qITwgU2luZ2xlIGVuZGVkIG1vZGUgKi8NCisjZGVmaW5lIENPTVBfTU9ERV9NQUlOX0RpZmYgKDFVTCkgLyohPCBEaWZmZXJlbnRpYWwgbW9kZSAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IFNwZWVkIGFuZCBwb3dlciBtb2RlICovDQorI2RlZmluZSBDT01QX01PREVfU1BfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1AgZmllbGQuICovDQorI2RlZmluZSBDT01QX01PREVfU1BfTXNrICgweDNVTCA8PCBDT01QX01PREVfU1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNQIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9NT0RFX1NQX0xvdyAoMFVMKSAvKiE8IExvdyBwb3dlciBtb2RlICovDQorI2RlZmluZSBDT01QX01PREVfU1BfTm9ybWFsICgxVUwpIC8qITwgTm9ybWFsIG1vZGUgKi8NCisjZGVmaW5lIENPTVBfTU9ERV9TUF9IaWdoICgyVUwpIC8qITwgSGlnaCBzcGVlZCBtb2RlICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfSFlTVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb21wYXJhdG9yIGh5c3RlcmVzaXMgZW5hYmxlICovDQorDQorLyogQml0IDAgOiBDb21wYXJhdG9yIGh5c3RlcmVzaXMgKi8NCisjZGVmaW5lIENPTVBfSFlTVF9IWVNUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEhZU1QgZmllbGQuICovDQorI2RlZmluZSBDT01QX0hZU1RfSFlTVF9Nc2sgKDB4MVVMIDw8IENPTVBfSFlTVF9IWVNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBIWVNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9IWVNUX0hZU1RfTm9IeXN0ICgwVUwpIC8qITwgQ29tcGFyYXRvciBoeXN0ZXJlc2lzIGRpc2FibGVkICovDQorI2RlZmluZSBDT01QX0hZU1RfSFlTVF9IeXN0NTBtViAoMVVMKSAvKiE8IENvbXBhcmF0b3IgaHlzdGVyZXNpcyBlbmFibGVkICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfSVNPVVJDRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBDdXJyZW50IHNvdXJjZSBzZWxlY3Qgb24gYW5hbG9nIGlucHV0ICovDQorDQorLyogQml0cyAxLi4wIDogQ29tcGFyYXRvciBoeXN0ZXJlc2lzICovDQorI2RlZmluZSBDT01QX0lTT1VSQ0VfSVNPVVJDRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBJU09VUkNFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JU09VUkNFX0lTT1VSQ0VfTXNrICgweDNVTCA8PCBDT01QX0lTT1VSQ0VfSVNPVVJDRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSVNPVVJDRSBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSVNPVVJDRV9JU09VUkNFX09mZiAoMFVMKSAvKiE8IEN1cnJlbnQgc291cmNlIGRpc2FibGVkICovDQorI2RlZmluZSBDT01QX0lTT1VSQ0VfSVNPVVJDRV9JZW4ybUE1ICgxVUwpIC8qITwgQ3VycmVudCBzb3VyY2UgZW5hYmxlZCAoKy8tIDIuNSB1QSkgKi8NCisjZGVmaW5lIENPTVBfSVNPVVJDRV9JU09VUkNFX0llbjVtQSAoMlVMKSAvKiE8IEN1cnJlbnQgc291cmNlIGVuYWJsZWQgKCsvLSA1IHVBKSAqLw0KKyNkZWZpbmUgQ09NUF9JU09VUkNFX0lTT1VSQ0VfSWVuMTBtQSAoM1VMKSAvKiE8IEN1cnJlbnQgc291cmNlIGVuYWJsZWQgKCsvLSAxMCB1QSkgKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBDUllQVE9DRUxMICovDQorLyogRGVzY3JpcHRpb246IEFSTSBDcnlwdG9DZWxsIHJlZ2lzdGVyIGludGVyZmFjZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDUllQVE9DRUxMX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb250cm9sIHBvd2VyIGFuZCBjbG9jayBmb3IgQVJNIENyeXB0b0NlbGwgc3Vic3lzdGVtICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgQ3J5cHRvQ2VsbCBzdWJzeXN0ZW0gKi8NCisjZGVmaW5lIENSWVBUT0NFTExfRU5BQkxFX0VOQUJMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBDUllQVE9DRUxMX0VOQUJMRV9FTkFCTEVfTXNrICgweDFVTCA8PCBDUllQVE9DRUxMX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIENSWVBUT0NFTExfRU5BQkxFX0VOQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IENyeXB0b0NlbGwgc3Vic3lzdGVtIGRpc2FibGVkICovDQorI2RlZmluZSBDUllQVE9DRUxMX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoMVVMKSAvKiE8IENyeXB0b0NlbGwgc3Vic3lzdGVtIGVuYWJsZWQgKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBFQ0IgKi8NCisvKiBEZXNjcmlwdGlvbjogQUVTIEVDQiBNb2RlIEVuY3J5cHRpb24gKi8NCisNCisvKiBSZWdpc3RlcjogRUNCX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFUlJPUkVDQiBldmVudCAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOU0VUX0VSUk9SRUNCX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SRUNCIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOU0VUX0VSUk9SRUNCX01zayAoMHgxVUwgPDwgRUNCX0lOVEVOU0VUX0VSUk9SRUNCX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUkVDQiBmaWVsZC4gKi8NCisjZGVmaW5lIEVDQl9JTlRFTlNFVF9FUlJPUkVDQl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFQ0JfSU5URU5TRVRfRVJST1JFQ0JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVDQl9JTlRFTlNFVF9FUlJPUkVDQl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRFQ0IgZXZlbnQgKi8NCisjZGVmaW5lIEVDQl9JTlRFTlNFVF9FTkRFQ0JfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERUNCIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOU0VUX0VOREVDQl9Nc2sgKDB4MVVMIDw8IEVDQl9JTlRFTlNFVF9FTkRFQ0JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVDQiBmaWVsZC4gKi8NCisjZGVmaW5lIEVDQl9JTlRFTlNFVF9FTkRFQ0JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOU0VUX0VOREVDQl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOU0VUX0VOREVDQl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogRUNCX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SRUNCIGV2ZW50ICovDQorI2RlZmluZSBFQ0JfSU5URU5DTFJfRVJST1JFQ0JfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1JFQ0IgZmllbGQuICovDQorI2RlZmluZSBFQ0JfSU5URU5DTFJfRVJST1JFQ0JfTXNrICgweDFVTCA8PCBFQ0JfSU5URU5DTFJfRVJST1JFQ0JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SRUNCIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOQ0xSX0VSUk9SRUNCX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVDQl9JTlRFTkNMUl9FUlJPUkVDQl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOQ0xSX0VSUk9SRUNCX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFQ0IgZXZlbnQgKi8NCisjZGVmaW5lIEVDQl9JTlRFTkNMUl9FTkRFQ0JfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERUNCIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOQ0xSX0VOREVDQl9Nc2sgKDB4MVVMIDw8IEVDQl9JTlRFTkNMUl9FTkRFQ0JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVDQiBmaWVsZC4gKi8NCisjZGVmaW5lIEVDQl9JTlRFTkNMUl9FTkRFQ0JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOQ0xSX0VOREVDQl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOQ0xSX0VOREVDQl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogRUNCX0VDQkRBVEFQVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRUNCIGJsb2NrIGVuY3J5cHQgbWVtb3J5IHBvaW50ZXJzICovDQorDQorLyogQml0cyAzMS4uMCA6IFBvaW50ZXIgdG8gdGhlIEVDQiBkYXRhIHN0cnVjdHVyZSAoc2VlIFRhYmxlIDEgRUNCIGRhdGEgc3RydWN0dXJlIG92ZXJ2aWV3KSAqLw0KKyNkZWZpbmUgRUNCX0VDQkRBVEFQVFJfRUNCREFUQVBUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFQ0JEQVRBUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUNCX0VDQkRBVEFQVFJfRUNCREFUQVBUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBFQ0JfRUNCREFUQVBUUl9FQ0JEQVRBUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBFQ0JEQVRBUFRSIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IEVHVSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFdmVudCBHZW5lcmF0b3IgVW5pdCAwICovDQorDQorLyogUmVnaXN0ZXI6IEVHVV9JTlRFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMTUgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxNV0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxNV9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTUgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTVfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVEMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDE1X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDE1X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTQgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxNF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTQgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTRfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVEMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDE0X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDE0X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTMgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxM10gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTMgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTNfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVEMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDEzX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDEzX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxMl0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTIgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTJfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVEMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDEyX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDEyX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxMV0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTEgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTFfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVEMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDExIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDExX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDExX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxMF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTAgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTBfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVEMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDEwX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDEwX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgOSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzldIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEOV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQ5IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDlfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVEOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEOSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ5X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDlfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbOF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ4X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDggZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEOF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQ4X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ4IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEOF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs3XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVENyBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ3X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOX1RSSUdHRVJFRDdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDcgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEN19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ3X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzZdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVENl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDZfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVENl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVENiBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ2X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDZfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbNV0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDUgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVENV9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQ1X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVENV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs0XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVENCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ0X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOX1RSSUdHRVJFRDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDQgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVENF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ0X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzNdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDNfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVEM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMyBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQzX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMl0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDIgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMl9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQyX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDJfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOX1RSSUdHRVJFRDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDEgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzBdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDBfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVEMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQwX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBFR1VfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAxNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMTVdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTVfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDE1X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQxNSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxNV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxNV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzE0XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDE0X1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxNCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxNF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTQgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDE0X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxM10gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTMgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTNfTXNrICgweDFVTCA8PCBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEzX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMTJdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEyX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQxMiBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzExXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDExX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxMSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMV9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTEgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDExX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxMF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTAgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTBfTXNrICgweDFVTCA8PCBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEwX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs5XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDlfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEOSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ5X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDkgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEOV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEOV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDggOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzhdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEOF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQ4IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDhfTXNrICgweDFVTCA8PCBFR1VfSU5URU5TRVRfVFJJR0dFUkVEOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEOCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ4X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ4X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEOF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbN10gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ3X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDcgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEN19Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ3X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDdfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ3X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs2XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVENiBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ2X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDYgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDZfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzVdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDVfTXNrICgweDFVTCA8PCBFR1VfSU5URU5TRVRfVFJJR0dFUkVENV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVENSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ1X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ1X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbNF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ0X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDQgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ0X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ0X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFszXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMyBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQzX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDMgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzJdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDJfTXNrICgweDFVTCA8PCBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMiBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQyX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMV0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDEgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMV9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFswXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQwX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDAgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDBfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IEVHVV9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAxNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzE1XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxNSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxNV9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTUgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDE1X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTVfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMTRdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDE0X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQxNCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxNF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxNF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxM10gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTMgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTNfTXNrICgweDFVTCA8PCBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEzX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzEyXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxMiBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMl9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTIgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEyX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTJfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDExIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMTFdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDExIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDExX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDExX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQxMSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxMF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTAgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTBfTXNrICgweDFVTCA8PCBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEwX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbOV0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ5X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDkgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEOV9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ5X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ5IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ5X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbOF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ4X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDggZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEOF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ4X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ4IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ4X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbN10gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ3X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDcgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEN19Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ3X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDdfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ3X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbNl0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ2X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDYgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVENl9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ2X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDZfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ2X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbNV0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDUgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVENV9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ1X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ1X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbNF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ0X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDQgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVENF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ0X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ0X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbM10gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQzX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDMgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEM19Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQzX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQzX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMl0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDIgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMl9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQyX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQyX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMV0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDEgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMV9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDAgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQwX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IEZJQ1IgKi8NCisvKiBEZXNjcmlwdGlvbjogRmFjdG9yeSBJbmZvcm1hdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX0NPREVQQUdFU0laRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb2RlIG1lbW9yeSBwYWdlIHNpemUgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogQ29kZSBtZW1vcnkgcGFnZSBzaXplICovDQorI2RlZmluZSBGSUNSX0NPREVQQUdFU0laRV9DT0RFUEFHRVNJWkVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ09ERVBBR0VTSVpFIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9DT0RFUEFHRVNJWkVfQ09ERVBBR0VTSVpFX01zayAoMHhGRkZGRkZGRlVMIDw8IEZJQ1JfQ09ERVBBR0VTSVpFX0NPREVQQUdFU0laRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09ERVBBR0VTSVpFIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX0NPREVTSVpFICovDQorLyogRGVzY3JpcHRpb246IENvZGUgbWVtb3J5IHNpemUgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogQ29kZSBtZW1vcnkgc2l6ZSBpbiBudW1iZXIgb2YgcGFnZXMgKi8NCisjZGVmaW5lIEZJQ1JfQ09ERVNJWkVfQ09ERVNJWkVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ09ERVNJWkUgZmllbGQuICovDQorI2RlZmluZSBGSUNSX0NPREVTSVpFX0NPREVTSVpFX01zayAoMHhGRkZGRkZGRlVMIDw8IEZJQ1JfQ09ERVNJWkVfQ09ERVNJWkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPREVTSVpFIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX0RFVklDRUlEICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBEZXZpY2UgaWRlbnRpZmllciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiA2NCBiaXQgdW5pcXVlIGRldmljZSBpZGVudGlmaWVyICovDQorI2RlZmluZSBGSUNSX0RFVklDRUlEX0RFVklDRUlEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERFVklDRUlEIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ERVZJQ0VJRF9ERVZJQ0VJRF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBGSUNSX0RFVklDRUlEX0RFVklDRUlEX1BvcykgLyohPCBCaXQgbWFzayBvZiBERVZJQ0VJRCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9FUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgRW5jcnlwdGlvbiByb290LCB3b3JkIDAgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogRW5jcnlwdGlvbiByb290LCB3b3JkIDAgKi8NCisjZGVmaW5lIEZJQ1JfRVJfRVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVIgZmllbGQuICovDQorI2RlZmluZSBGSUNSX0VSX0VSX01zayAoMHhGRkZGRkZGRlVMIDw8IEZJQ1JfRVJfRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX0lSICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBJZGVudGl0eSBSb290LCB3b3JkIDAgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogSWRlbnRpdHkgUm9vdCwgd29yZCAwICovDQorI2RlZmluZSBGSUNSX0lSX0lSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIElSIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9JUl9JUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBGSUNSX0lSX0lSX1BvcykgLyohPCBCaXQgbWFzayBvZiBJUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9ERVZJQ0VBRERSVFlQRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXZpY2UgYWRkcmVzcyB0eXBlICovDQorDQorLyogQml0IDAgOiBEZXZpY2UgYWRkcmVzcyB0eXBlICovDQorI2RlZmluZSBGSUNSX0RFVklDRUFERFJUWVBFX0RFVklDRUFERFJUWVBFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERFVklDRUFERFJUWVBFIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ERVZJQ0VBRERSVFlQRV9ERVZJQ0VBRERSVFlQRV9Nc2sgKDB4MVVMIDw8IEZJQ1JfREVWSUNFQUREUlRZUEVfREVWSUNFQUREUlRZUEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERFVklDRUFERFJUWVBFIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ERVZJQ0VBRERSVFlQRV9ERVZJQ0VBRERSVFlQRV9QdWJsaWMgKDBVTCkgLyohPCBQdWJsaWMgYWRkcmVzcyAqLw0KKyNkZWZpbmUgRklDUl9ERVZJQ0VBRERSVFlQRV9ERVZJQ0VBRERSVFlQRV9SYW5kb20gKDFVTCkgLyohPCBSYW5kb20gYWRkcmVzcyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX0RFVklDRUFERFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIERldmljZSBhZGRyZXNzIDAgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogNDggYml0IGRldmljZSBhZGRyZXNzICovDQorI2RlZmluZSBGSUNSX0RFVklDRUFERFJfREVWSUNFQUREUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBERVZJQ0VBRERSIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ERVZJQ0VBRERSX0RFVklDRUFERFJfTXNrICgweEZGRkZGRkZGVUwgPDwgRklDUl9ERVZJQ0VBRERSX0RFVklDRUFERFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERFVklDRUFERFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfSU5GT19QQVJUICovDQorLyogRGVzY3JpcHRpb246IFBhcnQgY29kZSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBQYXJ0IGNvZGUgKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19QQVJUX1BBUlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19QQVJUX1BBUlRfTXNrICgweEZGRkZGRkZGVUwgPDwgRklDUl9JTkZPX1BBUlRfUEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19QQVJUX1BBUlRfTjUyODQwICgweDUyODQwVUwpIC8qITwgblJGNTI4NDAgKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19QQVJUX1BBUlRfVW5zcGVjaWZpZWQgKDB4RkZGRkZGRkZVTCkgLyohPCBVbnNwZWNpZmllZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX0lORk9fVkFSSUFOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBQYXJ0IHZhcmlhbnQgKGhhcmR3YXJlIHZlcnNpb24gYW5kIHByb2R1Y3Rpb24gY29uZmlndXJhdGlvbikuICovDQorDQorLyogQml0cyAzMS4uMCA6IFBhcnQgdmFyaWFudCAoaGFyZHdhcmUgdmVyc2lvbiBhbmQgcHJvZHVjdGlvbiBjb25maWd1cmF0aW9uKS4gRW5jb2RlZCBhcyBBU0NJSS4gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19WQVJJQU5UX1ZBUklBTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVkFSSUFOVCBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19WQVJJQU5UX1ZBUklBTlRfTXNrICgweEZGRkZGRkZGVUwgPDwgRklDUl9JTkZPX1ZBUklBTlRfVkFSSUFOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVkFSSUFOVCBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19WQVJJQU5UX1ZBUklBTlRfQUFBQSAoMHg0MTQxNDE0MVVMKSAvKiE8IEFBQUEgKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19WQVJJQU5UX1ZBUklBTlRfQUFBQiAoMHg0MTQxNDE0MlVMKSAvKiE8IEFBQUIgKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19WQVJJQU5UX1ZBUklBTlRfQUFCMCAoMHg0MTQxNDIzMFVMKSAvKiE8IEFBQjAgKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19WQVJJQU5UX1ZBUklBTlRfQUFCQSAoMHg0MTQxNDI0MVVMKSAvKiE8IEFBQkEgKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19WQVJJQU5UX1ZBUklBTlRfQUFCQiAoMHg0MTQxNDI0MlVMKSAvKiE8IEFBQkIgKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19WQVJJQU5UX1ZBUklBTlRfQUJCQSAoMHg0MTQyNDI0MVVMKSAvKiE8IEFCQkEgKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19WQVJJQU5UX1ZBUklBTlRfVW5zcGVjaWZpZWQgKDB4RkZGRkZGRkZVTCkgLyohPCBVbnNwZWNpZmllZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX0lORk9fUEFDS0FHRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQYWNrYWdlIG9wdGlvbiAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBQYWNrYWdlIG9wdGlvbiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1BBQ0tBR0VfUEFDS0FHRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQQUNLQUdFIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1BBQ0tBR0VfUEFDS0FHRV9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBGSUNSX0lORk9fUEFDS0FHRV9QQUNLQUdFX1BvcykgLyohPCBCaXQgbWFzayBvZiBQQUNLQUdFIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1BBQ0tBR0VfUEFDS0FHRV9RSSAoMHgyMDA0VUwpIC8qITwgUUl4eCAtIDczLXBpbiBhUUZOICovDQorI2RlZmluZSBGSUNSX0lORk9fUEFDS0FHRV9QQUNLQUdFX1Vuc3BlY2lmaWVkICgweEZGRkZGRkZGVUwpIC8qITwgVW5zcGVjaWZpZWQgKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9JTkZPX1JBTSAqLw0KKy8qIERlc2NyaXB0aW9uOiBSQU0gdmFyaWFudCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBSQU0gdmFyaWFudCAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1JBTV9SQU1fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkFNIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1JBTV9SQU1fTXNrICgweEZGRkZGRkZGVUwgPDwgRklDUl9JTkZPX1JBTV9SQU1fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJBTSBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19SQU1fUkFNX0sxNiAoMHgxMFVMKSAvKiE8IDE2IGtCeXRlIFJBTSAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1JBTV9SQU1fSzMyICgweDIwVUwpIC8qITwgMzIga0J5dGUgUkFNICovDQorI2RlZmluZSBGSUNSX0lORk9fUkFNX1JBTV9LNjQgKDB4NDBVTCkgLyohPCA2NCBrQnl0ZSBSQU0gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19SQU1fUkFNX0sxMjggKDB4ODBVTCkgLyohPCAxMjgga0J5dGUgUkFNICovDQorI2RlZmluZSBGSUNSX0lORk9fUkFNX1JBTV9LMjU2ICgweDEwMFVMKSAvKiE8IDI1NiBrQnl0ZSBSQU0gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19SQU1fUkFNX1Vuc3BlY2lmaWVkICgweEZGRkZGRkZGVUwpIC8qITwgVW5zcGVjaWZpZWQgKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9JTkZPX0ZMQVNIICovDQorLyogRGVzY3JpcHRpb246IEZsYXNoIHZhcmlhbnQgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogRmxhc2ggdmFyaWFudCAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX0ZMQVNIX0ZMQVNIX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZMQVNIIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX0ZMQVNIX0ZMQVNIX01zayAoMHhGRkZGRkZGRlVMIDw8IEZJQ1JfSU5GT19GTEFTSF9GTEFTSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRkxBU0ggZmllbGQuICovDQorI2RlZmluZSBGSUNSX0lORk9fRkxBU0hfRkxBU0hfSzEyOCAoMHg4MFVMKSAvKiE8IDEyOCBrQnl0ZSBGTEFTSCAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX0ZMQVNIX0ZMQVNIX0syNTYgKDB4MTAwVUwpIC8qITwgMjU2IGtCeXRlIEZMQVNIICovDQorI2RlZmluZSBGSUNSX0lORk9fRkxBU0hfRkxBU0hfSzUxMiAoMHgyMDBVTCkgLyohPCA1MTIga0J5dGUgRkxBU0ggKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19GTEFTSF9GTEFTSF9LMTAyNCAoMHg0MDBVTCkgLyohPCAxIE1CeXRlIEZMQVNIICovDQorI2RlZmluZSBGSUNSX0lORk9fRkxBU0hfRkxBU0hfSzIwNDggKDB4ODAwVUwpIC8qITwgMiBNQnl0ZSBGTEFTSCAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX0ZMQVNIX0ZMQVNIX1Vuc3BlY2lmaWVkICgweEZGRkZGRkZGVUwpIC8qITwgVW5zcGVjaWZpZWQgKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX0EwICovDQorLyogRGVzY3JpcHRpb246IFNsb3BlIGRlZmluaXRpb24gQTAuICovDQorDQorLyogQml0cyAxMS4uMCA6IEEgKHNsb3BlIGRlZmluaXRpb24pIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0EwX0FfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQSBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9BMF9BX01zayAoMHhGRkZVTCA8PCBGSUNSX1RFTVBfQTBfQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX0ExICovDQorLyogRGVzY3JpcHRpb246IFNsb3BlIGRlZmluaXRpb24gQTEuICovDQorDQorLyogQml0cyAxMS4uMCA6IEEgKHNsb3BlIGRlZmluaXRpb24pIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0ExX0FfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQSBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9BMV9BX01zayAoMHhGRkZVTCA8PCBGSUNSX1RFTVBfQTFfQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX0EyICovDQorLyogRGVzY3JpcHRpb246IFNsb3BlIGRlZmluaXRpb24gQTIuICovDQorDQorLyogQml0cyAxMS4uMCA6IEEgKHNsb3BlIGRlZmluaXRpb24pIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0EyX0FfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQSBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9BMl9BX01zayAoMHhGRkZVTCA8PCBGSUNSX1RFTVBfQTJfQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX0EzICovDQorLyogRGVzY3JpcHRpb246IFNsb3BlIGRlZmluaXRpb24gQTMuICovDQorDQorLyogQml0cyAxMS4uMCA6IEEgKHNsb3BlIGRlZmluaXRpb24pIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0EzX0FfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQSBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9BM19BX01zayAoMHhGRkZVTCA8PCBGSUNSX1RFTVBfQTNfQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX0E0ICovDQorLyogRGVzY3JpcHRpb246IFNsb3BlIGRlZmluaXRpb24gQTQuICovDQorDQorLyogQml0cyAxMS4uMCA6IEEgKHNsb3BlIGRlZmluaXRpb24pIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0E0X0FfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQSBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9BNF9BX01zayAoMHhGRkZVTCA8PCBGSUNSX1RFTVBfQTRfQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX0E1ICovDQorLyogRGVzY3JpcHRpb246IFNsb3BlIGRlZmluaXRpb24gQTUuICovDQorDQorLyogQml0cyAxMS4uMCA6IEEgKHNsb3BlIGRlZmluaXRpb24pIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0E1X0FfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQSBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9BNV9BX01zayAoMHhGRkZVTCA8PCBGSUNSX1RFTVBfQTVfQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX0IwICovDQorLyogRGVzY3JpcHRpb246IHktaW50ZXJjZXB0IEIwLiAqLw0KKw0KKy8qIEJpdHMgMTMuLjAgOiBCICh5LWludGVyY2VwdCkgKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9CMF9CX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEIgZmllbGQuICovDQorI2RlZmluZSBGSUNSX1RFTVBfQjBfQl9Nc2sgKDB4M0ZGRlVMIDw8IEZJQ1JfVEVNUF9CMF9CX1BvcykgLyohPCBCaXQgbWFzayBvZiBCIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfQjEgKi8NCisvKiBEZXNjcmlwdGlvbjogeS1pbnRlcmNlcHQgQjEuICovDQorDQorLyogQml0cyAxMy4uMCA6IEIgKHktaW50ZXJjZXB0KSAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0IxX0JfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQiBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9CMV9CX01zayAoMHgzRkZGVUwgPDwgRklDUl9URU1QX0IxX0JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfVEVNUF9CMiAqLw0KKy8qIERlc2NyaXB0aW9uOiB5LWludGVyY2VwdCBCMi4gKi8NCisNCisvKiBCaXRzIDEzLi4wIDogQiAoeS1pbnRlcmNlcHQpICovDQorI2RlZmluZSBGSUNSX1RFTVBfQjJfQl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0IyX0JfTXNrICgweDNGRkZVTCA8PCBGSUNSX1RFTVBfQjJfQl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX0IzICovDQorLyogRGVzY3JpcHRpb246IHktaW50ZXJjZXB0IEIzLiAqLw0KKw0KKy8qIEJpdHMgMTMuLjAgOiBCICh5LWludGVyY2VwdCkgKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9CM19CX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEIgZmllbGQuICovDQorI2RlZmluZSBGSUNSX1RFTVBfQjNfQl9Nc2sgKDB4M0ZGRlVMIDw8IEZJQ1JfVEVNUF9CM19CX1BvcykgLyohPCBCaXQgbWFzayBvZiBCIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfQjQgKi8NCisvKiBEZXNjcmlwdGlvbjogeS1pbnRlcmNlcHQgQjQuICovDQorDQorLyogQml0cyAxMy4uMCA6IEIgKHktaW50ZXJjZXB0KSAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0I0X0JfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQiBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9CNF9CX01zayAoMHgzRkZGVUwgPDwgRklDUl9URU1QX0I0X0JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfVEVNUF9CNSAqLw0KKy8qIERlc2NyaXB0aW9uOiB5LWludGVyY2VwdCBCNS4gKi8NCisNCisvKiBCaXRzIDEzLi4wIDogQiAoeS1pbnRlcmNlcHQpICovDQorI2RlZmluZSBGSUNSX1RFTVBfQjVfQl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0I1X0JfTXNrICgweDNGRkZVTCA8PCBGSUNSX1RFTVBfQjVfQl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX1QwICovDQorLyogRGVzY3JpcHRpb246IFNlZ21lbnQgZW5kIFQwLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFQgKHNlZ21lbnQgZW5kKXJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX1QwX1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVCBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9UMF9UX01zayAoMHhGRlVMIDw8IEZJQ1JfVEVNUF9UMF9UX1BvcykgLyohPCBCaXQgbWFzayBvZiBUIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfVDEgKi8NCisvKiBEZXNjcmlwdGlvbjogU2VnbWVudCBlbmQgVDEuICovDQorDQorLyogQml0cyA3Li4wIDogVCAoc2VnbWVudCBlbmQpcmVnaXN0ZXIuICovDQorI2RlZmluZSBGSUNSX1RFTVBfVDFfVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX1QxX1RfTXNrICgweEZGVUwgPDwgRklDUl9URU1QX1QxX1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfVEVNUF9UMiAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZWdtZW50IGVuZCBUMi4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBUIChzZWdtZW50IGVuZClyZWdpc3Rlci4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9UMl9UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFQgZmllbGQuICovDQorI2RlZmluZSBGSUNSX1RFTVBfVDJfVF9Nc2sgKDB4RkZVTCA8PCBGSUNSX1RFTVBfVDJfVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX1QzICovDQorLyogRGVzY3JpcHRpb246IFNlZ21lbnQgZW5kIFQzLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFQgKHNlZ21lbnQgZW5kKXJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX1QzX1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVCBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9UM19UX01zayAoMHhGRlVMIDw8IEZJQ1JfVEVNUF9UM19UX1BvcykgLyohPCBCaXQgbWFzayBvZiBUIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfVDQgKi8NCisvKiBEZXNjcmlwdGlvbjogU2VnbWVudCBlbmQgVDQuICovDQorDQorLyogQml0cyA3Li4wIDogVCAoc2VnbWVudCBlbmQpcmVnaXN0ZXIuICovDQorI2RlZmluZSBGSUNSX1RFTVBfVDRfVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX1Q0X1RfTXNrICgweEZGVUwgPDwgRklDUl9URU1QX1Q0X1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfTkZDX1RBR0hFQURFUjAgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVmYXVsdCBoZWFkZXIgZm9yIE5GQyBUYWcuIFNvZnR3YXJlIGNhbiByZWFkIHRoZXNlIHZhbHVlcyB0byBwb3B1bGF0ZSBORkNJRDFfM1JEX0xBU1QsIE5GQ0lEMV8yTkRfTEFTVCBhbmQgTkZDSUQxX0xBU1QuICovDQorDQorLyogQml0cyAzMS4uMjQgOiBVbmlxdWUgaWRlbnRpZmllciBieXRlIDMgKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjBfVUQzX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBVRDMgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIwX1VEM19Nc2sgKDB4RkZVTCA8PCBGSUNSX05GQ19UQUdIRUFERVIwX1VEM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVUQzIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMjMuLjE2IDogVW5pcXVlIGlkZW50aWZpZXIgYnl0ZSAyICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIwX1VEMl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgVUQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMF9VRDJfTXNrICgweEZGVUwgPDwgRklDUl9ORkNfVEFHSEVBREVSMF9VRDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVEMiBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogVW5pcXVlIGlkZW50aWZpZXIgYnl0ZSAxICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIwX1VEMV9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBVRDEgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIwX1VEMV9Nc2sgKDB4RkZVTCA8PCBGSUNSX05GQ19UQUdIRUFERVIwX1VEMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVUQxIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IERlZmF1bHQgTWFudWZhY3R1cmVyIElEOiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EgaGFzIElDTSAweDVGICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIwX01GR0lEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1GR0lEIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMF9NRkdJRF9Nc2sgKDB4RkZVTCA8PCBGSUNSX05GQ19UQUdIRUFERVIwX01GR0lEX1BvcykgLyohPCBCaXQgbWFzayBvZiBNRkdJRCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9ORkNfVEFHSEVBREVSMSAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZWZhdWx0IGhlYWRlciBmb3IgTkZDIFRhZy4gU29mdHdhcmUgY2FuIHJlYWQgdGhlc2UgdmFsdWVzIHRvIHBvcHVsYXRlIE5GQ0lEMV8zUkRfTEFTVCwgTkZDSUQxXzJORF9MQVNUIGFuZCBORkNJRDFfTEFTVC4gKi8NCisNCisvKiBCaXRzIDMxLi4yNCA6IFVuaXF1ZSBpZGVudGlmaWVyIGJ5dGUgNyAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMV9VRDdfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVENyBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjFfVUQ3X01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjFfVUQ3X1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDcgZmllbGQuICovDQorDQorLyogQml0cyAyMy4uMTYgOiBVbmlxdWUgaWRlbnRpZmllciBieXRlIDYgKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjFfVUQ2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBVRDYgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIxX1VENl9Nc2sgKDB4RkZVTCA8PCBGSUNSX05GQ19UQUdIRUFERVIxX1VENl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVUQ2IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTUuLjggOiBVbmlxdWUgaWRlbnRpZmllciBieXRlIDUgKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjFfVUQ1X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVENSBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjFfVUQ1X01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjFfVUQ1X1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDUgZmllbGQuICovDQorDQorLyogQml0cyA3Li4wIDogVW5pcXVlIGlkZW50aWZpZXIgYnl0ZSA0ICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIxX1VENF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBVRDQgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIxX1VENF9Nc2sgKDB4RkZVTCA8PCBGSUNSX05GQ19UQUdIRUFERVIxX1VENF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVUQ0IGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX05GQ19UQUdIRUFERVIyICovDQorLyogRGVzY3JpcHRpb246IERlZmF1bHQgaGVhZGVyIGZvciBORkMgVGFnLiBTb2Z0d2FyZSBjYW4gcmVhZCB0aGVzZSB2YWx1ZXMgdG8gcG9wdWxhdGUgTkZDSUQxXzNSRF9MQVNULCBORkNJRDFfMk5EX0xBU1QgYW5kIE5GQ0lEMV9MQVNULiAqLw0KKw0KKy8qIEJpdHMgMzEuLjI0IDogVW5pcXVlIGlkZW50aWZpZXIgYnl0ZSAxMSAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMl9VRDExX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBVRDExIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMl9VRDExX01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjJfVUQxMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVUQxMSBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDIzLi4xNiA6IFVuaXF1ZSBpZGVudGlmaWVyIGJ5dGUgMTAgKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjJfVUQxMF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgVUQxMCBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjJfVUQxMF9Nc2sgKDB4RkZVTCA8PCBGSUNSX05GQ19UQUdIRUFERVIyX1VEMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVEMTAgZmllbGQuICovDQorDQorLyogQml0cyAxNS4uOCA6IFVuaXF1ZSBpZGVudGlmaWVyIGJ5dGUgOSAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMl9VRDlfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgVUQ5IGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMl9VRDlfTXNrICgweEZGVUwgPDwgRklDUl9ORkNfVEFHSEVBREVSMl9VRDlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVEOSBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBVbmlxdWUgaWRlbnRpZmllciBieXRlIDggKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjJfVUQ4X1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVEOCBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjJfVUQ4X01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjJfVUQ4X1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDggZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfTkZDX1RBR0hFQURFUjMgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVmYXVsdCBoZWFkZXIgZm9yIE5GQyBUYWcuIFNvZnR3YXJlIGNhbiByZWFkIHRoZXNlIHZhbHVlcyB0byBwb3B1bGF0ZSBORkNJRDFfM1JEX0xBU1QsIE5GQ0lEMV8yTkRfTEFTVCBhbmQgTkZDSUQxX0xBU1QuICovDQorDQorLyogQml0cyAzMS4uMjQgOiBVbmlxdWUgaWRlbnRpZmllciBieXRlIDE1ICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIzX1VEMTVfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVEMTUgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIzX1VEMTVfTXNrICgweEZGVUwgPDwgRklDUl9ORkNfVEFHSEVBREVSM19VRDE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDE1IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMjMuLjE2IDogVW5pcXVlIGlkZW50aWZpZXIgYnl0ZSAxNCAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSM19VRDE0X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBVRDE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSM19VRDE0X01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjNfVUQxNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVUQxNCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogVW5pcXVlIGlkZW50aWZpZXIgYnl0ZSAxMyAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSM19VRDEzX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVEMTMgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIzX1VEMTNfTXNrICgweEZGVUwgPDwgRklDUl9ORkNfVEFHSEVBREVSM19VRDEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDEzIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFVuaXF1ZSBpZGVudGlmaWVyIGJ5dGUgMTIgKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjNfVUQxMl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBVRDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSM19VRDEyX01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjNfVUQxMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVUQxMiBmaWVsZC4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBHUElPVEUgKi8NCisvKiBEZXNjcmlwdGlvbjogR1BJTyBUYXNrcyBhbmQgRXZlbnRzICovDQorDQorLyogUmVnaXN0ZXI6IEdQSU9URV9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDMxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFBPUlQgZXZlbnQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9QT1JUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX1BPUlRfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5TRVRfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9QT1JUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9QT1JUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfUE9SVF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBJTls3XSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lON19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjcgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU43X01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOU0VUX0lON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lON19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU43X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU43X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzZdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU42X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjZfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5TRVRfSU42X1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU42X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjZfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjZfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgSU5bNV0gZXZlbnQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lONV9Nc2sgKDB4MVVMIDw8IEdQSU9URV9JTlRFTlNFVF9JTjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lONV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lONV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBJTls0XSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lONF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjQgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU40X01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOU0VUX0lONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lONF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU40X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU40X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzNdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4zX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjNfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5TRVRfSU4zX1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4zX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgSU5bMl0gZXZlbnQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOMl9Nc2sgKDB4MVVMIDw8IEdQSU9URV9JTlRFTlNFVF9JTjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOMl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBJTlsxXSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjEgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4xX01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOU0VUX0lOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4xX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4xX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzBdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjBfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5TRVRfSU4wX1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4wX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjBfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IEdQSU9URV9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAzMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUE9SVCBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX1BPUlRfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfUE9SVF9Nc2sgKDB4MVVMIDw8IEdQSU9URV9JTlRFTkNMUl9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX1BPUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX1BPUlRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9QT1JUX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBJTls3XSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lON19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjcgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU43X01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOQ0xSX0lON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lON19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU43X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU43X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBJTls2XSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lONl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU42X01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOQ0xSX0lONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lONl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU42X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU42X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBJTls1XSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lONV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU41X01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOQ0xSX0lONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lONV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU41X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU41X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBJTls0XSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lONF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjQgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU40X01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOQ0xSX0lONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lONF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU40X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU40X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBJTlszXSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lOM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4zX01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOQ0xSX0lOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lOM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4zX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4zX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBJTlsyXSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lOMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4yX01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOQ0xSX0lOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lOMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4yX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4yX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBJTlsxXSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lOMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjEgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4xX01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOQ0xSX0lOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lOMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4xX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4xX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBJTlswXSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lOMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4wX01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOQ0xSX0lOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX0lOMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4wX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4wX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBHUElPVEVfQ09ORklHICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBDb25maWd1cmF0aW9uIGZvciBPVVRbbl0sIFNFVFtuXSBhbmQgQ0xSW25dIHRhc2tzIGFuZCBJTltuXSBldmVudCAqLw0KKw0KKy8qIEJpdCAyMCA6IFdoZW4gaW4gdGFzayBtb2RlOiBJbml0aWFsIHZhbHVlIG9mIHRoZSBvdXRwdXQgd2hlbiB0aGUgR1BJT1RFIGNoYW5uZWwgaXMgY29uZmlndXJlZC4gV2hlbiBpbiBldmVudCBtb2RlOiBObyBlZmZlY3QuICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX09VVElOSVRfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9VVElOSVQgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX09VVElOSVRfTXNrICgweDFVTCA8PCBHUElPVEVfQ09ORklHX09VVElOSVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9VVElOSVQgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX09VVElOSVRfTG93ICgwVUwpIC8qITwgVGFzayBtb2RlOiBJbml0aWFsIHZhbHVlIG9mIHBpbiBiZWZvcmUgdGFzayB0cmlnZ2VyaW5nIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19PVVRJTklUX0hpZ2ggKDFVTCkgLyohPCBUYXNrIG1vZGU6IEluaXRpYWwgdmFsdWUgb2YgcGluIGJlZm9yZSB0YXNrIHRyaWdnZXJpbmcgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdHMgMTcuLjE2IDogV2hlbiBJbiB0YXNrIG1vZGU6IE9wZXJhdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gb3V0cHV0IHdoZW4gT1VUW25dIHRhc2sgaXMgdHJpZ2dlcmVkLiBXaGVuIEluIGV2ZW50IG1vZGU6IE9wZXJhdGlvbiBvbiBpbnB1dCB0aGF0IHNoYWxsIHRyaWdnZXIgSU5bbl0gZXZlbnQuICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX1BPTEFSSVRZX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBQT0xBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfUE9MQVJJVFlfTXNrICgweDNVTCA8PCBHUElPVEVfQ09ORklHX1BPTEFSSVRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT0xBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfUE9MQVJJVFlfTm9uZSAoMFVMKSAvKiE8IFRhc2sgbW9kZTogTm8gZWZmZWN0IG9uIHBpbiBmcm9tIE9VVFtuXSB0YXNrLiBFdmVudCBtb2RlOiBubyBJTltuXSBldmVudCBnZW5lcmF0ZWQgb24gcGluIGFjdGl2aXR5LiAqLw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19QT0xBUklUWV9Mb1RvSGkgKDFVTCkgLyohPCBUYXNrIG1vZGU6IFNldCBwaW4gZnJvbSBPVVRbbl0gdGFzay4gRXZlbnQgbW9kZTogR2VuZXJhdGUgSU5bbl0gZXZlbnQgd2hlbiByaXNpbmcgZWRnZSBvbiBwaW4uICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX1BPTEFSSVRZX0hpVG9MbyAoMlVMKSAvKiE8IFRhc2sgbW9kZTogQ2xlYXIgcGluIGZyb20gT1VUW25dIHRhc2suIEV2ZW50IG1vZGU6IEdlbmVyYXRlIElOW25dIGV2ZW50IHdoZW4gZmFsbGluZyBlZGdlIG9uIHBpbi4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfUE9MQVJJVFlfVG9nZ2xlICgzVUwpIC8qITwgVGFzayBtb2RlOiBUb2dnbGUgcGluIGZyb20gT1VUW25dLiBFdmVudCBtb2RlOiBHZW5lcmF0ZSBJTltuXSB3aGVuIGFueSBjaGFuZ2Ugb24gcGluLiAqLw0KKw0KKy8qIEJpdHMgMTQuLjEzIDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfUE9SVF9Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfUE9SVF9Nc2sgKDB4M1VMIDw8IEdQSU9URV9DT05GSUdfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDEyLi44IDogR1BJTyBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIFNFVFtuXSwgQ0xSW25dIGFuZCBPVVRbbl0gdGFza3MgYW5kIElOW25dIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX1BTRUxfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUFNFTCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfUFNFTF9Nc2sgKDB4MUZVTCA8PCBHUElPVEVfQ09ORklHX1BTRUxfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBTRUwgZmllbGQuICovDQorDQorLyogQml0cyAxLi4wIDogTW9kZSAqLw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19NT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX01PREVfTXNrICgweDNVTCA8PCBHUElPVEVfQ09ORklHX01PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX01PREVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZC4gUGluIHNwZWNpZmllZCBieSBQU0VMIHdpbGwgbm90IGJlIGFjcXVpcmVkIGJ5IHRoZSBHUElPVEUgbW9kdWxlLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19NT0RFX0V2ZW50ICgxVUwpIC8qITwgRXZlbnQgbW9kZSAqLw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19NT0RFX1Rhc2sgKDNVTCkgLyohPCBUYXNrIG1vZGUgKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBJMlMgKi8NCisvKiBEZXNjcmlwdGlvbjogSW50ZXItSUMgU291bmQgKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX0lOVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUWFBUUlVQRCBldmVudCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOX1RYUFRSVVBEX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYUFRSVVBEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOX1RYUFRSVVBEX01zayAoMHgxVUwgPDwgSTJTX0lOVEVOX1RYUFRSVVBEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFBUUlVQRCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19JTlRFTl9UWFBUUlVQRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIEkyU19JTlRFTl9UWFBUUlVQRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIEkyU19JTlRFTl9TVE9QUEVEX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5fU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IEkyU19JTlRFTl9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBJMlNfSU5URU5fU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYUFRSVVBEIGV2ZW50ICovDQorI2RlZmluZSBJMlNfSU5URU5fUlhQVFJVUERfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUlhQVFJVUEQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5fUlhQVFJVUERfTXNrICgweDFVTCA8PCBJMlNfSU5URU5fUlhQVFJVUERfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYUFRSVVBEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOX1JYUFRSVVBEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOX1JYUFRSVVBEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUWFBUUlVQRCBldmVudCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOU0VUX1RYUFRSVVBEX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYUFRSVVBEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOU0VUX1RYUFRSVVBEX01zayAoMHgxVUwgPDwgSTJTX0lOVEVOU0VUX1RYUFRSVVBEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFBUUlVQRCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19JTlRFTlNFVF9UWFBUUlVQRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBJMlNfSU5URU5TRVRfVFhQVFJVUERfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEkyU19JTlRFTlNFVF9UWFBUUlVQRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBJMlNfSU5URU5TRVRfU1RPUFBFRF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOU0VUX1NUT1BQRURfTXNrICgweDFVTCA8PCBJMlNfSU5URU5TRVRfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19JTlRFTlNFVF9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEkyU19JTlRFTlNFVF9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBJMlNfSU5URU5TRVRfU1RPUFBFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSWFBUUlVQRCBldmVudCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOU0VUX1JYUFRSVVBEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYUFRSVVBEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOU0VUX1JYUFRSVVBEX01zayAoMHgxVUwgPDwgSTJTX0lOVEVOU0VUX1JYUFRSVVBEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFBUUlVQRCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19JTlRFTlNFVF9SWFBUUlVQRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBJMlNfSU5URU5TRVRfUlhQVFJVUERfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEkyU19JTlRFTlNFVF9SWFBUUlVQRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYUFRSVVBEIGV2ZW50ICovDQorI2RlZmluZSBJMlNfSU5URU5DTFJfVFhQVFJVUERfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgVFhQVFJVUEQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5DTFJfVFhQVFJVUERfTXNrICgweDFVTCA8PCBJMlNfSU5URU5DTFJfVFhQVFJVUERfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYUFRSVVBEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOQ0xSX1RYUFRSVVBEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEkyU19JTlRFTkNMUl9UWFBUUlVQRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOQ0xSX1RYUFRSVVBEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBJMlNfSU5URU5DTFJfU1RPUFBFRF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOQ0xSX1NUT1BQRURfTXNrICgweDFVTCA8PCBJMlNfSU5URU5DTFJfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19JTlRFTkNMUl9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEkyU19JTlRFTkNMUl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBJMlNfSU5URU5DTFJfU1RPUFBFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUlhQVFJVUEQgZXZlbnQgKi8NCisjZGVmaW5lIEkyU19JTlRFTkNMUl9SWFBUUlVQRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFBUUlVQRCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19JTlRFTkNMUl9SWFBUUlVQRF9Nc2sgKDB4MVVMIDw8IEkyU19JTlRFTkNMUl9SWFBUUlVQRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhQVFJVUEQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5DTFJfUlhQVFJVUERfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOQ0xSX1JYUFRSVVBEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBJMlNfSU5URU5DTFJfUlhQVFJVUERfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIEkyUyBtb2R1bGUuICovDQorDQorLyogQml0IDAgOiBFbmFibGUgSTJTIG1vZHVsZS4gKi8NCisjZGVmaW5lIEkyU19FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19FTkFCTEVfRU5BQkxFX01zayAoMHgxVUwgPDwgSTJTX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgSTJTX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfQ09ORklHX01PREUgKi8NCisvKiBEZXNjcmlwdGlvbjogSTJTIG1vZGUuICovDQorDQorLyogQml0IDAgOiBJMlMgbW9kZS4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTU9ERV9NT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX01PREVfTU9ERV9Nc2sgKDB4MVVMIDw8IEkyU19DT05GSUdfTU9ERV9NT0RFX1BvcykgLyohPCBCaXQgbWFzayBvZiBNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NT0RFX01PREVfTWFzdGVyICgwVUwpIC8qITwgTWFzdGVyIG1vZGUuIFNDSyBhbmQgTFJDSyBnZW5lcmF0ZWQgZnJvbSBpbnRlcm5hbCBtYXN0ZXIgY2xjb2sgKE1DSykgYW5kIG91dHB1dCBvbiBwaW5zIGRlZmluZWQgYnkgUFNFTC54eHguICovDQorI2RlZmluZSBJMlNfQ09ORklHX01PREVfTU9ERV9TbGF2ZSAoMVVMKSAvKiE8IFNsYXZlIG1vZGUuIFNDSyBhbmQgTFJDSyBnZW5lcmF0ZWQgYnkgZXh0ZXJuYWwgbWFzdGVyIGFuZCByZWNlaXZlZCBvbiBwaW5zIGRlZmluZWQgYnkgUFNFTC54eHggKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX0NPTkZJR19SWEVOICovDQorLyogRGVzY3JpcHRpb246IFJlY2VwdGlvbiAoUlgpIGVuYWJsZS4gKi8NCisNCisvKiBCaXQgMCA6IFJlY2VwdGlvbiAoUlgpIGVuYWJsZS4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfUlhFTl9SWEVOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRU4gZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JYRU5fUlhFTl9Nc2sgKDB4MVVMIDw8IEkyU19DT05GSUdfUlhFTl9SWEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19SWEVOX1JYRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWNlcHRpb24gZGlzYWJsZWQgYW5kIG5vdyBkYXRhIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgUlhELlBUUiBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19SWEVOX1JYRU5fRW5hYmxlZCAoMVVMKSAvKiE8IFJlY2VwdGlvbiBlbmFibGVkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfQ09ORklHX1RYRU4gKi8NCisvKiBEZXNjcmlwdGlvbjogVHJhbnNtaXNzaW9uIChUWCkgZW5hYmxlLiAqLw0KKw0KKy8qIEJpdCAwIDogVHJhbnNtaXNzaW9uIChUWCkgZW5hYmxlLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19UWEVOX1RYRU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhFTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfVFhFTl9UWEVOX01zayAoMHgxVUwgPDwgSTJTX0NPTkZJR19UWEVOX1RYRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYRU4gZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX1RYRU5fVFhFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IFRyYW5zbWlzc2lvbiBkaXNhYmxlZCBhbmQgbm93IGRhdGEgd2lsbCBiZSByZWFkIGZyb20gdGhlIFJYRC5UWEQgYWRkcmVzcy4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfVFhFTl9UWEVOX0VuYWJsZWQgKDFVTCkgLyohPCBUcmFuc21pc3Npb24gZW5hYmxlZC4gKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX0NPTkZJR19NQ0tFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBNYXN0ZXIgY2xvY2sgZ2VuZXJhdG9yIGVuYWJsZS4gKi8NCisNCisvKiBCaXQgMCA6IE1hc3RlciBjbG9jayBnZW5lcmF0b3IgZW5hYmxlLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tFTl9NQ0tFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQ0tFTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRU5fTUNLRU5fTXNrICgweDFVTCA8PCBJMlNfQ09ORklHX01DS0VOX01DS0VOX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQ0tFTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRU5fTUNLRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBNYXN0ZXIgY2xvY2sgZ2VuZXJhdG9yIGRpc2FibGVkIGFuZCBQU0VMLk1DSyBub3QgY29ubmVjdGVkKGF2YWlsYWJsZSBhcyBHUElPKS4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRU5fTUNLRU5fRW5hYmxlZCAoMVVMKSAvKiE8IE1hc3RlciBjbG9jayBnZW5lcmF0b3IgcnVubmluZyBhbmQgTUNLIG91dHB1dCBvbiBQU0VMLk1DSy4gKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX0NPTkZJR19NQ0tGUkVRICovDQorLyogRGVzY3JpcHRpb246IE1hc3RlciBjbG9jayBnZW5lcmF0b3IgZnJlcXVlbmN5LiAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBNYXN0ZXIgY2xvY2sgZ2VuZXJhdG9yIGZyZXF1ZW5jeS4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1DS0ZSRVEgZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUNLRlJFUSBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRXzMyTURJVjEyNSAoMHgwMjBDMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDEyNSA9IDAuMjU2IE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWNjMgKDB4MDQxMDAwMDBVTCkgLyohPCAzMiBNSHogLyA2MyA9IDAuNTA3OTM2NSBNSHogKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRXzMyTURJVjQyICgweDA2MDAwMDAwVUwpIC8qITwgMzIgTUh6IC8gNDIgPSAwLjc2MTkwNDggTUh6ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVYzMiAoMHgwODAwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDMyID0gMS4wIE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWMzEgKDB4MDg0MDAwMDBVTCkgLyohPCAzMiBNSHogLyAzMSA9IDEuMDMyMjU4MSBNSHogKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRXzMyTURJVjMwICgweDA4ODAwMDAwVUwpIC8qITwgMzIgTUh6IC8gMzAgPSAxLjA2NjY2NjcgTUh6ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVYyMyAoMHgwQjAwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDIzID0gMS4zOTEzMDQzIE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWMjEgKDB4MEMwMDAwMDBVTCkgLyohPCAzMiBNSHogLyAyMSA9IDEuNTIzODA5NSAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWMTYgKDB4MTAwMDAwMDBVTCkgLyohPCAzMiBNSHogLyAxNiA9IDIuMCBNSHogKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRXzMyTURJVjE1ICgweDExMDAwMDAwVUwpIC8qITwgMzIgTUh6IC8gMTUgPSAyLjEzMzMzMzMgTUh6ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVYxMSAoMHgxNjAwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDExID0gMi45MDkwOTA5IE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWMTAgKDB4MTgwMDAwMDBVTCkgLyohPCAzMiBNSHogLyAxMCA9IDMuMiBNSHogKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRXzMyTURJVjggKDB4MjAwMDAwMDBVTCkgLyohPCAzMiBNSHogLyA4ID0gNC4wIE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWNiAoMHgyODAwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDYgPSA1LjMzMzMzMzMgTUh6ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVY1ICgweDMwMDAwMDAwVUwpIC8qITwgMzIgTUh6IC8gNSA9IDYuNCBNSHogKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRXzMyTURJVjQgKDB4NDAwMDAwMDBVTCkgLyohPCAzMiBNSHogLyA0ID0gOC4wIE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWMyAoMHg1MDAwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDMgPSAxMC42NjY2NjY3IE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWMiAoMHg4MDAwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDIgPSAxNi4wIE1IeiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfQ09ORklHX1JBVElPICovDQorLyogRGVzY3JpcHRpb246IE1DSyAvIExSQ0sgcmF0aW8uICovDQorDQorLyogQml0cyAzLi4wIDogTUNLIC8gTFJDSyByYXRpby4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfUkFUSU9fUkFUSU9fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkFUSU8gZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JBVElPX1JBVElPX01zayAoMHhGVUwgPDwgSTJTX0NPTkZJR19SQVRJT19SQVRJT19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkFUSU8gZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JBVElPX1JBVElPXzMyWCAoMFVMKSAvKiE8IExSQ0sgPSBNQ0sgLyAzMiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19SQVRJT19SQVRJT180OFggKDFVTCkgLyohPCBMUkNLID0gTUNLIC8gNDggKi8NCisjZGVmaW5lIEkyU19DT05GSUdfUkFUSU9fUkFUSU9fNjRYICgyVUwpIC8qITwgTFJDSyA9IE1DSyAvIDY0ICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JBVElPX1JBVElPXzk2WCAoM1VMKSAvKiE8IExSQ0sgPSBNQ0sgLyA5NiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19SQVRJT19SQVRJT18xMjhYICg0VUwpIC8qITwgTFJDSyA9IE1DSyAvIDEyOCAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19SQVRJT19SQVRJT18xOTJYICg1VUwpIC8qITwgTFJDSyA9IE1DSyAvIDE5MiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19SQVRJT19SQVRJT18yNTZYICg2VUwpIC8qITwgTFJDSyA9IE1DSyAvIDI1NiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19SQVRJT19SQVRJT18zODRYICg3VUwpIC8qITwgTFJDSyA9IE1DSyAvIDM4NCAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19SQVRJT19SQVRJT181MTJYICg4VUwpIC8qITwgTFJDSyA9IE1DSyAvIDUxMiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfQ09ORklHX1NXSURUSCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTYW1wbGUgd2lkdGguICovDQorDQorLyogQml0cyAxLi4wIDogU2FtcGxlIHdpZHRoLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19TV0lEVEhfU1dJRFRIX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNXSURUSCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfU1dJRFRIX1NXSURUSF9Nc2sgKDB4M1VMIDw8IEkyU19DT05GSUdfU1dJRFRIX1NXSURUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1dJRFRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19TV0lEVEhfU1dJRFRIXzhCaXQgKDBVTCkgLyohPCA4IGJpdC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfU1dJRFRIX1NXSURUSF8xNkJpdCAoMVVMKSAvKiE8IDE2IGJpdC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfU1dJRFRIX1NXSURUSF8yNEJpdCAoMlVMKSAvKiE8IDI0IGJpdC4gKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX0NPTkZJR19BTElHTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBBbGlnbm1lbnQgb2Ygc2FtcGxlIHdpdGhpbiBhIGZyYW1lLiAqLw0KKw0KKy8qIEJpdCAwIDogQWxpZ25tZW50IG9mIHNhbXBsZSB3aXRoaW4gYSBmcmFtZS4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfQUxJR05fQUxJR05fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQUxJR04gZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX0FMSUdOX0FMSUdOX01zayAoMHgxVUwgPDwgSTJTX0NPTkZJR19BTElHTl9BTElHTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUxJR04gZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX0FMSUdOX0FMSUdOX0xlZnQgKDBVTCkgLyohPCBMZWZ0LWFsaWduZWQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX0FMSUdOX0FMSUdOX1JpZ2h0ICgxVUwpIC8qITwgUmlnaHQtYWxpZ25lZC4gKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX0NPTkZJR19GT1JNQVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRnJhbWUgZm9ybWF0LiAqLw0KKw0KKy8qIEJpdCAwIDogRnJhbWUgZm9ybWF0LiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19GT1JNQVRfRk9STUFUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZPUk1BVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfRk9STUFUX0ZPUk1BVF9Nc2sgKDB4MVVMIDw8IEkyU19DT05GSUdfRk9STUFUX0ZPUk1BVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRk9STUFUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19GT1JNQVRfRk9STUFUX0kyUyAoMFVMKSAvKiE8IE9yaWdpbmFsIEkyUyBmb3JtYXQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX0ZPUk1BVF9GT1JNQVRfQWxpZ25lZCAoMVVMKSAvKiE8IEFsdGVybmF0ZSAobGVmdC0gb3IgcmlnaHQtYWxpZ25lZCkgZm9ybWF0LiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfQ09ORklHX0NIQU5ORUxTICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBjaGFubmVscy4gKi8NCisNCisvKiBCaXRzIDEuLjAgOiBFbmFibGUgY2hhbm5lbHMuICovDQorI2RlZmluZSBJMlNfQ09ORklHX0NIQU5ORUxTX0NIQU5ORUxTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIQU5ORUxTIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19DSEFOTkVMU19DSEFOTkVMU19Nc2sgKDB4M1VMIDw8IEkyU19DT05GSUdfQ0hBTk5FTFNfQ0hBTk5FTFNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIQU5ORUxTIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19DSEFOTkVMU19DSEFOTkVMU19TdGVyZW8gKDBVTCkgLyohPCBTdGVyZW8uICovDQorI2RlZmluZSBJMlNfQ09ORklHX0NIQU5ORUxTX0NIQU5ORUxTX0xlZnQgKDFVTCkgLyohPCBMZWZ0IG9ubHkuICovDQorI2RlZmluZSBJMlNfQ09ORklHX0NIQU5ORUxTX0NIQU5ORUxTX1JpZ2h0ICgyVUwpIC8qITwgUmlnaHQgb25seS4gKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX1JYRF9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogUmVjZWl2ZSBidWZmZXIgUkFNIHN0YXJ0IGFkZHJlc3MuICovDQorDQorLyogQml0cyAzMS4uMCA6IFJlY2VpdmUgYnVmZmVyIERhdGEgUkFNIHN0YXJ0IGFkZHJlc3MuIFdoZW4gcmVjZWl2aW5nLCB3b3JkcyBjb250YWluaW5nIHNhbXBsZXMgd2lsbCBiZSB3cml0dGVuIHRvIHRoaXMgYWRkcmVzcy4gVGhpcyBhZGRyZXNzIGlzIGEgd29yZCBhbGlnbmVkIERhdGEgUkFNIGFkZHJlc3MuICovDQorI2RlZmluZSBJMlNfUlhEX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1JYRF9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IEkyU19SWERfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfVFhEX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBUcmFuc21pdCBidWZmZXIgUkFNIHN0YXJ0IGFkZHJlc3MuICovDQorDQorLyogQml0cyAzMS4uMCA6IFRyYW5zbWl0IGJ1ZmZlciBEYXRhIFJBTSBzdGFydCBhZGRyZXNzLiBXaGVuIHRyYW5zbWl0dGluZywgd29yZHMgY29udGFpbmluZyBzYW1wbGVzIHdpbGwgYmUgZmV0Y2hlZCBmcm9tIHRoaXMgYWRkcmVzcy4gVGhpcyBhZGRyZXNzIGlzIGEgd29yZCBhbGlnbmVkIERhdGEgUkFNIGFkZHJlc3MuICovDQorI2RlZmluZSBJMlNfVFhEX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1RYRF9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IEkyU19UWERfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfUlhUWERfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IFNpemUgb2YgUlhEIGFuZCBUWEQgYnVmZmVycy4gKi8NCisNCisvKiBCaXRzIDEzLi4wIDogU2l6ZSBvZiBSWEQgYW5kIFRYRCBidWZmZXJzIGluIG51bWJlciBvZiAzMiBiaXQgd29yZHMuICovDQorI2RlZmluZSBJMlNfUlhUWERfTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBJMlNfUlhUWERfTUFYQ05UX01BWENOVF9Nc2sgKDB4M0ZGRlVMIDw8IEkyU19SWFRYRF9NQVhDTlRfTUFYQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhDTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19QU0VMX01DSyAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBNQ0sgc2lnbmFsLiAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIEkyU19QU0VMX01DS19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfTUNLX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBJMlNfUFNFTF9NQ0tfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX01DS19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIEkyU19QU0VMX01DS19DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDkuLjggOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfTUNLX1BPUlRfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX01DS19QT1JUX01zayAoMHgzVUwgPDwgSTJTX1BTRUxfTUNLX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfTUNLX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBJMlNfUFNFTF9NQ0tfUElOX01zayAoMHgxRlVMIDw8IEkyU19QU0VMX01DS19QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX1BTRUxfU0NLICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFNDSyBzaWduYWwuICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0NLX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBJMlNfUFNFTF9TQ0tfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IEkyU19QU0VMX1NDS19DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0NLX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0NLX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgOS4uOCA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBJMlNfUFNFTF9TQ0tfUE9SVF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0NLX1BPUlRfTXNrICgweDNVTCA8PCBJMlNfUFNFTF9TQ0tfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBJMlNfUFNFTF9TQ0tfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX1NDS19QSU5fTXNrICgweDFGVUwgPDwgSTJTX1BTRUxfU0NLX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfUFNFTF9MUkNLICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIExSQ0sgc2lnbmFsLiAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIEkyU19QU0VMX0xSQ0tfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX0xSQ0tfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IEkyU19QU0VMX0xSQ0tfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX0xSQ0tfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBJMlNfUFNFTF9MUkNLX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgOS4uOCA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBJMlNfUFNFTF9MUkNLX1BPUlRfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX0xSQ0tfUE9SVF9Nc2sgKDB4M1VMIDw8IEkyU19QU0VMX0xSQ0tfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBJMlNfUFNFTF9MUkNLX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBJMlNfUFNFTF9MUkNLX1BJTl9Nc2sgKDB4MUZVTCA8PCBJMlNfUFNFTF9MUkNLX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfUFNFTF9TRElOICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFNESU4gc2lnbmFsLiAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIEkyU19QU0VMX1NESU5fQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX1NESU5fQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IEkyU19QU0VMX1NESU5fQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX1NESU5fQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBJMlNfUFNFTF9TRElOX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgOS4uOCA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBJMlNfUFNFTF9TRElOX1BPUlRfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX1NESU5fUE9SVF9Nc2sgKDB4M1VMIDw8IEkyU19QU0VMX1NESU5fUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBJMlNfUFNFTF9TRElOX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBJMlNfUFNFTF9TRElOX1BJTl9Nc2sgKDB4MUZVTCA8PCBJMlNfUFNFTF9TRElOX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfUFNFTF9TRE9VVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBTRE9VVCBzaWduYWwuICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0RPVVRfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX1NET1VUX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBJMlNfUFNFTF9TRE9VVF9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0RPVVRfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBJMlNfUFNFTF9TRE9VVF9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDkuLjggOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0RPVVRfUE9SVF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0RPVVRfUE9SVF9Nc2sgKDB4M1VMIDw8IEkyU19QU0VMX1NET1VUX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0RPVVRfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX1NET1VUX1BJTl9Nc2sgKDB4MUZVTCA8PCBJMlNfUFNFTF9TRE9VVF9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBMUENPTVAgKi8NCisvKiBEZXNjcmlwdGlvbjogTG93IFBvd2VyIENvbXBhcmF0b3IgKi8NCisNCisvKiBSZWdpc3RlcjogTFBDT01QX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCA0IDogU2hvcnRjdXQgYmV0d2VlbiBDUk9TUyBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX0NST1NTX1NUT1BfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQ1JPU1NfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfQ1JPU1NfU1RPUF9Nc2sgKDB4MVVMIDw8IExQQ09NUF9TSE9SVFNfQ1JPU1NfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JPU1NfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfQ1JPU1NfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfQ1JPU1NfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDMgOiBTaG9ydGN1dCBiZXR3ZWVuIFVQIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfVVBfU1RPUF9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBVUF9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19VUF9TVE9QX01zayAoMHgxVUwgPDwgTFBDT01QX1NIT1JUU19VUF9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBVUF9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19VUF9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19VUF9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMiA6IFNob3J0Y3V0IGJldHdlZW4gRE9XTiBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX0RPV05fU1RPUF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBET1dOX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX0RPV05fU1RPUF9Nc2sgKDB4MVVMIDw8IExQQ09NUF9TSE9SVFNfRE9XTl9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBET1dOX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX0RPV05fU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfRE9XTl9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMSA6IFNob3J0Y3V0IGJldHdlZW4gUkVBRFkgZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19SRUFEWV9TVE9QX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX1JFQURZX1NUT1BfTXNrICgweDFVTCA8PCBMUENPTVBfU0hPUlRTX1JFQURZX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX1JFQURZX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX1JFQURZX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAwIDogU2hvcnRjdXQgYmV0d2VlbiBSRUFEWSBldmVudCBhbmQgU0FNUExFIHRhc2sgKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfUkVBRFlfU0FNUExFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZX1NBTVBMRSBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfUkVBRFlfU0FNUExFX01zayAoMHgxVUwgPDwgTFBDT01QX1NIT1JUU19SRUFEWV9TQU1QTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZX1NBTVBMRSBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfUkVBRFlfU0FNUExFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19SRUFEWV9TQU1QTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBMUENPTVBfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENST1NTIGV2ZW50ICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfQ1JPU1NfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgQ1JPU1MgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfQ1JPU1NfTXNrICgweDFVTCA8PCBMUENPTVBfSU5URU5TRVRfQ1JPU1NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENST1NTIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX0NST1NTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9DUk9TU19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX0NST1NTX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFVQIGV2ZW50ICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfVVBfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgVVAgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfVVBfTXNrICgweDFVTCA8PCBMUENPTVBfSU5URU5TRVRfVVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX1VQX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9VUF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX1VQX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIERPV04gZXZlbnQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9ET1dOX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIERPV04gZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfRE9XTl9Nc2sgKDB4MVVMIDw8IExQQ09NUF9JTlRFTlNFVF9ET1dOX1BvcykgLyohPCBCaXQgbWFzayBvZiBET1dOIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX0RPV05fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX0RPV05fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9ET1dOX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJFQURZIGV2ZW50ICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfUkVBRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfUkVBRFlfTXNrICgweDFVTCA8PCBMUENPTVBfSU5URU5TRVRfUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX1JFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9SRUFEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX1JFQURZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBMUENPTVBfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ1JPU1MgZXZlbnQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9DUk9TU19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBDUk9TUyBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9DUk9TU19Nc2sgKDB4MVVMIDw8IExQQ09NUF9JTlRFTkNMUl9DUk9TU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JPU1MgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfQ1JPU1NfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX0NST1NTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfQ1JPU1NfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFVQIGV2ZW50ICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfVVBfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgVVAgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfVVBfTXNrICgweDFVTCA8PCBMUENPTVBfSU5URU5DTFJfVVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX1VQX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9VUF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX1VQX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBET1dOIGV2ZW50ICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfRE9XTl9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBET1dOIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX0RPV05fTXNrICgweDFVTCA8PCBMUENPTVBfSU5URU5DTFJfRE9XTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRE9XTiBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9ET1dOX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9ET1dOX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfRE9XTl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9SRUFEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9SRUFEWV9Nc2sgKDB4MVVMIDw8IExQQ09NUF9JTlRFTkNMUl9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX1JFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfUkVBRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IExQQ09NUF9SRVNVTFQgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29tcGFyZSByZXN1bHQgKi8NCisNCisvKiBCaXQgMCA6IFJlc3VsdCBvZiBsYXN0IGNvbXBhcmUuIERlY2lzaW9uIHBvaW50IFNBTVBMRSB0YXNrLiAqLw0KKyNkZWZpbmUgTFBDT01QX1JFU1VMVF9SRVNVTFRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVTVUxUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX1JFU1VMVF9SRVNVTFRfTXNrICgweDFVTCA8PCBMUENPTVBfUkVTVUxUX1JFU1VMVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVTVUxUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX1JFU1VMVF9SRVNVTFRfQmVsb3cgKDBVTCkgLyohPCBJbnB1dCB2b2x0YWdlIGlzIGJlbG93IHRoZSByZWZlcmVuY2UgdGhyZXNob2xkIChWSU4rICZsdDsgVklOLSkuICovDQorI2RlZmluZSBMUENPTVBfUkVTVUxUX1JFU1VMVF9BYm92ZSAoMVVMKSAvKiE8IElucHV0IHZvbHRhZ2UgaXMgYWJvdmUgdGhlIHJlZmVyZW5jZSB0aHJlc2hvbGQgKFZJTisgJmd0OyBWSU4tKS4gKi8NCisNCisvKiBSZWdpc3RlcjogTFBDT01QX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgTFBDT01QICovDQorDQorLyogQml0cyAxLi4wIDogRW5hYmxlIG9yIGRpc2FibGUgTFBDT01QICovDQorI2RlZmluZSBMUENPTVBfRU5BQkxFX0VOQUJMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfRU5BQkxFX0VOQUJMRV9Nc2sgKDB4M1VMIDw8IExQQ09NUF9FTkFCTEVfRU5BQkxFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfRU5BQkxFX0VOQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIExQQ09NUF9FTkFCTEVfRU5BQkxFX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogTFBDT01QX1BTRUwgKi8NCisvKiBEZXNjcmlwdGlvbjogSW5wdXQgcGluIHNlbGVjdCAqLw0KKw0KKy8qIEJpdHMgMi4uMCA6IEFuYWxvZyBwaW4gc2VsZWN0ICovDQorI2RlZmluZSBMUENPTVBfUFNFTF9QU0VMX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBTRUwgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfUFNFTF9QU0VMX01zayAoMHg3VUwgPDwgTFBDT01QX1BTRUxfUFNFTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFNFTCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQwICgwVUwpIC8qITwgQUlOMCBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIExQQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQxICgxVUwpIC8qITwgQUlOMSBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIExQQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQyICgyVUwpIC8qITwgQUlOMiBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIExQQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQzICgzVUwpIC8qITwgQUlOMyBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIExQQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQ0ICg0VUwpIC8qITwgQUlONCBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIExQQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQ1ICg1VUwpIC8qITwgQUlONSBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIExQQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQ2ICg2VUwpIC8qITwgQUlONiBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIExQQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQ3ICg3VUwpIC8qITwgQUlONyBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisNCisvKiBSZWdpc3RlcjogTFBDT01QX1JFRlNFTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWZlcmVuY2Ugc2VsZWN0ICovDQorDQorLyogQml0cyAzLi4wIDogUmVmZXJlbmNlIHNlbGVjdCAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVGU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfTXNrICgweEZVTCA8PCBMUENPTVBfUkVGU0VMX1JFRlNFTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVGU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmMV84VmRkICgwVUwpIC8qITwgVkREICogMS84IHNlbGVjdGVkIGFzIHJlZmVyZW5jZSAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmMl84VmRkICgxVUwpIC8qITwgVkREICogMi84IHNlbGVjdGVkIGFzIHJlZmVyZW5jZSAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmM184VmRkICgyVUwpIC8qITwgVkREICogMy84IHNlbGVjdGVkIGFzIHJlZmVyZW5jZSAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmNF84VmRkICgzVUwpIC8qITwgVkREICogNC84IHNlbGVjdGVkIGFzIHJlZmVyZW5jZSAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmNV84VmRkICg0VUwpIC8qITwgVkREICogNS84IHNlbGVjdGVkIGFzIHJlZmVyZW5jZSAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmNl84VmRkICg1VUwpIC8qITwgVkREICogNi84IHNlbGVjdGVkIGFzIHJlZmVyZW5jZSAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmN184VmRkICg2VUwpIC8qITwgVkREICogNy84IHNlbGVjdGVkIGFzIHJlZmVyZW5jZSAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfQVJlZiAoN1VMKSAvKiE8IEV4dGVybmFsIGFuYWxvZyByZWZlcmVuY2Ugc2VsZWN0ZWQgKi8NCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjFfMTZWZGQgKDhVTCkgLyohPCBWREQgKiAxLzE2IHNlbGVjdGVkIGFzIHJlZmVyZW5jZSAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmM18xNlZkZCAoOVVMKSAvKiE8IFZERCAqIDMvMTYgc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY1XzE2VmRkICgxMFVMKSAvKiE8IFZERCAqIDUvMTYgc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY3XzE2VmRkICgxMVVMKSAvKiE8IFZERCAqIDcvMTYgc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY5XzE2VmRkICgxMlVMKSAvKiE8IFZERCAqIDkvMTYgc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWYxMV8xNlZkZCAoMTNVTCkgLyohPCBWREQgKiAxMS8xNiBzZWxlY3RlZCBhcyByZWZlcmVuY2UgKi8NCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjEzXzE2VmRkICgxNFVMKSAvKiE8IFZERCAqIDEzLzE2IHNlbGVjdGVkIGFzIHJlZmVyZW5jZSAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmMTVfMTZWZGQgKDE1VUwpIC8qITwgVkREICogMTUvMTYgc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorDQorLyogUmVnaXN0ZXI6IExQQ09NUF9FWFRSRUZTRUwgKi8NCisvKiBEZXNjcmlwdGlvbjogRXh0ZXJuYWwgcmVmZXJlbmNlIHNlbGVjdCAqLw0KKw0KKy8qIEJpdCAwIDogRXh0ZXJuYWwgYW5hbG9nIHJlZmVyZW5jZSBzZWxlY3QgKi8NCisjZGVmaW5lIExQQ09NUF9FWFRSRUZTRUxfRVhUUkVGU0VMX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVYVFJFRlNFTCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9FWFRSRUZTRUxfRVhUUkVGU0VMX01zayAoMHgxVUwgPDwgTFBDT01QX0VYVFJFRlNFTF9FWFRSRUZTRUxfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVYVFJFRlNFTCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9FWFRSRUZTRUxfRVhUUkVGU0VMX0FuYWxvZ1JlZmVyZW5jZTAgKDBVTCkgLyohPCBVc2UgQUlOMCBhcyBleHRlcm5hbCBhbmFsb2cgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfRVhUUkVGU0VMX0VYVFJFRlNFTF9BbmFsb2dSZWZlcmVuY2UxICgxVUwpIC8qITwgVXNlIEFJTjEgYXMgZXh0ZXJuYWwgYW5hbG9nIHJlZmVyZW5jZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBMUENPTVBfQU5BREVURUNUICovDQorLyogRGVzY3JpcHRpb246IEFuYWxvZyBkZXRlY3QgY29uZmlndXJhdGlvbiAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IEFuYWxvZyBkZXRlY3QgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgTFBDT01QX0FOQURFVEVDVF9BTkFERVRFQ1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQU5BREVURUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0FOQURFVEVDVF9BTkFERVRFQ1RfTXNrICgweDNVTCA8PCBMUENPTVBfQU5BREVURUNUX0FOQURFVEVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU5BREVURUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0FOQURFVEVDVF9BTkFERVRFQ1RfQ3Jvc3MgKDBVTCkgLyohPCBHZW5lcmF0ZSBBTkFERVRFQ1Qgb24gY3Jvc3NpbmcsIGJvdGggdXB3YXJkIGNyb3NzaW5nIGFuZCBkb3dud2FyZCBjcm9zc2luZyAqLw0KKyNkZWZpbmUgTFBDT01QX0FOQURFVEVDVF9BTkFERVRFQ1RfVXAgKDFVTCkgLyohPCBHZW5lcmF0ZSBBTkFERVRFQ1Qgb24gdXB3YXJkIGNyb3NzaW5nIG9ubHkgKi8NCisjZGVmaW5lIExQQ09NUF9BTkFERVRFQ1RfQU5BREVURUNUX0Rvd24gKDJVTCkgLyohPCBHZW5lcmF0ZSBBTkFERVRFQ1Qgb24gZG93bndhcmQgY3Jvc3Npbmcgb25seSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBMUENPTVBfSFlTVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb21wYXJhdG9yIGh5c3RlcmVzaXMgZW5hYmxlICovDQorDQorLyogQml0IDAgOiBDb21wYXJhdG9yIGh5c3RlcmVzaXMgZW5hYmxlICovDQorI2RlZmluZSBMUENPTVBfSFlTVF9IWVNUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEhZU1QgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSFlTVF9IWVNUX01zayAoMHgxVUwgPDwgTFBDT01QX0hZU1RfSFlTVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSFlTVCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9IWVNUX0hZU1RfTm9IeXN0ICgwVUwpIC8qITwgQ29tcGFyYXRvciBoeXN0ZXJlc2lzIGRpc2FibGVkICovDQorI2RlZmluZSBMUENPTVBfSFlTVF9IWVNUX0h5c3Q1MG1WICgxVUwpIC8qITwgQ29tcGFyYXRvciBoeXN0ZXJlc2lzIGRpc2FibGVkICh0eXAuIDUwIG1WKSAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IE1XVSAqLw0KKy8qIERlc2NyaXB0aW9uOiBNZW1vcnkgV2F0Y2ggVW5pdCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBNV1VfSU5URU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDI3IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzFdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5fUFJFR0lPTjFSQV9Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMVJBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOX1BSRUdJT04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUFJFR0lPTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMVJBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjYgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMV0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMVdBX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1BSRUdJT04xV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5fUFJFR0lPTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMVdBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1BSRUdJT04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlswXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1BSRUdJT04wUkFfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUFJFR0lPTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTl9QUkVHSU9OMFJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1BSRUdJT04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfSU5URU5fUFJFR0lPTjBSQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDI0IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzBdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5fUFJFR0lPTjBXQV9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMFdBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOX1BSRUdJT04wV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUFJFR0lPTjBXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMFdBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzNdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OM1JBX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04zUkFfTXNrICgweDFVTCA8PCBNV1VfSU5URU5fUkVHSU9OM1JBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04zUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OM1JBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjNSQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlszXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjNXQV9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OM1dBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOX1JFR0lPTjNXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OM1dBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjNXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04zV0FfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMl0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04yUkFfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjJSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTl9SRUdJT04yUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04yUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMlJBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzJdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMldBX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04yV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5fUkVHSU9OMldBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04yV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMldBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjJXQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsxXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjFSQV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMVJBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOX1JFR0lPTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04xUkFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMV0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04xV0FfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTl9SRUdJT04xV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04xV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzBdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMFJBX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04wUkFfTXNrICgweDFVTCA8PCBNV1VfSU5URU5fUkVHSU9OMFJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMFJBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjBSQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlswXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjBXQV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMFdBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOX1JFR0lPTjBXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjBXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04wV0FfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBNV1VfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzFdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjFSQV9Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMVJBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOU0VUX1BSRUdJT04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjFSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04xUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDI2IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMV0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMVdBX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04xV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5TRVRfUFJFR0lPTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMVdBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjFXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlswXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04wUkFfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTlNFVF9QUkVHSU9OMFJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04wUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMFJBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzBdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjBXQV9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMFdBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOU0VUX1BSRUdJT04wV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjBXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjBXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04wV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzNdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OM1JBX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04zUkFfTXNrICgweDFVTCA8PCBNV1VfSU5URU5TRVRfUkVHSU9OM1JBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04zUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OM1JBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04zUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04zUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzNdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OM1dBX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04zV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5TRVRfUkVHSU9OM1dBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OM1dBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04zV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04zV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzJdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMlJBX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04yUkFfTXNrICgweDFVTCA8PCBNV1VfSU5URU5TRVRfUkVHSU9OMlJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04yUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMlJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04yUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04yUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzJdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMldBX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04yV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5TRVRfUkVHSU9OMldBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04yV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMldBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04yV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04yV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzFdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMVJBX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04xUkFfTXNrICgweDFVTCA8PCBNV1VfSU5URU5TRVRfUkVHSU9OMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMVJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04xUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04xUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzFdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMVdBX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04xV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5TRVRfUkVHSU9OMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMVdBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04xV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzBdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMFJBX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04wUkFfTXNrICgweDFVTCA8PCBNV1VfSU5URU5TRVRfUkVHSU9OMFJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMFJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04wUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04wUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzBdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMFdBX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04wV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5TRVRfUkVHSU9OMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUkVHSU9OMFdBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04wV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04wV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IE1XVV9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlsxXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04xUkFfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjFSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTkNMUl9QUkVHSU9OMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04xUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04xUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9QUkVHSU9OMVJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlsxXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04xV0FfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTkNMUl9QUkVHSU9OMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04xV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9QUkVHSU9OMVdBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlswXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04wUkFfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTkNMUl9QUkVHSU9OMFJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04wUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9QUkVHSU9OMFJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlswXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04wV0FfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTkNMUl9QUkVHSU9OMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04wV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04wV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9QUkVHSU9OMFdBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bM10uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04zUkFfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjNSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTkNMUl9SRUdJT04zUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04zUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjNSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjNSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzNdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OM1dBX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04zV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5DTFJfUkVHSU9OM1dBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OM1dBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04zV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04zV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsyXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjJSQV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04yUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMlJBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOQ0xSX1JFR0lPTjJSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjJSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMlJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMlJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMl0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04yV0FfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMldBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjJXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTkNMUl9SRUdJT04yV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04yV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjJXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjJXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzFdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMVJBX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04xUkFfTXNrICgweDFVTCA8PCBNV1VfSU5URU5DTFJfUkVHSU9OMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMVJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04xUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04xUkFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsxXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjFXQV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMVdBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOQ0xSX1JFR0lPTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjFXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMVdBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMF0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04wUkFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTkNMUl9SRUdJT04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjBSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjBSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzBdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMFdBX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04wV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5DTFJfUkVHSU9OMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMFdBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04wV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04wV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IE1XVV9OTUlFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgb3IgZGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDI3IDogRW5hYmxlIG9yIGRpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlsxXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1BSRUdJT04xUkFfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjFSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTl9QUkVHSU9OMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1BSRUdJT04xUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjFSQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDI2IDogRW5hYmxlIG9yIGRpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlsxXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1BSRUdJT04xV0FfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTl9QUkVHSU9OMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1BSRUdJT04xV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjFXQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDI1IDogRW5hYmxlIG9yIGRpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlswXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1BSRUdJT04wUkFfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTl9QUkVHSU9OMFJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1BSRUdJT04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjBSQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDI0IDogRW5hYmxlIG9yIGRpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlswXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1BSRUdJT04wV0FfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTl9QUkVHSU9OMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1BSRUdJT04wV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjBXQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBFbmFibGUgb3IgZGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bM10uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04zUkFfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjNSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTl9SRUdJT04zUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04zUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OM1JBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZSBvciBkaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlszXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjNXQV9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OM1dBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOX1JFR0lPTjNXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OM1dBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjNXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04zV0FfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIG9yIGRpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzJdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMlJBX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04yUkFfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5fUkVHSU9OMlJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04yUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMlJBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjJSQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBFbmFibGUgb3IgZGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMl0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04yV0FfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMldBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjJXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTl9SRUdJT04yV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04yV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMldBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IEVuYWJsZSBvciBkaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsxXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjFSQV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMVJBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOX1JFR0lPTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04xUkFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzFdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMVdBX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04xV0FfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5fUkVHSU9OMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMVdBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjFXQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMF0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04wUkFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTl9SRUdJT04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMFJBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlswXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjBXQV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMFdBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOX1JFR0lPTjBXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjBXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04wV0FfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBNV1VfTk1JRU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMV0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMVJBX1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04xUkFfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5TRVRfUFJFR0lPTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMVJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMVJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUFJFR0lPTjFSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMV0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMVdBX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04xV0FfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5TRVRfUFJFR0lPTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMVdBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUFJFR0lPTjFXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMF0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMFJBX1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04wUkFfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5TRVRfUFJFR0lPTjBSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMFJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMFJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUFJFR0lPTjBSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMF0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMFdBX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04wV0FfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5TRVRfUFJFR0lPTjBXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMFdBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMFdBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUFJFR0lPTjBXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzNdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OM1JBX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04zUkFfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5TRVRfUkVHSU9OM1JBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04zUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OM1JBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04zUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04zUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlszXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjNXQV9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OM1dBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOU0VUX1JFR0lPTjNXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OM1dBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjNXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OM1dBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OM1dBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMl0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04yUkFfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjJSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTlNFVF9SRUdJT04yUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04yUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjJSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjJSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzJdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMldBX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04yV0FfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5TRVRfUkVHSU9OMldBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04yV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMldBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04yV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04yV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsxXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjFSQV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMVJBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOU0VUX1JFR0lPTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMVJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMVJBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMV0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04xV0FfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTlNFVF9SRUdJT04xV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04xV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjFXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjFXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzBdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMFJBX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04wUkFfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5TRVRfUkVHSU9OMFJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMFJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04wUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04wUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlswXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjBXQV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMFdBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOU0VUX1JFR0lPTjBXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjBXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMFdBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMFdBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBNV1VfTk1JRU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDI3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlsxXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04xUkFfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjFSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTkNMUl9QUkVHSU9OMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04xUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04xUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMVJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMV0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMVdBX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04xV0FfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5DTFJfUFJFR0lPTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMVdBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjFXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjUgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzBdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjBSQV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMFJBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOQ0xSX1BSRUdJT04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjBSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjBSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04wUkFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDI0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlswXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04wV0FfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTkNMUl9QUkVHSU9OMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04wV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04wV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMFdBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzNdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OM1JBX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04zUkFfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5DTFJfUkVHSU9OM1JBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04zUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OM1JBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04zUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04zUkFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bM10uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04zV0FfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OM1dBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjNXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTkNMUl9SRUdJT04zV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04zV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjNXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjNXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsyXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjJSQV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04yUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMlJBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOQ0xSX1JFR0lPTjJSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjJSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMlJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMlJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzJdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMldBX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04yV0FfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5DTFJfUkVHSU9OMldBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04yV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMldBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04yV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04yV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMV0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04xUkFfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjFSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTkNMUl9SRUdJT04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04xUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjFSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjFSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsxXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjFXQV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMVdBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOQ0xSX1JFR0lPTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjFXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMVdBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzBdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMFJBX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04wUkFfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5DTFJfUkVHSU9OMFJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMFJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04wUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04wUkFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMF0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04wV0FfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTkNMUl9SRUdJT04wV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04wV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjBXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjBXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0EgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIFNvdXJjZSBvZiBldmVudC9pbnRlcnJ1cHQgaW4gcmVnaW9uIDAsIHdyaXRlIGFjY2VzcyBkZXRlY3RlZCB3aGlsZSBjb3JyZXNwb25kaW5nIHN1YnJlZ2lvbiB3YXMgZW5hYmxlZCBmb3Igd2F0Y2hpbmcgKi8NCisNCisvKiBCaXQgMzEgOiBTdWJyZWdpb24gMzEgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMzFfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMzEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjMxX01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IzMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IzMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMzFfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMzFfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAzMCA6IFN1YnJlZ2lvbiAzMCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IzMF9Qb3MgKDMwVUwpIC8qITwgUG9zaXRpb24gb2YgU1IzMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMzBfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjMwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IzMF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IzMF9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDI5IDogU3VicmVnaW9uIDI5IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI5X1BvcyAoMjlVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyOV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI5X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI5X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMjggOiBTdWJyZWdpb24gMjggaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjhfUG9zICgyOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjggZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI4X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjhfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjhfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyNyA6IFN1YnJlZ2lvbiAyNyBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyN19Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjdfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyN19Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyN19BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDI2IDogU3VicmVnaW9uIDI2IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI2X1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyNl9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI2X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI2X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMjUgOiBTdWJyZWdpb24gMjUgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjVfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI1X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjVfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjVfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyNCA6IFN1YnJlZ2lvbiAyNCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyNF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjRfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyNF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyNF9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDIzIDogU3VicmVnaW9uIDIzIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIzX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyM19Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIzX05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIzX0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMjIgOiBTdWJyZWdpb24gMjIgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjJfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIyX01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjJfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjJfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyMSA6IFN1YnJlZ2lvbiAyMSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyMV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjFfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyMV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyMV9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDIwIDogU3VicmVnaW9uIDIwIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIwX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyMF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIwX05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIwX0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMTkgOiBTdWJyZWdpb24gMTkgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTlfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE5X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTlfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTlfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxOCA6IFN1YnJlZ2lvbiAxOCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxOF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMThfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE4X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxOF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxOF9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDE3IDogU3VicmVnaW9uIDE3IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE3X1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxN19Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE3X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE3X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMTYgOiBTdWJyZWdpb24gMTYgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTZfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE2X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTZfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTZfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxNSA6IFN1YnJlZ2lvbiAxNSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxNV9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTVfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxNV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxNV9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDE0IDogU3VicmVnaW9uIDE0IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE0X1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxNF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE0X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE0X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMTMgOiBTdWJyZWdpb24gMTMgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTNfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjEzX01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTNfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTNfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxMiA6IFN1YnJlZ2lvbiAxMiBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTJfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxMl9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxMl9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDExIDogU3VicmVnaW9uIDExIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjExX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxMV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjExX05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjExX0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMTAgOiBTdWJyZWdpb24gMTAgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTBfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjEwX01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTBfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTBfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA5IDogU3VicmVnaW9uIDkgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSOV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjlfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSOV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I5X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgOCA6IFN1YnJlZ2lvbiA4IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgU1I4IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I4X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I4X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjggZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjhfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSOF9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDcgOiBTdWJyZWdpb24gNyBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I3X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNSNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSN19Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I3X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjdfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA2IDogU3VicmVnaW9uIDYgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSNl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjZfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSNl9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I2X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgNSA6IFN1YnJlZ2lvbiA1IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgU1I1IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I1X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I1X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjVfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSNV9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDQgOiBTdWJyZWdpb24gNCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I0X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSNF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I0X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjRfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAzIDogU3VicmVnaW9uIDMgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjNfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSM19Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IzX0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMiA6IFN1YnJlZ2lvbiAyIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyX01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjJfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMl9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDEgOiBTdWJyZWdpb24gMSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxX05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjFfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAwIDogU3VicmVnaW9uIDAgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjBfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IwX0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBSZWdpc3RlcjogTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkEgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIFNvdXJjZSBvZiBldmVudC9pbnRlcnJ1cHQgaW4gcmVnaW9uIDAsIHJlYWQgYWNjZXNzIGRldGVjdGVkIHdoaWxlIGNvcnJlc3BvbmRpbmcgc3VicmVnaW9uIHdhcyBlbmFibGVkIGZvciB3YXRjaGluZyAqLw0KKw0KKy8qIEJpdCAzMSA6IFN1YnJlZ2lvbiAzMSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IzMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgU1IzMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMzFfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjMxX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IzMV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjMxX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAzMCA6IFN1YnJlZ2lvbiAzMCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IzMF9Qb3MgKDMwVUwpIC8qITwgUG9zaXRpb24gb2YgU1IzMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMzBfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjMwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IzMF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjMwX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyOSA6IFN1YnJlZ2lvbiAyOSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyOV9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjlfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI5X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyOV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI5X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyOCA6IFN1YnJlZ2lvbiAyOCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjhfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI4X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyOF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI4X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyNyA6IFN1YnJlZ2lvbiAyNyBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyN19Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjdfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyN19Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI3X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyNiA6IFN1YnJlZ2lvbiAyNiBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyNl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjZfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI2X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyNl9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI2X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyNSA6IFN1YnJlZ2lvbiAyNSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjVfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyNV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI1X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyNCA6IFN1YnJlZ2lvbiAyNCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyNF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjRfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyNF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI0X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyMyA6IFN1YnJlZ2lvbiAyMyBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyM19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjNfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIzX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyM19Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIzX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyMiA6IFN1YnJlZ2lvbiAyMiBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjJfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyMl9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIyX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyMSA6IFN1YnJlZ2lvbiAyMSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyMV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjFfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyMV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIxX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyMCA6IFN1YnJlZ2lvbiAyMCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyMF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjBfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyMF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIwX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxOSA6IFN1YnJlZ2lvbiAxOSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTlfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE5X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxOV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE5X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxOCA6IFN1YnJlZ2lvbiAxOCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxOF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMThfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE4X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxOF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE4X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxNyA6IFN1YnJlZ2lvbiAxNyBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxN19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTdfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE3X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxN19Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE3X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxNiA6IFN1YnJlZ2lvbiAxNiBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTZfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxNl9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE2X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxNSA6IFN1YnJlZ2lvbiAxNSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxNV9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTVfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxNV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE1X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxNCA6IFN1YnJlZ2lvbiAxNCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTRfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxNF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE0X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxMyA6IFN1YnJlZ2lvbiAxMyBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTNfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxM19Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEzX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxMiA6IFN1YnJlZ2lvbiAxMiBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTJfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxMl9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEyX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxMSA6IFN1YnJlZ2lvbiAxMSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTFfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjExX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxMV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjExX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxMCA6IFN1YnJlZ2lvbiAxMCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTBfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxMF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEwX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA5IDogU3VicmVnaW9uIDkgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSOV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjlfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSOV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjlfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDggOiBTdWJyZWdpb24gOCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I4X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSOF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I4IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I4X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSOF9BY2Nlc3MgKDFVTCkgLyohPCBSZWFkIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgNyA6IFN1YnJlZ2lvbiA3IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgU1I3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I3X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I3X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjdfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyByZWFkIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I3X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA2IDogU3VicmVnaW9uIDYgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSNl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjZfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSNl9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjZfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDUgOiBTdWJyZWdpb24gNSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSNV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I1IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I1X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSNV9BY2Nlc3MgKDFVTCkgLyohPCBSZWFkIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgNCA6IFN1YnJlZ2lvbiA0IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgU1I0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I0X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I0X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjRfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyByZWFkIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I0X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAzIDogU3VicmVnaW9uIDMgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjNfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSM19Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjNfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDIgOiBTdWJyZWdpb24gMiBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMl9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMl9BY2Nlc3MgKDFVTCkgLyohPCBSZWFkIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMSA6IFN1YnJlZ2lvbiAxIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxX01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjFfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyByZWFkIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAwIDogU3VicmVnaW9uIDAgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjBfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjBfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogUmVnaXN0ZXI6IE1XVV9SRUdJT05FTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUvZGlzYWJsZSByZWdpb25zIHdhdGNoICovDQorDQorLyogQml0IDI3IDogRW5hYmxlL2Rpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gUFJFR0lPTlsxXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04xUkFfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBSR04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUFJHTjFSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9QUkdOMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkdOMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04xUkFfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUFJHTjFSQV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OICovDQorDQorLyogQml0IDI2IDogRW5hYmxlL2Rpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIFBSRUdJT05bMV0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9QUkdOMVdBX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkdOMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04xV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5fUFJHTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJHTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9QUkdOMVdBX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9QUkdOMVdBX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OICovDQorDQorLyogQml0IDI1IDogRW5hYmxlL2Rpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gUFJFR0lPTlswXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04wUkFfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSR04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUFJHTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9QUkdOMFJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkdOMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04wUkFfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUFJHTjBSQV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OICovDQorDQorLyogQml0IDI0IDogRW5hYmxlL2Rpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIFBSRUdJT05bMF0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9QUkdOMFdBX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkdOMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04wV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5fUFJHTjBXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJHTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9QUkdOMFdBX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9QUkdOMFdBX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OICovDQorDQorLyogQml0IDcgOiBFbmFibGUvZGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bM10gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04zUkFfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUkdOM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjNSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9SR04zUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04zUkFfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04zUkFfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDYgOiBFbmFibGUvZGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzNdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOM1dBX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04zV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5fUkdOM1dBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOM1dBX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjNXQV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDUgOiBFbmFibGUvZGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMl0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04yUkFfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjJSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9SR04yUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04yUkFfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04yUkFfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDQgOiBFbmFibGUvZGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzJdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMldBX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04yV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5fUkdOMldBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04yV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMldBX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjJXQV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDMgOiBFbmFibGUvZGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMV0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04xUkFfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjFSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9SR04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04xUkFfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04xUkFfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDIgOiBFbmFibGUvZGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzFdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMVdBX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04xV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5fUkdOMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMVdBX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjFXQV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDEgOiBFbmFibGUvZGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMF0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04wUkFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9SR04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04wUkFfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04wUkFfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDAgOiBFbmFibGUvZGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzBdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMFdBX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04wV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5fUkdOMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMFdBX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjBXQV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogUmVnaXN0ZXI6IE1XVV9SRUdJT05FTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgcmVnaW9ucyB3YXRjaCAqLw0KKw0KKy8qIEJpdCAyNyA6IEVuYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiBQUkVHSU9OWzFdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUFJHTjFSQV9Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUFJHTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMVJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOU0VUX1BSR04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSR04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUFJHTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04xUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUFJHTjFSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OICovDQorDQorLyogQml0IDI2IDogRW5hYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiBQUkVHSU9OWzFdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUFJHTjFXQV9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUFJHTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMVdBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOU0VUX1BSR04xV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSR04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUFJHTjFXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMVdBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OICovDQorDQorLyogQml0IDI1IDogRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIFBSRUdJT05bMF0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMFJBX1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkdOMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04wUkFfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5TRVRfUFJHTjBSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJHTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMFJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUFJHTjBSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMFJBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisNCisvKiBCaXQgMjQgOiBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIFBSRUdJT05bMF0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMFdBX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkdOMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04wV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5TRVRfUFJHTjBXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJHTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMFdBX0Rpc2FibGVkICgwVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04wV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04wV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bM10gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04zUkFfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUkdOM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjNSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTlNFVF9SR04zUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04zUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjNSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjNSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzNdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOM1dBX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04zV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5TRVRfUkdOM1dBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOM1dBX0Rpc2FibGVkICgwVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOM1dBX0VuYWJsZWQgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjNXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDUgOiBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzJdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMlJBX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04yUkFfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5TRVRfUkdOMlJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04yUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMlJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04yUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04yUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDQgOiBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblsyXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjJXQV9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04yV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMldBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOU0VUX1JHTjJXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMldBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjJXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjJXQV9FbmFibGVkICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04yV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAzIDogRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblsxXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjFSQV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMVJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOU0VUX1JHTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMVJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMVJBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMV0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04xV0FfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTlNFVF9SR04xV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04xV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMVdBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMF0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04wUkFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTlNFVF9SR04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjBSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjBSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzBdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMFdBX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04wV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5TRVRfUkdOMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMFdBX0Rpc2FibGVkICgwVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMFdBX0VuYWJsZWQgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjBXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogUmVnaXN0ZXI6IE1XVV9SRUdJT05FTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIHJlZ2lvbnMgd2F0Y2ggKi8NCisNCisvKiBCaXQgMjcgOiBEaXNhYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIFBSRUdJT05bMV0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMVJBX1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkdOMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1BSR04xUkFfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5DTFJfUFJHTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJHTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMVJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjFSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMVJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisNCisvKiBCaXQgMjYgOiBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiBQUkVHSU9OWzFdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjFXQV9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUFJHTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMVdBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOQ0xSX1BSR04xV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSR04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjFXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMVdBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OICovDQorDQorLyogQml0IDI1IDogRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiBQUkVHSU9OWzBdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjBSQV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUFJHTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMFJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOQ0xSX1BSR04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSR04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjBSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1BSR04wUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjBSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OICovDQorDQorLyogQml0IDI0IDogRGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gUFJFR0lPTlswXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1BSR04wV0FfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSR04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTkNMUl9QUkdOMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkdOMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1BSR04wV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjBXQV9FbmFibGVkICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjBXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiAqLw0KKw0KKy8qIEJpdCA3IDogRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bM10gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04zUkFfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUkdOM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjNSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTkNMUl9SR04zUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04zUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjNSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjNSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgNiA6IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblszXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjNXQV9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOM1dBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOQ0xSX1JHTjNXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOM1dBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjNXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjNXQV9FbmFibGVkICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04zV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA1IDogRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMl0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04yUkFfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjJSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTkNMUl9SR04yUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04yUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjJSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjJSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgNCA6IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblsyXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjJXQV9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04yV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMldBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOQ0xSX1JHTjJXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMldBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjJXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjJXQV9FbmFibGVkICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04yV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAzIDogRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMV0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04xUkFfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjFSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTkNMUl9SR04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04xUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjFSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjFSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgMiA6IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblsxXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjFXQV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMVdBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOQ0xSX1JHTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjFXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjFXQV9FbmFibGVkICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04xV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxIDogRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMF0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04wUkFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTkNMUl9SR04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjBSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjBSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgMCA6IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblswXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjBXQV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMFdBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOQ0xSX1JHTjBXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjBXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjBXQV9FbmFibGVkICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04wV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBNV1VfUkVHSU9OX1NUQVJUICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBTdGFydCBhZGRyZXNzIGZvciByZWdpb24gMCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBTdGFydCBhZGRyZXNzIGZvciByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05fU1RBUlRfU1RBUlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9OX1NUQVJUX1NUQVJUX01zayAoMHhGRkZGRkZGRlVMIDw8IE1XVV9SRUdJT05fU1RBUlRfU1RBUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVJUIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBNV1VfUkVHSU9OX0VORCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgRW5kIGFkZHJlc3Mgb2YgcmVnaW9uIDAgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogRW5kIGFkZHJlc3Mgb2YgcmVnaW9uLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTl9FTkRfRU5EX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05fRU5EX0VORF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBNV1VfUkVHSU9OX0VORF9FTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTVdVX1BSRUdJT05fU1RBUlQgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovDQorDQorLyogQml0cyAzMS4uMCA6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVEFSVF9TVEFSVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NUQVJUX1NUQVJUX01zayAoMHhGRkZGRkZGRlVMIDw8IE1XVV9QUkVHSU9OX1NUQVJUX1NUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFSVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTVdVX1BSRUdJT05fRU5EICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fRU5EX0VORF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9FTkRfRU5EX01zayAoMHhGRkZGRkZGRlVMIDw8IE1XVV9QUkVHSU9OX0VORF9FTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTVdVX1BSRUdJT05fU1VCUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgU3VicmVnaW9ucyBvZiByZWdpb24gMCAqLw0KKw0KKy8qIEJpdCAzMSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMzEgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMzFfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMzEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMzFfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMzFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMzEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMzFfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IzMV9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAzMCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMzAgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMzBfUG9zICgzMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMzAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMzBfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMzAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMzBfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IzMF9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyOSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMjkgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjlfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjlfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyOV9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyOCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMjggaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjhfUG9zICgyOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjggZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjhfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjggZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjhfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyOF9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyNyA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMjcgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjdfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjdfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjdfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyN19JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyNiA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMjYgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjZfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjZfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNl9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyNSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMjUgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjVfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjVfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjVfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNV9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyNCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMjQgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjRfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjRfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjRfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNF9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyMyA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMjMgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjNfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjNfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyM19JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyMiA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMjIgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjJfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjJfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjJfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMl9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyMSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMjEgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjFfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjFfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjFfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMV9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyMCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMjAgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjBfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMjBfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMF9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxOSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMTkgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTlfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTlfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMTlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTlfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxOV9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxOCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMTggaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMThfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTggZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMThfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTggZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMThfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxOF9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxNyA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMTcgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTdfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTdfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxN19JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxNiA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMTYgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTZfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTZfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMTZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTZfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNl9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxNSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMTUgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTVfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTVfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTVfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNV9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxNCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMTQgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTRfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTRfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNF9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxMyA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMTMgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTNfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTNfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTNfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxM19JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxMiA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMTIgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTJfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTJfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMl9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxMSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMTEgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTFfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTFfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMV9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxMCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMTAgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTBfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTBfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMTBfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMF9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCA5IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiA5IGluIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjlfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgU1I5IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjlfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I5IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjlfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I5X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDggOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgc3VicmVnaW9uIDggaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSOF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjggZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSOF9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1I4X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjggZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSOF9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjhfSW5jbHVkZSAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgNyA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gNyBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I3X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNSNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I3X01zayAoMHgxVUwgPDwgTVdVX1BSRUdJT05fU1VCU19TUjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I3X0V4Y2x1ZGUgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSN19JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCA2IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiA2IGluIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgU1I2IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjZfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I2IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjZfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I2X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDUgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgc3VicmVnaW9uIDUgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSNV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSNV9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1I1X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSNV9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjVfSW5jbHVkZSAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgNCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gNCBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I0X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I0X01zayAoMHgxVUwgPDwgTVdVX1BSRUdJT05fU1VCU19TUjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I0X0V4Y2x1ZGUgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSNF9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAzIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAzIGluIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgU1IzIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjNfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IzIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjNfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IzX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDIgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgc3VicmVnaW9uIDIgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMl9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IyX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMl9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjJfSW5jbHVkZSAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMSBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxX01zayAoMHgxVUwgPDwgTVdVX1BSRUdJT05fU1VCU19TUjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxX0V4Y2x1ZGUgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMV9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAwIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAwIGluIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1IwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjBfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjBfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IwX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorDQorLyogUGVyaXBoZXJhbDogTkZDVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBORkMtQSBjb21wYXRpYmxlIHJhZGlvICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDUgOiBTaG9ydGN1dCBiZXR3ZWVuIFRYRlJBTUVFTkQgZXZlbnQgYW5kIEVOQUJMRVJYREFUQSB0YXNrICovDQorI2RlZmluZSBORkNUX1NIT1JUU19UWEZSQU1FRU5EX0VOQUJMRVJYREFUQV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEZSQU1FRU5EX0VOQUJMRVJYREFUQSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0hPUlRTX1RYRlJBTUVFTkRfRU5BQkxFUlhEQVRBX01zayAoMHgxVUwgPDwgTkZDVF9TSE9SVFNfVFhGUkFNRUVORF9FTkFCTEVSWERBVEFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYRlJBTUVFTkRfRU5BQkxFUlhEQVRBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9TSE9SVFNfVFhGUkFNRUVORF9FTkFCTEVSWERBVEFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBORkNUX1NIT1JUU19UWEZSQU1FRU5EX0VOQUJMRVJYREFUQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDEgOiBTaG9ydGN1dCBiZXR3ZWVuIEZJRUxETE9TVCBldmVudCBhbmQgU0VOU0UgdGFzayAqLw0KKyNkZWZpbmUgTkZDVF9TSE9SVFNfRklFTERMT1NUX1NFTlNFX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEZJRUxETE9TVF9TRU5TRSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0hPUlRTX0ZJRUxETE9TVF9TRU5TRV9Nc2sgKDB4MVVMIDw8IE5GQ1RfU0hPUlRTX0ZJRUxETE9TVF9TRU5TRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRklFTERMT1NUX1NFTlNFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9TSE9SVFNfRklFTERMT1NUX1NFTlNFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgTkZDVF9TSE9SVFNfRklFTERMT1NUX1NFTlNFX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMCA6IFNob3J0Y3V0IGJldHdlZW4gRklFTERERVRFQ1RFRCBldmVudCBhbmQgQUNUSVZBVEUgdGFzayAqLw0KKyNkZWZpbmUgTkZDVF9TSE9SVFNfRklFTERERVRFQ1RFRF9BQ1RJVkFURV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBGSUVMRERFVEVDVEVEX0FDVElWQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9TSE9SVFNfRklFTERERVRFQ1RFRF9BQ1RJVkFURV9Nc2sgKDB4MVVMIDw8IE5GQ1RfU0hPUlRTX0ZJRUxEREVURUNURURfQUNUSVZBVEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZJRUxEREVURUNURURfQUNUSVZBVEUgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NIT1JUU19GSUVMRERFVEVDVEVEX0FDVElWQVRFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgTkZDVF9TSE9SVFNfRklFTERERVRFQ1RFRF9BQ1RJVkFURV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfSU5URU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOX1NUQVJURURfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1NUQVJURURfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgU0VMRUNURUQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fU0VMRUNURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFTEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9TRUxFQ1RFRF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5fU0VMRUNURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNFTEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9TRUxFQ1RFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fU0VMRUNURURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ09MTElTSU9OIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOX0NPTExJU0lPTl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ09MTElTSU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9DT0xMSVNJT05fTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX0NPTExJU0lPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09MTElTSU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9DT0xMSVNJT05fRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX0NPTExJU0lPTl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE0IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBBVVRPQ09MUkVTU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9BVVRPQ09MUkVTU1RBUlRFRF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgQVVUT0NPTFJFU1NUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0FVVE9DT0xSRVNTVEFSVEVEX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTl9BVVRPQ09MUkVTU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQVVUT0NPTFJFU1NUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0FVVE9DT0xSRVNTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9BVVRPQ09MUkVTU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEyIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRUWCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9FTkRUWF9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EVFggZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0VORFRYX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTl9FTkRUWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EVFggZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0VORFRYX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9FTkRUWF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDExIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRSWCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9FTkRSWF9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0VORFJYX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTl9FTkRSWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0VORFJYX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9FTkRSWF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSWEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JYRVJST1JfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRVJST1IgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JYRVJST1JfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX1JYRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRVJST1IgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JYRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JYRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9FUlJPUl9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fRVJST1JfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUlhGUkFNRUVORCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9SWEZSQU1FRU5EX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRlJBTUVFTkQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JYRlJBTUVFTkRfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX1JYRlJBTUVFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRlJBTUVFTkQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JYRlJBTUVFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JYRlJBTUVFTkRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSWEZSQU1FU1RBUlQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUlhGUkFNRVNUQVJUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUlhGUkFNRVNUQVJUX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTl9SWEZSQU1FU1RBUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUlhGUkFNRVNUQVJUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9SWEZSQU1FU1RBUlRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUWEZSQU1FRU5EIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOX1RYRlJBTUVFTkRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgVFhGUkFNRUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fVFhGUkFNRUVORF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5fVFhGUkFNRUVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhGUkFNRUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fVFhGUkFNRUVORF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fVFhGUkFNRUVORF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYRlJBTUVTVEFSVCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9UWEZSQU1FU1RBUlRfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgVFhGUkFNRVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9UWEZSQU1FU1RBUlRfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX1RYRlJBTUVTVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhGUkFNRVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9UWEZSQU1FU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX1RYRlJBTUVTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEZJRUxETE9TVCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9GSUVMRExPU1RfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRklFTERMT1NUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9GSUVMRExPU1RfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX0ZJRUxETE9TVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRklFTERMT1NUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9GSUVMRExPU1RfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX0ZJRUxETE9TVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEZJRUxEREVURUNURUQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fRklFTERERVRFQ1RFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBGSUVMRERFVEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9GSUVMRERFVEVDVEVEX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTl9GSUVMRERFVEVDVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBGSUVMRERFVEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9GSUVMRERFVEVDVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9GSUVMRERFVEVDVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUkVBRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JFQURZX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTl9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9SRUFEWV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1NUQVJURURfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1NUQVJURURfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOU0VUX1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1NUQVJURURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNFTEVDVEVEIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1NFTEVDVEVEX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBTRUxFQ1RFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfU0VMRUNURURfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOU0VUX1NFTEVDVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRUxFQ1RFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfU0VMRUNURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9TRUxFQ1RFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9TRUxFQ1RFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTggOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ09MTElTSU9OIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0NPTExJU0lPTl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ09MTElTSU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9DT0xMSVNJT05fTXNrICgweDFVTCA8PCBORkNUX0lOVEVOU0VUX0NPTExJU0lPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09MTElTSU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9DT0xMSVNJT05fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9DT0xMSVNJT05fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfQ09MTElTSU9OX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBBVVRPQ09MUkVTU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9BVVRPQ09MUkVTU1RBUlRFRF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgQVVUT0NPTFJFU1NUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0FVVE9DT0xSRVNTVEFSVEVEX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTlNFVF9BVVRPQ09MUkVTU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQVVUT0NPTFJFU1NUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0FVVE9DT0xSRVNTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfQVVUT0NPTFJFU1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfQVVUT0NPTFJFU1NUQVJURURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFRYIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0VORFRYX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRUWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRU5EVFhfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOU0VUX0VORFRYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRUWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRU5EVFhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9FTkRUWF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9FTkRUWF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EUlggZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRU5EUlhfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9FTkRSWF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfRU5EUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9FTkRSWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0VORFJYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0VORFJYX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSWEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRVJST1JfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRVJST1IgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRVJST1JfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOU0VUX1JYRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRVJST1IgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9SWEVSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRVJST1JfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRVJST1JfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0VSUk9SX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTlNFVF9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRVJST1JfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUlhGUkFNRUVORCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9SWEZSQU1FRU5EX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRlJBTUVFTkQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRlJBTUVFTkRfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOU0VUX1JYRlJBTUVFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRlJBTUVFTkQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRlJBTUVFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9SWEZSQU1FRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRlJBTUVFTkRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUlhGUkFNRVNUQVJUIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRlJBTUVTVEFSVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBSWEZSQU1FU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRlJBTUVTVEFSVF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfUlhGUkFNRVNUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWEZSQU1FU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRlJBTUVTVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRlJBTUVTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9SWEZSQU1FU1RBUlRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFhGUkFNRUVORCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9UWEZSQU1FRU5EX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYRlJBTUVFTkQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1RYRlJBTUVFTkRfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOU0VUX1RYRlJBTUVFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYRlJBTUVFTkQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1RYRlJBTUVFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9UWEZSQU1FRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1RYRlJBTUVFTkRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFhGUkFNRVNUQVJUIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1RYRlJBTUVTVEFSVF9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEZSQU1FU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1RYRlJBTUVTVEFSVF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfVFhGUkFNRVNUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEZSQU1FU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1RYRlJBTUVTVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1RYRlJBTUVTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9UWEZSQU1FU1RBUlRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRklFTERMT1NUIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0ZJRUxETE9TVF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBGSUVMRExPU1QgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0ZJRUxETE9TVF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfRklFTERMT1NUX1BvcykgLyohPCBCaXQgbWFzayBvZiBGSUVMRExPU1QgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0ZJRUxETE9TVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0ZJRUxETE9TVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9GSUVMRExPU1RfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRklFTERERVRFQ1RFRCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9GSUVMRERFVEVDVEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEZJRUxEREVURUNURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0ZJRUxEREVURUNURURfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOU0VUX0ZJRUxEREVURUNURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZJRUxEREVURUNURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0ZJRUxEREVURUNURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9GSUVMRERFVEVDVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0ZJRUxEREVURUNURURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUkVBRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JFQURZX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTlNFVF9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUkVBRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfU1RBUlRFRF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5DTFJfU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfU1RBUlRFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNFTEVDVEVEIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1NFTEVDVEVEX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBTRUxFQ1RFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfU0VMRUNURURfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX1NFTEVDVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRUxFQ1RFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfU0VMRUNURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9TRUxFQ1RFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9TRUxFQ1RFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTggOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENPTExJU0lPTiBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9DT0xMSVNJT05fUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTExJU0lPTiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfQ09MTElTSU9OX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTkNMUl9DT0xMSVNJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTExJU0lPTiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfQ09MTElTSU9OX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfQ09MTElTSU9OX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0NPTExJU0lPTl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEFVVE9DT0xSRVNTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0FVVE9DT0xSRVNTVEFSVEVEX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBBVVRPQ09MUkVTU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfQVVUT0NPTFJFU1NUQVJURURfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX0FVVE9DT0xSRVNTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBBVVRPQ09MUkVTU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfQVVUT0NPTFJFU1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9BVVRPQ09MUkVTU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9BVVRPQ09MUkVTU1RBUlRFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFRYIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0VORFRYX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRUWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRU5EVFhfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX0VORFRYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRUWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRU5EVFhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9FTkRUWF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9FTkRUWF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFJYIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0VORFJYX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRU5EUlhfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX0VORFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRU5EUlhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9FTkRSWF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9FTkRSWF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhFUlJPUl9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgUlhFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhFUlJPUl9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5DTFJfUlhFUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhFUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1JYRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhFUlJPUl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRVJST1JfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0VSUk9SX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTkNMUl9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRVJST1JfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYRlJBTUVFTkQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhGUkFNRUVORF9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBSWEZSQU1FRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEZSQU1FRU5EX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTkNMUl9SWEZSQU1FRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWEZSQU1FRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEZSQU1FRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhGUkFNRUVORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEZSQU1FRU5EX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSWEZSQU1FU1RBUlQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhGUkFNRVNUQVJUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhGUkFNRVNUQVJUX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTkNMUl9SWEZSQU1FU1RBUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhGUkFNRVNUQVJUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhGUkFNRVNUQVJUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1JYRlJBTUVTVEFSVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFhGUkFNRUVORCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9UWEZSQU1FRU5EX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYRlJBTUVFTkQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1RYRlJBTUVFTkRfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX1RYRlJBTUVFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYRlJBTUVFTkQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1RYRlJBTUVFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9UWEZSQU1FRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1RYRlJBTUVFTkRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYRlJBTUVTVEFSVCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9UWEZSQU1FU1RBUlRfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgVFhGUkFNRVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9UWEZSQU1FU1RBUlRfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX1RYRlJBTUVTVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhGUkFNRVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9UWEZSQU1FU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9UWEZSQU1FU1RBUlRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfVFhGUkFNRVNUQVJUX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBGSUVMRExPU1QgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRklFTERMT1NUX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEZJRUxETE9TVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRklFTERMT1NUX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTkNMUl9GSUVMRExPU1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZJRUxETE9TVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRklFTERMT1NUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRklFTERMT1NUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0ZJRUxETE9TVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRklFTERERVRFQ1RFRCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9GSUVMRERFVEVDVEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEZJRUxEREVURUNURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0ZJRUxEREVURUNURURfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX0ZJRUxEREVURUNURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZJRUxEREVURUNURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0ZJRUxEREVURUNURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9GSUVMRERFVEVDVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0ZJRUxEREVURUNURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFQURZIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1JFQURZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SRUFEWV9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5DTFJfUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SRUFEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1JFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1JFQURZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBORkNUX0VSUk9SU1RBVFVTICovDQorLyogRGVzY3JpcHRpb246IE5GQyBFcnJvciBTdGF0dXMgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMCA6IE5vIFNUQVJUVFggdGFzayB0cmlnZ2VyZWQgYmVmb3JlIGV4cGlyYXRpb24gb2YgdGhlIHRpbWUgc2V0IGluIEZSQU1FREVMQVlNQVggKi8NCisjZGVmaW5lIE5GQ1RfRVJST1JTVEFUVVNfRlJBTUVERUxBWVRJTUVPVVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRlJBTUVERUxBWVRJTUVPVVQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0VSUk9SU1RBVFVTX0ZSQU1FREVMQVlUSU1FT1VUX01zayAoMHgxVUwgPDwgTkZDVF9FUlJPUlNUQVRVU19GUkFNRURFTEFZVElNRU9VVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJBTUVERUxBWVRJTUVPVVQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfRlJBTUVTVEFUVVNfUlggKi8NCisvKiBEZXNjcmlwdGlvbjogUmVzdWx0IG9mIGxhc3QgaW5jb21pbmcgZnJhbWUgKi8NCisNCisvKiBCaXQgMyA6IE92ZXJydW4gZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIE5GQ1RfRlJBTUVTVEFUVVNfUlhfT1ZFUlJVTl9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBPVkVSUlVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRVNUQVRVU19SWF9PVkVSUlVOX01zayAoMHgxVUwgPDwgTkZDVF9GUkFNRVNUQVRVU19SWF9PVkVSUlVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVkVSUlVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRVNUQVRVU19SWF9PVkVSUlVOX05vT3ZlcnJ1biAoMFVMKSAvKiE8IE5vIG92ZXJydW4gZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIE5GQ1RfRlJBTUVTVEFUVVNfUlhfT1ZFUlJVTl9PdmVycnVuICgxVUwpIC8qITwgT3ZlcnJ1biBlcnJvciAqLw0KKw0KKy8qIEJpdCAyIDogUGFyaXR5IHN0YXR1cyBvZiByZWNlaXZlZCBmcmFtZSAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRVNUQVRVU19SWF9QQVJJVFlTVEFUVVNfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUEFSSVRZU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRVNUQVRVU19SWF9QQVJJVFlTVEFUVVNfTXNrICgweDFVTCA8PCBORkNUX0ZSQU1FU1RBVFVTX1JYX1BBUklUWVNUQVRVU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUEFSSVRZU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRVNUQVRVU19SWF9QQVJJVFlTVEFUVVNfUGFyaXR5T0sgKDBVTCkgLyohPCBGcmFtZSByZWNlaXZlZCB3aXRoIHBhcml0eSBPSyAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRVNUQVRVU19SWF9QQVJJVFlTVEFUVVNfUGFyaXR5RXJyb3IgKDFVTCkgLyohPCBGcmFtZSByZWNlaXZlZCB3aXRoIHBhcml0eSBlcnJvciAqLw0KKw0KKy8qIEJpdCAwIDogTm8gdmFsaWQgZW5kIG9mIGZyYW1lIChFb0YpIGRldGVjdGVkICovDQorI2RlZmluZSBORkNUX0ZSQU1FU1RBVFVTX1JYX0NSQ0VSUk9SX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENSQ0VSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRVNUQVRVU19SWF9DUkNFUlJPUl9Nc2sgKDB4MVVMIDw8IE5GQ1RfRlJBTUVTVEFUVVNfUlhfQ1JDRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENSQ0VSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRVNUQVRVU19SWF9DUkNFUlJPUl9DUkNDb3JyZWN0ICgwVUwpIC8qITwgVmFsaWQgQ1JDIGRldGVjdGVkICovDQorI2RlZmluZSBORkNUX0ZSQU1FU1RBVFVTX1JYX0NSQ0VSUk9SX0NSQ0Vycm9yICgxVUwpIC8qITwgQ1JDIHJlY2VpdmVkIGRvZXMgbm90IG1hdGNoIGxvY2FsIGNoZWNrICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfTkZDVEFHU1RBVEUgKi8NCisvKiBEZXNjcmlwdGlvbjogTmZjVGFnIHN0YXRlIHJlZ2lzdGVyICovDQorDQorLyogQml0cyAyLi4wIDogTmZjVGFnIHN0YXRlICovDQorI2RlZmluZSBORkNUX05GQ1RBR1NUQVRFX05GQ1RBR1NUQVRFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE5GQ1RBR1NUQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9ORkNUQUdTVEFURV9ORkNUQUdTVEFURV9Nc2sgKDB4N1VMIDw8IE5GQ1RfTkZDVEFHU1RBVEVfTkZDVEFHU1RBVEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5GQ1RBR1NUQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9ORkNUQUdTVEFURV9ORkNUQUdTVEFURV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkIG9yIHNlbnNlICovDQorI2RlZmluZSBORkNUX05GQ1RBR1NUQVRFX05GQ1RBR1NUQVRFX1JhbXBVcCAoMlVMKSAvKiE8IFJhbXBVcCAqLw0KKyNkZWZpbmUgTkZDVF9ORkNUQUdTVEFURV9ORkNUQUdTVEFURV9JZGxlICgzVUwpIC8qITwgSWRsZSAqLw0KKyNkZWZpbmUgTkZDVF9ORkNUQUdTVEFURV9ORkNUQUdTVEFURV9SZWNlaXZlICg0VUwpIC8qITwgUmVjZWl2ZSAqLw0KKyNkZWZpbmUgTkZDVF9ORkNUQUdTVEFURV9ORkNUQUdTVEFURV9GcmFtZURlbGF5ICg1VUwpIC8qITwgRnJhbWVEZWxheSAqLw0KKyNkZWZpbmUgTkZDVF9ORkNUQUdTVEFURV9ORkNUQUdTVEFURV9UcmFuc21pdCAoNlVMKSAvKiE8IFRyYW5zbWl0ICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfRklFTERQUkVTRU5UICovDQorLyogRGVzY3JpcHRpb246IEluZGljYXRlcyB0aGUgcHJlc2VuY2Ugb3Igbm90IG9mIGEgdmFsaWQgZmllbGQgKi8NCisNCisvKiBCaXQgMSA6IEluZGljYXRlcyBpZiB0aGUgbG93IGxldmVsIGhhcyBsb2NrZWQgdG8gdGhlIGZpZWxkICovDQorI2RlZmluZSBORkNUX0ZJRUxEUFJFU0VOVF9MT0NLREVURUNUX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIExPQ0tERVRFQ1QgZmllbGQuICovDQorI2RlZmluZSBORkNUX0ZJRUxEUFJFU0VOVF9MT0NLREVURUNUX01zayAoMHgxVUwgPDwgTkZDVF9GSUVMRFBSRVNFTlRfTE9DS0RFVEVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTE9DS0RFVEVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfRklFTERQUkVTRU5UX0xPQ0tERVRFQ1RfTm90TG9ja2VkICgwVUwpIC8qITwgTm90IGxvY2tlZCB0byBmaWVsZCAqLw0KKyNkZWZpbmUgTkZDVF9GSUVMRFBSRVNFTlRfTE9DS0RFVEVDVF9Mb2NrZWQgKDFVTCkgLyohPCBMb2NrZWQgdG8gZmllbGQgKi8NCisNCisvKiBCaXQgMCA6IEluZGljYXRlcyBpZiBhIHZhbGlkIGZpZWxkIGlzIHByZXNlbnQuIEF2YWlsYWJsZSBvbmx5IGluIHRoZSBhY3RpdmF0ZWQgc3RhdGUuICovDQorI2RlZmluZSBORkNUX0ZJRUxEUFJFU0VOVF9GSUVMRFBSRVNFTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRklFTERQUkVTRU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9GSUVMRFBSRVNFTlRfRklFTERQUkVTRU5UX01zayAoMHgxVUwgPDwgTkZDVF9GSUVMRFBSRVNFTlRfRklFTERQUkVTRU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBGSUVMRFBSRVNFTlQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0ZJRUxEUFJFU0VOVF9GSUVMRFBSRVNFTlRfTm9GaWVsZCAoMFVMKSAvKiE8IE5vIHZhbGlkIGZpZWxkIGRldGVjdGVkICovDQorI2RlZmluZSBORkNUX0ZJRUxEUFJFU0VOVF9GSUVMRFBSRVNFTlRfRmllbGRQcmVzZW50ICgxVUwpIC8qITwgVmFsaWQgZmllbGQgZGV0ZWN0ZWQgKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9GUkFNRURFTEFZTUlOICovDQorLyogRGVzY3JpcHRpb246IE1pbmltdW0gZnJhbWUgZGVsYXkgKi8NCisNCisvKiBCaXRzIDE1Li4wIDogTWluaW11bSBmcmFtZSBkZWxheSBpbiBudW1iZXIgb2YgMTMuNTYgTUh6IGNsb2NrcyAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRURFTEFZTUlOX0ZSQU1FREVMQVlNSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRlJBTUVERUxBWU1JTiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfRlJBTUVERUxBWU1JTl9GUkFNRURFTEFZTUlOX01zayAoMHhGRkZGVUwgPDwgTkZDVF9GUkFNRURFTEFZTUlOX0ZSQU1FREVMQVlNSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZSQU1FREVMQVlNSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfRlJBTUVERUxBWU1BWCAqLw0KKy8qIERlc2NyaXB0aW9uOiBNYXhpbXVtIGZyYW1lIGRlbGF5ICovDQorDQorLyogQml0cyAxNS4uMCA6IE1heGltdW0gZnJhbWUgZGVsYXkgaW4gbnVtYmVyIG9mIDEzLjU2IE1IeiBjbG9ja3MgKi8NCisjZGVmaW5lIE5GQ1RfRlJBTUVERUxBWU1BWF9GUkFNRURFTEFZTUFYX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZSQU1FREVMQVlNQVggZmllbGQuICovDQorI2RlZmluZSBORkNUX0ZSQU1FREVMQVlNQVhfRlJBTUVERUxBWU1BWF9Nc2sgKDB4RkZGRlVMIDw8IE5GQ1RfRlJBTUVERUxBWU1BWF9GUkFNRURFTEFZTUFYX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkFNRURFTEFZTUFYIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBORkNUX0ZSQU1FREVMQVlNT0RFICovDQorLyogRGVzY3JpcHRpb246IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZm9yIHRoZSBGcmFtZSBEZWxheSBUaW1lciAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZm9yIHRoZSBGcmFtZSBEZWxheSBUaW1lciAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRURFTEFZTU9ERV9GUkFNRURFTEFZTU9ERV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBGUkFNRURFTEFZTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfRlJBTUVERUxBWU1PREVfRlJBTUVERUxBWU1PREVfTXNrICgweDNVTCA8PCBORkNUX0ZSQU1FREVMQVlNT0RFX0ZSQU1FREVMQVlNT0RFX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkFNRURFTEFZTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfRlJBTUVERUxBWU1PREVfRlJBTUVERUxBWU1PREVfRnJlZVJ1biAoMFVMKSAvKiE8IFRyYW5zbWlzc2lvbiBpcyBpbmRlcGVuZGVudCBvZiBmcmFtZSB0aW1lciBhbmQgd2lsbCBzdGFydCB3aGVuIHRoZSBTVEFSVFRYIHRhc2sgaXMgdHJpZ2dlcmVkLiBObyB0aW1lb3V0LiAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRURFTEFZTU9ERV9GUkFNRURFTEFZTU9ERV9XaW5kb3cgKDFVTCkgLyohPCBGcmFtZSBpcyB0cmFuc21pdHRlZCBiZXR3ZWVuIEZSQU1FREVMQVlNSU4gYW5kIEZSQU1FREVMQVlNQVggKi8NCisjZGVmaW5lIE5GQ1RfRlJBTUVERUxBWU1PREVfRlJBTUVERUxBWU1PREVfRXhhY3RWYWwgKDJVTCkgLyohPCBGcmFtZSBpcyB0cmFuc21pdHRlZCBleGFjdGx5IGF0IEZSQU1FREVMQVlNQVggKi8NCisjZGVmaW5lIE5GQ1RfRlJBTUVERUxBWU1PREVfRlJBTUVERUxBWU1PREVfV2luZG93R3JpZCAoM1VMKSAvKiE8IEZyYW1lIGlzIHRyYW5zbWl0dGVkIG9uIGEgYml0IGdyaWQgYmV0d2VlbiBGUkFNRURFTEFZTUlOIGFuZCBGUkFNRURFTEFZTUFYICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfUEFDS0VUUFRSICovDQorLyogRGVzY3JpcHRpb246IFBhY2tldCBwb2ludGVyIGZvciBUWEQgYW5kIFJYRCBkYXRhIHN0b3JhZ2UgaW4gRGF0YSBSQU0gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUGFja2V0IHBvaW50ZXIgZm9yIFRYRCBhbmQgUlhEIGRhdGEgc3RvcmFnZSBpbiBEYXRhIFJBTS4gVGhpcyBhZGRyZXNzIGlzIGEgYnl0ZS1hbGlnbmVkIFJBTSBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgTkZDVF9QQUNLRVRQVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfUEFDS0VUUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBORkNUX1BBQ0tFVFBUUl9QVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9NQVhMRU4gKi8NCisvKiBEZXNjcmlwdGlvbjogU2l6ZSBvZiB0aGUgUkFNIGJ1ZmZlciBhbGxvY2F0ZWQgdG8gVFhEIGFuZCBSWEQgZGF0YSBzdG9yYWdlIGVhY2ggKi8NCisNCisvKiBCaXRzIDguLjAgOiBTaXplIG9mIHRoZSBSQU0gYnVmZmVyIGFsbG9jYXRlZCB0byBUWEQgYW5kIFJYRCBkYXRhIHN0b3JhZ2UgZWFjaCAqLw0KKyNkZWZpbmUgTkZDVF9NQVhMRU5fTUFYTEVOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWExFTiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfTUFYTEVOX01BWExFTl9Nc2sgKDB4MUZGVUwgPDwgTkZDVF9NQVhMRU5fTUFYTEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhMRU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfVFhEX0ZSQU1FQ09ORklHICovDQorLyogRGVzY3JpcHRpb246IENvbmZpZ3VyYXRpb24gb2Ygb3V0Z29pbmcgZnJhbWVzICovDQorDQorLyogQml0IDQgOiBDUkMgbW9kZSBmb3Igb3V0Z29pbmcgZnJhbWVzICovDQorI2RlZmluZSBORkNUX1RYRF9GUkFNRUNPTkZJR19DUkNNT0RFVFhfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQ1JDTU9ERVRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9UWERfRlJBTUVDT05GSUdfQ1JDTU9ERVRYX01zayAoMHgxVUwgPDwgTkZDVF9UWERfRlJBTUVDT05GSUdfQ1JDTU9ERVRYX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUkNNT0RFVFggZmllbGQuICovDQorI2RlZmluZSBORkNUX1RYRF9GUkFNRUNPTkZJR19DUkNNT0RFVFhfTm9DUkNUWCAoMFVMKSAvKiE8IENSQyBpcyBub3QgYWRkZWQgdG8gdGhlIGZyYW1lICovDQorI2RlZmluZSBORkNUX1RYRF9GUkFNRUNPTkZJR19DUkNNT0RFVFhfQ1JDMTZUWCAoMVVMKSAvKiE8IDE2IGJpdCBDUkMgYWRkZWQgdG8gdGhlIGZyYW1lIGJhc2VkIG9uIGFsbCB0aGUgZGF0YSByZWFkIGZyb20gUkFNIHRoYXQgaXMgdXNlZCBpbiB0aGUgZnJhbWUgKi8NCisNCisvKiBCaXQgMiA6IEFkZGluZyBTb0Ygb3Igbm90IGluIFRYIGZyYW1lcyAqLw0KKyNkZWZpbmUgTkZDVF9UWERfRlJBTUVDT05GSUdfU09GX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNPRiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0ZSQU1FQ09ORklHX1NPRl9Nc2sgKDB4MVVMIDw8IE5GQ1RfVFhEX0ZSQU1FQ09ORklHX1NPRl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU09GIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9UWERfRlJBTUVDT05GSUdfU09GX05vU29GICgwVUwpIC8qITwgU29GIHN5bWJvbCBub3QgYWRkZWQgKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0ZSQU1FQ09ORklHX1NPRl9Tb0YgKDFVTCkgLyohPCBTb0Ygc3ltYm9sIGFkZGVkICovDQorDQorLyogQml0IDEgOiBEaXNjYXJkaW5nIHVudXNlZCBiaXRzIGF0IHN0YXJ0IG9yIGVuZCBvZiBhIGZyYW1lICovDQorI2RlZmluZSBORkNUX1RYRF9GUkFNRUNPTkZJR19ESVNDQVJETU9ERV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBESVNDQVJETU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0ZSQU1FQ09ORklHX0RJU0NBUkRNT0RFX01zayAoMHgxVUwgPDwgTkZDVF9UWERfRlJBTUVDT05GSUdfRElTQ0FSRE1PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERJU0NBUkRNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9UWERfRlJBTUVDT05GSUdfRElTQ0FSRE1PREVfRGlzY2FyZEVuZCAoMFVMKSAvKiE8IFVudXNlZCBiaXRzIGFyZSBkaXNjYXJkZWQgYXQgZW5kIG9mIGZyYW1lIChFb0YpICovDQorI2RlZmluZSBORkNUX1RYRF9GUkFNRUNPTkZJR19ESVNDQVJETU9ERV9EaXNjYXJkU3RhcnQgKDFVTCkgLyohPCBVbnVzZWQgYml0cyBhcmUgZGlzY2FyZGVkIGF0IHN0YXJ0IG9mIGZyYW1lIChTb0YpICovDQorDQorLyogQml0IDAgOiBJbmRpY2F0ZXMgaWYgcGFyaXR5IGlzIGFkZGVkIHRvIHRoZSBmcmFtZSAqLw0KKyNkZWZpbmUgTkZDVF9UWERfRlJBTUVDT05GSUdfUEFSSVRZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0ZSQU1FQ09ORklHX1BBUklUWV9Nc2sgKDB4MVVMIDw8IE5GQ1RfVFhEX0ZSQU1FQ09ORklHX1BBUklUWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUEFSSVRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9UWERfRlJBTUVDT05GSUdfUEFSSVRZX05vUGFyaXR5ICgwVUwpIC8qITwgUGFyaXR5IGlzIG5vdCBhZGRlZCB0byBUWCBmcmFtZXMgKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0ZSQU1FQ09ORklHX1BBUklUWV9QYXJpdHkgKDFVTCkgLyohPCBQYXJpdHkgaXMgYWRkZWQgdG8gVFggZnJhbWVzICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfVFhEX0FNT1VOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaXplIG9mIG91dGdvaW5nIGZyYW1lICovDQorDQorLyogQml0cyAxMS4uMyA6IE51bWJlciBvZiBjb21wbGV0ZSBieXRlcyB0aGF0IHNoYWxsIGJlIGluY2x1ZGVkIGluIHRoZSBmcmFtZSwgZXhjbHVkaW5nIENSQywgcGFyaXR5IGFuZCBmcmFtaW5nICovDQorI2RlZmluZSBORkNUX1RYRF9BTU9VTlRfVFhEQVRBQllURVNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgVFhEQVRBQllURVMgZmllbGQuICovDQorI2RlZmluZSBORkNUX1RYRF9BTU9VTlRfVFhEQVRBQllURVNfTXNrICgweDFGRlVMIDw8IE5GQ1RfVFhEX0FNT1VOVF9UWERBVEFCWVRFU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhEQVRBQllURVMgZmllbGQuICovDQorDQorLyogQml0cyAyLi4wIDogTnVtYmVyIG9mIGJpdHMgaW4gdGhlIGxhc3Qgb3IgZmlyc3QgYnl0ZSByZWFkIGZyb20gUkFNIHRoYXQgc2hhbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZyYW1lIChleGNsdWRpbmcgcGFyaXR5IGJpdCkuICovDQorI2RlZmluZSBORkNUX1RYRF9BTU9VTlRfVFhEQVRBQklUU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWERBVEFCSVRTIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9UWERfQU1PVU5UX1RYREFUQUJJVFNfTXNrICgweDdVTCA8PCBORkNUX1RYRF9BTU9VTlRfVFhEQVRBQklUU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhEQVRBQklUUyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9SWERfRlJBTUVDT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29uZmlndXJhdGlvbiBvZiBpbmNvbWluZyBmcmFtZXMgKi8NCisNCisvKiBCaXQgNCA6IENSQyBtb2RlIGZvciBpbmNvbWluZyBmcmFtZXMgKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0ZSQU1FQ09ORklHX0NSQ01PREVSWF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDUkNNT0RFUlggZmllbGQuICovDQorI2RlZmluZSBORkNUX1JYRF9GUkFNRUNPTkZJR19DUkNNT0RFUlhfTXNrICgweDFVTCA8PCBORkNUX1JYRF9GUkFNRUNPTkZJR19DUkNNT0RFUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENSQ01PREVSWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0ZSQU1FQ09ORklHX0NSQ01PREVSWF9Ob0NSQ1JYICgwVUwpIC8qITwgQ1JDIGlzIG5vdCBleHBlY3RlZCBpbiBSWCBmcmFtZXMgKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0ZSQU1FQ09ORklHX0NSQ01PREVSWF9DUkMxNlJYICgxVUwpIC8qITwgTGFzdCAxNiBiaXRzIGluIFJYIGZyYW1lIGlzIENSQywgQ1JDIGlzIGNoZWNrZWQgYW5kIENSQ1NUQVRVUyB1cGRhdGVkICovDQorDQorLyogQml0IDIgOiBTb0YgZXhwZWN0ZWQgb3Igbm90IGluIFJYIGZyYW1lcyAqLw0KKyNkZWZpbmUgTkZDVF9SWERfRlJBTUVDT05GSUdfU09GX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNPRiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0ZSQU1FQ09ORklHX1NPRl9Nc2sgKDB4MVVMIDw8IE5GQ1RfUlhEX0ZSQU1FQ09ORklHX1NPRl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU09GIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9SWERfRlJBTUVDT05GSUdfU09GX05vU29GICgwVUwpIC8qITwgU29GIHN5bWJvbCBpcyBub3QgZXhwZWN0ZWQgaW4gUlggZnJhbWVzICovDQorI2RlZmluZSBORkNUX1JYRF9GUkFNRUNPTkZJR19TT0ZfU29GICgxVUwpIC8qITwgU29GIHN5bWJvbCBpcyBleHBlY3RlZCBpbiBSWCBmcmFtZXMgKi8NCisNCisvKiBCaXQgMCA6IEluZGljYXRlcyBpZiBwYXJpdHkgZXhwZWN0ZWQgaW4gUlggZnJhbWUgKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0ZSQU1FQ09ORklHX1BBUklUWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQQVJJVFkgZmllbGQuICovDQorI2RlZmluZSBORkNUX1JYRF9GUkFNRUNPTkZJR19QQVJJVFlfTXNrICgweDFVTCA8PCBORkNUX1JYRF9GUkFNRUNPTkZJR19QQVJJVFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0ZSQU1FQ09ORklHX1BBUklUWV9Ob1Bhcml0eSAoMFVMKSAvKiE8IFBhcml0eSBpcyBub3QgZXhwZWN0ZWQgaW4gUlggZnJhbWVzICovDQorI2RlZmluZSBORkNUX1JYRF9GUkFNRUNPTkZJR19QQVJJVFlfUGFyaXR5ICgxVUwpIC8qITwgUGFyaXR5IGlzIGV4cGVjdGVkIGluIFJYIGZyYW1lcyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBORkNUX1JYRF9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogU2l6ZSBvZiBsYXN0IGluY29taW5nIGZyYW1lICovDQorDQorLyogQml0cyAxMS4uMyA6IE51bWJlciBvZiBjb21wbGV0ZSBieXRlcyByZWNlaXZlZCBpbiB0aGUgZnJhbWUgKGluY2x1ZGluZyBDUkMsIGJ1dCBleGNsdWRpbmcgcGFyaXR5IGFuZCBTb0YvRW9GIGZyYW1pbmcpICovDQorI2RlZmluZSBORkNUX1JYRF9BTU9VTlRfUlhEQVRBQllURVNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUlhEQVRBQllURVMgZmllbGQuICovDQorI2RlZmluZSBORkNUX1JYRF9BTU9VTlRfUlhEQVRBQllURVNfTXNrICgweDFGRlVMIDw8IE5GQ1RfUlhEX0FNT1VOVF9SWERBVEFCWVRFU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhEQVRBQllURVMgZmllbGQuICovDQorDQorLyogQml0cyAyLi4wIDogTnVtYmVyIG9mIGJpdHMgaW4gdGhlIGxhc3QgYnl0ZSBpbiB0aGUgZnJhbWUsIGlmIGxlc3MgdGhhbiA4IChpbmNsdWRpbmcgQ1JDLCBidXQgZXhjbHVkaW5nIHBhcml0eSBhbmQgU29GL0VvRiBmcmFtaW5nKS4gKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0FNT1VOVF9SWERBVEFCSVRTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYREFUQUJJVFMgZmllbGQuICovDQorI2RlZmluZSBORkNUX1JYRF9BTU9VTlRfUlhEQVRBQklUU19Nc2sgKDB4N1VMIDw8IE5GQ1RfUlhEX0FNT1VOVF9SWERBVEFCSVRTX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWERBVEFCSVRTIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBORkNUX05GQ0lEMV9MQVNUICovDQorLyogRGVzY3JpcHRpb246IExhc3QgTkZDSUQxIHBhcnQgKDQsIDcgb3IgMTAgYnl0ZXMgSUQpICovDQorDQorLyogQml0cyAzMS4uMjQgOiBORkNJRDEgYnl0ZSBXICovDQorI2RlZmluZSBORkNUX05GQ0lEMV9MQVNUX05GQ0lEMV9XX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBORkNJRDFfVyBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxX0xBU1RfTkZDSUQxX1dfTXNrICgweEZGVUwgPDwgTkZDVF9ORkNJRDFfTEFTVF9ORkNJRDFfV19Qb3MpIC8qITwgQml0IG1hc2sgb2YgTkZDSUQxX1cgZmllbGQuICovDQorDQorLyogQml0cyAyMy4uMTYgOiBORkNJRDEgYnl0ZSBYICovDQorI2RlZmluZSBORkNUX05GQ0lEMV9MQVNUX05GQ0lEMV9YX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBORkNJRDFfWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxX0xBU1RfTkZDSUQxX1hfTXNrICgweEZGVUwgPDwgTkZDVF9ORkNJRDFfTEFTVF9ORkNJRDFfWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTkZDSUQxX1ggZmllbGQuICovDQorDQorLyogQml0cyAxNS4uOCA6IE5GQ0lEMSBieXRlIFkgKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxX0xBU1RfTkZDSUQxX1lfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgTkZDSUQxX1kgZmllbGQuICovDQorI2RlZmluZSBORkNUX05GQ0lEMV9MQVNUX05GQ0lEMV9ZX01zayAoMHhGRlVMIDw8IE5GQ1RfTkZDSUQxX0xBU1RfTkZDSUQxX1lfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5GQ0lEMV9ZIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE5GQ0lEMSBieXRlIFogKHZlcnkgbGFzdCBieXRlIHNlbnQpICovDQorI2RlZmluZSBORkNUX05GQ0lEMV9MQVNUX05GQ0lEMV9aX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE5GQ0lEMV9aIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfTEFTVF9ORkNJRDFfWl9Nc2sgKDB4RkZVTCA8PCBORkNUX05GQ0lEMV9MQVNUX05GQ0lEMV9aX1BvcykgLyohPCBCaXQgbWFzayBvZiBORkNJRDFfWiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9ORkNJRDFfMk5EX0xBU1QgKi8NCisvKiBEZXNjcmlwdGlvbjogU2Vjb25kIGxhc3QgTkZDSUQxIHBhcnQgKDcgb3IgMTAgYnl0ZXMgSUQpICovDQorDQorLyogQml0cyAyMy4uMTYgOiBORkNJRDEgYnl0ZSBUICovDQorI2RlZmluZSBORkNUX05GQ0lEMV8yTkRfTEFTVF9ORkNJRDFfVF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgTkZDSUQxX1QgZmllbGQuICovDQorI2RlZmluZSBORkNUX05GQ0lEMV8yTkRfTEFTVF9ORkNJRDFfVF9Nc2sgKDB4RkZVTCA8PCBORkNUX05GQ0lEMV8yTkRfTEFTVF9ORkNJRDFfVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTkZDSUQxX1QgZmllbGQuICovDQorDQorLyogQml0cyAxNS4uOCA6IE5GQ0lEMSBieXRlIFUgKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxXzJORF9MQVNUX05GQ0lEMV9VX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIE5GQ0lEMV9VIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfMk5EX0xBU1RfTkZDSUQxX1VfTXNrICgweEZGVUwgPDwgTkZDVF9ORkNJRDFfMk5EX0xBU1RfTkZDSUQxX1VfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5GQ0lEMV9VIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE5GQ0lEMSBieXRlIFYgKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxXzJORF9MQVNUX05GQ0lEMV9WX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE5GQ0lEMV9WIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfMk5EX0xBU1RfTkZDSUQxX1ZfTXNrICgweEZGVUwgPDwgTkZDVF9ORkNJRDFfMk5EX0xBU1RfTkZDSUQxX1ZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5GQ0lEMV9WIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBORkNUX05GQ0lEMV8zUkRfTEFTVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBUaGlyZCBsYXN0IE5GQ0lEMSBwYXJ0ICgxMCBieXRlcyBJRCkgKi8NCisNCisvKiBCaXRzIDIzLi4xNiA6IE5GQ0lEMSBieXRlIFEgKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxXzNSRF9MQVNUX05GQ0lEMV9RX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBORkNJRDFfUSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxXzNSRF9MQVNUX05GQ0lEMV9RX01zayAoMHhGRlVMIDw8IE5GQ1RfTkZDSUQxXzNSRF9MQVNUX05GQ0lEMV9RX1BvcykgLyohPCBCaXQgbWFzayBvZiBORkNJRDFfUSBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogTkZDSUQxIGJ5dGUgUiAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfM1JEX0xBU1RfTkZDSUQxX1JfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgTkZDSUQxX1IgZmllbGQuICovDQorI2RlZmluZSBORkNUX05GQ0lEMV8zUkRfTEFTVF9ORkNJRDFfUl9Nc2sgKDB4RkZVTCA8PCBORkNUX05GQ0lEMV8zUkRfTEFTVF9ORkNJRDFfUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTkZDSUQxX1IgZmllbGQuICovDQorDQorLyogQml0cyA3Li4wIDogTkZDSUQxIGJ5dGUgUyAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfM1JEX0xBU1RfTkZDSUQxX1NfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTkZDSUQxX1MgZmllbGQuICovDQorI2RlZmluZSBORkNUX05GQ0lEMV8zUkRfTEFTVF9ORkNJRDFfU19Nc2sgKDB4RkZVTCA8PCBORkNUX05GQ0lEMV8zUkRfTEFTVF9ORkNJRDFfU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgTkZDSUQxX1MgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfQVVUT0NPTFJFU0NPTkZJRyAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb250cm9scyB0aGUgYXV0byBjb2xsaXNpb24gcmVzb2x1dGlvbiBmdW5jdGlvbi4gVGhpcyBzZXR0aW5nIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIE5GQ1QgcGVyaXBoZXJhbCBpcyBlbmFibGVkLiAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlcy9kaXNhYmxlcyBhdXRvIGNvbGxpc2lvbiByZXNvbHV0aW9uICovDQorI2RlZmluZSBORkNUX0FVVE9DT0xSRVNDT05GSUdfTU9ERV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9BVVRPQ09MUkVTQ09ORklHX01PREVfTXNrICgweDFVTCA8PCBORkNUX0FVVE9DT0xSRVNDT05GSUdfTU9ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfQVVUT0NPTFJFU0NPTkZJR19NT0RFX0VuYWJsZWQgKDBVTCkgLyohPCBBdXRvIGNvbGxpc2lvbiByZXNvbHV0aW9uIGVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfQVVUT0NPTFJFU0NPTkZJR19NT0RFX0Rpc2FibGVkICgxVUwpIC8qITwgQXV0byBjb2xsaXNpb24gcmVzb2x1dGlvbiBkaXNhYmxlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBORkNUX1NFTlNSRVMgKi8NCisvKiBEZXNjcmlwdGlvbjogTkZDLUEgU0VOU19SRVMgYXV0by1yZXNwb25zZSBzZXR0aW5ncyAqLw0KKw0KKy8qIEJpdHMgMTUuLjEyIDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNoYWxsIGJlIDAuICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfUkZVNzRfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJGVTc0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9TRU5TUkVTX1JGVTc0X01zayAoMHhGVUwgPDwgTkZDVF9TRU5TUkVTX1JGVTc0X1BvcykgLyohPCBCaXQgbWFzayBvZiBSRlU3NCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDExLi44IDogVGFnIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gYXMgZGVmaW5lZCBieSB0aGUgYjQ6YjEgb2YgYnl0ZSAyIGluIFNFTlNfUkVTIHJlc3BvbnNlIGluIHRoZSBORkMgRm9ydW0sIE5GQyBEaWdpdGFsIFByb3RvY29sIFRlY2huaWNhbCBTcGVjaWZpY2F0aW9uICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfUExBVEZDT05GSUdfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUExBVEZDT05GSUcgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfUExBVEZDT05GSUdfTXNrICgweEZVTCA8PCBORkNUX1NFTlNSRVNfUExBVEZDT05GSUdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBMQVRGQ09ORklHIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNy4uNiA6IE5GQ0lEMSBzaXplLiBUaGlzIHZhbHVlIGlzIHVzZWQgYnkgdGhlIGF1dG8gY29sbGlzaW9uIHJlc29sdXRpb24gZW5naW5lLiAqLw0KKyNkZWZpbmUgTkZDVF9TRU5TUkVTX05GQ0lEU0laRV9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBORkNJRFNJWkUgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfTkZDSURTSVpFX01zayAoMHgzVUwgPDwgTkZDVF9TRU5TUkVTX05GQ0lEU0laRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTkZDSURTSVpFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9TRU5TUkVTX05GQ0lEU0laRV9ORkNJRDFTaW5nbGUgKDBVTCkgLyohPCBORkNJRDEgc2l6ZTogc2luZ2xlICg0IGJ5dGVzKSAqLw0KKyNkZWZpbmUgTkZDVF9TRU5TUkVTX05GQ0lEU0laRV9ORkNJRDFEb3VibGUgKDFVTCkgLyohPCBORkNJRDEgc2l6ZTogZG91YmxlICg3IGJ5dGVzKSAqLw0KKyNkZWZpbmUgTkZDVF9TRU5TUkVTX05GQ0lEU0laRV9ORkNJRDFUcmlwbGUgKDJVTCkgLyohPCBORkNJRDEgc2l6ZTogdHJpcGxlICgxMCBieXRlcykgKi8NCisNCisvKiBCaXQgNSA6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTaGFsbCBiZSAwLiAqLw0KKyNkZWZpbmUgTkZDVF9TRU5TUkVTX1JGVTVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUkZVNSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VOU1JFU19SRlU1X01zayAoMHgxVUwgPDwgTkZDVF9TRU5TUkVTX1JGVTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJGVTUgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogQml0IGZyYW1lIFNERCBhcyBkZWZpbmVkIGJ5IHRoZSBiNTpiMSBvZiBieXRlIDEgaW4gU0VOU19SRVMgcmVzcG9uc2UgaW4gdGhlIDxpPk5GQyBGb3J1bSwgTkZDIERpZ2l0YWwgUHJvdG9jb2wgVGVjaG5pY2FsIFNwZWNpZmljYXRpb248L2k+ICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfQklURlJBTUVTRERfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQklURlJBTUVTREQgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfQklURlJBTUVTRERfTXNrICgweDFGVUwgPDwgTkZDVF9TRU5TUkVTX0JJVEZSQU1FU0REX1BvcykgLyohPCBCaXQgbWFzayBvZiBCSVRGUkFNRVNERCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VOU1JFU19CSVRGUkFNRVNERF9TREQwMDAwMCAoMFVMKSAvKiE8IFNERCBwYXR0ZXJuIDAwMDAwICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfQklURlJBTUVTRERfU0REMDAwMDEgKDFVTCkgLyohPCBTREQgcGF0dGVybiAwMDAwMSAqLw0KKyNkZWZpbmUgTkZDVF9TRU5TUkVTX0JJVEZSQU1FU0REX1NERDAwMDEwICgyVUwpIC8qITwgU0REIHBhdHRlcm4gMDAwMTAgKi8NCisjZGVmaW5lIE5GQ1RfU0VOU1JFU19CSVRGUkFNRVNERF9TREQwMDEwMCAoNFVMKSAvKiE8IFNERCBwYXR0ZXJuIDAwMTAwICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfQklURlJBTUVTRERfU0REMDEwMDAgKDhVTCkgLyohPCBTREQgcGF0dGVybiAwMTAwMCAqLw0KKyNkZWZpbmUgTkZDVF9TRU5TUkVTX0JJVEZSQU1FU0REX1NERDEwMDAwICgxNlVMKSAvKiE8IFNERCBwYXR0ZXJuIDEwMDAwICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfU0VMUkVTICovDQorLyogRGVzY3JpcHRpb246IE5GQy1BIFNFTF9SRVMgYXV0by1yZXNwb25zZSBzZXR0aW5ncyAqLw0KKw0KKy8qIEJpdCA3IDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNoYWxsIGJlIDAuICovDQorI2RlZmluZSBORkNUX1NFTFJFU19SRlU3X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJGVTcgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NFTFJFU19SRlU3X01zayAoMHgxVUwgPDwgTkZDVF9TRUxSRVNfUkZVN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkZVNyBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQcm90b2NvbCBhcyBkZWZpbmVkIGJ5IHRoZSBiNzpiNiBvZiBTRUxfUkVTIHJlc3BvbnNlIGluIHRoZSBORkMgRm9ydW0sIE5GQyBEaWdpdGFsIFByb3RvY29sIFRlY2huaWNhbCBTcGVjaWZpY2F0aW9uICovDQorI2RlZmluZSBORkNUX1NFTFJFU19QUk9UT0NPTF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQUk9UT0NPTCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VMUkVTX1BST1RPQ09MX01zayAoMHgzVUwgPDwgTkZDVF9TRUxSRVNfUFJPVE9DT0xfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBST1RPQ09MIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMyA6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTaGFsbCBiZSAwLiAqLw0KKyNkZWZpbmUgTkZDVF9TRUxSRVNfUkZVNDNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUkZVNDMgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NFTFJFU19SRlU0M19Nc2sgKDB4M1VMIDw8IE5GQ1RfU0VMUkVTX1JGVTQzX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRlU0MyBmaWVsZC4gKi8NCisNCisvKiBCaXQgMiA6IENhc2NhZGUgYXMgZGVmaW5lZCBieSB0aGUgYjMgb2YgU0VMX1JFUyByZXNwb25zZSBpbiB0aGUgTkZDIEZvcnVtLCBORkMgRGlnaXRhbCBQcm90b2NvbCBUZWNobmljYWwgU3BlY2lmaWNhdGlvbiAoY29udHJvbGxlZCBieSBoYXJkd2FyZSwgc2hhbGwgYmUgMCkgKi8NCisjZGVmaW5lIE5GQ1RfU0VMUkVTX0NBU0NBREVfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgQ0FTQ0FERSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VMUkVTX0NBU0NBREVfTXNrICgweDFVTCA8PCBORkNUX1NFTFJFU19DQVNDQURFX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQVNDQURFIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTaGFsbCBiZSAwLiAqLw0KKyNkZWZpbmUgTkZDVF9TRUxSRVNfUkZVMTBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkZVMTAgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NFTFJFU19SRlUxMF9Nc2sgKDB4M1VMIDw8IE5GQ1RfU0VMUkVTX1JGVTEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRlUxMCBmaWVsZC4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBOVk1DICovDQorLyogRGVzY3JpcHRpb246IE5vbiBWb2xhdGlsZSBNZW1vcnkgQ29udHJvbGxlciAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBOVk1DX1JFQURZICovDQorLyogRGVzY3JpcHRpb246IFJlYWR5IGZsYWcgKi8NCisNCisvKiBCaXQgMCA6IE5WTUMgaXMgcmVhZHkgb3IgYnVzeSAqLw0KKyNkZWZpbmUgTlZNQ19SRUFEWV9SRUFEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIE5WTUNfUkVBRFlfUkVBRFlfTXNrICgweDFVTCA8PCBOVk1DX1JFQURZX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIE5WTUNfUkVBRFlfUkVBRFlfQnVzeSAoMFVMKSAvKiE8IE5WTUMgaXMgYnVzeSAob24tZ29pbmcgd3JpdGUgb3IgZXJhc2Ugb3BlcmF0aW9uKSAqLw0KKyNkZWZpbmUgTlZNQ19SRUFEWV9SRUFEWV9SZWFkeSAoMVVMKSAvKiE8IE5WTUMgaXMgcmVhZHkgKi8NCisNCisvKiBSZWdpc3RlcjogTlZNQ19DT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29uZmlndXJhdGlvbiByZWdpc3RlciAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IFByb2dyYW0gbWVtb3J5IGFjY2VzcyBtb2RlLiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBvbmx5IGFjdGl2YXRlIGVyYXNlIGFuZCB3cml0ZSBtb2RlcyB3aGVuIHRoZXkgYXJlIGFjdGl2ZWx5IHVzZWQuIEVuYWJsaW5nIHdyaXRlIG9yIGVyYXNlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2FjaGUgYW5kIGtlZXAgaXQgaW52YWxpZGF0ZWQuICovDQorI2RlZmluZSBOVk1DX0NPTkZJR19XRU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgV0VOIGZpZWxkLiAqLw0KKyNkZWZpbmUgTlZNQ19DT05GSUdfV0VOX01zayAoMHgzVUwgPDwgTlZNQ19DT05GSUdfV0VOX1BvcykgLyohPCBCaXQgbWFzayBvZiBXRU4gZmllbGQuICovDQorI2RlZmluZSBOVk1DX0NPTkZJR19XRU5fUmVuICgwVUwpIC8qITwgUmVhZCBvbmx5IGFjY2VzcyAqLw0KKyNkZWZpbmUgTlZNQ19DT05GSUdfV0VOX1dlbiAoMVVMKSAvKiE8IFdyaXRlIEVuYWJsZWQgKi8NCisjZGVmaW5lIE5WTUNfQ09ORklHX1dFTl9FZW4gKDJVTCkgLyohPCBFcmFzZSBlbmFibGVkICovDQorDQorLyogUmVnaXN0ZXI6IE5WTUNfRVJBU0VQQUdFICovDQorLyogRGVzY3JpcHRpb246IFJlZ2lzdGVyIGZvciBlcmFzaW5nIGEgcGFnZSBpbiBDb2RlIGFyZWEgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUmVnaXN0ZXIgZm9yIHN0YXJ0aW5nIGVyYXNlIG9mIGEgcGFnZSBpbiBDb2RlIGFyZWEgKi8NCisjZGVmaW5lIE5WTUNfRVJBU0VQQUdFX0VSQVNFUEFHRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFUkFTRVBBR0UgZmllbGQuICovDQorI2RlZmluZSBOVk1DX0VSQVNFUEFHRV9FUkFTRVBBR0VfTXNrICgweEZGRkZGRkZGVUwgPDwgTlZNQ19FUkFTRVBBR0VfRVJBU0VQQUdFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUkFTRVBBR0UgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IE5WTUNfRVJBU0VQQ1IxICovDQorLyogRGVzY3JpcHRpb246IERlcHJlY2F0ZWQgcmVnaXN0ZXIgLSAgUmVnaXN0ZXIgZm9yIGVyYXNpbmcgYSBwYWdlIGluIENvZGUgYXJlYS4gRXF1aXZhbGVudCB0byBFUkFTRVBBR0UuICovDQorDQorLyogQml0cyAzMS4uMCA6IFJlZ2lzdGVyIGZvciBlcmFzaW5nIGEgcGFnZSBpbiBDb2RlIGFyZWEuIEVxdWl2YWxlbnQgdG8gRVJBU0VQQUdFLiAqLw0KKyNkZWZpbmUgTlZNQ19FUkFTRVBDUjFfRVJBU0VQQ1IxX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSQVNFUENSMSBmaWVsZC4gKi8NCisjZGVmaW5lIE5WTUNfRVJBU0VQQ1IxX0VSQVNFUENSMV9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBOVk1DX0VSQVNFUENSMV9FUkFTRVBDUjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSQVNFUENSMSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTlZNQ19FUkFTRUFMTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWdpc3RlciBmb3IgZXJhc2luZyBhbGwgbm9uLXZvbGF0aWxlIHVzZXIgbWVtb3J5ICovDQorDQorLyogQml0IDAgOiBFcmFzZSBhbGwgbm9uLXZvbGF0aWxlIG1lbW9yeSBpbmNsdWRpbmcgVUlDUiByZWdpc3RlcnMuIE5vdGUgdGhhdCB0aGUgZXJhc2UgbXVzdCBiZSBlbmFibGVkIHVzaW5nIENPTkZJRy5XRU4gYmVmb3JlIHRoZSBub24tdm9sYXRpbGUgbWVtb3J5IGNhbiBiZSBlcmFzZWQuICovDQorI2RlZmluZSBOVk1DX0VSQVNFQUxMX0VSQVNFQUxMX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSQVNFQUxMIGZpZWxkLiAqLw0KKyNkZWZpbmUgTlZNQ19FUkFTRUFMTF9FUkFTRUFMTF9Nc2sgKDB4MVVMIDw8IE5WTUNfRVJBU0VBTExfRVJBU0VBTExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSQVNFQUxMIGZpZWxkLiAqLw0KKyNkZWZpbmUgTlZNQ19FUkFTRUFMTF9FUkFTRUFMTF9Ob09wZXJhdGlvbiAoMFVMKSAvKiE8IE5vIG9wZXJhdGlvbiAqLw0KKyNkZWZpbmUgTlZNQ19FUkFTRUFMTF9FUkFTRUFMTF9FcmFzZSAoMVVMKSAvKiE8IFN0YXJ0IGNoaXAgZXJhc2UgKi8NCisNCisvKiBSZWdpc3RlcjogTlZNQ19FUkFTRVBDUjAgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVwcmVjYXRlZCByZWdpc3RlciAtICBSZWdpc3RlciBmb3IgZXJhc2luZyBhIHBhZ2UgaW4gQ29kZSBhcmVhLiBFcXVpdmFsZW50IHRvIEVSQVNFUEFHRS4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUmVnaXN0ZXIgZm9yIHN0YXJ0aW5nIGVyYXNlIG9mIGEgcGFnZSBpbiBDb2RlIGFyZWEuIEVxdWl2YWxlbnQgdG8gRVJBU0VQQUdFLiAqLw0KKyNkZWZpbmUgTlZNQ19FUkFTRVBDUjBfRVJBU0VQQ1IwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSQVNFUENSMCBmaWVsZC4gKi8NCisjZGVmaW5lIE5WTUNfRVJBU0VQQ1IwX0VSQVNFUENSMF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBOVk1DX0VSQVNFUENSMF9FUkFTRVBDUjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSQVNFUENSMCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTlZNQ19FUkFTRVVJQ1IgKi8NCisvKiBEZXNjcmlwdGlvbjogUmVnaXN0ZXIgZm9yIGVyYXNpbmcgVXNlciBJbmZvcm1hdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLw0KKw0KKy8qIEJpdCAwIDogUmVnaXN0ZXIgc3RhcnRpbmcgZXJhc2Ugb2YgYWxsIFVzZXIgSW5mb3JtYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMuIE5vdGUgdGhhdCB0aGUgZXJhc2UgbXVzdCBiZSBlbmFibGVkIHVzaW5nIENPTkZJRy5XRU4gYmVmb3JlIHRoZSBVSUNSIGNhbiBiZSBlcmFzZWQuICovDQorI2RlZmluZSBOVk1DX0VSQVNFVUlDUl9FUkFTRVVJQ1JfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVJBU0VVSUNSIGZpZWxkLiAqLw0KKyNkZWZpbmUgTlZNQ19FUkFTRVVJQ1JfRVJBU0VVSUNSX01zayAoMHgxVUwgPDwgTlZNQ19FUkFTRVVJQ1JfRVJBU0VVSUNSX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUkFTRVVJQ1IgZmllbGQuICovDQorI2RlZmluZSBOVk1DX0VSQVNFVUlDUl9FUkFTRVVJQ1JfTm9PcGVyYXRpb24gKDBVTCkgLyohPCBObyBvcGVyYXRpb24gKi8NCisjZGVmaW5lIE5WTUNfRVJBU0VVSUNSX0VSQVNFVUlDUl9FcmFzZSAoMVVMKSAvKiE8IFN0YXJ0IGVyYXNlIG9mIFVJQ1IgKi8NCisNCisvKiBSZWdpc3RlcjogTlZNQ19JQ0FDSEVDTkYgKi8NCisvKiBEZXNjcmlwdGlvbjogSS1Db2RlIGNhY2hlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuICovDQorDQorLyogQml0IDggOiBDYWNoZSBwcm9maWxpbmcgZW5hYmxlICovDQorI2RlZmluZSBOVk1DX0lDQUNIRUNORl9DQUNIRVBST0ZFTl9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBDQUNIRVBST0ZFTiBmaWVsZC4gKi8NCisjZGVmaW5lIE5WTUNfSUNBQ0hFQ05GX0NBQ0hFUFJPRkVOX01zayAoMHgxVUwgPDwgTlZNQ19JQ0FDSEVDTkZfQ0FDSEVQUk9GRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENBQ0hFUFJPRkVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgTlZNQ19JQ0FDSEVDTkZfQ0FDSEVQUk9GRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNhY2hlIHByb2ZpbGluZyAqLw0KKyNkZWZpbmUgTlZNQ19JQ0FDSEVDTkZfQ0FDSEVQUk9GRU5fRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjYWNoZSBwcm9maWxpbmcgKi8NCisNCisvKiBCaXQgMCA6IENhY2hlIGVuYWJsZSAqLw0KKyNkZWZpbmUgTlZNQ19JQ0FDSEVDTkZfQ0FDSEVFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDQUNIRUVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgTlZNQ19JQ0FDSEVDTkZfQ0FDSEVFTl9Nc2sgKDB4MVVMIDw8IE5WTUNfSUNBQ0hFQ05GX0NBQ0hFRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENBQ0hFRU4gZmllbGQuICovDQorI2RlZmluZSBOVk1DX0lDQUNIRUNORl9DQUNIRUVOX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjYWNoZS4gSW52YWxpZGF0ZXMgYWxsIGNhY2hlIGVudHJpZXMuICovDQorI2RlZmluZSBOVk1DX0lDQUNIRUNORl9DQUNIRUVOX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2FjaGUgKi8NCisNCisvKiBSZWdpc3RlcjogTlZNQ19JSElUICovDQorLyogRGVzY3JpcHRpb246IEktQ29kZSBjYWNoZSBoaXQgY291bnRlci4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogTnVtYmVyIG9mIGNhY2hlIGhpdHMgKi8NCisjZGVmaW5lIE5WTUNfSUhJVF9ISVRTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEhJVFMgZmllbGQuICovDQorI2RlZmluZSBOVk1DX0lISVRfSElUU19Nc2sgKDB4RkZGRkZGRkZVTCA8PCBOVk1DX0lISVRfSElUU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgSElUUyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTlZNQ19JTUlTUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBJLUNvZGUgY2FjaGUgbWlzcyBjb3VudGVyLiAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBOdW1iZXIgb2YgY2FjaGUgbWlzc2VzICovDQorI2RlZmluZSBOVk1DX0lNSVNTX01JU1NFU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNSVNTRVMgZmllbGQuICovDQorI2RlZmluZSBOVk1DX0lNSVNTX01JU1NFU19Nc2sgKDB4RkZGRkZGRkZVTCA8PCBOVk1DX0lNSVNTX01JU1NFU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUlTU0VTIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IEdQSU8gKi8NCisvKiBEZXNjcmlwdGlvbjogR1BJTyBQb3J0IDEgKi8NCisNCisvKiBSZWdpc3RlcjogR1BJT19PVVQgKi8NCisvKiBEZXNjcmlwdGlvbjogV3JpdGUgR1BJTyBwb3J0ICovDQorDQorLyogQml0IDMxIDogUGluIDMxICovDQorI2RlZmluZSBHUElPX09VVF9QSU4zMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMzEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4zMV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjMxX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjMxX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4zMV9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDMwIDogUGluIDMwICovDQorI2RlZmluZSBHUElPX09VVF9QSU4zMF9Qb3MgKDMwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMzAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4zMF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjMwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjMwX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4zMF9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDI5IDogUGluIDI5ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yOV9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yOV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjI5X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI5X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yOV9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDI4IDogUGluIDI4ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjggZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yOF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjI4X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI4X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yOF9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDI3IDogUGluIDI3ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yN19Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yN19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI3X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yN19IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDI2IDogUGluIDI2ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yNl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yNl9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjI2X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI2X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yNl9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDI1IDogUGluIDI1ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yNV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI1X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yNV9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDI0IDogUGluIDI0ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yNF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yNF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI0X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yNF9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDIzIDogUGluIDIzICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yM19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yM19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjIzX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIzX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yM19IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDIyIDogUGluIDIyICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yMl9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIyX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yMl9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDIxIDogUGluIDIxICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yMV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yMV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIxX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yMV9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDIwIDogUGluIDIwICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yMF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yMF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjIwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIwX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yMF9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDE5IDogUGluIDE5ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xOV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjE5X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE5X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xOV9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDE4IDogUGluIDE4ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xOF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTggZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xOF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjE4X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE4X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xOF9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDE3IDogUGluIDE3ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xN19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTcgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xN19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjE3X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE3X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xN19IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDE2IDogUGluIDE2ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xNl9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE2X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xNl9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDE1IDogUGluIDE1ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xNV9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTUgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xNV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE1X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xNV9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDE0IDogUGluIDE0ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTQgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xNF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE0X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xNF9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDEzIDogUGluIDEzICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xM19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEzX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xM19IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDEyIDogUGluIDEyICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTIgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xMl9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEyX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xMl9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDExIDogUGluIDExICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xMV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjExX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjExX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xMV9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDEwIDogUGluIDEwICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xMF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEwX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xMF9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDkgOiBQaW4gOSAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOOV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU45IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOOV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU45X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU45X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgOCA6IFBpbiA4ICovDQorI2RlZmluZSBHUElPX09VVF9QSU44X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU44X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjhfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjhfSGlnaCAoMVVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCA3IDogUGluIDcgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjdfTXNrICgweDFVTCA8PCBHUElPX09VVF9QSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElON19Mb3cgKDBVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElON19IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDYgOiBQaW4gNiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElONl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElONl9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU42X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU42X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgNSA6IFBpbiA1ICovDQorI2RlZmluZSBHUElPX09VVF9QSU41X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU41X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjVfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjVfSGlnaCAoMVVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCA0IDogUGluIDQgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjRfTXNrICgweDFVTCA8PCBHUElPX09VVF9QSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElONF9Mb3cgKDBVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElONF9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDMgOiBQaW4gMyAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOM19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4zX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4zX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMiA6IFBpbiAyICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4yX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjJfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjJfSGlnaCAoMVVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAxIDogUGluIDEgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjFfTXNrICgweDFVTCA8PCBHUElPX09VVF9QSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMV9Mb3cgKDBVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMV9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDAgOiBQaW4gMCAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4wX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4wX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBSZWdpc3RlcjogR1BJT19PVVRTRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogU2V0IGluZGl2aWR1YWwgYml0cyBpbiBHUElPIHBvcnQgKi8NCisNCisvKiBCaXQgMzEgOiBQaW4gMzEgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjMxX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjMxX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMzFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMzFfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjMxX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjMxX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMzAgOiBQaW4gMzAgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjMwX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMzBfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjMwX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjMwX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjkgOiBQaW4gMjkgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI5X1BvcyAoMjlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI5X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjlfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI5X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI5X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjggOiBQaW4gMjggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI4X1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI4X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjhfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI4X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI4X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjcgOiBQaW4gMjcgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI3X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjdfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI3X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI3X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjYgOiBQaW4gMjYgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI2X1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI2X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjZfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI2X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI2X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjUgOiBQaW4gMjUgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI1X1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI1X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjVfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI1X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI1X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjQgOiBQaW4gMjQgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI0X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjRfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI0X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjI0X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjMgOiBQaW4gMjMgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIzX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIzX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjNfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIzX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIzX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjIgOiBQaW4gMjIgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIyX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIyX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjJfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIyX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIyX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjEgOiBQaW4gMjEgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIxX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjFfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIxX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIxX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjAgOiBQaW4gMjAgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIwX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIwX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjBfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIwX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjIwX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTkgOiBQaW4gMTkgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE5X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE5X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMTlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTlfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE5X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE5X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTggOiBQaW4gMTggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE4X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMThfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE4X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE4X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTcgOiBQaW4gMTcgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE3X1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE3X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTdfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE3X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE3X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTYgOiBQaW4gMTYgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE2X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMTZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTZfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE2X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE2X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTUgOiBQaW4gMTUgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE1X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTVfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE1X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE1X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTQgOiBQaW4gMTQgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE0X1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE0X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTRfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE0X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjE0X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTMgOiBQaW4gMTMgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEzX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTNfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEzX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEzX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTIgOiBQaW4gMTIgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEyX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTJfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEyX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEyX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTEgOiBQaW4gMTEgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjExX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjExX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTFfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjExX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjExX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTAgOiBQaW4gMTAgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEwX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTBfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEwX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjEwX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgOSA6IFBpbiA5ICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU45X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU45X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjlfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjlfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOOV9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gaGlnaDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDggOiBQaW4gOCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOOF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU44IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOOF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUU0VUX1BJTjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU44X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU44X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjhfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA3IDogUGluIDcgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjdfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElON19Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElON19IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU43X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgNiA6IFBpbiA2ICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU42X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU42X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjZfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjZfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElONl9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gaGlnaDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDUgOiBQaW4gNSAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElONV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElONV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUU0VUX1BJTjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU41X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU41X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjVfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA0IDogUGluIDQgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjRfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElONF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElONF9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU40X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMyA6IFBpbiAzICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4zX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4zX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjNfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjNfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOM19TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gaGlnaDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIgOiBQaW4gMiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMl9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUU0VUX1BJTjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yX0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjJfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxIDogUGluIDEgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjFfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMV9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMCA6IFBpbiAwICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4wX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjBfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjBfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMF9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gaGlnaDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogUmVnaXN0ZXI6IEdQSU9fT1VUQ0xSICovDQorLyogRGVzY3JpcHRpb246IENsZWFyIGluZGl2aWR1YWwgYml0cyBpbiBHUElPIHBvcnQgKi8NCisNCisvKiBCaXQgMzEgOiBQaW4gMzEgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjMxX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjMxX01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMzFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMzFfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjMxX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjMxX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDMwIDogUGluIDMwICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4zMF9Qb3MgKDMwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMzAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4zMF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjMwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjMwX0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4zMF9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4zMF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyOSA6IFBpbiAyOSAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjlfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4yOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yOV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjlfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjlfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjggOiBQaW4gMjggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI4X1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI4X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjhfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI4X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI4X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI3IDogUGluIDI3ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yN19Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yN19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI3X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yN19IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yN19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNiA6IFBpbiAyNiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjZfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4yNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yNl9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjZfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjZfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjUgOiBQaW4gMjUgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI1X1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI1X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjVfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI1X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI1X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI0IDogUGluIDI0ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yNF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yNF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI0X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yNF9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yNF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyMyA6IFBpbiAyMyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjNfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4yM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yM19Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjNfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjNfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjIgOiBQaW4gMjIgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjIyX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjIyX01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjJfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjIyX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjIyX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIxIDogUGluIDIxICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yMV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yMV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjIxX0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yMV9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yMV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyMCA6IFBpbiAyMCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjBfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4yMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yMF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjBfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjBfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTkgOiBQaW4gMTkgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE5X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE5X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMTlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTlfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE5X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE5X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE4IDogUGluIDE4ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xOF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTggZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xOF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjE4X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE4X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xOF9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xOF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxNyA6IFBpbiAxNyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTdfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4xN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTcgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xN19Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTdfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTdfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTYgOiBQaW4gMTYgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE2X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMTZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTZfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE2X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE2X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE1IDogUGluIDE1ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xNV9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTUgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xNV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE1X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xNV9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xNV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxNCA6IFBpbiAxNCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTRfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4xNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTQgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xNF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTRfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTRfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTMgOiBQaW4gMTMgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEzX01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTNfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEzX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEzX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDEyIDogUGluIDEyICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTIgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xMl9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEyX0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xMl9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xMl9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMSA6IFBpbiAxMSAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTFfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4xMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xMV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTFfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTFfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTAgOiBQaW4gMTAgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEwX01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTBfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEwX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEwX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDkgOiBQaW4gOSAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOOV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU45IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOOV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU45X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU45X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjlfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgOCA6IFBpbiA4ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU44X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU44X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjhfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjhfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOOF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA3IDogUGluIDcgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjdfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElON19Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElON19IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU43X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDYgOiBQaW4gNiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElONl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElONl9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU42X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU42X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjZfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgNSA6IFBpbiA1ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU41X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU41X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjVfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjVfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElONV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA0IDogUGluIDQgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjRfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElONF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElONF9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU40X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDMgOiBQaW4gMyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOM19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4zX0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4zX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjNfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMiA6IFBpbiAyICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yX01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjJfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjJfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMl9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxIDogUGluIDEgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjFfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMV9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDAgOiBQaW4gMCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4wX0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4wX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjBfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBSZWdpc3RlcjogR1BJT19JTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWFkIEdQSU8gcG9ydCAqLw0KKw0KKy8qIEJpdCAzMSA6IFBpbiAzMSAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4zMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMzEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjMxX01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4zMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMzEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjMxX0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMzFfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDMwIDogUGluIDMwICovDQorI2RlZmluZSBHUElPX0lOX1BJTjMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMzBfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjMwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMzBfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4zMF9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjkgOiBQaW4gMjkgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yOV9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yOV9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI5X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAyOCA6IFBpbiAyOCAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI4X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4yOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI4X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjhfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDI3IDogUGluIDI3ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjdfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjdfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yN19IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjYgOiBQaW4gMjYgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yNl9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yNl9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI2X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAyNSA6IFBpbiAyNSAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI1X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4yNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI1X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjVfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDI0IDogUGluIDI0ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjRfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjRfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yNF9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjMgOiBQaW4gMjMgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yM19Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yM19Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjIzX0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAyMiA6IFBpbiAyMiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjIyX01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4yMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjIyX0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjJfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDIxIDogUGluIDIxICovDQorI2RlZmluZSBHUElPX0lOX1BJTjIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjFfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjFfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yMV9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjAgOiBQaW4gMjAgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yMF9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yMF9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjIwX0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAxOSA6IFBpbiAxOSAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE5X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4xOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE5X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTlfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDE4IDogUGluIDE4ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMThfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjE4X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMThfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xOF9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTcgOiBQaW4gMTcgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xN19Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xN19Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE3X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAxNiA6IFBpbiAxNiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE2X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4xNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE2X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTZfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDE1IDogUGluIDE1ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTVfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTVfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xNV9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTQgOiBQaW4gMTQgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xNF9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xNF9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE0X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAxMyA6IFBpbiAxMyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjEzX01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4xM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjEzX0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTNfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDEyIDogUGluIDEyICovDQorI2RlZmluZSBHUElPX0lOX1BJTjEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTJfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTJfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xMl9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTEgOiBQaW4gMTEgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xMV9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xMV9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjExX0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAxMCA6IFBpbiAxMCAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjEwX01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4xMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjEwX0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTBfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDkgOiBQaW4gOSAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU45X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjlfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjlfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU45X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCA4IDogUGluIDggKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOOF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU44IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU44X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU44X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU44IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU44X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOOF9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgNyA6IFBpbiA3ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElON19Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElON19Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjdfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDYgOiBQaW4gNiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU42X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjZfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjZfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU42X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCA1IDogUGluIDUgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElONV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU41X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU41X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU41X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElONV9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgNCA6IFBpbiA0ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElONF9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElONF9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjRfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDMgOiBQaW4gMyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4zX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjNfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjNfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4zX0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAyIDogUGluIDIgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yX01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4yX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yX0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMl9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMSA6IFBpbiAxICovDQorI2RlZmluZSBHUElPX0lOX1BJTjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMV9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMV9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjFfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDAgOiBQaW4gMCAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjBfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjBfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4wX0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBHUElPX0RJUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXJlY3Rpb24gb2YgR1BJTyBwaW5zICovDQorDQorLyogQml0IDMxIDogUGluIDMxICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4zMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMzEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4zMV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjMxX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjMxX0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMzFfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMzAgOiBQaW4gMzAgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjMwX01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMzBfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4zMF9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAyOSA6IFBpbiAyOSAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjlfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4yOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yOV9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI5X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDI4IDogUGluIDI4ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yOF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjI4X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI4X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjhfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMjcgOiBQaW4gMjcgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI3X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjdfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yN19PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAyNiA6IFBpbiAyNiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjZfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4yNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yNl9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI2X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDI1IDogUGluIDI1ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yNV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI1X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjVfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMjQgOiBQaW4gMjQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI0X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjRfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yNF9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAyMyA6IFBpbiAyMyAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjNfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4yM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yM19JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjIzX091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDIyIDogUGluIDIyICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yMl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjIyX0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjJfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMjEgOiBQaW4gMjEgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjIxX01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjFfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yMV9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAyMCA6IFBpbiAyMCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjBfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4yMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yMF9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjIwX091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDE5IDogUGluIDE5ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xOV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjE5X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE5X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTlfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMTggOiBQaW4gMTggKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE4X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMThfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xOF9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAxNyA6IFBpbiAxNyAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTdfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4xN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xN19JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE3X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDE2IDogUGluIDE2ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xNl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE2X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTZfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMTUgOiBQaW4gMTUgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE1X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTVfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xNV9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAxNCA6IFBpbiAxNCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTRfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4xNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xNF9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE0X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDEzIDogUGluIDEzICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xM19Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjEzX0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTNfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMTIgOiBQaW4gMTIgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjEyX01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTJfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xMl9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAxMSA6IFBpbiAxMSAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTFfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4xMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xMV9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjExX091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDEwIDogUGluIDEwICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xMF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjEwX0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTBfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgOSA6IFBpbiA5ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU45X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU45X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjlfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU45X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDggOiBQaW4gOCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOOF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU44IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOOF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU44X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOOF9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCA3IDogUGluIDcgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjdfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElON19JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjdfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgNiA6IFBpbiA2ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU42X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU42X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjZfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU42X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDUgOiBQaW4gNSAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElONV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElONV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU41X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElONV9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCA0IDogUGluIDQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjRfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElONF9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjRfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMyA6IFBpbiAzICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4zX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4zX01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjNfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4zX091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDIgOiBQaW4gMiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yX0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMl9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAxIDogUGluIDEgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjFfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMV9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjFfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMCA6IFBpbiAwICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4wX01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjBfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4wX091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogUmVnaXN0ZXI6IEdQSU9fRElSU0VUICovDQorLyogRGVzY3JpcHRpb246IERJUiBzZXQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMzEgOiBTZXQgYXMgb3V0cHV0IHBpbiAzMSAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMzFfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMzFfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4zMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMzEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zMV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjMxX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zMV9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAzMCA6IFNldCBhcyBvdXRwdXQgcGluIDMwICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zMF9Qb3MgKDMwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMzAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zMF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjMwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjMwX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMzBfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjMwX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI5IDogU2V0IGFzIG91dHB1dCBwaW4gMjkgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI5X1BvcyAoMjlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI5X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjlfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yOV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjlfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjggOiBTZXQgYXMgb3V0cHV0IHBpbiAyOCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjhfUG9zICgyOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjhfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4yOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yOF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI4X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yOF9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNyA6IFNldCBhcyBvdXRwdXQgcGluIDI3ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yN19Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yN19Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI3X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjdfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI3X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI2IDogU2V0IGFzIG91dHB1dCBwaW4gMjYgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI2X1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI2X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjZfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yNl9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjZfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjUgOiBTZXQgYXMgb3V0cHV0IHBpbiAyNSAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjVfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjVfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4yNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yNV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI1X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yNV9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNCA6IFNldCBhcyBvdXRwdXQgcGluIDI0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yNF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yNF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI0X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjRfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI0X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIzIDogU2V0IGFzIG91dHB1dCBwaW4gMjMgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIzX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIzX01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjNfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yM19PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjNfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjIgOiBTZXQgYXMgb3V0cHV0IHBpbiAyMiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjJfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjJfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4yMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yMl9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIyX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yMl9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyMSA6IFNldCBhcyBvdXRwdXQgcGluIDIxICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yMV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yMV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIxX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjFfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIxX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIwIDogU2V0IGFzIG91dHB1dCBwaW4gMjAgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIwX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIwX01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjBfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yMF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjBfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTkgOiBTZXQgYXMgb3V0cHV0IHBpbiAxOSAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTlfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTlfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4xOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xOV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE5X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xOV9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxOCA6IFNldCBhcyBvdXRwdXQgcGluIDE4ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xOF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xOF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjE4X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE4X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMThfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE4X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE3IDogU2V0IGFzIG91dHB1dCBwaW4gMTcgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE3X1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE3X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTdfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xN19PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTdfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTYgOiBTZXQgYXMgb3V0cHV0IHBpbiAxNiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTZfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTZfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4xNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xNl9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE2X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xNl9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxNSA6IFNldCBhcyBvdXRwdXQgcGluIDE1ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xNV9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xNV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE1X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTVfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE1X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE0IDogU2V0IGFzIG91dHB1dCBwaW4gMTQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE0X1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE0X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTRfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xNF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTRfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTMgOiBTZXQgYXMgb3V0cHV0IHBpbiAxMyAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTNfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTNfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4xM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xM19JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjEzX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xM19TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMiA6IFNldCBhcyBvdXRwdXQgcGluIDEyICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xMl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjEyX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTJfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjEyX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDExIDogU2V0IGFzIG91dHB1dCBwaW4gMTEgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjExX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjExX01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTFfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xMV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTFfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTAgOiBTZXQgYXMgb3V0cHV0IHBpbiAxMCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTBfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTBfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4xMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xMF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjEwX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xMF9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA5IDogU2V0IGFzIG91dHB1dCBwaW4gOSAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOOV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU45IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOOV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU45X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOOV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOOV9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA4IDogU2V0IGFzIG91dHB1dCBwaW4gOCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOOF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU44IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOOF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU44X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOOF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOOF9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA3IDogU2V0IGFzIG91dHB1dCBwaW4gNyAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElON19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElON19Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU43X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElON19PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElON19TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA2IDogU2V0IGFzIG91dHB1dCBwaW4gNiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU42X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONl9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONl9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA1IDogU2V0IGFzIG91dHB1dCBwaW4gNSAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU41X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONV9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA0IDogU2V0IGFzIG91dHB1dCBwaW4gNCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU40X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElONF9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAzIDogU2V0IGFzIG91dHB1dCBwaW4gMyAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOM19Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOM19PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOM19TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyIDogU2V0IGFzIG91dHB1dCBwaW4gMiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMl9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMl9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxIDogU2V0IGFzIG91dHB1dCBwaW4gMSAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMV9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAwIDogU2V0IGFzIG91dHB1dCBwaW4gMCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4wX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMF9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBHUElPX0RJUkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBESVIgY2xlYXIgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMzEgOiBTZXQgYXMgaW5wdXQgcGluIDMxICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4zMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMzEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4zMV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjMxX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjMxX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMzFfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjMxX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAzMCA6IFNldCBhcyBpbnB1dCBwaW4gMzAgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjMwX01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMzBfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4zMF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMzBfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI5IDogU2V0IGFzIGlucHV0IHBpbiAyOSAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjlfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4yOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yOV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI5X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yOV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjggOiBTZXQgYXMgaW5wdXQgcGluIDI4ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yOF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjI4X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI4X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjhfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI4X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNyA6IFNldCBhcyBpbnB1dCBwaW4gMjcgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI3X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjdfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yN19PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjdfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI2IDogU2V0IGFzIGlucHV0IHBpbiAyNiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjZfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4yNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yNl9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI2X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yNl9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjUgOiBTZXQgYXMgaW5wdXQgcGluIDI1ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yNV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI1X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjVfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI1X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNCA6IFNldCBhcyBpbnB1dCBwaW4gMjQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI0X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjRfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yNF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjRfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIzIDogU2V0IGFzIGlucHV0IHBpbiAyMyAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjNfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4yM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yM19JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIzX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yM19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjIgOiBTZXQgYXMgaW5wdXQgcGluIDIyICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yMl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIyX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjJfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIyX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyMSA6IFNldCBhcyBpbnB1dCBwaW4gMjEgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIxX01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjFfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yMV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjFfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIwIDogU2V0IGFzIGlucHV0IHBpbiAyMCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjBfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4yMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yMF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIwX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yMF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTkgOiBTZXQgYXMgaW5wdXQgcGluIDE5ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xOV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjE5X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE5X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTlfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE5X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxOCA6IFNldCBhcyBpbnB1dCBwaW4gMTggKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE4X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMThfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xOF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMThfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE3IDogU2V0IGFzIGlucHV0IHBpbiAxNyAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTdfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4xN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xN19JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE3X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xN19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTYgOiBTZXQgYXMgaW5wdXQgcGluIDE2ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xNl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE2X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTZfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE2X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxNSA6IFNldCBhcyBpbnB1dCBwaW4gMTUgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE1X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTVfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xNV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTVfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE0IDogU2V0IGFzIGlucHV0IHBpbiAxNCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTRfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4xNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xNF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE0X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xNF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTMgOiBTZXQgYXMgaW5wdXQgcGluIDEzICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xM19Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjEzX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTNfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjEzX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMiA6IFNldCBhcyBpbnB1dCBwaW4gMTIgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjEyX01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTJfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xMl9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTJfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDExIDogU2V0IGFzIGlucHV0IHBpbiAxMSAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTFfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4xMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xMV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjExX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xMV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTAgOiBTZXQgYXMgaW5wdXQgcGluIDEwICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xMF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjEwX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTBfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjEwX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA5IDogU2V0IGFzIGlucHV0IHBpbiA5ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU45X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU45X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjlfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU45X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU45X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA4IDogU2V0IGFzIGlucHV0IHBpbiA4ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU44X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU44X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjhfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU44X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU44X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA3IDogU2V0IGFzIGlucHV0IHBpbiA3ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU43X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU43X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjdfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU43X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU43X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA2IDogU2V0IGFzIGlucHV0IHBpbiA2ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU42X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU42X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjZfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU42X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU42X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA1IDogU2V0IGFzIGlucHV0IHBpbiA1ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU41X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU41X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjVfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU41X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU41X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA0IDogU2V0IGFzIGlucHV0IHBpbiA0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU40X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU40X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjRfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU40X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU40X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAzIDogU2V0IGFzIGlucHV0IHBpbiAzICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4zX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4zX01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjNfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4zX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4zX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyIDogU2V0IGFzIGlucHV0IHBpbiAyICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yX01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjJfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxIDogU2V0IGFzIGlucHV0IHBpbiAxICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xX01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjFfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAwIDogU2V0IGFzIGlucHV0IHBpbiAwICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4wX01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjBfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4wX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4wX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBHUElPX0xBVENIICovDQorLyogRGVzY3JpcHRpb246IExhdGNoIHJlZ2lzdGVyIGluZGljYXRpbmcgd2hhdCBHUElPIHBpbnMgdGhhdCBoYXZlIG1ldCB0aGUgY3JpdGVyaWEgc2V0IGluIHRoZSBQSU5fQ05GW25dLlNFTlNFIHJlZ2lzdGVycyAqLw0KKw0KKy8qIEJpdCAzMSA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjMxIGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYzMS5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4zMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMzEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjMxX01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4zMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMzEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjMxX05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjMxX0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMzAgOiBTdGF0dXMgb24gd2hldGhlciBQSU4zMCBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMzAuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMzBfUG9zICgzMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4zMF9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4zMF9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4zMF9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDI5IDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMjkgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjI5LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI5X1BvcyAoMjlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjlfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjI5X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjlfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjlfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAyOCA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjI4IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYyOC5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI4X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4yOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI4X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI4X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMjcgOiBTdGF0dXMgb24gd2hldGhlciBQSU4yNyBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMjcuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjdfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yN19Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yN19Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yN19MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDI2IDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMjYgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjI2LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI2X1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjZfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjI2X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjZfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjZfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAyNSA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjI1IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYyNS5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI1X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4yNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI1X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI1X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMjQgOiBTdGF0dXMgb24gd2hldGhlciBQSU4yNCBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMjQuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjRfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yNF9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yNF9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yNF9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDIzIDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMjMgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjIzLlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjIzX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjNfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjIzX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjNfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjNfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAyMiA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjIyIGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYyMi5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjIyX01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4yMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjIyX05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjIyX0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMjEgOiBTdGF0dXMgb24gd2hldGhlciBQSU4yMSBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMjEuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjFfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yMV9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yMV9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yMV9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDIwIDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMjAgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjIwLlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjIwX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjBfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjIwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjBfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjBfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAxOSA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjE5IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYxOS5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE5X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4xOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE5X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE5X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMTggOiBTdGF0dXMgb24gd2hldGhlciBQSU4xOCBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMTguU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMThfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xOF9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xOF9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xOF9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDE3IDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMTcgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjE3LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE3X1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTdfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjE3X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTdfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTdfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAxNiA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjE2IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYxNi5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE2X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4xNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE2X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE2X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMTUgOiBTdGF0dXMgb24gd2hldGhlciBQSU4xNSBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMTUuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTVfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xNV9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xNV9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xNV9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDE0IDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMTQgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjE0LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE0X1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTRfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTRfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTRfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAxMyA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjEzIGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYxMy5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjEzX01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4xM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjEzX05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjEzX0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMTIgOiBTdGF0dXMgb24gd2hldGhlciBQSU4xMiBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMTIuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xMl9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xMl9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xMl9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDExIDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMTEgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjExLlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjExX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTFfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjExX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTFfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTFfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAxMCA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjEwIGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYxMC5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjEwX01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4xMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjEwX05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjEwX0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgOSA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjkgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjkuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOOV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU45IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU45X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU45X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU45IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU45X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjlfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCA4IDogU3RhdHVzIG9uIHdoZXRoZXIgUElOOCBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GOC5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU44X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjhfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjhfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOOF9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDcgOiBTdGF0dXMgb24gd2hldGhlciBQSU43IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkY3LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElON19Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElON19Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU43X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgNiA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjYgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjYuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElONl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU42X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU42X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU42X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjZfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCA1IDogU3RhdHVzIG9uIHdoZXRoZXIgUElONSBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GNS5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU41X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjVfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjVfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElONV9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDQgOiBTdGF0dXMgb24gd2hldGhlciBQSU40IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkY0LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElONF9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElONF9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU40X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMyA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjMgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjMuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4zX01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4zX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4zX05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjNfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAyIDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMiBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMi5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjJfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjJfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMl9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDEgOiBTdGF0dXMgb24gd2hldGhlciBQSU4xIGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYxLlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMV9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMV9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xX0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMCA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjAgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjAuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4wX01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4wX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4wX05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjBfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBHUElPX0RFVEVDVE1PREUgKi8NCisvKiBEZXNjcmlwdGlvbjogU2VsZWN0IGJldHdlZW4gZGVmYXVsdCBERVRFQ1Qgc2lnbmFsIGJlaGF2aW91ciBhbmQgTERFVEVDVCBtb2RlICovDQorDQorLyogQml0IDAgOiBTZWxlY3QgYmV0d2VlbiBkZWZhdWx0IERFVEVDVCBzaWduYWwgYmVoYXZpb3VyIGFuZCBMREVURUNUIG1vZGUgKi8NCisjZGVmaW5lIEdQSU9fREVURUNUTU9ERV9ERVRFQ1RNT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERFVEVDVE1PREUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RFVEVDVE1PREVfREVURUNUTU9ERV9Nc2sgKDB4MVVMIDw8IEdQSU9fREVURUNUTU9ERV9ERVRFQ1RNT0RFX1BvcykgLyohPCBCaXQgbWFzayBvZiBERVRFQ1RNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ERVRFQ1RNT0RFX0RFVEVDVE1PREVfRGVmYXVsdCAoMFVMKSAvKiE8IERFVEVDVCBkaXJlY3RseSBjb25uZWN0ZWQgdG8gUElOIERFVEVDVCBzaWduYWxzICovDQorI2RlZmluZSBHUElPX0RFVEVDVE1PREVfREVURUNUTU9ERV9MREVURUNUICgxVUwpIC8qITwgVXNlIHRoZSBsYXRjaGVkIExERVRFQ1QgYmVoYXZpb3VyICovDQorDQorLyogUmVnaXN0ZXI6IEdQSU9fUElOX0NORiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgQ29uZmlndXJhdGlvbiBvZiBHUElPIHBpbnMgKi8NCisNCisvKiBCaXRzIDE3Li4xNiA6IFBpbiBzZW5zaW5nIG1lY2hhbmlzbSAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX1NFTlNFX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBTRU5TRSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9TRU5TRV9Nc2sgKDB4M1VMIDw8IEdQSU9fUElOX0NORl9TRU5TRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0VOU0UgZmllbGQuICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfU0VOU0VfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX1NFTlNFX0hpZ2ggKDJVTCkgLyohPCBTZW5zZSBmb3IgaGlnaCBsZXZlbCAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX1NFTlNFX0xvdyAoM1VMKSAvKiE8IFNlbnNlIGZvciBsb3cgbGV2ZWwgKi8NCisNCisvKiBCaXRzIDEwLi44IDogRHJpdmUgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0RSSVZFX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIERSSVZFIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0RSSVZFX01zayAoMHg3VUwgPDwgR1BJT19QSU5fQ05GX0RSSVZFX1BvcykgLyohPCBCaXQgbWFzayBvZiBEUklWRSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9EUklWRV9TMFMxICgwVUwpIC8qITwgU3RhbmRhcmQgJzAnLCBzdGFuZGFyZCAnMScgKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9EUklWRV9IMFMxICgxVUwpIC8qITwgSGlnaCBkcml2ZSAnMCcsIHN0YW5kYXJkICcxJyAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0RSSVZFX1MwSDEgKDJVTCkgLyohPCBTdGFuZGFyZCAnMCcsIGhpZ2ggZHJpdmUgJzEnICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfRFJJVkVfSDBIMSAoM1VMKSAvKiE8IEhpZ2ggZHJpdmUgJzAnLCBoaWdoICdkcml2ZSAnMScnICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfRFJJVkVfRDBTMSAoNFVMKSAvKiE8IERpc2Nvbm5lY3QgJzAnIHN0YW5kYXJkICcxJyAobm9ybWFsbHkgdXNlZCBmb3Igd2lyZWQtb3IgY29ubmVjdGlvbnMpICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfRFJJVkVfRDBIMSAoNVVMKSAvKiE8IERpc2Nvbm5lY3QgJzAnLCBoaWdoIGRyaXZlICcxJyAobm9ybWFsbHkgdXNlZCBmb3Igd2lyZWQtb3IgY29ubmVjdGlvbnMpICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfRFJJVkVfUzBEMSAoNlVMKSAvKiE8IFN0YW5kYXJkICcwJy4gZGlzY29ubmVjdCAnMScgKG5vcm1hbGx5IHVzZWQgZm9yIHdpcmVkLWFuZCBjb25uZWN0aW9ucykgKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9EUklWRV9IMEQxICg3VUwpIC8qITwgSGlnaCBkcml2ZSAnMCcsIGRpc2Nvbm5lY3QgJzEnIChub3JtYWxseSB1c2VkIGZvciB3aXJlZC1hbmQgY29ubmVjdGlvbnMpICovDQorDQorLyogQml0cyAzLi4yIDogUHVsbCBjb25maWd1cmF0aW9uICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfUFVMTF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBQVUxMIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX1BVTExfTXNrICgweDNVTCA8PCBHUElPX1BJTl9DTkZfUFVMTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFVMTCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9QVUxMX0Rpc2FibGVkICgwVUwpIC8qITwgTm8gcHVsbCAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX1BVTExfUHVsbGRvd24gKDFVTCkgLyohPCBQdWxsIGRvd24gb24gcGluICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfUFVMTF9QdWxsdXAgKDNVTCkgLyohPCBQdWxsIHVwIG9uIHBpbiAqLw0KKw0KKy8qIEJpdCAxIDogQ29ubmVjdCBvciBkaXNjb25uZWN0IGlucHV0IGJ1ZmZlciAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0lOUFVUX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIElOUFVUIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0lOUFVUX01zayAoMHgxVUwgPDwgR1BJT19QSU5fQ05GX0lOUFVUX1BvcykgLyohPCBCaXQgbWFzayBvZiBJTlBVVCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9JTlBVVF9Db25uZWN0ICgwVUwpIC8qITwgQ29ubmVjdCBpbnB1dCBidWZmZXIgKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9JTlBVVF9EaXNjb25uZWN0ICgxVUwpIC8qITwgRGlzY29ubmVjdCBpbnB1dCBidWZmZXIgKi8NCisNCisvKiBCaXQgMCA6IFBpbiBkaXJlY3Rpb24uIFNhbWUgcGh5c2ljYWwgcmVnaXN0ZXIgYXMgRElSIHJlZ2lzdGVyICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfRElSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERJUiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9ESVJfTXNrICgweDFVTCA8PCBHUElPX1BJTl9DTkZfRElSX1BvcykgLyohPCBCaXQgbWFzayBvZiBESVIgZmllbGQuICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfRElSX0lucHV0ICgwVUwpIC8qITwgQ29uZmlndXJlIHBpbiBhcyBhbiBpbnB1dCBwaW4gKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9ESVJfT3V0cHV0ICgxVUwpIC8qITwgQ29uZmlndXJlIHBpbiBhcyBhbiBvdXRwdXQgcGluICovDQorDQorDQorLyogUGVyaXBoZXJhbDogUERNICovDQorLyogRGVzY3JpcHRpb246IFB1bHNlIERlbnNpdHkgTW9kdWxhdGlvbiAoRGlnaXRhbCBNaWNyb3Bob25lKSBJbnRlcmZhY2UgKi8NCisNCisvKiBSZWdpc3RlcjogUERNX0lOVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkQgZXZlbnQgKi8NCisjZGVmaW5lIFBETV9JTlRFTl9FTkRfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOX0VORF9Nc2sgKDB4MVVMIDw8IFBETV9JTlRFTl9FTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTl9FTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBQRE1fSU5URU5fRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOX1NUT1BQRURfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTl9TVE9QUEVEX01zayAoMHgxVUwgPDwgUERNX0lOVEVOX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBQRE1fSU5URU5fU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFBETV9JTlRFTl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOX1NUQVJURURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTl9TVEFSVEVEX01zayAoMHgxVUwgPDwgUERNX0lOVEVOX1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBQRE1fSU5URU5fU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFBETV9JTlRFTl9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUERNX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkQgZXZlbnQgKi8NCisjZGVmaW5lIFBETV9JTlRFTlNFVF9FTkRfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOU0VUX0VORF9Nc2sgKDB4MVVMIDw8IFBETV9JTlRFTlNFVF9FTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTlNFVF9FTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOU0VUX0VORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOU0VUX0VORF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBQRE1fSU5URU5TRVRfU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOU0VUX1NUT1BQRURfTXNrICgweDFVTCA8PCBQRE1fSU5URU5TRVRfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTlNFVF9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBETV9JTlRFTlNFVF9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQRE1fSU5URU5TRVRfU1RPUFBFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBQRE1fSU5URU5TRVRfU1RBUlRFRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOU0VUX1NUQVJURURfTXNrICgweDFVTCA8PCBQRE1fSU5URU5TRVRfU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTlNFVF9TVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBETV9JTlRFTlNFVF9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQRE1fSU5URU5TRVRfU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUERNX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOQ0xSX0VORF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfRU5EX01zayAoMHgxVUwgPDwgUERNX0lOVEVOQ0xSX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOQ0xSX0VORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfRU5EX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOQ0xSX1NUT1BQRURfTXNrICgweDFVTCA8PCBQRE1fSU5URU5DTFJfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTkNMUl9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBETV9JTlRFTkNMUl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfU1RPUFBFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOQ0xSX1NUQVJURURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTkNMUl9TVEFSVEVEX01zayAoMHgxVUwgPDwgUERNX0lOVEVOQ0xSX1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOQ0xSX1NUQVJURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFBETV9FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogUERNIG1vZHVsZSBlbmFibGUgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIFBETSBtb2R1bGUgKi8NCisjZGVmaW5lIFBETV9FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9FTkFCTEVfRU5BQkxFX01zayAoMHgxVUwgPDwgUERNX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUERNX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQRE1fUERNQ0xLQ1RSTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBQRE0gY2xvY2sgZ2VuZXJhdG9yIGNvbnRyb2wgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUERNX0NMSyBmcmVxdWVuY3kgKi8NCisjZGVmaW5lIFBETV9QRE1DTEtDVFJMX0ZSRVFfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRlJFUSBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9QRE1DTEtDVFJMX0ZSRVFfTXNrICgweEZGRkZGRkZGVUwgPDwgUERNX1BETUNMS0NUUkxfRlJFUV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJFUSBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9QRE1DTEtDVFJMX0ZSRVFfMTAwMEsgKDB4MDgwMDAwMDBVTCkgLyohPCBQRE1fQ0xLID0gMzIgTUh6IC8gMzIgPSAxLjAwMCBNSHogKi8NCisjZGVmaW5lIFBETV9QRE1DTEtDVFJMX0ZSRVFfRGVmYXVsdCAoMHgwODQwMDAwMFVMKSAvKiE8IFBETV9DTEsgPSAzMiBNSHogLyAzMSA9IDEuMDMyIE1Iei4gTm9taW5hbCBjbG9jayBmb3IgUkFUSU89UmF0aW82NC4gKi8NCisjZGVmaW5lIFBETV9QRE1DTEtDVFJMX0ZSRVFfMTA2N0sgKDB4MDg4MDAwMDBVTCkgLyohPCBQRE1fQ0xLID0gMzIgTUh6IC8gMzAgPSAxLjA2NyBNSHogKi8NCisjZGVmaW5lIFBETV9QRE1DTEtDVFJMX0ZSRVFfMTIzMUsgKDB4MDk4MDAwMDBVTCkgLyohPCBQRE1fQ0xLID0gMzIgTUh6IC8gMjYgPSAxLjIzMSBNSHogKi8NCisjZGVmaW5lIFBETV9QRE1DTEtDVFJMX0ZSRVFfMTI4MEsgKDB4MEEwMDAwMDBVTCkgLyohPCBQRE1fQ0xLID0gMzIgTUh6IC8gMjUgPSAxLjI4MCBNSHouIE5vbWluYWwgY2xvY2sgZm9yIFJBVElPPVJhdGlvODAuICovDQorI2RlZmluZSBQRE1fUERNQ0xLQ1RSTF9GUkVRXzEzMzNLICgweDBBODAwMDAwVUwpIC8qITwgUERNX0NMSyA9IDMyIE1IeiAvIDI0ID0gMS4zMzMgTUh6ICovDQorDQorLyogUmVnaXN0ZXI6IFBETV9NT0RFICovDQorLyogRGVzY3JpcHRpb246IERlZmluZXMgdGhlIHJvdXRpbmcgb2YgdGhlIGNvbm5lY3RlZCBQRE0gbWljcm9waG9uZXMnIHNpZ25hbHMgKi8NCisNCisvKiBCaXQgMSA6IERlZmluZXMgb24gd2hpY2ggUERNX0NMSyBlZGdlIExlZnQgKG9yIG1vbm8pIGlzIHNhbXBsZWQgKi8NCisjZGVmaW5lIFBETV9NT0RFX0VER0VfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRURHRSBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9NT0RFX0VER0VfTXNrICgweDFVTCA8PCBQRE1fTU9ERV9FREdFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFREdFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX01PREVfRURHRV9MZWZ0RmFsbGluZyAoMFVMKSAvKiE8IExlZnQgKG9yIG1vbm8pIGlzIHNhbXBsZWQgb24gZmFsbGluZyBlZGdlIG9mIFBETV9DTEsgKi8NCisjZGVmaW5lIFBETV9NT0RFX0VER0VfTGVmdFJpc2luZyAoMVVMKSAvKiE8IExlZnQgKG9yIG1vbm8pIGlzIHNhbXBsZWQgb24gcmlzaW5nIGVkZ2Ugb2YgUERNX0NMSyAqLw0KKw0KKy8qIEJpdCAwIDogTW9ubyBvciBzdGVyZW8gb3BlcmF0aW9uICovDQorI2RlZmluZSBQRE1fTU9ERV9PUEVSQVRJT05fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgT1BFUkFUSU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX01PREVfT1BFUkFUSU9OX01zayAoMHgxVUwgPDwgUERNX01PREVfT1BFUkFUSU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBPUEVSQVRJT04gZmllbGQuICovDQorI2RlZmluZSBQRE1fTU9ERV9PUEVSQVRJT05fU3RlcmVvICgwVUwpIC8qITwgU2FtcGxlIGFuZCBzdG9yZSBvbmUgcGFpciAoTGVmdCArIFJpZ2h0KSBvZiAxNmJpdCBzYW1wbGVzIHBlciBSQU0gd29yZCBSPVszMToxNl07IEw9WzE1OjBdICovDQorI2RlZmluZSBQRE1fTU9ERV9PUEVSQVRJT05fTW9ubyAoMVVMKSAvKiE8IFNhbXBsZSBhbmQgc3RvcmUgdHdvIHN1Y2Nlc3NpdmUgTGVmdCBzYW1wbGVzICgxNiBiaXQgZWFjaCkgcGVyIFJBTSB3b3JkIEwxPVszMToxNl07IEwwPVsxNTowXSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQRE1fR0FJTkwgKi8NCisvKiBEZXNjcmlwdGlvbjogTGVmdCBvdXRwdXQgZ2FpbiBhZGp1c3RtZW50ICovDQorDQorLyogQml0cyA2Li4wIDogTGVmdCBvdXRwdXQgZ2FpbiBhZGp1c3RtZW50LCBpbiAwLjUgZEIgc3RlcHMsIGFyb3VuZCB0aGUgZGVmYXVsdCBtb2R1bGUgZ2FpbiAoc2VlIGVsZWN0cmljYWwgcGFyYW1ldGVycykgMHgwMCAgICAtMjAgZEIgZ2FpbiBhZGp1c3QgMHgwMSAgLTE5LjUgZEIgZ2FpbiBhZGp1c3QgKC4uLikgMHgyNyAgIC0wLjUgZEIgZ2FpbiBhZGp1c3QgMHgyOCAgICAgIDAgZEIgZ2FpbiBhZGp1c3QgMHgyOSAgICswLjUgZEIgZ2FpbiBhZGp1c3QgKC4uLikgMHg0RiAgKzE5LjUgZEIgZ2FpbiBhZGp1c3QgMHg1MCAgICArMjAgZEIgZ2FpbiBhZGp1c3QgKi8NCisjZGVmaW5lIFBETV9HQUlOTF9HQUlOTF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBHQUlOTCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9HQUlOTF9HQUlOTF9Nc2sgKDB4N0ZVTCA8PCBQRE1fR0FJTkxfR0FJTkxfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEdBSU5MIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0dBSU5MX0dBSU5MX01pbkdhaW4gKDB4MDBVTCkgLyohPCAtMjBkQiBnYWluIGFkanVzdG1lbnQgKG1pbmltdW0pICovDQorI2RlZmluZSBQRE1fR0FJTkxfR0FJTkxfRGVmYXVsdEdhaW4gKDB4MjhVTCkgLyohPCAwZEIgZ2FpbiBhZGp1c3RtZW50ICgnMjUwMCBSTVMnIHJlcXVpcmVtZW50KSAqLw0KKyNkZWZpbmUgUERNX0dBSU5MX0dBSU5MX01heEdhaW4gKDB4NTBVTCkgLyohPCArMjBkQiBnYWluIGFkanVzdG1lbnQgKG1heGltdW0pICovDQorDQorLyogUmVnaXN0ZXI6IFBETV9HQUlOUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBSaWdodCBvdXRwdXQgZ2FpbiBhZGp1c3RtZW50ICovDQorDQorLyogQml0cyA3Li4wIDogUmlnaHQgb3V0cHV0IGdhaW4gYWRqdXN0bWVudCwgaW4gMC41IGRCIHN0ZXBzLCBhcm91bmQgdGhlIGRlZmF1bHQgbW9kdWxlIGdhaW4gKHNlZSBlbGVjdHJpY2FsIHBhcmFtZXRlcnMpICovDQorI2RlZmluZSBQRE1fR0FJTlJfR0FJTlJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgR0FJTlIgZmllbGQuICovDQorI2RlZmluZSBQRE1fR0FJTlJfR0FJTlJfTXNrICgweEZGVUwgPDwgUERNX0dBSU5SX0dBSU5SX1BvcykgLyohPCBCaXQgbWFzayBvZiBHQUlOUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9HQUlOUl9HQUlOUl9NaW5HYWluICgweDAwVUwpIC8qITwgLTIwZEIgZ2FpbiBhZGp1c3RtZW50IChtaW5pbXVtKSAqLw0KKyNkZWZpbmUgUERNX0dBSU5SX0dBSU5SX0RlZmF1bHRHYWluICgweDI4VUwpIC8qITwgMGRCIGdhaW4gYWRqdXN0bWVudCAoJzI1MDAgUk1TJyByZXF1aXJlbWVudCkgKi8NCisjZGVmaW5lIFBETV9HQUlOUl9HQUlOUl9NYXhHYWluICgweDUwVUwpIC8qITwgKzIwZEIgZ2FpbiBhZGp1c3RtZW50IChtYXhpbXVtKSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQRE1fUkFUSU8gKi8NCisvKiBEZXNjcmlwdGlvbjogU2VsZWN0cyB0aGUgcmF0aW8gYmV0d2VlbiBQRE1fQ0xLIGFuZCBvdXRwdXQgc2FtcGxlIHJhdGUuIENoYW5nZSBQRE1DTEtDVFJMIGFjY29yZGluZ2x5LiAqLw0KKw0KKy8qIEJpdCAwIDogU2VsZWN0cyB0aGUgcmF0aW8gYmV0d2VlbiBQRE1fQ0xLIGFuZCBvdXRwdXQgc2FtcGxlIHJhdGUgKi8NCisjZGVmaW5lIFBETV9SQVRJT19SQVRJT19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSQVRJTyBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9SQVRJT19SQVRJT19Nc2sgKDB4MVVMIDw8IFBETV9SQVRJT19SQVRJT19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkFUSU8gZmllbGQuICovDQorI2RlZmluZSBQRE1fUkFUSU9fUkFUSU9fUmF0aW82NCAoMFVMKSAvKiE8IFJhdGlvIG9mIDY0ICovDQorI2RlZmluZSBQRE1fUkFUSU9fUkFUSU9fUmF0aW84MCAoMVVMKSAvKiE8IFJhdGlvIG9mIDgwICovDQorDQorLyogUmVnaXN0ZXI6IFBETV9QU0VMX0NMSyAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gbnVtYmVyIGNvbmZpZ3VyYXRpb24gZm9yIFBETSBDTEsgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgUERNX1BTRUxfQ0xLX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBQRE1fUFNFTF9DTEtfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFBETV9QU0VMX0NMS19DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX1BTRUxfQ0xLX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgUERNX1BTRUxfQ0xLX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBQRE1fUFNFTF9DTEtfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX1BTRUxfQ0xLX1BPUlRfTXNrICgweDNVTCA8PCBQRE1fUFNFTF9DTEtfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBQRE1fUFNFTF9DTEtfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9QU0VMX0NMS19QSU5fTXNrICgweDFGVUwgPDwgUERNX1BTRUxfQ0xLX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQRE1fUFNFTF9ESU4gKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIG51bWJlciBjb25maWd1cmF0aW9uIGZvciBQRE0gRElOIHNpZ25hbCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFBETV9QU0VMX0RJTl9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX1BTRUxfRElOX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBQRE1fUFNFTF9ESU5fQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9QU0VMX0RJTl9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFBETV9QU0VMX0RJTl9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgUERNX1BTRUxfRElOX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9QU0VMX0RJTl9QT1JUX01zayAoMHgzVUwgPDwgUERNX1BTRUxfRElOX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgUERNX1BTRUxfRElOX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBQRE1fUFNFTF9ESU5fUElOX01zayAoMHgxRlVMIDw8IFBETV9QU0VMX0RJTl9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUERNX1NBTVBMRV9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogUkFNIGFkZHJlc3MgcG9pbnRlciB0byB3cml0ZSBzYW1wbGVzIHRvIHdpdGggRWFzeURNQSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBBZGRyZXNzIHRvIHdyaXRlIFBETSBzYW1wbGVzIHRvIG92ZXIgRE1BICovDQorI2RlZmluZSBQRE1fU0FNUExFX1BUUl9TQU1QTEVQVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU0FNUExFUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX1NBTVBMRV9QVFJfU0FNUExFUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFBETV9TQU1QTEVfUFRSX1NBTVBMRVBUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0FNUExFUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQRE1fU0FNUExFX01BWENOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBOdW1iZXIgb2Ygc2FtcGxlcyB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGluIEVhc3lETUEgbW9kZSAqLw0KKw0KKy8qIEJpdHMgMTQuLjAgOiBMZW5ndGggb2YgRE1BIFJBTSBhbGxvY2F0aW9uIGluIG51bWJlciBvZiBzYW1wbGVzICovDQorI2RlZmluZSBQRE1fU0FNUExFX01BWENOVF9CVUZGU0laRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCVUZGU0laRSBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9TQU1QTEVfTUFYQ05UX0JVRkZTSVpFX01zayAoMHg3RkZGVUwgPDwgUERNX1NBTVBMRV9NQVhDTlRfQlVGRlNJWkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJVRkZTSVpFIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFBPV0VSICovDQorLyogRGVzY3JpcHRpb246IFBvd2VyIGNvbnRyb2wgKi8NCisNCisvKiBSZWdpc3RlcjogUE9XRVJfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFVTQlBXUlJEWSBldmVudCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCUFdSUkRZX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFVTQlBXUlJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1VTQlBXUlJEWV9Nc2sgKDB4MVVMIDw8IFBPV0VSX0lOVEVOU0VUX1VTQlBXUlJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVNCUFdSUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCUFdSUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1VTQlBXUlJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCUFdSUkRZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFVTQlJFTU9WRUQgZXZlbnQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1VTQlJFTU9WRURfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgVVNCUkVNT1ZFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1VTQlJFTU9WRURfTXNrICgweDFVTCA8PCBQT1dFUl9JTlRFTlNFVF9VU0JSRU1PVkVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBVU0JSRU1PVkVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCUkVNT1ZFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9VU0JSRU1PVkVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9VU0JSRU1PVkVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFVTQkRFVEVDVEVEIGV2ZW50ICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9VU0JERVRFQ1RFRF9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBVU0JERVRFQ1RFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1VTQkRFVEVDVEVEX01zayAoMHgxVUwgPDwgUE9XRVJfSU5URU5TRVRfVVNCREVURUNURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVTQkRFVEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCREVURUNURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCREVURUNURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1VTQkRFVEVDVEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNMRUVQRVhJVCBldmVudCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfU0xFRVBFWElUX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNMRUVQRVhJVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1NMRUVQRVhJVF9Nc2sgKDB4MVVMIDw8IFBPV0VSX0lOVEVOU0VUX1NMRUVQRVhJVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0xFRVBFWElUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfU0xFRVBFWElUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1NMRUVQRVhJVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfU0xFRVBFWElUX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNMRUVQRU5URVIgZXZlbnQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1NMRUVQRU5URVJfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgU0xFRVBFTlRFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1NMRUVQRU5URVJfTXNrICgweDFVTCA8PCBQT1dFUl9JTlRFTlNFVF9TTEVFUEVOVEVSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTTEVFUEVOVEVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfU0xFRVBFTlRFUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9TTEVFUEVOVEVSX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9TTEVFUEVOVEVSX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFBPRldBUk4gZXZlbnQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1BPRldBUk5fUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUE9GV0FSTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1BPRldBUk5fTXNrICgweDFVTCA8PCBQT1dFUl9JTlRFTlNFVF9QT0ZXQVJOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT0ZXQVJOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfUE9GV0FSTl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9QT0ZXQVJOX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9QT0ZXQVJOX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQT1dFUl9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBVU0JQV1JSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1VTQlBXUlJEWV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBVU0JQV1JSRFkgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9VU0JQV1JSRFlfTXNrICgweDFVTCA8PCBQT1dFUl9JTlRFTkNMUl9VU0JQV1JSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVTQlBXUlJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1VTQlBXUlJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9VU0JQV1JSRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1VTQlBXUlJEWV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVVNCUkVNT1ZFRCBldmVudCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfVVNCUkVNT1ZFRF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBVU0JSRU1PVkVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfVVNCUkVNT1ZFRF9Nc2sgKDB4MVVMIDw8IFBPV0VSX0lOVEVOQ0xSX1VTQlJFTU9WRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVTQlJFTU9WRUQgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9VU0JSRU1PVkVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1VTQlJFTU9WRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1VTQlJFTU9WRURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFVTQkRFVEVDVEVEIGV2ZW50ICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9VU0JERVRFQ1RFRF9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBVU0JERVRFQ1RFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1VTQkRFVEVDVEVEX01zayAoMHgxVUwgPDwgUE9XRVJfSU5URU5DTFJfVVNCREVURUNURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVTQkRFVEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfVVNCREVURUNURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfVVNCREVURUNURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1VTQkRFVEVDVEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTTEVFUEVYSVQgZXZlbnQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1NMRUVQRVhJVF9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBTTEVFUEVYSVQgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9TTEVFUEVYSVRfTXNrICgweDFVTCA8PCBQT1dFUl9JTlRFTkNMUl9TTEVFUEVYSVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNMRUVQRVhJVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1NMRUVQRVhJVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9TTEVFUEVYSVRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1NMRUVQRVhJVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU0xFRVBFTlRFUiBldmVudCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfU0xFRVBFTlRFUl9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBTTEVFUEVOVEVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfU0xFRVBFTlRFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX0lOVEVOQ0xSX1NMRUVQRU5URVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNMRUVQRU5URVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9TTEVFUEVOVEVSX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1NMRUVQRU5URVJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1NMRUVQRU5URVJfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFBPRldBUk4gZXZlbnQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1BPRldBUk5fUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUE9GV0FSTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1BPRldBUk5fTXNrICgweDFVTCA8PCBQT1dFUl9JTlRFTkNMUl9QT0ZXQVJOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT0ZXQVJOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfUE9GV0FSTl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9QT0ZXQVJOX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9QT0ZXQVJOX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQT1dFUl9SRVNFVFJFQVMgKi8NCisvKiBEZXNjcmlwdGlvbjogUmVzZXQgcmVhc29uICovDQorDQorLyogQml0IDIwIDogUmVzZXQgZHVlIHRvIHdha2UgdXAgZnJvbSBTeXN0ZW0gT0ZGIG1vZGUgYnkgVmJ1cyByaXNpbmcgaW50byB2YWxpZCByYW5nZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX1ZCVVNfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFZCVVMgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfVkJVU19Nc2sgKDB4MVVMIDw8IFBPV0VSX1JFU0VUUkVBU19WQlVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBWQlVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX1ZCVVNfTm90RGV0ZWN0ZWQgKDBVTCkgLyohPCBOb3QgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19WQlVTX0RldGVjdGVkICgxVUwpIC8qITwgRGV0ZWN0ZWQgKi8NCisNCisvKiBCaXQgMTkgOiBSZXNldCBkdWUgdG8gd2FrZSB1cCBmcm9tIFN5c3RlbSBPRkYgbW9kZSBieSBORkMgZmllbGQgZGV0ZWN0ICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfTkZDX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBORkMgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfTkZDX01zayAoMHgxVUwgPDwgUE9XRVJfUkVTRVRSRUFTX05GQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgTkZDIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX05GQ19Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IE5vdCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX05GQ19EZXRlY3RlZCAoMVVMKSAvKiE8IERldGVjdGVkICovDQorDQorLyogQml0IDE4IDogUmVzZXQgZHVlIHRvIHdha2UgdXAgZnJvbSBTeXN0ZW0gT0ZGIG1vZGUgd2hlbiB3YWtldXAgaXMgdHJpZ2dlcmVkIGZyb20gZW50ZXJpbmcgaW50byBkZWJ1ZyBpbnRlcmZhY2UgbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0RJRl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgRElGIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0RJRl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JFU0VUUkVBU19ESUZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERJRiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19ESUZfTm90RGV0ZWN0ZWQgKDBVTCkgLyohPCBOb3QgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19ESUZfRGV0ZWN0ZWQgKDFVTCkgLyohPCBEZXRlY3RlZCAqLw0KKw0KKy8qIEJpdCAxNyA6IFJlc2V0IGR1ZSB0byB3YWtlIHVwIGZyb20gU3lzdGVtIE9GRiBtb2RlIHdoZW4gd2FrZXVwIGlzIHRyaWdnZXJlZCBmcm9tIEFOQURFVEVDVCBzaWduYWwgZnJvbSBMUENPTVAgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19MUENPTVBfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIExQQ09NUCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19MUENPTVBfTXNrICgweDFVTCA8PCBQT1dFUl9SRVNFVFJFQVNfTFBDT01QX1BvcykgLyohPCBCaXQgbWFzayBvZiBMUENPTVAgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfTFBDT01QX05vdERldGVjdGVkICgwVUwpIC8qITwgTm90IGRldGVjdGVkICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfTFBDT01QX0RldGVjdGVkICgxVUwpIC8qITwgRGV0ZWN0ZWQgKi8NCisNCisvKiBCaXQgMTYgOiBSZXNldCBkdWUgdG8gd2FrZSB1cCBmcm9tIFN5c3RlbSBPRkYgbW9kZSB3aGVuIHdha2V1cCBpcyB0cmlnZ2VyZWQgZnJvbSBERVRFQ1Qgc2lnbmFsIGZyb20gR1BJTyAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX09GRl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgT0ZGIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX09GRl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JFU0VUUkVBU19PRkZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9GRiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19PRkZfTm90RGV0ZWN0ZWQgKDBVTCkgLyohPCBOb3QgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19PRkZfRGV0ZWN0ZWQgKDFVTCkgLyohPCBEZXRlY3RlZCAqLw0KKw0KKy8qIEJpdCAzIDogUmVzZXQgZnJvbSBDUFUgbG9jay11cCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0xPQ0tVUF9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBMT0NLVVAgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfTE9DS1VQX01zayAoMHgxVUwgPDwgUE9XRVJfUkVTRVRSRUFTX0xPQ0tVUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTE9DS1VQIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0xPQ0tVUF9Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IE5vdCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0xPQ0tVUF9EZXRlY3RlZCAoMVVMKSAvKiE8IERldGVjdGVkICovDQorDQorLyogQml0IDIgOiBSZXNldCBmcm9tIHNvZnQgcmVzZXQgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19TUkVRX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSRVEgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfU1JFUV9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JFU0VUUkVBU19TUkVRX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUkVRIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX1NSRVFfTm90RGV0ZWN0ZWQgKDBVTCkgLyohPCBOb3QgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19TUkVRX0RldGVjdGVkICgxVUwpIC8qITwgRGV0ZWN0ZWQgKi8NCisNCisvKiBCaXQgMSA6IFJlc2V0IGZyb20gd2F0Y2hkb2cgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19ET0dfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRE9HIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0RPR19Nc2sgKDB4MVVMIDw8IFBPV0VSX1JFU0VUUkVBU19ET0dfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERPRyBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19ET0dfTm90RGV0ZWN0ZWQgKDBVTCkgLyohPCBOb3QgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19ET0dfRGV0ZWN0ZWQgKDFVTCkgLyohPCBEZXRlY3RlZCAqLw0KKw0KKy8qIEJpdCAwIDogUmVzZXQgZnJvbSBwaW4tcmVzZXQgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19SRVNFVFBJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVNFVFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19SRVNFVFBJTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JFU0VUUkVBU19SRVNFVFBJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVTRVRQSU4gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfUkVTRVRQSU5fTm90RGV0ZWN0ZWQgKDBVTCkgLyohPCBOb3QgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19SRVNFVFBJTl9EZXRlY3RlZCAoMVVMKSAvKiE8IERldGVjdGVkICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX1JBTVNUQVRVUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXByZWNhdGVkIHJlZ2lzdGVyIC0gIFJBTSBzdGF0dXMgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMyA6IFJBTSBibG9jayAzIGlzIG9uIG9yIG9mZi9wb3dlcmluZyB1cCAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSQU1CTE9DSzMgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0szX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkFNQkxPQ0szIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLM19PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzNfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyIDogUkFNIGJsb2NrIDIgaXMgb24gb3Igb2ZmL3Bvd2VyaW5nIHVwICovDQorI2RlZmluZSBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0syX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJBTUJMT0NLMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0syX1BvcykgLyohPCBCaXQgbWFzayBvZiBSQU1CTE9DSzIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0syX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLMl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDEgOiBSQU0gYmxvY2sgMSBpcyBvbiBvciBvZmYvcG93ZXJpbmcgdXAgKi8NCisjZGVmaW5lIFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkFNQkxPQ0sxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLMV9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJBTUJMT0NLMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzFfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0sxX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMCA6IFJBTSBibG9jayAwIGlzIG9uIG9yIG9mZi9wb3dlcmluZyB1cCAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSQU1CTE9DSzAgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0swX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkFNQkxPQ0swIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLMF9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzBfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQT1dFUl9VU0JSRUdTVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogVVNCIHN1cHBseSBzdGF0dXMgKi8NCisNCisvKiBCaXQgMSA6IFVTQiBzdXBwbHkgb3V0cHV0IHNldHRsaW5nIHRpbWUgZWxhcHNlZCAqLw0KKyNkZWZpbmUgUE9XRVJfVVNCUkVHU1RBVFVTX09VVFBVVFJEWV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBPVVRQVVRSRFkgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9VU0JSRUdTVEFUVVNfT1VUUFVUUkRZX01zayAoMHgxVUwgPDwgUE9XRVJfVVNCUkVHU1RBVFVTX09VVFBVVFJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1VUUFVUUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfVVNCUkVHU1RBVFVTX09VVFBVVFJEWV9Ob3RSZWFkeSAoMFVMKSAvKiE8IFVTQlJFRyBvdXRwdXQgc2V0dGxpbmcgdGltZSBub3QgZWxhcHNlZCAqLw0KKyNkZWZpbmUgUE9XRVJfVVNCUkVHU1RBVFVTX09VVFBVVFJEWV9SZWFkeSAoMVVMKSAvKiE8IFVTQlJFRyBvdXRwdXQgc2V0dGxpbmcgdGltZSBlbGFwc2VkIChzYW1lIGluZm9ybWF0aW9uIGFzIFVTQlBXUlJEWSBldmVudCkgKi8NCisNCisvKiBCaXQgMCA6IFZCVVMgaW5wdXQgZGV0ZWN0aW9uIHN0YXR1cyAoVVNCREVURUNURUQgYW5kIFVTQlJFTU9WRUQgZXZlbnRzIGFyZSBkZXJpdmVkIGZyb20gdGhpcyBpbmZvcm1hdGlvbikgKi8NCisjZGVmaW5lIFBPV0VSX1VTQlJFR1NUQVRVU19WQlVTREVURUNUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFZCVVNERVRFQ1QgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9VU0JSRUdTVEFUVVNfVkJVU0RFVEVDVF9Nc2sgKDB4MVVMIDw8IFBPV0VSX1VTQlJFR1NUQVRVU19WQlVTREVURUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBWQlVTREVURUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfVVNCUkVHU1RBVFVTX1ZCVVNERVRFQ1RfTm9WYnVzICgwVUwpIC8qITwgVkJVUyB2b2x0YWdlIGJlbG93IHZhbGlkIHRocmVzaG9sZCAqLw0KKyNkZWZpbmUgUE9XRVJfVVNCUkVHU1RBVFVTX1ZCVVNERVRFQ1RfVmJ1c1ByZXNlbnQgKDFVTCkgLyohPCBWQlVTIHZvbHRhZ2UgYWJvdmUgdmFsaWQgdGhyZXNob2xkICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX1NZU1RFTU9GRiAqLw0KKy8qIERlc2NyaXB0aW9uOiBTeXN0ZW0gT0ZGIHJlZ2lzdGVyICovDQorDQorLyogQml0IDAgOiBFbmFibGUgU3lzdGVtIE9GRiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9TWVNURU1PRkZfU1lTVEVNT0ZGX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNZU1RFTU9GRiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1NZU1RFTU9GRl9TWVNURU1PRkZfTXNrICgweDFVTCA8PCBQT1dFUl9TWVNURU1PRkZfU1lTVEVNT0ZGX1BvcykgLyohPCBCaXQgbWFzayBvZiBTWVNURU1PRkYgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9TWVNURU1PRkZfU1lTVEVNT0ZGX0VudGVyICgxVUwpIC8qITwgRW5hYmxlIFN5c3RlbSBPRkYgbW9kZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQT1dFUl9QT0ZDT04gKi8NCisvKiBEZXNjcmlwdGlvbjogUG93ZXIgZmFpbHVyZSBjb21wYXJhdG9yIGNvbmZpZ3VyYXRpb24gKi8NCisNCisvKiBCaXRzIDExLi44IDogUG93ZXIgZmFpbHVyZSBjb21wYXJhdG9yIHRocmVzaG9sZCBzZXR0aW5nIGZvciB2b2x0YWdlIHN1cHBseSBvbiBWRERIICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEVkRESF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBUSFJFU0hPTERWRERIIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfTXNrICgweEZVTCA8PCBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEVkRESF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVEhSRVNIT0xEVkRESCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YyNyAoMFVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMi43IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YyOCAoMVVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMi44IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YyOSAoMlVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMi45IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YzMCAoM1VMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMy4wIFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YzMSAoNFVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMy4xIFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YzMiAoNVVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMy4yIFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YzMyAoNlVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMy4zIFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YzNCAoN1VMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMy40IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YzNSAoOFVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMy41IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YzNiAoOVVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMy42IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YzNyAoMTBVTCkgLyohPCBTZXQgdGhyZXNob2xkIHRvIDMuNyBWICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEVkRESF9WMzggKDExVUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAzLjggViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjM5ICgxMlVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMy45IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1Y0MCAoMTNVTCkgLyohPCBTZXQgdGhyZXNob2xkIHRvIDQuMCBWICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEVkRESF9WNDEgKDE0VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byA0LjEgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjQyICgxNVVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gNC4yIFYgKi8NCisNCisvKiBCaXRzIDQuLjEgOiBQb3dlciBmYWlsdXJlIGNvbXBhcmF0b3IgdGhyZXNob2xkIHNldHRpbmcgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgVEhSRVNIT0xEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9Nc2sgKDB4RlVMIDw8IFBPV0VSX1BPRkNPTl9USFJFU0hPTERfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRIUkVTSE9MRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERfVjE3ICg0VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAxLjcgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9WMTggKDVVTCkgLyohPCBTZXQgdGhyZXNob2xkIHRvIDEuOCBWICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEX1YxOSAoNlVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMS45IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERfVjIwICg3VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAyLjAgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9WMjEgKDhVTCkgLyohPCBTZXQgdGhyZXNob2xkIHRvIDIuMSBWICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEX1YyMiAoOVVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMi4yIFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERfVjIzICgxMFVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMi4zIFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERfVjI0ICgxMVVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMi40IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERfVjI1ICgxMlVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMi41IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERfVjI2ICgxM1VMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMi42IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERfVjI3ICgxNFVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMi43IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERfVjI4ICgxNVVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMi44IFYgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIHBvd2VyIGZhaWx1cmUgY29tcGFyYXRvciAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1BPRl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQT0YgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fUE9GX01zayAoMHgxVUwgPDwgUE9XRVJfUE9GQ09OX1BPRl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9GIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1BPRl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9QT0ZfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQT1dFUl9HUFJFR1JFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBHZW5lcmFsIHB1cnBvc2UgcmV0ZW50aW9uIHJlZ2lzdGVyICovDQorDQorLyogQml0cyA3Li4wIDogR2VuZXJhbCBwdXJwb3NlIHJldGVudGlvbiByZWdpc3RlciAqLw0KKyNkZWZpbmUgUE9XRVJfR1BSRUdSRVRfR1BSRUdSRVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgR1BSRUdSRVQgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9HUFJFR1JFVF9HUFJFR1JFVF9Nc2sgKDB4RkZVTCA8PCBQT1dFUl9HUFJFR1JFVF9HUFJFR1JFVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgR1BSRUdSRVQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX0dQUkVHUkVUMiAqLw0KKy8qIERlc2NyaXB0aW9uOiBHZW5lcmFsIHB1cnBvc2UgcmV0ZW50aW9uIHJlZ2lzdGVyICovDQorDQorLyogQml0cyA3Li4wIDogR2VuZXJhbCBwdXJwb3NlIHJldGVudGlvbiByZWdpc3RlciAqLw0KKyNkZWZpbmUgUE9XRVJfR1BSRUdSRVQyX0dQUkVHUkVUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEdQUkVHUkVUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfR1BSRUdSRVQyX0dQUkVHUkVUX01zayAoMHhGRlVMIDw8IFBPV0VSX0dQUkVHUkVUMl9HUFJFR1JFVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgR1BSRUdSRVQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX0RDRENFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgREMvREMgY29udmVydGVyIGZvciBSRUcxIHN0YWdlLiAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIERDL0RDIGNvbnZlcnRlciBmb3IgUkVHMSBzdGFnZS4gKi8NCisjZGVmaW5lIFBPV0VSX0RDRENFTl9EQ0RDRU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRENEQ0VOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfRENEQ0VOX0RDRENFTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX0RDRENFTl9EQ0RDRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERDRENFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0RDRENFTl9EQ0RDRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBQT1dFUl9EQ0RDRU5fRENEQ0VOX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUE9XRVJfRENEQ0VOMCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgREMvREMgY29udmVydGVyIGZvciBSRUcwIHN0YWdlLiAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIERDL0RDIGNvbnZlcnRlciBmb3IgUkVHMCBzdGFnZS4gKi8NCisjZGVmaW5lIFBPV0VSX0RDRENFTjBfRENEQ0VOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERDRENFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0RDRENFTjBfRENEQ0VOX01zayAoMHgxVUwgPDwgUE9XRVJfRENEQ0VOMF9EQ0RDRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERDRENFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0RDRENFTjBfRENEQ0VOX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUE9XRVJfRENEQ0VOMF9EQ0RDRU5fRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQT1dFUl9NQUlOUkVHU1RBVFVTICovDQorLyogRGVzY3JpcHRpb246IE1haW4gc3VwcGx5IHN0YXR1cyAqLw0KKw0KKy8qIEJpdCAwIDogTWFpbiBzdXBwbHkgc3RhdHVzICovDQorI2RlZmluZSBQT1dFUl9NQUlOUkVHU1RBVFVTX01BSU5SRUdTVEFUVVNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUFJTlJFR1NUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX01BSU5SRUdTVEFUVVNfTUFJTlJFR1NUQVRVU19Nc2sgKDB4MVVMIDw8IFBPV0VSX01BSU5SRUdTVEFUVVNfTUFJTlJFR1NUQVRVU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFJTlJFR1NUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX01BSU5SRUdTVEFUVVNfTUFJTlJFR1NUQVRVU19Ob3JtYWwgKDBVTCkgLyohPCBOb3JtYWwgdm9sdGFnZSBtb2RlLiBWb2x0YWdlIHN1cHBsaWVkIG9uIFZERC4gKi8NCisjZGVmaW5lIFBPV0VSX01BSU5SRUdTVEFUVVNfTUFJTlJFR1NUQVRVU19IaWdoICgxVUwpIC8qITwgSGlnaCB2b2x0YWdlIG1vZGUuIFZvbHRhZ2Ugc3VwcGxpZWQgb24gVkRESC4gKi8NCisNCisvKiBSZWdpc3RlcjogUE9XRVJfUkFNX1BPV0VSICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBSQU0wIHBvd2VyIGNvbnRyb2wgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMzEgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTUgd2hlbiBSQU0gc2VjdGlvbiBpcyBpbiBPRkYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTVSRVRFTlRJT05fUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxNVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTVSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzE1UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTVSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzE1UkVURU5USU9OX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxNVJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDMwIDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzE0IHdoZW4gUkFNIHNlY3Rpb24gaXMgaW4gT0ZGICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzE0UkVURU5USU9OX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTRSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzE0UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1MxNFJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzE0UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxNFJFVEVOVElPTl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTRSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyOSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxMyB3aGVuIFJBTSBzZWN0aW9uIGlzIGluIE9GRiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxM1JFVEVOVElPTl9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgUzEzUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxM1JFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMTNSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxM1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTNSRVRFTlRJT05fT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEzUkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjggOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTIgd2hlbiBSQU0gc2VjdGlvbiBpcyBpbiBPRkYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTJSRVRFTlRJT05fUG9zICgyOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTJSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzEyUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTJSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEyUkVURU5USU9OX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMlJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDI3IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzExIHdoZW4gUkFNIHNlY3Rpb24gaXMgaW4gT0ZGICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzExUkVURU5USU9OX1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTFSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzExUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1MxMVJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzExUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMVJFVEVOVElPTl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTFSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyNiA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxMCB3aGVuIFJBTSBzZWN0aW9uIGlzIGluIE9GRiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMFJFVEVOVElPTl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUzEwUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMFJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMTBSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTBSRVRFTlRJT05fT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEwUkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjUgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTOSB3aGVuIFJBTSBzZWN0aW9uIGlzIGluIE9GRiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M5UkVURU5USU9OX1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBTOVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TOVJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TOVJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzlSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzlSRVRFTlRJT05fT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzlSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyNCA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM4IHdoZW4gUkFNIHNlY3Rpb24gaXMgaW4gT0ZGICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzhSRVRFTlRJT05fUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFM4UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M4UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1M4UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTOFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TOFJFVEVOVElPTl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TOFJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDIzIDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzcgd2hlbiBSQU0gc2VjdGlvbiBpcyBpbiBPRkYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TN1JFVEVOVElPTl9Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgUzdSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzdSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzdSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM3UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M3UkVURU5USU9OX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M3UkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjIgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTNiB3aGVuIFJBTSBzZWN0aW9uIGlzIGluIE9GRiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M2UkVURU5USU9OX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBTNlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNlJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TNlJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzZSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzZSRVRFTlRJT05fT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzZSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyMSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM1IHdoZW4gUkFNIHNlY3Rpb24gaXMgaW4gT0ZGICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzVSRVRFTlRJT05fUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFM1UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M1UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1M1UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNVJFVEVOVElPTl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNVJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDIwIDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzQgd2hlbiBSQU0gc2VjdGlvbiBpcyBpbiBPRkYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNFJFVEVOVElPTl9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgUzRSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzRSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzRSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM0UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M0UkVURU5USU9OX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M0UkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTkgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMyB3aGVuIFJBTSBzZWN0aW9uIGlzIGluIE9GRiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MzUkVURU5USU9OX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBTM1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TM1JFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TM1JFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzNSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzNSRVRFTlRJT05fT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzNSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxOCA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMyIHdoZW4gUkFNIHNlY3Rpb24gaXMgaW4gT0ZGICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzJSRVRFTlRJT05fUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMyUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MyUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1MyUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMlJFVEVOVElPTl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMlJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDE3IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzEgd2hlbiBSQU0gc2VjdGlvbiBpcyBpbiBPRkYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMVJFVEVOVElPTl9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgUzFSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzFSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzFSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxUkVURU5USU9OX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxUkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTYgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMCB3aGVuIFJBTSBzZWN0aW9uIGlzIGluIE9GRiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MwUkVURU5USU9OX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBTMFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMFJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMFJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzBSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzBSRVRFTlRJT05fT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzBSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxNSA6IEtlZXAgUkFNIHNlY3Rpb24gUzE1IE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTVQT1dFUl9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgUzE1UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzE1UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzE1UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxNVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxNVBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxNVBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTQgOiBLZWVwIFJBTSBzZWN0aW9uIFMxNCBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzE0UE9XRVJfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxNFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxNFBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1MxNFBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTRQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTRQT1dFUl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTRQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDEzIDogS2VlcCBSQU0gc2VjdGlvbiBTMTMgT04gb3IgT0ZGIGluIFN5c3RlbSBPTiBtb2RlLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxM1BPV0VSX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTNQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTNQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMTNQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEzUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEzUE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEzUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxMiA6IEtlZXAgUkFNIHNlY3Rpb24gUzEyIE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTJQT1dFUl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgUzEyUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEyUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzEyUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMlBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMlBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTEgOiBLZWVwIFJBTSBzZWN0aW9uIFMxMSBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzExUE9XRVJfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMVBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1MxMVBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTFQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTFQT1dFUl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTFQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDEwIDogS2VlcCBSQU0gc2VjdGlvbiBTMTAgT04gb3IgT0ZGIGluIFN5c3RlbSBPTiBtb2RlLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMFBPV0VSX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTBQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTBQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMTBQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEwUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEwUE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEwUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCA5IDogS2VlcCBSQU0gc2VjdGlvbiBTOSBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzlQT1dFUl9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBTOVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M5UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzlQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzlQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TOVBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M5UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCA4IDogS2VlcCBSQU0gc2VjdGlvbiBTOCBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzhQT1dFUl9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBTOFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M4UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzhQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzhQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TOFBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M4UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCA3IDogS2VlcCBSQU0gc2VjdGlvbiBTNyBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzdQT1dFUl9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBTN1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M3UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzdQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzdQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TN1BPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M3UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCA2IDogS2VlcCBSQU0gc2VjdGlvbiBTNiBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzZQT1dFUl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBTNlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M2UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzZQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzZQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNlBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M2UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCA1IDogS2VlcCBSQU0gc2VjdGlvbiBTNSBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzVQT1dFUl9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBTNVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M1UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzVQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzVQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNVBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M1UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCA0IDogS2VlcCBSQU0gc2VjdGlvbiBTNCBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzRQT1dFUl9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBTNFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M0UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzRQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzRQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNFBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M0UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAzIDogS2VlcCBSQU0gc2VjdGlvbiBTMyBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzNQT1dFUl9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBTM1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MzUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzNQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzNQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TM1BPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MzUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyIDogS2VlcCBSQU0gc2VjdGlvbiBTMiBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzJQT1dFUl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBTMlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MyUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzJQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzJQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMlBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MyUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxIDogS2VlcCBSQU0gc2VjdGlvbiBTMSBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzFQT1dFUl9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTMVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzFQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzFQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMVBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAwIDogS2VlcCBSQU0gc2VjdGlvbiBTMCBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzBQT1dFUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTMFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MwUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzBQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzBQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMFBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MwUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQT1dFUl9SQU1fUE9XRVJTRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIFJBTTAgcG93ZXIgY29udHJvbCBzZXQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMzEgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTUgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTVSRVRFTlRJT05fUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxNVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTVSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzE1UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTVSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzE1UkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMzAgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTQgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTRSRVRFTlRJT05fUG9zICgzMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxNFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTRSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzE0UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTRSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzE0UkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjkgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTMgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTNSRVRFTlRJT05fUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxM1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTNSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzEzUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTNSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzEzUkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjggOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTIgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTJSRVRFTlRJT05fUG9zICgyOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTJSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzEyUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTJSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzEyUkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjcgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTEgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTFSRVRFTlRJT05fUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTFSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzExUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTFSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzExUkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjYgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTAgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTBSRVRFTlRJT05fUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTBSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzEwUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTBSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzEwUkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjUgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTOSB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M5UkVURU5USU9OX1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBTOVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TOVJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TOVJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzlSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzlSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyNCA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM4IHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzhSRVRFTlRJT05fUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFM4UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M4UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1M4UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTOFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TOFJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDIzIDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzcgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TN1JFVEVOVElPTl9Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgUzdSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzdSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzdSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM3UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M3UkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjIgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTNiB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M2UkVURU5USU9OX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBTNlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNlJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TNlJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzZSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzZSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyMSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM1IHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzVSRVRFTlRJT05fUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFM1UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M1UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1M1UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNVJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDIwIDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzQgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNFJFVEVOVElPTl9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgUzRSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzRSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzRSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM0UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M0UkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTkgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMyB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MzUkVURU5USU9OX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBTM1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TM1JFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TM1JFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzNSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzNSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxOCA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMyIHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzJSRVRFTlRJT05fUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMyUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MyUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1MyUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMlJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDE3IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzEgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMVJFVEVOVElPTl9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgUzFSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzFSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzFSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxUkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTYgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMCB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MwUkVURU5USU9OX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBTMFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMFJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMFJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzBSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzBSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxNSA6IEtlZXAgUkFNIHNlY3Rpb24gUzE1IG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzE1UE9XRVJfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxNVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxNVBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1MxNVBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTVQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTVQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDE0IDogS2VlcCBSQU0gc2VjdGlvbiBTMTQgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTRQT1dFUl9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgUzE0UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzE0UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzE0UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxNFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxNFBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTMgOiBLZWVwIFJBTSBzZWN0aW9uIFMxMyBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxM1BPV0VSX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTNQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTNQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMTNQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEzUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzEzUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxMiA6IEtlZXAgUkFNIHNlY3Rpb24gUzEyIG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzEyUE9XRVJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMlBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMlBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTJQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTJQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDExIDogS2VlcCBSQU0gc2VjdGlvbiBTMTEgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTFQT1dFUl9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgUzExUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzExUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzExUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMVBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTAgOiBLZWVwIFJBTSBzZWN0aW9uIFMxMCBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMFBPV0VSX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTBQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTBQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMTBQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEwUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzEwUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCA5IDogS2VlcCBSQU0gc2VjdGlvbiBTOSBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M5UE9XRVJfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgUzlQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TOVBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1M5UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM5UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzlQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDggOiBLZWVwIFJBTSBzZWN0aW9uIFM4IG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzhQT1dFUl9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBTOFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M4UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzhQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzhQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TOFBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgNyA6IEtlZXAgUkFNIHNlY3Rpb24gUzcgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TN1BPV0VSX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFM3UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzdQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TN1BPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTN1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M3UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCA2IDogS2VlcCBSQU0gc2VjdGlvbiBTNiBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M2UE9XRVJfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUzZQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNlBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1M2UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM2UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzZQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDUgOiBLZWVwIFJBTSBzZWN0aW9uIFM1IG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzVQT1dFUl9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBTNVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M1UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzVQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzVQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNVBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgNCA6IEtlZXAgUkFNIHNlY3Rpb24gUzQgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNFBPV0VSX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFM0UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzRQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TNFBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M0UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAzIDogS2VlcCBSQU0gc2VjdGlvbiBTMyBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MzUE9XRVJfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUzNQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TM1BPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1MzUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMzUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzNQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDIgOiBLZWVwIFJBTSBzZWN0aW9uIFMyIG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzJQT1dFUl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBTMlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MyUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzJQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzJQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMlBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMSA6IEtlZXAgUkFNIHNlY3Rpb24gUzEgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMVBPV0VSX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzFQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMVBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAwIDogS2VlcCBSQU0gc2VjdGlvbiBTMCBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MwUE9XRVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUzBQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMFBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1MwUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMwUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzBQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX1JBTV9QT1dFUkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgUkFNMCBwb3dlciBjb250cm9sIGNsZWFyIHJlZ2lzdGVyICovDQorDQorLyogQml0IDMxIDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzE1IHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzE1UkVURU5USU9OX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTVSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzE1UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxNVJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzE1UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxNVJFVEVOVElPTl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMzAgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTQgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTRSRVRFTlRJT05fUG9zICgzMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxNFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTRSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzE0UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTRSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzE0UkVURU5USU9OX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAyOSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxMyB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxM1JFVEVOVElPTl9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgUzEzUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxM1JFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMTNSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxM1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTNSRVRFTlRJT05fT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDI4IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzEyIHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEyUkVURU5USU9OX1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTJSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEyUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMlJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEyUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMlJFVEVOVElPTl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMjcgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTEgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTFSRVRFTlRJT05fUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTFSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzExUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTFSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzExUkVURU5USU9OX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAyNiA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxMCB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMFJFVEVOVElPTl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUzEwUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMFJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMTBSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTBSRVRFTlRJT05fT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDI1IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzkgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TOVJFVEVOVElPTl9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUzlSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzlSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzlSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM5UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M5UkVURU5USU9OX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAyNCA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM4IHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzhSRVRFTlRJT05fUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFM4UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M4UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1M4UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTOFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TOFJFVEVOVElPTl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMjMgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTNyB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M3UkVURU5USU9OX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBTN1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TN1JFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TN1JFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzdSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzdSRVRFTlRJT05fT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDIyIDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzYgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNlJFVEVOVElPTl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgUzZSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzZSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzZSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM2UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M2UkVURU5USU9OX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAyMSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM1IHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzVSRVRFTlRJT05fUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFM1UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M1UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1M1UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNVJFVEVOVElPTl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMjAgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTNCB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M0UkVURU5USU9OX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBTNFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNFJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TNFJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzRSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzRSRVRFTlRJT05fT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDE5IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzMgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TM1JFVEVOVElPTl9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUzNSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzNSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzNSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMzUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MzUkVURU5USU9OX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAxOCA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMyIHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzJSRVRFTlRJT05fUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMyUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MyUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MyUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMlJFVEVOVElPTl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMTcgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMSB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxUkVURU5USU9OX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBTMVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMVJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMVJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzFSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzFSRVRFTlRJT05fT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDE2IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzAgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMFJFVEVOVElPTl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgUzBSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzBSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzBSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMwUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MwUkVURU5USU9OX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAxNSA6IEtlZXAgUkFNIHNlY3Rpb24gUzE1IG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzE1UE9XRVJfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxNVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxNVBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxNVBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTVQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTVQT1dFUl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMTQgOiBLZWVwIFJBTSBzZWN0aW9uIFMxNCBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxNFBPV0VSX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTRQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTRQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMTRQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzE0UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzE0UE9XRVJfT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDEzIDogS2VlcCBSQU0gc2VjdGlvbiBTMTMgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTNQT1dFUl9Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgUzEzUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEzUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzEzUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxM1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxM1BPV0VSX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAxMiA6IEtlZXAgUkFNIHNlY3Rpb24gUzEyIG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEyUE9XRVJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMlBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMlBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTJQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTJQT1dFUl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMTEgOiBLZWVwIFJBTSBzZWN0aW9uIFMxMSBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMVBPV0VSX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTFQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTFQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMTFQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzExUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzExUE9XRVJfT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDEwIDogS2VlcCBSQU0gc2VjdGlvbiBTMTAgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTBQT1dFUl9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgUzEwUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEwUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzEwUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMFBPV0VSX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCA5IDogS2VlcCBSQU0gc2VjdGlvbiBTOSBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M5UE9XRVJfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgUzlQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TOVBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1M5UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM5UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzlQT1dFUl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgOCA6IEtlZXAgUkFNIHNlY3Rpb24gUzggb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TOFBPV0VSX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFM4UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzhQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TOFBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTOFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M4UE9XRVJfT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDcgOiBLZWVwIFJBTSBzZWN0aW9uIFM3IG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzdQT1dFUl9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBTN1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M3UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzdQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzdQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TN1BPV0VSX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCA2IDogS2VlcCBSQU0gc2VjdGlvbiBTNiBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M2UE9XRVJfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUzZQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNlBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1M2UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM2UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzZQT1dFUl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgNSA6IEtlZXAgUkFNIHNlY3Rpb24gUzUgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNVBPV0VSX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFM1UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzVQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TNVBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M1UE9XRVJfT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDQgOiBLZWVwIFJBTSBzZWN0aW9uIFM0IG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzRQT1dFUl9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBTNFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M0UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzRQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzRQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNFBPV0VSX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAzIDogS2VlcCBSQU0gc2VjdGlvbiBTMyBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MzUE9XRVJfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUzNQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TM1BPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MzUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMzUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzNQT1dFUl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMiA6IEtlZXAgUkFNIHNlY3Rpb24gUzIgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMlBPV0VSX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFMyUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzJQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMlBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MyUE9XRVJfT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDEgOiBLZWVwIFJBTSBzZWN0aW9uIFMxIG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzFQT1dFUl9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTMVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzFQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzFQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMVBPV0VSX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAwIDogS2VlcCBSQU0gc2VjdGlvbiBTMCBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MwUE9XRVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUzBQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMFBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MwUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMwUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzBQT1dFUl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBQUEkgKi8NCisvKiBEZXNjcmlwdGlvbjogUHJvZ3JhbW1hYmxlIFBlcmlwaGVyYWwgSW50ZXJjb25uZWN0ICovDQorDQorLyogUmVnaXN0ZXI6IFBQSV9DSEVOICovDQorLyogRGVzY3JpcHRpb246IENoYW5uZWwgZW5hYmxlIHJlZ2lzdGVyICovDQorDQorLyogQml0IDMxIDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAzMSAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gzMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMzFfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDMxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gzMV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gzMV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMzAgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDMwICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gzMF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMzAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDMwX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDMwX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyOSA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMjkgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI5X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gyOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjlfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjlfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI4IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAyOCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjhfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDI4X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyOF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyOF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjcgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDI3ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyN19Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI3X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI3X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyNiA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMjYgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI2X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gyNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjZfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjZfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI1IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAyNSAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyNSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjVfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyNV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyNV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjQgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDI0ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyNF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI0X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI0X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyMyA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMjMgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDIzX01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gyM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjNfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDIyIDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAyMiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjJfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyMl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyMl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjEgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDIxICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyMV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDIxX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDIxX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyMCA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMjAgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDIwX01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gyMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE5IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAxOSAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTlfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDE5X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxOV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxOV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTggOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDE4ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxOF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE4X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE4X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxNyA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMTcgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE3X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gxN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTdfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTdfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE2IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAxNiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTZfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxNl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxNl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTUgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDE1ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxNV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE1X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE1X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxNCA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMTQgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE0X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gxNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDEzIDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAxMyAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTNfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxM19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxM19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTIgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDEyICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxMl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDEyX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDEyX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxMSA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMTEgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDExX01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gxMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDEwIDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAxMCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTBfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxMF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgOSA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgOSAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g5X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIOV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g5X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDlfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDggOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDggKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIOF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDhfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIOF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g4X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCA3IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCA3ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g3X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0g3X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDdfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIN19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgNiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g2X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENINiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NINl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NINl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g2X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDZfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDUgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NINV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDVfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NINV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g1X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCA0IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCA0ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g0X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0g0X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NINF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMyA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMyAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gzX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIM19Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gzX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDIgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDJfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxIDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAxICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxX01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gwX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogUmVnaXN0ZXI6IFBQSV9DSEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IENoYW5uZWwgZW5hYmxlIHNldCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAzMSA6IENoYW5uZWwgMzEgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMzFfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMzEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDMxX01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gzMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMzFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDMxX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMzFfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDMwIDogQ2hhbm5lbCAzMCBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gzMF9Qb3MgKDMwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMzBfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDMwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gzMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMzBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gzMF9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjkgOiBDaGFubmVsIDI5IGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI5X1BvcyAoMjlVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyOV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI5X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyOV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI5X1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyOCA6IENoYW5uZWwgMjggZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjhfUG9zICgyOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI4X01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gyOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI4X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjhfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI3IDogQ2hhbm5lbCAyNyBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyN19Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyNyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjdfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyN19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyN19TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjYgOiBDaGFubmVsIDI2IGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI2X1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyNl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI2X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyNl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI2X1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyNSA6IENoYW5uZWwgMjUgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjVfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI1X01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gyNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyNSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI1X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjVfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI0IDogQ2hhbm5lbCAyNCBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyNF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyNCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjRfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyNF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyNF9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjMgOiBDaGFubmVsIDIzIGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIzX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyM19Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIzX1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyMiA6IENoYW5uZWwgMjIgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjJfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIyX01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gyMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIyX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjJfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDIxIDogQ2hhbm5lbCAyMSBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyMV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjFfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyMV9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjAgOiBDaGFubmVsIDIwIGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIwX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyMF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIwX1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxOSA6IENoYW5uZWwgMTkgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTlfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE5X01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gxOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE5X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTlfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE4IDogQ2hhbm5lbCAxOCBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxOF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMThfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDE4X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxOF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMThfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxOF9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTcgOiBDaGFubmVsIDE3IGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE3X1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxN19Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE3X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxN19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE3X1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxNiA6IENoYW5uZWwgMTYgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTZfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE2X01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gxNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE2X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTZfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE1IDogQ2hhbm5lbCAxNSBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxNV9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxNSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTVfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxNV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxNV9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTQgOiBDaGFubmVsIDE0IGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE0X1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxNF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE0X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxNF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE0X1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxMyA6IENoYW5uZWwgMTMgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTNfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDEzX01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gxM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDEzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTNfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDEyIDogQ2hhbm5lbCAxMiBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTJfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxMl9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTEgOiBDaGFubmVsIDExIGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDExX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDExIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxMV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDExX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDExX1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxMCA6IENoYW5uZWwgMTAgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTBfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDEwX01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gxMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDEwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTBfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDkgOiBDaGFubmVsIDkgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIOV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDlfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIOV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIOV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDlfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDggOiBDaGFubmVsIDggZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIOF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDhfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIOF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIOF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDhfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDcgOiBDaGFubmVsIDcgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIN19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDdfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIN19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIN19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDdfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDYgOiBDaGFubmVsIDYgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDZfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDZfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDUgOiBDaGFubmVsIDUgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDVfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDVfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDQgOiBDaGFubmVsIDQgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDRfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDRfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDMgOiBDaGFubmVsIDMgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDNfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDNfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDIgOiBDaGFubmVsIDIgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDJfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDJfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDEgOiBDaGFubmVsIDEgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDFfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDFfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDAgOiBDaGFubmVsIDAgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDBfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDBfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogUmVnaXN0ZXI6IFBQSV9DSEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IENoYW5uZWwgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyICovDQorDQorLyogQml0IDMxIDogQ2hhbm5lbCAzMSBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDMxX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gzMV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMzFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMzEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDMxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gzMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDMxX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAzMCA6IENoYW5uZWwgMzAgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gzMF9Qb3MgKDMwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMzBfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDMwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gzMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMzBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gzMF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjkgOiBDaGFubmVsIDI5IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI5X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gyOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI5X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjlfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI4IDogQ2hhbm5lbCAyOCBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI4X1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyOF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI4X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyOF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI4X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyNyA6IENoYW5uZWwgMjcgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyN19Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyNyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjdfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyN19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyN19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjYgOiBDaGFubmVsIDI2IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI2X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gyNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI2X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjZfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI1IDogQ2hhbm5lbCAyNSBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI1X1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyNV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI1X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyNV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI1X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyNCA6IENoYW5uZWwgMjQgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyNF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyNCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjRfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyNF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyNF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjMgOiBDaGFubmVsIDIzIGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIzX01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gyM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjNfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDIyIDogQ2hhbm5lbCAyMiBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIyX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyMl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIyX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyMSA6IENoYW5uZWwgMjEgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyMV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjFfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyMV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjAgOiBDaGFubmVsIDIwIGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIwX01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gyMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjBfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE5IDogQ2hhbm5lbCAxOSBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE5X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxOV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMTlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE5X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxOV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE5X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxOCA6IENoYW5uZWwgMTggZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxOF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMThfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDE4X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxOF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMThfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxOF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTcgOiBDaGFubmVsIDE3IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE3X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gxN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTdfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE3X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTdfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE2IDogQ2hhbm5lbCAxNiBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxNl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMTZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE2X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxNl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE2X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxNSA6IENoYW5uZWwgMTUgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxNV9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxNSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTVfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxNV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxNV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTQgOiBDaGFubmVsIDE0IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE0X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gxNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE0X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTRfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDEzIDogQ2hhbm5lbCAxMyBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxM19Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEzX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxMiA6IENoYW5uZWwgMTIgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTJfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxMl9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTEgOiBDaGFubmVsIDExIGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDExX01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gxMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDExX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTFfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDEwIDogQ2hhbm5lbCAxMCBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxMF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEwX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCA5IDogQ2hhbm5lbCA5IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIOV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDlfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIOV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIOV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDlfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDggOiBDaGFubmVsIDggZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g4X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIOF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g4X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g4X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIOF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgNyA6IENoYW5uZWwgNyBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g3X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0g3X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDdfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g3X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCA2IDogQ2hhbm5lbCA2IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NINl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDZfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NINl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NINl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDZfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDUgOiBDaGFubmVsIDUgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIENINSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NINV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NINV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g1X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g1X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NINV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgNCA6IENoYW5uZWwgNCBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g0X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0g0X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g0X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAzIDogQ2hhbm5lbCAzIGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDNfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDNfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDIgOiBDaGFubmVsIDIgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMl9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMSA6IENoYW5uZWwgMSBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxX01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAwIDogQ2hhbm5lbCAwIGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDBfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDBfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogUmVnaXN0ZXI6IFBQSV9DSF9FRVAgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIENoYW5uZWwgMCBldmVudCBlbmQtcG9pbnQgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUG9pbnRlciB0byBldmVudCByZWdpc3Rlci4gQWNjZXB0cyBvbmx5IGFkZHJlc3NlcyB0byByZWdpc3RlcnMgZnJvbSB0aGUgRXZlbnQgZ3JvdXAuICovDQorI2RlZmluZSBQUElfQ0hfRUVQX0VFUF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFRVAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hfRUVQX0VFUF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBQUElfQ0hfRUVQX0VFUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRUVQIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQUElfQ0hfVEVQICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBDaGFubmVsIDAgdGFzayBlbmQtcG9pbnQgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUG9pbnRlciB0byB0YXNrIHJlZ2lzdGVyLiBBY2NlcHRzIG9ubHkgYWRkcmVzc2VzIHRvIHJlZ2lzdGVycyBmcm9tIHRoZSBUYXNrIGdyb3VwLiAqLw0KKyNkZWZpbmUgUFBJX0NIX1RFUF9URVBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVEVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIX1RFUF9URVBfTXNrICgweEZGRkZGRkZGVUwgPDwgUFBJX0NIX1RFUF9URVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRFUCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUFBJX0NIRyAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgQ2hhbm5lbCBncm91cCAwICovDQorDQorLyogQml0IDMxIDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMzEgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gzMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gzMV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gzMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gzMV9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gzMV9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMzAgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAzMCAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDMwX01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDMwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDMwX0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDMwX0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyOSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDI5ICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjlfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjlfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjlfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDI4IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMjggKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyOF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gyOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyOF9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyOF9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMjcgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAyNyAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI3X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI3X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI3X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyNiA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDI2ICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjZfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjZfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjZfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDI1IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMjUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyNSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyNV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gyNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyNSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyNV9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyNV9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMjQgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAyNCAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI0X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI0X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI0X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyMyA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDIzICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjNfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjNfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjNfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDIyIDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMjIgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyMl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gyMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyMl9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyMl9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMjEgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAyMSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDIxX01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDIxX0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDIxX0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyMCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDIwICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjBfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjBfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjBfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDE5IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMTkgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxOV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gxOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxOV9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxOV9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMTggOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAxOCAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE4X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDE4X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE4X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE4X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxNyA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDE3ICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTdfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTdfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTdfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDE2IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMTYgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxNl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gxNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxNl9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxNl9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMTUgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAxNSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE1X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE1X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE1X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxNCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDE0ICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTRfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTRfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTRfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDEzIDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMTMgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxM19Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gxM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxM19FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxM19JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMTIgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAxMiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEyX01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEyX0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEyX0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxMSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDExICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTFfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTFfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTFfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDEwIDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMTAgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxMF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gxMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxMF9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxMF9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgOSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDkgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g5X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g5X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g5X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDlfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDggOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCA4ICovDQorI2RlZmluZSBQUElfQ0hHX0NIOF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIOF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0g4X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIOF9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g4X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCA3IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgNyAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDdfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDdfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIN19JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgNiA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDYgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g2X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENINiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g2X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g2X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDZfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDUgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCA1ICovDQorI2RlZmluZSBQUElfQ0hHX0NINV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NINV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0g1X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NINV9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g1X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCA0IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgNCAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDRfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NINF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDRfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NINF9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMyA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDMgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gzX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gzX01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gzX0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDNfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDIgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAyICovDQorI2RlZmluZSBQUElfQ0hHX0NIMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMl9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyX0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxIDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDFfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDFfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMV9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDAgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gwX01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gwX0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDBfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogUmVnaXN0ZXI6IFBQSV9GT1JLX1RFUCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgQ2hhbm5lbCAwIHRhc2sgZW5kLXBvaW50ICovDQorDQorLyogQml0cyAzMS4uMCA6IFBvaW50ZXIgdG8gdGFzayByZWdpc3RlciAqLw0KKyNkZWZpbmUgUFBJX0ZPUktfVEVQX1RFUF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBURVAgZmllbGQuICovDQorI2RlZmluZSBQUElfRk9SS19URVBfVEVQX01zayAoMHhGRkZGRkZGRlVMIDw8IFBQSV9GT1JLX1RFUF9URVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRFUCBmaWVsZC4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBQV00gKi8NCisvKiBEZXNjcmlwdGlvbjogUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBVbml0IDAgKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCA0IDogU2hvcnRjdXQgYmV0d2VlbiBMT09QU0RPTkUgZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgUFdNX1NIT1JUU19MT09QU0RPTkVfU1RPUF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBMT09QU0RPTkVfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfTE9PUFNET05FX1NUT1BfTXNrICgweDFVTCA8PCBQV01fU0hPUlRTX0xPT1BTRE9ORV9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBMT09QU0RPTkVfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfTE9PUFNET05FX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBQV01fU0hPUlRTX0xPT1BTRE9ORV9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMyA6IFNob3J0Y3V0IGJldHdlZW4gTE9PUFNET05FIGV2ZW50IGFuZCBTRVFTVEFSVFsxXSB0YXNrICovDQorI2RlZmluZSBQV01fU0hPUlRTX0xPT1BTRE9ORV9TRVFTVEFSVDFfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgTE9PUFNET05FX1NFUVNUQVJUMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfTE9PUFNET05FX1NFUVNUQVJUMV9Nc2sgKDB4MVVMIDw8IFBXTV9TSE9SVFNfTE9PUFNET05FX1NFUVNUQVJUMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTE9PUFNET05FX1NFUVNUQVJUMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfTE9PUFNET05FX1NFUVNUQVJUMV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfTE9PUFNET05FX1NFUVNUQVJUMV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDIgOiBTaG9ydGN1dCBiZXR3ZWVuIExPT1BTRE9ORSBldmVudCBhbmQgU0VRU1RBUlRbMF0gdGFzayAqLw0KKyNkZWZpbmUgUFdNX1NIT1JUU19MT09QU0RPTkVfU0VRU1RBUlQwX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIExPT1BTRE9ORV9TRVFTVEFSVDAgZmllbGQuICovDQorI2RlZmluZSBQV01fU0hPUlRTX0xPT1BTRE9ORV9TRVFTVEFSVDBfTXNrICgweDFVTCA8PCBQV01fU0hPUlRTX0xPT1BTRE9ORV9TRVFTVEFSVDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExPT1BTRE9ORV9TRVFTVEFSVDAgZmllbGQuICovDQorI2RlZmluZSBQV01fU0hPUlRTX0xPT1BTRE9ORV9TRVFTVEFSVDBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBQV01fU0hPUlRTX0xPT1BTRE9ORV9TRVFTVEFSVDBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxIDogU2hvcnRjdXQgYmV0d2VlbiBTRVFFTkRbMV0gZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgUFdNX1NIT1JUU19TRVFFTkQxX1NUT1BfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU0VRRU5EMV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1NIT1JUU19TRVFFTkQxX1NUT1BfTXNrICgweDFVTCA8PCBQV01fU0hPUlRTX1NFUUVORDFfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0VRRU5EMV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1NIT1JUU19TRVFFTkQxX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBQV01fU0hPUlRTX1NFUUVORDFfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDAgOiBTaG9ydGN1dCBiZXR3ZWVuIFNFUUVORFswXSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBQV01fU0hPUlRTX1NFUUVORDBfU1RPUF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTRVFFTkQwX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBQV01fU0hPUlRTX1NFUUVORDBfU1RPUF9Nc2sgKDB4MVVMIDw8IFBXTV9TSE9SVFNfU0VRRU5EMF9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFFTkQwX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBQV01fU0hPUlRTX1NFUUVORDBfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfU0VRRU5EMF9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX0lOVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCA3IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBMT09QU0RPTkUgZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9MT09QU0RPTkVfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgTE9PUFNET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX0xPT1BTRE9ORV9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTl9MT09QU0RPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExPT1BTRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9MT09QU0RPTkVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBQV01fSU5URU5fTE9PUFNET05FX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUFdNUEVSSU9ERU5EIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5fUFdNUEVSSU9ERU5EX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBXTVBFUklPREVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9QV01QRVJJT0RFTkRfTXNrICgweDFVTCA8PCBQV01fSU5URU5fUFdNUEVSSU9ERU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBQV01QRVJJT0RFTkQgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5fUFdNUEVSSU9ERU5EX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1BXTVBFUklPREVORF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNFUUVORFsxXSBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUUVORDFfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgU0VRRU5EMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TRVFFTkQxX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOX1NFUUVORDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNFUUVORDEgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5fU0VRRU5EMV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TRVFFTkQxX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgU0VRRU5EWzBdIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5fU0VRRU5EMF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBTRVFFTkQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUUVORDBfTXNrICgweDFVTCA8PCBQV01fSU5URU5fU0VRRU5EMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0VRRU5EMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TRVFFTkQwX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUUVORDBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTRVFTVEFSVEVEWzFdIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5fU0VRU1RBUlRFRDFfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgU0VRU1RBUlRFRDEgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5fU0VRU1RBUlRFRDFfTXNrICgweDFVTCA8PCBQV01fSU5URU5fU0VRU1RBUlRFRDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNFUVNUQVJURUQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUVNUQVJURUQxX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUVNUQVJURUQxX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgU0VRU1RBUlRFRFswXSBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUVNUQVJURUQwX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFUVNUQVJURUQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUVNUQVJURUQwX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOX1NFUVNUQVJURUQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFTVEFSVEVEMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TRVFTVEFSVEVEMF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TRVFTVEFSVEVEMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TVE9QUEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5fU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTl9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBQV01fSU5URU5fU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFBXTV9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgTE9PUFNET05FIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfTE9PUFNET05FX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIExPT1BTRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9MT09QU0RPTkVfTXNrICgweDFVTCA8PCBQV01fSU5URU5TRVRfTE9PUFNET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBMT09QU0RPTkUgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfTE9PUFNET05FX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9MT09QU0RPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9MT09QU0RPTkVfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUFdNUEVSSU9ERU5EIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfUFdNUEVSSU9ERU5EX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBXTVBFUklPREVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9QV01QRVJJT0RFTkRfTXNrICgweDFVTCA8PCBQV01fSU5URU5TRVRfUFdNUEVSSU9ERU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBQV01QRVJJT0RFTkQgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfUFdNUEVSSU9ERU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9QV01QRVJJT0RFTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9QV01QRVJJT0RFTkRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU0VRRU5EWzFdIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRRU5EMV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBTRVFFTkQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUUVORDFfTXNrICgweDFVTCA8PCBQV01fSU5URU5TRVRfU0VRRU5EMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0VRRU5EMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFFTkQxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFFTkQxX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRRU5EMV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTRVFFTkRbMF0gZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFFTkQwX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFUUVORDAgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRRU5EMF9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTlNFVF9TRVFFTkQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFFTkQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUUVORDBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUUVORDBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFFTkQwX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNFUVNUQVJURURbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFTVEFSVEVEMV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBTRVFTVEFSVEVEMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFTVEFSVEVEMV9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTlNFVF9TRVFTVEFSVEVEMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0VRU1RBUlRFRDEgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRU1RBUlRFRDFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUVNUQVJURUQxX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRU1RBUlRFRDFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU0VRU1RBUlRFRFswXSBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUVNUQVJURUQwX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFUVNUQVJURUQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUVNUQVJURUQwX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOU0VUX1NFUVNUQVJURUQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFTVEFSVEVEMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFTVEFSVEVEMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRU1RBUlRFRDBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFTVEFSVEVEMF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NUT1BQRURfTXNrICgweDFVTCA8PCBQV01fSU5URU5TRVRfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU1RPUFBFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIExPT1BTRE9ORSBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX0xPT1BTRE9ORV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBMT09QU0RPTkUgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfTE9PUFNET05FX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOQ0xSX0xPT1BTRE9ORV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTE9PUFNET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX0xPT1BTRE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfTE9PUFNET05FX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfTE9PUFNET05FX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBQV01QRVJJT0RFTkQgZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9QV01QRVJJT0RFTkRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUFdNUEVSSU9ERU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1BXTVBFUklPREVORF9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTkNMUl9QV01QRVJJT0RFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBXTVBFUklPREVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9QV01QRVJJT0RFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1BXTVBFUklPREVORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1BXTVBFUklPREVORF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU0VRRU5EWzFdIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRRU5EMV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBTRVFFTkQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUUVORDFfTXNrICgweDFVTCA8PCBQV01fSU5URU5DTFJfU0VRRU5EMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0VRRU5EMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFFTkQxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFFTkQxX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRRU5EMV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU0VRRU5EWzBdIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRRU5EMF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBTRVFFTkQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUUVORDBfTXNrICgweDFVTCA8PCBQV01fSU5URU5DTFJfU0VRRU5EMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0VRRU5EMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFFTkQwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFFTkQwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRRU5EMF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU0VRU1RBUlRFRFsxXSBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUVNUQVJURUQxX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNFUVNUQVJURUQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUVNUQVJURUQxX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOQ0xSX1NFUVNUQVJURUQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFTVEFSVEVEMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFTVEFSVEVEMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRU1RBUlRFRDFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFTVEFSVEVEMV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU0VRU1RBUlRFRFswXSBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUVNUQVJURUQwX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFUVNUQVJURUQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUVNUQVJURUQwX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOQ0xSX1NFUVNUQVJURUQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFTVEFSVEVEMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFTVEFSVEVEMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRU1RBUlRFRDBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFTVEFSVEVEMF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NUT1BQRURfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TVE9QUEVEX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOQ0xSX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NUT1BQRURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFBXTV9FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogUFdNIG1vZHVsZSBlbmFibGUgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIFBXTSBtb2R1bGUgKi8NCisjZGVmaW5lIFBXTV9FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9FTkFCTEVfRU5BQkxFX01zayAoMHgxVUwgPDwgUFdNX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9FTkFCTEVfRU5BQkxFX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX01PREUgKi8NCisvKiBEZXNjcmlwdGlvbjogU2VsZWN0cyBvcGVyYXRpbmcgbW9kZSBvZiB0aGUgd2F2ZSBjb3VudGVyICovDQorDQorLyogQml0IDAgOiBTZWxlY3RzIHVwIG9yIHVwIGFuZCBkb3duIGFzIHdhdmUgY291bnRlciBtb2RlICovDQorI2RlZmluZSBQV01fTU9ERV9VUERPV05fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVVBET1dOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX01PREVfVVBET1dOX01zayAoMHgxVUwgPDwgUFdNX01PREVfVVBET1dOX1BvcykgLyohPCBCaXQgbWFzayBvZiBVUERPV04gZmllbGQuICovDQorI2RlZmluZSBQV01fTU9ERV9VUERPV05fVXAgKDBVTCkgLyohPCBVcCBjb3VudGVyIC0gZWRnZSBhbGlnbmVkIFBXTSBkdXR5LWN5Y2xlICovDQorI2RlZmluZSBQV01fTU9ERV9VUERPV05fVXBBbmREb3duICgxVUwpIC8qITwgVXAgYW5kIGRvd24gY291bnRlciAtIGNlbnRlciBhbGlnbmVkIFBXTSBkdXR5IGN5Y2xlICovDQorDQorLyogUmVnaXN0ZXI6IFBXTV9DT1VOVEVSVE9QICovDQorLyogRGVzY3JpcHRpb246IFZhbHVlIHVwIHRvIHdoaWNoIHRoZSBwdWxzZSBnZW5lcmF0b3IgY291bnRlciBjb3VudHMgKi8NCisNCisvKiBCaXRzIDE0Li4wIDogVmFsdWUgdXAgdG8gd2hpY2ggdGhlIHB1bHNlIGdlbmVyYXRvciBjb3VudGVyIGNvdW50cy4gVGhpcyByZWdpc3RlciBpcyBpZ25vcmVkIHdoZW4gREVDT0RFUi5NT0RFPVdhdmVGb3JtIGFuZCBvbmx5IHZhbHVlcyBmcm9tIFJBTSB3aWxsIGJlIHVzZWQuICovDQorI2RlZmluZSBQV01fQ09VTlRFUlRPUF9DT1VOVEVSVE9QX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPVU5URVJUT1AgZmllbGQuICovDQorI2RlZmluZSBQV01fQ09VTlRFUlRPUF9DT1VOVEVSVE9QX01zayAoMHg3RkZGVUwgPDwgUFdNX0NPVU5URVJUT1BfQ09VTlRFUlRPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09VTlRFUlRPUCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX1BSRVNDQUxFUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb25maWd1cmF0aW9uIGZvciBQV01fQ0xLICovDQorDQorLyogQml0cyAyLi4wIDogUHJlLXNjYWxlciBvZiBQV01fQ0xLICovDQorI2RlZmluZSBQV01fUFJFU0NBTEVSX1BSRVNDQUxFUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVTQ0FMRVIgZmllbGQuICovDQorI2RlZmluZSBQV01fUFJFU0NBTEVSX1BSRVNDQUxFUl9Nc2sgKDB4N1VMIDw8IFBXTV9QUkVTQ0FMRVJfUFJFU0NBTEVSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVTQ0FMRVIgZmllbGQuICovDQorI2RlZmluZSBQV01fUFJFU0NBTEVSX1BSRVNDQUxFUl9ESVZfMSAoMFVMKSAvKiE8IERpdmlkZSBieSAgIDEgKDE2TUh6KSAqLw0KKyNkZWZpbmUgUFdNX1BSRVNDQUxFUl9QUkVTQ0FMRVJfRElWXzIgKDFVTCkgLyohPCBEaXZpZGUgYnkgICAyICggOE1IeikgKi8NCisjZGVmaW5lIFBXTV9QUkVTQ0FMRVJfUFJFU0NBTEVSX0RJVl80ICgyVUwpIC8qITwgRGl2aWRlIGJ5ICAgNCAoIDRNSHopICovDQorI2RlZmluZSBQV01fUFJFU0NBTEVSX1BSRVNDQUxFUl9ESVZfOCAoM1VMKSAvKiE8IERpdmlkZSBieSAgIDggKCAyTUh6KSAqLw0KKyNkZWZpbmUgUFdNX1BSRVNDQUxFUl9QUkVTQ0FMRVJfRElWXzE2ICg0VUwpIC8qITwgRGl2aWRlIGJ5ICAxNiAoIDFNSHopICovDQorI2RlZmluZSBQV01fUFJFU0NBTEVSX1BSRVNDQUxFUl9ESVZfMzIgKDVVTCkgLyohPCBEaXZpZGUgYnkgIDMyICggNTAwa0h6KSAqLw0KKyNkZWZpbmUgUFdNX1BSRVNDQUxFUl9QUkVTQ0FMRVJfRElWXzY0ICg2VUwpIC8qITwgRGl2aWRlIGJ5ICA2NCAoIDI1MGtIeikgKi8NCisjZGVmaW5lIFBXTV9QUkVTQ0FMRVJfUFJFU0NBTEVSX0RJVl8xMjggKDdVTCkgLyohPCBEaXZpZGUgYnkgMTI4ICggMTI1a0h6KSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQV01fREVDT0RFUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb25maWd1cmF0aW9uIG9mIHRoZSBkZWNvZGVyICovDQorDQorLyogQml0IDggOiBTZWxlY3RzIHNvdXJjZSBmb3IgYWR2YW5jaW5nIHRoZSBhY3RpdmUgc2VxdWVuY2UgKi8NCisjZGVmaW5lIFBXTV9ERUNPREVSX01PREVfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9ERUNPREVSX01PREVfTXNrICgweDFVTCA8PCBQV01fREVDT0RFUl9NT0RFX1BvcykgLyohPCBCaXQgbWFzayBvZiBNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0RFQ09ERVJfTU9ERV9SZWZyZXNoQ291bnQgKDBVTCkgLyohPCBTRVFbbl0uUkVGUkVTSCBpcyB1c2VkIHRvIGRldGVybWluZSBsb2FkaW5nIGludGVybmFsIGNvbXBhcmUgcmVnaXN0ZXJzICovDQorI2RlZmluZSBQV01fREVDT0RFUl9NT0RFX05leHRTdGVwICgxVUwpIC8qITwgTkVYVFNURVAgdGFzayBjYXVzZXMgYSBuZXcgdmFsdWUgdG8gYmUgbG9hZGVkIHRvIGludGVybmFsIGNvbXBhcmUgcmVnaXN0ZXJzICovDQorDQorLyogQml0cyAyLi4wIDogSG93IGEgc2VxdWVuY2UgaXMgcmVhZCBmcm9tIFJBTSBhbmQgc3ByZWFkIHRvIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovDQorI2RlZmluZSBQV01fREVDT0RFUl9MT0FEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIExPQUQgZmllbGQuICovDQorI2RlZmluZSBQV01fREVDT0RFUl9MT0FEX01zayAoMHg3VUwgPDwgUFdNX0RFQ09ERVJfTE9BRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTE9BRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9ERUNPREVSX0xPQURfQ29tbW9uICgwVUwpIC8qITwgMXN0IGhhbGYgd29yZCAoMTYtYml0KSB1c2VkIGluIGFsbCBQV00gY2hhbm5lbHMgMC4uMyAqLw0KKyNkZWZpbmUgUFdNX0RFQ09ERVJfTE9BRF9Hcm91cGVkICgxVUwpIC8qITwgMXN0IGhhbGYgd29yZCAoMTYtYml0KSB1c2VkIGluIGNoYW5uZWwgMC4uMTsgMm5kIHdvcmQgaW4gY2hhbm5lbCAyLi4zICovDQorI2RlZmluZSBQV01fREVDT0RFUl9MT0FEX0luZGl2aWR1YWwgKDJVTCkgLyohPCAxc3QgaGFsZiB3b3JkICgxNi1iaXQpIGluIGNoLjA7IDJuZCBpbiBjaC4xOyAuLi47IDR0aCBpbiBjaC4zICovDQorI2RlZmluZSBQV01fREVDT0RFUl9MT0FEX1dhdmVGb3JtICgzVUwpIC8qITwgMXN0IGhhbGYgd29yZCAoMTYtYml0KSBpbiBjaC4wOyAybmQgaW4gY2guMTsgLi4uOyA0dGggaW4gQ09VTlRFUlRPUCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQV01fTE9PUCAqLw0KKy8qIERlc2NyaXB0aW9uOiBBbW91bnQgb2YgcGxheWJhY2sgb2YgYSBsb29wICovDQorDQorLyogQml0cyAxNS4uMCA6IEFtb3VudCBvZiBwbGF5YmFjayBvZiBwYXR0ZXJuIGN5Y2xlcyAqLw0KKyNkZWZpbmUgUFdNX0xPT1BfQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9MT09QX0NOVF9Nc2sgKDB4RkZGRlVMIDw8IFBXTV9MT09QX0NOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0xPT1BfQ05UX0Rpc2FibGVkICgwVUwpIC8qITwgTG9vcGluZyBkaXNhYmxlZCAoc3RvcCBhdCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSkgKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX1NFUV9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIEJlZ2lubmluZyBhZGRyZXNzIGluIERhdGEgUkFNIG9mIHNlcXVlbmNlIEEgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogQmVnaW5uaW5nIGFkZHJlc3MgaW4gRGF0YSBSQU0gb2Ygc2VxdWVuY2UgQSAqLw0KKyNkZWZpbmUgUFdNX1NFUV9QVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TRVFfUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBQV01fU0VRX1BUUl9QVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX1NFUV9DTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIEFtb3VudCBvZiB2YWx1ZXMgKGR1dHkgY3ljbGVzKSBpbiBzZXF1ZW5jZSBBICovDQorDQorLyogQml0cyAxNC4uMCA6IEFtb3VudCBvZiB2YWx1ZXMgKGR1dHkgY3ljbGVzKSBpbiBzZXF1ZW5jZSBBICovDQorI2RlZmluZSBQV01fU0VRX0NOVF9DTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1NFUV9DTlRfQ05UX01zayAoMHg3RkZGVUwgPDwgUFdNX1NFUV9DTlRfQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBDTlQgZmllbGQuICovDQorI2RlZmluZSBQV01fU0VRX0NOVF9DTlRfRGlzYWJsZWQgKDBVTCkgLyohPCBTZXF1ZW5jZSBpcyBkaXNhYmxlZCwgYW5kIHNoYWxsIG5vdCBiZSBzdGFydGVkIGFzIGl0IGlzIGVtcHR5ICovDQorDQorLyogUmVnaXN0ZXI6IFBXTV9TRVFfUkVGUkVTSCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgQW1vdW50IG9mIGFkZGl0aW9uYWwgUFdNIHBlcmlvZHMgYmV0d2VlbiBzYW1wbGVzIGxvYWRlZCB0byBjb21wYXJlIHJlZ2lzdGVyIChsb2FkIGV2ZXJ5IENOVCsxIFBXTSBwZXJpb2RzKSAqLw0KKw0KKy8qIEJpdHMgMjMuLjAgOiBBbW91bnQgb2YgYWRkaXRpb25hbCBQV00gcGVyaW9kcyBiZXR3ZWVuIHNhbXBsZXMgbG9hZGVkIHRvIGNvbXBhcmUgcmVnaXN0ZXIgKGxvYWQgZXZlcnkgQ05UKzEgUFdNIHBlcmlvZHMpICovDQorI2RlZmluZSBQV01fU0VRX1JFRlJFU0hfQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TRVFfUkVGUkVTSF9DTlRfTXNrICgweEZGRkZGRlVMIDw8IFBXTV9TRVFfUkVGUkVTSF9DTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TRVFfUkVGUkVTSF9DTlRfQ29udGludW91cyAoMFVMKSAvKiE8IFVwZGF0ZSBldmVyeSBQV00gcGVyaW9kICovDQorDQorLyogUmVnaXN0ZXI6IFBXTV9TRVFfRU5EREVMQVkgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIFRpbWUgYWRkZWQgYWZ0ZXIgdGhlIHNlcXVlbmNlICovDQorDQorLyogQml0cyAyMy4uMCA6IFRpbWUgYWRkZWQgYWZ0ZXIgdGhlIHNlcXVlbmNlIGluIFBXTSBwZXJpb2RzICovDQorI2RlZmluZSBQV01fU0VRX0VORERFTEFZX0NOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDTlQgZmllbGQuICovDQorI2RlZmluZSBQV01fU0VRX0VORERFTEFZX0NOVF9Nc2sgKDB4RkZGRkZGVUwgPDwgUFdNX1NFUV9FTkRERUxBWV9DTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX1BTRUxfT1VUICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBPdXRwdXQgcGluIHNlbGVjdCBmb3IgUFdNIGNoYW5uZWwgMCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFBXTV9QU0VMX09VVF9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1BTRUxfT1VUX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBQV01fUFNFTF9PVVRfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9QU0VMX09VVF9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFBXTV9QU0VMX09VVF9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDkuLjggOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgUFdNX1BTRUxfT1VUX1BPUlRfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9QU0VMX09VVF9QT1JUX01zayAoMHgzVUwgPDwgUFdNX1BTRUxfT1VUX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgUFdNX1BTRUxfT1VUX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBQV01fUFNFTF9PVVRfUElOX01zayAoMHgxRlVMIDw8IFBXTV9QU0VMX09VVF9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBRREVDICovDQorLyogRGVzY3JpcHRpb246IFF1YWRyYXR1cmUgRGVjb2RlciAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCA2IDogU2hvcnRjdXQgYmV0d2VlbiBTQU1QTEVSRFkgZXZlbnQgYW5kIFJFQURDTFJBQ0MgdGFzayAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfU0FNUExFUkRZX1JFQURDTFJBQ0NfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgU0FNUExFUkRZX1JFQURDTFJBQ0MgZmllbGQuICovDQorI2RlZmluZSBRREVDX1NIT1JUU19TQU1QTEVSRFlfUkVBRENMUkFDQ19Nc2sgKDB4MVVMIDw8IFFERUNfU0hPUlRTX1NBTVBMRVJEWV9SRUFEQ0xSQUNDX1BvcykgLyohPCBCaXQgbWFzayBvZiBTQU1QTEVSRFlfUkVBRENMUkFDQyBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1NBTVBMRVJEWV9SRUFEQ0xSQUNDX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfU0FNUExFUkRZX1JFQURDTFJBQ0NfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCA1IDogU2hvcnRjdXQgYmV0d2VlbiBEQkxSRFkgZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfREJMUkRZX1NUT1BfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgREJMUkRZX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBRREVDX1NIT1JUU19EQkxSRFlfU1RPUF9Nc2sgKDB4MVVMIDw8IFFERUNfU0hPUlRTX0RCTFJEWV9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBEQkxSRFlfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX0RCTFJEWV9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfREJMUkRZX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCA0IDogU2hvcnRjdXQgYmV0d2VlbiBEQkxSRFkgZXZlbnQgYW5kIFJEQ0xSREJMIHRhc2sgKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX0RCTFJEWV9SRENMUkRCTF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBEQkxSRFlfUkRDTFJEQkwgZmllbGQuICovDQorI2RlZmluZSBRREVDX1NIT1JUU19EQkxSRFlfUkRDTFJEQkxfTXNrICgweDFVTCA8PCBRREVDX1NIT1JUU19EQkxSRFlfUkRDTFJEQkxfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERCTFJEWV9SRENMUkRCTCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX0RCTFJEWV9SRENMUkRCTF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX0RCTFJEWV9SRENMUkRCTF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDMgOiBTaG9ydGN1dCBiZXR3ZWVuIFJFUE9SVFJEWSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBRREVDX1NIT1JUU19SRVBPUlRSRFlfU1RPUF9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVBPUlRSRFlfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1JFUE9SVFJEWV9TVE9QX01zayAoMHgxVUwgPDwgUURFQ19TSE9SVFNfUkVQT1JUUkRZX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFUE9SVFJEWV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfUkVQT1JUUkRZX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBRREVDX1NIT1JUU19SRVBPUlRSRFlfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDIgOiBTaG9ydGN1dCBiZXR3ZWVuIFJFUE9SVFJEWSBldmVudCBhbmQgUkRDTFJBQ0MgdGFzayAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfUkVQT1JUUkRZX1JEQ0xSQUNDX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFUE9SVFJEWV9SRENMUkFDQyBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1JFUE9SVFJEWV9SRENMUkFDQ19Nc2sgKDB4MVVMIDw8IFFERUNfU0hPUlRTX1JFUE9SVFJEWV9SRENMUkFDQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVQT1JUUkRZX1JEQ0xSQUNDIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfUkVQT1JUUkRZX1JEQ0xSQUNDX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfUkVQT1JUUkRZX1JEQ0xSQUNDX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMSA6IFNob3J0Y3V0IGJldHdlZW4gU0FNUExFUkRZIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1NBTVBMRVJEWV9TVE9QX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNBTVBMRVJEWV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfU0FNUExFUkRZX1NUT1BfTXNrICgweDFVTCA8PCBRREVDX1NIT1JUU19TQU1QTEVSRFlfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0FNUExFUkRZX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBRREVDX1NIT1JUU19TQU1QTEVSRFlfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1NBTVBMRVJEWV9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMCA6IFNob3J0Y3V0IGJldHdlZW4gUkVQT1JUUkRZIGV2ZW50IGFuZCBSRUFEQ0xSQUNDIHRhc2sgKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1JFUE9SVFJEWV9SRUFEQ0xSQUNDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFUE9SVFJEWV9SRUFEQ0xSQUNDIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfUkVQT1JUUkRZX1JFQURDTFJBQ0NfTXNrICgweDFVTCA8PCBRREVDX1NIT1JUU19SRVBPUlRSRFlfUkVBRENMUkFDQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVQT1JUUkRZX1JFQURDTFJBQ0MgZmllbGQuICovDQorI2RlZmluZSBRREVDX1NIT1JUU19SRVBPUlRSRFlfUkVBRENMUkFDQ19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1JFUE9SVFJEWV9SRUFEQ0xSQUNDX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBSZWdpc3RlcjogUURFQ19JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTlNFVF9TVE9QUEVEX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1NUT1BQRURfTXNrICgweDFVTCA8PCBRREVDX0lOVEVOU0VUX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTlNFVF9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1NUT1BQRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgREJMUkRZIGV2ZW50ICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX0RCTFJEWV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBEQkxSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX0RCTFJEWV9Nc2sgKDB4MVVMIDw8IFFERUNfSU5URU5TRVRfREJMUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBEQkxSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX0RCTFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX0RCTFJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTlNFVF9EQkxSRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQUNDT0YgZXZlbnQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfQUNDT0ZfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgQUNDT0YgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX0FDQ09GX01zayAoMHgxVUwgPDwgUURFQ19JTlRFTlNFVF9BQ0NPRl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUNDT0YgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX0FDQ09GX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfQUNDT0ZfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfQUNDT0ZfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVQT1JUUkRZIGV2ZW50ICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1JFUE9SVFJEWV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVBPUlRSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1JFUE9SVFJEWV9Nc2sgKDB4MVVMIDw8IFFERUNfSU5URU5TRVRfUkVQT1JUUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVBPUlRSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1JFUE9SVFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1JFUE9SVFJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTlNFVF9SRVBPUlRSRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU0FNUExFUkRZIGV2ZW50ICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1NBTVBMRVJEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTQU1QTEVSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1NBTVBMRVJEWV9Nc2sgKDB4MVVMIDw8IFFERUNfSU5URU5TRVRfU0FNUExFUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBTQU1QTEVSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1NBTVBMRVJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1NBTVBMRVJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTlNFVF9TQU1QTEVSRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFFERUNfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9TVE9QUEVEX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1NUT1BQRURfTXNrICgweDFVTCA8PCBRREVDX0lOVEVOQ0xSX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1NUT1BQRURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIERCTFJEWSBldmVudCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9EQkxSRFlfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgREJMUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9EQkxSRFlfTXNrICgweDFVTCA8PCBRREVDX0lOVEVOQ0xSX0RCTFJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgREJMUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9EQkxSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9EQkxSRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5DTFJfREJMUkRZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBBQ0NPRiBldmVudCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9BQ0NPRl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBBQ0NPRiBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5DTFJfQUNDT0ZfTXNrICgweDFVTCA8PCBRREVDX0lOVEVOQ0xSX0FDQ09GX1BvcykgLyohPCBCaXQgbWFzayBvZiBBQ0NPRiBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5DTFJfQUNDT0ZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9BQ0NPRl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9BQ0NPRl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVQT1JUUkRZIGV2ZW50ICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1JFUE9SVFJEWV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVBPUlRSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1JFUE9SVFJEWV9Nc2sgKDB4MVVMIDw8IFFERUNfSU5URU5DTFJfUkVQT1JUUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVBPUlRSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1JFUE9SVFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1JFUE9SVFJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9SRVBPUlRSRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNBTVBMRVJEWSBldmVudCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9TQU1QTEVSRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU0FNUExFUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9TQU1QTEVSRFlfTXNrICgweDFVTCA8PCBRREVDX0lOVEVOQ0xSX1NBTVBMRVJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0FNUExFUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9TQU1QTEVSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9TQU1QTEVSRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5DTFJfU0FNUExFUkRZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgdGhlIHF1YWRyYXR1cmUgZGVjb2RlciAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgdGhlIHF1YWRyYXR1cmUgZGVjb2RlciAqLw0KKyNkZWZpbmUgUURFQ19FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfRU5BQkxFX0VOQUJMRV9Nc2sgKDB4MVVMIDw8IFFERUNfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUURFQ19FTkFCTEVfRU5BQkxFX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUURFQ19MRURQT0wgKi8NCisvKiBEZXNjcmlwdGlvbjogTEVEIG91dHB1dCBwaW4gcG9sYXJpdHkgKi8NCisNCisvKiBCaXQgMCA6IExFRCBvdXRwdXQgcGluIHBvbGFyaXR5ICovDQorI2RlZmluZSBRREVDX0xFRFBPTF9MRURQT0xfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTEVEUE9MIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19MRURQT0xfTEVEUE9MX01zayAoMHgxVUwgPDwgUURFQ19MRURQT0xfTEVEUE9MX1BvcykgLyohPCBCaXQgbWFzayBvZiBMRURQT0wgZmllbGQuICovDQorI2RlZmluZSBRREVDX0xFRFBPTF9MRURQT0xfQWN0aXZlTG93ICgwVUwpIC8qITwgTGVkIGFjdGl2ZSBvbiBvdXRwdXQgcGluIGxvdyAqLw0KKyNkZWZpbmUgUURFQ19MRURQT0xfTEVEUE9MX0FjdGl2ZUhpZ2ggKDFVTCkgLyohPCBMZWQgYWN0aXZlIG9uIG91dHB1dCBwaW4gaGlnaCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX1NBTVBMRVBFUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBTYW1wbGUgcGVyaW9kICovDQorDQorLyogQml0cyAzLi4wIDogU2FtcGxlIHBlcmlvZC4gVGhlIFNBTVBMRSByZWdpc3RlciB3aWxsIGJlIHVwZGF0ZWQgZm9yIGV2ZXJ5IG5ldyBzYW1wbGUgKi8NCisjZGVmaW5lIFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTQU1QTEVQRVIgZmllbGQuICovDQorI2RlZmluZSBRREVDX1NBTVBMRVBFUl9TQU1QTEVQRVJfTXNrICgweEZVTCA8PCBRREVDX1NBTVBMRVBFUl9TQU1QTEVQRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNBTVBMRVBFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl8xMjh1cyAoMFVMKSAvKiE8IDEyOCB1cyAqLw0KKyNkZWZpbmUgUURFQ19TQU1QTEVQRVJfU0FNUExFUEVSXzI1NnVzICgxVUwpIC8qITwgMjU2IHVzICovDQorI2RlZmluZSBRREVDX1NBTVBMRVBFUl9TQU1QTEVQRVJfNTEydXMgKDJVTCkgLyohPCA1MTIgdXMgKi8NCisjZGVmaW5lIFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl8xMDI0dXMgKDNVTCkgLyohPCAxMDI0IHVzICovDQorI2RlZmluZSBRREVDX1NBTVBMRVBFUl9TQU1QTEVQRVJfMjA0OHVzICg0VUwpIC8qITwgMjA0OCB1cyAqLw0KKyNkZWZpbmUgUURFQ19TQU1QTEVQRVJfU0FNUExFUEVSXzQwOTZ1cyAoNVVMKSAvKiE8IDQwOTYgdXMgKi8NCisjZGVmaW5lIFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl84MTkydXMgKDZVTCkgLyohPCA4MTkyIHVzICovDQorI2RlZmluZSBRREVDX1NBTVBMRVBFUl9TQU1QTEVQRVJfMTYzODR1cyAoN1VMKSAvKiE8IDE2Mzg0IHVzICovDQorI2RlZmluZSBRREVDX1NBTVBMRVBFUl9TQU1QTEVQRVJfMzJtcyAoOFVMKSAvKiE8IDMyNzY4IHVzICovDQorI2RlZmluZSBRREVDX1NBTVBMRVBFUl9TQU1QTEVQRVJfNjVtcyAoOVVMKSAvKiE8IDY1NTM2IHVzICovDQorI2RlZmluZSBRREVDX1NBTVBMRVBFUl9TQU1QTEVQRVJfMTMxbXMgKDEwVUwpIC8qITwgMTMxMDcyIHVzICovDQorDQorLyogUmVnaXN0ZXI6IFFERUNfU0FNUExFICovDQorLyogRGVzY3JpcHRpb246IE1vdGlvbiBzYW1wbGUgdmFsdWUgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogTGFzdCBtb3Rpb24gc2FtcGxlICovDQorI2RlZmluZSBRREVDX1NBTVBMRV9TQU1QTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU0FNUExFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19TQU1QTEVfU0FNUExFX01zayAoMHhGRkZGRkZGRlVMIDw8IFFERUNfU0FNUExFX1NBTVBMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0FNUExFIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX1JFUE9SVFBFUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBOdW1iZXIgb2Ygc2FtcGxlcyB0byBiZSB0YWtlbiBiZWZvcmUgUkVQT1JUUkRZIGFuZCBEQkxSRFkgZXZlbnRzIGNhbiBiZSBnZW5lcmF0ZWQgKi8NCisNCisvKiBCaXRzIDMuLjAgOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIGJlIGFjY3VtdWxhdGVkIGluIHRoZSBBQ0MgcmVnaXN0ZXIgYmVmb3JlIHRoZSBSRVBPUlRSRFkgYW5kIERCTFJEWSBldmVudHMgY2FuIGJlIGdlbmVyYXRlZCAqLw0KKyNkZWZpbmUgUURFQ19SRVBPUlRQRVJfUkVQT1JUUEVSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFUE9SVFBFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfUkVQT1JUUEVSX1JFUE9SVFBFUl9Nc2sgKDB4RlVMIDw8IFFERUNfUkVQT1JUUEVSX1JFUE9SVFBFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVQT1JUUEVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19SRVBPUlRQRVJfUkVQT1JUUEVSXzEwU21wbCAoMFVMKSAvKiE8IDEwIHNhbXBsZXMgLyByZXBvcnQgKi8NCisjZGVmaW5lIFFERUNfUkVQT1JUUEVSX1JFUE9SVFBFUl80MFNtcGwgKDFVTCkgLyohPCA0MCBzYW1wbGVzIC8gcmVwb3J0ICovDQorI2RlZmluZSBRREVDX1JFUE9SVFBFUl9SRVBPUlRQRVJfODBTbXBsICgyVUwpIC8qITwgODAgc2FtcGxlcyAvIHJlcG9ydCAqLw0KKyNkZWZpbmUgUURFQ19SRVBPUlRQRVJfUkVQT1JUUEVSXzEyMFNtcGwgKDNVTCkgLyohPCAxMjAgc2FtcGxlcyAvIHJlcG9ydCAqLw0KKyNkZWZpbmUgUURFQ19SRVBPUlRQRVJfUkVQT1JUUEVSXzE2MFNtcGwgKDRVTCkgLyohPCAxNjAgc2FtcGxlcyAvIHJlcG9ydCAqLw0KKyNkZWZpbmUgUURFQ19SRVBPUlRQRVJfUkVQT1JUUEVSXzIwMFNtcGwgKDVVTCkgLyohPCAyMDAgc2FtcGxlcyAvIHJlcG9ydCAqLw0KKyNkZWZpbmUgUURFQ19SRVBPUlRQRVJfUkVQT1JUUEVSXzI0MFNtcGwgKDZVTCkgLyohPCAyNDAgc2FtcGxlcyAvIHJlcG9ydCAqLw0KKyNkZWZpbmUgUURFQ19SRVBPUlRQRVJfUkVQT1JUUEVSXzI4MFNtcGwgKDdVTCkgLyohPCAyODAgc2FtcGxlcyAvIHJlcG9ydCAqLw0KKyNkZWZpbmUgUURFQ19SRVBPUlRQRVJfUkVQT1JUUEVSXzFTbXBsICg4VUwpIC8qITwgMSBzYW1wbGUgLyByZXBvcnQgKi8NCisNCisvKiBSZWdpc3RlcjogUURFQ19BQ0MgKi8NCisvKiBEZXNjcmlwdGlvbjogUmVnaXN0ZXIgYWNjdW11bGF0aW5nIHRoZSB2YWxpZCB0cmFuc2l0aW9ucyAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBSZWdpc3RlciBhY2N1bXVsYXRpbmcgYWxsIHZhbGlkIHNhbXBsZXMgKG5vdCBkb3VibGUgdHJhbnNpdGlvbikgcmVhZCBmcm9tIHRoZSBTQU1QTEUgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFFERUNfQUNDX0FDQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBQ0MgZmllbGQuICovDQorI2RlZmluZSBRREVDX0FDQ19BQ0NfTXNrICgweEZGRkZGRkZGVUwgPDwgUURFQ19BQ0NfQUNDX1BvcykgLyohPCBCaXQgbWFzayBvZiBBQ0MgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFERUNfQUNDUkVBRCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTbmFwc2hvdCBvZiB0aGUgQUNDIHJlZ2lzdGVyLCB1cGRhdGVkIGJ5IHRoZSBSRUFEQ0xSQUNDIG9yIFJEQ0xSQUNDIHRhc2sgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogU25hcHNob3Qgb2YgdGhlIEFDQyByZWdpc3Rlci4gKi8NCisjZGVmaW5lIFFERUNfQUNDUkVBRF9BQ0NSRUFEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFDQ1JFQUQgZmllbGQuICovDQorI2RlZmluZSBRREVDX0FDQ1JFQURfQUNDUkVBRF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBRREVDX0FDQ1JFQURfQUNDUkVBRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUNDUkVBRCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUURFQ19QU0VMX0xFRCAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBMRUQgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0xFRF9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0xFRF9DT05ORUNUX01zayAoMHgxVUwgPDwgUURFQ19QU0VMX0xFRF9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0xFRF9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFFERUNfUFNFTF9MRURfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFFERUNfUFNFTF9MRURfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0xFRF9QT1JUX01zayAoMHgzVUwgPDwgUURFQ19QU0VMX0xFRF9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFFERUNfUFNFTF9MRURfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfUFNFTF9MRURfUElOX01zayAoMHgxRlVMIDw8IFFERUNfUFNFTF9MRURfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFERUNfUFNFTF9BICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIEEgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0FfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfUFNFTF9BX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBRREVDX1BTRUxfQV9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0FfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBRREVDX1BTRUxfQV9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0FfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0FfUE9SVF9Nc2sgKDB4M1VMIDw8IFFERUNfUFNFTF9BX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0FfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfUFNFTF9BX1BJTl9Nc2sgKDB4MUZVTCA8PCBRREVDX1BTRUxfQV9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUURFQ19QU0VMX0IgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgQiBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBRREVDX1BTRUxfQl9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0JfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFFERUNfUFNFTF9CX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBRREVDX1BTRUxfQl9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFFERUNfUFNFTF9CX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBRREVDX1BTRUxfQl9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBRREVDX1BTRUxfQl9QT1JUX01zayAoMHgzVUwgPDwgUURFQ19QU0VMX0JfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBRREVDX1BTRUxfQl9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0JfUElOX01zayAoMHgxRlVMIDw8IFFERUNfUFNFTF9CX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX0RCRkVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnB1dCBkZWJvdW5jZSBmaWx0ZXJzICovDQorDQorLyogQml0IDAgOiBFbmFibGUgaW5wdXQgZGVib3VuY2UgZmlsdGVycyAqLw0KKyNkZWZpbmUgUURFQ19EQkZFTl9EQkZFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBEQkZFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfREJGRU5fREJGRU5fTXNrICgweDFVTCA8PCBRREVDX0RCRkVOX0RCRkVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBEQkZFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfREJGRU5fREJGRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBEZWJvdW5jZSBpbnB1dCBmaWx0ZXJzIGRpc2FibGVkICovDQorI2RlZmluZSBRREVDX0RCRkVOX0RCRkVOX0VuYWJsZWQgKDFVTCkgLyohPCBEZWJvdW5jZSBpbnB1dCBmaWx0ZXJzIGVuYWJsZWQgKi8NCisNCisvKiBSZWdpc3RlcjogUURFQ19MRURQUkUgKi8NCisvKiBEZXNjcmlwdGlvbjogVGltZSBwZXJpb2QgdGhlIExFRCBpcyBzd2l0Y2hlZCBPTiBwcmlvciB0byBzYW1wbGluZyAqLw0KKw0KKy8qIEJpdHMgOC4uMCA6IFBlcmlvZCBpbiB1cyB0aGUgTEVEIGlzIHN3aXRjaGVkIG9uIHByaW9yIHRvIHNhbXBsaW5nICovDQorI2RlZmluZSBRREVDX0xFRFBSRV9MRURQUkVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTEVEUFJFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19MRURQUkVfTEVEUFJFX01zayAoMHgxRkZVTCA8PCBRREVDX0xFRFBSRV9MRURQUkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExFRFBSRSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUURFQ19BQ0NEQkwgKi8NCisvKiBEZXNjcmlwdGlvbjogUmVnaXN0ZXIgYWNjdW11bGF0aW5nIHRoZSBudW1iZXIgb2YgZGV0ZWN0ZWQgZG91YmxlIHRyYW5zaXRpb25zICovDQorDQorLyogQml0cyAzLi4wIDogUmVnaXN0ZXIgYWNjdW11bGF0aW5nIHRoZSBudW1iZXIgb2YgZGV0ZWN0ZWQgZG91YmxlIG9yIGlsbGVnYWwgdHJhbnNpdGlvbnMuICggU0FNUExFID0gMiApLiAqLw0KKyNkZWZpbmUgUURFQ19BQ0NEQkxfQUNDREJMX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFDQ0RCTCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfQUNDREJMX0FDQ0RCTF9Nc2sgKDB4RlVMIDw8IFFERUNfQUNDREJMX0FDQ0RCTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUNDREJMIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX0FDQ0RCTFJFQUQgKi8NCisvKiBEZXNjcmlwdGlvbjogU25hcHNob3Qgb2YgdGhlIEFDQ0RCTCwgdXBkYXRlZCBieSB0aGUgUkVBRENMUkFDQyBvciBSRENMUkRCTCB0YXNrICovDQorDQorLyogQml0cyAzLi4wIDogU25hcHNob3Qgb2YgdGhlIEFDQ0RCTCByZWdpc3Rlci4gVGhpcyBmaWVsZCBpcyB1cGRhdGVkIHdoZW4gdGhlIFJFQURDTFJBQ0Mgb3IgUkRDTFJEQkwgdGFzayBpcyB0cmlnZ2VyZWQuICovDQorI2RlZmluZSBRREVDX0FDQ0RCTFJFQURfQUNDREJMUkVBRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBQ0NEQkxSRUFEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19BQ0NEQkxSRUFEX0FDQ0RCTFJFQURfTXNrICgweEZVTCA8PCBRREVDX0FDQ0RCTFJFQURfQUNDREJMUkVBRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUNDREJMUkVBRCBmaWVsZC4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBRU1BJICovDQorLyogRGVzY3JpcHRpb246IEV4dGVybmFsIGZsYXNoIGludGVyZmFjZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0lOVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgUVNQSV9JTlRFTl9SRUFEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSU5URU5fUkVBRFlfTXNrICgweDFVTCA8PCBRU1BJX0lOVEVOX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSU5URU5fUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBRU1BJX0lOVEVOX1JFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIFFTUElfSU5URU5TRVRfUkVBRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lOVEVOU0VUX1JFQURZX01zayAoMHgxVUwgPDwgUVNQSV9JTlRFTlNFVF9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lOVEVOU0VUX1JFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFFTUElfSU5URU5TRVRfUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFFTUElfSU5URU5TRVRfUkVBRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIFFTUElfSU5URU5DTFJfUkVBRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lOVEVOQ0xSX1JFQURZX01zayAoMHgxVUwgPDwgUVNQSV9JTlRFTkNMUl9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lOVEVOQ0xSX1JFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFFTUElfSU5URU5DTFJfUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFFTUElfSU5URU5DTFJfUkVBRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBRU1BJIHBlcmlwaGVyYWwgYW5kIGFjcXVpcmUgdGhlIHBpbnMgc2VsZWN0ZWQgaW4gUFNFTG4gcmVnaXN0ZXJzICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSBRU1BJICovDQorI2RlZmluZSBRU1BJX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9FTkFCTEVfRU5BQkxFX01zayAoMHgxVUwgPDwgUVNQSV9FTkFCTEVfRU5BQkxFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIFFTUEkgKi8NCisjZGVmaW5lIFFTUElfRU5BQkxFX0VOQUJMRV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIFFTUEkgKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9SRUFEX1NSQyAqLw0KKy8qIERlc2NyaXB0aW9uOiBGbGFzaCBtZW1vcnkgc291cmNlIGFkZHJlc3MgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogV29yZC1hbGlnbmVkIGZsYXNoIG1lbW9yeSBzb3VyY2UgYWRkcmVzcy4gKi8NCisjZGVmaW5lIFFTUElfUkVBRF9TUkNfU1JDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSQyBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUkVBRF9TUkNfU1JDX01zayAoMHhGRkZGRkZGRlVMIDw8IFFTUElfUkVBRF9TUkNfU1JDX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUkMgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfUkVBRF9EU1QgKi8NCisvKiBEZXNjcmlwdGlvbjogUkFNIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogV29yZC1hbGlnbmVkIFJBTSBkZXN0aW5hdGlvbiBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgUVNQSV9SRUFEX0RTVF9EU1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRFNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9SRUFEX0RTVF9EU1RfTXNrICgweEZGRkZGRkZGVUwgPDwgUVNQSV9SRUFEX0RTVF9EU1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERTVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9SRUFEX0NOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWFkIHRyYW5zZmVyIGxlbmd0aCAqLw0KKw0KKy8qIEJpdHMgMjAuLjAgOiBSZWFkIHRyYW5zZmVyIGxlbmd0aCBpbiBudW1iZXIgb2YgYnl0ZXMuIFRoZSBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMuICovDQorI2RlZmluZSBRU1BJX1JFQURfQ05UX0NOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDTlQgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1JFQURfQ05UX0NOVF9Nc2sgKDB4MUZGRkZGVUwgPDwgUVNQSV9SRUFEX0NOVF9DTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9XUklURV9EU1QgKi8NCisvKiBEZXNjcmlwdGlvbjogRmxhc2ggZGVzdGluYXRpb24gYWRkcmVzcyAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBXb3JkLWFsaWduZWQgZmxhc2ggZGVzdGluYXRpb24gYWRkcmVzcy4gKi8NCisjZGVmaW5lIFFTUElfV1JJVEVfRFNUX0RTVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBEU1QgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1dSSVRFX0RTVF9EU1RfTXNrICgweEZGRkZGRkZGVUwgPDwgUVNQSV9XUklURV9EU1RfRFNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBEU1QgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfV1JJVEVfU1JDICovDQorLyogRGVzY3JpcHRpb246IFJBTSBzb3VyY2UgYWRkcmVzcyAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBXb3JkLWFsaWduZWQgUkFNIHNvdXJjZSBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgUVNQSV9XUklURV9TUkNfU1JDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSQyBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfV1JJVEVfU1JDX1NSQ19Nc2sgKDB4RkZGRkZGRkZVTCA8PCBRU1BJX1dSSVRFX1NSQ19TUkNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSQyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9XUklURV9DTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogV3JpdGUgdHJhbnNmZXIgbGVuZ3RoICovDQorDQorLyogQml0cyAyMC4uMCA6IFdyaXRlIHRyYW5zZmVyIGxlbmd0aCBpbiBudW1iZXIgb2YgYnl0ZXMuIFRoZSBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMuICovDQorI2RlZmluZSBRU1BJX1dSSVRFX0NOVF9DTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9XUklURV9DTlRfQ05UX01zayAoMHgxRkZGRkZVTCA8PCBRU1BJX1dSSVRFX0NOVF9DTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9FUkFTRV9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogU3RhcnQgYWRkcmVzcyBvZiBmbGFzaCBibG9jayB0byBiZSBlcmFzZWQgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogV29yZC1hbGlnbmVkIHN0YXJ0IGFkZHJlc3Mgb2YgYmxvY2sgdG8gYmUgZXJhc2VkLiAqLw0KKyNkZWZpbmUgUVNQSV9FUkFTRV9QVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfRVJBU0VfUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBRU1BJX0VSQVNFX1BUUl9QVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9FUkFTRV9MRU4gKi8NCisvKiBEZXNjcmlwdGlvbjogU2l6ZSBvZiBibG9jayB0byBiZSBlcmFzZWQuICovDQorDQorLyogQml0cyAxLi4wIDogTEVOICovDQorI2RlZmluZSBRU1BJX0VSQVNFX0xFTl9MRU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9FUkFTRV9MRU5fTEVOX01zayAoMHgzVUwgPDwgUVNQSV9FUkFTRV9MRU5fTEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBMRU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX0VSQVNFX0xFTl9MRU5fNEtCICgwVUwpIC8qITwgRXJhc2UgNCBrQiBibG9jayAoZmxhc2ggY29tbWFuZCAweDIwKSAqLw0KKyNkZWZpbmUgUVNQSV9FUkFTRV9MRU5fTEVOXzY0S0IgKDFVTCkgLyohPCBFcmFzZSA2NCBrQiBibG9jayAoZmxhc2ggY29tbWFuZCAweEQ4KSAqLw0KKyNkZWZpbmUgUVNQSV9FUkFTRV9MRU5fTEVOX0FsbCAoMlVMKSAvKiE8IEVyYXNlIGFsbCAoZmxhc2ggY29tbWFuZCAweEM3KSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX1BTRUxfU0NLICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIHNlcmlhbCBjbG9jayBTQ0sgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBRU1BJX1BTRUxfU0NLX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfU0NLX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBRU1BJX1BTRUxfU0NLX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfU0NLX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX1NDS19DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX1NDS19QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfU0NLX1BPUlRfTXNrICgweDNVTCA8PCBRU1BJX1BTRUxfU0NLX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX1NDS19QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX1NDS19QSU5fTXNrICgweDFGVUwgPDwgUVNQSV9QU0VMX1NDS19QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9QU0VMX0NTTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBjaGlwIHNlbGVjdCBzaWduYWwgQ1NOLiAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9DU05fQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9DU05fQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFFTUElfUFNFTF9DU05fQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9DU05fQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBRU1BJX1BTRUxfQ1NOX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBRU1BJX1BTRUxfQ1NOX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9DU05fUE9SVF9Nc2sgKDB4M1VMIDw8IFFTUElfUFNFTF9DU05fUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBRU1BJX1BTRUxfQ1NOX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfQ1NOX1BJTl9Nc2sgKDB4MUZVTCA8PCBRU1BJX1BTRUxfQ1NOX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX1BTRUxfSU8wICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIHNlcmlhbCBkYXRhIE1PU0kvSU8wLiAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzBfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzBfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFFTUElfUFNFTF9JTzBfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzBfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8wX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8wX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzBfUE9SVF9Nc2sgKDB4M1VMIDw8IFFTUElfUFNFTF9JTzBfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8wX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8wX1BJTl9Nc2sgKDB4MUZVTCA8PCBRU1BJX1BTRUxfSU8wX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX1BTRUxfSU8xICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIHNlcmlhbCBkYXRhIE1JU08vSU8xLiAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzFfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzFfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFFTUElfUFNFTF9JTzFfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzFfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8xX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8xX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzFfUE9SVF9Nc2sgKDB4M1VMIDw8IFFTUElfUFNFTF9JTzFfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8xX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8xX1BJTl9Nc2sgKDB4MUZVTCA8PCBRU1BJX1BTRUxfSU8xX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX1BTRUxfSU8yICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIHNlcmlhbCBkYXRhIElPMi4gKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8yX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8yX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBRU1BJX1BTRUxfSU8yX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8yX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMl9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMl9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8yX1BPUlRfTXNrICgweDNVTCA8PCBRU1BJX1BTRUxfSU8yX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMl9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMl9QSU5fTXNrICgweDFGVUwgPDwgUVNQSV9QU0VMX0lPMl9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9QU0VMX0lPMyAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBzZXJpYWwgZGF0YSBJTzMuICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPM19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPM19DT05ORUNUX01zayAoMHgxVUwgPDwgUVNQSV9QU0VMX0lPM19DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPM19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzNfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzNfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPM19QT1JUX01zayAoMHgzVUwgPDwgUVNQSV9QU0VMX0lPM19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzNfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzNfUElOX01zayAoMHgxRlVMIDw8IFFTUElfUFNFTF9JTzNfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfWElQT0ZGU0VUICovDQorLyogRGVzY3JpcHRpb246IEFkZHJlc3Mgb2Zmc2V0IGludG8gdGhlIGV4dGVybmFsIG1lbW9yeSBmb3IgRXhlY3V0ZSBpbiBQbGFjZSBvcGVyYXRpb24uICovDQorDQorLyogQml0cyAzMS4uMCA6IEFkZHJlc3Mgb2Zmc2V0IGludG8gdGhlIGV4dGVybmFsIG1lbW9yeSBmb3IgRXhlY3V0ZSBpbiBQbGFjZSBvcGVyYXRpb24uIFZhbHVlIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LiAqLw0KKyNkZWZpbmUgUVNQSV9YSVBPRkZTRVRfWElQT0ZGU0VUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFhJUE9GRlNFVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfWElQT0ZGU0VUX1hJUE9GRlNFVF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBRU1BJX1hJUE9GRlNFVF9YSVBPRkZTRVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFhJUE9GRlNFVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9JRkNPTkZJRzAgKi8NCisvKiBEZXNjcmlwdGlvbjogSW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24uICovDQorDQorLyogQml0IDcgOiBFbmFibGUgZGVlcCBwb3dlci1kb3duIG1vZGUgKERQTSkgZmVhdHVyZS4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX0RQTUVOQUJMRV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBEUE1FTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMF9EUE1FTkFCTEVfTXNrICgweDFVTCA8PCBRU1BJX0lGQ09ORklHMF9EUE1FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERQTUVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX0RQTUVOQUJMRV9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBEUE0gZmVhdHVyZS4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX0RQTUVOQUJMRV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgRFBNIGZlYXR1cmUuICovDQorDQorLyogQml0IDYgOiBBZGRyZXNzaW5nIG1vZGUuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMF9BRERSTU9ERV9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX0FERFJNT0RFX01zayAoMHgxVUwgPDwgUVNQSV9JRkNPTkZJRzBfQUREUk1PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFJNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfQUREUk1PREVfMjRCSVQgKDBVTCkgLyohPCAyNC1iaXQgYWRkcmVzc2luZy4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX0FERFJNT0RFXzMyQklUICgxVUwpIC8qITwgMzItYml0IGFkZHJlc3NpbmcuICovDQorDQorLyogQml0cyA1Li4zIDogQ29uZmlndXJlIG51bWJlciBvZiBkYXRhIGxpbmVzIGFuZCBvcGNvZGUgdXNlZCBmb3Igd3JpdGluZy4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX1dSSVRFT0NfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgV1JJVEVPQyBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX1dSSVRFT0NfTXNrICgweDdVTCA8PCBRU1BJX0lGQ09ORklHMF9XUklURU9DX1BvcykgLyohPCBCaXQgbWFzayBvZiBXUklURU9DIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfV1JJVEVPQ19QUCAoMFVMKSAvKiE8IFNpbmdsZSBkYXRhIGxpbmUgU1BJLiBQUCAob3Bjb2RlIDB4MDIpLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfV1JJVEVPQ19QUDJPICgxVUwpIC8qITwgRHVhbCBkYXRhIGxpbmUgU1BJLiBQUDJPIChvcGNvZGUgMHhBMikuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMF9XUklURU9DX1BQNE8gKDJVTCkgLyohPCBRdWFkIGRhdGEgbGluZSBTUEkuIFBQNE8gKG9wY29kZSAweDMyKS4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX1dSSVRFT0NfUFA0SU8gKDNVTCkgLyohPCBRdWFkIGRhdGEgbGluZSBTUEkuIFBQNElPIChvcGNvZGUgMHgzOCkuICovDQorDQorLyogQml0cyAyLi4wIDogQ29uZmlndXJlIG51bWJlciBvZiBkYXRhIGxpbmVzIGFuZCBvcGNvZGUgdXNlZCBmb3IgcmVhZGluZy4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX1JFQURPQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFET0MgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMF9SRUFET0NfTXNrICgweDdVTCA8PCBRU1BJX0lGQ09ORklHMF9SRUFET0NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURPQyBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX1JFQURPQ19GQVNUUkVBRCAoMFVMKSAvKiE8IFNpbmdsZSBkYXRhIGxpbmUgU1BJLiBGQVNUX1JFQUQgKG9wY29kZSAweDBCKS4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX1JFQURPQ19SRUFEMk8gKDFVTCkgLyohPCBEdWFsIGRhdGEgbGluZSBTUEkuIFJFQUQyTyAob3Bjb2RlIDB4M0IpLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfUkVBRE9DX1JFQUQySU8gKDJVTCkgLyohPCBEdWFsIGRhdGEgbGluZSBTUEkuIFJFQUQySU8gKG9wY29kZSAweEJCKS4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX1JFQURPQ19SRUFENE8gKDNVTCkgLyohPCBRdWFkIGRhdGEgbGluZSBTUEkuIFJFQUQ0TyAob3Bjb2RlIDB4NkIpLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfUkVBRE9DX1JFQUQ0SU8gKDRVTCkgLyohPCBRdWFkIGRhdGEgbGluZSBTUEkuIFJFQUQ0SU8gKG9wY29kZSAweEVCKS4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9JRkNPTkZJRzEgKi8NCisvKiBEZXNjcmlwdGlvbjogSW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24uICovDQorDQorLyogQml0cyAzMS4uMjggOiBTQ0sgZnJlcXVlbmN5IGlzIGdpdmVuIGFzIDMyIE1IeiAvIChTQ0tGUkVRICsgMSkuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMV9TQ0tGUkVRX1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBTQ0tGUkVRIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzFfU0NLRlJFUV9Nc2sgKDB4RlVMIDw8IFFTUElfSUZDT05GSUcxX1NDS0ZSRVFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNDS0ZSRVEgZmllbGQuICovDQorDQorLyogQml0IDI1IDogU2VsZWN0IFNQSSBtb2RlLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzFfU1BJTU9ERV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgU1BJTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcxX1NQSU1PREVfTXNrICgweDFVTCA8PCBRU1BJX0lGQ09ORklHMV9TUElNT0RFX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUElNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzFfU1BJTU9ERV9NT0RFMCAoMFVMKSAvKiE8IE1vZGUgMDogRGF0YSBhcmUgY2FwdHVyZWQgb24gdGhlIGNsb2NrJ3MgcmlzaW5nIGVkZ2UgYW5kIGRhdGEgaXMgb3V0cHV0IG9uIGEgZmFsbGluZyBlZGdlLiBCYXNlIGxldmVsIG9mIGNsb2NrIGlzIDAgKENQT0w9MCwgQ1BIQT0wKS4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcxX1NQSU1PREVfTU9ERTMgKDFVTCkgLyohPCBNb2RlIDM6IERhdGEgYXJlIGNhcHR1cmVkIG9uIHRoZSBjbG9jaydzIGZhbGxpbmcgZWRnZSBhbmQgZGF0YSBpcyBvdXRwdXQgb24gYSByaXNpbmcgZWRnZS4gQmFzZSBsZXZlbCBvZiBjbG9jayBpcyAxIChDUE9MPTEsIENQSEE9MSkuICovDQorDQorLyogQml0IDI0IDogRW50ZXIvZXhpdCBkZWVwIHBvd2VyLWRvd24gbW9kZSAoRFBNKSBmb3IgZXh0ZXJuYWwgZmxhc2ggbWVtb3J5LiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzFfRFBNRU5fUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIERQTUVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzFfRFBNRU5fTXNrICgweDFVTCA8PCBRU1BJX0lGQ09ORklHMV9EUE1FTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRFBNRU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMV9EUE1FTl9FeGl0ICgwVUwpIC8qITwgRXhpdCBEUE0uICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMV9EUE1FTl9FbnRlciAoMVVMKSAvKiE8IEVudGVyIERQTS4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoYXQgdGhlIENTTiBwaW4gbXVzdCBzdGF5IGhpZ2ggYmVmb3JlIGl0IGNhbiBnbyBsb3cgYWdhaW4uIFZhbHVlIGlzIHNwZWNpZmllZCBpbiBudW1iZXIgb2YgMTYgTUh6IHBlcmlvZHMgKDYyLjUgbnMpLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzFfU0NLREVMQVlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU0NLREVMQVkgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMV9TQ0tERUxBWV9Nc2sgKDB4RkZVTCA8PCBRU1BJX0lGQ09ORklHMV9TQ0tERUxBWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0NLREVMQVkgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfU1RBVFVTICovDQorLyogRGVzY3JpcHRpb246IFN0YXR1cyByZWdpc3Rlci4gKi8NCisNCisvKiBCaXRzIDMxLi4yNCA6IFZhbHVlIG9mIGV4dGVybmFsIGZsYXNoIGRldmljZXMgU3RhdHVzIFJlZ2lzdGVyLiBXaGVuIHRoZSBleHRlcm5hbCBmbGFzaCBoYXMgdHdvIGJ5dGVzIHN0YXR1cyByZWdpc3RlciB0aGlzIGZpZWxkIGluY2x1ZGVzIHRoZSB2YWx1ZSBvZiB0aGUgbG93IGJ5dGUuICovDQorI2RlZmluZSBRU1BJX1NUQVRVU19TUkVHX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBTUkVHIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9TVEFUVVNfU1JFR19Nc2sgKDB4RkZVTCA8PCBRU1BJX1NUQVRVU19TUkVHX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUkVHIGZpZWxkLiAqLw0KKw0KKy8qIEJpdCAzIDogUmVhZHkgc3RhdHVzLiAqLw0KKyNkZWZpbmUgUVNQSV9TVEFUVVNfUkVBRFlfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1NUQVRVU19SRUFEWV9Nc2sgKDB4MVVMIDw8IFFTUElfU1RBVFVTX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfU1RBVFVTX1JFQURZX0JVU1kgKDBVTCkgLyohPCBRU1BJIHBlcmlwaGVyYWwgaXMgYnVzeS4gSXQgaXMgbm90IGFsbG93ZWQgdG8gdHJpZ2dlciBhbnkgbmV3IHRhc2tzLCB3cml0aW5nIGN1c3RvbSBpbnN0cnVjdGlvbnMgb3IgZW50ZXIvZXhpdCBEUE0uICovDQorI2RlZmluZSBRU1BJX1NUQVRVU19SRUFEWV9SRUFEWSAoMVVMKSAvKiE8IFFTUEkgcGVyaXBoZXJhbCBpcyByZWFkeS4gSXQgaXMgYWxsb3dlZCB0byB0cmlnZ2VyIG5ldyB0YXNrcywgd3JpdGluZyBjdXN0b20gaW5zdHJ1Y3Rpb25zIG9yIGVudGVyL2V4aXQgRFBNLiAqLw0KKw0KKy8qIEJpdCAyIDogRGVlcCBwb3dlci1kb3duIG1vZGUgKERQTSkgc3RhdHVzIG9mIGV4dGVybmFsIGZsYXNoLiAqLw0KKyNkZWZpbmUgUVNQSV9TVEFUVVNfRFBNX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIERQTSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfU1RBVFVTX0RQTV9Nc2sgKDB4MVVMIDw8IFFTUElfU1RBVFVTX0RQTV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRFBNIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9TVEFUVVNfRFBNX0Rpc2FibGVkICgwVUwpIC8qITwgRXh0ZXJuYWwgZmxhc2ggaXMgbm90IGluIERQTS4gKi8NCisjZGVmaW5lIFFTUElfU1RBVFVTX0RQTV9FbmFibGVkICgxVUwpIC8qITwgRXh0ZXJuYWwgZmxhc2ggaXMgaW4gRFBNLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0RQTURVUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZXQgdGhlIGR1cmF0aW9uIHJlcXVpcmVkIHRvIGVudGVyL2V4aXQgZGVlcCBwb3dlci1kb3duIG1vZGUgKERQTSkuICovDQorDQorLyogQml0cyAzMS4uMTYgOiBEdXJhdGlvbiBuZWVkZWQgYnkgZXh0ZXJuYWwgZmxhc2ggdG8gZXhpdCBEUE0uIER1cmF0aW9uIGlzIGdpdmVuIGFzIEVYSVQgKiAyNTYgKiA2Mi41IG5zLiAqLw0KKyNkZWZpbmUgUVNQSV9EUE1EVVJfRVhJVF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgRVhJVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfRFBNRFVSX0VYSVRfTXNrICgweEZGRkZVTCA8PCBRU1BJX0RQTURVUl9FWElUX1BvcykgLyohPCBCaXQgbWFzayBvZiBFWElUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTUuLjAgOiBEdXJhdGlvbiBuZWVkZWQgYnkgZXh0ZXJuYWwgZmxhc2ggdG8gZW50ZXIgRFBNLiBEdXJhdGlvbiBpcyBnaXZlbiBhcyBFTlRFUiAqIDI1NiAqIDYyLjUgbnMuICovDQorI2RlZmluZSBRU1BJX0RQTURVUl9FTlRFUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTlRFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfRFBNRFVSX0VOVEVSX01zayAoMHhGRkZGVUwgPDwgUVNQSV9EUE1EVVJfRU5URVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOVEVSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0FERFJDT05GICovDQorLyogRGVzY3JpcHRpb246IEV4dGVuZGVkIGFkZHJlc3MgY29uZmlndXJhdGlvbi4gKi8NCisNCisvKiBCaXQgMjcgOiBTZW5kIFdSRU4gKHdyaXRlIGVuYWJsZSBvcGNvZGUgMHgwNikgYmVmb3JlIGluc3RydWN0aW9uLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9XUkVOX1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBXUkVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9XUkVOX01zayAoMHgxVUwgPDwgUVNQSV9BRERSQ09ORl9XUkVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBXUkVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9XUkVOX0Rpc2FibGUgKDBVTCkgLyohPCBEbyBub3Qgc2VuZCBXUkVOLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9XUkVOX0VuYWJsZSAoMVVMKSAvKiE8IFNlbmQgV1JFTi4gKi8NCisNCisvKiBCaXQgMjYgOiBXYWl0IGZvciB3cml0ZSBjb21wbGV0ZSBiZWZvcmUgc2VuZGluZyBjb21tYW5kLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9XSVBXQUlUX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBXSVBXQUlUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9XSVBXQUlUX01zayAoMHgxVUwgPDwgUVNQSV9BRERSQ09ORl9XSVBXQUlUX1BvcykgLyohPCBCaXQgbWFzayBvZiBXSVBXQUlUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9XSVBXQUlUX0Rpc2FibGUgKDBVTCkgLyohPCBObyB3YWl0LiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9XSVBXQUlUX0VuYWJsZSAoMVVMKSAvKiE8IFdhaXQuICovDQorDQorLyogQml0cyAyNS4uMjQgOiBFeHRlbmRlZCBhZGRyZXNzaW5nIG1vZGUuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX01PREVfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX01PREVfTXNrICgweDNVTCA8PCBRU1BJX0FERFJDT05GX01PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX01PREVfTm9JbnN0ciAoMFVMKSAvKiE8IERvIG5vdCBzZW5kIGFueSBpbnN0cnVjdGlvbi4gKi8NCisjZGVmaW5lIFFTUElfQUREUkNPTkZfTU9ERV9PcGNvZGUgKDFVTCkgLyohPCBTZW5kIG9wY29kZS4gKi8NCisjZGVmaW5lIFFTUElfQUREUkNPTkZfTU9ERV9PcEJ5dGUwICgyVUwpIC8qITwgU2VuZCBvcGNvZGUsIGJ5dGUwLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9NT0RFX0FsbCAoM1VMKSAvKiE8IFNlbmQgb3Bjb2RlLCBieXRlMCwgYnl0ZTEuICovDQorDQorLyogQml0cyAyMy4uMTYgOiBCeXRlIDEgZm9sbG93aW5nIGJ5dGUgMC4gKi8NCisjZGVmaW5lIFFTUElfQUREUkNPTkZfQllURTFfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEJZVEUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9CWVRFMV9Nc2sgKDB4RkZVTCA8PCBRU1BJX0FERFJDT05GX0JZVEUxX1BvcykgLyohPCBCaXQgbWFzayBvZiBCWVRFMSBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogQnl0ZSAwIGZvbGxvd2luZyBvcGNvZGUuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX0JZVEUwX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJZVEUwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9CWVRFMF9Nc2sgKDB4RkZVTCA8PCBRU1BJX0FERFJDT05GX0JZVEUwX1BvcykgLyohPCBCaXQgbWFzayBvZiBCWVRFMCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBPcGNvZGUgdGhhdCBlbnRlcnMgdGhlIDMyLWJpdCBhZGRyZXNzaW5nIG1vZGUuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX09QQ09ERV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPUENPREUgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX09QQ09ERV9Nc2sgKDB4RkZVTCA8PCBRU1BJX0FERFJDT05GX09QQ09ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1BDT0RFIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0NJTlNUUkNPTkYgKi8NCisvKiBEZXNjcmlwdGlvbjogQ3VzdG9tIGluc3RydWN0aW9uIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuICovDQorDQorLyogQml0IDE1IDogU2VuZCBXUkVOICh3cml0ZSBlbmFibGUgb3Bjb2RlIDB4MDYpIGJlZm9yZSBpbnN0cnVjdGlvbi4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9XUkVOX1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBXUkVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX1dSRU5fTXNrICgweDFVTCA8PCBRU1BJX0NJTlNUUkNPTkZfV1JFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgV1JFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9XUkVOX0Rpc2FibGUgKDBVTCkgLyohPCBEbyBub3Qgc2VuZCBXUkVOLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX1dSRU5fRW5hYmxlICgxVUwpIC8qITwgU2VuZCBXUkVOLiAqLw0KKw0KKy8qIEJpdCAxNCA6IFdhaXQgZm9yIHdyaXRlIGNvbXBsZXRlIGJlZm9yZSBzZW5kaW5nIGNvbW1hbmQuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfV0lQV0FJVF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgV0lQV0FJVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9XSVBXQUlUX01zayAoMHgxVUwgPDwgUVNQSV9DSU5TVFJDT05GX1dJUFdBSVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdJUFdBSVQgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfV0lQV0FJVF9EaXNhYmxlICgwVUwpIC8qITwgTm8gd2FpdC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9XSVBXQUlUX0VuYWJsZSAoMVVMKSAvKiE8IFdhaXQuICovDQorDQorLyogQml0IDEzIDogTGV2ZWwgb2YgdGhlIElPMyBwaW4gKGlmIGNvbm5lY3RlZCkgZHVyaW5nIHRyYW5zbWlzc2lvbiBvZiBjdXN0b20gaW5zdHJ1Y3Rpb24uICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfTElPM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgTElPMyBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9MSU8zX01zayAoMHgxVUwgPDwgUVNQSV9DSU5TVFJDT05GX0xJTzNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExJTzMgZmllbGQuICovDQorDQorLyogQml0IDEyIDogTGV2ZWwgb2YgdGhlIElPMiBwaW4gKGlmIGNvbm5lY3RlZCkgZHVyaW5nIHRyYW5zbWlzc2lvbiBvZiBjdXN0b20gaW5zdHJ1Y3Rpb24uICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfTElPMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgTElPMiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9MSU8yX01zayAoMHgxVUwgPDwgUVNQSV9DSU5TVFJDT05GX0xJTzJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExJTzIgZmllbGQuICovDQorDQorLyogQml0cyAxMS4uOCA6IExlbmd0aCBvZiBjdXN0b20gaW5zdHJ1Y3Rpb24gaW4gbnVtYmVyIG9mIGJ5dGVzLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX0xFTkdUSF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBMRU5HVEggZmllbGQuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfTEVOR1RIX01zayAoMHhGVUwgPDwgUVNQSV9DSU5TVFJDT05GX0xFTkdUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTEVOR1RIIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX0xFTkdUSF8xQiAoMVVMKSAvKiE8IFNlbmQgb3Bjb2RlIG9ubHkuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfTEVOR1RIXzJCICgyVUwpIC8qITwgU2VuZCBvcGNvZGUsIENJTlNUUkRBVDAuQllURTAuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfTEVOR1RIXzNCICgzVUwpIC8qITwgU2VuZCBvcGNvZGUsIENJTlNUUkRBVDAuQllURTAgLSZndDsgQ0lOU1RSREFUMC5CWVRFMS4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9MRU5HVEhfNEIgKDRVTCkgLyohPCBTZW5kIG9wY29kZSwgQ0lOU1RSREFUMC5CWVRFMCAtJmd0OyBDSU5TVFJEQVQwLkJZVEUyLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX0xFTkdUSF81QiAoNVVMKSAvKiE8IFNlbmQgb3Bjb2RlLCBDSU5TVFJEQVQwLkJZVEUwIC0mZ3Q7IENJTlNUUkRBVDAuQllURTMuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfTEVOR1RIXzZCICg2VUwpIC8qITwgU2VuZCBvcGNvZGUsIENJTlNUUkRBVDAuQllURTAgLSZndDsgQ0lOU1RSREFUMS5CWVRFNC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9MRU5HVEhfN0IgKDdVTCkgLyohPCBTZW5kIG9wY29kZSwgQ0lOU1RSREFUMC5CWVRFMCAtJmd0OyBDSU5TVFJEQVQxLkJZVEU1LiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX0xFTkdUSF84QiAoOFVMKSAvKiE8IFNlbmQgb3Bjb2RlLCBDSU5TVFJEQVQwLkJZVEUwIC0mZ3Q7IENJTlNUUkRBVDEuQllURTYuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfTEVOR1RIXzlCICg5VUwpIC8qITwgU2VuZCBvcGNvZGUsIENJTlNUUkRBVDAuQllURTAgLSZndDsgQ0lOU1RSREFUMS5CWVRFNy4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBPcGNvZGUgb2YgQ3VzdG9tIGluc3RydWN0aW9uLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX09QQ09ERV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPUENPREUgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfT1BDT0RFX01zayAoMHhGRlVMIDw8IFFTUElfQ0lOU1RSQ09ORl9PUENPREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9QQ09ERSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9DSU5TVFJEQVQwICovDQorLyogRGVzY3JpcHRpb246IEN1c3RvbSBpbnN0cnVjdGlvbiBkYXRhIHJlZ2lzdGVyIDAuICovDQorDQorLyogQml0cyAzMS4uMjQgOiBEYXRhIGJ5dGUgMyAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJEQVQwX0JZVEUzX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBCWVRFMyBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMF9CWVRFM19Nc2sgKDB4RkZVTCA8PCBRU1BJX0NJTlNUUkRBVDBfQllURTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJZVEUzIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMjMuLjE2IDogRGF0YSBieXRlIDIgKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMF9CWVRFMl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQllURTIgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkRBVDBfQllURTJfTXNrICgweEZGVUwgPDwgUVNQSV9DSU5TVFJEQVQwX0JZVEUyX1BvcykgLyohPCBCaXQgbWFzayBvZiBCWVRFMiBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogRGF0YSBieXRlIDEgKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMF9CWVRFMV9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBCWVRFMSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMF9CWVRFMV9Nc2sgKDB4RkZVTCA8PCBRU1BJX0NJTlNUUkRBVDBfQllURTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJZVEUxIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IERhdGEgYnl0ZSAwICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkRBVDBfQllURTBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQllURTAgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkRBVDBfQllURTBfTXNrICgweEZGVUwgPDwgUVNQSV9DSU5TVFJEQVQwX0JZVEUwX1BvcykgLyohPCBCaXQgbWFzayBvZiBCWVRFMCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9DSU5TVFJEQVQxICovDQorLyogRGVzY3JpcHRpb246IEN1c3RvbSBpbnN0cnVjdGlvbiBkYXRhIHJlZ2lzdGVyIDEuICovDQorDQorLyogQml0cyAzMS4uMjQgOiBEYXRhIGJ5dGUgNyAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJEQVQxX0JZVEU3X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBCWVRFNyBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMV9CWVRFN19Nc2sgKDB4RkZVTCA8PCBRU1BJX0NJTlNUUkRBVDFfQllURTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJZVEU3IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMjMuLjE2IDogRGF0YSBieXRlIDYgKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMV9CWVRFNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQllURTYgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkRBVDFfQllURTZfTXNrICgweEZGVUwgPDwgUVNQSV9DSU5TVFJEQVQxX0JZVEU2X1BvcykgLyohPCBCaXQgbWFzayBvZiBCWVRFNiBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogRGF0YSBieXRlIDUgKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMV9CWVRFNV9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBCWVRFNSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMV9CWVRFNV9Nc2sgKDB4RkZVTCA8PCBRU1BJX0NJTlNUUkRBVDFfQllURTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJZVEU1IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IERhdGEgYnl0ZSA0ICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkRBVDFfQllURTRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQllURTQgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkRBVDFfQllURTRfTXNrICgweEZGVUwgPDwgUVNQSV9DSU5TVFJEQVQxX0JZVEU0X1BvcykgLyohPCBCaXQgbWFzayBvZiBCWVRFNCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9JRlRJTUlORyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTUEkgaW50ZXJmYWNlIHRpbWluZy4gKi8NCisNCisvKiBCaXRzIDEwLi44IDogVGltaW5nIHJlbGF0ZWQgdG8gc2FtcGxpbmcgb2YgdGhlIGlucHV0IHNlcmlhbCBkYXRhLiBUaGUgdmFsdWUgb2YgUlhERUxBWSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiA2NCBNSHogY3ljbGVzICgxNS42MjUgbnMpIGRlbGF5IGZyb20gdGhlIHRoZSByaXNpbmcgZWRnZSBvZiB0aGUgU1BJIENsb2NrIChTQ0spIHVudGlsIHRoZSBpbnB1dCBzZXJpYWwgZGF0YSBpcyBzYW1wbGVkLiBBcyBlbiBleGFtcGxlLCBpZiBzZXQgdG8gMCB0aGUgaW5wdXQgc2VyaWFsIGRhdGEgaXMgc2FtcGxlZCBvbiB0aGUgcmlzaW5nIGVkZ2Ugb2YgU0NLLiAqLw0KKyNkZWZpbmUgUVNQSV9JRlRJTUlOR19SWERFTEFZX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYREVMQVkgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lGVElNSU5HX1JYREVMQVlfTXNrICgweDdVTCA8PCBRU1BJX0lGVElNSU5HX1JYREVMQVlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYREVMQVkgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogUkFESU8gKi8NCisvKiBEZXNjcmlwdGlvbjogMi40IEdIeiBSYWRpbyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19TSE9SVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogU2hvcnRjdXQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMTkgOiBTaG9ydGN1dCBiZXR3ZWVuIFJYUkVBRFkgZXZlbnQgYW5kIFNUQVJUIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19SWFJFQURZX1NUQVJUX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFJFQURZX1NUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JYUkVBRFlfU1RBUlRfTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfUlhSRUFEWV9TVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhSRUFEWV9TVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19SWFJFQURZX1NUQVJUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JYUkVBRFlfU1RBUlRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxOCA6IFNob3J0Y3V0IGJldHdlZW4gVFhSRUFEWSBldmVudCBhbmQgU1RBUlQgdGFzayAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1RYUkVBRFlfU1RBUlRfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYUkVBRFlfU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfVFhSRUFEWV9TVEFSVF9Nc2sgKDB4MVVMIDw8IFJBRElPX1NIT1JUU19UWFJFQURZX1NUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFJFQURZX1NUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1RYUkVBRFlfU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfVFhSRUFEWV9TVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDE3IDogU2hvcnRjdXQgYmV0d2VlbiBDQ0FJRExFIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19DQ0FJRExFX1NUT1BfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENDQUlETEVfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19DQ0FJRExFX1NUT1BfTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfQ0NBSURMRV9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQ0FJRExFX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQ0NBSURMRV9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0NDQUlETEVfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDE2IDogU2hvcnRjdXQgYmV0d2VlbiBFREVORCBldmVudCBhbmQgRElTQUJMRSB0YXNrICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRURFTkRfRElTQUJMRV9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgRURFTkRfRElTQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19FREVORF9ESVNBQkxFX01zayAoMHgxVUwgPDwgUkFESU9fU0hPUlRTX0VERU5EX0RJU0FCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVERU5EX0RJU0FCTEUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRURFTkRfRElTQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19FREVORF9ESVNBQkxFX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMTUgOiBTaG9ydGN1dCBiZXR3ZWVuIFJFQURZIGV2ZW50IGFuZCBFRFNUQVJUIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19SRUFEWV9FRFNUQVJUX1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWV9FRFNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JFQURZX0VEU1RBUlRfTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfUkVBRFlfRURTVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFlfRURTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19SRUFEWV9FRFNUQVJUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JFQURZX0VEU1RBUlRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxNCA6IFNob3J0Y3V0IGJldHdlZW4gRlJBTUVTVEFSVCBldmVudCBhbmQgQkNTVEFSVCB0YXNrICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRlJBTUVTVEFSVF9CQ1NUQVJUX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBGUkFNRVNUQVJUX0JDU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRlJBTUVTVEFSVF9CQ1NUQVJUX01zayAoMHgxVUwgPDwgUkFESU9fU0hPUlRTX0ZSQU1FU1RBUlRfQkNTVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJBTUVTVEFSVF9CQ1NUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0ZSQU1FU1RBUlRfQkNTVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19GUkFNRVNUQVJUX0JDU1RBUlRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxMyA6IFNob3J0Y3V0IGJldHdlZW4gQ0NBQlVTWSBldmVudCBhbmQgRElTQUJMRSB0YXNrICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQ0NBQlVTWV9ESVNBQkxFX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBDQ0FCVVNZX0RJU0FCTEUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQ0NBQlVTWV9ESVNBQkxFX01zayAoMHgxVUwgPDwgUkFESU9fU0hPUlRTX0NDQUJVU1lfRElTQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0NBQlVTWV9ESVNBQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0NDQUJVU1lfRElTQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19DQ0FCVVNZX0RJU0FCTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxMiA6IFNob3J0Y3V0IGJldHdlZW4gQ0NBSURMRSBldmVudCBhbmQgVFhFTiB0YXNrICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQ0NBSURMRV9UWEVOX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBDQ0FJRExFX1RYRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQ0NBSURMRV9UWEVOX01zayAoMHgxVUwgPDwgUkFESU9fU0hPUlRTX0NDQUlETEVfVFhFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0NBSURMRV9UWEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0NDQUlETEVfVFhFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19DQ0FJRExFX1RYRU5fRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxMSA6IFNob3J0Y3V0IGJldHdlZW4gUlhSRUFEWSBldmVudCBhbmQgQ0NBU1RBUlQgdGFzayAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JYUkVBRFlfQ0NBU1RBUlRfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYUkVBRFlfQ0NBU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfUlhSRUFEWV9DQ0FTVEFSVF9Nc2sgKDB4MVVMIDw8IFJBRElPX1NIT1JUU19SWFJFQURZX0NDQVNUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFJFQURZX0NDQVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JYUkVBRFlfQ0NBU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfUlhSRUFEWV9DQ0FTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDggOiBTaG9ydGN1dCBiZXR3ZWVuIERJU0FCTEVEIGV2ZW50IGFuZCBSU1NJU1RPUCB0YXNrICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRElTQUJMRURfUlNTSVNUT1BfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgRElTQUJMRURfUlNTSVNUT1AgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRElTQUJMRURfUlNTSVNUT1BfTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfRElTQUJMRURfUlNTSVNUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERJU0FCTEVEX1JTU0lTVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0RJU0FCTEVEX1JTU0lTVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0RJU0FCTEVEX1JTU0lTVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgNiA6IFNob3J0Y3V0IGJldHdlZW4gQUREUkVTUyBldmVudCBhbmQgQkNTVEFSVCB0YXNrICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQUREUkVTU19CQ1NUQVJUX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFJFU1NfQkNTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19BRERSRVNTX0JDU1RBUlRfTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfQUREUkVTU19CQ1NUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSRVNTX0JDU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQUREUkVTU19CQ1NUQVJUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0FERFJFU1NfQkNTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDUgOiBTaG9ydGN1dCBiZXR3ZWVuIEVORCBldmVudCBhbmQgU1RBUlQgdGFzayAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0VORF9TVEFSVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRfU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRU5EX1NUQVJUX01zayAoMHgxVUwgPDwgUkFESU9fU0hPUlRTX0VORF9TVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EX1NUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0VORF9TVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19FTkRfU1RBUlRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCA0IDogU2hvcnRjdXQgYmV0d2VlbiBBRERSRVNTIGV2ZW50IGFuZCBSU1NJU1RBUlQgdGFzayAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0FERFJFU1NfUlNTSVNUQVJUX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFJFU1NfUlNTSVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0FERFJFU1NfUlNTSVNUQVJUX01zayAoMHgxVUwgPDwgUkFESU9fU0hPUlRTX0FERFJFU1NfUlNTSVNUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSRVNTX1JTU0lTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19BRERSRVNTX1JTU0lTVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19BRERSRVNTX1JTU0lTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDMgOiBTaG9ydGN1dCBiZXR3ZWVuIERJU0FCTEVEIGV2ZW50IGFuZCBSWEVOIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19ESVNBQkxFRF9SWEVOX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIERJU0FCTEVEX1JYRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRElTQUJMRURfUlhFTl9Nc2sgKDB4MVVMIDw8IFJBRElPX1NIT1JUU19ESVNBQkxFRF9SWEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBESVNBQkxFRF9SWEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0RJU0FCTEVEX1JYRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRElTQUJMRURfUlhFTl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDIgOiBTaG9ydGN1dCBiZXR3ZWVuIERJU0FCTEVEIGV2ZW50IGFuZCBUWEVOIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19ESVNBQkxFRF9UWEVOX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIERJU0FCTEVEX1RYRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRElTQUJMRURfVFhFTl9Nc2sgKDB4MVVMIDw8IFJBRElPX1NIT1JUU19ESVNBQkxFRF9UWEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBESVNBQkxFRF9UWEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0RJU0FCTEVEX1RYRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRElTQUJMRURfVFhFTl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDEgOiBTaG9ydGN1dCBiZXR3ZWVuIEVORCBldmVudCBhbmQgRElTQUJMRSB0YXNrICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRU5EX0RJU0FCTEVfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EX0RJU0FCTEUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRU5EX0RJU0FCTEVfTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfRU5EX0RJU0FCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORF9ESVNBQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0VORF9ESVNBQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0VORF9ESVNBQkxFX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMCA6IFNob3J0Y3V0IGJldHdlZW4gUkVBRFkgZXZlbnQgYW5kIFNUQVJUIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19SRUFEWV9TVEFSVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWV9TVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19SRUFEWV9TVEFSVF9Nc2sgKDB4MVVMIDw8IFJBRElPX1NIT1JUU19SRUFEWV9TVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFlfU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfUkVBRFlfU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfUkVBRFlfU1RBUlRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIE1IUk1BVENIIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9NSFJNQVRDSF9Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgTUhSTUFUQ0ggZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9NSFJNQVRDSF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX01IUk1BVENIX1BvcykgLyohPCBCaXQgbWFzayBvZiBNSFJNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX01IUk1BVENIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX01IUk1BVENIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9NSFJNQVRDSF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUlhSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUlhSRUFEWV9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgUlhSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JYUkVBRFlfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9SWFJFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUlhSRUFEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SWFJFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SWFJFQURZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUWFJFQURZIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9UWFJFQURZX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBUWFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfVFhSRUFEWV9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX1RYUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9UWFJFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1RYUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1RYUkVBRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJBVEVCT09TVCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUkFURUJPT1NUX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBSQVRFQk9PU1QgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SQVRFQk9PU1RfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9SQVRFQk9PU1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJBVEVCT09TVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JBVEVCT09TVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SQVRFQk9PU1RfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JBVEVCT09TVF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0NBU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ0NBU1RPUFBFRF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0NBU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NDQVNUT1BQRURfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9DQ0FTVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQ0FTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ0NBU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DQ0FTVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DQ0FTVE9QUEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDQ0FCVVNZIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DQ0FCVVNZX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDQ0FCVVNZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ0NBQlVTWV9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX0NDQUJVU1lfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENDQUJVU1kgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DQ0FCVVNZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NDQUJVU1lfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NDQUJVU1lfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENDQUlETEUgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NDQUlETEVfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENDQUlETEUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DQ0FJRExFX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfQ0NBSURMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0NBSURMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NDQUlETEVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ0NBSURMRV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ0NBSURMRV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRURTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9FRFNUT1BQRURfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVEU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0VEU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX0VEU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRURTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRURTVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0VEU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRURTVE9QUEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFREVORCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRURFTkRfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVERU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRURFTkRfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9FREVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRURFTkQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9FREVORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9FREVORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRURFTkRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEZSQU1FU1RBUlQgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0ZSQU1FU1RBUlRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZSQU1FU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9GUkFNRVNUQVJUX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfRlJBTUVTVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0ZSQU1FU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRlJBTUVTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRlJBTUVTVEFSVF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ1JDRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NSQ0VSUk9SX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBDUkNFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NSQ0VSUk9SX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfQ1JDRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENSQ0VSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ1JDRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ1JDRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NSQ0VSUk9SX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDUkNPSyBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ1JDT0tfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENSQ09LIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ1JDT0tfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9DUkNPS19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JDT0sgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DUkNPS19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DUkNPS19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ1JDT0tfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEJDTUFUQ0ggZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0JDTUFUQ0hfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJDTUFUQ0ggZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9CQ01BVENIX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfQkNNQVRDSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQkNNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0JDTUFUQ0hfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQkNNQVRDSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQkNNQVRDSF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSU1NJRU5EIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SU1NJRU5EX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJTU0lFTkQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SU1NJRU5EX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfUlNTSUVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlNTSUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JTU0lFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUlNTSUVORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUlNTSUVORF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBERVZNSVNTIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9ERVZNSVNTX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIERFVk1JU1MgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9ERVZNSVNTX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfREVWTUlTU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgREVWTUlTUyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0RFVk1JU1NfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfREVWTUlTU19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfREVWTUlTU19TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBERVZNQVRDSCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfREVWTUFUQ0hfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgREVWTUFUQ0ggZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9ERVZNQVRDSF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX0RFVk1BVENIX1BvcykgLyohPCBCaXQgbWFzayBvZiBERVZNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0RFVk1BVENIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0RFVk1BVENIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9ERVZNQVRDSF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBESVNBQkxFRCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRElTQUJMRURfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRElTQUJMRUQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9ESVNBQkxFRF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX0RJU0FCTEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBESVNBQkxFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0RJU0FCTEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0RJU0FCTEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9ESVNBQkxFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkQgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0VORF9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9FTkRfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9FTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0VORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9FTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0VORF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBQQVlMT0FEIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9QQVlMT0FEX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBBWUxPQUQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9QQVlMT0FEX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfUEFZTE9BRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUEFZTE9BRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1BBWUxPQURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUEFZTE9BRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUEFZTE9BRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBBRERSRVNTIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9BRERSRVNTX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFJFU1MgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9BRERSRVNTX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfQUREUkVTU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUREUkVTUyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0FERFJFU1NfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQUREUkVTU19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQUREUkVTU19TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUkVBRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SRUFEWV9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SRUFEWV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIE1IUk1BVENIIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9NSFJNQVRDSF9Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgTUhSTUFUQ0ggZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9NSFJNQVRDSF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX01IUk1BVENIX1BvcykgLyohPCBCaXQgbWFzayBvZiBNSFJNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX01IUk1BVENIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX01IUk1BVENIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9NSFJNQVRDSF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JYUkVBRFlfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SWFJFQURZX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfUlhSRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JYUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUlhSRUFEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUlhSRUFEWV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1RYUkVBRFlfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9UWFJFQURZX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfVFhSRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1RYUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfVFhSRUFEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfVFhSRUFEWV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJBVEVCT09TVCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUkFURUJPT1NUX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBSQVRFQk9PU1QgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SQVRFQk9PU1RfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9SQVRFQk9PU1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJBVEVCT09TVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JBVEVCT09TVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SQVRFQk9PU1RfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JBVEVCT09TVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENDQVNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NDQVNUT1BQRURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENDQVNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DQ0FTVE9QUEVEX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfQ0NBU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0NBU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NDQVNUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBU1RPUFBFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTggOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENDQUJVU1kgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NDQUJVU1lfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENDQUJVU1kgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DQ0FCVVNZX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfQ0NBQlVTWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0NBQlVTWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NDQUJVU1lfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBQlVTWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBQlVTWV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENDQUlETEUgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NDQUlETEVfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENDQUlETEUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DQ0FJRExFX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfQ0NBSURMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0NBSURMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NDQUlETEVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBSURMRV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBSURMRV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVEU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRURTVE9QUEVEX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBFRFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9FRFNUT1BQRURfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9FRFNUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVEU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0VEU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9FRFNUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0VEU1RPUFBFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTUgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVERU5EIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9FREVORF9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgRURFTkQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9FREVORF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX0VERU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBFREVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0VERU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0VERU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9FREVORF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEZSQU1FU1RBUlQgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0ZSQU1FU1RBUlRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZSQU1FU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9GUkFNRVNUQVJUX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfRlJBTUVTVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0ZSQU1FU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRlJBTUVTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRlJBTUVTVEFSVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENSQ0VSUk9SIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DUkNFUlJPUl9Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgQ1JDRVJST1IgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DUkNFUlJPUl9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX0NSQ0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUkNFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NSQ0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NSQ0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DUkNFUlJPUl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENSQ09LIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DUkNPS19Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgQ1JDT0sgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DUkNPS19Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX0NSQ09LX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUkNPSyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NSQ09LX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NSQ09LX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DUkNPS19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEJDTUFUQ0ggZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0JDTUFUQ0hfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJDTUFUQ0ggZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9CQ01BVENIX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfQkNNQVRDSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQkNNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0JDTUFUQ0hfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQkNNQVRDSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQkNNQVRDSF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUlNTSUVORCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUlNTSUVORF9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBSU1NJRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUlNTSUVORF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX1JTU0lFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJTU0lFTkQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SU1NJRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JTU0lFTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JTU0lFTkRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIERFVk1JU1MgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0RFVk1JU1NfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgREVWTUlTUyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0RFVk1JU1NfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9ERVZNSVNTX1BvcykgLyohPCBCaXQgbWFzayBvZiBERVZNSVNTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfREVWTUlTU19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9ERVZNSVNTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9ERVZNSVNTX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBERVZNQVRDSCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfREVWTUFUQ0hfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgREVWTUFUQ0ggZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9ERVZNQVRDSF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX0RFVk1BVENIX1BvcykgLyohPCBCaXQgbWFzayBvZiBERVZNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0RFVk1BVENIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0RFVk1BVENIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9ERVZNQVRDSF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRElTQUJMRUQgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0RJU0FCTEVEX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIERJU0FCTEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRElTQUJMRURfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9ESVNBQkxFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRElTQUJMRUQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9ESVNBQkxFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9ESVNBQkxFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRElTQUJMRURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRU5EX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0VORF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0VORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRU5EX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBQQVlMT0FEIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9QQVlMT0FEX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBBWUxPQUQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9QQVlMT0FEX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfUEFZTE9BRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUEFZTE9BRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1BBWUxPQURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUEFZTE9BRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUEFZTE9BRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQUREUkVTUyBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQUREUkVTU19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSRVNTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQUREUkVTU19Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX0FERFJFU1NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFJFU1MgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9BRERSRVNTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0FERFJFU1NfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0FERFJFU1NfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFQURZIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SRUFEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JFQURZX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JFQURZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19DUkNTVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogQ1JDIHN0YXR1cyAqLw0KKw0KKy8qIEJpdCAwIDogQ1JDIHN0YXR1cyBvZiBwYWNrZXQgcmVjZWl2ZWQgKi8NCisjZGVmaW5lIFJBRElPX0NSQ1NUQVRVU19DUkNTVEFUVVNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ1JDU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDU1RBVFVTX0NSQ1NUQVRVU19Nc2sgKDB4MVVMIDw8IFJBRElPX0NSQ1NUQVRVU19DUkNTVEFUVVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENSQ1NUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NSQ1NUQVRVU19DUkNTVEFUVVNfQ1JDRXJyb3IgKDBVTCkgLyohPCBQYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IgKi8NCisjZGVmaW5lIFJBRElPX0NSQ1NUQVRVU19DUkNTVEFUVVNfQ1JDT2sgKDFVTCkgLyohPCBQYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgb2sgKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fUlhNQVRDSCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWNlaXZlZCBhZGRyZXNzICovDQorDQorLyogQml0cyAyLi4wIDogUmVjZWl2ZWQgYWRkcmVzcyAqLw0KKyNkZWZpbmUgUkFESU9fUlhNQVRDSF9SWE1BVENIX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYTUFUQ0ggZmllbGQuICovDQorI2RlZmluZSBSQURJT19SWE1BVENIX1JYTUFUQ0hfTXNrICgweDdVTCA8PCBSQURJT19SWE1BVENIX1JYTUFUQ0hfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYTUFUQ0ggZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX1JYQ1JDICovDQorLyogRGVzY3JpcHRpb246IENSQyBmaWVsZCBvZiBwcmV2aW91c2x5IHJlY2VpdmVkIHBhY2tldCAqLw0KKw0KKy8qIEJpdHMgMjMuLjAgOiBDUkMgZmllbGQgb2YgcHJldmlvdXNseSByZWNlaXZlZCBwYWNrZXQgKi8NCisjZGVmaW5lIFJBRElPX1JYQ1JDX1JYQ1JDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYQ1JDIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhDUkNfUlhDUkNfTXNrICgweEZGRkZGRlVMIDw8IFJBRElPX1JYQ1JDX1JYQ1JDX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWENSQyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fREFJICovDQorLyogRGVzY3JpcHRpb246IERldmljZSBhZGRyZXNzIG1hdGNoIGluZGV4ICovDQorDQorLyogQml0cyAyLi4wIDogRGV2aWNlIGFkZHJlc3MgbWF0Y2ggaW5kZXggKi8NCisjZGVmaW5lIFJBRElPX0RBSV9EQUlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgREFJIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFJX0RBSV9Nc2sgKDB4N1VMIDw8IFJBRElPX0RBSV9EQUlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERBSSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fUEFDS0VUUFRSICovDQorLyogRGVzY3JpcHRpb246IFBhY2tldCBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IFBhY2tldCBwb2ludGVyICovDQorI2RlZmluZSBSQURJT19QQUNLRVRQVFJfUEFDS0VUUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBBQ0tFVFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BBQ0tFVFBUUl9QQUNLRVRQVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgUkFESU9fUEFDS0VUUFRSX1BBQ0tFVFBUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUEFDS0VUUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19GUkVRVUVOQ1kgKi8NCisvKiBEZXNjcmlwdGlvbjogRnJlcXVlbmN5ICovDQorDQorLyogQml0IDggOiBDaGFubmVsIG1hcCBzZWxlY3Rpb24uICovDQorI2RlZmluZSBSQURJT19GUkVRVUVOQ1lfTUFQX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BUCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0ZSRVFVRU5DWV9NQVBfTXNrICgweDFVTCA8PCBSQURJT19GUkVRVUVOQ1lfTUFQX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVAgZmllbGQuICovDQorI2RlZmluZSBSQURJT19GUkVRVUVOQ1lfTUFQX0RlZmF1bHQgKDBVTCkgLyohPCBDaGFubmVsIG1hcCBiZXR3ZWVuIDI0MDAgTUhaIC4uIDI1MDAgTUh6ICovDQorI2RlZmluZSBSQURJT19GUkVRVUVOQ1lfTUFQX0xvdyAoMVVMKSAvKiE8IENoYW5uZWwgbWFwIGJldHdlZW4gMjM2MCBNSFogLi4gMjQ2MCBNSHogKi8NCisNCisvKiBCaXRzIDYuLjAgOiBSYWRpbyBjaGFubmVsIGZyZXF1ZW5jeSAqLw0KKyNkZWZpbmUgUkFESU9fRlJFUVVFTkNZX0ZSRVFVRU5DWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBGUkVRVUVOQ1kgZmllbGQuICovDQorI2RlZmluZSBSQURJT19GUkVRVUVOQ1lfRlJFUVVFTkNZX01zayAoMHg3RlVMIDw8IFJBRElPX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZSRVFVRU5DWSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fVFhQT1dFUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBPdXRwdXQgcG93ZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBSQURJTyBvdXRwdXQgcG93ZXIuICovDQorI2RlZmluZSBSQURJT19UWFBPV0VSX1RYUE9XRVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9Nc2sgKDB4RkZVTCA8PCBSQURJT19UWFBPV0VSX1RYUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBSQURJT19UWFBPV0VSX1RYUE9XRVJfMGRCbSAoMHgwVUwpIC8qITwgMCBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9Qb3MyZEJtICgweDJVTCkgLyohPCArMiBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9Qb3MzZEJtICgweDNVTCkgLyohPCArMyBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9Qb3M0ZEJtICgweDRVTCkgLyohPCArNCBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9Qb3M1ZEJtICgweDVVTCkgLyohPCArNSBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9Qb3M2ZEJtICgweDZVTCkgLyohPCArNiBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9Qb3M3ZEJtICgweDdVTCkgLyohPCArNyBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9Qb3M4ZEJtICgweDhVTCkgLyohPCArOCBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9Qb3M5ZEJtICgweDlVTCkgLyohPCArOSBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9OZWczMGRCbSAoMHhEOFVMKSAvKiE8IERlcHJlY2F0ZWQgZW51bWVyYXRvciAtICAtNDAgZEJtICovDQorI2RlZmluZSBSQURJT19UWFBPV0VSX1RYUE9XRVJfTmVnNDBkQm0gKDB4RDhVTCkgLyohPCAtNDAgZEJtICovDQorI2RlZmluZSBSQURJT19UWFBPV0VSX1RYUE9XRVJfTmVnMjBkQm0gKDB4RUNVTCkgLyohPCAtMjAgZEJtICovDQorI2RlZmluZSBSQURJT19UWFBPV0VSX1RYUE9XRVJfTmVnMTZkQm0gKDB4RjBVTCkgLyohPCAtMTYgZEJtICovDQorI2RlZmluZSBSQURJT19UWFBPV0VSX1RYUE9XRVJfTmVnMTJkQm0gKDB4RjRVTCkgLyohPCAtMTIgZEJtICovDQorI2RlZmluZSBSQURJT19UWFBPV0VSX1RYUE9XRVJfTmVnOGRCbSAoMHhGOFVMKSAvKiE8IC04IGRCbSAqLw0KKyNkZWZpbmUgUkFESU9fVFhQT1dFUl9UWFBPV0VSX05lZzRkQm0gKDB4RkNVTCkgLyohPCAtNCBkQm0gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fTU9ERSAqLw0KKy8qIERlc2NyaXB0aW9uOiBEYXRhIHJhdGUgYW5kIG1vZHVsYXRpb24gKi8NCisNCisvKiBCaXRzIDMuLjAgOiBSYWRpbyBkYXRhIHJhdGUgYW5kIG1vZHVsYXRpb24gc2V0dGluZy4gVGhlIHJhZGlvIHN1cHBvcnRzIEZyZXF1ZW5jeS1zaGlmdCBLZXlpbmcgKEZTSykgbW9kdWxhdGlvbi4gKi8NCisjZGVmaW5lIFJBRElPX01PREVfTU9ERV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERV9NT0RFX01zayAoMHhGVUwgPDwgUkFESU9fTU9ERV9NT0RFX1BvcykgLyohPCBCaXQgbWFzayBvZiBNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERV9NT0RFX05yZl8xTWJpdCAoMFVMKSAvKiE8IDEgTWJpdC9zIE5vcmRpYyBwcm9wcmlldGFyeSByYWRpbyBtb2RlICovDQorI2RlZmluZSBSQURJT19NT0RFX01PREVfTnJmXzJNYml0ICgxVUwpIC8qITwgMiBNYml0L3MgTm9yZGljIHByb3ByaWV0YXJ5IHJhZGlvIG1vZGUgKi8NCisjZGVmaW5lIFJBRElPX01PREVfTU9ERV9OcmZfMjUwS2JpdCAoMlVMKSAvKiE8IERlcHJlY2F0ZWQgZW51bWVyYXRvciAtICAyNTAga2JpdC9zIE5vcmRpYyBwcm9wcmlldGFyeSByYWRpbyBtb2RlICovDQorI2RlZmluZSBSQURJT19NT0RFX01PREVfQmxlXzFNYml0ICgzVUwpIC8qITwgMSBNYml0L3MgQmx1ZXRvb3RoIExvdyBFbmVyZ3kgKi8NCisjZGVmaW5lIFJBRElPX01PREVfTU9ERV9CbGVfMk1iaXQgKDRVTCkgLyohPCAyIE1iaXQvcyBCbHVldG9vdGggTG93IEVuZXJneSAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERV9NT0RFX0JsZV9MUjEyNUtiaXQgKDVVTCkgLyohPCBMb25nIHJhbmdlIDEyNSBrYml0L3MgKFRYIE9ubHkgLSBSWCBzdXBwb3J0cyBib3RoKSAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERV9NT0RFX0JsZV9MUjUwMEtiaXQgKDZVTCkgLyohPCBMb25nIHJhbmdlIDUwMCBrYml0L3MgKFRYIE9ubHkgLSBSWCBzdXBwb3J0cyBib3RoKSAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERV9NT0RFX0llZWU4MDIxNTRfMjUwS2JpdCAoMTVVTCkgLyohPCBJRUVFIDgwMi4xNS40LTIwMDYgMjUwIGtiaXQvcyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19QQ05GMCAqLw0KKy8qIERlc2NyaXB0aW9uOiBQYWNrZXQgY29uZmlndXJhdGlvbiByZWdpc3RlciAwICovDQorDQorLyogQml0cyAzMC4uMjkgOiBMZW5ndGggb2YgVEVSTSBmaWVsZCBpbiBMb25nIFJhbmdlIG9wZXJhdGlvbiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfVEVSTUxFTl9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgVEVSTUxFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX1RFUk1MRU5fTXNrICgweDNVTCA8PCBSQURJT19QQ05GMF9URVJNTEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBURVJNTEVOIGZpZWxkLiAqLw0KKw0KKy8qIEJpdCAyNiA6IEluZGljYXRlcyBpZiBMRU5HVEggZmllbGQgY29udGFpbnMgQ1JDIG9yIG5vdCAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfQ1JDSU5DX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBDUkNJTkMgZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMF9DUkNJTkNfTXNrICgweDFVTCA8PCBSQURJT19QQ05GMF9DUkNJTkNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENSQ0lOQyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX0NSQ0lOQ19FeGNsdWRlICgwVUwpIC8qITwgTEVOR1RIIGRvZXMgbm90IGNvbnRhaW4gQ1JDICovDQorI2RlZmluZSBSQURJT19QQ05GMF9DUkNJTkNfSW5jbHVkZSAoMVVMKSAvKiE8IExFTkdUSCBpbmNsdWRlcyBDUkMgKi8NCisNCisvKiBCaXRzIDI1Li4yNCA6IExlbmd0aCBvZiBwcmVhbWJsZSBvbiBhaXIuIERlY2lzaW9uIHBvaW50OiBUQVNLU19TVEFSVCB0YXNrICovDQorI2RlZmluZSBSQURJT19QQ05GMF9QTEVOX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQTEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfUExFTl9Nc2sgKDB4M1VMIDw8IFJBRElPX1BDTkYwX1BMRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBMRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMF9QTEVOXzhiaXQgKDBVTCkgLyohPCA4LWJpdCBwcmVhbWJsZSAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfUExFTl8xNmJpdCAoMVVMKSAvKiE8IDE2LWJpdCBwcmVhbWJsZSAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfUExFTl8zMmJpdFplcm8gKDJVTCkgLyohPCAzMi1iaXQgemVybyBwcmVhbWJsZSAtIHVzZWQgZm9yIElFRUUgODAyLjE1LjQgKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX1BMRU5fTG9uZ1JhbmdlICgzVUwpIC8qITwgUHJlYW1ibGUgLSB1c2VkIGZvciBCVExFIExvbmcgUmFuZ2UgKi8NCisNCisvKiBCaXRzIDIzLi4yMiA6IExlbmd0aCBvZiBDb2RlIEluZGljYXRvciAtIExvbmcgUmFuZ2UgKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX0NJTEVOX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSUxFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX0NJTEVOX01zayAoMHgzVUwgPDwgUkFESU9fUENORjBfQ0lMRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENJTEVOIGZpZWxkLiAqLw0KKw0KKy8qIEJpdCAyMCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBTMSBmaWVsZCBpbiBSQU0gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX1MxSU5DTF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgUzFJTkNMIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfUzFJTkNMX01zayAoMHgxVUwgPDwgUkFESU9fUENORjBfUzFJTkNMX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMUlOQ0wgZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMF9TMUlOQ0xfQXV0b21hdGljICgwVUwpIC8qITwgSW5jbHVkZSBTMSBmaWVsZCBpbiBSQU0gb25seSBpZiBTMUxFTiAmZ3Q7IDAgKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX1MxSU5DTF9JbmNsdWRlICgxVUwpIC8qITwgQWx3YXlzIGluY2x1ZGUgUzEgZmllbGQgaW4gUkFNIGluZGVwZW5kZW50IG9mIFMxTEVOICovDQorDQorLyogQml0cyAxOS4uMTYgOiBMZW5ndGggb24gYWlyIG9mIFMxIGZpZWxkIGluIG51bWJlciBvZiBiaXRzLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfUzFMRU5fUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxTEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfUzFMRU5fTXNrICgweEZVTCA8PCBSQURJT19QQ05GMF9TMUxFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzFMRU4gZmllbGQuICovDQorDQorLyogQml0IDggOiBMZW5ndGggb24gYWlyIG9mIFMwIGZpZWxkIGluIG51bWJlciBvZiBieXRlcy4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX1MwTEVOX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMwTEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfUzBMRU5fTXNrICgweDFVTCA8PCBSQURJT19QQ05GMF9TMExFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzBMRU4gZmllbGQuICovDQorDQorLyogQml0cyAzLi4wIDogTGVuZ3RoIG9uIGFpciBvZiBMRU5HVEggZmllbGQgaW4gbnVtYmVyIG9mIGJpdHMuICovDQorI2RlZmluZSBSQURJT19QQ05GMF9MRkxFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBMRkxFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX0xGTEVOX01zayAoMHhGVUwgPDwgUkFESU9fUENORjBfTEZMRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExGTEVOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19QQ05GMSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQYWNrZXQgY29uZmlndXJhdGlvbiByZWdpc3RlciAxICovDQorDQorLyogQml0IDI1IDogRW5hYmxlIG9yIGRpc2FibGUgcGFja2V0IHdoaXRlbmluZyAqLw0KKyNkZWZpbmUgUkFESU9fUENORjFfV0hJVEVFTl9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgV0hJVEVFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYxX1dISVRFRU5fTXNrICgweDFVTCA8PCBSQURJT19QQ05GMV9XSElURUVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBXSElURUVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjFfV0hJVEVFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFJBRElPX1BDTkYxX1dISVRFRU5fRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNCA6IE9uIGFpciBlbmRpYW5uZXNzIG9mIHBhY2tldCwgdGhpcyBhcHBsaWVzIHRvIHRoZSBTMCwgTEVOR1RILCBTMSBhbmQgdGhlIFBBWUxPQUQgZmllbGRzLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjFfRU5ESUFOX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRJQU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMV9FTkRJQU5fTXNrICgweDFVTCA8PCBSQURJT19QQ05GMV9FTkRJQU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORElBTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYxX0VORElBTl9MaXR0bGUgKDBVTCkgLyohPCBMZWFzdCBTaWduaWZpY2FudCBiaXQgb24gYWlyIGZpcnN0ICovDQorI2RlZmluZSBSQURJT19QQ05GMV9FTkRJQU5fQmlnICgxVUwpIC8qITwgTW9zdCBzaWduaWZpY2FudCBiaXQgb24gYWlyIGZpcnN0ICovDQorDQorLyogQml0cyAxOC4uMTYgOiBCYXNlIGFkZHJlc3MgbGVuZ3RoIGluIG51bWJlciBvZiBieXRlcyAqLw0KKyNkZWZpbmUgUkFESU9fUENORjFfQkFMRU5fUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEJBTEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjFfQkFMRU5fTXNrICgweDdVTCA8PCBSQURJT19QQ05GMV9CQUxFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQkFMRU4gZmllbGQuICovDQorDQorLyogQml0cyAxNS4uOCA6IFN0YXRpYyBsZW5ndGggaW4gbnVtYmVyIG9mIGJ5dGVzICovDQorI2RlZmluZSBSQURJT19QQ05GMV9TVEFUTEVOX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVRMRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMV9TVEFUTEVOX01zayAoMHhGRlVMIDw8IFJBRElPX1BDTkYxX1NUQVRMRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVRMRU4gZmllbGQuICovDQorDQorLyogQml0cyA3Li4wIDogTWF4aW11bSBsZW5ndGggb2YgcGFja2V0IHBheWxvYWQuIElmIHRoZSBwYWNrZXQgcGF5bG9hZCBpcyBsYXJnZXIgdGhhbiBNQVhMRU4sIHRoZSByYWRpbyB3aWxsIHRydW5jYXRlIHRoZSBwYXlsb2FkIHRvIE1BWExFTi4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYxX01BWExFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhMRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMV9NQVhMRU5fTXNrICgweEZGVUwgPDwgUkFESU9fUENORjFfTUFYTEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhMRU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX0JBU0UwICovDQorLyogRGVzY3JpcHRpb246IEJhc2UgYWRkcmVzcyAwICovDQorDQorLyogQml0cyAzMS4uMCA6IEJhc2UgYWRkcmVzcyAwICovDQorI2RlZmluZSBSQURJT19CQVNFMF9CQVNFMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCQVNFMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0JBU0UwX0JBU0UwX01zayAoMHhGRkZGRkZGRlVMIDw8IFJBRElPX0JBU0UwX0JBU0UwX1BvcykgLyohPCBCaXQgbWFzayBvZiBCQVNFMCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fQkFTRTEgKi8NCisvKiBEZXNjcmlwdGlvbjogQmFzZSBhZGRyZXNzIDEgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogQmFzZSBhZGRyZXNzIDEgKi8NCisjZGVmaW5lIFJBRElPX0JBU0UxX0JBU0UxX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJBU0UxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fQkFTRTFfQkFTRTFfTXNrICgweEZGRkZGRkZGVUwgPDwgUkFESU9fQkFTRTFfQkFTRTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJBU0UxIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19QUkVGSVgwICovDQorLyogRGVzY3JpcHRpb246IFByZWZpeGVzIGJ5dGVzIGZvciBsb2dpY2FsIGFkZHJlc3NlcyAwLTMgKi8NCisNCisvKiBCaXRzIDMxLi4yNCA6IEFkZHJlc3MgcHJlZml4IDMuICovDQorI2RlZmluZSBSQURJT19QUkVGSVgwX0FQM19Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgQVAzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMF9BUDNfTXNrICgweEZGVUwgPDwgUkFESU9fUFJFRklYMF9BUDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFQMyBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDIzLi4xNiA6IEFkZHJlc3MgcHJlZml4IDIuICovDQorI2RlZmluZSBSQURJT19QUkVGSVgwX0FQMl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQVAyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMF9BUDJfTXNrICgweEZGVUwgPDwgUkFESU9fUFJFRklYMF9BUDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFQMiBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogQWRkcmVzcyBwcmVmaXggMS4gKi8NCisjZGVmaW5lIFJBRElPX1BSRUZJWDBfQVAxX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFQMSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BSRUZJWDBfQVAxX01zayAoMHhGRlVMIDw8IFJBRElPX1BSRUZJWDBfQVAxX1BvcykgLyohPCBCaXQgbWFzayBvZiBBUDEgZmllbGQuICovDQorDQorLyogQml0cyA3Li4wIDogQWRkcmVzcyBwcmVmaXggMC4gKi8NCisjZGVmaW5lIFJBRElPX1BSRUZJWDBfQVAwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFQMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BSRUZJWDBfQVAwX01zayAoMHhGRlVMIDw8IFJBRElPX1BSRUZJWDBfQVAwX1BvcykgLyohPCBCaXQgbWFzayBvZiBBUDAgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX1BSRUZJWDEgKi8NCisvKiBEZXNjcmlwdGlvbjogUHJlZml4ZXMgYnl0ZXMgZm9yIGxvZ2ljYWwgYWRkcmVzc2VzIDQtNyAqLw0KKw0KKy8qIEJpdHMgMzEuLjI0IDogQWRkcmVzcyBwcmVmaXggNy4gKi8NCisjZGVmaW5lIFJBRElPX1BSRUZJWDFfQVA3X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBBUDcgZmllbGQuICovDQorI2RlZmluZSBSQURJT19QUkVGSVgxX0FQN19Nc2sgKDB4RkZVTCA8PCBSQURJT19QUkVGSVgxX0FQN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQVA3IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMjMuLjE2IDogQWRkcmVzcyBwcmVmaXggNi4gKi8NCisjZGVmaW5lIFJBRElPX1BSRUZJWDFfQVA2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBBUDYgZmllbGQuICovDQorI2RlZmluZSBSQURJT19QUkVGSVgxX0FQNl9Nc2sgKDB4RkZVTCA8PCBSQURJT19QUkVGSVgxX0FQNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQVA2IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTUuLjggOiBBZGRyZXNzIHByZWZpeCA1LiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMV9BUDVfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgQVA1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMV9BUDVfTXNrICgweEZGVUwgPDwgUkFESU9fUFJFRklYMV9BUDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFQNSBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBBZGRyZXNzIHByZWZpeCA0LiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMV9BUDRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQVA0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMV9BUDRfTXNrICgweEZGVUwgPDwgUkFESU9fUFJFRklYMV9BUDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFQNCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fVFhBRERSRVNTICovDQorLyogRGVzY3JpcHRpb246IFRyYW5zbWl0IGFkZHJlc3Mgc2VsZWN0ICovDQorDQorLyogQml0cyAyLi4wIDogVHJhbnNtaXQgYWRkcmVzcyBzZWxlY3QgKi8NCisjZGVmaW5lIFJBRElPX1RYQUREUkVTU19UWEFERFJFU1NfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhBRERSRVNTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fVFhBRERSRVNTX1RYQUREUkVTU19Nc2sgKDB4N1VMIDw8IFJBRElPX1RYQUREUkVTU19UWEFERFJFU1NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYQUREUkVTUyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fUlhBRERSRVNTRVMgKi8NCisvKiBEZXNjcmlwdGlvbjogUmVjZWl2ZSBhZGRyZXNzIHNlbGVjdCAqLw0KKw0KKy8qIEJpdCA3IDogRW5hYmxlIG9yIGRpc2FibGUgcmVjZXB0aW9uIG9uIGxvZ2ljYWwgYWRkcmVzcyA3LiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgQUREUjcgZmllbGQuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSN19Nc2sgKDB4MVVMIDw8IFJBRElPX1JYQUREUkVTU0VTX0FERFI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSNyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFI3X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjdfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIG9yIGRpc2FibGUgcmVjZXB0aW9uIG9uIGxvZ2ljYWwgYWRkcmVzcyA2LiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgQUREUjYgZmllbGQuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSNl9Nc2sgKDB4MVVMIDw8IFJBRElPX1JYQUREUkVTU0VTX0FERFI2X1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSNiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFI2X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjZfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIG9yIGRpc2FibGUgcmVjZXB0aW9uIG9uIGxvZ2ljYWwgYWRkcmVzcyA1LiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgQUREUjUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSNV9Nc2sgKDB4MVVMIDw8IFJBRElPX1JYQUREUkVTU0VTX0FERFI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSNSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFI1X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogRW5hYmxlIG9yIGRpc2FibGUgcmVjZXB0aW9uIG9uIGxvZ2ljYWwgYWRkcmVzcyA0LiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQUREUjQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSNF9Nc2sgKDB4MVVMIDw8IFJBRElPX1JYQUREUkVTU0VTX0FERFI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSNCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFI0X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogRW5hYmxlIG9yIGRpc2FibGUgcmVjZXB0aW9uIG9uIGxvZ2ljYWwgYWRkcmVzcyAzLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgQUREUjMgZmllbGQuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSM19Nc2sgKDB4MVVMIDw8IFJBRElPX1JYQUREUkVTU0VTX0FERFIzX1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSMyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFIzX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgcmVjZXB0aW9uIG9uIGxvZ2ljYWwgYWRkcmVzcyAyLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgQUREUjIgZmllbGQuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSMl9Nc2sgKDB4MVVMIDw8IFJBRElPX1JYQUREUkVTU0VTX0FERFIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSMiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFIyX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogRW5hYmxlIG9yIGRpc2FibGUgcmVjZXB0aW9uIG9uIGxvZ2ljYWwgYWRkcmVzcyAxLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgQUREUjEgZmllbGQuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSMV9Nc2sgKDB4MVVMIDw8IFJBRElPX1JYQUREUkVTU0VTX0FERFIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSMSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFIxX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgcmVjZXB0aW9uIG9uIGxvZ2ljYWwgYWRkcmVzcyAwLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQUREUjAgZmllbGQuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSMF9Nc2sgKDB4MVVMIDw8IFJBRElPX1JYQUREUkVTU0VTX0FERFIwX1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFIwX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19DUkNDTkYgKi8NCisvKiBEZXNjcmlwdGlvbjogQ1JDIGNvbmZpZ3VyYXRpb24gKi8NCisNCisvKiBCaXRzIDkuLjggOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgcGFja2V0IGFkZHJlc3MgZmllbGQgb3V0IG9mIENSQyBjYWxjdWxhdGlvbi4gKi8NCisjZGVmaW5lIFJBRElPX0NSQ0NORl9TS0lQQUREUl9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBTS0lQQUREUiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NSQ0NORl9TS0lQQUREUl9Nc2sgKDB4M1VMIDw8IFJBRElPX0NSQ0NORl9TS0lQQUREUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0tJUEFERFIgZmllbGQuICovDQorI2RlZmluZSBSQURJT19DUkNDTkZfU0tJUEFERFJfSW5jbHVkZSAoMFVMKSAvKiE8IENSQyBjYWxjdWxhdGlvbiBpbmNsdWRlcyBhZGRyZXNzIGZpZWxkICovDQorI2RlZmluZSBSQURJT19DUkNDTkZfU0tJUEFERFJfU2tpcCAoMVVMKSAvKiE8IENSQyBjYWxjdWxhdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGFkZHJlc3MgZmllbGQuIFRoZSBDUkMgY2FsY3VsYXRpb24gd2lsbCBzdGFydCBhdCB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgYWRkcmVzcy4gKi8NCisjZGVmaW5lIFJBRElPX0NSQ0NORl9TS0lQQUREUl9JZWVlODAyMTU0ICgyVUwpIC8qITwgQ1JDIGNhbGN1bGF0aW9uIGFzIHBlciA4MDIuMTUuNCBzdGFuZGFyZC4gU3RhcnRpbmcgYXQgZmlyc3QgYnl0ZSBhZnRlciBsZW5ndGggZmllbGQuICovDQorDQorLyogQml0cyAxLi4wIDogQ1JDIGxlbmd0aCBpbiBudW1iZXIgb2YgYnl0ZXMuICovDQorI2RlZmluZSBSQURJT19DUkNDTkZfTEVOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIExFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NSQ0NORl9MRU5fTXNrICgweDNVTCA8PCBSQURJT19DUkNDTkZfTEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBMRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19DUkNDTkZfTEVOX0Rpc2FibGVkICgwVUwpIC8qITwgQ1JDIGxlbmd0aCBpcyB6ZXJvIGFuZCBDUkMgY2FsY3VsYXRpb24gaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0NSQ0NORl9MRU5fT25lICgxVUwpIC8qITwgQ1JDIGxlbmd0aCBpcyBvbmUgYnl0ZSBhbmQgQ1JDIGNhbGN1bGF0aW9uIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0NSQ0NORl9MRU5fVHdvICgyVUwpIC8qITwgQ1JDIGxlbmd0aCBpcyB0d28gYnl0ZXMgYW5kIENSQyBjYWxjdWxhdGlvbiBpcyBlbmFibGVkICovDQorI2RlZmluZSBSQURJT19DUkNDTkZfTEVOX1RocmVlICgzVUwpIC8qITwgQ1JDIGxlbmd0aCBpcyB0aHJlZSBieXRlcyBhbmQgQ1JDIGNhbGN1bGF0aW9uIGlzIGVuYWJsZWQgKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fQ1JDUE9MWSAqLw0KKy8qIERlc2NyaXB0aW9uOiBDUkMgcG9seW5vbWlhbCAqLw0KKw0KKy8qIEJpdHMgMjMuLjAgOiBDUkMgcG9seW5vbWlhbCAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDUE9MWV9DUkNQT0xZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENSQ1BPTFkgZmllbGQuICovDQorI2RlZmluZSBSQURJT19DUkNQT0xZX0NSQ1BPTFlfTXNrICgweEZGRkZGRlVMIDw8IFJBRElPX0NSQ1BPTFlfQ1JDUE9MWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JDUE9MWSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fQ1JDSU5JVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBDUkMgaW5pdGlhbCB2YWx1ZSAqLw0KKw0KKy8qIEJpdHMgMjMuLjAgOiBDUkMgaW5pdGlhbCB2YWx1ZSAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDSU5JVF9DUkNJTklUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENSQ0lOSVQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19DUkNJTklUX0NSQ0lOSVRfTXNrICgweEZGRkZGRlVMIDw8IFJBRElPX0NSQ0lOSVRfQ1JDSU5JVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JDSU5JVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fVElGUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBJbnRlciBGcmFtZSBTcGFjaW5nIGluIHVzICovDQorDQorLyogQml0cyA5Li4wIDogSW50ZXIgRnJhbWUgU3BhY2luZyBpbiB1cyAqLw0KKyNkZWZpbmUgUkFESU9fVElGU19USUZTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRJRlMgZmllbGQuICovDQorI2RlZmluZSBSQURJT19USUZTX1RJRlNfTXNrICgweDNGRlVMIDw8IFJBRElPX1RJRlNfVElGU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVElGUyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fUlNTSVNBTVBMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBSU1NJIHNhbXBsZSAqLw0KKw0KKy8qIEJpdHMgNi4uMCA6IFJTU0kgc2FtcGxlICovDQorI2RlZmluZSBSQURJT19SU1NJU0FNUExFX1JTU0lTQU1QTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUlNTSVNBTVBMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JTU0lTQU1QTEVfUlNTSVNBTVBMRV9Nc2sgKDB4N0ZVTCA8PCBSQURJT19SU1NJU0FNUExFX1JTU0lTQU1QTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJTU0lTQU1QTEUgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX1NUQVRFICovDQorLyogRGVzY3JpcHRpb246IEN1cnJlbnQgcmFkaW8gc3RhdGUgKi8NCisNCisvKiBCaXRzIDMuLjAgOiBDdXJyZW50IHJhZGlvIHN0YXRlICovDQorI2RlZmluZSBSQURJT19TVEFURV9TVEFURV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFURSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NUQVRFX1NUQVRFX01zayAoMHhGVUwgPDwgUkFESU9fU1RBVEVfU1RBVEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU1RBVEVfU1RBVEVfRGlzYWJsZWQgKDBVTCkgLyohPCBSQURJTyBpcyBpbiB0aGUgRGlzYWJsZWQgc3RhdGUgKi8NCisjZGVmaW5lIFJBRElPX1NUQVRFX1NUQVRFX1J4UnUgKDFVTCkgLyohPCBSQURJTyBpcyBpbiB0aGUgUlhSVSBzdGF0ZSAqLw0KKyNkZWZpbmUgUkFESU9fU1RBVEVfU1RBVEVfUnhJZGxlICgyVUwpIC8qITwgUkFESU8gaXMgaW4gdGhlIFJYSURMRSBzdGF0ZSAqLw0KKyNkZWZpbmUgUkFESU9fU1RBVEVfU1RBVEVfUnggKDNVTCkgLyohPCBSQURJTyBpcyBpbiB0aGUgUlggc3RhdGUgKi8NCisjZGVmaW5lIFJBRElPX1NUQVRFX1NUQVRFX1J4RGlzYWJsZSAoNFVMKSAvKiE8IFJBRElPIGlzIGluIHRoZSBSWERJU0FCTEVEIHN0YXRlICovDQorI2RlZmluZSBSQURJT19TVEFURV9TVEFURV9UeFJ1ICg5VUwpIC8qITwgUkFESU8gaXMgaW4gdGhlIFRYUlUgc3RhdGUgKi8NCisjZGVmaW5lIFJBRElPX1NUQVRFX1NUQVRFX1R4SWRsZSAoMTBVTCkgLyohPCBSQURJTyBpcyBpbiB0aGUgVFhJRExFIHN0YXRlICovDQorI2RlZmluZSBSQURJT19TVEFURV9TVEFURV9UeCAoMTFVTCkgLyohPCBSQURJTyBpcyBpbiB0aGUgVFggc3RhdGUgKi8NCisjZGVmaW5lIFJBRElPX1NUQVRFX1NUQVRFX1R4RGlzYWJsZSAoMTJVTCkgLyohPCBSQURJTyBpcyBpbiB0aGUgVFhESVNBQkxFRCBzdGF0ZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19EQVRBV0hJVEVJViAqLw0KKy8qIERlc2NyaXB0aW9uOiBEYXRhIHdoaXRlbmluZyBpbml0aWFsIHZhbHVlICovDQorDQorLyogQml0cyA2Li4wIDogRGF0YSB3aGl0ZW5pbmcgaW5pdGlhbCB2YWx1ZS4gQml0IDYgaXMgaGFyZC13aXJlZCB0byAnMScsIHdyaXRpbmcgJzAnIHRvIGl0IGhhcyBubyBlZmZlY3QsIGFuZCBpdCB3aWxsIGFsd2F5cyBiZSByZWFkIGJhY2sgYW5kIHVzZWQgYnkgdGhlIGRldmljZSBhcyAnMScuICovDQorI2RlZmluZSBSQURJT19EQVRBV0hJVEVJVl9EQVRBV0hJVEVJVl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBEQVRBV0hJVEVJViBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBVEFXSElURUlWX0RBVEFXSElURUlWX01zayAoMHg3RlVMIDw8IFJBRElPX0RBVEFXSElURUlWX0RBVEFXSElURUlWX1BvcykgLyohPCBCaXQgbWFzayBvZiBEQVRBV0hJVEVJViBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fQkNDICovDQorLyogRGVzY3JpcHRpb246IEJpdCBjb3VudGVyIGNvbXBhcmUgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogQml0IGNvdW50ZXIgY29tcGFyZSAqLw0KKyNkZWZpbmUgUkFESU9fQkNDX0JDQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCQ0MgZmllbGQuICovDQorI2RlZmluZSBSQURJT19CQ0NfQkNDX01zayAoMHhGRkZGRkZGRlVMIDw8IFJBRElPX0JDQ19CQ0NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJDQyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fREFCICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBEZXZpY2UgYWRkcmVzcyBiYXNlIHNlZ21lbnQgMCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBEZXZpY2UgYWRkcmVzcyBiYXNlIHNlZ21lbnQgMCAqLw0KKyNkZWZpbmUgUkFESU9fREFCX0RBQl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBEQUIgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUJfREFCX01zayAoMHhGRkZGRkZGRlVMIDw8IFJBRElPX0RBQl9EQUJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERBQiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fREFQICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBEZXZpY2UgYWRkcmVzcyBwcmVmaXggMCAqLw0KKw0KKy8qIEJpdHMgMTUuLjAgOiBEZXZpY2UgYWRkcmVzcyBwcmVmaXggMCAqLw0KKyNkZWZpbmUgUkFESU9fREFQX0RBUF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBEQVAgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQVBfREFQX01zayAoMHhGRkZGVUwgPDwgUkFESU9fREFQX0RBUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgREFQIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19EQUNORiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXZpY2UgYWRkcmVzcyBtYXRjaCBjb25maWd1cmF0aW9uICovDQorDQorLyogQml0IDE1IDogVHhBZGQgZm9yIGRldmljZSBhZGRyZXNzIDcgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX1RYQUREN19Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgVFhBREQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQ3X01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfVFhBREQ3X1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEFERDcgZmllbGQuICovDQorDQorLyogQml0IDE0IDogVHhBZGQgZm9yIGRldmljZSBhZGRyZXNzIDYgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX1RYQURENl9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgVFhBREQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQ2X01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfVFhBREQ2X1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEFERDYgZmllbGQuICovDQorDQorLyogQml0IDEzIDogVHhBZGQgZm9yIGRldmljZSBhZGRyZXNzIDUgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX1RYQURENV9Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgVFhBREQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQ1X01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfVFhBREQ1X1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEFERDUgZmllbGQuICovDQorDQorLyogQml0IDEyIDogVHhBZGQgZm9yIGRldmljZSBhZGRyZXNzIDQgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX1RYQURENF9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgVFhBREQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQ0X01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfVFhBREQ0X1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEFERDQgZmllbGQuICovDQorDQorLyogQml0IDExIDogVHhBZGQgZm9yIGRldmljZSBhZGRyZXNzIDMgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX1RYQUREM19Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgVFhBREQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQzX01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfVFhBREQzX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEFERDMgZmllbGQuICovDQorDQorLyogQml0IDEwIDogVHhBZGQgZm9yIGRldmljZSBhZGRyZXNzIDIgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX1RYQUREMl9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhBREQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQyX01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfVFhBREQyX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEFERDIgZmllbGQuICovDQorDQorLyogQml0IDkgOiBUeEFkZCBmb3IgZGV2aWNlIGFkZHJlc3MgMSAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQxX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYQUREMSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX1RYQUREMV9Nc2sgKDB4MVVMIDw8IFJBRElPX0RBQ05GX1RYQUREMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhBREQxIGZpZWxkLiAqLw0KKw0KKy8qIEJpdCA4IDogVHhBZGQgZm9yIGRldmljZSBhZGRyZXNzIDAgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX1RYQUREMF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEFERDAgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9UWEFERDBfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9UWEFERDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYQUREMCBmaWVsZC4gKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZSBvciBkaXNhYmxlIGRldmljZSBhZGRyZXNzIG1hdGNoaW5nIHVzaW5nIGRldmljZSBhZGRyZXNzIDcgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgRU5BNyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTdfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9FTkE3X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BN19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkE3X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGVkICovDQorDQorLyogQml0IDYgOiBFbmFibGUgb3IgZGlzYWJsZSBkZXZpY2UgYWRkcmVzcyBtYXRjaGluZyB1c2luZyBkZXZpY2UgYWRkcmVzcyA2ICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkE2X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQTYgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkE2X01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfRU5BNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BNiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTZfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BNl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlZCAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIG9yIGRpc2FibGUgZGV2aWNlIGFkZHJlc3MgbWF0Y2hpbmcgdXNpbmcgZGV2aWNlIGFkZHJlc3MgNSAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BNV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BNV9Nc2sgKDB4MVVMIDw8IFJBRElPX0RBQ05GX0VOQTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQTUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkE1X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZWQgKi8NCisNCisvKiBCaXQgNCA6IEVuYWJsZSBvciBkaXNhYmxlIGRldmljZSBhZGRyZXNzIG1hdGNoaW5nIHVzaW5nIGRldmljZSBhZGRyZXNzIDQgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5BNCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTRfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9FTkE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BNF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkE0X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGVkICovDQorDQorLyogQml0IDMgOiBFbmFibGUgb3IgZGlzYWJsZSBkZXZpY2UgYWRkcmVzcyBtYXRjaGluZyB1c2luZyBkZXZpY2UgYWRkcmVzcyAzICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkEzX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQTMgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkEzX01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfRU5BM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BMyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTNfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BM19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlZCAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgZGV2aWNlIGFkZHJlc3MgbWF0Y2hpbmcgdXNpbmcgZGV2aWNlIGFkZHJlc3MgMiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BMl9Nc2sgKDB4MVVMIDw8IFJBRElPX0RBQ05GX0VOQTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQTIgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkEyX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZWQgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGRldmljZSBhZGRyZXNzIG1hdGNoaW5nIHVzaW5nIGRldmljZSBhZGRyZXNzIDEgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BMSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTFfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9FTkExX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkExIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BMV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkExX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGVkICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSBkZXZpY2UgYWRkcmVzcyBtYXRjaGluZyB1c2luZyBkZXZpY2UgYWRkcmVzcyAwICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkEwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQTAgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkEwX01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfRU5BMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19NT0RFQ05GMCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSYWRpbyBtb2RlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMCAqLw0KKw0KKy8qIEJpdHMgOS4uOCA6IERlZmF1bHQgVFggdmFsdWUgKi8NCisjZGVmaW5lIFJBRElPX01PREVDTkYwX0RUWF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBEVFggZmllbGQuICovDQorI2RlZmluZSBSQURJT19NT0RFQ05GMF9EVFhfTXNrICgweDNVTCA8PCBSQURJT19NT0RFQ05GMF9EVFhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX01PREVDTkYwX0RUWF9CMSAoMFVMKSAvKiE8IFRyYW5zbWl0ICcxJyAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERUNORjBfRFRYX0IwICgxVUwpIC8qITwgVHJhbnNtaXQgJzAnICovDQorI2RlZmluZSBSQURJT19NT0RFQ05GMF9EVFhfQ2VudGVyICgyVUwpIC8qITwgVHJhbnNtaXQgY2VudGVyIGZyZXF1ZW5jeSAqLw0KKw0KKy8qIEJpdCAwIDogUmFkaW8gcmFtcC11cCB0aW1lICovDQorI2RlZmluZSBSQURJT19NT0RFQ05GMF9SVV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSVSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX01PREVDTkYwX1JVX01zayAoMHgxVUwgPDwgUkFESU9fTU9ERUNORjBfUlVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJVIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERUNORjBfUlVfRGVmYXVsdCAoMFVMKSAvKiE8IERlZmF1bHQgcmFtcC11cCB0aW1lICh0UlhFTiksIGNvbXBhdGlibGUgd2l0aCBmaXJtd2FyZSB3cml0dGVuIGZvciBuUkY1MSAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERUNORjBfUlVfRmFzdCAoMVVMKSAvKiE8IEZhc3QgcmFtcC11cCAodFJYRU4sRkFTVCksIHNlZSBlbGVjdHJpY2FsIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fU0ZEICovDQorLyogRGVzY3JpcHRpb246IElFRUUgODAyLjE1LjQgU3RhcnQgb2YgRnJhbWUgRGVsaW1pdGVyICovDQorDQorLyogQml0cyA3Li4wIDogSUVFRSA4MDIuMTUuNCBTdGFydCBvZiBGcmFtZSBEZWxpbWl0ZXIgKi8NCisjZGVmaW5lIFJBRElPX1NGRF9TRkRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU0ZEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0ZEX1NGRF9Nc2sgKDB4RkZVTCA8PCBSQURJT19TRkRfU0ZEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRkQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX0VEQ05UICovDQorLyogRGVzY3JpcHRpb246IElFRUUgODAyLjE1LjQgRW5lcmd5IERldGVjdCBMb29wIENvdW50ICovDQorDQorLyogQml0cyAyMC4uMCA6IElFRUUgODAyLjE1LjQgRW5lcmd5IERldGVjdCBMb29wIENvdW50ICovDQorI2RlZmluZSBSQURJT19FRENOVF9FRENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFRENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0VEQ05UX0VEQ05UX01zayAoMHgxRkZGRkZVTCA8PCBSQURJT19FRENOVF9FRENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRURDTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX0VEU0FNUExFICovDQorLyogRGVzY3JpcHRpb246IElFRUUgODAyLjE1LjQgRW5lcmd5IERldGVjdCBMZXZlbCAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IElFRUUgODAyLjE1LjQgRW5lcmd5IERldGVjdCBMZXZlbCAqLw0KKyNkZWZpbmUgUkFESU9fRURTQU1QTEVfRURMVkxfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRURMVkwgZmllbGQuICovDQorI2RlZmluZSBSQURJT19FRFNBTVBMRV9FRExWTF9Nc2sgKDB4RkZVTCA8PCBSQURJT19FRFNBTVBMRV9FRExWTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRURMVkwgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX0NDQUNUUkwgKi8NCisvKiBEZXNjcmlwdGlvbjogSUVFRSA4MDIuMTUuNCBDbGVhciBDaGFubmVsIEFzc2Vzc21lbnQgQ29udHJvbCAqLw0KKw0KKy8qIEJpdHMgMzEuLjI0IDogTGltaXQgZm9yIG9jY3VyYW5jZXMgYWJvdmUgQ0NBQ09SUlRIUkVTLiBXaGVuIG5vdCBlcXVhbCB0byB6ZXJvIHRoZSBjb3Jyb2xhdG9yIGJhc2VkIHNpZ25hbCBkZXRlY3QgaXMgZW5hYmxlZC4gKi8NCisjZGVmaW5lIFJBRElPX0NDQUNUUkxfQ0NBQ09SUkNOVF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0NBQ09SUkNOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NDQUNUUkxfQ0NBQ09SUkNOVF9Nc2sgKDB4RkZVTCA8PCBSQURJT19DQ0FDVFJMX0NDQUNPUlJDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENDQUNPUlJDTlQgZmllbGQuICovDQorDQorLyogQml0cyAyMy4uMTYgOiBDQ0EgQ29ycmVsYXRvciBCdXN5IFRocmVzaG9sZC4gT25seSByZWxldmFudCB0byBDYXJyaWVyTW9kZSwgQ2FycmllckFuZEVkTW9kZSBhbmQgQ2Fycmllck9yRWRNb2RlLiAqLw0KKyNkZWZpbmUgUkFESU9fQ0NBQ1RSTF9DQ0FDT1JSVEhSRVNfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENDQUNPUlJUSFJFUyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NDQUNUUkxfQ0NBQ09SUlRIUkVTX01zayAoMHhGRlVMIDw8IFJBRElPX0NDQUNUUkxfQ0NBQ09SUlRIUkVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQ0FDT1JSVEhSRVMgZmllbGQuICovDQorDQorLyogQml0cyAxNS4uOCA6IENDQSBFbmVyZ3kgQnVzeSBUaHJlc2hvbGQuIFVzZWQgaW4gYWxsIHRoZSBDQ0EgbW9kZXMgZXhjZXB0IENhcnJpZXJNb2RlLiAqLw0KKyNkZWZpbmUgUkFESU9fQ0NBQ1RSTF9DQ0FFRFRIUkVTX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENDQUVEVEhSRVMgZmllbGQuICovDQorI2RlZmluZSBSQURJT19DQ0FDVFJMX0NDQUVEVEhSRVNfTXNrICgweEZGVUwgPDwgUkFESU9fQ0NBQ1RSTF9DQ0FFRFRIUkVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQ0FFRFRIUkVTIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMi4uMCA6IENDQSBNb2RlIE9mIE9wZXJhdGlvbiAqLw0KKyNkZWZpbmUgUkFESU9fQ0NBQ1RSTF9DQ0FNT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENDQU1PREUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19DQ0FDVFJMX0NDQU1PREVfTXNrICgweDdVTCA8PCBSQURJT19DQ0FDVFJMX0NDQU1PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENDQU1PREUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19DQ0FDVFJMX0NDQU1PREVfRWRNb2RlICgwVUwpIC8qITwgRW5lcmd5IEFib3ZlIFRocmVzaG9sZCAqLw0KKyNkZWZpbmUgUkFESU9fQ0NBQ1RSTF9DQ0FNT0RFX0NhcnJpZXJNb2RlICgxVUwpIC8qITwgQ2FycmllciBTZWVuICovDQorI2RlZmluZSBSQURJT19DQ0FDVFJMX0NDQU1PREVfQ2FycmllckFuZEVkTW9kZSAoMlVMKSAvKiE8IEVuZXJneSBBYm92ZSBUaHJlc2hvbGQgQU5EIENhcnJpZXIgU2VlbiAqLw0KKyNkZWZpbmUgUkFESU9fQ0NBQ1RSTF9DQ0FNT0RFX0NhcnJpZXJPckVkTW9kZSAoM1VMKSAvKiE8IEVuZXJneSBBYm92ZSBUaHJlc2hvbGQgT1IgQ2FycmllciBTZWVuICovDQorI2RlZmluZSBSQURJT19DQ0FDVFJMX0NDQU1PREVfRWRNb2RlVGVzdDEgKDRVTCkgLyohPCBFbmVyZ3kgQWJvdmUgVGhyZXNob2xkIHRlc3QgbW9kZSB0aGF0IHdpbGwgYWJvcnQgd2hlbiBmaXJzdCBFRCBtZWFzdXJlbWVudCBvdmVyIHRocmVzaG9sZCBpcyBzZWVuLiBObyBhdmVyYWdpbmcuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX1BPV0VSICovDQorLyogRGVzY3JpcHRpb246IFBlcmlwaGVyYWwgcG93ZXIgY29udHJvbCAqLw0KKw0KKy8qIEJpdCAwIDogUGVyaXBoZXJhbCBwb3dlciBjb250cm9sLiBUaGUgcGVyaXBoZXJhbCBhbmQgaXRzIHJlZ2lzdGVycyB3aWxsIGJlIHJlc2V0IHRvIGl0cyBpbml0aWFsIHN0YXRlIGJ5IHN3aXRjaGluZyB0aGUgcGVyaXBoZXJhbCBvZmYgYW5kIHRoZW4gYmFjayBvbiBhZ2Fpbi4gKi8NCisjZGVmaW5lIFJBRElPX1BPV0VSX1BPV0VSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUE9XRVJfUE9XRVJfTXNrICgweDFVTCA8PCBSQURJT19QT1dFUl9QT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBSQURJT19QT1dFUl9QT1dFUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFBlcmlwaGVyYWwgaXMgcG93ZXJlZCBvZmYgKi8NCisjZGVmaW5lIFJBRElPX1BPV0VSX1BPV0VSX0VuYWJsZWQgKDFVTCkgLyohPCBQZXJpcGhlcmFsIGlzIHBvd2VyZWQgb24gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBSTkcgKi8NCisvKiBEZXNjcmlwdGlvbjogUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgKi8NCisNCisvKiBSZWdpc3RlcjogUk5HX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAwIDogU2hvcnRjdXQgYmV0d2VlbiBWQUxSRFkgZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgUk5HX1NIT1JUU19WQUxSRFlfU1RPUF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBWQUxSRFlfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFJOR19TSE9SVFNfVkFMUkRZX1NUT1BfTXNrICgweDFVTCA8PCBSTkdfU0hPUlRTX1ZBTFJEWV9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBWQUxSRFlfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFJOR19TSE9SVFNfVkFMUkRZX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSTkdfU0hPUlRTX1ZBTFJEWV9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBSZWdpc3RlcjogUk5HX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBWQUxSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFJOR19JTlRFTlNFVF9WQUxSRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVkFMUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUk5HX0lOVEVOU0VUX1ZBTFJEWV9Nc2sgKDB4MVVMIDw8IFJOR19JTlRFTlNFVF9WQUxSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFZBTFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJOR19JTlRFTlNFVF9WQUxSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUk5HX0lOVEVOU0VUX1ZBTFJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUk5HX0lOVEVOU0VUX1ZBTFJEWV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUk5HX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFZBTFJEWSBldmVudCAqLw0KKyNkZWZpbmUgUk5HX0lOVEVOQ0xSX1ZBTFJEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBWQUxSRFkgZmllbGQuICovDQorI2RlZmluZSBSTkdfSU5URU5DTFJfVkFMUkRZX01zayAoMHgxVUwgPDwgUk5HX0lOVEVOQ0xSX1ZBTFJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVkFMUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUk5HX0lOVEVOQ0xSX1ZBTFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSTkdfSU5URU5DTFJfVkFMUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSTkdfSU5URU5DTFJfVkFMUkRZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSTkdfQ09ORklHICovDQorLyogRGVzY3JpcHRpb246IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMCA6IEJpYXMgY29ycmVjdGlvbiAqLw0KKyNkZWZpbmUgUk5HX0NPTkZJR19ERVJDRU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgREVSQ0VOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUk5HX0NPTkZJR19ERVJDRU5fTXNrICgweDFVTCA8PCBSTkdfQ09ORklHX0RFUkNFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgREVSQ0VOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUk5HX0NPTkZJR19ERVJDRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUk5HX0NPTkZJR19ERVJDRU5fRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZWQgKi8NCisNCisvKiBSZWdpc3RlcjogUk5HX1ZBTFVFICovDQorLyogRGVzY3JpcHRpb246IE91dHB1dCByYW5kb20gbnVtYmVyICovDQorDQorLyogQml0cyA3Li4wIDogR2VuZXJhdGVkIHJhbmRvbSBudW1iZXIgKi8NCisjZGVmaW5lIFJOR19WQUxVRV9WQUxVRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBWQUxVRSBmaWVsZC4gKi8NCisjZGVmaW5lIFJOR19WQUxVRV9WQUxVRV9Nc2sgKDB4RkZVTCA8PCBSTkdfVkFMVUVfVkFMVUVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFZBTFVFIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFJUQyAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWFsIHRpbWUgY291bnRlciAwICovDQorDQorLyogUmVnaXN0ZXI6IFJUQ19JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDE5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbM10gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFM19Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTNfTXNrICgweDFVTCA8PCBSVENfSU5URU5TRVRfQ09NUEFSRTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUzX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzJdIGV2ZW50ICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTJfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUyX01zayAoMHgxVUwgPDwgUlRDX0lOVEVOU0VUX0NPTVBBUkUyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMiBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFMl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVsxXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUxX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMSBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFMV9Nc2sgKDB4MVVMIDw8IFJUQ19JTlRFTlNFVF9DT01QQVJFMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTEgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUxX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE2IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbMF0gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFMF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTBfTXNrICgweDFVTCA8PCBSVENfSU5URU5TRVRfQ09NUEFSRTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUwX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIE9WUkZMVyBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX09WUkZMV19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBPVlJGTFcgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfT1ZSRkxXX01zayAoMHgxVUwgPDwgUlRDX0lOVEVOU0VUX09WUkZMV19Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1ZSRkxXIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX09WUkZMV19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfT1ZSRkxXX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfT1ZSRkxXX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRJQ0sgZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9USUNLX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRJQ0sgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfVElDS19Nc2sgKDB4MVVMIDw8IFJUQ19JTlRFTlNFVF9USUNLX1BvcykgLyohPCBCaXQgbWFzayBvZiBUSUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX1RJQ0tfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX1RJQ0tfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9USUNLX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSVENfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbM10gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFM19Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTNfTXNrICgweDFVTCA8PCBSVENfSU5URU5DTFJfQ09NUEFSRTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUzX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVsyXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUyX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMiBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFMl9Nc2sgKDB4MVVMIDw8IFJUQ19JTlRFTkNMUl9DT01QQVJFMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTIgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUyX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTJfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzFdIGV2ZW50ICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTFfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUxX01zayAoMHgxVUwgPDwgUlRDX0lOVEVOQ0xSX0NPTVBBUkUxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMSBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFMV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbMF0gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFMF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTBfTXNrICgweDFVTCA8PCBSVENfSU5URU5DTFJfQ09NUEFSRTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUwX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBPVlJGTFcgZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9PVlJGTFdfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgT1ZSRkxXIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX09WUkZMV19Nc2sgKDB4MVVMIDw8IFJUQ19JTlRFTkNMUl9PVlJGTFdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9WUkZMVyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9PVlJGTFdfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX09WUkZMV19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX09WUkZMV19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVElDSyBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX1RJQ0tfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVElDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9USUNLX01zayAoMHgxVUwgPDwgUlRDX0lOVEVOQ0xSX1RJQ0tfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRJQ0sgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfVElDS19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfVElDS19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX1RJQ0tfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFJUQ19FVlRFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgb3IgZGlzYWJsZSBldmVudCByb3V0aW5nICovDQorDQorLyogQml0IDE5IDogRW5hYmxlIG9yIGRpc2FibGUgZXZlbnQgcm91dGluZyBmb3IgQ09NUEFSRVszXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX0NPTVBBUkUzX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9DT01QQVJFM19Nc2sgKDB4MVVMIDw8IFJUQ19FVlRFTl9DT01QQVJFM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5fQ09NUEFSRTNfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSVENfRVZURU5fQ09NUEFSRTNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IEVuYWJsZSBvciBkaXNhYmxlIGV2ZW50IHJvdXRpbmcgZm9yIENPTVBBUkVbMl0gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9DT01QQVJFMl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTIgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5fQ09NUEFSRTJfTXNrICgweDFVTCA8PCBSVENfRVZURU5fQ09NUEFSRTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX0NPTVBBUkUyX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX0NPTVBBUkUyX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTcgOiBFbmFibGUgb3IgZGlzYWJsZSBldmVudCByb3V0aW5nIGZvciBDT01QQVJFWzFdIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5fQ09NUEFSRTFfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX0NPTVBBUkUxX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOX0NPTVBBUkUxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMSBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9DT01QQVJFMV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9DT01QQVJFMV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE2IDogRW5hYmxlIG9yIGRpc2FibGUgZXZlbnQgcm91dGluZyBmb3IgQ09NUEFSRVswXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX0NPTVBBUkUwX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9DT01QQVJFMF9Nc2sgKDB4MVVMIDw8IFJUQ19FVlRFTl9DT01QQVJFMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5fQ09NUEFSRTBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSVENfRVZURU5fQ09NUEFSRTBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogRW5hYmxlIG9yIGRpc2FibGUgZXZlbnQgcm91dGluZyBmb3IgT1ZSRkxXIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5fT1ZSRkxXX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIE9WUkZMVyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9PVlJGTFdfTXNrICgweDFVTCA8PCBSVENfRVZURU5fT1ZSRkxXX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVlJGTFcgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5fT1ZSRkxXX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX09WUkZMV19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSBldmVudCByb3V0aW5nIGZvciBUSUNLIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5fVElDS19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUSUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX1RJQ0tfTXNrICgweDFVTCA8PCBSVENfRVZURU5fVElDS19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVElDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9USUNLX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX1RJQ0tfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSVENfRVZURU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGV2ZW50IHJvdXRpbmcgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGV2ZW50IHJvdXRpbmcgZm9yIENPTVBBUkVbM10gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFM19Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTNfTXNrICgweDFVTCA8PCBSVENfRVZURU5TRVRfQ09NUEFSRTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUzX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBFbmFibGUgZXZlbnQgcm91dGluZyBmb3IgQ09NUEFSRVsyXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUyX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMiBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFMl9Nc2sgKDB4MVVMIDw8IFJUQ19FVlRFTlNFVF9DT01QQVJFMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTIgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUyX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTJfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBldmVudCByb3V0aW5nIGZvciBDT01QQVJFWzFdIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTFfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUxX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOU0VUX0NPTVBBUkUxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMSBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFMV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGV2ZW50IHJvdXRpbmcgZm9yIENPTVBBUkVbMF0gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFMF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTBfTXNrICgweDFVTCA8PCBSVENfRVZURU5TRVRfQ09NUEFSRTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUwX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBldmVudCByb3V0aW5nIGZvciBPVlJGTFcgZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9PVlJGTFdfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgT1ZSRkxXIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX09WUkZMV19Nc2sgKDB4MVVMIDw8IFJUQ19FVlRFTlNFVF9PVlJGTFdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9WUkZMVyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9PVlJGTFdfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX09WUkZMV19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX09WUkZMV19TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgZXZlbnQgcm91dGluZyBmb3IgVElDSyBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX1RJQ0tfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVElDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9USUNLX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOU0VUX1RJQ0tfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRJQ0sgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfVElDS19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfVElDS19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX1RJQ0tfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFJUQ19FVlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGV2ZW50IHJvdXRpbmcgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBldmVudCByb3V0aW5nIGZvciBDT01QQVJFWzNdIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTNfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUzX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOQ0xSX0NPTVBBUkUzX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFM19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTggOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBldmVudCByb3V0aW5nIGZvciBDT01QQVJFWzJdIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTJfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUyX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOQ0xSX0NPTVBBUkUyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMiBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBldmVudCByb3V0aW5nIGZvciBDT01QQVJFWzFdIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTFfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUxX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOQ0xSX0NPTVBBUkUxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMSBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBldmVudCByb3V0aW5nIGZvciBDT01QQVJFWzBdIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTBfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUwX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOQ0xSX0NPTVBBUkUwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGV2ZW50IHJvdXRpbmcgZm9yIE9WUkZMVyBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX09WUkZMV19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBPVlJGTFcgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfT1ZSRkxXX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOQ0xSX09WUkZMV19Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1ZSRkxXIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX09WUkZMV19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfT1ZSRkxXX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfT1ZSRkxXX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgZXZlbnQgcm91dGluZyBmb3IgVElDSyBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX1RJQ0tfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVElDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9USUNLX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOQ0xSX1RJQ0tfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRJQ0sgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfVElDS19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfVElDS19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX1RJQ0tfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFJUQ19DT1VOVEVSICovDQorLyogRGVzY3JpcHRpb246IEN1cnJlbnQgQ09VTlRFUiB2YWx1ZSAqLw0KKw0KKy8qIEJpdHMgMjMuLjAgOiBDb3VudGVyIHZhbHVlICovDQorI2RlZmluZSBSVENfQ09VTlRFUl9DT1VOVEVSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPVU5URVIgZmllbGQuICovDQorI2RlZmluZSBSVENfQ09VTlRFUl9DT1VOVEVSX01zayAoMHhGRkZGRkZVTCA8PCBSVENfQ09VTlRFUl9DT1VOVEVSX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT1VOVEVSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSVENfUFJFU0NBTEVSICovDQorLyogRGVzY3JpcHRpb246IDEyIGJpdCBwcmVzY2FsZXIgZm9yIENPVU5URVIgZnJlcXVlbmN5ICgzMjc2OC8oUFJFU0NBTEVSKzEpKS5NdXN0IGJlIHdyaXR0ZW4gd2hlbiBSVEMgaXMgc3RvcHBlZCAqLw0KKw0KKy8qIEJpdHMgMTEuLjAgOiBQcmVzY2FsZXIgdmFsdWUgKi8NCisjZGVmaW5lIFJUQ19QUkVTQ0FMRVJfUFJFU0NBTEVSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRVNDQUxFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19QUkVTQ0FMRVJfUFJFU0NBTEVSX01zayAoMHhGRkZVTCA8PCBSVENfUFJFU0NBTEVSX1BSRVNDQUxFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFU0NBTEVSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSVENfQ0MgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIENvbXBhcmUgcmVnaXN0ZXIgMCAqLw0KKw0KKy8qIEJpdHMgMjMuLjAgOiBDb21wYXJlIHZhbHVlICovDQorI2RlZmluZSBSVENfQ0NfQ09NUEFSRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0NDX0NPTVBBUkVfTXNrICgweEZGRkZGRlVMIDw8IFJUQ19DQ19DT01QQVJFX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFNBQURDICovDQorLyogRGVzY3JpcHRpb246IEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRlciAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19JTlRFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzddLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g3TElNSVRMX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDdMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDdMSU1JVExfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9DSDdMSU1JVExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIN0xJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIN0xJTUlUTF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIN0xJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDSFs3XS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIN0xJTUlUSF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0g3TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g3TElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0g3TElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDdMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDdMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDdMSU1JVEhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbNl0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDZMSU1JVExfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENINkxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINkxJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX0NINkxJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g2TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g2TElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g2TElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTggOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzZdLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g2TElNSVRIX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDZMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDZMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9DSDZMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINkxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINkxJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINkxJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE3IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDSFs1XS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINUxJTUlUTF9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g1TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g1TElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0g1TElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDVMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDVMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDVMSU1JVExfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbNV0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDVMSU1JVEhfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENINUxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINUxJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX0NINUxJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g1TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g1TElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g1TElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTUgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzRdLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g0TElNSVRMX1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDRMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDRMSU1JVExfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9DSDRMSU1JVExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINExJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINExJTUlUTF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINExJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE0IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDSFs0XS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINExJTUlUSF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g0TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g0TElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0g0TElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDRMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDRMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDRMSU1JVEhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbM10uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDNMSU1JVExfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIM0xJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIM0xJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX0NIM0xJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gzTElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gzTElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzNdLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gzTElNSVRIX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDNMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDNMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9DSDNMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIM0xJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIM0xJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIM0xJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDExIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDSFsyXS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMkxJTUlUTF9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gyTElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0gyTElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDJMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDJMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDJMSU1JVExfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbMl0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDJMSU1JVEhfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMkxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMkxJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX0NIMkxJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gyTElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gyTElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgOSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbMV0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDFMSU1JVExfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gxTElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0gxTElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDFMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDFMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDFMSU1JVExfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDSFsxXS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMUxJTUlUSF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDFMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDFMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9DSDFMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMUxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMUxJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMUxJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzBdLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gwTElNSVRMX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMExJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMExJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX0NIMExJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gwTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gwTElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gwTElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbMF0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDBMSU1JVEhfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gwTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gwTElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0gwTElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDBMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDBMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDBMSU1JVEhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9TVE9QUEVEX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9TVE9QUEVEX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0FMSUJSQVRFRE9ORSBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0FMSUJSQVRFRE9ORV9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDQUxJQlJBVEVET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0FMSUJSQVRFRE9ORV9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX0NBTElCUkFURURPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENBTElCUkFURURPTkUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DQUxJQlJBVEVET05FX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0FMSUJSQVRFRE9ORV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFU1VMVERPTkUgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX1JFU1VMVERPTkVfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUkVTVUxURE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX1JFU1VMVERPTkVfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9SRVNVTFRET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNVTFRET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fUkVTVUxURE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX1JFU1VMVERPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBET05FIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9ET05FX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIERPTkUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9ET05FX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fRE9ORV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0RPTkVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9ET05FX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRU5EIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9FTkRfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fRU5EX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9FTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9FTkRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9TVEFSVEVEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9TVEFSVEVEX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogU0FBRENfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDSFs3XS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIN0xJTUlUTF9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgQ0g3TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g3TElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0g3TElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDdMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDdMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g3TElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDdMSU1JVExfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzddLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g3TElNSVRIX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDdMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDdMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9DSDdMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIN0xJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIN0xJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDdMSU1JVEhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIN0xJTUlUSF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbNl0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDZMSU1JVExfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENINkxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINkxJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NINkxJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g2TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g2TElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINkxJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g2TElNSVRMX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDSFs2XS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINkxJTUlUSF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g2TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g2TElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0g2TElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDZMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDZMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g2TElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDZMSU1JVEhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzVdLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g1TElNSVRMX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDVMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDVMSU1JVExfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9DSDVMSU1JVExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINUxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINUxJTUlUTF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDVMSU1JVExfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINUxJTUlUTF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbNV0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDVMSU1JVEhfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENINUxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINUxJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NINUxJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g1TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g1TElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINUxJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g1TElNSVRIX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDSFs0XS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINExJTUlUTF9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g0TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g0TElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0g0TElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDRMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDRMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g0TElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDRMSU1JVExfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzRdLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g0TElNSVRIX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDRMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDRMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9DSDRMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINExJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINExJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDRMSU1JVEhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINExJTUlUSF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbM10uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDNMSU1JVExfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIM0xJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIM0xJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NIM0xJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gzTElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIM0xJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gzTElNSVRMX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDSFszXS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIM0xJTUlUSF9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gzTElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0gzTElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDNMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDNMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gzTElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDNMSU1JVEhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDExIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzJdLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gyTElNSVRMX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDJMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDJMSU1JVExfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9DSDJMSU1JVExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMkxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMkxJTUlUTF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDJMSU1JVExfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMkxJTUlUTF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbMl0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDJMSU1JVEhfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMkxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMkxJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NIMkxJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gyTElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMkxJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gyTElNSVRIX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzFdLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRMX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMUxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMUxJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NIMUxJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMUxJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRMX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzFdLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRIX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMUxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMUxJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NIMUxJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMUxJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRIX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzBdLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRMX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMExJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMExJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NIMExJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gwTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMExJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRMX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzBdLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRIX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMExJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMExJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NIMExJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gwTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMExJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRIX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1NUT1BQRURfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1NUT1BQRURfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9TVE9QUEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENBTElCUkFURURPTkUgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NBTElCUkFURURPTkVfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0FMSUJSQVRFRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NBTElCUkFURURPTkVfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9DQUxJQlJBVEVET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQUxJQlJBVEVET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0FMSUJSQVRFRE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DQUxJQlJBVEVET05FX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DQUxJQlJBVEVET05FX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJFU1VMVERPTkUgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1JFU1VMVERPTkVfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUkVTVUxURE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1JFU1VMVERPTkVfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9SRVNVTFRET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNVTFRET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfUkVTVUxURE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9SRVNVTFRET05FX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9SRVNVTFRET05FX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIERPTkUgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0RPTkVfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0RPTkVfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9ET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfRE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9ET05FX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9ET05FX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfRU5EX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0VORF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0VORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfRU5EX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1NUQVJURURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1NUQVJURURfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9TVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9TVEFSVEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbN10uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDdMSU1JVExfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIN0xJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIN0xJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NIN0xJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g3TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g3TElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIN0xJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g3TElNSVRMX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbN10uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDdMSU1JVEhfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIN0xJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIN0xJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NIN0xJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g3TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g3TElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIN0xJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g3TElNSVRIX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbNl0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDZMSU1JVExfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENINkxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINkxJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NINkxJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g2TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g2TElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINkxJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g2TElNSVRMX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbNl0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDZMSU1JVEhfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENINkxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINkxJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NINkxJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g2TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g2TElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINkxJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g2TElNSVRIX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbNV0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDVMSU1JVExfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENINUxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINUxJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NINUxJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g1TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g1TElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINUxJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g1TElNSVRMX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbNV0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDVMSU1JVEhfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENINUxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINUxJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NINUxJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g1TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g1TElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINUxJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g1TElNSVRIX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbNF0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDRMSU1JVExfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIENINExJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINExJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NINExJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g0TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g0TElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINExJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g0TElNSVRMX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbNF0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDRMSU1JVEhfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENINExJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINExJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NINExJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g0TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g0TElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINExJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g0TElNSVRIX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbM10uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDNMSU1JVExfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIM0xJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIM0xJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NIM0xJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gzTElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIM0xJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gzTElNSVRMX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbM10uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDNMSU1JVEhfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIM0xJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIM0xJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NIM0xJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gzTElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIM0xJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gzTElNSVRIX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbMl0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDJMSU1JVExfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMkxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMkxJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NIMkxJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gyTElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMkxJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gyTElNSVRMX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbMl0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDJMSU1JVEhfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMkxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMkxJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NIMkxJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gyTElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMkxJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gyTElNSVRIX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFsxXS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMUxJTUlUTF9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDFMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDFMSU1JVExfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTkNMUl9DSDFMSU1JVExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMUxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMUxJTUlUTF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDFMSU1JVExfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMUxJTUlUTF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbMV0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDFMSU1JVEhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gxTElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0gxTElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDFMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDFMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gxTElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDFMSU1JVEhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzBdLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gwTElNSVRMX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMExJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMExJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NIMExJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gwTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gwTElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMExJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gwTElNSVRMX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFswXS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMExJTUlUSF9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDBMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDBMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTkNMUl9DSDBMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMExJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMExJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDBMSU1JVEhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMExJTUlUSF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfU1RPUFBFRF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX1NUT1BQRURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENBTElCUkFURURPTkUgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NBTElCUkFURURPTkVfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0FMSUJSQVRFRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NBTElCUkFURURPTkVfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTkNMUl9DQUxJQlJBVEVET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQUxJQlJBVEVET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0FMSUJSQVRFRE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DQUxJQlJBVEVET05FX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DQUxJQlJBVEVET05FX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRVNVTFRET05FIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9SRVNVTFRET05FX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJFU1VMVERPTkUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9SRVNVTFRET05FX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfUkVTVUxURE9ORV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVTVUxURE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX1JFU1VMVERPTkVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfUkVTVUxURE9ORV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfUkVTVUxURE9ORV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRE9ORSBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfRE9ORV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfRE9ORV9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0RPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERPTkUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9ET05FX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0RPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0RPTkVfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfRU5EX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0VORF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0VORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfRU5EX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9TVEFSVEVEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9TVEFSVEVEX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfU1RBUlRFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogU0FBRENfU1RBVFVTICovDQorLyogRGVzY3JpcHRpb246IFN0YXR1cyAqLw0KKw0KKy8qIEJpdCAwIDogU3RhdHVzICovDQorI2RlZmluZSBTQUFEQ19TVEFUVVNfU1RBVFVTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX1NUQVRVU19TVEFUVVNfTXNrICgweDFVTCA8PCBTQUFEQ19TVEFUVVNfU1RBVFVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19TVEFUVVNfU1RBVFVTX1JlYWR5ICgwVUwpIC8qITwgQURDIGlzIHJlYWR5LiBObyBvbi1nb2luZyBjb252ZXJzaW9uLiAqLw0KKyNkZWZpbmUgU0FBRENfU1RBVFVTX1NUQVRVU19CdXN5ICgxVUwpIC8qITwgQURDIGlzIGJ1c3kuIENvbnZlcnNpb24gaW4gcHJvZ3Jlc3MuICovDQorDQorLyogUmVnaXN0ZXI6IFNBQURDX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgb3IgZGlzYWJsZSBBREMgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIEFEQyAqLw0KKyNkZWZpbmUgU0FBRENfRU5BQkxFX0VOQUJMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19FTkFCTEVfRU5BQkxFX01zayAoMHgxVUwgPDwgU0FBRENfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfRU5BQkxFX0VOQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgQURDICovDQorI2RlZmluZSBTQUFEQ19FTkFCTEVfRU5BQkxFX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgQURDICovDQorDQorLyogUmVnaXN0ZXI6IFNBQURDX0NIX1BTRUxQICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBJbnB1dCBwb3NpdGl2ZSBwaW4gc2VsZWN0aW9uIGZvciBDSFswXSAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IEFuYWxvZyBwb3NpdGl2ZSBpbnB1dCBjaGFubmVsICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMUF9QU0VMUF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQU0VMUCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxQX1BTRUxQX01zayAoMHgxRlVMIDw8IFNBQURDX0NIX1BTRUxQX1BTRUxQX1BvcykgLyohPCBCaXQgbWFzayBvZiBQU0VMUCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxQX1BTRUxQX05DICgwVUwpIC8qITwgTm90IGNvbm5lY3RlZCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTFBfUFNFTFBfQW5hbG9nSW5wdXQwICgxVUwpIC8qITwgQUlOMCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTFBfUFNFTFBfQW5hbG9nSW5wdXQxICgyVUwpIC8qITwgQUlOMSAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTFBfUFNFTFBfQW5hbG9nSW5wdXQyICgzVUwpIC8qITwgQUlOMiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTFBfUFNFTFBfQW5hbG9nSW5wdXQzICg0VUwpIC8qITwgQUlOMyAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTFBfUFNFTFBfQW5hbG9nSW5wdXQ0ICg1VUwpIC8qITwgQUlONCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTFBfUFNFTFBfQW5hbG9nSW5wdXQ1ICg2VUwpIC8qITwgQUlONSAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTFBfUFNFTFBfQW5hbG9nSW5wdXQ2ICg3VUwpIC8qITwgQUlONiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTFBfUFNFTFBfQW5hbG9nSW5wdXQ3ICg4VUwpIC8qITwgQUlONyAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTFBfUFNFTFBfVkREICg5VUwpIC8qITwgVkREICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMUF9QU0VMUF9WRERIRElWNSAoMHgxMVVMKSAvKiE8IFZEREgvNSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19DSF9QU0VMTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgSW5wdXQgbmVnYXRpdmUgcGluIHNlbGVjdGlvbiBmb3IgQ0hbMF0gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBBbmFsb2cgbmVnYXRpdmUgaW5wdXQsIGVuYWJsZXMgZGlmZmVyZW50aWFsIGNoYW5uZWwgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxOX1BTRUxOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBTRUxOIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTE5fUFNFTE5fTXNrICgweDFGVUwgPDwgU0FBRENfQ0hfUFNFTE5fUFNFTE5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBTRUxOIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTE5fUFNFTE5fTkMgKDBVTCkgLyohPCBOb3QgY29ubmVjdGVkICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMTl9QU0VMTl9BbmFsb2dJbnB1dDAgKDFVTCkgLyohPCBBSU4wICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMTl9QU0VMTl9BbmFsb2dJbnB1dDEgKDJVTCkgLyohPCBBSU4xICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMTl9QU0VMTl9BbmFsb2dJbnB1dDIgKDNVTCkgLyohPCBBSU4yICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMTl9QU0VMTl9BbmFsb2dJbnB1dDMgKDRVTCkgLyohPCBBSU4zICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMTl9QU0VMTl9BbmFsb2dJbnB1dDQgKDVVTCkgLyohPCBBSU40ICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMTl9QU0VMTl9BbmFsb2dJbnB1dDUgKDZVTCkgLyohPCBBSU41ICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMTl9QU0VMTl9BbmFsb2dJbnB1dDYgKDdVTCkgLyohPCBBSU42ICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMTl9QU0VMTl9BbmFsb2dJbnB1dDcgKDhVTCkgLyohPCBBSU43ICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMTl9QU0VMTl9WREQgKDlVTCkgLyohPCBWREQgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxOX1BTRUxOX1ZEREhESVY1ICgweDExVUwpIC8qITwgVkRESC81ICovDQorDQorLyogUmVnaXN0ZXI6IFNBQURDX0NIX0NPTkZJRyAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgSW5wdXQgY29uZmlndXJhdGlvbiBmb3IgQ0hbMF0gKi8NCisNCisvKiBCaXQgMjQgOiBFbmFibGUgYnVyc3QgbW9kZSAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX0JVUlNUX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBCVVJTVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19CVVJTVF9Nc2sgKDB4MVVMIDw8IFNBQURDX0NIX0NPTkZJR19CVVJTVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQlVSU1QgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfQlVSU1RfRGlzYWJsZWQgKDBVTCkgLyohPCBCdXJzdCBtb2RlIGlzIGRpc2FibGVkIChub3JtYWwgb3BlcmF0aW9uKSAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX0JVUlNUX0VuYWJsZWQgKDFVTCkgLyohPCBCdXJzdCBtb2RlIGlzIGVuYWJsZWQuIFNBQURDIHRha2VzIDJeT1ZFUlNBTVBMRSBudW1iZXIgb2Ygc2FtcGxlcyBhcyBmYXN0IGFzIGl0IGNhbiwgYW5kIHNlbmRzIHRoZSBhdmVyYWdlIHRvIERhdGEgUkFNLiAqLw0KKw0KKy8qIEJpdCAyMCA6IEVuYWJsZSBkaWZmZXJlbnRpYWwgbW9kZSAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX01PREVfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfTU9ERV9Nc2sgKDB4MVVMIDw8IFNBQURDX0NIX0NPTkZJR19NT0RFX1BvcykgLyohPCBCaXQgbWFzayBvZiBNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX01PREVfU0UgKDBVTCkgLyohPCBTaW5nbGUgZW5kZWQsIFBTRUxOIHdpbGwgYmUgaWdub3JlZCwgbmVnYXRpdmUgaW5wdXQgdG8gQURDIHNob3J0ZWQgdG8gR05EICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfTU9ERV9EaWZmICgxVUwpIC8qITwgRGlmZmVyZW50aWFsICovDQorDQorLyogQml0cyAxOC4uMTYgOiBBY3F1aXNpdGlvbiB0aW1lLCB0aGUgdGltZSB0aGUgQURDIHVzZXMgdG8gc2FtcGxlIHRoZSBpbnB1dCB2b2x0YWdlICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfVEFDUV9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgVEFDUSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19UQUNRX01zayAoMHg3VUwgPDwgU0FBRENfQ0hfQ09ORklHX1RBQ1FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRBQ1EgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfVEFDUV8zdXMgKDBVTCkgLyohPCAzIHVzICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfVEFDUV81dXMgKDFVTCkgLyohPCA1IHVzICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfVEFDUV8xMHVzICgyVUwpIC8qITwgMTAgdXMgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19UQUNRXzE1dXMgKDNVTCkgLyohPCAxNSB1cyAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1RBQ1FfMjB1cyAoNFVMKSAvKiE8IDIwIHVzICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfVEFDUV80MHVzICg1VUwpIC8qITwgNDAgdXMgKi8NCisNCisvKiBCaXQgMTIgOiBSZWZlcmVuY2UgY29udHJvbCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFRlNFTF9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgUkVGU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFRlNFTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0NIX0NPTkZJR19SRUZTRUxfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFRlNFTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19SRUZTRUxfSW50ZXJuYWwgKDBVTCkgLyohPCBJbnRlcm5hbCByZWZlcmVuY2UgKDAuNiBWKSAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFRlNFTF9WREQxXzQgKDFVTCkgLyohPCBWREQvNCBhcyByZWZlcmVuY2UgKi8NCisNCisvKiBCaXRzIDEwLi44IDogR2FpbiBjb250cm9sICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfR0FJTl9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBHQUlOIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX0dBSU5fTXNrICgweDdVTCA8PCBTQUFEQ19DSF9DT05GSUdfR0FJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgR0FJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19HQUlOX0dhaW4xXzYgKDBVTCkgLyohPCAxLzYgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19HQUlOX0dhaW4xXzUgKDFVTCkgLyohPCAxLzUgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19HQUlOX0dhaW4xXzQgKDJVTCkgLyohPCAxLzQgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19HQUlOX0dhaW4xXzMgKDNVTCkgLyohPCAxLzMgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19HQUlOX0dhaW4xXzIgKDRVTCkgLyohPCAxLzIgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19HQUlOX0dhaW4xICg1VUwpIC8qITwgMSAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX0dBSU5fR2FpbjIgKDZVTCkgLyohPCAyICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfR0FJTl9HYWluNCAoN1VMKSAvKiE8IDQgKi8NCisNCisvKiBCaXRzIDUuLjQgOiBOZWdhdGl2ZSBjaGFubmVsIHJlc2lzdG9yIGNvbnRyb2wgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19SRVNOX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFU04gZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfUkVTTl9Nc2sgKDB4M1VMIDw8IFNBQURDX0NIX0NPTkZJR19SRVNOX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNOIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFU05fQnlwYXNzICgwVUwpIC8qITwgQnlwYXNzIHJlc2lzdG9yIGxhZGRlciAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFU05fUHVsbGRvd24gKDFVTCkgLyohPCBQdWxsLWRvd24gdG8gR05EICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfUkVTTl9QdWxsdXAgKDJVTCkgLyohPCBQdWxsLXVwIHRvIFZERCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFU05fVkREMV8yICgzVUwpIC8qITwgU2V0IGlucHV0IGF0IFZERC8yICovDQorDQorLyogQml0cyAxLi4wIDogUG9zaXRpdmUgY2hhbm5lbCByZXNpc3RvciBjb250cm9sICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfUkVTUF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVNQIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFU1BfTXNrICgweDNVTCA8PCBTQUFEQ19DSF9DT05GSUdfUkVTUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVTUCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19SRVNQX0J5cGFzcyAoMFVMKSAvKiE8IEJ5cGFzcyByZXNpc3RvciBsYWRkZXIgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19SRVNQX1B1bGxkb3duICgxVUwpIC8qITwgUHVsbC1kb3duIHRvIEdORCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFU1BfUHVsbHVwICgyVUwpIC8qITwgUHVsbC11cCB0byBWREQgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19SRVNQX1ZERDFfMiAoM1VMKSAvKiE8IFNldCBpbnB1dCBhdCBWREQvMiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19DSF9MSU1JVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgSGlnaC9sb3cgbGltaXRzIGZvciBldmVudCBtb25pdG9yaW5nIGEgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdHMgMzEuLjE2IDogSGlnaCBsZXZlbCBsaW1pdCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfTElNSVRfSElHSF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgSElHSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX0xJTUlUX0hJR0hfTXNrICgweEZGRkZVTCA8PCBTQUFEQ19DSF9MSU1JVF9ISUdIX1BvcykgLyohPCBCaXQgbWFzayBvZiBISUdIIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTUuLjAgOiBMb3cgbGV2ZWwgbGltaXQgKi8NCisjZGVmaW5lIFNBQURDX0NIX0xJTUlUX0xPV19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBMT1cgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9MSU1JVF9MT1dfTXNrICgweEZGRkZVTCA8PCBTQUFEQ19DSF9MSU1JVF9MT1dfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExPVyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU0FBRENfUkVTT0xVVElPTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZXNvbHV0aW9uIGNvbmZpZ3VyYXRpb24gKi8NCisNCisvKiBCaXRzIDIuLjAgOiBTZXQgdGhlIHJlc29sdXRpb24gKi8NCisjZGVmaW5lIFNBQURDX1JFU09MVVRJT05fVkFMX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFZBTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX1JFU09MVVRJT05fVkFMX01zayAoMHg3VUwgPDwgU0FBRENfUkVTT0xVVElPTl9WQUxfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFZBTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX1JFU09MVVRJT05fVkFMXzhiaXQgKDBVTCkgLyohPCA4IGJpdCAqLw0KKyNkZWZpbmUgU0FBRENfUkVTT0xVVElPTl9WQUxfMTBiaXQgKDFVTCkgLyohPCAxMCBiaXQgKi8NCisjZGVmaW5lIFNBQURDX1JFU09MVVRJT05fVkFMXzEyYml0ICgyVUwpIC8qITwgMTIgYml0ICovDQorI2RlZmluZSBTQUFEQ19SRVNPTFVUSU9OX1ZBTF8xNGJpdCAoM1VMKSAvKiE8IDE0IGJpdCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19PVkVSU0FNUExFICovDQorLyogRGVzY3JpcHRpb246IE92ZXJzYW1wbGluZyBjb25maWd1cmF0aW9uLiBPVkVSU0FNUExFIHNob3VsZCBub3QgYmUgY29tYmluZWQgd2l0aCBTQ0FOLiBUaGUgUkVTT0xVVElPTiBpcyBhcHBsaWVkIGJlZm9yZSBhdmVyYWdpbmcsIHRodXMgZm9yIGhpZ2ggT1ZFUlNBTVBMRSBhIGhpZ2hlciBSRVNPTFVUSU9OIHNob3VsZCBiZSB1c2VkLiAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IE92ZXJzYW1wbGUgY29udHJvbCAqLw0KKyNkZWZpbmUgU0FBRENfT1ZFUlNBTVBMRV9PVkVSU0FNUExFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9WRVJTQU1QTEUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19PVkVSU0FNUExFX09WRVJTQU1QTEVfTXNrICgweEZVTCA8PCBTQUFEQ19PVkVSU0FNUExFX09WRVJTQU1QTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9WRVJTQU1QTEUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19PVkVSU0FNUExFX09WRVJTQU1QTEVfQnlwYXNzICgwVUwpIC8qITwgQnlwYXNzIG92ZXJzYW1wbGluZyAqLw0KKyNkZWZpbmUgU0FBRENfT1ZFUlNBTVBMRV9PVkVSU0FNUExFX092ZXIyeCAoMVVMKSAvKiE8IE92ZXJzYW1wbGUgMnggKi8NCisjZGVmaW5lIFNBQURDX09WRVJTQU1QTEVfT1ZFUlNBTVBMRV9PdmVyNHggKDJVTCkgLyohPCBPdmVyc2FtcGxlIDR4ICovDQorI2RlZmluZSBTQUFEQ19PVkVSU0FNUExFX09WRVJTQU1QTEVfT3Zlcjh4ICgzVUwpIC8qITwgT3ZlcnNhbXBsZSA4eCAqLw0KKyNkZWZpbmUgU0FBRENfT1ZFUlNBTVBMRV9PVkVSU0FNUExFX092ZXIxNnggKDRVTCkgLyohPCBPdmVyc2FtcGxlIDE2eCAqLw0KKyNkZWZpbmUgU0FBRENfT1ZFUlNBTVBMRV9PVkVSU0FNUExFX092ZXIzMnggKDVVTCkgLyohPCBPdmVyc2FtcGxlIDMyeCAqLw0KKyNkZWZpbmUgU0FBRENfT1ZFUlNBTVBMRV9PVkVSU0FNUExFX092ZXI2NHggKDZVTCkgLyohPCBPdmVyc2FtcGxlIDY0eCAqLw0KKyNkZWZpbmUgU0FBRENfT1ZFUlNBTVBMRV9PVkVSU0FNUExFX092ZXIxMjh4ICg3VUwpIC8qITwgT3ZlcnNhbXBsZSAxMjh4ICovDQorI2RlZmluZSBTQUFEQ19PVkVSU0FNUExFX09WRVJTQU1QTEVfT3ZlcjI1NnggKDhVTCkgLyohPCBPdmVyc2FtcGxlIDI1NnggKi8NCisNCisvKiBSZWdpc3RlcjogU0FBRENfU0FNUExFUkFURSAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb250cm9scyBub3JtYWwgb3IgY29udGludW91cyBzYW1wbGUgcmF0ZSAqLw0KKw0KKy8qIEJpdCAxMiA6IFNlbGVjdCBtb2RlIGZvciBzYW1wbGUgcmF0ZSBjb250cm9sICovDQorI2RlZmluZSBTQUFEQ19TQU1QTEVSQVRFX01PREVfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19TQU1QTEVSQVRFX01PREVfTXNrICgweDFVTCA8PCBTQUFEQ19TQU1QTEVSQVRFX01PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19TQU1QTEVSQVRFX01PREVfVGFzayAoMFVMKSAvKiE8IFJhdGUgaXMgY29udHJvbGxlZCBmcm9tIFNBTVBMRSB0YXNrICovDQorI2RlZmluZSBTQUFEQ19TQU1QTEVSQVRFX01PREVfVGltZXJzICgxVUwpIC8qITwgUmF0ZSBpcyBjb250cm9sbGVkIGZyb20gbG9jYWwgdGltZXIgKHVzZSBDQyB0byBjb250cm9sIHRoZSByYXRlKSAqLw0KKw0KKy8qIEJpdHMgMTAuLjAgOiBDYXB0dXJlIGFuZCBjb21wYXJlIHZhbHVlLiBTYW1wbGUgcmF0ZSBpcyAxNiBNSHovQ0MgKi8NCisjZGVmaW5lIFNBQURDX1NBTVBMRVJBVEVfQ0NfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0MgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19TQU1QTEVSQVRFX0NDX01zayAoMHg3RkZVTCA8PCBTQUFEQ19TQU1QTEVSQVRFX0NDX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU0FBRENfUkVTVUxUX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEYXRhIHBvaW50ZXIgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogRGF0YSBwb2ludGVyICovDQorI2RlZmluZSBTQUFEQ19SRVNVTFRfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19SRVNVTFRfUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBTQUFEQ19SRVNVTFRfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19SRVNVTFRfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIGJ1ZmZlciB3b3JkcyB0byB0cmFuc2ZlciAqLw0KKw0KKy8qIEJpdHMgMTQuLjAgOiBNYXhpbXVtIG51bWJlciBvZiBidWZmZXIgd29yZHMgdG8gdHJhbnNmZXIgKi8NCisjZGVmaW5lIFNBQURDX1JFU1VMVF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX1JFU1VMVF9NQVhDTlRfTUFYQ05UX01zayAoMHg3RkZGVUwgPDwgU0FBRENfUkVTVUxUX01BWENOVF9NQVhDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU0FBRENfUkVTVUxUX0FNT1VOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBOdW1iZXIgb2YgYnVmZmVyIHdvcmRzIHRyYW5zZmVycmVkIHNpbmNlIGxhc3QgU1RBUlQgKi8NCisNCisvKiBCaXRzIDE0Li4wIDogTnVtYmVyIG9mIGJ1ZmZlciB3b3JkcyB0cmFuc2ZlcnJlZCBzaW5jZSBsYXN0IFNUQVJULiBUaGlzIHJlZ2lzdGVyIGNhbiBiZSByZWFkIGFmdGVyIGFuIEVORCBvciBTVE9QUEVEIGV2ZW50LiAqLw0KKyNkZWZpbmUgU0FBRENfUkVTVUxUX0FNT1VOVF9BTU9VTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQU1PVU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfUkVTVUxUX0FNT1VOVF9BTU9VTlRfTXNrICgweDdGRkZVTCA8PCBTQUFEQ19SRVNVTFRfQU1PVU5UX0FNT1VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU1PVU5UIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFNQSSAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJFQURZIGV2ZW50ICovDQorI2RlZmluZSBTUElfSU5URU5TRVRfUkVBRFlfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBTUElfSU5URU5TRVRfUkVBRFlfTXNrICgweDFVTCA8PCBTUElfSU5URU5TRVRfUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX0lOVEVOU0VUX1JFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSV9JTlRFTlNFVF9SRUFEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU1BJX0lOVEVOU0VUX1JFQURZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIFNQSV9JTlRFTkNMUl9SRUFEWV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9JTlRFTkNMUl9SRUFEWV9Nc2sgKDB4MVVMIDw8IFNQSV9JTlRFTkNMUl9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBTUElfSU5URU5DTFJfUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJX0lOVEVOQ0xSX1JFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElfSU5URU5DTFJfUkVBRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFNQSV9FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIFNQSSAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IEVuYWJsZSBvciBkaXNhYmxlIFNQSSAqLw0KKyNkZWZpbmUgU1BJX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX0VOQUJMRV9FTkFCTEVfTXNrICgweEZVTCA8PCBTUElfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIFNQSSAqLw0KKyNkZWZpbmUgU1BJX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBTUEkgKi8NCisNCisvKiBSZWdpc3RlcjogU1BJX1BTRUxfU0NLICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFNDSyAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFNQSV9QU0VMX1NDS19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfU0NLX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBTUElfUFNFTF9TQ0tfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9QU0VMX1NDS19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFNQSV9QU0VMX1NDS19DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfU0NLX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9QU0VMX1NDS19QT1JUX01zayAoMHgzVUwgPDwgU1BJX1BTRUxfU0NLX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfU0NLX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBTUElfUFNFTF9TQ0tfUElOX01zayAoMHgxRlVMIDw8IFNQSV9QU0VMX1NDS19QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJX1BTRUxfTU9TSSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBNT1NJIHNpZ25hbCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFNQSV9QU0VMX01PU0lfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9QU0VMX01PU0lfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFNQSV9QU0VMX01PU0lfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9QU0VMX01PU0lfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBTUElfUFNFTF9NT1NJX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBTUElfUFNFTF9NT1NJX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9QU0VMX01PU0lfUE9SVF9Nc2sgKDB4M1VMIDw8IFNQSV9QU0VMX01PU0lfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBTUElfUFNFTF9NT1NJX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBTUElfUFNFTF9NT1NJX1BJTl9Nc2sgKDB4MUZVTCA8PCBTUElfUFNFTF9NT1NJX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElfUFNFTF9NSVNPICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIE1JU08gc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTUlTT19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTUlTT19DT05ORUNUX01zayAoMHgxVUwgPDwgU1BJX1BTRUxfTUlTT19DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTUlTT19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFNQSV9QU0VMX01JU09fQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFNQSV9QU0VMX01JU09fUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTUlTT19QT1JUX01zayAoMHgzVUwgPDwgU1BJX1BTRUxfTUlTT19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFNQSV9QU0VMX01JU09fUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9QU0VMX01JU09fUElOX01zayAoMHgxRlVMIDw8IFNQSV9QU0VMX01JU09fUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSV9SWEQgKi8NCisvKiBEZXNjcmlwdGlvbjogUlhEIHJlZ2lzdGVyICovDQorDQorLyogQml0cyA3Li4wIDogUlggZGF0YSByZWNlaXZlZC4gRG91YmxlIGJ1ZmZlcmVkICovDQorI2RlZmluZSBTUElfUlhEX1JYRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSWEQgZmllbGQuICovDQorI2RlZmluZSBTUElfUlhEX1JYRF9Nc2sgKDB4RkZVTCA8PCBTUElfUlhEX1JYRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhEIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElfVFhEICovDQorLyogRGVzY3JpcHRpb246IFRYRCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFRYIGRhdGEgdG8gc2VuZC4gRG91YmxlIGJ1ZmZlcmVkICovDQorI2RlZmluZSBTUElfVFhEX1RYRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEQgZmllbGQuICovDQorI2RlZmluZSBTUElfVFhEX1RYRF9Nc2sgKDB4RkZVTCA8PCBTUElfVFhEX1RYRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhEIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElfRlJFUVVFTkNZICovDQorLyogRGVzY3JpcHRpb246IFNQSSBmcmVxdWVuY3kuIEFjY3VyYWN5IGRlcGVuZHMgb24gdGhlIEhGQ0xLIHNvdXJjZSBzZWxlY3RlZC4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogU1BJIG1hc3RlciBkYXRhIHJhdGUgKi8NCisjZGVmaW5lIFNQSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZSRVFVRU5DWSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX01zayAoMHhGRkZGRkZGRlVMIDw8IFNQSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkVRVUVOQ1kgZmllbGQuICovDQorI2RlZmluZSBTUElfRlJFUVVFTkNZX0ZSRVFVRU5DWV9LMTI1ICgweDAyMDAwMDAwVUwpIC8qITwgMTI1IGticHMgKi8NCisjZGVmaW5lIFNQSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX0syNTAgKDB4MDQwMDAwMDBVTCkgLyohPCAyNTAga2JwcyAqLw0KKyNkZWZpbmUgU1BJX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfSzUwMCAoMHgwODAwMDAwMFVMKSAvKiE8IDUwMCBrYnBzICovDQorI2RlZmluZSBTUElfRlJFUVVFTkNZX0ZSRVFVRU5DWV9NMSAoMHgxMDAwMDAwMFVMKSAvKiE8IDEgTWJwcyAqLw0KKyNkZWZpbmUgU1BJX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfTTIgKDB4MjAwMDAwMDBVTCkgLyohPCAyIE1icHMgKi8NCisjZGVmaW5lIFNQSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX000ICgweDQwMDAwMDAwVUwpIC8qITwgNCBNYnBzICovDQorI2RlZmluZSBTUElfRlJFUVVFTkNZX0ZSRVFVRU5DWV9NOCAoMHg4MDAwMDAwMFVMKSAvKiE8IDggTWJwcyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElfQ09ORklHICovDQorLyogRGVzY3JpcHRpb246IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMiA6IFNlcmlhbCBjbG9jayAoU0NLKSBwb2xhcml0eSAqLw0KKyNkZWZpbmUgU1BJX0NPTkZJR19DUE9MX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENQT0wgZmllbGQuICovDQorI2RlZmluZSBTUElfQ09ORklHX0NQT0xfTXNrICgweDFVTCA8PCBTUElfQ09ORklHX0NQT0xfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENQT0wgZmllbGQuICovDQorI2RlZmluZSBTUElfQ09ORklHX0NQT0xfQWN0aXZlSGlnaCAoMFVMKSAvKiE8IEFjdGl2ZSBoaWdoICovDQorI2RlZmluZSBTUElfQ09ORklHX0NQT0xfQWN0aXZlTG93ICgxVUwpIC8qITwgQWN0aXZlIGxvdyAqLw0KKw0KKy8qIEJpdCAxIDogU2VyaWFsIGNsb2NrIChTQ0spIHBoYXNlICovDQorI2RlZmluZSBTUElfQ09ORklHX0NQSEFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgQ1BIQSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9DT05GSUdfQ1BIQV9Nc2sgKDB4MVVMIDw8IFNQSV9DT05GSUdfQ1BIQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1BIQSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9DT05GSUdfQ1BIQV9MZWFkaW5nICgwVUwpIC8qITwgU2FtcGxlIG9uIGxlYWRpbmcgZWRnZSBvZiBjbG9jaywgc2hpZnQgc2VyaWFsIGRhdGEgb24gdHJhaWxpbmcgZWRnZSAqLw0KKyNkZWZpbmUgU1BJX0NPTkZJR19DUEhBX1RyYWlsaW5nICgxVUwpIC8qITwgU2FtcGxlIG9uIHRyYWlsaW5nIGVkZ2Ugb2YgY2xvY2ssIHNoaWZ0IHNlcmlhbCBkYXRhIG9uIGxlYWRpbmcgZWRnZSAqLw0KKw0KKy8qIEJpdCAwIDogQml0IG9yZGVyICovDQorI2RlZmluZSBTUElfQ09ORklHX09SREVSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9SREVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX0NPTkZJR19PUkRFUl9Nc2sgKDB4MVVMIDw8IFNQSV9DT05GSUdfT1JERVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9SREVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX0NPTkZJR19PUkRFUl9Nc2JGaXJzdCAoMFVMKSAvKiE8IE1vc3Qgc2lnbmlmaWNhbnQgYml0IHNoaWZ0ZWQgb3V0IGZpcnN0ICovDQorI2RlZmluZSBTUElfQ09ORklHX09SREVSX0xzYkZpcnN0ICgxVUwpIC8qITwgTGVhc3Qgc2lnbmlmaWNhbnQgYml0IHNoaWZ0ZWQgb3V0IGZpcnN0ICovDQorDQorDQorLyogUGVyaXBoZXJhbDogU1BJTSAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgTWFzdGVyIHdpdGggRWFzeURNQSAwICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDE3IDogU2hvcnRjdXQgYmV0d2VlbiBFTkQgZXZlbnQgYW5kIFNUQVJUIHRhc2sgKi8NCisjZGVmaW5lIFNQSU1fU0hPUlRTX0VORF9TVEFSVF9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EX1NUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9TSE9SVFNfRU5EX1NUQVJUX01zayAoMHgxVUwgPDwgU1BJTV9TSE9SVFNfRU5EX1NUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRfU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBTUElNX1NIT1JUU19FTkRfU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBTUElNX1NIT1JUU19FTkRfU1RBUlRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9TVEFSVEVEX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9TVEFSVEVEX01zayAoMHgxVUwgPDwgU1BJTV9JTlRFTlNFVF9TVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9TVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5TRVRfU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9TVEFSVEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFRYIGV2ZW50ICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORFRYX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9FTkRUWF9Nc2sgKDB4MVVMIDw8IFNQSU1fSU5URU5TRVRfRU5EVFhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9FTkRUWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORFRYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORFRYX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9FTkRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9FTkRfTXNrICgweDFVTCA8PCBTUElNX0lOVEVOU0VUX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9FTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9FTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5TRVRfRU5EX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFJYIGV2ZW50ICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORFJYX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9FTkRSWF9Nc2sgKDB4MVVMIDw8IFNQSU1fSU5URU5TRVRfRU5EUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9FTkRSWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORFJYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORFJYX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5TRVRfU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9TVE9QUEVEX01zayAoMHgxVUwgPDwgU1BJTV9JTlRFTlNFVF9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5TRVRfU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9TVE9QUEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDE5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX1NUQVJURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX1NUQVJURURfTXNrICgweDFVTCA8PCBTUElNX0lOVEVOQ0xSX1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX1NUQVJURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDggOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFRYIGV2ZW50ICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX0VORFRYX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9FTkRUWF9Nc2sgKDB4MVVMIDw8IFNQSU1fSU5URU5DTFJfRU5EVFhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9FTkRUWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX0VORFRYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX0VORFRYX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkQgZXZlbnQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EX01zayAoMHgxVUwgPDwgU1BJTV9JTlRFTkNMUl9FTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX0VORF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5EUlggZXZlbnQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EUlhfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX0VORFJYX01zayAoMHgxVUwgPDwgU1BJTV9JTlRFTkNMUl9FTkRSWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX0VORFJYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EUlhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EUlhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9TVE9QUEVEX01zayAoMHgxVUwgPDwgU1BJTV9JTlRFTkNMUl9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9TVE9QUEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX1NUQUxMU1RBVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTdGFsbCBzdGF0dXMgZm9yIEVhc3lETUEgUkFNIGFjY2Vzc2VzLiBUaGUgZmllbGRzIGluIHRoaXMgcmVnaXN0ZXIgaXMgc2V0IHRvIFNUQUxMIGJ5IGhhcmR3YXJlIHdoZW5ldmVyIGEgc3RhbGwgb2NjdXJyZXMgYW5kIGNhbiBiZSBjbGVhcmVkIChzZXQgdG8gTk9TVEFMTCkgYnkgdGhlIENQVS4gKi8NCisNCisvKiBCaXQgMSA6IFN0YWxsIHN0YXR1cyBmb3IgRWFzeURNQSBSQU0gd3JpdGVzICovDQorI2RlZmluZSBTUElNX1NUQUxMU1RBVF9SWF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fU1RBTExTVEFUX1JYX01zayAoMHgxVUwgPDwgU1BJTV9TVEFMTFNUQVRfUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9TVEFMTFNUQVRfUlhfTk9TVEFMTCAoMFVMKSAvKiE8IE5vIHN0YWxsICovDQorI2RlZmluZSBTUElNX1NUQUxMU1RBVF9SWF9TVEFMTCAoMVVMKSAvKiE8IEEgc3RhbGwgaGFzIG9jY3VycmVkICovDQorDQorLyogQml0IDAgOiBTdGFsbCBzdGF0dXMgZm9yIEVhc3lETUEgUkFNIHJlYWRzICovDQorI2RlZmluZSBTUElNX1NUQUxMU1RBVF9UWF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fU1RBTExTVEFUX1RYX01zayAoMHgxVUwgPDwgU1BJTV9TVEFMTFNUQVRfVFhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9TVEFMTFNUQVRfVFhfTk9TVEFMTCAoMFVMKSAvKiE8IE5vIHN0YWxsICovDQorI2RlZmluZSBTUElNX1NUQUxMU1RBVF9UWF9TVEFMTCAoMVVMKSAvKiE8IEEgc3RhbGwgaGFzIG9jY3VycmVkICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBTUElNICovDQorDQorLyogQml0cyAzLi4wIDogRW5hYmxlIG9yIGRpc2FibGUgU1BJTSAqLw0KKyNkZWZpbmUgU1BJTV9FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fRU5BQkxFX0VOQUJMRV9Nc2sgKDB4RlVMIDw8IFNQSU1fRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBTUElNICovDQorI2RlZmluZSBTUElNX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoN1VMKSAvKiE8IEVuYWJsZSBTUElNICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fUFNFTF9TQ0sgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgU0NLICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX1NDS19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX1NDS19DT05ORUNUX01zayAoMHgxVUwgPDwgU1BJTV9QU0VMX1NDS19DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX1NDS19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9TQ0tfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9TQ0tfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX1NDS19QT1JUX01zayAoMHgzVUwgPDwgU1BJTV9QU0VMX1NDS19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9TQ0tfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9TQ0tfUElOX01zayAoMHgxRlVMIDw8IFNQSU1fUFNFTF9TQ0tfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fUFNFTF9NT1NJICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIE1PU0kgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX01PU0lfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9NT1NJX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBTUElNX1BTRUxfTU9TSV9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX01PU0lfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBTUElNX1BTRUxfTU9TSV9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX01PU0lfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX01PU0lfUE9SVF9Nc2sgKDB4M1VMIDw8IFNQSU1fUFNFTF9NT1NJX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX01PU0lfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9NT1NJX1BJTl9Nc2sgKDB4MUZVTCA8PCBTUElNX1BTRUxfTU9TSV9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9QU0VMX01JU08gKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgTUlTTyBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBTUElNX1BTRUxfTUlTT19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX01JU09fQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFNQSU1fUFNFTF9NSVNPX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElNX1BTRUxfTUlTT19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9NSVNPX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBTUElNX1BTRUxfTUlTT19QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBTUElNX1BTRUxfTUlTT19QT1JUX01zayAoMHgzVUwgPDwgU1BJTV9QU0VMX01JU09fUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBTUElNX1BTRUxfTUlTT19QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX01JU09fUElOX01zayAoMHgxRlVMIDw8IFNQSU1fUFNFTF9NSVNPX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX1BTRUxfQ1NOICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIENTTiAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9DU05fQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9DU05fQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFNQSU1fUFNFTF9DU05fQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9DU05fQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBTUElNX1BTRUxfQ1NOX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBTUElNX1BTRUxfQ1NOX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9DU05fUE9SVF9Nc2sgKDB4M1VMIDw8IFNQSU1fUFNFTF9DU05fUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBTUElNX1BTRUxfQ1NOX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBTUElNX1BTRUxfQ1NOX1BJTl9Nc2sgKDB4MUZVTCA8PCBTUElNX1BTRUxfQ1NOX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX0ZSRVFVRU5DWSAqLw0KKy8qIERlc2NyaXB0aW9uOiBTUEkgZnJlcXVlbmN5LiBBY2N1cmFjeSBkZXBlbmRzIG9uIHRoZSBIRkNMSyBzb3VyY2Ugc2VsZWN0ZWQuICovDQorDQorLyogQml0cyAzMS4uMCA6IFNQSSBtYXN0ZXIgZGF0YSByYXRlICovDQorI2RlZmluZSBTUElNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRlJFUVVFTkNZIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX01zayAoMHhGRkZGRkZGRlVMIDw8IFNQSU1fRlJFUVVFTkNZX0ZSRVFVRU5DWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJFUVVFTkNZIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX0sxMjUgKDB4MDIwMDAwMDBVTCkgLyohPCAxMjUga2JwcyAqLw0KKyNkZWZpbmUgU1BJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX0syNTAgKDB4MDQwMDAwMDBVTCkgLyohPCAyNTAga2JwcyAqLw0KKyNkZWZpbmUgU1BJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX0s1MDAgKDB4MDgwMDAwMDBVTCkgLyohPCA1MDAga2JwcyAqLw0KKyNkZWZpbmUgU1BJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX00xNiAoMHgwQTAwMDAwMFVMKSAvKiE8IDE2IE1icHMgKi8NCisjZGVmaW5lIFNQSU1fRlJFUVVFTkNZX0ZSRVFVRU5DWV9NMSAoMHgxMDAwMDAwMFVMKSAvKiE8IDEgTWJwcyAqLw0KKyNkZWZpbmUgU1BJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX00zMiAoMHgxNDAwMDAwMFVMKSAvKiE8IDMyIE1icHMgKi8NCisjZGVmaW5lIFNQSU1fRlJFUVVFTkNZX0ZSRVFVRU5DWV9NMiAoMHgyMDAwMDAwMFVMKSAvKiE8IDIgTWJwcyAqLw0KKyNkZWZpbmUgU1BJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX000ICgweDQwMDAwMDAwVUwpIC8qITwgNCBNYnBzICovDQorI2RlZmluZSBTUElNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfTTggKDB4ODAwMDAwMDBVTCkgLyohPCA4IE1icHMgKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9SWERfUFRSICovDQorLyogRGVzY3JpcHRpb246IERhdGEgcG9pbnRlciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBEYXRhIHBvaW50ZXIgKi8NCisjZGVmaW5lIFNQSU1fUlhEX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9SWERfUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBTUElNX1JYRF9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fUlhEX01BWENOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIGJ1ZmZlciAqLw0KKw0KKy8qIEJpdHMgMTUuLjAgOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIGJ1ZmZlciAqLw0KKyNkZWZpbmUgU1BJTV9SWERfTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBTUElNX1JYRF9NQVhDTlRfTUFYQ05UX01zayAoMHhGRkZGVUwgPDwgU1BJTV9SWERfTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX1JYRF9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorDQorLyogQml0cyAxNS4uMCA6IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKyNkZWZpbmUgU1BJTV9SWERfQU1PVU5UX0FNT1VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTU9VTlQgZmllbGQuICovDQorI2RlZmluZSBTUElNX1JYRF9BTU9VTlRfQU1PVU5UX01zayAoMHhGRkZGVUwgPDwgU1BJTV9SWERfQU1PVU5UX0FNT1VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU1PVU5UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX1JYRF9MSVNUICovDQorLyogRGVzY3JpcHRpb246IEVhc3lETUEgbGlzdCB0eXBlICovDQorDQorLyogQml0cyAxLi4wIDogTGlzdCB0eXBlICovDQorI2RlZmluZSBTUElNX1JYRF9MSVNUX0xJU1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTElTVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUlhEX0xJU1RfTElTVF9Nc2sgKDB4M1VMIDw8IFNQSU1fUlhEX0xJU1RfTElTVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTElTVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUlhEX0xJU1RfTElTVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgRWFzeURNQSBsaXN0ICovDQorI2RlZmluZSBTUElNX1JYRF9MSVNUX0xJU1RfQXJyYXlMaXN0ICgxVUwpIC8qITwgVXNlIGFycmF5IGxpc3QgKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9UWERfUFRSICovDQorLyogRGVzY3JpcHRpb246IERhdGEgcG9pbnRlciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBEYXRhIHBvaW50ZXIgKi8NCisjZGVmaW5lIFNQSU1fVFhEX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9UWERfUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBTUElNX1RYRF9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fVFhEX01BWENOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBOdW1iZXIgb2YgYnl0ZXMgaW4gdHJhbnNtaXQgYnVmZmVyICovDQorDQorLyogQml0cyAxNS4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlciAqLw0KKyNkZWZpbmUgU1BJTV9UWERfTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBTUElNX1RYRF9NQVhDTlRfTUFYQ05UX01zayAoMHhGRkZGVUwgPDwgU1BJTV9UWERfTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX1RYRF9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorDQorLyogQml0cyAxNS4uMCA6IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKyNkZWZpbmUgU1BJTV9UWERfQU1PVU5UX0FNT1VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTU9VTlQgZmllbGQuICovDQorI2RlZmluZSBTUElNX1RYRF9BTU9VTlRfQU1PVU5UX01zayAoMHhGRkZGVUwgPDwgU1BJTV9UWERfQU1PVU5UX0FNT1VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU1PVU5UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX1RYRF9MSVNUICovDQorLyogRGVzY3JpcHRpb246IEVhc3lETUEgbGlzdCB0eXBlICovDQorDQorLyogQml0cyAxLi4wIDogTGlzdCB0eXBlICovDQorI2RlZmluZSBTUElNX1RYRF9MSVNUX0xJU1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTElTVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fVFhEX0xJU1RfTElTVF9Nc2sgKDB4M1VMIDw8IFNQSU1fVFhEX0xJU1RfTElTVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTElTVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fVFhEX0xJU1RfTElTVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgRWFzeURNQSBsaXN0ICovDQorI2RlZmluZSBTUElNX1RYRF9MSVNUX0xJU1RfQXJyYXlMaXN0ICgxVUwpIC8qITwgVXNlIGFycmF5IGxpc3QgKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9DT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29uZmlndXJhdGlvbiByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAyIDogU2VyaWFsIGNsb2NrIChTQ0spIHBvbGFyaXR5ICovDQorI2RlZmluZSBTUElNX0NPTkZJR19DUE9MX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENQT0wgZmllbGQuICovDQorI2RlZmluZSBTUElNX0NPTkZJR19DUE9MX01zayAoMHgxVUwgPDwgU1BJTV9DT05GSUdfQ1BPTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1BPTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fQ09ORklHX0NQT0xfQWN0aXZlSGlnaCAoMFVMKSAvKiE8IEFjdGl2ZSBoaWdoICovDQorI2RlZmluZSBTUElNX0NPTkZJR19DUE9MX0FjdGl2ZUxvdyAoMVVMKSAvKiE8IEFjdGl2ZSBsb3cgKi8NCisNCisvKiBCaXQgMSA6IFNlcmlhbCBjbG9jayAoU0NLKSBwaGFzZSAqLw0KKyNkZWZpbmUgU1BJTV9DT05GSUdfQ1BIQV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBDUEhBIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9DT05GSUdfQ1BIQV9Nc2sgKDB4MVVMIDw8IFNQSU1fQ09ORklHX0NQSEFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENQSEEgZmllbGQuICovDQorI2RlZmluZSBTUElNX0NPTkZJR19DUEhBX0xlYWRpbmcgKDBVTCkgLyohPCBTYW1wbGUgb24gbGVhZGluZyBlZGdlIG9mIGNsb2NrLCBzaGlmdCBzZXJpYWwgZGF0YSBvbiB0cmFpbGluZyBlZGdlICovDQorI2RlZmluZSBTUElNX0NPTkZJR19DUEhBX1RyYWlsaW5nICgxVUwpIC8qITwgU2FtcGxlIG9uIHRyYWlsaW5nIGVkZ2Ugb2YgY2xvY2ssIHNoaWZ0IHNlcmlhbCBkYXRhIG9uIGxlYWRpbmcgZWRnZSAqLw0KKw0KKy8qIEJpdCAwIDogQml0IG9yZGVyICovDQorI2RlZmluZSBTUElNX0NPTkZJR19PUkRFUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPUkRFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fQ09ORklHX09SREVSX01zayAoMHgxVUwgPDwgU1BJTV9DT05GSUdfT1JERVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9SREVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9DT05GSUdfT1JERVJfTXNiRmlyc3QgKDBVTCkgLyohPCBNb3N0IHNpZ25pZmljYW50IGJpdCBzaGlmdGVkIG91dCBmaXJzdCAqLw0KKyNkZWZpbmUgU1BJTV9DT05GSUdfT1JERVJfTHNiRmlyc3QgKDFVTCkgLyohPCBMZWFzdCBzaWduaWZpY2FudCBiaXQgc2hpZnRlZCBvdXQgZmlyc3QgKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9JRlRJTUlOR19SWERFTEFZICovDQorLyogRGVzY3JpcHRpb246IFNhbXBsZSBkZWxheSBmb3IgaW5wdXQgc2VyaWFsIGRhdGEgb24gTUlTTyAqLw0KKw0KKy8qIEJpdHMgMi4uMCA6IFNhbXBsZSBkZWxheSBmb3IgaW5wdXQgc2VyaWFsIGRhdGEgb24gTUlTTy4gVGhlIHZhbHVlIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIDY0IE1IeiBjbG9jayBjeWNsZXMgKDE1LjYyNSBucykgZGVsYXkgZnJvbSB0aGUgdGhlIHNhbXBsaW5nIGVkZ2Ugb2YgU0NLIChsZWFkaW5nIGVkZ2UgZm9yIENPTkZJRy5DUEhBID0gMCwgdHJhaWxpbmcgZWRnZSBmb3IgQ09ORklHLkNQSEEgPSAxKSB1bnRpbCB0aGUgaW5wdXQgc2VyaWFsIGRhdGEgaXMgc2FtcGxlZC4gQXMgZW4gZXhhbXBsZSwgaWYgUlhERUxBWSA9IDAgYW5kIENPTkZJRy5DUEhBID0gMCwgdGhlIGlucHV0IHNlcmlhbCBkYXRhIGlzIHNhbXBsZWQgb24gdGhlIHJpc2luZyBlZGdlIG9mIFNDSy4gKi8NCisjZGVmaW5lIFNQSU1fSUZUSU1JTkdfUlhERUxBWV9SWERFTEFZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYREVMQVkgZmllbGQuICovDQorI2RlZmluZSBTUElNX0lGVElNSU5HX1JYREVMQVlfUlhERUxBWV9Nc2sgKDB4N1VMIDw8IFNQSU1fSUZUSU1JTkdfUlhERUxBWV9SWERFTEFZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWERFTEFZIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX0lGVElNSU5HX0NTTkRVUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBNaW5pbXVtIGR1cmF0aW9uIGJldHdlZW4gZWRnZSBvZiBDU04gYW5kIGVkZ2Ugb2YgU0NLIGFuZCBtaW5pbXVtIGR1cmF0aW9uIENTTiBtdXN0IHN0YXkgaGlnaCBiZXR3ZWVuIHRyYW5zYWN0aW9ucyAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE1pbmltdW0gZHVyYXRpb24gYmV0d2VlbiBlZGdlIG9mIENTTiBhbmQgZWRnZSBvZiBTQ0sgYW5kIG1pbmltdW0gZHVyYXRpb24gQ1NOIG11c3Qgc3RheSBoaWdoIGJldHdlZW4gdHJhbnNhY3Rpb25zLiBUaGUgdmFsdWUgaXMgc3BlY2lmaWVkIGluIG51bWJlciBvZiA2NCBNSHogY2xvY2sgY3ljbGVzICgxNS42MjUgbnMpLiAqLw0KKyNkZWZpbmUgU1BJTV9JRlRJTUlOR19DU05EVVJfQ1NORFVSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENTTkRVUiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fSUZUSU1JTkdfQ1NORFVSX0NTTkRVUl9Nc2sgKDB4RkZVTCA8PCBTUElNX0lGVElNSU5HX0NTTkRVUl9DU05EVVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENTTkRVUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9PUkMgKi8NCisvKiBEZXNjcmlwdGlvbjogQnl0ZSB0cmFuc21pdHRlZCBhZnRlciBUWEQuTUFYQ05UIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBpbiB0aGUgY2FzZSB3aGVuIFJYRC5NQVhDTlQgaXMgZ3JlYXRlciB0aGFuIFRYRC5NQVhDTlQgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBCeXRlIHRyYW5zbWl0dGVkIGFmdGVyIFRYRC5NQVhDTlQgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkIGluIHRoZSBjYXNlIHdoZW4gUlhELk1BWENOVCBpcyBncmVhdGVyIHRoYW4gVFhELk1BWENOVC4gKi8NCisjZGVmaW5lIFNQSU1fT1JDX09SQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPUkMgZmllbGQuICovDQorI2RlZmluZSBTUElNX09SQ19PUkNfTXNrICgweEZGVUwgPDwgU1BJTV9PUkNfT1JDX1BvcykgLyohPCBCaXQgbWFzayBvZiBPUkMgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogU1BJUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTUEkgU2xhdmUgMCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAyIDogU2hvcnRjdXQgYmV0d2VlbiBFTkQgZXZlbnQgYW5kIEFDUVVJUkUgdGFzayAqLw0KKyNkZWZpbmUgU1BJU19TSE9SVFNfRU5EX0FDUVVJUkVfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EX0FDUVVJUkUgZmllbGQuICovDQorI2RlZmluZSBTUElTX1NIT1JUU19FTkRfQUNRVUlSRV9Nc2sgKDB4MVVMIDw8IFNQSVNfU0hPUlRTX0VORF9BQ1FVSVJFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRfQUNRVUlSRSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfU0hPUlRTX0VORF9BQ1FVSVJFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgU1BJU19TSE9SVFNfRU5EX0FDUVVJUkVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMTAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQUNRVUlSRUQgZXZlbnQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5TRVRfQUNRVUlSRURfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFDUVVJUkVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTlNFVF9BQ1FVSVJFRF9Nc2sgKDB4MVVMIDw8IFNQSVNfSU5URU5TRVRfQUNRVUlSRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFDUVVJUkVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTlNFVF9BQ1FVSVJFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0FDUVVJUkVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0FDUVVJUkVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFJYIGV2ZW50ICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0VORFJYX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTlNFVF9FTkRSWF9Nc2sgKDB4MVVMIDw8IFNQSVNfSU5URU5TRVRfRU5EUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTlNFVF9FTkRSWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0VORFJYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0VORFJYX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTlNFVF9FTkRfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTlNFVF9FTkRfTXNrICgweDFVTCA8PCBTUElTX0lOVEVOU0VUX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTlNFVF9FTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTlNFVF9FTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5TRVRfRU5EX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDEwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBBQ1FVSVJFRCBldmVudCAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTkNMUl9BQ1FVSVJFRF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgQUNRVUlSRUQgZmllbGQuICovDQorI2RlZmluZSBTUElTX0lOVEVOQ0xSX0FDUVVJUkVEX01zayAoMHgxVUwgPDwgU1BJU19JTlRFTkNMUl9BQ1FVSVJFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUNRVUlSRUQgZmllbGQuICovDQorI2RlZmluZSBTUElTX0lOVEVOQ0xSX0FDUVVJUkVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfQUNRVUlSRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfQUNRVUlSRURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFJYIGV2ZW50ICovDQorI2RlZmluZSBTUElTX0lOVEVOQ0xSX0VORFJYX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTkNMUl9FTkRSWF9Nc2sgKDB4MVVMIDw8IFNQSVNfSU5URU5DTFJfRU5EUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTkNMUl9FTkRSWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTUElTX0lOVEVOQ0xSX0VORFJYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElTX0lOVEVOQ0xSX0VORFJYX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkQgZXZlbnQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfRU5EX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfRU5EX01zayAoMHgxVUwgPDwgU1BJU19JTlRFTkNMUl9FTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElTX0lOVEVOQ0xSX0VORF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogU1BJU19TRU1TVEFUICovDQorLyogRGVzY3JpcHRpb246IFNlbWFwaG9yZSBzdGF0dXMgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXRzIDEuLjAgOiBTZW1hcGhvcmUgc3RhdHVzICovDQorI2RlZmluZSBTUElTX1NFTVNUQVRfU0VNU1RBVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTRU1TVEFUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19TRU1TVEFUX1NFTVNUQVRfTXNrICgweDNVTCA8PCBTUElTX1NFTVNUQVRfU0VNU1RBVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0VNU1RBVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfU0VNU1RBVF9TRU1TVEFUX0ZyZWUgKDBVTCkgLyohPCBTZW1hcGhvcmUgaXMgZnJlZSAqLw0KKyNkZWZpbmUgU1BJU19TRU1TVEFUX1NFTVNUQVRfQ1BVICgxVUwpIC8qITwgU2VtYXBob3JlIGlzIGFzc2lnbmVkIHRvIENQVSAqLw0KKyNkZWZpbmUgU1BJU19TRU1TVEFUX1NFTVNUQVRfU1BJUyAoMlVMKSAvKiE8IFNlbWFwaG9yZSBpcyBhc3NpZ25lZCB0byBTUEkgc2xhdmUgKi8NCisjZGVmaW5lIFNQSVNfU0VNU1RBVF9TRU1TVEFUX0NQVVBlbmRpbmcgKDNVTCkgLyohPCBTZW1hcGhvcmUgaXMgYXNzaWduZWQgdG8gU1BJIGJ1dCBhIGhhbmRvdmVyIHRvIHRoZSBDUFUgaXMgcGVuZGluZyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1NUQVRVUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTdGF0dXMgZnJvbSBsYXN0IHRyYW5zYWN0aW9uICovDQorDQorLyogQml0IDEgOiBSWCBidWZmZXIgb3ZlcmZsb3cgZGV0ZWN0ZWQsIGFuZCBwcmV2ZW50ZWQgKi8NCisjZGVmaW5lIFNQSVNfU1RBVFVTX09WRVJGTE9XX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIE9WRVJGTE9XIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19TVEFUVVNfT1ZFUkZMT1dfTXNrICgweDFVTCA8PCBTUElTX1NUQVRVU19PVkVSRkxPV19Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1ZFUkZMT1cgZmllbGQuICovDQorI2RlZmluZSBTUElTX1NUQVRVU19PVkVSRkxPV19Ob3RQcmVzZW50ICgwVUwpIC8qITwgUmVhZDogZXJyb3Igbm90IHByZXNlbnQgKi8NCisjZGVmaW5lIFNQSVNfU1RBVFVTX09WRVJGTE9XX1ByZXNlbnQgKDFVTCkgLyohPCBSZWFkOiBlcnJvciBwcmVzZW50ICovDQorI2RlZmluZSBTUElTX1NUQVRVU19PVkVSRkxPV19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBjbGVhciBlcnJvciBvbiB3cml0aW5nICcxJyAqLw0KKw0KKy8qIEJpdCAwIDogVFggYnVmZmVyIG92ZXItcmVhZCBkZXRlY3RlZCwgYW5kIHByZXZlbnRlZCAqLw0KKyNkZWZpbmUgU1BJU19TVEFUVVNfT1ZFUlJFQURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgT1ZFUlJFQUQgZmllbGQuICovDQorI2RlZmluZSBTUElTX1NUQVRVU19PVkVSUkVBRF9Nc2sgKDB4MVVMIDw8IFNQSVNfU1RBVFVTX09WRVJSRUFEX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVkVSUkVBRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfU1RBVFVTX09WRVJSRUFEX05vdFByZXNlbnQgKDBVTCkgLyohPCBSZWFkOiBlcnJvciBub3QgcHJlc2VudCAqLw0KKyNkZWZpbmUgU1BJU19TVEFUVVNfT1ZFUlJFQURfUHJlc2VudCAoMVVMKSAvKiE8IFJlYWQ6IGVycm9yIHByZXNlbnQgKi8NCisjZGVmaW5lIFNQSVNfU1RBVFVTX09WRVJSRUFEX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGNsZWFyIGVycm9yIG9uIHdyaXRpbmcgJzEnICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBTUEkgc2xhdmUgKi8NCisNCisvKiBCaXRzIDMuLjAgOiBFbmFibGUgb3IgZGlzYWJsZSBTUEkgc2xhdmUgKi8NCisjZGVmaW5lIFNQSVNfRU5BQkxFX0VOQUJMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBTUElTX0VOQUJMRV9FTkFCTEVfTXNrICgweEZVTCA8PCBTUElTX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfRU5BQkxFX0VOQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgU1BJIHNsYXZlICovDQorI2RlZmluZSBTUElTX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoMlVMKSAvKiE8IEVuYWJsZSBTUEkgc2xhdmUgKi8NCisNCisvKiBSZWdpc3RlcjogU1BJU19QU0VMX1NDSyAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBTQ0sgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBTUElTX1BTRUxfU0NLX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElTX1BTRUxfU0NLX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBTUElTX1BTRUxfU0NLX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElTX1BTRUxfU0NLX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX1NDS19DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX1NDS19QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBTUElTX1BTRUxfU0NLX1BPUlRfTXNrICgweDNVTCA8PCBTUElTX1BTRUxfU0NLX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX1NDS19QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX1NDS19QSU5fTXNrICgweDFGVUwgPDwgU1BJU19QU0VMX1NDS19QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJU19QU0VMX01JU08gKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgTUlTTyBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBTUElTX1BTRUxfTUlTT19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX01JU09fQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFNQSVNfUFNFTF9NSVNPX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElTX1BTRUxfTUlTT19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NSVNPX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBTUElTX1BTRUxfTUlTT19QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBTUElTX1BTRUxfTUlTT19QT1JUX01zayAoMHgzVUwgPDwgU1BJU19QU0VMX01JU09fUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBTUElTX1BTRUxfTUlTT19QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX01JU09fUElOX01zayAoMHgxRlVMIDw8IFNQSVNfUFNFTF9NSVNPX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1BTRUxfTU9TSSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBNT1NJIHNpZ25hbCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NT1NJX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElTX1BTRUxfTU9TSV9DT05ORUNUX01zayAoMHgxVUwgPDwgU1BJU19QU0VMX01PU0lfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NT1NJX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX01PU0lfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NT1NJX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NT1NJX1BPUlRfTXNrICgweDNVTCA8PCBTUElTX1BTRUxfTU9TSV9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NT1NJX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBTUElTX1BTRUxfTU9TSV9QSU5fTXNrICgweDFGVUwgPDwgU1BJU19QU0VMX01PU0lfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfUFNFTF9DU04gKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgQ1NOIHNpZ25hbCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9DU05fQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9DU05fQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFNQSVNfUFNFTF9DU05fQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9DU05fQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBTUElTX1BTRUxfQ1NOX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBTUElTX1BTRUxfQ1NOX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9DU05fUE9SVF9Nc2sgKDB4M1VMIDw8IFNQSVNfUFNFTF9DU05fUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBTUElTX1BTRUxfQ1NOX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBTUElTX1BTRUxfQ1NOX1BJTl9Nc2sgKDB4MUZVTCA8PCBTUElTX1BTRUxfQ1NOX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1JYRF9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogUlhEIGRhdGEgcG9pbnRlciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBSWEQgZGF0YSBwb2ludGVyICovDQorI2RlZmluZSBTUElTX1JYRF9QVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUlhEX1BUUl9QVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgU1BJU19SWERfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1JYRF9NQVhDTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gcmVjZWl2ZSBidWZmZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIGJ1ZmZlciAqLw0KKyNkZWZpbmUgU1BJU19SWERfTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBTUElTX1JYRF9NQVhDTlRfTUFYQ05UX01zayAoMHhGRlVMIDw8IFNQSVNfUlhEX01BWENOVF9NQVhDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJU19SWERfQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBsYXN0IGdyYW50ZWQgdHJhbnNhY3Rpb24gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gdGhlIGxhc3QgZ3JhbnRlZCB0cmFuc2FjdGlvbiAqLw0KKyNkZWZpbmUgU1BJU19SWERfQU1PVU5UX0FNT1VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTU9VTlQgZmllbGQuICovDQorI2RlZmluZSBTUElTX1JYRF9BTU9VTlRfQU1PVU5UX01zayAoMHhGRlVMIDw8IFNQSVNfUlhEX0FNT1VOVF9BTU9VTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJU19UWERfUFRSICovDQorLyogRGVzY3JpcHRpb246IFRYRCBkYXRhIHBvaW50ZXIgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogVFhEIGRhdGEgcG9pbnRlciAqLw0KKyNkZWZpbmUgU1BJU19UWERfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBTUElTX1RYRF9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFNQSVNfVFhEX1BUUl9QVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJU19UWERfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlciAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlciAqLw0KKyNkZWZpbmUgU1BJU19UWERfTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBTUElTX1RYRF9NQVhDTlRfTUFYQ05UX01zayAoMHhGRlVMIDw8IFNQSVNfVFhEX01BWENOVF9NQVhDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJU19UWERfQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBieXRlcyB0cmFuc21pdHRlZCBpbiBsYXN0IGdyYW50ZWQgdHJhbnNhY3Rpb24gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNtaXR0ZWQgaW4gbGFzdCBncmFudGVkIHRyYW5zYWN0aW9uICovDQorI2RlZmluZSBTUElTX1RYRF9BTU9VTlRfQU1PVU5UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfVFhEX0FNT1VOVF9BTU9VTlRfTXNrICgweEZGVUwgPDwgU1BJU19UWERfQU1PVU5UX0FNT1VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU1PVU5UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX0NPTkZJRyAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICovDQorDQorLyogQml0IDIgOiBTZXJpYWwgY2xvY2sgKFNDSykgcG9sYXJpdHkgKi8NCisjZGVmaW5lIFNQSVNfQ09ORklHX0NQT0xfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgQ1BPTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfQ09ORklHX0NQT0xfTXNrICgweDFVTCA8PCBTUElTX0NPTkZJR19DUE9MX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUE9MIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19DT05GSUdfQ1BPTF9BY3RpdmVIaWdoICgwVUwpIC8qITwgQWN0aXZlIGhpZ2ggKi8NCisjZGVmaW5lIFNQSVNfQ09ORklHX0NQT0xfQWN0aXZlTG93ICgxVUwpIC8qITwgQWN0aXZlIGxvdyAqLw0KKw0KKy8qIEJpdCAxIDogU2VyaWFsIGNsb2NrIChTQ0spIHBoYXNlICovDQorI2RlZmluZSBTUElTX0NPTkZJR19DUEhBX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENQSEEgZmllbGQuICovDQorI2RlZmluZSBTUElTX0NPTkZJR19DUEhBX01zayAoMHgxVUwgPDwgU1BJU19DT05GSUdfQ1BIQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1BIQSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfQ09ORklHX0NQSEFfTGVhZGluZyAoMFVMKSAvKiE8IFNhbXBsZSBvbiBsZWFkaW5nIGVkZ2Ugb2YgY2xvY2ssIHNoaWZ0IHNlcmlhbCBkYXRhIG9uIHRyYWlsaW5nIGVkZ2UgKi8NCisjZGVmaW5lIFNQSVNfQ09ORklHX0NQSEFfVHJhaWxpbmcgKDFVTCkgLyohPCBTYW1wbGUgb24gdHJhaWxpbmcgZWRnZSBvZiBjbG9jaywgc2hpZnQgc2VyaWFsIGRhdGEgb24gbGVhZGluZyBlZGdlICovDQorDQorLyogQml0IDAgOiBCaXQgb3JkZXIgKi8NCisjZGVmaW5lIFNQSVNfQ09ORklHX09SREVSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9SREVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19DT05GSUdfT1JERVJfTXNrICgweDFVTCA8PCBTUElTX0NPTkZJR19PUkRFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1JERVIgZmllbGQuICovDQorI2RlZmluZSBTUElTX0NPTkZJR19PUkRFUl9Nc2JGaXJzdCAoMFVMKSAvKiE8IE1vc3Qgc2lnbmlmaWNhbnQgYml0IHNoaWZ0ZWQgb3V0IGZpcnN0ICovDQorI2RlZmluZSBTUElTX0NPTkZJR19PUkRFUl9Mc2JGaXJzdCAoMVVMKSAvKiE8IExlYXN0IHNpZ25pZmljYW50IGJpdCBzaGlmdGVkIG91dCBmaXJzdCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX0RFRiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZWZhdWx0IGNoYXJhY3Rlci4gQ2hhcmFjdGVyIGNsb2NrZWQgb3V0IGluIGNhc2Ugb2YgYW4gaWdub3JlZCB0cmFuc2FjdGlvbi4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBEZWZhdWx0IGNoYXJhY3Rlci4gQ2hhcmFjdGVyIGNsb2NrZWQgb3V0IGluIGNhc2Ugb2YgYW4gaWdub3JlZCB0cmFuc2FjdGlvbi4gKi8NCisjZGVmaW5lIFNQSVNfREVGX0RFRl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBERUYgZmllbGQuICovDQorI2RlZmluZSBTUElTX0RFRl9ERUZfTXNrICgweEZGVUwgPDwgU1BJU19ERUZfREVGX1BvcykgLyohPCBCaXQgbWFzayBvZiBERUYgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfT1JDICovDQorLyogRGVzY3JpcHRpb246IE92ZXItcmVhZCBjaGFyYWN0ZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBPdmVyLXJlYWQgY2hhcmFjdGVyLiBDaGFyYWN0ZXIgY2xvY2tlZCBvdXQgYWZ0ZXIgYW4gb3Zlci1yZWFkIG9mIHRoZSB0cmFuc21pdCBidWZmZXIuICovDQorI2RlZmluZSBTUElTX09SQ19PUkNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgT1JDIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19PUkNfT1JDX01zayAoMHhGRlVMIDw8IFNQSVNfT1JDX09SQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1JDIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFRFTVAgKi8NCisvKiBEZXNjcmlwdGlvbjogVGVtcGVyYXR1cmUgU2Vuc29yICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIERBVEFSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFRFTVBfSU5URU5TRVRfREFUQVJEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBEQVRBUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9JTlRFTlNFVF9EQVRBUkRZX01zayAoMHgxVUwgPDwgVEVNUF9JTlRFTlNFVF9EQVRBUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBEQVRBUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9JTlRFTlNFVF9EQVRBUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRFTVBfSU5URU5TRVRfREFUQVJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVEVNUF9JTlRFTlNFVF9EQVRBUkRZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIERBVEFSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFRFTVBfSU5URU5DTFJfREFUQVJEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBEQVRBUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9JTlRFTkNMUl9EQVRBUkRZX01zayAoMHgxVUwgPDwgVEVNUF9JTlRFTkNMUl9EQVRBUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBEQVRBUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9JTlRFTkNMUl9EQVRBUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRFTVBfSU5URU5DTFJfREFUQVJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVEVNUF9JTlRFTkNMUl9EQVRBUkRZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX1RFTVAgKi8NCisvKiBEZXNjcmlwdGlvbjogVGVtcGVyYXR1cmUgaW4gZGVnQyAoMC4yNWRlZyBzdGVwcykgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogVGVtcGVyYXR1cmUgaW4gZGVnQyAoMC4yNWRlZyBzdGVwcykgKi8NCisjZGVmaW5lIFRFTVBfVEVNUF9URU1QX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRFTVAgZmllbGQuICovDQorI2RlZmluZSBURU1QX1RFTVBfVEVNUF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBURU1QX1RFTVBfVEVNUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVEVNUCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9BMCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTbG9wZSBvZiAxc3QgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisNCisvKiBCaXRzIDExLi4wIDogU2xvcGUgb2YgMXN0IHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorI2RlZmluZSBURU1QX0EwX0EwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9BMF9BMF9Nc2sgKDB4RkZGVUwgPDwgVEVNUF9BMF9BMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQTAgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfQTEgKi8NCisvKiBEZXNjcmlwdGlvbjogU2xvcGUgb2YgMm5kIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyAxMS4uMCA6IFNsb3BlIG9mIDJuZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9BMV9BMV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBMSBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfQTFfQTFfTXNrICgweEZGRlVMIDw8IFRFTVBfQTFfQTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEExIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX0EyICovDQorLyogRGVzY3JpcHRpb246IFNsb3BlIG9mIDNyZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKw0KKy8qIEJpdHMgMTEuLjAgOiBTbG9wZSBvZiAzcmQgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisjZGVmaW5lIFRFTVBfQTJfQTJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQTIgZmllbGQuICovDQorI2RlZmluZSBURU1QX0EyX0EyX01zayAoMHhGRkZVTCA8PCBURU1QX0EyX0EyX1BvcykgLyohPCBCaXQgbWFzayBvZiBBMiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9BMyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTbG9wZSBvZiA0dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisNCisvKiBCaXRzIDExLi4wIDogU2xvcGUgb2YgNHRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorI2RlZmluZSBURU1QX0EzX0EzX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9BM19BM19Nc2sgKDB4RkZGVUwgPDwgVEVNUF9BM19BM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQTMgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfQTQgKi8NCisvKiBEZXNjcmlwdGlvbjogU2xvcGUgb2YgNXRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyAxMS4uMCA6IFNsb3BlIG9mIDV0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9BNF9BNF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBNCBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfQTRfQTRfTXNrICgweEZGRlVMIDw8IFRFTVBfQTRfQTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEE0IGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX0E1ICovDQorLyogRGVzY3JpcHRpb246IFNsb3BlIG9mIDZ0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKw0KKy8qIEJpdHMgMTEuLjAgOiBTbG9wZSBvZiA2dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisjZGVmaW5lIFRFTVBfQTVfQTVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQTUgZmllbGQuICovDQorI2RlZmluZSBURU1QX0E1X0E1X01zayAoMHhGRkZVTCA8PCBURU1QX0E1X0E1X1BvcykgLyohPCBCaXQgbWFzayBvZiBBNSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9CMCAqLw0KKy8qIERlc2NyaXB0aW9uOiB5LWludGVyY2VwdCBvZiAxc3QgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisNCisvKiBCaXRzIDEzLi4wIDogeS1pbnRlcmNlcHQgb2YgMXN0IHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorI2RlZmluZSBURU1QX0IwX0IwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9CMF9CMF9Nc2sgKDB4M0ZGRlVMIDw8IFRFTVBfQjBfQjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEIwIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX0IxICovDQorLyogRGVzY3JpcHRpb246IHktaW50ZXJjZXB0IG9mIDJuZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKw0KKy8qIEJpdHMgMTMuLjAgOiB5LWludGVyY2VwdCBvZiAybmQgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisjZGVmaW5lIFRFTVBfQjFfQjFfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQjEgZmllbGQuICovDQorI2RlZmluZSBURU1QX0IxX0IxX01zayAoMHgzRkZGVUwgPDwgVEVNUF9CMV9CMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQjEgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfQjIgKi8NCisvKiBEZXNjcmlwdGlvbjogeS1pbnRlcmNlcHQgb2YgM3JkIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyAxMy4uMCA6IHktaW50ZXJjZXB0IG9mIDNyZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9CMl9CMl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCMiBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfQjJfQjJfTXNrICgweDNGRkZVTCA8PCBURU1QX0IyX0IyX1BvcykgLyohPCBCaXQgbWFzayBvZiBCMiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9CMyAqLw0KKy8qIERlc2NyaXB0aW9uOiB5LWludGVyY2VwdCBvZiA0dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisNCisvKiBCaXRzIDEzLi4wIDogeS1pbnRlcmNlcHQgb2YgNHRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorI2RlZmluZSBURU1QX0IzX0IzX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9CM19CM19Nc2sgKDB4M0ZGRlVMIDw8IFRFTVBfQjNfQjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEIzIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX0I0ICovDQorLyogRGVzY3JpcHRpb246IHktaW50ZXJjZXB0IG9mIDV0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKw0KKy8qIEJpdHMgMTMuLjAgOiB5LWludGVyY2VwdCBvZiA1dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisjZGVmaW5lIFRFTVBfQjRfQjRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQjQgZmllbGQuICovDQorI2RlZmluZSBURU1QX0I0X0I0X01zayAoMHgzRkZGVUwgPDwgVEVNUF9CNF9CNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQjQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfQjUgKi8NCisvKiBEZXNjcmlwdGlvbjogeS1pbnRlcmNlcHQgb2YgNnRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyAxMy4uMCA6IHktaW50ZXJjZXB0IG9mIDZ0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9CNV9CNV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCNSBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfQjVfQjVfTXNrICgweDNGRkZVTCA8PCBURU1QX0I1X0I1X1BvcykgLyohPCBCaXQgbWFzayBvZiBCNSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9UMCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmQgcG9pbnQgb2YgMXN0IHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyA3Li4wIDogRW5kIHBvaW50IG9mIDFzdCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9UMF9UMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUMCBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfVDBfVDBfTXNrICgweEZGVUwgPDwgVEVNUF9UMF9UMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVDAgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfVDEgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5kIHBvaW50IG9mIDJuZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IEVuZCBwb2ludCBvZiAybmQgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisjZGVmaW5lIFRFTVBfVDFfVDFfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVDEgZmllbGQuICovDQorI2RlZmluZSBURU1QX1QxX1QxX01zayAoMHhGRlVMIDw8IFRFTVBfVDFfVDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFQxIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX1QyICovDQorLyogRGVzY3JpcHRpb246IEVuZCBwb2ludCBvZiAzcmQgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBFbmQgcG9pbnQgb2YgM3JkIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorI2RlZmluZSBURU1QX1QyX1QyX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9UMl9UMl9Nc2sgKDB4RkZVTCA8PCBURU1QX1QyX1QyX1BvcykgLyohPCBCaXQgbWFzayBvZiBUMiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9UMyAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmQgcG9pbnQgb2YgNHRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyA3Li4wIDogRW5kIHBvaW50IG9mIDR0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9UM19UM19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUMyBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfVDNfVDNfTXNrICgweEZGVUwgPDwgVEVNUF9UM19UM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVDMgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfVDQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5kIHBvaW50IG9mIDV0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IEVuZCBwb2ludCBvZiA1dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisjZGVmaW5lIFRFTVBfVDRfVDRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVDQgZmllbGQuICovDQorI2RlZmluZSBURU1QX1Q0X1Q0X01zayAoMHhGRlVMIDw8IFRFTVBfVDRfVDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFQ0IGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFRJTUVSICovDQorLyogRGVzY3JpcHRpb246IFRpbWVyL0NvdW50ZXIgMCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUSU1FUl9TSE9SVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogU2hvcnRjdXQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMTMgOiBTaG9ydGN1dCBiZXR3ZWVuIENPTVBBUkVbNV0gZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU1X1NUT1BfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkU1X1NUT1AgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTVfU1RPUF9Nc2sgKDB4MVVMIDw8IFRJTUVSX1NIT1JUU19DT01QQVJFNV9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFNV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU1X1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTVfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDEyIDogU2hvcnRjdXQgYmV0d2VlbiBDT01QQVJFWzRdIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFNF9TVE9QX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFNF9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU0X1NUT1BfTXNrICgweDFVTCA8PCBUSU1FUl9TSE9SVFNfQ09NUEFSRTRfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTRfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFNF9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU0X1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxMSA6IFNob3J0Y3V0IGJldHdlZW4gQ09NUEFSRVszXSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTNfU1RPUF9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTNfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFM19TVE9QX01zayAoMHgxVUwgPDwgVElNRVJfU0hPUlRTX0NPTVBBUkUzX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUzX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTNfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFM19TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMTAgOiBTaG9ydGN1dCBiZXR3ZWVuIENPTVBBUkVbMl0gZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUyX1NUT1BfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUyX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTJfU1RPUF9Nc2sgKDB4MVVMIDw8IFRJTUVSX1NIT1JUU19DT01QQVJFMl9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMl9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUyX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTJfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDkgOiBTaG9ydGN1dCBiZXR3ZWVuIENPTVBBUkVbMV0gZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUxX1NUT1BfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTFfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMV9TVE9QX01zayAoMHgxVUwgPDwgVElNRVJfU0hPUlRTX0NPTVBBUkUxX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUxX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTFfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMV9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgOCA6IFNob3J0Y3V0IGJldHdlZW4gQ09NUEFSRVswXSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTBfU1RPUF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMF9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUwX1NUT1BfTXNrICgweDFVTCA8PCBUSU1FUl9TSE9SVFNfQ09NUEFSRTBfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTBfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMF9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUwX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCA1IDogU2hvcnRjdXQgYmV0d2VlbiBDT01QQVJFWzVdIGV2ZW50IGFuZCBDTEVBUiB0YXNrICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTVfQ0xFQVJfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTVfQ0xFQVIgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTVfQ0xFQVJfTXNrICgweDFVTCA8PCBUSU1FUl9TSE9SVFNfQ09NUEFSRTVfQ0xFQVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkU1X0NMRUFSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU1X0NMRUFSX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU1X0NMRUFSX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgNCA6IFNob3J0Y3V0IGJldHdlZW4gQ09NUEFSRVs0XSBldmVudCBhbmQgQ0xFQVIgdGFzayAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU0X0NMRUFSX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkU0X0NMRUFSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU0X0NMRUFSX01zayAoMHgxVUwgPDwgVElNRVJfU0hPUlRTX0NPTVBBUkU0X0NMRUFSX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFNF9DTEVBUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFNF9DTEVBUl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFNF9DTEVBUl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDMgOiBTaG9ydGN1dCBiZXR3ZWVuIENPTVBBUkVbM10gZXZlbnQgYW5kIENMRUFSIHRhc2sgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFM19DTEVBUl9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFM19DTEVBUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFM19DTEVBUl9Nc2sgKDB4MVVMIDw8IFRJTUVSX1NIT1JUU19DT01QQVJFM19DTEVBUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTNfQ0xFQVIgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTNfQ0xFQVJfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTNfQ0xFQVJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAyIDogU2hvcnRjdXQgYmV0d2VlbiBDT01QQVJFWzJdIGV2ZW50IGFuZCBDTEVBUiB0YXNrICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTJfQ0xFQVJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTJfQ0xFQVIgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTJfQ0xFQVJfTXNrICgweDFVTCA8PCBUSU1FUl9TSE9SVFNfQ09NUEFSRTJfQ0xFQVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUyX0NMRUFSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUyX0NMRUFSX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUyX0NMRUFSX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMSA6IFNob3J0Y3V0IGJldHdlZW4gQ09NUEFSRVsxXSBldmVudCBhbmQgQ0xFQVIgdGFzayAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUxX0NMRUFSX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUxX0NMRUFSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUxX0NMRUFSX01zayAoMHgxVUwgPDwgVElNRVJfU0hPUlRTX0NPTVBBUkUxX0NMRUFSX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMV9DTEVBUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMV9DTEVBUl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMV9DTEVBUl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDAgOiBTaG9ydGN1dCBiZXR3ZWVuIENPTVBBUkVbMF0gZXZlbnQgYW5kIENMRUFSIHRhc2sgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMF9DTEVBUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMF9DTEVBUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMF9DTEVBUl9Nc2sgKDB4MVVMIDw8IFRJTUVSX1NIT1JUU19DT01QQVJFMF9DTEVBUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTBfQ0xFQVIgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTBfQ0xFQVJfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTBfQ0xFQVJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUSU1FUl9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbNV0gZXZlbnQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkU1X1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFNSBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkU1X01zayAoMHgxVUwgPDwgVElNRVJfSU5URU5TRVRfQ09NUEFSRTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkU1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkU1X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzRdIGV2ZW50ICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFNF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTQgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFNF9Nc2sgKDB4MVVMIDw8IFRJTUVSX0lOVEVOU0VUX0NPTVBBUkU0X1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFNCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkU0X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkU0X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFNF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVszXSBldmVudCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTNfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTNfTXNrICgweDFVTCA8PCBUSU1FUl9JTlRFTlNFVF9DT01QQVJFM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbMl0gZXZlbnQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUyX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUyX01zayAoMHgxVUwgPDwgVElNRVJfSU5URU5TRVRfQ09NUEFSRTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUyX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzFdIGV2ZW50ICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMV9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTEgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMV9Nc2sgKDB4MVVMIDw8IFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMSBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUxX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVswXSBldmVudCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTBfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTBfTXNrICgweDFVTCA8PCBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTBfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFRJTUVSX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzVdIGV2ZW50ICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFNV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTUgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFNV9Nc2sgKDB4MVVMIDw8IFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkU1X1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFNSBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkU1X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkU1X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFNV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbNF0gZXZlbnQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkU0X1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFNCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkU0X01zayAoMHgxVUwgPDwgVElNRVJfSU5URU5DTFJfQ09NUEFSRTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkU0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkU0X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVszXSBldmVudCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTNfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTNfTXNrICgweDFVTCA8PCBUSU1FUl9JTlRFTkNMUl9DT01QQVJFM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTNfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzJdIGV2ZW50ICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTIgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMl9Nc2sgKDB4MVVMIDw8IFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUyX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUxX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMSBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUxX01zayAoMHgxVUwgPDwgVElNRVJfSU5URU5DTFJfQ09NUEFSRTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUxX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVswXSBldmVudCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTBfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTBfTXNrICgweDFVTCA8PCBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTBfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFRJTUVSX1NUQVRVUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBUaW1lciBzdGF0dXMgKi8NCisNCisvKiBCaXQgMCA6IFRpbWVyIHN0YXR1cyAqLw0KKyNkZWZpbmUgVElNRVJfU1RBVFVTX1NUQVRVU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TVEFUVVNfU1RBVFVTX01zayAoMHgxVUwgPDwgVElNRVJfU1RBVFVTX1NUQVRVU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU1RBVFVTX1NUQVRVU19TdG9wcGVkICgwVUwpIC8qITwgVGltZXIgaXMgc3RvcHBlZCAqLw0KKyNkZWZpbmUgVElNRVJfU1RBVFVTX1NUQVRVU19TdGFydGVkICgxVUwpIC8qITwgVGltZXIgaXMgc3RhcnRlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUSU1FUl9NT0RFICovDQorLyogRGVzY3JpcHRpb246IFRpbWVyIG1vZGUgc2VsZWN0aW9uICovDQorDQorLyogQml0cyAxLi4wIDogVGltZXIgbW9kZSAqLw0KKyNkZWZpbmUgVElNRVJfTU9ERV9NT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9NT0RFX01PREVfTXNrICgweDNVTCA8PCBUSU1FUl9NT0RFX01PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9NT0RFX01PREVfVGltZXIgKDBVTCkgLyohPCBTZWxlY3QgVGltZXIgbW9kZSAqLw0KKyNkZWZpbmUgVElNRVJfTU9ERV9NT0RFX0NvdW50ZXIgKDFVTCkgLyohPCBEZXByZWNhdGVkIGVudW1lcmF0b3IgLSAgU2VsZWN0IENvdW50ZXIgbW9kZSAqLw0KKyNkZWZpbmUgVElNRVJfTU9ERV9NT0RFX0xvd1Bvd2VyQ291bnRlciAoMlVMKSAvKiE8IFNlbGVjdCBMb3cgUG93ZXIgQ291bnRlciBtb2RlICovDQorDQorLyogUmVnaXN0ZXI6IFRJTUVSX0JJVE1PREUgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIGJ5IHRoZSBUSU1FUiAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IFRpbWVyIGJpdCB3aWR0aCAqLw0KKyNkZWZpbmUgVElNRVJfQklUTU9ERV9CSVRNT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJJVE1PREUgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9CSVRNT0RFX0JJVE1PREVfTXNrICgweDNVTCA8PCBUSU1FUl9CSVRNT0RFX0JJVE1PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJJVE1PREUgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9CSVRNT0RFX0JJVE1PREVfMTZCaXQgKDBVTCkgLyohPCAxNiBiaXQgdGltZXIgYml0IHdpZHRoICovDQorI2RlZmluZSBUSU1FUl9CSVRNT0RFX0JJVE1PREVfMDhCaXQgKDFVTCkgLyohPCA4IGJpdCB0aW1lciBiaXQgd2lkdGggKi8NCisjZGVmaW5lIFRJTUVSX0JJVE1PREVfQklUTU9ERV8yNEJpdCAoMlVMKSAvKiE8IDI0IGJpdCB0aW1lciBiaXQgd2lkdGggKi8NCisjZGVmaW5lIFRJTUVSX0JJVE1PREVfQklUTU9ERV8zMkJpdCAoM1VMKSAvKiE8IDMyIGJpdCB0aW1lciBiaXQgd2lkdGggKi8NCisNCisvKiBSZWdpc3RlcjogVElNRVJfUFJFU0NBTEVSICovDQorLyogRGVzY3JpcHRpb246IFRpbWVyIHByZXNjYWxlciByZWdpc3RlciAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IFByZXNjYWxlciB2YWx1ZSAqLw0KKyNkZWZpbmUgVElNRVJfUFJFU0NBTEVSX1BSRVNDQUxFUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVTQ0FMRVIgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9QUkVTQ0FMRVJfUFJFU0NBTEVSX01zayAoMHhGVUwgPDwgVElNRVJfUFJFU0NBTEVSX1BSRVNDQUxFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFU0NBTEVSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUSU1FUl9DQyAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgQ2FwdHVyZS9Db21wYXJlIHJlZ2lzdGVyIDAgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogQ2FwdHVyZS9Db21wYXJlIHZhbHVlICovDQorI2RlZmluZSBUSU1FUl9DQ19DQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDQyBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0NDX0NDX01zayAoMHhGRkZGRkZGRlVMIDw8IFRJTUVSX0NDX0NDX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQyBmaWVsZC4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBUV0kgKi8NCisvKiBEZXNjcmlwdGlvbjogSTJDIGNvbXBhdGlibGUgVHdvLVdpcmUgSW50ZXJmYWNlIDAgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAxIDogU2hvcnRjdXQgYmV0d2VlbiBCQiBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBUV0lfU0hPUlRTX0JCX1NUT1BfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgQkJfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9TSE9SVFNfQkJfU1RPUF9Nc2sgKDB4MVVMIDw8IFRXSV9TSE9SVFNfQkJfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQkJfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9TSE9SVFNfQkJfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFRXSV9TSE9SVFNfQkJfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDAgOiBTaG9ydGN1dCBiZXR3ZWVuIEJCIGV2ZW50IGFuZCBTVVNQRU5EIHRhc2sgKi8NCisjZGVmaW5lIFRXSV9TSE9SVFNfQkJfU1VTUEVORF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCQl9TVVNQRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX1NIT1JUU19CQl9TVVNQRU5EX01zayAoMHgxVUwgPDwgVFdJX1NIT1JUU19CQl9TVVNQRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBCQl9TVVNQRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX1NIT1JUU19CQl9TVVNQRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVFdJX1NIT1JUU19CQl9TVVNQRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMTggOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU1VTUEVOREVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfU1VTUEVOREVEX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBTVVNQRU5ERUQgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfU1VTUEVOREVEX01zayAoMHgxVUwgPDwgVFdJX0lOVEVOU0VUX1NVU1BFTkRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1VTUEVOREVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX1NVU1BFTkRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfU1VTUEVOREVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfU1VTUEVOREVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBCQiBldmVudCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX0JCX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBCQiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9CQl9Nc2sgKDB4MVVMIDw8IFRXSV9JTlRFTlNFVF9CQl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQkIgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfQkJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX0JCX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfQkJfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9FUlJPUl9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9FUlJPUl9Nc2sgKDB4MVVMIDw8IFRXSV9JTlRFTlNFVF9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfRVJST1JfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFhEU0VOVCBldmVudCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX1RYRFNFTlRfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgVFhEU0VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9UWERTRU5UX01zayAoMHgxVUwgPDwgVFdJX0lOVEVOU0VUX1RYRFNFTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYRFNFTlQgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfVFhEU0VOVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfVFhEU0VOVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX1RYRFNFTlRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUlhEUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9SWERSRUFEWV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSWERSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9SWERSRUFEWV9Nc2sgKDB4MVVMIDw8IFRXSV9JTlRFTlNFVF9SWERSRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhEUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfUlhEUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX1JYRFJFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfUlhEUkVBRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX1NUT1BQRURfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9TVE9QUEVEX01zayAoMHgxVUwgPDwgVFdJX0lOVEVOU0VUX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX1NUT1BQRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFRXSV9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU1VTUEVOREVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfU1VTUEVOREVEX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBTVVNQRU5ERUQgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfU1VTUEVOREVEX01zayAoMHgxVUwgPDwgVFdJX0lOVEVOQ0xSX1NVU1BFTkRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1VTUEVOREVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX1NVU1BFTkRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfU1VTUEVOREVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfU1VTUEVOREVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQkIgZXZlbnQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9CQl9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgQkIgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfQkJfTXNrICgweDFVTCA8PCBUV0lfSU5URU5DTFJfQkJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJCIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX0JCX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9CQl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX0JCX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX0VSUk9SX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX0VSUk9SX01zayAoMHgxVUwgPDwgVFdJX0lOVEVOQ0xSX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9FUlJPUl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFhEU0VOVCBldmVudCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX1RYRFNFTlRfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgVFhEU0VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9UWERTRU5UX01zayAoMHgxVUwgPDwgVFdJX0lOVEVOQ0xSX1RYRFNFTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYRFNFTlQgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfVFhEU0VOVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfVFhEU0VOVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX1RYRFNFTlRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYRFJFQURZIGV2ZW50ICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfUlhEUkVBRFlfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUlhEUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfUlhEUkVBRFlfTXNrICgweDFVTCA8PCBUV0lfSU5URU5DTFJfUlhEUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX1JYRFJFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9SWERSRUFEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX1JYRFJFQURZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX1NUT1BQRURfTXNrICgweDFVTCA8PCBUV0lfSU5URU5DTFJfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfU1RPUFBFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJX0VSUk9SU1JDICovDQorLyogRGVzY3JpcHRpb246IEVycm9yIHNvdXJjZSAqLw0KKw0KKy8qIEJpdCAyIDogTkFDSyByZWNlaXZlZCBhZnRlciBzZW5kaW5nIGEgZGF0YSBieXRlICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBUV0lfRVJST1JTUkNfRE5BQ0tfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRE5BQ0sgZmllbGQuICovDQorI2RlZmluZSBUV0lfRVJST1JTUkNfRE5BQ0tfTXNrICgweDFVTCA8PCBUV0lfRVJST1JTUkNfRE5BQ0tfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEROQUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0VSUk9SU1JDX0ROQUNLX05vdFByZXNlbnQgKDBVTCkgLyohPCBSZWFkOiBlcnJvciBub3QgcHJlc2VudCAqLw0KKyNkZWZpbmUgVFdJX0VSUk9SU1JDX0ROQUNLX1ByZXNlbnQgKDFVTCkgLyohPCBSZWFkOiBlcnJvciBwcmVzZW50ICovDQorDQorLyogQml0IDEgOiBOQUNLIHJlY2VpdmVkIGFmdGVyIHNlbmRpbmcgdGhlIGFkZHJlc3MgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIFRXSV9FUlJPUlNSQ19BTkFDS19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBBTkFDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9FUlJPUlNSQ19BTkFDS19Nc2sgKDB4MVVMIDw8IFRXSV9FUlJPUlNSQ19BTkFDS19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU5BQ0sgZmllbGQuICovDQorI2RlZmluZSBUV0lfRVJST1JTUkNfQU5BQ0tfTm90UHJlc2VudCAoMFVMKSAvKiE8IFJlYWQ6IGVycm9yIG5vdCBwcmVzZW50ICovDQorI2RlZmluZSBUV0lfRVJST1JTUkNfQU5BQ0tfUHJlc2VudCAoMVVMKSAvKiE8IFJlYWQ6IGVycm9yIHByZXNlbnQgKi8NCisNCisvKiBCaXQgMCA6IE92ZXJydW4gZXJyb3IgKi8NCisjZGVmaW5lIFRXSV9FUlJPUlNSQ19PVkVSUlVOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9WRVJSVU4gZmllbGQuICovDQorI2RlZmluZSBUV0lfRVJST1JTUkNfT1ZFUlJVTl9Nc2sgKDB4MVVMIDw8IFRXSV9FUlJPUlNSQ19PVkVSUlVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVkVSUlVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0VSUk9SU1JDX09WRVJSVU5fTm90UHJlc2VudCAoMFVMKSAvKiE8IFJlYWQ6IG5vIG92ZXJydW4gb2NjdXJlZCAqLw0KKyNkZWZpbmUgVFdJX0VSUk9SU1JDX09WRVJSVU5fUHJlc2VudCAoMVVMKSAvKiE8IFJlYWQ6IG92ZXJydW4gb2NjdXJlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lfRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBUV0kgKi8NCisNCisvKiBCaXRzIDMuLjAgOiBFbmFibGUgb3IgZGlzYWJsZSBUV0kgKi8NCisjZGVmaW5lIFRXSV9FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9FTkFCTEVfRU5BQkxFX01zayAoMHhGVUwgPDwgVFdJX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBUV0kgKi8NCisjZGVmaW5lIFRXSV9FTkFCTEVfRU5BQkxFX0VuYWJsZWQgKDVVTCkgLyohPCBFbmFibGUgVFdJICovDQorDQorLyogUmVnaXN0ZXI6IFRXSV9QU0VMX1NDTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBTQ0wgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBUV0lfUFNFTF9TQ0xfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NDTF9DT05ORUNUX01zayAoMHgxVUwgPDwgVFdJX1BTRUxfU0NMX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBUV0lfUFNFTF9TQ0xfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBUV0lfUFNFTF9TQ0xfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NDTF9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBUV0lfUFNFTF9TQ0xfUE9SVF9Nc2sgKDB4M1VMIDw8IFRXSV9QU0VMX1NDTF9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NDTF9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX1BTRUxfU0NMX1BJTl9Nc2sgKDB4MUZVTCA8PCBUV0lfUFNFTF9TQ0xfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSV9QU0VMX1NEQSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBTREEgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBUV0lfUFNFTF9TREFfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NEQV9DT05ORUNUX01zayAoMHgxVUwgPDwgVFdJX1BTRUxfU0RBX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBUV0lfUFNFTF9TREFfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBUV0lfUFNFTF9TREFfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NEQV9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBUV0lfUFNFTF9TREFfUE9SVF9Nc2sgKDB4M1VMIDw8IFRXSV9QU0VMX1NEQV9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NEQV9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX1BTRUxfU0RBX1BJTl9Nc2sgKDB4MUZVTCA8PCBUV0lfUFNFTF9TREFfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSV9SWEQgKi8NCisvKiBEZXNjcmlwdGlvbjogUlhEIHJlZ2lzdGVyICovDQorDQorLyogQml0cyA3Li4wIDogUlhEIHJlZ2lzdGVyICovDQorI2RlZmluZSBUV0lfUlhEX1JYRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSWEQgZmllbGQuICovDQorI2RlZmluZSBUV0lfUlhEX1JYRF9Nc2sgKDB4RkZVTCA8PCBUV0lfUlhEX1JYRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhEIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lfVFhEICovDQorLyogRGVzY3JpcHRpb246IFRYRCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFRYRCByZWdpc3RlciAqLw0KKyNkZWZpbmUgVFdJX1RYRF9UWERfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX1RYRF9UWERfTXNrICgweEZGVUwgPDwgVFdJX1RYRF9UWERfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYRCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJX0ZSRVFVRU5DWSAqLw0KKy8qIERlc2NyaXB0aW9uOiBUV0kgZnJlcXVlbmN5LiBBY2N1cmFjeSBkZXBlbmRzIG9uIHRoZSBIRkNMSyBzb3VyY2Ugc2VsZWN0ZWQuICovDQorDQorLyogQml0cyAzMS4uMCA6IFRXSSBtYXN0ZXIgY2xvY2sgZnJlcXVlbmN5ICovDQorI2RlZmluZSBUV0lfRlJFUVVFTkNZX0ZSRVFVRU5DWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBGUkVRVUVOQ1kgZmllbGQuICovDQorI2RlZmluZSBUV0lfRlJFUVVFTkNZX0ZSRVFVRU5DWV9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBUV0lfRlJFUVVFTkNZX0ZSRVFVRU5DWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJFUVVFTkNZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfSzEwMCAoMHgwMTk4MDAwMFVMKSAvKiE8IDEwMCBrYnBzICovDQorI2RlZmluZSBUV0lfRlJFUVVFTkNZX0ZSRVFVRU5DWV9LMjUwICgweDA0MDAwMDAwVUwpIC8qITwgMjUwIGticHMgKi8NCisjZGVmaW5lIFRXSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX0s0MDAgKDB4MDY2ODAwMDBVTCkgLyohPCA0MDAga2JwcyAoYWN0dWFsIHJhdGUgNDEwLjI1NiBrYnBzKSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lfQUREUkVTUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBBZGRyZXNzIHVzZWQgaW4gdGhlIFRXSSB0cmFuc2ZlciAqLw0KKw0KKy8qIEJpdHMgNi4uMCA6IEFkZHJlc3MgdXNlZCBpbiB0aGUgVFdJIHRyYW5zZmVyICovDQorI2RlZmluZSBUV0lfQUREUkVTU19BRERSRVNTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFJFU1MgZmllbGQuICovDQorI2RlZmluZSBUV0lfQUREUkVTU19BRERSRVNTX01zayAoMHg3RlVMIDw8IFRXSV9BRERSRVNTX0FERFJFU1NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFJFU1MgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogVFdJTSAqLw0KKy8qIERlc2NyaXB0aW9uOiBJMkMgY29tcGF0aWJsZSBUd28tV2lyZSBNYXN0ZXIgSW50ZXJmYWNlIHdpdGggRWFzeURNQSAwICovDQorDQorLyogUmVnaXN0ZXI6IFRXSU1fU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDEyIDogU2hvcnRjdXQgYmV0d2VlbiBMQVNUUlggZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFJYX1NUT1BfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIExBU1RSWF9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFJYX1NUT1BfTXNrICgweDFVTCA8PCBUV0lNX1NIT1JUU19MQVNUUlhfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTEFTVFJYX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUUlhfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFRXSU1fU0hPUlRTX0xBU1RSWF9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMTAgOiBTaG9ydGN1dCBiZXR3ZWVuIExBU1RSWCBldmVudCBhbmQgU1RBUlRUWCB0YXNrICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUUlhfU1RBUlRUWF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgTEFTVFJYX1NUQVJUVFggZmllbGQuICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUUlhfU1RBUlRUWF9Nc2sgKDB4MVVMIDw8IFRXSU1fU0hPUlRTX0xBU1RSWF9TVEFSVFRYX1BvcykgLyohPCBCaXQgbWFzayBvZiBMQVNUUlhfU1RBUlRUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fU0hPUlRTX0xBU1RSWF9TVEFSVFRYX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFJYX1NUQVJUVFhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCA5IDogU2hvcnRjdXQgYmV0d2VlbiBMQVNUVFggZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFRYX1NUT1BfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgTEFTVFRYX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUVFhfU1RPUF9Nc2sgKDB4MVVMIDw8IFRXSU1fU0hPUlRTX0xBU1RUWF9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBMQVNUVFhfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fU0hPUlRTX0xBU1RUWF9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFRYX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCA4IDogU2hvcnRjdXQgYmV0d2VlbiBMQVNUVFggZXZlbnQgYW5kIFNVU1BFTkQgdGFzayAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFRYX1NVU1BFTkRfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgTEFTVFRYX1NVU1BFTkQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUVFhfU1VTUEVORF9Nc2sgKDB4MVVMIDw8IFRXSU1fU0hPUlRTX0xBU1RUWF9TVVNQRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBMQVNUVFhfU1VTUEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fU0hPUlRTX0xBU1RUWF9TVVNQRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFRYX1NVU1BFTkRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCA3IDogU2hvcnRjdXQgYmV0d2VlbiBMQVNUVFggZXZlbnQgYW5kIFNUQVJUUlggdGFzayAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFRYX1NUQVJUUlhfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgTEFTVFRYX1NUQVJUUlggZmllbGQuICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUVFhfU1RBUlRSWF9Nc2sgKDB4MVVMIDw8IFRXSU1fU0hPUlRTX0xBU1RUWF9TVEFSVFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBMQVNUVFhfU1RBUlRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fU0hPUlRTX0xBU1RUWF9TVEFSVFJYX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFRYX1NUQVJUUlhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX0lOVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyNCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgTEFTVFRYIGV2ZW50ICovDQorI2RlZmluZSBUV0lNX0lOVEVOX0xBU1RUWF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgTEFTVFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9MQVNUVFhfTXNrICgweDFVTCA8PCBUV0lNX0lOVEVOX0xBU1RUWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTEFTVFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9MQVNUVFhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBUV0lNX0lOVEVOX0xBU1RUWF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIzIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBMQVNUUlggZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fTEFTVFJYX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBMQVNUUlggZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX0xBU1RSWF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5fTEFTVFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBMQVNUUlggZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX0xBU1RSWF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fTEFTVFJYX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9UWFNUQVJURURfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fVFhTVEFSVEVEX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTl9UWFNUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fVFhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9UWFNUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUlhTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lNX0lOVEVOX1JYU1RBUlRFRF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9SWFNUQVJURURfTXNrICgweDFVTCA8PCBUV0lNX0lOVEVOX1JYU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9SWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBUV0lNX0lOVEVOX1JYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE4IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTVVNQRU5ERUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fU1VTUEVOREVEX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBTVVNQRU5ERUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX1NVU1BFTkRFRF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5fU1VTUEVOREVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVVNQRU5ERUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX1NVU1BFTkRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fU1VTUEVOREVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgOSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fRVJST1JfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX0VSUk9SX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTl9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9FUlJPUl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9TVE9QUEVEX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTl9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDI0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIExBU1RUWCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9MQVNUVFhfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIExBU1RUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfTEFTVFRYX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTlNFVF9MQVNUVFhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExBU1RUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfTEFTVFRYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfTEFTVFRYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX0xBU1RUWF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgTEFTVFJYIGV2ZW50ICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX0xBU1RSWF9Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgTEFTVFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9MQVNUUlhfTXNrICgweDFVTCA8PCBUV0lNX0lOVEVOU0VUX0xBU1RSWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTEFTVFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9MQVNUUlhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9MQVNUUlhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfTEFTVFJYX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfVFhTVEFSVEVEX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1RYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5TRVRfVFhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1RYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1RYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9UWFNUQVJURURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJYU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9SWFNUQVJURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfUlhTVEFSVEVEX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTlNFVF9SWFNUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfUlhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfUlhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1JYU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTggOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU1VTUEVOREVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1NVU1BFTkRFRF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgU1VTUEVOREVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9TVVNQRU5ERURfTXNrICgweDFVTCA8PCBUV0lNX0lOVEVOU0VUX1NVU1BFTkRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1VTUEVOREVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9TVVNQRU5ERURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9TVVNQRU5ERURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfU1VTUEVOREVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX0VSUk9SX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9FUlJPUl9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5TRVRfRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX0VSUk9SX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9TVE9QUEVEX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTlNFVF9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9TVE9QUEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDI0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBMQVNUVFggZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfTEFTVFRYX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBMQVNUVFggZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0xBU1RUWF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5DTFJfTEFTVFRYX1BvcykgLyohPCBCaXQgbWFzayBvZiBMQVNUVFggZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0xBU1RUWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0xBU1RUWF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9MQVNUVFhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIzIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBMQVNUUlggZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfTEFTVFJYX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBMQVNUUlggZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0xBU1RSWF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5DTFJfTEFTVFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBMQVNUUlggZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0xBU1RSWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0xBU1RSWF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9MQVNUUlhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfVFhTVEFSVEVEX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1RYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5DTFJfVFhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1RYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1RYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9UWFNUQVJURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfUlhTVEFSVEVEX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1JYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5DTFJfUlhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1JYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1JYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9SWFNUQVJURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVVNQRU5ERUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfU1VTUEVOREVEX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBTVVNQRU5ERUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1NVU1BFTkRFRF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5DTFJfU1VTUEVOREVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVVNQRU5ERUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1NVU1BFTkRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1NVU1BFTkRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9TVVNQRU5ERURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0VSUk9SX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9FUlJPUl9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5DTFJfRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0VSUk9SX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1NUT1BQRURfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5DTFJfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfU1RPUFBFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9FUlJPUlNSQyAqLw0KKy8qIERlc2NyaXB0aW9uOiBFcnJvciBzb3VyY2UgKi8NCisNCisvKiBCaXQgMiA6IE5BQ0sgcmVjZWl2ZWQgYWZ0ZXIgc2VuZGluZyBhIGRhdGEgYnl0ZSAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgVFdJTV9FUlJPUlNSQ19ETkFDS19Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBETkFDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fRVJST1JTUkNfRE5BQ0tfTXNrICgweDFVTCA8PCBUV0lNX0VSUk9SU1JDX0ROQUNLX1BvcykgLyohPCBCaXQgbWFzayBvZiBETkFDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fRVJST1JTUkNfRE5BQ0tfTm90UmVjZWl2ZWQgKDBVTCkgLyohPCBFcnJvciBkaWQgbm90IG9jY3VyICovDQorI2RlZmluZSBUV0lNX0VSUk9SU1JDX0ROQUNLX1JlY2VpdmVkICgxVUwpIC8qITwgRXJyb3Igb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgMSA6IE5BQ0sgcmVjZWl2ZWQgYWZ0ZXIgc2VuZGluZyB0aGUgYWRkcmVzcyAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgVFdJTV9FUlJPUlNSQ19BTkFDS19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBBTkFDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fRVJST1JTUkNfQU5BQ0tfTXNrICgweDFVTCA8PCBUV0lNX0VSUk9SU1JDX0FOQUNLX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTkFDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fRVJST1JTUkNfQU5BQ0tfTm90UmVjZWl2ZWQgKDBVTCkgLyohPCBFcnJvciBkaWQgbm90IG9jY3VyICovDQorI2RlZmluZSBUV0lNX0VSUk9SU1JDX0FOQUNLX1JlY2VpdmVkICgxVUwpIC8qITwgRXJyb3Igb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgMCA6IE92ZXJydW4gZXJyb3IgKi8NCisjZGVmaW5lIFRXSU1fRVJST1JTUkNfT1ZFUlJVTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPVkVSUlVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9FUlJPUlNSQ19PVkVSUlVOX01zayAoMHgxVUwgPDwgVFdJTV9FUlJPUlNSQ19PVkVSUlVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVkVSUlVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9FUlJPUlNSQ19PVkVSUlVOX05vdFJlY2VpdmVkICgwVUwpIC8qITwgRXJyb3IgZGlkIG5vdCBvY2N1ciAqLw0KKyNkZWZpbmUgVFdJTV9FUlJPUlNSQ19PVkVSUlVOX1JlY2VpdmVkICgxVUwpIC8qITwgRXJyb3Igb2NjdXJyZWQgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIFRXSU0gKi8NCisNCisvKiBCaXRzIDMuLjAgOiBFbmFibGUgb3IgZGlzYWJsZSBUV0lNICovDQorI2RlZmluZSBUV0lNX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9FTkFCTEVfRU5BQkxFX01zayAoMHhGVUwgPDwgVFdJTV9FTkFCTEVfRU5BQkxFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIFRXSU0gKi8NCisjZGVmaW5lIFRXSU1fRU5BQkxFX0VOQUJMRV9FbmFibGVkICg2VUwpIC8qITwgRW5hYmxlIFRXSU0gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9QU0VMX1NDTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBTQ0wgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NDTF9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NDTF9DT05ORUNUX01zayAoMHgxVUwgPDwgVFdJTV9QU0VMX1NDTF9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NDTF9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TQ0xfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TQ0xfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NDTF9QT1JUX01zayAoMHgzVUwgPDwgVFdJTV9QU0VMX1NDTF9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TQ0xfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TQ0xfUElOX01zayAoMHgxRlVMIDw8IFRXSU1fUFNFTF9TQ0xfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSU1fUFNFTF9TREEgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgU0RBIHNpZ25hbCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TREFfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TREFfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFRXSU1fUFNFTF9TREFfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TREFfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBUV0lNX1BTRUxfU0RBX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBUV0lNX1BTRUxfU0RBX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TREFfUE9SVF9Nc2sgKDB4M1VMIDw8IFRXSU1fUFNFTF9TREFfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBUV0lNX1BTRUxfU0RBX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBUV0lNX1BTRUxfU0RBX1BJTl9Nc2sgKDB4MUZVTCA8PCBUV0lNX1BTRUxfU0RBX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX0ZSRVFVRU5DWSAqLw0KKy8qIERlc2NyaXB0aW9uOiBUV0kgZnJlcXVlbmN5LiBBY2N1cmFjeSBkZXBlbmRzIG9uIHRoZSBIRkNMSyBzb3VyY2Ugc2VsZWN0ZWQuICovDQorDQorLyogQml0cyAzMS4uMCA6IFRXSSBtYXN0ZXIgY2xvY2sgZnJlcXVlbmN5ICovDQorI2RlZmluZSBUV0lNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRlJFUVVFTkNZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX01zayAoMHhGRkZGRkZGRlVMIDw8IFRXSU1fRlJFUVVFTkNZX0ZSRVFVRU5DWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJFUVVFTkNZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX0sxMDAgKDB4MDE5ODAwMDBVTCkgLyohPCAxMDAga2JwcyAqLw0KKyNkZWZpbmUgVFdJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX0syNTAgKDB4MDQwMDAwMDBVTCkgLyohPCAyNTAga2JwcyAqLw0KKyNkZWZpbmUgVFdJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX0s0MDAgKDB4MDY0MDAwMDBVTCkgLyohPCA0MDAga2JwcyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX1JYRF9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IERhdGEgcG9pbnRlciAqLw0KKyNkZWZpbmUgVFdJTV9SWERfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1JYRF9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFRXSU1fUlhEX1BUUl9QVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9SWERfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHJlY2VpdmUgYnVmZmVyICovDQorDQorLyogQml0cyA3Li4wIDogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gcmVjZWl2ZSBidWZmZXIgKi8NCisjZGVmaW5lIFRXSU1fUlhEX01BWENOVF9NQVhDTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUFYQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9SWERfTUFYQ05UX01BWENOVF9Nc2sgKDB4RkZVTCA8PCBUV0lNX1JYRF9NQVhDTlRfTUFYQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhDTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSU1fUlhEX0FNT1VOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24uIEluIGNhc2Ugb2YgTkFDSyBlcnJvciwgaW5jbHVkZXMgdGhlIE5BQ0snZWQgYnl0ZS4gKi8NCisjZGVmaW5lIFRXSU1fUlhEX0FNT1VOVF9BTU9VTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQU1PVU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9SWERfQU1PVU5UX0FNT1VOVF9Nc2sgKDB4RkZVTCA8PCBUV0lNX1JYRF9BTU9VTlRfQU1PVU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTU9VTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSU1fUlhEX0xJU1QgKi8NCisvKiBEZXNjcmlwdGlvbjogRWFzeURNQSBsaXN0IHR5cGUgKi8NCisNCisvKiBCaXRzIDIuLjAgOiBMaXN0IHR5cGUgKi8NCisjZGVmaW5lIFRXSU1fUlhEX0xJU1RfTElTVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBMSVNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9SWERfTElTVF9MSVNUX01zayAoMHg3VUwgPDwgVFdJTV9SWERfTElTVF9MSVNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBMSVNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9SWERfTElTVF9MSVNUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBFYXN5RE1BIGxpc3QgKi8NCisjZGVmaW5lIFRXSU1fUlhEX0xJU1RfTElTVF9BcnJheUxpc3QgKDFVTCkgLyohPCBVc2UgYXJyYXkgbGlzdCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX1RYRF9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IERhdGEgcG9pbnRlciAqLw0KKyNkZWZpbmUgVFdJTV9UWERfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1RYRF9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFRXSU1fVFhEX1BUUl9QVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9UWERfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlciAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlciAqLw0KKyNkZWZpbmUgVFdJTV9UWERfTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1RYRF9NQVhDTlRfTUFYQ05UX01zayAoMHhGRlVMIDw8IFRXSU1fVFhEX01BWENOVF9NQVhDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9UWERfQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbi4gSW4gY2FzZSBvZiBOQUNLIGVycm9yLCBpbmNsdWRlcyB0aGUgTkFDSydlZCBieXRlLiAqLw0KKyNkZWZpbmUgVFdJTV9UWERfQU1PVU5UX0FNT1VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTU9VTlQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1RYRF9BTU9VTlRfQU1PVU5UX01zayAoMHhGRlVMIDw8IFRXSU1fVFhEX0FNT1VOVF9BTU9VTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9UWERfTElTVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFYXN5RE1BIGxpc3QgdHlwZSAqLw0KKw0KKy8qIEJpdHMgMi4uMCA6IExpc3QgdHlwZSAqLw0KKyNkZWZpbmUgVFdJTV9UWERfTElTVF9MSVNUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIExJU1QgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1RYRF9MSVNUX0xJU1RfTXNrICgweDdVTCA8PCBUV0lNX1RYRF9MSVNUX0xJU1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExJU1QgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1RYRF9MSVNUX0xJU1RfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIEVhc3lETUEgbGlzdCAqLw0KKyNkZWZpbmUgVFdJTV9UWERfTElTVF9MSVNUX0FycmF5TGlzdCAoMVVMKSAvKiE8IFVzZSBhcnJheSBsaXN0ICovDQorDQorLyogUmVnaXN0ZXI6IFRXSU1fQUREUkVTUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBBZGRyZXNzIHVzZWQgaW4gdGhlIFRXSSB0cmFuc2ZlciAqLw0KKw0KKy8qIEJpdHMgNi4uMCA6IEFkZHJlc3MgdXNlZCBpbiB0aGUgVFdJIHRyYW5zZmVyICovDQorI2RlZmluZSBUV0lNX0FERFJFU1NfQUREUkVTU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSRVNTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9BRERSRVNTX0FERFJFU1NfTXNrICgweDdGVUwgPDwgVFdJTV9BRERSRVNTX0FERFJFU1NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFJFU1MgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogVFdJUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBJMkMgY29tcGF0aWJsZSBUd28tV2lyZSBTbGF2ZSBJbnRlcmZhY2Ugd2l0aCBFYXN5RE1BIDAgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19TSE9SVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogU2hvcnRjdXQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMTQgOiBTaG9ydGN1dCBiZXR3ZWVuIFJFQUQgZXZlbnQgYW5kIFNVU1BFTkQgdGFzayAqLw0KKyNkZWZpbmUgVFdJU19TSE9SVFNfUkVBRF9TVVNQRU5EX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEX1NVU1BFTkQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1NIT1JUU19SRUFEX1NVU1BFTkRfTXNrICgweDFVTCA8PCBUV0lTX1NIT1JUU19SRUFEX1NVU1BFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURfU1VTUEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfU0hPUlRTX1JFQURfU1VTUEVORF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFRXSVNfU0hPUlRTX1JFQURfU1VTUEVORF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDEzIDogU2hvcnRjdXQgYmV0d2VlbiBXUklURSBldmVudCBhbmQgU1VTUEVORCB0YXNrICovDQorI2RlZmluZSBUV0lTX1NIT1JUU19XUklURV9TVVNQRU5EX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBXUklURV9TVVNQRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19TSE9SVFNfV1JJVEVfU1VTUEVORF9Nc2sgKDB4MVVMIDw8IFRXSVNfU0hPUlRTX1dSSVRFX1NVU1BFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdSSVRFX1NVU1BFTkQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1NIT1JUU19XUklURV9TVVNQRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVFdJU19TSE9SVFNfV1JJVEVfU1VTUEVORF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IFRXSVNfSU5URU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDI2IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSRUFEIGV2ZW50ICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1JFQURfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1JFQURfTXNrICgweDFVTCA8PCBUV0lTX0lOVEVOX1JFQURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1JFQURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1JFQURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgV1JJVEUgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fV1JJVEVfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFdSSVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9XUklURV9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5fV1JJVEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdSSVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9XUklURV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fV1JJVEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFhTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1RYU1RBUlRFRF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9UWFNUQVJURURfTXNrICgweDFVTCA8PCBUV0lTX0lOVEVOX1RYU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9UWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1RYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE5IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fUlhTVEFSVEVEX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1JYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5fUlhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1JYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fUlhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgOSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fRVJST1JfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX0VSUk9SX01zayAoMHgxVUwgPDwgVFdJU19JTlRFTl9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9FUlJPUl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9TVE9QUEVEX01zayAoMHgxVUwgPDwgVFdJU19JTlRFTl9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDI2IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJFQUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfUkVBRF9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfUkVBRF9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5TRVRfUkVBRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfUkVBRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1JFQURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfUkVBRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgV1JJVEUgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfV1JJVEVfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFdSSVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9XUklURV9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5TRVRfV1JJVEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdSSVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9XUklURV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1dSSVRFX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1dSSVRFX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfVFhTVEFSVEVEX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1RYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5TRVRfVFhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1RYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1RYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9UWFNUQVJURURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJYU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9SWFNUQVJURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfUlhTVEFSVEVEX01zayAoMHgxVUwgPDwgVFdJU19JTlRFTlNFVF9SWFNUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfUlhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfUlhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1JYU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgOSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9FUlJPUl9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfRVJST1JfTXNrICgweDFVTCA8PCBUV0lTX0lOVEVOU0VUX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9FUlJPUl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9FUlJPUl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1NUT1BQRURfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5TRVRfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfU1RPUFBFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVBRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9SRUFEX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9SRUFEX01zayAoMHgxVUwgPDwgVFdJU19JTlRFTkNMUl9SRUFEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9SRUFEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfUkVBRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9SRUFEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgV1JJVEUgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfV1JJVEVfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFdSSVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9XUklURV9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5DTFJfV1JJVEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdSSVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9XUklURV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1dSSVRFX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1dSSVRFX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFhTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1RYU1RBUlRFRF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9UWFNUQVJURURfTXNrICgweDFVTCA8PCBUV0lTX0lOVEVOQ0xSX1RYU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9UWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9UWFNUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfVFhTVEFSVEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUlhTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1JYU1RBUlRFRF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9SWFNUQVJURURfTXNrICgweDFVTCA8PCBUV0lTX0lOVEVOQ0xSX1JYU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9SWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9SWFNUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfUlhTVEFSVEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9FUlJPUl9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfRVJST1JfTXNrICgweDFVTCA8PCBUV0lTX0lOVEVOQ0xSX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9FUlJPUl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9FUlJPUl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9TVE9QUEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1NUT1BQRURfTXNrICgweDFVTCA8PCBUV0lTX0lOVEVOQ0xSX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1NUT1BQRURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFRXSVNfRVJST1JTUkMgKi8NCisvKiBEZXNjcmlwdGlvbjogRXJyb3Igc291cmNlICovDQorDQorLyogQml0IDMgOiBUWCBidWZmZXIgb3Zlci1yZWFkIGRldGVjdGVkLCBhbmQgcHJldmVudGVkICovDQorI2RlZmluZSBUV0lTX0VSUk9SU1JDX09WRVJSRUFEX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIE9WRVJSRUFEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19FUlJPUlNSQ19PVkVSUkVBRF9Nc2sgKDB4MVVMIDw8IFRXSVNfRVJST1JTUkNfT1ZFUlJFQURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9WRVJSRUFEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19FUlJPUlNSQ19PVkVSUkVBRF9Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IEVycm9yIGRpZCBub3Qgb2NjdXIgKi8NCisjZGVmaW5lIFRXSVNfRVJST1JTUkNfT1ZFUlJFQURfRGV0ZWN0ZWQgKDFVTCkgLyohPCBFcnJvciBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCAyIDogTkFDSyBzZW50IGFmdGVyIHJlY2VpdmluZyBhIGRhdGEgYnl0ZSAqLw0KKyNkZWZpbmUgVFdJU19FUlJPUlNSQ19ETkFDS19Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBETkFDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfRVJST1JTUkNfRE5BQ0tfTXNrICgweDFVTCA8PCBUV0lTX0VSUk9SU1JDX0ROQUNLX1BvcykgLyohPCBCaXQgbWFzayBvZiBETkFDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfRVJST1JTUkNfRE5BQ0tfTm90UmVjZWl2ZWQgKDBVTCkgLyohPCBFcnJvciBkaWQgbm90IG9jY3VyICovDQorI2RlZmluZSBUV0lTX0VSUk9SU1JDX0ROQUNLX1JlY2VpdmVkICgxVUwpIC8qITwgRXJyb3Igb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgMCA6IFJYIGJ1ZmZlciBvdmVyZmxvdyBkZXRlY3RlZCwgYW5kIHByZXZlbnRlZCAqLw0KKyNkZWZpbmUgVFdJU19FUlJPUlNSQ19PVkVSRkxPV19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPVkVSRkxPVyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfRVJST1JTUkNfT1ZFUkZMT1dfTXNrICgweDFVTCA8PCBUV0lTX0VSUk9SU1JDX09WRVJGTE9XX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVkVSRkxPVyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfRVJST1JTUkNfT1ZFUkZMT1dfTm90RGV0ZWN0ZWQgKDBVTCkgLyohPCBFcnJvciBkaWQgbm90IG9jY3VyICovDQorI2RlZmluZSBUV0lTX0VSUk9SU1JDX09WRVJGTE9XX0RldGVjdGVkICgxVUwpIC8qITwgRXJyb3Igb2NjdXJyZWQgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19NQVRDSCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTdGF0dXMgcmVnaXN0ZXIgaW5kaWNhdGluZyB3aGljaCBhZGRyZXNzIGhhZCBhIG1hdGNoICovDQorDQorLyogQml0IDAgOiBXaGljaCBvZiB0aGUgYWRkcmVzc2VzIGluIHtBRERSRVNTfSBtYXRjaGVkIHRoZSBpbmNvbWluZyBhZGRyZXNzICovDQorI2RlZmluZSBUV0lTX01BVENIX01BVENIX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BVENIIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19NQVRDSF9NQVRDSF9Nc2sgKDB4MVVMIDw8IFRXSVNfTUFUQ0hfTUFUQ0hfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BVENIIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgVFdJUyAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IEVuYWJsZSBvciBkaXNhYmxlIFRXSVMgKi8NCisjZGVmaW5lIFRXSVNfRU5BQkxFX0VOQUJMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0VOQUJMRV9FTkFCTEVfTXNrICgweEZVTCA8PCBUV0lTX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfRU5BQkxFX0VOQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgVFdJUyAqLw0KKyNkZWZpbmUgVFdJU19FTkFCTEVfRU5BQkxFX0VuYWJsZWQgKDlVTCkgLyohPCBFbmFibGUgVFdJUyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX1BTRUxfU0NMICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFNDTCBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0NMX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0NMX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBUV0lTX1BTRUxfU0NMX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0NMX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NDTF9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NDTF9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0NMX1BPUlRfTXNrICgweDNVTCA8PCBUV0lTX1BTRUxfU0NMX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NDTF9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NDTF9QSU5fTXNrICgweDFGVUwgPDwgVFdJU19QU0VMX1NDTF9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19QU0VMX1NEQSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBTREEgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NEQV9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NEQV9DT05ORUNUX01zayAoMHgxVUwgPDwgVFdJU19QU0VMX1NEQV9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NEQV9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFRXSVNfUFNFTF9TREFfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFRXSVNfUFNFTF9TREFfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NEQV9QT1JUX01zayAoMHgzVUwgPDwgVFdJU19QU0VMX1NEQV9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFRXSVNfUFNFTF9TREFfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfUFNFTF9TREFfUElOX01zayAoMHgxRlVMIDw8IFRXSVNfUFNFTF9TREFfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSVNfUlhEX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBSWEQgRGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IFJYRCBEYXRhIHBvaW50ZXIgKi8NCisjZGVmaW5lIFRXSVNfUlhEX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19SWERfUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBUV0lTX1JYRF9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSVNfUlhEX01BWENOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBSWEQgYnVmZmVyICovDQorDQorLyogQml0cyA3Li4wIDogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gUlhEIGJ1ZmZlciAqLw0KKyNkZWZpbmUgVFdJU19SWERfTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1JYRF9NQVhDTlRfTUFYQ05UX01zayAoMHhGRlVMIDw8IFRXSVNfUlhEX01BWENOVF9NQVhDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19SWERfQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCBSWEQgdHJhbnNhY3Rpb24gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgUlhEIHRyYW5zYWN0aW9uICovDQorI2RlZmluZSBUV0lTX1JYRF9BTU9VTlRfQU1PVU5UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfUlhEX0FNT1VOVF9BTU9VTlRfTXNrICgweEZGVUwgPDwgVFdJU19SWERfQU1PVU5UX0FNT1VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU1PVU5UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX1RYRF9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogVFhEIERhdGEgcG9pbnRlciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBUWEQgRGF0YSBwb2ludGVyICovDQorI2RlZmluZSBUV0lTX1RYRF9QVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfVFhEX1BUUl9QVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgVFdJU19UWERfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX1RYRF9NQVhDTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gVFhEIGJ1ZmZlciAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIFRYRCBidWZmZXIgKi8NCisjZGVmaW5lIFRXSVNfVFhEX01BWENOVF9NQVhDTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUFYQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19UWERfTUFYQ05UX01BWENOVF9Nc2sgKDB4RkZVTCA8PCBUV0lTX1RYRF9NQVhDTlRfTUFYQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhDTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSVNfVFhEX0FNT1VOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgVFhEIHRyYW5zYWN0aW9uICovDQorDQorLyogQml0cyA3Li4wIDogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IFRYRCB0cmFuc2FjdGlvbiAqLw0KKyNkZWZpbmUgVFdJU19UWERfQU1PVU5UX0FNT1VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTU9VTlQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1RYRF9BTU9VTlRfQU1PVU5UX01zayAoMHhGRlVMIDw8IFRXSVNfVFhEX0FNT1VOVF9BTU9VTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19BRERSRVNTICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBUV0kgc2xhdmUgYWRkcmVzcyAwICovDQorDQorLyogQml0cyA2Li4wIDogVFdJIHNsYXZlIGFkZHJlc3MgKi8NCisjZGVmaW5lIFRXSVNfQUREUkVTU19BRERSRVNTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFJFU1MgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0FERFJFU1NfQUREUkVTU19Nc2sgKDB4N0ZVTCA8PCBUV0lTX0FERFJFU1NfQUREUkVTU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUREUkVTUyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19DT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29uZmlndXJhdGlvbiByZWdpc3RlciBmb3IgdGhlIGFkZHJlc3MgbWF0Y2ggbWVjaGFuaXNtICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBhZGRyZXNzIG1hdGNoaW5nIG9uIEFERFJFU1NbMV0gKi8NCisjZGVmaW5lIFRXSVNfQ09ORklHX0FERFJFU1MxX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFJFU1MxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19DT05GSUdfQUREUkVTUzFfTXNrICgweDFVTCA8PCBUV0lTX0NPTkZJR19BRERSRVNTMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUREUkVTUzEgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0NPTkZJR19BRERSRVNTMV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0NPTkZJR19BRERSRVNTMV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlZCAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgYWRkcmVzcyBtYXRjaGluZyBvbiBBRERSRVNTWzBdICovDQorI2RlZmluZSBUV0lTX0NPTkZJR19BRERSRVNTMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSRVNTMCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfQ09ORklHX0FERFJFU1MwX01zayAoMHgxVUwgPDwgVFdJU19DT05GSUdfQUREUkVTUzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFJFU1MwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19DT05GSUdfQUREUkVTUzBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19DT05GSUdfQUREUkVTUzBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZWQgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19PUkMgKi8NCisvKiBEZXNjcmlwdGlvbjogT3Zlci1yZWFkIGNoYXJhY3Rlci4gQ2hhcmFjdGVyIHNlbnQgb3V0IGluIGNhc2Ugb2YgYW4gb3Zlci1yZWFkIG9mIHRoZSB0cmFuc21pdCBidWZmZXIuICovDQorDQorLyogQml0cyA3Li4wIDogT3Zlci1yZWFkIGNoYXJhY3Rlci4gQ2hhcmFjdGVyIHNlbnQgb3V0IGluIGNhc2Ugb2YgYW4gb3Zlci1yZWFkIG9mIHRoZSB0cmFuc21pdCBidWZmZXIuICovDQorI2RlZmluZSBUV0lTX09SQ19PUkNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgT1JDIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19PUkNfT1JDX01zayAoMHhGRlVMIDw8IFRXSVNfT1JDX09SQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1JDIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFVBUlQgKi8NCisvKiBEZXNjcmlwdGlvbjogVW5pdmVyc2FsIEFzeW5jaHJvbm91cyBSZWNlaXZlci9UcmFuc21pdHRlciAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCA0IDogU2hvcnRjdXQgYmV0d2VlbiBOQ1RTIGV2ZW50IGFuZCBTVE9QUlggdGFzayAqLw0KKyNkZWZpbmUgVUFSVF9TSE9SVFNfTkNUU19TVE9QUlhfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgTkNUU19TVE9QUlggZmllbGQuICovDQorI2RlZmluZSBVQVJUX1NIT1JUU19OQ1RTX1NUT1BSWF9Nc2sgKDB4MVVMIDw8IFVBUlRfU0hPUlRTX05DVFNfU1RPUFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBOQ1RTX1NUT1BSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfU0hPUlRTX05DVFNfU1RPUFJYX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVUFSVF9TSE9SVFNfTkNUU19TVE9QUlhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAzIDogU2hvcnRjdXQgYmV0d2VlbiBDVFMgZXZlbnQgYW5kIFNUQVJUUlggdGFzayAqLw0KKyNkZWZpbmUgVUFSVF9TSE9SVFNfQ1RTX1NUQVJUUlhfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgQ1RTX1NUQVJUUlggZmllbGQuICovDQorI2RlZmluZSBVQVJUX1NIT1JUU19DVFNfU1RBUlRSWF9Nc2sgKDB4MVVMIDw8IFVBUlRfU0hPUlRTX0NUU19TVEFSVFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBDVFNfU1RBUlRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfU0hPUlRTX0NUU19TVEFSVFJYX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVUFSVF9TSE9SVFNfQ1RTX1NUQVJUUlhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUlhUTyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9SWFRPX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFRPIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9SWFRPX01zayAoMHgxVUwgPDwgVUFSVF9JTlRFTlNFVF9SWFRPX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFRPIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9SWFRPX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5TRVRfUlhUT19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9SWFRPX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX0VSUk9SX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9FUlJPUl9Nc2sgKDB4MVVMIDw8IFVBUlRfSU5URU5TRVRfRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX0VSUk9SX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRYRFJEWSBldmVudCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9UWERSRFlfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgVFhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9UWERSRFlfTXNrICgweDFVTCA8PCBVQVJUX0lOVEVOU0VUX1RYRFJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9UWERSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9UWERSRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5TRVRfVFhEUkRZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJYRFJEWSBldmVudCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9SWERSRFlfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUlhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9SWERSRFlfTXNrICgweDFVTCA8PCBVQVJUX0lOVEVOU0VUX1JYRFJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9SWERSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9SWERSRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5TRVRfUlhEUkRZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIE5DVFMgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5TRVRfTkNUU19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBOQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9OQ1RTX01zayAoMHgxVUwgPDwgVUFSVF9JTlRFTlNFVF9OQ1RTX1BvcykgLyohPCBCaXQgbWFzayBvZiBOQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9OQ1RTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5TRVRfTkNUU19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9OQ1RTX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENUUyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9DVFNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9DVFNfTXNrICgweDFVTCA8PCBVQVJUX0lOVEVOU0VUX0NUU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9DVFNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9DVFNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5TRVRfQ1RTX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDE3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSWFRPIGV2ZW50ICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX1JYVE9fUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJYVE8gZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX1JYVE9fTXNrICgweDFVTCA8PCBVQVJUX0lOVEVOQ0xSX1JYVE9fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYVE8gZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX1JYVE9fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9SWFRPX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX1JYVE9fQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX0VSUk9SX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9FUlJPUl9Nc2sgKDB4MVVMIDw8IFVBUlRfSU5URU5DTFJfRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX0VSUk9SX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUWERSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfVFhEUkRZX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFRYRFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfVFhEUkRZX01zayAoMHgxVUwgPDwgVUFSVF9JTlRFTkNMUl9UWERSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYRFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfVFhEUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfVFhEUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX1RYRFJEWV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUlhEUkRZIGV2ZW50ICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX1JYRFJEWV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX1JYRFJEWV9Nc2sgKDB4MVVMIDw8IFVBUlRfSU5URU5DTFJfUlhEUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX1JYRFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX1JYRFJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9SWERSRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIE5DVFMgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfTkNUU19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBOQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9OQ1RTX01zayAoMHgxVUwgPDwgVUFSVF9JTlRFTkNMUl9OQ1RTX1BvcykgLyohPCBCaXQgbWFzayBvZiBOQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9OQ1RTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfTkNUU19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9OQ1RTX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDVFMgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfQ1RTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENUUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfQ1RTX01zayAoMHgxVUwgPDwgVUFSVF9JTlRFTkNMUl9DVFNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENUUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfQ1RTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfQ1RTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX0NUU19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVF9FUlJPUlNSQyAqLw0KKy8qIERlc2NyaXB0aW9uOiBFcnJvciBzb3VyY2UgKi8NCisNCisvKiBCaXQgMyA6IEJyZWFrIGNvbmRpdGlvbiAqLw0KKyNkZWZpbmUgVUFSVF9FUlJPUlNSQ19CUkVBS19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBCUkVBSyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfQlJFQUtfTXNrICgweDFVTCA8PCBVQVJUX0VSUk9SU1JDX0JSRUFLX1BvcykgLyohPCBCaXQgbWFzayBvZiBCUkVBSyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfQlJFQUtfTm90UHJlc2VudCAoMFVMKSAvKiE8IFJlYWQ6IGVycm9yIG5vdCBwcmVzZW50ICovDQorI2RlZmluZSBVQVJUX0VSUk9SU1JDX0JSRUFLX1ByZXNlbnQgKDFVTCkgLyohPCBSZWFkOiBlcnJvciBwcmVzZW50ICovDQorDQorLyogQml0IDIgOiBGcmFtaW5nIGVycm9yIG9jY3VycmVkICovDQorI2RlZmluZSBVQVJUX0VSUk9SU1JDX0ZSQU1JTkdfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRlJBTUlORyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfRlJBTUlOR19Nc2sgKDB4MVVMIDw8IFVBUlRfRVJST1JTUkNfRlJBTUlOR19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJBTUlORyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfRlJBTUlOR19Ob3RQcmVzZW50ICgwVUwpIC8qITwgUmVhZDogZXJyb3Igbm90IHByZXNlbnQgKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfRlJBTUlOR19QcmVzZW50ICgxVUwpIC8qITwgUmVhZDogZXJyb3IgcHJlc2VudCAqLw0KKw0KKy8qIEJpdCAxIDogUGFyaXR5IGVycm9yICovDQorI2RlZmluZSBVQVJUX0VSUk9SU1JDX1BBUklUWV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBQQVJJVFkgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0VSUk9SU1JDX1BBUklUWV9Nc2sgKDB4MVVMIDw8IFVBUlRfRVJST1JTUkNfUEFSSVRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBQQVJJVFkgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0VSUk9SU1JDX1BBUklUWV9Ob3RQcmVzZW50ICgwVUwpIC8qITwgUmVhZDogZXJyb3Igbm90IHByZXNlbnQgKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfUEFSSVRZX1ByZXNlbnQgKDFVTCkgLyohPCBSZWFkOiBlcnJvciBwcmVzZW50ICovDQorDQorLyogQml0IDAgOiBPdmVycnVuIGVycm9yICovDQorI2RlZmluZSBVQVJUX0VSUk9SU1JDX09WRVJSVU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgT1ZFUlJVTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfT1ZFUlJVTl9Nc2sgKDB4MVVMIDw8IFVBUlRfRVJST1JTUkNfT1ZFUlJVTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1ZFUlJVTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfT1ZFUlJVTl9Ob3RQcmVzZW50ICgwVUwpIC8qITwgUmVhZDogZXJyb3Igbm90IHByZXNlbnQgKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfT1ZFUlJVTl9QcmVzZW50ICgxVUwpIC8qITwgUmVhZDogZXJyb3IgcHJlc2VudCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgVUFSVCAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IEVuYWJsZSBvciBkaXNhYmxlIFVBUlQgKi8NCisjZGVmaW5lIFVBUlRfRU5BQkxFX0VOQUJMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0VOQUJMRV9FTkFCTEVfTXNrICgweEZVTCA8PCBVQVJUX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfRU5BQkxFX0VOQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgVUFSVCAqLw0KKyNkZWZpbmUgVUFSVF9FTkFCTEVfRU5BQkxFX0VuYWJsZWQgKDRVTCkgLyohPCBFbmFibGUgVUFSVCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX1BTRUxfUlRTICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFJUUyAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SVFNfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SVFNfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFVBUlRfUFNFTF9SVFNfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SVFNfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBVQVJUX1BTRUxfUlRTX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBVQVJUX1BTRUxfUlRTX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SVFNfUE9SVF9Nc2sgKDB4M1VMIDw8IFVBUlRfUFNFTF9SVFNfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBVQVJUX1BTRUxfUlRTX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBVQVJUX1BTRUxfUlRTX1BJTl9Nc2sgKDB4MUZVTCA8PCBVQVJUX1BTRUxfUlRTX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX1BTRUxfVFhEICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFRYRCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9UWERfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9UWERfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFVBUlRfUFNFTF9UWERfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9UWERfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBVQVJUX1BTRUxfVFhEX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBVQVJUX1BTRUxfVFhEX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9UWERfUE9SVF9Nc2sgKDB4M1VMIDw8IFVBUlRfUFNFTF9UWERfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBVQVJUX1BTRUxfVFhEX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBVQVJUX1BTRUxfVFhEX1BJTl9Nc2sgKDB4MUZVTCA8PCBVQVJUX1BTRUxfVFhEX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX1BTRUxfQ1RTICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIENUUyAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9DVFNfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9DVFNfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFVBUlRfUFNFTF9DVFNfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9DVFNfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBVQVJUX1BTRUxfQ1RTX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBVQVJUX1BTRUxfQ1RTX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9DVFNfUE9SVF9Nc2sgKDB4M1VMIDw8IFVBUlRfUFNFTF9DVFNfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBVQVJUX1BTRUxfQ1RTX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBVQVJUX1BTRUxfQ1RTX1BJTl9Nc2sgKDB4MUZVTCA8PCBVQVJUX1BTRUxfQ1RTX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX1BTRUxfUlhEICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFJYRCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SWERfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SWERfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFVBUlRfUFNFTF9SWERfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SWERfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBVQVJUX1BTRUxfUlhEX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBVQVJUX1BTRUxfUlhEX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SWERfUE9SVF9Nc2sgKDB4M1VMIDw8IFVBUlRfUFNFTF9SWERfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBVQVJUX1BTRUxfUlhEX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBVQVJUX1BTRUxfUlhEX1BJTl9Nc2sgKDB4MUZVTCA8PCBVQVJUX1BTRUxfUlhEX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX1JYRCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSWEQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBSWCBkYXRhIHJlY2VpdmVkIGluIHByZXZpb3VzIHRyYW5zZmVycywgZG91YmxlIGJ1ZmZlcmVkICovDQorI2RlZmluZSBVQVJUX1JYRF9SWERfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUlhEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9SWERfUlhEX01zayAoMHhGRlVMIDw8IFVBUlRfUlhEX1JYRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhEIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX1RYRCAqLw0KKy8qIERlc2NyaXB0aW9uOiBUWEQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBUWCBkYXRhIHRvIGJlIHRyYW5zZmVycmVkICovDQorI2RlZmluZSBVQVJUX1RYRF9UWERfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9UWERfVFhEX01zayAoMHhGRlVMIDw8IFVBUlRfVFhEX1RYRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhEIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX0JBVURSQVRFICovDQorLyogRGVzY3JpcHRpb246IEJhdWQgcmF0ZS4gQWNjdXJhY3kgZGVwZW5kcyBvbiB0aGUgSEZDTEsgc291cmNlIHNlbGVjdGVkLiAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBCYXVkIHJhdGUgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQkFVRFJBVEUgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX01zayAoMHhGRkZGRkZGRlVMIDw8IFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJBVURSQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTIwMCAoMHgwMDA0RjAwMFVMKSAvKiE8IDEyMDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDEyMDUpICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyNDAwICgweDAwMDlEMDAwVUwpIC8qITwgMjQwMCBiYXVkIChhY3R1YWwgcmF0ZTogMjM5NikgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDQ4MDAgKDB4MDAxM0IwMDBVTCkgLyohPCA0ODAwIGJhdWQgKGFjdHVhbCByYXRlOiA0ODA4KSAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkOTYwMCAoMHgwMDI3NTAwMFVMKSAvKiE8IDk2MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDk1OTgpICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxNDQwMCAoMHgwMDNCMDAwMFVMKSAvKiE8IDE0NDAwIGJhdWQgKGFjdHVhbCByYXRlOiAxNDQxNCkgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDE5MjAwICgweDAwNEVBMDAwVUwpIC8qITwgMTkyMDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDE5MjA4KSAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjg4MDAgKDB4MDA3NUYwMDBVTCkgLyohPCAyODgwMCBiYXVkIChhY3R1YWwgcmF0ZTogMjg4MjkpICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQzMTI1MCAoMHgwMDgwMDAwMFVMKSAvKiE8IDMxMjUwIGJhdWQgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDM4NDAwICgweDAwOUQ1MDAwVUwpIC8qITwgMzg0MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDM4NDYyKSAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkNTYwMDAgKDB4MDBFNTAwMDBVTCkgLyohPCA1NjAwMCBiYXVkIChhY3R1YWwgcmF0ZTogNTU5NDQpICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ1NzYwMCAoMHgwMEVCRjAwMFVMKSAvKiE8IDU3NjAwIGJhdWQgKGFjdHVhbCByYXRlOiA1Nzc2MikgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDc2ODAwICgweDAxM0E5MDAwVUwpIC8qITwgNzY4MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDc2OTIzKSAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTE1MjAwICgweDAxRDdFMDAwVUwpIC8qITwgMTE1MjAwIGJhdWQgKGFjdHVhbCByYXRlOiAxMTU5NDIpICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyMzA0MDAgKDB4MDNBRkIwMDBVTCkgLyohPCAyMzA0MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDIzMTg4NCkgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDI1MDAwMCAoMHgwNDAwMDAwMFVMKSAvKiE8IDI1MDAwMCBiYXVkICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ0NjA4MDAgKDB4MDc1RjcwMDBVTCkgLyohPCA0NjA4MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDQ3MDU4OCkgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDkyMTYwMCAoMHgwRUJFRDAwMFVMKSAvKiE8IDkyMTYwMCBiYXVkIChhY3R1YWwgcmF0ZTogOTQxMTc2KSAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMU0gKDB4MTAwMDAwMDBVTCkgLyohPCAxTWVnYSBiYXVkICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfQ09ORklHICovDQorLyogRGVzY3JpcHRpb246IENvbmZpZ3VyYXRpb24gb2YgcGFyaXR5IGFuZCBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8NCisNCisvKiBCaXRzIDMuLjEgOiBQYXJpdHkgKi8NCisjZGVmaW5lIFVBUlRfQ09ORklHX1BBUklUWV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBQQVJJVFkgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0NPTkZJR19QQVJJVFlfTXNrICgweDdVTCA8PCBVQVJUX0NPTkZJR19QQVJJVFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfQ09ORklHX1BBUklUWV9FeGNsdWRlZCAoMHgwVUwpIC8qITwgRXhjbHVkZSBwYXJpdHkgYml0ICovDQorI2RlZmluZSBVQVJUX0NPTkZJR19QQVJJVFlfSW5jbHVkZWQgKDB4N1VMKSAvKiE8IEluY2x1ZGUgcGFyaXR5IGJpdCAqLw0KKw0KKy8qIEJpdCAwIDogSGFyZHdhcmUgZmxvdyBjb250cm9sICovDQorI2RlZmluZSBVQVJUX0NPTkZJR19IV0ZDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEhXRkMgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0NPTkZJR19IV0ZDX01zayAoMHgxVUwgPDwgVUFSVF9DT05GSUdfSFdGQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgSFdGQyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfQ09ORklHX0hXRkNfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9DT05GSUdfSFdGQ19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlZCAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFVBUlRFICovDQorLyogRGVzY3JpcHRpb246IFVBUlQgd2l0aCBFYXN5RE1BIDAgKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVEVfU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDYgOiBTaG9ydGN1dCBiZXR3ZWVuIEVORFJYIGV2ZW50IGFuZCBTVE9QUlggdGFzayAqLw0KKyNkZWZpbmUgVUFSVEVfU0hPUlRTX0VORFJYX1NUT1BSWF9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRSWF9TVE9QUlggZmllbGQuICovDQorI2RlZmluZSBVQVJURV9TSE9SVFNfRU5EUlhfU1RPUFJYX01zayAoMHgxVUwgPDwgVUFSVEVfU0hPUlRTX0VORFJYX1NUT1BSWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EUlhfU1RPUFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfU0hPUlRTX0VORFJYX1NUT1BSWF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFVBUlRFX1NIT1JUU19FTkRSWF9TVE9QUlhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCA1IDogU2hvcnRjdXQgYmV0d2VlbiBFTkRSWCBldmVudCBhbmQgU1RBUlRSWCB0YXNrICovDQorI2RlZmluZSBVQVJURV9TSE9SVFNfRU5EUlhfU1RBUlRSWF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRSWF9TVEFSVFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfU0hPUlRTX0VORFJYX1NUQVJUUlhfTXNrICgweDFVTCA8PCBVQVJURV9TSE9SVFNfRU5EUlhfU1RBUlRSWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EUlhfU1RBUlRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1NIT1JUU19FTkRSWF9TVEFSVFJYX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVUFSVEVfU0hPUlRTX0VORFJYX1NUQVJUUlhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9JTlRFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fVFhTVE9QUEVEX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBUWFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9UWFNUT1BQRURfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTl9UWFNUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1RYU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1RYU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1RYU1RBUlRFRF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fVFhTVEFSVEVEX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5fVFhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9UWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9UWFNUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUlhTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9SWFNUQVJURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1JYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOX1JYU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fUlhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fUlhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTcgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYVE8gZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1JYVE9fUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJYVE8gZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9SWFRPX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5fUlhUT19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhUTyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1JYVE9fRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9SWFRPX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgOSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0VSUk9SX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fRVJST1JfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTl9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgOCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRU5EVFggZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0VORFRYX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fRU5EVFhfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTl9FTkRUWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EVFggZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9FTkRUWF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0VORFRYX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFhEUkRZIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9UWERSRFlfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgVFhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fVFhEUkRZX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5fVFhEUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9UWERSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9UWERSRFlfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRSWCBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fRU5EUlhfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9FTkRSWF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOX0VORFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0VORFJYX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fRU5EUlhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSWERSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1JYRFJEWV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9SWERSRFlfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTl9SWERSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1JYRFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1JYRFJEWV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIE5DVFMgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX05DVFNfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgTkNUUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX05DVFNfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTl9OQ1RTX1BvcykgLyohPCBCaXQgbWFzayBvZiBOQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fTkNUU19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX05DVFNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDVFMgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0NUU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9DVFNfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTl9DVFNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENUUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0NUU19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0NUU19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFhTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9UWFNUT1BQRURfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1RYU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOU0VUX1RYU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhTVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1RYU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhTVE9QUEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1RYU1RBUlRFRF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhTVEFSVEVEX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5TRVRfVFhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9UWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9UWFNUQVJURURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJYU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfUlhTVEFSVEVEX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9SWFNUQVJURURfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTlNFVF9SWFNUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1JYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9SWFNUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1JYU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUlhUTyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfUlhUT19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgUlhUTyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1JYVE9fTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTlNFVF9SWFRPX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFRPIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfUlhUT19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9SWFRPX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9SWFRPX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9FUlJPUl9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX0VSUk9SX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5TRVRfRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX0VSUk9SX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFRYIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9FTkRUWF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX0VORFRYX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5TRVRfRU5EVFhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRU5EVFhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRU5EVFhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX0VORFRYX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRYRFJEWSBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhEUkRZX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFRYRFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1RYRFJEWV9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOU0VUX1RYRFJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhEUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1RYRFJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhEUkRZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFJYIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9FTkRSWF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX0VORFJYX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5TRVRfRU5EUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRU5EUlhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRU5EUlhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX0VORFJYX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJYRFJEWSBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfUlhEUkRZX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1JYRFJEWV9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOU0VUX1JYRFJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfUlhEUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1JYRFJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfUlhEUkRZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIE5DVFMgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX05DVFNfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgTkNUUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX05DVFNfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTlNFVF9OQ1RTX1BvcykgLyohPCBCaXQgbWFzayBvZiBOQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfTkNUU19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9OQ1RTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9OQ1RTX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENUUyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfQ1RTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENUUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX0NUU19Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOU0VUX0NUU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfQ1RTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX0NUU19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfQ1RTX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFhTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9UWFNUT1BQRURfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1RYU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOQ0xSX1RYU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhTVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1RYU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhTVE9QUEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFhTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9UWFNUQVJURURfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1RYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOQ0xSX1RYU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1RYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhTVEFSVEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUlhTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWFNUQVJURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1JYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOQ0xSX1JYU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfUlhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1JYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfUlhTVEFSVEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUlhUTyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfUlhUT19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgUlhUTyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1JYVE9fTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTkNMUl9SWFRPX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFRPIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfUlhUT19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWFRPX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWFRPX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfRVJST1JfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9FUlJPUl9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOQ0xSX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9FUlJPUl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5EVFggZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0VORFRYX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfRU5EVFhfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTkNMUl9FTkRUWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EVFggZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9FTkRUWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9FTkRUWF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfRU5EVFhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYRFJEWSBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhEUkRZX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFRYRFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1RYRFJEWV9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOQ0xSX1RYRFJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhEUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1RYRFJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhEUkRZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkRSWCBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfRU5EUlhfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9FTkRSWF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOQ0xSX0VORFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0VORFJYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0VORFJYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9FTkRSWF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUlhEUkRZIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWERSRFlfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUlhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfUlhEUkRZX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5DTFJfUlhEUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWERSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfUlhEUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWERSRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIE5DVFMgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX05DVFNfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgTkNUUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX05DVFNfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTkNMUl9OQ1RTX1BvcykgLyohPCBCaXQgbWFzayBvZiBOQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfTkNUU19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9OQ1RTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9OQ1RTX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDVFMgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0NUU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9DVFNfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTkNMUl9DVFNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENUUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0NUU19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9DVFNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0NUU19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVEVfRVJST1JTUkMgKi8NCisvKiBEZXNjcmlwdGlvbjogRXJyb3Igc291cmNlIE5vdGUgOiB0aGlzIHJlZ2lzdGVyIGlzIHJlYWQgLyB3cml0ZSBvbmUgdG8gY2xlYXIuICovDQorDQorLyogQml0IDMgOiBCcmVhayBjb25kaXRpb24gKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX0JSRUFLX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEJSRUFLIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfRVJST1JTUkNfQlJFQUtfTXNrICgweDFVTCA8PCBVQVJURV9FUlJPUlNSQ19CUkVBS19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQlJFQUsgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9FUlJPUlNSQ19CUkVBS19Ob3RQcmVzZW50ICgwVUwpIC8qITwgUmVhZDogZXJyb3Igbm90IHByZXNlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX0JSRUFLX1ByZXNlbnQgKDFVTCkgLyohPCBSZWFkOiBlcnJvciBwcmVzZW50ICovDQorDQorLyogQml0IDIgOiBGcmFtaW5nIGVycm9yIG9jY3VycmVkICovDQorI2RlZmluZSBVQVJURV9FUlJPUlNSQ19GUkFNSU5HX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEZSQU1JTkcgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9FUlJPUlNSQ19GUkFNSU5HX01zayAoMHgxVUwgPDwgVUFSVEVfRVJST1JTUkNfRlJBTUlOR19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJBTUlORyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX0ZSQU1JTkdfTm90UHJlc2VudCAoMFVMKSAvKiE8IFJlYWQ6IGVycm9yIG5vdCBwcmVzZW50ICovDQorI2RlZmluZSBVQVJURV9FUlJPUlNSQ19GUkFNSU5HX1ByZXNlbnQgKDFVTCkgLyohPCBSZWFkOiBlcnJvciBwcmVzZW50ICovDQorDQorLyogQml0IDEgOiBQYXJpdHkgZXJyb3IgKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX1BBUklUWV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBQQVJJVFkgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9FUlJPUlNSQ19QQVJJVFlfTXNrICgweDFVTCA8PCBVQVJURV9FUlJPUlNSQ19QQVJJVFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX1BBUklUWV9Ob3RQcmVzZW50ICgwVUwpIC8qITwgUmVhZDogZXJyb3Igbm90IHByZXNlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX1BBUklUWV9QcmVzZW50ICgxVUwpIC8qITwgUmVhZDogZXJyb3IgcHJlc2VudCAqLw0KKw0KKy8qIEJpdCAwIDogT3ZlcnJ1biBlcnJvciAqLw0KKyNkZWZpbmUgVUFSVEVfRVJST1JTUkNfT1ZFUlJVTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPVkVSUlVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfRVJST1JTUkNfT1ZFUlJVTl9Nc2sgKDB4MVVMIDw8IFVBUlRFX0VSUk9SU1JDX09WRVJSVU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9WRVJSVU4gZmllbGQuICovDQorI2RlZmluZSBVQVJURV9FUlJPUlNSQ19PVkVSUlVOX05vdFByZXNlbnQgKDBVTCkgLyohPCBSZWFkOiBlcnJvciBub3QgcHJlc2VudCAqLw0KKyNkZWZpbmUgVUFSVEVfRVJST1JTUkNfT1ZFUlJVTl9QcmVzZW50ICgxVUwpIC8qITwgUmVhZDogZXJyb3IgcHJlc2VudCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIFVBUlQgKi8NCisNCisvKiBCaXRzIDMuLjAgOiBFbmFibGUgb3IgZGlzYWJsZSBVQVJURSAqLw0KKyNkZWZpbmUgVUFSVEVfRU5BQkxFX0VOQUJMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9FTkFCTEVfRU5BQkxFX01zayAoMHhGVUwgPDwgVUFSVEVfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfRU5BQkxFX0VOQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgVUFSVEUgKi8NCisjZGVmaW5lIFVBUlRFX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoOFVMKSAvKiE8IEVuYWJsZSBVQVJURSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9QU0VMX1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBSVFMgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SVFNfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfUlRTX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBVQVJURV9QU0VMX1JUU19DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SVFNfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JUU19DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SVFNfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SVFNfUE9SVF9Nc2sgKDB4M1VMIDw8IFVBUlRFX1BTRUxfUlRTX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SVFNfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfUlRTX1BJTl9Nc2sgKDB4MUZVTCA8PCBVQVJURV9QU0VMX1JUU19QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVEVfUFNFTF9UWEQgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgVFhEIHNpZ25hbCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfVFhEX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9QU0VMX1RYRF9DT05ORUNUX01zayAoMHgxVUwgPDwgVUFSVEVfUFNFTF9UWERfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfVFhEX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9UWERfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfVFhEX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfVFhEX1BPUlRfTXNrICgweDNVTCA8PCBVQVJURV9QU0VMX1RYRF9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfVFhEX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBVQVJURV9QU0VMX1RYRF9QSU5fTXNrICgweDFGVUwgPDwgVUFSVEVfUFNFTF9UWERfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX1BTRUxfQ1RTICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIENUUyBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBVQVJURV9QU0VMX0NUU19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9DVFNfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFVBUlRFX1BTRUxfQ1RTX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9QU0VMX0NUU19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfQ1RTX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBVQVJURV9QU0VMX0NUU19QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9QU0VMX0NUU19QT1JUX01zayAoMHgzVUwgPDwgVUFSVEVfUFNFTF9DVFNfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBVQVJURV9QU0VMX0NUU19QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9DVFNfUElOX01zayAoMHgxRlVMIDw8IFVBUlRFX1BTRUxfQ1RTX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9QU0VMX1JYRCAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBSWEQgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SWERfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfUlhEX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBVQVJURV9QU0VMX1JYRF9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SWERfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JYRF9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SWERfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SWERfUE9SVF9Nc2sgKDB4M1VMIDw8IFVBUlRFX1BTRUxfUlhEX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SWERfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfUlhEX1BJTl9Nc2sgKDB4MUZVTCA8PCBVQVJURV9QU0VMX1JYRF9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVEVfQkFVRFJBVEUgKi8NCisvKiBEZXNjcmlwdGlvbjogQmF1ZCByYXRlLiBBY2N1cmFjeSBkZXBlbmRzIG9uIHRoZSBIRkNMSyBzb3VyY2Ugc2VsZWN0ZWQuICovDQorDQorLyogQml0cyAzMS4uMCA6IEJhdWQgcmF0ZSAqLw0KKyNkZWZpbmUgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQkFVRFJBVEUgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQkFVRFJBVEUgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTIwMCAoMHgwMDA0RjAwMFVMKSAvKiE8IDEyMDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDEyMDUpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjQwMCAoMHgwMDA5RDAwMFVMKSAvKiE8IDI0MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDIzOTYpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkNDgwMCAoMHgwMDEzQjAwMFVMKSAvKiE8IDQ4MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDQ4MDgpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkOTYwMCAoMHgwMDI3NTAwMFVMKSAvKiE8IDk2MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDk1OTgpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTQ0MDAgKDB4MDAzQUYwMDBVTCkgLyohPCAxNDQwMCBiYXVkIChhY3R1YWwgcmF0ZTogMTQ0MDEpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTkyMDAgKDB4MDA0RUEwMDBVTCkgLyohPCAxOTIwMCBiYXVkIChhY3R1YWwgcmF0ZTogMTkyMDgpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjg4MDAgKDB4MDA3NUMwMDBVTCkgLyohPCAyODgwMCBiYXVkIChhY3R1YWwgcmF0ZTogMjg3NzcpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMzEyNTAgKDB4MDA4MDAwMDBVTCkgLyohPCAzMTI1MCBiYXVkICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMzg0MDAgKDB4MDA5RDAwMDBVTCkgLyohPCAzODQwMCBiYXVkIChhY3R1YWwgcmF0ZTogMzgzNjkpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkNTYwMDAgKDB4MDBFNTAwMDBVTCkgLyohPCA1NjAwMCBiYXVkIChhY3R1YWwgcmF0ZTogNTU5NDQpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkNTc2MDAgKDB4MDBFQjAwMDBVTCkgLyohPCA1NzYwMCBiYXVkIChhY3R1YWwgcmF0ZTogNTc1NTQpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkNzY4MDAgKDB4MDEzQTkwMDBVTCkgLyohPCA3NjgwMCBiYXVkIChhY3R1YWwgcmF0ZTogNzY5MjMpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTE1MjAwICgweDAxRDYwMDAwVUwpIC8qITwgMTE1MjAwIGJhdWQgKGFjdHVhbCByYXRlOiAxMTUxMDgpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjMwNDAwICgweDAzQjAwMDAwVUwpIC8qITwgMjMwNDAwIGJhdWQgKGFjdHVhbCByYXRlOiAyMzE4ODQpICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjUwMDAwICgweDA0MDAwMDAwVUwpIC8qITwgMjUwMDAwIGJhdWQgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ0NjA4MDAgKDB4MDc0MDAwMDBVTCkgLyohPCA0NjA4MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDQ1NzE0MykgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ5MjE2MDAgKDB4MEYwMDAwMDBVTCkgLyohPCA5MjE2MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDk0MTE3NikgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxTSAoMHgxMDAwMDAwMFVMKSAvKiE8IDFNZWdhIGJhdWQgKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVEVfUlhEX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEYXRhIHBvaW50ZXIgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogRGF0YSBwb2ludGVyICovDQorI2RlZmluZSBVQVJURV9SWERfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9SWERfUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBVQVJURV9SWERfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9SWERfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHJlY2VpdmUgYnVmZmVyICovDQorDQorLyogQml0cyA5Li4wIDogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gcmVjZWl2ZSBidWZmZXIgKi8NCisjZGVmaW5lIFVBUlRFX1JYRF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1JYRF9NQVhDTlRfTUFYQ05UX01zayAoMHgzRkZVTCA8PCBVQVJURV9SWERfTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9SWERfQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKw0KKy8qIEJpdHMgOS4uMCA6IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKyNkZWZpbmUgVUFSVEVfUlhEX0FNT1VOVF9BTU9VTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQU1PVU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUlhEX0FNT1VOVF9BTU9VTlRfTXNrICgweDNGRlVMIDw8IFVBUlRFX1JYRF9BTU9VTlRfQU1PVU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTU9VTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX1RYRF9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IERhdGEgcG9pbnRlciAqLw0KKyNkZWZpbmUgVUFSVEVfVFhEX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfVFhEX1BUUl9QVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgVUFSVEVfVFhEX1BUUl9QVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVEVfVFhEX01BWENOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiB0cmFuc21pdCBidWZmZXIgKi8NCisNCisvKiBCaXRzIDkuLjAgOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiB0cmFuc21pdCBidWZmZXIgKi8NCisjZGVmaW5lIFVBUlRFX1RYRF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1RYRF9NQVhDTlRfTUFYQ05UX01zayAoMHgzRkZVTCA8PCBVQVJURV9UWERfTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9UWERfQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKw0KKy8qIEJpdHMgOS4uMCA6IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKyNkZWZpbmUgVUFSVEVfVFhEX0FNT1VOVF9BTU9VTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQU1PVU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfVFhEX0FNT1VOVF9BTU9VTlRfTXNrICgweDNGRlVMIDw8IFVBUlRFX1RYRF9BTU9VTlRfQU1PVU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTU9VTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX0NPTkZJRyAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb25maWd1cmF0aW9uIG9mIHBhcml0eSBhbmQgaGFyZHdhcmUgZmxvdyBjb250cm9sICovDQorDQorLyogQml0IDQgOiBTdG9wIGJpdHMgKi8NCisjZGVmaW5lIFVBUlRFX0NPTkZJR19TVE9QX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1AgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9DT05GSUdfU1RPUF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0NPTkZJR19TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfQ09ORklHX1NUT1BfT25lICgwVUwpIC8qITwgT25lIHN0b3AgYml0ICovDQorI2RlZmluZSBVQVJURV9DT05GSUdfU1RPUF9Ud28gKDFVTCkgLyohPCBUd28gc3RvcCBiaXRzICovDQorDQorLyogQml0cyAzLi4xIDogUGFyaXR5ICovDQorI2RlZmluZSBVQVJURV9DT05GSUdfUEFSSVRZX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0NPTkZJR19QQVJJVFlfTXNrICgweDdVTCA8PCBVQVJURV9DT05GSUdfUEFSSVRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBQQVJJVFkgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9DT05GSUdfUEFSSVRZX0V4Y2x1ZGVkICgweDBVTCkgLyohPCBFeGNsdWRlIHBhcml0eSBiaXQgKi8NCisjZGVmaW5lIFVBUlRFX0NPTkZJR19QQVJJVFlfSW5jbHVkZWQgKDB4N1VMKSAvKiE8IEluY2x1ZGUgZXZlbiBwYXJpdHkgYml0ICovDQorDQorLyogQml0IDAgOiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8NCisjZGVmaW5lIFVBUlRFX0NPTkZJR19IV0ZDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEhXRkMgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9DT05GSUdfSFdGQ19Nc2sgKDB4MVVMIDw8IFVBUlRFX0NPTkZJR19IV0ZDX1BvcykgLyohPCBCaXQgbWFzayBvZiBIV0ZDIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfQ09ORklHX0hXRkNfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfQ09ORklHX0hXRkNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZWQgKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBVSUNSICovDQorLyogRGVzY3JpcHRpb246IFVzZXIgSW5mb3JtYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8NCisNCisvKiBSZWdpc3RlcjogVUlDUl9OUkZGVyAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgUmVzZXJ2ZWQgZm9yIE5vcmRpYyBmaXJtd2FyZSBkZXNpZ24gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUmVzZXJ2ZWQgZm9yIE5vcmRpYyBmaXJtd2FyZSBkZXNpZ24gKi8NCisjZGVmaW5lIFVJQ1JfTlJGRldfTlJGRldfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTlJGRlcgZmllbGQuICovDQorI2RlZmluZSBVSUNSX05SRkZXX05SRkZXX01zayAoMHhGRkZGRkZGRlVMIDw8IFVJQ1JfTlJGRldfTlJGRldfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5SRkZXIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVSUNSX05SRkhXICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBSZXNlcnZlZCBmb3IgTm9yZGljIGhhcmR3YXJlIGRlc2lnbiAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBSZXNlcnZlZCBmb3IgTm9yZGljIGhhcmR3YXJlIGRlc2lnbiAqLw0KKyNkZWZpbmUgVUlDUl9OUkZIV19OUkZIV19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBOUkZIVyBmaWVsZC4gKi8NCisjZGVmaW5lIFVJQ1JfTlJGSFdfTlJGSFdfTXNrICgweEZGRkZGRkZGVUwgPDwgVUlDUl9OUkZIV19OUkZIV19Qb3MpIC8qITwgQml0IG1hc2sgb2YgTlJGSFcgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVJQ1JfQ1VTVE9NRVIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIFJlc2VydmVkIGZvciBjdXN0b21lciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBSZXNlcnZlZCBmb3IgY3VzdG9tZXIgKi8NCisjZGVmaW5lIFVJQ1JfQ1VTVE9NRVJfQ1VTVE9NRVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ1VTVE9NRVIgZmllbGQuICovDQorI2RlZmluZSBVSUNSX0NVU1RPTUVSX0NVU1RPTUVSX01zayAoMHhGRkZGRkZGRlVMIDw8IFVJQ1JfQ1VTVE9NRVJfQ1VTVE9NRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENVU1RPTUVSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVSUNSX1BTRUxSRVNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgTWFwcGluZyBvZiB0aGUgblJFU0VUIGZ1bmN0aW9uICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgVUlDUl9QU0VMUkVTRVRfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVJQ1JfUFNFTFJFU0VUX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBVSUNSX1BTRUxSRVNFVF9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUlDUl9QU0VMUkVTRVRfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBVSUNSX1BTRUxSRVNFVF9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciBvbnRvIHdoaWNoIG5SRVNFVCBpcyBleHBvc2VkICovDQorI2RlZmluZSBVSUNSX1BTRUxSRVNFVF9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBVSUNSX1BTRUxSRVNFVF9QT1JUX01zayAoMHgzVUwgPDwgVUlDUl9QU0VMUkVTRVRfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyIG9mIFBPUlQgb250byB3aGljaCBuUkVTRVQgaXMgZXhwb3NlZCAqLw0KKyNkZWZpbmUgVUlDUl9QU0VMUkVTRVRfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVJQ1JfUFNFTFJFU0VUX1BJTl9Nc2sgKDB4MUZVTCA8PCBVSUNSX1BTRUxSRVNFVF9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVUlDUl9BUFBST1RFQ1QgKi8NCisvKiBEZXNjcmlwdGlvbjogQWNjZXNzIHBvcnQgcHJvdGVjdGlvbiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IEVuYWJsZSBvciBkaXNhYmxlIEFjY2VzcyBQb3J0IHByb3RlY3Rpb24uICovDQorI2RlZmluZSBVSUNSX0FQUFJPVEVDVF9QQUxMX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBBTEwgZmllbGQuICovDQorI2RlZmluZSBVSUNSX0FQUFJPVEVDVF9QQUxMX01zayAoMHhGRlVMIDw8IFVJQ1JfQVBQUk9URUNUX1BBTExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBBTEwgZmllbGQuICovDQorI2RlZmluZSBVSUNSX0FQUFJPVEVDVF9QQUxMX0VuYWJsZWQgKDB4MDBVTCkgLyohPCBFbmFibGUgKi8NCisjZGVmaW5lIFVJQ1JfQVBQUk9URUNUX1BBTExfRGlzYWJsZWQgKDB4RkZVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFVJQ1JfTkZDUElOUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZXR0aW5nIG9mIHBpbnMgZGVkaWNhdGVkIHRvIE5GQyBmdW5jdGlvbmFsaXR5OiBORkMgYW50ZW5uYSBvciBHUElPICovDQorDQorLyogQml0IDAgOiBTZXR0aW5nIG9mIHBpbnMgZGVkaWNhdGVkIHRvIE5GQyBmdW5jdGlvbmFsaXR5ICovDQorI2RlZmluZSBVSUNSX05GQ1BJTlNfUFJPVEVDVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQUk9URUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUlDUl9ORkNQSU5TX1BST1RFQ1RfTXNrICgweDFVTCA8PCBVSUNSX05GQ1BJTlNfUFJPVEVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJPVEVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVJQ1JfTkZDUElOU19QUk9URUNUX0Rpc2FibGVkICgwVUwpIC8qITwgT3BlcmF0aW9uIGFzIEdQSU8gcGlucy4gU2FtZSBwcm90ZWN0aW9uIGFzIG5vcm1hbCBHUElPIHBpbnMgKi8NCisjZGVmaW5lIFVJQ1JfTkZDUElOU19QUk9URUNUX05GQyAoMVVMKSAvKiE8IE9wZXJhdGlvbiBhcyBORkMgYW50ZW5uYSBwaW5zLiBDb25maWd1cmVzIHRoZSBwcm90ZWN0aW9uIGZvciBORkMgb3BlcmF0aW9uICovDQorDQorLyogUmVnaXN0ZXI6IFVJQ1JfRVhUU1VQUExZICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBleHRlcm5hbCBjaXJjdWl0cnkgdG8gYmUgc3VwcGxpZWQgZnJvbSBWREQgcGluLiBBcHBsaWNhYmxlIGluICdIaWdoIHZvbHRhZ2UgbW9kZScgb25seS4gKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBleHRlcm5hbCBjaXJjdWl0cnkgdG8gYmUgc3VwcGxpZWQgZnJvbSBWREQgcGluIChvdXRwdXQgb2YgUkVHMCBzdGFnZSkuICovDQorI2RlZmluZSBVSUNSX0VYVFNVUFBMWV9FWFRTVVBQTFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVhUU1VQUExZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUlDUl9FWFRTVVBQTFlfRVhUU1VQUExZX01zayAoMHgxVUwgPDwgVUlDUl9FWFRTVVBQTFlfRVhUU1VQUExZX1BvcykgLyohPCBCaXQgbWFzayBvZiBFWFRTVVBQTFkgZmllbGQuICovDQorI2RlZmluZSBVSUNSX0VYVFNVUFBMWV9FWFRTVVBQTFlfRGlzYWJsZWQgKDBVTCkgLyohPCBObyBjdXJyZW50IGNhbiBiZSBkcmF3biBmcm9tIHRoZSBWREQgcGluLiAqLw0KKyNkZWZpbmUgVUlDUl9FWFRTVVBQTFlfRVhUU1VQUExZX0VuYWJsZWQgKDFVTCkgLyohPCBJdCBpcyBhbGxvd2VkIHRvIHN1cHBseSBleHRlcm5hbCBjaXJjdWl0cnkgZnJvbSB0aGUgVkREIHBpbi4gKi8NCisNCisvKiBSZWdpc3RlcjogVUlDUl9SRUdPVVQwICovDQorLyogRGVzY3JpcHRpb246IEdQSU8gcmVmZXJlbmNlIHZvbHRhZ2UgLyBleHRlcm5hbCBvdXRwdXQgc3VwcGx5IHZvbHRhZ2UgaW4gJ0hpZ2ggdm9sdGFnZSBtb2RlJy4gKi8NCisNCisvKiBCaXRzIDIuLjAgOiBPdXRwdXQgdm9sdGFnZSBmcm9tIG9mIFJFRzAgcmVndWxhdG9yIHN0YWdlLiBUaGUgbWF4aW11bSBvdXRwdXQgdm9sdGFnZSBmcm9tIHRoaXMgc3RhZ2UgaXMgZ2l2ZW4gYXMgVkRESCAtIFZFWERJRi4gKi8NCisjZGVmaW5lIFVJQ1JfUkVHT1VUMF9WT1VUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFZPVVQgZmllbGQuICovDQorI2RlZmluZSBVSUNSX1JFR09VVDBfVk9VVF9Nc2sgKDB4N1VMIDw8IFVJQ1JfUkVHT1VUMF9WT1VUX1BvcykgLyohPCBCaXQgbWFzayBvZiBWT1VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUlDUl9SRUdPVVQwX1ZPVVRfMVY4ICgwVUwpIC8qITwgMS44IFYgKi8NCisjZGVmaW5lIFVJQ1JfUkVHT1VUMF9WT1VUXzJWMSAoMVVMKSAvKiE8IDIuMSBWICovDQorI2RlZmluZSBVSUNSX1JFR09VVDBfVk9VVF8yVjQgKDJVTCkgLyohPCAyLjQgViAqLw0KKyNkZWZpbmUgVUlDUl9SRUdPVVQwX1ZPVVRfMlY3ICgzVUwpIC8qITwgMi43IFYgKi8NCisjZGVmaW5lIFVJQ1JfUkVHT1VUMF9WT1VUXzNWMCAoNFVMKSAvKiE8IDMuMCBWICovDQorI2RlZmluZSBVSUNSX1JFR09VVDBfVk9VVF8zVjMgKDVVTCkgLyohPCAzLjMgViAqLw0KKyNkZWZpbmUgVUlDUl9SRUdPVVQwX1ZPVVRfREVGQVVMVCAoN1VMKSAvKiE8IERlZmF1bHQgdm9sdGFnZTogMS44IFYgKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBVU0JEICovDQorLyogRGVzY3JpcHRpb246IFVuaXZlcnNhbCBTZXJpYWwgQnVzIGRldmljZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCA0IDogU2hvcnRjdXQgYmV0d2VlbiBFTkRFUE9VVFswXSBldmVudCBhbmQgRVAwUkNWT1VUIHRhc2sgKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VOREVQT1VUMF9FUDBSQ1ZPVVRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQwX0VQMFJDVk9VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VOREVQT1VUMF9FUDBSQ1ZPVVRfTXNrICgweDFVTCA8PCBVU0JEX1NIT1JUU19FTkRFUE9VVDBfRVAwUkNWT1VUX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDBfRVAwUkNWT1VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRU5ERVBPVVQwX0VQMFJDVk9VVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VOREVQT1VUMF9FUDBSQ1ZPVVRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAzIDogU2hvcnRjdXQgYmV0d2VlbiBFTkRFUE9VVFswXSBldmVudCBhbmQgRVAwU1RBVFVTIHRhc2sgKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VOREVQT1VUMF9FUDBTVEFUVVNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQwX0VQMFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VOREVQT1VUMF9FUDBTVEFUVVNfTXNrICgweDFVTCA8PCBVU0JEX1NIT1JUU19FTkRFUE9VVDBfRVAwU1RBVFVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDBfRVAwU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRU5ERVBPVVQwX0VQMFNUQVRVU19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VOREVQT1VUMF9FUDBTVEFUVVNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAyIDogU2hvcnRjdXQgYmV0d2VlbiBFUDBEQVRBRE9ORSBldmVudCBhbmQgRVAwU1RBVFVTIHRhc2sgKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VQMERBVEFET05FX0VQMFNUQVRVU19Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBFUDBEQVRBRE9ORV9FUDBTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX1NIT1JUU19FUDBEQVRBRE9ORV9FUDBTVEFUVVNfTXNrICgweDFVTCA8PCBVU0JEX1NIT1JUU19FUDBEQVRBRE9ORV9FUDBTVEFUVVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQMERBVEFET05FX0VQMFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VQMERBVEFET05FX0VQMFNUQVRVU19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VQMERBVEFET05FX0VQMFNUQVRVU19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDEgOiBTaG9ydGN1dCBiZXR3ZWVuIEVQMERBVEFET05FIGV2ZW50IGFuZCBTVEFSVEVQT1VUWzBdIHRhc2sgKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VQMERBVEFET05FX1NUQVJURVBPVVQwX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQMERBVEFET05FX1NUQVJURVBPVVQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRVAwREFUQURPTkVfU1RBUlRFUE9VVDBfTXNrICgweDFVTCA8PCBVU0JEX1NIT1JUU19FUDBEQVRBRE9ORV9TVEFSVEVQT1VUMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVAwREFUQURPTkVfU1RBUlRFUE9VVDAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX1NIT1JUU19FUDBEQVRBRE9ORV9TVEFSVEVQT1VUMF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VQMERBVEFET05FX1NUQVJURVBPVVQwX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMCA6IFNob3J0Y3V0IGJldHdlZW4gRVAwREFUQURPTkUgZXZlbnQgYW5kIFNUQVJURVBJTlswXSB0YXNrICovDQorI2RlZmluZSBVU0JEX1NIT1JUU19FUDBEQVRBRE9ORV9TVEFSVEVQSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQMERBVEFET05FX1NUQVJURVBJTjAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX1NIT1JUU19FUDBEQVRBRE9ORV9TVEFSVEVQSU4wX01zayAoMHgxVUwgPDwgVVNCRF9TSE9SVFNfRVAwREFUQURPTkVfU1RBUlRFUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVAwREFUQURPTkVfU1RBUlRFUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VQMERBVEFET05FX1NUQVJURVBJTjBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBVU0JEX1NIT1JUU19FUDBEQVRBRE9ORV9TVEFSVEVQSU4wX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9JTlRFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjUgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEFDQ0VTU0ZBVUxUIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0FDQ0VTU0ZBVUxUX1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBBQ0NFU1NGQVVMVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fQUNDRVNTRkFVTFRfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOX0FDQ0VTU0ZBVUxUX1BvcykgLyohPCBCaXQgbWFzayBvZiBBQ0NFU1NGQVVMVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fQUNDRVNTRkFVTFRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0FDQ0VTU0ZBVUxUX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjQgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVQREFUQSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUERBVEFfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQREFUQSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRVBEQVRBX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FUERBVEFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQREFUQSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRVBEQVRBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUERBVEFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRVAwU0VUVVAgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRVAwU0VUVVBfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVQMFNFVFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUDBTRVRVUF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRVAwU0VUVVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQMFNFVFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUDBTRVRVUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRVAwU0VUVVBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVVNCRVZFTlQgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fVVNCRVZFTlRfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFVTQkVWRU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9VU0JFVkVOVF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fVVNCRVZFTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVTQkVWRU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9VU0JFVkVOVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fVVNCRVZFTlRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgU09GIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX1NPRl9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgU09GIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9TT0ZfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOX1NPRl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU09GIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9TT0ZfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVU0JEX0lOVEVOX1NPRl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRJU09PVVQgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ESVNPT1VUX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRJU09PVVQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VORElTT09VVF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ESVNPT1VUX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRJU09PVVQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VORElTT09VVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ESVNPT1VUX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTkgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzddIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUN19Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDdfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOX0VOREVQT1VUN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDdfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUN19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE4IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFs2XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDZfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUNiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQ2X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUE9VVDZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUNiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQ2X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDZfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbNV0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQ1X1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUNV9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBPVVQ1X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUNV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQ1X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTYgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzRdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUNF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDRfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOX0VOREVQT1VUNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUNF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE1IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFszXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDNfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQzX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUE9VVDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQzX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbMl0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQyX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUMl9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBPVVQyX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUMl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQyX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTMgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzFdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUMV9Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDFfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOX0VOREVQT1VUMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUMV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEyIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFswXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDBfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQwX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUE9VVDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQwX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRU5ESVNPSU4gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ESVNPSU5fUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORElTT0lOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRJU09JTl9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ESVNPSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORElTT0lOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRJU09JTl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ESVNPSU5fRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRVAwREFUQURPTkUgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRVAwREFUQURPTkVfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQMERBVEFET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUDBEQVRBRE9ORV9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRVAwREFUQURPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQMERBVEFET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUDBEQVRBRE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRVAwREFUQURPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzddIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU43X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElON19Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBJTjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElON19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjdfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzZdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU42X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElONl9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBJTjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElONl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjZfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzVdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU41X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElONV9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBJTjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElONV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzRdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU40X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElONF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBJTjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElONF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzNdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4zX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOM19Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBJTjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOM19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzJdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4yX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOMl9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBJTjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOMl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzFdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4xX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOMV9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBJTjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOMV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzBdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4wX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOMF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBJTjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOMF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX1NUQVJURURfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFVTQlJFU0VUIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX1VTQlJFU0VUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVTQlJFU0VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9VU0JSRVNFVF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fVVNCUkVTRVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVTQlJFU0VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9VU0JSRVNFVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fVVNCUkVTRVRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQUNDRVNTRkFVTFQgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfQUNDRVNTRkFVTFRfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIEFDQ0VTU0ZBVUxUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9BQ0NFU1NGQVVMVF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfQUNDRVNTRkFVTFRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFDQ0VTU0ZBVUxUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9BQ0NFU1NGQVVMVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0FDQ0VTU0ZBVUxUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0FDQ0VTU0ZBVUxUX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFUERBVEEgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRVBEQVRBX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBFUERBVEEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VQREFUQV9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRVBEQVRBX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUERBVEEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VQREFUQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VQREFUQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FUERBVEFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVQMFNFVFVQIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VQMFNFVFVQX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBFUDBTRVRVUCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRVAwU0VUVVBfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VQMFNFVFVQX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUDBTRVRVUCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRVAwU0VUVVBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FUDBTRVRVUF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FUDBTRVRVUF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVVNCRVZFTlQgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfVVNCRVZFTlRfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFVTQkVWRU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9VU0JFVkVOVF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfVVNCRVZFTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVTQkVWRU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9VU0JFVkVOVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1VTQkVWRU5UX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1VTQkVWRU5UX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTT0YgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfU09GX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBTT0YgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1NPRl9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfU09GX1BvcykgLyohPCBCaXQgbWFzayBvZiBTT0YgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1NPRl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1NPRl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9TT0ZfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORElTT09VVCBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRJU09PVVRfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORElTT09VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ESVNPT1VUX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRJU09PVVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORElTT09VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ESVNPT1VUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ESVNPT1VUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VORElTT09VVF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbN10gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ3X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUN19Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ3X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUN19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUN19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDdfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzZdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDZfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDZfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ2X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFs1XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDVfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUNSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ1X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUNSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ1X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ1X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbNF0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ0X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ0X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE1IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzNdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUM19Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDNfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VOREVQT1VUM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQzX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFsyXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDJfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQyX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQyX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQxX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMV9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRU5ERVBPVVQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzBdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMF9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDBfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQwX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRJU09JTiBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRJU09JTl9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ESVNPSU4gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VORElTT0lOX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRJU09JTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ESVNPSU4gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VORElTT0lOX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ESVNPSU5fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ESVNPSU5fU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVQMERBVEFET05FIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VQMERBVEFET05FX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBFUDBEQVRBRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRVAwREFUQURPTkVfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VQMERBVEFET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUDBEQVRBRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRVAwREFUQURPTkVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FUDBEQVRBRE9ORV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FUDBEQVRBRE9ORV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgOSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzddIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU43X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElON19Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRU5ERVBJTjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElON19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU43X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU43X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bNl0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjZfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU42X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRFUElONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU42X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjZfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjZfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTls1XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElONV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjVfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VOREVQSU41X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElONV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElONV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzRdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU40X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElONF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRU5ERVBJTjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElONF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU40X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU40X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bM10gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjNfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4zX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRFUElOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4zX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTlsyXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOMl9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjJfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VOREVQSU4yX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOMl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzFdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4xX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOMV9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRU5ERVBJTjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4xX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4xX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bMF0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjBfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4wX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRFUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4wX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjBfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9TVEFSVEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1NUQVJURURfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1NUQVJURURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVVNCUkVTRVQgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfVVNCUkVTRVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVVNCUkVTRVQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1VTQlJFU0VUX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9VU0JSRVNFVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVNCUkVTRVQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1VTQlJFU0VUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfVVNCUkVTRVRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfVVNCUkVTRVRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjUgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEFDQ0VTU0ZBVUxUIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0FDQ0VTU0ZBVUxUX1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBBQ0NFU1NGQVVMVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfQUNDRVNTRkFVTFRfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0FDQ0VTU0ZBVUxUX1BvcykgLyohPCBCaXQgbWFzayBvZiBBQ0NFU1NGQVVMVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfQUNDRVNTRkFVTFRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9BQ0NFU1NGQVVMVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9BQ0NFU1NGQVVMVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVQREFUQSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FUERBVEFfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQREFUQSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRVBEQVRBX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FUERBVEFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQREFUQSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRVBEQVRBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRVBEQVRBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VQREFUQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVQMFNFVFVQIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VQMFNFVFVQX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBFUDBTRVRVUCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRVAwU0VUVVBfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VQMFNFVFVQX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUDBTRVRVUCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRVAwU0VUVVBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FUDBTRVRVUF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FUDBTRVRVUF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFVTQkVWRU5UIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX1VTQkVWRU5UX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBVU0JFVkVOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfVVNCRVZFTlRfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX1VTQkVWRU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBVU0JFVkVOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfVVNCRVZFTlRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9VU0JFVkVOVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9VU0JFVkVOVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNPRiBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9TT0ZfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNPRiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfU09GX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9TT0ZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNPRiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfU09GX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfU09GX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX1NPRl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORElTT09VVCBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRJU09PVVRfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORElTT09VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ESVNPT1VUX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRJU09PVVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORElTT09VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ESVNPT1VUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ESVNPT1VUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VORElTT09VVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzddIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUN19Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDdfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDdfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ3X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbNl0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ2X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNl9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ2X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDZfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFs1XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDVfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUNSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ1X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUNSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ1X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ1X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzRdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDRfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ0X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbM10gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQzX1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUM19Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5DTFJfRU5ERVBPVVQzX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDNfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFsyXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDJfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQyX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQyX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzFdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMV9Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDFfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQxX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbMF0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQwX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5DTFJfRU5ERVBPVVQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDBfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDExIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkRJU09JTiBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRJU09JTl9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ESVNPSU4gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VORElTT0lOX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRJU09JTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ESVNPSU4gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VORElTT0lOX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ESVNPSU5fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ESVNPSU5fQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFUDBEQVRBRE9ORSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FUDBEQVRBRE9ORV9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgRVAwREFUQURPTkUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VQMERBVEFET05FX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FUDBEQVRBRE9ORV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVAwREFUQURPTkUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VQMERBVEFET05FX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRVAwREFUQURPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRVAwREFUQURPTkVfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bN10gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjdfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU43X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUElON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU43X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjdfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDggOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bNl0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjZfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU42X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUElONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU42X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjZfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjZfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bNV0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjVfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU41X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUElONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU41X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjVfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bNF0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU40X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUElONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU40X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bM10gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjNfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU4zX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUElOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU4zX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjNfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bMl0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjJfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU4yX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUElOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU4yX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjJfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bMV0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjFfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU4xX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUElOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU4xX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bMF0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjBfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU4wX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQSU4wX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjBfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfU1RBUlRFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9TVEFSVEVEX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9TVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9TVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9TVEFSVEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBVU0JSRVNFVCBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9VU0JSRVNFVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBVU0JSRVNFVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfVVNCUkVTRVRfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX1VTQlJFU0VUX1BvcykgLyohPCBCaXQgbWFzayBvZiBVU0JSRVNFVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfVVNCUkVTRVRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9VU0JSRVNFVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9VU0JSRVNFVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9FVkVOVENBVVNFICovDQorLyogRGVzY3JpcHRpb246IERldGFpbHMgb24gZXZlbnQgdGhhdCBjYXVzZWQgdGhlIFVTQkVWRU5UIGV2ZW50ICovDQorDQorLyogQml0IDExIDogV3JhcHBlciBoYXMgcmUtaW5pdGlhbGl6ZWQgU0ZScyB0byB0aGUgcHJvcGVyIHZhbHVlcy4gTUFDIGlzIHJlYWR5IGZvciBub3JtYWwgb3BlcmF0aW9uLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VWRU5UQ0FVU0VfUkVBRFlfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FVkVOVENBVVNFX1JFQURZX01zayAoMHgxVUwgPDwgVVNCRF9FVkVOVENBVVNFX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVZFTlRDQVVTRV9SRUFEWV9Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IFVTQkVWRU5UIHdhcyBub3QgaXNzdWVkIGR1ZSB0byBVU0JEIHBlcmlwaGVyYWwgcmVhZHkgKi8NCisjZGVmaW5lIFVTQkRfRVZFTlRDQVVTRV9SRUFEWV9SZWFkeSAoMVVMKSAvKiE8IFVTQkQgcGVyaXBoZXJhbCBpcyByZWFkeSAqLw0KKw0KKy8qIEJpdCA5IDogU2lnbmFscyB0aGF0IGEgUkVTVU1FIGNvbmRpdGlvbiAoSyBzdGF0ZSBvciBhY3Rpdml0eSByZXN0YXJ0KSBoYXMgYmVlbiBkZXRlY3RlZCBvbiB0aGUgVVNCIGxpbmVzLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VWRU5UQ0FVU0VfUkVTVU1FX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFU1VNRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVZFTlRDQVVTRV9SRVNVTUVfTXNrICgweDFVTCA8PCBVU0JEX0VWRU5UQ0FVU0VfUkVTVU1FX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNVTUUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VWRU5UQ0FVU0VfUkVTVU1FX05vdERldGVjdGVkICgwVUwpIC8qITwgUmVzdW1lIG5vdCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgVVNCRF9FVkVOVENBVVNFX1JFU1VNRV9EZXRlY3RlZCAoMVVMKSAvKiE8IFJlc3VtZSBkZXRlY3RlZCAqLw0KKw0KKy8qIEJpdCA4IDogU2lnbmFscyB0aGF0IHRoZSBVU0IgbGluZXMgaGF2ZSBiZWVuIHNlZW4gaWRsZSBsb25nIGVub3VnaCBmb3IgdGhlIGRldmljZSB0byBlbnRlciBzdXNwZW5kLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VWRU5UQ0FVU0VfU1VTUEVORF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBTVVNQRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FVkVOVENBVVNFX1NVU1BFTkRfTXNrICgweDFVTCA8PCBVU0JEX0VWRU5UQ0FVU0VfU1VTUEVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1VTUEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVZFTlRDQVVTRV9TVVNQRU5EX05vdERldGVjdGVkICgwVUwpIC8qITwgU3VzcGVuZCBub3QgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFVTQkRfRVZFTlRDQVVTRV9TVVNQRU5EX0RldGVjdGVkICgxVUwpIC8qITwgU3VzcGVuZCBkZXRlY3RlZCAqLw0KKw0KKy8qIEJpdCAwIDogQ1JDIGVycm9yIHdhcyBkZXRlY3RlZCBvbiBpc29jaHJvbm91cyBPVVQgZW5kcG9pbnQgOC4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FVkVOVENBVVNFX0lTT09VVENSQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBJU09PVVRDUkMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VWRU5UQ0FVU0VfSVNPT1VUQ1JDX01zayAoMHgxVUwgPDwgVVNCRF9FVkVOVENBVVNFX0lTT09VVENSQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgSVNPT1VUQ1JDIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FVkVOVENBVVNFX0lTT09VVENSQ19Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IE5vIGVycm9yIGRldGVjdGVkICovDQorI2RlZmluZSBVU0JEX0VWRU5UQ0FVU0VfSVNPT1VUQ1JDX0RldGVjdGVkICgxVUwpIC8qITwgRXJyb3IgZGV0ZWN0ZWQgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9CVVNTVEFURSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQcm92aWRlcyB0aGUgbG9naWMgc3RhdGUgb2YgdGhlIEQrIGFuZCBELSBsaW5lcyAqLw0KKw0KKy8qIEJpdCAxIDogU3RhdGUgb2YgdGhlIEQrIGxpbmUgKi8NCisjZGVmaW5lIFVTQkRfQlVTU1RBVEVfRFBfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRFAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0JVU1NUQVRFX0RQX01zayAoMHgxVUwgPDwgVVNCRF9CVVNTVEFURV9EUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRFAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0JVU1NUQVRFX0RQX0xvdyAoMFVMKSAvKiE8IExvdyAqLw0KKyNkZWZpbmUgVVNCRF9CVVNTVEFURV9EUF9IaWdoICgxVUwpIC8qITwgSGlnaCAqLw0KKw0KKy8qIEJpdCAwIDogU3RhdGUgb2YgdGhlIEQtIGxpbmUgKi8NCisjZGVmaW5lIFVTQkRfQlVTU1RBVEVfRE1fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRE0gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0JVU1NUQVRFX0RNX01zayAoMHgxVUwgPDwgVVNCRF9CVVNTVEFURV9ETV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRE0gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0JVU1NUQVRFX0RNX0xvdyAoMFVMKSAvKiE8IExvdyAqLw0KKyNkZWZpbmUgVVNCRF9CVVNTVEFURV9ETV9IaWdoICgxVUwpIC8qITwgSGlnaCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0hBTFRFRF9FUElOICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBJTiBlbmRwb2ludCBoYWx0ZWQgc3RhdHVzLiBDYW4gYmUgdXNlZCBhcyBpcyBhcyByZXNwb25zZSB0byBhIEdldFN0YXR1cygpIHJlcXVlc3QgdG8gZW5kcG9pbnQuICovDQorDQorLyogQml0cyAxNS4uMCA6IElOIGVuZHBvaW50IGhhbHRlZCBzdGF0dXMuIENhbiBiZSB1c2VkIGFzIGlzIGFzIHJlc3BvbnNlIHRvIGEgR2V0U3RhdHVzKCkgcmVxdWVzdCB0byBlbmRwb2ludC4gKi8NCisjZGVmaW5lIFVTQkRfSEFMVEVEX0VQSU5fR0VUU1RBVFVTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEdFVFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSEFMVEVEX0VQSU5fR0VUU1RBVFVTX01zayAoMHhGRkZGVUwgPDwgVVNCRF9IQUxURURfRVBJTl9HRVRTVEFUVVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEdFVFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSEFMVEVEX0VQSU5fR0VUU1RBVFVTX05vdEhhbHRlZCAoMFVMKSAvKiE8IEVuZHBvaW50IGlzIG5vdCBoYWx0ZWQgKi8NCisjZGVmaW5lIFVTQkRfSEFMVEVEX0VQSU5fR0VUU1RBVFVTX0hhbHRlZCAoMVVMKSAvKiE8IEVuZHBvaW50IGlzIGhhbHRlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0hBTFRFRF9FUE9VVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgT1VUIGVuZHBvaW50IGhhbHRlZCBzdGF0dXMuIENhbiBiZSB1c2VkIGFzIGlzIGFzIHJlc3BvbnNlIHRvIGEgR2V0U3RhdHVzKCkgcmVxdWVzdCB0byBlbmRwb2ludC4gKi8NCisNCisvKiBCaXRzIDE1Li4wIDogT1VUIGVuZHBvaW50IGhhbHRlZCBzdGF0dXMuIENhbiBiZSB1c2VkIGFzIGlzIGFzIHJlc3BvbnNlIHRvIGEgR2V0U3RhdHVzKCkgcmVxdWVzdCB0byBlbmRwb2ludC4gKi8NCisjZGVmaW5lIFVTQkRfSEFMVEVEX0VQT1VUX0dFVFNUQVRVU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBHRVRTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0hBTFRFRF9FUE9VVF9HRVRTVEFUVVNfTXNrICgweEZGRkZVTCA8PCBVU0JEX0hBTFRFRF9FUE9VVF9HRVRTVEFUVVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEdFVFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSEFMVEVEX0VQT1VUX0dFVFNUQVRVU19Ob3RIYWx0ZWQgKDBVTCkgLyohPCBFbmRwb2ludCBpcyBub3QgaGFsdGVkICovDQorI2RlZmluZSBVU0JEX0hBTFRFRF9FUE9VVF9HRVRTVEFUVVNfSGFsdGVkICgxVUwpIC8qITwgRW5kcG9pbnQgaXMgaGFsdGVkICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfRVBTVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gd2hpY2ggZW5kcG9pbnQncyBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgKi8NCisNCisvKiBCaXQgMjQgOiBFbmRwb2ludCdzIEVhc3lETUEgcmVnaXN0ZXJzIGNhcHR1cmVkIHN0YXRlLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUOF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQ4IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDhfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQT1VUOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQ4IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDhfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDhfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMjMgOiBFbmRwb2ludCdzIEVhc3lETUEgcmVnaXN0ZXJzIGNhcHR1cmVkIHN0YXRlLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUN19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDdfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQT1VUN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDdfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDdfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMjIgOiBFbmRwb2ludCdzIEVhc3lETUEgcmVnaXN0ZXJzIGNhcHR1cmVkIHN0YXRlLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDZfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQT1VUNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDZfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDZfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMjEgOiBFbmRwb2ludCdzIEVhc3lETUEgcmVnaXN0ZXJzIGNhcHR1cmVkIHN0YXRlLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDVfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQT1VUNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDVfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDVfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMjAgOiBFbmRwb2ludCdzIEVhc3lETUEgcmVnaXN0ZXJzIGNhcHR1cmVkIHN0YXRlLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDRfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQT1VUNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDRfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDRfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMTkgOiBFbmRwb2ludCdzIEVhc3lETUEgcmVnaXN0ZXJzIGNhcHR1cmVkIHN0YXRlLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUM19Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDNfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQT1VUM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDNfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDNfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMTggOiBFbmRwb2ludCdzIEVhc3lETUEgcmVnaXN0ZXJzIGNhcHR1cmVkIHN0YXRlLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDJfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQT1VUMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDJfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDJfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMTcgOiBFbmRwb2ludCdzIEVhc3lETUEgcmVnaXN0ZXJzIGNhcHR1cmVkIHN0YXRlLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMV9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDFfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQT1VUMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDFfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDFfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMTYgOiBFbmRwb2ludCdzIEVhc3lETUEgcmVnaXN0ZXJzIGNhcHR1cmVkIHN0YXRlLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDBfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQT1VUMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDBfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUE9VVDBfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgOCA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjggZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU44X01zayAoMHgxVUwgPDwgVVNCRF9FUFNUQVRVU19FUElOOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjggZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU44X05vRGF0YSAoMFVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgbm90IGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjhfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgNyA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU43X01zayAoMHgxVUwgPDwgVVNCRF9FUFNUQVRVU19FUElON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU43X05vRGF0YSAoMFVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgbm90IGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjdfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgNiA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU42X01zayAoMHgxVUwgPDwgVVNCRF9FUFNUQVRVU19FUElONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU42X05vRGF0YSAoMFVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgbm90IGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjZfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgNSA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU41X01zayAoMHgxVUwgPDwgVVNCRF9FUFNUQVRVU19FUElONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU41X05vRGF0YSAoMFVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgbm90IGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjVfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgNCA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU40X01zayAoMHgxVUwgPDwgVVNCRF9FUFNUQVRVU19FUElONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU40X05vRGF0YSAoMFVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgbm90IGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjRfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMyA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU4zX01zayAoMHgxVUwgPDwgVVNCRF9FUFNUQVRVU19FUElOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU4zX05vRGF0YSAoMFVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgbm90IGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjNfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMiA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU4yX01zayAoMHgxVUwgPDwgVVNCRF9FUFNUQVRVU19FUElOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU4yX05vRGF0YSAoMFVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgbm90IGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjJfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMSA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU4xX01zayAoMHgxVUwgPDwgVVNCRF9FUFNUQVRVU19FUElOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU4xX05vRGF0YSAoMFVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgbm90IGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjFfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMCA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU4wX01zayAoMHgxVUwgPDwgVVNCRF9FUFNUQVRVU19FUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQSU4wX05vRGF0YSAoMFVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgbm90IGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjBfRGF0YURvbmUgKDFVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIGJlZW4gY2FwdHVyZWQgZm9yIHRoaXMgZW5kcG9pbnQgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9FUERBVEFTVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gd2hpY2ggZW5kcG9pbnQocykgYW4gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgaGFzIG9jY3VycmVkIChFUERBVEEgZXZlbnQpICovDQorDQorLyogQml0IDIzIDogQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBPVVQgZW5kcG9pbnQuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUN19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ3X01zayAoMHgxVUwgPDwgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ3X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDdfTm90U3RhcnRlZCAoMFVMKSAvKiE8IE5vIGFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUN19TdGFydGVkICgxVUwpIC8qITwgQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCBoYXMgb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgMjIgOiBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIE9VVCBlbmRwb2ludC4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ2X1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDZfTXNrICgweDFVTCA8PCBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQT1VUNiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUNl9Ob3RTdGFydGVkICgwVUwpIC8qITwgTm8gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ2X1N0YXJ0ZWQgKDFVTCkgLyohPCBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50IGhhcyBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCAyMSA6IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgT1VUIGVuZHBvaW50LiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDVfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQT1VUNSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUNV9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ1X05vdFN0YXJ0ZWQgKDBVTCkgLyohPCBObyBhY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDVfU3RhcnRlZCAoMVVMKSAvKiE8IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgaGFzIG9jY3VycmVkICovDQorDQorLyogQml0IDIwIDogQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBPVVQgZW5kcG9pbnQuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUNF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ0X01zayAoMHgxVUwgPDwgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ0X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDRfTm90U3RhcnRlZCAoMFVMKSAvKiE8IE5vIGFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUNF9TdGFydGVkICgxVUwpIC8qITwgQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCBoYXMgb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgMTkgOiBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIE9VVCBlbmRwb2ludC4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQzX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDNfTXNrICgweDFVTCA8PCBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQT1VUMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUM19Ob3RTdGFydGVkICgwVUwpIC8qITwgTm8gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQzX1N0YXJ0ZWQgKDFVTCkgLyohPCBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50IGhhcyBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCAxOCA6IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgT1VUIGVuZHBvaW50LiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDJfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQT1VUMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUMl9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQyX05vdFN0YXJ0ZWQgKDBVTCkgLyohPCBObyBhY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDJfU3RhcnRlZCAoMVVMKSAvKiE8IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgaGFzIG9jY3VycmVkICovDQorDQorLyogQml0IDE3IDogQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBPVVQgZW5kcG9pbnQuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUMV9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQxX01zayAoMHgxVUwgPDwgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDFfTm90U3RhcnRlZCAoMFVMKSAvKiE8IE5vIGFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUMV9TdGFydGVkICgxVUwpIC8qITwgQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCBoYXMgb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgNyA6IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgSU4gZW5kcG9pbnQuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU43X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjdfTXNrICgweDFVTCA8PCBVU0JEX0VQREFUQVNUQVRVU19FUElON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElON19Ob3REb25lICgwVUwpIC8qITwgTm8gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjdfRGF0YURvbmUgKDFVTCkgLyohPCBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50IGhhcyBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCA2IDogQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBJTiBlbmRwb2ludC4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElONl9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBEQVRBU1RBVFVTX0VQSU42X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU42X05vdERvbmUgKDBVTCkgLyohPCBObyBhY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElONl9EYXRhRG9uZSAoMVVMKSAvKiE8IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgaGFzIG9jY3VycmVkICovDQorDQorLyogQml0IDUgOiBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIElOIGVuZHBvaW50LiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElONV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU41X01zayAoMHgxVUwgPDwgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjVfTm90RG9uZSAoMFVMKSAvKiE8IE5vIGFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU41X0RhdGFEb25lICgxVUwpIC8qITwgQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCBoYXMgb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgNCA6IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgSU4gZW5kcG9pbnQuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU40X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjRfTXNrICgweDFVTCA8PCBVU0JEX0VQREFUQVNUQVRVU19FUElONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElONF9Ob3REb25lICgwVUwpIC8qITwgTm8gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjRfRGF0YURvbmUgKDFVTCkgLyohPCBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50IGhhcyBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCAzIDogQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBJTiBlbmRwb2ludC4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElOM19Nc2sgKDB4MVVMIDw8IFVTQkRfRVBEQVRBU1RBVFVTX0VQSU4zX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU4zX05vdERvbmUgKDBVTCkgLyohPCBObyBhY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElOM19EYXRhRG9uZSAoMVVMKSAvKiE8IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgaGFzIG9jY3VycmVkICovDQorDQorLyogQml0IDIgOiBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIElOIGVuZHBvaW50LiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElOMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU4yX01zayAoMHgxVUwgPDwgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjJfTm90RG9uZSAoMFVMKSAvKiE8IE5vIGFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU4yX0RhdGFEb25lICgxVUwpIC8qITwgQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCBoYXMgb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgMSA6IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgSU4gZW5kcG9pbnQuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU4xX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjFfTXNrICgweDFVTCA8PCBVU0JEX0VQREFUQVNUQVRVU19FUElOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElOMV9Ob3REb25lICgwVUwpIC8qITwgTm8gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjFfRGF0YURvbmUgKDFVTCkgLyohPCBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50IGhhcyBvY2N1cnJlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX1VTQkFERFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGV2aWNlIFVTQiBhZGRyZXNzICovDQorDQorLyogQml0cyA2Li4wIDogRGV2aWNlIFVTQiBhZGRyZXNzICovDQorI2RlZmluZSBVU0JEX1VTQkFERFJfQUREUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9VU0JBRERSX0FERFJfTXNrICgweDdGVUwgPDwgVVNCRF9VU0JBRERSX0FERFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfQk1SRVFVRVNUVFlQRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBTRVRVUCBkYXRhLCBieXRlIDAsIGJtUmVxdWVzdFR5cGUgKi8NCisNCisvKiBCaXQgNyA6IERhdGEgdHJhbnNmZXIgZGlyZWN0aW9uICovDQorI2RlZmluZSBVU0JEX0JNUkVRVUVTVFRZUEVfRElSRUNUSU9OX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIERJUkVDVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9ESVJFQ1RJT05fTXNrICgweDFVTCA8PCBVU0JEX0JNUkVRVUVTVFRZUEVfRElSRUNUSU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBESVJFQ1RJT04gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0JNUkVRVUVTVFRZUEVfRElSRUNUSU9OX0hvc3RUb0RldmljZSAoMFVMKSAvKiE8IEhvc3QtdG8tZGV2aWNlICovDQorI2RlZmluZSBVU0JEX0JNUkVRVUVTVFRZUEVfRElSRUNUSU9OX0RldmljZVRvSG9zdCAoMVVMKSAvKiE8IERldmljZS10by1ob3N0ICovDQorDQorLyogQml0cyA2Li41IDogRGF0YSB0cmFuc2ZlciB0eXBlICovDQorI2RlZmluZSBVU0JEX0JNUkVRVUVTVFRZUEVfVFlQRV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBUWVBFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9CTVJFUVVFU1RUWVBFX1RZUEVfTXNrICgweDNVTCA8PCBVU0JEX0JNUkVRVUVTVFRZUEVfVFlQRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFlQRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9UWVBFX1N0YW5kYXJkICgwVUwpIC8qITwgU3RhbmRhcmQgKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9UWVBFX0NsYXNzICgxVUwpIC8qITwgQ2xhc3MgKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9UWVBFX1ZlbmRvciAoMlVMKSAvKiE8IFZlbmRvciAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IERhdGEgdHJhbnNmZXIgdHlwZSAqLw0KKyNkZWZpbmUgVVNCRF9CTVJFUVVFU1RUWVBFX1JFQ0lQSUVOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUNJUElFTlQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0JNUkVRVUVTVFRZUEVfUkVDSVBJRU5UX01zayAoMHgxRlVMIDw8IFVTQkRfQk1SRVFVRVNUVFlQRV9SRUNJUElFTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQ0lQSUVOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9SRUNJUElFTlRfRGV2aWNlICgwVUwpIC8qITwgRGV2aWNlICovDQorI2RlZmluZSBVU0JEX0JNUkVRVUVTVFRZUEVfUkVDSVBJRU5UX0ludGVyZmFjZSAoMVVMKSAvKiE8IEludGVyZmFjZSAqLw0KKyNkZWZpbmUgVVNCRF9CTVJFUVVFU1RUWVBFX1JFQ0lQSUVOVF9FbmRwb2ludCAoMlVMKSAvKiE8IEVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0JNUkVRVUVTVFRZUEVfUkVDSVBJRU5UX090aGVyICgzVUwpIC8qITwgT3RoZXIgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9CUkVRVUVTVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTRVRVUCBkYXRhLCBieXRlIDEsIGJSZXF1ZXN0ICovDQorDQorLyogQml0cyA3Li4wIDogU0VUVVAgZGF0YSwgYnl0ZSAxLCBiUmVxdWVzdC4gVmFsdWVzIHByb3ZpZGVzIGZvciBzdGFuZGFyZCByZXF1ZXN0cyBvbmx5LCB1c2VyIG11c3QgaW1wbGVtZW50IENsYXNzIGFuZCBWZW5kb3IgdmFsdWVzLiAqLw0KKyNkZWZpbmUgVVNCRF9CUkVRVUVTVF9CUkVRVUVTVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCUkVRVUVTVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfQlJFUVVFU1RfQlJFUVVFU1RfTXNrICgweEZGVUwgPDwgVVNCRF9CUkVRVUVTVF9CUkVRVUVTVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQlJFUVVFU1QgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0JSRVFVRVNUX0JSRVFVRVNUX1NURF9HRVRfU1RBVFVTICgwVUwpIC8qITwgU3RhbmRhcmQgcmVxdWVzdCBHRVRfU1RBVFVTICovDQorI2RlZmluZSBVU0JEX0JSRVFVRVNUX0JSRVFVRVNUX1NURF9DTEVBUl9GRUFUVVJFICgxVUwpIC8qITwgU3RhbmRhcmQgcmVxdWVzdCBDTEVBUl9GRUFUVVJFICovDQorI2RlZmluZSBVU0JEX0JSRVFVRVNUX0JSRVFVRVNUX1NURF9TRVRfRkVBVFVSRSAoM1VMKSAvKiE8IFN0YW5kYXJkIHJlcXVlc3QgU0VUX0ZFQVRVUkUgKi8NCisjZGVmaW5lIFVTQkRfQlJFUVVFU1RfQlJFUVVFU1RfU1REX1NFVF9BRERSRVNTICg1VUwpIC8qITwgU3RhbmRhcmQgcmVxdWVzdCBTRVRfQUREUkVTUyAqLw0KKyNkZWZpbmUgVVNCRF9CUkVRVUVTVF9CUkVRVUVTVF9TVERfR0VUX0RFU0NSSVBUT1IgKDZVTCkgLyohPCBTdGFuZGFyZCByZXF1ZXN0IEdFVF9ERVNDUklQVE9SICovDQorI2RlZmluZSBVU0JEX0JSRVFVRVNUX0JSRVFVRVNUX1NURF9TRVRfREVTQ1JJUFRPUiAoN1VMKSAvKiE8IFN0YW5kYXJkIHJlcXVlc3QgU0VUX0RFU0NSSVBUT1IgKi8NCisjZGVmaW5lIFVTQkRfQlJFUVVFU1RfQlJFUVVFU1RfU1REX0dFVF9DT05GSUdVUkFUSU9OICg4VUwpIC8qITwgU3RhbmRhcmQgcmVxdWVzdCBHRVRfQ09ORklHVVJBVElPTiAqLw0KKyNkZWZpbmUgVVNCRF9CUkVRVUVTVF9CUkVRVUVTVF9TVERfU0VUX0NPTkZJR1VSQVRJT04gKDlVTCkgLyohPCBTdGFuZGFyZCByZXF1ZXN0IFNFVF9DT05GSUdVUkFUSU9OICovDQorI2RlZmluZSBVU0JEX0JSRVFVRVNUX0JSRVFVRVNUX1NURF9HRVRfSU5URVJGQUNFICgxMFVMKSAvKiE8IFN0YW5kYXJkIHJlcXVlc3QgR0VUX0lOVEVSRkFDRSAqLw0KKyNkZWZpbmUgVVNCRF9CUkVRVUVTVF9CUkVRVUVTVF9TVERfU0VUX0lOVEVSRkFDRSAoMTFVTCkgLyohPCBTdGFuZGFyZCByZXF1ZXN0IFNFVF9JTlRFUkZBQ0UgKi8NCisjZGVmaW5lIFVTQkRfQlJFUVVFU1RfQlJFUVVFU1RfU1REX1NZTkNIX0ZSQU1FICgxMlVMKSAvKiE8IFN0YW5kYXJkIHJlcXVlc3QgU1lOQ0hfRlJBTUUgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9XVkFMVUVMICovDQorLyogRGVzY3JpcHRpb246IFNFVFVQIGRhdGEsIGJ5dGUgMiwgTFNCIG9mIHdWYWx1ZSAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFNFVFVQIGRhdGEsIGJ5dGUgMiwgTFNCIG9mIHdWYWx1ZSAqLw0KKyNkZWZpbmUgVVNCRF9XVkFMVUVMX1dWQUxVRUxfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgV1ZBTFVFTCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfV1ZBTFVFTF9XVkFMVUVMX01zayAoMHhGRlVMIDw8IFVTQkRfV1ZBTFVFTF9XVkFMVUVMX1BvcykgLyohPCBCaXQgbWFzayBvZiBXVkFMVUVMIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX1dWQUxVRUggKi8NCisvKiBEZXNjcmlwdGlvbjogU0VUVVAgZGF0YSwgYnl0ZSAzLCBNU0Igb2Ygd1ZhbHVlICovDQorDQorLyogQml0cyA3Li4wIDogU0VUVVAgZGF0YSwgYnl0ZSAzLCBNU0Igb2Ygd1ZhbHVlICovDQorI2RlZmluZSBVU0JEX1dWQUxVRUhfV1ZBTFVFSF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBXVkFMVUVIIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9XVkFMVUVIX1dWQUxVRUhfTXNrICgweEZGVUwgPDwgVVNCRF9XVkFMVUVIX1dWQUxVRUhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdWQUxVRUggZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfV0lOREVYTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTRVRVUCBkYXRhLCBieXRlIDQsIExTQiBvZiB3SW5kZXggKi8NCisNCisvKiBCaXRzIDcuLjAgOiBTRVRVUCBkYXRhLCBieXRlIDQsIExTQiBvZiB3SW5kZXggKi8NCisjZGVmaW5lIFVTQkRfV0lOREVYTF9XSU5ERVhMX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFdJTkRFWEwgZmllbGQuICovDQorI2RlZmluZSBVU0JEX1dJTkRFWExfV0lOREVYTF9Nc2sgKDB4RkZVTCA8PCBVU0JEX1dJTkRFWExfV0lOREVYTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgV0lOREVYTCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9XSU5ERVhIICovDQorLyogRGVzY3JpcHRpb246IFNFVFVQIGRhdGEsIGJ5dGUgNSwgTVNCIG9mIHdJbmRleCAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFNFVFVQIGRhdGEsIGJ5dGUgNSwgTVNCIG9mIHdJbmRleCAqLw0KKyNkZWZpbmUgVVNCRF9XSU5ERVhIX1dJTkRFWEhfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgV0lOREVYSCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfV0lOREVYSF9XSU5ERVhIX01zayAoMHhGRlVMIDw8IFVTQkRfV0lOREVYSF9XSU5ERVhIX1BvcykgLyohPCBCaXQgbWFzayBvZiBXSU5ERVhIIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX1dMRU5HVEhMICovDQorLyogRGVzY3JpcHRpb246IFNFVFVQIGRhdGEsIGJ5dGUgNiwgTFNCIG9mIHdMZW5ndGggKi8NCisNCisvKiBCaXRzIDcuLjAgOiBTRVRVUCBkYXRhLCBieXRlIDYsIExTQiBvZiB3TGVuZ3RoICovDQorI2RlZmluZSBVU0JEX1dMRU5HVEhMX1dMRU5HVEhMX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFdMRU5HVEhMIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9XTEVOR1RITF9XTEVOR1RITF9Nc2sgKDB4RkZVTCA8PCBVU0JEX1dMRU5HVEhMX1dMRU5HVEhMX1BvcykgLyohPCBCaXQgbWFzayBvZiBXTEVOR1RITCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9XTEVOR1RISCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTRVRVUCBkYXRhLCBieXRlIDcsIE1TQiBvZiB3TGVuZ3RoICovDQorDQorLyogQml0cyA3Li4wIDogU0VUVVAgZGF0YSwgYnl0ZSA3LCBNU0Igb2Ygd0xlbmd0aCAqLw0KKyNkZWZpbmUgVVNCRF9XTEVOR1RISF9XTEVOR1RISF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBXTEVOR1RISCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfV0xFTkdUSEhfV0xFTkdUSEhfTXNrICgweEZGVUwgPDwgVVNCRF9XTEVOR1RISF9XTEVOR1RISF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgV0xFTkdUSEggZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfU0laRV9FUE9VVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgQW1vdW50IG9mIGJ5dGVzIHJlY2VpdmVkIGxhc3QgaW4gdGhlIGRhdGEgc3RhZ2Ugb2YgdGhpcyBPVVQgZW5kcG9pbnQgKi8NCisNCisvKiBCaXRzIDYuLjAgOiBBbW91bnQgb2YgYnl0ZXMgcmVjZWl2ZWQgbGFzdCBpbiB0aGUgZGF0YSBzdGFnZSBvZiB0aGlzIE9VVCBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9TSVpFX0VQT1VUX1NJWkVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU0laRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfU0laRV9FUE9VVF9TSVpFX01zayAoMHg3RlVMIDw8IFVTQkRfU0laRV9FUE9VVF9TSVpFX1BvcykgLyohPCBCaXQgbWFzayBvZiBTSVpFIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX1NJWkVfSVNPT1VUICovDQorLyogRGVzY3JpcHRpb246IEFtb3VudCBvZiBieXRlcyByZWNlaXZlZCBsYXN0IG9uIHRoaXMgaXNvIE9VVCBkYXRhIGVuZHBvaW50ICovDQorDQorLyogQml0IDE2IDogWmVyby1sZW5ndGggZGF0YSBwYWNrZXQgcmVjZWl2ZWQgKi8NCisjZGVmaW5lIFVTQkRfU0laRV9JU09PVVRfWkVST19Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgWkVSTyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfU0laRV9JU09PVVRfWkVST19Nc2sgKDB4MVVMIDw8IFVTQkRfU0laRV9JU09PVVRfWkVST19Qb3MpIC8qITwgQml0IG1hc2sgb2YgWkVSTyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfU0laRV9JU09PVVRfWkVST19Ob3JtYWwgKDBVTCkgLyohPCBObyB6ZXJvLWxlbmd0aCBkYXRhIHJlY2VpdmVkLCB1c2UgdmFsdWUgaW4gU0laRSAqLw0KKyNkZWZpbmUgVVNCRF9TSVpFX0lTT09VVF9aRVJPX1plcm9EYXRhICgxVUwpIC8qITwgWmVyby1sZW5ndGggZGF0YSByZWNlaXZlZCwgaWdub3JlIHZhbHVlIGluIFNJWkUgKi8NCisNCisvKiBCaXRzIDkuLjAgOiBBbW91bnQgb2YgYnl0ZXMgcmVjZWl2ZWQgbGFzdCBvbiB0aGlzIGlzbyBPVVQgZGF0YSBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9TSVpFX0lTT09VVF9TSVpFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNJWkUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX1NJWkVfSVNPT1VUX1NJWkVfTXNrICgweDNGRlVMIDw8IFVTQkRfU0laRV9JU09PVVRfU0laRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0laRSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIFVTQiAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIFVTQiAqLw0KKyNkZWZpbmUgVVNCRF9FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRU5BQkxFX0VOQUJMRV9Nc2sgKDB4MVVMIDw8IFVTQkRfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgVVNCIHBlcmlwaGVyYWwgaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfRU5BQkxFX0VOQUJMRV9FbmFibGVkICgxVUwpIC8qITwgVVNCIHBlcmlwaGVyYWwgaXMgZW5hYmxlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX1VTQlBVTExVUCAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb250cm9sIG9mIHRoZSBVU0IgcHVsbC11cCAqLw0KKw0KKy8qIEJpdCAwIDogQ29udHJvbCBvZiB0aGUgVVNCIHB1bGwtdXAgb24gdGhlIEQrIGxpbmUgKi8NCisjZGVmaW5lIFVTQkRfVVNCUFVMTFVQX0NPTk5FQ1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfVVNCUFVMTFVQX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBVU0JEX1VTQlBVTExVUF9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9VU0JQVUxMVVBfQ09OTkVDVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFB1bGwtdXAgaXMgZGlzY29ubmVjdGVkICovDQorI2RlZmluZSBVU0JEX1VTQlBVTExVUF9DT05ORUNUX0VuYWJsZWQgKDFVTCkgLyohPCBQdWxsLXVwIGlzIGNvbm5lY3RlZCB0byBEKyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0RQRE1WQUxVRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBTdGF0ZSBhdCB3aGljaCB0aGUgRFBETURSSVZFIHRhc2sgd2lsbCBmb3JjZSBEKyBhbmQgRC0uIFRoZSBEUERNTk9EUklWRSB0YXNrIHJldmVydHMgdGhlIGNvbnRyb2wgb2YgdGhlIGxpbmVzIHRvIE1BQyBJUCAobm8gZm9yY2luZykuICovDQorDQorLyogQml0cyA0Li4wIDogU3RhdGUgYXQgd2hpY2ggdGhlIERQRE1EUklWRSB0YXNrIHdpbGwgZm9yY2UgRCsgYW5kIEQtICovDQorI2RlZmluZSBVU0JEX0RQRE1WQUxVRV9TVEFURV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFURSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRFBETVZBTFVFX1NUQVRFX01zayAoMHgxRlVMIDw8IFVTQkRfRFBETVZBTFVFX1NUQVRFX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFURSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRFBETVZBTFVFX1NUQVRFX1Jlc3VtZSAoMVVMKSAvKiE8IEQrIGZvcmNlZCBsb3csIEQtIGZvcmNlZCBoaWdoIChLIHN0YXRlKSBmb3IgYSB0aW1pbmcgcHJlLXNldCBpbiBoYXJkd2FyZSAoNTAgdXMgb3IgNSBtcywgZGVwZW5kaW5nIG9uIGJ1cyBzdGF0ZSkgKi8NCisjZGVmaW5lIFVTQkRfRFBETVZBTFVFX1NUQVRFX0ogKDJVTCkgLyohPCBEKyBmb3JjZWQgaGlnaCwgRC0gZm9yY2VkIGxvdyAoSiBzdGF0ZSkgKi8NCisjZGVmaW5lIFVTQkRfRFBETVZBTFVFX1NUQVRFX0sgKDRVTCkgLyohPCBEKyBmb3JjZWQgbG93LCBELSBmb3JjZWQgaGlnaCAoSyBzdGF0ZSkgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9EVE9HR0xFICovDQorLyogRGVzY3JpcHRpb246IERhdGEgdG9nZ2xlIGNvbnRyb2wgYW5kIHN0YXR1cy4gKi8NCisNCisvKiBCaXRzIDkuLjggOiBEYXRhIHRvZ2dsZSB2YWx1ZSAqLw0KKyNkZWZpbmUgVVNCRF9EVE9HR0xFX1ZBTFVFX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFZBTFVFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9EVE9HR0xFX1ZBTFVFX01zayAoMHgzVUwgPDwgVVNCRF9EVE9HR0xFX1ZBTFVFX1BvcykgLyohPCBCaXQgbWFzayBvZiBWQUxVRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRFRPR0dMRV9WQUxVRV9Ob3AgKDBVTCkgLyohPCBObyBhY3Rpb24gb24gZGF0YSB0b2dnbGUgd2hlbiB3cml0aW5nIHRoZSByZWdpc3RlciB3aXRoIHRoaXMgdmFsdWUgKi8NCisjZGVmaW5lIFVTQkRfRFRPR0dMRV9WQUxVRV9EYXRhMCAoMVVMKSAvKiE8IERhdGEgdG9nZ2xlIGlzIERBVEEwIG9uIGVuZHBvaW50IHNldCBieSBFUCBhbmQgSU8gKi8NCisjZGVmaW5lIFVTQkRfRFRPR0dMRV9WQUxVRV9EYXRhMSAoMlVMKSAvKiE8IERhdGEgdG9nZ2xlIGlzIERBVEExIG9uIGVuZHBvaW50IHNldCBieSBFUCBhbmQgSU8gKi8NCisNCisvKiBCaXQgNyA6IFNlbGVjdHMgSU4gb3IgT1VUIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0RUT0dHTEVfSU9fUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgSU8gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0RUT0dHTEVfSU9fTXNrICgweDFVTCA8PCBVU0JEX0RUT0dHTEVfSU9fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElPIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9EVE9HR0xFX0lPX091dCAoMFVMKSAvKiE8IFNlbGVjdHMgT1VUIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0RUT0dHTEVfSU9fSW4gKDFVTCkgLyohPCBTZWxlY3RzIElOIGVuZHBvaW50ICovDQorDQorLyogQml0cyAyLi4wIDogU2VsZWN0IGJ1bGsgZW5kcG9pbnQgbnVtYmVyICovDQorI2RlZmluZSBVU0JEX0RUT0dHTEVfRVBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0RUT0dHTEVfRVBfTXNrICgweDdVTCA8PCBVU0JEX0RUT0dHTEVfRVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0VQSU5FTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmRwb2ludCBJTiBlbmFibGUgKi8NCisNCisvKiBCaXQgOCA6IEVuYWJsZSBpc28gSU4gZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lTT0lOX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIElTT0lOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSVNPSU5fTXNrICgweDFVTCA8PCBVU0JEX0VQSU5FTl9JU09JTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSVNPSU4gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JU09JTl9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBpc28gSU4gZW5kcG9pbnQgOCAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSVNPSU5fRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGlzbyBJTiBlbmRwb2ludCA4ICovDQorDQorLyogQml0IDcgOiBFbmFibGUgSU4gZW5kcG9pbnQgNyAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU43X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIElONyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lON19Nc2sgKDB4MVVMIDw8IFVTQkRfRVBJTkVOX0lON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU43X0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IElOIDcgKG5vIHJlc3BvbnNlIHRvIElOIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lON19FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgZW5kcG9pbnQgSU4gNyAocmVzcG9uc2UgdG8gSU4gdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIElOIGVuZHBvaW50IDYgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lONl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjZfTXNrICgweDFVTCA8PCBVU0JEX0VQSU5FTl9JTjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElONiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lONl9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBJTiA2IChubyByZXNwb25zZSB0byBJTiB0b2tlbnMpICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjZfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IElOIDYgKHJlc3BvbnNlIHRvIElOIHRva2VucykgKi8NCisNCisvKiBCaXQgNSA6IEVuYWJsZSBJTiBlbmRwb2ludCA1ICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU41X01zayAoMHgxVUwgPDwgVVNCRF9FUElORU5fSU41X1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjVfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgZW5kcG9pbnQgSU4gNSAobm8gcmVzcG9uc2UgdG8gSU4gdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU41X0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBJTiA1IChyZXNwb25zZSB0byBJTiB0b2tlbnMpICovDQorDQorLyogQml0IDQgOiBFbmFibGUgSU4gZW5kcG9pbnQgNCAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU40X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIElONCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lONF9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBJTkVOX0lONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU40X0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IElOIDQgKG5vIHJlc3BvbnNlIHRvIElOIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lONF9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgZW5kcG9pbnQgSU4gNCAocmVzcG9uc2UgdG8gSU4gdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCAzIDogRW5hYmxlIElOIGVuZHBvaW50IDMgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjNfTXNrICgweDFVTCA8PCBVU0JEX0VQSU5FTl9JTjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOM19EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBJTiAzIChubyByZXNwb25zZSB0byBJTiB0b2tlbnMpICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjNfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IElOIDMgKHJlc3BvbnNlIHRvIElOIHRva2VucykgKi8NCisNCisvKiBCaXQgMiA6IEVuYWJsZSBJTiBlbmRwb2ludCAyICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU4yX01zayAoMHgxVUwgPDwgVVNCRF9FUElORU5fSU4yX1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjJfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgZW5kcG9pbnQgSU4gMiAobm8gcmVzcG9uc2UgdG8gSU4gdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU4yX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBJTiAyIChyZXNwb25zZSB0byBJTiB0b2tlbnMpICovDQorDQorLyogQml0IDEgOiBFbmFibGUgSU4gZW5kcG9pbnQgMSAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU4xX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOMV9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBJTkVOX0lOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU4xX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IElOIDEgKG5vIHJlc3BvbnNlIHRvIElOIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOMV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgZW5kcG9pbnQgSU4gMSAocmVzcG9uc2UgdG8gSU4gdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIElOIGVuZHBvaW50IDAgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjBfTXNrICgweDFVTCA8PCBVU0JEX0VQSU5FTl9JTjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOMF9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBJTiAwIChubyByZXNwb25zZSB0byBJTiB0b2tlbnMpICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjBfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IElOIDAgKHJlc3BvbnNlIHRvIElOIHRva2VucykgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9FUE9VVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuZHBvaW50IE9VVCBlbmFibGUgKi8NCisNCisvKiBCaXQgOCA6IEVuYWJsZSBpc28gT1VUIGVuZHBvaW50IDggKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9JU09PVVRfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgSVNPT1VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX0lTT09VVF9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBPVVRFTl9JU09PVVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElTT09VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9JU09PVVRfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgaXNvIE9VVCBlbmRwb2ludCA4ICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fSVNPT1VUX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBpc28gT1VUIGVuZHBvaW50IDggKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZSBPVVQgZW5kcG9pbnQgNyAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgT1VUNyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ3X01zayAoMHgxVUwgPDwgVVNCRF9FUE9VVEVOX09VVDdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9VVDcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUN19EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBPVVQgNyAobm8gcmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ3X0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBPVVQgNyAocmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZSBPVVQgZW5kcG9pbnQgNiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgT1VUNiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ2X01zayAoMHgxVUwgPDwgVVNCRF9FUE9VVEVOX09VVDZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9VVDYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUNl9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBPVVQgNiAobm8gcmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ2X0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBPVVQgNiAocmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisNCisvKiBCaXQgNSA6IEVuYWJsZSBPVVQgZW5kcG9pbnQgNSAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgT1VUNSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ1X01zayAoMHgxVUwgPDwgVVNCRF9FUE9VVEVOX09VVDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9VVDUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUNV9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBPVVQgNSAobm8gcmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ1X0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBPVVQgNSAocmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisNCisvKiBCaXQgNCA6IEVuYWJsZSBPVVQgZW5kcG9pbnQgNCAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgT1VUNCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ0X01zayAoMHgxVUwgPDwgVVNCRF9FUE9VVEVOX09VVDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9VVDQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUNF9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBPVVQgNCAobm8gcmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ0X0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBPVVQgNCAocmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisNCisvKiBCaXQgMyA6IEVuYWJsZSBPVVQgZW5kcG9pbnQgMyAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgT1VUMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQzX01zayAoMHgxVUwgPDwgVVNCRF9FUE9VVEVOX09VVDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9VVDMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUM19EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBPVVQgMyAobm8gcmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQzX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBPVVQgMyAocmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisNCisvKiBCaXQgMiA6IEVuYWJsZSBPVVQgZW5kcG9pbnQgMiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgT1VUMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQyX01zayAoMHgxVUwgPDwgVVNCRF9FUE9VVEVOX09VVDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9VVDIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUMl9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBPVVQgMiAobm8gcmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQyX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBPVVQgMiAocmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBPVVQgZW5kcG9pbnQgMSAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgT1VUMSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQxX01zayAoMHgxVUwgPDwgVVNCRF9FUE9VVEVOX09VVDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9VVDEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUMV9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBPVVQgMSAobm8gcmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQxX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBPVVQgMSAocmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBPVVQgZW5kcG9pbnQgMCAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgT1VUMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQwX01zayAoMHgxVUwgPDwgVVNCRF9FUE9VVEVOX09VVDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9VVDAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUMF9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBPVVQgMCAobm8gcmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQwX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBPVVQgMCAocmVzcG9uc2UgdG8gT1VUIHRva2VucykgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9FUFNUQUxMICovDQorLyogRGVzY3JpcHRpb246IFNUQUxMIGVuZHBvaW50cyAqLw0KKw0KKy8qIEJpdCA4IDogU3RhbGwgc2VsZWN0ZWQgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFMTF9TVEFMTF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFMTCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFMTF9TVEFMTF9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBTVEFMTF9TVEFMTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBTEwgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBTExfU1RBTExfVW5TdGFsbCAoMFVMKSAvKiE8IERvbid0IHN0YWxsIHNlbGVjdGVkIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQU1RBTExfU1RBTExfU3RhbGwgKDFVTCkgLyohPCBTdGFsbCBzZWxlY3RlZCBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCA3IDogU2VsZWN0cyBJTiBvciBPVVQgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFMTF9JT19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBJTyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFMTF9JT19Nc2sgKDB4MVVMIDw8IFVTQkRfRVBTVEFMTF9JT19Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU8gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBTExfSU9fT3V0ICgwVUwpIC8qITwgU2VsZWN0cyBPVVQgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFMTF9JT19JbiAoMVVMKSAvKiE8IFNlbGVjdHMgSU4gZW5kcG9pbnQgKi8NCisNCisvKiBCaXRzIDIuLjAgOiBTZWxlY3QgZW5kcG9pbnQgbnVtYmVyICovDQorI2RlZmluZSBVU0JEX0VQU1RBTExfRVBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBTExfRVBfTXNrICgweDdVTCA8PCBVU0JEX0VQU1RBTExfRVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0lTT1NQTElUICovDQorLyogRGVzY3JpcHRpb246IENvbnRyb2xzIHRoZSBzcGxpdCBvZiBJU08gYnVmZmVycyAqLw0KKw0KKy8qIEJpdHMgMTUuLjAgOiBDb250cm9scyB0aGUgc3BsaXQgb2YgSVNPIGJ1ZmZlcnMgKi8NCisjZGVmaW5lIFVTQkRfSVNPU1BMSVRfU1BMSVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1BMSVQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lTT1NQTElUX1NQTElUX01zayAoMHhGRkZGVUwgPDwgVVNCRF9JU09TUExJVF9TUExJVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1BMSVQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lTT1NQTElUX1NQTElUX09uZURpciAoMHgwMDAwVUwpIC8qITwgRnVsbCBidWZmZXIgZGVkaWNhdGVkIHRvIGVpdGhlciBpc28gSU4gb3IgT1VUICovDQorI2RlZmluZSBVU0JEX0lTT1NQTElUX1NQTElUX0hhbGZJTiAoMHgwMDgwVUwpIC8qITwgTG93ZXIgaGFsZiBmb3IgSU4sIHVwcGVyIGhhbGYgZm9yIE9VVCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0ZSQU1FQ05UUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzdGFydCBvZiBmcmFtZSBjb3VudGVyICovDQorDQorLyogQml0cyAxMC4uMCA6IFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHN0YXJ0IG9mIGZyYW1lIGNvdW50ZXIgKi8NCisjZGVmaW5lIFVTQkRfRlJBTUVDTlRSX0ZSQU1FQ05UUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBGUkFNRUNOVFIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0ZSQU1FQ05UUl9GUkFNRUNOVFJfTXNrICgweDdGRlVMIDw8IFVTQkRfRlJBTUVDTlRSX0ZSQU1FQ05UUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJBTUVDTlRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0lTT0lOQ09ORklHICovDQorLyogRGVzY3JpcHRpb246IENvbnRyb2xzIHRoZSByZXNwb25zZSBvZiB0aGUgSVNPIElOIGVuZHBvaW50IHRvIGFuIElOIHRva2VuIHdoZW4gbm8gZGF0YSBpcyByZWFkeSB0byBiZSBzZW50ICovDQorDQorLyogQml0IDAgOiBDb250cm9scyB0aGUgcmVzcG9uc2Ugb2YgdGhlIElTTyBJTiBlbmRwb2ludCB0byBhbiBJTiB0b2tlbiB3aGVuIG5vIGRhdGEgaXMgcmVhZHkgdG8gYmUgc2VudCAqLw0KKyNkZWZpbmUgVVNCRF9JU09JTkNPTkZJR19SRVNQT05TRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVNQT05TRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSVNPSU5DT05GSUdfUkVTUE9OU0VfTXNrICgweDFVTCA8PCBVU0JEX0lTT0lOQ09ORklHX1JFU1BPTlNFX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNQT05TRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSVNPSU5DT05GSUdfUkVTUE9OU0VfTm9SZXNwICgwVUwpIC8qITwgRW5kcG9pbnQgZG9lcyBub3QgcmVzcG9uZCBpbiB0aGF0IGNhc2UgKi8NCisjZGVmaW5lIFVTQkRfSVNPSU5DT05GSUdfUkVTUE9OU0VfWmVyb0RhdGEgKDFVTCkgLyohPCBFbmRwb2ludCByZXNwb25kcyB3aXRoIGEgemVyby1sZW5ndGggZGF0YSBwYWNrZXQgaW4gdGhhdCBjYXNlICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfRVBJTl9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIERhdGEgcG9pbnRlciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBEYXRhIHBvaW50ZXIuIEFjY2VwdHMgYW55IGFkZHJlc3MgaW4gRGF0YSBSQU0uICovDQorI2RlZmluZSBVU0JEX0VQSU5fUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5fUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBVU0JEX0VQSU5fUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0VQSU5fTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciAqLw0KKw0KKy8qIEJpdHMgNi4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyICovDQorI2RlZmluZSBVU0JEX0VQSU5fTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5fTUFYQ05UX01BWENOVF9Nc2sgKDB4N0ZVTCA8PCBVU0JEX0VQSU5fTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0VQSU5fQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gKi8NCisNCisvKiBCaXRzIDYuLjAgOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gKi8NCisjZGVmaW5lIFVTQkRfRVBJTl9BTU9VTlRfQU1PVU5UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTl9BTU9VTlRfQU1PVU5UX01zayAoMHg3RlVMIDw8IFVTQkRfRVBJTl9BTU9VTlRfQU1PVU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTU9VTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfSVNPSU5fUFRSICovDQorLyogRGVzY3JpcHRpb246IERhdGEgcG9pbnRlciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBEYXRhIHBvaW50ZXIuIEFjY2VwdHMgYW55IGFkZHJlc3MgaW4gRGF0YSBSQU0uICovDQorI2RlZmluZSBVU0JEX0lTT0lOX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JU09JTl9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFVTQkRfSVNPSU5fUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0lTT0lOX01BWENOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciAqLw0KKw0KKy8qIEJpdHMgOS4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyICovDQorI2RlZmluZSBVU0JEX0lTT0lOX01BWENOVF9NQVhDTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUFYQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JU09JTl9NQVhDTlRfTUFYQ05UX01zayAoMHgzRkZVTCA8PCBVU0JEX0lTT0lOX01BWENOVF9NQVhDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9JU09JTl9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorDQorLyogQml0cyA5Li4wIDogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorI2RlZmluZSBVU0JEX0lTT0lOX0FNT1VOVF9BTU9VTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQU1PVU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JU09JTl9BTU9VTlRfQU1PVU5UX01zayAoMHgzRkZVTCA8PCBVU0JEX0lTT0lOX0FNT1VOVF9BTU9VTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9FUE9VVF9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIERhdGEgcG9pbnRlciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBEYXRhIHBvaW50ZXIuIEFjY2VwdHMgYW55IGFkZHJlc3MgaW4gRGF0YSBSQU0uICovDQorI2RlZmluZSBVU0JEX0VQT1VUX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVF9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFVTQkRfRVBPVVRfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0VQT1VUX01BWENOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgKi8NCisNCisvKiBCaXRzIDYuLjAgOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRfTUFYQ05UX01BWENOVF9Nc2sgKDB4N0ZVTCA8PCBVU0JEX0VQT1VUX01BWENOVF9NQVhDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9FUE9VVF9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKw0KKy8qIEJpdHMgNi4uMCA6IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVF9BTU9VTlRfQU1PVU5UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRfQU1PVU5UX0FNT1VOVF9Nc2sgKDB4N0ZVTCA8PCBVU0JEX0VQT1VUX0FNT1VOVF9BTU9VTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9JU09PVVRfUFRSICovDQorLyogRGVzY3JpcHRpb246IERhdGEgcG9pbnRlciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBEYXRhIHBvaW50ZXIuIEFjY2VwdHMgYW55IGFkZHJlc3MgaW4gRGF0YSBSQU0uICovDQorI2RlZmluZSBVU0JEX0lTT09VVF9QVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSVNPT1VUX1BUUl9QVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgVVNCRF9JU09PVVRfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0lTT09VVF9NQVhDTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgKi8NCisNCisvKiBCaXRzIDkuLjAgOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciAqLw0KKyNkZWZpbmUgVVNCRF9JU09PVVRfTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lTT09VVF9NQVhDTlRfTUFYQ05UX01zayAoMHgzRkZVTCA8PCBVU0JEX0lTT09VVF9NQVhDTlRfTUFYQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhDTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfSVNPT1VUX0FNT1VOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gKi8NCisNCisvKiBCaXRzIDkuLjAgOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gKi8NCisjZGVmaW5lIFVTQkRfSVNPT1VUX0FNT1VOVF9BTU9VTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQU1PVU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JU09PVVRfQU1PVU5UX0FNT1VOVF9Nc2sgKDB4M0ZGVUwgPDwgVVNCRF9JU09PVVRfQU1PVU5UX0FNT1VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU1PVU5UIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFdEVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBXYXRjaGRvZyBUaW1lciAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBXRFRfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRJTUVPVVQgZXZlbnQgKi8NCisjZGVmaW5lIFdEVF9JTlRFTlNFVF9USU1FT1VUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRJTUVPVVQgZmllbGQuICovDQorI2RlZmluZSBXRFRfSU5URU5TRVRfVElNRU9VVF9Nc2sgKDB4MVVMIDw8IFdEVF9JTlRFTlNFVF9USU1FT1VUX1BvcykgLyohPCBCaXQgbWFzayBvZiBUSU1FT1VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX0lOVEVOU0VUX1RJTUVPVVRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgV0RUX0lOVEVOU0VUX1RJTUVPVVRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFdEVF9JTlRFTlNFVF9USU1FT1VUX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBXRFRfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVElNRU9VVCBldmVudCAqLw0KKyNkZWZpbmUgV0RUX0lOVEVOQ0xSX1RJTUVPVVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVElNRU9VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9JTlRFTkNMUl9USU1FT1VUX01zayAoMHgxVUwgPDwgV0RUX0lOVEVOQ0xSX1RJTUVPVVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRJTUVPVVQgZmllbGQuICovDQorI2RlZmluZSBXRFRfSU5URU5DTFJfVElNRU9VVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBXRFRfSU5URU5DTFJfVElNRU9VVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgV0RUX0lOVEVOQ0xSX1RJTUVPVVRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFdEVF9SVU5TVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogUnVuIHN0YXR1cyAqLw0KKw0KKy8qIEJpdCAwIDogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSB3YXRjaGRvZyBpcyBydW5uaW5nICovDQorI2RlZmluZSBXRFRfUlVOU1RBVFVTX1JVTlNUQVRVU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSVU5TVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlVOU1RBVFVTX1JVTlNUQVRVU19Nc2sgKDB4MVVMIDw8IFdEVF9SVU5TVEFUVVNfUlVOU1RBVFVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBSVU5TVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlVOU1RBVFVTX1JVTlNUQVRVU19Ob3RSdW5uaW5nICgwVUwpIC8qITwgV2F0Y2hkb2cgbm90IHJ1bm5pbmcgKi8NCisjZGVmaW5lIFdEVF9SVU5TVEFUVVNfUlVOU1RBVFVTX1J1bm5pbmcgKDFVTCkgLyohPCBXYXRjaGRvZyBpcyBydW5uaW5nICovDQorDQorLyogUmVnaXN0ZXI6IFdEVF9SRVFTVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogUmVxdWVzdCBzdGF0dXMgKi8NCisNCisvKiBCaXQgNyA6IFJlcXVlc3Qgc3RhdHVzIGZvciBSUls3XSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUlI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjdfTXNrICgweDFVTCA8PCBXRFRfUkVRU1RBVFVTX1JSN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjdfRGlzYWJsZWRPclJlcXVlc3RlZCAoMFVMKSAvKiE8IFJSWzddIHJlZ2lzdGVyIGlzIG5vdCBlbmFibGVkLCBvciBhcmUgYWxyZWFkeSByZXF1ZXN0aW5nIHJlbG9hZCAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjdfRW5hYmxlZEFuZFVucmVxdWVzdGVkICgxVUwpIC8qITwgUlJbN10gcmVnaXN0ZXIgaXMgZW5hYmxlZCwgYW5kIGFyZSBub3QgeWV0IHJlcXVlc3RpbmcgcmVsb2FkICovDQorDQorLyogQml0IDYgOiBSZXF1ZXN0IHN0YXR1cyBmb3IgUlJbNl0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlI2X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJSNiBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlI2X01zayAoMHgxVUwgPDwgV0RUX1JFUVNUQVRVU19SUjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJSNiBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlI2X0Rpc2FibGVkT3JSZXF1ZXN0ZWQgKDBVTCkgLyohPCBSUls2XSByZWdpc3RlciBpcyBub3QgZW5hYmxlZCwgb3IgYXJlIGFscmVhZHkgcmVxdWVzdGluZyByZWxvYWQgKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlI2X0VuYWJsZWRBbmRVbnJlcXVlc3RlZCAoMVVMKSAvKiE8IFJSWzZdIHJlZ2lzdGVyIGlzIGVuYWJsZWQsIGFuZCBhcmUgbm90IHlldCByZXF1ZXN0aW5nIHJlbG9hZCAqLw0KKw0KKy8qIEJpdCA1IDogUmVxdWVzdCBzdGF0dXMgZm9yIFJSWzVdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSNV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBSUjUgZmllbGQuICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSNV9Nc2sgKDB4MVVMIDw8IFdEVF9SRVFTVEFUVVNfUlI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBSUjUgZmllbGQuICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSNV9EaXNhYmxlZE9yUmVxdWVzdGVkICgwVUwpIC8qITwgUlJbNV0gcmVnaXN0ZXIgaXMgbm90IGVuYWJsZWQsIG9yIGFyZSBhbHJlYWR5IHJlcXVlc3RpbmcgcmVsb2FkICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSNV9FbmFibGVkQW5kVW5yZXF1ZXN0ZWQgKDFVTCkgLyohPCBSUls1XSByZWdpc3RlciBpcyBlbmFibGVkLCBhbmQgYXJlIG5vdCB5ZXQgcmVxdWVzdGluZyByZWxvYWQgKi8NCisNCisvKiBCaXQgNCA6IFJlcXVlc3Qgc3RhdHVzIGZvciBSUls0XSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUlI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjRfTXNrICgweDFVTCA8PCBXRFRfUkVRU1RBVFVTX1JSNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjRfRGlzYWJsZWRPclJlcXVlc3RlZCAoMFVMKSAvKiE8IFJSWzRdIHJlZ2lzdGVyIGlzIG5vdCBlbmFibGVkLCBvciBhcmUgYWxyZWFkeSByZXF1ZXN0aW5nIHJlbG9hZCAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjRfRW5hYmxlZEFuZFVucmVxdWVzdGVkICgxVUwpIC8qITwgUlJbNF0gcmVnaXN0ZXIgaXMgZW5hYmxlZCwgYW5kIGFyZSBub3QgeWV0IHJlcXVlc3RpbmcgcmVsb2FkICovDQorDQorLyogQml0IDMgOiBSZXF1ZXN0IHN0YXR1cyBmb3IgUlJbM10gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIzX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJSMyBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIzX01zayAoMHgxVUwgPDwgV0RUX1JFUVNUQVRVU19SUjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJSMyBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIzX0Rpc2FibGVkT3JSZXF1ZXN0ZWQgKDBVTCkgLyohPCBSUlszXSByZWdpc3RlciBpcyBub3QgZW5hYmxlZCwgb3IgYXJlIGFscmVhZHkgcmVxdWVzdGluZyByZWxvYWQgKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIzX0VuYWJsZWRBbmRVbnJlcXVlc3RlZCAoMVVMKSAvKiE8IFJSWzNdIHJlZ2lzdGVyIGlzIGVuYWJsZWQsIGFuZCBhcmUgbm90IHlldCByZXF1ZXN0aW5nIHJlbG9hZCAqLw0KKw0KKy8qIEJpdCAyIDogUmVxdWVzdCBzdGF0dXMgZm9yIFJSWzJdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSUjIgZmllbGQuICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSMl9Nc2sgKDB4MVVMIDw8IFdEVF9SRVFTVEFUVVNfUlIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBSUjIgZmllbGQuICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSMl9EaXNhYmxlZE9yUmVxdWVzdGVkICgwVUwpIC8qITwgUlJbMl0gcmVnaXN0ZXIgaXMgbm90IGVuYWJsZWQsIG9yIGFyZSBhbHJlYWR5IHJlcXVlc3RpbmcgcmVsb2FkICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSMl9FbmFibGVkQW5kVW5yZXF1ZXN0ZWQgKDFVTCkgLyohPCBSUlsyXSByZWdpc3RlciBpcyBlbmFibGVkLCBhbmQgYXJlIG5vdCB5ZXQgcmVxdWVzdGluZyByZWxvYWQgKi8NCisNCisvKiBCaXQgMSA6IFJlcXVlc3Qgc3RhdHVzIGZvciBSUlsxXSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUlIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjFfTXNrICgweDFVTCA8PCBXRFRfUkVRU1RBVFVTX1JSMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjFfRGlzYWJsZWRPclJlcXVlc3RlZCAoMFVMKSAvKiE8IFJSWzFdIHJlZ2lzdGVyIGlzIG5vdCBlbmFibGVkLCBvciBhcmUgYWxyZWFkeSByZXF1ZXN0aW5nIHJlbG9hZCAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjFfRW5hYmxlZEFuZFVucmVxdWVzdGVkICgxVUwpIC8qITwgUlJbMV0gcmVnaXN0ZXIgaXMgZW5hYmxlZCwgYW5kIGFyZSBub3QgeWV0IHJlcXVlc3RpbmcgcmVsb2FkICovDQorDQorLyogQml0IDAgOiBSZXF1ZXN0IHN0YXR1cyBmb3IgUlJbMF0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJSMCBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIwX01zayAoMHgxVUwgPDwgV0RUX1JFUVNUQVRVU19SUjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJSMCBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIwX0Rpc2FibGVkT3JSZXF1ZXN0ZWQgKDBVTCkgLyohPCBSUlswXSByZWdpc3RlciBpcyBub3QgZW5hYmxlZCwgb3IgYXJlIGFscmVhZHkgcmVxdWVzdGluZyByZWxvYWQgKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIwX0VuYWJsZWRBbmRVbnJlcXVlc3RlZCAoMVVMKSAvKiE8IFJSWzBdIHJlZ2lzdGVyIGlzIGVuYWJsZWQsIGFuZCBhcmUgbm90IHlldCByZXF1ZXN0aW5nIHJlbG9hZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBXRFRfQ1JWICovDQorLyogRGVzY3JpcHRpb246IENvdW50ZXIgcmVsb2FkIHZhbHVlICovDQorDQorLyogQml0cyAzMS4uMCA6IENvdW50ZXIgcmVsb2FkIHZhbHVlIGluIG51bWJlciBvZiBjeWNsZXMgb2YgdGhlIDMyLjc2OCBrSHogY2xvY2sgKi8NCisjZGVmaW5lIFdEVF9DUlZfQ1JWX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENSViBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9DUlZfQ1JWX01zayAoMHhGRkZGRkZGRlVMIDw8IFdEVF9DUlZfQ1JWX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUlYgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFdEVF9SUkVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSByZWdpc3RlciBmb3IgcmVsb2FkIHJlcXVlc3QgcmVnaXN0ZXJzICovDQorDQorLyogQml0IDcgOiBFbmFibGUgb3IgZGlzYWJsZSBSUls3XSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI3X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJSNyBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSN19Nc2sgKDB4MVVMIDw8IFdEVF9SUkVOX1JSN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI3X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBSUls3XSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI3X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgUlJbN10gcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZSBvciBkaXNhYmxlIFJSWzZdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUlI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI2X01zayAoMHgxVUwgPDwgV0RUX1JSRU5fUlI2X1BvcykgLyohPCBCaXQgbWFzayBvZiBSUjYgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjZfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIFJSWzZdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjZfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBSUls2XSByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIG9yIGRpc2FibGUgUlJbNV0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSNV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBSUjUgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjVfTXNrICgweDFVTCA8PCBXRFRfUlJFTl9SUjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJSNSBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSNV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgUlJbNV0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSNV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIFJSWzVdIHJlZ2lzdGVyICovDQorDQorLyogQml0IDQgOiBFbmFibGUgb3IgZGlzYWJsZSBSUls0XSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI0X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJSNCBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSNF9Nc2sgKDB4MVVMIDw8IFdEVF9SUkVOX1JSNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI0X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBSUls0XSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI0X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgUlJbNF0gcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMyA6IEVuYWJsZSBvciBkaXNhYmxlIFJSWzNdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUlIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlIzX01zayAoMHgxVUwgPDwgV0RUX1JSRU5fUlIzX1BvcykgLyohPCBCaXQgbWFzayBvZiBSUjMgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjNfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIFJSWzNdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBSUlszXSByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgUlJbMl0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSUjIgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjJfTXNrICgweDFVTCA8PCBXRFRfUlJFTl9SUjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJSMiBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSMl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgUlJbMl0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSMl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIFJSWzJdIHJlZ2lzdGVyICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBSUlsxXSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlIxX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJSMSBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSMV9Nc2sgKDB4MVVMIDw8IFdEVF9SUkVOX1JSMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlIxX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBSUlsxXSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlIxX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgUlJbMV0gcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIFJSWzBdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUlIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlIwX01zayAoMHgxVUwgPDwgV0RUX1JSRU5fUlIwX1BvcykgLyohPCBCaXQgbWFzayBvZiBSUjAgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIFJSWzBdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBSUlswXSByZWdpc3RlciAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBXRFRfQ09ORklHICovDQorLyogRGVzY3JpcHRpb246IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMyA6IENvbmZpZ3VyZSB0aGUgd2F0Y2hkb2cgdG8gZWl0aGVyIGJlIHBhdXNlZCwgb3Iga2VwdCBydW5uaW5nLCB3aGlsZSB0aGUgQ1BVIGlzIGhhbHRlZCBieSB0aGUgZGVidWdnZXIgKi8NCisjZGVmaW5lIFdEVF9DT05GSUdfSEFMVF9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBIQUxUIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX0NPTkZJR19IQUxUX01zayAoMHgxVUwgPDwgV0RUX0NPTkZJR19IQUxUX1BvcykgLyohPCBCaXQgbWFzayBvZiBIQUxUIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX0NPTkZJR19IQUxUX1BhdXNlICgwVUwpIC8qITwgUGF1c2Ugd2F0Y2hkb2cgd2hpbGUgdGhlIENQVSBpcyBoYWx0ZWQgYnkgdGhlIGRlYnVnZ2VyICovDQorI2RlZmluZSBXRFRfQ09ORklHX0hBTFRfUnVuICgxVUwpIC8qITwgS2VlcCB0aGUgd2F0Y2hkb2cgcnVubmluZyB3aGlsZSB0aGUgQ1BVIGlzIGhhbHRlZCBieSB0aGUgZGVidWdnZXIgKi8NCisNCisvKiBCaXQgMCA6IENvbmZpZ3VyZSB0aGUgd2F0Y2hkb2cgdG8gZWl0aGVyIGJlIHBhdXNlZCwgb3Iga2VwdCBydW5uaW5nLCB3aGlsZSB0aGUgQ1BVIGlzIHNsZWVwaW5nICovDQorI2RlZmluZSBXRFRfQ09ORklHX1NMRUVQX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNMRUVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX0NPTkZJR19TTEVFUF9Nc2sgKDB4MVVMIDw8IFdEVF9DT05GSUdfU0xFRVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNMRUVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX0NPTkZJR19TTEVFUF9QYXVzZSAoMFVMKSAvKiE8IFBhdXNlIHdhdGNoZG9nIHdoaWxlIHRoZSBDUFUgaXMgc2xlZXBpbmcgKi8NCisjZGVmaW5lIFdEVF9DT05GSUdfU0xFRVBfUnVuICgxVUwpIC8qITwgS2VlcCB0aGUgd2F0Y2hkb2cgcnVubmluZyB3aGlsZSB0aGUgQ1BVIGlzIHNsZWVwaW5nICovDQorDQorLyogUmVnaXN0ZXI6IFdEVF9SUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgUmVsb2FkIHJlcXVlc3QgMCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBSZWxvYWQgcmVxdWVzdCByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JSX1JSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJSIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSX1JSX01zayAoMHhGRkZGRkZGRlVMIDw8IFdEVF9SUl9SUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlIgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJfUlJfUmVsb2FkICgweDZFNTI0NjM1VUwpIC8qITwgVmFsdWUgdG8gcmVxdWVzdCBhIHJlbG9hZCBvZiB0aGUgd2F0Y2hkb2cgdGltZXIgKi8NCisNCisNCisvKmxpbnQgLS1mbGIgIkxlYXZlIGxpYnJhcnkgcmVnaW9uIiAqLw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyODQwX3BlcmlwaGVyYWxzLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1Mjg0MF9wZXJpcGhlcmFscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjNhZDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1Mjg0MF9wZXJpcGhlcmFscy5oCkBAIC0wLDAgKzEsMjQwIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBfTlJGNTI4NDBfUEVSSVBIRVJBTFNfSA0KKyNkZWZpbmUgX05SRjUyODQwX1BFUklQSEVSQUxTX0gNCisNCisNCisvKiBGbG9hdGluZyBQb2ludCBVbml0ICovDQorI2RlZmluZSBGUFVfUFJFU0VOVA0KKyNkZWZpbmUgRlBVX0NPVU5UIDENCisNCisvKiBTeXN0aWNrIHRpbWVyICovDQorI2RlZmluZSBTWVNUSUNLX1BSRVNFTlQNCisjZGVmaW5lIFNZU1RJQ0tfQ09VTlQgMQ0KKw0KKy8qIFNvZnR3YXJlIEludGVycnVwdHMgKi8NCisjZGVmaW5lIFNXSV9QUkVTRU5UDQorI2RlZmluZSBTV0lfQ09VTlQgNg0KKw0KKy8qIE1lbW9yeSBXYXRjaCBVbml0ICovDQorI2RlZmluZSBNV1VfUFJFU0VOVA0KKyNkZWZpbmUgTVdVX0NPVU5UIDENCisNCisvKiBHUElPICovDQorI2RlZmluZSBHUElPX1BSRVNFTlQNCisjZGVmaW5lIEdQSU9fQ09VTlQgMg0KKw0KKyNkZWZpbmUgUDBfUElOX05VTSAzMg0KKyNkZWZpbmUgUDFfUElOX05VTSAxNg0KKw0KKy8qIEFDTCAqLw0KKyNkZWZpbmUgQUNMX1BSRVNFTlQNCisNCisjZGVmaW5lIEFDTF9SRUdJT05TX0NPVU5UIDgNCisNCisvKiBSYWRpbyAqLw0KKyNkZWZpbmUgUkFESU9fUFJFU0VOVA0KKyNkZWZpbmUgUkFESU9fQ09VTlQgMQ0KKw0KKy8qIEFjY2VsZXJhdGVkIEFkZHJlc3MgUmVzb2x2ZXIgKi8NCisjZGVmaW5lIEFBUl9QUkVTRU5UDQorI2RlZmluZSBBQVJfQ09VTlQgMQ0KKw0KKyNkZWZpbmUgQUFSX01BWF9JUktfTlVNIDE2DQorDQorLyogQUVTIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZSBlbmNyeXB0aW9uICovDQorI2RlZmluZSBFQ0JfUFJFU0VOVA0KKyNkZWZpbmUgRUNCX0NPVU5UIDENCisNCisvKiBBRVMgQ0NNIG1vZGUgZW5jcnlwdGlvbiAqLw0KKyNkZWZpbmUgQ0NNX1BSRVNFTlQNCisjZGVmaW5lIENDTV9DT1VOVCAxDQorDQorLyogTkZDIFRhZyAqLw0KKyNkZWZpbmUgTkZDVF9QUkVTRU5UDQorI2RlZmluZSBORkNUX0NPVU5UIDENCisNCisvKiBQZXJpcGhlcmFsIHRvIFBlcmlwaGVyYWwgSW50ZXJjb25uZWN0ICovDQorI2RlZmluZSBQUElfUFJFU0VOVA0KKyNkZWZpbmUgUFBJX0NPVU5UIDENCisNCisjZGVmaW5lIFBQSV9DSF9OVU0gMjANCisjZGVmaW5lIFBQSV9HUk9VUF9OVU0gNg0KKyNkZWZpbmUgUFBJX0ZFQVRVUkVfRk9SS1NfUFJFU0VOVA0KKw0KKy8qIEV2ZW50IEdlbmVyYXRvciBVbml0ICovDQorI2RlZmluZSBFR1VfUFJFU0VOVA0KKyNkZWZpbmUgRUdVX0NPVU5UIDYNCisNCisjZGVmaW5lIEVHVTBfQ0hfTlVNIDE2DQorI2RlZmluZSBFR1UxX0NIX05VTSAxNg0KKyNkZWZpbmUgRUdVMl9DSF9OVU0gMTYNCisjZGVmaW5lIEVHVTNfQ0hfTlVNIDE2DQorI2RlZmluZSBFR1U0X0NIX05VTSAxNg0KKyNkZWZpbmUgRUdVNV9DSF9OVU0gMTYNCisNCisvKiBUaW1lci9Db3VudGVyICovDQorI2RlZmluZSBUSU1FUl9QUkVTRU5UDQorI2RlZmluZSBUSU1FUl9DT1VOVCA1DQorDQorI2RlZmluZSBUSU1FUjBfTUFYX1NJWkUgMzINCisjZGVmaW5lIFRJTUVSMV9NQVhfU0laRSAzMg0KKyNkZWZpbmUgVElNRVIyX01BWF9TSVpFIDMyDQorI2RlZmluZSBUSU1FUjNfTUFYX1NJWkUgMzINCisjZGVmaW5lIFRJTUVSNF9NQVhfU0laRSAzMg0KKw0KKyNkZWZpbmUgVElNRVIwX0NDX05VTSA0DQorI2RlZmluZSBUSU1FUjFfQ0NfTlVNIDQNCisjZGVmaW5lIFRJTUVSMl9DQ19OVU0gNA0KKyNkZWZpbmUgVElNRVIzX0NDX05VTSA2DQorI2RlZmluZSBUSU1FUjRfQ0NfTlVNIDYNCisNCisvKiBSZWFsIFRpbWUgQ291bnRlciAqLw0KKyNkZWZpbmUgUlRDX1BSRVNFTlQNCisjZGVmaW5lIFJUQ19DT1VOVCAzDQorDQorI2RlZmluZSBSVEMwX0NDX05VTSAzDQorI2RlZmluZSBSVEMxX0NDX05VTSA0DQorI2RlZmluZSBSVEMyX0NDX05VTSA0DQorDQorLyogUk5HICovDQorI2RlZmluZSBSTkdfUFJFU0VOVA0KKyNkZWZpbmUgUk5HX0NPVU5UIDENCisNCisvKiBXYXRjaGRvZyBUaW1lciAqLw0KKyNkZWZpbmUgV0RUX1BSRVNFTlQNCisjZGVmaW5lIFdEVF9DT1VOVCAxDQorDQorLyogVGVtcGVyYXR1cmUgU2Vuc29yICovDQorI2RlZmluZSBURU1QX1BSRVNFTlQNCisjZGVmaW5lIFRFTVBfQ09VTlQgMQ0KKw0KKy8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSBNYXN0ZXIgKi8NCisjZGVmaW5lIFNQSV9QUkVTRU5UDQorI2RlZmluZSBTUElfQ09VTlQgMw0KKw0KKy8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSBNYXN0ZXIgd2l0aCBETUEgKi8NCisjZGVmaW5lIFNQSU1fUFJFU0VOVA0KKyNkZWZpbmUgU1BJTV9DT1VOVCA0DQorDQorI2RlZmluZSBTUElNMF9NQVhfREFUQVJBVEUgIDgNCisjZGVmaW5lIFNQSU0xX01BWF9EQVRBUkFURSAgOA0KKyNkZWZpbmUgU1BJTTJfTUFYX0RBVEFSQVRFICA4DQorI2RlZmluZSBTUElNM19NQVhfREFUQVJBVEUgIDMyDQorDQorI2RlZmluZSBTUElNMF9GRUFUVVJFX0hBUkRXQVJFX0NTTl9QUkVTRU5UICAwDQorI2RlZmluZSBTUElNMV9GRUFUVVJFX0hBUkRXQVJFX0NTTl9QUkVTRU5UICAwDQorI2RlZmluZSBTUElNMl9GRUFUVVJFX0hBUkRXQVJFX0NTTl9QUkVTRU5UICAwDQorI2RlZmluZSBTUElNM19GRUFUVVJFX0hBUkRXQVJFX0NTTl9QUkVTRU5UICAxDQorDQorLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIFNsYXZlIHdpdGggRE1BKi8NCisjZGVmaW5lIFNQSVNfUFJFU0VOVA0KKyNkZWZpbmUgU1BJU19DT1VOVCAzDQorDQorLyogVHdvIFdpcmUgSW50ZXJmYWNlIE1hc3RlciAqLw0KKyNkZWZpbmUgVFdJX1BSRVNFTlQNCisjZGVmaW5lIFRXSV9DT1VOVCAyDQorDQorLyogVHdvIFdpcmUgSW50ZXJmYWNlIE1hc3RlciB3aXRoIERNQSAqLw0KKyNkZWZpbmUgVFdJTV9QUkVTRU5UDQorI2RlZmluZSBUV0lNX0NPVU5UIDINCisNCisvKiBUd28gV2lyZSBJbnRlcmZhY2UgU2xhdmUgd2l0aCBETUEgKi8NCisjZGVmaW5lIFRXSVNfUFJFU0VOVA0KKyNkZWZpbmUgVFdJU19DT1VOVCAyDQorDQorLyogVW5pdmVyc2FsIEFzeW5jaHJvbm91cyBSZWNlaXZlci1UcmFuc21pdHRlciAqLw0KKyNkZWZpbmUgVUFSVF9QUkVTRU5UDQorI2RlZmluZSBVQVJUX0NPVU5UIDENCisNCisvKiBVbml2ZXJzYWwgQXN5bmNocm9ub3VzIFJlY2VpdmVyLVRyYW5zbWl0dGVyIHdpdGggRE1BICovDQorI2RlZmluZSBVQVJURV9QUkVTRU5UDQorI2RlZmluZSBVQVJURV9DT1VOVCAyDQorDQorLyogUXVhZHJhdHVyZSBEZWNvZGVyICovDQorI2RlZmluZSBRREVDX1BSRVNFTlQNCisjZGVmaW5lIFFERUNfQ09VTlQgMQ0KKw0KKy8qIFN1Y2Nlc3NpdmUgQXBwcm94aW1hdGlvbiBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0ZXIgKi8NCisjZGVmaW5lIFNBQURDX1BSRVNFTlQNCisjZGVmaW5lIFNBQURDX0NPVU5UIDENCisNCisvKiBHUElPIFRhc2tzIGFuZCBFdmVudHMgKi8NCisjZGVmaW5lIEdQSU9URV9QUkVTRU5UDQorI2RlZmluZSBHUElPVEVfQ09VTlQgMQ0KKw0KKyNkZWZpbmUgR1BJT1RFX0NIX05VTSA4DQorDQorI2RlZmluZSBHUElPVEVfRkVBVFVSRV9TRVRfUFJFU0VOVA0KKyNkZWZpbmUgR1BJT1RFX0ZFQVRVUkVfQ0xSX1BSRVNFTlQNCisNCisvKiBMb3cgUG93ZXIgQ29tcGFyYXRvciAqLw0KKyNkZWZpbmUgTFBDT01QX1BSRVNFTlQNCisjZGVmaW5lIExQQ09NUF9DT1VOVCAxDQorDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFU09MVVRJT04gMTYNCisNCisjZGVmaW5lIExQQ09NUF9GRUFUVVJFX0hZU1RfUFJFU0VOVA0KKw0KKy8qIENvbXBhcmF0b3IgKi8NCisjZGVmaW5lIENPTVBfUFJFU0VOVA0KKyNkZWZpbmUgQ09NUF9DT1VOVCAxDQorDQorLyogUHVsc2UgV2lkdGggTW9kdWxhdG9yICovDQorI2RlZmluZSBQV01fUFJFU0VOVA0KKyNkZWZpbmUgUFdNX0NPVU5UIDQNCisNCisjZGVmaW5lIFBXTTBfQ0hfTlVNIDQNCisjZGVmaW5lIFBXTTFfQ0hfTlVNIDQNCisjZGVmaW5lIFBXTTJfQ0hfTlVNIDQNCisjZGVmaW5lIFBXTTNfQ0hfTlVNIDQNCisNCisvKiBQdWxzZSBEZW5zaXR5IE1vZHVsYXRvciAqLw0KKyNkZWZpbmUgUERNX1BSRVNFTlQNCisjZGVmaW5lIFBETV9DT1VOVCAxDQorDQorLyogSW50ZXItSUMgU291bmQgSW50ZXJmYWNlICovDQorI2RlZmluZSBJMlNfUFJFU0VOVA0KKyNkZWZpbmUgSTJTX0NPVU5UIDENCisNCisvKiBVbml2ZXJzYWwgU2VyaWFsIEJ1cyBEZXZpY2UgKi8NCisjZGVmaW5lIFVTQkRfUFJFU0VOVA0KKyNkZWZpbmUgVVNCRF9DT1VOVCAxDQorDQorLyogQVJNIFRydXN0Wm9uZSBDcnlwdG9jZWxsIDMxMCAqLw0KKyNkZWZpbmUgQ1JZUFRPQ0VMTF9QUkVTRU5UDQorI2RlZmluZSBDUllQVE9DRUxMX0NPVU5UIDENCisNCisvKiBRdWFkIFNQSSAqLw0KKyNkZWZpbmUgUVNQSV9QUkVTRU5UDQorI2RlZmluZSBRU1BJX0NPVU5UIDENCisNCisjZW5kaWYgICAgICAvLyBfTlJGNTI4NDBfUEVSSVBIRVJBTFNfSA0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyX3RvX25yZjUyODQwLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1Ml90b19ucmY1Mjg0MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZTNjNmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1Ml90b19ucmY1Mjg0MC5oCkBAIC0wLDAgKzEsODggQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisjaWZuZGVmIE5SRjUyX1RPX05SRjUyODQwX0gNCisjZGVmaW5lIE5SRjUyX1RPX05SRjUyODQwX0gNCisNCisvKmxpbnQgKytmbGIgIkVudGVyIGxpYnJhcnkgcmVnaW9uICovDQorDQorLyogVGhpcyBmaWxlIGlzIGdpdmVuIHRvIHByZXZlbnQgeW91ciBTVyBmcm9tIG5vdCBjb21waWxpbmcgd2l0aCB0aGUgbmFtZSBjaGFuZ2VzIGJldHdlZW4gblJGNTEgb3IgblJGNTI4MzIgYW5kIG5SRjUyODQwIGRldmljZXMuDQorICogSXQgcmVkZWZpbmVzIHRoZSBvbGQgblJGNTEgb3IgblJGNTI4MzIgbmFtZXMgaW50byB0aGUgbmV3IG9uZXMgYXMgbG9uZyBhcyB0aGUgZnVuY3Rpb25hbGl0eSBpcyBzdGlsbCBzdXBwb3J0ZWQuIElmIHRoZQ0KKyAqIGZ1bmN0aW9uYWxpdHkgaXMgZ29uZSwgdGhlcmUgb2xkIG5hbWVzIGFyZSBub3QgZGVmaW5lZCwgc28gY29tcGlsYXRpb24gd2lsbCBmYWlsLiBOb3RlIHRoYXQgYWxzbyBpbmNsdWRlcyBtYWNyb3MNCisgKiBmcm9tIHRoZSBucmY1Ml9uYW1lY2hhbmdlLmggZmlsZS4gKi8NCisNCisvKiBEaWZmZXJlbmNlcyBiZXR3ZWVuIGxhdGVzdCBuUkY1MiBoZWFkZXJzIGFuZCBuUkY1Mjg0MCBoZWFkZXJzLiAqLw0KKw0KKy8qIFVBUlQgKi8NCisvKiBUaGUgcmVnaXN0ZXJzIFBTRUxSVFMsIFBTRUxUWEQsIFBTRUxDVFMsIFBTRUxSWEQgd2VyZSByZXN0cnVjdHVyZWQgaW50byBhIHN0cnVjdC4gKi8NCisjZGVmaW5lIFBTRUxSVFMgICAgICAgUFNFTC5SVFMNCisjZGVmaW5lIFBTRUxUWEQgICAgICAgUFNFTC5UWEQNCisjZGVmaW5lIFBTRUxDVFMgICAgICAgUFNFTC5DVFMNCisjZGVmaW5lIFBTRUxSWEQgICAgICAgUFNFTC5SWEQNCisNCisvKiBUV0kgKi8NCisvKiBUaGUgcmVnaXN0ZXJzIFBTRUxTQ0wsIFBTRUxTREEgd2VyZSByZXN0cnVjdHVyZWQgaW50byBhIHN0cnVjdC4gKi8NCisjZGVmaW5lIFBTRUxTQ0wgICAgICAgUFNFTC5TQ0wNCisjZGVmaW5lIFBTRUxTREEgICAgICAgUFNFTC5TREENCisNCisNCisvKiBGcm9tIG5yZjUyX25hbWVfY2hhbmdlLmguIFNldmVyYWwgbWFjcm9zIGNoYW5nZWQgaW4gZGlmZmVyZW50IHZlcnNpb25zIG9mIG5SRjUyIGhlYWRlcnMuIEJ5IGRlZmluaW5nIHRoZSBmb2xsb3dpbmcsIGFueSBjb2RlIHdyaXR0ZW4gZm9yIGFueSB2ZXJzaW9uIG9mIG5SRjUyIGhlYWRlcnMgd2lsbCBzdGlsbCBjb21waWxlLiAqLw0KKw0KKy8qIEkyUyAqLw0KKy8qIFNldmVyYWwgZW51bWVyYXRpb25zIGNoYW5nZWQgY2FzZS4gQWRkaW5nIG9sZCBtYWNyb3MgdG8ga2VlcCBjb21waWxhdGlvbiBjb21wYXRpYmlsaXR5LiAqLw0KKyNkZWZpbmUgSTJTX0VOQUJMRV9FTkFCTEVfRElTQUJMRSAgICAgICAgICAgSTJTX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQNCisjZGVmaW5lIEkyU19FTkFCTEVfRU5BQkxFX0VOQUJMRSAgICAgICAgICAgIEkyU19FTkFCTEVfRU5BQkxFX0VuYWJsZWQNCisjZGVmaW5lIEkyU19DT05GSUdfTU9ERV9NT0RFX01BU1RFUiAgICAgICAgIEkyU19DT05GSUdfTU9ERV9NT0RFX01hc3Rlcg0KKyNkZWZpbmUgSTJTX0NPTkZJR19NT0RFX01PREVfU0xBVkUgICAgICAgICAgSTJTX0NPTkZJR19NT0RFX01PREVfU2xhdmUNCisjZGVmaW5lIEkyU19DT05GSUdfUlhFTl9SWEVOX0RJU0FCTEUgICAgICAgIEkyU19DT05GSUdfUlhFTl9SWEVOX0Rpc2FibGVkDQorI2RlZmluZSBJMlNfQ09ORklHX1JYRU5fUlhFTl9FTkFCTEUgICAgICAgICBJMlNfQ09ORklHX1JYRU5fUlhFTl9FbmFibGVkDQorI2RlZmluZSBJMlNfQ09ORklHX1RYRU5fVFhFTl9ESVNBQkxFICAgICAgICBJMlNfQ09ORklHX1RYRU5fVFhFTl9EaXNhYmxlZA0KKyNkZWZpbmUgSTJTX0NPTkZJR19UWEVOX1RYRU5fRU5BQkxFICAgICAgICAgSTJTX0NPTkZJR19UWEVOX1RYRU5fRW5hYmxlZA0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tFTl9NQ0tFTl9ESVNBQkxFICAgICAgSTJTX0NPTkZJR19NQ0tFTl9NQ0tFTl9EaXNhYmxlZA0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tFTl9NQ0tFTl9FTkFCTEUgICAgICAgSTJTX0NPTkZJR19NQ0tFTl9NQ0tFTl9FbmFibGVkDQorI2RlZmluZSBJMlNfQ09ORklHX1NXSURUSF9TV0lEVEhfOEJJVCAgICAgICBJMlNfQ09ORklHX1NXSURUSF9TV0lEVEhfOEJpdA0KKyNkZWZpbmUgSTJTX0NPTkZJR19TV0lEVEhfU1dJRFRIXzE2QklUICAgICAgSTJTX0NPTkZJR19TV0lEVEhfU1dJRFRIXzE2Qml0DQorI2RlZmluZSBJMlNfQ09ORklHX1NXSURUSF9TV0lEVEhfMjRCSVQgICAgICBJMlNfQ09ORklHX1NXSURUSF9TV0lEVEhfMjRCaXQNCisjZGVmaW5lIEkyU19DT05GSUdfQUxJR05fQUxJR05fTEVGVCAgICAgICAgIEkyU19DT05GSUdfQUxJR05fQUxJR05fTGVmdA0KKyNkZWZpbmUgSTJTX0NPTkZJR19BTElHTl9BTElHTl9SSUdIVCAgICAgICAgSTJTX0NPTkZJR19BTElHTl9BTElHTl9SaWdodA0KKyNkZWZpbmUgSTJTX0NPTkZJR19GT1JNQVRfRk9STUFUX0FMSUdORUQgICAgSTJTX0NPTkZJR19GT1JNQVRfRk9STUFUX0FsaWduZWQNCisjZGVmaW5lIEkyU19DT05GSUdfQ0hBTk5FTFNfQ0hBTk5FTFNfU1RFUkVPIEkyU19DT05GSUdfQ0hBTk5FTFNfQ0hBTk5FTFNfU3RlcmVvDQorI2RlZmluZSBJMlNfQ09ORklHX0NIQU5ORUxTX0NIQU5ORUxTX0xFRlQgICBJMlNfQ09ORklHX0NIQU5ORUxTX0NIQU5ORUxTX0xlZnQNCisjZGVmaW5lIEkyU19DT05GSUdfQ0hBTk5FTFNfQ0hBTk5FTFNfUklHSFQgIEkyU19DT05GSUdfQ0hBTk5FTFNfQ0hBTk5FTFNfUmlnaHQNCisNCisvKiBMUENPTVAgKi8NCisvKiBDb3JyZWN0ZWQgdHlwbyBpbiBSRVNVTFQgcmVnaXN0ZXIuICovDQorI2RlZmluZSBMUENPTVBfUkVTVUxUX1JFU1VMVF9CZWxsb3cgICAgICAgICBMUENPTVBfUkVTVUxUX1JFU1VMVF9CZWxvdw0KKw0KKw0KKy8qbGludCAtLWZsYiAiTGVhdmUgbGlicmFyeSByZWdpb24iICovDQorDQorI2VuZGlmIC8qIE5SRjUxX1RPX05SRjUyODQwX0ggKi8NCisNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9zeXN0ZW1fbnJmNTI4NDAuYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL3N5c3RlbV9ucmY1Mjg0MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODdjYWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9zeXN0ZW1fbnJmNTI4NDAuYwpAQCAtMCwwICsxLDI0OCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEyIEFSTSBMSU1JVEVEDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvDQorICogICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljDQorICogICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCisjaW5jbHVkZSAibnJmLmgiDQorI2luY2x1ZGUgInN5c3RlbV9ucmY1Mjg0MC5oIg0KKw0KKy8qbGludCArK2ZsYiAiRW50ZXIgbGlicmFyeSByZWdpb24iICovDQorDQorI2RlZmluZSBfX1NZU1RFTV9DTE9DS182NE0gICAgICAoNjQwMDAwMDBVTCkNCisNCitzdGF0aWMgYm9vbCBlcnJhdGFfMzYodm9pZCk7DQorc3RhdGljIGJvb2wgZXJyYXRhXzk4KHZvaWQpOw0KK3N0YXRpYyBib29sIGVycmF0YV8xMDModm9pZCk7DQorc3RhdGljIGJvb2wgZXJyYXRhXzExNSh2b2lkKTsNCitzdGF0aWMgYm9vbCBlcnJhdGFfMTIwKHZvaWQpOw0KKw0KKw0KKyNpZiBkZWZpbmVkICggX19DQ19BUk0gKQ0KK3VpbnQzMl90IFN5c3RlbUNvcmVDbG9jayBfX2F0dHJpYnV0ZV9fKCh1c2VkKSkgPSBfX1NZU1RFTV9DTE9DS182NE07DQorI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQ0KK19fcm9vdCB1aW50MzJfdCBTeXN0ZW1Db3JlQ2xvY2sgPSBfX1NZU1RFTV9DTE9DS182NE07DQorI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkNCit1aW50MzJfdCBTeXN0ZW1Db3JlQ2xvY2sgX19hdHRyaWJ1dGVfXygodXNlZCkpID0gX19TWVNURU1fQ0xPQ0tfNjRNOw0KKyNlbmRpZg0KKw0KK3ZvaWQgU3lzdGVtQ29yZUNsb2NrVXBkYXRlKHZvaWQpDQorew0KKyAgICBTeXN0ZW1Db3JlQ2xvY2sgPSBfX1NZU1RFTV9DTE9DS182NE07DQorfQ0KKw0KK3ZvaWQgU3lzdGVtSW5pdCh2b2lkKQ0KK3sNCisgICAgLyogV29ya2Fyb3VuZCBmb3IgRXJyYXRhIDM2ICJDTE9DSzogU29tZSByZWdpc3RlcnMgYXJlIG5vdCByZXNldCB3aGVuIGV4cGVjdGVkIiBmb3VuZCBhdCB0aGUgRXJyYXRhIGRvY3VtZW50DQorICAgICAgIGZvciB5b3VyIGRldmljZSBsb2NhdGVkIGF0IGh0dHBzOi8vaW5mb2NlbnRlci5ub3JkaWNzZW1pLmNvbS8gICovDQorICAgIGlmIChlcnJhdGFfMzYoKSkNCisgICAgew0KKyAgICAgICAgTlJGX0NMT0NLLT5FVkVOVFNfRE9ORSA9IDA7DQorICAgICAgICBOUkZfQ0xPQ0stPkVWRU5UU19DVFRPID0gMDsNCisgICAgICAgIE5SRl9DTE9DSy0+Q1RJViA9IDA7DQorICAgIH0NCisNCisgICAgLyogV29ya2Fyb3VuZCBmb3IgRXJyYXRhIDk4ICJORkNUOiBOb3QgYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBwZWVyIiBmb3VuZCBhdCB0aGUgRXJyYXRhIGRvY3VtZW50DQorICAgICAgIGZvciB5b3VyIGRldmljZSBsb2NhdGVkIGF0IGh0dHBzOi8vaW5mb2NlbnRlci5ub3JkaWNzZW1pLmNvbS8gICovDQorICAgIGlmIChlcnJhdGFfOTgoKSkNCisgICAgew0KKyAgICAgICAgKih2b2xhdGlsZSB1aW50MzJfdCAqKTB4NDAwMDU2OEN1bCA9IDB4MDAwMzgxNDh1bDsNCisgICAgfQ0KKw0KKyAgICAvKiBXb3JrYXJvdW5kIGZvciBFcnJhdGEgMTAzICJDQ006IFdyb25nIHJlc2V0IHZhbHVlIG9mIENDTSBNQVhQQUNLRVRTSVpFIiBmb3VuZCBhdCB0aGUgRXJyYXRhIGRvY3VtZW50DQorICAgICAgIGZvciB5b3VyIGRldmljZSBsb2NhdGVkIGF0IGh0dHBzOi8vaW5mb2NlbnRlci5ub3JkaWNzZW1pLmNvbS8gICovDQorICAgIGlmIChlcnJhdGFfMTAzKCkpDQorICAgIHsNCisgICAgICAgIE5SRl9DQ00tPk1BWFBBQ0tFVFNJWkUgPSAweEZCdWw7DQorICAgIH0NCisNCisgICAgLyogV29ya2Fyb3VuZCBmb3IgRXJyYXRhIDExNSAiUkFNOiBSQU0gY29udGVudCBjYW5ub3QgYmUgdHJ1c3RlZCB1cG9uIHdha2luZyB1cCBmcm9tIFN5c3RlbSBPTiBJZGxlIG9yIFN5c3RlbSBPRkYgbW9kZSIgZm91bmQgYXQgdGhlIEVycmF0YSBkb2N1bWVudA0KKyAgICAgICBmb3IgeW91ciBkZXZpY2UgbG9jYXRlZCBhdCBodHRwczovL2luZm9jZW50ZXIubm9yZGljc2VtaS5jb20vICAqLw0KKyAgICBpZiAoZXJyYXRhXzExNSgpKQ0KKyAgICB7DQorICAgICAgICAqKHZvbGF0aWxlIHVpbnQzMl90ICopMHg0MDAwMEVFNCA9ICgqKHZvbGF0aWxlIHVpbnQzMl90ICopMHg0MDAwMEVFNCAmIDB4RkZGRkZGRjApIHwgKCoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopMHgxMDAwMDI1OCAmIDB4MDAwMDAwMEYpOw0KKyAgICB9DQorDQorICAgIC8qIFdvcmthcm91bmQgZm9yIEVycmF0YSAxMjAgIlFTUEk6IERhdGEgcmVhZCBvciB3cml0dGVuIGlzIGNvcnJ1cHRlZCIgZm91bmQgYXQgdGhlIEVycmF0YSBkb2N1bWVudA0KKyAgICAgICBmb3IgeW91ciBkZXZpY2UgbG9jYXRlZCBhdCBodHRwczovL2luZm9jZW50ZXIubm9yZGljc2VtaS5jb20vICAqLw0KKyAgICBpZiAoZXJyYXRhXzEyMCgpKQ0KKyAgICB7DQorICAgICAgICAqKHZvbGF0aWxlIHVpbnQzMl90ICopMHg0MDAyOTY0MHVsID0gMHgyMDB1bDsNCisgICAgfQ0KKw0KKyAgICAvKiBFbmFibGUgdGhlIEZQVSBpZiB0aGUgY29tcGlsZXIgdXNlZCBmbG9hdGluZyBwb2ludCB1bml0IGluc3RydWN0aW9ucy4gX19GUFVfVVNFRCBpcyBhIE1BQ1JPIGRlZmluZWQgYnkgdGhlDQorICAgICAqIGNvbXBpbGVyLiBTaW5jZSB0aGUgRlBVIGNvbnN1bWVzIGVuZXJneSwgcmVtZW1iZXIgdG8gZGlzYWJsZSBGUFUgdXNlIGluIHRoZSBjb21waWxlciBpZiBmbG9hdGluZyBwb2ludCB1bml0DQorICAgICAqIG9wZXJhdGlvbnMgYXJlIG5vdCB1c2VkIGluIHlvdXIgY29kZS4gKi8NCisjaWYgKF9fRlBVX1VTRUQgPT0gMSkNCisgICAgU0NCLT5DUEFDUiB8PSAoM1VMIDw8IDIwKSB8ICgzVUwgPDwgMjIpOw0KKyAgICBfX0RTQigpOw0KKyAgICBfX0lTQigpOw0KKyNlbmRpZg0KKw0KKyAgICAvKiBDb25maWd1cmUgTkZDVCBwaW5zIGFzIEdQSU9zIGlmIE5GQ1QgaXMgbm90IHRvIGJlIHVzZWQgaW4geW91ciBjb2RlLiBJZiBDT05GSUdfTkZDVF9QSU5TX0FTX0dQSU9TIGlzIG5vdCBkZWZpbmVkLA0KKyAgICAgICB0d28gR1BJT3MgKHNlZSBQcm9kdWN0IFNwZWNpZmljYXRpb24gdG8gc2VlIHdoaWNoIG9uZXMpIHdpbGwgYmUgcmVzZXJ2ZWQgZm9yIE5GQyBhbmQgd2lsbCBub3QgYmUgYXZhaWxhYmxlIGFzDQorICAgICAgIG5vcm1hbCBHUElPcy4gKi8NCisjaWYgZGVmaW5lZCAoQ09ORklHX05GQ1RfUElOU19BU19HUElPUykNCisNCisgICAgaWYgKChOUkZfVUlDUi0+TkZDUElOUyAmIFVJQ1JfTkZDUElOU19QUk9URUNUX01zaykgPT0gKFVJQ1JfTkZDUElOU19QUk9URUNUX05GQyA8PCBVSUNSX05GQ1BJTlNfUFJPVEVDVF9Qb3MpKQ0KKyAgICB7DQorICAgICAgICBOUkZfTlZNQy0+Q09ORklHID0gTlZNQ19DT05GSUdfV0VOX1dlbiA8PCBOVk1DX0NPTkZJR19XRU5fUG9zOw0KKw0KKyAgICAgICAgd2hpbGUgKE5SRl9OVk1DLT5SRUFEWSA9PSBOVk1DX1JFQURZX1JFQURZX0J1c3kpIHt9DQorDQorICAgICAgICBOUkZfVUlDUi0+TkZDUElOUyAmPSB+VUlDUl9ORkNQSU5TX1BST1RFQ1RfTXNrOw0KKw0KKyAgICAgICAgd2hpbGUgKE5SRl9OVk1DLT5SRUFEWSA9PSBOVk1DX1JFQURZX1JFQURZX0J1c3kpIHt9DQorDQorICAgICAgICBOUkZfTlZNQy0+Q09ORklHID0gTlZNQ19DT05GSUdfV0VOX1JlbiA8PCBOVk1DX0NPTkZJR19XRU5fUG9zOw0KKw0KKyAgICAgICAgd2hpbGUgKE5SRl9OVk1DLT5SRUFEWSA9PSBOVk1DX1JFQURZX1JFQURZX0J1c3kpIHt9DQorDQorICAgICAgICBOVklDX1N5c3RlbVJlc2V0KCk7DQorICAgIH0NCisNCisjZW5kaWYNCisNCisgICAgLyogQ29uZmlndXJlIEdQSU8gcGFkcyBhcyBwUGluIFJlc2V0IHBpbiBpZiBQaW4gUmVzZXQgY2FwYWJpbGl0aWVzIGRlc2lyZWQuIElmIENPTkZJR19HUElPX0FTX1BJTlJFU0VUIGlzIG5vdA0KKyAgICAgIGRlZmluZWQsIHBpbiByZXNldCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIE9uZSBHUElPIChzZWUgUHJvZHVjdCBTcGVjaWZpY2F0aW9uIHRvIHNlZSB3aGljaCBvbmUpIHdpbGwgdGhlbiBiZQ0KKyAgICAgIHJlc2VydmVkIGZvciBQaW5SZXNldCBhbmQgbm90IGF2YWlsYWJsZSBhcyBub3JtYWwgR1BJTy4gKi8NCisjaWYgZGVmaW5lZCAoQ09ORklHX0dQSU9fQVNfUElOUkVTRVQpDQorDQorICAgIGlmICgoKE5SRl9VSUNSLT5QU0VMUkVTRVRbMF0gJiBVSUNSX1BTRUxSRVNFVF9DT05ORUNUX01zaykgIT0gKFVJQ1JfUFNFTFJFU0VUX0NPTk5FQ1RfQ29ubmVjdGVkIDw8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJQ1JfUFNFTFJFU0VUX0NPTk5FQ1RfUG9zKSkgfHwNCisgICAgICAgICgoTlJGX1VJQ1ItPlBTRUxSRVNFVFsxXSAmIFVJQ1JfUFNFTFJFU0VUX0NPTk5FQ1RfTXNrKSAhPSAoVUlDUl9QU0VMUkVTRVRfQ09OTkVDVF9Db25uZWN0ZWQgPDwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlDUl9QU0VMUkVTRVRfQ09OTkVDVF9Qb3MpKSkNCisgICAgew0KKyAgICAgICAgTlJGX05WTUMtPkNPTkZJRyA9IE5WTUNfQ09ORklHX1dFTl9XZW4gPDwgTlZNQ19DT05GSUdfV0VOX1BvczsNCisNCisgICAgICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KSB7fQ0KKw0KKyAgICAgICAgTlJGX1VJQ1ItPlBTRUxSRVNFVFswXSA9IDE4Ow0KKw0KKyAgICAgICAgd2hpbGUgKE5SRl9OVk1DLT5SRUFEWSA9PSBOVk1DX1JFQURZX1JFQURZX0J1c3kpIHt9DQorDQorICAgICAgICBOUkZfVUlDUi0+UFNFTFJFU0VUWzFdID0gMTg7DQorDQorICAgICAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkge30NCisNCisgICAgICAgIE5SRl9OVk1DLT5DT05GSUcgPSBOVk1DX0NPTkZJR19XRU5fUmVuIDw8IE5WTUNfQ09ORklHX1dFTl9Qb3M7DQorDQorICAgICAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkge30NCisNCisgICAgICAgIE5WSUNfU3lzdGVtUmVzZXQoKTsNCisgICAgfQ0KKw0KKyNlbmRpZg0KKw0KKyAgICAvKiBFbmFibGUgU1dPIHRyYWNlIGZ1bmN0aW9uYWxpdHkuIElmIEVOQUJMRV9TV08gaXMgbm90IGRlZmluZWQsIFNXTyBwaW4gd2lsbCBiZSB1c2VkIGFzIEdQSU8gKHNlZSBQcm9kdWN0DQorICAgICAgIFNwZWNpZmljYXRpb24gdG8gc2VlIHdoaWNoIG9uZSkuICovDQorI2lmIGRlZmluZWQgKEVOQUJMRV9TV08pDQorICAgIENvcmVEZWJ1Zy0+REVNQ1IgfD0gQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Nc2s7DQorICAgIE5SRl9DTE9DSy0+VFJBQ0VDT05GSUcgfD0gQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VNVVhfU2VyaWFsIDw8IENMT0NLX1RSQUNFQ09ORklHX1RSQUNFTVVYX1BvczsNCisgICAgTlJGX1AxLT5QSU5fQ05GWzBdID0gKEdQSU9fUElOX0NORl9EUklWRV9IMEgxIDw8IEdQSU9fUElOX0NORl9EUklWRV9Qb3MpIHwgKEdQSU9fUElOX0NORl9JTlBVVF9Db25uZWN0IDw8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1BJTl9DTkZfSU5QVVRfUG9zKSB8IChHUElPX1BJTl9DTkZfRElSX091dHB1dCA8PCBHUElPX1BJTl9DTkZfRElSX1Bvcyk7DQorI2VuZGlmDQorDQorICAgIC8qIEVuYWJsZSBUcmFjZSBmdW5jdGlvbmFsaXR5LiBJZiBFTkFCTEVfVFJBQ0UgaXMgbm90IGRlZmluZWQsIFRSQUNFIHBpbnMgd2lsbCBiZSB1c2VkIGFzIEdQSU9zIChzZWUgUHJvZHVjdA0KKyAgICAgICBTcGVjaWZpY2F0aW9uIHRvIHNlZSB3aGljaCBvbmVzKS4gKi8NCisjaWYgZGVmaW5lZCAoRU5BQkxFX1RSQUNFKQ0KKyAgICBDb3JlRGVidWctPkRFTUNSIHw9IENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfTXNrOw0KKyAgICBOUkZfQ0xPQ0stPlRSQUNFQ09ORklHIHw9IENMT0NLX1RSQUNFQ09ORklHX1RSQUNFTVVYX1BhcmFsbGVsIDw8IENMT0NLX1RSQUNFQ09ORklHX1RSQUNFTVVYX1BvczsNCisgICAgTlJGX1AwLT5QSU5fQ05GWzddICA9IChHUElPX1BJTl9DTkZfRFJJVkVfSDBIMSA8PCBHUElPX1BJTl9DTkZfRFJJVkVfUG9zKSB8IChHUElPX1BJTl9DTkZfSU5QVVRfQ29ubmVjdCA8PA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUElOX0NORl9JTlBVVF9Qb3MpIHwgKEdQSU9fUElOX0NORl9ESVJfT3V0cHV0IDw8IEdQSU9fUElOX0NORl9ESVJfUG9zKTsNCisgICAgTlJGX1AxLT5QSU5fQ05GWzBdICA9IChHUElPX1BJTl9DTkZfRFJJVkVfSDBIMSA8PCBHUElPX1BJTl9DTkZfRFJJVkVfUG9zKSB8IChHUElPX1BJTl9DTkZfSU5QVVRfQ29ubmVjdCA8PA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUElOX0NORl9JTlBVVF9Qb3MpIHwgKEdQSU9fUElOX0NORl9ESVJfT3V0cHV0IDw8IEdQSU9fUElOX0NORl9ESVJfUG9zKTsNCisgICAgTlJGX1AwLT5QSU5fQ05GWzEyXSA9IChHUElPX1BJTl9DTkZfRFJJVkVfSDBIMSA8PCBHUElPX1BJTl9DTkZfRFJJVkVfUG9zKSB8IChHUElPX1BJTl9DTkZfSU5QVVRfQ29ubmVjdCA8PA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUElOX0NORl9JTlBVVF9Qb3MpIHwgKEdQSU9fUElOX0NORl9ESVJfT3V0cHV0IDw8IEdQSU9fUElOX0NORl9ESVJfUG9zKTsNCisgICAgTlJGX1AwLT5QSU5fQ05GWzExXSA9IChHUElPX1BJTl9DTkZfRFJJVkVfSDBIMSA8PCBHUElPX1BJTl9DTkZfRFJJVkVfUG9zKSB8IChHUElPX1BJTl9DTkZfSU5QVVRfQ29ubmVjdCA8PA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUElOX0NORl9JTlBVVF9Qb3MpIHwgKEdQSU9fUElOX0NORl9ESVJfT3V0cHV0IDw8IEdQSU9fUElOX0NORl9ESVJfUG9zKTsNCisgICAgTlJGX1AxLT5QSU5fQ05GWzldICA9IChHUElPX1BJTl9DTkZfRFJJVkVfSDBIMSA8PCBHUElPX1BJTl9DTkZfRFJJVkVfUG9zKSB8IChHUElPX1BJTl9DTkZfSU5QVVRfQ29ubmVjdCA8PA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUElOX0NORl9JTlBVVF9Qb3MpIHwgKEdQSU9fUElOX0NORl9ESVJfT3V0cHV0IDw8IEdQSU9fUElOX0NORl9ESVJfUG9zKTsNCisjZW5kaWYNCisNCisgICAgU3lzdGVtQ29yZUNsb2NrVXBkYXRlKCk7DQorfQ0KKw0KKw0KK3N0YXRpYyBib29sIGVycmF0YV8zNih2b2lkKQ0KK3sNCisgICAgaWYgKCgqKHVpbnQzMl90ICopMHgxMDAwMDEzMHVsID09IDB4OHVsKSAmJiAoKih1aW50MzJfdCAqKTB4MTAwMDAxMzR1bCA9PSAweDB1bCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorICAgIHJldHVybiBmYWxzZTsNCit9DQorDQorDQorc3RhdGljIGJvb2wgZXJyYXRhXzk4KHZvaWQpDQorew0KKyAgICBpZiAoKCoodWludDMyX3QgKikweDEwMDAwMTMwdWwgPT0gMHg4dWwpICYmICgqKHVpbnQzMl90ICopMHgxMDAwMDEzNHVsID09IDB4MHVsKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCisNCitzdGF0aWMgYm9vbCBlcnJhdGFfMTAzKHZvaWQpDQorew0KKyAgICBpZiAoKCoodWludDMyX3QgKikweDEwMDAwMTMwdWwgPT0gMHg4dWwpICYmICgqKHVpbnQzMl90ICopMHgxMDAwMDEzNHVsID09IDB4MHVsKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCisNCitzdGF0aWMgYm9vbCBlcnJhdGFfMTE1KHZvaWQpDQorew0KKyAgICBpZiAoKCoodWludDMyX3QgKikweDEwMDAwMTMwdWwgPT0gMHg4dWwpICYmICgqKHVpbnQzMl90ICopMHgxMDAwMDEzNHVsID09IDB4MHVsKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCisNCitzdGF0aWMgYm9vbCBlcnJhdGFfMTIwKHZvaWQpDQorew0KKyAgICBpZiAoKCoodWludDMyX3QgKikweDEwMDAwMTMwdWwgPT0gMHg4dWwpICYmICgqKHVpbnQzMl90ICopMHgxMDAwMDEzNHVsID09IDB4MHVsKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCisvKmxpbnQgLS1mbGIgIkxlYXZlIGxpYnJhcnkgcmVnaW9uIiAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL3N5c3RlbV9ucmY1Mjg0MC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2Uvc3lzdGVtX25yZjUyODQwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0NmMxNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL3N5c3RlbV9ucmY1Mjg0MC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMiBBUk0gTElNSVRFRA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bw0KKyAqICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYw0KKyAqICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBTWVNURU1fTlJGNTI4NDBfSA0KKyNkZWZpbmUgU1lTVEVNX05SRjUyODQwX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorDQorDQorZXh0ZXJuIHVpbnQzMl90IFN5c3RlbUNvcmVDbG9jazsgICAgLyohPCBTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5IChDb3JlIENsb2NrKSAgKi8NCisNCisvKioNCisgKiBJbml0aWFsaXplIHRoZSBzeXN0ZW0NCisgKg0KKyAqIEBwYXJhbSAgbm9uZQ0KKyAqIEByZXR1cm4gbm9uZQ0KKyAqDQorICogQGJyaWVmICBTZXR1cCB0aGUgbWljcm9jb250cm9sbGVyIHN5c3RlbS4NCisgKiAgICAgICAgIEluaXRpYWxpemUgdGhlIFN5c3RlbSBhbmQgdXBkYXRlIHRoZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUuDQorICovDQorZXh0ZXJuIHZvaWQgU3lzdGVtSW5pdCh2b2lkKTsNCisNCisvKioNCisgKiBVcGRhdGUgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlDQorICoNCisgKiBAcGFyYW0gIG5vbmUNCisgKiBAcmV0dXJuIG5vbmUNCisgKg0KKyAqIEBicmllZiAgVXBkYXRlcyB0aGUgU3lzdGVtQ29yZUNsb2NrIHdpdGggY3VycmVudCBjb3JlIENsb2NrDQorICogICAgICAgICByZXRyaWV2ZWQgZnJvbSBjcHUgcmVnaXN0ZXJzLg0KKyAqLw0KK2V4dGVybiB2b2lkIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIFNZU1RFTV9OUkY1Mjg0MF9IICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2Nsb2NrL25yZl9kcnZfY2xvY2suYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9jbG9jay9ucmZfZHJ2X2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5NDY5YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9jbG9jay9ucmZfZHJ2X2Nsb2NrLmMKQEAgLTAsMCArMSwxNjYgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpbmNsdWRlICJucmZfZHJ2X2Nsb2NrLmgiDQorDQorI2RlZmluZSBOUkZfRVJST1JfTU9EVUxFX0FMUkVBRFlfSU5JVElBTElaRUQgMHg4MDg1DQorDQorLypsaW50IC1zYXZlIC1lNjUyICovDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZDTEtfUkMgICAgQ0xPQ0tfTEZDTEtTUkNfU1JDX1JDDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZDTEtfWHRhbCAgQ0xPQ0tfTEZDTEtTUkNfU1JDX1h0YWwNCisjZGVmaW5lIE5SRl9DTE9DS19MRkNMS19TeW50aCBDTE9DS19MRkNMS1NSQ19TUkNfU3ludGgNCisvKmxpbnQgLXJlc3RvcmUgKi8NCisNCit2b2xhdGlsZSB1aW50MzJfdCBtX2hmY2xrX3JlcXVlc3RzOyAgLyo8IEhpZ2ggZnJlcXVlbmN5IGNsb2NrIHJlcXVlc3RzLiAqLw0KK3ZvbGF0aWxlIHVpbnQzMl90IG1fbGZjbGtfcmVxdWVzdHM7ICAvKjwgTG93IGZyZXF1ZW5jeSBjbG9jayByZXF1ZXN0cy4gKi8NCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIHN0YXJ0aW5nIExGQ0xLLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IHdpdGhvdXQgd2FpdGluZyBmb3Igc3RhcnQuDQorICovDQorc3RhdGljIHZvaWQgbGZjbGtfc3RhcnQodm9pZCkNCit7DQorICAgIG5yZl9jbG9ja19ldmVudF9jbGVhcihOUkZfQ0xPQ0tfRVZFTlRfTEZDTEtTVEFSVEVEKTsNCisgICAgbnJmX2Nsb2NrX3Rhc2tfdHJpZ2dlcihOUkZfQ0xPQ0tfVEFTS19MRkNMS1NUQVJUKTsNCit9DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBzdG9wcGluZyBMRkNMSyBhbmQgY2FsaWJyYXRpb24gKGlmIGl0IHdhcyBzZXQgdXApLg0KKyAqLw0KK3N0YXRpYyB2b2lkIGxmY2xrX3N0b3Aodm9pZCkNCit7DQorICAgIG5yZl9jbG9ja190YXNrX3RyaWdnZXIoTlJGX0NMT0NLX1RBU0tfTEZDTEtTVE9QKTsNCisNCisgICAgd2hpbGUgKG5yZl9jbG9ja19sZl9pc19ydW5uaW5nKCkpIHt9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGhmY2xrX3N0YXJ0KHZvaWQpDQorew0KKyAgICBucmZfY2xvY2tfZXZlbnRfY2xlYXIoTlJGX0NMT0NLX0VWRU5UX0hGQ0xLU1RBUlRFRCk7DQorICAgIG5yZl9jbG9ja190YXNrX3RyaWdnZXIoTlJGX0NMT0NLX1RBU0tfSEZDTEtTVEFSVCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGhmY2xrX3N0b3Aodm9pZCkNCit7DQorICAgIG5yZl9jbG9ja190YXNrX3RyaWdnZXIoTlJGX0NMT0NLX1RBU0tfSEZDTEtTVE9QKTsNCisNCisgICAgd2hpbGUgKG5yZl9jbG9ja19oZl9pc19ydW5uaW5nKE5SRl9DTE9DS19IRkNMS19ISUdIX0FDQ1VSQUNZKSkge30NCit9DQorDQordWludDMyX3QgbnJmX2Rydl9jbG9ja19pbml0KHZvaWQpDQorew0KKyAgICBucmZfY2xvY2tfbGZfc3JjX3NldChOUkZfQ0xPQ0tfTEZDTEtfWHRhbCk7DQorICAgIHJldHVybiAwOw0KK30NCisNCit2b2lkIG5yZl9kcnZfY2xvY2tfdW5pbml0KHZvaWQpDQorew0KKyAgICBsZmNsa19zdG9wKCk7DQorICAgIGhmY2xrX3N0b3AoKTsNCit9DQorDQordm9pZCBucmZfZHJ2X2Nsb2NrX2xmY2xrX3JlcXVlc3QobnJmX2Rydl9jbG9ja19oYW5kbGVyX2l0ZW1fdCAqcF9oYW5kbGVyX2l0ZW0pDQorew0KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBsZmNsa19yZXF1ZXN0czsNCisgICAgKHZvaWQpIHBfaGFuZGxlcl9pdGVtOw0KKw0KKyAgICBkbw0KKyAgICB7DQorDQorICAgICAgICBsZmNsa19yZXF1ZXN0cyA9IF9fTERSRVhXKCZtX2xmY2xrX3JlcXVlc3RzKTsNCisgICAgICAgIGxmY2xrX3JlcXVlc3RzICs9IDE7DQorICAgIH0NCisgICAgd2hpbGUgKF9fU1RSRVhXKGxmY2xrX3JlcXVlc3RzLCAmbV9sZmNsa19yZXF1ZXN0cykpOw0KKw0KKyAgICBpZiAoIW5yZl9jbG9ja19sZl9pc19ydW5uaW5nKCkpDQorICAgIHsNCisgICAgICAgIGxmY2xrX3N0YXJ0KCk7DQorICAgIH0NCit9DQorDQordm9pZCBucmZfZHJ2X2Nsb2NrX2xmY2xrX3JlbGVhc2Uodm9pZCkNCit7DQorICAgIHZvbGF0aWxlIHVpbnQzMl90IGxmY2xrX3JlcXVlc3RzOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICBsZmNsa19yZXF1ZXN0cyA9IF9fTERSRVhXKCZtX2xmY2xrX3JlcXVlc3RzKTsNCisgICAgICAgIGxmY2xrX3JlcXVlc3RzIC09IDE7DQorICAgIH0NCisgICAgd2hpbGUgKF9fU1RSRVhXKGxmY2xrX3JlcXVlc3RzLCAmbV9sZmNsa19yZXF1ZXN0cykpOw0KKw0KKyAgICBpZiAobnJmX2Nsb2NrX2xmX2lzX3J1bm5pbmcoKSAmJiBtX2xmY2xrX3JlcXVlc3RzID09IDApDQorICAgIHsNCisgICAgICAgIGxmY2xrX3N0b3AoKTsNCisgICAgfQ0KK30NCisNCitib29sIG5yZl9kcnZfY2xvY2tfbGZjbGtfaXNfcnVubmluZyh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIG5yZl9jbG9ja19sZl9pc19ydW5uaW5nKCk7DQorfQ0KKw0KK3ZvaWQgbnJmX2Rydl9jbG9ja19oZmNsa19yZXF1ZXN0KG5yZl9kcnZfY2xvY2tfaGFuZGxlcl9pdGVtX3QgKnBfaGFuZGxlcl9pdGVtKQ0KK3sNCisgICAgdm9sYXRpbGUgdWludDMyX3QgaGZjbGtfcmVxdWVzdHM7DQorICAgICh2b2lkKSBwX2hhbmRsZXJfaXRlbTsNCisNCisgICAgZG8NCisgICAgew0KKw0KKyAgICAgICAgaGZjbGtfcmVxdWVzdHMgPSBfX0xEUkVYVygmbV9oZmNsa19yZXF1ZXN0cyk7DQorICAgICAgICBoZmNsa19yZXF1ZXN0cyArPSAxOw0KKyAgICB9DQorICAgIHdoaWxlIChfX1NUUkVYVyhoZmNsa19yZXF1ZXN0cywgJm1faGZjbGtfcmVxdWVzdHMpKTsNCisNCisgICAgaWYgKCFucmZfY2xvY2tfaGZfaXNfcnVubmluZyhOUkZfQ0xPQ0tfSEZDTEtfSElHSF9BQ0NVUkFDWSkpDQorICAgIHsNCisgICAgICAgIGhmY2xrX3N0YXJ0KCk7DQorICAgIH0NCit9DQorDQordm9pZCBucmZfZHJ2X2Nsb2NrX2hmY2xrX3JlbGVhc2Uodm9pZCkNCit7DQorICAgIHZvbGF0aWxlIHVpbnQzMl90IGhmY2xrX3JlcXVlc3RzOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICBoZmNsa19yZXF1ZXN0cyA9IF9fTERSRVhXKCZtX2hmY2xrX3JlcXVlc3RzKTsNCisgICAgICAgIGhmY2xrX3JlcXVlc3RzIC09IDE7DQorICAgIH0NCisgICAgd2hpbGUgKF9fU1RSRVhXKGhmY2xrX3JlcXVlc3RzLCAmbV9oZmNsa19yZXF1ZXN0cykpOw0KKw0KKyAgICBpZiAobnJmX2Nsb2NrX2hmX2lzX3J1bm5pbmcoTlJGX0NMT0NLX0hGQ0xLX0hJR0hfQUNDVVJBQ1kpICYmIG1faGZjbGtfcmVxdWVzdHMgPT0gMCkNCisgICAgew0KKyAgICAgICAgaGZjbGtfc3RvcCgpOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgbnJmX2Rydl9jbG9ja19oZmNsa19pc19ydW5uaW5nKHZvaWQpDQorew0KKyAgICByZXR1cm4gbnJmX2Nsb2NrX2hmX2lzX3J1bm5pbmcoTlJGX0NMT0NLX0hGQ0xLX0hJR0hfQUNDVVJBQ1kpOw0KK30NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvY2xvY2svbnJmX2Rydl9jbG9jay5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2Nsb2NrL25yZl9kcnZfY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjIyN2M2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2Nsb2NrL25yZl9kcnZfY2xvY2suaApAQCAtMCwwICsxLDE0MyBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkZfRFJWX0NMT0NLX0hfXw0KKyNkZWZpbmUgTlJGX0RSVl9DTE9DS19IX18NCisNCisjaW5jbHVkZSA8c3RkYm9vbC5oPg0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSA8bnJmX2Nsb2NrLmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqDQorICogQGJyaWVmIFNpbXBsaWZ5IHZlcnNpb24gdG8ga2VlcCBBUEkgb2YgU0RLLg0KKyAqLw0KK3R5cGVkZWYgdm9pZCBucmZfZHJ2X2Nsb2NrX2hhbmRsZXJfaXRlbV90Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgaW5pdGlhbGl6aW5nIHRoZSBucmZfZHJ2X2Nsb2NrIG1vZHVsZS4NCisgKg0KKyAqIEFmdGVyIGluaXRpYWxpemF0aW9uLCB0aGUgbW9kdWxlIGlzIGluIHBvd2VyIG9mZiBzdGF0ZSAoY2xvY2tzIGFyZSBub3QgcmVxdWVzdGVkKS4NCisgKg0KKyAqIEByZXR2YWwgICAgIE5SRl9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHByb2NlZHVyZSB3YXMgc3VjY2Vzc2Z1bC4NCisgKiBAcmV0dmFsICAgICBOUkZfRVJST1JfTU9EVUxFX0FMUkVBRFlfSU5JVElBTElaRUQgIElmIHRoZSBkcml2ZXIgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQuDQorICovDQordWludDMyX3QgbnJmX2Rydl9jbG9ja19pbml0KHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgdW5pbml0aWFsaXppbmcgdGhlIGNsb2NrIG1vZHVsZS4NCisgKg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9jbG9ja191bmluaXQodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXF1ZXN0aW5nIHRoZSBMRkNMSy4NCisgKg0KKyAqIFRoZSBsb3ctZnJlcXVlbmN5IGNsb2NrIGNhbiBiZSByZXF1ZXN0ZWQgYnkgZGlmZmVyZW50IG1vZHVsZXMNCisgKiBvciBjb250ZXh0cy4gVGhlIGRyaXZlciBlbnN1cmVzIHRoYXQgdGhlIGNsb2NrIHdpbGwgYmUgc3RhcnRlZCBvbmx5IHdoZW4gaXQgaXMgcmVxdWVzdGVkDQorICogdGhlIGZpcnN0IHRpbWUuIElmIHRoZSBjbG9jayBpcyBub3QgcmVhZHkgYnV0IGl0IHdhcyBhbHJlYWR5IHN0YXJ0ZWQsIHRoZSBoYW5kbGVyIGl0ZW0gdGhhdCBpcw0KKyAqIHByb3ZpZGVkIGFzIGFuIGlucHV0IHBhcmFtZXRlciBpcyBhZGRlZCB0byB0aGUgbGlzdCBvZiBoYW5kbGVycyB0aGF0IHdpbGwgYmUgbm90aWZpZWQNCisgKiB3aGVuIHRoZSBjbG9jayBpcyBzdGFydGVkLiBJZiB0aGUgY2xvY2sgaXMgYWxyZWFkeSBlbmFibGVkLCB1c2VyIGNhbGxiYWNrIGlzIGNhbGxlZCBmcm9tIHRoZQ0KKyAqIGN1cnJlbnQgY29udGV4dC4NCisgKg0KKyAqIFRoZSBmaXJzdCByZXF1ZXN0IHdpbGwgc3RhcnQgdGhlIHNlbGVjdGVkIExGQ0xLIHNvdXJjZS4gSWYgYW4gZXZlbnQgaGFuZGxlciBpcw0KKyAqIHByb3ZpZGVkLCBpdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZSBMRkNMSyBpcyBzdGFydGVkLiBJZiB0aGUgTEZDTEsgd2FzIGFscmVhZHkgc3RhcnRlZCBhdCB0aGlzDQorICogdGltZSwgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBBZGRpdGlvbmFsbHksDQorICogdGhlIEByZWYgbnJmX2Rydl9jbG9ja19sZmNsa19pc19ydW5uaW5nIGZ1bmN0aW9uIGNhbiBiZSBwb2xsZWQgdG8gY2hlY2sgaWYgdGhlIGNsb2NrIGhhcyBzdGFydGVkLg0KKyAqDQorICogQG5vdGUgV2hlbiBhIFNvZnREZXZpY2UgaXMgZW5hYmxlZCwgdGhlIExGQ0xLIGlzIGFsd2F5cyBydW5uaW5nIGFuZCB0aGUgZHJpdmVyIGNhbm5vdCBjb250cm9sIGl0Lg0KKyAqDQorICogQG5vdGUgVGhlIGhhbmRsZXIgaXRlbSBwcm92aWRlZCBieSB0aGUgdXNlciBjYW5ub3QgYmUgYW4gYXV0b21hdGljIHZhcmlhYmxlLg0KKyAqDQorICogQHBhcmFtW2luXSBwX2hhbmRsZXJfaXRlbSBBIHBvaW50ZXIgdG8gdGhlIGV2ZW50IGhhbmRsZXIgc3RydWN0dXJlLg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9jbG9ja19sZmNsa19yZXF1ZXN0KG5yZl9kcnZfY2xvY2tfaGFuZGxlcl9pdGVtX3QgKnBfaGFuZGxlcl9pdGVtKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlbGVhc2luZyB0aGUgTEZDTEsuDQorICoNCisgKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSByZXF1ZXN0cywgdGhlIExGQ0xLIHNvdXJjZSB3aWxsIGJlIHN0b3BwZWQuDQorICoNCisgKiBAbm90ZSBXaGVuIGEgU29mdERldmljZSBpcyBlbmFibGVkLCB0aGUgTEZDTEsgaXMgYWx3YXlzIHJ1bm5pbmcuDQorICovDQordm9pZCBucmZfZHJ2X2Nsb2NrX2xmY2xrX3JlbGVhc2Uodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjaGVja2luZyB0aGUgTEZDTEsgc3RhdGUuDQorICoNCisgKiBAcmV0dmFsIHRydWUgSWYgdGhlIExGQ0xLIGlzIHJ1bm5pbmcuDQorICogQHJldHZhbCBmYWxzZSBJZiB0aGUgTEZDTEsgaXMgbm90IHJ1bm5pbmcuDQorICovDQorYm9vbCBucmZfZHJ2X2Nsb2NrX2xmY2xrX2lzX3J1bm5pbmcodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXF1ZXN0aW5nIHRoZSBoaWdoLWFjY3VyYWN5IHNvdXJjZSBIRkNMSy4NCisgKg0KKyAqIFRoZSBoaWdoLWFjY3VyYWN5IHNvdXJjZQ0KKyAqIGNhbiBiZSByZXF1ZXN0ZWQgYnkgZGlmZmVyZW50IG1vZHVsZXMgb3IgY29udGV4dHMuIFRoZSBkcml2ZXIgZW5zdXJlcyB0aGF0IHRoZSBoaWdoLWFjY3VyYWN5DQorICogY2xvY2sgd2lsbCBiZSBzdGFydGVkIG9ubHkgd2hlbiBpdCBpcyByZXF1ZXN0ZWQgdGhlIGZpcnN0IHRpbWUuIElmIHRoZSBjbG9jayBpcyBub3QgcmVhZHkNCisgKiBidXQgaXQgd2FzIGFscmVhZHkgc3RhcnRlZCwgdGhlIGhhbmRsZXIgaXRlbSB0aGF0IGlzIHByb3ZpZGVkIGFzIGFuIGlucHV0IHBhcmFtZXRlciBpcyBhZGRlZA0KKyAqIHRvIHRoZSBsaXN0IG9mIGhhbmRsZXJzIHRoYXQgd2lsbCBiZSBub3RpZmllZCB3aGVuIHRoZSBjbG9jayBpcyBzdGFydGVkLg0KKyAqDQorICogSWYgYW4gZXZlbnQgaGFuZGxlciBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSBjYWxsZWQgb25jZSB0aGUgY2xvY2sgaXMgc3RhcnRlZC4gSWYgdGhlIGNsb2NrIHdhcyBhbHJlYWR5DQorICogc3RhcnRlZCBhdCB0aGlzIHRpbWUsIHRoZSBldmVudCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gQWRkaXRpb25hbGx5LA0KKyAqIHRoZSBAcmVmIG5yZl9kcnZfY2xvY2tfaGZjbGtfaXNfcnVubmluZyBmdW5jdGlvbiBjYW4gYmUgcG9sbGVkIHRvIGNoZWNrIGlmIHRoZSBjbG9jayBoYXMgc3RhcnRlZC4NCisgKg0KKyAqIEBub3RlIElmIGEgU29mdERldmljZSBpcyBydW5uaW5nLCB0aGUgY2xvY2sgaXMgbWFuYWdlZCBieSB0aGUgU29mdERldmljZSBhbmQgYWxsIHJlcXVlc3RzIGFyZSBoYW5kbGVkIGJ5DQorICogICAgICAgdGhlIFNvZnREZXZpY2UuIFRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBmcm9tIGFsbCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzIGluIHRoYXQgY2FzZS4NCisgKiBAbm90ZSBUaGUgaGFuZGxlciBpdGVtIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGNhbm5vdCBiZSBhbiBhdXRvbWF0aWMgdmFyaWFibGUuDQorICoNCisgKiBAcGFyYW1baW5dIHBfaGFuZGxlcl9pdGVtIEEgcG9pbnRlciB0byB0aGUgZXZlbnQgaGFuZGxlciBzdHJ1Y3R1cmUuDQorICovDQordm9pZCBucmZfZHJ2X2Nsb2NrX2hmY2xrX3JlcXVlc3QobnJmX2Rydl9jbG9ja19oYW5kbGVyX2l0ZW1fdCAqcF9oYW5kbGVyX2l0ZW0pOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVsZWFzaW5nIHRoZSBoaWdoLWFjY3VyYWN5IHNvdXJjZSBIRkNMSy4NCisgKg0KKyAqIElmIHRoZXJlIGFyZSBubyBtb3JlIHJlcXVlc3RzLCB0aGUgaGlnaC1hY2N1cmFjeSBzb3VyY2Ugd2lsbCBiZSByZWxlYXNlZC4NCisgKi8NCit2b2lkIG5yZl9kcnZfY2xvY2tfaGZjbGtfcmVsZWFzZSh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNoZWNraW5nIHRoZSBIRkNMSyBzdGF0ZS4NCisgKg0KKyAqIEByZXR2YWwgdHJ1ZSBJZiB0aGUgSEZDTEsgaXMgcnVubmluZyAoZm9yIFxuUkZYWCBYVEFMIHNvdXJjZSkuDQorICogQHJldHZhbCBmYWxzZSBJZiB0aGUgSEZDTEsgaXMgbm90IHJ1bm5pbmcuDQorICovDQorYm9vbCBucmZfZHJ2X2Nsb2NrX2hmY2xrX2lzX3J1bm5pbmcodm9pZCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvLyBOUkZfQ0xPQ0tfSF9fDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9yYWRpb19mc20udW1sIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9yYWRpb19mc20udW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MjI2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3JhZGlvX2ZzbS51bWwKQEAgLTAsMCArMSw3NiBAQAorQHN0YXJ0dW1sDQorDQorc2tpbnBhcmFtIHN0YXRlIHsNCisgICAgQmFja2dyb3VuZENvbG9yPDwgbG9ja2VkID4+IHJlZA0KKyAgICBCYWNrZ3JvdW5kQ29sb3I8PCB1bmxvY2tlZCA+PiBncmVlbg0KK30NCisNCisNCitbKl0gICAgICAgICAtLT4gU2xlZXAgPDwgdW5sb2NrZWQgPj4NCisNCitTbGVlcCAgICAgICAtZG93bi0+IFJlY2VpdmUgICA6IEFQSTogUmVjZWl2ZSgpDQorUmVjZWl2ZSAgICAgLXVwLT4gU2xlZXAgICAgIDogQVBJOiBTbGVlcCgpIC8gTVVURVg6IExvY2s7IFRBU0s6IFNUT1A7IFRBU0s6IERJU0FCTEVcbkVWOiBESVNBQkxFRCAvIE1VVEVYOiBVbmxvY2sNCisNCitzdGF0ZSBSZWNlaXZlIHsNCisgICAgc3RhdGUgV2FpdGluZ1J4RnJhbWUgPDwgdW5sb2NrZWQgPj4NCisgICAgDQorICAgIHN0YXRlIFJ4SGVhZGVyIDw8IGxvY2tlZCA+Pg0KKyAgICBzdGF0ZSBSeEZyYW1lICA8PCBsb2NrZWQgPj4NCisgICAgc3RhdGUgVHhBY2sgICAgPDwgbG9ja2VkID4+DQorICAgIHN0YXRlIFNob3J0QWNrVHggPDwgbG9ja2VkID4+DQorICAgIA0KKyAgICBFbnRlciAgICAgICAgICAgLWRvd24tPiBXYWl0aW5nUnhGcmFtZSAgOiBFVjogRElTQUJMRUQgLyBUQVNLOiBSWEVOOyBNVVRFWDogVW5sb2NrDQorICAgIFdhaXRpbmdSeEZyYW1lICAgICAgLS0+IFdhaXRpbmdSeEZyYW1lICA6IEVWOiBSRUFEWSAvIEF1dG9BQ0s6IGVuYWJsZTsgVEFTSzogU1RBUlQNCisgICAgDQorICAgIFdhaXRpbmdSeEZyYW1lICAtZG93bi0+IFJ4SGVhZGVyICAgICAgICA6IEVWOiBGUkFNRVNUQVJUIC8gTVVURVg6IExvY2sNCisgICAgDQorICAgIFJ4SGVhZGVyICAgICAgICAtZG93bi0+IFJ4RnJhbWUgICAgICAgICA6IEVWOiBCQ01BVENILCBGcmFtZSB0eXBlIGFuZCBhZGRyZXNzIG9rDQorICAgIFJ4SGVhZGVyICAgICAgICAgIC11cC0+IEVudGVyICAgICAgICAgICA6IEVWOiBCQ01BVENILCBGcmFtZSB0eXBlIGludmFsaWQgb3IgZHN0IGFkZHJlc3MgbWlzbWF0Y2gNCisgICAgDQorICAgIFJ4RnJhbWUgICAgICAgICAtZG93bi0+IFR4QWNrICAgICAgICAgICA6IEVWOiBFTkQsIENSQzogT0ssIEFDSzogcmVxdWVzdGVkDQorICAgIFJ4RnJhbWUgICAgICAgICAgIC11cC0+IEVudGVyICAgICAgICAgOiBFVjogRU5ELCBDUkM6IGludmFsaWQgLyBUQVNLOiBESVNBQkxFDQorICAgIFJ4RnJhbWUgICAgICAgICAgIC11cC0+IEVudGVyICAgICAgICAgOiBFVjogRU5ELCBDUkM6IE9LLCBBQ0s6IG5vdCByZXF1ZXN0ZWQgLyBUQVNLOiBESVNBQkxFOyByZWNlaXZlZCgpDQorICAgICANCisgICAgVHhBY2sgICAgICAgICAgICAgLXVwLT4gRW50ZXIgICAgICAgICA6IEVWOiBFTkQgLyBBdXRvQUNLOiBkaXNhYmxlOyBUQVNLOiBESVNBQkxFOyByZWNlaXZlZCgpDQorICAgIA0KKyAgICBSeEZyYW1lICAgICAgICAgLWxlZnQtPiBTaG9ydEFja1R4ICAgICAgIDogRVY6IEVORDsgQXV0b0FDSzogZW5hYmxlZCAvIFNIT1JUOiBESVNBQkxFDQorICAgIFNob3J0QWNrVHggICAgICAtbGVmdC0+IFNob3J0QWNrVHggICAgICAgOiBFVjogRElTQUJMRUQ7IEF1dG9BQ0s6IGVuYWJsZWQgLyBTSE9SVDogVFhFTg0KKyAgICBTaG9ydEFja1R4ICAgICAgLXJpZ2h0LT4gU2hvcnRBY2tUeCAgICAgICA6IEVWOiBSRUFEWTsgQXV0b0FDSzplbmFibGVkIC8gQXV0b0FDSzogZGlzYWJsZTsgU0hPUlQ6IFNUQVJUDQorfQ0KKw0KK3N0YXRlIFRyYW5zbWl0IDw8IGxvY2tlZCA+PnsNCisgICAgWypdICAgICAgICAgLS0+IENDQSAgICAgICAgICAgICA6IEVWOiBESVNBQkxFRCAvIFRBU0s6IFJYRU4NCisgICAgQ0NBICAgICAgICAgLS0+IENDQSAgICAgICAgICAgICA6IEVWOiBSRUFEWSAvIFRBU0s6IENDQV9TVEFSVA0KKyAgICBDQ0EgICAgICAgLXVwLT4gUmVjZWl2ZSAgICAgICAgIDogRVY6IENDQUJVU1kgLyBUcmFuc21pdEZhaWx1cmUoKTsgVEFTSzogRElTQUJMRQ0KKyAgICBDQ0EgICAgICAgICAtLT4gVHhGcmFtZSAgICAgICAgIDogRVY6IENDQUlETEUgLyBTSE9SVDogVFhFTg0KKyAgICBUeEZyYW1lICAgICAtLT4gVHhGcmFtZSAgICAgICAgIDogRVY6IFJFQURZIC8gU0hPUlQ6IFNUQVJUDQorDQorICAgIHN0YXRlIFJ4QWNrIHsNCisgICAgICAgIFsqXSAgICAgICAgICAgICAtLT4gRW5hYmxpbmdBY2tSeCAgIDogVEFTSzogUlhFTg0KKyAgICAgICAgRW5hYmxpbmdBY2tSeCAgIC0tPiBSZWNlaXZpbmdBY2sgICAgOiBFVjogUkVBRFkgLyBUQVNLOiBTVEFSVA0KKyAgICAgICAgDQorICAgICAgICBSZWNlaXZpbmdBY2sgICAgLS0+IFJlY2VpdmluZ0FjayAgICA6IEVWOiBFTkQgKENSQ0VSUikgLyBUQVNLOiBTVEFSVA0KKyAgICAgICAgUmVjZWl2aW5nQWNrICAgIC0tPiBSZWNlaXZpbmdBY2sgICAgOiBFVjogRU5EIChDUkNPSywgTm90IHZhbGlkIEFDSykgLyBUQVNLOiBTVEFSVA0KKyAgICAgICAgUmVjZWl2aW5nQWNrICAgIC0tPiBXYWl0aW5nUnhGcmFtZSAgOiBFVjogRU5EIChDUkNPSywgVmFsaWQgQUNLKSAvIE1VVEVYOiBVbmxvY2s7IFRBU0s6IFNUQVJUOyB0cmFuc21pdHRlZCgpDQorICAgIH0NCisNCisgICAgVHhGcmFtZSAgICAgICAgIC0tPiBSeEFjayAgICAgICA6IEVWOiBFTkQgKEFDSykNCisgICAgVHhGcmFtZSAgICAgICAtdXAtPiBSZWNlaXZlICAgICA6IEVWOiBFTkQgKE5PQUNLKSAvIHRyYW5zbWl0dGVkKE9LKTsgU0hPUlQ6IERJU0FCTEUNCit9DQorDQorc3RhdGUgU2hvcnRBY2tUeCB7DQorfQ0KKw0KK3N0YXRlIEVuZXJneURldGVjdGlvbiA8PCBsb2NrZWQgPj4gew0KKyAgICBbKl0gICAgICAtLT4gRUQgICAgICA6IEVWOiBESVNBQkxFRCAvIFRBU0s6IFJYRU4NCisgICAgRUQgICAgICAgLS0+IEVEICAgICAgOiBFVjogUkVBRFkgLyBUQVNLOiBFRFNUQVJUDQorICAgIEVEICAtcmlnaHQtPiBSZWNlaXZlIDogRVY6IEVERU5EIC8gZW5lcmd5X2RldGVjdGVkKCk7IFRBU0s6IERJU0FCTEUNCit9DQorDQorDQorUmVjZWl2ZSAgIC1kb3duLT4gVHJhbnNtaXQgICAgICAgIDogQVBJOiBUcmFuc21pdCgpIC8gTVVURVg6TG9jazsgQXV0b0FDSzogZGlzYWJsZTsgVEFTSzogRElTQUJMRQ0KK1RyYW5zbWl0ICAgIC11cC0+IFJlY2VpdmUgICAgICAgICA6IEFQSTogUmVjZWl2ZSgpIC8gVEFTSzogQ0NBU1RPUDsgVEFTSzogU1RPUDsgVEFTSzogRElTQUJMRQ0KK1JlY2VpdmUgICAgICAgLS0+IFJlY2VpdmUgICAgICAgICA6IEFQSTogUmVjZWl2ZSgpDQorUmVjZWl2ZSAgIC1sZWZ0LT4gRW5lcmd5RGV0ZWN0aW9uIDogQVBJOiBFbmVyZ3lEZXRlY3Rpb24oKSAvIE1VVEVYOiBMb2NrOyBBdXRvQUNLOiBkaXNhYmxlOyBUQVNLOiBESVNBQkxFDQorDQorQGVuZHVtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfMGxlbmd0aF9mcmFtZS51bWwgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3J4XzBsZW5ndGhfZnJhbWUudW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzA0NDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3J4XzBsZW5ndGhfZnJhbWUudW1sCkBAIC0wLDAgKzEsMjMgQEAKK0BzdGFydHVtbA0KKw0KK3BhcnRpY2lwYW50IFJBRElPDQorcGFydGljaXBhbnQgRHJpdmVyDQorDQorICAgICAgLT4gU3RhdGU6IFdhaXRpbmdSeEZyYW1lDQorICAgICAgDQorYWN0aXZhdGUgUkFESU8NCitSQURJTyAgLT4gRHJpdmVyOiBFVjogRU5EDQorZGVhY3RpdmF0ZSBSQURJTw0KK0RyaXZlciAtPiBNdXRleDogbG9jaw0KK2FjdGl2YXRlIE11dGV4DQorDQorRHJpdmVyICAtPiBEcml2ZXI6IHN0b3BTZW5kaW5nQWNrKFdhaXRpbmdSeEZyYW1lKQ0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRElTQUJMRUQNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogUlhFTg0KK0RyaXZlciAgLT4gTXV0ZXg6ICB1bmxvY2sNCitkZWFjdGl2YXRlIE11dGV4DQorRHJpdmVyICAtPiBSQURJTzogIGNsZWFyX2V2ZW50KERJU0FCTEVEKQ0KKyAgICAgDQorDQorQGVuZHVtbA0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfYWNrLnVtbCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfYWNrLnVtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTA4NGQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF9hY2sudW1sCkBAIC0wLDAgKzEsMjcgQEAKK0BzdGFydHVtbA0KKw0KK3BhcnRpY2lwYW50IFJBRElPDQorcGFydGljaXBhbnQgRHJpdmVyDQorDQorICAgICAgLT4gU3RhdGU6IFdhaXRpbmdSeEZyYW1lDQorICAgICAgDQorUkFESU8gIC0+IERyaXZlcjogRVY6IEZSQU1FU1RBUlQNCithY3RpdmF0ZSBSQURJTw0KK0RyaXZlciAtPiBNdXRleDogbG9jaw0KK2FjdGl2YXRlIE11dGV4DQorRHJpdmVyIC0+IFN0YXRlOiBSeEhlYWRlcg0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogQkNNQVRDSA0KK0RyaXZlciAtLT4+IFJBRElPOiBnZXRfYmNjKCkNCitSQURJTyAgLS0+IERyaXZlcjogQkNDX0lOSVQNCitEcml2ZXIgIC0+IERyaXZlcjogQ2hlY2sgZnJhbWUgdHlwZTogQUNLDQorRHJpdmVyICAtPiBEcml2ZXI6IHN0b3BTZW5kaW5nQWNrKFdhaXRpbmdSeEZyYW1lKQ0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRElTQUJMRUQNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogUlhFTg0KK0RyaXZlciAgLT4gTXV0ZXg6ICB1bmxvY2sNCitkZWFjdGl2YXRlIE11dGV4DQorRHJpdmVyICAtPiBSQURJTzogIGNsZWFyX2V2ZW50KERJU0FCTEVEKQ0KKyAgICAgDQorDQorQGVuZHVtbA0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfYnJvYWRjYXN0LnVtbCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfYnJvYWRjYXN0LnVtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTgzYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF9icm9hZGNhc3QudW1sCkBAIC0wLDAgKzEsNDUgQEAKK0BzdGFydHVtbA0KKw0KK3BhcnRpY2lwYW50IFJBRElPDQorcGFydGljaXBhbnQgRHJpdmVyDQorDQorICAgICAgLT4gU3RhdGU6IFdhaXRpbmdSeEZyYW1lDQorICAgICAgDQorUkFESU8gIC0+IERyaXZlcjogRVY6IEZSQU1FU1RBUlQNCithY3RpdmF0ZSBSQURJTw0KK0RyaXZlciAtPiBNdXRleDogbG9jaw0KK2FjdGl2YXRlIE11dGV4DQorRHJpdmVyIC0+IFN0YXRlOiBSeEhlYWRlcg0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogQkNNQVRDSA0KK0RyaXZlciAtLT4+IFJBRElPOiBnZXRfYmNjKCkNCitSQURJTyAgLS0+IERyaXZlcjogQkNDX0lOSVQNCitEcml2ZXIgIC0+IERyaXZlcjogQ2hlY2sgZnJhbWUgdHlwZTogRGF0YQ0KK0RyaXZlciAgLT4gRHJpdmVyOiBDaGVjayBkZXN0IGFkZHJlc3M6IHNob3J0DQorRHJpdmVyICAtPiBSQURJTzogIHNldF9iY2MoQkNDX1NIT1JUX0FERFIpDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBCQ01BVENIDQorRHJpdmVyIC0tPj4gUkFESU86IGdldF9iY2MoKQ0KK1JBRElPICAtLT4gRHJpdmVyOiBCQ0NfU0hPUlRfQUREUg0KK0RyaXZlciAgLT4gRHJpdmVyOiBDaGVjayBkZXN0IGFkZHI6IEJyb2FkY2FzdA0KK0RyaXZlciAgLT4gRmxhZ3M6ICBSZWNlaXZpbmdCcm9hZGNhc3RGcmFtZSA9IHRydWUNCitEcml2ZXIgIC0+IFN0YXRlOiAgUnhGcmFtZQ0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRU5EDQorZGVhY3RpdmF0ZSBSQURJTw0KK0RyaXZlciAgLT4gRHJpdmVyOiBDaGVjayBDUkM6IE9LDQorRHJpdmVyICAtPiBEcml2ZXI6IFByZXBhcmUgQUNLDQorRHJpdmVyIC0tPj4gRmxhZ3M6IHJlY2VpdmlnQnJvYWRjYXN0RnJhbWU/DQorRmxhZ3MgIC0tPiBEcml2ZXI6IHRydWUNCisNCitEcml2ZXIgIC0+IERyaXZlcjogc3RvcFNlbmRpbmdBY2soV2FpdGluZ1J4RnJhbWUpDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorRHJpdmVyICAtPiBNdXRleDogIHVubG9jaw0KK2RlYWN0aXZhdGUgTXV0ZXgNCitEcml2ZXIgIC0+IFJBRElPOiAgY2xlYXJfZXZlbnQoRElTQUJMRUQpDQorICAgICANCitEcml2ZXIgIC0+IEhpZ2hlcl9MYXllcjogcmVjZWl2ZWQoKQ0KKw0KK0BlbmR1bWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3J4X3Rvb19zaG9ydF9mcmFtZS51bWwgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3J4X3Rvb19zaG9ydF9mcmFtZS51bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVkMTIwZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfdG9vX3Nob3J0X2ZyYW1lLnVtbApAQCAtMCwwICsxLDI0IEBACitAc3RhcnR1bWwNCisNCitwYXJ0aWNpcGFudCBSQURJTw0KK3BhcnRpY2lwYW50IERyaXZlcg0KKw0KKyAgICAgIC0+IFN0YXRlOiBXYWl0aW5nUnhGcmFtZQ0KKyAgICAgIA0KK1JBRElPICAtPiBEcml2ZXI6IEVWOiBGUkFNRVNUQVJUDQorYWN0aXZhdGUgUkFESU8NCitEcml2ZXIgLT4gTXV0ZXg6IGxvY2sNCithY3RpdmF0ZSBNdXRleA0KK0RyaXZlciAtPiBTdGF0ZTogUnhIZWFkZXINCitEcml2ZXIgLT4gRHJpdmVyOiAgQ2hlY2sgZnJhbWUgbGVuZ3RoOiA8IEFDS19MRU5HVEgNCisNCitEcml2ZXIgIC0+IERyaXZlcjogc3RvcFNlbmRpbmdBY2soV2FpdGluZ1J4RnJhbWUpDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorRHJpdmVyICAtPiBNdXRleDogIHVubG9jaw0KK2RlYWN0aXZhdGUgTXV0ZXgNCitEcml2ZXIgIC0+IFJBRElPOiAgY2xlYXJfZXZlbnQoRElTQUJMRUQpDQorICAgICANCisNCitAZW5kdW1sDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF91bmljYXN0LnVtbCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfdW5pY2FzdC51bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhOTZkMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfdW5pY2FzdC51bWwKQEAgLTAsMCArMSw4MCBAQAorQHN0YXJ0dW1sDQorDQorcGFydGljaXBhbnQgUkFESU8NCitwYXJ0aWNpcGFudCBEcml2ZXINCisNCisgICAgICAtPiBTdGF0ZTogV2FpdGluZ1J4RnJhbWUNCisgICAgICANCitSQURJTyAgLT4gRHJpdmVyOiBFVjogRlJBTUVTVEFSVA0KK2FjdGl2YXRlIERyaXZlcg0KK2FjdGl2YXRlIFJBRElPDQorRHJpdmVyIC0+IE11dGV4OiBsb2NrDQorYWN0aXZhdGUgTXV0ZXgNCitEcml2ZXIgLT4gU3RhdGU6IFJ4SGVhZGVyDQorZGVhY3RpdmF0ZSBEcml2ZXINCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IEJDTUFUQ0gNCithY3RpdmF0ZSBEcml2ZXINCitEcml2ZXIgLS0+PiBSQURJTzogZ2V0X2JjYygpDQorUkFESU8gIC0tPiBEcml2ZXI6IEJDQ19JTklUDQorRHJpdmVyICAtPiBEcml2ZXI6IENoZWNrIGZyYW1lIHR5cGU6IERhdGENCitEcml2ZXIgIC0+IERyaXZlcjogQ2hlY2sgZGVzdCBhZGRyZXNzOiBzaG9ydA0KK0RyaXZlciAgLT4gUkFESU86ICBzZXRfYmNjKEJDQ19TSE9SVF9BRERSKQ0KK2RlYWN0aXZhdGUgRHJpdmVyDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBCQ01BVENIDQorYWN0aXZhdGUgRHJpdmVyDQorRHJpdmVyIC0tPj4gUkFESU86IGdldF9iY2MoKQ0KK1JBRElPICAtLT4gRHJpdmVyOiBCQ0NfU0hPUlRfQUREUg0KK0RyaXZlciAgLT4gRHJpdmVyOiBDaGVjayBkZXN0IGFkZHI6IE1hdGNoZWQgdW5pY2FzdA0KK0RyaXZlciAgLT4gRmxhZ3M6ICBSZWNlaXZpbmdCcm9hZGNhc3RGcmFtZSA9IGZhbHNlDQorRHJpdmVyICAtPiBTdGF0ZTogIFJ4RnJhbWUNCitkZWFjdGl2YXRlIERyaXZlcg0KKw0KK1JBRElPICAgLT4gUkFESU86ICBFVjogRU5EIC8gVEFTSzogRElTQUJMRQ0KK2RlYWN0aXZhdGUgUkFESU8NCitSQURJTyAgIC0+IERyaXZlcjogRVY6IEVORA0KK2FjdGl2YXRlIERyaXZlcg0KK0RyaXZlciAgLT4gRHJpdmVyOiBDaGVjayBDUkM6IE9LDQorUkFESU8gICAtPiBSQURJTzogIEVWOiBESVNBQkxFRCAvIFRBU0s6IFRYRU4NCitEcml2ZXIgIC0+IERyaXZlcjogUHJlcGFyZSBBQ0sNCitEcml2ZXIgLS0+PiBGbGFnczogcmVjZWl2aWdCcm9hZGNhc3RGcmFtZT8NCitGbGFncyAgLS0+IERyaXZlcjogZmFsc2UNCitEcml2ZXIgIC0+IERyaXZlcjogQ2hlY2sgaWYgQUNLIHJlcXVlc3RlZDogdHJ1ZQ0KKw0KK0RyaXZlciAgLT4gU3RhdGU6ICBUeEFjaw0KK0RyaXZlciAgLT4gRHJpdmVyOiBzZXQgcGVuZGluZyBiaXQgaW4gQUNLKCkNCitkZWFjdGl2YXRlIERyaXZlcg0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRElTQUJMRUQNCisNCitSQURJTyAgIC0+IFJBRElPOiAgRVY6IFJFQURZIC8gVEFTSzogU1RBUlQNCithY3RpdmF0ZSBSQURJTw0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogUkVBRFkNCithY3RpdmF0ZSBEcml2ZXINCitEcml2ZXIgIC0+IFJBRElPOiAgZGlzYWJsZV90aWZzX3Nob3J0c19hY2soKQ0KK2RlYWN0aXZhdGUgRHJpdmVyDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBGUkFNRVNUQVJUDQorUkFESU8gICAtPiBSQURJTzogIEVWOiBFTkQgLyBUQVNLOiBESVNBQkxFDQorZGVhY3RpdmF0ZSBSQURJTw0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRU5EDQorYWN0aXZhdGUgRHJpdmVyDQorRHJpdmVyICAtPiBSQURJTzogIGRpc2FibGVfdGlmc19zaG9ydHNfYWxsKCkNCitEcml2ZXIgIC0+IFN0YXRlOiAgV2FpdGluZ1J4RnJhbWUNCitkZWFjdGl2YXRlIERyaXZlcg0KKw0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRElTQUJMRUQNCithY3RpdmF0ZSBEcml2ZXINCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogUlhFTg0KK0RyaXZlciAgLT4gTXV0ZXg6ICB1bmxvY2sNCitkZWFjdGl2YXRlIE11dGV4DQorRHJpdmVyICAtPiBSQURJTzogIGNsZWFyX2V2ZW50KERJU0FCTEVEKQ0KK2RlYWN0aXZhdGUgRHJpdmVyDQorICAgICANCitEcml2ZXIgIC0+IEhpZ2hlcl9MYXllcjogcmVjZWl2ZWQoKQ0KKw0KK0BlbmR1bWwNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3J4X3VuaWNhc3Rfb3RoZXJfZGVzdGluYXRpb24udW1sIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF91bmljYXN0X290aGVyX2Rlc3RpbmF0aW9uLnVtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmM1NGZmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF91bmljYXN0X290aGVyX2Rlc3RpbmF0aW9uLnVtbApAQCAtMCwwICsxLDM0IEBACitAc3RhcnR1bWwNCisNCitwYXJ0aWNpcGFudCBSQURJTw0KK3BhcnRpY2lwYW50IERyaXZlcg0KKw0KKyAgICAgIC0+IFN0YXRlOiBXYWl0aW5nUnhGcmFtZQ0KKyAgICAgIA0KK1JBRElPICAtPiBEcml2ZXI6IEVWOiBGUkFNRVNUQVJUDQorYWN0aXZhdGUgUkFESU8NCitEcml2ZXIgLT4gTXV0ZXg6IGxvY2sNCithY3RpdmF0ZSBNdXRleA0KK0RyaXZlciAtPiBTdGF0ZTogUnhIZWFkZXINCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IEJDTUFUQ0gNCitEcml2ZXIgLS0+PiBSQURJTzogZ2V0X2JjYygpDQorUkFESU8gIC0tPiBEcml2ZXI6IEJDQ19JTklUDQorRHJpdmVyICAtPiBEcml2ZXI6IENoZWNrIGZyYW1lIHR5cGU6IERhdGENCitEcml2ZXIgIC0+IERyaXZlcjogQ2hlY2sgZGVzdCBhZGRyZXNzOiBzaG9ydA0KK0RyaXZlciAgLT4gUkFESU86ICBzZXRfYmNjKEJDQ19TSE9SVF9BRERSKQ0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogQkNNQVRDSA0KK0RyaXZlciAtLT4+IFJBRElPOiBnZXRfYmNjKCkNCitSQURJTyAgLS0+IERyaXZlcjogQkNDX1NIT1JUX0FERFINCitEcml2ZXIgIC0+IERyaXZlcjogQ2hlY2sgZGVzdCBhZGRyOiBNaXNzZWQgdW5pY2FzdA0KK0RyaXZlciAgLT4gRHJpdmVyOiBzdG9wU2VuZGluZ0FjayhXYWl0aW5nUnhGcmFtZSkNCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IERJU0FCTEVEDQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IFJYRU4NCitEcml2ZXIgIC0+IE11dGV4OiAgdW5sb2NrDQorZGVhY3RpdmF0ZSBNdXRleA0KK0RyaXZlciAgLT4gUkFESU86ICBjbGVhcl9ldmVudChESVNBQkxFRCkNCisgICAgIA0KKw0KK0BlbmR1bWwNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3R4X2Jyb2FkY2FzdC51bWwgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3R4X2Jyb2FkY2FzdC51bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1NjY3NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvdHhfYnJvYWRjYXN0LnVtbApAQCAtMCwwICsxLDUxIEBACitAc3RhcnR1bWwNCisNCitwYXJ0aWNpcGFudCBSQURJTw0KK3BhcnRpY2lwYW50IERyaXZlcg0KK3BhcnRpY2lwYW50IFN0YXRlDQorcGFydGljaXBhbnQgTXV0ZXgNCisNCisgICAgICAtPiBTdGF0ZTogV2FpdGluZ1J4RnJhbWUNCisgICAgICANCitIaWdoZXJfTGF5ZXIgLT4gRHJpdmVyOiB0cmFuc21pdCgpDQorDQorRHJpdmVyICAtPiBNdXRleDogbG9jaw0KK2FjdGl2YXRlIE11dGV4DQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IFNUT1ANCitEcml2ZXIgIC0+IFJBRElPOiAgc2V0X2NoYW5uZWwodHhfY2hhbm5lbCkNCitEcml2ZXIgIC0+IERyaXZlcjogc3RvcFNlbmRpbmdBY2soQ2NhKQ0KK0RyaXZlciAgLT4gUkFESU86ICBzZXRfdHhfcG93ZXIodHhfcG93ZXIpDQorRHJpdmVyICAtPiBSQURJTzogIGNsZWFyX2V2ZW50KEVORCkNCitEcml2ZXIgIC0+IFJBRElPOiAgY2xlYXJfZXZlbnQoUkVBRFkpDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBSRUFEWQ0KK0RyaXZlciAgLT4gU3RhdGU6ICBUeEZyYW1lDQorRHJpdmVyICAtPiBSQURJTzogIGVuYWJsZV90eGZyYW1lX3Nob3J0cygpDQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IENDQVNUQVJUDQorDQorUkFESU8gICAtPiBSQURJTzogIEVWOiBDQ0FJRExFIC8gVEFTSzogVFhFTg0KK1JBRElPICAgLT4gUkFESU86ICBFVjogUkVBRFkgLyBUQVNLOiBTVEFSVA0KK2FjdGl2YXRlIFJBRElPDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBGUkFNRVNUQVJUDQorDQorUkFESU8gICAtPiBSQURJTzogIEVWOiBFTkQgLyBUQVNLOiBESVNBQkxFDQorZGVhY3RpdmF0ZSBSQURJTw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRU5EDQorRHJpdmVyICAtPiBSQURJTzogIGRpc2FibGVfdHhmcmFtZV9zaG9ydHMoKQ0KK0RyaXZlciAgLT4gRHJpdmVyOiBBY2sgcmVxdWVzdGVkPyBmYWxzZQ0KK0RyaXZlciAgLT4gU3RhdGU6ICBXYWl0aW5nUnhGcmFtZQ0KKw0KK0RyaXZlciAgLT4gSGlnaGVyX0xheWVyOiB0cmFuc21pdHRlZCgpDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorRHJpdmVyICAtPiBNdXRleDogIHVubG9jaw0KK2RlYWN0aXZhdGUgTXV0ZXgNCitEcml2ZXIgIC0+IFJBRElPOiAgY2xlYXJfZXZlbnQoRElTQUJMRUQpDQorICAgICANCisNCitAZW5kdW1sDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS90eF91bmljYXN0LnVtbCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvdHhfdW5pY2FzdC51bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjNTY5YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvdHhfdW5pY2FzdC51bWwKQEAgLTAsMCArMSw2OCBAQAorQHN0YXJ0dW1sDQorDQorcGFydGljaXBhbnQgUkFESU8NCitwYXJ0aWNpcGFudCBEcml2ZXINCitwYXJ0aWNpcGFudCBTdGF0ZQ0KK3BhcnRpY2lwYW50IE11dGV4DQorDQorICAgICAgLT4gU3RhdGU6IFdhaXRpbmdSeEZyYW1lDQorICAgICAgDQorSGlnaGVyX0xheWVyIC0+IERyaXZlcjogdHJhbnNtaXQoKQ0KKw0KK0RyaXZlciAgLT4gTXV0ZXg6IGxvY2sNCithY3RpdmF0ZSBNdXRleA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBTVE9QDQorRHJpdmVyICAtPiBSQURJTzogIHNldF9jaGFubmVsKHR4X2NoYW5uZWwpDQorRHJpdmVyICAtPiBEcml2ZXI6IHN0b3BTZW5kaW5nQWNrKENjYSkNCitEcml2ZXIgIC0+IFJBRElPOiAgc2V0X3R4X3Bvd2VyKHR4X3Bvd2VyKQ0KK0RyaXZlciAgLT4gUkFESU86ICBjbGVhcl9ldmVudChFTkQpDQorRHJpdmVyICAtPiBSQURJTzogIGNsZWFyX2V2ZW50KFJFQURZKQ0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRElTQUJMRUQNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogUlhFTg0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogUkVBRFkNCitEcml2ZXIgIC0+IFN0YXRlOiAgVHhGcmFtZQ0KK0RyaXZlciAgLT4gUkFESU86ICBlbmFibGVfdHhmcmFtZV9zaG9ydHMoKQ0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBDQ0FTVEFSVA0KKw0KK1JBRElPICAgLT4gUkFESU86ICBFVjogQ0NBSURMRSAvIFRBU0s6IFRYRU4NCitSQURJTyAgIC0+IFJBRElPOiAgRVY6IFJFQURZIC8gVEFTSzogU1RBUlQNCithY3RpdmF0ZSBSQURJTw0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRlJBTUVTVEFSVA0KKw0KK1JBRElPICAgLT4gUkFESU86ICBFVjogRU5EIC8gVEFTSzogRElTQUJMRQ0KK2RlYWN0aXZhdGUgUkFESU8NCitSQURJTyAgIC0+IERyaXZlcjogRVY6IEVORA0KK0RyaXZlciAgLT4gUkFESU86ICBkaXNhYmxlX3R4ZnJhbWVfc2hvcnRzKCkNCitEcml2ZXIgIC0+IERyaXZlcjogQWNrIHJlcXVlc3RlZD8gdHJ1ZQ0KK0RyaXZlciAgLT4gU3RhdGU6ICBSeEFjaw0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRElTQUJMRUQNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogUlhFTg0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogUkVBRFkNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogU1RBUlQNCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IEZSQU1FU1RBUlQNCithY3RpdmF0ZSBSQURJTw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRU5EDQorZGVhY3RpdmF0ZSBSQURJTw0KK0RyaXZlciAgLT4gRHJpdmVyOiBBQ0sgbWF0Y2hlZD8gZmFsc2UNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogU1RBUlQNCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IEZSQU1FU1RBUlQNCithY3RpdmF0ZSBSQURJTw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRU5EDQorZGVhY3RpdmF0ZSBSQURJTw0KK0RyaXZlciAgLT4gRHJpdmVyOiBBQ0sgbWF0Y2hlZD8gdHJ1ZQ0KK0RyaXZlciAgLT4gU3RhdGU6ICBXYWluaW5nUnhGcmFtZQ0KK0RyaXZlciAgLT4gUkFESU86ICBlbmFibGVfdGlmc19zaG9ydHMoKQ0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBTVEFSVA0KK0RyaXZlciAgLT4gTXV0ZXg6ICB1bmxvY2sNCitkZWFjdGl2YXRlIE11dGV4DQorDQorRHJpdmVyICAtPiBIaWdoZXJfTGF5ZXI6IHRyYW5zbWl0dGVkKCkNCisNCitAZW5kdW1sDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS90eF91bmljYXN0X25vX2Fjay51bWwgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3R4X3VuaWNhc3Rfbm9fYWNrLnVtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2I3NDZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS90eF91bmljYXN0X25vX2Fjay51bWwKQEAgLTAsMCArMSw2MiBAQAorQHN0YXJ0dW1sDQorDQorcGFydGljaXBhbnQgUkFESU8NCitwYXJ0aWNpcGFudCBEcml2ZXINCitwYXJ0aWNpcGFudCBTdGF0ZQ0KK3BhcnRpY2lwYW50IE11dGV4DQorDQorICAgICAgLT4gU3RhdGU6IFdhaXRpbmdSeEZyYW1lDQorICAgICAgDQorSGlnaGVyX0xheWVyIC0+IERyaXZlcjogdHJhbnNtaXQoKQ0KKw0KK0RyaXZlciAgLT4gTXV0ZXg6IGxvY2sNCithY3RpdmF0ZSBNdXRleA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBTVE9QDQorRHJpdmVyICAtPiBSQURJTzogIHNldF9jaGFubmVsKHR4X2NoYW5uZWwpDQorRHJpdmVyICAtPiBEcml2ZXI6IHN0b3BTZW5kaW5nQWNrKENjYSkNCitEcml2ZXIgIC0+IFJBRElPOiAgc2V0X3R4X3Bvd2VyKHR4X3Bvd2VyKQ0KK0RyaXZlciAgLT4gUkFESU86ICBjbGVhcl9ldmVudChFTkQpDQorRHJpdmVyICAtPiBSQURJTzogIGNsZWFyX2V2ZW50KFJFQURZKQ0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRElTQUJMRUQNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogUlhFTg0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogUkVBRFkNCitEcml2ZXIgIC0+IFN0YXRlOiAgVHhGcmFtZQ0KK0RyaXZlciAgLT4gUkFESU86ICBlbmFibGVfdHhmcmFtZV9zaG9ydHMoKQ0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBDQ0FTVEFSVA0KKw0KK1JBRElPICAgLT4gUkFESU86ICBFVjogQ0NBSURMRSAvIFRBU0s6IFRYRU4NCitSQURJTyAgIC0+IFJBRElPOiAgRVY6IFJFQURZIC8gVEFTSzogU1RBUlQNCithY3RpdmF0ZSBSQURJTw0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRlJBTUVTVEFSVA0KKw0KK1JBRElPICAgLT4gUkFESU86ICBFVjogRU5EIC8gVEFTSzogRElTQUJMRQ0KK2RlYWN0aXZhdGUgUkFESU8NCitSQURJTyAgIC0+IERyaXZlcjogRVY6IEVORA0KK0RyaXZlciAgLT4gUkFESU86ICBkaXNhYmxlX3R4ZnJhbWVfc2hvcnRzKCkNCitEcml2ZXIgIC0+IERyaXZlcjogQWNrIHJlcXVlc3RlZD8gdHJ1ZQ0KK0RyaXZlciAgLT4gU3RhdGU6ICBSeEFjaw0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRElTQUJMRUQNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogUlhFTg0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogUkVBRFkNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogU1RBUlQNCisNCis9PSBUaW1lb3V0ID09DQorDQorSGlnaGVyX0xheWVyIC0+IERyaXZlcjogcmVjZWl2ZSgpDQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IFNUT1ANCitEcml2ZXIgIC0+IFN0YXRlOiAgV2FpdGluZ1J4RnJhbWUNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogRElTQUJMRQ0KK0RyaXZlciAgLT4gUkFESU86ICBjbGVhcl9ldmVudChFTkQpDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorRHJpdmVyICAtPiBNdXRleDogIHVubG9jaw0KK2RlYWN0aXZhdGUgTXV0ZXgNCitEcml2ZXIgIC0+IFJBRElPOiAgY2xlYXJfZXZlbnQoRElTQUJMRUQpDQorDQorQGVuZHVtbA0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZnNtX2Rlc2NyaXB0aW9uLnBkZiBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZnNtX2Rlc2NyaXB0aW9uLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTdhYTRlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9mc21fZGVzY3JpcHRpb24ucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9SRUFETUUubWQgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZDQ5NTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTI4IEBACisjIG5SRiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuDQorDQorVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBvbmx5IF9fbm9uLWJlYWNvbiBtb2RlX18gb2Ygb3BlcmF0aW9uLg0KK0l0IHN1cHBvcnRzIGZvbGxvd2luZyBfX2ZlYXR1cmVzX186DQorICogcmVjZXB0aW9uIG9mIHVuaWNhc3QgYW5kIGJyb2FkY2FzdCBmcmFtZXMgKHdpdGggZmlsdGVyaW5nKSwNCisgKiBhdXRvbWF0aWMgc2VuZGluZyBBQ0sgZnJhbWVzLA0KKyAqIHNldHRpbmcgcGVuZGluZyBiaXQgaW4gQUNLIGZyYW1lIGFjY29yZGluZyB0byBwZW5kaW5nIGRhdGEgZm9yIGdpdmVuIA0KKyAgIGRlc3RpbmF0aW9uLA0KKyAqIHRyYW5zbWlzc2lvbiBvZiB1bmljYXN0IGFuZCBicm9hZGNhc3QgZnJhbWVzLA0KKyAqIGF1dG9tYXRpYyBDQ0EgcHJvY2VkdXJlIGJlZm9yZSB0cmFuc21pc3Npb24sDQorICogYXV0b21hdGljIHJlY2VpdmluZyBBQ0sgZnJhbWVzLA0KKyAqIGxvdyBwb3dlciBtb2RlIChzbGVlcCksDQorICogZW5lcmd5IGRldGVjdGlvbiwNCisgKiBwcm9taXNjdW91cyBtb2RlLg0KKw0KKyMjIEltcGxlbWVudGF0aW9uIGRldGFpbHMNCisNCitUaGUgZHJpdmVyIGlzIGEgRlNNLiBGcm9tIEFQSSBwZXJzcGVjdGl2ZSBpdCBoYXMgNCBzdGF0ZXMuIE1vc3Qgb2YgdGhvc2Ugc3RhdGVzDQorY29udGFpbnMgc3ViLXN0YXRlcyBpbiBpbXBsZW1lbnRhdGlvbi4NCisNCisjIyMgRlNNIGRlc2NyaXB0aW9uDQorDQorYGBgDQorICAgICAgICAgIHJlY2VpdmUoKSAgICAgICB0cmFuc21pdCgpDQorICAgICAgICAgIC0tLS0tLS0tPiAgICAgICAtLS0tLS0tLT4NCisgICAgIFNsZWVwICAgICAgICAgUmVjZWl2ZSAgICAgICAgIFRyYW5zbWl0DQorICAgICAgICAgIDwtLS0tLS0tLSB8ICAvfFw8LS0tLS0tLS0NCisgICAgICAgICAgIHNsZWVwKCkgIHwgICB8ICAgcmVjZWl2ZSgpIC8gdHJhbnNtaXR0ZWQoKSAvIGJ1c3lfY2hhbm5lbCgpDQorICAgICAgICAgICAgICAgICAgICB8ICAgfA0KKyBlbmVyZ3lfZGV0ZWN0aW9uKCkgfCAgIHwgZW5lcmd5X2RldGVjdGVkKCkNCisgICAgICAgICAgICAgICAgICAgXHwvICB8DQorICAgICAgICAgICAgICAgRW5lcmd5IGRldGVjdGlvbg0KK2BgYA0KKw0KKyMjIyMgVHJhbnNpdGlvbnMNCisNCitUaGUgZHJpdmVyIGlzIGluaXRpYWxpemVkIGluIHRoZSBTbGVlcCBzdGF0ZS4gVGhlIGhpZ2hlciBsYXllciBzaG91bGQgY2FsbCANCit0aGUgcmVjZWl2ZSgpIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIGRyaXZlciBlbnRlciB0aGUgUmVjZWl2ZSBzdGF0ZSBhbmQgc3RhcnQgDQorcmFkaW8gb3BlcmF0aW9ucy4NCisNCitJbiBiYXNpYyBhcHBsaWNhdGlvbnMgcmFkaW8gc2hvdWxkIGJlIG1vc3QgdGltZSBpbiBhIFJlY2VpdmUgc3RhdGUuIEluIHRoaXMgDQorc3RhdGUgdGhlIHJhZGlvIHJlY2VpdmVzIGluY29taW5nIGZyYW1lcy4gQ2hhbmdpbmcgdG8gYW55IG90aGVyIHN0YXRlIHNob3VsZCBiZQ0KK3BlcmZvcm1lZCBmcm9tIFJlY2VpdmUgc3RhdGUuDQorDQorV2hlbiBhIGZyYW1lIGlzIHJlY2VpdmVkIGluIFJlY2VpdmUgc3RhdGUgdGhlIGRyaXZlciBub3RpZmllcyB0aGUgaGlnaGVyIGxheWVyIA0KK2J5IGNhbGxpbmcgcmVjZWl2ZWQoKSBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgcmVjZXB0aW9uIG9mIGEgDQorYnJvYWRjYXN0IGZyYW1lIG9yIGFmdGVyIHNlbmRpbmcgYW4gQUNLIHRvIGEgdW5pY2FzdCBmcmFtZS4NCitJbiB0aGUgcHJvbWlzY3VvdXMgbW9kZSB0aGUgaGlnaGVyIGxheWVyIGlzIG5vdGlmaWVkIGFib3V0IGFsbCBvZiB0aGUgcmVjZWl2ZWQNCitmcmFtZXMuIEV2ZW4gaWYgdGhlIGZyYW1lIHdhcyBub3QgZGVzdGluZWQgdG8gdGhlIHJlY2VpdmluZyBub2RlLg0KKw0KK1RvIHRyYW5zbWl0IGEgZnJhbWUgdGhlIGhpZ2hlciBsYXllciBzaG91bGQgY2FsbCB0aGUgdHJhbnNtaXQoKSBmdW5jdGlvbi4gSWYgDQorY2hhbm5lbCBpcyBidXN5IHRoZSBkcml2ZXIgZ29lcyBiYWNrIHRvIHRoZSBSZWNlaXZlIHN0YXRlIGFuZCBub3RpZmllcyB0aGUgDQoraGlnaGVyIGxheWVyIGJ5IGNhbGxpbmcgdGhlIGJ1c3lfY2hhbm5lbCgpIGZ1bmN0aW9uLiBJZiBhIGJyb2FkY2FzdCBmcmFtZSB3YXMgDQordHJhbnNtaXR0ZWQgdGhlIGRyaXZlciBnb2VzIGJhY2sgdG8gdGhlIFJlY2VpdmUgc3RhdGUgYW5kIG5vdGlmaWVzIHRoZSBoaWdoZXIgDQorbGF5ZXIgYnkgY2FsbGluZyB0aGUgdHJhbnNtaXR0ZWQoKSBmdW5jdGlvbi4gSWYgYSB1bmljYXN0IGZyYW1lIHdhcyB0cmFuc21pdHRlZCANCithbmQgYW4gQUNLIHdhcyByZWNlaXZlZCB0aGUgZHJpdmVyIGdvZXMgYmFjayB0byB0aGUgUmVjZWl2ZSBzdGF0ZSBhbmQgbm90aWZpZXMgDQordGhlIGhpZ2hlciBsYXllciBieSBjYWxsaW5nIHRoZSB0cmFuc21pdHRlZCgpIGZ1bmN0aW9uLiBJZiBhIHVuaWNhc3QgZnJhbWUgd2FzIA0KK3RyYW5zbWl0dGVkIGFuZCB0aGVyZSB3YXMgbm8gZXhwZWN0ZWQgQUNLIHJlY2VpdmVkIHRoZSBoaWdoZXIgbGF5ZXIgc2hhbGwgY2FsbCANCit0aGUgcmVjZWl2ZSgpIGZ1bmN0aW9uIGFmdGVyIHRoZSBBQ0sgdGltZW91dCB0byBtYWtlIHRoZSBkcml2ZXIgZ28gYmFjayB0byB0aGUNCitSZWNlaXZlIHN0YXRlLg0KKw0KK1RvIHBlcmZvcm0gYW4gRW5lcmd5IERldGVjdGlvbiBwcm9jZWR1cmUgdGhlIGhpZ2hlciBsYXllciBzaG91bGQgY2FsbCB0aGUNCitlbmVyZ3lfZGV0ZWN0aW9uKCkgZnVuY3Rpb24uIFdoZW4gdGhlIHByb2NlZHVyZSBpcyBjb21wbGV0ZWQgdGhlIGRyaXZlciBnb2VzDQorYXV0b21hdGljYWxseSBiYWNrIHRvIHRoZSBSZWNlaXZlIHN0YXRlIGFuZCBub3RpZmllcyB0aGUgaGlnaGVyIGxheWVyIHdpdGggdGhlDQorZW5lcmd5X2RldGVjdGVkKCkgZnVuY3Rpb24uDQorDQorIyMjIyBTdGF0ZXMNCisNCisjIyMjIyBTbGVlcA0KK0luIHRoaXMgc3RhdGUgdGhlIHJhZGlvIGlzIGluIGxvdyBwb3dlciBtb2RlLiBJdCBjYW5ub3QgdHJhbnNtaXQgb3IgcmVjZWl2ZSBhbnkNCitmcmFtZS4NCisNCisjIyMjIyBSZWNlaXZlDQorSW4gdGhpcyBzdGF0ZSB0aGUgcmFkaW8gcmVjZWl2ZXMgODAyLjE1LjQgZnJhbWVzLiBJdCBmaWx0ZXJzIG91dCBmcmFtZXMgd2l0aA0KK2ludmFsaWQgQ1JDLCBsZW5ndGgsIHR5cGUsIGRlc3RpbmF0aW9uIGFkZHJlc3MuIA0KK0lmIHRoZSBkcml2ZXIgcmVjZWl2ZXMgdW5pY2FzdCBmcmFtZSBkZXN0aW5lZCB0byB0aGUgcmVjZWl2aW5nIG5vZGUgaXQgDQorYXV0b21hdGljYWxseSB0cmFuc21pdHMgYW4gQUNLIGZyYW1lLiBBY2NvcmRpbmcgdG8gODAyLjE1LjQgc3RhbmRhcmQsIGFuIEFDSw0KK2ZyYW1lIHNob3VsZCBiZSBkZWxheWVkIGFUdXJuYXJvdW5kVGltZSAoMTkyIHVTKSBhZnRlciByZWNlcHRpb24gb2YgdGhlIEFDS2VkDQorZnJhbWUuIFRvIHBlcmZvcm0gdGhpcyBkZWxheSB0aGUgZHJpdmVyIHVzZXMgdGhlIFRJRlMgdGltZXIgaW4gdGhlIHJhZGlvDQorcGVyaXBoZXJhbC4gVGhpcyB0aW1lciByZXF1aXJlcyAzIHNob3J0cyB0byB3b3JrIGNvcnJlY3RseToNCisxLiBFTkQgLT4gRElTQUJMRQ0KKzIuIERJU0FCTEUgLT4gVFhFTg0KKzMuIFJFQURZIC0+IFNUQVJUDQorVGhlIGRyaXZlciBoYXMgbGltaXRlZCB0aW1lIGFmdGVyIHJlY2VpdmluZyBvZiBhIGZyYW1lIHRvIGRlY2lkZSBpZiBhbiBBQ0sgDQorc2hvdWxkIGJlIHRyYW5zbWl0dGVkLiBJZiBBQ0sgc2hvdWxkIG5vdCBiZSB0cmFuc21pdHRlZCB0aGUgZHJpdmVyIG11c3QgYWJvcnQNCitzZW5kaW5nIEFDSyBieSBkaXNhYmxpbmcgdGhvc2Ugc2hvcnRzIGFuZCB0cmlnZ2VyaW5nIERJU0FCTEUgdGFzay4NCitUbyB1c2UgdGhpcyBsaW1pdGVkIHRpbWUgbW9zdCBlZmZlY3RpdmUgdGhlIGRyaXZlciB1c2VzIHRoZSBCaXQgQ291bnRlciBmZWF0dXJlDQorb2YgdGhlIHJhZGlvIHBlcmlwaGVyYWwgdG8gZ2V0IG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBGcmFtZSBDb250cm9sIGZpZWxkIGlzIA0KK3JlY2VpdmVkIGFuZCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIHJlY2VpdmVkLiBUaG9zZSBmaWVsZHMgYXJlIHVzZWQgdG8NCitmaWx0ZXIgdGhlIGZyYW1lIGJlZm9yZSB3aG9sZSBmcmFtZSBpcyByZWNlaXZlZC4NCitJZiBhbGwgMyBzaG9ydHMgdXNlZCB0byBzZW5kIEFDSyBhdXRvbWF0aWNhbGx5IGFyZSBlbmFibGVkIHRoZSByYWRpbyBwZXJpcGhlcmFsDQorc2VuZHMgQUNLIGZyYW1lcyBpbiBsb29wLiBUbyBwcmV2ZW50IHRoaXMgZHVyaW5nIGRlYnVnZ2luZyBwcm9jZXNzIHRoZXJlIGFyZSANCitvbmx5IDIgc2hvcnRzIGVuYWJsZWQgd2hlbiB3YWl0aW5nIGZvciBmcmFtZSAoMS4gYW5kIDIuKSBhbmQgMiBvdGhlciBzaG9ydHMgYXJlDQorZW5hYmxlZCBpbiBESVNBQkxFRCBldmVudCBoYW5kbGVyICgxLiBhbmQgMy4pLiBUaGUgZmlyc3Qgc2hvcnQgaXMgc3RpbGwgZW5hYmxlZA0KK3RvIGF1dG9tYXRpY2FsbHkgZGlzYWJsZSB0cmFuc21pdHRlciBhZnRlciB0cmFuc21pc3Npb24gb2YgdGhlIEFDSyBmcmFtZS4NCisNCisjIyMjIyBUcmFuc21pdA0KK0luIHRoaXMgc3RhdGUgdGhlIHJhZGlvIHBlcmZvcm1zIHRoZSBDQ0EgcHJvY2VkdXJlLiBJZiBjaGFubmVsIGlzIGZyZWUgdGhlIHJhZGlvIA0KK3RyYW5zbWl0cyByZXF1ZXN0ZWQgZnJhbWUuIElmIGFuIEFDSyB3YXMgcmVxdWVzdGVkIGluIHRoZSB0cmFuc21pdHRlZCBmcmFtZQ0KK3RoZSBkcml2ZXIgYXV0b21hdGljYWxseSByZWNlaXZlcyB0aGUgQUNLIGZyYW1lIGluIHRoaXMgc3RhdGUuDQorVG8gcHJldmVudCB0aGUgVFhJRExFIHBlcmlwaGVyYWwgc3RhdGUgdGhlIGRyaXZlciB1c2VzIDIgc2hvcnRzIGluIFRyYW5zbWl0DQorc3RhdGU6DQorMS4gUkVBRFkgLT4gU1RBUlQNCisyLiBFTkQgLT4gRElTQUJMRQ0KK1Rob3NlIHNob3J0cyBhdXRvbWF0aWNhbGx5IHN0YXJ0IHRyYW5zbWlzc2lvbiBvZiB0aGUgZnJhbWUgd2hlbiB0cmFuc21pdHRlciBpcw0KK3JlYWR5IGFuZCBkaXNhYmxlIHRyYW5zbWl0dGVyIHdoZW4gdGhlIGZyYW1lIHdhcyB0cmFuc21pdHRlZC4NCisNCisjIyMjIyBFbmVyZ3kgZGV0ZWN0aW9uDQorSW4gdGhpcyBzdGF0ZSB0aGUgcmFkaW8gcGVyZm9ybXMgdGhlIEVuZXJneSBEZXRlY3Rpb24gcHJvY2VkdXJlLiBEdXJpbmcgdGhpcw0KK3Byb2NlZHVyZSB0aGUgcmFkaW8gaXMgYnVzeSBhbmQgY2Fubm90IGNoYW5nZSBzdGF0ZSB0byBhbnkgb3RoZXIuIFRoZSBlbmQgb2YNCit0aGlzIHByb2NlZHVyZSBpcyBub3RpZmllZCB0byB0aGUgaGlnaGVyIGxheWVyIGJ5IGEgZnVuY3Rpb24gY2FsbC4NCisNCisjIyMgTXV0ZXggYW5kIGNyaXRpY2FsIHNlY3Rpb25zLg0KKw0KK1N0YXRlIHRyYW5zaXRpb25zIGluIHRoZSBGU00gY2FuIGJlIHJlcXVlc3RlZCBzaW11bHRhbmVvdXNseSBieSB0aGUgaGlnaGVyIGxheWVyDQorYW5kIHRoZSBJUlEgaGFuZGxlci4gVG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGRyaXZlciB0aGVyZSBpcyBhIG11dGV4Lg0KK1RoZSBtdXRleCBpcyB1bmxvY2tlZCBvbmx5IGluIHRoZSAqUmVjZWl2ZSogc3RhdGUgKCpXYWl0aW5nUnhGcmFtZSogc3Vic3RhdGUpLiANCitJZiB0aGVyZSBpcyByZXF1ZXN0ZWQgc3RhdGUgdHJhbnNpdGlvbiwgdGhlIHByb2NlZHVyZSBzaGFsbCBsb2NrIHRoZSBtdXRleCANCitiZWZvcmUgc3RhdGUgaXMgY2hhbmdlZC4gSWYgbXV0ZXggY2Fubm90IGJlIGxvY2tlZCwgYW5vdGhlciBwcm9jZWR1cmUgaGFzIGxvY2tlZA0KK2l0IGFuZCBpcyBnb2luZyB0byBjaGFuZ2UgdGhlIHN0YXRlLg0KK1RoZSBtdXRleCBpcyB1bmxvY2tlZCB3aGVuIHRoZSBkcml2ZXIgZW50ZXJzICpSZWNlaXZlKiBzdGF0ZS4NCisNCitBIHJhY2UgY29uZGl0aW9uIGNvdWxkIGFsc28gb2NjdXIgZHVyaW5nIGhhbmRsZSBvZiBhIHJlcXVlc3RzIGZyb20gdGhlIGhpZ2hlciANCitsYXllci4gRXZlbiBpZiB0aGUgcmVjZWl2ZXIgaXMgc3RvcHBlZCAoVEFTSyBTVE9QKSB0aGUgRU5EIG9yIERJU0FCTEVEIGV2ZW50IGNhbiANCitiZSByYWlzZWQgZm9yIGEgZmV3IHVTIGFmdGVyIHRyaWdnZXJpbmcgdGhlIHRhc2suIFRvIHByZXZlbnQgaW50ZXJydXB0IG9mIHRoZQ0KK2hpZ2hlciBsYXllciByZXF1ZXN0IGhhbmRsZXIgYnkgSVJRIGhhbmRsZXIsIHRoZSBoaWdoZXIgbGF5ZXIgcmVxdWVzdCBoYW5kbGVycw0KK2FyZSBwZXJmb3JtZW5kIGluIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGUgY3JpdGljYWwgc2VjdGlvbnMgYXJlIGltcGxlbWVudGVkIGFzDQorc29mdHdhcmUgaW50ZXJydXB0IHJlcXVlc3RzIHdpdGggcHJpb3JpdHkgZXF1YWwgdG8gdGhlIFJBRElPIElSUS4NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NC5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWY5NDU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTQuYwpAQCAtMCwwICsxLDI4NiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgbnJmIDgwMi4xNS40IHJhZGlvIGRyaXZlci4KKyAqCisgKi8KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTQuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0LmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Zy5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfZnNtLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb24uaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3BpYi5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcC5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdC5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyLmgiCisjaW5jbHVkZSAiaGFsL25yZl9yYWRpby5oIgorI2luY2x1ZGUgInJhYWwvbnJmX3JhYWxfYXBpLmgiCisKKyNpbmNsdWRlIDxjbXNpcy9jb3JlX2NtRnVuYy5oPgorCisKK3VpbnQ4X3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9jaGFubmVsX2dldCh2b2lkKQoreworICAgIHJldHVybiBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9jaGFubmVsX2dldCgpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3R4X3Bvd2VyX3NldChpbnQ4X3QgcG93ZXIpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfdHhfcG93ZXJfc2V0KHBvd2VyKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3Bhbl9pZF9zZXQoY29uc3QgdWludDhfdCAqIHBfcGFuX2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3Bhbl9pZF9zZXQocF9wYW5faWQpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfZXh0ZW5kZWRfYWRkcmVzc19zZXQoY29uc3QgdWludDhfdCAqIHBfZXh0ZW5kZWRfYWRkcmVzcykKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9leHRlbmRlZF9hZGRyZXNzX3NldChwX2V4dGVuZGVkX2FkZHJlc3MpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc2hvcnRfYWRkcmVzc19zZXQoY29uc3QgdWludDhfdCAqIHBfc2hvcnRfYWRkcmVzcykKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9zaG9ydF9hZGRyZXNzX3NldChwX3Nob3J0X2FkZHJlc3MpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfaW5pdCh2b2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X2luaXQoKTsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnX2luaXQoKTsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9pbml0KCk7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb25faW5pdCgpOworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2luaXQoKTsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3BfaW5pdCgpOworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9pbml0KCk7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJfaW5pdCgpOworICAgIG5yZl9yYWFsX2luaXQoKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2RlaW5pdCh2b2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX2RlaW5pdCgpOworfQorCitucmZfZHJ2X3JhZGlvODAyMTU0X3N0YXRlX3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9zdGF0ZV9nZXQodm9pZCkKK3sKKyAgICBzd2l0Y2ggKG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3N0YXRlX2dldCgpKQorICAgIHsKKyAgICBjYXNlIFJBRElPX1NUQVRFX0RJU0FCTElORzoKKyAgICBjYXNlIFJBRElPX1NUQVRFX1NMRUVQOgorICAgICAgICByZXR1cm4gTlJGX0RSVl9SQURJTzgwMjE1NF9TVEFURV9TTEVFUDsKKworICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDoKKyAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUU6CisgICAgY2FzZSBSQURJT19TVEFURV9SWF9IRUFERVI6CisgICAgY2FzZSBSQURJT19TVEFURV9SWF9GUkFNRToKKyAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0FDSzoKKyAgICAgICAgcmV0dXJuIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfUkVDRUlWRTsKKworICAgIGNhc2UgUkFESU9fU1RBVEVfQ0NBOgorICAgIGNhc2UgUkFESU9fU1RBVEVfVFhfRlJBTUU6CisgICAgY2FzZSBSQURJT19TVEFURV9SWF9BQ0s6CisgICAgICAgIHJldHVybiBOUkZfRFJWX1JBRElPODAyMTU0X1NUQVRFX1RSQU5TTUlUOworCisgICAgY2FzZSBSQURJT19TVEFURV9FRDoKKyAgICAgICAgcmV0dXJuIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfRU5FUkdZX0RFVEVDVElPTjsKKyAgICB9CisKKyAgICByZXR1cm4gTlJGX0RSVl9SQURJTzgwMjE1NF9TVEFURV9JTlZBTElEOworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfc2xlZXAodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fU0xFRVApOworCisgICAgYm9vbCByZXN1bHQgPSB0cnVlOworCisgICAgc3dpdGNoIChucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9zdGF0ZV9nZXQoKSkKKyAgICB7CisgICAgY2FzZSBSQURJT19TVEFURV9ESVNBQkxJTkc6CisgICAgY2FzZSBSQURJT19TVEFURV9TTEVFUDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1Q6CisgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FOgorICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfSEVBREVSOgorICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfRlJBTUU6CisgICAgY2FzZSBSQURJT19TVEFURV9UWF9BQ0s6CisgICAgICAgIHJlc3VsdCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9zbGVlcCgpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fU0xFRVApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZWNlaXZlKHVpbnQ4X3QgY2hhbm5lbCkKK3sKKyAgICBib29sIHJlc3VsdDsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fUkVDRUlWRSk7CisKKyAgICByZXN1bHQgPSBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfcmVjZWl2ZShjaGFubmVsKTsKKyAgICBhc3NlcnQocmVzdWx0ID09IHRydWUpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fUkVDRUlWRSk7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF90cmFuc21pdChjb25zdCB1aW50OF90ICogcF9kYXRhLCB1aW50OF90IGNoYW5uZWwsIGludDhfdCBwb3dlciwgYm9vbCBjY2EpCit7CisgICAgYm9vbCByZXN1bHQ7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX1RSQU5TTUlUKTsKKworICAgIHJlc3VsdCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF90cmFuc21pdChwX2RhdGEsIGNoYW5uZWwsIHBvd2VyLCBjY2EpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fVFJBTlNNSVQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9lbmVyZ3lfZGV0ZWN0aW9uKHVpbnQ4X3QgY2hhbm5lbCwgdWludDMyX3QgdGltZV91cykKK3sKKyAgICBib29sIHJlc3VsdDsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fRU5FUkdZX0RFVEVDVElPTik7CisKKyAgICByZXN1bHQgPSBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfZW5lcmd5X2RldGVjdGlvbihjaGFubmVsLCB0aW1lX3VzKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX0VORVJHWV9ERVRFQ1RJT04pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9idWZmZXJfZnJlZSh1aW50OF90ICogcF9kYXRhKQoreworICAgIHJ4X2J1ZmZlcl90ICogcF9idWZmZXIgPSAocnhfYnVmZmVyX3QgKilwX2RhdGE7CisKKyAgICBhc3NlcnQocF9idWZmZXItPmZyZWUgPT0gZmFsc2UpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX0JVRkZFUl9GUkVFKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9idWZmZXJfZnJlZShwX2RhdGEpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fQlVGRkVSX0ZSRUUpOworfQorCitpbnQ4X3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9yc3NpX2xhc3RfZ2V0KHZvaWQpCit7CisgICAgdWludDhfdCBtaW51c19kYm0gPSBucmZfcmFkaW9fcnNzaV9zYW1wbGVfZ2V0KCk7CisgICAgcmV0dXJuIC0gKGludDhfdCltaW51c19kYm07Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9wcm9taXNjdW91c19nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfcHJvbWlzY3VvdXNfZ2V0KCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9wcm9taXNjdW91c19zZXQoYm9vbCBlbmFibGVkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3Byb21pc2N1b3VzX3NldChlbmFibGVkKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2F1dG9fYWNrX3NldChib29sIGVuYWJsZWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfYXV0b19hY2tfc2V0KGVuYWJsZWQpOworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfYXV0b19hY2tfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2F1dG9fYWNrX2dldCgpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfYXV0b19wZW5kaW5nX2JpdF9zZXQoYm9vbCBlbmFibGVkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X3NldChlbmFibGVkKTsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3BlbmRpbmdfYml0X2Zvcl9hZGRyX3NldChjb25zdCB1aW50OF90ICogcF9hZGRyLCBib29sIGV4dGVuZGVkKQoreworICAgIHJldHVybiBucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdF9mb3JfYWRkcl9zZXQocF9hZGRyLCBleHRlbmRlZCk7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9wZW5kaW5nX2JpdF9mb3JfYWRkcl9jbGVhcihjb25zdCB1aW50OF90ICogcF9hZGRyLCBib29sIGV4dGVuZGVkKQoreworICAgIHJldHVybiBucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdF9mb3JfYWRkcl9jbGVhcihwX2FkZHIsIGV4dGVuZGVkKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3BlbmRpbmdfYml0X2Zvcl9hZGRyX3Jlc2V0KGJvb2wgZXh0ZW5kZWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfZm9yX2FkZHJfcmVzZXQoZXh0ZW5kZWQpOworfQorCitfX1dFQUsgdm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3J4X3N0YXJ0ZWQodm9pZCkKK3sKKyAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5Cit9CisKK19fV0VBSyB2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVjZWl2ZWQodWludDhfdCAqIHBfZGF0YSwgaW50OF90IHBvd2VyLCBpbnQ4X3QgbHFpKQoreworICAgICh2b2lkKSBwb3dlcjsKKyAgICAodm9pZCkgbHFpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9idWZmZXJfZnJlZShwX2RhdGEpOworfQorCitfX1dFQUsgdm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3R4X3N0YXJ0ZWQodm9pZCkKK3sKKyAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5Cit9CisKK19fV0VBSyB2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfdHJhbnNtaXR0ZWQodWludDhfdCAqIHBfYWNrLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpCit7CisgICAgKHZvaWQpIHBvd2VyOworICAgICh2b2lkKSBscWk7CisKKyAgICBpZiAocF9hY2sgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfYnVmZmVyX2ZyZWUocF9hY2spOworICAgIH0KK30KKworX19XRUFLIHZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9idXN5X2NoYW5uZWwodm9pZCkKK3sKKyAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5Cit9CisKK19fV0VBSyB2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfZW5lcmd5X2RldGVjdGVkKGludDhfdCByZXN1bHQpCit7CisgICAgKHZvaWQpIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0LmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Y2UyODAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NC5oCkBAIC0wLDAgKzEsNDI3IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgVGhpcyBtb2R1bGUgY29udGFpbnMgZ2VuZXJpYyA4MDIuMTUuNCByYWRpbyBkcml2ZXIgZm9yIG5SRiBTb0MgZGV2aWNlcy4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX0RSVl9SQURJTzgwMjE1NF9IXw0KKyNkZWZpbmUgTlJGX0RSVl9SQURJTzgwMjE1NF9IXw0KKw0KKyNpbmNsdWRlIDxzdGRib29sLmg+DQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIEBicmllZiBTdGF0ZXMgb2YgdGhlIGRyaXZlci4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfSU5WQUxJRCwNCisgICAgTlJGX0RSVl9SQURJTzgwMjE1NF9TVEFURV9TTEVFUCwNCisgICAgTlJGX0RSVl9SQURJTzgwMjE1NF9TVEFURV9SRUNFSVZFLA0KKyAgICBOUkZfRFJWX1JBRElPODAyMTU0X1NUQVRFX1RSQU5TTUlULA0KKyAgICBOUkZfRFJWX1JBRElPODAyMTU0X1NUQVRFX0VORVJHWV9ERVRFQ1RJT04sDQorfSBucmZfZHJ2X3JhZGlvODAyMTU0X3N0YXRlX3Q7DQorDQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemUgODAyLjE1LjQgZHJpdmVyLg0KKyAqDQorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSBjYWxsZWQgb25jZSwgYmVmb3JlIGFueSBvdGhlciBmdW5jdGlvbiBmcm9tIHRoaXMgbW9kdWxlLg0KKyAqDQorICogSW5pdGlhbGl6ZSByYWRpbyBwZXJpcGhlcmFsIHRvIFNsZWVwIHN0YXRlLg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9pbml0KHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBEZWluaXRpYWxpemUgODAyLjE1LjQgZHJpdmVyLg0KKyAqDQorICogRGVpbml0aWFsaXplIHJhZGlvIHBlcmlwaGVyYWwgYW5kIHJlc2V0IGl0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9kZWluaXQodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIEdldCBjaGFubmVsIG9uIHdoaWNoIHRoZSByYWRpbyBvcGVyYXRlcyByaWdodCBub3cuDQorICovDQordWludDhfdCBucmZfZHJ2X3JhZGlvODAyMTU0X2NoYW5uZWxfZ2V0KHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBTZXQgdHJhbnNtaXQgcG93ZXIgdXNlZCBmb3IgQUNLIGZyYW1lcy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBvd2VyICBUcmFuc21pdCBwb3dlciBbZEJtXS4NCisgKi8NCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3R4X3Bvd2VyX3NldChpbnQ4X3QgcG93ZXIpOw0KKw0KKy8qKg0KKyAqIEBzZWN0aW9uIFNldHRpbmcgYWRkcmVzc2VzIGFuZCBQYW4gSWQgb2YgdGhpcyBkZXZpY2UuDQorICovDQorDQorLyoqDQorICogQGJyaWVmIFNldCBQQU4gSWQgdXNlZCBieSB0aGlzIGRldmljZS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfcGFuX2lkICBQb2ludGVyIHRvIFBBTiBJZCAoMiBieXRlcywgbGl0dGxlLWVuZGlhbikuDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGNvcHkgb2YgdGhlIFBBTiBJZC4NCisgKi8NCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGFuX2lkX3NldChjb25zdCB1aW50OF90ICpwX3Bhbl9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIFNldCBFeHRlbmRlZCBBZGRyZXNzIG9mIHRoaXMgZGV2aWNlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9leHRlbmRlZF9hZGRyZXNzICBQb2ludGVyIHRvIGV4dGVuZGVkIGFkZHJlc3MgKDggYnl0ZXMsIGxpdHRsZS1lbmRpYW4pLg0KKyAqDQorICogVGhpcyBmdW5jdGlvbiBtYWtlcyBjb3B5IG9mIHRoZSBhZGRyZXNzLg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9leHRlbmRlZF9hZGRyZXNzX3NldChjb25zdCB1aW50OF90ICpwX2V4dGVuZGVkX2FkZHJlc3MpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBTZXQgU2hvcnQgQWRkcmVzcyBvZiB0aGlzIGRldmljZS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfc2hvcnRfYWRkcmVzcyAgUG9pbnRlciB0byBzaG9ydCBhZGRyZXNzICgyIGJ5dGVzLCBsaXR0bGUtZW5kaWFuKS4NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgY29weSBvZiB0aGUgYWRkcmVzcy4NCisgKi8NCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc2hvcnRfYWRkcmVzc19zZXQoY29uc3QgdWludDhfdCAqcF9zaG9ydF9hZGRyZXNzKTsNCisNCisNCisvKioNCisgKiBAc2VjdGlvbiBGdW5jdGlvbnMgdG8gcmVxdWVzdCBGU00gdHJhbnNpdGlvbnMgYW5kIGNoZWNrIGN1cnJlbnQgc3RhdGUuDQorICoNCisgKiAgICAgICAgICByZWNlaXZlKCkgICAgICAgdHJhbnNtaXQoKQ0KKyAqICAgICAgICAgIC0tLS0tLS0tPiAgICAgICAtLS0tLS0tLT4NCisgKiAgICAgU2xlZXAgICAgICAgICBSZWNlaXZlICAgICAgICAgVHJhbnNtaXQNCisgKiAgICAgICAgICA8LS0tLS0tLS0gfCAgL3xcPC0tLS0tLS0tDQorICogICAgICAgICAgIHNsZWVwKCkgIHwgICB8ICAgcmVjZWl2ZSgpIC8gdHJhbnNtaXR0ZWQoKSAvIGJ1c3lfY2hhbm5lbCgpDQorICogICAgICAgICAgICAgICAgICAgIHwgICB8DQorICogZW5lcmd5X2RldGVjdGlvbigpIHwgICB8IGVuZXJneV9kZXRlY3RlZCgpDQorICogICAgICAgICAgICAgICAgICAgXHwvICB8DQorICogICAgICAgICAgICAgICBFbmVyZ3kgZGV0ZWN0aW9uDQorICovDQorDQorLyoqDQorICogQGJyaWVmIEdldCBjdXJyZW50IHN0YXRlIG9mIHRoZSByYWRpby4NCisgKi8NCitucmZfZHJ2X3JhZGlvODAyMTU0X3N0YXRlX3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9zdGF0ZV9nZXQodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIENoYW5nZSByYWRpbyBzdGF0ZSB0byBTbGVlcC4NCisgKg0KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGlmIHJhZGlvIGlzIGluIFJlY2VpdmUgc3RhdGUuDQorICoNCisgKiBTbGVlcCBzdGF0ZSBpcyB0aGUgbG93ZXN0IHBvd2VyIHN0YXRlLiBJbiB0aGlzIHN0YXRlIHJhZGlvIGNhbm5vdCB0cmFuc21pdCBvciByZWNlaXZlIGZyYW1lcy4NCisgKg0KKyAqIEByZXR1cm4gIHRydWUgICBJZiB0aGUgcmFkaW8gY2hhbmdlcyBpdCdzIHN0YXRlIHRvIGxvdyBwb3dlciBtb2RlLg0KKyAqIEByZXR1cm4gIGZhbHNlICBJZiB0aGUgZHJpdmVyIGNvdWxkIG5vdCBzY2hlZHVsZSBjaGFuZ2luZyBzdGF0ZS4NCisgKi8NCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfc2xlZXAodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIENoYW5nZSByYWRpbyBzdGF0ZSB0byBSZWNlaXZlLg0KKyAqDQorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGluIFNsZWVwIG9yIFRyYW5zbWl0IHN0YXRlLg0KKyAqDQorICogSW4gUmVjZWl2ZSBzdGF0ZSByYWRpbyByZWNlaXZlcyBmcmFtZXMgYW5kIGF1dG9tYXRpY2FsbHkgc2VuZHMgQUNLIGZyYW1lcyB3aGVuIGFwcHJvcHJpYXRlLg0KKyAqIFJlY2VpdmVkIGZyYW1lIGlzIHJlcG9ydGVkIHRvIGhpZ2hlciBsYXllciBieSBucmZfcmFkaW84MDIxNTRfcmVjZWl2ZWQoKSBjYWxsLg0KKyAqDQorICogQHBhcmFtW2luXSAgY2hhbm5lbCAgQ2hhbm5lbCBudW1iZXIgb24gd2hpY2ggcmFkaW8gd2lsbCByZWNlaXZlLg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZWNlaXZlKHVpbnQ4X3QgY2hhbm5lbCk7DQorDQorLyoqDQorICogQGJyaWVmIENoYW5nZSByYWRpbyBzdGF0ZSB0byBUcmFuc21pdC4NCisgKg0KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBpbiBSZWNlaXZlIHN0YXRlLiBJbiBvdGhlciBzdGF0ZXMgdHJhbnNtaXNzaW9uIHdpbGwgYmUNCisgKiAgICAgICBzY2hlZHVsZWQuDQorICoNCisgKiBJbiBUcmFuc21pdCBzdGF0ZSByYWRpbyB0cmFuc21pdHMgZ2l2ZW4gZnJhbWUuIElmIHJlcXVlc3RlZCBpdCB3YWl0cyBmb3IgQUNLIGZyYW1lLg0KKyAqIFJhZGlvIGRyaXZlciB3YWl0IGluZmluaXRlbHkgZm9yIEFDSyBmcmFtZS4gSGlnaGVyIGxheWVyIGlzIHJlc3BvbnNpYmxlIHRvIGNhbGwNCisgKiBucmZfcmFkaW84MDIxNTRfcmVjZWl2ZSgpIGFmdGVyIEFDSyB0aW1lb3V0Lg0KKyAqIFRyYW5zbWlzc2lvbiByZXN1bHQgaXMgcmVwb3J0ZWQgdG8gaGlnaGVyIGxheWVyIGJ5IG5yZl9yYWRpbzgwMjE1NF90cmFuc21pdHRlZCgpIG9yDQorICogbnJmX3JhZGlvODAyMTU0X2J1c3lfY2hhbm5lbCgpIGNhbGxzLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9kYXRhICAgUG9pbnRlciB0byBhcnJheSBjb250YWluaW5nIGRhdGEgdG8gdHJhbnNtaXQuIEZpcnN0IGJ5dGUgc2hvdWxkIGNvbnRhaW4NCisgKiAgICAgICAgICAgICAgICAgICAgICBmcmFtZSBsZW5ndGggYW5kIGZvbGxvd2luZyBieXRlcyBzaG91bGQgY29udGFpbiBkYXRhLiBDUkMgaXMgY29tcHV0ZWQNCisgKiAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGJ5IHJhZGlvIGhhcmR3YXJlIGFuZCBjYW4gY29udGFpbiBhbnkgYnl0ZXMuDQorICogQHBhcmFtW2luXSAgY2hhbm5lbCAgQ2hhbm5lbCBudW1iZXIgb24gd2hpY2ggcmFkaW8gd2lsbCB0cmFuc21pdCBnaXZlbiBmcmFtZS4NCisgKiBAcGFyYW1baW5dICBwb3dlciAgICBUcmFuc21pc3Npb24gcG93ZXIgW2RCbV0uIEdpdmVuIHZhbHVlIGlzIHJvdW5kZWQgdXAgdG8gbmVhcmVzdCBwZXJtaXR0ZWQNCisgKiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4NCisgKiBAcGFyYW1baW5dICBjY2EgICAgICBJZiB0aGUgZHJpdmVyIHNob3VsZCBwZXJmb3JtIENDQSBwcm9jZWR1cmUgYmVmb3JlIHRyYW5zbWlzc2lvbi4NCisgKg0KKyAqIEByZXR1cm4gIHRydWUgICBJZiB0aGUgdHJhbnNtaXNzaW9uIHByb2NlZHVyZSB3YXMgc2NoZWR1bGVkLg0KKyAqIEByZXR1cm4gIGZhbHNlICBJZiB0aGUgZHJpdmVyIGNvdWxkIG5vdCBzY2hlZHVsZSB0aGUgdHJhbnNtaXNzaW9uIHByb2NlZHVyZS4NCisgKi8NCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfdHJhbnNtaXQoY29uc3QgdWludDhfdCAqcF9kYXRhLCB1aW50OF90IGNoYW5uZWwsIGludDhfdCBwb3dlciwgYm9vbCBjY2EpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBDaGFuZ2UgcmFkaW8gc3RhdGUgdG8gRW5lcmd5IERldGVjdGlvbi4NCisgKg0KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBpbiBSZWNlaXZlIHN0YXRlIG9yIFNsZWVwIHN0YXRlLg0KKyAqIEBub3RlIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIFNsZWVwIHN0YXRlIG5yZl9kcnZfcmFkaW84MDIxNTRfZW5lcmd5X2RldGVjdGVkKCkgbWF5IGJlDQorICogICAgICAgY2FsbGVkIGJlZm9yZSBucmZfZHJ2X3JhZGlvODAyMTU0X2VuZXJneV9kZXRlY3Rpb24oKSByZXR1cm5zIHJlc3VsdC4NCisgKg0KKyAqIEluIEVuZXJneSBEZXRlY3Rpb24gc3RhdGUgcmFkaW8gZGV0ZWN0cyBtYXhpbXVtIGVuZXJneSBmb3IgZ2l2ZW4gdGltZS4gUmVzdWx0IG9mIHRoZSBkZXRlY3Rpb24NCisgKiBpcyByZXBvcnRlZCB0byB0aGUgaGlnaGVyIGxheWVyIGJ5IG5yZl9kcnZfcmFkaW84MDIxNTRfZW5lcmd5X2RldGVjdGVkKCkgY2FsbC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGNoYW5uZWwgIENoYW5uZWwgbnVtYmVyIG9uIHdoaWNoIHJhZGlvIHdpbGwgZGV0ZWN0IGVuZXJneS4NCisgKiBAcGFyYW1baW5dICB0aW1lX3VzICBEdXJhdGlvbiBvZiBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZS4gR2l2ZW4gdmFsdWUgaXMgcm91bmRlZCB1cCB0bw0KKyAqICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpY2F0aW9uIG9mIDhzICgxMjggdXMpLg0KKyAqDQorICogQHJldHVybiAgdHJ1ZSAgIElmIHRoZSBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZSB3YXMgc2NoZWR1bGVkLg0KKyAqIEByZXR1cm4gIGZhbHNlICBJZiB0aGUgZHJpdmVyIGNvdWxkIG5vdCBzY2hlZHVsZSB0aGUgZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUuDQorICovDQorYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X2VuZXJneV9kZXRlY3Rpb24odWludDhfdCBjaGFubmVsLCB1aW50MzJfdCB0aW1lX3VzKTsNCisNCisNCisvKioNCisgKiBAc2VjdGlvbiBDYWxscyB0byBoaWdoZXIgbGF5ZXIuDQorICovDQorDQorLyoqDQorICogQGJyaWVmIE5vdGlmeSB0aGF0IHJlY2VpdmluZyBmcmFtZSBoYXMgc3RhcnRlZC4NCisgKg0KKyAqIEBub3RlIEl0IGlzIHBvc3NpYmxlIHRoZSBmcmFtZSBpcyBkcm9wcGVkIGR1cmluZyByZWNlaXZlIHByb2NlZHVyZSBhbmQNCisgKiAgICAgICBAc2EgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZWNlaXZlZCB3b24ndCBiZSBjYWxsZWQuDQorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdmVyeSBzaG9ydCB0byBwcmV2ZW50IGRyb3BwaW5nIGZyYW1lcyBieSB0aGUgZHJpdmVyLg0KKyAqLw0KK2V4dGVybiB2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcnhfc3RhcnRlZCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgTm90aWZ5IHRoYXQgZnJhbWUgd2FzIHJlY2VpdmVkLg0KKyAqDQorICogQG5vdGUgQnVmZmVyIHBvaW50ZWQgYnkgdGhlIHBfZGF0YSBwb2ludGVyIGlzIG5vdCBtb2RpZmllZCBieSB0aGUgcmFkaW8gZHJpdmVyIChhbmQgY2FuJ3QNCisgKiAgICAgICBiZSB1c2VkIHRvIHJlY2VpdmUgYSBmcmFtZSkgdW50aWwgbnJmX2Rydl9yYWRpbzgwMjE1NF9idWZmZXJfZnJlZSgpIGZ1bmN0aW9uIGlzIGNhbGxlZC4NCisgKiBAbm90ZSBCdWZmZXIgcG9pbnRlZCBieSB0aGUgcF9kYXRhIHBvaW50ZXIgbWF5IGJlIG1vZGlmaWVkIGJ5IHRoZSBmdW5jdGlvbiBoYW5kbGVyIChhbmQgb3RoZXINCisgKiAgICAgICBtb2R1bGVzKSB1bnRpbCBucmZfZHJ2X3JhZGlvODAyMTU0X2J1ZmZlcl9mcmVlKCkgZnVuY3Rpb24gaXMgY2FsbGVkLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9kYXRhICBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIHJlY2VpdmVkIGRhdGEuIEZpcnN0IGJ5dGUgaW4gdGhlIGJ1ZmZlciBpcw0KKyAqICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIG9mIHRoZSBmcmFtZSBhbmQgZm9sbG93aW5nIGJ5dGVzIGlzIHRoZSBmcmFtZSBpdHNlbGYgKGFmdGVyIFBIUikuDQorICogQHBhcmFtW2luXSAgcG93ZXIgICBSU1NJIG9mIHJlY2VpdmVkIGZyYW1lLg0KKyAqIEBwYXJhbVtpbl0gIGxxaSAgICAgTFFJIG9mIHJlY2VpdmVkIGZyYW1lLg0KKyAqLw0KK2V4dGVybiB2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVjZWl2ZWQodWludDhfdCAqIHBfZGF0YSwgaW50OF90IHBvd2VyLCBpbnQ4X3QgbHFpKTsNCisNCisvKioNCisgKiBAYnJpZWYgTm90aWZ5IHRoYXQgdHJhbnNtaXR0aW5nIGZyYW1lIGhhcyBzdGFydGVkLg0KKyAqDQorICogQG5vdGUgSXQgaXMgcG9zc2libGUgdGhhdCB0cmFuc21pdCBwcm9jZWR1cmUgaXMgaW50ZXJydXB0ZWQgYW5kDQorICogICAgICAgQHNhIG5yZl9kcnZfcmFkaW84MDIxNTRfdHJhbnNtaXR0ZWQgd29uJ3QgYmUgY2FsbGVkLg0KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHZlcnkgc2hvcnQgdG8gcHJldmVudCBkcm9wcGluZyBmcmFtZXMgYnkgdGhlIGRyaXZlci4NCisgKi8NCitleHRlcm4gdm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3R4X3N0YXJ0ZWQodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIE5vdGlmeSB0aGF0IGZyYW1lIHdhcyB0cmFuc21pdHRlZC4NCisgKg0KKyAqIEBub3RlIElmIEFDSyB3YXMgcmVxdWVzdGVkIGZvciB0cmFuc21pdHRlZCBmcmFtZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBwcm9wZXIgQUNLIGlzDQorICogICAgICAgcmVjZWl2ZWQuIElmIEFDSyB3YXMgbm90IHJlcXVlc3RlZCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBqdXN0IGFmdGVyIHRyYW5zbWlzc2lvbiBpcw0KKyAqICAgICAgIGVuZGVkLg0KKyAqIEBub3RlIEJ1ZmZlciBwb2ludGVkIGJ5IHRoZSBwX2FjayBwb2ludGVyIGlzIG5vdCBtb2RpZmllZCBieSB0aGUgcmFkaW8gZHJpdmVyIChhbmQgY2FuJ3QNCisgKiAgICAgICBiZSB1c2VkIHRvIHJlY2VpdmUgYSBmcmFtZSkgdW50aWwgbnJmX2Rydl9yYWRpbzgwMjE1NF9idWZmZXJfZnJlZSgpIGZ1bmN0aW9uIGlzIGNhbGxlZC4NCisgKiBAbm90ZSBCdWZmZXIgcG9pbnRlZCBieSB0aGUgcF9hY2sgcG9pbnRlciBtYXkgYmUgbW9kaWZpZWQgYnkgdGhlIGZ1bmN0aW9uIGhhbmRsZXIgKGFuZCBvdGhlcg0KKyAqICAgICAgIG1vZHVsZXMpIHVudGlsIG5yZl9kcnZfcmFkaW84MDIxNTRfYnVmZmVyX2ZyZWUoKSBmdW5jdGlvbiBpcyBjYWxsZWQuDQorICoNCisgKiBAcGFyYW1baW5dICBwX2FjayAgUG9pbnRlciB0byByZWNlaXZlZCBBQ0sgYnVmZmVyLiBGaXN0IGJ5dGUgaW4gdGhlIGJ1ZmZlciBpcyBsZW5ndGggb2YgdGhlDQorICogICAgICAgICAgICAgICAgICAgIGZyYW1lIGFuZCBmb2xsb3dpbmcgYnl0ZXMgYXJlIHRoZSBBQ0sgZnJhbWUgaXRzZWxmIChhZnRlciBQSFIpLg0KKyAqICAgICAgICAgICAgICAgICAgICBJZiBBQ0sgd2FzIG5vdCByZXF1ZXN0ZWQgQHAgcF9hY2sgaXMgc2V0IHRvIE5VTEwuDQorICogQHBhcmFtW2luXSAgcG93ZXIgIFJTU0kgb2YgcmVjZWl2ZWQgZnJhbWUgb3IgMCBpZiBBQ0sgd2FzIG5vdCByZXF1ZXN0ZWQuDQorICogQHBhcmFtW2luXSAgbHFpICAgIExRSSBvZiByZWNlaXZlZCBmcmFtZSBvciAwIGlmIEFDSyB3YXMgbm90IHJlcXVlc3RlZC4NCisgKi8NCitleHRlcm4gdm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3RyYW5zbWl0dGVkKHVpbnQ4X3QgKiBwX2FjaywgaW50OF90IHBvd2VyLCBpbnQ4X3QgbHFpKTsNCisNCisvKioNCisgKiBAYnJpZWYgTm90aWZ5IHRoYXQgZnJhbWUgd2FzIG5vdCB0cmFuc21pdHRlZCBkdWUgdG8gYnVzeSBjaGFubmVsLg0KKyAqDQorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaWYgQ0NBIHByb2NlZHVyZSAocGVyZm9ybWVkIGp1c3QgYmVmb3JlIHRyYW5zbWlzc2lvbikgZmFpbHMuDQorICovDQorZXh0ZXJuIHZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9idXN5X2NoYW5uZWwodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIE5vdGlmeSB0aGF0IEVuZXJneSBEZXRlY3Rpb24gcHJvY2VkdXJlIGZpbmlzaGVkLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmVzdWx0ICBNYXhpbXVtIGVuZXJneSBkZXRlY3RlZCBkdXJpbmcgRW5lcmd5IERldGVjdGlvbiBwcm9jZWR1cmUuDQorICovDQorZXh0ZXJuIHZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9lbmVyZ3lfZGV0ZWN0ZWQoaW50OF90IHJlc3VsdCk7DQorDQorDQorLyoqDQorICogQHNlY3Rpb24gRHJpdmVyIG1lbW9yeSBtYW5hZ2VtZW50DQorICovDQorDQorLyoqDQorICogQGJyaWVmIE5vdGlmeSBkcml2ZXIgdGhhdCBidWZmZXIgY29udGFpbmluZyByZWNlaXZlZCBmcmFtZSBpcyBub3QgdXNlZCBhbnltb3JlLg0KKyAqDQorICogQG5vdGUgVGhlIGJ1ZmZlciBwb2ludGVkIGJ5IHRoZSBAcCBwX2RhdGEgcG9pbnRlciBtYXkgYmUgbW9kaWZpZWQgYnkgdGhpcyBmdW5jdGlvbi4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfZGF0YSAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgY29udGFpbmluZyByZWNlaXZlZCBkYXRhIHRoYXQgaXMgbm8gbW9yZSBuZWVkZWQgYnkNCisgKiAgICAgICAgICAgICAgICAgICAgIHRoZSBoaWdoZXIgbGF5ZXIuDQorICovDQordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2J1ZmZlcl9mcmVlKHVpbnQ4X3QgKiBwX2RhdGEpOw0KKw0KKw0KKy8qKg0KKyAqIEBzZWN0aW9uIFJTU0kgbWVhc3VyZW1lbnQgZnVuY3Rpb24uDQorICovDQorDQorLyoqDQorICogQGJyaWVmIEJlZ2luIFJTU0kgbWVhc3VyZW1lbnQuDQorICoNCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgaW4gUmVjZWl2ZSBzdGF0ZS4NCisgKg0KKyAqIEJlZ2luIFJTU0kgbWVhc3VyZW1lbnQuIFRoZSByZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gOCB1Uy4gVGhlIHJlc3VsdCBjYW4gYmUgcmVhZCBieQ0KKyAqIG5yZl9yYWRpbzgwMjE1NF9yc3NpX2xhc3RfZ2V0KCkgZnVuY3Rpb24uDQorICovDQordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3Jzc2lfbWVhc3VyZSh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgR2V0IHJlc3VsdCBvZiBsYXN0IFJTU0kgbWVhc3VyZW1lbnQuDQorICoNCisgKiBAcmV0dXJucyBSU1NJIG1lYXN1cmVtZW50IHJlc3VsdCBbZEJtXS4NCisgKi8NCitpbnQ4X3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9yc3NpX2xhc3RfZ2V0KHZvaWQpOw0KKw0KKw0KKy8qKg0KKyAqIEBzZWN0aW9uIFByb21pc2N1b3VzIG1vZGUuDQorICovDQorDQorLyoqDQorICogQGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIHByb21pc2N1b3VzIHJhZGlvIG1vZGUuDQorICoNCisgKiBAbm90ZSBQcm9taXNjdW91cyBtb2RlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuDQorICoNCisgKiBJbiBwcm9taXNjdW91cyBtb2RlIGRyaXZlciBub3RpZmllcyBoaWdoZXIgbGF5ZXIgdGhhdCBpdCByZWNlaXZlZCBhbnkgZnJhbWUgKHJlZ2FyZGxlc3MNCisgKiBmcmFtZSB0eXBlIG9yIGRlc3RpbmF0aW9uIGFkZHJlc3MpLg0KKyAqIEluIG5vcm1hbCBtb2RlIChub3QgcHJvbWlzY3VvdXMpIGhpZ2hlciBsYXllciBpcyBub3Qgbm90aWZpZWQgYWJvdXQgQUNLIGZyYW1lcyBhbmQgZnJhbWVzIHdpdGgNCisgKiB1bmtub3duIHR5cGUuIEFsc28gZnJhbWVzIHdpdGggZGVzdGluYXRpb24gYWRkcmVzcyBub3QgbWF0Y2hpbmcgdGhpcyBkZXZpY2UgYWRkcmVzcyBhcmUgaWdub3JlZC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGVuYWJsZWQgIElmIHByb21pc2N1b3VzIG1vZGUgc2hvdWxkIGJlIGVuYWJsZWQuDQorICovDQordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3Byb21pc2N1b3VzX3NldChib29sIGVuYWJsZWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBDaGVjayBpZiByYWRpbyBpcyBpbiBwcm9taXNjdW91cyBtb2RlLg0KKyAqDQorICogQHJldHZhbCBUcnVlICAgUmFkaW8gaXMgaW4gcHJvbWlzY3VvdXMgbW9kZS4NCisgKiBAcmV0dmFsIEZhbHNlICBSYWRpbyBpcyBub3QgaW4gcHJvbWlzY3VvdXMgbW9kZS4NCisgKi8NCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcHJvbWlzY3VvdXNfZ2V0KHZvaWQpOw0KKw0KKw0KKy8qKg0KKyAqIEBzZWN0aW9uIEF1dG8gQUNLIG1hbmFnZW1lbnQuDQorICovDQorDQorLyoqDQorICogQGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIGF1dG8gQUNLIHByb2NlZHVyZS4NCisgKg0KKyAqIEBub3RlIEF1dG8gQUNLIHByb2NlZHVyZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuDQorICoNCisgKiBJZiBhdXRvIEFDSyBwcm9jZWR1cmUgaXMgZW5hYmxlZCB0aGUgZHJpdmVyIHByZXBhcmVzIGFuZCBzZW5kcyBBQ0sgZnJhbWVzIGF1dG9tYXRpY2FsbHkNCisgKiBhVHVybmFyb3VuZFRpbWUgKDE5MiB1cykgYWZ0ZXIgcHJvcGVyIGZyYW1lIGlzIHJlY2VpdmVkLiBUaGUgZHJpdmVyIHNldHMgc2VxdWVuY2UgbnVtYmVyIGluDQorICogdGhlIEFDSyBmcmFtZSBhbmQgcGVuZGluZyBiaXQgYWNjb3JkaW5nIHRvIGF1dG8gcGVuZGluZyBiaXQgZmVhdHVyZSBzZXR0aW5ncy4gV2hlbiBhdXRvIEFDSw0KKyAqIHByb2NlZHVyZSBpcyBlbmFibGVkIHRoZSBkcml2ZXIgbm90aWZpZXMgdGhlIG5leHQgaGlnaGVyIGxheWVyIGFib3V0IHJlY2VpdmVkIGZyYW1lIGFmdGVyIEFDSw0KKyAqIGZyYW1lIGlzIHRyYW5zbWl0dGVkLg0KKyAqIElmIGF1dG8gQUNLIHByb2NlZHVyZSBpcyBkaXNhYmxlZCB0aGUgZHJpdmVyIGRvZXMgbm90IHRyYW5zbWl0IEFDSyBmcmFtZXMuIEl0IG5vdGlmaWVzIHRoZSBuZXh0DQorICogaGlnaGVyIGxheWVyIGFib3V0IHJlY2VpdmVkIGZyYW1lIHdoZW4gYSBmcmFtZSBpcyByZWNlaXZlZC4gSW4gdGhpcyBtb2RlIHRoZSBuZXh0IGhpZ2hlciBsYXllcg0KKyAqIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIEFDSyBmcmFtZS4gQUNLIGZyYW1lcyBzaG91bGQgYmUgc2VudCB1c2luZw0KKyAqIG5yZl9kcnZfcmFkaW84MDIxNTRfdHJhbnNtaXQoKSBmdW5jdGlvbi4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGVuYWJsZWQgIElmIGF1dG8gQUNLIHByb2NlZHVyZSBzaG91bGQgYmUgZW5hYmxlZC4NCisgKi8NCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfYXV0b19hY2tfc2V0KGJvb2wgZW5hYmxlZCk7DQorDQorLyoqDQorICogQGJyaWVmIENoZWNrIGlmIGF1dG8gQUNLIHByb2NlZHVyZSBpcyBlbmFibGVkLg0KKyAqDQorICogQHJldHZhbCBUcnVlICAgQXV0byBBQ0sgcHJvY2VkdXJlIGlzIGVuYWJsZWQuDQorICogQHJldHZhbCBGYWxzZSAgQXV0byBBQ0sgcHJvY2VkdXJlIGlzIGRpc2FibGVkLg0KKyAqLw0KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9hdXRvX2Fja19nZXQodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIHNldHRpbmcgcGVuZGluZyBiaXQgaW4gYXV0b21hdGljYWxseSB0cmFuc21pdHRlZCBBQ0sgZnJhbWVzLg0KKyAqDQorICogQG5vdGUgU2V0dGluZyBwZW5kaW5nIGJpdCBpbiBhdXRvbWF0aWNhbGx5IHRyYW5zbWl0dGVkIEFDSyBmcmFtZXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0Lg0KKyAqDQorICogUmFkaW8gZHJpdmVyIGF1dG9tYXRpY2FsbHkgc2VuZHMgQUNLIGZyYW1lcyBpbiByZXNwb25zZSB0byB1bmljYXN0IGZyYW1lcyBkZXN0aW5lZCB0byB0aGlzIG5vZGUuDQorICogUGVuZGluZyBiaXQgaW4gQUNLIGZyYW1lIGNhbiBiZSBzZXQgb3IgY2xlYXJlZCByZWdhcmRpbmcgZGF0YSBpbiBwZW5kaW5nIGJ1ZmZlciBkZXN0aW5lZCB0byBBQ0sNCisgKiBkZXN0aW5hdGlvbi4NCisgKg0KKyAqIElmIHNldHRpbmcgcGVuZGluZyBiaXQgaW4gQUNLIGZyYW1lcyBpcyBkaXNhYmxlZCwgcGVuZGluZyBiaXQgaW4gZXZlcnkgQUNLIGZyYW1lIGlzIHNldC4NCisgKiBJZiBzZXR0aW5nIHBlbmRpbmcgYml0IGluIEFDSyBmcmFtZXMgaXMgZW5hYmxlZCwgcmFkaW8gZHJpdmVyIGNoZWNrcyBpZiB0aGVyZSBpcyBkYXRhDQorICogaW4gcGVuZGluZyBidWZmZXIgZGVzdGluZWQgdG8gQUNLIGRlc3RpbmF0aW9uLiBJZiB0aGVyZSBpcyBubyBzdWNoIGRhdGEsIHBlbmRpbmcgYml0IGlzIGNsZWFyZWQuDQorICoNCisgKiBAbm90ZSBJdCBpcyBwb3NzaWJsZSB0aGF0IGlmIHRoZXJlIGlzIGEgbG90IG9mIHN1cHBvcnRlZCBwZWVycyByYWRpbyBkcml2ZXIgY2Fubm90IHZlcmlmeQ0KKyAqICAgICAgIGlmIHRoZXJlIGlzIHBlbmRpbmcgZGF0YSBiZWZvcmUgQUNLIGlzIHNlbnQuIEluIHRoaXMgY2FzZSBwZW5kaW5nIGJpdCBpcyBzZXQuDQorICoNCisgKiBAcGFyYW1baW5dICBlbmFibGVkICBJZiBzZXR0aW5nIHBlbmRpbmcgYml0IGluIEFDSyBmcmFtZXMgaXMgZW5hYmxlZC4NCisgKi8NCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfYXV0b19wZW5kaW5nX2JpdF9zZXQoYm9vbCBlbmFibGVkKTsNCisNCisvKioNCisgKiBAYnJpZWYgQWRkIGFkZHJlc3Mgb2YgcGVlciBub2RlIGZvciB3aGljaCB0aGVyZSBpcyBwZW5kaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlci4NCisgKg0KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gbWFrZXMgYSBjb3B5IG9mIGdpdmVuIGFkZHJlc3MuDQorICoNCisgKiBAcGFyYW1baW5dICBwX2FkZHIgICAgQXJyYXkgb2YgYnl0ZXMgY29udGFpbmluZyBhZGRyZXNzIG9mIHRoZSBub2RlIChsaXR0bGUtZW5kaWFuKS4NCisgKiBAcGFyYW1baW5dICBleHRlbmRlZCAgSWYgZ2l2ZW4gYWRkcmVzcyBpcyBFeHRlbmRlZCBNQUMgQWRkcmVzcyBvciBTaG9ydCBNQUMgQWRkcmVzcy4NCisgKg0KKyAqIEByZXR2YWwgVHJ1ZSAgIEFkZHJlc3Mgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBsaXN0Lg0KKyAqIEByZXR2YWwgRmFsc2UgIFRoZXJlIGlzIG5vdCBlbm91Z2ggbWVtb3J5IHRvIHN0b3JlIHRoaXMgYWRkcmVzcyBpbiB0aGUgbGlzdC4NCisgKi8NCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcGVuZGluZ19iaXRfZm9yX2FkZHJfc2V0KGNvbnN0IHVpbnQ4X3QgKnBfYWRkciwgYm9vbCBleHRlbmRlZCk7DQorDQorLyoqDQorICogQGJyaWVmIFJlbW92ZSBhZGRyZXNzIG9mIHBlZXIgbm9kZSBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gbW9yZSBwZW5kaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlci4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfYWRkciAgICBBcnJheSBvZiBieXRlcyBjb250YWluaW5nIGFkZHJlc3Mgb2YgdGhlIG5vZGUgKGxpdHRsZS1lbmRpYW4pLg0KKyAqIEBwYXJhbVtpbl0gIGV4dGVuZGVkICBJZiBnaXZlbiBhZGRyZXNzIGlzIEV4dGVuZGVkIE1BQyBBZGRyZXNzIG9yIFNob3J0IE1BQyBBZGRyZXNzLg0KKyAqDQorICogQHJldHZhbCBUcnVlICAgQWRkcmVzcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0Lg0KKyAqIEByZXR2YWwgRmFsc2UgIFRoZXJlIGlzIG5vIHN1Y2ggYWRkcmVzcyBpbiB0aGUgbGlzdC4NCisgKi8NCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcGVuZGluZ19iaXRfZm9yX2FkZHJfY2xlYXIoY29uc3QgdWludDhfdCAqcF9hZGRyLCBib29sIGV4dGVuZGVkKTsNCisNCisvKioNCisgKiBAYnJpZWYgUmVtb3ZlIGFsbCBhZGRyZXNzZXMgb2YgZ2l2ZW4gdHlwZSBmcm9tIHBlbmRpbmcgYml0IGxpc3QuDQorICoNCisgKiBAcGFyYW1baW5dICBleHRlbmRlZCAgSWYgZnVuY3Rpb24gc2hvdWxkIHJlbW92ZSBhbGwgRXhudGVkZWQgTUFDIEFkcmVzc2VzIG9mIGFsbCBTaG9ydCBBZGRyZXNzZXMuDQorICovDQordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3BlbmRpbmdfYml0X2Zvcl9hZGRyX3Jlc2V0KGJvb2wgZXh0ZW5kZWQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogTlJGX0RSVl9SQURJTzgwMjE1NF9IXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdC5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjNTllMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdC5jCkBAIC0wLDAgKzEsMjM4IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHByb2NlZHVyZXMgdG8gc2V0IHBlbmRpbmcgYml0IGluIG5SRiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdC5oIgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9jb25maWcuaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2NvbnN0LmgiCisKKyNpbmNsdWRlICJoYWwvbnJmX3JhZGlvLmgiCisKKy8vLyBNYXhpbXVtIG51bWJlciBvZiBTaG9ydCBBZGRyZXNzZXMgb2Ygbm9kZXMgZm9yIHdoaWNoIHRoZXJlIGlzIHBlbmRpbmcgZGF0YSBpbiBidWZmZXIuCisjZGVmaW5lIE5VTV9QRU5ESU5HX1NIT1JUX0FERFJFU1NFUyAgICAgUkFESU9fUEVORElOR19TSE9SVF9BRERSRVNTRVMKKy8vLyBNYXhpbXVtIG51bWJlciBvZiBFeHRlbmRlZCBBZGRyZXNzZXMgb2Ygbm9kZXMgZm9yIHdoaWNoIHRoZXJlIGlzIHBlbmRpbmcgZGF0YSBpbiBidWZmZXIuCisjZGVmaW5lIE5VTV9QRU5ESU5HX0VYVEVOREVEX0FERFJFU1NFUyAgUkFESU9fUEVORElOR19FWFRFTkRFRF9BRERSRVNTRVMKKy8vLyBWYWx1ZSB1c2VkIHRvIG1hcmsgU2hvcnQgQWRkcmVzcyBhcyB1bnVzZWQuCisjZGVmaW5lIFVOVVNFRF9QRU5ESU5HX1NIT1JUX0FERFJFU1MgICAgKCh1aW50OF90IFtTSE9SVF9BRERSRVNTX1NJWkVdKSB7MHhmZiwgMHhmZn0pCisvLy8gVmFsdWUgdXNlZCB0byBtYXJrIEV4dGVuZGVkIEFkZHJlc3MgYXMgdW51c2VkLgorI2RlZmluZSBVTlVTRURfUEVORElOR19FWFRFTkRFRF9BRERSRVNTICgodWludDhfdCBbRVhURU5ERURfQUREUkVTU19TSVpFXSkgezB9KQorCisvLy8gSWYgcGVuZGluZyBiaXQgaW4gQUNLIGZyYW1lIHNob3VsZCBiZSBzZXQgdG8gdmFsaWQgb3IgZGVmYXVsdCB2YWx1ZS4KK3N0YXRpYyBib29sIG1fc2V0dGluZ19wZW5kaW5nX2JpdF9lbmFibGVkOworLy8vIEFycmF5IG9mIFNob3J0IEFkZHJlc3NlcyBvZiBub2RlcyBmb3Igd2hpY2ggdGhlcmUgaXMgcGVuZGluZyBkYXRhIGluIHRoZSBidWZmZXIuCitzdGF0aWMgdWludDhfdCBtX3BlbmRpbmdfc2hvcnRbTlVNX1BFTkRJTkdfU0hPUlRfQUREUkVTU0VTXVtTSE9SVF9BRERSRVNTX1NJWkVdOworLy8vIEFycmF5IG9mIEV4dGVuZGVkIEFkZHJlc3NlcyBvZiBub2RlcyBmb3Igd2hpY2ggdGhlcmUgaXMgcGVuZGluZyBkYXRhIGluIHRoZSBidWZmZXIuCitzdGF0aWMgdWludDhfdCBtX3BlbmRpbmdfZXh0ZW5kZWRbTlVNX1BFTkRJTkdfRVhURU5ERURfQUREUkVTU0VTXVtFWFRFTkRFRF9BRERSRVNTX1NJWkVdOworCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X2luaXQodm9pZCkKK3sKKyAgICBtZW1zZXQobV9wZW5kaW5nX2V4dGVuZGVkLCAwLCBzaXplb2YobV9wZW5kaW5nX2V4dGVuZGVkKSk7CisgICAgbWVtc2V0KG1fcGVuZGluZ19zaG9ydCwgMHhmZiwgc2l6ZW9mKG1fcGVuZGluZ19zaG9ydCkpOworICAgIG1fc2V0dGluZ19wZW5kaW5nX2JpdF9lbmFibGVkID0gdHJ1ZTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdF9zZXQoYm9vbCBlbmFibGVkKQoreworICAgIG1fc2V0dGluZ19wZW5kaW5nX2JpdF9lbmFibGVkID0gZW5hYmxlZDsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdF9mb3JfYWRkcl9zZXQoY29uc3QgdWludDhfdCAqIHBfYWRkciwgYm9vbCBleHRlbmRlZCkKK3sKKyAgICB1aW50OF90ICogcF9lbXB0eV9zbG90ID0gTlVMTDsKKworICAgIGlmIChleHRlbmRlZCkKKyAgICB7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBOVU1fUEVORElOR19FWFRFTkRFRF9BRERSRVNTRVM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKDAgPT0gbWVtY21wKG1fcGVuZGluZ19leHRlbmRlZFtpXSwgcF9hZGRyLCBzaXplb2YobV9wZW5kaW5nX2V4dGVuZGVkW2ldKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgwID09IG1lbWNtcChtX3BlbmRpbmdfZXh0ZW5kZWRbaV0sIFVOVVNFRF9QRU5ESU5HX0VYVEVOREVEX0FERFJFU1MsIHNpemVvZihtX3BlbmRpbmdfZXh0ZW5kZWRbaV0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwX2VtcHR5X3Nsb3QgPSBtX3BlbmRpbmdfZXh0ZW5kZWRbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocF9lbXB0eV9zbG90ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShwX2VtcHR5X3Nsb3QsIHBfYWRkciwgRVhURU5ERURfQUREUkVTU19TSVpFKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBOVU1fUEVORElOR19TSE9SVF9BRERSRVNTRVM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKDAgPT0gbWVtY21wKG1fcGVuZGluZ19zaG9ydFtpXSwgcF9hZGRyLCBzaXplb2YobV9wZW5kaW5nX3Nob3J0W2ldKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgwID09IG1lbWNtcChtX3BlbmRpbmdfc2hvcnRbaV0sIFVOVVNFRF9QRU5ESU5HX1NIT1JUX0FERFJFU1MsIHNpemVvZihtX3BlbmRpbmdfc2hvcnRbaV0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwX2VtcHR5X3Nsb3QgPSBtX3BlbmRpbmdfc2hvcnRbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocF9lbXB0eV9zbG90ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShwX2VtcHR5X3Nsb3QsIHBfYWRkciwgU0hPUlRfQUREUkVTU19TSVpFKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X2Zvcl9hZGRyX2NsZWFyKGNvbnN0IHVpbnQ4X3QgKiBwX2FkZHIsIGJvb2wgZXh0ZW5kZWQpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKworICAgIGlmIChleHRlbmRlZCkKKyAgICB7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBOVU1fUEVORElOR19FWFRFTkRFRF9BRERSRVNTRVM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKDAgPT0gbWVtY21wKG1fcGVuZGluZ19leHRlbmRlZFtpXSwgcF9hZGRyLCBzaXplb2YobV9wZW5kaW5nX2V4dGVuZGVkW2ldKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWVtc2V0KG1fcGVuZGluZ19leHRlbmRlZFtpXSwgMCwgc2l6ZW9mKG1fcGVuZGluZ19leHRlbmRlZFtpXSkpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IE5VTV9QRU5ESU5HX1NIT1JUX0FERFJFU1NFUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoMCA9PSBtZW1jbXAobV9wZW5kaW5nX3Nob3J0W2ldLCBwX2FkZHIsIHNpemVvZihtX3BlbmRpbmdfc2hvcnRbaV0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZW1zZXQobV9wZW5kaW5nX3Nob3J0W2ldLCAweGZmLCBzaXplb2YobV9wZW5kaW5nX3Nob3J0W2ldKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfZm9yX2FkZHJfcmVzZXQoYm9vbCBleHRlbmRlZCkKK3sKKyAgICBpZiAoZXh0ZW5kZWQpCisgICAgeworICAgICAgICBtZW1zZXQobV9wZW5kaW5nX2V4dGVuZGVkLCAwLCBzaXplb2YobV9wZW5kaW5nX2V4dGVuZGVkKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1lbXNldChtX3BlbmRpbmdfc2hvcnQsIDB4ZmYsIHNpemVvZihtX3BlbmRpbmdfc2hvcnQpKTsKKyAgICB9Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfc2hvdWxkX2JlX3NldChjb25zdCB1aW50OF90ICogcF9wc2R1KQoreworICAgIGNvbnN0IHVpbnQ4X3QgKiBwX3NyY19hZGRyOworICAgIHVpbnQzMl90ICAgICAgICBpOworCisgICAgLy8gSWYgYXV0b21hdGljIHNldHRpbmcgb2YgcGVuZGluZyBiaXQgaW4gQUNLIGZyYW1lcyBpcyBkaXNhYmxlZCB0aGUgcGVuZGluZyBiaXQgaXMgYWx3YXlzIHNldC4KKyAgICBpZiAoIW1fc2V0dGluZ19wZW5kaW5nX2JpdF9lbmFibGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3dpdGNoIChwX3BzZHVbREVTVF9BRERSX1RZUEVfT0ZGU0VUXSAmIERFU1RfQUREUl9UWVBFX01BU0spCisgICAgeworICAgICAgICBjYXNlIERFU1RfQUREUl9UWVBFX1NIT1JUOgorICAgICAgICAgICAgcF9zcmNfYWRkciA9ICZwX3BzZHVbU1JDX0FERFJfT0ZGU0VUX1NIT1JUX0RTVF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERFU1RfQUREUl9UWVBFX0VYVEVOREVEOgorICAgICAgICAgICAgcF9zcmNfYWRkciA9ICZwX3BzZHVbU1JDX0FERFJfT0ZGU0VUX0VYVEVOREVEX0RTVF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKDAgPT0gKHBfcHNkdVtQQU5fSURfQ09NUFJfT0ZGU0VUXSAmIFBBTl9JRF9DT01QUl9NQVNLKSkKKyAgICB7CisgICAgICAgIHBfc3JjX2FkZHIgKz0gMjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHBfcHNkdVtTUkNfQUREUl9UWVBFX09GRlNFVF0gJiBTUkNfQUREUl9UWVBFX01BU0spCisgICAgeworICAgICAgICBjYXNlIFNSQ19BRERSX1RZUEVfU0hPUlQ6CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX1BFTkRJTkdfU0hPUlRfQUREUkVTU0VTOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5yZl9yYWRpb19zdGF0ZV9nZXQoKSAhPSBOUkZfUkFESU9fU1RBVEVfVFhfUlUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoMCA9PSBtZW1jbXAocF9zcmNfYWRkciwgbV9wZW5kaW5nX3Nob3J0W2ldLCBzaXplb2YobV9wZW5kaW5nX3Nob3J0W2ldKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JDX0FERFJfVFlQRV9FWFRFTkRFRDoKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fUEVORElOR19FWFRFTkRFRF9BRERSRVNTRVM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobnJmX3JhZGlvX3N0YXRlX2dldCgpICE9IE5SRl9SQURJT19TVEFURV9UWF9SVSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgwID09IG1lbWNtcChwX3NyY19hZGRyLCBtX3BlbmRpbmdfZXh0ZW5kZWRbaV0sIHNpemVvZihtX3BlbmRpbmdfZXh0ZW5kZWRbaV0pKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0LmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGU1MzFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0LmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGJyaWVmIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHByb2NlZHVyZXMgdG8gc2V0IHBlbmRpbmcgYml0IGluIG5SRiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuCisgKgorICovCisKKyNpZm5kZWYgTlJGX0RSVl9SQURJTzgwMjE1NF9BQ0tfUEVORElOR19CSVRfSF8KKyNkZWZpbmUgTlJGX0RSVl9SQURJTzgwMjE1NF9BQ0tfUEVORElOR19CSVRfSF8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBicmllZiBJbml0aWFsaXplIHRoaXMgbW9kdWxlLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X2luaXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIHByb2NlZHVyZSBvZiBzZXR0aW5nIHBlbmRpbmcgYml0IGluIEFDSyBmcmFtZS4KKyAqCisgKiBAcGFyYW1baW5dICBlbmFibGVkICBUcnVlIGlmIHByb2NlZHVyZSBzaG91bGQgYmUgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X3NldChib29sIGVuYWJsZWQpOworCisvKioKKyAqIEBicmllZiBBZGQgYWRkcmVzcyB0byBBQ0sgcGVuZGluZyBiaXQgbGlzdC4KKyAqCisgKiBBQ0sgZnJhbWVzIHNlbnQgaW4gcmVzcG9uc2UgdG8gZnJhbWVzIHdpdGggc291cmNlIGFkZHJlc3MgbWF0Y2hpbmcgYW55IGFkZHJlc3MgZnJvbSBBQ0sgcGVuZGluZworICogYml0IGxpc3Qgd2lsbCBoYXZlIHBlbmRpbmcgYml0IHNldC4gSWYgc291cmNlIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggYW55IG9mIHRoZSBhZGRyZXNzZXMgaW4gdGhlCisgKiBsaXN0IHRoZSBBQ0sgZnJhbWUgd2lsbCBoYXZlIHBlbmRpbmcgYml0IGNsZWFyZWQuCisgKgorICogQHBhcmFtW2luXSAgcF9hZGRyICAgIFBvaW50ZXIgdG8gYWRkcmVzcyB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbGlzdC4KKyAqIEBwYXJhbVtpbl0gIGV4dGVuZGVkICBJbmRpY2F0aW9uIGlmIEBwIHBfYWRkciBpcyBleHRlbmRlZCBvciBzaG9ydCBhZGRyZXNzLgorICoKKyAqIEByZXR2YWwgdHJ1ZSAgIEFkZHJlc3Mgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBsaXN0LgorICogQHJldHZhbCBmYWxzZSAgQWRkcmVzcyB3YXMgbm90IGFkZGVkIHRvIHRoZSBsaXN0IChsaXN0IGlzIGZ1bGwpLgorICovCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X2Zvcl9hZGRyX3NldChjb25zdCB1aW50OF90ICogcF9hZGRyLCBib29sIGV4dGVuZGVkKTsKKworLyoqCisgKiBAYnJpZWYgUmVtb3ZlIGFkZHJlc3MgZnJvbSBBQ0sgcGVuZGluZyBiaXQgbGlzdC4KKyAqCisgKiBBQ0sgZnJhbWVzIHNlbnQgaW4gcmVzcG9uc2UgdG8gZnJhbWVzIHdpdGggc291cmNlIGFkZHJlc3MgbWF0Y2hpbmcgYW55IGFkZHJlc3MgZnJvbSBBQ0sgcGVuZGluZworICogYml0IGxpc3Qgd2lsbCBoYXZlIHBlbmRpbmcgYml0IHNldC4gSWYgc291cmNlIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggYW55IG9mIHRoZSBhZGRyZXNzZXMgaW4gdGhlCisgKiBsaXN0IHRoZSBBQ0sgZnJhbWUgd2lsbCBoYXZlIHBlbmRpbmcgYml0IGNsZWFyZWQuCisgKgorICogQHBhcmFtW2luXSAgcF9hZGRyICAgIFBvaW50ZXIgdG8gYWRkcmVzcyB0aGF0IHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QuCisgKiBAcGFyYW1baW5dICBleHRlbmRlZCAgSW5kaWNhdGlvbiBpZiBAcCBwX2FkZHIgaXMgZXh0ZW5kZWQgb3Igc2hvcnQgYWRkcmVzcy4KKyAqCisgKiBAcmV0dmFsIHRydWUgICBBZGRyZXNzIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20gdGhlIGxpc3QuCisgKiBAcmV0dmFsIGZhbHNlICBBZGRyZXNzIHdhcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IChhZGRyZXNzIGlzIG1pc3NpbmcgaW4gdGhlIGxpc3QpLgorICovCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X2Zvcl9hZGRyX2NsZWFyKGNvbnN0IHVpbnQ4X3QgKiBwX2FkZHIsIGJvb2wgZXh0ZW5kZWQpOworCisvKioKKyAqIEBicmllZiBSZW1vdmUgYWxsIGFkZHJlc3NlcyBvZiBnaXZlbiBsZW5ndGggZnJvbSBBQ0sgcGVuZGluZyBiaXQgbGlzdC4KKyAqCisgKiBAcGFyYW1baW5dICBleHRlbmRlZCAgSW5kaWNhdGlvbiBpZiBhbGwgZXh0ZW5kZWQgb3IgYWxsIHNob3J0IGFkZHJlc3NlcyBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3QuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfZm9yX2FkZHJfcmVzZXQoYm9vbCBleHRlbmRlZCk7CisKKy8qKgorICogQGJyaWVmIENoZWNrIGlmIHBlbmRpbmcgYml0IHNob3VsZCBiZSBzZXQgaW4gQUNLIHNlbnQgaW4gcmVzcG9uc2UgdG8gZ2l2ZW4gZnJhbWUuCisgKgorICogQHBhcmFtW2luXSAgcF9wc2R1ICBQU0RVIG9mIGZyYW1lIHRvIHdoaWNoIEFDSyBmcmFtZSBpcyBiZWluZyBwcmVwYXJlZC4KKyAqCisgKiBAcmV0dmFsIHRydWUgICBQZW5kaW5nIGJpdCBzaG91bGQgYmUgc2V0LgorICogQHJldHZhbCBmYWxzZSAgUGVuZGluZyBiaXQgc2hvdWxkIGJlIGNsZWFyZWQuCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfc2hvdWxkX2JlX3NldChjb25zdCB1aW50OF90ICogcF9wc2R1KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5SRl9EUlZfUkFESU84MDIxNTRfQUNLX1BFTkRJTkdfQklUX0hfICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2NvbmZpZy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjMGFjZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2NvbmZpZy5oCkBAIC0wLDAgKzEsMTQwIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIE5SRl9EUklWRVJfUkFESU84MDIxNTRfQ09ORklHX0hfXworI2RlZmluZSBOUkZfRFJJVkVSX1JBRElPODAyMTU0X0NPTkZJR19IX18KKworI2luY2x1ZGUgPG5yZi5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGRlZmdyb3VwIG5yZl9kcml2ZXJfcmFkaW84MDIxNTRfY29uZmlnIDgwMi4xNS40IGRyaXZlciBjb25maWd1cmF0aW9uCisgKiBAeworICogQGluZ3JvdXAgbnJmX2RyaXZlcl9yYWRpbzgwMjE1NAorICogQGJyaWVmIENvbmZpZ3VyYXRpb24gb2YgODAyLjE1LjQgcmFkaW8gZHJpdmVyIGZvciBuUkYgU29DLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBSYWRpbyBEcml2ZXIgQ29uZmlndXJhdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQGRlZiBSQURJT19DQ0FfTU9ERQorICoKKyAqIFJBRElPIENDQSBNb2RlLgorICoKKyAqLworI2RlZmluZSBSQURJT19DQ0FfTU9ERSAgTlJGX1JBRElPX0NDQV9NT0RFX0VECisKKy8qKgorICogQGRlZiBSQURJT19DQ0FfRURfVEhSRVNIT0xECisgKgorICogUkFESU8gRW5lcmd5IERldGVjdGlvbiBUaHJlc2hvbGQuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NDQV9FRF9USFJFU0hPTEQgIDB4MkQKKworLyoqCisgKiBAZGVmIFJBRElPX0NDQV9DT1JSX1RIUkVTSE9MRAorICoKKyAqIFJBRElPIENvcnJlbGF0b3IgVGhyZXNob2xkLgorICoKKyAqLworI2RlZmluZSBSQURJT19DQ0FfQ09SUl9USFJFU0hPTEQgIDB4MkQKKworLyoqCisgKiBAZGVmIFJBRElPX0NDQV9DT1JSX0xJTUlUCisgKgorICogUkFESU8gQ29ycmVsYXRvciBsaW1pdC4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fQ0NBX0NPUlJfTElNSVQgIDB4MDIKKworLyoqCisgKiBAZGVmIFJBRElPX0lSUV9QUklPUklUWQorICoKKyAqIFJBRElPIEludGVycnVwdCBwcmlvcml0eS4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fSVJRX1BSSU9SSVRZICAwCisKKy8qKgorICogQGRlZiBSQURJT19QRU5ESU5HX1NIT1JUX0FERFJFU1NFUworICoKKyAqIFJBRElPIE51bWJlciBvZiBzbG90cyBjb250YWluaW5nIHNob3J0IGFkZHJlc3NlcyBvZiBub2RlcyBmb3Igd2hpY2ggcGVuZGluZyBkYXRhIGlzIHN0b3JlZC4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fUEVORElOR19TSE9SVF9BRERSRVNTRVMgIDEwCisKKy8qKgorICogQGRlZiBSQURJT19QRU5ESU5HX0VYVEVOREVEX0FERFJFU1NFUworICoKKyAqIFJBRElPIE51bWJlciBvZiBzbG90cyBjb250YWluaW5nIGV4dGVuZGVkIGFkZHJlc3NlcyBvZiBub2RlcyBmb3Igd2hpY2ggcGVuZGluZyBkYXRhIGlzIHN0b3JlZC4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fUEVORElOR19FWFRFTkRFRF9BRERSRVNTRVMgIDEwCisKKy8qKgorICogQGRlZiBSQURJT19SWF9CVUZGRVJTCisgKgorICogUkFESU8gTnVtYmVyIG9mIGJ1ZmZlcnMgaW4gcmVjZWl2ZSBxdWV1ZS4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fUlhfQlVGRkVSUyAgMTYKKworLyoqCisgKiBAZGVmIFJBRElPX1NIT1JUX0NDQUlETEVfVFhFTgorICoKKyAqIFJBRElPIGNhbiBzdGFydCB0cmFuc21pc3Npb24gdXNpbmcgc2hvcnQgQ0NBSURMRS0+VFhFTiBvciB1c2luZyBzb2Z0d2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fU0hPUlRfQ0NBSURMRV9UWEVOICAxCisKKy8vIFRPRE86ICNpZmRlZiB0byBjaGVjayBkaXJlY3QgLyBTV0kgbm90aWZpY2F0aW9ucworLyoqCisgKiBAZGVmIFJBRElPX05PVElGSUNBVElPTl9TV0lfUFJJT1JJVFkKKyAqCisgKiBQcmlvcml0eSBvZiBzb2Z0d2FyZSBpbnRlcnJ1cHQgdXNlZCB0byBjYWxsIG5vdGlmaWNhdGlvbiBmcm9tIDgwMi4xNS40IGRyaXZlci4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fTk9USUZJQ0FUSU9OX1NXSV9QUklPUklUWSA2CisKKy8qKgorICpAfQorICoqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9DT05GSUdfSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9jb25zdC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY29uc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDBjZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY29uc3QuaApAQCAtMCwwICsxLDc1IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBicmllZiBUaGlzIG1vZHVsZSBjb250YWlucyBjb25zdGFudCB2YWx1ZXMgZGVmaW5pdGlvbnMgdXNlZCBieSBuUkYgODAyLjE1LjQgZHJpdmVyLgorICoKKyAqLworCisjaWZuZGVmIE5SRl9EUlZfUkFESU84MDIxNTRfQ09OU1RfSF8KKyNkZWZpbmUgTlJGX0RSVl9SQURJTzgwMjE1NF9DT05TVF9IXworCisjZGVmaW5lIEFDS19IRUFERVJfV0lUSF9QRU5ESU5HICAgICAgMHgxMiAgLy8vPCBGaXJzdCBieXRlIG9mIEFDSyBmcmFtZSBjb250YWluaW5nIHBlbmRpbmcgYml0CisjZGVmaW5lIEFDS19IRUFERVJfV0lUSE9VVF9QRU5ESU5HICAgMHgwMiAgLy8vPCBGaXJzdCBieXRlIG9mIEFDSyBmcmFtZSB3aXRob3V0IHBlbmRpbmcgYml0CisKKyNkZWZpbmUgQUNLX0xFTkdUSCAgICAgICAgICAgICAgICAgICA1ICAgICAgICAgLy8vPCBMZW5ndGggb2YgQUNLIGZyYW1lCisjZGVmaW5lIEFDS19SRVFVRVNUX0JJVCAgICAgICAgICAgICAgKDEgPDwgNSkgIC8vLzwgQWNrIHJlcXVlc3QgYml0CisjZGVmaW5lIEFDS19SRVFVRVNUX09GRlNFVCAgICAgICAgICAgMSAgICAgICAgIC8vLzwgQnl0ZSBjb250YWluaW5nIEFjayByZXF1ZXN0IGJpdCAoKzEgZm9yIGZyYW1lIGxlbmd0aCBieXRlKQorI2RlZmluZSBERVNUX0FERFJfVFlQRV9FWFRFTkRFRCAgICAgIDB4MGMgICAgICAvLy88IEJpdHMgY29udGFpbmluZyBleHRlbmRlZCBkZXN0aW5hdGlvbiBhZGRyZXNzIHR5cGUKKyNkZWZpbmUgREVTVF9BRERSX1RZUEVfTUFTSyAgICAgICAgICAweDBjICAgICAgLy8vPCBNYXNrIG9mIGJpdHMgY29udGFpbmluZyBkZXN0aW5hdGlvbiBhZGRyZXNzIHR5cGUKKyNkZWZpbmUgREVTVF9BRERSX1RZUEVfT0ZGU0VUICAgICAgICAyICAgICAgICAgLy8vPCBCeXRlIGNvbnRhaW5pbmcgZGVzdGluYXRpb24gYWRkcmVzcyB0eXBlICgrMSBmb3IgZnJhbWUgbGVuZ3RoIGJ5dGUpCisjZGVmaW5lIERFU1RfQUREUl9UWVBFX1NIT1JUICAgICAgICAgMHgwOCAgICAgIC8vLzwgQml0cyBjb250YWluaW5nIHNob3J0IGRlc3RpbmF0aW9uIGFkZHJlc3MgdHlwZQorI2RlZmluZSBERVNUX0FERFJfT0ZGU0VUICAgICAgICAgICAgIDUgICAgICAgICAvLy88IE9mZnNldCBvZiBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIERhdGEgZnJhbWUKKyNkZWZpbmUgRFNOX09GRlNFVCAgICAgICAgICAgICAgICAgICAzICAgICAgICAgLy8vPCBCeXRlIGNvbnRhaW5pbmcgRFNOIHZhbHVlICgrMSBmb3IgZnJhbWUgbGVuZ3RoIGJ5dGUpCisjZGVmaW5lIEZSQU1FX1BFTkRJTkdfQklUICAgICAgICAgICAgKDEgPDwgNCkgIC8vLzwgUGVuZGluZyBiaXQKKyNkZWZpbmUgRlJBTUVfUEVORElOR19PRkZTRVQgICAgICAgICAxICAgICAgICAgLy8vPCBCeXRlIGNvbnRhaW5pbmcgcGVuZGluZyBiaXQgKCsxIGZvciBmcmFtZSBsZW5ndGggYnl0ZSkKKyNkZWZpbmUgRlJBTUVfVFlQRV9BQ0sgICAgICAgICAgICAgICAweDAyICAgICAgLy8vPCBCaXRzIGNvbnRhaW5pbmcgQUNLIGZyYW1lIHR5cGUKKyNkZWZpbmUgRlJBTUVfVFlQRV9CRUFDT04gICAgICAgICAgICAweDAwICAgICAgLy8vPCBCaXRzIGNvbnRhaW5pbmcgQmVhY29uIGZyYW1lIHR5cGUKKyNkZWZpbmUgRlJBTUVfVFlQRV9DT01NQU5EICAgICAgICAgICAweDAzICAgICAgLy8vPCBCaXRzIGNvbnRhaW5pbmcgQ29tbWFuZCBmcmFtZSB0eXBlCisjZGVmaW5lIEZSQU1FX1RZUEVfREFUQSAgICAgICAgICAgICAgMHgwMSAgICAgIC8vLzwgQml0cyBjb250YWluaW5nIERhdGEgZnJhbWUgdHlwZQorI2RlZmluZSBGUkFNRV9UWVBFX01BU0sgICAgICAgICAgICAgIDB4MDcgICAgICAvLy88IE1hc2sgb2YgYml0cyBjb250YWluaW5nIGZyYW1lIHR5cGUKKyNkZWZpbmUgRlJBTUVfVFlQRV9PRkZTRVQgICAgICAgICAgICAxICAgICAgICAgLy8vPCBCeXRlIGNvbnRhaW5pbmcgZnJhbWUgdHlwZSBiaXRzICgrMSBmb3IgZnJhbWUgbGVuZ3RoIGJ5dGUpCisjZGVmaW5lIFBBTl9JRF9DT01QUl9PRkZTRVQgICAgICAgICAgMSAgICAgICAgIC8vLzwgQnl0ZSBjb250YWluaW5nIFBhbiBJZCBjb21wcmVzc2lvbiBiaXQgKCsxIGZvciBmcmFtZSBsZW5ndGggYnl0ZSkKKyNkZWZpbmUgUEFOX0lEX0NPTVBSX01BU0sgICAgICAgICAgICAweDQwICAgICAgLy8vPCBQYW4gSWQgY29tcHJlc3Npb24gYml0CisjZGVmaW5lIFBBTl9JRF9PRkZTRVQgICAgICAgICAgICAgICAgMyAgICAgICAgIC8vLzwgT2Zmc2V0IG9mIFBhbiBJZCBpbiBEYXRhIGZyYW1lCisjZGVmaW5lIFNSQ19BRERSX1RZUEVfRVhURU5ERUQgICAgICAgMHhjMCAgICAgIC8vLzwgQml0cyBjb250YWluaW5nIGV4dGVuZGVkIHNvdXJjZSBhZGRyZXNzIHR5cGUKKyNkZWZpbmUgU1JDX0FERFJfVFlQRV9NQVNLICAgICAgICAgICAweGMwICAgICAgLy8vPCBNYXNrIG9mIGJpdHMgY29udGFpbmluZyBzb3VyY2UgYWRkcmVzcyB0eXBlCisjZGVmaW5lIFNSQ19BRERSX1RZUEVfT0ZGU0VUICAgICAgICAgMiAgICAgICAgIC8vLzwgQnl0ZSBjb250YWluaW5nIHNvdXJjZSBhZGRyZXNzIHR5cGUgKCsxIGZvciBmcmFtZSBsZW5ndGggYnl0ZSkKKyNkZWZpbmUgU1JDX0FERFJfVFlQRV9TSE9SVCAgICAgICAgICAweDgwICAgICAgLy8vPCBCaXRzIGNvbnRhaW5pbmcgc2hvcnQgc291cmNlIGFkZHJlc3MgdHlwZQorI2RlZmluZSBTUkNfQUREUl9PRkZTRVRfU0hPUlRfRFNUICAgIDggICAgICAgICAvLy88IE9mZnNldCBvZiBzb3VyY2UgYWRkcmVzcyBpbiBEYXRhIGZyYW1lIGlmIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgc2hvcnQKKyNkZWZpbmUgU1JDX0FERFJfT0ZGU0VUX0VYVEVOREVEX0RTVCAxNCAgICAgICAgLy8vPCBPZmZzZXQgb2Ygc291cmNlIGFkZHJlc3MgaW4gRGF0YSBmcmFtZSBpZiBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIGV4dGVuZGVkCisKKyNkZWZpbmUgUEFOX0lEX1NJWkUgICAgICAgICAgIDIgICAgLy8vPCBTaXplIG9mIFBhbiBJZAorI2RlZmluZSBTSE9SVF9BRERSRVNTX1NJWkUgICAgMiAgICAvLy88IFNpemUgb2YgU2hvcnQgTWFjIEFkZHJlc3MKKyNkZWZpbmUgRVhURU5ERURfQUREUkVTU19TSVpFIDggICAgLy8vPCBTaXplIG9mIEV4dGVuZGVkIE1hYyBBZGRyZXNzCisjZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAgICAgICAxMjcgIC8vLzwgTWF4aW1hbCBzaXplIG9mIHJhZGlvIHBhY2tldAorCisKKyNlbmRpZiAvLyBOUkRfRFJWX1JBRElPODAyMTU0X0NPTlNUX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uLmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEwMWMxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb24uYwpAQCAtMCwwICsxLDExOSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBjcml0aWNhbCBzZWN0aW9ucyB1c2VkIHdpdGggcmVxdWVzdHMgYnkgODAyLjE1LjQgZHJpdmVyLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfZGVidWcuaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbS5oIgorI2luY2x1ZGUgImhhbC9ucmZfcmFkaW8uaCIKKyNpbmNsdWRlICJyYWFsL25yZl9yYWFsX2FwaS5oIgorCisjaW5jbHVkZSA8Y21zaXMvY29yZV9jbUZ1bmMuaD4KKworI2lmIFJBQUxfU09GVERFVklDRQorLy8gV2hlbiBTb2Z0ZGV2aWNlIGlzIHNlbGVjdGVkIGFzIGFyYml0ZXIgY3JpdGljYWwgc2VjdGlvbnMgc2hvdWxkIG5vdCBiZSBuZXN0ZWQuCisjZGVmaW5lIFBSRVZFTlRfTkVTVEVEX0NSSVRfU0VDVElPTlMgMQorI2VuZGlmIC8vIFJBQUxfU09GVERFVklDRQorCisjaWYgUFJFVkVOVF9ORVNURURfQ1JJVF9TRUNUSU9OUworLy8vIEZsYWcgaW5kaWNhdGluZyBpZiB0aGUgZHJpdmVyIGVudGVyZWQgY3JpdGljYWwgc2VjdGlvbi4KK3N0YXRpYyB2b2xhdGlsZSBib29sIG1faW5fY3JpdGljYWxfc2VjdGlvbjsKKyNlbmRpZiAvLyBQUkVWRU5UX05FU1RFRF9DUklUX1NFQ1RJT05TCisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX0NSSVRfU0VDVF9FTlRFUik7CisgICAgcmFkaW9fc3RhdGVfdCBzdGF0ZTsKKworI2lmIFBSRVZFTlRfTkVTVEVEX0NSSVRfU0VDVElPTlMKKyAgICBfX2Rpc2FibGVfaXJxKCk7CisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworCisgICAgYXNzZXJ0KCFtX2luX2NyaXRpY2FsX3NlY3Rpb24pOworICAgIG1faW5fY3JpdGljYWxfc2VjdGlvbiA9IHRydWU7CisjZW5kaWYgLy8gUFJFVkVOVF9ORVNURURfQ1JJVF9TRUNUSU9OUworCisgICAgbnJmX3JhYWxfY3JpdGljYWxfc2VjdGlvbl9lbnRlcigpOworCisgICAgc3RhdGUgPSBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9zdGF0ZV9nZXQoKTsKKworICAgIGlmIChzdGF0ZSAhPSBSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UICYmCisgICAgICAgIHN0YXRlICE9IFJBRElPX1NUQVRFX1NMRUVQKQorICAgIHsKKyAgICAgICAgTlZJQ19EaXNhYmxlSVJRKFJBRElPX0lSUW4pOworI2lmICFSQUFMX1NPRlRERVZJQ0UKKyAgICAgICAgX19EU0IoKTsKKyAgICAgICAgX19JU0IoKTsKKyNlbmRpZiAvLyAhUkFBTF9TT0ZUREVWSUNFCisgICAgfQorCisjaWYgUFJFVkVOVF9ORVNURURfQ1JJVF9TRUNUSU9OUworICAgIF9fZW5hYmxlX2lycSgpOworI2VuZGlmIC8vIFBSRVZFTlRfTkVTVEVEX0NSSVRfU0VDVElPTlMKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX0NSSVRfU0VDVF9FTlRFUik7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2V4aXQodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fQ1JJVF9TRUNUX0VYSVQpOworCisjaWYgUFJFVkVOVF9ORVNURURfQ1JJVF9TRUNUSU9OUworICAgIGFzc2VydChtX2luX2NyaXRpY2FsX3NlY3Rpb24pOworICAgIG1faW5fY3JpdGljYWxfc2VjdGlvbiA9IGZhbHNlOworI2VuZGlmIC8vIFBSRVZFTlRfTkVTVEVEX0NSSVRfU0VDVElPTlMKKworICAgIHJhZGlvX3N0YXRlX3Qgc3RhdGU7CisKKyAgICAvLyBSQUFMIGNyaXRpY2FsIHNlY3Rpb24gc2hhbGwgYmUgZXhpdGVkIGJlZm9yZSBSQURJTyBJUlEgaGFuZGxlciBpcyBlbmFibGVkLiBJbiBvdGhlciBjYXNlCisgICAgLy8gUkFESU8gSVJRIGhhbmRsZXIgbWF5IGJlIGNhbGxlZCBvdXQgb2YgdGltZXNsb3QuCisgICAgbnJmX3JhYWxfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7CisKKyAgICBzdGF0ZSA9IG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3N0YXRlX2dldCgpOworCisgICAgaWYgKHN0YXRlICE9IFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1QgJiYKKyAgICAgICAgc3RhdGUgIT0gUkFESU9fU1RBVEVfU0xFRVApCisgICAgeworICAgICAgICBOVklDX0VuYWJsZUlSUShSQURJT19JUlFuKTsKKyAgICB9CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9DUklUX1NFQ1RfRVhJVCk7Cit9CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb24uaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzBmMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbi5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9DUklUSUNBTF9TRUNUSU9OX0hfXworI2RlZmluZSBOUkZfRFJJVkVSX1JBRElPODAyMTU0X0NSSVRJQ0FMX1NFQ1RJT05fSF9fCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAZGVmZ3JvdXAgbnJmX2RyaXZlcl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uIDgwMi4xNS40IGRyaXZlciBjcml0aWNhbCBzZWN0aW9uCisgKiBAeworICogQGluZ3JvdXAgbnJmX2RyaXZlcl9yYWRpbzgwMjE1NAorICogQGJyaWVmIENyaXRpY2FsIHNlY3Rpb24gdXNlZCB3aXRoIHJlcXVlc3RzIHRvIHRoZSA4MDIuMTUuNCBkcml2ZXIuCisgKi8KKworLyoqCisgKiBAYnJpZWYgRW50ZXIgY3JpdGljYWwgc2VjdGlvbiBpbiB0aGUgODAyLjE1LjQgZHJpdmVyLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9lbnRlcih2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgRXhpdCBjcml0aWNhbCBzZWN0aW9uIGluIHRoZSA4MDIuMTUuNCBkcml2ZXIuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2V4aXQodm9pZCk7CisKKy8qKgorICpAfQorICoqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9DUklUSUNBTF9TRUNUSU9OX0hfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfZGVidWcuYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4MjE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgZGVidWcgaGVscGVycyBmb3IgdGhlIG5SRiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnLmgiCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgImhhbC9ucmZfZ3Bpby5oIgorI2luY2x1ZGUgImhhbC9ucmZfZ3Bpb3RlLmgiCisjaW5jbHVkZSAiaGFsL25yZl9wcGkuaCIKKyNpbmNsdWRlICJucmYuaCIKKworI2lmIEVOQUJMRV9ERUJVR19MT0cKKy8vLyBCdWZmZXIgdXNlZCB0byBzdG9yZSBkZWJ1ZyBsb2cgbWVzc2FnZXMuCit2b2xhdGlsZSB1aW50MzJfdCBucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnX2xvZ19idWZmZXJbTlJGX0RSVl9SQURJTzgwMjE1NF9ERUJVR19MT0dfQlVGRkVSX0xFTl07CisvLy8gSW5kZXggb2YgdGhlIGxvZyBidWZmZXIgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgdGhhdCBzaG91bGQgYmUgZmlsbGVkIHdpdGggbmV4dCBsb2cgbWVzc2FnZS4KK3ZvbGF0aWxlIHVpbnQzMl90IG5yZl9kcnZfcmFkaW84MDIxNTRfZGVidWdfbG9nX3B0ciA9IDA7CisjZW5kaWYKKworI2lmIEVOQUJMRV9ERUJVR19HUElPCisvKioKKyAqIEBicmllZiBJbml0aWFsaXplIFBQSSB0byB0b2dnbGUgR1BJTyBwaW5zIG9uIHJhZGlvIGV2ZW50cy4KKyAqLworc3RhdGljIHZvaWQgcmFkaW9fZXZlbnRfZ3Bpb190b2dnbGVfaW5pdCh2b2lkKQoreworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19SQURJT19FVlRfRU5EKTsKKyAgICBucmZfZ3Bpb19jZmdfb3V0cHV0KFBJTl9EQkdfUkFESU9fRVZUX0RJU0FCTEVEKTsKKyAgICBucmZfZ3Bpb19jZmdfb3V0cHV0KFBJTl9EQkdfUkFESU9fRVZUX1JFQURZKTsKKyAgICBucmZfZ3Bpb19jZmdfb3V0cHV0KFBJTl9EQkdfUkFESU9fRVZUX0ZSQU1FU1RBUlQpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19SQURJT19FVlRfRURFTkQpOworCisgICAgbnJmX2dwaW90ZV90YXNrX2NvbmZpZ3VyZSgwLCBQSU5fREJHX1JBRElPX0VWVF9FTkQsIE5SRl9HUElPVEVfUE9MQVJJVFlfVE9HR0xFLCBOUkZfR1BJT1RFX0lOSVRJQUxfVkFMVUVfSElHSCk7CisgICAgbnJmX2dwaW90ZV90YXNrX2NvbmZpZ3VyZSgxLCBQSU5fREJHX1JBRElPX0VWVF9ESVNBQkxFRCwgTlJGX0dQSU9URV9QT0xBUklUWV9UT0dHTEUsIE5SRl9HUElPVEVfSU5JVElBTF9WQUxVRV9ISUdIKTsKKyAgICBucmZfZ3Bpb3RlX3Rhc2tfY29uZmlndXJlKDIsIFBJTl9EQkdfUkFESU9fRVZUX1JFQURZLCBOUkZfR1BJT1RFX1BPTEFSSVRZX1RPR0dMRSwgTlJGX0dQSU9URV9JTklUSUFMX1ZBTFVFX0hJR0gpOworICAgIG5yZl9ncGlvdGVfdGFza19jb25maWd1cmUoMywgUElOX0RCR19SQURJT19FVlRfRlJBTUVTVEFSVCwgTlJGX0dQSU9URV9QT0xBUklUWV9UT0dHTEUsIE5SRl9HUElPVEVfSU5JVElBTF9WQUxVRV9ISUdIKTsKKyAgICBucmZfZ3Bpb3RlX3Rhc2tfY29uZmlndXJlKDQsIFBJTl9EQkdfUkFESU9fRVZUX0VERU5ELCBOUkZfR1BJT1RFX1BPTEFSSVRZX1RPR0dMRSwgTlJGX0dQSU9URV9JTklUSUFMX1ZBTFVFX0hJR0gpOworCisgICAgbnJmX2dwaW90ZV90YXNrX2VuYWJsZSgwKTsKKyAgICBucmZfZ3Bpb3RlX3Rhc2tfZW5hYmxlKDEpOworICAgIG5yZl9ncGlvdGVfdGFza19lbmFibGUoMik7CisgICAgbnJmX2dwaW90ZV90YXNrX2VuYWJsZSgzKTsKKyAgICBucmZfZ3Bpb3RlX3Rhc2tfZW5hYmxlKDQpOworCisgICAgbnJmX3BwaV9jaGFubmVsX2VuZHBvaW50X3NldHVwKE5SRl9QUElfQ0hBTk5FTDAsICh1aW50MzJfdCkgJk5SRl9SQURJTy0+RVZFTlRTX0VORCwgICAgICAgIG5yZl9ncGlvdGVfdGFza19hZGRyX2dldChOUkZfR1BJT1RFX1RBU0tTX09VVF8wKSk7CisgICAgbnJmX3BwaV9jaGFubmVsX2VuZHBvaW50X3NldHVwKE5SRl9QUElfQ0hBTk5FTDEsICh1aW50MzJfdCkgJk5SRl9SQURJTy0+RVZFTlRTX0RJU0FCTEVELCAgIG5yZl9ncGlvdGVfdGFza19hZGRyX2dldChOUkZfR1BJT1RFX1RBU0tTX09VVF8xKSk7CisgICAgbnJmX3BwaV9jaGFubmVsX2VuZHBvaW50X3NldHVwKE5SRl9QUElfQ0hBTk5FTDIsICh1aW50MzJfdCkgJk5SRl9SQURJTy0+RVZFTlRTX1JFQURZLCAgICAgIG5yZl9ncGlvdGVfdGFza19hZGRyX2dldChOUkZfR1BJT1RFX1RBU0tTX09VVF8yKSk7CisgICAgbnJmX3BwaV9jaGFubmVsX2VuZHBvaW50X3NldHVwKE5SRl9QUElfQ0hBTk5FTDMsICh1aW50MzJfdCkgJk5SRl9SQURJTy0+RVZFTlRTX0ZSQU1FU1RBUlQsIG5yZl9ncGlvdGVfdGFza19hZGRyX2dldChOUkZfR1BJT1RFX1RBU0tTX09VVF8zKSk7CisgICAgbnJmX3BwaV9jaGFubmVsX2VuZHBvaW50X3NldHVwKE5SRl9QUElfQ0hBTk5FTDQsICh1aW50MzJfdCkgJk5SRl9SQURJTy0+RVZFTlRTX0VERU5ELCAgICAgIG5yZl9ncGlvdGVfdGFza19hZGRyX2dldChOUkZfR1BJT1RFX1RBU0tTX09VVF80KSk7CisKKyAgICBucmZfcHBpX2NoYW5uZWxfZW5hYmxlKE5SRl9QUElfQ0hBTk5FTDApOworICAgIG5yZl9wcGlfY2hhbm5lbF9lbmFibGUoTlJGX1BQSV9DSEFOTkVMMSk7CisgICAgbnJmX3BwaV9jaGFubmVsX2VuYWJsZShOUkZfUFBJX0NIQU5ORUwyKTsKKyAgICBucmZfcHBpX2NoYW5uZWxfZW5hYmxlKE5SRl9QUElfQ0hBTk5FTDMpOworICAgIG5yZl9wcGlfY2hhbm5lbF9lbmFibGUoTlJGX1BQSV9DSEFOTkVMNCk7Cit9CisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgR1BJTyB0byBzZXQgaXQgc2ltdWxhdGVkIGFyYml0ZXIgZXZlbnRzLgorICovCitzdGF0aWMgdm9pZCByYWFsX3NpbXVsYXRvcl9ncGlvX2luaXQodm9pZCkKK3sKKyNpZiBSQUFMX1NJTVVMQVRPUgorICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19USU1FU0xPVF9BQ1RJVkUpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19SQUFMX0NSSVRJQ0FMX1NFQ1RJT04pOworI2VuZGlmCit9CisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgUFBJIHRvIHRvZ2dsZSBHUElPIHBpbnMgb24gU29mdGRldmljZSBldmVudHMuIEluaXRpYWxpemUgR1BJTyB0byBzZXQgaXQKKyAqICAgICAgICBhY2NvcmRpbmcgdG8gU29mdGRldmljZSBhcmJpdGVyIGNsaWVudCBldmVudHMuCisgKi8KK3N0YXRpYyB2b2lkIHJhYWxfc29mdGRldmljZV9ldmVudF9ncGlvX3RvZ2dsZV9pbml0KHZvaWQpCit7CisjaWYgUkFBTF9TT0ZUREVWSUNFCisgICAgbnJmX2dwaW9fY2ZnX291dHB1dChQSU5fREJHX1RJTUVTTE9UX0FDVElWRSk7CisgICAgbnJmX2dwaW9fY2ZnX291dHB1dChQSU5fREJHX1RJTUVTTE9UX0VYVEVORF9SRVEpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19USU1FU0xPVF9TRVNTSU9OX0lETEUpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19USU1FU0xPVF9SQURJT19JUlEpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19USU1FU0xPVF9GQUlMRUQpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19USU1FU0xPVF9CTE9DS0VEKTsKKyAgICBucmZfZ3Bpb19jZmdfb3V0cHV0KFBJTl9EQkdfUlRDMF9FVlRfUkVNKTsKKworICAgIG5yZl9ncGlvdGVfdGFza19jb25maWd1cmUoNSwgUElOX0RCR19SVEMwX0VWVF9SRU0sIE5SRl9HUElPVEVfUE9MQVJJVFlfVE9HR0xFLCBOUkZfR1BJT1RFX0lOSVRJQUxfVkFMVUVfSElHSCk7CisKKyAgICBucmZfZ3Bpb3RlX3Rhc2tfZW5hYmxlKDUpOworCisgICAgbnJmX3BwaV9jaGFubmVsX2VuZHBvaW50X3NldHVwKE5SRl9QUElfQ0hBTk5FTDUsICh1aW50MzJfdCkgJk5SRl9SVEMwLT5FVkVOVFNfQ09NUEFSRVsxXSwgbnJmX2dwaW90ZV90YXNrX2FkZHJfZ2V0KE5SRl9HUElPVEVfVEFTS1NfT1VUXzUpKTsKKworICAgIG5yZl9wcGlfY2hhbm5lbF9lbmFibGUoTlJGX1BQSV9DSEFOTkVMNSk7CisjZW5kaWYgLy8gUkFBTF9TT0ZUREVWSUNFCit9CisjZW5kaWYgLy8gRU5BQkxFX0RFQlVHX0dQSU8KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnX2luaXQodm9pZCkKK3sKKyNpZiBFTkFCTEVfREVCVUdfR1BJTworICAgIHJhZGlvX2V2ZW50X2dwaW9fdG9nZ2xlX2luaXQoKTsKKyAgICByYWFsX3NpbXVsYXRvcl9ncGlvX2luaXQoKTsKKyAgICByYWFsX3NvZnRkZXZpY2VfZXZlbnRfZ3Bpb190b2dnbGVfaW5pdCgpOworI2VuZGlmIC8vIEVOQUJMRV9ERUJVR19HUElPCit9CisKKyNpZiBFTkFCTEVfREVCVUdfQVNTRVJUCit2b2lkIF9fYXNzZXJ0X2Z1bmMoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmNvbmQpCit7CisgICAgKHZvaWQpIGZpbGU7CisgICAgKHZvaWQpIGxpbmU7CisgICAgKHZvaWQpIGZ1bmM7CisgICAgKHZvaWQpIGNvbmQ7CisKKyAgICBfX2Rpc2FibGVfaXJxKCk7CisKKyAgICB3aGlsZSAoMSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFX0RFQlVHX0FTU0VSVApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfZGVidWcuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2OWI2MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGJyaWVmIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGRlYnVnIGhlbHBlcnMgZm9yIDgwMi4xNS40IHJhZGlvIGRyaXZlciBmb3IgblJGIFNvQyBkZXZpY2VzLgorICoKKyAqLworCisjaWZuZGVmIE5SRl9EUlZfUkFESU84MDIxNTRfREVCVUdfSF8KKyNkZWZpbmUgTlJGX0RSVl9SQURJTzgwMjE1NF9ERUJVR19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBOUkZfRFJWX1JBRElPODAyMTU0X0RFQlVHX0xPR19CVUZGRVJfTEVOIDEwMjQKKworI2RlZmluZSBFVkVOVF9UUkFDRV9FTlRFUiAgICAgICAgICAgICAgICAgICAgICAweDAwMDFVTAorI2RlZmluZSBFVkVOVF9UUkFDRV9FWElUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDJVTAorI2RlZmluZSBFVkVOVF9NVVRFWF9MT0NLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNVTAorI2RlZmluZSBFVkVOVF9NVVRFWF9VTkxPQ0sgICAgICAgICAgICAgICAgICAgICAweDAwMDRVTAorI2RlZmluZSBFVkVOVF9TRVRfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDVVTAorI2RlZmluZSBFVkVOVF9SQURJT19SRVNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDZVTAorCisjZGVmaW5lIEZVTkNUSU9OX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMVVMCisjZGVmaW5lIEZVTkNUSU9OX1JFQ0VJVkUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMlVMCisjZGVmaW5lIEZVTkNUSU9OX1RSQU5TTUlUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM1VMCisjZGVmaW5lIEZVTkNUSU9OX0VORVJHWV9ERVRFQ1RJT04gICAgICAgICAgICAgIDB4MDAwNFVMCisjZGVmaW5lIEZVTkNUSU9OX0JVRkZFUl9GUkVFICAgICAgICAgICAgICAgICAgIDB4MDAwNVVMCisKKyNkZWZpbmUgRlVOQ1RJT05fSVJRX0hBTkRMRVIgICAgICAgICAgICAgICAgICAgMHgwMTAwVUwKKyNkZWZpbmUgRlVOQ1RJT05fRVZFTlRfRlJBTUVTVEFSVCAgICAgICAgICAgICAgMHgwMTAxVUwKKyNkZWZpbmUgRlVOQ1RJT05fRVZFTlRfQkNNQVRDSCAgICAgICAgICAgICAgICAgMHgwMTAyVUwKKyNkZWZpbmUgRlVOQ1RJT05fRVZFTlRfRU5EICAgICAgICAgICAgICAgICAgICAgMHgwMTAzVUwKKyNkZWZpbmUgRlVOQ1RJT05fRVZFTlRfRElTQUJMRUQgICAgICAgICAgICAgICAgMHgwMTA0VUwKKyNkZWZpbmUgRlVOQ1RJT05fRVZFTlRfUkVBRFkgICAgICAgICAgICAgICAgICAgMHgwMTA1VUwKKyNkZWZpbmUgRlVOQ1RJT05fRVZFTlRfQ0NBSURMRSAgICAgICAgICAgICAgICAgMHgwMTA2VUwKKyNkZWZpbmUgRlVOQ1RJT05fRVZFTlRfQ0NBQlVTWSAgICAgICAgICAgICAgICAgMHgwMTA3VUwKKyNkZWZpbmUgRlVOQ1RJT05fRVZFTlRfRURFTkQgICAgICAgICAgICAgICAgICAgMHgwMTA4VUwKKworI2RlZmluZSBGVU5DVElPTl9BVVRPX0FDS19BQk9SVCAgICAgICAgICAgICAgICAweDAyMDFVTAorI2RlZmluZSBGVU5DVElPTl9USU1FU0xPVF9TVEFSVEVEICAgICAgICAgICAgICAweDAyMDJVTAorI2RlZmluZSBGVU5DVElPTl9USU1FU0xPVF9FTkRFRCAgICAgICAgICAgICAgICAweDAyMDNVTAorI2RlZmluZSBGVU5DVElPTl9DUklUX1NFQ1RfRU5URVIgICAgICAgICAgICAgICAweDAyMDRVTAorI2RlZmluZSBGVU5DVElPTl9DUklUX1NFQ1RfRVhJVCAgICAgICAgICAgICAgICAweDAyMDVVTAorCisjZGVmaW5lIEZVTkNUSU9OX1JBQUxfQ1JJVF9TRUNUX0VOVEVSICAgICAgICAgIDB4MDMwMVVMCisjZGVmaW5lIEZVTkNUSU9OX1JBQUxfQ1JJVF9TRUNUX0VYSVQgICAgICAgICAgIDB4MDMwMlVMCisjZGVmaW5lIEZVTkNUSU9OX1JBQUxfQ09OVElOVU9VU19FTlRFUiAgICAgICAgIDB4MDMwM1VMCisjZGVmaW5lIEZVTkNUSU9OX1JBQUxfQ09OVElOVU9VU19FWElUICAgICAgICAgIDB4MDMwNFVMCisKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9TSUdfSEFORExFUiAgICAgICAgICAgICAgMHgwNDAwVUwKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfU1RBUlQgICAgICAgICAgMHgwNDAxVUwKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfTUFSR0lOICAgICAgICAgMHgwNDAyVUwKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfRVhURU5EICAgICAgICAgMHgwNDAzVUwKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfRU5ERUQgICAgICAgICAgMHgwNDA0VUwKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfUkFESU8gICAgICAgICAgMHgwNDA1VUwKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfRVhDRUVEX1NVQ0NFU1MgMHgwNDA2VUwKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfRVhDRUVEX0ZBSUwgICAgMHgwNDA3VUwKKworI2RlZmluZSBQSU5fREJHX1JBRElPX0VWVF9FTkQgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBQSU5fREJHX1JBRElPX0VWVF9ESVNBQkxFRCAgICAgICAgICAgICAxMgorI2RlZmluZSBQSU5fREJHX1JBRElPX0VWVF9SRUFEWSAgICAgICAgICAgICAgICAxMworI2RlZmluZSBQSU5fREJHX1JBRElPX0VWVF9GUkFNRVNUQVJUICAgICAgICAgICAxNAorI2RlZmluZSBQSU5fREJHX1JBRElPX0VWVF9FREVORCAgICAgICAgICAgICAgICAyNQorCisjZGVmaW5lIFBJTl9EQkdfVElNRVNMT1RfQUNUSVZFICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUElOX0RCR19USU1FU0xPVF9FWFRFTkRfUkVRICAgICAgICAgICAgNAorI2RlZmluZSBQSU5fREJHX1RJTUVTTE9UX1NFU1NJT05fSURMRSAgICAgICAgICAxNgorI2RlZmluZSBQSU5fREJHX1RJTUVTTE9UX1JBRElPX0lSUSAgICAgICAgICAgICAyOAorI2RlZmluZSBQSU5fREJHX1RJTUVTTE9UX0ZBSUxFRCAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBQSU5fREJHX1RJTUVTTE9UX0JMT0NLRUQgICAgICAgICAgICAgICAzMAorI2RlZmluZSBQSU5fREJHX1JBQUxfQ1JJVElDQUxfU0VDVElPTiAgICAgICAgICAxNQorCisjZGVmaW5lIFBJTl9EQkdfUlRDMF9FVlRfUkVNICAgICAgICAgICAgICAgICAgIDMxCisKKyNpZiBFTkFCTEVfREVCVUdfTE9HCitleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Z19sb2dfYnVmZmVyWworICAgICAgICBOUkZfRFJWX1JBRElPODAyMTU0X0RFQlVHX0xPR19CVUZGRVJfTEVOXTsKK2V4dGVybiB2b2xhdGlsZSB1aW50MzJfdCBucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnX2xvZ19wdHI7CisKKyNkZWZpbmUgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfQ09ERSwgRVZFTlRfQVJHKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdWludDMyX3QgcHRyID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Z19sb2dfcHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Z19sb2dfYnVmZmVyW3B0cl0gPSAoKEVWRU5UX0NPREUpIHwgKChFVkVOVF9BUkcpIDw8IDE2KSk7ICAgICAgICAgIFwKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Z19sb2dfcHRyID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBwdHIgPCAoTlJGX0RSVl9SQURJTzgwMjE1NF9ERUJVR19MT0dfQlVGRkVSX0xFTiAtIDEpID8gcHRyICsgMSA6IDA7ICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZWxzZSAvLyBFTkFCTEVfREVCVUdfTE9HCisKKyNkZWZpbmUgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfQ09ERSwgRVZFTlRfQVJHKQorCisjZW5kaWYgLy8gRU5BQkxFX0RFQlVHX0xPRworCisjaWYgRU5BQkxFX0RFQlVHX0dQSU8KKworI2RlZmluZSBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9zZXQocGluKSBOUkZfUDAtPk9VVFNFVCA9ICgxVUwgPDwgKHBpbikpCisjZGVmaW5lIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX2NscihwaW4pIE5SRl9QMC0+T1VUQ0xSID0gKDFVTCA8PCAocGluKSkKKyNkZWZpbmUgbnJmX2Rydl9yYWRpbzgwMjE1NF9waW5fdGdsKHBpbikgZG8geyB2b2xhdGlsZSB1aW50MzJfdCBwcyA9IE5SRl9QMC0+T1VUOyAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkZfUDAtPk9VVFNFVCA9ICh+cHMgJiAoMVVMIDw8IChwaW4pKSk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SRl9QMC0+T1VUQ0xSID0gKHBzICYgKDFVTCA8PCAocGluKSkpOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKTsKKworI2Vsc2UgLy8gRU5BQkxFX0RFQlVHX0dQSU8KKworI2RlZmluZSBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9zZXQocGluKQorI2RlZmluZSBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9jbHIocGluKQorI2RlZmluZSBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl90Z2wocGluKQorCisjZW5kaWYgLy8gRU5BQkxFX0RFQlVHX0dQSU8KKworLyoqCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSBkZWJ1ZyBoZWxwZXJzIGZvciBuUkYgODAyLjE1LjQgZHJpdmVyLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfZGVidWdfaW5pdCh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5SRl9EUlZfUkFESU84MDIxNTRfREVCVUdfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbS5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfZnNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1NWJhMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbS5jCkBAIC0wLDAgKzEsMTg1OSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBGaW5pdGUgU3RhdGUgTWFjaGluZSBvZiBuUkYgODAyLjE1LjQgcmFkaW8gZHJpdmVyLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTQuaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdC5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfY29uZmlnLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9jb25zdC5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfZGVidWcuaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbi5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfcGliLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9wcm9jZWR1cmVzX2R1cmF0aW9uLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuaCIKKyNpbmNsdWRlICJoYWwvbnJmX3JhZGlvLmgiCisjaW5jbHVkZSAicmFhbC9ucmZfcmFhbF9hcGkuaCIKKworLy8vIFZhbHVlIHNldCB0byBTSE9SVFMgcmVnaXN0ZXIgd2hlbiBubyBzaG9ydHMgc2hvdWxkIGJlIGVuYWJsZWQuCisjZGVmaW5lIFNIT1JUU19JRExFICAgICAgICAgMAorLy8vIFZhbHVlIHNldCB0byBTSE9SVFMgcmVnaXN0ZXIgd2hlbiByZWNlaXZlciBpcyB3YWl0aW5nIGZvciBpbmNvbWluZyBmcmFtZS4KKyNkZWZpbmUgU0hPUlRTX1JYX0lOSVRJQUwgICAoTlJGX1JBRElPX1NIT1JUX0VORF9ESVNBQkxFX01BU0sgfCBOUkZfUkFESU9fU0hPUlRfRElTQUJMRURfVFhFTl9NQVNLIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkZfUkFESU9fU0hPUlRfRlJBTUVTVEFSVF9CQ1NUQVJUX01BU0spCisvLy8gVmFsdWUgc2V0IHRvIFNIT1JUUyByZWdpc3RlciB3aGVuIHJlY2VpdmVyIHN0YXJ0ZWQgcmVjZWl2aW5nIGEgZnJhbWUuCisjZGVmaW5lIFNIT1JUU19SWF9GT0xMT1dJTkcgKE5SRl9SQURJT19TSE9SVF9FTkRfRElTQUJMRV9NQVNLIHwgTlJGX1JBRElPX1NIT1JUX1JFQURZX1NUQVJUX01BU0sgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SRl9SQURJT19TSE9SVF9GUkFNRVNUQVJUX0JDU1RBUlRfTUFTSykKKy8vLyBWYWx1ZSBzZXQgdG8gU0hPUlRTIHJlZ2lzdGVyIHdoZW4gcmVjZWl2ZWQgZnJhbWUgc2hvdWxkIGJlIGFja25vd2xlZGdlZC4KKyNkZWZpbmUgU0hPUlRTX1RYX0FDSyAgICAgICAoTlJGX1JBRElPX1NIT1JUX0VORF9ESVNBQkxFX01BU0spCisjaWYgUkFESU9fU0hPUlRfQ0NBSURMRV9UWEVOCisvLy8gVmFsdWUgc2V0IHRvIFNIT1JUUyByZWdpc3RlciBkdXJpbmcgdHJhbnNtaXNzaW9uIG9mIGEgZnJhbWUKKyNkZWZpbmUgU0hPUlRTX1RYX0ZSQU1FICAgICAoTlJGX1JBRElPX1NIT1JUX0VORF9ESVNBQkxFX01BU0sgfCBOUkZfUkFESU9fU0hPUlRfUkVBRFlfU1RBUlRfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJGX1JBRElPX1NIT1JUX0NDQUlETEVfVFhFTl9NQVNLKQorI2Vsc2UKKy8vLyBWYWx1ZSBzZXQgdG8gU0hPUlRTIHJlZ2lzdGVyIGR1cmluZyB0cmFuc21pc3Npb24gb2YgYSBmcmFtZQorI2RlZmluZSBTSE9SVFNfVFhfRlJBTUUgICAgIChOUkZfUkFESU9fU0hPUlRfRU5EX0RJU0FCTEVfTUFTSyB8IE5SRl9SQURJT19TSE9SVF9SRUFEWV9TVEFSVF9NQVNLKQorI2VuZGlmCisKKy8vLyBEZWxheSBiZWZvcmUgc2VuZGluZyBBQ0sgKDEyc3ltID0gMTkydVMpCisjZGVmaW5lIFRJRlNfQUNLX1VTICAgICAgICAgMTkyCisvLy8gRGVsYXkgYmVmb3JlIGZpcnN0IGNoZWNrIG9mIHJlY2VpdmVkIGZyYW1lOiAxNiBiaXRzIGlzIE1BQyBGcmFtZSBDb250cm9sIGZpZWxkLgorI2RlZmluZSBCQ0NfSU5JVCAgICAgICAgICAgICgyICogOCkKKy8vLyBEZWxheSBiZWZvcmUgc2Vjb25kIGNoZWNrIG9mIHJlY2VpdmVkIGZyYW1lIGlmIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgc2hvcnQuCisjZGVmaW5lIEJDQ19TSE9SVF9BRERSICAgICAgKChERVNUX0FERFJfT0ZGU0VUICsgU0hPUlRfQUREUkVTU19TSVpFKSAqIDgpCisvLy8gRGVsYXkgYmVmb3JlIHNlY29uZCBjaGVjayBvZiByZWNlaXZlZCBmcmFtZSBpZiBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIGV4dGVuZGVkLgorI2RlZmluZSBCQ0NfRVhURU5ERURfQUREUiAgICgoREVTVF9BRERSX09GRlNFVCArIEVYVEVOREVEX0FERFJFU1NfU0laRSkgKiA4KQorCisvLy8gRHVyYXRpb24gb2Ygc2luZ2xlIGl0ZXJhdGlvbiBvZiBFbmVyZ3kgRGV0ZWN0aW9uIHByb2NlZHVyZQorI2RlZmluZSBFRF9JVEVSX0RVUkFUSU9OICAgMTI4VQorLy8vIE92ZXJoZWFkIG9mIGhhcmR3YXJlIHByZXBhcmF0aW9uIGZvciBFRCBwcm9jZWR1cmUgKGFUdXJuYXJvdW5kVGltZSkgW251bWJlciBvZiBpdGVyYXRpb25zXQorI2RlZmluZSBFRF9JVEVSU19PVkVSSEVBRCAgMlUKKworI2RlZmluZSBDUkNfTEVOR1RIICAgICAgMiAgICAgICAgIC8vLzwgTGVuZ3RoIG9mIENSQyBpbiA4MDIuMTUuNCBmcmFtZXMgW2J5dGVzXQorI2RlZmluZSBDUkNfUE9MWU5PTUlBTCAgMHgwMTEwMjEgIC8vLzwgUG9seW5vbWlhbCB1c2VkIGZvciBDUkMgY2FsY3VsYXRpb24gaW4gODAyLjE1LjQgZnJhbWVzCisKKyNkZWZpbmUgTUhNVV9NQVNLICAgICAgICAgICAgICAgMHhmZjAwMDcwMCAgLy8vPCBNYXNrIG9mIGtub3duIGJ5dGVzIGluIEFDSyBwYWNrZXQKKyNkZWZpbmUgTUhNVV9QQVRURVJOICAgICAgICAgICAgMHgwMDAwMDIwMCAgLy8vPCBWYWx1ZXMgb2Yga25vd24gYnl0ZXMgaW4gQUNLIHBhY2tldAorI2RlZmluZSBNSE1VX1BBVFRFUk5fRFNOX09GRlNFVCAyNCAgICAgICAgICAvLy88IE9mZnNldCBvZiBEU04gaW4gTUhNVV9QQVRURVIgW2JpdHNdCisKKy8qKiBHZXQgTFFJIG9mIGdpdmVuIHJlY2VpdmVkIHBhY2tldC4gSWYgQ1JDIGlzIGNhbGN1bGF0ZWQgYnkgaGFyZHdhcmUgTFFJIGlzIGluY2x1ZGVkIGluc3RlYWQgb2YgQ1JDCisgKiAgaW4gdGhlIGZyYW1lLiBMZW5ndGggaXMgc3RvcmVkIGluIGJ5dGUgd2l0aCBpbmRleCAwOyBDUkMgaXMgMiBsYXN0IGJ5dGVzLgorICovCisjZGVmaW5lIFJYX0ZSQU1FX0xRSShwc2R1KSAgKChwc2R1KVsocHNkdSlbMF0gLSAxXSkKKworI2lmIFJBRElPX1JYX0JVRkZFUlMgPiAxCisvLy8gUG9pbnRlciB0byBjdXJyZW50bHkgdXNlZCByZWNlaXZlIGJ1ZmZlci4KK3N0YXRpYyByeF9idWZmZXJfdCAqIG1wX2N1cnJlbnRfcnhfYnVmZmVyOworI2Vsc2UKKy8vLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBidWZmZXIgdXNlIGNvbnN0IHBvaW50ZXIgdG8gdGhlIHJlY2VpdmUgYnVmZmVyLgorc3RhdGljIHJ4X2J1ZmZlcl90ICogY29uc3QgbXBfY3VycmVudF9yeF9idWZmZXIgPSAmbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJzWzBdOworI2VuZGlmCisKKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorCisvLy8gQWNrIGZyYW1lIGJ1ZmZlciAoRWFzeURNQSBjYW5ub3QgYWRkcmVzcyB3aG9sZSBSQU0uIFBsYWNlIGJ1ZmZlciBpbiB0aGUgc3BlY2lhbCBzZWN0aW9uLikKK3N0YXRpYyB1aW50OF90IG1fYWNrX3BzZHVbQUNLX0xFTkdUSCArIDFdCisgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCJucmZfcmFkaW9fYnVmZmVyLm1fYWNrX3BzZHUiKSkpOworCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisKKyNwcmFnbWEgbG9jYXRpb249Ik5SRl9SQURJT19CVUZGRVIiCitzdGF0aWMgdWludDhfdCBtX2Fja19wc2R1W0FDS19MRU5HVEggKyAxXTsKKworI2VuZGlmCisKK3N0YXRpYyBjb25zdCB1aW50OF90ICogbXBfdHhfZGF0YTsgICAgICAvLy88IFBvaW50ZXIgdG8gZGF0YSB0byB0cmFuc21pdC4KK3N0YXRpYyB1aW50MzJfdCAgICAgICAgbV9lZF90aW1lX2xlZnQ7ICAvLy88IFJlbWFpbmluZyB0aW1lIG9mIGN1cnJlbnQgZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUgW3VzXS4KK3N0YXRpYyB1aW50OF90ICAgICAgICAgbV9lZF9yZXN1bHQ7ICAgICAvLy88IFJlc3VsdCBvZiBjdXJyZW50IGVuZXJneSBkZXRlY3Rpb24gcHJvY2VkdXJlLgorCitzdGF0aWMgdm9sYXRpbGUgcmFkaW9fc3RhdGVfdCBtX3N0YXRlID0gUkFESU9fU1RBVEVfU0xFRVA7ICAvLy88IFN0YXRlIG9mIHRoZSByYWRpbyBkcml2ZXIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBib29sIHByZXZlbnRfYWNrIDoxOyAgLy8vPCBJZiBmcmFtZSBiZWluZyByZWNlaXZlZCBpcyBub3QgZGVzdGluZWQgdG8gdGhpcyBub2RlIChwcm9taXNjdW91cyBtb2RlKS4KK30gbnJmX3JhZGlvODAyMTU0X2ZsYWdzX3Q7CitzdGF0aWMgbnJmX3JhZGlvODAyMTU0X2ZsYWdzX3QgbV9mbGFnczsgIC8vLzwgRmxhZ3MgdXNlZCB0byBzdG9yZSBjdXJyZW50IGRyaXZlciBzdGF0ZS4KKworc3RhdGljIHZvbGF0aWxlIHVpbnQ4X3QgbV9tdXRleDsgIC8vLzwgTXV0ZXggcHJldmVudGluZyByYWNlIGNvbmRpdGlvbi4KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBNdXRleAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLy8gTG9jayBtdXRleCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4KK3N0YXRpYyBib29sIG11dGV4X2xvY2sodm9pZCkKK3sKKyAgICBkbworICAgIHsKKyAgICAgICAgdm9sYXRpbGUgdWludDhfdCBtdXRleF92YWx1ZSA9IF9fTERSRVhCKCZtX211dGV4KTsKKworICAgICAgICBpZiAobXV0ZXhfdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoX19TVFJFWEIoMSwgJm1fbXV0ZXgpKTsKKworICAgIF9fRE1CKCk7CisKKyAgICAvLyBEcml2ZXIgbWF5IGJlIGluIFdBSVRJTkdfVElNRVNMT1Qgc3RhdGUgaWYgdGltZXNsb3QgZW5kZWQgZHVyaW5nIG11dGV4IGxvY2tpbmcuCisgICAgYXNzZXJ0KG1fc3RhdGUgPT0gUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSB8fAorICAgICAgICAgICBtX3N0YXRlID09IFJBRElPX1NUQVRFX1NMRUVQIHx8CisgICAgICAgICAgIG1fc3RhdGUgPT0gUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVCk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9NVVRFWF9MT0NLLCAwKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLy8gVW5sb2NrIG11dGV4Lgorc3RhdGljIHZvaWQgbXV0ZXhfdW5sb2NrKHZvaWQpCit7CisgICAgYXNzZXJ0KG1fc3RhdGUgPT0gUkFESU9fU1RBVEVfU0xFRVAgfHwKKyAgICAgICAgICAgbV9zdGF0ZSA9PSBSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX01VVEVYX1VOTE9DSywgMCk7CisKKyAgICBfX0RNQigpOworICAgIG1fbXV0ZXggPSAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIEZTTSBjb21tb24gb3BlcmF0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiogU2V0IGRyaXZlciBzdGF0ZS4KKyAqCisgKiBAcGFyYW1baW5dICBzdGF0ZSAgRHJpdmVyIHN0YXRlIHRvIHNldC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN0YXRlX3NldChyYWRpb19zdGF0ZV90IHN0YXRlKQoreworICAgIG1fc3RhdGUgPSBzdGF0ZTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1NFVF9TVEFURSwgKHVpbnQzMl90KXN0YXRlKTsKK30KKworLy8vIENvbW1vbiBwcm9jZWR1cmUgd2hlbiB0aGUgZHJpdmVyIGVudGVycyBTTEVFUCBzdGF0ZS4KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGVlcF9zdGFydCh2b2lkKQoreworICAgIHN0YXRlX3NldChSQURJT19TVEFURV9TTEVFUCk7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wX3RpbWVzbG90X2V4aXQoKTsKKyAgICBtdXRleF91bmxvY2soKTsKK30KKworLy8vIFN0YXJ0IHJlY2VpdmVyIHRvIHdhaXQgZm9yIGZyYW1lcy4KK3N0YXRpYyBpbmxpbmUgdm9pZCByeF9zdGFydCh2b2lkKQoreworICAgIG5yZl9yYWRpb19wYWNrZXRfcHRyX3NldChtcF9jdXJyZW50X3J4X2J1ZmZlci0+cHNkdSk7CisgICAgbnJmX3JhZGlvX3Rhc2tfdHJpZ2dlcihOUkZfUkFESU9fVEFTS19TVEFSVCk7Cit9CisKKy8vLyBTdGFydCByZWNlaXZlciB0byB3YWl0IGZvciBmcmFtZSB0aGF0IGNhbiBiZSBhY2tub3dsZWRnZWQuCitzdGF0aWMgaW5saW5lIHZvaWQgcnhfZnJhbWVfc3RhcnQodm9pZCkKK3sKKyAgICByeF9zdGFydCgpOworCisgICAgLy8gSnVzdCBhZnRlciBzdGFydGluZyByZWNlaXZpbmcgdG8gcmVjZWl2ZSBidWZmZXIgc2V0IHBhY2tldCBwb2ludGVyIHRvIEFDSyBmcmFtZSB0aGF0IGNhbiBiZQorICAgIC8vIHNlbnQgYXV0b21hdGljYWxseS4KKyAgICBucmZfcmFkaW9fcGFja2V0X3B0cl9zZXQobV9hY2tfcHNkdSk7Cit9CisKKy8qKiBHZXQgcmVzdWx0IG9mIGxhc3QgUlNTSSBtZWFzdXJlbWVudC4KKyAqCisgKiBAcmV0dXJucyAgUmVzdWx0IG9mIGxhc3QgUlNTSSBtZWFzdXJlbWVudCBbZEJtXS4KKyAqLworc3RhdGljIGlubGluZSBpbnQ4X3QgcnNzaV9sYXN0X21lYXN1cmVtZW50X2dldCh2b2lkKQoreworICAgIHJldHVybiAtKChpbnQ4X3QpbnJmX3JhZGlvX3Jzc2lfc2FtcGxlX2dldCgpKTsKK30KKworLy8vIE5vdGlmeSBNQUMgbGF5ZXIgdGhhdCBhIGZyYW1lIHdhcyByZWNlaXZlZC4KK3N0YXRpYyBpbmxpbmUgdm9pZCByZWNlaXZlZF9mcmFtZV9ub3RpZnkodm9pZCkKK3sKKyAgICBtcF9jdXJyZW50X3J4X2J1ZmZlci0+ZnJlZSA9IGZhbHNlOworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X3JlY2VpdmVkKG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1LCAgICAgICAgICAgICAgICAvLyBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNzaV9sYXN0X21lYXN1cmVtZW50X2dldCgpLCAgICAgICAgICAgICAgIC8vIHJzc2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSWF9GUkFNRV9MUUkobXBfY3VycmVudF9yeF9idWZmZXItPnBzZHUpKTsgLy8gbHFpCit9CisKKy8qKiBTZXQgY3VycmVudGx5IHVzZWQgcnggYnVmZmVyIHRvIGdpdmVuIGFkZHJlc3MuCisgKgorICogQHBhcmFtW2luXSAgcF9yeF9idWZmZXIgIFBvaW50ZXIgdG8gcmVjZWl2ZSBidWZmZXIgdGhhdCBzaG91bGQgYmUgdXNlZCBub3cuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByeF9idWZmZXJfaW5fdXNlX3NldChyeF9idWZmZXJfdCAqIHBfcnhfYnVmZmVyKQoreworI2lmIFJBRElPX1JYX0JVRkZFUlMgPiAxCisgICAgbXBfY3VycmVudF9yeF9idWZmZXIgPSBwX3J4X2J1ZmZlcjsKKyNlbHNlCisgICAgKHZvaWQpIHBfcnhfYnVmZmVyOworI2VuZGlmCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gUmFkaW8gcGFyYW1ldGVycyBjYWxjdWxhdG9ycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiogU2V0IHJhZGlvIGNoYW5uZWwKKyAqCisgKiAgQHBhcmFtW2luXSAgY2hhbm5lbCAgQ2hhbm5lbCBudW1iZXIgdG8gc2V0ICgxMS0yNikuCisgKi8KK3N0YXRpYyB2b2lkIGNoYW5uZWxfc2V0KHVpbnQ4X3QgY2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA+PSAxMSAmJiBjaGFubmVsIDw9IDI2KTsKKworICAgIG5yZl9yYWRpb19mcmVxdWVuY3lfc2V0KDUgKyAoNSAqIChjaGFubmVsIC0gMTEpKSk7Cit9CisKKy8qKiBHZXQgcmFkaW8gY2hhbm5lbC4KKyAqCisgKiBAcmV0dXJucyAgQ3VycmVudGx5IHNldCBjaGFubmVsIG51bWJlci4KKyAqLworc3RhdGljIHVpbnQ4X3QgY2hhbm5lbF9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gKChucmZfcmFkaW9fZnJlcXVlbmN5X2dldCgpIC0gNSkgLyA1KSArIDExOworfQorCisvKiogU2V0IHRyYW5zbWl0IHBvd2VyLgorICoKKyAqIEBwYXJhbVtpbl0gIGRibSAgVHJhbnNtaXQgcG93ZXIgdG8gc2V0IFtkYm1dLgorICovCitzdGF0aWMgdm9pZCB0eF9wb3dlcl9zZXQoaW50OF90IGRibSkKK3sKKyAgICBjb25zdCBpbnQ4X3QgYWxsb3dlZF92YWx1ZXNbXSA9IHstNDAsIC0yMCwgLTE2LCAtMTIsIC04LCAtNCwgMCwgMiwgMywgNCwgNSwgNiwgNywgOCwgOX07CisgICAgY29uc3QgaW50OF90IGhpZ2hlc3RfdmFsdWUgICAgPSBhbGxvd2VkX3ZhbHVlc1soc2l6ZW9mKGFsbG93ZWRfdmFsdWVzKSAvIHNpemVvZihhbGxvd2VkX3ZhbHVlc1swXSkpIC0gMV07CisgICAgaWYgKGRibSA+IGhpZ2hlc3RfdmFsdWUpCisgICAgeworICAgICAgICBkYm0gPSBoaWdoZXN0X3ZhbHVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2l6ZW9mKGFsbG93ZWRfdmFsdWVzKSAvIHNpemVvZihhbGxvd2VkX3ZhbHVlc1swXSk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRibSA8PSBhbGxvd2VkX3ZhbHVlc1tpXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYm0gPSBhbGxvd2VkX3ZhbHVlc1tpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG5yZl9yYWRpb190eF9wb3dlcl9zZXQoZGJtKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBTaG9ydHMgbWFuYWdlbWVudAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLy8gRGlzYWJsZSBwZXJpcGhlcmFsIHNob3J0cy4KK3N0YXRpYyBpbmxpbmUgdm9pZCBzaG9ydHNfZGlzYWJsZSh2b2lkKQoreworICAgIG5yZl9yYWRpb19zaG9ydHNfc2V0KFNIT1JUU19JRExFKTsKKyAgICBucmZfcmFkaW9faWZzX3NldCgwKTsKK30KKworLy8vIEVuYWJsZSBwZXJpcGhlcmFsIHNob3J0cyB1c2VkIGR1cmluZyBkYXRhIGZyYW1lIHRyYW5zbWlzc2lvbi4KK3N0YXRpYyBpbmxpbmUgdm9pZCBzaG9ydHNfdHhfZnJhbWVfc2V0KHZvaWQpCit7CisgICAgbnJmX3JhZGlvX3Nob3J0c19zZXQoU0hPUlRTX1RYX0ZSQU1FKTsKK30KKworLy8vIEVuYWJsZSBwZXJpcGhlcmFsIHNob3J0cyB1c2VkIGluIHJlY2VpdmUgc3RhdGUgdG8gZW5hYmxlIGF1dG9tYXRpYyBBQ0sgcHJvY2VkdXJlLgorc3RhdGljIGlubGluZSB2b2lkIHNob3J0c19yeF9pbml0aWFsX3NldCh2b2lkKQoreworICAgIG5yZl9yYWRpb19pZnNfc2V0KFRJRlNfQUNLX1VTKTsKKyAgICBucmZfcmFkaW9fYmNjX3NldChCQ0NfSU5JVCk7CisKKyAgICBucmZfcmFkaW9fc2hvcnRzX3NldChTSE9SVFNfUlhfSU5JVElBTCk7Cit9CisKKy8vLyBFbmFibGUgcGVyaXBoZXJhbCBzaG9ydHMgdXNlZCBkdXJpbmcgYXV0b21hdGljIEFDSyB0cmFuc21pc3Npb24uCitzdGF0aWMgaW5saW5lIHZvaWQgc2hvcnRzX3J4X2ZvbGxvd2luZ19zZXQodm9pZCkKK3sKKyAgICBucmZfcmFkaW9fc2hvcnRzX3NldChTSE9SVFNfUlhfRk9MTE9XSU5HKTsKK30KKworLy8vIERpc2FibGUgcGVyaXBoZXJhbCBzaG9ydHMgdXNlZCBkdXJpbmcgYXV0b21hdGljIEFDSyB0cmFuc21pc3Npb24gd2hlbiBBQ0sgaXMgYmVpbmcgdHJhbnNtaXR0ZWQKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaG9ydHNfdHhfYWNrX3NldCh2b2lkKQoreworICAgIC8vIElmIEFDSyBpcyBzZW50IEVORF9ESVNBQkxFIHNob3J0IHNob3VsZCBwZXJzaXN0IHRvIGRpc2FibGUgdHJhbnNtaXR0ZXIgYXV0b21hdGljYWxseS4KKyAgICBucmZfcmFkaW9fc2hvcnRzX3NldChTSE9SVFNfVFhfQUNLKTsKKyAgICBucmZfcmFkaW9faWZzX3NldCgwKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBBQ0sgdHJhbnNtaXNzaW9uIG1hbmFnZW1lbnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8vIFNldCB2YWxpZCBzZXF1ZW5jZSBudW1iZXIgaW4gQUNLIGZyYW1lLgorc3RhdGljIGlubGluZSB2b2lkIGFja19wcmVwYXJlKHZvaWQpCit7CisgICAgLy8gQ29weSBzZXF1ZW5jZSBudW1iZXIgZnJvbSByZWNlaXZlZCBmcmFtZSB0byBBQ0sgZnJhbWUuCisgICAgbV9hY2tfcHNkdVtEU05fT0ZGU0VUXSA9IG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1W0RTTl9PRkZTRVRdOworfQorCisvLy8gU2V0IHBlbmRpbmcgYml0IGluIEFDSyBmcmFtZS4KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2tfcGVuZGluZ19iaXRfc2V0KHZvaWQpCit7CisgICAgbV9hY2tfcHNkdVtGUkFNRV9QRU5ESU5HX09GRlNFVF0gPSBBQ0tfSEVBREVSX1dJVEhfUEVORElORzsKKworICAgIGlmICghbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfc2hvdWxkX2JlX3NldChtcF9jdXJyZW50X3J4X2J1ZmZlci0+cHNkdSkpCisgICAgeworICAgICAgICBtX2Fja19wc2R1W0ZSQU1FX1BFTkRJTkdfT0ZGU0VUXSA9IEFDS19IRUFERVJfV0lUSE9VVF9QRU5ESU5HOworICAgIH0KK30KKworLyoqIENoZWNrIGlmIEFDSyBpcyByZXF1ZXN0ZWQgaW4gZ2l2ZW4gZnJhbWUuCisgKgorICogQHBhcmFtW2luXSAgcF9mcmFtZSAgUG9pbnRlciB0byBhIGZyYW1lIHRvIGNoZWNrLgorICoKKyAqIEByZXR2YWwgIHRydWUgICBBQ0sgaXMgcmVxdWVzdGVkIGluIGdpdmVuIGZyYW1lLgorICogQHJldHZhbCAgZmFsc2UgIEFDSyBpcyBub3QgcmVxdWVzdGVkIGluIGdpdmVuIGZyYW1lLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgYWNrX2lzX3JlcXVlc3RlZChjb25zdCB1aW50OF90ICogcF9mcmFtZSkKK3sKKyAgICByZXR1cm4gKHBfZnJhbWVbQUNLX1JFUVVFU1RfT0ZGU0VUXSAmIEFDS19SRVFVRVNUX0JJVCkgPyB0cnVlIDogZmFsc2U7Cit9CisKKy8qKiBBYm9ydCBhdXRvbWF0aWMgQUNLIHByb2NlZHVyZS4KKyAqCisgKiBAcGFyYW1baW5dICBzdGF0ZV90b19zZXQgIERyaXZlciBzdGF0ZSB0aGF0IHNoYWxsIGJlIHNldCBhZnRlciB0aGUgcHJvY2VkdXJlIGlzIGFib3J0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGF1dG9fYWNrX2Fib3J0KHJhZGlvX3N0YXRlX3Qgc3RhdGVfdG9fc2V0KQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9BVVRPX0FDS19BQk9SVCk7CisKKyAgICBzaG9ydHNfZGlzYWJsZSgpOworCisgICAgc3dpdGNoIChucmZfcmFkaW9fc3RhdGVfZ2V0KCkpCisgICAgeworICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWDogICAgIC8vIFdoZW4gc3RvcHBpbmcgYmVmb3JlIHdob2xlIGZyYW1lIHJlY2VpdmVkLgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9SVTogIC8vIFdoZW4gdHJhbnNtaXNzaW9uIGlzIGluaXRpYWxpemVkIGR1cmluZyByZWNlaXZlciByYW1wIHVwLgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9JRExFOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9UWF9SVToKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfVFhfSURMRToKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfVFg6CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0RJU0FCTEVEKTsgLy8gQ2xlYXIgZGlzYWJsZWQgZXZlbnQgdGhhdCB3YXMgc2V0IGJ5IHNob3J0LgorICAgICAgICAgICAgc3RhdGVfc2V0KHN0YXRlX3RvX3NldCk7CisgICAgICAgICAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX0RJU0FCTEUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfUlhfRElTQUJMRToKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfRElTQUJMRUQ6CisgICAgICAgICAgICAvLyBEbyBub3QgdHJpZ2dlciBESVNBQkxFIHRhc2sgaW4gdGhvc2Ugc3RhdGVzIHRvIHByZXZlbnQgZG91YmxlIERJU0FCTEVEIGV2ZW50cy4KKyAgICAgICAgICAgIHN0YXRlX3NldChzdGF0ZV90b19zZXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fQVVUT19BQ0tfQUJPUlQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBBQ0sgcmVjZWl2aW5nIG1hbmFnZW1lbnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8vIEVuYWJsZSBoYXJkd2FyZSBBQ0sgbWF0Y2hpbmcgYWNjZWxlcmF0b3IuCitzdGF0aWMgaW5saW5lIHZvaWQgYWNrX21hdGNoaW5nX2VuYWJsZSh2b2lkKQoreworICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfTUhSTUFUQ0gpOworICAgIG5yZl9yYWRpb19taG11X3NlYXJjaF9wYXR0ZXJuX3NldChNSE1VX1BBVFRFUk4gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KSBtcF90eF9kYXRhW0RTTl9PRkZTRVRdIDw8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSE1VX1BBVFRFUk5fRFNOX09GRlNFVCkpOworfQorCisvLy8gRGlzYWJsZSBoYXJkd2FyZSBBQ0sgbWF0Y2hpbmcgYWNjZWxlcmF0b3IuCitzdGF0aWMgaW5saW5lIHZvaWQgYWNrX21hdGNoaW5nX2Rpc2FibGUodm9pZCkKK3sKKyAgICBucmZfcmFkaW9fbWhtdV9zZWFyY2hfcGF0dGVybl9zZXQoMCk7CisgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9NSFJNQVRDSCk7Cit9CisKKy8qKiBDaGVjayBpZiBoYXJkd2FyZSBBQ0sgbWF0Y2hpbmcgYWNjZWxlcmF0b3IgbWF0Y2hlZCBBQ0sgcGF0dGVybiBpbiByZWNlaXZlZCBmcmFtZS4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgQUNLIG1hdGNoaW5nIGFjY2VsZXJhdG9yIG1hdGNoZWQgQUNLIHBhdHRlcm4uCisgKiBAcmV0dmFsICBmYWxzZSAgQUNLIG1hdGNoaW5nIGFjY2VsZXJhdG9yIGRpZCBub3QgbWF0Y2ggQUNLIHBhdHRlcm4uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBhY2tfaXNfbWF0Y2hlZCh2b2lkKQoreworICAgIHJldHVybiAobnJmX3JhZGlvX2V2ZW50X2dldChOUkZfUkFESU9fRVZFTlRfTUhSTUFUQ0gpKSAmJgorICAgICAgICAgICAgKG5yZl9yYWRpb19jcmNfc3RhdHVzX2dldCgpID09IE5SRl9SQURJT19DUkNfU1RBVFVTX09LKTsKK30KKworLy8vIFN0YXJ0IHJlY2VpdmVyIHRvIHJlY2VpdmUgZGF0YSBhZnRlciByZWNlaXZpbmcgb2YgQUNLIGZyYW1lLgorc3RhdGljIGlubGluZSB2b2lkIGZyYW1lX3J4X3N0YXJ0X2FmdGVyX2Fja19yeCh2b2lkKQoreworICAgIGFja19tYXRjaGluZ19kaXNhYmxlKCk7CisgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfRElTQUJMRSk7IC8vIEVycmF0YSBbMTEwXQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBSQURJTyBwZXJpcGhlcmFsIG1hbmFnZW1lbnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8vIEluaXRpYWxpemUgcmFkaW8gcGVyaXBoZXJhbAorc3RhdGljIHZvaWQgbnJmX3JhZGlvX2luaXQodm9pZCkKK3sKKyAgICBucmZfcmFkaW9fbW9kZV9zZXQoTlJGX1JBRElPX01PREVfSUVFRTgwMjE1NF8yNTBLQklUKTsKKyAgICBucmZfcmFkaW9fY29uZmlnX2xlbmd0aF9maWVsZF9sZW5ndGhfc2V0KDgpOworICAgIG5yZl9yYWRpb19jb25maWdfcHJlYW1ibGVfbGVuZ3RoX3NldChOUkZfUkFESU9fUFJFQU1CTEVfTEVOR1RIXzMyQklUX1pFUk8pOworICAgIG5yZl9yYWRpb19jb25maWdfY3JjX2luY2x1ZGVkX3NldCh0cnVlKTsKKyAgICBucmZfcmFkaW9fY29uZmlnX21heF9sZW5ndGhfc2V0KE1BWF9QQUNLRVRfU0laRSk7CisKKyAgICAvLyBDb25maWd1cmUgQ1JDCisgICAgbnJmX3JhZGlvX2NyY19sZW5ndGhfc2V0KENSQ19MRU5HVEgpOworICAgIG5yZl9yYWRpb19jcmNfaW5jbHVkZXNfYWRkcmVzc19zZXQoTlJGX1JBRElPX0NSQ19JTkNMVURFU19BRERSX0lFRUU4MDIxNTQpOworICAgIG5yZl9yYWRpb19jcmNfcG9seW5vbWluYWxfc2V0KENSQ19QT0xZTk9NSUFMKTsKKworICAgIC8vIENvbmZpZ3VyZSBDQ0EKKyAgICBucmZfcmFkaW9fY2NhX21vZGVfc2V0KFJBRElPX0NDQV9NT0RFKTsKKyAgICBucmZfcmFkaW9fY2NhX2VkX3RocmVzaG9sZF9zZXQoUkFESU9fQ0NBX0VEX1RIUkVTSE9MRCk7CisgICAgbnJmX3JhZGlvX2NjYV9jb3JyX3RocmVzaG9sZF9zZXQoUkFESU9fQ0NBX0NPUlJfVEhSRVNIT0xEKTsKKyAgICBucmZfcmFkaW9fY2NhX2NvcnJfY291bnRlcl9zZXQoUkFESU9fQ0NBX0NPUlJfTElNSVQpOworCisgICAgLy8gQ29uZmlndXJlIE1BQyBIZWFkZXIgTWF0Y2ggVW5pdAorICAgIG5yZl9yYWRpb19taG11X3NlYXJjaF9wYXR0ZXJuX3NldCgwKTsKKyAgICBucmZfcmFkaW9fbWhtdV9wYXR0ZXJuX21hc2tfc2V0KE1ITVVfTUFTSyk7CisKKyAgICBucmZfcmFkaW9faW50X2VuYWJsZShOUkZfUkFESU9fSU5UX0ZSQU1FU1RBUlRfTUFTSyk7CisgICAgbnJmX3JhZGlvX2ludF9lbmFibGUoTlJGX1JBRElPX0lOVF9FTkRfTUFTSyk7CisgICAgbnJmX3JhZGlvX2ludF9lbmFibGUoTlJGX1JBRElPX0lOVF9ESVNBQkxFRF9NQVNLKTsKKyNpZiAhUkFESU9fU0hPUlRfQ0NBSURMRV9UWEVOCisgICAgbnJmX3JhZGlvX2ludF9lbmFibGUoTlJGX1JBRElPX0lOVF9DQ0FJRExFX01BU0spOworI2VuZGlmCisgICAgbnJmX3JhZGlvX2ludF9lbmFibGUoTlJGX1JBRElPX0lOVF9DQ0FCVVNZX01BU0spOworICAgIG5yZl9yYWRpb19pbnRfZW5hYmxlKE5SRl9SQURJT19JTlRfUkVBRFlfTUFTSyk7CisgICAgbnJmX3JhZGlvX2ludF9lbmFibGUoTlJGX1JBRElPX0lOVF9CQ01BVENIX01BU0spOworICAgIG5yZl9yYWRpb19pbnRfZW5hYmxlKE5SRl9SQURJT19JTlRfRURFTkRfTUFTSyk7Cit9CisKKy8vLyBSZXNldCByYWRpbyBwZXJpcGhlcmFsCitzdGF0aWMgdm9pZCBucmZfcmFkaW9fcmVzZXQodm9pZCkKK3sKKyAgICBucmZfcmFkaW9fcG93ZXJfc2V0KGZhbHNlKTsKKyAgICBucmZfcmFkaW9fcG93ZXJfc2V0KHRydWUpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfUkFESU9fUkVTRVQsIDApOworfQorCisvLy8gSW5pdGlhbGl6ZSBpbnRlcnJ1cHRzIGZvciByYWRpbyBwZXJpcGhlcmFsCitzdGF0aWMgdm9pZCBpcnFfaW5pdCh2b2lkKQoreworICAgIE5WSUNfU2V0UHJpb3JpdHkoUkFESU9fSVJRbiwgUkFESU9fSVJRX1BSSU9SSVRZKTsKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShSQURJT19JUlFuKTsKKyAgICBOVklDX0VuYWJsZUlSUShSQURJT19JUlFuKTsKK30KKworLy8vIERlaW5pdGlhbGl6ZSBpbnRlcnJ1cHRzIGZvciByYWRpbyBwZXJpcGhlcmFsCitzdGF0aWMgdm9pZCBpcnFfZGVpbml0KHZvaWQpCit7CisgICAgTlZJQ19EaXNhYmxlSVJRKFJBRElPX0lSUW4pOworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFJBRElPX0lSUW4pOworICAgIE5WSUNfU2V0UHJpb3JpdHkoUkFESU9fSVJRbiwgMCk7CisKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gRW5lcmd5IGRldGVjdGlvbiBtYW5hZ2VtZW50CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKiBTZXR1cCBuZXh0IGl0ZXJhdGlvbiBvZiBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZS4KKyAqCisgKiAgRW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUgaXMgcGVyZm9ybWVkIGluIGl0ZXJhdGlvbnMgdG8gbWFrZSBzdXJlIGl0IGlzIHBlcmZvcm1lZCBmb3IgcmVxdWVzdGVkCisgKiAgdGltZSByZWdhcmRsZXNzIHJhZGlvIGFyYml0cmF0aW9uLgorICoKKyAqICBAcGFyYW1baW5dICBSZW1haW5pbmcgdGltZSBvZiBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZSBbdXNdLgorICoKKyAqICBAcmV0dmFsICB0cnVlICAgTmV4dCBpdGVyYXRpb24gb2YgZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUgd2lsbCBiZSBwZXJmb3JtZWQgbm93LgorICogIEByZXR2YWwgIGZhbHNlICBOZXh0IGl0ZXJhdGlvbiBvZiBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZSB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgbm93IGR1ZSB0bworICogICAgICAgICAgICAgICAgICBlbmRpbmcgdGltZXNsb3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBlZF9pdGVyX3NldHVwKHVpbnQzMl90IHRpbWVfdXMpCit7CisgICAgdWludDMyX3QgdXNfbGVmdF9pbl90aW1lc2xvdCA9IG5yZl9yYWFsX3RpbWVzbG90X3VzX2xlZnRfZ2V0KCk7CisgICAgdWludDMyX3QgbmV4dF9lZF9pdGVycyAgICAgICA9IHVzX2xlZnRfaW5fdGltZXNsb3QgLyBFRF9JVEVSX0RVUkFUSU9OOworCisgICAgaWYgKG5leHRfZWRfaXRlcnMgPiBFRF9JVEVSU19PVkVSSEVBRCkKKyAgICB7CisgICAgICAgIG5leHRfZWRfaXRlcnMgLT0gRURfSVRFUlNfT1ZFUkhFQUQ7CisKKyAgICAgICAgaWYgKCh0aW1lX3VzIC8gRURfSVRFUl9EVVJBVElPTikgPCBuZXh0X2VkX2l0ZXJzKQorICAgICAgICB7CisgICAgICAgICAgICBtX2VkX3RpbWVfbGVmdCA9IDA7CisgICAgICAgICAgICBuZXh0X2VkX2l0ZXJzICA9IHRpbWVfdXMgLyBFRF9JVEVSX0RVUkFUSU9OOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbV9lZF90aW1lX2xlZnQgPSB0aW1lX3VzIC0gKG5leHRfZWRfaXRlcnMgKiBFRF9JVEVSX0RVUkFUSU9OKTsKKyAgICAgICAgICAgIG5leHRfZWRfaXRlcnMtLTsgLy8gVGltZSBvZiBFRCBwcm9jZWR1cmUgaXMgKG5leHRfZWRfaXRlcnMgKyAxKSAqIDEyOHVzCisgICAgICAgIH0KKworICAgICAgICBucmZfcmFkaW9fZWRfbG9vcF9jb3VudF9zZXQobmV4dF9lZF9pdGVycyk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlycV9kZWluaXQoKTsKKyAgICAgICAgbnJmX3JhZGlvX3Jlc2V0KCk7CisKKyAgICAgICAgbV9lZF90aW1lX2xlZnQgPSB0aW1lX3VzOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gUkFBTCBub3RpZmljYXRpb24gaGFuZGxlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBucmZfcmFhbF90aW1lc2xvdF9zdGFydGVkKHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX1RJTUVTTE9UX1NUQVJURUQpOworCisgICAgbnJmX3JhZGlvX3Jlc2V0KCk7CisgICAgbnJmX3JhZGlvX2luaXQoKTsKKyAgICBpcnFfaW5pdCgpOworCisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworCisgICAgY2hhbm5lbF9zZXQobnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfY2hhbm5lbF9nZXQoKSk7CisKKyAgICBzd2l0Y2ggKG1fc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1Q6CisgICAgICAgICAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgICAgICAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX0RJU0FCTEUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9FRDoKKyAgICAgICAgICAgIGlmIChlZF9pdGVyX3NldHVwKG1fZWRfdGltZV9sZWZ0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX0RJU0FCTEUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9USU1FU0xPVF9TVEFSVEVEKTsKK30KKwordm9pZCBucmZfcmFhbF90aW1lc2xvdF9lbmRlZCh2b2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9USU1FU0xPVF9FTkRFRCk7CisKKyAgICBpcnFfZGVpbml0KCk7CisgICAgbnJmX3JhZGlvX3Jlc2V0KCk7CisKKyAgICBzd2l0Y2ggKG1fc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX0NDQToKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9UWF9GUkFNRToKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9BQ0s6CisgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV9idXN5X2NoYW5uZWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1fc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX0RJU0FCTElORzoKKyAgICAgICAgICAgIHNsZWVwX3N0YXJ0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1NMRUVQOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1Q6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfRUQ6CisgICAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5LgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0hFQURFUjoKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9GUkFNRToKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9UWF9BQ0s6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfQ0NBOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0ZSQU1FOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0FDSzoKKyAgICAgICAgICAgIG11dGV4X2xvY2soKTsKKyAgICAgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1RJTUVTTE9UX0VOREVEKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBSQURJTyBpbnRlcnJ1cHQgaGFuZGxlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLy8gVGhpcyBldmVudCBpcyBoYW5kbGVkIHdoZW4gdGhlIHJhZGlvIHN0YXJ0cyByZWNlaXZpbmcgYSBmcmFtZS4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZnJhbWVzdGFydF9zdGF0ZV93YWl0aW5nX3J4X2ZyYW1lKHZvaWQpCit7CisgICAgaWYgKG11dGV4X2xvY2soKSkKKyAgICB7CisgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9SWF9IRUFERVIpOworICAgICAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfUlhfSU5JVElBTCk7CisKKyAgICAgICAgaWYgKChtcF9jdXJyZW50X3J4X2J1ZmZlci0+cHNkdVswXSA8IEFDS19MRU5HVEgpIHx8CisgICAgICAgICAgICAobXBfY3VycmVudF9yeF9idWZmZXItPnBzZHVbMF0gPiBNQVhfUEFDS0VUX1NJWkUpKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvX2Fja19hYm9ydChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfQkNNQVRDSCk7CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0VORCk7CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfUlNTSVNUQVJUKTsKKworICAgICAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9zdGFydGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKG5yZl9yYWRpb19zdGF0ZV9nZXQoKSkKKyAgICB7CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYOgorCisgICAgICAgIC8vIElmIHRoZSByZWNlaXZlZCBmcmFtZSB3YXMgc2hvcnQgdGhlIHJhZGlvIGNvdWxkIGhhdmUgY2hhbmdlZCBpdCdzIHN0YXRlLgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9JRExFOgorCisgICAgICAgIC8vIFRoZSByYWRpbyBjb3VsZCBoYXZlIGNoYW5nZWQgc3RhdGUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgZHVlIHRvIGVuYWJsZWQgc2hvcnRzLgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9ESVNBQkxFOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9ESVNBQkxFRDoKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfVFhfUlU6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBJZiBzb21ldGhpbmcgaGFkIHN0b3BwZWQgdGhlIENQVSB0b28gbG9uZy4gVHJ5IHRvIHJlY292ZXIgcmFkaW8gc3RhdGUuCisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1RYX0lETEU6CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1RYX0RJU0FCTEU6CisgICAgICAgICAgICBhdXRvX2Fja19hYm9ydChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfQkNNQVRDSCk7CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0VORCk7CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgIH0KK30KKworLy8vIFRoaXMgZXZlbnQgaXMgaGFuZGxlZCB3aGVuIHRoZSByYWRpbyBzdGFydHMgcmVjZWl2aW5nIGFuIEFDSyBmcmFtZS4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZnJhbWVzdGFydF9zdGF0ZV9yeF9hY2sodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfSURMRSk7CisKKyAgICBpZiAoKG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1WzBdIDwgQUNLX0xFTkdUSCkgfHwKKyAgICAgICAgKG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1WzBdID4gTUFYX1BBQ0tFVF9TSVpFKSkKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X2J1c3lfY2hhbm5lbCgpOworCisgICAgICAgIGZyYW1lX3J4X3N0YXJ0X2FmdGVyX2Fja19yeCgpOworICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0VORCk7IC8vIEluIGNhc2UgZnJhbWUgZW5kZWQgYmVmb3JlIHRhc2sgRElTQUJMRQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX1JTU0lTVEFSVCk7CisgICAgfQorfQorCisvLy8gVGhpcyBldmVudCBpcyBoYW5kbGVkIHdoZW4gdGhlIHJhZGlvIHN0YXJ0cyB0cmFuc21pdHRpbmcgYSByZXF1ZXN0ZWQgZnJhbWUuCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2ZyYW1lc3RhcnRfc3RhdGVfdHhfZnJhbWUodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3R4X3N0YXJ0ZWQoKTsKK30KKworLy8vIFRoaXMgZXZlbnQgaXMgaGFuZGxlZCB3aGVuIE1IUiBpcyByZWNlaXZlZAorc3RhdGljIGlubGluZSB2b2lkIGlycV9iY21hdGNoX21ocih2b2lkKQoreworICAgIC8vIFZlcmlmeSBpZiB0aW1lIHNsb3QgZm9yIHJlY2VpdmluZyBpcyBhdmFpbGFibGUuCisgICAgaWYgKG5yZl9yYWFsX3RpbWVzbG90X3JlcXVlc3QobnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9kdXJhdGlvbl9nZXQoCisgICAgICAgICAgICBtcF9jdXJyZW50X3J4X2J1ZmZlci0+cHNkdVswXSwKKyAgICAgICAgICAgIGFja19pc19yZXF1ZXN0ZWQobXBfY3VycmVudF9yeF9idWZmZXItPnBzZHUpKSkpCisgICAgeworICAgICAgICAvLyBDaGVjayBGcmFtZSBDb250cm9sIGZpZWxkLgorICAgICAgICBzd2l0Y2ggKG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1W0ZSQU1FX1RZUEVfT0ZGU0VUXSAmIEZSQU1FX1RZUEVfTUFTSykKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBGUkFNRV9UWVBFX0JFQUNPTjoKKyAgICAgICAgICAgICAgICAvLyBCZWFjb24gaXMgYnJvYWRjYXN0IGZyYW1lLgorICAgICAgICAgICAgICAgIG1fZmxhZ3MucHJldmVudF9hY2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfUlhfRlJBTUUpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEZSQU1FX1RZUEVfREFUQToKKyAgICAgICAgICAgIGNhc2UgRlJBTUVfVFlQRV9DT01NQU5EOgorCisgICAgICAgICAgICAgICAgLy8gRm9yIGRhdGEgb3IgY29tbWFuZCBjaGVjayBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICAgICAgICAgICAgICAgIHN3aXRjaCAobXBfY3VycmVudF9yeF9idWZmZXItPnBzZHVbREVTVF9BRERSX1RZUEVfT0ZGU0VUXSAmCisgICAgICAgICAgICAgICAgICAgICAgICBERVNUX0FERFJfVFlQRV9NQVNLKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBERVNUX0FERFJfVFlQRV9TSE9SVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19iY2Nfc2V0KEJDQ19TSE9SVF9BRERSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgREVTVF9BRERSX1RZUEVfRVhURU5ERUQ6CisgICAgICAgICAgICAgICAgICAgICAgICBucmZfcmFkaW9fYmNjX3NldChCQ0NfRVhURU5ERURfQUREUik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgICAgICAgICAgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0VORCk7CisgICAgICAgICAgICAgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKworICAgICAgICAgICAgICAgIC8vIEZvciBBQ0sgYW5kIG90aGVyIHR5cGVzOiBpbiBwcm9taXNjdW91cyBtb2RlIGFjY2VwdCBpdCBhcyBicm9hZGNhc3Q7CisgICAgICAgICAgICAgICAgLy8gaW4gbm9ybWFsIG1vZGUgZHJvcCB0aGUgZnJhbWUuCisgICAgICAgICAgICAgICAgaWYgKG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3Byb21pc2N1b3VzX2dldCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9mbGFncy5wcmV2ZW50X2FjayA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9SWF9GUkFNRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgICAgICAgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0VORCk7CisgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpcnFfZGVpbml0KCk7CisgICAgICAgIG5yZl9yYWRpb19yZXNldCgpOworCisgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UKTsKKyAgICB9Cit9CisKKy8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIGRlc3RpbmF0aW9uIGFkZHJlc3MgZmllbGRzIGFyZSByZWNlaXZlZC4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfYmNtYXRjaF9hZGRyZXNzKHZvaWQpCit7CisgICAgaWYgKG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2Rlc3RfYWRkcl9tYXRjaGVzKG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1KSkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MucHJldmVudF9hY2sgPSBmYWxzZTsKKyAgICAgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1JYX0ZSQU1FKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3Byb21pc2N1b3VzX2dldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtX2ZsYWdzLnByZXZlbnRfYWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9SWF9GUkFNRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvX2Fja19hYm9ydChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRU5EKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworICAgICAgICB9CisgICAgfQorfQorCisvKiogVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgdHdpY2UgZHVyaW5nIGZyYW1lIHJlY2VwdGlvbjoKKyAqICB3aGVuIE1IUiBpcyByZWNlaXZlZCBhbmQgd2hlbiBkZXN0aW5hdGlvbiBhZGRyZXNzIGZpZWxkcyBhcmUgcmVjZWl2ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfYmNtYXRjaF9zdGF0ZV9yeF9oZWFkZXIodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfUlhfSU5JVElBTCk7CisKKyAgICBzd2l0Y2ggKG5yZl9yYWRpb19zdGF0ZV9nZXQoKSkKKyAgICB7CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9JRExFOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9ESVNBQkxFOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9ESVNBQkxFRDoKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfVFhfUlU6ICAgICAgLy8gQSBsb3Qgb2Ygc3RhdGVzIGR1ZSB0byBzaG9ydHMuCisKKyAgICAgICAgICAgIHN3aXRjaCAobnJmX3JhZGlvX2JjY19nZXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIEJDQ19JTklUOiAvLyBSZWNlaXZlZCBNSFIKKyAgICAgICAgICAgICAgICAgICAgaXJxX2JjbWF0Y2hfbWhyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBCQ0NfU0hPUlRfQUREUjogICAgIC8vIFJlY2VpdmVkIHNob3J0IGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAgICAgICAgICAgICAgICBjYXNlIEJDQ19FWFRFTkRFRF9BRERSOiAgLy8gUmVjZWl2ZWQgZXh0ZW5kZWQgZGVzdGluYXRpb24gYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBkZXN0aW5hdGlvbiBhZGRyZXNzIGR1cmluZyBzZWNvbmQgbWF0Y2guCisgICAgICAgICAgICAgICAgICAgIGlycV9iY21hdGNoX2FkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9UWF9JRExFOgorICAgICAgICAgICAgLy8gU29tZXRoaW5nIGhhZCBzdG9wcGVkIHRoZSBDUFUgdG9vIGxvbmcuIFN0YXJ0IHJlY2VpdmluZyBhZ2Fpbi4KKyAgICAgICAgICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9FTkQpOworICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9SRUFEWSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9Cit9CisKKy8qKiBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIHJhZGlvIHJlY2VpdmVzIGludmFsaWQgZnJhbWUgd2l0aCBsZW5ndGggc2V0IHRvIDAgb3Igc3RhcnRlZAorICogIHJlY2VpdmluZyBhIGZyYW1lIGFmdGVyIG90aGVyIHByb2NlZHVyZSBsb2NrZWQgbXV0ZXguCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZW5kX3N0YXRlX3dhaXRpbmdfcnhfZnJhbWUodm9pZCkKK3sKKyAgICAvLyBSYWRpbyBzdGF0ZSBpcyBub3QgYXNzZXJ0ZWQgaGVyZS4gSXQgY2FuIGJlIGEgbG90IG9mIHN0YXRlcyBkdWUgdG8gc2hvcnRzLgorICAgIGlmIChtcF9jdXJyZW50X3J4X2J1ZmZlci0+cHNkdVswXSA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gSWYgbGVuZ3RoIG9mIHRoZSBmcmFtZSBpcyAwIHRoZXJlIHdhcyBubyBGUkFNRVNUQVJUIGV2ZW50LiBMb2NrIG11dGV4IG5vdyBhbmQgYWJvcnQgc2VuZGluZyBBQ0suCisgICAgICAgIGlmIChtdXRleF9sb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19SWF9JTklUSUFMKTsKKyAgICAgICAgICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9SRUFEWSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gRG8gbm90aGluZy4gV2hvZXZlciB0b29rIG11dGV4IHNoYWxsIHN0b3Agc2VuZGluZyBBQ0suCisgICAgfQorfQorCisvLy8gVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgaWYgZnJhbWUgYmVpbmcgcmVjZWl2ZWQgaXMgc2hvcnRlciB0aGFuIGV4cGVjdGVkIE1BQyBoZWFkZXIgbGVuZ3RoLgorc3RhdGljIGlubGluZSB2b2lkIGlycV9lbmRfc3RhdGVfcnhfaGVhZGVyKHZvaWQpCit7CisgICAgLy8gRnJhbWUgZW5kZWQgYmVmb3JlIGhlYWRlciB3YXMgcmVjZWl2ZWQuCisgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9SRUFEWSk7Cit9CisKKy8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIHJhZGlvIHBlcmlwaGVyYWwgZW5kcyByZWNlaXZpbmcgb2YgYSBjb21wbGV0ZSBmcmFtZS4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZW5kX3N0YXRlX3J4X2ZyYW1lKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX1JYX0lOSVRJQUwpOworCisgICAgc3dpdGNoIChucmZfcmFkaW9fc3RhdGVfZ2V0KCkpCisgICAgeworICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9JRExFOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9ESVNBQkxFOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9ESVNBQkxFRDoKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfVFhfUlU6CisKKyAgICAgICAgICAgIGlmIChucmZfcmFkaW9fY3JjX3N0YXR1c19nZXQoKSA9PSBOUkZfUkFESU9fQ1JDX1NUQVRVU19PSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKCFhY2tfaXNfcmVxdWVzdGVkKG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCFucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9hdXRvX2Fja19nZXQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgbV9mbGFncy5wcmV2ZW50X2FjaykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgICAgICAgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKyAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRfZnJhbWVfbm90aWZ5KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFja19wcmVwYXJlKCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9UWF9BQ0spOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvX2Fja19hYm9ydChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICAgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfVFhfSURMRToKKyAgICAgICAgICAgIC8vIENQVSB3YXMgaG9sZCB0b28gbG9uZy4KKyAgICAgICAgICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9SRUFEWSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9Cit9CisKKy8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIHRoZSByYWRpbyBlbmRzIHRyYW5zbWlzc2lvbiBvZiBBQ0sgZnJhbWUuCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2VuZF9zdGF0ZV90eF9hY2sodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfVFhfQUNLKTsKKyAgICBzaG9ydHNfZGlzYWJsZSgpOworCisgICAgcmVjZWl2ZWRfZnJhbWVfbm90aWZ5KCk7CisKKyAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgLy8gUmVjZWl2ZXIgaXMgZW5hYmxlZCBieSBzaG9ydHMuCit9CisKKy8qKiBUaGlzIGV2ZW50IG1heSBvY2N1ciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRyYW5zbWlzc2lvbiBwcm9jZWR1cmUgKHRoZSBwcm9jZWR1cmUgYWxyZWFkeSBoYXMKKyAqICBkaXNhYmxlZCBzaG9ydHMpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2VuZF9zdGF0ZV9jY2Eodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfSURMRSk7Cit9CisKKy8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIHRoZSByYWRpbyBlbmRzIHRyYW5zbWlzc2lvbiBvZiBhIGZyYW1lLgorc3RhdGljIGlubGluZSB2b2lkIGlycV9lbmRfc3RhdGVfdHhfZnJhbWUodm9pZCkKK3sKKyAgICBzaG9ydHNfZGlzYWJsZSgpOworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKworICAgIGlmICghYWNrX2lzX3JlcXVlc3RlZChtcF90eF9kYXRhKSkKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X3RyYW5zbWl0dGVkKE5VTEwsIDAsIDApOworCisgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1JYX0FDSyk7CisKKyAgICAgICAgYWNrX21hdGNoaW5nX2VuYWJsZSgpOworICAgIH0KKworICAgIC8vIFRhc2sgRElTQUJMRSBpcyB0cmlnZ2VyZWQgYnkgc2hvcnRzLgorfQorCisvLy8gVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiB0aGUgcmFkaW8gZW5kcyByZWNlaXZpbmcgb2YgQUNLIGZyYW1lLgorc3RhdGljIGlubGluZSB2b2lkIGlycV9lbmRfc3RhdGVfcnhfYWNrKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworICAgIGFzc2VydChucmZfcmFkaW9fc3RhdGVfZ2V0KCkgPT0gTlJGX1JBRElPX1NUQVRFX1JYX0lETEUpOworCisgICAgaWYgKGFja19pc19tYXRjaGVkKCkpCisgICAgeworICAgICAgICBtcF9jdXJyZW50X3J4X2J1ZmZlci0+ZnJlZSA9IGZhbHNlOworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV90cmFuc21pdHRlZChtcF9jdXJyZW50X3J4X2J1ZmZlci0+cHNkdSwgICAgICAgICAgICAgICAgLy8gcHNkdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3NpX2xhc3RfbWVhc3VyZW1lbnRfZ2V0KCksICAgICAgICAgICAgICAgLy8gcnNzaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSWF9GUkFNRV9MUUkobXBfY3VycmVudF9yeF9idWZmZXItPnBzZHUpKTsgLy8gbHFpCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X2J1c3lfY2hhbm5lbCgpOworICAgIH0KKworICAgIGZyYW1lX3J4X3N0YXJ0X2FmdGVyX2Fja19yeCgpOworfQorCisvLy8gVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiByYWRpbyBwZXJpcGhlcmFsIGRpc2FibGVzIGluIG9yZGVyIHRvIGVudGVyIHNsZWVwIHN0YXRlLgorc3RhdGljIGlubGluZSB2b2lkIGlycV9kaXNhYmxlZF9zdGF0ZV9kaXNhYmxpbmcodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfSURMRSk7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zdGF0ZV9nZXQoKSA9PSBOUkZfUkFESU9fU1RBVEVfRElTQUJMRUQpOworICAgIHNsZWVwX3N0YXJ0KCk7Cit9CisKKy8qKiBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBkcml2ZXIgZW50ZXJzIHJlY2VpdmUgc3RhdGUuCisgKgorICogIFRoZSByYWRpbyBpcyBub3cgZGlzYWJsZWQgYW5kIHRoZSBkcml2ZXIgc3RhcnRzIGVuYWJsaW5nIHJlY2VpdmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2Rpc2FibGVkX3N0YXRlX3dhaXRpbmdfcnhfZnJhbWUodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfSURMRSk7CisKKyAgICB3aGlsZSAobnJmX3JhZGlvX3N0YXRlX2dldCgpID09IE5SRl9SQURJT19TVEFURV9UWF9ESVNBQkxFKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBldmVudCBjYW4gYmUgaGFuZGxlZCBpbiBUWERJU0FCTEUgc3RhdGUgZHVlIHRvIGRvdWJsZSBESVNBQkxFIGV2ZW50IChJQy0xNTg3OSkuCisgICAgICAgIC8vIFRoaXMgYnVzeSBsb29wIHdhaXRzIHRvIHRoZSBlbmQgb2YgdGhpcyBzdGF0ZS4KKyAgICB9CisKKyAgICBhc3NlcnQobnJmX3JhZGlvX3N0YXRlX2dldCgpID09IE5SRl9SQURJT19TVEFURV9ESVNBQkxFRCk7CisKKyAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX1JYRU4pOworICAgIG11dGV4X3VubG9jaygpOworCisgICAgcnhfYnVmZmVyX2luX3VzZV9zZXQobnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJfZnJlZV9maW5kKCkpOworICAgIHR4X3Bvd2VyX3NldChucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl90eF9wb3dlcl9nZXQoKSk7CisKKyAgICAvLyBDbGVhciB0aGlzIGV2ZW50IGFmdGVyIFJYRU4gdGFzayBpbiBjYXNlIGV2ZW50IGlzIHRyaWdnZXJlZCBqdXN0IGJlZm9yZS4KKyAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0RJU0FCTEVEKTsKK30KKworLyoqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIGluIGNhc2UgYm90aCBFTkQgYW5kIERJU0FCTEVEIGV2ZW50cyBhcmUgbm90aWZpZWQgYmV0d2VlbgorICogIGNoZWNraW5nIGlmIEVORCBldmVudCB3YXMgbm90aWZpZWQgYW5kIGNoZWNraW5nIGlmIERJU0FCTEVEIGV2ZW50IHdhcyBub3RpZmllZC4KKyAqCisgKiAgSW4gdGhpcyBpbnZhbGlkIGFuZCByYXJlIGNhc2UganVzdCBkcm9wIHJlY2VpdmVkIGZyYW1lLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2Rpc2FibGVkX3N0YXRlX3J4X2ZyYW1lKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19ldmVudF9nZXQoTlJGX1JBRElPX0VWRU5UX0VORCkpOworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19SWF9JTklUSUFMKTsKKworICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRU5EKTsKKyAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKK30KKworLyoqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIGR1cmluZyBhdXRvbWF0aWMgQUNLIHRyYW5zbWlzc2lvbi4KKyAqCisgKiAgUmVjZWl2ZXIgaXMgZGlzYWJsZWQgYW5kIHRyYW5zbWl0dGVyIGlzIGJlaW5nIGVuYWJsZWQgYnkgc2hvcnRzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2Rpc2FibGVkX3N0YXRlX3R4X2Fjayh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19SWF9JTklUSUFMKTsKKworICAgIHNob3J0c19yeF9mb2xsb3dpbmdfc2V0KCk7CisgICAgYWNrX3BlbmRpbmdfYml0X3NldCgpOworCisgICAgLy8gSUMtMTU4NzkKKyAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0RJU0FCTEVEKTsKKworICAgIGlmIChucmZfcmFkaW9fc3RhdGVfZ2V0KCkgPT0gTlJGX1JBRElPX1NUQVRFX1RYX0lETEUpCisgICAgeworICAgICAgICAvLyBDUFUgd2FzIGhvbGQgdG9vIGxvbmcuCisgICAgICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKyAgICB9Cit9CisKKy8qKiBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCBiZWZvcmUgQ0NBIHByb2NlZHVyZSBzdGFydHMuCisgKgorICogIFRoZSByYWRpbyBpcyBkaXNhYmxlZCBhbmQgdGhlIGRyaXZlcnMgZW5hYmxlcyByZWNlaXZlciBpbiBvcmRlciB0byBzdGFydCBDQ0EgcHJvY2VkdXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2Rpc2FibGVkX3N0YXRlX2NjYSh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKyAgICBhc3NlcnQobnJmX3JhZGlvX3N0YXRlX2dldCgpID09IE5SRl9SQURJT19TVEFURV9ESVNBQkxFRCk7CisgICAgbnJmX3JhZGlvX3Rhc2tfdHJpZ2dlcihOUkZfUkFESU9fVEFTS19SWEVOKTsKK30KKworLyoqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIGJlZm9yZSB0cmFuc21pc3Npb24gb2YgYSBmcmFtZSBzdGFydHMuCisgKgorICogIFRoZSByYWRpbyBpcyBkaXNhYmxlZCBhbmQgZW5hYmxpbmcgdHJhbnNtaXR0ZXIgaXMgcmVxdWVzdGVkIGJ5IHNob3J0cyBvciBieSB0aGUgZHJpdmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2Rpc2FibGVkX3N0YXRlX3R4X2ZyYW1lKHZvaWQpCit7CisgICAgaWYgKG5yZl9yYWRpb19zdGF0ZV9nZXQoKSA9PSBOUkZfUkFESU9fU1RBVEVfRElTQUJMRUQpCisgICAgeworICAgICAgICBzaG9ydHNfdHhfZnJhbWVfc2V0KCk7CisgICAgICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfVFhFTik7CisgICAgfQorCisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX1RYX0ZSQU1FKTsKK30KKworLyoqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gcmFkaW8gaXMgZGlzYWJsZWQgYWZ0ZXIgdHJhbnNtaXNzaW9uIG9mIGEgZnJhbWUgd2l0aCBBQ0sgcmVxdWVzdC4KKyAqCisgKiAgVGhlIGRyaXZlciBlbmFibGVzIHJlY2VpdmVyIHRvIHJlY2VpdmUgQUNLIGZyYW1lLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2Rpc2FibGVkX3N0YXRlX3J4X2Fjayh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKyAgICBhc3NlcnQobnJmX3JhZGlvX3N0YXRlX2dldCgpID09IE5SRl9SQURJT19TVEFURV9ESVNBQkxFRCk7CisgICAgbnJmX3JhZGlvX3Rhc2tfdHJpZ2dlcihOUkZfUkFESU9fVEFTS19SWEVOKTsKKworICAgIGlmIChtcF9jdXJyZW50X3J4X2J1ZmZlciA9PSBOVUxMIHx8ICghbXBfY3VycmVudF9yeF9idWZmZXItPmZyZWUpKQorICAgIHsKKyAgICAgICAgcnhfYnVmZmVyX2luX3VzZV9zZXQobnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJfZnJlZV9maW5kKCkpOworICAgIH0KK30KKworLyoqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIGJlZm9yZSBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZS4KKyAqCisgKiAgVGhlIHJhZGlvIGlzIGRpc2FibGVkIGFuZCB0aGUgZHJpdmVyIGVuYWJsZXMgcmVjZWl2ZXIgaW4gb3JkZXIgdG8gc3RhcnQgZW5lcmd5IGRldGVjdGlvbgorICogIHByb2NlZHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlycV9kaXNhYmxlZF9zdGF0ZV9lZCh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKyAgICBhc3NlcnQobnJmX3JhZGlvX3N0YXRlX2dldCgpID09IE5SRl9SQURJT19TVEFURV9ESVNBQkxFRCk7CisgICAgbnJmX3JhZGlvX3Rhc2tfdHJpZ2dlcihOUkZfUkFESU9fVEFTS19SWEVOKTsKK30KKworLyoqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gcmVjZWl2ZXIgaXMgcmVhZHkgdG8gc3RhcnQgcmVjZWl2aW5nIGEgZnJhbWUuCisgKgorICogIERyaXZlciBjaGVja3MgaWYgYnVmZmVyIGZvciBhIGZyYW1lIGlzIGF2YWlsYWJsZSBhbmQgc3RhcnRzIHJlY2VpdmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX3JlYWR5X3N0YXRlX3dhaXRpbmdfcnhfZnJhbWUodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfSURMRSk7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zdGF0ZV9nZXQoKSA9PSBOUkZfUkFESU9fU1RBVEVfUlhfSURMRSk7CisKKyAgICBpZiAoKG1wX2N1cnJlbnRfcnhfYnVmZmVyICE9IE5VTEwpICYmIChtcF9jdXJyZW50X3J4X2J1ZmZlci0+ZnJlZSkpCisgICAgeworICAgICAgICBpZiAobXV0ZXhfbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBzaG9ydHNfcnhfaW5pdGlhbF9zZXQoKTsKKyAgICAgICAgICAgIHJ4X2ZyYW1lX3N0YXJ0KCk7CisKKyAgICAgICAgICAgIG11dGV4X3VubG9jaygpOworICAgICAgICB9CisgICAgfQorfQorCisvKiogVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiB0cmFuc21pdHRlciBpcyByZWFkeSB0byB0cmFuc21pdCBBQ0sgZnJhbWUuCisgKgorICogIFRyYW5zbWlzc2lvbiBpcyBzdGFydGVkIGJ5IHNob3J0cy4gVGhlIGRyaXZlciBzZXRzIHNob3J0cyB0byBncmFjZWZ1bGx5IGVuZCB0cmFuc21pc3Npb24gb2YgQUNLLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX3JlYWR5X3N0YXRlX3R4X2Fjayh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19SWF9GT0xMT1dJTkcpOworICAgIHNob3J0c190eF9hY2tfc2V0KCk7Cit9CisKKy8qKiBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIHJlY2VpdmVyIGlzIHJlYWR5IHRvIHN0YXJ0IENDQSBwcm9jZWR1cmUuCisgKgorICogIFRoZSBkcml2ZXIgcHJlcGFyZXMgZm9yIHRyYW5zbWlzc2lvbiBhbmQgc3RhcnRzIENDQSBwcm9jZWR1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfcmVhZHlfc3RhdGVfY2NhKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworICAgIGFzc2VydChucmZfcmFkaW9fc3RhdGVfZ2V0KCkgPT0gTlJGX1JBRElPX1NUQVRFX1JYX0lETEUpOworCisgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1RYX0ZSQU1FKTsKKworICAgIHNob3J0c190eF9mcmFtZV9zZXQoKTsKKyAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX0NDQVNUQVJUKTsKK30KKworLyoqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gdHJhbnNtaXR0ZXIgaXMgcmVhZHkgdG8gdHJhbnNtaXQgYSBmcmFtZS4KKyAqCisgKiAgVHJhbnNtaXNzaW9uIGlzIHN0YXJ0ZWQgYnkgc2hvcnRzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX3JlYWR5X3N0YXRlX3R4X2ZyYW1lKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX1RYX0ZSQU1FKTsKK30KKworLy8vIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gcmVjZWl2ZXIgaXMgcmVhZHkgdG8gcmVjZWl2ZSBhbiBBQ0sgZnJhbWUuCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX3JlYWR5X3N0YXRlX3J4X2Fjayh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKyAgICBhc3NlcnQobnJmX3JhZGlvX3N0YXRlX2dldCgpID09IE5SRl9SQURJT19TVEFURV9SWF9JRExFKTsKKworICAgIGlmIChtcF9jdXJyZW50X3J4X2J1ZmZlciA9PSBOVUxMIHx8ICghbXBfY3VycmVudF9yeF9idWZmZXItPmZyZWUpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfYnVzeV9jaGFubmVsKCk7CisgICAgICAgIGZyYW1lX3J4X3N0YXJ0X2FmdGVyX2Fja19yeCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByeF9zdGFydCgpOworICAgIH0KK30KKworLy8vIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gcmVjZWl2ZXIgaXMgcmVhZHkgdG8gc3RhcnQgZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUuCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX3JlYWR5X3N0YXRlX2VkKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworICAgIGFzc2VydChucmZfcmFkaW9fc3RhdGVfZ2V0KCkgPT0gTlJGX1JBRElPX1NUQVRFX1JYX0lETEUpOworICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfRURTVEFSVCk7Cit9CisKKyNpZiAhUkFESU9fU0hPUlRfQ0NBSURMRV9UWEVOCisvLy8gVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBDQ0EgcmVwb3J0cyB0aGF0IGNoYW5uZWwgaXMgaWRsZS4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfY2NhaWRsZSh2b2lkKQoreworICAgIGFzc2VydChtX3N0YXRlID09IFJBRElPX1NUQVRFX1RYX0ZSQU1FKTsKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfVFhfRlJBTUUpOworCisgICAgbnJmX3JhZGlvX3Rhc2tfdHJpZ2dlcihOUkZfUkFESU9fVEFTS19ESVNBQkxFKTsKK30KKyNlbmRpZiAvLyBSQURJT19TSE9SVF9DQ0FJRExFX1RYRU4KKworLy8vIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gQ0NBIHJlcG9ydHMgYnVzeSBjaGFubmVsIHByaW9yIHRvIHRyYW5zbWlzc2lvbi4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfY2NhYnVzeV9zdGF0ZV90eF9mcmFtZSh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19UWF9GUkFNRSk7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zdGF0ZV9nZXQoKSA9PSBOUkZfUkFESU9fU1RBVEVfUlhfSURMRSk7CisKKyAgICBzaG9ydHNfZGlzYWJsZSgpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfYnVzeV9jaGFubmVsKCk7CisKKyAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgbnJmX3JhZGlvX3Rhc2tfdHJpZ2dlcihOUkZfUkFESU9fVEFTS19ESVNBQkxFKTsKK30KKworLy8vIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUgZW5kcy4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZWRlbmQodm9pZCkKK3sKKyAgICBhc3NlcnQobV9zdGF0ZSA9PSBSQURJT19TVEFURV9FRCk7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zdGF0ZV9nZXQoKSA9PSBOUkZfUkFESU9fU1RBVEVfUlhfSURMRSk7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworCisgICAgdWludDMyX3QgcmVzdWx0ID0gbnJmX3JhZGlvX2VkX3NhbXBsZV9nZXQoKTsKKyAgICBtX2VkX3Jlc3VsdCAgICAgPSByZXN1bHQgPiBtX2VkX3Jlc3VsdCA/IHJlc3VsdCA6IG1fZWRfcmVzdWx0OworCisgICAgaWYgKG1fZWRfdGltZV9sZWZ0KQorICAgIHsKKyAgICAgICAgaWYgKGVkX2l0ZXJfc2V0dXAobV9lZF90aW1lX2xlZnQpKQorICAgICAgICB7CisgICAgICAgICAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX0VEU1RBUlQpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X2VuZXJneV9kZXRlY3RlZChtX2VkX3Jlc3VsdCk7CisKKyAgICAgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgICAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX0RJU0FCTEUpOworICAgIH0KK30KKworLy8vIEhhbmRsZXIgb2YgcmFkaW8gaW50ZXJydXB0cy4KK3ZvaWQgUkFESU9fSVJRSGFuZGxlcih2b2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9JUlFfSEFORExFUik7CisKKyAgICBpZiAobnJmX3JhZGlvX2V2ZW50X2dldChOUkZfUkFESU9fRVZFTlRfRlJBTUVTVEFSVCkpCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fRVZFTlRfRlJBTUVTVEFSVCk7CisgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRlJBTUVTVEFSVCk7CisKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUU6CisgICAgICAgICAgICAgICAgaXJxX2ZyYW1lc3RhcnRfc3RhdGVfd2FpdGluZ19yeF9mcmFtZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0FDSzoKKyAgICAgICAgICAgICAgICBpcnFfZnJhbWVzdGFydF9zdGF0ZV9yeF9hY2soKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9UWF9GUkFNRToKKyAgICAgICAgICAgICAgICBpcnFfZnJhbWVzdGFydF9zdGF0ZV90eF9mcmFtZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0FDSzoKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfQ0NBOiAvLyBUaGlzIGNvdWxkIGhhcHBlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRyYW5zbWlzc2lvbiBwcm9jZWR1cmUuCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1Q6CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX0VWRU5UX0ZSQU1FU1RBUlQpOworICAgIH0KKworICAgIC8vIENoZWNrIE1BQyBmcmFtZSBoZWFkZXIuCisgICAgaWYgKG5yZl9yYWRpb19ldmVudF9nZXQoTlJGX1JBRElPX0VWRU5UX0JDTUFUQ0gpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX0VWRU5UX0JDTUFUQ0gpOworICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0JDTUFUQ0gpOworCisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9IRUFERVI6CisgICAgICAgICAgICAgICAgaXJxX2JjbWF0Y2hfc3RhdGVfcnhfaGVhZGVyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRTogLy8gRGlkbid0IGxvY2sgbXV0ZXggLSBvdGhlciBwcm9jZWR1cmUgbWFuYWdlcyByYWRpby4KKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDogLy8gUmFkaW8gaXMgb3V0IG9mIHRpbWVzbG90IG5vdy4KKyAgICAgICAgICAgICAgICBhc3NlcnQobV9tdXRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX0VWRU5UX0JDTUFUQ0gpOworICAgIH0KKworICAgIGlmIChucmZfcmFkaW9fZXZlbnRfZ2V0KE5SRl9SQURJT19FVkVOVF9FTkQpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX0VWRU5UX0VORCk7CisgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRU5EKTsKKworICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRToKKyAgICAgICAgICAgICAgICBpcnFfZW5kX3N0YXRlX3dhaXRpbmdfcnhfZnJhbWUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9IRUFERVI6CisgICAgICAgICAgICAgICAgaXJxX2VuZF9zdGF0ZV9yeF9oZWFkZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9GUkFNRToKKyAgICAgICAgICAgICAgICBpcnFfZW5kX3N0YXRlX3J4X2ZyYW1lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfVFhfQUNLOgorICAgICAgICAgICAgICAgIGlycV9lbmRfc3RhdGVfdHhfYWNrKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfQ0NBOiAvLyBUaGlzIGNvdWxkIGhhcHBlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRyYW5zbWlzc2lvbiBwcm9jZWR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAodGhlIHByb2NlZHVyZSBhbHJlYWR5IGhhcyBkaXNhYmxlZCBzaG9ydHMpLgorICAgICAgICAgICAgICAgIGlycV9lbmRfc3RhdGVfY2NhKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfVFhfRlJBTUU6CisgICAgICAgICAgICAgICAgaXJxX2VuZF9zdGF0ZV90eF9mcmFtZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0FDSzogLy8gRW5kZWQgcmVjZWl2aW5nIG9mIEFDSy4KKyAgICAgICAgICAgICAgICBpcnFfZW5kX3N0YXRlX3J4X2FjaygpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1Q6CisgICAgICAgICAgICAgICAgLy8gRXhpdCBhcyBzb29uIGFzIHBvc3NpYmxlIHdoZW4gd2FpdGluZyBmb3IgdGltZXNsb3QuCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX0VWRU5UX0VORCk7CisgICAgfQorCisgICAgaWYgKG5yZl9yYWRpb19ldmVudF9nZXQoTlJGX1JBRElPX0VWRU5UX0RJU0FCTEVEKSkKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9FVkVOVF9ESVNBQkxFRCk7CisgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRElTQUJMRUQpOworCisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9ESVNBQkxJTkc6CisgICAgICAgICAgICAgICAgaXJxX2Rpc2FibGVkX3N0YXRlX2Rpc2FibGluZygpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUU6CisgICAgICAgICAgICAgICAgaXJxX2Rpc2FibGVkX3N0YXRlX3dhaXRpbmdfcnhfZnJhbWUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9IRUFERVI6CisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0ZSQU1FOgorICAgICAgICAgICAgICAgIGlycV9kaXNhYmxlZF9zdGF0ZV9yeF9mcmFtZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0FDSzoKKyAgICAgICAgICAgICAgICBpcnFfZGlzYWJsZWRfc3RhdGVfdHhfYWNrKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfQ0NBOgorICAgICAgICAgICAgICAgIGlycV9kaXNhYmxlZF9zdGF0ZV9jY2EoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9UWF9GUkFNRToKKyAgICAgICAgICAgICAgICBpcnFfZGlzYWJsZWRfc3RhdGVfdHhfZnJhbWUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9BQ0s6CisgICAgICAgICAgICAgICAgaXJxX2Rpc2FibGVkX3N0YXRlX3J4X2FjaygpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX0VEOgorICAgICAgICAgICAgICAgIGlycV9kaXNhYmxlZF9zdGF0ZV9lZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1Q6CisgICAgICAgICAgICAgICAgLy8gRXhpdCBhcyBzb29uIGFzIHBvc3NpYmxlIHdoZW4gd2FpdGluZyBmb3IgdGltZXNsb3QuCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX0VWRU5UX0RJU0FCTEVEKTsKKyAgICB9CisKKyAgICBpZiAobnJmX3JhZGlvX2V2ZW50X2dldChOUkZfUkFESU9fRVZFTlRfUkVBRFkpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX0VWRU5UX1JFQURZKTsKKyAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9SRUFEWSk7CisKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUU6CisgICAgICAgICAgICAgICAgaXJxX3JlYWR5X3N0YXRlX3dhaXRpbmdfcnhfZnJhbWUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9UWF9BQ0s6CisgICAgICAgICAgICAgICAgaXJxX3JlYWR5X3N0YXRlX3R4X2FjaygpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX0NDQToKKyAgICAgICAgICAgICAgICBpcnFfcmVhZHlfc3RhdGVfY2NhKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfVFhfRlJBTUU6CisgICAgICAgICAgICAgICAgaXJxX3JlYWR5X3N0YXRlX3R4X2ZyYW1lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfQUNLOgorICAgICAgICAgICAgICAgIGlycV9yZWFkeV9zdGF0ZV9yeF9hY2soKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9FRDoKKyAgICAgICAgICAgICAgICBpcnFfcmVhZHlfc3RhdGVfZWQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UOgorICAgICAgICAgICAgICAgIC8vIEV4aXQgYXMgc29vbiBhcyBwb3NzaWJsZSB3aGVuIHdhaXRpbmcgZm9yIHRpbWVzbG90LgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9FVkVOVF9SRUFEWSk7CisgICAgfQorCisjaWYgIVJBRElPX1NIT1JUX0NDQUlETEVfVFhFTgorICAgIGlmIChucmZfcmFkaW9fZXZlbnRfZ2V0KE5SRl9SQURJT19FVkVOVF9DQ0FJRExFKSkKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9FVkVOVF9DQ0FJRExFKTsKKyAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9DQ0FJRExFKTsKKworICAgICAgICBpcnFfY2NhaWRsZSgpOworCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX0VWRU5UX0NDQUlETEUpOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKG5yZl9yYWRpb19ldmVudF9nZXQoTlJGX1JBRElPX0VWRU5UX0NDQUJVU1kpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX0VWRU5UX0NDQUJVU1kpOworICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0NDQUJVU1kpOworCisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9UWF9GUkFNRToKKyAgICAgICAgICAgICAgICBpcnFfY2NhYnVzeV9zdGF0ZV90eF9mcmFtZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1Q6CisgICAgICAgICAgICAgICAgLy8gRXhpdCBhcyBzb29uIGFzIHBvc3NpYmxlIHdoZW4gd2FpdGluZyBmb3IgdGltZXNsb3QuCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX0VWRU5UX0NDQUJVU1kpOworICAgIH0KKworICAgIGlmIChucmZfcmFkaW9fZXZlbnRfZ2V0KE5SRl9SQURJT19FVkVOVF9FREVORCkpCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fRVZFTlRfRURFTkQpOworICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0VERU5EKTsKKworICAgICAgICBpcnFfZWRlbmQoKTsKKworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9FVkVOVF9FREVORCk7CisgICAgfQorCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fSVJRX0hBTkRMRVIpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIEZTTSB0cmFuc2l0aW9uIHJlcXVlc3Qgc3ViLXByb2NlZHVyZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqIEFib3J0IHRyYW5zbWlzc2lvbiBwcm9jZWR1cmUuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gTUFDIGxheWVyIHJlcXVlc3RzIHRyYW5zaXRpb24gZnJvbSB0cmFuc21pdCB0byByZWNlaXZlIHN0YXRlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdHhfcHJvY2VkdXJlX2Fib3J0KHZvaWQpCit7CisgICAgc2hvcnRzX2Rpc2FibGUoKTsKKworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKyAgICBhc3NlcnQobV9tdXRleCk7CisKKyAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisKKyAgICBzd2l0Y2ggKG5yZl9yYWRpb19zdGF0ZV9nZXQoKSkKKyAgICB7CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1RYX0RJU0FCTEU6CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYX0RJU0FCTEU6CisgICAgICAgICAgICAvLyBEbyBub3QgZW5hYmxlZCByZWNlaXZlci4gSXQgd2lsbCBiZSBlbmFibGVkIGluIERJU0FCTEVEIGhhbmRsZXIuCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9ESVNBQkxFRCk7CisgICAgICAgICAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX0RJU0FCTEUpOworICAgIH0KKworICAgIG5yZl9yYWRpb19taG11X3NlYXJjaF9wYXR0ZXJuX3NldCgwKTsKKyAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX01IUk1BVENIKTsKKworICAgIC8vIENsZWFyIGV2ZW50cyB0aGF0IGNvdWxkIGhhdmUgaGFwcGVuZWQgaW4gY3JpdGljYWwgc2VjdGlvbiBkdWUgdG8gcmVjZWl2aW5nIGZyYW1lLgorICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRlJBTUVTVEFSVCk7CisgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9FTkQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIEFQSSBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9pbml0KHZvaWQpCit7CisgICAgY29uc3QgdWludDhfdCBhY2tfcHNkdVtdID0gezB4MDUsIEFDS19IRUFERVJfV0lUSF9QRU5ESU5HLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKKyAgICBtZW1jcHkobV9hY2tfcHNkdSwgYWNrX3BzZHUsIHNpemVvZihhY2tfcHNkdSkpOworCit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fZGVpbml0KHZvaWQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVCAmJgorICAgICAgICBtX3N0YXRlICE9IFJBRElPX1NUQVRFX1NMRUVQKQorICAgIHsKKyAgICAgICAgbnJmX3JhZGlvX3Jlc2V0KCk7CisgICAgfQorCisgICAgaXJxX2RlaW5pdCgpOworfQorCityYWRpb19zdGF0ZV90IG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3N0YXRlX2dldCh2b2lkKQoreworICAgIHJldHVybiBtX3N0YXRlOworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3NsZWVwKHZvaWQpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKworICAgIHN3aXRjaCAobV9zdGF0ZSkKKyAgICB7CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDoKKyAgICAgICAgICAgIGFzc2VydChtX211dGV4KTsKKworICAgICAgICAgICAgc2xlZXBfc3RhcnQoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUU6CisgICAgICAgICAgICBpZiAobXV0ZXhfbG9jaygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX0RJU0FCTElORyk7CisKKyAgICAgICAgICAgICAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfSURMRSk7CisKKyAgICAgICAgICAgICAgICAvLyBDbGVhciBldmVudHMgdGhhdCBjb3VsZCBoYXZlIGhhcHBlbmVkIGluIGNyaXRpY2FsIHNlY3Rpb24gZHVlIHRvIHJlY2VpdmluZyBmcmFtZQorICAgICAgICAgICAgICAgIC8vIG9yIFJYIHJhbXAgdXAuCisgICAgICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9GUkFNRVNUQVJUKTsKKyAgICAgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0JDTUFUQ0gpOworICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRU5EKTsKKyAgICAgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfSEVBREVSOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0ZSQU1FOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0FDSzoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOyAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLgorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fcmVjZWl2ZSh1aW50OF90IGNoYW5uZWwpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKworICAgIHN3aXRjaCAobV9zdGF0ZSkKKyAgICB7CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRToKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9IRUFERVI6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfRlJBTUU6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfVFhfQUNLOgorICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKGNoYW5uZWxfZ2V0KCkgIT0gY2hhbm5lbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGFubmVsX3NldChjaGFubmVsKTsKKyAgICAgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9jaGFubmVsX3NldChjaGFubmVsKTsKKyAgICAgICAgICAgICAgICBpZiAobXV0ZXhfbG9jaygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX0RJU0FCTElORzoKKyAgICAgICAgICAgIGNoYW5uZWxfc2V0KGNoYW5uZWwpOworICAgICAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfY2hhbm5lbF9zZXQoY2hhbm5lbCk7CisgICAgICAgICAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgLy8gVEFTSyBESVNBQkxFIHdhcyBhbHJlYWR5IHRyaWdnZXJlZC4gV2FpdCBmb3IgZXZlbnQgRElTQUJMRUQuCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1NMRUVQOgorICAgICAgICAgICAgYXNzZXJ0KG11dGV4X2xvY2soKSk7CisKKyAgICAgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UKTsKKyAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2NoYW5uZWxfc2V0KGNoYW5uZWwpOworCisgICAgICAgICAgICBucmZfcmFhbF9jb250aW51b3VzX21vZGVfZW50ZXIoKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfQ0NBOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0ZSQU1FOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0FDSzoKKyAgICAgICAgICAgIHR4X3Byb2NlZHVyZV9hYm9ydCgpOworICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfRUQ6CisgICAgICAgICAgICAvLyBJZ25vcmUgcmVjZWl2ZSBmdW5jdGlvbiBkdXJpbmcgZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUuCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1Q6CisgICAgICAgICAgICAvLyBJZ25vcmUgcmVjZWl2ZSBmdW5jdGlvbiBpbiBXQUlUSU5HX1RJTUVTTE9UIHN0YXRlIC0gdGhlIHJhZGlvIHdpbGwgcmVjZWl2ZSB3aGVuIHRpbWUKKyAgICAgICAgICAgIC8vIHNsb3Qgc3RhcnRzLgorICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fdHJhbnNtaXQoY29uc3QgdWludDhfdCAqIHBfZGF0YSwgdWludDhfdCBjaGFubmVsLCBpbnQ4X3QgcG93ZXIsIGJvb2wgY2NhKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgbXBfdHhfZGF0YSAgPSBwX2RhdGE7CisKKyAgICBpZiAobXV0ZXhfbG9jaygpKQorICAgIHsKKyAgICAgICAgaWYgKG5yZl9yYWFsX3RpbWVzbG90X3JlcXVlc3QobnJmX2Rydl9yYWRpbzgwMjE1NF90eF9kdXJhdGlvbl9nZXQocF9kYXRhWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2tfaXNfcmVxdWVzdGVkKHBfZGF0YSkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG1fc3RhdGUgPT0gUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisKKyAgICAgICAgICAgIGNoYW5uZWxfc2V0KGNoYW5uZWwpOworCisgICAgICAgICAgICBhdXRvX2Fja19hYm9ydChjY2EgPyBSQURJT19TVEFURV9DQ0EgOiBSQURJT19TVEFURV9UWF9GUkFNRSk7CisKKyAgICAgICAgICAgIHR4X3Bvd2VyX3NldChwb3dlcik7CisgICAgICAgICAgICBucmZfcmFkaW9fcGFja2V0X3B0cl9zZXQocF9kYXRhKTsKKworICAgICAgICAgICAgLy8gQ2xlYXIgZXZlbnRzIHRoYXQgY291bGQgaGF2ZSBoYXBwZW5lZCBpbiBjcml0aWNhbCBzZWN0aW9uIGR1ZSB0byByZWNlaXZpbmcgZnJhbWUgb3IgUlggcmFtcCB1cC4KKyAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRlJBTUVTVEFSVCk7CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0JDTUFUQ0gpOworICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9FTkQpOworICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9SRUFEWSk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIDJuZCB0aW1lIGluIGNhc2UgdGhpcyBwcm9jZWR1cmUgd2FzIGludGVycnVwdGVkLgorICAgICAgICAgICAgaWYgKG5yZl9yYWFsX3RpbWVzbG90X3JlcXVlc3QoCisgICAgICAgICAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfdHhfZHVyYXRpb25fZ2V0KHBfZGF0YVswXSwgYWNrX2lzX3JlcXVlc3RlZChwX2RhdGEpKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpcnFfZGVpbml0KCk7CisgICAgICAgICAgICAgICAgbnJmX3JhZGlvX3Jlc2V0KCk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtdXRleF91bmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fZW5lcmd5X2RldGVjdGlvbih1aW50OF90IHR4X2NoYW5uZWwsIHVpbnQzMl90IHRpbWVfdXMpCit7CisgICAgYm9vbCAgICAgcmVzdWx0ICAgID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1NMRUVQOgorICAgICAgICAgICAgaWYgKG11dGV4X2xvY2soKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfRUQpOworICAgICAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2NoYW5uZWxfc2V0KHR4X2NoYW5uZWwpOworICAgICAgICAgICAgICAgIG1fZWRfdGltZV9sZWZ0ID0gdGltZV91czsKKyAgICAgICAgICAgICAgICBtX2VkX3Jlc3VsdCAgICA9IDA7CisKKyAgICAgICAgICAgICAgICBucmZfcmFhbF9jb250aW51b3VzX21vZGVfZW50ZXIoKTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRToKKyAgICAgICAgICAgIGlmIChtdXRleF9sb2NrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9lZF9yZXN1bHQgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKGVkX2l0ZXJfc2V0dXAodGltZV91cykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9jaGFubmVsX3NldCh0eF9jaGFubmVsKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbm5lbF9zZXQodHhfY2hhbm5lbCk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfRUQpOworCisgICAgICAgICAgICAgICAgICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciBldmVudHMgdGhhdCBjb3VsZCBoYXZlIGhhcHBlbmVkIGluIGNyaXRpY2FsIHNlY3Rpb24gZHVlIHRvIHJlY2VpdmluZworICAgICAgICAgICAgICAgICAgICAvLyBmcmFtZSBvciBSWCByYW1wIHVwLgorICAgICAgICAgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0ZSQU1FU1RBUlQpOworICAgICAgICAgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0JDTUFUQ0gpOworICAgICAgICAgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0VORCk7CisgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfRUQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfRElTQUJMSU5HOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0hFQURFUjoKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9GUkFNRToKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9UWF9BQ0s6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOyAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLgorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fbm90aWZ5X2J1ZmZlcl9mcmVlKHJ4X2J1ZmZlcl90ICogcF9idWZmZXIpCit7CisgICAgcF9idWZmZXItPmZyZWUgPSB0cnVlOworCisgICAgc3dpdGNoIChtX3N0YXRlKQorICAgIHsKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FOgorCisgICAgICAgICAgICBzd2l0Y2ggKG5yZl9yYWRpb19zdGF0ZV9nZXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9ESVNBQkxFOiAvLyBUaGlzIG9uZSBjb3VsZCBoYXBwZW4gYWZ0ZXIgcmVjZWl2ZSBvZiBicm9hZGNhc3QgZnJhbWUuCisgICAgICAgICAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfVFhfRElTQUJMRTogLy8gVGhpcyBvbmUgY291bGQgaGFwcGVuIGR1ZSB0byBzdG9wcGluZyBBQ0suCisgICAgICAgICAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfRElTQUJMRUQ6ICAgLy8gVGhpcyBvbmUgY291bGQgaGFwcGVuIGR1cmluZyBzdG9wcGluZyBBQ0suCisgICAgICAgICAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfUlhfUlU6ICAgICAgLy8gVGhpcyBvbmUgY291bGQgaGFwcGVuIGR1cmluZyBlbmFibGluZyByZWNlaXZlciAoYWZ0ZXIgc2VuZGluZyBBQ0spLgorICAgICAgICAgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYOiAgICAgICAgIC8vIFRoaXMgb25lIGNvdWxkIGhhcHBlbiBpZiBhbnkgb3RoZXIgYnVmZmVyIGlzIGluIHVzZS4KKyAgICAgICAgICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9UWF9SVTogICAgICAvLyBUaGlzIG9uZSBjb3VsZCBoYXBwZW4gaWYgcmVjZWl2ZWQgYSBzaG9ydCBmcmFtZS4KKyAgICAgICAgICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9UWF9JRExFOiAgICAvLyBUaGlzIG9uZSBjb3VsZCBoYXBwZW4gaWYgcmVjZWl2ZWQgYSBzaG9ydCBmcmFtZS4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9JRExFOgorICAgICAgICAgICAgICAgICAgICAvLyBNdXRleCB0byBtYWtlIHN1cmUgUmFkaW8gU3RhdGUgZGlkIG5vdCBjaGFuZ2UgYmV0d2VlbiBJUlEgYW5kIHRoaXMgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgc2hvcnRzIHRvIG1ha2Ugc3VyZSBSWF9JRExFIHN0YXRlIGlzIGR1ZSB0byBvY2N1cGllZCBidWZmZXJzIC0gbm90CisgICAgICAgICAgICAgICAgICAgIC8vIGR1cmluZyBFTkQvRElTQUJMRSBzaG9ydC4KKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgQVBJIGNhbGwgY2hhbmdlZCBSYWRpbyBzdGF0ZSBsZWF2ZSBSYWRpbyBhcyBpdCBpcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG11dGV4X2xvY2soKSAmJiBucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydHNfcnhfaW5pdGlhbF9zZXQoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcnhfYnVmZmVyX2luX3VzZV9zZXQocF9idWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcnhfZnJhbWVfc3RhcnQoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgZXZlbnRzIHRoYXQgY291bGQgaGF2ZSBoYXBwZW5lZCBpbiBjcml0aWNhbCBzZWN0aW9uIGR1ZSB0byBSWAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmFtcCB1cC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBEb24ndCBwZXJmb3JtIGFueSBhY3Rpb24gaW4gYW55IG90aGVyIHN0YXRlIChyZWNlaXZlciBzaG91bGQgbm90IGJlIHN0YXJ0ZWQpLgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfZnNtLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDRmMjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfZnNtLmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGJyaWVmIFRoaXMgbW9kdWxlIGNvbnRhaW5zIEZpbml0ZSBTdGF0ZSBNYWNoaW5lIG9mIG5SRiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuCisgKgorICovCisKKyNpZm5kZWYgTlJGX0RSVl9SQURJTzgwMjE1NF9GU01fSF8KKyNkZWZpbmUgTlJGX0RSVl9SQURJTzgwMjE1NF9GU01fSF8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYnJpZWYgU3RhdGVzIG9mIG5SRiA4MDIuMTUuNCBkcml2ZXIuCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIC8vIFNsZWVwCisgICAgUkFESU9fU1RBVEVfRElTQUJMSU5HLCAgICAgICAgIC8vIEVudGVyaW5nIGxvdyBwb3dlciAoRElTQUJMRUQpIG1vZGUKKyAgICBSQURJT19TVEFURV9TTEVFUCwgICAgICAgICAgICAgLy8gTG93IHBvd2VyIChESVNBQkxFRCkgbW9kZQorCisgICAgLy8gUmVjZWl2ZQorICAgIFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1QsICAvLyBSYWRpbyBpcyBpbmFjdGl2ZSBkdWUgdG8gZGVuaWVkIHRpbWUgc2xvdAorICAgIFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUsICAvLyBXYWl0aW5nIGZvciBmcmFtZSBpbiByZWNlaXZlciBtb2RlCisgICAgUkFESU9fU1RBVEVfUlhfSEVBREVSLCAgICAgICAgIC8vIFJlY2VpdmVkIFNGRCwgcmVjZWl2aW5nIE1BQyBoZWFkZXIKKyAgICBSQURJT19TVEFURV9SWF9GUkFNRSwgICAgICAgICAgLy8gUmVjZWl2ZWQgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHJlY2VpdmluZyByZXN0IG9mIHRoZSBmcmFtZQorICAgIFJBRElPX1NUQVRFX1RYX0FDSywgICAgICAgICAgICAvLyBSZWNlaXZlZCBmcmFtZSBhbmQgdHJhbnNtaXR0aW5nIEFDSworCisgICAgLy8gVHJhbnNtaXQKKyAgICBSQURJT19TVEFURV9DQ0EsICAgICAgICAgICAgICAgLy8gUGVyZm9ybWluZyBDQ0EKKyAgICBSQURJT19TVEFURV9UWF9GUkFNRSwgICAgICAgICAgLy8gVHJhbnNtaXR0aW5nIGRhdGEgZnJhbWUgKG9yIGJlYWNvbikKKyAgICBSQURJT19TVEFURV9SWF9BQ0ssICAgICAgICAgICAgLy8gUmVjZWl2aW5nIEFDSyBhZnRlciB0cmFuc21pdHRlZCBmcmFtZQorCisgICAgLy8gRW5lcmd5IERldGVjdGlvbgorICAgIFJBRElPX1NUQVRFX0VELCAgICAgICAgICAgICAgICAvLyBQZXJmb3JtaW5nIEVuZXJneSBEZXRlY3Rpb24gcHJvY2VkdXJlCit9IHJhZGlvX3N0YXRlX3Q7CisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgODAyLjE1LjQgZHJpdmVyIEZTTS4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9pbml0KHZvaWQpOworCisvKioKKyAqIEBicmllZiBEZWluaXRpYWxpemUgODAyLjE1LjQgZHJpdmVyIEZTTS4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9kZWluaXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIEdldCBjdXJyZW50IHN0YXRlIG9mIG5SRiA4MDIuMTUuNCBkcml2ZXIuCisgKgorICogQHJldHVybiAgQ3VycmVudCBzdGF0ZSBvZiB0aGUgODAyLjE1LjQgZHJpdmVyLgorICovCityYWRpb19zdGF0ZV90IG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3N0YXRlX2dldCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gU3RhdGUgbWFjaGluZSB0cmFuc2l0aW9uIHJlcXVlc3RzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgdHJhbnNpdGlvbiB0byBTTEVFUCBzdGF0ZS4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGNhbGxlZCBmcm9tIGNyaXRpY2FsIHNlY3Rpb24gY29udGV4dC4gSXQgc2hhbGwgbm90IGJlIGludGVycnVwdGVkCisgKiAgICAgICBieSBSQURJTyBldmVudCBoYW5kbGVyIG9yIFJBQUwgbm90aWZpY2F0aW9uLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgaW4gUkVDRUlWRSBzdGF0ZS4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgRW50ZXJpbmcgU0xFRVAgc3RhdGUgc3VjY2VlZGVkLgorICogQHJldHZhbCAgZmFsc2UgIEVudGVyaW5nIFNMRUVQIHN0YXRlIGZhaWxlZCAoZHJpdmVyIGlzIHBlcmZvcm1pbmcgb3RoZXIgcHJvY2VkdXJlKS4KKyAqLworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9zbGVlcCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCB0cmFuc2l0aW9uIHRvIFJFQ0VJVkUgc3RhdGUuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSBjYWxsZWQgZnJvbSBjcml0aWNhbCBzZWN0aW9uIGNvbnRleHQuIEl0IHNoYWxsIG5vdCBiZSBpbnRlcnJ1cHRlZAorICogICAgICAgYnkgUkFESU8gZXZlbnQgaGFuZGxlciBvciBSQUFMIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzIGluIFNMRUVQIG9yIFRSQU5TTUlUIHN0YXRlLgorICoKKyAqIEBwYXJhbVtpbl0gIGNoYW5uZWwgIENoYW5uZWwgbnVtYmVyIHRoYXQgdGhlIHJhZGlvIHNob3VsZCB1c2UgdG8gcmVjZWl2ZSBmcmFtZXMuCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIEVudGVyaW5nIFJFQ0VJVkUgc3RhdGUgc3VjY2VlZGVkLgorICogQHJldHZhbCAgZmFsc2UgIEVudGVyaW5nIFJFQ0VJVkUgc3RhdGUgZmFpbGVkIChkcml2ZXIgaXMgcGVyZm9ybWluZyBvdGhlciBwcm9jZWR1cmUpLgorICovCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3JlY2VpdmUodWludDhfdCBjaGFubmVsKTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCB0cmFuc2l0aW9uIHRvIFRSQU5TTUlUIHN0YXRlLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hhbGwgYmUgY2FsbGVkIGZyb20gY3JpdGljYWwgc2VjdGlvbiBjb250ZXh0LiBJdCBzaGFsbCBub3QgYmUgaW50ZXJydXB0ZWQKKyAqICAgICAgIGJ5IFJBRElPIGV2ZW50IGhhbmRsZXIgb3IgUkFBTCBub3RpZmljYXRpb24uCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBpbiBSRUNFSVZFIHN0YXRlLgorICoKKyAqIEBwYXJhbVtpbl0gIHBfZGF0YSAgIFBvaW50ZXIgdG8gYSBmcmFtZSB0byB0cmFuc21pdC4KKyAqIEBwYXJhbVtpbl0gIGNoYW5uZWwgIENoYW5uZWwgbnVtYmVyIHRoYXQgdGhlIHJhZGlvIHNob3VsZCB1c2UgdG8gdHJhbnNtaXQgdGhlIGZyYW1lLgorICogQHBhcmFtW2luXSAgcG93ZXIgICAgVHJhbnNtaXNzaW9uIHBvd2VyLgorICogQHBhcmFtW2luXSAgY2NhICAgICAgSWYgdGhlIGRyaXZlciBzaG91bGQgcGVyZm9ybSBDQ0EgcHJvY2VkdXJlIGJlZm9yZSB0cmFuc21pc3Npb24uCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIEVudGVyaW5nIFRSQU5TTUlUIHN0YXRlIHN1Y2NlZWRlZC4KKyAqIEByZXR2YWwgIGZhbHNlICBFbnRlcmluZyBUUkFOU01JVCBzdGF0ZSBmYWlsZWQgKGRyaXZlciBpcyBwZXJmb3JtaW5nIG90aGVyIHByb2NlZHVyZSkuCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fdHJhbnNtaXQoY29uc3QgdWludDhfdCAqIHBfZGF0YSwgdWludDhfdCBjaGFubmVsLCBpbnQ4X3QgcG93ZXIsIGJvb2wgY2NhKTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCB0cmFuc2l0aW9uIHRvIEVORVJHWV9ERVRFQ1RJT04gc3RhdGUuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSBjYWxsZWQgZnJvbSBjcml0aWNhbCBzZWN0aW9uIGNvbnRleHQuIEl0IHNoYWxsIG5vdCBiZSBpbnRlcnJ1cHRlZAorICogICAgICAgYnkgUkFESU8gZXZlbnQgaGFuZGxlciBvciBSQUFMIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzIGluIFNMRUVQIG9yIFJFQ0VJVkUgc3RhdGUuIFdoZW4gRW5lcmd5CisgKiAgICAgICBkZXRlY3Rpb24gcHJvY2VkdXJlIGlzIGZpbmlzaGVkIHRoZSBkcml2ZXIgd2lsbCB0cmFuc2l0IHRvIFJFQ0VJVkUgc3RhdGUuCisgKgorICogQHBhcmFtW2luXSAgY2hhbm5lbCAgQ2hhbm5lbCBudW1iZXIgdGhhdCB0aGUgcmFkaW8gc2hvdWxkIHVzZSB0byBwZXJmb3JtIGVuZXJneSBkZXRlY3Rpb24uCisgKiBAcGFyYW1baW5dICB0aW1lX3VzICBNaW5pbWFsIHRpbWUgb2YgZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUuCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIEVudGVyaW5nIEVORVJHWV9ERVRFQ1RJT04gc3RhdGUgc3VjY2VlZGVkLgorICogQHJldHZhbCAgZmFsc2UgIEVudGVyaW5nIEVORVJHWV9ERVRFQ1RJT04gc3RhdGUgZmFpbGVkIChkcml2ZXIgaXMgcGVyZm9ybWluZyBvdGhlciBwcm9jZWR1cmUpLgorICovCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX2VuZXJneV9kZXRlY3Rpb24odWludDhfdCBjaGFubmVsLCB1aW50MzJfdCB0aW1lX3VzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gU3RhdGUgbWFjaGluZSBub3RpZmljYXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQGJyaWVmIE5vdGlmeSB0aGUgRlNNIHRoYXQgaGlnaGVyIGxheWVyIGZyZWVkIGEgZnJhbWUgYnVmZmVyLgorICoKKyAqIFdoZW4gdGhlcmUgd2VyZSBubyBmcmVlIGJ1ZmZlcnMgYXZhaWxhYmxlIHRoZSBGU00gZG9lcyBub3Qgc3RhcnQgcmVjZWl2ZXIuIElmIEZTTSByZWNlaXZlcyB0aGlzCisgKiBub3RpZmljYXRpb24gaW4gY2hhbmdlcyBpbnRlcm5hbCBzdGF0ZSB0byBtYWtlIHN1cmUgcmVjZWl2ZXIgaXMgc3RhcnRlZCBpZiByZXF1ZXN0ZWQuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSBjYWxsZWQgZnJvbSBjcml0aWNhbCBzZWN0aW9uIGNvbnRleHQuIEl0IHNoYWxsIG5vdCBiZSBpbnRlcnJ1cHRlZAorICogICAgICAgYnkgUkFESU8gZXZlbnQgaGFuZGxlciBvciBSQUFMIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBwX2J1ZmZlciAgUG9pbnRlciB0byBidWZmZXIgdGhhdCBoYXMgYmVlbiBmcmVlZC4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9ub3RpZnlfYnVmZmVyX2ZyZWUocnhfYnVmZmVyX3QgKiBwX2J1ZmZlcik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBOUkZfRFJWX1JBRElPODAyMTU0X0ZTTV9IXyAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb24uaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmN2ZjYzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb24uaApAQCAtMCwwICsxLDkxIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIE5SRl9EUklWRVJfUkFESU84MDIxNTRfTk9USUZJQ0FUSU9OX0hfXworI2RlZmluZSBOUkZfRFJJVkVSX1JBRElPODAyMTU0X05PVElGSUNBVElPTl9IX18KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBkZWZncm91cCBucmZfZHJpdmVyX3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbiA4MDIuMTUuNCBkcml2ZXIgbm90aWZpY2F0aW9uCisgKiBAeworICogQGluZ3JvdXAgbnJmX2RyaXZlcl9yYWRpbzgwMjE1NAorICogQGJyaWVmIE5vdGlmaWNhdGlvbnMgdG8gdGhlIG5leHQgaGlnaGVyIGxheWVyIHRyaWdnZXJlZCBmcm9tIDgwMi4xNS40IHJhZGlvIGRyaXZlci4KKyAqLworCisvKioKKyAqIEBicmllZiBJbml0aWFsaXplIG5vdGlmaWNhdGlvbiBtb2R1bGUuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb25faW5pdCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgTm90aWZ5IG5leHQgaGlnaGVyIGxheWVyIHRoYXQgYSBmcmFtZSB3YXMgcmVjZWl2ZWQuCisgKgorICogQHBhcmFtW2luXSAgcF9kYXRhICBBcnJheSBvZiBieXRlcyBjb250YWluaW5nIFBTRFUuIEZpcnN0IGJ5dGUgY29udGFpbnMgZnJhbWUgbGVuZ3RoLCBvdGhlciBjb250YWluIHRoZSBmcmFtZSBpdHNlbGYuCisgKiBAcGFyYW1baW5dICBwb3dlciAgIFJTU0kgbWVhc3VyZWQgZHVyaW5nIHRoZSBmcmFtZSByZWNlcHRpb24uCisgKiBAcGFyYW1baW5dICBscWkgICAgIExRSSBpbmRpY2F0aW5nIG1lYXN1cmVkIGxpbmsgcXVhbGl0eSBkdXJpbmcgdGhlIGZyYW1lIHJlY2VwdGlvbi4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV9yZWNlaXZlZCh1aW50OF90ICogcF9kYXRhLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpOworCisvKioKKyAqIEBicmllZiBOb3RpZnkgbmV4dCBoaWdoZXIgbGF5ZXIgdGhhdCBhIGZyYW1lIHdhcyB0cmFuc21pdHRlZC4KKyAqCisgKiBAcGFyYW1baW5dICBwX2FjayAgUG9pbnRlciB0byBidWZmZXIgY29udGFpbmluZyBQU0RVIG9mIEFDSyBmcmFtZS4gTlVMTCBpZiBBQ0sgd2FzIG5vdCByZXF1ZXN0ZWQuCisgKiBAcGFyYW1baW5dICBwb3dlciAgUlNTSSBvZiByZWNlaXZlZCBmcmFtZSBvciAwIGlmIEFDSyB3YXMgbm90IHJlcXVlc3RlZC4KKyAqIEBwYXJhbVtpbl0gIGxxaSAgICBMUUkgb2YgcmVjZWl2ZWQgZnJhbWUgb2YgMCBpZiBBQ0sgd2FzIG5vdCByZXF1ZXN0ZWQuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfdHJhbnNtaXR0ZWQodWludDhfdCAqIHBfYWNrLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpOworCisvKioKKyAqIEBicmllZiBOb3RpZnkgbmV4dCBoaWdoZXIgbGF5ZXIgdGhhdCBhIGZyYW1lIHdhcyBub3QgdHJhbnNtaXR0ZWQuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfYnVzeV9jaGFubmVsKHZvaWQpOworCisvKioKKyAqIEBicmllZiBOb3RpZnkgbmV4dCBoaWdoZXIgbGF5ZXIgdGhhdCBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZSBlbmRlZC4KKyAqCisgKiBAcGFyYW1baW5dICByZXN1bHQgIERldGVjdGVkIGVuZXJneSBsZXZlbC4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV9lbmVyZ3lfZGV0ZWN0ZWQoaW50OF90IHJlc3VsdCk7CisKKy8qKgorICpAfQorICoqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9OT1RJRklDQVRJT05fSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb25fZGlyZWN0LmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb25fZGlyZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiYmZhNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbl9kaXJlY3QuYwpAQCAtMCwwICsxLDY4IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIG5vdGlmaWNhdGlvbnMgdHJpZ2dlcmVkIGRpcmVjdGx5IGJ5IHRoZSBucmYgODAyLjE1LjQgcmFkaW8gZHJpdmVyLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb24uaCIKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTQuaCIKKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbl9pbml0KHZvaWQpCit7CisgICAgLy8gSW50ZW50aW9uYWxseSBlbXB0eQorfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X3JlY2VpdmVkKHVpbnQ4X3QgKiBwX2RhdGEsIGludDhfdCBwb3dlciwgaW50OF90IGxxaSkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3JlY2VpdmVkKHBfZGF0YSwgcG93ZXIsIGxxaSk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfdHJhbnNtaXR0ZWQodWludDhfdCAqIHBfYWNrLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF90cmFuc21pdHRlZChwX2FjaywgcG93ZXIsIGxxaSk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfYnVzeV9jaGFubmVsKHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9idXN5X2NoYW5uZWwoKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV9lbmVyZ3lfZGV0ZWN0ZWQoaW50OF90IHJlc3VsdCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2VuZXJneV9kZXRlY3RlZChyZXN1bHQpOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb25fc3dpLmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb25fc3dpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk5YzM3NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbl9zd2kuYwpAQCAtMCwwICsxLDY5IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIG5vdGlmaWNhdGlvbnMgdHJpZ2dlcmVkIGJ5IHRoZSBucmYgODAyLjE1LjQgcmFkaW8gZHJpdmVyIHZpYSBTV0kuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbi5oIgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9zd2kuaCIKKyNpbmNsdWRlICJyYWFsL25yZl9yYWFsX2FwaS5oIgorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZpY2F0aW9uX2luaXQodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9pbml0KCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfcmVjZWl2ZWQodWludDhfdCAqIHBfZGF0YSwgaW50OF90IHBvd2VyLCBpbnQ4X3QgbHFpKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX25vdGlmeV9yZWNlaXZlZChwX2RhdGEsIHBvd2VyLCBscWkpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X3RyYW5zbWl0dGVkKHVpbnQ4X3QgKiBwX2FjaywgaW50OF90IHBvd2VyLCBpbnQ4X3QgbHFpKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX25vdGlmeV90cmFuc21pdHRlZChwX2FjaywgcG93ZXIsIGxxaSk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfYnVzeV9jaGFubmVsKHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfbm90aWZ5X2J1c3lfY2hhbm5lbCgpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X2VuZXJneV9kZXRlY3RlZChpbnQ4X3QgcmVzdWx0KQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX25vdGlmeV9lbmVyZ3lfZGV0ZWN0ZWQocmVzdWx0KTsKK30KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcGliLmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9waWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjhlZDRkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcGliLmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgc3RvcmFnZSBvZiBQSUIgYXR0cmlidXRlcyBpbiBuUkYgODAyLjE1LjQgcmFkaW8gZHJpdmVyLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9waWIuaCIKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfY29uc3QuaCIKKworI2RlZmluZSBCUk9BRENBU1RfQUREUkVTUyAgICAoKHVpbnQ4X3QgW1NIT1JUX0FERFJFU1NfU0laRV0pIHsweGZmLCAweGZmfSkgLy8vPCBCcm9hZGNhc3QgU2hvcnQgQWRkcmVzcworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludDhfdCAgdHhfcG93ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBUcmFuc21pdCBwb3dlci4KKyAgICB1aW50OF90IHBhbl9pZFtQQU5fSURfU0laRV07ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUGFuIElkIG9mIHRoaXMgbm9kZS4KKyAgICB1aW50OF90IHNob3J0X2FkZHJbU0hPUlRfQUREUkVTU19TSVpFXTsgICAgICAgICAgIC8vLzwgU2hvcnQgQWRkcmVzcyBvZiB0aGlzIG5vZGUuCisgICAgdWludDhfdCBleHRlbmRlZF9hZGRyW0VYVEVOREVEX0FERFJFU1NfU0laRV07ICAgICAvLy88IEV4dGVuZGVkIEFkZHJlc3Mgb2YgdGhpcyBub2RlLgorICAgIGJvb2wgICAgcHJvbWlzY3VvdXMgICAgICAgICAgICAgICAgICAgICAgICAgIDoxOyAgLy8vPCBJbmRpY2F0aW5nIGlmIHJhZGlvIGlzIGluIHByb21pc2N1b3VzIG1vZGUuCisgICAgYm9vbCAgICBhdXRvX2FjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjE7ICAvLy88IEluZGljYXRpbmcgaWYgYXV0byBBQ0sgcHJvY2VkdXJlIGlzIGVuYWJsZWQuCisgICAgdWludDhfdCBjaGFubmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjU7ICAvLy88IENoYW5uZWwgb24gd2hpY2ggdGhlIG5vZGUgcmVjZWl2ZXMgbWVzc2FnZXMuCit9IG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2RhdGFfdDsKKworc3RhdGljIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2RhdGFfdCBtX2RhdGE7ICAvLy88IEJ1ZmZlciBjb250YWluaW5nIFBJQiBkYXRhLgorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2luaXQodm9pZCkKK3sKKyAgICBtX2RhdGEucHJvbWlzY3VvdXMgPSBmYWxzZTsKKyAgICBtX2RhdGEuYXV0b19hY2sgICAgPSB0cnVlOworICAgIG1fZGF0YS5jaGFubmVsICAgICA9IDExOworCisgICAgbWVtc2V0KG1fZGF0YS5wYW5faWQsIDB4ZmYsIHNpemVvZihtX2RhdGEucGFuX2lkKSk7CisgICAgbV9kYXRhLnNob3J0X2FkZHJbMF0gPSAweGZlOworICAgIG1fZGF0YS5zaG9ydF9hZGRyWzFdID0gMHhmZjsKKyAgICBtZW1zZXQobV9kYXRhLmV4dGVuZGVkX2FkZHIsIDAsIHNpemVvZihtX2RhdGEuZXh0ZW5kZWRfYWRkcikpOworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3Byb21pc2N1b3VzX2dldCh2b2lkKQoreworICAgIHJldHVybiBtX2RhdGEucHJvbWlzY3VvdXM7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfcHJvbWlzY3VvdXNfc2V0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX2RhdGEucHJvbWlzY3VvdXMgPSBlbmFibGVkOworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2F1dG9fYWNrX2dldCh2b2lkKQoreworICAgIHJldHVybiBtX2RhdGEuYXV0b19hY2s7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfYXV0b19hY2tfc2V0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX2RhdGEuYXV0b19hY2sgPSBlbmFibGVkOworfQorCit1aW50OF90IG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2NoYW5uZWxfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIG1fZGF0YS5jaGFubmVsOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2NoYW5uZWxfc2V0KHVpbnQ4X3QgY2hhbm5lbCkKK3sKKyAgICBtX2RhdGEuY2hhbm5lbCA9IGNoYW5uZWw7Cit9CisKK2ludDhfdCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl90eF9wb3dlcl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gbV9kYXRhLnR4X3Bvd2VyOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3R4X3Bvd2VyX3NldChpbnQ4X3QgZGJtKQoreworICAgIG1fZGF0YS50eF9wb3dlciA9IGRibTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9wYW5faWRfc2V0KGNvbnN0IHVpbnQ4X3QgKiBwX3Bhbl9pZCkKK3sKKyAgICBtZW1jcHkobV9kYXRhLnBhbl9pZCwgcF9wYW5faWQsIFBBTl9JRF9TSVpFKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9leHRlbmRlZF9hZGRyZXNzX3NldChjb25zdCB1aW50OF90ICogcF9leHRlbmRlZF9hZGRyZXNzKQoreworICAgIG1lbWNweShtX2RhdGEuZXh0ZW5kZWRfYWRkciwgcF9leHRlbmRlZF9hZGRyZXNzLCBFWFRFTkRFRF9BRERSRVNTX1NJWkUpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3Nob3J0X2FkZHJlc3Nfc2V0KGNvbnN0IHVpbnQ4X3QgKiBwX3Nob3J0X2FkZHJlc3MpCit7CisgICAgbWVtY3B5KG1fZGF0YS5zaG9ydF9hZGRyLCBwX3Nob3J0X2FkZHJlc3MsIFNIT1JUX0FERFJFU1NfU0laRSk7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfZGVzdF9hZGRyX21hdGNoZXMoY29uc3QgdWludDhfdCAqIHBfcHNkdSkKK3sKKyAgICAvLyBDaGVjayBkZXN0aW5hdGlvbiBQQU4gSWQuCisgICAgLy8gTm90ZSB0aGF0ICsxIGluIFBTRFUgb2Zmc2V0IGlzIGFkZGVkIGJlY2F1c2UgZmlyc3QgYnl0ZSBpbiBQU0RVIGlzIGxlbmd0aC4KKyAgICBpZiAoKDAgIT0gbWVtY21wKCZwX3BzZHVbUEFOX0lEX09GRlNFVCArIDFdLCBtX2RhdGEucGFuX2lkLCBQQU5fSURfU0laRSkpICYmCisgICAgICAgICgwICE9IG1lbWNtcCgmcF9wc2R1W1BBTl9JRF9PRkZTRVQgKyAxXSwgQlJPQURDQVNUX0FERFJFU1MsIFBBTl9JRF9TSVpFKSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICBzd2l0Y2ggKHBfcHNkdVtERVNUX0FERFJfVFlQRV9PRkZTRVRdICYgREVTVF9BRERSX1RZUEVfTUFTSykKKyAgICB7CisgICAgICAgIGNhc2UgREVTVF9BRERSX1RZUEVfU0hPUlQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCArMSBpbiBQU0RVIG9mZnNldCBpcyBhZGRlZCBiZWNhdXNlIGZpcnN0IGJ5dGUgaW4gUFNEVSBpcyBsZW5ndGguCisgICAgICAgICAgICBpZiAoKDAgIT0gbWVtY21wKCZwX3BzZHVbREVTVF9BRERSX09GRlNFVCArIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEuc2hvcnRfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0hPUlRfQUREUkVTU19TSVpFKSkgJiYKKyAgICAgICAgICAgICAgICAoMCAhPSBtZW1jbXAoJnBfcHNkdVtERVNUX0FERFJfT0ZGU0VUICsgMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJST0FEQ0FTVF9BRERSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSE9SVF9BRERSRVNTX1NJWkUpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBERVNUX0FERFJfVFlQRV9FWFRFTkRFRDoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTm90ZSB0aGF0ICsxIGluIFBTRFUgb2Zmc2V0IGlzIGFkZGVkIGJlY2F1c2UgZmlyc3QgYnl0ZSBpbiBQU0RVIGlzIGxlbmd0aC4KKyAgICAgICAgICAgIGlmICgwICE9IG1lbWNtcCgmcF9wc2R1W0RFU1RfQUREUl9PRkZTRVQgKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEuZXh0ZW5kZWRfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobV9kYXRhLmV4dGVuZGVkX2FkZHIpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3BpYi5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5NzU4YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3BpYi5oCkBAIC0wLDAgKzEsMTU1IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBicmllZiBUaGlzIGZpbGUgaW1wbGVtZW50cyBzdG9yYWdlIG9mIFBJQiBhdHRyaWJ1dGVzIGluIG5SRiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuCisgKgorICovCisKKyNpZm5kZWYgTlJGX0RSVl9SQURJTzgwMjE1NF9QSUJfSF8KKyNkZWZpbmUgTlJGX0RSVl9SQURJTzgwMjE1NF9QSUJfSF8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBicmllZiBJbml0aWFsaXplIHRoaXMgbW9kdWxlLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2luaXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIENoZWNrIGlmIHByb21pc2N1b3VzIG1vZGUgaXMgZW5hYmxlZC4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgSWYgcHJvbWlzY3VvdXMgbW9kZSBpcyBlbmFibGVkLgorICogQHJldHZhbCAgZmFsc2UgIElmIHByb21pc2N1b3VzIG1vZGUgaXMgZGlzYWJsZWQuCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfcHJvbWlzY3VvdXNfZ2V0KHZvaWQpOworCisvKioKKyAqIEBicmllZiBFbmFibGUgb3IgZGlzYWJsZSBwcm9taXNjdW91cyBtb2RlLgorICoKKyAqIEBwYXJhbVtpbl0gIGVuYWJsZWQgIElmIHByb21pc2N1b3VzIG1vZGUgc2hvdWxkIGJlIGVuYWJsZWQuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfcHJvbWlzY3VvdXNfc2V0KGJvb2wgZW5hYmxlZCk7CisKKy8qKgorICogQGJyaWVmIENoZWNrIGlmIGF1dG8gQUNLIHByb2NlZHVyZSBpcyBlbmFibGVkLgorICoKKyAqIEByZXR2YWwgIHRydWUgICBJZiBhdXRvIEFDSyBwcm9jZWR1cmUgaXMgZW5hYmxlZC4KKyAqIEByZXR2YWwgIGZhbHNlICBJZiBhdXRvIEFDSyBwcm9jZWR1cmUgaXMgZGlzYWJsZWQuCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfYXV0b19hY2tfZ2V0KHZvaWQpOworCisvKioKKyAqIEBicmllZiBFbmFibGUgb3IgZGlzYWJsZSBhdXRvIEFDSyBwcm9jZWR1cmUuCisgKgorICogQHBhcmFtW2luXSAgZW5hYmxlZCAgSWYgYXV0byBBQ0sgcHJvY2VkdXJlIHNob3VsZCBiZSBlbmFibGVkLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2F1dG9fYWNrX3NldChib29sIGVuYWJsZWQpOworCisKKy8qKgorICogQGJyaWVmIEdldCBjdXJyZW50bHkgdXNlZCBjaGFubmVsLgorICoKKyAqIEByZXR1cm4gIENoYW5uZWwgbnVtYmVyIHVzZWQgYnkgdGhlIGRyaXZlci4KKyAqLwordWludDhfdCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9jaGFubmVsX2dldCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgU2V0IGNoYW5uZWwgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIGRyaXZlci4KKyAqCisgKiBAcGFyYW1baW5dICBjaGFubmVsICBOdW1iZXIgb2YgY2hhbm5lbCB1c2VkIGJ5IHRoZSBkcml2ZXIuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfY2hhbm5lbF9zZXQodWludDhfdCBjaGFubmVsKTsKKworLyoqCisgKiBAYnJpZWYgR2V0IHRyYW5zbWl0IHBvd2VyLgorICoKKyAqIEByZXR1cm5zICBUcmFuc21pdCBwb3dlciBbZEJtXS4KKyAqLworaW50OF90IG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3R4X3Bvd2VyX2dldCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgU2V0IHRyYW5zbWl0IHBvd2VyIHVzZWQgZm9yIEFDSyBmcmFtZXMuCisgKgorICogQHBhcmFtW2luXSAgZGJtICBUcmFuc21pdCBwb3dlciBbZEJtXS4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl90eF9wb3dlcl9zZXQoaW50OF90IGRibSk7CisKKy8qKgorICogQGJyaWVmIFNldCBQQU4gSWQgdXNlZCBieSB0aGlzIGRldmljZS4KKyAqCisgKiBAcGFyYW1baW5dICBwX3Bhbl9pZCAgUG9pbnRlciB0byBQQU4gSWQgKDIgYnl0ZXMsIGxpdHRsZS1lbmRpYW4pLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgY29weSBvZiB0aGUgUEFOIElkLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3Bhbl9pZF9zZXQoY29uc3QgdWludDhfdCAqIHBfcGFuX2lkKTsKKworLyoqCisgKiBAYnJpZWYgU2V0IEV4dGVuZGVkIEFkZHJlc3Mgb2YgdGhpcyBkZXZpY2UuCisgKgorICogQHBhcmFtW2luXSAgcF9leHRlbmRlZF9hZGRyZXNzICBQb2ludGVyIHRvIGV4dGVuZGVkIGFkZHJlc3MgKDggYnl0ZXMsIGxpdHRsZS1lbmRpYW4pLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgY29weSBvZiB0aGUgYWRkcmVzcy4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9leHRlbmRlZF9hZGRyZXNzX3NldChjb25zdCB1aW50OF90ICogcF9leHRlbmRlZF9hZGRyZXNzKTsKKworLyoqCisgKiBAYnJpZWYgU2V0IFNob3J0IEFkZHJlc3Mgb2YgdGhpcyBkZXZpY2UuCisgKgorICogQHBhcmFtW2luXSAgcF9zaG9ydF9hZGRyZXNzICBQb2ludGVyIHRvIHNob3J0IGFkZHJlc3MgKDIgYnl0ZXMsIGxpdHRsZS1lbmRpYW4pLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgY29weSBvZiB0aGUgYWRkcmVzcy4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9zaG9ydF9hZGRyZXNzX3NldChjb25zdCB1aW50OF90ICogcF9zaG9ydF9hZGRyZXNzKTsKKworLyoqCisgKiBAYnJpZWYgQ2hlY2sgaWYgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBnaXZlbiBmcmFtZSBtYXRjaGVzIGFkZHJlc3Mgc3RvcmVkIGluIHRoaXMgbW9kdWxlIG9yCisgKiAgICAgICAgYnJvYWRjYXN0IGFkZHJlc3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBjaGVjayBpZiByZWNlaXZlZCBmcmFtZSBpcyBkZXN0aW5lZCB0byB0aGlzIG5vZGUuCisgKgorICogQHBhcmFtW2luXSAgcF9wc2R1ICBQb2ludGVyIHRvIFBTRFUgb2YgZnJhbWUgdG8gY2hlY2suCisgKgorICogQHJldHVybiAgSWYgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBnaXZlbiBQU0RVIG1hdGNoZXMgYWRkcmVzcyBzdG9yZWQgaW4gdGhpcyBtb2R1bGUgb3IgYnJvYWRjYXN0CisgKiAgICAgICAgICBhZGRyZXNzLgorICovCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2Rlc3RfYWRkcl9tYXRjaGVzKGNvbnN0IHVpbnQ4X3QgKiBwX3BzZHUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTlJGX0RSVl9SQURJTzgwMjE1NF9QSUJfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDNmNjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wLmgKQEAgLTAsMCArMSw2NyBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBOUkZfRFJJVkVSX1JBRElPODAyMTU0X1BSSU9SSVRZX0RST1BfSF9fCisjZGVmaW5lIE5SRl9EUklWRVJfUkFESU84MDIxNTRfUFJJT1JJVFlfRFJPUF9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBkZWZncm91cCBucmZfZHJpdmVyX3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3AgODAyLjE1LjQgZHJpdmVyIHByb2NlZHVyZXMgd2l0aCBsb3dlciBwcmlvcml0eS4KKyAqIEB7CisgKiBAaW5ncm91cCBucmZfZHJpdmVyX3JhZGlvODAyMTU0CisgKiBAYnJpZWYgSW50ZXJuYWwgcHJvY2VkdXJlcyBvZiA4MDIuMTUuNCBkcml2ZXIgdGhhdCBzaG91bGQgYmUgY2FsbGVkIHdpdGggbG93ZXIgcHJpb3JpdHkgdGhhbgorICogICAgICAgIHRoZSBjYWxsZXIncyBwcmlvcml0eS4KKyAqLworCisvKioKKyAqIEBicmllZiBJbml0aWFsaXplIG5vdGlmaWNhdGlvbiBtb2R1bGUuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wX2luaXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgZGlzY2FyZGluZyBvZiB0aGUgdGltZXNsb3QuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHRocm91Z2ggdGhpcyBtb2R1bGUgdG8gcHJldmVudCBjYWxsaW5nIGl0IGZyb20gYXJiaXRlciBjb250ZXh0LgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF90aW1lc2xvdF9leGl0KHZvaWQpOworCisvKioKKyAqQH0KKyAqKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIE5SRl9EUklWRVJfUkFESU84MDIxNTRfUFJJT1JJVFlfRFJPUF9IX18KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF9kaXJlY3QuYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3BfZGlyZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxNjNkOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3BfZGlyZWN0LmMKQEAgLTAsMCArMSw1MSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBwcm9jZWR1cmVzIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGxvd2VyIHByaW9yaXR5IHRoYW4gY2FsbGVyIGluCisgKiAgIHRoZSBucmYgODAyLjE1LjQgcmFkaW8gZHJpdmVyLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wLmgiCisKKyNpbmNsdWRlICJyYWFsL25yZl9yYWFsX2FwaS5oIgorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF9pbml0KHZvaWQpCit7CisgICAgLy8gSW50ZW50aW9uYWxseSBlbXB0eQorfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF90aW1lc2xvdF9leGl0KHZvaWQpCit7CisgICAgbnJmX3JhYWxfY29udGludW91c19tb2RlX2V4aXQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF9zd2kuYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3Bfc3dpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQyMjZiMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3Bfc3dpLmMKQEAgLTAsMCArMSw1MSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBwcm9jZWR1cmVzIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGxvd2VyIHByaW9yaXR5IHRoYW4gY2FsbGVyIGluCisgKiAgIHRoZSBucmYgODAyLjE1LjQgcmFkaW8gZHJpdmVyLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wLmgiCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3N3aS5oIgorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF9pbml0KHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfaW5pdCgpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF90aW1lc2xvdF9leGl0KHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfdGltZXNsb3RfZXhpdCgpOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9wcm9jZWR1cmVzX2R1cmF0aW9uLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9wcm9jZWR1cmVzX2R1cmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyYWI3NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3Byb2NlZHVyZXNfZHVyYXRpb24uaApAQCAtMCwwICsxLDkzIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBicmllZiBUaGlzIG1vZHVsZSBjb250YWlucyBjYWxjdWxhdGlvbnMgb2YgODAyLjE1LjQgcmFkaW8gZHJpdmVyIHByb2NlZHVyZXMgZHVyYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgTlJGX0RSVl9SQURJTzgwMjE1NF9QUk9DRURVUkVTX0RVUkFUSU9OX0hfCisjZGVmaW5lIE5SRl9EUlZfUkFESU84MDIxNTRfUFJPQ0VEVVJFU19EVVJBVElPTl9IXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZGVmaW5lIFBIWV9VU19QRVJfU1lNQk9MICAgICAxNgorI2RlZmluZSBQSFlfU1lNQk9MU19QRVJfT0NURVQgIDIKKyNkZWZpbmUgUEhZX1NIUl9EVVJBVElPTiAgICAgIDEwCisKKyNkZWZpbmUgQV9DQ0FfRFVSQVRJT04gICAgICAgICA4CisjZGVmaW5lIEFfVFVSTkFST1VORF9USU1FICAgICAxMgorI2RlZmluZSBBX1VOSVRfQkFDS09GRl9QRVJJT0QgMjAKKworI2RlZmluZSBOVU1fT0NURVRTX0lOX0FDSyAgICAgNgorCisjZGVmaW5lIE1BQ19BQ0tfV0FJVF9EVVJBVElPTiAoQV9VTklUX0JBQ0tPRkZfUEVSSU9EICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX1RVUk5BUk9VTkRfVElNRSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBIWV9TSFJfRFVSQVRJT04gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5VTV9PQ1RFVFNfSU5fQUNLICogUEhZX1NZTUJPTFNfUEVSX09DVEVUKSkKKworc3RhdGljIGlubGluZSB1aW50MTZfdCBucmZfZHJ2X3JhZGlvODAyMTU0X3R4X2R1cmF0aW9uX2dldCh1aW50OF90IHBzZHVfbGVuZ3RoLCBib29sIGFja19yZXF1ZXN0ZWQpCit7CisgICAgLy8gYVR1cm5hcm91bmRUaW1lICsgQ0NBICsgYVR1cm5hcm91bmRUaW1lICsgU0hSICsgUEhSICsgUFNEVQorICAgIC8vIGlmIEFDSzogKyBtYWNBY2tXYWl0RHVyYXRpb24KKyAgICB1aW50MTZfdCByZXN1bHQgPSBBX1RVUk5BUk9VTkRfVElNRSArIEFfQ0NBX0RVUkFUSU9OICsgQV9UVVJOQVJPVU5EX1RJTUUgKyBQSFlfU0hSX0RVUkFUSU9OOworICAgIHJlc3VsdCArPSAocHNkdV9sZW5ndGggKyAxKSAqIFBIWV9TWU1CT0xTX1BFUl9PQ1RFVDsKKworICAgIGlmIChhY2tfcmVxdWVzdGVkKQorICAgIHsKKyAgICAgICAgcmVzdWx0ICs9IE1BQ19BQ0tfV0FJVF9EVVJBVElPTjsKKyAgICB9CisKKyAgICByZXN1bHQgKj0gUEhZX1VTX1BFUl9TWU1CT0w7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IG5yZl9kcnZfcmFkaW84MDIxNTRfcnhfZHVyYXRpb25fZ2V0KHVpbnQ4X3QgcHNkdV9sZW5ndGgsIGJvb2wgYWNrX3JlcXVlc3RlZCkKK3sKKyAgICAvLyBTSFIgKyBQSFIgKyBQU0RVCisgICAgLy8gaWYgQUNLOiArIGFUdXJuYXJvdW5kVGltZSArIEFDSyBmcmFtZSBkdXJhdGlvbiArIGFUdXJuYXJvdW5kVGltZQorICAgIHVpbnQxNl90IHJlc3VsdCA9IFBIWV9TSFJfRFVSQVRJT04gKyAocHNkdV9sZW5ndGggKyAxKSAqIFBIWV9TWU1CT0xTX1BFUl9PQ1RFVDsKKworICAgIGlmIChhY2tfcmVxdWVzdGVkKQorICAgIHsKKyAgICAgICAgcmVzdWx0ICs9IEFfVFVSTkFST1VORF9USU1FICsKKyAgICAgICAgICAgICAgICAgIFBIWV9TSFJfRFVSQVRJT04gKworICAgICAgICAgICAgICAgICAgKE5VTV9PQ1RFVFNfSU5fQUNLICogUEhZX1NZTUJPTFNfUEVSX09DVEVUKSArCisgICAgICAgICAgICAgICAgICBBX1RVUk5BUk9VTkRfVElNRTsKKyAgICB9CisKKyAgICByZXN1bHQgKj0gUEhZX1VTX1BFUl9TWU1CT0w7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYgLyogTlJGX0RSVl9SQURJTzgwMjE1NF9QUk9DRURVUkVTX0RVUkFUSU9OX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0LmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhNTUxNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3QuaApAQCAtMCwwICsxLDExMCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBOUkZfRFJJVkVSX1JBRElPODAyMTU0X1JFUVVFU1RfSF9fCisjZGVmaW5lIE5SRl9EUklWRVJfUkFESU84MDIxNTRfUkVRVUVTVF9IX18KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBkZWZncm91cCBucmZfZHJpdmVyX3JhZGlvODAyMTU0X3JlcXVlc3QgODAyLjE1LjQgZHJpdmVyIHJlcXVlc3QKKyAqIEB7CisgKiBAaW5ncm91cCBucmZfZHJpdmVyX3JhZGlvODAyMTU0CisgKiBAYnJpZWYgUmVxdWVzdHMgdG8gdGhlIGRyaXZlciB0cmlnZ2VyZWQgZnJvbSB0aGUgTUFDIGxheWVyLgorICovCisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgcmVxdWVzdCBtb2R1bGUuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2luaXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgZW50ZXJpbmcgc2xlZXAgc3RhdGUuCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIFRoZSBkcml2ZXIgd2lsbCBlbnRlciBzbGVlcCBzdGF0ZS4KKyAqIEByZXR2YWwgIGZhbHNlICBUaGUgZHJpdmVyIGNhbm5vdCBlbnRlciBzbGVlcCBzdGF0ZSBkdWUgdG8gb25nb2luZyBvcGVyYXRpb24uCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3NsZWVwKHZvaWQpOworCisvKioKKyAqIEBicmllZiBSZXF1ZXN0IGVudGVyaW5nIHJlY2VpdmUgc3RhdGUuCisgKgorICogQHBhcmFtW2luXSAgY2hhbm5lbCAgQ2hhbm5lbCBudW1iZXIgdXNlZCB0byByZWNlaXZlIGRhdGEuCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIFRoZSBkcml2ZXIgd2lsbCBlbnRlciByZWNlaXZlIHN0YXRlLgorICogQHJldHZhbCAgZmFsc2UgIFRoZSBkcml2ZXIgY2Fubm90IGVudGVyIHJlY2VpdmUgc3RhdGUgZHVlIHRvIG9uZ29pbmcgb3BlcmF0aW9uLgorICovCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9yZWNlaXZlKHVpbnQ4X3QgY2hhbm5lbCk7CisKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgZW50ZXJpbmcgdHJhbnNtaXQgc3RhdGUuCisgKgorICogQHBhcmFtW2luXSAgcF9kYXRhICAgUG9pbnRlciB0byB0aGUgZnJhbWUgdG8gdHJhbnNtaXQuCisgKiBAcGFyYW1baW5dICBjaGFubmVsICBDaGFubmVsIG51bWJlciB1c2VkIHRvIHRyYW5zbWl0IHRoZSBmcmFtZS4KKyAqIEBwYXJhbVtpbl0gIHBvd2VyICAgIFRyYW5zbWl0dGVyIHBvd2VyIHVzZWQgdG8gdHJhbnNtaXQgdGhlIGZyYW1lLgorICogQHBhcmFtW2luXSAgY2NhICAgICAgSWYgdGhlIGRyaXZlciBzaG91bGQgcGVyZm9ybSBDQ0EgcHJvY2VkdXJlIGJlZm9yZSB0cmFuc21pc3Npb24uCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIFRoZSBkcml2ZXIgd2lsbCBlbnRlciB0cmFuc21pdCBzdGF0ZS4KKyAqIEByZXR2YWwgIGZhbHNlICBUaGUgZHJpdmVyIGNhbm5vdCBlbnRlciB0cmFuc21pdCBzdGF0ZSBkdWUgdG8gb25nb2luZyBvcGVyYXRpb24uCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3RyYW5zbWl0KGNvbnN0IHVpbnQ4X3QgKiBwX2RhdGEsIHVpbnQ4X3QgY2hhbm5lbCwgaW50OF90IHBvd2VyLCBib29sIGNjYSk7CisKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgZW50ZXJpbmcgZW5lcmd5IGRldGVjdGlvbiBzdGF0ZS4KKyAqCisgKiBAcGFyYW1baW5dICBjaGFubmVsICBDaGFubmVsIG51bWJlciB1c2VkIHRvIHBlcmZvcm0gZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUuCisgKiBAcGFyYW1baW5dICB0aW1lX3VzICBSZXF1ZXN0ZWQgZHVyYXRpb24gb2YgZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUuCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIFRoZSBkcml2ZXIgd2lsbCBlbnRlciBlbmVyZ3kgZGV0ZWN0aW9uIHN0YXRlLgorICogQHJldHZhbCAgZmFsc2UgIFRoZSBkcml2ZXIgY2Fubm90IGVudGVyIGVuZXJneSBkZXRlY3Rpb24gc3RhdGUgZHVlIHRvIG9uZ29pbmcgb3BlcmF0aW9uLgorICovCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9lbmVyZ3lfZGV0ZWN0aW9uKHVpbnQ4X3QgY2hhbm5lbCwgdWludDMyX3QgdGltZV91cyk7CisKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgdGhlIGRyaXZlciB0byBmcmVlIGdpdmVuIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW1baW5dICBwX2RhdGEgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBmcmVlLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9idWZmZXJfZnJlZSh1aW50OF90ICogcF9kYXRhKTsKKworLyoqCisgKkB9CisgKiovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBOUkZfRFJJVkVSX1JBRElPODAyMTU0X1JFUVVFU1RfSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2RpcmVjdC5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9kaXJlY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjM5Yzk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9kaXJlY3QuYwpAQCAtMCwwICsxLDEwNCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyByZXF1ZXN0cyB0byB0aGUgZHJpdmVyIHRyaWdnZXJlZCBkaXJlY3RseSBieSB0aGUgTUFDIGxheWVyLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0LmgiCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb24uaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbS5oIgorI2luY2x1ZGUgImhhbC9ucmZfcmFkaW8uaCIKKworI2luY2x1ZGUgPGNtc2lzL2NvcmVfY21GdW5jLmg+CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2luaXQodm9pZCkKK3sKKyAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3NsZWVwKHZvaWQpCit7CisgICAgYm9vbCByZXN1bHQ7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKCk7CisKKyAgICByZXN1bHQgPSBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9zbGVlcCgpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9yZWNlaXZlKHVpbnQ4X3QgY2hhbm5lbCkKK3sKKyAgICBib29sIHJlc3VsdDsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKworICAgIHJlc3VsdCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3JlY2VpdmUoY2hhbm5lbCk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3RyYW5zbWl0KGNvbnN0IHVpbnQ4X3QgKiBwX2RhdGEsIHVpbnQ4X3QgY2hhbm5lbCwgaW50OF90IHBvd2VyLCBib29sIGNjYSkKK3sKKyAgICBib29sIHJlc3VsdDsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKworICAgIHJlc3VsdCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3RyYW5zbWl0KHBfZGF0YSwgY2hhbm5lbCwgcG93ZXIsIGNjYSk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2VuZXJneV9kZXRlY3Rpb24odWludDhfdCBjaGFubmVsLCB1aW50MzJfdCB0aW1lX3VzKQoreworICAgIGJvb2wgcmVzdWx0OworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9lbnRlcigpOworCisgICAgcmVzdWx0ID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fZW5lcmd5X2RldGVjdGlvbihjaGFubmVsLCB0aW1lX3VzKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfYnVmZmVyX2ZyZWUodWludDhfdCAqIHBfZGF0YSkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX25vdGlmeV9idWZmZXJfZnJlZSgocnhfYnVmZmVyX3QgKilwX2RhdGEpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3Rfc3dpLmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3N3aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2M2MxOGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3N3aS5jCkBAIC0wLDAgKzEsMTcxIEBACisKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgcmVxdWVzdHMgdG8gdGhlIGRyaXZlciB0cmlnZ2VyZWQgYnkgdGhlIE1BQyBsYXllciB0aHJvdWdoIFNXSS4KKyAqCisgKi8KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdC5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9jb25maWcuaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb24uaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlci5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfc3dpLmgiCisjaW5jbHVkZSAiaGFsL25yZl9yYWRpby5oIgorCisjaW5jbHVkZSA8Y21zaXMvY29yZV9jbUZ1bmMuaD4KKyNpbmNsdWRlIDxjbXNpcy9jb3JlX2NtNC5oPgorCisjZGVmaW5lIENNU0lTX0lSUV9OVU1fVkVDVEFDVElWRV9ESUZGIDE2CisKKy8qKiBDaGVjayBpZiBhY3RpdmUgdmVjdG9yIHByaW9yaXR5IGlzIGhpZ2ggZW5vdWdoIHRvIGNhbGwgcmVxdWVzdHMgZGlyZWN0bHkuCisgKgorICogIEByZXR2YWwgIHRydWUgICBBY3RpdmUgdmVjdG9yIHByaW9yaXR5IGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gU1dJIHByaW9yaXR5LgorICogIEByZXR2YWwgIGZhbHNlICBBY3RpdmUgdmVjdG9yIHByaW9yaXR5IGlzIGxvd2VyIHRoYW4gU1dJIHByaW9yaXR5LgorICovCitzdGF0aWMgYm9vbCBhY3RpdmVfdmVjdG9yX3ByaW9yaXR5X2lzX2hpZ2godm9pZCkKK3sKKyAgICB1aW50MzJfdCAgYWN0aXZlX3ZlY3Rvcl9pZCA9IChTQ0ItPklDU1IgJiBTQ0JfSUNTUl9WRUNUQUNUSVZFX01zaykgPj4gU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3M7CisgICAgSVJRbl9UeXBlIGlycV9udW1iZXI7CisgICAgdWludDMyX3QgIGFjdGl2ZV9wcmlvcml0eTsKKworICAgIC8vIENoZWNrIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gbWFpbiB0aHJlYWQuCisgICAgaWYgKGFjdGl2ZV92ZWN0b3JfaWQgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhc3NlcnQoYWN0aXZlX3ZlY3Rvcl9pZCA+PSBDTVNJU19JUlFfTlVNX1ZFQ1RBQ1RJVkVfRElGRik7CisKKyAgICBpcnFfbnVtYmVyICAgICAgPSAoSVJRbl9UeXBlKShhY3RpdmVfdmVjdG9yX2lkIC0gQ01TSVNfSVJRX05VTV9WRUNUQUNUSVZFX0RJRkYpOworICAgIGFjdGl2ZV9wcmlvcml0eSA9IE5WSUNfR2V0UHJpb3JpdHkoaXJxX251bWJlcik7CisKKyAgICByZXR1cm4gYWN0aXZlX3ByaW9yaXR5IDw9IFJBRElPX05PVElGSUNBVElPTl9TV0lfUFJJT1JJVFk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2luaXQodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9pbml0KCk7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3NsZWVwKHZvaWQpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKworICAgIGlmIChhY3RpdmVfdmVjdG9yX3ByaW9yaXR5X2lzX2hpZ2goKSkKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9lbnRlcigpOworICAgICAgICByZXN1bHQgPSBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9zbGVlcCgpOworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9zbGVlcCgmcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9yZWNlaXZlKHVpbnQ4X3QgY2hhbm5lbCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgaWYgKGFjdGl2ZV92ZWN0b3JfcHJpb3JpdHlfaXNfaGlnaCgpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKCk7CisgICAgICAgIHJlc3VsdCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3JlY2VpdmUoY2hhbm5lbCk7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX3JlY2VpdmUoY2hhbm5lbCwgJnJlc3VsdCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfdHJhbnNtaXQoY29uc3QgdWludDhfdCAqIHBfZGF0YSwgdWludDhfdCBjaGFubmVsLCBpbnQ4X3QgcG93ZXIsIGJvb2wgY2NhKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKyAgICBpZiAoYWN0aXZlX3ZlY3Rvcl9wcmlvcml0eV9pc19oaWdoKCkpCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKyAgICAgICAgcmVzdWx0ID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fdHJhbnNtaXQocF9kYXRhLCBjaGFubmVsLCBwb3dlciwgY2NhKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2V4aXQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfdHJhbnNtaXQocF9kYXRhLCBjaGFubmVsLCBwb3dlciwgY2NhLCAmcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9lbmVyZ3lfZGV0ZWN0aW9uKHVpbnQ4X3QgY2hhbm5lbCwgdWludDMyX3QgdGltZV91cykKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgaWYgKGFjdGl2ZV92ZWN0b3JfcHJpb3JpdHlfaXNfaGlnaCgpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKCk7CisgICAgICAgIHJlc3VsdCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX2VuZXJneV9kZXRlY3Rpb24oY2hhbm5lbCwgdGltZV91cyk7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX2VuZXJneV9kZXRlY3Rpb24oY2hhbm5lbCwgdGltZV91cywgJnJlc3VsdCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfYnVmZmVyX2ZyZWUodWludDhfdCAqIHBfZGF0YSkKK3sKKyAgICBpZiAoYWN0aXZlX3ZlY3Rvcl9wcmlvcml0eV9pc19oaWdoKCkpCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fbm90aWZ5X2J1ZmZlcl9mcmVlKChyeF9idWZmZXJfdCAqKXBfZGF0YSk7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX2J1ZmZlcl9mcmVlKHBfZGF0YSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyLmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTdhODA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyLmMKQEAgLTAsMCArMSw3OSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBidWZmZXIgbWFuYWdlbWVudCBmb3IgZnJhbWVzIHJlY2VpdmVkIGJ5IG5SRiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlci5oIgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2NvbmZpZy5oIgorCisjaWYgUkFESU9fUlhfQlVGRkVSUyA8IDEKKyNlcnJvciBOb3QgZW5vdWdoIHJ4IGJ1ZmZlcnMgaW4gdGhlIDgwMi4xNS40IHJhZGlvIGRyaXZlci4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKworLy8vIFJlY2VpdmUgYnVmZmVyIChFYXN5RE1BIGNhbm5vdCBhZGRyZXNzIHdob2xlIFJBTS4gUGxhY2UgYnVmZmVyIGluIHRoZSBzcGVjaWFsIHNlY3Rpb24uKQorcnhfYnVmZmVyX3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJzW1JBRElPX1JYX0JVRkZFUlNdCisgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCJucmZfcmFkaW9fYnVmZmVyLm5yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVycyIpKSk7CisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKworI3ByYWdtYSBsb2NhdGlvbj0iTlJGX1JBRElPX0JVRkZFUiIKK3N0YXRpYyByeF9idWZmZXJfdCBucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlcnNbUkFESU9fUlhfQlVGRkVSU107CisKKyNlbmRpZgorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyX2luaXQodm9pZCkKK3sKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgUkFESU9fUlhfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJzW2ldLmZyZWUgPSB0cnVlOworICAgIH0KK30KKworcnhfYnVmZmVyX3QgKiBucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlcl9mcmVlX2ZpbmQodm9pZCkKK3sKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgUkFESU9fUlhfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG5yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyc1tpXS5mcmVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJm5yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyc1tpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTg5MjNjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyLmgKQEAgLTAsMCArMSw4MyBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAYnJpZWYgVGhpcyBtb2R1bGUgY29udGFpbnMgYnVmZmVyIGZvciBmcmFtZXMgcmVjZWl2ZWQgYnkgblJGIDgwMi4xNS40IHJhZGlvIGRyaXZlci4KKyAqCisgKi8KKworI2lmbmRlZiBOUkZfRFJWX1JBRElPODAyMTU0X1JYX0JVRkZFUl9IXworI2RlZmluZSBOUkZfRFJWX1JBRElPODAyMTU0X1JYX0JVRkZFUl9IXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9jb25zdC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGJyaWVmIFN0cnVjdHVyZSBjb250YWluaW5nIHJlY2VpdmVkIGZyYW1lLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQ4X3QgcHNkdVtNQVhfUEFDS0VUX1NJWkUgKyAxXTsKKyAgICBib29sICAgIGZyZWU7ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYnVmZmVyIGlzIGZyZWUgb3IgY29udGFpbnMgYSBmcmFtZS4KK30gcnhfYnVmZmVyX3Q7CisKKy8qKgorICogQGJyaWVmIEFycmF5IGNvbnRhaW5pbmcgYWxsIGJ1ZmZlcnMgdXNlZCB0byByZWNlaXZlIGZyYW1lLgorICoKKyAqIFRoaXMgYXJyYXkgaXMgaW4gZ2xvYmFsIHNjb3BlIHRvIGFsbG93IG9wdGltaXphdGlvbnMgaW4gRlNNIG1vZHVsZSBpbiBjYXNlIHRoZXJlIGlzIG9ubHkKKyAqIG9uZSBidWZmZXIgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUuCisgKgorICovCitleHRlcm4gcnhfYnVmZmVyX3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJzW107CisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgYnVmZmVyIGZvciByZWNlaXZlZCBmcmFtZXMuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJfaW5pdCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgR2V0IGZyZWUgYnVmZmVyIHRvIHJlY2VpdmUgYSBmcmFtZS4KKyAqCisgKiBAcmV0dXJuICBQb2ludGVyIHRvIGZyZWUgYnVmZmVyIG9mIE5VTEwgaWYgbm8gZnJlZSBidWZmZXIgaXMgYXZhaWxhYmxlLgorICovCityeF9idWZmZXJfdCAqIG5yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyX2ZyZWVfZmluZCh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5SRl9EUlZfUkFESU84MDIxNTRfUlhfQlVGRkVSX0hfICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3N3aS5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfc3dpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlY2ZjMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3N3aS5jCkBAIC0wLDAgKzEsNTU0IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIFNXSSBtYW5hZ2VyIGZvciBuUkYgODAyLjE1LjQgZHJpdmVyLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9zd2kuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTQuaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2NvbmZpZy5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbi5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfZnNtLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuaCIKKyNpbmNsdWRlICJoYWwvbnJmX2VndS5oIgorI2luY2x1ZGUgInJhYWwvbnJmX3JhYWxfYXBpLmgiCisKKy8qKiBTaXplIG9mIG5vdGlmaWNhdGlvbiBxdWV1ZS4KKyAqCisgKiBPbmUgc2xvdCBmb3IgZWFjaCByZWNlaXZlIGJ1ZmZlciwgb25lIGZvciB0cmFuc21pc3Npb24sIG9uZSBmb3IgYnVzeSBjaGFubmVsIGFuZCBvbmUgZm9yIGVuZXJneQorICogZGV0ZWN0aW9uLgorICovCisjZGVmaW5lIE5URl9RVUVVRV9TSVpFIChSQURJT19SWF9CVUZGRVJTICsgMykKKy8qKiBTaXplIG9mIHJlcXVlc3RzIHF1ZXVlLgorICoKKyAqIFR3byBpcyBtaW5pbWFsIHF1ZXVlIHNpemUuIEl0IGlzIG5vdCBleHBlY3RlZCBpbiBjdXJyZW50IGltcGxlbWVudGF0aW9uIHRvIHF1ZXVlIGEgZmV3IHJlcXVlc3RzLgorICovCisjZGVmaW5lIFJFUV9RVUVVRV9TSVpFIDIKKworI2RlZmluZSBTV0lfRUdVICAgICAgICBOUkZfRUdVMyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBMYWJlbCBvZiBTV0kgcGVyaXBoZXJhbC4KKyNkZWZpbmUgU1dJX0lSUW4gICAgICAgU1dJM19FR1UzX0lSUW4gICAgICAgICAgICAgICAgIC8vLzwgU3ltYm9sIG9mIFNXSSBJUlEgbnVtYmVyLgorI2RlZmluZSBTV0lfSVJRSGFuZGxlciBTV0kzX0VHVTNfSVJRSGFuZGxlciAgICAgICAgICAgLy8vPCBTeW1ib2wgb2YgU1dJIElSUSBoYW5kbGVyLgorCisjZGVmaW5lIE5URl9JTlQgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQwICAgICAgICAgICAgICAvLy88IExhYmVsIG9mIG5vdGlmaWNhdGlvbiBpbnRlcnJ1cHQuCisjZGVmaW5lIE5URl9UQVNLICBOUkZfRUdVX1RBU0tfVFJJR0dFUjAgICAgICAgICAgICAgICAvLy88IExhYmVsIG9mIG5vdGlmaWNhdGlvbiB0YXNrLgorI2RlZmluZSBOVEZfRVZFTlQgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQwICAgICAgICAgICAgLy8vPCBMYWJlbCBvZiBub3RpZmljYXRpb24gZXZlbnQuCisKKyNkZWZpbmUgVElNRVNMT1RfRVhJVF9JTlQgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQxICAgIC8vLzwgTGFiZWwgb2YgdGltZXNsb3QgZXhpdCBpbnRlcnJ1cHQuCisjZGVmaW5lIFRJTUVTTE9UX0VYSVRfVEFTSyAgTlJGX0VHVV9UQVNLX1RSSUdHRVIxICAgICAvLy88IExhYmVsIG9mIHRpbWVzbG90IGV4aXQgdGFzay4KKyNkZWZpbmUgVElNRVNMT1RfRVhJVF9FVkVOVCBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDEgIC8vLzwgTGFiZWwgb2YgdGltZXNsb3QgZXhpdCBldmVudC4KKworI2RlZmluZSBSRVFfSU5UICAgTlJGX0VHVV9JTlRfVFJJR0dFUkVEMiAgICAgICAgICAgICAgLy8vPCBMYWJlbCBvZiByZXF1ZXN0IGludGVycnVwdC4KKyNkZWZpbmUgUkVRX1RBU0sgIE5SRl9FR1VfVEFTS19UUklHR0VSMiAgICAgICAgICAgICAgIC8vLzwgTGFiZWwgb2YgcmVxdWVzdCB0YXNrLgorI2RlZmluZSBSRVFfRVZFTlQgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQyICAgICAgICAgICAgLy8vPCBMYWJlbCBvZiByZXF1ZXN0IGV2ZW50LgorCisvLy8gVHlwZXMgb2Ygbm90aWZpY2F0aW9ucyBpbiBub3RpZmljYXRpb24gcXVldWUuCit0eXBlZGVmIGVudW0KK3sKKyAgICBOVEZfVFlQRV9SRUNFSVZFRCwgICAgICAgICAvLy88IEZyYW1lIHJlY2VpdmVkCisgICAgTlRGX1RZUEVfVFJBTlNNSVRURUQsICAgICAgLy8vPCBGcmFtZSB0cmFuc21pdHRlZAorICAgIE5URl9UWVBFX0NIQU5ORUxfQlVTWSwgICAgIC8vLzwgRnJhbWUgdHJhbnNtaXNzaW9uIGZhaWx1cmUKKyAgICBOVEZfVFlQRV9FTkVSR1lfREVURUNURUQsICAvLy88IEVuZXJneSBkZXRlY3Rpb24gcHJvY2VkdXJlIGVuZGVkCit9IG5yZl9kcnZfcmFkaW84MDIxNTRfbnRmX3R5cGVfdDsKKworLy8vIE5vdGlmaWNhdGlvbiBkYXRhIGluIHRoZSBub3RpZmljYXRpb24gcXVldWUuCit0eXBlZGVmIHN0cnVjdAoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbnRmX3R5cGVfdCB0eXBlOyAgLy8vPCBOb3RpZmljYXRpb24gdHlwZS4KKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgKiBwX3BzZHU7ICAgICAgICAgICAgIC8vLzwgUG9pbnRlciB0byByZWNlaXZlZCBmcmFtZSBQU0RVLgorICAgICAgICAgICAgaW50OF90ICAgIHBvd2VyOyAgICAgICAgICAgICAgLy8vPCBSU1NJIG9mIHJlY2VpdmVkIGZyYW1lLgorICAgICAgICAgICAgaW50OF90ICAgIGxxaTsgICAgICAgICAgICAgICAgLy8vPCBMUUkgb2YgcmVjZWl2ZWQgZnJhbWUuCisgICAgICAgIH0gcmVjZWl2ZWQ7ICAgICAgICAgICAgICAgICAgICAgICAvLy88IFJlY2VpdmVkIGZyYW1lIGRldGFpbHMuCisKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgKiBwX3BzZHU7ICAgICAgICAgICAgIC8vLzwgUG9pbnRlciB0byByZWNlaXZlZCBBQ0sgUFNEVSBvciBOVUxMLgorICAgICAgICAgICAgaW50OF90ICAgIHBvd2VyOyAgICAgICAgICAgICAgLy8vPCBSU1NJIG9mIHJlY2VpdmVkIEFDSyBvciAwLgorICAgICAgICAgICAgaW50OF90ICAgIGxxaTsgICAgICAgICAgICAgICAgLy8vPCBMUUkgb2YgcmVjZWl2ZWQgQUNLIG9yIDAuCisgICAgICAgIH0gdHJhbnNtaXR0ZWQ7ICAgICAgICAgICAgICAgICAgICAvLy88IFRyYW5zbWl0dGVkIGZyYW1lIGRldGFpbHMuCisKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGludDhfdCAgICByZXN1bHQ7ICAgICAgICAgICAgIC8vLzwgRW5lcmd5IGRldGVjdGlvbiByZXN1bHQuCisgICAgICAgIH0gZW5lcmd5X2RldGVjdGVkOyAgICAgICAgICAgICAgICAvLy88IEVuZXJneSBkZXRlY3Rpb24gZGV0YWlscy4KKyAgICB9IGRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTm90aWZpY2F0aW9uIGRhdGEgZGVwZW5kaW5nIG9uIGl0J3MgdHlwZS4KK30gbnJmX2Rydl9yYWRpbzgwMjE1NF9udGZfZGF0YV90OworCisvLy8gVHlwZSBvZiByZXF1ZXN0cyBpbiByZXF1ZXN0IHF1ZXVlLgordHlwZWRlZiBlbnVtCit7CisgICAgUkVRX1RZUEVfU0xFRVAsCisgICAgUkVRX1RZUEVfUkVDRUlWRSwKKyAgICBSRVFfVFlQRV9UUkFOU01JVCwKKyAgICBSRVFfVFlQRV9FTkVSR1lfREVURUNUSU9OLAorICAgIFJFUV9UWVBFX0JVRkZFUl9GUkVFLAorfSBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcV90eXBlX3Q7CisKKy8vLyBSZXF1ZXN0IGRhdGEgaW4gcmVxdWVzdCBxdWV1ZS4KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXFfdHlwZV90IHR5cGU7ICAvLy88IFR5cGUgb2YgdGhlIHJlcXVlc3QuCisgICAgdW5pb24KKyAgICB7CisgICAgICAgIHN0cnVjdAorICAgICAgICB7CisgICAgICAgICAgICBib29sICogcF9yZXN1bHQ7ICAgICAgICAgICAgICAvLy88IFNsZWVwIHJlcXVlc3QgcmVzdWx0LgorICAgICAgICB9IHNsZWVwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBTbGVlcCByZXF1ZXN0IGRldGFpbHMuCisKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgICogcF9yZXN1bHQ7ICAgICAgICAgICAgIC8vLzwgUmVjZWl2ZSByZXF1ZXN0IHJlc3VsdC4KKyAgICAgICAgICAgIHVpbnQ4X3QgY2hhbm5lbDsgICAgICAgICAgICAgIC8vLzwgQ2hhbm5lbCB0byByZWNlaXZlIG9uLgorICAgICAgICB9IHJlY2VpdmU7ICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSZWNlaXZlIHJlcXVlc3QgZGV0YWlscy4KKworICAgICAgICBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCAgICAgICAgICAqIHBfcmVzdWx0OyAgICAgLy8vPCBUcmFuc21pdCByZXF1ZXN0IHJlc3VsdC4KKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKiBwX2RhdGE7ICAgICAgIC8vLzwgUG9pbnRlciB0byBQU0RVIHRvIHRyYW5zbWl0LgorICAgICAgICAgICAgdWludDhfdCAgICAgICAgIGNoYW5uZWw7ICAgICAgLy8vPCBDaGFubmVsIHRvIHRyYW5zbWl0IG9uLgorICAgICAgICAgICAgaW50OF90ICAgICAgICAgIHBvd2VyOyAgICAgICAgLy8vPCBSZXF1ZXN0ZWQgdHJhbnNtaXNzaW9uIHBvd2VyLgorICAgICAgICAgICAgYm9vbCAgICAgICAgICAgIGNjYTsgICAgICAgICAgLy8vPCBJZiBDQ0Egd2FzIHJlcXVlc3RlZCBwcmlvciB0byB0cmFuc21pc3Npb24uCisgICAgICAgIH0gdHJhbnNtaXQ7ICAgICAgICAgICAgICAgICAgICAgICAvLy88IFRyYW5zbWl0IHJlcXVlc3QgZGV0YWlscy4KKworICAgICAgICBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCAgICogcF9yZXN1bHQ7ICAgICAgICAgICAgLy8vPCBFbmVyZ3kgZGV0ZWN0aW9uIHJlcXVlc3QgcmVzdWx0LgorICAgICAgICAgICAgdWludDhfdCAgY2hhbm5lbDsgICAgICAgICAgICAgLy8vPCBDaGFubmVsIHRvIHBlcmZvcm0gZW5lcmd5IGRldGVjdGlvbiBvbi4KKyAgICAgICAgICAgIHVpbnQzMl90IHRpbWVfdXM7ICAgICAgICAgICAgIC8vLzwgUmVxdWVzdGVkIHRpbWUgb2YgZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUuCisgICAgICAgIH0gZW5lcmd5X2RldGVjdGlvbjsgICAgICAgICAgICAgICAvLy88IEVuZXJneSBkZXRlY3Rpb24gcmVxdWVzdCBkZXRhaWxzLgorCisgICAgICAgIHN0cnVjdAorICAgICAgICB7CisgICAgICAgICAgICByeF9idWZmZXJfdCAqIHBfZGF0YTsgICAgICAgICAvLy88IFBvaW50ZXIgdG8gcmVjZWl2ZSBidWZmZXIgdG8gZnJlZS4KKyAgICAgICAgfSBidWZmZXJfZnJlZTsgICAgICAgICAgICAgICAgICAgIC8vLzwgQnVmZmVyIGZyZWUgcmVxdWVzdCBkZXRhaWxzLgorICAgIH0gZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSZXF1ZXN0IGRhdGEgZGVwZW5kaW5nIG9uIGl0J3MgdHlwZS4KK30gbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXFfZGF0YV90OworCitzdGF0aWMgbnJmX2Rydl9yYWRpbzgwMjE1NF9udGZfZGF0YV90IG1fbnRmX3F1ZXVlW05URl9RVUVVRV9TSVpFXTsgIC8vLzwgTm90aWZpY2F0aW9uIHF1ZXVlLgorc3RhdGljIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICBtX250Zl9yX3B0cjsgIC8vLzwgTm90aWZpY2F0aW9uIHF1ZXVlIHJlYWQgaW5kZXguCitzdGF0aWMgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgIG1fbnRmX3dfcHRyOyAgLy8vPCBOb3RpZmljYXRpb24gcXVldWUgd3JpdGUgaW5kZXguCisKK3N0YXRpYyBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcV9kYXRhX3QgbV9yZXFfcXVldWVbUkVRX1FVRVVFX1NJWkVdOyAgLy8vPCBSZXF1ZXN0IHF1ZXVlLgorc3RhdGljIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICBtX3JlcV9yX3B0cjsgIC8vIFJlcXVlc3QgcXVldWUgcmVhZCBpbmRleC4KK3N0YXRpYyB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgbV9yZXFfd19wdHI7ICAvLyBSZXF1ZXN0IHF1ZXVlIHdyaXRlIGluZGV4LgorCisvKioKKyAqIEluY3JlbWVudCBnaXZlbiBpbmRleCBmb3IgYW55IHF1ZXVlLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIHBfcHRyICAgICAgIEluZGV4IHRvIGluY3JlbWVudC4KKyAqIEBwYXJhbVtpbl0gICAgIHF1ZXVlX3NpemUgIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkIHF1ZXVlX3B0cl9pbmNyZW1lbnQodWludDhfdCAqIHBfcHRyLCB1aW50OF90IHF1ZXVlX3NpemUpCit7CisgICAgaWYgKCsrKCpwX3B0cikgPj0gcXVldWVfc2l6ZSkKKyAgICB7CisgICAgICAgICpwX3B0ciA9IDA7CisgICAgfQorfQorCisvKioKKyAqIENoZWNrIGlmIGdpdmVuIHF1ZXVlIGlzIGZ1bGwuCisgKgorICogQHBhcmFtW2luXSAgcl9wdHIgICAgICAgUmVhZCBpbmRleCBhc3NvY2lhdGVkIHdpdGggZ2l2ZW4gcXVldWUuCisgKiBAcGFyYW1baW5dICB3X3B0ciAgICAgICBXcml0ZSBpbmRleCBhc3NvY2lhdGVkIHdpdGggZ2l2ZW4gcXVldWUuCisgKiBAcGFyYW1baW5dICBxdWV1ZV9zaXplICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHF1ZXVlLgorICoKKyAqIEByZXR2YWwgIHRydWUgICBHaXZlbiBxdWV1ZSBpcyBmdWxsLgorICogQHJldHZhbCAgZmFsc2UgIEdpdmVuIHF1ZXVlIGlzIG5vdCBmdWxsLgorICovCitzdGF0aWMgYm9vbCBxdWV1ZV9pc19mdWxsKHVpbnQ4X3Qgcl9wdHIsIHVpbnQ4X3Qgd19wdHIsIHVpbnQ4X3QgcXVldWVfc2l6ZSkKK3sKKyAgICBpZiAod19wdHIgPT0gKHJfcHRyIC0gMSkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoKHJfcHRyID09IDApICYmICh3X3B0ciA9PSBxdWV1ZV9zaXplIC0gMSkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogQ2hlY2sgaWYgZ2l2ZW4gcXVldWUgaXMgZW1wdHkuCisgKgorICogQHBhcmFtW2luXSAgcl9wdHIgIFJlYWQgaW5kZXggYXNzb2NpYXRlZCB3aXRoIGdpdmVuIHF1ZXVlLgorICogQHBhcmFtW2luXSAgd19wdHIgIFdyaXRlIGluZGV4IGFzc29jaWF0ZWQgd2l0aCBnaXZlbiBxdWV1ZS4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgR2l2ZW4gcXVldWUgaXMgZW1wdHkuCisgKiBAcmV0dmFsICBmYWxzZSAgR2l2ZW4gcXVldWUgaXMgbm90IGVtcHR5LgorICovCitzdGF0aWMgYm9vbCBxdWV1ZV9pc19lbXB0eSh1aW50OF90IHJfcHRyLCB1aW50OF90IHdfcHRyKQoreworICAgIHJldHVybiAocl9wdHIgPT0gd19wdHIpOworfQorCisvKioKKyAqIEluY3JlbWVudCBnaXZlbiBpbmRleCBhc3NvY2lhdGVkIHdpdGggbm90aWZpY2F0aW9uIHF1ZXVlLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIHBfcHRyICBQb2ludGVyIHRvIHRoZSBpbmRleCB0byBpbmNyZW1lbnQuCisgKi8KK3N0YXRpYyB2b2lkIG50Zl9xdWV1ZV9wdHJfaW5jcmVtZW50KHVpbnQ4X3QgKiBwX3B0cikKK3sKKyAgICBxdWV1ZV9wdHJfaW5jcmVtZW50KHBfcHRyLCBOVEZfUVVFVUVfU0laRSk7Cit9CisKKy8qKgorICogQ2hlY2sgaWYgbm90aWZpY2F0aW9uIHF1ZXVlIGlzIGZ1bGwuCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIE5vdGlmaWNhdGlvbiBxdWV1ZSBpcyBmdWxsLgorICogQHJldHZhbCAgZmFsc2UgIE5vdGlmaWNhdGlvbiBxdWV1ZSBpcyBub3QgZnVsbC4KKyAqLworc3RhdGljIGJvb2wgbnRmX3F1ZXVlX2lzX2Z1bGwodm9pZCkKK3sKKyAgICByZXR1cm4gcXVldWVfaXNfZnVsbChtX250Zl9yX3B0ciwgbV9udGZfd19wdHIsIE5URl9RVUVVRV9TSVpFKTsKK30KKworLyoqCisgKiBDaGVjayBpZiBub3RpZmljYXRpb24gcXVldWUgaXMgZW1wdHkuCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIE5vdGlmaWNhdGlvbiBxdWV1ZSBpcyBlbXB0eS4KKyAqIEByZXR2YWwgIGZhbHNlICBOb3RpZmljYXRpb24gcXVldWUgaXMgbm90IGVtcHR5LgorICovCitzdGF0aWMgYm9vbCBudGZfcXVldWVfaXNfZW1wdHkodm9pZCkKK3sKKyAgICByZXR1cm4gcXVldWVfaXNfZW1wdHkobV9udGZfcl9wdHIsIG1fbnRmX3dfcHRyKTsKK30KKworLyoqCisgKiBJbmNyZW1lbnQgZ2l2ZW4gaW5kZXggYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QgcXVldWUuCisgKgorICogQHBhcmFtW2lub3V0XSAgcF9wdHIgIFBvaW50ZXIgdG8gdGhlIGluZGV4IHRvIGluY3JlbWVudC4KKyAqLworc3RhdGljIHZvaWQgcmVxX3F1ZXVlX3B0cl9pbmNyZW1lbnQodWludDhfdCAqIHBfcHRyKQoreworICAgIHF1ZXVlX3B0cl9pbmNyZW1lbnQocF9wdHIsIFJFUV9RVUVVRV9TSVpFKTsKK30KKworLyoqCisgKiBDaGVjayBpZiByZXF1ZXN0IHF1ZXVlIGlzIGZ1bGwuCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIFJlcXVlc3QgcXVldWUgaXMgZnVsbC4KKyAqIEByZXR2YWwgIGZhbHNlICBSZXF1ZXN0IHF1ZXVlIGlzIG5vdCBmdWxsLgorICovCitzdGF0aWMgYm9vbCByZXFfcXVldWVfaXNfZnVsbCh2b2lkKQoreworICAgIHJldHVybiBxdWV1ZV9pc19mdWxsKG1fcmVxX3JfcHRyLCBtX3JlcV93X3B0ciwgUkVRX1FVRVVFX1NJWkUpOworfQorCisvKioKKyAqIENoZWNrIGlmIHJlcXVlc3QgcXVldWUgaXMgZW1wdHkuCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIFJlcXVlc3QgcXVldWUgaXMgZW1wdHkuCisgKiBAcmV0dmFsICBmYWxzZSAgUmVxdWVzdCBxdWV1ZSBpcyBub3QgZW1wdHkuCisgKi8KK3N0YXRpYyBib29sIHJlcV9xdWV1ZV9pc19lbXB0eSh2b2lkKQoreworICAgIHJldHVybiBxdWV1ZV9pc19lbXB0eShtX3JlcV9yX3B0ciwgbV9yZXFfd19wdHIpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX2luaXQodm9pZCkKK3sKKyAgICBtX250Zl9yX3B0ciA9IDA7CisgICAgbV9udGZfd19wdHIgPSAwOworCisgICAgbnJmX2VndV9pbnRfZW5hYmxlKFNXSV9FR1UsCisgICAgICAgICAgICAgICAgICAgICAgIE5URl9JTlQgfAorICAgICAgICAgICAgICAgICAgICAgICBUSU1FU0xPVF9FWElUX0lOVCB8CisgICAgICAgICAgICAgICAgICAgICAgIFJFUV9JTlQpOworCisgICAgTlZJQ19TZXRQcmlvcml0eShTV0lfSVJRbiwgUkFESU9fTk9USUZJQ0FUSU9OX1NXSV9QUklPUklUWSk7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoU1dJX0lSUW4pOworICAgIE5WSUNfRW5hYmxlSVJRKFNXSV9JUlFuKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9ub3RpZnlfcmVjZWl2ZWQodWludDhfdCAqIHBfZGF0YSwgaW50OF90IHBvd2VyLCBpbnQ4X3QgbHFpKQoreworICAgIGFzc2VydCghbnRmX3F1ZXVlX2lzX2Z1bGwoKSk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X250Zl9kYXRhX3QgKiBwX3Nsb3QgPSAmbV9udGZfcXVldWVbbV9udGZfd19wdHJdOworCisgICAgcF9zbG90LT50eXBlICAgICAgICAgICAgICAgICA9IE5URl9UWVBFX1JFQ0VJVkVEOworICAgIHBfc2xvdC0+ZGF0YS5yZWNlaXZlZC5wX3BzZHUgPSBwX2RhdGE7CisgICAgcF9zbG90LT5kYXRhLnJlY2VpdmVkLnBvd2VyICA9IHBvd2VyOworICAgIHBfc2xvdC0+ZGF0YS5yZWNlaXZlZC5scWkgICAgPSBscWk7CisKKyAgICBudGZfcXVldWVfcHRyX2luY3JlbWVudCgmbV9udGZfd19wdHIpOworCisgICAgbnJmX2VndV90YXNrX3RyaWdnZXIoU1dJX0VHVSwgTlRGX1RBU0spOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX25vdGlmeV90cmFuc21pdHRlZCh1aW50OF90ICogcF9kYXRhLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpCit7CisgICAgYXNzZXJ0KCFudGZfcXVldWVfaXNfZnVsbCgpKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbnRmX2RhdGFfdCAqIHBfc2xvdCA9ICZtX250Zl9xdWV1ZVttX250Zl93X3B0cl07CisKKyAgICBwX3Nsb3QtPnR5cGUgICAgICAgICAgICAgICAgICAgID0gTlRGX1RZUEVfVFJBTlNNSVRURUQ7CisgICAgcF9zbG90LT5kYXRhLnRyYW5zbWl0dGVkLnBfcHNkdSA9IHBfZGF0YTsKKyAgICBwX3Nsb3QtPmRhdGEudHJhbnNtaXR0ZWQucG93ZXIgID0gcG93ZXI7CisgICAgcF9zbG90LT5kYXRhLnRyYW5zbWl0dGVkLmxxaSAgICA9IGxxaTsKKworICAgIG50Zl9xdWV1ZV9wdHJfaW5jcmVtZW50KCZtX250Zl93X3B0cik7CisKKyAgICBucmZfZWd1X3Rhc2tfdHJpZ2dlcihTV0lfRUdVLCBOVEZfVEFTSyk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfbm90aWZ5X2J1c3lfY2hhbm5lbCh2b2lkKQoreworICAgIGFzc2VydCghbnRmX3F1ZXVlX2lzX2Z1bGwoKSk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X250Zl9kYXRhX3QgKiBwX3Nsb3QgPSAmbV9udGZfcXVldWVbbV9udGZfd19wdHJdOworCisgICAgcF9zbG90LT50eXBlID0gTlRGX1RZUEVfQ0hBTk5FTF9CVVNZOworCisgICAgbnRmX3F1ZXVlX3B0cl9pbmNyZW1lbnQoJm1fbnRmX3dfcHRyKTsKKworICAgIG5yZl9lZ3VfdGFza190cmlnZ2VyKFNXSV9FR1UsIE5URl9UQVNLKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9ub3RpZnlfZW5lcmd5X2RldGVjdGVkKGludDhfdCByZXN1bHQpCit7CisgICAgYXNzZXJ0KCFudGZfcXVldWVfaXNfZnVsbCgpKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbnRmX2RhdGFfdCAqIHBfc2xvdCA9ICZtX250Zl9xdWV1ZVttX250Zl93X3B0cl07CisKKyAgICBwX3Nsb3QtPnR5cGUgICAgICAgICAgICAgICAgICAgICAgICA9IE5URl9UWVBFX0VORVJHWV9ERVRFQ1RFRDsKKyAgICBwX3Nsb3QtPmRhdGEuZW5lcmd5X2RldGVjdGVkLnJlc3VsdCA9IHJlc3VsdDsKKworICAgIG50Zl9xdWV1ZV9wdHJfaW5jcmVtZW50KCZtX250Zl93X3B0cik7CisKKyAgICBucmZfZWd1X3Rhc2tfdHJpZ2dlcihTV0lfRUdVLCBOVEZfVEFTSyk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfdGltZXNsb3RfZXhpdCh2b2lkKQoreworICAgIGFzc2VydCghbnJmX2VndV9ldmVudF9jaGVjayhTV0lfRUdVLCBUSU1FU0xPVF9FWElUX0VWRU5UKSk7CisKKyAgICBucmZfZWd1X3Rhc2tfdHJpZ2dlcihTV0lfRUdVLCBUSU1FU0xPVF9FWElUX1RBU0spOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX3NsZWVwKGJvb2wgKiBwX3Jlc3VsdCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKyAgICBhc3NlcnQoIXJlcV9xdWV1ZV9pc19mdWxsKCkpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXFfZGF0YV90ICogcF9zbG90ID0gJm1fcmVxX3F1ZXVlW21fcmVxX3dfcHRyXTsKKworICAgIHBfc2xvdC0+dHlwZSAgICAgICAgICAgICAgICA9IFJFUV9UWVBFX1NMRUVQOworICAgIHBfc2xvdC0+ZGF0YS5zbGVlcC5wX3Jlc3VsdCA9IHBfcmVzdWx0OworCisgICAgcmVxX3F1ZXVlX3B0cl9pbmNyZW1lbnQoJm1fcmVxX3dfcHRyKTsKKworICAgIG5yZl9lZ3VfdGFza190cmlnZ2VyKFNXSV9FR1UsIFJFUV9UQVNLKTsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCgpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX3JlY2VpdmUodWludDhfdCBjaGFubmVsLCBib29sICogcF9yZXN1bHQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKCk7CisgICAgYXNzZXJ0KCFyZXFfcXVldWVfaXNfZnVsbCgpKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxX2RhdGFfdCAqIHBfc2xvdCA9ICZtX3JlcV9xdWV1ZVttX3JlcV93X3B0cl07CisKKyAgICBwX3Nsb3QtPnR5cGUgICAgICAgICAgICAgICAgICA9IFJFUV9UWVBFX1JFQ0VJVkU7CisgICAgcF9zbG90LT5kYXRhLnJlY2VpdmUuY2hhbm5lbCAgPSBjaGFubmVsOworICAgIHBfc2xvdC0+ZGF0YS5yZWNlaXZlLnBfcmVzdWx0ID0gcF9yZXN1bHQ7CisKKyAgICByZXFfcXVldWVfcHRyX2luY3JlbWVudCgmbV9yZXFfd19wdHIpOworCisgICAgbnJmX2VndV90YXNrX3RyaWdnZXIoU1dJX0VHVSwgUkVRX1RBU0spOworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfdHJhbnNtaXQoY29uc3QgdWludDhfdCAqIHBfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAgICAgICAgIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDhfdCAgICAgICAgICBwb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAgICAgICAgICAgIGNjYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAgICAgICAgICAqIHBfcmVzdWx0KQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9lbnRlcigpOworICAgIGFzc2VydCghcmVxX3F1ZXVlX2lzX2Z1bGwoKSk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcV9kYXRhX3QgKiBwX3Nsb3QgPSAmbV9yZXFfcXVldWVbbV9yZXFfd19wdHJdOworCisgICAgcF9zbG90LT50eXBlICAgICAgICAgICAgICAgICAgID0gUkVRX1RZUEVfVFJBTlNNSVQ7CisgICAgcF9zbG90LT5kYXRhLnRyYW5zbWl0LnBfZGF0YSAgID0gcF9kYXRhOworICAgIHBfc2xvdC0+ZGF0YS50cmFuc21pdC5jaGFubmVsICA9IGNoYW5uZWw7CisgICAgcF9zbG90LT5kYXRhLnRyYW5zbWl0LnBvd2VyICAgID0gcG93ZXI7CisgICAgcF9zbG90LT5kYXRhLnRyYW5zbWl0LmNjYSAgICAgID0gY2NhOworICAgIHBfc2xvdC0+ZGF0YS50cmFuc21pdC5wX3Jlc3VsdCA9IHBfcmVzdWx0OworCisgICAgcmVxX3F1ZXVlX3B0cl9pbmNyZW1lbnQoJm1fcmVxX3dfcHRyKTsKKworICAgIG5yZl9lZ3VfdGFza190cmlnZ2VyKFNXSV9FR1UsIFJFUV9UQVNLKTsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCgpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX2VuZXJneV9kZXRlY3Rpb24odWludDhfdCBjaGFubmVsLCB1aW50MzJfdCB0aW1lX3VzLCBib29sICogcF9yZXN1bHQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKCk7CisgICAgYXNzZXJ0KCFyZXFfcXVldWVfaXNfZnVsbCgpKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxX2RhdGFfdCAqIHBfc2xvdCA9ICZtX3JlcV9xdWV1ZVttX3JlcV93X3B0cl07CisKKyAgICBwX3Nsb3QtPnR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFJFUV9UWVBFX0VORVJHWV9ERVRFQ1RJT047CisgICAgcF9zbG90LT5kYXRhLmVuZXJneV9kZXRlY3Rpb24uY2hhbm5lbCAgPSBjaGFubmVsOworICAgIHBfc2xvdC0+ZGF0YS5lbmVyZ3lfZGV0ZWN0aW9uLnRpbWVfdXMgID0gdGltZV91czsKKyAgICBwX3Nsb3QtPmRhdGEuZW5lcmd5X2RldGVjdGlvbi5wX3Jlc3VsdCA9IHBfcmVzdWx0OworCisgICAgcmVxX3F1ZXVlX3B0cl9pbmNyZW1lbnQoJm1fcmVxX3dfcHRyKTsKKworICAgIG5yZl9lZ3VfdGFza190cmlnZ2VyKFNXSV9FR1UsIFJFUV9UQVNLKTsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCgpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX2J1ZmZlcl9mcmVlKHVpbnQ4X3QgKiBwX2RhdGEpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKCk7CisgICAgYXNzZXJ0KCFyZXFfcXVldWVfaXNfZnVsbCgpKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxX2RhdGFfdCAqIHBfc2xvdCA9ICZtX3JlcV9xdWV1ZVttX3JlcV93X3B0cl07CisKKyAgICBwX3Nsb3QtPnR5cGUgICAgICAgICAgICAgICAgICAgID0gUkVRX1RZUEVfQlVGRkVSX0ZSRUU7CisgICAgcF9zbG90LT5kYXRhLmJ1ZmZlcl9mcmVlLnBfZGF0YSA9IChyeF9idWZmZXJfdCAqKXBfZGF0YTsKKworICAgIHJlcV9xdWV1ZV9wdHJfaW5jcmVtZW50KCZtX3JlcV93X3B0cik7CisKKyAgICBucmZfZWd1X3Rhc2tfdHJpZ2dlcihTV0lfRUdVLCBSRVFfVEFTSyk7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2V4aXQoKTsKK30KKwordm9pZCBTV0lfSVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmIChucmZfZWd1X2V2ZW50X2NoZWNrKFNXSV9FR1UsIE5URl9FVkVOVCkpCisgICAgeworICAgICAgICBucmZfZWd1X2V2ZW50X2NsZWFyKFNXSV9FR1UsIE5URl9FVkVOVCk7CisKKyAgICAgICAgd2hpbGUgKCFudGZfcXVldWVfaXNfZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9udGZfZGF0YV90ICogcF9zbG90ID0gJm1fbnRmX3F1ZXVlW21fbnRmX3JfcHRyXTsKKworICAgICAgICAgICAgc3dpdGNoIChwX3Nsb3QtPnR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBOVEZfVFlQRV9SRUNFSVZFRDoKKyAgICAgICAgICAgICAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZWNlaXZlZChwX3Nsb3QtPmRhdGEucmVjZWl2ZWQucF9wc2R1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfc2xvdC0+ZGF0YS5yZWNlaXZlZC5wb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3Nsb3QtPmRhdGEucmVjZWl2ZWQubHFpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE5URl9UWVBFX1RSQU5TTUlUVEVEOgorICAgICAgICAgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3RyYW5zbWl0dGVkKHBfc2xvdC0+ZGF0YS50cmFuc21pdHRlZC5wX3BzZHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9zbG90LT5kYXRhLnRyYW5zbWl0dGVkLnBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfc2xvdC0+ZGF0YS50cmFuc21pdHRlZC5scWkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTlRGX1RZUEVfQ0hBTk5FTF9CVVNZOgorICAgICAgICAgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2J1c3lfY2hhbm5lbCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTlRGX1RZUEVfRU5FUkdZX0RFVEVDVEVEOgorICAgICAgICAgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2VuZXJneV9kZXRlY3RlZChwX3Nsb3QtPmRhdGEuZW5lcmd5X2RldGVjdGVkLnJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbnRmX3F1ZXVlX3B0cl9pbmNyZW1lbnQoJm1fbnRmX3JfcHRyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChucmZfZWd1X2V2ZW50X2NoZWNrKFNXSV9FR1UsIFRJTUVTTE9UX0VYSVRfRVZFTlQpKQorICAgIHsKKyAgICAgICAgbnJmX3JhYWxfY29udGludW91c19tb2RlX2V4aXQoKTsKKworICAgICAgICBucmZfZWd1X2V2ZW50X2NsZWFyKFNXSV9FR1UsIFRJTUVTTE9UX0VYSVRfRVZFTlQpOworICAgIH0KKworICAgIGlmIChucmZfZWd1X2V2ZW50X2NoZWNrKFNXSV9FR1UsIFJFUV9FVkVOVCkpCisgICAgeworICAgICAgICBucmZfZWd1X2V2ZW50X2NsZWFyKFNXSV9FR1UsIFJFUV9FVkVOVCk7CisKKyAgICAgICAgd2hpbGUgKCFyZXFfcXVldWVfaXNfZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXFfZGF0YV90ICogcF9zbG90ID0gJm1fcmVxX3F1ZXVlW21fcmVxX3JfcHRyXTsKKworICAgICAgICAgICAgc3dpdGNoIChwX3Nsb3QtPnR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBSRVFfVFlQRV9TTEVFUDoKKyAgICAgICAgICAgICAgICAgICAgKihwX3Nsb3QtPmRhdGEuc2xlZXAucF9yZXN1bHQpID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fc2xlZXAoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFJFUV9UWVBFX1JFQ0VJVkU6CisgICAgICAgICAgICAgICAgICAgICoocF9zbG90LT5kYXRhLnJlY2VpdmUucF9yZXN1bHQpID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fcmVjZWl2ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3Nsb3QtPmRhdGEucmVjZWl2ZS5jaGFubmVsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFJFUV9UWVBFX1RSQU5TTUlUOgorICAgICAgICAgICAgICAgICAgICAqKHBfc2xvdC0+ZGF0YS50cmFuc21pdC5wX3Jlc3VsdCkgPSBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV90cmFuc21pdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3Nsb3QtPmRhdGEudHJhbnNtaXQucF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfc2xvdC0+ZGF0YS50cmFuc21pdC5jaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfc2xvdC0+ZGF0YS50cmFuc21pdC5wb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3Nsb3QtPmRhdGEudHJhbnNtaXQuY2NhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFJFUV9UWVBFX0VORVJHWV9ERVRFQ1RJT046CisgICAgICAgICAgICAgICAgICAgICoocF9zbG90LT5kYXRhLmVuZXJneV9kZXRlY3Rpb24ucF9yZXN1bHQpID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9lbmVyZ3lfZGV0ZWN0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9zbG90LT5kYXRhLmVuZXJneV9kZXRlY3Rpb24uY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfc2xvdC0+ZGF0YS5lbmVyZ3lfZGV0ZWN0aW9uLnRpbWVfdXMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgUkVRX1RZUEVfQlVGRkVSX0ZSRUU6CisgICAgICAgICAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX25vdGlmeV9idWZmZXJfZnJlZShwX3Nsb3QtPmRhdGEuYnVmZmVyX2ZyZWUucF9kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXFfcXVldWVfcHRyX2luY3JlbWVudCgmbV9yZXFfcl9wdHIpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfc3dpLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODI4ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfc3dpLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9TV0lfSF9fCisjZGVmaW5lIE5SRl9EUklWRVJfUkFESU84MDIxNTRfU1dJX0hfXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGRlZmdyb3VwIG5yZl9kcml2ZXJfcmFkaW84MDIxNTRfc3dpIDgwMi4xNS40IGRyaXZlciBTV0kgbWFuYWdlbWVudAorICogQHsKKyAqIEBpbmdyb3VwIG5yZl9kcml2ZXJfcmFkaW84MDIxNTQKKyAqIEBicmllZiBTV0kgbWFuYWdlciBmb3IgODAyLjE1LjQgZHJpdmVyLgorICovCisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgU1dJIG1vZHVsZS4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9pbml0KHZvaWQpOworCisvKioKKyAqIEBicmllZiBOb3RpZnkgbmV4dCBoaWdoZXIgbGF5ZXIgdGhhdCBhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tIFNXSSBwcmlvcml0eSBsZXZlbC4KKyAqCisgKiBAcGFyYW1baW5dICBwX2RhdGEgIEFycmF5IG9mIGJ5dGVzIGNvbnRhaW5pbmcgUFNEVS4gRmlyc3QgYnl0ZSBjb250YWlucyBmcmFtZSBsZW5ndGgsIG90aGVyIGNvbnRhaW4gdGhlIGZyYW1lIGl0c2VsZi4KKyAqIEBwYXJhbVtpbl0gIHBvd2VyICAgUlNTSSBtZWFzdXJlZCBkdXJpbmcgdGhlIGZyYW1lIHJlY2VwdGlvbi4KKyAqIEBwYXJhbVtpbl0gIGxxaSAgICAgTFFJIGluZGljYXRpbmcgbWVhc3VyZWQgbGluayBxdWFsaXR5IGR1cmluZyB0aGUgZnJhbWUgcmVjZXB0aW9uLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX25vdGlmeV9yZWNlaXZlZCh1aW50OF90ICogcF9kYXRhLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpOworCisvKioKKyAqIEBicmllZiBOb3RpZnkgbmV4dCBoaWdoZXIgbGF5ZXIgdGhhdCBhIGZyYW1lIHdhcyB0cmFuc21pdHRlZCBmcm9tIFNXSSBwcmlvcml0eSBsZXZlbC4KKyAqCisgKiBAcGFyYW1baW5dICBwX2FjayAgUG9pbnRlciB0byBidWZmZXIgY29udGFpbmluZyBQU0RVIG9mIEFDSyBmcmFtZS4gTlVMTCBpZiBBQ0sgd2FzIG5vdCByZXF1ZXN0ZWQuCisgKiBAcGFyYW1baW5dICBwb3dlciAgUlNTSSBvZiByZWNlaXZlZCBmcmFtZSBvciAwIGlmIEFDSyB3YXMgbm90IHJlcXVlc3RlZC4KKyAqIEBwYXJhbVtpbl0gIGxxaSAgICBMUUkgb2YgcmVjZWl2ZWQgZnJhbWUgb2YgMCBpZiBBQ0sgd2FzIG5vdCByZXF1ZXN0ZWQuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfbm90aWZ5X3RyYW5zbWl0dGVkKHVpbnQ4X3QgKiBwX2RhdGEsIGludDhfdCBwb3dlciwgaW50OF90IGxxaSk7CisKKy8qKgorICogQGJyaWVmIE5vdGlmeSBuZXh0IGhpZ2hlciBsYXllciB0aGF0IGEgZnJhbWUgd2FzIG5vdCB0cmFuc21pdHRlZCBmcm9tIFNXSSBwcmlvcml0eSBsZXZlbC4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9ub3RpZnlfYnVzeV9jaGFubmVsKHZvaWQpOworCisvKioKKyAqIEBicmllZiBOb3RpZnkgbmV4dCBoaWdoZXIgbGF5ZXIgdGhhdCBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZSBlbmRlZCBmcm9tIFNXSSBwcmlvcml0eSBsZXZlbC4KKyAqCisgKiBAcGFyYW1baW5dICByZXN1bHQgIERldGVjdGVkIGVuZXJneSBsZXZlbC4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9ub3RpZnlfZW5lcmd5X2RldGVjdGVkKGludDhfdCByZXN1bHQpOworCisvKioKKyAqIEBicmllZiBSZXF1ZXN0IGRpc2NhcmRpbmcgb2YgdGhlIHRpbWVzbG90IGZyb20gU1dJIHByaW9yaXR5IGxldmVsLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB0aHJvdWdoIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gcHJldmVudCBjYWxsaW5nIGl0IGZyb20gYXJiaXRlciBjb250ZXh0LgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX3RpbWVzbG90X2V4aXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgZW50ZXJpbmcgc2xlZXAgc3RhdGUgZnJvbSBTV0kgcHJpb3JpdHkuCisgKgorICogQHBhcmFtW291dF0gIHBfcmVzdWx0ICBSZXN1bHQgb2YgZW50ZXJpbmcgc2xlZXAgc3RhdGUuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfc2xlZXAoYm9vbCAqIHBfcmVzdWx0KTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCBlbnRlcmluZyByZWNlaXZlIHN0YXRlIGZyb20gU1dJIHByaW9yaXR5LgorICoKKyAqIEBwYXJhbVtpbl0gICBjaGFubmVsICAgQ2hhbm5lbCBudW1iZXIgdXNlZCBmb3IgcmVjZWl2ZSBwcm9jZWR1cmUuCisgKiBAcGFyYW1bb3V0XSAgcF9yZXN1bHQgIFJlc3VsdCBvZiBlbnRlcmluZyByZWNlaXZlIHN0YXRlLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX3JlY2VpdmUodWludDhfdCBjaGFubmVsLCBib29sICogcF9yZXN1bHQpOworCisvKioKKyAqIEBiaXJlZiBSZXF1ZXN0IGVudGVyaW5nIHRyYW5zbWl0IHN0YXRlIGZyb20gU1dJIHByaW9yaXR5LgorICoKKyAqIEBwYXJhbVtpbl0gICBwX2RhdGEgICAgUG9pbnRlciB0byBQU0RVIG9mIHRoZSBmcmFtZSB0byB0cmFuc21pdC4KKyAqIEBwYXJhbVtpbl0gICBjaGFubmVsICAgQ2hhbm5lbCBudW1iZXIgdXNlZCBmb3IgcmVxdWVzdGVkIHRyYW5zbWlzc2lvbi4KKyAqIEBwYXJhbVtpbl0gICBwb3dlciAgICAgVHJhbnNtaXR0ZXIgcG93ZXIgZm9yIHJlcXVlc3RlZCB0cmFuc21pc3Npb24uCisgKiBAcGFyYW1baW5dICAgY2NhICAgICAgIElmIHRoZSBkcml2ZXIgc2hvdWxkIHBlcmZvcm0gQ0NBIHByb2NlZHVyZSBiZWZvcmUgdHJhbnNtaXNzaW9uLgorICogQHBhcmFtW291dF0gIHBfcmVzdWx0ICBSZXN1bHQgb2YgZW50ZXJpbmcgdHJhbnNtaXQgc3RhdGUuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfdHJhbnNtaXQoY29uc3QgdWludDhfdCAqIHBfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAgICAgICAgIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDhfdCAgICAgICAgICBwb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAgICAgICAgICAgIGNjYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAgICAgICAgICAqIHBfcmVzdWx0KTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCBlbnRlcmluZyBlbmVyZ3kgZGV0ZWN0aW9uIHN0YXRlIGZyb20gU1dJIHByaW9yaXR5LgorICoKKyAqIEBwYXJhbVtpbl0gICBjaGFubmVsICAgQ2hhbm5lbCBudW1iZXIgdXNlZCBmb3IgdGhlIGVuZXJneSBkZXRlY3Rpb24gcHJvY2VkdXJlLgorICogQHBhcmFtW2luXSAgIHRpbWVfdXMgICBSZXF1ZXN0ZWQgZHVyYXRpb24gb2YgZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUuCisgKiBAcGFyYW1bb3V0XSAgcF9yZXN1bHQgIFJlc3VsdCBvZiBlbnRlcmluZyBlbmVyZ3kgZGV0ZWN0aW9uIHN0YXRlLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX2VuZXJneV9kZXRlY3Rpb24odWludDhfdCBjaGFubmVsLCB1aW50MzJfdCB0aW1lX3VzLCBib29sICogcF9yZXN1bHQpOworCisvKioKKyAqIEBicmllZiBOb3RpZnkgRlNNIHRoYXQgZ2l2ZW4gYnVmZmVyIGlzIG5vdCB1c2VkIGFueW1vcmUgYW5kIGNhbiBiZSBmcmVlZC4KKyAqCisgKiBAcGFyYW1baW5dICBwX2RhdGEgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBmcmVlLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX2J1ZmZlcl9mcmVlKHVpbnQ4X3QgKiBwX2RhdGEpOworCisvKioKKyAqQH0KKyAqKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIE5SRl9EUklWRVJfUkFESU84MDIxNTRfU1dJX0hfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvbnJmX3JhYWxfYXBpLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9ucmZfcmFhbF9hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTU4MGNkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvbnJmX3JhYWxfYXBpLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGJyaWVmIFRoaXMgbW9kdWxlIGRlZmluZXMgUmFkaW8gQXJiaXRlciBBYnN0cmFjdGlvbiBMYXllciBpbnRlcmZhY2UuCisgKgorICovCisKKyNpZm5kZWYgTlJGX1JBQUxfQVBJX0hfCisjZGVmaW5lIE5SRl9SQUFMX0FQSV9IXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGRlZmdyb3VwIG5yZl9yYWFsIFJhZGlvIEFyYml0ZXIgQWJzdHJhY3Rpb24gTGF5ZXIKKyAqIEB7CisgKiBAaW5ncm91cCBucmZfZHJpdmVyX3JhZGlvODAyMTU0CisgKiBAYnJpZWYgUmFkaW8gQXJiaXRlciBBYnN0cmFjdGlvbiBMYXllciBpbnRlcmZhY2UuCisgKi8KKworLyoqCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSBSQUFMLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hhbGwgYmUgY2FsbGVkIG9uY2UsIGJlZm9yZSBhbnkgb3RoZXIgZnVuY3Rpb24gZnJvbSB0aGlzIG1vZHVsZS4KKyAqCisgKiBJbml0aWFsaXplIFJhZGlvIEFyYml0ZXIgQWJzdHJhY3Rpb24gTGF5ZXIgY2xpZW50LgorICoKKyAqIEBub3RlIEFyYml0ZXIgc3RhcnRzIGluIGluYWN0aXZlIG1vZGUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIEluIG9yZGVyIHRvIHN0YXJ0IHJhZGlvIGFjdGl2aXR5CisgKiAgICAgICBAcCBucmZfcmFhbF9jb250aW51b3VzX21vZGVfZW50ZXIgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQuCisgKgorICovCit2b2lkIG5yZl9yYWFsX2luaXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIFVuaW5pdGlhbGl6ZSBSQUFMLgorICoKKyAqIFVuaW5pdGlhbGl6ZSBSYWRpbyBBcmJpdGVyIEFic3RyYWN0aW9uIExheWVyIGNsaWVudC4KKyAqCisgKi8KK3ZvaWQgbnJmX3JhYWxfdW5pbml0KHZvaWQpOworCisvKioKKyAqIEBicmllZiBFbnRlciBhcmJpdGVyIGludG8gY29udGludW91cyByYWRpbyBtb2RlLgorICoKKyAqIEluIHRoaXMgbW9kZSByYWRpbyBhcmJpdGVyIHNob3VsZCB0cnkgdG8gY3JlYXRlIGxvbmcgY29udGludW91cyB0aW1lc2xvdHMgdGhhdCB3aWxsIGdpdmUgdGhlCisgKiByYWRpbyBkcml2ZXIgYXMgbXVjaCByYWRpbyB0aW1lIGFzIHBvc3NpYmxlIHdoaWxlIGRpc3R1cmJpbmcgdGhlIG90aGVyIGFjdGl2aXRpZXMgYXMgbGl0dGxlCisgKiBhcyBwb3NzaWJsZS4KKyAqIFRoZSBhcmJpdGVyIGNsaWVudCBzaGFsbCBtYWtlIHN1cmUgdGhhdCBoaWdoIGZyZXF1ZW5jeSBjbG9jayBpcyBlbmFibGVkIGluIGVhY2ggdGltZXNsb3QuCisgKgorICogQG5vdGUgVGhlIHN0YXJ0IG9mIGEgdGltZXNsb3Qgd2lsbCBiZSBpbmRpY2F0ZWQgYnkgQHAgbnJmX3JhYWxfdGltZXNsb3Rfc3RhcnRlZCBjYWxsLgorICoKKyAqLwordm9pZCBucmZfcmFhbF9jb250aW51b3VzX21vZGVfZW50ZXIodm9pZCk7CisKKy8qKgorICogQGJyaWVmIEV4aXQgYXJiaXRlciBmcm9tIGNvbnRpbm91cyBtb2RlLgorICoKKyAqIEluIHRoaXMgbW9kZSByYWRpbyBhcmJpdGVyIHdpbGwgbm90IGV4dGVuZCBvciBhbGxvY2F0ZSBhbnkgbW9yZSB0aW1lc2xvdHMgZm9yIHJhZGlvIGRyaXZlci4KKyAqCisgKi8KK3ZvaWQgbnJmX3JhYWxfY29udGludW91c19tb2RlX2V4aXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgdGltZXNsb3QgZm9yIHJhZGlvIGNvbW11bmljYXRpb24uCisgKgorICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIEBwIG5yZl9yYWFsX3RpbWVzbG90X3N0YXJ0ZWQgaW5kaWNhdGVkIHRoZSBzdGFydAorICogb2YgYSB0aW1lc2xvdC4KKyAqCisgKiBAcGFyYW1baW5dIGxlbmd0aF91cyAgUmVxdWVzdGVkIHJhZGlvIHRpbWVzbG90IGxlbmd0aCBpbiBtaWNyb3NlY29uZC4KKyAqCisgKiBAcmV0dmFsIFRSVUUgIFRoZSByYWRpbyBkcml2ZXIgbm93IGhhcyBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBSQURJTyBwZXJpcGhlcmFsIGZvciB0aGUKKyAqICAgICAgICAgICAgICAgZnVsbCBsZW5ndGggb2YgdGhlIHRpbWVzbG90LgorICogQHJldHZhbCBGQUxTRSBTbG90IGNhbm5vdCBiZSBhc3NpZ25lZCBkdWUgdG8gb3RoZXIgYWN0aXZpdGllcy4KKyAqCisgKi8KK2Jvb2wgbnJmX3JhYWxfdGltZXNsb3RfcmVxdWVzdCh1aW50MzJfdCBsZW5ndGhfdXMpOworCisvKioKKyAqIEBicmllZiBHZXQgbGVmdCB0aW1lIG9mIGN1cnJlbnRseSBncmFudGVkIHRpbWVzbG90IFt1c10uCisgKgorICogQHJldHVybnMgIE51bWJlciBvZiBtaWNyb3NlY29uZHMgbGVmdCBpbiBjdXJyZW50bHkgZ3JhbnRlZCB0aW1lc2xvdC4KKyAqLwordWludDMyX3QgbnJmX3JhYWxfdGltZXNsb3RfdXNfbGVmdF9nZXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIEVudGVyIGNyaXRpY2FsIHNlY3Rpb24gb2YgdGhlIG1vZHVsZS4KKyAqCisgKiBXaGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgQG5yZl9yYWFsX3RpbWVzbG90X2VuZGVkIGZ1bmN0aW9uIGlzIGJsb2NrZWQuCisgKgorICovCit2b2lkIG5yZl9yYWFsX2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIodm9pZCk7CisKKy8qKgorICogQGJyaWVmIEV4aXQgY3JpdGljYWwgc2VjdGlvbiBvZiB0aGUgbW9kdWxlLgorICoKKyAqIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkIGRyaXZlciBoYXMgdG8gZXhwZWN0IHRoZSBleGVjdXRpb24gb2YgdGhlIEBucmZfcmFhbF90aW1lc2xvdF9lbmRlZAorICogZnVuY3Rpb24uCisgKgorICovCit2b2lkIG5yZl9yYWFsX2NyaXRpY2FsX3NlY3Rpb25fZXhpdCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgUkFBTCBjbGllbnQgY2FsbHMgdGhpcyBtZXRob2QgdG8gbm90aWZ5IHJhZGlvIGRyaXZlciBhYm91dCB0aGUgc3RhcnQgb2YgYSB0aW1lc2xvdC4KKyAqCisgKiBUaGUgcmFkaW8gZHJpdmVyIG5vdyBoYXMgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgcGVyaXBoZXJhbHMgdW50aWwgQHAgbnJmX3JhYWxfdGltZXNsb3RfZW5kZWQKKyAqIGlzIGNhbGxlZC4KKyAqCisgKiBAbm90ZSBUaGUgaGlnaCBmcmVxdWVuY3kgY2xvY2sgbXVzdCBiZSBlbmFibGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKiBAbm90ZSBUaGUgZW5kIG9mIHRoZSB0aW1lc2xvdCB3aWxsIGJlIGluZGljYXRlZCBieSBAcCBucmZfcmFhbF90aW1lc2xvdF9lbmRlZCBmdW5jdGlvbi4KKyAqCisgKi8KK2V4dGVybiB2b2lkIG5yZl9yYWFsX3RpbWVzbG90X3N0YXJ0ZWQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIFJBQUwgY2xpZW50IGNhbGxzIHRoaXMgbWV0aG9kIHRvIG5vdGlmeSByYWRpbyBkcml2ZXIgYWJvdXQgdGhlIGVuZCBvZiBhIHRpbWVzbG90LgorICoKKyAqIERlcGVuZGluZyBvbiB0aGUgUkFBTCBjbGllbnQgY29uZmlndXJhdGlvbiwgcmFkaW8gZHJpdmVyIGhhcyBOUkZfUkFBTF9NQVhfQ0xFQU5fVVBfVElNRV9VUworICogbWljcm9zZWNvbmRzIHRvIGRvIGFueSBjbGVhbi11cCBhY3Rpb25zIG9uIFJBRElPIHBlcmlwaGVyYWwgYW5kIHN0b3AgdXNpbmcgaXQgY29tcGxldGVseS4KKyAqIFRodXMgYXJiaXRlciBoYXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIE5SRl9SQUFMX01BWF9DTEVBTl9VUF9USU1FX1VTIG1pY3Jvc2Vjb25kcyBiZWZvcmUKKyAqIHRpbWVzbG90IGlzIGZpbmlzaGVkLgorICoKKyAqIElmIFJBQUwgaXMgaW4gdGhlIGNvbnRpbnVvdXMgbW9kZSwgdGhlIG5leHQgdGltZXNsb3Qgd2lsbCBiZSBpbmRpY2F0ZWQgYWdhaW4gYnkKKyAqIEBwIG5yZl9yYWFsX3RpbWVzbG90X3N0YXJ0ZWQgZnVuY3Rpb24uCisgKgorICogVGhpcyBtZXRob2Qgc2hhbGwgbm90IGJlIGNhbGxlZCBpZiBAcCBucmZfcmFhbF9jb250aW51b3VzX21vZGVfZXhpdCBoYXMgYmVlbiBjYWxsZWQuIFJhZGlvCisgKiBkcml2ZXIgc2hhbGwgYXNzdW1lIHRoYXQgdGltZXNsb3QgaGFzIGJlZW4gZmluaXNoZWQgYWZ0ZXIgQHAgbnJmX3JhYWxfY29udGludW91c19tb2RlX2V4aXQKKyAqIGNhbGwuCisgKgorICogQG5vdGUgQmVjYXVzZSByYWRpbyBkcml2ZXIgbmVlZHMgdG8gc3RvcCBhbnkgb3BlcmF0aW9uIG9uIFJBRElPIHBlcmlwaGVyYWwgd2l0aGluCisgKiAgICAgICBOUkZfUkFBTF9NQVhfQ0xFQU5fVVBfVElNRV9VUyBtaWNyb3NlY29uZHMsIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBoaWdoCisgKiAgICAgICBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWwgdG8gYXZvaWQgdW53YW50ZWQgZGVsYXlzLgorICoKKyAqLworZXh0ZXJuIHZvaWQgbnJmX3JhYWxfdGltZXNsb3RfZW5kZWQodm9pZCk7CisKKy8qKgorICpAfQorICoqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTlJGX1JBQUxfQVBJX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9ucmZfcmFhbF9jb25maWcuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL25yZl9yYWFsX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NjVhNjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9ucmZfcmFhbF9jb25maWcuaApAQCAtMCwwICsxLDkwIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIE5SRl9SQUFMX0NPTkZJR19IX18KKyNkZWZpbmUgTlJGX1JBQUxfQ09ORklHX0hfXworCisjaW5jbHVkZSA8bnJmLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAZGVmZ3JvdXAgbnJmX3JhYWxfY29uZmlnIFJBQUwgY29uZmlndXJhdGlvbgorICogQHsKKyAqIEBpbmdyb3VwIG5yZl9kcml2ZXJfcmFkaW84MDIxNTQKKyAqIEBicmllZiBDb25maWd1cmF0aW9uIG9mIFJhZGlvIEFyYml0ZXIgQWJzdHJhY3Rpb24gTGF5ZXIuCisgKi8KKworLyoqCisgKiBAZGVmIE5SRl9SQUFMX01BWF9DTEVBTl9VUF9USU1FX1VTCisgKgorICogTWF4aW11bSB0aW1lIHdpdGhpbiByYWRpbyBkcml2ZXIgbmVlZHMgdG8gZG8gYW55IGNsZWFuLXVwIGFjdGlvbnMgb24gUkFESU8gcGVyaXBoZXJhbAorICogYW5kIHN0b3AgdXNpbmcgaXQgY29tcGxldGVseS4KKyAqCisgKi8KKyNpZm5kZWYgTlJGX1JBQUxfTUFYX0NMRUFOX1VQX1RJTUVfVVMKKyNkZWZpbmUgTlJGX1JBQUxfTUFYX0NMRUFOX1VQX1RJTUVfVVMgIDEwMAorI2VuZGlmCisKKy8qKgorICogQGRlZiBOUkZfUkFBTF9IRkNMS19TVEFSVAorICoKKyAqIE1hY3JvIHRvIHJlcXVlc3QgSGlnaCBGcmVxdWVuY3kgQ2xvY2sgc3RhcnQuIEl0IG1heSB1c2UgZXh0ZXJuYWwgZHJpdmVyIG9yIE9TIGZ1bmN0aW9uLgorICoKKyAqLworI2RlZmluZSBOUkZfUkFBTF9IRkNMS19TVEFSVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBOUkZfQ0xPQ0stPlRBU0tTX0hGQ0xLU1RBUlQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB3aGlsZShOUkZfQ0xPQ0stPkhGQ0xLU1RBVCAhPSAoQ0xPQ0tfSEZDTEtTVEFUX1NSQ19Nc2sgfCBDTE9DS19IRkNMS1NUQVRfU1RBVEVfTXNrKSkge30gICAgXAorICAgIH0gd2hpbGUoMCk7CisKKy8qKgorICogQGRlZiBOUkZfUkFBTF9IRkNMS19TVE9QCisgKgorICogTWFjcm8gdG8gcmVsZWFzZSBIaWdoIEZyZXF1ZW5jeSBDbG9jay4gSXQgbWF5IHVzZSBleHRlcm5hbCBkcml2ZXIgb3IgT1MgZnVuY3Rpb24uCisgKgorICovCisjZGVmaW5lIE5SRl9SQUFMX0hGQ0xLX1NUT1AoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE5SRl9DTE9DSy0+VEFTS1NfSEZDTEtTVE9QID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworLyoqCisgKkB9CisgKiovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBOUkZfUkFBTF9DT05GSUdfSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9zaW5nbGVfcGh5L3NpbmdsZV9waHkuYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL3NpbmdsZV9waHkvc2luZ2xlX3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODI4MDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9zaW5nbGVfcGh5L3NpbmdsZV9waHkuYwpAQCAtMCwwICsxLDk5IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBucmYgODAyLjE1LjQgcmFkaW8gYXJiaXRlciBmb3Igc2luZ2xlIHBoeS4KKyAqCisgKiBUaGlzIGFyYml0ZXIgc2hvdWxkIGJlIHVzZWQgd2hlbiA4MDIuMTUuNCBpcyB0aGUgb25seSB3aXJlbGVzcyBwcm90b2NvbCB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgIm5yZl9yYWFsX2FwaS5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAibnJmX3JhYWxfY29uZmlnLmgiCisKK3N0YXRpYyBib29sIG1fY29udGludW91czsKKwordm9pZCBucmZfcmFhbF9pbml0KHZvaWQpCit7CisgICAgbV9jb250aW51b3VzID0gZmFsc2U7Cit9CisKK3ZvaWQgbnJmX3JhYWxfdW5pbml0KHZvaWQpCit7CisgICAgLy8gSW50ZW50aW9uYWxseSBlbXB0eS4KK30KKwordm9pZCBucmZfcmFhbF9jb250aW51b3VzX21vZGVfZW50ZXIodm9pZCkKK3sKKyAgICBhc3NlcnQoIW1fY29udGludW91cyk7CisKKyAgICBOUkZfUkFBTF9IRkNMS19TVEFSVCgpOworICAgIG1fY29udGludW91cyA9IHRydWU7CisKKyAgICBucmZfcmFhbF90aW1lc2xvdF9zdGFydGVkKCk7Cit9CisKK3ZvaWQgbnJmX3JhYWxfY29udGludW91c19tb2RlX2V4aXQodm9pZCkKK3sKKyAgICBhc3NlcnQobV9jb250aW51b3VzKTsKKworICAgIG1fY29udGludW91cyA9IGZhbHNlOworICAgIE5SRl9SQUFMX0hGQ0xLX1NUT1AoKTsKK30KKworYm9vbCBucmZfcmFhbF90aW1lc2xvdF9yZXF1ZXN0KHVpbnQzMl90IGxlbmd0aF91cykKK3sKKyAgICAodm9pZCkgbGVuZ3RoX3VzOworCisgICAgYXNzZXJ0KG1fY29udGludW91cyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordWludDMyX3QgbnJmX3JhYWxfdGltZXNsb3RfdXNfbGVmdF9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gVUlOVDMyX01BWDsKK30KKwordm9pZCBucmZfcmFhbF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKHZvaWQpCit7CisgICAgLy8gSW50ZW50aW9uYWxseSBlbXB0eS4KK30KKwordm9pZCBucmZfcmFhbF9jcml0aWNhbF9zZWN0aW9uX2V4aXQodm9pZCkKK3sKKyAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5LgorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvc29mdGRldmljZS9ucmZfcmFhbF9zb2Z0ZGV2aWNlLmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9zb2Z0ZGV2aWNlL25yZl9yYWFsX3NvZnRkZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2I1YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvc29mdGRldmljZS9ucmZfcmFhbF9zb2Z0ZGV2aWNlLmMKQEAgLTAsMCArMSw2OTIgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIG5yZiA4MDIuMTUuNCByYWRpbyBhcmJpdGVyIGZvciBzb2Z0ZGV2aWNlLgorICoKKyAqIFRoaXMgYXJiaXRlciBzaG91bGQgYmUgdXNlZCB3aGVuIDgwMi4xNS40IHdvcmtzIGNvbmN1cnJlbnRseSB3aXRoIFNvZnREZXZpY2UncyByYWRpbyBzdGFjay4KKyAqCisgKi8KKworI2luY2x1ZGUgIm5yZl9yYWFsX3NvZnRkZXZpY2UuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPG5yZl9yYWFsX2FwaS5oPgorI2luY2x1ZGUgPG5yZl9kcnZfcmFkaW84MDIxNTRfZGVidWcuaD4KKyNpbmNsdWRlIDxucmZfZHJ2X2Nsb2NrLmg+CisjaW5jbHVkZSA8c29mdGRldmljZS5oPgorCisvKipAYnJpZWYgRW5hYmxlIFJlcXVlc3QgYW5kIEVuZCBvbiB0aW1lc2xvdCBzYWZldHkgaW50ZXJydXB0LiAqLworI2RlZmluZSBFTkFCTEVfUkVRVUVTVF9BTkRfRU5EX09OX1RJTUVTTE9UX0VORCAwCisKKy8qKkBicmllZiBNYXhpbXVtIGppdHRlciByZWxhdGl2ZSB0byB0aGUgc3RhcnQgdGltZSBvZiBTVEFSVCBhbmQgVElNRVIwIChzYWZldHkgbWFyZ2luKSBldmVudHMgLiAqLworI2RlZmluZSBUSU1FUl9UT19TSUdOQUxfSklUVEVSX1VTIE5SRl9SQURJT19TVEFSVF9KSVRURVJfVVMgKyA2CisKKy8qKkBicmllZiBUaW1lciBjb21wYXJlIGNoYW5uZWwgZGVmaW5pdGlvbnMuICovCisjZGVmaW5lIFRJTUVSX0NDX0VYVEVORCAgICAgICAgICAgMAorI2RlZmluZSBUSU1FUl9DQ19FWFRFTkRfSU5URU5TRVQgIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUwX01zaworI2RlZmluZSBUSU1FUl9DQ19FWFRFTkRfSU5URU5DTFIgIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUwX1BvcworCisjZGVmaW5lIFRJTUVSX0NDX01BUkdJTiAgICAgICAgICAgMQorI2RlZmluZSBUSU1FUl9DQ19NQVJHSU5fSU5URU5TRVQgIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUxX01zaworI2RlZmluZSBUSU1FUl9DQ19NQVJHSU5fSU5URU5DTFIgIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUxX1BvcworCisjZGVmaW5lIFRJTUVSX0NDX0NBUFRVUkUgICAgICAgICAgMgorCisvKipAYnJpZWYgRGVmaW5lcyBudW1iZXIgb2YgbWljcm9zZWNvbmRzIGluIG9uZSBzZWNvbmQuICovCisjZGVmaW5lIFVTX1BFUl9TICAgICAgICAgICAgICAgICAgMTAwMDAwMAorCisvKipAYnJpZWYgQ2VpbCBkaXZpc2lvbiBoZWxwZXIgKi8KKyNkZWZpbmUgRElWSURFX0FORF9DRUlMKEEsIEIpICgoKEEpICsgKEIpIC0gMSkgLyAoQikpCisKKy8qKkBicmllZiBEZWZpbmVzIHBlbmRpbmcgZXZlbnRzLiAqLwordHlwZWRlZiBlbnVtCit7CisgICAgUEVORElOR19FVkVOVF9OT05FID0gMCwKKyAgICBQRU5ESU5HX0VWRU5UX1NUQVJURUQsCisgICAgUEVORElOR19FVkVOVF9FTkRFRAorfSBwZW5kaW5nX2V2ZW50c190OworCisvKipAYnJpZWYgUmVxdWVzdCBwYXJhbWV0ZXJzLiAqLworc3RhdGljIG5yZl9yYWRpb19yZXF1ZXN0X3QgbV9yZXF1ZXN0OworCisvKipAYnJpZWYgUmV0dXJuIHBhcmFtZXRlciBmb3IgU0QgcmFkaW8gc2lnbmFsIGhhbmRsZXIuICovCitzdGF0aWMgbnJmX3JhZGlvX3NpZ25hbF9jYWxsYmFja19yZXR1cm5fcGFyYW1fdCBtX3JldF9wYXJhbTsKKworLyoqQGJyaWVmIEN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiB0aGUgUkFBTC4gKi8KK3N0YXRpYyBucmZfcmFhbF9zb2Z0ZGV2aWNlX2NmZ190IG1fY29uZmlnOworCisvKipAYnJpZWYgQ3VycmVudCB0aW1lc2xvdCBsZW5ndGguICovCitzdGF0aWMgdWludDE2X3QgbV90aW1lc2xvdF9sZW5ndGg7CisKKy8qKkBicmllZiBEZWZpbmVzIGlmIFJBQUwgaXMgaW4gY29udGlub3VzIG1vZGUuICovCitzdGF0aWMgdm9sYXRpbGUgYm9vbCBtX2NvbnRpbnVvdXMgPSBmYWxzZTsKKworLyoqQGJyaWVmIERlZmluZXMgaWYgUkFBTCBpcyBjdXJyZW50bHkgaW4gYSB0aW1lc2xvdC4gKi8KK3N0YXRpYyB2b2xhdGlsZSBib29sIG1faW5fdGltZXNsb3QgPSBmYWxzZTsKKworLyoqQGJyaWVmIEN1cnJlbnQgaXRlcmF0aW9uIHByb2Nlc3MgbnVtYmVyLiAqLworc3RhdGljIHZvbGF0aWxlIHVpbnQxNl90IG1fYWxsb2NfaXRlcnM7CisKKy8qKkBicmllZiBEZWZpbmVzIGlmIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gKi8KK3N0YXRpYyBib29sIG1faW5pdGlhbGl6ZSA9IGZhbHNlOworCisvKipAYnJlaWYgRGVmaW5lcyBpZiBSYWRpbyBEcml2ZXIgZW50ZXJlZCBjcml0aWNhbCBzZWN0aW9uLiAqLworc3RhdGljIHZvbGF0aWxlIGJvb2wgbV9pbl9jcml0aWNhbF9zZWN0aW9uID0gZmFsc2U7CisKKy8qKkBicmllZiBEZWZpbmVzIGN1cnJlbnQgcGVuZGluZyBldmVudC4gKi8KK3N0YXRpYyB2b2xhdGlsZSBwZW5kaW5nX2V2ZW50c190IG1fcGVuZGluZ19ldmVudCA9IFBFTkRJTkdfRVZFTlRfTk9ORTsKKworLyoqQGJyaWVmIERlZmluZXMgUlRDMCBjb3VudGVyIHZhbHVlIG9uIHRpbWVzbG90IGJlZ2luLiAqLworc3RhdGljIHVpbnQzMl90IG1fc3RhcnRfcnRjX3RpY2tzID0gMDsKKworLyoqQGJyaWVmIEV4dGVybmFsIEludGVycnVwdCBmcm9tIFJBRElPLiAqLworZXh0ZXJuIHZvaWQgUkFESU9fSVJRSGFuZGxlcih2b2lkKTsKKworLyoqQGJyaWVmIEluaXRpYWxpemUgdGltZXNsb3QgaW50ZXJuYWwgdmFyaWFibGVzLiAqLworc3RhdGljIGlubGluZSB2b2lkIHRpbWVzbG90X2RhdGFfaW5pdCh2b2lkKQoreworICAgIG1fYWxsb2NfaXRlcnMgICAgID0gMDsKKyAgICBtX3RpbWVzbG90X2xlbmd0aCA9IG1fY29uZmlnLnRpbWVzbG90X2xlbmd0aDsKK30KKworLyoqQGJyaWVmIEdldCBhY3R1YWwgdGltZS4gKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgdGltZXJfdGltZV9nZXQodm9pZCkKK3sKKyAgICBOUkZfVElNRVIwLT5UQVNLU19DQVBUVVJFW1RJTUVSX0NDX0NBUFRVUkVdID0gMTsKKyAgICByZXR1cm4gTlJGX1RJTUVSMC0+Q0NbVElNRVJfQ0NfQ0FQVFVSRV07Cit9CisKKy8qKkBicmllZiBDaGVjayBpZiBtYXJnaW4gaXMgYWxyZWFkeSByZWFjaGVkLiAqLworc3RhdGljIGlubGluZSBib29sIHRpbWVyX2lzX21hcmdpbl9yZWFjaGVkKHZvaWQpCit7CisgICAgcmV0dXJuIE5SRl9USU1FUjAtPkVWRU5UU19DT01QQVJFW1RJTUVSX0NDX01BUkdJTl07Cit9CisKKy8qKkBicmllZiBFbnRlciB0aW1lc2xvdCBjcml0aWNhbCBzZWN0aW9uLiAqLworc3RhdGljIGlubGluZSB2b2lkIHRpbWVzbG90X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIodm9pZCkKK3sKKyAgICBOVklDX0Rpc2FibGVJUlEoVElNRVIwX0lSUW4pOworICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKK30KKworLyoqQGJyaWVmIEV4aXQgdGltZXNsb3QgY3JpdGljYWwgc2VjdGlvbi4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lc2xvdF9jcml0aWNhbF9zZWN0aW9uX2V4aXQodm9pZCkKK3sKKyAgICBOVklDX0VuYWJsZUlSUShUSU1FUjBfSVJRbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lc2xvdF9zdGFydGVkX25vdGlmeSh2b2lkKQoreworICAgIGlmIChtX2luX3RpbWVzbG90ICYmIG1fY29udGludW91cykKKyAgICB7CisgICAgICAgIG5yZl9yYWFsX3RpbWVzbG90X3N0YXJ0ZWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lc2xvdF9lbmRlZF9ub3RpZnkodm9pZCkKK3sKKyAgICBpZiAoIW1faW5fdGltZXNsb3QgJiYgbV9jb250aW51b3VzKQorICAgIHsKKyAgICAgICAgbnJmX3JhYWxfdGltZXNsb3RfZW5kZWQoKTsKKyAgICB9Cit9CisKKy8qKkBicmllZiBDYWxjdWxhdGUgbWF4aW1hbCBjcnlzdGFsIGRyaWZ0LiAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBydGNfZHJpZnRfY2FsY3VsYXRlKHVpbnQzMl90IHRpbWVzbG90X2xlbmd0aCkKK3sKKyAgICByZXR1cm4gRElWSURFX0FORF9DRUlMKCgodWludDY0X3QpdGltZXNsb3RfbGVuZ3RoICogbV9jb25maWcubGZfY2xrX2FjY3VyYWN5X3BwbSksIFVTX1BFUl9TKTsKK30KKworLyoqQGJyaWVmIFByZXBhcmUgZWFybGllc3QgdGltZXNsb3QgcmVxdWVzdC4gKi8KK3N0YXRpYyB2b2lkIHRpbWVzbG90X3JlcXVlc3RfcHJlcGFyZSh2b2lkKQoreworICAgIG1lbXNldCgmbV9yZXF1ZXN0LCAwLCBzaXplb2YobV9yZXF1ZXN0KSk7CisgICAgbV9yZXF1ZXN0LnJlcXVlc3RfdHlwZSAgICAgICAgICAgICAgID0gTlJGX1JBRElPX1JFUV9UWVBFX0VBUkxJRVNUOworICAgIG1fcmVxdWVzdC5wYXJhbXMuZWFybGllc3QuaGZjbGsgICAgICA9IE5SRl9SQURJT19IRkNMS19DRkdfTk9fR1VBUkFOVEVFOworICAgIG1fcmVxdWVzdC5wYXJhbXMuZWFybGllc3QucHJpb3JpdHkgICA9IE5SRl9SQURJT19QUklPUklUWV9OT1JNQUw7CisgICAgbV9yZXF1ZXN0LnBhcmFtcy5lYXJsaWVzdC5sZW5ndGhfdXMgID0gbV90aW1lc2xvdF9sZW5ndGg7CisgICAgbV9yZXF1ZXN0LnBhcmFtcy5lYXJsaWVzdC50aW1lb3V0X3VzID0gbV9jb25maWcudGltZXNsb3RfdGltZW91dDsKK30KKworLyoqQGJyaWVmIFJlcXVlc3QgZWFybGllc3QgdGltZXNsb3QuICovCitzdGF0aWMgdm9pZCB0aW1lc2xvdF9yZXF1ZXN0KHZvaWQpCit7CisgICAgYXNzZXJ0KCFtX2luX3RpbWVzbG90KTsKKworICAgIHRpbWVzbG90X3JlcXVlc3RfcHJlcGFyZSgpOworICAgIHNkX3JhZGlvX3JlcXVlc3QoJm1fcmVxdWVzdCk7Cit9CisKKy8qKkBicmllZiBTZXQgdGltZXIgb24gdGltZXNsb3Qgc3RhcnRlZC4gKi8KK3N0YXRpYyB2b2lkIHRpbWVyX3N0YXJ0KHZvaWQpCit7CisgICAgTlJGX1RJTUVSMC0+VEFTS1NfU1RPUCAgICAgICAgICA9IDE7CisgICAgTlJGX1RJTUVSMC0+VEFTS1NfQ0xFQVIgICAgICAgICA9IDE7CisgICAgTlJGX1RJTUVSMC0+QklUTU9ERSAgICAgICAgICAgICA9IFRJTUVSX0JJVE1PREVfQklUTU9ERV8zMkJpdDsKKyAgICBOUkZfVElNRVIwLT5JTlRFTlNFVCAgICAgICAgICAgID0gVElNRVJfQ0NfTUFSR0lOX0lOVEVOU0VUOworICAgIE5SRl9USU1FUjAtPkNDW1RJTUVSX0NDX0VYVEVORF0gPSAwOworICAgIE5SRl9USU1FUjAtPkNDW1RJTUVSX0NDX01BUkdJTl0gPSBtX3RpbWVzbG90X2xlbmd0aCAtIG1fY29uZmlnLnRpbWVzbG90X3NhZmVfbWFyZ2luOworICAgIE5SRl9USU1FUjAtPlRBU0tTX1NUQVJUICAgICAgICAgPSAxOworCisgICAgTlZJQ19FbmFibGVJUlEoVElNRVIwX0lSUW4pOworfQorCisvKipAYnJpZWYgUmVzZXQgdGltZXIuICovCitzdGF0aWMgdm9pZCB0aW1lcl9yZXNldCh2b2lkKQoreworICAgIE5SRl9USU1FUjAtPlRBU0tTX1NUT1AgICAgICAgICAgICAgICAgICAgICAgPSAxOworICAgIE5SRl9USU1FUjAtPkVWRU5UU19DT01QQVJFW1RJTUVSX0NDX0VYVEVORF0gPSAwOworICAgIE5SRl9USU1FUjAtPkVWRU5UU19DT01QQVJFW1RJTUVSX0NDX01BUkdJTl0gPSAwOworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFRJTUVSMF9JUlFuKTsKK30KKworLyoqQGJyaWVmIFNldCB0aW1lciBvbiBleHRlbmQgZXZlbnQuICovCitzdGF0aWMgdm9pZCB0aW1lcl9leHRlbmQodm9pZCkKK3sKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShUSU1FUjBfSVJRbik7CisKKyAgICBOUkZfVElNRVIwLT5JTlRFTlNFVCAgICAgICAgICAgICA9IFRJTUVSX0NDX01BUkdJTl9JTlRFTlNFVDsKKyAgICBOUkZfVElNRVIwLT5DQ1tUSU1FUl9DQ19NQVJHSU5dICs9IG1fdGltZXNsb3RfbGVuZ3RoOworCisgICAgaWYgKCFtX2FsbG9jX2l0ZXJzKQorICAgIHsKKyAgICAgICAgTlJGX1RJTUVSMC0+SU5URU5TRVQgICAgICAgICAgICAgPSBUSU1FUl9DQ19FWFRFTkRfSU5URU5TRVQ7CisgICAgICAgIE5SRl9USU1FUjAtPkNDW1RJTUVSX0NDX0VYVEVORF0gKz0gbV90aW1lc2xvdF9sZW5ndGg7CisgICAgfQorfQorCisvKipAYnJpZWYgRWxpbWluYXRlIHRpbWVycyBqaXR0ZXJzLiAqLworc3RhdGljIHZvaWQgdGltZXJfaml0dGVyX2FkanVzdCh2b2lkKQoreworICAgIC8vIEFkanVzdCBUSU1FUjAgYW5kIFJUQzAgY2xvY2tzIGRyaWZ0cy4KKyAgICB1aW50MzJfdCB0aW1lcl90aWNrcyA9IHRpbWVyX3RpbWVfZ2V0KCk7CisgICAgdWludDY0X3QgcnRjX3RpY2tzICAgPSBOUkZfUlRDMC0+Q09VTlRFUjsKKworICAgIGlmIChydGNfdGlja3MgPiBtX3N0YXJ0X3J0Y190aWNrcykKKyAgICB7CisgICAgICAgIHJ0Y190aWNrcyAtPSBtX3N0YXJ0X3J0Y190aWNrczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gT3ZlcmZsb3cgZGV0ZWN0ZWQuCisgICAgICAgIHJ0Y190aWNrcyA9IFJUQ19DT1VOVEVSX0NPVU5URVJfTXNrIC0gbV9zdGFydF9ydGNfdGlja3MgKyBydGNfdGlja3M7CisgICAgfQorCisgICAgLy8gQWRqdXN0IFJUQzAgdGlja3MgdG8gVElNRVIwIHJlc29sdXRpb24uIFJUQzAgd29ya3Mgd2l0aCAzMjc2OGtIeiBzbyBmaXJzdAorICAgIC8vIG11bHRpcGx5IHdpdGggMTBeNiAobWljcm9zZWNvbmRzKSBhbmQgZGl2aWRlIGJ5IDMyNzY4SHogKDJeMTUpIHRvIGdldCBtaWNyb3NlY29uZHMuCisgICAgcnRjX3RpY2tzID0gRElWSURFX0FORF9DRUlMKChydGNfdGlja3MgKiBVU19QRVJfUyksIDMyNzY4KTsKKworICAgIC8vIENoZWNrIGlmIHdlIGFyZSBzdGlsbCBpbiB0aW1lLgorICAgIHVpbnQzMl90IGNjX21hcmdpbiA9IE5SRl9USU1FUjAtPkNDW1RJTUVSX0NDX01BUkdJTl07CisgICAgYXNzZXJ0KGNjX21hcmdpbiA+IHJ0Y190aWNrcyArIHJ0Y19kcmlmdF9jYWxjdWxhdGUoY2NfbWFyZ2luKSk7CisgICAgCisgICAgaWYgKHJ0Y190aWNrcyA+IHRpbWVyX3RpY2tzKQorICAgIHsKKyAgICAgICAgTlJGX1RJTUVSMC0+Q0NbVElNRVJfQ0NfTUFSR0lOXSAtPSAocnRjX3RpY2tzIC0gdGltZXJfdGlja3MpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBOUkZfVElNRVIwLT5DQ1tUSU1FUl9DQ19NQVJHSU5dICs9ICh0aW1lcl90aWNrcyAtIHJ0Y190aWNrcyk7CisgICAgfQorCisgICAgLy8gQWRkIHNhZmV0eSBkcmlmdCB0aW1lLgorICAgIE5SRl9USU1FUjAtPkNDW1RJTUVSX0NDX01BUkdJTl0gLT0gcnRjX2RyaWZ0X2NhbGN1bGF0ZSgyICogbV9jb25maWcudGltZXNsb3RfbGVuZ3RoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FUl9UT19TSUdOQUxfSklUVEVSX1VTOworfQorCisvKipAYnJpZWYgRGVjcmVhc2UgdGltZXNsb3QgbGVuZ3RoLiAqLworc3RhdGljIHZvaWQgdGltZXNsb3RfZGVjcmVhc2VfbGVuZ3RoKHZvaWQpCit7CisgICAgbV9hbGxvY19pdGVycysrOworICAgIG1fdGltZXNsb3RfbGVuZ3RoID0gbV90aW1lc2xvdF9sZW5ndGggPj4gMTsKK30KKworLyoqQGJyaWVmIEV4dGVuZCB0aW1lc2xvdC4gKi8KK3N0YXRpYyB2b2lkIHRpbWVzbG90X2V4dGVuZCh2b2lkKQoreworICAgIGlmIChtX2FsbG9jX2l0ZXJzIDwgbV9jb25maWcudGltZXNsb3RfYWxsb2NfaXRlcnMpCisgICAgeworICAgICAgICB0aW1lc2xvdF9kZWNyZWFzZV9sZW5ndGgoKTsKKworICAgICAgICAvLyBUcnkgdG8gZXh0ZW5kIHJpZ2h0IGFmdGVyIHN0YXJ0LgorICAgICAgICBtX3JldF9wYXJhbS5jYWxsYmFja19hY3Rpb24gICAgICAgICA9IE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OX0VYVEVORDsKKyAgICAgICAgbV9yZXRfcGFyYW0ucGFyYW1zLmV4dGVuZC5sZW5ndGhfdXMgPSBtX3RpbWVzbG90X2xlbmd0aDsKKworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9zZXQoUElOX0RCR19USU1FU0xPVF9FWFRFTkRfUkVRKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdGltZXJfaml0dGVyX2FkanVzdCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGltZXJfaXJxX2hhbmRsZSh2b2lkKQoreworICAgIC8vIFNhZmUgbWFyZ2luIGV4Y2VlZGVkLgorICAgIGlmIChOUkZfVElNRVIwLT5FVkVOVFNfQ09NUEFSRVtUSU1FUl9DQ19NQVJHSU5dKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waW5fY2xyKFBJTl9EQkdfVElNRVNMT1RfQUNUSVZFKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX1JBQUxfU0lHX0VWRU5UX01BUkdJTik7CisKKyAgICAgICAgbV9pbl90aW1lc2xvdCA9IGZhbHNlOworCisgICAgICAgIGlmIChtX2luX2NyaXRpY2FsX3NlY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX3BlbmRpbmdfZXZlbnQgIT0gUEVORElOR19FVkVOVF9FTkRFRCk7CisKKyAgICAgICAgICAgIGlmIChtX3BlbmRpbmdfZXZlbnQgPT0gUEVORElOR19FVkVOVF9TVEFSVEVEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fcGVuZGluZ19ldmVudCA9IFBFTkRJTkdfRVZFTlRfTk9ORTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdfZXZlbnQgPSBQRU5ESU5HX0VWRU5UX0VOREVEOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdGltZXNsb3RfZW5kZWRfbm90aWZ5KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZ25vcmUgYW55IG90aGVyIGV2ZW50cy4KKyAgICAgICAgdGltZXJfcmVzZXQoKTsKKworI2lmIChFTkFCTEVfUkVRVUVTVF9BTkRfRU5EX09OX1RJTUVTTE9UX0VORCA9PSAxKQorICAgICAgICB0aW1lc2xvdF9kYXRhX2luaXQoKTsKKyAgICAgICAgdGltZXNsb3RfcmVxdWVzdF9wcmVwYXJlKCk7CisgICAgICAgIG1fcmV0X3BhcmFtLmNhbGxiYWNrX2FjdGlvbiAgICAgICA9IE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OX1JFUVVFU1RfQU5EX0VORDsKKyAgICAgICAgbV9yZXRfcGFyYW0ucGFyYW1zLnJlcXVlc3QucF9uZXh0ID0gJm1fcmVxdWVzdDsKKyNlbHNlCisgICAgICAgIC8vIFJldHVybiBhbmQgd2FpdCBmb3IgTlJGX0VWVF9SQURJT19TRVNTSU9OX0lETEUgZXZlbnQuCisgICAgICAgIG1fcmV0X3BhcmFtLmNhbGxiYWNrX2FjdGlvbiA9IE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OX05PTkU7CisjZW5kaWYKKworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9NQVJHSU4pOworICAgIH0KKworICAgIC8vIEV4dGVuc2lvbiBtYXJnaW4gZXhjZWVkZWQuCisgICAgZWxzZSBpZiAoTlJGX1RJTUVSMC0+RVZFTlRTX0NPTVBBUkVbVElNRVJfQ0NfRVhURU5EXSkKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9FWFRFTkQpOworCisgICAgICAgIE5SRl9USU1FUjAtPklOVEVOQ0xSID0gKDEgPDwgVElNRVJfQ0NfRVhURU5EX0lOVEVOQ0xSKTsKKyAgICAgICAgTlJGX1RJTUVSMC0+RVZFTlRTX0NPTVBBUkVbVElNRVJfQ0NfRVhURU5EXSA9IDA7CisKKyAgICAgICAgaWYgKG1fY29udGludW91cyAmJgorICAgICAgICAgICAgTlJGX1RJTUVSMC0+Q0NbVElNRVJfQ0NfRVhURU5EXSArIG1fY29uZmlnLnRpbWVzbG90X2xlbmd0aCA8IG1fY29uZmlnLnRpbWVzbG90X21heF9sZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX3NldChQSU5fREJHX1RJTUVTTE9UX0VYVEVORF9SRVEpOworCisgICAgICAgICAgICBtX3JldF9wYXJhbS5jYWxsYmFja19hY3Rpb24gICAgICAgICA9IE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OX0VYVEVORDsKKyAgICAgICAgICAgIG1fcmV0X3BhcmFtLnBhcmFtcy5leHRlbmQubGVuZ3RoX3VzID0gbV9jb25maWcudGltZXNsb3RfbGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdGltZXJfaml0dGVyX2FkanVzdCgpOworCisgICAgICAgICAgICBtX3JldF9wYXJhbS5jYWxsYmFja19hY3Rpb24gPSBOUkZfUkFESU9fU0lHTkFMX0NBTExCQUNLX0FDVElPTl9OT05FOworICAgICAgICB9CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfRVhURU5EKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gU2hvdWxkIG5vdCBoYXBwZW4uCisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorfQorCisvKipAYnJpZWYgU2lnbmFsIGhhbmRsZXIuICovCitzdGF0aWMgbnJmX3JhZGlvX3NpZ25hbF9jYWxsYmFja19yZXR1cm5fcGFyYW1fdCAqc2lnbmFsX2hhbmRsZXIodWludDhfdCBzaWduYWxfdHlwZSkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fUkFBTF9TSUdfSEFORExFUik7CisKKyAgICAvLyBEZWZhdWx0IHJlc3BvbnNlLgorICAgIG1fcmV0X3BhcmFtLmNhbGxiYWNrX2FjdGlvbiA9IE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OX05PTkU7CisKKyAgICBpZiAoIW1fY29udGludW91cykKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX2NscihQSU5fREJHX1RJTUVTTE9UX0FDVElWRSk7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9FTkRFRCk7CisKKyAgICAgICAgbV9wZW5kaW5nX2V2ZW50ICAgICAgICAgICAgID0gUEVORElOR19FVkVOVF9OT05FOworICAgICAgICBtX2luX3RpbWVzbG90ICAgICAgICAgICAgICAgPSBmYWxzZTsKKworICAgICAgICAvLyBUT0RPOiBDaGFuZ2UgdG8gTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fRU5EIChLUktOV0stOTM3KQorICAgICAgICBtX3JldF9wYXJhbS5jYWxsYmFja19hY3Rpb24gPSBOUkZfUkFESU9fU0lHTkFMX0NBTExCQUNLX0FDVElPTl9OT05FOworICAgICAgICB0aW1lcl9yZXNldCgpOworCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1JBQUxfU0lHX0VWRU5UX0VOREVEKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fUkFBTF9TSUdfSEFORExFUik7CisgICAgICAgIHJldHVybiAmbV9yZXRfcGFyYW07CisgICAgfQorCisgICAgc3dpdGNoIChzaWduYWxfdHlwZSkKKyAgICB7CisgICAgY2FzZSBOUkZfUkFESU9fQ0FMTEJBQ0tfU0lHTkFMX1RZUEVfU1RBUlQ6IC8qKjwgVGhpcyBzaWduYWwgaW5kaWNhdGVzIHRoZSBzdGFydCBvZiB0aGUgcmFkaW8gdGltZXNsb3QuICovCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9zZXQoUElOX0RCR19USU1FU0xPVF9BQ1RJVkUpOworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfU1RBUlQpOworCisgICAgICAgIC8vIEVuc3VyZSBIRkNMSyBpcyBydW5uaW5nIGJlZm9yZSBzdGFydCBpcyBpc3N1ZWQuCisgICAgICAgIGFzc2VydChOUkZfQ0xPQ0stPkhGQ0xLU1RBVCA9PSAoQ0xPQ0tfSEZDTEtTVEFUX1NSQ19Nc2sgfCBDTE9DS19IRkNMS1NUQVRfU1RBVEVfTXNrKSk7CisKKyAgICAgICAgbV9zdGFydF9ydGNfdGlja3MgPSBOUkZfUlRDMC0+Q09VTlRFUjsKKyAgICAgICAgbV9pbl90aW1lc2xvdCAgICAgPSB0cnVlOworICAgICAgICBtX2FsbG9jX2l0ZXJzICAgICA9IDA7CisgICAgICAgIG1fdGltZXNsb3RfbGVuZ3RoID0gbV90aW1lc2xvdF9sZW5ndGg7CisKKyAgICAgICAgdGltZXJfc3RhcnQoKTsKKworICAgICAgICBpZiAobV9pbl9jcml0aWNhbF9zZWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV9wZW5kaW5nX2V2ZW50ICE9IFBFTkRJTkdfRVZFTlRfU1RBUlRFRCk7CisKKyAgICAgICAgICAgIGlmIChtX3BlbmRpbmdfZXZlbnQgPT0gUEVORElOR19FVkVOVF9FTkRFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdfZXZlbnQgPSBQRU5ESU5HX0VWRU5UX05PTkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9wZW5kaW5nX2V2ZW50ID0gUEVORElOR19FVkVOVF9TVEFSVEVEOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdGltZXNsb3Rfc3RhcnRlZF9ub3RpZnkoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRyeSB0byBleHRlbmQgcmlnaHQgYWZ0ZXIgc3RhcnQuCisgICAgICAgIG1fcmV0X3BhcmFtLmNhbGxiYWNrX2FjdGlvbiAgICAgICAgID0gTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fRVhURU5EOworICAgICAgICBtX3JldF9wYXJhbS5wYXJhbXMuZXh0ZW5kLmxlbmd0aF91cyA9IG1fdGltZXNsb3RfbGVuZ3RoOworCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1JBQUxfU0lHX0VWRU5UX1NUQVJUKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waW5fc2V0KFBJTl9EQkdfVElNRVNMT1RfRVhURU5EX1JFUSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFX1RJTUVSMDogLyoqPCBUaGlzIHNpZ25hbCBpbmRpY2F0ZXMgdGhlIE5SRl9USU1FUjAgaW50ZXJydXB0LiAqLworICAgICAgICB0aW1lcl9pcnFfaGFuZGxlKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOUkZfUkFESU9fQ0FMTEJBQ0tfU0lHTkFMX1RZUEVfUkFESU86IC8qKjwgVGhpcyBzaWduYWwgaW5kaWNhdGVzIHRoZSBOUkZfUkFESU8gaW50ZXJydXB0LiAqLworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9zZXQoUElOX0RCR19USU1FU0xPVF9SQURJT19JUlEpOworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfUkFESU8pOworCisgICAgICAgIGlmIChtX2luX3RpbWVzbG90KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXRpbWVyX2lzX21hcmdpbl9yZWFjaGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkFESU9fSVJRSGFuZGxlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vICBIYW5kbGUgbWFyZ2luIGV4Y2VlZGVkIGV2ZW50LgorICAgICAgICAgICAgICAgIHRpbWVyX2lycV9oYW5kbGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1JBQUxfU0lHX0VWRU5UX1JBRElPKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waW5fY2xyKFBJTl9EQkdfVElNRVNMT1RfUkFESU9fSVJRKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRV9FWFRFTkRfRkFJTEVEOiAvKio8IFRoaXMgc2lnbmFsIGluZGljYXRlcyBleHRlbmQgYWN0aW9uIGZhaWxlZC4gKi8KKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waW5fY2xyKFBJTl9EQkdfVElNRVNMT1RfRVhURU5EX1JFUSk7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX3RnbChQSU5fREJHX1RJTUVTTE9UX0ZBSUxFRCk7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9FWENFRURfRkFJTCk7CisKKyAgICAgICAgdGltZXNsb3RfZXh0ZW5kKCk7CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfRVhDRUVEX0ZBSUwpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFX0VYVEVORF9TVUNDRUVERUQ6IC8qKjwgVGhpcyBzaWduYWwgaW5kaWNhdGVzIGV4dGVuZCBhY3Rpb24gc3VjY2VlZGVkLiAqLworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9jbHIoUElOX0RCR19USU1FU0xPVF9FWFRFTkRfUkVRKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX1JBQUxfU0lHX0VWRU5UX0VYQ0VFRF9TVUNDRVNTKTsKKworICAgICAgICB0aW1lcl9leHRlbmQoKTsKKworICAgICAgICBpZiAobV9hbGxvY19pdGVycyAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICB0aW1lc2xvdF9leHRlbmQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1JBQUxfU0lHX0VWRU5UX0VYQ0VFRF9TVUNDRVNTKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9SQUFMX1NJR19IQU5ETEVSKTsKKworICAgIHJldHVybiAmbV9yZXRfcGFyYW07Cit9CisKK3ZvaWQgbnJmX3JhYWxfc29mdGRldmljZV9zb2NfZXZ0X2hhbmRsZXIodWludDMyX3QgZXZ0X2lkKQoreworICAgIHN3aXRjaCAoZXZ0X2lkKQorICAgIHsKKyAgICBjYXNlIE5SRl9FVlRfSEZDTEtTVEFSVEVEOgorICAgICAgICBpZiAobV9jb250aW51b3VzKQorICAgICAgICB7CisgICAgICAgICAgICB0aW1lc2xvdF9yZXF1ZXN0KCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTlJGX0VWVF9SQURJT19CTE9DS0VEOgorICAgIGNhc2UgTlJGX0VWVF9SQURJT19DQU5DRUxFRDoKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX3RnbChQSU5fREJHX1RJTUVTTE9UX0JMT0NLRUQpOworCisgICAgICAgIGFzc2VydCghbV9pbl90aW1lc2xvdCk7CisKKyAgICAgICAgaWYgKG1fY29udGludW91cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fYWxsb2NfaXRlcnMgPCBtX2NvbmZpZy50aW1lc2xvdF9hbGxvY19pdGVycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aW1lc2xvdF9kZWNyZWFzZV9sZW5ndGgoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGltZXNsb3RfcmVxdWVzdCgpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBOUkZfRVZUX1JBRElPX1NJR05BTF9DQUxMQkFDS19JTlZBTElEX1JFVFVSTjoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5SRl9FVlRfUkFESU9fU0VTU0lPTl9JRExFOgorICAgICAgICBpZiAobV9jb250aW51b3VzKQorICAgICAgICB7CisgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl90Z2woUElOX0RCR19USU1FU0xPVF9TRVNTSU9OX0lETEUpOworCisgICAgICAgICAgICB0aW1lc2xvdF9kYXRhX2luaXQoKTsKKyAgICAgICAgICAgIHRpbWVzbG90X3JlcXVlc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOUkZfRVZUX1JBRElPX1NFU1NJT05fQ0xPU0VEOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBucmZfcmFhbF9zb2Z0ZGV2aWNlX2NvbmZpZyhjb25zdCBucmZfcmFhbF9zb2Z0ZGV2aWNlX2NmZ190ICogcF9jZmcpCit7CisgICAgYXNzZXJ0KG1faW5pdGlhbGl6ZSk7CisgICAgYXNzZXJ0KCFtX2NvbnRpbnVvdXMpOworICAgIGFzc2VydChwX2NmZyk7CisKKyAgICBtX2NvbmZpZyA9ICpwX2NmZzsKK30KKwordm9pZCBucmZfcmFhbF9pbml0KHZvaWQpCit7CisgICAgYXNzZXJ0KCFtX2luaXRpYWxpemUpOworCisgICAgbV9jb250aW51b3VzID0gZmFsc2U7CisgICAgbV9pbl90aW1lc2xvdCA9IGZhbHNlOworCisgICAgbV9jb25maWcubGZfY2xrX2FjY3VyYWN5X3BwbSAgPSBOUkZfUkFBTF9ERUZBVUxUX0xGX0NMS19BQ0NVUkFDWV9QUE07CisgICAgbV9jb25maWcudGltZXNsb3RfbGVuZ3RoICAgICAgPSBOUkZfUkFBTF9USU1FU0xPVF9ERUZBVUxUX0xFTkdUSDsKKyAgICBtX2NvbmZpZy50aW1lc2xvdF9hbGxvY19pdGVycyA9IE5SRl9SQUFMX1RJTUVTTE9UX0RFRkFVTFRfQUxMT0NfSVRFUlM7CisgICAgbV9jb25maWcudGltZXNsb3Rfc2FmZV9tYXJnaW4gPSBOUkZfUkFBTF9USU1FU0xPVF9ERUZBVUxUX1NBRkVfTUFSR0lOOworICAgIG1fY29uZmlnLnRpbWVzbG90X21heF9sZW5ndGggID0gTlJGX1JBQUxfVElNRVNMT1RfREVGQVVMVF9NQVhfTEVOR1RIOworICAgIG1fY29uZmlnLnRpbWVzbG90X3RpbWVvdXQgICAgID0gTlJGX1JBQUxfVElNRVNMT1RfREVGQVVMVF9USU1FT1VUOworCisgICAgYXNzZXJ0KHNkX3JhZGlvX3Nlc3Npb25fb3BlbihzaWduYWxfaGFuZGxlcikgPT0gTlJGX1NVQ0NFU1MpOworCisgICAgbV9pbml0aWFsaXplID0gdHJ1ZTsKK30KKwordm9pZCBucmZfcmFhbF91bmluaXQodm9pZCkKK3sKKyAgICBhc3NlcnQobV9pbml0aWFsaXplKTsKKyAgICBhc3NlcnQoc2RfcmFkaW9fc2Vzc2lvbl9jbG9zZSgpID09IE5SRl9TVUNDRVNTKTsKKworICAgIG1fY29udGludW91cyAgPSBmYWxzZTsKKyAgICBtX2luX3RpbWVzbG90ID0gZmFsc2U7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9jbHIoUElOX0RCR19USU1FU0xPVF9BQ1RJVkUpOworfQorCit2b2lkIG5yZl9yYWFsX2NvbnRpbnVvdXNfbW9kZV9lbnRlcih2b2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9SQUFMX0NPTlRJTlVPVVNfRU5URVIpOworCisgICAgYXNzZXJ0KG1faW5pdGlhbGl6ZSk7CisgICAgYXNzZXJ0KCFtX2NvbnRpbnVvdXMpOworCisgICAgbV9hbGxvY19pdGVycyAgICAgPSAwOworICAgIG1fdGltZXNsb3RfbGVuZ3RoID0gbV9jb25maWcudGltZXNsb3RfbGVuZ3RoOworICAgIG1fY29udGludW91cyAgICAgID0gdHJ1ZTsKKworICAgIG5yZl9kcnZfY2xvY2tfaGZjbGtfcmVxdWVzdChOVUxMKTsKKworICAgIGlmIChOUkZfQ0xPQ0stPkhGQ0xLU1RBVCA9PSAoQ0xPQ0tfSEZDTEtTVEFUX1NSQ19Nc2sgfCBDTE9DS19IRkNMS1NUQVRfU1RBVEVfTXNrKSkKKyAgICB7CisgICAgICAgIHRpbWVzbG90X3JlcXVlc3QoKTsKKyAgICB9CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9SQUFMX0NPTlRJTlVPVVNfRU5URVIpOworfQorCit2b2lkIG5yZl9yYWFsX2NvbnRpbnVvdXNfbW9kZV9leGl0KHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX1JBQUxfQ09OVElOVU9VU19FWElUKTsKKworICAgIGFzc2VydChtX2luaXRpYWxpemUpOworICAgIGFzc2VydChtX2NvbnRpbnVvdXMpOworCisgICAgbV9jb250aW51b3VzID0gZmFsc2U7CisKKyAgICAvLyBFbXVsYXRlIHNpZ25hbCBpbnRlcnJ1cHQgdG8gaW5mb3JtIFNEIGFib3V0IGVuZCBvZiBtX2NvbnRpbnVvdXMgbW9kZS4KKyAgICBpZiAobV9pbl90aW1lc2xvdCkKKyAgICB7CisgICAgICAgIE5WSUNfU2V0UGVuZGluZ0lSUShUSU1FUjBfSVJRbik7CisgICAgfQorCisgICAgbnJmX2Rydl9jbG9ja19oZmNsa19yZWxlYXNlKCk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9SQUFMX0NPTlRJTlVPVVNfRVhJVCk7Cit9CisKK2Jvb2wgbnJmX3JhYWxfdGltZXNsb3RfcmVxdWVzdCh1aW50MzJfdCBsZW5ndGhfdXMpCit7CisgICAgaWYgKCFtX2NvbnRpbnVvdXMgfHwgIW1faW5fdGltZXNsb3QpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRpbWVyX3RpbWVfZ2V0KCkgKyBsZW5ndGhfdXMgPCBOUkZfVElNRVIwLT5DQ1tUSU1FUl9DQ19NQVJHSU5dOworfQorCit1aW50MzJfdCBucmZfcmFhbF90aW1lc2xvdF91c19sZWZ0X2dldCh2b2lkKQoreworICAgIGlmICghbV9jb250aW51b3VzIHx8ICFtX2luX3RpbWVzbG90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIE5SRl9USU1FUjAtPkNDW1RJTUVSX0NDX01BUkdJTl0gLSB0aW1lcl90aW1lX2dldCgpOworfQorCit2b2lkIG5yZl9yYWFsX2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fUkFBTF9DUklUX1NFQ1RfRU5URVIpOworCisgICAgYXNzZXJ0KCFtX2luX2NyaXRpY2FsX3NlY3Rpb24pOworICAgIG1faW5fY3JpdGljYWxfc2VjdGlvbiA9IHRydWU7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9SQUFMX0NSSVRfU0VDVF9FTlRFUik7Cit9CisKK3ZvaWQgbnJmX3JhYWxfY3JpdGljYWxfc2VjdGlvbl9leGl0KHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX1JBQUxfQ1JJVF9TRUNUX0VYSVQpOworCisgICAgdGltZXNsb3RfY3JpdGljYWxfc2VjdGlvbl9lbnRlcigpOworCisgICAgYXNzZXJ0KG1faW5fY3JpdGljYWxfc2VjdGlvbik7CisgICAgbV9pbl9jcml0aWNhbF9zZWN0aW9uID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fcGVuZGluZ19ldmVudCkKKyAgICB7CisgICAgY2FzZSBQRU5ESU5HX0VWRU5UX1NUQVJURUQ6CisgICAgICAgIHRpbWVzbG90X3N0YXJ0ZWRfbm90aWZ5KCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBQRU5ESU5HX0VWRU5UX0VOREVEOgorICAgICAgICB0aW1lc2xvdF9lbmRlZF9ub3RpZnkoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX3BlbmRpbmdfZXZlbnQgPSBQRU5ESU5HX0VWRU5UX05PTkU7CisKKyAgICB0aW1lc2xvdF9jcml0aWNhbF9zZWN0aW9uX2V4aXQoKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1JBQUxfQ1JJVF9TRUNUX0VYSVQpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvc29mdGRldmljZS9ucmZfcmFhbF9zb2Z0ZGV2aWNlLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9zb2Z0ZGV2aWNlL25yZl9yYWFsX3NvZnRkZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTUzY2ExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvc29mdGRldmljZS9ucmZfcmFhbF9zb2Z0ZGV2aWNlLmgKQEAgLTAsMCArMSw4NSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAYnJpZWYgVGhpcyBtb2R1bGUgZGVmaW5lcyBSYWRpbyBBcmJpdGVyIEFic3RyYWN0aW9uIExheWVyIGludGVyZmFjZS4KKyAqCisgKi8KKworI2lmbmRlZiBOUkZfUkFBTF9TT0ZUREVWSUNFX0hfCisjZGVmaW5lIE5SRl9SQUFMX1NPRlRERVZJQ0VfSF8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQGJyaWVmIFJBQUwgU29mdGRldmljZSBkZWZhdWx0IHBhcmFtZXRlcnMuICovCisjZGVmaW5lIE5SRl9SQUFMX1RJTUVTTE9UX0RFRkFVTFRfTEVOR1RIICAgICAgNjQwMAorI2RlZmluZSBOUkZfUkFBTF9USU1FU0xPVF9ERUZBVUxUX0FMTE9DX0lURVJTIDUKKyNkZWZpbmUgTlJGX1JBQUxfVElNRVNMT1RfREVGQVVMVF9TQUZFX01BUkdJTiA5MQorI2RlZmluZSBOUkZfUkFBTF9USU1FU0xPVF9ERUZBVUxUX1RJTUVPVVQgICAgIDEwMDAwMAorI2RlZmluZSBOUkZfUkFBTF9USU1FU0xPVF9ERUZBVUxUX01BWF9MRU5HVEggIDEyMDAwMDAwMAorI2RlZmluZSBOUkZfUkFBTF9ERUZBVUxUX0xGX0NMS19BQ0NVUkFDWV9QUE0gIDI1CisKKy8qKiBAYnJpZWYgUkFBTCBTb2Z0ZGV2aWNlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgdGltZXNsb3RfbGVuZ3RoOyAgICAgICAgLyoqPCBUaW1lc2xvdCBsZW5ndGggcmVxdWVzdGVkIGJ5IHRoZSBtb2R1bGUgaW4gbWljcm9zZWNvbmRzLiAqLworICAgIHVpbnQzMl90IHRpbWVzbG90X3RpbWVvdXQ7ICAgICAgIC8qKjwgTG9uZ2VzdCBhY2NlcHRhYmxlIGRlbGF5IHVudGlsIHRoZSBzdGFydCBvZiB0aGUgcmVxdWVzdGVkIHRpbWVzbG90IGluIG1pY3Jvc2Vjb25kcy4gKi8KKyAgICB1aW50MzJfdCB0aW1lc2xvdF9tYXhfbGVuZ3RoOyAgICAvKio8IE1heGltdW0gc2luZ2xlIHRpbWVzbG90IGxlbmd0aCBjcmVhdGVkIGJ5IGV4dGVuc2lvbiBwcm9jZXNzaW5nIGluIG1pY3Jvc2Vjb25kcy4gKi8KKyAgICB1aW50MTZfdCB0aW1lc2xvdF9hbGxvY19pdGVyczsgICAvKio8IE1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbiBvZiBkaXZpZGluZyB0aW1lc2xvdF9sZW5ndGggYnkgZmFjdG9yIG9mIDIgcGVyZm9ybWVkIGJ5IGFyYml0ZXIuICovCisgICAgdWludDE2X3QgdGltZXNsb3Rfc2FmZV9tYXJnaW47ICAgLyoqPCBTYWZlIG1hcmdpbiBiZWZvcmUgdGltZXNsb3QgaXMgZmluaXNoZWQgYW5kIG5yZl9yYWFsX3RpbWVzbG90X2VuZGVkIHNob3VsZCBiZSBjYWxsZWQgaW4gbWljcm9zZWNvbmRzLiAqLworICAgIHVpbnQxNl90IGxmX2Nsa19hY2N1cmFjeV9wcG07ICAgIC8qKjwgQ2xvY2sgYWNjdXJhY3kgaW4gcHBtIHVuaXQuICovCit9IG5yZl9yYWFsX3NvZnRkZXZpY2VfY2ZnX3Q7CisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIHVzZWQgdG8gaW5mb3JtIFJBQUwgY2xpZW50IGFib3V0IFNvZnRkZXZpY2UncyBTb0MgZXZlbnRzLgorICoKKyAqLwordm9pZCBucmZfcmFhbF9zb2Z0ZGV2aWNlX3NvY19ldnRfaGFuZGxlcih1aW50MzJfdCBldnRfaWQpOworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiB1c2VkIHRvIHNldCBub24tZGVmYXVsdCBwYXJhbWV0ZXJzIG9mIFJBQUwuCisgKgorICovCit2b2lkIG5yZl9yYWFsX3NvZnRkZXZpY2VfY29uZmlnKGNvbnN0IG5yZl9yYWFsX3NvZnRkZXZpY2VfY2ZnX3QgKiBwX2NmZyk7CisKKy8qKgorICpAfQorICoqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTlJGX1JBQUxfU09GVERFVklDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2Fzc2VydC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2Fzc2VydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YmU0MmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfYXNzZXJ0LmgKQEAgLTAsMCArMSw1MiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorLyoqIEBmaWxlDQorICogQGJyaWVmIFV0aWxpdGllcyBmb3IgdmVyaWZ5aW5nIHByb2dyYW0gbG9naWMNCisgKi8NCisNCisjaWZuZGVmIE5SRl9BU1NFUlRfSF8NCisjZGVmaW5lIE5SRl9BU1NFUlRfSF8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjZGVmaW5lIEFTU0VSVChleHByKSAgICBcDQoraWYgKCEoZXhwcikpICAgICAgICAgICAgXA0KK3sgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgd2hpbGUoMSk7ICAgICAgICAgICBcDQorfQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogTlJGX0FTU0VSVF9IXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9jbG9jay5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1ZDY4NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9jbG9jay5oCkBAIC0wLDAgKzEsMzkyIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisjaWZuZGVmIE5SRl9DTE9DS19IX18NCisjZGVmaW5lIE5SRl9DTE9DS19IX18NCisNCisjaW5jbHVkZSA8c3RkZGVmLmg+DQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCisNCisjaW5jbHVkZSAibnJmLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqDQorICogQGRlZmdyb3VwIG5yZl9jbG9ja19oYWwgQ2xvY2sgSEFMDQorICogQHsNCisgKiBAaW5ncm91cCBucmZfY2xvY2sNCisgKiBAYnJpZWYgSGFyZHdhcmUgYWNjZXNzIGxheWVyIGZvciBtYW5hZ2luZyB0aGUgbG93LWZyZXF1ZW5jeSBjbG9jayAoTEZDTEspIGFuZCB0aGUgaGlnaC1mcmVxdWVuY3kgY2xvY2sgKEhGQ0xLKS4NCisgKi8NCisNCisjZGVmaW5lIE5SRl9DTE9DS19UQVNLX1RSSUdHRVIgKDFVTCkNCisjZGVmaW5lIE5SRl9DTE9DS19FVkVOVF9DTEVBUiAgKDBVTCkNCisNCisvKioNCisgKiBAYnJpZWYgTG93LWZyZXF1ZW5jeSBjbG9jayBzb3VyY2VzLg0KKyAqIEBkZXRhaWxzIFVzZWQgYnkgTEZDTEtTUkMsIExGQ0xLU1RBVCwgYW5kIExGQ0xLU1JDQ09QWSByZWdpc3RlcnMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfQ0xPQ0tfTEZDTEtfUkMgICAgPSBDTE9DS19MRkNMS1NSQ19TUkNfUkMsICAgLyoqPCBJbnRlcm5hbCAzMiBrSHogUkMgb3NjaWxsYXRvci4gKi8NCisgICAgTlJGX0NMT0NLX0xGQ0xLX1h0YWwgID0gQ0xPQ0tfTEZDTEtTUkNfU1JDX1h0YWwsIC8qKjwgRXh0ZXJuYWwgMzIga0h6IGNyeXN0YWwuICovDQorICAgIE5SRl9DTE9DS19MRkNMS19TeW50aCA9IENMT0NLX0xGQ0xLU1JDX1NSQ19TeW50aCAvKio8IEludGVybmFsIDMyIGtIeiBzeW50aGVzaXplciBmcm9tIEhGQ0xLIHN5c3RlbSBjbG9jay4gKi8NCit9IG5yZl9jbG9ja19sZmNsa190Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBIaWdoLWZyZXF1ZW5jeSBjbG9jayBzb3VyY2VzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX0NMT0NLX0hGQ0xLX0xPV19BQ0NVUkFDWSAgPSBDTE9DS19IRkNMS1NUQVRfU1JDX1JDLCAgLyoqPCBJbnRlcm5hbCAxNiBNSHogUkMgb3NjaWxsYXRvci4gKi8NCisgICAgTlJGX0NMT0NLX0hGQ0xLX0hJR0hfQUNDVVJBQ1kgPSBDTE9DS19IRkNMS1NUQVRfU1JDX1h0YWwgLyoqPCBFeHRlcm5hbCAxNiBNSHovMzIgTUh6IGNyeXN0YWwgb3NjaWxsYXRvci4gKi8NCit9IG5yZl9jbG9ja19oZmNsa190Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBUcmlnZ2VyIHN0YXR1cyBvZiB0YXNrIExGQ0xLU1RBUlQvSEZDTEtTVEFSVC4NCisgKiBAZGV0YWlscyBVc2VkIGJ5IExGQ0xLUlVOIGFuZCBIRkNMS1JVTiByZWdpc3RlcnMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfQ0xPQ0tfU1RBUlRfVEFTS19OT1RfVFJJR0dFUkVEID0gQ0xPQ0tfTEZDTEtSVU5fU1RBVFVTX05vdFRyaWdnZXJlZCwgLyoqPCBUYXNrIExGQ0xLU1RBUlQvSEZDTEtTVEFSVCBoYXMgbm90IGJlZW4gdHJpZ2dlcmVkLiAqLw0KKyAgICBOUkZfQ0xPQ0tfU1RBUlRfVEFTS19UUklHR0VSRUQgICAgID0gQ0xPQ0tfTEZDTEtSVU5fU1RBVFVTX1RyaWdnZXJlZCAgICAgLyoqPCBUYXNrIExGQ0xLU1RBUlQvSEZDTEtTVEFSVCBoYXMgYmVlbiB0cmlnZ2VyZWQuICovDQorfSBucmZfY2xvY2tfc3RhcnRfdGFza19zdGF0dXNfdDsNCisNCisvKioNCisgKiBAYnJpZWYgSW50ZXJydXB0cy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9DTE9DS19JTlRfSEZfU1RBUlRFRF9NQVNLID0gQ0xPQ0tfSU5URU5TRVRfSEZDTEtTVEFSVEVEX01zaywgLyoqPCBJbnRlcnJ1cHQgb24gSEZDTEtTVEFSVEVEIGV2ZW50LiAqLw0KKyAgICBOUkZfQ0xPQ0tfSU5UX0xGX1NUQVJURURfTUFTSyA9IENMT0NLX0lOVEVOU0VUX0xGQ0xLU1RBUlRFRF9Nc2ssIC8qKjwgSW50ZXJydXB0IG9uIExGQ0xLU1RBUlRFRCBldmVudC4gKi8NCisgICAgTlJGX0NMT0NLX0lOVF9ET05FX01BU0sgICAgICAgPSBDTE9DS19JTlRFTlNFVF9ET05FX01zaywgICAgICAgICAvKio8IEludGVycnVwdCBvbiBET05FIGV2ZW50LiAqLw0KKyAgICBOUkZfQ0xPQ0tfSU5UX0NUVE9fTUFTSyAgICAgICA9IENMT0NLX0lOVEVOU0VUX0NUVE9fTXNrICAgICAgICAgIC8qKjwgSW50ZXJydXB0IG9uIENUVE8gZXZlbnQuICovDQorfSBucmZfY2xvY2tfaW50X21hc2tfdDsNCisNCisvKioNCisgKiBAYnJpZWYgVGFza3MuDQorICoNCisgKiBAZGV0YWlscyBUaGUgTlJGX0NMT0NLX1RBU0tfTEZDTEtTVE9QIHRhc2sgY2Fubm90IGJlIHNldCB3aGVuIHRoZSBsb3ctZnJlcXVlbmN5IGNsb2NrIGlzIG5vdCBydW5uaW5nLg0KKyAqIFRoZSBOUkZfQ0xPQ0tfVEFTS19IRkNMS1NUT1AgdGFzayBjYW5ub3QgYmUgc2V0IHdoZW4gdGhlIGhpZ2gtZnJlcXVlbmN5IGNsb2NrIGlzIG5vdCBydW5uaW5nLg0KKyAqLw0KK3R5cGVkZWYgZW51bSAvKmxpbnQgLXNhdmUgLWUzMCAtZXN5bSg2MjgsX19JTlRBRERSX18pICovDQorew0KKyAgICBOUkZfQ0xPQ0tfVEFTS19IRkNMS1NUQVJUID0gb2Zmc2V0b2YoTlJGX0NMT0NLX1R5cGUsIFRBU0tTX0hGQ0xLU1RBUlQpLCAvKio8IFN0YXJ0IEhGQ0xLIGNsb2NrIHNvdXJjZS4qLw0KKyAgICBOUkZfQ0xPQ0tfVEFTS19IRkNMS1NUT1AgID0gb2Zmc2V0b2YoTlJGX0NMT0NLX1R5cGUsIFRBU0tTX0hGQ0xLU1RPUCksICAvKio8IFN0b3AgSEZDTEsgY2xvY2sgc291cmNlLiovDQorICAgIE5SRl9DTE9DS19UQVNLX0xGQ0xLU1RBUlQgPSBvZmZzZXRvZihOUkZfQ0xPQ0tfVHlwZSwgVEFTS1NfTEZDTEtTVEFSVCksIC8qKjwgU3RhcnQgTEZDTEsgY2xvY2sgc291cmNlLiovDQorICAgIE5SRl9DTE9DS19UQVNLX0xGQ0xLU1RPUCAgPSBvZmZzZXRvZihOUkZfQ0xPQ0tfVHlwZSwgVEFTS1NfTEZDTEtTVE9QKSwgIC8qKjwgU3RvcCBMRkNMSyBjbG9jayBzb3VyY2UuKi8NCisgICAgTlJGX0NMT0NLX1RBU0tfQ0FMICAgICAgICA9IG9mZnNldG9mKE5SRl9DTE9DS19UeXBlLCBUQVNLU19DQUwpLCAgICAgICAgLyoqPCBTdGFydCBjYWxpYnJhdGlvbiBvZiBMRkNMSyBSQyBvc2NpbGxhdG9yLiovDQorICAgIE5SRl9DTE9DS19UQVNLX0NUU1RBUlQgICAgPSBvZmZzZXRvZihOUkZfQ0xPQ0tfVHlwZSwgVEFTS1NfQ1RTVEFSVCksICAgIC8qKjwgU3RhcnQgY2FsaWJyYXRpb24gdGltZXIuKi8NCisgICAgTlJGX0NMT0NLX1RBU0tfQ1RTVE9QICAgICA9IG9mZnNldG9mKE5SRl9DTE9DS19UeXBlLCBUQVNLU19DVFNUT1ApICAgICAgLyoqPCBTdG9wIGNhbGlicmF0aW9uIHRpbWVyLiovDQorfSBucmZfY2xvY2tfdGFza190OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbGludCAtcmVzdG9yZSAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiBFdmVudHMuDQorICovDQordHlwZWRlZiBlbnVtIC8qbGludCAtc2F2ZSAtZTMwIC1lc3ltKDYyOCxfX0lOVEFERFJfXykgKi8NCit7DQorICAgIE5SRl9DTE9DS19FVkVOVF9IRkNMS1NUQVJURUQgPSBvZmZzZXRvZihOUkZfQ0xPQ0tfVHlwZSwgRVZFTlRTX0hGQ0xLU1RBUlRFRCksIC8qKjwgSEZDTEsgb3NjaWxsYXRvciBzdGFydGVkLiovDQorICAgIE5SRl9DTE9DS19FVkVOVF9MRkNMS1NUQVJURUQgPSBvZmZzZXRvZihOUkZfQ0xPQ0tfVHlwZSwgRVZFTlRTX0xGQ0xLU1RBUlRFRCksIC8qKjwgTEZDTEsgb3NjaWxsYXRvciBzdGFydGVkLiovDQorICAgIE5SRl9DTE9DS19FVkVOVF9ET05FICAgICAgICAgPSBvZmZzZXRvZihOUkZfQ0xPQ0tfVHlwZSwgRVZFTlRTX0RPTkUpLCAgICAgICAgIC8qKjwgQ2FsaWJyYXRpb24gb2YgTEZDTEsgUkMgb3NjaWxsYXRvciBjb21wbGV0ZWQuKi8NCisgICAgTlJGX0NMT0NLX0VWRU5UX0NUVE8gICAgICAgICA9IG9mZnNldG9mKE5SRl9DTE9DS19UeXBlLCBFVkVOVFNfQ1RUTykgICAgICAgICAgLyoqPCBDYWxpYnJhdGlvbiB0aW1lciB0aW1lLW91dC4qLw0KK30gbnJmX2Nsb2NrX2V2ZW50X3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypsaW50IC1yZXN0b3JlICovDQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBlbmFibGluZyBhIHNwZWNpZmljIGludGVycnVwdC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGludF9tYXNrICAgICAgICAgSW50ZXJydXB0Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9jbG9ja19pbnRfZW5hYmxlKHVpbnQzMl90IGludF9tYXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBhIHNwZWNpZmljIGludGVycnVwdC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGludF9tYXNrICAgICAgICAgSW50ZXJydXB0Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9jbG9ja19pbnRfZGlzYWJsZSh1aW50MzJfdCBpbnRfbWFzayk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIGludGVycnVwdC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGludF9tYXNrICAgICAgICAgSW50ZXJydXB0Lg0KKyAqDQorICogQHJldHZhbCAgICAgdHJ1ZSAgICAgICAgICAgICAgICAgICBJZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZWQuDQorICogQHJldHZhbCAgICAgZmFsc2UgICAgICAgICAgICAgICAgICBJZiB0aGUgaW50ZXJydXB0IGlzIG5vdCBlbmFibGVkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl9jbG9ja19pbnRfZW5hYmxlX2NoZWNrKG5yZl9jbG9ja19pbnRfbWFza190IGludF9tYXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyB0YXNrLg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgdGhlIFBQSSBtb2R1bGUuDQorICoNCisgKiBAcGFyYW1baW5dICB0YXNrICAgICAgICAgICAgIFRhc2suDQorICoNCisgKiBAcmV0dXJuICAgICBBZGRyZXNzIG9mIHRoZSByZXF1ZXN0ZWQgdGFzayByZWdpc3Rlci4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2Nsb2NrX3Rhc2tfYWRkcmVzc19nZXQobnJmX2Nsb2NrX3Rhc2tfdCB0YXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgYSBzcGVjaWZpYyB0YXNrLg0KKyAqDQorICogQHBhcmFtW2luXSAgdGFzayAgICAgICAgICAgICBUYXNrLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9jbG9ja190YXNrX3RyaWdnZXIobnJmX2Nsb2NrX3Rhc2tfdCB0YXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBldmVudC4NCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IHRoZSBQUEkgbW9kdWxlLg0KKyAqDQorICogQHBhcmFtW2luXSAgZXZlbnQgICAgICAgRXZlbnQuDQorICoNCisgKiBAcmV0dXJuICAgICBBZGRyZXNzIG9mIHRoZSByZXF1ZXN0ZWQgZXZlbnQgcmVnaXN0ZXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9jbG9ja19ldmVudF9hZGRyZXNzX2dldChucmZfY2xvY2tfZXZlbnRfdCBldmVudCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjbGVhcmluZyBhIHNwZWNpZmljIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSAgZXZlbnQgICAgICAgRXZlbnQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2Nsb2NrX2V2ZW50X2NsZWFyKG5yZl9jbG9ja19ldmVudF90IGV2ZW50KTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHN0YXRlIG9mIGEgc3BlY2lmaWMgZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dICBldmVudCAgICAgICBFdmVudC4NCisgKg0KKyAqIEByZXR2YWwgICAgIHRydWUgICAgICAgICAgICAgIElmIHRoZSBldmVudCBpcyBzZXQuDQorICogQHJldHZhbCAgICAgZmFsc2UgICAgICAgICAgICAgSWYgdGhlIGV2ZW50IGlzIG5vdCBzZXQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX2Nsb2NrX2V2ZW50X2NoZWNrKG5yZl9jbG9ja19ldmVudF90IGV2ZW50KTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNoYW5naW5nIHRoZSBsb3ctZnJlcXVlbmN5IGNsb2NrIHNvdXJjZS4NCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSBjYWxsZWQgd2hlbiB0aGUgbG93LWZyZXF1ZW5jeSBjbG9jayBpcyBydW5uaW5nLg0KKyAqDQorICogQHBhcmFtW2luXSAgc291cmNlICAgICAgICAgICAgTmV3IGxvdy1mcmVxdWVuY3kgY2xvY2sgc291cmNlLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2Nsb2NrX2xmX3NyY19zZXQobnJmX2Nsb2NrX2xmY2xrX3Qgc291cmNlKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHNlbGVjdGVkIHNvdXJjZSBmb3IgdGhlIGxvdy1mcmVxdWVuY3kgY2xvY2suDQorICoNCisgKiBAcmV0dmFsICAgICBOUkZfQ0xPQ0tfTEZDTEtfUkMgICAgIElmIHRoZSBpbnRlcm5hbCAzMiBrSHogUkMgb3NjaWxsYXRvciBpcyB0aGUgc2VsZWN0ZWQgc291cmNlIGZvciB0aGUgbG93LWZyZXF1ZW5jeSBjbG9jay4NCisgKiBAcmV0dmFsICAgICBOUkZfQ0xPQ0tfTEZDTEtfWHRhbCAgIElmIGFuIGV4dGVybmFsIDMyIGtIeiBjcnlzdGFsIG9zY2lsbGF0b3IgaXMgdGhlIHNlbGVjdGVkIHNvdXJjZSBmb3IgdGhlIGxvdy1mcmVxdWVuY3kgY2xvY2suDQorICogQHJldHZhbCAgICAgTlJGX0NMT0NLX0xGQ0xLX1N5bnRoICBJZiB0aGUgaW50ZXJuYWwgMzIga0h6IHN5bnRoZXNpemVyIGZyb20gdGhlIEhGQ0xLIGlzIHRoZSBzZWxlY3RlZCBzb3VyY2UgZm9yIHRoZSBsb3ctZnJlcXVlbmN5IGNsb2NrLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBucmZfY2xvY2tfbGZjbGtfdCBucmZfY2xvY2tfbGZfc3JjX2dldCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIGFjdGl2ZSBzb3VyY2Ugb2YgdGhlIGxvdy1mcmVxdWVuY3kgY2xvY2suDQorICoNCisgKiBAcmV0dmFsICAgICBOUkZfQ0xPQ0tfTEZDTEtfUkMgICAgIElmIHRoZSBpbnRlcm5hbCAzMiBrSHogUkMgb3NjaWxsYXRvciBpcyB0aGUgYWN0aXZlIHNvdXJjZSBvZiB0aGUgbG93LWZyZXF1ZW5jeSBjbG9jay4NCisgKiBAcmV0dmFsICAgICBOUkZfQ0xPQ0tfTEZDTEtfWHRhbCAgIElmIGFuIGV4dGVybmFsIDMyIGtIeiBjcnlzdGFsIG9zY2lsbGF0b3IgaXMgdGhlIGFjdGl2ZSBzb3VyY2Ugb2YgdGhlIGxvdy1mcmVxdWVuY3kgY2xvY2suDQorICogQHJldHZhbCAgICAgTlJGX0NMT0NLX0xGQ0xLX1N5bnRoICBJZiB0aGUgaW50ZXJuYWwgMzIga0h6IHN5bnRoZXNpemVyIGZyb20gdGhlIEhGQ0xLIGlzIHRoZSBhY3RpdmUgc291cmNlIG9mIHRoZSBsb3ctZnJlcXVlbmN5IGNsb2NrLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBucmZfY2xvY2tfbGZjbGtfdCBucmZfY2xvY2tfbGZfYWN0dl9zcmNfZ2V0KHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgY2xvY2sgc291cmNlIGZvciB0aGUgTEZDTEsgY2xvY2sgd2hlbiB0aGUgdGFzayBMS0NMS1NUQVJUIGlzIHRyaWdnZXJlZC4NCisgKg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19MRkNMS19SQyAgICAgSWYgdGhlIGludGVybmFsIDMyIGtIeiBSQyBvc2NpbGxhdG9yIGlzIHJ1bm5pbmcgYW5kIGdlbmVyYXRpbmcgdGhlIExGQ0xLIGNsb2NrLg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19MRkNMS19YdGFsICAgSWYgYW4gZXh0ZXJuYWwgMzIga0h6IGNyeXN0YWwgb3NjaWxsYXRvciBpcyBydW5uaW5nIGFuZCBnZW5lcmF0aW5nIHRoZSBMRkNMSyBjbG9jay4NCisgKiBAcmV0dmFsICAgICBOUkZfQ0xPQ0tfTEZDTEtfU3ludGggIElmIHRoZSBpbnRlcm5hbCAzMiBrSHogc3ludGhlc2l6ZXIgZnJvbSB0aGUgSEZDTEsgaXMgcnVubmluZyBhbmQgZ2VuZXJhdGluZyB0aGUgTEZDTEsgY2xvY2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIG5yZl9jbG9ja19sZmNsa190IG5yZl9jbG9ja19sZl9zcmNjb3B5X2dldCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHN0YXRlIG9mIHRoZSBMRkNMSyBjbG9jay4NCisgKg0KKyAqIEByZXR2YWwgICAgIGZhbHNlICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIExGQ0xLIGNsb2NrIGlzIG5vdCBydW5uaW5nLg0KKyAqIEByZXR2YWwgICAgIHRydWUgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIExGQ0xLIGNsb2NrIGlzIHJ1bm5pbmcuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX2Nsb2NrX2xmX2lzX3J1bm5pbmcodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0cmlnZ2VyIHN0YXR1cyBvZiB0aGUgdGFzayBMRkNMS1NUQVJULg0KKyAqDQorICogQHJldHZhbCAgICAgTlJGX0NMT0NLX1NUQVJUX1RBU0tfTk9UX1RSSUdHRVJFRCAgICAgSWYgdGhlIHRhc2sgTEZDTEtTVEFSVCBoYXMgbm90IGJlZW4gdHJpZ2dlcmVkLg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19TVEFSVF9UQVNLX1RSSUdHRVJFRCAgICAgICAgIElmIHRoZSB0YXNrIExGQ0xLU1RBUlQgaGFzIGJlZW4gdHJpZ2dlcmVkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBucmZfY2xvY2tfc3RhcnRfdGFza19zdGF0dXNfdCBucmZfY2xvY2tfbGZfc3RhcnRfdGFza19zdGF0dXNfZ2V0KHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgYWN0aXZlIHNvdXJjZSBvZiB0aGUgaGlnaC1mcmVxdWVuY3kgY2xvY2suDQorICoNCisgKiBAcmV0dmFsICAgICBOUkZfQ0xPQ0tfSEZDTEtfTE9XX0FDQ1VSQUNZICAgSWYgdGhlIGludGVybmFsIDE2IE1IeiBSQyBvc2NpbGxhdG9yIGlzIHRoZSBhY3RpdmUgc291cmNlIG9mIHRoZSBoaWdoLWZyZXF1ZW5jeSBjbG9jay4NCisgKiBAcmV0dmFsICAgICBOUkZfQ0xPQ0tfSEZDTEtfSElHSF9BQ0NVUkFDWSAgSWYgYW4gZXh0ZXJuYWwgMTYgTUh6LzMyIE1IeiBjcnlzdGFsIG9zY2lsbGF0b3IgaXMgdGhlIGFjdGl2ZSBzb3VyY2Ugb2YgdGhlIGhpZ2gtZnJlcXVlbmN5IGNsb2NrLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBucmZfY2xvY2tfaGZjbGtfdCBucmZfY2xvY2tfaGZfc3JjX2dldCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHN0YXRlIG9mIHRoZSBIRkNMSyBjbG9jay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGNsa19zcmMgICAgICAgICAgICAgICAgICAgQ2xvY2sgc291cmNlIHRvIGJlIGNoZWNrZWQuDQorICoNCisgKiBAcmV0dmFsICAgICBmYWxzZSAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBIRkNMSyBjbG9jayBpcyBub3QgcnVubmluZy4NCisgKiBAcmV0dmFsICAgICB0cnVlICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBIRkNMSyBjbG9jayBpcyBydW5uaW5nLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl9jbG9ja19oZl9pc19ydW5uaW5nKG5yZl9jbG9ja19oZmNsa190IGNsa19zcmMpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdHJpZ2dlciBzdGF0dXMgb2YgdGhlIHRhc2sgSEZDTEtTVEFSVC4NCisgKg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19TVEFSVF9UQVNLX05PVF9UUklHR0VSRUQgICAgIElmIHRoZSB0YXNrIEhGQ0xLU1RBUlQgaGFzIG5vdCBiZWVuIHRyaWdnZXJlZC4NCisgKiBAcmV0dmFsICAgICBOUkZfQ0xPQ0tfU1RBUlRfVEFTS19UUklHR0VSRUQgICAgICAgICBJZiB0aGUgdGFzayBIRkNMS1NUQVJUIGhhcyBiZWVuIHRyaWdnZXJlZC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgbnJmX2Nsb2NrX3N0YXJ0X3Rhc2tfc3RhdHVzX3QgbnJmX2Nsb2NrX2hmX3N0YXJ0X3Rhc2tfc3RhdHVzX2dldCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNoYW5naW5nIHRoZSBjYWxpYnJhdGlvbiB0aW1lciBpbnRlcnZhbC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGludGVydmFsICAgICAgICAgICAgIE5ldyBjYWxpYnJhdGlvbiB0aW1lciBpbnRlcnZhbCBpbiAwLjI1IHMgcmVzb2x1dGlvbiAocmFuZ2U6IDAuMjUgc2Vjb25kcyB0byAzMS43NSBzZWNvbmRzKS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfY2xvY2tfY2FsX3RpbWVyX3RpbWVvdXRfc2V0KHVpbnQzMl90IGludGVydmFsKTsNCisNCisjaWZuZGVmIFNVUFBSRVNTX0lOTElORV9JTVBMRU1FTlRBVElPTg0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9jbG9ja19pbnRfZW5hYmxlKHVpbnQzMl90IGludF9tYXNrKQ0KK3sNCisgICAgTlJGX0NMT0NLLT5JTlRFTlNFVCA9IGludF9tYXNrOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfY2xvY2tfaW50X2Rpc2FibGUodWludDMyX3QgaW50X21hc2spDQorew0KKyAgICBOUkZfQ0xPQ0stPklOVEVOQ0xSID0gaW50X21hc2s7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl9jbG9ja19pbnRfZW5hYmxlX2NoZWNrKG5yZl9jbG9ja19pbnRfbWFza190IGludF9tYXNrKQ0KK3sNCisgICAgcmV0dXJuIChib29sKShOUkZfQ0xPQ0stPklOVEVOQ0xSICYgaW50X21hc2spOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2Nsb2NrX3Rhc2tfYWRkcmVzc19nZXQobnJmX2Nsb2NrX3Rhc2tfdCB0YXNrKQ0KK3sNCisgICAgcmV0dXJuICgodWludDMyX3QpTlJGX0NMT0NLICsgdGFzayk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9jbG9ja190YXNrX3RyaWdnZXIobnJmX2Nsb2NrX3Rhc2tfdCB0YXNrKQ0KK3sNCisgICAgKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfQ0xPQ0sgKyB0YXNrKSkgPSBOUkZfQ0xPQ0tfVEFTS19UUklHR0VSOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2Nsb2NrX2V2ZW50X2FkZHJlc3NfZ2V0KG5yZl9jbG9ja19ldmVudF90IGV2ZW50KQ0KK3sNCisgICAgcmV0dXJuICgodWludDMyX3QpTlJGX0NMT0NLICsgZXZlbnQpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfY2xvY2tfZXZlbnRfY2xlYXIobnJmX2Nsb2NrX2V2ZW50X3QgZXZlbnQpDQorew0KKyAgICAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9DTE9DSyArIGV2ZW50KSkgPSBOUkZfQ0xPQ0tfRVZFTlRfQ0xFQVI7DQorI2lmIF9fQ09SVEVYX00gPT0gMHgwNA0KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBkdW1teSA9ICooKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX0NMT0NLICsgZXZlbnQpKTsNCisgICAgKHZvaWQpZHVtbXk7DQorI2VuZGlmDQorfQ0KKw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl9jbG9ja19ldmVudF9jaGVjayhucmZfY2xvY2tfZXZlbnRfdCBldmVudCkNCit7DQorICAgIHJldHVybiAoYm9vbCkgKiAoKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX0NMT0NLICsgZXZlbnQpKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2Nsb2NrX2xmX3NyY19zZXQobnJmX2Nsb2NrX2xmY2xrX3Qgc291cmNlKQ0KK3sNCisgICAgTlJGX0NMT0NLLT5MRkNMS1NSQyA9DQorICAgICAgICAodWludDMyX3QpKChzb3VyY2UgPDwgQ0xPQ0tfTEZDTEtTUkNfU1JDX1BvcykgJiBDTE9DS19MRkNMS1NSQ19TUkNfTXNrKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIG5yZl9jbG9ja19sZmNsa190IG5yZl9jbG9ja19sZl9zcmNfZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gKG5yZl9jbG9ja19sZmNsa190KSgoTlJGX0NMT0NLLT5MRkNMS1NSQyAmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTE9DS19MRkNMS1NSQ19TUkNfTXNrKSA+PiBDTE9DS19MRkNMS1NSQ19TUkNfUG9zKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIG5yZl9jbG9ja19sZmNsa190IG5yZl9jbG9ja19sZl9hY3R2X3NyY19nZXQodm9pZCkNCit7DQorICAgIHJldHVybiAobnJmX2Nsb2NrX2xmY2xrX3QpKChOUkZfQ0xPQ0stPkxGQ0xLU1RBVCAmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTE9DS19MRkNMS1NUQVRfU1JDX01zaykgPj4gQ0xPQ0tfTEZDTEtTVEFUX1NSQ19Qb3MpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgbnJmX2Nsb2NrX2xmY2xrX3QgbnJmX2Nsb2NrX2xmX3NyY2NvcHlfZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gKG5yZl9jbG9ja19sZmNsa190KSgoTlJGX0NMT0NLLT5MRkNMS1NSQ0NPUFkgJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xPQ0tfTEZDTEtTUkNDT1BZX1NSQ19Nc2spID4+IENMT0NLX0xGQ0xLU1JDQ09QWV9TUkNfUG9zKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX2Nsb2NrX2xmX2lzX3J1bm5pbmcodm9pZCkNCit7DQorICAgIHJldHVybiAoKE5SRl9DTE9DSy0+TEZDTEtTVEFUICYNCisgICAgICAgICAgICAgQ0xPQ0tfTEZDTEtTVEFUX1NUQVRFX01zaykgPj4gQ0xPQ0tfTEZDTEtTVEFUX1NUQVRFX1Bvcyk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSBucmZfY2xvY2tfc3RhcnRfdGFza19zdGF0dXNfdCBucmZfY2xvY2tfbGZfc3RhcnRfdGFza19zdGF0dXNfZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gKG5yZl9jbG9ja19zdGFydF90YXNrX3N0YXR1c190KSgoTlJGX0NMT0NLLT5MRkNMS1JVTiAmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTE9DS19MRkNMS1JVTl9TVEFUVVNfTXNrKSA+Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTE9DS19MRkNMS1JVTl9TVEFUVVNfUG9zKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIG5yZl9jbG9ja19oZmNsa190IG5yZl9jbG9ja19oZl9zcmNfZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gKG5yZl9jbG9ja19oZmNsa190KSgoTlJGX0NMT0NLLT5IRkNMS1NUQVQgJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xPQ0tfSEZDTEtTVEFUX1NSQ19Nc2spID4+IENMT0NLX0hGQ0xLU1RBVF9TUkNfUG9zKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX2Nsb2NrX2hmX2lzX3J1bm5pbmcobnJmX2Nsb2NrX2hmY2xrX3QgY2xrX3NyYykNCit7DQorICAgIHJldHVybiAoTlJGX0NMT0NLLT5IRkNMS1NUQVQgJiAoQ0xPQ0tfSEZDTEtTVEFUX1NUQVRFX01zayB8IENMT0NLX0hGQ0xLU1RBVF9TUkNfTXNrKSkgPT0NCisgICAgICAgICAgIChDTE9DS19IRkNMS1NUQVRfU1RBVEVfTXNrIHwgKGNsa19zcmMgPDwgQ0xPQ0tfSEZDTEtTVEFUX1NSQ19Qb3MpKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIG5yZl9jbG9ja19zdGFydF90YXNrX3N0YXR1c190IG5yZl9jbG9ja19oZl9zdGFydF90YXNrX3N0YXR1c19nZXQodm9pZCkNCit7DQorICAgIHJldHVybiAobnJmX2Nsb2NrX3N0YXJ0X3Rhc2tfc3RhdHVzX3QpKChOUkZfQ0xPQ0stPkhGQ0xLUlVOICYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMT0NLX0hGQ0xLUlVOX1NUQVRVU19Nc2spID4+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMT0NLX0hGQ0xLUlVOX1NUQVRVU19Qb3MpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfY2xvY2tfY2FsX3RpbWVyX3RpbWVvdXRfc2V0KHVpbnQzMl90IGludGVydmFsKQ0KK3sNCisgICAgTlJGX0NMT0NLLT5DVElWID0gKChpbnRlcnZhbCA8PCBDTE9DS19DVElWX0NUSVZfUG9zKSAmIENMT0NLX0NUSVZfQ1RJVl9Nc2spOw0KK30NCisNCisjZW5kaWYgLy8gU1VQUFJFU1NfSU5MSU5FX0lNUExFTUVOVEFUSU9ODQorDQorLyoqDQorICpAfQ0KKyAqKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8vIE5SRl9DTE9DS19IX18NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfZWd1LmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfZWd1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxZjdhNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9lZ3UuaApAQCAtMCwwICsxLDM0NCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworI2lmbmRlZiBOUkZfRUdVX0hfXworI2RlZmluZSBOUkZfRUdVX0hfXworCisvKioKKyogQGRlZmdyb3VwIG5yZl9lZ3UgRUdVIChFdmVudCBHZW5lcmF0b3IgVW5pdCkgYWJzdHJhY3Rpb24KKyogQHsKKyogQGluZ3JvdXAgbnJmX2RyaXZlcnMKKyogQGJyaWVmIEB0YWdBUEk1MiBFR1UgKEV2ZW50IEdlbmVyYXRvciBVbml0KSBtb2R1bGUgZnVuY3Rpb25zLgorKgorKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJucmYuaCIKKyNpbmNsdWRlICJucmZfcGVyaXBoZXJhbHMuaCIKKworI2RlZmluZSBBU1NFUlQgYXNzZXJ0CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAZW51bSAgbnJmX2VndV90YXNrX3QKKyAqIEBicmllZiBFR1UgdGFza3MuCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIC8qbGludCAtc2F2ZSAtZTMwIC1lc3ltKDYyOCxfX0lOVEFERFJfXykqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSMCAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbMF0pLCAgLyoqPCBUcmlnZ2VyIDAgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzBdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSMSAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbMV0pLCAgLyoqPCBUcmlnZ2VyIDEgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzFdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSMiAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbMl0pLCAgLyoqPCBUcmlnZ2VyIDIgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzJdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSMyAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbM10pLCAgLyoqPCBUcmlnZ2VyIDMgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzNdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSNCAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbNF0pLCAgLyoqPCBUcmlnZ2VyIDQgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzRdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSNSAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbNV0pLCAgLyoqPCBUcmlnZ2VyIDUgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzVdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSNiAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbNl0pLCAgLyoqPCBUcmlnZ2VyIDYgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzZdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSNyAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbN10pLCAgLyoqPCBUcmlnZ2VyIDcgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzddIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSOCAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbOF0pLCAgLyoqPCBUcmlnZ2VyIDggZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzhdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSOSAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbOV0pLCAgLyoqPCBUcmlnZ2VyIDkgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzldIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSMTAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbMTBdKSwgLyoqPCBUcmlnZ2VyIDEwIGZvciB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJFRFsxMF0gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVIxMSA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUlsxMV0pLCAvKio8IFRyaWdnZXIgMTEgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzExXSBldmVudC4gKi8KKyAgICBOUkZfRUdVX1RBU0tfVFJJR0dFUjEyID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBUQVNLU19UUklHR0VSWzEyXSksIC8qKjwgVHJpZ2dlciAxMiBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbMTJdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSMTMgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbMTNdKSwgLyoqPCBUcmlnZ2VyIDEzIGZvciB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJFRFsxM10gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVIxNCA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUlsxNF0pLCAvKio8IFRyaWdnZXIgMTQgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzE0XSBldmVudC4gKi8KKyAgICBOUkZfRUdVX1RBU0tfVFJJR0dFUjE1ID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBUQVNLU19UUklHR0VSWzE1XSkgIC8qKjwgVHJpZ2dlciAxNSBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbMTVdIGV2ZW50LiAqLworICAgIC8qbGludCAtcmVzdG9yZSovCit9IG5yZl9lZ3VfdGFza190OworCisKKy8qKgorICogQGVudW0gIG5yZl9lZ3VfZXZlbnRfdAorICogQGJyaWVmIEVHVSBldmVudHMuCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIC8qbGludCAtc2F2ZSAtZTMwIC1lc3ltKDYyOCxfX0lOVEFERFJfXykqLworICAgIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVEMCAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIEVWRU5UU19UUklHR0VSRURbMF0pLCAgLyoqPCBFdmVudCBudW1iZXIgMCBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSWzBdIHRhc2suICovCisgICAgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQxICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgRVZFTlRTX1RSSUdHRVJFRFsxXSksICAvKio8IEV2ZW50IG51bWJlciAxIGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbMV0gdGFzay4gKi8KKyAgICBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDIgID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBFVkVOVFNfVFJJR0dFUkVEWzJdKSwgIC8qKjwgRXZlbnQgbnVtYmVyIDIgZ2VuZXJhdGVkIGJ5IHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUlsyXSB0YXNrLiAqLworICAgIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVEMyAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIEVWRU5UU19UUklHR0VSRURbM10pLCAgLyoqPCBFdmVudCBudW1iZXIgMyBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSWzNdIHRhc2suICovCisgICAgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQ0ICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgRVZFTlRTX1RSSUdHRVJFRFs0XSksICAvKio8IEV2ZW50IG51bWJlciA0IGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbNF0gdGFzay4gKi8KKyAgICBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDUgID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBFVkVOVFNfVFJJR0dFUkVEWzVdKSwgIC8qKjwgRXZlbnQgbnVtYmVyIDUgZ2VuZXJhdGVkIGJ5IHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUls1XSB0YXNrLiAqLworICAgIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVENiAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIEVWRU5UU19UUklHR0VSRURbNl0pLCAgLyoqPCBFdmVudCBudW1iZXIgNiBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSWzZdIHRhc2suICovCisgICAgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQ3ICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgRVZFTlRTX1RSSUdHRVJFRFs3XSksICAvKio8IEV2ZW50IG51bWJlciA3IGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbN10gdGFzay4gKi8KKyAgICBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDggID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBFVkVOVFNfVFJJR0dFUkVEWzhdKSwgIC8qKjwgRXZlbnQgbnVtYmVyIDggZ2VuZXJhdGVkIGJ5IHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUls4XSB0YXNrLiAqLworICAgIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVEOSAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIEVWRU5UU19UUklHR0VSRURbOV0pLCAgLyoqPCBFdmVudCBudW1iZXIgOSBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSWzldIHRhc2suICovCisgICAgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQxMCA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgRVZFTlRTX1RSSUdHRVJFRFsxMF0pLCAvKio8IEV2ZW50IG51bWJlciAxMCBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSWzEwXSB0YXNrLiAqLworICAgIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVEMTEgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIEVWRU5UU19UUklHR0VSRURbMTFdKSwgLyoqPCBFdmVudCBudW1iZXIgMTEgZ2VuZXJhdGVkIGJ5IHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUlsxMV0gdGFzay4gKi8KKyAgICBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDEyID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBFVkVOVFNfVFJJR0dFUkVEWzEyXSksIC8qKjwgRXZlbnQgbnVtYmVyIDEyIGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbMTJdIHRhc2suICovCisgICAgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQxMyA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgRVZFTlRTX1RSSUdHRVJFRFsxM10pLCAvKio8IEV2ZW50IG51bWJlciAxMyBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSWzEzXSB0YXNrLiAqLworICAgIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVEMTQgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIEVWRU5UU19UUklHR0VSRURbMTRdKSwgLyoqPCBFdmVudCBudW1iZXIgMTQgZ2VuZXJhdGVkIGJ5IHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUlsxNF0gdGFzay4gKi8KKyAgICBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDE1ID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBFVkVOVFNfVFJJR0dFUkVEWzE1XSkgIC8qKjwgRXZlbnQgbnVtYmVyIDE1IGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbMTVdIHRhc2suICovCisgICAgLypsaW50IC1yZXN0b3JlKi8KK30gbnJmX2VndV9ldmVudF90OworCisKKy8qKgorICogQGVudW0gIG5yZl9lZ3VfaW50X21hc2tfdAorICogQGJyaWVmIEVHVSBpbnRlcnJ1cHRzLgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQwICA9IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQwX01zaywgIC8qKjwgSW50ZXJydXB0IG9uIEVWRU5UU19UUklHR0VSRURbMF0gZXZlbnQuICovCisgICAgTlJGX0VHVV9JTlRfVFJJR0dFUkVEMSAgPSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMV9Nc2ssICAvKio8IEludGVycnVwdCBvbiBFVkVOVFNfVFJJR0dFUkVEWzFdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDIgID0gRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDJfTXNrLCAgLyoqPCBJbnRlcnJ1cHQgb24gRVZFTlRTX1RSSUdHRVJFRFsyXSBldmVudC4gKi8KKyAgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQzICA9IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQzX01zaywgIC8qKjwgSW50ZXJydXB0IG9uIEVWRU5UU19UUklHR0VSRURbM10gZXZlbnQuICovCisgICAgTlJGX0VHVV9JTlRfVFJJR0dFUkVENCAgPSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENF9Nc2ssICAvKio8IEludGVycnVwdCBvbiBFVkVOVFNfVFJJR0dFUkVEWzRdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDUgID0gRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDVfTXNrLCAgLyoqPCBJbnRlcnJ1cHQgb24gRVZFTlRTX1RSSUdHRVJFRFs1XSBldmVudC4gKi8KKyAgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQ2ICA9IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ2X01zaywgIC8qKjwgSW50ZXJydXB0IG9uIEVWRU5UU19UUklHR0VSRURbNl0gZXZlbnQuICovCisgICAgTlJGX0VHVV9JTlRfVFJJR0dFUkVENyAgPSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEN19Nc2ssICAvKio8IEludGVycnVwdCBvbiBFVkVOVFNfVFJJR0dFUkVEWzddIGV2ZW50LiAqLworICAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDggID0gRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDhfTXNrLCAgLyoqPCBJbnRlcnJ1cHQgb24gRVZFTlRTX1RSSUdHRVJFRFs4XSBldmVudC4gKi8KKyAgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQ5ICA9IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ5X01zaywgIC8qKjwgSW50ZXJydXB0IG9uIEVWRU5UU19UUklHR0VSRURbOV0gZXZlbnQuICovCisgICAgTlJGX0VHVV9JTlRfVFJJR0dFUkVEMTAgPSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTBfTXNrLCAvKio8IEludGVycnVwdCBvbiBFVkVOVFNfVFJJR0dFUkVEWzEwXSBldmVudC4gKi8KKyAgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQxMSA9IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMV9Nc2ssIC8qKjwgSW50ZXJydXB0IG9uIEVWRU5UU19UUklHR0VSRURbMTFdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDEyID0gRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEyX01zaywgLyoqPCBJbnRlcnJ1cHQgb24gRVZFTlRTX1RSSUdHRVJFRFsxMl0gZXZlbnQuICovCisgICAgTlJGX0VHVV9JTlRfVFJJR0dFUkVEMTMgPSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTNfTXNrLCAvKio8IEludGVycnVwdCBvbiBFVkVOVFNfVFJJR0dFUkVEWzEzXSBldmVudC4gKi8KKyAgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQxNCA9IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxNF9Nc2ssIC8qKjwgSW50ZXJydXB0IG9uIEVWRU5UU19UUklHR0VSRURbMTRdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDE1ID0gRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDE1X01zaywgLyoqPCBJbnRlcnJ1cHQgb24gRVZFTlRTX1RSSUdHRVJFRFsxNV0gZXZlbnQuICovCisgICAgTlJGX0VHVV9JTlRfQUxMICAgICAgICAgPSAweEZGRkZ1TAorfSBucmZfZWd1X2ludF9tYXNrX3Q7CisKKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBtYXggY2hhbm5lbCBudW1iZXIgb2YgZ2l2ZW4gRUdVLgorICoKKyAqIEBwYXJhbSBOUkZfRUdVeCBFR1UgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgbnVtYmVyIG9mIGF2YWlsYWJsZSBjaGFubmVscy4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9lZ3VfY2hhbm5lbF9jb3VudChOUkZfRUdVX1R5cGUgKiBOUkZfRUdVeCkKK3sKKyAgICBpZiAoTlJGX0VHVXggPT0gTlJGX0VHVTApeworICAgICAgICByZXR1cm4gRUdVMF9DSF9OVU07CisgICAgfQorICAgIGlmIChOUkZfRUdVeCA9PSAgTlJGX0VHVTEpeworICAgICAgICByZXR1cm4gRUdVMV9DSF9OVU07CisgICAgfQorICAgIGlmIChOUkZfRUdVeCA9PSAgTlJGX0VHVTIpeworICAgICAgICByZXR1cm4gRUdVMl9DSF9OVU07CisgICAgfQorICAgIGlmIChOUkZfRUdVeCA9PSAgTlJGX0VHVTMpeworICAgICAgICByZXR1cm4gRUdVM19DSF9OVU07CisgICAgfQorICAgIGlmIChOUkZfRUdVeCA9PSAgTlJGX0VHVTQpeworICAgICAgICByZXR1cm4gRUdVNF9DSF9OVU07CisgICAgfQorICAgIGlmIChOUkZfRUdVeCA9PSAgTlJGX0VHVTUpeworICAgICAgICByZXR1cm4gRUdVNV9DSF9OVU07CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgdHJpZ2dlcmluZyBhIHNwZWNpZmljIEVHVSB0YXNrLgorICoKKyAqIEBwYXJhbSBOUkZfRUdVeCBFR1UgaW5zdGFuY2UuCisgKiBAcGFyYW0gZWd1X3Rhc2sgRUdVIHRhc2suCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9lZ3VfdGFza190cmlnZ2VyKE5SRl9FR1VfVHlwZSAqIE5SRl9FR1V4LCBucmZfZWd1X3Rhc2tfdCBlZ3VfdGFzaykKK3sKKyAgICAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9FR1V4ICsgKHVpbnQzMl90KWVndV90YXNrKSkgPSAweDFVTDsKK30KKworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgRUdVIHRhc2sgcmVnaXN0ZXIuCisgKgorICogQHBhcmFtIE5SRl9FR1V4IEVHVSBpbnN0YW5jZS4KKyAqIEBwYXJhbSBlZ3VfdGFzayBFR1UgdGFzay4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90ICogbnJmX2VndV90YXNrX2FkZHJlc3NfZ2V0KE5SRl9FR1VfVHlwZSAqIE5SRl9FR1V4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9lZ3VfdGFza190IGVndV90YXNrKQoreworICAgIHJldHVybiAodWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfRUdVeCArICh1aW50MzJfdCllZ3VfdGFzayk7Cit9CisKKworLyoqCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiBhIHNwZWNpZmljIEVHVSBUUklHR0VSIHRhc2sgcmVnaXN0ZXIuCisgKgorICogQHBhcmFtIE5SRl9FR1V4IEVHVSBpbnN0YW5jZS4KKyAqIEBwYXJhbSBjaGFubmVsICBDaGFubmVsIG51bWJlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90ICogbnJmX2VndV90YXNrX3RyaWdnZXJfYWRkcmVzc19nZXQoTlJGX0VHVV9UeXBlICogTlJGX0VHVXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY2hhbm5lbCkKK3sKKyAgICBBU1NFUlQoY2hhbm5lbCA8IG5yZl9lZ3VfY2hhbm5lbF9jb3VudChOUkZfRUdVeCkpOworICAgIHJldHVybiAodWludDMyX3QqKSZOUkZfRUdVeC0+VEFTS1NfVFJJR0dFUltjaGFubmVsXTsKK30KKworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBzcGVjaWZpYyBFR1UgVFJJR0dFUiB0YXNrLgorICoKKyAqIEBwYXJhbSBOUkZfRUdVeCBFR1UgaW5zdGFuY2UuCisgKiBAcGFyYW0gY2hhbm5lbCAgQ2hhbm5lbCBudW1iZXIuCisgKi8KK19fU1RBVElDX0lOTElORSBucmZfZWd1X3Rhc2tfdCBucmZfZWd1X3Rhc2tfdHJpZ2dlcl9nZXQoTlJGX0VHVV9UeXBlICogTlJGX0VHVXgsIHVpbnQ4X3QgY2hhbm5lbCkKK3sKKyAgICBBU1NFUlQoY2hhbm5lbCA8IG5yZl9lZ3VfY2hhbm5lbF9jb3VudChOUkZfRUdVeCkpOworICAgIHJldHVybiAobnJmX2VndV90YXNrX3QpKCh1aW50MzJfdCkgTlJGX0VHVV9UQVNLX1RSSUdHRVIwICsgKGNoYW5uZWwgKiBzaXplb2YodWludDMyX3QpKSk7Cit9CisKKworLyoqCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHVybmluZyB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBFR1UgZXZlbnQuCisgKgorICogQHBhcmFtIE5SRl9FR1V4ICBFR1UgaW5zdGFuY2UuCisgKiBAcGFyYW0gZWd1X2V2ZW50IEVHVSBldmVudCB0byBjaGVjay4KKyAqLworX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX2VndV9ldmVudF9jaGVjayhOUkZfRUdVX1R5cGUgKiBOUkZfRUdVeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX2VndV9ldmVudF90IGVndV9ldmVudCkKK3sKKyAgICByZXR1cm4gKGJvb2wpKih2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9FR1V4ICsgKHVpbnQzMl90KWVndV9ldmVudCk7Cit9CisKKworLyoqCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNsZWFyaW5nIGEgc3BlY2lmaWMgRUdVIGV2ZW50LgorICoKKyAqIEBwYXJhbSBOUkZfRUdVeCAgRUdVIGluc3RhbmNlLgorICogQHBhcmFtIGVndV9ldmVudCBFR1UgZXZlbnQgdG8gY2xlYXIuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9lZ3VfZXZlbnRfY2xlYXIoTlJGX0VHVV9UeXBlICogTlJGX0VHVXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9lZ3VfZXZlbnRfdCBlZ3VfZXZlbnQpCit7CisgICAgKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfRUdVeCArICh1aW50MzJfdCllZ3VfZXZlbnQpKSA9IDB4MFVMOworI2lmIF9fQ09SVEVYX00gPT0gMHgwNAorICAgIHZvbGF0aWxlIHVpbnQzMl90IGR1bW15ID0gKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfRUdVeCArICh1aW50MzJfdCllZ3VfZXZlbnQpKTsKKyAgICAodm9pZClkdW1teTsKKyNlbmRpZgorfQorCisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBFR1UgZXZlbnQgcmVnaXN0ZXIuCisgKgorICogQHBhcmFtIE5SRl9FR1V4ICBFR1UgaW5zdGFuY2UuCisgKiBAcGFyYW0gZWd1X2V2ZW50IEVHVSBldmVudC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90ICogbnJmX2VndV9ldmVudF9hZGRyZXNzX2dldChOUkZfRUdVX1R5cGUgKiBOUkZfRUdVeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX2VndV9ldmVudF90IGVndV9ldmVudCkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX0VHVXggKyAodWludDMyX3QpZWd1X2V2ZW50KTsKK30KKworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgRUdVIFRSSUdHRVJFRCBldmVudCByZWdpc3Rlci4KKyAqCisgKiBAcGFyYW0gTlJGX0VHVXggRUdVIGluc3RhbmNlLgorICogQHBhcmFtIGNoYW5uZWwgIENoYW5uZWwgbnVtYmVyLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgKiBucmZfZWd1X2V2ZW50X3RyaWdnZXJlZF9hZGRyZXNzX2dldChOUkZfRUdVX1R5cGUgKiBOUkZfRUdVeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjaGFubmVsKQoreworICAgIEFTU0VSVChjaGFubmVsIDwgbnJmX2VndV9jaGFubmVsX2NvdW50KE5SRl9FR1V4KSk7CisgICAgcmV0dXJuICh1aW50MzJfdCopJk5SRl9FR1V4LT5FVkVOVFNfVFJJR0dFUkVEW2NoYW5uZWxdOworfQorCisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgdGhlIHNwZWNpZmljIEVHVSBUUklHR0VSRUQgZXZlbnQuCisgKgorICogQHBhcmFtIE5SRl9FR1V4IEVHVSBpbnN0YW5jZS4KKyAqIEBwYXJhbSBjaGFubmVsICBDaGFubmVsIG51bWJlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIG5yZl9lZ3VfZXZlbnRfdCBucmZfZWd1X2V2ZW50X3RyaWdnZXJlZF9nZXQoTlJGX0VHVV9UeXBlICogTlJGX0VHVXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGNoYW5uZWwpCit7CisgICAgQVNTRVJUKGNoYW5uZWwgPCBucmZfZWd1X2NoYW5uZWxfY291bnQoTlJGX0VHVXgpKTsKKyAgICByZXR1cm4gKG5yZl9lZ3VfZXZlbnRfdCkoKHVpbnQzMl90KSBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDAgKyAoY2hhbm5lbCAqIHNpemVvZih1aW50MzJfdCkpKTsKK30KKworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZW5hYmxpbmcgb25lIG9yIG1vcmUgc3BlY2lmaWMgRUdVIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIE5SRl9FR1V4ICAgICBFR1UgaW5zdGFuY2UuCisgKiBAcGFyYW0gZWd1X2ludF9tYXNrIEludGVycnVwdHMgdG8gZW5hYmxlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZWd1X2ludF9lbmFibGUoTlJGX0VHVV9UeXBlICogTlJGX0VHVXgsIHVpbnQzMl90IGVndV9pbnRfbWFzaykKK3sKKyAgICBOUkZfRUdVeC0+SU5URU5TRVQgPSBlZ3VfaW50X21hc2s7Cit9CisKKworLyoqCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHN0YXRlIG9mIG9uZSBvciBtb3JlIEVHVSBpbnRlcnJ1cHRzLgorICoKKyAqIEBwYXJhbSBOUkZfRUdVeCBFR1UgaW5zdGFuY2UuCisgKiBAcGFyYW0gZWd1X2ludF9tYXNrIEludGVycnVwdHMgdG8gY2hlY2suCisgKgorICogQHJldHZhbCB0cnVlICBJZiBhbGwgb2YgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgorICogQHJldHZhbCBmYWxzZSBJZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzIGlzIGRpc2FibGVkLgorICovCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBucmZfZWd1X2ludF9lbmFibGVfY2hlY2soTlJGX0VHVV9UeXBlICogTlJGX0VHVXgsIHVpbnQzMl90IGVndV9pbnRfbWFzaykKK3sKKyAgICByZXR1cm4gKGJvb2wpKE5SRl9FR1V4LT5JTlRFTlNFVCAmIGVndV9pbnRfbWFzayk7Cit9CisKKworLyoqCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBvbmUgb3IgbW9yZSBzcGVjaWZpYyBFR1UgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gTlJGX0VHVXggICAgIEVHVSBpbnN0YW5jZS4KKyAqIEBwYXJhbSBlZ3VfaW50X21hc2sgSW50ZXJydXB0cyB0byBkaXNhYmxlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZWd1X2ludF9kaXNhYmxlKE5SRl9FR1VfVHlwZSAqIE5SRl9FR1V4LCB1aW50MzJfdCBlZ3VfaW50X21hc2spCit7CisgICAgTlJGX0VHVXgtPklOVEVOQ0xSID0gZWd1X2ludF9tYXNrOworfQorCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyBvbmUgb3IgbW9yZSBzcGVjaWZpYyBFR1UgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gTlJGX0VHVXggRUdVIGluc3RhbmNlLgorICogQHBhcmFtIGNoYW5uZWwgQ2hhbm5lbCBudW1iZXIuCisgKgorICogQHJldHVybnMgRUdVIGludGVycnVwdCBtYXNrLgorICovCitfX1NUQVRJQ19JTkxJTkUgbnJmX2VndV9pbnRfbWFza190IG5yZl9lZ3VfaW50X2dldChOUkZfRUdVX1R5cGUgKiBOUkZfRUdVeCwgdWludDhfdCBjaGFubmVsKQoreworICAgIEFTU0VSVChjaGFubmVsIDwgbnJmX2VndV9jaGFubmVsX2NvdW50KE5SRl9FR1V4KSk7CisgICAgcmV0dXJuIChucmZfZWd1X2ludF9tYXNrX3QpKCh1aW50MzJfdCkgKEVHVV9JTlRFTlNFVF9UUklHR0VSRUQwX01zayA8PCBjaGFubmVsKSk7Cit9CisKKy8qKiBAfSAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2dwaW8uaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiN2IyZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9ncGlvLmgKQEAgLTAsMCArMSw3ODYgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX0dQSU9fSF9fDQorI2RlZmluZSBOUkZfR1BJT19IX18NCisNCisjaW5jbHVkZSAibnJmLmgiDQorI2luY2x1ZGUgIm5yZl9wZXJpcGhlcmFscy5oIg0KKyNpbmNsdWRlICJucmZfYXNzZXJ0LmgiDQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqDQorICogQGRlZmdyb3VwIG5yZl9ncGlvIEdQSU8gYWJzdHJhY3Rpb24NCisgKiBAew0KKyAqIEBpbmdyb3VwIG5yZl9kcml2ZXJzDQorICogQGJyaWVmIEdQSU8gcGluIGFic3RyYWN0aW9uIGFuZCBwb3J0IGFic3RyYWN0aW9uIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGJ5dGUtd2lzZSB0byBHUElPIHBvcnRzLg0KKyAqLw0KKw0KKyNpZiAoR1BJT19DT1VOVCA9PSAxKQ0KKyNkZWZpbmUgTlVNQkVSX09GX1BJTlMgKFAwX1BJTl9OVU0pDQorI2RlZmluZSBHUElPX1JFR19MSVNUICB7TlJGX0dQSU99DQorI2VsaWYgKEdQSU9fQ09VTlQgPT0gMikNCisjZGVmaW5lIE5VTUJFUl9PRl9QSU5TIChQMF9QSU5fTlVNICsgUDFfUElOX05VTSkNCisjZGVmaW5lIEdQSU9fUkVHX0xJU1QgIHtOUkZfUDAsIE5SRl9QMX0NCisjZWxzZQ0KKyNlcnJvciAiTm90IHN1cHBvcnRlZC4iDQorI2VuZGlmDQorDQorDQorLyoqDQorICogQGJyaWVmIE1hY3JvIGZvciBtYXBwaW5nIHBvcnQgYW5kIHBpbiBudW1iZXJzIHRvIHZhbHVlcyB1bmRlcnN0YW5kYWJsZSBmb3IgbnJmX2dwaW8gZnVuY3Rpb25zLg0KKyAqLw0KKyNkZWZpbmUgTlJGX0dQSU9fUElOX01BUChwb3J0LCBwaW4pICgocG9ydCA8PCA1KSB8IChwaW4gJiAweDFGKSkNCisNCisvKioNCisgKiBAYnJpZWYgUGluIGRpcmVjdGlvbiBkZWZpbml0aW9ucy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9HUElPX1BJTl9ESVJfSU5QVVQgID0gR1BJT19QSU5fQ05GX0RJUl9JbnB1dCwgLy8vPCBJbnB1dC4NCisgICAgTlJGX0dQSU9fUElOX0RJUl9PVVRQVVQgPSBHUElPX1BJTl9DTkZfRElSX091dHB1dCAvLy88IE91dHB1dC4NCit9IG5yZl9ncGlvX3Bpbl9kaXJfdDsNCisNCisvKioNCisgKiBAYnJpZWYgQ29ubmVjdGlvbiBvZiBpbnB1dCBidWZmZXIuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfR1BJT19QSU5fSU5QVVRfQ09OTkVDVCAgICA9IEdQSU9fUElOX0NORl9JTlBVVF9Db25uZWN0LCAgIC8vLzwgQ29ubmVjdCBpbnB1dCBidWZmZXIuDQorICAgIE5SRl9HUElPX1BJTl9JTlBVVF9ESVNDT05ORUNUID0gR1BJT19QSU5fQ05GX0lOUFVUX0Rpc2Nvbm5lY3QgLy8vPCBEaXNjb25uZWN0IGlucHV0IGJ1ZmZlci4NCit9IG5yZl9ncGlvX3Bpbl9pbnB1dF90Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBFbnVtZXJhdG9yIHVzZWQgZm9yIHNlbGVjdGluZyB0aGUgcGluIHRvIGJlIHB1bGxlZCBkb3duIG9yIHVwIGF0IHRoZSB0aW1lIG9mIHBpbiBjb25maWd1cmF0aW9uLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX0dQSU9fUElOX05PUFVMTCAgID0gR1BJT19QSU5fQ05GX1BVTExfRGlzYWJsZWQsIC8vLzwgIFBpbiBwdWxsLXVwIHJlc2lzdG9yIGRpc2FibGVkLg0KKyAgICBOUkZfR1BJT19QSU5fUFVMTERPV04gPSBHUElPX1BJTl9DTkZfUFVMTF9QdWxsZG93biwgLy8vPCAgUGluIHB1bGwtZG93biByZXNpc3RvciBlbmFibGVkLg0KKyAgICBOUkZfR1BJT19QSU5fUFVMTFVQICAgPSBHUElPX1BJTl9DTkZfUFVMTF9QdWxsdXAsICAgLy8vPCAgUGluIHB1bGwtdXAgcmVzaXN0b3IgZW5hYmxlZC4NCit9IG5yZl9ncGlvX3Bpbl9wdWxsX3Q7DQorDQorLyoqDQorICogQGJyaWVmIEVudW1lcmF0b3IgdXNlZCBmb3Igc2VsZWN0aW5nIG91dHB1dCBkcml2ZSBtb2RlLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX0dQSU9fUElOX1MwUzEgPSBHUElPX1BJTl9DTkZfRFJJVkVfUzBTMSwgLy8vPCAhPCBTdGFuZGFyZCAnMCcsIHN0YW5kYXJkICcxJy4NCisgICAgTlJGX0dQSU9fUElOX0gwUzEgPSBHUElPX1BJTl9DTkZfRFJJVkVfSDBTMSwgLy8vPCAhPCBIaWdoLWRyaXZlICcwJywgc3RhbmRhcmQgJzEnLg0KKyAgICBOUkZfR1BJT19QSU5fUzBIMSA9IEdQSU9fUElOX0NORl9EUklWRV9TMEgxLCAvLy88ICE8IFN0YW5kYXJkICcwJywgaGlnaC1kcml2ZSAnMScuDQorICAgIE5SRl9HUElPX1BJTl9IMEgxID0gR1BJT19QSU5fQ05GX0RSSVZFX0gwSDEsIC8vLzwgITwgSGlnaCBkcml2ZSAnMCcsIGhpZ2gtZHJpdmUgJzEnLg0KKyAgICBOUkZfR1BJT19QSU5fRDBTMSA9IEdQSU9fUElOX0NORl9EUklWRV9EMFMxLCAvLy88ICE8IERpc2Nvbm5lY3QgJzAnIHN0YW5kYXJkICcxJy4NCisgICAgTlJGX0dQSU9fUElOX0QwSDEgPSBHUElPX1BJTl9DTkZfRFJJVkVfRDBIMSwgLy8vPCAhPCBEaXNjb25uZWN0ICcwJywgaGlnaC1kcml2ZSAnMScuDQorICAgIE5SRl9HUElPX1BJTl9TMEQxID0gR1BJT19QSU5fQ05GX0RSSVZFX1MwRDEsIC8vLzwgITwgU3RhbmRhcmQgJzAnLCBkaXNjb25uZWN0ICcxJy4NCisgICAgTlJGX0dQSU9fUElOX0gwRDEgPSBHUElPX1BJTl9DTkZfRFJJVkVfSDBEMSwgLy8vPCAhPCBIaWdoLWRyaXZlICcwJywgZGlzY29ubmVjdCAnMScuDQorfSBucmZfZ3Bpb19waW5fZHJpdmVfdDsNCisNCisvKioNCisgKiBAYnJpZWYgRW51bWVyYXRvciB1c2VkIGZvciBzZWxlY3RpbmcgdGhlIHBpbiB0byBzZW5zZSBoaWdoIG9yIGxvdyBsZXZlbCBvbiB0aGUgcGluIGlucHV0Lg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX0dQSU9fUElOX05PU0VOU0UgICAgPSBHUElPX1BJTl9DTkZfU0VOU0VfRGlzYWJsZWQsIC8vLzwgIFBpbiBzZW5zZSBsZXZlbCBkaXNhYmxlZC4NCisgICAgTlJGX0dQSU9fUElOX1NFTlNFX0xPVyAgPSBHUElPX1BJTl9DTkZfU0VOU0VfTG93LCAgICAgIC8vLzwgIFBpbiBzZW5zZSBsb3cgbGV2ZWwuDQorICAgIE5SRl9HUElPX1BJTl9TRU5TRV9ISUdIID0gR1BJT19QSU5fQ05GX1NFTlNFX0hpZ2gsICAgICAvLy88ICBQaW4gc2Vuc2UgaGlnaCBsZXZlbC4NCit9IG5yZl9ncGlvX3Bpbl9zZW5zZV90Ow0KKw0KKw0KKyNpZiAoX19MSU5UX18gIT0gMSkNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNvbmZpZ3VyaW5nIHRoZSBHUElPIHBpbiByYW5nZSBhcyBvdXRwdXQgcGlucyB3aXRoIG5vcm1hbCBkcml2ZSBzdHJlbmd0aC4NCisgKiAgICAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgcGluIHJhbmdlIGFzIHNpbXBsZSBvdXRwdXQgd2l0aCBnYXRlIGRyaXZpbmcgR1BJT19QSU5fQ05GX0RSSVZFX1MwUzEgKG5vcm1hbCBjYXNlcykuDQorICoNCisgKiBAcGFyYW0gcGluX3JhbmdlX3N0YXJ0IFNwZWNpZmllcyB0aGUgc3RhcnQgbnVtYmVyIChpbmNsdXNpdmUpIGluIHRoZSByYW5nZSBvZiBwaW4gbnVtYmVycyB0byBiZSBjb25maWd1cmVkIChhbGxvd2VkIHZhbHVlcyAwLTMwKS4NCisgKg0KKyAqIEBwYXJhbSBwaW5fcmFuZ2VfZW5kIFNwZWNpZmllcyB0aGUgZW5kIG51bWJlciAoaW5jbHVzaXZlKSBpbiB0aGUgcmFuZ2Ugb2YgcGluIG51bWJlcnMgdG8gYmUgY29uZmlndXJlZCAoYWxsb3dlZCB2YWx1ZXMgMC0zMCkuDQorICoNCisgKiBAbm90ZSBGb3IgY29uZmlndXJpbmcgb25seSBvbmUgcGluIGFzIG91dHB1dCwgdXNlIEByZWYgbnJmX2dwaW9fY2ZnX291dHB1dC4NCisgKiAgICAgICBTZW5zZSBjYXBhYmlsaXR5IG9uIHRoZSBwaW4gaXMgZGlzYWJsZWQgYW5kIGlucHV0IGlzIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBidWZmZXIgYXMgdGhlIHBpbnMgYXJlIGNvbmZpZ3VyZWQgYXMgb3V0cHV0Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3JhbmdlX2NmZ19vdXRwdXQodWludDMyX3QgcGluX3JhbmdlX3N0YXJ0LCB1aW50MzJfdCBwaW5fcmFuZ2VfZW5kKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNvbmZpZ3VyaW5nIHRoZSBHUElPIHBpbiByYW5nZSBhcyBpbnB1dCBwaW5zIHdpdGggZ2l2ZW4gaW5pdGlhbCB2YWx1ZSBzZXQsIGhpZGluZyBpbm5lciBkZXRhaWxzLg0KKyAqICAgICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBwaW4gcmFuZ2UgYXMgc2ltcGxlIGlucHV0Lg0KKyAqDQorICogQHBhcmFtIHBpbl9yYW5nZV9zdGFydCBTcGVjaWZpZXMgdGhlIHN0YXJ0IG51bWJlciAoaW5jbHVzaXZlKSBpbiB0aGUgcmFuZ2Ugb2YgcGluIG51bWJlcnMgdG8gYmUgY29uZmlndXJlZCAoYWxsb3dlZCB2YWx1ZXMgMC0zMCkuDQorICoNCisgKiBAcGFyYW0gcGluX3JhbmdlX2VuZCBTcGVjaWZpZXMgdGhlIGVuZCBudW1iZXIgKGluY2x1c2l2ZSkgaW4gdGhlIHJhbmdlIG9mIHBpbiBudW1iZXJzIHRvIGJlIGNvbmZpZ3VyZWQgKGFsbG93ZWQgdmFsdWVzIDAtMzApLg0KKyAqDQorICogQHBhcmFtIHB1bGxfY29uZmlnIFN0YXRlIG9mIHRoZSBwaW4gcmFuZ2UgcHVsbCByZXNpc3RvciAobm8gcHVsbCwgcHVsbGVkIGRvd24sIG9yIHB1bGxlZCBoaWdoKS4NCisgKg0KKyAqIEBub3RlICBGb3IgY29uZmlndXJpbmcgb25seSBvbmUgcGluIGFzIGlucHV0LCB1c2UgQHJlZiBucmZfZ3Bpb19jZmdfaW5wdXQuDQorICogICAgICAgIFNlbnNlIGNhcGFiaWxpdHkgb24gdGhlIHBpbiBpcyBkaXNhYmxlZCBhbmQgaW5wdXQgaXMgY29ubmVjdGVkIHRvIGJ1ZmZlciBzbyB0aGF0IHRoZSBHUElPLT5JTiByZWdpc3RlciBpcyByZWFkYWJsZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19yYW5nZV9jZmdfaW5wdXQodWludDMyX3QgICAgICAgICAgICBwaW5fcmFuZ2Vfc3RhcnQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgcGluX3JhbmdlX2VuZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX2dwaW9fcGluX3B1bGxfdCBwdWxsX2NvbmZpZyk7DQorDQorLyoqDQorICogQGJyaWVmIFBpbiBjb25maWd1cmF0aW9uIGZ1bmN0aW9uLg0KKyAqDQorICogVGhlIG1haW4gcGluIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uDQorICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gc2V0IGFueSBhc3BlY3QgaW4gUElOX0NORiByZWdpc3Rlci4NCisgKiBAcGFyYW0gcGluX251bWJlciBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIuDQorICogQHBhcmFtIGRpciAgICAgICAgUGluIGRpcmVjdGlvbi4NCisgKiBAcGFyYW0gaW5wdXQgICAgICBDb25uZWN0IG9yIGRpc2Nvbm5lY3QgdGhlIGlucHV0IGJ1ZmZlci4NCisgKiBAcGFyYW0gcHVsbCAgICAgICBQdWxsIGNvbmZpZ3VyYXRpb24uDQorICogQHBhcmFtIGRyaXZlICAgICAgRHJpdmUgY29uZmlndXJhdGlvbi4NCisgKiBAcGFyYW0gc2Vuc2UgICAgICBQaW4gc2Vuc2luZyBtZWNoYW5pc20uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnKA0KKyAgICB1aW50MzJfdCAgICAgICAgICAgICBwaW5fbnVtYmVyLA0KKyAgICBucmZfZ3Bpb19waW5fZGlyX3QgICBkaXIsDQorICAgIG5yZl9ncGlvX3Bpbl9pbnB1dF90IGlucHV0LA0KKyAgICBucmZfZ3Bpb19waW5fcHVsbF90ICBwdWxsLA0KKyAgICBucmZfZ3Bpb19waW5fZHJpdmVfdCBkcml2ZSwNCisgICAgbnJmX2dwaW9fcGluX3NlbnNlX3Qgc2Vuc2UpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgdGhlIGdpdmVuIEdQSU8gcGluIG51bWJlciBhcyBvdXRwdXQsIGhpZGluZyBpbm5lciBkZXRhaWxzLg0KKyAqICAgICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBhIHBpbiBhcyBzaW1wbGUgb3V0cHV0IHdpdGggZ2F0ZSBkcml2aW5nIEdQSU9fUElOX0NORl9EUklWRV9TMFMxIChub3JtYWwgY2FzZXMpLg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyLg0KKyAqDQorICogQG5vdGUgIFNlbnNlIGNhcGFiaWxpdHkgb24gdGhlIHBpbiBpcyBkaXNhYmxlZCBhbmQgaW5wdXQgaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIGJ1ZmZlciBhcyB0aGUgcGlucyBhcmUgY29uZmlndXJlZCBhcyBvdXRwdXQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnX291dHB1dCh1aW50MzJfdCBwaW5fbnVtYmVyKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNvbmZpZ3VyaW5nIHRoZSBnaXZlbiBHUElPIHBpbiBudW1iZXIgYXMgaW5wdXQsIGhpZGluZyBpbm5lciBkZXRhaWxzLg0KKyAqICAgICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBhIHBpbiBhcyBzaW1wbGUgaW5wdXQuDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIuDQorICogQHBhcmFtIHB1bGxfY29uZmlnIFN0YXRlIG9mIHRoZSBwaW4gcmFuZ2UgcHVsbCByZXNpc3RvciAobm8gcHVsbCwgcHVsbGVkIGRvd24sIG9yIHB1bGxlZCBoaWdoKS4NCisgKg0KKyAqIEBub3RlICBTZW5zZSBjYXBhYmlsaXR5IG9uIHRoZSBwaW4gaXMgZGlzYWJsZWQgYW5kIGlucHV0IGlzIGNvbm5lY3RlZCB0byBidWZmZXIgc28gdGhhdCB0aGUgR1BJTy0+SU4gcmVnaXN0ZXIgaXMgcmVhZGFibGUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnX2lucHV0KHVpbnQzMl90IHBpbl9udW1iZXIsIG5yZl9ncGlvX3Bpbl9wdWxsX3QgcHVsbF9jb25maWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVzZXR0aW5nIHBpbiBjb25maWd1cmF0aW9uIHRvIGl0cyBkZWZhdWx0IHN0YXRlLg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX2NmZ19kZWZhdWx0KHVpbnQzMl90IHBpbl9udW1iZXIpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgdGhlIGdpdmVuIEdQSU8gcGluIG51bWJlciBhcyBhIHdhdGNoZXIuIE9ubHkgaW5wdXQgaXMgY29ubmVjdGVkLg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnX3dhdGNoZXIodWludDMyX3QgcGluX251bWJlcik7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBkaXNjb25uZWN0aW5nIGlucHV0IGZvciB0aGUgZ2l2ZW4gR1BJTy4NCisgKg0KKyAqIEBwYXJhbSBwaW5fbnVtYmVyIFNwZWNpZmllcyB0aGUgcGluIG51bWJlci4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX2lucHV0X2Rpc2Nvbm5lY3QodWludDMyX3QgcGluX251bWJlcik7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjb25maWd1cmluZyB0aGUgZ2l2ZW4gR1BJTyBwaW4gbnVtYmVyIGFzIGlucHV0LCBoaWRpbmcgaW5uZXIgZGV0YWlscy4NCisgKiAgICAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgcGluIHJhbmdlIGFzIHNpbXBsZSBpbnB1dC4NCisgKiAgICAgICAgU2Vuc2UgY2FwYWJpbGl0eSBvbiB0aGUgcGluIGlzIGNvbmZpZ3VyYWJsZSBhbmQgaW5wdXQgaXMgY29ubmVjdGVkIHRvIGJ1ZmZlciBzbyB0aGF0IHRoZSBHUElPLT5JTiByZWdpc3RlciBpcyByZWFkYWJsZS4NCisgKg0KKyAqIEBwYXJhbSBwaW5fbnVtYmVyICAgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyLg0KKyAqIEBwYXJhbSBwdWxsX2NvbmZpZyAgU3RhdGUgb2YgdGhlIHBpbiBwdWxsIHJlc2lzdG9yIChubyBwdWxsLCBwdWxsZWQgZG93biwgb3IgcHVsbGVkIGhpZ2gpLg0KKyAqIEBwYXJhbSBzZW5zZV9jb25maWcgU2Vuc2UgbGV2ZWwgb2YgdGhlIHBpbiAobm8gc2Vuc2UsIHNlbnNlIGxvdywgb3Igc2Vuc2UgaGlnaCkuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnX3NlbnNlX2lucHV0KHVpbnQzMl90ICAgICAgICAgICAgIHBpbl9udW1iZXIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9ncGlvX3Bpbl9wdWxsX3QgIHB1bGxfY29uZmlnLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfZ3Bpb19waW5fc2Vuc2VfdCBzZW5zZV9jb25maWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgc2Vuc2UgbGV2ZWwgZm9yIHRoZSBnaXZlbiBHUElPLg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgICBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIuDQorICogQHBhcmFtIHNlbnNlX2NvbmZpZyBTZW5zZSBjb25maWd1cmF0aW9uLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnX3NlbnNlX3NldCh1aW50MzJfdCBwaW5fbnVtYmVyLCBucmZfZ3Bpb19waW5fc2Vuc2VfdCBzZW5zZV9jb25maWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyB0aGUgZGlyZWN0aW9uIGZvciBhIEdQSU8gcGluLg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyIGZvciB3aGljaCB0byBzZXQgdGhlIGRpcmVjdGlvbi4NCisgKg0KKyAqIEBwYXJhbSBkaXJlY3Rpb24gU3BlY2lmaWVzIHRoZSBkaXJlY3Rpb24uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcGluX2Rpcl9zZXQodWludDMyX3QgcGluX251bWJlciwgbnJmX2dwaW9fcGluX2Rpcl90IGRpcmVjdGlvbik7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGEgR1BJTyBwaW4uDQorICoNCisgKiBOb3RlIHRoYXQgdGhlIHBpbiBtdXN0IGJlIGNvbmZpZ3VyZWQgYXMgYW4gb3V0cHV0IGZvciB0aGlzIGZ1bmN0aW9uIHRvIGhhdmUgYW55IGVmZmVjdC4NCisgKg0KKyAqIEBwYXJhbSBwaW5fbnVtYmVyIFNwZWNpZmllcyB0aGUgcGluIG51bWJlciB0byBzZXQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcGluX3NldCh1aW50MzJfdCBwaW5fbnVtYmVyKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNsZWFyaW5nIGEgR1BJTyBwaW4uDQorICoNCisgKiBOb3RlIHRoYXQgdGhlIHBpbiBtdXN0IGJlIGNvbmZpZ3VyZWQgYXMgYW4gb3V0cHV0IGZvciB0aGlzDQorICogZnVuY3Rpb24gdG8gaGF2ZSBhbnkgZWZmZWN0Lg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyIHRvIGNsZWFyLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3Bpbl9jbGVhcih1aW50MzJfdCBwaW5fbnVtYmVyKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHRvZ2dsaW5nIGEgR1BJTyBwaW4uDQorICoNCisgKiBOb3RlIHRoYXQgdGhlIHBpbiBtdXN0IGJlIGNvbmZpZ3VyZWQgYXMgYW4gb3V0cHV0IGZvciB0aGlzDQorICogZnVuY3Rpb24gdG8gaGF2ZSBhbnkgZWZmZWN0Lg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyIHRvIHRvZ2dsZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19waW5fdG9nZ2xlKHVpbnQzMl90IHBpbl9udW1iZXIpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igd3JpdGluZyBhIHZhbHVlIHRvIGEgR1BJTyBwaW4uDQorICoNCisgKiBOb3RlIHRoYXQgdGhlIHBpbiBtdXN0IGJlIGNvbmZpZ3VyZWQgYXMgYW4gb3V0cHV0IGZvciB0aGlzDQorICogZnVuY3Rpb24gdG8gaGF2ZSBhbnkgZWZmZWN0Lg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyIHRvIHdyaXRlLg0KKyAqDQorICogQHBhcmFtIHZhbHVlIFNwZWNpZmllcyB0aGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgcGluLg0KKyAqIEBhcmcgMCBDbGVhcnMgdGhlIHBpbi4NCisgKiBAYXJnID49MSBTZXRzIHRoZSBwaW4uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcGluX3dyaXRlKHVpbnQzMl90IHBpbl9udW1iZXIsIHVpbnQzMl90IHZhbHVlKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhlIGlucHV0IGxldmVsIG9mIGEgR1BJTyBwaW4uDQorICoNCisgKiBOb3RlIHRoYXQgdGhlIHBpbiBtdXN0IGhhdmUgaW5wdXQgY29ubmVjdGVkIGZvciB0aGUgdmFsdWUNCisgKiByZXR1cm5lZCBmcm9tIHRoaXMgZnVuY3Rpb24gdG8gYmUgdmFsaWQuDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIgdG8gcmVhZC4NCisgKg0KKyAqIEByZXR1cm4gMCBpZiB0aGUgcGluIGlucHV0IGxldmVsIGlzIGxvdy4gUG9zaXRpdmUgdmFsdWUgaWYgdGhlIHBpbiBpcyBoaWdoLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb19waW5fcmVhZCh1aW50MzJfdCBwaW5fbnVtYmVyKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhlIG91dHB1dCBsZXZlbCBvZiBhIEdQSU8gcGluLg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyIHRvIHJlYWQuDQorICoNCisgKiBAcmV0dXJuIDAgaWYgdGhlIHBpbiBvdXRwdXQgbGV2ZWwgaXMgbG93LiBQb3NpdGl2ZSB2YWx1ZSBpZiBwaW4gb3V0cHV0IGlzIGhpZ2guDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvX3Bpbl9vdXRfcmVhZCh1aW50MzJfdCBwaW5fbnVtYmVyKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhlIHNlbnNlIGNvbmZpZ3VyYXRpb24gb2YgYSBHUElPIHBpbi4NCisgKg0KKyAqIEBwYXJhbSBwaW5fbnVtYmVyIFNwZWNpZmllcyB0aGUgcGluIG51bWJlciB0byByZWFkLg0KKyAqDQorICogQHJldHZhbCBTZW5zZSBjb25maWd1cmF0aW9uLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBucmZfZ3Bpb19waW5fc2Vuc2VfdCBucmZfZ3Bpb19waW5fc2Vuc2VfZ2V0KHVpbnQzMl90IHBpbl9udW1iZXIpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBvdXRwdXQgZGlyZWN0aW9uIG9uIHNlbGVjdGVkIHBpbnMgb24gYSBnaXZlbiBwb3J0Lg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gb3V0X21hc2sgTWFzayBzcGVjaWZ5aW5nIHRoZSBwaW5zIHRvIHNldCBhcyBvdXRwdXQuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0X2Rpcl9vdXRwdXRfc2V0KE5SRl9HUElPX1R5cGUgKiBwX3JlZywgdWludDMyX3Qgb3V0X21hc2spOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBpbnB1dCBkaXJlY3Rpb24gb24gc2VsZWN0ZWQgcGlucyBvbiBhIGdpdmVuIHBvcnQuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSBpbl9tYXNrICBNYXNrIHNwZWNpZnlpbmcgdGhlIHBpbnMgdG8gc2V0IGFzIGlucHV0Lg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcG9ydF9kaXJfaW5wdXRfc2V0KE5SRl9HUElPX1R5cGUgKiBwX3JlZywgdWludDMyX3QgaW5fbWFzayk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciB3cml0aW5nIHRoZSBkaXJlY3Rpb24gY29uZmlndXJhdGlvbiBvZiBHUElPIHBpbnMgaW4gYSBnaXZlbiBwb3J0Lg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gZGlyX21hc2sgTWFzayBzcGVjaWZ5aW5nIHRoZSBkaXJlY3Rpb24gb2YgcGlucy4gQml0IHNldCBtZWFucyB0aGF0IHRoZSBnaXZlbiBwaW4gaXMgY29uZmlndXJlZCBhcyBvdXRwdXQuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0X2Rpcl93cml0ZShOUkZfR1BJT19UeXBlICogcF9yZWcsIHVpbnQzMl90IGRpcl9tYXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhlIGRpcmVjdGlvbiBjb25maWd1cmF0aW9uIG9mIGEgR1BJTyBwb3J0Lg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKg0KKyAqIEByZXR2YWwgUGluIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGN1cnJlbnQgZGlyZWN0aW9uIHNldHRpbmdzLiBCaXQgc2V0IG1lYW5zIHRoYXQgdGhlIGdpdmVuIHBpbiBpcyBjb25maWd1cmVkIGFzIG91dHB1dC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW9fcG9ydF9kaXJfcmVhZChOUkZfR1BJT19UeXBlIGNvbnN0ICogcF9yZWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgaW5wdXQgc2lnbmFscyBvZiBHUElPIHBpbnMgb24gYSBnaXZlbiBwb3J0Lg0KKyAqDQorICogQHBhcmFtIHBfcmVnIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKg0KKyAqIEByZXR2YWwgUG9ydCBpbnB1dCB2YWx1ZXMuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvX3BvcnRfaW5fcmVhZChOUkZfR1BJT19UeXBlIGNvbnN0ICogcF9yZWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgb3V0cHV0IHNpZ25hbHMgb2YgR1BJTyBwaW5zIG9mIGEgZ2l2ZW4gcG9ydC4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICoNCisgKiBAcmV0dmFsIFBvcnQgb3V0cHV0IHZhbHVlcy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW9fcG9ydF9vdXRfcmVhZChOUkZfR1BJT19UeXBlIGNvbnN0ICogcF9yZWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igd3JpdGluZyB0aGUgR1BJTyBwaW5zIG91dHB1dCBvbiBhIGdpdmVuIHBvcnQuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSB2YWx1ZSBPdXRwdXQgcG9ydCBtYXNrLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcG9ydF9vdXRfd3JpdGUoTlJGX0dQSU9fVHlwZSAqIHBfcmVnLCB1aW50MzJfdCB2YWx1ZSk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGhpZ2ggbGV2ZWwgb24gc2VsZWN0ZWQgR1BJTyBwaW5zIG9mIGEgZ2l2ZW4gcG9ydC4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtIHNldF9tYXNrIE1hc2sgd2l0aCBwaW5zIHRvIHNldCBhcyBsb2dpY2FsIGhpZ2ggbGV2ZWwuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0X291dF9zZXQoTlJGX0dQSU9fVHlwZSAqIHBfcmVnLCB1aW50MzJfdCBzZXRfbWFzayk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGxvdyBsZXZlbCBvbiBzZWxlY3RlZCBHUElPIHBpbnMgb2YgYSBnaXZlbiBwb3J0Lg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gY2xyX21hc2sgTWFzayB3aXRoIHBpbnMgdG8gc2V0IGFzIGxvZ2ljYWwgbG93IGxldmVsLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcG9ydF9vdXRfY2xlYXIoTlJGX0dQSU9fVHlwZSAqIHBfcmVnLCB1aW50MzJfdCBjbHJfbWFzayk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZWFkaW5nIHBpbnMgc3RhdGUgb2YgbXVsdGlwbGUgY29uc2VjdXRpdmUgcG9ydHMuDQorICoNCisgKiBAcGFyYW0gc3RhcnRfcG9ydCBJbmRleCBvZiB0aGUgZmlyc3QgcG9ydCB0byByZWFkLg0KKyAqIEBwYXJhbSBsZW5ndGggICAgIE51bWJlciBvZiBwb3J0cyB0byByZWFkLg0KKyAqIEBwYXJhbSBwX21hc2tzICAgIFBvaW50ZXIgdG8gb3V0cHV0IGFycmF5IHdoZXJlIHBvcnQgc3RhdGVzIHdpbGwgYmUgc3RvcmVkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3BvcnRzX3JlYWQodWludDMyX3Qgc3RhcnRfcG9ydCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCAqIHBfbWFza3MpOw0KKw0KKyNpZmRlZiBHUElPX0RFVEVDVE1PREVfREVURUNUTU9ERV9MREVURUNUDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZWFkaW5nIGxhdGNoIHN0YXRlIG9mIG11bHRpcGxlIGNvbnNlY3V0aXZlIHBvcnRzLg0KKyAqDQorICogQHBhcmFtIHN0YXJ0X3BvcnQgSW5kZXggb2YgdGhlIGZpcnN0IHBvcnQgdG8gcmVhZC4NCisgKiBAcGFyYW0gbGVuZ3RoICAgICBOdW1iZXIgb2YgcG9ydHMgdG8gcmVhZC4NCisgKiBAcGFyYW0gcF9tYXNrcyAgICBQb2ludGVyIHRvIG91dHB1dCBhcnJheSB3aGVyZSBsYXRjaCBzdGF0ZXMgd2lsbCBiZSBzdG9yZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fbGF0Y2hlc19yZWFkKHVpbnQzMl90IHN0YXJ0X3BvcnQsIHVpbnQzMl90IGxlbmd0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKiBwX21hc2tzKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlYWRpbmcgbGF0Y2ggc3RhdGUgb2Ygc2luZ2xlIHBpbi4NCisgKg0KKyAqIEBwYXJhbSBwaW5fbnVtYmVyIFBpbiBudW1iZXIuDQorICogQHJldHVybiAwIGlmIGxhdGNoIGlzIG5vdCBzZXQuIFBvc2l0aXZlIHZhbHVlIG90aGVyd2lzZS4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb19waW5fbGF0Y2hfZ2V0KHVpbnQzMl90IHBpbl9udW1iZXIpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY2xlYXJpbmcgbGF0Y2ggc3RhdGUgb2YgYSBzaW5nbGUgcGluLg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgUGluIG51bWJlci4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3Bpbl9sYXRjaF9jbGVhcih1aW50MzJfdCBwaW5fbnVtYmVyKTsNCisjZW5kaWYNCisNCisNCisjZW5kaWYgLy8gI2lmbmRlZiAoX19MSU5UX18gIT0gMSkNCisNCisjaWZuZGVmIFNVUFBSRVNTX0lOTElORV9JTVBMRU1FTlRBVElPTg0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZXh0cmFjdGluZyBwb3J0IGFuZCByZWxhdGl2ZSBwaW4gbnVtYmVyIGZyb20gYWJzb2x1dGUgcGluIG51bWJlci4NCisgKg0KKyAqIEBwYXJhbVtpbm91dF0gUG9pbnRlciB0byBhYnNvbHV0ZSBwaW4gbnVtYmVyIHdoaWNoIGlzIG92ZXJyaWRlbiBieSByZWxhdGl2ZSB0byBwb3J0IHBpbiBudW1iZXIuDQorICoNCisgKiBAcmV0dXJuIFBvaW50ZXIgdG8gcG9ydCByZWdpc3RlciBzZXQuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgTlJGX0dQSU9fVHlwZSAqIG5yZl9ncGlvX3Bpbl9wb3J0X2RlY29kZSh1aW50MzJfdCAqIHBfcGluKQ0KK3sNCisgICAgQVNTRVJUKCpwX3BpbiA8IE5VTUJFUl9PRl9QSU5TKTsNCisjaWYgKEdQSU9fQ09VTlQgPT0gMSkNCisgICAgLy8gVGhlIG9sZGVzdCBkZWZpbml0aW9uIGNhc2UNCisgICAgcmV0dXJuIE5SRl9HUElPOw0KKyNlbHNlDQorICAgIGlmICgqcF9waW4gPCBQMF9QSU5fTlVNKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlJGX1AwOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgKnBfcGluID0gKnBfcGluICYgKFAwX1BJTl9OVU0gLSAxKTsNCisgICAgICAgIHJldHVybiBOUkZfUDE7DQorICAgIH0NCisjZW5kaWYNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcmFuZ2VfY2ZnX291dHB1dCh1aW50MzJfdCBwaW5fcmFuZ2Vfc3RhcnQsIHVpbnQzMl90IHBpbl9yYW5nZV9lbmQpDQorew0KKyAgICAvKmxpbnQgLWV7ODQ1fSAvLyBBIHplcm8gaGFzIGJlZW4gZ2l2ZW4gYXMgcmlnaHQgYXJndW1lbnQgdG8gb3BlcmF0b3IgJ3wnIiAqLw0KKyAgICBmb3IgKDsgcGluX3JhbmdlX3N0YXJ0IDw9IHBpbl9yYW5nZV9lbmQ7IHBpbl9yYW5nZV9zdGFydCsrKQ0KKyAgICB7DQorICAgICAgICBucmZfZ3Bpb19jZmdfb3V0cHV0KHBpbl9yYW5nZV9zdGFydCk7DQorICAgIH0NCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcmFuZ2VfY2ZnX2lucHV0KHVpbnQzMl90ICAgICAgICAgICAgcGluX3JhbmdlX3N0YXJ0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICAgIHBpbl9yYW5nZV9lbmQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9ncGlvX3Bpbl9wdWxsX3QgcHVsbF9jb25maWcpDQorew0KKyAgICAvKmxpbnQgLWV7ODQ1fSAvLyBBIHplcm8gaGFzIGJlZW4gZ2l2ZW4gYXMgcmlnaHQgYXJndW1lbnQgdG8gb3BlcmF0b3IgJ3wnIiAqLw0KKyAgICBmb3IgKDsgcGluX3JhbmdlX3N0YXJ0IDw9IHBpbl9yYW5nZV9lbmQ7IHBpbl9yYW5nZV9zdGFydCsrKQ0KKyAgICB7DQorICAgICAgICBucmZfZ3Bpb19jZmdfaW5wdXQocGluX3JhbmdlX3N0YXJ0LCBwdWxsX2NvbmZpZyk7DQorICAgIH0NCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnKA0KKyAgICB1aW50MzJfdCAgICAgICAgICAgICBwaW5fbnVtYmVyLA0KKyAgICBucmZfZ3Bpb19waW5fZGlyX3QgICBkaXIsDQorICAgIG5yZl9ncGlvX3Bpbl9pbnB1dF90IGlucHV0LA0KKyAgICBucmZfZ3Bpb19waW5fcHVsbF90ICBwdWxsLA0KKyAgICBucmZfZ3Bpb19waW5fZHJpdmVfdCBkcml2ZSwNCisgICAgbnJmX2dwaW9fcGluX3NlbnNlX3Qgc2Vuc2UpDQorew0KKyAgICBOUkZfR1BJT19UeXBlICogcmVnID0gbnJmX2dwaW9fcGluX3BvcnRfZGVjb2RlKCZwaW5fbnVtYmVyKTsNCisNCisgICAgcmVnLT5QSU5fQ05GW3Bpbl9udW1iZXJdID0gKCh1aW50MzJfdClkaXIgPDwgR1BJT19QSU5fQ05GX0RJUl9Qb3MpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCh1aW50MzJfdClpbnB1dCA8PCBHUElPX1BJTl9DTkZfSU5QVVRfUG9zKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgodWludDMyX3QpcHVsbCA8PCBHUElPX1BJTl9DTkZfUFVMTF9Qb3MpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCh1aW50MzJfdClkcml2ZSA8PCBHUElPX1BJTl9DTkZfRFJJVkVfUG9zKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgodWludDMyX3Qpc2Vuc2UgPDwgR1BJT19QSU5fQ05GX1NFTlNFX1Bvcyk7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX2NmZ19vdXRwdXQodWludDMyX3QgcGluX251bWJlcikNCit7DQorICAgIG5yZl9ncGlvX2NmZygNCisgICAgICAgIHBpbl9udW1iZXIsDQorICAgICAgICBOUkZfR1BJT19QSU5fRElSX09VVFBVVCwNCisgICAgICAgIE5SRl9HUElPX1BJTl9JTlBVVF9ESVNDT05ORUNULA0KKyAgICAgICAgTlJGX0dQSU9fUElOX05PUFVMTCwNCisgICAgICAgIE5SRl9HUElPX1BJTl9TMFMxLA0KKyAgICAgICAgTlJGX0dQSU9fUElOX05PU0VOU0UpOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19jZmdfaW5wdXQodWludDMyX3QgcGluX251bWJlciwgbnJmX2dwaW9fcGluX3B1bGxfdCBwdWxsX2NvbmZpZykNCit7DQorICAgIG5yZl9ncGlvX2NmZygNCisgICAgICAgIHBpbl9udW1iZXIsDQorICAgICAgICBOUkZfR1BJT19QSU5fRElSX0lOUFVULA0KKyAgICAgICAgTlJGX0dQSU9fUElOX0lOUFVUX0NPTk5FQ1QsDQorICAgICAgICBwdWxsX2NvbmZpZywNCisgICAgICAgIE5SRl9HUElPX1BJTl9TMFMxLA0KKyAgICAgICAgTlJGX0dQSU9fUElOX05PU0VOU0UpOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19jZmdfZGVmYXVsdCh1aW50MzJfdCBwaW5fbnVtYmVyKQ0KK3sNCisgICAgbnJmX2dwaW9fY2ZnKA0KKyAgICAgICAgcGluX251bWJlciwNCisgICAgICAgIE5SRl9HUElPX1BJTl9ESVJfSU5QVVQsDQorICAgICAgICBOUkZfR1BJT19QSU5fSU5QVVRfRElTQ09OTkVDVCwNCisgICAgICAgIE5SRl9HUElPX1BJTl9OT1BVTEwsDQorICAgICAgICBOUkZfR1BJT19QSU5fUzBTMSwNCisgICAgICAgIE5SRl9HUElPX1BJTl9OT1NFTlNFKTsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnX3dhdGNoZXIodWludDMyX3QgcGluX251bWJlcikNCit7DQorICAgIE5SRl9HUElPX1R5cGUgKiByZWcgPSBucmZfZ3Bpb19waW5fcG9ydF9kZWNvZGUoJnBpbl9udW1iZXIpOw0KKyAgICAvKmxpbnQgLWV7ODQ1fSAvLyBBIHplcm8gaGFzIGJlZW4gZ2l2ZW4gYXMgcmlnaHQgYXJndW1lbnQgdG8gb3BlcmF0b3IgJ3wnIiAqLw0KKyAgICB1aW50MzJfdCBjbmYgPSByZWctPlBJTl9DTkZbcGluX251bWJlcl0gJiB+R1BJT19QSU5fQ05GX0lOUFVUX01zazsNCisNCisgICAgcmVnLT5QSU5fQ05GW3Bpbl9udW1iZXJdID0gY25mIHwgKEdQSU9fUElOX0NORl9JTlBVVF9Db25uZWN0IDw8IEdQSU9fUElOX0NORl9JTlBVVF9Qb3MpOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19pbnB1dF9kaXNjb25uZWN0KHVpbnQzMl90IHBpbl9udW1iZXIpDQorew0KKyAgICBOUkZfR1BJT19UeXBlICogcmVnID0gbnJmX2dwaW9fcGluX3BvcnRfZGVjb2RlKCZwaW5fbnVtYmVyKTsNCisgICAgLypsaW50IC1lezg0NX0gLy8gQSB6ZXJvIGhhcyBiZWVuIGdpdmVuIGFzIHJpZ2h0IGFyZ3VtZW50IHRvIG9wZXJhdG9yICd8JyIgKi8NCisgICAgdWludDMyX3QgY25mID0gcmVnLT5QSU5fQ05GW3Bpbl9udW1iZXJdICYgfkdQSU9fUElOX0NORl9JTlBVVF9Nc2s7DQorDQorICAgIHJlZy0+UElOX0NORltwaW5fbnVtYmVyXSA9IGNuZiB8IChHUElPX1BJTl9DTkZfSU5QVVRfRGlzY29ubmVjdCA8PCBHUElPX1BJTl9DTkZfSU5QVVRfUG9zKTsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnX3NlbnNlX2lucHV0KHVpbnQzMl90ICAgICAgICAgICAgIHBpbl9udW1iZXIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9ncGlvX3Bpbl9wdWxsX3QgIHB1bGxfY29uZmlnLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfZ3Bpb19waW5fc2Vuc2VfdCBzZW5zZV9jb25maWcpDQorew0KKyAgICBucmZfZ3Bpb19jZmcoDQorICAgICAgICBwaW5fbnVtYmVyLA0KKyAgICAgICAgTlJGX0dQSU9fUElOX0RJUl9JTlBVVCwNCisgICAgICAgIE5SRl9HUElPX1BJTl9JTlBVVF9DT05ORUNULA0KKyAgICAgICAgcHVsbF9jb25maWcsDQorICAgICAgICBOUkZfR1BJT19QSU5fUzBTMSwNCisgICAgICAgIHNlbnNlX2NvbmZpZyk7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX2NmZ19zZW5zZV9zZXQodWludDMyX3QgcGluX251bWJlciwgbnJmX2dwaW9fcGluX3NlbnNlX3Qgc2Vuc2VfY29uZmlnKQ0KK3sNCisgICAgTlJGX0dQSU9fVHlwZSAqIHJlZyA9IG5yZl9ncGlvX3Bpbl9wb3J0X2RlY29kZSgmcGluX251bWJlcik7DQorDQorICAgIC8qbGludCAtZXs4NDV9IC8vIEEgemVybyBoYXMgYmVlbiBnaXZlbiBhcyByaWdodCBhcmd1bWVudCB0byBvcGVyYXRvciAnfCciICovDQorICAgIHJlZy0+UElOX0NORltwaW5fbnVtYmVyXSAmPSB+R1BJT19QSU5fQ05GX1NFTlNFX01zazsNCisgICAgcmVnLT5QSU5fQ05GW3Bpbl9udW1iZXJdIHw9IChzZW5zZV9jb25maWcgPDwgR1BJT19QSU5fQ05GX1NFTlNFX1Bvcyk7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3Bpbl9kaXJfc2V0KHVpbnQzMl90IHBpbl9udW1iZXIsIG5yZl9ncGlvX3Bpbl9kaXJfdCBkaXJlY3Rpb24pDQorew0KKyAgICBpZiAoZGlyZWN0aW9uID09IE5SRl9HUElPX1BJTl9ESVJfSU5QVVQpDQorICAgIHsNCisgICAgICAgIG5yZl9ncGlvX2NmZygNCisgICAgICAgICAgICBwaW5fbnVtYmVyLA0KKyAgICAgICAgICAgIE5SRl9HUElPX1BJTl9ESVJfSU5QVVQsDQorICAgICAgICAgICAgTlJGX0dQSU9fUElOX0lOUFVUX0NPTk5FQ1QsDQorICAgICAgICAgICAgTlJGX0dQSU9fUElOX05PUFVMTCwNCisgICAgICAgICAgICBOUkZfR1BJT19QSU5fUzBTMSwNCisgICAgICAgICAgICBOUkZfR1BJT19QSU5fTk9TRU5TRSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBOUkZfR1BJT19UeXBlICogcmVnID0gbnJmX2dwaW9fcGluX3BvcnRfZGVjb2RlKCZwaW5fbnVtYmVyKTsNCisgICAgICAgIHJlZy0+RElSU0VUID0gKDFVTCA8PCBwaW5fbnVtYmVyKTsNCisgICAgfQ0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19waW5fc2V0KHVpbnQzMl90IHBpbl9udW1iZXIpDQorew0KKyAgICBOUkZfR1BJT19UeXBlICogcmVnID0gbnJmX2dwaW9fcGluX3BvcnRfZGVjb2RlKCZwaW5fbnVtYmVyKTsNCisNCisgICAgbnJmX2dwaW9fcG9ydF9vdXRfc2V0KHJlZywgMVVMIDw8IHBpbl9udW1iZXIpOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19waW5fY2xlYXIodWludDMyX3QgcGluX251bWJlcikNCit7DQorICAgIE5SRl9HUElPX1R5cGUgKiByZWcgPSBucmZfZ3Bpb19waW5fcG9ydF9kZWNvZGUoJnBpbl9udW1iZXIpOw0KKw0KKyAgICBucmZfZ3Bpb19wb3J0X291dF9jbGVhcihyZWcsIDFVTCA8PCBwaW5fbnVtYmVyKTsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcGluX3RvZ2dsZSh1aW50MzJfdCBwaW5fbnVtYmVyKQ0KK3sNCisgICAgTlJGX0dQSU9fVHlwZSAqIHJlZyAgICAgICAgPSBucmZfZ3Bpb19waW5fcG9ydF9kZWNvZGUoJnBpbl9udW1iZXIpOw0KKyAgICB1aW50MzJfdCAgICAgICAgcGluc19zdGF0ZSA9IHJlZy0+T1VUOw0KKw0KKyAgICByZWctPk9VVFNFVCA9ICh+cGluc19zdGF0ZSAmICgxVUwgPDwgcGluX251bWJlcikpOw0KKyAgICByZWctPk9VVENMUiA9IChwaW5zX3N0YXRlICYgKDFVTCA8PCBwaW5fbnVtYmVyKSk7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3Bpbl93cml0ZSh1aW50MzJfdCBwaW5fbnVtYmVyLCB1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIGlmICh2YWx1ZSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBucmZfZ3Bpb19waW5fY2xlYXIocGluX251bWJlcik7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBucmZfZ3Bpb19waW5fc2V0KHBpbl9udW1iZXIpOw0KKyAgICB9DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb19waW5fcmVhZCh1aW50MzJfdCBwaW5fbnVtYmVyKQ0KK3sNCisgICAgTlJGX0dQSU9fVHlwZSAqIHJlZyA9IG5yZl9ncGlvX3Bpbl9wb3J0X2RlY29kZSgmcGluX251bWJlcik7DQorDQorICAgIHJldHVybiAoKG5yZl9ncGlvX3BvcnRfaW5fcmVhZChyZWcpID4+IHBpbl9udW1iZXIpICYgMVVMKTsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvX3Bpbl9vdXRfcmVhZCh1aW50MzJfdCBwaW5fbnVtYmVyKQ0KK3sNCisgICAgTlJGX0dQSU9fVHlwZSAqIHJlZyA9IG5yZl9ncGlvX3Bpbl9wb3J0X2RlY29kZSgmcGluX251bWJlcik7DQorDQorICAgIHJldHVybiAoKG5yZl9ncGlvX3BvcnRfb3V0X3JlYWQocmVnKSA+PiBwaW5fbnVtYmVyKSAmIDFVTCk7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSBucmZfZ3Bpb19waW5fc2Vuc2VfdCBucmZfZ3Bpb19waW5fc2Vuc2VfZ2V0KHVpbnQzMl90IHBpbl9udW1iZXIpDQorew0KKyAgICBOUkZfR1BJT19UeXBlICogcmVnID0gbnJmX2dwaW9fcGluX3BvcnRfZGVjb2RlKCZwaW5fbnVtYmVyKTsNCisNCisgICAgcmV0dXJuIChucmZfZ3Bpb19waW5fc2Vuc2VfdCkoKHJlZy0+UElOX0NORltwaW5fbnVtYmVyXSAmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1BJTl9DTkZfU0VOU0VfTXNrKSA+PiBHUElPX1BJTl9DTkZfU0VOU0VfUG9zKTsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcG9ydF9kaXJfb3V0cHV0X3NldChOUkZfR1BJT19UeXBlICogcF9yZWcsIHVpbnQzMl90IG91dF9tYXNrKQ0KK3sNCisgICAgcF9yZWctPkRJUlNFVCA9IG91dF9tYXNrOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0X2Rpcl9pbnB1dF9zZXQoTlJGX0dQSU9fVHlwZSAqIHBfcmVnLCB1aW50MzJfdCBpbl9tYXNrKQ0KK3sNCisgICAgcF9yZWctPkRJUkNMUiA9IGluX21hc2s7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3BvcnRfZGlyX3dyaXRlKE5SRl9HUElPX1R5cGUgKiBwX3JlZywgdWludDMyX3QgdmFsdWUpDQorew0KKyAgICBwX3JlZy0+RElSID0gdmFsdWU7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb19wb3J0X2Rpcl9yZWFkKE5SRl9HUElPX1R5cGUgY29uc3QgKiBwX3JlZykNCit7DQorICAgIHJldHVybiBwX3JlZy0+RElSOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW9fcG9ydF9pbl9yZWFkKE5SRl9HUElPX1R5cGUgY29uc3QgKiBwX3JlZykNCit7DQorICAgIHJldHVybiBwX3JlZy0+SU47DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb19wb3J0X291dF9yZWFkKE5SRl9HUElPX1R5cGUgY29uc3QgKiBwX3JlZykNCit7DQorICAgIHJldHVybiBwX3JlZy0+T1VUOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0X291dF93cml0ZShOUkZfR1BJT19UeXBlICogcF9yZWcsIHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgcF9yZWctPk9VVCA9IHZhbHVlOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0X291dF9zZXQoTlJGX0dQSU9fVHlwZSAqIHBfcmVnLCB1aW50MzJfdCBzZXRfbWFzaykNCit7DQorICAgIHBfcmVnLT5PVVRTRVQgPSBzZXRfbWFzazsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcG9ydF9vdXRfY2xlYXIoTlJGX0dQSU9fVHlwZSAqIHBfcmVnLCB1aW50MzJfdCBjbHJfbWFzaykNCit7DQorICAgIHBfcmVnLT5PVVRDTFIgPSBjbHJfbWFzazsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcG9ydHNfcmVhZCh1aW50MzJfdCBzdGFydF9wb3J0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90ICogcF9tYXNrcykNCit7DQorICAgIE5SRl9HUElPX1R5cGUgKiBncGlvX3JlZ3NbR1BJT19DT1VOVF0gPSBHUElPX1JFR19MSVNUOw0KKw0KKyAgICBBU1NFUlQoc3RhcnRfcG9ydCArIGxlbmd0aCA8PSBHUElPX0NPVU5UKTsNCisgICAgdWludDMyX3QgaTsNCisNCisgICAgZm9yIChpID0gc3RhcnRfcG9ydDsgaSA8IChzdGFydF9wb3J0ICsgbGVuZ3RoKTsgaSsrKQ0KKyAgICB7DQorICAgICAgICAqcF9tYXNrcyA9IG5yZl9ncGlvX3BvcnRfaW5fcmVhZChncGlvX3JlZ3NbaV0pOw0KKyAgICAgICAgcF9tYXNrcysrOw0KKyAgICB9DQorfQ0KKw0KKw0KKyNpZmRlZiBHUElPX0RFVEVDVE1PREVfREVURUNUTU9ERV9MREVURUNUDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fbGF0Y2hlc19yZWFkKHVpbnQzMl90IHN0YXJ0X3BvcnQsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgKiBwX21hc2tzKQ0KK3sNCisgICAgTlJGX0dQSU9fVHlwZSAqIGdwaW9fcmVnc1tHUElPX0NPVU5UXSA9IEdQSU9fUkVHX0xJU1Q7DQorICAgIHVpbnQzMl90ICAgICAgICBpOw0KKw0KKyAgICBmb3IgKGkgPSBzdGFydF9wb3J0OyBpIDwgKHN0YXJ0X3BvcnQgKyBsZW5ndGgpOyBpKyspDQorICAgIHsNCisgICAgICAgICpwX21hc2tzID0gZ3Bpb19yZWdzW2ldLT5MQVRDSDsNCisgICAgICAgIHBfbWFza3MrKzsNCisgICAgfQ0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW9fcGluX2xhdGNoX2dldCh1aW50MzJfdCBwaW5fbnVtYmVyKQ0KK3sNCisgICAgTlJGX0dQSU9fVHlwZSAqIHJlZyA9IG5yZl9ncGlvX3Bpbl9wb3J0X2RlY29kZSgmcGluX251bWJlcik7DQorDQorICAgIHJldHVybiAocmVnLT5MQVRDSCAmICgxIDw8IHBpbl9udW1iZXIpKSA/IDEgOiAwOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19waW5fbGF0Y2hfY2xlYXIodWludDMyX3QgcGluX251bWJlcikNCit7DQorICAgIE5SRl9HUElPX1R5cGUgKiByZWcgPSBucmZfZ3Bpb19waW5fcG9ydF9kZWNvZGUoJnBpbl9udW1iZXIpOw0KKw0KKyAgICByZWctPkxBVENIID0gKDEgPDwgcGluX251bWJlcik7DQorfQ0KKw0KKw0KKyNlbmRpZg0KKyNlbmRpZiAvLyBTVVBQUkVTU19JTkxJTkVfSU1QTEVNRU5UQVRJT04NCisNCisvKiogQH0gKi8NCisNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2dwaW90ZS5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2dwaW90ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMjNmNDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfZ3Bpb3RlLmgKQEAgLTAsMCArMSw0MjEgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX0dQSU9URV9IX18NCisjZGVmaW5lIE5SRl9HUElPVEVfSF9fDQorDQorI2luY2x1ZGUgIm5yZl9wZXJpcGhlcmFscy5oIg0KKyNpbmNsdWRlICJucmYuaCINCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKyNpbmNsdWRlIDxzdGRib29sLmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2lmZGVmIEdQSU9URV9DT05GSUdfUE9SVF9Nc2sNCisjZGVmaW5lIEdQSU9URV9DT05GSUdfUE9SVF9QSU5fTXNrIChHUElPVEVfQ09ORklHX1BPUlRfTXNrIHwgR1BJT1RFX0NPTkZJR19QU0VMX01zaykNCisjZWxzZQ0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19QT1JUX1BJTl9Nc2sgR1BJT1RFX0NPTkZJR19QU0VMX01zaw0KKyNlbmRpZg0KKy8qKg0KKyogQGRlZmdyb3VwIG5yZl9ncGlvdGVfYWJzIEdQSU9URSBhYnN0cmFjdGlvbg0KKyogQHsNCisqIEBpbmdyb3VwIG5yZl9ncGlvdGUNCisqIEBicmllZiBHUElPVEUgYWJzdHJhY3Rpb24gZm9yIGNvbmZpZ3VyYXRpb24gb2YgY2hhbm5lbHMuDQorKi8NCisNCisgLyoqDQorICogQGVudW0gbnJmX2dwaW90ZV9wb2xhcml0eV90DQorICogQGJyaWVmIFBvbGFyaXR5IGZvciB0aGUgR1BJT1RFIGNoYW5uZWwuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgTlJGX0dQSU9URV9QT0xBUklUWV9MT1RPSEkgPSBHUElPVEVfQ09ORklHX1BPTEFSSVRZX0xvVG9IaSwgICAgICAgLy8vPCAgTG93IHRvIGhpZ2guDQorICBOUkZfR1BJT1RFX1BPTEFSSVRZX0hJVE9MTyA9IEdQSU9URV9DT05GSUdfUE9MQVJJVFlfSGlUb0xvLCAgICAgICAvLy88ICBIaWdoIHRvIGxvdy4NCisgIE5SRl9HUElPVEVfUE9MQVJJVFlfVE9HR0xFID0gR1BJT1RFX0NPTkZJR19QT0xBUklUWV9Ub2dnbGUgICAgICAgIC8vLzwgIFRvZ2dsZS4NCit9IG5yZl9ncGlvdGVfcG9sYXJpdHlfdDsNCisNCisNCisgLyoqDQorICogQGVudW0gbnJmX2dwaW90ZV9vdXRpbml0X3QNCisgKiBAYnJpZWYgSW5pdGlhbCBvdXRwdXQgdmFsdWUgZm9yIHRoZSBHUElPVEUgY2hhbm5lbC4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICBOUkZfR1BJT1RFX0lOSVRJQUxfVkFMVUVfTE9XICA9IEdQSU9URV9DT05GSUdfT1VUSU5JVF9Mb3csICAgICAgIC8vLzwgIExvdyB0byBoaWdoLg0KKyAgTlJGX0dQSU9URV9JTklUSUFMX1ZBTFVFX0hJR0ggPSBHUElPVEVfQ09ORklHX09VVElOSVRfSGlnaCAgICAgICAvLy88ICBIaWdoIHRvIGxvdy4NCit9IG5yZl9ncGlvdGVfb3V0aW5pdF90Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBUYXNrcy4NCisgKi8NCit0eXBlZGVmIGVudW0gLypsaW50IC1zYXZlIC1lMzAgLWVzeW0oNjI4LF9fSU5UQUREUl9fKSAqLw0KK3sNCisgICAgTlJGX0dQSU9URV9UQVNLU19PVVRfMCAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX09VVFswXSksIC8qKjwgT3V0IHRhc2sgMC4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX09VVF8xICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfT1VUWzFdKSwgLyoqPCBPdXQgdGFzayAxLiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfT1VUXzIgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19PVVRbMl0pLCAvKio8IE91dCB0YXNrIDIuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19PVVRfMyAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX09VVFszXSksIC8qKjwgT3V0IHRhc2sgMy4qLw0KKyNpZiAoR1BJT1RFX0NIX05VTSA+IDQpIHx8IGRlZmluZWQoX19TREtfRE9YWUdFTl9fKQ0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX09VVF80ICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfT1VUWzRdKSwgLyoqPCBPdXQgdGFzayA0LiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfT1VUXzUgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19PVVRbNV0pLCAvKio8IE91dCB0YXNrIDUuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19PVVRfNiAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX09VVFs2XSksIC8qKjwgT3V0IHRhc2sgNi4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX09VVF83ICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfT1VUWzddKSwgLyoqPCBPdXQgdGFzayA3LiovDQorI2VuZGlmDQorI2lmIGRlZmluZWQoR1BJT1RFX0ZFQVRVUkVfU0VUX1BSRVNFTlQpIHx8IGRlZmluZWQoX19TREtfRE9YWUdFTl9fKQ0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX1NFVF8wICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfU0VUWzBdKSwgLyoqPCBTZXQgdGFzayAwLiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfU0VUXzEgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19TRVRbMV0pLCAvKio8IFNldCB0YXNrIDEuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19TRVRfMiAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX1NFVFsyXSksIC8qKjwgU2V0IHRhc2sgMi4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX1NFVF8zICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfU0VUWzNdKSwgLyoqPCBTZXQgdGFzayAzLiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfU0VUXzQgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19TRVRbNF0pLCAvKio8IFNldCB0YXNrIDQuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19TRVRfNSAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX1NFVFs1XSksIC8qKjwgU2V0IHRhc2sgNS4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX1NFVF82ICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfU0VUWzZdKSwgLyoqPCBTZXQgdGFzayA2LiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfU0VUXzcgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19TRVRbN10pLCAvKio8IFNldCB0YXNrIDcuKi8NCisjZW5kaWYNCisjaWYgZGVmaW5lZChHUElPVEVfRkVBVFVSRV9DTFJfUFJFU0VOVCkgfHwgZGVmaW5lZChfX1NES19ET1hZR0VOX18pDQorICAgIE5SRl9HUElPVEVfVEFTS1NfQ0xSXzAgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19DTFJbMF0pLCAvKio8IENsZWFyIHRhc2sgMC4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX0NMUl8xICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfQ0xSWzFdKSwgLyoqPCBDbGVhciB0YXNrIDEuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19DTFJfMiAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX0NMUlsyXSksIC8qKjwgQ2xlYXIgdGFzayAyLiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfQ0xSXzMgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19DTFJbM10pLCAvKio8IENsZWFyIHRhc2sgMy4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX0NMUl80ICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfQ0xSWzRdKSwgLyoqPCBDbGVhciB0YXNrIDQuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19DTFJfNSAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX0NMUls1XSksIC8qKjwgQ2xlYXIgdGFzayA1LiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfQ0xSXzYgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19DTFJbNl0pLCAvKio8IENsZWFyIHRhc2sgNi4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX0NMUl83ICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfQ0xSWzddKSwgLyoqPCBDbGVhciB0YXNrIDcuKi8NCisjZW5kaWYNCisgICAgLypsaW50IC1yZXN0b3JlKi8NCit9IG5yZl9ncGlvdGVfdGFza3NfdDsNCisNCisvKioNCisgKiBAYnJpZWYgRXZlbnRzLg0KKyAqLw0KK3R5cGVkZWYgZW51bSAvKmxpbnQgLXNhdmUgLWUzMCAtZXN5bSg2MjgsX19JTlRBRERSX18pICovDQorew0KKyAgICBOUkZfR1BJT1RFX0VWRU5UU19JTl8wICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgRVZFTlRTX0lOWzBdKSwgLyoqPCBJbiBldmVudCAwLiovDQorICAgIE5SRl9HUElPVEVfRVZFTlRTX0lOXzEgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBFVkVOVFNfSU5bMV0pLCAvKio8IEluIGV2ZW50IDEuKi8NCisgICAgTlJGX0dQSU9URV9FVkVOVFNfSU5fMiAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIEVWRU5UU19JTlsyXSksIC8qKjwgSW4gZXZlbnQgMi4qLw0KKyAgICBOUkZfR1BJT1RFX0VWRU5UU19JTl8zICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgRVZFTlRTX0lOWzNdKSwgLyoqPCBJbiBldmVudCAzLiovDQorI2lmIChHUElPVEVfQ0hfTlVNID4gNCkgfHwgZGVmaW5lZChfX1NES19ET1hZR0VOX18pDQorICAgIE5SRl9HUElPVEVfRVZFTlRTX0lOXzQgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBFVkVOVFNfSU5bNF0pLCAvKio8IEluIGV2ZW50IDQuKi8NCisgICAgTlJGX0dQSU9URV9FVkVOVFNfSU5fNSAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIEVWRU5UU19JTls1XSksIC8qKjwgSW4gZXZlbnQgNS4qLw0KKyAgICBOUkZfR1BJT1RFX0VWRU5UU19JTl82ICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgRVZFTlRTX0lOWzZdKSwgLyoqPCBJbiBldmVudCA2LiovDQorICAgIE5SRl9HUElPVEVfRVZFTlRTX0lOXzcgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBFVkVOVFNfSU5bN10pLCAvKio8IEluIGV2ZW50IDcuKi8NCisjZW5kaWYNCisgICAgTlJGX0dQSU9URV9FVkVOVFNfUE9SVCAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIEVWRU5UU19QT1JUKSwgLyoqPCAgUG9ydCBldmVudC4qLw0KKyAgICAvKmxpbnQgLXJlc3RvcmUqLw0KK30gbnJmX2dwaW90ZV9ldmVudHNfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfZ3Bpb3RlX2ludF90DQorICogQGJyaWVmIEdQSU9URSBpbnRlcnJ1cHRzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX0dQSU9URV9JTlRfSU4wX01BU0sgID0gR1BJT1RFX0lOVEVOU0VUX0lOMF9Nc2ssICAvKio8IEdQSU9URSBpbnRlcnJ1cHQgZnJvbSBJTjAuICovDQorICAgIE5SRl9HUElPVEVfSU5UX0lOMV9NQVNLICA9IEdQSU9URV9JTlRFTlNFVF9JTjFfTXNrLCAgLyoqPCBHUElPVEUgaW50ZXJydXB0IGZyb20gSU4xLiAqLw0KKyAgICBOUkZfR1BJT1RFX0lOVF9JTjJfTUFTSyAgPSBHUElPVEVfSU5URU5TRVRfSU4yX01zaywgIC8qKjwgR1BJT1RFIGludGVycnVwdCBmcm9tIElOMi4gKi8NCisgICAgTlJGX0dQSU9URV9JTlRfSU4zX01BU0sgID0gR1BJT1RFX0lOVEVOU0VUX0lOM19Nc2ssICAvKio8IEdQSU9URSBpbnRlcnJ1cHQgZnJvbSBJTjMuICovDQorI2lmIChHUElPVEVfQ0hfTlVNID4gNCkgfHwgZGVmaW5lZChfX1NES19ET1hZR0VOX18pDQorICAgIE5SRl9HUElPVEVfSU5UX0lONF9NQVNLICA9IEdQSU9URV9JTlRFTlNFVF9JTjRfTXNrLCAgLyoqPCBHUElPVEUgaW50ZXJydXB0IGZyb20gSU40LiAqLw0KKyAgICBOUkZfR1BJT1RFX0lOVF9JTjVfTUFTSyAgPSBHUElPVEVfSU5URU5TRVRfSU41X01zaywgIC8qKjwgR1BJT1RFIGludGVycnVwdCBmcm9tIElONS4gKi8NCisgICAgTlJGX0dQSU9URV9JTlRfSU42X01BU0sgID0gR1BJT1RFX0lOVEVOU0VUX0lONl9Nc2ssICAvKio8IEdQSU9URSBpbnRlcnJ1cHQgZnJvbSBJTjYuICovDQorICAgIE5SRl9HUElPVEVfSU5UX0lON19NQVNLICA9IEdQSU9URV9JTlRFTlNFVF9JTjdfTXNrLCAgLyoqPCBHUElPVEUgaW50ZXJydXB0IGZyb20gSU43LiAqLw0KKyNlbmRpZg0KKyAgICBOUkZfR1BJT1RFX0lOVF9QT1JUX01BU0sgPSAoaW50KUdQSU9URV9JTlRFTlNFVF9QT1JUX01zaywgLyoqPCBHUElPVEUgaW50ZXJydXB0IGZyb20gUE9SVCBldmVudC4gKi8NCit9IG5yZl9ncGlvdGVfaW50X3Q7DQorDQorI2RlZmluZSBOUkZfR1BJT1RFX0lOVF9JTl9NQVNLIChOUkZfR1BJT1RFX0lOVF9JTjBfTUFTSyB8IE5SRl9HUElPVEVfSU5UX0lOMV9NQVNLIHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkZfR1BJT1RFX0lOVF9JTjJfTUFTSyB8IE5SRl9HUElPVEVfSU5UX0lOM19NQVNLKQ0KKyNpZiAoR1BJT1RFX0NIX05VTSA+IDQpDQorI3VuZGVmIE5SRl9HUElPVEVfSU5UX0lOX01BU0sNCisjZGVmaW5lIE5SRl9HUElPVEVfSU5UX0lOX01BU0sgKE5SRl9HUElPVEVfSU5UX0lOMF9NQVNLIHwgTlJGX0dQSU9URV9JTlRfSU4xX01BU0sgfFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SRl9HUElPVEVfSU5UX0lOMl9NQVNLIHwgTlJGX0dQSU9URV9JTlRfSU4zX01BU0sgfFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SRl9HUElPVEVfSU5UX0lONF9NQVNLIHwgTlJGX0dQSU9URV9JTlRfSU41X01BU0sgfFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SRl9HUElPVEVfSU5UX0lONl9NQVNLIHwgTlJGX0dQSU9URV9JTlRfSU43X01BU0spDQorI2VuZGlmDQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBhY3RpdmF0aW5nIGEgc3BlY2lmaWMgR1BJT1RFIHRhc2suDQorICoNCisgKiBAcGFyYW1baW5dICB0YXNrIFRhc2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV90YXNrX3NldChucmZfZ3Bpb3RlX3Rhc2tzX3QgdGFzayk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgR1BJT1RFIHRhc2suDQorICoNCisgKiBAcGFyYW1baW5dIHRhc2sgVGFzay4NCisgKg0KKyAqIEByZXR1cm5zIEFkZHJlc3MuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvdGVfdGFza19hZGRyX2dldChucmZfZ3Bpb3RlX3Rhc2tzX3QgdGFzayk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIEdQSU9URSBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZXZlbnQgRXZlbnQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX2dwaW90ZV9ldmVudF9pc19zZXQobnJmX2dwaW90ZV9ldmVudHNfdCBldmVudCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjbGVhcmluZyBhIHNwZWNpZmljIEdQSU9URSBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZXZlbnQgRXZlbnQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV9ldmVudF9jbGVhcihucmZfZ3Bpb3RlX2V2ZW50c190IGV2ZW50KTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgdGhlIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBHUElPVEUgZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dIGV2ZW50IEV2ZW50Lg0KKyAqDQorICogQHJldHVybiBBZGRyZXNzDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvdGVfZXZlbnRfYWRkcl9nZXQobnJmX2dwaW90ZV9ldmVudHNfdCBldmVudCk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBlbmFibGluZyBpbnRlcnJ1cHRzLg0KKyAqDQorICogQHBhcmFtW2luXSAgbWFzayAgICAgICAgICBJbnRlcnJ1cHQgbWFzayB0byBiZSBlbmFibGVkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfaW50X2VuYWJsZSh1aW50MzJfdCBtYXNrKTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBpbnRlcnJ1cHRzLg0KKyAqDQorICogQHBhcmFtW2luXSAgbWFzayAgICAgICAgICBJbnRlcnJ1cHQgbWFzayB0byBiZSBkaXNhYmxlZC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX2ludF9kaXNhYmxlKHVpbnQzMl90IG1hc2spOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIG1hc2sgICAgICAgICAgTWFzayBvZiBpbnRlcnJ1cHQgZmxhZ3MgdG8gY2hlY2suDQorICoNCisgKiBAcmV0dXJuICAgICAgICAgICAgICAgICAgIE1hc2sgd2l0aCBlbmFibGVkIGludGVycnVwdHMuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvdGVfaW50X2lzX2VuYWJsZWQodWludDMyX3QgbWFzayk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBlbmFibGluZyBhIEdQSU9URSBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGlkeCAgICAgICAgVGFzay1FdmVudCBpbmRleC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX2V2ZW50X2VuYWJsZSh1aW50MzJfdCBpZHgpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIGEgR1BJT1RFIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSAgaWR4ICAgICAgICBUYXNrLUV2ZW50IGluZGV4Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfZXZlbnRfZGlzYWJsZSh1aW50MzJfdCBpZHgpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgYSBHUElPVEUgZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dICBpZHggICAgICAgIFRhc2stRXZlbnQgaW5kZXguDQorICogQHBhcmFtW2luXSAgcGluICAgICAgICBQaW4gYXNzb2NpYXRlZCB3aXRoIGV2ZW50Lg0KKyAqIEBwYXJhbVtpbl0gIHBvbGFyaXR5ICAgVHJhbnNpdGlvbiB0aGF0IHNob3VsZCBnZW5lcmF0ZSBhbiBldmVudC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX2V2ZW50X2NvbmZpZ3VyZSh1aW50MzJfdCBpZHgsIHVpbnQzMl90IHBpbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfZ3Bpb3RlX3BvbGFyaXR5X3QgcG9sYXJpdHkpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyB0aGUgcGluIGFzc29jaWF0ZWQgd2l0aCBhIEdQSU9URSBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGlkeCAgICAgICAgVGFzay1FdmVudCBpbmRleC4NCisgKg0KKyAqIEByZXR1cm4gUGluIG51bWJlci4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW90ZV9ldmVudF9waW5fZ2V0KHVpbnQzMl90IGlkeCk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBwb2xhcml0eSBhc3NvY2lhdGVkIHdpdGggYSBHUElPVEUgZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dICBpZHggICAgICAgIFRhc2stRXZlbnQgaW5kZXguDQorICoNCisgKiBAcmV0dXJuIFBvbGFyaXR5Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBucmZfZ3Bpb3RlX3BvbGFyaXR5X3QgbnJmX2dwaW90ZV9ldmVudF9wb2xhcml0eV9nZXQodWludDMyX3QgaWR4KTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGVuYWJsaW5nIGEgR1BJT1RFIHRhc2suDQorICoNCisgKiBAcGFyYW1baW5dICBpZHggICAgICAgIFRhc2stRXZlbnQgaW5kZXguDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV90YXNrX2VuYWJsZSh1aW50MzJfdCBpZHgpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIGEgR1BJT1RFIHRhc2suDQorICoNCisgKiBAcGFyYW1baW5dICBpZHggICAgICAgIFRhc2stRXZlbnQgaW5kZXguDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV90YXNrX2Rpc2FibGUodWludDMyX3QgaWR4KTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGNvbmZpZ3VyaW5nIGEgR1BJT1RFIHRhc2suDQorICogQG5vdGUgIEZ1bmN0aW9uIGlzIG5vdCBjb25maWd1cmluZyBtb2RlIGZpZWxkIHNvIHRhc2sgaXMgZGlzYWJsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuDQorICoNCisgKiBAcGFyYW1baW5dICBpZHggICAgICAgIFRhc2stRXZlbnQgaW5kZXguDQorICogQHBhcmFtW2luXSAgcGluICAgICAgICBQaW4gYXNzb2NpYXRlZCB3aXRoIGV2ZW50Lg0KKyAqIEBwYXJhbVtpbl0gIHBvbGFyaXR5ICAgVHJhbnNpdGlvbiB0aGF0IHNob3VsZCBnZW5lcmF0ZSBhbiBldmVudC4NCisgKiBAcGFyYW1baW5dICBpbml0X3ZhbCAgIEluaXRpYWwgdmFsdWUgb2YgdGhlIHBpbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX3Rhc2tfY29uZmlndXJlKHVpbnQzMl90IGlkeCwgdWludDMyX3QgcGluLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX2dwaW90ZV9wb2xhcml0eV90IHBvbGFyaXR5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX2dwaW90ZV9vdXRpbml0X3QgIGluaXRfdmFsKTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGZvcmNpbmcgYSBzcGVjaWZpYyBzdGF0ZSBvbiB0aGUgcGluIGNvbm5lY3RlZCB0byBHUElPVEUuDQorICoNCisgKiBAcGFyYW1baW5dICBpZHggICAgICAgIFRhc2stRXZlbnQgaW5kZXguDQorICogQHBhcmFtW2luXSAgaW5pdF92YWwgICBQaW4gc3RhdGUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV90YXNrX2ZvcmNlKHVpbnQzMl90IGlkeCwgbnJmX2dwaW90ZV9vdXRpbml0X3QgaW5pdF92YWwpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgcmVzZXR0aW5nIGEgR1BJT1RFIHRhc2sgZXZlbnQgY29uZmlndXJhdGlvbiB0byB0aGUgZGVmYXVsdCBzdGF0ZS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGlkeCAgICAgICAgVGFzay1FdmVudCBpbmRleC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX3RlX2RlZmF1bHQodWludDMyX3QgaWR4KTsNCisNCisjaWZuZGVmIFNVUFBSRVNTX0lOTElORV9JTVBMRU1FTlRBVElPTg0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfdGFza19zZXQobnJmX2dwaW90ZV90YXNrc190IHRhc2spDQorew0KKyAgICAqKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KU5SRl9HUElPVEUgKyB0YXNrKSA9IDB4MVVMOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW90ZV90YXNrX2FkZHJfZ2V0KG5yZl9ncGlvdGVfdGFza3NfdCB0YXNrKQ0KK3sNCisgICAgcmV0dXJuICgodWludDMyX3QpTlJGX0dQSU9URSArIHRhc2spOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBucmZfZ3Bpb3RlX2V2ZW50X2lzX3NldChucmZfZ3Bpb3RlX2V2ZW50c190IGV2ZW50KQ0KK3sNCisgICAgcmV0dXJuICgqKHVpbnQzMl90ICopbnJmX2dwaW90ZV9ldmVudF9hZGRyX2dldChldmVudCkgPT0gMHgxVUwpID8gdHJ1ZSA6IGZhbHNlOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX2V2ZW50X2NsZWFyKG5yZl9ncGlvdGVfZXZlbnRzX3QgZXZlbnQpDQorew0KKyAgICAqKHVpbnQzMl90ICopbnJmX2dwaW90ZV9ldmVudF9hZGRyX2dldChldmVudCkgPSAwOw0KKyNpZiBfX0NPUlRFWF9NID09IDB4MDQNCisgICAgdm9sYXRpbGUgdWludDMyX3QgZHVtbXkgPSAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKW5yZl9ncGlvdGVfZXZlbnRfYWRkcl9nZXQoZXZlbnQpKTsNCisgICAgKHZvaWQpZHVtbXk7DQorI2VuZGlmDQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb3RlX2V2ZW50X2FkZHJfZ2V0KG5yZl9ncGlvdGVfZXZlbnRzX3QgZXZlbnQpDQorew0KKyAgICByZXR1cm4gKCh1aW50MzJfdClOUkZfR1BJT1RFICsgZXZlbnQpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX2ludF9lbmFibGUodWludDMyX3QgbWFzaykNCit7DQorICAgIE5SRl9HUElPVEUtPklOVEVOU0VUID0gbWFzazsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV9pbnRfZGlzYWJsZSh1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgTlJGX0dQSU9URS0+SU5URU5DTFIgPSBtYXNrOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW90ZV9pbnRfaXNfZW5hYmxlZCh1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgcmV0dXJuIChOUkZfR1BJT1RFLT5JTlRFTlNFVCAmIG1hc2spOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX2V2ZW50X2VuYWJsZSh1aW50MzJfdCBpZHgpDQorew0KKyAgIE5SRl9HUElPVEUtPkNPTkZJR1tpZHhdIHw9IEdQSU9URV9DT05GSUdfTU9ERV9FdmVudDsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV9ldmVudF9kaXNhYmxlKHVpbnQzMl90IGlkeCkNCit7DQorICAgTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gJj0gfkdQSU9URV9DT05GSUdfTU9ERV9FdmVudDsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV9ldmVudF9jb25maWd1cmUodWludDMyX3QgaWR4LCB1aW50MzJfdCBwaW4sIG5yZl9ncGlvdGVfcG9sYXJpdHlfdCBwb2xhcml0eSkNCit7DQorICBOUkZfR1BJT1RFLT5DT05GSUdbaWR4XSAmPSB+KEdQSU9URV9DT05GSUdfUE9SVF9QSU5fTXNrIHwgR1BJT1RFX0NPTkZJR19QT0xBUklUWV9Nc2spOw0KKyAgTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gfD0gKChwaW4gPDwgR1BJT1RFX0NPTkZJR19QU0VMX1BvcykgJiBHUElPVEVfQ09ORklHX1BPUlRfUElOX01zaykgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocG9sYXJpdHkgPDwgR1BJT1RFX0NPTkZJR19QT0xBUklUWV9Qb3MpICYgR1BJT1RFX0NPTkZJR19QT0xBUklUWV9Nc2spOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW90ZV9ldmVudF9waW5fZ2V0KHVpbnQzMl90IGlkeCkNCit7DQorICAgIHJldHVybiAoKE5SRl9HUElPVEUtPkNPTkZJR1tpZHhdICYgR1BJT1RFX0NPTkZJR19QT1JUX1BJTl9Nc2spID4+IEdQSU9URV9DT05GSUdfUFNFTF9Qb3MpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgbnJmX2dwaW90ZV9wb2xhcml0eV90IG5yZl9ncGlvdGVfZXZlbnRfcG9sYXJpdHlfZ2V0KHVpbnQzMl90IGlkeCkNCit7DQorICAgIHJldHVybiAobnJmX2dwaW90ZV9wb2xhcml0eV90KSgoTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gJiBHUElPVEVfQ09ORklHX1BPTEFSSVRZX01zaykgPj4gR1BJT1RFX0NPTkZJR19QT0xBUklUWV9Qb3MpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX3Rhc2tfZW5hYmxlKHVpbnQzMl90IGlkeCkNCit7DQorICAgIHVpbnQzMl90IGZpbmFsX2NvbmZpZyA9IE5SRl9HUElPVEUtPkNPTkZJR1tpZHhdIHwgR1BJT1RFX0NPTkZJR19NT0RFX1Rhc2s7DQorI2lmZGVmIE5SRjUxDQorICAgIC8qIFdvcmthcm91bmQgZm9yIHRoZSBPVVRJTklUIFBBTi4gV2hlbiBucmZfZ3Bpb3RlX3Rhc2tfY29uZmlnKCkgaXMgY2FsbGVkIGEgZ2xpdGNoIGhhcHBlbnMNCisgICAgb24gdGhlIEdQSU8gaWYgdGhlIEdQSU8gaW4gcXVlc3Rpb24gaXMgYWxyZWFkeSBhc3NpZ25lZCB0byBHUElPVEUgYW5kIHRoZSBwaW4gaXMgaW4gdGhlDQorICAgIGNvcnJlY3Qgc3RhdGUgaW4gR1BJT1RFIGJ1dCBub3QgaW4gdGhlIE9VVCByZWdpc3Rlci4gKi8NCisgICAgLyogQ29uZmlndXJlIGNoYW5uZWwgdG8gbm90IGV4aXN0aW5nLCBub3QgY29ubmVjdGVkIHRvIHRoZSBwaW4sIGFuZCBjb25maWd1cmUgYXMgYSB0YXNrcyB0aGF0IHdpbGwgc2V0IGl0IHRvIHByb3BlciBsZXZlbCAqLw0KKyAgICBOUkZfR1BJT1RFLT5DT05GSUdbaWR4XSA9IGZpbmFsX2NvbmZpZyB8ICgoKDMxKSA8PCBHUElPVEVfQ09ORklHX1BTRUxfUG9zKSAmIEdQSU9URV9DT05GSUdfUE9SVF9QSU5fTXNrKTsNCisgICAgX19OT1AoKTsNCisgICAgX19OT1AoKTsNCisgICAgX19OT1AoKTsNCisjZW5kaWYNCisgICAgTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gPSBmaW5hbF9jb25maWc7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfdGFza19kaXNhYmxlKHVpbnQzMl90IGlkeCkNCit7DQorICAgIE5SRl9HUElPVEUtPkNPTkZJR1tpZHhdICY9IH5HUElPVEVfQ09ORklHX01PREVfVGFzazsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV90YXNrX2NvbmZpZ3VyZSh1aW50MzJfdCBpZHgsIHVpbnQzMl90IHBpbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfZ3Bpb3RlX3BvbGFyaXR5X3QgcG9sYXJpdHksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX2dwaW90ZV9vdXRpbml0X3QgIGluaXRfdmFsKQ0KK3sNCisgIE5SRl9HUElPVEUtPkNPTkZJR1tpZHhdICY9IH4oR1BJT1RFX0NPTkZJR19QT1JUX1BJTl9Nc2sgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPVEVfQ09ORklHX1BPTEFSSVRZX01zayB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9URV9DT05GSUdfT1VUSU5JVF9Nc2spOw0KKw0KKyAgTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gfD0gKChwaW4gPDwgR1BJT1RFX0NPTkZJR19QU0VMX1BvcykgJiBHUElPVEVfQ09ORklHX1BPUlRfUElOX01zaykgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwb2xhcml0eSA8PCBHUElPVEVfQ09ORklHX1BPTEFSSVRZX1BvcykgJiBHUElPVEVfQ09ORklHX1BPTEFSSVRZX01zaykgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbml0X3ZhbCA8PCBHUElPVEVfQ09ORklHX09VVElOSVRfUG9zKSAmIEdQSU9URV9DT05GSUdfT1VUSU5JVF9Nc2spOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX3Rhc2tfZm9yY2UodWludDMyX3QgaWR4LCBucmZfZ3Bpb3RlX291dGluaXRfdCBpbml0X3ZhbCkNCit7DQorICAgIE5SRl9HUElPVEUtPkNPTkZJR1tpZHhdID0gKE5SRl9HUElPVEUtPkNPTkZJR1tpZHhdICYgfkdQSU9URV9DT05GSUdfT1VUSU5JVF9Nc2spDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGluaXRfdmFsIDw8IEdQSU9URV9DT05GSUdfT1VUSU5JVF9Qb3MpICYgR1BJT1RFX0NPTkZJR19PVVRJTklUX01zayk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfdGVfZGVmYXVsdCh1aW50MzJfdCBpZHgpDQorew0KKyAgICBOUkZfR1BJT1RFLT5DT05GSUdbaWR4XSA9IDA7DQorfQ0KKyNlbmRpZiAvL1NVUFBSRVNTX0lOTElORV9JTVBMRU1FTlRBVElPTg0KKy8qKiBAfSAqLw0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfbnZtYy5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX252bWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmQ3NTc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX252bWMuYwpAQCAtMCwwICsxLDE0NyBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorLyoqDQorICpAZmlsZQ0KKyAqQGJyaWVmIE5NVkMgZHJpdmVyIGltcGxlbWVudGF0aW9uDQorICovDQorDQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCisjaW5jbHVkZSAibnJmLmgiDQorI2luY2x1ZGUgIm5yZl9udm1jLmgiDQorDQorDQordm9pZCBucmZfbnZtY19wYWdlX2VyYXNlKHVpbnQzMl90IGFkZHJlc3MpDQorew0KKyAgICAvLyBFbmFibGUgZXJhc2UuDQorICAgIE5SRl9OVk1DLT5DT05GSUcgPSBOVk1DX0NPTkZJR19XRU5fRWVuOw0KKw0KKyAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkNCisgICAgew0KKyAgICB9DQorDQorICAgIC8vIEVyYXNlIHRoZSBwYWdlDQorICAgIE5SRl9OVk1DLT5FUkFTRVBBR0UgPSBhZGRyZXNzOw0KKw0KKyAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkNCisgICAgew0KKyAgICB9DQorDQorICAgIE5SRl9OVk1DLT5DT05GSUcgPSBOVk1DX0NPTkZJR19XRU5fUmVuOw0KKw0KKyAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkNCisgICAgew0KKyAgICB9DQorfQ0KKw0KKw0KK3ZvaWQgbnJmX252bWNfd3JpdGVfYnl0ZSh1aW50MzJfdCBhZGRyZXNzLCB1aW50OF90IHZhbHVlKQ0KK3sNCisgICAgdWludDMyX3QgYnl0ZV9zaGlmdCA9IGFkZHJlc3MgJiAodWludDMyX3QpMHgwMzsNCisgICAgdWludDMyX3QgYWRkcmVzczMyID0gYWRkcmVzcyAmIH5ieXRlX3NoaWZ0OyAvLyBBZGRyZXNzIHRvIHRoZSB3b3JkIHRoaXMgYnl0ZSBpcyBpbi4NCisgICAgdWludDMyX3QgdmFsdWUzMiA9ICgqKHVpbnQzMl90ICopYWRkcmVzczMyICYgfigodWludDMyX3QpMHhGRiA8PCAoYnl0ZV9zaGlmdCA8PCAodWludDMyX3QpMykpKTsNCisgICAgdmFsdWUzMiA9IHZhbHVlMzIgKyAoKHVpbnQzMl90KXZhbHVlIDw8IChieXRlX3NoaWZ0IDw8IDMpKTsNCisNCisgICAgLy8gRW5hYmxlIHdyaXRlLg0KKyAgICBOUkZfTlZNQy0+Q09ORklHID0gKE5WTUNfQ09ORklHX1dFTl9XZW4gPDwgTlZNQ19DT05GSUdfV0VOX1Bvcyk7DQorDQorICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KQ0KKyAgICB7DQorICAgIH0NCisNCisgICAgKih1aW50MzJfdCAqKWFkZHJlc3MzMiA9IHZhbHVlMzI7DQorDQorICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KQ0KKyAgICB7DQorICAgIH0NCisNCisgICAgTlJGX05WTUMtPkNPTkZJRyA9IChOVk1DX0NPTkZJR19XRU5fUmVuIDw8IE5WTUNfQ09ORklHX1dFTl9Qb3MpOw0KKyAgICB7DQorICAgIH0NCit9DQorDQordm9pZCBucmZfbnZtY193cml0ZV93b3JkKHVpbnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgLy8gRW5hYmxlIHdyaXRlLg0KKyAgICBOUkZfTlZNQy0+Q09ORklHID0gTlZNQ19DT05GSUdfV0VOX1dlbjsNCisNCisgICAgd2hpbGUgKE5SRl9OVk1DLT5SRUFEWSA9PSBOVk1DX1JFQURZX1JFQURZX0J1c3kpDQorICAgIHsNCisgICAgfQ0KKw0KKyAgICAqKHVpbnQzMl90ICopYWRkcmVzcyA9IHZhbHVlOw0KKw0KKyAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkNCisgICAgew0KKyAgICB9DQorDQorICAgIE5SRl9OVk1DLT5DT05GSUcgPSBOVk1DX0NPTkZJR19XRU5fUmVuOw0KKw0KKyAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkNCisgICAgew0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgbnJmX252bWNfd3JpdGVfYnl0ZXModWludDMyX3QgYWRkcmVzcywgY29uc3QgdWludDhfdCAqc3JjLCB1aW50MzJfdCBudW1fYnl0ZXMpDQorew0KKyAgICB1aW50MzJfdCBpOw0KKw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J5dGVzOyBpKyspDQorICAgIHsNCisgICAgICAgIG5yZl9udm1jX3dyaXRlX2J5dGUoYWRkcmVzcyArIGksIHNyY1tpXSk7DQorICAgIH0NCit9DQorDQordm9pZCBucmZfbnZtY193cml0ZV93b3Jkcyh1aW50MzJfdCBhZGRyZXNzLCBjb25zdCB1aW50MzJfdCAqc3JjLCB1aW50MzJfdCBudW1fd29yZHMpDQorew0KKyAgICB1aW50MzJfdCBpOw0KKw0KKyAgICAvLyBFbmFibGUgd3JpdGUuDQorICAgIE5SRl9OVk1DLT5DT05GSUcgPSBOVk1DX0NPTkZJR19XRU5fV2VuOw0KKw0KKyAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkNCisgICAgew0KKyAgICB9DQorDQorICAgIGZvciAoaSA9IDA7IGkgPCBudW1fd29yZHM7IGkrKykNCisgICAgew0KKyAgICAgICAgKCh1aW50MzJfdCAqKWFkZHJlc3MpW2ldID0gc3JjW2ldOw0KKw0KKyAgICAgICAgd2hpbGUgKE5SRl9OVk1DLT5SRUFEWSA9PSBOVk1DX1JFQURZX1JFQURZX0J1c3kpDQorICAgICAgICB7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgTlJGX05WTUMtPkNPTkZJRyA9IE5WTUNfQ09ORklHX1dFTl9SZW47DQorDQorICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KQ0KKyAgICB7DQorICAgIH0NCit9DQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX252bWMuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9udm1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhZmUxYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9udm1jLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBmaWxlDQorICogQGJyaWVmIE5NVkMgZHJpdmVyIEFQSS4NCisgKi8NCisNCisjaWZuZGVmIE5SRl9OVk1DX0hfXw0KKyNkZWZpbmUgTlJGX05WTUNfSF9fDQorDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBucmZfbnZtYyBOb24tdm9sYXRpbGUgbWVtb3J5IGNvbnRyb2xsZXINCisgKiBAew0KKyAqIEBpbmdyb3VwIG5yZl9kcml2ZXJzDQorICogQGJyaWVmIERyaXZlciBmb3IgdGhlIE5WTUMgcGVyaXBoZXJhbC4NCisgKg0KKyAqIFRoaXMgZHJpdmVyIGFsbG93cyB3cml0aW5nIHRvIHRoZSBub24tdm9sYXRpbGUgbWVtb3J5IChOVk0pIHJlZ2lvbnMNCisgKiBvZiB0aGUgY2hpcC4gSW4gb3JkZXIgdG8gd3JpdGUgdG8gTlZNIHRoZSBjb250cm9sbGVyIG11c3QgYmUgcG93ZXJlZA0KKyAqIG9uIGFuZCB0aGUgcmVsZXZhbnQgcGFnZSBtdXN0IGJlIGVyYXNlZC4NCisgKg0KKyAqLw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBFcmFzZSBhIHBhZ2UgaW4gZmxhc2guIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHdyaXRpbmcgdG8gYW55DQorICogYWRkcmVzcyBpbiB0aGUgcGFnZS4NCisgKg0KKyAqIEBwYXJhbSBhZGRyZXNzIFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHBhZ2UuDQorICovDQordm9pZCBucmZfbnZtY19wYWdlX2VyYXNlKHVpbnQzMl90IGFkZHJlc3MpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBXcml0ZSBhIHNpbmdsZSBieXRlIHRvIGZsYXNoLg0KKyAqDQorICogVGhlIGZ1bmN0aW9uIHJlYWRzIHRoZSB3b3JkIGNvbnRhaW5pbmcgdGhlIGJ5dGUsIGFuZCB0aGVuDQorICogcmV3cml0ZXMgdGhlIGVudGlyZSB3b3JkLg0KKyAqDQorICogQHBhcmFtIGFkZHJlc3MgQWRkcmVzcyB0byB3cml0ZSB0by4NCisgKiBAcGFyYW0gdmFsdWUgICBWYWx1ZSB0byB3cml0ZS4NCisgKi8NCit2b2lkIG5yZl9udm1jX3dyaXRlX2J5dGUodWludDMyX3QgYWRkcmVzcyAsIHVpbnQ4X3QgdmFsdWUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBXcml0ZSBhIDMyLWJpdCB3b3JkIHRvIGZsYXNoLg0KKyAqIEBwYXJhbSBhZGRyZXNzIEFkZHJlc3MgdG8gd3JpdGUgdG8uDQorICogQHBhcmFtIHZhbHVlICAgVmFsdWUgdG8gd3JpdGUuDQorICovDQordm9pZCBucmZfbnZtY193cml0ZV93b3JkKHVpbnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IHZhbHVlKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgV3JpdGUgY29uc2VjdXRpdmUgYnl0ZXMgdG8gZmxhc2guDQorICoNCisgKiBAcGFyYW0gYWRkcmVzcyAgIEFkZHJlc3MgdG8gd3JpdGUgdG8uDQorICogQHBhcmFtIHNyYyAgICAgICBQb2ludGVyIHRvIGRhdGEgdG8gY29weSBmcm9tLg0KKyAqIEBwYXJhbSBudW1fYnl0ZXMgTnVtYmVyIG9mIGJ5dGVzIGluIHNyYyB0byB3cml0ZS4NCisgKi8NCit2b2lkIG5yZl9udm1jX3dyaXRlX2J5dGVzKHVpbnQzMl90ICBhZGRyZXNzLCBjb25zdCB1aW50OF90ICpzcmMsIHVpbnQzMl90IG51bV9ieXRlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFdyaXRlIGNvbnNlY3V0aXZlIHdvcmRzIHRvIGZsYXNoLg0KKyAqDQorICogQHBhcmFtIGFkZHJlc3MgICBBZGRyZXNzIHRvIHdyaXRlIHRvLg0KKyAqIEBwYXJhbSBzcmMgICAgICAgUG9pbnRlciB0byBkYXRhIHRvIGNvcHkgZnJvbS4NCisgKiBAcGFyYW0gbnVtX3dvcmRzIE51bWJlciBvZiBieXRlcyBpbiBzcmMgdG8gd3JpdGUuDQorICovDQordm9pZCBucmZfbnZtY193cml0ZV93b3Jkcyh1aW50MzJfdCBhZGRyZXNzLCBjb25zdCB1aW50MzJfdCAqc3JjLCB1aW50MzJfdCBudW1fd29yZHMpOw0KKw0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLy8gTlJGX05WTUNfSF9fDQorLyoqIEB9ICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3BlcmlwaGVyYWxzLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcGVyaXBoZXJhbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTMzOWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3BlcmlwaGVyYWxzLmgKQEAgLTAsMCArMSw2MCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX1BFUklQSEVSQUxTX0gNCisjZGVmaW5lIE5SRl9QRVJJUEhFUkFMU19IDQorDQorLypsaW50ICsrZmxiICJFbnRlciBsaWJyYXJ5IHJlZ2lvbiAqLw0KKw0KKyNpZmRlZiBOUkY1MTQyMg0KKyNpbmNsdWRlICJucmY1MTQyMl9wZXJpcGhlcmFscy5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBOUkY1MTgwMg0KKyNpbmNsdWRlICJucmY1MTgwMl9wZXJpcGhlcmFscy5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBOUkY1MTgyMg0KKyNpbmNsdWRlICJucmY1MTgyMl9wZXJpcGhlcmFscy5oIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBOUkY1MjgzMl9YWEFBDQorI2luY2x1ZGUgIm5yZjUyODMyX3BlcmlwaGVyYWxzLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIE5SRjUyODQwX1hYQUENCisjaW5jbHVkZSAibnJmNTI4NDBfcGVyaXBoZXJhbHMuaCINCisjZW5kaWYNCisNCisNCisvKmxpbnQgLS1mbGIgIkxlYXZlIGxpYnJhcnkgcmVnaW9uIiAqLw0KKw0KKyNlbmRpZiAvKiBOUkZfUEVSSVBIRVJBTFNfSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9wcGkuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9wcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDI5YTE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3BwaS5oCkBAIC0wLDAgKzEsNDMwIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisjaWZuZGVmIE5SRl9QUElfSF9fDQorI2RlZmluZSBOUkZfUFBJX0hfXw0KKw0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisjaW5jbHVkZSAibnJmLmgiDQorI2luY2x1ZGUgIm5yZl9wZXJpcGhlcmFscy5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBucmZfcHBpX2hhbCBQUEkgSEFMDQorICogQHsNCisgKiBAaW5ncm91cCBucmZfcHBpDQorICogQGJyaWVmIEhhcmR3YXJlIGFjY2VzcyBsYXllciBmb3Igc2V0dGluZyB1cCBQcm9ncmFtbWFibGUgUGVyaXBoZXJhbCBJbnRlcmNvbm5lY3QgKFBQSSkgY2hhbm5lbHMuDQorICovDQorDQorI2RlZmluZSBOUkZfUFBJX1RBU0tfU0VUICAgICgxVUwpDQorDQorLyoqDQorICogQGVudW0gbnJmX3BwaV9jaGFubmVsX3QNCisgKiBAYnJpZWYgUFBJIGNoYW5uZWxzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1BQSV9DSEFOTkVMMCAgPSBQUElfQ0hFTl9DSDBfUG9zLCAgLyoqPCBDaGFubmVsIDAuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDEgID0gUFBJX0NIRU5fQ0gxX1BvcywgIC8qKjwgQ2hhbm5lbCAxLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwyICA9IFBQSV9DSEVOX0NIMl9Qb3MsICAvKio8IENoYW5uZWwgMi4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMyAgPSBQUElfQ0hFTl9DSDNfUG9zLCAgLyoqPCBDaGFubmVsIDMuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDQgID0gUFBJX0NIRU5fQ0g0X1BvcywgIC8qKjwgQ2hhbm5lbCA0LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUw1ICA9IFBQSV9DSEVOX0NINV9Qb3MsICAvKio8IENoYW5uZWwgNS4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMNiAgPSBQUElfQ0hFTl9DSDZfUG9zLCAgLyoqPCBDaGFubmVsIDYuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDcgID0gUFBJX0NIRU5fQ0g3X1BvcywgIC8qKjwgQ2hhbm5lbCA3LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUw4ICA9IFBQSV9DSEVOX0NIOF9Qb3MsICAvKio8IENoYW5uZWwgOC4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMOSAgPSBQUElfQ0hFTl9DSDlfUG9zLCAgLyoqPCBDaGFubmVsIDkuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDEwID0gUFBJX0NIRU5fQ0gxMF9Qb3MsIC8qKjwgQ2hhbm5lbCAxMC4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMTEgPSBQUElfQ0hFTl9DSDExX1BvcywgLyoqPCBDaGFubmVsIDExLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwxMiA9IFBQSV9DSEVOX0NIMTJfUG9zLCAvKio8IENoYW5uZWwgMTIuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDEzID0gUFBJX0NIRU5fQ0gxM19Qb3MsIC8qKjwgQ2hhbm5lbCAxMy4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMTQgPSBQUElfQ0hFTl9DSDE0X1BvcywgLyoqPCBDaGFubmVsIDE0LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwxNSA9IFBQSV9DSEVOX0NIMTVfUG9zLCAvKio8IENoYW5uZWwgMTUuICovDQorI2lmIChQUElfQ0hfTlVNID4gMTYpIHx8IGRlZmluZWQoX19TREtfRE9YWUdFTl9fKQ0KKyAgICBOUkZfUFBJX0NIQU5ORUwxNiA9IFBQSV9DSEVOX0NIMTZfUG9zLCAvKio8IENoYW5uZWwgMTYuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDE3ID0gUFBJX0NIRU5fQ0gxN19Qb3MsIC8qKjwgQ2hhbm5lbCAxNy4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMTggPSBQUElfQ0hFTl9DSDE4X1BvcywgLyoqPCBDaGFubmVsIDE4LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwxOSA9IFBQSV9DSEVOX0NIMTlfUG9zLCAvKio8IENoYW5uZWwgMTkuICovDQorI2VuZGlmDQorICAgIE5SRl9QUElfQ0hBTk5FTDIwID0gUFBJX0NIRU5fQ0gyMF9Qb3MsIC8qKjwgQ2hhbm5lbCAyMC4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMjEgPSBQUElfQ0hFTl9DSDIxX1BvcywgLyoqPCBDaGFubmVsIDIxLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwyMiA9IFBQSV9DSEVOX0NIMjJfUG9zLCAvKio8IENoYW5uZWwgMjIuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDIzID0gUFBJX0NIRU5fQ0gyM19Qb3MsIC8qKjwgQ2hhbm5lbCAyMy4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMjQgPSBQUElfQ0hFTl9DSDI0X1BvcywgLyoqPCBDaGFubmVsIDI0LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwyNSA9IFBQSV9DSEVOX0NIMjVfUG9zLCAvKio8IENoYW5uZWwgMjUuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDI2ID0gUFBJX0NIRU5fQ0gyNl9Qb3MsIC8qKjwgQ2hhbm5lbCAyNi4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMjcgPSBQUElfQ0hFTl9DSDI3X1BvcywgLyoqPCBDaGFubmVsIDI3LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwyOCA9IFBQSV9DSEVOX0NIMjhfUG9zLCAvKio8IENoYW5uZWwgMjguICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDI5ID0gUFBJX0NIRU5fQ0gyOV9Qb3MsIC8qKjwgQ2hhbm5lbCAyOS4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMzAgPSBQUElfQ0hFTl9DSDMwX1BvcywgLyoqPCBDaGFubmVsIDMwLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwzMSA9IFBQSV9DSEVOX0NIMzFfUG9zICAvKio8IENoYW5uZWwgMzEuICovDQorfSBucmZfcHBpX2NoYW5uZWxfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcHBpX2NoYW5uZWxfZ3JvdXBfdA0KKyAqIEBicmllZiBQUEkgY2hhbm5lbCBncm91cHMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUFBJX0NIQU5ORUxfR1JPVVAwID0gMCwgLyoqPCBDaGFubmVsIGdyb3VwIDAuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTF9HUk9VUDEgPSAxLCAvKio8IENoYW5uZWwgZ3JvdXAgMS4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMX0dST1VQMiA9IDIsIC8qKjwgQ2hhbm5lbCBncm91cCAyLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUxfR1JPVVAzID0gMywgLyoqPCBDaGFubmVsIGdyb3VwIDMuICovDQorI2lmIChQUElfR1JPVVBfTlVNID4gNCkgfHwgZGVmaW5lZChfX1NES19ET1hZR0VOX18pDQorICAgIE5SRl9QUElfQ0hBTk5FTF9HUk9VUDQgPSA0LCAvKio8IENoYW5uZWwgZ3JvdXAgNC4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMX0dST1VQNSA9IDUgIC8qKjwgQ2hhbm5lbCBncm91cCA1LiAqLw0KKyNlbmRpZg0KK30gbnJmX3BwaV9jaGFubmVsX2dyb3VwX3Q7DQorDQorLyoqDQorICogQGVudW0gbnJmX3BwaV9jaGFubmVsX2luY2x1ZGVfdA0KKyAqIEBicmllZiBEZWZpbml0aW9uIG9mIHdoaWNoIFBQSSBjaGFubmVscyBiZWxvbmcgdG8gYSBncm91cC4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9QUElfQ0hBTk5FTF9FWENMVURFID0gUFBJX0NIR19DSDBfRXhjbHVkZWQsIC8qKjwgQ2hhbm5lbCBleGNsdWRlZCBmcm9tIGEgZ3JvdXAuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTF9JTkNMVURFID0gUFBJX0NIR19DSDBfSW5jbHVkZWQgIC8qKjwgQ2hhbm5lbCBpbmNsdWRlZCBpbiBhIGdyb3VwLiAqLw0KK30gbnJmX3BwaV9jaGFubmVsX2luY2x1ZGVfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcHBpX2NoYW5uZWxfZW5hYmxlX3QNCisgKiBAYnJpZWYgRGVmaW5pdGlvbiBpZiBhIFBQSSBjaGFubmVsIGlzIGVuYWJsZWQuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUFBJX0NIQU5ORUxfRElTQUJMRUQgPSBQUElfQ0hFTl9DSDBfRGlzYWJsZWQsIC8qKjwgQ2hhbm5lbCBkaXNhYmxlZC4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMX0VOQUJMRUQgID0gUFBJX0NIRU5fQ0gwX0VuYWJsZWQgICAvKio8IENoYW5uZWwgZW5hYmxlZC4gKi8NCit9IG5yZl9wcGlfY2hhbm5lbF9lbmFibGVfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcHBpX3Rhc2tfdA0KKyAqIEBicmllZiBQUEkgdGFza3MuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICAvKmxpbnQgLXNhdmUgLWUzMCAtZXN5bSg2MjgsX19JTlRBRERSX18pKi8NCisgICAgTlJGX1BQSV9UQVNLX0NIRzBfRU4gID0gb2Zmc2V0b2YoTlJGX1BQSV9UeXBlLCBUQVNLU19DSEdbMF0uRU4pLCAgLyoqPCBUYXNrIGZvciBlbmFibGluZyBjaGFubmVsIGdyb3VwIDAgKi8NCisgICAgTlJGX1BQSV9UQVNLX0NIRzBfRElTID0gb2Zmc2V0b2YoTlJGX1BQSV9UeXBlLCBUQVNLU19DSEdbMF0uRElTKSwgLyoqPCBUYXNrIGZvciBkaXNhYmxpbmcgY2hhbm5lbCBncm91cCAwICovDQorICAgIE5SRl9QUElfVEFTS19DSEcxX0VOICA9IG9mZnNldG9mKE5SRl9QUElfVHlwZSwgVEFTS1NfQ0hHWzFdLkVOKSwgIC8qKjwgVGFzayBmb3IgZW5hYmxpbmcgY2hhbm5lbCBncm91cCAxICovDQorICAgIE5SRl9QUElfVEFTS19DSEcxX0RJUyA9IG9mZnNldG9mKE5SRl9QUElfVHlwZSwgVEFTS1NfQ0hHWzFdLkRJUyksIC8qKjwgVGFzayBmb3IgZGlzYWJsaW5nIGNoYW5uZWwgZ3JvdXAgMSAqLw0KKyAgICBOUkZfUFBJX1RBU0tfQ0hHMl9FTiAgPSBvZmZzZXRvZihOUkZfUFBJX1R5cGUsIFRBU0tTX0NIR1syXS5FTiksICAvKio8IFRhc2sgZm9yIGVuYWJsaW5nIGNoYW5uZWwgZ3JvdXAgMiAqLw0KKyAgICBOUkZfUFBJX1RBU0tfQ0hHMl9ESVMgPSBvZmZzZXRvZihOUkZfUFBJX1R5cGUsIFRBU0tTX0NIR1syXS5ESVMpLCAvKio8IFRhc2sgZm9yIGRpc2FibGluZyBjaGFubmVsIGdyb3VwIDIgKi8NCisgICAgTlJGX1BQSV9UQVNLX0NIRzNfRU4gID0gb2Zmc2V0b2YoTlJGX1BQSV9UeXBlLCBUQVNLU19DSEdbM10uRU4pLCAgLyoqPCBUYXNrIGZvciBlbmFibGluZyBjaGFubmVsIGdyb3VwIDMgKi8NCisgICAgTlJGX1BQSV9UQVNLX0NIRzNfRElTID0gb2Zmc2V0b2YoTlJGX1BQSV9UeXBlLCBUQVNLU19DSEdbM10uRElTKSwgLyoqPCBUYXNrIGZvciBkaXNhYmxpbmcgY2hhbm5lbCBncm91cCAzICovDQorI2lmIChQUElfR1JPVVBfTlVNID4gNCkgfHwgZGVmaW5lZChfX1NES19ET1hZR0VOX18pDQorICAgIE5SRl9QUElfVEFTS19DSEc0X0VOICA9IG9mZnNldG9mKE5SRl9QUElfVHlwZSwgVEFTS1NfQ0hHWzRdLkVOKSwgIC8qKjwgVGFzayBmb3IgZW5hYmxpbmcgY2hhbm5lbCBncm91cCA0ICovDQorICAgIE5SRl9QUElfVEFTS19DSEc0X0RJUyA9IG9mZnNldG9mKE5SRl9QUElfVHlwZSwgVEFTS1NfQ0hHWzRdLkRJUyksIC8qKjwgVGFzayBmb3IgZGlzYWJsaW5nIGNoYW5uZWwgZ3JvdXAgNCAqLw0KKyAgICBOUkZfUFBJX1RBU0tfQ0hHNV9FTiAgPSBvZmZzZXRvZihOUkZfUFBJX1R5cGUsIFRBU0tTX0NIR1s1XS5FTiksICAvKio8IFRhc2sgZm9yIGVuYWJsaW5nIGNoYW5uZWwgZ3JvdXAgNSAqLw0KKyAgICBOUkZfUFBJX1RBU0tfQ0hHNV9ESVMgPSBvZmZzZXRvZihOUkZfUFBJX1R5cGUsIFRBU0tTX0NIR1s1XS5ESVMpICAvKio8IFRhc2sgZm9yIGRpc2FibGluZyBjaGFubmVsIGdyb3VwIDUgKi8NCisjZW5kaWYNCisgICAgLypsaW50IC1yZXN0b3JlKi8NCit9IG5yZl9wcGlfdGFza190Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZW5hYmxpbmcgYSBnaXZlbiBQUEkgY2hhbm5lbC4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBvbmx5IG9uZSBjaGFubmVsLg0KKyAqDQorICogQHBhcmFtW2luXSBjaGFubmVsIENoYW5uZWwgdG8gZW5hYmxlLg0KKyAqDQorICogICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9jaGFubmVsX2VuYWJsZShucmZfcHBpX2NoYW5uZWxfdCBjaGFubmVsKQ0KK3sNCisgICAgTlJGX1BQSS0+Q0hFTlNFVCA9IFBQSV9DSEVOU0VUX0NIMF9TZXQgPDwgKCh1aW50MzJfdCkgY2hhbm5lbCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIGEgZ2l2ZW4gUFBJIGNoYW5uZWwuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIG9ubHkgb25lIGNoYW5uZWwuDQorICoNCisgKiBAcGFyYW1baW5dIGNoYW5uZWwgQ2hhbm5lbCB0byBkaXNhYmxlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9wcGlfY2hhbm5lbF9kaXNhYmxlKG5yZl9wcGlfY2hhbm5lbF90IGNoYW5uZWwpDQorew0KKyAgICBOUkZfUFBJLT5DSEVOQ0xSID0gUFBJX0NIRU5DTFJfQ0gwX0NsZWFyIDw8ICgodWludDMyX3QpIGNoYW5uZWwpOw0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGEgZ2l2ZW4gUFBJIGNoYW5uZWwgaXMgZW5hYmxlZC4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gY2hlY2tzIG9ubHkgb25lIGNoYW5uZWwuDQorICoNCisgKiBAcGFyYW1baW5dIGNoYW5uZWwgQ2hhbm5lbCB0byBjaGVjay4NCisgKg0KKyAqIEByZXR2YWwgICAgIE5SRl9QUElfQ0hBTk5FTF9FTkFCTEVEICAgICBJZiB0aGUgY2hhbm5lbCBpcyBlbmFibGVkLg0KKyAqIEByZXR2YWwgICAgIE5SRl9QUElfQ0hBTk5FTF9ESVNBQkxFRCAgICBJZiB0aGUgY2hhbm5lbCBpcyBub3QgZW5hYmxlZC4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBucmZfcHBpX2NoYW5uZWxfZW5hYmxlX3QgbnJmX3BwaV9jaGFubmVsX2VuYWJsZV9nZXQobnJmX3BwaV9jaGFubmVsX3QgY2hhbm5lbCkNCit7DQorICAgIGlmIChOUkZfUFBJLT5DSEVOICYgKFBQSV9DSEVOX0NIMF9Nc2sgPDwgKCh1aW50MzJfdCkgY2hhbm5lbCkpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlJGX1BQSV9DSEFOTkVMX0VOQUJMRUQ7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlJGX1BQSV9DSEFOTkVMX0RJU0FCTEVEOw0KKyAgICB9DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIGFsbCBQUEkgY2hhbm5lbHMuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9jaGFubmVsX2Rpc2FibGVfYWxsKHZvaWQpDQorew0KKyAgICBOUkZfUFBJLT5DSEVOQ0xSID0gKCh1aW50MzJfdCkweEZGRkZGRkZGdUwpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBtdWx0aXBsZSBQUEkgY2hhbm5lbHMuDQorICoNCisgKiBAcGFyYW1baW5dIG1hc2sgQ2hhbm5lbCBtYXNrLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9wcGlfY2hhbm5lbHNfZGlzYWJsZSh1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgTlJGX1BQSS0+Q0hFTkNMUiA9IG1hc2s7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyB1cCBldmVudCBhbmQgdGFzayBlbmRwb2ludHMgZm9yIGEgZ2l2ZW4gUFBJIGNoYW5uZWwuDQorICoNCisgKiBAcGFyYW1baW5dIGVlcCBFdmVudCByZWdpc3RlciBhZGRyZXNzLg0KKyAqDQorICogQHBhcmFtW2luXSB0ZXAgVGFzayByZWdpc3RlciBhZGRyZXNzLg0KKyAqDQorICogQHBhcmFtW2luXSBjaGFubmVsIENoYW5uZWwgdG8gd2hpY2ggdGhlIGdpdmVuIGVuZHBvaW50cyBhcmUgYXNzaWduZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9jaGFubmVsX2VuZHBvaW50X3NldHVwKG5yZl9wcGlfY2hhbm5lbF90IGNoYW5uZWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgIGVlcCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICAgdGVwKQ0KK3sNCisgICAgTlJGX1BQSS0+Q0hbKHVpbnQzMl90KSBjaGFubmVsXS5FRVAgPSBlZXA7DQorICAgIE5SRl9QUEktPkNIWyh1aW50MzJfdCkgY2hhbm5lbF0uVEVQID0gdGVwOw0KK30NCisNCisjaWYgZGVmaW5lZChQUElfRkVBVFVSRV9GT1JLU19QUkVTRU5UKSB8fCBkZWZpbmVkKF9fU0RLX0RPWFlHRU5fXykNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgdXAgdGFzayBlbmRwb2ludCBmb3IgYSBnaXZlbiBQUEkgZm9yay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZm9ya190ZXAgVGFzayByZWdpc3RlciBhZGRyZXNzLg0KKyAqDQorICogQHBhcmFtW2luXSBjaGFubmVsIENoYW5uZWwgdG8gd2hpY2ggdGhlIGdpdmVuIGZvcmsgZW5kcG9pbnQgaXMgYXNzaWduZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9mb3JrX2VuZHBvaW50X3NldHVwKG5yZl9wcGlfY2hhbm5lbF90IGNoYW5uZWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgIGZvcmtfdGVwKQ0KK3sNCisgICAgTlJGX1BQSS0+Rk9SS1sodWludDMyX3QpIGNoYW5uZWxdLlRFUCA9IGZvcmtfdGVwOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgdXAgZXZlbnQgYW5kIHRhc2sgZW5kcG9pbnRzIGZvciBhIGdpdmVuIFBQSSBjaGFubmVsIGFuZCBmb3JrLg0KKyAqDQorICogQHBhcmFtW2luXSBlZXAgRXZlbnQgcmVnaXN0ZXIgYWRkcmVzcy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gdGVwIFRhc2sgcmVnaXN0ZXIgYWRkcmVzcy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZm9ya190ZXAgRm9yayB0YXNrIHJlZ2lzdGVyIGFkZHJlc3MgKHJlZ2lzdGVyIHZhbHVlKS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbCBDaGFubmVsIHRvIHdoaWNoIHRoZSBnaXZlbiBlbmRwb2ludHMgYXJlIGFzc2lnbmVkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9wcGlfY2hhbm5lbF9hbmRfZm9ya19lbmRwb2ludF9zZXR1cChucmZfcHBpX2NoYW5uZWxfdCBjaGFubmVsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICBlZXAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgIHRlcCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICAgZm9ya190ZXApDQorew0KKyAgICBucmZfcHBpX2NoYW5uZWxfZW5kcG9pbnRfc2V0dXAoY2hhbm5lbCwgZWVwLCB0ZXApOw0KKyAgICBucmZfcHBpX2ZvcmtfZW5kcG9pbnRfc2V0dXAoY2hhbm5lbCwgZm9ya190ZXApOw0KK30NCisjZW5kaWYNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGluY2x1ZGluZyBhIFBQSSBjaGFubmVsIGluIGEgY2hhbm5lbCBncm91cC4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gYWRkcyBvbmx5IG9uZSBjaGFubmVsIHRvIHRoZSBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbCAgICAgICBDaGFubmVsIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbF9ncm91cCBDaGFubmVsIGdyb3VwLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9jaGFubmVsX2luY2x1ZGVfaW5fZ3JvdXAobnJmX3BwaV9jaGFubmVsX3QgICAgICAgY2hhbm5lbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfcHBpX2NoYW5uZWxfZ3JvdXBfdCBjaGFubmVsX2dyb3VwKQ0KK3sNCisgICAgTlJGX1BQSS0+Q0hHWyh1aW50MzJfdCkgY2hhbm5lbF9ncm91cF0gPQ0KKyAgICAgICAgTlJGX1BQSS0+Q0hHWyh1aW50MzJfdCkgY2hhbm5lbF9ncm91cF0gfCAoUFBJX0NIR19DSDBfSW5jbHVkZWQgPDwgKCh1aW50MzJfdCkgIGNoYW5uZWwpKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBpbmNsdWRpbmcgbXVsdGlwbGUgUFBJIGNoYW5uZWxzIGluIGEgY2hhbm5lbCBncm91cC4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gYWRkcyBhbGwgc3BlY2lmaWVkIGNoYW5uZWxzIHRvIHRoZSBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbF9tYXNrICBDaGFubmVscyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgZ3JvdXAuDQorICoNCisgKiBAcGFyYW1baW5dIGNoYW5uZWxfZ3JvdXAgQ2hhbm5lbCBncm91cC4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9wcGlfY2hhbm5lbHNfaW5jbHVkZV9pbl9ncm91cCh1aW50MzJfdCAgICAgICAgICAgICAgICBjaGFubmVsX21hc2ssDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9wcGlfY2hhbm5lbF9ncm91cF90IGNoYW5uZWxfZ3JvdXApDQorew0KKyAgICBOUkZfUFBJLT5DSEdbKHVpbnQzMl90KSBjaGFubmVsX2dyb3VwXSA9DQorICAgICAgICBOUkZfUFBJLT5DSEdbKHVpbnQzMl90KSBjaGFubmVsX2dyb3VwXSB8IChjaGFubmVsX21hc2spOw0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlbW92aW5nIGEgUFBJIGNoYW5uZWwgZnJvbSBhIGNoYW5uZWwgZ3JvdXAuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgb25seSBvbmUgY2hhbm5lbCBmcm9tIHRoZSBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbCAgICAgICBDaGFubmVsIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgZ3JvdXAuDQorICoNCisgKiBAcGFyYW1baW5dIGNoYW5uZWxfZ3JvdXAgQ2hhbm5lbCBncm91cC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcHBpX2NoYW5uZWxfcmVtb3ZlX2Zyb21fZ3JvdXAobnJmX3BwaV9jaGFubmVsX3QgICAgICAgY2hhbm5lbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX3BwaV9jaGFubmVsX2dyb3VwX3QgY2hhbm5lbF9ncm91cCkNCit7DQorICAgIE5SRl9QUEktPkNIR1sodWludDMyX3QpIGNoYW5uZWxfZ3JvdXBdID0NCisgICAgICAgIE5SRl9QUEktPkNIR1sodWludDMyX3QpIGNoYW5uZWxfZ3JvdXBdICYgfihQUElfQ0hHX0NIMF9JbmNsdWRlZCA8PCAoKHVpbnQzMl90KSBjaGFubmVsKSk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVtb3ZpbmcgbXVsdGlwbGUgUFBJIGNoYW5uZWxzIGZyb20gYSBjaGFubmVsIGdyb3VwLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiByZW1vdmVzIGFsbCBzcGVjaWZpZWQgY2hhbm5lbHMgZnJvbSB0aGUgZ3JvdXAuDQorICoNCisgKiBAcGFyYW1baW5dIGNoYW5uZWxfbWFzayAgQ2hhbm5lbHMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbF9ncm91cCBDaGFubmVsIGdyb3VwLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9wcGlfY2hhbm5lbHNfcmVtb3ZlX2Zyb21fZ3JvdXAodWludDMyX3QgICAgICAgICAgICAgICAgY2hhbm5lbF9tYXNrLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX3BwaV9jaGFubmVsX2dyb3VwX3QgY2hhbm5lbF9ncm91cCkNCit7DQorICAgIE5SRl9QUEktPkNIR1sodWludDMyX3QpIGNoYW5uZWxfZ3JvdXBdID0NCisgICAgICAgIE5SRl9QUEktPkNIR1sodWludDMyX3QpIGNoYW5uZWxfZ3JvdXBdICYgfihjaGFubmVsX21hc2spOw0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlbW92aW5nIGFsbCBQUEkgY2hhbm5lbHMgZnJvbSBhIGNoYW5uZWwgZ3JvdXAuDQorICoNCisgKiBAcGFyYW1baW5dIGdyb3VwIENoYW5uZWwgZ3JvdXAuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcHBpX2NoYW5uZWxfZ3JvdXBfY2xlYXIobnJmX3BwaV9jaGFubmVsX2dyb3VwX3QgZ3JvdXApDQorew0KKyAgICBOUkZfUFBJLT5DSEdbKHVpbnQzMl90KSBncm91cF0gPSAwOw0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGVuYWJsaW5nIGEgY2hhbm5lbCBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZ3JvdXAgQ2hhbm5lbCBncm91cC4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9wcGlfZ3JvdXBfZW5hYmxlKG5yZl9wcGlfY2hhbm5lbF9ncm91cF90IGdyb3VwKQ0KK3sNCisgICAgTlJGX1BQSS0+VEFTS1NfQ0hHWyh1aW50MzJfdCkgZ3JvdXBdLkVOID0gTlJGX1BQSV9UQVNLX1NFVDsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBkaXNhYmxpbmcgYSBjaGFubmVsIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBncm91cCBDaGFubmVsIGdyb3VwLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9ncm91cF9kaXNhYmxlKG5yZl9wcGlfY2hhbm5lbF9ncm91cF90IGdyb3VwKQ0KK3sNCisgICAgTlJGX1BQSS0+VEFTS1NfQ0hHWyh1aW50MzJfdCkgZ3JvdXBdLkRJUyA9IE5SRl9QUElfVEFTS19TRVQ7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBhIFBQSSB0YXNrLg0KKyAqDQorICogQHBhcmFtW2luXSBwcGlfdGFzayBQUEkgdGFzayB0byBzZXQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV90YXNrX3RyaWdnZXIobnJmX3BwaV90YXNrX3QgcHBpX3Rhc2spDQorew0KKyAgICAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSAoKHVpbnQ4X3QgKikgTlJGX1BQSV9CQVNFICsgKHVpbnQzMl90KSBwcGlfdGFzaykpID0gTlJGX1BQSV9UQVNLX1NFVDsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBQUEkgdGFzayByZWdpc3Rlci4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcHBpX3Rhc2sgUFBJIHRhc2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90ICogbnJmX3BwaV90YXNrX2FkZHJlc3NfZ2V0KG5yZl9wcGlfdGFza190IHBwaV90YXNrKQ0KK3sNCisgICAgcmV0dXJuICh1aW50MzJfdCAqKSAoKHVpbnQ4X3QgKikgTlJGX1BQSV9CQVNFICsgKHVpbnQzMl90KSBwcGlfdGFzayk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBQUEkgZW5hYmxlIHRhc2sgYWRkcmVzcyBvZiBhIHNwZWNpZmljIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBncm91cCAgUFBJIGdyb3VwLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCAqIG5yZl9wcGlfdGFza19ncm91cF9lbmFibGVfYWRkcmVzc19nZXQobnJmX3BwaV9jaGFubmVsX2dyb3VwX3QgZ3JvdXApDQorew0KKyAgICByZXR1cm4gKHVpbnQzMl90ICopICZOUkZfUFBJLT5UQVNLU19DSEdbKHVpbnQzMl90KSBncm91cF0uRU47DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBQUEkgZGlzYWJsZSB0YXNrIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZ3JvdXAgIFBQSSBncm91cC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgKiBucmZfcHBpX3Rhc2tfZ3JvdXBfZGlzYWJsZV9hZGRyZXNzX2dldChucmZfcHBpX2NoYW5uZWxfZ3JvdXBfdCBncm91cCkNCit7DQorICAgIHJldHVybiAodWludDMyX3QgKikgJk5SRl9QUEktPlRBU0tTX0NIR1sodWludDMyX3QpIGdyb3VwXS5ESVM7DQorfQ0KKw0KKw0KKy8qKg0KKyAqQH0NCisgKiovDQorDQorLypsaW50IC0tZmxiICJMZWF2ZSBsaWJyYXJ5IHJlZ2lvbiIgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8vIE5SRl9QUElfSF9fDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3JhZGlvLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcmFkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTAyNDVlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3JhZGlvLmgKQEAgLTAsMCArMSw2MzAgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBmaWxlDQorICogQGJyaWVmIFJBRElPIEhBTCBBUEkuDQorICovDQorDQorI2lmbmRlZiBOUkZfUkFESU9fSF9fDQorI2RlZmluZSBOUkZfUkFESU9fSF9fDQorLyoqDQorICogQGRlZmdyb3VwIG5yZl9yYWRpb19oYWwgUkFESU8gSEFMDQorICogQHsNCisgKiBAaW5ncm91cCBucmZfcmFkaW8NCisgKiBAYnJpZWYgSGFyZHdhcmUgYWNjZXNzIGxheWVyIGZvciBtYW5hZ2luZyB0aGUgcmFkaW8gKFJBRElPKS4NCisgKi8NCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKyNpbmNsdWRlIDxzdGRib29sLmg+DQorI2luY2x1ZGUgIm5yZi5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgTlJGX1JBRElPX1RBU0tfU0VUICAgICgxVUwpDQorI2RlZmluZSBOUkZfUkFESU9fRVZFTlRfQ0xFQVIgKDBVTCkNCisvKioNCisgKiBAZW51bSBucmZfcmFkaW9fdGFza190DQorICogQGJyaWVmIFJBRElPIHRhc2tzLg0KKyAqLw0KK3R5cGVkZWYgZW51bSAvKmxpbnQgLXNhdmUgLWUzMCAtZXN5bSg2MjgsX19JTlRBRERSX18pICovDQorew0KKyAgICBOUkZfUkFESU9fVEFTS19UWEVOICAgICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgVEFTS1NfVFhFTiksICAgICAgLyoqPCBFbmFibGUgcmFkaW8gdHJhbnNtaXR0ZXIuICovDQorICAgIE5SRl9SQURJT19UQVNLX1JYRU4gICAgICA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBUQVNLU19SWEVOKSwgICAgICAvKio8IEVuYWJsZSByYWRpbyByZWNlaXZlci4gKi8NCisgICAgTlJGX1JBRElPX1RBU0tfU1RBUlQgICAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIFRBU0tTX1NUQVJUKSwgICAgIC8qKjwgU3RhcnQgcmFkaW8gdHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbi4gKi8NCisgICAgTlJGX1JBRElPX1RBU0tfU1RPUCAgICAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIFRBU0tTX1NUT1ApLCAgICAgIC8qKjwgU3RvcCByYWRpbyB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uLiAqLw0KKyAgICBOUkZfUkFESU9fVEFTS19ESVNBQkxFICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgVEFTS1NfRElTQUJMRSksICAgLyoqPCBEaXNhYmxlIHJhZGlvIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlci4gKi8NCisgICAgTlJGX1JBRElPX1RBU0tfQ0NBU1RBUlQgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIFRBU0tTX0NDQVNUQVJUKSwgIC8qKjwgU3RhcnQgQ2xlYXIgQ2hhbm5lbCBBc3Nlc3NtZW50IHByb2NlZHVyZS4gKi8NCisgICAgTlJGX1JBRElPX1RBU0tfQ0NBU1RPUCAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIFRBU0tTX0NDQVNUT1ApLCAgIC8qKjwgU3RvcCBDbGVhciBDaGFubmVsIEFzc2Vzc21lbnQgcHJvY2VkdXJlLiAqLw0KKyAgICBOUkZfUkFESU9fVEFTS19FRFNUQVJUICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgVEFTS1NfRURTVEFSVCksICAgLyoqPCBTdGFydCBFbmVyZ3kgRGV0ZWN0aW9uIHByb2NlZHVyZS4gKi8NCisgICAgTlJGX1JBRElPX1RBU0tfUlNTSVNUQVJUID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIFRBU0tTX1JTU0lTVEFSVCksIC8qKjwgU3RhcnQgdGhlIFJTU0kgYW5kIHRha2Ugb25lIHNpbmdsZSBzYW1wbGUgb2YgcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoLiAqLworfSBucmZfcmFkaW9fdGFza190OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmxpbnQgLXJlc3RvcmUgKi8NCisNCisvKioNCisgKiBAZW51bSBucmZfcmFkaW9fZXZlbnRfdA0KKyAqIEBicmllZiBSQURJTyBldmVudHMuDQorICovDQordHlwZWRlZiBlbnVtIC8qbGludCAtc2F2ZSAtZTMwIC1lc3ltKDYyOCxfX0lOVEFERFJfXykgKi8NCit7DQorICAgIE5SRl9SQURJT19FVkVOVF9SRUFEWSAgICAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIEVWRU5UU19SRUFEWSksICAgICAgLyoqPCBSYWRpbyBoYXMgcmFtcGVkIHVwIGFuZCBpcyByZWFkeSB0byBiZSBzdGFydGVkLiAqLw0KKyAgICBOUkZfUkFESU9fRVZFTlRfQUREUkVTUyAgICA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBFVkVOVFNfQUREUkVTUyksICAgIC8qKjwgQWRkcmVzcyBzZW50IG9yIHJlY2VpdmVkLiAqLw0KKyAgICBOUkZfUkFESU9fRVZFTlRfRU5EICAgICAgICA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBFVkVOVFNfRU5EKSwgICAgICAgIC8qKjwgUGFja2V0IHRyYW5zbWl0dGVkIG9yIHJlY2VpdmVkLiAqLw0KKyAgICBOUkZfUkFESU9fRVZFTlRfRElTQUJMRUQgICA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBFVkVOVFNfRElTQUJMRUQpLCAgIC8qKjwgUmFkaW8gaGFzIGJlZW4gZGlzYWJsZWQuICovDQorICAgIE5SRl9SQURJT19FVkVOVF9DUkNPSyAgICAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIEVWRU5UU19DUkNPSyksICAgICAgLyoqPCBQYWNrZXQgcmVjZWl2ZWQgd2l0aCBjb3JyZWN0IENSQy4gKi8NCisgICAgTlJGX1JBRElPX0VWRU5UX0NSQ0VSUk9SICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgRVZFTlRTX0NSQ0VSUk9SKSwgICAvKio8IFBhY2tldCByZWNlaXZlZCB3aXRoIGluY29ycmVjdCBDUkMuICovDQorICAgIE5SRl9SQURJT19FVkVOVF9DQ0FJRExFICAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIEVWRU5UU19DQ0FJRExFKSwgICAgLyoqPCBXaXJlbGVzcyBtZWRpdW0gaXMgaWRsZS4gKi8NCisgICAgTlJGX1JBRElPX0VWRU5UX0NDQUJVU1kgICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgRVZFTlRTX0NDQUJVU1kpLCAgICAvKio8IFdpcmVsZXNzIG1lZGl1bSBpcyBidXN5LiAqLw0KKyAgICBOUkZfUkFESU9fRVZFTlRfUlNTSUVORCAgICA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBFVkVOVFNfUlNTSUVORCksICAgIC8qKjwgU2FtcGxpbmcgb2YgcmVjZWl2ZSBzaWduYWwgc3RyZW5ndGggY29tcGxldGUuICovDQorICAgIE5SRl9SQURJT19FVkVOVF9NSFJNQVRDSCAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIEVWRU5UU19NSFJNQVRDSCksICAgLyoqPCBNQUMgSGVhZGVyIG1hdGNoIGZvdW5kLiAqLw0KKyAgICBOUkZfUkFESU9fRVZFTlRfRlJBTUVTVEFSVCA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBFVkVOVFNfRlJBTUVTVEFSVCksIC8qKjwgSUVFRSA4MDIuMTUuNCBsZW5ndGggZmllbGQgcmVjZWl2ZWQuICovDQorICAgIE5SRl9SQURJT19FVkVOVF9FREVORCAgICAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIEVWRU5UU19FREVORCksICAgICAgLyoqPCBFbmVyZ3kgRGV0ZWN0aW9uIHByb2NlZHVyZSBlbmRlZC4gKi8NCisgICAgTlJGX1JBRElPX0VWRU5UX0JDTUFUQ0ggICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgRVZFTlRTX0JDTUFUQ0gpLCAgICAvKio8IEJpdCBjb3VudGVyIHJlYWNoZWQgYml0IGNvdW50IHZhbHVlLiAqLw0KK30gbnJmX3JhZGlvX2V2ZW50X3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbGludCAtcmVzdG9yZSAqLw0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9yYWRpb19pbnRfbWFza190DQorICogQGJyaWVmIFJBRElPIGludGVycnVwdHMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUkFESU9fSU5UX1JFQURZX01BU0sgICAgICA9IFJBRElPX0lOVEVOU0VUX1JFQURZX01zaywgICAgICAvKio8IE1hc2sgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhbiBpbnRlcnJ1cHQgb24gUkVBRFkgZXZlbnQuICAqLw0KKyAgICBOUkZfUkFESU9fSU5UX0FERFJFU1NfTUFTSyAgICA9IFJBRElPX0lOVEVOU0VUX0FERFJFU1NfTXNrLCAgICAvKio8IE1hc2sgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhbiBpbnRlcnJ1cHQgb24gQUREUkVTUyBldmVudC4gKi8NCisgICAgTlJGX1JBRElPX0lOVF9FTkRfTUFTSyAgICAgICAgPSBSQURJT19JTlRFTlNFVF9FTkRfTXNrLCAgICAgICAgLyoqPCBNYXNrIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYW4gaW50ZXJydXB0IG9uIEVORCBldmVudC4gKi8NCisgICAgTlJGX1JBRElPX0lOVF9ESVNBQkxFRF9NQVNLICAgPSBSQURJT19JTlRFTlNFVF9ESVNBQkxFRF9Nc2ssICAgLyoqPCBNYXNrIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYW4gaW50ZXJydXB0IG9uIERJU0FCTEVEIGV2ZW50LiAqLw0KKyAgICBOUkZfUkFESU9fSU5UX0NSQ09LX01BU0sgICAgICA9IFJBRElPX0lOVEVOU0VUX0NSQ09LX01zaywgICAgICAvKio8IE1hc2sgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhbiBpbnRlcnJ1cHQgb24gQ1JDT0sgZXZlbnQuICovDQorICAgIE5SRl9SQURJT19JTlRfQ1JDRVJST1JfTUFTSyAgID0gUkFESU9fSU5URU5TRVRfQ1JDRVJST1JfTXNrLCAgIC8qKjwgTWFzayBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFuIGludGVycnVwdCBvbiBDUkNFUlJPUiBldmVudC4gKi8NCisgICAgTlJGX1JBRElPX0lOVF9DQ0FJRExFX01BU0sgICAgPSBSQURJT19JTlRFTlNFVF9DQ0FJRExFX01zaywgICAgLyoqPCBNYXNrIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYW4gaW50ZXJydXB0IG9uIENDQUlETEUgZXZlbnQuICovDQorICAgIE5SRl9SQURJT19JTlRfQ0NBQlVTWV9NQVNLICAgID0gUkFESU9fSU5URU5TRVRfQ0NBQlVTWV9Nc2ssICAgIC8qKjwgTWFzayBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFuIGludGVycnVwdCBvbiBDQ0FCVVNZIGV2ZW50LiAqLw0KKyAgICBOUkZfUkFESU9fSU5UX1JTU0lFTkRfTUFTSyAgICA9IFJBRElPX0lOVEVOU0VUX1JTU0lFTkRfTXNrLCAgICAvKio8IE1hc2sgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhbiBpbnRlcnJ1cHQgb24gUlNTSUVORCBldmVudC4gKi8NCisgICAgTlJGX1JBRElPX0lOVF9GUkFNRVNUQVJUX01BU0sgPSBSQURJT19JTlRFTlNFVF9GUkFNRVNUQVJUX01zaywgLyoqPCBNYXNrIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYW4gaW50ZXJydXB0IG9uIEZSQU1FU1RBUlQgZXZlbnQuICovDQorICAgIE5SRl9SQURJT19JTlRfRURFTkRfTUFTSyAgICAgID0gUkFESU9fSU5URU5TRVRfRURFTkRfTXNrLCAgICAgIC8qKjwgTWFzayBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFuIGludGVycnVwdCBvbiBFREVORCBldmVudC4gKi8NCisgICAgTlJGX1JBRElPX0lOVF9CQ01BVENIX01BU0sgICAgPSBSQURJT19JTlRFTlNFVF9CQ01BVENIX01zaywgICAgLyoqPCBNYXNrIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYW4gaW50ZXJydXB0IG9uIEJDTUFUQ0ggZXZlbnQuICovDQorfSBucmZfcmFkaW9faW50X21hc2tfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcmFkaW9fc2hvcnRfbWFza190DQorICogQGJyaWVmIFR5cGVzIG9mIFJBRElPIHNob3J0Y3V0cy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9SQURJT19TSE9SVF9SRUFEWV9TVEFSVF9NQVNLICAgICAgICA9IFJBRElPX1NIT1JUU19SRUFEWV9TVEFSVF9Nc2ssICAgICAgICAvKio8IE1hc2sgZm9yIHNldHRpbmcgc2hvcnRjdXQgYmV0d2VlbiBFVkVOVF9SRUFEWSBhbmQgVEFTS19TVEFSVC4gKi8NCisgICAgTlJGX1JBRElPX1NIT1JUX0FERFJFU1NfUlNTSVNUQVJUX01BU0sgID0gUkFESU9fU0hPUlRTX0FERFJFU1NfUlNTSVNUQVJUX01zaywgIC8qKjwgTWFzayBmb3Igc2V0dGluZyBzaG9ydGN1dCBiZXR3ZWVuIEVWRU5UX0FERFJFU1MgYW5kIFRBU0tfUlNTSVNUQVJULiAqLw0KKyAgICBOUkZfUkFESU9fU0hPUlRfRU5EX0RJU0FCTEVfTUFTSyAgICAgICAgPSBSQURJT19TSE9SVFNfRU5EX0RJU0FCTEVfTXNrLCAgICAgICAgLyoqPCBNYXNrIGZvciBzZXR0aW5nIHNob3J0Y3V0IGJldHdlZW4gRVZFTlRfRU5EIGFuZCBUQVNLX0RJU0FCTEUuICovDQorICAgIE5SRl9SQURJT19TSE9SVF9FTkRfU1RBUlRfTUFTSyAgICAgICAgICA9IFJBRElPX1NIT1JUU19FTkRfU1RBUlRfTXNrLCAgICAgICAgICAvKio8IE1hc2sgZm9yIHNldHRpbmcgc2hvcnRjdXQgYmV0d2VlbiBFVkVOVF9FTkQgYW5kIFRBU0tfU1RBUlQuICovDQorICAgIE5SRl9SQURJT19TSE9SVF9DQ0FJRExFX1RYRU5fTUFTSyAgICAgICA9IFJBRElPX1NIT1JUU19DQ0FJRExFX1RYRU5fTXNrLCAgICAgICAvKio8IE1hc2sgZm9yIHNldHRpbmcgc2hvcnRjdXQgYmV0d2VlbiBFVkVOVF9DQ0FJRExFIGFuZCBUQVNLX1RYRU4uICovDQorICAgIE5SRl9SQURJT19TSE9SVF9ESVNBQkxFRF9UWEVOX01BU0sgICAgICA9IFJBRElPX1NIT1JUU19ESVNBQkxFRF9UWEVOX01zaywgICAgICAvKio8IE1hc2sgZm9yIHNldHRpbmcgc2hvcnRjdXQgYmV0d2VlbiBFVkVOVF9ESVNBQkxFRCBhbmQgVEFTS19UWEVOLiAqLw0KKyAgICBOUkZfUkFESU9fU0hPUlRfRlJBTUVTVEFSVF9CQ1NUQVJUX01BU0sgPSBSQURJT19TSE9SVFNfRlJBTUVTVEFSVF9CQ1NUQVJUX01zaywgLyoqPCBNYXNrIGZvciBzZXR0aW5nIHNob3J0Y3V0IGJldHdlZW4gRVZFTlRfRlJBTUVTVEFSVCBhbmQgVEFTS19CQ1NUQVJULiAqLw0KK30gbnJmX3JhZGlvX3Nob3J0X21hc2tfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcmFkaW9fY2NhX21vZGVfdA0KKyAqIEBicmllZiBUeXBlcyBvZiBSQURJTyBDbGVhciBDaGFubmVsIEFzc2Vzc21lbnQgbW9kZXMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUkFESU9fQ0NBX01PREVfRUQgICAgICAgICAgICAgPSBSQURJT19DQ0FDVFJMX0NDQU1PREVfRWRNb2RlLCAgICAgICAgICAgLyoqPCBFbmVyZ3kgQWJvdmUgVGhyZXNob2xkLiBXaWxsIHJlcG9ydCBidXN5IHdoZW5ldmVyIGVuZXJneSBpcyBkZXRlY3RlZCBhYm92ZSBzZXQgdGhyZXNob2xkLiAqLw0KKyAgICBOUkZfUkFESU9fQ0NBX01PREVfQ0FSUklFUiAgICAgICAgPSBSQURJT19DQ0FDVFJMX0NDQU1PREVfQ2Fycmllck1vZGUsICAgICAgLyoqPCBDYXJyaWVyIFNlZW4uIFdpbGwgcmVwb3J0IGJ1c3kgd2hlbmV2ZXIgY29tcGxpYW50IElFRUUgODAyLjE1LjQgc2lnbmFsIGlzIHNlZW4uICovDQorICAgIE5SRl9SQURJT19DQ0FfTU9ERV9DQVJSSUVSX0FORF9FRCA9IFJBRElPX0NDQUNUUkxfQ0NBTU9ERV9DYXJyaWVyQW5kRWRNb2RlLCAvKio8IEVuZXJneSBBYm92ZSBUaHJlc2hvbGQgQU5EIENhcnJpZXIgU2Vlbi4gKi8NCisgICAgTlJGX1JBRElPX0NDQV9NT0RFX0NBUlJJRVJfT1JfRUQgID0gUkFESU9fQ0NBQ1RSTF9DQ0FNT0RFX0NhcnJpZXJPckVkTW9kZSwgIC8qKjwgRW5lcmd5IEFib3ZlIFRocmVzaG9sZCBPUiBDYXJyaWVyIFNlZW4uICovDQorfSBucmZfcmFkaW9fY2NhX21vZGVfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcmFkaW9fc3RhdGVfdA0KKyAqIEBicmllZiBUeXBlcyBvZiBSQURJTyBTdGF0ZXMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUkFESU9fU1RBVEVfRElTQUJMRUQgICA9IFJBRElPX1NUQVRFX1NUQVRFX0Rpc2FibGVkLCAgLyoqPCBObyBvcGVyYXRpb25zIGFyZSBnb2luZyBvbiBpbnNpZGUgdGhlIHJhZGlvIGFuZCB0aGUgcG93ZXIgY29uc3VtcHRpb24gaXMgYXQgYSBtaW5pbXVtLiAqLw0KKyAgICBOUkZfUkFESU9fU1RBVEVfUlhfUlUgICAgICA9IFJBRElPX1NUQVRFX1NUQVRFX1J4UnUsICAgICAgLyoqPCBUaGUgcmFkaW8gaXMgcmFtcGluZyB1cCBhbmQgcHJlcGFyaW5nIGZvciByZWNlcHRpb24uICovDQorICAgIE5SRl9SQURJT19TVEFURV9SWF9JRExFICAgID0gUkFESU9fU1RBVEVfU1RBVEVfUnhJZGxlLCAgICAvKio8IFRoZSByYWRpbyBpcyByZWFkeSBmb3IgcmVjZXB0aW9uIHRvIHN0YXJ0LiAqLw0KKyAgICBOUkZfUkFESU9fU1RBVEVfUlggICAgICAgICA9IFJBRElPX1NUQVRFX1NUQVRFX1J4LCAgICAgICAgLyoqPCBSZWNlcHRpb24gaGFzIGJlZW4gc3RhcnRlZC4gKi8NCisgICAgTlJGX1JBRElPX1NUQVRFX1JYX0RJU0FCTEUgPSBSQURJT19TVEFURV9TVEFURV9SeERpc2FibGUsIC8qKjwgVGhlIHJhZGlvIGlzIGRpc2FibGluZyB0aGUgcmVjZWl2ZXIuICovDQorICAgIE5SRl9SQURJT19TVEFURV9UWF9SVSAgICAgID0gUkFESU9fU1RBVEVfU1RBVEVfVHhSdSwgICAgICAvKio8IFRoZSByYWRpbyBpcyByYW1waW5nIHVwIGFuZCBwcmVwYXJpbmcgZm9yIHRyYW5zbWlzc2lvbi4gKi8NCisgICAgTlJGX1JBRElPX1NUQVRFX1RYX0lETEUgICAgPSBSQURJT19TVEFURV9TVEFURV9UeElkbGUsICAgIC8qKjwgVGhlIHJhZGlvIGlzIHJlYWR5IGZvciB0cmFuc21pc3Npb24gdG8gc3RhcnQuICovDQorICAgIE5SRl9SQURJT19TVEFURV9UWCAgICAgICAgID0gUkFESU9fU1RBVEVfU1RBVEVfVHgsICAgICAgICAvKio8IFRoZSByYWRpbyBpcyB0cmFuc21pdHRpbmcgYSBwYWNrZXQuICovDQorICAgIE5SRl9SQURJT19TVEFURV9UWF9ESVNBQkxFID0gUkFESU9fU1RBVEVfU1RBVEVfVHhEaXNhYmxlLCAvKio8IFRoZSByYWRpbyBpcyBkaXNhYmxpbmcgdGhlIHRyYW5zbWl0dGVyLiAqLw0KK30gbnJmX3JhZGlvX3N0YXRlX3Q7DQorDQorLyoqDQorICogQGVudW0gbnJmX3JhZGlvX2NyY19zdGF0dXNfdA0KKyAqIEBicmllZiBUeXBlcyBvZiBDUkMgc3RhdHVzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1JBRElPX0NSQ19TVEFUVVNfRVJST1IgPSBSQURJT19DUkNTVEFUVVNfQ1JDU1RBVFVTX0NSQ0Vycm9yLCAvKio8IFBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBlcnJvci4gKi8NCisgICAgTlJGX1JBRElPX0NSQ19TVEFUVVNfT0sgICAgPSBSQURJT19DUkNTVEFUVVNfQ1JDU1RBVFVTX0NSQ09rLCAgICAvKio8IFBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBvay4gKi8NCit9IG5yZl9yYWRpb19jcmNfc3RhdHVzX3Q7DQorDQorLyoqDQorICogQGVudW0gbnJmX3JhZGlvX21vZGVfdA0KKyAqIEBicmllZiBUeXBlcyBvZiBSQURJTyBtb2RlcyAoZGF0YSByYXRlIGFuZCBtb2R1bGF0aW9uKS4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9SQURJT19NT0RFX05SRl8xTUJJVCAgICAgICAgICA9IFJBRElPX01PREVfTU9ERV9OcmZfMU1iaXQsICAgICAgICAgIC8qKjwgMU1iaXQvcyBOb3JkaWMgcHJvcHJpZXRhcnkgcmFkaW8gbW9kZS4gKi8NCisgICAgTlJGX1JBRElPX01PREVfTlJGXzJNQklUICAgICAgICAgID0gUkFESU9fTU9ERV9NT0RFX05yZl8yTWJpdCwgICAgICAgICAgLyoqPCAyTWJpdC9zIE5vcmRpYyBwcm9wcmlldGFyeSByYWRpbyBtb2RlLiAqLw0KKyAgICBOUkZfUkFESU9fTU9ERV9CTEVfMU1CSVQgICAgICAgICAgPSBSQURJT19NT0RFX01PREVfQmxlXzFNYml0LCAgICAgICAgICAvKio8IDEgTWJpdC9zIEJsdWV0b290aCBMb3cgRW5lcmd5LiAqLw0KKyAgICBOUkZfUkFESU9fTU9ERV9CTEVfMk1CSVQgICAgICAgICAgPSBSQURJT19NT0RFX01PREVfQmxlXzJNYml0LCAgICAgICAgICAvKio8IDIgTWJpdC9zIEJsdWV0b290aCBMb3cgRW5lcmd5LiAqLw0KKyAgICBOUkZfUkFESU9fTU9ERV9JRUVFODAyMTU0XzI1MEtCSVQgPSBSQURJT19NT0RFX01PREVfSWVlZTgwMjE1NF8yNTBLYml0LCAvKio8IElFRUUgODAyLjE1LjQtMjAwNiAyNTAga2JpdC9zLiAqLw0KK30gbnJmX3JhZGlvX21vZGVfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcmFkaW9fcHJlYW1ibGVfbGVuZ3RoX3QNCisgKiBAYnJpZWYgVHlwZXMgb2YgcHJlYW1ibGUgbGVuZ3RoLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1JBRElPX1BSRUFNQkxFX0xFTkdUSF84QklUICAgICAgID0gUkFESU9fUENORjBfUExFTl84Yml0LCAgICAgIC8qKjwgOC1iaXQgcHJlYW1ibGUuICovDQorICAgIE5SRl9SQURJT19QUkVBTUJMRV9MRU5HVEhfMTZCSVQgICAgICA9IFJBRElPX1BDTkYwX1BMRU5fMTZiaXQsICAgICAvKio8IDE2LWJpdCBwcmVhbWJsZS4gKi8NCisgICAgTlJGX1JBRElPX1BSRUFNQkxFX0xFTkdUSF8zMkJJVF9aRVJPID0gUkFESU9fUENORjBfUExFTl8zMmJpdFplcm8sIC8qKjwgMzItYml0IHplcm8gcHJlYW1ibGUgdXNlZCBmb3IgSUVFRSA4MDIuMTUuNC4gKi8NCisgICAgTlJGX1JBRElPX1BSRUFNQkxFX0xFTkdUSF9MT05HX1JBTkdFID0gUkFESU9fUENORjBfUExFTl9Mb25nUmFuZ2UsIC8qKjwgUHJlYW1ibGUgLSB1c2VkIGZvciBCVExFIExvbmcgUmFuZ2UuICovDQorfSBucmZfcmFkaW9fcHJlYW1ibGVfbGVuZ3RoX3Q7DQorDQorLyoqDQorICogQGVudW0gbnJmX3JhZGlvX2NyY19pbmNsdWRlc19hZGRyX3QNCisgKiBAYnJpZWYgVHlwZXMgb2YgQ1JDIGNhbGN1bGF0b25zIHJlZ2FyZGluZyBhZGRyZXNzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1JBRElPX0NSQ19JTkNMVURFU19BRERSX0lOQ0xVREUgICAgPSBSQURJT19DUkNDTkZfU0tJUEFERFJfSW5jbHVkZSwgICAgLyoqPCBDUkMgY2FsY3VsYXRpb24gaW5jbHVkZXMgYWRkcmVzcyBmaWVsZC4gKi8NCisgICAgTlJGX1JBRElPX0NSQ19JTkNMVURFU19BRERSX1NLSVAgICAgICAgPSBSQURJT19DUkNDTkZfU0tJUEFERFJfU2tpcCwgICAgICAgLyoqPCBDUkMgY2FsY3VsYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhZGRyZXNzIGZpZWxkLiAqLw0KKyAgICBOUkZfUkFESU9fQ1JDX0lOQ0xVREVTX0FERFJfSUVFRTgwMjE1NCA9IFJBRElPX0NSQ0NORl9TS0lQQUREUl9JZWVlODAyMTU0LCAvKio8IENSQyBjYWxjdWxhdGlvbiBhcyBwZXIgODAyLjE1LjQgc3RhbmRhcmQuICovDQorfSBucmZfcmFkaW9fY3JjX2luY2x1ZGVzX2FkZHJfdDsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGVuYWJsaW5nIGludGVycnVwdHMuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19pbnRfbWFzayAgICAgICAgICAgICAgTWFzayBvZiBpbnRlcnJ1cHRzLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19pbnRfZW5hYmxlKHVpbnQzMl90IHJhZGlvX2ludF9tYXNrKQ0KK3sNCisgICAgTlJGX1JBRElPLT5JTlRFTlNFVCA9IHJhZGlvX2ludF9tYXNrOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBpbnRlcnJ1cHRzLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9faW50X21hc2sgICAgICAgICAgICAgIE1hc2sgb2YgaW50ZXJydXB0cy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9faW50X2Rpc2FibGUodWludDMyX3QgcmFkaW9faW50X21hc2spDQorew0KKyAgICBOUkZfUkFESU8tPklOVEVOQ0xSID0gcmFkaW9faW50X21hc2s7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBpbnRlcnJ1cHQuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19pbnRfbWFzayAgICAgICAgICAgICAgSW50ZXJydXB0Lg0KKyAqDQorICogQHJldHZhbCAgICAgdHJ1ZSAgICAgICAgICAgICAgICAgICBJZiB0aGUgaW50ZXJydXB0IGlzIG5vdCBlbmFibGVkLg0KKyAqIEByZXR2YWwgICAgIGZhbHNlICAgICAgICAgICAgICAgICAgSWYgdGhlIGludGVycnVwdCBpcyBlbmFibGVkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl9yYWRpb19pbnRfZ2V0KG5yZl9yYWRpb19pbnRfbWFza190IHJhZGlvX2ludF9tYXNrKQ0KK3sNCisgICAgcmV0dXJuIChib29sKShOUkZfUkFESU8tPklOVEVOQ0xSICYgcmFkaW9faW50X21hc2spOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgdGhlIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyB0YXNrLg0KKyAqDQorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSB0aGUgUFBJIG1vZHVsZS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX3Rhc2sgICAgICAgICAgICAgIFRhc2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90ICpucmZfcmFkaW9fdGFza19hZGRyZXNzX2dldChucmZfcmFkaW9fdGFza190IHJhZGlvX3Rhc2spDQorew0KKyAgICByZXR1cm4gKHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX1JBRElPICsgcmFkaW9fdGFzayk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBhIHNwZWNpZmljIHRhc2suDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb190YXNrICAgICAgICAgICAgICBUYXNrLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb190YXNrX3RyaWdnZXIobnJmX3JhZGlvX3Rhc2tfdCByYWRpb190YXNrKQ0KK3sNCisgICAgKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfUkFESU8gKyByYWRpb190YXNrKSkgPSBOUkZfUkFESU9fVEFTS19TRVQ7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgZXZlbnQuDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IHRoZSBQUEkgbW9kdWxlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fZXZlbnQgICAgICAgICAgICAgIEV2ZW50Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCAqbnJmX3JhZGlvX2V2ZW50X2FkZHJlc3NfZ2V0KG5yZl9yYWRpb19ldmVudF90IHJhZGlvX2V2ZW50KQ0KK3sNCisgICAgcmV0dXJuICh1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9SQURJTyArIHJhZGlvX2V2ZW50KTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjbGVhcmluZyBhIHNwZWNpZmljIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fZXZlbnQgICAgICAgICAgICAgIEV2ZW50Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19ldmVudF9jbGVhcihucmZfcmFkaW9fZXZlbnRfdCByYWRpb19ldmVudCkNCit7DQorICAgICooKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX1JBRElPICsgcmFkaW9fZXZlbnQpKSA9IE5SRl9SQURJT19FVkVOVF9DTEVBUjsNCisjaWYgX19DT1JURVhfTSA9PSAweDA0DQorICAgIHZvbGF0aWxlIHVpbnQzMl90IGR1bW15ID0gKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfUkFESU8gKyByYWRpb19ldmVudCkpOw0KKyAgICAodm9pZClkdW1teTsNCisjZW5kaWYNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fZXZlbnQgICAgICAgICAgICAgIEV2ZW50Lg0KKyAqDQorICogQHJldHZhbCAgICAgdHJ1ZSAgICAgICAgICAgICAgIElmIHRoZSBldmVudCBpcyBub3Qgc2V0Lg0KKyAqIEByZXR2YWwgICAgIGZhbHNlICAgICAgICAgICAgICBJZiB0aGUgZXZlbnQgaXMgc2V0Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl9yYWRpb19ldmVudF9nZXQobnJmX3JhZGlvX2V2ZW50X3QgcmFkaW9fZXZlbnQpDQorew0KKyAgICByZXR1cm4gKGJvb2wpICogKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9SQURJTyArIHJhZGlvX2V2ZW50KSk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBzaG9ydGN1dHMuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19zaG9ydF9tYXNrICAgICAgICAgICAgICBNYXNrIG9mIHNob3J0Y3V0cy4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19zaG9ydHNfZW5hYmxlKHVpbnQzMl90IHJhZGlvX3Nob3J0X21hc2spDQorew0KKyAgICBOUkZfUkFESU8tPlNIT1JUUyB8PSByYWRpb19zaG9ydF9tYXNrOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNsZWFyaW5nIHNob3J0Y3V0cy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX3Nob3J0X21hc2sgICAgICAgICAgICAgIE1hc2sgb2Ygc2hvcnRjdXRzLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX3Nob3J0c19kaXNhYmxlKHVpbnQzMl90IHJhZGlvX3Nob3J0X21hc2spDQorew0KKyAgICBOUkZfUkFESU8tPlNIT1JUUyAmPSB+cmFkaW9fc2hvcnRfbWFzazsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIHNob3J0Y3V0cy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX3Nob3J0X21hc2sgICAgICAgICAgICAgTWFzayBvZiBzaG9ydGN1dHMuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fc2hvcnRzX3NldCh1aW50MzJfdCByYWRpb19zaG9ydF9tYXNrKQ0KK3sNCisgICAgTlJGX1JBRElPLT5TSE9SVFMgPSByYWRpb19zaG9ydF9tYXNrOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgc2hvcnRjdXRzLg0KKyAqDQorICogQHJldHVybiAgTWFzayBvZiBzaG9ydGN1dHMuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3JhZGlvX3Nob3J0c19nZXQodm9pZCkNCit7DQorICAgIHJldHVybiBOUkZfUkFESU8tPlNIT1JUUzsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIHByZXNlbnQgc3RhdGUgb2YgdGhlIHJhZGlvIG1vZHVsZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgbnJmX3JhZGlvX3N0YXRlX3QgbnJmX3JhZGlvX3N0YXRlX2dldCh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIChucmZfcmFkaW9fc3RhdGVfdCkgTlJGX1JBRElPLT5TVEFURTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIFBhY2tldCBQb2ludGVyIHRvIGdpdmVuIGxvY2F0aW9uIGluIG1lbW9yeS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfcmFkaW9fcGFja2V0X3B0ciAgICAgICAgICAgUG9pbnRlciB0byB0eCBvciByeCBwYWNrZXQgYnVmZmVyLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19wYWNrZXRfcHRyX3NldChjb25zdCB2b2lkICpwX3JhZGlvX3BhY2tldF9wdHIpDQorew0KKyAgICBOUkZfUkFESU8tPlBBQ0tFVFBUUiA9ICh1aW50MzJfdCkgcF9yYWRpb19wYWNrZXRfcHRyOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgQ1JDIHN0YXR1cyBvZiBsYXN0IHJlY2VpdmVkIHBhY2tldC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgbnJmX3JhZGlvX2NyY19zdGF0dXNfdCBucmZfcmFkaW9fY3JjX3N0YXR1c19nZXQodm9pZCkNCit7DQorICAgIHJldHVybiAobnJmX3JhZGlvX2NyY19zdGF0dXNfdCkgTlJGX1JBRElPLT5DUkNTVEFUVVM7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBDbGVhciBDaGFubmVsIEFzc2Vzc21lbnQgbW9kZS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX2NjYV9tb2RlICAgICAgICAgICAgICAgIE1vZGUgb2YgQ0NBDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2NjYV9tb2RlX3NldChucmZfcmFkaW9fY2NhX21vZGVfdCByYWRpb19jY2FfbW9kZSkNCit7DQorICAgIE5SRl9SQURJTy0+Q0NBQ1RSTCAmPSAoflJBRElPX0NDQUNUUkxfQ0NBTU9ERV9Nc2spOw0KKyAgICBOUkZfUkFESU8tPkNDQUNUUkwgfD0gKCh1aW50MzJfdCkgcmFkaW9fY2NhX21vZGUgPDwgUkFESU9fQ0NBQ1RSTF9DQ0FNT0RFX1Bvcyk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBDQ0EgRW5lcmd5IEJ1c3kgVGhyZXNob2xkLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fY2NhX2VkX3RocmVzaG9sZCAgICAgICAgRW5lcmd5IERldGVjdGlvbiB0aHJlc2hvbGQgdmFsdWUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2NjYV9lZF90aHJlc2hvbGRfc2V0KHVpbnQ4X3QgcmFkaW9fY2NhX2VkX3RocmVzaG9sZCkNCit7DQorICAgIE5SRl9SQURJTy0+Q0NBQ1RSTCAmPSAoflJBRElPX0NDQUNUUkxfQ0NBRURUSFJFU19Nc2spOw0KKyAgICBOUkZfUkFESU8tPkNDQUNUUkwgfD0gKCh1aW50MzJfdCkgcmFkaW9fY2NhX2VkX3RocmVzaG9sZCA8PCBSQURJT19DQ0FDVFJMX0NDQUVEVEhSRVNfUG9zKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIENDQSBDb3JyZWxhdG9yIEJ1c3kgVGhyZXNob2xkLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fY2NhX2NvcnJfdGhyZXNob2xkICAgICAgQ29ycmVsYXRvciBCdXN5IFRocmVzaG9sZC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fY2NhX2NvcnJfdGhyZXNob2xkX3NldCh1aW50OF90IHJhZGlvX2NjYV9jb3JyX3RocmVzaG9sZF9zZXQpDQorew0KKyAgICBOUkZfUkFESU8tPkNDQUNUUkwgJj0gKH5SQURJT19DQ0FDVFJMX0NDQUNPUlJUSFJFU19Nc2spOw0KKyAgICBOUkZfUkFESU8tPkNDQUNUUkwgfD0gKCh1aW50MzJfdCkgcmFkaW9fY2NhX2NvcnJfdGhyZXNob2xkX3NldCA8PCBSQURJT19DQ0FDVFJMX0NDQUNPUlJUSFJFU19Qb3MpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgbGltaXQgb2Ygb2NjdXJhbmNlcyBhYm92ZSBDb3JyZWxhdG9yIFRocmVzaG9sZC4NCisgKg0KKyAqIFdoZW4gbm90IGVxdWFsIHRvIHplcm8gdGhlIGNvcnJlbGF0b3IgYmFzZWQgc2lnbmFsIGRldGVjdCBpcyBlbmFibGVkLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fY2NhX2NvcnJfY250ICAgICAgICAgICBMaW1pdCBvZiBvY2N1cmFuY2VzIGFib3ZlIENvcnJlbGF0b3IgVGhyZXNob2xkDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2NjYV9jb3JyX2NvdW50ZXJfc2V0KHVpbnQ4X3QgcmFkaW9fY2NhX2NvcnJfY291bnRlcl9zZXQpDQorew0KKyAgICBOUkZfUkFESU8tPkNDQUNUUkwgJj0gKH5SQURJT19DQ0FDVFJMX0NDQUNPUlJDTlRfTXNrKTsNCisgICAgTlJGX1JBRElPLT5DQ0FDVFJMIHw9ICgodWludDMyX3QpIHJhZGlvX2NjYV9jb3JyX2NvdW50ZXJfc2V0IDw8IFJBRElPX0NDQUNUUkxfQ0NBQ09SUkNOVF9Qb3MpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgUmFkaW8gZGF0YSByYXRlIGFuZCBtb2R1bGF0aW9uIHNldHRpbmdzLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fbW9kZSAgICAgICAgICAgICAgICAgICBNb2RlIG9mIHJhZGlvIGRhdGEgcmF0ZSBhbmQgbW9kdWxhdGlvbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fbW9kZV9zZXQobnJmX3JhZGlvX21vZGVfdCByYWRpb19tb2RlKQ0KK3sNCisgICAgTlJGX1JBRElPLT5NT0RFID0gKCh1aW50MzJfdCkgcmFkaW9fbW9kZSA8PCBSQURJT19NT0RFX01PREVfUG9zKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIExlbmd0aCBvZiBMRU5HVEggZmllbGQgaW4gbnVtYmVyIG9mIGJpdHMuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19sZW5ndGhfbGVuZ3RoICAgICAgICAgIExlbmd0aCBvZiBMRU5HVEggZmllbGQgaW4gbnVtYmVyIG9mIGJpdHMuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2NvbmZpZ19sZW5ndGhfZmllbGRfbGVuZ3RoX3NldCh1aW50OF90IHJhZGlvX2xlbmd0aF9sZW5ndGgpDQorew0KKyAgICBOUkZfUkFESU8tPlBDTkYwICY9ICh+UkFESU9fUENORjBfTEZMRU5fTXNrKTsNCisgICAgTlJGX1JBRElPLT5QQ05GMCB8PSAoKHVpbnQzMl90KSByYWRpb19sZW5ndGhfbGVuZ3RoIDw8IFJBRElPX1BDTkYwX0xGTEVOX1Bvcyk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBsZW5ndGggb2YgcHJlYW1ibGUgb24gYWlyLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fcHJlYW1ibGVfbGVuZ3RoICAgICAgICBMZW5ndGggb2YgcHJlYW1ibGUgb24gYWlyLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19jb25maWdfcHJlYW1ibGVfbGVuZ3RoX3NldCgNCisgICAgbnJmX3JhZGlvX3ByZWFtYmxlX2xlbmd0aF90IHJhZGlvX3ByZWFtYmxlX2xlbmd0aCkNCit7DQorICAgIE5SRl9SQURJTy0+UENORjAgJj0gKH5SQURJT19QQ05GMF9QTEVOX01zayk7DQorICAgIE5SRl9SQURJTy0+UENORjAgfD0gKCh1aW50MzJfdCkgcmFkaW9fcHJlYW1ibGVfbGVuZ3RoIDw8IFJBRElPX1BDTkYwX1BMRU5fUG9zKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGlmIExFTkdUSCBmaWVsZCBjb250YWlucyBDUkMuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19sZW5ndGhfY29udGFpbnNfY3JjICAgIFRydWUgaWYgTEVOR1RIIGZpZWxkIHNob3VsZCBjb250YWluIENSQy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fY29uZmlnX2NyY19pbmNsdWRlZF9zZXQoYm9vbCByYWRpb19sZW5ndGhfY29udGFpbnNfY3JjKQ0KK3sNCisgICAgTlJGX1JBRElPLT5QQ05GMCAmPSAoflJBRElPX1BDTkYwX0NSQ0lOQ19Nc2spOw0KKyAgICBOUkZfUkFESU8tPlBDTkYwIHw9ICgodWludDMyX3QpIHJhZGlvX2xlbmd0aF9jb250YWluc19jcmMgPDwgUkFESU9fUENORjBfQ1JDSU5DX1Bvcyk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBtYXhpbXVtIGxlbmd0aCBvZiBwYWNrZXQgcGF5bG9hZC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX21heF9wYWNrZXRfbGVuZ3RoICAgICAgTWF4aW11bSBsZW5ndGggb2YgcGFja2V0IHBheWxvYWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2NvbmZpZ19tYXhfbGVuZ3RoX3NldCh1aW50OF90IHJhZGlvX21heF9wYWNrZXRfbGVuZ3RoKQ0KK3sNCisgICAgTlJGX1JBRElPLT5QQ05GMSAmPSAoflJBRElPX1BDTkYxX01BWExFTl9Nc2spOw0KKyAgICBOUkZfUkFESU8tPlBDTkYxIHw9ICgodWludDMyX3QpIHJhZGlvX21heF9wYWNrZXRfbGVuZ3RoIDw8IFJBRElPX1BDTkYxX01BWExFTl9Qb3MpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgQ1JDIGxlbmd0aC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX2NyY19sZW5ndGggICAgICAgICAgICAgQ1JDIGxlbmd0aCBpbiBudW1iZXIgb2YgYnl0ZXMgWzAtM10uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2NyY19sZW5ndGhfc2V0KHVpbnQ4X3QgcmFkaW9fY3JjX2xlbmd0aCkNCit7DQorICAgIE5SRl9SQURJTy0+Q1JDQ05GICY9ICh+UkFESU9fQ1JDQ05GX0xFTl9Nc2spOw0KKyAgICBOUkZfUkFESU8tPkNSQ0NORiB8PSAoKHVpbnQzMl90KSByYWRpb19jcmNfbGVuZ3RoIDw8IFJBRElPX0NSQ0NORl9MRU5fUG9zKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGlmIGFkZHJlc3MgZmlsZWQgc2hvdWxkIGJlIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkIGZyb20gQ1JDIGNhbGN1bGF0aW9uLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fY3JjX3NraXBfYWRkcmVzcyAgICAgICBJbmNsdWRlIG9yIGV4Y2x1ZGUgcGFja2V0IGFkZHJlc3MgZmllbGQgb3V0IG9mIENSQy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fY3JjX2luY2x1ZGVzX2FkZHJlc3Nfc2V0KA0KKyAgICBucmZfcmFkaW9fY3JjX2luY2x1ZGVzX2FkZHJfdCByYWRpb19jcmNfc2tpcF9hZGRyZXNzKQ0KK3sNCisgICAgTlJGX1JBRElPLT5DUkNDTkYgJj0gKH5SQURJT19DUkNDTkZfU0tJUEFERFJfTXNrKTsNCisgICAgTlJGX1JBRElPLT5DUkNDTkYgfD0gKCh1aW50MzJfdCkgcmFkaW9fY3JjX3NraXBfYWRkcmVzcyA8PCBSQURJT19DUkNDTkZfU0tJUEFERFJfUG9zKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIENSQyBwb2x5bm9taW5hbC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX2NyY19wb2x5bm9taW5hbCAgICAgICAgQ1JDIHBvbHlub21pbmFsIHRvIHNldC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fY3JjX3BvbHlub21pbmFsX3NldCh1aW50MzJfdCByYWRpb19jcmNfcG9seW5vbWluYWwpDQorew0KKyAgICBOUkZfUkFESU8tPkNSQ1BPTFkgPSAocmFkaW9fY3JjX3BvbHlub21pbmFsIDw8IFJBRElPX0NSQ1BPTFlfQ1JDUE9MWV9Qb3MpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgUlNTSSBzYW1wbGUgcmVzdWx0Lg0KKyAqDQorICogQG5vdGUgVGhlIHZhbHVlIGlzIGEgcG9zaXRpdmUgdmFsdWUgd2hpbGUgdGhlIGFjdHVhbCByZWNlaXZlZCBzaWduYWwgaXMgYSBuZWdhdGl2ZSB2YWx1ZS4NCisgKiAgICAgICBBY3R1YWwgcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIGlzIHRoZXJlZm9yZSBhcyBmb2xsb3dzOg0KKyAqICAgICAgIHJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aCA9IC0gcmV0dXJuZWRfdmFsdWUgZEJtIC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBucmZfcmFkaW9fcnNzaV9zYW1wbGVfZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gKHVpbnQ4X3QpKCgoTlJGX1JBRElPLT5SU1NJU0FNUExFKSAmIFJBRElPX1JTU0lTQU1QTEVfUlNTSVNBTVBMRV9Nc2spID4+DQorICAgICAgICAgICAgICAgICAgICAgUkFESU9fUlNTSVNBTVBMRV9SU1NJU0FNUExFX1Bvcyk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBNQUMgSGVhZGVyIE1hdGNoIFVuaXQgc2VhcmNoIHBhdHRlcm4gY29uZmlndXJhdGlvbi4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX21obXVfc2VhcmNoX3BhdHRlcm4gICAgU2VhcmNoIFBhdHRlcm4gQ29uZmlndXJhdGlvbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fbWhtdV9zZWFyY2hfcGF0dGVybl9zZXQodWludDMyX3QgcmFkaW9fbWhtdV9zZWFyY2hfcGF0dGVybikNCit7DQorICAgIE5SRl9SQURJTy0+TUhSTUFUQ0hDT05GID0gcmFkaW9fbWhtdV9zZWFyY2hfcGF0dGVybjsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIE1BQyBIZWFkZXIgTWF0Y2ggVW5pdCBwYXR0ZXJuIG1hc2sgY29uZmlndXJhdGlvbi4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX21obXVfcGF0dGVybl9tYXNrICAgICAgUGF0dGVybiBtYXNrLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19taG11X3BhdHRlcm5fbWFza19zZXQodWludDMyX3QgcmFkaW9fbWhtdV9wYXR0ZXJuX21hc2spDQorew0KKyAgICBOUkZfUkFESU8tPk1IUk1BVENITUFTID0gcmFkaW9fbWhtdV9wYXR0ZXJuX21hc2s7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyByYWRpbyBmcmVxdWVuY3kuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19mcmVxdWVuY3kgICAgICAgICAgICAgIEZyZXF1ZW5jeSBhYm92ZSAyNDAwIE1IeiBbTUh6XQ0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19mcmVxdWVuY3lfc2V0KHVpbnQzMl90IHJhZGlvX2ZyZXF1ZW5jeSkNCit7DQorICAgIE5SRl9SQURJTy0+RlJFUVVFTkNZID0gcmFkaW9fZnJlcXVlbmN5Ow0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgcmFkaW8gZnJlcXVlbmN5Lg0KKyAqDQorICogQHJldHVybnMgRnJlcXVlbmN5IGFib3ZlIDI0MDAgTUh6IFtNSHpdDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9yYWRpb19mcmVxdWVuY3lfZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gTlJGX1JBRElPLT5GUkVRVUVOQ1k7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyByYWRpbyB0cmFuc21pdCBwb3dlci4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX3R4X3Bvd2VyICAgICAgICAgICAgICAgVHJhbnNtaXQgcG93ZXIgb2YgdGhlIHJhZGlvLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb190eF9wb3dlcl9zZXQoaW50OF90IHJhZGlvX3R4X3Bvd2VyKQ0KK3sNCisgICAgTlJGX1JBRElPLT5UWFBPV0VSID0gKHVpbnQ4X3QpIHJhZGlvX3R4X3Bvd2VyOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgSW50ZXIgRnJhbWUgU3BhY2luZw0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9faWZzICAgICAgICAgICAgICAgICAgICBJbnRlciBmcmFtZSBzcGFjaW5nIFt1c10uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2lmc19zZXQodWludDMyX3QgcmFkaW9faWZzKQ0KK3sNCisgICAgTlJGX1JBRElPLT5USUZTID0gcmFkaW9faWZzOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgQml0IGNvdW50ZXIgY29tcGFyZS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX2JjYyAgICAgICAgICAgICAgICAgICAgQml0IGNvdW50ZXIgY29tcGFyZSBbYml0c10uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2JjY19zZXQodWludDMyX3QgcmFkaW9fYmNjKQ0KK3sNCisgICAgTlJGX1JBRElPLT5CQ0MgPSByYWRpb19iY2M7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBCaXQgY291bnRlciBjb21wYXJlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfcmFkaW9fYmNjX2dldCh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIE5SRl9SQURJTy0+QkNDOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgRW5lcmd5IERldGVjdGlvbiBsZXZlbC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBucmZfcmFkaW9fZWRfc2FtcGxlX2dldCh2b2lkKQ0KK3sNCisgICAgcmV0dXJuICh1aW50OF90KSBOUkZfUkFESU8tPkVEU0FNUExFOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybSBFRCBzY2FuLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fZWRfbG9vcF9jb3VudCAgICAgICAgICBOdW1iZXIgb2YgaXRlcmF0aW9ucyBkdXJpbmcgRUQgcHJvY2VkdXJlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19lZF9sb29wX2NvdW50X3NldCh1aW50MzJfdCByYWRpb19lZF9sb29wX2NvdW50KQ0KK3sNCisgICAgTlJGX1JBRElPLT5FRENOVCA9IChyYWRpb19lZF9sb29wX2NvdW50ICYgMHgwMDFGRkZGRik7DQorfQorDQorLyoqCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgcG93ZXIgbW9kZSBvZiB0aGUgcmFkaW8gcGVyaXBoZXJhbC4KKyAqCisgKiBAcGFyYW1baW5dICByYWRpb19wb3dlciAgICAgICAgICAgICAgICAgIElmIHJhZGlvIHNob3VsZCBwb3dlcmVkIG9uLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fcG93ZXJfc2V0KGJvb2wgcmFkaW9fcG93ZXIpCit7CisgICAgTlJGX1JBRElPLT5QT1dFUiA9ICh1aW50MzJfdCkgcmFkaW9fcG93ZXI7Cit9CisKKw0KKy8qKg0KKyAqQH0NCisgKiovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBOUkZfUkFESU9fSF9fICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3JuZy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3JuZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NWJkMDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcm5nLmgKQEAgLTAsMCArMSwyNDIgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBmaWxlDQorICogQGJyaWVmIFJORyBIQUwgQVBJLg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX1JOR19IX18NCisjZGVmaW5lIE5SRl9STkdfSF9fDQorLyoqDQorICogQGRlZmdyb3VwIG5yZl9ybmdfaGFsIFJORyBIQUwNCisgKiBAew0KKyAqIEBpbmdyb3VwIG5yZl9ybmcNCisgKiBAYnJpZWYgSGFyZHdhcmUgYWNjZXNzIGxheWVyIGZvciBtYW5hZ2luZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKFJORykuDQorICovDQorDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisjaW5jbHVkZSA8c3RkYm9vbC5oPg0KKyNpbmNsdWRlICJucmYuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjZGVmaW5lIE5SRl9STkdfVEFTS19TRVQgICAgKDFVTCkNCisjZGVmaW5lIE5SRl9STkdfRVZFTlRfQ0xFQVIgKDBVTCkNCisvKioNCisgKiBAZW51bSBucmZfcm5nX3Rhc2tfdA0KKyAqIEBicmllZiBSTkcgdGFza3MuDQorICovDQordHlwZWRlZiBlbnVtIC8qbGludCAtc2F2ZSAtZTMwIC1lc3ltKDYyOCxfX0lOVEFERFJfXykgKi8NCit7DQorICAgIE5SRl9STkdfVEFTS19TVEFSVCA9IG9mZnNldG9mKE5SRl9STkdfVHlwZSwgVEFTS1NfU1RBUlQpLCAvKio8IFN0YXJ0IHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gKi8NCisgICAgTlJGX1JOR19UQVNLX1NUT1AgID0gb2Zmc2V0b2YoTlJGX1JOR19UeXBlLCBUQVNLU19TVE9QKSAgIC8qKjwgU3RvcCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICovDQorfSBucmZfcm5nX3Rhc2tfdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmxpbnQgLXJlc3RvcmUgKi8NCisNCisvKioNCisgKiBAZW51bSBucmZfcm5nX2V2ZW50X3QNCisgKiBAYnJpZWYgUk5HIGV2ZW50cy4NCisgKi8NCit0eXBlZGVmIGVudW0gLypsaW50IC1zYXZlIC1lMzAgLWVzeW0oNjI4LF9fSU5UQUREUl9fKSAqLw0KK3sNCisgICAgTlJGX1JOR19FVkVOVF9WQUxSRFkgPSBvZmZzZXRvZihOUkZfUk5HX1R5cGUsIEVWRU5UU19WQUxSRFkpIC8qKjwgTmV3IHJhbmRvbSBudW1iZXIgZ2VuZXJhdGVkIGV2ZW50LiAqLw0KK30gbnJmX3JuZ19ldmVudF90OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypsaW50IC1yZXN0b3JlICovDQorDQorLyoqDQorICogQGVudW0gbnJmX3JuZ19pbnRfbWFza190DQorICogQGJyaWVmIFJORyBpbnRlcnJ1cHRzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1JOR19JTlRfVkFMUkRZX01BU0sgPSBSTkdfSU5URU5TRVRfVkFMUkRZX01zayAvKio8IE1hc2sgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhbiBpbnRlcnJ1cHQgb24gVkFMUkRZIGV2ZW50LiAgKi8NCit9IG5yZl9ybmdfaW50X21hc2tfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcm5nX3Nob3J0X21hc2tfdA0KKyAqIEBicmllZiBUeXBlcyBvZiBSTkcgc2hvcnRjdXRzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1JOR19TSE9SVF9WQUxSRFlfU1RPUF9NQVNLID0gUk5HX1NIT1JUU19WQUxSRFlfU1RPUF9Nc2sgLyoqPCAgTWFzayBmb3Igc2V0dGluZyBzaG9ydGN1dCBiZXR3ZWVuIEVWRU5UX1ZBTFJEWSBhbmQgVEFTS19TVE9QLiAqLw0KK30gbnJmX3JuZ19zaG9ydF9tYXNrX3Q7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBlbmFibGluZyBpbnRlcnJ1cHRzLg0KKyAqDQorICogQHBhcmFtW2luXSAgcm5nX2ludF9tYXNrICAgICAgICAgICAgICBNYXNrIG9mIGludGVycnVwdHMuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JuZ19pbnRfZW5hYmxlKHVpbnQzMl90IHJuZ19pbnRfbWFzaykNCit7DQorICAgIE5SRl9STkctPklOVEVOU0VUID0gcm5nX2ludF9tYXNrOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBpbnRlcnJ1cHRzLg0KKyAqDQorICogQHBhcmFtW2luXSAgcm5nX2ludF9tYXNrICAgICAgICAgICAgICBNYXNrIG9mIGludGVycnVwdHMuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JuZ19pbnRfZGlzYWJsZSh1aW50MzJfdCBybmdfaW50X21hc2spDQorew0KKyAgICBOUkZfUk5HLT5JTlRFTkNMUiA9IHJuZ19pbnRfbWFzazsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIGludGVycnVwdC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJuZ19pbnRfbWFzayAgICAgICAgICAgICAgSW50ZXJydXB0Lg0KKyAqDQorICogQHJldHZhbCAgICAgdHJ1ZSAgICAgICAgICAgICAgICAgICBJZiB0aGUgaW50ZXJydXB0IGlzIG5vdCBlbmFibGVkLg0KKyAqIEByZXR2YWwgICAgIGZhbHNlICAgICAgICAgICAgICAgICAgSWYgdGhlIGludGVycnVwdCBpcyBlbmFibGVkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl9ybmdfaW50X2dldChucmZfcm5nX2ludF9tYXNrX3Qgcm5nX2ludF9tYXNrKQ0KK3sNCisgICAgcmV0dXJuIChib29sKShOUkZfUk5HLT5JTlRFTkNMUiAmIHJuZ19pbnRfbWFzayk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyB0aGUgYWRkcmVzcyBvZiBhIHNwZWNpZmljIHRhc2suDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IHRoZSBQUEkgbW9kdWxlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcm5nX3Rhc2sgICAgICAgICAgICAgIFRhc2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90ICpucmZfcm5nX3Rhc2tfYWRkcmVzc19nZXQobnJmX3JuZ190YXNrX3Qgcm5nX3Rhc2spDQorew0KKyAgICByZXR1cm4gKHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX1JORyArIHJuZ190YXNrKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGEgc3BlY2lmaWMgdGFzay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJuZ190YXNrICAgICAgICAgICAgICBUYXNrLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ybmdfdGFza190cmlnZ2VyKG5yZl9ybmdfdGFza190IHJuZ190YXNrKQ0KK3sNCisgICAgKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfUk5HICsgcm5nX3Rhc2spKSA9IE5SRl9STkdfVEFTS19TRVQ7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgZXZlbnQuDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IHRoZSBQUEkgbW9kdWxlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcm5nX2V2ZW50ICAgICAgICAgICAgICBFdmVudC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgKm5yZl9ybmdfZXZlbnRfYWRkcmVzc19nZXQobnJmX3JuZ19ldmVudF90IHJuZ19ldmVudCkNCit7DQorICAgIHJldHVybiAodWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfUk5HICsgcm5nX2V2ZW50KTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjbGVhcmluZyBhIHNwZWNpZmljIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSAgcm5nX2V2ZW50ICAgICAgICAgICAgICBFdmVudC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcm5nX2V2ZW50X2NsZWFyKG5yZl9ybmdfZXZlbnRfdCBybmdfZXZlbnQpDQorew0KKyAgICAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9STkcgKyBybmdfZXZlbnQpKSA9IE5SRl9STkdfRVZFTlRfQ0xFQVI7DQorI2lmIF9fQ09SVEVYX00gPT0gMHgwNA0KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBkdW1teSA9ICooKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX1JORyArIHJuZ19ldmVudCkpOw0KKyAgICAodm9pZClkdW1teTsNCisjZW5kaWYNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSAgcm5nX2V2ZW50ICAgICAgICAgICAgICBFdmVudC4NCisgKg0KKyAqIEByZXR2YWwgICAgIHRydWUgICAgICAgICAgICAgICBJZiB0aGUgZXZlbnQgaXMgbm90IHNldC4NCisgKiBAcmV0dmFsICAgICBmYWxzZSAgICAgICAgICAgICAgSWYgdGhlIGV2ZW50IGlzIHNldC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBucmZfcm5nX2V2ZW50X2dldChucmZfcm5nX2V2ZW50X3Qgcm5nX2V2ZW50KQ0KK3sNCisgICAgcmV0dXJuIChib29sKSAqICgodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfUk5HICsgcm5nX2V2ZW50KSk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBzaG9ydGN1dHMuDQorICoNCisgKiBAcGFyYW1baW5dICBybmdfc2hvcnRfbWFzayAgICAgICAgICAgICAgTWFzayBvZiBzaG9ydGN1dHMuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcm5nX3Nob3J0c19lbmFibGUodWludDMyX3Qgcm5nX3Nob3J0X21hc2spDQorew0KKyAgICBOUkZfUk5HLT5TSE9SVFMgfD0gcm5nX3Nob3J0X21hc2s7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY2xlYXJpbmcgc2hvcnRjdXRzLg0KKyAqDQorICogQHBhcmFtW2luXSAgcm5nX3Nob3J0X21hc2sgICAgICAgICAgICAgIE1hc2sgb2Ygc2hvcnRjdXRzLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JuZ19zaG9ydHNfZGlzYWJsZSh1aW50MzJfdCBybmdfc2hvcnRfbWFzaykNCit7DQorICAgIE5SRl9STkctPlNIT1JUUyAmPSB+cm5nX3Nob3J0X21hc2s7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlLg0KKyAqDQorICogQHJldHVybiAgICAgUHJldmlvdXNseSBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50OF90IG5yZl9ybmdfcmFuZG9tX3ZhbHVlX2dldCh2b2lkKQ0KK3sNCisgICAgcmV0dXJuICh1aW50OF90KShOUkZfUk5HLT5WQUxVRSAmIFJOR19WQUxVRV9WQUxVRV9Nc2spOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGVuYWJsaW5nIGRpZ2l0YWwgZXJyb3IgY29ycmVjdGlvbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcm5nX2Vycm9yX2NvcnJlY3Rpb25fZW5hYmxlKHZvaWQpDQorew0KKyAgICBOUkZfUk5HLT5DT05GSUcgfD0gUk5HX0NPTkZJR19ERVJDRU5fTXNrOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBkaWdpdGFsIGVycm9yIGNvcnJlY3Rpb24uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JuZ19lcnJvcl9jb3JyZWN0aW9uX2Rpc2FibGUodm9pZCkNCit7DQorICAgIE5SRl9STkctPkNPTkZJRyAmPSB+Uk5HX0NPTkZJR19ERVJDRU5fTXNrOw0KK30NCisvKioNCisgKkB9DQorICoqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogTlJGX1JOR19IX18gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcnRjLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwMmFjZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9ydGMuaApAQCAtMCwwICsxLDMzNCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorLyoqDQorICogQGZpbGUNCisgKiBAYnJpZWYgUlRDIEhBTCBBUEkuDQorICovDQorDQorI2lmbmRlZiBOUkZfUlRDX0gNCisjZGVmaW5lIE5SRl9SVENfSA0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBucmZfcnRjX2hhbCBSVEMgSEFMDQorICogQHsNCisgKiBAaW5ncm91cCBucmZfcnRjDQorICogQGJyaWVmIEhhcmR3YXJlIGFjY2VzcyBsYXllciBmb3IgbWFuYWdpbmcgdGhlIHJlYWwgdGltZSBjb3VudGVyIChSVEMpLg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSA8c3RkZGVmLmg+DQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCisjaW5jbHVkZSAibnJmLmgiDQorI2luY2x1ZGUgIm5yZl9hc3NlcnQuaCINCisjaW5jbHVkZSAibnJmX3BlcmlwaGVyYWxzLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqDQorICogQGJyaWVmIE1hY3JvIGZvciBnZXR0aW5nIHRoZSBudW1iZXIgb2YgY29tcGFyZSBjaGFubmVscyBhdmFpbGFibGUNCisgKiAgICAgICAgaW4gYSBnaXZlbiBSVEMgaW5zdGFuY2UuDQorICovDQorDQorI2RlZmluZSBOUkZfUlRDX0NDX0NIQU5ORUxfQ09VTlQoaWQpIENPTkNBVF8zKFJUQywgaWQsIF9DQ19OVU0pDQorDQorI2RlZmluZSBSVENfSU5QVVRfRlJFUSAzMjc2OCAvKio8IElucHV0IGZyZXF1ZW5jeSBvZiB0aGUgUlRDIGluc3RhbmNlLiAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiBNYWNybyBmb3IgY29udmVydGluZyBleHBlY3RlZCBmcmVxdWVuY3kgdG8gcHJlc2NhbGVyIHNldHRpbmcuDQorICovDQorI2RlZmluZSBSVENfRlJFUV9UT19QUkVTQ0FMRVIoRlJFUSkgKHVpbnQxNl90KSgoUlRDX0lOUFVUX0ZSRVEgLyAoRlJFUSkpIC0gMSkNCisNCisvKio8IE1hY3JvIGZvciB3cmFwcGluZyB2YWx1ZXMgdG8gUlRDIGNhcGFjaXR5LiAqLw0KKyNkZWZpbmUgUlRDX1dSQVAodmFsKSAodmFsICYgUlRDX0NPVU5URVJfQ09VTlRFUl9Nc2spDQorDQorI2RlZmluZSBSVENfQ0hBTk5FTF9JTlRfTUFTSyhjaCkgICAgKCh1aW50MzJfdClOUkZfUlRDX0lOVF9DT01QQVJFMF9NQVNLIDw8IGNoKQ0KKyNkZWZpbmUgUlRDX0NIQU5ORUxfRVZFTlRfQUREUihjaCkgIChucmZfcnRjX2V2ZW50X3QpKE5SRl9SVENfRVZFTlRfQ09NUEFSRV8wICsgY2ggKiBzaXplb2YodWludDMyX3QpKQ0KKy8qKg0KKyAqIEBlbnVtIG5yZl9ydGNfdGFza190DQorICogQGJyaWVmIFJUQyB0YXNrcy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIC8qbGludCAtc2F2ZSAtZTMwKi8NCisgICAgTlJGX1JUQ19UQVNLX1NUQVJUICAgICAgICAgICAgPSBvZmZzZXRvZihOUkZfUlRDX1R5cGUsVEFTS1NfU1RBUlQpLCAgICAgLyoqPCBTdGFydC4gKi8NCisgICAgTlJGX1JUQ19UQVNLX1NUT1AgICAgICAgICAgICAgPSBvZmZzZXRvZihOUkZfUlRDX1R5cGUsVEFTS1NfU1RPUCksICAgICAgLyoqPCBTdG9wLiAqLw0KKyAgICBOUkZfUlRDX1RBU0tfQ0xFQVIgICAgICAgICAgICA9IG9mZnNldG9mKE5SRl9SVENfVHlwZSxUQVNLU19DTEVBUiksICAgICAvKio8IENsZWFyLiAqLw0KKyAgICBOUkZfUlRDX1RBU0tfVFJJR0dFUl9PVkVSRkxPVyA9IG9mZnNldG9mKE5SRl9SVENfVHlwZSxUQVNLU19UUklHT1ZSRkxXKSwvKio8IFRyaWdnZXIgb3ZlcmZsb3cuICovDQorICAgIC8qbGludCAtcmVzdG9yZSovDQorfSBucmZfcnRjX3Rhc2tfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcnRjX2V2ZW50X3QNCisgKiBAYnJpZWYgUlRDIGV2ZW50cy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIC8qbGludCAtc2F2ZSAtZTMwKi8NCisgICAgTlJGX1JUQ19FVkVOVF9USUNLICAgICAgICA9IG9mZnNldG9mKE5SRl9SVENfVHlwZSxFVkVOVFNfVElDSyksICAgICAgIC8qKjwgVGljayBldmVudC4gKi8NCisgICAgTlJGX1JUQ19FVkVOVF9PVkVSRkxPVyAgICA9IG9mZnNldG9mKE5SRl9SVENfVHlwZSxFVkVOVFNfT1ZSRkxXKSwgICAgIC8qKjwgT3ZlcmZsb3cgZXZlbnQuICovDQorICAgIE5SRl9SVENfRVZFTlRfQ09NUEFSRV8wICAgPSBvZmZzZXRvZihOUkZfUlRDX1R5cGUsRVZFTlRTX0NPTVBBUkVbMF0pLCAvKio8IENvbXBhcmUgMCBldmVudC4gKi8NCisgICAgTlJGX1JUQ19FVkVOVF9DT01QQVJFXzEgICA9IG9mZnNldG9mKE5SRl9SVENfVHlwZSxFVkVOVFNfQ09NUEFSRVsxXSksIC8qKjwgQ29tcGFyZSAxIGV2ZW50LiAqLw0KKyAgICBOUkZfUlRDX0VWRU5UX0NPTVBBUkVfMiAgID0gb2Zmc2V0b2YoTlJGX1JUQ19UeXBlLEVWRU5UU19DT01QQVJFWzJdKSwgLyoqPCBDb21wYXJlIDIgZXZlbnQuICovDQorICAgIE5SRl9SVENfRVZFTlRfQ09NUEFSRV8zICAgPSBvZmZzZXRvZihOUkZfUlRDX1R5cGUsRVZFTlRTX0NPTVBBUkVbM10pICAvKio8IENvbXBhcmUgMyBldmVudC4gKi8NCisgICAgLypsaW50IC1yZXN0b3JlKi8NCit9IG5yZl9ydGNfZXZlbnRfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcnRjX2ludF90DQorICogQGJyaWVmIFJUQyBpbnRlcnJ1cHRzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1JUQ19JTlRfVElDS19NQVNLICAgICA9IFJUQ19JTlRFTlNFVF9USUNLX01zaywgICAgIC8qKjwgUlRDIGludGVycnVwdCBmcm9tIHRpY2sgZXZlbnQuICovDQorICAgIE5SRl9SVENfSU5UX09WRVJGTE9XX01BU0sgPSBSVENfSU5URU5TRVRfT1ZSRkxXX01zaywgICAvKio8IFJUQyBpbnRlcnJ1cHQgZnJvbSBvdmVyZmxvdyBldmVudC4gKi8NCisgICAgTlJGX1JUQ19JTlRfQ09NUEFSRTBfTUFTSyA9IFJUQ19JTlRFTlNFVF9DT01QQVJFMF9Nc2ssIC8qKjwgUlRDIGludGVycnVwdCBmcm9tIGNvbXBhcmUgZXZlbnQgb24gY2hhbm5lbCAwLiAqLw0KKyAgICBOUkZfUlRDX0lOVF9DT01QQVJFMV9NQVNLID0gUlRDX0lOVEVOU0VUX0NPTVBBUkUxX01zaywgLyoqPCBSVEMgaW50ZXJydXB0IGZyb20gY29tcGFyZSBldmVudCBvbiBjaGFubmVsIDEuICovDQorICAgIE5SRl9SVENfSU5UX0NPTVBBUkUyX01BU0sgPSBSVENfSU5URU5TRVRfQ09NUEFSRTJfTXNrLCAvKio8IFJUQyBpbnRlcnJ1cHQgZnJvbSBjb21wYXJlIGV2ZW50IG9uIGNoYW5uZWwgMi4gKi8NCisgICAgTlJGX1JUQ19JTlRfQ09NUEFSRTNfTUFTSyA9IFJUQ19JTlRFTlNFVF9DT01QQVJFM19Nc2sgIC8qKjwgUlRDIGludGVycnVwdCBmcm9tIGNvbXBhcmUgZXZlbnQgb24gY2hhbm5lbCAzLiAqLw0KK30gbnJmX3J0Y19pbnRfdDsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgYSBjb21wYXJlIHZhbHVlIGZvciBhIGNoYW5uZWwuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBjaCAgICAgICAgICAgIENoYW5uZWwuDQorICogQHBhcmFtW2luXSAgY2NfdmFsICAgICAgICBDb21wYXJlIHZhbHVlIHRvIHNldC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgIHZvaWQgbnJmX3J0Y19jY19zZXQoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IGNoLCB1aW50MzJfdCBjY192YWwpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBjb21wYXJlIHZhbHVlIGZvciBhIGNoYW5uZWwuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBjaCAgICAgICAgICAgIENoYW5uZWwuDQorICoNCisgKiBAcmV0dXJuICAgICAgICAgICAgICAgICAgIENPTVBBUkVbY2hdIHZhbHVlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSAgdWludDMyX3QgbnJmX3J0Y19jY19nZXQoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IGNoKTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGVuYWJsaW5nIGludGVycnVwdHMuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBtYXNrICAgICAgICAgIEludGVycnVwdCBtYXNrIHRvIGJlIGVuYWJsZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3J0Y19pbnRfZW5hYmxlKE5SRl9SVENfVHlwZSAqIHBfcnRjLCB1aW50MzJfdCBtYXNrKTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBpbnRlcnJ1cHRzLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9ydGMgICAgICAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgbWFzayAgICAgICAgICBJbnRlcnJ1cHQgbWFzayB0byBiZSBkaXNhYmxlZC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcnRjX2ludF9kaXNhYmxlKE5SRl9SVENfVHlwZSAqIHBfcnRjLCB1aW50MzJfdCBtYXNrKTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGludGVycnVwdHMgYXJlIGVuYWJsZWQuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBtYXNrICAgICAgICAgIE1hc2sgb2YgaW50ZXJydXB0IGZsYWdzIHRvIGNoZWNrLg0KKyAqDQorICogQHJldHVybiAgICAgICAgICAgICAgICAgICBNYXNrIHdpdGggZW5hYmxlZCBpbnRlcnJ1cHRzLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfcnRjX2ludF9pc19lbmFibGVkKE5SRl9SVENfVHlwZSAqIHBfcnRjLCB1aW50MzJfdCBtYXNrKTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHVybmluZyB0aGUgc3RhdHVzIG9mIGN1cnJlbnRseSBlbmFibGVkIGludGVycnVwdHMuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKg0KKyAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgVmFsdWUgaW4gSU5URU4gcmVnaXN0ZXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ydGNfaW50X2dldChOUkZfUlRDX1R5cGUgKiBwX3J0Yyk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBldmVudCBpcyBwZW5kaW5nLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9ydGMgICAgICAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgZXZlbnQgICAgICAgICBBZGRyZXNzIG9mIHRoZSBldmVudC4NCisgKg0KKyAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgTWFzayBvZiBwZW5kaW5nIGV2ZW50cy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3J0Y19ldmVudF9wZW5kaW5nKE5SRl9SVENfVHlwZSAqIHBfcnRjLCBucmZfcnRjX2V2ZW50X3QgZXZlbnQpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgY2xlYXJpbmcgYW4gZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBldmVudCAgICAgICAgIEV2ZW50IHRvIGNsZWFyLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ydGNfZXZlbnRfY2xlYXIoTlJGX1JUQ19UeXBlICogcF9ydGMsIG5yZl9ydGNfZXZlbnRfdCBldmVudCk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgYSBjb3VudGVyIHZhbHVlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9ydGMgICAgICAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICoNCisgKiBAcmV0dXJuICAgICAgICAgICAgICAgICAgIENvdW50ZXIgdmFsdWUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ydGNfY291bnRlcl9nZXQoTlJGX1JUQ19UeXBlICogcF9ydGMpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBhIHByZXNjYWxlciB2YWx1ZS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfcnRjICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHZhbCAgICAgICAgICAgVmFsdWUgdG8gc2V0IHRoZSBwcmVzY2FsZXIgdG8uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3J0Y19wcmVzY2FsZXJfc2V0KE5SRl9SVENfVHlwZSAqIHBfcnRjLCB1aW50MzJfdCB2YWwpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIGFuIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9ydGMgICAgICAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgZXZlbnQgICAgICAgICBSZXF1ZXN0ZWQgZXZlbnQuDQorICoNCisgKiBAcmV0dXJuICAgICBBZGRyZXNzIG9mIHRoZSByZXF1ZXN0ZWQgZXZlbnQgcmVnaXN0ZXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ydGNfZXZlbnRfYWRkcmVzc19nZXQoTlJGX1JUQ19UeXBlICogcF9ydGMsIG5yZl9ydGNfZXZlbnRfdCBldmVudCk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgYSB0YXNrLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9ydGMgICAgICAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgdGFzayAgICAgICAgICBSZXF1ZXN0ZWQgdGFzay4NCisgKg0KKyAqIEByZXR1cm4gICAgIEFkZHJlc3Mgb2YgdGhlIHJlcXVlc3RlZCB0YXNrIHJlZ2lzdGVyLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfcnRjX3Rhc2tfYWRkcmVzc19nZXQoTlJGX1JUQ19UeXBlICogcF9ydGMsIG5yZl9ydGNfdGFza190IHRhc2spOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3Igc3RhcnRpbmcgYSB0YXNrLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9ydGMgICAgICAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgdGFzayAgICAgICAgICBSZXF1ZXN0ZWQgdGFzay4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcnRjX3Rhc2tfdHJpZ2dlcihOUkZfUlRDX1R5cGUgKiBwX3J0YywgbnJmX3J0Y190YXNrX3QgdGFzayk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBlbmFibGluZyBldmVudHMuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBtYXNrICAgICAgICAgIE1hc2sgb2YgZXZlbnQgZmxhZ3MgdG8gZW5hYmxlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ydGNfZXZlbnRfZW5hYmxlKE5SRl9SVENfVHlwZSAqIHBfcnRjLCB1aW50MzJfdCBtYXNrKTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBhbiBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfcnRjICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIGV2ZW50ICAgICAgICAgUmVxdWVzdGVkIGV2ZW50Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ydGNfZXZlbnRfZGlzYWJsZShOUkZfUlRDX1R5cGUgKiBwX3J0YywgdWludDMyX3QgZXZlbnQpOw0KKw0KKy8qKg0KKyAqQH0NCisgKiovDQorDQorDQorI2lmbmRlZiBTVVBQUkVTU19JTkxJTkVfSU1QTEVNRU5UQVRJT04NCisNCitfX1NUQVRJQ19JTkxJTkUgIHZvaWQgbnJmX3J0Y19jY19zZXQoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IGNoLCB1aW50MzJfdCBjY192YWwpDQorew0KKyAgICBwX3J0Yy0+Q0NbY2hdID0gY2NfdmFsOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgIHVpbnQzMl90IG5yZl9ydGNfY2NfZ2V0KE5SRl9SVENfVHlwZSAqIHBfcnRjLCB1aW50MzJfdCBjaCkNCit7DQorICAgIHJldHVybiBwX3J0Yy0+Q0NbY2hdOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcnRjX2ludF9lbmFibGUoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICBwX3J0Yy0+SU5URU5TRVQgPSBtYXNrOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcnRjX2ludF9kaXNhYmxlKE5SRl9SVENfVHlwZSAqIHBfcnRjLCB1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgcF9ydGMtPklOVEVOQ0xSID0gbWFzazsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ydGNfaW50X2lzX2VuYWJsZWQoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICByZXR1cm4gKHBfcnRjLT5JTlRFTlNFVCAmIG1hc2spOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3J0Y19pbnRfZ2V0KE5SRl9SVENfVHlwZSAqIHBfcnRjKQ0KK3sNCisgICAgcmV0dXJuIHBfcnRjLT5JTlRFTlNFVDsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ydGNfZXZlbnRfcGVuZGluZyhOUkZfUlRDX1R5cGUgKiBwX3J0YywgbnJmX3J0Y19ldmVudF90IGV2ZW50KQ0KK3sNCisgICAgcmV0dXJuICoodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilwX3J0YyArICh1aW50MzJfdClldmVudCk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ydGNfZXZlbnRfY2xlYXIoTlJGX1JUQ19UeXBlICogcF9ydGMsIG5yZl9ydGNfZXZlbnRfdCBldmVudCkNCit7DQorICAgICooKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopcF9ydGMgKyAodWludDMyX3QpZXZlbnQpKSA9IDA7DQorI2lmIF9fQ09SVEVYX00gPT0gMHgwNA0KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBkdW1teSA9ICooKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopcF9ydGMgKyAodWludDMyX3QpZXZlbnQpKTsNCisgICAgKHZvaWQpZHVtbXk7DQorI2VuZGlmDQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfcnRjX2NvdW50ZXJfZ2V0KE5SRl9SVENfVHlwZSAqIHBfcnRjKQ0KK3sNCisgICAgIHJldHVybiBwX3J0Yy0+Q09VTlRFUjsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3J0Y19wcmVzY2FsZXJfc2V0KE5SRl9SVENfVHlwZSAqIHBfcnRjLCB1aW50MzJfdCB2YWwpDQorew0KKyAgICBBU1NFUlQodmFsIDw9IChSVENfUFJFU0NBTEVSX1BSRVNDQUxFUl9Nc2sgPj4gUlRDX1BSRVNDQUxFUl9QUkVTQ0FMRVJfUG9zKSk7DQorICAgIHBfcnRjLT5QUkVTQ0FMRVIgPSB2YWw7DQorfQ0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBydGNfcHJlc2NhbGVyX2dldChOUkZfUlRDX1R5cGUgKiBwX3J0YykNCit7DQorICAgIHJldHVybiBwX3J0Yy0+UFJFU0NBTEVSOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3J0Y19ldmVudF9hZGRyZXNzX2dldChOUkZfUlRDX1R5cGUgKiBwX3J0YywgbnJmX3J0Y19ldmVudF90IGV2ZW50KQ0KK3sNCisgICAgcmV0dXJuICh1aW50MzJfdClwX3J0YyArIGV2ZW50Ow0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3J0Y190YXNrX2FkZHJlc3NfZ2V0KE5SRl9SVENfVHlwZSAqIHBfcnRjLCBucmZfcnRjX3Rhc2tfdCB0YXNrKQ0KK3sNCisgICAgcmV0dXJuICh1aW50MzJfdClwX3J0YyArIHRhc2s7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ydGNfdGFza190cmlnZ2VyKE5SRl9SVENfVHlwZSAqIHBfcnRjLCBucmZfcnRjX3Rhc2tfdCB0YXNrKQ0KK3sNCisgICAgKihfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdClwX3J0YyArIHRhc2spID0gMTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3J0Y19ldmVudF9lbmFibGUoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICBwX3J0Yy0+RVZURU5TRVQgPSBtYXNrOw0KK30NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcnRjX2V2ZW50X2Rpc2FibGUoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICBwX3J0Yy0+RVZURU5DTFIgPSBtYXNrOw0KK30NCisjZW5kaWYNCisNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmICAvKiBOUkZfUlRDX0ggKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfdWFydC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGYxZGUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3VhcnQuaApAQCAtMCwwICsxLDU0MCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkZfVUFSVF9IX18NCisjZGVmaW5lIE5SRl9VQVJUX0hfXw0KKw0KKyNpbmNsdWRlICJucmYuaCINCisjaW5jbHVkZSAibnJmX3BlcmlwaGVyYWxzLmgiDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisjaW5jbHVkZSA8c3RkYm9vbC5oPg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8vVGVtcG9yYXJ5IGRlZmluaW5nIGxlZ2FjeSBVQVJUIGZvciBpbnN0YW5jZSAxDQorI2RlZmluZSBOUkZfVUFSVDEgKE5SRl9VQVJUX1R5cGUgKilOUkZfVUFSVEUxDQorDQorLyoqDQorICogQGRlZmdyb3VwIG5yZl91YXJ0X2hhbCBVQVJUIEhBTA0KKyAqIEB7DQorICogQGluZ3JvdXAgbnJmX3VhcnQNCisgKg0KKyAqIEBicmllZiBIYXJkd2FyZSBhY2Nlc3MgbGF5ZXIgZm9yIGFjY2Vzc2luZyB0aGUgVUFSVCBwZXJpcGhlcmFsLg0KKyAqLw0KKw0KKyNkZWZpbmUgTlJGX1VBUlRfUFNFTF9ESVNDT05ORUNURUQgMHhGRkZGRkZGRg0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl91YXJ0X3Rhc2tfdA0KKyAqIEBicmllZiBVQVJUIHRhc2tzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgLypsaW50IC1zYXZlIC1lMzAgLWVzeW0oNjI4LF9fSU5UQUREUl9fKSovDQorICAgIE5SRl9VQVJUX1RBU0tfU1RBUlRSWCA9IG9mZnNldG9mKE5SRl9VQVJUX1R5cGUsIFRBU0tTX1NUQVJUUlgpLCAvKio8IFRhc2sgZm9yIHN0YXJ0aW5nIHJlY2VwdGlvbi4gKi8NCisgICAgTlJGX1VBUlRfVEFTS19TVE9QUlggID0gb2Zmc2V0b2YoTlJGX1VBUlRfVHlwZSwgVEFTS1NfU1RPUFJYKSwgIC8qKjwgVGFzayBmb3Igc3RvcHBpbmcgcmVjZXB0aW9uLiAqLw0KKyAgICBOUkZfVUFSVF9UQVNLX1NUQVJUVFggPSBvZmZzZXRvZihOUkZfVUFSVF9UeXBlLCBUQVNLU19TVEFSVFRYKSwgLyoqPCBUYXNrIGZvciBzdGFydGluZyB0cmFuc21pc3Npb24uICovDQorICAgIE5SRl9VQVJUX1RBU0tfU1RPUFRYICA9IG9mZnNldG9mKE5SRl9VQVJUX1R5cGUsIFRBU0tTX1NUT1BUWCksICAvKio8IFRhc2sgZm9yIHN0b3BwaW5nIHRyYW5zbWlzc2lvbi4gKi8NCisgICAgTlJGX1VBUlRfVEFTS19TVVNQRU5EID0gb2Zmc2V0b2YoTlJGX1VBUlRfVHlwZSwgVEFTS1NfU1VTUEVORCksIC8qKjwgVGFzayBmb3Igc3VzcGVuZGluZyBVQVJULiAqLw0KKyAgICAvKmxpbnQgLXJlc3RvcmUqLw0KK30gbnJmX3VhcnRfdGFza190Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl91YXJ0X2V2ZW50X3QNCisgKiBAYnJpZWYgVUFSVCBldmVudHMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICAvKmxpbnQgLXNhdmUgLWUzMCovDQorICAgIE5SRl9VQVJUX0VWRU5UX0NUUyAgICA9IG9mZnNldG9mKE5SRl9VQVJUX1R5cGUsIEVWRU5UU19DVFMpLCAgIC8qKjwgRXZlbnQgZnJvbSBDVFMgbGluZSBhY3RpdmF0aW9uLiAqLw0KKyAgICBOUkZfVUFSVF9FVkVOVF9OQ1RTICAgPSBvZmZzZXRvZihOUkZfVUFSVF9UeXBlLCBFVkVOVFNfTkNUUyksICAvKio8IEV2ZW50IGZyb20gQ1RTIGxpbmUgZGVhY3RpdmF0aW9uLiAqLw0KKyAgICBOUkZfVUFSVF9FVkVOVF9SWERSRFkgPSBvZmZzZXRvZihOUkZfVUFSVF9UeXBlLCBFVkVOVFNfUlhEUkRZKSwvKio8IEV2ZW50IGZyb20gZGF0YSByZWFkeSBpbiBSWEQuICovDQorICAgIE5SRl9VQVJUX0VWRU5UX1RYRFJEWSA9IG9mZnNldG9mKE5SRl9VQVJUX1R5cGUsIEVWRU5UU19UWERSRFkpLC8qKjwgRXZlbnQgZnJvbSBkYXRhIHNlbnQgZnJvbSBUWEQuICovDQorICAgIE5SRl9VQVJUX0VWRU5UX0VSUk9SICA9IG9mZnNldG9mKE5SRl9VQVJUX1R5cGUsIEVWRU5UU19FUlJPUiksIC8qKjwgRXZlbnQgZnJvbSBlcnJvciBkZXRlY3Rpb24uICovDQorICAgIE5SRl9VQVJUX0VWRU5UX1JYVE8gICA9IG9mZnNldG9mKE5SRl9VQVJUX1R5cGUsIEVWRU5UU19SWFRPKSAgIC8qKjwgRXZlbnQgZnJvbSByZWNlaXZlciB0aW1lb3V0LiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmxpbnQgLXJlc3RvcmUqLw0KK30gbnJmX3VhcnRfZXZlbnRfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfdWFydF9pbnRfbWFza190DQorICogQGJyaWVmIFVBUlQgaW50ZXJydXB0cy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIC8qbGludCAtc2F2ZSAtZTMwKi8NCisgICAgTlJGX1VBUlRfSU5UX01BU0tfQ1RTICAgID0gVUFSVF9JTlRFTkNMUl9DVFNfTXNrLCAgICAvKio8IENUUyBsaW5lIGFjdGl2YXRpb24gaW50ZXJydXB0LiAqLw0KKyAgICBOUkZfVUFSVF9JTlRfTUFTS19OQ1RTICAgPSBVQVJUX0lOVEVOQ0xSX05DVFNfTXNrLCAgIC8qKjwgQ1RTIGxpbmUgZGVhY3RpdmF0aW9uIGludGVycnVwdC4gKi8NCisgICAgTlJGX1VBUlRfSU5UX01BU0tfUlhEUkRZID0gVUFSVF9JTlRFTkNMUl9SWERSRFlfTXNrLCAvKio8IERhdGEgcmVhZHkgaW4gUlhEIGludGVycnVwdC4gKi8NCisgICAgTlJGX1VBUlRfSU5UX01BU0tfVFhEUkRZID0gVUFSVF9JTlRFTkNMUl9UWERSRFlfTXNrLCAgLyoqPCBEYXRhIHNlbnQgZnJvbSBUWEQgaW50ZXJydXB0LiAqLw0KKyAgICBOUkZfVUFSVF9JTlRfTUFTS19FUlJPUiAgPSBVQVJUX0lOVEVOQ0xSX0VSUk9SX01zaywgIC8qKjwgRXJyb3IgZGV0ZWN0aW9uIGludGVycnVwdC4gKi8NCisgICAgTlJGX1VBUlRfSU5UX01BU0tfUlhUTyAgID0gVUFSVF9JTlRFTkNMUl9SWFRPX01zayAgICAvKio8IFJlY2VpdmVyIHRpbWVvdXQgaW50ZXJydXB0LiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmxpbnQgLXJlc3RvcmUqLw0KK30gbnJmX3VhcnRfaW50X21hc2tfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfdWFydF9iYXVkcmF0ZV90DQorICogQGJyaWVmIEJhdWRyYXRlcyBzdXBwb3J0ZWQgYnkgVUFSVC4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorI2lmZGVmIFVBUlRFX1BSRVNFTlQNCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfMTIwMCAgID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxMjAwLCAvKio8IDEyMDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfMjQwMCAgID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyNDAwLCAvKio8IDI0MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfNDgwMCAgID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ0ODAwLCAvKio8IDQ4MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfOTYwMCAgID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ5NjAwLCAvKio8IDk2MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfMTQ0MDAgID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxNDQwMCwgLyoqPCAxNDQwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8xOTIwMCAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDE5MjAwLCAvKio8IDE5MjAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzI4ODAwICA9ICBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjg4MDAsIC8qKjwgMjg4MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfMzg0MDAgID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQzODQwMCwgLyoqPCAzODQwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV81NzYwMCAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDU3NjAwLCAvKio8IDU3NjAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzc2ODAwICA9ICBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkNzY4MDAsIC8qKjwgNzY4MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfMTE1MjAwID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxMTUyMDAsIC8qKjwgMTE1MjAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzIzMDQwMCA9ICBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjMwNDAwLCAvKio8IDIzMDQwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8yNTAwMDAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDI1MDAwMCwgLyoqPCAyNTAwMDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfNDYwODAwID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ0NjA4MDAsIC8qKjwgNDYwODAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzkyMTYwMCA9ICBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkOTIxNjAwLCAvKio8IDkyMTYwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8xMDAwMDAwID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxTSwgLyoqPCAxMDAwMDAwIGJhdWQuICovDQorI2Vsc2UNCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfMTIwMCAgID0gIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDEyMDAsIC8qKjwgMTIwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8yNDAwICAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjQwMCwgLyoqPCAyNDAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzQ4MDAgICA9ICBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ0ODAwLCAvKio8IDQ4MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfOTYwMCAgID0gIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDk2MDAsIC8qKjwgOTYwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8xNDQwMCAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTQ0MDAsIC8qKjwgMTQ0MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfMTkyMDAgID0gIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDE5MjAwLCAvKio8IDE5MjAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzI4ODAwICA9ICBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyODgwMCwgLyoqPCAyODgwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8zODQwMCAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMzg0MDAsIC8qKjwgMzg0MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfNTc2MDAgID0gIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDU3NjAwLCAvKio8IDU3NjAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzc2ODAwICA9ICBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ3NjgwMCwgLyoqPCA3NjgwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8xMTUyMDAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTE1MjAwLCAvKio8IDExNTIwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8yMzA0MDAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjMwNDAwLCAvKio8IDIzMDQwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8yNTAwMDAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjUwMDAwLCAvKio8IDI1MDAwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV80NjA4MDAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkNDYwODAwLCAvKio8IDQ2MDgwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV85MjE2MDAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkOTIxNjAwLCAvKio8IDkyMTYwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8xMDAwMDAwID0gIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDFNLCAvKio8IDEwMDAwMDAgYmF1ZC4gKi8NCisjZW5kaWYNCit9IG5yZl91YXJ0X2JhdWRyYXRlX3Q7DQorDQorLyoqDQorICogQGVudW0gbnJmX3VhcnRfZXJyb3JfbWFza190DQorICogQGJyaWVmIFR5cGVzIG9mIFVBUlQgZXJyb3IgbWFza3MuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfVUFSVF9FUlJPUl9PVkVSUlVOX01BU0sgPSBVQVJUX0VSUk9SU1JDX09WRVJSVU5fTXNrLCAgIC8qKjwgT3ZlcnJ1biBlcnJvci4gKi8NCisgICAgTlJGX1VBUlRfRVJST1JfUEFSSVRZX01BU0sgID0gVUFSVF9FUlJPUlNSQ19QQVJJVFlfTXNrLCAgICAvKio8IFBhcml0eSBlcnJvci4gKi8NCisgICAgTlJGX1VBUlRfRVJST1JfRlJBTUlOR19NQVNLID0gVUFSVF9FUlJPUlNSQ19GUkFNSU5HX01zaywgICAvKio8IEZyYW1pbmcgZXJyb3IuICovDQorICAgIE5SRl9VQVJUX0VSUk9SX0JSRUFLX01BU0sgICA9IFVBUlRfRVJST1JTUkNfQlJFQUtfTXNrLCAgICAgLyoqPCBCcmVhayBlcnJvci4gKi8NCit9IG5yZl91YXJ0X2Vycm9yX21hc2tfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfdWFydF9wYXJpdHlfdA0KKyAqIEBicmllZiBUeXBlcyBvZiBVQVJUIHBhcml0eSBtb2Rlcy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9VQVJUX1BBUklUWV9FWENMVURFRCA9IFVBUlRfQ09ORklHX1BBUklUWV9FeGNsdWRlZCA8PCBVQVJUX0NPTkZJR19QQVJJVFlfUG9zLCAvKio8IFBhcml0eSBleGNsdWRlZC4gKi8NCisgICAgTlJGX1VBUlRfUEFSSVRZX0lOQ0xVREVEID0gVUFSVF9DT05GSUdfUEFSSVRZX0luY2x1ZGVkIDw8IFVBUlRfQ09ORklHX1BBUklUWV9Qb3MsIC8qKjwgUGFyaXR5IGluY2x1ZGVkLiAqLw0KK30gbnJmX3VhcnRfcGFyaXR5X3Q7DQorDQorLyoqDQorICogQGVudW0gbnJmX3VhcnRfaHdmY190DQorICogQGJyaWVmIFR5cGVzIG9mIFVBUlQgZmxvdyBjb250cm9sIG1vZGVzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1VBUlRfSFdGQ19ESVNBQkxFRCA9IFVBUlRfQ09ORklHX0hXRkNfRGlzYWJsZWQsIC8qKjwgSFcgZmxvdyBjb250cm9sIGRpc2FibGVkLiAqLw0KKyAgICBOUkZfVUFSVF9IV0ZDX0VOQUJMRUQgID0gVUFSVF9DT05GSUdfSFdGQ19FbmFibGVkLCAgLyoqPCBIVyBmbG93IGNvbnRyb2wgZW5hYmxlZC4gKi8NCit9IG5yZl91YXJ0X2h3ZmNfdDsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNsZWFyaW5nIGEgc3BlY2lmaWMgVUFSVCBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9yZWcgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIGV2ZW50ICBFdmVudCB0byBjbGVhci4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF9ldmVudF9jbGVhcihOUkZfVUFSVF9UeXBlICpwX3JlZywgbnJmX3VhcnRfZXZlbnRfdCBldmVudCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjaGVja2luZyB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBVQVJUIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSBwX3JlZyAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gZXZlbnQgIEV2ZW50IHRvIGNoZWNrLg0KKyAqDQorICogQHJldHZhbCBUcnVlIGlmIGV2ZW50IGlzIHNldCwgRmFsc2Ugb3RoZXJ3aXNlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl91YXJ0X2V2ZW50X2NoZWNrKE5SRl9VQVJUX1R5cGUgKnBfcmVnLCBucmZfdWFydF9ldmVudF90IGV2ZW50KTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiBhIHNwZWNpZmljIFVBUlQgZXZlbnQgcmVnaXN0ZXIuDQorICoNCisgKiBAcGFyYW1baW5dIHBfcmVnICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBldmVudCAgRGVzaXJlZCBldmVudC4NCisgKg0KKyAqIEByZXR2YWwgQWRkcmVzcyBvZiBzcGVjaWZpZWQgZXZlbnQgcmVnaXN0ZXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl91YXJ0X2V2ZW50X2FkZHJlc3NfZ2V0KE5SRl9VQVJUX1R5cGUgICAqcF9yZWcsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl91YXJ0X2V2ZW50X3QgIGV2ZW50KTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGVuYWJsaW5nIGEgc3BlY2lmaWMgaW50ZXJydXB0Lg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gaW50X21hc2sgSW50ZXJydXB0cyB0byBlbmFibGUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfaW50X2VuYWJsZShOUkZfVUFSVF9UeXBlICpwX3JlZywgdWludDMyX3QgaW50X21hc2spOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgc3RhdGUgb2YgYSBnaXZlbiBpbnRlcnJ1cHQuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gaW50X21hc2sgIE1hc2sgb2YgaW50ZXJydXB0IHRvIGNoZWNrLg0KKyAqDQorICogQHJldHZhbCB0cnVlICBJZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZWQuDQorICogQHJldHZhbCBmYWxzZSBJZiB0aGUgaW50ZXJydXB0IGlzIG5vdCBlbmFibGVkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl91YXJ0X2ludF9lbmFibGVfY2hlY2soTlJGX1VBUlRfVHlwZSAqcF9yZWcsIHVpbnQzMl90IGludF9tYXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBzcGVjaWZpYyBpbnRlcnJ1cHRzLg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gaW50X21hc2sgSW50ZXJydXB0cyB0byBkaXNhYmxlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X2ludF9kaXNhYmxlKE5SRl9VQVJUX1R5cGUgKnBfcmVnLCB1aW50MzJfdCBpbnRfbWFzayk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIGVycm9yIHNvdXJjZSBtYXNrLiBGdW5jdGlvbiBpcyBjbGVhcmluZyBlcnJvciBzb3VyY2UgZmxhZ3MgYWZ0ZXIgcmVhZGluZy4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHJldHVybiAgICAgICAgIE1hc2sgd2l0aCBlcnJvciBzb3VyY2UgZmxhZ3MuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl91YXJ0X2Vycm9yc3JjX2dldF9hbmRfY2xlYXIoTlJGX1VBUlRfVHlwZSAqcF9yZWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZW5hYmxpbmcgVUFSVC4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfZW5hYmxlKE5SRl9VQVJUX1R5cGUgKnBfcmVnKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBVQVJULg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF9kaXNhYmxlKE5SRl9VQVJUX1R5cGUgKnBfcmVnKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNvbmZpZ3VyaW5nIFRYL1JYIHBpbnMuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSBwc2VsdHhkICBUWEQgcGluIG51bWJlci4NCisgKiBAcGFyYW0gcHNlbHJ4ZCAgUlhEIHBpbiBudW1iZXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfdHhyeF9waW5zX3NldChOUkZfVUFSVF9UeXBlICpwX3JlZywgdWludDMyX3QgcHNlbHR4ZCwgdWludDMyX3QgcHNlbHJ4ZCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBkaXNjb25uZWN0aW5nIFRYL1JYIHBpbnMuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X3R4cnhfcGluc19kaXNjb25uZWN0KE5SRl9VQVJUX1R5cGUgKnBfcmVnKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgVFggcGluLg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfdHhfcGluX2dldChOUkZfVUFSVF9UeXBlICpwX3JlZyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIFJYIHBpbi4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl91YXJ0X3J4X3Bpbl9nZXQoTlJGX1VBUlRfVHlwZSAqcF9yZWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBSVFMgcGluLg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfcnRzX3Bpbl9nZXQoTlJGX1VBUlRfVHlwZSAqcF9yZWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBDVFMgcGluLg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfY3RzX3Bpbl9nZXQoTlJGX1VBUlRfVHlwZSAqcF9yZWcpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgZmxvdyBjb250cm9sIHBpbnMuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSBwc2VscnRzICBSVFMgcGluIG51bWJlci4NCisgKiBAcGFyYW0gcHNlbGN0cyAgQ1RTIHBpbiBudW1iZXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfaHdmY19waW5zX3NldChOUkZfVUFSVF9UeXBlICpwX3JlZywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICBwc2VscnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIHBzZWxjdHMpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZGlzY29ubmVjdGluZyBmbG93IGNvbnRyb2wgcGlucy4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfaHdmY19waW5zX2Rpc2Nvbm5lY3QoTlJGX1VBUlRfVHlwZSAqcF9yZWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVhZGluZyBSWCBkYXRhLg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcmV0dXJuICAgICAgICAgUmVjZWl2ZWQgYnl0ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBucmZfdWFydF9yeGRfZ2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgVHggZGF0YS4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtIHR4ZCAgICAgIEJ5dGUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfdHhkX3NldChOUkZfVUFSVF9UeXBlICpwX3JlZywgdWludDhfdCB0eGQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc3RhcnRpbmcgYW4gVUFSVCB0YXNrLg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gdGFzayAgICAgVGFzay4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF90YXNrX3RyaWdnZXIoTlJGX1VBUlRfVHlwZSAqcF9yZWcsIG5yZl91YXJ0X3Rhc2tfdCB0YXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiBhIHNwZWNpZmljIHRhc2sgcmVnaXN0ZXIuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSB0YXNrICBUYXNrLg0KKyAqDQorICogQHJldHVybiAgICAgIFRhc2sgYWRkcmVzcy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfdGFza19hZGRyZXNzX2dldChOUkZfVUFSVF9UeXBlICpwX3JlZywgbnJmX3VhcnRfdGFza190IHRhc2spOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgVUFSVC4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSBod2ZjICAgSGFyZHdhcmUgZmxvdyBjb250cm9sLiBFbmFibGVkIGlmIHRydWUuDQorICogQHBhcmFtIHBhcml0eSBQYXJpdHkuIEluY2x1ZGVkIGlmIHRydWUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfY29uZmlndXJlKE5SRl9VQVJUX1R5cGUgICAgKnBfcmVnLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfdWFydF9wYXJpdHlfdCBwYXJpdHksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl91YXJ0X2h3ZmNfdCAgIGh3ZmMpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBVQVJUIGJhdWRyYXRlLg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gYmF1ZHJhdGUgQmF1ZHJhdGUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfYmF1ZHJhdGVfc2V0KE5SRl9VQVJUX1R5cGUgICAgKnBfcmVnLCBucmZfdWFydF9iYXVkcmF0ZV90IGJhdWRyYXRlKTsNCisNCisjaWZuZGVmIFNVUFBSRVNTX0lOTElORV9JTVBMRU1FTlRBVElPTg0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X2V2ZW50X2NsZWFyKE5SRl9VQVJUX1R5cGUgKnBfcmVnLCBucmZfdWFydF9ldmVudF90IGV2ZW50KQ0KK3sNCisgICAgKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilwX3JlZyArICh1aW50MzJfdClldmVudCkpID0gMHgwVUw7DQorI2lmIF9fQ09SVEVYX00gPT0gMHgwNA0KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBkdW1teSA9ICooKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopcF9yZWcgKyAodWludDMyX3QpZXZlbnQpKTsNCisgICAgKHZvaWQpZHVtbXk7DQorI2VuZGlmDQorDQorfQ0KKw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl91YXJ0X2V2ZW50X2NoZWNrKE5SRl9VQVJUX1R5cGUgKnBfcmVnLCBucmZfdWFydF9ldmVudF90IGV2ZW50KQ0KK3sNCisgICAgcmV0dXJuIChib29sKSAqICh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKXBfcmVnICsgKHVpbnQzMl90KWV2ZW50KTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl91YXJ0X2V2ZW50X2FkZHJlc3NfZ2V0KE5SRl9VQVJUX1R5cGUgICAqcF9yZWcsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl91YXJ0X2V2ZW50X3QgIGV2ZW50KQ0KK3sNCisgICAgcmV0dXJuICh1aW50MzJfdCkoKHVpbnQ4X3QgKilwX3JlZyArICh1aW50MzJfdClldmVudCk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X2ludF9lbmFibGUoTlJGX1VBUlRfVHlwZSAqcF9yZWcsIHVpbnQzMl90IGludF9tYXNrKQ0KK3sNCisgICAgcF9yZWctPklOVEVOU0VUID0gaW50X21hc2s7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl91YXJ0X2ludF9lbmFibGVfY2hlY2soTlJGX1VBUlRfVHlwZSAqcF9yZWcsIHVpbnQzMl90IGludF9tYXNrKQ0KK3sNCisgICAgcmV0dXJuIChib29sKShwX3JlZy0+SU5URU5TRVQgJiBpbnRfbWFzayk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X2ludF9kaXNhYmxlKE5SRl9VQVJUX1R5cGUgKnBfcmVnLCB1aW50MzJfdCBpbnRfbWFzaykNCit7DQorICAgIHBfcmVnLT5JTlRFTkNMUiA9IGludF9tYXNrOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfZXJyb3JzcmNfZ2V0X2FuZF9jbGVhcihOUkZfVUFSVF9UeXBlICpwX3JlZykNCit7DQorICAgIHVpbnQzMl90IGVycnNyY19tYXNrID0gcF9yZWctPkVSUk9SU1JDOw0KKyAgICBwX3JlZy0+RVJST1JTUkMgPSBlcnJzcmNfbWFzazsNCisgICAgcmV0dXJuIGVycnNyY19tYXNrOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF9lbmFibGUoTlJGX1VBUlRfVHlwZSAqcF9yZWcpDQorew0KKyAgICBwX3JlZy0+RU5BQkxFID0gVUFSVF9FTkFCTEVfRU5BQkxFX0VuYWJsZWQ7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X2Rpc2FibGUoTlJGX1VBUlRfVHlwZSAqcF9yZWcpDQorew0KKyAgICBwX3JlZy0+RU5BQkxFID0gVUFSVF9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF90eHJ4X3BpbnNfc2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnLCB1aW50MzJfdCBwc2VsdHhkLCB1aW50MzJfdCBwc2VscnhkKQ0KK3sNCisjaWYgZGVmaW5lZChVQVJUX1BTRUxfUlhEX0NPTk5FQ1RfUG9zKQ0KKyAgICBwX3JlZy0+UFNFTC5SWEQgPSBwc2VscnhkOw0KKyNlbHNlDQorICAgIHBfcmVnLT5QU0VMUlhEID0gcHNlbHJ4ZDsNCisjZW5kaWYNCisjaWYgZGVmaW5lZChVQVJUX1BTRUxfVFhEX0NPTk5FQ1RfUG9zKQ0KKyAgICBwX3JlZy0+UFNFTC5UWEQgPSBwc2VsdHhkOw0KKyNlbHNlDQorICAgIHBfcmVnLT5QU0VMVFhEID0gcHNlbHR4ZDsNCisjZW5kaWYNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfdHhyeF9waW5zX2Rpc2Nvbm5lY3QoTlJGX1VBUlRfVHlwZSAqcF9yZWcpDQorew0KKyAgICBucmZfdWFydF90eHJ4X3BpbnNfc2V0KHBfcmVnLCBOUkZfVUFSVF9QU0VMX0RJU0NPTk5FQ1RFRCwgTlJGX1VBUlRfUFNFTF9ESVNDT05ORUNURUQpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfdHhfcGluX2dldChOUkZfVUFSVF9UeXBlICpwX3JlZykNCit7DQorI2lmIGRlZmluZWQoVUFSVF9QU0VMX1RYRF9DT05ORUNUX1BvcykNCisgICAgcmV0dXJuIHBfcmVnLT5QU0VMLlRYRDsNCisjZWxzZQ0KKyAgICByZXR1cm4gcF9yZWctPlBTRUxUWEQ7DQorI2VuZGlmDQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfdWFydF9yeF9waW5fZ2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnKQ0KK3sNCisjaWYgZGVmaW5lZChVQVJUX1BTRUxfUlhEX0NPTk5FQ1RfUG9zKQ0KKyAgICByZXR1cm4gcF9yZWctPlBTRUwuUlhEOw0KKyNlbHNlDQorICAgIHJldHVybiBwX3JlZy0+UFNFTFJYRDsNCisjZW5kaWYNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl91YXJ0X3J0c19waW5fZ2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnKQ0KK3sNCisjaWYgZGVmaW5lZChVQVJUX1BTRUxfUlRTX0NPTk5FQ1RfUG9zKQ0KKyAgICByZXR1cm4gcF9yZWctPlBTRUwuUlRTOw0KKyNlbHNlDQorICAgIHJldHVybiBwX3JlZy0+UFNFTFJUUzsNCisjZW5kaWYNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl91YXJ0X2N0c19waW5fZ2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnKQ0KK3sNCisjaWYgZGVmaW5lZChVQVJUX1BTRUxfUlRTX0NPTk5FQ1RfUG9zKQ0KKyAgICByZXR1cm4gcF9yZWctPlBTRUwuQ1RTOw0KKyNlbHNlDQorICAgIHJldHVybiBwX3JlZy0+UFNFTENUUzsNCisjZW5kaWYNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfaHdmY19waW5zX3NldChOUkZfVUFSVF9UeXBlICpwX3JlZywgdWludDMyX3QgcHNlbHJ0cywgdWludDMyX3QgcHNlbGN0cykNCit7DQorI2lmIGRlZmluZWQoVUFSVF9QU0VMX1JUU19DT05ORUNUX1BvcykNCisgICAgcF9yZWctPlBTRUwuUlRTID0gcHNlbHJ0czsNCisjZWxzZQ0KKyAgICBwX3JlZy0+UFNFTFJUUyA9IHBzZWxydHM7DQorI2VuZGlmDQorDQorI2lmIGRlZmluZWQoVUFSVF9QU0VMX1JUU19DT05ORUNUX1BvcykNCisgICAgcF9yZWctPlBTRUwuQ1RTID0gcHNlbGN0czsNCisjZWxzZQ0KKyAgICBwX3JlZy0+UFNFTENUUyA9IHBzZWxjdHM7DQorI2VuZGlmDQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X2h3ZmNfcGluc19kaXNjb25uZWN0KE5SRl9VQVJUX1R5cGUgKnBfcmVnKQ0KK3sNCisgICAgbnJmX3VhcnRfaHdmY19waW5zX3NldChwX3JlZywgTlJGX1VBUlRfUFNFTF9ESVNDT05ORUNURUQsIE5SRl9VQVJUX1BTRUxfRElTQ09OTkVDVEVEKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgbnJmX3VhcnRfcnhkX2dldChOUkZfVUFSVF9UeXBlICpwX3JlZykNCit7DQorICAgIHJldHVybiBwX3JlZy0+UlhEOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF90eGRfc2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnLCB1aW50OF90IHR4ZCkNCit7DQorICAgIHBfcmVnLT5UWEQgPSB0eGQ7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X3Rhc2tfdHJpZ2dlcihOUkZfVUFSVF9UeXBlICpwX3JlZywgbnJmX3VhcnRfdGFza190IHRhc2spDQorew0KKyAgICAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKXBfcmVnICsgKHVpbnQzMl90KXRhc2spKSA9IDB4MVVMOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfdGFza19hZGRyZXNzX2dldChOUkZfVUFSVF9UeXBlICpwX3JlZywgbnJmX3VhcnRfdGFza190IHRhc2spDQorew0KKyAgICByZXR1cm4gKHVpbnQzMl90KXBfcmVnICsgKHVpbnQzMl90KXRhc2s7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X2NvbmZpZ3VyZShOUkZfVUFSVF9UeXBlICAgICpwX3JlZywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX3VhcnRfcGFyaXR5X3QgcGFyaXR5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfdWFydF9od2ZjX3QgICBod2ZjKQ0KK3sNCisgICAgcF9yZWctPkNPTkZJRyA9ICh1aW50MzJfdClwYXJpdHkgfCAodWludDMyX3QpaHdmYzsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfYmF1ZHJhdGVfc2V0KE5SRl9VQVJUX1R5cGUgICAgKnBfcmVnLCBucmZfdWFydF9iYXVkcmF0ZV90IGJhdWRyYXRlKQ0KK3sNCisgICAgcF9yZWctPkJBVURSQVRFID0gYmF1ZHJhdGU7DQorfQ0KKyNlbmRpZiAvL1NVUFBSRVNTX0lOTElORV9JTVBMRU1FTlRBVElPTg0KKy8qKiBAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLy9OUkZfVUFSVF9IX18NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVC5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zZWdnZXJfcnR0L1NFR0dFUl9SVFQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWE2ZjM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zZWdnZXJfcnR0L1NFR0dFUl9SVFQuYwpAQCAtMCwwICsxLDEyNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgU0VHR0VSIE1JQ1JPQ09OVFJPTExFUiBHbWJIICYgQ28uIEtHICAgICAgICAgICAgICAgICAqDQorKiAgICAgICBTb2x1dGlvbnMgZm9yIHJlYWwgdGltZSBtaWNyb2NvbnRyb2xsZXIgYXBwbGljYXRpb25zICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAgICAgICAoYykgMjAxNCAtIDIwMTUgIFNFR0dFUiBNaWNyb2NvbnRyb2xsZXIgR21iSCAmIENvLiBLRyAgICAgICAgKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgIHd3dy5zZWdnZXIuY29tICAgICBTdXBwb3J0OiBzdXBwb3J0QHNlZ2dlci5jb20gICAgICAgICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICogVGhpcyBzb2Z0d2FyZSBtYXkgaW4gaXRzIHVubW9kaWZpZWQgZm9ybSBiZSBmcmVlbHkgcmVkaXN0cmlidXRlZCAqDQorKiAgIGluIHNvdXJjZSBmb3JtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogKiBUaGUgc291cmNlIGNvZGUgbWF5IGJlIG1vZGlmaWVkLCBwcm92aWRlZCB0aGUgc291cmNlIGNvZGUgICAgICAgICoNCisqICAgcmV0YWlucyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kICAqDQorKiAgIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogKiBNb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBvciBsaW5rYWJsZSBmb3JtICAgICoNCisqICAgbWF5IG5vdCBiZSBkaXN0cmlidXRlZCB3aXRob3V0IHByaW9yIGNvbnNlbnQgb2YgU0VHR0VSLiAgICAgICAgICAqDQorKiAqIFRoaXMgc29mdHdhcmUgbWF5IG9ubHkgYmUgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFNFR0dFUiAgICAgKg0KKyogICBKLUxpbmsgZGVidWcgcHJvYmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgICAgICAgICAgICAgKg0KKyogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgICAgICAgICoNCisqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GICAgICAgICAgICAqDQorKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSAgICAgICAgICAgKg0KKyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgU0VHR0VSIE1pY3JvY29udHJvbGxlciBCRSBMSUFCTEUgRk9SICoNCisqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SICAgICAgICAgICAqDQorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCAgKg0KKyogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7ICAgICoNCisqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgICAgICAqDQorKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgICAgICAgICAgKg0KKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgICoNCisqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggICAqDQorKiBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRU5ELU9GLUhFQURFUi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0ZpbGUgICAgOiBTRUdHRVJfUlRULmMNCitQdXJwb3NlIDogSW1wbGVtZW50YXRpb24gb2YgU0VHR0VSIHJlYWwtdGltZSB0cmFuc2ZlciAoUlRUKSB3aGljaA0KKyAgICAgICAgICBhbGxvd3MgcmVhbC10aW1lIGNvbW11bmljYXRpb24gb24gdGFyZ2V0cyB3aGljaCBzdXBwb3J0DQorICAgICAgICAgIGRlYnVnZ2VyIG1lbW9yeSBhY2Nlc3NlcyB3aGlsZSB0aGUgQ1BVIGlzIHJ1bm5pbmcuDQorDQorQWRkaXRpb25hbCBpbmZvcm1hdGlvbjoNCisgICAgICAgICAgVHlwZSAiaW50IiBpcyBhc3N1bWVkIHRvIGJlIDMyLWJpdHMgaW4gc2l6ZQ0KKyAgICAgICAgICBILT5UICAgIEhvc3QgdG8gdGFyZ2V0IGNvbW11bmljYXRpb24NCisgICAgICAgICAgVC0+SCAgICBUYXJnZXQgdG8gaG9zdCBjb21tdW5pY2F0aW9uDQorDQorICAgICAgICAgIFJUVCBjaGFubmVsIDAgaXMgYWx3YXlzIHByZXNlbnQgYW5kIHJlc2VydmVkIGZvciBUZXJtaW5hbCB1c2FnZS4NCisgICAgICAgICAgTmFtZSBpcyBmaXhlZCB0byAiVGVybWluYWwiDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyovDQorDQorI2luY2x1ZGUgIlNFR0dFUl9SVFQuaCINCisNCisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgICAgICAgICAvLyBmb3IgbWVtY3B5DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIENvbmZpZ3VyYXRpb24sIGRlZmF1bHQgdmFsdWVzDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqLw0KKw0KKyNpZm5kZWYgICBCVUZGRVJfU0laRV9VUA0KKyNkZWZpbmUgQlVGRkVSX1NJWkVfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCAgLy8gU2l6ZSBvZiB0aGUgYnVmZmVyIGZvciB0ZXJtaW5hbCBvdXRwdXQgb2YgdGFyZ2V0LCB1cCB0byBob3N0DQorI2VuZGlmDQorDQorI2lmbmRlZiAgIEJVRkZFUl9TSVpFX0RPV04NCisjZGVmaW5lIEJVRkZFUl9TSVpFX0RPV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAgIC8vIFNpemUgb2YgdGhlIGJ1ZmZlciBmb3IgdGVybWluYWwgaW5wdXQgdG8gdGFyZ2V0IGZyb20gaG9zdCAoVXN1YWxseSBrZXlib2FyZCBpbnB1dCkNCisjZW5kaWYNCisNCisjaWZuZGVmICAgU0VHR0VSX1JUVF9NQVhfTlVNX1VQX0JVRkZFUlMNCisjZGVmaW5lIFNFR0dFUl9SVFRfTUFYX05VTV9VUF9CVUZGRVJTICAgICAgICAgICAgICAgICAgICAyICAgIC8vIE51bWJlciBvZiB1cC1idWZmZXJzIChULT5IKSBhdmFpbGFibGUgb24gdGhpcyB0YXJnZXQNCisjZW5kaWYNCisNCisjaWZuZGVmICAgU0VHR0VSX1JUVF9NQVhfTlVNX0RPV05fQlVGRkVSUw0KKyNkZWZpbmUgU0VHR0VSX1JUVF9NQVhfTlVNX0RPV05fQlVGRkVSUyAgICAgICAgICAgICAgICAgIDIgICAgLy8gTnVtYmVyIG9mIGRvd24tYnVmZmVycyAoSC0+VCkgYXZhaWxhYmxlIG9uIHRoaXMgdGFyZ2V0DQorI2VuZGlmDQorDQorI2lmbmRlZiAgIFNFR0dFUl9SVFRfTU9ERV9ERUZBVUxUDQorI2RlZmluZSBTRUdHRVJfUlRUX01PREVfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICBTRUdHRVJfUlRUX01PREVfTk9fQkxPQ0tfU0tJUA0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgICBTRUdHRVJfUlRUX0xPQ0sNCisjZGVmaW5lIFNFR0dFUl9SVFRfTE9DSyhTYXZlZFN0YXRlKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgICBTRUdHRVJfUlRUX1VOTE9DSw0KKyNkZWZpbmUgU0VHR0VSX1JUVF9VTkxPQ0soU2F2ZWRTdGF0ZSkNCisjZW5kaWYNCisNCisjaWZuZGVmICAgU1RSTEVODQorI2RlZmluZSBTVFJMRU4oYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oKGEpKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgICBNRU1DUFkNCisjZGVmaW5lIE1FTUNQWShwRGVzdCwgcFNyYywgTnVtQnl0ZXMpICAgICAgICAgICAgICAgICAgIG1lbWNweSgocERlc3QpLCAocFNyYyksIChOdW1CeXRlcykpDQorI2VuZGlmDQorDQorI2lmbmRlZiAgIE1JTg0KKyNkZWZpbmUgTUlOKGEsIGIpICAgICAgICAgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgICBNQVgNCisjZGVmaW5lIE1BWChhLCBiKSAgICAgICAgICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkNCisjZW5kaWYNCisvLw0KKy8vIEZvciBzb21lIGVudmlyb25tZW50cywgTlVMTCBtYXkgbm90IGJlIGRlZmluZWQgdW50aWwgY2VydGFpbiBoZWFkZXJzIGFyZSBpbmNsdWRlZA0KKy8vDQorI2lmbmRlZiBOVUxMDQorI2RlZmluZSBOVUxMIDANCisjZW5kaWYNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU3RhdGljIGNvbnN0IGRhdGENCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyovDQorDQorc3RhdGljIHVuc2lnbmVkIGNoYXIgX2FUZXJtaW5hbElkWzE2XSA9IHsgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnIH07DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFN0YXRpYyBkYXRhDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqLw0KKy8vDQorLy8gQWxsb2NhdGUgYnVmZmVycyBmb3IgY2hhbm5lbCAwDQorLy8NCitzdGF0aWMgY2hhciBfYWNVcEJ1ZmZlciAgW0JVRkZFUl9TSVpFX1VQXTsNCitzdGF0aWMgY2hhciBfYWNEb3duQnVmZmVyW0JVRkZFUl9TSVpFX0RPV05dOw0KKy8vDQorLy8gSW5pdGlhbGl6ZSBTRUdHRVIgUmVhbC10aW1lLVRlcm1pbmFsIGNvbnRyb2wgYmxvY2sgKENCKQ0KKy8vDQorU0VHR0VSX1JUVF9DQiBfU0VHR0VSX1JUVDsNCisNCitzdGF0aWMgY2hhciBfQWN0aXZlVGVybWluYWw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFN0YXRpYyBmdW5jdGlvbnMNCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIF9Eb0luaXQoKQ0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgSW5pdGlhbGl6ZXMgdGhlIGNvbnRyb2wgYmxvY2sgYW4gYnVmZmVycy4NCisqICAgIE1heSBvbmx5IGJlIGNhbGxlZCB2aWEgSU5JVCgpIHRvIGF2b2lkIG92ZXJyaWRpbmcgc2V0dGluZ3MuDQorKg0KKyovDQorI2RlZmluZSBJTklUKCkgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICBpZiAoX1NFR0dFUl9SVFQuYWNJRFswXSA9PSAnXDAnKSB7IF9Eb0luaXQoKTsgfSAgXA0KKyAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQ0KK3N0YXRpYyB2b2lkIF9Eb0luaXQodm9pZCkNCit7DQorICAgIFNFR0dFUl9SVFRfQ0IgKnA7DQorICAgIC8vDQorICAgIC8vIEluaXRpYWxpemUgY29udHJvbCBibG9jaw0KKyAgICAvLw0KKyAgICBwID0gJl9TRUdHRVJfUlRUOw0KKyAgICBwLT5NYXhOdW1VcEJ1ZmZlcnMgICAgPSBTRUdHRVJfUlRUX01BWF9OVU1fVVBfQlVGRkVSUzsNCisgICAgcC0+TWF4TnVtRG93bkJ1ZmZlcnMgID0gU0VHR0VSX1JUVF9NQVhfTlVNX0RPV05fQlVGRkVSUzsNCisgICAgLy8NCisgICAgLy8gSW5pdGlhbGl6ZSB1cCBidWZmZXIgMA0KKyAgICAvLw0KKyAgICBwLT5hVXBbMF0uc05hbWUgICAgICAgICA9ICJUZXJtaW5hbCI7DQorICAgIHAtPmFVcFswXS5wQnVmZmVyICAgICAgID0gX2FjVXBCdWZmZXI7DQorICAgIHAtPmFVcFswXS5TaXplT2ZCdWZmZXIgID0gc2l6ZW9mKF9hY1VwQnVmZmVyKTsNCisgICAgcC0+YVVwWzBdLlJkT2ZmICAgICAgICAgPSAwdTsNCisgICAgcC0+YVVwWzBdLldyT2ZmICAgICAgICAgPSAwdTsNCisgICAgcC0+YVVwWzBdLkZsYWdzICAgICAgICAgPSBTRUdHRVJfUlRUX01PREVfREVGQVVMVDsNCisgICAgLy8NCisgICAgLy8gSW5pdGlhbGl6ZSBkb3duIGJ1ZmZlciAwDQorICAgIC8vDQorICAgIHAtPmFEb3duWzBdLnNOYW1lICAgICAgICAgPSAiVGVybWluYWwiOw0KKyAgICBwLT5hRG93blswXS5wQnVmZmVyICAgICAgID0gX2FjRG93bkJ1ZmZlcjsNCisgICAgcC0+YURvd25bMF0uU2l6ZU9mQnVmZmVyICA9IHNpemVvZihfYWNEb3duQnVmZmVyKTsNCisgICAgcC0+YURvd25bMF0uUmRPZmYgICAgICAgICA9IDB1Ow0KKyAgICBwLT5hRG93blswXS5Xck9mZiAgICAgICAgID0gMHU7DQorICAgIHAtPmFEb3duWzBdLkZsYWdzICAgICAgICAgPSBTRUdHRVJfUlRUX01PREVfREVGQVVMVDsNCisgICAgLy8NCisgICAgLy8gRmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjb250cm9sIGJsb2NrLg0KKyAgICAvLyBDb3B5IElkIHN0cmluZyBpbiB0aHJlZSBzdGVwcyB0byBtYWtlIHN1cmUgIlNFR0dFUiBSVFQiIGlzIG5vdCBmb3VuZA0KKyAgICAvLyBpbiBpbml0aWFsaXplciBtZW1vcnkgKHVzdWFsbHkgZmxhc2gpIGJ5IEotTGluaw0KKyAgICAvLw0KKyAgICBzdHJjcHkoJnAtPmFjSURbN10sICJSVFQiKTsNCisgICAgc3RyY3B5KCZwLT5hY0lEWzBdLCAiU0VHR0VSIik7DQorICAgIHAtPmFjSURbNl0gPSAnICc7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBfV3JpdGVCbG9ja2luZygpDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBTdG9yZXMgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gU0VHR0VSIFJUVCByaW5nIGJ1ZmZlcg0KKyogICAgYW5kIHVwZGF0ZXMgdGhlIGFzc29jaWF0ZWQgd3JpdGUgcG9pbnRlciB3aGljaCBpcyBwZXJpb2RpY2FsbHkNCisqICAgIHJlYWQgYnkgdGhlIGhvc3QuDQorKiAgICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUgd3JpdGUgY2h1bmsgc2l6ZXMgYXMNCisqICAgIF9Xcml0ZUJsb2NraW5nKCkgd2lsbCBibG9jayB1bnRpbCBhbGwgZGF0YSBoYXMgYmVlbiBwb3N0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyoNCisqICBQYXJhbWV0ZXJzDQorKiAgICBwUmluZyAgICAgICAgUmluZyBidWZmZXIgdG8gcG9zdCB0by4NCisqICAgIHBCdWZmZXIgICAgICBQb2ludGVyIHRvIGNoYXJhY3RlciBhcnJheS4gRG9lcyBub3QgbmVlZCB0byBwb2ludCB0byBhIFwwIHRlcm1pbmF0ZWQgc3RyaW5nLg0KKyogICAgTnVtQnl0ZXMgICAgIE51bWJlciBvZiBieXRlcyB0byBiZSBzdG9yZWQgaW4gdGhlIFNFR0dFUiBSVFQgY29udHJvbCBibG9jay4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICA+PSAwIC0gTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gaW50byBidWZmZXIuDQorKi8NCitzdGF0aWMgdW5zaWduZWQgX1dyaXRlQmxvY2tpbmcoU0VHR0VSX1JUVF9SSU5HX0JVRkZFUiAqcFJpbmcsIGNvbnN0IGNoYXIgKnBCdWZmZXIsIHVuc2lnbmVkIE51bUJ5dGVzKQ0KK3sNCisgICAgdW5zaWduZWQgTnVtQnl0ZXNUb1dyaXRlOw0KKyAgICB1bnNpZ25lZCBOdW1CeXRlc1dyaXR0ZW47DQorICAgIHVuc2lnbmVkIFJkT2ZmOw0KKyAgICB1bnNpZ25lZCBXck9mZjsNCisgICAgLy8NCisgICAgLy8gV3JpdGUgZGF0YSB0byBidWZmZXIgYW5kIGhhbmRsZSB3cmFwLWFyb3VuZCBpZiBuZWNlc3NhcnkNCisgICAgLy8NCisgICAgTnVtQnl0ZXNXcml0dGVuID0gMHU7DQorICAgIFdyT2ZmID0gcFJpbmctPldyT2ZmOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICBSZE9mZiA9IHBSaW5nLT5SZE9mZjsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWF5IGJlIGNoYW5nZWQgYnkgaG9zdCAoZGVidWcgcHJvYmUpIGluIHRoZSBtZWFudGltZQ0KKw0KKyAgICAgICAgaWYgKFJkT2ZmID4gV3JPZmYpDQorICAgICAgICB7DQorICAgICAgICAgICAgTnVtQnl0ZXNUb1dyaXRlID0gUmRPZmYgLSBXck9mZiAtIDF1Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIE51bUJ5dGVzVG9Xcml0ZSA9IHBSaW5nLT5TaXplT2ZCdWZmZXIgLSAoV3JPZmYgLSBSZE9mZiArIDF1KTsNCisgICAgICAgIH0NCisNCisgICAgICAgIE51bUJ5dGVzVG9Xcml0ZSA9IE1JTihOdW1CeXRlc1RvV3JpdGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBSaW5nLT5TaXplT2ZCdWZmZXIgLSBXck9mZikpOyAgICAgIC8vIE51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSB3cml0dGVuIHVudGlsIGJ1ZmZlciB3cmFwLWFyb3VuZA0KKyAgICAgICAgTnVtQnl0ZXNUb1dyaXRlID0gTUlOKE51bUJ5dGVzVG9Xcml0ZSwgTnVtQnl0ZXMpOw0KKyAgICAgICAgbWVtY3B5KHBSaW5nLT5wQnVmZmVyICsgV3JPZmYsIHBCdWZmZXIsIE51bUJ5dGVzVG9Xcml0ZSk7DQorICAgICAgICBOdW1CeXRlc1dyaXR0ZW4gKz0gTnVtQnl0ZXNUb1dyaXRlOw0KKyAgICAgICAgcEJ1ZmZlciAgICAgICAgICs9IE51bUJ5dGVzVG9Xcml0ZTsNCisgICAgICAgIE51bUJ5dGVzICAgICAgICAtPSBOdW1CeXRlc1RvV3JpdGU7DQorICAgICAgICBXck9mZiAgICAgICAgICAgKz0gTnVtQnl0ZXNUb1dyaXRlOw0KKw0KKyAgICAgICAgaWYgKFdyT2ZmID09IHBSaW5nLT5TaXplT2ZCdWZmZXIpDQorICAgICAgICB7DQorICAgICAgICAgICAgV3JPZmYgPSAwdTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHBSaW5nLT5Xck9mZiA9IFdyT2ZmOw0KKyAgICB9DQorICAgIHdoaWxlIChOdW1CeXRlcyk7DQorDQorICAgIC8vDQorICAgIHJldHVybiBOdW1CeXRlc1dyaXR0ZW47DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBfV3JpdGVOb0NoZWNrKCkNCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIFN0b3JlcyBhIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBTRUdHRVIgUlRUIHJpbmcgYnVmZmVyDQorKiAgICBhbmQgdXBkYXRlcyB0aGUgYXNzb2NpYXRlZCB3cml0ZSBwb2ludGVyIHdoaWNoIGlzIHBlcmlvZGljYWxseQ0KKyogICAgcmVhZCBieSB0aGUgaG9zdC4NCisqICAgIEl0IGlzIGNhbGxlcnMgcmVzcG9uc2liaWxpdHkgdG8gbWFrZSBzdXJlIGRhdGEgYWN0dWFsbHkgZml0cyBpbiBidWZmZXIuDQorKg0KKyogIFBhcmFtZXRlcnMNCisqICAgIHBSaW5nICAgICAgICBSaW5nIGJ1ZmZlciB0byBwb3N0IHRvLg0KKyogICAgcEJ1ZmZlciAgICAgIFBvaW50ZXIgdG8gY2hhcmFjdGVyIGFycmF5LiBEb2VzIG5vdCBuZWVkIHRvIHBvaW50IHRvIGEgXDAgdGVybWluYXRlZCBzdHJpbmcuDQorKiAgICBOdW1CeXRlcyAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHN0b3JlZCBpbiB0aGUgU0VHR0VSIFJUVCBjb250cm9sIGJsb2NrLg0KKyoNCisqICBOb3Rlcw0KKyogICAgKDEpIElmIHRoZXJlIG1pZ2h0IG5vdCBiZSBlbm91Z2ggc3BhY2UgaW4gdGhlICJVcCItYnVmZmVyLCBjYWxsIF9Xcml0ZUJsb2NraW5nDQorKi8NCitzdGF0aWMgdm9pZCBfV3JpdGVOb0NoZWNrKFNFR0dFUl9SVFRfUklOR19CVUZGRVIgKnBSaW5nLCBjb25zdCBjaGFyICpwRGF0YSwgdW5zaWduZWQgTnVtQnl0ZXMpDQorew0KKyAgICB1bnNpZ25lZCBOdW1CeXRlc0F0T25jZTsNCisgICAgdW5zaWduZWQgV3JPZmY7DQorICAgIHVuc2lnbmVkIFJlbTsNCisNCisgICAgV3JPZmYgPSBwUmluZy0+V3JPZmY7DQorICAgIFJlbSA9IHBSaW5nLT5TaXplT2ZCdWZmZXIgLSBXck9mZjsNCisNCisgICAgaWYgKFJlbSA+IE51bUJ5dGVzKQ0KKyAgICB7DQorICAgICAgICAvLw0KKyAgICAgICAgLy8gQWxsIGRhdGEgZml0cyBiZWZvcmUgd3JhcCBhcm91bmQNCisgICAgICAgIC8vDQorICAgICAgICBtZW1jcHkocFJpbmctPnBCdWZmZXIgKyBXck9mZiwgcERhdGEsIE51bUJ5dGVzKTsNCisgICAgICAgIHBSaW5nLT5Xck9mZiA9IFdyT2ZmICsgTnVtQnl0ZXM7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICAvLw0KKyAgICAgICAgLy8gV2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBzbyBuZWVkIHRvIHdyYXAgYXJvdW5kDQorICAgICAgICAvLw0KKyAgICAgICAgTnVtQnl0ZXNBdE9uY2UgPSBSZW07DQorICAgICAgICBtZW1jcHkocFJpbmctPnBCdWZmZXIgKyBXck9mZiwgcERhdGEsIE51bUJ5dGVzQXRPbmNlKTsNCisgICAgICAgIE51bUJ5dGVzQXRPbmNlID0gTnVtQnl0ZXMgLSBSZW07DQorICAgICAgICBtZW1jcHkocFJpbmctPnBCdWZmZXIsIHBEYXRhICsgUmVtLCBOdW1CeXRlc0F0T25jZSk7DQorICAgICAgICBwUmluZy0+V3JPZmYgPSBOdW1CeXRlc0F0T25jZTsNCisgICAgfQ0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgX1Bvc3RUZXJtaW5hbFN3aXRjaCgpDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBTd2l0Y2ggdGVybWluYWwgdG8gdGhlIGdpdmVuIHRlcm1pbmFsIElELiAgSXQgaXMgdGhlIGNhbGxlcidzDQorKiAgICByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhlIHRlcm1pbmFsIElEIGlzIGNvcnJlY3QgYW5kIHRoZXJlIGlzDQorKiAgICBlbm91Z2ggc3BhY2UgaW4gdGhlIGJ1ZmZlciBmb3IgdGhpcyB0byBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuDQorKg0KKyogIFBhcmFtZXRlcnMNCisqICAgIHBSaW5nICAgICAgICBSaW5nIGJ1ZmZlciB0byBwb3N0IHRvLg0KKyogICAgVGVybWluYWxJZCAgIFRlcm1pbmFsIElEIHRvIHN3aXRjaCB0by4NCisqLw0KK3N0YXRpYyB2b2lkIF9Qb3N0VGVybWluYWxTd2l0Y2goU0VHR0VSX1JUVF9SSU5HX0JVRkZFUiAqcFJpbmcsIGNoYXIgVGVybWluYWxJZCkNCit7DQorICAgIGNoYXIgYWNbMl07DQorDQorICAgIGFjWzBdID0gMHhGRnU7DQorICAgIGFjWzFdID0gX2FUZXJtaW5hbElkWyh1bnNpZ25lZCBjaGFyKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbElkXTsgIC8vIENhbGxlciBtYWRlIGFscmVhZHkgc3VyZSB0aGF0IFRlcm1pbmFsSWQgZG9lcyBub3QgZXhjZWVkIG91ciB0ZXJtaW5hbCBsaW1pdA0KKyAgICBfV3JpdGVCbG9ja2luZyhwUmluZywgYWMsIDJ1KTsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIF9HZXRBdmFpbFdyaXRlU3BhY2UoKQ0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIHJpbmcNCisqICAgIGJ1ZmZlciB3aXRob3V0IGJsb2NraW5nLg0KKyoNCisqICBQYXJhbWV0ZXJzDQorKiAgICBwUmluZyAgICAgICAgUmluZyBidWZmZXIgdG8gY2hlY2suDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgTnVtYmVyIG9mIGJ5dGVzIHRoYXQgYXJlIGZyZWUgaW4gdGhlIGJ1ZmZlci4NCisqLw0KK3N0YXRpYyB1bnNpZ25lZCBfR2V0QXZhaWxXcml0ZVNwYWNlKFNFR0dFUl9SVFRfUklOR19CVUZGRVIgKnBSaW5nKQ0KK3sNCisgICAgdW5zaWduZWQgUmRPZmY7DQorICAgIHVuc2lnbmVkIFdyT2ZmOw0KKyAgICB1bnNpZ25lZCByOw0KKyAgICAvLw0KKyAgICAvLyBBdm9pZCB3YXJuaW5ncyByZWdhcmRpbmcgdm9sYXRpbGUgYWNjZXNzIG9yZGVyLiAgSXQncyBub3QgYSBwcm9ibGVtDQorICAgIC8vIGluIHRoaXMgY2FzZSwgYnV0IGRhbXBlbiBjb21waWxlciBlbnRodXNpYXNtLg0KKyAgICAvLw0KKyAgICBSZE9mZiA9IHBSaW5nLT5SZE9mZjsNCisgICAgV3JPZmYgPSBwUmluZy0+V3JPZmY7DQorDQorICAgIGlmIChSZE9mZiA8PSBXck9mZikNCisgICAgew0KKyAgICAgICAgciA9IHBSaW5nLT5TaXplT2ZCdWZmZXIgLSAxdSAtIFdyT2ZmICsgUmRPZmY7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByID0gUmRPZmYgLSBXck9mZiAtIDF1Ow0KKyAgICB9DQorDQorICAgIHJldHVybiByOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgUHVibGljIGNvZGUNCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfUmVhZE5vTG9jaygpDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBSZWFkcyBjaGFyYWN0ZXJzIGZyb20gU0VHR0VSIHJlYWwtdGltZS10ZXJtaW5hbCBjb250cm9sIGJsb2NrDQorKiAgICB3aGljaCBoYXZlIGJlZW4gcHJldmlvdXNseSBzdG9yZWQgYnkgdGhlIGhvc3QuDQorKiAgICBEbyBub3QgbG9jayBhZ2FpbnN0IGludGVycnVwdHMgYW5kIG11bHRpcGxlIGFjY2Vzcy4NCisqDQorKiAgUGFyYW1ldGVycw0KKyogICAgQnVmZmVySW5kZXggIEluZGV4IG9mIERvd24tYnVmZmVyIHRvIGJlIHVzZWQgKGUuZy4gMCBmb3IgIlRlcm1pbmFsIikuDQorKiAgICBwQnVmZmVyICAgICAgUG9pbnRlciB0byBidWZmZXIgcHJvdmlkZWQgYnkgdGFyZ2V0IGFwcGxpY2F0aW9uLCB0byBjb3B5IGNoYXJhY3RlcnMgZnJvbSBSVFQtZG93bi1idWZmZXIgdG8uDQorKiAgICBCdWZmZXJTaXplICAgU2l6ZSBvZiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIGJ1ZmZlci4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICBOdW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZC4NCisqLw0KK3Vuc2lnbmVkIFNFR0dFUl9SVFRfUmVhZE5vTG9jayh1bnNpZ25lZCBCdWZmZXJJbmRleCwgdm9pZCAqcERhdGEsIHVuc2lnbmVkIEJ1ZmZlclNpemUpDQorew0KKyAgICB1bnNpZ25lZCBOdW1CeXRlc1JlbTsNCisgICAgdW5zaWduZWQgTnVtQnl0ZXNSZWFkOw0KKyAgICB1bnNpZ25lZCBSZE9mZjsNCisgICAgdW5zaWduZWQgV3JPZmY7DQorICAgIHVuc2lnbmVkIGNoYXIgKnBCdWZmZXI7DQorICAgIFNFR0dFUl9SVFRfUklOR19CVUZGRVIgKnBSaW5nOw0KKyAgICAvLw0KKyAgICBJTklUKCk7DQorICAgIHBSaW5nID0gJl9TRUdHRVJfUlRULmFEb3duW0J1ZmZlckluZGV4XTsNCisgICAgcEJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopcERhdGE7DQorICAgIFJkT2ZmID0gcFJpbmctPlJkT2ZmOw0KKyAgICBXck9mZiA9IHBSaW5nLT5Xck9mZjsNCisgICAgTnVtQnl0ZXNSZWFkID0gMHU7DQorDQorICAgIC8vDQorICAgIC8vIFJlYWQgZnJvbSBjdXJyZW50IHJlYWQgcG9zaXRpb24gdG8gd3JhcC1hcm91bmQgb2YgYnVmZmVyLCBmaXJzdA0KKyAgICAvLw0KKyAgICBpZiAoUmRPZmYgPiBXck9mZikNCisgICAgew0KKyAgICAgICAgTnVtQnl0ZXNSZW0gPSBwUmluZy0+U2l6ZU9mQnVmZmVyIC0gUmRPZmY7DQorICAgICAgICBOdW1CeXRlc1JlbSA9IE1JTihOdW1CeXRlc1JlbSwgQnVmZmVyU2l6ZSk7DQorICAgICAgICBtZW1jcHkocEJ1ZmZlciwgcFJpbmctPnBCdWZmZXIgKyBSZE9mZiwgTnVtQnl0ZXNSZW0pOw0KKyAgICAgICAgTnVtQnl0ZXNSZWFkICs9IE51bUJ5dGVzUmVtOw0KKyAgICAgICAgcEJ1ZmZlciAgICAgICs9IE51bUJ5dGVzUmVtOw0KKyAgICAgICAgQnVmZmVyU2l6ZSAgIC09IE51bUJ5dGVzUmVtOw0KKyAgICAgICAgUmRPZmYgICAgICAgICs9IE51bUJ5dGVzUmVtOw0KKw0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIEhhbmRsZSB3cmFwLWFyb3VuZCBvZiBidWZmZXINCisgICAgICAgIC8vDQorICAgICAgICBpZiAoUmRPZmYgPT0gcFJpbmctPlNpemVPZkJ1ZmZlcikNCisgICAgICAgIHsNCisgICAgICAgICAgICBSZE9mZiA9IDB1Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIFJlYWQgcmVtYWluaW5nIGl0ZW1zIG9mIGJ1ZmZlcg0KKyAgICAvLw0KKyAgICBOdW1CeXRlc1JlbSA9IFdyT2ZmIC0gUmRPZmY7DQorICAgIE51bUJ5dGVzUmVtID0gTUlOKE51bUJ5dGVzUmVtLCBCdWZmZXJTaXplKTsNCisNCisgICAgaWYgKE51bUJ5dGVzUmVtID4gMHUpDQorICAgIHsNCisgICAgICAgIG1lbWNweShwQnVmZmVyLCBwUmluZy0+cEJ1ZmZlciArIFJkT2ZmLCBOdW1CeXRlc1JlbSk7DQorICAgICAgICBOdW1CeXRlc1JlYWQgKz0gTnVtQnl0ZXNSZW07DQorICAgICAgICBwQnVmZmVyICAgICAgKz0gTnVtQnl0ZXNSZW07DQorICAgICAgICBCdWZmZXJTaXplICAgLT0gTnVtQnl0ZXNSZW07DQorICAgICAgICBSZE9mZiAgICAgICAgKz0gTnVtQnl0ZXNSZW07DQorICAgIH0NCisNCisgICAgaWYgKE51bUJ5dGVzUmVhZCkNCisgICAgew0KKyAgICAgICAgcFJpbmctPlJkT2ZmID0gUmRPZmY7DQorICAgIH0NCisNCisgICAgLy8NCisgICAgcmV0dXJuIE51bUJ5dGVzUmVhZDsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfUmVhZA0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgUmVhZHMgY2hhcmFjdGVycyBmcm9tIFNFR0dFUiByZWFsLXRpbWUtdGVybWluYWwgY29udHJvbCBibG9jaw0KKyogICAgd2hpY2ggaGF2ZSBiZWVuIHByZXZpb3VzbHkgc3RvcmVkIGJ5IHRoZSBob3N0Lg0KKyoNCisqICBQYXJhbWV0ZXJzDQorKiAgICBCdWZmZXJJbmRleCAgSW5kZXggb2YgRG93bi1idWZmZXIgdG8gYmUgdXNlZCAoZS5nLiAwIGZvciAiVGVybWluYWwiKS4NCisqICAgIHBCdWZmZXIgICAgICBQb2ludGVyIHRvIGJ1ZmZlciBwcm92aWRlZCBieSB0YXJnZXQgYXBwbGljYXRpb24sIHRvIGNvcHkgY2hhcmFjdGVycyBmcm9tIFJUVC1kb3duLWJ1ZmZlciB0by4NCisqICAgIEJ1ZmZlclNpemUgICBTaXplIG9mIHRoZSB0YXJnZXQgYXBwbGljYXRpb24gYnVmZmVyLg0KKyoNCisqICBSZXR1cm4gdmFsdWUNCisqICAgIE51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiByZWFkLg0KKyovDQordW5zaWduZWQgU0VHR0VSX1JUVF9SZWFkKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCB2b2lkICpwQnVmZmVyLCB1bnNpZ25lZCBCdWZmZXJTaXplKQ0KK3sNCisgICAgdW5zaWduZWQgTnVtQnl0ZXNSZWFkOw0KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBTYXZlZFN0YXRlOw0KKyAgICAvLw0KKyAgICBTRUdHRVJfUlRUX0xPQ0soU2F2ZWRTdGF0ZSk7DQorICAgIC8vDQorICAgIC8vIENhbGwgdGhlIG5vbi1sb2NraW5nIHJlYWQgZnVuY3Rpb24NCisgICAgLy8NCisgICAgTnVtQnl0ZXNSZWFkID0gU0VHR0VSX1JUVF9SZWFkTm9Mb2NrKEJ1ZmZlckluZGV4LCBwQnVmZmVyLCBCdWZmZXJTaXplKTsNCisgICAgLy8NCisgICAgLy8gRmluaXNoIHVwLg0KKyAgICAvLw0KKyAgICBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKTsNCisgICAgLy8NCisgICAgcmV0dXJuIE51bUJ5dGVzUmVhZDsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfV3JpdGVTa2lwTm9Mb2NrDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBTdG9yZXMgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gU0VHR0VSIFJUVA0KKyogICAgY29udHJvbCBibG9jayB3aGljaCBpcyB0aGVuIHJlYWQgYnkgdGhlIGhvc3QuDQorKiAgICBTRUdHRVJfUlRUX1dyaXRlU2tpcE5vTG9jayBkb2VzIG5vdCBsb2NrIHRoZSBhcHBsaWNhdGlvbiBhbmQNCisqICAgIHNraXBzIGFsbCBkYXRhLCBpZiB0aGUgZGF0YSBkb2VzIG5vdCBmaXQgaW50byB0aGUgYnVmZmVyLg0KKyoNCisqICBQYXJhbWV0ZXJzDQorKiAgICBCdWZmZXJJbmRleCAgSW5kZXggb2YgIlVwIi1idWZmZXIgdG8gYmUgdXNlZCAoZS5nLiAwIGZvciAiVGVybWluYWwiKS4NCisqICAgIHBCdWZmZXIgICAgICBQb2ludGVyIHRvIGNoYXJhY3RlciBhcnJheS4gRG9lcyBub3QgbmVlZCB0byBwb2ludCB0byBhIFwwIHRlcm1pbmF0ZWQgc3RyaW5nLg0KKyogICAgTnVtQnl0ZXMgICAgIE51bWJlciBvZiBieXRlcyB0byBiZSBzdG9yZWQgaW4gdGhlIFNFR0dFUiBSVFQgY29udHJvbCBibG9jay4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICBOdW1iZXIgb2YgYnl0ZXMgd2hpY2ggaGF2ZSBiZWVuIHN0b3JlZCBpbiB0aGUgIlVwIi1idWZmZXIuDQorKg0KKyogIE5vdGVzDQorKiAgICAoMSkgSWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBpbiB0aGUgIlVwIi1idWZmZXIsIGFsbCBkYXRhIGlzIGRyb3BwZWQuDQorKiAgICAoMikgRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjYWxsIEluaXQoKQ0KKyogICAgICAgIGFuZCBtYXkgb25seSBiZSBjYWxsZWQgYWZ0ZXIgUlRUIGhhcyBiZWVuIGluaXRpYWxpemVkLg0KKyogICAgICAgIEVpdGhlciBieSBjYWxsaW5nIFNFR0dFUl9SVFRfSW5pdCgpIG9yIGNhbGxpbmcgYW5vdGhlciBSVFQgQVBJIGZ1bmN0aW9uIGZpcnN0Lg0KKyovDQordW5zaWduZWQgU0VHR0VSX1JUVF9Xcml0ZVNraXBOb0xvY2sodW5zaWduZWQgQnVmZmVySW5kZXgsIGNvbnN0IHZvaWQgKnBCdWZmZXIsIHVuc2lnbmVkIE51bUJ5dGVzKQ0KK3sNCisgICAgY29uc3QgY2hhciAgKnBEYXRhOw0KKyAgICBTRUdHRVJfUlRUX1JJTkdfQlVGRkVSICpwUmluZzsNCisgICAgdW5zaWduZWQgICAgIEF2YWlsOw0KKyAgICB1bnNpZ25lZCAgICAgUmRPZmY7DQorICAgIHVuc2lnbmVkICAgICBXck9mZjsNCisgICAgdW5zaWduZWQgICAgIFJlbTsNCisNCisgICAgcERhdGEgPSAoY29uc3QgY2hhciAqKXBCdWZmZXI7DQorICAgIC8vDQorICAgIC8vIEdldCAidG8taG9zdCIgcmluZyBidWZmZXIgYW5kIGNvcHkgc29tZSBlbGVtZW50cyBpbnRvIGxvY2FsIHZhcmlhYmxlcy4NCisgICAgLy8NCisgICAgcFJpbmcgPSAmX1NFR0dFUl9SVFQuYVVwW0J1ZmZlckluZGV4XTsNCisgICAgUmRPZmYgPSBwUmluZy0+UmRPZmY7DQorICAgIFdyT2ZmID0gcFJpbmctPldyT2ZmOw0KKw0KKyAgICAvLw0KKyAgICAvLyBIYW5kbGUgdGhlIG1vc3QgY29tbW9uIGNhc2VzIGZhc3Rlc3QuDQorICAgIC8vIFdoaWNoIGlzOg0KKyAgICAvLyAgICBSZE9mZiA8PSBXck9mZiAtPiBTcGFjZSB1bnRpbCB3cmFwIGFyb3VuZCBpcyBmcmVlLg0KKyAgICAvLyAgQU5EDQorICAgIC8vICAgIFdyT2ZmICsgTnVtQnl0ZXMgPCBTaXplT2ZCdWZmZXIgLT4gTm8gV3JhcCBhcm91bmQgbmVjZXNzYXJ5Lg0KKyAgICAvLw0KKyAgICAvLyAgT1INCisgICAgLy8NCisgICAgLy8gICAgUmRPZmYgPiBXck9mZiAtPiBTcGFjZSB1bnRpbCBSZE9mZiAtIDEgaXMgZnJlZS4NCisgICAgLy8gIEFORA0KKyAgICAvLyAgICBXck9mZiArIE51bUJ5dGVzIDwgUmRPZmYgLT4gRGF0YSBmaXRzIGludG8gYnVmZmVyDQorICAgIC8vDQorICAgIGlmIChSZE9mZiA8PSBXck9mZikNCisgICAgew0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIEdldCBzcGFjZSB1bnRpbCBXck9mZiB3aWxsIGJlIGF0IHdyYXAgYXJvdW5kLg0KKyAgICAgICAgLy8NCisgICAgICAgIEF2YWlsID0gcFJpbmctPlNpemVPZkJ1ZmZlciAtIDF1IC0gV3JPZmYgOw0KKw0KKyAgICAgICAgaWYgKEF2YWlsID49IE51bUJ5dGVzKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1lbWNweShwUmluZy0+cEJ1ZmZlciArIFdyT2ZmLCBwRGF0YSwgTnVtQnl0ZXMpOw0KKyAgICAgICAgICAgIHBSaW5nLT5Xck9mZiA9IFdyT2ZmICsgTnVtQnl0ZXM7DQorICAgICAgICAgICAgcmV0dXJuIDE7DQorICAgICAgICB9DQorDQorICAgICAgICAvLw0KKyAgICAgICAgLy8gSWYgZGF0YSBkaWQgbm90IGZpdCBpbnRvIHNwYWNlIHVudGlsIHdyYXAgYXJvdW5kIGNhbGN1bGF0ZSBjb21wbGV0ZSBzcGFjZSBpbiBidWZmZXIuDQorICAgICAgICAvLw0KKyAgICAgICAgQXZhaWwgKz0gUmRPZmY7DQorDQorICAgICAgICAvLw0KKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgc3RpbGwgbm8gc3BhY2UgZm9yIHRoZSB3aG9sZSBvZiB0aGlzIG91dHB1dCwgZG9uJ3QgYm90aGVyLg0KKyAgICAgICAgLy8NCisgICAgICAgIGlmIChBdmFpbCA+PSBOdW1CeXRlcykNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLw0KKyAgICAgICAgICAgIC8vICBPSywgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgaW4gYnVmZmVyLiBDb3B5IGluIG9uZSBvciAyIGNodW5rcw0KKyAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgUmVtID0gcFJpbmctPlNpemVPZkJ1ZmZlciAtIFdyT2ZmOyAgICAgIC8vIFNwYWNlIHVudGlsIGVuZCBvZiBidWZmZXINCisNCisgICAgICAgICAgICBpZiAoUmVtID4gTnVtQnl0ZXMpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtZW1jcHkocFJpbmctPnBCdWZmZXIgKyBXck9mZiwgcERhdGEsIE51bUJ5dGVzKTsNCisgICAgICAgICAgICAgICAgcFJpbmctPldyT2ZmID0gV3JPZmYgKyBOdW1CeXRlczsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgLy8NCisgICAgICAgICAgICAgICAgLy8gV2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBzbyBuZWVkIHRvIHdyYXAgYXJvdW5kDQorICAgICAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgICAgIG1lbWNweShwUmluZy0+cEJ1ZmZlciArIFdyT2ZmLCBwRGF0YSwgUmVtKTsNCisgICAgICAgICAgICAgICAgbWVtY3B5KHBSaW5nLT5wQnVmZmVyLCBwRGF0YSArIFJlbSwgTnVtQnl0ZXMgLSBSZW0pOw0KKyAgICAgICAgICAgICAgICBwUmluZy0+V3JPZmYgPSBOdW1CeXRlcyAtIFJlbTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgcmV0dXJuIDE7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBBdmFpbCA9IFJkT2ZmIC0gV3JPZmYgLSAxdTsNCisNCisgICAgICAgIGlmIChBdmFpbCA+PSBOdW1CeXRlcykNCisgICAgICAgIHsNCisgICAgICAgICAgICBtZW1jcHkocFJpbmctPnBCdWZmZXIgKyBXck9mZiwgcERhdGEsIE51bUJ5dGVzKTsNCisgICAgICAgICAgICBwUmluZy0+V3JPZmYgPSBXck9mZiArIE51bUJ5dGVzOw0KKyAgICAgICAgICAgIHJldHVybiAxOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQgbm8gZGF0YSBoYXMgYmVlbiB3cml0dGVuDQorICAgIC8vDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9Xcml0ZU5vTG9jaw0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgU3RvcmVzIGEgc3BlY2lmaWVkIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIFNFR0dFUiBSVFQNCisqICAgIGNvbnRyb2wgYmxvY2sgd2hpY2ggaXMgdGhlbiByZWFkIGJ5IHRoZSBob3N0Lg0KKyogICAgU0VHR0VSX1JUVF9Xcml0ZU5vTG9jayBkb2VzIG5vdCBsb2NrIHRoZSBhcHBsaWNhdGlvbi4NCisqDQorKiAgUGFyYW1ldGVycw0KKyogICAgQnVmZmVySW5kZXggIEluZGV4IG9mICJVcCItYnVmZmVyIHRvIGJlIHVzZWQgKGUuZy4gMCBmb3IgIlRlcm1pbmFsIikuDQorKiAgICBwQnVmZmVyICAgICAgUG9pbnRlciB0byBjaGFyYWN0ZXIgYXJyYXkuIERvZXMgbm90IG5lZWQgdG8gcG9pbnQgdG8gYSBcMCB0ZXJtaW5hdGVkIHN0cmluZy4NCisqICAgIE51bUJ5dGVzICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgc3RvcmVkIGluIHRoZSBTRUdHRVIgUlRUIGNvbnRyb2wgYmxvY2suDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgTnVtYmVyIG9mIGJ5dGVzIHdoaWNoIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlICJVcCItYnVmZmVyLg0KKyoNCisqICBOb3Rlcw0KKyogICAgKDEpIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlICJVcCItYnVmZmVyLCByZW1haW5pbmcgY2hhcmFjdGVycyBvZiBwQnVmZmVyIGFyZSBkcm9wcGVkLg0KKyogICAgKDIpIEZvciBwZXJmb3JtYW5jZSByZWFzb25zIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2FsbCBJbml0KCkNCisqICAgICAgICBhbmQgbWF5IG9ubHkgYmUgY2FsbGVkIGFmdGVyIFJUVCBoYXMgYmVlbiBpbml0aWFsaXplZC4NCisqICAgICAgICBFaXRoZXIgYnkgY2FsbGluZyBTRUdHRVJfUlRUX0luaXQoKSBvciBjYWxsaW5nIGFub3RoZXIgUlRUIEFQSSBmdW5jdGlvbiBmaXJzdC4NCisqLw0KK3Vuc2lnbmVkIFNFR0dFUl9SVFRfV3JpdGVOb0xvY2sodW5zaWduZWQgQnVmZmVySW5kZXgsIGNvbnN0IHZvaWQgKnBCdWZmZXIsIHVuc2lnbmVkIE51bUJ5dGVzKQ0KK3sNCisgICAgdW5zaWduZWQgU3RhdHVzOw0KKyAgICB1bnNpZ25lZCBBdmFpbDsNCisgICAgY29uc3QgY2hhciAgKnBEYXRhOw0KKyAgICBTRUdHRVJfUlRUX1JJTkdfQlVGRkVSICpwUmluZzsNCisNCisgICAgcERhdGEgPSAoY29uc3QgY2hhciAqKXBCdWZmZXI7DQorICAgIC8vDQorICAgIC8vIEdldCAidG8taG9zdCIgcmluZyBidWZmZXIuDQorICAgIC8vDQorICAgIHBSaW5nID0gJl9TRUdHRVJfUlRULmFVcFtCdWZmZXJJbmRleF07DQorDQorICAgIC8vDQorICAgIC8vIEhvdyB3ZSBvdXRwdXQgZGVwZW5kcyB1cG9uIHRoZSBtb2RlLi4uDQorICAgIC8vDQorICAgIHN3aXRjaCAocFJpbmctPkZsYWdzKQ0KKyAgICB7DQorICAgIGNhc2UgU0VHR0VSX1JUVF9NT0RFX05PX0JMT0NLX1NLSVA6DQorICAgICAgICAvLw0KKyAgICAgICAgLy8gSWYgd2UgYXJlIGluIHNraXAgbW9kZSBhbmQgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSB3aG9sZQ0KKyAgICAgICAgLy8gb2YgdGhpcyBvdXRwdXQsIGRvbid0IGJvdGhlci4NCisgICAgICAgIC8vDQorICAgICAgICBBdmFpbCA9IF9HZXRBdmFpbFdyaXRlU3BhY2UocFJpbmcpOw0KKw0KKyAgICAgICAgaWYgKEF2YWlsIDwgTnVtQnl0ZXMpDQorICAgICAgICB7DQorICAgICAgICAgICAgU3RhdHVzID0gMHU7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgU3RhdHVzID0gTnVtQnl0ZXM7DQorICAgICAgICAgICAgX1dyaXRlTm9DaGVjayhwUmluZywgcERhdGEsIE51bUJ5dGVzKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNFR0dFUl9SVFRfTU9ERV9OT19CTE9DS19UUklNOg0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIElmIHdlIGFyZSBpbiB0cmltIG1vZGUsIHRyaW0gdG8gd2hhdCB3ZSBjYW4gb3V0cHV0IHdpdGhvdXQgYmxvY2tpbmcuDQorICAgICAgICAvLw0KKyAgICAgICAgQXZhaWwgPSBfR2V0QXZhaWxXcml0ZVNwYWNlKHBSaW5nKTsNCisgICAgICAgIFN0YXR1cyA9IEF2YWlsIDwgTnVtQnl0ZXMgPyBBdmFpbCA6IE51bUJ5dGVzOw0KKyAgICAgICAgX1dyaXRlTm9DaGVjayhwUmluZywgcERhdGEsIFN0YXR1cyk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTRUdHRVJfUlRUX01PREVfQkxPQ0tfSUZfRklGT19GVUxMOg0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIElmIHdlIGFyZSBpbiBibG9ja2luZyBtb2RlLCBvdXRwdXQgZXZlcnl0aGluZy4NCisgICAgICAgIC8vDQorICAgICAgICBTdGF0dXMgPSBfV3JpdGVCbG9ja2luZyhwUmluZywgcERhdGEsIE51bUJ5dGVzKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgU3RhdHVzID0gMHU7DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBGaW5pc2ggdXAuDQorICAgIC8vDQorICAgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBTRUdHRVJfUlRUX1dyaXRlDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBTdG9yZXMgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gU0VHR0VSIFJUVA0KKyogICAgY29udHJvbCBibG9jayB3aGljaCBpcyB0aGVuIHJlYWQgYnkgdGhlIGhvc3QuDQorKg0KKyogIFBhcmFtZXRlcnMNCisqICAgIEJ1ZmZlckluZGV4ICBJbmRleCBvZiAiVXAiLWJ1ZmZlciB0byBiZSB1c2VkIChlLmcuIDAgZm9yICJUZXJtaW5hbCIpLg0KKyogICAgcEJ1ZmZlciAgICAgIFBvaW50ZXIgdG8gY2hhcmFjdGVyIGFycmF5LiBEb2VzIG5vdCBuZWVkIHRvIHBvaW50IHRvIGEgXDAgdGVybWluYXRlZCBzdHJpbmcuDQorKiAgICBOdW1CeXRlcyAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHN0b3JlZCBpbiB0aGUgU0VHR0VSIFJUVCBjb250cm9sIGJsb2NrLg0KKyoNCisqICBSZXR1cm4gdmFsdWUNCisqICAgIE51bWJlciBvZiBieXRlcyB3aGljaCBoYXZlIGJlZW4gc3RvcmVkIGluIHRoZSAiVXAiLWJ1ZmZlci4NCisqDQorKiAgTm90ZXMNCisqICAgICgxKSBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGluIHRoZSAiVXAiLWJ1ZmZlciwgcmVtYWluaW5nIGNoYXJhY3RlcnMgb2YgcEJ1ZmZlciBhcmUgZHJvcHBlZC4NCisqLw0KK3Vuc2lnbmVkIFNFR0dFUl9SVFRfV3JpdGUodW5zaWduZWQgQnVmZmVySW5kZXgsIGNvbnN0IHZvaWQgKnBCdWZmZXIsIHVuc2lnbmVkIE51bUJ5dGVzKQ0KK3sNCisgICAgdW5zaWduZWQgU3RhdHVzOw0KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBTYXZlZFN0YXRlOw0KKyAgICAvLw0KKyAgICBJTklUKCk7DQorICAgIFNFR0dFUl9SVFRfTE9DSyhTYXZlZFN0YXRlKTsNCisgICAgLy8NCisgICAgLy8gQ2FsbCB0aGUgbm9uLWxvY2tpbmcgd3JpdGUgZnVuY3Rpb24NCisgICAgLy8NCisgICAgU3RhdHVzID0gU0VHR0VSX1JUVF9Xcml0ZU5vTG9jayhCdWZmZXJJbmRleCwgcEJ1ZmZlciwgTnVtQnl0ZXMpOw0KKyAgICAvLw0KKyAgICAvLyBGaW5pc2ggdXAuDQorICAgIC8vDQorICAgIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpOw0KKyAgICAvLw0KKyAgICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9Xcml0ZVN0cmluZw0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgU3RvcmVzIHN0cmluZyBpbiBTRUdHRVIgUlRUIGNvbnRyb2wgYmxvY2suDQorKiAgICBUaGlzIGRhdGEgaXMgcmVhZCBieSB0aGUgaG9zdC4NCisqDQorKiAgUGFyYW1ldGVycw0KKyogICAgQnVmZmVySW5kZXggIEluZGV4IG9mICJVcCItYnVmZmVyIHRvIGJlIHVzZWQgKGUuZy4gMCBmb3IgIlRlcm1pbmFsIikuDQorKiAgICBzICAgICAgICAgICAgUG9pbnRlciB0byBzdHJpbmcuDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgTnVtYmVyIG9mIGJ5dGVzIHdoaWNoIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlICJVcCItYnVmZmVyLg0KKyoNCisqICBOb3Rlcw0KKyogICAgKDEpIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlICJVcCItYnVmZmVyLCBkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiwNCisqICAgICAgICByZW1haW5pbmcgY2hhcmFjdGVycyBtYXkgYmUgZHJvcHBlZCBvciBSVFQgbW9kdWxlIHdhaXRzIHVudGlsIHRoZXJlIGlzIG1vcmUgc3BhY2UgaW4gdGhlIGJ1ZmZlci4NCisqICAgICgyKSBTdHJpbmcgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIFwwIHRlcm1pbmF0ZWQNCisqICAgICgzKSBcMCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIgaXMgKm5vdCogc3RvcmVkIGluIFJUVCBidWZmZXINCisqLw0KK3Vuc2lnbmVkIFNFR0dFUl9SVFRfV3JpdGVTdHJpbmcodW5zaWduZWQgQnVmZmVySW5kZXgsIGNvbnN0IGNoYXIgKnMpDQorew0KKyAgICB1bnNpZ25lZCBMZW47DQorDQorICAgIExlbiA9IFNUUkxFTihzKTsNCisgICAgcmV0dXJuIFNFR0dFUl9SVFRfV3JpdGUoQnVmZmVySW5kZXgsIHMsIExlbik7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBTRUdHRVJfUlRUX0dldEtleQ0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgUmVhZHMgb25lIGNoYXJhY3RlciBmcm9tIHRoZSBTRUdHRVIgUlRUIGJ1ZmZlci4NCisqICAgIEhvc3QgaGFzIHByZXZpb3VzbHkgc3RvcmVkIGRhdGEgdGhlcmUuDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgPCAgMCAtICAgTm8gY2hhcmFjdGVyIGF2YWlsYWJsZSAoYnVmZmVyIGVtcHR5KS4NCisqICAgID49IDAgLSAgIENoYXJhY3RlciB3aGljaCBoYXMgYmVlbiByZWFkLiAoUG9zc2libGUgdmFsdWVzOiAwIC0gMjU1KQ0KKyoNCisqICBOb3Rlcw0KKyogICAgKDEpIFRoaXMgZnVuY3Rpb24gaXMgb25seSBzcGVjaWZpZWQgZm9yIGFjY2Vzc2VzIHRvIFJUVCBidWZmZXIgMC4NCisqLw0KK2ludCBTRUdHRVJfUlRUX0dldEtleSh2b2lkKQ0KK3sNCisgICAgY2hhciBjOw0KKyAgICBpbnQgcjsNCisNCisgICAgciA9IChpbnQpU0VHR0VSX1JUVF9SZWFkKDB1LCAmYywgMXUpOw0KKw0KKyAgICBpZiAociA9PSAxKQ0KKyAgICB7DQorICAgICAgICByID0gKGludCkodW5zaWduZWQgY2hhciljOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgciA9IC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiByOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9XYWl0S2V5DQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBXYWl0cyB1bnRpbCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGlzIGF2YWlibGUgaW4gdGhlIFNFR0dFUiBSVFQgYnVmZmVyLg0KKyogICAgT25jZSBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUsIGl0IGlzIHJlYWQgYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICA+PTAgLSAgIENoYXJhY3RlciB3aGljaCBoYXMgYmVlbiByZWFkLg0KKyoNCisqICBOb3Rlcw0KKyogICAgKDEpIFRoaXMgZnVuY3Rpb24gaXMgb25seSBzcGVjaWZpZWQgZm9yIGFjY2Vzc2VzIHRvIFJUVCBidWZmZXIgMA0KKyogICAgKDIpIFRoaXMgZnVuY3Rpb24gaXMgYmxvY2tpbmcgaWYgbm8gY2hhcmFjdGVyIGlzIHByZXNlbnQgaW4gUlRUIGJ1ZmZlcg0KKyovDQoraW50IFNFR0dFUl9SVFRfV2FpdEtleSh2b2lkKQ0KK3sNCisgICAgaW50IHI7DQorDQorICAgIGRvDQorICAgIHsNCisgICAgICAgIHIgPSBTRUdHRVJfUlRUX0dldEtleSgpOw0KKyAgICB9DQorICAgIHdoaWxlIChyIDwgMCk7DQorDQorICAgIHJldHVybiByOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9IYXNLZXkNCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIENoZWNrcyBpZiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGZvciByZWFkaW5nIGlzIGF2YWlsYWJsZSBpbiB0aGUgU0VHR0VSIFJUVCBidWZmZXIuDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgPT0gMCAtICAgICBObyBjaGFyYWN0ZXJzIGFyZSBhdmFpbGFibGUgdG8gcmVhZC4NCisqICAgID09IDEgLSAgICAgQXQgbGVhc3Qgb25lIGNoYXJhY3RlciBpcyBhdmFpbGFibGUuDQorKg0KKyogIE5vdGVzDQorKiAgICAoMSkgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHNwZWNpZmllZCBmb3IgYWNjZXNzZXMgdG8gUlRUIGJ1ZmZlciAwDQorKi8NCitpbnQgU0VHR0VSX1JUVF9IYXNLZXkodm9pZCkNCit7DQorICAgIHVuc2lnbmVkIFJkT2ZmOw0KKyAgICBpbnQgcjsNCisNCisgICAgSU5JVCgpOw0KKyAgICBSZE9mZiA9IF9TRUdHRVJfUlRULmFEb3duWzBdLlJkT2ZmOw0KKw0KKyAgICBpZiAoUmRPZmYgIT0gX1NFR0dFUl9SVFQuYURvd25bMF0uV3JPZmYpDQorICAgIHsNCisgICAgICAgIHIgPSAxOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgciA9IDA7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHI7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBTRUdHRVJfUlRUX0hhc0RhdGENCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIENoZWNrIGlmIHRoZXJlIGlzIGRhdGEgZnJvbSB0aGUgaG9zdCBpbiB0aGUgZ2l2ZW4gYnVmZmVyLg0KKyoNCisqICBSZXR1cm4gdmFsdWU6DQorKiAgPT0wOiAgTm8gZGF0YQ0KKyogICE9MDogIERhdGEgaW4gYnVmZmVyDQorKg0KKyovDQordW5zaWduZWQgU0VHR0VSX1JUVF9IYXNEYXRhKHVuc2lnbmVkIEJ1ZmZlckluZGV4KQ0KK3sNCisgICAgU0VHR0VSX1JUVF9SSU5HX0JVRkZFUiAqcFJpbmc7DQorICAgIHVuc2lnbmVkIHY7DQorDQorICAgIHBSaW5nID0gJl9TRUdHRVJfUlRULmFEb3duW0J1ZmZlckluZGV4XTsNCisgICAgdiA9IHBSaW5nLT5Xck9mZjsNCisgICAgcmV0dXJuIHYgLSBwUmluZy0+UmRPZmY7DQorfQ0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBTRUdHRVJfUlRUX0NvbmZpZ1VwQnVmZmVyDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBSdW4tdGltZSBjb25maWd1cmF0aW9uIG9mIGEgc3BlY2lmaWMgdXAtYnVmZmVyIChULT5IKS4NCisqICAgIEJ1ZmZlciB0byBiZSBjb25maWd1cmVkIGlzIHNwZWNpZmllZCBieSBpbmRleC4NCisqICAgIFRoaXMgaW5jbHVkZXM6IEJ1ZmZlciBhZGRyZXNzLCBzaXplLCBuYW1lLCBmbGFncywgLi4uDQorKg0KKyogIFBhcmFtZXRlcnMNCisqICAgIEJ1ZmZlckluZGV4ICBJbmRleCBvZiB0aGUgYnVmZmVyIHRvIGNvbmZpZ3VyZS4NCisqICAgIHNOYW1lICAgICAgICBQb2ludGVyIHRvIGEgY29uc3RhbnQgbmFtZSBzdHJpbmcuDQorKiAgICBwQnVmZmVyICAgICAgUG9pbnRlciB0byBhIGJ1ZmZlciB0byBiZSB1c2VkLg0KKyogICAgQnVmZmVyU2l6ZSAgIFNpemUgb2YgdGhlIGJ1ZmZlci4NCisqICAgIEZsYWdzICAgICAgICBPcGVyYXRpbmcgbW9kZXMuIERlZmluZSBiZWhhdmlvciBpZiBidWZmZXIgaXMgZnVsbCAobm90IGVub3VnaCBzcGFjZSBmb3IgZW50aXJlIG1lc3NhZ2UpLg0KKyoNCisqICBSZXR1cm4gdmFsdWUNCisqICAgID49IDAgLSBPLksuDQorKiAgICAgPCAwIC0gRXJyb3INCisqLw0KK2ludCBTRUdHRVJfUlRUX0NvbmZpZ1VwQnVmZmVyKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCBjb25zdCBjaGFyICpzTmFtZSwgdm9pZCAqcEJ1ZmZlciwgdW5zaWduZWQgQnVmZmVyU2l6ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBGbGFncykNCit7DQorICAgIGludCByOw0KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBTYXZlZFN0YXRlOw0KKw0KKyAgICBJTklUKCk7DQorDQorICAgIGlmIChCdWZmZXJJbmRleCA8ICh1bnNpZ25lZClfU0VHR0VSX1JUVC5NYXhOdW1VcEJ1ZmZlcnMpDQorICAgIHsNCisgICAgICAgIFNFR0dFUl9SVFRfTE9DSyhTYXZlZFN0YXRlKTsNCisNCisgICAgICAgIGlmIChCdWZmZXJJbmRleCA+IDB1KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF9TRUdHRVJfUlRULmFVcFtCdWZmZXJJbmRleF0uc05hbWUgICAgICAgID0gc05hbWU7DQorICAgICAgICAgICAgX1NFR0dFUl9SVFQuYVVwW0J1ZmZlckluZGV4XS5wQnVmZmVyICAgICAgPSBwQnVmZmVyOw0KKyAgICAgICAgICAgIF9TRUdHRVJfUlRULmFVcFtCdWZmZXJJbmRleF0uU2l6ZU9mQnVmZmVyID0gQnVmZmVyU2l6ZTsNCisgICAgICAgICAgICBfU0VHR0VSX1JUVC5hVXBbQnVmZmVySW5kZXhdLlJkT2ZmICAgICAgICA9IDB1Ow0KKyAgICAgICAgICAgIF9TRUdHRVJfUlRULmFVcFtCdWZmZXJJbmRleF0uV3JPZmYgICAgICAgID0gMHU7DQorICAgICAgICB9DQorDQorICAgICAgICBfU0VHR0VSX1JUVC5hVXBbQnVmZmVySW5kZXhdLkZsYWdzICAgICAgICAgID0gRmxhZ3M7DQorICAgICAgICBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKTsNCisgICAgICAgIHIgPSAgMDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHIgPSAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcjsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfQ29uZmlnRG93bkJ1ZmZlcg0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgUnVuLXRpbWUgY29uZmlndXJhdGlvbiBvZiBhIHNwZWNpZmljIGRvd24tYnVmZmVyIChILT5UKS4NCisqICAgIEJ1ZmZlciB0byBiZSBjb25maWd1cmVkIGlzIHNwZWNpZmllZCBieSBpbmRleC4NCisqICAgIFRoaXMgaW5jbHVkZXM6IEJ1ZmZlciBhZGRyZXNzLCBzaXplLCBuYW1lLCBmbGFncywgLi4uDQorKg0KKyogIFBhcmFtZXRlcnMNCisqICAgIEJ1ZmZlckluZGV4ICBJbmRleCBvZiB0aGUgYnVmZmVyIHRvIGNvbmZpZ3VyZS4NCisqICAgIHNOYW1lICAgICAgICBQb2ludGVyIHRvIGEgY29uc3RhbnQgbmFtZSBzdHJpbmcuDQorKiAgICBwQnVmZmVyICAgICAgUG9pbnRlciB0byBhIGJ1ZmZlciB0byBiZSB1c2VkLg0KKyogICAgQnVmZmVyU2l6ZSAgIFNpemUgb2YgdGhlIGJ1ZmZlci4NCisqICAgIEZsYWdzICAgICAgICBPcGVyYXRpbmcgbW9kZXMuIERlZmluZSBiZWhhdmlvciBpZiBidWZmZXIgaXMgZnVsbCAobm90IGVub3VnaCBzcGFjZSBmb3IgZW50aXJlIG1lc3NhZ2UpLg0KKyoNCisqICBSZXR1cm4gdmFsdWUNCisqICAgID49IDAgIE8uSy4NCisqICAgICA8IDAgIEVycm9yDQorKi8NCitpbnQgU0VHR0VSX1JUVF9Db25maWdEb3duQnVmZmVyKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCBjb25zdCBjaGFyICpzTmFtZSwgdm9pZCAqcEJ1ZmZlciwgdW5zaWduZWQgQnVmZmVyU2l6ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIEZsYWdzKQ0KK3sNCisgICAgaW50IHI7DQorICAgIHZvbGF0aWxlIHVuc2lnbmVkIFNhdmVkU3RhdGU7DQorDQorICAgIElOSVQoKTsNCisNCisgICAgaWYgKEJ1ZmZlckluZGV4IDwgKHVuc2lnbmVkKV9TRUdHRVJfUlRULk1heE51bURvd25CdWZmZXJzKQ0KKyAgICB7DQorICAgICAgICBTRUdHRVJfUlRUX0xPQ0soU2F2ZWRTdGF0ZSk7DQorDQorICAgICAgICBpZiAoQnVmZmVySW5kZXggPiAwdSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBfU0VHR0VSX1JUVC5hRG93bltCdWZmZXJJbmRleF0uc05hbWUgICAgICAgID0gc05hbWU7DQorICAgICAgICAgICAgX1NFR0dFUl9SVFQuYURvd25bQnVmZmVySW5kZXhdLnBCdWZmZXIgICAgICA9IHBCdWZmZXI7DQorICAgICAgICAgICAgX1NFR0dFUl9SVFQuYURvd25bQnVmZmVySW5kZXhdLlNpemVPZkJ1ZmZlciA9IEJ1ZmZlclNpemU7DQorICAgICAgICAgICAgX1NFR0dFUl9SVFQuYURvd25bQnVmZmVySW5kZXhdLlJkT2ZmICAgICAgICA9IDB1Ow0KKyAgICAgICAgICAgIF9TRUdHRVJfUlRULmFEb3duW0J1ZmZlckluZGV4XS5Xck9mZiAgICAgICAgPSAwdTsNCisgICAgICAgIH0NCisNCisgICAgICAgIF9TRUdHRVJfUlRULmFEb3duW0J1ZmZlckluZGV4XS5GbGFncyAgICAgICAgICA9IEZsYWdzOw0KKyAgICAgICAgU0VHR0VSX1JUVF9VTkxPQ0soU2F2ZWRTdGF0ZSk7DQorICAgICAgICByID0gIDA7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByID0gLTE7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHI7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBTRUdHRVJfUlRUX1NldE5hbWVVcEJ1ZmZlcg0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgUnVuLXRpbWUgY29uZmlndXJhdGlvbiBvZiBhIHNwZWNpZmljIHVwLWJ1ZmZlciBuYW1lIChULT5IKS4NCisqICAgIEJ1ZmZlciB0byBiZSBjb25maWd1cmVkIGlzIHNwZWNpZmllZCBieSBpbmRleC4NCisqDQorKiAgUGFyYW1ldGVycw0KKyogICAgQnVmZmVySW5kZXggIEluZGV4IG9mIHRoZSBidWZmZXIgdG8gcmVuYW1lZC4NCisqICAgIHNOYW1lICAgICAgICBQb2ludGVyIHRvIGEgY29uc3RhbnQgbmFtZSBzdHJpbmcuDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgPj0gMCAgTy5LLg0KKyogICAgIDwgMCAgRXJyb3INCisqLw0KK2ludCBTRUdHRVJfUlRUX1NldE5hbWVVcEJ1ZmZlcih1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3QgY2hhciAqc05hbWUpDQorew0KKyAgICBpbnQgcjsNCisgICAgdm9sYXRpbGUgdW5zaWduZWQgU2F2ZWRTdGF0ZTsNCisNCisgICAgSU5JVCgpOw0KKw0KKyAgICBpZiAoQnVmZmVySW5kZXggPCAodW5zaWduZWQpX1NFR0dFUl9SVFQuTWF4TnVtVXBCdWZmZXJzKQ0KKyAgICB7DQorICAgICAgICBTRUdHRVJfUlRUX0xPQ0soU2F2ZWRTdGF0ZSk7DQorICAgICAgICBfU0VHR0VSX1JUVC5hVXBbQnVmZmVySW5kZXhdLnNOYW1lID0gc05hbWU7DQorICAgICAgICBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKTsNCisgICAgICAgIHIgPSAgMDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHIgPSAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcjsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfU2V0TmFtZURvd25CdWZmZXINCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIFJ1bi10aW1lIGNvbmZpZ3VyYXRpb24gb2YgYSBzcGVjaWZpYyBEb3duLWJ1ZmZlciBuYW1lIChULT5IKS4NCisqICAgIEJ1ZmZlciB0byBiZSBjb25maWd1cmVkIGlzIHNwZWNpZmllZCBieSBpbmRleC4NCisqDQorKiAgUGFyYW1ldGVycw0KKyogICAgQnVmZmVySW5kZXggIEluZGV4IG9mIHRoZSBidWZmZXIgdG8gcmVuYW1lZC4NCisqICAgIHNOYW1lICAgICAgICBQb2ludGVyIHRvIGEgY29uc3RhbnQgbmFtZSBzdHJpbmcuDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgPj0gMCAgTy5LLg0KKyogICAgIDwgMCAgRXJyb3INCisqLw0KK2ludCBTRUdHRVJfUlRUX1NldE5hbWVEb3duQnVmZmVyKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCBjb25zdCBjaGFyICpzTmFtZSkNCit7DQorICAgIGludCByOw0KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBTYXZlZFN0YXRlOw0KKw0KKyAgICBJTklUKCk7DQorDQorICAgIGlmIChCdWZmZXJJbmRleCA8ICh1bnNpZ25lZClfU0VHR0VSX1JUVC5NYXhOdW1Eb3duQnVmZmVycykNCisgICAgew0KKyAgICAgICAgU0VHR0VSX1JUVF9MT0NLKFNhdmVkU3RhdGUpOw0KKyAgICAgICAgX1NFR0dFUl9SVFQuYURvd25bQnVmZmVySW5kZXhdLnNOYW1lID0gc05hbWU7DQorICAgICAgICBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKTsNCisgICAgICAgIHIgPSAgMDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHIgPSAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcjsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfSW5pdA0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgSW5pdGlhbGl6ZXMgdGhlIFJUVCBDb250cm9sIEJsb2NrLg0KKyogICAgU2hvdWxkIGJlIHVzZWQgaW4gUkFNIHRhcmdldHMsIGF0IHN0YXJ0IG9mIHRoZSBhcHBsaWNhdGlvbi4NCisqDQorKi8NCit2b2lkIFNFR0dFUl9SVFRfSW5pdCh2b2lkKQ0KK3sNCisgICAgSU5JVCgpOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9TZXRUZXJtaW5hbA0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgU2V0cyB0aGUgdGVybWluYWwgdG8gYmUgdXNlZCBmb3Igb3V0cHV0IG9uIGNoYW5uZWwgMC4NCisqDQorKiAgUGFyYW1ldGVycw0KKyogICAgVGVybWluYWxJZCAgSW5kZXggb2YgdGhlIHRlcm1pbmFsLg0KKyoNCisqICBSZXR1cm4gdmFsdWUNCisqICAgID49IDAgIE8uSy4NCisqICAgICA8IDAgIEVycm9yIChlLmcuIGlmIFJUVCBpcyBjb25maWd1cmVkIGZvciBub24tYmxvY2tpbmcgbW9kZSBhbmQgdGhlcmUgd2FzIG5vIHNwYWNlIGluIHRoZSBidWZmZXIgdG8gc2V0IHRoZSBuZXcgdGVybWluYWwgSWQpDQorKi8NCitpbnQgU0VHR0VSX1JUVF9TZXRUZXJtaW5hbChjaGFyIFRlcm1pbmFsSWQpDQorew0KKyAgICBjaGFyIGFjWzJdOw0KKyAgICBTRUdHRVJfUlRUX1JJTkdfQlVGRkVSICpwUmluZzsNCisgICAgdm9sYXRpbGUgdW5zaWduZWQgU2F2ZWRTdGF0ZTsNCisgICAgdW5zaWduZWQgQXZhaWw7DQorICAgIGludCByOw0KKyAgICAvLw0KKyAgICBJTklUKCk7DQorICAgIC8vDQorICAgIHIgPSAwOw0KKyAgICBhY1swXSA9IDB4RkZVOw0KKw0KKyAgICBpZiAoVGVybWluYWxJZCA8IChjaGFyKXNpemVvZihfYVRlcm1pbmFsSWQpKSAgIC8vIFdlIG9ubHkgc3VwcG9ydCBhIGNlcnRhaW4gbnVtYmVyIG9mIGNoYW5uZWxzDQorICAgIHsNCisgICAgICAgIGFjWzFdID0gX2FUZXJtaW5hbElkWyh1bnNpZ25lZCBjaGFyKVRlcm1pbmFsSWRdOw0KKyAgICAgICAgcFJpbmcgPSAmX1NFR0dFUl9SVFQuYVVwWzBdOyAgICAvLyBCdWZmZXIgMCBpcyBhbHdheXMgcmVzZXJ2ZWQgZm9yIHRlcm1pbmFsIEkvTywgc28gd2UgY2FuIHVzZSBpbmRleCAwIGhlcmUsIGZpeGVkDQorICAgICAgICBTRUdHRVJfUlRUX0xPQ0soDQorICAgICAgICAgICAgU2F2ZWRTdGF0ZSk7ICAgIC8vIExvY2sgdG8gbWFrZSBzdXJlIHRoYXQgbm8gb3RoZXIgdGFzayBpcyB3cml0aW5nIGludG8gYnVmZmVyLCB3aGlsZSB3ZSBhcmUgYW5kIG51bWJlciBvZiBmcmVlIGJ5dGVzIGluIGJ1ZmZlciBkb2VzIG5vdCBjaGFuZ2UgZG93bndhcmRzIGFmdGVyIGNoZWNraW5nIGFuZCBiZWZvcmUgd3JpdGluZw0KKw0KKyAgICAgICAgaWYgKChwUmluZy0+RmxhZ3MgJiBTRUdHRVJfUlRUX01PREVfTUFTSykgPT0gU0VHR0VSX1JUVF9NT0RFX0JMT0NLX0lGX0ZJRk9fRlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBfQWN0aXZlVGVybWluYWwgPSBUZXJtaW5hbElkOw0KKyAgICAgICAgICAgIF9Xcml0ZUJsb2NraW5nKHBSaW5nLCBhYywgMnUpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2tpcHBpbmcgbW9kZSBvciB0cmltIG1vZGU/ID0+IFdlIGNhbm5vdCB0cmltIHRoaXMgY29tbWFuZCBzbyBoYW5kbGluZyBpcyB0aGUgc2FtZSBmb3IgYm90aCBtb2Rlcw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEF2YWlsID0gX0dldEF2YWlsV3JpdGVTcGFjZShwUmluZyk7DQorDQorICAgICAgICAgICAgaWYgKEF2YWlsID49IDIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBfQWN0aXZlVGVybWluYWwgPSBUZXJtaW5hbElkOyAgICAvLyBPbmx5IGNoYW5nZSBhY3RpdmUgdGVybWluYWwgaW4gY2FzZSBvZiBzdWNjZXNzDQorICAgICAgICAgICAgICAgIF9Xcml0ZU5vQ2hlY2socFJpbmcsIGFjLCAydSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHIgPSAtMTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHIgPSAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcjsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfVGVybWluYWxPdXQNCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIFdyaXRlcyBhIHN0cmluZyB0byB0aGUgZ2l2ZW4gdGVybWluYWwNCisqICAgICB3aXRob3V0IGNoYW5naW5nIHRoZSB0ZXJtaW5hbCBmb3IgY2hhbm5lbCAwLg0KKyoNCisqICBQYXJhbWV0ZXJzDQorKiAgICBUZXJtaW5hbElkICAgSW5kZXggb2YgdGhlIHRlcm1pbmFsLg0KKyogICAgcyAgICAgICAgICAgIFN0cmluZyB0byBiZSBwcmludGVkIG9uIHRoZSB0ZXJtaW5hbC4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICA+PSAwIC0gTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uDQorKiAgICAgPCAwIC0gRXJyb3IuDQorKg0KKyovDQoraW50IFNFR0dFUl9SVFRfVGVybWluYWxPdXQoY2hhciBUZXJtaW5hbElkLCBjb25zdCBjaGFyICpzKQ0KK3sNCisgICAgaW50ICBTdGF0dXM7DQorICAgIHVuc2lnbmVkICBGcmFnTGVuOw0KKyAgICB1bnNpZ25lZCAgQXZhaWw7DQorICAgIFNFR0dFUl9SVFRfUklOR19CVUZGRVIgKnBSaW5nOw0KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBTYXZlZFN0YXRlOw0KKyAgICAvLw0KKyAgICBJTklUKCk7DQorDQorICAgIC8vDQorICAgIC8vIFZhbGlkYXRlIHRlcm1pbmFsIElELg0KKyAgICAvLw0KKyAgICBpZiAoVGVybWluYWxJZCA8IChjaGFyKXNpemVvZihfYVRlcm1pbmFsSWQpKSAgIC8vIFdlIG9ubHkgc3VwcG9ydCBhIGNlcnRhaW4gbnVtYmVyIG9mIGNoYW5uZWxzDQorICAgIHsNCisgICAgICAgIC8vDQorICAgICAgICAvLyBHZXQgInRvLWhvc3QiIHJpbmcgYnVmZmVyLg0KKyAgICAgICAgLy8NCisgICAgICAgIHBSaW5nID0gJl9TRUdHRVJfUlRULmFVcFswXTsNCisgICAgICAgIC8vDQorICAgICAgICAvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2hhbmdlIHRlcm1pbmFsLCB3cml0ZSBkYXRhLCBjaGFuZ2UgYmFjay4NCisgICAgICAgIC8vIENvbXB1dGUgdGhlIGZpeGVkIGFuZCB2YXJpYWJsZSBzaXplcy4NCisgICAgICAgIC8vDQorICAgICAgICBGcmFnTGVuID0gc3RybGVuKHMpOw0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIEhvdyB3ZSBvdXRwdXQgZGVwZW5kcyB1cG9uIHRoZSBtb2RlLi4uDQorICAgICAgICAvLw0KKyAgICAgICAgU0VHR0VSX1JUVF9MT0NLKFNhdmVkU3RhdGUpOw0KKyAgICAgICAgQXZhaWwgPSBfR2V0QXZhaWxXcml0ZVNwYWNlKHBSaW5nKTsNCisNCisgICAgICAgIHN3aXRjaCAocFJpbmctPkZsYWdzICYgU0VHR0VSX1JUVF9NT0RFX01BU0spDQorICAgICAgICB7DQorICAgICAgICBjYXNlIFNFR0dFUl9SVFRfTU9ERV9OT19CTE9DS19TS0lQOg0KKw0KKyAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHNraXAgbW9kZSBhbmQgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSB3aG9sZQ0KKyAgICAgICAgICAgIC8vIG9mIHRoaXMgb3V0cHV0LCBkb24ndCBib3RoZXIgc3dpdGNoaW5nIHRlcm1pbmFscyBhdCBhbGwuDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICBpZiAoQXZhaWwgPCAoRnJhZ0xlbiArIDR1KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIFN0YXR1cyA9IDA7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIF9Qb3N0VGVybWluYWxTd2l0Y2gocFJpbmcsIFRlcm1pbmFsSWQpOw0KKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAoaW50KV9Xcml0ZUJsb2NraW5nKHBSaW5nLCBzLCBGcmFnTGVuKTsNCisgICAgICAgICAgICAgICAgX1Bvc3RUZXJtaW5hbFN3aXRjaChwUmluZywgX0FjdGl2ZVRlcm1pbmFsKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIFNFR0dFUl9SVFRfTU9ERV9OT19CTE9DS19UUklNOg0KKw0KKyAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHRyaW0gbW9kZSBhbmQgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBmb3IgZXZlcnl0aGluZywNCisgICAgICAgICAgICAvLyB0cmltIHRoZSBvdXRwdXQgYnV0IGFsd2F5cyBpbmNsdWRlIHRoZSB0ZXJtaW5hbCBzd2l0Y2guICBJZiBubyByb29tDQorICAgICAgICAgICAgLy8gZm9yIHRlcm1pbmFsIHN3aXRjaCwgc2tpcCB0aGF0IHRvdGFsbHkuDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICBpZiAoQXZhaWwgPCA0dSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIFN0YXR1cyA9IC0xOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBfUG9zdFRlcm1pbmFsU3dpdGNoKHBSaW5nLCBUZXJtaW5hbElkKTsNCisgICAgICAgICAgICAgICAgU3RhdHVzID0gKGludClfV3JpdGVCbG9ja2luZyhwUmluZywgcywgKEZyYWdMZW4gPCAoQXZhaWwgLSA0dSkpID8gRnJhZ0xlbiA6IChBdmFpbCAtIDR1KSk7DQorICAgICAgICAgICAgICAgIF9Qb3N0VGVybWluYWxTd2l0Y2gocFJpbmcsIF9BY3RpdmVUZXJtaW5hbCk7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBTRUdHRVJfUlRUX01PREVfQkxPQ0tfSUZfRklGT19GVUxMOg0KKyAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIGJsb2NraW5nIG1vZGUsIG91dHB1dCBldmVyeXRoaW5nLg0KKyAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgX1Bvc3RUZXJtaW5hbFN3aXRjaChwUmluZywgVGVybWluYWxJZCk7DQorICAgICAgICAgICAgU3RhdHVzID0gKGludClfV3JpdGVCbG9ja2luZyhwUmluZywgcywgRnJhZ0xlbik7DQorICAgICAgICAgICAgX1Bvc3RUZXJtaW5hbFN3aXRjaChwUmluZywgX0FjdGl2ZVRlcm1pbmFsKTsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgU3RhdHVzID0gLTE7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorDQorICAgICAgICAvLw0KKyAgICAgICAgLy8gRmluaXNoIHVwLg0KKyAgICAgICAgLy8NCisgICAgICAgIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgU3RhdHVzID0gLTE7DQorICAgIH0NCisNCisgICAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBFbmQgb2YgZmlsZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc2VnZ2VyX3J0dC9TRUdHRVJfUlRULmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMmRlMDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVC5oCkBAIC0wLDAgKzEsMjE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgIFNFR0dFUiBNSUNST0NPTlRST0xMRVIgR21iSCAmIENvLiBLRyAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgU29sdXRpb25zIGZvciByZWFsIHRpbWUgbWljcm9jb250cm9sbGVyIGFwcGxpY2F0aW9ucyAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgKGMpIDIwMTQgLSAyMDE1ICBTRUdHRVIgTWljcm9jb250cm9sbGVyIEdtYkggJiBDby4gS0cgICAgICAgICoNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAgICAgICB3d3cuc2VnZ2VyLmNvbSAgICAgU3VwcG9ydDogc3VwcG9ydEBzZWdnZXIuY29tICAgICAgICAgICAgICAgKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAqIFRoaXMgc29mdHdhcmUgbWF5IGluIGl0cyB1bm1vZGlmaWVkIGZvcm0gYmUgZnJlZWx5IHJlZGlzdHJpYnV0ZWQgKg0KKyogICBpbiBzb3VyY2UgZm9ybS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICogVGhlIHNvdXJjZSBjb2RlIG1heSBiZSBtb2RpZmllZCwgcHJvdmlkZWQgdGhlIHNvdXJjZSBjb2RlICAgICAgICAqDQorKiAgIHJldGFpbnMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCAgKg0KKyogICB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICogTW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb2Z0d2FyZSBpbiBzb3VyY2Ugb3IgbGlua2FibGUgZm9ybSAgICAqDQorKiAgIG1heSBub3QgYmUgZGlzdHJpYnV0ZWQgd2l0aG91dCBwcmlvciBjb25zZW50IG9mIFNFR0dFUi4gICAgICAgICAgKg0KKyogKiBUaGlzIHNvZnR3YXJlIG1heSBvbmx5IGJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBTRUdHRVIgICAgICoNCisqICAgSi1MaW5rIGRlYnVnIHByb2Jlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EICAgICAgICAgICAgICoNCisqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsICAgICAgICAqDQorKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiAgICAgICAgICAgKg0KKyogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgICAgICAgICAgICoNCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFNFR0dFUiBNaWNyb2NvbnRyb2xsZXIgQkUgTElBQkxFIEZPUiAqDQorKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiAgICAgICAgICAgKg0KKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgICoNCisqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyAgICAqDQorKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAgICAgKg0KKyogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAgICAgICAgICoNCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFICAqDQorKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIICAgKg0KKyogREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUVORC1PRi1IRUFERVItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitGaWxlICAgIDogU0VHR0VSX1JUVC5oDQorUHVycG9zZSA6IEltcGxlbWVudGF0aW9uIG9mIFNFR0dFUiByZWFsLXRpbWUgdHJhbnNmZXIgd2hpY2ggYWxsb3dzDQorICAgICAgICAgIHJlYWwtdGltZSBjb21tdW5pY2F0aW9uIG9uIHRhcmdldHMgd2hpY2ggc3VwcG9ydCBkZWJ1Z2dlcg0KKyAgICAgICAgICBtZW1vcnkgYWNjZXNzZXMgd2hpbGUgdGhlIENQVSBpcyBydW5uaW5nLg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisqLw0KKw0KKyNpZm5kZWYgU0VHR0VSX1JUVF9IDQorI2RlZmluZSBTRUdHRVJfUlRUX0gNCisNCisjaW5jbHVkZSAiU0VHR0VSX1JUVF9Db25mLmgiDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIERlZmluZXMsIGZpeGVkDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBUeXBlcw0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKi8NCisNCisvLw0KKy8vIERlc2NyaXB0aW9uIGZvciBhIGNpcmN1bGFyIGJ1ZmZlciAoYWxzbyBjYWxsZWQgInJpbmcgYnVmZmVyIikNCisvLyB3aGljaCBpcyB1c2VkIGFzIHVwLSAoVC0+SCkgb3IgZG93bi1idWZmZXIgKEgtPlQpDQorLy8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgY29uc3QgICAgIGNoYXIgICAgKnNOYW1lOyAgICAgICAgIC8vIE9wdGlvbmFsIG5hbWUuIFN0YW5kYXJkIG5hbWVzIHNvIGZhciBhcmU6ICJUZXJtaW5hbCIsICJTeXNWaWV3IiwgIkotU2NvcGVfdDRpNCINCisgICAgY2hhciAgICAqcEJ1ZmZlcjsgICAgICAgLy8gUG9pbnRlciB0byBzdGFydCBvZiBidWZmZXINCisgICAgdW5zaWduZWQgU2l6ZU9mQnVmZmVyOyAgLy8gQnVmZmVyIHNpemUgaW4gYnl0ZXMuIE5vdGUgdGhhdCBvbmUgYnl0ZSBpcyBsb3N0LCBhcyB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGZpbGwgdXAgdGhlIGJ1ZmZlciBpbiBvcmRlciB0byBhdm9pZCB0aGUgcHJvYmxlbSBvZiBiZWluZyB1bmFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBmdWxsIGFuZCBlbXB0eS4NCisgICAgdm9sYXRpbGUgIHVuc2lnbmVkDQorICAgIFdyT2ZmOyAgICAgICAgIC8vIFBvc2l0aW9uIG9mIG5leHQgaXRlbSB0byBiZSB3cml0dGVuIGJ5IGVpdGhlciBob3N0IChkb3duLWJ1ZmZlcikgb3IgdGFyZ2V0ICh1cC1idWZmZXIpLiBNdXN0IGJlIHZvbGF0aWxlIHNpbmNlIGl0IG1heSBiZSBtb2RpZmllZCBieSBob3N0IChkb3duLWJ1ZmZlcikNCisgICAgdm9sYXRpbGUgIHVuc2lnbmVkDQorICAgIFJkT2ZmOyAgICAgICAgIC8vIFBvc2l0aW9uIG9mIG5leHQgaXRlbSB0byBiZSByZWFkIGJ5IHRhcmdldCAoZG93bi1idWZmZXIpIG9yIGhvc3QgKHVwLWJ1ZmZlcikuIE11c3QgYmUgdm9sYXRpbGUgc2luY2UgaXQgbWF5IGJlIG1vZGlmaWVkIGJ5IGhvc3QgKHVwLWJ1ZmZlcikNCisgICAgdW5zaWduZWQgRmxhZ3M7ICAgICAgICAgLy8gQ29udGFpbnMgY29uZmlndXJhdGlvbiBmbGFncw0KK30gU0VHR0VSX1JUVF9SSU5HX0JVRkZFUjsNCisNCisvLw0KKy8vIFJUVCBjb250cm9sIGJsb2NrIHdoaWNoIGRlc2NyaWJlcyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYXZhaWxhYmxlDQorLy8gYXMgd2VsbCBhcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgZWFjaCBidWZmZXINCisvLw0KKy8vDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIGFjSURbMTZdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemVkIHRvICJTRUdHRVIgUlRUIg0KKyAgICBpbnQNCisgICAgTWF4TnVtVXBCdWZmZXJzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZWQgdG8gU0VHR0VSX1JUVF9NQVhfTlVNX1VQX0JVRkZFUlMgKHR5cGUuIDIpDQorICAgIGludA0KKyAgICBNYXhOdW1Eb3duQnVmZmVyczsgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplZCB0byBTRUdHRVJfUlRUX01BWF9OVU1fRE9XTl9CVUZGRVJTICh0eXBlLiAyKQ0KKyAgICBTRUdHRVJfUlRUX1JJTkdfQlVGRkVSDQorICAgIGFVcFtTRUdHRVJfUlRUX01BWF9OVU1fVVBfQlVGRkVSU107ICAgICAgIC8vIFVwIGJ1ZmZlcnMsIHRyYW5zZmVycmluZyBpbmZvcm1hdGlvbiB1cCBmcm9tIHRhcmdldCB2aWEgZGVidWcgcHJvYmUgdG8gaG9zdA0KKyAgICBTRUdHRVJfUlRUX1JJTkdfQlVGRkVSDQorICAgIGFEb3duW1NFR0dFUl9SVFRfTUFYX05VTV9ET1dOX0JVRkZFUlNdOyAgIC8vIERvd24gYnVmZmVycywgdHJhbnNmZXJyaW5nIGluZm9ybWF0aW9uIGRvd24gZnJvbSBob3N0IHZpYSBkZWJ1ZyBwcm9iZSB0byB0YXJnZXQNCit9IFNFR0dFUl9SVFRfQ0I7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIEdsb2JhbCBkYXRhDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqLw0KK2V4dGVybiBTRUdHRVJfUlRUX0NCIF9TRUdHRVJfUlRUOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBSVFQgQVBJIGZ1bmN0aW9ucw0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKi8NCitpbnQgICAgICAgICAgU0VHR0VSX1JUVF9Db25maWdVcEJ1ZmZlcih1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3QgY2hhciAqc05hbWUsIHZvaWQgKnBCdWZmZXIsIHVuc2lnbmVkIEJ1ZmZlclNpemUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgRmxhZ3MpOw0KK2ludCAgICAgICAgICBTRUdHRVJfUlRUX0NvbmZpZ0Rvd25CdWZmZXIodW5zaWduZWQgQnVmZmVySW5kZXgsIGNvbnN0IGNoYXIgKnNOYW1lLCB2b2lkICpwQnVmZmVyLCB1bnNpZ25lZCBCdWZmZXJTaXplLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgRmxhZ3MpOw0KK2ludCAgICAgICAgICBTRUdHRVJfUlRUX0dldEtleSh2b2lkKTsNCit1bnNpZ25lZCAgICAgU0VHR0VSX1JUVF9IYXNEYXRhKHVuc2lnbmVkIEJ1ZmZlckluZGV4KTsNCitpbnQgICAgICAgICAgU0VHR0VSX1JUVF9IYXNLZXkodm9pZCk7DQordm9pZCAgICAgICAgIFNFR0dFUl9SVFRfSW5pdCh2b2lkKTsNCit1bnNpZ25lZCAgICAgU0VHR0VSX1JUVF9SZWFkKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCAgICAgICB2b2lkICpwQnVmZmVyLCB1bnNpZ25lZCBCdWZmZXJTaXplKTsNCit1bnNpZ25lZCAgICAgU0VHR0VSX1JUVF9SZWFkTm9Mb2NrKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCAgICAgICB2b2lkICpwRGF0YSwgICB1bnNpZ25lZCBCdWZmZXJTaXplKTsNCitpbnQgICAgICAgICAgU0VHR0VSX1JUVF9TZXROYW1lRG93bkJ1ZmZlcih1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3QgY2hhciAqc05hbWUpOw0KK2ludCAgICAgICAgICBTRUdHRVJfUlRUX1NldE5hbWVVcEJ1ZmZlcih1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3QgY2hhciAqc05hbWUpOw0KK2ludCAgICAgICAgICBTRUdHRVJfUlRUX1dhaXRLZXkodm9pZCk7DQordW5zaWduZWQgICAgIFNFR0dFUl9SVFRfV3JpdGUodW5zaWduZWQgQnVmZmVySW5kZXgsIGNvbnN0IHZvaWQgKnBCdWZmZXIsIHVuc2lnbmVkIE51bUJ5dGVzKTsNCit1bnNpZ25lZCAgICAgU0VHR0VSX1JUVF9Xcml0ZU5vTG9jayh1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3Qgdm9pZCAqcEJ1ZmZlciwgdW5zaWduZWQgTnVtQnl0ZXMpOw0KK3Vuc2lnbmVkICAgICBTRUdHRVJfUlRUX1dyaXRlU2tpcE5vTG9jayh1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3Qgdm9pZCAqcEJ1ZmZlciwgdW5zaWduZWQgTnVtQnl0ZXMpOw0KK3Vuc2lnbmVkICAgICBTRUdHRVJfUlRUX1dyaXRlU3RyaW5nKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCBjb25zdCBjaGFyICpzKTsNCisvLw0KKy8vIEZ1bmN0aW9uIG1hY3JvIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24NCisvLw0KKyNkZWZpbmUgICAgICBTRUdHRVJfUlRUX0hBU0RBVEEobikgICAgICAgKF9TRUdHRVJfUlRULmFEb3duW25dLldyT2ZmIC0gX1NFR0dFUl9SVFQuYURvd25bbl0uUmRPZmYpDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFJUVCAiVGVybWluYWwiIEFQSSBmdW5jdGlvbnMNCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyovDQoraW50ICAgICBTRUdHRVJfUlRUX1NldFRlcm1pbmFsKGNoYXIgVGVybWluYWxJZCk7DQoraW50ICAgICBTRUdHRVJfUlRUX1Rlcm1pbmFsT3V0KGNoYXIgVGVybWluYWxJZCwgY29uc3QgY2hhciAqcyk7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFJUVCBwcmludGYgZnVuY3Rpb25zIChyZXF1aXJlIFNFR0dFUl9SVFRfcHJpbnRmLmMpDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqLw0KK2ludCBTRUdHRVJfUlRUX3ByaW50Zih1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3QgY2hhciAqc0Zvcm1hdCwgLi4uKTsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgRGVmaW5lcw0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKi8NCisNCisvLw0KKy8vIE9wZXJhdGluZyBtb2Rlcy4gRGVmaW5lIGJlaGF2aW9yIGlmIGJ1ZmZlciBpcyBmdWxsIChub3QgZW5vdWdoIHNwYWNlIGZvciBlbnRpcmUgbWVzc2FnZSkNCisvLw0KKyNkZWZpbmUgU0VHR0VSX1JUVF9NT0RFX05PX0JMT0NLX1NLSVAgICAgICAgICAoMFUpICAgICAvLyBTa2lwLiBEbyBub3QgYmxvY2ssIG91dHB1dCBub3RoaW5nLiAoRGVmYXVsdCkNCisjZGVmaW5lIFNFR0dFUl9SVFRfTU9ERV9OT19CTE9DS19UUklNICAgICAgICAgKDFVKSAgICAgLy8gVHJpbTogRG8gbm90IGJsb2NrLCBvdXRwdXQgYXMgbXVjaCBhcyBmaXRzLg0KKyNkZWZpbmUgU0VHR0VSX1JUVF9NT0RFX0JMT0NLX0lGX0ZJRk9fRlVMTCAgICAoMlUpICAgICAvLyBCbG9jazogV2FpdCB1bnRpbCB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgYnVmZmVyLg0KKyNkZWZpbmUgU0VHR0VSX1JUVF9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAoM1UpDQorDQorLy8NCisvLyBDb250cm9sIHNlcXVlbmNlcywgYmFzZWQgb24gQU5TSS4NCisvLyBDYW4gYmUgdXNlZCB0byBjb250cm9sIGNvbG9yLCBhbmQgY2xlYXIgdGhlIHNjcmVlbg0KKy8vDQorI2RlZmluZSBSVFRfQ1RSTF9SRVNFVCAgICAgICAgICAgICAgICAiXGVbMG0iICAgICAgICAgLy8gUmVzZXQgdG8gZGVmYXVsdCBjb2xvcnMNCisjZGVmaW5lIFJUVF9DVFJMX0NMRUFSICAgICAgICAgICAgICAgICJcZVsySiIgICAgICAgICAvLyBDbGVhciBzY3JlZW4sIHJlcG9zaXRpb24gY3Vyc29yIHRvIHRvcCBsZWZ0DQorDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0JMQUNLICAgICAgICAgICAiXGVbMjszMG0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX1JFRCAgICAgICAgICAgICAiXGVbMjszMW0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0dSRUVOICAgICAgICAgICAiXGVbMjszMm0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX1lFTExPVyAgICAgICAgICAiXGVbMjszM20iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0JMVUUgICAgICAgICAgICAiXGVbMjszNG0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX01BR0VOVEEgICAgICAgICAiXGVbMjszNW0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0NZQU4gICAgICAgICAgICAiXGVbMjszNm0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX1dISVRFICAgICAgICAgICAiXGVbMjszN20iDQorDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0JSSUdIVF9CTEFDSyAgICAiXGVbMTszMG0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0JSSUdIVF9SRUQgICAgICAiXGVbMTszMW0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0JSSUdIVF9HUkVFTiAgICAiXGVbMTszMm0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0JSSUdIVF9ZRUxMT1cgICAiXGVbMTszM20iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0JSSUdIVF9CTFVFICAgICAiXGVbMTszNG0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0JSSUdIVF9NQUdFTlRBICAiXGVbMTszNW0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0JSSUdIVF9DWUFOICAgICAiXGVbMTszNm0iDQorI2RlZmluZSBSVFRfQ1RSTF9URVhUX0JSSUdIVF9XSElURSAgICAiXGVbMTszN20iDQorDQorI2RlZmluZSBSVFRfQ1RSTF9CR19CTEFDSyAgICAgICAgICAgICAiXGVbMjQ7NDBtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfUkVEICAgICAgICAgICAgICAgIlxlWzI0OzQxbSINCisjZGVmaW5lIFJUVF9DVFJMX0JHX0dSRUVOICAgICAgICAgICAgICJcZVsyNDs0Mm0iDQorI2RlZmluZSBSVFRfQ1RSTF9CR19ZRUxMT1cgICAgICAgICAgICAiXGVbMjQ7NDNtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfQkxVRSAgICAgICAgICAgICAgIlxlWzI0OzQ0bSINCisjZGVmaW5lIFJUVF9DVFJMX0JHX01BR0VOVEEgICAgICAgICAgICJcZVsyNDs0NW0iDQorI2RlZmluZSBSVFRfQ1RSTF9CR19DWUFOICAgICAgICAgICAgICAiXGVbMjQ7NDZtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfV0hJVEUgICAgICAgICAgICAgIlxlWzI0OzQ3bSINCisNCisjZGVmaW5lIFJUVF9DVFJMX0JHX0JSSUdIVF9CTEFDSyAgICAgICJcZVs0OzQwbSINCisjZGVmaW5lIFJUVF9DVFJMX0JHX0JSSUdIVF9SRUQgICAgICAgICJcZVs0OzQxbSINCisjZGVmaW5lIFJUVF9DVFJMX0JHX0JSSUdIVF9HUkVFTiAgICAgICJcZVs0OzQybSINCisjZGVmaW5lIFJUVF9DVFJMX0JHX0JSSUdIVF9ZRUxMT1cgICAgICJcZVs0OzQzbSINCisjZGVmaW5lIFJUVF9DVFJMX0JHX0JSSUdIVF9CTFVFICAgICAgICJcZVs0OzQ0bSINCisjZGVmaW5lIFJUVF9DVFJMX0JHX0JSSUdIVF9NQUdFTlRBICAgICJcZVs0OzQ1bSINCisjZGVmaW5lIFJUVF9DVFJMX0JHX0JSSUdIVF9DWUFOICAgICAgICJcZVs0OzQ2bSINCisjZGVmaW5lIFJUVF9DVFJMX0JHX0JSSUdIVF9XSElURSAgICAgICJcZVs0OzQ3bSINCisNCisNCisjZW5kaWYNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqIEVuZCBvZiBmaWxlICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zZWdnZXJfcnR0L1NFR0dFUl9SVFRfQ29uZi5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zZWdnZXJfcnR0L1NFR0dFUl9SVFRfQ29uZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNWU2OTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVF9Db25mLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgU0VHR0VSIE1JQ1JPQ09OVFJPTExFUiBHbWJIICYgQ28uIEtHICAgICAgICAgICAgICAgICAqDQorKiAgICAgICBTb2x1dGlvbnMgZm9yIHJlYWwgdGltZSBtaWNyb2NvbnRyb2xsZXIgYXBwbGljYXRpb25zICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAgICAgICAoYykgMjAxNCAtIDIwMTUgIFNFR0dFUiBNaWNyb2NvbnRyb2xsZXIgR21iSCAmIENvLiBLRyAgICAgICAgKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgIHd3dy5zZWdnZXIuY29tICAgICBTdXBwb3J0OiBzdXBwb3J0QHNlZ2dlci5jb20gICAgICAgICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorRmlsZSAgICA6IFNFR0dFUl9SVFRfQ29uZi5oDQorUHVycG9zZSA6IEltcGxlbWVudGF0aW9uIG9mIFNFR0dFUiByZWFsLXRpbWUgdHJhbnNmZXIgKFJUVCkgd2hpY2gNCisgICAgICAgICAgYWxsb3dzIHJlYWwtdGltZSBjb21tdW5pY2F0aW9uIG9uIHRhcmdldHMgd2hpY2ggc3VwcG9ydA0KKyAgICAgICAgICBkZWJ1Z2dlciBtZW1vcnkgYWNjZXNzZXMgd2hpbGUgdGhlIENQVSBpcyBydW5uaW5nLg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUVORC1PRi1IRUFERVItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisqLw0KKw0KKyNpZm5kZWYgU0VHR0VSX1JUVF9DT05GX0gNCisjZGVmaW5lIFNFR0dFUl9SVFRfQ09ORl9IDQorDQorI2luY2x1ZGUgImNvbXBpbGVyX2Fic3RyYWN0aW9uLmgiDQorDQorI2lmZGVmIF9fSUNDQVJNX18NCisjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBEZWZpbmVzLCBjb25maWd1cmFibGUNCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyovDQorDQorI2RlZmluZSBTRUdHRVJfUlRUX01BWF9OVU1fVVBfQlVGRkVSUyAgICAgICAgICAgICAoMikgICAgIC8vIE1heC4gbnVtYmVyIG9mIHVwLWJ1ZmZlcnMgKFQtPkgpIGF2YWlsYWJsZSBvbiB0aGlzIHRhcmdldCAgICAoRGVmYXVsdDogMikNCisjZGVmaW5lIFNFR0dFUl9SVFRfTUFYX05VTV9ET1dOX0JVRkZFUlMgICAgICAgICAgICgyKSAgICAgLy8gTWF4LiBudW1iZXIgb2YgZG93bi1idWZmZXJzIChILT5UKSBhdmFpbGFibGUgb24gdGhpcyB0YXJnZXQgIChEZWZhdWx0OiAyKQ0KKw0KKyNkZWZpbmUgQlVGRkVSX1NJWkVfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEwMjQpICAvLyBTaXplIG9mIHRoZSBidWZmZXIgZm9yIHRlcm1pbmFsIG91dHB1dCBvZiB0YXJnZXQsIHVwIHRvIGhvc3QgKERlZmF1bHQ6IDFrKQ0KKyNkZWZpbmUgQlVGRkVSX1NJWkVfRE9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDE2KSAgICAvLyBTaXplIG9mIHRoZSBidWZmZXIgZm9yIHRlcm1pbmFsIGlucHV0IHRvIHRhcmdldCBmcm9tIGhvc3QgKFVzdWFsbHkga2V5Ym9hcmQgaW5wdXQpIChEZWZhdWx0OiAxNikNCisNCisjZGVmaW5lIFNFR0dFUl9SVFRfUFJJTlRGX0JVRkZFUl9TSVpFICAgICAgICAgICAgICg2NHUpICAgIC8vIFNpemUgb2YgYnVmZmVyIGZvciBSVFQgcHJpbnRmIHRvIGJ1bGstc2VuZCBjaGFycyB2aWEgUlRUICAgICAoRGVmYXVsdDogNjQpDQorDQorI2RlZmluZSBTRUdHRVJfUlRUX01PREVfREVGQVVMVCAgICAgICAgICAgICAgICAgICBTRUdHRVJfUlRUX01PREVfTk9fQkxPQ0tfU0tJUCAvLyBNb2RlIGZvciBwcmUtaW5pdGlhbGl6ZWQgdGVybWluYWwgY2hhbm5lbCAoYnVmZmVyIDApDQorDQorLy8NCisvLyBUYXJnZXQgaXMgbm90IGFsbG93ZWQgdG8gcGVyZm9ybSBvdGhlciBSVFQgb3BlcmF0aW9ucyB3aGlsZSBzdHJpbmcgc3RpbGwgaGFzIG5vdCBiZWVuIHN0b3JlZCBjb21wbGV0ZWx5Lg0KKy8vIE90aGVyd2lzZSB3ZSB3b3VsZCBwcm9iYWJseSBlbmQgdXAgd2l0aCBhIG1peGVkIHN0cmluZyBpbiB0aGUgYnVmZmVyLg0KKy8vIElmIHVzaW5nICBSVFQgZnJvbSB3aXRoaW4gaW50ZXJydXB0cywgbXVsdGlwbGUgdGFza3Mgb3IgbXVsdGkgcHJvY2Vzc29ycywgZGVmaW5lIHRoZSBTRUdHRVJfUlRUX0xPQ0soKSBhbmQgU0VHR0VSX1JUVF9VTkxPQ0soKSBmdW5jdGlvbiBoZXJlLg0KKy8vDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFJUVCBsb2NrIGNvbmZpZ3VyYXRpb24gZm9yIFNFR0dFUiBFbWJlZGRlZCBTdHVkaW8sDQorKiAgICAgICBSb3dsZXkgQ3Jvc3NTdHVkaW8gYW5kIEdDQw0KKyovDQorI2lmIChkZWZpbmVkIF9fU0VTX0FSTSkgfHwgKGRlZmluZWQgX19DUk9TU1dPUktTX0FSTSkgfHwgKGRlZmluZWQgX19HTlVDX18pDQorI2lmZGVmIF9fQVJNX0FSQ0hfNk1fXw0KKyNkZWZpbmUgU0VHR0VSX1JUVF9MT0NLKFNhdmVkU3RhdGUpICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQVNNIHZvbGF0aWxlICgibXJzICAgJTAsIHByaW1hc2sgIFxuXHQiICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3YgICByMSwgJDEgICAgIFxuXHQiICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXNyICAgcHJpbWFzaywgcjEgIFxuXHQiICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChTYXZlZFN0YXRlKSAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorI2RlZmluZSBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BU00gdm9sYXRpbGUgKCJtc3IgICBwcmltYXNrLCAlMCAgXG5cdCIgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInIiIChTYXZlZFN0YXRlKSAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorI2VsaWYgKGRlZmluZWQoX19BUk1fQVJDSF83TV9fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN0VNX18pKQ0KKyNkZWZpbmUgU0VHR0VSX1JUVF9MT0NLKFNhdmVkU3RhdGUpICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQVNNIHZvbGF0aWxlICgibXJzICAgJTAsIGJhc2VwcmkgIFxuXHQiICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ICAgcjEsICQxMjggICAgIFxuXHQiICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1zciAgIGJhc2VwcmksIHIxICBcblx0IiAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoU2F2ZWRTdGF0ZSkgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicjEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorI2RlZmluZSBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BU00gdm9sYXRpbGUgKCJtc3IgICBiYXNlcHJpLCAlMCAgXG5cdCIgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInIiIChTYXZlZFN0YXRlKSAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorI2Vsc2UNCisjZGVmaW5lIFNFR0dFUl9SVFRfTE9DSyhTYXZlZFN0YXRlKSAgICh2b2lkKShTYXZlZFN0YXRlKQ0KKyNkZWZpbmUgU0VHR0VSX1JUVF9VTkxPQ0soU2F2ZWRTdGF0ZSkgKHZvaWQpKFNhdmVkU3RhdGUpDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFJUVCBsb2NrIGNvbmZpZ3VyYXRpb24gZm9yIElBUiBFV0FSTQ0KKyovDQorI2lmZGVmIF9fSUNDQVJNX18NCisjaWYgKGRlZmluZWQgKF9fQVJNN01fXykgJiYgKF9fQ09SRV9fID09IF9fQVJNN01fXykpDQorI2RlZmluZSBTRUdHRVJfUlRUX0xPQ0soU2F2ZWRTdGF0ZSkgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlZFN0YXRlID0gX19nZXRfUFJJTUFTSygpOyAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NldF9QUklNQVNLKDEpOyAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorI2RlZmluZSBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NldF9QUklNQVNLKFNhdmVkU3RhdGUpOyAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorI2VsaWYgKGRlZmluZWQgKF9fQVJNN0VNX18pICYmIChfX0NPUkVfXyA9PSBfX0FSTTdFTV9fKSkNCisjZGVmaW5lIFNFR0dFUl9SVFRfTE9DSyhTYXZlZFN0YXRlKSAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmVkU3RhdGUgPSBfX2dldF9CQVNFUFJJKCk7ICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2V0X0JBU0VQUkkoMTI4KTsgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisjZGVmaW5lIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2V0X0JBU0VQUkkoU2F2ZWRTdGF0ZSk7ICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisjZW5kaWYNCisjZW5kaWYNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgUlRUIGxvY2sgY29uZmlndXJhdGlvbiBmYWxsYmFjaw0KKyovDQorI2lmbmRlZiAgIFNFR0dFUl9SVFRfTE9DSw0KKyNkZWZpbmUgU0VHR0VSX1JUVF9MT0NLKFNhdmVkU3RhdGUpICAgKHZvaWQpKFNhdmVkU3RhdGUpDQorI2VuZGlmDQorDQorI2lmbmRlZiAgIFNFR0dFUl9SVFRfVU5MT0NLDQorI2RlZmluZSBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKSAodm9pZCkoU2F2ZWRTdGF0ZSkNCisjZW5kaWYNCisNCisjZW5kaWYNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqIEVuZCBvZiBmaWxlICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zZWdnZXJfcnR0L2xpY2Vuc2UvbGljZW5zZS50eHQgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvbGljZW5zZS9saWNlbnNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2U0OTBhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zZWdnZXJfcnR0L2xpY2Vuc2UvbGljZW5zZS50eHQKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICBTRUdHRVIgTUlDUk9DT05UUk9MTEVSIEdtYkggJiBDby4gS0cgICAgICAgICAgICAgICAgICoNCisqICAgICAgIFNvbHV0aW9ucyBmb3IgcmVhbCB0aW1lIG1pY3JvY29udHJvbGxlciBhcHBsaWNhdGlvbnMgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgIChjKSAyMDE0IC0gMjAxNSAgU0VHR0VSIE1pY3JvY29udHJvbGxlciBHbWJIICYgQ28uIEtHICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgd3d3LnNlZ2dlci5jb20gICAgIFN1cHBvcnQ6IHN1cHBvcnRAc2VnZ2VyLmNvbSAgICAgICAgICAgICAgICoNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogKiBUaGlzIHNvZnR3YXJlIG1heSBpbiBpdHMgdW5tb2RpZmllZCBmb3JtIGJlIGZyZWVseSByZWRpc3RyaWJ1dGVkICoNCisqICAgaW4gc291cmNlIGZvcm0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAqIFRoZSBzb3VyY2UgY29kZSBtYXkgYmUgbW9kaWZpZWQsIHByb3ZpZGVkIHRoZSBzb3VyY2UgY29kZSAgICAgICAgKg0KKyogICByZXRhaW5zIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgICoNCisqICAgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAqIE1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIG9yIGxpbmthYmxlIGZvcm0gICAgKg0KKyogICBtYXkgbm90IGJlIGRpc3RyaWJ1dGVkIHdpdGhvdXQgcHJpb3IgY29uc2VudCBvZiBTRUdHRVIuICAgICAgICAgICoNCisqICogVGhpcyBzb2Z0d2FyZSBtYXkgb25seSBiZSB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggU0VHR0VSICAgICAqDQorKiAgIEotTGluayBkZWJ1ZyBwcm9iZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCAgICAgICAgICAgICAqDQorKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCAgICAgICAgKg0KKyogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICoNCisqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFICAgICAgICAgICAqDQorKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBTRUdHRVIgTWljcm9jb250cm9sbGVyIEJFIExJQUJMRSBGT1IgKg0KKyogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgICAgICAgICAgICoNCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UICAqDQorKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgICAgKg0KKyogT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgICAgICoNCisqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgICAgICAgICAqDQorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSAgKg0KKyogVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCAgICoNCisqIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvYmxlX2FwaS5kb3ggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvYmxlX2FwaS5kb3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1OTBhZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2RvYy9ibGVfYXBpLmRveApAQCAtMCwwICsxLDMyNzggQEAKKy8qKg0KKyAqIEBhZGR0b2dyb3VwIEJMRV9DT01NT04NCisgKiBAew0KKyAqIEBkZWZncm91cCBCTEVfQ09NTU9OX01TQyBNZXNzYWdlIFNlcXVlbmNlIENoYXJ0cw0KKyAqIEB7DQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0NPTU1PTl9FTkFCTEUgQkxFIFN0YWNrIEVuYWJsZQ0KKyAqIEB7DQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRDsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2Rfc29mdGRldmljZV9lbmFibGUoY2xvY2ssIGFzc2VydGlvbl9oYW5kbGVyKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJTZXQgYXBwX3JhbV9iYXNlIHRvIFNvZnREZXZpY2UgZGVmYXVsdCBmcm9tIHJlbGVhc2Ugbm90ZXMiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICJDb25maWd1cmUgdGhlIEJMRSBzdGFjayJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfY2ZnX3NldChjZmdfaWQsIGNmZywgYXBwX3JhbV9iYXNlKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIC4uLjsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfY2ZnX3NldChjZmdfaWQsIGNmZywgYXBwX3JhbV9iYXNlKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIkR1cmluZyBkZXZlbG9wbWVudDogRGV0ZXJtaW5lIHRoZSByZWdpb24gb2YgbWVtb3J5IHJlcXVpcmVkIGJ5IHRoZSBTb2Z0RGV2aWNlIl07DQorICogLS0tIFtsYWJlbCA9ICJBbHRlcm5hdGl2ZSAxOiBUaGUgZGVmYXVsdCBhcHBfcmFtX2Jhc2UgaXMgdG9vIHNtYWxsIGZvciB0aGUgY29uZmlndXJhdGlvbiJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZW5hYmxlKCZhcHBfcmFtX2Jhc2UpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9OT19NRU0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJhcHBfcmFtX2Jhc2UgZmlsbGVkIGJ5IHRoZSBTb2Z0RGV2aWNlIHdpdGggMHgyMDAweHh4eCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgc2V0cyAweDIwMDB4eHh4IGFzIGl0cyBSQU0gc3RhcnRpbmcgcG9pbnQgYW5kIHJlYnVpbGRzIiwgdGV4dGJnY29sb3I9IiM3ZmZmN2YiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICJBbHRlcm5hdGl2ZSAyOiBUaGUgZGVmYXVsdCBhcHBfcmFtX2Jhc2UgaXMgbGFyZ2UgZW5vdWdoIGZvciB0aGUgY29uZmlndXJhdGlvbiBidXQNCisgKiB0aGUgYXBwIHdhbnRzIHRvIHNhdmUgUkFNIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9lbmFibGUoJmFwcF9yYW1fYmFzZSk7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJhcHBfcmFtX2Jhc2UgZmlsbGVkIGJ5IHRoZSBTb2Z0RGV2aWNlIHdpdGggMHgyMDAweXl5eSJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgc2V0cyAweDIwMDB5eXl5IGFzIGl0cyBSQU0gc3RhcnRpbmcgcG9pbnQgYW5kIHJlYnVpbGRzIiwgdGV4dGJnY29sb3I9IiM3ZmZmN2YiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICJBbHRlcm5hdGl2ZSAzOiBUaGUgZGVmYXVsdCBhcHBfcmFtX2Jhc2UgaXMgbGFyZ2UgZW5vdWdoIGZvciB0aGUgY29uZmlndXJhdGlvbiwgYXBwDQorICogZG9lcyBub3QgbmVlZCB0byBzYXZlIFJBTSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZW5hYmxlKCZhcHBfcmFtX2Jhc2UpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iVGhlIGFwcCBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIHZhbHVlIGZpbGxlZCBpbnRvIGFwcF9yYW1fYmFzZSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIkFmdGVyIGRldmVsb3BtZW50OiBUaGUgbm9ybWFsIEJMRSBTdGFjayBFbmFibGUgc2VxdWVuY2UiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9zb2Z0ZGV2aWNlX2VuYWJsZShjbG9jaywgYXNzZXJ0aW9uX2hhbmRsZXIpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlNldCBhcHBfcmFtX2Jhc2UgdG8gdmFsdWUgZGV0ZXJtaW5lZCBkdXJpbmcgZGV2ZWxvcG1lbnQiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICJDb25maWd1cmUgdGhlIEJMRSBzdGFjayJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfY2ZnX3NldChjZmdfaWQsIGNmZywgYXBwX3JhbV9iYXNlKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIC4uLjsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfY2ZnX3NldChjZmdfaWQsIGNmZywgYXBwX3JhbV9iYXNlKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIkVuYWJsZSB0aGUgQkxFIHN0YWNrIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9lbmFibGUoJmFwcF9yYW1fYmFzZSk7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqIEB9DQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0NPTk5fQ0ZHIENvbm5lY3Rpb24gQ29uZmlndXJhdGlvbg0KKyAqIEB7DQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRDsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2Rfc29mdGRldmljZV9lbmFibGUoY2xvY2ssIGFzc2VydGlvbl9oYW5kbGVyKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIkNvbmZpZ3VyZSB0aGUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9ucyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSIgQ29uZmlndXJlIEdBUCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfY2ZnX3NldChCTEVfQ09OTl9DRkdfR0FQLCBjZmcgPSB7Y29ubl9jZmdfdGFnID0gMSwgZ2FwX2Nvbm5fY2ZnLmNvbm5fY291bnQgPSAxLCBhcHBfcmFtX2Jhc2UpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IiBDb25maWd1cmUgR0FUVCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfY2ZnX3NldChCTEVfQ09OTl9DRkdfR0FUVCwgY2ZnID0ge2Nvbm5fY2ZnX3RhZyA9IDEsIGdhdHRfY29ubl9jZmcsIGFwcF9yYW1fYmFzZSk7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iIENvbmZpZ3VyZSBHQVRUQyBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfY2ZnX3NldChCTEVfQ09OTl9DRkdfR0FUVEMsIGNmZyA9IHtjb25uX2NmZ190YWcgPSAxLCBnYXR0Y19jb25uX2NmZywgYXBwX3JhbV9iYXNlKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSIgQ29uZmlndXJlIEdBVFRTIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KEJMRV9DT05OX0NGR19HQVRUUywgY2ZnID0ge2Nvbm5fY2ZnX3RhZyA9IDEsIGdhdHRzX2Nvbm5fY2ZnLCBhcHBfcmFtX2Jhc2UpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9lbmFibGUoJmFwcF9yYW1fYmFzZSk7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICJFc3RhYmxpc2ggY29ubmVjdGlvbiB3aXRoIGRpZmZlcmVudCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb25zIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkVzdGFibGlzaCBjb25uZWN0aW9uIHdpdGggdGhlIGRlZmF1bHQgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9jb25uZWN0KHBhcmFtcywgY29ubl9jZmdfdGFnID0gQkxFX0NPTk5fQ0ZHX1RBR19ERUZBVUxUKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJFc3RhYmxpc2ggY29ubmVjdGlvbiB3aXRoIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiAjMSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYWR2X3N0YXJ0KHBhcmFtcywgY29ubl9jZmdfdGFnID0gMSk7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgTm8gbW9yZSBjb25uZWN0aW9ucyBjYW4gYmUgZXN0YWJsaXNoZWQgd2l0aCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gIzEiXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgU0QgW2xhYmVsID0gIkEgY29ubmVjdGlvbiBjYW5ub3QgYmUgZXN0YWJsaXNoZWQgaWYgdGhlIG51bWJlciBvZiBlc3RhYmxpc2hlZCBjb25uZWN0aW9ucyBpcyBlcXVhbCB0byB0aGUgY29ubmVjdGlvbiBjb3VudCBvZiB0aGUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubmVjdChwYXJhbXMsIGNvbm5fY2ZnX3RhZyA9IDEpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9DT05OX0NPVU5UIl07DQorICogQGVuZG1zYw0KKyAqIEB9DQorICogQGRlZmdyb3VwIEJMRV9DT01NT05fSVJRX0VWVF9NU0MgSW50ZXJydXB0LWRyaXZlbiBFdmVudCBSZXRyaWV2YWwNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNEOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9zb2Z0ZGV2aWNlX2VuYWJsZShjbG9jaywgYXNzZXJ0aW9uX2hhbmRsZXIpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfbnZpY19FbmFibGVJUlEoU0RfRVZUX0lSUW4pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggU0QgW2xhYmVsPSJBcHBsaWNhdGlvbiBydW5zIGFuZCB1c2VzIFNEIEFQSSJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iRXZlbnQgQXZhaWxhYmxlIGZvciB0aGUgQXBwIl07DQorICogfHx8Ow0KKyAqIEFQUDwtU0QgW2xhYmVsID0gIlNEX0VWVF9JUlFuIiwgdGV4dGNvbG9yPSIjODAwMDgwIiwgbGluZWNvbG9yPSIjODAwMDgwIl07DQorICogQVBQPT5BUFAgW2xhYmVsID0gIlNEX0VWVF9JUlFIYW5kbGVyKCkiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZXZ0X2dldChidWZmZXIpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIntOUkZfU1VDQ0VTUywgZXZlbnR9Il07DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfQ09NTU9OX1RIUkVBRF9FVlRfTVNDIFRocmVhZCBNb2RlIEV2ZW50IFJldHJpZXZhbA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0Q7DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX3NvZnRkZXZpY2VfZW5hYmxlKGNsb2NrLCBhc3NlcnRpb25faGFuZGxlcik7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYXBwX2V2dF93YWl0KHZvaWQpOyJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBUaHJlYWQgTW9kZSBibG9ja2VkLCBDUFUgaW4gbG93IHBvd2VyIG1vZGUiXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iRXZlbnQgQXZhaWxhYmxlIGZvciB0aGUgQXBwIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZXZ0X2dldChidWZmZXIpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIntOUkZfU1VDQ0VTUywgZXZlbnR9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYXBwX2V2dF93YWl0KHZvaWQpOyJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBUaHJlYWQgTW9kZSBibG9ja2VkLCBDUFUgaW4gbG93IHBvd2VyIG1vZGUiXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iRXZlbnQgQXZhaWxhYmxlIGZvciB0aGUgQXBwIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZXZ0X2dldChidWZmZXIpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIntOUkZfU1VDQ0VTUywgZXZlbnR9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYXBwX2V2dF93YWl0KHZvaWQpOyJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBUaHJlYWQgTW9kZSBibG9ja2VkLCBDUFUgaW4gbG93IHBvd2VyIG1vZGUiXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAfQ0KKyAqIEB9DQorICovDQorDQorLyoqDQorICogQGFkZHRvZ3JvdXAgQkxFX0dBUA0KKyAqIEB7DQorICogQGRlZmdyb3VwIEJMRV9HQVBfTVNDIE1lc3NhZ2UgU2VxdWVuY2UgQ2hhcnRzDQorICogQHsNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9BRFZfTVNDIEFkdmVydGlzaW5nDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxTQ0FOTkVSUzsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZGRyX3NldChwZWVyX2FkZHIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9kYXRhX3NldChhZHYsIHNyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZHZfc3RhcnQocGFyYW1zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIC4uLjsNCisgKiBTRC0+U0NBTk5FUlMgW2xhYmVsID0gIkFEViBwYWNrZXQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBcHAgU3RvcHMgQWR2ZXJ0aXNlbWVudCAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9zdG9wKCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEFkdmVydGlzZW1lbnQgVGltZW91dCAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfVElNRU9VVCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NPTk5fTVNDIFBlcmlwaGVyYWwgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IGFuZCBUZXJtaW5hdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IlN0YXJ0IENvbm5lY3RhYmxlIEFkdmVydGlzaW5nIl07DQorICogfHx8Ow0KKyAqIFNEPDo+Q0VOVFJBTCBbbGFiZWwgPSAiQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5FQ1RFRCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIExvY2FsIERpc2Nvbm5lY3Rpb24gIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9kaXNjb25uZWN0KHJlYXNvbikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJDb25uZWN0aW9uIFRlcm1pbmF0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0RJU0NPTk5FQ1RFRCB7cmVhc29ufSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIFJlbW90ZSBEaXNjb25uZWN0aW9uICJdOw0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJDb25uZWN0aW9uIFRlcm1pbmF0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0RJU0NPTk5FQ1RFRCB7cmVhc29ufSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NQVV9NU0MgUGVyaXBoZXJhbCBDb25uZWN0aW9uIFBhcmFtZXRlciBVcGRhdGUNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIHdpdGggY29ubi4gcGFyYW1zLiBDUCMxIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubl9wYXJhbV91cGRhdGUoQ1AjMikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJMMkNBUCBDUFUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIENlbnRyYWwgQWNjZXB0cyAiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIkwyQ0FQIENQVSBSZXNwb25zZTogQWNjZXB0ZWQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIFN0YXJ0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIENvbXBsZXRlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFIHtDUCMyfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIENlbnRyYWwgUmVqZWN0cyAiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIkwyQ0FQIENQVSBSZXNwb25zZTogUmVqZWN0ZWQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEUge0NQIzF9Il07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMyBDZW50cmFsIElnbm9yZXMgIl07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogU0QgYm94IFNEIFtsYWJlbD0iVGltZW91dCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURSB7Q1AjMX0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9SU1NJX0ZJTFRfTVNDIFJTU0kgZm9yIGNvbm5lY3Rpb25zIHdpdGggZXZlbnQgZmlsdGVyDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzE6IFRyaWdnZXIgZXZlbnQgd2hlbiBhIG5ldyBSU1NJIGlzIGF2YWlsYWJsZSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3Jzc2lfc3RhcnQoY29ubl9oYW5kbGUsIDAsIDApIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1JTU0lfQ0hBTkdFRCB7UlNTSSMxfSJdOw0KKyAqIHx8fDsNCisgKiBTRDwtUEVFUiBbbGFiZWwgPSAiUlNTSSBTYW1wbGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUlNTSV9DSEFOR0VEIHtSU1NJIzJ9Il07DQorICogfHx8Ow0KKyAqIFNEPC1QRUVSIFtsYWJlbCA9ICJSU1NJIFNhbXBsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9SU1NJX0NIQU5HRUQge1JTU0kjM30iXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9yc3NpX3N0b3AoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMjogT25seSB0cmlnZ2VyIGV2ZW50IGlmIFJTU0kgY2hhbmdlcyBieSA1IGRCbSBvciBtb3JlLiJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3Jzc2lfc3RhcnQoY29ubl9oYW5kbGUsIDB4MDUsIDB4MDApIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlPTB4MDAiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUlNTSV9DSEFOR0VEIHtSU1NJIzF9Il07DQorICogfHx8Ow0KKyAqIFNEPC1QRUVSIFtsYWJlbCA9ICJSU1NJIFNhbXBsZT0weDA0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPC1QRUVSIFtsYWJlbCA9ICJSU1NJIFNhbXBsZT0weDAzIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPC1QRUVSIFtsYWJlbCA9ICJSU1NJIFNhbXBsZT49MHgwNSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9SU1NJX0NIQU5HRUQge1JTU0kjMn0iXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9yc3NpX3N0b3AoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMzogT25seSB0cmlnZ2VyIGV2ZW50IGlmIG1vcmUgdGhhbiAzIFJTU0kgc2FtcGxlcyBoYXZlIGRldmlhdGVkIGZyb20gdGhlIGxhc3QgcmVwb3J0ZWQgUlNTSSBieSA1IGRCbSBvciBtb3JlLiJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3Jzc2lfc3RhcnQoY29ubl9oYW5kbGUsIDB4MDUsIDB4MDMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlPTB4MDAiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUlNTSV9DSEFOR0VEIHtSU1NJIzF9Il07DQorICogfHx8Ow0KKyAqIFNEPC1QRUVSIFtsYWJlbCA9ICJSU1NJIFNhbXBsZT0weDA0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPC1QRUVSIFtsYWJlbCA9ICJSU1NJIFNhbXBsZT0weDBBIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPC1QRUVSIFtsYWJlbCA9ICJSU1NJIFNhbXBsZT49MHgwNiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDwtUEVFUiBbbGFiZWwgPSAiUlNTSSBTYW1wbGU+PTB4MDkiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlPj0weDA3IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9SU1NJX0NIQU5HRUQge1JTU0kjMn0iXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9yc3NpX3N0b3AoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9SU1NJX1JFQURfTVNDIFJTU0kgZ2V0IHNhbXBsZQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9yc3NpX2dldChjb25uX2hhbmRsZSwgcF9yc3NpKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcnNzaV9zdGFydChjb25uX2hhbmRsZSwgQkxFX0dBUF9SU1NJX1RIUkVTSE9MRF9JTlZBTElELCAweDAwKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9yc3NpX2dldChjb25uX2hhbmRsZSwgcF9yc3NpKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9OT1RfRk9VTkQiXTsNCisgKiAuLi47DQorICogLi4uOw0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIGV2ZW50cyJdOw0KKyAqIC4uLjsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIFNEPC1QRUVSIFtsYWJlbCA9ICJSU1NJIFNhbXBsZT0weDAzIFtkQm1dIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9yc3NpX2dldChjb25uX2hhbmRsZSwgcF9yc3NpKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTLCAqcF9yc3NpPTB4MDMgW2RCbV0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3Jzc2lfc3RvcCgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfU0VDX01TQyBQZXJpcGhlcmFsIFNlY3VyaXR5IFByb2NlZHVyZXMNCisgKiBAew0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIX1NFQ19SRVFfTVNDIFBlcmlwaGVyYWwgU2VjdXJpdHkgUmVxdWVzdA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUocGFyYW1zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBTZWN1cml0eSBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQ2VudHJhbCBpbml0aWF0ZXMgU2VjdXJpdHkgRXN0YWJsaXNobWVudCAiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkVuY3J5cHRpb24gb3IgUGFpcmluZy9Cb25kaW5nIGluaXRpYXRlZCBieSBDZW50cmFsIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQ2VudHJhbCBpZ25vcmVzICJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9USU1FT1VUIHtlcnJvcl9zcmM6IEJMRV9HQVBfVElNRU9VVF9TUkNfU0VDVVJJVFlfUkVRVUVTVH0iXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIX0xFR0FDWV9NU0MgUGVyaXBoZXJhbCBMZWdhY3kgUGFpcmluZw0KKyAqIEB7DQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfUEFJUklOR19KV19NU0MgUGFpcmluZzogSnVzdCBXb3Jrcw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IG5vX2JvbmQsIG5vX21pdG0sIG5vX2lvX2NhcHN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IG5vX2JvbmQsIG5vX21pdG0sIG5vX2lvX2NhcHMsIHBfa2V5c2V0OiBOVUxMKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IkxlZ2FjeSBQYWlyaW5nIFBoYXNlIDIiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBTVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtFTkNfTk9fTUlUTX0iXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIX0JPTkRJTkdfSldfTVNDIEJvbmRpbmc6IEp1c3QgV29ya3MNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBib25kLCBub19taXRtLCBub19pb19jYXBzfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBib25kLCBub19taXRtLCBub19pb19jYXBzLCBwX2tleXNldCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IENFTlRSQUwgW2xhYmVsPSJMZWdhY3kgUGFpcmluZyBQaGFzZSAyIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggU1RLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7RU5DX05PX01JVE19Il07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IlNNUCBQYWlyaW5nIFBoYXNlIDMiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJLZXlzIHN0b3JlZCBpbiBrZXlzZXQiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfQk9ORElOR19QS19QRVJJUEhfTVNDIEJvbmRpbmc6IFBhc3NrZXkgRW50cnksIFBlcmlwaGVyYWwgZGlzcGxheXMNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBib25kLCBtaXRtLCBrZXlib2FyZH0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoU1VDQ0VTUywgb3duX3BhcmFtczogYm9uZCwgbWl0bSwgZGlzcGxheSwgcF9rZXlzZXQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUEFTU0tFWV9ESVNQTEFZIHtwYXNza2V5LCBtYXRjaF9yZXF1ZXN0PTB9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iUGFzc2tleSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIiXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iTGVnYWN5IFBhaXJpbmcgUGhhc2UgMiIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIFNUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0VOQ19NSVRNfSJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IENFTlRSQUwgW2xhYmVsPSJTTVAgUGFpcmluZyBQaGFzZSAzIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHtTVUNDRVNTfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWwgPSAiS2V5cyBzdG9yZWQgaW4ga2V5c2V0Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIX0JPTkRJTkdfUEtfQ0VOVFJBTF9PT0JfTVNDIEJvbmRpbmc6IFBhc3NrZXkgRW50cnksIFVzZXIgSW5wdXRzIG9uIFBlcmlwaGVyYWwgb3IgT09CDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIHtwZWVyX3BhcmFtczogYm9uZCwgbWl0bSwgZGlzcGxheX0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoU1VDQ0VTUywgb3duX3BhcmFtczogYm9uZCwgbWl0bSwga2V5Ym9hcmQsIHBfa2V5c2V0KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfS0VZX1JFUVVFU1Qge3R5cGV9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iVXNlciBlbnRlcnMgUGFzc2tleSBvciBkYXRhIHJlY2VpdmVkIE91dCBPZiBCYW5kIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoX2tleV9yZXBseShwYXNza2V5IG9yIE9PQikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IENFTlRSQUwgW2xhYmVsPSJMZWdhY3kgUGFpcmluZyBQaGFzZSAyIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggU1RLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7RU5DX01JVE19Il07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IlNNUCBQYWlyaW5nIFBoYXNlIDMiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJLZXlzIHN0b3JlZCBpbiBrZXlzZXQiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfQk9ORElOR19TVEFUSUNfUEtfTVNDIEJvbmRpbmc6IFBhc3NrZXkgRW50cnkgd2l0aCBzdGF0aWMgcGFzc2tleQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9vcHRfc2V0KG9wdF9pZCA9IEJMRV9HQVBfT1BUX1BBU1NLRVksIHBfb3B0LT5wX3Bhc3NrZXk9cGFzc2tleSkiXTsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBib25kLCBtaXRtLCBrZXlib2FyZH0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoU1VDQ0VTUywgb3duX3BhcmFtczogYm9uZCwgbWl0bSwgZGlzcGxheSwgcF9rZXlzZXQpIl07DQorICoNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9QQVNTS0VZX0RJU1BMQVkge3Bhc3NrZXksIG1hdGNoX3JlcXVlc3Q9MH0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJQYXNza2V5IGRpc3BsYXllZCB0byB0aGUgdXNlciJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IENFTlRSQUwgW2xhYmVsPSJMZWdhY3kgUGFpcmluZyBQaGFzZSAyIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggU1RLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7RU5DX01JVE19Il07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IlNNUCBQYWlyaW5nIFBoYXNlIDMiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJLZXlzIHN0b3JlZCBpbiBrZXlzZXQiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfUEFJUklOR19DT05GSVJNX0ZBSUxfTVNDIFBhaXJpbmcgZmFpbHVyZTogQ29uZmlybSBmYWlsZWQNCisgKiBUaGlzIG9jY3VycyBpZiB0aGUgcmFuZG9tIHZhbHVlIGRvZXNuJ3QgbWF0Y2gsIHVzdWFsbHkgYmVjYXVzZSB0aGUgdXNlciBlbnRlcmVkIGEgd3JvbmcgcGluDQorICogb3Igb3V0IG9mIGJhbmQgZGF0YSB3YXMgbWlzc2luZy4NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBtaXRtLCBkaXNwbGF5fSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBtaXRtLCBrZXlib2FyZCwgcF9rZXlzZXQ6IE5VTEwpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgQ29uZmlybSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBDb25maXJtIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJhbmRvbSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7YXV0aF9zdGF0dXM6IENvbmZpcm0gdmFsdWUsIGVycm9yX3NyYzogbG9jYWx9Il07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIGZhaWxlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEB9DQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfTEVTQ19NU0MgUGVyaXBoZXJhbCBMRVNDIFBhaXJpbmcNCisgKiBAew0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIX0xFU0NfUEFJUklOR19KV19NU0MgUGFpcmluZzogSnVzdCBXb3Jrcw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGxlc2MsIG5vX2JvbmQsIG5vX21pdG0sIG5vX2lvX2NhcHN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IGxlc2MsIG5vX2JvbmQsIG5vX21pdG0sIG5vX2lvX2NhcHMsIHBfcGtfb3duKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2EiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfTEVTQ19ESEtFWV9SRVFVRVNUIHtwX3BlZXJfcGt9Il07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgc3RhcnRzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IkxFU0MgQXV0aGVudGljYXRpb24gU3RhZ2UgMSIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIGNvbXBsZXRlcyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfbGVzY19kaGtleV9yZXBseShwX2Roa2V5KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBMVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtFTkNfTk9fTUlUTX0iXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19OQ19NU0MgQm9uZGluZzogTnVtZXJpYyBDb21wYXJpc29uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIHtwZWVyX3BhcmFtczogbGVzYywgYm9uZCwgbWl0bSwgZGlzcGxheShrYmQveWVzbm8pfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBsZXNjLCBib25kLCBtaXRtLCBkaXNwbGF5KGtiZC95ZXNubyksIGtleXNldCB3aXRoIHBfcGtfb3duKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2EiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfTEVTQ19ESEtFWV9SRVFVRVNUIHtwX3BlZXJfcGt9Il07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgc3RhcnRzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IkxFU0MgQXV0aGVudGljYXRpb24gU3RhZ2UgMSIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9QQVNTS0VZX0RJU1BMQVkge3Bhc3NrZXksIG1hdGNoX3JlcXVlc3Q9MX0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJQYXNza2V5IGRpc3BsYXllZCB0byB0aGUgdXNlciwgdXNlciBjb21wYXJlcyB2YWx1ZXMiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBVc2VyIGNvbmZpcm1zIG9uIGJvdGggc2lkZXMgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoX2tleV9yZXBseShCTEVfR0FQX0FVVEhfS0VZX1RZUEVfUEFTU0tFWSwgTlVMTCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEVhIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBjb21wbGV0ZXMgREhLZXkgY2FsY3VsYXRpb24iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2xlc2NfZGhrZXlfcmVwbHkocF9kaGtleSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggTFRLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7TEVTQ19FTkNfTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgVXNlciBkb2VzIG5vdCBjb25maXJtIGxvY2FsbHkgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoX2tleV9yZXBseShCTEVfR0FQX0FVVEhfS0VZX1RZUEVfTk9ORSwgTlVMTCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7YXV0aF9zdGF0dXM6IG51bSBjb21wIGZhaWx1cmUsIGVycm9yX3NyYzogbG9jYWx9Il07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIGZhaWxlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzMgVXNlciBkb2VzIG5vdCBjb25maXJtIHJlbW90ZWx5ICJdOw0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBmYWlsZWQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge2F1dGhfc3RhdHVzOiBudW0gY29tcCBmYWlsdXJlLCBlcnJvcl9zcmM6IHJlbW90ZX0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX1BLRV9QRF9NU0MgQm9uZGluZzogUGFzc2tleSBFbnRyeSwgUGVyaXBoZXJhbCBEaXNwbGF5cw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGxlc2MsIGJvbmQsIG1pdG0sIGtleWJvYXJkfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBsZXNjLCBib25kLCBtaXRtLCBkaXNwbGF5LCBrZXlzZXQgd2l0aCBwX3BrX293bikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUEFTU0tFWV9ESVNQTEFZIHtwYXNza2V5LCBtYXRjaF9yZXF1ZXN0PTB9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iUGFzc2tleSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1Qge3BfcGVlcl9wa30iXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEtiIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBzdGFydHMgREhLZXkgY2FsY3VsYXRpb24iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgT3B0aW9uYWwga2V5cHJlc3NlcyBmcm9tIHBlZXIgIl07DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIktleXByZXNzIE5vdGlmaWNhdGlvbiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9LRVlfUFJFU1NFRCB7dHlwZX0iXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgZGlzcGxheXMga2V5cHJlc3MiXTsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiS2V5cHJlc3MgTm90aWZpY2F0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0tFWV9QUkVTU0VEIHt0eXBlfSJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBkaXNwbGF5cyBrZXlwcmVzcyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiJdOw0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IkxFU0MgQXV0aGVudGljYXRpb24gU3RhZ2UgMSIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIGNvbXBsZXRlcyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfbGVzY19kaGtleV9yZXBseShwX2Roa2V5KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBMVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtMRVNDX0VOQ19NSVRNfSJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IENFTlRSQUwgW2xhYmVsPSJTTVAgUGFpcmluZyBQaGFzZSAzIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHtTVUNDRVNTfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWwgPSAiS2V5cyBzdG9yZWQgaW4ga2V5c2V0Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19QS0VfQ0RfTVNDIEJvbmRpbmc6IFBhc3NrZXkgRW50cnksIFVzZXIgSW5wdXRzIG9uIFBlcmlwaGVyYWwNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBsZXNjLCBib25kLCBtaXRtLCBkaXNwbGF5fSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBsZXNjLCBib25kLCBtaXRtLCBrZXlib2FyZCwga2V5c2V0IHdpdGggcF9wa19vd24pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfS0VZX1JFUVVFU1Qge3Bhc3NrZXl9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iVXNlciBlbnRlcnMgUGFzc2tleSJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEthIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0xFU0NfREhLRVlfUkVRVUVTVCB7cF9wZWVyX3BrfSJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2IiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIHN0YXJ0cyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBPcHRpb25hbCBrZXlwcmVzc2VzIHNlbnQgdG8gcGVlciAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2tleXByZXNzX25vdGlmeSh0eXBlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIktleXByZXNzIE5vdGlmaWNhdGlvbiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfa2V5cHJlc3Nfbm90aWZ5KHR5cGUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiS2V5cHJlc3MgTm90aWZpY2F0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoX2tleV9yZXBseShwYXNza2V5KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iTEVTQyBBdXRoZW50aWNhdGlvbiBTdGFnZSAxIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgY29tcGxldGVzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9sZXNjX2Roa2V5X3JlcGx5KHBfZGhrZXkpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEViIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIExUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0xFU0NfRU5DX01JVE19Il07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IlNNUCBQYWlyaW5nIFBoYXNlIDMiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJLZXlzIHN0b3JlZCBpbiBrZXlzZXQiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX09PQl9NU0MgQm9uZGluZzogT3V0IG9mIEJhbmQNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2FkZHJfc2V0KGFkZHIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2xlc2Nfb29iX2RhdGFfZ2V0KHBfcGtfb3duLCBwX29vYmRfb3duKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQIGFib3ggQ0VOVFJBTCBbbGFiZWw9Ik9PQiBjb21tdW5pY2F0aW9uOiBvb2JkX293biBzZW50IGFuZC9vciBvb2JkX3BlZXIgcmVjZWl2ZWQiLCB0ZXh0Ymdjb2xvcj0ic2lsdmVyIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGxlc2MsIGJvbmQsIG9vYn0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoU1VDQ0VTUywgb3duX3BhcmFtczogbGVzYywgYm9uZCwgb29iLCBrZXlzZXQgd2l0aCBwX3BrX293bikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1Qge3BfcGVlcl9waywgb29iZF9yZXE9MX0iXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEtiIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBzdGFydHMgREhLZXkgY2FsY3VsYXRpb24iXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9sZXNjX29vYl9kYXRhX3NldChwX29vYmRfb3duLCBwX29vYmRfcGVlcikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IENFTlRSQUwgW2xhYmVsPSJMRVNDIEF1dGhlbnRpY2F0aW9uIFN0YWdlIDEiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEVhIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBjb21wbGV0ZXMgREhLZXkgY2FsY3VsYXRpb24iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2xlc2NfZGhrZXlfcmVwbHkocF9kaGtleSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggTFRLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7TEVTQ19FTkNfTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEB9DQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfUEFJUklOR19LU19PVVRfT0ZfUkFOR0VfTVNDIFBhaXJpbmcgZmFpbHVyZTogS2V5c2l6ZSBvdXQgb2Ygc3VwcG9ydGVkIHJhbmdlDQorICogVGhpcyBvY2N1cnMgaWYgdGhlIG1pbiBrZXkgc2l6ZSBvZmZlcmVkIGJ5IHRoZSBwZWVyIGlzIGFib3ZlIDE2LCBvciBtYXgga2V5IHNpemUgYmVsb3cgNy4NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7YXV0aF9zdGF0dXM6IEludmFsaWQgcGFyYW1zLCBlcnJvcl9zcmM6IGxvY2FsfSJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBmYWlsZWQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfUEFJUklOR19LU19UT09fU01BTExfTVNDIEdBUCBGYWlsZWQgUGFpcmluZzogS2V5c2l6ZSB0b28gc21hbGwNCisgKiBUaGlzIG9jY3VycyBpZiB0aGUgbWF4IGtleSBzaXplIG9mZmVyZWQgYnkgdGhlIHBlZXIgaXMgYmVsb3cgdGhlIG1pbiBrZXkgc2l6ZSBzcGVjaWZpZWQgYnkNCisgKiB0aGUgYXBwLg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIENvbmZpcm0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge2F1dGhfc3RhdHVzOiBFbmMga2V5IHNpemUsIGVycm9yX3NyYzogbG9jYWx9Il07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIGZhaWxlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX0FQUF9FUlJPUl9NU0MgUGFpcmluZyBmYWlsdXJlOiBQYWlyaW5nIGFib3J0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uDQorICogV2hlbiB0aGUgYXBwbGljYXRpb24gZGV0ZWN0cyB0aGF0IHRoZSBwYWlyaW5nIHNob3VsZCBub3QgYmUgcGVyZm9ybWVkLCBmb3IgZXhhbXBsZSBhbg0KKyAqIGluc3VmZmljaWVudCBJTyBjb21iaW5hdGlvbiwgaXQgY2FuIHVzZSBzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoKSB0byBzZW5kDQorICogU01QIFBhaXJpbmcgZmFpbGVkIHRvIHRoZSBwZWVyLg0KKyAqDQorICogV2hlbiB0aGUgc3RhY2sgaGFuZGxlcyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgYXBwbGljYXRpb24gaXQgd2lsbCBhbHNvIHZhbGlkYXRlDQorICogdGhlIHBhc3NrZXkgKFNNUF9TVENfUEFTU0tFWV9FTlRSWV9GQUlMRUQpLiBJZiBhbnkgZXJyb3IgaXMgZGV0ZWN0ZWQgaXQgd2lsbCBiZQ0KKyAqIHJlcG9ydGVkIHdoZW4gc2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KCkgaXMgY2FsbGVkLg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCJdOw0KKyAqIFNEIGFib3ggQVBQIFtsYWJlbD0iU3RhY2sgbG9va3MgZm9yIGVycm9ycyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KDxjb2RlIGZyb20gYXBwbGljYXRpb24+KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIGZhaWxlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7YXV0aF9zdGF0dXM6IDxjb2RlIGZyb20gYXBwbGljYXRpb24+LCBlcnJvcl9zcmM6IGxvY2FsfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX1JFTU9URV9QQUlSSU5HX0ZBSUxfTVNDIFBhaXJpbmcgZmFpbHVyZTogUGFpcmluZyBmYWlsZWQgZnJvbSBjZW50cmFsDQorICogU01QIFBhaXJpbmcgRmFpbGVkIG1heSBiZSBzZW50IGZyb20gdGhlIGNlbnRyYWwgYXQgdmFyaW91cyB0aW1lcy4gVGhlIGFwcGxpY2F0aW9uIHNob3VsZA0KKyAqIHByZXBhcmUgZm9yIHRoaXMgYW5kIGdyYWNlZnVsbHkgaGFuZGxlIHRoZSBldmVudC4NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1QiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoU1VDQ0VTUykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBGYWlsZWQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge2F1dGhfc3RhdHVzOiA8cmVtb3RlX3JlYXNvbj4sIGVycm9yX3NyYzogcmVtb3RlfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX1RJTUVPVVRfTVNDIFBhaXJpbmcgZmFpbHVyZTogVGltZW91dA0KKyAqIFRoaXMgb2NjdXJzIGlmIHRoZSBjZW50cmFsIGRldmljZSBkb2Vzbid0IGNvbnRpbnVlIHRoZSBwYWlyaW5nIHNlcXVlbmNlIHdpdGhpbiAzMCBzZWNvbmRzLg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogLS0tICBbIGxhYmVsID0gIldhaXQgMzAgc2VjIiBdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7YXV0aF9zdGF0dXM6IFRpbWVvdXQsIGVycm9yX3NyYzogbG9jYWx9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIX0VOQ19NU0MgUGVyaXBoZXJhbCBFbmNyeXB0aW9uIEVzdGFibGlzaG1lbnQgdXNpbmcgc3RvcmVkIGtleXMNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJMTCBFbmNyeXB0aW9uIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX0lORk9fUkVRVUVTVCB7YWRkciwgZWRpdiwgcmFuZH0iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBcHAgUmVwbGllcyB3aXRoIEtleXMgIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWwgPSAiTG9hZCBQZXJpcGhlcmFsIEtleXMiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19pbmZvX3JlcGx5KGVkaXYsIHJhbmQsIExUSykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJMTCBFbmNyeXB0aW9uIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggTFRLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEFwcCBSZXBsaWVzIHdpdGhvdXQgS2V5cyAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfaW5mb19yZXBseShOVUxMKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIkxMIFJlamVjdCBJbmQ6IFBpbiBvciBLZXkgTWlzc2luZyIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsID0gIkxpbmsgaXMgTk9UIGVuY3J5cHRlZCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIEFwcCBSZXBsaWVzIHdpdGggSW5jb3JyZWN0IEtleXMgIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWwgPSAiTG9hZCBJbmNvcnJlY3QgUGVyaXBoZXJhbCBLZXlzIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfaW5mb19yZXBseShlZGl2LCByYW5kLCBMVEspIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiTEwgRW5jcnlwdGlvbiBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJDb25uZWN0aW9uIFRlcm1pbmF0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWwgPSAiTGluayBUZXJtaW5hdGVkIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0RJU0NPTk5FQ1RFRCB7TUlDIEZhaWx1cmV9Il07DQorICogQGVuZG1zYw0KKyAqIEB9DQorICoNCisgKg0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfU0NBTl9NU0MgU2Nhbm5pbmcNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELEFEVkVSVElTRVJTOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NjYW5fc3RhcnQocGFyYW1zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEPC1BRFZFUlRJU0VSUyBbbGFiZWwgPSAiQURWIHBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BRFZfUkVQT1JUIHtiZGFkZHIsIHJzc2ksIGRhdGF9Il07DQorICogU0Q8LUFEVkVSVElTRVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FEVl9SRVBPUlQge2JkYWRkciwgcnNzaSwgZGF0YX0iXTsNCisgKiBTRDwtQURWRVJUSVNFUlMgW2xhYmVsID0gIkFEViBwYWNrZXQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQURWX1JFUE9SVCB7YmRhZGRyLCByc3NpLCBkYXRhfSJdOw0KKyAqIC4uLjsNCisgKiBTRDwtQURWRVJUSVNFUlMgW2xhYmVsID0gIkFEViBwYWNrZXQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQURWX1JFUE9SVCB7YmRhZGRyLCByc3NpLCBkYXRhfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEFwcCBTdG9wcyBTY2FubmluZyAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NjYW5fc3RvcCgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBTY2FubmluZyBUaW1lb3V0ICJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfVElNRU9VVCB7QkxFX0dBUF9USU1FT1VUX1NSQ19TQ0FOfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfQ09OTl9NU0MgQ2VudHJhbCBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQgYW5kIFRlcm1pbmF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRVJJUEhFUkFMOw0KKyAqIHx8fDsNCisgKiBQRVJJUEhFUkFMIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IlBlcmlwaGVyYWwgU3RhcnQgQ29ubmVjdGFibGUgQWR2ZXJ0aXNpbmciXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9jb25uZWN0KHBhcmFtcykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTY2FubmluZyIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIENvbm5lY3Rpb24gRXN0YWJsaXNoZWQgIl07DQorICogU0Q8Oj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTkVDVEVEIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IENhbmNlbGxlZCAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5lY3RfY2FuY2VsKCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIENvbm5lY3Rpb24gVGltZW91dCAiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1RJTUVPVVQge0JMRV9HQVBfVElNRU9VVF9TUkNfQ09OTn0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0NQVV9NU0MgQ2VudHJhbCBDb25uZWN0aW9uIFBhcmFtZXRlciBVcGRhdGUNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFBFUklQSEVSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIHdpdGggY29ubi4gcGFyYW1zLiBDUCMxIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFVuc29saWNpdGVkIHByb2NlZHVyZSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5fcGFyYW1fdXBkYXRlKENQIzIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIFN0YXJ0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIENvbXBsZXRlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURSB7Q1AjMn0iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgUGVyaXBoZXJhbCBTb2xpY2l0ZWQgcHJvY2VkdXJlIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJMMkNBUCBDUFUgUmVxdWVzdCB7Q1AjM30iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFX1JFUVVFU1Qge0NQIzN9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQXBwIEFjY2VwdHMgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9jb25uX3BhcmFtX3VwZGF0ZShDUCMzKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIkwyQ0FQIENQVSBSZXNwb25zZTogQWNjZXB0ZWQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgU3RhcnQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgQ29tcGxldGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFIHtDUCMzfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEFwcCBSZWplY3RzICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5fcGFyYW1fdXBkYXRlKE5VTEwpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiTDJDQVAgQ1BVIFJlc3BvbnNlOiBSZWplY3RlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX1NFQ19NU0MgQ2VudHJhbCBTZWN1cml0eSBQcm9jZWR1cmVzDQorICogQHsNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfU0VDX1JFUV9NU0MgU2VjdXJpdHkgUmVxdWVzdCBSZWNlcHRpb24NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFBFUklQSEVSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgU2VjdXJpdHkgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUkVRVUVTVCB7Ym9uZCwgbWl0bX0iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBDZW50cmFsIGluaXRpYXRlcyBTZWN1cml0eSBFc3RhYmxpc2htZW50ICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2VuY3J5cHQoZWRpdiwgcmFuZCwgTFRLKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIExUSyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIENlbnRyYWwgVHJpZ2dlcnMgcGFpcmluZyBvciBib25kaW5nICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZShwYXJhbXMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiUGFpcmluZyBwcm9jZWR1cmUiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMyBDZW50cmFsIHJlamVjdHMgdGhlIFNlY3VyaXR5IFJlcXVlc3QgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYXV0aGVudGljYXRlKE5VTEwpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIEZhaWxlZDogUGFpcmluZyBOb3QgU3VwcG9ydGVkIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHthdXRoX3N0YXR1czogUGFpcmluZyBOb3QgU3VwcCwgZXJyb3Jfc3JjOiBsb2NhbH0iXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9MRUdBQ1lfTVNDIENlbnRyYWwgTGVnYWN5IFBhaXJpbmcNCisgKiBAew0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9QQUlSSU5HX0pXX01TQyBQYWlyaW5nOiBKdXN0IFdvcmtzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUobm9fYm9uZCwgbm9fbWl0bSwgbm9faW9fY2FwcykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBub19ib25kLCBub19taXRtLCBub19pb19jYXBzfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIENlbnRyYWwgQWNjZXB0cyBQZXJpcGhlcmFsIHBhcmFtZXRlcnMgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBOVUxMLCBwX2tleXNldDogTlVMTCkiXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iTGVnYWN5IFBhaXJpbmcgUGhhc2UgMiIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIFNUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0VOQ19OT19NSVRNfSJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBDZW50cmFsIFJlamVjdHMgUGVyaXBoZXJhbCBwYXJhbWV0ZXJzICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoQkxFX0dBUF9TRUNfU1RBVFVTX0lOVkFMSURfUEFSQU1TLCBvd25fcGFyYW1zOiBOVUxMLCBwX2tleXNldDogTlVMTCkiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIEZhaWxlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge0ZBSUxVUkV9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9CT05ESU5HX0pXX01TQyBCb25kaW5nOiBKdXN0IFdvcmtzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUoYm9uZCwgbm9fbWl0bSwgbm9faW9fY2FwcykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBib25kLCBub19taXRtLCBub19pb19jYXBzfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBOVUxMLCBwX2tleXNldCkiXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iTGVnYWN5IFBhaXJpbmcgUGhhc2UgMiIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIFNUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0VOQ19OT19NSVRNfSJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IFBFUklQSEVSQUwgW2xhYmVsPSJTTVAgUGFpcmluZyBQaGFzZSAzIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHtTVUNDRVNTfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWwgPSAiS2V5cyBzdG9yZWQgaW4ga2V5c2V0Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9CT05ESU5HX1BLX1BFUklQSF9NU0MgQm9uZGluZzogUGFzc2tleSBFbnRyeSwgQ2VudHJhbCBkaXNwbGF5cw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFUklQSEVSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYXV0aGVudGljYXRlKGJvbmQsIG1pdG0sIGRpc3BsYXkpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2V9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGJvbmQsIG1pdG0sIGtleWJvYXJkfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBOVUxMLCBwX2tleXNldCkiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1BBU1NLRVlfRElTUExBWSB7cGFzc2tleSwgbWF0Y2hfcmVxdWVzdD0wfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlBhc3NrZXkgZGlzcGxheWVkIHRvIHRoZSB1c2VyIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkxlZ2FjeSBQYWlyaW5nIFBoYXNlIDIiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBTVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtFTkNfTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfQk9ORElOR19QS19QRVJJUEhfT09CX01TQyBCb25kaW5nOiBQYXNza2V5IEVudHJ5LCBVc2VyIElucHV0cyBvbiBDZW50cmFsIG9yIE9PQg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFUklQSEVSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYXV0aGVudGljYXRlKGJvbmQsIG1pdG0sIGtleWJvYXJkKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGJvbmQsIG1pdG0sIGRpc3BsYXl9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IE5VTEwsIHBfa2V5c2V0KSJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9LRVlfUkVRVUVTVCB7dHlwZX0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJVc2VyIGVudGVycyBQYXNza2V5IG9yIGRhdGEgcmVjZWl2ZWQgT3V0IE9mIEJhbmQiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhfa2V5X3JlcGx5KHBhc3NrZXkgb3IgT09CKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkxlZ2FjeSBQYWlyaW5nIFBoYXNlIDIiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBTVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtFTkNfTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEB9DQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0xFU0NfTVNDIENlbnRyYWwgTEVTQyBQYWlyaW5nDQorICogQHsNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0xFU0NfUEFJUklOR19KV19NU0MgUGFpcmluZzogSnVzdCBXb3Jrcw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFUklQSEVSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYXV0aGVudGljYXRlKGxlc2MsIG5vX2JvbmQsIG5vX21pdG0sIG5vX2lvX2NhcHMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIHtwZWVyX3BhcmFtczogbGVzYywgbm9fYm9uZCwgbm9fbWl0bSwgbm9faW9fY2Fwc30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoU1VDQ0VTUywgb3duX3BhcmFtczogTlVMTCwgcF9wa19vd24pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEtiIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0xFU0NfREhLRVlfUkVRVUVTVCB7cF9wZWVyX3BrfSJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgc3RhcnRzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkxFU0MgQXV0aGVudGljYXRpb24gU3RhZ2UgMSIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBjb21wbGV0ZXMgREhLZXkgY2FsY3VsYXRpb24iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2xlc2NfZGhrZXlfcmVwbHkocF9kaGtleSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBMVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtFTkNfTk9fTUlUTX0iXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfTkNfTVNDIEJvbmRpbmc6IE51bWVyaWMgQ29tcGFyaXNvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFUklQSEVSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYXV0aGVudGljYXRlKGxlc2MsIGJvbmQsIG1pdG0sIGRpc3BsYXkoa2JkL3llc25vKSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBsZXNjLCBib25kLCBtaXRtLCBkaXNwbGF5KGtiZC95ZXNubyl9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IE5VTEwsIGtleXNldCB3aXRoIHBfcGtfb3duKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2EiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1Qge3BfcGVlcl9wa30iXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIHN0YXJ0cyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IFBFUklQSEVSQUwgW2xhYmVsPSJMRVNDIEF1dGhlbnRpY2F0aW9uIFN0YWdlIDEiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUEFTU0tFWV9ESVNQTEFZIHtwYXNza2V5LCBtYXRjaF9yZXF1ZXN0PTF9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iUGFzc2tleSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIsIHVzZXIgY29tcGFyZXMgdmFsdWVzIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgVXNlciBjb25maXJtcyBvbiBib3RoIHNpZGVzICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYXV0aF9rZXlfcmVwbHkoQkxFX0dBUF9BVVRIX0tFWV9UWVBFX1BBU1NLRVksIE5VTEwpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIGNvbXBsZXRlcyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfbGVzY19kaGtleV9yZXBseShwX2Roa2V5KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEViIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIExUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0xFU0NfRU5DX01JVE19Il07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggUEVSSVBIRVJBTCBbbGFiZWw9IlNNUCBQYWlyaW5nIFBoYXNlIDMiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJLZXlzIHN0b3JlZCBpbiBrZXlzZXQiXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIFVzZXIgZG9lcyBub3QgY29uZmlybSBsb2NhbGx5ICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYXV0aF9rZXlfcmVwbHkoQkxFX0dBUF9BVVRIX0tFWV9UWVBFX05PTkUsIE5VTEwpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge2F1dGhfc3RhdHVzOiBudW0gY29tcCBmYWlsdXJlLCBlcnJvcl9zcmM6IGxvY2FsfSJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBmYWlsZWQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIFVzZXIgZG9lcyBub3QgY29uZmlybSByZW1vdGVseSAiXTsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgZmFpbGVkIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHthdXRoX3N0YXR1czogbnVtIGNvbXAgZmFpbHVyZSwgZXJyb3Jfc3JjOiByZW1vdGV9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfUEtFX1BEX01TQyBCb25kaW5nOiBQYXNza2V5IEVudHJ5OiBDZW50cmFsIERpc3BsYXlzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUobGVzYywgYm9uZCwgbWl0bSwgZGlzcGxheSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBsZXNjLCBib25kLCBtaXRtLCBrZXlib2FyZH0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoU1VDQ0VTUywgb3duX3BhcmFtczogTlVMTCwga2V5c2V0IHdpdGggcF9wa19vd24pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1BBU1NLRVlfRElTUExBWSB7cGFzc2tleSwgbWF0Y2hfcmVxdWVzdD0wfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlBhc3NrZXkgZGlzcGxheWVkIHRvIHRoZSB1c2VyIl07DQorICogfHx8Ow0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2EiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1Qge3BfcGVlcl9wa30iXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIHN0YXJ0cyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBPcHRpb25hbCBrZXlwcmVzc2VzIGZyb20gcGVlciAiXTsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiS2V5cHJlc3MgTm90aWZpY2F0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0tFWV9QUkVTU0VEIHt0eXBlfSJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBkaXNwbGF5cyBrZXlwcmVzcyJdOw0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJLZXlwcmVzcyBOb3RpZmljYXRpb24iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfS0VZX1BSRVNTRUQge3R5cGV9Il07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIGRpc3BsYXlzIGtleXByZXNzIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIl07DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iTEVTQyBBdXRoZW50aWNhdGlvbiBTdGFnZSAxIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIGNvbXBsZXRlcyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfbGVzY19kaGtleV9yZXBseShwX2Roa2V5KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEViIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIExUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0xFU0NfRU5DX01JVE19Il07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggUEVSSVBIRVJBTCBbbGFiZWw9IlNNUCBQYWlyaW5nIFBoYXNlIDMiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJLZXlzIHN0b3JlZCBpbiBrZXlzZXQiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0xFU0NfQk9ORElOR19QS0VfQ0RfTVNDIEJvbmRpbmc6IFBhc3NrZXkgRW50cnk6IFVzZXIgSW5wdXRzIG9uIENlbnRyYWwNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRVJJUEhFUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZShsZXNjLCBib25kLCBtaXRtLCBrZXlib2FyZCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBsZXNjLCBib25kLCBtaXRtLCBkaXNwbGF5fSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBOVUxMLCBrZXlzZXQgd2l0aCBwX3BrX293bikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9LRVlfUkVRVUVTVCB7cGFzc2tleX0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJVc2VyIGVudGVycyBQYXNza2V5Il07DQorICogfHx8Ow0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2EiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1Qge3BfcGVlcl9wa30iXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIHN0YXJ0cyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBPcHRpb25hbCBrZXlwcmVzc2VzIHNlbnQgdG8gcGVlciAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2tleXByZXNzX25vdGlmeSh0eXBlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIktleXByZXNzIE5vdGlmaWNhdGlvbiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfa2V5cHJlc3Nfbm90aWZ5KHR5cGUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiS2V5cHJlc3MgTm90aWZpY2F0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoX2tleV9yZXBseShwYXNza2V5KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iTEVTQyBBdXRoZW50aWNhdGlvbiBTdGFnZSAxIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIGNvbXBsZXRlcyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfbGVzY19kaGtleV9yZXBseShwX2Roa2V5KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEViIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIExUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0xFU0NfRU5DX01JVE19Il07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggUEVSSVBIRVJBTCBbbGFiZWw9IlNNUCBQYWlyaW5nIFBoYXNlIDMiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJLZXlzIHN0b3JlZCBpbiBrZXlzZXQiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0xFU0NfQk9ORElOR19PT0JfTVNDIEJvbmRpbmc6IE91dCBvZiBCYW5kDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTDsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZGRyX3NldChhZGRyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9sZXNjX29vYl9kYXRhX2dldChwX3BrX293biwgcF9vb2JkX293bikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUCBhYm94IFBFUklQSEVSQUwgW2xhYmVsPSJPT0IgY29tbXVuaWNhdGlvbjogb29iZF9vd24gc2VudCBhbmQvb3Igb29iZF9wZWVyIHJlY2VpdmVkIiwgdGV4dGJnY29sb3I9InNpbHZlciJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZShsZXNjLCBib25kLCBvb2IpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIHtwZWVyX3BhcmFtczogbGVzYywgYm9uZCwgb29ifSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBOVUxMLCBrZXlzZXQgd2l0aCBwX3BrX293bikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEthIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2IiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfTEVTQ19ESEtFWV9SRVFVRVNUIHtwX3BlZXJfcGssIG9vYmRfcmVxPTF9Il07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBzdGFydHMgREhLZXkgY2FsY3VsYXRpb24iXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9sZXNjX29vYl9kYXRhX3NldChwX29vYmRfb3duLCBwX29vYmRfcGVlcikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IFBFUklQSEVSQUwgW2xhYmVsPSJMRVNDIEF1dGhlbnRpY2F0aW9uIFN0YWdlIDEiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgY29tcGxldGVzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9sZXNjX2Roa2V5X3JlcGx5KHBfZGhrZXkpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEVhIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggTFRLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7TEVTQ19FTkNfTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIEBlbmRtc2MNCisgKiBAfQ0KKyAqDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9JTlZBTElEX1NNUF9QRFVfTVNDIFVuZXhwZWN0ZWQgU2VjdXJpdHkgUGFja2V0IFJlY2VwdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9Ik5vIHBhaXJpbmcgaW4gcHJvZ3Jlc3MiXTsNCisgKiB8fHw7DQorICogUEVFUiByYm94IFBFRVIgW2xhYmVsPSJQZWVyIG1pc2JlaGF2aW5nIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBGYWlsZWQgKG9yIG90aGVyIHVuZXhwZWN0ZWQgU01QIFBEVSkiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1BEVV9JTlZBTElEfSJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0VOQ19NU0MgRW5jcnlwdGlvbiBFc3RhYmxpc2htZW50IHVzaW5nIHN0b3JlZCBrZXlzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRVJJUEhFUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2VuY3J5cHQoZWRpdiwgcmFuZCwgTFRLKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJMTCBFbmNyeXB0aW9uIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBQZXJpcGhlcmFsIHJlcGxpZXMgd2l0aCBrZXlzICJdOw0KKyAqIHx8fDsNCisgKiBQRVJJUEhFUkFMIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiUGVyaXBoZXJhbCBMb2FkcyBLZXlzIl07DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIkxMIEVuY3J5cHRpb24gUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBMVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgUGVyaXBoZXJhbCBrZXlzIG1pc3NpbmcgIl07DQorICogfHx8Ow0KKyAqIFBFUklQSEVSQUwgcmJveCBQRVJJUEhFUkFMIFtsYWJlbCA9ICJQZXJpcGhlcmFsIEtleXMgTWlzc2luZyJdOw0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJMTCBSZWplY3QgSW5kOiBQaW4gb3IgS2V5IE1pc3NpbmciLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIl07DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiTGluayBpcyBOT1QgZW5jcnlwdGVkIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzMgSW5jb3JyZWN0IHBlcmlwaGVyYWwga2V5cyAiXTsNCisgKiB8fHw7DQorICogUEVSSVBIRVJBTCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIlBlcmlwaGVyYWwgTG9hZHMgSW5jb3JyZWN0IEtleXMiXTsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiTEwgRW5jcnlwdGlvbiBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJDb25uZWN0aW9uIFRlcm1pbmF0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiTGluayBUZXJtaW5hdGVkIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0RJU0NPTk5FQ1RFRCB7TUlDIEZhaWx1cmV9Il07DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfRU5DX0FVVEhfTVVURVhfTVNDIENlbnRyYWwgRW5jcnlwdGlvbiBhbmQgQXV0aGVudGljYXRpb24gbXV0dWFsIGV4Y2x1c2lvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9lbmNyeXB0KGVkaXYsIHJhbmQsIExUSykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiRW5jcnlwdGlvbiBTdGFydCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBTRCBbbGFiZWwgPSAiIEVuY3J5cHRpb24gaW4gcHJvZ3Jlc3MsIGF1dGhlbnRpY2F0aW9uIGRpc2FsbG93ZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJFbmNyeXB0aW9uIENvbXBsZXRlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9jb25uX3BhcmFtX3VwZGF0ZSgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIFN0YXJ0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZW5jcnlwdChlZGl2LCByYW5kLCBMVEspIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IkVuY3J5cHRpb24gcXVldWVkIl07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIFNEIFtsYWJlbCA9ICIgRW5jcnlwdGlvbiBxdWV1ZWQsIGF1dGhlbnRpY2F0aW9uIGRpc2FsbG93ZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJDb25uZWN0aW9uIFVwZGF0ZSBDb21wbGV0ZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURSJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiRW5jcnlwdGlvbiBTdGFydCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJFbmNyeXB0aW9uIENvbXBsZXRlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIFNEIFtsYWJlbCA9ICIgQXV0aGVudGljYXRpb24gaW4gcHJvZ3Jlc3MsIGVuY3J5cHRpb24gZGlzYWxsb3dlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2VuY3J5cHQoZWRpdiwgcmFuZCwgTFRLKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIl07DQorICogQGVuZG1zYw0KKyAqIEB9DQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9NVUxUSUxJTktfQ1BVX01TQyBDZW50cmFsIENvbm5lY3Rpb24gUGFyYW1ldGVyIFVwZGF0ZSBvbiBtdWx0aXBsZSBsaW5rcw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTFM7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUxTIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCB3aXRoIDQgcGVlcnMsIGFsbCB3aXRoIGNvbm4uIHBhcmFtcy4gQ1AjMCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBQRVJJUEhFUkFMUyBbbGFiZWwgPSAiIFBlcmlwaGVyYWwgc29saWNpdGVkIHByb2NlZHVyZSBvbiBsaW5rICMyIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMUyBbbGFiZWwgPSAiTDJDQVAgQ1BVIFJlcXVlc3Qge0NQIzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFX1JFUVVFU1Qge2Nvbm5faGFuZGxlXzIsIENQIzN9Il07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIFBFUklQSEVSQUxTIFtsYWJlbCA9ICIgVW5zb2xpY2l0ZWQgcHJvY2VkdXJlIG9uIGxpbmtzICMzIGFuZCAjMSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5fcGFyYW1fdXBkYXRlKGNvbm5faGFuZGxlXzMsIENQIzMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUxTIFtsYWJlbCA9ICJDb25uZWN0aW9uIFVwZGF0ZSBTdGFydCBvbiBsaW5rICMzIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubl9wYXJhbV91cGRhdGUoY29ubl9oYW5kbGVfMSwgQ1AjMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBQRVJJUEhFUkFMUyBbbGFiZWwgPSAiIFJlc3BvbmQgdG8gc29saWNpdGVkIHByb2NlZHVyZSBvbiBsaW5rICMyIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9jb25uX3BhcmFtX3VwZGF0ZShjb25uX2hhbmRsZV8yLCBDUCMyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUxTIFtsYWJlbCA9ICJMMkNBUCBDUFUgUmVzcG9uc2U6IEFjY2VwdGVkIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIFBFUklQSEVSQUxTIFtsYWJlbCA9ICIgQWRkaXRpb25hbCBwcm9jZWR1cmUgb24gbGluayAjMiBmYWlscywgc2luY2UgYW5vdGhlciBvbmUgaXMgcGVuZGluZyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5fcGFyYW1fdXBkYXRlKGNvbm5faGFuZGxlXzIsIENQIzUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX0VSUk9SX0JVU1kiXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgUEVSSVBIRVJBTFMgW2xhYmVsID0gIiBOb3RlOiB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uIGlzIG5vdCBndWFyYW50ZWVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMUyBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgQ29tcGxldGUgb24gbGluayAjMyIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURSB7Y29ubl9oYW5kbGVfMywgQ1AjM30iXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUxTIFtsYWJlbCA9ICJDb25uZWN0aW9uIFVwZGF0ZSBTdGFydCBvbiBsaW5rICMxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFUklQSEVSQUxTIFtsYWJlbCA9ICJDb25uZWN0aW9uIFVwZGF0ZSBDb21wbGV0ZSBvbiBsaW5rICMxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFIHtjb25uX2hhbmRsZV8xLCBDUCMxfSJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTFMgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIFN0YXJ0IG9uIGxpbmsgIzIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgUEVSSVBIRVJBTFMgW2xhYmVsID0gIiBQZXJpcGhlcmFsIHNvbGljaXRlZCBwcm9jZWR1cmUgb24gbGluayAjNCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTFMgW2xhYmVsID0gIkwyQ0FQIENQVSBSZXF1ZXN0IHtDUCM0fSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURV9SRVFVRVNUIHtjb25uX2hhbmRsZV80LCBDUCM0fSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5fcGFyYW1fdXBkYXRlKGNvbm5faGFuZGxlXzQsIENQIzQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTFMgW2xhYmVsID0gIkwyQ0FQIENQVSBSZXNwb25zZTogQWNjZXB0ZWQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUxTIFtsYWJlbCA9ICJDb25uZWN0aW9uIFVwZGF0ZSBDb21wbGV0ZSBvbiBsaW5rICMyIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFIHtjb25uX2hhbmRsZV8yLCBDUCMyfSJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTFMgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIFN0YXJ0IG9uIGxpbmsgIzQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVSSVBIRVJBTFMgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIENvbXBsZXRlIG9uIGxpbmsgIzQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEUge2Nvbm5faGFuZGxlXzQsIENQIzR9Il07DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX01VTFRJTElOS19DVFJMX1BST0NfTVNDIENlbnRyYWwgQ29udHJvbCBQcm9jZWR1cmUgU2VyaWFsaXphdGlvbiBvbiBtdWx0aXBsZSBsaW5rcw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTFM7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUxTIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCB3aXRoIDQgcGVlcnMsIGFsbCB3aXRoIGNvbm4uIHBhcmFtcy4gQ1AjMCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBQRVJJUEhFUkFMUyBbbGFiZWwgPSAiIFBlcmlwaGVyYWwgc29saWNpdGVkIHByb2NlZHVyZSBvbiBsaW5rICMyIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMUyBbbGFiZWwgPSAiTDJDQVAgQ1BVIFJlcXVlc3Qge0NQIzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFX1JFUVVFU1Qge2Nvbm5faGFuZGxlXzIsIENQIzN9Il07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIFBFUklQSEVSQUxTIFtsYWJlbCA9ICIgRW5jcnlwdGlvbiBwcm9jZWR1cmUgb24gbGluayAjMyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2VuY3J5cHQoY29ubl9oYW5kbGVfMywgTFRLIzMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUxTIFtsYWJlbCA9ICJFbmNyeXB0aW9uIFN0YXJ0IG9uIGxpbmsgIzMiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgUEVSSVBIRVJBTFMgW2xhYmVsID0gIiBDb25uZWN0aW9uIFVwZGF0ZSBwcm9jZWR1cmUgb24gbGluayAjMSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5fcGFyYW1fdXBkYXRlKGNvbm5faGFuZGxlXzEsIENQIzEpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgUEVSSVBIRVJBTFMgW2xhYmVsID0gIiBSZXNwb25kIHRvIHNvbGljaXRlZCBwcm9jZWR1cmUgb24gbGluayAjMiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubl9wYXJhbV91cGRhdGUoY29ubl9oYW5kbGVfMiwgQ1AjMikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMUyBbbGFiZWwgPSAiTDJDQVAgQ1BVIFJlc3BvbnNlOiBBY2NlcHRlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBQRVJJUEhFUkFMUyBbbGFiZWwgPSAiIEVuY3J5cHRpb24gcHJvY2VkdXJlIG9uIGxpbmsgIzQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9lbmNyeXB0KGNvbm5faGFuZGxlXzQsIExUSyM0KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIFBFUklQSEVSQUxTIFtsYWJlbCA9ICIgTm90ZTogdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiBpcyBub3QgZ3VhcmFudGVlZCwgYnV0IGVuY3J5cHRpb24gYWx3YXlzIGhhcyBwcmlvcml0eSJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTFMgW2xhYmVsID0gIkVuY3J5cHRpb24gQ29tcGxldGUgb24gbGluayAjMyIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge2Nvbm5faGFuZGxlXzN9Il07DQorICogfHx8Ow0KKyAqIFNEOj5QRVJJUEhFUkFMUyBbbGFiZWwgPSAiRW5jcnlwdGlvbiBTdGFydCBvbiBsaW5rICM0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFUklQSEVSQUxTIFtsYWJlbCA9ICJFbmNyeXB0aW9uIENvbXBsZXRlIG9uIGxpbmsgIzQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtjb25uX2hhbmRsZV80fSJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTFMgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIFN0YXJ0IG9uIGxpbmsgIzEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVSSVBIRVJBTFMgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIENvbXBsZXRlIG9uIGxpbmsgIzEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEUge2Nvbm5faGFuZGxlXzEsIENQIzF9Il07DQorICogfHx8Ow0KKyAqIFNEOj5QRVJJUEhFUkFMUyBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgU3RhcnQgb24gbGluayAjMiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRVJJUEhFUkFMUyBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgQ29tcGxldGUgb24gbGluayAjMiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURSB7Y29ubl9oYW5kbGVfMiwgQ1AjMn0iXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfV0xfU0hBUkVfTVNDIFdoaXRlbGlzdCBTaGFyaW5nDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRDsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZHZfZGF0YV9zZXQoYWR2LCBzcikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfd2hpdGVsaXN0X3NldChXTCMxKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZHZfc3RhcnQoZnAgPSBDT05OUkVRKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJBZHZlcnRpc2luZyB3aXRoIFdoaXRlbGlzdCAjMSJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBBUFAgW2xhYmVsID0gIlVuYWJsZSB0byBjaGFuZ2Ugd2hpdGVsaXN0IHdoaWxlIGFkdiBpbiBwcm9ncmVzcyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfd2hpdGVsaXN0X3NldChXTCMyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIkJMRV9FUlJPUl9HQVBfV0hJVEVMSVNUX0lOX1VTRSJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBBUFAgW2xhYmVsID0gIlNjYW4gd2l0aCB0aGUgY3VycmVudCBhY3RpdmUgd2hpdGVsaXN0Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zY2FuX3N0YXJ0KHVzZV93aGl0ZWxpc3QgPSAxKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJBZHZlcnRpc2luZyBhbmQgc2Nhbm5pbmcgd2l0aCBXaGl0ZWxpc3QgIzEiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZHZfc3RvcCgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlNjYW5uaW5nIHdpdGggV2hpdGVsaXN0ICMxIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2Nhbl9zdG9wKCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3doaXRlbGlzdF9zZXQoV0wjMikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2Nhbl9zdGFydCh1c2Vfd2hpdGVsaXN0ID0gMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iU2Nhbm5pbmcgd2l0aCBXaGl0ZWxpc3QgIzIiXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgQVBQIFtsYWJlbCA9ICJDb25uZWN0IHdpdGggdGhlIGN1cnJlbnQgYWN0aXZlIHdoaXRlbGlzdCJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubmVjdCh1c2Vfd2hpdGVsaXN0ID0gMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRCBub3RlIFNEIFtsYWJlbCA9ICJTY2FubmluZyBpcyBhdXRvbWF0aWNhbGx5IHN0b3BwZWQiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iQ29ubmVjdGluZyB3aXRoIFdoaXRlbGlzdCAjMiJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QUklWQUNZX01TQyBQcml2YWN5DQorICogQHsNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BSSVZBQ1lfQURWX01TQyBQcml2YXRlIEFkdmVydGlzaW5nDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxTQ0FOTkVSUzsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZGRyX3NldChhZGRyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYWR2X2RhdGFfc2V0KGFkdiwgc3IpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBZHZlcnRpc2Ugd2l0aCBhZGRyZXNzIHJlc29sdmFibGUgYnkgZGV2aWNlIElSSyAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9wcml2YWN5X3NldChwYXJhbXM6IHttb2RlOiBERVZJQ0VfUFJJVkFDWSwgcHJpdmF0ZV9hZGRyX3R5cGU6IFJFU09MVkFCTEUgfSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9zdGFydChwYXJhbXM6IHtwX3BlZXJfYWRkciA9IE5VTEx9KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IFJlc29sdmFibGUxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZTEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRC0+U0NBTk5FUlMgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIC4uLjsNCisgKiBTRCBib3ggU0QgW2xhYmVsPSJQcml2YXRlIGFkZHJlc3MgdGltZW91dCJdOw0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IFJlc29sdmFibGUyIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQWR2ZXJ0aXNlIHdpdGggYWRkcmVzcyByZXNvbHZhYmxlIGJ5IGxvY2FsIElSSyBpbiBkZXZpY2UgaWRlbnRpdHkgbGlzdCAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9wcml2YWN5X3NldChwYXJhbXM6IHttb2RlOiBERVZJQ0VfUFJJVkFDWSwgcHJpdmF0ZV9hZGRyX3R5cGU6IFJFU09MVkFCTEUgfSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2RldmljZV9pZGVudGl0aWVzX3NldChwcF9pZF9rZXlzOiB7e3BlZXJfYWRkcjEsIHBlZXJfaXJrMX19LCBwcF9sb2NhbF9pcmtzOiB7bG9jYWxfaXJrMX0pICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYWR2X3N0YXJ0KHBhcmFtczoge3BfcGVlcl9hZGRyID0gcGVlcl9hZGRyMX0pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZTEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRC0+U0NBTk5FUlMgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IFJlc29sdmFibGUxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogLi4uOw0KKyAqIFNEIGJveCBTRCBbbGFiZWw9IlByaXZhdGUgYWRkcmVzcyB0aW1lb3V0Il07DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZTIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMyBBZHZlcnRpc2Ugd2l0aCBub24tcmVzb2x2YWJsZSBhZGRyZXNzICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3ByaXZhY3lfc2V0KHBhcmFtczoge21vZGU6IERFVklDRV9QUklWQUNZLCBwcml2YXRlX2FkZHJfdHlwZTogTk9OX1JFU09MVkFCTEUgfSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9zdGFydChwYXJhbXM6IHtwX3BlZXJfYWRkciA9IE5VTEx9KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IE5vbi1SZXNvbHZhYmxlMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IE5vbi1SZXNvbHZhYmxlMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IE5vbi1SZXNvbHZhYmxlMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIC4uLjsNCisgKiBTRCBib3ggU0QgW2xhYmVsPSJQcml2YXRlIGFkZHJlc3MgdGltZW91dCJdOw0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IE5vbi1SZXNvbHZhYmxlMiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BSSVZBQ1lfU0NBTl9NU0MgUHJpdmF0ZSBTY2FubmluZw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsQURWRVJUSVNFUlM7DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYWRkcl9zZXQoYWRkcikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEFjdGl2ZSBTY2FuIHdpdGggYWRkcmVzcyByZXNvbHZhYmxlIGJ5IGRldmljZSBJUksgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcHJpdmFjeV9zZXQocGFyYW1zOiB7bW9kZTogREVWSUNFX1BSSVZBQ1ksIHByaXZhdGVfYWRkcl90eXBlOiBSRVNPTFZBQkxFIH0gIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zY2FuX3N0YXJ0KHBhcmFtcykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIkFEViBwYWNrZXQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRC0+QURWRVJUSVNFUlMgW2xhYmVsID0gIlNDQU4gUkVRIHBhY2tldCwgQWRkciA9IFJlc29sdmFibGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIlNDQU4gUlNQIHBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEFjdGl2ZSBTY2FuIHdpdGggYWRkcmVzcyByZXNvbHZhYmxlIGJ5IGxvY2FsIElSS3MgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcHJpdmFjeV9zZXQocGFyYW1zOiB7bW9kZTogREVWSUNFX1BSSVZBQ1ksIHByaXZhdGVfYWRkcl90eXBlOiBSRVNPTFZBQkxFIH0gIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9kZXZpY2VfaWRlbnRpdGllc19zZXQocHBfaWRfa2V5czoge3twZWVyX2FkZHIxLCBwZWVyX2lyazF9LCB7cGVlcl9hZGRyMiwgcGVlcl9pcmsyfX0sIHBwX2xvY2FsX2lya3M6IHtsb2NhbF9pcmsxLCBsb2NhbF9pcmsyfSkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zY2FuX3N0YXJ0KHBhcmFtcykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBwZWVyX2FkZHIxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QgYm94IEFEVkVSVElTRVJTIFtsYWJlbCA9ICJwZWVyX2FkZHIxIGlzIGluIHRoZSBkZXZpY2UgaWRlbnRpdHkgbGlzdCwgcmVzcG9uZCB3aXRoIGFuIGFkZHJlc3MgZ2VuZXJhdGVkIGZyb20gbG9jYWxfaXJrMSJdOw0KKyAqIFNELT5BRFZFUlRJU0VSUyBbbGFiZWwgPSAiU0NBTiBSRVEgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiU0NBTiBSU1AgcGFja2V0LCBBZGRyID0gcGVlcl9hZGRyMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogQURWRVJUSVNFUlMtPlNEIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZTIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCBib3ggQURWRVJUSVNFUlMgW2xhYmVsID0gIlJlc29sdmFibGUyIHJlc29sdmVkIHRvIGRldmljZSBpZGVudGl0eSBwZWVyX2FkZHIyIGluIHRoZSBkZXZpY2UgaWRlbnRpdHkgbGlzdCwgcmVzcG9uZCB3aXRoIGFuIGFkZHJlc3MgZ2VuZXJhdGVkIGZyb20gbG9jYWxfaXJrMiJdOw0KKyAqIFNELT5BRFZFUlRJU0VSUyBbbGFiZWwgPSAiU0NBTiBSRVEgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiU0NBTiBSU1AgcGFja2V0LCBBZGRyID0gcGVlcl9hZGRyMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogQURWRVJUSVNFUlMtPlNEIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gcGVlcl9hZGRyMyIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIGJveCBBRFZFUlRJU0VSUyBbbGFiZWwgPSAicGVlcl9hZGRyMyBpcyBub3QgaW4gdGhlIGRldmljZSBpZGVudGl0eSBsaXN0LCByZXNwb25kIHdpdGggYW4gYWRkcmVzcyBnZW5lcmF0ZWQgZnJvbSBkZXZpY2VfaXJrIl07DQorICogU0QtPkFEVkVSVElTRVJTIFtsYWJlbCA9ICJTQ0FOIFJFUSBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQURWRVJUSVNFUlMtPlNEIFtsYWJlbCA9ICJTQ0FOIFJTUCBwYWNrZXQsIEFkZHIgPSBwZWVyX2FkZHIxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzMgQWN0aXZlIFNjYW4gd2l0aCBub24tcmVzb2x2YWJsZSBhZGRyZXNzICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3ByaXZhY3lfc2V0KHBhcmFtczoge21vZGU6IERFVklDRV9QUklWQUNZLCBwcml2YXRlX2FkZHJfdHlwZTogTk9OX1JFU09MVkFCTEUgfSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NjYW5fc3RhcnQocGFyYW1zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiQURWIHBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5BRFZFUlRJU0VSUyBbbGFiZWwgPSAiU0NBTiBSRVEgcGFja2V0LCBBZGRyID0gTm9uLVJlc29sdmFibGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIlNDQU4gUlNQIHBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QUklWQUNZX1NDQU5fUFJJVkFURV9TQ0FOX01TQyBTY2FuIFByaXZhdGUgRGV2aWNlcw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsQURWRVJUSVNFUlM7DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZGV2aWNlX2lkZW50aXRpZXNfc2V0KHBwX2lkX2tleXM6IHt7cGVlcl9hZGRyMSwgcGVlcl9pcmsxfX0sIHBwX2xvY2FsX2lya3M6IE5VTEwpICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgU2NhbiBhbmQgcmVzb2x2ZSBwcml2YXRlIGRldmljZXMgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2Nhbl9zdGFydChwYXJhbXMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQURWRVJUSVNFUlMtPlNEIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZTEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCBub3RlIEFEVkVSVElTRVJTIFtsYWJlbD0iUmVzb2x2YWJsZTEgcmVzb2x2ZWQgdG8gZGV2aWNlIGlkZW50aXR5IHBlZXJfYWRkcjEiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQURWX1JFUE9SVCB7cGVlcl9hZGRyMSwgcnNzaSwgZGF0YX0iXTsNCisgKiB8fHw7DQorICogQURWRVJUSVNFUlMtPlNEIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gcGVlcl9hZGRyMiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BRFZfUkVQT1JUIHtwZWVyX2FkZHIyLCByc3NpLCBkYXRhfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIFNjYW4gYW5kIHJlc29sdmUgcHJpdmF0ZSBkZXZpY2VzIHdpdGggd2hpdGVsaXN0ICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3doaXRlbGlzdF9zZXQoe3BlZXJfYWRkcjEsIFJlc29sdmFibGUyfSkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zY2FuX3N0YXJ0KHBhcmFtcykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIG5vdGUgQURWRVJUSVNFUlMgW2xhYmVsPSJSZXNvbHZhYmxlMSByZXNvbHZlZCB0byBkZXZpY2UgaWRlbnRpdHkgcGVlcl9hZGRyMSB3aGljaCBpcyBpbiB0aGUgd2hpdGVsaXN0Il07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FEVl9SRVBPUlQge3BlZXJfYWRkcjEsIHJzc2ksIGRhdGF9Il07DQorICogfHx8Ow0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IFJlc29sdmFibGUyIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Qgbm90ZSBBRFZFUlRJU0VSUyBbbGFiZWw9IlJlc29sdmFibGUyIGRpZCBub3QgcmVzb2x2ZSB0byBhIGRldmljZSBpZGVudGl0eSBidXQgaXMgaW4gdGhlIHdoaXRlbGlzdCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BRFZfUkVQT1JUIHtSZXNvbHZhYmxlMiwgcnNzaSwgZGF0YX0iXTsNCisgKiB8fHw7DQorICogQURWRVJUSVNFUlMtPlNEIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZTMiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCBub3RlIEFEVkVSVElTRVJTIFtsYWJlbD0iUmVzb2x2YWJsZTMgaXMgbm90IGluIHRoZSB3aGl0ZWxpc3QsIG5vIHJlcG9ydCBnZW5lcmF0ZWQiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMyBTY2FuIGRpcmVjdGVkIGFkdmVydGlzZXJzIGFuZCByZXNvbHZlIGluaXRpYXRvciBhZGRyZXNzIHVzaW5nIGRldmljZSBJUksiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zY2FuX3N0YXJ0KCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkdmVydGlzZXIgQWRkciA9IFJlc29sdmFibGUsIEluaXRpYXRvciBBZGRyID0gUmVzb2x2YWJsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFEVkVSVElTRVJTIGJveCBTRCBbbGFiZWwgPSAiQWR2ZXJ0aXNlciBBZGRyZXNzIHJlc29sdmVkIHVzaW5nIHBlZXJfaXJrMSwgSW5pdGlhdG9yIGFkZHJlc3MgcmVzb2x2ZWQgdXNpbmcgZGV2aWNlX2lyayJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BRFZfUkVQT1JUIHtwZWVyX2FkZHI6IHBlZXJfYWRkcjEiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjNCBTY2FuIGRpcmVjdGVkIGFkdmVydGlzZXJzIGFuZCByZXNvbHZlIGluaXRpYXRvciBhZGRyZXNzIHVzaW5nIGxvY2FsIElSSyBpbiBkZXZpY2UgaWRlbnRpdHkgbGlzdCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2RldmljZV9pZGVudGl0aWVzX3NldChwcF9pZF9rZXlzOiB7e3BlZXJfYWRkcjEsIHBlZXJfaXJrMX19LCBwcF9sb2NhbF9pcmtzOiBsb2NhbF9pcmsxKSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NjYW5fc3RhcnQoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWR2ZXJ0aXNlciBBZGRyID0gUmVzb2x2YWJsZSwgSW5pdGlhdG9yIEFkZHIgPSBSZXNvbHZhYmxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQURWRVJUSVNFUlMgYm94IFNEIFtsYWJlbCA9ICJBZHZlcnRpc2VyIEFkZHJlc3MgcmVzb2x2ZWQgdXNpbmcgcGVlcl9pcmsxLCBJbml0aWF0b3IgYWRkcmVzcyByZXNvbHZlZCB1c2luZyBsb2NhbF9pcmsxIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FEVl9SRVBPUlQge3BlZXJfYWRkcjogcGVlcl9hZGRyMSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICM1IFNjYW4gZGlyZWN0ZWQgYWR2ZXJ0aXNlcnMgd2l0aCB1bnJlc29sdmVkIGRpcmVjdCBhZGRyZXNzICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NjYW5fc3RhcnQocGFyYW1zOiB7YWR2X2Rpcl9yZXBvcnQgPSAxfSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkdmVydGlzZXIgQWRkciA9IHBlZXJfYWRkcjIsIEluaXRpYXRvciBBZGRyID0gUmVzb2x2YWJsZTIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBRFZFUlRJU0VSUyBib3ggU0QgW2xhYmVsID0gIlJlc29sdmFibGUyIGNvdWxkIG5vdCBiZSByZXNvbHZlZCwgcmVwb3J0IHRoZSB1bnJlc29sdmVkIGRpcmVjdCBhZGRyZXNzIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FEVl9SRVBPUlQge3BlZXJfYWRkcjogcGVlcl9hZGRyMiwgZGlyZWN0X2FkZHI6IFJlc29sdmFibGUyfSJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QUklWQUNZX0FEVl9ESVJfUFJJVl9NU0MgRGlyZWN0ZWQgQWR2ZXJ0aXNpbmcNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELElOSVRJQVRPUjsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZGRyX3NldChhZGRyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQWR2ZXJ0aXNlIGRpcmVjdGVkIHRvIHByaXZhdGUgcGVlciJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2RldmljZV9pZGVudGl0aWVzX3NldChwcF9pZF9rZXlzOiB7e3BlZXJfYWRkcjEsIHBlZXJfaXJrMX19LCBwcF9sb2NhbF9pcmtzOiBOVUxMKSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9zdGFydChwYXJhbXM6IHtwX3BlZXJfYWRkciA9IHBlZXJfYWRkcjF9KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIGJveCBTRCBbbGFiZWwgPSAiR2VuZXJhdGUgaW5pdGlhdG9yIGFkZHIgZnJvbSBwZWVyX2lyazEiXTsNCisgKiBTRC0+SU5JVElBVE9SW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkdmVydGlzZXIgQWRkciA9IGFkZHIsIEluaXRpYXRvciBBZGRyID0gUmVzb2x2YWJsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5JTklUSUFUT1JbbGFiZWwgPSAiQURWIHBhY2tldCwgQWR2ZXJ0aXNlciBBZGRyID0gYWRkciwgSW5pdGlhdG9yIEFkZHIgPSBSZXNvbHZhYmxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPklOSVRJQVRPUltsYWJlbCA9ICJBRFYgcGFja2V0LCBBZHZlcnRpc2VyIEFkZHIgPSBhZGRyLCBJbml0aWF0b3IgQWRkciA9IFJlc29sdmFibGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBQcml2YXRlIGRpcmVjdGVkIGFkdmVydGlzaW5nIHRvIHByaXZhdGUgcGVlciB1c2luZyBkZXZpY2UgSVJLIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZGV2aWNlX2lkZW50aXRpZXNfc2V0KHBwX2lkX2tleXM6IHt7cGVlcl9hZGRyMSwgcGVlcl9pcmsxfX0sIHBwX2xvY2FsX2lya3M6IE5VTEwpICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcHJpdmFjeV9zZXQocGFyYW1zOiB7bW9kZTogREVWSUNFX1BSSVZBQ1ksIHByaXZhdGVfYWRkcl90eXBlOiBSRVNPTFZBQkxFIH0gIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZHZfc3RhcnQocGFyYW1zOiB7cF9wZWVyX2FkZHIgPSBwZWVyX2FkZHIxfSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRCBib3ggU0QgW2xhYmVsID0gIkdlbmVyYXRlIGFkdmVydGlzZXIgYWRkcmVzcyBmcm9tIGRldmljZV9pcmsgR2VuZXJhdGUgaW5pdGlhdG9yIGFkZHJlc3MgZnJvbSBwZWVyX2lyazEiXTsNCisgKiBTRC0+SU5JVElBVE9SW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkdmVydGlzZXIgQWRkciA9IFJlc29sdmFibGUsIEluaXRpYXRvciBBZGRyID0gUmVzb2x2YWJsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5JTklUSUFUT1JbbGFiZWwgPSAiQURWIHBhY2tldCwgQWR2ZXJ0aXNlciBBZGRyID0gUmVzb2x2YWJsZSwgSW5pdGlhdG9yIEFkZHIgPSBSZXNvbHZhYmxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPklOSVRJQVRPUltsYWJlbCA9ICJBRFYgcGFja2V0LCBBZHZlcnRpc2VyIEFkZHIgPSBSZXNvbHZhYmxlLCBJbml0aWF0b3IgQWRkciA9IFJlc29sdmFibGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMyBQcml2YXRlIGRpcmVjdGVkIGFkdmVydGlzaW5nIHRvIHByaXZhdGUgcGVlciB1c2luZyBsb2NhbCBJUksgaW4gZGV2aWNlIGlkZW50aXR5IGxpc3QiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9kZXZpY2VfaWRlbnRpdGllc19zZXQocHBfaWRfa2V5czoge3twZWVyX2FkZHIxLCBwZWVyX2lyazF9fSwgcHBfbG9jYWxfaXJrczoge3tsb2NhbF9pcmsxfX0pICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcHJpdmFjeV9zZXQocGFyYW1zOiB7bW9kZTogREVWSUNFX1BSSVZBQ1ksIHByaXZhdGVfYWRkcl90eXBlOiBSRVNPTFZBQkxFIH0gIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZHZfc3RhcnQocGFyYW1zOiB7cF9wZWVyX2FkZHIgPSBwZWVyX2FkZHIxfSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRCBib3ggU0QgW2xhYmVsID0gIkdlbmVyYXRlIGFkdmVydGlzZXIgYWRkcmVzcyBmcm9tIGxvY2FsX2lyazEgR2VuZXJhdGUgaW5pdGlhdG9yIGFkZHJlc3MgZnJvbSBwZWVyX2lyazEiXTsNCisgKiBTRC0+SU5JVElBVE9SW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkdmVydGlzZXIgQWRkciA9IFJlc29sdmFibGUsIEluaXRpYXRvciBBZGRyID0gUmVzb2x2YWJsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5JTklUSUFUT1JbbGFiZWwgPSAiQURWIHBhY2tldCwgQWR2ZXJ0aXNlciBBZGRyID0gUmVzb2x2YWJsZSwgSW5pdGlhdG9yIEFkZHIgPSBSZXNvbHZhYmxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPklOSVRJQVRPUltsYWJlbCA9ICJBRFYgcGFja2V0LCBBZHZlcnRpc2VyIEFkZHIgPSBSZXNvbHZhYmxlLCBJbml0aWF0b3IgQWRkciA9IFJlc29sdmFibGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjNCBQcml2YXRlIGRpcmVjdGVkIGFkdmVydGlzaW5nIHRvIG5vbi1wcml2YXRlIHBlZXIgdXNpbmcgbG9jYWwgSVJLIGluIGRldmljZSBpZGVudGl0eSBsaXN0Il07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZGV2aWNlX2lkZW50aXRpZXNfc2V0KHBwX2lkX2tleXM6IHt7cGVlcl9hZGRyMSwgcGVlcl9pcms9MC4uMH19LCBwcF9sb2NhbF9pcmtzOiB7e2xvY2FsX2lyazF9fSkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9wcml2YWN5X3NldChwYXJhbXM6IHttb2RlOiBERVZJQ0VfUFJJVkFDWSwgcHJpdmF0ZV9hZGRyX3R5cGU6IFJFU09MVkFCTEUgfSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9zdGFydChwYXJhbXM6IHtwX3BlZXJfYWRkciA9IHBlZXJfYWRkcjF9KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIGJveCBTRCBbbGFiZWwgPSAiR2VuZXJhdGUgYWR2ZXJ0aXNlciBhZGRyZXNzIGZyb20gbG9jYWxfaXJrMSJdOw0KKyAqIFNELT5JTklUSUFUT1JbbGFiZWwgPSAiQURWIHBhY2tldCwgQWR2ZXJ0aXNlciBBZGRyID0gUmVzb2x2YWJsZSwgSW5pdGlhdG9yIEFkZHIgPSBwZWVyX2FkZHIxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPklOSVRJQVRPUltsYWJlbCA9ICJBRFYgcGFja2V0LCBBZHZlcnRpc2VyIEFkZHIgPSBSZXNvbHZhYmxlLCBJbml0aWF0b3IgQWRkciA9IHBlZXJfYWRkcjEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRC0+SU5JVElBVE9SW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkdmVydGlzZXIgQWRkciA9IFJlc29sdmFibGUsIEluaXRpYXRvciBBZGRyID0gcGVlcl9hZGRyMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfQ09OTl9QUklWX01TQyBQZXJpcGhlcmFsIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCB3aXRoIFByaXZhdGUgUGVlcg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9kZXZpY2VfaWRlbnRpdGllc19zZXQocHBfaWRfa2V5czoge3twZWVyX2FkZHIxLCBwZWVyX2lyazF9fSwgcHBfbG9jYWxfaXJrczogTlVMTCkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBQZWVyIHVzZWQgcmVzb2x2YWJsZSBhZGRyZXNzZXMgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAgIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJTdGFydCBDb25uZWN0YWJsZSBBZHZlcnRpc2luZyJdOw0KKyAqIHx8fDsNCisgKiBTRDw6PkNFTlRSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gRXN0YWJsaXNobWVudCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05ORUNURUQsIHBlZXJfYWRkciA9IHtwZWVyX2FkZHIxLCBhZGRyX2lkX3BlZXIgPSAxfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIFBlZXIgdXNlZCBpZGVudGl0eSBhZGRyZXNzIGR1cmluZyBjb25uZWN0aW9uIHNldHVwICJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iU3RhcnQgQ29ubmVjdGFibGUgQWR2ZXJ0aXNpbmciXTsNCisgKiB8fHw7DQorICogU0Q8Oj5DRU5UUkFMIFtsYWJlbCA9ICJDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTkVDVEVELCBwZWVyX2FkZHIgPSB7cGVlcl9hZGRyMSwgYWRkcl9pZF9wZWVyID0gMH0iXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9DT05OX1BSSVZfTVNDIENlbnRyYWwgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IHdpdGggUHJpdmF0ZSBQZWVyDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRVJJUEhFUkFMOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2RldmljZV9pZGVudGl0aWVzX3NldChwcF9pZF9rZXlzOiB7e3BlZXJfYWRkcjEsIHBlZXJfaXJrMX19LCBwcF9sb2NhbF9pcmtzOiBOVUxMKSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBQRVJJUEhFUkFMIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IlBlcmlwaGVyYWwgU3RhcnQgQ29ubmVjdGFibGUgQWR2ZXJ0aXNpbmciXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9jb25uZWN0KHBlZXJfYWRkciA9IHtwZWVyX2FkZHIxLCBhZGRyX2lkX3BlZXIgPSAxfSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU2Nhbm5pbmciLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIFBlZXIgdXNlZCByZXNvbHZhYmxlIGFkZHJlc3NlcyBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cCAiXTsNCisgKiB8fHw7DQorICogU0Q8Oj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTkVDVEVELCBwZWVyX2FkZHIgPSB7cGVlcl9hZGRyMSwgYWRkcl9pZF9wZWVyID0gMX0iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBQZWVyIHVzZWQgaWRlbnRpdHkgYWRkcmVzcyBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cCAiXTsNCisgKiB8fHw7DQorICogU0Q8Oj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTkVDVEVELCBwZWVyX2FkZHIgPSB7cGVlcl9hZGRyMSwgYWRkcl9pZF9wZWVyID0gMH0iXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQH0NCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0VWVF9QSFlfTVNDIFBIWSBSZXF1ZXN0DQorICogQHsNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfUEhZX1JFUVVFU1QgQ2VudHJhbCBQSFkgUmVxdWVzdA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTDsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBJbml0aWF0ZWQgYnkgUGVyaXBoZXJhbCwgbm8gcHJlZmVycmVkIHBoeSBzZXQgIl07DQorICogU0Q8PVBFUklQSEVSQUwgW2xhYmVsID0gIkxMX1BIWV9SRVEiXTsNCisgKiBTRD0+UEVSSVBIRVJBTCBbbGFiZWwgPSAiTExfUEhZX1VQREFURV9JTkQgLSBObyBjaGFuZ2UiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBJbml0aWF0ZWQgYnkgUGVyaXBoZXJhbCwgcHJlZmVycmVkIHBoeSBzZXQgYW5kIGNoYW5nZSByZXF1aXJlZCJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9vcHRfc2V0KEJMRV9HQVBfT1BUX1BSRUZFUlJFRF9QSFlTX1NFVCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIC4uLjsNCisgKiBTRDw9UEVSSVBIRVJBTCBbbGFiZWwgPSAiTExfUEhZX1JFUSJdOw0KKyAqIFNEPT5QRVJJUEhFUkFMIFtsYWJlbCA9ICJMTF9QSFlfVVBEQVRFX0lORCAtIHByZWZlcnJlZCBwaHkgZnJvbSBhcHAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUEhZX1VQREFURSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIEluaXRpYXRlZCBieSBBUFAsIG5vdCBzdXBwb3J0ZWQgYnkgcGVlciJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3BoeV9yZXF1ZXN0KGNvbm5faGFuZGxlLCB7e0FMTF9QSFksIEFMTF9QSFl9fSkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCByYm94IFBFUklQSEVSQUwgW2xhYmVsPSJGZWF0dXJlIGV4Y2hhbmdlIGlmIHJlcXVpcmVkXG4gcGVlciBzdXBwb3J0IGNoYW5naW5nIHBoeSJdOw0KKyAqIFNEPT5QRVJJUEhFUkFMIFtsYWJlbD0iTExfUEhZX1JFUSJdOw0KKyAqIFNEPD1QRVJJUEhFUkFMIFtsYWJlbD0iTExfVU5LTk9XTl9SU1AiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWw9IkJMRV9HQVBfRVZUX1BIWV9VUERBVEUge1N0YXR1cz1Ob3Qgc3VwcG9ydGVkfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICM0IEluaXRpYXRlZCBieSBBUFAsIGNoYW5nZSByZXF1aXJlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3BoeV9yZXF1ZXN0KGNvbm5faGFuZGxlLCB7e0FMTF9QSFksIEFMTF9QSFl9fSkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCByYm94IFBFUklQSEVSQUwgW2xhYmVsPSJGZWF0dXJlIGV4Y2hhbmdlIGlmIHJlcXVpcmVkXG4gcGVlciBzdXBwb3J0IGNoYW5naW5nIHBoeSJdOw0KKyAqIFNEPT5QRVJJUEhFUkFMIFtsYWJlbCA9ICJMTF9QSFlfUkVRIl07DQorICogU0Q8PVBFUklQSEVSQUwgW2xhYmVsID0gIkxMX1BIWV9SU1AiXTsNCisgKiBTRD0+UEVSSVBIRVJBTCBbbGFiZWwgPSAiTExfUEhZX1VQREFURV9JTkQiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUEhZX1VQREFURSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSEVSQUxfUEhZX1JFUVVFU1QgUGVyaXBoZXJhbCBQSFkgUmVxdWVzdA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBJbml0aWF0ZWQgYnkgQ2VudHJhbCwgbm8gcHJlZmVycmVkIHBoeSBzZXQgIl07DQorICogU0Q8PUNFTlRSQUwgW2xhYmVsID0gIkxMX1BIWV9SRVEiXTsNCisgKiBTRD0+Q0VOVFJBTCBbbGFiZWwgPSAiTExfUEhZX1JTUCAtIDEgTWJwcyB0eCwgMSBNYnBzIHJ4Il07DQorICogU0Q8PUNFTlRSQUwgW2xhYmVsID0gIkxMX1BIWV9VUERBVEVfSU5EIC0gTm8gY2hhbmdlIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgSW5pdGlhdGVkIGJ5IENlbnRyYWwsIHByZWZlcnJlZCBwaHkgc2V0IGFuZCBjaGFuZ2UgcmVxdWlyZWQiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfb3B0X3NldChCTEVfR0FQX09QVF9QUkVGRVJSRURfUEhZU19TRVQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiAuLi47DQorICogU0Q8PUNFTlRSQUwgW2xhYmVsID0gIkxMX1BIWV9SRVEiXTsNCisgKiBTRD0+Q0VOVFJBTCBbbGFiZWwgPSAiTExfUEhZX1JTUCAtIHByZWZlcnJlZCBwaHkgZnJvbSBhcHAiXTsNCisgKiBTRDw9Q0VOVFJBTCBbbGFiZWwgPSAiTExfUEhZX1VQREFURV9JTkQgLSBwcmVmZXJyZWQgcGh5IGZyb20gYXBwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1BIWV9VUERBVEUiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMyBJbml0aWF0ZWQgYnkgQVBQLCBub3Qgc3VwcG9ydGVkIGJ5IHBlZXIiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9waHlfcmVxdWVzdChjb25uX2hhbmRsZSwge3tBTExfUEhZLCBBTExfUEhZfX0pICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0QgcmJveCBDRU5UUkFMIFtsYWJlbD0iRmVhdHVyZSBleGNoYW5nZSBpZiByZXF1aXJlZFxuIHBlZXIgc3VwcG9ydCBjaGFuZ2luZyBwaHkiXTsNCisgKiBTRD0+Q0VOVFJBTCBbbGFiZWw9IkxMX1BIWV9SRVEiXTsNCisgKiBTRDw9Q0VOVFJBTCBbbGFiZWw9IkxMX1VOS05PV05fUlNQIl07DQorICogQVBQPDw9U0QgW2xhYmVsPSJCTEVfR0FQX0VWVF9QSFlfVVBEQVRFIHtTdGF0dXM9Tm90IHN1cHBvcnRlZH0iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjNCBJbml0aWF0ZWQgYnkgQVBQLCBjaGFuZ2UgcmVxdWlyZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9waHlfcmVxdWVzdChjb25uX2hhbmRsZSwge3tBTExfUEhZLCBBTExfUEhZfX0pICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0QgcmJveCBDRU5UUkFMIFtsYWJlbD0iRmVhdHVyZSBleGNoYW5nZSBpZiByZXF1aXJlZFxuIHBlZXIgc3VwcG9ydCBjaGFuZ2luZyBwaHkiXTsNCisgKiBTRD0+Q0VOVFJBTCBbbGFiZWw9IkxMX1BIWV9SRVEiXTsNCisgKiBTRDw9Q0VOVFJBTCBbbGFiZWw9IkxMX1BIWV9VUERBVEVfSU5EIl07DQorICogQVBQPDw9U0QgW2xhYmVsPSJCTEVfR0FQX0VWVF9QSFlfVVBEQVRFIl07DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEB9DQorDQorICogQGRlZmdyb3VwIEJMRV9HQVBfREFUQV9MRU5HVEhfVVBEQVRFX1BST0NFRFVSRV9NU0MgRGF0YSBMZW5ndGggVXBkYXRlIFByb2NlZHVyZQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFNlbGYgaW5pdGlhdGVkICJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbCA9ICJtYXhfdHhfb2N0ZXRzPTI3LCBtYXhfcnhfb2N0ZXRzPTI3Il07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9kYXRhX2xlbmd0aF91cGRhdGUoY29ubl9oYW5kbGUsIGxvY2FsX21heF90eD0yNTEsIGxvY2FsX21heF9yeD0yNTEsICZsaW1pdGF0aW9uKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkxMIExlbmd0aCBSZXF1ZXN0IHt0eD0yNTEsIHJ4PTI1MX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiTEwgTGVuZ3RoIFJlc3BvbnNlIHt0eD0yNTEsIHJ4PTI1MX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbCA9ICJtYXhfdHhfb2N0ZXRzPTI1MSwgbWF4X3J4X29jdGV0cz0yNTEiXTsNCisgKiBBUFA8PD1TRCAgIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9EQVRBX0xFTkdUSF9VUERBVEUge21heF90eF9vY3RldHM9MjUxLCBtYXhfcnhfb2N0ZXRzPTI1MX0iXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBQZWVyIGluaXRpYXRlZCAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbCA9ICJtYXhfdHhfb2N0ZXRzPTI3LCBtYXhfcnhfb2N0ZXRzPTI3Il07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkxMIExlbmd0aCBSZXF1ZXN0IHt0eD0yNTEsIHJ4PTI1MX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfREFUQV9MRU5HVEhfVVBEQVRFX1JFUVVFU1Qge2xvY2FsX21heF90eDogMjUxLCBsb2NhbF9tYXhfcng6IDI1MX0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2RhdGFfbGVuZ3RoX3VwZGF0ZShjb25uX2hhbmRsZSwgbG9jYWxfbWF4X3R4PTI1MSwgbG9jYWxfbWF4X3J4PTI1MSwgJmxpbWl0YXRpb24pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiTEwgTGVuZ3RoIFJlc3BvbnNlIHt0eD0yNTEsIHJ4PTI1MX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbCA9ICJtYXhfdHhfb2N0ZXRzPTI1MSwgbWF4X3J4X29jdGV0cz0yNTEiXTsNCisgKiBBUFA8PD1TRCAgIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9EQVRBX0xFTkdUSF9VUERBVEUge21heF90eF9vY3RldHM9MjUxLCBtYXhfcnhfb2N0ZXRzPTI1MX0iXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBVc2luZyB0aGUgbGltaXRhdGlvbiBvdXQgcGFyYW1ldGVyIHRvIGFkanVzdCBMaW5rIExheWVyIERhdGEgQ2hhbm5lbCBQRFUgc2l6ZSAiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWwgPSAibWF4X3R4X29jdGV0cz0yNywgbWF4X3J4X29jdGV0cz0yNyJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZGF0YV9sZW5ndGhfdXBkYXRlKGNvbm5faGFuZGxlLCBsb2NhbF9tYXhfdHg9MjUxLCBsb2NhbF9tYXhfcng9MjUxLCAmbGltaXRhdGlvbikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfRVJST1JfUkVTT1VSQ0VTIl07DQorICogQVBQIG5vdGUgU0QgW2xhYmVsID0gImxpbWl0YXRpb24gPSB7IC50eF9wYXlsb2FkX2xpbWl0ZWRfb2N0ZXRzID0gNTEsIC5yeF9wYXlsb2FkX2xpbWl0ZWRfb2N0ZXRzID0gNTEsIC50eF9yeF90aW1lX2xpbWl0ZWRfdXMgPSAwfSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2RhdGFfbGVuZ3RoX3VwZGF0ZShjb25uX2hhbmRsZSwgbG9jYWxfbWF4X3R4PTIwMCwgbG9jYWxfbWF4X3J4PTIwMCwgJmxpbWl0YXRpb24pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBAZW5kbXNjDQorICogQH0NCisgKg0KKyAqIEB9DQorICogQH0NCisgKi8NCisNCisvKioNCisgKiBAYWRkdG9ncm91cCBCTEVfR0FUVEMNCisgKiBAew0KKyAqIEBkZWZncm91cCBCTEVfR0FUVENfTVNDIE1lc3NhZ2UgU2VxdWVuY2UgQ2hhcnRzDQorICogQHsNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX1BSSU1fU1JWQ19ESVNDX01TQyBHQVRUQyBQcmltYXJ5IFNlcnZpY2UgRGlzY292ZXJ5DQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBEaXNjb3ZlciBBbGwgU2VydmljZXMgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19wcmltYXJ5X3NlcnZpY2VzX2Rpc2NvdmVyKGhhbmRsZSwgTlVMTCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBHcm91cCBUeXBlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQnkgR3JvdXAgVHlwZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1BSSU1fU1JWQ19ESVNDX1JTUCB7U1VDQ0VTUywgc2VydmljZXN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3ByaW1hcnlfc2VydmljZXNfZGlzY292ZXIoaGFuZGxlICsgTiwgTlVMTCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBHcm91cCBUeXBlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQnkgR3JvdXAgVHlwZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1BSSU1fU1JWQ19ESVNDX1JTUCB7U1VDQ0VTUywgc2VydmljZXN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3ByaW1hcnlfc2VydmljZXNfZGlzY292ZXIoaGFuZGxlICsgTiArIE0sIE5VTEwpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQnkgR3JvdXAgVHlwZSBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZTogQXR0cmlidXRlIE5vdCBGb3VuZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1BSSU1fU1JWQ19ESVNDX1JTUCB7QVRUUklCVVRFX05PVF9GT1VORH0iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBEaXNjb3ZlciBhIFNwZWNpZmljIFNlcnZpY2UgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19wcmltYXJ5X3NlcnZpY2VzX2Rpc2NvdmVyKGhhbmRsZSwgdXVpZCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRmluZCBCeSBUeXBlIFZhbHVlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEZpbmQgQnkgVHlwZSBWYWx1ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1BSSU1fU1JWQ19ESVNDX1JTUCB7U1VDQ0VTUywgc2VydmljZXN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3ByaW1hcnlfc2VydmljZXNfZGlzY292ZXIoaGFuZGxlICsgTiwgdXVpZCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRmluZCBCeSBUeXBlIFZhbHVlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEZpbmQgQnkgVHlwZSBWYWx1ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1BSSU1fU1JWQ19ESVNDX1JTUCB7U1VDQ0VTUywgc2VydmljZXN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3ByaW1hcnlfc2VydmljZXNfZGlzY292ZXIoaGFuZGxlICsgTiArIE0sIHV1aWQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEZpbmQgQnkgVHlwZSBWYWx1ZSBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZTogQXR0cmlidXRlIE5vdCBGb3VuZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1BSSU1fU1JWQ19ESVNDX1JTUCB7QVRUUklCVVRFX05PVF9GT1VORH0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX1JFTF9ESVNDX01TQyBHQVRUQyBSZWxhdGlvbnNoaXAgRGlzY292ZXJ5DQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3JlbGF0aW9uc2hpcHNfZGlzY292ZXIoaGFuZGxlX3JhbmdlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IFR5cGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfUkVMX0RJU0NfUlNQIHtTVUNDRVNTLCBpbmNsdWRlc30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfcmVsYXRpb25zaGlwc19kaXNjb3ZlcihoYW5kbGVfcmFuZ2UgKyBOKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IFR5cGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfUkVMX0RJU0NfUlNQIHtTVUNDRVNTLCBpbmNsdWRlc30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfcmVsYXRpb25zaGlwc19kaXNjb3ZlcihoYW5kbGVfcmFuZ2UgKyBOICsgTSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlOiBBdHRyaWJ1dGUgTm90IEZvdW5kIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfUkVMX0RJU0NfUlNQIHtBVFRSSUJVVEVfTk9UX0ZPVU5EfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVENfQ0hBUl9ESVNDX01TQyBHQVRUQyBDaGFyYWN0ZXJpc3RpYyBEaXNjb3ZlcnkNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfY2hhcmFjdGVyaXN0aWNzX2Rpc2NvdmVyKGhhbmRsZV9yYW5nZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQnkgVHlwZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX0NIQVJfRElTQ19SU1Age1NVQ0NFU1MsIGNoYXJzfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19jaGFyYWN0ZXJpc3RpY3NfZGlzY292ZXIoaGFuZGxlX3JhbmdlICsgTikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQnkgVHlwZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX0NIQVJfRElTQ19SU1Age1NVQ0NFU1MsIGNoYXJzfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19jaGFyYWN0ZXJpc3RpY3NfZGlzY292ZXIoaGFuZGxlX3JhbmdlICsgTiArIE0pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQnkgVHlwZSBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZTogQXR0cmlidXRlIE5vdCBGb3VuZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX0NIQVJfRElTQ19SU1Age0FUVFJJQlVURV9OT1RfRk9VTkR9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19ERVNDX0RJU0NfTVNDIEdBVFRDIERlc2NyaXB0b3IgRGlzY292ZXJ5DQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX2Rlc2NyaXB0b3JzX2Rpc2NvdmVyKGhhbmRsZV9yYW5nZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRmluZCBJbmZvcm1hdGlvbiBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBGaW5kIEluZm9ybWF0aW9uIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfREVTQ19ESVNDX1JTUCB7U1VDQ0VTUywgZGVzY3N9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX2Rlc2NyaXB0b3JzX2Rpc2NvdmVyKGhhbmRsZV9yYW5nZSArIE4pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEZpbmQgSW5mb3JtYXRpb24gUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRmluZCBJbmZvcm1hdGlvbiBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX0RFU0NfRElTQ19SU1Age1NVQ0NFU1MsIGRlc2NzfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19kZXNjcmlwdG9yc19kaXNjb3ZlcihoYW5kbGVfcmFuZ2UgKyBOICsgTSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRmluZCBJbmZvcm1hdGlvbiBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZTogQXR0cmlidXRlIE5vdCBGb3VuZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX0RFU0NfRElTQ19SU1Age0FUVFJJQlVURV9OT1RfRk9VTkR9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19SRUFEX1VVSURfTVNDIEdBVFRDIFJlYWQgQ2hhcmFjdGVyaXN0aWMgVmFsdWUgYnkgVVVJRA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19jaGFyX3ZhbHVlX2J5X3V1aWRfcmVhZCh1dWlkLCBoYW5kbGVfcmFuZ2UpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQnkgVHlwZSBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IFR5cGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9DSEFSX1ZBTF9CWV9VVUlEX1JFQURfUlNQIHtTVUNDRVNTLCBjaGFyX3ZhbHVlc30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfY2hhcl92YWx1ZV9ieV91dWlkX3JlYWQodXVpZCwgaGFuZGxlX3JhbmdlICsgTikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQnkgVHlwZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX0NIQVJfVkFMX0JZX1VVSURfUkVBRF9SU1Age1NVQ0NFU1MsIGNoYXJfdmFsdWVzfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19jaGFyX3ZhbHVlX2J5X3V1aWRfcmVhZCh1dWlkLCBoYW5kbGVfcmFuZ2UgKyBOICsgTSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlOiBBdHRyaWJ1dGUgTm90IEZvdW5kIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfQ0hBUl9WQUxfQllfVVVJRF9SRUFEX1JTUCB7QVRUUklCVVRFX05PVF9GT1VORH0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX1ZBTFVFX1JFQURfTVNDIEdBVFRDIENoYXJhY3RlcmlzdGljIG9yIERlc2NyaXB0b3IgVmFsdWUgUmVhZA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgb2Zmc2V0ID09IDAgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19yZWFkKGhhbmRsZSwgMCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfUkVBRF9SU1Age1NVQ0NFU1MsIHZhbHVlfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIG9mZnNldCAhPSAwICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfcmVhZChoYW5kbGUsIG9mZnNldCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCbG9iIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQmxvYiBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1JFQURfUlNQIHtTVUNDRVNTLCB2YWx1ZX0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfcmVhZChoYW5kbGUsIG9mZnNldCArIE4pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQmxvYiBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJsb2IgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9SRUFEX1JTUCB7U1VDQ0VTUywgdmFsdWV9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3JlYWQoaGFuZGxlLCBvZmZzZXQgKyBOICsgTSArIDEpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQmxvYiBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZTogSW52YWxpZCBPZmZzZXQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9SRUFEX1JTUCB7SU5WQUxJRF9PRkZTRVR9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19SRUFEX01VTFRfTVNDIEdBVFRDIFJlYWQgTXVsdGlwbGUgQ2hhcmFjdGVyaXN0aWMgVmFsdWVzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBTdWNjZXNzZnVsIHJlcXVlc3QgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19jaGFyX3ZhbHVlc19yZWFkKGhhbmRsZXMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgTXVsdGlwbGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBNdWx0aXBsZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX0NIQVJfVkFMU19SRUFEX1JTUCB7U1VDQ0VTUywgY2hhcl92YWx1ZXN9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgRmFpbGluZyByZXF1ZXN0IChpbnZhbGlkIGhhbmRsZSkgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19jaGFyX3ZhbHVlc19yZWFkKGhhbmRsZXMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgTXVsdGlwbGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXJyb3IgUmVzcG9uc2U6IEludmFsaWQgSGFuZGxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfQ0hBUl9WQUxTX1JFQURfUlNQIHtJTlZBTElEX0hBTkRMRSwgZXJyb3JfaGFuZGxlPTxpbnZhbGlkIGhhbmRsZT59Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19WQUxVRV9XUklURV9XSVRIT1VUX1JFU1BfTVNDIEdBVFRDIENoYXJhY3RlcmlzdGljIFZhbHVlIFdyaXRlIFdpdGhvdXQgUmVzcG9uc2UNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEFwcCBkb2VzIG5vdCBrZWVwIHRyYWNrIG9mIHRoZSBhdmFpbGFibGUgcXVldWUgZWxlbWVudCBjb3VudCBmb3Igd3JpdGVzIHdpdGhvdXQgcmVzcG9uc2VzICJdOw0KKyAqIEFQUCBub3RlIFBFRVIgW2xhYmVsID0gIiBUaGlzIHZhcmlhbnQgbWFrZXMgaXQgcG9zc2libGUgZm9yIEFQUCB0byB0cmFuc21pdCB3cml0ZXMgd2l0aG91dCByZXNwb25zZXMgd2l0aG91dCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBhdmFpbGFibGUgcXVldWUgZWxlbWVudCBjb3VudC4gSG93ZXZlciwgc3VjY2Vzc2Z1bCBxdWV1aW5nIG9mIHdyaXRlcyB3aXRob3V0IHJlc3BvbnNlcyBjYW5ub3QgYmUgZ3VhcmFudGVlZC4gIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9lbmFibGUoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9XUklURV9DTUQsIGhhbmRsZSwgdmFsdWVfMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9XUklURV9DTUQsIGhhbmRsZSwgdmFsdWVfMikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9XUklURV9DTUQsIGhhbmRsZSwgdmFsdWVfMykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfRVJST1JfUkVTT1VSQ0VTIl07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX1dSSVRFX0NNRCwgaGFuZGxlLCB2YWx1ZV80KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgV3JpdGUgQ29tbWFuZCB7dmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFdyaXRlIENvbW1hbmQge3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBXcml0ZSBDb21tYW5kIHt2YWx1ZV80fSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1dSSVRFX0NNRF9UWF9DT01QTEVURSB7U1VDQ0VTUywgM30iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBBcHAga2VlcHMgdHJhY2sgb2YgdGhlIGF2YWlsYWJsZSBxdWV1ZSBlbGVtZW50IGNvdW50IGZvciB3cml0ZXMgd2l0aG91dCByZXNwb25zZXMgIl07DQorICogQVBQIG5vdGUgUEVFUiBbbGFiZWwgPSAiIFRoaXMgdmFyaWFudCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgQVBQIHRvIGtub3cgd2hlbiBzdWNjZXNzZnVsIHF1ZXVpbmcgb2Ygd3JpdGVzIHdpdGhvdXQgcmVzcG9uc2VzIGlzIGd1YXJhbnRlZWQuICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfY2ZnX3NldChCTEVfQ09OTl9DRkdfR0FUVEMsIGdhdHRjX2Nvbm5fY2ZnLndyaXRlX2NtZF90eF9xdWV1ZV9zaXplID0gMikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9lbmFibGUoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQgPSAyIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9XUklURV9DTUQsIGhhbmRsZSwgdmFsdWVfMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50LS0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfd3JpdGUoQkxFX0dBVFRfT1BfV1JJVEVfQ01ELCBoYW5kbGUsIHZhbHVlXzIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudC0tIl07DQorICogQVBQIG5vdGUgQVBQIFtsYWJlbCA9ICJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudCA9PSAwIl07DQorICogfHx8Ow0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgV3JpdGUgQ29tbWFuZCB7dmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9XUklURV9DTURfVFhfQ09NUExFVEUge1NVQ0NFU1MsIDF9Il07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQgKz0gMSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9XUklURV9DTUQsIGhhbmRsZSwgdmFsdWVfMykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50LS0iXTsNCisgKiBBUFAgbm90ZSBBUFAgW2xhYmVsID0gImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50ID09IDAiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBXcml0ZSBDb21tYW5kIHt2YWx1ZV8yfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1dSSVRFX0NNRF9UWF9DT01QTEVURSB7U1VDQ0VTUywgMX0iXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudCArPSAxIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX1dSSVRFX0NNRCwgaGFuZGxlLCB2YWx1ZV80KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQtLSJdOw0KKyAqIEFQUCBub3RlIEFQUCBbbGFiZWwgPSAiYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQgPT0gMCJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFdyaXRlIENvbW1hbmQge3ZhbHVlXzN9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBXcml0ZSBDb21tYW5kIHt2YWx1ZV80fSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1dSSVRFX0NNRF9UWF9DT01QTEVURSB7U1VDQ0VTUywgMn0iXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudCArPSAyIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19WQUxVRV9XUklURV9NU0MgR0FUVEMgQ2hhcmFjdGVyaXN0aWMgb3IgRGVzY3JpcHRvciBWYWx1ZSBXcml0ZQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9XUklURV9SRVEsIGhhbmRsZSwgdmFsdWUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFdyaXRlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfV1JJVEVfUlNQIHtCTEVfR0FUVF9PUF9XUklURV9SRVEsIFNVQ0NFU1N9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19WQUxVRV9MT05HX1dSSVRFX01TQyBHQVRUQyBDaGFyYWN0ZXJpc3RpYyBvciBEZXNjcmlwdG9yIFZhbHVlIExvbmcgV3JpdGUNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfd3JpdGUoQkxFX0dBVFRfT1BfUFJFUF9XUklURV9SRVEsIGhhbmRsZSwgb2Zmc2V0XzEsIHZhbHVlXzEpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCB7aGFuZGxlLCBvZmZzZXRfMSwgdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZSwgb2Zmc2V0XzEsIHZhbHVlXzF9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfV1JJVEVfUlNQIHtCTEVfR0FUVF9PUF9QUkVQX1dSSVRFX1JFUSwgU1VDQ0VTUywgdmFsdWVfMX0iXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX1BSRVBfV1JJVEVfUkVRLCBoYW5kbGUsIG9mZnNldF8yLCB2YWx1ZV8yKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZSwgb2Zmc2V0XzIsIHZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlc3BvbnNlIHtoYW5kbGUsIG9mZnNldF8yLCB2YWx1ZV8yfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1dSSVRFX1JTUCB7QkxFX0dBVFRfT1BfUFJFUF9XUklURV9SRVEsIFNVQ0NFU1MsIHZhbHVlXzJ9Il07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBcHAgZXhlY3V0ZXMgdGhlIExvbmcgV3JpdGUgcHJvY2VkdXJlICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfd3JpdGUoQkxFX0dBVFRfT1BfRVhFQ19XUklURV9SRVEsIFBSRVBBUkVEX1dSSVRFKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Q6IGZsYWdzID0gMHgwMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1dSSVRFX1JTUCB7QkxFX0dBVFRfT1BfRVhFQ19XUklURV9SRVEsIFNVQ0NFU1N9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQXBwIGNhbmNlbHMgdGhlIExvbmcgV3JpdGUgcHJvY2VkdXJlICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfd3JpdGUoQkxFX0dBVFRfT1BfRVhFQ19XUklURV9SRVEsIFBSRVBBUkVEX0NBTkNFTCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0OiBmbGFncyA9IDB4MDAiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9XUklURV9SU1Age0JMRV9HQVRUX09QX0VYRUNfV1JJVEVfUkVRLCBTVUNDRVNTfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVENfVkFMVUVfUkVMSUFCTEVfV1JJVEVfTVNDIEdBVFRDIENoYXJhY3RlcmlzdGljIG9yIERlc2NyaXB0b3IgVmFsdWUgUmVsaWFibGUgV3JpdGUNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfd3JpdGUoQkxFX0dBVFRfT1BfUFJFUF9XUklURV9SRVEsIGhhbmRsZV8xLCBvZmZzZXQsIHZhbHVlXzEpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCB7aGFuZGxlXzEsIG9mZnNldCwgdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZV8xLCBvZmZzZXQsIHZhbHVlXzF9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfV1JJVEVfUlNQIHtCTEVfR0FUVF9PUF9QUkVQX1dSSVRFX1JFUSwgU1VDQ0VTUywgdmFsdWVfMX0iXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX1BSRVBfV1JJVEVfUkVRLCBoYW5kbGVfMiwgb2Zmc2V0LCB2YWx1ZV8yKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8yLCBvZmZzZXQsIHZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlc3BvbnNlIHtoYW5kbGVfMiwgb2Zmc2V0LCB2YWx1ZV8yfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1dSSVRFX1JTUCB7QkxFX0dBVFRfT1BfUFJFUF9XUklURV9SRVEsIFNVQ0NFU1MsIHZhbHVlXzJ9Il07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBcHAgZXhlY3V0ZXMgdGhlIFJlbGlhYmxlIFdyaXRlIHByb2NlZHVyZSAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX0VYRUNfV1JJVEVfUkVRLCBQUkVQQVJFRF9XUklURSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0OiBmbGFncyA9IDB4MDEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9XUklURV9SU1Age0JMRV9HQVRUX09QX0VYRUNfV1JJVEVfUkVRLCBTVUNDRVNTfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEFwcCBjYW5jZWxzIHRoZSBSZWxpYWJsZSBXcml0ZSBwcm9jZWR1cmUgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9FWEVDX1dSSVRFX1JFUSwgUFJFUEFSRURfQ0FOQ0VMKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Q6IGZsYWdzID0gMHgwMCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1dSSVRFX1JTUCB7QkxFX0dBVFRfT1BfRVhFQ19XUklURV9SRVEsIFNVQ0NFU1N9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19IVklfTVNDIEdBVFRDIEhhbmRsZSBWYWx1ZSBJbmRpY2F0aW9uDQorICogPGI+IEdBVFRDIEhhbmRsZSBWYWx1ZSBJbmRpY2F0aW9uIE1TQyA8L2I+DQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBIYW5kbGUgVmFsdWUgSW5kaWNhdGlvbiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX0hWWCB7SU5ESUNBVElPTiwgZGF0YX0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfaHZfY29uZmlybShoYW5kbGUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEhhbmRsZSBWYWx1ZSBDb25maXJtYXRpb24iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX0hWTl9NU0MgR0FUVEMgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX0hWWCB7Tk9USUZJQ0FUSU9OLCBkYXRhfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVENfVElNRU9VVF9NU0MgR0FUVEMgVGltZW91dA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJBbnkgR0FUVEMgQVBJIHVzZWQiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUCBub3RlIFBFRVIgW2xhYmVsID0gIk5vIFJlc3BvbnNlIGZyb20gUGVlciJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIFNEIGJveCBTRCBbbGFiZWw9IlRpbWVvdXQiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9USU1FT1VUIHtzb3VyY2V9Il07DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9Ik5vIGFkZGl0aW9uYWwgQVRUIFRyYWZmaWMgQWxsb3dlZCIsIHRleHRiZ2NvbG91cj0iI2ZmN2Y3ZiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gIkFueSBBUEkgY2FsbCJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9CVVNZIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19NVFVfRVhDSEFOR0UgR0FUVEMgQVRUX01UVSBFeGNoYW5nZQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KEJMRV9DT05OX0NGR19HQVRULCBnYXR0X2Nvbm5fY2ZnLmF0dF9tdHU9MTAwKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2VuYWJsZSgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJhdHRfbXR1PTIzIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19leGNoYW5nZV9tdHVfcmVxdWVzdChjb25uX2hhbmRsZSwgY2xpZW50X3J4X210dT04MCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhjaGFuZ2UgTVRVIFJlcXVlc3Qge2NsaWVudF9yeF9tdHU9ODB9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGNoYW5nZSBNVFUgUmVzcG9uc2Uge3NlcnZlcl9yeF9tdHU9NzV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9ImF0dF9tdHU9NzUiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9FWENIQU5HRV9NVFVfUlNQIHtTVUNDRVNTLCBzZXJ2ZXJfcnhfbXR1PTc1fSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEB9DQorICogQH0NCisgKi8NCisNCisvKioNCisgKiBAYWRkdG9ncm91cCBCTEVfR0FUVFMNCisgKiBAew0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfTVNDIE1lc3NhZ2UgU2VxdWVuY2UgQ2hhcnRzDQorICogQHsNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX0FUVF9UQUJMRV9QT1BfTVNDIEdBVFRTIEFUVCBUYWJsZSBQb3B1bGF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRDsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3NlcnZpY2VfYWRkKHV1aWQjMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJ7TlJGX1NVQ0NFU1MsIGhhbmRsZV9zcnZjIzF9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2NoYXJhY3RlcmlzdGljX2FkZChoYW5kbGVfc3J2YyMxLCBjaGFyX21kLCB2YWx1ZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJ7TlJGX1NVQ0NFU1MsIGhhbmRsZV9jaGFyIzEsIC4uLn0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfZGVzY3JpcHRvcl9hZGQoaGFuZGxlX2NoYXIjMSwgdmFsdWUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAie05SRl9TVUNDRVNTLCBoYW5kbGVfZGVzYyMxfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19kZXNjcmlwdG9yX2FkZChoYW5kbGVfY2hhciMxLCB2YWx1ZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJ7TlJGX1NVQ0NFU1MsIGhhbmRsZV9kZXNjIzJ9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2NoYXJhY3RlcmlzdGljX2FkZChoYW5kbGVfc3J2YyMxLCBjaGFyX21kLCB2YWx1ZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJ7TlJGX1NVQ0NFU1MsIGhhbmRsZV9jaGFyIzIsIC4uLn0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfZGVzY3JpcHRvcl9hZGQoaGFuZGxlX2NoYXIjMiwgdmFsdWUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAie05SRl9TVUNDRVNTLCBoYW5kbGVfZGVzYyMzfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19zZXJ2aWNlX2FkZCh1dWlkIzIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAie05SRl9TVUNDRVNTLCBoYW5kbGVfc3J2YyMyfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19pbmNsdWRlX2FkZChoYW5kbGVfc3J2YyMyLCBoYW5kbGVfc3J2YyMxKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIntOUkZfU1VDQ0VTUywgaGFuZGxlX2luYyMxfSJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfUkVBRF9SRVFfTk9fQVVUSF9NU0MgR0FUVFMgUmVhZCBSZXF1ZXN0IHdpdGhvdXQgQXV0aG9yaXphdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX1dSSVRFX1JFUV9OT19BVVRIX01TQyBHQVRUUyBXcml0ZSBSZXF1ZXN0IHdpdGhvdXQgQXV0aG9yaXphdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGN1cnJlbnRfdmFsdWUiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFdyaXRlIFJlcXVlc3Qge3BlZXJfdmFsdWV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IHBlZXJfdmFsdWUiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9XUklURSB7V1JJVEVfUkVRLCBhdXRoX3JlcXVpcmVkPTAsIHBlZXJfdmFsdWV9Il07DQorICogQGVuZG1zYw0KKyAqDQorIEBkZWZncm91cCBCTEVfR0FUVFNfV1JJVEVfQ01EX05PX0FVVEhfTVNDIEdBVFRTIFdyaXRlIENvbW1hbmQgV2l0aG91dCBBdXRob3JpemF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogY3VycmVudF92YWx1ZSJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgV3JpdGUgQ29tbWFuZCB7cGVlcl92YWx1ZX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBwZWVyX3ZhbHVlIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfV1JJVEUge1dSSVRFX0NNRCwgYXV0aF9yZXF1aXJlZD0wLCBwZWVyX3ZhbHVlfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfV1JJVEVfQ01EX0FVVEhfTVNDIEdBVFRTIFdyaXRlIENvbW1hbmQgV2l0aCBBdXRob3JpemF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogY3VycmVudF92YWx1ZSJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgV3JpdGUgQ29tbWFuZCB7cGVlcl92YWx1ZX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfV1JJVEUge1dSSVRFX0NNRCwgYXV0aF9yZXF1aXJlZD0xLCBwZWVyX3ZhbHVlfSJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQXBwIEF1dGhvcml6ZXMgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3ZhbHVlX3NldChwZWVyX3ZhbHVlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogcGVlcl92YWx1ZSJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQXBwIEF1dGhvcml6ZXMgYnV0IGNoYW5nZXMgdmFsdWUgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3ZhbHVlX3NldChhcHBfdmFsdWUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBhcHBfdmFsdWUiXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIEFwcCBpZ25vcmVzIHRoZSBpbmNvbWluZyBvcGVyYXRpb24gIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogY3VycmVudF92YWx1ZSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfUkVBRF9SRVFfQVVUSF9NU0MgR0FUVFMgUmVhZCBSZXF1ZXN0IHdpdGggQXV0aG9yaXphdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGN1cnJlbnRfdmFsdWUiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtSRUFELCBjdXJyZW50X3ZhbHVlfSJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQXBwIEF1dGhvcml6ZXMgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShTVUNDRVNTLCBhcHBfdmFsdWUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBhcHBfdmFsdWUiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgUmVzcG9uc2Uge2FwcF92YWx1ZX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEFwcCBEaXNhbGxvd3MgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShSRUFEX05PVF9QRVJNSVRURUQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19XUklURV9SRVFfQVVUSF9NU0MgR0FUVFMgV3JpdGUgUmVxdWVzdCB3aXRoIEF1dGhvcml6YXRpb24NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBXcml0ZSBSZXF1ZXN0IHtwZWVyX3ZhbHVlfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgcGVlcl92YWx1ZX0iXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEFwcCBBdXRob3JpemVzICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoU1VDQ0VTUywgcGVlcl92YWx1ZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IHBlZXJfdmFsdWUiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBBcHAgQXV0aG9yaXplcyBidXQgY2hhbmdlcyB2YWx1ZSAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFNVQ0NFU1MsIGFwcF92YWx1ZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGFwcF92YWx1ZSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIEFwcCBEaXNhbGxvd3MgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURV9OT1RfUEVSTUlUVEVEKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogY3VycmVudF92YWx1ZSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXJyb3IgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9CVUZfTk9BVVRIX01TQyBHQVRUUyBRdWV1ZWQgV3JpdGVzOiBTdGFjayBoYW5kbGVkLCBubyBhdHRyaWJ1dGVzIHJlcXVpcmUgYXV0aG9yaXphdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IGN1cnJlbnRfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXF1ZXN0IHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0VWVF9VU0VSX01FTV9SRVFVRVNUIHtCTEVfVVNFUl9NRU1fVFlQRV9HQVRUU19RVUVVRURfV1JJVEVTfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV91c2VyX21lbV9yZXBseSB7dXNlcl9tZW1fYmxvY2t9Il07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlc3BvbnNlIHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlc3BvbnNlIHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBdHRyaWJ1dGUgVmFsdWVzIHZhbGlkYXRpb24gcGFzc2VkICJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0IHtXUklURX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBwZWVyX3ZhbHVlXzFcbmhhbmRsZV8yOiBwZWVyX3ZhbHVlXzIiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9XUklURSB7RVhFQ19XUklURV9SRVFfTk9XfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBwYXJzZXMgdGhlIG1lbW9yeSBpdCBwcm92aWRlZCJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFTEVBU0Uge3VzZXJfbWVtX2Jsb2NrfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEF0dHJpYnV0ZSBWYWx1ZXMgdmFsaWRhdGlvbiBmYWlsZWQgIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Qge1dSSVRFfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IGN1cnJlbnRfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXJyb3IgUmVzcG9uc2Uge0ludmFsaWQgVmFsdWUgTGVuZ3RoIC8gT2Zmc2V0fSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFTEVBU0Uge3VzZXJfbWVtX2Jsb2NrfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIFBlZXIgY2FuY2VscyBvcGVyYXRpb24gIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Qge0NBTkNFTH0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBjdXJyZW50X3ZhbHVlXzFcbmhhbmRsZV8yOiBjdXJyZW50X3ZhbHVlXzIiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0VWVF9VU0VSX01FTV9SRUxFQVNFIHt1c2VyX21lbV9ibG9ja30iXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfQlVGX0FVVEhfTVNDIEdBVFRTIFF1ZXVlZCBXcml0ZXM6IFN0YWNrIGhhbmRsZWQsIG9uZSBvciBtb3JlIGF0dHJpYnV0ZXMgcmVxdWlyZSBhdXRob3JpemF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFUVVFU1Qge0JMRV9VU0VSX01FTV9UWVBFX0dBVFRTX1FVRVVFRF9XUklURVN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX3VzZXJfbWVtX3JlcGx5IHt1c2VyX21lbV9ibG9ja30iXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXF1ZXN0IHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCB7V1JJVEUsIFBSRVBfV1JJVEVfUkVRLCBoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBcHAgQXV0aG9yaXplcyBib3RoIFByZXBhcmUgV3JpdGUgYW5kIEV4ZWN1dGUgV3JpdGUiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Qge1dSSVRFfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgRVhFQ19XUklURV9SRVFfTk9XfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBwYXJzZXMgdGhlIG1lbW9yeSBpdCBwcm92aWRlZCJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MpIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogcGVlcl92YWx1ZV8xXG5oYW5kbGVfMjogcGVlcl92YWx1ZV8yIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9FVlRfVVNFUl9NRU1fUkVMRUFTRSB7dXNlcl9tZW1fYmxvY2t9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQXBwIERpc2FsbG93cyBQcmVwYXJlIFdyaXRlIGFuZCBBdXRob3JpemVzIEV4ZWN1dGUgV3JpdGUgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgSU5TVUZfQVVUSE9SSVpBVElPTikiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlIHtJbnN1ZmZpY2llbnQgQXV0aG9yaXphdGlvbn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdCB7V1JJVEV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBFWEVDX1dSSVRFX1JFUV9OT1d9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwIHBhcnNlcyB0aGUgbWVtb3J5IGl0IHByb3ZpZGVkIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgU1VDQ0VTUykiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBwZWVyX3ZhbHVlXzFcbmhhbmRsZV8yOiBjdXJyZW50X3ZhbHVlXzIiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0VWVF9VU0VSX01FTV9SRUxFQVNFIHt1c2VyX21lbV9ibG9ja30iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMyBBcHAgQXV0aG9yaXplcyBQcmVwYXJlIFdyaXRlIGFuZCBEaXNhbGxvd3MgRXhlY3V0ZSBXcml0ZSAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Qge1dSSVRFfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgRVhFQ19XUklURV9SRVFfTk9XfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBwYXJzZXMgdGhlIG1lbW9yeSBpdCBwcm92aWRlZCJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIEFQUF9FUlJPUl9DT0RFKSJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IGN1cnJlbnRfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXJyb3IgUmVzcG9uc2Uge0FQUF9FUlJPUl9DT0RFfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFTEVBU0Uge3VzZXJfbWVtX2Jsb2NrfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX05PQlVGX05PQVVUSF9NU0MgR0FUVFMgUXVldWVkIFdyaXRlczogQXBwIGhhbmRsZWQsIG5vIGF0dHJpYnV0ZXMgcmVxdWlyZSBhdXRob3JpemF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IGN1cnJlbnRfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXF1ZXN0IHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0VWVF9VU0VSX01FTV9SRVFVRVNUIHtCTEVfVVNFUl9NRU1fVFlQRV9HQVRUU19RVUVVRURfV1JJVEVTfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV91c2VyX21lbV9yZXBseSB7TlVMTH0iXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCB7V1JJVEUsIFBSRVBfV1JJVEVfUkVRLCBoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJBcHAgcXVldWVzIHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTLCBoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMSkiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXF1ZXN0IHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCB7V1JJVEUsIFBSRVBfV1JJVEVfUkVRLCBoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJBcHAgcXVldWVzIHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTLCBoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMikiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0IHtXUklURX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCB7V1JJVEUsIEVYRUNfV1JJVEVfUkVRX05PV30iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBdHRyaWJ1dGUgdmFsdWVzIGluIHN0YWNrIG1lbW9yeSAoVkxPQ19TVEFDSyksIGF0dHJpYnV0ZSB2YWx1ZXMgdmFsaWRhdGlvbiBwYXNzZWQgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3ZhbHVlX3NldCB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfdmFsdWVfc2V0IHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IHBlZXJfdmFsdWVfMVxuaGFuZGxlXzI6IHBlZXJfdmFsdWVfMiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MpIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQXR0cmlidXRlIHZhbHVlcyBpbiB1c2VyIG1lbW9yeSAoVkxPQ19VU0VSKSwgYXR0cmlidXRlIHZhbHVlcyB2YWxpZGF0aW9uIHBhc3NlZCAiXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJBcHBsaWNhdGlvbiB0cmF2ZXJzZXMgaXRzIHF1ZXVlIGFuZCBleGVjdXRlcyB0aGUgd3JpdGUgb3BlcmF0aW9ucyAobWVtY3B5KSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogcGVlcl92YWx1ZV8xXG5oYW5kbGVfMjogcGVlcl92YWx1ZV8yIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgU1VDQ0VTUykiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMyBBdHRyaWJ1dGUgdmFsdWVzIHZhbGlkYXRpb24gZmFpbGVkICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIElOVkFMSURfT0ZGU0VUKSJdOw0KKyAqIEFQUCByYm94IFNEIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBjdXJyZW50X3ZhbHVlXzFcbmhhbmRsZV8yOiBjdXJyZW50X3ZhbHVlXzIiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlIHtJbnZhbGlkIE9mZnNldH0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBAZW5kbXNjDQorICoNCisgQGRlZmdyb3VwIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfTk9CVUZfUEVFUl9DQU5DRUxfTVNDIEdBVFRTIFF1ZXVlZCBXcml0ZXM6IEFwcCBoYW5kbGVkLCBwZWVyIGNhbmNlbHMgb3BlcmF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IGN1cnJlbnRfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXF1ZXN0IHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0VWVF9VU0VSX01FTV9SRVFVRVNUIHtCTEVfVVNFUl9NRU1fVFlQRV9HQVRUU19RVUVVRURfV1JJVEVTfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV91c2VyX21lbV9yZXBseSB7TlVMTH0iXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCB7V1JJVEUsIFBSRVBfV1JJVEVfUkVRLCBoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJBcHAgcXVldWVzIHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTLCBoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMSkiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXF1ZXN0IHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCB7V1JJVEUsIFBSRVBfV1JJVEVfUkVRLCBoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJBcHAgcXVldWVzIHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTLCBoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMikiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0IHtDQU5DRUx9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBFWEVDX1dSSVRFX1JFUV9DQU5DRUx9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iUXVldWUgRXJhc2VkXG5WYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IGN1cnJlbnRfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MpIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX05PQlVGX0FVVEhfTVNDIEdBVFRTIFF1ZXVlZCBXcml0ZXM6IEFwcCBoYW5kbGVkLCBvbmUgb3IgbW9yZSBhdHRyaWJ1dGVzIHJlcXVpcmUgYXV0aG9yaXphdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGUgaW4gdXNlciBtZW1vcnkgKFZMT0NfVVNFUik6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFUVVFU1Qge0JMRV9VU0VSX01FTV9UWVBFX0dBVFRTX1FVRVVFRF9XUklURVN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX3VzZXJfbWVtX3JlcGx5IHtOVUxMfSJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgUFJFUF9XUklURV9SRVEsIGhhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBxdWV1ZXMge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MsIGhhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgUFJFUF9XUklURV9SRVEsIGhhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEFwcCBBdXRob3JpemVzIGJvdGggUHJlcGFyZSBXcml0ZSBhbmQgRXhlY3V0ZSBXcml0ZSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBxdWV1ZXMge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MsIGhhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Qge1dSSVRFfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgRVhFQ19XUklURV9SRVFfTk9XfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcGxpY2F0aW9uIHRyYXZlcnNlcyBpdHMgcXVldWUgYW5kIGV4ZWN1dGVzIHRoZSB3cml0ZSBvcGVyYXRpb25zIChtZW1jcHkpIl07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBwZWVyX3ZhbHVlXzFcbmhhbmRsZV8yOiBwZWVyX3ZhbHVlXzIiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEFwcCBEaXNhbGxvd3MgUHJlcGFyZSBXcml0ZSBhbmQgQXV0aG9yaXplcyBFeGVjdXRlIFdyaXRlICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIElOU1VGX0FVVEhPUklaQVRJT04pIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZSB7SW5zdWZmaWNpZW50IEF1dGhvcml6YXRpb259IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Qge1dSSVRFfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgRVhFQ19XUklURV9SRVFfTk9XfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcGxpY2F0aW9uIHRyYXZlcnNlcyBpdHMgcXVldWUgYW5kIGV4ZWN1dGVzIHRoZSB3cml0ZSBvcGVyYXRpb25zIChtZW1jcHkpIl07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBwZWVyX3ZhbHVlXzFcbmhhbmRsZV8yOiBjdXJyZW50X3ZhbHVlXzIiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIEFwcCBBdXRob3JpemVzIFByZXBhcmUgV3JpdGUgYW5kIERpc2FsbG93cyBFeGVjdXRlIFdyaXRlICJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBxdWV1ZXMge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MsIGhhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Qge1dSSVRFfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgRVhFQ19XUklURV9SRVFfTk9XfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIEFQUF9FUlJPUl9DT0RFKSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZSB7QVBQX0VSUk9SX0NPREV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfUVVFVUVfRlVMTF9NU0MgR0FUVFMgUXVldWVkIFdyaXRlczogUHJlcGFyZSBRdWV1ZSBGdWxsDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFUVVFU1Qge0JMRV9VU0VSX01FTV9UWVBFX0dBVFRTX1FVRVVFRF9XUklURVN9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgU3RhY2sgaGFuZGxlZCAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfdXNlcl9tZW1fcmVwbHkge3VzZXJfbWVtX2Jsb2NrfSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXJyb3IgUmVzcG9uc2Uge1ByZXBhcmUgUXVldWUgRnVsbH0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdCB7V1JJVEV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogcGVlcl92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfV1JJVEUge0VYRUNfV1JJVEVfUkVRX05PV30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJBcHAgcGFyc2VzIHRoZSBtZW1vcnkgaXQgcHJvdmlkZWQiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0VWVF9VU0VSX01FTV9SRUxFQVNFIHt1c2VyX21lbV9ibG9ja30iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBBcHAgaGFuZGxlZCAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfdXNlcl9tZW1fcmVwbHkge05VTEx9Il07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBQUkVQX1dSSVRFX1JFUSwgaGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwIHF1ZXVlcyB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgU1VDQ0VTUywgaGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzEpIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlc3BvbnNlIHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBQUkVQX1dSSVRFX1JFUSwgaGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgUFJFUEFSRV9RVUVVRV9GVUxMKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXJyb3IgUmVzcG9uc2Uge1ByZXBhcmUgUXVldWUgRnVsbH0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdCB7V1JJVEV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBFWEVDX1dSSVRFX1JFUV9OT1d9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3ZhbHVlX3NldCB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTKSJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IHBlZXJfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX0VYRUNVVEVfV0lUSE9VVF9QUkVQQVJFX01TQyBHQVRUUyBRdWV1ZWQgV3JpdGVzOiBFeGVjdXRlIFdyaXRlIHdpdGhvdXQgUHJlcGFyZSBXcml0ZQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IGN1cnJlbnRfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iTm8gQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCBoYXMgYmVlbiByZWNlaXZlZCBieSBTRCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIFdyaXRlIGNhbmNlbGxlZCAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdCB7Q0FOQ0VMfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IGN1cnJlbnRfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1dSSVRFIHtFWEVDX1dSSVRFX1JFUV9DQU5DRUx9Il07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgV3JpdGUgbm93ICJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0IHtXUklURX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBjdXJyZW50X3ZhbHVlXzFcbmhhbmRsZV8yOiBjdXJyZW50X3ZhbHVlXzIiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9XUklURSB7RVhFQ19XUklURV9SRVFfTk9XfSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfTVRVX0VYQ0hBTkdFIEdBVFRTIEFUVF9NVFUgRXhjaGFuZ2UNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfY2ZnX3NldChCTEVfQ09OTl9DRkdfR0FUVCwgZ2F0dF9jb25uX2NmZy5hdHRfbXR1PTEwMCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9lbmFibGUoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iYXR0X210dT0yMyJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4Y2hhbmdlIE1UVSBSZXF1ZXN0IHtjbGllbnRfcnhfbXR1PTgwfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX0VYQ0hBTkdFX01UVV9SRVFVRVNUIHthdHRfbXR1PTgwfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19leGNoYW5nZV9tdHVfcmVwbHkoY29ubl9oYW5kbGUsIHNlcnZlcl9yeF9tdHU9NzUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEV4Y2hhbmdlIE1UVSBSZXNwb25zZSB7c2VydmVyX3J4X210dT03NX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iYXR0X210dT03NSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfSFZJX01TQyBHQVRUUyBIYW5kbGUgVmFsdWUgSW5kaWNhdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkluZGljYXRpb25zIEVuYWJsZWQgaW4gQ0NDRCJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2h2eChJTkRJQ0FUSU9OLCBhcHBfdmFsdWUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBhcHBfdmFsdWUiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEhhbmRsZSBWYWx1ZSBJbmRpY2F0aW9uIHthcHBfdmFsdWV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBQZWVyIENvbmZpcm1zICJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgSGFuZGxlIFZhbHVlIENvbmZpcm1hdGlvbiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX0hWQyJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgUGVlciBJZ25vcmVzICJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIFNEIGJveCBTRCBbbGFiZWw9IlRpbWVvdXQiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9USU1FT1VUIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19IVk5fTVNDIEdBVFRTIEhhbmRsZSBWYWx1ZSBOb3RpZmljYXRpb24NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQXBwIGRvZXMgbm90IGtlZXAgdHJhY2sgb2YgdGhlIGF2YWlsYWJsZSBxdWV1ZSBlbGVtZW50IGNvdW50IGZvciBub3RpZmljYXRpb25zICJdOw0KKyAqIEFQUCBub3RlIFBFRVIgW2xhYmVsID0gIiBUaGlzIHZhcmlhbnQgbWFrZXMgaXQgcG9zc2libGUgZm9yIEFQUCB0byB0cmFuc21pdCBub3RpZmljYXRpb25zIHdpdGhvdXQga2VlcGluZyB0cmFjayBvZiB0aGUgYXZhaWxhYmxlIHF1ZXVlIGVsZW1lbnQgY291bnQuIEhvd2V2ZXIsIHN1Y2Nlc3NmdWwgcXVldWluZyBvZiBub3RpZmljYXRpb25zIGNhbm5vdCBiZSBndWFyYW50ZWVkLiAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2VuYWJsZSgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWwgPSAiQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbCA9ICJOb3RpZmljYXRpb25zIEVuYWJsZWQgaW4gQ0NDRCJdOw0KKyAqIFNEIG5vdGUgU0QgW2xhYmVsID0gIlZhbHVlIGluIEFUVCBUYWJsZTogY3VycmVudF92YWx1ZSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfaHZ4KE5PVElGSUNBVElPTiwgYXBwX3ZhbHVlXzEpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCBub3RlIFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBhcHBfdmFsdWVfMSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19odngoTk9USUZJQ0FUSU9OLCBhcHBfdmFsdWVfMikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEIG5vdGUgU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGFwcF92YWx1ZV8yIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2h2eChOT1RJRklDQVRJT04sIGFwcF92YWx1ZV8zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9SRVNPVVJDRVMiXTsNCisgKiBTRCBub3RlIFNEIFtsYWJlbCA9ICJWYWx1ZSBpbiBBVFQgVGFibGU6IGFwcF92YWx1ZV8zIl07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2h2eChOT1RJRklDQVRJT04sIGFwcF92YWx1ZV80KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0QgcmJveCBTRCBbbGFiZWwgPSAiVmFsdWUgaW4gQVRUIFRhYmxlOiBhcHBfdmFsdWVfNCJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEhhbmRsZSBWYWx1ZSBOb3RpZmljYXRpb24ge2FwcF92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbiB7YXBwX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9uIHthcHBfdmFsdWVfNH0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9IVk5fVFhfQ09NUExFVEUgezN9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQXBwIGtlZXBzIHRyYWNrIG9mIHRoZSBhdmFpbGFibGUgcXVldWUgZWxlbWVudCBjb3VudCBmb3Igbm90aWZpY2F0aW9ucyAiXTsNCisgKiBBUFAgbm90ZSBQRUVSIFtsYWJlbCA9ICIgVGhpcyB2YXJpYW50IG1ha2VzIGl0IHBvc3NpYmxlIGZvciBBUFAgdG8ga25vdyB3aGVuIHN1Y2Nlc3NmdWwgcXVldWluZyBvZiBub3RpZmljYXRpb25zIGlzIGd1YXJhbnRlZWQuICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfY2ZnX3NldChCTEVfQ09OTl9DRkdfR0FUVFMsIGdhdHRzX2Nvbm5fY2ZnLmh2bl90eF9xdWV1ZV9zaXplPTIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZW5hYmxlKCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbCA9ICJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQgPSAyIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsID0gIk5vdGlmaWNhdGlvbnMgRW5hYmxlZCBpbiBDQ0NEIl07DQorICogU0Qgbm90ZSBTRCBbbGFiZWwgPSAiVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19odngoTk9USUZJQ0FUSU9OLCBhcHBfdmFsdWVfMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50LS0iXTsNCisgKiBBUFAgbm90ZSBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudCA9PSAxIl0sIFNEIG5vdGUgU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGFwcF92YWx1ZV8xIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2h2eChOT1RJRklDQVRJT04sIGFwcF92YWx1ZV8yKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQtLSJdOw0KKyAqIEFQUCBub3RlIEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50ID09IDAiXSwgU0Qgbm90ZSBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogYXBwX3ZhbHVlXzIiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9uIHthcHBfdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9IVk5fVFhfQ09NUExFVEUgezF9Il07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQgKz0gMSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19odngoTk9USUZJQ0FUSU9OLCBhcHBfdmFsdWVfMykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50LS0iXTsNCisgKiBBUFAgbm90ZSBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudCA9PSAwIl0sIFNEIG5vdGUgU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGFwcF92YWx1ZV8zIl07DQorICogfHx8Ow0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbiB7YXBwX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfSFZOX1RYX0NPTVBMRVRFIHsxfSJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50ICs9IDEiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfaHZ4KE5PVElGSUNBVElPTiwgYXBwX3ZhbHVlXzQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudC0tIl07DQorICogQVBQIG5vdGUgQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQgPT0gMCJdLCBTRCBub3RlIFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBhcHBfdmFsdWVfNCJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEhhbmRsZSBWYWx1ZSBOb3RpZmljYXRpb24ge2FwcF92YWx1ZV8zfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbiB7YXBwX3ZhbHVlXzR9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfSFZOX1RYX0NPTVBMRVRFIHsyfSJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50ICs9IDIiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX0hWWF9ESVNBQkxFRF9NU0MgR0FUVFMgSGFuZGxlIFZhbHVlIEluZGljYXRpb24gb3IgTm90aWZpY2F0aW9uIGRpc2FibGVkDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iSW5kaWNhdGlvbnMgYW5kIE5vdGlmaWNhdGlvbnMgRGlzYWJsZWQgaW4gQ0NDRCJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2h2eChJTkRJQ0FUSU9OIG9yIE5PVElGSUNBVElPTiwgYXBwX3ZhbHVlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogY3VycmVudF92YWx1ZSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfSFZYX1NZU19BVFRSU19NSVNTSU5HX01TQyBHQVRUUyBIYW5kbGUgVmFsdWUgSW5kaWNhdGlvbiBvciBOb3RpZmljYXRpb24gd2l0aCBTeXN0ZW0gQXR0cmlidXRlcyBNaXNzaW5nDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iU3lzdGVtIEF0dHJpYnV0ZXMgVW5pbml0aWFsaXplZCJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2h2eChJTkRJQ0FUSU9OIG9yIE5PVElGSUNBVElPTiwgYXBwX3ZhbHVlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIkJMRV9FUlJPUl9HQVRUU19TWVNfQVRUUl9NSVNTSU5HIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogY3VycmVudF92YWx1ZSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19zeXNfYXR0cl9zZXQoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX1NDX01TQyBHQVRUUyBTZXJ2aWNlIENoYW5nZWQNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFNEIFtsYWJlbD0iRW50cmllcyBhZGRlZCB0byB0aGUgQVRUIFRhYmxlIGJldHdlZW4gaGFuZGxlcyBOIGFuZCBNIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIHdpdGggYSBCb25kZWQgUGVlciJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfc2VydmljZV9jaGFuZ2VkKE4sIE0pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEhhbmRsZSBWYWx1ZSBJbmRpY2F0aW9uIHtOLCBNfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgSGFuZGxlIFZhbHVlIENvbmZpcm1hdGlvbiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1NDX0NPTkZJUk0iXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBQRUVSIFtsYWJlbD0iU2VydmljZSBEaXNjb3ZlcnkiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX1NZU19BVFRSU19VTktfUEVFUl9NU0MgR0FUVFMgU3lzdGVtIEF0dHJpYnV0ZXMgSGFuZGxpbmc6IFVua25vd24gUGVlcg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQgd2l0aCBhbiBVbmtub3duIFBlZXIiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIFJlcXVlc3Qge3N5c19hdHRyX2hhbmRsZX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9TWVNfQVRUUl9NSVNTSU5HIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3N5c19hdHRyX3NldChOVUxMKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIFJlc3BvbnNlIHtzeXNfYXR0cl92YWx1ZX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX1NZU19BVFRSU19CT05ERURfUEVFUl9NU0MgR0FUVFMgU3lzdGVtIEF0dHJpYnV0ZXMgSGFuZGxpbmc6IEJvbmRlZCBQZWVyDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCB3aXRoIGEgQm9uZGVkIFBlZXIiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkFUVCBUcmFmZmljIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIFRlcm1pbmF0ZWQiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfRElTQ09OTkVDVEVEIHtyZWFzb259Il07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19zeXNfYXR0cl9nZXQoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIntOUkZfU1VDQ0VTUywgc3lzX2F0dHJfZGF0YX0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJTdG9yZSBTeXN0ZW0gQXR0cmlidXRlcyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBTRCBbbGFiZWw9IlNodXQgZG93biBJQyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBTRCBbbGFiZWw9IlBvd2VyIHVwIElDIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIHdpdGggdGhlIEJvbmRlZCBQZWVyIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIFJlcXVlc3Qge3N5c19hdHRyX2hhbmRsZX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9TWVNfQVRUUl9NSVNTSU5HIl07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iTG9hZCBTeXN0ZW0gQXR0cmlidXRlcyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19zeXNfYXR0cl9zZXQoc3lzX2F0dHJfZGF0YSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBSZXNwb25zZSB7c3lzX2F0dHJfdmFsdWV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQGVuZG1zYw0KKyAqIEB9DQorICoNCisgKiBAYWRkdG9ncm91cCBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFU19VU0VSX01FTSBVc2VyIG1lbW9yeSBsYXlvdXQgZm9yIFF1ZXVlZCBXcml0ZXMNCisgKiBAew0KKyAqICBUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHRoZSBtZW1vcnkgbGF5b3V0IHVzZWQgYnkgdGhlIFNvZnREZXZpY2UgdG8gcXVldWUgYSBRdWV1ZWQgV3JpdGUgb3BlcmF0aW9uIChQcmVwYXJlIFdyaXRlIEFUVCBwYWNrZXQpIGluIHVzZXIgbWVtb3J5Og0KKyAqDQorICogIDx0YWJsZSBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ij4NCisgKiAgPGNhcHRpb24+UXVldWVkIFdyaXRlPC9jYXB0aW9uPg0KKyAqICA8dHI+DQorICogIDx0aCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPlBhcmFtZXRlcjwvdGg+DQorICogIDx0aCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPlNpemUgKG9jdGV0cyk8L3RoPg0KKyAqICA8dGggc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij5EZXNjcmlwdGlvbjwvdGg+DQorICogIDwvdHI+DQorICogIDx0cj4NCisgKiAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+SGFuZGxlPC90ZD4NCisgKiAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+MjwvdGQ+DQorICogIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPkF0dHJpYnV0ZSBIYW5kbGU8L3RkPg0KKyAqICA8L3RyPg0KKyAqICA8dHI+DQorICogIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPk9mZnNldDwvdGQ+DQorICogIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPjI8L3RkPg0KKyAqICA8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij5WYWx1ZSBPZmZzZXQ8L3RkPg0KKyAqICA8L3RyPg0KKyAqICA8dHI+DQorICogIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPkxlbmd0aDwvdGQ+DQorICogIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPjI8L3RkPg0KKyAqICA8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij5WYWx1ZSBMZW5ndGg8L3RkPg0KKyAqICA8L3RyPg0KKyAqICA8dHI+DQorICogIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPlZhbHVlPC90ZD4NCisgKiAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+TGVuZ3RoPC90ZD4NCisgKiAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+QXR0cmlidXRlIFZhbHVlPC90ZD4NCisgKiAgPC90cj4NCisgKiAgPC90YWJsZT4NCisgKg0KKyAqICBUaGUgYXBwbGljYXRpb24gY2FuIHBhcnNlIHRoZSBhcnJheSBvZiBRdWV1ZWQgV3JpdGUgaW5zdGFuY2VzIGF0IGFueSB0aW1lLCBidXQgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gd2hlbmV2ZXIgYW4gRXhlY3V0ZSBXcml0ZSBBVFQgcGFja2V0DQorICogIGhhcyBiZWVuIHJlY2VpdmVkIG92ZXIgdGhlIGFpci4gU2VlIHRoZSBHQVRUIFNlcnZlciBRdWV1ZWQgV3JpdGVzIE1TQ3MgZm9yIG1vcmUgZGV0YWlscy4NCisgKiAgVGhlIGFycmF5IHdpbGwgYmUgdGVybWluYXRlZCBieSBhbiBRdWV1ZWQgV3JpdGUgaW5zdGFuY2Ugd2l0aCBpdHMgaGFuZGxlIHNldCB0byBAcmVmIEJMRV9HQVRUX0hBTkRMRV9JTlZBTElELg0KKyAqIEB9DQorICovDQorDQorIC8qKg0KKyAgKiBAYWRkdG9ncm91cCBCTEVfR0FUVFNfU1lTX0FUVFJTX0ZPUk1BVCBVc2VyIG1lbW9yeSBsYXlvdXQgZm9yIFN5c3RlbSBBdHRyaWJ1dGVzDQorICAqIEB7DQorICAqICAgVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgbWVtb3J5IGxheW91dCB1c2VkIGJ5IHRoZSBTb2Z0RGV2aWNlIHRvIHN0b3JlIGENCisgICogICBzeXN0ZW0gYXR0cmlidXRlLg0KKyAgKg0KKyAgKiAgIDx0YWJsZSBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ij4NCisgICogICA8Y2FwdGlvbj5TeXN0ZW0gQXR0cmlidXRlPC9jYXB0aW9uPg0KKyAgKiAgIDx0cj4NCisgICogICAgIDx0aCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPlBhcmFtZXRlcjwvdGg+DQorICAqICAgICA8dGggc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij5TaXplIChvY3RldHMpPC90aD4NCisgICogICAgIDx0aCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPkRlc2NyaXB0aW9uPC90aD4NCisgICogICA8L3RyPg0KKyAgKiAgIDx0cj4NCisgICogICAgIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPkhhbmRsZTwvdGQ+DQorICAqICAgICA8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij4yPC90ZD4NCisgICogICAgIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPkF0dHJpYnV0ZSBoYW5kbGU8L3RkPg0KKyAgKiAgIDwvdHI+DQorICAqICAgPHRyPg0KKyAgKiAgICAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+TGVuZ3RoPC90ZD4NCisgICogICAgIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPjI8L3RkPg0KKyAgKiAgICAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+QXR0cmlidXRlIGxlbmd0aDwvdGQ+DQorICAqICAgPC90cj4NCisgICogICA8dHI+DQorICAqICAgICA8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij5EYXRhPC90ZD4NCisgICogICAgIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPkxlbmd0aDwvdGQ+DQorICAqICAgICA8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij5BdHRyaWJ1dGUgZGF0YTwvdGQ+DQorICAqICAgPC90cj4NCisgICogICA8L3RhYmxlPg0KKyAgKg0KKyAgKiAgVGhlIGFwcGxpY2F0aW9uIGNhbiBvYnRhaW4gYW4gYXJyYXkgb2Ygc3lzdGVtIGF0dHJpYnV0ZXMgYnkgdXNpbmcgQGMgc2RfYmxlX2dhdHRzX3N5c19hdHRyX2dldCgpLg0KKyAgKiAgVGhlIGFycmF5IGlzIHRlcm1pbmF0ZWQgYnkgYSBDUkMtMTYtQ0NJVFQgY2hlY2tzdW0gb2YgdGhlIGRhdGEgaW4gdGhlIGFycmF5Lg0KKyAgKiBAfQ0KKyAgKiBAfQ0KKyAgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhX2xpY2Vuc2UtYWdyZWVtZW50LnBkZiBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2RvYy9zMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGFfbGljZW5zZS1hZ3JlZW1lbnQucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMWE3MzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhX2xpY2Vuc2UtYWdyZWVtZW50LnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhX2xpY2Vuc2UtYWdyZWVtZW50LnR4dCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2RvYy9zMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGFfbGljZW5zZS1hZ3JlZW1lbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZjViMjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhX2xpY2Vuc2UtYWdyZWVtZW50LnR4dApAQCAtMCwwICsxLDk2IEBACitTMTEwL1MxMjAvUzEzMC9TMTMyL1MxNDAgbGljZW5zZSBhZ3JlZW1lbnQgDQorDQorDQorTk9SRElDIFNFTUlDT05EVUNUT1IgQVNBIFNPRlRERVZJQ0UgTElDRU5TRSBBR1JFRU1FTlQgDQorDQorTGljZW5zZSBBZ3JlZW1lbnQgZm9yIHRoZSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EgKCJOb3JkaWMiKSBTMTEwLCBTMTIwLCBTMTMwLCBTMTMyLCBhbmQgUzE0MCBCbHVldG9vdGggU29mdERldmljZSBzb2Z0d2FyZSBwYWNrYWdlcyANCisoIlNvZnREZXZpY2UiKS4gDQorDQorWW91ICgiWW91IiAiTGljZW5zZWUiKSBtdXN0IGNhcmVmdWxseSBhbmQgdGhvcm91Z2hseSByZWFkIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKSwgYW5kIGFjY2VwdCB0byBhZGhlcmUgdG8gdGhpcyBBZ3JlZW1lbnQgYmVmb3JlIA0KK2Rvd25sb2FkaW5nLCBpbnN0YWxsaW5nIGFuZC9vciB1c2luZyBhbnkgc29mdHdhcmUgb3IgY29udGVudCBpbiB0aGUgU29mdERldmljZSBwcm92aWRlZCBoZXJld2l0aC4gDQorDQorWU9VIEFDQ0VQVCBUSElTIExJQ0VOU0UgQUdSRUVNRU5UIEJZIChBKSBDTElDS0lORyBBQ0NFUFQgT1IgQUdSRUUgVE8gVEhJUyBMSUNFTlNFIEFHUkVFTUVOVCwgV0hFUkUgVEhJUyANCitPUFRJT04gSVMgTUFERSBBVkFJTEFCTEUgVE8gWU9VOyBPUiAoQikgQlkgQUNUVUFMTFkgVVNJTkcgVEhFIFNPRlRERVZJQ0UsIElOIFRISVMgQ0FTRSBZT1UgQUdSRUUgVEhBVCBUSEUgVVNFIE9GIA0KK1RIRSBTT0ZUREVWSUNFIENPTlNUSVRVVEVTIEFDQ0VQVEFOQ0UgT0YgVEhFIExJQ0VOU0lORyBBR1JFRU1FTlQgRlJPTSBUSEFUIFBPSU5UIE9OV0FSRFMuIA0KKw0KK0lGIFlPVSBETyBOT1QgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULCBUSEVOIERPIE5PVCBET1dOTE9BRCwgSU5TVEFMTC9DT01QTEVURSANCitJTlNUQUxMQVRJT04gT0YsIE9SIElOIEFOWSBPVEhFUiBXQVkgTUFLRSBVU0UgT0YgVEhFIFNPRlRERVZJQ0UuIA0KKw0KKzEuIEdyYW50IG9mIExpY2Vuc2UgDQorU3ViamVjdCB0byB0aGUgdGVybXMgaW4gdGhpcyBBZ3JlZW1lbnQgTm9yZGljIGdyYW50cyBMaWNlbnNlZSBhIGxpbWl0ZWQsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIG5vbi1zdWIgbGljZW5zYWJsZSwgcmV2b2NhYmxlIGxpY2Vuc2UgDQorKCJMaWNlbnNlIik6IChhKSB0byB1c2UgdGhlIFNvZnREZXZpY2Ugc29sZWx5IGluIGNvbm5lY3Rpb24gd2l0aCBhIE5vcmRpYyBpbnRlZ3JhdGVkIGNpcmN1aXQsIGFuZCAoYikgdG8gZGlzdHJpYnV0ZSB0aGUgU29mdERldmljZSBzb2xlbHkgYXMgaW50ZWdyYXRlZCANCitpbiBMaWNlbnNlZSBQcm9kdWN0LiBMaWNlbnNlZSBzaGFsbCBub3QgdXNlIHRoZSBTb2Z0RGV2aWNlIGZvciBhbnkgcHVycG9zZSBvdGhlciB0aGFuIHNwZWNpZmljYWxseSBhdXRob3JpemVkIGhlcmVpbi4gSXQgaXMgYSBtYXRlcmlhbCBicmVhY2ggb2YgdGhpcyANCithZ3JlZW1lbnQgdG8gdXNlIG9yIG1vZGlmeSB0aGUgU29mdERldmljZSBmb3IgdXNlIG9uIGFueSB3aXJlbGVzcyBjb25uZWN0aXZpdHkgaW50ZWdyYXRlZCBjaXJjdWl0IG90aGVyIHRoYW4gYSBOb3JkaWMgaW50ZWdyYXRlZCBjaXJjdWl0LiANCisNCisyLiBUaXRsZSANCitOb3JkaWMgcmV0YWlucyBmdWxsIHJpZ2h0cywgdGl0bGUsIGFuZCBvd25lcnNoaXAgdG8gdGhlIFNvZnREZXZpY2UgYW5kIGFueSBhbmQgYWxsIHBhdGVudHMsIGNvcHlyaWdodHMsIHRyYWRlIHNlY3JldHMsIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBhbmQgDQorb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiBhbmQgdG8gdGhlIFNvZnREZXZpY2UuIA0KKw0KKzMuIE5vIE1vZGlmaWNhdGlvbnMgb3IgUmV2ZXJzZSBFbmdpbmVlcmluZyANCitMaWNlbnNlZSBzaGFsbCBub3QsIG1vZGlmeSwgcmV2ZXJzZSBlbmdpbmVlciwgZGlzYXNzZW1ibGUsIGRlY29tcGlsZSBvciBvdGhlcndpc2UgYXR0ZW1wdCB0byBkaXNjb3ZlciB0aGUgc291cmNlIGNvZGUgb2YgYW55IG5vbi1zb3VyY2UgY29kZSANCitwYXJ0cyBvZiB0aGUgU29mdERldmljZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byBwcmUtY29tcGlsZWQgaGV4IGZpbGVzLCBiaW5hcmllcyBhbmQgb2JqZWN0IGNvZGUuIA0KKw0KKzQuIERpc3RyaWJ1dGlvbiBSZXN0cmljdGlvbnMgDQorRXhjZXB0IGFzIHNldCBmb3J3YXJkIGluIFNlY3Rpb24gMSBhYm92ZSwgdGhlIExpY2Vuc2VlIG1heSBub3QgZGlzY2xvc2Ugb3IgZGlzdHJpYnV0ZSBhbnkgb3IgYWxsIHBhcnRzIG9mIHRoZSBTb2Z0RGV2aWNlIHRvIGFueSB0aGlyZCBwYXJ0eS4gDQorTGljZW5zZWUgYWdyZWVzIHRvIHByb3ZpZGUgcmVhc29uYWJsZSBzZWN1cml0eSBwcmVjYXV0aW9ucyB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBhY2Nlc3MgdG8gb3IgdXNlIG9mIHRoZSBTb2Z0RGV2aWNlIGFzIHByb3NjcmliZWQgaGVyZWluLiANCitMaWNlbnNlZSBhbHNvIGFncmVlcyB0aGF0IHVzZSBvZiBhbmQgYWNjZXNzIHRvIHRoZSBTb2Z0RGV2aWNlIHdpbGwgYmUgc3RyaWN0bHkgbGltaXRlZCB0byB0aGUgZW1wbG95ZWVzIGFuZCBzdWJjb250cmFjdG9ycyBvZiB0aGUgTGljZW5zZWUgDQorbmVjZXNzYXJ5IGZvciB0aGUgcGVyZm9ybWFuY2Ugb2YgZGV2ZWxvcG1lbnQsIHZlcmlmaWNhdGlvbiBhbmQgcHJvZHVjdGlvbiB0YXNrcyB1bmRlciB0aGlzIEFncmVlbWVudC4gVGhlIExpY2Vuc2VlIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgDQorc3VjaCBlbXBsb3llZXMgYW5kIHN1YmNvbnRyYWN0b3JzIGNvbXBseSB3aXRoIHRoZSBvYmxpZ2F0aW9ucyBjb25jZXJuaW5nIHVzZSBhbmQgbm9uLWRpc2Nsb3N1cmUgb2YgdGhlIFNvZnREZXZpY2UuIA0KKw0KKzUuIE5vIE90aGVyIFJpZ2h0cyANCitMaWNlbnNlZSBzaGFsbCB1c2UgdGhlIFNvZnREZXZpY2Ugb25seSBpbiBjb21wbGlhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQgYW5kIHNoYWxsIHJlZnJhaW4gZnJvbSB1c2luZyB0aGUgU29mdERldmljZSBpbiBhbnkgd2F5IHRoYXQgbWF5IGJlIA0KK2NvbnRyYXJ5IHRvIHRoaXMgQWdyZWVtZW50LiANCisNCis2LiBGZWVzIA0KK05vcmRpYyBncmFudHMgdGhlIExpY2Vuc2UgdG8gdGhlIExpY2Vuc2VlIGZyZWUgb2YgY2hhcmdlIHByb3ZpZGVkIHRoYXQgdGhlIExpY2Vuc2VlIHVuZGVydGFrZXMgdGhlIG9ibGlnYXRpb25zIGluIHRoZSBBZ3JlZW1lbnQgYW5kIHdhcnJhbnRzIHRvIA0KK2NvbXBseSB3aXRoIHRoZSBBZ3JlZW1lbnQuIA0KKw0KKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgDQorVEhFIFNPRlRERVZJQ0UgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5EIEVYUFJFU1MgT1IgSU1QTElFRCBBTkQgTkVJVEhFUiBOT1JESUMsIElUUyANCitMSUNFTlNPUlMgT1IgQUZGSUxJQVRFUyBOT1IgVEhFIENPUFlSSUdIVCBIT0xERVJTIE1BS0UgQU5ZIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIA0KK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIA0KK1RIQVQgVEhFIFNPRlRERVZJQ0UgV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLiBUSEVSRSANCitJUyBOTyBXQVJSQU5UWSBCWSBOT1JESUMgT1IgQlkgQU5ZIE9USEVSIFBBUlRZIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIFNPRlRERVZJQ0UgV0lMTCBNRUVUIFRIRSANCitSRVFVSVJFTUVOVFMgT0YgTElDRU5TRUUgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBTT0ZUREVWSUNFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLiANCitMSUNFTlNFRSBBU1NVTUVTIEFMTCBSRVNQT05TSUJJTElUWSBBTkQgUklTSyBGT1IgVEhFIFNFTEVDVElPTiBPRiBUSEUgU09GVERFVklDRSBUTyBBQ0hJRVZFIExJQ0VOU0VFklMgDQorSU5URU5ERUQgUkVTVUxUUyBBTkQgRk9SIFRIRSBJTlNUQUxMQVRJT04sIFVTRSBBTkQgUkVTVUxUUyBPQlRBSU5FRCBGUk9NIElULiANCisNCisMDQorOC4gTm8gU3VwcG9ydCANCitOb3JkaWMgaXMgbm90IG9ibGlnYXRlZCB0byBmdXJuaXNoIG9yIG1ha2UgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIGFueSBmdXJ0aGVyIGluZm9ybWF0aW9uLCBzb2Z0d2FyZSwgdGVjaG5pY2FsIGluZm9ybWF0aW9uLCBrbm93LWhvdywgc2hvdy1ob3csIA0KK2J1Zy1maXhlcyBvciBzdXBwb3J0LiBOb3JkaWMgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIG1ha2UgY2hhbmdlcyB0byB0aGUgU29mdERldmljZSB3aXRob3V0IGZ1cnRoZXIgbm90aWNlLiANCisNCis5LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSANCitJbiBubyBldmVudCBzaGFsbCBOb3JkaWMsIGl0cyBlbXBsb3llZXMgb3Igc3VwcGxpZXJzLCBsaWNlbnNvcnMgb3IgYWZmaWxpYXRlcyBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHByb2ZpdHMsIHJldmVudWUsIHNhbGVzLCBkYXRhIG9yIGNvc3RzIG9mIA0KK3Byb2N1cmVtZW50IG9mIHN1YnN0aXR1dGUgZ29vZHMgb3Igc2VydmljZXMsIHByb3BlcnR5IGRhbWFnZSwgcGVyc29uYWwgaW5qdXJ5LCBpbnRlcnJ1cHRpb24gb2YgYnVzaW5lc3MsIGxvc3Mgb2YgYnVzaW5lc3MgaW5mb3JtYXRpb24gb3IgZm9yIGFueSANCitzcGVjaWFsLCBkaXJlY3QsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBlY29ub21pYywgcHVuaXRpdmUsIHNwZWNpYWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBob3dldmVyIGNhdXNlZCBhbmQgd2hldGhlciBhcmlzaW5nIHVuZGVyIGNvbnRyYWN0LCANCit0b3J0LCBuZWdsaWdlbmNlLCBvciBvdGhlciB0aGVvcnkgb2YgbGlhYmlsaXR5IGFyaXNpbmcgb3V0IG9mIHRoZSB1c2Ugb2Ygb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgU29mdERldmljZSwgZXZlbiBpZiBOb3JkaWMgb3IgaXRzIGVtcGxveWVlcyBvciBzdXBwbGllcnMsIA0KK2xpY2Vuc29ycyBvciBhZmZpbGlhdGVzIGFyZSBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuIEJlY2F1c2Ugc29tZSBjb3VudHJpZXMvc3RhdGVzL2p1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgDQorbGltaXRhdGlvbiBvZiBsaWFiaWxpdHksIGJ1dCBtYXkgYWxsb3cgbGlhYmlsaXR5IHRvIGJlIGxpbWl0ZWQsIGluIHN1Y2ggY2FzZXMsIE5vcmRpYywgaXRzIGVtcGxveWVlcyBvciBsaWNlbnNvcnMgb3IgYWZmaWxpYXRlc5IgbGlhYmlsaXR5IHNoYWxsIGJlIGxpbWl0ZWQgdG8gDQorVVNEIDUwLiANCisNCisxMC4gQnJlYWNoIG9mIENvbnRyYWN0IA0KK1Vwb24gYSBicmVhY2ggb2YgY29udHJhY3QgYnkgdGhlIExpY2Vuc2VlLCBOb3JkaWMgYW5kIGl0cyBsaWNlbnNvciBhcmUgZW50aXRsZWQgdG8gZGFtYWdlcyBpbiByZXNwZWN0IG9mIGFueSBkaXJlY3QgbG9zcyB3aGljaCBjYW4gYmUgcmVhc29uYWJseSANCithdHRyaWJ1dGVkIHRvIHRoZSBicmVhY2ggYnkgdGhlIExpY2Vuc2VlLiBJZiB0aGUgTGljZW5zZWUgaGFzIGFjdGVkIHdpdGggZ3Jvc3MgbmVnbGlnZW5jZSBvciB3aWxsZnVsIG1pc2NvbmR1Y3QsIHRoZSBMaWNlbnNlZSBzaGFsbCBjb3ZlciBib3RoIA0KK2RpcmVjdCBhbmQgaW5kaXJlY3QgY29zdHMgZm9yIE5vcmRpYyBhbmQgaXRzIGxpY2Vuc29ycy4gDQorDQorMTEuIEluZGVtbml0eSANCitMaWNlbnNlZSB1bmRlcnRha2VzIHRvIGluZGVtbmlmeSwgaG9sZCBoYXJtbGVzcyBhbmQgZGVmZW5kIE5vcmRpYyBhbmQgaXRzIGRpcmVjdG9ycywgb2ZmaWNlcnMsIGFmZmlsaWF0ZXMsIHNoYXJlaG9sZGVycywgbGljZW5zb3JzLCBlbXBsb3llZXMgYW5kIA0KK2FnZW50cyBmcm9tIGFuZCBhZ2FpbnN0IGFueSBjbGFpbXMgb3IgbGF3c3VpdHMsIGluY2x1ZGluZyBhdHRvcm5leSdzIGZlZXMsIHRoYXQgYXJpc2Ugb3IgcmVzdWx0IG9mIHRoZSBMaWNlbnNlZZJzIGV4ZWN1dGlvbiBvZiB0aGUgTGljZW5zZSBhbmQgd2hpY2ggDQoraXMgbm90IGR1ZSB0byBjYXVzZXMgZm9yIHdoaWNoIE5vcmRpYyBpcyByZXNwb25zaWJsZS4gDQorDQorMTIuIEdvdmVybmluZyBMYXcgDQorVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgY29uc3RydWVkIGFjY29yZGluZyB0byB0aGUgbGF3cyBvZiBOb3J3YXksIGFuZCBoZXJlYnkgc3VibWl0cyB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgT3NsbyB0aW5ncmV0dC4gDQorDQorMTMuIEFzc2lnbm1lbnQgDQorTGljZW5zZWUgc2hhbGwgbm90IGFzc2lnbiB0aGlzIEFncmVlbWVudCBvciBhbnkgcmlnaHRzIG9yIG9ibGlnYXRpb25zIGhlcmV1bmRlciB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgTm9yZGljLiANCisNCisxNC4gVGVybWluYXRpb24gDQorV2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0cywgTm9yZGljIG1heSBjYW5jZWwgdGhpcyBBZ3JlZW1lbnQgaWYgTGljZW5zZWUgZG9lcyBub3QgYWJpZGUgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgDQorQWdyZWVtZW50LiBVcG9uIHRlcm1pbmF0aW9uIExpY2Vuc2VlIG11c3QgcHJvbXB0bHkgY2Vhc2UgdGhlIHVzZSBvZiB0aGUgTGljZW5zZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBMaWNlbnNlZCBUZWNobm9sb2d5IGFuZCBhbnkgDQorb3RoZXIgbWF0ZXJpYWwgcHJvdmlkZWQgYnkgTm9yZGljIG9yIGl0cyBhZmZpbGlhdGUsIG9yIHByb2R1Y2VkIGJ5IHRoZSBMaWNlbnNlZSBpbiBjb25uZWN0aW9uIHdpdGggdGhlIEFncmVlbWVudCBvciB0aGUgTGljZW5zZWQgVGVjaG5vbG9neS4gDQorDQorMTUuIFRoaXJkIHBhcnR5IGJlbmVmaWNpYXJpZXMgDQorTm9yZGljknMgbGljZW5zb3JzIGFyZSBpbnRlbmRlZCB0aGlyZCBwYXJ0eSBiZW5lZmljaWFyaWVzIHVuZGVyIHRoaXMgQWdyZWVtZW50LiANCisNCisMDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvZG9jL3MxNDBfbnJmNTI4NDBfNS4wLjAtMi5hbHBoYV9yZWFkbWUudHh0IGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvZG9jL3MxNDBfbnJmNTI4NDBfNS4wLjAtMi5hbHBoYV9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NDdiZTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhX3JlYWRtZS50eHQKQEAgLTAsMCArMSwxMCBAQAorczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhDQorDQorVGhpcyByZWxlYXNlIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmc6DQorDQorLSBUaGlzIHJlYWRtZSBmaWxlCistIFRoZSBzMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGEgQVBJIChTb2Z0RGV2aWNlIGhlYWRlciBmaWxlcykNCistIFRoZSBzMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGEgbGljZW5zZSBhZ3JlZW1lbnQKKy0gVGhlIHMxNDBfbnJmNTI4NDBfNS4wLjAtMi5hbHBoYSByZWxlYXNlIG5vdGVzDQorLSBUaGUgczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhIFNvZnREZXZpY2UgKGJpbmFyeSBoZXggZmlsZSkNCistIFRoZSBzMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGEgTWlncmF0aW9uIERvY3VtZW50CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhX3JlbGVhc2Utbm90ZXMtdXBkYXRlLTEucGRmIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvZG9jL3MxNDBfbnJmNTI4NDBfNS4wLjAtMi5hbHBoYV9yZWxlYXNlLW5vdGVzLXVwZGF0ZS0xLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmZjZWI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvZG9jL3MxNDBfbnJmNTI4NDBfNS4wLjAtMi5hbHBoYV9yZWxlYXNlLW5vdGVzLXVwZGF0ZS0xLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZS5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjkxODk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGUuaApAQCAtMCwwICsxLDYxNSBAQAorLyoNCisgKiBDb3B5cmlnaHQgKGMpIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2Ygb3RoZXINCisgKiAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KKyAqICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiAgIDQuIFRoaXMgc29mdHdhcmUgbXVzdCBvbmx5IGJlIHVzZWQgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYw0KKyAqICAgU2VtaWNvbmR1Y3RvciBBU0EsIG9yIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBhIHRoaXJkIHBhcnR5IHRoYXQNCisgKiAgIGlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljIFNlbWljb25kdWN0b3IuDQorICoNCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisvKioNCisgIEBhZGR0b2dyb3VwIEJMRV9DT01NT04gQkxFIFNvZnREZXZpY2UgQ29tbW9uDQorICBAew0KKyAgQGRlZmdyb3VwIGJsZV9hcGkgRXZlbnRzLCB0eXBlIGRlZmluaXRpb25zIGFuZCBBUEkgY2FsbHMNCisgIEB7DQorDQorICBAYnJpZWYgTW9kdWxlIGluZGVwZW5kZW50IGV2ZW50cywgdHlwZSBkZWZpbml0aW9ucyBhbmQgQVBJIGNhbGxzIGZvciB0aGUgQkxFIFNvZnREZXZpY2UuDQorDQorICovDQorDQorI2lmbmRlZiBCTEVfSF9fDQorI2RlZmluZSBCTEVfSF9fDQorDQorI2luY2x1ZGUgImJsZV9yYW5nZXMuaCINCisjaW5jbHVkZSAiYmxlX3R5cGVzLmgiDQorI2luY2x1ZGUgImJsZV9nYXAuaCINCisjaW5jbHVkZSAiYmxlX2wyY2FwLmgiDQorI2luY2x1ZGUgImJsZV9nYXR0LmgiDQorI2luY2x1ZGUgImJsZV9nYXR0Yy5oIg0KKyNpbmNsdWRlICJibGVfZ2F0dHMuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0NPTU1PTl9FTlVNRVJBVElPTlMgRW51bWVyYXRpb25zDQorICogQHsgKi8NCisNCisvKioNCisgKiBAYnJpZWYgQ29tbW9uIEFQSSBTVkMgbnVtYmVycy4NCisgKi8NCitlbnVtIEJMRV9DT01NT05fU1ZDUw0KK3sNCisgIFNEX0JMRV9FTkFCTEUgPSBCTEVfU1ZDX0JBU0UsICAgICAgICAgLyoqPCBFbmFibGUgYW5kIGluaXRpYWxpemUgdGhlIEJMRSBzdGFjayAqLw0KKyAgU0RfQkxFX0VWVF9HRVQsICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdldCBhbiBldmVudCBmcm9tIHRoZSBwZW5kaW5nIGV2ZW50cyBxdWV1ZS4gKi8NCisgIFNEX0JMRV9VVUlEX1ZTX0FERCwgICAgICAgICAgICAgICAgICAgLyoqPCBBZGQgYSBWZW5kb3IgU3BlY2lmaWMgVVVJRC4gKi8NCisgIFNEX0JMRV9VVUlEX0RFQ09ERSwgICAgICAgICAgICAgICAgICAgLyoqPCBEZWNvZGUgVVVJRCBieXRlcy4gKi8NCisgIFNEX0JMRV9VVUlEX0VOQ09ERSwgICAgICAgICAgICAgICAgICAgLyoqPCBFbmNvZGUgVVVJRCBieXRlcy4gKi8NCisgIFNEX0JMRV9WRVJTSU9OX0dFVCwgICAgICAgICAgICAgICAgICAgLyoqPCBHZXQgdGhlIGxvY2FsIHZlcnNpb24gaW5mb3JtYXRpb24gKGNvbXBhbnkgSUQsIExpbmsgTGF5ZXIgVmVyc2lvbiwgTGluayBMYXllciBTdWJ2ZXJzaW9uKS4gKi8NCisgIFNEX0JMRV9VU0VSX01FTV9SRVBMWSwgICAgICAgICAgICAgICAgLyoqPCBVc2VyIE1lbW9yeSBSZXBseS4gKi8NCisgIFNEX0JMRV9PUFRfU0VULCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgYSBCTEUgb3B0aW9uLiAqLw0KKyAgU0RfQkxFX09QVF9HRVQsICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdldCBhIEJMRSBvcHRpb24uICovDQorICBTRF9CTEVfQ0ZHX1NFVCwgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQWRkIGEgY29uZmlndXJhdGlvbiB0byB0aGUgQkxFIHN0YWNrLiAqLw0KK307DQorDQorLyoqDQorICogQGJyaWVmIEJMRSBNb2R1bGUgSW5kZXBlbmRlbnQgRXZlbnQgSURzLg0KKyAqLw0KK2VudW0gQkxFX0NPTU1PTl9FVlRTDQorew0KKyAgQkxFX0VWVF9VU0VSX01FTV9SRVFVRVNUID0gQkxFX0VWVF9CQVNFLCAgIC8qKjwgVXNlciBNZW1vcnkgcmVxdWVzdC4gQHJlZiBibGVfZXZ0X3VzZXJfbWVtX3JlcXVlc3RfdCAqLw0KKyAgQkxFX0VWVF9VU0VSX01FTV9SRUxFQVNFLCAgICAgICAgICAgICAgICAgIC8qKjwgVXNlciBNZW1vcnkgcmVsZWFzZS4gQHJlZiBibGVfZXZ0X3VzZXJfbWVtX3JlbGVhc2VfdCAqLw0KK307DQorDQorLyoqQGJyaWVmIEJMRSBDb25uZWN0aW9uIENvbmZpZ3VyYXRpb24gSURzLg0KKyAqDQorICogSURzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24uDQorICovDQorZW51bSBCTEVfQ09OTl9DRkdTDQorew0KKyAgICBCTEVfQ09OTl9DRkdfR0FQID0gQkxFX0NPTk5fQ0ZHX0JBU0UsICAvKio8IEJMRSBHQVAgc3BlY2lmaWMgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uLiAqLw0KKyAgICBCTEVfQ09OTl9DRkdfR0FUVEMsICAgICAgICAgICAgICAgICAgICAvKio8IEJMRSBHQVRUQyBzcGVjaWZpYyBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24uICovDQorICAgIEJMRV9DT05OX0NGR19HQVRUUywgICAgICAgICAgICAgICAgICAgIC8qKjwgQkxFIEdBVFRTIHNwZWNpZmljIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbi4gKi8NCisgICAgQkxFX0NPTk5fQ0ZHX0dBVFQsICAgICAgICAgICAgICAgICAgICAgLyoqPCBCTEUgR0FUVCBzcGVjaWZpYyBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24uICovDQorfTsNCisNCisvKipAYnJpZWYgQkxFIENvbW1vbiBDb25maWd1cmF0aW9uIElEcy4NCisgKg0KKyAqIElEcyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29tbW9uIGNvbmZpZ3VyYXRpb24uDQorICovDQorZW51bSBCTEVfQ09NTU9OX0NGR1MNCit7DQorICBCTEVfQ09NTU9OX0NGR19WU19VVUlEID0gQkxFX0NGR19CQVNFLCAvKio8IFZlbmRvciBzcGVjaWZpYyBVVUlEIGNvbmZpZ3VyYXRpb24gKi8NCit9Ow0KKw0KKy8qKkBicmllZiBDb21tb24gT3B0aW9uIElEcy4NCisgKiBJRHMgdGhhdCB1bmlxdWVseSBpZGVudGlmeSBhIGNvbW1vbiBvcHRpb24uDQorICovDQorZW51bSBCTEVfQ09NTU9OX09QVFMNCit7DQorICBCTEVfQ09NTU9OX09QVF9QQV9MTkEgPSBCTEVfT1BUX0JBU0UsICAgICAgLyoqPCBQQSBhbmQgTE5BIG9wdGlvbnMgKi8NCisgIEJMRV9DT01NT05fT1BUX0NPTk5fRVZUX0VYVCwgICAgICAgICAgICAgICAvKio8IEV4dGVuZGVkIGNvbm5lY3Rpb24gZXZlbnRzIG9wdGlvbiAqLw0KK307DQorDQorLyoqIEB9ICovDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9DT01NT05fREVGSU5FUyBEZWZpbmVzDQorICogQHsgKi8NCisNCisvKiogQGJyaWVmICBSZXF1aXJlZCBwb2ludGVyIGFsaWdubWVudCBmb3IgQkxFIEV2ZW50cy4NCisqLw0KKyNkZWZpbmUgQkxFX0VWVF9QVFJfQUxJR05NRU5UICAgIDQNCisNCisvKiogQGJyaWVmICBMZWF2ZXMgdGhlIG1heGltdW0gb2YgdGhlIHR3byBhcmd1bWVudHMuDQorKi8NCisjZGVmaW5lIEJMRV9NQVgoYSwgYikgKChhKSA8IChiKSA/IChiKSA6IChhKSkNCisNCisvKiogQGJyaWVmICBNYXhpbXVtIHBvc3NpYmxlIGxlbmd0aCBmb3IgQkxFIEV2ZW50cy4NCisgKiBAbm90ZSBUaGUgaGlnaGVzdCB2YWx1ZSB1c2VkIGZvciBAcmVmIGJsZV9nYXR0X2Nvbm5fY2ZnX3Q6OmF0dF9tdHUgaW4gYW55IGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiBzaGFsbCBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyLg0KKyAqIElmIHRoYXQgdmFsdWUgaGFzIG5vdCBiZWVuIGNvbmZpZ3VyZWQgZm9yIGFueSBjb25uZWN0aW9ucyB0aGVuIEByZWYgQkxFX0dBVFRfQVRUX01UVV9ERUZBVUxUIG11c3QgYmUgdXNlZCBpbnN0ZWFkLg0KKyovDQorI2RlZmluZSBCTEVfRVZUX0xFTl9NQVgoQVRUX01UVSkgKEJMRV9NQVgoIFwNCisgIHNpemVvZihibGVfZXZ0X3QpLCBcDQorICBCTEVfTUFYKCBcDQorICAgIG9mZnNldG9mKGJsZV9ldnRfdCwgZXZ0LmdhdHRjX2V2dC5wYXJhbXMucmVsX2Rpc2NfcnNwLmluY2x1ZGVzKSArICgoQVRUX01UVSkgLSAyKSAvIDYgKiBzaXplb2YoYmxlX2dhdHRjX2luY2x1ZGVfdCksIFwNCisgICAgb2Zmc2V0b2YoYmxlX2V2dF90LCBldnQuZ2F0dGNfZXZ0LnBhcmFtcy5hdHRyX2luZm9fZGlzY19yc3AuaW5mby5hdHRyX2luZm8xNikgKyAoKEFUVF9NVFUpIC0gMikgLyA0ICogc2l6ZW9mKGJsZV9nYXR0Y19hdHRyX2luZm8xNl90KSBcDQorICApIFwNCispKQ0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX1VTRVJfTUVNX1RZUEVTIFVzZXIgTWVtb3J5IFR5cGVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9VU0VSX01FTV9UWVBFX0lOVkFMSUQgICAgICAgICAgICAgICAweDAwICAvKio8IEludmFsaWQgVXNlciBNZW1vcnkgVHlwZXMuICovDQorI2RlZmluZSBCTEVfVVNFUl9NRU1fVFlQRV9HQVRUU19RVUVVRURfV1JJVEVTICAgMHgwMSAgLyoqPCBVc2VyIE1lbW9yeSBmb3IgR0FUVFMgcXVldWVkIHdyaXRlcy4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9VVUlEX1ZTX0NPVU5UUyBWZW5kb3IgU3BlY2lmaWMgVVVJRCBjb3VudHMNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQkxFX1VVSURfVlNfQ09VTlRfREVGQVVMVCAxMCAgLyoqPCBEZWZhdWx0IFZTIFVVSUQgY291bnQuICovDQorI2RlZmluZSBCTEVfVVVJRF9WU19DT1VOVF9NQVggICAgIDI1NCAvKio8IE1heGltdW0gVlMgVVVJRCBjb3VudC4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9DT01NT05fQ0ZHX0RFRkFVTFRTIENvbmZpZ3VyYXRpb24gZGVmYXVsdHMuDQorICogQHsNCisgKi8NCisjZGVmaW5lIEJMRV9DT05OX0NGR19UQUdfREVGQVVMVCAgMCAgICAvKio8IERlZmF1bHQgY29uZmlndXJhdGlvbiB0YWcsIFNvZnREZXZpY2UgZGVmYXVsdCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24uICovDQorDQorLyoqIEB9ICovDQorDQorLyoqIEB9ICovDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9DT01NT05fU1RSVUNUVVJFUyBTdHJ1Y3R1cmVzDQorICogQHsgKi8NCisNCisvKipAYnJpZWYgVXNlciBNZW1vcnkgQmxvY2suICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgICpwX21lbTsgICAgICAvKio8IFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSB1c2VyIG1lbW9yeSBibG9jay4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgIGxlbjsgICAgICAgIC8qKjwgTGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSB1c2VyIG1lbW9yeSBibG9jay4gKi8NCit9IGJsZV91c2VyX21lbV9ibG9ja190Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0VWVF9VU0VSX01FTV9SRVFVRVNULiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIHR5cGU7ICAgICAvKio8IFVzZXIgbWVtb3J5IHR5cGUsIHNlZSBAcmVmIEJMRV9VU0VSX01FTV9UWVBFUy4gKi8NCit9IGJsZV9ldnRfdXNlcl9tZW1fcmVxdWVzdF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0VWVF9VU0VSX01FTV9SRUxFQVNFLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIHR5cGU7ICAgICAgIC8qKjwgVXNlciBtZW1vcnkgdHlwZSwgc2VlIEByZWYgQkxFX1VTRVJfTUVNX1RZUEVTLiAqLw0KKyAgYmxlX3VzZXJfbWVtX2Jsb2NrX3QgICAgICAgIG1lbV9ibG9jazsgIC8qKjwgVXNlciBtZW1vcnkgYmxvY2sgKi8NCit9IGJsZV9ldnRfdXNlcl9tZW1fcmVsZWFzZV90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIGV2ZW50cyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgZnVuY3Rpb24gbW9kdWxlLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgY29ubl9oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIEhhbmRsZSBvbiB3aGljaCB0aGlzIGV2ZW50IG9jY3VycmVkLiAqLw0KKyAgdW5pb24NCisgIHsNCisgICAgYmxlX2V2dF91c2VyX21lbV9yZXF1ZXN0X3QgICAgICB1c2VyX21lbV9yZXF1ZXN0OyAgICAvKio8IFVzZXIgTWVtb3J5IFJlcXVlc3QgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2V2dF91c2VyX21lbV9yZWxlYXNlX3QgICAgICB1c2VyX21lbV9yZWxlYXNlOyAgICAvKio8IFVzZXIgTWVtb3J5IFJlbGVhc2UgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgIH0gcGFyYW1zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEV2ZW50IHBhcmFtZXRlciB1bmlvbi4gKi8NCit9IGJsZV9jb21tb25fZXZ0X3Q7DQorDQorLyoqQGJyaWVmIEJMRSBFdmVudCBoZWFkZXIuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCBldnRfaWQ7ICAgICAgICAgICAgICAgIC8qKjwgVmFsdWUgZnJvbSBhIEJMRV88bW9kdWxlPl9FVlQgc2VyaWVzLiAqLw0KKyAgdWludDE2X3QgZXZ0X2xlbjsgICAgICAgICAgICAgICAvKio8IExlbmd0aCBpbiBvY3RldHMgaW5jbHVkaW5nIHRoaXMgaGVhZGVyLiAqLw0KK30gYmxlX2V2dF9oZHJfdDsNCisNCisvKipAYnJpZWYgQ29tbW9uIEJMRSBFdmVudCB0eXBlLCB3cmFwcGluZyB0aGUgbW9kdWxlIHNwZWNpZmljIGV2ZW50IHJlcG9ydHMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZXZ0X2hkcl90IGhlYWRlcjsgICAgICAgICAgIC8qKjwgRXZlbnQgaGVhZGVyLiAqLw0KKyAgdW5pb24NCisgIHsNCisgICAgYmxlX2NvbW1vbl9ldnRfdCAgY29tbW9uX2V2dDsgLyoqPCBDb21tb24gRXZlbnQsIGV2dF9pZCBpbiBCTEVfRVZUXyogc2VyaWVzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF90ICAgICBnYXBfZXZ0OyAgICAvKio8IEdBUCBvcmlnaW5hdGVkIGV2ZW50LCBldnRfaWQgaW4gQkxFX0dBUF9FVlRfKiBzZXJpZXMuICovDQorICAgIGJsZV9nYXR0Y19ldnRfdCAgIGdhdHRjX2V2dDsgIC8qKjwgR0FUVCBjbGllbnQgb3JpZ2luYXRlZCBldmVudCwgZXZ0X2lkIGluIEJMRV9HQVRUQ19FVlQqIHNlcmllcy4gKi8NCisgICAgYmxlX2dhdHRzX2V2dF90ICAgZ2F0dHNfZXZ0OyAgLyoqPCBHQVRUIHNlcnZlciBvcmlnaW5hdGVkIGV2ZW50LCBldnRfaWQgaW4gQkxFX0dBVFRTX0VWVCogc2VyaWVzLiAqLw0KKyAgfSBldnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEV2ZW50IHVuaW9uLiAqLw0KK30gYmxlX2V2dF90Ow0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBWZXJzaW9uIEluZm9ybWF0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgIHZlcnNpb25fbnVtYmVyOyAgICAvKio8IExpbmsgTGF5ZXIgVmVyc2lvbiBudW1iZXIgZm9yIEJUIDQuMSBzcGVjIGlzIDcgKGh0dHBzOi8vd3d3LmJsdWV0b290aC5vcmcvZW4tdXMvc3BlY2lmaWNhdGlvbi9hc3NpZ25lZC1udW1iZXJzL2xpbmstbGF5ZXIpLiAqLw0KKyAgdWludDE2X3QgIGNvbXBhbnlfaWQ7ICAgICAgICAvKio8IENvbXBhbnkgSUQsIE5vcmRpYyBTZW1pY29uZHVjdG9yJ3MgY29tcGFueSBJRCBpcyA4OSAoMHgwMDU5KSAoaHR0cHM6Ly93d3cuYmx1ZXRvb3RoLm9yZy9hcHBzL2NvbnRlbnQvRGVmYXVsdC5hc3B4P2RvY19pZD00OTcwOCkuICovDQorICB1aW50MTZfdCAgc3VidmVyc2lvbl9udW1iZXI7IC8qKjwgTGluayBMYXllciBTdWIgVmVyc2lvbiBudW1iZXIsIGNvcnJlc3BvbmRzIHRvIHRoZSBTb2Z0RGV2aWNlIENvbmZpZyBJRCBvciBGaXJtd2FyZSBJRCAoRldJRCkuICovDQorfSBibGVfdmVyc2lvbl90Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBQQSBhbmQgTE5BLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICAgdWludDhfdCBlbmFibGUgOjE7ICAgICAgLyoqPCBFbmFibGUgdG9nZ2xpbmcgZm9yIHRoaXMgYW1wbGlmaWVyICovDQorICAgICB1aW50OF90IGFjdGl2ZV9oaWdoIDoxOyAvKio8IFNldCB0aGUgcGluIHRvIGJlIGFjdGl2ZSBoaWdoICovDQorICAgICB1aW50OF90IGdwaW9fcGluIDo2OyAgICAvKio8IFRoZSBHUElPIHBpbiB0byB0b2dnbGUgZm9yIHRoaXMgYW1wbGlmaWVyICovDQorfSBibGVfcGFfbG5hX2NmZ190Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBQQSAmIExOQSBHUElPIHRvZ2dsZSBjb25maWd1cmF0aW9uDQorICoNCisgKiBUaGlzIG9wdGlvbiBjb25maWd1cmVzIHRoZSBTb2Z0RGV2aWNlIHRvIHRvZ2dsZSBwaW5zIHdoZW4gdGhlIHJhZGlvIGlzIGFjdGl2ZSBmb3IgdXNlIHdpdGggYSBwb3dlciBhbXBsaWZpZXIgYW5kL29yDQorICogYSBsb3cgbm9pc2UgYW1wbGlmaWVyLg0KKyAqDQorICogVG9nZ2xpbmcgdGhlIHBpbnMgaXMgYWNoaWV2ZWQgYnkgdXNpbmcgdHdvIFBQSSBjaGFubmVscyBhbmQgYSBHUElPVEUgY2hhbm5lbC4gVGhlIGhhcmR3YXJlIGNoYW5uZWwgSURzIGFyZSBwcm92aWRlZA0KKyAqIGJ5IHRoZSBhcHBsaWNhdGlvbiBhbmQgc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIHJlc2VydmVkIGFzIGxvbmcgYXMgYW55IFBBL0xOQSB0b2dnbGluZyBpcyBlbmFibGVkLg0KKyAqDQorICogQG5vdGUgIEByZWYgc2RfYmxlX29wdF9nZXQgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBvcHRpb24uDQorICogQG5vdGUgIFRoaXMgZmVhdHVyZSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgblJGNTIsIG9uIG5SRjUxIEByZWYgTlJGX0VSUk9SX05PVF9TVVBQT1JURUQgd2lsbCBhbHdheXMgYmUgcmV0dXJuZWQuDQorICogQG5vdGUgIFNldHRpbmcgdGhpcyBvcHRpb24gd2hpbGUgdGhlIHJhZGlvIGlzIGluIHVzZSAoaS5lLiBhbnkgb2YgdGhlIHJvbGVzIGFyZSBhY3RpdmUpIG1heSBoYXZlIHVuZGVmaW5lZCBjb25zZXF1ZW5jZXMNCisgKiBhbmQgbXVzdCBiZSBhdm9pZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICBibGVfcGFfbG5hX2NmZ190IHBhX2NmZzsgICAvKio8IFBvd2VyIEFtcGxpZmllciBjb25maWd1cmF0aW9uICovDQorICAgYmxlX3BhX2xuYV9jZmdfdCBsbmFfY2ZnOyAgLyoqPCBMb3cgTm9pc2UgQW1wbGlmaWVyIGNvbmZpZ3VyYXRpb24gKi8NCisNCisgICB1aW50OF90IHBwaV9jaF9pZF9zZXQ7ICAgICAvKio8IFBQSSBjaGFubmVsIHVzZWQgZm9yIHJhZGlvIHBpbiBzZXR0aW5nICovDQorICAgdWludDhfdCBwcGlfY2hfaWRfY2xyOyAgICAgLyoqPCBQUEkgY2hhbm5lbCB1c2VkIGZvciByYWRpbyBwaW4gY2xlYXJpbmcgKi8NCisgICB1aW50OF90IGdwaW90ZV9jaF9pZDsgICAgICAvKio8IEdQSU9URSBjaGFubmVsIHVzZWQgZm9yIHJhZGlvIHBpbiB0b2dnbGluZyAqLw0KK30gYmxlX2NvbW1vbl9vcHRfcGFfbG5hX3Q7DQorDQorLyoqDQorICogQGJyaWVmIENvbmZpZ3VyYXRpb24gb2YgZXh0ZW5kZWQgQkxFIGNvbm5lY3Rpb24gZXZlbnRzLg0KKyAqDQorICogV2hlbiBlbmFibGVkIHRoZSBTb2Z0RGV2aWNlIHdpbGwgZHluYW1pY2FsbHkgZXh0ZW5kIHRoZSBjb25uZWN0aW9uIGV2ZW50IHdoZW4gcG9zc2libGUuDQorICoNCisgKiBUaGUgY29ubmVjdGlvbiBldmVudCBsZW5ndGggaXMgY29udHJvbGxlZCBieSB0aGUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIGFzIHNldCBieSBAcmVmIGJsZV9nYXBfY29ubl9jZmdfdDo6ZXZlbnRfbGVuZ3RoLg0KKyAqIFRoZSBjb25uZWN0aW9uIGV2ZW50IGNhbiBiZSBleHRlbmRlZCBpZiB0aGVyZSBpcyB0aW1lIHRvIHNlbmQgYW5vdGhlciBwYWNrZXQgcGFpciBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNvbm5lY3Rpb24gaW50ZXJ2YWwsDQorICogYW5kIGlmIHRoZXJlIGFyZSBubyBjb25mbGljdHMgd2l0aCBvdGhlciBCTEUgcm9sZXMgcmVxdWVzdGluZyByYWRpbyB0aW1lLg0KKyAqDQorICogQG5vdGUgQHJlZiBzZF9ibGVfb3B0X2dldCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIG9wdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICB1aW50OF90IGVuYWJsZSA6IDE7IC8qKjwgRW5hYmxlIGV4dGVuZGVkIEJMRSBjb25uZWN0aW9uIGV2ZW50cywgZGlzYWJsZWQgYnkgZGVmYXVsdC4gKi8NCit9IGJsZV9jb21tb25fb3B0X2Nvbm5fZXZ0X2V4dF90Ow0KKw0KKy8qKkBicmllZiBPcHRpb24gc3RydWN0dXJlIGZvciBjb21tb24gb3B0aW9ucy4gKi8NCit0eXBlZGVmIHVuaW9uDQorew0KKyAgYmxlX2NvbW1vbl9vcHRfcGFfbG5hX3QgICAgICAgcGFfbG5hOyAgICAgICAgLyoqPCBQYXJhbWV0ZXJzIGZvciBjb250cm9sbGluZyBQQSBhbmQgTE5BIHBpbiB0b2dnbGluZy4gKi8NCisgIGJsZV9jb21tb25fb3B0X2Nvbm5fZXZ0X2V4dF90IGNvbm5fZXZ0X2V4dDsgIC8qKjwgUGFyYW1ldGVycyBmb3IgZW5hYmxpbmcgZXh0ZW5kZWQgY29ubmVjdGlvbiBldmVudHMuICovDQorfSBibGVfY29tbW9uX29wdF90Ow0KKw0KKy8qKkBicmllZiBDb21tb24gQkxFIE9wdGlvbiB0eXBlLCB3cmFwcGluZyB0aGUgbW9kdWxlIHNwZWNpZmljIG9wdGlvbnMuICovDQordHlwZWRlZiB1bmlvbg0KK3sNCisgIGJsZV9jb21tb25fb3B0X3QgIGNvbW1vbl9vcHQ7ICAgICAgICAgLyoqPCBDT01NT04gb3B0aW9ucywgb3B0X2lkIGluIEByZWYgQkxFX0NPTU1PTl9PUFRTIHNlcmllcy4gKi8NCisgIGJsZV9nYXBfb3B0X3QgICAgIGdhcF9vcHQ7ICAgICAgICAgICAgLyoqPCBHQVAgb3B0aW9uLCBvcHRfaWQgaW4gQHJlZiBCTEVfR0FQX09QVFMgc2VyaWVzLiAqLw0KK30gYmxlX29wdF90Ow0KKw0KKy8qKkBicmllZiBCTEUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHR5cGUsIHdyYXBwaW5nIHRoZSBtb2R1bGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIHNldCB3aXRoDQorICogQHJlZiBzZF9ibGVfY2ZnX3NldC4NCisgKg0KKyAqIEBub3RlIENvbm5lY3Rpb24gY29uZmlndXJhdGlvbnMgZG9uJ3QgaGF2ZSB0byBiZSBzZXQuDQorICogSW4gdGhlIGNhc2UgdGhhdCBubyBjb25maWd1cmF0aW9ucyBoYXMgYmVlbiBzZXQsIG9yIGZld2VyIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbnMgaGFzIGJlZW4gc2V0IHRoYW4gZW5hYmxlZCBjb25uZWN0aW9ucywNCisgKiB0aGUgZGVmYXVsdCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIGZvciB0aGUgcmVtYWluaW5nIGNvbm5lY3Rpb25zLg0KKyAqIFdoZW4gY3JlYXRpbmcgY29ubmVjdGlvbnMgd2l0aCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBAcmVmIEJMRV9DT05OX0NGR19UQUdfREVGQVVMVCBzaG91bGQgYmUgdXNlZCBpbg0KKyAqIHBsYWNlIG9mIEByZWYgYmxlX2Nvbm5fY2ZnX3Q6OmNvbm5fY2ZnX3RhZy4gU2VlIEByZWYgc2RfYmxlX2dhcF9hZHZfc3RhcnQoKSBhbmQgQHJlZiBzZF9ibGVfZ2FwX2Nvbm5lY3QoKSINCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfQ09OTl9DRkd9DQorICogQGVuZG1zY3MNCisNCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgICAgICAgIGNvbm5fY2ZnX3RhZzsgICAgICAgIC8qKjwgVGhlIGFwcGxpY2F0aW9uIGNob3NlbiB0YWcgaXQgY2FuIHVzZSB3aXRoIHRoZSBAcmVmIHNkX2JsZV9nYXBfYWR2X3N0YXJ0KCkgYW5kIEByZWYgc2RfYmxlX2dhcF9jb25uZWN0KCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbHMgdG8gc2VsZWN0IHRoaXMgY29uZmlndXJhdGlvbiB3aGVuIGNyZWF0aW5nIGEgY29ubmVjdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSBkaWZmZXJlbnQgZm9yIGFsbCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb25zIGFkZGVkIGFuZCBub3QgQHJlZiBCTEVfQ09OTl9DRkdfVEFHX0RFRkFVTFQuICovDQorICB1bmlvbiB7DQorICAgIGJsZV9nYXBfY29ubl9jZmdfdCAgIGdhcF9jb25uX2NmZzsgICAgICAvKio8IEdBUCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24sIGNmZ19pZCBpcyBAcmVmIEJMRV9DT05OX0NGR19HQVAuICovDQorICAgIGJsZV9nYXR0Y19jb25uX2NmZ190IGdhdHRjX2Nvbm5fY2ZnOyAgICAvKio8IEdBVFRDIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiwgY2ZnX2lkIGlzIEByZWYgQkxFX0NPTk5fQ0ZHX0dBVFRDLiAqLw0KKyAgICBibGVfZ2F0dHNfY29ubl9jZmdfdCBnYXR0c19jb25uX2NmZzsgICAgLyoqPCBHQVRUUyB0aGlzIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiwgY2ZnX2lkIGlzIEByZWYgQkxFX0NPTk5fQ0ZHX0dBVFRTLiAqLw0KKyAgICBibGVfZ2F0dF9jb25uX2NmZ190ICBnYXR0X2Nvbm5fY2ZnOyAgICAgLyoqPCBHQVRUIHRoaXMgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uLCBjZmdfaWQgaXMgQHJlZiBCTEVfQ09OTl9DRkdfR0FUVC4gKi8NCisgIH0gcGFyYW1zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHVuaW9uLiAqLw0KK30gYmxlX2Nvbm5fY2ZnX3Q7DQorDQorLyoqDQorICogQGJyaWVmIENvbmZpZ3VyYXRpb24gb2YgVmVuZG9yIFNwZWNpZmljIFVVSURzLCBzZXQgd2l0aCBAcmVmIHNkX2JsZV9jZmdfc2V0Lg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIFRvbyBtYW55IFVVSURzIGNvbmZpZ3VyZWQuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IHZzX3V1aWRfY291bnQ7IC8qKjwgTnVtYmVyIG9mIDEyOC1iaXQgVmVuZG9yIFNwZWNpZmljIFVVSUQgYmFzZXMgdG8gYWxsb2NhdGUgbWVtb3J5IGZvci4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIEByZWYgQkxFX1VVSURfVlNfQ09VTlRfREVGQVVMVC4gTWF4aW11bSB2YWx1ZSBpcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEByZWYgQkxFX1VVSURfVlNfQ09VTlRfTUFYLiAqLw0KK30gYmxlX2NvbW1vbl9jZmdfdnNfdXVpZF90Ow0KKw0KKy8qKkBicmllZiBDb21tb24gQkxFIENvbmZpZ3VyYXRpb24gdHlwZSwgd3JhcHBpbmcgdGhlIGNvbW1vbiBjb25maWd1cmF0aW9ucy4gKi8NCit0eXBlZGVmIHVuaW9uDQorew0KKyAgYmxlX2NvbW1vbl9jZmdfdnNfdXVpZF90ICB2c191dWlkX2NmZzsgIC8qKjwgVmVuZG9yIHNwZWNpZmljIFVVSUQgY29uZmlndXJhdGlvbiwgY2ZnX2lkIGlzIEByZWYgQkxFX0NPTU1PTl9DRkdfVlNfVVVJRC4gKi8NCit9IGJsZV9jb21tb25fY2ZnX3Q7DQorDQorLyoqQGJyaWVmIEJMRSBDb25maWd1cmF0aW9uIHR5cGUsIHdyYXBwaW5nIHRoZSBtb2R1bGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuICovDQordHlwZWRlZiB1bmlvbg0KK3sNCisgIGJsZV9jb25uX2NmZ190ICAgIGNvbm5fY2ZnOyAgIC8qKjwgQ29ubmVjdGlvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgY2ZnX2lkIGluIEByZWYgQkxFX0NPTk5fQ0ZHUyBzZXJpZXMuICovDQorICBibGVfY29tbW9uX2NmZ190ICBjb21tb25fY2ZnOyAvKio8IEdsb2JhbCBjb21tb24gY29uZmlndXJhdGlvbnMsIGNmZ19pZCBpbiBAcmVmIEJMRV9DT01NT05fQ0ZHUyBzZXJpZXMuICovDQorICBibGVfZ2FwX2NmZ190ICAgICBnYXBfY2ZnOyAgICAvKio8IEdsb2JhbCBHQVAgY29uZmlndXJhdGlvbnMsIGNmZ19pZCBpbiBAcmVmIEJMRV9HQVBfQ0ZHUyBzZXJpZXMuICovDQorICBibGVfZ2F0dHNfY2ZnX3QgICBnYXR0c19jZmc7ICAvKio8IEdsb2JhbCBHQVRUUyBjb25maWd1cmF0aW9uLCBjZmdfaWQgaW4gQHJlZiBCTEVfR0FUVFNfQ0ZHUyBzZXJpZXMuICovDQorfSBibGVfY2ZnX3Q7DQorDQorLyoqIEB9ICovDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9DT01NT05fRlVOQ1RJT05TIEZ1bmN0aW9ucw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIEVuYWJsZSB0aGUgQkxFIHN0YWNrDQorICoNCisgKiBAcGFyYW1baW4sIG91dF0gcF9hcHBfcmFtX2Jhc2UgICBQb2ludGVyIHRvIGEgdmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBSQU0gcmVnaW9uIChBUFBfUkFNX0JBU0UpLiBPbiByZXR1cm4sIHRoaXMgd2lsbA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIG1pbmltdW0gc3RhcnQgYWRkcmVzcyBvZiB0aGUgYXBwbGljYXRpb24gUkFNIHJlZ2lvbg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIGJ5IHRoZSBTb2Z0RGV2aWNlIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uDQorICoNCisgKiBAbm90ZSBUaGUgbWVtb3J5IHJlcXVpcmVtZW50IGZvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gd2lsbCBub3QgaW5jcmVhc2UgYmV0d2VlbiBTb2Z0RGV2aWNlcw0KKyAqICAgICAgIHdpdGggdGhlIHNhbWUgbWFqb3IgdmVyc2lvbiBudW1iZXIuDQorICoNCisgKiBAbm90ZSBUaGUgdmFsdWUgb2YgKnBfYXBwX3JhbV9iYXNlIHdoZW4gdGhlIGFwcCBoYXMgZG9uZSBubyBjdXN0b20gY29uZmlndXJhdGlvbiBvZiB0aGUNCisgKiAgICAgICBTb2Z0RGV2aWNlLCBpLmUuIHRoZSBhcHAgaGFzIG5vdCBjYWxsZWQgQHJlZiBzZF9ibGVfY2ZnX3NldCBiZWZvcmUgQHJlZiBzZF9ibGVfZW5hYmxlLCBjYW4NCisgKiAgICAgICBiZSBmb3VuZCBpbiB0aGUgcmVsZWFzZSBub3Rlcy4NCisgKg0KKyAqIEBub3RlIEF0IHJ1bnRpbWUgdGhlIElDJ3MgUkFNIGlzIHNwbGl0IGludG8gMiByZWdpb25zOiBUaGUgU29mdERldmljZSBSQU0gcmVnaW9uIGlzIGxvY2F0ZWQNCisgKiAgICAgICBiZXR3ZWVuIDB4MjAwMDAwMDAgYW5kIEFQUF9SQU1fQkFTRS0xIGFuZCB0aGUgYXBwbGljYXRpb24ncyBSQU0gcmVnaW9uIGlzIGxvY2F0ZWQgYmV0d2Vlbg0KKyAqICAgICAgIEFQUF9SQU1fQkFTRSBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBjYWxsIHN0YWNrLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBjYWxsIGluaXRpYWxpemVzIHRoZSBCTEUgc3RhY2ssIG5vIEJMRSByZWxhdGVkIGZ1bmN0aW9uIG90aGVyIHRoYW4gQHJlZg0KKyAqICAgICAgICAgIHNkX2JsZV9jZmdfc2V0IGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoaXMgb25lLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9DT01NT05fRU5BQkxFfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgICAgICAgICAgICAgIFRoZSBCTEUgc3RhY2sgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhlIEJMRSBzdGFjayBoYWQgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGFuZCBjYW5ub3QgYmUgcmVpbml0aWFsaXplZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiAgIEludmFsaWQgb3Igbm90IHN1ZmZpY2llbnRseSBhbGlnbmVkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT19NRU0gICAgICAgICBUaGUgYW1vdW50IG9mIG1lbW9yeSBhc3NpZ25lZCB0byB0aGUgU29mdERldmljZSBieSAqcF9hcHBfcmFtX2Jhc2UgaXMgbm90DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZSBlbm91Z2ggdG8gZml0IHRoaXMgY29uZmlndXJhdGlvbidzIG1lbW9yeSByZXF1aXJlbWVudC4gQ2hlY2sgKnBfYXBwX3JhbV9iYXNlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2V0IHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBhcHBsaWNhdGlvbiBSQU0gcmVnaW9uIGFjY29yZGluZ2x5Lg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfRU5BQkxFLCB1aW50MzJfdCwgc2RfYmxlX2VuYWJsZSh1aW50MzJfdCAqIHBfYXBwX3JhbV9iYXNlKSk7DQorDQorLyoqQGJyaWVmIEFkZCBjb25maWd1cmF0aW9ucyBmb3IgdGhlIEJMRSBzdGFjaw0KKyAqDQorICogQHBhcmFtW2luXSBjZmdfaWQgICAgICAgICAgICAgIENvbmZpZyBJRCwgc2VlIEByZWYgQkxFX0NPTk5fQ0ZHUywgQHJlZiBCTEVfQ09NTU9OX0NGR1MsIEByZWYNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkxFX0dBUF9DRkdTIG9yIEByZWYgQkxFX0dBVFRTX0NGR1MuDQorICogQHBhcmFtW2luXSBwX2NmZyAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYSBibGVfY2ZnX3Qgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFsdWUuDQorICogQHBhcmFtW2luXSBhcHBfcmFtX2Jhc2UgICAgICAgIFRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBhcHBsaWNhdGlvbiBSQU0gcmVnaW9uIChBUFBfUkFNX0JBU0UpLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZW5hYmxlIGZvciBkZXRhaWxzIGFib3V0IEFQUF9SQU1fQkFTRS4NCisgKg0KKyAqIEBub3RlIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnQgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiB3aWxsIG5vdCBpbmNyZWFzZSBiZXR3ZWVuIFNvZnREZXZpY2VzDQorICogICAgICAgd2l0aCB0aGUgc2FtZSBtYWpvciB2ZXJzaW9uIG51bWJlci4NCisgKg0KKyAqIEBub3RlIElmIGEgY29uZmlndXJhdGlvbiBpcyBzZXQgbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IG9uZSBzZXQgaXMgdGhlIG9uZSB0aGF0IHRha2VzIGVmZmVjdCBvbg0KKyAqICAgICAgIEByZWYgc2RfYmxlX2VuYWJsZS4NCisgKg0KKyAqIEBub3RlIEFueSBwYXJ0IG9mIHRoZSBCTEUgc3RhY2sgdGhhdCBpcyBOT1QgY29uZmlndXJlZCB3aXRoIEByZWYgc2RfYmxlX2NmZ19zZXQgd2lsbCBoYXZlIGRlZmF1bHQNCisgKiAgICAgICBjb25maWd1cmF0aW9uLg0KKyAqDQorICogQG5vdGUgQHJlZiBzZF9ibGVfY2ZnX3NldCBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIHdoZW4gdGhlIFNvZnREZXZpY2UgaXMgZW5hYmxlZCAoc2VlIEByZWYNCisgKiAgICAgICBzZF9zb2Z0ZGV2aWNlX2VuYWJsZSkgd2hpbGUgdGhlIEJMRSBwYXJ0IG9mIHRoZSBTb2Z0RGV2aWNlIGlzIG5vdCBlbmFibGVkIChzZWUgQHJlZg0KKyAqICAgICAgIHNkX2JsZV9lbmFibGUpLg0KKyAqDQorICogQG5vdGUgRXJyb3IgY29kZXMgZm9yIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHMuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0NPTU1PTl9FTkFCTEV9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhlIEJMRSBzdGFjayBoYWQgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSICAgSW52YWxpZCBvciBub3Qgc3VmZmljaWVudGx5IGFsaWduZWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gIEludmFsaWQgY2ZnX2lkIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9fTUVNICAgICAgICAgVGhlIGFtb3VudCBvZiBtZW1vcnkgYXNzaWduZWQgdG8gdGhlIFNvZnREZXZpY2UgYnkgYXBwX3JhbV9iYXNlIGlzIG5vdA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2UgZW5vdWdoIHRvIGZpdCB0aGlzIGNvbmZpZ3VyYXRpb24ncyBtZW1vcnkgcmVxdWlyZW1lbnQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9DRkdfU0VULCB1aW50MzJfdCwgc2RfYmxlX2NmZ19zZXQodWludDMyX3QgY2ZnX2lkLCBibGVfY2ZnX3QgY29uc3QgKiBwX2NmZywgdWludDMyX3QgYXBwX3JhbV9iYXNlKSk7DQorDQorLyoqQGJyaWVmIEdldCBhbiBldmVudCBmcm9tIHRoZSBwZW5kaW5nIGV2ZW50cyBxdWV1ZS4NCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfZGVzdCBQb2ludGVyIHRvIGJ1ZmZlciB0byBiZSBmaWxsZWQgaW4gd2l0aCBhbiBldmVudCwgb3IgTlVMTCB0byByZXRyaWV2ZSB0aGUgZXZlbnQgbGVuZ3RoLg0KKyAqICAgICAgICAgICAgICAgICAgICBUaGlzIGJ1ZmZlciA8Yj5tdXN0IGJlIGFsaWduZWQgdG8gdGhlIGV4dGVuZCBkZWZpbmVkIGJ5IEByZWYgQkxFX0VWVF9QVFJfQUxJR05NRU5UPC9iPi4NCisgKiAgICAgICAgICAgICAgICAgICAgVGhlIGJ1ZmZlciBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYSBAcmVmIGJsZV9ldnRfdCBzdHJ1Y3QuDQorICogQHBhcmFtW2luLCBvdXRdIHBfbGVuIFBvaW50ZXIgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBvbiByZXR1cm4gaXQgaXMgZmlsbGVkIHdpdGggdGhlIGV2ZW50IGxlbmd0aC4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgY2FsbCBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIHB1bGwgYSBCTEUgZXZlbnQgZnJvbSB0aGUgQkxFIHN0YWNrLiBUaGUgYXBwbGljYXRpb24gaXMgc2lnbmFsZWQgdGhhdA0KKyAqIGFuIGV2ZW50IGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBCTEUgc3RhY2sgYnkgdGhlIHRyaWdnZXJpbmcgb2YgdGhlIFNEX0VWVF9JUlFuIGludGVycnVwdC4NCisgKiBUaGUgYXBwbGljYXRpb24gaXMgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSB0aHJlYWQgbW9kZSAobWFpbiBjb250ZXh0KSBvciBkaXJlY3RseSBmcm9tIHRoZQ0KKyAqIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUgdGhhdCBtYXBzIHRvIFNEX0VWVF9JUlFuLiBJbiBhbnkgY2FzZSBob3dldmVyLCBhbmQgYmVjYXVzZSB0aGUgQkxFIHN0YWNrIHJ1bnMgYXQgYSBoaWdoZXINCisgKiBwcmlvcml0eSB0aGFuIHRoZSBhcHBsaWNhdGlvbiwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGluIGEgbG9vcCAodW50aWwgQHJlZiBOUkZfRVJST1JfTk9UX0ZPVU5EIGlzIHJldHVybmVkKQ0KKyAqIGV2ZXJ5IHRpbWUgU0RfRVZUX0lSUW4gaXMgcmFpc2VkIHRvIGVuc3VyZSB0aGF0IGFsbCBhdmFpbGFibGUgZXZlbnRzIGFyZSBwdWxsZWQgZnJvbSB0aGUgQkxFIHN0YWNrLiBGYWlsdXJlIHRvIGRvIHNvDQorICogY291bGQgcG90ZW50aWFsbHkgbGVhdmUgZXZlbnRzIGluIHRoZSBpbnRlcm5hbCBxdWV1ZSB3aXRob3V0IHRoZSBhcHBsaWNhdGlvbiBiZWluZyBhd2FyZSBvZiB0aGlzIGZhY3QuDQorICoNCisgKiBTaXppbmcgdGhlIHBfZGVzdCBidWZmZXIgaXMgZXF1YWxseSBpbXBvcnRhbnQsIHNpbmNlIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byBwcm92aWRlIGFsbCB0aGUgbWVtb3J5IG5lY2Vzc2FyeSBmb3IgdGhlIGV2ZW50IHRvDQorICogYmUgY29waWVkIGludG8gYXBwbGljYXRpb24gbWVtb3J5LiBJZiB0aGUgYnVmZmVyIHByb3ZpZGVkIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gZml0IHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGV2ZW50LA0KKyAqIEByZWYgTlJGX0VSUk9SX0RBVEFfU0laRSB3aWxsIGJlIHJldHVybmVkIGFuZCB0aGUgYXBwbGljYXRpb24gY2FuIHRoZW4gY2FsbCBhZ2FpbiB3aXRoIGEgbGFyZ2VyIGJ1ZmZlciBzaXplLg0KKyAqIFRoZSBtYXhpbXVtIHBvc3NpYmxlIGV2ZW50IGxlbmd0aCBpcyBkZWZpbmVkIGJ5IEByZWYgQkxFX0VWVF9MRU5fTUFYLiBUaGUgYXBwbGljYXRpb24gbWF5IGFsc28gInBlZWsiIHRoZSBldmVudCBsZW5ndGgNCisgKiBieSBwcm92aWRpbmcgcF9kZXN0IGFzIGEgTlVMTCBwb2ludGVyIGFuZCBpbnNwZWN0aW5nIHRoZSB2YWx1ZSBvZiAqcF9sZW4gdXBvbiByZXR1cm46DQorICoNCisgKiAgICAgXGNvZGUNCisgKiAgICAgdWludDE2X3QgbGVuOw0KKyAqICAgICBlcnJjb2RlID0gc2RfYmxlX2V2dF9nZXQoTlVMTCwgJmxlbik7DQorICogICAgIFxlbmRjb2RlDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0NPTU1PTl9JUlFfRVZUX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9DT01NT05fVEhSRUFEX0VWVF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBFdmVudCBwdWxsZWQgYW5kIHN0b3JlZCBpbnRvIHRoZSBzdXBwbGllZCBidWZmZXIuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBvciBub3Qgc3VmZmljaWVudGx5IGFsaWduZWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9GT1VORCBObyBldmVudHMgcmVhZHkgdG8gYmUgcHVsbGVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfREFUQV9TSVpFIEV2ZW50IHJlYWR5IGJ1dCBjb3VsZCBub3QgZml0IGludG8gdGhlIHN1cHBsaWVkIGJ1ZmZlci4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0VWVF9HRVQsIHVpbnQzMl90LCBzZF9ibGVfZXZ0X2dldCh1aW50OF90ICpwX2Rlc3QsIHVpbnQxNl90ICpwX2xlbikpOw0KKw0KKw0KKy8qKkBicmllZiBBZGQgYSBWZW5kb3IgU3BlY2lmaWMgYmFzZSBVVUlELg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBjYWxsIGVuYWJsZXMgdGhlIGFwcGxpY2F0aW9uIHRvIGFkZCBhIHZlbmRvciBzcGVjaWZpYyBiYXNlIFVVSUQgdG8gdGhlIEJMRSBzdGFjaydzIHRhYmxlLCBmb3IgbGF0ZXINCisgKiB1c2Ugd2l0aCBhbGwgb3RoZXIgbW9kdWxlcyBhbmQgQVBJcy4gVGhpcyB0aGVuIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gdXNlIHRoZSBzaG9ydGVyLCAyNC1iaXQgQHJlZiBibGVfdXVpZF90DQorICogZm9ybWF0IHdoZW4gZGVhbGluZyB3aXRoIGJvdGggMTYtYml0IGFuZCAxMjgtYml0IFVVSURzIHdpdGhvdXQgaGF2aW5nIHRvIGNoZWNrIGZvciBsZW5ndGhzIGFuZCBoYXZpbmcgc3BsaXQgY29kZQ0KKyAqIHBhdGhzLiBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSBleHRlbmRpbmcgdGhlIGdyb3VwaW5nIG1lY2hhbmlzbSB0aGF0IHRoZSBCbHVldG9vdGggU0lHIHN0YW5kYXJkIGJhc2UgVVVJRCB1c2VzDQorICogZm9yIGFsbCBvdGhlciAxMjgtYml0IFVVSURzLiBUaGUgdHlwZSBmaWVsZCBpbiB0aGUgQHJlZiBibGVfdXVpZF90IHN0cnVjdHVyZSBpcyBhbiBpbmRleCAocmVsYXRpdmUgdG8NCisgKiBAcmVmIEJMRV9VVUlEX1RZUEVfVkVORE9SX0JFR0lOKSB0byB0aGUgdGFibGUgcG9wdWxhdGVkIGJ5IG11bHRpcGxlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgVVVJRCBmaWVsZA0KKyAqIGluIHRoZSBzYW1lIHN0cnVjdHVyZSBjb250YWlucyB0aGUgMiBieXRlcyBhdCBpbmRleGVzIDEyIGFuZCAxMy4gVGhlIG51bWJlciBvZiBwb3NzaWJsZSAxMjgtYml0IFVVSURzIGF2YWlsYWJsZSB0bw0KKyAqIHRoZSBhcHBsaWNhdGlvbiBpcyB0aGVyZWZvcmUgdGhlIG51bWJlciBvZiBWZW5kb3IgU3BlY2lmaWMgVVVJRHMgYWRkZWQgd2l0aCB0aGUgaGVscCBvZiB0aGlzIGZ1bmN0aW9uIHRpbWVzIDY1NTM2LA0KKyAqIGFsdGhvdWdoIHJlc3RyaWN0ZWQgdG8gbW9kaWZ5aW5nIGJ5dGVzIDEyIGFuZCAxMyBmb3IgZWFjaCBvZiB0aGUgZW50cmllcyBpbiB0aGUgc3VwcGxpZWQgYXJyYXkuDQorICoNCisgKiBAbm90ZSBCeXRlcyAxMiBhbmQgMTMgb2YgdGhlIHByb3ZpZGVkIFVVSUQgd2lsbCBub3QgYmUgdXNlZCBpbnRlcm5hbGx5LCBzaW5jZSB0aG9zZSBhcmUgYWx3YXlzIHJlcGxhY2VkIGJ5DQorICogdGhlIDE2LWJpdCB1dWlkIGZpZWxkIGluIEByZWYgYmxlX3V1aWRfdC4NCisgKg0KKyAqIEBub3RlIElmIGEgVVVJRCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEJMRSBzdGFjaydzIGludGVybmFsIHRhYmxlLCB0aGUgY29ycmVzcG9uZGluZyBpbmRleCB3aWxsIGJlIHJldHVybmVkIGluDQorICogcF91dWlkX3R5cGUgYWxvbmcgd2l0aCBhbiBOUkZfU1VDQ0VTUyBlcnJvciBjb2RlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF92c191dWlkICAgIFBvaW50ZXIgdG8gYSAxNi1vY3RldCAoMTI4LWJpdCkgbGl0dGxlIGVuZGlhbiBWZW5kb3IgU3BlY2lmaWMgVVVJRCBkaXNyZWdhcmRpbmcNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgMTIgYW5kIDEzLg0KKyAqIEBwYXJhbVtvdXRdIHBfdXVpZF90eXBlICBQb2ludGVyIHRvIGEgdWludDhfdCB3aGVyZSB0aGUgdHlwZSBmaWVsZCBpbiBAcmVmIGJsZV91dWlkX3QgY29ycmVzcG9uZGluZyB0byB0aGlzIFVVSUQgd2lsbCBiZSBzdG9yZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBWZW5kb3IgU3BlY2lmaWMgVVVJRC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJZiBwX3ZzX3V1aWQgb3IgcF91dWlkX3R5cGUgaXMgTlVMTCBvciBpbnZhbGlkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9fTUVNIElmIHRoZXJlIGFyZSBubyBtb3JlIGZyZWUgc2xvdHMgZm9yIFZTIFVVSURzLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfVVVJRF9WU19BREQsIHVpbnQzMl90LCBzZF9ibGVfdXVpZF92c19hZGQoYmxlX3V1aWQxMjhfdCBjb25zdCAqcF92c191dWlkLCB1aW50OF90ICpwX3V1aWRfdHlwZSkpOw0KKw0KKw0KKy8qKiBAYnJpZWYgRGVjb2RlIGxpdHRsZSBlbmRpYW4gcmF3IFVVSUQgYnl0ZXMgKDE2LWJpdCBvciAxMjgtYml0KSBpbnRvIGEgMjQgYml0IEByZWYgYmxlX3V1aWRfdCBzdHJ1Y3R1cmUuDQorICoNCisgKiBAZGV0YWlscyBUaGUgcmF3IFVVSUQgYnl0ZXMgZXhjbHVkaW5nIGJ5dGVzIDEyIGFuZCAxMyAoaS5lLiBieXRlcyAwLTExIGFuZCAxNC0xNSkgb2YgcF91dWlkX2xlIGFyZSBjb21wYXJlZA0KKyAqIHRvIHRoZSBjb3JyZXNwb25kaW5nIG9uZXMgaW4gZWFjaCBlbnRyeSBvZiB0aGUgdGFibGUgb2YgdmVuZG9yIHNwZWNpZmljIFVVSURzIHBvcHVsYXRlZCB3aXRoIEByZWYgc2RfYmxlX3V1aWRfdnNfYWRkDQorICogdG8gbG9vayBmb3IgYSBtYXRjaC4gSWYgdGhlcmUgaXMgc3VjaCBhIG1hdGNoLCBieXRlcyAxMiBhbmQgMTMgYXJlIHJldHVybmVkIGFzIHBfdXVpZC0+dXVpZCBhbmQgdGhlIGluZGV4DQorICogcmVsYXRpdmUgdG8gQHJlZiBCTEVfVVVJRF9UWVBFX1ZFTkRPUl9CRUdJTiBhcyBwX3V1aWQtPnR5cGUuDQorICoNCisgKiBAbm90ZSBJZiB0aGUgVVVJRCBsZW5ndGggc3VwcGxpZWQgaXMgMiwgdGhlbiB0aGUgdHlwZSBzZXQgYnkgdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGJlIEByZWYgQkxFX1VVSURfVFlQRV9CTEUuDQorICoNCisgKiBAcGFyYW1baW5dICAgdXVpZF9sZV9sZW4gTGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBwX3V1aWRfbGUgKG11c3QgYmUgMiBvciAxNiBieXRlcykuDQorICogQHBhcmFtW2luXSAgIHBfdXVpZF9sZSAgIFBvaW50ZXIgcG9pbnRpbmcgdG8gbGl0dGxlIGVuZGlhbiByYXcgVVVJRCBieXRlcy4NCisgKiBAcGFyYW1bb3V0XSAgcF91dWlkICAgICAgUG9pbnRlciB0byBhIEByZWYgYmxlX3V1aWRfdCBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkIGluLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBkZWNvZGVkIGludG8gdGhlIEByZWYgYmxlX3V1aWRfdCBzdHJ1Y3R1cmUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9MRU5HVEggSW52YWxpZCBVVUlEIGxlbmd0aC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9GT1VORCBGb3IgYSAxMjgtYml0IFVVSUQsIG5vIG1hdGNoIGluIHRoZSBwb3B1bGF0ZWQgdGFibGUgb2YgVVVJRHMuDQorICovDQorU1ZDQUxMKFNEX0JMRV9VVUlEX0RFQ09ERSwgdWludDMyX3QsIHNkX2JsZV91dWlkX2RlY29kZSh1aW50OF90IHV1aWRfbGVfbGVuLCB1aW50OF90IGNvbnN0ICpwX3V1aWRfbGUsIGJsZV91dWlkX3QgKnBfdXVpZCkpOw0KKw0KKw0KKy8qKiBAYnJpZWYgRW5jb2RlIGEgQHJlZiBibGVfdXVpZF90IHN0cnVjdHVyZSBpbnRvIGxpdHRsZSBlbmRpYW4gcmF3IFVVSUQgYnl0ZXMgKDE2LWJpdCBvciAxMjgtYml0KS4NCisgKg0KKyAqIEBub3RlIFRoZSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgcF91dWlkX2xlIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG9ubHkgdGhlIHZhbGlkaXR5IGFuZCBzaXplIG9mIHBfdXVpZCBpcyBjb21wdXRlZC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gICBwX3V1aWQgICAgICAgIFBvaW50ZXIgdG8gYSBAcmVmIGJsZV91dWlkX3Qgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSBlbmNvZGVkIGludG8gYnl0ZXMuDQorICogQHBhcmFtW291dF0gIHBfdXVpZF9sZV9sZW4gUG9pbnRlciB0byBhIHVpbnQ4X3QgdGhhdCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBlbmNvZGVkIGxlbmd0aCAoMiBvciAxNiBieXRlcykuDQorICogQHBhcmFtW291dF0gIHBfdXVpZF9sZSAgICAgUG9pbnRlciB0byBhIGJ1ZmZlciB3aGVyZSB0aGUgbGl0dGxlIGVuZGlhbiByYXcgVVVJRCBieXRlcyAoMiBvciAxNikgd2lsbCBiZSBzdG9yZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IGVuY29kZWQgaW50byB0aGUgYnVmZmVyLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBVVUlEIHR5cGUuDQorICovDQorU1ZDQUxMKFNEX0JMRV9VVUlEX0VOQ09ERSwgdWludDMyX3QsIHNkX2JsZV91dWlkX2VuY29kZShibGVfdXVpZF90IGNvbnN0ICpwX3V1aWQsIHVpbnQ4X3QgKnBfdXVpZF9sZV9sZW4sIHVpbnQ4X3QgKnBfdXVpZF9sZSkpOw0KKw0KKw0KKy8qKkBicmllZiBHZXQgVmVyc2lvbiBJbmZvcm1hdGlvbi4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgY2FsbCBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgQkxFIHN0YWNrIHZlcnNpb24gaW5mb3JtYXRpb24uDQorICoNCisgKiBAcGFyYW1bb3V0XSBwX3ZlcnNpb24gUG9pbnRlciB0byBhIGJsZV92ZXJzaW9uX3Qgc3RydWN0dXJlIHRvIGJlIGZpbGxlZCBpbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyAgVmVyc2lvbiBpbmZvcm1hdGlvbiBzdG9yZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgVGhlIEJMRSBzdGFjayBpcyBidXN5ICh0eXBpY2FsbHkgZG9pbmcgYSBsb2NhbGx5LWluaXRpYXRlZCBkaXNjb25uZWN0aW9uIHByb2NlZHVyZSkuDQorICovDQorU1ZDQUxMKFNEX0JMRV9WRVJTSU9OX0dFVCwgdWludDMyX3QsIHNkX2JsZV92ZXJzaW9uX2dldChibGVfdmVyc2lvbl90ICpwX3ZlcnNpb24pKTsNCisNCisNCisvKipAYnJpZWYgUHJvdmlkZSBhIHVzZXIgbWVtb3J5IGJsb2NrLg0KKyAqDQorICogQG5vdGUgVGhpcyBjYWxsIGNhbiBvbmx5IGJlIHVzZWQgYXMgYSByZXNwb25zZSB0byBhIEByZWYgQkxFX0VWVF9VU0VSX01FTV9SRVFVRVNUIGV2ZW50IGlzc3VlZCB0byB0aGUgYXBwbGljYXRpb24uDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtpbl0gcF9ibG9jayBQb2ludGVyIHRvIGEgdXNlciBtZW1vcnkgYmxvY2sgc3RydWN0dXJlIG9yIE5VTEwgaWYgbWVtb3J5IGlzIG1hbmFnZWQgYnkgdGhlIGFwcGxpY2F0aW9uLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfTk9CVUZfUEVFUl9DQU5DRUxfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9OT0JVRl9BVVRIX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfTk9CVUZfTk9BVVRIX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfQlVGX0FVVEhfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9CVUZfTk9BVVRIX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfUVVFVUVfRlVMTF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgcXVldWVkIGEgcmVzcG9uc2UgdG8gdGhlIHBlZXIuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9MRU5HVEggSW52YWxpZCB1c2VyIG1lbW9yeSBibG9jayBsZW5ndGggc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgQ29ubmVjdGlvbiBzdGF0ZSBvciBubyB1c2VyIG1lbW9yeSByZXF1ZXN0IHBlbmRpbmcuDQorICovDQorU1ZDQUxMKFNEX0JMRV9VU0VSX01FTV9SRVBMWSwgdWludDMyX3QsIHNkX2JsZV91c2VyX21lbV9yZXBseSh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX3VzZXJfbWVtX2Jsb2NrX3QgY29uc3QgKnBfYmxvY2spKTsNCisNCisvKipAYnJpZWYgU2V0IGEgQkxFIG9wdGlvbi4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgY2FsbCBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIHNldCB0aGUgdmFsdWUgb2YgYW4gb3B0aW9uLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0JPTkRJTkdfU1RBVElDX1BLX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBvcHRfaWQgT3B0aW9uIElELCBzZWUgQHJlZiBCTEVfQ09NTU9OX09QVFMgYW5kIEByZWYgQkxFX0dBUF9PUFRTLg0KKyAqIEBwYXJhbVtpbl0gcF9vcHQgUG9pbnRlciB0byBhIGJsZV9vcHRfdCBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgb3B0aW9uIHZhbHVlLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTICBPcHRpb24gc2V0IHN1Y2Nlc3NmdWxseS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLCBjaGVjayBwYXJhbWV0ZXIgbGltaXRzIGFuZCBjb25zdHJhaW50cy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgVW5hYmxlIHRvIHNldCB0aGUgcGFyYW1ldGVyIGF0IHRoaXMgdGltZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgVGhlIEJMRSBzdGFjayBpcyBidXN5IG9yIHRoZSBwcmV2aW91cyBwcm9jZWR1cmUgaGFzIG5vdCBjb21wbGV0ZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9PUFRfU0VULCB1aW50MzJfdCwgc2RfYmxlX29wdF9zZXQodWludDMyX3Qgb3B0X2lkLCBibGVfb3B0X3QgY29uc3QgKnBfb3B0KSk7DQorDQorDQorLyoqQGJyaWVmIEdldCBhIEJMRSBvcHRpb24uDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGNhbGwgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byByZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYW4gb3B0aW9uLg0KKyAqDQorICogQHBhcmFtW2luXSBvcHRfaWQgT3B0aW9uIElELCBzZWUgQHJlZiBCTEVfQ09NTU9OX09QVFMgYW5kIEByZWYgQkxFX0dBUF9PUFRTLg0KKyAqIEBwYXJhbVtvdXRdIHBfb3B0IFBvaW50ZXIgdG8gYSBibGVfb3B0X3Qgc3RydWN0dXJlIHRvIGJlIGZpbGxlZCBpbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyAgT3B0aW9uIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZCwgY2hlY2sgcGFyYW1ldGVyIGxpbWl0cyBhbmQgY29uc3RyYWludHMuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIFVuYWJsZSB0byByZXRyaWV2ZSB0aGUgcGFyYW1ldGVyIGF0IHRoaXMgdGltZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgVGhlIEJMRSBzdGFjayBpcyBidXN5IG9yIHRoZSBwcmV2aW91cyBwcm9jZWR1cmUgaGFzIG5vdCBjb21wbGV0ZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfU1VQUE9SVEVEIFRoaXMgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuDQorICoNCisgKi8NCitTVkNBTEwoU0RfQkxFX09QVF9HRVQsIHVpbnQzMl90LCBzZF9ibGVfb3B0X2dldCh1aW50MzJfdCBvcHRfaWQsIGJsZV9vcHRfdCAqcF9vcHQpKTsNCisNCisvKiogQH0gKi8NCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8qIEJMRV9IX18gKi8NCisNCisvKioNCisgIEB9DQorICBAfQ0KKyovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfZXJyLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWNkYjM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfZXJyLmgKQEAgLTAsMCArMSw5MSBAQAorLyoNCisgKiBDb3B5cmlnaHQgKGMpIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2Ygb3RoZXINCisgKiAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KKyAqICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiAgIDQuIFRoaXMgc29mdHdhcmUgbXVzdCBvbmx5IGJlIHVzZWQgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYw0KKyAqICAgU2VtaWNvbmR1Y3RvciBBU0EsIG9yIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBhIHRoaXJkIHBhcnR5IHRoYXQNCisgKiAgIGlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljIFNlbWljb25kdWN0b3IuDQorICoNCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisvKioNCisgIEBhZGR0b2dyb3VwIEJMRV9DT01NT04NCisgIEB7DQorICBAYWRkdG9ncm91cCAgbnJmX2Vycm9yDQorICBAew0KKyAgICBAaW5ncm91cCBCTEVfQ09NTU9ODQorICBAfQ0KKw0KKyAgQGRlZmdyb3VwIGJsZV9lcnIgR2VuZXJhbCBlcnJvciBjb2Rlcw0KKyAgQHsNCisNCisgIEBicmllZiBHZW5lcmFsIGVycm9yIGNvZGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBCTEUgQVBJLg0KKw0KKyAgQGluZ3JvdXAgQkxFX0NPTU1PTg0KKyovDQorI2lmbmRlZiBOUkZfQkxFX0VSUl9IX18NCisjZGVmaW5lIE5SRl9CTEVfRVJSX0hfXw0KKw0KKyNpbmNsdWRlICJucmZfZXJyb3IuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBAZGVmZ3JvdXAgQkxFX0VSUk9SUyBFcnJvciBDb2Rlcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfRVJST1JfTk9UX0VOQUJMRUQgICAgICAgICAgICAoTlJGX0VSUk9SX1NUS19CQVNFX05VTSsweDAwMSkgLyoqPCBAcmVmIHNkX2JsZV9lbmFibGUgaGFzIG5vdCBiZWVuIGNhbGxlZC4gKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFICAgIChOUkZfRVJST1JfU1RLX0JBU0VfTlVNKzB4MDAyKSAvKio8IEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUuICovDQorI2RlZmluZSBCTEVfRVJST1JfSU5WQUxJRF9BVFRSX0hBTkRMRSAgICAoTlJGX0VSUk9SX1NUS19CQVNFX05VTSsweDAwMykgLyoqPCBJbnZhbGlkIGF0dHJpYnV0ZSBoYW5kbGUuICovDQorI2RlZmluZSBCTEVfRVJST1JfTk9fVFhfUEFDS0VUUyAgICAgICAgICAoTlJGX0VSUk9SX1NUS19CQVNFX05VTSsweDAwNCkgLyoqPCBOb3QgZW5vdWdoIGFwcGxpY2F0aW9uIHBhY2tldHMgYXZhaWxhYmxlIG9uIHRoaXMgY29ubmVjdGlvbi4gKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9JTlZBTElEX1JPTEUgICAgICAgICAgIChOUkZfRVJST1JfU1RLX0JBU0VfTlVNKzB4MDA1KSAvKio8IEludmFsaWQgcm9sZS4gKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9CTE9DS0VEX0JZX09USEVSX0xJTktTIChOUkZfRVJST1JfU1RLX0JBU0VfTlVNKzB4MDA2KSAvKio8IFRoZSBhdHRlbXB0IHRvIGNoYW5nZSBsaW5rIHNldHRpbmdzIGZhaWxlZCBkdWUgdG8gdGhlIHNjaGVkdWxpbmcgb2Ygb3RoZXIgbGlua3MuICovDQorLyoqIEB9ICovDQorDQorDQorLyoqIEBkZWZncm91cCBCTEVfRVJST1JfU1VCUkFOR0VTIE1vZHVsZSBzcGVjaWZpYyBlcnJvciBjb2RlIHN1YnJhbmdlcw0KKyAqICBAYnJpZWYgQXNzaWdubWVudCBvZiBzdWJyYW5nZXMgZm9yIG1vZHVsZSBzcGVjaWZpYyBlcnJvciBjb2Rlcy4NCisgKiAgQG5vdGUgRm9yIHNwZWNpZmljIGVycm9yIGNvZGVzLCBzZWUgYmxlXzxtb2R1bGU+Lmggb3IgYmxlX2Vycm9yXzxtb2R1bGU+LmguDQorICogQHsgKi8NCisjZGVmaW5lIE5SRl9MMkNBUF9FUlJfQkFTRSAgICAgICAgICAgICAoTlJGX0VSUk9SX1NUS19CQVNFX05VTSsweDEwMCkgLyoqPCBMMkNBUCBzcGVjaWZpYyBlcnJvcnMuICovDQorI2RlZmluZSBOUkZfR0FQX0VSUl9CQVNFICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9TVEtfQkFTRV9OVU0rMHgyMDApIC8qKjwgR0FQIHNwZWNpZmljIGVycm9ycy4gKi8NCisjZGVmaW5lIE5SRl9HQVRUQ19FUlJfQkFTRSAgICAgICAgICAgICAoTlJGX0VSUk9SX1NUS19CQVNFX05VTSsweDMwMCkgLyoqPCBHQVRUIGNsaWVudCBzcGVjaWZpYyBlcnJvcnMuICovDQorI2RlZmluZSBOUkZfR0FUVFNfRVJSX0JBU0UgICAgICAgICAgICAgKE5SRl9FUlJPUl9TVEtfQkFTRV9OVU0rMHg0MDApIC8qKjwgR0FUVCBzZXJ2ZXIgc3BlY2lmaWMgZXJyb3JzLiAqLw0KKy8qKiBAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYNCisNCisNCisvKioNCisgIEB9DQorICBAfQ0KKyovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfZ2FwLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQyNzcyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfZ2FwLmgKQEAgLTAsMCArMSwyMjExIEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAgQGFkZHRvZ3JvdXAgQkxFX0dBUCBHZW5lcmljIEFjY2VzcyBQcm9maWxlIChHQVApDQorICBAew0KKyAgQGJyaWVmIERlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgR0FQIGludGVyZmFjZS4NCisgKi8NCisNCisjaWZuZGVmIEJMRV9HQVBfSF9fDQorI2RlZmluZSBCTEVfR0FQX0hfXw0KKw0KKw0KKyNpbmNsdWRlICJibGVfdHlwZXMuaCINCisjaW5jbHVkZSAiYmxlX3Jhbmdlcy5oIg0KKyNpbmNsdWRlICJucmZfc3ZjLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqQGFkZHRvZ3JvdXAgQkxFX0dBUF9FTlVNRVJBVElPTlMgRW51bWVyYXRpb25zDQorICogQHsgKi8NCisNCisvKipAYnJpZWYgR0FQIEFQSSBTVkMgbnVtYmVycy4NCisgKi8NCitlbnVtIEJMRV9HQVBfU1ZDUw0KK3sNCisgIFNEX0JMRV9HQVBfQUREUl9TRVQgPSBCTEVfR0FQX1NWQ19CQVNFLCAgICAgICAvKio8IFNldCBvd24gQmx1ZXRvb3RoIEFkZHJlc3MuICovDQorICBTRF9CTEVfR0FQX0FERFJfR0VULCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBHZXQgb3duIEJsdWV0b290aCBBZGRyZXNzLiAqLw0KKyAgU0RfQkxFX0dBUF9XSElURUxJU1RfU0VULCAgICAgICAgICAgICAgICAgICAgIC8qKjwgU2V0IGFjdGl2ZSB3aGl0ZWxpc3QuICovDQorICBTRF9CTEVfR0FQX0RFVklDRV9JREVOVElUSUVTX1NFVCwgICAgICAgICAgICAgLyoqPCBTZXQgZGV2aWNlIGlkZW50aXR5IGxpc3QuICovDQorICBTRF9CTEVfR0FQX1BSSVZBQ1lfU0VULCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgUHJpdmFjeSBzZXR0aW5ncyovDQorICBTRF9CTEVfR0FQX1BSSVZBQ1lfR0VULCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBHZXQgUHJpdmFjeSBzZXR0aW5ncyovDQorICBTRF9CTEVfR0FQX0FEVl9EQVRBX1NFVCwgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgQWR2ZXJ0aXNpbmcgRGF0YS4gKi8NCisgIFNEX0JMRV9HQVBfQURWX1NUQVJULCAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXJ0IEFkdmVydGlzaW5nLiAqLw0KKyAgU0RfQkxFX0dBUF9BRFZfU1RPUCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RvcCBBZHZlcnRpc2luZy4gKi8NCisgIFNEX0JMRV9HQVBfQ09OTl9QQVJBTV9VUERBVEUsICAgICAgICAgICAgICAgICAvKio8IENvbm5lY3Rpb24gUGFyYW1ldGVyIFVwZGF0ZS4gKi8NCisgIFNEX0JMRV9HQVBfRElTQ09OTkVDVCwgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERpc2Nvbm5lY3QuICovDQorICBTRF9CTEVfR0FQX1RYX1BPV0VSX1NFVCwgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgVFggUG93ZXIuICovDQorICBTRF9CTEVfR0FQX0FQUEVBUkFOQ0VfU0VULCAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgQXBwZWFyYW5jZS4gKi8NCisgIFNEX0JMRV9HQVBfQVBQRUFSQU5DRV9HRVQsICAgICAgICAgICAgICAgICAgICAvKio8IEdldCBBcHBlYXJhbmNlLiAqLw0KKyAgU0RfQkxFX0dBUF9QUENQX1NFVCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU2V0IFBQQ1AuICovDQorICBTRF9CTEVfR0FQX1BQQ1BfR0VULCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBHZXQgUFBDUC4gKi8NCisgIFNEX0JMRV9HQVBfREVWSUNFX05BTUVfU0VULCAgICAgICAgICAgICAgICAgICAvKio8IFNldCBEZXZpY2UgTmFtZS4gKi8NCisgIFNEX0JMRV9HQVBfREVWSUNFX05BTUVfR0VULCAgICAgICAgICAgICAgICAgICAvKio8IEdldCBEZXZpY2UgTmFtZS4gKi8NCisgIFNEX0JMRV9HQVBfQVVUSEVOVElDQVRFLCAgICAgICAgICAgICAgICAgICAgICAvKio8IEluaXRpYXRlIFBhaXJpbmcvQm9uZGluZy4gKi8NCisgIFNEX0JMRV9HQVBfU0VDX1BBUkFNU19SRVBMWSwgICAgICAgICAgICAgICAgICAvKio8IFJlcGx5IHdpdGggU2VjdXJpdHkgUGFyYW1ldGVycy4gKi8NCisgIFNEX0JMRV9HQVBfQVVUSF9LRVlfUkVQTFksICAgICAgICAgICAgICAgICAgICAvKio8IFJlcGx5IHdpdGggYW4gYXV0aGVudGljYXRpb24ga2V5LiAqLw0KKyAgU0RfQkxFX0dBUF9MRVNDX0RIS0VZX1JFUExZLCAgICAgICAgICAgICAgICAgIC8qKjwgUmVwbHkgd2l0aCBhbiBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgREhLZXkuICovDQorICBTRF9CTEVfR0FQX0tFWVBSRVNTX05PVElGWSwgICAgICAgICAgICAgICAgICAgLyoqPCBOb3RpZnkgb2YgYSBrZXlwcmVzcyBkdXJpbmcgYW4gYXV0aGVudGljYXRpb24gcHJvY2VkdXJlLiAqLw0KKyAgU0RfQkxFX0dBUF9MRVNDX09PQl9EQVRBX0dFVCwgICAgICAgICAgICAgICAgIC8qKjwgR2V0IHRoZSBsb2NhbCBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgT09CIGRhdGEuICovDQorICBTRF9CTEVfR0FQX0xFU0NfT09CX0RBVEFfU0VULCAgICAgICAgICAgICAgICAgLyoqPCBTZXQgdGhlIHJlbW90ZSBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgT09CIGRhdGEuICovDQorICBTRF9CTEVfR0FQX0VOQ1JZUFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJbml0aWF0ZSBlbmNyeXB0aW9uIHByb2NlZHVyZS4gKi8NCisgIFNEX0JMRV9HQVBfU0VDX0lORk9fUkVQTFksICAgICAgICAgICAgICAgICAgICAvKio8IFJlcGx5IHdpdGggU2VjdXJpdHkgSW5mb3JtYXRpb24uICovDQorICBTRF9CTEVfR0FQX0NPTk5fU0VDX0dFVCwgICAgICAgICAgICAgICAgICAgICAgLyoqPCBPYnRhaW4gY29ubmVjdGlvbiBzZWN1cml0eSBsZXZlbC4gKi8NCisgIFNEX0JMRV9HQVBfUlNTSV9TVEFSVCwgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXJ0IHJlcG9ydGluZyBvZiBjaGFuZ2VzIGluIFJTU0kuICovDQorICBTRF9CTEVfR0FQX1JTU0lfU1RPUCwgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdG9wIHJlcG9ydGluZyBvZiBjaGFuZ2VzIGluIFJTU0kuICovDQorICBTRF9CTEVfR0FQX1NDQU5fU1RBUlQsICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGFydCBTY2FubmluZy4gKi8NCisgIFNEX0JMRV9HQVBfU0NBTl9TVE9QLCAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0b3AgU2Nhbm5pbmcuICovDQorICBTRF9CTEVfR0FQX0NPTk5FQ1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb25uZWN0LiAqLw0KKyAgU0RfQkxFX0dBUF9DT05ORUNUX0NBTkNFTCwgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2FuY2VsIG9uZ29pbmcgY29ubmVjdGlvbiBwcm9jZWR1cmUuICovDQorICBTRF9CTEVfR0FQX1JTU0lfR0VULCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBHZXQgdGhlIGxhc3QgUlNTSSBzYW1wbGUuICovDQorICBTRF9CTEVfR0FQX1BIWV9SRVFVRVNULCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJbml0aWF0ZSBQSFkgVXBkYXRlIHByb2NlZHVyZS4gKi8NCisgIFNEX0JMRV9HQVBfREFUQV9MRU5HVEhfVVBEQVRFLCAgICAgICAgICAgICAgICAvKio8IEluaXRpYXRlIG9yIHJlc3BvbmQgdG8gYSBEYXRhIExlbmd0aCBVcGRhdGUgUHJvY2VkdXJlLiAqLw0KK307DQorDQorLyoqQGJyaWVmIEdBUCBFdmVudCBJRHMuDQorICogSURzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYW4gZXZlbnQgY29taW5nIGZyb20gdGhlIHN0YWNrIHRvIHRoZSBhcHBsaWNhdGlvbi4NCisgKi8NCitlbnVtIEJMRV9HQVBfRVZUUw0KK3sNCisgIEJMRV9HQVBfRVZUX0NPTk5FQ1RFRCAgPSBCTEVfR0FQX0VWVF9CQVNFLCAgICAvKio8IENvbm5lY3Rpb24gZXN0YWJsaXNoZWQuICAgICAgICAgICAgICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X2Nvbm5lY3RlZF90LiAgICAgICAgICAgICovDQorICBCTEVfR0FQX0VWVF9ESVNDT05ORUNURUQsICAgICAgICAgICAgICAgICAgICAgLyoqPCBEaXNjb25uZWN0ZWQgZnJvbSBwZWVyLiAgICAgICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9kaXNjb25uZWN0ZWRfdC4gICAgICAgICAqLw0KKyAgQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEUsICAgICAgICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBQYXJhbWV0ZXJzIHVwZGF0ZWQuICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfY29ubl9wYXJhbV91cGRhdGVfdC4gICAgKi8NCisgIEJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCwgICAgICAgICAgICAgICAvKio8IFJlcXVlc3QgdG8gcHJvdmlkZSBzZWN1cml0eSBwYXJhbWV0ZXJzLiAgICAgICAgIFxuIFJlcGx5IHdpdGggQHJlZiBzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkuICBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9zZWNfcGFyYW1zX3JlcXVlc3RfdC4gKi8NCisgIEJMRV9HQVBfRVZUX1NFQ19JTkZPX1JFUVVFU1QsICAgICAgICAgICAgICAgICAvKio8IFJlcXVlc3QgdG8gcHJvdmlkZSBzZWN1cml0eSBpbmZvcm1hdGlvbi4gICAgICAgIFxuIFJlcGx5IHdpdGggQHJlZiBzZF9ibGVfZ2FwX3NlY19pbmZvX3JlcGx5LiAgICBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9zZWNfaW5mb19yZXF1ZXN0X3QuICAgKi8NCisgIEJMRV9HQVBfRVZUX1BBU1NLRVlfRElTUExBWSwgICAgICAgICAgICAgICAgICAvKio8IFJlcXVlc3QgdG8gZGlzcGxheSBhIHBhc3NrZXkgdG8gdGhlIHVzZXIuICAgICAgIFxuIEluIExFU0MgTnVtZXJpYyBDb21wYXJpc29uLCByZXBseSB3aXRoIEByZWYgc2RfYmxlX2dhcF9hdXRoX2tleV9yZXBseS4gXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfcGFzc2tleV9kaXNwbGF5X3QuICovDQorICBCTEVfR0FQX0VWVF9LRVlfUFJFU1NFRCwgICAgICAgICAgICAgICAgICAgICAgLyoqPCBOb3RpZmljYXRpb24gb2YgYSBrZXlwcmVzcyBvbiB0aGUgcmVtb3RlIGRldmljZS5cbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9rZXlfcHJlc3NlZF90ICAgICAgICAgICAqLw0KKyAgQkxFX0dBUF9FVlRfQVVUSF9LRVlfUkVRVUVTVCwgICAgICAgICAgICAgICAgIC8qKjwgUmVxdWVzdCB0byBwcm92aWRlIGFuIGF1dGhlbnRpY2F0aW9uIGtleS4gICAgICAgXG4gUmVwbHkgd2l0aCBAcmVmIHNkX2JsZV9nYXBfYXV0aF9rZXlfcmVwbHkuICAgIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X2F1dGhfa2V5X3JlcXVlc3RfdC4gICAqLw0KKyAgQkxFX0dBUF9FVlRfTEVTQ19ESEtFWV9SRVFVRVNULCAgICAgICAgICAgICAgIC8qKjwgUmVxdWVzdCB0byBjYWxjdWxhdGUgYW4gTEUgU2VjdXJlIENvbm5lY3Rpb25zIERIS2V5LiBcbiBSZXBseSB3aXRoIEByZWYgc2RfYmxlX2dhcF9sZXNjX2Roa2V5X3JlcGx5LiAgXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfbGVzY19kaGtleV9yZXF1ZXN0X3QgKi8NCisgIEJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTLCAgICAgICAgICAgICAgICAgICAgICAvKio8IEF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZSBjb21wbGV0ZWQgd2l0aCBzdGF0dXMuIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X2F1dGhfc3RhdHVzX3QuICAgICAgICAgICovDQorICBCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUsICAgICAgICAgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIHNlY3VyaXR5IHVwZGF0ZWQuICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9jb25uX3NlY191cGRhdGVfdC4gICAgICAqLw0KKyAgQkxFX0dBUF9FVlRfVElNRU9VVCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGltZW91dCBleHBpcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfdGltZW91dF90LiAgICAgICAgICAgICAgKi8NCisgIEJMRV9HQVBfRVZUX1JTU0lfQ0hBTkdFRCwgICAgICAgICAgICAgICAgICAgICAvKio8IFJTU0kgcmVwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X3Jzc2lfY2hhbmdlZF90LiAgICAgICAgICovDQorICBCTEVfR0FQX0VWVF9BRFZfUkVQT1JULCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBZHZlcnRpc2luZyByZXBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9hZHZfcmVwb3J0X3QuICAgICAgICAgICAqLw0KKyAgQkxFX0dBUF9FVlRfU0VDX1JFUVVFU1QsICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU2VjdXJpdHkgUmVxdWVzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfc2VjX3JlcXVlc3RfdC4gICAgICAgICAgKi8NCisgIEJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFX1JFUVVFU1QsICAgICAgICAvKio8IENvbm5lY3Rpb24gUGFyYW1ldGVyIFVwZGF0ZSBSZXF1ZXN0LiAgICAgICAgICAgIFxuIFJlcGx5IHdpdGggQHJlZiBzZF9ibGVfZ2FwX2Nvbm5fcGFyYW1fdXBkYXRlLiBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9jb25uX3BhcmFtX3VwZGF0ZV9yZXF1ZXN0X3QuICovDQorICBCTEVfR0FQX0VWVF9TQ0FOX1JFUV9SRVBPUlQsICAgICAgICAgICAgICAgICAgLyoqPCBTY2FuIHJlcXVlc3QgcmVwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9zY2FuX3JlcV9yZXBvcnRfdC4gKi8NCisgIEJMRV9HQVBfRVZUX1BIWV9VUERBVEUsICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBIWSBoYXZlIGJlZW4gdXBkYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X3BoeV91cGRhdGVfdC4gICAgICAgICAgICovDQorICBCTEVfR0FQX0VWVF9EQVRBX0xFTkdUSF9VUERBVEVfUkVRVUVTVCwgICAgICAgLyoqPCBEYXRhIExlbmd0aCBVcGRhdGUgcmVxdWVzdC4gICAgICAgICAgICAgICAgICAgICBcbiBSZXBseSB3aXRoIEByZWYgc2RfYmxlX2dhcF9kYXRhX2xlbmd0aF91cGRhdGUuXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfZGF0YV9sZW5ndGhfdXBkYXRlX3JlcXVlc3RfdC4gKi8NCisgIEJMRV9HQVBfRVZUX0RBVEFfTEVOR1RIX1VQREFURSwgICAgICAgICAgICAgICAvKio8IExMIERhdGEgQ2hhbm5lbCBQRFUgcGF5bG9hZCBsZW5ndGggdXBkYXRlZC4gICAgIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X2RhdGFfbGVuZ3RoX3VwZGF0ZV90LiAqLw0KK307DQorDQorLyoqQGJyaWVmIEdBUCBPcHRpb24gSURzLg0KKyAqIElEcyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZ5IGEgR0FQIG9wdGlvbi4NCisgKi8NCitlbnVtIEJMRV9HQVBfT1BUUw0KK3sNCisgIEJMRV9HQVBfT1BUX0NIX01BUCAgPSBCTEVfR0FQX09QVF9CQVNFLCAgICAgICAvKio8IENoYW5uZWwgTWFwLiBAcmVmIGJsZV9nYXBfb3B0X2NoX21hcF90ICAqLw0KKyAgQkxFX0dBUF9PUFRfTE9DQUxfQ09OTl9MQVRFTkNZLCAgICAgICAgICAgICAgIC8qKjwgTG9jYWwgY29ubmVjdGlvbiBsYXRlbmN5LiBAcmVmIGJsZV9nYXBfb3B0X2xvY2FsX2Nvbm5fbGF0ZW5jeV90ICovDQorICBCTEVfR0FQX09QVF9QQVNTS0VZLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgcGFzc2tleS4gQHJlZiBibGVfZ2FwX29wdF9wYXNza2V5X3QgKi8NCisgIEJMRV9HQVBfT1BUX1NDQU5fUkVRX1JFUE9SVCwgICAgICAgICAgICAgICAgICAvKio8IFNjYW4gcmVxdWVzdCByZXBvcnQuIEByZWYgYmxlX2dhcF9vcHRfc2Nhbl9yZXFfcmVwb3J0X3QgKi8NCisgIEJMRV9HQVBfT1BUX0NPTVBBVF9NT0RFXzEsICAgICAgICAgICAgICAgICAgICAvKio8IENvbXBhdGliaWxpdHkgbW9kZS4gQHJlZiBibGVfZ2FwX29wdF9jb21wYXRfbW9kZV8xX3QgKi8NCisgIEJMRV9HQVBfT1BUX0NPTVBBVF9NT0RFXzIsICAgICAgICAgICAgICAgICAgICAvKio8IENvbXBhdGliaWxpdHkgbW9kZS4gQHJlZiBibGVfZ2FwX29wdF9jb21wYXRfbW9kZV8yX3QgKi8NCisgIEJMRV9HQVBfT1BUX0FVVEhfUEFZTE9BRF9USU1FT1VULCAgICAgICAgICAgICAvKio8IFNldCBBdXRoZW50aWNhdGVkIHBheWxvYWQgdGltZW91dC4gQHJlZiBibGVfZ2FwX29wdF9hdXRoX3BheWxvYWRfdGltZW91dF90ICovDQorICBCTEVfR0FQX09QVF9QUkVGRVJSRURfUEhZU19TRVQsICAgICAgICAgICAgICAgLyoqPCBTZXQgdGhlIHByZWZlcnJlZCBQSFlzIGZvciBhbGwgbmV3IGNvbm5lY3Rpb25zLiBAcmVmIGJsZV9nYXBfb3B0X3ByZWZlcnJlZF9waHlzX3QgKi8NCisgIEJMRV9HQVBfT1BUX1NMQVZFX0xBVEVOQ1lfRElTQUJMRSwgICAgICAgICAgICAvKio8IERpc2FibGUgc2xhdmUgbGF0ZW5jeS4gQHJlZiBibGVfZ2FwX29wdF9zbGF2ZV9sYXRlbmN5X2Rpc2FibGVfdCAqLw0KK307DQorDQorLyoqQGJyaWVmIEdBUCBDb25maWd1cmF0aW9uIElEcy4NCisgKg0KKyAqIElEcyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZ5IGEgR0FQIGNvbmZpZ3VyYXRpb24uDQorICovDQorZW51bSBCTEVfR0FQX0NGR1MNCit7DQorICBCTEVfR0FQX0NGR19ST0xFX0NPVU5UID0gQkxFX0dBUF9DRkdfQkFTRSwgIC8qKjwgUm9sZSBjb3VudCBjb25maWd1cmF0aW9uLiAqLw0KKyAgQkxFX0dBUF9DRkdfREVWSUNFX05BTUUsICAgICAgICAgICAgICAgICAgICAvKio8IERldmljZSBuYW1lIGNvbmZpZ3VyYXRpb24uICovDQorfTsNCisNCisvKiogQH0gKi8NCisNCisvKipAYWRkdG9ncm91cCBCTEVfR0FQX0RFRklORVMgRGVmaW5lcw0KKyAqIEB7ICovDQorDQorLyoqQGRlZmdyb3VwIEJMRV9FUlJPUlNfR0FQIFNWQyByZXR1cm4gdmFsdWVzIHNwZWNpZmljIHRvIEdBUA0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfRVJST1JfR0FQX1VVSURfTElTVF9NSVNNQVRDSCAgICAgICAgICAgIChOUkZfR0FQX0VSUl9CQVNFICsgMHgwMDApICAvKio8IFVVSUQgbGlzdCBkb2VzIG5vdCBjb250YWluIGFuIGludGVncmFsIG51bWJlciBvZiBVVUlEcy4gKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9HQVBfRElTQ09WRVJBQkxFX1dJVEhfV0hJVEVMSVNUICAgKE5SRl9HQVBfRVJSX0JBU0UgKyAweDAwMSkgIC8qKjwgVXNlIG9mIFdoaXRlbGlzdCBub3QgcGVybWl0dGVkIHdpdGggZGlzY292ZXJhYmxlIGFkdmVydGlzaW5nLiAqLw0KKyNkZWZpbmUgQkxFX0VSUk9SX0dBUF9JTlZBTElEX0JMRV9BRERSICAgICAgICAgICAgICAoTlJGX0dBUF9FUlJfQkFTRSArIDB4MDAyKSAgLyoqPCBUaGUgdXBwZXIgdHdvIGJpdHMgb2YgdGhlIGFkZHJlc3MgZG8gbm90IGNvcnJlc3BvbmQgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzIHR5cGUuICovDQorI2RlZmluZSBCTEVfRVJST1JfR0FQX1dISVRFTElTVF9JTl9VU0UgICAgICAgICAgICAgIChOUkZfR0FQX0VSUl9CQVNFICsgMHgwMDMpICAvKio8IEF0dGVtcHQgdG8gbW9kaWZ5IHRoZSB3aGl0ZWxpc3Qgd2hpbGUgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBvcGVyYXRpb24uICovDQorI2RlZmluZSBCTEVfRVJST1JfR0FQX0RFVklDRV9JREVOVElUSUVTX0lOX1VTRSAgICAgIChOUkZfR0FQX0VSUl9CQVNFICsgMHgwMDQpICAvKio8IEF0dGVtcHQgdG8gbW9kaWZ5IHRoZSBkZXZpY2UgaWRlbnRpdHkgbGlzdCB3aGlsZSBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIG9wZXJhdGlvbi4gKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9HQVBfREVWSUNFX0lERU5USVRJRVNfRFVQTElDQVRFICAgKE5SRl9HQVBfRVJSX0JBU0UgKyAweDAwNSkgIC8qKjwgVGhlIGRldmljZSBpZGVudGl0eSBsaXN0IGNvbnRhaW5zIGVudHJpZXMgd2l0aCBkdXBsaWNhdGUgaWRlbnRpdHkgYWRkcmVzc2VzLiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfUk9MRVMgR0FQIFJvbGVzDQorICogQG5vdGUgTm90IGV4cGxpY2l0bHkgdXNlZCBpbiBwZXJpcGhlcmFsIEFQSSwgYnV0IHdpbGwgYmUgcmVsZXZhbnQgZm9yIGNlbnRyYWwgQVBJLg0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX1JPTEVfSU5WQUxJRCAgICAgMHgwICAgICAgICAgICAgLyoqPCBJbnZhbGlkIFJvbGUuICovDQorI2RlZmluZSBCTEVfR0FQX1JPTEVfUEVSSVBIICAgICAgMHgxICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIFJvbGUuICovDQorI2RlZmluZSBCTEVfR0FQX1JPTEVfQ0VOVFJBTCAgICAgMHgyICAgICAgICAgICAgLyoqPCBDZW50cmFsIFJvbGUuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9USU1FT1VUX1NPVVJDRVMgR0FQIFRpbWVvdXQgc291cmNlcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX1RJTUVPVVRfU1JDX0FEVkVSVElTSU5HICAgICAgICAgICAgICAgIDB4MDAgLyoqPCBBZHZlcnRpc2luZyB0aW1lb3V0LiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9USU1FT1VUX1NSQ19TRUNVUklUWV9SRVFVRVNUICAgICAgICAgICAweDAxIC8qKjwgU2VjdXJpdHkgcmVxdWVzdCB0aW1lb3V0LiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9USU1FT1VUX1NSQ19TQ0FOICAgICAgICAgICAgICAgICAgICAgICAweDAyIC8qKjwgU2Nhbm5pbmcgdGltZW91dC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfVElNRU9VVF9TUkNfQ09OTiAgICAgICAgICAgICAgICAgICAgICAgMHgwMyAvKio8IENvbm5lY3Rpb24gdGltZW91dC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfVElNRU9VVF9TUkNfQVVUSF9QQVlMT0FEICAgICAgICAgICAgICAgMHgwNCAvKio8IEF1dGhlbnRpY2F0ZWQgcGF5bG9hZCB0aW1lb3V0LiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfQUREUl9UWVBFUyBHQVAgQWRkcmVzcyB0eXBlcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX0FERFJfVFlQRV9QVUJMSUMgICAgICAgICAgICAgICAgICAgICAgICAweDAwIC8qKjwgUHVibGljIGFkZHJlc3MuICovDQorI2RlZmluZSBCTEVfR0FQX0FERFJfVFlQRV9SQU5ET01fU1RBVElDICAgICAgICAgICAgICAgICAweDAxIC8qKjwgUmFuZG9tIHN0YXRpYyBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRERSX1RZUEVfUkFORE9NX1BSSVZBVEVfUkVTT0xWQUJMRSAgICAgMHgwMiAvKio8IFJhbmRvbSBwcml2YXRlIHJlc29sdmFibGUgYWRkcmVzcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQUREUl9UWVBFX1JBTkRPTV9QUklWQVRFX05PTl9SRVNPTFZBQkxFIDB4MDMgLyoqPCBSYW5kb20gcHJpdmF0ZSBub24tcmVzb2x2YWJsZSBhZGRyZXNzLiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGJyaWVmIFRoZSBkZWZhdWx0IGludGVydmFsIGluIHNlY29uZHMgYXQgd2hpY2ggYSBwcml2YXRlIGFkZHJlc3MgaXMgcmVmcmVzaGVkLiAgKi8NCisjZGVmaW5lIEJMRV9HQVBfREVGQVVMVF9QUklWQVRFX0FERFJfQ1lDTEVfSU5URVJWQUxfUyAoOTAwKSAvKiAxNSBtaW51dGVzLiAqLw0KKy8qKkBicmllZiBUaGUgbWF4aW11bSBpbnRlcnZhbCBpbiBzZWNvbmRzIGF0IHdoaWNoIGEgcHJpdmF0ZSBhZGRyZXNzIGNhbiBiZSByZWZyZXNoZWQuICAqLw0KKyNkZWZpbmUgQkxFX0dBUF9NQVhfUFJJVkFURV9BRERSX0NZQ0xFX0lOVEVSVkFMX1MgICAgICg0MTQwMCkgLyogMTEgaG91cnMgMzAgbWludXRlcy4gKi8NCisNCisNCisvKiogQGJyaWVmIEJMRSBhZGRyZXNzIGxlbmd0aC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQUREUl9MRU4gKDYpDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfUFJJVkFDWV9NT0RFUyBQcml2YWN5IG1vZGVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfUFJJVkFDWV9NT0RFX09GRiAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAvKio8IERldmljZSB3aWxsIHNlbmQgYW5kIGFjY2VwdCBpdHMgaWRlbnRpdHkgYWRkcmVzcyBmb3IgaXRzIG93biBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9QUklWQUNZX01PREVfREVWSUNFX1BSSVZBQ1kgICAgICAgICAgICAweDAxIC8qKjwgRGV2aWNlIHdpbGwgc2VuZCBhbmQgYWNjZXB0IG9ubHkgcHJpdmF0ZSBhZGRyZXNzZXMgZm9yIGl0cyBvd24gYWRkcmVzcy4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX0FEX1RZUEVfREVGSU5JVElPTlMgR0FQIEFkdmVydGlzaW5nIGFuZCBTY2FuIFJlc3BvbnNlIERhdGEgZm9ybWF0DQorICogQG5vdGUgRm91bmQgYXQgaHR0cHM6Ly93d3cuYmx1ZXRvb3RoLm9yZy9UZWNobmljYWwvQXNzaWduZWROdW1iZXJzL2dlbmVyaWNfYWNjZXNzX3Byb2ZpbGUuaHRtDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9GTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxIC8qKjwgRmxhZ3MgZm9yIGRpc2NvdmVyYWJpbGl0eS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV8xNkJJVF9TRVJWSUNFX1VVSURfTU9SRV9BVkFJTEFCTEUgICAweDAyIC8qKjwgUGFydGlhbCBsaXN0IG9mIDE2IGJpdCBzZXJ2aWNlIFVVSURzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFXzE2QklUX1NFUlZJQ0VfVVVJRF9DT01QTEVURSAgICAgICAgIDB4MDMgLyoqPCBDb21wbGV0ZSBsaXN0IG9mIDE2IGJpdCBzZXJ2aWNlIFVVSURzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFXzMyQklUX1NFUlZJQ0VfVVVJRF9NT1JFX0FWQUlMQUJMRSAgIDB4MDQgLyoqPCBQYXJ0aWFsIGxpc3Qgb2YgMzIgYml0IHNlcnZpY2UgVVVJRHMuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfMzJCSVRfU0VSVklDRV9VVUlEX0NPTVBMRVRFICAgICAgICAgMHgwNSAvKio8IENvbXBsZXRlIGxpc3Qgb2YgMzIgYml0IHNlcnZpY2UgVVVJRHMuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfMTI4QklUX1NFUlZJQ0VfVVVJRF9NT1JFX0FWQUlMQUJMRSAgMHgwNiAvKio8IFBhcnRpYWwgbGlzdCBvZiAxMjggYml0IHNlcnZpY2UgVVVJRHMuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfMTI4QklUX1NFUlZJQ0VfVVVJRF9DT01QTEVURSAgICAgICAgMHgwNyAvKio8IENvbXBsZXRlIGxpc3Qgb2YgMTI4IGJpdCBzZXJ2aWNlIFVVSURzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1NIT1JUX0xPQ0FMX05BTUUgICAgICAgICAgICAgICAgICAgIDB4MDggLyoqPCBTaG9ydCBsb2NhbCBkZXZpY2UgbmFtZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9DT01QTEVURV9MT0NBTF9OQU1FICAgICAgICAgICAgICAgICAweDA5IC8qKjwgQ29tcGxldGUgbG9jYWwgZGV2aWNlIG5hbWUuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfVFhfUE9XRVJfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgMHgwQSAvKio8IFRyYW5zbWl0IHBvd2VyIGxldmVsLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX0NMQVNTX09GX0RFVklDRSAgICAgICAgICAgICAgICAgICAgIDB4MEQgLyoqPCBDbGFzcyBvZiBkZXZpY2UuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfU0lNUExFX1BBSVJJTkdfSEFTSF9DICAgICAgICAgICAgICAgMHgwRSAvKio8IFNpbXBsZSBQYWlyaW5nIEhhc2ggQy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9TSU1QTEVfUEFJUklOR19SQU5ET01JWkVSX1IgICAgICAgICAweDBGIC8qKjwgU2ltcGxlIFBhaXJpbmcgUmFuZG9taXplciBSLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1NFQ1VSSVRZX01BTkFHRVJfVEtfVkFMVUUgICAgICAgICAgIDB4MTAgLyoqPCBTZWN1cml0eSBNYW5hZ2VyIFRLIFZhbHVlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1NFQ1VSSVRZX01BTkFHRVJfT09CX0ZMQUdTICAgICAgICAgIDB4MTEgLyoqPCBTZWN1cml0eSBNYW5hZ2VyIE91dCBPZiBCYW5kIEZsYWdzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1NMQVZFX0NPTk5FQ1RJT05fSU5URVJWQUxfUkFOR0UgICAgIDB4MTIgLyoqPCBTbGF2ZSBDb25uZWN0aW9uIEludGVydmFsIFJhbmdlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1NPTElDSVRFRF9TRVJWSUNFX1VVSURTXzE2QklUICAgICAgIDB4MTQgLyoqPCBMaXN0IG9mIDE2LWJpdCBTZXJ2aWNlIFNvbGljaXRhdGlvbiBVVUlEcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9TT0xJQ0lURURfU0VSVklDRV9VVUlEU18xMjhCSVQgICAgICAweDE1IC8qKjwgTGlzdCBvZiAxMjgtYml0IFNlcnZpY2UgU29saWNpdGF0aW9uIFVVSURzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1NFUlZJQ0VfREFUQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MTYgLyoqPCBTZXJ2aWNlIERhdGEgLSAxNi1iaXQgVVVJRC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9QVUJMSUNfVEFSR0VUX0FERFJFU1MgICAgICAgICAgICAgICAweDE3IC8qKjwgUHVibGljIFRhcmdldCBBZGRyZXNzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1JBTkRPTV9UQVJHRVRfQUREUkVTUyAgICAgICAgICAgICAgIDB4MTggLyoqPCBSYW5kb20gVGFyZ2V0IEFkZHJlc3MuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfQVBQRUFSQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOSAvKio8IEFwcGVhcmFuY2UuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfQURWRVJUSVNJTkdfSU5URVJWQUwgICAgICAgICAgICAgICAgMHgxQSAvKio8IEFkdmVydGlzaW5nIEludGVydmFsLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX0xFX0JMVUVUT09USF9ERVZJQ0VfQUREUkVTUyAgICAgICAgIDB4MUIgLyoqPCBMRSBCbHVldG9vdGggRGV2aWNlIEFkZHJlc3MuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfTEVfUk9MRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQyAvKio8IExFIFJvbGUuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfU0lNUExFX1BBSVJJTkdfSEFTSF9DMjU2ICAgICAgICAgICAgMHgxRCAvKio8IFNpbXBsZSBQYWlyaW5nIEhhc2ggQy0yNTYuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfU0lNUExFX1BBSVJJTkdfUkFORE9NSVpFUl9SMjU2ICAgICAgMHgxRSAvKio8IFNpbXBsZSBQYWlyaW5nIFJhbmRvbWl6ZXIgUi0yNTYuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfU0VSVklDRV9EQVRBXzMyQklUX1VVSUQgICAgICAgICAgICAgMHgyMCAvKio8IFNlcnZpY2UgRGF0YSAtIDMyLWJpdCBVVUlELiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1NFUlZJQ0VfREFUQV8xMjhCSVRfVVVJRCAgICAgICAgICAgIDB4MjEgLyoqPCBTZXJ2aWNlIERhdGEgLSAxMjgtYml0IFVVSUQuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfTEVTQ19DT05GSVJNQVRJT05fVkFMVUUgICAgICAgICAgICAgMHgyMiAvKio8IExFIFNlY3VyZSBDb25uZWN0aW9ucyBDb25maXJtYXRpb24gVmFsdWUgKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9MRVNDX1JBTkRPTV9WQUxVRSAgICAgICAgICAgICAgICAgICAweDIzIC8qKjwgTEUgU2VjdXJlIENvbm5lY3Rpb25zIFJhbmRvbSBWYWx1ZSAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1VSSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQgLyoqPCBVUkkgKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV8zRF9JTkZPUk1BVElPTl9EQVRBICAgICAgICAgICAgICAgICAweDNEIC8qKjwgM0QgSW5mb3JtYXRpb24gRGF0YS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9NQU5VRkFDVFVSRVJfU1BFQ0lGSUNfREFUQSAgICAgICAgICAweEZGIC8qKjwgTWFudWZhY3R1cmVyIFNwZWNpZmljIERhdGEuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9BRFZfRkxBR1MgR0FQIEFkdmVydGlzZW1lbnQgRmxhZ3MNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRFZfRkxBR19MRV9MSU1JVEVEX0RJU0NfTU9ERSAgICAgICAgICgweDAxKSAgIC8qKjwgTEUgTGltaXRlZCBEaXNjb3ZlcmFibGUgTW9kZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX0ZMQUdfTEVfR0VORVJBTF9ESVNDX01PREUgICAgICAgICAoMHgwMikgICAvKio8IExFIEdlbmVyYWwgRGlzY292ZXJhYmxlIE1vZGUuICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9GTEFHX0JSX0VEUl9OT1RfU1VQUE9SVEVEICAgICAgICAgKDB4MDQpICAgLyoqPCBCUi9FRFIgbm90IHN1cHBvcnRlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX0ZMQUdfTEVfQlJfRURSX0NPTlRST0xMRVIgICAgICAgICAoMHgwOCkgICAvKio8IFNpbXVsdGFuZW91cyBMRSBhbmQgQlIvRURSLCBDb250cm9sbGVyLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRFZfRkxBR19MRV9CUl9FRFJfSE9TVCAgICAgICAgICAgICAgICgweDEwKSAgIC8qKjwgU2ltdWx0YW5lb3VzIExFIGFuZCBCUi9FRFIsIEhvc3QuICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9GTEFHU19MRV9PTkxZX0xJTUlURURfRElTQ19NT0RFICAgKEJMRV9HQVBfQURWX0ZMQUdfTEVfTElNSVRFRF9ESVNDX01PREUgfCBCTEVfR0FQX0FEVl9GTEFHX0JSX0VEUl9OT1RfU1VQUE9SVEVEKSAgIC8qKjwgTEUgTGltaXRlZCBEaXNjb3ZlcmFibGUgTW9kZSwgQlIvRURSIG5vdCBzdXBwb3J0ZWQuICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9GTEFHU19MRV9PTkxZX0dFTkVSQUxfRElTQ19NT0RFICAgKEJMRV9HQVBfQURWX0ZMQUdfTEVfR0VORVJBTF9ESVNDX01PREUgfCBCTEVfR0FQX0FEVl9GTEFHX0JSX0VEUl9OT1RfU1VQUE9SVEVEKSAgIC8qKjwgTEUgR2VuZXJhbCBEaXNjb3ZlcmFibGUgTW9kZSwgQlIvRURSIG5vdCBzdXBwb3J0ZWQuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9BRFZfSU5URVJWQUxTIEdBUCBBZHZlcnRpc2luZyBpbnRlcnZhbCBtYXggYW5kIG1pbg0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9JTlRFUlZBTF9NSU4gICAgICAgIDB4MDAyMCAvKio8IE1pbmltdW0gQWR2ZXJ0aXNpbmcgaW50ZXJ2YWwgaW4gNjI1IHVzIHVuaXRzLCBpLmUuIDIwIG1zLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRFZfTk9OQ09OX0lOVEVSVkFMX01JTiAweDAwQTAgLyoqPCBNaW5pbXVtIEFkdmVydGlzaW5nIGludGVydmFsIGluIDYyNSB1cyB1bml0cyBmb3Igbm9uIGNvbm5lY3RhYmxlIG1vZGUsIGkuZS4gMTAwIG1zLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRFZfSU5URVJWQUxfTUFYICAgICAgICAweDQwMDAgLyoqPCBNYXhpbXVtIEFkdmVydGlzaW5nIGludGVydmFsIGluIDYyNSB1cyB1bml0cywgaS5lLiAxMC4yNCBzLiAqLw0KKyAvKipAfSAgKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9TQ0FOX0lOVEVSVkFMUyBHQVAgU2NhbiBpbnRlcnZhbCBtYXggYW5kIG1pbg0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX1NDQU5fSU5URVJWQUxfTUlOICAgICAgIDB4MDAwNCAvKio8IE1pbmltdW0gU2NhbiBpbnRlcnZhbCBpbiA2MjUgdXMgdW5pdHMsIGkuZS4gMi41IG1zLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TQ0FOX0lOVEVSVkFMX01BWCAgICAgICAweDQwMDAgLyoqPCBNYXhpbXVtIFNjYW4gaW50ZXJ2YWwgaW4gNjI1IHVzIHVuaXRzLCBpLmUuIDEwLjI0IHMuICovDQorIC8qKiBAfSAgKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9TQ0FOX1dJTkRPVyBHQVAgU2NhbiB3aW5kb3cgbWF4IGFuZCBtaW4NCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TQ0FOX1dJTkRPV19NSU4gICAgICAgICAweDAwMDQgLyoqPCBNaW5pbXVtIFNjYW4gd2luZG93IGluIDYyNSB1cyB1bml0cywgaS5lLiAyLjUgbXMuICovDQorI2RlZmluZSBCTEVfR0FQX1NDQU5fV0lORE9XX01BWCAgICAgICAgIDB4NDAwMCAvKio8IE1heGltdW0gU2NhbiB3aW5kb3cgaW4gNjI1IHVzIHVuaXRzLCBpLmUuIDEwLjI0IHMuICovDQorIC8qKiBAfSAgKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9TQ0FOX1RJTUVPVVQgR0FQIFNjYW4gdGltZW91dCBtYXggYW5kIG1pbg0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX1NDQU5fVElNRU9VVF9NSU4gICAgICAgIDB4MDAwMSAvKio8IE1pbmltdW0gU2NhbiB0aW1lb3V0IGluIHNlY29uZHMuICovDQorI2RlZmluZSBCTEVfR0FQX1NDQU5fVElNRU9VVF9NQVggICAgICAgIDB4RkZGRiAvKio8IE1heGltdW0gU2NhbiB0aW1lb3V0IGluIHNlY29uZHMuICovDQorIC8qKiBAfSAgKi8NCisNCisNCisvKipAYnJpZWYgTWF4aW11bSBzaXplIG9mIGFkdmVydGlzaW5nIGRhdGEgaW4gb2N0ZXRzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRFZfTUFYX1NJWkUgICAgICAgICAgICAoMzEpDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfQURWX1RZUEVTIEdBUCBBZHZlcnRpc2luZyB0eXBlcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9UWVBFX0FEVl9JTkQgICAgICAgICAgMHgwMCAgIC8qKjwgQ29ubmVjdGFibGUgdW5kaXJlY3RlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX1RZUEVfQURWX0RJUkVDVF9JTkQgICAweDAxICAgLyoqPCBDb25uZWN0YWJsZSBkaXJlY3RlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX1RZUEVfQURWX1NDQU5fSU5EICAgICAweDAyICAgLyoqPCBTY2FubmFibGUgdW5kaXJlY3RlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX1RZUEVfQURWX05PTkNPTk5fSU5EICAweDAzICAgLyoqPCBOb24gY29ubmVjdGFibGUgdW5kaXJlY3RlZC4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX0FEVl9GSUxURVJfUE9MSUNJRVMgR0FQIEFkdmVydGlzaW5nIGZpbHRlciBwb2xpY2llcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9GUF9BTlkgICAgICAgICAgICAgICAgMHgwMCAgIC8qKjwgQWxsb3cgc2NhbiByZXF1ZXN0cyBhbmQgY29ubmVjdCByZXF1ZXN0cyBmcm9tIGFueSBkZXZpY2UuICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9GUF9GSUxURVJfU0NBTlJFUSAgICAgMHgwMSAgIC8qKjwgRmlsdGVyIHNjYW4gcmVxdWVzdHMgd2l0aCB3aGl0ZWxpc3QuICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9GUF9GSUxURVJfQ09OTlJFUSAgICAgMHgwMiAgIC8qKjwgRmlsdGVyIGNvbm5lY3QgcmVxdWVzdHMgd2l0aCB3aGl0ZWxpc3QuICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9GUF9GSUxURVJfQk9USCAgICAgICAgMHgwMyAgIC8qKjwgRmlsdGVyIGJvdGggc2NhbiBhbmQgY29ubmVjdCByZXF1ZXN0cyB3aXRoIHdoaXRlbGlzdC4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX0FEVl9USU1FT1VUX1ZBTFVFUyBHQVAgQWR2ZXJ0aXNpbmcgdGltZW91dCB2YWx1ZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRFZfVElNRU9VVF9MSU1JVEVEX01BWCAgICAgICAoMTgwKSAvKio8IE1heGltdW0gYWR2ZXJ0aXNpbmcgdGltZSBpbiBsaW1pdGVkIGRpc2NvdmVyYWJsZSBtb2RlIChUR0FQKGxpbV9hZHZfdGltZW91dCkgPSAxODAgcykuICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9USU1FT1VUX0dFTkVSQUxfVU5MSU1JVEVEICgwKSAgIC8qKjwgVW5saW1pdGVkIGFkdmVydGlzaW5nIGluIGdlbmVyYWwgZGlzY292ZXJhYmxlIG1vZGUuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9ESVNDX01PREVTIEdBUCBEaXNjb3ZlcnkgbW9kZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9ESVNDX01PREVfTk9UX0RJU0NPVkVSQUJMRSAgMHgwMCAgIC8qKjwgTm90IGRpc2NvdmVyYWJsZSBkaXNjb3ZlcnkgTW9kZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfRElTQ19NT0RFX0xJTUlURUQgICAgICAgICAgIDB4MDEgICAvKio8IExpbWl0ZWQgRGlzY292ZXJ5IE1vZGUuICovDQorI2RlZmluZSBCTEVfR0FQX0RJU0NfTU9ERV9HRU5FUkFMICAgICAgICAgICAweDAyICAgLyoqPCBHZW5lcmFsIERpc2NvdmVyeSBNb2RlLiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfSU9fQ0FQUyBHQVAgSU8gQ2FwYWJpbGl0aWVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfSU9fQ0FQU19ESVNQTEFZX09OTFkgICAgICAweDAwICAgLyoqPCBEaXNwbGF5IE9ubHkuICovDQorI2RlZmluZSBCTEVfR0FQX0lPX0NBUFNfRElTUExBWV9ZRVNOTyAgICAgMHgwMSAgIC8qKjwgRGlzcGxheSBhbmQgWWVzL05vIGVudHJ5LiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9JT19DQVBTX0tFWUJPQVJEX09OTFkgICAgIDB4MDIgICAvKio8IEtleWJvYXJkIE9ubHkuICovDQorI2RlZmluZSBCTEVfR0FQX0lPX0NBUFNfTk9ORSAgICAgICAgICAgICAgMHgwMyAgIC8qKjwgTm8gSS9PIGNhcGFiaWxpdGllcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfSU9fQ0FQU19LRVlCT0FSRF9ESVNQTEFZICAweDA0ICAgLyoqPCBLZXlib2FyZCBhbmQgRGlzcGxheS4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX0FVVEhfS0VZX1RZUEVTIEdBUCBBdXRoZW50aWNhdGlvbiBLZXkgVHlwZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BVVRIX0tFWV9UWVBFX05PTkUgICAgICAgIDB4MDAgICAvKio8IE5vIGtleSAobWF5IGJlIHVzZWQgdG8gcmVqZWN0KS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQVVUSF9LRVlfVFlQRV9QQVNTS0VZICAgICAweDAxICAgLyoqPCA2LWRpZ2l0IFBhc3NrZXkuICovDQorI2RlZmluZSBCTEVfR0FQX0FVVEhfS0VZX1RZUEVfT09CICAgICAgICAgMHgwMiAgIC8qKjwgT3V0IE9mIEJhbmQgZGF0YS4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX0tQX05PVF9UWVBFUyBHQVAgS2V5cHJlc3MgTm90aWZpY2F0aW9uIFR5cGVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfS1BfTk9UX1RZUEVfUEFTU0tFWV9TVEFSVCAgICAgICAweDAwICAgLyoqPCBQYXNza2V5IGVudHJ5IHN0YXJ0ZWQuICovDQorI2RlZmluZSBCTEVfR0FQX0tQX05PVF9UWVBFX1BBU1NLRVlfRElHSVRfSU4gICAgMHgwMSAgIC8qKjwgUGFzc2tleSBkaWdpdCBlbnRlcmVkLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9LUF9OT1RfVFlQRV9QQVNTS0VZX0RJR0lUX09VVCAgIDB4MDIgICAvKio8IFBhc3NrZXkgZGlnaXQgZXJhc2VkLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9LUF9OT1RfVFlQRV9QQVNTS0VZX0NMRUFSICAgICAgIDB4MDMgICAvKio8IFBhc3NrZXkgY2xlYXJlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfS1BfTk9UX1RZUEVfUEFTU0tFWV9FTkQgICAgICAgICAweDA0ICAgLyoqPCBQYXNza2V5IGVudHJ5IGNvbXBsZXRlZC4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX1NFQ19TVEFUVVMgR0FQIFNlY3VyaXR5IHN0YXR1cw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgICAweDAwICAvKio8IFByb2NlZHVyZSBjb21wbGV0ZWQgd2l0aCBzdWNjZXNzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1RJTUVPVVQgICAgICAgICAgICAgICAgMHgwMSAgLyoqPCBQcm9jZWR1cmUgdGltZWQgb3V0LiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1BEVV9JTlZBTElEICAgICAgICAgICAgMHgwMiAgLyoqPCBJbnZhbGlkIFBEVSByZWNlaXZlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19SRlVfUkFOR0UxX0JFR0lOICAgICAgIDB4MDMgIC8qKjwgUmVzZXJ2ZWQgZm9yIEZ1dHVyZSBVc2UgcmFuZ2UgIzEgYmVnaW4uICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfUkZVX1JBTkdFMV9FTkQgICAgICAgICAweDgwICAvKio8IFJlc2VydmVkIGZvciBGdXR1cmUgVXNlIHJhbmdlICMxIGVuZC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19QQVNTS0VZX0VOVFJZX0ZBSUxFRCAgIDB4ODEgIC8qKjwgUGFzc2tleSBlbnRyeSBmYWlsZWQgKHVzZXIgY2FuY2VsZWQgb3Igb3RoZXIpLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX09PQl9OT1RfQVZBSUxBQkxFICAgICAgMHg4MiAgLyoqPCBPdXQgb2YgQmFuZCBLZXkgbm90IGF2YWlsYWJsZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19BVVRIX1JFUSAgICAgICAgICAgICAgIDB4ODMgIC8qKjwgQXV0aGVudGljYXRpb24gcmVxdWlyZW1lbnRzIG5vdCBtZXQuICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfQ09ORklSTV9WQUxVRSAgICAgICAgICAweDg0ICAvKio8IENvbmZpcm0gdmFsdWUgZmFpbGVkLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1BBSVJJTkdfTk9UX1NVUFAgICAgICAgMHg4NSAgLyoqPCBQYWlyaW5nIG5vdCBzdXBwb3J0ZWQuICAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX0VOQ19LRVlfU0laRSAgICAgICAgICAgMHg4NiAgLyoqPCBFbmNyeXB0aW9uIGtleSBzaXplLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1NNUF9DTURfVU5TVVBQT1JURUQgICAgMHg4NyAgLyoqPCBVbnN1cHBvcnRlZCBTTVAgY29tbWFuZC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19VTlNQRUNJRklFRCAgICAgICAgICAgIDB4ODggIC8qKjwgVW5zcGVjaWZpZWQgcmVhc29uLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1JFUEVBVEVEX0FUVEVNUFRTICAgICAgMHg4OSAgLyoqPCBUb28gbGl0dGxlIHRpbWUgZWxhcHNlZCBzaW5jZSBsYXN0IGF0dGVtcHQuICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfSU5WQUxJRF9QQVJBTVMgICAgICAgICAweDhBICAvKio8IEludmFsaWQgcGFyYW1ldGVycy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19ESEtFWV9GQUlMVVJFICAgICAgICAgIDB4OEIgIC8qKjwgREhLZXkgY2hlY2sgZmFpbHVyZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19OVU1fQ09NUF9GQUlMVVJFICAgICAgIDB4OEMgIC8qKjwgTnVtZXJpYyBDb21wYXJpc29uIGZhaWx1cmUuICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfQlJfRURSX0lOX1BST0cgICAgICAgICAweDhEICAvKio8IEJSL0VEUiBwYWlyaW5nIGluIHByb2dyZXNzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1hfVFJBTlNfS0VZX0RJU0FMTE9XRUQgMHg4RSAgLyoqPCBCUi9FRFIgTGluayBLZXkgY2Fubm90IGJlIHVzZWQgZm9yIExFIGtleXMuICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfUkZVX1JBTkdFMl9CRUdJTiAgICAgICAweDhGICAvKio8IFJlc2VydmVkIGZvciBGdXR1cmUgVXNlIHJhbmdlICMyIGJlZ2luLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1JGVV9SQU5HRTJfRU5EICAgICAgICAgMHhGRiAgLyoqPCBSZXNlcnZlZCBmb3IgRnV0dXJlIFVzZSByYW5nZSAjMiBlbmQuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9TRUNfU1RBVFVTX1NPVVJDRVMgR0FQIFNlY3VyaXR5IHN0YXR1cyBzb3VyY2VzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19TT1VSQ0VfTE9DQUwgICAgICAgICAgIDB4MDAgIC8qKjwgTG9jYWwgZmFpbHVyZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19TT1VSQ0VfUkVNT1RFICAgICAgICAgIDB4MDEgIC8qKjwgUmVtb3RlIGZhaWx1cmUuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9DUF9MSU1JVFMgR0FQIENvbm5lY3Rpb24gUGFyYW1ldGVycyBMaW1pdHMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9DUF9NSU5fQ09OTl9JTlRWTF9OT05FICAgICAgICAgICAweEZGRkYgIC8qKjwgTm8gbmV3IG1pbmltdW0gY29ubmVjdGlvbiBpbnRlcnZhbCBzcGVjaWZpZWQgaW4gY29ubmVjdCBwYXJhbWV0ZXJzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9DUF9NSU5fQ09OTl9JTlRWTF9NSU4gICAgICAgICAgICAweDAwMDYgIC8qKjwgTG93ZXN0IG1pbmltdW0gY29ubmVjdGlvbiBpbnRlcnZhbCBwZXJtaXR0ZWQsIGluIHVuaXRzIG9mIDEuMjUgbXMsIGkuZS4gNy41IG1zLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9DUF9NSU5fQ09OTl9JTlRWTF9NQVggICAgICAgICAgICAweDBDODAgIC8qKjwgSGlnaGVzdCBtaW5pbXVtIGNvbm5lY3Rpb24gaW50ZXJ2YWwgcGVybWl0dGVkLCBpbiB1bml0cyBvZiAxLjI1IG1zLCBpLmUuIDQgcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQ1BfTUFYX0NPTk5fSU5UVkxfTk9ORSAgICAgICAgICAgMHhGRkZGICAvKio8IE5vIG5ldyBtYXhpbXVtIGNvbm5lY3Rpb24gaW50ZXJ2YWwgc3BlY2lmaWVkIGluIGNvbm5lY3QgcGFyYW1ldGVycy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQ1BfTUFYX0NPTk5fSU5UVkxfTUlOICAgICAgICAgICAgMHgwMDA2ICAvKio8IExvd2VzdCBtYXhpbXVtIGNvbm5lY3Rpb24gaW50ZXJ2YWwgcGVybWl0dGVkLCBpbiB1bml0cyBvZiAxLjI1IG1zLCBpLmUuIDcuNSBtcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQ1BfTUFYX0NPTk5fSU5UVkxfTUFYICAgICAgICAgICAgMHgwQzgwICAvKio8IEhpZ2hlc3QgbWF4aW11bSBjb25uZWN0aW9uIGludGVydmFsIHBlcm1pdHRlZCwgaW4gdW5pdHMgb2YgMS4yNSBtcywgaS5lLiA0IHMuICovDQorI2RlZmluZSBCTEVfR0FQX0NQX1NMQVZFX0xBVEVOQ1lfTUFYICAgICAgICAgICAgIDB4MDFGMyAgLyoqPCBIaWdoZXN0IHNsYXZlIGxhdGVuY3kgcGVybWl0dGVkLCBpbiBjb25uZWN0aW9uIGV2ZW50cy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQ1BfQ09OTl9TVVBfVElNRU9VVF9OT05FICAgICAgICAgMHhGRkZGICAvKio8IE5vIG5ldyBzdXBlcnZpc2lvbiB0aW1lb3V0IHNwZWNpZmllZCBpbiBjb25uZWN0IHBhcmFtZXRlcnMuICovDQorI2RlZmluZSBCTEVfR0FQX0NQX0NPTk5fU1VQX1RJTUVPVVRfTUlOICAgICAgICAgIDB4MDAwQSAgLyoqPCBMb3dlc3Qgc3VwZXJ2aXNpb24gdGltZW91dCBwZXJtaXR0ZWQsIGluIHVuaXRzIG9mIDEwIG1zLCBpLmUuIDEwMCBtcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQ1BfQ09OTl9TVVBfVElNRU9VVF9NQVggICAgICAgICAgMHgwQzgwICAvKio8IEhpZ2hlc3Qgc3VwZXJ2aXNpb24gdGltZW91dCBwZXJtaXR0ZWQsIGluIHVuaXRzIG9mIDEwIG1zLCBpLmUuIDMyIHMuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9ERVZOQU1FIEdBUCBkZXZpY2UgbmFtZSBkZWZpbmVzLg0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX0RFVk5BTUVfREVGQVVMVCAgICAgICAgICAgICAgICAgICJuUkY1eCIgLyoqPCBEZWZhdWx0IGRldmljZSBuYW1lIHZhbHVlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9ERVZOQU1FX0RFRkFVTFRfTEVOICAgICAgICAgICAgICAzMSAgICAgIC8qKjwgRGVmYXVsdCBudW1iZXIgb2Ygb2N0ZXRzIGluIGRldmljZSBuYW1lLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9ERVZOQU1FX01BWF9MRU4gICAgICAgICAgICAgICAgICAyNDggICAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2Ygb2N0ZXRzIGluIGRldmljZSBuYW1lLiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGJyaWVmIERpc2FibGUgUlNTSSBldmVudHMgZm9yIGNvbm5lY3Rpb25zICovDQorI2RlZmluZSBCTEVfR0FQX1JTU0lfVEhSRVNIT0xEX0lOVkFMSUQgMHhGRg0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX1BIWVMgR0FQIFBIWXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9QSFlfMU1CUFMgICAgICAgICAgICAgICAgICAgICAgICAweDAxICAgIC8qKjwgMSBNYnBzIFBIWS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfUEhZXzJNQlBTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiAgICAvKio8IDIgTWJwcyBQSFkuICovDQorI2RlZmluZSBCTEVfR0FQX1BIWV9DT0RFRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQgICAgLyoqPCBDb2RlZCBQSFkuICovDQorLyoqQH0gKi8NCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9DT05OX1NFQ19NT0RFX1NFVF9NQUNST1MgR0FQIGF0dHJpYnV0ZSBzZWN1cml0eSByZXF1aXJlbWVudCBzZXR0ZXJzDQorICoNCisgKiBTZWUgQHJlZiBibGVfZ2FwX2Nvbm5fc2VjX21vZGVfdC4NCisgKiBAeyAqLw0KKy8qKkBicmllZiBTZXQgc2VjX21vZGUgcG9pbnRlZCB0byBieSBwdHIgdG8gaGF2ZSBubyBhY2Nlc3MgcmlnaHRzLiovDQorI2RlZmluZSBCTEVfR0FQX0NPTk5fU0VDX01PREVfU0VUX05PX0FDQ0VTUyhwdHIpICAgICAgICAgIGRvIHsocHRyKS0+c20gPSAwOyAocHRyKS0+bHYgPSAwO30gd2hpbGUoMCkNCisvKipAYnJpZWYgU2V0IHNlY19tb2RlIHBvaW50ZWQgdG8gYnkgcHRyIHRvIHJlcXVpcmUgbm8gcHJvdGVjdGlvbiwgb3BlbiBsaW5rLiovDQorI2RlZmluZSBCTEVfR0FQX0NPTk5fU0VDX01PREVfU0VUX09QRU4ocHRyKSAgICAgICAgICAgICAgIGRvIHsocHRyKS0+c20gPSAxOyAocHRyKS0+bHYgPSAxO30gd2hpbGUoMCkNCisvKipAYnJpZWYgU2V0IHNlY19tb2RlIHBvaW50ZWQgdG8gYnkgcHRyIHRvIHJlcXVpcmUgZW5jcnlwdGlvbiwgYnV0IG5vIE1JVE0gcHJvdGVjdGlvbi4qLw0KKyNkZWZpbmUgQkxFX0dBUF9DT05OX1NFQ19NT0RFX1NFVF9FTkNfTk9fTUlUTShwdHIpICAgICAgICBkbyB7KHB0ciktPnNtID0gMTsgKHB0ciktPmx2ID0gMjt9IHdoaWxlKDApDQorLyoqQGJyaWVmIFNldCBzZWNfbW9kZSBwb2ludGVkIHRvIGJ5IHB0ciB0byByZXF1aXJlIGVuY3J5cHRpb24gYW5kIE1JVE0gcHJvdGVjdGlvbi4qLw0KKyNkZWZpbmUgQkxFX0dBUF9DT05OX1NFQ19NT0RFX1NFVF9FTkNfV0lUSF9NSVRNKHB0cikgICAgICBkbyB7KHB0ciktPnNtID0gMTsgKHB0ciktPmx2ID0gMzt9IHdoaWxlKDApDQorLyoqQGJyaWVmIFNldCBzZWNfbW9kZSBwb2ludGVkIHRvIGJ5IHB0ciB0byByZXF1aXJlIExFU0MgZW5jcnlwdGlvbiBhbmQgTUlUTSBwcm90ZWN0aW9uLiovDQorI2RlZmluZSBCTEVfR0FQX0NPTk5fU0VDX01PREVfU0VUX0xFU0NfRU5DX1dJVEhfTUlUTShwdHIpIGRvIHsocHRyKS0+c20gPSAxOyAocHRyKS0+bHYgPSA0O30gd2hpbGUoMCkNCisvKipAYnJpZWYgU2V0IHNlY19tb2RlIHBvaW50ZWQgdG8gYnkgcHRyIHRvIHJlcXVpcmUgc2lnbmluZyBvciBlbmNyeXB0aW9uLCBubyBNSVRNIHByb3RlY3Rpb24gbmVlZGVkLiovDQorI2RlZmluZSBCTEVfR0FQX0NPTk5fU0VDX01PREVfU0VUX1NJR05FRF9OT19NSVRNKHB0cikgICAgIGRvIHsocHRyKS0+c20gPSAyOyAocHRyKS0+bHYgPSAxO30gd2hpbGUoMCkNCisvKipAYnJpZWYgU2V0IHNlY19tb2RlIHBvaW50ZWQgdG8gYnkgcHRyIHRvIHJlcXVpcmUgc2lnbmluZyBvciBlbmNyeXB0aW9uIHdpdGggTUlUTSBwcm90ZWN0aW9uLiovDQorI2RlZmluZSBCTEVfR0FQX0NPTk5fU0VDX01PREVfU0VUX1NJR05FRF9XSVRIX01JVE0ocHRyKSAgIGRvIHsocHRyKS0+c20gPSAyOyAocHRyKS0+bHYgPSAyO30gd2hpbGUoMCkNCisvKipAfSAqLw0KKw0KKw0KKy8qKkBicmllZiBHQVAgU2VjdXJpdHkgUmFuZG9tIE51bWJlciBMZW5ndGguICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19SQU5EX0xFTiA4DQorDQorDQorLyoqQGJyaWVmIEdBUCBTZWN1cml0eSBLZXkgTGVuZ3RoLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfS0VZX0xFTiAxNg0KKw0KKw0KKy8qKkBicmllZiBHQVAgTEUgU2VjdXJlIENvbm5lY3Rpb25zIEVsbGlwdGljIEN1cnZlIERpZmZpZS1IZWxsbWFuIFAtMjU2IFB1YmxpYyBLZXkgTGVuZ3RoLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9MRVNDX1AyNTZfUEtfTEVOIDY0DQorDQorDQorLyoqQGJyaWVmIEdBUCBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgRWxsaXB0aWMgQ3VydmUgRGlmZmllLUhlbGxtYW4gREhLZXkgTGVuZ3RoLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9MRVNDX0RIS0VZX0xFTiAgIDMyDQorDQorDQorLyoqQGJyaWVmIEdBUCBQYXNza2V5IExlbmd0aC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfUEFTU0tFWV9MRU4gNg0KKw0KKw0KKy8qKkBicmllZiBNYXhpbXVtIGFtb3VudCBvZiBhZGRyZXNzZXMgaW4gdGhlIHdoaXRlbGlzdC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfV0hJVEVMSVNUX0FERFJfTUFYX0NPVU5UICg4KQ0KKw0KKw0KKy8qKkBicmllZiBNYXhpbXVtIGFtb3VudCBvZiBpZGVudGl0aWVzIGluIHRoZSBkZXZpY2UgaWRlbnRpdGllcyBsaXN0LiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9ERVZJQ0VfSURFTlRJVElFU19NQVhfQ09VTlQgKDgpDQorDQorDQorLyoqQGJyaWVmIERlZmF1bHQgY29ubmVjdGlvbiBjb3VudCBmb3IgYSBjb25maWd1cmF0aW9uLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9DT05OX0NPVU5UX0RFRkFVTFQgKDEpDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfRVZFTlRfTEVOR1RIIEdBUCBldmVudCBsZW5ndGggZGVmaW5lcy4NCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9FVkVOVF9MRU5HVEhfTUlOICAgICAoMikgIC8qKjwgTWluaW11bSBldmVudCBsZW5ndGgsIGluIDEuMjUgbXMgdW5pdHMuICovDQorI2RlZmluZSBCTEVfR0FQX0VWRU5UX0xFTkdUSF9ERUZBVUxUICgzKSAgLyoqPCBEZWZhdWx0IGV2ZW50IGxlbmd0aCwgaW4gMS4yNSBtcyB1bml0cy4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX1JPTEVfQ09VTlQgR0FQIGNvbmN1cnJlbnQgY29ubmVjdGlvbiBjb3VudCBkZWZpbmVzLg0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX1JPTEVfQ09VTlRfUEVSSVBIX0RFRkFVTFQgICAgICAoMSkgICAvKio8IERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgY29uY3VycmVudGx5IGFjdGluZyBhcyBwZXJpcGhlcmFscy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfUk9MRV9DT1VOVF9DRU5UUkFMX0RFRkFVTFQgICAgICgzKSAgIC8qKjwgRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBjb25jdXJyZW50bHkgYWN0aW5nIGFzIGNlbnRyYWxzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9ST0xFX0NPVU5UX0NFTlRSQUxfU0VDX0RFRkFVTFQgKDEpICAgLyoqPCBEZWZhdWx0IG51bWJlciBvZiBTTVAgaW5zdGFuY2VzIHNoYXJlZCBiZXR3ZWVuIGFsbCBjb25uZWN0aW9ucyBhY3RpbmcgYXMgY2VudHJhbHMuICovDQorI2RlZmluZSBCTEVfR0FQX1JPTEVfQ09VTlRfQ09NQklORURfTUFYICAgICAgICAoMjApICAvKio8IE1heGltdW0gc3VwcG9ydGVkIG51bWJlciBvZiBjb25jdXJyZW50IGNvbm5lY3Rpb25zIGluIHRoZSBwZXJpcGhlcmFsIGFuZCBjZW50cmFsIHJvbGVzIGNvbWJpbmVkLiAqLw0KKy8qKkB9ICovDQorDQorDQorDQorDQorLyoqQGJyaWVmIEF1dG9tYXRpYyBkYXRhIGxlbmd0aCBwYXJhbWV0ZXIuICovDQorI2RlZmluZSBCTEVfR0FQX0RBVEFfTEVOR1RIX0FVVE8gMA0KKw0KKw0KKy8qKkBkZWZncm91cCBHQVBfU0VDX01PREVTIEdBUCBTZWN1cml0eSBNb2Rlcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19NT0RFIDB4MDAgLyoqPCBObyBrZXkgKG1heSBiZSB1c2VkIHRvIHJlamVjdCkuICovDQorLyoqQH0gKi8NCisvKiogQH0gKi8NCisNCisNCisvKipAYWRkdG9ncm91cCBCTEVfR0FQX1NUUlVDVFVSRVMgU3RydWN0dXJlcw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIEJsdWV0b290aCBMb3cgRW5lcmd5IGFkZHJlc3MuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IGFkZHJfaWRfcGVlciA6IDE7ICAgICAgIC8qKjwgT25seSB2YWxpZCBmb3IgcGVlciBhZGRyZXNzZXMuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIHRvIHBlZXIgaW4gZGV2aWNlIGlkZW50aXRpZXMgbGlzdCAoYXMgc2V0IHdpdGggQHJlZiBzZF9ibGVfZ2FwX2RldmljZV9pZGVudGl0aWVzX3NldCkgd2hlbiBwZWVyIGlzIHVzaW5nIHByaXZhY3kuICovDQorICB1aW50OF90IGFkZHJfdHlwZSAgICA6IDc7ICAgICAgIC8qKjwgU2VlIEByZWYgQkxFX0dBUF9BRERSX1RZUEVTLiAqLw0KKyAgdWludDhfdCBhZGRyW0JMRV9HQVBfQUREUl9MRU5dOyAvKio8IDQ4LWJpdCBhZGRyZXNzLCBMU0IgZm9ybWF0LiAqLw0KK30gYmxlX2dhcF9hZGRyX3Q7DQorDQorDQorLyoqQGJyaWVmIEdBUCBjb25uZWN0aW9uIHBhcmFtZXRlcnMuDQorICoNCisgKiBAbm90ZSAgV2hlbiBibGVfY29ubl9wYXJhbXNfdCBpcyByZWNlaXZlZCBpbiBhbiBldmVudCwgYm90aCBtaW5fY29ubl9pbnRlcnZhbCBhbmQNCisgKiAgICAgICAgbWF4X2Nvbm5faW50ZXJ2YWwgd2lsbCBiZSBlcXVhbCB0byB0aGUgY29ubmVjdGlvbiBpbnRlcnZhbCBzZXQgYnkgdGhlIGNlbnRyYWwuDQorICoNCisgKiBAbm90ZSAgSWYgYm90aCBjb25uX3N1cF90aW1lb3V0IGFuZCBtYXhfY29ubl9pbnRlcnZhbCBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZSBmb2xsb3dpbmcgY29uc3RyYWludCBhcHBsaWVzOg0KKyAqICAgICAgICBjb25uX3N1cF90aW1lb3V0ICogNCA+ICgxICsgc2xhdmVfbGF0ZW5jeSkgKiBtYXhfY29ubl9pbnRlcnZhbA0KKyAqICAgICAgICB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBmb2xsb3dpbmcgQmx1ZXRvb3RoIFNwZWMgcmVxdWlyZW1lbnQ6DQorICogICAgICAgIFRoZSBTdXBlcnZpc2lvbl9UaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBzaGFsbCBiZSBsYXJnZXIgdGhhbg0KKyAqICAgICAgICAoMSArIENvbm5fTGF0ZW5jeSkgKiBDb25uX0ludGVydmFsX01heCAqIDIsIHdoZXJlIENvbm5fSW50ZXJ2YWxfTWF4IGlzIGdpdmVuIGluIG1pbGxpc2Vjb25kcy4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90IG1pbl9jb25uX2ludGVydmFsOyAgICAgICAgIC8qKjwgTWluaW11bSBDb25uZWN0aW9uIEludGVydmFsIGluIDEuMjUgbXMgdW5pdHMsIHNlZSBAcmVmIEJMRV9HQVBfQ1BfTElNSVRTLiovDQorICB1aW50MTZfdCBtYXhfY29ubl9pbnRlcnZhbDsgICAgICAgICAvKio8IE1heGltdW0gQ29ubmVjdGlvbiBJbnRlcnZhbCBpbiAxLjI1IG1zIHVuaXRzLCBzZWUgQHJlZiBCTEVfR0FQX0NQX0xJTUlUUy4qLw0KKyAgdWludDE2X3Qgc2xhdmVfbGF0ZW5jeTsgICAgICAgICAgICAgLyoqPCBTbGF2ZSBMYXRlbmN5IGluIG51bWJlciBvZiBjb25uZWN0aW9uIGV2ZW50cywgc2VlIEByZWYgQkxFX0dBUF9DUF9MSU1JVFMuKi8NCisgIHVpbnQxNl90IGNvbm5fc3VwX3RpbWVvdXQ7ICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBTdXBlcnZpc2lvbiBUaW1lb3V0IGluIDEwIG1zIHVuaXRzLCBzZWUgQHJlZiBCTEVfR0FQX0NQX0xJTUlUUy4qLw0KK30gYmxlX2dhcF9jb25uX3BhcmFtc190Ow0KKw0KKw0KKy8qKkBicmllZiBHQVAgY29ubmVjdGlvbiBzZWN1cml0eSBtb2Rlcy4NCisgKg0KKyAqIFNlY3VyaXR5IE1vZGUgMCBMZXZlbCAwOiBObyBhY2Nlc3MgcGVybWlzc2lvbnMgYXQgYWxsICh0aGlzIGxldmVsIGlzIG5vdCBkZWZpbmVkIGJ5IHRoZSBCbHVldG9vdGggQ29yZSBzcGVjaWZpY2F0aW9uKS5cbg0KKyAqIFNlY3VyaXR5IE1vZGUgMSBMZXZlbCAxOiBObyBzZWN1cml0eSBpcyBuZWVkZWQgKGFrYSBvcGVuIGxpbmspLlxuDQorICogU2VjdXJpdHkgTW9kZSAxIExldmVsIDI6IEVuY3J5cHRlZCBsaW5rIHJlcXVpcmVkLCBNSVRNIHByb3RlY3Rpb24gbm90IG5lY2Vzc2FyeS5cbg0KKyAqIFNlY3VyaXR5IE1vZGUgMSBMZXZlbCAzOiBNSVRNIHByb3RlY3RlZCBlbmNyeXB0ZWQgbGluayByZXF1aXJlZC5cbg0KKyAqIFNlY3VyaXR5IE1vZGUgMSBMZXZlbCA0OiBMRVNDIE1JVE0gcHJvdGVjdGVkIGVuY3J5cHRlZCBsaW5rIHJlcXVpcmVkLlxuDQorICogU2VjdXJpdHkgTW9kZSAyIExldmVsIDE6IFNpZ25pbmcgb3IgZW5jcnlwdGlvbiByZXF1aXJlZCwgTUlUTSBwcm90ZWN0aW9uIG5vdCBuZWNlc3NhcnkuXG4NCisgKiBTZWN1cml0eSBNb2RlIDIgTGV2ZWwgMjogTUlUTSBwcm90ZWN0ZWQgc2lnbmluZyByZXF1aXJlZCwgdW5sZXNzIGxpbmsgaXMgTUlUTSBwcm90ZWN0ZWQgZW5jcnlwdGVkLlxuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IHNtIDogNDsgICAgICAgICAgICAgICAgICAgICAvKio8IFNlY3VyaXR5IE1vZGUgKDEgb3IgMiksIDAgZm9yIG5vIHBlcm1pc3Npb25zIGF0IGFsbC4gKi8NCisgIHVpbnQ4X3QgbHYgOiA0OyAgICAgICAgICAgICAgICAgICAgIC8qKjwgTGV2ZWwgKDEsIDIsIDMgb3IgNCksIDAgZm9yIG5vIHBlcm1pc3Npb25zIGF0IGFsbC4gKi8NCisNCit9IGJsZV9nYXBfY29ubl9zZWNfbW9kZV90Ow0KKw0KKw0KKy8qKkBicmllZiBHQVAgY29ubmVjdGlvbiBzZWN1cml0eSBzdGF0dXMuKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfY29ubl9zZWNfbW9kZV90IHNlY19tb2RlOyAgICAgICAgICAgLyoqPCBDdXJyZW50bHkgYWN0aXZlIHNlY3VyaXR5IG1vZGUgZm9yIHRoaXMgY29ubmVjdGlvbi4qLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgZW5jcl9rZXlfc2l6ZTsgICAgICAvKio8IExlbmd0aCBvZiBjdXJyZW50bHkgYWN0aXZlIGVuY3J5cHRpb24ga2V5LCA3IHRvIDE2IG9jdGV0cyAob25seSBhcHBsaWNhYmxlIGZvciBib25kaW5nIHByb2NlZHVyZXMpLiAqLw0KK30gYmxlX2dhcF9jb25uX3NlY190Ow0KKw0KKy8qKkBicmllZiBJZGVudGl0eSBSZXNvbHZpbmcgS2V5LiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBpcmtbQkxFX0dBUF9TRUNfS0VZX0xFTl07ICAgLyoqPCBBcnJheSBjb250YWluaW5nIElSSy4gKi8NCit9IGJsZV9nYXBfaXJrX3Q7DQorDQorDQorLyoqQGJyaWVmIENoYW5uZWwgbWFzayBmb3IgUkYgY2hhbm5lbHMgdXNlZCBpbiBhZHZlcnRpc2luZy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgY2hfMzdfb2ZmIDogMTsgIC8qKjwgU2V0dGluZyB0aGlzIGJpdCB0byAxIHdpbGwgdHVybiBvZmYgYWR2ZXJ0aXNpbmcgb24gY2hhbm5lbCAzNyAqLw0KKyAgdWludDhfdCBjaF8zOF9vZmYgOiAxOyAgLyoqPCBTZXR0aW5nIHRoaXMgYml0IHRvIDEgd2lsbCB0dXJuIG9mZiBhZHZlcnRpc2luZyBvbiBjaGFubmVsIDM4ICovDQorICB1aW50OF90IGNoXzM5X29mZiA6IDE7ICAvKio8IFNldHRpbmcgdGhpcyBiaXQgdG8gMSB3aWxsIHR1cm4gb2ZmIGFkdmVydGlzaW5nIG9uIGNoYW5uZWwgMzkgKi8NCit9IGJsZV9nYXBfYWR2X2NoX21hc2tfdDsNCisNCisNCisvKipAYnJpZWYgR0FQIGFkdmVydGlzaW5nIHBhcmFtZXRlcnMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAgIC8qKjwgU2VlIEByZWYgQkxFX0dBUF9BRFZfVFlQRVMuICovDQorICBibGVfZ2FwX2FkZHJfdCBjb25zdCAqcF9wZWVyX2FkZHI7ICAgICAgICAgIC8qKjwgQWRkcmVzcyBvZiBhIGtub3duIHBlZXIuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBXaGVuIHByaXZhY3kgaXMgZW5hYmxlZCBhbmQgdGhlIGxvY2FsIGRldmljZSB1c2UgQHJlZiBCTEVfR0FQX0FERFJfVFlQRV9SQU5ET01fUFJJVkFURV9SRVNPTFZBQkxFIGFkZHJlc3NlcywgdGhlIGRldmljZSBpZGVudGl0eSBsaXN0IGlzIHNlYXJjaGVkIGZvciBhIG1hdGNoaW5nDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS4gSWYgdGhlIGxvY2FsIElSSyBmb3IgdGhhdCBkZXZpY2UgaWRlbnRpdHkgaXMgc2V0LCB0aGUgbG9jYWwgSVJLIGZvciB0aGF0IGRldmljZSB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGFkdmVydGlzZXIgYWRkcmVzcyBmaWVsZCBpbiB0aGUgYWR2ZXJ0aXNlIHBhY2tldC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIElmIHR5cGUgaXMgQHJlZiBCTEVfR0FQX0FEVl9UWVBFX0FEVl9ESVJFQ1RfSU5ELCB0aGlzIG11c3QgYmUgc2V0IHRvIHRoZSB0YXJnZXRlZCBpbml0aWF0b3IuIElmIHRoZSBpbml0aWF0b3IgaXMgaW4gdGhlIGRldmljZSBpZGVudGl0eSBsaXN0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBlZXIgSVJLIGZvciB0aGF0IGRldmljZSB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGluaXRpYXRvciBhZGRyZXNzIGZpZWxkIGluIHRoZSBBRFZfRElSRUNUX0lORCBwYWNrZXQuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgZnA7ICAgICAgICAgICAgICAgICAgIC8qKjwgRmlsdGVyIFBvbGljeSwgc2VlIEByZWYgQkxFX0dBUF9BRFZfRklMVEVSX1BPTElDSUVTLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICAgIGludGVydmFsOyAgICAgICAgICAgICAvKio8IEFkdmVydGlzaW5nIGludGVydmFsIGJldHdlZW4gMHgwMDIwIGFuZCAweDQwMDAgaW4gMC42MjUgbXMgdW5pdHMgKDIwIG1zIHRvIDEwLjI0IHMpLCBzZWUgQHJlZiBCTEVfR0FQX0FEVl9JTlRFUlZBTFMuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJZiB0eXBlIGVxdWFscyBAcmVmIEJMRV9HQVBfQURWX1RZUEVfQURWX0RJUkVDVF9JTkQsIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIDAgZm9yIGhpZ2ggZHV0eSBjeWNsZSBkaXJlY3RlZCBhZHZlcnRpc2luZy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIElmIHR5cGUgZXF1YWxzIEByZWYgQkxFX0dBUF9BRFZfVFlQRV9BRFZfRElSRUNUX0lORCwgc2V0IEByZWYgQkxFX0dBUF9BRFZfSU5URVJWQUxfTUlOIDw9IGludGVydmFsIDw9IEByZWYgQkxFX0dBUF9BRFZfSU5URVJWQUxfTUFYIGZvciBsb3cgZHV0eSBjeWNsZSBhZHZlcnRpc2luZy4qLw0KKyAgdWludDE2X3QgICAgICAgICAgICAgIHRpbWVvdXQ7ICAgICAgICAgICAgICAvKio8IEFkdmVydGlzaW5nIHRpbWVvdXQgYmV0d2VlbiAweDAwMDEgYW5kIDB4M0ZGRiBpbiBzZWNvbmRzLCAweDAwMDAgZGlzYWJsZXMgdGltZW91dC4gU2VlIGFsc28gQHJlZiBCTEVfR0FQX0FEVl9USU1FT1VUX1ZBTFVFUy4gSWYgdHlwZSBlcXVhbHMgQHJlZiBCTEVfR0FQX0FEVl9UWVBFX0FEVl9ESVJFQ1RfSU5ELCB0aGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldCB0byAwIGZvciBIaWdoIGR1dHkgY3ljbGUgZGlyZWN0ZWQgYWR2ZXJ0aXNpbmcuICovDQorICBibGVfZ2FwX2Fkdl9jaF9tYXNrX3QgY2hhbm5lbF9tYXNrOyAgICAgICAgIC8qKjwgQWR2ZXJ0aXNpbmcgY2hhbm5lbCBtYXNrLiBTZWUgQHJlZiBibGVfZ2FwX2Fkdl9jaF9tYXNrX3QuICovDQorfSBibGVfZ2FwX2Fkdl9wYXJhbXNfdDsNCisNCisNCisvKipAYnJpZWYgR0FQIHNjYW5uaW5nIHBhcmFtZXRlcnMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICBhY3RpdmUgICAgICAgICA6IDE7ICAvKio8IElmIDEsIHBlcmZvcm0gYWN0aXZlIHNjYW5uaW5nIChzY2FuIHJlcXVlc3RzKS4gKi8NCisgIHVpbnQ4X3QgIHVzZV93aGl0ZWxpc3QgIDogMTsgIC8qKjwgSWYgMSwgZmlsdGVyIGFkdmVydGlzZXJzIHVzaW5nIGN1cnJlbnQgYWN0aXZlIHdoaXRlbGlzdC4gKi8NCisgIHVpbnQ4X3QgIGFkdl9kaXJfcmVwb3J0IDogMTsgIC8qKjwgSWYgMSwgYWxzbyByZXBvcnQgZGlyZWN0ZWQgYWR2ZXJ0aXNlbWVudHMgd2hlcmUgdGhlIGluaXRpYXRvciBmaWVsZCBpcyBzZXQgdG8gYSBwcml2YXRlIHJlc29sdmFibGUgYWRkcmVzcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbiBpZiB0aGUgYWRkcmVzcyBkaWQgbm90IHJlc29sdmUgdG8gYW4gZW50cnkgaW4gdGhlIGRldmljZSBpZGVudGl0eSBsaXN0LiBBIHJlcG9ydCB3aWxsIGJlIGdlbmVyYXRlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuIGlmIHRoZSBwZWVyIGlzIG5vdCBpbiB0aGUgd2hpdGVsaXN0LiAqLw0KKyAgdWludDE2X3QgaW50ZXJ2YWw7ICAgICAgICAgICAgLyoqPCBTY2FuIGludGVydmFsIGJldHdlZW4gMHgwMDA0IGFuZCAweDQwMDAgaW4gMC42MjUgbXMgdW5pdHMgKDIuNSBtcyB0byAxMC4yNCBzKS4gKi8NCisgIHVpbnQxNl90IHdpbmRvdzsgICAgICAgICAgICAgIC8qKjwgU2NhbiB3aW5kb3cgYmV0d2VlbiAweDAwMDQgYW5kIDB4NDAwMCBpbiAwLjYyNSBtcyB1bml0cyAoMi41IG1zIHRvIDEwLjI0IHMpLiAqLw0KKyAgdWludDE2X3QgdGltZW91dDsgICAgICAgICAgICAgLyoqPCBTY2FuIHRpbWVvdXQgYmV0d2VlbiAweDAwMDEgYW5kIDB4RkZGRiBpbiBzZWNvbmRzLCAweDAwMDAgZGlzYWJsZXMgdGltZW91dC4gKi8NCit9IGJsZV9nYXBfc2Nhbl9wYXJhbXNfdDsNCisNCisNCisvKipAYnJpZWYgRGV2aWNlIFByaXZhY3kuDQorICoNCisgKiAgICAgICAgVGhlIHByaXZhY3kgZmVhdHVyZSBwcm92aWRlcyBhIHdheSBmb3IgdGhlIGRldmljZSB0byBhdm9pZCBiZWluZyB0cmFja2VkIG92ZXIgYSBwZXJpb2Qgb2YgdGltZS4NCisgKiAgICAgICAgVGhlIHByaXZhY3kgZmVhdHVyZSwgd2hlbiBlbmFibGVkLCBoaWRlcyB0aGUgbG9jYWwgZGV2aWNlIGlkZW50aXR5IGFuZCByZXBsYWNlcyBpdCB3aXRoIGEgcHJpdmF0ZSBhZGRyZXNzDQorICogICAgICAgIHRoYXQgaXMgYXV0b21hdGljYWxseSByZWZyZXNoZWQgYXQgYSBzcGVjaWZpZWQgaW50ZXJ2YWwuDQorICoNCisgKiAgICAgICAgSWYgYSBkZXZpY2Ugc3RpbGwgd2FudHMgdG8gYmUgcmVjb2duaXplZCBieSBvdGhlciBwZWVycywgaXQgbmVlZHMgdG8gc2hhcmUgaXQncyBJZGVudGl0eSBSZXNvbHZpbmcgS2V5IChJUkspLg0KKyAqICAgICAgICBXaXRoIHRoaXMga2V5LCBhIGRldmljZSBjYW4gZ2VuZXJhdGUgYSByYW5kb20gcHJpdmF0ZSBhZGRyZXNzIHRoYXQgY2FuIG9ubHkgYmUgcmVjb2duaXplZCBieSBwZWVycyBpbiBwb3NzZXNzaW9uIG9mIHRoYXQga2V5LA0KKyAqICAgICAgICBhbmQgZGV2aWNlcyBjYW4gZXN0YWJsaXNoIGNvbm5lY3Rpb25zIHdpdGhvdXQgcmV2ZWFsaW5nIHRoZWlyIHJlYWwgaWRlbnRpdGllcy4NCisgKg0KKyAqIEBub3RlICBJZiB0aGUgZGV2aWNlIElSSyBpcyB1cGRhdGVkLCB0aGUgbmV3IElSSyBiZWNvbWVzIHRoZSBvbmUgdG8gYmUgZGlzdHJpYnV0ZWQgaW4gYWxsDQorICogICAgICAgIGJvbmRpbmcgcHJvY2VkdXJlcyBwZXJmb3JtZWQgYWZ0ZXIgQHJlZiBzZF9ibGVfZ2FwX3ByaXZhY3lfc2V0IHJldHVybnMuDQorICogICAgICAgIFRoZSBJUksgZGlzdHJpYnV0ZWQgZHVyaW5nIGJvbmRpbmcgcHJvY2VkdXJlIGlzIHRoZSBkZXZpY2UgSVJLIHRoYXQgaXMgYWN0aXZlIHdoZW4gQHJlZiBzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkgaXMgY2FsbGVkLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICAgICAgcHJpdmFjeV9tb2RlOyAgICAgICAgIC8qKjwgUHJpdmFjeSBtb2RlLCBzZWUgQHJlZiBCTEVfR0FQX1BSSVZBQ1lfTU9ERVMuIERlZmF1bHQgaXMgQHJlZiBCTEVfR0FQX1BSSVZBQ1lfTU9ERV9PRkYuICovDQorICB1aW50OF90ICAgICAgICBwcml2YXRlX2FkZHJfdHlwZTsgICAgLyoqPCBUaGUgcHJpdmF0ZSBhZGRyZXNzIHR5cGUgbXVzdCBiZSBlaXRoZXIgQHJlZiBCTEVfR0FQX0FERFJfVFlQRV9SQU5ET01fUFJJVkFURV9SRVNPTFZBQkxFIG9yIEByZWYgQkxFX0dBUF9BRERSX1RZUEVfUkFORE9NX1BSSVZBVEVfTk9OX1JFU09MVkFCTEUuICovDQorICB1aW50MTZfdCAgICAgICBwcml2YXRlX2FkZHJfY3ljbGVfczsgLyoqPCBQcml2YXRlIGFkZHJlc3MgY3ljbGUgaW50ZXJ2YWwgaW4gc2Vjb25kcy4gUHJvdmlkaW5nIGFuIGFkZHJlc3MgY3ljbGUgdmFsdWUgb2YgMCB3aWxsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEByZWYgQkxFX0dBUF9ERUZBVUxUX1BSSVZBVEVfQUREUl9DWUNMRV9JTlRFUlZBTF9TLiAqLw0KKyAgYmxlX2dhcF9pcmtfdCAqcF9kZXZpY2VfaXJrOyAgICAgICAgIC8qKjwgV2hlbiB1c2VkIGFzIGlucHV0LCBwb2ludGVyIHRvIElSSyBzdHJ1Y3R1cmUgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgSVJLLiBJZiBOVUxMLCB0aGUgZGV2aWNlIGRlZmF1bHQgSVJLIHdpbGwgYmUgdXNlZC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNlZCBhcyBvdXRwdXQsIHBvaW50ZXIgdG8gSVJLIHN0cnVjdHVyZSB3aGVyZSB0aGUgY3VycmVudCBkZWZhdWx0IElSSyB3aWxsIGJlIHdyaXR0ZW4gdG8uIElmIE5VTEwsIHRoaXMgYXJndW1lbnQgaXMgaWdub3JlZC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBkZWZhdWx0IElSSyBpcyB1c2VkIHRvIGdlbmVyYXRlIHJhbmRvbSBwcml2YXRlIHJlc29sdmFibGUgYWRkcmVzc2VzIGZvciB0aGUgbG9jYWwgZGV2aWNlIHVubGVzcyBpbnN0cnVjdGVkIG90aGVyd2lzZS4gKi8NCit9IGJsZV9nYXBfcHJpdmFjeV9wYXJhbXNfdDsNCisNCisNCisvKipAYnJpZWYgUGh5c2ljYWwgTGF5ZXIgY29uZmlndXJhdGlvbg0KKyAqIEBub3RlICAgICAgdHhfcGh5cyBhbmQgcnhfcGh5cyBhcmUgYml0ZmllbGRzLCB0byBpbmRpY2F0ZSBtdWx0aXBsZSBwcmVmZXJyZWQgUEhZcyBmb3IgZWFjaCBkaXJlY3Rpb24gdGhleSBjYW4gYmUgT1JlZCB0b2dldGhlci4NCisgKiBAY29kZQ0KKyAqIHBfZ2FwX3BoeXMtPnR4X3BoeXMgPSBCTEVfR0FQX1BIWV8xTUJQUyB8IEJMRV9HQVBfUEhZXzJNQlBTOw0KKyAqIHBfZ2FwX3BoeXMtPnJ4X3BoeXMgPSBCTEVfR0FQX1BIWV8xTUJQUyB8IEJMRV9HQVBfUEhZXzJNQlBTOw0KKyAqIEBlbmRjb2RlDQorICoNCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgdHhfcGh5czsgICAgIC8qKjwgUHJlZmVycmVkIHRyYW5zbWl0IFBIWXMsIHNlZSBAcmVmIEJMRV9HQVBfUEhZUy4gKi8NCisgIHVpbnQ4X3QgcnhfcGh5czsgICAgIC8qKjwgUHJlZmVycmVkIHJlY2VpdmUgUEhZcywgc2VlIEByZWYgQkxFX0dBUF9QSFlTLiAqLw0KK30gYmxlX2dhcF9waHlzX3Q7DQorDQorLyoqIEBicmllZiBLZXlzIHRoYXQgY2FuIGJlIGV4Y2hhbmdlZCBkdXJpbmcgYSBib25kaW5nIHByb2NlZHVyZS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgZW5jICAgICA6IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMb25nIFRlcm0gS2V5IGFuZCBNYXN0ZXIgSWRlbnRpZmljYXRpb24uICovDQorICB1aW50OF90IGlkICAgICAgOiAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSWRlbnRpdHkgUmVzb2x2aW5nIEtleSBhbmQgSWRlbnRpdHkgQWRkcmVzcyBJbmZvcm1hdGlvbi4gKi8NCisgIHVpbnQ4X3Qgc2lnbiAgICA6IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIFNpZ25hdHVyZSBSZXNvbHZpbmcgS2V5LiAqLw0KKyAgdWludDhfdCBsaW5rICAgIDogMTsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERlcml2ZSB0aGUgTGluayBLZXkgZnJvbSB0aGUgTFRLLiAqLw0KK30gYmxlX2dhcF9zZWNfa2Rpc3RfdDsNCisNCisNCisvKipAYnJpZWYgR0FQIHNlY3VyaXR5IHBhcmFtZXRlcnMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgICAgICAgYm9uZCAgICAgIDogMTsgICAgICAgICAgICAgLyoqPCBQZXJmb3JtIGJvbmRpbmcuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgbWl0bSAgICAgIDogMTsgICAgICAgICAgICAgLyoqPCBFbmFibGUgTWFuIEluIFRoZSBNaWRkbGUgcHJvdGVjdGlvbi4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICBsZXNjICAgICAgOiAxOyAgICAgICAgICAgICAvKio8IEVuYWJsZSBMRSBTZWN1cmUgQ29ubmVjdGlvbiBwYWlyaW5nLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgIGtleXByZXNzICA6IDE7ICAgICAgICAgICAgIC8qKjwgRW5hYmxlIGdlbmVyYXRpb24gb2Yga2V5cHJlc3Mgbm90aWZpY2F0aW9ucy4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICBpb19jYXBzICAgOiAzOyAgICAgICAgICAgICAvKio8IElPIGNhcGFiaWxpdGllcywgc2VlIEByZWYgQkxFX0dBUF9JT19DQVBTLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgIG9vYiAgICAgICA6IDE7ICAgICAgICAgICAgIC8qKjwgVGhlIE9PQiBkYXRhIGZsYWcuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEluIExFIGxlZ2FjeSBwYWlyaW5nLCB0aGlzIGZsYWcgaXMgc2V0IGlmIGEgZGV2aWNlIGhhcyBvdXQgb2YgYmFuZCBhdXRoZW50aWNhdGlvbiBkYXRhLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT09CIG1ldGhvZCBpcyB1c2VkIGlmIGJvdGggb2YgdGhlIGRldmljZXMgaGF2ZSBvdXQgb2YgYmFuZCBhdXRoZW50aWNhdGlvbiBkYXRhLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJbiBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgcGFpcmluZywgdGhpcyBmbGFnIGlzIHNldCBpZiBhIGRldmljZSBoYXMgdGhlIHBlZXIgZGV2aWNlJ3Mgb3V0IG9mIGJhbmQgYXV0aGVudGljYXRpb24gZGF0YS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9PQiBtZXRob2QgaXMgdXNlZCBpZiBhdCBsZWFzdCBvbmUgZGV2aWNlIGhhcyB0aGUgcGVlciBkZXZpY2UncyBPT0IgZGF0YSBhdmFpbGFibGUuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgbWluX2tleV9zaXplOyAgICAgICAgICAgICAgLyoqPCBNaW5pbXVtIGVuY3J5cHRpb24ga2V5IHNpemUgaW4gb2N0ZXRzIGJldHdlZW4gNyBhbmQgMTYuIElmIDAgdGhlbiBub3QgYXBwbGljYWJsZSBpbiB0aGlzIGluc3RhbmNlLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgIG1heF9rZXlfc2l6ZTsgICAgICAgICAgICAgIC8qKjwgTWF4aW11bSBlbmNyeXB0aW9uIGtleSBzaXplIGluIG9jdGV0cyBiZXR3ZWVuIG1pbl9rZXlfc2l6ZSBhbmQgMTYuICovDQorICBibGVfZ2FwX3NlY19rZGlzdF90ICAga2Rpc3Rfb3duOyAgICAgICAgICAgICAgICAgLyoqPCBLZXkgZGlzdHJpYnV0aW9uIGJpdG1hcDoga2V5cyB0aGF0IHRoZSBsb2NhbCBkZXZpY2Ugd2lsbCBkaXN0cmlidXRlLiAqLw0KKyAgYmxlX2dhcF9zZWNfa2Rpc3RfdCAgIGtkaXN0X3BlZXI7ICAgICAgICAgICAgICAgIC8qKjwgS2V5IGRpc3RyaWJ1dGlvbiBiaXRtYXA6IGtleXMgdGhhdCB0aGUgcmVtb3RlIGRldmljZSB3aWxsIGRpc3RyaWJ1dGUuICovDQorfSBibGVfZ2FwX3NlY19wYXJhbXNfdDsNCisNCisNCisvKipAYnJpZWYgR0FQIEVuY3J5cHRpb24gSW5mb3JtYXRpb24uICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgbHRrW0JMRV9HQVBfU0VDX0tFWV9MRU5dOyAgIC8qKjwgTG9uZyBUZXJtIEtleS4gKi8NCisgIHVpbnQ4X3QgICBsZXNjIDogMTsgICAgICAgICAgICAgICAgICAgLyoqPCBLZXkgZ2VuZXJhdGVkIHVzaW5nIExFIFNlY3VyZSBDb25uZWN0aW9ucy4gKi8NCisgIHVpbnQ4X3QgICBhdXRoIDogMTsgICAgICAgICAgICAgICAgICAgLyoqPCBBdXRoZW50aWNhdGVkIEtleS4gKi8NCisgIHVpbnQ4X3QgICBsdGtfbGVuIDogNjsgICAgICAgICAgICAgICAgLyoqPCBMVEsgbGVuZ3RoIGluIG9jdGV0cy4gKi8NCit9IGJsZV9nYXBfZW5jX2luZm9fdDsNCisNCisNCisvKipAYnJpZWYgR0FQIE1hc3RlciBJZGVudGlmaWNhdGlvbi4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICBlZGl2OyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFbmNyeXB0ZWQgRGl2ZXJzaWZpZXIuICovDQorICB1aW50OF90ICAgcmFuZFtCTEVfR0FQX1NFQ19SQU5EX0xFTl07IC8qKjwgUmFuZG9tIE51bWJlci4gKi8NCit9IGJsZV9nYXBfbWFzdGVyX2lkX3Q7DQorDQorDQorLyoqQGJyaWVmIEdBUCBTaWduaW5nIEluZm9ybWF0aW9uLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgIGNzcmtbQkxFX0dBUF9TRUNfS0VZX0xFTl07ICAgICAgICAvKio8IENvbm5lY3Rpb24gU2lnbmF0dXJlIFJlc29sdmluZyBLZXkuICovDQorfSBibGVfZ2FwX3NpZ25faW5mb190Ow0KKw0KKw0KKy8qKkBicmllZiBHQVAgTEUgU2VjdXJlIENvbm5lY3Rpb25zIFAtMjU2IFB1YmxpYyBLZXkuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgcGtbQkxFX0dBUF9MRVNDX1AyNTZfUEtfTEVOXTsgICAgICAgIC8qKjwgTEUgU2VjdXJlIENvbm5lY3Rpb25zIEVsbGlwdGljIEN1cnZlIERpZmZpZS1IZWxsbWFuIFAtMjU2IFB1YmxpYyBLZXkuIFN0b3JlZCBpbiB0aGUgc3RhbmRhcmQgU01QIHByb3RvY29sIGZvcm1hdDoge1gsWX0gYm90aCBpbiBsaXR0bGUtZW5kaWFuLiAqLw0KK30gYmxlX2dhcF9sZXNjX3AyNTZfcGtfdDsNCisNCisNCisvKipAYnJpZWYgR0FQIExFIFNlY3VyZSBDb25uZWN0aW9ucyBESEtleS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICBrZXlbQkxFX0dBUF9MRVNDX0RIS0VZX0xFTl07ICAgICAgICAvKio8IExFIFNlY3VyZSBDb25uZWN0aW9ucyBFbGxpcHRpYyBDdXJ2ZSBEaWZmaWUtSGVsbG1hbiBLZXkuIFN0b3JlZCBpbiBsaXR0bGUtZW5kaWFuLiAqLw0KK30gYmxlX2dhcF9sZXNjX2Roa2V5X3Q7DQorDQorDQorLyoqQGJyaWVmIEdBUCBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgT09CIGRhdGEuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2FwX2FkZHJfdCAgYWRkcjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQmx1ZXRvb3RoIGFkZHJlc3Mgb2YgdGhlIGRldmljZS4gKi8NCisgIHVpbnQ4X3QgICAgICAgICByW0JMRV9HQVBfU0VDX0tFWV9MRU5dOyAgICAgICAgLyoqPCBSYW5kb20gTnVtYmVyLiAqLw0KKyAgdWludDhfdCAgICAgICAgIGNbQkxFX0dBUF9TRUNfS0VZX0xFTl07ICAgICAgICAvKio8IENvbmZpcm0gVmFsdWUuICovDQorfSBibGVfZ2FwX2xlc2Nfb29iX2RhdGFfdDsNCisNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVBfRVZUX0NPTk5FQ1RFRC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfYWRkcl90ICAgICAgICBwZWVyX2FkZHI7ICAgICAgICAgICAgICAvKio8IEJsdWV0b290aCBhZGRyZXNzIG9mIHRoZSBwZWVyIGRldmljZS4gSWYgdGhlIHBlZXJfYWRkciByZXNvbHZlZDogQHJlZiBibGVfZ2FwX2FkZHJfdDo6YWRkcl9pZF9wZWVyIGlzIHNldCB0byAxDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGFkZHJlc3MgaXMgdGhlIGRldmljZSdzIGlkZW50aXR5IGFkZHJlc3MuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgcm9sZTsgICAgICAgICAgICAgICAgICAgLyoqPCBCTEUgcm9sZSBmb3IgdGhpcyBjb25uZWN0aW9uLCBzZWUgQHJlZiBCTEVfR0FQX1JPTEVTICovDQorICBibGVfZ2FwX2Nvbm5fcGFyYW1zX3QgY29ubl9wYXJhbXM7ICAgICAgICAgICAgLyoqPCBHQVAgQ29ubmVjdGlvbiBQYXJhbWV0ZXJzLiAqLw0KK30gYmxlX2dhcF9ldnRfY29ubmVjdGVkX3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9ESVNDT05ORUNURUQuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IHJlYXNvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBIQ0kgZXJyb3IgY29kZSwgc2VlIEByZWYgQkxFX0hDSV9TVEFUVVNfQ09ERVMuICovDQorfSBibGVfZ2FwX2V2dF9kaXNjb25uZWN0ZWRfdDsNCisNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX2dhcF9jb25uX3BhcmFtc190IGNvbm5fcGFyYW1zOyAgICAgICAgICAgIC8qKjwgIEdBUCBDb25uZWN0aW9uIFBhcmFtZXRlcnMuICovDQorfSBibGVfZ2FwX2V2dF9jb25uX3BhcmFtX3VwZGF0ZV90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBTdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfUEhZX1VQREFURS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXR1cyBvZiB0aGUgcHJvY2VkdXJlLCBzZWUgQHJlZiBCTEVfSENJX1NUQVRVU19DT0RFUyAqLw0KKyAgdWludDhfdCB0eF9waHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFggUEhZIGZvciB0aGlzIGNvbm5lY3Rpb24sIHNlZSBAcmVmIEJMRV9HQVBfUEhZUy4gKi8NCisgIHVpbnQ4X3QgcnhfcGh5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJYIFBIWSBmb3IgdGhpcyBjb25uZWN0aW9uLCBzZWUgQHJlZiBCTEVfR0FQX1BIWVMuICovDQorfSBibGVfZ2FwX2V2dF9waHlfdXBkYXRlX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1QuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2FwX3NlY19wYXJhbXNfdCBwZWVyX3BhcmFtczsgICAgICAgICAgICAgLyoqPCBJbml0aWF0b3IgU2VjdXJpdHkgUGFyYW1ldGVycy4gKi8NCit9IGJsZV9nYXBfZXZ0X3NlY19wYXJhbXNfcmVxdWVzdF90Ow0KKw0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfU0VDX0lORk9fUkVRVUVTVC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfYWRkcl90ICAgICAgcGVlcl9hZGRyOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgQmx1ZXRvb3RoIGFkZHJlc3Mgb2YgdGhlIHBlZXIgZGV2aWNlLiAqLw0KKyAgYmxlX2dhcF9tYXN0ZXJfaWRfdCBtYXN0ZXJfaWQ7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBNYXN0ZXIgSWRlbnRpZmljYXRpb24gZm9yIExUSyBsb29rdXAuICovDQorICB1aW50OF90ICAgICAgICAgICAgIGVuY19pbmZvICA6IDE7ICAgICAgICAgICAgICAgICAvKio8IElmIDEsIEVuY3J5cHRpb24gSW5mb3JtYXRpb24gcmVxdWlyZWQuICovDQorICB1aW50OF90ICAgICAgICAgICAgIGlkX2luZm8gICA6IDE7ICAgICAgICAgICAgICAgICAvKio8IElmIDEsIElkZW50aXR5IEluZm9ybWF0aW9uIHJlcXVpcmVkLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICBzaWduX2luZm8gOiAxOyAgICAgICAgICAgICAgICAgLyoqPCBJZiAxLCBTaWduaW5nIEluZm9ybWF0aW9uIHJlcXVpcmVkLiAqLw0KK30gYmxlX2dhcF9ldnRfc2VjX2luZm9fcmVxdWVzdF90Ow0KKw0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfUEFTU0tFWV9ESVNQTEFZLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBwYXNza2V5W0JMRV9HQVBfUEFTU0tFWV9MRU5dOyAgICAgICAgIC8qKjwgNi1kaWdpdCBwYXNza2V5IGluIEFTQ0lJICgnMCctJzknIGRpZ2l0cyBvbmx5KS4gKi8NCisgIHVpbnQ4X3QgbWF0Y2hfcmVxdWVzdCA6IDE7ICAgICAgICAgICAgICAgICAgICAvKio8IElmIDEgcmVxdWlyZXMgdGhlIGFwcGxpY2F0aW9uIHRvIHJlcG9ydCB0aGUgbWF0Y2ggdXNpbmcgQHJlZiBzZF9ibGVfZ2FwX2F1dGhfa2V5X3JlcGx5DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGVpdGhlciBAcmVmIEJMRV9HQVBfQVVUSF9LRVlfVFlQRV9OT05FIGlmIHRoZXJlIGlzIG5vIG1hdGNoIG9yDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcmVmIEJMRV9HQVBfQVVUSF9LRVlfVFlQRV9QQVNTS0VZIGlmIHRoZXJlIGlzIGEgbWF0Y2guICovDQorfSBibGVfZ2FwX2V2dF9wYXNza2V5X2Rpc3BsYXlfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVBfRVZUX0tFWV9QUkVTU0VELiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBrcF9ub3Q7ICAgICAgICAgLyoqPCBLZXlwcmVzcyBub3RpZmljYXRpb24gdHlwZSwgc2VlIEByZWYgQkxFX0dBUF9LUF9OT1RfVFlQRVMuICovDQorfSBibGVfZ2FwX2V2dF9rZXlfcHJlc3NlZF90Ow0KKw0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfQVVUSF9LRVlfUkVRVUVTVC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3Qga2V5X3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNlZSBAcmVmIEJMRV9HQVBfQVVUSF9LRVlfVFlQRVMuICovDQorfSBibGVfZ2FwX2V2dF9hdXRoX2tleV9yZXF1ZXN0X3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1QuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2FwX2xlc2NfcDI1Nl9wa190ICpwX3BrX3BlZXI7ICAvKio8IExFIFNlY3VyZSBDb25uZWN0aW9ucyByZW1vdGUgUC0yNTYgUHVibGljIEtleS4gVGhpcyB3aWxsIHBvaW50IHRvIHRoZSBhcHBsaWNhdGlvbi1zdXBwbGllZCBtZW1vcnkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWRlIHRoZSBrZXlzZXQgZHVyaW5nIHRoZSBjYWxsIHRvIEByZWYgc2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5LiAqLw0KKyAgdWludDhfdCBvb2JkX3JlcSAgICAgICA6MTsgICAgICAgICAgLyoqPCBMRVNDIE9PQiBkYXRhIHJlcXVpcmVkLiBBIGNhbGwgdG8gQHJlZiBzZF9ibGVfZ2FwX2xlc2Nfb29iX2RhdGFfc2V0IGlzIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHRoZSBwcm9jZWR1cmUuICovDQorfSBibGVfZ2FwX2V2dF9sZXNjX2Roa2V5X3JlcXVlc3RfdDsNCisNCisNCisvKipAYnJpZWYgU2VjdXJpdHkgbGV2ZWxzIHN1cHBvcnRlZC4NCisgKiBAbm90ZSAgU2VlIEJsdWV0b290aCBTcGVjaWZpY2F0aW9uIFZlcnNpb24gNC4yIFZvbHVtZSAzLCBQYXJ0IEMsIENoYXB0ZXIgMTAsIFNlY3Rpb24gMTAuMi4xLg0KKyovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IGx2MSA6IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJZiAxOiBMZXZlbCAxIGlzIHN1cHBvcnRlZC4gKi8NCisgIHVpbnQ4X3QgbHYyIDogMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IElmIDE6IExldmVsIDIgaXMgc3VwcG9ydGVkLiAqLw0KKyAgdWludDhfdCBsdjMgOiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSWYgMTogTGV2ZWwgMyBpcyBzdXBwb3J0ZWQuICovDQorICB1aW50OF90IGx2NCA6IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJZiAxOiBMZXZlbCA0IGlzIHN1cHBvcnRlZC4gKi8NCit9IGJsZV9nYXBfc2VjX2xldmVsc190Ow0KKw0KKw0KKy8qKkBicmllZiBFbmNyeXB0aW9uIEtleS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfZW5jX2luZm9fdCAgICBlbmNfaW5mbzsgICAgICAgICAgICAgLyoqPCBFbmNyeXB0aW9uIEluZm9ybWF0aW9uLiAqLw0KKyAgYmxlX2dhcF9tYXN0ZXJfaWRfdCAgIG1hc3Rlcl9pZDsgICAgICAgICAgICAvKio8IE1hc3RlciBJZGVudGlmaWNhdGlvbi4gKi8NCit9IGJsZV9nYXBfZW5jX2tleV90Ow0KKw0KKw0KKy8qKkBicmllZiBJZGVudGl0eSBLZXkuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2FwX2lya190ICAgICAgICAgaWRfaW5mbzsgICAgICAgICAgICAgIC8qKjwgSWRlbnRpdHkgUmVzb2x2aW5nIEtleS4gKi8NCisgIGJsZV9nYXBfYWRkcl90ICAgICAgICBpZF9hZGRyX2luZm87ICAgICAgICAgLyoqPCBJZGVudGl0eSBBZGRyZXNzLiAqLw0KK30gYmxlX2dhcF9pZF9rZXlfdDsNCisNCisNCisvKipAYnJpZWYgU2VjdXJpdHkgS2V5cy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfZW5jX2tleV90ICAgICAgKnBfZW5jX2tleTsgICAgICAgICAgIC8qKjwgRW5jcnlwdGlvbiBLZXksIG9yIE5VTEwuICovDQorICBibGVfZ2FwX2lkX2tleV90ICAgICAgICpwX2lkX2tleTsgICAgICAgICAgICAvKio8IElkZW50aXR5IEtleSwgb3IgTlVMTC4gKi8NCisgIGJsZV9nYXBfc2lnbl9pbmZvX3QgICAgKnBfc2lnbl9rZXk7ICAgICAgICAgIC8qKjwgU2lnbmluZyBLZXksIG9yIE5VTEwuICovDQorICBibGVfZ2FwX2xlc2NfcDI1Nl9wa190ICpwX3BrOyAgICAgICAgICAgICAgICAvKio8IExFIFNlY3VyZSBDb25uZWN0aW9ucyBQLTI1NiBQdWJsaWMgS2V5LiBXaGVuIGluIGRlYnVnIG1vZGUgdGhlIGFwcGxpY2F0aW9uIG11c3QgdXNlIHRoZSB2YWx1ZSBkZWZpbmVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBDb3JlIEJsdWV0b290aCBTcGVjaWZpY2F0aW9uIHY0LjIgVm9sLjMsIFBhcnQgSCwgU2VjdGlvbiAyLjMuNS42LjEgKi8NCit9IGJsZV9nYXBfc2VjX2tleXNfdDsNCisNCisNCisvKipAYnJpZWYgU2VjdXJpdHkga2V5IHNldCBmb3IgYm90aCBsb2NhbCBhbmQgcGVlciBrZXlzLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX2dhcF9zZWNfa2V5c190ICAgICAgICAgICAga2V5c19vd247ICAgICAvKio8IEtleXMgZGlzdHJpYnV0ZWQgYnkgdGhlIGxvY2FsIGRldmljZS4gRm9yIExFIFNlY3VyZSBDb25uZWN0aW9ucyB0aGUgZW5jcnlwdGlvbiBrZXkgd2lsbCBiZSBnZW5lcmF0ZWQgbG9jYWxseSBhbmQgd2lsbCBhbHdheXMgYmUgc3RvcmVkIGlmIGJvbmRpbmcuICovDQorICBibGVfZ2FwX3NlY19rZXlzX3QgICAgICAgICAgICBrZXlzX3BlZXI7ICAgIC8qKjwgS2V5cyBkaXN0cmlidXRlZCBieSB0aGUgcmVtb3RlIGRldmljZS4gRm9yIExFIFNlY3VyZSBDb25uZWN0aW9ucywgcF9lbmNfa2V5IG11c3QgYWx3YXlzIGJlIE5VTEwuICovDQorfSBibGVfZ2FwX3NlY19rZXlzZXRfdDsNCisNCisNCisvKipAYnJpZWYgRGF0YSBMZW5ndGggVXBkYXRlIFByb2NlZHVyZSBwYXJhbWV0ZXJzLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgbWF4X3R4X29jdGV0czsgICAvKio8IE1heGltdW0gbnVtYmVyIG9mIHBheWxvYWQgb2N0ZXRzIHRoYXQgYSBDb250cm9sbGVyIHN1cHBvcnRzIGZvciB0cmFuc21pc3Npb24gb2YgYSBzaW5nbGUgTGluayBMYXllciBEYXRhIENoYW5uZWwgUERVLiAqLw0KKyAgdWludDE2X3QgbWF4X3J4X29jdGV0czsgICAvKio8IE1heGltdW0gbnVtYmVyIG9mIHBheWxvYWQgb2N0ZXRzIHRoYXQgYSBDb250cm9sbGVyIHN1cHBvcnRzIGZvciByZWNlcHRpb24gb2YgYSBzaW5nbGUgTGluayBMYXllciBEYXRhIENoYW5uZWwgUERVLiAqLw0KKyAgdWludDE2X3QgbWF4X3R4X3RpbWVfdXM7ICAvKio8IE1heGltdW0gdGltZSwgaW4gbWljcm9zZWNvbmRzLCB0aGF0IGEgQ29udHJvbGxlciBzdXBwb3J0cyBmb3IgdHJhbnNtaXNzaW9uIG9mIGEgc2luZ2xlIExpbmsgTGF5ZXIgRGF0YSBDaGFubmVsIFBEVS4gKi8NCisgIHVpbnQxNl90IG1heF9yeF90aW1lX3VzOyAgLyoqPCBNYXhpbXVtIHRpbWUsIGluIG1pY3Jvc2Vjb25kcywgdGhhdCBhIENvbnRyb2xsZXIgc3VwcG9ydHMgZm9yIHJlY2VwdGlvbiBvZiBhIHNpbmdsZSBMaW5rIExheWVyIERhdGEgQ2hhbm5lbCBQRFUuICovDQorfSBibGVfZ2FwX2RhdGFfbGVuZ3RoX3BhcmFtc190Ow0KKw0KKw0KKy8qKkBicmllZiBEYXRhIExlbmd0aCBVcGRhdGUgUHJvY2VkdXJlIGxvY2FsIGxpbWl0YXRpb24uICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCB0eF9wYXlsb2FkX2xpbWl0ZWRfb2N0ZXRzOyAvKio8IElmID4gMCwgdGhlIHJlcXVlc3RlZCBUWCBwYWNrZXQgbGVuZ3RoIGlzIHRvbyBsb25nIGJ5IHRoaXMgbWFueSBvY3RldHMuICovDQorICB1aW50MTZfdCByeF9wYXlsb2FkX2xpbWl0ZWRfb2N0ZXRzOyAvKio8IElmID4gMCwgdGhlIHJlcXVlc3RlZCBSWCBwYWNrZXQgbGVuZ3RoIGlzIHRvbyBsb25nIGJ5IHRoaXMgbWFueSBvY3RldHMuICovDQorICB1aW50MTZfdCB0eF9yeF90aW1lX2xpbWl0ZWRfdXM7ICAgICAvKio8IElmID4gMCwgdGhlIHJlcXVlc3RlZCBjb21iaW5hdGlvbiBvZiBUWCBhbmQgUlggcGFja2V0IGxlbmd0aHMgaXMgdG9vIGxvbmcgYnkgdGhpcyBtYW55IG1pY3Jvc2Vjb25kcy4gKi8NCit9IGJsZV9nYXBfZGF0YV9sZW5ndGhfbGltaXRhdGlvbl90Ow0KKw0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgICAgICAgYXV0aF9zdGF0dXM7ICAgICAgICAgICAgLyoqPCBBdXRoZW50aWNhdGlvbiBzdGF0dXMsIHNlZSBAcmVmIEJMRV9HQVBfU0VDX1NUQVRVUy4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICBlcnJvcl9zcmMgOiAyOyAgICAgICAgICAvKio8IE9uIGVycm9yLCBzb3VyY2UgdGhhdCBjYXVzZWQgdGhlIGZhaWx1cmUsIHNlZSBAcmVmIEJMRV9HQVBfU0VDX1NUQVRVU19TT1VSQ0VTLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgIGJvbmRlZCA6IDE7ICAgICAgICAgICAgIC8qKjwgUHJvY2VkdXJlIHJlc3VsdGVkIGluIGEgYm9uZC4gKi8NCisgIGJsZV9nYXBfc2VjX2xldmVsc190ICBzbTFfbGV2ZWxzOyAgICAgICAgICAgICAvKio8IExldmVscyBzdXBwb3J0ZWQgaW4gU2VjdXJpdHkgTW9kZSAxLiAqLw0KKyAgYmxlX2dhcF9zZWNfbGV2ZWxzX3QgIHNtMl9sZXZlbHM7ICAgICAgICAgICAgIC8qKjwgTGV2ZWxzIHN1cHBvcnRlZCBpbiBTZWN1cml0eSBNb2RlIDIuICovDQorICBibGVfZ2FwX3NlY19rZGlzdF90ICAga2Rpc3Rfb3duOyAgICAgICAgICAgICAgLyoqPCBCaXRtYXAgc3RhdGluZyB3aGljaCBrZXlzIHdlcmUgZXhjaGFuZ2VkIChkaXN0cmlidXRlZCkgYnkgdGhlIGxvY2FsIGRldmljZS4gSWYgYm9uZGluZyB3aXRoIExFIFNlY3VyZSBDb25uZWN0aW9ucywgdGhlIGVuYyBiaXQgd2lsbCBiZSBhbHdheXMgc2V0LiAqLw0KKyAgYmxlX2dhcF9zZWNfa2Rpc3RfdCAgIGtkaXN0X3BlZXI7ICAgICAgICAgICAgIC8qKjwgQml0bWFwIHN0YXRpbmcgd2hpY2gga2V5cyB3ZXJlIGV4Y2hhbmdlZCAoZGlzdHJpYnV0ZWQpIGJ5IHRoZSByZW1vdGUgZGV2aWNlLiBJZiBib25kaW5nIHdpdGggTEUgU2VjdXJlIENvbm5lY3Rpb25zLCB0aGUgZW5jIGJpdCB3aWxsIG5ldmVyIGJlIHNldC4gKi8NCit9IGJsZV9nYXBfZXZ0X2F1dGhfc3RhdHVzX3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2FwX2Nvbm5fc2VjX3QgY29ubl9zZWM7ICAgICAgICAgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIHNlY3VyaXR5IGxldmVsLiAqLw0KK30gYmxlX2dhcF9ldnRfY29ubl9zZWNfdXBkYXRlX3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9USU1FT1VULiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBzcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU291cmNlIG9mIHRpbWVvdXQgZXZlbnQsIHNlZSBAcmVmIEJMRV9HQVBfVElNRU9VVF9TT1VSQ0VTLiAqLw0KK30gYmxlX2dhcF9ldnRfdGltZW91dF90Ow0KKw0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfUlNTSV9DSEFOR0VELiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgaW50OF90ICByc3NpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmVkIFNpZ25hbCBTdHJlbmd0aCBJbmRpY2F0aW9uIGluIGRCbS4gKi8NCit9IGJsZV9nYXBfZXZ0X3Jzc2lfY2hhbmdlZF90Ow0KKw0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfQURWX1JFUE9SVC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfYWRkcl90IHBlZXJfYWRkcjsgICAgICAgICAgICAgICAgICAgICAvKio8IEJsdWV0b290aCBhZGRyZXNzIG9mIHRoZSBwZWVyIGRldmljZS4gSWYgdGhlIHBlZXJfYWRkciByZXNvbHZlZDogQHJlZiBibGVfZ2FwX2FkZHJfdDo6YWRkcl9pZF9wZWVyIGlzIHNldCB0byAxDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGFkZHJlc3MgaXMgdGhlIGRldmljZSdzIGlkZW50aXR5IGFkZHJlc3MuICovDQorICBibGVfZ2FwX2FkZHJfdCBkaXJlY3RfYWRkcjsgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgd2hlbiB0aGUgc2Nhbm5lciBpcyB1bmFibGUgdG8gcmVzb2x2ZSB0aGUgcHJpdmF0ZSByZXNvbHZhYmxlIGFkZHJlc3Mgb2YgdGhlIGluaXRpYXRvcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgb2YgYSBkaXJlY3RlZCBhZHZlcnRpc2VtZW50IHBhY2tldCBhbmQgdGhlIHNjYW5uZXIgaGFzIGJlZW4gZW5hYmxlZCB0byByZXBvcnQgdGhpcyBpbiBAcmVmIGJsZV9nYXBfc2Nhbl9wYXJhbXNfdDo6YWR2X2Rpcl9yZXBvcnQuICovDQorICBpbnQ4X3QgICAgICAgICByc3NpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlZCBTaWduYWwgU3RyZW5ndGggSW5kaWNhdGlvbiBpbiBkQm0uICovDQorICB1aW50OF90ICAgICAgICBzY2FuX3JzcCA6IDE7ICAgICAgICAgICAgICAgICAgLyoqPCBJZiAxLCB0aGUgcmVwb3J0IGNvcnJlc3BvbmRzIHRvIGEgc2NhbiByZXNwb25zZSBhbmQgdGhlIHR5cGUgZmllbGQgbWF5IGJlIGlnbm9yZWQuICovDQorICB1aW50OF90ICAgICAgICB0eXBlICAgICA6IDI7ICAgICAgICAgICAgICAgICAgLyoqPCBTZWUgQHJlZiBCTEVfR0FQX0FEVl9UWVBFUy4gT25seSB2YWxpZCBpZiB0aGUgc2Nhbl9yc3AgZmllbGQgaXMgMC4gKi8NCisgIHVpbnQ4X3QgICAgICAgIGRsZW4gICAgIDogNTsgICAgICAgICAgICAgICAgICAvKio8IEFkdmVydGlzaW5nIG9yIHNjYW4gcmVzcG9uc2UgZGF0YSBsZW5ndGguICovDQorICB1aW50OF90ICAgICAgICBkYXRhW0JMRV9HQVBfQURWX01BWF9TSVpFXTsgICAgLyoqPCBBZHZlcnRpc2luZyBvciBzY2FuIHJlc3BvbnNlIGRhdGEuICovDQorfSBibGVfZ2FwX2V2dF9hZHZfcmVwb3J0X3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9TRUNfUkVRVUVTVC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgYm9uZCAgICAgICA6IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmZvcm0gYm9uZGluZy4gKi8NCisgIHVpbnQ4X3QgICAgbWl0bSAgICAgICA6IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1hbiBJbiBUaGUgTWlkZGxlIHByb3RlY3Rpb24gcmVxdWVzdGVkLiAqLw0KKyAgdWludDhfdCAgICBsZXNjICAgICAgIDogMTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTEUgU2VjdXJlIENvbm5lY3Rpb25zIHJlcXVlc3RlZC4gKi8NCisgIHVpbnQ4X3QgICAga2V5cHJlc3MgICA6IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdlbmVyYXRpb24gb2Yga2V5cHJlc3Mgbm90aWZpY2F0aW9ucyByZXF1ZXN0ZWQuICovDQorfSBibGVfZ2FwX2V2dF9zZWNfcmVxdWVzdF90Ow0KKw0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEVfUkVRVUVTVC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfY29ubl9wYXJhbXNfdCBjb25uX3BhcmFtczsgICAgICAgICAgICAvKio8ICBHQVAgQ29ubmVjdGlvbiBQYXJhbWV0ZXJzLiAqLw0KK30gYmxlX2dhcF9ldnRfY29ubl9wYXJhbV91cGRhdGVfcmVxdWVzdF90Ow0KKw0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfU0NBTl9SRVFfUkVQT1JULiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgaW50OF90ICAgICAgICAgICAgICAgICAgcnNzaTsgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZWQgU2lnbmFsIFN0cmVuZ3RoIEluZGljYXRpb24gaW4gZEJtLiAqLw0KKyAgYmxlX2dhcF9hZGRyX3QgICAgICAgICAgcGVlcl9hZGRyOyAgICAgICAgIC8qKjwgQmx1ZXRvb3RoIGFkZHJlc3Mgb2YgdGhlIHBlZXIgZGV2aWNlLiBJZiB0aGUgcGVlcl9hZGRyIHJlc29sdmVkOiBAcmVmIGJsZV9nYXBfYWRkcl90OjphZGRyX2lkX3BlZXIgaXMgc2V0IHRvIDENCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgYWRkcmVzcyBpcyB0aGUgZGV2aWNlJ3MgaWRlbnRpdHkgYWRkcmVzcy4gKi8NCit9IGJsZV9nYXBfZXZ0X3NjYW5fcmVxX3JlcG9ydF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfREFUQV9MRU5HVEhfVVBEQVRFX1JFUVVFU1QuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2FwX2RhdGFfbGVuZ3RoX3BhcmFtc190IHBlZXJfcGFyYW1zOyAvKio8IFBlZXIgZGF0YSBsZW5ndGggcGFyYW1ldGVycy4gKi8NCit9IGJsZV9nYXBfZXZ0X2RhdGFfbGVuZ3RoX3VwZGF0ZV9yZXF1ZXN0X3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9EQVRBX0xFTkdUSF9VUERBVEUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2FwX2RhdGFfbGVuZ3RoX3BhcmFtc190IGVmZmVjdGl2ZV9wYXJhbXM7ICAvKio8IFRoZSBlZmZlY3RpdmUgZGF0YSBsZW5ndGggcGFyYW1ldGVycy4gKi8NCit9IGJsZV9nYXBfZXZ0X2RhdGFfbGVuZ3RoX3VwZGF0ZV90Ow0KKw0KKw0KKy8qKkBicmllZiBHQVAgZXZlbnQgc3RydWN0dXJlLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgY29ubl9oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBIYW5kbGUgb24gd2hpY2ggZXZlbnQgb2NjdXJyZWQuICovDQorICB1bmlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCB1bmlvbiBhbHRlcm5hdGl2ZSBpZGVudGlmaWVkIGJ5IGV2dF9pZCBpbiBlbmNsb3Npbmcgc3RydWN0LiAqLw0KKyAgew0KKyAgICBibGVfZ2FwX2V2dF9jb25uZWN0ZWRfdCAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQ7ICAgICAgICAgICAgICAgICAgICAvKio8IENvbm5lY3RlZCBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9kaXNjb25uZWN0ZWRfdCAgICAgICAgICAgICAgICBkaXNjb25uZWN0ZWQ7ICAgICAgICAgICAgICAgICAvKio8IERpc2Nvbm5lY3RlZCBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9jb25uX3BhcmFtX3VwZGF0ZV90ICAgICAgICAgICBjb25uX3BhcmFtX3VwZGF0ZTsgICAgICAgICAgICAvKio8IENvbm5lY3Rpb24gUGFyYW1ldGVyIFVwZGF0ZSBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9zZWNfcGFyYW1zX3JlcXVlc3RfdCAgICAgICAgICBzZWNfcGFyYW1zX3JlcXVlc3Q7ICAgICAgICAgICAvKio8IFNlY3VyaXR5IFBhcmFtZXRlcnMgUmVxdWVzdCBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9zZWNfaW5mb19yZXF1ZXN0X3QgICAgICAgICAgICBzZWNfaW5mb19yZXF1ZXN0OyAgICAgICAgICAgICAvKio8IFNlY3VyaXR5IEluZm9ybWF0aW9uIFJlcXVlc3QgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhcF9ldnRfcGFzc2tleV9kaXNwbGF5X3QgICAgICAgICAgICAgcGFzc2tleV9kaXNwbGF5OyAgICAgICAgICAgICAgLyoqPCBQYXNza2V5IERpc3BsYXkgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhcF9ldnRfa2V5X3ByZXNzZWRfdCAgICAgICAgICAgICAgICAga2V5X3ByZXNzZWQ7ICAgICAgICAgICAgICAgICAgLyoqPCBLZXkgUHJlc3NlZCBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9hdXRoX2tleV9yZXF1ZXN0X3QgICAgICAgICAgICBhdXRoX2tleV9yZXF1ZXN0OyAgICAgICAgICAgICAvKio8IEF1dGhlbnRpY2F0aW9uIEtleSBSZXF1ZXN0IEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X2xlc2NfZGhrZXlfcmVxdWVzdF90ICAgICAgICAgIGxlc2NfZGhrZXlfcmVxdWVzdDsgICAgICAgICAgIC8qKjwgTEUgU2VjdXJlIENvbm5lY3Rpb25zIERIS2V5IGNhbGN1bGF0aW9uIHJlcXVlc3QuICovDQorICAgIGJsZV9nYXBfZXZ0X2F1dGhfc3RhdHVzX3QgICAgICAgICAgICAgICAgIGF1dGhfc3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qKjwgQXV0aGVudGljYXRpb24gU3RhdHVzIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X2Nvbm5fc2VjX3VwZGF0ZV90ICAgICAgICAgICAgIGNvbm5fc2VjX3VwZGF0ZTsgICAgICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBTZWN1cml0eSBVcGRhdGUgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhcF9ldnRfdGltZW91dF90ICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaW1lb3V0IEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X3Jzc2lfY2hhbmdlZF90ICAgICAgICAgICAgICAgIHJzc2lfY2hhbmdlZDsgICAgICAgICAgICAgICAgIC8qKjwgUlNTSSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9hZHZfcmVwb3J0X3QgICAgICAgICAgICAgICAgICBhZHZfcmVwb3J0OyAgICAgICAgICAgICAgICAgICAvKio8IEFkdmVydGlzaW5nIFJlcG9ydCBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9zZWNfcmVxdWVzdF90ICAgICAgICAgICAgICAgICBzZWNfcmVxdWVzdDsgICAgICAgICAgICAgICAgICAvKio8IFNlY3VyaXR5IFJlcXVlc3QgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhcF9ldnRfY29ubl9wYXJhbV91cGRhdGVfcmVxdWVzdF90ICAgY29ubl9wYXJhbV91cGRhdGVfcmVxdWVzdDsgICAgLyoqPCBDb25uZWN0aW9uIFBhcmFtZXRlciBVcGRhdGUgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhcF9ldnRfc2Nhbl9yZXFfcmVwb3J0X3QgICAgICAgICAgICAgc2Nhbl9yZXFfcmVwb3J0OyAgICAgICAgICAgICAgLyoqPCBTY2FuIFJlcXVlc3QgUmVwb3J0IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X3BoeV91cGRhdGVfdCAgICAgICAgICAgICAgICAgIHBoeV91cGRhdGU7ICAgICAgICAgICAgICAgICAgIC8qKjwgUEhZIFVwZGF0ZSBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9kYXRhX2xlbmd0aF91cGRhdGVfcmVxdWVzdF90ICBkYXRhX2xlbmd0aF91cGRhdGVfcmVxdWVzdDsgICAvKio8IERhdGEgTGVuZ3RoIFVwZGF0ZSBSZXF1ZXN0IEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X2RhdGFfbGVuZ3RoX3VwZGF0ZV90ICAgICAgICAgIGRhdGFfbGVuZ3RoX3VwZGF0ZTsgICAgICAgICAgIC8qKjwgRGF0YSBMZW5ndGggVXBkYXRlIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICB9IHBhcmFtczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXZlbnQgUGFyYW1ldGVycy4gKi8NCit9IGJsZV9nYXBfZXZ0X3Q7DQorDQorDQorLyoqDQorICogQGJyaWVmIEJMRSBHQVAgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIHNldCB3aXRoIEByZWYgc2RfYmxlX2NmZ19zZXQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0NPTk5fQ09VTlQgICAgIFRoZSBjb25uZWN0aW9uIGNvdW50IGZvciB0aGUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9ucyBpcyB6ZXJvLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSAgT25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgc3VtIG9mIGNvbm5fY291bnQgZm9yIGFsbCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb25zIGNvbWJpbmVkIGV4Y2VlZHMgVUlOVDhfTUFYLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgZXZlbnQgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiBAcmVmIEJMRV9HQVBfRVZFTlRfTEVOR1RIX01JTi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgIGNvbm5fY291bnQ7ICAgICAvKio8IFRoZSBudW1iZXIgb2YgY29uY3VycmVudCBjb25uZWN0aW9ucyB0aGUgYXBwbGljYXRpb24gY2FuIGNyZWF0ZSB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFuZCBtaW5pbXVtIHZhbHVlIGlzIEByZWYgQkxFX0dBUF9DT05OX0NPVU5UX0RFRkFVTFQuICovDQorICB1aW50MTZfdCBldmVudF9sZW5ndGg7ICAgLyoqPCBUaGUgdGltZSBzZXQgYXNpZGUgZm9yIHRoaXMgY29ubmVjdGlvbiBvbiBldmVyeSBjb25uZWN0aW9uIGludGVydmFsIGluIDEuMjUgbXMgdW5pdHMuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBAcmVmIEJMRV9HQVBfRVZFTlRfTEVOR1RIX0RFRkFVTFQsIHRoZSBtaW5pbXVtIHZhbHVlIGlzIEByZWYgQkxFX0dBUF9FVkVOVF9MRU5HVEhfTUlOLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGV2ZW50IGxlbmd0aCBhbmQgdGhlIGNvbm5lY3Rpb24gaW50ZXJ2YWwgYXJlIHRoZSBwcmltYXJ5IHBhcmFtZXRlcnMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzZXR0aW5nIHRoZSB0aHJvdWdocHV0IG9mIGEgY29ubmVjdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgU29mdERldmljZSBTcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRocm91Z2hwdXQuICovDQorfSBibGVfZ2FwX2Nvbm5fY2ZnX3Q7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvbmZpZ3VyYXRpb24gb2YgbWF4aW11bSBjb25jdXJyZW50IGNvbm5lY3Rpb25zIGluIHRoZSBkaWZmZXJlbnQgY29ubmVjdGVkIHJvbGVzLCBzZXQgd2l0aA0KKyAqIEByZWYgc2RfYmxlX2NmZ19zZXQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0NPTk5fQ09VTlQgICAgIFRoZSBzdW0gb2YgcGVyaXBoX3JvbGVfY291bnQgYW5kIGNlbnRyYWxfcm9sZV9jb3VudCBpcyB0b28NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlLiBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgc3VtIG9mIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgaXMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEByZWYgQkxFX0dBUF9ST0xFX0NPVU5UX0NPTUJJTkVEX01BWC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gIGNlbnRyYWxfc2VjX2NvdW50IGlzIGxhcmdlciB0aGFuIGNlbnRyYWxfcm9sZV9jb3VudC4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgcGVyaXBoX3JvbGVfY291bnQ7ICAvKio8IE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGNvbmN1cnJlbnRseSBhY3RpbmcgYXMgYSBwZXJpcGhlcmFsLiBEZWZhdWx0IHZhbHVlIGlzIEByZWYgQkxFX0dBUF9ST0xFX0NPVU5UX1BFUklQSF9ERUZBVUxULiAqLw0KKyAgdWludDhfdCBjZW50cmFsX3JvbGVfY291bnQ7IC8qKjwgTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgY29uY3VycmVudGx5IGFjdGluZyBhcyBhIGNlbnRyYWwuIERlZmF1bHQgdmFsdWUgaXMgQHJlZiBCTEVfR0FQX1JPTEVfQ09VTlRfQ0VOVFJBTF9ERUZBVUxULiAqLw0KKyAgdWludDhfdCBjZW50cmFsX3NlY19jb3VudDsgIC8qKjwgTnVtYmVyIG9mIFNNUCBpbnN0YW5jZXMgc2hhcmVkIGJldHdlZW4gYWxsIGNvbm5lY3Rpb25zIGFjdGluZyBhcyBhIGNlbnRyYWwuIERlZmF1bHQgdmFsdWUgaXMgQHJlZiBCTEVfR0FQX1JPTEVfQ09VTlRfQ0VOVFJBTF9TRUNfREVGQVVMVC4gKi8NCit9IGJsZV9nYXBfY2ZnX3JvbGVfY291bnRfdDsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRGV2aWNlIG5hbWUgYW5kIGl0cyBwcm9wZXJ0aWVzLCBzZXQgd2l0aCBAcmVmIHNkX2JsZV9jZmdfc2V0Lg0KKyAqDQorICogQG5vdGUgIElmIHRoZSBkZXZpY2UgbmFtZSBpcyBub3QgY29uZmlndXJlZCwgdGhlIGRlZmF1bHQgZGV2aWNlIG5hbWUgd2lsbCBiZSBAcmVmDQorICogICAgICAgIEJMRV9HQVBfREVWTkFNRV9ERUZBVUxULCB0aGUgbWF4aW11bSBkZXZpY2UgbmFtZSBsZW5ndGggd2lsbCBiZSBAcmVmDQorICogICAgICAgIEJMRV9HQVBfREVWTkFNRV9ERUZBVUxUX0xFTiwgdmxvYyB3aWxsIGJlIHNldCB0byBAcmVmIEJMRV9HQVRUU19WTE9DX1NUQUNLIGFuZCB0aGUgZGV2aWNlIG5hbWUNCisgKiAgICAgICAgd2lsbCBoYXZlIG5vIHdyaXRlIGFjY2Vzcy4NCisgKg0KKyAqIEBub3RlICBJZiBAcmVmIG1heF9sZW4gaXMgbW9yZSB0aGFuIEByZWYgQkxFX0dBUF9ERVZOQU1FX0RFRkFVTFRfTEVOIGFuZCB2bG9jIGlzIHNldCB0byBAcmVmIEJMRV9HQVRUU19WTE9DX1NUQUNLLA0KKyAqICAgICAgICB0aGUgYXR0cmlidXRlIHRhYmxlIHNpemUgbXVzdCBiZSBpbmNyZWFzZWQgdG8gaGF2ZSByb29tIGZvciB0aGUgbG9uZ2VyIGRldmljZSBuYW1lIChzZWUNCisgKiAgICAgICAgQHJlZiBzZF9ibGVfY2ZnX3NldCBhbmQgQHJlZiBibGVfZ2F0dHNfY2ZnX2F0dHJfdGFiX3NpemVfdCkuDQorICoNCisgKiBAbm90ZSAgSWYgdmxvYyBpcyBAcmVmIEJMRV9HQVRUU19WTE9DX1NUQUNLIDoNCisgKiAgICAgICAgLSBwX3ZhbHVlIG11c3QgcG9pbnQgdG8gbm9uLXZvbGF0aWxlIG1lbW9yeSAoZmxhc2gpIG9yIGJlIE5VTEwuDQorICogICAgICAgIC0gSWYgcF92YWx1ZSBpcyBOVUxMLCB0aGUgZGV2aWNlIG5hbWUgd2lsbCBpbml0aWFsbHkgYmUgZW1wdHkuDQorICoNCisgKiBAbm90ZSAgSWYgdmxvYyBpcyBAcmVmIEJMRV9HQVRUU19WTE9DX1VTRVIgOg0KKyAqICAgICAgICAtIHBfdmFsdWUgY2Fubm90IGJlIE5VTEwuDQorICogICAgICAgIC0gSWYgdGhlIGRldmljZSBuYW1lIGlzIHdyaXRhYmxlLCBwX3ZhbHVlIG11c3QgcG9pbnQgdG8gdm9sYXRpbGUgbWVtb3J5IChSQU0pLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNICBPbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgZGV2aWNlIG5hbWUgbG9jYXRpb24gKHZsb2MpLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGRldmljZSBuYW1lIHNlY3VyaXR5IG1vZGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0xFTkdUSCBPbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBkZXZpY2UgbmFtZSBsZW5ndGggaXMgaW52YWxpZCAobXVzdCBiZSBiZXR3ZWVuIDAgYW5kIEByZWYgQkxFX0dBUF9ERVZOQU1FX01BWF9MRU4pLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgZGV2aWNlIG5hbWUgbGVuZ3RoIGlzIHRvbyBsb25nIGZvciB0aGUgZ2l2ZW4gQXR0cmlidXRlIFRhYmxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX1NVUFBPUlRFRCAgRGV2aWNlIG5hbWUgc2VjdXJpdHkgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX2dhcF9jb25uX3NlY19tb2RlX3QgIHdyaXRlX3Blcm07ICAgLyoqPCBXcml0ZSBwZXJtaXNzaW9ucy4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICB2bG9jOjI7ICAgICAgIC8qKjwgVmFsdWUgbG9jYXRpb24sIHNlZSBAcmVmIEJMRV9HQVRUU19WTE9DUy4qLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgKnBfdmFsdWU7ICAgICAgLyoqPCBQb2ludGVyIHRvIHdoZXJlIHRoZSB2YWx1ZSAoZGV2aWNlIG5hbWUpIGlzIHN0b3JlZCBvciB3aWxsIGJlIHN0b3JlZC4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICBjdXJyZW50X2xlbjsgIC8qKjwgQ3VycmVudCBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHBfdmFsdWUuKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICBtYXhfbGVuOyAgICAgIC8qKjwgTWF4aW11bSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHBfdmFsdWUuKi8NCit9IGJsZV9nYXBfY2ZnX2RldmljZV9uYW1lX3Q7DQorDQorDQorLyoqQGJyaWVmIENvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBHQVAgY29uZmlndXJhdGlvbnMuICovDQordHlwZWRlZiB1bmlvbg0KK3sNCisgIGJsZV9nYXBfY2ZnX3JvbGVfY291bnRfdCAgcm9sZV9jb3VudF9jZmc7ICAvKio8IFJvbGUgY291bnQgY29uZmlndXJhdGlvbiwgY2ZnX2lkIGlzIEByZWYgQkxFX0dBUF9DRkdfUk9MRV9DT1VOVC4gKi8NCisgIGJsZV9nYXBfY2ZnX2RldmljZV9uYW1lX3QgZGV2aWNlX25hbWVfY2ZnOyAvKio8IERldmljZSBuYW1lIGNvbmZpZ3VyYXRpb24sIGNmZ19pZCBpcyBAcmVmIEJMRV9HQVBfQ0ZHX0RFVklDRV9OQU1FLiAqLw0KK30gYmxlX2dhcF9jZmdfdDsNCisNCisNCisvKipAYnJpZWYgQ2hhbm5lbCBNYXAgb3B0aW9uLg0KKyAqICAgICAgICBVc2VkIHdpdGggQHJlZiBzZF9ibGVfb3B0X2dldCB0byBnZXQgdGhlIGN1cnJlbnQgY2hhbm5lbCBtYXANCisgKiAgICAgICAgb3IgQHJlZiBzZF9ibGVfb3B0X3NldCB0byBzZXQgYSBuZXcgY2hhbm5lbCBtYXAuIFdoZW4gc2V0dGluZyB0aGUNCisgKiAgICAgICAgY2hhbm5lbCBtYXAsIGl0IGFwcGxpZXMgdG8gYWxsIGN1cnJlbnQgYW5kIGZ1dHVyZSBjb25uZWN0aW9ucy4gV2hlbiBnZXR0aW5nIHRoZQ0KKyAqICAgICAgICBjdXJyZW50IGNoYW5uZWwgbWFwLCBpdCBhcHBsaWVzIHRvIGEgc2luZ2xlIGNvbm5lY3Rpb24gYW5kIHRoZSBjb25uZWN0aW9uIGhhbmRsZQ0KKyAqICAgICAgICBtdXN0IGJlIHN1cHBsaWVkLg0KKyAqDQorICogQG5vdGUgIFNldHRpbmcgdGhlIGNoYW5uZWwgbWFwIG1heSB0YWtlIHNvbWUgdGltZSwgZGVwZW5kaW5nIG9uIGNvbm5lY3Rpb24gcGFyYW1ldGVycy4NCisgKiAgICAgICAgVGhlIHRpbWUgdGFrZW4gbWF5IGJlIGRpZmZlcmVudCBmb3IgZWFjaCBjb25uZWN0aW9uIGFuZCB0aGUgZ2V0IG9wZXJhdGlvbiB3aWxsDQorICogICAgICAgIHJldHVybiB0aGUgcHJldmlvdXMgY2hhbm5lbCBtYXAgdW50aWwgdGhlIG5ldyBvbmUgaGFzIHRha2VuIGVmZmVjdC4NCisgKg0KKyAqIEBub3RlICBBZnRlciBzZXR0aW5nIHRoZSBjaGFubmVsIG1hcCwgYnkgc3BlYyBpdCBjYW4gbm90IGJlIHNldCBhZ2FpbiB1bnRpbCBhdCBsZWFzdCAxIHMgaGFzIHBhc3NlZC4NCisgKiAgICAgICAgU2VlIEJsdWV0b290aCBTcGVjaWZpY2F0aW9uIFZlcnNpb24gNC4xIFZvbHVtZSAyLCBQYXJ0IEUsIFNlY3Rpb24gNy4zLjQ2Lg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIEdldCBvciBzZXQgc3VjY2Vzc2Z1bC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgQ2hhbm5lbCBtYXAgd2FzIHNldCBhZ2FpbiBiZWZvcmUgZW5vdWdoIHRpbWUgaGFkIHBhc3NlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZCBmb3IgZ2V0Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX1NVUFBPUlRFRCBSZXR1cm5lZCBieSBzZF9ibGVfb3B0X3NldCBpbiBwZXJpcGhlcmFsLW9ubHkgU29mdERldmljZXMuDQorICoNCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90IGNvbm5faGFuZGxlOyAgICAgICAgICAgICAgICAgICAvKio8IENvbm5lY3Rpb24gSGFuZGxlIChvbmx5IGFwcGxpY2FibGUgZm9yIGdldCkgKi8NCisgIHVpbnQ4X3QgY2hfbWFwWzVdOyAgICAgICAgICAgICAgICAgICAgICAvKio8IENoYW5uZWwgTWFwICgzNy1iaXQpLiAqLw0KK30gYmxlX2dhcF9vcHRfY2hfbWFwX3Q7DQorDQorDQorLyoqQGJyaWVmIExvY2FsIGNvbm5lY3Rpb24gbGF0ZW5jeSBvcHRpb24uDQorICoNCisgKiAgICAgICAgTG9jYWwgY29ubmVjdGlvbiBsYXRlbmN5IGlzIGEgZmVhdHVyZSB3aGljaCBlbmFibGVzIHRoZSBzbGF2ZSB0byBpbXByb3ZlDQorICogICAgICAgIGN1cnJlbnQgY29uc3VtcHRpb24gYnkgaWdub3JpbmcgdGhlIHNsYXZlIGxhdGVuY3kgc2V0IGJ5IHRoZSBwZWVyLiBUaGUNCisgKiAgICAgICAgbG9jYWwgY29ubmVjdGlvbiBsYXRlbmN5IGNhbiBvbmx5IGJlIHNldCB0byBhIG11bHRpcGxlIG9mIHRoZSBzbGF2ZSBsYXRlbmN5LA0KKyAqICAgICAgICBhbmQgY2Fubm90IGJlIGxvbmdlciB0aGFuIGhhbGYgb2YgdGhlIHN1cGVydmlzaW9uIHRpbWVvdXQuDQorICoNCisgKiAgICAgICAgVXNlZCB3aXRoIEByZWYgc2RfYmxlX29wdF9zZXQgdG8gc2V0IHRoZSBsb2NhbCBjb25uZWN0aW9uIGxhdGVuY3kuIFRoZQ0KKyAqICAgICAgICBAcmVmIHNkX2JsZV9vcHRfZ2V0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgb3B0aW9uLCBidXQgdGhlIGFjdHVhbA0KKyAqICAgICAgICBsb2NhbCBjb25uZWN0aW9uIGxhdGVuY3kgKHVubGVzcyBzZXQgdG8gTlVMTCkgaXMgc2V0IGFzIGEgcmV0dXJuIHBhcmFtZXRlcg0KKyAqICAgICAgICB3aGVuIHNldHRpbmcgdGhlIG9wdGlvbi4NCisgKg0KKyAqIEBub3RlICBUaGUgbGF0ZW5jeSBzZXQgd2lsbCBiZSB0cnVuY2F0ZWQgZG93biB0byB0aGUgY2xvc2VzdCBzbGF2ZSBsYXRlbmN5IGV2ZW50DQorICogICAgICAgIG11bHRpcGxlLCBvciB0aGUgbmVhcmVzdCBtdWx0aXBsZSBiZWZvcmUgaGFsZiBvZiB0aGUgc3VwZXJ2aXNpb24gdGltZW91dC4NCisgKg0KKyAqIEBub3RlICBUaGUgbG9jYWwgY29ubmVjdGlvbiBsYXRlbmN5IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGFuZCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBuZXcNCisgKiAgICAgICAgY29ubmVjdGlvbnMgYW5kIHdoZW5ldmVyIHRoZSBjb25uZWN0aW9uIGlzIHVwZGF0ZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU2V0IHN1Y2Nlc3NmdWxseS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9TVVBQT1JURUQgR2V0IGlzIG5vdCBzdXBwb3J0ZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgcGFyYW1ldGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICBjb25uX2hhbmRsZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBIYW5kbGUgKi8NCisgIHVpbnQxNl90ICAgcmVxdWVzdGVkX2xhdGVuY3k7ICAgICAgICAgICAgICAgICAvKio8IFJlcXVlc3RlZCBsb2NhbCBjb25uZWN0aW9uIGxhdGVuY3kuICovDQorICB1aW50MTZfdCAqIHBfYWN0dWFsX2xhdGVuY3k7ICAgICAgICAgICAgICAgICAgLyoqPCBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSBhY3R1YWwgbG9jYWwgY29ubmVjdGlvbiBsYXRlbmN5IChjYW4gYmUgc2V0IHRvIE5VTEwgdG8gc2tpcCByZXR1cm4gdmFsdWUpLiAqLw0KK30gYmxlX2dhcF9vcHRfbG9jYWxfY29ubl9sYXRlbmN5X3Q7DQorDQorLyoqQGJyaWVmIERpc2FibGUgc2xhdmUgbGF0ZW5jeQ0KKyAqDQorICogVXNlZCB3aXRoIEByZWYgc2RfYmxlX29wdF9zZXQgdG8gdGVtcG9yYXJpbHkgZGlzYWJsZSBzbGF2ZSBsYXRlbmN5IG9mIGEgcGVyaXBoZXJhbCBjb25uZWN0aW9uIChzZWUgQHJlZiBibGVfZ2FwX2Nvbm5fcGFyYW1zX3Q6OnNsYXZlX2xhdGVuY3kpLiBBbmQgdG8gcmUtZW5hYmxlIGl0IGFnYWluLg0KKyAqIFdoZW4gZGlzYWJsZWQsIHRoZSBwZXJpcGhlcmFsIHdpbGwgaWdub3JlIHRoZSBzbGF2ZV9sYXRlbmN5IHNldCBieSB0aGUgY2VudHJhbC4NCisgKg0KKyAqIEBub3RlICBTaGFsbCBvbmx5IGJlIGNhbGxlZCBvbiBwZXJpcGhlcmFsIGxpbmtzLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFNldCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfU1VQUE9SVEVEIEdldCBpcyBub3Qgc3VwcG9ydGVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHBhcmFtZXRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgY29ubl9oYW5kbGU7ICAgIC8qKjwgQ29ubmVjdGlvbiBIYW5kbGUgKi8NCisgIHVpbnQ4X3QgICAgZGlzYWJsZSA6IDE7ICAgIC8qKjwgU2V0IHRvIDEgdG8gZGlzYWJsZSBzbGF2ZSBsYXRlbmN5LiBTZXQgdG8gMCBlbmFibGUgaXQgYWdhaW4uKi8NCit9IGJsZV9nYXBfb3B0X3NsYXZlX2xhdGVuY3lfZGlzYWJsZV90Ow0KKw0KKy8qKkBicmllZiBQYXNza2V5IE9wdGlvbi4NCisgKg0KKyAqICAgICAgICBTdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgcGFzc2tleSB0byBiZSB1c2VkIGR1cmluZyBwYWlyaW5nLiBUaGlzIGNhbiBiZSB1c2VkIHdpdGggQHJlZg0KKyAqICAgICAgICBzZF9ibGVfb3B0X3NldCB0byBtYWtlIHRoZSBTb2Z0RGV2aWNlIHVzZSBhIHByZXByb2dyYW1tZWQgcGFzc2tleSBmb3IgYXV0aGVudGljYXRpb24NCisgKiAgICAgICAgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcmFuZG9tIG9uZS4NCisgKg0KKyAqIEBub3RlICBSZXBlYXRlZCBwYWlyaW5nIGF0dGVtcHRzIHVzaW5nIHRoZSBzYW1lIHByZXByb2dyYW1tZWQgcGFzc2tleSBtYWtlcyBwYWlyaW5nIHZ1bG5lcmFibGUgdG8gTUlUTSBhdHRhY2tzLg0KKyAqDQorICogQG5vdGUgIEByZWYgc2RfYmxlX29wdF9nZXQgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBvcHRpb24uDQorICoNCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgY29uc3QgKiBwX3Bhc3NrZXk7ICAgICAgICAgICAgICAgICAgICAvKio8IFBvaW50ZXIgdG8gNi1kaWdpdCBBU0NJSSBzdHJpbmcgKGRpZ2l0IDAuLjkgb25seSwgbm8gTlVMTCB0ZXJtaW5hdGlvbikgcGFzc2tleSB0byBiZSB1c2VkIGR1cmluZyBwYWlyaW5nLiBJZiB0aGlzIGlzIE5VTEwsIHRoZSBTb2Z0RGV2aWNlIHdpbGwgZ2VuZXJhdGUgYSByYW5kb20gcGFzc2tleSBpZiByZXF1aXJlZC4qLw0KK30gYmxlX2dhcF9vcHRfcGFzc2tleV90Ow0KKw0KKw0KKy8qKkBicmllZiBTY2FuIHJlcXVlc3QgcmVwb3J0IG9wdGlvbi4NCisgKg0KKyAqICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHdpdGggQHJlZiBzZF9ibGVfb3B0X3NldCB0byBtYWtlIHRoZSBTb2Z0RGV2aWNlIHNlbmQNCisgKiAgICAgICAgQHJlZiBCTEVfR0FQX0VWVF9TQ0FOX1JFUV9SRVBPUlQgZXZlbnRzLg0KKyAqDQorICogQG5vdGUgIER1ZSB0byB0aGUgbGltaXRlZCBzcGFjZSByZXNlcnZlZCBmb3Igc2NhbiByZXF1ZXN0IHJlcG9ydCBldmVudHMsDQorICogICAgICAgIG5vdCBhbGwgcmVjZWl2ZWQgc2NhbiByZXF1ZXN0cyB3aWxsIGJlIHJlcG9ydGVkLg0KKyAqDQorICogQG5vdGUgIElmIHdoaXRlbGlzdGluZyBpcyB1c2VkLCBvbmx5IHdoaXRlbGlzdGVkIHJlcXVlc3RzIGFyZSByZXBvcnRlZC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTZXQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBXaGVuIGFkdmVydGlzaW5nIGlzIG9uZ29pbmcgd2hpbGUgdGhlIG9wdGlvbiBpcyBzZXQuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IGVuYWJsZSA6IDE7IC8qKjwgRW5hYmxlIHNjYW4gcmVxdWVzdCByZXBvcnRzLiAqLw0KK30gYmxlX2dhcF9vcHRfc2Nhbl9yZXFfcmVwb3J0X3Q7DQorDQorLyoqQGJyaWVmIENvbXBhdGliaWxpdHkgbW9kZSAxIG9wdGlvbi4NCisgKg0KKyAqICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHdpdGggQHJlZiBzZF9ibGVfb3B0X3NldCB0byBlbmFibGUgYW5kIGRpc2FibGUNCisgKiAgICAgICAgY29tcGF0aWJpbGl0eSBtb2RlIDEuIENvbXBhdGliaWxpdHkgbW9kZSAxIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuDQorICoNCisgKiAgQG5vdGUgIENvbXBhdGliaWxpdHkgbW9kZSAxIGVuYWJsZXMgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIGRldmljZXMgdGhhdCBkbyBub3Qgc3VwcG9ydA0KKyAqICAgICAgICAgYSB2YWx1ZSBvZiAwIGZvciB0aGUgV2luT2Zmc2V0IHBhcmFtZXRlciBpbiB0aGUgTGluayBMYXllciBDT05ORUNUX1JFUSBwYWNrZXQuDQorICoNCisgKiAgQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFNldCBzdWNjZXNzZnVsbHkuDQorICogIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBXaGVuIGNvbm5lY3Rpb24gY3JlYXRpb24gaXMgb25nb2luZyB3aGlsZSBtb2RlIDEgaXMgc2V0Lg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgIHVpbnQ4X3QgZW5hYmxlIDogMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVuYWJsZSBjb21wYXRpYmlsaXR5IG1vZGUgMS4qLw0KK30gYmxlX2dhcF9vcHRfY29tcGF0X21vZGVfMV90Ow0KKw0KKy8qKkBicmllZiBDb21wYXRpYmlsaXR5IG1vZGUgMiBvcHRpb24uDQorICoNCisgKiAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB3aXRoIEByZWYgc2RfYmxlX29wdF9zZXQgdG8gZW5hYmxlIGNvbXBhdGliaWxpdHkgbW9kZSAyLg0KKyAqICAgICAgICBDb21wYXRpYmlsaXR5IG1vZGUgMiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Lg0KKyAqDQorICogIEBub3RlICBDb21wYXRpYmlsaXR5IG1vZGUgMiBlbmFibGVzIGludGVyb3BlcmFiaWxpdHkgd2l0aCBkZXZpY2VzIHRoYXQgaW5pdGlhdGUgRmVhdHVyZSBleGNoYW5nZQ0KKyAqICAgICAgICAgYW5kIHZlcnNpb24gZXhjaGFuZ2UgcHJvY2VkdXJlIGluIHBhcmFsbGVsLg0KKyAqDQorICogIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTZXQgc3VjY2Vzc2Z1bGx5Lg0KKyAqICBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gaWYgZW5hYmxlIGJpdCBpcyBub3Qgc2V0IHRvIDEuIEN1cnJlbnRseSBvbmx5IGVuYWJsaW5nIGlzIHN1cHBvcnRlZC4NCisgKiAgQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIFdoZW4gYW55IHJvbGUgaXMgcnVubmluZyB3aGlsZSBtb2RlIDIgaXMgc2V0Lg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgIHVpbnQ4X3QgZW5hYmxlIDogMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVuYWJsZSBjb21wYXRpYmlsaXR5IG1vZGUgMi4qLw0KK30gYmxlX2dhcF9vcHRfY29tcGF0X21vZGVfMl90Ow0KKw0KKw0KKy8qKkBicmllZiBBdXRoZW50aWNhdGVkIHBheWxvYWQgdGltZW91dCBvcHRpb24uDQorICoNCisgKiAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB3aXRoIEByZWYgc2RfYmxlX29wdF9zZXQgdG8gY2hhbmdlIHRoZSBBdXRoZW50aWNhdGVkIHBheWxvYWQgdGltZW91dCB0byBhIHZhbHVlIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgb2YgOCBtaW51dGVzLg0KKyAqDQorICogQG5vdGUgIFRoZSBhdXRoZW50aWNhdGVkIHBheWxvYWQgdGltZW91dCBldmVudCA6OkJMRV9HQVBfVElNRU9VVF9TUkNfQVVUSF9QQVlMT0FEIHdpbGwgYmUgZ2VuZXJhdGVkDQorICogICAgICAgIGlmIGF1dGhfcGF5bG9hZF90aW1lb3V0IHRpbWUgaGFzIGVsYXBzZWQgd2l0aG91dCByZWNlaXZpbmcgYSBwYWNrZXQgd2l0aCBhIHZhbGlkIE1JQyBvbiBhbiBlbmNyeXB0ZWQNCisgKiAgICAgICAgbGluay4NCisgKg0KKyAqIEBub3RlICBUaGUgTEUgcGluZyBwcm9jZWR1cmUgd2lsbCBiZSBpbml0aWF0ZWQgYmVmb3JlIHRoZSB0aW1lciBleHBpcmVzIHRvIGdpdmUgdGhlIHBlZXIgYSBjaGFuY2UNCisgKiAgICAgICAgdG8gcmVzZXQgdGhlIHRpbWVyLiBJbiBhZGRpdGlvbiB0aGUgc3RhY2sgd2lsbCB0cnkgdG8gcHJpb3JpdGl6ZSBydW5uaW5nIG9mIExFIHBpbmcgb3ZlciBvdGhlcg0KKyAqICAgICAgICBhY3Rpdml0aWVzIHRvIGluY3JlYXNlIGNoYW5jZXMgb2YgZmluaXNoaW5nIExFIHBpbmcgYmVmb3JlIHRpbWVyIGV4cGlyZXMuIFRvIGF2b2lkIHNpZGUtZWZmZWN0cw0KKyAqICAgICAgICBvbiBvdGhlciBhY3Rpdml0aWVzLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgaGlnaCB0aW1lb3V0IHZhbHVlcy4NCisgKiAgICAgICAgUmVjb21tZW5kZWQgdGltZW91dCA+IDIqKGNvbm5JbnRlcnZhbCAqICg2ICsgY29ublNsYXZlTGF0ZW5jeSkpLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFNldCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLiBhdXRoX3BheWxvYWRfdGltZW91dCB3YXMgb3V0c2lkZSBvZiBhbGxvd2VkIHJhbmdlLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHBhcmFtZXRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgY29ubl9oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbm5lY3Rpb24gSGFuZGxlICovDQorICB1aW50MTZfdCAgIGF1dGhfcGF5bG9hZF90aW1lb3V0OyAgICAgICAgICAgICAgLyoqPCBSZXF1ZXN0ZWQgdGltZW91dCBpbiAxMCBtcyB1bml0LiBNYXhpbXVtIGlzIDQ4IDAwMCAoPTQ4MCAwMDAgbXMgPTggbWluKS4gTWluaW11bSBpcyAxICg9MTAgbXMpLiAqLw0KK30gYmxlX2dhcF9vcHRfYXV0aF9wYXlsb2FkX3RpbWVvdXRfdDsNCisNCisvKipAYnJpZWYgUHJlZmVycmVkIFBIWSBvcHRpb24NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgY2FuIGJlIHVzZWQgd2l0aCBAcmVmIHNkX2JsZV9vcHRfc2V0IHRvIGNoYW5nZSB0aGUgcHJlZmVycmVkIFBIWXMuIEJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0aGUgUEhZcw0KKyAqIGZvciBwZWVyIGluaXRpYXRlZCBQSFkgVXBkYXRlIHByb2NlZHVyZSBpcyBAcmVmIEJMRV9HQVBfUEhZXzFNQlBTLiBJZiBAcmVmIGJsZV9nYXBfb3B0X3ByZWZlcnJlZF9waHlzX3Q6OnR4X3BoeXMgb3INCisgKiBAcmVmIGJsZV9nYXBfb3B0X3ByZWZlcnJlZF9waHlzX3Q6OnJ4X3BoeXMgaXMgMCwgdGhlbiB0aGUgc3RhY2sgd2lsbCBzZWxlY3QgUEhZcyBiYXNlZCBvbiB0aGUgcGVlciByZXF1aXJlbWVudHMgb24gdGhhdCBzcGVjaWZpYyBkaXJlY3Rpb24uDQorICoNCisgKiBAbm90ZSBUaGUgcHJlZmVycmVkIFBIWXMgYXJlIG9ubHkgdmFsaWQgZm9yIG5ld2x5IGNyZWF0ZWQgY29ubmVjdGlvbnMgYWZ0ZXIgdGhpcyBvcHRpb24gaXMgY2FsbGVkLiBJZiB0aGUgUEhZcyBzaG91bGQgYmUNCisgKiBjaGFuZ2VkIGZvciBhbiBleGlzdGluZyBsaW5rIHRoZSBAcmVmIHNkX2JsZV9nYXBfcGh5X3JlcXVlc3Qgd291bGQgaGF2ZSB0byBiZSBjYWxsZWQsIGFuZCB0aGF0IHdvdWxkIHRyeSB0byB1cGRhdGUgdGhlDQorICogUEhZcyBmb3IgdGhlIGdpdmVuIGxpbmsuDQorICoNCisgKiBAbm90ZSB0eF9waHlzIGFuZCByeF9waHlzIGFyZSBiaXRmaWVsZHMsIHRvIGluZGljYXRlIG11bHRpcGxlIHByZWZlcnJlZCBQSFlzIGZvciBlYWNoIGRpcmVjdGlvbiB0aGV5IGNhbiBiZSBPUmVkIHRvZ2V0aGVyLg0KKyAqIEBjb2RlDQorICogdHhfcGh5cyA9IEJMRV9HQVBfUEhZXzFNQlBTIHwgQkxFX0dBUF9QSFlfMk1CUFM7DQorICogcnhfcGh5cyA9IEJMRV9HQVBfUEhZXzFNQlBTIHwgQkxFX0dBUF9QSFlfMk1CUFM7DQorICogQGVuZGNvZGUNCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9QSFlfVVBEQVRFLCBSZXN1bHQgb2YgdGhlIFBIWSBVcGRhdGUgaWYgaW5pdGlhdGVkIGJ5IHBlZXIufQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfUEhZX1JFUVVFU1R9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSEVSQUxfUEhZX1JFUVVFU1R9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTZXQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZC4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgIHR4X3BoeXM7ICAgICAvKio8IFByZWZlcnJlZCB0cmFuc21pdCBQSFlzLCBzZWUgQHJlZiBCTEVfR0FQX1BIWVMuICovDQorICB1aW50OF90ICByeF9waHlzOyAgICAgLyoqPCBQcmVmZXJyZWQgcmVjZWl2ZSBQSFlzLCBzZWUgQHJlZiBCTEVfR0FQX1BIWVMuICovDQorfSBibGVfZ2FwX29wdF9wcmVmZXJyZWRfcGh5c190Ow0KKw0KKy8qKkBicmllZiBPcHRpb24gc3RydWN0dXJlIGZvciBHQVAgb3B0aW9ucy4gKi8NCit0eXBlZGVmIHVuaW9uDQorew0KKyAgYmxlX2dhcF9vcHRfY2hfbWFwX3QgICAgICAgICAgICAgICAgICBjaF9tYXA7ICAgICAgICAgICAgICAgICAgICAvKio8IFBhcmFtZXRlcnMgZm9yIHRoZSBDaGFubmVsIE1hcCBvcHRpb24uICovDQorICBibGVfZ2FwX29wdF9sb2NhbF9jb25uX2xhdGVuY3lfdCAgICAgIGxvY2FsX2Nvbm5fbGF0ZW5jeTsgICAgICAgIC8qKjwgUGFyYW1ldGVycyBmb3IgdGhlIExvY2FsIGNvbm5lY3Rpb24gbGF0ZW5jeSBvcHRpb24gKi8NCisgIGJsZV9nYXBfb3B0X3Bhc3NrZXlfdCAgICAgICAgICAgICAgICAgcGFzc2tleTsgICAgICAgICAgICAgICAgICAgLyoqPCBQYXJhbWV0ZXJzIGZvciB0aGUgUGFzc2tleSBvcHRpb24uKi8NCisgIGJsZV9nYXBfb3B0X3NjYW5fcmVxX3JlcG9ydF90ICAgICAgICAgc2Nhbl9yZXFfcmVwb3J0OyAgICAgICAgICAgLyoqPCBQYXJhbWV0ZXJzIGZvciB0aGUgc2NhbiByZXF1ZXN0IHJlcG9ydCBvcHRpb24uKi8NCisgIGJsZV9nYXBfb3B0X2NvbXBhdF9tb2RlXzFfdCAgICAgICAgICAgY29tcGF0X21vZGVfMTsgICAgICAgICAgICAgLyoqPCBQYXJhbWV0ZXJzIGZvciB0aGUgY29tcGF0aWJpbGl0eSBtb2RlIDEgb3B0aW9uLiovDQorICBibGVfZ2FwX29wdF9jb21wYXRfbW9kZV8yX3QgICAgICAgICAgIGNvbXBhdF9tb2RlXzI7ICAgICAgICAgICAgIC8qKjwgUGFyYW1ldGVycyBmb3IgdGhlIGNvbXBhdGliaWxpdHkgbW9kZSAyIG9wdGlvbi4qLw0KKyAgYmxlX2dhcF9vcHRfYXV0aF9wYXlsb2FkX3RpbWVvdXRfdCAgICBhdXRoX3BheWxvYWRfdGltZW91dDsgICAgICAvKio8IFBhcmFtZXRlcnMgZm9yIHRoZSBhdXRoZW50aWNhdGVkIHBheWxvYWQgdGltZW91dCBvcHRpb24uKi8NCisgIGJsZV9nYXBfb3B0X3ByZWZlcnJlZF9waHlzX3QgICAgICAgICAgcHJlZmVycmVkX3BoeXM7ICAgICAgICAgICAgLyoqPCBQYXJhbWV0ZXJzIGZvciB0aGUgcHJlZmVycmVkIFBIWXMgb3B0aW9uLiAqLw0KKyAgYmxlX2dhcF9vcHRfc2xhdmVfbGF0ZW5jeV9kaXNhYmxlX3QgICBzbGF2ZV9sYXRlbmN5X2Rpc2FibGU7ICAgICAvKio8IFBhcmFtZXRlcnMgZm9yIHRoZSBEaXNhYmxlIHNsYXZlIGxhdGVuY3kgb3B0aW9uICovDQorfSBibGVfZ2FwX29wdF90Ow0KKy8qKkB9ICovDQorDQorDQorLyoqQGFkZHRvZ3JvdXAgQkxFX0dBUF9GVU5DVElPTlMgRnVuY3Rpb25zDQorICogQHsgKi8NCisNCisvKipAYnJpZWYgU2V0IHRoZSBsb2NhbCBCbHVldG9vdGggaWRlbnRpdHkgYWRkcmVzcy4NCisgKg0KKyAqICAgICAgICBUaGUgbG9jYWwgQmx1ZXRvb3RoIGlkZW50aXR5IGFkZHJlc3MgaXMgdGhlIGFkZHJlc3MgdGhhdCBpZGVudGlmaWVzIHRoaXMgZGV2aWNlIHRvIG90aGVyIHBlZXJzLg0KKyAqICAgICAgICBUaGUgYWRkcmVzcyB0eXBlIG11c3QgYmUgZWl0aGVyIEByZWYgQkxFX0dBUF9BRERSX1RZUEVfUFVCTElDIG9yIEByZWYgQkxFX0dBUF9BRERSX1RZUEVfUkFORE9NX1NUQVRJQy4NCisgKiAgICAgICAgVGhlIGlkZW50aXR5IGFkZHJlc3MgY2Fubm90IGJlIGNoYW5nZWQgd2hpbGUgcm9sZXMgYXJlIHJ1bm5pbmcuDQorICoNCisgKiBAbm90ZSAgVGhpcyBhZGRyZXNzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgdG8gdGhlIHBlZXIgZHVyaW5nIGJvbmRpbmcuDQorICogICAgICAgIElmIHRoZSBhZGRyZXNzIGNoYW5nZXMsIHRoZSBhZGRyZXNzIHN0b3JlZCBpbiB0aGUgcGVlciBkZXZpY2Ugd2lsbCBub3QgYmUgdmFsaWQgYW5kIHRoZSBhYmlsaXR5IHRvDQorICogICAgICAgIHJlY29ubmVjdCB1c2luZyB0aGUgb2xkIGFkZHJlc3Mgd2lsbCBiZSBsb3N0Lg0KKyAqDQorICogQG5vdGUgIEJ5IGRlZmF1bHQgdGhlIFNvZnREZXZpY2Ugd2lsbCBzZXQgYW4gYWRkcmVzcyBvZiB0eXBlIEByZWYgQkxFX0dBUF9BRERSX1RZUEVfUkFORE9NX1NUQVRJQyB1cG9uIGJlaW5nDQorICogICAgICAgIGVuYWJsZWQuIFRoZSBhZGRyZXNzIGlzIGEgcmFuZG9tIG51bWJlciBwb3B1bGF0ZWQgZHVyaW5nIHRoZSBJQyBtYW51ZmFjdHVyaW5nIHByb2Nlc3MgYW5kIHJlbWFpbnMgdW5jaGFuZ2VkDQorICogICAgICAgIGZvciB0aGUgbGlmZXRpbWUgb2YgZWFjaCBJQy4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0FEVl9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9hZGRyIFBvaW50ZXIgdG8gYWRkcmVzcyBzdHJ1Y3R1cmUuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgQWRkcmVzcyBzdWNjZXNzZnVsbHkgc2V0Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBUF9JTlZBTElEX0JMRV9BRERSIEludmFsaWQgYWRkcmVzcy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgVGhlIHN0YWNrIGlzIGJ1c3ksIHByb2Nlc3MgcGVuZGluZyBldmVudHMgYW5kIHJldHJ5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBUaGUgaWRlbnRpdHkgYWRkcmVzcyBjYW5ub3QgYmUgY2hhbmdlZCB3aGlsZSB0aGUgcm9sZXMgYXJlIHJ1bm5pbmcuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfQUREUl9TRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2FkZHJfc2V0KGJsZV9nYXBfYWRkcl90IGNvbnN0ICpwX2FkZHIpKTsNCisNCisNCisvKipAYnJpZWYgR2V0IGxvY2FsIEJsdWV0b290aCBpZGVudGl0eSBhZGRyZXNzLg0KKyAqDQorICogQG5vdGUgIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBpZGVudGl0eSBhZGRyZXNzIGlycmVzcGVjdGl2ZSBvZiB0aGUgcHJpdmFjeSBzZXR0aW5ncywNCisgKiAgICAgICAgaS5lLiB0aGUgYWRkcmVzcyB0eXBlIHdpbGwgYWx3YXlzIGJlIGVpdGhlciBAcmVmIEJMRV9HQVBfQUREUl9UWVBFX1BVQkxJQyBvciBAcmVmIEJMRV9HQVBfQUREUl9UWVBFX1JBTkRPTV9TVEFUSUMuDQorICoNCisgKiBAcGFyYW1bb3V0XSBwX2FkZHIgUG9pbnRlciB0byBhZGRyZXNzIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQgaW4uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgQWRkcmVzcyBzdWNjZXNzZnVsbHkgcmV0cmlldmVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgb3IgTlVMTCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0FERFJfR0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9hZGRyX2dldChibGVfZ2FwX2FkZHJfdCAqcF9hZGRyKSk7DQorDQorDQorLyoqQGJyaWVmIFNldCB0aGUgYWN0aXZlIHdoaXRlbGlzdCBpbiB0aGUgU29mdERldmljZS4NCisgKg0KKyAqIEBub3RlICBPbmx5IG9uZSB3aGl0ZWxpc3QgY2FuIGJlIHVzZWQgYXQgYSB0aW1lIGFuZCB0aGUgd2hpdGVsaXN0IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBCTEUgcm9sZXMuDQorICogICAgICAgIFRoZSB3aGl0ZWxpc3QgY2Fubm90IGJlIHNldCBpZiBhIEJMRSByb2xlIGlzIHVzaW5nIHRoZSB3aGl0ZWxpc3QuDQorICoNCisgKiBAbm90ZSAgSWYgYW4gYWRkcmVzcyBpcyByZXNvbHZlZCB1c2luZyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGRldmljZSBpZGVudGl0eSBsaXN0LCB0aGVuIHRoZSB3aGl0ZWxpc3QNCisgKiAgICAgICAgZmlsdGVyIHBvbGljeSBhcHBsaWVzIHRvIHRoZSBwZWVyIGlkZW50aXR5IGFkZHJlc3MgYW5kIG5vdCB0aGUgcmVzb2x2YWJsZSBhZGRyZXNzIHNlbnQgb24gYWlyLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfV0xfU0hBUkVfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QUklWQUNZX1NDQU5fUFJJVkFURV9TQ0FOX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBwcF93bF9hZGRycyBQb2ludGVyIHRvIGEgd2hpdGVsaXN0IG9mIHBlZXIgYWRkcmVzc2VzLCBpZiBOVUxMIHRoZSB3aGl0ZWxpc3Qgd2lsbCBiZSBjbGVhcmVkLg0KKyAqIEBwYXJhbVtpbl0gbGVuICAgICAgICAgTGVuZ3RoIG9mIHRoZSB3aGl0ZWxpc3QsIG1heGltdW0gQHJlZiBCTEVfR0FQX1dISVRFTElTVF9BRERSX01BWF9DT1VOVC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgd2hpdGVsaXN0IGlzIHN1Y2Nlc3NmdWxseSBzZXQvY2xlYXJlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBUaGUgd2hpdGVsaXN0IChvciBvbmUgb2YgaXRzIGVudHJpZXMpIHByb3ZpZGVkIGlzIGludmFsaWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9HQVBfV0hJVEVMSVNUX0lOX1VTRSBUaGUgd2hpdGVsaXN0IGlzIGluIHVzZSBieSBhIEJMRSByb2xlIGFuZCBjYW5ub3QgYmUgc2V0IG9yIGNsZWFyZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9HQVBfSU5WQUxJRF9CTEVfQUREUiBJbnZhbGlkIGFkZHJlc3MgdHlwZSBpcyBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0RBVEFfU0laRSBUaGUgZ2l2ZW4gd2hpdGVsaXN0IHNpemUgaXMgaW52YWxpZCAoemVybyBvciB0b28gbGFyZ2UpOyB0aGlzIGNhbiBvbmx5IHJldHVybiB3aGVuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBfd2xfYWRkcnMgaXMgbm90IE5VTEwuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfV0hJVEVMSVNUX1NFVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfd2hpdGVsaXN0X3NldChibGVfZ2FwX2FkZHJfdCBjb25zdCAqIGNvbnN0ICogcHBfd2xfYWRkcnMsIHVpbnQ4X3QgbGVuKSk7DQorDQorDQorLyoqQGJyaWVmIFNldCBkZXZpY2UgaWRlbnRpdHkgbGlzdC4NCisgKg0KKyAqIEBub3RlICBPbmx5IG9uZSBkZXZpY2UgaWRlbnRpdHkgbGlzdCBjYW4gYmUgdXNlZCBhdCBhIHRpbWUgYW5kIHRoZSBsaXN0IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBCTEUgcm9sZXMuDQorICogICAgICAgIFRoZSBkZXZpY2UgaWRlbnRpdHkgbGlzdCBjYW5ub3QgYmUgc2V0IGlmIGEgQkxFIHJvbGUgaXMgdXNpbmcgdGhlIGxpc3QuDQorICoNCisgKiBAcGFyYW1baW5dIHBwX2lkX2tleXMgICAgIFBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgcGVlciBpZGVudGl0eSBhZGRyZXNzZXMgYW5kIHBlZXIgSVJLcywgaWYgTlVMTCB0aGUgZGV2aWNlIGlkZW50aXR5IGxpc3Qgd2lsbCBiZSBjbGVhcmVkLg0KKyAqIEBwYXJhbVtpbl0gcHBfbG9jYWxfaXJrcyAgUG9pbnRlciB0byBhbiBhcnJheSBvZiBsb2NhbCBJUktzLiBFYWNoIGVudHJ5IGluIHRoZSBhcnJheSBtYXBzIHRvIHRoZSBlbnRyeSBpbiBwcF9pZF9rZXlzIGF0IHRoZSBzYW1lIGluZGV4Lg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gZmlsbCBpbiB0aGUgbGlzdCB3aXRoIHRoZSBjdXJyZW50bHkgc2V0IGRldmljZSBJUksgZm9yIGFsbCBwZWVycywgc2V0IHRvIE5VTEwuDQorICogQHBhcmFtW2luXSBsZW4gICAgICAgICAgICBMZW5ndGggb2YgdGhlIGRldmljZSBpZGVudGl0eSBsaXN0LCBtYXhpbXVtIEByZWYgQkxFX0dBUF9ERVZJQ0VfSURFTlRJVElFU19NQVhfQ09VTlQuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QUklWQUNZX0FEVl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BSSVZBQ1lfU0NBTl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BSSVZBQ1lfU0NBTl9QUklWQVRFX1NDQU5fTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QUklWQUNZX0FEVl9ESVJfUFJJVl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9DT05OX1BSSVZfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0NPTk5fUFJJVl9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgZGV2aWNlIGlkZW50aXR5IGxpc3Qgc3VjY2Vzc2Z1bGx5IHNldC9jbGVhcmVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIFRoZSBkZXZpY2UgaWRlbnRpdHkgbGlzdCAob3Igb25lIG9mIGl0cyBlbnRyaWVzKSBwcm92aWRlZCBpcyBpbnZhbGlkLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29kZSBtYXkgYmUgcmV0dXJuZWQgaWYgdGhlIGxvY2FsIElSSyBsaXN0IGFsc28gaGFzIGFuIGludmFsaWQgZW50cnkuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9HQVBfREVWSUNFX0lERU5USVRJRVNfSU5fVVNFIFRoZSBkZXZpY2UgaWRlbnRpdHkgbGlzdCBpcyBpbiB1c2UgYW5kIGNhbm5vdCBiZSBzZXQgb3IgY2xlYXJlZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBUF9ERVZJQ0VfSURFTlRJVElFU19EVVBMSUNBVEUgVGhlIGRldmljZSBpZGVudGl0eSBsaXN0IGNvbnRhaW5zIG11bHRpcGxlIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBpZGVudGl0eSBhZGRyZXNzLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfR0FQX0lOVkFMSURfQkxFX0FERFIgSW52YWxpZCBhZGRyZXNzIHR5cGUgaXMgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9EQVRBX1NJWkUgVGhlIGdpdmVuIGRldmljZSBpZGVudGl0eSBsaXN0IHNpemUgaW52YWxpZCAoemVybyBvciB0b28gbGFyZ2UpOyB0aGlzIGNhbg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgcmV0dXJuIHdoZW4gcHBfaWRfa2V5cyBpcyBub3QgTlVMTC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9ERVZJQ0VfSURFTlRJVElFU19TRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2RldmljZV9pZGVudGl0aWVzX3NldChibGVfZ2FwX2lkX2tleV90IGNvbnN0ICogY29uc3QgKiBwcF9pZF9rZXlzLCBibGVfZ2FwX2lya190IGNvbnN0ICogY29uc3QgKiBwcF9sb2NhbF9pcmtzLCB1aW50OF90IGxlbikpOw0KKw0KKw0KKy8qKkBicmllZiBTZXQgcHJpdmFjeSBzZXR0aW5ncy4NCisgKg0KKyAqIEBub3RlICBQcml2YWN5IHNldHRpbmdzIGNhbm5vdCBiZSBzZXQgd2hpbGUgQkxFIHJvbGVzIGFyZSBydW5uaW5nLg0KKyAqDQorICogQHBhcmFtW2luXSBwX3ByaXZhY3lfcGFyYW1zIFByaXZhY3kgc2V0dGluZ3MuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QUklWQUNZX0FEVl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BSSVZBQ1lfU0NBTl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BSSVZBQ1lfQURWX0RJUl9QUklWX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFNldCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIFRoZSBzdGFjayBpcyBidXN5LCBwcm9jZXNzIHBlbmRpbmcgZXZlbnRzIGFuZCByZXRyeS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBUF9JTlZBTElEX0JMRV9BRERSIEludmFsaWQgYWRkcmVzcyB0eXBlIGlzIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIFRoZSBwb2ludGVyIHRvIHByaXZhY3kgc2V0dGluZ3MgaXMgTlVMTCBvciBpbnZhbGlkLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSwgdGhlIHBfZGV2aWNlX2lyayBwb2ludGVyIGluIHByaXZhY3kgcGFyYW1ldGVyIGlzIGFuIGludmFsaWQgcG9pbnRlci4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gT3V0IG9mIHJhbmdlIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBQcml2YWN5IHNldHRpbmdzIGNhbm5vdCBiZSBjaGFuZ2VkIHdoaWxlIEJMRSByb2xlcyB1c2luZyBwcml2YWN5IGFyZSBlbmFibGVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX1BSSVZBQ1lfU0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9wcml2YWN5X3NldChibGVfZ2FwX3ByaXZhY3lfcGFyYW1zX3QgY29uc3QgKnBfcHJpdmFjeV9wYXJhbXMpKTsNCisNCisNCisvKipAYnJpZWYgR2V0IHByaXZhY3kgc2V0dGluZ3MuDQorICoNCisgKiBAbm90ZSAgVGhlIHByaXZhY3kgc2V0dGluZ3MgcmV0dXJuZWQgaW5jbHVkZSB0aGUgY3VycmVudCBkZXZpY2UgaXJrIGFzIHdlbGwuDQorICoNCisgKiBAcGFyYW1baW5dIHBfcHJpdmFjeV9wYXJhbXMgUHJpdmFjeSBzZXR0aW5ncy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyAgICAgICAgICAgIFByaXZhY3kgc2V0dGluZ3MgcmVhZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBUaGUgcG9pbnRlciBnaXZlbiBmb3IgcmV0dXJuaW5nIHRoZSBwcml2YWN5IHNldHRpbmdzIG1heSBiZSBOVUxMIG9yIGludmFsaWQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCB0aGUgcF9kZXZpY2VfaXJrIHBvaW50ZXIgaW4gcHJpdmFjeSBwYXJhbWV0ZXIgaXMgYW4gaW52YWxpZCBwb2ludGVyLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX1BSSVZBQ1lfR0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9wcml2YWN5X2dldChibGVfZ2FwX3ByaXZhY3lfcGFyYW1zX3QgKnBfcHJpdmFjeV9wYXJhbXMpKTsNCisNCisNCisvKipAYnJpZWYgU2V0LCBjbGVhciBvciB1cGRhdGUgYWR2ZXJ0aXNpbmcgYW5kIHNjYW4gcmVzcG9uc2UgZGF0YS4NCisgKg0KKyAqIEBub3RlICBUaGUgZm9ybWF0IG9mIHRoZSBhZHZlcnRpc2luZyBkYXRhIHdpbGwgYmUgY2hlY2tlZCBieSB0aGlzIGNhbGwgdG8gZW5zdXJlIGludGVyb3BlcmFiaWxpdHkuDQorICogICAgICAgIExpbWl0YXRpb25zIGltcG9zZWQgYnkgdGhpcyBBUEkgY2FsbCB0byB0aGUgZGF0YSBwcm92aWRlZCBpbmNsdWRlIGhhdmluZyBhIGZsYWdzIGRhdGEgdHlwZSBpbiB0aGUgc2NhbiByZXNwb25zZSBkYXRhIGFuZA0KKyAqICAgICAgICBkdXBsaWNhdGluZyB0aGUgbG9jYWwgbmFtZSBpbiB0aGUgYWR2ZXJ0aXNpbmcgZGF0YSBhbmQgc2NhbiByZXNwb25zZSBkYXRhLg0KKyAqDQorICogQG5vdGUgIFRvIGNsZWFyIHRoZSBhZHZlcnRpc2luZyBkYXRhIGFuZCBzZXQgaXQgdG8gYSAwLWxlbmd0aCBwYWNrZXQsIHNpbXBseSBwcm92aWRlIGEgdmFsaWQgcG9pbnRlciAocF9kYXRhL3Bfc3JfZGF0YSkgd2l0aCBpdHMgY29ycmVzcG9uZGluZw0KKyAqICAgICAgICBsZW5ndGggKGRsZW4vc3JkbGVuKSBzZXQgdG8gMC4NCisgKg0KKyAqIEBub3RlIFRoZSBjYWxsIHdpbGwgZmFpbCBpZiBwX2RhdGEgYW5kIHBfc3JfZGF0YSBhcmUgYm90aCBOVUxMIHNpbmNlIHRoaXMgd291bGQgaGF2ZSBubyBlZmZlY3QuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9BRFZfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9XTF9TSEFSRV9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9kYXRhICAgIFJhdyBkYXRhIHRvIGJlIHBsYWNlZCBpbiBhZHZlcnRpc2luZyBwYWNrZXQuIElmIE5VTEwsIG5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIGN1cnJlbnQgYWR2ZXJ0aXNpbmcgcGFja2V0IGRhdGEuDQorICogQHBhcmFtW2luXSBkbGVuICAgICAgRGF0YSBsZW5ndGggZm9yIHBfZGF0YS4gTWF4IHNpemU6IEByZWYgQkxFX0dBUF9BRFZfTUFYX1NJWkUgb2N0ZXRzLiBTaG91bGQgYmUgMCBpZiBwX2RhdGEgaXMgTlVMTCwgY2FuIGJlIDAgaWYgcF9kYXRhIGlzIG5vdCBOVUxMLg0KKyAqIEBwYXJhbVtpbl0gcF9zcl9kYXRhIFJhdyBkYXRhIHRvIGJlIHBsYWNlZCBpbiBzY2FuIHJlc3BvbnNlIHBhY2tldC4gSWYgTlVMTCwgbm8gY2hhbmdlcyBhcmUgbWFkZSB0byB0aGUgY3VycmVudCBzY2FuIHJlc3BvbnNlIHBhY2tldCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gc3JkbGVuICAgIERhdGEgbGVuZ3RoIGZvciBwX3NyX2RhdGEuIE1heCBzaXplOiBAcmVmIEJMRV9HQVBfQURWX01BWF9TSVpFIG9jdGV0cy4gU2hvdWxkIGJlIDAgaWYgcF9zcl9kYXRhIGlzIE5VTEwsIGNhbiBiZSAwIGlmIHBfZGF0YSBpcyBub3QgTlVMTC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBBZHZlcnRpc2luZyBkYXRhIHN1Y2Nlc3NmdWxseSB1cGRhdGVkIG9yIGNsZWFyZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLCBib3RoIHBfZGF0YSBhbmQgcF9zcl9kYXRhIGNhbm5vdCBiZSBOVUxMLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfRkxBR1MgSW52YWxpZCBjb21iaW5hdGlvbiBvZiBhZHZlcnRpc2luZyBmbGFncyBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfREFUQSBJbnZhbGlkIGRhdGEgdHlwZShzKSBzdXBwbGllZCwgY2hlY2sgdGhlIGFkdmVydGlzaW5nIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0xFTkdUSCBJbnZhbGlkIGRhdGEgbGVuZ3RoKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX1NVUFBPUlRFRCBVbnN1cHBvcnRlZCBkYXRhIHR5cGUuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9HQVBfVVVJRF9MSVNUX01JU01BVENIIEludmFsaWQgVVVJRCBsaXN0IHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0FEVl9EQVRBX1NFVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfYWR2X2RhdGFfc2V0KHVpbnQ4X3QgY29uc3QgKnBfZGF0YSwgdWludDhfdCBkbGVuLCB1aW50OF90IGNvbnN0ICpwX3NyX2RhdGEsIHVpbnQ4X3Qgc3JkbGVuKSk7DQorDQorDQorLyoqQGJyaWVmIFN0YXJ0IGFkdmVydGlzaW5nIChHQVAgRGlzY292ZXJhYmxlLCBDb25uZWN0YWJsZSBtb2RlcywgQnJvYWRjYXN0IFByb2NlZHVyZSkuDQorICoNCisgKiBAbm90ZSAgQW4gYXBwbGljYXRpb24gY2FuIHN0YXJ0IGFuIGFkdmVydGlzaW5nIHByb2NlZHVyZSBmb3IgYnJvYWRjYXN0aW5nIHB1cnBvc2VzIHdoaWxlIGEgY29ubmVjdGlvbg0KKyAqICAgICAgICBpcyBhY3RpdmUuIEFmdGVyIGEgQHJlZiBCTEVfR0FQX0VWVF9DT05ORUNURUQgZXZlbnQgaXMgcmVjZWl2ZWQsIHRoaXMgZnVuY3Rpb24gbWF5IHRoZXJlZm9yZQ0KKyAqICAgICAgICBiZSBjYWxsZWQgdG8gc3RhcnQgYSBicm9hZGNhc3QgYWR2ZXJ0aXNpbmcgcHJvY2VkdXJlLiBUaGUgYWR2ZXJ0aXNpbmcgcHJvY2VkdXJlDQorICogICAgICAgIGNhbm5vdCBob3dldmVyIGJlIGNvbm5lY3RhYmxlIChpdCBtdXN0IGJlIG9mIHR5cGUgQHJlZiBCTEVfR0FQX0FEVl9UWVBFX0FEVl9TQ0FOX0lORCBvcg0KKyAqICAgICAgICBAcmVmIEJMRV9HQVBfQURWX1RZUEVfQURWX05PTkNPTk5fSU5EKS4gQG5vdGUgT25seSBvbmUgYWR2ZXJ0aXNlciBtYXkgYmUgYWN0aXZlIGF0IGFueSB0aW1lLg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX0NPTk5FQ1RFRCwgR2VuZXJhdGVkIGFmdGVyIGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQgdGhyb3VnaCBjb25uZWN0YWJsZSBhZHZlcnRpc2luZy59DQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfVElNRU9VVCwgQWR2ZXJ0aXNlbWVudCBoYXMgdGltZWQgb3V0Ln0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9BRFZfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfQ09OTl9QUklWX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUFJJVkFDWV9BRFZfRElSX1BSSVZfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9XTF9TSEFSRV9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9hZHZfcGFyYW1zIFBvaW50ZXIgdG8gYWR2ZXJ0aXNpbmcgcGFyYW1ldGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBjb25uX2NmZ190YWcgVGFnIGlkZW50aWZ5aW5nIGEgY29uZmlndXJhdGlvbiBzZXQgYnkgQHJlZiBzZF9ibGVfY2ZnX3NldCBvciBAcmVmDQorICogICAgICAgICAgICAgICAgICAgICAgICAgQkxFX0NPTk5fQ0ZHX1RBR19ERUZBVUxUIHRvIHVzZSB0aGUgZGVmYXVsdCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIEJMRSBzdGFjayBoYXMgc3RhcnRlZCBhZHZlcnRpc2luZy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9DT05OX0NPVU5UIFRoZSBsaW1pdCBvZiBhdmFpbGFibGUgY29ubmVjdGlvbnMgaGFzIGJlZW4gcmVhY2hlZDsgY29ubmVjdGFibGUgYWR2ZXJ0aXNlciBjYW5ub3QgYmUgc3RhcnRlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQsIGNoZWNrIHRoZSBhY2NlcHRlZCByYW5nZXMgYW5kIGxpbWl0cy4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBUF9JTlZBTElEX0JMRV9BRERSIEludmFsaWQgQmx1ZXRvb3RoIGFkZHJlc3Mgc3VwcGxpZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9HQVBfRElTQ09WRVJBQkxFX1dJVEhfV0hJVEVMSVNUIERpc2NvdmVyYWJsZSBtb2RlIGFuZCB3aGl0ZWxpc3QgaW5jb21wYXRpYmxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBUaGUgc3RhY2sgaXMgYnVzeSwgcHJvY2VzcyBwZW5kaW5nIGV2ZW50cyBhbmQgcmV0cnkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9SRVNPVVJDRVMgTm90IGVub3VnaCBCTEUgcm9sZSBzbG90cyBhdmFpbGFibGUuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcCBvbmUgb3IgbW9yZSBjdXJyZW50bHkgYWN0aXZlIHJvbGVzIChDZW50cmFsLCBQZXJpcGhlcmFsIG9yIE9ic2VydmVyKSBhbmQgdHJ5IGFnYWluDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfQURWX1NUQVJULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9hZHZfc3RhcnQoYmxlX2dhcF9hZHZfcGFyYW1zX3QgY29uc3QgKnBfYWR2X3BhcmFtcywgdWludDhfdCBjb25uX2NmZ190YWcpKTsNCisNCisNCisvKipAYnJpZWYgU3RvcCBhZHZlcnRpc2luZyAoR0FQIERpc2NvdmVyYWJsZSwgQ29ubmVjdGFibGUgbW9kZXMsIEJyb2FkY2FzdCBQcm9jZWR1cmUpLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQURWX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfV0xfU0hBUkVfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIEJMRSBzdGFjayBoYXMgc3RvcHBlZCBhZHZlcnRpc2luZy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbiAobW9zdCBwcm9iYWJseSBub3QgaW4gYWR2ZXJ0aXNpbmcgc3RhdGUpLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0FEVl9TVE9QLCB1aW50MzJfdCwgc2RfYmxlX2dhcF9hZHZfc3RvcCh2b2lkKSk7DQorDQorDQorDQorLyoqQGJyaWVmIFVwZGF0ZSBjb25uZWN0aW9uIHBhcmFtZXRlcnMuDQorICoNCisgKiBAZGV0YWlscyBJbiB0aGUgY2VudHJhbCByb2xlIHRoaXMgd2lsbCBpbml0aWF0ZSBhIExpbmsgTGF5ZXIgY29ubmVjdGlvbiBwYXJhbWV0ZXIgdXBkYXRlIHByb2NlZHVyZSwNCisgKiAgICAgICAgICBvdGhlcndpc2UgaW4gdGhlIHBlcmlwaGVyYWwgcm9sZSwgdGhpcyB3aWxsIHNlbmQgdGhlIGNvcnJlc3BvbmRpbmcgTDJDQVAgcmVxdWVzdCBhbmQgd2FpdCBmb3INCisgKiAgICAgICAgICB0aGUgY2VudHJhbCB0byBwZXJmb3JtIHRoZSBwcm9jZWR1cmUuIEluIGJvdGggY2FzZXMsIGFuZCByZWdhcmRsZXNzIG9mIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgdGhlIGFwcGxpY2F0aW9uDQorICogICAgICAgICAgd2lsbCBiZSBpbmZvcm1lZCBvZiB0aGUgcmVzdWx0IHdpdGggYSBAcmVmIEJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFIGV2ZW50Lg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBhcyBhIGNlbnRyYWwgYm90aCB0byByZXBseSB0byBhIEByZWYgQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEVfUkVRVUVTVCBvciB0byBzdGFydCB0aGUgcHJvY2VkdXJlIHVucmVxdWVzdGVkLg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFLCBSZXN1bHQgb2YgdGhlIGNvbm5lY3Rpb24gcGFyYW1ldGVyIHVwZGF0ZSBwcm9jZWR1cmUufQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NQVV9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfRU5DX0FVVEhfTVVURVhfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9NVUxUSUxJTktfQ1BVX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfTVVMVElMSU5LX0NUUkxfUFJPQ19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfQ1BVX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIHBfY29ubl9wYXJhbXMgIFBvaW50ZXIgdG8gZGVzaXJlZCBjb25uZWN0aW9uIHBhcmFtZXRlcnMuIElmIE5VTEwgaXMgcHJvdmlkZWQgb24gYSBwZXJpcGhlcmFsIHJvbGUsDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFyYW1ldGVycyBpbiB0aGUgUFBDUCBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUgR0FQIHNlcnZpY2Ugd2lsbCBiZSB1c2VkIGluc3RlYWQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBOVUxMIGlzIHByb3ZpZGVkIG9uIGEgY2VudHJhbCByb2xlIGFuZCBpbiByZXNwb25zZSB0byBhIEByZWYgQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEVfUkVRVUVTVCwgdGhlIHBlcmlwaGVyYWwgcmVxdWVzdCB3aWxsIGJlIHJlamVjdGVkDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIENvbm5lY3Rpb24gVXBkYXRlIHByb2NlZHVyZSBoYXMgYmVlbiBzdGFydGVkIHN1Y2Nlc3NmdWxseS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLCBjaGVjayBwYXJhbWV0ZXIgbGltaXRzIGFuZCBjb25zdHJhaW50cy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgUHJvY2VkdXJlIGFscmVhZHkgaW4gcHJvZ3Jlc3Mgb3Igbm90IGFsbG93ZWQgYXQgdGhpcyB0aW1lLCBwcm9jZXNzIHBlbmRpbmcgZXZlbnRzIGFuZCB3YWl0IGZvciBwZW5kaW5nIHByb2NlZHVyZXMgdG8gY29tcGxldGUgYW5kIHJldHJ5Lg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9fTUVNIE5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbXBsZXRlIG9wZXJhdGlvbi4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9DT05OX1BBUkFNX1VQREFURSwgdWludDMyX3QsIHNkX2JsZV9nYXBfY29ubl9wYXJhbV91cGRhdGUodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXBfY29ubl9wYXJhbXNfdCBjb25zdCAqcF9jb25uX3BhcmFtcykpOw0KKw0KKw0KKy8qKkBicmllZiBEaXNjb25uZWN0IChHQVAgTGluayBUZXJtaW5hdGlvbikuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGNhbGwgaW5pdGlhdGVzIHRoZSBkaXNjb25uZWN0aW9uIHByb2NlZHVyZSwgYW5kIGl0cyBjb21wbGV0aW9uIHdpbGwgYmUgY29tbXVuaWNhdGVkIHRvIHRoZSBhcHBsaWNhdGlvbg0KKyAqICAgICAgICAgIHdpdGggYSBAcmVmIEJMRV9HQVBfRVZUX0RJU0NPTk5FQ1RFRCBldmVudC4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9ESVNDT05ORUNURUQsIEdlbmVyYXRlZCB3aGVuIGRpc2Nvbm5lY3Rpb24gcHJvY2VkdXJlIGlzIGNvbXBsZXRlLn0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DT05OX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIGhjaV9zdGF0dXNfY29kZSBIQ0kgc3RhdHVzIGNvZGUsIHNlZSBAcmVmIEJMRV9IQ0lfU1RBVFVTX0NPREVTIChhY2NlcHRlZCB2YWx1ZXMgYXJlIEByZWYgQkxFX0hDSV9SRU1PVEVfVVNFUl9URVJNSU5BVEVEX0NPTk5FQ1RJT04gYW5kIEByZWYgQkxFX0hDSV9DT05OX0lOVEVSVkFMX1VOQUNDRVBUQUJMRSkuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIGRpc2Nvbm5lY3Rpb24gcHJvY2VkdXJlIGhhcyBiZWVuIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbiAoZGlzY29ubmVjdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzKS4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9ESVNDT05ORUNULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9kaXNjb25uZWN0KHVpbnQxNl90IGNvbm5faGFuZGxlLCB1aW50OF90IGhjaV9zdGF0dXNfY29kZSkpOw0KKw0KKw0KKy8qKkBicmllZiBTZXQgdGhlIHJhZGlvJ3MgdHJhbnNtaXQgcG93ZXIuDQorICoNCisgKiBAcGFyYW1baW5dIHR4X3Bvd2VyIFJhZGlvIHRyYW5zbWl0IHBvd2VyIGluIGRCbSAoYWNjZXB0ZWQgdmFsdWVzIGFyZSAtNDAsIC0yMCwgLTE2LCAtMTIsIC04LCAtNCwgMCwgMiwgMywgNCwgNSwgNiwgNywgOCBhbmQgOSBkQm0pLg0KKyAqDQorICogQG5vdGUgVGhlIC00MGRCbSwgLTIwZEJtLCAtMTZkQm0sIC0xMmRCbSwgLThkQm0sIC00ZEJtLCAwZEJtLCArMmRCbSwgKzNkQm0sICs0ZEJtLCArNWRCbSwgKzZkQm0sICs3ZEJtLCArOGRCbSBhbmQgKzlkQm0gc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBvbiBuUkY1Mjg0MCBzZXJpZXMgSUNzLg0KKyAqIEBub3RlIFRoZSAtNDBkQm0sIC0yMGRCbSwgLTE2ZEJtLCAtMTJkQm0sIC04ZEJtLCAtNGRCbSwgMGRCbSwgKzNkQm0gYW5kICs0ZEJtIHNldHRpbmdzIGFyZSBhdmFpbGFibGUgb24gblJGNTIgc2VyaWVzIElDcy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgY2hhbmdlZCB0aGUgdHJhbnNtaXQgcG93ZXIuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX1RYX1BPV0VSX1NFVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfdHhfcG93ZXJfc2V0KGludDhfdCB0eF9wb3dlcikpOw0KKw0KKw0KKy8qKkBicmllZiBTZXQgR0FQIEFwcGVhcmFuY2UgdmFsdWUuDQorICoNCisgKiBAcGFyYW1baW5dIGFwcGVhcmFuY2UgQXBwZWFyYW5jZSAoMTYtYml0KSwgc2VlIEByZWYgQkxFX0FQUEVBUkFOQ0VTLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTICBBcHBlYXJhbmNlIHZhbHVlIHNldCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0FQUEVBUkFOQ0VfU0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9hcHBlYXJhbmNlX3NldCh1aW50MTZfdCBhcHBlYXJhbmNlKSk7DQorDQorDQorLyoqQGJyaWVmIEdldCBHQVAgQXBwZWFyYW5jZSB2YWx1ZS4NCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfYXBwZWFyYW5jZSBQb2ludGVyIHRvIGFwcGVhcmFuY2UgKDE2LWJpdCkgdG8gYmUgZmlsbGVkIGluLCBzZWUgQHJlZiBCTEVfQVBQRUFSQU5DRVMuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgQXBwZWFyYW5jZSB2YWx1ZSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9BUFBFQVJBTkNFX0dFVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfYXBwZWFyYW5jZV9nZXQodWludDE2X3QgKnBfYXBwZWFyYW5jZSkpOw0KKw0KKw0KKy8qKkBicmllZiBTZXQgR0FQIFBlcmlwaGVyYWwgUHJlZmVycmVkIENvbm5lY3Rpb24gUGFyYW1ldGVycy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9jb25uX3BhcmFtcyBQb2ludGVyIHRvIGEgQHJlZiBibGVfZ2FwX2Nvbm5fcGFyYW1zX3Qgc3RydWN0dXJlIHdpdGggdGhlIGRlc2lyZWQgcGFyYW1ldGVycy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBQZXJpcGhlcmFsIFByZWZlcnJlZCBDb25uZWN0aW9uIFBhcmFtZXRlcnMgc2V0IHN1Y2Nlc3NmdWxseS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX1BQQ1BfU0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9wcGNwX3NldChibGVfZ2FwX2Nvbm5fcGFyYW1zX3QgY29uc3QgKnBfY29ubl9wYXJhbXMpKTsNCisNCisNCisvKipAYnJpZWYgR2V0IEdBUCBQZXJpcGhlcmFsIFByZWZlcnJlZCBDb25uZWN0aW9uIFBhcmFtZXRlcnMuDQorICoNCisgKiBAcGFyYW1bb3V0XSBwX2Nvbm5fcGFyYW1zIFBvaW50ZXIgdG8gYSBAcmVmIGJsZV9nYXBfY29ubl9wYXJhbXNfdCBzdHJ1Y3R1cmUgd2hlcmUgdGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBzdG9yZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgUGVyaXBoZXJhbCBQcmVmZXJyZWQgQ29ubmVjdGlvbiBQYXJhbWV0ZXJzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX1BQQ1BfR0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9wcGNwX2dldChibGVfZ2FwX2Nvbm5fcGFyYW1zX3QgKnBfY29ubl9wYXJhbXMpKTsNCisNCisNCisvKipAYnJpZWYgU2V0IEdBUCBkZXZpY2UgbmFtZS4NCisgKg0KKyAqIEBub3RlICBJZiB0aGUgZGV2aWNlIG5hbWUgaXMgbG9jYXRlZCBpbiBhcHBsaWNhdGlvbiBmbGFzaCBtZW1vcnkgKHNlZSBAcmVmIGJsZV9nYXBfY2ZnX2RldmljZV9uYW1lX3QpLA0KKyAqICAgICAgICBpdCBjYW5ub3QgYmUgY2hhbmdlZC4gVGhlbiBAcmVmIE5SRl9FUlJPUl9GT1JCSURERU4gd2lsbCBiZSByZXR1cm5lZC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcF93cml0ZV9wZXJtIFdyaXRlIHBlcm1pc3Npb25zIGZvciB0aGUgRGV2aWNlIE5hbWUgY2hhcmFjdGVyaXN0aWMsIHNlZSBAcmVmIGJsZV9nYXBfY29ubl9zZWNfbW9kZV90Lg0KKyAqIEBwYXJhbVtpbl0gcF9kZXZfbmFtZSBQb2ludGVyIHRvIGEgVVRGLTggZW5jb2RlZCwgPGI+bm9uIE5VTEwtdGVybWluYXRlZDwvYj4gc3RyaW5nLg0KKyAqIEBwYXJhbVtpbl0gbGVuIExlbmd0aCBvZiB0aGUgVVRGLTgsIDxiPm5vbiBOVUxMLXRlcm1pbmF0ZWQ8L2I+IHN0cmluZyBwb2ludGVkIHRvIGJ5IHBfZGV2X25hbWUgaW4gb2N0ZXRzIChtdXN0IGJlIHNtYWxsZXIgb3IgZXF1YWwgdGhhbiBAcmVmIEJMRV9HQVBfREVWTkFNRV9NQVhfTEVOKS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBHQVAgZGV2aWNlIG5hbWUgYW5kIHBlcm1pc3Npb25zIHNldCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0RBVEFfU0laRSBJbnZhbGlkIGRhdGEgc2l6ZShzKSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0ZPUkJJRERFTiBEZXZpY2UgbmFtZSBpcyBub3Qgd3JpdGFibGUuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfREVWSUNFX05BTUVfU0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9kZXZpY2VfbmFtZV9zZXQoYmxlX2dhcF9jb25uX3NlY19tb2RlX3QgY29uc3QgKnBfd3JpdGVfcGVybSwgdWludDhfdCBjb25zdCAqcF9kZXZfbmFtZSwgdWludDE2X3QgbGVuKSk7DQorDQorDQorLyoqQGJyaWVmIEdldCBHQVAgZGV2aWNlIG5hbWUuDQorICoNCisgKiBAbm90ZSAgSWYgdGhlIGRldmljZSBuYW1lIGlzIGxvbmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBzdXBwbGllZCBidWZmZXIsDQorICogICAgICAgIHBfbGVuIHdpbGwgcmV0dXJuIHRoZSBjb21wbGV0ZSBkZXZpY2UgbmFtZSBsZW5ndGgsDQorICogICAgICAgIGFuZCBub3QgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZXR1cm5lZCBpbiBwX2Rldl9uYW1lLg0KKyAqICAgICAgICBUaGUgYXBwbGljYXRpb24gbWF5IHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGFsbG9jYXRlIGEgc3VpdGFibGUgYnVmZmVyIHNpemUuDQorICoNCisgKiBAcGFyYW1bb3V0XSAgICBwX2Rldl9uYW1lIFBvaW50ZXIgdG8gYW4gZW1wdHkgYnVmZmVyIHdoZXJlIHRoZSBVVEYtOCA8Yj5ub24gTlVMTC10ZXJtaW5hdGVkPC9iPiBzdHJpbmcgd2lsbCBiZSBwbGFjZWQuIFNldCB0byBOVUxMIHRvIG9idGFpbiB0aGUgY29tcGxldGUgZGV2aWNlIG5hbWUgbGVuZ3RoLg0KKyAqIEBwYXJhbVtpbixvdXRdIHBfbGVuICAgICAgTGVuZ3RoIG9mIHRoZSBidWZmZXIgcG9pbnRlZCBieSBwX2Rldl9uYW1lLCBjb21wbGV0ZSBkZXZpY2UgbmFtZSBsZW5ndGggb24gb3V0cHV0Lg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIEdBUCBkZXZpY2UgbmFtZSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0RBVEFfU0laRSBJbnZhbGlkIGRhdGEgc2l6ZShzKSBzdXBwbGllZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9ERVZJQ0VfTkFNRV9HRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2RldmljZV9uYW1lX2dldCh1aW50OF90ICpwX2Rldl9uYW1lLCB1aW50MTZfdCAqcF9sZW4pKTsNCisNCisNCisvKipAYnJpZWYgSW5pdGlhdGUgdGhlIEdBUCBBdXRoZW50aWNhdGlvbiBwcm9jZWR1cmUuDQorICoNCisgKiBAZGV0YWlscyBJbiB0aGUgY2VudHJhbCByb2xlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgc2VuZCBhbiBTTVAgUGFpcmluZyBSZXF1ZXN0IChvciBhbiBTTVAgUGFpcmluZyBGYWlsZWQgaWYgcmVqZWN0ZWQpLA0KKyAqICAgICAgICAgIG90aGVyd2lzZSBpbiB0aGUgcGVyaXBoZXJhbCByb2xlLCBhbiBTTVAgU2VjdXJpdHkgUmVxdWVzdCB3aWxsIGJlIHNlbnQuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0RlcGVuZGluZyBvbiB0aGUgc2VjdXJpdHkgcGFyYW1ldGVycyBzZXQgYW5kIHRoZSBwYWNrZXQgZXhjaGFuZ2VzIHdpdGggdGhlIHBlZXJcLCB0aGUgZm9sbG93aW5nIGV2ZW50cyBtYXkgYmUgZ2VuZXJhdGVkOn0NCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1R9DQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfU0VDX0lORk9fUkVRVUVTVH0NCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9QQVNTS0VZX0RJU1BMQVl9DQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfS0VZX1BSRVNTRUR9DQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfQVVUSF9LRVlfUkVRVUVTVH0NCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1R9DQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFfQ0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTfQ0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX1RJTUVPVVR9DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX1NFQ19SRVFfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX1NFQ19SRVFfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0VOQ19BVVRIX01VVEVYX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9QQUlSSU5HX0pXX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9CT05ESU5HX0pXX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9CT05ESU5HX1BLX1BFUklQSF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfQk9ORElOR19QS19QRVJJUEhfT09CX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX1BBSVJJTkdfSldfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0xFU0NfQk9ORElOR19OQ19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX1BLRV9QRF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX1BLRV9DRF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX09PQl9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSBwX3NlY19wYXJhbXMgUG9pbnRlciB0byB0aGUgQHJlZiBibGVfZ2FwX3NlY19wYXJhbXNfdCBzdHJ1Y3R1cmUgd2l0aCB0aGUgc2VjdXJpdHkgcGFyYW1ldGVycyB0byBiZSB1c2VkIGR1cmluZyB0aGUgcGFpcmluZyBvciBib25kaW5nIHByb2NlZHVyZS4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgcGVyaXBoZXJhbCByb2xlLCBvbmx5IHRoZSBib25kLCBtaXRtLCBsZXNjIGFuZCBrZXlwcmVzcyBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIHVzZWQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGNlbnRyYWwgcm9sZSwgdGhpcyBwb2ludGVyIG1heSBiZSBOVUxMIHRvIHJlamVjdCBhIFNlY3VyaXR5IFJlcXVlc3QuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IGluaXRpYXRlZCBhdXRoZW50aWNhdGlvbiBwcm9jZWR1cmUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgVGhlIHN0YWNrIGlzIGJ1c3ksIHByb2Nlc3MgcGVuZGluZyBldmVudHMgYW5kIHJldHJ5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9fTUVNIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBwcm9jZWR1cmVzIHRoYXQgY2FuIHJ1biBpbiBwYXJhbGxlbCBmb3IgdGhlIGdpdmVuIHJvbGUgaXMgcmVhY2hlZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9TVVBQT1JURUQgU2V0dGluZyBvZiBzaWduIG9yIGxpbmsgZmllbGRzIGluIEByZWYgYmxlX2dhcF9zZWNfa2Rpc3RfdCBub3Qgc3VwcG9ydGVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfVElNRU9VVCBBIFNNUCB0aW1lb3V0IGhhcyBvY2N1cnJlZCwgYW5kIGZ1cnRoZXIgU01QIG9wZXJhdGlvbnMgb24gdGhpcyBsaW5rIGlzIHByb2hpYml0ZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfQVVUSEVOVElDQVRFLCB1aW50MzJfdCwgc2RfYmxlX2dhcF9hdXRoZW50aWNhdGUodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXBfc2VjX3BhcmFtc190IGNvbnN0ICpwX3NlY19wYXJhbXMpKTsNCisNCisNCisvKipAYnJpZWYgUmVwbHkgd2l0aCBHQVAgc2VjdXJpdHkgcGFyYW1ldGVycy4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHRvIHJlcGx5IHRvIGEgQHJlZiBCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1QsIGNhbGxpbmcgaXQgYXQgb3RoZXIgdGltZXMgd2lsbCByZXN1bHQgaW4gYW4gQHJlZiBOUkZfRVJST1JfSU5WQUxJRF9TVEFURS4NCisgKiBAbm90ZSAgICBJZiB0aGUgY2FsbCByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHRoZSByZXF1ZXN0IGlzIHN0aWxsIHBlbmRpbmcsIGFuZCB0aGUgcmVwbHkgY2FsbCBtYXkgYmUgcmVwZWF0ZWQgd2l0aCBjb3JyZWN0ZWQgcGFyYW1ldGVycy4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7VGhpcyBmdW5jdGlvbiBpcyB1c2VkIGR1cmluZyBhdXRoZW50aWNhdGlvbiBwcm9jZWR1cmVzXCwgc2VlIHRoZSBsaXN0IG9mIGV2ZW50cyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBAcmVmIHNkX2JsZV9nYXBfYXV0aGVudGljYXRlLn0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfUEFJUklOR19KV19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9CT05ESU5HX0pXX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0JPTkRJTkdfUEtfUEVSSVBIX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0JPTkRJTkdfUEtfQ0VOVFJBTF9PT0JfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfQk9ORElOR19TVEFUSUNfUEtfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfUEFJUklOR19DT05GSVJNX0ZBSUxfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfTEVTQ19QQUlSSU5HX0pXX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19OQ19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9MRVNDX0JPTkRJTkdfUEtFX1BEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19QS0VfQ0RfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX09PQl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX0tTX1RPT19TTUFMTF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX0FQUF9FUlJPUl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX1JFTU9URV9QQUlSSU5HX0ZBSUxfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfUEFJUklOR19USU1FT1VUX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9QQUlSSU5HX0pXX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9CT05ESU5HX0pXX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9CT05ESU5HX1BLX1BFUklQSF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfQk9ORElOR19QS19QRVJJUEhfT09CX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX1BBSVJJTkdfSldfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0xFU0NfQk9ORElOR19OQ19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX1BLRV9QRF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX1BLRV9DRF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX09PQl9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSBzZWNfc3RhdHVzIFNlY3VyaXR5IHN0YXR1cywgc2VlIEByZWYgQkxFX0dBUF9TRUNfU1RBVFVTLg0KKyAqIEBwYXJhbVtpbl0gcF9zZWNfcGFyYW1zIFBvaW50ZXIgdG8gYSBAcmVmIGJsZV9nYXBfc2VjX3BhcmFtc190IHNlY3VyaXR5IHBhcmFtZXRlcnMgc3RydWN0dXJlLiBJbiB0aGUgY2VudHJhbCByb2xlIHRoaXMgbXVzdCBiZSBzZXQgdG8gTlVMTCwgYXMgdGhlIHBhcmFtZXRlcnMgaGF2ZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgYmVlbiBwcm92aWRlZCBkdXJpbmcgYSBwcmV2aW91cyBjYWxsIHRvIEByZWYgc2RfYmxlX2dhcF9hdXRoZW50aWNhdGUuDQorICogQHBhcmFtW2luLG91dF0gcF9zZWNfa2V5c2V0IFBvaW50ZXIgdG8gYSBAcmVmIGJsZV9nYXBfc2VjX2tleXNldF90IHNlY3VyaXR5IGtleXNldCBzdHJ1Y3R1cmUuIEFueSBrZXlzIGdlbmVyYXRlZCBhbmQvb3IgZGlzdHJpYnV0ZWQgYXMgYSByZXN1bHQgb2YgdGhlIG9uZ29pbmcgc2VjdXJpdHkgcHJvY2VkdXJlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgbWVtb3J5IHJlZmVyZW5jZWQgYnkgdGhlIHBvaW50ZXJzIGluc2lkZSB0aGlzIHN0cnVjdHVyZS4gVGhlIGtleXMgd2lsbCBiZSBzdG9yZWQgYW5kIGF2YWlsYWJsZSB0byB0aGUgYXBwbGljYXRpb24NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB1cG9uIHJlY2VwdGlvbiBvZiBhIEByZWYgQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMgZXZlbnQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBTb2Z0RGV2aWNlIGV4cGVjdHMgdGhlIGFwcGxpY2F0aW9uIHRvIHByb3ZpZGUgbWVtb3J5IGZvciBzdG9yaW5nIHRoZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXIncyBrZXlzLiBTbyBpdCBtdXN0IGJlIGVuc3VyZWQgdGhhdCB0aGUgcmVsZXZhbnQgcG9pbnRlcnMgaW5zaWRlIHRoaXMgc3RydWN0dXJlIGFyZSBub3QgTlVMTC4gVGhlIHBvaW50ZXJzIHRvIHRoZSBsb2NhbCBrZXkNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBjYW4sIGhvd2V2ZXIsIGJlIE5VTEwsIGluIHdoaWNoIGNhc2UsIHRoZSBsb2NhbCBrZXkgZGF0YSB3aWxsIG5vdCBiZSBhdmFpbGFibGUgdG8gdGhlIGFwcGxpY2F0aW9uIHVwb24gcmVjZXB0aW9uIG9mIHRoZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIEByZWYgQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMgZXZlbnQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IGFjY2VwdGVkIHNlY3VyaXR5IHBhcmFtZXRlciBmcm9tIHRoZSBhcHBsaWNhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX1NVUFBPUlRFRCBTZXR0aW5nIG9mIHNpZ24gb3IgbGluayBmaWVsZHMgaW4gQHJlZiBibGVfZ2FwX3NlY19rZGlzdF90IG5vdCBzdXBwb3J0ZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfU0VDX1BBUkFNU19SRVBMWSwgdWludDMyX3QsIHNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseSh1aW50MTZfdCBjb25uX2hhbmRsZSwgdWludDhfdCBzZWNfc3RhdHVzLCBibGVfZ2FwX3NlY19wYXJhbXNfdCBjb25zdCAqcF9zZWNfcGFyYW1zLCBibGVfZ2FwX3NlY19rZXlzZXRfdCBjb25zdCAqcF9zZWNfa2V5c2V0KSk7DQorDQorDQorLyoqQGJyaWVmIFJlcGx5IHdpdGggYW4gYXV0aGVudGljYXRpb24ga2V5Lg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgdG8gcmVwbHkgdG8gYSBAcmVmIEJMRV9HQVBfRVZUX0FVVEhfS0VZX1JFUVVFU1Qgb3IgYSBAcmVmIEJMRV9HQVBfRVZUX1BBU1NLRVlfRElTUExBWSwgY2FsbGluZyBpdCBhdCBvdGhlciB0aW1lcyB3aWxsIHJlc3VsdCBpbiBhbiBAcmVmIE5SRl9FUlJPUl9JTlZBTElEX1NUQVRFLg0KKyAqIEBub3RlICAgIElmIHRoZSBjYWxsIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIHJlcXVlc3QgaXMgc3RpbGwgcGVuZGluZywgYW5kIHRoZSByZXBseSBjYWxsIG1heSBiZSByZXBlYXRlZCB3aXRoIGNvcnJlY3RlZCBwYXJhbWV0ZXJzLg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIGF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZXNcLCBzZWUgdGhlIGxpc3Qgb2YgZXZlbnRzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIEByZWYgc2RfYmxlX2dhcF9hdXRoZW50aWNhdGUufQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9CT05ESU5HX1BLX0NFTlRSQUxfT09CX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19OQ19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9MRVNDX0JPTkRJTkdfUEtFX0NEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9CT05ESU5HX1BLX1BFUklQSF9PT0JfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0xFU0NfQk9ORElOR19OQ19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX1BLRV9DRF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSBrZXlfdHlwZSBTZWUgQHJlZiBCTEVfR0FQX0FVVEhfS0VZX1RZUEVTLg0KKyAqIEBwYXJhbVtpbl0gcF9rZXkgSWYga2V5IHR5cGUgaXMgQHJlZiBCTEVfR0FQX0FVVEhfS0VZX1RZUEVfTk9ORSwgdGhlbiBOVUxMLg0KKyAqICAgICAgICAgICAgICAgICAgSWYga2V5IHR5cGUgaXMgQHJlZiBCTEVfR0FQX0FVVEhfS0VZX1RZUEVfUEFTU0tFWSwgdGhlbiBhIDYtYnl0ZSBBU0NJSSBzdHJpbmcgKGRpZ2l0IDAuLjkgb25seSwgbm8gTlVMTCB0ZXJtaW5hdGlvbikNCisgKiAgICAgICAgICAgICAgICAgICAgIG9yIE5VTEwgd2hlbiBjb25maXJtaW5nIExFIFNlY3VyZSBDb25uZWN0aW9ucyBOdW1lcmljIENvbXBhcmlzb24uDQorICogICAgICAgICAgICAgICAgICBJZiBrZXkgdHlwZSBpcyBAcmVmIEJMRV9HQVBfQVVUSF9LRVlfVFlQRV9PT0IsIHRoZW4gYSAxNi1ieXRlIE9PQiBrZXkgdmFsdWUgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgQXV0aGVudGljYXRpb24ga2V5IHN1Y2Nlc3NmdWxseSBzZXQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9BVVRIX0tFWV9SRVBMWSwgdWludDMyX3QsIHNkX2JsZV9nYXBfYXV0aF9rZXlfcmVwbHkodWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQ4X3Qga2V5X3R5cGUsIHVpbnQ4X3QgY29uc3QgKnBfa2V5KSk7DQorDQorLyoqQGJyaWVmIFJlcGx5IHdpdGggYW4gTEUgU2VjdXJlIGNvbm5lY3Rpb25zIERIS2V5Lg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgdG8gcmVwbHkgdG8gYSBAcmVmIEJMRV9HQVBfRVZUX0xFU0NfREhLRVlfUkVRVUVTVCwgY2FsbGluZyBpdCBhdCBvdGhlciB0aW1lcyB3aWxsIHJlc3VsdCBpbiBhbiBAcmVmIE5SRl9FUlJPUl9JTlZBTElEX1NUQVRFLg0KKyAqIEBub3RlICAgIElmIHRoZSBjYWxsIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIHJlcXVlc3QgaXMgc3RpbGwgcGVuZGluZywgYW5kIHRoZSByZXBseSBjYWxsIG1heSBiZSByZXBlYXRlZCB3aXRoIGNvcnJlY3RlZCBwYXJhbWV0ZXJzLg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIGF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZXNcLCBzZWUgdGhlIGxpc3Qgb2YgZXZlbnRzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIEByZWYgc2RfYmxlX2dhcF9hdXRoZW50aWNhdGUufQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9MRVNDX1BBSVJJTkdfSldfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX05DX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19QS0VfUERfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX1BLRV9DRF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9MRVNDX0JPTkRJTkdfT09CX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX1BBSVJJTkdfSldfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0xFU0NfQk9ORElOR19OQ19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX1BLRV9QRF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX1BLRV9DRF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX09PQl9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSBwX2Roa2V5IExFIFNlY3VyZSBDb25uZWN0aW9ucyBESEtleS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBESEtleSBzdWNjZXNzZnVsbHkgc2V0Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfTEVTQ19ESEtFWV9SRVBMWSwgdWludDMyX3QsIHNkX2JsZV9nYXBfbGVzY19kaGtleV9yZXBseSh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhcF9sZXNjX2Roa2V5X3QgY29uc3QgKnBfZGhrZXkpKTsNCisNCisvKipAYnJpZWYgTm90aWZ5IHRoZSBwZWVyIG9mIGEgbG9jYWwga2V5cHJlc3MuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBhbiBhdXRoZW50aWNhdGlvbiBwcm9jZWR1cmUgdXNpbmcgTEUgU2VjdXJlIENvbm5lY3Rpb24gaXMgaW4gcHJvZ3Jlc3MuIENhbGxpbmcgaXQgYXQgb3RoZXIgdGltZXMgd2lsbCByZXN1bHQgaW4gYW4gQHJlZiBOUkZfRVJST1JfSU5WQUxJRF9TVEFURS4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9MRVNDX0JPTkRJTkdfUEtFX0NEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfUEtFX0NEX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIGtwX25vdCBTZWUgQHJlZiBCTEVfR0FQX0tQX05PVF9UWVBFUy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBLZXlwcmVzcyBub3RpZmljYXRpb24gc3VjY2Vzc2Z1bGx5IHF1ZXVlZCBmb3IgdHJhbnNtaXNzaW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4gRWl0aGVyIG5vdCBlbnRlcmluZyBhIHBhc3NrZXkgb3Iga2V5cHJlc3NlcyBoYXZlIG5vdCBiZWVuIGVuYWJsZWQgYnkgYm90aCBwZWVycy4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgVGhlIEJMRSBzdGFjayBpcyBidXN5LiBSZXRyeSBhdCBsYXRlciB0aW1lLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0tFWVBSRVNTX05PVElGWSwgdWludDMyX3QsIHNkX2JsZV9nYXBfa2V5cHJlc3Nfbm90aWZ5KHVpbnQxNl90IGNvbm5faGFuZGxlLCB1aW50OF90IGtwX25vdCkpOw0KKw0KKy8qKkBicmllZiBHZW5lcmF0ZSBhIHNldCBvZiBPT0IgZGF0YSB0byBzZW5kIHRvIGEgcGVlciBvdXQgb2YgYmFuZC4NCisgKg0KKyAqIEBub3RlICBUaGUgQHJlZiBibGVfZ2FwX2FkZHJfdCBpbmNsdWRlZCBpbiB0aGUgT09CIGRhdGEgcmV0dXJuZWQgd2lsbCBiZSB0aGUgY3VycmVudGx5IGFjdGl2ZSBvbmUgKG9yLCBpZiBhIGNvbm5lY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZCwNCisgKiAgICAgICAgdGhlIG9uZSB1c2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwKS4gVGhlIGFwcGxpY2F0aW9uIG1heSBtYW51YWxseSBvdmVyd3JpdGUgaXQgd2l0aCBhbiB1cGRhdGVkIHZhbHVlLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19PT0JfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0xFU0NfQk9ORElOR19PT0JfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIENvbm5lY3Rpb24gaGFuZGxlLiBDYW4gYmUgQkxFX0NPTk5fSEFORExFX0lOVkFMSUQgaWYgYSBCTEUgY29ubmVjdGlvbiBoYXMgbm90IGJlZW4gZXN0YWJsaXNoZWQgeWV0Lg0KKyAqIEBwYXJhbVtpbl0gcF9wa19vd24gTEUgU2VjdXJlIENvbm5lY3Rpb25zIGxvY2FsIFAtMjU2IFB1YmxpYyBLZXkuDQorICogQHBhcmFtW291dF0gcF9vb2JkX293biBUaGUgT09CIGRhdGEgdG8gYmUgc2VudCBvdXQgb2YgYmFuZCB0byBhIHBlZXIuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgT09CIGRhdGEgc3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfTEVTQ19PT0JfREFUQV9HRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2xlc2Nfb29iX2RhdGFfZ2V0KHVpbnQxNl90IGNvbm5faGFuZGxlLCBibGVfZ2FwX2xlc2NfcDI1Nl9wa190IGNvbnN0ICpwX3BrX293biwgYmxlX2dhcF9sZXNjX29vYl9kYXRhX3QgKnBfb29iZF9vd24pKTsNCisNCisvKipAYnJpZWYgUHJvdmlkZSB0aGUgT09CIGRhdGEgc2VudC9yZWNlaXZlZCBvdXQgb2YgYmFuZC4NCisgKg0KKyAqIEBub3RlICBBbiBhdXRoZW50aWNhdGlvbiBwcm9jZWR1cmUgd2l0aCBPT0Igc2VsZWN0ZWQgYXMgYW4gYWxnb3JpdGhtIG11c3QgYmUgaW4gcHJvZ3Jlc3Mgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uDQorICogQG5vdGUgIEEgQHJlZiBCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1QgZXZlbnQgd2l0aCB0aGUgb29iZF9yZXEgc2V0IHRvIDEgbXVzdCBoYXZlIGJlZW4gcmVjZWl2ZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIGF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZXNcLCBzZWUgdGhlIGxpc3Qgb2YgZXZlbnRzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIEByZWYgc2RfYmxlX2dhcF9hdXRoZW50aWNhdGUufQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9MRVNDX0JPTkRJTkdfT09CX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfT09CX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIHBfb29iZF9vd24gVGhlIE9PQiBkYXRhIHNlbnQgb3V0IG9mIGJhbmQgdG8gYSBwZWVyIG9yIE5VTEwgaWYgdGhlIHBlZXIgaGFzIG5vdCByZWNlaXZlZCBPT0IgZGF0YS4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBjb3JyZXNwb25kIHRvIEByZWYgYmxlX2dhcF9zZWNfcGFyYW1zX3Q6Om9vYiBmbGFnIGluIEByZWYgQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNULg0KKyAqIEBwYXJhbVtpbl0gcF9vb2JkX3BlZXIgVGhlIE9PQiBkYXRhIHJlY2VpdmVkIG91dCBvZiBiYW5kIGZyb20gYSBwZWVyIG9yIE5VTEwgaWYgbm9uZSByZWNlaXZlZC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgY29ycmVzcG9uZCB0byBAcmVmIGJsZV9nYXBfc2VjX3BhcmFtc190Ojpvb2IgZmxhZyBpbiBAcmVmIHNkX2JsZV9nYXBfYXV0aGVudGljYXRlIGluIHRoZSBjZW50cmFsIHJvbGUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIG9yIEByZWYgc2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5IGluIHRoZSBwZXJpcGhlcmFsIHJvbGUuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgT09CIGRhdGEgYWNjZXB0ZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0xFU0NfT09CX0RBVEFfU0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9sZXNjX29vYl9kYXRhX3NldCh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhcF9sZXNjX29vYl9kYXRhX3QgY29uc3QgKnBfb29iZF9vd24sIGJsZV9nYXBfbGVzY19vb2JfZGF0YV90IGNvbnN0ICpwX29vYmRfcGVlcikpOw0KKw0KKy8qKkBicmllZiBJbml0aWF0ZSBHQVAgRW5jcnlwdGlvbiBwcm9jZWR1cmUuDQorICoNCisgKiBAZGV0YWlscyBJbiB0aGUgY2VudHJhbCByb2xlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5pdGlhdGUgdGhlIGVuY3J5cHRpb24gcHJvY2VkdXJlIHVzaW5nIHRoZSBlbmNyeXB0aW9uIGluZm9ybWF0aW9uIHByb3ZpZGVkLg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSwgVGhlIGNvbm5lY3Rpb24gc2VjdXJpdHkgaGFzIGJlZW4gdXBkYXRlZC59DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9FTkNfQVVUSF9NVVRFWF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfRU5DX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfTVVMVElMSU5LX0NUUkxfUFJPQ19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfU0VDX1JFUV9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSBwX21hc3Rlcl9pZCBQb2ludGVyIHRvIGEgQHJlZiBibGVfZ2FwX21hc3Rlcl9pZF90IG1hc3RlciBpZGVudGlmaWNhdGlvbiBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBwX2VuY19pbmZvICBQb2ludGVyIHRvIGEgQHJlZiBibGVfZ2FwX2VuY19pbmZvX3QgZW5jcnlwdGlvbiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IGluaXRpYXRlZCBhdXRoZW50aWNhdGlvbiBwcm9jZWR1cmUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9ST0xFIE9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBQZXJpcGhlcmFsIHJvbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIFByb2NlZHVyZSBhbHJlYWR5IGluIHByb2dyZXNzIG9yIG5vdCBhbGxvd2VkIGF0IHRoaXMgdGltZSwgd2FpdCBmb3IgcGVuZGluZyBwcm9jZWR1cmVzIHRvIGNvbXBsZXRlIGFuZCByZXRyeS4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9FTkNSWVBULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9lbmNyeXB0KHVpbnQxNl90IGNvbm5faGFuZGxlLCBibGVfZ2FwX21hc3Rlcl9pZF90IGNvbnN0ICpwX21hc3Rlcl9pZCwgYmxlX2dhcF9lbmNfaW5mb190IGNvbnN0ICpwX2VuY19pbmZvKSk7DQorDQorDQorLyoqQGJyaWVmIFJlcGx5IHdpdGggR0FQIHNlY3VyaXR5IGluZm9ybWF0aW9uLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgdG8gcmVwbHkgdG8gYSBAcmVmIEJMRV9HQVBfRVZUX1NFQ19JTkZPX1JFUVVFU1QsIGNhbGxpbmcgaXQgYXQgb3RoZXIgdGltZXMgd2lsbCByZXN1bHQgaW4gQHJlZiBOUkZfRVJST1JfSU5WQUxJRF9TVEFURS4NCisgKiBAbm90ZSAgICBJZiB0aGUgY2FsbCByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHRoZSByZXF1ZXN0IGlzIHN0aWxsIHBlbmRpbmcsIGFuZCB0aGUgcmVwbHkgY2FsbCBtYXkgYmUgcmVwZWF0ZWQgd2l0aCBjb3JyZWN0ZWQgcGFyYW1ldGVycy4NCisgKiBAbm90ZSAgICBEYXRhIHNpZ25pbmcgaXMgbm90IHlldCBzdXBwb3J0ZWQsIGFuZCBwX3NpZ25faW5mbyBtdXN0IHRoZXJlZm9yZSBiZSBOVUxMLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0VOQ19NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSBwX2VuY19pbmZvIFBvaW50ZXIgdG8gYSBAcmVmIGJsZV9nYXBfZW5jX2luZm9fdCBlbmNyeXB0aW9uIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gTWF5IGJlIE5VTEwgdG8gc2lnbmFsIG5vbmUgaXMgYXZhaWxhYmxlLg0KKyAqIEBwYXJhbVtpbl0gcF9pZF9pbmZvIFBvaW50ZXIgdG8gYSBAcmVmIGJsZV9nYXBfaXJrX3QgaWRlbnRpdHkgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBNYXkgYmUgTlVMTCB0byBzaWduYWwgbm9uZSBpcyBhdmFpbGFibGUuDQorICogQHBhcmFtW2luXSBwX3NpZ25faW5mbyBQb2ludGVyIHRvIGEgQHJlZiBibGVfZ2FwX3NpZ25faW5mb190IHNpZ25pbmcgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBNYXkgYmUgTlVMTCB0byBzaWduYWwgbm9uZSBpcyBhdmFpbGFibGUuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IGFjY2VwdGVkIHNlY3VyaXR5IGluZm9ybWF0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9TRUNfSU5GT19SRVBMWSwgdWludDMyX3QsIHNkX2JsZV9nYXBfc2VjX2luZm9fcmVwbHkodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXBfZW5jX2luZm9fdCBjb25zdCAqcF9lbmNfaW5mbywgYmxlX2dhcF9pcmtfdCBjb25zdCAqcF9pZF9pbmZvLCBibGVfZ2FwX3NpZ25faW5mb190IGNvbnN0ICpwX3NpZ25faW5mbykpOw0KKw0KKw0KKy8qKkBicmllZiBHZXQgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBzZWN1cml0eS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGNvbm5faGFuZGxlIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtvdXRdIHBfY29ubl9zZWMgIFBvaW50ZXIgdG8gYSBAcmVmIGJsZV9nYXBfY29ubl9zZWNfdCBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkIGluLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIEN1cnJlbnQgY29ubmVjdGlvbiBzZWN1cml0eSBzdWNjZXNzZnVsbHkgcmV0cmlldmVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9DT05OX1NFQ19HRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2Nvbm5fc2VjX2dldCh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhcF9jb25uX3NlY190ICpwX2Nvbm5fc2VjKSk7DQorDQorDQorLyoqQGJyaWVmIFN0YXJ0IHJlcG9ydGluZyB0aGUgcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIHRvIHRoZSBhcHBsaWNhdGlvbi4NCisgKg0KKyAqICAgICAgICBBIG5ldyBldmVudCBpcyByZXBvcnRlZCB3aGVuZXZlciB0aGUgUlNTSSB2YWx1ZSBjaGFuZ2VzLCB1bnRpbCBAcmVmIHNkX2JsZV9nYXBfcnNzaV9zdG9wIGlzIGNhbGxlZC4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9SU1NJX0NIQU5HRUQsIE5ldyBSU1NJIGRhdGEgYXZhaWxhYmxlLiBIb3cgb2Z0ZW4gdGhlIGV2ZW50IGlzIGdlbmVyYXRlZCBpcw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50IG9uIHRoZSBzZXR0aW5ncyBvZiB0aGUgPGNvZGU+dGhyZXNob2xkX2RibTwvY29kZT4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8Y29kZT5za2lwX2NvdW50PC9jb2RlPiBpbnB1dCBwYXJhbWV0ZXJzLn0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX1JTU0lfUkVBRF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1JTU0lfRklMVF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgICAgICAgIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtpbl0gdGhyZXNob2xkX2RibSAgICAgIE1pbmltdW0gY2hhbmdlIGluIGRCbSBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgQHJlZiBCTEVfR0FQX0VWVF9SU1NJX0NIQU5HRUQgZXZlbnQuIEV2ZW50cyBhcmUgZGlzYWJsZWQgaWYgdGhyZXNob2xkX2RibSBlcXVhbHMgQHJlZiBCTEVfR0FQX1JTU0lfVEhSRVNIT0xEX0lOVkFMSUQuDQorICogQHBhcmFtW2luXSBza2lwX2NvdW50ICAgICAgICAgTnVtYmVyIG9mIFJTU0kgc2FtcGxlcyB3aXRoIGEgY2hhbmdlIG9mIHRocmVzaG9sZF9kYm0gb3IgbW9yZSBiZWZvcmUgc2VuZGluZyBhIG5ldyBAcmVmIEJMRV9HQVBfRVZUX1JTU0lfQ0hBTkdFRCBldmVudC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgYWN0aXZhdGVkIFJTU0kgcmVwb3J0aW5nLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSAgICAgICBEaXNjb25uZWN0aW9uIGluIHByb2dyZXNzLiBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX1JTU0lfU1RBUlQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX3Jzc2lfc3RhcnQodWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQ4X3QgdGhyZXNob2xkX2RibSwgdWludDhfdCBza2lwX2NvdW50KSk7DQorDQorDQorLyoqQGJyaWVmIFN0b3AgcmVwb3J0aW5nIHRoZSByZWNlaXZlZCBzaWduYWwgc3RyZW5ndGguDQorICoNCisgKiBAbm90ZSAgQW4gUlNTSSBjaGFuZ2UgZGV0ZWN0ZWQgYmVmb3JlIHRoZSBjYWxsIGJ1dCBub3QgeWV0IHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvbg0KKyAqICAgICAgICBtYXkgYmUgcmVwb3J0ZWQgYWZ0ZXIgQHJlZiBzZF9ibGVfZ2FwX3Jzc2lfc3RvcCBoYXMgYmVlbiBjYWxsZWQuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX1JTU0lfUkVBRF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1JTU0lfRklMVF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgQ29ubmVjdGlvbiBoYW5kbGUuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGRlYWN0aXZhdGVkIFJTU0kgcmVwb3J0aW5nLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSAgICAgICBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX1JTU0lfU1RPUCwgdWludDMyX3QsIHNkX2JsZV9nYXBfcnNzaV9zdG9wKHVpbnQxNl90IGNvbm5faGFuZGxlKSk7DQorDQorDQorLyoqQGJyaWVmIEdldCB0aGUgcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIGZvciB0aGUgbGFzdCBjb25uZWN0aW9uIGV2ZW50Lg0KKyAqDQorICogICAgICAgIEByZWYgc2RfYmxlX2dhcF9yc3NpX3N0YXJ0IG11c3QgYmUgY2FsbGVkIHRvIHN0YXJ0IHJlcG9ydGluZyBSU1NJIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLiBAcmVmIE5SRl9FUlJPUl9OT1RfRk9VTkQNCisgKiAgICAgICAgd2lsbCBiZSByZXR1cm5lZCB1bnRpbCBSU1NJIHdhcyBzYW1wbGVkIGZvciB0aGUgZmlyc3QgdGltZSBhZnRlciBjYWxsaW5nIEByZWYgc2RfYmxlX2dhcF9yc3NpX3N0YXJ0Lg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9SU1NJX1JFQURfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dICBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1bb3V0XSBwX3Jzc2kgICAgICBQb2ludGVyIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgUlNTSSBtZWFzdXJlbWVudCBzaGFsbCBiZSBzdG9yZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJlYWQgdGhlIFJTU0kuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfRk9VTkQgICAgICAgICAgIE5vIHNhbXBsZSBpcyBhdmFpbGFibGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgICAgICAgIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgICAgICAgUlNTSSByZXBvcnRpbmcgaXMgbm90IG9uZ29pbmcsIG9yIGRpc2Nvbm5lY3Rpb24gaW4gcHJvZ3Jlc3MuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfUlNTSV9HRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX3Jzc2lfZ2V0KHVpbnQxNl90IGNvbm5faGFuZGxlLCBpbnQ4X3QgKnBfcnNzaSkpOw0KKw0KKw0KKy8qKkBicmllZiBTdGFydCBzY2FubmluZyAoR0FQIERpc2NvdmVyeSBwcm9jZWR1cmUsIE9ic2VydmVyIFByb2NlZHVyZSkuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfQURWX1JFUE9SVCwgQW4gYWR2ZXJ0aXNpbmcgb3Igc2NhbiByZXNwb25zZSBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2ZWQufQ0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX1RJTUVPVVQsIFNjYW5uZXIgaGFzIHRpbWVkIG91dC59DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfU0NBTl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1dMX1NIQVJFX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBwX3NjYW5fcGFyYW1zIFBvaW50ZXIgdG8gc2NhbiBwYXJhbWV0ZXJzIHN0cnVjdHVyZS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgaW5pdGlhdGVkIHNjYW5uaW5nIHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBUaGUgc3RhY2sgaXMgYnVzeSwgcHJvY2VzcyBwZW5kaW5nIGV2ZW50cyBhbmQgcmV0cnkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9SRVNPVVJDRVMgTm90IGVub3VnaCBCTEUgcm9sZSBzbG90cyBhdmFpbGFibGUuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcCBvbmUgb3IgbW9yZSBjdXJyZW50bHkgYWN0aXZlIHJvbGVzIChDZW50cmFsLCBQZXJpcGhlcmFsIG9yIEJyb2FkY2FzdGVyKSBhbmQgdHJ5IGFnYWluDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfU0NBTl9TVEFSVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfc2Nhbl9zdGFydChibGVfZ2FwX3NjYW5fcGFyYW1zX3QgY29uc3QgKnBfc2Nhbl9wYXJhbXMpKTsNCisNCisNCisvKipAYnJpZWYgU3RvcCBzY2FubmluZyAoR0FQIERpc2NvdmVyeSBwcm9jZWR1cmUsIE9ic2VydmVyIFByb2NlZHVyZSkuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9TQ0FOX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfV0xfU0hBUkVfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHN0b3BwZWQgc2Nhbm5pbmcgcHJvY2VkdXJlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uIChtb3N0IHByb2JhYmx5IG5vdCBpbiBzY2FubmluZyBzdGF0ZSkuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfU0NBTl9TVE9QLCB1aW50MzJfdCwgc2RfYmxlX2dhcF9zY2FuX3N0b3Aodm9pZCkpOw0KKw0KKw0KKy8qKkBicmllZiBDcmVhdGUgYSBjb25uZWN0aW9uIChHQVAgTGluayBFc3RhYmxpc2htZW50KS4NCisgKg0KKyAqIEBub3RlIElmIGEgc2Nhbm5pbmcgcHJvY2VkdXJlIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcyBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RvcHBlZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4NCisgKiAgICAgICBUaGUgc2Nhbm5pbmcgcHJvY2VkdXJlIHdpbGwgYmUgc3RvcHBlZCBldmVuIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfV0xfU0hBUkVfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0NPTk5fUFJJVl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfQ09OTl9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9wZWVyX2FkZHIgICBQb2ludGVyIHRvIHBlZXIgYWRkcmVzcy4gSWYgdGhlIHVzZV93aGl0ZWxpc3QgYml0IGlzIHNldCBpbiBAcmVmIGJsZV9nYXBfc2Nhbl9wYXJhbXNfdCwgdGhlbiB0aGlzIGlzIGlnbm9yZWQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIElmIEByZWYgYmxlX2dhcF9hZGRyX3Q6OmFkZHJfaWRfcGVlciBpcyBzZXQgdGhlbiBwX3BlZXJfYWRkciBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIGRldmljZSBpZGVudGl0eSBsaXN0DQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBAcmVmIHNkX2JsZV9nYXBfZGV2aWNlX2lkZW50aXRpZXNfc2V0Lg0KKyAqIEBwYXJhbVtpbl0gcF9zY2FuX3BhcmFtcyBQb2ludGVyIHRvIHNjYW4gcGFyYW1ldGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBwX2Nvbm5fcGFyYW1zIFBvaW50ZXIgdG8gZGVzaXJlZCBjb25uZWN0aW9uIHBhcmFtZXRlcnMuDQorICogQHBhcmFtW2luXSBjb25uX2NmZ190YWcgIFRhZyBpZGVudGlmeWluZyBhIGNvbmZpZ3VyYXRpb24gc2V0IGJ5IEByZWYgc2RfYmxlX2NmZ19zZXQgb3IgQHJlZg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBCTEVfQ09OTl9DRkdfVEFHX0RFRkFVTFQgdG8gdXNlIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgaW5pdGlhdGVkIGNvbm5lY3Rpb24gcHJvY2VkdXJlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcGFyYW1ldGVyKHMpIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgcGFyYW1ldGVyKHMpIGluIHBfc2Nhbl9wYXJhbXMgb3IgcF9jb25uX3BhcmFtcy4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBVc2Ugb2Ygd2hpdGVsaXN0IHJlcXVlc3RlZCBidXQgd2hpdGVsaXN0IGhhcyBub3QgYmVlbiBzZXQsIHNlZSBAcmVmIHNkX2JsZV9nYXBfd2hpdGVsaXN0X3NldC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBQZWVyIGFkZHJlc3Mgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBkZXZpY2UgaWRlbnRpdHkgbGlzdCwgc2VlIEByZWYgc2RfYmxlX2dhcF9kZXZpY2VfaWRlbnRpdGllc19zZXQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIFRoZSBTb2Z0RGV2aWNlIGlzIGluIGFuIGludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbi4gVGhpcyBtYXkgYmUgZHVlIHRvIGFuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIGxvY2FsbHkgaW5pdGlhdGVkIGNvbm5lY3QgcHJvY2VkdXJlLCB3aGljaCBtdXN0IGNvbXBsZXRlIGJlZm9yZSBpbml0aWF0aW5nIGFnYWluLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfR0FQX0lOVkFMSURfQkxFX0FERFIgSW52YWxpZCBQZWVyIGFkZHJlc3MuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9DT05OX0NPVU5UIFRoZSBsaW1pdCBvZiBhdmFpbGFibGUgY29ubmVjdGlvbnMgaGFzIGJlZW4gcmVhY2hlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgVGhlIHN0YWNrIGlzIGJ1c3ksIHByb2Nlc3MgcGVuZGluZyBldmVudHMgYW5kIHJldHJ5LiBJZiBhbm90aGVyIGNvbm5lY3Rpb24gaXMgYmVpbmcgZXN0YWJsaXNoZWQNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgQHJlZiBCTEVfR0FQX0VWVF9DT05ORUNURUQgZXZlbnQgYmVmb3JlIGNhbGxpbmcgYWdhaW4uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9SRVNPVVJDRVMgTm90IGVub3VnaCBCTEUgcm9sZSBzbG90cyBhdmFpbGFibGUuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcCBvbmUgb3IgbW9yZSBjdXJyZW50bHkgYWN0aXZlIHJvbGVzIChDZW50cmFsLCBQZXJpcGhlcmFsIG9yIEJyb2FkY2FzdGVyKSBhbmQgdHJ5IGFnYWluDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfQ09OTkVDVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfY29ubmVjdChibGVfZ2FwX2FkZHJfdCBjb25zdCAqcF9wZWVyX2FkZHIsIGJsZV9nYXBfc2Nhbl9wYXJhbXNfdCBjb25zdCAqcF9zY2FuX3BhcmFtcywgYmxlX2dhcF9jb25uX3BhcmFtc190IGNvbnN0ICpwX2Nvbm5fcGFyYW1zLCB1aW50OF90IGNvbm5fY2ZnX3RhZykpOw0KKw0KKw0KKy8qKkBicmllZiBDYW5jZWwgYSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0NPTk5fTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IGNhbmNlbGVkIGFuIG9uZ29pbmcgY29ubmVjdGlvbiBwcm9jZWR1cmUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24uDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfQ09OTkVDVF9DQU5DRUwsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2Nvbm5lY3RfY2FuY2VsKHZvaWQpKTsNCisNCisNCisvKipAYnJpZWYgUEhZIFVwZGF0ZSBSZXF1ZXN0DQorICoNCisgKiBAZGV0YWlscyAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXF1ZXN0IGEgbmV3IFBIWSBjb25maWd1cmF0aW9uIGZvciBhIGNlbnRyYWwgb3IgYSBwZXJpcGhlcmFsIGNvbm5lY3Rpb24uIEl0IHdpbGwgYWx3YXlzIGdlbmVyYXRlIGENCisgKiAgICAgICAgICAgIEByZWYgQkxFX0dBUF9FVlRfUEhZX1VQREFURSBldmVudCBpZiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIElmIEByZWYgYmxlX2dhcF9waHlzX3Q6OnR4X3BoeXMgb3IgQHJlZiBibGVfZ2FwX3BoeXNfdDo6cnhfcGh5cw0KKyAqICAgICAgICAgICAgaXMgMCwgdGhlbiB0aGUgc3RhY2sgd2lsbCBzZWxlY3QgUEhZcyBiYXNlZCBvbiB0aGUgcGVlciByZXF1aXJlbWVudHMgb24gdGhhdCBzcGVjaWZpYyBkaXJlY3Rpb24uIElmIHRoZSBwZWVyIGRvZXMgbm90IHN1cHBvcnQNCisgKiAgICAgICAgICAgIHRoZSBQSFkgVXBkYXRlIHByb2NlZHVyZSwgdGhlbiB0aGUgcmVzdWx0aW5nIEByZWYgQkxFX0dBUF9FVlRfUEhZX1VQREFURSBldmVudCB3aWxsIGhhdmUgYSBzdGF0dXMgZGlmZmVyZW50IGZyb20gDQorICogICAgICAgICAgICBAcmVmIEJMRV9IQ0lfU1RBVFVTX0NPREVfU1VDQ0VTUy4NCisgKg0KKyAqIEBub3RlICAgICAgVGhlIHJlcXVlc3RlZCBQSFlzIGRvZXMgbm90IGhhdmUgdG8gYmUgd2l0aGluIHRoZSBzZXQgb2YgdGhlIHByZWZlcnJlZCBQSFlzLg0KKyAqDQorICogQG5vdGUgICAgICBJZiB0aGUgQHJlZiBibGVfZ2FwX29wdF9wcmVmZXJyZWRfcGh5c190IGhhdmUgbm90IGJlZW4gY29uZmlndXJlZCB3aXRoIEByZWYgQkxFX0dBUF9QSFlfQ09ERUQsIHRoZW4gdGhpcyBjYWxsIG1pZ2h0IHJldHVybg0KKyAqICAgICAgICAgICAgQHJlZiBCTEVfRVJST1JfQkxPQ0tFRF9CWV9PVEhFUl9MSU5LUyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZGV2aWNlcyBjb25uZWN0ZWQuDQorICoNCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9QSFlfVVBEQVRFLCBSZXN1bHQgb2YgdGhlIFBIWSBVcGRhdGUgcHJvY2VkdXJlIHByb2NlZHVyZS59DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9QSFlfUkVRVUVTVH0NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIRVJBTF9QSFlfUkVRVUVTVH0NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSAgIENvbm5lY3Rpb24gaGFuZGxlIHRvIGluZGljYXRlIHRoZSBjb25uZWN0aW9uIGZvciB3aGljaCB0aGUgUEhZIFVwZGF0ZSBpcyByZXF1ZXN0ZWQuDQorICogQHBhcmFtW2luXSBwX2dhcF9waHlzICAgIFBvaW50ZXIgdG8gUEhZIHN0cnVjdHVyZS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgcmVxdWVzdGVkIGEgUEhZIFVwZGF0ZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIFVuc3VwcG9ydGVkIFBIWXMgc3VwcGxpZWQgdG8gdGhlIGNhbGwuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9CTE9DS0VEX0JZX09USEVSX0xJTktTIE90aGVyIGNvbm5lY3Rpb25zIG1heSBibG9jayB0aGUgc2NoZWR1bGluZyBvZiB0aGUgY3VycmVudCBsaW5rLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBQcm9jZWR1cmUgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyBvciBub3QgYWxsb3dlZCBhdCB0aGlzIHRpbWUuIFByb2Nlc3MgcGVuZGluZyBldmVudHMgYW5kIHdhaXQgZm9yIHRoZSBwZW5kaW5nIHByb2NlZHVyZSB0byBjb21wbGV0ZSBhbmQgcmV0cnkuDQorICoNCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9QSFlfUkVRVUVTVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfcGh5X3JlcXVlc3QodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXBfcGh5c190IGNvbnN0ICpwX2dhcF9waHlzKSk7DQorDQorLyoqQGJyaWVmIEluaXRpYXRlIG9yIHJlc3BvbmQgdG8gYSBEYXRhIExlbmd0aCBVcGRhdGUgUHJvY2VkdXJlLg0KKyAqDQorICogQG5vdGUgT25seSBzeW1tZXRyaWMgaW5wdXQgcGFyYW1ldGVycyBmb3IgdGhlIERhdGEgTGVuZ3RoIFVwZGF0ZSBpcyBzdXBwb3J0ZWQuIE9ubHkgQHJlZg0KKyAqICAgICAgIEJMRV9HQVBfREFUQV9MRU5HVEhfQVVUTyBmb3IgbWF4X3R4X3RpbWVfdXMgYW5kIG1heF9yeF90aW1lX3VzIGlzIHN1cHBvcnRlZC4NCisgKg0KKyAqIEBub3RlIElmIHRoZSBhcHBsaWNhdGlvbiB1c2VzIEByZWYgQkxFX0dBUF9EQVRBX0xFTkdUSF9BVVRPIGZvciBvbmUgb3IgbW9yZSBtZW1iZXJzIG9mDQorICogICAgICAgcF9kbF9wYXJhbXMsIHRoZSBTb2Z0RGV2aWNlIHdpbGwgY2hvb3NlIHRoZSBoaWdoZXN0IHZhbHVlIHN1cHBvcnRlZCBpbiBjdXJyZW50DQorICogICAgICAgY29uZmlndXJhdGlvbiBhbmQgY29ubmVjdGlvbiBwYXJhbWV0ZXJzLg0KKyAqDQorICogQHBhcmFtW2luXSAgIGNvbm5faGFuZGxlICAgICAgIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtpbl0gICBwX2RsX3BhcmFtcyAgICAgICBQb2ludGVyIHRvIGxvY2FsIHBhcmFtZXRlcnMgdG8gYmUgdXNlZCBpbiBEYXRhIExlbmd0aCBVcGRhdGUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VkdXJlLiBTZXQgYW55IG1lbWJlciB0byBAcmVmIEJMRV9HQVBfREFUQV9MRU5HVEhfQVVUTyB0byBsZXQNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFNvZnREZXZpY2UgYXV0b21hdGljYWxseSBkZWNpZGUgdGhlIHZhbHVlIGZvciB0aGF0IG1lbWJlci4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRvIE5VTEwgdG8gdXNlIGF1dG9tYXRpYyB2YWx1ZXMgZm9yIGFsbCBtZW1iZXJzLg0KKyAqIEBwYXJhbVtvdXRdICBwX2RsX2xpbWl0YXRpb24gICBQb2ludGVyIHRvIGxpbWl0YXRpb24gdG8gYmUgd3JpdHRlbiB3aGVuIGxvY2FsIGRldmljZSBkb2VzIG5vdA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGVub3VnaCByZXNvdXJjZXMgdG8gYWNjb21tb2RhdGUgdGhlIHJlcXVlc3RlZCBEYXRhIExlbmd0aA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcGRhdGUgcGFyYW1ldGVycy4gSWdub3JlZCBpZiBOVUxMLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfREFUQV9MRU5HVEhfVVBEQVRFX1BST0NFRFVSRV9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc2V0IERhdGEgTGVuZ3RoIEV4dGVuc2lvbiBpbml0aWF0aW9uL3Jlc3BvbnNlIHBhcmFtZXRlcnMuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHBhcmFtZXRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXJzIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX1NVUFBPUlRFRCBUaGUgcmVxdWVzdGVkIHBhcmFtZXRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFNvZnREZXZpY2UuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9SRVNPVVJDRVMgVGhlIHJlcXVlc3RlZCBwYXJhbWV0ZXJzIGNhbiBub3QgYmUgYWNjb21tb2RhdGVkLiBJbnNwZWN0DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9kbF9saW1pdGF0aW9uIHNvIHNlZSB3aGVyZSB0aGUgbGltaXRhdGlvbiBpcy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgUGVlciBoYXMgYWxyZWFkeSBpbml0aWF0ZWQgYSBEYXRhIExlbmd0aCBVcGRhdGUgUHJvY2VkdXJlLiBQcm9jZXNzIHRoZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nIEByZWYgQkxFX0dBUF9FVlRfREFUQV9MRU5HVEhfVVBEQVRFX1JFUVVFU1QgZXZlbnQgdG8gcmVzcG9uZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9EQVRBX0xFTkdUSF9VUERBVEUsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2RhdGFfbGVuZ3RoX3VwZGF0ZSh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhcF9kYXRhX2xlbmd0aF9wYXJhbXNfdCBjb25zdCAqcF9kbF9wYXJhbXMsIGJsZV9nYXBfZGF0YV9sZW5ndGhfbGltaXRhdGlvbl90ICpwX2RsX2xpbWl0YXRpb24pKTsNCisNCisNCisNCisvKiogQH0gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8vIEJMRV9HQVBfSF9fDQorDQorLyoqDQorICBAfQ0KKyovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfZ2F0dC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfZ2F0dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNGRkZWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXR0LmgKQEAgLTAsMCArMSwyMjEgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyDQorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMNCisgKiAgIFNlbWljb25kdWN0b3IgQVNBLCBvciBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgYSB0aGlyZCBwYXJ0eSB0aGF0DQorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorLyoqDQorICBAYWRkdG9ncm91cCBCTEVfR0FUVCBHZW5lcmljIEF0dHJpYnV0ZSBQcm9maWxlIChHQVRUKSBDb21tb24NCisgIEB7DQorICBAYnJpZWYgIENvbW1vbiBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEdBVFQgaW50ZXJmYWNlcy4NCisgKi8NCisNCisjaWZuZGVmIEJMRV9HQVRUX0hfXw0KKyNkZWZpbmUgQkxFX0dBVFRfSF9fDQorDQorI2luY2x1ZGUgImJsZV90eXBlcy5oIg0KKyNpbmNsdWRlICJibGVfcmFuZ2VzLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9HQVRUX0RFRklORVMgRGVmaW5lcw0KKyAqIEB7ICovDQorDQorLyoqIEBicmllZiBEZWZhdWx0IEFUVCBNVFUsIGluIGJ5dGVzLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQVRUX01UVV9ERUZBVUxUICAgICAgICAgIDIzDQorDQorLyoqQGJyaWVmIEludmFsaWQgQXR0cmlidXRlIEhhbmRsZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0hBTkRMRV9JTlZBTElEICAgICAgICAgICAgMHgwMDAwDQorDQorLyoqQGJyaWVmIEZpcnN0IEF0dHJpYnV0ZSBIYW5kbGUuICovDQorI2RlZmluZSBCTEVfR0FUVF9IQU5ETEVfU1RBUlQgICAgICAgICAgICAgIDB4MDAwMQ0KKw0KKy8qKkBicmllZiBMYXN0IEF0dHJpYnV0ZSBIYW5kbGUuICovDQorI2RlZmluZSBCTEVfR0FUVF9IQU5ETEVfRU5EICAgICAgICAgICAgICAgIDB4RkZGRg0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRfVElNRU9VVF9TT1VSQ0VTIEdBVFQgVGltZW91dCBzb3VyY2VzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVRUX1RJTUVPVVRfU1JDX1BST1RPQ09MICAgICAgMHgwMCAgLyoqPCBBVFQgUHJvdG9jb2wgdGltZW91dC4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9HQVRUX1dSSVRFX09QUyBHQVRUIFdyaXRlIG9wZXJhdGlvbnMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfT1BfSU5WQUxJRCAgICAgICAgICAgICAgICAweDAwICAvKio8IEludmFsaWQgT3BlcmF0aW9uLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfT1BfV1JJVEVfUkVRICAgICAgICAgICAgICAweDAxICAvKio8IFdyaXRlIFJlcXVlc3QuICovDQorI2RlZmluZSBCTEVfR0FUVF9PUF9XUklURV9DTUQgICAgICAgICAgICAgIDB4MDIgIC8qKjwgV3JpdGUgQ29tbWFuZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX09QX1NJR05fV1JJVEVfQ01EICAgICAgICAgMHgwMyAgLyoqPCBTaWduZWQgV3JpdGUgQ29tbWFuZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX09QX1BSRVBfV1JJVEVfUkVRICAgICAgICAgMHgwNCAgLyoqPCBQcmVwYXJlIFdyaXRlIFJlcXVlc3QuICovDQorI2RlZmluZSBCTEVfR0FUVF9PUF9FWEVDX1dSSVRFX1JFUSAgICAgICAgIDB4MDUgIC8qKjwgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0LiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRfRVhFQ19XUklURV9GTEFHUyBHQVRUIEV4ZWN1dGUgV3JpdGUgZmxhZ3MNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfRVhFQ19XUklURV9GTEFHX1BSRVBBUkVEX0NBTkNFTCAweDAwICAgLyoqPCBDYW5jZWwgcHJlcGFyZWQgd3JpdGUuICovDQorI2RlZmluZSBCTEVfR0FUVF9FWEVDX1dSSVRFX0ZMQUdfUFJFUEFSRURfV1JJVEUgIDB4MDEgICAvKio8IEV4ZWN1dGUgcHJlcGFyZWQgd3JpdGUuICovDQorLyoqIEB9ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVF9IVlhfVFlQRVMgR0FUVCBIYW5kbGUgVmFsdWUgb3BlcmF0aW9ucw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FUVF9IVlhfSU5WQUxJRCAgICAgICAgICAgICAgIDB4MDAgIC8qKjwgSW52YWxpZCBPcGVyYXRpb24uICovDQorI2RlZmluZSBCTEVfR0FUVF9IVlhfTk9USUZJQ0FUSU9OICAgICAgICAgIDB4MDEgIC8qKjwgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbi4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0hWWF9JTkRJQ0FUSU9OICAgICAgICAgICAgMHgwMiAgLyoqPCBIYW5kbGUgVmFsdWUgSW5kaWNhdGlvbi4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9HQVRUX1NUQVRVU19DT0RFUyBHQVRUIFN0YXR1cyBDb2Rlcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMCAgLyoqPCBTdWNjZXNzLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX1VOS05PV04gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qKjwgVW5rbm93biBvciBub3QgYXBwbGljYWJsZSBzdGF0dXMuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyoqPCBBVFQgRXJyb3I6IEludmFsaWQgRXJyb3IgQ29kZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfSU5WQUxJRF9IQU5ETEUgICAgICAgICAgICAgMHgwMTAxICAvKio8IEFUVCBFcnJvcjogSW52YWxpZCBBdHRyaWJ1dGUgSGFuZGxlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9SRUFEX05PVF9QRVJNSVRURUQgICAgICAgICAweDAxMDIgIC8qKjwgQVRUIEVycm9yOiBSZWFkIG5vdCBwZXJtaXR0ZWQuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX1dSSVRFX05PVF9QRVJNSVRURUQgICAgICAgIDB4MDEwMyAgLyoqPCBBVFQgRXJyb3I6IFdyaXRlIG5vdCBwZXJtaXR0ZWQuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX0lOVkFMSURfUERVICAgICAgICAgICAgICAgIDB4MDEwNCAgLyoqPCBBVFQgRXJyb3I6IFVzZWQgaW4gQVRUIGFzIEludmFsaWQgUERVLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9JTlNVRl9BVVRIRU5USUNBVElPTiAgICAgICAweDAxMDUgIC8qKjwgQVRUIEVycm9yOiBBdXRoZW50aWNhdGVkIGxpbmsgcmVxdWlyZWQuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX1JFUVVFU1RfTk9UX1NVUFBPUlRFRCAgICAgIDB4MDEwNiAgLyoqPCBBVFQgRXJyb3I6IFVzZWQgaW4gQVRUIGFzIFJlcXVlc3QgTm90IFN1cHBvcnRlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfSU5WQUxJRF9PRkZTRVQgICAgICAgICAgICAgMHgwMTA3ICAvKio8IEFUVCBFcnJvcjogT2Zmc2V0IHNwZWNpZmllZCB3YXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBhdHRyaWJ1dGUuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX0lOU1VGX0FVVEhPUklaQVRJT04gICAgICAgIDB4MDEwOCAgLyoqPCBBVFQgRXJyb3I6IFVzZWQgaW4gQVRUIGFzIEluc3VmZmljaWVudCBBdXRob3JpemF0aW9uLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9QUkVQQVJFX1FVRVVFX0ZVTEwgICAgICAgICAweDAxMDkgIC8qKjwgQVRUIEVycm9yOiBVc2VkIGluIEFUVCBhcyBQcmVwYXJlIFF1ZXVlIEZ1bGwuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX0FUVFJJQlVURV9OT1RfRk9VTkQgICAgICAgIDB4MDEwQSAgLyoqPCBBVFQgRXJyb3I6IFVzZWQgaW4gQVRUIGFzIEF0dHJpYnV0ZSBub3QgZm91bmQuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX0FUVFJJQlVURV9OT1RfTE9ORyAgICAgICAgIDB4MDEwQiAgLyoqPCBBVFQgRXJyb3I6IEF0dHJpYnV0ZSBjYW5ub3QgYmUgcmVhZCBvciB3cml0dGVuIHVzaW5nIHJlYWQvd3JpdGUgYmxvYiByZXF1ZXN0cy4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfSU5TVUZfRU5DX0tFWV9TSVpFICAgICAgICAgMHgwMTBDICAvKio8IEFUVCBFcnJvcjogRW5jcnlwdGlvbiBrZXkgc2l6ZSB1c2VkIGlzIGluc3VmZmljaWVudC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfSU5WQUxJRF9BVFRfVkFMX0xFTkdUSCAgICAgMHgwMTBEICAvKio8IEFUVCBFcnJvcjogSW52YWxpZCB2YWx1ZSBzaXplLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9VTkxJS0VMWV9FUlJPUiAgICAgICAgICAgICAweDAxMEUgIC8qKjwgQVRUIEVycm9yOiBWZXJ5IHVubGlrZWx5IGVycm9yLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9JTlNVRl9FTkNSWVBUSU9OICAgICAgICAgICAweDAxMEYgIC8qKjwgQVRUIEVycm9yOiBFbmNyeXB0ZWQgbGluayByZXF1aXJlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfVU5TVVBQT1JURURfR1JPVVBfVFlQRSAgICAgMHgwMTEwICAvKio8IEFUVCBFcnJvcjogQXR0cmlidXRlIHR5cGUgaXMgbm90IGEgc3VwcG9ydGVkIGdyb3VwaW5nIGF0dHJpYnV0ZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfSU5TVUZfUkVTT1VSQ0VTICAgICAgICAgICAgMHgwMTExICAvKio8IEFUVCBFcnJvcjogRW5jcnlwdGVkIGxpbmsgcmVxdWlyZWQuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX1JGVV9SQU5HRTFfQkVHSU4gICAgICAgICAgIDB4MDExMiAgLyoqPCBBVFQgRXJyb3I6IFJlc2VydmVkIGZvciBGdXR1cmUgVXNlIHJhbmdlICMxIGJlZ2luLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9SRlVfUkFOR0UxX0VORCAgICAgICAgICAgICAweDAxN0YgIC8qKjwgQVRUIEVycm9yOiBSZXNlcnZlZCBmb3IgRnV0dXJlIFVzZSByYW5nZSAjMSBlbmQuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX0FQUF9CRUdJTiAgICAgICAgICAgICAgICAgIDB4MDE4MCAgLyoqPCBBVFQgRXJyb3I6IEFwcGxpY2F0aW9uIHJhbmdlIGJlZ2luLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9BUFBfRU5EICAgICAgICAgICAgICAgICAgICAweDAxOUYgIC8qKjwgQVRUIEVycm9yOiBBcHBsaWNhdGlvbiByYW5nZSBlbmQuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX1JGVV9SQU5HRTJfQkVHSU4gICAgICAgICAgIDB4MDFBMCAgLyoqPCBBVFQgRXJyb3I6IFJlc2VydmVkIGZvciBGdXR1cmUgVXNlIHJhbmdlICMyIGJlZ2luLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9SRlVfUkFOR0UyX0VORCAgICAgICAgICAgICAweDAxREYgIC8qKjwgQVRUIEVycm9yOiBSZXNlcnZlZCBmb3IgRnV0dXJlIFVzZSByYW5nZSAjMiBlbmQuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX1JGVV9SQU5HRTNfQkVHSU4gICAgICAgICAgIDB4MDFFMCAgLyoqPCBBVFQgRXJyb3I6IFJlc2VydmVkIGZvciBGdXR1cmUgVXNlIHJhbmdlICMzIGJlZ2luLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9SRlVfUkFOR0UzX0VORCAgICAgICAgICAgICAweDAxRkMgIC8qKjwgQVRUIEVycm9yOiBSZXNlcnZlZCBmb3IgRnV0dXJlIFVzZSByYW5nZSAjMyBlbmQuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX0NQU19DQ0NEX0NPTkZJR19FUlJPUiAgICAgIDB4MDFGRCAgLyoqPCBBVFQgQ29tbW9uIFByb2ZpbGUgYW5kIFNlcnZpY2UgRXJyb3I6IENsaWVudCBDaGFyYWN0ZXJpc3RpYyBDb25maWd1cmF0aW9uIERlc2NyaXB0b3IgaW1wcm9wZXJseSBjb25maWd1cmVkLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9DUFNfUFJPQ19BTFJfSU5fUFJPRyAgICAgICAweDAxRkUgIC8qKjwgQVRUIENvbW1vbiBQcm9maWxlIGFuZCBTZXJ2aWNlIEVycm9yOiBQcm9jZWR1cmUgQWxyZWFkeSBpbiBQcm9ncmVzcy4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfQ1BTX09VVF9PRl9SQU5HRSAgICAgICAgICAgMHgwMUZGICAvKio8IEFUVCBDb21tb24gUHJvZmlsZSBhbmQgU2VydmljZSBFcnJvcjogT3V0IE9mIFJhbmdlLiAqLw0KKy8qKiBAfSAqLw0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRfQ1BGX0ZPUk1BVFMgQ2hhcmFjdGVyaXN0aWMgUHJlc2VudGF0aW9uIEZvcm1hdHMNCisgKiAgQG5vdGUgRm91bmQgYXQgaHR0cDovL2RldmVsb3Blci5ibHVldG9vdGgub3JnL2dhdHQvZGVzY3JpcHRvcnMvUGFnZXMvRGVzY3JpcHRvclZpZXdlci5hc3B4P3U9b3JnLmJsdWV0b290aC5kZXNjcmlwdG9yLmdhdHQuY2hhcmFjdGVyaXN0aWNfcHJlc2VudGF0aW9uX2Zvcm1hdC54bWwNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9SRlUgICAgICAgICAgICAgICAgIDB4MDAgLyoqPCBSZXNlcnZlZCBGb3IgRnV0dXJlIFVzZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfQk9PTEVBTiAgICAgICAgICAgICAweDAxIC8qKjwgQm9vbGVhbi4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfMkJJVCAgICAgICAgICAgICAgICAweDAyIC8qKjwgVW5zaWduZWQgMi1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfTklCQkxFICAgICAgICAgICAgICAweDAzIC8qKjwgVW5zaWduZWQgNC1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfVUlOVDggICAgICAgICAgICAgICAweDA0IC8qKjwgVW5zaWduZWQgOC1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfVUlOVDEyICAgICAgICAgICAgICAweDA1IC8qKjwgVW5zaWduZWQgMTItYml0IGludGVnZXIuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1VJTlQxNiAgICAgICAgICAgICAgMHgwNiAvKio8IFVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9VSU5UMjQgICAgICAgICAgICAgIDB4MDcgLyoqPCBVbnNpZ25lZCAyNC1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfVUlOVDMyICAgICAgICAgICAgICAweDA4IC8qKjwgVW5zaWduZWQgMzItYml0IGludGVnZXIuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1VJTlQ0OCAgICAgICAgICAgICAgMHgwOSAvKio8IFVuc2lnbmVkIDQ4LWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9VSU5UNjQgICAgICAgICAgICAgIDB4MEEgLyoqPCBVbnNpZ25lZCA2NC1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfVUlOVDEyOCAgICAgICAgICAgICAweDBCIC8qKjwgVW5zaWduZWQgMTI4LWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9TSU5UOCAgICAgICAgICAgICAgIDB4MEMgLyoqPCBTaWduZWQgMi1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfU0lOVDEyICAgICAgICAgICAgICAweDBEIC8qKjwgU2lnbmVkIDEyLWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9TSU5UMTYgICAgICAgICAgICAgIDB4MEUgLyoqPCBTaWduZWQgMTYtYml0IGludGVnZXIuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1NJTlQyNCAgICAgICAgICAgICAgMHgwRiAvKio8IFNpZ25lZCAyNC1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfU0lOVDMyICAgICAgICAgICAgICAweDEwIC8qKjwgU2lnbmVkIDMyLWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9TSU5UNDggICAgICAgICAgICAgIDB4MTEgLyoqPCBTaWduZWQgNDgtYml0IGludGVnZXIuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1NJTlQ2NCAgICAgICAgICAgICAgMHgxMiAvKio8IFNpZ25lZCA2NC1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfU0lOVDEyOCAgICAgICAgICAgICAweDEzIC8qKjwgU2lnbmVkIDEyOC1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfRkxPQVQzMiAgICAgICAgICAgICAweDE0IC8qKjwgSUVFRS03NTQgMzItYml0IGZsb2F0aW5nIHBvaW50LiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9GTE9BVDY0ICAgICAgICAgICAgIDB4MTUgLyoqPCBJRUVFLTc1NCA2NC1iaXQgZmxvYXRpbmcgcG9pbnQuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1NGTE9BVCAgICAgICAgICAgICAgMHgxNiAvKio8IElFRUUtMTEwNzMgMTYtYml0IFNGTE9BVC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfRkxPQVQgICAgICAgICAgICAgICAweDE3IC8qKjwgSUVFRS0xMTA3MyAzMi1iaXQgRkxPQVQuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX0RVSU5UMTYgICAgICAgICAgICAgMHgxOCAvKio8IElFRUUtMjA2MDEgZm9ybWF0LiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9VVEY4UyAgICAgICAgICAgICAgIDB4MTkgLyoqPCBVVEYtOCBzdHJpbmcuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1VURjE2UyAgICAgICAgICAgICAgMHgxQSAvKio8IFVURi0xNiBzdHJpbmcuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1NUUlVDVCAgICAgICAgICAgICAgMHgxQiAvKio8IE9wYXF1ZSBTdHJ1Y3R1cmUuICovDQorLyoqIEB9ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVF9DUEZfTkFNRVNQQUNFUyBHQVRUIEJsdWV0b290aCBOYW1lc3BhY2VzDQorICogQHsNCisgKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9OQU1FU1BBQ0VfQlRTSUcgICAgICAgICAgICAweDAxIC8qKjwgQmx1ZXRvb3RoIFNJRyBkZWZpbmVkIE5hbWVzcGFjZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9OQU1FU1BBQ0VfREVTQ1JJUFRJT05fVU5LTk9XTiAweDAwMDAgLyoqPCBOYW1lc3BhY2UgRGVzY3JpcHRpb24gVW5rbm93bi4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0dBVFRfU1RSVUNUVVJFUyBTdHJ1Y3R1cmVzDQorICogQHsgKi8NCisNCisvKioNCisgKiBAYnJpZWYgQkxFIEdBVFQgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIHNldCB3aXRoIEByZWYgc2RfYmxlX2NmZ19zZXQuDQorICoNCisgKiBAcmV0dmFsIE5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIGF0dF9tdHUgaXMgc21hbGxlciB0aGFuIEByZWYgQkxFX0dBVFRfQVRUX01UVV9ERUZBVUxULg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgIGF0dF9tdHU7ICAgICAgICAgIC8qKjwgTWF4aW11bSBzaXplIG9mIEFUVCBwYWNrZXQgdGhlIFNvZnREZXZpY2UgY2FuIHNlbmQgb3IgcmVjZWl2ZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFuZCBtaW5pbXVtIHZhbHVlIGlzIEByZWYgQkxFX0dBVFRfQVRUX01UVV9ERUZBVUxULg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG1zY3MNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBtbXNje0ByZWYgQkxFX0dBVFRDX01UVV9FWENIQU5HRX0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBtbXNje0ByZWYgQkxFX0dBVFRTX01UVV9FWENIQU5HRX0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBlbmRtc2NzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IGJsZV9nYXR0X2Nvbm5fY2ZnX3Q7DQorDQorLyoqQGJyaWVmIEdBVFQgQ2hhcmFjdGVyaXN0aWMgUHJvcGVydGllcy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIC8qIFN0YW5kYXJkIHByb3BlcnRpZXMgKi8NCisgIHVpbnQ4X3QgYnJvYWRjYXN0ICAgICAgIDoxOyAvKio8IEJyb2FkY2FzdGluZyBvZiB0aGUgdmFsdWUgcGVybWl0dGVkLiAqLw0KKyAgdWludDhfdCByZWFkICAgICAgICAgICAgOjE7IC8qKjwgUmVhZGluZyB0aGUgdmFsdWUgcGVybWl0dGVkLiAqLw0KKyAgdWludDhfdCB3cml0ZV93b19yZXNwICAgOjE7IC8qKjwgV3JpdGluZyB0aGUgdmFsdWUgd2l0aCBXcml0ZSBDb21tYW5kIHBlcm1pdHRlZC4gKi8NCisgIHVpbnQ4X3Qgd3JpdGUgICAgICAgICAgIDoxOyAvKio8IFdyaXRpbmcgdGhlIHZhbHVlIHdpdGggV3JpdGUgUmVxdWVzdCBwZXJtaXR0ZWQuICovDQorICB1aW50OF90IG5vdGlmeSAgICAgICAgICA6MTsgLyoqPCBOb3RpZmljYXRpb24gb2YgdGhlIHZhbHVlIHBlcm1pdHRlZC4gKi8NCisgIHVpbnQ4X3QgaW5kaWNhdGUgICAgICAgIDoxOyAvKio8IEluZGljYXRpb25zIG9mIHRoZSB2YWx1ZSBwZXJtaXR0ZWQuICovDQorICB1aW50OF90IGF1dGhfc2lnbmVkX3dyICA6MTsgLyoqPCBXcml0aW5nIHRoZSB2YWx1ZSB3aXRoIFNpZ25lZCBXcml0ZSBDb21tYW5kIHBlcm1pdHRlZC4gKi8NCit9IGJsZV9nYXR0X2NoYXJfcHJvcHNfdDsNCisNCisvKipAYnJpZWYgR0FUVCBDaGFyYWN0ZXJpc3RpYyBFeHRlbmRlZCBQcm9wZXJ0aWVzLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgLyogRXh0ZW5kZWQgcHJvcGVydGllcyAqLw0KKyAgdWludDhfdCByZWxpYWJsZV93ciAgICAgOjE7IC8qKjwgV3JpdGluZyB0aGUgdmFsdWUgd2l0aCBRdWV1ZWQgV3JpdGUgb3BlcmF0aW9ucyBwZXJtaXR0ZWQuICovDQorICB1aW50OF90IHdyX2F1eCAgICAgICAgICA6MTsgLyoqPCBXcml0aW5nIHRoZSBDaGFyYWN0ZXJpc3RpYyBVc2VyIERlc2NyaXB0aW9uIGRlc2NyaXB0b3IgcGVybWl0dGVkLiAqLw0KK30gYmxlX2dhdHRfY2hhcl9leHRfcHJvcHNfdDsNCisNCisvKiogQH0gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8vIEJMRV9HQVRUX0hfXw0KKw0KKy8qKiBAfSAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2dhdHRjLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXR0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZmRkOTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXR0Yy5oCkBAIC0wLDAgKzEsNzAwIEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAgQGFkZHRvZ3JvdXAgQkxFX0dBVFRDIEdlbmVyaWMgQXR0cmlidXRlIFByb2ZpbGUgKEdBVFQpIENsaWVudA0KKyAgQHsNCisgIEBicmllZiAgRGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBHQVRUIENsaWVudCBpbnRlcmZhY2UuDQorICovDQorDQorI2lmbmRlZiBCTEVfR0FUVENfSF9fDQorI2RlZmluZSBCTEVfR0FUVENfSF9fDQorDQorI2luY2x1ZGUgImJsZV9nYXR0LmgiDQorI2luY2x1ZGUgImJsZV90eXBlcy5oIg0KKyNpbmNsdWRlICJibGVfcmFuZ2VzLmgiDQorI2luY2x1ZGUgIm5yZl9zdmMuaCINCisjaW5jbHVkZSAibnJmX2Vycm9yLmgiDQorI2luY2x1ZGUgIm5yZi5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKiBAYWRkdG9ncm91cCBCTEVfR0FUVENfRU5VTUVSQVRJT05TIEVudW1lcmF0aW9ucw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIEdBVFRDIEFQSSBTVkMgbnVtYmVycy4gKi8NCitlbnVtIEJMRV9HQVRUQ19TVkNTDQorew0KKyAgU0RfQkxFX0dBVFRDX1BSSU1BUllfU0VSVklDRVNfRElTQ09WRVIgPSBCTEVfR0FUVENfU1ZDX0JBU0UsIC8qKjwgUHJpbWFyeSBTZXJ2aWNlIERpc2NvdmVyeS4gKi8NCisgIFNEX0JMRV9HQVRUQ19SRUxBVElPTlNISVBTX0RJU0NPVkVSLCAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlbGF0aW9uc2hpcCBEaXNjb3ZlcnkuICovDQorICBTRF9CTEVfR0FUVENfQ0hBUkFDVEVSSVNUSUNTX0RJU0NPVkVSLCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDaGFyYWN0ZXJpc3RpYyBEaXNjb3ZlcnkuICovDQorICBTRF9CTEVfR0FUVENfREVTQ1JJUFRPUlNfRElTQ09WRVIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDaGFyYWN0ZXJpc3RpYyBEZXNjcmlwdG9yIERpc2NvdmVyeS4gKi8NCisgIFNEX0JMRV9HQVRUQ19BVFRSX0lORk9fRElTQ09WRVIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBJbmZvcm1hdGlvbiBEaXNjb3ZlcnkuICovDQorICBTRF9CTEVfR0FUVENfQ0hBUl9WQUxVRV9CWV9VVUlEX1JFQUQsICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWFkIENoYXJhY3RlcmlzdGljIFZhbHVlIGJ5IFVVSUQuICovDQorICBTRF9CTEVfR0FUVENfUkVBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBHZW5lcmljIHJlYWQuICovDQorICBTRF9CTEVfR0FUVENfQ0hBUl9WQUxVRVNfUkVBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWFkIG11bHRpcGxlIENoYXJhY3RlcmlzdGljIFZhbHVlcy4gKi8NCisgIFNEX0JMRV9HQVRUQ19XUklURSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdlbmVyaWMgd3JpdGUuICovDQorICBTRF9CTEVfR0FUVENfSFZfQ09ORklSTSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBIYW5kbGUgVmFsdWUgQ29uZmlybWF0aW9uLiAqLw0KKyAgU0RfQkxFX0dBVFRDX0VYQ0hBTkdFX01UVV9SRVFVRVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXhjaGFuZ2UgTVRVIFJlcXVlc3QuICovDQorfTsNCisNCisvKioNCisgKiBAYnJpZWYgR0FUVCBDbGllbnQgRXZlbnQgSURzLg0KKyAqLw0KK2VudW0gQkxFX0dBVFRDX0VWVFMNCit7DQorICBCTEVfR0FUVENfRVZUX1BSSU1fU1JWQ19ESVNDX1JTUCA9IEJMRV9HQVRUQ19FVlRfQkFTRSwgIC8qKjwgUHJpbWFyeSBTZXJ2aWNlIERpc2NvdmVyeSBSZXNwb25zZSBldmVudC4gICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRjX2V2dF9wcmltX3NydmNfZGlzY19yc3BfdC4gICAgICAgICAgKi8NCisgIEJMRV9HQVRUQ19FVlRfUkVMX0RJU0NfUlNQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWxhdGlvbnNoaXAgRGlzY292ZXJ5IFJlc3BvbnNlIGV2ZW50LiAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dGNfZXZ0X3JlbF9kaXNjX3JzcF90LiAgICAgICAgICAgICAgICAqLw0KKyAgQkxFX0dBVFRDX0VWVF9DSEFSX0RJU0NfUlNQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENoYXJhY3RlcmlzdGljIERpc2NvdmVyeSBSZXNwb25zZSBldmVudC4gICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXR0Y19ldnRfY2hhcl9kaXNjX3JzcF90LiAgICAgICAgICAgICAgICovDQorICBCTEVfR0FUVENfRVZUX0RFU0NfRElTQ19SU1AsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGVzY3JpcHRvciBEaXNjb3ZlcnkgUmVzcG9uc2UgZXZlbnQuICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRjX2V2dF9kZXNjX2Rpc2NfcnNwX3QuICAgICAgICAgICAgICAgKi8NCisgIEJMRV9HQVRUQ19FVlRfQVRUUl9JTkZPX0RJU0NfUlNQLCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgSW5mb3JtYXRpb24gUmVzcG9uc2UgZXZlbnQuICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dGNfZXZ0X2F0dHJfaW5mb19kaXNjX3JzcF90LiAqLw0KKyAgQkxFX0dBVFRDX0VWVF9DSEFSX1ZBTF9CWV9VVUlEX1JFQURfUlNQLCAgICAgICAgICAgICAgICAvKio8IFJlYWQgQnkgVVVJRCBSZXNwb25zZSBldmVudC4gICAgICAgICAgICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXR0Y19ldnRfY2hhcl92YWxfYnlfdXVpZF9yZWFkX3JzcF90LiAgICovDQorICBCTEVfR0FUVENfRVZUX1JFQURfUlNQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVhZCBSZXNwb25zZSBldmVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRjX2V2dF9yZWFkX3JzcF90LiAgICAgICAgICAgICAgICAgICAgKi8NCisgIEJMRV9HQVRUQ19FVlRfQ0hBUl9WQUxTX1JFQURfUlNQLCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWFkIG11bHRpcGxlIFJlc3BvbnNlIGV2ZW50LiAgICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dGNfZXZ0X2NoYXJfdmFsc19yZWFkX3JzcF90LiAgICAgICAgICAqLw0KKyAgQkxFX0dBVFRDX0VWVF9XUklURV9SU1AsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFdyaXRlIFJlc3BvbnNlIGV2ZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXR0Y19ldnRfd3JpdGVfcnNwX3QuICAgICAgICAgICAgICAgICAgICovDQorICBCTEVfR0FUVENfRVZUX0hWWCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbiBvciBJbmRpY2F0aW9uIGV2ZW50LiAgICAgXG4gQ29uZmlybSBpbmRpY2F0aW9uIHdpdGggQHJlZiBzZF9ibGVfZ2F0dGNfaHZfY29uZmlybS4gIFxuIFNlZSBAcmVmIGJsZV9nYXR0Y19ldnRfaHZ4X3QuICovDQorICBCTEVfR0FUVENfRVZUX0VYQ0hBTkdFX01UVV9SU1AsICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXhjaGFuZ2UgTVRVIFJlc3BvbnNlIGV2ZW50LiAgICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRjX2V2dF9leGNoYW5nZV9tdHVfcnNwX3QuICAgICAgICAgICAgKi8NCisgIEJMRV9HQVRUQ19FVlRfVElNRU9VVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaW1lb3V0IGV2ZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dGNfZXZ0X3RpbWVvdXRfdC4gICAgICAgICAgICAgICAgICAgICAqLw0KKyAgQkxFX0dBVFRDX0VWVF9XUklURV9DTURfVFhfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAvKio8IFdyaXRlIHdpdGhvdXQgUmVzcG9uc2UgdHJhbnNtaXNzaW9uIGNvbXBsZXRlLiAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXR0Y19ldnRfd3JpdGVfY21kX3R4X2NvbXBsZXRlX3QuICAgICAgICovDQorfTsNCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0dBVFRDX0RFRklORVMgRGVmaW5lcw0KKyAqIEB7ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfRVJST1JTX0dBVFRDIFNWQyByZXR1cm4gdmFsdWVzIHNwZWNpZmljIHRvIEdBVFRDDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9HQVRUQ19QUk9DX05PVF9QRVJNSVRURUQgICAgKE5SRl9HQVRUQ19FUlJfQkFTRSArIDB4MDAwKSAvKio8IFByb2NlZHVyZSBub3QgUGVybWl0dGVkLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX0FUVFJfSU5GT19GT1JNQVQgQXR0cmlidXRlIEluZm9ybWF0aW9uIEZvcm1hdHMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRDX0FUVFJfSU5GT19GT1JNQVRfMTZCSVQgICAgMSAvKio8IDE2LWJpdCBBdHRyaWJ1dGUgSW5mb3JtYXRpb24gRm9ybWF0LiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRDX0FUVFJfSU5GT19GT1JNQVRfMTI4QklUICAgMiAvKio8IDEyOC1iaXQgQXR0cmlidXRlIEluZm9ybWF0aW9uIEZvcm1hdC4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9HQVRUQ19ERUZBVUxUUyBHQVRUIENsaWVudCBkZWZhdWx0cw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FUVENfV1JJVEVfQ01EX1RYX1FVRVVFX1NJWkVfREVGQVVMVCAgMSAvKio8IERlZmF1bHQgbnVtYmVyIG9mIFdyaXRlIHdpdGhvdXQgUmVzcG9uc2UgdGhhdCBjYW4gYmUgcXVldWVkIGZvciB0cmFuc21pc3Npb24uICovDQorLyoqIEB9ICovDQorDQorLyoqIEB9ICovDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9HQVRUQ19TVFJVQ1RVUkVTIFN0cnVjdHVyZXMNCisgKiBAeyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiBCTEUgR0FUVEMgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIHNldCB3aXRoIEByZWYgc2RfYmxlX2NmZ19zZXQuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICB3cml0ZV9jbWRfdHhfcXVldWVfc2l6ZTsgLyoqPCBUaGUgZ3VhcmFudGVlZCBtaW5pbXVtIG51bWJlciBvZiBXcml0ZSB3aXRob3V0IFJlc3BvbnNlIHRoYXQgY2FuIGJlIHF1ZXVlZCBmb3IgdHJhbnNtaXNzaW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIEByZWYgQkxFX0dBVFRDX1dSSVRFX0NNRF9UWF9RVUVVRV9TSVpFX0RFRkFVTFQgKi8NCit9IGJsZV9nYXR0Y19jb25uX2NmZ190Ow0KKw0KKy8qKkBicmllZiBPcGVyYXRpb24gSGFuZGxlIFJhbmdlLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgc3RhcnRfaGFuZGxlOyAvKio8IFN0YXJ0IEhhbmRsZS4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgIGVuZF9oYW5kbGU7ICAgLyoqPCBFbmQgSGFuZGxlLiAqLw0KK30gYmxlX2dhdHRjX2hhbmRsZV9yYW5nZV90Ow0KKw0KKw0KKy8qKkBicmllZiBHQVRUIHNlcnZpY2UuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfdXVpZF90ICAgICAgICAgICAgICAgdXVpZDsgICAgICAgICAgLyoqPCBTZXJ2aWNlIFVVSUQuICovDQorICBibGVfZ2F0dGNfaGFuZGxlX3JhbmdlX3QgaGFuZGxlX3JhbmdlOyAgLyoqPCBTZXJ2aWNlIEhhbmRsZSBSYW5nZS4gKi8NCit9IGJsZV9nYXR0Y19zZXJ2aWNlX3Q7DQorDQorDQorLyoqQGJyaWVmICBHQVRUIGluY2x1ZGUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICAgIGhhbmRsZTsgICAgICAgICAgIC8qKjwgSW5jbHVkZSBIYW5kbGUuICovDQorICBibGVfZ2F0dGNfc2VydmljZV90IGluY2x1ZGVkX3NydmM7ICAgIC8qKjwgSGFuZGxlIG9mIHRoZSBpbmNsdWRlZCBzZXJ2aWNlLiAqLw0KK30gYmxlX2dhdHRjX2luY2x1ZGVfdDsNCisNCisNCisvKipAYnJpZWYgR0FUVCBjaGFyYWN0ZXJpc3RpYy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV91dWlkX3QgICAgICAgICAgICAgIHV1aWQ7ICAgICAgICAgICAgICAgICAvKio8IENoYXJhY3RlcmlzdGljIFVVSUQuICovDQorICBibGVfZ2F0dF9jaGFyX3Byb3BzX3QgICBjaGFyX3Byb3BzOyAgICAgICAgICAgLyoqPCBDaGFyYWN0ZXJpc3RpYyBQcm9wZXJ0aWVzLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgY2hhcl9leHRfcHJvcHMgOiAxOyAgIC8qKjwgRXh0ZW5kZWQgcHJvcGVydGllcyBwcmVzZW50LiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgaGFuZGxlX2RlY2w7ICAgICAgICAgIC8qKjwgSGFuZGxlIG9mIHRoZSBDaGFyYWN0ZXJpc3RpYyBEZWNsYXJhdGlvbi4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgIGhhbmRsZV92YWx1ZTsgICAgICAgICAvKio8IEhhbmRsZSBvZiB0aGUgQ2hhcmFjdGVyaXN0aWMgVmFsdWUuICovDQorfSBibGVfZ2F0dGNfY2hhcl90Ow0KKw0KKw0KKy8qKkBicmllZiBHQVRUIGRlc2NyaXB0b3IuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICBoYW5kbGU7ICAgICAgICAgLyoqPCBEZXNjcmlwdG9yIEhhbmRsZS4gKi8NCisgIGJsZV91dWlkX3QgICAgICAgIHV1aWQ7ICAgICAgICAgICAvKio8IERlc2NyaXB0b3IgVVVJRC4gKi8NCit9IGJsZV9nYXR0Y19kZXNjX3Q7DQorDQorDQorLyoqQGJyaWVmIFdyaXRlIFBhcmFtZXRlcnMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICB3cml0ZV9vcDsgICAgICAgICAgICAgLyoqPCBXcml0ZSBPcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkLCBzZWUgQHJlZiBCTEVfR0FUVF9XUklURV9PUFMuICovDQorICB1aW50OF90ICAgICAgICBmbGFnczsgICAgICAgICAgICAgICAgLyoqPCBGbGFncywgc2VlIEByZWYgQkxFX0dBVFRfRVhFQ19XUklURV9GTEFHUy4gKi8NCisgIHVpbnQxNl90ICAgICAgIGhhbmRsZTsgICAgICAgICAgICAgICAvKio8IEhhbmRsZSB0byB0aGUgYXR0cmlidXRlIHRvIGJlIHdyaXR0ZW4uICovDQorICB1aW50MTZfdCAgICAgICBvZmZzZXQ7ICAgICAgICAgICAgICAgLyoqPCBPZmZzZXQgaW4gYnl0ZXMuIEBub3RlIEZvciBXUklURV9DTUQgYW5kIFdSSVRFX1JFUSwgb2Zmc2V0IG11c3QgYmUgMC4gKi8NCisgIHVpbnQxNl90ICAgICAgIGxlbjsgICAgICAgICAgICAgICAgICAvKio8IExlbmd0aCBvZiBkYXRhIGluIGJ5dGVzLiAqLw0KKyAgdWludDhfdCBjb25zdCAqcF92YWx1ZTsgICAgICAgICAgICAgIC8qKjwgUG9pbnRlciB0byB0aGUgdmFsdWUgZGF0YS4gKi8NCit9IGJsZV9nYXR0Y193cml0ZV9wYXJhbXNfdDsNCisNCisvKipAYnJpZWYgQXR0cmlidXRlIEluZm9ybWF0aW9uIGZvciAxNi1iaXQgQXR0cmlidXRlIFVVSUQuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICBoYW5kbGU7ICAgICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgaGFuZGxlLiAqLw0KKyAgYmxlX3V1aWRfdCAgICAgdXVpZDsgICAgICAgICAgICAgICAgIC8qKjwgMTYtYml0IEF0dHJpYnV0ZSBVVUlELiAqLw0KK30gYmxlX2dhdHRjX2F0dHJfaW5mbzE2X3Q7DQorDQorLyoqQGJyaWVmIEF0dHJpYnV0ZSBJbmZvcm1hdGlvbiBmb3IgMTI4LWJpdCBBdHRyaWJ1dGUgVVVJRC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgIGhhbmRsZTsgICAgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBoYW5kbGUuICovDQorICBibGVfdXVpZDEyOF90ICB1dWlkOyAgICAgICAgICAgICAgICAgLyoqPCAxMjgtYml0IEF0dHJpYnV0ZSBVVUlELiAqLw0KK30gYmxlX2dhdHRjX2F0dHJfaW5mbzEyOF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRDX0VWVF9QUklNX1NSVkNfRElTQ19SU1AuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICAgICBjb3VudDsgICAgICAgICAgIC8qKjwgU2VydmljZSBjb3VudC4gKi8NCisgIGJsZV9nYXR0Y19zZXJ2aWNlX3Qgc2VydmljZXNbMV07ICAgICAgLyoqPCBTZXJ2aWNlIGRhdGEuIEBub3RlIFRoaXMgaXMgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkuIFRoZSBzaXplIG9mIDEgaW5kaWNhdGVkIGlzIG9ubHkgYSBwbGFjZWhvbGRlciBmb3IgY29tcGlsYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIEByZWYgc2RfYmxlX2V2dF9nZXQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBldmVudCBzdHJ1Y3R1cmVzIHdpdGggdmFyaWFibGUgbGVuZ3RoIGFycmF5IG1lbWJlcnMuICovDQorfSBibGVfZ2F0dGNfZXZ0X3ByaW1fc3J2Y19kaXNjX3JzcF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRDX0VWVF9SRUxfRElTQ19SU1AuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICAgICBjb3VudDsgICAgICAgICAgIC8qKjwgSW5jbHVkZSBjb3VudC4gKi8NCisgIGJsZV9nYXR0Y19pbmNsdWRlX3QgaW5jbHVkZXNbMV07ICAgICAgLyoqPCBJbmNsdWRlIGRhdGEuIEBub3RlIFRoaXMgaXMgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkuIFRoZSBzaXplIG9mIDEgaW5kaWNhdGVkIGlzIG9ubHkgYSBwbGFjZWhvbGRlciBmb3IgY29tcGlsYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIEByZWYgc2RfYmxlX2V2dF9nZXQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBldmVudCBzdHJ1Y3R1cmVzIHdpdGggdmFyaWFibGUgbGVuZ3RoIGFycmF5IG1lbWJlcnMuICovDQorfSBibGVfZ2F0dGNfZXZ0X3JlbF9kaXNjX3JzcF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRDX0VWVF9DSEFSX0RJU0NfUlNQLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgICBjb3VudDsgICAgICAgICAgLyoqPCBDaGFyYWN0ZXJpc3RpYyBjb3VudC4gKi8NCisgIGJsZV9nYXR0Y19jaGFyX3QgICAgY2hhcnNbMV07ICAgICAgIC8qKjwgQ2hhcmFjdGVyaXN0aWMgZGF0YS4gQG5vdGUgVGhpcyBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheS4gVGhlIHNpemUgb2YgMSBpbmRpY2F0ZWQgaXMgb25seSBhIHBsYWNlaG9sZGVyIGZvciBjb21waWxhdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIEByZWYgc2RfYmxlX2V2dF9nZXQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBldmVudCBzdHJ1Y3R1cmVzIHdpdGggdmFyaWFibGUgbGVuZ3RoIGFycmF5IG1lbWJlcnMuICovDQorfSBibGVfZ2F0dGNfZXZ0X2NoYXJfZGlzY19yc3BfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUQ19FVlRfREVTQ19ESVNDX1JTUC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgY291bnQ7ICAgICAgICAgIC8qKjwgRGVzY3JpcHRvciBjb3VudC4gKi8NCisgIGJsZV9nYXR0Y19kZXNjX3QgICAgZGVzY3NbMV07ICAgICAgIC8qKjwgRGVzY3JpcHRvciBkYXRhLiBAbm90ZSBUaGlzIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5LiBUaGUgc2l6ZSBvZiAxIGluZGljYXRlZCBpcyBvbmx5IGEgcGxhY2Vob2xkZXIgZm9yIGNvbXBpbGF0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZXZ0X2dldCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGV2ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBsZW5ndGggYXJyYXkgbWVtYmVycy4gKi8NCit9IGJsZV9nYXR0Y19ldnRfZGVzY19kaXNjX3JzcF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRDX0VWVF9BVFRSX0lORk9fRElTQ19SU1AuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgIGNvdW50OyAgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIGNvdW50LiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ7ICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBpbmZvcm1hdGlvbiBmb3JtYXQsIHNlZSBAcmVmIEJMRV9HQVRUQ19BVFRSX0lORk9fRk9STUFULiAqLw0KKyAgdW5pb24gew0KKyAgICBibGVfZ2F0dGNfYXR0cl9pbmZvMTZfdCAgYXR0cl9pbmZvMTZbMV07ICAgICAvKio8IEF0dHJpYnV0ZSBpbmZvcm1hdGlvbiBmb3IgMTYtYml0IEF0dHJpYnV0ZSBVVUlELg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgaXMgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkuIFRoZSBzaXplIG9mIDEgaW5kaWNhdGVkIGlzIG9ubHkgYSBwbGFjZWhvbGRlciBmb3IgY29tcGlsYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIEByZWYgc2RfYmxlX2V2dF9nZXQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBldmVudCBzdHJ1Y3R1cmVzIHdpdGggdmFyaWFibGUgbGVuZ3RoIGFycmF5IG1lbWJlcnMuICovDQorICAgIGJsZV9nYXR0Y19hdHRyX2luZm8xMjhfdCBhdHRyX2luZm8xMjhbMV07ICAgIC8qKjwgQXR0cmlidXRlIGluZm9ybWF0aW9uIGZvciAxMjgtYml0IEF0dHJpYnV0ZSBVVUlELg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgaXMgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkuIFRoZSBzaXplIG9mIDEgaW5kaWNhdGVkIGlzIG9ubHkgYSBwbGFjZWhvbGRlciBmb3IgY29tcGlsYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIEByZWYgc2RfYmxlX2V2dF9nZXQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBldmVudCBzdHJ1Y3R1cmVzIHdpdGggdmFyaWFibGUgbGVuZ3RoIGFycmF5IG1lbWJlcnMuICovDQorICB9IGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIGluZm9ybWF0aW9uIHVuaW9uLiAqLw0KK30gYmxlX2dhdHRjX2V2dF9hdHRyX2luZm9fZGlzY19yc3BfdDsNCisNCisvKipAYnJpZWYgR0FUVCByZWFkIGJ5IFVVSUQgaGFuZGxlIHZhbHVlIHBhaXIuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICAgIGhhbmRsZTsgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgSGFuZGxlLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICpwX3ZhbHVlOyAgICAgICAgIC8qKjwgUG9pbnRlciB0byB0aGUgQXR0cmlidXRlIFZhbHVlLCBsZW5ndGggaXMgYXZhaWxhYmxlIGluIEByZWYgYmxlX2dhdHRjX2V2dF9jaGFyX3ZhbF9ieV91dWlkX3JlYWRfcnNwX3Q6OnZhbHVlX2xlbi4gKi8NCit9IGJsZV9nYXR0Y19oYW5kbGVfdmFsdWVfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUQ19FVlRfQ0hBUl9WQUxfQllfVVVJRF9SRUFEX1JTUC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgY291bnQ7ICAgICAgICAgICAgLyoqPCBIYW5kbGUtVmFsdWUgUGFpciBDb3VudC4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgdmFsdWVfbGVuOyAgICAgICAgLyoqPCBMZW5ndGggb2YgdGhlIHZhbHVlIGluIEhhbmRsZS1WYWx1ZShzKSBsaXN0LiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICBoYW5kbGVfdmFsdWVbMV07ICAvKio8IEhhbmRsZS1WYWx1ZShzKSBsaXN0LiBUbyBpdGVyYXRlIHRocm91Z2ggdGhlIGxpc3QgdXNlIEByZWYgc2RfYmxlX2dhdHRjX2V2dF9jaGFyX3ZhbF9ieV91dWlkX3JlYWRfcnNwX2l0ZXIuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgVGhpcyBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheS4gVGhlIHNpemUgb2YgMSBpbmRpY2F0ZWQgaXMgb25seSBhIHBsYWNlaG9sZGVyIGZvciBjb21waWxhdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZXZ0X2dldCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGV2ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBsZW5ndGggYXJyYXkgbWVtYmVycy4gKi8NCit9IGJsZV9nYXR0Y19ldnRfY2hhcl92YWxfYnlfdXVpZF9yZWFkX3JzcF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRDX0VWVF9SRUFEX1JTUC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgaGFuZGxlOyAgICAgICAgIC8qKjwgQXR0cmlidXRlIEhhbmRsZS4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgb2Zmc2V0OyAgICAgICAgIC8qKjwgT2Zmc2V0IG9mIHRoZSBhdHRyaWJ1dGUgZGF0YS4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgbGVuOyAgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIGRhdGEgbGVuZ3RoLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICBkYXRhWzFdOyAgICAgICAgLyoqPCBBdHRyaWJ1dGUgZGF0YS4gQG5vdGUgVGhpcyBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheS4gVGhlIHNpemUgb2YgMSBpbmRpY2F0ZWQgaXMgb25seSBhIHBsYWNlaG9sZGVyIGZvciBjb21waWxhdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIEByZWYgc2RfYmxlX2V2dF9nZXQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBldmVudCBzdHJ1Y3R1cmVzIHdpdGggdmFyaWFibGUgbGVuZ3RoIGFycmF5IG1lbWJlcnMuICovDQorfSBibGVfZ2F0dGNfZXZ0X3JlYWRfcnNwX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVENfRVZUX0NIQVJfVkFMU19SRUFEX1JTUC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgbGVuOyAgICAgICAgICAgIC8qKjwgQ29uY2F0ZW5hdGVkIEF0dHJpYnV0ZSB2YWx1ZXMgbGVuZ3RoLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICB2YWx1ZXNbMV07ICAgICAgLyoqPCBBdHRyaWJ1dGUgdmFsdWVzLiBAbm90ZSBUaGlzIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5LiBUaGUgc2l6ZSBvZiAxIGluZGljYXRlZCBpcyBvbmx5IGEgcGxhY2Vob2xkZXIgZm9yIGNvbXBpbGF0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZXZ0X2dldCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGV2ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBsZW5ndGggYXJyYXkgbWVtYmVycy4gKi8NCit9IGJsZV9nYXR0Y19ldnRfY2hhcl92YWxzX3JlYWRfcnNwX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVENfRVZUX1dSSVRFX1JTUC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgaGFuZGxlOyAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgSGFuZGxlLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICB3cml0ZV9vcDsgICAgICAgICAvKio8IFR5cGUgb2Ygd3JpdGUgb3BlcmF0aW9uLCBzZWUgQHJlZiBCTEVfR0FUVF9XUklURV9PUFMuICovDQorICB1aW50MTZfdCAgICAgICAgICAgIG9mZnNldDsgICAgICAgICAgIC8qKjwgRGF0YSBvZmZzZXQuICovDQorICB1aW50MTZfdCAgICAgICAgICAgIGxlbjsgICAgICAgICAgICAgIC8qKjwgRGF0YSBsZW5ndGguICovDQorICB1aW50OF90ICAgICAgICAgICAgIGRhdGFbMV07ICAgICAgICAgIC8qKjwgRGF0YS4gQG5vdGUgVGhpcyBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheS4gVGhlIHNpemUgb2YgMSBpbmRpY2F0ZWQgaXMgb25seSBhIHBsYWNlaG9sZGVyIGZvciBjb21waWxhdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZXZ0X2dldCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGV2ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBsZW5ndGggYXJyYXkgbWVtYmVycy4gKi8NCit9IGJsZV9nYXR0Y19ldnRfd3JpdGVfcnNwX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVENfRVZUX0hWWC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgaGFuZGxlOyAgICAgICAgIC8qKjwgSGFuZGxlIHRvIHdoaWNoIHRoZSBIVnggb3BlcmF0aW9uIGFwcGxpZXMuICovDQorICB1aW50OF90ICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAvKio8IEluZGljYXRpb24gb3IgTm90aWZpY2F0aW9uLCBzZWUgQHJlZiBCTEVfR0FUVF9IVlhfVFlQRVMuICovDQorICB1aW50MTZfdCAgICAgICAgICAgIGxlbjsgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBkYXRhIGxlbmd0aC4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgZGF0YVsxXTsgICAgICAgIC8qKjwgQXR0cmlidXRlIGRhdGEuIEBub3RlIFRoaXMgaXMgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkuIFRoZSBzaXplIG9mIDEgaW5kaWNhdGVkIGlzIG9ubHkgYSBwbGFjZWhvbGRlciBmb3IgY29tcGlsYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBAcmVmIHNkX2JsZV9ldnRfZ2V0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgZXZlbnQgc3RydWN0dXJlcyB3aXRoIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBtZW1iZXJzLiAqLw0KK30gYmxlX2dhdHRjX2V2dF9odnhfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUQ19FVlRfRVhDSEFOR0VfTVRVX1JTUC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgIHNlcnZlcl9yeF9tdHU7ICAgICAgICAgICAgLyoqPCBTZXJ2ZXIgUlggTVRVIHNpemUuICovDQorfSBibGVfZ2F0dGNfZXZ0X2V4Y2hhbmdlX210dV9yc3BfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUQ19FVlRfVElNRU9VVC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgICAgc3JjOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaW1lb3V0IHNvdXJjZSwgc2VlIEByZWYgQkxFX0dBVFRfVElNRU9VVF9TT1VSQ0VTLiAqLw0KK30gYmxlX2dhdHRjX2V2dF90aW1lb3V0X3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVENfRVZUX1dSSVRFX0NNRF9UWF9DT01QTEVURS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgICAgICAgY291bnQ7ICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2Ygd3JpdGUgd2l0aG91dCByZXNwb25zZSB0cmFuc21pc3Npb25zIGNvbXBsZXRlZC4gKi8NCit9IGJsZV9nYXR0Y19ldnRfd3JpdGVfY21kX3R4X2NvbXBsZXRlX3Q7DQorDQorLyoqQGJyaWVmIEdBVFRDIGV2ZW50IHN0cnVjdHVyZS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgY29ubl9oYW5kbGU7ICAgICAgICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBIYW5kbGUgb24gd2hpY2ggZXZlbnQgb2NjdXJyZWQuICovDQorICB1aW50MTZfdCAgICAgICAgICAgIGdhdHRfc3RhdHVzOyAgICAgICAgICAgICAgICAvKio8IEdBVFQgc3RhdHVzIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24sIHNlZSBAcmVmIEJMRV9HQVRUX1NUQVRVU19DT0RFUy4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgZXJyb3JfaGFuZGxlOyAgICAgICAgICAgICAgIC8qKjwgSW4gY2FzZSBvZiBlcnJvcjogVGhlIGhhbmRsZSBjYXVzaW5nIHRoZSBlcnJvci4gSW4gYWxsIG90aGVyIGNhc2VzIEByZWYgQkxFX0dBVFRfSEFORExFX0lOVkFMSUQuICovDQorICB1bmlvbg0KKyAgew0KKyAgICBibGVfZ2F0dGNfZXZ0X3ByaW1fc3J2Y19kaXNjX3JzcF90ICAgICAgICAgIHByaW1fc3J2Y19kaXNjX3JzcDsgICAgICAgICAvKio8IFByaW1hcnkgU2VydmljZSBEaXNjb3ZlcnkgUmVzcG9uc2UgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRjX2V2dF9yZWxfZGlzY19yc3BfdCAgICAgICAgICAgICAgICByZWxfZGlzY19yc3A7ICAgICAgICAgICAgICAgLyoqPCBSZWxhdGlvbnNoaXAgRGlzY292ZXJ5IFJlc3BvbnNlIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXR0Y19ldnRfY2hhcl9kaXNjX3JzcF90ICAgICAgICAgICAgICAgY2hhcl9kaXNjX3JzcDsgICAgICAgICAgICAgIC8qKjwgQ2hhcmFjdGVyaXN0aWMgRGlzY292ZXJ5IFJlc3BvbnNlIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXR0Y19ldnRfZGVzY19kaXNjX3JzcF90ICAgICAgICAgICAgICAgZGVzY19kaXNjX3JzcDsgICAgICAgICAgICAgIC8qKjwgRGVzY3JpcHRvciBEaXNjb3ZlcnkgUmVzcG9uc2UgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRjX2V2dF9jaGFyX3ZhbF9ieV91dWlkX3JlYWRfcnNwX3QgICBjaGFyX3ZhbF9ieV91dWlkX3JlYWRfcnNwOyAgLyoqPCBDaGFyYWN0ZXJpc3RpYyBWYWx1ZSBSZWFkIGJ5IFVVSUQgUmVzcG9uc2UgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRjX2V2dF9yZWFkX3JzcF90ICAgICAgICAgICAgICAgICAgICByZWFkX3JzcDsgICAgICAgICAgICAgICAgICAgLyoqPCBSZWFkIFJlc3BvbnNlIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXR0Y19ldnRfY2hhcl92YWxzX3JlYWRfcnNwX3QgICAgICAgICAgY2hhcl92YWxzX3JlYWRfcnNwOyAgICAgICAgIC8qKjwgQ2hhcmFjdGVyaXN0aWMgVmFsdWVzIFJlYWQgUmVzcG9uc2UgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRjX2V2dF93cml0ZV9yc3BfdCAgICAgICAgICAgICAgICAgICB3cml0ZV9yc3A7ICAgICAgICAgICAgICAgICAgLyoqPCBXcml0ZSBSZXNwb25zZSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dGNfZXZ0X2h2eF90ICAgICAgICAgICAgICAgICAgICAgICAgIGh2eDsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEhhbmRsZSBWYWx1ZSBOb3RpZmljYXRpb24vSW5kaWNhdGlvbiBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dGNfZXZ0X2V4Y2hhbmdlX210dV9yc3BfdCAgICAgICAgICAgIGV4Y2hhbmdlX210dV9yc3A7ICAgICAgICAgICAvKio8IEV4Y2hhbmdlIE1UVSBSZXNwb25zZSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dGNfZXZ0X3RpbWVvdXRfdCAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7ICAgICAgICAgICAgICAgICAgICAvKio8IFRpbWVvdXQgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRjX2V2dF9hdHRyX2luZm9fZGlzY19yc3BfdCAgICAgICAgICBhdHRyX2luZm9fZGlzY19yc3A7ICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgSW5mb3JtYXRpb24gRGlzY292ZXJ5IEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXR0Y19ldnRfd3JpdGVfY21kX3R4X2NvbXBsZXRlX3QgICAgICAgd3JpdGVfY21kX3R4X2NvbXBsZXRlOyAgICAgIC8qKjwgV3JpdGUgd2l0aG91dCBSZXNwb25zZSB0cmFuc21pc3Npb24gY29tcGxldGUgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgIH0gcGFyYW1zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFdmVudCBQYXJhbWV0ZXJzLiBAbm90ZSBPbmx5IHZhbGlkIGlmIEByZWYgZ2F0dF9zdGF0dXMgPT0gQHJlZiBCTEVfR0FUVF9TVEFUVVNfU1VDQ0VTUy4gKi8NCit9IGJsZV9nYXR0Y19ldnRfdDsNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0dBVFRDX0ZVTkNUSU9OUyBGdW5jdGlvbnMNCisgKiBAeyAqLw0KKw0KKy8qKkBicmllZiBJbml0aWF0ZSBvciBjb250aW51ZSBhIEdBVFQgUHJpbWFyeSBTZXJ2aWNlIERpc2NvdmVyeSBwcm9jZWR1cmUuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGluaXRpYXRlcyBvciByZXN1bWVzIGEgUHJpbWFyeSBTZXJ2aWNlIGRpc2NvdmVyeSBwcm9jZWR1cmUsIHN0YXJ0aW5nIGZyb20gdGhlIHN1cHBsaWVkIGhhbmRsZS4NCisgKiAgICAgICAgICBJZiB0aGUgbGFzdCBzZXJ2aWNlIGhhcyBub3QgYmVlbiByZWFjaGVkLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFnYWluIHdpdGggYW4gdXBkYXRlZCBzdGFydCBoYW5kbGUgdmFsdWUgdG8gY29udGludWUgdGhlIHNlYXJjaC4NCisgKg0KKyAqIEBub3RlIElmIGFueSBvZiB0aGUgZGlzY292ZXJlZCBzZXJ2aWNlcyBoYXZlIDEyOC1iaXQgVVVJRHMgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGluIHRoZSB0YWJsZSBwcm92aWRlZCB0byBibGVfdnNfdXVpZHNfYXNzaWduLCBhIFVVSUQgc3RydWN0dXJlIHdpdGgNCisgKiAgICAgICB0eXBlIEByZWYgQkxFX1VVSURfVFlQRV9VTktOT1dOIHdpbGwgYmUgcmVjZWl2ZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0ByZWYgQkxFX0dBVFRDX0VWVF9QUklNX1NSVkNfRElTQ19SU1B9DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUQ19QUklNX1NSVkNfRElTQ19NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlkZW50aWZ5aW5nIHRoZSBjb25uZWN0aW9uIHRvIHBlcmZvcm0gdGhpcyBwcm9jZWR1cmUgb24uDQorICogQHBhcmFtW2luXSBzdGFydF9oYW5kbGUgSGFuZGxlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLg0KKyAqIEBwYXJhbVtpbl0gcF9zcnZjX3V1aWQgUG9pbnRlciB0byB0aGUgc2VydmljZSBVVUlEIHRvIGJlIGZvdW5kLiBJZiBpdCBpcyBOVUxMLCBhbGwgcHJpbWFyeSBzZXJ2aWNlcyB3aWxsIGJlIHJldHVybmVkLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBzdGFydGVkIG9yIHJlc3VtZWQgdGhlIFByaW1hcnkgU2VydmljZSBEaXNjb3ZlcnkgcHJvY2VkdXJlLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIENvbm5lY3Rpb24gU3RhdGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBDbGllbnQgcHJvY2VkdXJlIGFscmVhZHkgaW4gcHJvZ3Jlc3MuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUQ19QUklNQVJZX1NFUlZJQ0VTX0RJU0NPVkVSLCB1aW50MzJfdCwgc2RfYmxlX2dhdHRjX3ByaW1hcnlfc2VydmljZXNfZGlzY292ZXIodWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQxNl90IHN0YXJ0X2hhbmRsZSwgYmxlX3V1aWRfdCBjb25zdCAqcF9zcnZjX3V1aWQpKTsNCisNCisNCisvKipAYnJpZWYgSW5pdGlhdGUgb3IgY29udGludWUgYSBHQVRUIFJlbGF0aW9uc2hpcCBEaXNjb3ZlcnkgcHJvY2VkdXJlLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpbml0aWF0ZXMgb3IgcmVzdW1lcyB0aGUgRmluZCBJbmNsdWRlZCBTZXJ2aWNlcyBzdWItcHJvY2VkdXJlLiBJZiB0aGUgbGFzdCBpbmNsdWRlZCBzZXJ2aWNlIGhhcyBub3QgYmVlbiByZWFjaGVkLA0KKyAqICAgICAgICAgIHRoaXMgbXVzdCBiZSBjYWxsZWQgYWdhaW4gd2l0aCBhbiB1cGRhdGVkIGhhbmRsZSByYW5nZSB0byBjb250aW51ZSB0aGUgc2VhcmNoLg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVRUQ19FVlRfUkVMX0RJU0NfUlNQfQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVENfUkVMX0RJU0NfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIFRoZSBjb25uZWN0aW9uIGhhbmRsZSBpZGVudGlmeWluZyB0aGUgY29ubmVjdGlvbiB0byBwZXJmb3JtIHRoaXMgcHJvY2VkdXJlIG9uLg0KKyAqIEBwYXJhbVtpbl0gcF9oYW5kbGVfcmFuZ2UgQSBwb2ludGVyIHRvIHRoZSByYW5nZSBvZiBoYW5kbGVzIG9mIHRoZSBTZXJ2aWNlIHRvIHBlcmZvcm0gdGhpcyBwcm9jZWR1cmUgb24uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgb3IgcmVzdW1lZCB0aGUgUmVsYXRpb25zaGlwIERpc2NvdmVyeSBwcm9jZWR1cmUuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgQ29ubmVjdGlvbiBTdGF0ZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBDbGllbnQgcHJvY2VkdXJlIGFscmVhZHkgaW4gcHJvZ3Jlc3MuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUQ19SRUxBVElPTlNISVBTX0RJU0NPVkVSLCB1aW50MzJfdCwgc2RfYmxlX2dhdHRjX3JlbGF0aW9uc2hpcHNfZGlzY292ZXIodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXR0Y19oYW5kbGVfcmFuZ2VfdCBjb25zdCAqcF9oYW5kbGVfcmFuZ2UpKTsNCisNCisNCisvKipAYnJpZWYgSW5pdGlhdGUgb3IgY29udGludWUgYSBHQVRUIENoYXJhY3RlcmlzdGljIERpc2NvdmVyeSBwcm9jZWR1cmUuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGluaXRpYXRlcyBvciByZXN1bWVzIGEgQ2hhcmFjdGVyaXN0aWMgZGlzY292ZXJ5IHByb2NlZHVyZS4gSWYgdGhlIGxhc3QgQ2hhcmFjdGVyaXN0aWMgaGFzIG5vdCBiZWVuIHJlYWNoZWQsDQorICogICAgICAgICAgdGhpcyBtdXN0IGJlIGNhbGxlZCBhZ2FpbiB3aXRoIGFuIHVwZGF0ZWQgaGFuZGxlIHJhbmdlIHRvIGNvbnRpbnVlIHRoZSBkaXNjb3ZlcnkuDQorICoNCisgKiBAbm90ZSBJZiBhbnkgb2YgdGhlIGRpc2NvdmVyZWQgY2hhcmFjdGVyaXN0aWNzIGhhdmUgMTI4LWJpdCBVVUlEcyB3aGljaCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHRhYmxlIHByb3ZpZGVkIHRvIGJsZV92c191dWlkc19hc3NpZ24sIGEgVVVJRCBzdHJ1Y3R1cmUgd2l0aA0KKyAqICAgICAgIHR5cGUgQHJlZiBCTEVfVVVJRF9UWVBFX1VOS05PV04gd2lsbCBiZSByZWNlaXZlZCBpbiB0aGUgY29ycmVzcG9uZGluZyBldmVudC4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FUVENfRVZUX0NIQVJfRElTQ19SU1B9DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUQ19DSEFSX0RJU0NfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIFRoZSBjb25uZWN0aW9uIGhhbmRsZSBpZGVudGlmeWluZyB0aGUgY29ubmVjdGlvbiB0byBwZXJmb3JtIHRoaXMgcHJvY2VkdXJlIG9uLg0KKyAqIEBwYXJhbVtpbl0gcF9oYW5kbGVfcmFuZ2UgQSBwb2ludGVyIHRvIHRoZSByYW5nZSBvZiBoYW5kbGVzIG9mIHRoZSBTZXJ2aWNlIHRvIHBlcmZvcm0gdGhpcyBwcm9jZWR1cmUgb24uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgb3IgcmVzdW1lZCB0aGUgQ2hhcmFjdGVyaXN0aWMgRGlzY292ZXJ5IHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBDb25uZWN0aW9uIFN0YXRlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgQ2xpZW50IHByb2NlZHVyZSBhbHJlYWR5IGluIHByb2dyZXNzLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVENfQ0hBUkFDVEVSSVNUSUNTX0RJU0NPVkVSLCB1aW50MzJfdCwgc2RfYmxlX2dhdHRjX2NoYXJhY3RlcmlzdGljc19kaXNjb3Zlcih1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhdHRjX2hhbmRsZV9yYW5nZV90IGNvbnN0ICpwX2hhbmRsZV9yYW5nZSkpOw0KKw0KKw0KKy8qKkBicmllZiBJbml0aWF0ZSBvciBjb250aW51ZSBhIEdBVFQgQ2hhcmFjdGVyaXN0aWMgRGVzY3JpcHRvciBEaXNjb3ZlcnkgcHJvY2VkdXJlLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpbml0aWF0ZXMgb3IgcmVzdW1lcyBhIENoYXJhY3RlcmlzdGljIERlc2NyaXB0b3IgZGlzY292ZXJ5IHByb2NlZHVyZS4gSWYgdGhlIGxhc3QgRGVzY3JpcHRvciBoYXMgbm90IGJlZW4gcmVhY2hlZCwNCisgKiAgICAgICAgICB0aGlzIG11c3QgYmUgY2FsbGVkIGFnYWluIHdpdGggYW4gdXBkYXRlZCBoYW5kbGUgcmFuZ2UgdG8gY29udGludWUgdGhlIGRpc2NvdmVyeS4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FUVENfRVZUX0RFU0NfRElTQ19SU1B9DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUQ19ERVNDX0RJU0NfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIFRoZSBjb25uZWN0aW9uIGhhbmRsZSBpZGVudGlmeWluZyB0aGUgY29ubmVjdGlvbiB0byBwZXJmb3JtIHRoaXMgcHJvY2VkdXJlIG9uLg0KKyAqIEBwYXJhbVtpbl0gcF9oYW5kbGVfcmFuZ2UgQSBwb2ludGVyIHRvIHRoZSByYW5nZSBvZiBoYW5kbGVzIG9mIHRoZSBDaGFyYWN0ZXJpc3RpYyB0byBwZXJmb3JtIHRoaXMgcHJvY2VkdXJlIG9uLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBzdGFydGVkIG9yIHJlc3VtZWQgdGhlIERlc2NyaXB0b3IgRGlzY292ZXJ5IHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBDb25uZWN0aW9uIFN0YXRlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgQ2xpZW50IHByb2NlZHVyZSBhbHJlYWR5IGluIHByb2dyZXNzLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVENfREVTQ1JJUFRPUlNfRElTQ09WRVIsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dGNfZGVzY3JpcHRvcnNfZGlzY292ZXIodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXR0Y19oYW5kbGVfcmFuZ2VfdCBjb25zdCAqcF9oYW5kbGVfcmFuZ2UpKTsNCisNCisNCisvKipAYnJpZWYgSW5pdGlhdGUgb3IgY29udGludWUgYSBHQVRUIFJlYWQgdXNpbmcgQ2hhcmFjdGVyaXN0aWMgVVVJRCBwcm9jZWR1cmUuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGluaXRpYXRlcyBvciByZXN1bWVzIGEgUmVhZCB1c2luZyBDaGFyYWN0ZXJpc3RpYyBVVUlEIHByb2NlZHVyZS4gSWYgdGhlIGxhc3QgQ2hhcmFjdGVyaXN0aWMgaGFzIG5vdCBiZWVuIHJlYWNoZWQsDQorICogICAgICAgICAgdGhpcyBtdXN0IGJlIGNhbGxlZCBhZ2FpbiB3aXRoIGFuIHVwZGF0ZWQgaGFuZGxlIHJhbmdlIHRvIGNvbnRpbnVlIHRoZSBkaXNjb3ZlcnkuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0ByZWYgQkxFX0dBVFRDX0VWVF9DSEFSX1ZBTF9CWV9VVUlEX1JFQURfUlNQfQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVENfUkVBRF9VVUlEX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBUaGUgY29ubmVjdGlvbiBoYW5kbGUgaWRlbnRpZnlpbmcgdGhlIGNvbm5lY3Rpb24gdG8gcGVyZm9ybSB0aGlzIHByb2NlZHVyZSBvbi4NCisgKiBAcGFyYW1baW5dIHBfdXVpZCBQb2ludGVyIHRvIGEgQ2hhcmFjdGVyaXN0aWMgdmFsdWUgVVVJRCB0byByZWFkLg0KKyAqIEBwYXJhbVtpbl0gcF9oYW5kbGVfcmFuZ2UgQSBwb2ludGVyIHRvIHRoZSByYW5nZSBvZiBoYW5kbGVzIHRvIHBlcmZvcm0gdGhpcyBwcm9jZWR1cmUgb24uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgb3IgcmVzdW1lZCB0aGUgUmVhZCB1c2luZyBDaGFyYWN0ZXJpc3RpYyBVVUlEIHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBDb25uZWN0aW9uIFN0YXRlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgQ2xpZW50IHByb2NlZHVyZSBhbHJlYWR5IGluIHByb2dyZXNzLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVENfQ0hBUl9WQUxVRV9CWV9VVUlEX1JFQUQsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dGNfY2hhcl92YWx1ZV9ieV91dWlkX3JlYWQodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV91dWlkX3QgY29uc3QgKnBfdXVpZCwgYmxlX2dhdHRjX2hhbmRsZV9yYW5nZV90IGNvbnN0ICpwX2hhbmRsZV9yYW5nZSkpOw0KKw0KKw0KKy8qKkBicmllZiBJbml0aWF0ZSBvciBjb250aW51ZSBhIEdBVFQgUmVhZCAoTG9uZykgQ2hhcmFjdGVyaXN0aWMgb3IgRGVzY3JpcHRvciBwcm9jZWR1cmUuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGluaXRpYXRlcyBvciByZXN1bWVzIGEgR0FUVCBSZWFkIChMb25nKSBDaGFyYWN0ZXJpc3RpYyBvciBEZXNjcmlwdG9yIHByb2NlZHVyZS4gSWYgdGhlIENoYXJhY3RlcmlzdGljIG9yIERlc2NyaXB0b3INCisgKiAgICAgICAgICB0byBiZSByZWFkIGlzIGxvbmdlciB0aGFuIEFUVF9NVFUgLSAxLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggYXBwcm9wcmlhdGUgb2Zmc2V0IHRvIHJlYWQgdGhlDQorICogICAgICAgICAgY29tcGxldGUgdmFsdWUuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0ByZWYgQkxFX0dBVFRDX0VWVF9SRUFEX1JTUH0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRDX1ZBTFVFX1JFQURfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIFRoZSBjb25uZWN0aW9uIGhhbmRsZSBpZGVudGlmeWluZyB0aGUgY29ubmVjdGlvbiB0byBwZXJmb3JtIHRoaXMgcHJvY2VkdXJlIG9uLg0KKyAqIEBwYXJhbVtpbl0gaGFuZGxlIFRoZSBoYW5kbGUgb2YgdGhlIGF0dHJpYnV0ZSB0byBiZSByZWFkLg0KKyAqIEBwYXJhbVtpbl0gb2Zmc2V0IE9mZnNldCBpbnRvIHRoZSBhdHRyaWJ1dGUgdmFsdWUgdG8gYmUgcmVhZC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc3RhcnRlZCBvciByZXN1bWVkIHRoZSBSZWFkIChMb25nKSBwcm9jZWR1cmUuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgQ29ubmVjdGlvbiBTdGF0ZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgQ2xpZW50IHByb2NlZHVyZSBhbHJlYWR5IGluIHByb2dyZXNzLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVENfUkVBRCwgdWludDMyX3QsIHNkX2JsZV9nYXR0Y19yZWFkKHVpbnQxNl90IGNvbm5faGFuZGxlLCB1aW50MTZfdCBoYW5kbGUsIHVpbnQxNl90IG9mZnNldCkpOw0KKw0KKw0KKy8qKkBicmllZiBJbml0aWF0ZSBhIEdBVFQgUmVhZCBNdWx0aXBsZSBDaGFyYWN0ZXJpc3RpYyBWYWx1ZXMgcHJvY2VkdXJlLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpbml0aWF0ZXMgYSBHQVRUIFJlYWQgTXVsdGlwbGUgQ2hhcmFjdGVyaXN0aWMgVmFsdWVzIHByb2NlZHVyZS4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FUVENfRVZUX0NIQVJfVkFMU19SRUFEX1JTUH0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRDX1JFQURfTVVMVF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlkZW50aWZ5aW5nIHRoZSBjb25uZWN0aW9uIHRvIHBlcmZvcm0gdGhpcyBwcm9jZWR1cmUgb24uDQorICogQHBhcmFtW2luXSBwX2hhbmRsZXMgQSBwb2ludGVyIHRvIHRoZSBoYW5kbGUocykgb2YgdGhlIGF0dHJpYnV0ZShzKSB0byBiZSByZWFkLg0KKyAqIEBwYXJhbVtpbl0gaGFuZGxlX2NvdW50IFRoZSBudW1iZXIgb2YgaGFuZGxlcyBpbiBwX2hhbmRsZXMuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIFJlYWQgTXVsdGlwbGUgQ2hhcmFjdGVyaXN0aWMgVmFsdWVzIHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBDb25uZWN0aW9uIFN0YXRlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgQ2xpZW50IHByb2NlZHVyZSBhbHJlYWR5IGluIHByb2dyZXNzLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVENfQ0hBUl9WQUxVRVNfUkVBRCwgdWludDMyX3QsIHNkX2JsZV9nYXR0Y19jaGFyX3ZhbHVlc19yZWFkKHVpbnQxNl90IGNvbm5faGFuZGxlLCB1aW50MTZfdCBjb25zdCAqcF9oYW5kbGVzLCB1aW50MTZfdCBoYW5kbGVfY291bnQpKTsNCisNCisNCisvKipAYnJpZWYgUGVyZm9ybSBhIFdyaXRlIChDaGFyYWN0ZXJpc3RpYyBWYWx1ZSBvciBEZXNjcmlwdG9yLCB3aXRoIG9yIHdpdGhvdXQgcmVzcG9uc2UsIHNpZ25lZCBvciBub3QsIGxvbmcgb3IgcmVsaWFibGUpIHByb2NlZHVyZS4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gY2FuIHBlcmZvcm0gYWxsIHdyaXRlIHByb2NlZHVyZXMgZGVzY3JpYmVkIGluIEdBVFQuDQorICoNCisgKiBAbm90ZSAgICBPbmx5IG9uZSB3cml0ZSB3aXRoIHJlc3BvbnNlIHByb2NlZHVyZSBjYW4gYmUgb25nb2luZyBwZXIgY29ubmVjdGlvbiBhdCBhIHRpbWUuDQorICogICAgICAgICAgSWYgdGhlIGFwcGxpY2F0aW9uIHRyaWVzIHRvIHdyaXRlIHdpdGggcmVzcG9uc2Ugd2hpbGUgYW5vdGhlciB3cml0ZSB3aXRoIHJlc3BvbnNlIHByb2NlZHVyZSBpcyBvbmdvaW5nLA0KKyAqICAgICAgICAgIHRoZSBmdW5jdGlvbiBjYWxsIHdpbGwgcmV0dXJuIEByZWYgTlJGX0VSUk9SX0JVU1kuDQorICogICAgICAgICAgQSBAcmVmIEJMRV9HQVRUQ19FVlRfV1JJVEVfUlNQIGV2ZW50IHdpbGwgYmUgaXNzdWVkIGFzIHNvb24gYXMgdGhlIHdyaXRlIHJlc3BvbnNlIGFycml2ZXMgZnJvbSB0aGUgcGVlci4NCisgKg0KKyAqIEBub3RlICAgIFRoZSBudW1iZXIgb2YgV3JpdGUgd2l0aG91dCBSZXNwb25zZSB0aGF0IGNhbiBiZSBxdWV1ZWQgaXMgY29uZmlndXJlZCBieSBAcmVmIGJsZV9nYXR0Y19jb25uX2NmZ190Ojp3cml0ZV9jbWRfdHhfcXVldWVfc2l6ZQ0KKyAqICAgICAgICAgIFdoZW4gdGhlIHF1ZXVlIGlzIGZ1bGwsIHRoZSBmdW5jdGlvbiBjYWxsIHdpbGwgcmV0dXJuIEByZWYgTlJGX0VSUk9SX1JFU09VUkNFUy4NCisgKiAgICAgICAgICBBIEByZWYgQkxFX0dBVFRDX0VWVF9XUklURV9DTURfVFhfQ09NUExFVEUgZXZlbnQgd2lsbCBiZSBpc3N1ZWQgYXMgc29vbiBhcyB0aGUgdHJhbnNtaXNzaW9uIG9mIHRoZSB3cml0ZSB3aXRob3V0IHJlc3BvbnNlIGlzIGNvbXBsZXRlLg0KKyAqDQorICogQG5vdGUgICAgVGhlIGFwcGxpY2F0aW9uIGNhbiBrZWVwIHRyYWNrIG9mIHRoZSBhdmFpbGFibGUgcXVldWUgZWxlbWVudCBjb3VudCBmb3Igd3JpdGVzIHdpdGhvdXQgcmVzcG9uc2VzIGJ5IGZvbGxvd2luZyB0aGUgcHJvY2VkdXJlIGJlbG93Og0KKyAqICAgICAgICAgIC0gU3RvcmUgaW5pdGlhbCBxdWV1ZSBlbGVtZW50IGNvdW50IGluIGEgdmFyaWFibGUuDQorICogICAgICAgICAgLSBEZWNyZW1lbnQgdGhlIHZhcmlhYmxlLCB3aGljaCBzdG9yZXMgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgcXVldWUgZWxlbWVudCBjb3VudCwgYnkgb25lIHdoZW4gYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBAcmVmIE5SRl9TVUNDRVNTLg0KKyAqICAgICAgICAgIC0gSW5jcmVtZW50IHRoZSB2YXJpYWJsZSwgd2hpY2ggc3RvcmVzIHRoZSBjdXJyZW50IGF2YWlsYWJsZSBxdWV1ZSBlbGVtZW50IGNvdW50LCBieSB0aGUgY291bnQgdmFyaWFibGUgaW4gQHJlZiBCTEVfR0FUVENfRVZUX1dSSVRFX0NNRF9UWF9DT01QTEVURSBldmVudC4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FUVENfRVZUX1dSSVRFX0NNRF9UWF9DT01QTEVURSwgV3JpdGUgd2l0aG91dCByZXNwb25zZSB0cmFuc21pc3Npb24gY29tcGxldGUufQ0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVRUQ19FVlRfV1JJVEVfUlNQLCBXcml0ZSByZXNwb25zZSByZWNlaXZlZCBmcm9tIHRoZSBwZWVyLn0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRDX1ZBTFVFX1dSSVRFX1dJVEhPVVRfUkVTUF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVENfVkFMVUVfV1JJVEVfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRDX1ZBTFVFX0xPTkdfV1JJVEVfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRDX1ZBTFVFX1JFTElBQkxFX1dSSVRFX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBUaGUgY29ubmVjdGlvbiBoYW5kbGUgaWRlbnRpZnlpbmcgdGhlIGNvbm5lY3Rpb24gdG8gcGVyZm9ybSB0aGlzIHByb2NlZHVyZSBvbi4NCisgKiBAcGFyYW1baW5dIHBfd3JpdGVfcGFyYW1zIEEgcG9pbnRlciB0byBhIHdyaXRlIHBhcmFtZXRlcnMgc3RydWN0dXJlLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBXcml0ZSBwcm9jZWR1cmUuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgQ29ubmVjdGlvbiBTdGF0ZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfREFUQV9TSVpFIEludmFsaWQgZGF0YSBzaXplKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBGb3Igd3JpdGUgd2l0aCByZXNwb25zZSwgcHJvY2VkdXJlIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIFdhaXQgZm9yIGEgQHJlZiBCTEVfR0FUVENfRVZUX1dSSVRFX1JTUCBldmVudCBhbmQgcmV0cnkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9SRVNPVVJDRVMgVG9vIG1hbnkgd3JpdGVzIHdpdGhvdXQgcmVzcG9uc2VzIHF1ZXVlZC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYWl0IGZvciBhIEByZWYgQkxFX0dBVFRDX0VWVF9XUklURV9DTURfVFhfQ09NUExFVEUgZXZlbnQgYW5kIHJldHJ5Lg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVENfV1JJVEUsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dGNfd3JpdGUodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXR0Y193cml0ZV9wYXJhbXNfdCBjb25zdCAqcF93cml0ZV9wYXJhbXMpKTsNCisNCisNCisvKipAYnJpZWYgU2VuZCBhIEhhbmRsZSBWYWx1ZSBDb25maXJtYXRpb24gdG8gdGhlIEdBVFQgU2VydmVyLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUQ19IVklfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIFRoZSBjb25uZWN0aW9uIGhhbmRsZSBpZGVudGlmeWluZyB0aGUgY29ubmVjdGlvbiB0byBwZXJmb3JtIHRoaXMgcHJvY2VkdXJlIG9uLg0KKyAqIEBwYXJhbVtpbl0gaGFuZGxlIFRoZSBoYW5kbGUgb2YgdGhlIGF0dHJpYnV0ZSBpbiB0aGUgaW5kaWNhdGlvbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgcXVldWVkIHRoZSBIYW5kbGUgVmFsdWUgQ29uZmlybWF0aW9uIGZvciB0cmFuc21pc3Npb24uDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgQ29ubmVjdGlvbiBTdGF0ZSBvciBubyBJbmRpY2F0aW9uIHBlbmRpbmcgdG8gYmUgY29uZmlybWVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9BVFRSX0hBTkRMRSBJbnZhbGlkIGF0dHJpYnV0ZSBoYW5kbGUuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUQ19IVl9DT05GSVJNLCB1aW50MzJfdCwgc2RfYmxlX2dhdHRjX2h2X2NvbmZpcm0odWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQxNl90IGhhbmRsZSkpOw0KKw0KKy8qKkBicmllZiBEaXNjb3ZlcnMgaW5mb3JtYXRpb24gYWJvdXQgYSByYW5nZSBvZiBhdHRyaWJ1dGVzIG9uIGEgR0FUVCBzZXJ2ZXIuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0ByZWYgQkxFX0dBVFRDX0VWVF9BVFRSX0lORk9fRElTQ19SU1AsIEdlbmVyYXRlZCB3aGVuIGluZm9ybWF0aW9uIGFib3V0IGEgcmFuZ2Ugb2YgYXR0cmlidXRlcyBoYXMgYmVlbiByZWNlaXZlZC59DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSAgICBUaGUgY29ubmVjdGlvbiBoYW5kbGUgaWRlbnRpZnlpbmcgdGhlIGNvbm5lY3Rpb24gdG8gcGVyZm9ybSB0aGlzIHByb2NlZHVyZSBvbi4NCisgKiBAcGFyYW1baW5dIHBfaGFuZGxlX3JhbmdlIFRoZSByYW5nZSBvZiBoYW5kbGVzIHRvIHJlcXVlc3QgaW5mb3JtYXRpb24gYWJvdXQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYW4gYXR0cmlidXRlIGluZm9ybWF0aW9uIGRpc2NvdmVyeSBwcm9jZWR1cmUuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgY29ubmVjdGlvbiBzdGF0ZQ0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSICBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIENsaWVudCBwcm9jZWR1cmUgYWxyZWFkeSBpbiBwcm9ncmVzcy4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRDX0FUVFJfSU5GT19ESVNDT1ZFUiwgdWludDMyX3QsIHNkX2JsZV9nYXR0Y19hdHRyX2luZm9fZGlzY292ZXIodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXR0Y19oYW5kbGVfcmFuZ2VfdCBjb25zdCAqIHBfaGFuZGxlX3JhbmdlKSk7DQorDQorLyoqQGJyaWVmIFN0YXJ0IGFuIEFUVF9NVFUgZXhjaGFuZ2UgYnkgc2VuZGluZyBhbiBFeGNoYW5nZSBNVFUgUmVxdWVzdCB0byB0aGUgc2VydmVyLg0KKyAqDQorICogQGRldGFpbHMgVGhlIFNvZnREZXZpY2Ugc2V0cyBBVFRfTVRVIHRvIHRoZSBtaW5pbXVtIG9mOg0KKyAqICAgICAgICAgIC0gVGhlIENsaWVudCBSWCBNVFUgdmFsdWUsIGFuZA0KKyAqICAgICAgICAgIC0gVGhlIFNlcnZlciBSWCBNVFUgdmFsdWUgZnJvbSBAcmVmIEJMRV9HQVRUQ19FVlRfRVhDSEFOR0VfTVRVX1JTUC4NCisgKg0KKyAqICAgICAgICAgIEhvd2V2ZXIsIHRoZSBTb2Z0RGV2aWNlIG5ldmVyIHNldHMgQVRUX01UVSBsb3dlciB0aGFuIEByZWYgQkxFX0dBVFRfQVRUX01UVV9ERUZBVUxULg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVRUQ19FVlRfRVhDSEFOR0VfTVRVX1JTUH0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRDX01UVV9FWENIQU5HRX0NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSAgICBUaGUgY29ubmVjdGlvbiBoYW5kbGUgaWRlbnRpZnlpbmcgdGhlIGNvbm5lY3Rpb24gdG8gcGVyZm9ybSB0aGlzIHByb2NlZHVyZSBvbi4NCisgKiBAcGFyYW1baW5dIGNsaWVudF9yeF9tdHUgIENsaWVudCBSWCBNVFUgc2l6ZS4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIG1pbmltdW0gdmFsdWUgaXMgQHJlZiBCTEVfR0FUVF9BVFRfTVRVX0RFRkFVTFQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBtYXhpbXVtIHZhbHVlIGlzIEByZWYgYmxlX2dhdHRfY29ubl9jZmdfdDo6YXR0X210dSBpbiB0aGUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIHRoaXMgY29ubmVjdGlvbi4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIHZhbHVlIG11c3QgYmUgZXF1YWwgdG8gU2VydmVyIFJYIE1UVSBzaXplIGdpdmVuIGluIEByZWYgc2RfYmxlX2dhdHRzX2V4Y2hhbmdlX210dV9yZXBseQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhbiBBVFRfTVRVIGV4Y2hhbmdlIGhhcyBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHNlbnQgcmVxdWVzdCB0byB0aGUgc2VydmVyLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIGNvbm5lY3Rpb24gc3RhdGUgb3IgYW4gQVRUX01UVSBleGNoYW5nZSB3YXMgYWxyZWFkeSByZXF1ZXN0ZWQgb25jZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBDbGllbnQgUlggTVRVIHNpemUgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIENsaWVudCBwcm9jZWR1cmUgYWxyZWFkeSBpbiBwcm9ncmVzcy4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRDX0VYQ0hBTkdFX01UVV9SRVFVRVNULCB1aW50MzJfdCwgc2RfYmxlX2dhdHRjX2V4Y2hhbmdlX210dV9yZXF1ZXN0KHVpbnQxNl90IGNvbm5faGFuZGxlLCB1aW50MTZfdCBjbGllbnRfcnhfbXR1KSk7DQorDQorLyoqQGJyaWVmIEl0ZXJhdGUgdGhyb3VnaCBIYW5kbGUtVmFsdWUocykgbGlzdCBpbiBAcmVmIEJMRV9HQVRUQ19FVlRfQ0hBUl9WQUxfQllfVVVJRF9SRUFEX1JTUCBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9nYXR0Y19ldnQgIFBvaW50ZXIgdG8gZXZlbnQgYnVmZmVyIGNvbnRhaW5pbmcgQHJlZiBCTEVfR0FUVENfRVZUX0NIQVJfVkFMX0JZX1VVSURfUkVBRF9SU1AgZXZlbnQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgSWYgdGhlIGJ1ZmZlciBjb250YWlucyBkaWZmZXJlbnQgZXZlbnQsIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4NCisgKiBAcGFyYW1baW4sb3V0XSBwX2l0ZXIgICBJdGVyYXRvciwgcG9pbnRzIHRvIEByZWYgYmxlX2dhdHRjX2hhbmRsZV92YWx1ZV90IHN0cnVjdHVyZSB0aGF0IHdpbGwgYmUgZmlsbGVkIGluIHdpdGgNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmV4dCBIYW5kbGUtVmFsdWUgcGFpciBpbiBlYWNoIGl0ZXJhdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgb3RoZXIgdGhhbg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIEByZWYgTlJGX1NVQ0NFU1MsIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgLSBUbyBzdGFydCBpdGVyYXRpb24sIGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB0byB6ZXJvLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gVG8gY29udGludWUsIHBhc3MgdGhlIHZhbHVlIGZyb20gcHJldmlvdXMgaXRlcmF0aW9uLg0KKyAqDQorICogXGNvZGUNCisgKiBibGVfZ2F0dGNfaGFuZGxlX3ZhbHVlX3QgaXRlcjsNCisgKiBtZW1zZXQoJml0ZXIsIDAsIHNpemVvZihibGVfZ2F0dGNfaGFuZGxlX3ZhbHVlX3QpKTsNCisgKiB3aGlsZSAoc2RfYmxlX2dhdHRjX2V2dF9jaGFyX3ZhbF9ieV91dWlkX3JlYWRfcnNwX2l0ZXIoJmJsZV9ldnQuZXZ0LmdhdHRjX2V2dCwgJml0ZXIpID09IE5SRl9TVUNDRVNTKQ0KKyAqIHsNCisgKiAgIGFwcF9oYW5kbGUgPSBpdGVyLmhhbmRsZTsNCisgKiAgIG1lbWNweShhcHBfdmFsdWUsIGl0ZXIucF92YWx1ZSwgYmxlX2V2dC5ldnQuZ2F0dGNfZXZ0LnBhcmFtcy5jaGFyX3ZhbF9ieV91dWlkX3JlYWRfcnNwLnZhbHVlX2xlbik7DQorICogfQ0KKyAqIFxlbmRjb2RlDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgbmV4dCBIYW5kbGUtVmFsdWUgcGFpci4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9GT1VORCBObyBtb3JlIEhhbmRsZS1WYWx1ZSBwYWlycyBhdmFpbGFibGUgaW4gdGhlIGxpc3QuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX2JsZV9nYXR0Y19ldnRfY2hhcl92YWxfYnlfdXVpZF9yZWFkX3JzcF9pdGVyKGJsZV9nYXR0Y19ldnRfdCAqcF9nYXR0Y19ldnQsIGJsZV9nYXR0Y19oYW5kbGVfdmFsdWVfdCAqcF9pdGVyKTsNCisNCisvKiogQH0gKi8NCisNCisjaWZuZGVmIFNVUFBSRVNTX0lOTElORV9JTVBMRU1FTlRBVElPTg0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9ibGVfZ2F0dGNfZXZ0X2NoYXJfdmFsX2J5X3V1aWRfcmVhZF9yc3BfaXRlcihibGVfZ2F0dGNfZXZ0X3QgKnBfZ2F0dGNfZXZ0LCBibGVfZ2F0dGNfaGFuZGxlX3ZhbHVlX3QgKnBfaXRlcikNCit7DQorICB1aW50MzJfdCB2YWx1ZV9sZW4gPSBwX2dhdHRjX2V2dC0+cGFyYW1zLmNoYXJfdmFsX2J5X3V1aWRfcmVhZF9yc3AudmFsdWVfbGVuOw0KKyAgdWludDhfdCAqcF9maXJzdCA9IHBfZ2F0dGNfZXZ0LT5wYXJhbXMuY2hhcl92YWxfYnlfdXVpZF9yZWFkX3JzcC5oYW5kbGVfdmFsdWU7DQorICB1aW50OF90ICpwX25leHQgPSBwX2l0ZXItPnBfdmFsdWUgPyBwX2l0ZXItPnBfdmFsdWUgKyB2YWx1ZV9sZW4gOiBwX2ZpcnN0Ow0KKw0KKyAgaWYgKChwX25leHQgLSBwX2ZpcnN0KSAvIChzaXplb2YodWludDE2X3QpICsgdmFsdWVfbGVuKSA8IHBfZ2F0dGNfZXZ0LT5wYXJhbXMuY2hhcl92YWxfYnlfdXVpZF9yZWFkX3JzcC5jb3VudCkNCisgIHsNCisgICAgcF9pdGVyLT5oYW5kbGUgPSAodWludDE2X3QpcF9uZXh0WzFdIDw8IDggfCBwX25leHRbMF07DQorICAgIHBfaXRlci0+cF92YWx1ZSA9IHBfbmV4dCArIHNpemVvZih1aW50MTZfdCk7DQorICAgIHJldHVybiBOUkZfU1VDQ0VTUzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgcmV0dXJuIE5SRl9FUlJPUl9OT1RfRk9VTkQ7DQorICB9DQorfQ0KKw0KKyNlbmRpZiAvKiBTVVBQUkVTU19JTkxJTkVfSU1QTEVNRU5UQVRJT04gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8qIEJMRV9HQVRUQ19IX18gKi8NCisNCisvKioNCisgIEB9DQorKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXR0cy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfZ2F0dHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODc3NmJhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfZ2F0dHMuaApAQCAtMCwwICsxLDgzMiBAQAorLyoNCisgKiBDb3B5cmlnaHQgKGMpIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2Ygb3RoZXINCisgKiAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KKyAqICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiAgIDQuIFRoaXMgc29mdHdhcmUgbXVzdCBvbmx5IGJlIHVzZWQgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYw0KKyAqICAgU2VtaWNvbmR1Y3RvciBBU0EsIG9yIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBhIHRoaXJkIHBhcnR5IHRoYXQNCisgKiAgIGlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljIFNlbWljb25kdWN0b3IuDQorICoNCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisvKioNCisgIEBhZGR0b2dyb3VwIEJMRV9HQVRUUyBHZW5lcmljIEF0dHJpYnV0ZSBQcm9maWxlIChHQVRUKSBTZXJ2ZXINCisgIEB7DQorICBAYnJpZWYgIERlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgR0FUVFMgaW50ZXJmYWNlLg0KKyAqLw0KKw0KKyNpZm5kZWYgQkxFX0dBVFRTX0hfXw0KKyNkZWZpbmUgQkxFX0dBVFRTX0hfXw0KKw0KKyNpbmNsdWRlICJibGVfdHlwZXMuaCINCisjaW5jbHVkZSAiYmxlX3Jhbmdlcy5oIg0KKyNpbmNsdWRlICJibGVfbDJjYXAuaCINCisjaW5jbHVkZSAiYmxlX2dhcC5oIg0KKyNpbmNsdWRlICJibGVfZ2F0dC5oIg0KKyNpbmNsdWRlICJucmZfc3ZjLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9HQVRUU19FTlVNRVJBVElPTlMgRW51bWVyYXRpb25zDQorICogQHsgKi8NCisNCisvKioNCisgKiBAYnJpZWYgR0FUVFMgQVBJIFNWQyBudW1iZXJzLg0KKyAqLw0KK2VudW0gQkxFX0dBVFRTX1NWQ1MNCit7DQorICBTRF9CTEVfR0FUVFNfU0VSVklDRV9BREQgPSBCTEVfR0FUVFNfU1ZDX0JBU0UsIC8qKjwgQWRkIGEgc2VydmljZS4gKi8NCisgIFNEX0JMRV9HQVRUU19JTkNMVURFX0FERCwgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBZGQgYW4gaW5jbHVkZWQgc2VydmljZS4gKi8NCisgIFNEX0JMRV9HQVRUU19DSEFSQUNURVJJU1RJQ19BREQsICAgICAgICAgICAgICAgLyoqPCBBZGQgYSBjaGFyYWN0ZXJpc3RpYy4gKi8NCisgIFNEX0JMRV9HQVRUU19ERVNDUklQVE9SX0FERCwgICAgICAgICAgICAgICAgICAgLyoqPCBBZGQgYSBnZW5lcmljIGF0dHJpYnV0ZS4gKi8NCisgIFNEX0JMRV9HQVRUU19WQUxVRV9TRVQsICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgYW4gYXR0cmlidXRlIHZhbHVlLiAqLw0KKyAgU0RfQkxFX0dBVFRTX1ZBTFVFX0dFVCwgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdldCBhbiBhdHRyaWJ1dGUgdmFsdWUuICovDQorICBTRF9CTEVfR0FUVFNfSFZYLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbiBvciBJbmRpY2F0aW9uLiAqLw0KKyAgU0RfQkxFX0dBVFRTX1NFUlZJQ0VfQ0hBTkdFRCwgICAgICAgICAgICAgICAgICAvKio8IFBlcmZvcm0gYSBTZXJ2aWNlIENoYW5nZWQgSW5kaWNhdGlvbiB0byBvbmUgb3IgbW9yZSBwZWVycy4gKi8NCisgIFNEX0JMRV9HQVRUU19SV19BVVRIT1JJWkVfUkVQTFksICAgICAgICAgICAgICAgLyoqPCBSZXBseSB0byBhbiBhdXRob3JpemF0aW9uIHJlcXVlc3QgZm9yIGEgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24gb24gb25lIG9yIG1vcmUgYXR0cmlidXRlcy4gKi8NCisgIFNEX0JMRV9HQVRUU19TWVNfQVRUUl9TRVQsICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgdGhlIHBlcnNpc3RlbnQgc3lzdGVtIGF0dHJpYnV0ZXMgZm9yIGEgY29ubmVjdGlvbi4gKi8NCisgIFNEX0JMRV9HQVRUU19TWVNfQVRUUl9HRVQsICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZXRyaWV2ZSB0aGUgcGVyc2lzdGVudCBzeXN0ZW0gYXR0cmlidXRlcy4gKi8NCisgIFNEX0JMRV9HQVRUU19JTklUSUFMX1VTRVJfSEFORExFX0dFVCwgICAgICAgICAgLyoqPCBSZXRyaWV2ZSB0aGUgZmlyc3QgdmFsaWQgdXNlciBoYW5kbGUuICovDQorICBTRF9CTEVfR0FUVFNfQVRUUl9HRVQsICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmV0cmlldmUgdGhlIFVVSUQgYW5kL29yIG1ldGFkYXRhIG9mIGFuIGF0dHJpYnV0ZS4gKi8NCisgIFNEX0JMRV9HQVRUU19FWENIQU5HRV9NVFVfUkVQTFkgICAgICAgICAgICAgICAgLyoqPCBSZXBseSB0byBFeGNoYW5nZSBNVFUgUmVxdWVzdC4gKi8NCit9Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBHQVRUIFNlcnZlciBFdmVudCBJRHMuDQorICovDQorZW51bSBCTEVfR0FUVFNfRVZUUw0KK3sNCisgIEJMRV9HQVRUU19FVlRfV1JJVEUgPSBCTEVfR0FUVFNfRVZUX0JBU0UsICAgICAgIC8qKjwgV3JpdGUgb3BlcmF0aW9uIHBlcmZvcm1lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRzX2V2dF93cml0ZV90LiAgICAgICAgICAgICAgICAgKi8NCisgIEJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1QsICAgICAgICAgICAgIC8qKjwgUmVhZC9Xcml0ZSBBdXRob3JpemF0aW9uIHJlcXVlc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gUmVwbHkgd2l0aCBAcmVmIHNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkuIFxuIFNlZSBAcmVmIGJsZV9nYXR0c19ldnRfcndfYXV0aG9yaXplX3JlcXVlc3RfdC4gKi8NCisgIEJMRV9HQVRUU19FVlRfU1lTX0FUVFJfTUlTU0lORywgICAgICAgICAgICAgICAgIC8qKjwgQSBwZXJzaXN0ZW50IHN5c3RlbSBhdHRyaWJ1dGUgYWNjZXNzIGlzIHBlbmRpbmcuICAgICAgICAgICAgICAgICAgICAgXG4gUmVzcG9uZCB3aXRoIEByZWYgc2RfYmxlX2dhdHRzX3N5c19hdHRyX3NldC4gICAgIFxuIFNlZSBAcmVmIGJsZV9nYXR0c19ldnRfc3lzX2F0dHJfbWlzc2luZ190LiAgICAgKi8NCisgIEJMRV9HQVRUU19FVlRfSFZDLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSGFuZGxlIFZhbHVlIENvbmZpcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRzX2V2dF9odmNfdC4gICAgICAgICAgICAgICAgICAgKi8NCisgIEJMRV9HQVRUU19FVlRfU0NfQ09ORklSTSwgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU2VydmljZSBDaGFuZ2VkIENvbmZpcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gTm8gYWRkaXRpb25hbCBldmVudCBzdHJ1Y3R1cmUgYXBwbGllcy4gICAgICAgICAgKi8NCisgIEJMRV9HQVRUU19FVlRfRVhDSEFOR0VfTVRVX1JFUVVFU1QsICAgICAgICAgICAgIC8qKjwgRXhjaGFuZ2UgTVRVIFJlcXVlc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gUmVwbHkgd2l0aCBAcmVmIHNkX2JsZV9nYXR0c19leGNoYW5nZV9tdHVfcmVwbHkuIFxuIFNlZSBAcmVmIGJsZV9nYXR0c19ldnRfZXhjaGFuZ2VfbXR1X3JlcXVlc3RfdC4gKi8NCisgIEJMRV9HQVRUU19FVlRfVElNRU9VVCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVlciBmYWlsZWQgdG8gcmVzcG9uZCB0byBhbiBBVFQgcmVxdWVzdCBpbiB0aW1lLiAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRzX2V2dF90aW1lb3V0X3QuICAgICAgICAgICAgICAgKi8NCisgIEJMRV9HQVRUU19FVlRfSFZOX1RYX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgIC8qKjwgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbiB0cmFuc21pc3Npb24gY29tcGxldGUuICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRzX2V2dF9odm5fdHhfY29tcGxldGVfdC4gICAgICAgKi8NCit9Ow0KKw0KKy8qKkBicmllZiBHQVRUUyBDb25maWd1cmF0aW9uIElEcy4NCisgKg0KKyAqIElEcyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZ5IGEgR0FUVFMgY29uZmlndXJhdGlvbi4NCisgKi8NCitlbnVtIEJMRV9HQVRUU19DRkdTDQorew0KKyAgQkxFX0dBVFRTX0NGR19TRVJWSUNFX0NIQU5HRUQgPSBCTEVfR0FUVFNfQ0ZHX0JBU0UsIC8qKjwgU2VydmljZSBjaGFuZ2VkIGNvbmZpZ3VyYXRpb24uICovDQorICBCTEVfR0FUVFNfQ0ZHX0FUVFJfVEFCX1NJWkUsICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgdGFibGUgc2l6ZSBjb25maWd1cmF0aW9uLiAqLw0KK307DQorDQorLyoqIEB9ICovDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9HQVRUU19ERUZJTkVTIERlZmluZXMNCisgKiBAeyAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0VSUk9SU19HQVRUUyBTVkMgcmV0dXJuIHZhbHVlcyBzcGVjaWZpYyB0byBHQVRUUw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfRVJST1JfR0FUVFNfSU5WQUxJRF9BVFRSX1RZUEUgICAoTlJGX0dBVFRTX0VSUl9CQVNFICsgMHgwMDApIC8qKjwgSW52YWxpZCBhdHRyaWJ1dGUgdHlwZS4gKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9HQVRUU19TWVNfQVRUUl9NSVNTSU5HICAgIChOUkZfR0FUVFNfRVJSX0JBU0UgKyAweDAwMSkgLyoqPCBTeXN0ZW0gQXR0cmlidXRlcyBtaXNzaW5nLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX0FUVFJfTEVOU19NQVggTWF4aW11bSBhdHRyaWJ1dGUgbGVuZ3Rocw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FUVFNfRklYX0FUVFJfTEVOX01BWCAoNTEwKSAgLyoqPCBNYXhpbXVtIGxlbmd0aCBmb3IgZml4ZWQgbGVuZ3RoIEF0dHJpYnV0ZSBWYWx1ZXMuICovDQorI2RlZmluZSBCTEVfR0FUVFNfVkFSX0FUVFJfTEVOX01BWCAoNTEyKSAgLyoqPCBNYXhpbXVtIGxlbmd0aCBmb3IgdmFyaWFibGUgbGVuZ3RoIEF0dHJpYnV0ZSBWYWx1ZXMuICovDQorLyoqIEB9ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVFNfU1JWQ19UWVBFUyBHQVRUIFNlcnZlciBTZXJ2aWNlIFR5cGVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVRUU19TUlZDX1RZUEVfSU5WQUxJRCAgICAgICAgICAweDAwICAvKio8IEludmFsaWQgU2VydmljZSBUeXBlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX1NSVkNfVFlQRV9QUklNQVJZICAgICAgICAgIDB4MDEgIC8qKjwgUHJpbWFyeSBTZXJ2aWNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX1NSVkNfVFlQRV9TRUNPTkRBUlkgICAgICAgIDB4MDIgIC8qKjwgU2Vjb25kYXJ5IFR5cGUuICovDQorLyoqIEB9ICovDQorDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVFNfQVRUUl9UWVBFUyBHQVRUIFNlcnZlciBBdHRyaWJ1dGUgVHlwZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX0FUVFJfVFlQRV9JTlZBTElEICAgICAgICAgMHgwMCAgLyoqPCBJbnZhbGlkIEF0dHJpYnV0ZSBUeXBlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX0FUVFJfVFlQRV9QUklNX1NSVkNfREVDTCAgMHgwMSAgLyoqPCBQcmltYXJ5IFNlcnZpY2UgRGVjbGFyYXRpb24uICovDQorI2RlZmluZSBCTEVfR0FUVFNfQVRUUl9UWVBFX1NFQ19TUlZDX0RFQ0wgICAweDAyICAvKio8IFNlY29uZGFyeSBTZXJ2aWNlIERlY2xhcmF0aW9uLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX0FUVFJfVFlQRV9JTkNfREVDTCAgICAgICAgMHgwMyAgLyoqPCBJbmNsdWRlIERlY2xhcmF0aW9uLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX0FUVFJfVFlQRV9DSEFSX0RFQ0wgICAgICAgMHgwNCAgLyoqPCBDaGFyYWN0ZXJpc3RpYyBEZWNsYXJhdGlvbi4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19BVFRSX1RZUEVfQ0hBUl9WQUwgICAgICAgIDB4MDUgIC8qKjwgQ2hhcmFjdGVyaXN0aWMgVmFsdWUuICovDQorI2RlZmluZSBCTEVfR0FUVFNfQVRUUl9UWVBFX0RFU0MgICAgICAgICAgICAweDA2ICAvKio8IERlc2NyaXB0b3IuICovDQorI2RlZmluZSBCTEVfR0FUVFNfQVRUUl9UWVBFX09USEVSICAgICAgICAgICAweDA3ICAvKio8IE90aGVyLCBub24tR0FUVCBzcGVjaWZpYyB0eXBlLiAqLw0KKy8qKiBAfSAqLw0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX09QUyBHQVRUIFNlcnZlciBPcGVyYXRpb25zDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVRUU19PUF9JTlZBTElEICAgICAgICAgICAgICAgIDB4MDAgIC8qKjwgSW52YWxpZCBPcGVyYXRpb24uICovDQorI2RlZmluZSBCTEVfR0FUVFNfT1BfV1JJVEVfUkVRICAgICAgICAgICAgICAweDAxICAvKio8IFdyaXRlIFJlcXVlc3QuICovDQorI2RlZmluZSBCTEVfR0FUVFNfT1BfV1JJVEVfQ01EICAgICAgICAgICAgICAweDAyICAvKio8IFdyaXRlIENvbW1hbmQuICovDQorI2RlZmluZSBCTEVfR0FUVFNfT1BfU0lHTl9XUklURV9DTUQgICAgICAgICAweDAzICAvKio8IFNpZ25lZCBXcml0ZSBDb21tYW5kLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX09QX1BSRVBfV1JJVEVfUkVRICAgICAgICAgMHgwNCAgLyoqPCBQcmVwYXJlIFdyaXRlIFJlcXVlc3QuICovDQorI2RlZmluZSBCTEVfR0FUVFNfT1BfRVhFQ19XUklURV9SRVFfQ0FOQ0VMICAweDA1ICAvKio8IEV4ZWN1dGUgV3JpdGUgUmVxdWVzdDogQ2FuY2VsIGFsbCBwcmVwYXJlZCB3cml0ZXMuICovDQorI2RlZmluZSBCTEVfR0FUVFNfT1BfRVhFQ19XUklURV9SRVFfTk9XICAgICAweDA2ICAvKio8IEV4ZWN1dGUgV3JpdGUgUmVxdWVzdDogSW1tZWRpYXRlbHkgZXhlY3V0ZSBhbGwgcHJlcGFyZWQgd3JpdGVzLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX1ZMT0NTIEdBVFQgVmFsdWUgTG9jYXRpb25zDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVRUU19WTE9DX0lOVkFMSUQgICAgICAgMHgwMCAgLyoqPCBJbnZhbGlkIExvY2F0aW9uLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX1ZMT0NfU1RBQ0sgICAgICAgICAweDAxICAvKio8IEF0dHJpYnV0ZSBWYWx1ZSBpcyBsb2NhdGVkIGluIHN0YWNrIG1lbW9yeSwgbm8gdXNlciBtZW1vcnkgaXMgcmVxdWlyZWQuICovDQorI2RlZmluZSBCTEVfR0FUVFNfVkxPQ19VU0VSICAgICAgICAgIDB4MDIgIC8qKjwgQXR0cmlidXRlIFZhbHVlIGlzIGxvY2F0ZWQgaW4gdXNlciBtZW1vcnkuIFRoaXMgcmVxdWlyZXMgdGhlIHVzZXIgdG8gbWFpbnRhaW4gYSB2YWxpZCBidWZmZXIgdGhyb3VnaCB0aGUgbGlmZXRpbWUgb2YgdGhlIGF0dHJpYnV0ZSwgc2luY2UgdGhlIHN0YWNrDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCByZWFkIGFuZCB3cml0ZSBkaXJlY3RseSB0byB0aGUgbWVtb3J5IHVzaW5nIHRoZSBwb2ludGVyIHByb3ZpZGVkIGluIHRoZSBBUElzLiBUaGVyZSBhcmUgbm8gYWxpZ25tZW50IHJlcXVpcmVtZW50cyBmb3IgdGhlIGJ1ZmZlci4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9HQVRUU19BVVRIT1JJWkVfVFlQRVMgR0FUVCBTZXJ2ZXIgQXV0aG9yaXphdGlvbiBUeXBlcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FUVFNfQVVUSE9SSVpFX1RZUEVfSU5WQUxJRCAgICAweDAwICAvKio8IEludmFsaWQgVHlwZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19BVVRIT1JJWkVfVFlQRV9SRUFEICAgICAgIDB4MDEgIC8qKjwgQXV0aG9yaXplIGEgUmVhZCBPcGVyYXRpb24uICovDQorI2RlZmluZSBCTEVfR0FUVFNfQVVUSE9SSVpFX1RZUEVfV1JJVEUgICAgICAweDAyICAvKio8IEF1dGhvcml6ZSBhIFdyaXRlIFJlcXVlc3QgT3BlcmF0aW9uLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX1NZU19BVFRSX0ZMQUdTIFN5c3RlbSBBdHRyaWJ1dGUgRmxhZ3MNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX1NZU19BVFRSX0ZMQUdfU1lTX1NSVkNTICgxIDw8IDApICAvKio8IFJlc3RyaWN0IHN5c3RlbSBhdHRyaWJ1dGVzIHRvIHN5c3RlbSBzZXJ2aWNlcyBvbmx5LiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX1NZU19BVFRSX0ZMQUdfVVNSX1NSVkNTICgxIDw8IDEpICAvKio8IFJlc3RyaWN0IHN5c3RlbSBhdHRyaWJ1dGVzIHRvIHVzZXIgc2VydmljZXMgb25seS4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9HQVRUU19TRVJWSUNFX0NIQU5HRUQgU2VydmljZSBDaGFuZ2VkIEluY2x1c2lvbiBWYWx1ZXMNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX1NFUlZJQ0VfQ0hBTkdFRF9ERUZBVUxUICAgKDEpICAgLyoqPCBEZWZhdWx0IGlzIHRvIGluY2x1ZGUgdGhlIFNlcnZpY2UgQ2hhbmdlZCBjaGFyYWN0ZXJpc3RpYyBpbiB0aGUgQXR0cmlidXRlIFRhYmxlLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX0FUVFJfVEFCX1NJWkUgQXR0cmlidXRlIFRhYmxlIHNpemUNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX0FUVFJfVEFCX1NJWkVfTUlOICAgICAgICAgKDI0OCkgIC8qKjwgTWluaW11bSBBdHRyaWJ1dGUgVGFibGUgc2l6ZSAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX0FUVFJfVEFCX1NJWkVfREVGQVVMVCAgICAgKDE0MDgpIC8qKjwgRGVmYXVsdCBBdHRyaWJ1dGUgVGFibGUgc2l6ZS4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9HQVRUU19ERUZBVUxUUyBHQVRUIFNlcnZlciBkZWZhdWx0cw0KKyAqIEB7DQorICovDQorI2RlZmluZSBCTEVfR0FUVFNfSFZOX1RYX1FVRVVFX1NJWkVfREVGQVVMVCAgMSAvKio8IERlZmF1bHQgbnVtYmVyIG9mIEhhbmRsZSBWYWx1ZSBOb3RpZmljYXRpb25zIHRoYXQgY2FuIGJlIHF1ZXVlZCBmb3IgdHJhbnNtaXNzaW9uLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBCTEVfR0FUVFNfU1RSVUNUVVJFUyBTdHJ1Y3R1cmVzDQorICogQHsgKi8NCisNCisvKioNCisgKiBAYnJpZWYgQkxFIEdBVFRTIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCBzZXQgd2l0aCBAcmVmIHNkX2JsZV9jZmdfc2V0Lg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgaHZuX3R4X3F1ZXVlX3NpemU7IC8qKjwgTWluaW11bSBndWFyYW50ZWVkIG51bWJlciBvZiBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9ucyB0aGF0IGNhbiBiZSBxdWV1ZWQgZm9yIHRyYW5zbWlzc2lvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBAcmVmIEJMRV9HQVRUU19IVk5fVFhfUVVFVUVfU0laRV9ERUZBVUxUICovDQorfSBibGVfZ2F0dHNfY29ubl9jZmdfdDsNCisNCisvKipAYnJpZWYgQXR0cmlidXRlIG1ldGFkYXRhLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX2dhcF9jb25uX3NlY19tb2RlX3QgcmVhZF9wZXJtOyAgICAgICAvKio8IFJlYWQgcGVybWlzc2lvbnMuICovDQorICBibGVfZ2FwX2Nvbm5fc2VjX21vZGVfdCB3cml0ZV9wZXJtOyAgICAgIC8qKjwgV3JpdGUgcGVybWlzc2lvbnMuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgICB2bGVuICAgICAgIDoxOyAgIC8qKjwgVmFyaWFibGUgbGVuZ3RoIGF0dHJpYnV0ZS4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIHZsb2MgICAgICAgOjI7ICAgLyoqPCBWYWx1ZSBsb2NhdGlvbiwgc2VlIEByZWYgQkxFX0dBVFRTX1ZMT0NTLiovDQorICB1aW50OF90ICAgICAgICAgICAgICAgICByZF9hdXRoICAgIDoxOyAgIC8qKjwgUmVhZCBhdXRob3JpemF0aW9uIGFuZCB2YWx1ZSB3aWxsIGJlIHJlcXVlc3RlZCBmcm9tIHRoZSBhcHBsaWNhdGlvbiBvbiBldmVyeSByZWFkIG9wZXJhdGlvbi4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIHdyX2F1dGggICAgOjE7ICAgLyoqPCBXcml0ZSBhdXRob3JpemF0aW9uIHdpbGwgYmUgcmVxdWVzdGVkIGZyb20gdGhlIGFwcGxpY2F0aW9uIG9uIGV2ZXJ5IFdyaXRlIFJlcXVlc3Qgb3BlcmF0aW9uIChidXQgbm90IFdyaXRlIENvbW1hbmQpLiAqLw0KK30gYmxlX2dhdHRzX2F0dHJfbWRfdDsNCisNCisNCisvKipAYnJpZWYgR0FUVCBBdHRyaWJ1dGUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfdXVpZF90IGNvbnN0ICAgICAgICAgICpwX3V1aWQ7ICAgICAgICAvKio8IFBvaW50ZXIgdG8gdGhlIGF0dHJpYnV0ZSBVVUlELiAqLw0KKyAgYmxlX2dhdHRzX2F0dHJfbWRfdCBjb25zdCAqcF9hdHRyX21kOyAgICAgLyoqPCBQb2ludGVyIHRvIHRoZSBhdHRyaWJ1dGUgbWV0YWRhdGEgc3RydWN0dXJlLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgaW5pdF9sZW47ICAgICAgLyoqPCBJbml0aWFsIGF0dHJpYnV0ZSB2YWx1ZSBsZW5ndGggaW4gYnl0ZXMuICovDQorICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICBpbml0X29mZnM7ICAgICAvKio8IEluaXRpYWwgYXR0cmlidXRlIHZhbHVlIG9mZnNldCBpbiBieXRlcy4gSWYgZGlmZmVyZW50IGZyb20gemVybywgdGhlIGZpcnN0IGluaXRfb2ZmcyBieXRlcyBvZiB0aGUgYXR0cmlidXRlIHZhbHVlIHdpbGwgYmUgbGVmdCB1bmluaXRpYWxpemVkLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgbWF4X2xlbjsgICAgICAgLyoqPCBNYXhpbXVtIGF0dHJpYnV0ZSB2YWx1ZSBsZW5ndGggaW4gYnl0ZXMsIHNlZSBAcmVmIEJMRV9HQVRUU19BVFRSX0xFTlNfTUFYIGZvciBtYXhpbXVtIHZhbHVlcy4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgKnBfdmFsdWU7ICAgICAgIC8qKjwgUG9pbnRlciB0byB0aGUgYXR0cmlidXRlIGRhdGEuIFBsZWFzZSBub3RlIHRoYXQgaWYgdGhlIEByZWYgQkxFX0dBVFRTX1ZMT0NfVVNFUiB2YWx1ZSBsb2NhdGlvbiBpcyBzZWxlY3RlZCBpbiB0aGUgYXR0cmlidXRlIG1ldGFkYXRhLCB0aGlzIHdpbGwgaGF2ZSB0byBwb2ludCB0byBhIGJ1ZmZlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHJlbWFpbnMgdmFsaWQgdGhyb3VnaCB0aGUgbGlmZXRpbWUgb2YgdGhlIGF0dHJpYnV0ZS4gVGhpcyBleGNsdWRlcyB1c2FnZSBvZiBhdXRvbWF0aWMgdmFyaWFibGVzIHRoYXQgbWF5IGdvIG91dCBvZiBzY29wZSBvciBhbnkgb3RoZXIgdGVtcG9yYXJ5IGxvY2F0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3RhY2sgbWF5IGFjY2VzcyB0aGF0IG1lbW9yeSBkaXJlY3RseSB3aXRob3V0IHRoZSBhcHBsaWNhdGlvbidzIGtub3dsZWRnZS4gRm9yIHdyaXRhYmxlIGNoYXJhY3RlcmlzdGljcywgdGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSBhIGxvY2F0aW9uIGluIGZsYXNoIG1lbW9yeS4qLw0KK30gYmxlX2dhdHRzX2F0dHJfdDsNCisNCisvKipAYnJpZWYgR0FUVCBBdHRyaWJ1dGUgVmFsdWUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgbGVuOyAgICAgICAgLyoqPCBMZW5ndGggaW4gYnl0ZXMgdG8gYmUgd3JpdHRlbiBvciByZWFkLiBMZW5ndGggaW4gYnl0ZXMgd3JpdHRlbiBvciByZWFkIGFmdGVyIHN1Y2Nlc3NmdWwgcmV0dXJuLiovDQorICB1aW50MTZfdCAgb2Zmc2V0OyAgICAgLyoqPCBBdHRyaWJ1dGUgdmFsdWUgb2Zmc2V0LiAqLw0KKyAgdWludDhfdCAgKnBfdmFsdWU7ICAgIC8qKjwgUG9pbnRlciB0byB3aGVyZSB2YWx1ZSBpcyBzdG9yZWQgb3Igd2lsbCBiZSBzdG9yZWQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB2YWx1ZSBpcyBzdG9yZWQgaW4gdXNlciBtZW1vcnksIG9ubHkgdGhlIGF0dHJpYnV0ZSBsZW5ndGggaXMgdXBkYXRlZCB3aGVuIHBfdmFsdWUgPT0gTlVMTC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0byBOVUxMIHdoZW4gcmVhZGluZyB0byBvYnRhaW4gdGhlIGNvbXBsZXRlIGxlbmd0aCBvZiB0aGUgYXR0cmlidXRlIHZhbHVlICovDQorfSBibGVfZ2F0dHNfdmFsdWVfdDsNCisNCisNCisvKipAYnJpZWYgR0FUVCBDaGFyYWN0ZXJpc3RpYyBQcmVzZW50YXRpb24gRm9ybWF0LiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICAgICAgICBmb3JtYXQ7ICAgICAgLyoqPCBGb3JtYXQgb2YgdGhlIHZhbHVlLCBzZWUgQHJlZiBCTEVfR0FUVF9DUEZfRk9STUFUUy4gKi8NCisgIGludDhfdCAgICAgICAgICAgZXhwb25lbnQ7ICAgIC8qKjwgRXhwb25lbnQgZm9yIGludGVnZXIgZGF0YSB0eXBlcy4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgdW5pdDsgICAgICAgIC8qKjwgVW5pdCBmcm9tIEJsdWV0b290aCBBc3NpZ25lZCBOdW1iZXJzLiAqLw0KKyAgdWludDhfdCAgICAgICAgICBuYW1lX3NwYWNlOyAgLyoqPCBOYW1lc3BhY2UgZnJvbSBCbHVldG9vdGggQXNzaWduZWQgTnVtYmVycywgc2VlIEByZWYgQkxFX0dBVFRfQ1BGX05BTUVTUEFDRVMuICovDQorICB1aW50MTZfdCAgICAgICAgIGRlc2M7ICAgICAgICAvKio8IE5hbWVzcGFjZSBkZXNjcmlwdGlvbiBmcm9tIEJsdWV0b290aCBBc3NpZ25lZCBOdW1iZXJzLCBzZWUgQHJlZiBCTEVfR0FUVF9DUEZfTkFNRVNQQUNFUy4gKi8NCit9IGJsZV9nYXR0c19jaGFyX3BmX3Q7DQorDQorDQorLyoqQGJyaWVmIEdBVFQgQ2hhcmFjdGVyaXN0aWMgbWV0YWRhdGEuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2F0dF9jaGFyX3Byb3BzX3QgICAgICAgY2hhcl9wcm9wczsgICAgICAgICAgICAgICAvKio8IENoYXJhY3RlcmlzdGljIFByb3BlcnRpZXMuICovDQorICBibGVfZ2F0dF9jaGFyX2V4dF9wcm9wc190ICAgY2hhcl9leHRfcHJvcHM7ICAgICAgICAgICAvKio8IENoYXJhY3RlcmlzdGljIEV4dGVuZGVkIFByb3BlcnRpZXMuICovDQorICB1aW50OF90IGNvbnN0ICAgICAgICAgICAgICAqcF9jaGFyX3VzZXJfZGVzYzsgICAgICAgICAvKio8IFBvaW50ZXIgdG8gYSBVVEYtOCBlbmNvZGVkIHN0cmluZyAobm9uLU5VTEwgdGVybWluYXRlZCksIE5VTEwgaWYgdGhlIGRlc2NyaXB0b3IgaXMgbm90IHJlcXVpcmVkLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgIGNoYXJfdXNlcl9kZXNjX21heF9zaXplOyAgLyoqPCBUaGUgbWF4aW11bSBzaXplIGluIGJ5dGVzIG9mIHRoZSB1c2VyIGRlc2NyaXB0aW9uIGRlc2NyaXB0b3IuICovDQorICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgY2hhcl91c2VyX2Rlc2Nfc2l6ZTsgICAgICAvKio8IFRoZSBzaXplIG9mIHRoZSB1c2VyIGRlc2NyaXB0aW9uLCBtdXN0IGJlIHNtYWxsZXIgb3IgZXF1YWwgdG8gY2hhcl91c2VyX2Rlc2NfbWF4X3NpemUuICovDQorICBibGVfZ2F0dHNfY2hhcl9wZl90IGNvbnN0ICAqcF9jaGFyX3BmOyAgICAgICAgICAgICAgICAvKio8IFBvaW50ZXIgdG8gYSBwcmVzZW50YXRpb24gZm9ybWF0IHN0cnVjdHVyZSBvciBOVUxMIGlmIHRoZSBDUEYgZGVzY3JpcHRvciBpcyBub3QgcmVxdWlyZWQuICovDQorICBibGVfZ2F0dHNfYXR0cl9tZF90IGNvbnN0ICAqcF91c2VyX2Rlc2NfbWQ7ICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBtZXRhZGF0YSBmb3IgdGhlIFVzZXIgRGVzY3JpcHRpb24gZGVzY3JpcHRvciwgb3IgTlVMTCBmb3IgZGVmYXVsdCB2YWx1ZXMuICovDQorICBibGVfZ2F0dHNfYXR0cl9tZF90IGNvbnN0ICAqcF9jY2NkX21kOyAgICAgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBtZXRhZGF0YSBmb3IgdGhlIENsaWVudCBDaGFyYWN0ZXJpc3RpYyBDb25maWd1cmF0aW9uIERlc2NyaXB0b3IsIG9yIE5VTEwgZm9yIGRlZmF1bHQgdmFsdWVzLiAqLw0KKyAgYmxlX2dhdHRzX2F0dHJfbWRfdCBjb25zdCAgKnBfc2NjZF9tZDsgICAgICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgbWV0YWRhdGEgZm9yIHRoZSBTZXJ2ZXIgQ2hhcmFjdGVyaXN0aWMgQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yLCBvciBOVUxMIGZvciBkZWZhdWx0IHZhbHVlcy4gKi8NCit9IGJsZV9nYXR0c19jaGFyX21kX3Q7DQorDQorDQorLyoqQGJyaWVmIEdBVFQgQ2hhcmFjdGVyaXN0aWMgRGVmaW5pdGlvbiBIYW5kbGVzLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgdmFsdWVfaGFuZGxlOyAgICAgICAvKio8IEhhbmRsZSB0byB0aGUgY2hhcmFjdGVyaXN0aWMgdmFsdWUuICovDQorICB1aW50MTZfdCAgICAgICAgICB1c2VyX2Rlc2NfaGFuZGxlOyAgIC8qKjwgSGFuZGxlIHRvIHRoZSBVc2VyIERlc2NyaXB0aW9uIGRlc2NyaXB0b3IsIG9yIEByZWYgQkxFX0dBVFRfSEFORExFX0lOVkFMSUQgaWYgbm90IHByZXNlbnQuICovDQorICB1aW50MTZfdCAgICAgICAgICBjY2NkX2hhbmRsZTsgICAgICAgIC8qKjwgSGFuZGxlIHRvIHRoZSBDbGllbnQgQ2hhcmFjdGVyaXN0aWMgQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yLCBvciBAcmVmIEJMRV9HQVRUX0hBTkRMRV9JTlZBTElEIGlmIG5vdCBwcmVzZW50LiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgc2NjZF9oYW5kbGU7ICAgICAgICAvKio8IEhhbmRsZSB0byB0aGUgU2VydmVyIENoYXJhY3RlcmlzdGljIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvciwgb3IgQHJlZiBCTEVfR0FUVF9IQU5ETEVfSU5WQUxJRCBpZiBub3QgcHJlc2VudC4gKi8NCit9IGJsZV9nYXR0c19jaGFyX2hhbmRsZXNfdDsNCisNCisNCisvKipAYnJpZWYgR0FUVCBIVnggcGFyYW1ldGVycy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgIGhhbmRsZTsgICAgICAgICAgICAgLyoqPCBDaGFyYWN0ZXJpc3RpYyBWYWx1ZSBIYW5kbGUuICovDQorICB1aW50OF90ICAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgIC8qKjwgSW5kaWNhdGlvbiBvciBOb3RpZmljYXRpb24sIHNlZSBAcmVmIEJMRV9HQVRUX0hWWF9UWVBFUy4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgIG9mZnNldDsgICAgICAgICAgICAgLyoqPCBPZmZzZXQgd2l0aGluIHRoZSBhdHRyaWJ1dGUgdmFsdWUuICovDQorICB1aW50MTZfdCAgICAgICAgICpwX2xlbjsgICAgICAgICAgICAgIC8qKjwgTGVuZ3RoIGluIGJ5dGVzIHRvIGJlIHdyaXR0ZW4sIGxlbmd0aCBpbiBieXRlcyB3cml0dGVuIGFmdGVyIHN1Y2Nlc3NmdWwgcmV0dXJuLiAqLw0KKyAgdWludDhfdCBjb25zdCAgICAqcF9kYXRhOyAgICAgICAgICAgICAvKio8IEFjdHVhbCBkYXRhIGNvbnRlbnQsIHVzZSBOVUxMIHRvIHVzZSB0aGUgY3VycmVudCBhdHRyaWJ1dGUgdmFsdWUuICovDQorfSBibGVfZ2F0dHNfaHZ4X3BhcmFtc190Ow0KKw0KKy8qKkBicmllZiBHQVRUIEF1dGhvcml6YXRpb24gcGFyYW1ldGVycy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgIGdhdHRfc3RhdHVzOyAgICAgICAgLyoqPCBHQVRUIHN0YXR1cyBjb2RlIGZvciB0aGUgb3BlcmF0aW9uLCBzZWUgQHJlZiBCTEVfR0FUVF9TVEFUVVNfQ09ERVMuICovDQorICB1aW50OF90ICAgICAgICAgICB1cGRhdGUgOiAxOyAgICAgICAgIC8qKjwgSWYgc2V0LCBkYXRhIHN1cHBsaWVkIGluIHBfZGF0YSB3aWxsIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBhdHRyaWJ1dGUgdmFsdWUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIG5vdGUgdGhhdCBmb3IgQHJlZiBCTEVfR0FUVFNfQVVUSE9SSVpFX1RZUEVfV1JJVEUgb3BlcmF0aW9ucyB0aGlzIGJpdCBtdXN0IGFsd2F5cyBiZSBzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiBuZWVkcyB0byBiZSBzdG9yZWQgYW5kIGxhdGVyIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgIG9mZnNldDsgICAgICAgICAgICAgLyoqPCBPZmZzZXQgb2YgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBiZWluZyB1cGRhdGVkLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgbGVuOyAgICAgICAgICAgICAgICAvKio8IExlbmd0aCBpbiBieXRlcyBvZiB0aGUgdmFsdWUgaW4gcF9kYXRhIHBvaW50ZXIsIHNlZSBAcmVmIEJMRV9HQVRUU19BVFRSX0xFTlNfTUFYLiAqLw0KKyAgdWludDhfdCBjb25zdCAgICAqcF9kYXRhOyAgICAgICAgICAgICAvKio8IFBvaW50ZXIgdG8gbmV3IHZhbHVlIHVzZWQgdG8gdXBkYXRlIHRoZSBhdHRyaWJ1dGUgdmFsdWUuICovDQorfSBibGVfZ2F0dHNfYXV0aG9yaXplX3BhcmFtc190Ow0KKw0KKy8qKkBicmllZiBHQVRUIFJlYWQgb3IgV3JpdGUgQXV0aG9yaXplIFJlcGx5IHBhcmFtZXRlcnMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7ICAgLyoqPCBUeXBlIG9mIGF1dGhvcml6ZSBvcGVyYXRpb24sIHNlZSBAcmVmIEJMRV9HQVRUU19BVVRIT1JJWkVfVFlQRVMuICovDQorICB1bmlvbiB7DQorICAgIGJsZV9nYXR0c19hdXRob3JpemVfcGFyYW1zX3QgICAgICAgIHJlYWQ7ICAgLyoqPCBSZWFkIGF1dGhvcml6YXRpb24gcGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRzX2F1dGhvcml6ZV9wYXJhbXNfdCAgICAgICAgd3JpdGU7ICAvKio8IFdyaXRlIGF1dGhvcml6YXRpb24gcGFyYW1ldGVycy4gKi8NCisgIH0gcGFyYW1zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlcGx5IFBhcmFtZXRlcnMuICovDQorfSBibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5X3BhcmFtc190Ow0KKw0KKy8qKkBicmllZiBTZXJ2aWNlIENoYW5nZWQgSW5jbHVzaW9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgc2V0IHdpdGggQHJlZiBzZF9ibGVfY2ZnX3NldC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3Qgc2VydmljZV9jaGFuZ2VkIDogMTsgICAgICAgLyoqPCBJZiAxLCBpbmNsdWRlIHRoZSBTZXJ2aWNlIENoYW5nZWQgY2hhcmFjdGVyaXN0aWMgaW4gdGhlIEF0dHJpYnV0ZSBUYWJsZS4gRGVmYXVsdCBpcyBAcmVmIEJMRV9HQVRUU19TRVJWSUNFX0NIQU5HRURfREVGQVVMVC4gKi8NCit9IGJsZV9nYXR0c19jZmdfc2VydmljZV9jaGFuZ2VkX3Q7DQorDQorLyoqQGJyaWVmIEF0dHJpYnV0ZSB0YWJsZSBzaXplIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgc2V0IHdpdGggQHJlZiBzZF9ibGVfY2ZnX3NldC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9MRU5HVEggT25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgc3BlY2lmaWVkIEF0dHJpYnV0ZSBUYWJsZSBzaXplIGlzIHRvbyBzbWFsbC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltdW0gYWNjZXB0YWJsZSBzaXplIGlzIGRlZmluZWQgYnkgQHJlZiBCTEVfR0FUVFNfQVRUUl9UQUJfU0laRV9NSU4uDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBzcGVjaWZpZWQgQXR0cmlidXRlIFRhYmxlIHNpemUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNC4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IGF0dHJfdGFiX3NpemU7IC8qKjwgQXR0cmlidXRlIHRhYmxlIHNpemUuIERlZmF1bHQgaXMgQHJlZiBCTEVfR0FUVFNfQVRUUl9UQUJfU0laRV9ERUZBVUxULCBtaW5pbXVtIGlzIEByZWYgQkxFX0dBVFRTX0FUVFJfVEFCX1NJWkVfTUlOLiAqLw0KK30gYmxlX2dhdHRzX2NmZ19hdHRyX3RhYl9zaXplX3Q7DQorDQorLyoqQGJyaWVmIENvbmZpZyBzdHJ1Y3R1cmUgZm9yIEdBVFRTIGNvbmZpZ3VyYXRpb25zLiAqLw0KK3R5cGVkZWYgdW5pb24NCit7DQorICBibGVfZ2F0dHNfY2ZnX3NlcnZpY2VfY2hhbmdlZF90IHNlcnZpY2VfY2hhbmdlZDsgIC8qKjwgSW5jbHVkZSBzZXJ2aWNlIGNoYW5nZWQgY2hhcmFjdGVyaXN0aWMsIGNmZ19pZCBpcyBAcmVmIEJMRV9HQVRUU19DRkdfU0VSVklDRV9DSEFOR0VELiAqLw0KKyAgYmxlX2dhdHRzX2NmZ19hdHRyX3RhYl9zaXplX3QgYXR0cl90YWJfc2l6ZTsgICAgICAvKio8IEF0dHJpYnV0ZSB0YWJsZSBzaXplLCBjZmdfaWQgaXMgQHJlZiBCTEVfR0FUVFNfQ0ZHX0FUVFJfVEFCX1NJWkUuICovDQorfSBibGVfZ2F0dHNfY2ZnX3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVFNfRVZUX1dSSVRFLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgIGhhbmRsZTsgICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgSGFuZGxlLiAqLw0KKyAgYmxlX3V1aWRfdCAgICAgICAgICAgICAgICAgIHV1aWQ7ICAgICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgVVVJRC4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICBvcDsgICAgICAgICAgICAgICAgIC8qKjwgVHlwZSBvZiB3cml0ZSBvcGVyYXRpb24sIHNlZSBAcmVmIEJMRV9HQVRUU19PUFMuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgYXV0aF9yZXF1aXJlZDsgICAgICAvKio8IFdyaXRpbmcgb3BlcmF0aW9uIGRlZmVycmVkIGR1ZSB0byBhdXRob3JpemF0aW9uIHJlcXVpcmVtZW50LiBBcHBsaWNhdGlvbiBtYXkgdXNlIEByZWYgc2RfYmxlX2dhdHRzX3ZhbHVlX3NldCB0byBmaW5hbGl6ZSB0aGUgd3JpdGluZyBvcGVyYXRpb24uICovDQorICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgICAvKio8IE9mZnNldCBmb3IgdGhlIHdyaXRlIG9wZXJhdGlvbi4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBsZW47ICAgICAgICAgICAgICAgIC8qKjwgTGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBkYXRhLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV07ICAgICAgICAgICAgLyoqPCBSZWNlaXZlZCBkYXRhLiBAbm90ZSBUaGlzIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5LiBUaGUgc2l6ZSBvZiAxIGluZGljYXRlZCBpcyBvbmx5IGEgcGxhY2Vob2xkZXIgZm9yIGNvbXBpbGF0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZXZ0X2dldCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGV2ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBsZW5ndGggYXJyYXkgbWVtYmVycy4gKi8NCit9IGJsZV9nYXR0c19ldnRfd3JpdGVfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3Vic3RydWN0dXJlIGZvciBhdXRob3JpemVkIHJlYWQgcmVxdWVzdHMsIHNlZSBAcmVmIGJsZV9nYXR0c19ldnRfcndfYXV0aG9yaXplX3JlcXVlc3RfdC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBoYW5kbGU7ICAgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIEhhbmRsZS4gKi8NCisgIGJsZV91dWlkX3QgICAgICAgICAgICAgICAgICB1dWlkOyAgICAgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIFVVSUQuICovDQorICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgICAvKio8IE9mZnNldCBmb3IgdGhlIHJlYWQgb3BlcmF0aW9uLiAqLw0KK30gYmxlX2dhdHRzX2V2dF9yZWFkX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNULiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgIC8qKjwgVHlwZSBvZiBhdXRob3JpemUgb3BlcmF0aW9uLCBzZWUgQHJlZiBCTEVfR0FUVFNfQVVUSE9SSVpFX1RZUEVTLiAqLw0KKyAgdW5pb24gew0KKyAgICBibGVfZ2F0dHNfZXZ0X3JlYWRfdCAgICAgIHJlYWQ7ICAgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIFJlYWQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRzX2V2dF93cml0ZV90ICAgICB3cml0ZTsgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBXcml0ZSBQYXJhbWV0ZXJzLiAqLw0KKyAgfSByZXF1ZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVxdWVzdCBQYXJhbWV0ZXJzLiAqLw0KK30gYmxlX2dhdHRzX2V2dF9yd19hdXRob3JpemVfcmVxdWVzdF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRTX0VWVF9TWVNfQVRUUl9NSVNTSU5HLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBoaW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSGludCAoY3VycmVudGx5IHVudXNlZCkuICovDQorfSBibGVfZ2F0dHNfZXZ0X3N5c19hdHRyX21pc3NpbmdfdDsNCisNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUU19FVlRfSFZDLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgaGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgSGFuZGxlLiAqLw0KK30gYmxlX2dhdHRzX2V2dF9odmNfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUU19FVlRfRVhDSEFOR0VfTVRVX1JFUVVFU1QuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICBjbGllbnRfcnhfbXR1OyAgICAgICAgICAgICAgLyoqPCBDbGllbnQgUlggTVRVIHNpemUuICovDQorfSBibGVfZ2F0dHNfZXZ0X2V4Y2hhbmdlX210dV9yZXF1ZXN0X3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVFNfRVZUX1RJTUVPVVQuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgIHNyYzsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGltZW91dCBzb3VyY2UsIHNlZSBAcmVmIEJMRV9HQVRUX1RJTUVPVVRfU09VUkNFUy4gKi8NCit9IGJsZV9nYXR0c19ldnRfdGltZW91dF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRTX0VWVF9IVk5fVFhfQ09NUExFVEUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgIGNvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIG5vdGlmaWNhdGlvbiB0cmFuc21pc3Npb25zIGNvbXBsZXRlZC4gKi8NCit9IGJsZV9nYXR0c19ldnRfaHZuX3R4X2NvbXBsZXRlX3Q7DQorDQorLyoqQGJyaWVmIEdBVFRTIGV2ZW50IHN0cnVjdHVyZS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90IGNvbm5faGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBIYW5kbGUgb24gd2hpY2ggdGhlIGV2ZW50IG9jY3VycmVkLiAqLw0KKyAgdW5pb24NCisgIHsNCisgICAgYmxlX2dhdHRzX2V2dF93cml0ZV90ICAgICAgICAgICAgICAgICB3cml0ZTsgICAgICAgICAgICAgICAgIC8qKjwgV3JpdGUgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRzX2V2dF9yd19hdXRob3JpemVfcmVxdWVzdF90ICBhdXRob3JpemVfcmVxdWVzdDsgICAgIC8qKjwgUmVhZCBvciBXcml0ZSBBdXRob3JpemUgUmVxdWVzdCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dHNfZXZ0X3N5c19hdHRyX21pc3NpbmdfdCAgICAgIHN5c19hdHRyX21pc3Npbmc7ICAgICAgLyoqPCBTeXN0ZW0gYXR0cmlidXRlcyBtaXNzaW5nLiAqLw0KKyAgICBibGVfZ2F0dHNfZXZ0X2h2Y190ICAgICAgICAgICAgICAgICAgIGh2YzsgICAgICAgICAgICAgICAgICAgLyoqPCBIYW5kbGUgVmFsdWUgQ29uZmlybWF0aW9uIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXR0c19ldnRfZXhjaGFuZ2VfbXR1X3JlcXVlc3RfdCAgZXhjaGFuZ2VfbXR1X3JlcXVlc3Q7ICAvKio8IEV4Y2hhbmdlIE1UVSBSZXF1ZXN0IEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXR0c19ldnRfdGltZW91dF90ICAgICAgICAgICAgICAgdGltZW91dDsgICAgICAgICAgICAgICAvKio8IFRpbWVvdXQgRXZlbnQuICovDQorICAgIGJsZV9nYXR0c19ldnRfaHZuX3R4X2NvbXBsZXRlX3QgICAgICAgaHZuX3R4X2NvbXBsZXRlOyAgICAgICAvKio8IEhhbmRsZSBWYWx1ZSBOb3RpZmljYXRpb24gdHJhbnNtaXNzaW9uIGNvbXBsZXRlIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICB9IHBhcmFtczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEV2ZW50IFBhcmFtZXRlcnMuICovDQorfSBibGVfZ2F0dHNfZXZ0X3Q7DQorDQorLyoqIEB9ICovDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9HQVRUU19GVU5DVElPTlMgRnVuY3Rpb25zDQorICogQHsgKi8NCisNCisvKipAYnJpZWYgQWRkIGEgc2VydmljZSBkZWNsYXJhdGlvbiB0byB0aGUgQXR0cmlidXRlIFRhYmxlLg0KKyAqDQorICogQG5vdGUgU2Vjb25kYXJ5IFNlcnZpY2VzIGFyZSBvbmx5IHJlbGV2YW50IGluIHRoZSBjb250ZXh0IG9mIHRoZSBlbnRpdHkgdGhhdCByZWZlcmVuY2VzIHRoZW0sIGl0IGlzIHRoZXJlZm9yZSBmb3JiaWRkZW4gdG8NCisgKiAgICAgICBhZGQgYSBzZWNvbmRhcnkgc2VydmljZSBkZWNsYXJhdGlvbiB0aGF0IGlzIG5vdCByZWZlcmVuY2VkIGJ5IGFub3RoZXIgc2VydmljZSBsYXRlciBpbiB0aGUgQXR0cmlidXRlIFRhYmxlLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19BVFRfVEFCTEVfUE9QX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSB0eXBlICAgICAgVG9nZ2xlcyBiZXR3ZWVuIHByaW1hcnkgYW5kIHNlY29uZGFyeSBzZXJ2aWNlcywgc2VlIEByZWYgQkxFX0dBVFRTX1NSVkNfVFlQRVMuDQorICogQHBhcmFtW2luXSBwX3V1aWQgICAgUG9pbnRlciB0byBzZXJ2aWNlIFVVSUQuDQorICogQHBhcmFtW291dF0gcF9oYW5kbGUgUG9pbnRlciB0byBhIDE2LWJpdCB3b3JkIHdoZXJlIHRoZSBhc3NpZ25lZCBoYW5kbGUgd2lsbCBiZSBzdG9yZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IGFkZGVkIGEgc2VydmljZSBkZWNsYXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLCBWZW5kb3IgU3BlY2lmaWMgVVVJRHMgbmVlZCB0byBiZSBwcmVzZW50IGluIHRoZSB0YWJsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0ZPUkJJRERFTiBGb3JiaWRkZW4gdmFsdWUgc3VwcGxpZWQsIGNlcnRhaW4gVVVJRHMgYXJlIHJlc2VydmVkIGZvciB0aGUgc3RhY2suDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT19NRU0gTm90IGVub3VnaCBtZW1vcnkgdG8gY29tcGxldGUgb3BlcmF0aW9uLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVFNfU0VSVklDRV9BREQsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dHNfc2VydmljZV9hZGQodWludDhfdCB0eXBlLCBibGVfdXVpZF90IGNvbnN0ICpwX3V1aWQsIHVpbnQxNl90ICpwX2hhbmRsZSkpOw0KKw0KKw0KKy8qKkBicmllZiBBZGQgYW4gaW5jbHVkZSBkZWNsYXJhdGlvbiB0byB0aGUgQXR0cmlidXRlIFRhYmxlLg0KKyAqDQorICogQG5vdGUgSXQgaXMgY3VycmVudGx5IG9ubHkgcG9zc2libGUgdG8gYWRkIGFuIGluY2x1ZGUgZGVjbGFyYXRpb24gdG8gdGhlIGxhc3QgYWRkZWQgc2VydmljZSAoaS5lLiBvbmx5IHNlcXVlbnRpYWwgcG9wdWxhdGlvbiBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4NCisgKg0KKyAqIEBub3RlIFRoZSBpbmNsdWRlZCBzZXJ2aWNlIG11c3QgYWxyZWFkeSBiZSBwcmVzZW50IGluIHRoZSBBdHRyaWJ1dGUgVGFibGUgcHJpb3IgdG8gdGhpcyBjYWxsLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19BVFRfVEFCTEVfUE9QX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBzZXJ2aWNlX2hhbmRsZSAgICBIYW5kbGUgb2YgdGhlIHNlcnZpY2Ugd2hlcmUgdGhlIGluY2x1ZGVkIHNlcnZpY2UgaXMgdG8gYmUgcGxhY2VkLCBpZiBAcmVmIEJMRV9HQVRUX0hBTkRMRV9JTlZBTElEIGlzIHVzZWQsIGl0IHdpbGwgYmUgcGxhY2VkIHNlcXVlbnRpYWxseS4NCisgKiBAcGFyYW1baW5dIGluY19zcnZjX2hhbmRsZSAgIEhhbmRsZSBvZiB0aGUgaW5jbHVkZWQgc2VydmljZS4NCisgKiBAcGFyYW1bb3V0XSBwX2luY2x1ZGVfaGFuZGxlIFBvaW50ZXIgdG8gYSAxNi1iaXQgd29yZCB3aGVyZSB0aGUgYXNzaWduZWQgaGFuZGxlIHdpbGwgYmUgc3RvcmVkLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBhZGRlZCBhbiBpbmNsdWRlIGRlY2xhcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQsIGhhbmRsZSB2YWx1ZXMgbmVlZCB0byBtYXRjaCBwcmV2aW91c2x5IGFkZGVkIHNlcnZpY2VzLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX1NVUFBPUlRFRCBGZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQsIHNlcnZpY2VfaGFuZGxlIG11c3QgYmUgdGhhdCBvZiB0aGUgbGFzdCBhZGRlZCBzZXJ2aWNlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOIEZvcmJpZGRlbiB2YWx1ZSBzdXBwbGllZCwgc2VsZiBpbmNsdXNpb25zIGFyZSBub3QgYWxsb3dlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PX01FTSBOb3QgZW5vdWdoIG1lbW9yeSB0byBjb21wbGV0ZSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfRk9VTkQgQXR0cmlidXRlIG5vdCBmb3VuZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRTX0lOQ0xVREVfQURELCB1aW50MzJfdCwgc2RfYmxlX2dhdHRzX2luY2x1ZGVfYWRkKHVpbnQxNl90IHNlcnZpY2VfaGFuZGxlLCB1aW50MTZfdCBpbmNfc3J2Y19oYW5kbGUsIHVpbnQxNl90ICpwX2luY2x1ZGVfaGFuZGxlKSk7DQorDQorDQorLyoqQGJyaWVmIEFkZCBhIGNoYXJhY3RlcmlzdGljIGRlY2xhcmF0aW9uLCBhIGNoYXJhY3RlcmlzdGljIHZhbHVlIGRlY2xhcmF0aW9uIGFuZCBvcHRpb25hbCBjaGFyYWN0ZXJpc3RpYyBkZXNjcmlwdG9yIGRlY2xhcmF0aW9ucyB0byB0aGUgQXR0cmlidXRlIFRhYmxlLg0KKyAqDQorICogQG5vdGUgSXQgaXMgY3VycmVudGx5IG9ubHkgcG9zc2libGUgdG8gYWRkIGEgY2hhcmFjdGVyaXN0aWMgdG8gdGhlIGxhc3QgYWRkZWQgc2VydmljZSAoaS5lLiBvbmx5IHNlcXVlbnRpYWwgcG9wdWxhdGlvbiBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4NCisgKg0KKyAqIEBub3RlIFNldmVyYWwgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRoZSBwYXJhbWV0ZXJzLCBzdWNoIGFzIG1hdGNoaW5nIHBlcm1pc3Npb25zIGJldHdlZW4gdGhlIHVzZXIgZGVzY3JpcHRpb24gZGVzY3JpcHRvciBhbmQgdGhlIHdyaXRhYmxlIGF1eGlsaWFyaWVzIGJpdHMsDQorICogICAgICAgcmVhZGFibGUgKG5vIHNlY3VyaXR5KSBhbmQgd3JpdGFibGUgKHNlbGVjdGFibGUpIENDQ0RzIGFuZCBTQ0NEcyBhbmQgdmFsaWQgcHJlc2VudGF0aW9uIGZvcm1hdCB2YWx1ZXMuDQorICoNCisgKiBAbm90ZSBJZiBubyBtZXRhZGF0YSBpcyBwcm92aWRlZCBmb3IgdGhlIG9wdGlvbmFsIGRlc2NyaXB0b3JzLCB0aGVpciBwZXJtaXNzaW9ucyB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUgY2hhcmFjdGVyaXN0aWMgcGVybWlzc2lvbnMuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX0FUVF9UQUJMRV9QT1BfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIHNlcnZpY2VfaGFuZGxlICAgIEhhbmRsZSBvZiB0aGUgc2VydmljZSB3aGVyZSB0aGUgY2hhcmFjdGVyaXN0aWMgaXMgdG8gYmUgcGxhY2VkLCBpZiBAcmVmIEJMRV9HQVRUX0hBTkRMRV9JTlZBTElEIGlzIHVzZWQsIGl0IHdpbGwgYmUgcGxhY2VkIHNlcXVlbnRpYWxseS4NCisgKiBAcGFyYW1baW5dIHBfY2hhcl9tZCAgICAgICAgIENoYXJhY3RlcmlzdGljIG1ldGFkYXRhLg0KKyAqIEBwYXJhbVtpbl0gcF9hdHRyX2NoYXJfdmFsdWUgUG9pbnRlciB0byB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjaGFyYWN0ZXJpc3RpYyB2YWx1ZS4NCisgKiBAcGFyYW1bb3V0XSBwX2hhbmRsZXMgICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aGVyZSB0aGUgYXNzaWduZWQgaGFuZGxlcyB3aWxsIGJlIHN0b3JlZC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgYWRkZWQgYSBjaGFyYWN0ZXJpc3RpYy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLCBzZXJ2aWNlIGhhbmRsZSwgVmVuZG9yIFNwZWNpZmljIFVVSURzLCBsZW5ndGhzLCBhbmQgcGVybWlzc2lvbnMgbmVlZCB0byBhZGhlcmUgdG8gdGhlIGNvbnN0cmFpbnRzLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLCBhIHNlcnZpY2UgY29udGV4dCBpcyByZXF1aXJlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0ZPUkJJRERFTiBGb3JiaWRkZW4gdmFsdWUgc3VwcGxpZWQsIGNlcnRhaW4gVVVJRHMgYXJlIHJlc2VydmVkIGZvciB0aGUgc3RhY2suDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT19NRU0gTm90IGVub3VnaCBtZW1vcnkgdG8gY29tcGxldGUgb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfREFUQV9TSVpFIEludmFsaWQgZGF0YSBzaXplKHMpIHN1cHBsaWVkLCBhdHRyaWJ1dGUgbGVuZ3RocyBhcmUgcmVzdHJpY3RlZCBieSBAcmVmIEJMRV9HQVRUU19BVFRSX0xFTlNfTUFYLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVFNfQ0hBUkFDVEVSSVNUSUNfQURELCB1aW50MzJfdCwgc2RfYmxlX2dhdHRzX2NoYXJhY3RlcmlzdGljX2FkZCh1aW50MTZfdCBzZXJ2aWNlX2hhbmRsZSwgYmxlX2dhdHRzX2NoYXJfbWRfdCBjb25zdCAqcF9jaGFyX21kLCBibGVfZ2F0dHNfYXR0cl90IGNvbnN0ICpwX2F0dHJfY2hhcl92YWx1ZSwgYmxlX2dhdHRzX2NoYXJfaGFuZGxlc190ICpwX2hhbmRsZXMpKTsNCisNCisNCisvKipAYnJpZWYgQWRkIGEgZGVzY3JpcHRvciB0byB0aGUgQXR0cmlidXRlIFRhYmxlLg0KKyAqDQorICogQG5vdGUgSXQgaXMgY3VycmVudGx5IG9ubHkgcG9zc2libGUgdG8gYWRkIGEgZGVzY3JpcHRvciB0byB0aGUgbGFzdCBhZGRlZCBjaGFyYWN0ZXJpc3RpYyAoaS5lLiBvbmx5IHNlcXVlbnRpYWwgcG9wdWxhdGlvbiBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfQVRUX1RBQkxFX1BPUF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhcl9oYW5kbGUgICBIYW5kbGUgb2YgdGhlIGNoYXJhY3RlcmlzdGljIHdoZXJlIHRoZSBkZXNjcmlwdG9yIGlzIHRvIGJlIHBsYWNlZCwgaWYgQHJlZiBCTEVfR0FUVF9IQU5ETEVfSU5WQUxJRCBpcyB1c2VkLCBpdCB3aWxsIGJlIHBsYWNlZCBzZXF1ZW50aWFsbHkuDQorICogQHBhcmFtW2luXSBwX2F0dHIgICAgICAgIFBvaW50ZXIgdG8gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW291dF0gcF9oYW5kbGUgICAgIFBvaW50ZXIgdG8gYSAxNi1iaXQgd29yZCB3aGVyZSB0aGUgYXNzaWduZWQgaGFuZGxlIHdpbGwgYmUgc3RvcmVkLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBhZGRlZCBhIGRlc2NyaXB0b3IuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZCwgY2hhcmFjdGVyaXN0aWMgaGFuZGxlLCBWZW5kb3IgU3BlY2lmaWMgVVVJRHMsIGxlbmd0aHMsIGFuZCBwZXJtaXNzaW9ucyBuZWVkIHRvIGFkaGVyZSB0byB0aGUgY29uc3RyYWludHMuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24sIGEgY2hhcmFjdGVyaXN0aWMgY29udGV4dCBpcyByZXF1aXJlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0ZPUkJJRERFTiBGb3JiaWRkZW4gdmFsdWUgc3VwcGxpZWQsIGNlcnRhaW4gVVVJRHMgYXJlIHJlc2VydmVkIGZvciB0aGUgc3RhY2suDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT19NRU0gTm90IGVub3VnaCBtZW1vcnkgdG8gY29tcGxldGUgb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfREFUQV9TSVpFIEludmFsaWQgZGF0YSBzaXplKHMpIHN1cHBsaWVkLCBhdHRyaWJ1dGUgbGVuZ3RocyBhcmUgcmVzdHJpY3RlZCBieSBAcmVmIEJMRV9HQVRUU19BVFRSX0xFTlNfTUFYLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVFNfREVTQ1JJUFRPUl9BREQsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dHNfZGVzY3JpcHRvcl9hZGQodWludDE2X3QgY2hhcl9oYW5kbGUsIGJsZV9nYXR0c19hdHRyX3QgY29uc3QgKnBfYXR0ciwgdWludDE2X3QgKnBfaGFuZGxlKSk7DQorDQorLyoqQGJyaWVmIFNldCB0aGUgdmFsdWUgb2YgYSBnaXZlbiBhdHRyaWJ1dGUuDQorICoNCisgKiBAbm90ZSBWYWx1ZXMgb3RoZXIgdGhhbiBzeXN0ZW0gYXR0cmlidXRlcyBjYW4gYmUgc2V0IGF0IGFueSB0aW1lLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYW55IGFjdGl2ZSBjb25uZWN0aW9ucyBleGlzdC4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX1FVRVVFX0ZVTExfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9OT0JVRl9OT0FVVEhfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlICBDb25uZWN0aW9uIGhhbmRsZS4gSWdub3JlZCBpZiB0aGUgdmFsdWUgZG9lcyBub3QgYmVsb25nIHRvIGEgc3lzdGVtIGF0dHJpYnV0ZS4NCisgKiBAcGFyYW1baW5dIGhhbmRsZSAgICAgICBBdHRyaWJ1dGUgaGFuZGxlLg0KKyAqIEBwYXJhbVtpbixvdXRdIHBfdmFsdWUgIEF0dHJpYnV0ZSB2YWx1ZSBpbmZvcm1hdGlvbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfRk9VTkQgQXR0cmlidXRlIG5vdCBmb3VuZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0ZPUkJJRERFTiBGb3JiaWRkZW4gaGFuZGxlIHN1cHBsaWVkLCBjZXJ0YWluIGF0dHJpYnV0ZXMgYXJlIG5vdCBtb2RpZmlhYmxlIGJ5IHRoZSBhcHBsaWNhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0RBVEFfU0laRSBJbnZhbGlkIGRhdGEgc2l6ZShzKSBzdXBwbGllZCwgYXR0cmlidXRlIGxlbmd0aHMgYXJlIHJlc3RyaWN0ZWQgYnkgQHJlZiBCTEVfR0FUVFNfQVRUUl9MRU5TX01BWC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZCBvbiBhIHN5c3RlbSBhdHRyaWJ1dGUuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUU19WQUxVRV9TRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dHNfdmFsdWVfc2V0KHVpbnQxNl90IGNvbm5faGFuZGxlLCB1aW50MTZfdCBoYW5kbGUsIGJsZV9nYXR0c192YWx1ZV90ICpwX3ZhbHVlKSk7DQorDQorLyoqQGJyaWVmIEdldCB0aGUgdmFsdWUgb2YgYSBnaXZlbiBhdHRyaWJ1dGUuDQorICoNCisgKiBAbm90ZSAgICAgICAgICAgICAgICAgSWYgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpcyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgc3VwcGxpZWQgYnVmZmVyLA0KKyAqICAgICAgICAgICAgICAgICAgICAgICBwX2xlbiB3aWxsIHJldHVybiB0aGUgdG90YWwgYXR0cmlidXRlIHZhbHVlIGxlbmd0aCAoZXhjbHVkaW5nIG9mZnNldCksDQorICogICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZXR1cm5lZCBpbiBwX2RhdGEuDQorICogICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBtYXkgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gYWxsb2NhdGUgYSBzdWl0YWJsZSBidWZmZXIgc2l6ZS4NCisgKg0KKyAqIEBub3RlICAgICAgICAgICAgICAgICBXaGVuIHJldHJpZXZpbmcgc3lzdGVtIGF0dHJpYnV0ZSB2YWx1ZXMgd2l0aCB0aGlzIGZ1bmN0aW9uLCB0aGUgY29ubmVjdGlvbiBoYW5kbGUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgbWF5IHJlZmVyIHRvIGFuIGFscmVhZHkgZGlzY29ubmVjdGVkIGNvbm5lY3Rpb24uIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9mDQorICogICAgICAgICAgICAgICAgICAgICAgIEByZWYgc2RfYmxlX2dhdHRzX3N5c19hdHRyX2dldCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgIENvbm5lY3Rpb24gaGFuZGxlLiBJZ25vcmVkIGlmIHRoZSB2YWx1ZSBkb2VzIG5vdCBiZWxvbmcgdG8gYSBzeXN0ZW0gYXR0cmlidXRlLg0KKyAqIEBwYXJhbVtpbl0gaGFuZGxlICAgICAgIEF0dHJpYnV0ZSBoYW5kbGUuDQorICogQHBhcmFtW2luLG91dF0gcF92YWx1ZSAgQXR0cmlidXRlIHZhbHVlIGluZm9ybWF0aW9uLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX0ZPVU5EIEF0dHJpYnV0ZSBub3QgZm91bmQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgYXR0cmlidXRlIG9mZnNldCBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZCBvbiBhIHN5c3RlbSBhdHRyaWJ1dGUuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9HQVRUU19TWVNfQVRUUl9NSVNTSU5HIFN5c3RlbSBhdHRyaWJ1dGVzIG1pc3NpbmcsIHVzZSBAcmVmIHNkX2JsZV9nYXR0c19zeXNfYXR0cl9zZXQgdG8gc2V0IHRoZW0gdG8gYSBrbm93biB2YWx1ZS4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRTX1ZBTFVFX0dFVCwgdWludDMyX3QsIHNkX2JsZV9nYXR0c192YWx1ZV9nZXQodWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQxNl90IGhhbmRsZSwgYmxlX2dhdHRzX3ZhbHVlX3QgKnBfdmFsdWUpKTsNCisNCisvKipAYnJpZWYgTm90aWZ5IG9yIEluZGljYXRlIGFuIGF0dHJpYnV0ZSB2YWx1ZS4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciB0aGUgcmVsZXZhbnQgQ2xpZW50IENoYXJhY3RlcmlzdGljIENvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciB2YWx1ZSB0byB2ZXJpZnkgdGhhdCB0aGUgcmVsZXZhbnQgb3BlcmF0aW9uDQorICogICAgICAgICAgKG5vdGlmaWNhdGlvbiBvciBpbmRpY2F0aW9uKSBoYXMgYmVlbiBlbmFibGVkIGJ5IHRoZSBjbGllbnQuIEl0IGlzIGFsc28gYWJsZSB0byB1cGRhdGUgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBiZWZvcmUgaXNzdWluZyB0aGUgUERVLCBzbyB0aGF0DQorICogICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIGNhbiBhdG9taWNhbGx5IHBlcmZvcm0gYSB2YWx1ZSB1cGRhdGUgYW5kIGEgc2VydmVyIGluaXRpYXRlZCB0cmFuc2FjdGlvbiB3aXRoIGEgc2luZ2xlIEFQSSBjYWxsLg0KKyAqDQorICogQG5vdGUgICAgVGhlIGxvY2FsIGF0dHJpYnV0ZSB2YWx1ZSBtYXkgYmUgdXBkYXRlZCBldmVuIGlmIGFuIG91dGdvaW5nIHBhY2tldCBpcyBub3Qgc2VudCB0byB0aGUgcGVlciBkdWUgdG8gYW4gZXJyb3IgZHVyaW5nIGV4ZWN1dGlvbi4NCisgKiAgICAgICAgICBUaGUgQXR0cmlidXRlIFRhYmxlIGhhcyBiZWVuIHVwZGF0ZWQgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXMgaXMgcmV0dXJuZWQ6IEByZWYgTlJGX0VSUk9SX0lOVkFMSURfU1RBVEUsIEByZWYgTlJGX0VSUk9SX0JVU1ksDQorICogICAgICAgICAgQHJlZiBOUkZfRVJST1JfRk9SQklEREVOLCBAcmVmIEJMRV9FUlJPUl9HQVRUU19TWVNfQVRUUl9NSVNTSU5HIGFuZCBAcmVmIE5SRl9FUlJPUl9SRVNPVVJDRVMuDQorICogICAgICAgICAgVGhlIGNhbGxlciBjYW4gY2hlY2sgd2hldGhlciB0aGUgdmFsdWUgaGFzIGJlZW4gdXBkYXRlZCBieSBsb29raW5nIGF0IHRoZSBjb250ZW50cyBvZiAqKHBfaHZ4X3BhcmFtcy0+cF9sZW4pLg0KKyAqDQorICogQG5vdGUgICAgT25seSBvbmUgaW5kaWNhdGlvbiBwcm9jZWR1cmUgY2FuIGJlIG9uZ29pbmcgcGVyIGNvbm5lY3Rpb24gYXQgYSB0aW1lLg0KKyAqICAgICAgICAgIElmIHRoZSBhcHBsaWNhdGlvbiB0cmllcyB0byBpbmRpY2F0ZSBhbiBhdHRyaWJ1dGUgdmFsdWUgd2hpbGUgYW5vdGhlciBpbmRpY2F0aW9uIHByb2NlZHVyZSBpcyBvbmdvaW5nLA0KKyAqICAgICAgICAgIHRoZSBmdW5jdGlvbiBjYWxsIHdpbGwgcmV0dXJuIEByZWYgTlJGX0VSUk9SX0JVU1kuDQorICogICAgICAgICAgQSBAcmVmIEJMRV9HQVRUU19FVlRfSFZDIGV2ZW50IHdpbGwgYmUgaXNzdWVkIGFzIHNvb24gYXMgdGhlIGNvbmZpcm1hdGlvbiBhcnJpdmVzIGZyb20gdGhlIHBlZXIuDQorICoNCisgKiBAbm90ZSAgICBUaGUgbnVtYmVyIG9mIEhhbmRsZSBWYWx1ZSBOb3RpZmljYXRpb25zIHRoYXQgY2FuIGJlIHF1ZXVlZCBpcyBjb25maWd1cmVkIGJ5IEByZWYgYmxlX2dhdHRzX2Nvbm5fY2ZnX3Q6Omh2bl90eF9xdWV1ZV9zaXplDQorICogICAgICAgICAgV2hlbiB0aGUgcXVldWUgaXMgZnVsbCwgdGhlIGZ1bmN0aW9uIGNhbGwgd2lsbCByZXR1cm4gQHJlZiBOUkZfRVJST1JfUkVTT1VSQ0VTLg0KKyAqICAgICAgICAgIEEgQHJlZiBCTEVfR0FUVFNfRVZUX0hWTl9UWF9DT01QTEVURSBldmVudCB3aWxsIGJlIGlzc3VlZCBhcyBzb29uIGFzIHRoZSB0cmFuc21pc3Npb24gb2YgdGhlIG5vdGlmaWNhdGlvbiBpcyBjb21wbGV0ZS4NCisgKg0KKyAqIEBub3RlICAgIFRoZSBhcHBsaWNhdGlvbiBjYW4ga2VlcCB0cmFjayBvZiB0aGUgYXZhaWxhYmxlIHF1ZXVlIGVsZW1lbnQgY291bnQgZm9yIG5vdGlmaWNhdGlvbnMgYnkgZm9sbG93aW5nIHRoZSBwcm9jZWR1cmUgYmVsb3c6DQorICogICAgICAgICAgLSBTdG9yZSBpbml0aWFsIHF1ZXVlIGVsZW1lbnQgY291bnQgaW4gYSB2YXJpYWJsZS4NCisgKiAgICAgICAgICAtIERlY3JlbWVudCB0aGUgdmFyaWFibGUsIHdoaWNoIHN0b3JlcyB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBxdWV1ZSBlbGVtZW50IGNvdW50LCBieSBvbmUgd2hlbiBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiByZXR1cm5zIEByZWYgTlJGX1NVQ0NFU1MuDQorICogICAgICAgICAgLSBJbmNyZW1lbnQgdGhlIHZhcmlhYmxlLCB3aGljaCBzdG9yZXMgdGhlIGN1cnJlbnQgYXZhaWxhYmxlIHF1ZXVlIGVsZW1lbnQgY291bnQsIGJ5IHRoZSBjb3VudCB2YXJpYWJsZSBpbiBAcmVmIEJMRV9HQVRUU19FVlRfSFZOX1RYX0NPTVBMRVRFIGV2ZW50Lg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVRUU19FVlRfSFZOX1RYX0NPTVBMRVRFLCBOb3RpZmljYXRpb24gdHJhbnNtaXNzaW9uIGNvbXBsZXRlLn0NCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FUVFNfRVZUX0hWQywgQ29uZmlybWF0aW9uIHJlY2VpdmVkIGZyb20gdGhlIHBlZXIufQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfSFZYX1NZU19BVFRSU19NSVNTSU5HX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19IVk5fTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX0hWSV9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfSFZYX0RJU0FCTEVEX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSAgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSBwX2h2eF9wYXJhbXMgUG9pbnRlciB0byBhbiBIVnggcGFyYW1ldGVycyBzdHJ1Y3R1cmUuIElmIHRoZSBwX2RhdGEgbWVtYmVyIGNvbnRhaW5zIGEgbm9uLU5VTEwgcG9pbnRlciB0aGUgYXR0cmlidXRlIHZhbHVlIHdpbGwgYmUgdXBkYXRlZCB3aXRoDQorICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnRlbnRzIHBvaW50ZWQgYnkgaXQgYmVmb3JlIHNlbmRpbmcgdGhlIG5vdGlmaWNhdGlvbiBvciBpbmRpY2F0aW9uLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBxdWV1ZWQgYSBub3RpZmljYXRpb24gb3IgaW5kaWNhdGlvbiBmb3IgdHJhbnNtaXNzaW9uLCBhbmQgb3B0aW9uYWxseSB1cGRhdGVkIHRoZSBhdHRyaWJ1dGUgdmFsdWUuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIE9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIENvbm5lY3Rpb24gU3RhdGUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBOb3RpZmljYXRpb25zIGFuZC9vciBpbmRpY2F0aW9ucyBub3QgZW5hYmxlZCBpbiB0aGUgQ0NDRA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIEFUVF9NVFUgZXhjaGFuZ2UgaXMgb25nb2luZw0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0FUVFJfSEFORExFIEludmFsaWQgYXR0cmlidXRlIGhhbmRsZShzKSBzdXBwbGllZC4gT25seSBhdHRyaWJ1dGVzIGFkZGVkIGRpcmVjdGx5IGJ5IHRoZSBhcHBsaWNhdGlvbiBhcmUgYXZhaWxhYmxlIHRvIG5vdGlmeSBhbmQgaW5kaWNhdGUuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9HQVRUU19JTlZBTElEX0FUVFJfVFlQRSBJbnZhbGlkIGF0dHJpYnV0ZSB0eXBlKHMpIHN1cHBsaWVkLCBvbmx5IGNoYXJhY3RlcmlzdGljIHZhbHVlcyBtYXkgYmUgbm90aWZpZWQgYW5kIGluZGljYXRlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9GT1VORCBBdHRyaWJ1dGUgbm90IGZvdW5kLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOIFRoZSBjb25uZWN0aW9uJ3MgY3VycmVudCBzZWN1cml0eSBsZXZlbCBpcyBsb3dlciB0aGFuIHRoZSBvbmUgcmVxdWlyZWQgYnkgdGhlIHdyaXRlIHBlcm1pc3Npb25zIG9mIHRoZSBDQ0NEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoYXJhY3RlcmlzdGljLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfREFUQV9TSVpFIEludmFsaWQgZGF0YSBzaXplKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBGb3IgQHJlZiBCTEVfR0FUVF9IVlhfSU5ESUNBVElPTiBQcm9jZWR1cmUgYWxyZWFkeSBpbiBwcm9ncmVzcy4gV2FpdCBmb3IgYSBAcmVmIEJMRV9HQVRUU19FVlRfSFZDIGV2ZW50IGFuZCByZXRyeS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBVFRTX1NZU19BVFRSX01JU1NJTkcgU3lzdGVtIGF0dHJpYnV0ZXMgbWlzc2luZywgdXNlIEByZWYgc2RfYmxlX2dhdHRzX3N5c19hdHRyX3NldCB0byBzZXQgdGhlbSB0byBhIGtub3duIHZhbHVlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfUkVTT1VSQ0VTIFRvbyBtYW55IG5vdGlmaWNhdGlvbnMgcXVldWVkLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhaXQgZm9yIGEgQHJlZiBCTEVfR0FUVFNfRVZUX0hWTl9UWF9DT01QTEVURSBldmVudCBhbmQgcmV0cnkuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUU19IVlgsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dHNfaHZ4KHVpbnQxNl90IGNvbm5faGFuZGxlLCBibGVfZ2F0dHNfaHZ4X3BhcmFtc190IGNvbnN0ICpwX2h2eF9wYXJhbXMpKTsNCisNCisvKipAYnJpZWYgSW5kaWNhdGUgdGhlIFNlcnZpY2UgQ2hhbmdlZCBhdHRyaWJ1dGUgdmFsdWUuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGNhbGwgd2lsbCBzZW5kIGEgSGFuZGxlIFZhbHVlIEluZGljYXRpb24gdG8gb25lIG9yIG1vcmUgcGVlcnMgY29ubmVjdGVkIHRvIGluZm9ybSB0aGVtIHRoYXQgdGhlIEF0dHJpYnV0ZQ0KKyAqICAgICAgICAgIFRhYmxlIGxheW91dCBoYXMgY2hhbmdlZC4gQXMgc29vbiBhcyB0aGUgcGVlciBoYXMgY29uZmlybWVkIHRoZSBpbmRpY2F0aW9uLCBhIEByZWYgQkxFX0dBVFRTX0VWVF9TQ19DT05GSVJNIGV2ZW50IHdpbGwNCisgKiAgICAgICAgICBiZSBpc3N1ZWQuDQorICoNCisgKiBAbm90ZSAgICBTb21lIG9mIHRoZSByZXN0cmljdGlvbnMgYW5kIGxpbWl0YXRpb25zIHRoYXQgYXBwbHkgdG8gQHJlZiBzZF9ibGVfZ2F0dHNfaHZ4IGFsc28gYXBwbHkgaGVyZS4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FUVFNfRVZUX1NDX0NPTkZJUk0sIENvbmZpcm1hdGlvbiBvZiBhdHRyaWJ1dGUgdGFibGUgY2hhbmdlIHJlY2VpdmVkIGZyb20gcGVlci59DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19TQ19NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtpbl0gc3RhcnRfaGFuZGxlIFN0YXJ0IG9mIGFmZmVjdGVkIGF0dHJpYnV0ZSBoYW5kbGUgcmFuZ2UuDQorICogQHBhcmFtW2luXSBlbmRfaGFuZGxlICAgRW5kIG9mIGFmZmVjdGVkIGF0dHJpYnV0ZSBoYW5kbGUgcmFuZ2UuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHF1ZXVlZCB0aGUgU2VydmljZSBDaGFuZ2VkIGluZGljYXRpb24gZm9yIHRyYW5zbWlzc2lvbi4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9TVVBQT1JURUQgU2VydmljZSBDaGFuZ2VkIG5vdCBlbmFibGVkIGF0IGluaXRpYWxpemF0aW9uLiBTZWUgQHJlZg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZF9ibGVfY2ZnX3NldCBhbmQgQHJlZiBibGVfZ2F0dHNfY2ZnX3NlcnZpY2VfY2hhbmdlZF90Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBPbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBDb25uZWN0aW9uIFN0YXRlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gTm90aWZpY2F0aW9ucyBhbmQvb3IgaW5kaWNhdGlvbnMgbm90IGVuYWJsZWQgaW4gdGhlIENDQ0QNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBbiBBVFRfTVRVIGV4Y2hhbmdlIGlzIG9uZ29pbmcNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0FUVFJfSEFORExFIEludmFsaWQgYXR0cmlidXRlIGhhbmRsZShzKSBzdXBwbGllZCwgaGFuZGxlcyBtdXN0IGJlIGluIHRoZSByYW5nZSBwb3B1bGF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBQcm9jZWR1cmUgYWxyZWFkeSBpbiBwcm9ncmVzcy4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBVFRTX1NZU19BVFRSX01JU1NJTkcgU3lzdGVtIGF0dHJpYnV0ZXMgbWlzc2luZywgdXNlIEByZWYgc2RfYmxlX2dhdHRzX3N5c19hdHRyX3NldCB0byBzZXQgdGhlbSB0byBhIGtub3duIHZhbHVlLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVFNfU0VSVklDRV9DSEFOR0VELCB1aW50MzJfdCwgc2RfYmxlX2dhdHRzX3NlcnZpY2VfY2hhbmdlZCh1aW50MTZfdCBjb25uX2hhbmRsZSwgdWludDE2X3Qgc3RhcnRfaGFuZGxlLCB1aW50MTZfdCBlbmRfaGFuZGxlKSk7DQorDQorLyoqQGJyaWVmIFJlc3BvbmQgdG8gYSBSZWFkL1dyaXRlIGF1dGhvcml6YXRpb24gcmVxdWVzdC4NCisgKg0KKyAqIEBub3RlIFRoaXMgY2FsbCBzaG91bGQgb25seSBiZSB1c2VkIGFzIGEgcmVzcG9uc2UgdG8gYSBAcmVmIEJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1QgZXZlbnQgaXNzdWVkIHRvIHRoZSBhcHBsaWNhdGlvbi4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX05PQlVGX0FVVEhfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9CVUZfQVVUSF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX05PQlVGX05PQVVUSF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfUkVBRF9SRVFfQVVUSF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfV1JJVEVfUkVRX0FVVEhfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9RVUVVRV9GVUxMX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfTk9CVUZfUEVFUl9DQU5DRUxfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlICAgICAgICAgICAgICAgICBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIHBfcndfYXV0aG9yaXplX3JlcGx5X3BhcmFtcyBQb2ludGVyIHRvIGEgc3RydWN0dXJlIHdpdGggdGhlIGF0dHJpYnV0ZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24uDQorICoNCisgKiBAbm90ZSBAcmVmIGJsZV9nYXR0c19hdXRob3JpemVfcGFyYW1zX3Q6OnBfZGF0YSBpcyBpZ25vcmVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlc3BvbmQNCisgKiAgICAgICB0byBhIEByZWYgQkxFX0dBVFRTX0FVVEhPUklaRV9UWVBFX1JFQUQgZXZlbnQgaWYgQHJlZiBibGVfZ2F0dHNfYXV0aG9yaXplX3BhcmFtc190Ojp1cGRhdGUNCisgKiAgICAgICBpcyBzZXQgdG8gMC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBxdWV1ZWQgYSByZXNwb25zZSB0byB0aGUgcGVlciwgYW5kIGluIHRoZSBjYXNlIG9mIGEgd3JpdGUgb3BlcmF0aW9uLCBBdHRyaWJ1dGUgVGFibGUgdXBkYXRlZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiAgICBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFICAgSW52YWxpZCBDb25uZWN0aW9uIFN0YXRlIG9yIG5vIGF1dGhvcml6YXRpb24gcmVxdWVzdCBwZW5kaW5nLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSAgIEF1dGhvcml6YXRpb24gb3AgaW52YWxpZCwNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIHN1cHBsaWVkIGRvZXMgbm90IG1hdGNoIHJlcXVlc3RlZCBoYW5kbGUsDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGludmFsaWQgZGF0YSB0byBiZSB3cml0dGVuIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRTX1JXX0FVVEhPUklaRV9SRVBMWSwgdWludDMyX3QsIHNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHlfcGFyYW1zX3QgY29uc3QgKnBfcndfYXV0aG9yaXplX3JlcGx5X3BhcmFtcykpOw0KKw0KKw0KKy8qKkBicmllZiBVcGRhdGUgcGVyc2lzdGVudCBzeXN0ZW0gYXR0cmlidXRlIGluZm9ybWF0aW9uLg0KKyAqDQorICogQGRldGFpbHMgU3VwcGx5IGluZm9ybWF0aW9uIGFib3V0IHBlcnNpc3RlbnQgc3lzdGVtIGF0dHJpYnV0ZXMgdG8gdGhlIHN0YWNrLA0KKyAqICAgICAgICAgIHByZXZpb3VzbHkgb2J0YWluZWQgdXNpbmcgQHJlZiBzZF9ibGVfZ2F0dHNfc3lzX2F0dHJfZ2V0Lg0KKyAqICAgICAgICAgIFRoaXMgY2FsbCBpcyBvbmx5IGFsbG93ZWQgZm9yIGFjdGl2ZSBjb25uZWN0aW9ucywgYW5kIGlzIHVzdWFsbHkNCisgKiAgICAgICAgICBtYWRlIGltbWVkaWF0ZWx5IGFmdGVyIGEgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCB3aXRoIGFuIGtub3duIGJvbmRlZCBkZXZpY2UsDQorICogICAgICAgICAgb2Z0ZW4gYXMgYSByZXNwb25zZSB0byBhIEByZWYgQkxFX0dBVFRTX0VWVF9TWVNfQVRUUl9NSVNTSU5HLg0KKyAqDQorICogICAgICAgICAgcF9zeXNhdHRycyBtYXkgcG9pbnQgZGlyZWN0bHkgdG8gdGhlIGFwcGxpY2F0aW9uJ3Mgc3RvcmVkIGNvcHkgb2YgdGhlIHN5c3RlbSBhdHRyaWJ1dGVzDQorICogICAgICAgICAgb2J0YWluZWQgdXNpbmcgQHJlZiBzZF9ibGVfZ2F0dHNfc3lzX2F0dHJfZ2V0Lg0KKyAqICAgICAgICAgIElmIHRoZSBwb2ludGVyIGlzIE5VTEwsIHRoZSBzeXN0ZW0gYXR0cmlidXRlIGluZm8gaXMgaW5pdGlhbGl6ZWQsIGFzc3VtaW5nIHRoYXQNCisgKiAgICAgICAgICB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgaGF2ZSBhbnkgcHJldmlvdXNseSBzYXZlZCBzeXN0ZW0gYXR0cmlidXRlIGRhdGEgZm9yIHRoaXMgZGV2aWNlLg0KKyAqDQorICogQG5vdGUgVGhlIHN0YXRlIG9mIHBlcnNpc3RlbnQgc3lzdGVtIGF0dHJpYnV0ZXMgaXMgcmVzZXQgdXBvbiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIHRoZW4gcmVtZW1iZXJlZCBmb3IgaXRzIGR1cmF0aW9uLg0KKyAqDQorICogQG5vdGUgSWYgdGhpcyBjYWxsIHJldHVybnMgd2l0aCBhbiBlcnJvciBjb2RlIGRpZmZlcmVudCBmcm9tIEByZWYgTlJGX1NVQ0NFU1MsIHRoZSBzdG9yYWdlIG9mIHBlcnNpc3RlbnQgc3lzdGVtIGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiBjb21wbGV0ZWQgb25seSBwYXJ0aWFsbHkuDQorICogICAgICAgVGhpcyBtZWFucyB0aGF0IHRoZSBzdGF0ZSBvZiB0aGUgYXR0cmlidXRlIHRhYmxlIGlzIHVuZGVmaW5lZCwgYW5kIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZWl0aGVyIHByb3ZpZGUgYSBuZXcgc2V0IG9mIGF0dHJpYnV0ZXMgdXNpbmcgdGhpcyBzYW1lIGNhbGwgb3INCisgKiAgICAgICByZXNldCB0aGUgU29mdERldmljZSB0byByZXR1cm4gdG8gYSBrbm93biBzdGF0ZS4NCisgKg0KKyAqIEBub3RlIFdoZW4gdGhlIEByZWYgQkxFX0dBVFRTX1NZU19BVFRSX0ZMQUdfU1lTX1NSVkNTIGlzIHVzZWQgd2l0aCB0aGlzIGZ1bmN0aW9uLCBvbmx5IHRoZSBzeXN0ZW0gYXR0cmlidXRlcyBpbmNsdWRlZCBpbiBzeXN0ZW0gc2VydmljZXMgd2lsbCBiZSBtb2RpZmllZC4NCisgKiBAbm90ZSBXaGVuIHRoZSBAcmVmIEJMRV9HQVRUU19TWVNfQVRUUl9GTEFHX1VTUl9TUlZDUyBpcyB1c2VkIHdpdGggdGhpcyBmdW5jdGlvbiwgb25seSB0aGUgc3lzdGVtIGF0dHJpYnV0ZXMgaW5jbHVkZWQgaW4gdXNlciBzZXJ2aWNlcyB3aWxsIGJlIG1vZGlmaWVkLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19IVlhfU1lTX0FUVFJTX01JU1NJTkdfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1NZU19BVFRSU19VTktfUEVFUl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfU1lTX0FUVFJTX0JPTkRFRF9QRUVSX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSAgY29ubl9oYW5kbGUgICAgICAgIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtpbl0gIHBfc3lzX2F0dHJfZGF0YSAgICBQb2ludGVyIHRvIGEgc2F2ZWQgY29weSBvZiBzeXN0ZW0gYXR0cmlidXRlcyBzdXBwbGllZCB0byB0aGUgc3RhY2ssIG9yIE5VTEwuDQorICogQHBhcmFtW2luXSAgbGVuICAgICAgICAgICAgICAgIFNpemUgb2YgZGF0YSBwb2ludGVkIGJ5IHBfc3lzX2F0dHJfZGF0YSwgaW4gb2N0ZXRzLg0KKyAqIEBwYXJhbVtpbl0gIGZsYWdzICAgICAgICAgICAgICBPcHRpb25hbCBhZGRpdGlvbmFsIGZsYWdzLCBzZWUgQHJlZiBCTEVfR0FUVFNfU1lTX0FUVFJfRkxBR1MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc2V0IHRoZSBzeXN0ZW0gYXR0cmlidXRlIGluZm9ybWF0aW9uLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBDb25uZWN0aW9uIFN0YXRlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIGZsYWdzIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9EQVRBIEludmFsaWQgZGF0YSBzdXBwbGllZCwgdGhlIGRhdGEgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgcmV0cmlldmVkIHdpdGggQHJlZiBzZF9ibGVfZ2F0dHNfc3lzX2F0dHJfZ2V0Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9fTUVNIE5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbXBsZXRlIG9wZXJhdGlvbi4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRTX1NZU19BVFRSX1NFVCwgdWludDMyX3QsIHNkX2JsZV9nYXR0c19zeXNfYXR0cl9zZXQodWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQ4X3QgY29uc3QgKnBfc3lzX2F0dHJfZGF0YSwgdWludDE2X3QgbGVuLCB1aW50MzJfdCBmbGFncykpOw0KKw0KKw0KKy8qKkBicmllZiBSZXRyaWV2ZSBwZXJzaXN0ZW50IHN5c3RlbSBhdHRyaWJ1dGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3RhY2suDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGNhbGwgaXMgdXNlZCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB2YWx1ZXMgdG8gYmUgc3RvcmVkIHBlcnNpc3RlbnRseSBieSB0aGUgYXBwbGljYXRpb24NCisgKiAgICAgICAgICBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIGEgY29ubmVjdGlvbiBvciBhZnRlciBpdCBoYXMgYmVlbiB0ZXJtaW5hdGVkLiBXaGVuIGEgbmV3IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgd2l0aCB0aGUgc2FtZSBib25kZWQgZGV2aWNlLA0KKyAqICAgICAgICAgIHRoZSBzeXN0ZW0gYXR0cmlidXRlIGluZm9ybWF0aW9uIHJldHJpZXZlZCB3aXRoIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHJlc3RvcmVkIHVzaW5nIHVzaW5nIEByZWYgc2RfYmxlX2dhdHRzX3N5c19hdHRyX3NldC4NCisgKiAgICAgICAgICBJZiByZXRyaWV2ZWQgYWZ0ZXIgZGlzY29ubmVjdGlvbiwgdGhlIGRhdGEgc2hvdWxkIGJlIHJlYWQgYmVmb3JlIGEgbmV3IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQuIFRoZSBjb25uZWN0aW9uIGhhbmRsZSBmb3INCisgKiAgICAgICAgICB0aGUgcHJldmlvdXMsIG5vdyBkaXNjb25uZWN0ZWQsIGNvbm5lY3Rpb24gd2lsbCByZW1haW4gdmFsaWQgdW50aWwgYSBuZXcgb25lIGlzIGNyZWF0ZWQgdG8gYWxsb3cgdGhpcyBBUEkgY2FsbCB0byByZWZlciB0byBpdC4NCisgKiAgICAgICAgICBDb25uZWN0aW9uIGhhbmRsZXMgYmVsb25naW5nIHRvIGFjdGl2ZSBjb25uZWN0aW9ucyBjYW4gYmUgdXNlZCBhcyB3ZWxsLCBidXQgY2FyZSBzaG91bGQgYmUgdGFrZW4gc2luY2UgdGhlIHN5c3RlbSBhdHRyaWJ1dGVzDQorICogICAgICAgICAgbWF5IGJlIHdyaXR0ZW4gdG8gYXQgYW55IHRpbWUgYnkgdGhlIHBlZXIgZHVyaW5nIGEgY29ubmVjdGlvbidzIGxpZmV0aW1lLg0KKyAqDQorICogQG5vdGUgV2hlbiB0aGUgQHJlZiBCTEVfR0FUVFNfU1lTX0FUVFJfRkxBR19TWVNfU1JWQ1MgaXMgdXNlZCB3aXRoIHRoaXMgZnVuY3Rpb24sIG9ubHkgdGhlIHN5c3RlbSBhdHRyaWJ1dGVzIGluY2x1ZGVkIGluIHN5c3RlbSBzZXJ2aWNlcyB3aWxsIGJlIHJldHVybmVkLg0KKyAqIEBub3RlIFdoZW4gdGhlIEByZWYgQkxFX0dBVFRTX1NZU19BVFRSX0ZMQUdfVVNSX1NSVkNTIGlzIHVzZWQgd2l0aCB0aGlzIGZ1bmN0aW9uLCBvbmx5IHRoZSBzeXN0ZW0gYXR0cmlidXRlcyBpbmNsdWRlZCBpbiB1c2VyIHNlcnZpY2VzIHdpbGwgYmUgcmV0dXJuZWQuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1NZU19BVFRSU19CT05ERURfUEVFUl9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gICAgIGNvbm5faGFuZGxlICAgICAgIENvbm5lY3Rpb24gaGFuZGxlIG9mIHRoZSByZWNlbnRseSB0ZXJtaW5hdGVkIGNvbm5lY3Rpb24uDQorICogQHBhcmFtW291dF0gICAgcF9zeXNfYXR0cl9kYXRhICAgUG9pbnRlciB0byBhIGJ1ZmZlciB3aGVyZSB1cGRhdGVkIGluZm9ybWF0aW9uIGFib3V0IHN5c3RlbSBhdHRyaWJ1dGVzIHdpbGwgYmUgZmlsbGVkIGluLiBUaGUgZm9ybWF0IG9mIHRoZSBkYXRhIGlzIGRlc2NyaWJlZA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEByZWYgQkxFX0dBVFRTX1NZU19BVFRSU19GT1JNQVQuIE5VTEwgY2FuIGJlIHByb3ZpZGVkIHRvIG9idGFpbiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhLg0KKyAqIEBwYXJhbVtpbixvdXRdIHBfbGVuICAgICAgICAgICAgIFNpemUgb2YgYXBwbGljYXRpb24gYnVmZmVyIGlmIHBfc3lzX2F0dHJfZGF0YSBpcyBub3QgTlVMTC4gVW5jb25kaXRpb25hbGx5IHVwZGF0ZWQgdG8gYWN0dWFsIGxlbmd0aCBvZiBzeXN0ZW0gYXR0cmlidXRlIGRhdGEuDQorICogQHBhcmFtW2luXSAgICAgZmxhZ3MgICAgICAgICAgICAgT3B0aW9uYWwgYWRkaXRpb25hbCBmbGFncywgc2VlIEByZWYgQkxFX0dBVFRTX1NZU19BVFRSX0ZMQUdTDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgc3lzdGVtIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbi4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgZmxhZ3Mgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9EQVRBX1NJWkUgVGhlIHN5c3RlbSBhdHRyaWJ1dGUgaW5mb3JtYXRpb24gZGlkIG5vdCBmaXQgaW50byB0aGUgcHJvdmlkZWQgYnVmZmVyLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX0ZPVU5EIE5vIHN5c3RlbSBhdHRyaWJ1dGVzIGZvdW5kLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVFNfU1lTX0FUVFJfR0VULCB1aW50MzJfdCwgc2RfYmxlX2dhdHRzX3N5c19hdHRyX2dldCh1aW50MTZfdCBjb25uX2hhbmRsZSwgdWludDhfdCAqcF9zeXNfYXR0cl9kYXRhLCB1aW50MTZfdCAqcF9sZW4sIHVpbnQzMl90IGZsYWdzKSk7DQorDQorDQorLyoqQGJyaWVmIFJldHJpZXZlIHRoZSBmaXJzdCB2YWxpZCB1c2VyIGF0dHJpYnV0ZSBoYW5kbGUuDQorICoNCisgKiBAcGFyYW1bb3V0XSBwX2hhbmRsZSAgIFBvaW50ZXIgdG8gYW4gaW50ZWdlciB3aGVyZSB0aGUgaGFuZGxlIHdpbGwgYmUgc3RvcmVkLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIGhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUU19JTklUSUFMX1VTRVJfSEFORExFX0dFVCwgdWludDMyX3QsIHNkX2JsZV9nYXR0c19pbml0aWFsX3VzZXJfaGFuZGxlX2dldCh1aW50MTZfdCAqcF9oYW5kbGUpKTsNCisNCisvKipAYnJpZWYgUmV0cmlldmUgdGhlIGF0dHJpYnV0ZSBVVUlEIGFuZC9vciBtZXRhZGF0YS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGhhbmRsZSBBdHRyaWJ1dGUgaGFuZGxlDQorICogQHBhcmFtW291dF0gcF91dWlkIFVVSUQgb2YgdGhlIGF0dHJpYnV0ZS4gVXNlIE5VTEwgdG8gb21pdCB0aGlzIGZpZWxkLg0KKyAqIEBwYXJhbVtvdXRdIHBfbWQgTWV0YWRhdGEgb2YgdGhlIGF0dHJpYnV0ZS4gVXNlIE5VTEwgdG8gb21pdCB0aGlzIGZpZWxkLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIGF0dHJpYnV0ZSBtZXRhZGF0YSwNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVycyBzdXBwbGllZC4gUmV0dXJuZWQgd2hlbiBib3RoIEBjIHBfdXVpZCBhbmQgQGMgcF9tZCBhcmUgTlVMTC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9GT1VORCBBdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRTX0FUVFJfR0VULCB1aW50MzJfdCwgc2RfYmxlX2dhdHRzX2F0dHJfZ2V0KHVpbnQxNl90IGhhbmRsZSwgYmxlX3V1aWRfdCAqIHBfdXVpZCwgYmxlX2dhdHRzX2F0dHJfbWRfdCAqIHBfbWQpKTsNCisNCisvKipAYnJpZWYgUmVwbHkgdG8gYW4gQVRUX01UVSBleGNoYW5nZSByZXF1ZXN0IGJ5IHNlbmRpbmcgYW4gRXhjaGFuZ2UgTVRVIFJlc3BvbnNlIHRvIHRoZSBjbGllbnQuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCB0byByZXBseSB0byBhIEByZWYgQkxFX0dBVFRTX0VWVF9FWENIQU5HRV9NVFVfUkVRVUVTVCBldmVudC4NCisgKg0KKyAqIEBkZXRhaWxzIFRoZSBTb2Z0RGV2aWNlIHNldHMgQVRUX01UVSB0byB0aGUgbWluaW11bSBvZjoNCisgKiAgICAgICAgICAtIFRoZSBDbGllbnQgUlggTVRVIHZhbHVlIGZyb20gQHJlZiBCTEVfR0FUVFNfRVZUX0VYQ0hBTkdFX01UVV9SRVFVRVNULCBhbmQNCisgKiAgICAgICAgICAtIFRoZSBTZXJ2ZXIgUlggTVRVIHZhbHVlLg0KKyAqDQorICogICAgICAgICAgSG93ZXZlciwgdGhlIFNvZnREZXZpY2UgbmV2ZXIgc2V0cyBBVFRfTVRVIGxvd2VyIHRoYW4gQHJlZiBCTEVfR0FUVF9BVFRfTVRVX0RFRkFVTFQuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX01UVV9FWENIQU5HRX0NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSAgICBUaGUgY29ubmVjdGlvbiBoYW5kbGUgaWRlbnRpZnlpbmcgdGhlIGNvbm5lY3Rpb24gdG8gcGVyZm9ybSB0aGlzIHByb2NlZHVyZSBvbi4NCisgKiBAcGFyYW1baW5dIHNlcnZlcl9yeF9tdHUgIFNlcnZlciBSWCBNVFUgc2l6ZS4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIG1pbmltdW0gdmFsdWUgaXMgQHJlZiBCTEVfR0FUVF9BVFRfTVRVX0RFRkFVTFQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBtYXhpbXVtIHZhbHVlIGlzIEByZWYgYmxlX2dhdHRfY29ubl9jZmdfdDo6YXR0X210dSBpbiB0aGUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIHRoaXMgY29ubmVjdGlvbi4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIHZhbHVlIG11c3QgYmUgZXF1YWwgdG8gQ2xpZW50IFJYIE1UVSBzaXplIGdpdmVuIGluIEByZWYgc2RfYmxlX2dhdHRjX2V4Y2hhbmdlX210dV9yZXF1ZXN0DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFuIEFUVF9NVFUgZXhjaGFuZ2UgaGFzIGFscmVhZHkgYmVlbiBwZXJmb3JtZWQgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc2VudCByZXNwb25zZSB0byB0aGUgY2xpZW50Lg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIENvbm5lY3Rpb24gU3RhdGUgb3Igbm8gQVRUX01UVSBleGNoYW5nZSByZXF1ZXN0IHBlbmRpbmcuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgU2VydmVyIFJYIE1UVSBzaXplIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVFNfRVhDSEFOR0VfTVRVX1JFUExZLCB1aW50MzJfdCwgc2RfYmxlX2dhdHRzX2V4Y2hhbmdlX210dV9yZXBseSh1aW50MTZfdCBjb25uX2hhbmRsZSwgdWludDE2X3Qgc2VydmVyX3J4X210dSkpOw0KKy8qKiBAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLy8gQkxFX0dBVFRTX0hfXw0KKw0KKy8qKg0KKyAgQH0NCisqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2hjaS5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfaGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEwOTQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2hjaS5oCkBAIC0wLDAgKzEsMTMxIEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAgQGFkZHRvZ3JvdXAgQkxFX0NPTU1PTg0KKyAgQHsNCisqLw0KKw0KKw0KKyNpZm5kZWYgQkxFX0hDSV9IX18NCisjZGVmaW5lIEJMRV9IQ0lfSF9fDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqIEBkZWZncm91cCBCTEVfSENJX1NUQVRVU19DT0RFUyBCbHVldG9vdGggc3RhdHVzIGNvZGVzDQorICogQHsgKi8NCisNCisjZGVmaW5lIEJMRV9IQ0lfU1RBVFVTX0NPREVfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAgICAvKio8IFN1Y2Nlc3MuICovDQorI2RlZmluZSBCTEVfSENJX1NUQVRVU19DT0RFX1VOS05PV05fQlRMRV9DT01NQU5EICAgICAgICAgICAweDAxICAgLyoqPCBVbmtub3duIEJMRSBDb21tYW5kLiAqLw0KKyNkZWZpbmUgQkxFX0hDSV9TVEFUVVNfQ09ERV9VTktOT1dOX0NPTk5FQ1RJT05fSURFTlRJRklFUiAgMHgwMiAgIC8qKjwgVW5rbm93biBDb25uZWN0aW9uIElkZW50aWZpZXIuICovDQorLyoweDAzIEhhcmR3YXJlIEZhaWx1cmUNCisweDA0IFBhZ2UgVGltZW91dA0KKyovDQorI2RlZmluZSBCTEVfSENJX0FVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAweDA1ICAgLyoqPCBBdXRoZW50aWNhdGlvbiBGYWlsdXJlLiAqLw0KKyNkZWZpbmUgQkxFX0hDSV9TVEFUVVNfQ09ERV9QSU5fT1JfS0VZX01JU1NJTkcgICAgICAgICAgICAgMHgwNiAgIC8qKjwgUGluIG9yIEtleSBtaXNzaW5nLiAqLw0KKyNkZWZpbmUgQkxFX0hDSV9NRU1PUllfQ0FQQUNJVFlfRVhDRUVERUQgICAgICAgICAgICAgICAgICAgMHgwNyAgIC8qKjwgTWVtb3J5IENhcGFjaXR5IEV4Y2VlZGVkLiAqLw0KKyNkZWZpbmUgQkxFX0hDSV9DT05ORUNUSU9OX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOCAgIC8qKjwgQ29ubmVjdGlvbiBUaW1lb3V0LiAqLw0KKy8qMHgwOSBDb25uZWN0aW9uIExpbWl0IEV4Y2VlZGVkDQorMHgwQSBTeW5jaHJvbm91cyBDb25uZWN0aW9uIExpbWl0IFRvIEEgRGV2aWNlIEV4Y2VlZGVkDQorMHgwQiBBQ0wgQ29ubmVjdGlvbiBBbHJlYWR5IEV4aXN0cyovDQorI2RlZmluZSBCTEVfSENJX1NUQVRVU19DT0RFX0NPTU1BTkRfRElTQUxMT1dFRCAgICAgICAgICAgICAweDBDICAgLyoqPCBDb21tYW5kIERpc2FsbG93ZWQuICovDQorLyoweDBEIENvbm5lY3Rpb24gUmVqZWN0ZWQgZHVlIHRvIExpbWl0ZWQgUmVzb3VyY2VzDQorMHgwRSBDb25uZWN0aW9uIFJlamVjdGVkIER1ZSBUbyBTZWN1cml0eSBSZWFzb25zDQorMHgwRiBDb25uZWN0aW9uIFJlamVjdGVkIGR1ZSB0byBVbmFjY2VwdGFibGUgQkRfQUREUg0KKzB4MTAgQ29ubmVjdGlvbiBBY2NlcHQgVGltZW91dCBFeGNlZWRlZA0KKzB4MTEgVW5zdXBwb3J0ZWQgRmVhdHVyZSBvciBQYXJhbWV0ZXIgVmFsdWUqLw0KKyNkZWZpbmUgQkxFX0hDSV9TVEFUVVNfQ09ERV9JTlZBTElEX0JUTEVfQ09NTUFORF9QQVJBTUVURVJTIDB4MTIgIC8qKjwgSW52YWxpZCBCTEUgQ29tbWFuZCBQYXJhbWV0ZXJzLiAqLw0KKyNkZWZpbmUgQkxFX0hDSV9SRU1PVEVfVVNFUl9URVJNSU5BVEVEX0NPTk5FQ1RJT04gICAgICAgICAgIDB4MTMgIC8qKjwgUmVtb3RlIFVzZXIgVGVybWluYXRlZCBDb25uZWN0aW9uLiAqLw0KKyNkZWZpbmUgQkxFX0hDSV9SRU1PVEVfREVWX1RFUk1JTkFUSU9OX0RVRV9UT19MT1dfUkVTT1VSQ0VTIDB4MTQgIC8qKjwgUmVtb3RlIERldmljZSBUZXJtaW5hdGVkIENvbm5lY3Rpb24gZHVlIHRvIGxvdyByZXNvdXJjZXMuKi8NCisjZGVmaW5lIEJMRV9IQ0lfUkVNT1RFX0RFVl9URVJNSU5BVElPTl9EVUVfVE9fUE9XRVJfT0ZGICAgICAweDE1ICAvKio8IFJlbW90ZSBEZXZpY2UgVGVybWluYXRlZCBDb25uZWN0aW9uIGR1ZSB0byBwb3dlciBvZmYuICovDQorI2RlZmluZSBCTEVfSENJX0xPQ0FMX0hPU1RfVEVSTUlOQVRFRF9DT05ORUNUSU9OICAgICAgICAgICAgMHgxNiAgLyoqPCBMb2NhbCBIb3N0IFRlcm1pbmF0ZWQgQ29ubmVjdGlvbi4gKi8NCisvKg0KKzB4MTcgUmVwZWF0ZWQgQXR0ZW1wdHMNCisweDE4IFBhaXJpbmcgTm90IEFsbG93ZWQNCisweDE5IFVua25vd24gTE1QIFBEVQ0KKyovDQorI2RlZmluZSBCTEVfSENJX1VOU1VQUE9SVEVEX1JFTU9URV9GRUFUVVJFIDB4MUEgICAgICAgICAgICAgICAgICAgLyoqPCBVbnN1cHBvcnRlZCBSZW1vdGUgRmVhdHVyZS4gKi8NCisvKg0KKzB4MUIgU0NPIE9mZnNldCBSZWplY3RlZA0KKzB4MUMgU0NPIEludGVydmFsIFJlamVjdGVkDQorMHgxRCBTQ08gQWlyIE1vZGUgUmVqZWN0ZWQqLw0KKyNkZWZpbmUgQkxFX0hDSV9TVEFUVVNfQ09ERV9JTlZBTElEX0xNUF9QQVJBTUVURVJTICAgICAweDFFICAgICAgIC8qKjwgSW52YWxpZCBMTVAgUGFyYW1ldGVycy4gKi8NCisjZGVmaW5lIEJMRV9IQ0lfU1RBVFVTX0NPREVfVU5TUEVDSUZJRURfRVJST1IgICAgICAgICAgMHgxRiAgICAgICAvKio8IFVuc3BlY2lmaWVkIEVycm9yLiAqLw0KKy8qMHgyMCBVbnN1cHBvcnRlZCBMTVAgUGFyYW1ldGVyIFZhbHVlDQorMHgyMSBSb2xlIENoYW5nZSBOb3QgQWxsb3dlZA0KKyovDQorI2RlZmluZSBCTEVfSENJX1NUQVRVU19DT0RFX0xNUF9SRVNQT05TRV9USU1FT1VUICAgICAgIDB4MjIgICAgICAgLyoqPCBMTVAgUmVzcG9uc2UgVGltZW91dC4gKi8NCisjZGVmaW5lIEJMRV9IQ0lfU1RBVFVTX0NPREVfTE1QX0VSUk9SX1RSQU5TQUNUSU9OX0NPTExJU0lPTiAweDIzICAvKio8IExNUCBFcnJvciBUcmFuc2FjdGlvbiBDb2xsaXNpb24vTEwgUHJvY2VkdXJlIENvbGxpc2lvbi4gKi8NCisjZGVmaW5lIEJMRV9IQ0lfU1RBVFVTX0NPREVfTE1QX1BEVV9OT1RfQUxMT1dFRCAgICAgICAgMHgyNCAgICAgICAvKio8IExNUCBQRFUgTm90IEFsbG93ZWQuICovDQorLyoweDI1IEVuY3J5cHRpb24gTW9kZSBOb3QgQWNjZXB0YWJsZQ0KKzB4MjYgTGluayBLZXkgQ2FuIE5vdCBiZSBDaGFuZ2VkDQorMHgyNyBSZXF1ZXN0ZWQgUW9TIE5vdCBTdXBwb3J0ZWQNCisqLw0KKyNkZWZpbmUgQkxFX0hDSV9JTlNUQU5UX1BBU1NFRCAgICAgICAgICAgICAgICAgICAgICAgICAweDI4ICAgICAgIC8qKjwgSW5zdGFudCBQYXNzZWQuICovDQorI2RlZmluZSBCTEVfSENJX1BBSVJJTkdfV0lUSF9VTklUX0tFWV9VTlNVUFBPUlRFRCAgICAgIDB4MjkgICAgICAgLyoqPCBQYWlyaW5nIHdpdGggVW5pdCBLZXkgVW5zdXBwb3J0ZWQuICovDQorI2RlZmluZSBCTEVfSENJX0RJRkZFUkVOVF9UUkFOU0FDVElPTl9DT0xMSVNJT04gICAgICAgIDB4MkEgICAgICAgLyoqPCBEaWZmZXJlbnQgVHJhbnNhY3Rpb24gQ29sbGlzaW9uLiAqLw0KKy8qDQorMHgyQiBSZXNlcnZlZA0KKzB4MkMgUW9TIFVuYWNjZXB0YWJsZSBQYXJhbWV0ZXINCisweDJEIFFvUyBSZWplY3RlZA0KKzB4MkUgQ2hhbm5lbCBDbGFzc2lmaWNhdGlvbiBOb3QgU3VwcG9ydGVkDQorMHgyRiBJbnN1ZmZpY2llbnQgU2VjdXJpdHkNCisweDMwIFBhcmFtZXRlciBPdXQgT2YgTWFuZGF0b3J5IFJhbmdlDQorMHgzMSBSZXNlcnZlZA0KKzB4MzIgUm9sZSBTd2l0Y2ggUGVuZGluZw0KKzB4MzMgUmVzZXJ2ZWQNCisweDM0IFJlc2VydmVkIFNsb3QgVmlvbGF0aW9uDQorMHgzNSBSb2xlIFN3aXRjaCBGYWlsZWQNCisweDM2IEV4dGVuZGVkIElucXVpcnkgUmVzcG9uc2UgVG9vIExhcmdlDQorMHgzNyBTZWN1cmUgU2ltcGxlIFBhaXJpbmcgTm90IFN1cHBvcnRlZCBCeSBIb3N0Lg0KKzB4MzggSG9zdCBCdXN5IC0gUGFpcmluZw0KKzB4MzkgQ29ubmVjdGlvbiBSZWplY3RlZCBkdWUgdG8gTm8gU3VpdGFibGUgQ2hhbm5lbCBGb3VuZCovDQorI2RlZmluZSBCTEVfSENJX0NPTlRST0xMRVJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4M0EgICAgICAgLyoqPCBDb250cm9sbGVyIEJ1c3kuICovDQorI2RlZmluZSBCTEVfSENJX0NPTk5fSU5URVJWQUxfVU5BQ0NFUFRBQkxFICAgICAgICAgICAgIDB4M0IgICAgICAgLyoqPCBDb25uZWN0aW9uIEludGVydmFsIFVuYWNjZXB0YWJsZS4gKi8NCisjZGVmaW5lIEJMRV9IQ0lfRElSRUNURURfQURWRVJUSVNFUl9USU1FT1VUICAgICAgICAgICAgMHgzQyAgICAgICAvKio8IERpcmVjdGVkIEFkdmVydGlzZW1lbnQgVGltZW91dC4gKi8NCisjZGVmaW5lIEJMRV9IQ0lfQ09OTl9URVJNSU5BVEVEX0RVRV9UT19NSUNfRkFJTFVSRSAgICAgMHgzRCAgICAgICAvKio8IENvbm5lY3Rpb24gVGVybWluYXRlZCBkdWUgdG8gTUlDIEZhaWx1cmUuICovDQorI2RlZmluZSBCTEVfSENJX0NPTk5fRkFJTEVEX1RPX0JFX0VTVEFCTElTSEVEICAgICAgICAgIDB4M0UgICAgICAgLyoqPCBDb25uZWN0aW9uIEZhaWxlZCB0byBiZSBFc3RhYmxpc2hlZC4gKi8NCisNCisvKiogQH0gKi8NCisNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8vIEJMRV9IQ0lfSF9fDQorDQorLyoqIEB9ICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfbDJjYXAuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2wyY2FwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhYjI4MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2wyY2FwLmgKQEAgLTAsMCArMSw2NyBAQAorLyoNCisgKiBDb3B5cmlnaHQgKGMpIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2Ygb3RoZXINCisgKiAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KKyAqICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiAgIDQuIFRoaXMgc29mdHdhcmUgbXVzdCBvbmx5IGJlIHVzZWQgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYw0KKyAqICAgU2VtaWNvbmR1Y3RvciBBU0EsIG9yIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBhIHRoaXJkIHBhcnR5IHRoYXQNCisgKiAgIGlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljIFNlbWljb25kdWN0b3IuDQorICoNCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisvKioNCisgIEBhZGR0b2dyb3VwIEJMRV9MMkNBUCBMb2dpY2FsIExpbmsgQ29udHJvbCBhbmQgQWRhcHRhdGlvbiBQcm90b2NvbCAoTDJDQVApDQorICBAew0KKyAgQGJyaWVmIERlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgTDJDQVAgaW50ZXJmYWNlLg0KKyAqLw0KKw0KKyNpZm5kZWYgQkxFX0wyQ0FQX0hfXw0KKyNkZWZpbmUgQkxFX0wyQ0FQX0hfXw0KKw0KKyNpbmNsdWRlICJibGVfdHlwZXMuaCINCisjaW5jbHVkZSAiYmxlX3Jhbmdlcy5oIg0KKyNpbmNsdWRlICJibGVfZXJyLmgiDQorI2luY2x1ZGUgIm5yZl9zdmMuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKipAYWRkdG9ncm91cCBCTEVfTDJDQVBfREVGSU5FUyBEZWZpbmVzDQorICogQHsgKi8NCisNCisvKiogQH0gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8vIEJMRV9MMkNBUF9IX18NCisNCisvKioNCisgIEB9DQorKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9yYW5nZXMuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX3Jhbmdlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2M2FlOTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9yYW5nZXMuaApAQCAtMCwwICsxLDE1NCBAQAorLyoNCisgKiBDb3B5cmlnaHQgKGMpIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2Ygb3RoZXINCisgKiAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KKyAqICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiAgIDQuIFRoaXMgc29mdHdhcmUgbXVzdCBvbmx5IGJlIHVzZWQgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYw0KKyAqICAgU2VtaWNvbmR1Y3RvciBBU0EsIG9yIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBhIHRoaXJkIHBhcnR5IHRoYXQNCisgKiAgIGlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljIFNlbWljb25kdWN0b3IuDQorICoNCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisvKioNCisgIEBhZGR0b2dyb3VwIEJMRV9DT01NT04NCisgIEB7DQorICBAZGVmZ3JvdXAgYmxlX3JhbmdlcyBNb2R1bGUgc3BlY2lmaWMgU1ZDLCBldmVudCBhbmQgb3B0aW9uIG51bWJlciBzdWJyYW5nZXMNCisgIEB7DQorDQorICBAYnJpZWYgRGVmaW5pdGlvbiBvZiBTVkMsIGV2ZW50IGFuZCBvcHRpb24gbnVtYmVyIHN1YnJhbmdlcyBmb3IgZWFjaCBBUEkgbW9kdWxlLg0KKw0KKyAgQG5vdGUNCisgIFNWQ3MsIGV2ZW50IGFuZCBvcHRpb24gbnVtYmVycyBhcmUgc3BsaXQgaW50byBzdWJyYW5nZXMgZm9yIGVhY2ggQVBJIG1vZHVsZS4NCisgIEVhY2ggbW9kdWxlIHJlY2VpdmVzIGl0cyBlbnRpcmUgYWxsb2NhdGVkIHJhbmdlIG9mIFNWQyBjYWxscywgd2hldGhlciBpbXBsZW1lbnRlZCBvciBub3QsDQorICBidXQgcmV0dXJuIEJMRV9FUlJPUl9OT1RfU1VQUE9SVEVEIGZvciB1bmltcGxlbWVudGVkIG9yIHVuZGVmaW5lZCBjYWxscyBpbiBpdHMgcmFuZ2UuDQorDQorICBOb3RlIHRoYXQgdGhlIHN5bWJvbHMgQkxFXzxtb2R1bGU+X1NWQ19MQVNUIGlzIHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBTVkMgcmFuZ2UsDQorICByYXRoZXIgdGhhbiB0aGUgbGFzdCBTVkMgZnVuY3Rpb24gY2FsbCBhY3R1YWxseSBkZWZpbmVkIGFuZCBpbXBsZW1lbnRlZC4NCisNCisgIFNwZWNpZmljIFNWQywgZXZlbnQgYW5kIG9wdGlvbiB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gZWFjaCBtb2R1bGUncyBibGVfPG1vZHVsZT4uaCBmaWxlLA0KKyAgd2hpY2ggZGVmaW5lcyBuYW1lcyBvZiBlYWNoIGluZGl2aWR1YWwgU1ZDIGNvZGUgYmFzZWQgb24gdGhlIHJhbmdlIHN0YXJ0IHZhbHVlLg0KKyovDQorDQorI2lmbmRlZiBCTEVfUkFOR0VTX0hfXw0KKyNkZWZpbmUgQkxFX1JBTkdFU19IX18NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjZGVmaW5lIEJMRV9TVkNfQkFTRSAgICAgICAgICAgMHg2MCAgICAgICAvKio8IENvbW1vbiBCTEUgU1ZDIGJhc2UuICovDQorI2RlZmluZSBCTEVfU1ZDX0xBU1QgICAgICAgICAgIDB4NkIgICAgICAgLyoqPCBDb21tb24gQkxFIFNWQyBsYXN0LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0dBUF9TVkNfQkFTRSAgICAgICAweDZDICAgICAgIC8qKjwgR0FQIEJMRSBTVkMgYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU1ZDX0xBU1QgICAgICAgMHg5MyAgICAgICAvKio8IEdBUCBCTEUgU1ZDIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FUVENfU1ZDX0JBU0UgICAgIDB4OTQgICAgICAgLyoqPCBHQVRUQyBCTEUgU1ZDIGJhc2UuICovDQorI2RlZmluZSBCTEVfR0FUVENfU1ZDX0xBU1QgICAgIDB4OUYgICAgICAgLyoqPCBHQVRUQyBCTEUgU1ZDIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FUVFNfU1ZDX0JBU0UgICAgIDB4QTAgICAgICAgLyoqPCBHQVRUUyBCTEUgU1ZDIGJhc2UuICovDQorI2RlZmluZSBCTEVfR0FUVFNfU1ZDX0xBU1QgICAgIDB4QUYgICAgICAgLyoqPCBHQVRUUyBCTEUgU1ZDIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfTDJDQVBfU1ZDX0JBU0UgICAgIDB4QjAgICAgICAgLyoqPCBMMkNBUCBCTEUgU1ZDIGJhc2UuICovDQorI2RlZmluZSBCTEVfTDJDQVBfU1ZDX0xBU1QgICAgIDB4QkYgICAgICAgLyoqPCBMMkNBUCBCTEUgU1ZDIGxhc3QuICovDQorDQorDQorI2RlZmluZSBCTEVfRVZUX0lOVkFMSUQgICAgICAgIDB4MDAgICAgICAgLyoqPCBJbnZhbGlkIEJMRSBFdmVudC4gKi8NCisNCisjZGVmaW5lIEJMRV9FVlRfQkFTRSAgICAgICAgICAgMHgwMSAgICAgICAvKio8IENvbW1vbiBCTEUgRXZlbnQgYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9FVlRfTEFTVCAgICAgICAgICAgMHgwRiAgICAgICAvKio8IENvbW1vbiBCTEUgRXZlbnQgbGFzdC4gKi8NCisNCisjZGVmaW5lIEJMRV9HQVBfRVZUX0JBU0UgICAgICAgMHgxMCAgICAgICAvKio8IEdBUCBCTEUgRXZlbnQgYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfRVZUX0xBU1QgICAgICAgMHgyRiAgICAgICAvKio8IEdBUCBCTEUgRXZlbnQgbGFzdC4gKi8NCisNCisjZGVmaW5lIEJMRV9HQVRUQ19FVlRfQkFTRSAgICAgMHgzMCAgICAgICAvKio8IEdBVFRDIEJMRSBFdmVudCBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRDX0VWVF9MQVNUICAgICAweDRGICAgICAgIC8qKjwgR0FUVEMgQkxFIEV2ZW50IGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FUVFNfRVZUX0JBU0UgICAgIDB4NTAgICAgICAgLyoqPCBHQVRUUyBCTEUgRXZlbnQgYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19FVlRfTEFTVCAgICAgMHg2RiAgICAgICAvKio8IEdBVFRTIEJMRSBFdmVudCBsYXN0LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0wyQ0FQX0VWVF9CQVNFICAgICAweDcwICAgICAgIC8qKjwgTDJDQVAgQkxFIEV2ZW50IGJhc2UuICovDQorI2RlZmluZSBCTEVfTDJDQVBfRVZUX0xBU1QgICAgIDB4OEYgICAgICAgLyoqPCBMMkNBUCBCTEUgRXZlbnQgbGFzdC4gKi8NCisNCisNCisjZGVmaW5lIEJMRV9PUFRfSU5WQUxJRCAgICAgICAgMHgwMCAgICAgICAvKio8IEludmFsaWQgQkxFIE9wdGlvbi4gKi8NCisNCisjZGVmaW5lIEJMRV9PUFRfQkFTRSAgICAgICAgICAgMHgwMSAgICAgICAvKio8IENvbW1vbiBCTEUgT3B0aW9uIGJhc2UuICovDQorI2RlZmluZSBCTEVfT1BUX0xBU1QgICAgICAgICAgIDB4MUYgICAgICAgLyoqPCBDb21tb24gQkxFIE9wdGlvbiBsYXN0LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0dBUF9PUFRfQkFTRSAgICAgICAweDIwICAgICAgIC8qKjwgR0FQIEJMRSBPcHRpb24gYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfT1BUX0xBU1QgICAgICAgMHgzRiAgICAgICAvKio8IEdBUCBCTEUgT3B0aW9uIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FUVF9PUFRfQkFTRSAgICAgIDB4NDAgICAgICAgLyoqPCBHQVRUIEJMRSBPcHRpb24gYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX09QVF9MQVNUICAgICAgMHg1RiAgICAgICAvKio8IEdBVFQgQkxFIE9wdGlvbiBsYXN0LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0dBVFRDX09QVF9CQVNFICAgICAweDYwICAgICAgIC8qKjwgR0FUVEMgQkxFIE9wdGlvbiBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRDX09QVF9MQVNUICAgICAweDdGICAgICAgIC8qKjwgR0FUVEMgQkxFIE9wdGlvbiBsYXN0LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0dBVFRTX09QVF9CQVNFICAgICAweDgwICAgICAgIC8qKjwgR0FUVFMgQkxFIE9wdGlvbiBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX09QVF9MQVNUICAgICAweDlGICAgICAgIC8qKjwgR0FUVFMgQkxFIE9wdGlvbiBsYXN0LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0wyQ0FQX09QVF9CQVNFICAgICAweEEwICAgICAgIC8qKjwgTDJDQVAgQkxFIE9wdGlvbiBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0wyQ0FQX09QVF9MQVNUICAgICAweEJGICAgICAgIC8qKjwgTDJDQVAgQkxFIE9wdGlvbiBsYXN0LiAqLw0KKw0KKw0KKyNkZWZpbmUgQkxFX0NGR19JTlZBTElEICAgICAgICAweDAwICAgICAgIC8qKjwgSW52YWxpZCBCTEUgY29uZmlndXJhdGlvbi4gKi8NCisNCisjZGVmaW5lIEJMRV9DRkdfQkFTRSAgICAgICAgICAgMHgwMSAgICAgICAvKio8IENvbW1vbiBCTEUgY29uZmlndXJhdGlvbiBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0NGR19MQVNUICAgICAgICAgICAweDFGICAgICAgIC8qKjwgQ29tbW9uIEJMRSBjb25maWd1cmF0aW9uIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfQ09OTl9DRkdfQkFTRSAgICAgIDB4MjAgICAgICAgLyoqPCBCTEUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIGJhc2UuICovDQorI2RlZmluZSBCTEVfQ09OTl9DRkdfTEFTVCAgICAgIDB4M0YgICAgICAgLyoqPCBCTEUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FQX0NGR19CQVNFICAgICAgIDB4NDAgICAgICAgLyoqPCBHQVAgQkxFIGNvbmZpZ3VyYXRpb24gYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQ0ZHX0xBU1QgICAgICAgMHg1RiAgICAgICAvKio8IEdBUCBCTEUgY29uZmlndXJhdGlvbiBsYXN0LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0dBVFRfQ0ZHX0JBU0UgICAgICAweDYwICAgICAgIC8qKjwgR0FUVCBCTEUgY29uZmlndXJhdGlvbiBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ0ZHX0xBU1QgICAgICAweDdGICAgICAgIC8qKjwgR0FUVCBCTEUgY29uZmlndXJhdGlvbiBsYXN0LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0dBVFRDX0NGR19CQVNFICAgICAweDgwICAgICAgIC8qKjwgR0FUVEMgQkxFIGNvbmZpZ3VyYXRpb24gYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUQ19DRkdfTEFTVCAgICAgMHg5RiAgICAgICAvKio8IEdBVFRDIEJMRSBjb25maWd1cmF0aW9uIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FUVFNfQ0ZHX0JBU0UgICAgIDB4QTAgICAgICAgLyoqPCBHQVRUUyBCTEUgY29uZmlndXJhdGlvbiBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX0NGR19MQVNUICAgICAweEJGICAgICAgIC8qKjwgR0FUVFMgQkxFIGNvbmZpZ3VyYXRpb24gbGFzdC4gKi8NCisNCisjZGVmaW5lIEJMRV9MMkNBUF9DRkdfQkFTRSAgICAgMHhDMCAgICAgICAvKio8IEwyQ0FQIEJMRSBjb25maWd1cmF0aW9uIGJhc2UuICovDQorI2RlZmluZSBCTEVfTDJDQVBfQ0ZHX0xBU1QgICAgIDB4REYgICAgICAgLyoqPCBMMkNBUCBCTEUgY29uZmlndXJhdGlvbiBsYXN0LiAqLw0KKw0KKw0KKw0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLyogQkxFX1JBTkdFU19IX18gKi8NCisNCisvKioNCisgIEB9DQorICBAfQ0KKyovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfdHlwZXMuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2MWM3NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX3R5cGVzLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyDQorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMNCisgKiAgIFNlbWljb25kdWN0b3IgQVNBLCBvciBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgYSB0aGlyZCBwYXJ0eSB0aGF0DQorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorLyoqDQorICBAYWRkdG9ncm91cCBCTEVfQ09NTU9ODQorICBAew0KKyAgQGRlZmdyb3VwIGJsZV90eXBlcyBDb21tb24gdHlwZXMgYW5kIG1hY3JvIGRlZmluaXRpb25zDQorICBAew0KKw0KKyAgQGJyaWVmIENvbW1vbiB0eXBlcyBhbmQgbWFjcm8gZGVmaW5pdGlvbnMgZm9yIHRoZSBCTEUgU29mdERldmljZS4NCisgKi8NCisNCisjaWZuZGVmIEJMRV9UWVBFU19IX18NCisjZGVmaW5lIEJMRV9UWVBFU19IX18NCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9UWVBFU19ERUZJTkVTIERlZmluZXMNCisgKiBAeyAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0NPTk5fSEFORExFUyBCTEUgQ29ubmVjdGlvbiBIYW5kbGVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9DT05OX0hBTkRMRV9JTlZBTElEIDB4RkZGRiAgLyoqPCBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLiAqLw0KKyNkZWZpbmUgQkxFX0NPTk5fSEFORExFX0FMTCAgICAgMHhGRkZFICAvKio8IEFwcGxpZXMgdG8gYWxsIENvbm5lY3Rpb24gSGFuZGxlcy4gKi8NCisvKiogQH0gKi8NCisNCisNCisvKiogQGRlZmdyb3VwIEJMRV9VVUlEX1ZBTFVFUyBBc3NpZ25lZCBWYWx1ZXMgZm9yIEJMRSBVVUlEcw0KKyAqIEB7ICovDQorLyogR2VuZXJpYyBVVUlEcywgYXBwbGljYWJsZSB0byBhbGwgc2VydmljZXMgKi8NCisjZGVmaW5lIEJMRV9VVUlEX1VOS05PV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAgLyoqPCBSZXNlcnZlZCBVVUlELiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfU0VSVklDRV9QUklNQVJZICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMCAvKio8IFByaW1hcnkgU2VydmljZS4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX1NFUlZJQ0VfU0VDT05EQVJZICAgICAgICAgICAgICAgICAgICAweDI4MDEgLyoqPCBTZWNvbmRhcnkgU2VydmljZS4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX1NFUlZJQ0VfSU5DTFVERSAgICAgICAgICAgICAgICAgICAgICAweDI4MDIgLyoqPCBJbmNsdWRlLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfQ0hBUkFDVEVSSVNUSUMgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMyAvKio8IENoYXJhY3RlcmlzdGljLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfREVTQ1JJUFRPUl9DSEFSX0VYVF9QUk9QICAgICAgICAgICAgIDB4MjkwMCAvKio8IENoYXJhY3RlcmlzdGljIEV4dGVuZGVkIFByb3BlcnRpZXMgRGVzY3JpcHRvci4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0RFU0NSSVBUT1JfQ0hBUl9VU0VSX0RFU0MgICAgICAgICAgICAweDI5MDEgLyoqPCBDaGFyYWN0ZXJpc3RpYyBVc2VyIERlc2NyaXB0aW9uIERlc2NyaXB0b3IuICovDQorI2RlZmluZSBCTEVfVVVJRF9ERVNDUklQVE9SX0NMSUVOVF9DSEFSX0NPTkZJRyAgICAgICAgMHgyOTAyIC8qKjwgQ2xpZW50IENoYXJhY3RlcmlzdGljIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvci4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0RFU0NSSVBUT1JfU0VSVkVSX0NIQVJfQ09ORklHICAgICAgICAweDI5MDMgLyoqPCBTZXJ2ZXIgQ2hhcmFjdGVyaXN0aWMgQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfREVTQ1JJUFRPUl9DSEFSX1BSRVNFTlRBVElPTl9GT1JNQVQgIDB4MjkwNCAvKio8IENoYXJhY3RlcmlzdGljIFByZXNlbnRhdGlvbiBGb3JtYXQgRGVzY3JpcHRvci4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0RFU0NSSVBUT1JfQ0hBUl9BR0dSRUdBVEVfRk9STUFUICAgICAweDI5MDUgLyoqPCBDaGFyYWN0ZXJpc3RpYyBBZ2dyZWdhdGUgRm9ybWF0IERlc2NyaXB0b3IuICovDQorLyogR0FUVCBzcGVjaWZpYyBVVUlEcyAqLw0KKyNkZWZpbmUgQkxFX1VVSURfR0FUVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMSAvKio8IEdlbmVyaWMgQXR0cmlidXRlIFByb2ZpbGUuICovDQorI2RlZmluZSBCTEVfVVVJRF9HQVRUX0NIQVJBQ1RFUklTVElDX1NFUlZJQ0VfQ0hBTkdFRCAgMHgyQTA1IC8qKjwgU2VydmljZSBDaGFuZ2VkIENoYXJhY3RlcmlzdGljLiAqLw0KKy8qIEdBUCBzcGVjaWZpYyBVVUlEcyAqLw0KKyNkZWZpbmUgQkxFX1VVSURfR0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMCAvKio8IEdlbmVyaWMgQWNjZXNzIFByb2ZpbGUuICovDQorI2RlZmluZSBCTEVfVVVJRF9HQVBfQ0hBUkFDVEVSSVNUSUNfREVWSUNFX05BTUUgICAgICAgMHgyQTAwIC8qKjwgRGV2aWNlIE5hbWUgQ2hhcmFjdGVyaXN0aWMuICovDQorI2RlZmluZSBCTEVfVVVJRF9HQVBfQ0hBUkFDVEVSSVNUSUNfQVBQRUFSQU5DRSAgICAgICAgMHgyQTAxIC8qKjwgQXBwZWFyYW5jZSBDaGFyYWN0ZXJpc3RpYy4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0dBUF9DSEFSQUNURVJJU1RJQ19SRUNPTk5fQUREUiAgICAgICAweDJBMDMgLyoqPCBSZWNvbm5lY3Rpb24gQWRkcmVzcyBDaGFyYWN0ZXJpc3RpYy4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0dBUF9DSEFSQUNURVJJU1RJQ19QUENQICAgICAgICAgICAgICAweDJBMDQgLyoqPCBQZXJpcGhlcmFsIFByZWZlcnJlZCBDb25uZWN0aW9uIFBhcmFtZXRlcnMgQ2hhcmFjdGVyaXN0aWMuICovDQorI2RlZmluZSBCTEVfVVVJRF9HQVBfQ0hBUkFDVEVSSVNUSUNfQ0FSICAgICAgICAgICAgICAgMHgyQUE2IC8qKjwgQ2VudHJhbCBBZGRyZXNzIFJlc29sdXRpb24gQ2hhcmFjdGVyaXN0aWMuICovDQorLyoqIEB9ICovDQorDQorDQorLyoqIEBkZWZncm91cCBCTEVfVVVJRF9UWVBFUyBUeXBlcyBvZiBVVUlEDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9VVUlEX1RZUEVfVU5LTk9XTiAgICAgICAweDAwIC8qKjwgSW52YWxpZCBVVUlEIHR5cGUuICovDQorI2RlZmluZSBCTEVfVVVJRF9UWVBFX0JMRSAgICAgICAgICAgMHgwMSAvKio8IEJsdWV0b290aCBTSUcgVVVJRCAoMTYtYml0KS4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX1RZUEVfVkVORE9SX0JFR0lOICAweDAyIC8qKjwgVmVuZG9yIFVVSUQgdHlwZXMgc3RhcnQgYXQgdGhpcyBpbmRleCAoMTI4LWJpdCkuICovDQorLyoqIEB9ICovDQorDQorDQorLyoqIEBkZWZncm91cCBCTEVfQVBQRUFSQU5DRVMgQmx1ZXRvb3RoIEFwcGVhcmFuY2UgdmFsdWVzDQorICogIEBub3RlIFJldHJpZXZlZCBmcm9tIGh0dHA6Ly9kZXZlbG9wZXIuYmx1ZXRvb3RoLm9yZy9nYXR0L2NoYXJhY3RlcmlzdGljcy9QYWdlcy9DaGFyYWN0ZXJpc3RpY1ZpZXdlci5hc3B4P3U9b3JnLmJsdWV0b290aC5jaGFyYWN0ZXJpc3RpYy5nYXAuYXBwZWFyYW5jZS54bWwNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKio8IFVua25vd24uICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9HRU5FUklDX1BIT05FICAgICAgICAgICAgICAgICAgICAgICAgIDY0IC8qKjwgR2VuZXJpYyBQaG9uZS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfQ09NUFVURVIgICAgICAgICAgICAgICAgICAgICAxMjggLyoqPCBHZW5lcmljIENvbXB1dGVyLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19XQVRDSCAgICAgICAgICAgICAgICAgICAgICAgIDE5MiAvKio8IEdlbmVyaWMgV2F0Y2guICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9XQVRDSF9TUE9SVFNfV0FUQ0ggICAgICAgICAgICAgICAgICAgMTkzIC8qKjwgV2F0Y2g6IFNwb3J0cyBXYXRjaC4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfQ0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAyNTYgLyoqPCBHZW5lcmljIENsb2NrLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19ESVNQTEFZICAgICAgICAgICAgICAgICAgICAgIDMyMCAvKio8IEdlbmVyaWMgRGlzcGxheS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfUkVNT1RFX0NPTlRST0wgICAgICAgICAgICAgICAzODQgLyoqPCBHZW5lcmljIFJlbW90ZSBDb250cm9sLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19FWUVfR0xBU1NFUyAgICAgICAgICAgICAgICAgIDQ0OCAvKio8IEdlbmVyaWMgRXllLWdsYXNzZXMuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9HRU5FUklDX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgNTEyIC8qKjwgR2VuZXJpYyBUYWcuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9HRU5FUklDX0tFWVJJTkcgICAgICAgICAgICAgICAgICAgICAgNTc2IC8qKjwgR2VuZXJpYyBLZXlyaW5nLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19NRURJQV9QTEFZRVIgICAgICAgICAgICAgICAgIDY0MCAvKio8IEdlbmVyaWMgTWVkaWEgUGxheWVyLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19CQVJDT0RFX1NDQU5ORVIgICAgICAgICAgICAgIDcwNCAvKio8IEdlbmVyaWMgQmFyY29kZSBTY2FubmVyLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19USEVSTU9NRVRFUiAgICAgICAgICAgICAgICAgIDc2OCAvKio8IEdlbmVyaWMgVGhlcm1vbWV0ZXIuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9USEVSTU9NRVRFUl9FQVIgICAgICAgICAgICAgICAgICAgICAgNzY5IC8qKjwgVGhlcm1vbWV0ZXI6IEVhci4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfSEVBUlRfUkFURV9TRU5TT1IgICAgICAgICAgICA4MzIgLyoqPCBHZW5lcmljIEhlYXJ0IHJhdGUgU2Vuc29yLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfSEVBUlRfUkFURV9TRU5TT1JfSEVBUlRfUkFURV9CRUxUICAgIDgzMyAvKio8IEhlYXJ0IFJhdGUgU2Vuc29yOiBIZWFydCBSYXRlIEJlbHQuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9HRU5FUklDX0JMT09EX1BSRVNTVVJFICAgICAgICAgICAgICAgODk2IC8qKjwgR2VuZXJpYyBCbG9vZCBQcmVzc3VyZS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0JMT09EX1BSRVNTVVJFX0FSTSAgICAgICAgICAgICAgICAgICA4OTcgLyoqPCBCbG9vZCBQcmVzc3VyZTogQXJtLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfQkxPT0RfUFJFU1NVUkVfV1JJU1QgICAgICAgICAgICAgICAgIDg5OCAvKio8IEJsb29kIFByZXNzdXJlOiBXcmlzdC4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfSElEICAgICAgICAgICAgICAgICAgICAgICAgICA5NjAgLyoqPCBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlIChISUQpLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfSElEX0tFWUJPQVJEICAgICAgICAgICAgICAgICAgICAgICAgIDk2MSAvKio8IEtleWJvYXJkIChISUQgU3VidHlwZSkuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9ISURfTU9VU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTYyIC8qKjwgTW91c2UgKEhJRCBTdWJ0eXBlKS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0hJRF9KT1lTVElDSyAgICAgICAgICAgICAgICAgICAgICAgICA5NjMgLyoqPCBKb3lzdGljayAoSElEIFN1YnR5cGUpLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfSElEX0dBTUVQQUQgICAgICAgICAgICAgICAgICAgICAgICAgIDk2NCAvKio8IEdhbWVwYWQgKEhJRCBTdWJ0eXBlKS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0hJRF9ESUdJVElaRVJTVUJUWVBFICAgICAgICAgICAgICAgICA5NjUgLyoqPCBEaWdpdGl6ZXIgVGFibGV0IChISUQgU3VidHlwZSkuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9ISURfQ0FSRF9SRUFERVIgICAgICAgICAgICAgICAgICAgICAgOTY2IC8qKjwgQ2FyZCBSZWFkZXIgKEhJRCBTdWJ0eXBlKS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0hJRF9ESUdJVEFMX1BFTiAgICAgICAgICAgICAgICAgICAgICA5NjcgLyoqPCBEaWdpdGFsIFBlbiAoSElEIFN1YnR5cGUpLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfSElEX0JBUkNPREUgICAgICAgICAgICAgICAgICAgICAgICAgIDk2OCAvKio8IEJhcmNvZGUgU2Nhbm5lciAoSElEIFN1YnR5cGUpLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19HTFVDT1NFX01FVEVSICAgICAgICAgICAgICAgMTAyNCAvKio8IEdlbmVyaWMgR2x1Y29zZSBNZXRlci4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfUlVOTklOR19XQUxLSU5HX1NFTlNPUiAgICAgIDEwODggLyoqPCBHZW5lcmljIFJ1bm5pbmcgV2Fsa2luZyBTZW5zb3IuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9SVU5OSU5HX1dBTEtJTkdfU0VOU09SX0lOX1NIT0UgICAgICAxMDg5IC8qKjwgUnVubmluZyBXYWxraW5nIFNlbnNvcjogSW4tU2hvZS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX1JVTk5JTkdfV0FMS0lOR19TRU5TT1JfT05fU0hPRSAgICAgIDEwOTAgLyoqPCBSdW5uaW5nIFdhbGtpbmcgU2Vuc29yOiBPbi1TaG9lLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfUlVOTklOR19XQUxLSU5HX1NFTlNPUl9PTl9ISVAgICAgICAgMTA5MSAvKio8IFJ1bm5pbmcgV2Fsa2luZyBTZW5zb3I6IE9uLUhpcC4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfQ1lDTElORyAgICAgICAgICAgICAgICAgICAgIDExNTIgLyoqPCBHZW5lcmljIEN5Y2xpbmcuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9DWUNMSU5HX0NZQ0xJTkdfQ09NUFVURVIgICAgICAgICAgICAxMTUzIC8qKjwgQ3ljbGluZzogQ3ljbGluZyBDb21wdXRlci4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0NZQ0xJTkdfU1BFRURfU0VOU09SICAgICAgICAgICAgICAgIDExNTQgLyoqPCBDeWNsaW5nOiBTcGVlZCBTZW5zb3IuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9DWUNMSU5HX0NBREVOQ0VfU0VOU09SICAgICAgICAgICAgICAxMTU1IC8qKjwgQ3ljbGluZzogQ2FkZW5jZSBTZW5zb3IuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9DWUNMSU5HX1BPV0VSX1NFTlNPUiAgICAgICAgICAgICAgICAxMTU2IC8qKjwgQ3ljbGluZzogUG93ZXIgU2Vuc29yLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfQ1lDTElOR19TUEVFRF9DQURFTkNFX1NFTlNPUiAgICAgICAgMTE1NyAvKio8IEN5Y2xpbmc6IFNwZWVkIGFuZCBDYWRlbmNlIFNlbnNvci4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfUFVMU0VfT1hJTUVURVIgICAgICAgICAgICAgIDMxMzYgLyoqPCBHZW5lcmljIFB1bHNlIE94aW1ldGVyLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfUFVMU0VfT1hJTUVURVJfRklOR0VSVElQICAgICAgICAgICAgMzEzNyAvKio8IEZpbmdlcnRpcCAoUHVsc2UgT3hpbWV0ZXIgc3VidHlwZSkuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9QVUxTRV9PWElNRVRFUl9XUklTVF9XT1JOICAgICAgICAgICAzMTM4IC8qKjwgV3Jpc3QgV29ybihQdWxzZSBPeGltZXRlciBzdWJ0eXBlKS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfV0VJR0hUX1NDQUxFICAgICAgICAgICAgICAgIDMyMDAgLyoqPCBHZW5lcmljIFdlaWdodCBTY2FsZS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfT1VURE9PUl9TUE9SVFNfQUNUICAgICAgICAgIDUxODQgLyoqPCBHZW5lcmljIE91dGRvb3IgU3BvcnRzIEFjdGl2aXR5LiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfT1VURE9PUl9TUE9SVFNfQUNUX0xPQ19ESVNQICAgICAgICAgNTE4NSAvKio8IExvY2F0aW9uIERpc3BsYXkgRGV2aWNlIChPdXRkb29yIFNwb3J0cyBBY3Rpdml0eSBzdWJ0eXBlKS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX09VVERPT1JfU1BPUlRTX0FDVF9MT0NfQU5EX05BVl9ESVNQIDUxODYgLyoqPCBMb2NhdGlvbiBhbmQgTmF2aWdhdGlvbiBEaXNwbGF5IERldmljZSAoT3V0ZG9vciBTcG9ydHMgQWN0aXZpdHkgc3VidHlwZSkuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9PVVRET09SX1NQT1JUU19BQ1RfTE9DX1BPRCAgICAgICAgICA1MTg3IC8qKjwgTG9jYXRpb24gUG9kIChPdXRkb29yIFNwb3J0cyBBY3Rpdml0eSBzdWJ0eXBlKS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX09VVERPT1JfU1BPUlRTX0FDVF9MT0NfQU5EX05BVl9QT0QgIDUxODggLyoqPCBMb2NhdGlvbiBhbmQgTmF2aWdhdGlvbiBQb2QgKE91dGRvb3IgU3BvcnRzIEFjdGl2aXR5IHN1YnR5cGUpLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAYnJpZWYgU2V0IC50eXBlIGFuZCAudXVpZCBmaWVsZHMgb2YgYmxlX3V1aWRfc3RydWN0IHRvIHNwZWNpZmllZCBVVUlEIHZhbHVlLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfQkxFX0FTU0lHTihpbnN0YW5jZSwgdmFsdWUpIGRvIHtcDQorICAgICAgICAgICAgaW5zdGFuY2UudHlwZSA9IEJMRV9VVUlEX1RZUEVfQkxFOyBcDQorICAgICAgICAgICAgaW5zdGFuY2UudXVpZCA9IHZhbHVlO30gd2hpbGUoMCkNCisNCisvKiogQGJyaWVmIENvcHkgdHlwZSBhbmQgdXVpZCBtZW1iZXJzIGZyb20gc3JjIHRvIGRzdCBibGVfdXVpZF90IHBvaW50ZXIuIEJvdGggcG9pbnRlcnMgbXVzdCBiZSB2YWxpZC9ub24tbnVsbC4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0NPUFlfUFRSKGRzdCwgc3JjKSBkbyB7XA0KKyAgICAgICAgICAgIChkc3QpLT50eXBlID0gKHNyYyktPnR5cGU7IFwNCisgICAgICAgICAgICAoZHN0KS0+dXVpZCA9IChzcmMpLT51dWlkO30gd2hpbGUoMCkNCisNCisvKiogQGJyaWVmIENvcHkgdHlwZSBhbmQgdXVpZCBtZW1iZXJzIGZyb20gc3JjIHRvIGRzdCBibGVfdXVpZF90IHN0cnVjdC4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0NPUFlfSU5TVChkc3QsIHNyYykgZG8ge1wNCisgICAgICAgICAgICAoZHN0KS50eXBlID0gKHNyYykudHlwZTsgXA0KKyAgICAgICAgICAgIChkc3QpLnV1aWQgPSAoc3JjKS51dWlkO30gd2hpbGUoMCkNCisNCisvKiogQGJyaWVmIENvbXBhcmUgZm9yIGVxdWFsaXR5IGJvdGggdHlwZSBhbmQgdXVpZCBtZW1iZXJzIG9mIHR3byAodmFsaWQsIG5vbi1udWxsKSBibGVfdXVpZF90IHBvaW50ZXJzLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfRVEocF91dWlkMSwgcF91dWlkMikgXA0KKyAgICAgICAgICAgICgoKHBfdXVpZDEpLT50eXBlID09IChwX3V1aWQyKS0+dHlwZSkgJiYgKChwX3V1aWQxKS0+dXVpZCA9PSAocF91dWlkMiktPnV1aWQpKQ0KKw0KKy8qKiBAYnJpZWYgQ29tcGFyZSBmb3IgZGlmZmVyZW5jZSBib3RoIHR5cGUgYW5kIHV1aWQgbWVtYmVycyBvZiB0d28gKHZhbGlkLCBub24tbnVsbCkgYmxlX3V1aWRfdCBwb2ludGVycy4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX05FUShwX3V1aWQxLCBwX3V1aWQyKSBcDQorICAgICAgICAgICAgKCgocF91dWlkMSktPnR5cGUgIT0gKHBfdXVpZDIpLT50eXBlKSB8fCAoKHBfdXVpZDEpLT51dWlkICE9IChwX3V1aWQyKS0+dXVpZCkpDQorDQorLyoqIEB9ICovDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9UWVBFU19TVFJVQ1RVUkVTIFN0cnVjdHVyZXMNCisgKiBAeyAqLw0KKw0KKy8qKiBAYnJpZWYgMTI4IGJpdCBVVUlEIHZhbHVlcy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgdXVpZDEyOFsxNl07IC8qKjwgTGl0dGxlLUVuZGlhbiBVVUlEIGJ5dGVzLiAqLw0KK30gYmxlX3V1aWQxMjhfdDsNCisNCisvKiogQGJyaWVmICBCbHVldG9vdGggTG93IEVuZXJneSBVVUlEIHR5cGUsIGVuY2Fwc3VsYXRlcyBib3RoIDE2LWJpdCBhbmQgMTI4LWJpdCBVVUlEcy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgIHV1aWQ7IC8qKjwgMTYtYml0IFVVSUQgdmFsdWUgb3Igb2N0ZXRzIDEyLTEzIG9mIDEyOC1iaXQgVVVJRC4gKi8NCisgIHVpbnQ4X3QgICAgIHR5cGU7IC8qKjwgVVVJRCB0eXBlLCBzZWUgQHJlZiBCTEVfVVVJRF9UWVBFUy4gSWYgdHlwZSBpcyBAcmVmIEJMRV9VVUlEX1RZUEVfVU5LTk9XTiwgdGhlIHZhbHVlIG9mIHV1aWQgaXMgdW5kZWZpbmVkLiAqLw0KK30gYmxlX3V1aWRfdDsNCisNCisvKiogQH0gKi8NCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIEJMRV9UWVBFU19IX18gKi8NCisNCisvKioNCisgIEB9DQorICBAfQ0KKyovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmY1Mi9ucmZfbWJyLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZjUyL25yZl9tYnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2JlOTZiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmY1Mi9ucmZfbWJyLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcgorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMKKyAqICAgU2VtaWNvbmR1Y3RvciBBU0EsIG9yIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBhIHRoaXJkIHBhcnR5IHRoYXQKKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4KKyAqCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKy8qKgorICBAZGVmZ3JvdXAgbnJmX21icl9hcGkgTWFzdGVyIEJvb3QgUmVjb3JkIEFQSQorICBAeworCisgIEBicmllZiBBUElzIGZvciB1cGRhdGluZyBTb2Z0RGV2aWNlIGFuZCBCb290TG9hZGVyCisKKyovCisKKyNpZm5kZWYgTlJGX01CUl9IX18KKyNkZWZpbmUgTlJGX01CUl9IX18KKworI2luY2x1ZGUgIm5yZl9zdmMuaCIKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQGFkZHRvZ3JvdXAgTlJGX01CUl9ERUZJTkVTIERlZmluZXMKKyAqIEB7ICovCisKKy8qKkBicmllZiBNQlIgU1ZDIEJhc2UgbnVtYmVyLiAqLworI2RlZmluZSBNQlJfU1ZDX0JBU0UgICAgICAgICAgICAoMHgxOCkKKworLyoqQGJyaWVmIFBhZ2Ugc2l6ZSBpbiB3b3Jkcy4gKi8KKyNkZWZpbmUgTUJSX1BBR0VfU0laRV9JTl9XT1JEUyAgKDEwMjQpCisKKy8qKiBAYnJpZWYgVGhlIHNpemUgdGhhdCBtdXN0IGJlIHJlc2VydmVkIGZvciB0aGUgTUJSIHdoZW4gYSBTb2Z0RGV2aWNlIGlzIHdyaXR0ZW4gdG8gZmxhc2guCitUaGlzIGlzIHRoZSBvZmZzZXQgd2hlcmUgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIFNvZnREZXZpY2UgaGV4IGZpbGUgaXMgd3JpdHRlbi4qLworI2RlZmluZSBNQlJfU0laRSAgICAgICAgICAgICAgICAoMHgxMDAwKQorCisvKiogQH0gKi8KKworLyoqIEBhZGR0b2dyb3VwIE5SRl9NQlJfRU5VTVMgRW51bWVyYXRpb25zCisgKiBAeyAqLworCisvKipAYnJpZWYgblJGIE1hc3RlciBCb290IFJlY29yZCBBUEkgU1ZDIG51bWJlcnMuICovCitlbnVtIE5SRl9NQlJfU1ZDUworeworICBTRF9NQlJfQ09NTUFORCA9IE1CUl9TVkNfQkFTRSwgLyoqPCA6OnNkX21icl9jb21tYW5kICovCit9OworCisvKipAYnJpZWYgUG9zc2libGUgdmFsdWVzIGZvciA6OnNkX21icl9jb21tYW5kX3QuY29tbWFuZCAqLworZW51bSBOUkZfTUJSX0NPTU1BTkRTCit7CisgIFNEX01CUl9DT01NQU5EX0NPUFlfQkwsICAgICAgICAgICAgICAgLyoqPCBDb3B5IGEgbmV3IEJvb3RMb2FkZXIuIEBzZWUgc2RfbWJyX2NvbW1hbmRfY29weV9ibF90Ki8KKyAgU0RfTUJSX0NPTU1BTkRfQ09QWV9TRCwgICAgICAgICAgICAgICAvKio8IENvcHkgYSBuZXcgU29mdERldmljZS4gQHNlZSA6OnNkX21icl9jb21tYW5kX2NvcHlfc2RfdCovCisgIFNEX01CUl9DT01NQU5EX0lOSVRfU0QsICAgICAgICAgICAgICAgLyoqPCBJbml0aWFsaXplIGZvcndhcmRpbmcgaW50ZXJydXB0cyB0byBTRCwgYW5kIHJ1biByZXNldCBmdW5jdGlvbiBpbiBTRCovCisgIFNEX01CUl9DT01NQU5EX0NPTVBBUkUsICAgICAgICAgICAgICAgLyoqPCBUaGlzIGNvbW1hbmQgd29ya3MgbGlrZSBtZW1jbXAuIEBzZWUgOjpzZF9tYnJfY29tbWFuZF9jb21wYXJlX3QqLworICBTRF9NQlJfQ09NTUFORF9WRUNUT1JfVEFCTEVfQkFTRV9TRVQsIC8qKjwgU3RhcnQgZm9yd2FyZGluZyBhbGwgZXhjZXB0aW9uIHRvIHRoaXMgYWRkcmVzcyBAc2VlIDo6c2RfbWJyX2NvbW1hbmRfdmVjdG9yX3RhYmxlX2Jhc2Vfc2V0X3QqLworfTsKKworLyoqIEB9ICovCisKKy8qKiBAYWRkdG9ncm91cCBOUkZfTUJSX1RZUEVTIFR5cGVzCisgKiBAeyAqLworCisvKipAYnJpZWYgVGhpcyBjb21tYW5kIGNvcGllcyBwYXJ0IG9mIGEgbmV3IFNvZnREZXZpY2UKKyAqIFRoZSBkZXN0aW5hdGlvbiBhcmVhIGlzIGVyYXNlZCBiZWZvcmUgY29weWluZy4KKyAqIElmIGRzdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgZmxhc2ggcGFnZSwgdGhhdCB3aG9sZSBmbGFzaCBwYWdlIHdpbGwgYmUgZXJhc2VkLgorICogSWYgKGRzdCtsZW4pIGlzIGluIHRoZSBtaWRkbGUgb2YgYSBmbGFzaCBwYWdlLCB0aGF0IHdob2xlIGZsYXNoIHBhZ2Ugd2lsbCBiZSBlcmFzZWQuCisgKgorICogVGhlIHVzZXIgb2YgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgQlBST1QgcmVnaXN0ZXJzLgorICoKKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBpbmRpY2F0ZXMgdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIG1lbW9yeSBibG9ja3Mgd2hlcmUgY29waWVkIGNvcnJlY3RseS4KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5URVJOQUwgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBtZW1vcnkgYmxvY2tzIHdoZXJlIG5vdCB2ZXJpZmllZCBjb3JyZWN0bHkgYWZ0ZXIgY29weWluZy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdWludDMyX3QgKnNyYzsgIC8qKjwgUG9pbnRlciB0byB0aGUgc291cmNlIG9mIGRhdGEgdG8gYmUgY29waWVkLiovCisgIHVpbnQzMl90ICpkc3Q7ICAvKio8IFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHdoZXJlIHRoZSBjb250ZW50IGlzIHRvIGJlIGNvcGllZC4qLworICB1aW50MzJfdCBsZW47ICAgLyoqPCBOdW1iZXIgb2YgMzIgYml0IHdvcmRzIHRvIGNvcHkuIE11c3QgYmUgYSBtdWx0aXBsZSBvZiBAcmVmIE1CUl9QQUdFX1NJWkVfSU5fV09SRFMgd29yZHMuKi8KK30gc2RfbWJyX2NvbW1hbmRfY29weV9zZF90OworCisKKy8qKkBicmllZiBUaGlzIGNvbW1hbmQgd29ya3MgbGlrZSBtZW1jbXAsIGJ1dCB0YWtlcyB0aGUgbGVuZ3RoIGluIHdvcmRzLgorICoKKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBpbmRpY2F0ZXMgdGhhdCB0aGUgY29udGVudHMgb2YgYm90aCBtZW1vcnkgYmxvY2tzIGFyZSBlcXVhbC4KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTlVMTCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIG1lbW9yeSBibG9ja3MgYXJlIG5vdCBlcXVhbC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdWludDMyX3QgKnB0cjE7IC8qKjwgUG9pbnRlciB0byBibG9jayBvZiBtZW1vcnkuICovCisgIHVpbnQzMl90ICpwdHIyOyAvKio8IFBvaW50ZXIgdG8gYmxvY2sgb2YgbWVtb3J5LiAqLworICB1aW50MzJfdCBsZW47ICAgLyoqPCBOdW1iZXIgb2YgMzIgYml0IHdvcmRzIHRvIGNvbXBhcmUuKi8KK30gc2RfbWJyX2NvbW1hbmRfY29tcGFyZV90OworCisKKy8qKkBicmllZiBUaGlzIGNvbW1hbmQgY29waWVzIGEgbmV3IEJvb3RMb2FkZXIuCisgKiAgV2l0aCB0aGlzIGNvbW1hbmQsIGRlc3RpbmF0aW9uIG9mIEJvb3RMb2FkZXIgaXMgYWx3YXlzIHRoZSBhZGRyZXNzIHdyaXR0ZW4gaW4gTlJGX1VJQ1ItPkJPT1RBRERSLgorICoKKyAqICBEZXN0aW5hdGlvbiBpcyBlcmFzZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAqICBJZiAoZGVzdGluYXRpb24rYmxfbGVuKSBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgZmxhc2ggcGFnZSwgdGhhdCB3aG9sZSBmbGFzaCBwYWdlIHdpbGwgYmUgZXJhc2VkLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgdXNlIFBST1RFTlNFVCB0byBwcm90ZWN0IHRoZSBmbGFzaCB0aGF0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSB3cml0dGVuLgorICoKKyAqICBPbiBzdWNjZXNzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybi4gSXQgd2lsbCBzdGFydCB0aGUgbmV3IEJvb3RMb2FkZXIgZnJvbSByZXNldC12ZWN0b3IgYXMgbm9ybWFsLgorICoKKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5URVJOQUwgaW5kaWNhdGVzIGFuIGludGVybmFsIGVycm9yIHRoYXQgc2hvdWxkIG5vdCBoYXBwZW4uCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0ZPUkJJRERFTiBpZiBOUkZfVUlDUi0+Qk9PVEFERFIgaXMgbm90IHNldC4KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9MRU5HVEggaWYgcGFyYW1ldGVycyBhdHRlbXB0cyB0byByZWFkIG9yIHdyaXRlIG91dHNpZGUgZmxhc2ggYXJlYS4KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9fTUVNIGlmIG5vIHBhcmFtZXRlciBwYWdlIGlzIHByb3ZpZGVkIChzZWUgU29mdERldmljZSBTcGVjaWZpY2F0aW9uIGZvciBtb3JlIGluZm8pCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHVpbnQzMl90ICpibF9zcmM7ICAvKio8IFBvaW50ZXIgdG8gdGhlIHNvdXJjZSBvZiB0aGUgQm9vdGxvYWRlciB0byBiZSBiZSBjb3BpZWQuKi8KKyAgdWludDMyX3QgYmxfbGVuOyAgIC8qKjwgTnVtYmVyIG9mIDMyIGJpdCB3b3JkcyB0byBjb3B5IGZvciBCb290TG9hZGVyLiAqLworfSBzZF9tYnJfY29tbWFuZF9jb3B5X2JsX3Q7CisKKy8qKkBicmllZiBTZXRzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGludGVycnVwdCB2ZWN0b3IgdGFibGUgZm9yIGludGVycnVwdHMgZm9yd2FyZGVkIGZyb20gdGhlIE1CUgorICoKKyAqIE9uY2UgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQsIHRoaXMgYWRkcmVzcyBpcyB3aGVyZSB0aGUgTUJSIHdpbGwgc3RhcnQgdG8gZm9yd2FyZCBpbnRlcnJ1cHRzIHRvIGFmdGVyIGEgcmVzZXQuCisgKgorICogVG8gcmVzdG9yZSBkZWZhdWx0IGZvcndhcmRpbmcgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggQHBhcmFtIGFkZHJlc3Mgc2V0IHRvIDAuCisgKiBUaGUgTUJSIHdpbGwgdGhlbiBzdGFydCBmb3J3YXJkaW5nIHRvIGludGVycnVwdHMgdG8gdGhlIGFkZHJlc3MgaW4gTkZSX1VJQ1ItPkJPT1RBRERSIG9yIHRvIHRoZSBTb2Z0RGV2aWNlIGlmIHRoZSBCT09UQUREUiBpcyBub3Qgc2V0LgorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgcmV0dXJuLiBJdCB3aWxsIHJlc2V0IHRoZSBkZXZpY2UuCisgKgorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlRFUk5BTCBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgZXJyb3IgdGhhdCBzaG91bGQgbm90IGhhcHBlbi4KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIGlmIHBhcmFtZXRlciBhZGRyZXNzIGlzIG91dHNpZGUgb2YgdGhlIGZsYXNoIHNpemUuCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PX01FTSBpZiBubyBwYXJhbWV0ZXIgcGFnZSBpcyBwcm92aWRlZCAoc2VlIFNvZnREZXZpY2UgU3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBpbmZvKQorICovCit0eXBlZGVmIHN0cnVjdAoreworICB1aW50MzJfdCBhZGRyZXNzOyAvKio8IFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGludGVycnVwdCB2ZWN0b3IgdGFibGUgZm9yIGZvcndhcmRlZCBpbnRlcnJ1cHRzLiovCit9IHNkX21icl9jb21tYW5kX3ZlY3Rvcl90YWJsZV9iYXNlX3NldF90OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHVpbnQzMl90IGNvbW1hbmQ7ICAvKio8IHR5cGUgb2YgY29tbWFuZCB0byBiZSBpc3N1ZWQgc2VlIEByZWYgTlJGX01CUl9DT01NQU5EUy4gKi8KKyAgdW5pb24KKyAgeworICAgIHNkX21icl9jb21tYW5kX2NvcHlfc2RfdCBjb3B5X3NkOyAgLyoqPCBQYXJhbWV0ZXJzIGZvciBjb3B5IFNvZnREZXZpY2UuKi8KKyAgICBzZF9tYnJfY29tbWFuZF9jb21wYXJlX3QgY29tcGFyZTsgIC8qKjwgUGFyYW1ldGVycyBmb3IgdmVyaWZ5LiovCisgICAgc2RfbWJyX2NvbW1hbmRfY29weV9ibF90IGNvcHlfYmw7ICAvKio8IFBhcmFtZXRlcnMgZm9yIGNvcHkgQm9vdExvYWRlci4gUmVxdWlyZXMgcGFyYW1ldGVyIHBhZ2UuICovCisgICAgc2RfbWJyX2NvbW1hbmRfdmVjdG9yX3RhYmxlX2Jhc2Vfc2V0X3QgYmFzZV9zZXQ7IC8qKjwgUGFyYW1ldGVycyBmb3IgdmVjdG9yIHRhYmxlIGJhc2Ugc2V0LiBSZXF1aXJlcyBwYXJhbWV0ZXIgcGFnZS4qLworICB9IHBhcmFtczsKK30gc2RfbWJyX2NvbW1hbmRfdDsKKworLyoqIEB9ICovCisKKy8qKiBAYWRkdG9ncm91cCBOUkZfTUJSX0ZVTkNUSU9OUyBGdW5jdGlvbnMKKyAqIEB7ICovCisKKy8qKkBicmllZiBJc3N1ZSBNYXN0ZXIgQm9vdCBSZWNvcmQgY29tbWFuZHMKKyAqCisgKiBDb21tYW5kcyB1c2VkIHdoZW4gdXBkYXRpbmcgYSBTb2Z0RGV2aWNlIGFuZCBib290bG9hZGVyLgorICoKKyAqIFRoZSBTRF9NQlJfQ09NTUFORF9DT1BZX0JMIGFuZCBTRF9NQlJfQ09NTUFORF9WRUNUT1JfVEFCTEVfQkFTRV9TRVQgcmVxdWlyZXMgcGFyYW1ldGVycyB0byBiZQorICogcmV0YWluZWQgYnkgdGhlIE1CUiB3aGVuIHJlc2V0dGluZyB0aGUgSUMuIFRoaXMgaXMgZG9uZSBpbiBhIHNlcGFyYXRlIGZsYXNoIHBhZ2UKKyAqIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gVGhlIFVJQ1IgcmVnaXN0ZXIgVUlDUi5OUkZGV1sxXSBtdXN0IGJlIHNldAorICogdG8gYW4gYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIGEgcGFnZSBpbiB0aGUgYXBwbGljYXRpb24gZmxhc2ggc3BhY2UuIFRoaXMgcGFnZSB3aWxsIGJlIGNsZWFyZWQKKyAqIGJ5IHRoZSBNQlIgYW5kIHVzZWQgdG8gc3RvcmUgdGhlIGNvbW1hbmQgYmVmb3JlIHJlc2V0LiBXaGVuIHRoZSBVSUNSLk5SRkZXWzFdIGZpZWxkIGlzIHNldAorICogdGhlIHBhZ2UgaXQgcmVmZXJzIHRvIG11c3Qgbm90IGJlIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiBJZiB0aGUgVUlDUi5OUkZGV1sxXSBpcyBzZXQgdG8KKyAqIDB4RkZGRkZGRkYgKHRoZSBkZWZhdWx0KSBNQlIgY29tbWFuZHMgd2hpY2ggdXNlIGZsYXNoIHdpbGwgYmUgdW5hdmFpbGFibGUgYW5kIHJldHVybgorICogTlJGX0VSUk9SX05PX01FTS4KKyAqCisgKiBAcGFyYW1baW5dICBwYXJhbSBQb2ludGVyIHRvIGEgc3RydWN0IGRlc2NyaWJpbmcgdGhlIGNvbW1hbmQuCisgKgorICogQG5vdGUgRm9yIHJldHVybiB2YWx1ZXMsIHNlZSA6OnNkX21icl9jb21tYW5kX2NvcHlfc2RfdCA6OnNkX21icl9jb21tYW5kX2NvcHlfYmxfdCA6OnNkX21icl9jb21tYW5kX2NvbXBhcmVfdCA6OnNkX21icl9jb21tYW5kX3ZlY3Rvcl90YWJsZV9iYXNlX3NldF90CisgKgorICogQHJldHZhbCBOUkZfRVJST1JfTk9fTUVNIGlmIFVJQ1IuTlJGRldbMV0gaXMgbm90IHNldCAoaS5lLiBpcyAweEZGRkZGRkZGKS4KKyAqIEByZXR2YWwgTlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gaWYgYW4gaW52YWxpZCBjb21tYW5kIGlzIGdpdmVuLgorKi8KK1NWQ0FMTChTRF9NQlJfQ09NTUFORCwgdWludDMyX3QsIHNkX21icl9jb21tYW5kKHNkX21icl9jb21tYW5kX3QqIHBhcmFtKSk7CisKKy8qKiBAfSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIE5SRl9NQlJfSF9fCisKKy8qKgorICBAfQorKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX2Vycm9yLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9lcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Y2U1OWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9lcnJvci5oCkBAIC0wLDAgKzEsODcgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyDQorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMNCisgKiAgIFNlbWljb25kdWN0b3IgQVNBLCBvciBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgYSB0aGlyZCBwYXJ0eSB0aGF0DQorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorIC8qKg0KKyAgQGRlZmdyb3VwIG5yZl9lcnJvciBTb2Z0RGV2aWNlIEdsb2JhbCBFcnJvciBDb2Rlcw0KKyAgQHsNCisNCisgIEBicmllZiBHbG9iYWwgRXJyb3IgZGVmaW5pdGlvbnMNCisqLw0KKw0KKy8qIEhlYWRlciBndWFyZCAqLw0KKyNpZm5kZWYgTlJGX0VSUk9SX0hfXw0KKyNkZWZpbmUgTlJGX0VSUk9SX0hfXw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKiBAZGVmZ3JvdXAgTlJGX0VSUk9SU19CQVNFIEVycm9yIENvZGVzIEJhc2UgbnVtYmVyIGRlZmluaXRpb25zDQorICogQHsgKi8NCisjZGVmaW5lIE5SRl9FUlJPUl9CQVNFX05VTSAgICAgICgweDApICAgICAgIC8vLzwgR2xvYmFsIGVycm9yIGJhc2UNCisjZGVmaW5lIE5SRl9FUlJPUl9TRE1fQkFTRV9OVU0gICgweDEwMDApICAgIC8vLzwgU0RNIGVycm9yIGJhc2UNCisjZGVmaW5lIE5SRl9FUlJPUl9TT0NfQkFTRV9OVU0gICgweDIwMDApICAgIC8vLzwgU29DIGVycm9yIGJhc2UNCisjZGVmaW5lIE5SRl9FUlJPUl9TVEtfQkFTRV9OVU0gICgweDMwMDApICAgIC8vLzwgU1RLIGVycm9yIGJhc2UNCisvKiogQH0gKi8NCisNCisjZGVmaW5lIE5SRl9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDApICAvLy88IFN1Y2Nlc3NmdWwgY29tbWFuZA0KKyNkZWZpbmUgTlJGX0VSUk9SX1NWQ19IQU5ETEVSX01JU1NJTkcgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgMSkgIC8vLzwgU1ZDIGhhbmRsZXIgaXMgbWlzc2luZw0KKyNkZWZpbmUgTlJGX0VSUk9SX1NPRlRERVZJQ0VfTk9UX0VOQUJMRUQgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgMikgIC8vLzwgU29mdERldmljZSBoYXMgbm90IGJlZW4gZW5hYmxlZA0KKyNkZWZpbmUgTlJGX0VSUk9SX0lOVEVSTkFMICAgICAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgMykgIC8vLzwgSW50ZXJuYWwgRXJyb3INCisjZGVmaW5lIE5SRl9FUlJPUl9OT19NRU0gICAgICAgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDQpICAvLy88IE5vIE1lbW9yeSBmb3Igb3BlcmF0aW9uDQorI2RlZmluZSBOUkZfRVJST1JfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyA1KSAgLy8vPCBOb3QgZm91bmQNCisjZGVmaW5lIE5SRl9FUlJPUl9OT1RfU1VQUE9SVEVEICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDYpICAvLy88IE5vdCBzdXBwb3J0ZWQNCisjZGVmaW5lIE5SRl9FUlJPUl9JTlZBTElEX1BBUkFNICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDcpICAvLy88IEludmFsaWQgUGFyYW1ldGVyDQorI2RlZmluZSBOUkZfRVJST1JfSU5WQUxJRF9TVEFURSAgICAgICAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyA4KSAgLy8vPCBJbnZhbGlkIHN0YXRlLCBvcGVyYXRpb24gZGlzYWxsb3dlZCBpbiB0aGlzIHN0YXRlDQorI2RlZmluZSBOUkZfRVJST1JfSU5WQUxJRF9MRU5HVEggICAgICAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyA5KSAgLy8vPCBJbnZhbGlkIExlbmd0aA0KKyNkZWZpbmUgTlJGX0VSUk9SX0lOVkFMSURfRkxBR1MgICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgMTApIC8vLzwgSW52YWxpZCBGbGFncw0KKyNkZWZpbmUgTlJGX0VSUk9SX0lOVkFMSURfREFUQSAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgMTEpIC8vLzwgSW52YWxpZCBEYXRhDQorI2RlZmluZSBOUkZfRVJST1JfREFUQV9TSVpFICAgICAgICAgICAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyAxMikgLy8vPCBJbnZhbGlkIERhdGEgc2l6ZQ0KKyNkZWZpbmUgTlJGX0VSUk9SX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgMTMpIC8vLzwgT3BlcmF0aW9uIHRpbWVkIG91dA0KKyNkZWZpbmUgTlJGX0VSUk9SX05VTEwgICAgICAgICAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgMTQpIC8vLzwgTnVsbCBQb2ludGVyDQorI2RlZmluZSBOUkZfRVJST1JfRk9SQklEREVOICAgICAgICAgICAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyAxNSkgLy8vPCBGb3JiaWRkZW4gT3BlcmF0aW9uDQorI2RlZmluZSBOUkZfRVJST1JfSU5WQUxJRF9BRERSICAgICAgICAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyAxNikgLy8vPCBCYWQgTWVtb3J5IEFkZHJlc3MNCisjZGVmaW5lIE5SRl9FUlJPUl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDE3KSAvLy88IEJ1c3kNCisjZGVmaW5lIE5SRl9FUlJPUl9DT05OX0NPVU5UICAgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDE4KSAvLy88IE1heGltdW0gY29ubmVjdGlvbiBjb3VudCBleGNlZWRlZC4NCisjZGVmaW5lIE5SRl9FUlJPUl9SRVNPVVJDRVMgICAgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDE5KSAvLy88IE5vdCBlbm91Z2ggcmVzb3VyY2VzIGZvciBvcGVyYXRpb24NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8vIE5SRl9FUlJPUl9IX18NCisNCisvKioNCisgIEB9DQorKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9lcnJvcl9zZG0uaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX2Vycm9yX3NkbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZWE4NTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9lcnJvcl9zZG0uaApAQCAtMCwwICsxLDY3IEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKyAvKioNCisgIEBhZGR0b2dyb3VwIG5yZl9zZG1fYXBpDQorICBAew0KKyAgQGRlZmdyb3VwIG5yZl9zZG1fZXJyb3IgU29mdERldmljZSBNYW5hZ2VyIEVycm9yIENvZGVzDQorICBAew0KKw0KKyAgQGJyaWVmIEVycm9yIGRlZmluaXRpb25zIGZvciB0aGUgU0RNIEFQSQ0KKyovDQorDQorLyogSGVhZGVyIGd1YXJkICovDQorI2lmbmRlZiBOUkZfRVJST1JfU0RNX0hfXw0KKyNkZWZpbmUgTlJGX0VSUk9SX1NETV9IX18NCisNCisjaW5jbHVkZSAibnJmX2Vycm9yLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2RlZmluZSBOUkZfRVJST1JfU0RNX0xGQ0xLX1NPVVJDRV9VTktOT1dOICAgICAgICAgICAgICAoTlJGX0VSUk9SX1NETV9CQVNFX05VTSArIDApICAvLy88IFVua25vd24gTEZDTEsgc291cmNlLg0KKyNkZWZpbmUgTlJGX0VSUk9SX1NETV9JTkNPUlJFQ1RfSU5URVJSVVBUX0NPTkZJR1VSQVRJT04gKE5SRl9FUlJPUl9TRE1fQkFTRV9OVU0gKyAxKSAgLy8vPCBJbmNvcnJlY3QgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gKGNhbiBiZSBjYXVzZWQgYnkgdXNpbmcgaWxsZWdhbCBwcmlvcml0eSBsZXZlbHMsIG9yIGhhdmluZyBlbmFibGVkIFNvZnREZXZpY2UgaW50ZXJydXB0cykuDQorI2RlZmluZSBOUkZfRVJST1JfU0RNX0lOQ09SUkVDVF9DTEVOUjAgICAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX1NETV9CQVNFX05VTSArIDIpICAvLy88IEluY29ycmVjdCBDTEVOUjAgKGNhbiBiZSBjYXVzZWQgYnkgZXJyb25lb3VzIFNvZnREZXZpY2UgZmxhc2hpbmcpLg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLy8gTlJGX0VSUk9SX1NETV9IX18NCisNCisvKioNCisgIEB9DQorICBAfQ0KKyovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfZXJyb3Jfc29jLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9lcnJvcl9zb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc2ZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfZXJyb3Jfc29jLmgKQEAgLTAsMCArMSw4MiBAQAorLyoNCisgKiBDb3B5cmlnaHQgKGMpIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2Ygb3RoZXINCisgKiAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KKyAqICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiAgIDQuIFRoaXMgc29mdHdhcmUgbXVzdCBvbmx5IGJlIHVzZWQgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYw0KKyAqICAgU2VtaWNvbmR1Y3RvciBBU0EsIG9yIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBhIHRoaXJkIHBhcnR5IHRoYXQNCisgKiAgIGlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljIFNlbWljb25kdWN0b3IuDQorICoNCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisvKioNCisgIEBhZGR0b2dyb3VwIG5yZl9zb2NfYXBpDQorICBAew0KKyAgQGRlZmdyb3VwIG5yZl9zb2NfZXJyb3IgU29DIExpYnJhcnkgRXJyb3IgQ29kZXMNCisgIEB7DQorDQorICBAYnJpZWYgRXJyb3IgZGVmaW5pdGlvbnMgZm9yIHRoZSBTb0MgbGlicmFyeQ0KKw0KKyovDQorDQorLyogSGVhZGVyIGd1YXJkICovDQorI2lmbmRlZiBOUkZfRVJST1JfU09DX0hfXw0KKyNkZWZpbmUgTlJGX0VSUk9SX1NPQ19IX18NCisNCisjaW5jbHVkZSAibnJmX2Vycm9yLmgiDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogTXV0ZXggRXJyb3JzICovDQorI2RlZmluZSBOUkZfRVJST1JfU09DX01VVEVYX0FMUkVBRFlfVEFLRU4gICAgICAgICAgICAgICAgIChOUkZfRVJST1JfU09DX0JBU0VfTlVNICsgMCkgIC8vLzwgTXV0ZXggYWxyZWFkeSB0YWtlbg0KKw0KKy8qIE5WSUMgZXJyb3JzICovDQorI2RlZmluZSBOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX05PVF9BVkFJTEFCTEUgICAgICAgIChOUkZfRVJST1JfU09DX0JBU0VfTlVNICsgMSkgIC8vLzwgTlZJQyBpbnRlcnJ1cHQgbm90IGF2YWlsYWJsZQ0KKyNkZWZpbmUgTlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9QUklPUklUWV9OT1RfQUxMT1dFRCAoTlJGX0VSUk9SX1NPQ19CQVNFX05VTSArIDIpICAvLy88IE5WSUMgaW50ZXJydXB0IHByaW9yaXR5IG5vdCBhbGxvd2VkDQorI2RlZmluZSBOUkZfRVJST1JfU09DX05WSUNfU0hPVUxEX05PVF9SRVRVUk4gICAgICAgICAgICAgIChOUkZfRVJST1JfU09DX0JBU0VfTlVNICsgMykgIC8vLzwgTlZJQyBzaG91bGQgbm90IHJldHVybg0KKw0KKy8qIFBvd2VyIGVycm9ycyAqLw0KKyNkZWZpbmUgTlJGX0VSUk9SX1NPQ19QT1dFUl9NT0RFX1VOS05PV04gICAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX1NPQ19CQVNFX05VTSArIDQpICAvLy88IFBvd2VyIG1vZGUgdW5rbm93bg0KKyNkZWZpbmUgTlJGX0VSUk9SX1NPQ19QT1dFUl9QT0ZfVEhSRVNIT0xEX1VOS05PV04gICAgICAgICAoTlJGX0VSUk9SX1NPQ19CQVNFX05VTSArIDUpICAvLy88IFBvd2VyIFBPRiB0aHJlc2hvbGQgdW5rbm93bg0KKyNkZWZpbmUgTlJGX0VSUk9SX1NPQ19QT1dFUl9PRkZfU0hPVUxEX05PVF9SRVRVUk4gICAgICAgICAoTlJGX0VSUk9SX1NPQ19CQVNFX05VTSArIDYpICAvLy88IFBvd2VyIG9mZiBzaG91bGQgbm90IHJldHVybg0KKw0KKy8qIFJhbmQgZXJyb3JzICovDQorI2RlZmluZSBOUkZfRVJST1JfU09DX1JBTkRfTk9UX0VOT1VHSF9WQUxVRVMgICAgICAgICAgICAgIChOUkZfRVJST1JfU09DX0JBU0VfTlVNICsgNykgIC8vLzwgUkFORCBub3QgZW5vdWdoIHZhbHVlcw0KKw0KKy8qIFBQSSBlcnJvcnMgKi8NCisjZGVmaW5lIE5SRl9FUlJPUl9TT0NfUFBJX0lOVkFMSURfQ0hBTk5FTCAgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9TT0NfQkFTRV9OVU0gKyA4KSAgLy8vPCBJbnZhbGlkIFBQSSBDaGFubmVsDQorI2RlZmluZSBOUkZfRVJST1JfU09DX1BQSV9JTlZBTElEX0dST1VQICAgICAgICAgICAgICAgICAgIChOUkZfRVJST1JfU09DX0JBU0VfTlVNICsgOSkgIC8vLzwgSW52YWxpZCBQUEkgR3JvdXANCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8vIE5SRl9FUlJPUl9TT0NfSF9fDQorLyoqDQorICBAfQ0KKyAgQH0NCisqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX252aWMuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX252aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzkzYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfbnZpYy5oCkBAIC0wLDAgKzEsNTE3IEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKy8qKg0KKyAqIEBkZWZncm91cCBucmZfbnZpY19hcGkgU29mdERldmljZSBOVklDIEFQSQ0KKyAqIEB7DQorICoNCisgKiBAbm90ZSBJbiBvcmRlciB0byB1c2UgdGhpcyBtb2R1bGUsIHRoZSBmb2xsb3dpbmcgY29kZSBoYXMgdG8gYmUgYWRkZWQgdG8gYSAuYyBmaWxlOg0KKyAqICAgICBcY29kZQ0KKyAqICAgICBucmZfbnZpY19zdGF0ZV90IG5yZl9udmljX3N0YXRlID0gezB9Ow0KKyAqICAgICBcZW5kY29kZQ0KKyAqDQorICogQG5vdGUgRGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucyBzdGFydGluZyB3aXRoIF9fIChkb3VibGUgdW5kZXJzY29yZSkgaW4gdGhpcyBoZWFkZXIgZmlsZSBhcmUNCisgKiBub3QgaW50ZW5kZWQgZm9yIGRpcmVjdCB1c2UgYnkgdGhlIGFwcGxpY2F0aW9uLg0KKyAqDQorICogQGJyaWVmIEFQSXMgZm9yIHRoZSBhY2Nlc3NpbmcgTlZJQyB3aGVuIHVzaW5nIGEgU29mdERldmljZS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX05WSUNfSF9fDQorI2RlZmluZSBOUkZfTlZJQ19IX18NCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgIm5yZi5oIg0KKw0KKyNpbmNsdWRlICJucmZfZXJyb3Jfc29jLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqQGFkZHRvZ3JvdXAgTlJGX05WSUNfREVGSU5FUyBEZWZpbmVzDQorICogQHsgKi8NCisNCisvKipAZGVmZ3JvdXAgTlJGX05WSUNfSVNFUl9ERUZJTkVTIFNvZnREZXZpY2UgTlZJQyBpbnRlcm5hbCBkZWZpbml0aW9ucw0KKyAqIEB7ICovDQorDQorI2RlZmluZSBfX05SRl9OVklDX05WTUNfSVJRbiAoMzApIC8qKjwgVGhlIHBlcmlwaGVyYWwgSUQgb2YgdGhlIE5WTUMuIElSUSBudW1iZXJzIGFyZSB1c2VkIHRvIGlkZW50aWZ5IHBlcmlwaGVyYWxzLCBidXQgdGhlIE5WTUMgZG9lc24ndCBoYXZlIGFuIElSUSBudW1iZXIgaW4gdGhlIE1ESy4gKi8NCisNCisjaWZkZWYgTlJGNTENCisgICNkZWZpbmUgX19OUkZfTlZJQ19JU0VSX0NPVU5UICgxKSAvKio8IFRoZSBudW1iZXIgb2YgSVNFUi9JQ0VSIHJlZ2lzdGVycyBpbiB0aGUgTlZJQyB0aGF0IGFyZSB1c2VkLiAqLw0KKw0KKyAgLyoqQGJyaWVmIEludGVycnVwdHMgdXNlZCBieSB0aGUgU29mdERldmljZS4gKi8NCisgICNkZWZpbmUgX19OUkZfTlZJQ19TRF9JUlFTXzAgKCh1aW50MzJfdCkoIFwNCisgICAgICAgICgxVSA8PCBQT1dFUl9DTE9DS19JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgUkFESU9fSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IFJUQzBfSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IFRJTUVSMF9JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgUk5HX0lSUW4pIFwNCisgICAgICB8ICgxVSA8PCBFQ0JfSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IENDTV9BQVJfSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IFRFTVBfSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IF9fTlJGX05WSUNfTlZNQ19JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgKHVpbnQzMl90KVNXSTVfSVJRbikgXA0KKyAgICApKQ0KKw0KKyAgLyoqQGJyaWVmIEludGVycnVwdHMgYXZhaWxhYmxlIGZvciB0byBhcHBsaWNhdGlvbi4gKi8NCisgICNkZWZpbmUgX19OUkZfTlZJQ19BUFBfSVJRU18wICh+X19OUkZfTlZJQ19TRF9JUlFTXzApDQorI2VuZGlmDQorDQorI2lmIGRlZmluZWQoTlJGNTIpIHx8IGRlZmluZWQoTlJGNTI4NDBfWFhBQSkNCisgICNkZWZpbmUgX19OUkZfTlZJQ19JU0VSX0NPVU5UICgyKSAvKio8IFRoZSBudW1iZXIgb2YgSVNFUi9JQ0VSIHJlZ2lzdGVycyBpbiB0aGUgTlZJQyB0aGF0IGFyZSB1c2VkLiAqLw0KKw0KKyAgLyoqQGJyaWVmIEludGVycnVwdHMgdXNlZCBieSB0aGUgU29mdERldmljZS4gKi8NCisgICNkZWZpbmUgX19OUkZfTlZJQ19TRF9JUlFTXzAgKCh1aW50MzJfdCkoIFwNCisgICAgICAgICgxVSA8PCBQT1dFUl9DTE9DS19JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgUkFESU9fSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IFJUQzBfSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IFRJTUVSMF9JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgUk5HX0lSUW4pIFwNCisgICAgICB8ICgxVSA8PCBFQ0JfSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IENDTV9BQVJfSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IFRFTVBfSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IF9fTlJGX05WSUNfTlZNQ19JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgKHVpbnQzMl90KVNXSTVfRUdVNV9JUlFuKSBcDQorICAgICkpDQorICAjZGVmaW5lIF9fTlJGX05WSUNfU0RfSVJRU18xICgodWludDMyX3QpMCkNCisNCisgIC8qKkBicmllZiBJbnRlcnJ1cHRzIGF2YWlsYWJsZSBmb3IgdG8gYXBwbGljYXRpb24uICovDQorICAjZGVmaW5lIF9fTlJGX05WSUNfQVBQX0lSUVNfMCAofl9fTlJGX05WSUNfU0RfSVJRU18wKQ0KKyAgI2RlZmluZSBfX05SRl9OVklDX0FQUF9JUlFTXzEgKH5fX05SRl9OVklDX1NEX0lSUVNfMSkNCisjZW5kaWYNCisvKipAfSAqLw0KKw0KKy8qKkB9ICovDQorDQorLyoqQGFkZHRvZ3JvdXAgTlJGX05WSUNfVkFSSUFCTEVTIFZhcmlhYmxlcw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIFR5cGUgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBzdHJ1Y3QgZm9yIHRoZSBTb2Z0RGV2aWNlIE5WSUMgbW9kdWxlLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDMyX3Qgdm9sYXRpbGUgX19pcnFfbWFza3NbX19OUkZfTlZJQ19JU0VSX0NPVU5UXTsgLyoqPCBJUlFzIGVuYWJsZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGluIHRoZSBOVklDLiAqLw0KKyAgdWludDMyX3Qgdm9sYXRpbGUgX19jcl9mbGFnOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBOb24temVybyBpZiBhbHJlYWR5IGluIGEgY3JpdGljYWwgcmVnaW9uICovDQorfSBucmZfbnZpY19zdGF0ZV90Ow0KKw0KKy8qKkBicmllZiBWYXJpYWJsZSBrZWVwaW5nIHRoZSBzdGF0ZSBmb3IgdGhlIFNvZnREZXZpY2UgTlZJQyBtb2R1bGUuIFRoaXMgbXVzdCBiZSBkZWNsYXJlZCBpbiBhbg0KKyAqIGFwcGxpY2F0aW9uIHNvdXJjZSBmaWxlLiAqLw0KK2V4dGVybiBucmZfbnZpY19zdGF0ZV90IG5yZl9udmljX3N0YXRlOw0KKw0KKy8qKkB9ICovDQorDQorLyoqQGFkZHRvZ3JvdXAgTlJGX05WSUNfSU5URVJOQUxfRlVOQ1RJT05TIFNvZnREZXZpY2UgTlZJQyBpbnRlcm5hbCBmdW5jdGlvbnMNCisgKiBAeyAqLw0KKw0KKy8qKkBicmllZiBEaXNhYmxlcyBJUlEgaW50ZXJydXB0cyBnbG9iYWxseSwgaW5jbHVkaW5nIHRoZSBTb2Z0RGV2aWNlJ3MgaW50ZXJydXB0cy4NCisgKg0KKyAqIEByZXR2YWwgIFRoZSB2YWx1ZSBvZiBQUklNQVNLIHByaW9yIHRvIGRpc2FibGluZyB0aGUgaW50ZXJydXB0cy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgaW50IF9fc2RfbnZpY19pcnFfZGlzYWJsZSh2b2lkKTsNCisNCisvKipAYnJpZWYgRW5hYmxlcyBJUlEgaW50ZXJydXB0cyBnbG9iYWxseSwgaW5jbHVkaW5nIHRoZSBTb2Z0RGV2aWNlJ3MgaW50ZXJydXB0cy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NkX252aWNfaXJxX2VuYWJsZSh2b2lkKTsNCisNCisvKipAYnJpZWYgQ2hlY2tzIGlmIElSUW4gaXMgYXZhaWxhYmxlIHRvIGFwcGxpY2F0aW9uDQorICogQHBhcmFtW2luXSAgSVJRbiAgSVJRIHRvIGNoZWNrDQorICoNCisgKiBAcmV0dmFsICAxICh0cnVlKSBpZiB0aGUgSVJRIHRvIGNoZWNrIGlzIGF2YWlsYWJsZSB0byB0aGUgYXBwbGljYXRpb24NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19zZF9udmljX2FwcF9hY2Nlc3NpYmxlX2lycShJUlFuX1R5cGUgSVJRbik7DQorDQorLyoqQGJyaWVmIENoZWNrcyBpZiBwcmlvcml0eSBpcyBhdmFpbGFibGUgdG8gYXBwbGljYXRpb24NCisgKiBAcGFyYW1baW5dICBwcmlvcml0eSAgcHJpb3JpdHkgdG8gY2hlY2sNCisgKg0KKyAqIEByZXR2YWwgIDEgKHRydWUpIGlmIHRoZSBwcmlvcml0eSB0byBjaGVjayBpcyBhdmFpbGFibGUgdG8gdGhlIGFwcGxpY2F0aW9uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fc2RfbnZpY19pc19hcHBfYWNjZXNzaWJsZV9wcmlvcml0eSh1aW50MzJfdCBwcmlvcml0eSk7DQorDQorLyoqQH0gKi8NCisNCisvKipAYWRkdG9ncm91cCBOUkZfTlZJQ19GVU5DVElPTlMgU29mdERldmljZSBOVklDIHB1YmxpYyBmdW5jdGlvbnMNCisgKiBAeyAqLw0KKw0KKy8qKkBicmllZiBFbmFibGUgRXh0ZXJuYWwgSW50ZXJydXB0Lg0KKyAqIEBub3RlIENvcnJlc3BvbmRzIHRvIE5WSUNfRW5hYmxlSVJRIGluIENNU0lTLg0KKyAqDQorICogQHByZSBJUlFuIGlzIHZhbGlkIGFuZCBub3QgcmVzZXJ2ZWQgYnkgdGhlIHN0YWNrLg0KKyAqDQorICogQHBhcmFtW2luXSBJUlFuIFNlZSB0aGUgTlZJQ19FbmFibGVJUlEgZG9jdW1lbnRhdGlvbiBpbiBDTVNJUy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgaW50ZXJydXB0IHdhcyBlbmFibGVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX05PVF9BVkFJTEFCTEUgVGhlIGludGVycnVwdCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfUFJJT1JJVFlfTk9UX0FMTE9XRUQgVGhlIGludGVycnVwdCBoYXMgYSBwcmlvcml0eSBub3QgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfRW5hYmxlSVJRKElSUW5fVHlwZSBJUlFuKTsNCisNCisvKipAYnJpZWYgIERpc2FibGUgRXh0ZXJuYWwgSW50ZXJydXB0Lg0KKyAqIEBub3RlIENvcnJlc3BvbmRzIHRvIE5WSUNfRGlzYWJsZUlSUSBpbiBDTVNJUy4NCisgKg0KKyAqIEBwcmUgSVJRbiBpcyB2YWxpZCBhbmQgbm90IHJlc2VydmVkIGJ5IHRoZSBzdGFjay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gSVJRbiBTZWUgdGhlIE5WSUNfRGlzYWJsZUlSUSBkb2N1bWVudGF0aW9uIGluIENNU0lTLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFRoZSBpbnRlcnJ1cHQgd2FzIGRpc2FibGVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX05PVF9BVkFJTEFCTEUgVGhlIGludGVycnVwdCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfRGlzYWJsZUlSUShJUlFuX1R5cGUgSVJRbik7DQorDQorLyoqQGJyaWVmICBHZXQgUGVuZGluZyBJbnRlcnJ1cHQuDQorICogQG5vdGUgQ29ycmVzcG9uZHMgdG8gTlZJQ19HZXRQZW5kaW5nSVJRIGluIENNU0lTLg0KKyAqDQorICogQHByZSBJUlFuIGlzIHZhbGlkIGFuZCBub3QgcmVzZXJ2ZWQgYnkgdGhlIHN0YWNrLg0KKyAqDQorICogQHBhcmFtW2luXSAgIElSUW4gICAgICAgICAgU2VlIHRoZSBOVklDX0dldFBlbmRpbmdJUlEgZG9jdW1lbnRhdGlvbiBpbiBDTVNJUy4NCisgKiBAcGFyYW1bb3V0XSAgcF9wZW5kaW5nX2lycSBSZXR1cm4gdmFsdWUgZnJvbSBOVklDX0dldFBlbmRpbmdJUlEuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIGludGVycnVwdCBpcyBhdmFpbGFibGUgZm9yIHRoZSBhcHBsaWNhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9OT1RfQVZBSUxBQkxFIElSUW4gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIGFwcGxpY2F0aW9uLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX0dldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90ICogcF9wZW5kaW5nX2lycSk7DQorDQorLyoqQGJyaWVmICBTZXQgUGVuZGluZyBJbnRlcnJ1cHQuDQorICogQG5vdGUgQ29ycmVzcG9uZHMgdG8gTlZJQ19TZXRQZW5kaW5nSVJRIGluIENNU0lTLg0KKyAqDQorICogQHByZSBJUlFuIGlzIHZhbGlkIGFuZCBub3QgcmVzZXJ2ZWQgYnkgdGhlIHN0YWNrLg0KKyAqDQorICogQHBhcmFtW2luXSBJUlFuIFNlZSB0aGUgTlZJQ19TZXRQZW5kaW5nSVJRIGRvY3VtZW50YXRpb24gaW4gQ01TSVMuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIGludGVycnVwdCBpcyBzZXQgcGVuZGluZy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9OT1RfQVZBSUxBQkxFIElSUW4gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIGFwcGxpY2F0aW9uLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX1NldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pOw0KKw0KKy8qKkBicmllZiAgQ2xlYXIgUGVuZGluZyBJbnRlcnJ1cHQuDQorICogQG5vdGUgQ29ycmVzcG9uZHMgdG8gTlZJQ19DbGVhclBlbmRpbmdJUlEgaW4gQ01TSVMuDQorICoNCisgKiBAcHJlIElSUW4gaXMgdmFsaWQgYW5kIG5vdCByZXNlcnZlZCBieSB0aGUgc3RhY2suDQorICoNCisgKiBAcGFyYW1baW5dIElSUW4gU2VlIHRoZSBOVklDX0NsZWFyUGVuZGluZ0lSUSBkb2N1bWVudGF0aW9uIGluIENNU0lTLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFRoZSBpbnRlcnJ1cHQgcGVuZGluZyBmbGFnIGlzIGNsZWFyZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfTk9UX0FWQUlMQUJMRSBJUlFuIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBhcHBsaWNhdGlvbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19DbGVhclBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pOw0KKw0KKy8qKkBicmllZiBTZXQgSW50ZXJydXB0IFByaW9yaXR5Lg0KKyAqIEBub3RlIENvcnJlc3BvbmRzIHRvIE5WSUNfU2V0UHJpb3JpdHkgaW4gQ01TSVMuDQorICoNCisgKiBAcHJlIElSUW4gaXMgdmFsaWQgYW5kIG5vdCByZXNlcnZlZCBieSB0aGUgc3RhY2suDQorICogQHByZSBQcmlvcml0eSBpcyB2YWxpZCBhbmQgbm90IHJlc2VydmVkIGJ5IHRoZSBzdGFjay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gSVJRbiAgICAgIFNlZSB0aGUgTlZJQ19TZXRQcmlvcml0eSBkb2N1bWVudGF0aW9uIGluIENNU0lTLg0KKyAqIEBwYXJhbVtpbl0gcHJpb3JpdHkgIEEgdmFsaWQgSVJRIHByaW9yaXR5IGZvciB1c2UgYnkgdGhlIGFwcGxpY2F0aW9uLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFRoZSBpbnRlcnJ1cHQgYW5kIHByaW9yaXR5IGxldmVsIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGFwcGxpY2F0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX05PVF9BVkFJTEFCTEUgSVJRbiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfUFJJT1JJVFlfTk9UX0FMTE9XRUQgVGhlIGludGVycnVwdCBwcmlvcml0eSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfU2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90IHByaW9yaXR5KTsNCisNCisvKipAYnJpZWYgR2V0IEludGVycnVwdCBQcmlvcml0eS4NCisgKiBAbm90ZSBDb3JyZXNwb25kcyB0byBOVklDX0dldFByaW9yaXR5IGluIENNU0lTLg0KKyAqDQorICogQHByZSBJUlFuIGlzIHZhbGlkIGFuZCBub3QgcmVzZXJ2ZWQgYnkgdGhlIHN0YWNrLg0KKyAqDQorICogQHBhcmFtW2luXSAgSVJRbiAgICAgICAgIFNlZSB0aGUgTlZJQ19HZXRQcmlvcml0eSBkb2N1bWVudGF0aW9uIGluIENNU0lTLg0KKyAqIEBwYXJhbVtvdXRdIHBfcHJpb3JpdHkgICBSZXR1cm4gdmFsdWUgZnJvbSBOVklDX0dldFByaW9yaXR5Lg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgaXMgcmV0dXJuZWQgaW4gcF9wcmlvcml0eS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9OT1RfQVZBSUxBQkxFIC0gSVJRbiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfR2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90ICogcF9wcmlvcml0eSk7DQorDQorLyoqQGJyaWVmIFN5c3RlbSBSZXNldC4NCisgKiBAbm90ZSBDb3JyZXNwb25kcyB0byBOVklDX1N5c3RlbVJlc2V0IGluIENNU0lTLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9TT0NfTlZJQ19TSE9VTERfTk9UX1JFVFVSTg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX1N5c3RlbVJlc2V0KHZvaWQpOw0KKw0KKy8qKkBicmllZiBFbnRlciBjcml0aWNhbCByZWdpb24uDQorICoNCisgKiBAcG9zdCBBcHBsaWNhdGlvbiBpbnRlcnJ1cHRzIHdpbGwgYmUgZGlzYWJsZWQuDQorICogQG5vdGUgc2RfbnZpY19jcml0aWNhbF9yZWdpb25fZW50ZXIoKSBhbmQgOjpzZF9udmljX2NyaXRpY2FsX3JlZ2lvbl9leGl0KCkgbXVzdCBiZSBjYWxsZWQgaW4gbWF0Y2hpbmcgcGFpcnMgaW5zaWRlIGVhY2gNCisgKiBleGVjdXRpb24gY29udGV4dA0KKyAqIEBzYSBzZF9udmljX2NyaXRpY2FsX3JlZ2lvbl9leGl0DQorICoNCisgKiBAcGFyYW1bb3V0XSBwX2lzX25lc3RlZF9jcml0aWNhbF9yZWdpb24gSWYgMSwgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdyBpbiBhIG5lc3RlZCBjcml0aWNhbCByZWdpb24uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19jcml0aWNhbF9yZWdpb25fZW50ZXIodWludDhfdCAqIHBfaXNfbmVzdGVkX2NyaXRpY2FsX3JlZ2lvbik7DQorDQorLyoqQGJyaWVmIEV4aXQgY3JpdGljYWwgcmVnaW9uLg0KKyAqDQorICogQHByZSBBcHBsaWNhdGlvbiBoYXMgZW50ZXJlZCBhIGNyaXRpY2FsIHJlZ2lvbiB1c2luZyA6OnNkX252aWNfY3JpdGljYWxfcmVnaW9uX2VudGVyLg0KKyAqIEBwb3N0IElmIG5vdCBpbiBhIG5lc3RlZCBjcml0aWNhbCByZWdpb24sIHRoZSBhcHBsaWNhdGlvbiBpbnRlcnJ1cHRzIHdpbGwgcmVzdG9yZWQgdG8gdGhlIHN0YXRlIGJlZm9yZSA6OnNkX252aWNfY3JpdGljYWxfcmVnaW9uX2VudGVyIHdhcyBjYWxsZWQuDQorICoNCisgKiBAcGFyYW1baW5dIGlzX25lc3RlZF9jcml0aWNhbF9yZWdpb24gSWYgdGhpcyBpcyBzZXQgdG8gMSwgdGhlIGNyaXRpY2FsIHJlZ2lvbiB3b24ndCBiZSBleGl0ZWQuIEBzYSBzZF9udmljX2NyaXRpY2FsX3JlZ2lvbl9lbnRlci4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX2NyaXRpY2FsX3JlZ2lvbl9leGl0KHVpbnQ4X3QgaXNfbmVzdGVkX2NyaXRpY2FsX3JlZ2lvbik7DQorDQorLyoqQH0gKi8NCisNCisjaWZuZGVmIFNVUFBSRVNTX0lOTElORV9JTVBMRU1FTlRBVElPTg0KKw0KK19fU1RBVElDX0lOTElORSBpbnQgX19zZF9udmljX2lycV9kaXNhYmxlKHZvaWQpDQorew0KKyAgaW50IHBtID0gX19nZXRfUFJJTUFTSygpOw0KKyAgX19kaXNhYmxlX2lycSgpOw0KKyAgcmV0dXJuIHBtOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NkX252aWNfaXJxX2VuYWJsZSh2b2lkKQ0KK3sNCisgIF9fZW5hYmxlX2lycSgpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19zZF9udmljX2FwcF9hY2Nlc3NpYmxlX2lycShJUlFuX1R5cGUgSVJRbikNCit7DQorICBpZiAoSVJRbiA8IDMyKQ0KKyAgew0KKyAgICByZXR1cm4gKCgxVUw8PElSUW4pICYgX19OUkZfTlZJQ19BUFBfSVJRU18wKSAhPSAwOw0KKyAgfQ0KKyNpZiBkZWZpbmVkKE5SRjUyKSB8fCBkZWZpbmVkKE5SRjUyODQwX1hYQUEpDQorICBlbHNlIGlmIChJUlFuIDwgNjQpDQorICB7DQorICAgIHJldHVybiAoKDFVTDw8KElSUW4tMzIpKSAmIF9fTlJGX05WSUNfQVBQX0lSUVNfMSkgIT0gMDsNCisgIH0NCisjZW5kaWYNCisgIGVsc2UNCisgIHsNCisgICAgcmV0dXJuIDE7DQorICB9DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX3NkX252aWNfaXNfYXBwX2FjY2Vzc2libGVfcHJpb3JpdHkodWludDMyX3QgcHJpb3JpdHkpDQorew0KKyAgaWYocHJpb3JpdHkgPj0gKDEgPDwgX19OVklDX1BSSU9fQklUUykpDQorICB7DQorICAgIHJldHVybiAwOw0KKyAgfQ0KKyNpZmRlZiBOUkY1MQ0KKyAgaWYoICAgcHJpb3JpdHkgPT0gMA0KKyAgICAgfHwgcHJpb3JpdHkgPT0gMg0KKyAgICAgKQ0KKyAgew0KKyAgICByZXR1cm4gMDsNCisgIH0NCisjZW5kaWYNCisjaWYgZGVmaW5lZChOUkY1MikgfHwgZGVmaW5lZChOUkY1Mjg0MF9YWEFBKQ0KKyAgaWYoICAgcHJpb3JpdHkgPT0gMA0KKyAgICAgfHwgcHJpb3JpdHkgPT0gMQ0KKyAgICAgfHwgcHJpb3JpdHkgPT0gNA0KKyAgICAgfHwgcHJpb3JpdHkgPT0gNQ0KKyAgICAgKQ0KKyAgew0KKyAgICByZXR1cm4gMDsNCisgIH0NCisjZW5kaWYNCisgIHJldHVybiAxOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19FbmFibGVJUlEoSVJRbl9UeXBlIElSUW4pDQorew0KKyAgaWYgKCFfX3NkX252aWNfYXBwX2FjY2Vzc2libGVfaXJxKElSUW4pKQ0KKyAgew0KKyAgICByZXR1cm4gTlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9OT1RfQVZBSUxBQkxFOw0KKyAgfQ0KKyAgaWYgKCFfX3NkX252aWNfaXNfYXBwX2FjY2Vzc2libGVfcHJpb3JpdHkoTlZJQ19HZXRQcmlvcml0eShJUlFuKSkpDQorICB7DQorICAgIHJldHVybiBOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX1BSSU9SSVRZX05PVF9BTExPV0VEOw0KKyAgfQ0KKw0KKyAgaWYgKG5yZl9udmljX3N0YXRlLl9fY3JfZmxhZykNCisgIHsNCisgICAgbnJmX252aWNfc3RhdGUuX19pcnFfbWFza3NbKHVpbnQzMl90KSgoaW50MzJfdClJUlFuKSA+PiA1XSB8PSAodWludDMyX3QpKDEgPDwgKCh1aW50MzJfdCkoKGludDMyX3QpSVJRbikgJiAodWludDMyX3QpMHgxRikpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBOVklDX0VuYWJsZUlSUShJUlFuKTsNCisgIH0NCisgIHJldHVybiBOUkZfU1VDQ0VTUzsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfRGlzYWJsZUlSUShJUlFuX1R5cGUgSVJRbikNCit7DQorICBpZiAoIV9fc2RfbnZpY19hcHBfYWNjZXNzaWJsZV9pcnEoSVJRbikpDQorICB7DQorICAgIHJldHVybiBOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX05PVF9BVkFJTEFCTEU7DQorICB9DQorDQorICBpZiAobnJmX252aWNfc3RhdGUuX19jcl9mbGFnKQ0KKyAgew0KKyAgICBucmZfbnZpY19zdGF0ZS5fX2lycV9tYXNrc1sodWludDMyX3QpKChpbnQzMl90KUlSUW4pID4+IDVdICY9IH4oMVVMIDw8ICgodWludDMyX3QpKElSUW4pICYgMHgxRikpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBOVklDX0Rpc2FibGVJUlEoSVJRbik7DQorICB9DQorDQorICByZXR1cm4gTlJGX1NVQ0NFU1M7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX0dldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90ICogcF9wZW5kaW5nX2lycSkNCit7DQorICBpZiAoX19zZF9udmljX2FwcF9hY2Nlc3NpYmxlX2lycShJUlFuKSkNCisgIHsNCisgICAgKnBfcGVuZGluZ19pcnEgPSBOVklDX0dldFBlbmRpbmdJUlEoSVJRbik7DQorICAgIHJldHVybiBOUkZfU1VDQ0VTUzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgcmV0dXJuIE5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfTk9UX0FWQUlMQUJMRTsNCisgIH0NCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfU2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikNCit7DQorICBpZiAoX19zZF9udmljX2FwcF9hY2Nlc3NpYmxlX2lycShJUlFuKSkNCisgIHsNCisgICAgTlZJQ19TZXRQZW5kaW5nSVJRKElSUW4pOw0KKyAgICByZXR1cm4gTlJGX1NVQ0NFU1M7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHJldHVybiBOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX05PVF9BVkFJTEFCTEU7DQorICB9DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX0NsZWFyUGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikNCit7DQorICBpZiAoX19zZF9udmljX2FwcF9hY2Nlc3NpYmxlX2lycShJUlFuKSkNCisgIHsNCisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoSVJRbik7DQorICAgIHJldHVybiBOUkZfU1VDQ0VTUzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgcmV0dXJuIE5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfTk9UX0FWQUlMQUJMRTsNCisgIH0NCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfU2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90IHByaW9yaXR5KQ0KK3sNCisgIGlmICghX19zZF9udmljX2FwcF9hY2Nlc3NpYmxlX2lycShJUlFuKSkNCisgIHsNCisgICAgcmV0dXJuIE5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfTk9UX0FWQUlMQUJMRTsNCisgIH0NCisNCisgIGlmICghX19zZF9udmljX2lzX2FwcF9hY2Nlc3NpYmxlX3ByaW9yaXR5KHByaW9yaXR5KSkNCisgIHsNCisgICAgcmV0dXJuIE5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfUFJJT1JJVFlfTk9UX0FMTE9XRUQ7DQorICB9DQorDQorICBOVklDX1NldFByaW9yaXR5KElSUW4sICh1aW50MzJfdClwcmlvcml0eSk7DQorICByZXR1cm4gTlJGX1NVQ0NFU1M7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX0dldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuLCB1aW50MzJfdCAqIHBfcHJpb3JpdHkpDQorew0KKyAgaWYgKF9fc2RfbnZpY19hcHBfYWNjZXNzaWJsZV9pcnEoSVJRbikpDQorICB7DQorICAgICpwX3ByaW9yaXR5ID0gKE5WSUNfR2V0UHJpb3JpdHkoSVJRbikgJiAweEZGKTsNCisgICAgcmV0dXJuIE5SRl9TVUNDRVNTOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICByZXR1cm4gTlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9OT1RfQVZBSUxBQkxFOw0KKyAgfQ0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19TeXN0ZW1SZXNldCh2b2lkKQ0KK3sNCisgIE5WSUNfU3lzdGVtUmVzZXQoKTsNCisgIHJldHVybiBOUkZfRVJST1JfU09DX05WSUNfU0hPVUxEX05PVF9SRVRVUk47DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX2NyaXRpY2FsX3JlZ2lvbl9lbnRlcih1aW50OF90ICogcF9pc19uZXN0ZWRfY3JpdGljYWxfcmVnaW9uKQ0KK3sNCisgIGludCB3YXNfbWFza2VkID0gX19zZF9udmljX2lycV9kaXNhYmxlKCk7DQorICBpZiAoIW5yZl9udmljX3N0YXRlLl9fY3JfZmxhZykNCisgIHsNCisgICAgbnJmX252aWNfc3RhdGUuX19jcl9mbGFnID0gMTsNCisgICAgbnJmX252aWNfc3RhdGUuX19pcnFfbWFza3NbMF0gPSAoIE5WSUMtPklDRVJbMF0gJiBfX05SRl9OVklDX0FQUF9JUlFTXzAgKTsNCisgICAgTlZJQy0+SUNFUlswXSA9IF9fTlJGX05WSUNfQVBQX0lSUVNfMDsNCisgICAgI2lmIGRlZmluZWQoTlJGNTIpIHx8IGRlZmluZWQoTlJGNTI4NDBfWFhBQSkNCisgICAgbnJmX252aWNfc3RhdGUuX19pcnFfbWFza3NbMV0gPSAoIE5WSUMtPklDRVJbMV0gJiBfX05SRl9OVklDX0FQUF9JUlFTXzEgKTsNCisgICAgTlZJQy0+SUNFUlsxXSA9IF9fTlJGX05WSUNfQVBQX0lSUVNfMTsNCisgICAgI2VuZGlmDQorICAgICpwX2lzX25lc3RlZF9jcml0aWNhbF9yZWdpb24gPSAwOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAqcF9pc19uZXN0ZWRfY3JpdGljYWxfcmVnaW9uID0gMTsNCisgIH0NCisgIGlmICghd2FzX21hc2tlZCkNCisgIHsNCisgICAgX19zZF9udmljX2lycV9lbmFibGUoKTsNCisgIH0NCisgIHJldHVybiBOUkZfU1VDQ0VTUzsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfY3JpdGljYWxfcmVnaW9uX2V4aXQodWludDhfdCBpc19uZXN0ZWRfY3JpdGljYWxfcmVnaW9uKQ0KK3sNCisgIGlmIChucmZfbnZpY19zdGF0ZS5fX2NyX2ZsYWcgJiYgKGlzX25lc3RlZF9jcml0aWNhbF9yZWdpb24gPT0gMCkpDQorICB7DQorICAgIGludCB3YXNfbWFza2VkID0gX19zZF9udmljX2lycV9kaXNhYmxlKCk7DQorICAgIE5WSUMtPklTRVJbMF0gPSBucmZfbnZpY19zdGF0ZS5fX2lycV9tYXNrc1swXTsNCisgICAgI2lmIGRlZmluZWQoTlJGNTIpIHx8IGRlZmluZWQoTlJGNTI4NDBfWFhBQSkNCisgICAgTlZJQy0+SVNFUlsxXSA9IG5yZl9udmljX3N0YXRlLl9faXJxX21hc2tzWzFdOw0KKyAgICAjZW5kaWYNCisgICAgbnJmX252aWNfc3RhdGUuX19jcl9mbGFnID0gMDsNCisgICAgaWYgKCF3YXNfbWFza2VkKQ0KKyAgICB7DQorICAgICAgX19zZF9udmljX2lycV9lbmFibGUoKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgcmV0dXJuIE5SRl9TVUNDRVNTOw0KK30NCisNCisjZW5kaWYgLyogU1VQUFJFU1NfSU5MSU5FX0lNUExFTUVOVEFUSU9OICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvLyBOUkZfTlZJQ19IX18NCisNCisvKipAfSAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX3NkbS5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfc2RtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhYjMzYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX3NkbS5oCkBAIC0wLDAgKzEsMzM4IEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKy8qKg0KKyAgQGRlZmdyb3VwIG5yZl9zZG1fYXBpIFNvZnREZXZpY2UgTWFuYWdlciBBUEkNCisgIEB7DQorDQorICBAYnJpZWYgQVBJcyBmb3IgU29mdERldmljZSBtYW5hZ2VtZW50Lg0KKw0KKyovDQorDQorI2lmbmRlZiBOUkZfU0RNX0hfXw0KKyNkZWZpbmUgTlJGX1NETV9IX18NCisNCisjaW5jbHVkZSAibnJmX3N2Yy5oIg0KKyNpbmNsdWRlICJucmYuaCINCisjaW5jbHVkZSAibnJmX3NvYy5oIg0KKyNpbmNsdWRlICJucmZfZXJyb3Jfc2RtLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqIEBhZGR0b2dyb3VwIE5SRl9TRE1fREVGSU5FUyBEZWZpbmVzDQorICogQHsgKi8NCisjaWZkZWYgTlJGU09DX0RPWFlHRU4NCisvLy8gRGVjbGFyZWQgaW4gbnJmX21ici5oDQorI2RlZmluZSBNQlJfU0laRSAwDQorI3dhcm5pbmcgdGVzdA0KKyNlbmRpZg0KKw0KKy8qKiBAYnJpZWYgVGhlIG1ham9yIHZlcnNpb24gZm9yIHRoZSBTb2Z0RGV2aWNlIGJpbmFyeSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgaGVhZGVyIGZpbGUuICovDQorI2RlZmluZSBTRF9NQUpPUl9WRVJTSU9OICAoMCkNCisNCisvKiogQGJyaWVmIFRoZSBtaW5vciB2ZXJzaW9uIGZvciB0aGUgU29mdERldmljZSBiaW5hcnkgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIGhlYWRlciBmaWxlLiAqLw0KKyNkZWZpbmUgU0RfTUlOT1JfVkVSU0lPTiAgKDApDQorDQorLyoqIEBicmllZiBUaGUgYnVnZml4IHZlcnNpb24gZm9yIHRoZSBTb2Z0RGV2aWNlIGJpbmFyeSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgaGVhZGVyIGZpbGUuICovDQorI2RlZmluZSBTRF9CVUdGSVhfVkVSU0lPTiAoMCkNCisNCisvKiogQGJyaWVmIFRoZSBmdWxsIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgU29mdERldmljZSBiaW5hcnkgdGhpcyBoZWFkZXIgZmlsZSB3YXMgZGlzdHJpYnV0ZWQNCisgKiAgICAgICAgIHdpdGgsIGFzIGEgZGVjaW1hbCBudW1iZXIgaW4gdGhlIGZvcm0gTW1tbWJiYiwgd2hlcmU6DQorICogICAgICAgICAgIC0gTSBpcyBtYWpvciB2ZXJzaW9uIChvbmUgb3IgbW9yZSBkaWdpdHMpDQorICogICAgICAgICAgIC0gbW1tIGlzIG1pbm9yIHZlcnNpb24gKHRocmVlIGRpZ2l0cykNCisgKiAgICAgICAgICAgLSBiYmIgaXMgYnVnZml4IHZlcnNpb24gKHRocmVlIGRpZ2l0cykuICovDQorI2RlZmluZSBTRF9WRVJTSU9OIChTRF9NQUpPUl9WRVJTSU9OICogMTAwMDAwMCArIFNEX01JTk9SX1ZFUlNJT04gKiAxMDAwICsgU0RfQlVHRklYX1ZFUlNJT04pDQorDQorLyoqIEBicmllZiBTb2Z0RGV2aWNlIE1hbmFnZXIgU1ZDIEJhc2UgbnVtYmVyLiAqLw0KKyNkZWZpbmUgU0RNX1NWQ19CQVNFIDB4MTANCisNCisvKiogQGJyaWVmIEludmFsaWQgaW5mbyBmaWVsZC4gUmV0dXJuZWQgd2hlbiBhbiBpbmZvIGZpZWxkIGRvZXMgbm90IGV4aXN0LiAqLw0KKyNkZWZpbmUgU0RNX0lORk9fRklFTERfSU5WQUxJRCAoMCkNCisNCisvKiogQGJyaWVmIERlZmluZXMgdGhlIFNvZnREZXZpY2UgSW5mb3JtYXRpb24gU3RydWN0dXJlIGxvY2F0aW9uIChhZGRyZXNzKSBhcyBhbiBvZmZzZXQgZnJvbQ0KK3RoZSBzdGFydCBvZiB0aGUgU29mdERldmljZSAod2l0aG91dCBNQlIpKi8NCisjZGVmaW5lIFNPRlRERVZJQ0VfSU5GT19TVFJVQ1RfT0ZGU0VUICgweDIwMDApDQorDQorLyoqIEBicmllZiBEZWZpbmVzIHRoZSBhYnNvbHV0ZSBTb2Z0RGV2aWNlIEluZm9ybWF0aW9uIFN0cnVjdHVyZSBsb2NhdGlvbiAoYWRkcmVzcykgd2hlbiB0aGUNCisgKiAgICAgICAgIFNvZnREZXZpY2UgaXMgaW5zdGFsbGVkIGp1c3QgYWJvdmUgdGhlIE1CUiAodGhlIHVzdWFsIGNhc2UpLiAqLw0KKyNkZWZpbmUgU09GVERFVklDRV9JTkZPX1NUUlVDVF9BRERSRVNTIChTT0ZUREVWSUNFX0lORk9fU1RSVUNUX09GRlNFVCArIE1CUl9TSVpFKQ0KKw0KKy8qKiBAYnJpZWYgRGVmaW5lcyB0aGUgb2Zmc2V0IGZvciB0aGUgU29mdERldmljZSBJbmZvcm1hdGlvbiBTdHJ1Y3R1cmUgc2l6ZSB2YWx1ZSByZWxhdGl2ZSB0byB0aGUNCisgKiAgICAgICAgIFNvZnREZXZpY2UgYmFzZSBhZGRyZXNzLiBUaGUgc2l6ZSB2YWx1ZSBpcyBvZiB0eXBlIHVpbnQ4X3QuICovDQorI2RlZmluZSBTRF9JTkZPX1NUUlVDVF9TSVpFX09GRlNFVCAoU09GVERFVklDRV9JTkZPX1NUUlVDVF9PRkZTRVQpDQorDQorLyoqIEBicmllZiBEZWZpbmVzIHRoZSBvZmZzZXQgZm9yIHRoZSBTb2Z0RGV2aWNlIHNpemUgdmFsdWUgcmVsYXRpdmUgdG8gdGhlIFNvZnREZXZpY2UgYmFzZSBhZGRyZXNzLg0KKyAqICAgICAgICAgVGhlIHNpemUgdmFsdWUgaXMgb2YgdHlwZSB1aW50MzJfdC4gKi8NCisjZGVmaW5lIFNEX1NJWkVfT0ZGU0VUIChTT0ZUREVWSUNFX0lORk9fU1RSVUNUX09GRlNFVCArIDB4MDgpDQorDQorLyoqIEBicmllZiBEZWZpbmVzIHRoZSBvZmZzZXQgZm9yIEZXSUQgdmFsdWUgcmVsYXRpdmUgdG8gdGhlIFNvZnREZXZpY2UgYmFzZSBhZGRyZXNzLiBUaGUgRldJRCB2YWx1ZQ0KKyAqICAgICAgICAgaXMgb2YgdHlwZSB1aW50MTZfdC4gICovDQorI2RlZmluZSBTRF9GV0lEX09GRlNFVCAoU09GVERFVklDRV9JTkZPX1NUUlVDVF9PRkZTRVQgKyAweDBDKQ0KKw0KKy8qKiBAYnJpZWYgRGVmaW5lcyB0aGUgb2Zmc2V0IGZvciB0aGUgU29mdERldmljZSBJRCByZWxhdGl2ZSB0byB0aGUgU29mdERldmljZSBiYXNlIGFkZHJlc3MuIFRoZSBJRA0KKyAqICAgICAgICAgaXMgb2YgdHlwZSB1aW50MzJfdC4gKi8NCisjZGVmaW5lIFNEX0lEX09GRlNFVCAoU09GVERFVklDRV9JTkZPX1NUUlVDVF9PRkZTRVQgKyAweDEwKQ0KKw0KKy8qKiBAYnJpZWYgRGVmaW5lcyB0aGUgb2Zmc2V0IGZvciB0aGUgU29mdERldmljZSB2ZXJzaW9uIHJlbGF0aXZlIHRvIHRoZSBTb2Z0RGV2aWNlIGJhc2UgYWRkcmVzcyBpbg0KKyAqICAgICAgICAgdGhlIHNhbWUgZm9ybWF0IGFzIEByZWYgU0RfVkVSU0lPTiwgc3RvcmVkIGFzIGFuIHVpbnQzMl90LiAqLw0KKyNkZWZpbmUgU0RfVkVSU0lPTl9PRkZTRVQgKFNPRlRERVZJQ0VfSU5GT19TVFJVQ1RfT0ZGU0VUICsgMHgxNCkNCisNCisvKiogQGJyaWVmIERlZmluZXMgYSBtYWNybyBmb3IgcmV0cmlldmluZyB0aGUgYWN0dWFsIFNvZnREZXZpY2UgSW5mb3JtYXRpb24gU3RydWN0dXJlIHNpemUgdmFsdWUNCisgKiAgICAgICAgIGZyb20gYSBnaXZlbiBiYXNlIGFkZHJlc3MuIFVzZSBAcmVmIE1CUl9TSVpFIGFzIHRoZSBhcmd1bWVudCB3aGVuIHRoZSBTb2Z0RGV2aWNlIGlzDQorICogICAgICAgICBpbnN0YWxsZWQganVzdCBhYm92ZSB0aGUgTUJSICh0aGUgdXN1YWwgY2FzZSkuICovDQorI2RlZmluZSBTRF9JTkZPX1NUUlVDVF9TSVpFX0dFVChiYXNlYWRkcikgKCooKHVpbnQ4X3QgKikgKChiYXNlYWRkcikgKyBTRF9JTkZPX1NUUlVDVF9TSVpFX09GRlNFVCkpKQ0KKw0KKy8qKiBAYnJpZWYgRGVmaW5lcyBhIG1hY3JvIGZvciByZXRyaWV2aW5nIHRoZSBhY3R1YWwgU29mdERldmljZSBzaXplIHZhbHVlIGZyb20gYSBnaXZlbiBiYXNlDQorICogICAgICAgICBhZGRyZXNzLiBVc2UgQHJlZiBNQlJfU0laRSBhcyB0aGUgYXJndW1lbnQgd2hlbiB0aGUgU29mdERldmljZSBpcyBpbnN0YWxsZWQganVzdCBhYm92ZQ0KKyAqICAgICAgICAgdGhlIE1CUiAodGhlIHVzdWFsIGNhc2UpLiAqLw0KKyNkZWZpbmUgU0RfU0laRV9HRVQoYmFzZWFkZHIpICgqKCh1aW50MzJfdCAqKSAoKGJhc2VhZGRyKSArIFNEX1NJWkVfT0ZGU0VUKSkpDQorDQorLyoqIEBicmllZiBEZWZpbmVzIGEgbWFjcm8gZm9yIHJldHJpZXZpbmcgdGhlIGFjdHVhbCBGV0lEIHZhbHVlIGZyb20gYSBnaXZlbiBiYXNlIGFkZHJlc3MuIFVzZSBAcmVmDQorICogICAgICAgICBNQlJfU0laRSBhcyB0aGUgYXJndW1lbnQgd2hlbiB0aGUgU29mdERldmljZSBpcyBpbnN0YWxsZWQganVzdCBhYm92ZSB0aGUgTUJSICh0aGUgdXN1YWwNCisgKiAgICAgICAgIGNhc2UpLiAqLw0KKyNkZWZpbmUgU0RfRldJRF9HRVQoYmFzZWFkZHIpICgqKCh1aW50MTZfdCAqKSAoKGJhc2VhZGRyKSArIFNEX0ZXSURfT0ZGU0VUKSkpDQorDQorLyoqIEBicmllZiBEZWZpbmVzIGEgbWFjcm8gZm9yIHJldHJpZXZpbmcgdGhlIGFjdHVhbCBTb2Z0RGV2aWNlIElEIGZyb20gYSBnaXZlbiBiYXNlIGFkZHJlc3MuIFVzZQ0KKyAqICAgICAgICAgQHJlZiBNQlJfU0laRSBhcyB0aGUgYXJndW1lbnQgd2hlbiB0aGUgU29mdERldmljZSBpcyBpbnN0YWxsZWQganVzdCBhYm92ZSB0aGUgTUJSICh0aGUNCisgKiAgICAgICAgIHVzdWFsIGNhc2UpLiAqLw0KKyNkZWZpbmUgU0RfSURfR0VUKGJhc2VhZGRyKSAoKFNEX0lORk9fU1RSVUNUX1NJWkVfR0VUKGJhc2VhZGRyKSA+IChTRF9JRF9PRkZTRVQgLSBTT0ZUREVWSUNFX0lORk9fU1RSVUNUX09GRlNFVCkpIFwNCisgICAgICAgID8gKCooKHVpbnQzMl90ICopICgoYmFzZWFkZHIpICsgU0RfSURfT0ZGU0VUKSkpIDogU0RNX0lORk9fRklFTERfSU5WQUxJRCkNCisNCisvKiogQGJyaWVmIERlZmluZXMgYSBtYWNybyBmb3IgcmV0cmlldmluZyB0aGUgYWN0dWFsIEZXSUQgdmFsdWUgZnJvbSBhIGdpdmVuIGJhc2UgYWRkcmVzcy4gVXNlIEByZWYNCisgKiAgICAgICAgIE1CUl9TSVpFIGFzIHRoZSBhcmd1bWVudCB3aGVuIHRoZSBTb2Z0RGV2aWNlIGlzIGluc3RhbGxlZCBqdXN0IGFib3ZlIHRoZSBNQlIgKHRoZSB1c3VhbA0KKyAqICAgICAgICAgY2FzZSkuICovDQorI2RlZmluZSBTRF9WRVJTSU9OX0dFVChiYXNlYWRkcikgKChTRF9JTkZPX1NUUlVDVF9TSVpFX0dFVChiYXNlYWRkcikgPiAoU0RfVkVSU0lPTl9PRkZTRVQgLSBTT0ZUREVWSUNFX0lORk9fU1RSVUNUX09GRlNFVCkpIFwNCisgICAgICAgID8gKCooKHVpbnQzMl90ICopICgoYmFzZWFkZHIpICsgU0RfVkVSU0lPTl9PRkZTRVQpKSkgOiBTRE1fSU5GT19GSUVMRF9JTlZBTElEKQ0KKw0KKy8qKkBkZWZncm91cCBOUkZfRkFVTFRfSURfUkFOR0VTIEZhdWx0IElEIHJhbmdlcw0KKyAqIEB7ICovDQorI2RlZmluZSBOUkZfRkFVTFRfSURfU0RfUkFOR0VfU1RBUlQgICAgIDB4MDAwMDAwMDAgICAgICAgICAgICAvKio8IFNvZnREZXZpY2UgSUQgcmFuZ2Ugc3RhcnQuICovDQorI2RlZmluZSBOUkZfRkFVTFRfSURfQVBQX1JBTkdFX1NUQVJUICAgIDB4MDAwMDEwMDAgICAgICAgICAgICAvKio8IEFwcGxpY2F0aW9uIElEIHJhbmdlIHN0YXJ0LiAqLw0KKy8qKkB9ICovDQorDQorLyoqQGRlZmdyb3VwIE5SRl9GQVVMVF9JRFMgRmF1bHQgSUQgdHlwZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgTlJGX0ZBVUxUX0lEX1NEX0FTU0VSVCAgICAoTlJGX0ZBVUxUX0lEX1NEX1JBTkdFX1NUQVJUICArIDEpICAgICAgICAgIC8qKjwgU29mdERldmljZSBhc3NlcnRpb24uIFRoZSBpbmZvIHBhcmFtZXRlciBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZWQuICovDQorI2RlZmluZSBOUkZfRkFVTFRfSURfQVBQX01FTUFDQyAgIChOUkZfRkFVTFRfSURfQVBQX1JBTkdFX1NUQVJUICsgMSkgICAgICAgICAgLyoqPCBBcHBsaWNhdGlvbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgKG5SRjUyIG9ubHkpLiBUaGUgaW5mbyBwYXJhbWV0ZXIgd2lsbCBjb250YWluIDB4MDAwMDAwMDAsIGluIGNhc2Ugb2YgU29mdERldmljZSBSQU0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgdmlvbGF0aW9uLiBJbiBjYXNlIG9mIFNvZnREZXZpY2UgcGVyaXBoZXJhbCByZWdpc3RlciB2aW9sYXRpb24gdGhlIGluZm8gcGFyYW1ldGVyIHdpbGwgY29udGFpbiB0aGUgc3ViLXJlZ2lvbiBudW1iZXIgb2YgUFJFR0lPTlswXSwgb24gd2hvc2UgYWRkcmVzcyByYW5nZSB0aGUgZGlzYWxsb3dlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlIGFjY2VzcyBjYXVzZWQgdGhlIG1lbW9yeSBhY2Nlc3MgZmF1bHQuICovDQorLyoqQH0gKi8NCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgTlJGX1NETV9FTlVNUyBFbnVtZXJhdGlvbnMNCisgKiBAeyAqLw0KKw0KKy8qKkBicmllZiBuUkYgU29mdERldmljZSBNYW5hZ2VyIEFQSSBTVkMgbnVtYmVycy4gKi8NCitlbnVtIE5SRl9TRF9TVkNTDQorew0KKyAgU0RfU09GVERFVklDRV9FTkFCTEUgPSBTRE1fU1ZDX0JBU0UsIC8qKjwgOjpzZF9zb2Z0ZGV2aWNlX2VuYWJsZSAqLw0KKyAgU0RfU09GVERFVklDRV9ESVNBQkxFLCAgICAgICAgICAgICAgIC8qKjwgOjpzZF9zb2Z0ZGV2aWNlX2Rpc2FibGUgKi8NCisgIFNEX1NPRlRERVZJQ0VfSVNfRU5BQkxFRCwgICAgICAgICAgICAvKio8IDo6c2Rfc29mdGRldmljZV9pc19lbmFibGVkICovDQorICBTRF9TT0ZUREVWSUNFX1ZFQ1RPUl9UQUJMRV9CQVNFX1NFVCwgLyoqPCA6OnNkX3NvZnRkZXZpY2VfdmVjdG9yX3RhYmxlX2Jhc2Vfc2V0ICovDQorICBTVkNfU0RNX0xBU1QgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQbGFjZWhvbGRlciBmb3IgbGFzdCBTRE0gU1ZDICovDQorfTsNCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgTlJGX1NETV9ERUZJTkVTIERlZmluZXMNCisgKiBAeyAqLw0KKw0KKy8qKkBkZWZncm91cCBOUkZfQ0xPQ0tfTEZfWFRBTF9BQ0NVUkFDWSBDbG9jayBhY2N1cmFjeQ0KKyAqIEB7ICovDQorDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZfWFRBTF9BQ0NVUkFDWV8yNTBfUFBNICgwKSAvKio8IERlZmF1bHQ6IDI1MCBwcG0gKi8NCisjZGVmaW5lIE5SRl9DTE9DS19MRl9YVEFMX0FDQ1VSQUNZXzUwMF9QUE0gKDEpIC8qKjwgNTAwIHBwbSAqLw0KKyNkZWZpbmUgTlJGX0NMT0NLX0xGX1hUQUxfQUNDVVJBQ1lfMTUwX1BQTSAoMikgLyoqPCAxNTAgcHBtICovDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZfWFRBTF9BQ0NVUkFDWV8xMDBfUFBNICgzKSAvKio8IDEwMCBwcG0gKi8NCisjZGVmaW5lIE5SRl9DTE9DS19MRl9YVEFMX0FDQ1VSQUNZXzc1X1BQTSAgKDQpIC8qKjwgNzUgcHBtICovDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZfWFRBTF9BQ0NVUkFDWV81MF9QUE0gICg1KSAvKio8IDUwIHBwbSAqLw0KKyNkZWZpbmUgTlJGX0NMT0NLX0xGX1hUQUxfQUNDVVJBQ1lfMzBfUFBNICAoNikgLyoqPCAzMCBwcG0gKi8NCisjZGVmaW5lIE5SRl9DTE9DS19MRl9YVEFMX0FDQ1VSQUNZXzIwX1BQTSAgKDcpIC8qKjwgMjAgcHBtICovDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZfWFRBTF9BQ0NVUkFDWV8xMF9QUE0gICg4KSAvKio8IDEwIHBwbSAqLw0KKyNkZWZpbmUgTlJGX0NMT0NLX0xGX1hUQUxfQUNDVVJBQ1lfNV9QUE0gICAoOSkgLyoqPCAgNSBwcG0gKi8NCisjZGVmaW5lIE5SRl9DTE9DS19MRl9YVEFMX0FDQ1VSQUNZXzJfUFBNICAoMTApIC8qKjwgIDIgcHBtICovDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZfWFRBTF9BQ0NVUkFDWV8xX1BQTSAgKDExKSAvKio8ICAxIHBwbSAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKkBkZWZncm91cCBOUkZfQ0xPQ0tfTEZfU1JDIFBvc3NpYmxlIExGQ0xLIG9zY2lsbGF0b3Igc291cmNlcw0KKyAqIEB7ICovDQorDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZfU1JDX1JDICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMRkNMSyBSQyBvc2NpbGxhdG9yLiAqLw0KKyNkZWZpbmUgTlJGX0NMT0NLX0xGX1NSQ19YVEFMICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTEZDTEsgY3J5c3RhbCBvc2NpbGxhdG9yLiAqLw0KKyNkZWZpbmUgTlJGX0NMT0NLX0xGX1NSQ19TWU5USCAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTEZDTEsgU3ludGhlc2l6ZWQgZnJvbSBIRkNMSy4gKi8NCisNCisvKiogQH0gKi8NCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgTlJGX1NETV9UWVBFUyBUeXBlcw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIFR5cGUgcmVwcmVzZW50aW5nIExGQ0xLIG9zY2lsbGF0b3Igc291cmNlLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBzb3VyY2U7ICAgICAgICAvKio8IExGIG9zY2lsbGF0b3IgY2xvY2sgc291cmNlLCBzZWUgQHJlZiBOUkZfQ0xPQ0tfTEZfU1JDLiAqLw0KKyAgdWludDhfdCByY19jdGl2OyAgICAgIC8qKjwgT25seSBmb3IgTlJGX0NMT0NLX0xGX1NSQ19SQzogQ2FsaWJyYXRpb24gdGltZXIgaW50ZXJ2YWwgaW4gMS80IHNlY29uZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzIChuUkY1MTogMS02NCwgblJGNTI6IDEtMzIpLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRvIGF2b2lkIGV4Y2Vzc2l2ZSBjbG9jayBkcmlmdCwgMC41IGRlZ3JlZXMgQ2Vsc2l1cyBpcyB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtIHRlbXBlcmF0dXJlIGNoYW5nZSBhbGxvd2VkIGluIG9uZSBjYWxpYnJhdGlvbiB0aW1lcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVydmFsLiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNlbGVjdGVkIHRvIGVuc3VyZSB0aGlzLg0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIE11c3QgYmUgMCBpZiBzb3VyY2UgaXMgbm90IE5SRl9DTE9DS19MRl9TUkNfUkMuICAqLw0KKyAgdWludDhfdCByY190ZW1wX2N0aXY7IC8qKjwgIE9ubHkgZm9yIE5SRl9DTE9DS19MRl9TUkNfUkM6IEhvdyBvZnRlbiAoaW4gbnVtYmVyIG9mIGNhbGlicmF0aW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzKSB0aGUgUkMgb3NjaWxsYXRvciBzaGFsbCBiZSBjYWxpYnJhdGVkIGlmIHRoZSB0ZW1wZXJhdHVyZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc24ndCBjaGFuZ2VkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOiBBbHdheXMgY2FsaWJyYXRlIGV2ZW4gaWYgdGhlIHRlbXBlcmF0dXJlIGhhc24ndCBjaGFuZ2VkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiBPbmx5IGNhbGlicmF0ZSBpZiB0aGUgdGVtcGVyYXR1cmUgaGFzIGNoYW5nZWQgKG5SRjUxIG9ubHkpLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLTMzOiBDaGVjayB0aGUgdGVtcGVyYXR1cmUgYW5kIG9ubHkgY2FsaWJyYXRlIGlmIGl0IGhhcyBjaGFuZ2VkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyIGNhbGlicmF0aW9uIHdpbGwgdGFrZSBwbGFjZSBldmVyeSByY190ZW1wX2N0aXYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzIGluIGFueSBjYXNlLg0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIE11c3QgYmUgMCBpZiBzb3VyY2UgaXMgbm90IE5SRl9DTE9DS19MRl9TUkNfUkMuDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgRm9yIG5SRjUyLCB0aGUgYXBwbGljYXRpb24gbXVzdCBlbnN1cmUgY2FsaWJyYXRpb24gYXQgbGVhc3Qgb25jZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZXJ5IDggc2Vjb25kcyB0byBlbnN1cmUgKy8tMjUwIHBwbSBjbG9jayBzdGFiaWxpdHkuIFRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb24gZm9yIE5SRl9DTE9DS19MRl9TUkNfUkMgb24gblJGNTIgaXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY19jdGl2PTE2IGFuZCByY190ZW1wX2N0aXY9Mi4gVGhpcyB3aWxsIGVuc3VyZSBjYWxpYnJhdGlvbiBhdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXN0IG9uY2UgZXZlcnkgOCBzZWNvbmRzIGFuZCBmb3IgdGVtcGVyYXR1cmUgY2hhbmdlcyBvZiAwLjUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWdyZWVzIENlbHNpdXMgZXZlcnkgNCBzZWNvbmRzLiBTZWUgdGhlIFByb2R1Y3QgU3BlY2lmaWNhdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgblJGNTIgZGV2aWNlIGJlaW5nIHVzZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uKi8NCisgIHVpbnQ4X3QgeHRhbF9hY2N1cmFjeTsgLyoqPCBFeHRlcm5hbCBjcnlzdGFsIGNsb2NrIGFjY3VyYWN5IHVzZWQgaW4gdGhlIExMIHRvIGNvbXB1dGUgdGltaW5nDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93cywgc2VlIEByZWYgTlJGX0NMT0NLX0xGX1hUQUxfQUNDVVJBQ1kuDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgRm9yIHRoZSBOUkZfQ0xPQ0tfTEZfU1JDX1JDIGNsb2NrIHNvdXJjZSB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLiAqLw0KK30gbnJmX2Nsb2NrX2xmX2NmZ190Ow0KKw0KKy8qKkBicmllZiBGYXVsdCBIYW5kbGVyIHR5cGUuDQorICoNCisgKiBXaGVuIGNlcnRhaW4gdW5yZWNvdmVyYWJsZSBlcnJvcnMgb2NjdXIgd2l0aGluIHRoZSBhcHBsaWNhdGlvbiBvciBTb2Z0RGV2aWNlIHRoZSBmYXVsdCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGJhY2suDQorICogVGhlIHByb3RvY29sIHN0YWNrIHdpbGwgYmUgaW4gYW4gdW5kZWZpbmVkIHN0YXRlIHdoZW4gdGhpcyBoYXBwZW5zIGFuZCB0aGUgb25seSB3YXkgdG8gcmVjb3ZlciB3aWxsIGJlIHRvDQorICogcGVyZm9ybSBhIHJlc2V0LCB1c2luZyBlLmcuIENNU0lTIE5WSUNfU3lzdGVtUmVzZXQoKS4NCisgKiBJZiB0aGUgYXBwbGljYXRpb24gcmV0dXJucyBmcm9tIHRoZSBmYXVsdCBoYW5kbGVyIHRoZSBTb2Z0RGV2aWNlIHdpbGwgY2FsbCBOVklDX1N5c3RlbVJlc2V0KCkuDQorICoNCisgKiBAbm90ZSBUaGlzIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIGluIEhhcmRGYXVsdCBjb250ZXh0LCB0aHVzIFNWQyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBmcm9tIHRoZSBmYXVsdCBjYWxsYmFjay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gaWQgRmF1bHQgaWRlbnRpZmllci4gU2VlIEByZWYgTlJGX0ZBVUxUX0lEUy4NCisgKiBAcGFyYW1baW5dIHBjIFRoZSBwcm9ncmFtIGNvdW50ZXIgb2YgdGhlIGluc3RydWN0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBmYXVsdC4NCisgKiBAcGFyYW1baW5dIGluZm8gT3B0aW9uYWwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIGZhdWx0LiBSZWZlciB0byBlYWNoIEZhdWx0IGlkZW50aWZpZXIgZm9yIGRldGFpbHMuDQorICoNCisgKiBAbm90ZSBXaGVuIGlkIGlzIHNldCB0byBOUkZfRkFVTFRfSURfQVBQX01FTUFDQywgcGMgd2lsbCBjb250YWluIHRoZSBhZGRyZXNzIG9mIHRoZSBpbnN0cnVjdGlvbiBiZWluZyBleGVjdXRlZCBhdCB0aGUgdGltZSB3aGVuDQorICogdGhlIGZhdWx0IGlzIGRldGVjdGVkIGJ5IHRoZSBDUFUuIFRoZSBDUFUgcHJvZ3JhbSBjb3VudGVyIG1heSBoYXZlIGFkdmFuY2VkIHVwIHRvIDIgaW5zdHJ1Y3Rpb25zIChubyBicmFuY2hpbmcpIGFmdGVyIHRoZSBvbmUgdGhhdCB0cmlnZ2VyZWQgdGhlIGZhdWx0Lg0KKyAqLw0KK3R5cGVkZWYgdm9pZCAoKm5yZl9mYXVsdF9oYW5kbGVyX3QpKHVpbnQzMl90IGlkLCB1aW50MzJfdCBwYywgdWludDMyX3QgaW5mbyk7DQorDQorLyoqIEB9ICovDQorDQorLyoqIEBhZGR0b2dyb3VwIE5SRl9TRE1fRlVOQ1RJT05TIEZ1bmN0aW9ucw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIEVuYWJsZXMgdGhlIFNvZnREZXZpY2UgYW5kIGJ5IGV4dGVuc2lvbiB0aGUgcHJvdG9jb2wgc3RhY2suDQorICoNCisgKiBAbm90ZSBTb21lIGNhcmUgbXVzdCBiZSB0YWtlbiBpZiBhIGxvdyBmcmVxdWVuY3kgY2xvY2sgc291cmNlIGlzIGFscmVhZHkgcnVubmluZyB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbjoNCisgKiAgICAgICBJZiB0aGUgTEYgY2xvY2sgaGFzIGEgZGlmZmVyZW50IHNvdXJjZSB0aGVuIHRoZSBvbmUgY3VycmVudGx5IHJ1bm5pbmcsIGl0IHdpbGwgYmUgc3RvcHBlZC4gVGhlbiwgdGhlIG5ldw0KKyAqICAgICAgIGNsb2NrIHNvdXJjZSB3aWxsIGJlIHN0YXJ0ZWQuDQorICoNCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGhhcyBubyBlZmZlY3Qgd2hlbiByZXR1cm5pbmcgd2l0aCBhbiBlcnJvci4NCisgKg0KKyAqIEBwb3N0IElmIHJldHVybiBjb2RlIGlzIDo6TlJGX1NVQ0NFU1MNCisgKiAgICAgICAtIFNvQyBsaWJyYXJ5IGFuZCBwcm90b2NvbCBzdGFjayBBUElzIGFyZSBtYWRlIGF2YWlsYWJsZS4NCisgKiAgICAgICAtIEEgcG9ydGlvbiBvZiBSQU0gd2lsbCBiZSB1bmF2YWlsYWJsZSAoc2VlIHJlbGV2YW50IFNEUyBkb2N1bWVudGF0aW9uKS4NCisgKiAgICAgICAtIFNvbWUgcGVyaXBoZXJhbHMgd2lsbCBiZSB1bmF2YWlsYWJsZSBvciBhdmFpbGFibGUgb25seSB0aHJvdWdoIHRoZSBTb0MgQVBJIChzZWUgcmVsZXZhbnQgU0RTIGRvY3VtZW50YXRpb24pLg0KKyAqICAgICAgIC0gSW50ZXJydXB0cyB3aWxsIG5vdCBhcnJpdmUgZnJvbSBwcm90ZWN0ZWQgcGVyaXBoZXJhbHMgb3IgaW50ZXJydXB0cy4NCisgKiAgICAgICAtIG5yZl9udmljXyBmdW5jdGlvbnMgbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgQ01TSVMgTlZJQ18gZnVuY3Rpb25zIGZvciByZWxpYWJsZSB1c2FnZSBvZiB0aGUgU29mdERldmljZS4NCisgKiAgICAgICAtIEludGVycnVwdCBsYXRlbmN5IG1heSBiZSBhZmZlY3RlZCBieSB0aGUgU29mdERldmljZSAgKHNlZSByZWxldmFudCBTRFMgZG9jdW1lbnRhdGlvbikuDQorICogICAgICAgLSBDaG9zZW4gbG93IGZyZXF1ZW5jeSBjbG9jayBzb3VyY2Ugd2lsbCBiZSBydW5uaW5nLg0KKyAqDQorICogQHBhcmFtIHBfY2xvY2tfbGZfY2ZnIExvdyBmcmVxdWVuY3kgY2xvY2sgc291cmNlIGFuZCBhY2N1cmFjeS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgSWYgTlVMTCB0aGUgY2xvY2sgd2lsbCBiZSBjb25maWd1cmVkIGFzIGFuIFJDIHNvdXJjZSB3aXRoIHJjX2N0aXYgPSAxNiBhbmQgLnJjX3RlbXBfY3RpdiA9IDINCisgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGNhc2Ugb2YgWFRBTCBzb3VyY2UsIHRoZSBQUE0gYWNjdXJhY3kgb2YgdGhlIGNob3NlbiBjbG9jayBzb3VyY2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFjdHVhbCBjaGFyYWN0ZXJpc3RpY3Mgb2YgeW91ciBYVEFMIGNsb2NrLg0KKyAqIEBwYXJhbSBmYXVsdF9oYW5kbGVyIENhbGxiYWNrIHRvIGJlIGludm9rZWQgaW4gY2FzZSBvZiBmYXVsdCwgY2Fubm90IGJlIE5VTEwuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiAgSW52YWxpZCBvciBOVUxMIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIFNvZnREZXZpY2UgaXMgYWxyZWFkeSBlbmFibGVkLCBhbmQgdGhlIGNsb2NrIHNvdXJjZSBhbmQgZmF1bHQgaGFuZGxlciBjYW5ub3QgYmUgdXBkYXRlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NETV9JTkNPUlJFQ1RfSU5URVJSVVBUX0NPTkZJR1VSQVRJT04gU29mdERldmljZSBpbnRlcnJ1cHQgaXMgYWxyZWFkeSBlbmFibGVkLCBvciBhbiBlbmFibGVkIGludGVycnVwdCBoYXMgYW4gaWxsZWdhbCBwcmlvcml0eSBsZXZlbC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NETV9MRkNMS19TT1VSQ0VfVU5LTk9XTiBVbmtub3duIGxvdyBmcmVxdWVuY3kgY2xvY2sgc291cmNlIHNlbGVjdGVkLg0KKyAqLw0KK1NWQ0FMTChTRF9TT0ZUREVWSUNFX0VOQUJMRSwgdWludDMyX3QsIHNkX3NvZnRkZXZpY2VfZW5hYmxlKG5yZl9jbG9ja19sZl9jZmdfdCBjb25zdCAqIHBfY2xvY2tfbGZfY2ZnLCBucmZfZmF1bHRfaGFuZGxlcl90IGZhdWx0X2hhbmRsZXIpKTsNCisNCisNCisvKipAYnJpZWYgRGlzYWJsZXMgdGhlIFNvZnREZXZpY2UgYW5kIGJ5IGV4dGVuc2lvbiB0aGUgcHJvdG9jb2wgc3RhY2suDQorICoNCisgKiBJZGVtcG90ZW50IGZ1bmN0aW9uIHRvIGRpc2FibGUgdGhlIFNvZnREZXZpY2UuDQorICoNCisgKiBAcG9zdCBTb0MgbGlicmFyeSBhbmQgcHJvdG9jb2wgc3RhY2sgQVBJcyBhcmUgbWFkZSB1bmF2YWlsYWJsZS4NCisgKiBAcG9zdCBBbGwgaW50ZXJydXB0cyB0aGF0IHdhcyBwcm90ZWN0ZWQgYnkgdGhlIFNvZnREZXZpY2Ugd2lsbCBiZSBkaXNhYmxlZCBhbmQgaW5pdGlhbGl6ZWQgdG8gcHJpb3JpdHkgMCAoaGlnaGVzdCkuDQorICogQHBvc3QgQWxsIHBlcmlwaGVyYWxzIHVzZWQgYnkgdGhlIFNvZnREZXZpY2Ugd2lsbCBiZSByZXNldCB0byBkZWZhdWx0IHZhbHVlcy4NCisgKiBAcG9zdCBBbGwgb2YgUkFNIGJlY29tZSBhdmFpbGFibGUuDQorICogQHBvc3QgQWxsIGludGVycnVwdHMgYXJlIGZvcndhcmRlZCB0byB0aGUgYXBwbGljYXRpb24uDQorICogQHBvc3QgTEZDTEsgc291cmNlIGNob3NlbiBpbiA6OnNkX3NvZnRkZXZpY2VfZW5hYmxlIHdpbGwgYmUgbGVmdCBydW5uaW5nLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1NPRlRERVZJQ0VfRElTQUJMRSwgdWludDMyX3QsIHNkX3NvZnRkZXZpY2VfZGlzYWJsZSh2b2lkKSk7DQorDQorLyoqQGJyaWVmIENoZWNrIGlmIHRoZSBTb2Z0RGV2aWNlIGlzIGVuYWJsZWQuDQorICoNCisgKiBAcGFyYW1bb3V0XSAgcF9zb2Z0ZGV2aWNlX2VuYWJsZWQgSWYgdGhlIFNvZnREZXZpY2UgaXMgZW5hYmxlZDogMSBlbHNlIDAuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfU09GVERFVklDRV9JU19FTkFCTEVELCB1aW50MzJfdCwgc2Rfc29mdGRldmljZV9pc19lbmFibGVkKHVpbnQ4X3QgKiBwX3NvZnRkZXZpY2VfZW5hYmxlZCkpOw0KKw0KKy8qKkBicmllZiBTZXRzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGludGVycnVwdCB2ZWN0b3IgdGFibGUgZm9yIGludGVycnVwdHMgZm9yd2FyZGVkIGZyb20gdGhlIFNvZnREZXZpY2UNCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgd2hlbiBhIGJvb3Rsb2FkZXIgaXMgZW5hYmxlZC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gYWRkcmVzcyBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIHRhYmxlIGZvciBmb3J3YXJkZWQgaW50ZXJydXB0cy4NCisNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfU09GVERFVklDRV9WRUNUT1JfVEFCTEVfQkFTRV9TRVQsIHVpbnQzMl90LCBzZF9zb2Z0ZGV2aWNlX3ZlY3Rvcl90YWJsZV9iYXNlX3NldCh1aW50MzJfdCBhZGRyZXNzKSk7DQorDQorLyoqIEB9ICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKyNlbmRpZiAvLyBOUkZfU0RNX0hfXw0KKw0KKy8qKg0KKyAgQH0NCisqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX3NvYy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfc29jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM2ZGNmYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX3NvYy5oCkBAIC0wLDAgKzEsOTI2IEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKy8qKg0KKyAqIEBkZWZncm91cCBucmZfc29jX2FwaSBTb0MgTGlicmFyeSBBUEkNCisgKiBAew0KKyAqDQorICogQGJyaWVmIEFQSXMgZm9yIHRoZSBTb0MgbGlicmFyeS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX1NPQ19IX18NCisjZGVmaW5lIE5SRl9TT0NfSF9fDQorDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNpbmNsdWRlIDxzdGRib29sLmg+DQorI2luY2x1ZGUgIm5yZl9zdmMuaCINCisjaW5jbHVkZSAibnJmLmgiDQorDQorI2luY2x1ZGUgIm5yZl9lcnJvcl9zb2MuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKipAYWRkdG9ncm91cCBOUkZfU09DX0RFRklORVMgRGVmaW5lcw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIFRoZSBudW1iZXIgb2YgdGhlIGxvd2VzdCBTVkMgbnVtYmVyIHJlc2VydmVkIGZvciB0aGUgU29DIGxpYnJhcnkuICovDQorI2RlZmluZSBTT0NfU1ZDX0JBU0UgICAgICAgICAgICAgICAoMHgyMCkgICAgICAgICAgICAgICAgICAgLyoqPCBCYXNlIHZhbHVlIGZvciBTVkNzIHRoYXQgYXJlIGF2YWlsYWJsZSB3aGVuIHRoZSBTb2Z0RGV2aWNlIGlzIGRpc2FibGVkLiAqLw0KKyNkZWZpbmUgU09DX1NWQ19CQVNFX05PVF9BVkFJTEFCTEUgKDB4MkIpICAgICAgICAgICAgICAgICAgIC8qKjwgQmFzZSB2YWx1ZSBmb3IgU1ZDcyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIHdoZW4gdGhlIFNvZnREZXZpY2UgaXMgZGlzYWJsZWQuICovDQorDQorLyoqQGJyaWVmIEd1YXJhbnRlZWQgdGltZSBmb3IgYXBwbGljYXRpb24gdG8gcHJvY2VzcyByYWRpbyBpbmFjdGl2ZSBub3RpZmljYXRpb24uICovDQorI2RlZmluZSBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX0lOQUNUSVZFX0dVQVJBTlRFRURfVElNRV9VUyAgKDYyKQ0KKw0KKy8qKkBicmllZiBUaGUgbWluaW11bSBhbGxvd2VkIHRpbWVzbG90IGV4dGVuc2lvbiB0aW1lLiAqLw0KKyNkZWZpbmUgTlJGX1JBRElPX01JTklNVU1fVElNRVNMT1RfTEVOR1RIX0VYVEVOU0lPTl9USU1FX1VTICgyMDApDQorDQorI2RlZmluZSBTT0NfRUNCX0tFWV9MRU5HVEggICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFQ0Iga2V5IGxlbmd0aC4gKi8NCisjZGVmaW5lIFNPQ19FQ0JfQ0xFQVJURVhUX0xFTkdUSCAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVDQiBjbGVhcnRleHQgbGVuZ3RoLiAqLw0KKyNkZWZpbmUgU09DX0VDQl9DSVBIRVJURVhUX0xFTkdUSCAgICAgICAgIChTT0NfRUNCX0NMRUFSVEVYVF9MRU5HVEgpIC8qKjwgRUNCIGNpcGhlcnRleHQgbGVuZ3RoLiAqLw0KKw0KKyNpZmRlZiBOUkY1MQ0KKyNkZWZpbmUgU0RfRVZUX0lSUW4gICAgICAgICAgICAgICAgICAgICAgIChTV0kyX0lSUW4pICAgICAgICAvKio8IFNvZnREZXZpY2UgRXZlbnQgSVJRIG51bWJlci4gVXNlZCBmb3IgYm90aCBwcm90b2NvbCBldmVudHMgYW5kIFNvQyBldmVudHMuICovDQorI2RlZmluZSBTRF9FVlRfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgKFNXSTJfSVJRSGFuZGxlcikgIC8qKjwgU29mdERldmljZSBFdmVudCBJUlEgaGFuZGxlci4gVXNlZCBmb3IgYm90aCBwcm90b2NvbCBldmVudHMgYW5kIFNvQyBldmVudHMuICovDQorI2RlZmluZSBSQURJT19OT1RJRklDQVRJT05fSVJRbiAgICAgICAgICAgKFNXSTFfSVJRbikgICAgICAgIC8qKjwgVGhlIHJhZGlvIG5vdGlmaWNhdGlvbiBJUlEgbnVtYmVyLiAqLw0KKyNkZWZpbmUgUkFESU9fTk9USUZJQ0FUSU9OX0lSUUhhbmRsZXIgICAgIChTV0kxX0lSUUhhbmRsZXIpICAvKio8IFRoZSByYWRpbyBub3RpZmljYXRpb24gSVJRIGhhbmRsZXIuICovDQorI2VuZGlmDQorI2lmIGRlZmluZWQoTlJGNTIpIHx8IGRlZmluZWQoTlJGNTI4NDBfWFhBQSkNCisjZGVmaW5lIFNEX0VWVF9JUlFuICAgICAgICAgICAgICAgICAgICAgICAoU1dJMl9FR1UyX0lSUW4pICAgICAgICAvKio8IFNvZnREZXZpY2UgRXZlbnQgSVJRIG51bWJlci4gVXNlZCBmb3IgYm90aCBwcm90b2NvbCBldmVudHMgYW5kIFNvQyBldmVudHMuICovDQorI2RlZmluZSBTRF9FVlRfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgKFNXSTJfRUdVMl9JUlFIYW5kbGVyKSAgLyoqPCBTb2Z0RGV2aWNlIEV2ZW50IElSUSBoYW5kbGVyLiBVc2VkIGZvciBib3RoIHByb3RvY29sIGV2ZW50cyBhbmQgU29DIGV2ZW50cy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGludGVycnVwdCBwcmlvcml0eSBmb3IgdGhpcyBoYW5kbGVyIGlzIHNldCB0byA0ICovDQorI2RlZmluZSBSQURJT19OT1RJRklDQVRJT05fSVJRbiAgICAgICAgICAgKFNXSTFfRUdVMV9JUlFuKSAgICAgICAgLyoqPCBUaGUgcmFkaW8gbm90aWZpY2F0aW9uIElSUSBudW1iZXIuICovDQorI2RlZmluZSBSQURJT19OT1RJRklDQVRJT05fSVJRSGFuZGxlciAgICAgKFNXSTFfRUdVMV9JUlFIYW5kbGVyKSAgLyoqPCBUaGUgcmFkaW8gbm90aWZpY2F0aW9uIElSUSBoYW5kbGVyLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGZvciB0aGlzIGhhbmRsZXIgaXMgc2V0IHRvIDQgKi8NCisjZW5kaWYNCisNCisjZGVmaW5lIE5SRl9SQURJT19MRU5HVEhfTUlOX1VTICAgICAgICAgICAoMTAwKSAgICAgICAgICAgICAgIC8qKjwgVGhlIHNob3J0ZXN0IGFsbG93ZWQgcmFkaW8gdGltZXNsb3QsIGluIG1pY3Jvc2Vjb25kcy4gKi8NCisjZGVmaW5lIE5SRl9SQURJT19MRU5HVEhfTUFYX1VTICAgICAgICAgICAoMTAwMDAwKSAgICAgICAgICAgIC8qKjwgVGhlIGxvbmdlc3QgYWxsb3dlZCByYWRpbyB0aW1lc2xvdCwgaW4gbWljcm9zZWNvbmRzLiAqLw0KKw0KKyNkZWZpbmUgTlJGX1JBRElPX0RJU1RBTkNFX01BWF9VUyAgICAgICAgICgxMjgwMDAwMDBVTCAtIDFVTCkgLyoqPCBUaGUgbG9uZ2VzdCB0aW1lc2xvdCBkaXN0YW5jZSwgaW4gbWljcm9zZWNvbmRzLCBhbGxvd2VkIGZvciB0aGUgZGlzdGFuY2UgcGFyYW1ldGVyIChzZWUgQHJlZiBucmZfcmFkaW9fcmVxdWVzdF9ub3JtYWxfdCkgaW4gdGhlIHJlcXVlc3QuICovDQorDQorI2RlZmluZSBOUkZfUkFESU9fRUFSTElFU1RfVElNRU9VVF9NQVhfVVMgKDEyODAwMDAwMFVMIC0gMVVMKSAvKio8IFRoZSBsb25nZXN0IHRpbWVvdXQsIGluIG1pY3Jvc2Vjb25kcywgYWxsb3dlZCB3aGVuIHJlcXVlc3RpbmcgdGhlIGVhcmxpZXN0IHBvc3NpYmxlIHRpbWVzbG90LiAqLw0KKw0KKyNkZWZpbmUgTlJGX1JBRElPX1NUQVJUX0pJVFRFUl9VUyAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgLyoqPCBUaGUgbWF4aW11bSBqaXR0ZXIgaW4gQHJlZiBOUkZfUkFESU9fQ0FMTEJBQ0tfU0lHTkFMX1RZUEVfU1RBUlQgcmVsYXRpdmUgdG8gdGhlIHJlcXVlc3RlZCBzdGFydCB0aW1lLiAqLw0KKw0KKy8qKkB9ICovDQorDQorLyoqQGFkZHRvZ3JvdXAgTlJGX1NPQ19FTlVNUyBFbnVtZXJhdGlvbnMNCisgKiBAeyAqLw0KKw0KKy8qKkBicmllZiBUaGUgU1ZDIG51bWJlcnMgdXNlZCBieSB0aGUgU1ZDIGZ1bmN0aW9ucyBpbiB0aGUgU29DIGxpYnJhcnkuICovDQorZW51bSBOUkZfU09DX1NWQ1MNCit7DQorICBTRF9QUElfQ0hBTk5FTF9FTkFCTEVfR0VUID0gU09DX1NWQ19CQVNFLA0KKyAgU0RfUFBJX0NIQU5ORUxfRU5BQkxFX1NFVCwNCisgIFNEX1BQSV9DSEFOTkVMX0VOQUJMRV9DTFIsDQorICBTRF9QUElfQ0hBTk5FTF9BU1NJR04sDQorICBTRF9QUElfR1JPVVBfVEFTS19FTkFCTEUsDQorICBTRF9QUElfR1JPVVBfVEFTS19ESVNBQkxFLA0KKyAgU0RfUFBJX0dST1VQX0FTU0lHTiwNCisgIFNEX1BQSV9HUk9VUF9HRVQsDQorICBTRF9GTEFTSF9QQUdFX0VSQVNFLA0KKyAgU0RfRkxBU0hfV1JJVEUsDQorICBTRF9GTEFTSF9QUk9URUNULA0KKyAgU0RfTVVURVhfTkVXID0gU09DX1NWQ19CQVNFX05PVF9BVkFJTEFCTEUsDQorICBTRF9NVVRFWF9BQ1FVSVJFLA0KKyAgU0RfTVVURVhfUkVMRUFTRSwNCisgIFNEX1JBTkRfQVBQTElDQVRJT05fUE9PTF9DQVBBQ0lUWV9HRVQsDQorICBTRF9SQU5EX0FQUExJQ0FUSU9OX0JZVEVTX0FWQUlMQUJMRV9HRVQsDQorICBTRF9SQU5EX0FQUExJQ0FUSU9OX1ZFQ1RPUl9HRVQsDQorICBTRF9QT1dFUl9NT0RFX1NFVCwNCisgIFNEX1BPV0VSX1NZU1RFTV9PRkYsDQorICBTRF9QT1dFUl9SRVNFVF9SRUFTT05fR0VULA0KKyAgU0RfUE9XRVJfUkVTRVRfUkVBU09OX0NMUiwNCisgIFNEX1BPV0VSX1BPRl9FTkFCTEUsDQorICBTRF9QT1dFUl9QT0ZfVEhSRVNIT0xEX1NFVCwNCisgIFNEX1BPV0VSX1JBTV9QT1dFUl9TRVQsDQorICBTRF9QT1dFUl9SQU1fUE9XRVJfQ0xSLA0KKyAgU0RfUE9XRVJfUkFNX1BPV0VSX0dFVCwNCisgIFNEX1BPV0VSX0dQUkVHUkVUX1NFVCwNCisgIFNEX1BPV0VSX0dQUkVHUkVUX0NMUiwNCisgIFNEX1BPV0VSX0dQUkVHUkVUX0dFVCwNCisgIFNEX1BPV0VSX0RDRENfTU9ERV9TRVQsDQorICBTRF9BUFBfRVZUX1dBSVQsDQorICBTRF9DTE9DS19IRkNMS19SRVFVRVNULA0KKyAgU0RfQ0xPQ0tfSEZDTEtfUkVMRUFTRSwNCisgIFNEX0NMT0NLX0hGQ0xLX0lTX1JVTk5JTkcsDQorICBTRF9SQURJT19OT1RJRklDQVRJT05fQ0ZHX1NFVCwNCisgIFNEX0VDQl9CTE9DS19FTkNSWVBULA0KKyAgU0RfRUNCX0JMT0NLU19FTkNSWVBULA0KKyAgU0RfUkFESU9fU0VTU0lPTl9PUEVOLA0KKyAgU0RfUkFESU9fU0VTU0lPTl9DTE9TRSwNCisgIFNEX1JBRElPX1JFUVVFU1QsDQorICBTRF9FVlRfR0VULA0KKyAgU0RfVEVNUF9HRVQsDQorICBTVkNfU09DX0xBU1QNCit9Ow0KKw0KKy8qKkBicmllZiBQb3NzaWJsZSB2YWx1ZXMgb2YgYSA6Om5yZl9tdXRleF90LiAqLw0KK2VudW0gTlJGX01VVEVYX1ZBTFVFUw0KK3sNCisgIE5SRl9NVVRFWF9GUkVFLA0KKyAgTlJGX01VVEVYX1RBS0VODQorfTsNCisNCisvKipAYnJpZWYgUG93ZXIgbW9kZXMuICovDQorZW51bSBOUkZfUE9XRVJfTU9ERVMNCit7DQorICBOUkZfUE9XRVJfTU9ERV9DT05TVExBVCwgIC8qKjwgQ29uc3RhbnQgbGF0ZW5jeSBtb2RlLiBTZWUgcG93ZXIgbWFuYWdlbWVudCBpbiB0aGUgcmVmZXJlbmNlIG1hbnVhbC4gKi8NCisgIE5SRl9QT1dFUl9NT0RFX0xPV1BXUiAgICAgLyoqPCBMb3cgcG93ZXIgbW9kZS4gU2VlIHBvd2VyIG1hbmFnZW1lbnQgaW4gdGhlIHJlZmVyZW5jZSBtYW51YWwuICovDQorfTsNCisNCisNCisvKipAYnJpZWYgUG93ZXIgZmFpbHVyZSB0aHJlc2hvbGRzICovDQorZW51bSBOUkZfUE9XRVJfVEhSRVNIT0xEUw0KK3sNCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjE3ID0gNFVMLCAvKio8IDEuNyBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjE4LCAgICAgICAvKio8IDEuOCBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjE5LCAgICAgICAvKio8IDEuOSBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjIwLCAgICAgICAvKio8IDIuMCBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjIxLCAgICAgICAvKio8IDIuMSBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjIyLCAgICAgICAvKio8IDIuMiBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjIzLCAgICAgICAvKio8IDIuMyBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjI0LCAgICAgICAvKio8IDIuNCBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjI1LCAgICAgICAvKio8IDIuNSBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjI2LCAgICAgICAvKio8IDIuNiBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjI3LCAgICAgICAvKio8IDIuNyBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCisgIE5SRl9QT1dFUl9USFJFU0hPTERfVjI4ICAgICAgICAvKio8IDIuOCBWb2x0cyBwb3dlciBmYWlsdXJlIHRocmVzaG9sZC4gKi8NCit9Ow0KKw0KKw0KKy8qKkBicmllZiBEQy9EQyBjb252ZXJ0ZXIgbW9kZXMuICovDQorZW51bSBOUkZfUE9XRVJfRENEQ19NT0RFUw0KK3sNCisgIE5SRl9QT1dFUl9EQ0RDX0RJU0FCTEUsICAgICAgICAgIC8qKjwgVGhlIERDREMgaXMgZGlzYWJsZWQuICovDQorICBOUkZfUE9XRVJfRENEQ19FTkFCTEUgICAgICAgICAgICAvKio8IFRoZSBEQ0RDIGlzIGVuYWJsZWQuICAqLw0KK307DQorDQorLyoqQGJyaWVmIFJhZGlvIG5vdGlmaWNhdGlvbiBkaXN0YW5jZXMuICovDQorZW51bSBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX0RJU1RBTkNFUw0KK3sNCisgIE5SRl9SQURJT19OT1RJRklDQVRJT05fRElTVEFOQ0VfTk9ORSA9IDAsIC8qKjwgVGhlIGV2ZW50IGRvZXMgbm90IGhhdmUgYSBub3RpZmljYXRpb24uICovDQorICBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX0RJU1RBTkNFXzgwMFVTLCAgICAvKio8IFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBhY3RpdmUgbm90aWZpY2F0aW9uIHRvIHN0YXJ0IG9mIHJhZGlvIGFjdGl2aXR5LiAqLw0KKyAgTlJGX1JBRElPX05PVElGSUNBVElPTl9ESVNUQU5DRV8xNzQwVVMsICAgLyoqPCBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgYWN0aXZlIG5vdGlmaWNhdGlvbiB0byBzdGFydCBvZiByYWRpbyBhY3Rpdml0eS4gKi8NCisgIE5SRl9SQURJT19OT1RJRklDQVRJT05fRElTVEFOQ0VfMjY4MFVTLCAgIC8qKjwgVGhlIGRpc3RhbmNlIGZyb20gdGhlIGFjdGl2ZSBub3RpZmljYXRpb24gdG8gc3RhcnQgb2YgcmFkaW8gYWN0aXZpdHkuICovDQorICBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX0RJU1RBTkNFXzM2MjBVUywgICAvKio8IFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBhY3RpdmUgbm90aWZpY2F0aW9uIHRvIHN0YXJ0IG9mIHJhZGlvIGFjdGl2aXR5LiAqLw0KKyAgTlJGX1JBRElPX05PVElGSUNBVElPTl9ESVNUQU5DRV80NTYwVVMsICAgLyoqPCBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgYWN0aXZlIG5vdGlmaWNhdGlvbiB0byBzdGFydCBvZiByYWRpbyBhY3Rpdml0eS4gKi8NCisgIE5SRl9SQURJT19OT1RJRklDQVRJT05fRElTVEFOQ0VfNTUwMFVTICAgIC8qKjwgVGhlIGRpc3RhbmNlIGZyb20gdGhlIGFjdGl2ZSBub3RpZmljYXRpb24gdG8gc3RhcnQgb2YgcmFkaW8gYWN0aXZpdHkuICovDQorfTsNCisNCisNCisvKipAYnJpZWYgUmFkaW8gbm90aWZpY2F0aW9uIHR5cGVzLiAqLw0KK2VudW0gTlJGX1JBRElPX05PVElGSUNBVElPTl9UWVBFUw0KK3sNCisgIE5SRl9SQURJT19OT1RJRklDQVRJT05fVFlQRV9OT05FID0gMCwgICAgICAgIC8qKjwgVGhlIGV2ZW50IGRvZXMgbm90IGhhdmUgYSByYWRpbyBub3RpZmljYXRpb24gc2lnbmFsLiAqLw0KKyAgTlJGX1JBRElPX05PVElGSUNBVElPTl9UWVBFX0lOVF9PTl9BQ1RJVkUsICAgLyoqPCBVc2luZyBpbnRlcnJ1cHQgZm9yIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSByYWRpbyB3aWxsIGJlIGVuYWJsZWQuICovDQorICBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX1RZUEVfSU5UX09OX0lOQUNUSVZFLCAvKio8IFVzaW5nIGludGVycnVwdCBmb3Igbm90aWZpY2F0aW9uIHdoZW4gdGhlIHJhZGlvIGhhcyBiZWVuIGRpc2FibGVkLiAqLw0KKyAgTlJGX1JBRElPX05PVElGSUNBVElPTl9UWVBFX0lOVF9PTl9CT1RILCAgICAgLyoqPCBVc2luZyBpbnRlcnJ1cHQgZm9yIG5vdGlmaWNhdGlvbiBib3RoIHdoZW4gdGhlIHJhZGlvIHdpbGwgYmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQuICovDQorfTsNCisNCisvKipAYnJpZWYgVGhlIFJhZGlvIHNpZ25hbCBjYWxsYmFjayB0eXBlcy4gKi8NCitlbnVtIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRQ0KK3sNCisgIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRV9TVEFSVCwgICAgICAgICAgICAgLyoqPCBUaGlzIHNpZ25hbCBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIHRoZSByYWRpbyB0aW1lc2xvdC4gKi8NCisgIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRV9USU1FUjAsICAgICAgICAgICAgLyoqPCBUaGlzIHNpZ25hbCBpbmRpY2F0ZXMgdGhlIE5SRl9USU1FUjAgaW50ZXJydXB0LiAqLw0KKyAgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFX1JBRElPLCAgICAgICAgICAgICAvKio8IFRoaXMgc2lnbmFsIGluZGljYXRlcyB0aGUgTlJGX1JBRElPIGludGVycnVwdC4gKi8NCisgIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRV9FWFRFTkRfRkFJTEVELCAgICAgLyoqPCBUaGlzIHNpZ25hbCBpbmRpY2F0ZXMgZXh0ZW5kIGFjdGlvbiBmYWlsZWQuICovDQorICBOUkZfUkFESU9fQ0FMTEJBQ0tfU0lHTkFMX1RZUEVfRVhURU5EX1NVQ0NFRURFRCAgIC8qKjwgVGhpcyBzaWduYWwgaW5kaWNhdGVzIGV4dGVuZCBhY3Rpb24gc3VjY2VlZGVkLiAqLw0KK307DQorDQorLyoqQGJyaWVmIFRoZSBhY3Rpb25zIHJlcXVlc3RlZCBieSB0aGUgc2lnbmFsIGNhbGxiYWNrLg0KKyAqDQorICogIFRoaXMgY29kZSBnaXZlcyB0aGUgU09DIGluc3RydWN0aW9ucyBhYm91dCB3aGF0IGFjdGlvbiB0byB0YWtlIHdoZW4gdGhlIHNpZ25hbCBjYWxsYmFjayBoYXMNCisgKiAgcmV0dXJuZWQuDQorICovDQorZW51bSBOUkZfUkFESU9fU0lHTkFMX0NBTExCQUNLX0FDVElPTg0KK3sNCisgIE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OX05PTkUsICAgICAgICAgICAgLyoqPCBSZXR1cm4gd2l0aG91dCBhY3Rpb24uICovDQorICBOUkZfUkFESU9fU0lHTkFMX0NBTExCQUNLX0FDVElPTl9FWFRFTkQsICAgICAgICAgIC8qKjwgUmVxdWVzdCBhbiBleHRlbnNpb24gb2YgdGhlIGN1cnJlbnQgdGltZXNsb3QgKG1heGltdW0gZXhlY3V0aW9uIHRpbWUgZm9yIHRoaXMgYWN0aW9uIGlzIHdoZW4gdGhlIGV4dGVuc2lvbiBzdWNjZWVkZWQpLiAqLw0KKyAgTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fRU5ELCAgICAgICAgICAgICAvKio8IEVuZCB0aGUgY3VycmVudCByYWRpbyB0aW1lc2xvdC4gKi8NCisgIE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OX1JFUVVFU1RfQU5EX0VORCAgLyoqPCBSZXF1ZXN0IGEgbmV3IHJhZGlvIHRpbWVzbG90IGFuZCBlbmQgdGhlIGN1cnJlbnQgdGltZXNsb3QuICovDQorfTsNCisNCisvKipAYnJpZWYgUmFkaW8gdGltZXNsb3QgaGlnaCBmcmVxdWVuY3kgY2xvY2sgc291cmNlIGNvbmZpZ3VyYXRpb24uICovDQorZW51bSBOUkZfUkFESU9fSEZDTEtfQ0ZHDQorew0KKyAgTlJGX1JBRElPX0hGQ0xLX0NGR19YVEFMX0dVQVJBTlRFRUQsIC8qKjwgVGhlIFNvZnREZXZpY2Ugd2lsbCBndWFyYW50ZWUgdGhhdCB0aGUgaGlnaCBmcmVxdWVuY3kgY2xvY2sgc291cmNlIGlzIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbCBjcnlzdGFsIGZvciB0aGUgd2hvbGUgZHVyYXRpb24gb2YgdGhlIHRpbWVzbG90LiBUaGlzIHNob3VsZCBiZSB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkIG9wdGlvbiBmb3IgZXZlbnRzIHRoYXQgdXNlIHRoZSByYWRpbyBvciByZXF1aXJlIGhpZ2ggdGltaW5nIGFjY3VyYWN5Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBUaGUgU29mdERldmljZSB3aWxsIGF1dG9tYXRpY2FsbHkgdHVybiBvbiBhbmQgb2ZmIHRoZSBleHRlcm5hbCBjcnlzdGFsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHRpbWVzbG90LCByZXNwZWN0aXZlbHkuIFRoZSBjcnlzdGFsIG1heSBhbHNvDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudGlvbmFsbHkgYmUgbGVmdCBydW5uaW5nIGFmdGVyIHRoZSB0aW1lc2xvdCwgaW4gY2FzZXMgd2hlcmUgaXQgaXMgbmVlZGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBTb2Z0RGV2aWNlIHNob3J0bHkgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgdGltZXNsb3QuICovDQorICBOUkZfUkFESU9fSEZDTEtfQ0ZHX05PX0dVQVJBTlRFRSAgICAvKio8IFRoaXMgY29uZmlndXJhdGlvbiBhbGxvd3MgZm9yIGVhcmxpZXIgYW5kIHRpZ2h0ZXIgc2NoZWR1bGluZyBvZiB0aW1lc2xvdHMuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBSQyBvc2NpbGxhdG9yIG1heSBiZSB0aGUgY2xvY2sgc291cmNlIGluIHBhcnQgb3IgZm9yIHRoZSB3aG9sZSBkdXJhdGlvbiBvZiB0aGUgdGltZXNsb3QuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBSQyBvc2NpbGxhdG9yJ3MgYWNjdXJhY3kgbXVzdCB0aGVyZWZvcmUgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBJZiB0aGUgYXBwbGljYXRpb24gd2lsbCB1c2UgdGhlIHJhZGlvIHBlcmlwaGVyYWwgaW4gdGltZXNsb3RzIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBjcnlzdGFsIGlzIHJ1bm5pbmcgYW5kIHN0YWJsZSBiZWZvcmUgc3RhcnRpbmcgdGhlIHJhZGlvLiAqLw0KK307DQorDQorLyoqQGJyaWVmIFJhZGlvIHRpbWVzbG90IHByaW9yaXRpZXMuICovDQorZW51bSBOUkZfUkFESU9fUFJJT1JJVFkNCit7DQorICBOUkZfUkFESU9fUFJJT1JJVFlfSElHSCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSGlnaCAoZXF1YWwgcHJpb3JpdHkgYXMgdGhlIG5vcm1hbCBjb25uZWN0aW9uIHByaW9yaXR5IG9mIHRoZSBTb2Z0RGV2aWNlIHN0YWNrKHMpKS4gKi8NCisgIE5SRl9SQURJT19QUklPUklUWV9OT1JNQUwsICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBOb3JtYWwgKGVxdWFsIHByaW9yaXR5IGFzIHRoZSBwcmlvcml0eSBvZiBzZWNvbmRhcnkgYWN0aXZpdGllcyBvZiB0aGUgU29mdERldmljZSBzdGFjayhzKSkuICovDQorfTsNCisNCisvKipAYnJpZWYgUmFkaW8gdGltZXNsb3QgcmVxdWVzdCB0eXBlLiAqLw0KK2VudW0gTlJGX1JBRElPX1JFUVVFU1RfVFlQRQ0KK3sNCisgIE5SRl9SQURJT19SRVFfVFlQRV9FQVJMSUVTVCwgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZXF1ZXN0IHJhZGlvIHRpbWVzbG90IGFzIGVhcmx5IGFzIHBvc3NpYmxlLiBUaGlzIHNob3VsZCBhbHdheXMgYmUgdXNlZCBmb3IgdGhlIGZpcnN0IHJlcXVlc3QgaW4gYSBzZXNzaW9uLiAqLw0KKyAgTlJGX1JBRElPX1JFUV9UWVBFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5vcm1hbCByYWRpbyB0aW1lc2xvdCByZXF1ZXN0LiAqLw0KK307DQorDQorLyoqQGJyaWVmIFNvQyBFdmVudHMuICovDQorZW51bSBOUkZfU09DX0VWVFMNCit7DQorICBOUkZfRVZUX0hGQ0xLU1RBUlRFRCwgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFdmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIEhGQ0xLIGhhcyBzdGFydGVkLiAqLw0KKyAgTlJGX0VWVF9QT1dFUl9GQUlMVVJFX1dBUk5JTkcsICAgICAgICAgICAgICAgIC8qKjwgRXZlbnQgaW5kaWNhdGluZyB0aGF0IGEgcG93ZXIgZmFpbHVyZSB3YXJuaW5nIGhhcyBvY2N1cnJlZC4gKi8NCisgIE5SRl9FVlRfRkxBU0hfT1BFUkFUSU9OX1NVQ0NFU1MsICAgICAgICAgICAgICAvKio8IEV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgb25nb2luZyBmbGFzaCBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuICovDQorICBOUkZfRVZUX0ZMQVNIX09QRVJBVElPTl9FUlJPUiwgICAgICAgICAgICAgICAgLyoqPCBFdmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG9uZ29pbmcgZmxhc2ggb3BlcmF0aW9uIGhhcyB0aW1lZCBvdXQgd2l0aCBhbiBlcnJvci4gKi8NCisgIE5SRl9FVlRfUkFESU9fQkxPQ0tFRCwgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEV2ZW50IGluZGljYXRpbmcgdGhhdCBhIHJhZGlvIHRpbWVzbG90IHdhcyBibG9ja2VkLiAqLw0KKyAgTlJGX0VWVF9SQURJT19DQU5DRUxFRCwgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXZlbnQgaW5kaWNhdGluZyB0aGF0IGEgcmFkaW8gdGltZXNsb3Qgd2FzIGNhbmNlbGVkIGJ5IFNvZnREZXZpY2UuICovDQorICBOUkZfRVZUX1JBRElPX1NJR05BTF9DQUxMQkFDS19JTlZBTElEX1JFVFVSTiwgLyoqPCBFdmVudCBpbmRpY2F0aW5nIHRoYXQgYSByYWRpbyB0aW1lc2xvdCBzaWduYWwgY2FsbGJhY2sgaGFuZGxlciByZXR1cm4gd2FzIGludmFsaWQuICovDQorICBOUkZfRVZUX1JBRElPX1NFU1NJT05fSURMRSwgICAgICAgICAgICAgICAgICAgLyoqPCBFdmVudCBpbmRpY2F0aW5nIHRoYXQgYSByYWRpbyB0aW1lc2xvdCBzZXNzaW9uIGlzIGlkbGUuICovDQorICBOUkZfRVZUX1JBRElPX1NFU1NJT05fQ0xPU0VELCAgICAgICAgICAgICAgICAgLyoqPCBFdmVudCBpbmRpY2F0aW5nIHRoYXQgYSByYWRpbyB0aW1lc2xvdCBzZXNzaW9uIGlzIGNsb3NlZC4gKi8NCisgIE5SRl9FVlRfTlVNQkVSX09GX0VWVFMNCit9Ow0KKw0KKy8qKkB9ICovDQorDQorDQorLyoqQGFkZHRvZ3JvdXAgTlJGX1NPQ19TVFJVQ1RVUkVTIFN0cnVjdHVyZXMNCisgKiBAeyAqLw0KKw0KKy8qKkBicmllZiBSZXByZXNlbnRzIGEgbXV0ZXggZm9yIHVzZSB3aXRoIHRoZSBucmZfbXV0ZXggZnVuY3Rpb25zLg0KKyAqIEBub3RlIEFjY2Vzc2luZyB0aGUgdmFsdWUgZGlyZWN0bHkgaXMgbm90IHNhZmUsIHVzZSB0aGUgbXV0ZXggZnVuY3Rpb25zIQ0KKyAqLw0KK3R5cGVkZWYgdm9sYXRpbGUgdWludDhfdCBucmZfbXV0ZXhfdDsNCisNCisvKipAYnJpZWYgUGFyYW1ldGVycyBmb3IgYSByZXF1ZXN0IGZvciBhIHRpbWVzbG90IGFzIGVhcmx5IGFzIHBvc3NpYmxlLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICAgICBoZmNsazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEhpZ2ggZnJlcXVlbmN5IGNsb2NrIHNvdXJjZSwgc2VlIEByZWYgTlJGX1JBRElPX0hGQ0xLX0NGRy4gKi8NCisgIHVpbnQ4X3QgICAgICAgcHJpb3JpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgcmFkaW8gdGltZXNsb3QgcHJpb3JpdHksIHNlZSBAcmVmIE5SRl9SQURJT19QUklPUklUWS4gKi8NCisgIHVpbnQzMl90ICAgICAgbGVuZ3RoX3VzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgcmFkaW8gdGltZXNsb3QgbGVuZ3RoIChpbiB0aGUgcmFuZ2UgMTAwIHRvIDEwMCwwMDBdIG1pY3Jvc2Vjb25kcykuICovDQorICB1aW50MzJfdCAgICAgIHRpbWVvdXRfdXM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTG9uZ2VzdCBhY2NlcHRhYmxlIGRlbGF5IHVudGlsIHRoZSBzdGFydCBvZiB0aGUgcmVxdWVzdGVkIHRpbWVzbG90ICh1cCB0byBAcmVmIE5SRl9SQURJT19FQVJMSUVTVF9USU1FT1VUX01BWF9VUyBtaWNyb3NlY29uZHMpLiAqLw0KK30gbnJmX3JhZGlvX3JlcXVlc3RfZWFybGllc3RfdDsNCisNCisvKipAYnJpZWYgUGFyYW1ldGVycyBmb3IgYSBub3JtYWwgcmFkaW8gdGltZXNsb3QgcmVxdWVzdC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgaGZjbGs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBIaWdoIGZyZXF1ZW5jeSBjbG9jayBzb3VyY2UsIHNlZSBAcmVmIE5SRl9SQURJT19IRkNMS19DRkcuICovDQorICB1aW50OF90ICAgICAgIHByaW9yaXR5OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGhlIHJhZGlvIHRpbWVzbG90IHByaW9yaXR5LCBzZWUgQHJlZiBOUkZfUkFESU9fUFJJT1JJVFkuICovDQorICB1aW50MzJfdCAgICAgIGRpc3RhbmNlX3VzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGlzdGFuY2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHByZXZpb3VzIHJhZGlvIHRpbWVzbG90ICh1cCB0byBAcmVmIE5SRl9SQURJT19ESVNUQU5DRV9NQVhfVVMgbWljcm9zZWNvbmRzKS4gKi8NCisgIHVpbnQzMl90ICAgICAgbGVuZ3RoX3VzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgcmFkaW8gdGltZXNsb3QgbGVuZ3RoIChpbiB0aGUgcmFuZ2UgWzEwMC4uMTAwLDAwMF0gbWljcm9zZWNvbmRzKS4gKi8NCit9IG5yZl9yYWRpb19yZXF1ZXN0X25vcm1hbF90Ow0KKw0KKy8qKkBicmllZiBSYWRpbyB0aW1lc2xvdCByZXF1ZXN0IHBhcmFtZXRlcnMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfdHlwZTsgICAgIC8qKjwgVHlwZSBvZiByZXF1ZXN0LCBzZWUgQHJlZiBOUkZfUkFESU9fUkVRVUVTVF9UWVBFLiAqLw0KKyAgdW5pb24NCisgIHsNCisgICAgbnJmX3JhZGlvX3JlcXVlc3RfZWFybGllc3RfdCAgZWFybGllc3Q7ICAgICAgICAgLyoqPCBQYXJhbWV0ZXJzIGZvciByZXF1ZXN0aW5nIGEgcmFkaW8gdGltZXNsb3QgYXMgZWFybHkgYXMgcG9zc2libGUuICovDQorICAgIG5yZl9yYWRpb19yZXF1ZXN0X25vcm1hbF90ICAgIG5vcm1hbDsgICAgICAgICAgIC8qKjwgUGFyYW1ldGVycyBmb3IgcmVxdWVzdGluZyBhIG5vcm1hbCByYWRpbyB0aW1lc2xvdC4gKi8NCisgIH0gcGFyYW1zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQYXJhbWV0ZXIgdW5pb24uICovDQorfSBucmZfcmFkaW9fcmVxdWVzdF90Ow0KKw0KKy8qKkBicmllZiBSZXR1cm4gcGFyYW1ldGVycyBvZiB0aGUgcmFkaW8gdGltZXNsb3Qgc2lnbmFsIGNhbGxiYWNrLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICAgICAgICAgICAgIGNhbGxiYWNrX2FjdGlvbjsgICAgICAgICAgICAvKio8IFRoZSBhY3Rpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB3aGVuIHJldHVybmluZyBmcm9tIHRoZSBzaWduYWwgY2FsbGJhY2ssIHNlZSBAcmVmIE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OLiAqLw0KKyAgdW5pb24NCisgIHsNCisgICAgc3RydWN0DQorICAgIHsNCisgICAgICBucmZfcmFkaW9fcmVxdWVzdF90ICogcF9uZXh0OyAgICAgICAgICAgICAgICAgLyoqPCBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGZvciB0aGUgbmV4dCByYWRpbyB0aW1lc2xvdC4gKi8NCisgICAgfSByZXF1ZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHJldHVybl9jb2RlIEByZWYgTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fUkVRVUVTVF9BTkRfRU5ELiAqLw0KKyAgICBzdHJ1Y3QNCisgICAgew0KKyAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICBsZW5ndGhfdXM7ICAgICAgICAgICAgICAvKio8IFJlcXVlc3RlZCBleHRlbnNpb24gb2YgdGhlIHJhZGlvIHRpbWVzbG90IGR1cmF0aW9uIChtaWNyb3NlY29uZHMpIChmb3IgbWluaW11bSB0aW1lIHNlZSBAcmVmIE5SRl9SQURJT19NSU5JTVVNX1RJTUVTTE9UX0xFTkdUSF9FWFRFTlNJT05fVElNRV9VUykuICovDQorICAgIH0gZXh0ZW5kOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciByZXR1cm5fY29kZSBAcmVmIE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OX0VYVEVORC4gKi8NCisgIH0gcGFyYW1zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQYXJhbWV0ZXIgdW5pb24uICovDQorfSBucmZfcmFkaW9fc2lnbmFsX2NhbGxiYWNrX3JldHVybl9wYXJhbV90Ow0KKw0KKy8qKkBicmllZiBUaGUgcmFkaW8gdGltZXNsb3Qgc2lnbmFsIGNhbGxiYWNrIHR5cGUuDQorICoNCisgKiBAbm90ZSBJbiBjYXNlIG9mIGludmFsaWQgcmV0dXJuIHBhcmFtZXRlcnMsIHRoZSByYWRpbyB0aW1lc2xvdCB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kDQorICogICAgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIHNpZ25hbCBjYWxsYmFjayBhbmQgdGhlDQorICogICAgICAgQHJlZiBOUkZfRVZUX1JBRElPX1NJR05BTF9DQUxMQkFDS19JTlZBTElEX1JFVFVSTiBldmVudCB3aWxsIGJlIHNlbnQuDQorICogQG5vdGUgVGhlIHJldHVybmVkIHN0cnVjdCBwb2ludGVyIG11c3QgcmVtYWluIHZhbGlkIGFmdGVyIHRoZSBzaWduYWwgY2FsbGJhY2sNCisgKiAgICAgICBmdW5jdGlvbiByZXR1cm5zLiBGb3IgaW5zdGFuY2UsIHRoaXMgbWVhbnMgdGhhdCBpdCBtdXN0IG5vdCBwb2ludCB0byBhIHN0YWNrIHZhcmlhYmxlLg0KKyAqDQorICogQHBhcmFtW2luXSBzaWduYWxfdHlwZSBUeXBlIG9mIHNpZ25hbCwgc2VlIEByZWYgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFLg0KKyAqDQorICogQHJldHVybiBQb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIGFjdGlvbiByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLg0KKyAqLw0KK3R5cGVkZWYgbnJmX3JhZGlvX3NpZ25hbF9jYWxsYmFja19yZXR1cm5fcGFyYW1fdCAqICgqbnJmX3JhZGlvX3NpZ25hbF9jYWxsYmFja190KSAodWludDhfdCBzaWduYWxfdHlwZSk7DQorDQorLyoqQGJyaWVmIEFFUyBFQ0IgcGFyYW1ldGVyIHR5cGVkZWZzICovDQordHlwZWRlZiB1aW50OF90IHNvY19lY2Jfa2V5X3RbU09DX0VDQl9LRVlfTEVOR1RIXTsgICAgICAgICAgICAgICAgLyoqPCBFbmNyeXB0aW9uIGtleSB0eXBlLiAqLw0KK3R5cGVkZWYgdWludDhfdCBzb2NfZWNiX2NsZWFydGV4dF90W1NPQ19FQ0JfQ0xFQVJURVhUX0xFTkdUSF07ICAgIC8qKjwgQ2xlYXJ0ZXh0IGRhdGEgdHlwZS4gKi8NCit0eXBlZGVmIHVpbnQ4X3Qgc29jX2VjYl9jaXBoZXJ0ZXh0X3RbU09DX0VDQl9DSVBIRVJURVhUX0xFTkdUSF07ICAvKio8IENpcGhlcnRleHQgZGF0YSB0eXBlLiAqLw0KKw0KKy8qKkBicmllZiBBRVMgRUNCIGRhdGEgc3RydWN0dXJlICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBzb2NfZWNiX2tleV90ICAgICAgICBrZXk7ICAgICAgICAgICAgLyoqPCBFbmNyeXB0aW9uIGtleS4gKi8NCisgIHNvY19lY2JfY2xlYXJ0ZXh0X3QgIGNsZWFydGV4dDsgICAgICAvKio8IENsZWFydGV4dCBkYXRhLiAqLw0KKyAgc29jX2VjYl9jaXBoZXJ0ZXh0X3QgY2lwaGVydGV4dDsgICAgIC8qKjwgQ2lwaGVydGV4dCBkYXRhLiAqLw0KK30gbnJmX2VjYl9oYWxfZGF0YV90Ow0KKw0KKy8qKkBicmllZiBBRVMgRUNCIGJsb2NrLiBVc2VkIHRvIHByb3ZpZGUgbXVsdGlwbGUgYmxvY2tzIGluIGEgc2luZ2xlIGNhbGwNCisgICAgICAgICAgdG8gQHJlZiBzZF9lY2JfYmxvY2tzX2VuY3J5cHQuKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHNvY19lY2Jfa2V5X3QgY29uc3QgKiAgICAgICBwX2tleTsgICAgICAgICAgIC8qKjwgUG9pbnRlciB0byB0aGUgRW5jcnlwdGlvbiBrZXkuICovDQorICBzb2NfZWNiX2NsZWFydGV4dF90IGNvbnN0ICogcF9jbGVhcnRleHQ7ICAgICAvKio8IFBvaW50ZXIgdG8gdGhlIENsZWFydGV4dCBkYXRhLiAqLw0KKyAgc29jX2VjYl9jaXBoZXJ0ZXh0X3QgKiAgICAgIHBfY2lwaGVydGV4dDsgICAgLyoqPCBQb2ludGVyIHRvIHRoZSBDaXBoZXJ0ZXh0IGRhdGEuICovDQorfSBucmZfZWNiX2hhbF9kYXRhX2Jsb2NrX3Q7DQorDQorLyoqQH0gKi8NCisNCisvKipAYWRkdG9ncm91cCBOUkZfU09DX0ZVTkNUSU9OUyBGdW5jdGlvbnMNCisgKiBAeyAqLw0KKw0KKy8qKkBicmllZiBJbml0aWFsaXplIGEgbXV0ZXguDQorICoNCisgKiBAcGFyYW1baW5dIHBfbXV0ZXggUG9pbnRlciB0byB0aGUgbXV0ZXggdG8gaW5pdGlhbGl6ZS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9NVVRFWF9ORVcsIHVpbnQzMl90LCBzZF9tdXRleF9uZXcobnJmX211dGV4X3QgKiBwX211dGV4KSk7DQorDQorLyoqQGJyaWVmIEF0dGVtcHQgdG8gYWNxdWlyZSBhIG11dGV4Lg0KKyAqDQorICogQHBhcmFtW2luXSBwX211dGV4IFBvaW50ZXIgdG8gdGhlIG11dGV4IHRvIGFjcXVpcmUuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIG11dGV4IHdhcyBzdWNjZXNzZnVsbHkgYWNxdWlyZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9TT0NfTVVURVhfQUxSRUFEWV9UQUtFTiBUaGUgbXV0ZXggY291bGQgbm90IGJlIGFjcXVpcmVkLg0KKyAqLw0KK1NWQ0FMTChTRF9NVVRFWF9BQ1FVSVJFLCB1aW50MzJfdCwgc2RfbXV0ZXhfYWNxdWlyZShucmZfbXV0ZXhfdCAqIHBfbXV0ZXgpKTsNCisNCisvKipAYnJpZWYgUmVsZWFzZSBhIG11dGV4Lg0KKyAqDQorICogQHBhcmFtW2luXSBwX211dGV4IFBvaW50ZXIgdG8gdGhlIG11dGV4IHRvIHJlbGVhc2UuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfTVVURVhfUkVMRUFTRSwgdWludDMyX3QsIHNkX211dGV4X3JlbGVhc2UobnJmX211dGV4X3QgKiBwX211dGV4KSk7DQorDQorLyoqQGJyaWVmIFF1ZXJ5IHRoZSBjYXBhY2l0eSBvZiB0aGUgYXBwbGljYXRpb24gcmFuZG9tIHBvb2wuDQorICoNCisgKiBAcGFyYW1bb3V0XSBwX3Bvb2xfY2FwYWNpdHkgVGhlIGNhcGFjaXR5IG9mIHRoZSBwb29sLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1JBTkRfQVBQTElDQVRJT05fUE9PTF9DQVBBQ0lUWV9HRVQsIHVpbnQzMl90LCBzZF9yYW5kX2FwcGxpY2F0aW9uX3Bvb2xfY2FwYWNpdHlfZ2V0KHVpbnQ4X3QgKiBwX3Bvb2xfY2FwYWNpdHkpKTsNCisNCisvKipAYnJpZWYgR2V0IG51bWJlciBvZiByYW5kb20gYnl0ZXMgYXZhaWxhYmxlIHRvIHRoZSBhcHBsaWNhdGlvbi4NCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfYnl0ZXNfYXZhaWxhYmxlIFRoZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgcG9vbC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9SQU5EX0FQUExJQ0FUSU9OX0JZVEVTX0FWQUlMQUJMRV9HRVQsIHVpbnQzMl90LCBzZF9yYW5kX2FwcGxpY2F0aW9uX2J5dGVzX2F2YWlsYWJsZV9nZXQodWludDhfdCAqIHBfYnl0ZXNfYXZhaWxhYmxlKSk7DQorDQorLyoqQGJyaWVmIEdldCByYW5kb20gYnl0ZXMgZnJvbSB0aGUgYXBwbGljYXRpb24gcG9vbC4NCisgKg0KKyAqIEBwYXJhbVtvdXRdICBwX2J1ZmYgIFBvaW50ZXIgdG8gdW5pdDhfdCBidWZmZXIgZm9yIHN0b3JpbmcgdGhlIGJ5dGVzLg0KKyAqIEBwYXJhbVtpbl0gICBsZW5ndGggIE51bWJlciBvZiBieXRlcyB0byB0YWtlIGZyb20gcG9vbCBhbmQgcGxhY2UgaW4gcF9idWZmLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFRoZSByZXF1ZXN0ZWQgYnl0ZXMgd2VyZSB3cml0dGVuIHRvIHBfYnVmZi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19SQU5EX05PVF9FTk9VR0hfVkFMVUVTIE5vIGJ5dGVzIHdlcmUgd3JpdHRlbiB0byB0aGUgYnVmZmVyLCBiZWNhdXNlIHRoZXJlIHdlcmUgbm90IGVub3VnaCBieXRlcyBhdmFpbGFibGUuDQorKi8NCitTVkNBTEwoU0RfUkFORF9BUFBMSUNBVElPTl9WRUNUT1JfR0VULCB1aW50MzJfdCwgc2RfcmFuZF9hcHBsaWNhdGlvbl92ZWN0b3JfZ2V0KHVpbnQ4X3QgKiBwX2J1ZmYsIHVpbnQ4X3QgbGVuZ3RoKSk7DQorDQorLyoqQGJyaWVmIEdldHMgdGhlIHJlc2V0IHJlYXNvbiByZWdpc3Rlci4NCisgKg0KKyAqIEBwYXJhbVtvdXRdICBwX3Jlc2V0X3JlYXNvbiAgQ29udGVudHMgb2YgdGhlIE5SRl9QT1dFUi0+UkVTRVRSRUFTIHJlZ2lzdGVyLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BPV0VSX1JFU0VUX1JFQVNPTl9HRVQsIHVpbnQzMl90LCBzZF9wb3dlcl9yZXNldF9yZWFzb25fZ2V0KHVpbnQzMl90ICogcF9yZXNldF9yZWFzb24pKTsNCisNCisvKipAYnJpZWYgQ2xlYXJzIHRoZSBiaXRzIG9mIHRoZSByZXNldCByZWFzb24gcmVnaXN0ZXIuDQorICoNCisgKiBAcGFyYW1baW5dIHJlc2V0X3JlYXNvbl9jbHJfbXNrIENvbnRhaW5zIHRoZSBiaXRzIHRvIGNsZWFyIGZyb20gdGhlIHJlc2V0IHJlYXNvbiByZWdpc3Rlci4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9QT1dFUl9SRVNFVF9SRUFTT05fQ0xSLCB1aW50MzJfdCwgc2RfcG93ZXJfcmVzZXRfcmVhc29uX2Nscih1aW50MzJfdCByZXNldF9yZWFzb25fY2xyX21zaykpOw0KKw0KKy8qKkBicmllZiBTZXRzIHRoZSBwb3dlciBtb2RlIHdoZW4gaW4gQ1BVIHNsZWVwLg0KKyAqDQorICogQHBhcmFtW2luXSBwb3dlcl9tb2RlIFRoZSBwb3dlciBtb2RlIHRvIHVzZSB3aGVuIGluIENQVSBzbGVlcCwgc2VlIEByZWYgTlJGX1BPV0VSX01PREVTLiBAc2Egc2RfYXBwX2V2dF93YWl0DQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIHBvd2VyIG1vZGUgd2FzIHNldC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19QT1dFUl9NT0RFX1VOS05PV04gVGhlIHBvd2VyIG1vZGUgd2FzIHVua25vd24uDQorICovDQorU1ZDQUxMKFNEX1BPV0VSX01PREVfU0VULCB1aW50MzJfdCwgc2RfcG93ZXJfbW9kZV9zZXQodWludDhfdCBwb3dlcl9tb2RlKSk7DQorDQorLyoqQGJyaWVmIFB1dHMgdGhlIGNoaXAgaW4gU3lzdGVtIE9GRiBtb2RlLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9TT0NfUE9XRVJfT0ZGX1NIT1VMRF9OT1RfUkVUVVJODQorICovDQorU1ZDQUxMKFNEX1BPV0VSX1NZU1RFTV9PRkYsIHVpbnQzMl90LCBzZF9wb3dlcl9zeXN0ZW1fb2ZmKHZvaWQpKTsNCisNCisvKipAYnJpZWYgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcG93ZXItZmFpbCBjb21wYXJhdG9yLg0KKyAqDQorICogRW5hYmxpbmcgdGhpcyB3aWxsIGdpdmUgYSBTb2Z0RGV2aWNlIGV2ZW50IChOUkZfRVZUX1BPV0VSX0ZBSUxVUkVfV0FSTklORykgd2hlbiB0aGUgcG93ZXIgZmFpbHVyZSB3YXJuaW5nIG9jY3Vycy4NCisgKiBUaGUgZXZlbnQgY2FuIGJlIHJldHJpZXZlZCB3aXRoIHNkX2V2dF9nZXQoKTsNCisgKg0KKyAqIEBwYXJhbVtpbl0gcG9mX2VuYWJsZSAgICBUcnVlIGlmIHRoZSBwb3dlci1mYWlsIGNvbXBhcmF0b3Igc2hvdWxkIGJlIGVuYWJsZWQsIGZhbHNlIGlmIGl0IHNob3VsZCBiZSBkaXNhYmxlZC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9QT1dFUl9QT0ZfRU5BQkxFLCB1aW50MzJfdCwgc2RfcG93ZXJfcG9mX2VuYWJsZSh1aW50OF90IHBvZl9lbmFibGUpKTsNCisNCisvKipAYnJpZWYgU2V0cyB0aGUgcG93ZXItZmFpbCB0aHJlc2hvbGQgdmFsdWUuDQorICoNCisgKiBAcGFyYW1baW5dIHRocmVzaG9sZCBUaGUgcG93ZXItZmFpbCB0aHJlc2hvbGQgdmFsdWUgdG8gdXNlLCBzZWUgQHJlZiBOUkZfUE9XRVJfVEhSRVNIT0xEUy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgcG93ZXIgZmFpbHVyZSB0aHJlc2hvbGQgd2FzIHNldC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19QT1dFUl9QT0ZfVEhSRVNIT0xEX1VOS05PV04gVGhlIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkIGlzIHVua25vd24uDQorICovDQorU1ZDQUxMKFNEX1BPV0VSX1BPRl9USFJFU0hPTERfU0VULCB1aW50MzJfdCwgc2RfcG93ZXJfcG9mX3RocmVzaG9sZF9zZXQodWludDhfdCB0aHJlc2hvbGQpKTsNCisNCisvKipAYnJpZWYgV3JpdGVzIHRoZSBOUkZfUE9XRVItPlJBTVtpbmRleF0uUE9XRVJTRVQgcmVnaXN0ZXIuDQorICoNCisgKiBAcGFyYW1baW5dIGluZGV4IENvbnRhaW5zIHRoZSBpbmRleCBpbiB0aGUgTlJGX1BPV0VSLT5SQU1baW5kZXhdLlBPV0VSU0VUIHJlZ2lzdGVyIHRvIHdyaXRlIHRvLg0KKyAqIEBwYXJhbVtpbl0gcmFtX3Bvd2Vyc2V0IENvbnRhaW5zIHRoZSB3b3JkIHRvIHdyaXRlIHRvIHRoZSBOUkZfUE9XRVItPlJBTVtpbmRleF0uUE9XRVJTRVQgcmVnaXN0ZXIuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUE9XRVJfUkFNX1BPV0VSX1NFVCwgdWludDMyX3QsIHNkX3Bvd2VyX3JhbV9wb3dlcl9zZXQodWludDhfdCBpbmRleCwgdWludDMyX3QgcmFtX3Bvd2Vyc2V0KSk7DQorDQorLyoqQGJyaWVmIFdyaXRlcyB0aGUgTlJGX1BPV0VSLT5SQU1baW5kZXhdLlBPV0VSQ0xSIHJlZ2lzdGVyLg0KKyAqDQorICogQHBhcmFtW2luXSBpbmRleCBDb250YWlucyB0aGUgaW5kZXggaW4gdGhlIE5SRl9QT1dFUi0+UkFNW2luZGV4XS5QT1dFUkNMUiByZWdpc3RlciB0byB3cml0ZSB0by4NCisgKiBAcGFyYW1baW5dIHJhbV9wb3dlcmNsciBDb250YWlucyB0aGUgd29yZCB0byB3cml0ZSB0byB0aGUgTlJGX1BPV0VSLT5SQU1baW5kZXhdLlBPV0VSQ0xSIHJlZ2lzdGVyLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BPV0VSX1JBTV9QT1dFUl9DTFIsIHVpbnQzMl90LCBzZF9wb3dlcl9yYW1fcG93ZXJfY2xyKHVpbnQ4X3QgaW5kZXgsIHVpbnQzMl90IHJhbV9wb3dlcmNscikpOw0KKw0KKy8qKkBicmllZiBHZXQgY29udGVudHMgb2YgTlJGX1BPV0VSLT5SQU1baW5kZXhdLlBPV0VSIHJlZ2lzdGVyLCBpbmRpY2F0ZXMgcG93ZXIgc3RhdHVzIG9mIFJBTVtpbmRleF0gYmxvY2tzLg0KKyAqDQorICogQHBhcmFtW2luXSBpbmRleCBDb250YWlucyB0aGUgaW5kZXggaW4gdGhlIE5SRl9QT1dFUi0+UkFNW2luZGV4XS5QT1dFUiByZWdpc3RlciB0byByZWFkIGZyb20uDQorICogQHBhcmFtW291dF0gcF9yYW1fcG93ZXIgQ29udGVudCBvZiBOUkZfUE9XRVItPlJBTVtpbmRleF0uUE9XRVIgcmVnaXN0ZXIuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUE9XRVJfUkFNX1BPV0VSX0dFVCwgdWludDMyX3QsIHNkX3Bvd2VyX3JhbV9wb3dlcl9nZXQodWludDhfdCBpbmRleCwgdWludDMyX3QgKiBwX3JhbV9wb3dlcikpOw0KKw0KKy8qKkBicmllZiBTZXQgYml0cyBpbiB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJldGVudGlvbiByZWdpc3RlcnMgKE5SRl9QT1dFUi0+R1BSRUdSRVQqKS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZ3ByZWdyZXRfaWQgMCBmb3IgR1BSRUdSRVQsIDEgZm9yIEdQUkVHUkVUMi4NCisgKiBAcGFyYW1baW5dIGdwcmVncmV0X21zayBCaXRzIHRvIGJlIHNldCBpbiB0aGUgR1BSRUdSRVQgcmVnaXN0ZXIuDQorICoNCisgKiBAbm90ZSBuUkY1MSBkb2VzIG9ubHkgaGF2ZSBvbmUgZ2VuZXJhbCBwdXJwb3NlIHJldGFpbmVkIHJlZ2lzdGVyLCBzbyBncHJlZ3JldF9pZCBtdXN0IGJlIDAgb24gblJGNTEuDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BPV0VSX0dQUkVHUkVUX1NFVCwgdWludDMyX3QsIHNkX3Bvd2VyX2dwcmVncmV0X3NldCh1aW50MzJfdCBncHJlZ3JldF9pZCwgdWludDMyX3QgZ3ByZWdyZXRfbXNrKSk7DQorDQorLyoqQGJyaWVmIENsZWFyIGJpdHMgaW4gdGhlIGdlbmVyYWwgcHVycG9zZSByZXRlbnRpb24gcmVnaXN0ZXJzIChOUkZfUE9XRVItPkdQUkVHUkVUKikuDQorICoNCisgKiBAcGFyYW1baW5dIGdwcmVncmV0X2lkIDAgZm9yIEdQUkVHUkVULCAxIGZvciBHUFJFR1JFVDIuDQorICogQHBhcmFtW2luXSBncHJlZ3JldF9tc2sgQml0cyB0byBiZSBjbGVhciBpbiB0aGUgR1BSRUdSRVQgcmVnaXN0ZXIuDQorICoNCisgKiBAbm90ZSBuUkY1MSBkb2VzIG9ubHkgaGF2ZSBvbmUgZ2VuZXJhbCBwdXJwb3NlIHJldGFpbmVkIHJlZ2lzdGVyLCBzbyBncHJlZ3JldF9pZCBtdXN0IGJlIDAgb24gblJGNTEuDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BPV0VSX0dQUkVHUkVUX0NMUiwgdWludDMyX3QsIHNkX3Bvd2VyX2dwcmVncmV0X2Nscih1aW50MzJfdCBncHJlZ3JldF9pZCwgdWludDMyX3QgZ3ByZWdyZXRfbXNrKSk7DQorDQorLyoqQGJyaWVmIEdldCBjb250ZW50cyBvZiB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJldGVudGlvbiByZWdpc3RlcnMgKE5SRl9QT1dFUi0+R1BSRUdSRVQqKS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZ3ByZWdyZXRfaWQgMCBmb3IgR1BSRUdSRVQsIDEgZm9yIEdQUkVHUkVUMi4NCisgKiBAcGFyYW1bb3V0XSBwX2dwcmVncmV0IENvbnRlbnRzIG9mIHRoZSBHUFJFR1JFVCByZWdpc3Rlci4NCisgKg0KKyAqIEBub3RlIG5SRjUxIGRvZXMgb25seSBoYXZlIG9uZSBnZW5lcmFsIHB1cnBvc2UgcmV0YWluZWQgcmVnaXN0ZXIsIHNvIGdwcmVncmV0X2lkIG11c3QgYmUgMCBvbiBuUkY1MS4NCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUE9XRVJfR1BSRUdSRVRfR0VULCB1aW50MzJfdCwgc2RfcG93ZXJfZ3ByZWdyZXRfZ2V0KHVpbnQzMl90IGdwcmVncmV0X2lkLCB1aW50MzJfdCAqcF9ncHJlZ3JldCkpOw0KKw0KKy8qKkBicmllZiBTZXRzIHRoZSBEQ0RDIG1vZGUuDQorICoNCisgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgRENEQyBwZXJpcGhlcmFsLg0KKyAqDQorICogQHBhcmFtW2luXSBkY2RjX21vZGUgVGhlIG1vZGUgb2YgdGhlIERDREMsIHNlZSBAcmVmIE5SRl9QT1dFUl9EQ0RDX01PREVTLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIFRoZSBEQ0RDIG1vZGUgaXMgaW52YWxpZC4NCisgKi8NCitTVkNBTEwoU0RfUE9XRVJfRENEQ19NT0RFX1NFVCwgdWludDMyX3QsIHNkX3Bvd2VyX2RjZGNfbW9kZV9zZXQodWludDhfdCBkY2RjX21vZGUpKTsNCisNCisvKipAYnJpZWYgUmVxdWVzdCB0aGUgaGlnaCBmcmVxdWVuY3kgY3J5c3RhbCBvc2NpbGxhdG9yLg0KKyAqDQorICogV2lsbCBzdGFydCB0aGUgaGlnaCBmcmVxdWVuY3kgY3J5c3RhbCBvc2NpbGxhdG9yLCB0aGUgc3RhcnR1cCB0aW1lIG9mIHRoZSBjcnlzdGFsIHZhcmllcw0KKyAqIGFuZCB0aGUgOjpzZF9jbG9ja19oZmNsa19pc19ydW5uaW5nIGZ1bmN0aW9uIGNhbiBiZSBwb2xsZWQgdG8gY2hlY2sgaWYgaXQgaGFzIHN0YXJ0ZWQuDQorICoNCisgKiBAc2VlIHNkX2Nsb2NrX2hmY2xrX2lzX3J1bm5pbmcNCisgKiBAc2VlIHNkX2Nsb2NrX2hmY2xrX3JlbGVhc2UNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9DTE9DS19IRkNMS19SRVFVRVNULCB1aW50MzJfdCwgc2RfY2xvY2tfaGZjbGtfcmVxdWVzdCh2b2lkKSk7DQorDQorLyoqQGJyaWVmIFJlbGVhc2VzIHRoZSBoaWdoIGZyZXF1ZW5jeSBjcnlzdGFsIG9zY2lsbGF0b3IuDQorICoNCisgKiBXaWxsIHN0b3AgdGhlIGhpZ2ggZnJlcXVlbmN5IGNyeXN0YWwgb3NjaWxsYXRvciwgdGhpcyBoYXBwZW5zIGltbWVkaWF0ZWx5Lg0KKyAqDQorICogQHNlZSBzZF9jbG9ja19oZmNsa19pc19ydW5uaW5nDQorICogQHNlZSBzZF9jbG9ja19oZmNsa19yZXF1ZXN0DQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfQ0xPQ0tfSEZDTEtfUkVMRUFTRSwgdWludDMyX3QsIHNkX2Nsb2NrX2hmY2xrX3JlbGVhc2Uodm9pZCkpOw0KKw0KKy8qKkBicmllZiBDaGVja3MgaWYgdGhlIGhpZ2ggZnJlcXVlbmN5IGNyeXN0YWwgb3NjaWxsYXRvciBpcyBydW5uaW5nLg0KKyAqDQorICogQHNlZSBzZF9jbG9ja19oZmNsa19yZXF1ZXN0DQorICogQHNlZSBzZF9jbG9ja19oZmNsa19yZWxlYXNlDQorICoNCisgKiBAcGFyYW1bb3V0XSBwX2lzX3J1bm5pbmcgMSBpZiB0aGUgZXh0ZXJuYWwgY3J5c3RhbCBvc2NpbGxhdG9yIGlzIHJ1bm5pbmcsIDAgaWYgbm90Lg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX0NMT0NLX0hGQ0xLX0lTX1JVTk5JTkcsIHVpbnQzMl90LCBzZF9jbG9ja19oZmNsa19pc19ydW5uaW5nKHVpbnQzMl90ICogcF9pc19ydW5uaW5nKSk7DQorDQorLyoqQGJyaWVmIFdhaXRzIGZvciBhbiBhcHBsaWNhdGlvbiBldmVudC4NCisgKg0KKyAqIEFuIGFwcGxpY2F0aW9uIGV2ZW50IGlzIGVpdGhlciBhbiBhcHBsaWNhdGlvbiBpbnRlcnJ1cHQgb3IgYSBwZW5kZWQgaW50ZXJydXB0IHdoZW4gdGhlDQorICogaW50ZXJydXB0IGlzIGRpc2FibGVkLiBXaGVuIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCBpdCB3aWxsIGJlIHRha2VuIGltbWVkaWF0ZWx5IHNpbmNlDQorICogdGhpcyBmdW5jdGlvbiB3aWxsIHdhaXQgaW4gdGhyZWFkIG1vZGUsIHRoZW4gdGhlIGV4ZWN1dGlvbiB3aWxsIHJldHVybiBpbiB0aGUgYXBwbGljYXRpb24ncw0KKyAqIG1haW4gdGhyZWFkLiBXaGVuIGFuIGludGVycnVwdCBpcyBkaXNhYmxlZCBhbmQgZ2V0cyBwZW5kZWQgaXQgd2lsbCByZXR1cm4gdG8gdGhlIGFwcGxpY2F0aW9uJ3MNCisgKiBtYWluIHRocmVhZC4gVGhlIGFwcGxpY2F0aW9uIG11c3QgZW5zdXJlIHRoYXQgdGhlIHBlbmRlZCBmbGFnIGlzIGNsZWFyZWQgdXNpbmcNCisgKiA6OnNkX252aWNfQ2xlYXJQZW5kaW5nSVJRIGluIG9yZGVyIHRvIHNsZWVwIHVzaW5nIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgZm9yDQorICogZGlzYWJsZWQgaW50ZXJydXB0cywgYXMgdGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgY2xlYXIgdGhlIHBlbmRpbmcgZmxhZyBhdXRvbWF0aWNhbGx5IGZvcg0KKyAqIGVuYWJsZWQgaW50ZXJydXB0cy4NCisgKg0KKyAqIEluIG9yZGVyIHRvIHdha2UgdXAgZnJvbSBkaXNhYmxlZCBpbnRlcnJ1cHRzLCB0aGUgU0VWT05QRU5EIGZsYWcgaGFzIHRvIGJlIHNldCBpbiB0aGUgQ29ydGV4LU0wDQorICogU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgKFNDUikuIEBzYSBDTVNJU19TQ0INCisgKg0KKyAqIEBub3RlIElmIGFuIGFwcGxpY2F0aW9uIGludGVycnVwdCBoYXMgaGFwcGVuZWQgc2luY2UgdGhlIGxhc3QgdGltZSBzZF9hcHBfZXZ0X3dhaXQgd2FzDQorICogICAgICAgY2FsbGVkIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgYW5kIG5vdCBnbyB0byBzbGVlcC4gVGhpcyBpcyB0byBhdm9pZCByYWNlDQorICogICAgICAgY29uZGl0aW9ucyB0aGF0IGNhbiBvY2N1ciB3aGVuIGEgZmxhZyBpcyB1cGRhdGVkIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgcHJvY2Vzc2VkDQorICogICAgICAgaW4gdGhlIG1haW4gbG9vcC4NCisgKg0KKyAqIEBwb3N0IEFuIGFwcGxpY2F0aW9uIGludGVycnVwdCBoYXMgaGFwcGVuZWQgb3IgYSBpbnRlcnJ1cHQgcGVuZGluZyBmbGFnIGlzIHNldC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9BUFBfRVZUX1dBSVQsIHVpbnQzMl90LCBzZF9hcHBfZXZ0X3dhaXQodm9pZCkpOw0KKw0KKy8qKkBicmllZiBHZXQgUFBJIGNoYW5uZWwgZW5hYmxlIHJlZ2lzdGVyIGNvbnRlbnRzLg0KKyAqDQorICogQHBhcmFtW291dF0gcF9jaGFubmVsX2VuYWJsZSBUaGUgY29udGVudHMgb2YgdGhlIFBQSSBDSEVOIHJlZ2lzdGVyLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BQSV9DSEFOTkVMX0VOQUJMRV9HRVQsIHVpbnQzMl90LCBzZF9wcGlfY2hhbm5lbF9lbmFibGVfZ2V0KHVpbnQzMl90ICogcF9jaGFubmVsX2VuYWJsZSkpOw0KKw0KKy8qKkBicmllZiBTZXQgUFBJIGNoYW5uZWwgZW5hYmxlIHJlZ2lzdGVyLg0KKyAqDQorICogQHBhcmFtW2luXSBjaGFubmVsX2VuYWJsZV9zZXRfbXNrIE1hc2sgY29udGFpbmluZyB0aGUgYml0cyB0byBzZXQgaW4gdGhlIFBQSSBDSEVOIHJlZ2lzdGVyLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BQSV9DSEFOTkVMX0VOQUJMRV9TRVQsIHVpbnQzMl90LCBzZF9wcGlfY2hhbm5lbF9lbmFibGVfc2V0KHVpbnQzMl90IGNoYW5uZWxfZW5hYmxlX3NldF9tc2spKTsNCisNCisvKipAYnJpZWYgQ2xlYXIgUFBJIGNoYW5uZWwgZW5hYmxlIHJlZ2lzdGVyLg0KKyAqDQorICogQHBhcmFtW2luXSBjaGFubmVsX2VuYWJsZV9jbHJfbXNrIE1hc2sgY29udGFpbmluZyB0aGUgYml0cyB0byBjbGVhciBpbiB0aGUgUFBJIENIRU4gcmVnaXN0ZXIuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUFBJX0NIQU5ORUxfRU5BQkxFX0NMUiwgdWludDMyX3QsIHNkX3BwaV9jaGFubmVsX2VuYWJsZV9jbHIodWludDMyX3QgY2hhbm5lbF9lbmFibGVfY2xyX21zaykpOw0KKw0KKy8qKkBicmllZiBBc3NpZ24gZW5kcG9pbnRzIHRvIGEgUFBJIGNoYW5uZWwuDQorICoNCisgKiBAcGFyYW1baW5dIGNoYW5uZWxfbnVtIE51bWJlciBvZiB0aGUgUFBJIGNoYW5uZWwgdG8gYXNzaWduLg0KKyAqIEBwYXJhbVtpbl0gZXZ0X2VuZHBvaW50IEV2ZW50IGVuZHBvaW50IG9mIHRoZSBQUEkgY2hhbm5lbC4NCisgKiBAcGFyYW1baW5dIHRhc2tfZW5kcG9pbnQgVGFzayBlbmRwb2ludCBvZiB0aGUgUFBJIGNoYW5uZWwuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19QUElfSU5WQUxJRF9DSEFOTkVMIFRoZSBjaGFubmVsIG51bWJlciBpcyBpbnZhbGlkLg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9QUElfQ0hBTk5FTF9BU1NJR04sIHVpbnQzMl90LCBzZF9wcGlfY2hhbm5lbF9hc3NpZ24odWludDhfdCBjaGFubmVsX251bSwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIGV2dF9lbmRwb2ludCwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIHRhc2tfZW5kcG9pbnQpKTsNCisNCisvKipAYnJpZWYgVGFzayB0byBlbmFibGUgYSBjaGFubmVsIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBncm91cF9udW0gTnVtYmVyIG9mIHRoZSBjaGFubmVsIGdyb3VwLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9TT0NfUFBJX0lOVkFMSURfR1JPVVAgVGhlIGdyb3VwIG51bWJlciBpcyBpbnZhbGlkDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BQSV9HUk9VUF9UQVNLX0VOQUJMRSwgdWludDMyX3QsIHNkX3BwaV9ncm91cF90YXNrX2VuYWJsZSh1aW50OF90IGdyb3VwX251bSkpOw0KKw0KKy8qKkBicmllZiBUYXNrIHRvIGRpc2FibGUgYSBjaGFubmVsIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBncm91cF9udW0gTnVtYmVyIG9mIHRoZSBQUEkgZ3JvdXAuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19QUElfSU5WQUxJRF9HUk9VUCBUaGUgZ3JvdXAgbnVtYmVyIGlzIGludmFsaWQuDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BQSV9HUk9VUF9UQVNLX0RJU0FCTEUsIHVpbnQzMl90LCBzZF9wcGlfZ3JvdXBfdGFza19kaXNhYmxlKHVpbnQ4X3QgZ3JvdXBfbnVtKSk7DQorDQorLyoqQGJyaWVmIEFzc2lnbiBQUEkgY2hhbm5lbHMgdG8gYSBjaGFubmVsIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBncm91cF9udW0gTnVtYmVyIG9mIHRoZSBjaGFubmVsIGdyb3VwLg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbF9tc2sgTWFzayBvZiB0aGUgY2hhbm5lbHMgdG8gYXNzaWduIHRvIHRoZSBncm91cC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX1BQSV9JTlZBTElEX0dST1VQIFRoZSBncm91cCBudW1iZXIgaXMgaW52YWxpZC4NCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUFBJX0dST1VQX0FTU0lHTiwgdWludDMyX3QsIHNkX3BwaV9ncm91cF9hc3NpZ24odWludDhfdCBncm91cF9udW0sIHVpbnQzMl90IGNoYW5uZWxfbXNrKSk7DQorDQorLyoqQGJyaWVmIEdldHMgdGhlIFBQSSBjaGFubmVscyBvZiBhIGNoYW5uZWwgZ3JvdXAuDQorICoNCisgKiBAcGFyYW1baW5dICAgZ3JvdXBfbnVtIE51bWJlciBvZiB0aGUgY2hhbm5lbCBncm91cC4NCisgKiBAcGFyYW1bb3V0XSAgcF9jaGFubmVsX21zayBNYXNrIG9mIHRoZSBjaGFubmVscyBhc3NpZ25lZCB0byB0aGUgZ3JvdXAuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19QUElfSU5WQUxJRF9HUk9VUCBUaGUgZ3JvdXAgbnVtYmVyIGlzIGludmFsaWQuDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BQSV9HUk9VUF9HRVQsIHVpbnQzMl90LCBzZF9wcGlfZ3JvdXBfZ2V0KHVpbnQ4X3QgZ3JvdXBfbnVtLCB1aW50MzJfdCAqIHBfY2hhbm5lbF9tc2spKTsNCisNCisvKipAYnJpZWYgQ29uZmlndXJlcyB0aGUgUmFkaW8gTm90aWZpY2F0aW9uIHNpZ25hbC4NCisgKg0KKyAqIEBub3RlDQorICogICAgICAtIFRoZSBub3RpZmljYXRpb24gc2lnbmFsIGxhdGVuY3kgZGVwZW5kcyBvbiB0aGUgaW50ZXJydXB0IHByaW9yaXR5IHNldHRpbmdzIG9mIFNXSSB1c2VkDQorICogICAgICAgIGZvciBub3RpZmljYXRpb24gc2lnbmFsLg0KKyAqICAgICAgLSBUbyBlbnN1cmUgdGhhdCB0aGUgcmFkaW8gbm90aWZpY2F0aW9uIHNpZ25hbCBiZWhhdmVzIGluIGEgY29uc2lzdGVudCB3YXksIHRoZSByYWRpbw0KKyAqICAgICAgICBub3RpZmljYXRpb25zIG11c3QgYmUgY29uZmlndXJlZCB3aGVuIHRoZXJlIGlzIG5vIHByb3RvY29sIHN0YWNrIG9yIG90aGVyIFNvZnREZXZpY2UNCisgKiAgICAgICAgYWN0aXZpdHkgaW4gcHJvZ3Jlc3MuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHJhZGlvIG5vdGlmaWNhdGlvbiBzaWduYWwgaXMNCisgKiAgICAgICAgY29uZmlndXJlZCBkaXJlY3RseSBhZnRlciB0aGUgU29mdERldmljZSBoYXMgYmVlbiBlbmFibGVkLg0KKyAqICAgICAgLSBJbiB0aGUgcGVyaW9kIGJldHdlZW4gdGhlIEFDVElWRSBzaWduYWwgYW5kIHRoZSBzdGFydCBvZiB0aGUgUmFkaW8gRXZlbnQsIHRoZSBTb2Z0RGV2aWNlDQorICogICAgICAgIHdpbGwgaW50ZXJydXB0IHRoZSBhcHBsaWNhdGlvbiB0byBkbyBSYWRpbyBFdmVudCBwcmVwYXJhdGlvbi4NCisgKiAgICAgIC0gVXNpbmcgdGhlIFJhZGlvIE5vdGlmaWNhdGlvbiBmZWF0dXJlIG1heSBsaW1pdCB0aGUgYmFuZHdpZHRoLCBhcyB0aGUgU29mdERldmljZSBtYXkgaGF2ZQ0KKyAqICAgICAgICB0byBzaG9ydGVuIHRoZSBjb25uZWN0aW9uIGV2ZW50cyB0byBoYXZlIHRpbWUgZm9yIHRoZSBSYWRpbyBOb3RpZmljYXRpb24gc2lnbmFscy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHR5cGUgICAgICBUeXBlIG9mIG5vdGlmaWNhdGlvbiBzaWduYWwsIHNlZSBAcmVmIE5SRl9SQURJT19OT1RJRklDQVRJT05fVFlQRVMuDQorICogICAgICAgICAgICAgICAgICAgICAgIEByZWYgTlJGX1JBRElPX05PVElGSUNBVElPTl9UWVBFX05PTkUgc2hhbGwgYmUgdXNlZCB0byB0dXJuIG9mZiByYWRpbw0KKyAqICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uIFVzaW5nIEByZWYgTlJGX1JBRElPX05PVElGSUNBVElPTl9ESVNUQU5DRV9OT05FIGlzDQorICogICAgICAgICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkIChidXQgbm90IHJlcXVpcmVkKSB0byBiZSB1c2VkIHdpdGgNCisgKiAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX1RZUEVfTk9ORS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGRpc3RhbmNlICBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBub3RpZmljYXRpb24gc2lnbmFsIGFuZCBzdGFydCBvZiByYWRpbyBhY3Rpdml0eSwgc2VlIEByZWYgTlJGX1JBRElPX05PVElGSUNBVElPTl9ESVNUQU5DRVMuDQorICogICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgd2hlbiBAcmVmIE5SRl9SQURJT19OT1RJRklDQVRJT05fVFlQRV9OT05FIG9yDQorICogICAgICAgICAgICAgICAgICAgICAgIEByZWYgTlJGX1JBRElPX05PVElGSUNBVElPTl9UWVBFX0lOVF9PTl9JTkFDVElWRSBpcyB1c2VkLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIFRoZSBncm91cCBudW1iZXIgaXMgaW52YWxpZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgQSBwcm90b2NvbCBzdGFjayBvciBvdGhlciBTb2Z0RGV2aWNlIGlzIHJ1bm5pbmcuIFN0b3AgYWxsDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgYWN0aXZpdGllcyBhbmQgcmV0cnkuDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1JBRElPX05PVElGSUNBVElPTl9DRkdfU0VULCB1aW50MzJfdCwgc2RfcmFkaW9fbm90aWZpY2F0aW9uX2NmZ19zZXQodWludDhfdCB0eXBlLCB1aW50OF90IGRpc3RhbmNlKSk7DQorDQorLyoqQGJyaWVmIEVuY3J5cHRzIGEgYmxvY2sgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4NCisgKg0KKyAqIDEyOC1iaXQgQUVTIGVuY3J5cHRpb24uDQorICoNCisgKiBAbm90ZToNCisgKiAgICAtIFRoZSBhcHBsaWNhdGlvbiBtYXkgc2V0IHRoZSBTRVZPTlBFTkQgYml0IGluIHRoZSBTQ1IgdG8gMSB0byBtYWtlIHRoZSBTb2Z0RGV2aWNlIHNsZWVwIHdoaWxlDQorICogICAgICB0aGUgRUNCIGlzIHJ1bm5pbmcuIFRoZSBTRVZPTlBFTkQgYml0IHNob3VsZCBvbmx5IGJlIGNsZWFyZWQgKHNldCB0byAwKSBmcm9tIGFwcGxpY2F0aW9uDQorICogICAgICBtYWluIG9yIGxvdyBpbnRlcnJ1cHQgbGV2ZWwuDQorICoNCisgKiBAcGFyYW1baW4sIG91dF0gcF9lY2JfZGF0YSBQb2ludGVyIHRvIHRoZSBFQ0IgcGFyYW1ldGVycycgc3RydWN0ICh0d28gaW5wdXQNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIGFuZCBvbmUgb3V0cHV0IHBhcmFtZXRlcikuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfRUNCX0JMT0NLX0VOQ1JZUFQsIHVpbnQzMl90LCBzZF9lY2JfYmxvY2tfZW5jcnlwdChucmZfZWNiX2hhbF9kYXRhX3QgKiBwX2VjYl9kYXRhKSk7DQorDQorLyoqQGJyaWVmIEVuY3J5cHRzIG11bHRpcGxlIGRhdGEgYmxvY2tzIHByb3ZpZGVkIGFzIGFuIGFycmF5IG9mIGRhdGEgYmxvY2sgc3RydWN0dXJlcy4NCisgKg0KKyAqIEBkZXRhaWxzOiBQZXJmb3JtcyAxMjgtYml0IEFFUyBlbmNyeXB0aW9uIG9uIG11bHRpcGxlIGRhdGEgYmxvY2tzDQorICoNCisgKiBAbm90ZToNCisgKiAgICAtIFRoZSBhcHBsaWNhdGlvbiBtYXkgc2V0IHRoZSBTRVZPTlBFTkQgYml0IGluIHRoZSBTQ1IgdG8gMSB0byBtYWtlIHRoZSBTb2Z0RGV2aWNlIHNsZWVwIHdoaWxlDQorICogICAgICB0aGUgRUNCIGlzIHJ1bm5pbmcuIFRoZSBTRVZPTlBFTkQgYml0IHNob3VsZCBvbmx5IGJlIGNsZWFyZWQgKHNldCB0byAwKSBmcm9tIGFwcGxpY2F0aW9uDQorICogICAgICBtYWluIG9yIGxvdyBpbnRlcnJ1cHQgbGV2ZWwuDQorICoNCisgKiBAcGFyYW1baW5dICAgICBibG9ja19jb3VudCAgICAgQ291bnQgb2YgYmxvY2tzIGluIHRoZSBwX2RhdGFfYmxvY2tzIGFycmF5Lg0KKyAqIEBwYXJhbVtpbixvdXRdIHBfZGF0YV9ibG9ja3MgICBQb2ludGVyIHRvIHRoZSBmaXJzdCBlbnRyeSBpbiBhIGNvbnRpZ3VvdXMgYXJyYXkgb2YNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBucmZfZWNiX2hhbF9kYXRhX2Jsb2NrX3Qgc3RydWN0dXJlcy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9FQ0JfQkxPQ0tTX0VOQ1JZUFQsIHVpbnQzMl90LCBzZF9lY2JfYmxvY2tzX2VuY3J5cHQodWludDhfdCBibG9ja19jb3VudCwgbnJmX2VjYl9oYWxfZGF0YV9ibG9ja190ICogcF9kYXRhX2Jsb2NrcykpOw0KKw0KKy8qKkBicmllZiBHZXRzIGFueSBwZW5kaW5nIGV2ZW50cyBnZW5lcmF0ZWQgYnkgdGhlIFNvQyBBUEkuDQorICoNCisgKiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGtlZXAgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHRvIGdldCBldmVudHMsIHVudGlsIDo6TlJGX0VSUk9SX05PVF9GT1VORCBpcyByZXR1cm5lZC4NCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfZXZ0X2lkIFNldCB0byBvbmUgb2YgdGhlIHZhbHVlcyBpbiBAcmVmIE5SRl9TT0NfRVZUUywgaWYgYW55IGV2ZW50cyBhcmUgcGVuZGluZy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBBbiBldmVudCB3YXMgcGVuZGluZy4gVGhlIGV2ZW50IGlkIGlzIHdyaXR0ZW4gaW4gdGhlIHBfZXZ0X2lkIHBhcmFtZXRlci4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9GT1VORCBObyBwZW5kaW5nIGV2ZW50cy4NCisgKi8NCitTVkNBTEwoU0RfRVZUX0dFVCwgdWludDMyX3QsIHNkX2V2dF9nZXQodWludDMyX3QgKiBwX2V2dF9pZCkpOw0KKw0KKy8qKkBicmllZiBHZXQgdGhlIHRlbXBlcmF0dXJlIG1lYXN1cmVkIG9uIHRoZSBjaGlwDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgdGhlIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50IGlzIGRvbmUuDQorICogSXQgdGFrZXMgYXJvdW5kIDUwIHVzIGZyb20gY2FsbCB0byByZXR1cm4uDQorICoNCisgKiBAcGFyYW1bb3V0XSBwX3RlbXAgUmVzdWx0IG9mIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50LiBEaWUgdGVtcGVyYXR1cmUgaW4gMC4yNSBkZWdyZWVzIENlbHNpdXMuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgQSB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudCB3YXMgZG9uZSwgYW5kIHRoZSB0ZW1wZXJhdHVyZSB3YXMgd3JpdHRlbiB0byB0ZW1wDQorICovDQorU1ZDQUxMKFNEX1RFTVBfR0VULCB1aW50MzJfdCwgc2RfdGVtcF9nZXQoaW50MzJfdCAqIHBfdGVtcCkpOw0KKw0KKy8qKkBicmllZiBGbGFzaCBXcml0ZQ0KKyoNCisqIENvbW1hbmRzIHRvIHdyaXRlIGEgYnVmZmVyIHRvIGZsYXNoDQorKg0KKyogSWYgdGhlIFNvZnREZXZpY2UgaXMgZW5hYmxlZDoNCisqICBUaGlzIGNhbGwgaW5pdGlhdGVzIHRoZSBmbGFzaCBhY2Nlc3MgY29tbWFuZCwgYW5kIGl0cyBjb21wbGV0aW9uIHdpbGwgYmUgY29tbXVuaWNhdGVkIHRvIHRoZQ0KKyogIGFwcGxpY2F0aW9uIHdpdGggZXhhY3RseSBvbmUgb2YgdGhlIGZvbGxvd2luZyBldmVudHM6DQorKiAgICAgIC0gQHJlZiBOUkZfRVZUX0ZMQVNIX09QRVJBVElPTl9TVUNDRVNTIC0gVGhlIGNvbW1hbmQgd2FzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuDQorKiAgICAgIC0gQHJlZiBOUkZfRVZUX0ZMQVNIX09QRVJBVElPTl9FUlJPUiAgIC0gVGhlIGNvbW1hbmQgY291bGQgbm90IGJlIHN0YXJ0ZWQuDQorKg0KKyogSWYgdGhlIFNvZnREZXZpY2UgaXMgbm90IGVuYWJsZWQgbm8gZXZlbnQgd2lsbCBiZSBnZW5lcmF0ZWQsIGFuZCB0aGlzIGNhbGwgd2lsbCByZXR1cm4gQHJlZiBOUkZfU1VDQ0VTUyB3aGVuIHRoZQ0KKyAqIHdyaXRlIGhhcyBiZWVuIGNvbXBsZXRlZA0KKyoNCisqIEBub3RlDQorKiAgICAgIC0gVGhpcyBjYWxsIHRha2VzIGNvbnRyb2wgb3ZlciB0aGUgcmFkaW8gYW5kIHRoZSBDUFUgZHVyaW5nIGZsYXNoIGVyYXNlIGFuZCB3cml0ZSB0byBtYWtlIHN1cmUgdGhhdA0KKyogICAgICAgIHRoZXkgd2lsbCBub3QgaW50ZXJmZXJlIHdpdGggdGhlIGZsYXNoIGFjY2Vzcy4gVGhpcyBtZWFucyB0aGF0IGFsbCBpbnRlcnJ1cHRzIHdpbGwgYmUgYmxvY2tlZA0KKyogICAgICAgIGZvciBhIHByZWRpY3RhYmxlIHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgTlZNQyBzcGVjaWZpY2F0aW9uIGluIG5SRjUxIFNlcmllcyBSZWZlcmVuY2UgTWFudWFsDQorKiAgICAgICAgYW5kIHRoZSBjb21tYW5kIHBhcmFtZXRlcnMpLg0KKyogICAgICAtIFRoZSBkYXRhIGluIHRoZSBwX3NyYyBidWZmZXIgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBiZWZvcmUgdGhlIEByZWYgTlJGX0VWVF9GTEFTSF9PUEVSQVRJT05fU1VDQ0VTUw0KKyogICAgICAgIG9yIHRoZSBAcmVmIE5SRl9FVlRfRkxBU0hfT1BFUkFUSU9OX0VSUk9SIGhhdmUgYmVlbiByZWNlaXZlZCBpZiB0aGUgU29mdERldmljZSBpcyBlbmFibGVkLg0KKyoNCisqDQorKiBAcGFyYW1baW5dICBwX2RzdCBQb2ludGVyIHRvIHN0YXJ0IG9mIGZsYXNoIGxvY2F0aW9uIHRvIGJlIHdyaXR0ZW4uDQorKiBAcGFyYW1baW5dICBwX3NyYyBQb2ludGVyIHRvIGJ1ZmZlciB3aXRoIGRhdGEgdG8gYmUgd3JpdHRlbi4NCisqIEBwYXJhbVtpbl0gIHNpemUgIE51bWJlciBvZiAzMi1iaXQgd29yZHMgdG8gd3JpdGUuIE1heGltdW0gc2l6ZSBpcyAyNTYgMzItYml0IHdvcmRzIGZvciBuUkY1MSBhbmQgMTAyNCBmb3IgblJGNTIuDQorKg0KKyogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgICBUcmllZCB0byB3cml0ZSB0byBhIG5vbiBleGlzdGluZyBmbGFzaCBhZGRyZXNzLCBvciBwX2RzdCBvciBwX3NyYyB3YXMgdW5hbGlnbmVkLg0KKyogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZICAgICAgICAgICBUaGUgcHJldmlvdXMgY29tbWFuZCBoYXMgbm90IHlldCBjb21wbGV0ZWQuDQorKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfTEVOR1RIIFNpemUgd2FzIDAsIG9yIGhpZ2hlciB0aGFuIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZS4NCisqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOICAgICAgVHJpZWQgdG8gd3JpdGUgdG8gb3IgcmVhZCBmcm9tIHByb3RlY3RlZCBsb2NhdGlvbi4NCisqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgd2FzIGFjY2VwdGVkLg0KKyovDQorU1ZDQUxMKFNEX0ZMQVNIX1dSSVRFLCB1aW50MzJfdCwgc2RfZmxhc2hfd3JpdGUodWludDMyX3QgKiBwX2RzdCwgdWludDMyX3QgY29uc3QgKiBwX3NyYywgdWludDMyX3Qgc2l6ZSkpOw0KKw0KKw0KKy8qKkBicmllZiBGbGFzaCBFcmFzZSBwYWdlDQorKg0KKyogQ29tbWFuZHMgdG8gZXJhc2UgYSBmbGFzaCBwYWdlDQorKiBJZiB0aGUgU29mdERldmljZSBpcyBlbmFibGVkOg0KKyogIFRoaXMgY2FsbCBpbml0aWF0ZXMgdGhlIGZsYXNoIGFjY2VzcyBjb21tYW5kLCBhbmQgaXRzIGNvbXBsZXRpb24gd2lsbCBiZSBjb21tdW5pY2F0ZWQgdG8gdGhlDQorKiAgYXBwbGljYXRpb24gd2l0aCBleGFjdGx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGV2ZW50czoNCisqICAgICAgLSBAcmVmIE5SRl9FVlRfRkxBU0hfT1BFUkFUSU9OX1NVQ0NFU1MgLSBUaGUgY29tbWFuZCB3YXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4NCisqICAgICAgLSBAcmVmIE5SRl9FVlRfRkxBU0hfT1BFUkFUSU9OX0VSUk9SICAgLSBUaGUgY29tbWFuZCBjb3VsZCBub3QgYmUgc3RhcnRlZC4NCisqDQorKiBJZiB0aGUgU29mdERldmljZSBpcyBub3QgZW5hYmxlZCBubyBldmVudCB3aWxsIGJlIGdlbmVyYXRlZCwgYW5kIHRoaXMgY2FsbCB3aWxsIHJldHVybiBAcmVmIE5SRl9TVUNDRVNTIHdoZW4gdGhlDQorKiBlcmFzZSBoYXMgYmVlbiBjb21wbGV0ZWQNCisqDQorKiBAbm90ZQ0KKyogICAgICAtIFRoaXMgY2FsbCB0YWtlcyBjb250cm9sIG92ZXIgdGhlIHJhZGlvIGFuZCB0aGUgQ1BVIGR1cmluZyBmbGFzaCBlcmFzZSBhbmQgd3JpdGUgdG8gbWFrZSBzdXJlIHRoYXQNCisqICAgICAgICB0aGV5IHdpbGwgbm90IGludGVyZmVyZSB3aXRoIHRoZSBmbGFzaCBhY2Nlc3MuIFRoaXMgbWVhbnMgdGhhdCBhbGwgaW50ZXJydXB0cyB3aWxsIGJlIGJsb2NrZWQNCisqICAgICAgICBmb3IgYSBwcmVkaWN0YWJsZSB0aW1lIChkZXBlbmRpbmcgb24gdGhlIE5WTUMgc3BlY2lmaWNhdGlvbiBpbiBuUkY1MSBTZXJpZXMgUmVmZXJlbmNlIE1hbnVhbA0KKyogICAgICAgIGFuZCB0aGUgY29tbWFuZCBwYXJhbWV0ZXJzKS4NCisqDQorKg0KKyogQHBhcmFtW2luXSAgcGFnZV9udW1iZXIgICAgICAgICAgIFBhZ2UgbnVtYmVyIG9mIHRoZSBwYWdlIHRvIGVyYXNlDQorKg0KKyogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlRFUk5BTCAgICAgIElmIGEgbmV3IHNlc3Npb24gY291bGQgbm90IGJlIG9wZW5lZCBkdWUgdG8gYW4gaW50ZXJuYWwgZXJyb3IuDQorKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiAgVHJpZWQgdG8gZXJhc2UgdG8gYSBub24gZXhpc3RpbmcgZmxhc2ggcGFnZS4NCisqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSAgICAgICAgICBUaGUgcHJldmlvdXMgY29tbWFuZCBoYXMgbm90IHlldCBjb21wbGV0ZWQuDQorKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0ZPUkJJRERFTiAgICAgVHJpZWQgdG8gZXJhc2UgYSBwcm90ZWN0ZWQgcGFnZS4NCisqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgY29tbWFuZCB3YXMgYWNjZXB0ZWQuDQorKi8NCitTVkNBTEwoU0RfRkxBU0hfUEFHRV9FUkFTRSwgdWludDMyX3QsIHNkX2ZsYXNoX3BhZ2VfZXJhc2UodWludDMyX3QgcGFnZV9udW1iZXIpKTsNCisNCisNCisvKipAYnJpZWYgRmxhc2ggUHJvdGVjdGlvbiBzZXQNCisgKg0KKyAqIENvbW1hbmRzIHRvIHNldCB0aGUgZmxhc2ggcHJvdGVjdGlvbiBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4NCisgICBPbiBuUkY1MSB0aGlzIHNldHMgdGhlIFBST1RFTlNFVHggcmVnaXN0ZXJzIG9mIHRoZSBNUFUgcGVyaXBoZXJhbC4NCisgICBPbiBuUkY1MiB0aGlzIHNldHMgdGhlIENPTkZJR3ggcmVnaXN0ZXJzIG9mIHRoZSBCUFJPVCBwZXJpcGhlcmFsLg0KKyAqDQorICogQG5vdGUgVG8gcmVhZCB0aGUgdmFsdWVzIHJlYWQgdGhlbSBkaXJlY3RseS4gVGhleSBhcmUgb25seSB3cml0ZS1wcm90ZWN0ZWQuDQorICoNCisgKiBAcGFyYW1baW5dICBibG9ja19jZmcwIFZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQorICogQHBhcmFtW2luXSAgYmxvY2tfY2ZnMSBWYWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrX2NmZzIgVmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgY29uZmlndXJhdGlvbiByZWdpc3RlciAoaWdub3JlZCBvbiBuUkY1MSkuDQorICogQHBhcmFtW2luXSAgYmxvY2tfY2ZnMyBWYWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIChpZ25vcmVkIG9uIG5SRjUxKS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOIFRyaWVkIHRvIHByb3RlY3QgdGhlIFNvZnREZXZpY2UuDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFZhbHVlcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4NCisgKi8NCitTVkNBTEwoU0RfRkxBU0hfUFJPVEVDVCwgdWludDMyX3QsIHNkX2ZsYXNoX3Byb3RlY3QodWludDMyX3QgYmxvY2tfY2ZnMCwgdWludDMyX3QgYmxvY2tfY2ZnMSwgdWludDMyX3QgYmxvY2tfY2ZnMiwgdWludDMyX3QgYmxvY2tfY2ZnMykpOw0KKw0KKy8qKkBicmllZiBPcGVucyBhIHNlc3Npb24gZm9yIHJhZGlvIHRpbWVzbG90IHJlcXVlc3RzLg0KKyAqDQorICogQG5vdGUgT25seSBvbmUgc2Vzc2lvbiBjYW4gYmUgb3BlbiBhdCBhIHRpbWUuDQorICogQG5vdGUgcF9yYWRpb19zaWduYWxfY2FsbGJhY2soQHJlZiBOUkZfUkFESU9fQ0FMTEJBQ0tfU0lHTkFMX1RZUEVfU1RBUlQpIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHJhZGlvIHRpbWVzbG90DQorICogICAgICAgc3RhcnRzLiBGcm9tIHRoaXMgcG9pbnQgdGhlIE5SRl9SQURJTyBhbmQgTlJGX1RJTUVSMCBwZXJpcGhlcmFscyBjYW4gYmUgZnJlZWx5IGFjY2Vzc2VkDQorICogICAgICAgYnkgdGhlIGFwcGxpY2F0aW9uLg0KKyAqIEBub3RlIHBfcmFkaW9fc2lnbmFsX2NhbGxiYWNrKEByZWYgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFX1RJTUVSMCkgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBOUkZfVElNRVIwDQorICogICAgICAgaW50ZXJydXB0IG9jY3Vycy4NCisgKiBAbm90ZSBwX3JhZGlvX3NpZ25hbF9jYWxsYmFjayhAcmVmIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRV9SQURJTykgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBOUkZfUkFESU8NCisgKiAgICAgICBpbnRlcnJ1cHQgb2NjdXJzLg0KKyAqIEBub3RlIHBfcmFkaW9fc2lnbmFsX2NhbGxiYWNrKCkgd2lsbCBiZSBjYWxsZWQgYXQgQVJNIGludGVycnVwdCBwcmlvcml0eSBsZXZlbCAwLiBUaGlzDQorICogICAgICAgaW1wbGllcyB0aGF0IG5vbmUgb2YgdGhlIHNkXyogQVBJIGNhbGxzIGNhbiBiZSB1c2VkIGZyb20gcF9yYWRpb19zaWduYWxfY2FsbGJhY2soKS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9yYWRpb19zaWduYWxfY2FsbGJhY2sgVGhlIHNpZ25hbCBjYWxsYmFjay4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIHBfcmFkaW9fc2lnbmFsX2NhbGxiYWNrIGlzIGFuIGludmFsaWQgZnVuY3Rpb24gcG9pbnRlci4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgSWYgc2Vzc2lvbiBjYW5ub3QgYmUgb3BlbmVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5URVJOQUwgSWYgYSBuZXcgc2Vzc2lvbiBjb3VsZCBub3QgYmUgb3BlbmVkIGR1ZSB0byBhbiBpbnRlcm5hbCBlcnJvci4NCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgT3RoZXJ3aXNlLg0KKyAqLw0KKyBTVkNBTEwoU0RfUkFESU9fU0VTU0lPTl9PUEVOLCB1aW50MzJfdCwgc2RfcmFkaW9fc2Vzc2lvbl9vcGVuKG5yZl9yYWRpb19zaWduYWxfY2FsbGJhY2tfdCBwX3JhZGlvX3NpZ25hbF9jYWxsYmFjaykpOw0KKw0KKy8qKkBicmllZiBDbG9zZXMgYSBzZXNzaW9uIGZvciByYWRpbyB0aW1lc2xvdCByZXF1ZXN0cy4NCisgKg0KKyAqIEBub3RlIEFueSBjdXJyZW50IHJhZGlvIHRpbWVzbG90IHdpbGwgYmUgZmluaXNoZWQgYmVmb3JlIHRoZSBzZXNzaW9uIGlzIGNsb3NlZC4NCisgKiBAbm90ZSBJZiBhIHJhZGlvIHRpbWVzbG90IGlzIHNjaGVkdWxlZCB3aGVuIHRoZSBzZXNzaW9uIGlzIGNsb3NlZCwgaXQgd2lsbCBiZSBjYW5jZWxlZC4NCisgKiBAbm90ZSBUaGUgYXBwbGljYXRpb24gY2Fubm90IGNvbnNpZGVyIHRoZSBzZXNzaW9uIGNsb3NlZCB1bnRpbCB0aGUgQHJlZiBOUkZfRVZUX1JBRElPX1NFU1NJT05fQ0xPU0VEDQorICogICAgICAgZXZlbnQgaXMgcmVjZWl2ZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0ZPUkJJRERFTiBJZiBzZXNzaW9uIG5vdCBvcGVuZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIElmIHNlc3Npb24gaXMgY3VycmVudGx5IGJlaW5nIGNsb3NlZC4NCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgT3RoZXJ3aXNlLg0KKyAqLw0KKyBTVkNBTEwoU0RfUkFESU9fU0VTU0lPTl9DTE9TRSwgdWludDMyX3QsIHNkX3JhZGlvX3Nlc3Npb25fY2xvc2Uodm9pZCkpOw0KKw0KKy8qKkBicmllZiBSZXF1ZXN0cyBhIHJhZGlvIHRpbWVzbG90Lg0KKyAqDQorICogQG5vdGUgVGhlIHJlcXVlc3QgdHlwZSBpcyBkZXRlcm1pbmVkIGJ5IHBfcmVxdWVzdC0+cmVxdWVzdF90eXBlLCBhbmQgY2FuIGJlIG9uZSBvZiBAcmVmIE5SRl9SQURJT19SRVFfVFlQRV9FQVJMSUVTVA0KKyAqICAgICAgIGFuZCBAcmVmIE5SRl9SQURJT19SRVFfVFlQRV9OT1JNQUwuIFRoZSBmaXJzdCByZXF1ZXN0IGluIGEgc2Vzc2lvbiBtdXN0IGFsd2F5cyBiZSBvZiB0eXBlIEByZWYgTlJGX1JBRElPX1JFUV9UWVBFX0VBUkxJRVNULg0KKyAqIEBub3RlIEZvciBhIG5vcm1hbCByZXF1ZXN0IChAcmVmIE5SRl9SQURJT19SRVFfVFlQRV9OT1JNQUwpLCB0aGUgc3RhcnQgdGltZSBvZiBhIHJhZGlvIHRpbWVzbG90IGlzIHNwZWNpZmllZCBieQ0KKyAqICAgICAgIHBfcmVxdWVzdC0+ZGlzdGFuY2VfdXMgYW5kIGlzIGdpdmVuIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgcHJldmlvdXMgdGltZXNsb3QuDQorICogQG5vdGUgQSB0b28gc21hbGwgcF9yZXF1ZXN0LT5kaXN0YW5jZV91cyB3aWxsIGxlYWQgdG8gYSBAcmVmIE5SRl9FVlRfUkFESU9fQkxPQ0tFRCBldmVudC4NCisgKiBAbm90ZSBUaW1lc2xvdHMgc2NoZWR1bGVkIHRvbyBjbG9zZSB3aWxsIGxlYWQgdG8gYSBAcmVmIE5SRl9FVlRfUkFESU9fQkxPQ0tFRCBldmVudC4NCisgKiBAbm90ZSBTZWUgdGhlIFNvZnREZXZpY2UgU3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBvbiByYWRpbyB0aW1lc2xvdCBzY2hlZHVsaW5nLCBkaXN0YW5jZXMgYW5kIGxlbmd0aHMuDQorICogQG5vdGUgSWYgYW4gb3Bwb3J0dW5pdHkgZm9yIHRoZSBmaXJzdCByYWRpbyB0aW1lc2xvdCBpcyBub3QgZm91bmQgYmVmb3JlIDEwMCBtcyBhZnRlciB0aGUgY2FsbCB0byB0aGlzDQorICogICAgICAgZnVuY3Rpb24sIGl0IGlzIG5vdCBzY2hlZHVsZWQsIGFuZCBpbnN0ZWFkIGEgQHJlZiBOUkZfRVZUX1JBRElPX0JMT0NLRUQgZXZlbnQgaXMgc2VudC4NCisgKiAgICAgICBUaGUgYXBwbGljYXRpb24gbWF5IHRoZW4gdHJ5IHRvIHNjaGVkdWxlIHRoZSBmaXJzdCByYWRpbyB0aW1lc2xvdCBhZ2Fpbi4NCisgKiBAbm90ZSBTdWNjZXNzZnVsIHJlcXVlc3RzIHdpbGwgcmVzdWx0IGluIG5yZl9yYWRpb19zaWduYWxfY2FsbGJhY2tfdChAcmVmIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRV9TVEFSVCkuDQorICogICAgICAgVW5zdWNjZXNzZnVsIHJlcXVlc3RzIHdpbGwgcmVzdWx0IGluIGEgQHJlZiBOUkZfRVZUX1JBRElPX0JMT0NLRUQgZXZlbnQsIHNlZSBAcmVmIE5SRl9TT0NfRVZUUy4NCisgKiBAbm90ZSBUaGUgaml0dGVyIGluIHRoZSBzdGFydCB0aW1lIG9mIHRoZSByYWRpbyB0aW1lc2xvdHMgaXMgKy8tIEByZWYgTlJGX1JBRElPX1NUQVJUX0pJVFRFUl9VUyB1cy4NCisgKiBAbm90ZSBUaGUgbnJmX3JhZGlvX3NpZ25hbF9jYWxsYmFja190KEByZWYgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFX1NUQVJUKSBjYWxsIGhhcyBhIGxhdGVuY3kgcmVsYXRpdmUgdG8gdGhlDQorICogICAgICAgc3BlY2lmaWVkIHJhZGlvIHRpbWVzbG90IHN0YXJ0LCBidXQgdGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIGFjdHVhbCBzdGFydCB0aW1lIG9mIHRoZSB0aW1lc2xvdC4NCisgKiBAbm90ZSBOUkZfVElNRVIwIGlzIHJlc2V0IGF0IHRoZSBzdGFydCBvZiB0aGUgcmFkaW8gdGltZXNsb3QsIGFuZCBpcyBjbG9ja2VkIGF0IDFNSHogZnJvbSB0aGUgaGlnaCBmcmVxdWVuY3kNCisgKiAgICAgICAoMTYgTUh6KSBjbG9jayBzb3VyY2UuIElmIHBfcmVxdWVzdC0+aGZjbGtfZm9yY2VfeHRhbCBpcyB0cnVlLCB0aGUgaGlnaCBmcmVxdWVuY3kgY2xvY2sgaXMNCisgKiAgICAgICBndWFyYW50ZWVkIHRvIGJlIGNsb2NrZWQgZnJvbSB0aGUgZXh0ZXJuYWwgY3J5c3RhbC4NCisgKiBAbm90ZSBUaGUgU29mdERldmljZSB3aWxsIG5laXRoZXIgYWNjZXNzIHRoZSBOUkZfUkFESU8gcGVyaXBoZXJhbCBub3IgdGhlIE5SRl9USU1FUjAgcGVyaXBoZXJhbA0KKyAqICAgICAgIGR1cmluZyB0aGUgcmFkaW8gdGltZXNsb3QuDQorICoNCisgKiBAcGFyYW1baW5dIHBfcmVxdWVzdCBQb2ludGVyIHRvIHRoZSByZXF1ZXN0IHBhcmFtZXRlcnMuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0ZPUkJJRERFTiBJZiBzZXNzaW9uIG5vdCBvcGVuZWQgb3IgdGhlIHNlc3Npb24gaXMgbm90IElETEUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSWYgdGhlIHBfcmVxdWVzdCBwb2ludGVyIGlzIGludmFsaWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIElmIHRoZSBwYXJhbWV0ZXJzIG9mIHBfcmVxdWVzdCBhcmUgbm90IHZhbGlkLg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBPdGhlcndpc2UuDQorICovDQorIFNWQ0FMTChTRF9SQURJT19SRVFVRVNULCB1aW50MzJfdCwgc2RfcmFkaW9fcmVxdWVzdChucmZfcmFkaW9fcmVxdWVzdF90IGNvbnN0ICogcF9yZXF1ZXN0KSk7DQorDQorLyoqQH0gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8vIE5SRl9TT0NfSF9fDQorDQorLyoqQH0gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9zdmMuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX3N2Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OWMxYTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9zdmMuaApAQCAtMCwwICsxLDg4IEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX1NWQ19fDQorI2RlZmluZSBOUkZfU1ZDX18NCisNCisjaW5jbHVkZSAic3RkaW50LmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2lmZGVmIFNWQ0FMTF9BU19OT1JNQUxfRlVOQ1RJT04NCisjZGVmaW5lIFNWQ0FMTChudW1iZXIsIHJldHVybl90eXBlLCBzaWduYXR1cmUpIHJldHVybl90eXBlIHNpZ25hdHVyZQ0KKyNlbHNlDQorDQorI2lmbmRlZiBTVkNBTEwNCisjaWYgZGVmaW5lZCAoX19DQ19BUk0pDQorI2RlZmluZSBTVkNBTEwobnVtYmVyLCByZXR1cm5fdHlwZSwgc2lnbmF0dXJlKSByZXR1cm5fdHlwZSBfX3N2YyhudW1iZXIpIHNpZ25hdHVyZQ0KKyNlbGlmIGRlZmluZWQgKF9fR05VQ19fKQ0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyNkZWZpbmUgR0NDX0NBU1RfQ1BQICh1aW50MTZfdCkNCisjZWxzZQ0KKyNkZWZpbmUgR0NDX0NBU1RfQ1BQDQorI2VuZGlmDQorI2RlZmluZSBTVkNBTEwobnVtYmVyLCByZXR1cm5fdHlwZSwgc2lnbmF0dXJlKSAgICAgICAgICBcDQorICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgICAgICAgICAgICAgICAgICAgICAgICBcDQorICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdyZXR1cm4tdHlwZVwiIikgICBcDQorICBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICBzdGF0aWMgcmV0dXJuX3R5cGUgc2lnbmF0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIF9fYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAic3ZjICUwXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAiYnggcjE0IiA6IDogIkkiIChHQ0NfQ0FTVF9DUFAgbnVtYmVyKSA6ICJyMCIgICBcDQorICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQ0KKw0KKyNlbGlmIGRlZmluZWQgKF9fSUNDQVJNX18pDQorI2RlZmluZSBQUkFHTUEoeCkgX1ByYWdtYSgjeCkNCisjZGVmaW5lIFNWQ0FMTChudW1iZXIsIHJldHVybl90eXBlLCBzaWduYXR1cmUpICAgICAgICAgIFwNCitQUkFHTUEoc3dpX251bWJlciA9IChudW1iZXIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgX19zd2kgcmV0dXJuX3R5cGUgc2lnbmF0dXJlOw0KKyNlbHNlDQorI2RlZmluZSBTVkNBTEwobnVtYmVyLCByZXR1cm5fdHlwZSwgc2lnbmF0dXJlKSByZXR1cm5fdHlwZSBzaWduYXR1cmUNCisjZW5kaWYNCisjZW5kaWYgIC8vIFNWQ0FMTA0KKw0KKyNlbmRpZiAgLy8gU1ZDQUxMX0FTX05PUk1BTF9GVU5DVElPTg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgIC8vIE5SRl9TVkNfXw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2FkYXB0ZXJzL2luY2x1ZGUvYWRfcmYuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2FkYXB0ZXJzL2luY2x1ZGUvYWRfcmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODdiZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvYWRhcHRlcnMvaW5jbHVkZS9hZF9yZi5oCkBAIC0wLDAgKzEsMTY2IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIEFEQVBURVJTCisgKiBceworICogXGFkZHRvZ3JvdXAgUkZfQURBUFRFUgorICoKKyAqIFxicmllZiBSRiBhZGFwdGVyCisgKgorICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlCisgKgorICogQGJyaWVmIFJhZGlvIG1vZHVsZSBhY2Nlc3MgQVBJLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKworCisKKyNpZm5kZWYgQURfUkZfSF8KKyNkZWZpbmUgQURfUkZfSF8KKworI2lmIGRnX2NvbmZpZ1JGX0FEQVBURVIKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgImh3X3JmLmgiCisKKy8qKgorICogQGJyaWVmIFBlcmZvcm1zIFJGIGFkYXB0ZXIgaW5pdGlhbGl6YXRpb24KKyAqLwordm9pZCBhZF9yZl9pbml0KHZvaWQpOworCisvKioKKyAqIFxicmllZiBSZXRyeSBhIGZhaWxlZCBjYWxpYnJhdGlvbgorICoKKyAqIFRoaXMgd2lsbCBwb3dlci1jeWNsZSBSRiwgcmVhcHBseSB0Y3MgYW5kIHJlY29tbWVuZGVkIHNldHRpbmdzLCBhbmQKKyAqIHJldHJ5IGNhbGlicmF0aW9uLiBJZiBjYWxpYnJhdGlvbiBmYWlscyBhZ2FpbiwgaXQgd2lsbCByZXNldCB0aGUgc3lzdGVtCisgKiAodXNpbmcgdGhlIHdkb2cpCisgKi8KK3ZvaWQgYWRfcmZfcmV0cnlfY2FsaWJyYXRpb24oKTsKKworLyoqCisgKiBcYnJpZWYgU3RhcnQgQ2FsaWJyYXRpb24gcHJvY2VkdXJlIGFuZCBjaGVjayBpZiBpdCBzdWNjZWVkcworICoKKyAqIFRoaXMgd2lsbCBzdGFydCB0aGUgY2FsaWJyYXRpb24gcHJvY2VkdXJlLCBhbmQgY2hlY2sgaWYgdGhlIGNhbGlicmF0aW9uIGluaXRpYWwKKyAqIHBhcnQgKHRoZSBpZmYgY2FsaWJyYXRpb24pIHN1Y2NlZWRzLiBJZiBub3QsIGl0IHdpbGwgcmVzZXQgdGhlIFJGIGJsb2NrIGFuZCByZXRyeS4KKyAqIElmIHRoZSBjYWxpYnJhdGlvbiBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kIGF0dGVtcHQsIGl0IHdpbGwgdHJpZ2dlciBhCisgKiB3YXRjaGRvZyByZXNldAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFkX3JmX3N0YXJ0X2FuZF9jaGVja19jYWxpYnJhdGlvbigpCit7CisgICAgICAgIGlmICghaHdfcmZfc3RhcnRfY2FsaWJyYXRpb24oKSkKKyAgICAgICAgICAgICAgICAgYWRfcmZfcmV0cnlfY2FsaWJyYXRpb24oKTsKK30KKworLyoqCisgKiBcYnJpZWYgUGVyZm9ybSBSRiBzeXN0ZW0gaW5pdGlhbGl6YXRpb24uCisgKgorICogVGhpcyB3aWxsIHByZWZvcm0gYSBmdWxsIFJGIHN5c3RlbSBpbml0LCBhbmQgY2hlY2sgaWYgdGhlCisgKiBjYWxpYnJhdGlvbiBpbml0aWFsIHBhcnQgKHRoZSBpZmYgY2FsaWJyYXRpb24pIHN1Y2NlZWRzLiBJZiBub3QsIGl0IHdpbGwKKyAqIHJlc2V0IHRoZSBSRiBibG9jayBhbmQgcmV0cnkuCisgKiBJZiB0aGUgY2FsaWJyYXRpb24gc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZCBhdHRlbXB0LCBpdCB3aWxsIHRyaWdnZXIgYQorICogd2F0Y2hkb2cgcmVzZXQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhZF9yZl9zeXN0ZW1faW5pdCgpCit7CisgICAgICAgIGlmICghaHdfcmZfc3lzdGVtX2luaXQoKSkKKyAgICAgICAgICAgICAgICAgYWRfcmZfcmV0cnlfY2FsaWJyYXRpb24oKTsKK30KKworLyoqCisgKiBcYnJpZWYgU3RhcnQgQ2FsaWJyYXRpb24gcHJvY2VkdXJlIGFuZCByZXR1cm4uCisgKgorICogVGhpcyB3aWxsIGJsb2NrIGZvciBzb21lIHRpbWUgKHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCkgaW4gb3JkZXIgdG8gcGVyZm9ybQorICogVGhlIGZpcnN0IHBhcnQgb2YgY2FsaWJyYXRpb24gKElGRiwgREMgb2Zmc2V0IGFuZCB0aGUgc3RhcnQgb2YgZ2FpbiBjYWxpYikuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWRfcmZfc3RhcnRfY2FsaWJyYXRpb24oKQoreworICAgICAgICBhZF9yZl9zdGFydF9hbmRfY2hlY2tfY2FsaWJyYXRpb24oKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0cyBwYXJhbWV0ZXJzIGFjY29yZGluZyB0byB0aGVpciByZWNvbW1lbmRlZCB2YWx1ZXMsIHRha2luZyBSRiBzdGF0ZSBpbnRvIGFjY291bnQuCisgKgorICogQWN0cyBsaWtlIFxyZWYgaHdfcmZfc2V0X3JlY29tbWVuZGVkX3NldHRpbmdzIGJ1dCBtYWtlcyBzdXJlIHRoYXQgdGhlIFJGIHBvd2VyIGRvbWFpbiBpcyBvbiBhbmQKKyAqIHVuY29uZmlndXJlZC4gRGlzYWJsZXMgaW50ZXJydXB0cy4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhZF9yZl9yZXF1ZXN0X3JlY29tbWVuZGVkX3NldHRpbmdzKHZvaWQpCit7CisgICAgICAgIGh3X3JmX3JlcXVlc3RfcmVjb21tZW5kZWRfc2V0dGluZ3MoKTsKK30KKworLyoqCisgKiBcYnJpZWYgUmVxdWVzdHMgdGhhdCB0aGUgUkYgaXMgdHVybmVkIG9uCisgKgorICogUmVxdWVzdHMgdGhhdCB0aGUgUkYgaXMgdHVybmVkIG9uLCBpZiBub3QgYWxyZWFkeSBvbi4gRGlzYWJsZXMgaW50ZXJydXB0cy4KKyAqCisgKiBccGFyYW0gW2luXSBtb2RlX2JsZSBUcnVlLCBpZiB0aGUgcmYgaXMgbmVlZGVkIGZvciBibGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhZF9yZl9yZXF1ZXN0X29uKGJvb2wgbW9kZV9ibGUpCit7CisgICAgICAgIGh3X3JmX3JlcXVlc3Rfb24obW9kZV9ibGUpOworfQorCisvKioKKyAqIFxicmllZiBSZXF1ZXN0cyB0aGF0IHRoZSBSRiBpcyB0dXJuZWQgb2ZmCisgKgorICogUmVxdWVzdHMgdGhhdCB0aGUgUkYgaXMgdHVybmVkIG9mZiwgaWYgbm90IGFscmVhZHkgb2ZmLgorICogVGhlIFJGIHdpbGwgYmUgdHVybmVkIG9mZiBvbmx5IGlmIHRoZXJlIGFyZSBubyBtb3JlCisgKiByZXF1ZXN0cyAoaWUuIGFsbCByZXF1ZXN0ZXJzIGhhdmUgY2FsbGVkIGFkX3JmX3JlcXVlc3Rfb2ZmKCkpCisgKiBEaXNhYmxlcyBpbnRlcnJ1cHRzCisgKgorICogXHBhcmFtIFtpbl0gbW9kZV9ibGUgVHJ1ZSwgaWYgdGhlIHJmIHdhcyBuZWVkZWQgZm9yIGJsZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWRfcmZfcmVxdWVzdF9vZmYoYm9vbCBtb2RlX2JsZSkKK3sKKyAgICAgICAgaHdfcmZfcmVxdWVzdF9vZmYobW9kZV9ibGUpOworfQorCisjZW5kaWYgLyogZGdfY29uZmlnUkZfQURBUFRFUiAqLworCisjZW5kaWYgLyogQURfUkZfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2FybV9saWNlbnNlLnR4dCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2FybV9saWNlbnNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lM2U4OWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvYXJtX2xpY2Vuc2UudHh0CkBAIC0wLDAgKzEsMjYgQEAKKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTMgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9jb25maWcvYnNwX2RlYnVnLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9jb25maWcvYnNwX2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyZTE0OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2NvbmZpZy9ic3BfZGVidWcuaApAQCAtMCwwICsxLDYzNCBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBCU1BfQ09ORklHCisgKiBceworICogXGFkZHRvZ3JvdXAgQlNQX0RFQlVHCisgKgorICogXGJyaWVmIERveHlnZW4gZG9jdW1lbnRhdGlvbiBpcyBub3QgeWV0IGF2YWlsYWJsZSBmb3IgdGhpcyBtb2R1bGUuCisgKiAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmaWxlKHMpCisgKgorICogXHsKKyovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBic3BfZGVidWcuaAorICoKKyAqIEBicmllZiBCb2FyZCBTdXBwb3J0IFBhY2thZ2UuIERlYnVnIENvbmZpZ3VyYXRpb24uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEJTUF9ERUJVR19IXworI2RlZmluZSBCU1BfREVCVUdfSF8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gREVCVUcgR1BJTyBoYW5kbGluZyBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgREJHX0NPTkZJR1VSRShmbGFnLCBuYW1lLCBmdW5jKSAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZmxhZyA9PSAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBuYW1lIyNfTU9ERV9SRUcgPSAweDMwMCArIGZ1bmM7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERCR19DT05GSUdVUkVfSElHSChmbGFnLCBuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGZsYWcgPT0gMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbmFtZSMjX1NFVF9SRUcgPSBuYW1lIyNfUElOOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5hbWUjI19NT0RFX1JFRyA9IDB4MzAwOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREJHX0NPTkZJR1VSRV9MT1coZmxhZywgbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZmxhZyA9PSAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBuYW1lIyNfUkVTRVRfUkVHID0gbmFtZSMjX1BJTjsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbmFtZSMjX01PREVfUkVHID0gMHgzMDA7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBEQkdfU0VUX0hJR0goZmxhZywgbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChmbGFnID09IDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5hbWUjI19TRVRfUkVHID0gbmFtZSMjX1BJTjsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREJHX1NFVF9MT1coZmxhZywgbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZmxhZyA9PSAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBuYW1lIyNfUkVTRVRfUkVHID0gbmFtZSMjX1BJTjsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIYXJkRmF1bHQgb3IgTk1JIGV2ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIEVYQ0VQVElPTl9ERUJVRworI2RlZmluZSBFWENFUFRJT05fREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDbG9jayBhbmQgUG93ZXIgTWFuYWdlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBDUE1fREVCVUcKKyNkZWZpbmUgQ1BNX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgQ1BNX1VTRV9GVU5DVElPTkFMX0RFQlVHCisjZGVmaW5lIENQTV9VU0VfRlVOQ1RJT05BTF9ERUJVRyAgICAgICAgICAgICAgICAoMCkgICAgIC8vIFJlcXVpcmVzIEdQSU8gY29uZmlnLgorI2VuZGlmCisKKyNpZm5kZWYgQ1BNX1VTRV9USU1JTkdfREVCVUcKKyNkZWZpbmUgQ1BNX1VTRV9USU1JTkdfREVCVUcgICAgICAgICAgICAgICAgICAgICgwKSAgICAgLy8gUmVxdWlyZXMgR1BJTyBjb25maWcuCisjZW5kaWYKKworI2lmbmRlZiBDUE1fVVNFX1JDWF9ERUJVRworI2RlZmluZSBDUE1fVVNFX1JDWF9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgKDApICAgICAvLyBSZXF1aXJlcyBsb2dnaW5nLgorI2VuZGlmCisKKy8qIENvbnRyb2xzIHdoaWNoIFJBTSBibG9ja3Mgd2lsbCBiZSByZXRhaW5lZCB3aGVuIHRoZSBNRUFTVVJFX1NMRUVQX0NVUlJFTlQgdGVzdCBtb2RlIGlzIHVzZWQKKyAqIChvcHRpb25hbCkuICovCisjaWZuZGVmIGRnX2NvbmZpZ1RFU1RNT0RFX1JFVEFJTl9SQU0KKyNkZWZpbmUgZGdfY29uZmlnVEVTVE1PREVfUkVUQUlOX1JBTSAgICAgICAgICAgICgweDFGKQorI2VuZGlmCisKKy8qIENvbnRyb2xzIHdoZXRoZXIgdGhlIENhY2hlIHdpbGwgYmUgcmV0YWluZWQgd2hlbiB0aGUgTUVBU1VSRV9TTEVFUF9DVVJSRU5UIHRlc3QgbW9kZSBpcyB1c2VkCisgKiAob3B0aW9uYWwpLiAqLworI2lmbmRlZiBkZ19jb25maWdURVNUTU9ERV9SRVRBSU5fQ0FDSEUKKyNkZWZpbmUgZGdfY29uZmlnVEVTVE1PREVfUkVUQUlOX0NBQ0hFICAgICAgICAgICgwKQorI2VuZGlmCisKKy8qIENvbnRyb2xzIHdoZXRoZXIgdGhlIEVDQyBSQU0gd2lsbCBiZSByZXRhaW5lZCB3aGVuIHRoZSBNRUFTVVJFX1NMRUVQX0NVUlJFTlQgdGVzdCBtb2RlIGlzIHVzZWQKKyAqIChvcHRpb25hbCkuICovCisjaWZuZGVmIGRnX2NvbmZpZ19URVNUTU9ERV9SRVRBSU5fRUNDUkFNCisjZGVmaW5lIGRnX2NvbmZpZ19URVNUTU9ERV9SRVRBSU5fRUNDUkFNICAgICAgICAoMCkKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVTQiBDaGFyZ2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIERFQlVHX1VTQl9DSEFSR0VSCisjZGVmaW5lIERFQlVHX1VTQl9DSEFSR0VSICAgICAgICAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIERFQlVHX1VTQl9DSEFSR0VSX0ZTTQorI2RlZmluZSBERUJVR19VU0JfQ0hBUkdFUl9GU00gICAgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBERUJVR19VU0JfQ0hBUkdFUl9QUklOVAorI2RlZmluZSBERUJVR19VU0JfQ0hBUkdFUl9QUklOVCAgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBVU0JfQ0hBUkdFUl9USU1JTkdfREVCVUcKKyNkZWZpbmUgVVNCX0NIQVJHRVJfVElNSU5HX0RFQlVHICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJMRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgQkxFX1VTRV9USU1JTkdfREVCVUcKKyNkZWZpbmUgQkxFX1VTRV9USU1JTkdfREVCVUcgICAgICAgICAgICAgICAgICAgICgwKSAgICAgLy8gUmVxdWlyZXMgR1BJTyBjb25maWcuCisjZW5kaWYKKworI2lmbmRlZiBCTEVfQURBUFRFUl9ERUJVRworI2RlZmluZSBCTEVfQURBUFRFUl9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgKDApICAgICAvLyBSZXF1aXJlcyBHUElPIGNvbmZpZy4KKyNlbmRpZgorCisjaWZuZGVmIEJMRV9SWF9FTl9ERUJVRworI2RlZmluZSBCTEVfUlhfRU5fREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgKDApICAgICAvLyBSZXF1aXJlcyBHUElPIGNvbmZpZy4KKyNlbmRpZgorCisjZGVmaW5lIEJMRV9SWF9FTl9GVU5DICAgICAgICAgICAgICAgICAgICAgICAgICAoNTcpCisKKyNpZm5kZWYgQkxFX1dJTkRPV19TVEFUSVNUSUNTCisjZGVmaW5lIEJMRV9XSU5ET1dfU1RBVElTVElDUyAgICAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIEJMRV9TTEVFUF9QRVJJT0RfREVCVUcKKyNkZWZpbmUgQkxFX1NMRUVQX1BFUklPRF9ERUJVRyAgICAgICAgICAgICAgICAgICgwKSAgICAgLy8gUmVxdWlyZXMgbG9nZ2luZyBhbmQgd2luZG93IHN0YXRpc3RpY3MuCisjZW5kaWYKKworI2lmbmRlZiBCTEVfV0FLRVVQX01PTklUT1JfUEVSSU9ECisjZGVmaW5lIEJMRV9XQUtFVVBfTU9OSVRPUl9QRVJJT0QgICAgICAgICAgICAgICAoMTAyNCkKKyNlbmRpZgorCisjaWZuZGVmIEJMRV9NQVhfTUlTU0VTX0FMTE9XRUQKKyNkZWZpbmUgQkxFX01BWF9NSVNTRVNfQUxMT1dFRCAgICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgQkxFX01BWF9ERUxBWVNfQUxMT1dFRAorI2RlZmluZSBCTEVfTUFYX0RFTEFZU19BTExPV0VEICAgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGbGFzaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZm5kZWYgRkxBU0hfREVCVUcKKyNkZWZpbmUgRkxBU0hfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKSAgICAgLy8gUmVxdWlyZXMgR1BJTyBjb25maWcuCisjZW5kaWYKKworI2lmbmRlZiBfX0RCR19RU1BJX0VOQUJMRUQKKyNkZWZpbmUgX19EQkdfUVNQSV9FTkFCTEVEICAgICAgICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29tbW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWZuZGVmIENNTl9USU1JTkdfREVCVUcKKyNkZWZpbmUgQ01OX1RJTUlOR19ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICgwKSAgICAgLy8gUmVxdWlyZXMgR1BJTyBjb25maWcuCisjZW5kaWYKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1BJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmbmRlZiBTUElfVElNSU5HX0RFQlVHCisjZGVmaW5lIFNQSV9USU1JTkdfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAoMCkgICAgIC8vIFJlcXVpcmVzIEdQSU8gY29uZmlnLgorI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHUElPIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRW5hYmxlL0Rpc2FibGUgR1BJTyBwaW4gYXNzaWdubWVudCBjb25mbGljdCBkZXRlY3Rpb24KKyAqLworI2RlZmluZSBERUJVR19HUElPX0FMTE9DX01PTklUT1JfRU5BQkxFRCAgICAgICAgKDApCisKKworLyogRXhjZXB0aW9uIGhhbmRsaW5nIGRlYnVnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KKyNpZiAoRVhDRVBUSU9OX0RFQlVHID09IDApCisvLyBFeGNlcHRpb24gb2NjdXJyZWQgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBFWENFUFRJT05EQkdfTU9ERV9SRUcgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEVYQ0VQVElPTkRCR19TRVRfUkVHICAgICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRVhDRVBUSU9OREJHX1JFU0VUX1JFRyAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBFWENFUFRJT05EQkdfUElOICAgICAgICAgICAgICAgICAgICAgICAgKDApCisKKyNlbHNlCisKKy8vIFRpY2sgKFAzWzBdKQorI2RlZmluZSBFWENFUFRJT05EQkdfTU9ERV9SRUcgICAgICAgICAgICAgICAgICAgR1BJTy0+UDMwX01PREVfUkVHCisjZGVmaW5lIEVYQ0VQVElPTkRCR19TRVRfUkVHICAgICAgICAgICAgICAgICAgICBHUElPLT5QM19TRVRfREFUQV9SRUcKKyNkZWZpbmUgRVhDRVBUSU9OREJHX1JFU0VUX1JFRyAgICAgICAgICAgICAgICAgIEdQSU8tPlAzX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIEVYQ0VQVElPTkRCR19QSU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorCisjZW5kaWYKKworLyogRnVuY3Rpb25hbCBkZWJ1ZyBjb25maWd1cmF0aW9uCisgKgorICogTm90ZSB0aGF0IEdQSU8gb3ZlcmxhcHBpbmcgaXMgYWxsb3dlZCBpZiB0aGUgdHJhY2tlZCBldmVudHMgYXJlIGRpc2NyZXRlIGFuZCB0aGUgaW5pdGlhbCBHUElPCisgKiBjb25maWd1cmF0aW9uIGlzIHRoZSBzYW1lISBObyBjaGVja2luZyBpcyBwZXJmb3JtZWQgZm9yIGVycm9uZW91cyBjb25maWd1cmF0aW9uIHRob3VnaCEKKyAqCisgKi8KKyNpZiAoQ1BNX1VTRV9GVU5DVElPTkFMX0RFQlVHID09IDApCisvLyBUaWNrIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgQ1BNREJHX1RJQ0tfTU9ERV9SRUcgICAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfVElDS19TRVRfUkVHICAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19USUNLX1JFU0VUX1JFRyAgICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX1RJQ0tfUElOICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorCisvLyBFeHRlcm5hbCBXYWtlLXVwIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgQ1BNREJHX0VYVF9XS1VQX01PREVfUkVHICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfRVhUX1dLVVBfU0VUX1JFRyAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19FWFRfV0tVUF9SRVNFVF9SRUcgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX0VYVF9XS1VQX1BJTiAgICAgICAgICAgICAgICAgICAgICgwKQorCisvLyBBY3RpdmUgLyBTbGVlcCAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBoaWdoKQorI2RlZmluZSBDUE1EQkdfUE9XRVJVUF9NT0RFX1JFRyAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19QT1dFUlVQX1NFVF9SRUcgICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX1BPV0VSVVBfUkVTRVRfUkVHICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfUE9XRVJVUF9QSU4gICAgICAgICAgICAgICAgICAgICAgKDApCisKKyNlbHNlCisKKy8vIFRpY2sgKFAyWzNdKQorI2RlZmluZSBDUE1EQkdfVElDS19NT0RFX1JFRyAgICAgICAgICAgICAgICAgICAgR1BJTy0+UDIzX01PREVfUkVHCisjZGVmaW5lIENQTURCR19USUNLX1NFVF9SRUcgICAgICAgICAgICAgICAgICAgICBHUElPLT5QMl9TRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX1RJQ0tfUkVTRVRfUkVHICAgICAgICAgICAgICAgICAgIEdQSU8tPlAyX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19USUNLX1BJTiAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorCisvLyBFeHRlcm5hbCBXYWtlLXVwIChQM1swXSkKKyNkZWZpbmUgQ1BNREJHX0VYVF9XS1VQX01PREVfUkVHICAgICAgICAgICAgICAgIEdQSU8tPlAzMF9NT0RFX1JFRworI2RlZmluZSBDUE1EQkdfRVhUX1dLVVBfU0VUX1JFRyAgICAgICAgICAgICAgICAgR1BJTy0+UDNfU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19FWFRfV0tVUF9SRVNFVF9SRUcgICAgICAgICAgICAgICBHUElPLT5QM19SRVNFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfRVhUX1dLVVBfUElOICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKworLy8gQWN0aXZlIC8gU2xlZXAgKFAxWzRdKQorI2RlZmluZSBDUE1EQkdfUE9XRVJVUF9NT0RFX1JFRyAgICAgICAgICAgICAgICAgR1BJTy0+UDE0X01PREVfUkVHCisjZGVmaW5lIENQTURCR19QT1dFUlVQX1NFVF9SRUcgICAgICAgICAgICAgICAgICBHUElPLT5QMV9TRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX1BPV0VSVVBfUkVTRVRfUkVHICAgICAgICAgICAgICAgIEdQSU8tPlAxX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19QT1dFUlVQX1BJTiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorI2VuZGlmCisKKy8qIFRpbWluZyBkZWJ1ZyBjb25maWd1cmF0aW9uCisgKgorICogTm90ZSB0aGF0IGluIHRoaXMgbW9kZSB0aGUgcGFkIGxhdGNoZXMgYXJlIHJlbW92ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiByZXN1bWVzIGZyb20KKyAqIHRoZSBfX1dGSSgpLiBCZWNhdXNlIG9mIHRoaXMsIGl0IGlzIG5vdCBhZHZpc2VkIHRvIHVzZSB0aGlzIGZlYXR1cmUgaW4gcHJvamVjdHMgdGhhdCB1c2UgR1BJT1MuCisgKiBOZXZlcnRoZWxlc3MsIGluIGNhc2UgaXQgaXMgdXNlZCwgbWFrZSBzdXJlIHRoYXQgdGhlICJwZXJpcGhlcmFsIGluaXRpYWxpemF0aW9uIiBpcyBhbHNvIGRvbmUKKyAqIGF0IHRoYXQgcG9pbnQsIG1vZGlmeWluZyBzeXNfcG93ZXJfbWdyLmMgYWNjb3JkaW5nbHkuCisgKgorICogTm90ZSBhbHNvIHRoYXQgR1BJTyBvdmVybGFwcGluZyBpcyBhbGxvd2VkIGlmIHRoZSB0cmFja2VkIGV2ZW50cyBhcmUgZGlzY3JldGUgYW5kIHRoZSBpbml0aWFsCisgKiBHUElPIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHNhbWUhIE5vIGNoZWNraW5nIGlzIHBlcmZvcm1lZCBmb3IgZXJyb25lb3VzIGNvbmZpZ3VyYXRpb24gdGhvdWdoIQorICoKKyAqLworI2lmIChDUE1fVVNFX1RJTUlOR19ERUJVRyA9PSAwKQorLy8gQ1BNOiBzbGVlcCBvciBpZGxlIGVudHJ5ICh1bnRpbCBfX1dGSSgpIGlzIGNhbGxlZCkgKGluaXRpYWwgY29uZmlndXJhdGlvbjogaGlnaCkKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VOVEVSX01PREVfUkVHICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfU0xFRVBfRU5URVJfU0VUX1JFRyAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19TTEVFUF9FTlRFUl9SRVNFVF9SRUcgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VOVEVSX1BJTiAgICAgICAgICAgICAgICAgICgwKQorCisvLyBDUE06IHNsZWVwIG9yIGlkbGUgZXhpdCAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIENQTURCR19TTEVFUF9FWElUX01PREVfUkVHICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VYSVRfU0VUX1JFRyAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfU0xFRVBfRVhJVF9SRVNFVF9SRUcgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19TTEVFUF9FWElUX1BJTiAgICAgICAgICAgICAgICAgICAoMCkKKworLy8gTG93IGNsb2NrcyAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIENQTURCR19MT1dFUl9DTE9DS1NfTU9ERV9SRUcgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX0xPV0VSX0NMT0NLU19TRVRfUkVHICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfTE9XRVJfQ0xPQ0tTX1JFU0VUX1JFRyAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19MT1dFUl9DTE9DS1NfUElOICAgICAgICAgICAgICAgICAoMCkKKworLy8gWFRBTDE2TSBzZXR0bGluZyAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIENQTURCR19YVEFMMTZNX1NFVFRMRURfTU9ERV9SRUcgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX1hUQUwxNk1fU0VUVExFRF9TRVRfUkVHICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfWFRBTDE2TV9TRVRUTEVEX1JFU0VUX1JFRyAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19YVEFMMTZNX1NFVFRMRURfUElOICAgICAgICAgICAgICAoMCkKKworI2Vsc2UKKworLy8gQ1BNOiBzbGVlcCBvciBpZGxlIGVudHJ5ICh1bnRpbCBfX1dGSSgpIGlzIGNhbGxlZCkgKFAxWzddKQorI2RlZmluZSBDUE1EQkdfU0xFRVBfRU5URVJfTU9ERV9SRUcgICAgICAgICAgICAgR1BJTy0+UDE3X01PREVfUkVHCisjZGVmaW5lIENQTURCR19TTEVFUF9FTlRFUl9TRVRfUkVHICAgICAgICAgICAgICBHUElPLT5QMV9TRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VOVEVSX1JFU0VUX1JFRyAgICAgICAgICAgIEdQSU8tPlAxX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19TTEVFUF9FTlRFUl9QSU4gICAgICAgICAgICAgICAgICAoMSA8PCA3KQorCisvLyBDUE06IHNsZWVwIG9yIGlkbGUgZXhpdCAoUDFbNl0pCisjZGVmaW5lIENQTURCR19TTEVFUF9FWElUX01PREVfUkVHICAgICAgICAgICAgICBHUElPLT5QMTZfTU9ERV9SRUcKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VYSVRfU0VUX1JFRyAgICAgICAgICAgICAgIEdQSU8tPlAxX1NFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfU0xFRVBfRVhJVF9SRVNFVF9SRUcgICAgICAgICAgICAgR1BJTy0+UDFfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VYSVRfUElOICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisKKy8vIExvdyBjbG9ja3MgKFAxWzVdKQorI2RlZmluZSBDUE1EQkdfTE9XRVJfQ0xPQ0tTX01PREVfUkVHICAgICAgICAgICAgR1BJTy0+UDE1X01PREVfUkVHCisjZGVmaW5lIENQTURCR19MT1dFUl9DTE9DS1NfU0VUX1JFRyAgICAgICAgICAgICBHUElPLT5QMV9TRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX0xPV0VSX0NMT0NLU19SRVNFVF9SRUcgICAgICAgICAgIEdQSU8tPlAxX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19MT1dFUl9DTE9DS1NfUElOICAgICAgICAgICAgICAgICAoMSA8PCA1KQorCisvLyBYVEFMMTZNIHNldHRsaW5nIChQMVs0XSkKKyNkZWZpbmUgQ1BNREJHX1hUQUwxNk1fU0VUVExFRF9NT0RFX1JFRyAgICAgICAgIEdQSU8tPlAxNF9NT0RFX1JFRworI2RlZmluZSBDUE1EQkdfWFRBTDE2TV9TRVRUTEVEX1NFVF9SRUcgICAgICAgICAgR1BJTy0+UDFfU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19YVEFMMTZNX1NFVFRMRURfUkVTRVRfUkVHICAgICAgICBHUElPLT5QMV9SRVNFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfWFRBTDE2TV9TRVRUTEVEX1BJTiAgICAgICAgICAgICAgKDEgPDwgNCkKKyNlbmRpZgorCisjaWYgKEJMRV9VU0VfVElNSU5HX0RFQlVHID09IDApCisvLyBCTEUgTFAgJiBHRU4gaXJxcyAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIENQTURCR19CTEVfSVJRX01PREVfUkVHICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX0JMRV9JUlFfU0VUX1JFRyAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfQkxFX0lSUV9SRVNFVF9SRUcgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19CTEVfSVJRX1BJTiAgICAgICAgICAgICAgICAgICAgICAoMCkKKworLy8gQkxFIHNsZWVwIHByZXBhcmUgKGZpbmFsIHN0YWdlKSAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIENQTURCR19CTEVfU0xFRVBfRU5UUllfTU9ERV9SRUcgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX0JMRV9TTEVFUF9FTlRSWV9TRVRfUkVHICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfQkxFX1NMRUVQX0VOVFJZX1JFU0VUX1JFRyAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19CTEVfU0xFRVBfRU5UUllfUElOICAgICAgICAgICAgICAoMCkKKworLy8gQkxFIExQIGlycSBzaWduYWwgKGRpYWdub3N0aWNzKSAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiB1bmtub3duKQorI2RlZmluZSBDUE1EQkdfQkxFX0xQX0lSUV9NT0RFX1JFRyAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisKKyNlbHNlCisKKy8vIEJMRSBMUCAmIEdFTiBJU1JzIChQMVs0XSkKKyNkZWZpbmUgQ1BNREJHX0JMRV9JUlFfTU9ERV9SRUcgICAgICAgICAgICAgICAgIEdQSU8tPlAxNF9NT0RFX1JFRworI2RlZmluZSBDUE1EQkdfQkxFX0lSUV9TRVRfUkVHICAgICAgICAgICAgICAgICAgR1BJTy0+UDFfU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19CTEVfSVJRX1JFU0VUX1JFRyAgICAgICAgICAgICAgICBHUElPLT5QMV9SRVNFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfQkxFX0lSUV9QSU4gICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKworLy8gQkxFIHNsZWVwIHByZXBhcmUgKGZpbmFsIHN0YWdlKSAoUDFbNF0pCisjZGVmaW5lIENQTURCR19CTEVfU0xFRVBfRU5UUllfTU9ERV9SRUcgICAgICAgICBHUElPLT5QMTRfTU9ERV9SRUcKKyNkZWZpbmUgQ1BNREJHX0JMRV9TTEVFUF9FTlRSWV9TRVRfUkVHICAgICAgICAgIEdQSU8tPlAxX1NFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfQkxFX1NMRUVQX0VOVFJZX1JFU0VUX1JFRyAgICAgICAgR1BJTy0+UDFfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX0JMRV9TTEVFUF9FTlRSWV9QSU4gICAgICAgICAgICAgICgxIDw8IDQpCisKKy8vIEJMRSBMUCBpcnEgc2lnbmFsIChkaWFnbm9zdGljcykgKFAyWzNdKQorI2RlZmluZSBDUE1EQkdfQkxFX0xQX0lSUV9NT0RFX1JFRyAgICAgICAgICAgICAgR1BJTy0+UDIzX01PREVfUkVHCisjZW5kaWYKKworI2lmIChCTEVfQURBUFRFUl9ERUJVRyA9PSAwKQorI2RlZmluZSBCTEVCREdfQURBUFRFUl9NT0RFX1JFRyAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEJMRUJER19BREFQVEVSX1NFVF9SRUcgICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQkxFQkRHX0FEQVBURVJfUkVTRVRfUkVHICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBCTEVCREdfQURBUFRFUl9QSU4gICAgICAgICAgICAgICAgICAgICAgKDApCisKKyNlbHNlCisKKyNkZWZpbmUgQkxFQkRHX0FEQVBURVJfTU9ERV9SRUcgICAgICAgICAgICAgICAgIEdQSU8tPlAzMF9NT0RFX1JFRworI2RlZmluZSBCTEVCREdfQURBUFRFUl9TRVRfUkVHICAgICAgICAgICAgICAgICAgR1BJTy0+UDNfU0VUX0RBVEFfUkVHCisjZGVmaW5lIEJMRUJER19BREFQVEVSX1JFU0VUX1JFRyAgICAgICAgICAgICAgICBHUElPLT5QM19SRVNFVF9EQVRBX1JFRworI2RlZmluZSBCTEVCREdfQURBUFRFUl9QSU4gICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyNlbmRpZgorCisjaWYgKEJMRV9SWF9FTl9ERUJVRyA9PSAwKQorI2RlZmluZSBCTEVCREdfUlhFTl9NT0RFX1JFRyAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEJMRUJER19SWEVOX1NFVF9SRUcgICAgICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQkxFQkRHX1JYRU5fUkVTRVRfUkVHICAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBCTEVCREdfUlhFTl9QSU4gICAgICAgICAgICAgICAgICAgICAgICAgKDApCisKKyNlbHNlCisKKyNkZWZpbmUgQkxFQkRHX1JYRU5fTU9ERV9SRUcgICAgICAgICAgICAgICAgICAgIEdQSU8tPlAxMl9NT0RFX1JFRworI2RlZmluZSBCTEVCREdfUlhFTl9TRVRfUkVHICAgICAgICAgICAgICAgICAgICAgR1BJTy0+UDFfU0VUX0RBVEFfUkVHCisjZGVmaW5lIEJMRUJER19SWEVOX1JFU0VUX1JFRyAgICAgICAgICAgICAgICAgICBHUElPLT5QMV9SRVNFVF9EQVRBX1JFRworI2RlZmluZSBCTEVCREdfUlhFTl9QSU4gICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNlbmRpZgorCisjaWYgKFVTQl9DSEFSR0VSX1RJTUlOR19ERUJVRyA9PSAwKQorLy8gQ0hSRzogSW5zaWRlIGNyaXRpY2FsIHNlY3Rpb24gKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBDSFJHREJHX0NSSVRJQ0FMX1NFQ1RJT05fTU9ERV9SRUcgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENIUkdEQkdfQ1JJVElDQUxfU0VDVElPTl9TRVRfUkVHICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ0hSR0RCR19DUklUSUNBTF9TRUNUSU9OX1JFU0VUX1JFRyAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDSFJHREJHX0NSSVRJQ0FMX1NFQ1RJT05fUElOICAgICAgICAgICAgKDApCisKKy8vIENIUkc6IEZTTSB0YXNrIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgQ0hSR0RCR19GU01fVEFTS19NT0RFX1JFRyAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDSFJHREJHX0ZTTV9UQVNLX1NFVF9SRUcgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENIUkdEQkdfRlNNX1RBU0tfUkVTRVRfUkVHICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ0hSR0RCR19GU01fVEFTS19QSU4gICAgICAgICAgICAgICAgICAgICgwKQorCisvLyBDSFJHOiBDb250cm9sIHRhc2sgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBDUE1EQkdfQ09OVFJPTF9UQVNLX01PREVfUkVHICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19DT05UUk9MX1RBU0tfU0VUX1JFRyAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX0NPTlRST0xfVEFTS19SRVNFVF9SRUcgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfQ09OVFJPTF9UQVNLX1BJTiAgICAgICAgICAgICAgICAgKDApCisKKyNlbHNlCisKKy8vIENIUkc6IEluc2lkZSBjcml0aWNhbCBzZWN0aW9uIChQM1syXSkKKyNkZWZpbmUgQ0hSR0RCR19DUklUSUNBTF9TRUNUSU9OX01PREVfUkVHICAgICAgIEdQSU8tPlAzMl9NT0RFX1JFRworI2RlZmluZSBDSFJHREJHX0NSSVRJQ0FMX1NFQ1RJT05fU0VUX1JFRyAgICAgICAgR1BJTy0+UDNfU0VUX0RBVEFfUkVHCisjZGVmaW5lIENIUkdEQkdfQ1JJVElDQUxfU0VDVElPTl9SRVNFVF9SRUcgICAgICBHUElPLT5QM19SRVNFVF9EQVRBX1JFRworI2RlZmluZSBDSFJHREJHX0NSSVRJQ0FMX1NFQ1RJT05fUElOICAgICAgICAgICAgKDEgPDwgMikKKworLy8gQ0hSRzogRlNNIHRhc2sgKFAzWzNdKQorI2RlZmluZSBDSFJHREJHX0ZTTV9UQVNLX01PREVfUkVHICAgICAgICAgICAgICAgR1BJTy0+UDMzX01PREVfUkVHCisjZGVmaW5lIENIUkdEQkdfRlNNX1RBU0tfU0VUX1JFRyAgICAgICAgICAgICAgICBHUElPLT5QM19TRVRfREFUQV9SRUcKKyNkZWZpbmUgQ0hSR0RCR19GU01fVEFTS19SRVNFVF9SRUcgICAgICAgICAgICAgIEdQSU8tPlAzX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIENIUkdEQkdfRlNNX1RBU0tfUElOICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorCisvLyBDSFJHOiBDb250cm9sIHRhc2sgKFAzWzRdKQorI2RlZmluZSBDUE1EQkdfQ09OVFJPTF9UQVNLX01PREVfUkVHICAgICAgICAgICAgR1BJTy0+UDM0X01PREVfUkVHCisjZGVmaW5lIENQTURCR19DT05UUk9MX1RBU0tfU0VUX1JFRyAgICAgICAgICAgICBHUElPLT5QM19TRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX0NPTlRST0xfVEFTS19SRVNFVF9SRUcgICAgICAgICAgIEdQSU8tPlAzX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19DT05UUk9MX1RBU0tfUElOICAgICAgICAgICAgICAgICAoMSA8PCA0KQorCisjZW5kaWYKKworI2lmIChDTU5fVElNSU5HX0RFQlVHID09IDApCisvLyBDb21tb246IEluc2lkZSBjcml0aWNhbCBzZWN0aW9uIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgQ01OREJHX0NSSVRJQ0FMX1NFQ1RJT05fTU9ERV9SRUcgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENNTkRCR19DUklUSUNBTF9TRUNUSU9OX1NFVF9SRUcgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDTU5EQkdfQ1JJVElDQUxfU0VDVElPTl9SRVNFVF9SRUcgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ01OREJHX0NSSVRJQ0FMX1NFQ1RJT05fUElOICAgICAgICAgICAgKDApCisKKyNlbHNlCisKKy8vIENvbW1vbjogSW5zaWRlIGNyaXRpY2FsIHNlY3Rpb24gKFA0WzZdKQorI2RlZmluZSBDTU5EQkdfQ1JJVElDQUxfU0VDVElPTl9NT0RFX1JFRyAgICAgICAgR1BJTy0+UDQwX01PREVfUkVHCisjZGVmaW5lIENNTkRCR19DUklUSUNBTF9TRUNUSU9OX1NFVF9SRUcgICAgICAgICBHUElPLT5QNF9TRVRfREFUQV9SRUcKKyNkZWZpbmUgQ01OREJHX0NSSVRJQ0FMX1NFQ1RJT05fUkVTRVRfUkVHICAgICAgIEdQSU8tPlA0X1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIENNTkRCR19DUklUSUNBTF9TRUNUSU9OX1BJTiAgICAgICAgICAgICAoMSA8PCAwKQorCisjZW5kaWYKKworCisvKiBGbGFzaCBkZWJ1ZyBjb25maWd1cmF0aW9uCisgKgorICovCisjaWYgKEZMQVNIX0RFQlVHID09IDApCisvLyBXcml0ZSBwYWdlIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX01PREVfUkVHICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfU0VUX1JFRyAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19SRVNFVF9SRUcgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1BJTiAgICAgICAgICAgICAgICAgICgwKQorCisvLyBQcm9ncmFtIHBhZ2Ugd2FpdCBsb29wIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1dMX01PREVfUkVHICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfU0VUX1JFRyAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19XTF9SRVNFVF9SRUcgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1dMX1BJTiAgICAgICAgICAgICAgICgwKQorCisvLyBQcm9ncmFtIHBhZ2Ugd2FpdCBsb29wIC0gcGVuZGluZyBpcnEgY2hlY2sgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfSVJRX01PREVfUkVHICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19XTF9JUlFfU0VUX1JFRyAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1dMX0lSUV9SRVNFVF9SRUcgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfSVJRX1BJTiAgICAgICAgICAgKDApCisKKy8vIFN1c3BlbmQgb3AgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBGTEFTSERCR19TVVNQRU5EX01PREVfUkVHICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1NVU1BFTkRfU0VUX1JFRyAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfU1VTUEVORF9SRVNFVF9SRUcgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19TVVNQRU5EX1BJTiAgICAgICAgICAgICAgICAgICAgKDApCisKKy8vIEVyYXNlIHNlY3RvciBjbWQgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBGTEFTSERCR19TRUNUT1JfRVJBU0VfTU9ERV9SRUcgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1NFQ1RPUl9FUkFTRV9TRVRfUkVHICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfU0VDVE9SX0VSQVNFX1JFU0VUX1JFRyAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19TRUNUT1JfRVJBU0VfUElOICAgICAgICAgICAgICAgKDApCisKKy8vIE5vdGlmeSB0YXNrIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgRkxBU0hEQkdfVEFTS19OT1RJRllfTU9ERV9SRUcgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19UQVNLX05PVElGWV9TRVRfUkVHICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1RBU0tfTk9USUZZX1JFU0VUX1JFRyAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfVEFTS19OT1RJRllfUElOICAgICAgICAgICAgICAgICgwKQorCisvLyBTdXNwZW5kIGFjdGlvbiAobG93IGxldmVsKSAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIEZMQVNIREJHX1NVU1BFTkRfQUNUSU9OX01PREVfUkVHICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfU1VTUEVORF9BQ1RJT05fU0VUX1JFRyAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19TVVNQRU5EX0FDVElPTl9SRVNFVF9SRUcgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1NVU1BFTkRfQUNUSU9OX1BJTiAgICAgICAgICAgICAoMCkKKworLy8gUmVzdW1lIG9wIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgRkxBU0hEQkdfUkVTVU1FX01PREVfUkVHICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19SRVNVTUVfU0VUX1JFRyAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1JFU1VNRV9SRVNFVF9SRUcgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfUkVTVU1FX1BJTiAgICAgICAgICAgICAgICAgICAgICgwKQorCisjZWxzZQorCisvLyBXcml0ZSBwYWdlIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX01PREVfUkVHICAgICAgICAgICAgIEdQSU8tPlAzMF9NT0RFX1JFRworI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfU0VUX1JFRyAgICAgICAgICAgICAgR1BJTy0+UDNfU0VUX0RBVEFfUkVHCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19SRVNFVF9SRUcgICAgICAgICAgICBHUElPLT5QM19SRVNFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfUElOICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKworLy8gUHJvZ3JhbSBwYWdlIHdhaXQgbG9vcCAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19XTF9NT0RFX1JFRyAgICAgICAgICBHUElPLT5QMzFfTU9ERV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1dMX1NFVF9SRUcgICAgICAgICAgIEdQSU8tPlAzX1NFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfUkVTRVRfUkVHICAgICAgICAgR1BJTy0+UDNfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1dMX1BJTiAgICAgICAgICAgICAgICgxIDw8IDEpCisKKy8vIFByb2dyYW0gcGFnZSB3YWl0IGxvb3AgLSBwZW5kaW5nIGlycSBjaGVjayAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19XTF9JUlFfTU9ERV9SRUcgICAgICBHUElPLT5QMzJfTU9ERV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1dMX0lSUV9TRVRfUkVHICAgICAgIEdQSU8tPlAzX1NFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfSVJRX1JFU0VUX1JFRyAgICAgR1BJTy0+UDNfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1dMX0lSUV9QSU4gICAgICAgICAgICgxIDw8IDIpCisKKy8vIFN1c3BlbmQgb3AgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBGTEFTSERCR19TVVNQRU5EX01PREVfUkVHICAgICAgICAgICAgICAgR1BJTy0+UDMzX01PREVfUkVHCisjZGVmaW5lIEZMQVNIREJHX1NVU1BFTkRfU0VUX1JFRyAgICAgICAgICAgICAgICBHUElPLT5QM19TRVRfREFUQV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfU1VTUEVORF9SRVNFVF9SRUcgICAgICAgICAgICAgIEdQSU8tPlAzX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIEZMQVNIREJHX1NVU1BFTkRfUElOICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorCisvLyBFcmFzZSBzZWN0b3IgY21kIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgRkxBU0hEQkdfU0VDVE9SX0VSQVNFX01PREVfUkVHICAgICAgICAgIEdQSU8tPlAzNF9NT0RFX1JFRworI2RlZmluZSBGTEFTSERCR19TRUNUT1JfRVJBU0VfU0VUX1JFRyAgICAgICAgICAgR1BJTy0+UDNfU0VUX0RBVEFfUkVHCisjZGVmaW5lIEZMQVNIREJHX1NFQ1RPUl9FUkFTRV9SRVNFVF9SRUcgICAgICAgICBHUElPLT5QM19SRVNFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19TRUNUT1JfRVJBU0VfUElOICAgICAgICAgICAgICAgKDEgPDwgNCkKKworLy8gTm90aWZ5IHRhc2sgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBGTEFTSERCR19UQVNLX05PVElGWV9NT0RFX1JFRyAgICAgICAgICAgR1BJTy0+UDM1X01PREVfUkVHCisjZGVmaW5lIEZMQVNIREJHX1RBU0tfTk9USUZZX1NFVF9SRUcgICAgICAgICAgICBHUElPLT5QM19TRVRfREFUQV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfVEFTS19OT1RJRllfUkVTRVRfUkVHICAgICAgICAgIEdQSU8tPlAzX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIEZMQVNIREJHX1RBU0tfTk9USUZZX1BJTiAgICAgICAgICAgICAgICAoMSA8PCA1KQorCisvLyBTdXNwZW5kIGFjdGlvbiAobG93IGxldmVsKSAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIEZMQVNIREJHX1NVU1BFTkRfQUNUSU9OX01PREVfUkVHICAgICAgICBHUElPLT5QMzZfTU9ERV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfU1VTUEVORF9BQ1RJT05fU0VUX1JFRyAgICAgICAgIEdQSU8tPlAzX1NFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19TVVNQRU5EX0FDVElPTl9SRVNFVF9SRUcgICAgICAgR1BJTy0+UDNfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfU1VTUEVORF9BQ1RJT05fUElOICAgICAgICAgICAgICgxIDw8IDYpCisKKy8vIFJlc3VtZSBvcCAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIEZMQVNIREJHX1JFU1VNRV9NT0RFX1JFRyAgICAgICAgICAgICAgICBHUElPLT5QMzdfTU9ERV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfUkVTVU1FX1NFVF9SRUcgICAgICAgICAgICAgICAgIEdQSU8tPlAzX1NFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19SRVNVTUVfUkVTRVRfUkVHICAgICAgICAgICAgICAgR1BJTy0+UDNfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfUkVTVU1FX1BJTiAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisKKyNlbmRpZgorCisKKy8qIEVuYWJsZXMgdGhlIGxvZ2dpbmcgb2Ygc3RhY2sgKFJXKSBoZWFwIG1lbW9yaWVzIHVzYWdlLgorICoKKyAqIFRoZSBmZWF0dXJlIHNoYWxsIG9ubHkgYmUgZW5hYmxlZCBpbiBkZXZlbG9wbWVudC9kZWJ1ZyBtb2RlCisgKi8KKyNpZm5kZWYgZGdfY29uZmlnTE9HX0JMRV9TVEFDS19NRU1fVVNBR0UKKyNkZWZpbmUgZGdfY29uZmlnTE9HX0JMRV9TVEFDS19NRU1fVVNBR0UgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlcyBCTEUgZGlhZ25vc3RpYyBzaWduYWxzLgorICoKKyAqIFRoZXJlIGFyZSA0IGRpYWdub3N0aWMgc2lnbmFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgdXNlciBjYW4gY2hvb3NlIGZyb20uIFRvIGVuYWJsZSBhIHNwZWNpZmljCisgKiBjb25maWd1cmF0aW9uLCBzaW1wbHkgZGVmaW5lIGRnX2NvbmZpZ0JMRV9ESUFHTl9DT05GSUcgd2l0aCB0aGUgcGVyc3BlY3RpdmUgY29uZmlndXJhdGlvbiBJRC4KKyAqIENvbmZpZ3VyYXRpb24gSUQgMCBkaXNhYmxlcyBCTEUgZGlhZ25vc3RpY3MuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8IFNpZ25hbCAgICAgfCBQaW4gICB8IENvbmZpZyAxICAgICAgICAgICAgICB8IENvbmZpZyAyICAgICAgfCBDb25maWcgMyAgICAgICAgICAgICAgfCBDb25maWcgNCAgICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBibGVfZGlhZzAgIHwgUDJfMCAgfCAtICAgICAgICAgICAgICAgICAgICAgfCAtICAgICAgICAgICAgIHwgLSAgICAgICAgICAgICAgICAgICAgIHwgLSAgICAgICAgICAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgYmxlX2RpYWcxICB8IFAyXzEgIHwgLSAgICAgICAgICAgICAgICAgICAgIHwgLSAgICAgICAgICAgICB8IC0gICAgICAgICAgICAgICAgICAgICB8IC0gICAgICAgICAgICAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8IGJsZV9kaWFnMiAgfCBQMl8yICB8IC0gICAgICAgICAgICAgICAgICAgICB8IC0gICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICAgICAgfCAtICAgICAgICAgICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBibGVfZGlhZzMgIHwgUDFfMCAgfCAtICAgICAgICAgICAgICAgICAgICAgfCAtICAgICAgICAgICAgIHwgLSAgICAgICAgICAgICAgICAgICAgIHwgLSAgICAgICAgICAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgYmxlX2RpYWc0ICB8IFAxXzEgIHwgYmxlX3NscF9pcnEgICAgICAgICAgIHwgcmFkY250bF90eGVuICB8IHJhZGNudGxfdHhlbiAgICAgICAgICB8IHJhZGNudGxfdHhlbiAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8IGJsZV9kaWFnNSAgfCBQMV8yICB8IGJsZV9jc2NudF9pcnEgICAgICAgICB8IHJhZGNudGxfcnhlbiAgfCByZl90eF9lbiAgICAgICAgICAgICAgfCByYWRjbnRsX3J4ZW4gIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBibGVfZGlhZzYgIHwgUDFfMyAgfCBibGVfZmluZXRndGltX2lycSAgICAgfCByZl9yeF9lbiAgICAgIHwgcmZfdHhfZGF0YSAgICAgICAgICAgIHwgYmxlX3J4X2lycSAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgYmxlX2RpYWc3ICB8IFAyXzMgIHwgYmxlX2V2ZW50X2lycSAgICAgICAgIHwgcmZfcnhfZGF0YSAgICB8IHJmX3R4X2RhdGFfdmFsaWQgICAgICB8IGJsZV9ldmVudF9pcnEgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQkxFX0RJQUdOX0NPTkZJRworI2RlZmluZSBkZ19jb25maWdCTEVfRElBR05fQ09ORklHICAgICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBCU1BfREVCVUdfSF8gKi8KKworLyoqCitcfQorXH0KK1x9CisqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvY29uZmlnL2JzcF9kZWZhdWx0cy5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvY29uZmlnL2JzcF9kZWZhdWx0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ODI2OGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9jb25maWcvYnNwX2RlZmF1bHRzLmgKQEAgLTAsMCArMSwyNDc1IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIEJTUF9DT05GSUcKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBCU1BfQ09ORklHX0RFRkFVTFRTCisgKgorICogXGJyaWVmIEJvYXJkIHN1cHBvcnQgcGFja2FnZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdmFsdWVzCisgKgorICogVGhlIGZvbGxvd2luZyB0YWdzIGFyZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSB0eXBlIG9mIGVhY2ggY29uZmlndXJhdGlvbiBvcHRpb24uCisgKgorICogLSAqKlxic3BfY29uZmlnX29wdGlvbl9idWlsZCoqICAgICAgIDogVG8gYmUgY2hhbmdlZCBvbmx5IGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcHJvamVjdCAoIkRlZmluZWQgc3ltYm9scyAtRCIgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwcm9jZXNzb3Igb3B0aW9ucykuCisgKgorICogLSAqKlxic3BfY29uZmlnX29wdGlvbl9hcHAqKiAgICAgICAgIDogVG8gYmUgY2hhbmdlZCBvbmx5IGluIHRoZSBjdXN0b21fY29uZmlnKi5oCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0IGZpbGVzLgorICoKKyAqIC0gKipcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHkqKiA6IFRvIGJlIGNoYW5nZWQgb25seSBieSBhbiBleHBlcnQgdXNlci4KKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGJzcF9kZWZhdWx0cy5oCisgKgorICogQGJyaWVmIEJvYXJkIFN1cHBvcnQgUGFja2FnZS4gU3lzdGVtIENvbmZpZ3VyYXRpb24gZmlsZSBkZWZhdWx0IHZhbHVlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIEJTUF9ERUZBVUxUU19IXworI2RlZmluZSBCU1BfREVGQVVMVFNfSF8KKworCisKKworLyoqCisgKiBcYWRkdG9ncm91cCBQT1dFUl9TRVRUSU5HUworICoKKyAqIFxicmllZiBQb3dlciBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgKiBceworICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3dlciBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBUaGlzIGlzIGEgZGVwcmVjYXRlZCBjb25maWd1cmF0aW9uIGhlbmNlIG5vdCB0byBiZSBkZWZpbmVkIGJ5IGFuIGFwcGxpY2F0aW9uLgorICogVGhlcmUncyBhIHNpbmdsZSBwb3dlciBjb25maWd1cmF0aW9uIHNldHVwLgorICovCisjaWZkZWYgZGdfY29uZmlnUE9XRVJfQ09ORklHCisjZXJyb3IgIkNvbmZpZ3VyYXRpb24gb3B0aW9uIGRnX2NvbmZpZ1BPV0VSX0NPTkZJRyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgc3lzdGVtIHdpbGwgZ28gdG8gc2xlZXAgYW5kIG5ldmVyIGV4aXQgYWxsb3dpbmcgZm9yIHRoZSBzbGVlcCBjdXJyZW50IHRvIGJlCisgKiAgICAgICAgbWVhc3VyZWQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1RFU1RNT0RFX01FQVNVUkVfU0xFRVBfQ1VSUkVOVAorI2RlZmluZSBkZ19jb25maWdURVNUTU9ERV9NRUFTVVJFX1NMRUVQX0NVUlJFTlQgKDApCisjZW5kaWYKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfQorICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgSU1BR0VfQ09ORklHVVJBVElPTl9TRVRUSU5HUworICoKKyAqIFxicmllZiBJbWFnZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorICogXHsKKyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbWFnZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxicmllZiBUaGUgY2hpcCByZXZpc2lvbiB0aGF0IHdlIGNvbXBpbGUgZm9yLgorICoKKyAqIFxub3RlIFRoZXJlIGlzIG5vIGRlZmF1bHQgdmFsdWUgZGVmaW5lZCBmb3IgdGhlIHRhcmdldCBjaGlwIHJldmlzaW9uLiBUaGUgYXBwbGljYXRpb24gbXVzdFxuCisgKiAgICAgICBuZWl0aGVyIGV4cGxpY2l0bHkgc2V0IGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWLCBub3Igc2V0XG4KKyAqICAgICAgIGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OIHRvIDEuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2J1aWxkLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFVgorIyAgICAgICBpZiBkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiAhPSAxCisjICAgICAgICAgICAgICAgZXJyb3IgIllvdSBtdXN0IGVpdGhlciBkZWZpbmUgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3Igc2V0IGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OIHRvIDEiCisjICAgICAgIGVuZGlmCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgVGhlIGNoaXAgc3RlcHBpbmcgdGhhdCB3ZSBjb21waWxlIGZvci4KKyAqCisgKiBcbm90ZSBUaGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlIGRlZmluZWQgZm9yIHRoZSB0YXJnZXQgY2hpcCByZXZpc2lvbi4gVGhlIGFwcGxpY2F0aW9uIG11c3RcbgorICogICAgICAgZWl0aGVyIGV4cGxpY2l0bHkgc2V0IGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfU1RFUCBub3Igc2V0XG4KKyAqICAgICAgIGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OIHRvIDEuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2J1aWxkLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1NURVAKKyMgICAgICAgaWYgZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gIT0gMQorIyAgICAgICAgICAgICAgIGVycm9yICJZb3UgbXVzdCBlaXRoZXIgZGVmaW5lIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfU1RFUCBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBvciBzZXQgZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gdG8gMSIKKyMgICAgICAgZW5kaWYKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBUaGUgbW90aGVyYm9hcmQgcmV2aXNpb24gd2UgY29tcGlsZSBmb3IuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9NQl9SRVYKKyNkZWZpbmUgZGdfY29uZmlnQkxBQ0tfT1JDQV9NQl9SRVYgICAgICBCTEFDS19PUkNBX01CX1JFVl9ECisjZW5kaWYKKworLyoKKyAqIFRoaXMgaXMgYSBkZXByZWNhdGVkIGNvbmZpZ3VyYXRpb24gaGVuY2Ugbm90IHRvIGJlIGRlZmluZWQgYnkgYW4gYXBwbGljYXRpb24uCisgKiBUaGUgdmFsdWVzIG9mIHRoZSB0cmltIHJlZ2lzdGVycyBhcmUgbm90IGFueW1vcmUgdGFrZW4gZnJvbSB0aGUgRmxhc2guCisgKgorICovCisjaWZkZWYgIGRnX2NvbmZpZ0NPTkZJR19IRUFERVJfSU5fRkxBU0gKKyNlcnJvciAiQ29uZmlndXJhdGlvbiBvcHRpb24gZGdfY29uZmlnQ09ORklHX0hFQURFUl9JTl9GTEFTSCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBDb250cm9scyBob3cgdGhlIGltYWdlIGlzIGJ1aWx0LgorICogIC0gREVWRUxPUE1FTlRfTU9ERTogdmFyaW91cyBkZWJ1Z2dpbmcgb3B0aW9ucyBhcmUgaW5jbHVkZWQuCisgKiAgLSBQUk9EVUNUSU9OX01PREU6IGFsbCBjb2RlIHVzZWQgZm9yIGRlYnVnZ2luZyBpcyByZW1vdmVkLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdJTUFHRV9TRVRVUAorI2RlZmluZSBkZ19jb25maWdJTUFHRV9TRVRVUCAgICAgICAgICAgIERFVkVMT1BNRU5UX01PREUKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgZGVsYXkgYXQgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbiBvZiB0aGUgUmVzZXRfSGFuZGxlciBpcyBza2lwcGVkLgorICoKKyAqIFxkZXRhaWxzIFRoaXMgZGVsYXkgaXMgYWRkZWQgaW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSBwcm9wZXIgcHJvZ3JhbW1pbmcgb2YgdGhlIEZsYXNoIG9yIFFTUElcbgorICogICAgICAgIGxhdW5jaGVyIGludm9jYXRpb24uIFdpdGhvdXQgaXQsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBleGVjdXRpb24gb2YgdGhlIGltYWdlXG4KKyAqICAgICAgICB3aWxsIG5vdCBwcm9jZWVkLCBhbHRlcmluZyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0gZnJvbSB0aGUgb25lIHRoYXQgdGhlXG4KKyAqICAgICAgICBib290bG9hZGVyIGxlYXZlcyBpdC4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnU0tJUF9NQUdJQ19DSEVDS19BVF9TVEFSVAorI2RlZmluZSBkZ19jb25maWdTS0lQX01BR0lDX0NIRUNLX0FUX1NUQVJUICAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgV2hlbiBzZXQgdG8gMSwgdGhlIGNoaXAgdmVyc2lvbiAoREExNDY4MC8xLTAxIG9yIERBMTQ2ODIvMy1CQSApIHdpbGwgYmUgZGV0ZWN0ZWRcbgorICogICAgICAgIGF1dG9tYXRpY2FsbHkuCisgKiBcbm90ZSBJdCBjYW5ub3QgYmUgdXNlZCBpbiBCTEUgYXBwbGljYXRpb25zIGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCBsaW5rZXIgc2NyaXB0c1xuCisgKiAgICAgICB0aGF0IGFyZSB1c2VkLgorICogXHdhcm5pbmcgTm90IHRvIGJlIHVzZWQgYnkgYSBnZW5lcmljIHByb2plY3QsIGFwcGxpY2FibGUgZm9yIHVhcnRib290IG9ubHkuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OICAgICAgICAoMCkKKyNlbHNlCisjIGlmIChkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiA9PSAxKQorICAgICAgICAjdW5kZWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAgICAgIEJMQUNLX09SQ0FfSUNfUkVWX0FVVE8KKyAgICAgICAgI3VuZGVmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfU1RFUAorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfU1RFUCAgICAgQkxBQ0tfT1JDQV9JQ19TVEVQX0FVVE8KKyMgZW5kaWYKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgT1RQIGNvcHkgd2lsbCBiZSBlbXVsYXRlZCB3aGVuIGluIERFVkVMT1BNRU5UX01PREUuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0VNVUxBVEVfT1RQX0NPUFkKKyNkZWZpbmUgZGdfY29uZmlnRU1VTEFURV9PVFBfQ09QWSAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgUVNQSSBjb3B5IHdpbGwgYmUgZW11bGF0ZWQgd2hlbiBpbiBERVZFTE9QTUVOVF9NT0RFIChOb3QgQXBwbGljYWJsZSEpLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdFTVVMQVRFX1FTUElfQ09QWQorI2RlZmluZSBkZ19jb25maWdFTVVMQVRFX1FTUElfQ09QWSAgICAgICgwKQorI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIExPV19QT1dFUl9DTE9DS19TRVRUSU5HUworICoKKyAqIFxicmllZiBEb3h5Z2VuIGRvY3VtZW50YXRpb24gaXMgbm90IHlldCBhdmFpbGFibGUgZm9yIHRoaXMgbW9kdWxlLgorICogICAgICAgIFBsZWFzZSBjaGVjayB0aGUgc291cmNlIGNvZGUgZmlsZShzKQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqIFx7CisgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb3ctUG93ZXIgY2xvY2sgc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIE1heGltdW0gc2xlZXAgdGltZSB0aGUgc2xlZXAgdGltZXIgc3VwcG9ydHMKKyAqCisgKiBkZ19jb25maWdUaW0xUHJlc2NhbGVyIGNhbiBiZSB6ZXJvLiBpZiBkZ19jb25maWdUaW0xUHJlc2NhbGVyIGlzIG5vdCB6ZXJvIHRoZW4KKyAqICggZGdfY29uZmlnVGltMVByZXNjYWxlciArIDEgKSBNVVNUIGJlIGEgcG93ZXIgb2YgMiEgKi8KKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisjaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyMDAwKQorI2RlZmluZSBkZ19jb25maWdUaW0xUHJlc2NhbGVyICAgICAgICAgICgzKQorI2RlZmluZSBkZ19jb25maWdNYXhTbGVlcFRpbWUgICAgICAgICAgICg4KSAgICAgLy8gc2VjCisjZWxpZiAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzI3NjgpCisjZGVmaW5lIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgICAgICAgICAgKDMpCisjZGVmaW5lIGRnX2NvbmZpZ01heFNsZWVwVGltZSAgICAgICAgICAgKDgpICAgICAvLyBzZWMKKyNlbGlmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19SQ1gpCisjZGVmaW5lIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgICAgICAgICAgKDApCisjZGVmaW5lIGRnX2NvbmZpZ01heFNsZWVwVGltZSAgICAgICAgICAgKDgpICAgICAvLyBzZWMKKyNlbGlmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19BTlkpCisvKiBBc3N1bWluZyB0aGF0IHRoZSBmcmVxdWVuY3kgb2YgdGhlIGV4dGVybmFsIGRpZ2l0YWwgY2xvY2sgaXMgMzIwMDBIeiwKKyAqICAgICAgcGVyaW9kOiAxLzMyMDAwID0gMzEuMjV1c2VjCisgKiAgICAgIFRpbWVyMSB3cmFwLWFyb3VuZCB0aW1lOiA2NTUzNiAqIDMxLjI1ID0gMi4wNDhzZWMKKyAqICAgICAgV2l0aCBhIHByZXNjYWxlciBlcXVhbCB0byAzLCB0aGUgd3JhcCBhcm91bmQgdGltZSBiZWNvbWVzOiAoMSArIDMpICogMi4wNDggPSB+OHNlYy4KKyAqIElmIHRoZSBjbG9jayBmcmVxdWVuY3kgaXMgdG9vIHNsb3csIGkuZS4gMTYwMDBIeiB0aGVuCisgKiAgICAgIHBlcmlvZDogMS8xNjAwMCA9IDYyLjV1c2VjCisgKiAgICAgIFRpbWVyMSB3cmFwLWFyb3VuZCB0aW1lID0gNjU1MzYgKiA2Mi41ID0gNC4wOTZzZWMKKyAqICAgICAgYW5kIHRoZSBwcmVzY2FsZXIgc2hvdWxkIGJlIDEgc28gdGhhdDogKDEgKyAxKSAqIDQuMDk2ID0gfjhzZWMuCisgKiBJZiB0aGUgY2xvY2sgZnJlcXVlbmN5IGlzIHRvbyBoaWdoLCBpLmUuIDEyNTAwMEh6IHRoZW4KKyAqICAgICAgcGVyaW9kOiAxLzEyNTAwMCA9IDh1c2VjCisgKiAgICAgIFRpbWVyMSB3cmFwLWFyb3VuZCB0aW1lID0gNjU1MzYgKiA4ID0gMC41MjRzZWMKKyAqICAgICAgYW5kIHRoZSBwcmVzY2FsZXIgc2hvdWxkIGJlIDMgc28gdGhhdDogKDEgKyAzKSAqIDAuNTI0ID0gfjJzZWMuCisgKiBUaGUgdmFsdWVzIE1VU1QgYmUgZGVmaW5lZCBpbiB0aGUgY3VzdG9tX2NvbmZpZ188Pi5oIGZpbGUhCisgKi8KKyNlbHNlCisjZXJyb3IgImRnX2NvbmZpZ1VTRV9MUF9DTEsgaGFzIGludmFsaWQgc2V0dGluZyIKKyNlbmRpZgorI2Vsc2UgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSAqLworI2lmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjAwMCkgfHwgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KSB8fCAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfUkNYKQorI2lmZGVmIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIKKyN3YXJuaW5nICJUaW1lcjEgcHJlc2NhbGVyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gREExNDY4Mi8zIGNoaXBzLiIKKyN1bmRlZiBkZ19jb25maWdUaW0xUHJlc2NhbGVyCisjZW5kaWYgLyogZGdfY29uZmlnVGltMVByZXNjYWxlciAqLworI2RlZmluZSBkZ19jb25maWdNYXhTbGVlcFRpbWUgICAgICAgICAgICgxMzQyMTcpICAgICAvLyBzZWMKKyNlbHNlCisjZXJyb3IgImRnX2NvbmZpZ1VTRV9MUF9DTEsgaGFzIGludmFsaWQgc2V0dGluZyIKKyNlbmRpZgorI2VuZGlmIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKworI2lmIChkZ19jb25maWdUaW0xUHJlc2NhbGVyICYmICgoKGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIrMSkgLyAyKSAqIDIpICE9IChkZ19jb25maWdUaW0xUHJlc2NhbGVyKzEpKQorI2Vycm9yICJkZ19jb25maWdUaW0xUHJlc2NhbGVyKzEgaXMgbm90IDAgb3IgYSBwb3dlciBvZiAyISIKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorI2lmIChkZ19jb25maWdUaW0xUHJlc2NhbGVyID09IDApCisjZGVmaW5lIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXJCaXRSYW5nZSAgKDApCisjZWxpZiAoZGdfY29uZmlnVGltMVByZXNjYWxlciA9PSAxKQorI2RlZmluZSBkZ19jb25maWdUaW0xUHJlc2NhbGVyQml0UmFuZ2UgICgxKQorI2VsaWYgKGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgPT0gMykKKyNkZWZpbmUgZGdfY29uZmlnVGltMVByZXNjYWxlckJpdFJhbmdlICAoMikKKyNlbHNlCisjZXJyb3IgImRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgaXMgbGFyZ2VyIHRoYW4gMyEiCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgZGdfY29uZmlnVGltMVByZXNjYWxlckJpdFJhbmdlCisjd2FybmluZyAiVGltZXIxIHByZXNjYWxlciBpcyBub3Qgc3VwcG9ydGVkIGluIERBMTQ2ODIvMyBjaGlwcy4iCisjdW5kZWYgZGdfY29uZmlnVGltMVByZXNjYWxlckJpdFJhbmdlCisjZW5kaWYKKyNlbmRpZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBTWVNURU1fQ09ORklHVVJBVElPTl9TRVRUSU5HUworICoKKyAqIFxicmllZiBTeXN0ZW0gY29uZmlndXJhdGlvbiBzZXR0aW5ncworICoKKyAqIFx7CisgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3lzdGVtIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcYnJpZWYgU291cmNlIG9mIExvdyBQb3dlciBjbG9jayB1c2VkIChMUF9DTEtfSVNfQU5BTE9HLCBMUF9DTEtfSVNfRElHSVRBTCkKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdMUF9DTEtfU09VUkNFCisjZGVmaW5lIGRnX2NvbmZpZ0xQX0NMS19TT1VSQ0UgICAgICAgICAgTFBfQ0xLX0lTX0FOQUxPRworI2VuZGlmCisKKyMgaWYgKChkZ19jb25maWdMUF9DTEtfU09VUkNFID09IExQX0NMS19JU19BTkFMT0cpICYmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19BTlkpKQorIyBlcnJvciAiV2hlbiB0aGUgTFAgc291cmNlIGlzIGFuYWxvZyAoWFRBTCksIHRoZSBvcHRpb24gTFBfQ0xLX0FOWSBpcyBpbnZhbGlkISIKKyMgZW5kaWYKKworIyBpZiAoKGRnX2NvbmZpZ0xQX0NMS19TT1VSQ0UgPT0gTFBfQ0xLX0lTX0RJR0lUQUwpICYmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19SQ1gpKQorIyBlcnJvciAiV2hlbiB0aGUgTFAgc291cmNlIGlzIGRpZ2l0YWwgKEV4dGVybmFsKSwgdGhlIG9wdGlvbiBMUF9DTEtfUkNYIGlzIGludmFsaWQhIgorIyBlbmRpZgorCisvKioKKyAqIFxicmllZiBMb3cgUG93ZXIgY2xvY2sgdXNlZCAoTFBfQ0xLXzMyMDAwLCBMUF9DTEtfMzI3NjgsIExQX0NMS19SQ1gsIExQX0NMS19BTlkpCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyMgaWZuZGVmIGRnX2NvbmZpZ1VTRV9MUF9DTEsKKyMgZGVmaW5lIGRnX2NvbmZpZ1VTRV9MUF9DTEsgICAgICAgICAgICBMUF9DTEtfUkNYCisjIGVuZGlmCisKKy8qKgorICogXGJyaWVmIENvZGUgZXhlY3V0aW9uIG1vZGUKKyAqCisgKiAgLSBNT0RFX0lTX1JBTQorICogIC0gTU9ERV9JU19NSVJST1JFRAorICogIC0gTU9ERV9JU19DQUNIRUQKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyMgaWZuZGVmIGRnX2NvbmZpZ0VYRUNfTU9ERQorIyBkZWZpbmUgZGdfY29uZmlnRVhFQ19NT0RFICAgICAgICAgICAgIE1PREVfSVNfUkFNCisjIGVuZGlmCisKKy8qKgorICogXGJyaWVmIENvZGUgbG9jYXRpb24KKyAqCisgKiAtIE5PTl9WT0xBVElMRV9JU19PVFAKKyAqIC0gTk9OX1ZPTEFUSUxFX0lTX0ZMQVNICisgKiAtIE5PTl9WT0xBVElMRV9JU19OT05FIChSQU0pCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyMgaWZuZGVmIGRnX2NvbmZpZ0NPREVfTE9DQVRJT04KKyMgZGVmaW5lIGRnX2NvbmZpZ0NPREVfTE9DQVRJT04gICAgICAgICBOT05fVk9MQVRJTEVfSVNfTk9ORQorIyBlbmRpZgorCisvKioKKyAqIFxicmllZiBGcmVxdWVuY3kgb2YgdGhlIGNyeXN0YWwgY29ubmVjdGVkIHRvIHRoZSBYVEFMIE9zY2lsbGF0b3I6IDE2TUh6IG9yIDMyTUh6LgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjIGlmbmRlZiBkZ19jb25maWdFWFRfQ1JZU1RBTF9GUkVRCisjIGRlZmluZSBkZ19jb25maWdFWFRfQ1JZU1RBTF9GUkVRICAgICAgRVhUX0NSWVNUQUxfSVNfMTZNCisjIGVuZGlmCisKKy8qKgorICogXGJyaWVmIEV4dGVybmFsIExQIHR5cGUKKyAqCisgKiAtIDA6IGEgY3J5c3RhbCBpcyBjb25uZWN0ZWQgdG8gWFRBTDMyS3AgYW5kIFhUQUxLMzJLbQorICogLSAxOiBhIGRpZ2l0YWwgY2xvY2sgaXMgcHJvdmlkZWQuCisgKgorICogXG5vdGUgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgZGlnaXRhbCBjbG9jayBtdXN0IGJlIDMyS0h6IG9yIDMyLjc2OEtIeiBhbmQgYmUgYWx3YXlzIHJ1bm5pbmcuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjIGlmbmRlZiBkZ19jb25maWdFWFRfTFBfSVNfRElHSVRBTAorIyBkZWZpbmUgZGdfY29uZmlnRVhUX0xQX0lTX0RJR0lUQUwgICAgICgwKQorIyBlbmRpZgorCisvKgorICogVGhpcyBpcyBhIGRlcHJlY2F0ZWQgY29uZmlndXJhdGlvbiBoZW5jZSBub3QgdG8gYmUgZGVmaW5lZCBieSBhbiBhcHBsaWNhdGlvbi4KKyAqIEZvcmNpbmcgdGhlIHN5c3RlbSB0byBlbnRlciBpbnRvIGNsb2NrbGVzcyBzbGVlcCBkdXJpbmcgZGVlcCBzbGVlcCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgorICAqLworI2lmZGVmIGRnX2NvbmZpZ0ZPUkNFX0RFRVBfU0xFRVAKKyNlcnJvciAiQ29uZmlndXJhdGlvbiBvcHRpb24gZGdfY29uZmlnRk9SQ0VfREVFUF9TTEVFUCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBUaW1lciAxIHVzYWdlCisgKgorICogV2hlbiBzZXQgdG8gMCwgVGltZXIxIGlzIHJlc2VydmVkIGZvciB0aGUgT1MgdGljay4KKyAqCisgKiBcbm90ZSBBIHNldHRpbmcgdG8gMSBpcyBtZWFuaW5nZnVsIG9ubHkgZm9yIG5vbi1SVE9TIHByb2plY3RzLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0VSX0NBTl9VU0VfVElNRVIxCisjZGVmaW5lIGRnX2NvbmZpZ1VTRVJfQ0FOX1VTRV9USU1FUjEgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgVGltZSBuZWVkZWQgZm9yIHRoZSBzZXR0bGluZyBvZiB0aGUgTFAgY2xvY2ssIGluIG1zZWMuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1hUQUwzMktfU0VUVExFX1RJTUUKKyNkZWZpbmUgZGdfY29uZmlnWFRBTDMyS19TRVRUTEVfVElNRSAgICAoODAwMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBTbGVlcCBkZWxheSB0aW1lCisgKgorICogQXQgc3RhcnR1cCwgdGhlIHN5c3RlbSB3aWxsIHN0YXkgYWN0aXZlIGZvciBhdCBsZWFzdCB0aGlzIHRpbWUgcGVyaW9kIGJlZm9yZSBpdCBpcyBhbGxvd2VkIHRvIGdvCisgKiB0byBzbGVlcCwgaW4gbXNlYy4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZiAoZGdfY29uZmlnWFRBTDMyS19TRVRUTEVfVElNRSA+IDgwMDApCisjZGVmaW5lIGRnX2NvbmZpZ0lOSVRJQUxfU0xFRVBfREVMQVlfVElNRSAgICAgICAoZGdfY29uZmlnWFRBTDMyS19TRVRUTEVfVElNRSkKKyNlbHNlCisjZGVmaW5lIGRnX2NvbmZpZ0lOSVRJQUxfU0xFRVBfREVMQVlfVElNRSAgICAgICAoODAwMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBYVEFMMTYgc2V0dGxlIHRpbWUKKyAqCisgKiBUaW1lIG5lZWRlZCBmb3IgdGhlIHNldHRsaW5nIG9mIHRoZSBYVEFMMTYsIGluIExQIGN5Y2xlcy4gVG8gdGhpcyB2YWx1ZSwgNSBMUCBjeWNsZXMsIHRoYXQgYXJlCisgKiBuZWVkZWQgdG8gc3RhcnQgdGhlIGNvcmUgY2xvY2ssIGFyZSBhZGRlZCBzaW5jZSB0aGUgU1cgcG93ZXJzIHRoZSAxVjQgcmFpbCBhZnRlciB0aGUgZXhlY3V0aW9uCisgKiBpcyByZXN1bWVkLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdYVEFMMTZfU0VUVExFX1RJTUUKKyNpZiAoKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyMDAwKSB8fCAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzI3NjgpKQorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ1hUQUwxNl9TRVRUTEVfVElNRSAgICAgKDg1ICsgNSkKKyNlbGlmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19SQ1gpCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnWFRBTDE2X1NFVFRMRV9USU1FICAgICBjbV9yY3hfdXNfMl9scGN5Y2xlcygodWludDMyX3QpKCg4NSArIDUpICogMzAuNSkpCisjZWxzZSAvKiBMUF9DTEtfQU5ZICovCisvLyBNdXN0IGJlIGRlZmluZWQgaW4gdGhlIGN1c3RvbV9jb25maWdfPD4uaCBmaWxlLgorI2VuZGlmCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgWFRBTDE2IHNldHRsZSB0aW1lIFJDMzJLCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjZGVmaW5lIGRnX2NvbmZpZ1hUQUwxNl9TRVRUTEVfVElNRV9SQzMySyAgICAgICAoMTEwKQorCisvKioKKyAqIFxicmllZiBSQzE2IHdha2V1cCB0aW1lCisgKgorICogVGhpcyBpcyB0aGUgbWF4aW11bSB0aW1lLCBpbiBMUCBjeWNsZXMsIG5lZWRlZCB0byB3YWtlLXVwIHRoZSBjaGlwIGFuZCBzdGFydCBleGVjdXRpbmcgY29kZQorICogdXNpbmcgUkMxNi4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNkZWZpbmUgZGdfY29uZmlnV0FLRVVQX1JDMTZfVElNRSAgICAgICAoMTYpCisKKy8qKgorICogXGJyaWVmIFhUQUwxNiB3YWtldXAgdGltZQorICoKKyAqIFdha2UgdXAgTiBMUCBjeWNsZXMgYmVmb3JlICJ0aW1lIDAiIHRvIGhhdmUgWFRBTDE2IHJlYWR5IHdoZW4gbmVlZGVkLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2RlZmluZSBkZ19jb25maWdXQUtFVVBfWFRBTDE2X1RJTUUgICAgIChkZ19jb25maWdYVEFMMTZfU0VUVExFX1RJTUUgKyBkZ19jb25maWdXQUtFVVBfUkMxNl9USU1FKQorCisvKioKKyAqIFxicmllZiBPUyB0aWNrIHJlc3RvcmUgdGltZQorICoKKyAqIFRoaXMgaXMgdGhlIHRpbWUsIGluIExQIGN5Y2xlcywgcmVxdWlyZWQgZnJvbSB0aGUgT1MgdG8gcmVzdG9yZSB0aGUgdGljayB0aW1lci4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUKKyNpZmRlZiBSRUxFQVNFX0JVSUxECisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorI2lmICgoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzIwMDApIHx8IChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjc2OCkpCisgICAgICAgICNpZiAoZGdfY29uZmlnQ09ERV9MT0NBVElPTiAhPSBOT05fVk9MQVRJTEVfSVNfRkxBU0gpCisgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdPU19USUNLX1JFU1RPUkVfVElNRSAgKGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgPyAyICsgZGdfY29uZmlnVGltMVByZXNjYWxlciA6IDMpCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2lmIChkZ19jb25maWdJTUFHRV9TRVRVUCA9PSBQUk9EVUNUSU9OX01PREUpCisgICAgICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICAoZGdfY29uZmlnVGltMVByZXNjYWxlciA/IDMgKyBkZ19jb25maWdUaW0xUHJlc2NhbGVyIDogNCkKKyAgICAgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdPU19USUNLX1JFU1RPUkVfVElNRSAgKGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgPyAzICsgZGdfY29uZmlnVGltMVByZXNjYWxlciA6IDQpCisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICNlbmRpZgorI2VsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkKKyAgICAgICAgI2lmIChkZ19jb25maWdDT0RFX0xPQ0FUSU9OICE9IE5PTl9WT0xBVElMRV9JU19GTEFTSCkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICBjbV9yY3hfdXNfMl9scGN5Y2xlcygxMjApCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdPU19USUNLX1JFU1RPUkVfVElNRSAgY21fcmN4X3VzXzJfbHBjeWNsZXMoMTIwKQorICAgICAgICAjZW5kaWYKKyNlbHNlIC8qIExQX0NMS19BTlkgKi8KKyAgICAgICAgLyogTXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjdXN0b21fY29uZmlnXzw+LmggZmlsZS4KKyAgICAgICAgICogRm9yIFFTUEkgY2FjaGVkLCB0aGUgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUgbXVzdCBiZSB+MTIwdXNlYyB3aGVuIG5vIHByZXNjYWxpbmcgaXMKKyAgICAgICAgICogdXNlZCBhbmQgfjE4MHVzZWMgd2hlbiBwcmVzY2FsaW5nIGlzIHVzZWQuCisgICAgICAgICAqLworI2VuZGlmCisjZWxzZSAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BICovCisjaWYgKChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjAwMCkgfHwgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KSkKKyAgICAgICAgI2lmIChkZ19jb25maWdDT0RFX0xPQ0FUSU9OICE9IE5PTl9WT0xBVElMRV9JU19GTEFTSCkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICAoMykKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjaWYgKGRnX2NvbmZpZ0lNQUdFX1NFVFVQID09IFBST0RVQ1RJT05fTU9ERSkKKyAgICAgICAgICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUgICg0KQorICAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICAoNCkKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VuZGlmCisjZWxpZiAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfUkNYKQorICAgICAgICAjaWYgKGRnX2NvbmZpZ0NPREVfTE9DQVRJT04gIT0gTk9OX1ZPTEFUSUxFX0lTX0ZMQVNIKQorICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUgIGNtX3JjeF91c18yX2xwY3ljbGVzKDEyMCkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICBjbV9yY3hfdXNfMl9scGN5Y2xlcygxMjApCisgICAgICAgICNlbmRpZgorI2Vsc2UgLyogTFBfQ0xLX0FOWSAqLworICAgICAgICAvKiBNdXN0IGJlIGRlZmluZWQgaW4gdGhlIGN1c3RvbV9jb25maWdfPD4uaCBmaWxlLgorICAgICAgICAgKiBGb3IgUVNQSSBjYWNoZWQsIHRoZSBkZ19jb25maWdPU19USUNLX1JFU1RPUkVfVElNRSBtdXN0IGJlIH4xMjB1c2VjIHdoZW4gbm8gcHJlc2NhbGluZyBpcworICAgICAgICAgKiB1c2VkIGFuZCB+MTgwdXNlYyB3aGVuIHByZXNjYWxpbmcgaXMgdXNlZC4KKyAgICAgICAgICovCisjZW5kaWYKKyNlbmRpZiAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BICovCisjZWxzZSAvLyBSRUxFQVNFX0JVSUxECisjaWYgKChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjAwMCkgfHwgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KSkKKyAgICAgICAgI2lmIChkZ19jb25maWdDT0RFX0xPQ0FUSU9OICE9IE5PTl9WT0xBVElMRV9JU19GTEFTSCkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICAoNDApCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdPU19USUNLX1JFU1RPUkVfVElNRSAgKDcyKQorICAgICAgICAjZW5kaWYKKyNlbGlmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19SQ1gpCisgICAgICAgICNpZiAoZGdfY29uZmlnQ09ERV9MT0NBVElPTiAhPSBOT05fVk9MQVRJTEVfSVNfRkxBU0gpCisgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdPU19USUNLX1JFU1RPUkVfVElNRSAgY21fcmN4X3VzXzJfbHBjeWNsZXMoMTIwMCkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICBjbV9yY3hfdXNfMl9scGN5Y2xlcygyNDAwKQorICAgICAgICAjZW5kaWYKKyNlbHNlIC8qIExQX0NMS19BTlkgKi8KKyAgICAgICAgLyogTXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjdXN0b21fY29uZmlnXzw+LmggZmlsZS4KKyAgICAgICAgICogVXN1YWxseSwgdGhlIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FIGlzIHNldCB0byBhIGxhcmdlIHZhbHVlIChpLmUuIDEuMiAtIDIuNG1zZWMpCisgICAgICAgICAqIGluIG9yZGVyIHRvIGFsbG93IGZvciBhIG1vcmUgInJlbGF4ZWQiIHdha2luZyB1cCBvZiB0aGUgc3lzdGVtLgorICAgICAgICAgKi8KKyNlbmRpZgorI2VuZGlmIC8vIFJFTEVBU0VfQlVJTEQKKyNlbmRpZiAvLyBkZ19jb25maWdPU19USUNLX1JFU1RPUkVfVElNRQorCisvKioKKyAqIFxicmllZiBJbWFnZSBjb3B5IHRpbWUKKyAqCisgKiBUaGUgbnVtYmVyIG9mIExQIGN5Y2xlcyBuZWVkZWQgZm9yIHRoZSBhcHBsaWNhdGlvbidzIGltYWdlIGRhdGEgdG8gYmUgY29waWVkIGZyb20gdGhlIE9UUAorICogKG9yIFFTUEkpIHRvIHRoZSBSQU0gaW4gbWlycm9yZWQgbW9kZS4KKyAqCisgKiBcd2FybmluZyBNVVNUIEJFIFNNQUxMRVIgVEhBTiAjZGdfY29uZmlnTUlOX1NMRUVQX1RJTUUgISEhCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWYgKGRnX2NvbmZpZ0VYRUNfTU9ERSAhPSBNT0RFX0lTX01JUlJPUkVEKQorICAgICAgICAjdW5kZWYgZGdfY29uZmlnSU1BR0VfQ09QWV9USU1FCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnSU1BR0VfQ09QWV9USU1FICAgICAgICAoMCkKKyNlbGlmICFkZWZpbmVkKGRnX2NvbmZpZ0lNQUdFX0NPUFlfVElNRSkKKyAgICAgICAgI2lmICgoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzIwMDApIHx8IChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjc2OCkpCisgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdJTUFHRV9DT1BZX1RJTUUgICAgICAgICg2NCkKKyAgICAgICAgI2VsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ0lNQUdFX0NPUFlfVElNRSAgICAgICAgY21fcmN4X3VzXzJfbHBjeWNsZXMoMTk1MCkKKyAgICAgICAgI2Vsc2UgLyogTFBfQ0xLX0FOWSAqLworICAgICAgICAgICAgICAgIC8vIE11c3QgYmUgZGVmaW5lZCBpbiB0aGUgY3VzdG9tX2NvbmZpZ188Pi5oIGZpbGUuCisgICAgICAgICNlbmRpZgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFJldGVudGlvbiBtZW1vcnkgY29uZmlndXJhdGlvbi4KKyAqCisgKiA1IGJpdHMgZmllbGQ7IGVhY2ggYml0IGNvbnRyb2xzIHdoZXRoZXIgdGhlIHJlbGV2YW50IG1lbW9yeSBibG9jayB3aWxsIGJlIHJldGFpbmVkICgxKSBvciBub3QgKDApLgorICogLSAgYml0IDAgOiBTWVNSQU0xCisgKiAtICBiaXQgMSA6IFNZU1JBTTIKKyAqIC0gIGJpdCAyIDogU1lTUkFNMworICogLSAgYml0IDMgOiBTWVNSQU00CisgKiAtICBiaXQgNCA6IFNZU1JBTTUKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKgorICovCisjaWZuZGVmIGRnX2NvbmZpZ01FTV9SRVRFTlRJT05fTU9ERQorI2RlZmluZSBkZ19jb25maWdNRU1fUkVURU5USU9OX01PREUgICAgICgweDFGKQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGlzIGEgZGVwcmVjYXRlZCBjb25maWd1cmF0aW9uIGhlbmNlIG5vdCB0byBiZSBkZWZpbmVkIGJ5IGFuIGFwcGxpY2F0aW9uLgorICovCisjaWZkZWYgZGdfY29uZmlnTUVNX1JFVEVOVElPTl9NT0RFX1BSRVNFUlZFX0lNQUdFCisjZXJyb3IgImRnX2NvbmZpZ01FTV9SRVRFTlRJT05fTU9ERV9QUkVTRVJWRV9JTUFHRSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBNZW1vcnkgU2h1ZmZsaW5nIG1vZGUuCisgKgorICogU2VlIFNZU19DVFJMX1JFRzpSRU1BUF9SQU1TIGZpZWxkLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdTSFVGRkxJTkdfTU9ERQorI2RlZmluZSBkZ19jb25maWdTSFVGRkxJTkdfTU9ERSAgICAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEVDQyBtaWNyb2NvZGUgUkFNIHJldGFpbm1lbnQKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnRUNDX1VDT0RFX1JBTV9SRVRBSU5FRAorI2RlZmluZSBkZ19jb25maWdFQ0NfVUNPREVfUkFNX1JFVEFJTkVEICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdhdGNoZG9nIFNlcnZpY2UgCisgKgorICogLSAxOiBlbmFibGVkCisgKiAtIDA6IGRpc2FibGVkCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNFX1dET0cKKyNkZWZpbmUgZGdfY29uZmlnVVNFX1dET0cgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBCcm93bi1vdXQgRGV0ZWN0aW9uCisgKgorICogLSAxOiB1c2VkCisgKiAtIDA6IG5vdCB1c2VkCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNFX0JPRAorI2RlZmluZSBkZ19jb25maWdVU0VfQk9EICAgICAgICAgICAgICAgICgxKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFJlc2V0IHZhbHVlIGZvciBXYXRjaGRvZy4KKyAqCisgKiBTZWUgV0FUQ0hET0dfUkVHOldET0dfVkFMIGZpZWxkLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdXRE9HX1JFU0VUX1ZBTFVFCisjZGVmaW5lIGRnX2NvbmZpZ1dET0dfUkVTRVRfVkFMVUUgICAgICAgKDB4RkYpCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgTWF4aW11bSB3YXRjaGRvZyB0YXNrcworICoKKyAqIE1heGltdW0gbnVtYmVyIG9mIHRhc2tzIHRoYXQgdGhlIFdhdGNoZG9nIFNlcnZpY2UgY2FuIG1vbml0b3IuIEl0IGNhbiBiZSBsYXJnZXIgKHVwIHRvIDMyKSB0aGFuCisgKiBuZWVkZWQsIGF0IHRoZSBleHBlbnNlIG9mIGluY3JlYXNlZCBSZXRlbnRpb24gTWVtb3J5IHJlcXVpcmVtZW50LgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdXRE9HX01BWF9UQVNLU19DTlQKKyNkZWZpbmUgZGdfY29uZmlnV0RPR19NQVhfVEFTS1NfQ05UICAgICAoNCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBXYXRjaGRvZyBub3RpZnkgaW50ZXJ2YWwKKyAqCisgKiBJbnRlcnZhbCAoaW4gbWlsaXNlY29uZHMpIGZvciBjb21tb24gdGltZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gdHJpZ2dlciB0YXNrcyBpbiBvcmRlciB0byBub3RpZnkKKyAqIHdhdGNoZG9nLiBDYW4gYmUgc2V0IHRvIDAgaW4gb3JkZXIgdG8gZGlzYWJsZSB0aW1lciBjb2RlIGVudGlyZWx5LgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdXRE9HX05PVElGWV9UUklHR0VSX1RNTworI2RlZmluZSBkZ19jb25maWdXRE9HX05PVElGWV9UUklHR0VSX1RNTyAgICAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQWJvcnQgYSBjbG9jayBtb2RpZmljYXRpb24gaWYgaXQgd2lsbCBjYXVzZSBhbiBlcnJvciB0byB0aGUgU3lzVGljayBjb3VudGVyCisgKgorICogLSAxOiBvbgorICogLSAwOiBvZmYKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQUJPUlRfSUZfU1lTVElDS19DTEtfRVJSCisjZGVmaW5lIGRnX2NvbmZpZ0FCT1JUX0lGX1NZU1RJQ0tfQ0xLX0VSUiAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBNYXhpbXVtIGFkYXB0ZXJzIGNvdW50CisgKgorICogU2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgQWRhcHRlcnMgdXNlZCBieSB0aGUgQXBwbGljYXRpb24uIEl0IGNhbiBiZSBsYXJnZXIgKHVwIHRvIDI1NCkKKyAqIHRoYW4gbmVlZGVkLCBhdCB0aGUgZXhwZW5zZSBvZiBpbmNyZWFzZWQgUmV0ZW50aW9uIE1lbW9yeSByZXF1aXJlbWVudHMuIEl0IGNhbm5vdCBiZSAwLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdQTV9NQVhfQURBUFRFUlNfQ05UCisjZGVmaW5lIGRnX2NvbmZpZ1BNX01BWF9BREFQVEVSU19DTlQgICAgKDE2KQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIE1heGltdW0gc2xlZXAgZGVmZXIgdGltZQorICoKKyAqIFRoZSBtYXhpbXVtIHRpbWUgc2xlZXAgY2FuIGJlIGRlZmVycmVkIHZpYSBhIGNhbGwgdG8gcG1fZGVmZXJfc2xlZXBfZm9yKCkuIEl0IGlzIGluIGNsb2NrIGN5Y2xlcworICogaW4gdGhlIGNhc2Ugb2YgdGhlIFhUQUwzMksgYW5kIGluIHVzZWMgaW4gdGhlIGNhc2Ugb2YgUkNYLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdQTV9NQVhfQURBUFRFUl9ERUZFUl9USU1FCisjaWYgKChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjAwMCkgfHwgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KSkKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdQTV9NQVhfQURBUFRFUl9ERUZFUl9USU1FICAgICAgKDEyOCkKKyNlbGlmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19SQ1gpCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnUE1fTUFYX0FEQVBURVJfREVGRVJfVElNRSAgICAgIGNtX3JjeF91c18yX2xwY3ljbGVzKDQwMDApCisjZWxzZSAvKiBMUF9DTEtfQU5ZICovCisgICAgICAgIC8vIE11c3QgYmUgZGVmaW5lZCBpbiB0aGUgY3VzdG9tX2NvbmZpZ188Pi5oIGZpbGUuIEl0IHNob3VsZCBiZSA+IDMuNW1zZWMuCisjZW5kaWYKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBNaW5pbXVtIHNsZWVwIHRpbWUKKyAqCisgKiAgTm8gcG93ZXIgc2F2aW5ncyBpZiB3ZSBlbnRlciBzbGVlcCB3aGVuIHRoZSBzbGVlcCB0aW1lIGlzIGxlc3MgdGhhbiBOIExQIGN5Y2xlcworICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdNSU5fU0xFRVBfVElNRQorI2lmICgoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzIwMDApIHx8IChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjc2OCkpCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnTUlOX1NMRUVQX1RJTUUgKDMzKjMpICAvLyAzIG1zZWMKKyNlbGlmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19SQ1gpCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnTUlOX1NMRUVQX1RJTUUgY21fcmN4X3VzXzJfbHBjeWNsZXNfbG93X2FjYygzMDAwKSAgLy8gMyBtc2VjCisjZWxzZSAvKiBMUF9DTEtfQU5ZICovCisgICAgICAgIC8vIE11c3QgYmUgZGVmaW5lZCBpbiB0aGUgY3VzdG9tX2NvbmZpZ188Pi5oIGZpbGUuIEl0IHNob3VsZCBiZSB+M21zZWMgYnV0IHRoaXMgbWF5IHZhcnkuCisjZW5kaWYKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBSZWNoYXJnZSBwZXJpb2QKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnU0VUX1JFQ0hBUkdFX1BFUklPRAorI2lmICgoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzIwMDApIHx8IChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjc2OCkpCisjZGVmaW5lIGRnX2NvbmZpZ1NFVF9SRUNIQVJHRV9QRVJJT0QgICAgKDMwMDApICAvKiogbnVtYmVyIG9mIExvdyBQb3dlciBjbG9jayBjeWNsZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZyBhbmQgLyBvciByZWZyZXNoaW5nLiAqLworI2VsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkKKyNkZWZpbmUgZGdfY29uZmlnU0VUX1JFQ0hBUkdFX1BFUklPRCAgICAoOTAwMDApIC8qKiBudW1iZXIgb2YgbXNlYyBmb3Igc2FtcGxpbmcgYW5kIC8gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hpbmcgKi8KKyNlbHNlIC8qIExQX0NMS19BTlkgKi8KKyAgICAgICAgLy8gTXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjdXN0b21fY29uZmlnXzw+LmggZmlsZS4KKyNlbmRpZgorI2VuZGlmIC8qIGRnX2NvbmZpZ1NFVF9SRUNIQVJHRV9QRVJJT0QgKi8KKworLyoqCisgKiBcYnJpZWYgV2hlbiBzZXQgdG8gMSwgdGhlIERDREMgaXMgdXNlZC4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNFX0RDREMKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0RDREMgICAgICAgICAgICAgICAoMSkKKyNlbmRpZgorCisvKgorICogVGhpcyBpcyBhIGRlcHJlY2F0ZWQgY29uZmlndXJhdGlvbiBoZW5jZSBub3QgdG8gYmUgZGVmaW5lZCBieSBhbiBhcHBsaWNhdGlvbi4KKyAqIFRoZSBzZW1hbnRpY3Mgb2YgZGdfY29uZmlnVVNFX0FEQyByZXBsYWNlZCBieSBkZ19jb25maWdVU0VfSFdfR1BBREMuCisgKi8KKyNpZmRlZiBkZ19jb25maWdVU0VfQURDCisjZXJyb3IgIkNvbmZpZ3VyYXRpb24gb3B0aW9uIGRnX2NvbmZpZ1VTRV9BREMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gVXNlIGRnX2NvbmZpZ1VTRV9IV19HUEFEQyBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBBcHBseSBBREMgR2FpbiBFcnJvciBjb3JyZWN0aW9uLgorICogLSAxOiB1c2VkCisgKiAtIDA6IG5vdCB1c2VkCisgKgorICogVGhlIGRlZmF1bHQgc2V0dGluZyBpczogMS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNFX0FEQ19HQUlOX0VSUk9SX0NPUlJFQ1RJT04KKyNkZWZpbmUgZGdfY29uZmlnVVNFX0FEQ19HQUlOX0VSUk9SX0NPUlJFQ1RJT04gICgxKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSBVU0IgaW50ZXJmYWNlIGlzIHVzZWQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNFX1VTQgorI2RlZmluZSBkZ19jb25maWdVU0VfVVNCICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGFkZHRvZ3JvdXAgQ0hBUkdFUl9TRVRUSU5HUworICoKKyAqIFxicmllZiBDaGFyZ2VyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyAqIFx7CisgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENoYXJnZXIgc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcYnJpZWYgQmF0dGVyeSB0eXBlCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0JBVFRFUllfVFlQRQorI2RlZmluZSBkZ19jb25maWdCQVRURVJZX1RZUEUgICAgICAgICAgIChCQVRURVJZX1RZUEVfTk9fQkFUVEVSWSkKKy8qKgorICogXGJyaWVmIEJhdHRlcnkgY2hhcmdlIHZvbHRhZ2UKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNkZWZpbmUgZGdfY29uZmlnQkFUVEVSWV9DSEFSR0VfVk9MVEFHRSAoMCkKKy8qKgorICogXGJyaWVmIEJhdHRlcnkgY2hhcmdlIGN1cnJlbnQKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNkZWZpbmUgZGdfY29uZmlnQkFUVEVSWV9DSEFSR0VfQ1VSUkVOVCAoMCkKKy8qKgorICogXGJyaWVmIEJhdHRlcnkgY2hhcmdlIE5UQworICoKKyAqIDA6IE5UQyBpcyBlbmFibGVkLCAxOiBOVEMgaXMgZGlzYWJsZWQKKyAqCisgKiBOb3RlIHRoYXQgd2hlbiBOVEMgaXMgZW5hYmxlZCwgdGhlIFAxNCBhbmQgUDE2IGFyZSBjb250cm9sbGVkIGJ5IHRoZSBjaGFyZ2VyIGFuZCBjYW5ub3QgYmUgdXNlZAorICogYnkgdGhlIGFwcGxpY2F0aW9uLiBQMTQgaXMgc2V0IGhpZ2ggKGF0IDMuM1YpIHdoZW4gdGhlIGNoYXJnaW5nIHN0YXJ0cyB3aGlsZSBQMTYgaXMgYW4gaW5wdXQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjZGVmaW5lIGRnX2NvbmZpZ0JBVFRFUllfQ0hBUkdFX05UQyAgICAgKDApCisKKyNpZiAoZGdfY29uZmlnQkFUVEVSWV9DSEFSR0VfTlRDID4gMSkKKyNlcnJvciAiZGdfY29uZmlnQkFUVEVSWV9DSEFSR0VfTlRDIG11c3QgYmUgZWl0aGVyIDAgb3IgMS4iCisjZW5kaWYKKy8qKgorICogXGJyaWVmIEJhdHRlcnkgcHJlLWNoYXJnZSBjdXJyZW50CisgKgorICogTm9ybWFsIGNoYXJnaW5nIDoKKyAqIC0gICAwIC0gMTUgOiBhcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENIQVJHRVJfQ1RSTDFfUkVHW0NIQVJHRV9DVVJdIGZpZWxkLgorICoKKyAqIEV4dCBjaGFyZ2luZyA6ICJlbmQtb2YtY2hhcmdlIiBpcyBub3QgZnVuY3Rpb25hbCB3aGVuIHRoaXMgbW9kZSBpcyB1c2VkLgorICogLSAgMTYgOiBSZXNlcnZlZAorICogLSAgMTcgOiBSZXNlcnZlZAorICogLSAgMTggOiAxbUEKKyAqIC0gIDE5IDogMS41bUEKKyAqIC0gIDIwIDogMi4xbUEKKyAqIC0gIDIxIDogMy4ybUEKKyAqIC0gIDIyIDogNC4zbUEKKyAqIC0gIDIzIDogUmVzZXJ2ZWQKKyAqIC0gIDI0IDogNi42bUEKKyAqIC0gIDI1IDogNy44bUEKKyAqIC0gIDI2IDogUmVzZXJ2ZWQKKyAqIC0gIDI3IDogMTEuM21BCisgKiAtICAyOCA6IDEzLjNtQQorICogLSAgMjkgOiAxNS4zbUEKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNkZWZpbmUgZGdfY29uZmlnQkFUVEVSWV9QUkVDSEFSR0VfQ1VSUkVOVCAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSBVU0IgQ2hhcmdlciBpcyB1c2VkIHRvIGNoYXJnZSB0aGUgYmF0dGVyeS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0VfVVNCX0NIQVJHRVIKKyNkZWZpbmUgZGdfY29uZmlnVVNFX1VTQl9DSEFSR0VSICAgICAgICAoMCkKKyNlbHNlCisjaWYgKGRnX2NvbmZpZ1VTRV9VU0JfQ0hBUkdFUiA9PSAxKQorICAgICAgICAjdW5kZWYgZGdfY29uZmlnVVNFX0hXX0dQQURDCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX0dQQURDICAgICAgICAgICAoMSkKKyAgICAgICAgI3VuZGVmIGRnX2NvbmZpZ1VTRV9VU0IKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdVU0VfVVNCICAgICAgICAgICAgICAgICgxKQorICAgICAgICAjdW5kZWYgZGdfY29uZmlnR1BBRENfQURBUFRFUgorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ0dQQURDX0FEQVBURVIgICAgICAgICAgKDEpCisgICAgICAgICN1bmRlZiBkZ19jb25maWdCQVRURVJZX0FEQVBURVIKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdCQVRURVJZX0FEQVBURVIgICAgICAgICgxKQorI2VuZGlmCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgV2hlbiBzZXQgdG8gMSwgdGhlIFVTQiBDaGFyZ2VyIHdpbGwgdHJ5IHRvIGVudW1lcmF0ZSwgaWYgcG9zc2libGUuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9VU0JfRU5VTUVSQVRJT04KKyNkZWZpbmUgZGdfY29uZmlnVVNFX1VTQl9FTlVNRVJBVElPTiAgICAoMCkKKyNlbHNlCisjaWYgKGRnX2NvbmZpZ1VTRV9VU0JfRU5VTUVSQVRJT04gPT0gMSkKKyAgICAgICAgI3VuZGVmIGRnX2NvbmZpZ1VTRV9VU0IKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdVU0VfVVNCICAgICAgICAoMSkKKyNlbmRpZgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIENvbnRyb2xzIGhvdyB0aGUgc3lzdGVtIHdpbGwgYmVoYXZlIHdoZW4gdGhlIFVTQiBpL2YgaXMgc3VzcGVuZGVkLgorICoKKyAqIFxkZXRhaWxzIFdoZW4gdGhlIFVTQiBOb2RlIGlzIHN1c3BlbmRlZCBieSB0aGUgVVNCIEhvc3QsIHRoZSBhcHBsaWNhdGlvbiBtYXkgaGF2ZSB0byBhY3QgaW4KKyAqICAgICAgICAgIG9yZGVyIHRvIGNvbXBseSB3aXRoIHRoZSBVU0Igc3BlY2lmaWNhdGlvbiAoY29uc3VtZSBsZXNzIHRoYW4gMi41bUEpLiBUaGUgYXZhaWxhYmxlCisgKiAgICAgICAgICBvcHRpb25zIGFyZToKKyAqICAgICAgICAgIDA6IGRvIG5vdGhpbmcKKyAqICAgICAgICAgIDE6IHBhdXNlIHN5c3RlbSBjbG9jayA9PiB0aGUgTFAgY2xvY2sgaXMgc3RvcHBlZCBhbmQgb25seSBWQlVTIGFuZCBVU0IgaXJxcyBhcmUgaGFuZGxlZAorICogICAgICAgICAgMjogcGF1c2UgYXBwbGljYXRpb24gPT4gVGhlIHN5c3RlbSBpcyBub3QgcGF1c2VkIGJ1dCB0aGUgYXBwbGljYXRpb24gbXVzdCBzdG9wIGFsbAorICogICAgICAgICAgICAgdGltZXJzIGFuZCBtYWtlIHN1cmUgYWxsIHRhc2tzIGFyZSBibG9ja2VkLgorICoKKyAqICAgICAgICAgIEJvdGggaW4gbW9kZXMgMSBhbmQgMiwgdGhlIGFwcGxpY2F0aW9uIG11c3QgbWFrZSBzdXJlIHRoYXQgYWxsIGV4dGVybmFsIHBlcmlwaGVyYWxzIGFyZQorICogICAgICAgICAgZWl0aGVyIHBvd2VyZWQgb2ZmIG9yIHBsYWNlZCBpbiB0aGUgbG93ZXN0IHBvd2VyIGNvbnN1bXB0aW9uIG1vZGUuCisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNCX1NVU1BFTkRfTU9ERQorI2RlZmluZSBkZ19jb25maWdVU0JfU1VTUEVORF9NT0RFICAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSBVU0IgQ2hhcmdlciB3aWxsIHN0YXJ0IGNoYXJnaW5nIHdpdGggbGVzcyB0aGFuIDEwMG1BIHVudGlsIGVudW1lcmF0ZWQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0FMTE9XX0NIQVJHSU5HX05PVF9FTlVNCisjZGVmaW5lIGRnX2NvbmZpZ0FMTE9XX0NIQVJHSU5HX05PVF9FTlVNICAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgVVNCIGNoYXJnZXIgd2lsbCBzdG9wIGNoYXJnaW5nIGZyb20gYW4gU0RQIHBvcnQgKGlmCisgKiAgICAgICAgI2RnX2NvbmZpZ0FMTE9XX0NIQVJHSU5HX05PVF9FTlVNIGlzIHNldCB0byAxKSBhZnRlciA0NSBtaW51dGVzLCBpZiBub3QgZW51bWVyYXRlZC4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNFX05PVF9FTlVNX0NIQVJHSU5HX1RJTUVPVVQKKyNkZWZpbmUgZGdfY29uZmlnVVNFX05PVF9FTlVNX0NIQVJHSU5HX1RJTUVPVVQgICgxKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFByZS1jaGFyZ2luZyBpbml0aWFsIG1lYXN1cmUgZGVsYXkKKyAqCisgKiBUaGlzIGlzIHRoZSB0aW1lIHRvIHdhaXQgKE4geCAxMCBtcykgYmVmb3JlIGRvaW5nIHRoZSBmaXJzdCB2b2x0YWdlIG1lYXN1cmVtZW50IGFmdGVyIHN0YXJ0aW5nCisgKiBwcmUtY2hhcmdpbmcuIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYW4gaW5pdGlhbCBiYXR0ZXJ5IHZvbHRhZ2Ugb3ZlcnNob290IHdpbGwgbm90IHRyaWdnZXIgdGhlCisgKiBjaGFyZ2VyIHRvIHN0b3AgcHJlLWNoYXJnaW5nIGFuZCBtb3ZlIHRvIG5vcm1hbCBjaGFyZ2luZy4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnUFJFQ0hBUkdJTkdfSU5JVElBTF9NRUFTVVJFX0RFTEFZCisjZGVmaW5lIGRnX2NvbmZpZ1BSRUNIQVJHSU5HX0lOSVRJQUxfTUVBU1VSRV9ERUxBWSAgICAgICgzKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFByZS1jaGFyZ2luZyB0aHJlc2hvbGQKKyAqCisgKiBXaGVuIFZiYXQgaXMgYmVsb3cgdGhpcyB0aHJlc2hvbGQgKGluIEFEQyBtZWFzdXJlbWVudCB1bml0cyksIHByZS1jaGFyZ2luZyBzdGFydHMuCisgKgorICogVGhlIHZhbHVlIG11c3QgYmUgY2FsY3VsYXRlZCB1c2luZyB0aGlzIGVxdWF0aW9uOgorICoKKyAqIHlbQURDIHVuaXRzXSA9ICg0MDk1ICogVmJhdFtWb2x0c10pIC8gNQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdQUkVDSEFSR0lOR19USFJFU0hPTEQKKyNkZWZpbmUgZGdfY29uZmlnUFJFQ0hBUkdJTkdfVEhSRVNIT0xEICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBDaGFyZ2luZyB0aHJlc2hvbGQKKyAqCisgKiBXaGVuIFZiYXQgaXMgYXQgb3IgYWJvdmUgdGhpcyB0aHJlc2hvbGQgKGluIEFEQyBtZWFzdXJlbWVudCB1bml0cyksIHByZS1jaGFyZ2luZyBzdG9wcyBhbmQKKyAqIGNoYXJnaW5nIHN0YXJ0cy4KKyAqCisgKiBUaGUgdmFsdWUgbXVzdCBiZSBjYWxjdWxhdGVkIHVzaW5nIHRoaXMgZXF1YXRpb246CisgKgorICogeVtBREMgdW5pdHNdID0gKDQwOTUgKiBWYmF0W1ZvbHRzXSkgLyA1CisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0NIQVJHSU5HX1RIUkVTSE9MRAorI2RlZmluZSBkZ19jb25maWdDSEFSR0lOR19USFJFU0hPTEQgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFByZS1jaGFyZ2luZyB0aW1lb3V0CisgKgorICogSWYgYWZ0ZXIgdGhpcyBwZXJpb2QsIHRoZSBWYmF0IGlzIG5vdCBoaWdoZXIgdGhhbiAzLjBWIHRoZW4gcHJlLWNoYXJnaW5nIHN0b3BzIChOIHggMTBtc2VjKS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnUFJFQ0hBUkdJTkdfVElNRU9VVAorI2RlZmluZSBkZ19jb25maWdQUkVDSEFSR0lOR19USU1FT1VUICAgICgxNSAqIDYwICogMTAwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIENoYXJnaW5nIHRpbWVvdXQKKyAqCisgKiBJZiBhZnRlciB0aGlzIHBlcmlvZCwgdGhlIGNoYXJnZXIgaXMgc3RpbGwgY2hhcmdpbmcgdGhlbiBjaGFyZ2luZyBzdG9wcyAoTiB4IDEwbXNlYykuIFRoaXMKKyAqIHRpbWVvdXQgaGFzIHByaW9yaXR5IG92ZXIgdGhlIG5leHQgdHdvIHRpbWVvdXRzLiBJZiBpdCBpcyBub3QgemVybyB0aGVuIGl0IGlzIHRoZSBvbmx5IG9uZSB0YWtlbgorICogaW50byBhY2NvdW50LgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdDSEFSR0lOR19USU1FT1VUCisjZGVmaW5lIGRnX2NvbmZpZ0NIQVJHSU5HX1RJTUVPVVQgICAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQ2hhcmdpbmcgQ0MgdGltZW91dAorICoKKyAqIElmIGFmdGVyIHRoaXMgcGVyaW9kLCB0aGUgY2hhcmdlciBpcyBzdGlsbCBpbiBDQyBtb2RlIHRoZW4gY2hhcmdpbmcgc3RvcHMgKE4geCAxMG1zZWMpLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdDSEFSR0lOR19DQ19USU1FT1VUCisjZGVmaW5lIGRnX2NvbmZpZ0NIQVJHSU5HX0NDX1RJTUVPVVQgICAgKDE4MCAqIDYwICogMTAwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIENoYXJnaW5nIENWIHRpbWVvdXQKKyAqCisgKiBJZiBhZnRlciB0aGlzIHBlcmlvZCwgdGhlIGNoYXJnZXIgaXMgc3RpbGwgaW4gQ0MgbW9kZSB0aGVuIGNoYXJnaW5nIHN0b3BzIChOIHggMTBtc2VjKS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQ0hBUkdJTkdfQ1ZfVElNRU9VVAorI2RlZmluZSBkZ19jb25maWdDSEFSR0lOR19DVl9USU1FT1VUICAgICgzNjAgKiA2MCAqIDEwMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBDaGFyZ2luZiBwb2xsaW5nIGludGVydmFsCisgKgorICogV2hpbGUgYmVpbmcgYXR0YWNoZWQgdG8gYSBVU0IgY2FibGUgYW5kIHRoZSBiYXR0ZXJ5IGhhcyBiZWVuIGNoYXJnZWQsIHRoaXMgaXMgdGhlIGludGVydmFsCisgKiAoTiB4IDEwbXNlYykgdGhhdCB0aGUgVmJhdCBpcyBwb2xsZWQgdG8gZGVjaWRlIHdoZXRoZXIgYSBuZXcgY2hhcmdlIGN5Y2xlIHdpbGwgYmUgc3RhcnRlZC4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNCX0NIQVJHRVJfUE9MTElOR19JTlRFUlZBTAorI2RlZmluZSBkZ19jb25maWdVU0JfQ0hBUkdFUl9QT0xMSU5HX0lOVEVSVkFMICAgKDEwMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBCYXR0ZXJ5IGxvdyBsZXZlbAorICoKKyAqIElmIG5vdCB6ZXJvLCB0aGlzIGlzIHRoZSBsb3cgbGltaXQgb2YgdGhlIGJhdHRlcnkgdm9sdGFnZS4gSWYgVmJhdCBkcm9wcyBiZWxvdyB0aGlzIGxpbWl0LCB0aGUKKyAqIHN5c3RlbSBlbnRlcnMgaGliZXJuYXRpb24gbW9kZSwgd2FpdGluZyBlaXRoZXIgZm9yIHRoZSBiYXR0ZXJ5IHRvIHRoZSBjaGFuZ2VkIG9yIHJlY2hhcmdlZC4KKyAqCisgKiBUaGUgdmFsdWUgbXVzdCBiZSBjYWxjdWxhdGVkIHVzaW5nIHRoaXMgZXF1YXRpb246CisgKgorICogeVtBREMgdW5pdHNdID0gKDQwOTUgKiBWYmF0W1ZvbHRzXSkgLyA1CisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0JBVFRFUllfTE9XX0xFVkVMCisgICAgICAgICNpZiAoZGdfY29uZmlnQkFUVEVSWV9UWVBFID09IEJBVFRFUllfVFlQRV9OT19CQVRURVJZKSB8fCAoZGdfY29uZmlnQkFUVEVSWV9UWVBFID09IEJBVFRFUllfVFlQRV9OT19SRUNIQVJHRSkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ0JBVFRFUllfTE9XX0xFVkVMICAgICAgKDApCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdCQVRURVJZX0xPV19MRVZFTCAgICAgICgyMjkzKSAgLy8gMi44VgorICAgICAgICAjZW5kaWYKKyNlbmRpZgorCisvKgorICogVGhpcyBpcyBhIGRlcHJlY2F0ZWQgY29uZmlndXJhdGlvbiBoZW5jZSBub3QgdG8gYmUgZGVmaW5lZCBieSBhbiBhcHBsaWNhdGlvbi4KKyAqIFdoZW4gZW50ZXJpbmcgaGliZXJuYXRpb24gbW9kZSB0aGVuOgorICogQSBEQTE0NjgwLzEtMDEgc3lzdGVtIHJlYm9vdHMgb25seSB2aWEgYW4gaW50ZXJydXB0IGZyb20gdGhlIFdLVVAgQ3RybCBvciBWQlVTLgorICogQSBEQTE0NjgyLzMtQkEgc3lzdGVtIHJlYm9vdHMgb25seSB2aWEgYW4gaW50ZXJydXB0IGZyb20gdGhlIFdLVVAgQ3RybC4KKyAqLworI2lmZGVmIGRnX2NvbmZpZ0xPV19WQkFUX0hBTkRMSU5HCisjZXJyb3IgIkNvbmZpZ3VyYXRpb24gb3B0aW9uIGRnX2NvbmZpZ0xPV19WQkFUX0hBTkRMSU5HIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEN1c3RvbSBiYXR0ZXJ5IEFEQyB2b2x0YWdlCisgKgorICogSW4gY2FzZSBvZiBhIGN1c3RvbSBiYXR0ZXJ5IHdpdGggdW5rbm93biB2b2x0YWdlIGxldmVsLCB0aGlzIHBhcmFtZXRlciBtdXN0IGJlIGRlZmluZWQgdG8KKyAqIHByb3ZpZGUgdGhlIGNoYXJnZSBsZXZlbCBvZiB0aGUgYmF0dGVyeSBpbiBBREMgbWVhc3VyZW1lbnQgdW5pdHMuIElmIG5vdCBwcm92aWRlZCBmb3Igc29tZQorICogcmVhc29uLCBpdCBpcyBzZXQgdG8gdGhlIGxvd2VzdCBsZXZlbCAoMS45VikuCisgKgorICogVGhlIHZhbHVlIG11c3QgYmUgY2FsY3VsYXRlZCB1c2luZyB0aGlzIGVxdWF0aW9uOgorICoKKyAqIHlbQURDIHVuaXRzXSA9ICg0MDk1ICogVmJhdFtWb2x0c10pIC8gNQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmIChkZ19jb25maWdCQVRURVJZX1RZUEUgPT0gQkFUVEVSWV9UWVBFX0NVU1RPTSkKKyNpZm5kZWYgZGdfY29uZmlnQkFUVEVSWV9UWVBFX0NVU1RPTV9BRENfVk9MVEFHRQorI2RlZmluZSBkZ19jb25maWdCQVRURVJZX1RZUEVfQ1VTVE9NX0FEQ19WT0xUQUdFICAgICAgICAoMTU1NikKKyNlbmRpZgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEJhdHRlcnkgY2hhcmdlIGdhcAorICoKKyAqIFRoaXMgaXMgdGhlIHNhZmV0eSBsaW1pdCB1c2VkIGluIHRoZSAiTWVhc3VyZW1lbnQgc3RlcCIgb2YgdGhlIHNwZWNpZmljYXRpb24gdG8gZGVjaWRlIHdoZXRoZXIKKyAqIGNoYXJnaW5nIHNob3VsZCBiZSBzdGFydGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLjFWLgorICoKKyAqIFRoZSB2YWx1ZSBtdXN0IGJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhpcyBlcXVhdGlvbjoKKyAqCisgKiB5W0FEQyB1bml0c10gPSAoNDA5NSAqIFZiYXRbVm9sdHNdKSAvIDUKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQkFUVEVSWV9DSEFSR0VfR0FQCisjZGVmaW5lIGRnX2NvbmZpZ0JBVFRFUllfQ0hBUkdFX0dBUCAgICAgKDgyKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEJhdHRlcnkgcmVwbGVuaXNoIGdhcAorICoKKyAqIFRoaXMgaXMgdGhlIGxpbWl0IGJlbG93IHRoZSBtYXhpbXVtIFZiYXQgbGV2ZWwgKFZiYXQgLSBkZ19jb25maWdCQVRURVJZX1JFUExFTklTSF9HQVApLCB3aGVyZQorICogY2hhcmdpbmcgd2lsbCBiZSByZXN0YXJ0ZWQgaW4gb3JkZXIgdG8gcmVwbGVuaXNoIHRoZSBiYXR0ZXJ5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLjJWLgorICoKKyAqIFRoZSB2YWx1ZSBtdXN0IGJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhpcyBlcXVhdGlvbjoKKyAqCisgKiB5W0FEQyB1bml0c10gPSAoNDA5NSAqIFZiYXRbVm9sdHNdKSAvIDUKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQkFUVEVSWV9SRVBMRU5JU0hfR0FQCisjZGVmaW5lIGRnX2NvbmZpZ0JBVFRFUllfUkVQTEVOSVNIX0dBUCAgKDgyKjIpCisjZW5kaWYKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfSBDSEFSR0VSX1NFVFRJTkdTCisgKi8KKworCisvKioKKyAqIFxicmllZiBUaGUgUnNlbnNlIG9mIHRoZSBTT0MgaW4gbXVsdGlwbGVzIG9mIDAuMU9obS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgKDEgeCAwLjFPaG0pLgorICovCisjaWZuZGVmIGRnX2NvbmZpZ1NPQ19SU0VOU0UKKyNkZWZpbmUgZGdfY29uZmlnU09DX1JTRU5TRSAgICAgICAgICAgICAoMSkgICAgIC8vIE4geCAwLjFPaG0KKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgUHJvREsgaXMgdXNlZCAoY29udHJvbHMgc3BlY2lmaWMgc2V0dGluZ3MgZm9yIHRoaXMgYm9hcmQpLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9Qcm9ESworI2RlZmluZSBkZ19jb25maWdVU0VfUHJvREsgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIFN0YXRlIG9mIENoYXJnZSBmdW5jdGlvbiBpcyBlbmFibGVkLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0VfU09DCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9TT0MgICAgICAgICAgICAgICAgKDApCisjZWxzZQorIyAgIGlmIChkZ19jb25maWdVU0VfU09DID09IDEpCisjICAgdW5kZWYgZGdfY29uZmlnVVNFX0hXX1NPQworIyAgIGRlZmluZSBkZ19jb25maWdVU0VfSFdfU09DICAgICAgICAgICgxKQorIyAgIGVuZGlmCisjZW5kaWYKKworLyoqCisgKiBcYWRkdG9ncm91cCBGTEFTSF9TRVRUSU5HUworICoKKyAqIFxicmllZiBGbGFzaCBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgKgorICogXHsKKyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRmxhc2ggc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxicmllZiBUaGUgcmFpbCBmcm9tIHdoaWNoIHRoZSBGbGFzaCBpcyBwb3dlcmVkLCBpZiBhIEZsYXNoIGlzIHVzZWQuCisgKgorICogLSBGTEFTSF9JU19OT1RfQ09OTkVDVEVECisgKiAtIEZMQVNIX0NPTk5FQ1RFRF9UT18xVjgKKyAqIC0gRkxBU0hfQ09OTkVDVEVEX1RPXzFWOFAKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdGTEFTSF9DT05ORUNURURfVE8KKyNlcnJvciAiZGdfY29uZmlnRkxBU0hfQ09OTkVDVEVEX1RPIGlzIG5vdCBkZWZpbmVkISIKKyNlbmRpZgorCisvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGNoZWNrcyAqLworI2lmIGRlZmluZWQoZGdfY29uZmlnUE9XRVJfRVhUXzFWOF9QRVJJUEhFUkFMUykgfHwgZGVmaW5lZChkZ19jb25maWdQT1dFUl9GTEFTSCkgXAorICAgICAgICAgICAgICAgIHx8IGRlZmluZWQoZGdfY29uZmlnRkxBU0hfUE9XRVJfT0ZGKQorI2RlZmluZSBQUklOVF9QT1dFUl9SQUlMX1NFVFVQCisjZW5kaWYKKworI2lmIGRlZmluZWQoZGdfY29uZmlnUE9XRVJfRVhUXzFWOF9QRVJJUEhFUkFMUykgJiYgZGVmaW5lZChkZ19jb25maWdQT1dFUl8xVjhQKQorI2Vycm9yICJCb3RoIGRnX2NvbmZpZ1BPV0VSX0VYVF8xVjhfUEVSSVBIRVJBTFMgYW5kIGRnX2NvbmZpZ1BPV0VSXzFWOFAgYXJlIGRlZmluZWQhIFBsZWFzZSB1c2UgZGdfY29uZmlnUE9XRVJfMVY4UCBvbmx5ISIKKyNlbmRpZgorCisjaWZkZWYgZGdfY29uZmlnUE9XRVJfRVhUXzFWOF9QRVJJUEhFUkFMUworICAgICAgICAjd2FybmluZyAiZGdfY29uZmlnUE9XRVJfRVhUXzFWOF9QRVJJUEhFUkFMUyB3aWxsIGJlIGRlcHJlY2F0ZWQhIFVzZSBkZ19jb25maWdQT1dFUl8xVjhQIGluc3RlYWQhIgorCisgICAgICAgICNpZiAoZGdfY29uZmlnUE9XRVJfRVhUXzFWOF9QRVJJUEhFUkFMUyA9PSAwKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoZGdfY29uZmlnRkxBU0hfQ09OTkVDVEVEX1RPID09IEZMQVNIX0NPTk5FQ1RFRF9UT18xVjhQKQorICAgICAgICAgICAgICAgICNlcnJvciAiRmxhc2ggaXMgY29ubmVjdGVkIHRvIDFWOFAgYnV0IGRnX2NvbmZpZ1BPV0VSX0VYVF8xVjhfUEVSSVBIRVJBTFMgaXMgMC4uLiIKKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgI2lmIChkZ19jb25maWdQT1dFUl9FWFRfMVY4X1BFUklQSEVSQUxTID09IDEpCisgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhQICAgICAgICAgICAgICgxKQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnUE9XRVJfMVY4UCAgICAgICAgICAgICAoMCkKKyAgICAgICAgI2VuZGlmCisgICAgICAgICN1bmRlZiBkZ19jb25maWdQT1dFUl9FWFRfMVY4X1BFUklQSEVSQUxTCisjZW5kaWYKKworI2lmIGRlZmluZWQoZGdfY29uZmlnUE9XRVJfRkxBU0gpICYmIGRlZmluZWQoZGdfY29uZmlnUE9XRVJfMVY4X0FDVElWRSkKKyNlcnJvciAiQm90aCBkZ19jb25maWdQT1dFUl9GTEFTSCBhbmQgZGdfY29uZmlnUE9XRVJfMVY4X0FDVElWRSBhcmUgZGVmaW5lZCEgUGxlYXNlIHVzZSBkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFIG9ubHkhIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZMQVNIX1BPV0VSX09GRikgJiYgZGVmaW5lZChkZ19jb25maWdQT1dFUl8xVjhfU0xFRVApCisjZXJyb3IgIkJvdGggZGdfY29uZmlnRkxBU0hfUE9XRVJfT0ZGIGFuZCBkZ19jb25maWdQT1dFUl8xVjhfU0xFRVAgYXJlIGRlZmluZWQhIFBsZWFzZSB1c2UgZGdfY29uZmlnUE9XRVJfMVY4X1NMRUVQIG9ubHkhIgorI2VuZGlmCisKKyNpZmRlZiBkZ19jb25maWdQT1dFUl9GTEFTSAorI3dhcm5pbmcgImRnX2NvbmZpZ1BPV0VSX0ZMQVNIIGlzIGRlcHJlY2F0ZWQhIFVzZSBkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFIGluc3RlYWQhIgorI2VuZGlmCisvKiBFbmQgb2YgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBjaGVja3MgKi8KKworLyoqCisgKiBcYnJpZWYgV2hlbiBzZXQgdG8gMSwgdGhlIDFWOCByYWlsIGlzIHBvd2VyZWQsIHdoZW4gdGhlIHN5c3RlbSBpcyBpbiBhY3RpdmUgc3RhdGUuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnUE9XRVJfMVY4X0FDVElWRQorI2lmbmRlZiBkZ19jb25maWdQT1dFUl9GTEFTSAorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ1BPV0VSXzFWOF9BQ1RJVkUgICAgICAgICAgICAgICAoMCkKKyNlbHNlCisgICAgICAgICNpZiAoZGdfY29uZmlnUE9XRVJfRkxBU0ggPT0gMCkKKyAgICAgICAgICAgICAgICAjaWYgKGRnX2NvbmZpZ0ZMQVNIX0NPTk5FQ1RFRF9UTyA9PSBGTEFTSF9DT05ORUNURURfVE9fMVY4KQorICAgICAgICAgICAgICAgICAgICAgICAgI2Vycm9yICJGbGFzaCBpcyBjb25uZWN0ZWQgdG8gdGhlIDFWOCByYWlsIGJ1dCB0aGUgcmFpbCBpcyB0dXJuZWQgb2ZmICgxKS4uLiIKKyAgICAgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFICAgICAgICgwKQorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnUE9XRVJfMVY4X0FDVElWRSAgICAgICAoMSkKKyAgICAgICAgI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgMVY4IGlzIHBvd2VyZWQgZHVyaW5nIHNsZWVwLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUAorI2lmbmRlZiBkZ19jb25maWdGTEFTSF9QT1dFUl9PRkYKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhfU0xFRVAgICAgICAgICgwKQorI2Vsc2UKKyAgICAgICAgI2lmIChkZ19jb25maWdGTEFTSF9QT1dFUl9PRkYgPT0gMCkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCAgICAgICAgKDEpCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhfU0xFRVAgICAgICAgICgwKQorICAgICAgICAjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSBGbGFzaCAoY29ubmVjdGVkIHRvIHRoZSAxVjggcmFpbCkgaXMgcG93ZXJlZCBvZmYgZHVyaW5nIHNsZWVwLgorICoKKyAqIFxub3RlIFRoaXMgaXMgYW4gaW50ZXJuYWwgZGVmaW5lIGFuZCBjYW5ub3QgYmUgb3ZlcnJpZGRlbiEKKyAqLworI3VuZGVmIGRnX2NvbmZpZ0ZMQVNIX1BPV0VSX09GRgorI2RlZmluZSBkZ19jb25maWdGTEFTSF9QT1dFUl9PRkYgICAgICAgICgoZGdfY29uZmlnRkxBU0hfQ09OTkVDVEVEX1RPID09IEZMQVNIX0NPTk5FQ1RFRF9UT18xVjgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChkZ19jb25maWdQT1dFUl8xVjhfU0xFRVAgPT0gMCkpCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSAxVjhQIHJhaWwgaXMgcG93ZXJlZC4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdQT1dFUl8xVjhQCisjZGVmaW5lIGRnX2NvbmZpZ1BPV0VSXzFWOFAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgV2hlbiBzZXQgdG8gMSwgdGhlIFFTUEkgRkxBU0ggaXMgcHV0IHRvIHBvd2VyLWRvd24gc3RhdGUgZHVyaW5nIHNsZWVwLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0ZMQVNIX1BPV0VSX0RPV04KKyNkZWZpbmUgZGdfY29uZmlnRkxBU0hfUE9XRVJfRE9XTiAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBFbmFibGUgdGhlIEZsYXNoIEF1dG9kZXRlY3Rpb24gbW9kZQorICoKKyAqIFx3YXJuaW5nIFRISVMgV0lMTCBHUkVBVExZIElOQ1JFQVNFIFRIRSBDT0RFIFNJWkUgQU5EIFJFVFJBTSBVU0FHRSEhISBNQUtFIFNVUkUgWU9VUiBQUk9KRUNUCisgKiAgICAgICAgICBDQU4gU1VQUE9SVCBUSElTLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdGTEFTSF9BVVRPREVURUNUCisjZGVmaW5lIGRnX2NvbmZpZ0ZMQVNIX0FVVE9ERVRFQ1QgICAgICAgKDApCisjZW5kaWYKKworI2lmIGRnX2NvbmZpZ0ZMQVNIX0FVVE9ERVRFQ1QgPT0gMAorCisvKioKKyAqIFxicmllZiBUaGUgRmxhc2ggRHJpdmVyIGhlYWRlciBmaWxlIHRvIGluY2x1ZGUKKyAqCisgKiBUaGUgaGVhZGVyIGZpbGUgbXVzdCBiZSBpbiB0aGUgaW5jbHVkZSBwYXRoIG9mIHRoZSBjb21waWxlcgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0ZMQVNIX0hFQURFUl9GSUxFCisjZGVmaW5lIGRnX2NvbmZpZ0ZMQVNIX0hFQURFUl9GSUxFICAgICAgInFzcGlfdzI1cTgwZXcuaCIKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBUaGUgRmxhc2ggTWFudWZhY3R1cmVyIElECisgKgorICogVGhpcyBtdXN0IGJlIGRlZmluZWQgaW5zaWRlIHRoZSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdGTEFTSF9NQU5VRkFDVFVSRVJfSUQKKyNkZWZpbmUgZGdfY29uZmlnRkxBU0hfTUFOVUZBQ1RVUkVSX0lEICBXSU5CT05EX0lECisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgVGhlIEZsYXNoIERldmljZSBUeXBlIElECisgKgorICogVGhpcyBtdXN0IGJlIGRlZmluZWQgaW5zaWRlIHRoZSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdGTEFTSF9ERVZJQ0VfVFlQRQorI2RlZmluZSBkZ19jb25maWdGTEFTSF9ERVZJQ0VfVFlQRSAgICAgIFcyNVE4MEVXCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgVGhlIEZsYXNoIERldmljZSBEZW5zaXR5IElECisgKgorICogVGhpcyBtdXN0IGJlIGRlZmluZWQgaW5zaWRlIHRoZSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdGTEFTSF9ERU5TSVRZCisjZGVmaW5lIGRnX2NvbmZpZ0ZMQVNIX0RFTlNJVFkgICAgICAgICAgVzI1UV84TWJfU0laRQorI2VuZGlmCisKKyNlbmRpZiAvKiBkZ19jb25maWdGTEFTSF9BVVRPREVURUNUID09IDAgKi8KKworLyoqCisgKiBcYnJpZWYgT2Zmc2V0IG9mIHRoZSBpbWFnZSBpZiBub3QgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgUVNQSSBGbGFzaC4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnSU1BR0VfRkxBU0hfT0ZGU0VUCisjZGVmaW5lIGRnX2NvbmZpZ0lNQUdFX0ZMQVNIX09GRlNFVCAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIGZsYXNoIHBhZ2Ugc2l6ZS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnRkxBU0hfTUFYX1dSSVRFX1NJWkUKKyNkZWZpbmUgZGdfY29uZmlnRkxBU0hfTUFYX1dSSVRFX1NJWkUgICAgICAgICAgICgxMjgpCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBiYWNrZ3JvdW5kIG9wZXJhdGlvbnMuCisgKgorICogV2hlbiBlbmFibGVkLCBvdXRzdGFuZGluZyBRU1BJIG9wZXJhdGlvbnMgd2lsbCB0YWtlIHBsYWNlIGR1cmluZyBzbGVlcCB0aW1lCisgKiBpbmNyZWFzaW5nIHRoZSBlZmZpY2llbmN5LgorICoKKyAqIC0gMSA6IERpc2FibGVkCisgKiAtIDAgOiBFbmFibGVkCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0RJU0FCTEVfQkFDS0dST1VORF9GTEFTSF9PUFMKKyNkZWZpbmUgZGdfY29uZmlnRElTQUJMRV9CQUNLR1JPVU5EX0ZMQVNIX09QUyAgICgwKQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfQorICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgREVCVUdfU0VUVElOR1MKKyAqCisgKiBcYnJpZWYgRGVidWdnaW5nIHNldHRpbmdzCisgKgorICogXHsKKyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWcgc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxicmllZiBFbmFibGUgZGVidWdnZXIKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdFTkFCTEVfREVCVUdHRVIKKyNkZWZpbmUgZGdfY29uZmlnRU5BQkxFX0RFQlVHR0VSICAgICAgICAoMSkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBVc2UgU1cgY3Vyc29yCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNFX1NXX0NVUlNPUgorIyAgICAgICBkZWZpbmUgZGdfY29uZmlnVVNFX1NXX0NVUlNPUiAgICAgICAgICAgKDApCisjICAgICAgIGRlZmluZSBTV19DVVJTT1JfUE9SVCAgICAgICAgICAgICAgICAgICAoMCkKKyMgICAgICAgZGVmaW5lIFNXX0NVUlNPUl9QSU4gICAgICAgICAgICAgICAgICAgICgwKQorI2Vsc2UKKyMgICAgICAgaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9NQl9SRVYgPT0gQkxBQ0tfT1JDQV9NQl9SRVZfRAorIyAgICAgICAgICAgICAgIGlmICFkZWZpbmVkIFNXX0NVUlNPUl9QT1JUICAmJiAgIWRlZmluZWQgU1dfQ1VSU09SX1BJTgorIyAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIFNXX0NVUlNPUl9QT1JUICAgKDApCisjICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgU1dfQ1VSU09SX1BJTiAgICAoNykKKyMgICAgICAgICAgICAgICBlbmRpZgorIyAgICAgICBlbHNlCisjICAgICAgICAgICAgICAgaWYgIWRlZmluZWQgU1dfQ1VSU09SX1BPUlQgICYmICAhZGVmaW5lZCBTV19DVVJTT1JfUElOCisjICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgU1dfQ1VSU09SX1BPUlQgICAoMikKKyMgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBTV19DVVJTT1JfUElOICAgICgzKQorIyAgICAgICAgICAgICAgIGVuZGlmCisjICAgICAgIGVuZGlmCisjZW5kaWYKKyNkZWZpbmUgU1dfQ1VSU09SX0dQSU8gICAgICAgICAgICAgICAgICAqKFNXX0NVUlNPUl9QT1JUID09IDAgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAwID8gJihHUElPLT5QMDBfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gMSA/ICYoR1BJTy0+UDAxX01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDIgPyAmKEdQSU8tPlAwMl9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAzID8gJihHUElPLT5QMDNfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gNCA/ICYoR1BJTy0+UDA0X01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDUgPyAmKEdQSU8tPlAwNV9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSA2ID8gJihHUElPLT5QMDZfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoR1BJTy0+UDA3X01PREVfUkVHKSkpKSkpKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QT1JUID09IDEgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAwID8gJihHUElPLT5QMTBfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gMSA/ICYoR1BJTy0+UDExX01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDIgPyAmKEdQSU8tPlAxMl9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAzID8gJihHUElPLT5QMTNfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gNCA/ICYoR1BJTy0+UDE0X01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDUgPyAmKEdQSU8tPlAxNV9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSA2ID8gJihHUElPLT5QMTZfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoR1BJTy0+UDE3X01PREVfUkVHKSkpKSkpKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QT1JUID09IDIgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAwID8gJihHUElPLT5QMjBfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gMSA/ICYoR1BJTy0+UDIxX01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDIgPyAmKEdQSU8tPlAyMl9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAzID8gJihHUElPLT5QMjNfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoR1BJTy0+UDI0X01PREVfUkVHKSkpKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QT1JUID09IDMgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAwID8gJihHUElPLT5QMzBfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gMSA/ICYoR1BJTy0+UDMxX01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDIgPyAmKEdQSU8tPlAzMl9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAzID8gJihHUElPLT5QMzNfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gNCA/ICYoR1BJTy0+UDM0X01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDUgPyAmKEdQSU8tPlAzNV9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSA2ID8gJihHUElPLT5QMzZfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoR1BJTy0+UDM3X01PREVfUkVHKSkpKSkpKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAwID8gJihHUElPLT5QNDBfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gMSA/ICYoR1BJTy0+UDQxX01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDIgPyAmKEdQSU8tPlA0Ml9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAzID8gJihHUElPLT5QNDNfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gNCA/ICYoR1BJTy0+UDQ0X01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDUgPyAmKEdQSU8tPlA0NV9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSA2ID8gJihHUElPLT5QNDZfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoR1BJTy0+UDQ3X01PREVfUkVHKSkpKSkpKSkpKSkpCisKKyNkZWZpbmUgU1dfQ1VSU09SX1NFVCAgICAgICAgICAgICAgICAgICAqKFNXX0NVUlNPUl9QT1JUID09IDAgPyAmKEdQSU8tPlAwX1NFVF9EQVRBX1JFRykgOiAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QT1JUID09IDEgPyAmKEdQSU8tPlAxX1NFVF9EQVRBX1JFRykgOiAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUE9SVCA9PSAyID8gJihHUElPLT5QMl9TRVRfREFUQV9SRUcpIDogICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BPUlQgPT0gMyA/ICYoR1BJTy0+UDNfU0VUX0RBVEFfUkVHKSA6ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKEdQSU8tPlA0X1NFVF9EQVRBX1JFRykpKSkpCisKKyNkZWZpbmUgU1dfQ1VSU09SX1JFU0VUICAgICAgICAgICAgICAgICAqKFNXX0NVUlNPUl9QT1JUID09IDAgPyAmKEdQSU8tPlAwX1JFU0VUX0RBVEFfUkVHKSA6ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QT1JUID09IDEgPyAmKEdQSU8tPlAxX1JFU0VUX0RBVEFfUkVHKSA6ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUE9SVCA9PSAyID8gJihHUElPLT5QMl9SRVNFVF9EQVRBX1JFRykgOiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BPUlQgPT0gMyA/ICYoR1BJTy0+UDNfUkVTRVRfREFUQV9SRUcpIDogICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKEdQSU8tPlA0X1JFU0VUX0RBVEFfUkVHKSkpKSkKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfQorICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgQ0FDSEVfU0VUVElOR1MKKyAqCisgKiBcYnJpZWYgQ2FjaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncworICogXHsKKyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2FjaGUgc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxicmllZiBTZXQgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgUVNQSSBmbGFzaCBjYWNoZWFibGUgYXJlYS4KKyAqCisgKiBBbGwgcmVhZHMgZnJvbSBvZmZzZXQgMCB1cCB0byAobm90IGluY2x1ZGluZykgb2Zmc2V0IGRnX2NvbmZpZ0NBQ0hFQUJMRV9RU1BJX0FSRUFfTEVOCisgKiB3aWxsIGJlIGNhY2hlZC4gSW4gYWRkaXRpb24sIGFueSB3cml0ZXMgdG8gdGhpcyBhcmVhIHdpbGwgdHJpZ2dlciBjYWNoZSBmbHVzaGluZywgdG8KKyAqIGF2b2lkIGFueSBjYWNoZSBpbmNvaGVyZW5jZS4KKyAqCisgKiBUaGUgc2l6ZSBtdXN0IGJlIDY0S0ItYWxpZ25lZCwgZHVlIHRvIHRoZSBncmFudWxhcml0eSBvZiBDQUNIRV9DVFJMMl9SRUdbQ0FDSEVfTEVOXS4KKyAqCisgKiBTcGVjaWFsIHZhbHVlczoKKyAqICAqICAwIDogVHVybiBvZmYgY2FjaGUuCisgKiAgKiAtMSA6IERvbid0IGNvbmZpZ3VyZSBjYWNoZWFibGUgYXJlYSBzaXplIChpLmUuIGxlYXZlIGFzIHNldCBieSBib290ZXIpLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdDQUNIRUFCTEVfUVNQSV9BUkVBX0xFTgorI2RlZmluZSBkZ19jb25maWdDQUNIRUFCTEVfUVNQSV9BUkVBX0xFTiAgICAgICAgKC0xKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgYXNzb2NpYXRpdml0eSBvZiB0aGUgY2FjaGUuCisgKgorICogQXZhaWxhYmxlIHZhbHVlczoKKyAqICAgLSBDQUNIRV9BU1NPQ19BU19JUworICogICAtIENBQ0hFX0FTU09DX0RJUkVDVF9NQVAKKyAqICAgLSBDQUNIRV9BU1NPQ18yX1dBWQorICogICAtIENBQ0hFX0FTU09DXzRfV0FZCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQ0FDSEVfQVNTT0NJQVRJVklUWQorI2RlZmluZSBkZ19jb25maWdDQUNIRV9BU1NPQ0lBVElWSVRZICAgIENBQ0hFX0FTU09DXzRfV0FZCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBsaW5lIHNpemUgb2YgdGhlIGNhY2hlLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICoKKyAqIEF2YWlsYWJsZSB2YWx1ZXM6CisgKiAgIC0gQ0FDSEVfTElORVNaX0FTX0lTCisgKiAgIC0gQ0FDSEVfTElORVNaXzhfQllURVMKKyAqICAgLSBDQUNIRV9MSU5FU1pfMTZfQllURVMKKyAqICAgLSBDQUNIRV9MSU5FU1pfMzJfQllURVMKKyAqLworI2lmbmRlZiBkZ19jb25maWdDQUNIRV9MSU5FU1oKKyNkZWZpbmUgZGdfY29uZmlnQ0FDSEVfTElORVNaICAgICAgICAgICBDQUNIRV9MSU5FU1pfOF9CWVRFUworI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIEFSQklURVJfU0VUVElOR1MKKyAqCisgKiBcYnJpZWYgQXJiaXRlciBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgKiBceworICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFyYml0ZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGJyaWVmIEN1c3RvbSBhcmJpdGVyIGNvbmZpZ3VyYXRpb24gc3VwcG9ydC4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdDT0VYX0VOQUJMRV9DT05GSUcKKyNkZWZpbmUgZGdfY29uZmlnQ09FWF9FTkFCTEVfQ09ORklHICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBBcmJpdGVyIHN0YXRpc3RpY3MKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdDT0VYX0VOQUJMRV9TVEFUUworI2RlZmluZSBkZ19jb25maWdDT0VYX0VOQUJMRV9TVEFUUyAgICAgICgwKQorI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBFUklQSEVSQUxfU0VMRUNUSU9OCisgKgorICogXGJyaWVmIFBlcmlwaGVyYWwgc2VsZWN0aW9uCisgKgorICogV2hlbiBlbmFibGVkIHRoZSBzcGVjaWZpYyBsb3cgbGV2ZWwgZHJpdmVyIGlzIGluY2x1ZGVkIGluIHRoZSBjb21waWxhdGlvbiBvZiB0aGUgU0RLLgorICogLSAwIDogRGlzYWJsZWQKKyAqIC0gMSA6IEVuYWJsZWQKKyAqCisgKiBUaGUgZGVmYXVsdCBvcHRpb24gY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAqCisgKiBceworICAgRHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2V0dGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWZhdWx0IG9wdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCA6LS0tLS0tLS0tLS0tLS0tLS0tOgorICAgQUVTIEhBU0ggICAgICAgICAgICAgICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX0FFU19IQVNIICAgICAgICAgICAgICAgfCAwCisgICBSYWRpbyBNQUMgQXJiaXRlciAgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfQ09FWCAgICAgICAgICAgICAgICAgICB8IDAKKyAgIENsb2NrIGFuZCBQb3dlciBNYW5hZ2VyICAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19DUE0gICAgICAgICAgICAgICAgICAgIHwgMQorICAgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX0RNQSAgICAgICAgICAgICAgICAgICAgfCAxCisgICBFbGxpcHRpYyBDdXJ2ZSBDb250cm9sbGVyICAgICAgfCBkZ19jb25maWdVU0VfSFdfRUNDICAgICAgICAgICAgICAgICAgICB8IDEKKyAgIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRlciAgICB8IGRnX2NvbmZpZ1VTRV9IV19HUEFEQyAgICAgICAgICAgICAgICAgIHwgMQorICAgR2VuZXJhbCBQdXJwb3NlIEkvTyAgICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX0dQSU8gICAgICAgICAgICAgICAgICAgfCAxCisgICBJbnRlci1JbnRlZ3JhdGVkIENpcmN1aXQgICAgICAgfCBkZ19jb25maWdVU0VfSFdfSTJDICAgICAgICAgICAgICAgICAgICB8IDAKKyAgIEluZnJhIFJlZCBHZW5lcmF0b3IgICAgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19JUkdFTiAgICAgICAgICAgICAgICAgIHwgMAorICAgS2V5Ym9hcmQgc2Nhbm5lciAgICAgICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX0tFWUJPQVJEX1NDQU5ORVIgICAgICAgfCAwCisgICBPVFAgY29udHJvbGxlciAgICAgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfT1RQQyAgICAgICAgICAgICAgICAgICB8IDEKKyAgIFFTUEkgY29udHJvbGxlciAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19RU1BJICAgICAgICAgICAgICAgICAgIHwgMQorICAgUXVhZHJhdHVyZSBkZWNvZGVyICAgICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX1FVQUQgICAgICAgICAgICAgICAgICAgfCAwCisgICBSYWRpbyBtb2R1bGUgICAgICAgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfUkYgICAgICAgICAgICAgICAgICAgICB8IDEKKyAgIFN0YXRlIG9mIGNoYXJnZSBtb2R1bGUgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19TT0MgICAgICAgICAgICAgICAgICAgIHwgMAorICAgVGltZXIgMCAgICAgICAgICAgICAgICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX1RJTUVSMCAgICAgICAgICAgICAgICAgfCAwCisgICBUaW1lciAxICAgICAgICAgICAgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfVElNRVIxICAgICAgICAgICAgICAgICB8IDEKKyAgIFRpbWVyIDIgICAgICAgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19USU1FUjIgICAgICAgICAgICAgICAgIHwgMAorICAgVHJ1ZSBSYW5kb20gR2VuZXJhdG9yICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX1RSTkcgICAgICAgICAgICAgICAgICAgfCAxCisgICBVQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfVUFSVCAgICAgICAgICAgICAgICAgICB8IDEKKyAgIFVTQiBjaGFyZ2VyICAgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19VU0JfQ0hBUkdFUiAgICAgICAgICAgIHwgMQorICAgV2FrZXVwIHRpbWVyICAgICAgICAgICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX1dLVVAgICAgICAgICAgICAgICAgICAgfCAxCisgICBQRE0gaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSUZfUERNICAgICAgICAgICAgICAgICAgICB8IDAKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQZXJpcGhlcmFscyAoaHdfKikgc2VsZWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX0FFU19IQVNICisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19BRVNfSEFTSCAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfQ09FWAorI2RlZmluZSBkZ19jb25maWdVU0VfSFdfQ09FWCAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX0NQTQorI2RlZmluZSBkZ19jb25maWdVU0VfSFdfQ1BNICAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX0RNQQorI2RlZmluZSBkZ19jb25maWdVU0VfSFdfRE1BICAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX0VDQworI2RlZmluZSBkZ19jb25maWdVU0VfSFdfRUNDICAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX0dQQURDCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19HUEFEQyAgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfR1BJTworI2RlZmluZSBkZ19jb25maWdVU0VfSFdfR1BJTyAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX0kyQworI2RlZmluZSBkZ19jb25maWdVU0VfSFdfSTJDICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX0lSR0VOCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19JUkdFTiAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfS0VZQk9BUkRfU0NBTk5FUgorI2RlZmluZSBkZ19jb25maWdVU0VfSFdfS0VZQk9BUkRfU0NBTk5FUiAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfT1RQQworI2RlZmluZSBkZ19jb25maWdVU0VfSFdfT1RQQyAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX1FTUEkKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1FTUEkgICAgICAgICAgICAoMSkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19RVUFECisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19RVUFEICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfUkYKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1JGICAgICAgICAgICAgICAoMSkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19TT0MKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1NPQyAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19TUEkKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1NQSSAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19URU1QU0VOUworI2RlZmluZSBkZ19jb25maWdVU0VfSFdfVEVNUFNFTlMgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX1RJTUVSMAorI2RlZmluZSBkZ19jb25maWdVU0VfSFdfVElNRVIwICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX1RJTUVSMQorI2RlZmluZSBkZ19jb25maWdVU0VfSFdfVElNRVIxICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX1RJTUVSMgorI2RlZmluZSBkZ19jb25maWdVU0VfSFdfVElNRVIyICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX1RSTkcKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1RSTkcgICAgICAgICAgICAoMSkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19VQVJUCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19VQVJUICAgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfVVNCX0NIQVJHRVIKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1VTQl9DSEFSR0VSICAgICAoMSkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19XS1VQCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19XS1VQICAgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfVVNCCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19VU0IgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSUZfUERNCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9JRl9QRE0gICAgICAgICAgICAgKDApCisjZW5kaWYKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfQorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV0tVUCBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBXS1VQX1NFVFRJTkdTCisgKgorICogXGJyaWVmIFdLVVAgY29uZmlndXJhdGlvbiBzZXR0aW5ncworICogXHsKKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExBVENIIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFdLVVBfTEFUQ0hfU0VUVElOR1MKKyAqCisgKiBcYnJpZWYgV0tVUCBMQVRDSCBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgKiBceworICovCisKKy8qKgorICogXGJyaWVmIFdLVVAgbGF0Y2ggd2FrZXVwIChpbykgc291cmNlIHN1cHBvcnQKKyAqCisgKiBcbm90ZSBJbiBjaGlwIHJldmlzaW9uIERBMTQ2ODAvMS0wMSwgdGhpcyBmZWF0dXJlIGlzIGltcGxlbWVudGVkIGluIHMvdworICogXG5vdGUgSW4gY2hpcCByZXZpc2lvbiBEQTE0NjgyLzMtQkEsIHRoaXMgZmVhdHVyZSBpcyBpbXBsZW1lbnRlZCBpbiBoL3cKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmICghZGVmaW5lZChkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRSkpIHx8IChkZ19jb25maWdVU0VfSFdfV0tVUCA9PSAwKQorICAgICAgICAjdW5kZWYgZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRSAgICAgKDApCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVQVJUIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFVBUlRfU0VUVElOR1MKKyAqCisgKiBcYnJpZWYgVUFSVCBGSUZPIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyAqIFx7CisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGSUZPIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFVBUlRfRklGT19TRVRUSU5HUworICoKKyAqIFxicmllZiBVQVJUIEZJRk8gY29uZmlndXJhdGlvbiBzZXR0aW5ncworICogXHsKKyAqLworCisvKioKKyAqIFxicmllZiBTb2Z0d2FyZSBGSUZPIHN1cHBvcnQKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVQVJUX1NPRlRXQVJFX0ZJRk8KKyNkZWZpbmUgZGdfY29uZmlnVUFSVF9TT0ZUV0FSRV9GSUZPICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBVQVJUMSdzIHNvZnR3YXJlIEZJRk8gc2l6ZQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1VBUlQxX1NPRlRXQVJFX0ZJRk9fU0laRQorIyAgIGRlZmluZSBkZ19jb25maWdVQVJUMV9TT0ZUV0FSRV9GSUZPX1NJWkUgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgVUFSVDIncyBzb2Z0d2FyZSBGSUZPIHNpemUKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVQVJUMl9TT0ZUV0FSRV9GSUZPX1NJWkUKKyMgICBkZWZpbmUgZGdfY29uZmlnVUFSVDJfU09GVFdBUkVfRklGT19TSVpFICAgICgwKQorI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENpcmN1bGFyIERNQSBmb3IgUlggc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgVUFSVF9DSVJDVUxBUl9ETUFfRk9SX1JYX1NFVFRJTkdTCisgKgorICogXGJyaWVmIFVBUlQgRklGTyBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgKiBceworICovCisKKy8qKgorICogXGJyaWVmIENpcmN1bGFyIERNQSBzdXBwb3J0IGZvciBSWAorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1VBUlRfUlhfQ0lSQ1VMQVJfRE1BCisjZGVmaW5lIGRnX2NvbmZpZ1VBUlRfUlhfQ0lSQ1VMQVJfRE1BICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgVUFSVDEncyBDaXJjdWxhciBETUEgYnVmZmVyIHNpemUgZm9yIFJYCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVUFSVDFfUlhfQ0lSQ1VMQVJfRE1BX0JVRl9TSVpFCisjZGVmaW5lIGRnX2NvbmZpZ1VBUlQxX1JYX0NJUkNVTEFSX0RNQV9CVUZfU0laRSAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBVQVJUMidzIENpcmN1bGFyIERNQSBidWZmZXIgc2l6ZSBmb3IgUlgKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVQVJUMl9SWF9DSVJDVUxBUl9ETUFfQlVGX1NJWkUKKyNkZWZpbmUgZGdfY29uZmlnVUFSVDJfUlhfQ0lSQ1VMQVJfRE1BX0JVRl9TSVpFICgwKQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfQorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfQorICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgQURBUFRFUl9TRUxFQ1RJT04KKyAqCisgKiBcYnJpZWYgQWRhcHRlciBzZWxlY3Rpb24KKyAqCisgKiBXaGVuIGVuYWJsZWQgdGhlIHNwZWNpZmljIGFkYXB0ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBTREsuCisgKiAtIDAgOiBEaXNhYmxlZAorICogLSAxIDogRW5hYmxlZAorICoKKyAqIFRoZSBkZWZhdWx0IG9wdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBmaWxlLgorICoKKyAqIFx7CisgICBBZGFwdGVyICAgICAgICAgICAgICAgICAgICAgICAgfCBTZXR0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlZmF1bHQgb3B0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS06CisgICBGbGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZ19jb25maWdGTEFTSF9BREFQVEVSICAgICAgICAgICAgICAgICB8IDEKKyAgIEludGVyLUludGVncmF0ZWQgQ2lyY3VpdCAgICAgICB8IGRnX2NvbmZpZ0kyQ19BREFQVEVSICAgICAgICAgICAgICAgICAgIHwgMAorICAgTm9uIFZvbGF0aWxlIE1lbW9yeSBTdG9yYWdlICAgIHwgZGdfY29uZmlnTlZNU19BREFQVEVSICAgICAgICAgICAgICAgICAgfCAxCisgICBWaXJ0dWFsIEVFUlBPTSBTdG9yYWdlICAgICAgICAgfCBkZ19jb25maWdOVk1TX1ZFUyAgICAgICAgICAgICAgICAgICAgICB8IDEKKyAgIFJhZGlvICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1JGX0FEQVBURVIgICAgICAgICAgICAgICAgICAgIHwgMQorICAgU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICAgIHwgZGdfY29uZmlnU1BJX0FEQVBURVIgICAgICAgICAgICAgICAgICAgfCAwCisgICBVQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZ19jb25maWdVQVJUX0FEQVBURVIgICAgICAgICAgICAgICAgICB8IDAKKyAgIFVBUlQgZm9yIEJMRSAgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VBUlRfQkxFX0FEQVBURVIgICAgICAgICAgICAgIHwgMAorICAgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydGVyICAgIHwgZGdfY29uZmlnR1BBRENfQURBUFRFUiAgICAgICAgICAgICAgICAgfCAwCisgICBUZW1wZXJhdHVyZSBTZW5zb3IgICAgICAgICAgICAgfCBkZ19jb25maWdURU1QU0VOU19BREFQVEVSICAgICAgICAgICAgICB8IDAKKyAgIEJhdHRlcnkgICAgICAgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ0JBVFRFUllfQURBUFRFUiAgICAgICAgICAgICAgIHwgMAorICAgTm9uIFZvbGF0aWxlIFBhcmFtZXRlcnMgICAgICAgIHwgZGdfY29uZmlnTlZQQVJBTV9BREFQVEVSICAgICAgICAgICAgICAgfCAwCisgICBDcnlwdG8gICAgICAgICAgICAgICAgICAgICAgICAgfCBkZ19jb25maWdDUllQVE9fQURBUFRFUiAgICAgICAgICAgICAgICB8IDEKKyAgIEtleWJvYXJkIHNjYW5uZXIgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ0tFWUJPQVJEX1NDQU5ORVJfQURBUFRFUiAgICAgIHwgMAorICoKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFkYXB0ZXJzIChhZF8qKSBzZWxlY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBkZ19jb25maWdGTEFTSF9BREFQVEVSCisjZGVmaW5lIGRnX2NvbmZpZ0ZMQVNIX0FEQVBURVIgICAgICAgICAgICAgICAgICAoMSkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0kyQ19BREFQVEVSCisjZGVmaW5lIGRnX2NvbmZpZ0kyQ19BREFQVEVSICAgICAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ05WTVNfQURBUFRFUgorI2RlZmluZSBkZ19jb25maWdOVk1TX0FEQVBURVIgICAgICAgICAgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdOVk1TX0ZMQVNIX0NBQ0hFCisjZGVmaW5lIGRnX2NvbmZpZ05WTVNfRkxBU0hfQ0FDSEUgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ05WTVNfVkVTCisjZGVmaW5lIGRnX2NvbmZpZ05WTVNfVkVTICAgICAgICAgICAgICAgICAgICAgICAoMSkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1JGX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnUkZfQURBUFRFUiAgICAgICAgICAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnU1BJX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnU1BJX0FEQVBURVIgICAgICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVUFSVF9BREFQVEVSCisjZGVmaW5lIGRnX2NvbmZpZ1VBUlRfQURBUFRFUiAgICAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VBUlRfQkxFX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnVUFSVF9CTEVfQURBUFRFUiAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnR1BBRENfQURBUFRFUgorI2RlZmluZSBkZ19jb25maWdHUEFEQ19BREFQVEVSICAgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdURU1QU0VOU19BREFQVEVSCisjZGVmaW5lIGRnX2NvbmZpZ1RFTVBTRU5TX0FEQVBURVIgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0JBVFRFUllfQURBUFRFUgorI2RlZmluZSBkZ19jb25maWdCQVRURVJZX0FEQVBURVIgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdOVlBBUkFNX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnTlZQQVJBTV9BREFQVEVSICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnQ1JZUFRPX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnQ1JZUFRPX0FEQVBURVIgICAgICAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnS0VZQk9BUkRfU0NBTk5FUl9BREFQVEVSCisjZGVmaW5lIGRnX2NvbmZpZ0tFWUJPQVJEX1NDQU5ORVJfQURBUFRFUiAgICAgICAoMCkKKyNlbmRpZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBDT05TT0xFX0lPX1NFVFRJTkdTCisgKgorICogXGJyaWVmIENvbnNvbGUgSU8gY29uZmlndXJhdGlvbiBzZXR0aW5ncworICoKKyAqIFx7CisgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNldHRpbmcgICAgICAgICAgICAgICAgICAgIHwgRGVmYXVsdCBvcHRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCA6LS0tLS0tLS0tLS0tLS0tOgorICAgRW5hYmxlIHNlcmlhbCBjb25zb2xlIG1vZHVsZSAgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfQ09OU09MRSAgICAgICB8IDAKKyAgIEVuYWJsZSBzZXJpYWwgY29uc29sZSBzdHViYmVkIEFQSSAgICAgICAgIHwgZGdfY29uZmlnVVNFX0NPTlNPTEVfU1RVQlMgfCAwCisgICBFbmFibGUgQ29tbWFuZCBMaW5lIEludGVyZmFjZSBtb2R1bGUgICAgICB8IGRnX2NvbmZpZ1VTRV9DTEkgICAgICAgICAgIHwgMAorICAgRW5hYmxlIENvbW1hbmQgTGluZSBJbnRlcmZhY2Ugc3R1YmJlZCBBUEkgfCBkZ19jb25maWdVU0VfQ0xJX1NUVUJTICAgICB8IDAKKworICAgXHNlZSBjb25zb2xlLmggY2xpLmgKKworICAgXG5vdGUgQ0xJIG1vZHVsZSByZXF1aXJlcyBkZ19jb25maWdVU0VfQ09OU09MRSB0byBiZSBlbmFibGVkLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnNvbGUgSU8gY29uZmlndXJhdGlvbiBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBkZ19jb25maWdVU0VfQ09OU09MRQorI2RlZmluZSBkZ19jb25maWdVU0VfQ09OU09MRSAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0NPTlNPTEVfU1RVQlMKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0NPTlNPTEVfU1RVQlMgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9DTEkKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0NMSSAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9DTElfU1RVQlMKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0NMSV9TVFVCUyAgICAgICAgICAoMCkKKyNlbmRpZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gREdUTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxicmllZiBFbmFibGUgRC5HVEwgaW50ZXJmYWNlCisgKgorICogV2hlbiB0aGlzIG1hY3JvIGlzIGVuYWJsZWQsIHRoZSBER1RMIGZyYW1ld29yayBpcyBhdmFpbGFibGUgZm9yIHVzZS4KKyAqIFRoZSBmcmFtZXdvcmsgbXVzdCBmdXJ0aGVybW9yZSBiZSBpbml0aWFsaXplZCBpbiB0aGUgYXBwbGljYXRpb24gdXNpbmcKKyAqIGRndGxfaW5pdCgpLiBBZGRpdGlvbmFsbHksIHRoZSBVQVJUIGFkYXB0ZXIgbXVzdCBiZSBpbml0aWFsaXplZCBhY2NvcmRpbmdseS4KKyAqCisgKiBQbGVhc2Ugc2VlIHNkay9taWRkbGV3YXJlL2RndGwvaW5jbHVkZS8gZm9yIGZ1cnRoZXIgREdUTCBjb25maWd1cmF0aW9uCisgKiAoaW4gZGd0bF9jb25maWcuaCkgYW5kIEFQSS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqCisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNFX0RHVEwKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0RHVEwgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxhZGR0b2dyb3VwIERFQlVHX1NFVFRJTkdTCisgKiBceworICogXGFkZHRvZ3JvdXAgU1lTVEVNX1ZJRVcKKyAqCisgKiBcYnJpZWYgU3lzdGVtIFZpZXcgY29uZmlndXJhdGlvbiBzZXR0aW5ncworICogXHsKKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZWdnZXIgU3lzdGVtIFZpZXcgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGJyaWVmIFNlZ2dlcidzIFN5c3RlbSBWaWV3CisgKgorICogV2hlbiBlbmFibGVkIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYWxzbyBjYWxsIFNFR0dFUl9TWVNWSUVXX0NvbmYoKSB0byBlbmFibGUgc3lzdGVtIG1vbml0b3JpbmcuCisgKiBjb25maWdUT1RBTF9IRUFQX1NJWkUgc2hvdWxkIGJlIGluY3JlYXNlZCBieSBkZ19jb25maWdTWVNURU1WSUVXX1NUQUNLX09WRVJIRUFEIGJ5dGVzIGZvciBlYWNoIHN5c3RlbSB0YXNrLgorICogRm9yIGV4YW1wbGUsIGlmIHRoZXJlIGFyZSA4IHN5c3RlbSB0YXNrcyBjb25maWdUT1RBTF9IRUFQX1NJWkUgc2hvdWxkIGJlIGluY3JlYXNlZCBieQorICogKDggKiBkZ19jb25maWdTWVNURU1WSUVXX1NUQUNLX09WRVJIRUFEKSBieXRlcy4KKyAqCisgKiAtIDAgOiBEaXNhYmxlZAorICogLSAxIDogRW5hYmxlZAorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICoKKyAqLworI2lmbmRlZiBkZ19jb25maWdTWVNURU1WSUVXCisjZGVmaW5lIGRnX2NvbmZpZ1NZU1RFTVZJRVcgICAgICAgICAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgU3RhY2sgc2l6ZSBvdmVyaGVhZCB3aGVuIFN5c3RlbSBWaWV3IEFQSSBpcyB1c2VkCisgKgorICogQWxsIHRocmVhZCBzdGFjayBzaXplcyBwbHVzIHRoZSB0aGUgc3RhY2sgb2YgSVJRIGhhbmRsZXJzIHdpbGwgYmUgaW5jcmVhc2VkIGJ5IHRoYXQgYW1vdW50CisgKiB0byBhdm9pZCBzdGFjayBvdmVyZmxvdyB3aGVuIFN5c3RlbSBWaWV3IGlzIG1vbml0b3JpbmcgdGhlIHN5c3RlbS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnU1lTVEVNVklFV19TVEFDS19PVkVSSEVBRAorI2RlZmluZSBkZ19jb25maWdTWVNURU1WSUVXX1NUQUNLX09WRVJIRUFEICAgICAgKDI1NikKKyNlbmRpZgorCisvKgorICogRW5hYmxlL0Rpc2FibGUgU3lzdGVtIFZpZXcgbW9uaXRvcmluZyB0aW1lIGNyaXRpY2FsIGludGVycnVwdCBoYW5kbGVycyAoQkxFLCBDUE0sIFVTQikuCisgKiBEaXNhYmxpbmcgSVNSIG1vbml0b3JpbmcgY291bGQgaGVscCByZWR1Y2luZyBhc3NlcnRpb25zIHRyaWdnZXJlZCBieSBTeXN0ZW0gVmlldyBtb25pdG9yaW5nIG92ZXJoZWFkLgorICoKKyAqLworCisvKioKKyAqIFxicmllZiBMZXQgU3lzdGVtIFZpZXcgbW9uaXRvciBCTEUgcmVsYXRlZCBJU1JzIChCTEVfR0VOX0hhbmRsZXIgLyBCTEVfV0FLRVVQX0xQX0hhbmRsZXIpLgorICoKKyAqIC0gMCA6IERpc2FibGVkCisgKiAtIDEgOiBFbmFibGVkCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1NZU1RFTVZJRVdfTU9OSVRPUl9CTEVfSVNSCisjZGVmaW5lIGRnX2NvbmZpZ1NZU1RFTVZJRVdfTU9OSVRPUl9CTEVfSVNSICAgICAoMSkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBMZXQgU3lzdGVtIFZpZXcgbW9uaXRvciBDUE0gcmVsYXRlZCBJU1JzIChTV1RJTTFfSGFuZGxlciAvIFdLVVBfR1BJT19IYW5kbGVyKS4KKyAqCisgKiAtIDAgOiBEaXNhYmxlZAorICogLSAxIDogRW5hYmxlZAorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdTWVNURU1WSUVXX01PTklUT1JfQ1BNX0lTUgorI2RlZmluZSBkZ19jb25maWdTWVNURU1WSUVXX01PTklUT1JfQ1BNX0lTUiAgICAgKDEpCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgTGV0IFN5c3RlbSBWaWV3IG1vbml0b3IgVVNCIHJlbGF0ZWQgSVNScyAoVVNCX0hhbmRsZXIgLyBWQlVTX0hhbmRsZXIpLgorICoKKyAqIC0gMCA6IERpc2FibGVkCisgKiAtIDEgOiBFbmFibGVkCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1NZU1RFTVZJRVdfTU9OSVRPUl9VU0JfSVNSCisjZGVmaW5lIGRnX2NvbmZpZ1NZU1RFTVZJRVdfTU9OSVRPUl9VU0JfSVNSICAgICAoMSkKKyNlbmRpZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKiBcfQorICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUkZfRFJJVkVSX1NFVFRJTkdTCisgKgorICogXGJyaWVmIERveHlnZW4gZG9jdW1lbnRhdGlvbiBpcyBub3QgeWV0IGF2YWlsYWJsZSBmb3IgdGhpcyBtb2R1bGUuCisgKiAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmaWxlKHMpCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICogXHsKKyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSRiBkcml2ZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBTZXQgdG8gMSB0byBlbmFibGUgdGhlIHJlY2FsaWJyYXRpb24gcHJvY2VkdXJlICovCisjaWZuZGVmIGRnX2NvbmZpZ1JGX0VOQUJMRV9SRUNBTElCUkFUSU9OCisjZGVmaW5lIGRnX2NvbmZpZ1JGX0VOQUJMRV9SRUNBTElCUkFUSU9OICAgICAgICAoMSkKKyNlbmRpZgorCisvKiBJZiBSRiByZWNhbGlicmF0aW9uIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gZW5hYmxlIEdQQURDIGFzIHdlbGwgKi8KKyNpZiBkZ19jb25maWdSRl9FTkFCTEVfUkVDQUxJQlJBVElPTgorI3VuZGVmIGRnX2NvbmZpZ1VTRV9IV19HUEFEQworI2RlZmluZSBkZ19jb25maWdVU0VfSFdfR1BBREMgICAgICAgICAgICgxKQorI3VuZGVmIGRnX2NvbmZpZ0dQQURDX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnR1BBRENfQURBUFRFUiAgICAgICAgICAoMSkKKyN1bmRlZiBkZ19jb25maWdURU1QU0VOU19BREFQVEVSCisjZGVmaW5lIGRnX2NvbmZpZ1RFTVBTRU5TX0FEQVBURVIgICAgICAgKDEpCisjZW5kaWYKKworLyogSWYgUkYgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBlbmFibGUgR1BBREMgYWRhcHRlciBhcyB3ZWxsICovCisjaWYgIGRnX2NvbmZpZ1JGX0FEQVBURVIKKyN1bmRlZiBkZ19jb25maWdHUEFEQ19BREFQVEVSCisjZGVmaW5lIGRnX2NvbmZpZ0dQQURDX0FEQVBURVIgICAgICAgICAgKDEpCisjZW5kaWYKKworLyogTWluaW11bSB0aW1lIGJlZm9yZSBwZXJmb3JtaW5nIGFuIFJGIHJlY2FsaWJyYXRpb24sIGluIEZyZWVSVE9TIHNjaGVkdWxlciB0aWNrcyAqLworI2lmbmRlZiBkZ19jb25maWdSRl9NSU5fUkVDQUxJQlJBVElPTl9USU1FT1VUCisjaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyMDAwKQorI2RlZmluZSBkZ19jb25maWdSRl9NSU5fUkVDQUxJQlJBVElPTl9USU1FT1VUICAgKDEwMDApIC8vIH4yIHNlY3MKKyNlbGlmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjc2OCkKKyNkZWZpbmUgZGdfY29uZmlnUkZfTUlOX1JFQ0FMSUJSQVRJT05fVElNRU9VVCAgICgxMDI0KSAvLyB+MiBzZWNzCisjZWxpZiAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfUkNYKQorI2RlZmluZSBkZ19jb25maWdSRl9NSU5fUkVDQUxJQlJBVElPTl9USU1FT1VUICAgKDEwMDApCisjZWxzZSAvKiBMUF9DTEtfQU5ZICovCisvLyBNdXN0IGJlIGRlZmluZWQgaW4gdGhlIGN1c3RvbV9jb25maWdfPD4uaCBmaWxlLiBTaG91bGQgcmVzdWx0IGluIH4yc2VjLgorI2VuZGlmCisjZW5kaWYKKworLyogTWF4aW11bSB0aW1lIGJlZm9yZSBwZXJmb3JtaW5nIGFuIFJGIHJlY2FsaWJyYXRpb24sIGluIEZyZWVSVE9TIHNjaGVkdWxlciB0aWNrcworICogSWYgdGhpcyB0aW1lIGhhcyBlbGFwc2VkLCBhbmQgUkYgaXMgYWJvdXQgdG8gYmUgcG93ZXJlZCBvZmYsIHJlY2FsaWJyYXRpb24gd2lsbAorICogYmUgZG9uZSB1bmNvbmRpdGlvbmFsbHkuIFNldCB0byAwIHRvIGRpc2FibGUgdGhpcyBmdW5jdGlvbmFsaXR5ICovCisjaWZuZGVmIGRnX2NvbmZpZ1JGX01BWF9SRUNBTElCUkFUSU9OX1RJTUVPVVQKKyNkZWZpbmUgZGdfY29uZmlnUkZfTUFYX1JFQ0FMSUJSQVRJT05fVElNRU9VVCAgICgwKSAvLyBEaXNhYmxlZAorI2VuZGlmCisKKy8qIFRpbWVvdXQgdmFsdWUgKGluIEZyZWVSVE9TIHNjaGVkdWxlciB0aWNrcykgZm9yIHRpbWVyIHRvIGluaXRpYXRlIFJGIHJlY2FsaWJyYXRpb24uCisgKiBUaGlzIHdpbGwgaGFwcGVuIGF0IEFOWSBUSU1FIFJGIGlzIE9OIGFuZCBDT05GSUdVUkVELCBFVkVOIElGIEEgTUFDIElTIFJYL1RYaW5nIERVUklORworICogVEhJUyBUSU1FLCBpbiBjb250cmFyeSB0byBkZ19jb25maWdSRl9NQVhfUkVDQUxJQlJBVElPTl9USU1FT1VULCB0aGF0IHdpbGwgYmUKKyAqIHBlcmZvcm1lZCBPTkxZIHdoZW4gcG93ZXJpbmcgb2ZmIFJGLgorICogVGhpcyBpcyBpbnRlbmRlZCBmb3IgYXBwbGljYXRpb25zIHdoZXJlIFJGIGlzIGFsd2F5cyBvbiwgc28gdGhlcmUgaXMgbm8KKyAqIG9wcG9ydHVuaXR5IHRvIGJlIHJlY2FsaWJyYXRlZCB0aGUgbm9ybWFsIHdheSAoaS5lLiBkdXJpbmcgcG93ZXJvZmYpCisgKgorICogU2V0IHRvIDAgdG8gZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgKi8KKyNpZm5kZWYgZGdfY29uZmlnUkZfUkVDQUxJQlJBVElPTl9USU1FUl9USU1FT1VUCisjZGVmaW5lIGRnX2NvbmZpZ1JGX1JFQ0FMSUJSQVRJT05fVElNRVJfVElNRU9VVCAoMCkgLy8gRGlzYWJsZWQKKyNlbmRpZgorCisKKy8qIE1pbmltdW0gdGVtcCBkaWZmZXJlbmNlIGJlZm9yZSBwZXJmb3JtaW5nIGFuIFJGIHJlY2FsaWJyYXRpb24sIGluIG9DKi8KKyNpZm5kZWYgZGdfY29uZmlnUkZfTUlOX1JFQ0FMSUJSQVRJT05fVEVNUF9ESUZGCisjaWZkZWYgQ09ORklHX1VTRV9GVERGCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnUkZfTUlOX1JFQ0FMSUJSQVRJT05fVEVNUF9ESUZGICg1KQorI2Vsc2UKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdSRl9NSU5fUkVDQUxJQlJBVElPTl9URU1QX0RJRkYgKDEwKQorI2VuZGlmCisjZW5kaWYKKworLyogRHVyYXRpb24gb2YgcmVjYWxpYnJhdGlvbiBwcm9jZWR1cmUsIGluIGxwIGNsayBjeWNsZXMgKi8KKyNpZm5kZWYgZGdfY29uZmlnUkZfUkVDQUxJQlJBVElPTl9EVVJBVElPTgorIyBpZiBkZWZpbmVkKENPTkZJR19VU0VfRlRERikgJiYgZGVmaW5lZChDT05GSUdfVVNFX0JMRSkKKyMgIGlmICgoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzIwMDApIHx8IChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjc2OCkpCisjICAgZGVmaW5lIGRnX2NvbmZpZ1JGX1JFQ0FMSUJSQVRJT05fRFVSQVRJT04gKDIzMCkKKyMgIGVsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkKKyMgICBkZWZpbmUgZGdfY29uZmlnUkZfUkVDQUxJQlJBVElPTl9EVVJBVElPTiBjbV9yY3hfdXNfMl9scGN5Y2xlcygodWludDMyX3QpKDIzMCAqIDMwLjUpKQorIyAgZWxzZSAvKiBMUF9DTEtfQU5ZICovCisgICAgLy8gTXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjdXN0b21fY29uZmlnXzw+LmggZmlsZS4gSXQgc2hvdWxkIGJlIH43bXNlYy4KKyMgIGVuZGlmCisjIGVsc2UKKyMgIGlmICgoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzIwMDApIHx8IChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjc2OCkpCisjICAgZGVmaW5lIGRnX2NvbmZpZ1JGX1JFQ0FMSUJSQVRJT05fRFVSQVRJT04gKDEzMSkKKyMgIGVsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkKKyMgICBkZWZpbmUgZGdfY29uZmlnUkZfUkVDQUxJQlJBVElPTl9EVVJBVElPTiBjbV9yY3hfdXNfMl9scGN5Y2xlcygodWludDMyX3QpKDEzMSAqIDMwLjUpKQorIyAgZWxzZSAvKiBMUF9DTEtfQU5ZICovCisgICAgLy8gTXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjdXN0b21fY29uZmlnXzw+LmggZmlsZS4gSXQgc2hvdWxkIGJlIH40bXNlYy4KKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdSRl9JRkZfQ0FMSUJSQVRJT05fVElNRU9VVAorI2lmICgoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzIwMDApIHx8IChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjc2OCkpCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnUkZfSUZGX0NBTElCUkFUSU9OX1RJTUVPVVQgICAgICg0MCkKKyNlbGlmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19SQ1gpCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnUkZfSUZGX0NBTElCUkFUSU9OX1RJTUVPVVQgICAgIGNtX3JjeF91c18yX2xwY3ljbGVzKCh1aW50MzJfdCkoNDAgKiAzMC41KSkKKyNlbHNlIC8qIExQX0NMS19BTlkgKi8KKy8vIE11c3QgYmUgZGVmaW5lZCBpbiB0aGUgY3VzdG9tX2NvbmZpZ188Pi5oIGZpbGUuIEl0IHNob3VsZCBiZSB+MS4ybXNlYy4KKyMgIGVuZGlmCisjZW5kaWYKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfQorICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgQkxFX0VWRU5UX05PVElGSUNBVElPTlMKKyAqCisgKiBcYnJpZWYgRG94eWdlbiBkb2N1bWVudGF0aW9uIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZvciB0aGlzIG1vZHVsZS4KKyAqICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZpbGUocykKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKgorICogXHsKKyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1CTEUgZXZlbnQgbm90aWZpY2F0aW9ucyBjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogQkxFIElTUiBldmVudCBOb3RpZmljYXRpb25zCisgKgorICogVGhpcyBmYWNpbGl0eSBlbmFibGVzIHRoZSB1c2VyIGFwcCB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgZm9yIEJMRQorICogSVNSIGV2ZW50cy4gVGhlc2UgZXZlbnRzIGNhbiBiZSByZWNlaXZlZCBlaXRoZXIgZGlyZWN0bHkgZnJvbSBpbnNpZGUKKyAqIHRoZSBCTEUgSVNSLCBvciBhcyB0YXNrIG5vdGlmaWNhdGlvbnMgdG8gdGhlIEFwcGxpY2F0aW9uIFRhc2sKKyAqIHJlZ2lzdGVyZWQgdG8gdGhlIEJMRSBtYW5hZ2VyLgorICoKKyAqIFRvIGVuYWJsZSwgZGVmaW5lIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9UWVBFIHRvIGVpdGhlcgorICogQkxFX0VWRU5UX05PVElGX1VTRVJfSVNSIG9yIEJMRV9FVkVOVF9OT1RJRl9VU0VSX1RBU0suCisgKgorICogLSBXaGVuIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9UWVBFID09IEJMRV9FVkVOVF9OT1RJRl9VU0VSX0lTUiwgdGhlIHVzZXIKKyAqICAgY2FuIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvcyBvbiBoaXMgYXBwIGNvbmZpZ3VyYXRpb246CisgKgorICogICBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfSE9PS19FTkRfRVZFTlQgICAgOiBUaGUgQkxFIEVuZCBFdmVudAorICogICBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfSE9PS19DU0NOVF9FVkVOVCAgOiBUaGUgQkxFIENTQ05UIEV2ZW50CisgKiAgIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9IT09LX0ZJTkVfRVZFTlQgICA6IFRoZSBCTEUgRklORSBFdmVudAorICoKKyAqICAgVGhlc2UgbWFjcm9zIG11c3QgYmUgYWN0dWFsbHkgc2V0IHRvIHRoZSBuYW1lcyBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbnNpZGUKKyAqICAgdGhlIHVzZXIgYXBwbGljYXRpb24sIGhhdmluZyBhIHByb3RvdHlwZSBvZgorICoKKyAqICAgICB2b2lkIGZ1bmModm9pZCk7CisgKgorICogICAoVGhlIHVzZXIgYXBwIGRvZXMgbm90IG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgdGhlIHByb3RvdHlwZSkuCisgKgorICogICBJZiBvbmUgb2YgdGhlc2UgbWFjcm9zIGlzIG5vdCBkZWZpbmVkLCB0aGUgcmVzcGVjdGl2ZSBub3RpZmljYXRpb24KKyAqICAgd2lsbCBiZSBzdXBwcmVzc2VkLgorICoKKyAqICAgTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBpbiBJU1IgY29udGV4dCwgZGlyZWN0bHkgZnJvbSB0aGUKKyAqICAgQkxFIElTUi4gVGhleSBzaG91bGQgdGhlcmVmb3JlIGJlIHZlcnkgZmFzdCBhbmQgc2hvdWxkIE5FVkVSIGJsb2NrLgorICoKKyAqIC0gV2hlbiBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfVFlQRSA9PSBCTEVfRVZFTlRfTk9USUZfVVNFUl9UQVNLLCB0aGUgdXNlcgorICogICBhcHAgd2lsbCByZWNlaXZlIHRhc2sgbm90aWZpY2F0aW9ucyBvbiB0aGUgdGFzayByZWdpc3RlcmVkIHRvIHRoZSBCTEUKKyAqICAgbWFuYWdlci4KKyAqCisgKiAgIE5vdGlmaWNhdGlvbnMgd2lsbCBiZSByZWNlaXZlZCB1c2luZyB0aGUgZm9sbG93aW5nIGJpdCBtYXNrczoKKyAqCisgKiAgIC0gZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX01BU0tfRU5EX0VWRU5UOiBFbmQgRXZlbnQgTWFzayAoRGVmOiBiaXQgMjQpCisgKiAgIC0gZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX01BU0tfQ1NDTlRfRVZFTlQ6IENTQ05UIEV2ZW50IE1hc2sgKERlZjogYml0IDI1KQorICogICAtIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9NQVNLX0ZJTkVfRVZFTlQ6IEZJTkUgRXZlbnQgTWFzayAoRGVmOiBiaXQgMjYpCisgKgorICogICBUaGVzZSBtYWNyb3MsIGRlZmluaW5nIHRoZSB0YXNrIG5vdGlmaWNhdGlvbiBiaXQgbWFza3MsIGNhbiBiZSByZWRlZmluZWQgYXMKKyAqICAgbmVlZGVkLgorICoKKyAqICAgSWYgb25lIG9mIHRoZSBtYWNyb3MgZm9yIGNhbGxiYWNrIGZ1bmN0aW9ucyBwcmVzZW50ZWQgaW4gdGhlIHByZXZpb3VzCisgKiAgIHNlY3Rpb24gKGZvciBkaXJlY3QgSVNSIG5vdGlmaWNhdGlvbnMpIGlzIGRlZmluZWQsIHdoaWxlIGluIHRoaXMgbW9kZSwKKyAqICAgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSB3aWxsIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBpc3IKKyAqICAgaW5zdGVhZCBvZiBzZW5kaW5nIGEgdGFzayBub3RpZmljYXRpb24gZm9yIHRoaXMgcGFydGljdWxhciBldmVudCB0bworICogICB0aGUgYXBwIHRhc2suCisgKgorICogICBNYWNybyBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfUlVOVElNRV9DT05UUk9MIChEZWZhdWx0OiAxKSBlbmFibGVzL2Rpc2FibGVzCisgKiAgIHJ1bnRpbWUgY29udHJvbC9tYXNraW5nIG9mIG5vdGlmaWNhdGlvbnMuCisgKgorICogICBJZiBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfUlVOVElNRV9DT05UUk9MID09IDEsIHRoZW4gdGFzayBub3RpZmljYXRpb25zCisgKiAgIG11c3QgYmUgZW5hYmxlZC9kaXNhYmxlZCB1c2luZyB0aGUKKyAqICAgYmxlX2V2ZW50X25vdGlmX1tlbmFibGV8ZGlzYWJsZV1fW2VuZHxjc2NudHxmaW5lXV9ldmVudCgpIGZ1bmN0aW9ucy4KKyAqICAgQnkgZGVmYXVsdCBhbGwgbm90aWZpY2F0aW9ucyBhcmUgZGlzYWJsZWQuCisgKgorICogICBJZiBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfUlVOVElNRV9DT05UUk9MID09IDAsIGFsbCBub3RpZmljYXRpb25zIHdpbGwKKyAqICAgYmUgc2VudCB1bmNvbmRpdGlvbmFsbHkgdG8gdGhlIGFwcGxpY2F0aW9uIHRhc2suCisgKgorICovCisjaWZuZGVmIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9UWVBFCisjIGRlZmluZSBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfVFlQRSBCTEVfRVZFTlRfTk9USUZfVVNFUl9JU1IKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX1RZUEUgPT0gQkxFX0VWRU5UX05PVElGX1VTRVJfVEFTSworCisvKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIEJMRSBldmVudCB0YXNrIG5vdGlmaWNhdGlvbnMuIFRoaXMKKyAqIGltcGxlbWVudGF0aW9uIGFsbG93cyBhIHVzZXIgdGFzayB0byByZWdpc3RlciBmb3Igbm90aWZpY2F0aW9ucywKKyAqIGFuZCB0byBnZXQgdGFzayBub3RpZmljYXRpb25zIGZvciB0aGUgYXZhaWxhYmxlIGV2ZW50cworICovCisKKy8qIERlZmF1bHQgdGFzayBub3RpZmljYXRpb24gbWFza3MgZm9yIHRoZSB2YXJpb3VzIGV2ZW50cyBmb3Igd2hpY2gKKyAqIHRoZSBmcmFtZXdvcmsgcHJvdmlkZXMgbm90aWZpY2F0aW9ucworICovCisjIGlmbmRlZiBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfTUFTS19FTkRfRVZFTlQKKyMgIGRlZmluZSBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfTUFTS19FTkRfRVZFTlQgKDEgPDwgMjQpCisjIGVuZGlmCisKKyMgaWZuZGVmIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9NQVNLX0NTQ05UX0VWRU5UCisjICBkZWZpbmUgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX01BU0tfQ1NDTlRfRVZFTlQgKDEgPDwgMjUpCisjIGVuZGlmCisKKyMgaWZuZGVmIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9NQVNLX0ZJTkVfRVZFTlQKKyMgIGRlZmluZSBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfTUFTS19GSU5FX0VWRU5UICgxIDw8IDI2KQorIyBlbmRpZgorCisvKiBJbXBsZW1lbnQgZXZlbnQgaG9vayBmdW5jdGlvbnMgKi8KKyMgaWZuZGVmIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9IT09LX0VORF9FVkVOVAorIyAgZGVmaW5lIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9IT09LX0VORF9FVkVOVCBibGVfZXZlbnRfbm90aWZfYXBwX3Rhc2tfZW5kX2V2ZW50CisjIGVuZGlmCisKKyMgaWZuZGVmIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9IT09LX0NTQ05UX0VWRU5UCisjICBkZWZpbmUgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX0hPT0tfQ1NDTlRfRVZFTlQgYmxlX2V2ZW50X25vdGlmX2FwcF90YXNrX2NzY250X2V2ZW50CisjIGVuZGlmCisKKyMgaWZuZGVmIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9IT09LX0ZJTkVfRVZFTlQKKyMgIGRlZmluZSBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfSE9PS19GSU5FX0VWRU5UIGJsZV9ldmVudF9ub3RpZl9hcHBfdGFza19maW5lX2V2ZW50CisjIGVuZGlmCisKKy8qCisgKiBBbGxvdyBydW50aW1lIGNvbnRyb2wgb2YgKHVuKW1hc2tpbmcgbm90aWZpY2F0aW9ucworICovCisjIGlmbmRlZiBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfUlVOVElNRV9DT05UUk9MCisjICBkZWZpbmUgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX1JVTlRJTUVfQ09OVFJPTCAxCisjIGVuZGlmCisKKyNlbmRpZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkxFIGhvb2tzIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBOYW1lIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBibG9jayBCTEUgZnJvbSBzbGVlcGluZyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMKKyAqCisgKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBkZWNsYXJlZCBhczoKKyAqICAgICAgdW5zaWduZWQgY2hhciBteV9ibG9ja19zbGVlcCh2b2lkKTsKKyAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGNvbnRyb2xzIHdoZXRoZXIgdGhlIEJMRSB3aWxsIGJlIGFsbG93ZWQgdG8gZ28gdG8gc2xlZXAgb3Igbm90LAorICogICAgICAwOiB0aGUgQkxFIG1heSBnbyB0byBzbGVlcCwgaWYgcG9zc2libGUKKyAqICAgICAgMTogdGhlIEJMRSBpcyBub3QgYWxsb3dlZCB0byBnbyB0byBzbGVlcC4gVGhlIGNhbGxlciAoQkxFIEFkYXB0ZXIpIG1heSBibG9jayBvciBub3QsCisgKiAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgQkxFIHN0YWNrIHN0YXR1cy4KKyAqCisgKiBkZ19jb25maWdCTEVfSE9PS19CTE9DS19TTEVFUCBzaG91bGQgYmUgc2V0IHRvIG15X2Jsb2NrX3NsZWVwIGluIHRoaXMgZXhhbXBsZS4KKyAqLworI2lmbmRlZiBkZ19jb25maWdCTEVfSE9PS19CTE9DS19TTEVFUAorLyogQWxyZWFkeSB1bmRlZmluZWQgLSBOb3RoaW5nIHRvIGRvLiAqLworI2VuZGlmCisKKy8qIE5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHRvIG1vZGlmeSB0aGUgUFRJIHZhbHVlIChQYXlsb2FkIFR5cGUgSW5kaWNhdGlvbikgd2hlbgorICogYXJiaXRyYXRpb24gaXMgdXNlZAorICoKKyAqIEFyYml0cmF0aW9uIGlzIG5lZWRlZCBvbmx5IHdoZW4gYW5vdGhlciBleHRlcm5hbCByYWRpbyBpcyBwcmVzZW50LiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBkZWNsYXJlZAorICogYXM6CisgKiAgICAgIHVuc2lnbmVkIGNoYXIgbXlfcHRpX21vZGlmeSh2b2lkKTsKKyAqIERldGFpbHMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzdWNoIGEgZnVuY3Rpb24gd2lsbCBiZSBwcm92aWRlZCB3aGVuIHRoZSBleHRlcm5hbCByYWRpbworICogYXJiaXRyYXRpb24gZnVuY3Rpb25hbGl0eSBpcyBpbnRlZ3JhdGVkLgorICoKKyAqIGRnX2NvbmZpZ0JMRV9IT09LX1BUSV9NT0RJRlkgc2hvdWxkIGJlIHNldCB0byBteV9wdGlfbW9kaWZ5IGluIHRoaXMgZXhhbXBsZS4KKyAqCisgKiBTZWUgYWxzbyB0aGUgY29tbWVudCBhYm91dCB0aGUgPEJMRSBjb2RlIGhvb2tzPiBpbiBibGVfY29uZmlnLmggZm9yIG1vcmUgaW5mby4KKyAqLworI2lmbmRlZiBkZ19jb25maWdCTEVfSE9PS19QVElfTU9ESUZZCisvKiBBbHJlYWR5IHVuZGVmaW5lZCAtIE5vdGhpbmcgdG8gZG8uICovCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIERFQlVHX1NFVFRJTkdTCisgKgorICogXHsKKyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyByZWxhdGVkIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxicmllZiBNb25pdG9yIE9TIGhlYXAgYWxsb2NhdGlvbnMKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdUUkFDS19PU19IRUFQCisjZGVmaW5lIGRnX2NvbmZpZ1RSQUNLX09TX0hFQVAgICAgICAgICAgKDApCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIZWFwIHNpemUgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxicmllZiBIZWFwIHNpemUgZm9yIHVzZWQgbGliYyBtYWxsb2MoKQorICoKKyAqIFNwZWNpZmllcyB0aGUgYW1vdW50IG9mIFJBTSB0aGF0IHdpbGwgYmUgdXNlZCBhcyBoZWFwIGZvciBsaWJjIG1hbGxvYygpIGZ1bmN0aW9uLgorICogSXQgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gYmFyZSBtZXRhbCBwcm9qZWN0cyB0byBtYXRjaCBhcHBsaWNhdGlvbidzIHJlcXVpcmVtZW50cy4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgX19IRUFQX1NJWkUKKyMgaWYgZGVmaW5lZCAoQ09ORklHX1JFVEFSR0VUKSB8fCBkZWZpbmVkIChDT05GSUdfUlRUKQorIyAgZGVmaW5lIF9fSEVBUF9TSVpFICAweDA2MDAKKyMgZWxzZQorIyAgZGVmaW5lIF9fSEVBUF9TSVpFICAweDAxMDAKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBmbGFnIHVzZWQgYnkgbGlua2VyIHNjcmlwdHMgKi8KKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkKKyNkZWZpbmUgX19IRUFQX0lTX0xFU1NfVEhBTl8weDIwMCAgICAgICAgICAgICAgIChfX0hFQVBfU0laRSA8IDB4MjAwKQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0YWNrIHNpemUgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxicmllZiBTdGFjayBzaXplIGZvciBtYWluKCkgZnVuY3Rpb24gYW5kIGludGVycnVwdCBoYW5kbGVycy4KKyAqCisgKiBTcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBSQU0gdGhhdCB3aWxsIGJlIHVzZWQgYXMgc3RhY2sgZm9yIHRoZSBtYWluKCkgZnVuY3Rpb24gYW5kIHRoZSBpbnRlcnJ1cHQKKyAqIGhhbmRsZXJzLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBfX1NUQUNLX1NJWkUKKyNkZWZpbmUgX19TVEFDS19TSVpFICAweDAyMDAKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJGIEZFTSBDT05GSUdVUkFUSU9OIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgImJzcF9mZW0uaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERFQlVHIENPTkZJR1VSQVRJT04gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgImJzcF9kZWJ1Zy5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworCisjZW5kaWYgLyogQlNQX0RFRkFVTFRTX0hfICovCisKKy8qKgorXH0KK1x9CitcfQorKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2NvbmZpZy9ic3BfZGVmaW5pdGlvbnMuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2NvbmZpZy9ic3BfZGVmaW5pdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjQxNjBjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvY29uZmlnL2JzcF9kZWZpbml0aW9ucy5oCkBAIC0wLDAgKzEsMTYyIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIEJTUF9DT05GSUcKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBCU1BfQ09ORklHX0RFRklOSVRJT05TCisgKgorICogXGJyaWVmIERveHlnZW4gZG9jdW1lbnRhdGlvbiBpcyBub3QgeWV0IGF2YWlsYWJsZSBmb3IgdGhpcyBtb2R1bGUuCisgKiAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmaWxlKHMpCisgKgorICpceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBic3BfZGVmaW5pdGlvbnMuaAorICoKKyAqIEBicmllZiBCb2FyZCBTdXBwb3J0IFBhY2thZ2UuIFN5c3RlbSBDb25maWd1cmF0aW9uIGZpbGUgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEJTUF9ERUZJTklUSU9OU19IXworI2RlZmluZSBCU1BfREVGSU5JVElPTlNfSF8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2VuZXJpYyBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTFBfQ0xLXzMyMDAwICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIExQX0NMS18zMjc2OCAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBMUF9DTEtfUkNYICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTFBfQ0xLX0FOWSAgICAgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgTFBfQ0xLX0lTX0FOQUxPRyAgICAgICAgICAgICAgICAwCisjZGVmaW5lIExQX0NMS19JU19ESUdJVEFMICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIE1PREVfSVNfTUlSUk9SRUQgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNT0RFX0lTX0NBQ0hFRCAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTU9ERV9JU19SQU0gICAgICAgICAgICAgICAgICAgICBNT0RFX0lTX01JUlJPUkVECisKKyNkZWZpbmUgTk9OX1ZPTEFUSUxFX0lTX09UUCAgICAgICAgICAgICAwICAgICAgIC8vIENvZGUgaXMgaW4gT1RQCisjZGVmaW5lIE5PTl9WT0xBVElMRV9JU19GTEFTSCAgICAgICAgICAgMSAgICAgICAvLyBDb2RlIGlzIGluIFFTUEkgRmxhc2gKKyNkZWZpbmUgTk9OX1ZPTEFUSUxFX0lTX05PTkUgICAgICAgICAgICAyICAgICAgIC8vIERlYnVnIG1vZGUhIENvZGUgaXMgaW4gUkFNIQorCisjZGVmaW5lIEVYVF9DUllTVEFMX0lTXzE2TSAgICAgICAgICAgICAgMAorI2RlZmluZSBFWFRfQ1JZU1RBTF9JU18zMk0gICAgICAgICAgICAgIDEKKworI2RlZmluZSBERVZFTE9QTUVOVF9NT0RFICAgICAgICAgICAgICAgIDAgICAgICAgLy8gQ29kZSBpcyBidWlsdCBmb3IgZGVidWdnaW5nCisjZGVmaW5lIFBST0RVQ1RJT05fTU9ERSAgICAgICAgICAgICAgICAgMSAgICAgICAvLyBDb2RlIGlzIGJ1aWx0IGZvciBwcm9kdWN0aW9uCisKKyNkZWZpbmUgRkxBU0hfSVNfTk9UX0NPTk5FQ1RFRCAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0NPTk5FQ1RFRF9UT18xVjggICAgICAgICAgMQorI2RlZmluZSBGTEFTSF9DT05ORUNURURfVE9fMVY4UCAgICAgICAgIDIKKworI2RlZmluZSBCQVRURVJZX1RZUEVfMnhOSU1IICAgICAgICAgICAgIDAKKyNkZWZpbmUgQkFUVEVSWV9UWVBFXzN4TklNSCAgICAgICAgICAgICAxCisjZGVmaW5lIEJBVFRFUllfVFlQRV9MSUNPTzIgICAgICAgICAgICAgMiAgICAgICAvLyAyLjVWIGRpc2NoYXJnZSB2b2x0YWdlLCA0LjIwViBjaGFyZ2Ugdm9sdGFnZQorI2RlZmluZSBCQVRURVJZX1RZUEVfTElNTjJPNCAgICAgICAgICAgIDMgICAgICAgLy8gMi41ViBkaXNjaGFyZ2Ugdm9sdGFnZSwgNC4yMFYgY2hhcmdlIHZvbHRhZ2UKKyNkZWZpbmUgQkFUVEVSWV9UWVBFX05NQyAgICAgICAgICAgICAgICA0ICAgICAgIC8vIDIuNVYgZGlzY2hhcmdlIHZvbHRhZ2UsIDQuMjBWIGNoYXJnZSB2b2x0YWdlCisjZGVmaW5lIEJBVFRFUllfVFlQRV9MSUZFUE80ICAgICAgICAgICAgNSAgICAgICAvLyAyLjVWIGRpc2NoYXJnZSB2b2x0YWdlLCAzLjY1ViBjaGFyZ2Ugdm9sdGFnZQorI2RlZmluZSBCQVRURVJZX1RZUEVfTElOSUNPQUlPMiAgICAgICAgIDYgICAgICAgLy8gMy4wViBkaXNjaGFyZ2Ugdm9sdGFnZSwgNC4yMFYgY2hhcmdlIHZvbHRhZ2UKKyNkZWZpbmUgQkFUVEVSWV9UWVBFX0NVU1RPTSAgICAgICAgICAgICA3CisjZGVmaW5lIEJBVFRFUllfVFlQRV9OT19SRUNIQVJHRSAgICAgICAgOAorI2RlZmluZSBCQVRURVJZX1RZUEVfTk9fQkFUVEVSWSAgICAgICAgIDkKKworI2RlZmluZSBCQVRURVJZX1RZUEVfMnhOSU1IX0FEQ19WT0xUQUdFICAgICAgICAgKDI3ODUpCisjZGVmaW5lIEJBVFRFUllfVFlQRV8zeE5JTUhfQURDX1ZPTFRBR0UgICAgICAgICAoNDAxMykKKyNkZWZpbmUgQkFUVEVSWV9UWVBFX0xJQ09PMl9BRENfVk9MVEFHRSAgICAgICAgICgzNDQwKQorI2RlZmluZSBCQVRURVJZX1RZUEVfTElNTjJPNF9BRENfVk9MVEFHRSAgICAgICAgKDM0NDApCisjZGVmaW5lIEJBVFRFUllfVFlQRV9OTUNfQURDX1ZPTFRBR0UgICAgICAgICAgICAoMzQ0MCkKKyNkZWZpbmUgQkFUVEVSWV9UWVBFX0xJRkVQTzRfQURDX1ZPTFRBR0UgICAgICAgICgyOTg5KQorI2RlZmluZSBCQVRURVJZX1RZUEVfTElOSUNPQUlPMl9BRENfVk9MVEFHRSAgICAgKDM0NDApCisKKy8qCisgKiBUaGUgc3VwcG9ydGVkIGNoaXAgcmV2aXNpb25zLgorICovCisjZGVmaW5lIEJMQUNLX09SQ0FfSUNfUkVWX0FVVE8gICAgICAgICAgKC0xKQorI2RlZmluZSBCTEFDS19PUkNBX0lDX1JFVl9BICAgICAgICAgICAgIDAKKyNkZWZpbmUgQkxBQ0tfT1JDQV9JQ19SRVZfQiAgICAgICAgICAgICAxCisKKy8qCisgKiBUaGUgc3VwcG9ydGVkIGNoaXAgc3RlcHBpbmdzLgorICovCisjZGVmaW5lIEJMQUNLX09SQ0FfSUNfU1RFUF9BVVRPICAgICAgICAgKC0xKQorI2RlZmluZSBCTEFDS19PUkNBX0lDX1NURVBfQSAgICAgICAgICAgIDAKKyNkZWZpbmUgQkxBQ0tfT1JDQV9JQ19TVEVQX0IgICAgICAgICAgICAxCisjZGVmaW5lIEJMQUNLX09SQ0FfSUNfU1RFUF9DICAgICAgICAgICAgMgorI2RlZmluZSBCTEFDS19PUkNBX0lDX1NURVBfRCAgICAgICAgICAgIDMKKyNkZWZpbmUgQkxBQ0tfT1JDQV9JQ19TVEVQX0UgICAgICAgICAgICA3CisKKy8qCisgKiBMZWdhY3kgREsgbW90aGVyYm9hcmRzLCB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgU0RLLgorICogVGhlIGRlZmluaXRpb25zIGV4aXN0IGp1c3Qgc28gdGhhdCB3ZSBkb24ndCBicmVhayBjb21waWxhdGlvbiBvZiBvbGQgcHJvamVjdHMuCisgKi8KKyNkZWZpbmUgQkxBQ0tfT1JDQV9NQl9SRVZfQSAgICAgICAgICAgICAwCisjZGVmaW5lIEJMQUNLX09SQ0FfTUJfUkVWX0IgICAgICAgICAgICAgMQorLyoKKyAqIFRoZSBzdXBwb3J0ZWQgREsgbW90aGVyYm9hcmRzLgorICovCisjZGVmaW5lIEJMQUNLX09SQ0FfTUJfUkVWX0QgICAgICAgICAgICAgMgorCisvKgorICogVGhlIGNhY2hlIGFzc29jaXRpdml0eSBvcHRpb25zLgorICovCisjZGVmaW5lIENBQ0hFX0FTU09DX0FTX0lTICAgICAgICAgICAgICAgKC0xKSAgICAvLy8gbGVhdmUgYXMgc2V0IGJ5IHRoZSBST00gYm9vdGVyCisjZGVmaW5lIENBQ0hFX0FTU09DX0RJUkVDVF9NQVAgICAgICAgICAgMCAgICAgICAvLy8gZGlyZWN0LW1hcHBlZAorI2RlZmluZSBDQUNIRV9BU1NPQ18yX1dBWSAgICAgICAgICAgICAgIDEgICAgICAgLy8vIDItd2F5IHNldCBhc3NvY2lhdGl2ZQorI2RlZmluZSBDQUNIRV9BU1NPQ180X1dBWSAgICAgICAgICAgICAgIDIgICAgICAgLy8vIDQtd2F5IHNldCBhc3NvY2lhdGl2ZQorCisvKgorICogVGhlIGNhY2hlIGxpbmUgc2l6ZSBvcHRpb25zLgorICovCisjZGVmaW5lIENBQ0hFX0xJTkVTWl9BU19JUyAgICAgICAgICAgICAgKC0xKSAgICAvLy8gbGVhdmUgYXMgc2V0IGJ5IHRoZSBST00gYm9vdGVyCisjZGVmaW5lIENBQ0hFX0xJTkVTWl84X0JZVEVTICAgICAgICAgICAgMCAgICAgICAvLy8gOCBieXRlcworI2RlZmluZSBDQUNIRV9MSU5FU1pfMTZfQllURVMgICAgICAgICAgIDEgICAgICAgLy8vIDE2IGJ5dGVzCisjZGVmaW5lIENBQ0hFX0xJTkVTWl8zMl9CWVRFUyAgICAgICAgICAgMiAgICAgICAvLy8gMzIgYnl0ZXMKKworLyoKKyAqIFRoZSBzdXBwb3J0ZWQgUkYgRnJvbnQtRW5kIE1vZHVsZXMKKyAqLworI2RlZmluZSBGRU1fTk9GRU0gICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkVNX1NLWTY2MTEyXzExICAgICAgICAgICAgICAgICAxCisKKy8qCisgKiBUaGUgQkxFIGV2ZW50IG5vdGlmaWNhdGlvbiB1c2VyIGhvb2sgdHlwZXMKKyAqLworI2RlZmluZSBCTEVfRVZFTlRfTk9USUZfVVNFUl9JU1IgICAgICAgIDAgICAgICAgLy8vIFVzZXItZGVmaW5lZCBob29rcyBkaXJlY3RseSBmcm9tIElTUiBjb250ZXh0CisjZGVmaW5lIEJMRV9FVkVOVF9OT1RJRl9VU0VSX1RBU0sgICAgICAgMSAgICAgICAvLy8gTm90aWZpY2F0aW9uIG9mIHRoZSB1c2VyIHRhc2ssIHVzaW5nIHRhc2sgbm90aWZpY2F0aW9ucy4KKworI2VuZGlmIC8qIEJTUF9ERUZJTklUSU9OU19IXyAqLworCisvKioKK1x9CitcfQorXH0KKyovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9jb25maWcvYnNwX2ZlbS5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvY29uZmlnL2JzcF9mZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2UzYzBjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvY29uZmlnL2JzcF9mZW0uaApAQCAtMCwwICsxLDE0OSBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBCU1BfQ09ORklHCisgKiBceworICogXGFkZHRvZ3JvdXAgUkZfRkVNCisgKgorICogXGJyaWVmIFJGIEZyb250LUVuZCBtb2R1bGUgY29uZmd1cmF0aW9uCisgKgorICpceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGJzcF9mZW0uaAorICoKKyAqIEBicmllZiBCb2FyZCBTdXBwb3J0IFBhY2thZ2UuIFJGIEZyb250LUVuZCBNb2R1bGUgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBCU1BfRkVNX0hfCisjZGVmaW5lIEJTUF9GRU1fSF8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSRiBGRU0gZHJpdmVyIChTS1k2NjExMi0xMSkgY29uZmlndXJhdGlvbiBzZXR0aW5ncyAtLS0tLS0tLS0tLSAqLworCisjaWZkZWYgZGdfY29uZmlnRkVNX0RMR19SRUZfQk9BUkQKKworI2RlZmluZSBkZ19jb25maWdGRU0gRkVNX1NLWTY2MTEyXzExCisKKyNpZiBkZ19jb25maWdQT1dFUl8xVjhQID09IDAKKyN3YXJuaW5nIFNldHRpbmcgZGdfY29uZmlnUE9XRVJfMVY4UCB0byAxIGZvciBGRU0gdG8gd29yaworI3VuZGVmIGRnX2NvbmZpZ1BPV0VSXzFWOFAKKyNkZWZpbmUgZGdfY29uZmlnUE9XRVJfMVY4UCAxCisjZW5kaWYKKworI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfRkVNX0JJQVNfVjE4UAorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfRkVNX0JJQVMyX1YxOAorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUE9SVAorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1BPUlQgSFdfR1BJT19QT1JUXzQKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUElOCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUElOIEhXX0dQSU9fUElOXzMKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUE9SVAorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BPUlQgSFdfR1BJT19QT1JUXzQKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUElOCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUElOIEhXX0dQSU9fUElOXzYKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUlhfUE9SVAorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1JYX1BPUlQgSFdfR1BJT19QT1JUXzQKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUlhfUElOCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUlhfUElOIEhXX0dQSU9fUElOXzIKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DVFhfUE9SVAorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1RYX1BPUlQgSFdfR1BJT19QT1JUXzQKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DVFhfUElOCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DVFhfUElOIEhXX0dQSU9fUElOXzUKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUE9SVAorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BPUlQgSFdfR1BJT19QT1JUXzQKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUElOCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUElOIEhXX0dQSU9fUElOXzQKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUE9SVAorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UU0VMX1BPUlQgSFdfR1BJT19QT1JUXzQKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUElOCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUElOIEhXX0dQSU9fUElOXzAKKyNlbmRpZgorCisjZW5kaWYgLyogZGdfY29uZmlnRkVNX0RMR19SRUZfQk9BUkQgKi8KKworI2lmbmRlZiBkZ19jb25maWdGRU0KKyNkZWZpbmUgZGdfY29uZmlnRkVNIEZFTV9OT0ZFTQorI2VuZGlmCisKKyNpZiBkZ19jb25maWdGRU0gPT0gRkVNX1NLWTY2MTEyXzExCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfVVNFX0RDRgorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1VTRV9EQ0YgMQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1RYU0VUX0RDRgorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfVFhTRVRfRENGIDQ3CisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfVFhSRVNFVF9EQ0YKKyNkZWZpbmUgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1RYUkVTRVRfRENGIDAKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9SWFNFVF9EQ0YKKyNkZWZpbmUgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1JYU0VUX0RDRiAxCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfUlhSRVNFVF9EQ0YKKyNkZWZpbmUgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1JYUkVTRVRfRENGIDIwCisjZW5kaWYKKyNlbmRpZiAvKiBkZ19jb25maWdGRU0gPT0gRkVNX1NLWTY2MTEyXzExICovCisKKyNlbmRpZiAvKiBCU1BfRkVNX0hfICovCisKKy8qKgorXH0KK1x9CitcfQorKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9BUk1DTTAuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvQVJNQ00wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlM2JlMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvQVJNQ00wLmgKQEAgLTAsMCArMSw0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIEFSTUNNMC5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZSBmb3IKKyAqICAgICAgICAgICBBUk1DTTAgRGV2aWNlIFNlcmllcworICogQHZlcnNpb24gIFYzLjAwCisgKiBAZGF0ZSAgICAgMTYuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAxMSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmbmRlZiBBUk1DTTBfSAorI2RlZmluZSBBUk1DTTBfSAorCisKKyNpbmNsdWRlIDxjb3JlX2NtMC5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogQ29ydGV4LU0wIHByb2Nlc3NvciBhbmQgY29yZSBwZXJpcGhlcmFscyAgICAgICAgICAgKi8KKyNpbmNsdWRlICJzeXN0ZW1fQVJNQ00wLmgiICAgICAgICAgICAgICAgICAgLyogU3lzdGVtIEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2VuZGlmICAvKiBBUk1DTTBfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9EQTE0NjgwQkEuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvREExNDY4MEJBLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmZWJkZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvREExNDY4MEJBLmgKQEAgLTAsMCArMSwxMjEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogQGZpbGUgICAgIERBMTQ2ODBCQS5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0wIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIEhlYWRlciBGaWxlIGZvciBEQTE0NjgwQkEgZnJvbSBEaWFsb2cuCisgKiBAdmVyc2lvbiAgVjEuMgorICogQGRhdGUgICAgIDkuIEF1Z3VzdCAyMDE2CisgKiBAbm90ZSAgICAgR2VuZXJhdGVkIHdpdGggU1ZEQ29udiBWMi44N2cKKyAqICAgICAgICAgICBmcm9tIENNU0lTIFNWRCBGaWxlICdEQTE0NjgwQkEueG1sJworICogICAgICAgICAgIFZlcnNpb24gMS4yCisgKi8KKworCisKKy8qKiBAYWRkdG9ncm91cCBEaWFsb2cKKyAgKiBAeworICAqLworCisKKy8qKiBAYWRkdG9ncm91cCBEQTE0NjgwQkEKKyAgKiBAeworICAqLworCisjaWZuZGVmIERBMTQ2ODBCQV9ICisjZGVmaW5lIERBMTQ2ODBCQV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJbnRlcnJ1cHQgTnVtYmVyIERlZmluaXRpb24gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAgKiBAYnJpZWYgSW50ZXJydXB0IE51bWJlciBEZWZpbml0aW9uCisgICovCisKK3R5cGVkZWYgZW51bSB7CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBDb3J0ZXgtTTAgUHJvY2Vzc29yIEV4Y2VwdGlvbnMgTnVtYmVycyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICBSZXNldF9JUlFuICAgICAgICAgICAgICAgICAgICA9IC0xNSwgICAgICAgICAgICAgIC8qITwgICAxICBSZXNldCBWZWN0b3IsIGludm9rZWQgb24gUG93ZXIgdXAgYW5kIHdhcm0gcmVzZXQgICAgICAgICAgICAgICAgICovCisgIE5vbk1hc2thYmxlSW50X0lSUW4gICAgICAgICAgID0gLTE0LCAgICAgICAgICAgICAgLyohPCAgIDIgIE5vbiBtYXNrYWJsZSBJbnRlcnJ1cHQsIGNhbm5vdCBiZSBzdG9wcGVkIG9yIHByZWVtcHRlZCAgICAgICAgICAgKi8KKyAgSGFyZEZhdWx0X0lSUW4gICAgICAgICAgICAgICAgPSAtMTMsICAgICAgICAgICAgICAvKiE8ICAgMyAgSGFyZCBGYXVsdCwgYWxsIGNsYXNzZXMgb2YgRmF1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBTVkNhbGxfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAtNSwgICAgICAgICAgICAgIC8qITwgIDExICBTeXN0ZW0gU2VydmljZSBDYWxsIHZpYSBTVkMgaW5zdHJ1Y3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFBlbmRTVl9JUlFuICAgICAgICAgICAgICAgICAgID0gIC0yLCAgICAgICAgICAgICAgLyohPCAgMTQgIFBlbmRhYmxlIHJlcXVlc3QgZm9yIHN5c3RlbSBzZXJ2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgU3lzVGlja19JUlFuICAgICAgICAgICAgICAgICAgPSAgLTEsICAgICAgICAgICAgICAvKiE8ICAxNSAgU3lzdGVtIFRpY2sgVGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERBMTQ2ODBCQSBTcGVjaWZpYyBJbnRlcnJ1cHQgTnVtYmVycyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgQkxFX1dBS0VVUF9MUF9JUlFuICAgICAgICAgICAgPSAgIDAsICAgICAgICAgICAgICAvKiE8ICAgMCAgQkxFX1dBS0VVUF9MUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBCTEVfR0VOX0lSUW4gICAgICAgICAgICAgICAgICA9ICAgMSwgICAgICAgICAgICAgIC8qITwgICAxICBCTEVfR0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUREZfV0FLRVVQX0lSUW4gICAgICAgICAgICAgID0gICAyLCAgICAgICAgICAgICAgLyohPCAgIDIgIEZUREZfV0FLRVVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRERl9HRU5fSVJRbiAgICAgICAgICAgICAgICAgPSAgIDMsICAgICAgICAgICAgICAvKiE8ICAgMyAgRlRERl9HRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBSRkNBTF9JUlFuICAgICAgICAgICAgICAgICAgICA9ICAgNCwgICAgICAgICAgICAgIC8qITwgICA0ICBSRkNBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIENPRVhfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gICA1LCAgICAgICAgICAgICAgLyohPCAgIDUgIENPRVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgQ1JZUFRPX0lSUW4gICAgICAgICAgICAgICAgICAgPSAgIDYsICAgICAgICAgICAgICAvKiE8ICAgNiAgQ1JZUFRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBNUk1fSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAgNywgICAgICAgICAgICAgIC8qITwgICA3ICBNUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFVBUlRfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gICA4LCAgICAgICAgICAgICAgLyohPCAgIDggIFVBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgVUFSVDJfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAgIDksICAgICAgICAgICAgICAvKiE8ICAgOSAgVUFSVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBJMkNfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAxMCwgICAgICAgICAgICAgIC8qITwgIDEwICBJMkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEkyQzJfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDExLCAgICAgICAgICAgICAgLyohPCAgMTEgIEkyQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgU1BJX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSAgMTIsICAgICAgICAgICAgICAvKiE8ICAxMiAgU1BJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBTUEkyX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAxMywgICAgICAgICAgICAgIC8qITwgIDEzICBTUEkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEFEQ19JUlFuICAgICAgICAgICAgICAgICAgICAgID0gIDE0LCAgICAgICAgICAgICAgLyohPCAgMTQgIEFEQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgS0VZQlJEX0lSUW4gICAgICAgICAgICAgICAgICAgPSAgMTUsICAgICAgICAgICAgICAvKiE8ICAxNSAgS0VZQlJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBJUkdFTl9JUlFuICAgICAgICAgICAgICAgICAgICA9ICAxNiwgICAgICAgICAgICAgIC8qITwgIDE2ICBJUkdFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFdLVVBfR1BJT19JUlFuICAgICAgICAgICAgICAgID0gIDE3LCAgICAgICAgICAgICAgLyohPCAgMTcgIFdLVVBfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgU1dUSU0wX0lSUW4gICAgICAgICAgICAgICAgICAgPSAgMTgsICAgICAgICAgICAgICAvKiE8ICAxOCAgU1dUSU0wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBTV1RJTTFfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAxOSwgICAgICAgICAgICAgIC8qITwgIDE5ICBTV1RJTTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFFVQURFQ19JUlFuICAgICAgICAgICAgICAgICAgID0gIDIwLCAgICAgICAgICAgICAgLyohPCAgMjAgIFFVQURFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgVVNCX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSAgMjEsICAgICAgICAgICAgICAvKiE8ICAyMSAgVVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBQQ01fSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAyMiwgICAgICAgICAgICAgIC8qITwgIDIyICBQQ00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFNSQ19JTl9JUlFuICAgICAgICAgICAgICAgICAgID0gIDIzLCAgICAgICAgICAgICAgLyohPCAgMjMgIFNSQ19JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgU1JDX09VVF9JUlFuICAgICAgICAgICAgICAgICAgPSAgMjQsICAgICAgICAgICAgICAvKiE8ICAyNCAgU1JDX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBWQlVTX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAyNSwgICAgICAgICAgICAgIC8qITwgIDI1ICBWQlVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIERNQV9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gIDI2LCAgICAgICAgICAgICAgLyohPCAgMjYgIERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgUkZfRElBR19JUlFuICAgICAgICAgICAgICAgICAgPSAgMjcsICAgICAgICAgICAgICAvKiE8ICAyNyAgUkZfRElBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBUUk5HX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAyOCwgICAgICAgICAgICAgIC8qITwgIDI4ICBUUk5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIERDRENfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDI5LCAgICAgICAgICAgICAgLyohPCAgMjkgIERDREMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgWFRBTDE2UkRZX0lSUW4gICAgICAgICAgICAgICAgPSAgMzAsICAgICAgICAgICAgICAvKiE8ICAzMCAgWFRBTDE2UkRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBQTExfTE9DS19JUlFuICAgICAgICAgICAgICAgICA9ICAzMSAgICAgICAgICAgICAgIC8qITwgIDMxICBQTExfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IElSUW5fVHlwZTsKKworCisvKiogQGFkZHRvZ3JvdXAgQ29uZmlndXJhdGlvbl9vZl9DTVNJU19EQTE0NjgwQkEKKyAgKiBAeworICAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgUHJvY2Vzc29yIGFuZCBDb3JlIFBlcmlwaGVyYWwgU2VjdGlvbiAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLUNvbmZpZ3VyYXRpb24gb2YgdGhlIENvcnRleC1NMCBQcm9jZXNzb3IgYW5kIENvcmUgUGVyaXBoZXJhbHMtLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIF9fQ00wX1JFViAgICAgICAgICAgICAgICAgMHgwMTAwICAgICAgICAgICAgLyohPCBDb3J0ZXgtTTAgQ29yZSBSZXZpc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19NUFVfUFJFU0VOVCAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAvKiE8IE1QVSBwcmVzZW50IG9yIG5vdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05WSUNfUFJJT19CSVRTICAgICAgICAgICAgICAgMiAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIEJpdHMgdXNlZCBmb3IgUHJpb3JpdHkgTGV2ZWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fVmVuZG9yX1N5c1RpY2tDb25maWcgICAgICAgICAwICAgICAgICAgICAgLyohPCBTZXQgdG8gMSBpZiBkaWZmZXJlbnQgU3lzVGljayBDb25maWcgaXMgdXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKiBAfSAqLyAvKiBFbmQgb2YgZ3JvdXAgQ29uZmlndXJhdGlvbl9vZl9DTVNJUyAqLworCisjaW5jbHVkZSAiY29yZV9jbTAuaCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3J0ZXgtTTAgcHJvY2Vzc29yIGFuZCBjb3JlIHBlcmlwaGVyYWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpbmNsdWRlICJzeXN0ZW1fREExNDY4MC5oIiAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQTE0NjgwQkEgU3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICBEZXZpY2UgU3BlY2lmaWMgUGVyaXBoZXJhbCBTZWN0aW9uICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqIEBhZGR0b2dyb3VwIERldmljZV9QZXJpcGhlcmFsX1JlZ2lzdGVyc19EQTE0NjgwQkEKKyAgKiBAeworICAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXJ0IG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKKyAgI3ByYWdtYSBwdXNoCisgICNwcmFnbWEgYW5vbl91bmlvbnMKKyNlbGlmIGRlZmluZWQoX19JQ0NBUk1fXykKKyAgI3ByYWdtYSBsYW5ndWFnZT1leHRlbmRlZAorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykKKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkKF9fVE1TNDcwX18pCisvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbGlmIGRlZmluZWQoX19UQVNLSU5HX18pCisgICNwcmFnbWEgd2FybmluZyA1ODYKKyNlbHNlCisgICN3YXJuaW5nIE5vdCBzdXBwb3J0ZWQgY29tcGlsZXIgdHlwZQorI2VuZGlmCisKKworCisKKworCisKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgQUVTX0hBU0ggICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIEFFU19IQVNIIHJlZ2lzdGVycyAoQUVTX0hBU0gpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMjAwMDApIEFFU19IQVNIIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDUllQVE9fQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAyMDAwMCkgQ3J5cHRvIENvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENSWVBUT19TVEFSVF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDIwMDA0KSBDcnlwdG8gU3RhcnQgY2FsY3VsYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ1JZUFRPX0ZFVENIX0FERFJfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMjAwMDgpIENyeXB0byBETUEgZmV0Y2ggcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDUllQVE9fTEVOX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAyMDAwQykgQ3J5cHRvIExlbmd0aCBvZiB0aGUgaW5wdXQgYmxvY2sgaW4gYnl0ZXMgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENSWVBUT19ERVNUX0FERFJfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDIwMDEwKSBDcnlwdG8gRE1BIGRlc3RpbmF0aW9uIG1lbW9yeSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ1JZUFRPX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMjAwMTQpIENyeXB0byBTdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDUllQVE9fQ0xSSVJRX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAyMDAxOCkgQ3J5cHRvIENsZWFyIGludGVycnVwdCByZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENSWVBUT19NUkVHMF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDIwMDFDKSBDcnlwdG8gTW9kZSBkZXBlbmRlZCByZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ1JZUFRPX01SRUcxX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMjAwMjApIENyeXB0byBNb2RlIGRlcGVuZGVkIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDUllQVE9fTVJFRzJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAyMDAyNCkgQ3J5cHRvIE1vZGUgZGVwZW5kZWQgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENSWVBUT19NUkVHM19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDIwMDI4KSBDcnlwdG8gTW9kZSBkZXBlbmRlZCByZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRURbNTNdOworICBfX0lPIHVpbnQzMl90ICBDUllQVE9fS0VZU19TVEFSVDsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAyMDEwMCkgQ3J5cHRvIEZpcnN0IHBvc2l0aW9uIG9mIHRoZSBBRVMga2V5cyBzdG9yYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gQUVTX0hBU0hfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgIEFOQU1JU0MgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIEFOQU1JU0MgcmVnaXN0ZXJzIChBTkFNSVNDKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjAwKSBBTkFNSVNDIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ7CisgIF9fSU8gdWludDE2X3QgIEFOQV9URVNUX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjAyKSBBbmFsb2cgdGVzdCByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxOworICBfX0lPIHVpbnQxNl90ICBDSEFSR0VSX0NUUkwxX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUIwOCkgQ2hhcmdlciBjb250cm9sIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENIQVJHRVJfQ1RSTDJfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjBBKSBDaGFyZ2VyIGNvbnRyb2wgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0hBUkdFUl9TVEFUVVNfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCMEMpIENoYXJnZXIgc3RhdHVzIGFuZCB0cmltbWluZyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDJbMjVdOworICBfX0lPIHVpbnQxNl90ICBTT0NfQ1RSTDFfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUI0MCkgRnVlbCBHYXVnZSBDb250cm9sIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNPQ19DVFJMMl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjQyKSBGdWVsIEdhdWdlIENvbnRyb2wgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU09DX0NUUkwzX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCNDQpIEZ1ZWwgR2F1Z2UgQ29udHJvbCByZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTT0NfQUREMkNIX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUI0NikgRnVlbCBHYXVnZSBtYW51YWxseSBhZGQgZXh0cmEgY2hhcmdlIHRvIFNPQ19DSEFSR0VfQ05UUnhfUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTT0NfQ0hBUkdFX0NOVFIxX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUI0OCkgRnVlbCBHYXVnZSBDaGFyZ2UgY291bnRlciBiaXRzIDE1LTAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNPQ19DSEFSR0VfQ05UUjJfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjRBKSBGdWVsIEdhdWdlIENoYXJnZSBjb3VudGVyIGJpdHMgMzEtMTYgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU09DX0NIQVJHRV9DTlRSM19SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCNEMpIEZ1ZWwgR2F1Z2UgQ2hhcmdlIGNvdW50ZXIgYml0cyAzOS0zMiAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM7CisgIF9fSU8gdWludDE2X3QgIFNPQ19DSEFSR0VfQVZHX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjUwKSBGdWVsIEdhdWdlIEF2ZXJhZ2UgY2hhcmdlIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU09DX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCNTIpIEZ1ZWwgR2F1Z2UgU3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTT0NfRVhUX0lOX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUI1NCkgRnVlbCBHYXVnZSBpbnB1dCB0ZXN0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNPQ19FWFRfT1VUX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjU2KSBGdWVsIEdhdWdlIG91dHB1dCB0ZXN0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzJdOworICBfX0lPIHVpbnQxNl90ICBDTEtfUkVGX1NFTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUI2MCkgU2VsZWN0IGNsb2NrIGZvciBvc2NpbGxhdG9yIGNhbGlicmF0aW9uICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENMS19SRUZfQ05UX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjYyKSBDb3VudCB2YWx1ZSBmb3Igb3NjaWxsYXRvciBjYWxpYnJhdGlvbiAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0xLX1JFRl9WQUxfTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCNjQpIERJVk4gcmVmZXJlbmNlIGN5Y2xlcywgbG93ZXIgMTYgYml0cyAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDTEtfUkVGX1ZBTF9IX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUI2NikgRElWTiByZWZlcmVuY2UgY3ljbGVzLCB1cHBlciAxNiBiaXRzICAgICAgICAgICAgICAgICAgICovCit9IEFOQU1JU0NfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgQVBVICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIEFQVSByZWdpc3RlcnMgKEFQVSkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDAwMCkgQVBVIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFNSQzFfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MDAwKSBTUkMxIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgU1JDMV9JTl9GU19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQwMDQpIFNSQzEgU2FtcGxlIGlucHV0IHJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBTUkMxX09VVF9GU19SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDAwOCkgU1JDMSBTYW1wbGUgb3V0cHV0IHJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFNSQzFfSU4xX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MDBDKSBTUkMxIGRhdGEgaW4gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgU1JDMV9JTjJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQwMTApIFNSQzEgZGF0YSBpbiAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBTUkMxX09VVDFfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDAxNCkgU1JDMSBkYXRhIG91dCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFNSQzFfT1VUMl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MDE4KSBTUkMxIGRhdGEgb3V0IDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQVBVX01VWF9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQwMUMpIEFQVSBtdXggcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDT0VGMTBfU0VUMV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDAyMCkgU1JDIGNvZWZmaWNpZW50IDEsMCBzZXQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENPRUYzMl9TRVQxX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MDI0KSBTUkMgY29lZmZpY2llbnQgMywyIHNldCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ09FRjU0X1NFVDFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQwMjgpIFNSQyBjb2VmZmljaWVudCA1LDQgc2V0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDT0VGNzZfU0VUMV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDAyQykgU1JDIGNvZWZmaWNpZW50IDcsNiBzZXQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENPRUY5OF9TRVQxX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MDMwKSBTUkMgY29lZmZpY2llbnQgOSw4IHNldCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ09FRjBBX1NFVDFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQwMzQpIFNSQyBjb2VmZmljaWVudCAxMCBzZXQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRFs1MF07CisgIF9fSU8gdWludDMyX3QgIFBDTTFfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MTAwKSBQQ00xIENvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUENNMV9JTjFfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQxMDQpIFBDTTEgZGF0YSBpbiAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQ00xX0lOMl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDEwOCkgUENNMSBkYXRhIGluIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBDTTFfT1VUMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MTBDKSBQQ00xIGRhdGEgb3V0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUENNMV9PVVQyX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQxMTApIFBDTTEgZGF0YSBvdXQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBBUFVfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgQkxFICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIEJMRSByZWdpc3RlcnMgKEJMRSkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDAwMCkgQkxFIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9SV0JMRUNOVExfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDAwKSBCTEUgQ29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX1ZFUlNJT05fUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwMDQpIFZlcnNpb24gcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfUldCTEVDT05GX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDAwOCkgQ29uZmlndXJhdGlvbiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9JTlRDTlRMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDBDKSBJbnRlcnJ1cHQgY29udHJvbGxlciByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0lOVFNUQVRfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwMTApIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfSU5UUkFXU1RBVF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDAxNCkgSW50ZXJydXB0IHJhdyBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9JTlRBQ0tfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDE4KSBJbnRlcnJ1cHQgYWNrbm93bGVkZ2UgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0JBU0VUSU1FQ05UX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwMUMpIEJhc2UgdGltZSByZWZlcmVuY2UgY291bnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfRklORVRJTUVDTlRfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDAyMCkgRmluZSB0aW1lIHJlZmVyZW5jZSBjb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9CREFERFJMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDI0KSBCTEUgZGV2aWNlIGFkZHJlc3MgTFNCIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0JEQUREUlVfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwMjgpIEJMRSBkZXZpY2UgYWRkcmVzcyBNU0IgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfQ1VSUkVOVFJYREVTQ1BUUl9SRUc7ICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDAyQykgUnggRGVzY3JpcHRvciBQb2ludGVyIGZvciB0aGUgUmVjZWl2ZSBCdWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYWluZWQgTGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfREVFUFNMQ05UTF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDAzMCkgRGVlcC1TbGVlcCBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9ERUVQU0xXS1VQX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDM0KSBUaW1lIChtZWFzdXJlZCBpbiBMb3cgUG93ZXIgY2xvY2sgY3ljbGVzKSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVlcCBTbGVlcCBNb2RlIGJlZm9yZSB3YWtpbmctdXAgdGhlIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9ERUVQU0xTVEFUX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDM4KSBEdXJhdGlvbiBvZiB0aGUgbGFzdCBkZWVwIHNsZWVwIHBoYXNlIHJlZ2lzdGVyICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0VOQlBSRVNFVF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwM0MpIFRpbWUgaW4gbG93IHBvd2VyIG9zY2lsbGF0b3IgY3ljbGVzIHJlZ2lzdGVyICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfRklORUNOVENPUlJfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDA0MCkgUGhhc2UgY29ycmVjdGlvbiB2YWx1ZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9CQVNFVElNRUNOVENPUlJfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDQ0KSBCYXNlIFRpbWUgQ291bnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRURbMl07CisgIF9fSU8gdWludDMyX3QgIEJMRV9ESUFHQ05UTF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDUwKSBEaWFnbm9zdGljcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0RJQUdTVEFUX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwNTQpIERlYnVnIHVzZSBvbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfREVCVUdBRERNQVhfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDA1OCkgVXBwZXIgbGltaXQgZm9yIHRoZSBtZW1vcnkgem9uZSAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9ERUJVR0FERE1JTl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDVDKSBMb3dlciBsaW1pdCBmb3IgdGhlIG1lbW9yeSB6b25lICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwNjApIEVycm9yIFR5cGUgU3RhdHVzIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfU1dQUk9GSUxJTkdfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDA2NCkgU29mdHdhcmUgUHJvZmlsaW5nIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVsyXTsKKyAgX19JTyB1aW50MzJfdCAgQkxFX1JBRElPQ05UTDBfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwNzApIFJhZGlvIGludGVyZmFjZSBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfUkFESU9DTlRMMV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDA3NCkgUmFkaW8gaW50ZXJmYWNlIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9SQURJT0NOVEwyX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDc4KSBSYWRpbyBpbnRlcmZhY2UgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX1JBRElPQ05UTDNfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwN0MpIFJhZGlvIGludGVyZmFjZSBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfUkFESU9QV1JVUEROX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDA4MCkgUlgvVFggcG93ZXIgdXAvZG93biBwaGFzZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlszXTsKKyAgX19JTyB1aW50MzJfdCAgQkxFX0FEVkNITUFQX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwOTApIEFkdmVydGlzaW5nIENoYW5uZWwgTWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbM107CisgIF9fSU8gdWludDMyX3QgIEJMRV9BRFZUSU1fUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMEEwKSBBZHZlcnRpc2luZyBQYWNrZXQgSW50ZXJ2YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0FDVFNDQU5TVEFUX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwQTQpIEFjdGl2ZSBzY2FuIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbMl07CisgIF9fSU8gdWludDMyX3QgIEJMRV9XTFBVQkFERFBUUl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMEIwKSBTdGFydCBhZGRyZXNzIG9mIHB1YmxpYyBkZXZpY2VzIGxpc3QgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX1dMUFJJVkFERFBUUl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwQjQpIFN0YXJ0IGFkZHJlc3Mgb2YgcHJpdmF0ZSBkZXZpY2VzIGxpc3QgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfV0xOQkRFVl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBCOCkgRGV2aWNlcyBpbiB3aGl0ZSBsaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENTsKKyAgX19JTyB1aW50MzJfdCAgQkxFX0FFU0NOVExfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwQzApIFN0YXJ0IEFFUyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfQUVTS0VZMzFfMF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBDNCkgQUVTIGVuY3J5cHRpb24ga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9BRVNLRVk2M18zMl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMEM4KSBBRVMgZW5jcnlwdGlvbiBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0FFU0tFWTk1XzY0X1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwQ0MpIEFFUyBlbmNyeXB0aW9uIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfQUVTS0VZMTI3Xzk2X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBEMCkgQUVTIGVuY3J5cHRpb24ga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9BRVNQVFJfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMEQ0KSBQb2ludGVyIHRvIHRoZSBibG9jayB0byBlbmNyeXB0L2RlY3J5cHQgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX1RYTUlDVkFMX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwRDgpIEFFUyAvIENDTSBwbGFpbiBNSUMgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfUlhNSUNWQUxfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBEQykgQUVTIC8gQ0NNIHBsYWluIE1JQyB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9SRlRFU1RDTlRMX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMEUwKSBSRiBUZXN0aW5nIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX1JGVEVTVFRYU1RBVF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwRTQpIFJGIFRlc3RpbmcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfUkZURVNUUlhTVEFUX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBFOCkgUkYgVGVzdGluZyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENjsKKyAgX19JTyB1aW50MzJfdCAgQkxFX1RJTUdFTkNOVExfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwRjApIFRpbWluZyBHZW5lcmF0b3IgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfR1JPU1NUSU1UR1RfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBGNCkgR3Jvc3MgVGltZXIgVGFyZ2V0IHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9GSU5FVElNVEdUX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMEY4KSBGaW5lIFRpbWVyIFRhcmdldCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX1NBTVBMRUNMS19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwRkMpIFNhbXBsZXMgdGhlIEJhc2UgVGltZSBDb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfQ09FWElGQ05UTDBfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDEwMCkgQ29leGlzdGVuY2UgaW50ZXJmYWNlIENvbnRyb2wgMCBSZWdpc3RlciAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9DT0VYSUZDTlRMMV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMTA0KSBDb2V4aXN0ZW5jZSBpbnRlcmZhY2UgQ29udHJvbCAxIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0JMRU1QUklPMF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAxMDgpIENvZXhpc3RlbmNlIGludGVyZmFjZSBQcmlvcml0eSAwIFJlZ2lzdGVyICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfQkxFTVBSSU8xX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDEwQykgQ29leGlzdGVuY2UgaW50ZXJmYWNlIFByaW9yaXR5IDEgUmVnaXN0ZXIgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1s2MF07CisgIF9fSU8gdWludDMyX3QgIEJMRV9DTlRMMl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMjAwKSBCTEUgQ29udHJvbCBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ4OworICBfX0lPIHVpbnQzMl90ICBCTEVfRU1fQkFTRV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDIwOCkgRXhjaGFuZ2UgTWVtb3J5IEJhc2UgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9ESUFHQ05UTDJfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMjBDKSBEZWJ1ZyB1c2Ugb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0RJQUdDTlRMM19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAyMTApIERlYnVnIHVzZSBvbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBCTEVfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBDQUNIRSAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIENBQ0hFIHJlZ2lzdGVycyAoQ0FDSEUpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwQzMwMDApIENBQ0hFIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDQUNIRV9DVFJMMV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDBDMzAwMCkgQ2FjaGUgY29udHJvbCByZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENBQ0hFX0xOU0laRUNGR19SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMEMzMDA0KSBDYWNoZSBsaW5lIHNpemUgY29uZmlndXJhdGlvbiByZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ0FDSEVfQVNTT0NDRkdfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwQzMwMDgpIENhY2hlIGFzc29jaWF0aXZpdHkgY29uZmlndXJhdGlvbiByZWdpc3RlciAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRFs1XTsKKyAgX19JTyB1aW50MzJfdCAgQ0FDSEVfQ1RSTDJfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwQzMwMjApIENhY2hlIGNvbnRyb2wgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDQUNIRV9DVFJMM19SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDBDMzAyNCkgQ2FjaGUgY29udHJvbCByZWdpc3RlciAzIChmb3IgdGhlIENhY2hlIENvbnRyb2xsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcmVzZXQgdmFsdWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDQUNIRV9NUk1fSElUU19SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDBDMzAyOCkgQ2FjaGUgTVJNIChNaXNzIFJhdGUgTW9uaXRvcikgSElUUyByZWdpc3RlciAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENBQ0hFX01STV9NSVNTRVNfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMEMzMDJDKSBDYWNoZSBNUk0gKE1pc3MgUmF0ZSBNb25pdG9yKSBNSVNTRVMgcmVnaXN0ZXIgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ0FDSEVfTVJNX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwQzMwMzApIENhY2hlIE1STSAoTWlzcyBSYXRlIE1vbml0b3IpIENPTlRST0wgcmVnaXN0ZXIgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDQUNIRV9NUk1fVElOVF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDBDMzAzNCkgQ2FjaGUgTVJNIChNaXNzIFJhdGUgTW9uaXRvcikgVElNRSBJTlRFUlZBTCByZWdpc3RlciAgICovCisgIF9fSU8gdWludDMyX3QgIENBQ0hFX01STV9USFJFU19SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMEMzMDM4KSBDYWNoZSBNUk0gKE1pc3MgUmF0ZSBNb25pdG9yKSBUSFJFU0hPTEQgcmVnaXN0ZXIgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzVdOworICBfX0lPIHVpbnQzMl90ICBTV0RfUkVTRVRfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDBDMzA1MCkgU1dEIEhXIHJlc2V0IGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IENBQ0hFX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICBDSElQX1ZFUlNJT04gICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBDSElQX1ZFUlNJT04gcmVnaXN0ZXJzIChDSElQX1ZFUlNJT04pCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMyMDApIENISVBfVkVSU0lPTiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQ4X3QgICBDSElQX0lEMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzIwMCkgQ2hpcCBpZGVudGlmaWNhdGlvbiByZWdpc3RlciAxLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDhfdCAgIENISVBfSUQyX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMjAxKSBDaGlwIGlkZW50aWZpY2F0aW9uIHJlZ2lzdGVyIDIuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50OF90ICAgQ0hJUF9JRDNfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMyMDIpIENoaXAgaWRlbnRpZmljYXRpb24gcmVnaXN0ZXIgMy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQ4X3QgICBDSElQX1NXQ19SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzIwMykgU29mdHdhcmUgY29tcGF0aWJpbGl0eSByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDhfdCAgIENISVBfUkVWSVNJT05fUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMjA0KSBDaGlwIHJldmlzaW9uIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50OF90ICAgQ0hJUF9DT05GSUcxX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMyMDUpIENoaXAgY29uZmlndXJhdGlvbiByZWdpc3RlciAxLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQ4X3QgICBDSElQX0NPTkZJRzJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzIwNikgQ2hpcCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDIuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDhfdCAgIENISVBfQ09ORklHM19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMjA3KSBDaGlwIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ7CisgIF9fSU8gdWludDhfdCAgIENISVBfVEVTVDFfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMjBBKSBDaGlwIHRlc3QgcmVnaXN0ZXIgMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50OF90ICAgQ0hJUF9URVNUMl9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMyMEIpIENoaXAgdGVzdCByZWdpc3RlciAyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQ4X3QgICBDSElQX1RFU1QzX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzIwQykgQ2hpcCB0ZXN0IHJlZ2lzdGVyIDMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IENISVBfVkVSU0lPTl9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIENPRVggICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgQ09FWCByZWdpc3RlcnMgKENPRVgpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMDApIENPRVggU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYwMCkgQ09FWCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfU1RBVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjAyKSBDT0VYIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9TVEFUMl9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMDQpIENPRVggU3RhdHVzIDIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX0lOVF9NQVNLX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYwNikgQ09FWCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfSU5UX1NUQVRfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjA4KSBDT0VYIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9CTEVfUFRJX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMEEpIENPRVggQkxFIFBUSSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX0ZUREZfUFRJX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYwQykgQ09FWCBGVERGIFBUSSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEWzJdOworICBfX0lPIHVpbnQxNl90ICBDT0VYX1BSSTFfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYxMikgQ09FWCBQcmlvcml0eSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfUFJJMl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjE0KSBDT0VYIFByaW9yaXR5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9QUkkzX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMTYpIENPRVggUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX1BSSTRfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYxOCkgQ09FWCBQcmlvcml0eSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfUFJJNV9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjFBKSBDT0VYIFByaW9yaXR5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9QUkk2X1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMUMpIENPRVggUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX1BSSTdfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYxRSkgQ09FWCBQcmlvcml0eSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfUFJJOF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjIwKSBDT0VYIFByaW9yaXR5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9QUkk5X1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMjIpIENPRVggUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX1BSSTEwX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYyNCkgQ09FWCBQcmlvcml0eSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfUFJJMTFfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjI2KSBDT0VYIFByaW9yaXR5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9QUkkxMl9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMjgpIENPRVggUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX1BSSTEzX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYyQSkgQ09FWCBQcmlvcml0eSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfUFJJMTRfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjJDKSBDT0VYIFByaW9yaXR5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9QUkkxNV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMkUpIENPRVggUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBDT0VYX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICBDUkdfUEVSICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBDUkdfUEVSIHJlZ2lzdGVycyAoQ1JHX1BFUikKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUMwMCkgQ1JHX1BFUiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOworICBfX0lPIHVpbnQxNl90ICBDTEtfUEVSX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUMwNCkgUGVyaXBoZXJhbCBkaXZpZGVyIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMVsyOV07CisgIF9fSU8gdWludDE2X3QgIFBDTV9ESVZfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQzQwKSBQQ00gZGl2aWRlciBhbmQgZW5hYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUENNX0ZESVZfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFDNDIpIFBDTSBmcmFjdGlvbmFsIGRpdmlzaW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQRE1fRElWX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUM0NCkgUERNIGRpdmlkZXIgYW5kIGVuYWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNSQ19ESVZfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQzQ2KSBTUkMgZGl2aWRlciBhbmQgZW5hYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRUhfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFDNDgpIEVIX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JQQURfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUM0QSkgVVNCIHBhZHMgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IENSR19QRVJfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgIENSR19UT1AgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIENSR19UT1AgcmVnaXN0ZXJzIChDUkdfVE9QKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDAwKSBDUkdfVE9QIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0xLX0FNQkFfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMDApIEhDTEssIFBDTEssIGRpdmlkZXIgYW5kIGNsb2NrIGdhdGVzICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDTEtfRlJFUV9UUklNX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAwMikgWHRhbCBmcmVxdWVuY3kgdHJpbW1pbmcgcmVnaXN0ZXIuICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOworICBfX0lPIHVpbnQxNl90ICBDTEtfUkFESU9fUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAwOCkgUmFkaW8gUExMIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENMS19DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDBBKSBDbG9jayBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0xLX1RNUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMEMpIENsb2NrIGNvbnRyb2wgZm9yIHRoZSB0aW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE7CisgIF9fSU8gdWludDE2X3QgIFBNVV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDEwKSBQb3dlciBNYW5hZ2VtZW50IFVuaXQgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU1lTX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMTIpIFN5c3RlbSBDb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTWVNfU1RBVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAxNCkgU3lzdGVtIHN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFRSSU1fQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDE2KSBDb250cm9sIHRyaW1taW5nIG9mIHRoZSBYVEFMMTZNICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzJdOworICBfX0lPIHVpbnQxNl90ICBDTEtfMzJLX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAyMCkgMzIga0h6IG9zY2lsbGF0b3IgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENMS18xNk1fUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDIyKSAxNiBNSHogUkMgYW5kIHh0YWwgb3NjaWxsYXRvciByZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0xLX1JDWDIwS19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMjQpIDIwS0h6IFJYQy1vc2NpbGxhdG9yIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM7CisgIF9fSU8gdWludDE2X3QgIEJBTkRHQVBfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDI4KSBiYW5kZ2FwIHRyaW1taW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQU5BX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMkEpIHN0YXR1cyBiaXQgb2YgYW5hbG9nIChwb3dlciBtYW5hZ2VtZW50KSBjaXJjdWl0cyAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTVEFSVFVQX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAyQykgU3RhcnR1cCB0aW1lb3V0IGJpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENDsKKyAgX19JTyB1aW50MTZfdCAgVkJVU19JUlFfTUFTS19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMzApIElSUSBtYXNraW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBWQlVTX0lSUV9DTEVBUl9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAzMikgQ2xlYXIgcGVuZGluZyBJUlEgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEJPRF9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDM0KSBCcm93biBPdXQgRGV0ZWN0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQk9EX0NUUkwyX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMzYpIEJyb3duIE91dCBEZXRlY3Rpb24gY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBCT0RfU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAzOCkgQnJvd24gT3V0IERldGVjdGlvbiBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIExET19DVFJMMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDNBKSBMRE8gY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgTERPX0NUUkwyX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwM0MpIExETyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTTEVFUF9USU1FUl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAzRSkgVGltZXIgZm9yIHJlZ3VsYXRlZCBzbGVlcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFBPV0VSX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDQwKSBQb3dlciBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUE9SX1ZCQVRfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwNDIpIENvbnRyb2xzIHRoZSBQT1Igb24gVkJBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbM107CisgIF9fSU8gdWludDE2X3QgIFhUQUxSRFlfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDUwKSBDb250cm9sIHJlZ2lzdGVyIGZvciBYVEFMUkRZIElSUSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgWFRBTFJEWV9TVEFUX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwNTIpIERpZmZlcmVuY2UgYmV0d2VlbiBYVEFMX09LIGFuZCBYVEFMUkRZX0lSUSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFAgY2xvY2sgY3ljbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIExET19DVFJMM19SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDU0KSBSZXRlbnRpb24gTERPIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ2OworICBfX0lPIHVpbnQxNl90ICBYVEFMMTZNX1NUQVJUX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA1OCkgWHRhbCBmcmVxdWVuY3kgdHJpbW1pbmcgcmVnaXN0ZXIgZHVyaW5nIHN0YXJ0dXAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFhUQUwxNk1fUkFNUF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDVBKSBYdGFsIGZyZXF1ZW5jeSB0cmltbWluZyByZWdpc3RlciBkdXJpbmcgcmFtcGluZyAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgWFRBTDE2TV9UUlNUQVRfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwNUMpIFJlYWQgYmFjayB2YWx1ZSBvZiBjdXJyZW50IFhUQUwgdHJpbW1pbmcgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRVNFVF9TVEFUX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA1RSkgUmVzZXQgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEZPUkNFX1NMRUVQX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDYwKSBGb3JjZSBGVERGL0JMRSB0byBzbGVlcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgTERPU19ESVNBQkxFX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwNjIpIEZvcmNlIG9mZiBhbGwgTERPcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBBT05fU1BBUkVfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA2NCkgU3BhcmUgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNFQ1VSRV9CT09UX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDY2KSBDb250cm9scyBzZWN1cmUgYm9vdGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUE1VX1JFU0VUX1JBSUxfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwNjgpIENvbnRyb2xzIHJhaWwgcmVzZXR0aW5nIHdoZW4gUlNUIGlzIHB1bHNlZCAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBESVNDSEFSR0VfUkFJTF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA2QSkgSW1tZWRpYXRlIHJhaWwgcmVzZXR0aW5nLiBUaGVyZSBpcyBubyBMRE8vRENEQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2F0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IENSR19UT1BfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBEQ0RDICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIERDREMgcmVnaXN0ZXJzIChEQ0RDKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDgwKSBEQ0RDIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ7CisgIF9fSU8gdWludDE2X3QgIERDRENfQ1RSTF8wX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDgyKSBEQ0RDIEZpcnN0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19DVFJMXzFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwODQpIERDREMgU2Vjb25kIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX0NUUkxfMl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA4NikgRENEQyBUaGlyZCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfVjE0XzBfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDg4KSBEQ0RDIFYxNCBGaXJzdCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19WMTRfMV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwOEEpIERDREMgVjE0IFNlY29uZCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1YxOF8wX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA4QykgRENEQyBWMTggRmlyc3QgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfVjE4XzFfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDhFKSBEQ0RDIFYxOCBTZWNvbmQgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19WRERfMF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwOTApIERDREMgVkREIEZpcnN0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1ZERF8xX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA5MikgRENEQyBWREQgU2Vjb25kIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfVjE4UF8wX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDk0KSBEQ0RDIFZQQSBGaXJzdCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19WMThQXzFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwOTYpIERDREMgVlBBIFNlY29uZCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1JFVF8wX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA5OCkgRENEQyBGaXJzdCBSZXRlbnRpb24gTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfUkVUXzFfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDlBKSBEQ0RDIFNlY29uZCBSZXRlbnRpb24gTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19UUklNX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwOUMpIERDREMgQ29tcGFyYXRvciBUcmltIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1RFU1RfMF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA5RSkgRENEQyBUZXN0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfVEVTVF8xX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMEEwKSBEQ0RDIFRlc3QgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19TVEFUVVNfMF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwQTIpIERDREMgRmlyc3QgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1NUQVRVU18xX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDBBNCkgRENEQyBTZWNvbmQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfU1RBVFVTXzJfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMEE2KSBEQ0RDIFRoaXJkIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19TVEFUVVNfM19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwQTgpIERDREMgRm91cnRoIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1NUQVRVU180X1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDBBQSkgRENEQyBGaWZ0aCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfVFJJTV8wX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMEFDKSBEQ0RDIFYxNCBDb21wYXJhdG9yIFRyaW0gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19UUklNXzFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwQUUpIERDREMgVjE4IENvbXBhcmF0b3IgVHJpbSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1RSSU1fMl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDBCMCkgRENEQyBWREQgQ29tcGFyYXRvciBUcmltIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfVFJJTV8zX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMEIyKSBEQ0RDIFZQQSBDb21wYXJhdG9yIFRyaW0gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19JUlFfU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwQjQpIERDREMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX0lSUV9DTEVBUl9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDBCNikgRENEQyBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfSVJRX01BU0tfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMEI4KSBEQ0RDIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gRENEQ19UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBERU0gICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgREVNIHJlZ2lzdGVycyAoREVNKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTAwKSBERU0gU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfREVNX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMDApIFJGX0RFTV9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9BR0NfTFVUXzAxX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUwMikgUkZfQUdDX0xVVF8wMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FHQ19MVVRfMjNfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTA0KSBSRl9BR0NfTFVUXzIzX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQUdDX0xVVF80NV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMDYpIFJGX0FHQ19MVVRfNDVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9BR0NfTFVUXzY3X1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUwOCkgUkZfQUdDX0xVVF82N19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FHQ19MVVRfODlfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTBBKSBSRl9BR0NfTFVUXzg5X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQUdDX0NUUkwxX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMEMpIFJGX0FHQ19DVFJMMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9BR0NfQ1RSTDJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUwRSkgUkZfQUdDX0NUUkwyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FGQ19DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTEwKSBSRl9BRkNfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRENfT0ZGU0VUX0NUUkwxX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMTIpIFJGX0RDX09GRlNFVF9DVFJMMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUxNCkgUkZfRENfT0ZGU0VUX0NUUkwyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0RDX09GRlNFVF9DVFJMM19SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTE2KSBSRl9EQ19PRkZTRVRfQ1RSTDNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRENfT0ZGU0VUX0NUUkw0X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMTgpIFJGX0RDX09GRlNFVF9DVFJMNF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDsKKyAgX19JTyB1aW50MTZfdCAgUkZfQUdDX1JFU1VMVF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMUMpIFJGX0FHQ19SRVNVTFRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9SU1NJX1JFU1VMVF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUxRSkgUkZfUlNTSV9SRVNVTFRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0RDX09GRlNFVF9SRVNVTFRfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTIwKSBNdXN0IGJlIFJldGFpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUlNTSV9DT01QX0NUUkxfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMjIpIFJGX1JTU0lfQ09NUF9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbM107CisgIF9fSU8gdWludDE2X3QgIFJGX0ZUREZfQ1RSTDFfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTMwKSBSRl9GVERGX0NUUkwxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRlRERl9DVFJMMl9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMzIpIFJGX0ZUREZfQ1RSTDJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9GVERGX0NUUkwzX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUzNCkgUkZfRlRERl9DVFJMM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0ZUREZfQ1RSTDRfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTM2KSBSRl9GVERGX0NUUkw0X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRlRERl9MT09QX0dBSU5fUERfUkVHOyAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMzgpIFJGX0ZUREZfTE9PUF9HQUlOX1BEX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9GVERGX0xPT1BfR0FJTl9EU19SRUc7ICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUzQSkgUkZfRlRERl9MT09QX0dBSU5fRFNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0ZUREZfQ1RSTDVfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTNDKSBSRl9GVERGX0NUUkw1X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRlRERl9DT0JJX0xPV19SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFM0UpIFJGX0ZUREZfQ09CSV9MT1dfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9GVERGX0NPQklfSElHSF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkU0MCkgUkZfRlRERl9DT0JJX0hJR0hfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0RFTV9URVNUTU9ERV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTQyKSBSRl9ERU1fVEVTVE1PREVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfREVNX0lRQ09SUkVDVF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFNDQpIFJGX0RFTV9JUUNPUlJFQ1RfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9QQURfQ05UX0NUUkxfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkU0NikgUkZfUEFEX0NOVF9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1BBRF9DTlRfUkVTVUxUX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTQ4KSBSRl9QQURfQ05UX1JFU1VMVF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyWzNdOworICBfX0lPIHVpbnQxNl90ICBSRl9GU1NTX0lfUkVTVUxUX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkU1MCkgUkZfRlNTU19JX1JFU1VMVF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0ZTU1NfUV9SRVNVTFRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTUyKSBSRl9GU1NTX1FfUkVTVUxUX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRlNTU19NQUdfUkVTVUxUX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFNTQpIFJGX0ZTU1NfTUFHX1JFU1VMVF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DQ0FfUlNTSVRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkU1NikgUkZfQ0NBX1JTU0lUSF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0ZUREZfU0lHREVUX0NUUkxfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTU4KSBSRl9GVERGX1NJR0RFVF9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gREVNX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIERNQSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBETUEgcmVnaXN0ZXJzIChETUEpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MDApIERNQSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEwX0FfU1RBUlRMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUwMCkgU3RhcnQgYWRkcmVzcyBMb3cgQSBvZiBETUEgY2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTBfQV9TVEFSVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTAyKSBTdGFydCBhZGRyZXNzIEhpZ2ggQSBvZiBETUEgY2hhbm5lbCAwICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMF9CX1NUQVJUTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MDQpIFN0YXJ0IGFkZHJlc3MgTG93IEIgb2YgRE1BIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEwX0JfU1RBUlRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUwNikgU3RhcnQgYWRkcmVzcyBIaWdoIEIgb2YgRE1BIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTBfSU5UX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTA4KSBETUEgcmVjZWl2ZSBpbnRlcnJ1cHQgcmVnaXN0ZXIgY2hhbm5lbCAwICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMF9MRU5fUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MEEpIERNQSByZWNlaXZlIGxlbmd0aCByZWdpc3RlciBjaGFubmVsIDAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEwX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUwQykgQ29udHJvbCByZWdpc3RlciBmb3IgdGhlIERNQSBjaGFubmVsIDAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTBfSURYX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTBFKSBJbmRleCB2YWx1ZSBvZiBETUEgY2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMV9BX1NUQVJUTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MTApIFN0YXJ0IGFkZHJlc3MgTG93IEEgb2YgRE1BIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUExX0FfU1RBUlRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUxMikgU3RhcnQgYWRkcmVzcyBIaWdoIEEgb2YgRE1BIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTFfQl9TVEFSVExfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTE0KSBTdGFydCBhZGRyZXNzIExvdyBCIG9mIERNQSBjaGFubmVsIDEgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMV9CX1NUQVJUSF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MTYpIFN0YXJ0IGFkZHJlc3MgSGlnaCBCIG9mIERNQSBjaGFubmVsIDEgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUExX0lOVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUxOCkgRE1BIHJlY2VpdmUgaW50ZXJydXB0IHJlZ2lzdGVyIGNoYW5uZWwgMSAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTFfTEVOX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTFBKSBETUEgcmVjZWl2ZSBsZW5ndGggcmVnaXN0ZXIgY2hhbm5lbCAxICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MUMpIENvbnRyb2wgcmVnaXN0ZXIgZm9yIHRoZSBETUEgY2hhbm5lbCAxICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUExX0lEWF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUxRSkgSW5kZXggdmFsdWUgb2YgRE1BIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTJfQV9TVEFSVExfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTIwKSBTdGFydCBhZGRyZXNzIExvdyBBIG9mIERNQSBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMl9BX1NUQVJUSF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MjIpIFN0YXJ0IGFkZHJlc3MgSGlnaCBBIG9mIERNQSBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEyX0JfU1RBUlRMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUyNCkgU3RhcnQgYWRkcmVzcyBMb3cgQiBvZiBETUEgY2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTJfQl9TVEFSVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTI2KSBTdGFydCBhZGRyZXNzIEhpZ2ggQiBvZiBETUEgY2hhbm5lbCAyICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMl9JTlRfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MjgpIERNQSByZWNlaXZlIGludGVycnVwdCByZWdpc3RlciBjaGFubmVsIDIgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEyX0xFTl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUyQSkgRE1BIHJlY2VpdmUgbGVuZ3RoIHJlZ2lzdGVyIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTJfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTJDKSBDb250cm9sIHJlZ2lzdGVyIGZvciB0aGUgRE1BIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMl9JRFhfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MkUpIEluZGV4IHZhbHVlIG9mIERNQSBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEzX0FfU1RBUlRMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUzMCkgU3RhcnQgYWRkcmVzcyBMb3cgQSBvZiBETUEgY2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTNfQV9TVEFSVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTMyKSBTdGFydCBhZGRyZXNzIEhpZ2ggQSBvZiBETUEgY2hhbm5lbCAzICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BM19CX1NUQVJUTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MzQpIFN0YXJ0IGFkZHJlc3MgTG93IEIgb2YgRE1BIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEzX0JfU1RBUlRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUzNikgU3RhcnQgYWRkcmVzcyBIaWdoIEIgb2YgRE1BIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTNfSU5UX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTM4KSBETUEgcmVjZWl2ZSBpbnRlcnJ1cHQgcmVnaXN0ZXIgY2hhbm5lbCAzICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BM19MRU5fUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1M0EpIERNQSByZWNlaXZlIGxlbmd0aCByZWdpc3RlciBjaGFubmVsIDMgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEzX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUzQykgQ29udHJvbCByZWdpc3RlciBmb3IgdGhlIERNQSBjaGFubmVsIDMgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTNfSURYX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTNFKSBJbmRleCB2YWx1ZSBvZiBETUEgY2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNF9BX1NUQVJUTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NDApIFN0YXJ0IGFkZHJlc3MgTG93IEEgb2YgRE1BIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE0X0FfU1RBUlRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU0MikgU3RhcnQgYWRkcmVzcyBIaWdoIEEgb2YgRE1BIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTRfQl9TVEFSVExfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTQ0KSBTdGFydCBhZGRyZXNzIExvdyBCIG9mIERNQSBjaGFubmVsIDQgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNF9CX1NUQVJUSF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NDYpIFN0YXJ0IGFkZHJlc3MgSGlnaCBCIG9mIERNQSBjaGFubmVsIDQgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE0X0lOVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU0OCkgRE1BIHJlY2VpdmUgaW50ZXJydXB0IHJlZ2lzdGVyIGNoYW5uZWwgNCAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTRfTEVOX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTRBKSBETUEgcmVjZWl2ZSBsZW5ndGggcmVnaXN0ZXIgY2hhbm5lbCA0ICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNF9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NEMpIENvbnRyb2wgcmVnaXN0ZXIgZm9yIHRoZSBETUEgY2hhbm5lbCA0ICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE0X0lEWF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU0RSkgSW5kZXggdmFsdWUgb2YgRE1BIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTVfQV9TVEFSVExfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTUwKSBTdGFydCBhZGRyZXNzIExvdyBBIG9mIERNQSBjaGFubmVsIDUgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNV9BX1NUQVJUSF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NTIpIFN0YXJ0IGFkZHJlc3MgSGlnaCBBIG9mIERNQSBjaGFubmVsIDUgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE1X0JfU1RBUlRMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU1NCkgU3RhcnQgYWRkcmVzcyBMb3cgQiBvZiBETUEgY2hhbm5lbCA1ICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTVfQl9TVEFSVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTU2KSBTdGFydCBhZGRyZXNzIEhpZ2ggQiBvZiBETUEgY2hhbm5lbCA1ICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNV9JTlRfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NTgpIERNQSByZWNlaXZlIGludGVycnVwdCByZWdpc3RlciBjaGFubmVsIDUgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE1X0xFTl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU1QSkgRE1BIHJlY2VpdmUgbGVuZ3RoIHJlZ2lzdGVyIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTVfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTVDKSBDb250cm9sIHJlZ2lzdGVyIGZvciB0aGUgRE1BIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNV9JRFhfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NUUpIEluZGV4IHZhbHVlIG9mIERNQSBjaGFubmVsIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE2X0FfU1RBUlRMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU2MCkgU3RhcnQgYWRkcmVzcyBMb3cgQSBvZiBETUEgY2hhbm5lbCA2ICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTZfQV9TVEFSVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTYyKSBTdGFydCBhZGRyZXNzIEhpZ2ggQSBvZiBETUEgY2hhbm5lbCA2ICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNl9CX1NUQVJUTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NjQpIFN0YXJ0IGFkZHJlc3MgTG93IEIgb2YgRE1BIGNoYW5uZWwgNiAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE2X0JfU1RBUlRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU2NikgU3RhcnQgYWRkcmVzcyBIaWdoIEIgb2YgRE1BIGNoYW5uZWwgNiAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTZfSU5UX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTY4KSBETUEgcmVjZWl2ZSBpbnRlcnJ1cHQgcmVnaXN0ZXIgY2hhbm5lbCA2ICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNl9MRU5fUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NkEpIERNQSByZWNlaXZlIGxlbmd0aCByZWdpc3RlciBjaGFubmVsIDYgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE2X0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU2QykgQ29udHJvbCByZWdpc3RlciBmb3IgdGhlIERNQSBjaGFubmVsIDYgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTZfSURYX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTZFKSBJbmRleCB2YWx1ZSBvZiBETUEgY2hhbm5lbCA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BN19BX1NUQVJUTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NzApIFN0YXJ0IGFkZHJlc3MgTG93IEEgb2YgRE1BIGNoYW5uZWwgNyAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE3X0FfU1RBUlRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU3MikgU3RhcnQgYWRkcmVzcyBIaWdoIEEgb2YgRE1BIGNoYW5uZWwgNyAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTdfQl9TVEFSVExfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTc0KSBTdGFydCBhZGRyZXNzIExvdyBCIG9mIERNQSBjaGFubmVsIDcgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BN19CX1NUQVJUSF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NzYpIFN0YXJ0IGFkZHJlc3MgSGlnaCBCIG9mIERNQSBjaGFubmVsIDcgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE3X0lOVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU3OCkgRE1BIHJlY2VpdmUgaW50ZXJydXB0IHJlZ2lzdGVyIGNoYW5uZWwgNyAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTdfTEVOX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTdBKSBETUEgcmVjZWl2ZSBsZW5ndGggcmVnaXN0ZXIgY2hhbm5lbCA3ICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BN19DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1N0MpIENvbnRyb2wgcmVnaXN0ZXIgZm9yIHRoZSBETUEgY2hhbm5lbCA3ICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE3X0lEWF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU3RSkgSW5kZXggdmFsdWUgb2YgRE1BIGNoYW5uZWwgNyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQV9SRVFfTVVYX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTgwKSBETUEgY2hhbm5lbCBhc3NpZ25tZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BX0lOVF9TVEFUVVNfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1ODIpIERNQSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUFfQ0xFQVJfSU5UX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU4NCkgRE1BIGNsZWFyIGludGVycnVwdCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IERNQV9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBFQ0MgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgRUNDIHJlZ2lzdGVycyAoRUNDKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA2MDAwKSBFQ0MgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRUNDX0NPTkZJR19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDYwMDApIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBFQ0NfQ09NTUFORF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNjAwNCkgQ29tbWFuZCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEVDQ19DT05UUk9MX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA2MDA4KSBDb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRUNDX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDYwMEMpIFN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBFQ0NfVkVSU0lPTl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNjAxMCkgVmVyc2lvbiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IEVDQ19UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIEZUREYgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgRlRERiByZWdpc3RlcnMgKEZUREYpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAwMDApIEZUREYgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX0ZJRk9fMF8wX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDAwMCkgQWRkcmVzcyB0cmFuc21pdCBmaWZvIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEWzMxXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GSUZPXzFfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAwODApIEFkZHJlc3MgdHJhbnNtaXQgZmlmbyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMzFdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX0ZJRk9fMl8wX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDEwMCkgQWRkcmVzcyB0cmFuc21pdCBmaWZvIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlszMV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfRklGT18zXzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMTgwKSBBZGRyZXNzIHRyYW5zbWl0IGZpZm8gMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzMxXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzsgICAgICAgICAvKiE8IChAIDB4NDAwODAyMDApIFRyYW5zbWl0IG1ldGFkYXRhIHJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX01FVEFfREFUQV8xXzBfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA4MDIwNCkgVHJhbnNtaXQgbWV0YWRhdGEgcmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzsgICAgICAgICAvKiE8IChAIDB4NDAwODAyMTApIFRyYW5zbWl0IG1ldGFkYXRhIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX01FVEFfREFUQV8xXzFfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA4MDIxNCkgVHJhbnNtaXQgbWV0YWRhdGEgcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzsgICAgICAgICAvKiE8IChAIDB4NDAwODAyMjApIFRyYW5zbWl0IG1ldGFkYXRhIHJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX01FVEFfREFUQV8xXzJfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA4MDIyNCkgVHJhbnNtaXQgbWV0YWRhdGEgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENlsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzsgICAgICAgICAvKiE8IChAIDB4NDAwODAyMzApIFRyYW5zbWl0IG1ldGFkYXRhIHJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX01FVEFfREFUQV8xXzNfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA4MDIzNCkgVHJhbnNtaXQgbWV0YWRhdGEgcmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1syXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMF9SRUc7ICAgICAvKiE8IChAIDB4NDAwODAyNDApIFRyYW5zbWl0IHN0YXR1cyByZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFRzsgICAgIC8qITwgKEAgMHg0MDA4MDI0NCkgVHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOFsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMV9SRUc7ICAgICAvKiE8IChAIDB4NDAwODAyNTApIFRyYW5zbWl0IHN0YXR1cyByZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8xX1JFRzsgICAgIC8qITwgKEAgMHg0MDA4MDI1NCkgVHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOVsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMl9SRUc7ICAgICAvKiE8IChAIDB4NDAwODAyNjApIFRyYW5zbWl0IHN0YXR1cyByZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFRzsgICAgIC8qITwgKEAgMHg0MDA4MDI2NCkgVHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTBbMl07CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzNfUkVHOyAgICAgLyohPCAoQCAweDQwMDgwMjcwKSBUcmFuc21pdCBzdGF0dXMgcmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfM19SRUc7ICAgICAvKiE8IChAIDB4NDAwODAyNzQpIFRyYW5zbWl0IHN0YXR1cyByZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDExWzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01FVEFfMF8wX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDI4MCkgUmVjZWl2ZSBtZXRhZGF0YSByZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUVUQV8xXzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMjg0KSBSZWNlaXZlIG1ldGFkYXRhIHJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMlsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9NRVRBXzBfMV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAyOTApIFJlY2VpdmUgbWV0YWRhdGEgcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01FVEFfMV8xX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDI5NCkgUmVjZWl2ZSBtZXRhZGF0YSByZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTNbMl07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUVUQV8wXzJfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMkEwKSBSZWNlaXZlIG1ldGFkYXRhIHJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9NRVRBXzFfMl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAyQTQpIFJlY2VpdmUgbWV0YWRhdGEgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE0WzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01FVEFfMF8zX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDJCMCkgUmVjZWl2ZSBtZXRhZGF0YSByZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUVUQV8xXzNfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMkI0KSBSZWNlaXZlIG1ldGFkYXRhIHJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxNVsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9NRVRBXzBfNF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAyQzApIFJlY2VpdmUgbWV0YWRhdGEgcmVnaXN0ZXIgNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01FVEFfMV80X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDJDNCkgUmVjZWl2ZSBtZXRhZGF0YSByZWdpc3RlciA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTZbMl07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUVUQV8wXzVfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMkQwKSBSZWNlaXZlIG1ldGFkYXRhIHJlZ2lzdGVyIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9NRVRBXzFfNV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAyRDQpIFJlY2VpdmUgbWV0YWRhdGEgcmVnaXN0ZXIgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE3WzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01FVEFfMF82X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDJFMCkgUmVjZWl2ZSBtZXRhZGF0YSByZWdpc3RlciA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUVUQV8xXzZfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMkU0KSBSZWNlaXZlIG1ldGFkYXRhIHJlZ2lzdGVyIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxOFsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9NRVRBXzBfN19SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAyRjApIFJlY2VpdmUgbWV0YWRhdGEgcmVnaXN0ZXIgNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01FVEFfMV83X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDJGNCkgUmVjZWl2ZSBtZXRhZGF0YSByZWdpc3RlciA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTlbODAwMl07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfRklGT18wXzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDg4MDAwKSBBZGRyZXNzIHJlY2VpdmUgZmlmbyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyMFszMV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfRklGT18xXzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDg4MDgwKSBBZGRyZXNzIHRyYW5zbWl0IGZpZm8gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyMVszMV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfRklGT18yXzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDg4MTAwKSBBZGRyZXNzIHRyYW5zbWl0IGZpZm8gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyMlszMV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfRklGT18zXzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDg4MTgwKSBBZGRyZXNzIHRyYW5zbWl0IGZpZm8gMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyM1szMV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfRklGT180XzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDg4MjAwKSBBZGRyZXNzIHRyYW5zbWl0IGZpZm8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyNFszMV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfRklGT181XzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDg4MjgwKSBBZGRyZXNzIHRyYW5zbWl0IGZpZm8gNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyNVszMV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfRklGT182XzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDg4MzAwKSBBZGRyZXNzIHRyYW5zbWl0IGZpZm8gNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyNlszMV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfRklGT183XzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDg4MzgwKSBBZGRyZXNzIHRyYW5zbWl0IGZpZm8gNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyN1s3OTY3XTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SRUxfTkFNRV8wX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwMDApIE5hbWUgb2YgdGhlIHJlbGVhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1JFTF9OQU1FXzFfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDAwNCkgTmFtZSBvZiB0aGUgcmVsZWFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUkVMX05BTUVfMl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDA4KSBOYW1lIG9mIHRoZSByZWxlYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9SRUxfTkFNRV8zX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwMEMpIE5hbWUgb2YgdGhlIHJlbGVhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0JVSUxEVElNRV8wX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDAxMCkgQnVpbGQgdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfQlVJTERUSU1FXzFfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDE0KSBCdWlsZCB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9CVUlMRFRJTUVfMl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwMTgpIEJ1aWxkIHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0JVSUxEVElNRV8zX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDAxQykgQnVpbGQgdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDIwKSBHbG9iYWwgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9HTE9CX0NPTlRST0xfMV9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwMjQpIEdsb2JhbCBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0dMT0JfQ09OVFJPTF8yX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDAyOCkgR2xvYmFsIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfR0xPQl9DT05UUk9MXzNfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDJDKSBHbG9iYWwgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfMF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwMzApIExtYWMgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYUElQRVBST1BERUxBWV9SRUc7ICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDAzNCkgUHJvcCBkZWxheSB0cmFuc21pdCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTUFDQUNLV0FJVERVUkFUSU9OX1JFRzsgICAgICAgLyohPCAoQCAweDQwMDkwMDM4KSBNYXhpbXVtIHRpbWUgdG8gd2FpdCBmb3IgYSBBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9NQUNFTkhBQ0tXQUlURFVSQVRJT05fUkVHOyAgICAvKiE8IChAIDB4NDAwOTAwM0MpIE1heGltdW0gdGltZSB0byB3YWl0IGZvciBhbiBlbmhhbmNlZCBBQ0sgZnJhbWUgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfQ09OVFJPTF8xX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDA0MCkgTG1hYyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19DT05UUk9MXzJfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDQ0KSBMbWFjIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfM19SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwNDgpIExtYWMgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDI4OworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfQ09OVFJPTF9PU19SRUc7ICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDA1MCkgTG1hYyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUc7ICAgICAgLyohPCAoQCAweDQwMDkwMDU0KSBMbWFjIHN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9FVkVOVENVUlJWQUxfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwNTgpIFZhbHVlIG9mIGV2ZW50IGdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RJTUVTVEFNUENVUlJWQUxfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA5MDA1QykgVmFsdWUgb2YgdGltZXN0YW1wIGdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19DT05UUk9MXzRfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDYwKSBMbWFjIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfNV9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwNjQpIExtYWMgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfQ09OVFJPTF82X1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDA2OCkgTG1hYyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19DT05UUk9MXzExX1JFRzsgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDZDKSBMbWFjIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHOyAgICAgICAvKiE8IChAIDB4NDAwOTAwNzApIExtYWMgZGVsdGEgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RJTUVTVEFNUENVUlJQSEFTRVZBTF9SRUc7ICAgIC8qITwgKEAgMHg0MDA5MDA3NCkgVmFsdWUgb2YgdGltZXN0YW1wIGdlbmVyYXRvciBwaGFzZSB3aXRoaW4gYSBzeW1ib2wgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTUFDVFNUWEFDS0RFTEFZVkFMX1JFRzsgICAgICAgLyohPCAoQCAweDQwMDkwMDc4KSBUaW1lIGxlZnQgdW50aWwgbmV4dCBBQ0sgaXMgc2VudCAodXMpICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyOTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUc7ICAgICAgICAvKiE8IChAIDB4NDAwOTAwODApIExtYWMgbWFzayBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDMwWzNdOworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfRVZFTlRfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDA5MCkgTG1hYyBldmVudCByZWdzaXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19NQVNLX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDk0KSBMbWFjIG1hc2sgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzMVsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX01BTlVBTF8xX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwQTApIExtYXggbWFudWFsIFBIWSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfTUFOVUFMX09TX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDBBNCkgT25lIHNob3QgcmVnaXN0ZXIgdHJpZ2dlcnMgdHJhbnNtaXNzaW9uIGluIG1hbnVhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19NQU5VQUxfU1RBVFVTX1JFRzsgICAgICAgLyohPCAoQCAweDQwMDkwMEE4KSBMbWFjIHN0YXR1cyByZWdpc3RlciBpbiBtYW51YWwgbW9kZSAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzMlsyMV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19DT05UUk9MXzdfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTAwKSBMbWFjIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfOF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxMDQpIExtYWMgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfQ09OVFJPTF85X1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDEwOCkgTG1hYyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19DT05UUk9MXzEwX1JFRzsgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTBDKSBMbWFjIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TRUNVUklUWV8wX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxMTApIFNlY3VyaXR5IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NFQ1VSSVRZXzFfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDExNCkgU2VjdXJpdHkgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfU0VDS0VZXzBfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTE4KSBTZWNrZXkgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TRUNLRVlfMV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxMUMpIFNlY2tleSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NFQ0tFWV8yX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDEyMCkgU2VjS2V5IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfU0VDS0VZXzNfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTI0KSBTZWNrZXkgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TRUNOT05DRV8wX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxMjgpIE5vbmNlIHJlZ2lzdGVyIHVzZWQgZm9yIGVuY3J5cHRpb24vZGVjcnlwdGlvbiAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NFQ05PTkNFXzFfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDEyQykgTm9uY2UgcmVnaXN0ZXIgdXNlZCBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfU0VDTk9OQ0VfMl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTMwKSBOb25jZSByZWdpc3RlciB1c2VkIGZvciBlbmNyeXB0aW9uL2RlY3J5cHRpb24gICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TRUNOT05DRV8zX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxMzQpIE5vbmNlIHJlZ2lzdGVyIHVzZWQgZm9yIGVuY3J5cHRpb24vZGVjcnlwdGlvbiAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NFQ1VSSVRZX09TX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDEzOCkgT25lIHNob3QgcmVnaXN0ZXIgdG8gc3RhcnQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMzM7CisgIF9fSU8gdWludDMyX3QgIEZUREZfU0VDVVJJVFlfU1RBVFVTX1JFRzsgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTQwKSBTZWN1cml0eSBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzNFszXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9TRUNVUklUWV9FVkVOVF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxNTApIHNlY3VyaXR5IGV2ZW50IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NFQ1VSSVRZX0VWRU5UTUFTS19SRUc7ICAgICAgIC8qITwgKEAgMHg0MDA5MDE1NCkgc2VjdXJpdHkgZXZlbnQgbWFzayByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMzVbMl07CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFNDSF9DT05UUk9MXzBfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTYwKSBMbWFjIHRzY2ggY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UU0NIX0NPTlRST0xfMV9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxNjQpIExtYWMgdHNjaCBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RTQ0hfQ09OVFJPTF8yX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDE2OCkgTG1hYyB0c2NoIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMzZbNV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc7ICAgICAgICAgLyohPCAoQCAweDQwMDkwMTgwKSBMbWFjIFBIWSBwYXJhbWV0ZXIgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRzsgICAgICAgICAvKiE8IChAIDB4NDAwOTAxODQpIExtYWMgUEhZIHBhcmFtZXRlciByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA5MDE4OCkgTG1hYyBQSFkgcGFyYW1ldGVyIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUc7ICAgICAgICAgLyohPCAoQCAweDQwMDkwMThDKSBMbWFjIFBIWSBwYXJhbWV0ZXIgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzN1syOF07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfQ09OVFJPTF8wX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMjAwKSBSZWNlaXZlIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9FVkVOVF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAyMDQpIFJlY2VpdmUgZXZlbnQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01BU0tfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDIwOCkgUmVjZWl2ZSBldmVudCBtYXNrIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMjBDKSBSZWNlaXZlIHN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TWU1CT0xUSU1FU05BUFNIT1RWQUxfUkVHOyAgICAvKiE8IChAIDB4NDAwOTAyMTApIFZhbHVlIHRpbWVzdGFtcCBnZW5lcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDM4WzNdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX1NUQVRVU19ERUxUQV9SRUc7ICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDIyMCkgUmVjZWl2ZSBzdGF0dXMgZGVsdGEgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfU1RBVFVTX01BU0tfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMjI0KSBSZWNlaXZlIHN0YXR1cyBkZWx0YSBtYXNrIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzOVs2XTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9DT05UUk9MXzBfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAyNDApIFRyYW5zbWl0IGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQwWzNdOworICBfX0lPIHVpbnQzMl90ICBGVERGX0ZUREZfQ0VfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDI1MCkgU2VsZWN0aW9uIHJlZ2lzdGVyIGV2ZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfRlRERl9DTV9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMjU0KSBNYXNrIHNlbGVjdGlvbiByZWdpc3RlciBldmVudHMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0MVs0M107CisgIF9fSU8gdWludDMyX3QgIEZUREZfU1lOQ1RJTUVTVEFNUFRIUl9SRUc7ICAgICAgICAgLyohPCAoQCAweDQwMDkwMzA0KSBUaHJlc2hvbGQgdGltZXN0YW1wIGdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TWU5DVElNRVNUQU1QVkFMX1JFRzsgICAgICAgICAvKiE8IChAIDB4NDAwOTAzMDgpIFZhbHVlIHRpbWVzdGFtcCBnZW5lcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RJTUVSX0NPTlRST0xfMV9SRUc7ICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDMwQykgVGltZXIgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTUFDVFhTVERBQ0tGUk1DTlRfUkVHOyAgICAgICAgLyohPCAoQCAweDQwMDkwMzEwKSBUcmFuc21pdHRlZCBhY2tub3dsZWRnbWVudCBmcmFtZXMgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9NQUNSWFNUREFDS0ZSTU9LQ05UX1JFRzsgICAgICAvKiE8IChAIDB4NDAwOTAzMTQpIFJlY2VpdmVkIGFja25vd2xlZGdtZW50IGZyYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX01BQ1JYQUREUkZBSUxGUk1DTlRfUkVHOyAgICAgIC8qITwgKEAgMHg0MDA5MDMxOCkgRGlzY2FyZGVkIGZyYW1lcyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTUFDUlhVTlNVUEZSTUNOVF9SRUc7ICAgICAgICAgLyohPCAoQCAweDQwMDkwMzFDKSBVbnN1cHBvcnRlZCBmcmFtZXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TWU5DVElNRVNUQU1QUEhBU0VWQUxfUkVHOyAgICAvKiE8IChAIDB4NDAwOTAzMjApIFRpbWVzdGFtcCBwaGFzZSB2YWx1ZSByZWdzaXRlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQyWzddOworICBfX0lPIHVpbnQzMl90ICBGVERGX01BQ0ZDU0VSUk9SQ09VTlRfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA5MDM0MCkgTG1hYyBGQ1MgZXJyb3IgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDNbN107CisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ1JFU0VUX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMzYwKSBMbWF4IHJlc2V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9XQUtFVVBfQ09OVFJPTF9PU19SRUc7ICAgICAgICAvKiE8IChAIDB4NDAwOTAzNjQpIEZUREZfV0FLRVVQX0NPTlRST0xfT1NfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQ0WzZdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1NZTUJPTFRJTUVUSFJfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDM4MCkgU3ltYm9sdGltZSB0aHJlc2hvbGQgcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfU1lNQk9MVElNRTJUSFJfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMzg0KSBTeW1ib2x0aW1lIHRocmVzaG9sZCByZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0NVsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9ERUJVR0NPTlRST0xfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAzOTApIERlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYQllURV9FX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDM5NCkgVHJhbnNtaXQgZmlyc3QgYnl0ZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhCWVRFX01fUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMzk4KSBUcmFuc21pdCBmaXJzdCBieXRlIG1hc2sgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0NlsyNV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfRkxBR19TXzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwNDAwKSBUcmFuc21pdCBwYWNrZXQgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbiByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfRkxBR19DTEVBUl9FXzBfUkVHOyAgICAgICAgLyohPCAoQCAweDQwMDkwNDA0KSBDbGVhciBmbGFnIHJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX0NMRUFSX01fMF9SRUc7ICAgICAgICAvKiE8IChAIDB4NDAwOTA0MDgpIE1hc2sgZmxhZyByZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQ3OworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX1BSSU9SSVRZXzBfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDQxMCkgVHJhbnNtaXQgcHJpb3JpdHkgcmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDhbM107CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfRkxBR19TXzFfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwNDIwKSBUcmFuc21pdCBwYWNrZXQgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbiByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfRkxBR19DTEVBUl9FXzFfUkVHOyAgICAgICAgLyohPCAoQCAweDQwMDkwNDI0KSBDbGVhciBmbGFnIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX0NMRUFSX01fMV9SRUc7ICAgICAgICAvKiE8IChAIDB4NDAwOTA0MjgpIE1hc2sgZmxhZyByZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQ5OworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX1BSSU9SSVRZXzFfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDQzMCkgVHJhbnNtaXQgcHJpb3JpdHkgcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENTBbM107CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfRkxBR19TXzJfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwNDQwKSBUcmFuc21pdCBwYWNrZXQgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbiByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfRkxBR19DTEVBUl9FXzJfUkVHOyAgICAgICAgLyohPCAoQCAweDQwMDkwNDQ0KSBDbGVhciBmbGFnIHJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX0NMRUFSX01fMl9SRUc7ICAgICAgICAvKiE8IChAIDB4NDAwOTA0NDgpIENsZWFyIGZsYWcgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDUxOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX1BSSU9SSVRZXzJfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDQ1MCkgVHJhbnNtaXQgcHJpb3JpdHkgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENTJbM107CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfRkxBR19TXzNfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwNDYwKSBUcmFuc21pdCBwYWNrZXQgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbiByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfRkxBR19DTEVBUl9FXzNfUkVHOyAgICAgICAgLyohPCAoQCAweDQwMDkwNDY0KSBDbGVhciBmbGFnIHJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX0NMRUFSX01fM19SRUc7ICAgICAgICAvKiE8IChAIDB4NDAwOTA0NjgpIENsZWFyIGZsYWcgcmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDUzOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX1BSSU9SSVRZXzNfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDQ3MCkgVHJhbnNtaXQgcHJpb3JpdHkgcmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENTRbM107CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfU0VUX09TX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwNDgwKSBPbmUgc2hvdCByZWdpc3RlciB0byBzZXQgZmxhZyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9DTEVBUl9PU19SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTA0ODQpIE9uZSBzaG90IHJlZ2lzdGVyIHRvIGNsZWFyIGZsYWcgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDU1WzczNF07CisgIF9fSU8gdWludDMyX3QgIEZUREZfV0FLRVVQX0NPTlRST0xfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkxMDAwKSBXYWtldXAgdGltZXIgdmNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1NlsxMDIzXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9MT05HX0FERFJfMF8wX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTIwMDApIEZUREZfTE9OR19BRERSXzBfMF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0xPTkdfQUREUl8xXzBfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MjAwNCkgRlRERl9MT05HX0FERFJfMV8wX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfU0laRV9BTkRfVkFMXzBfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkyMDA4KSBGVERGX1NJWkVfQU5EX1ZBTF8wX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gRlRERl9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICBHUF9USU1FUlMgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgR1BfVElNRVJTIHJlZ2lzdGVycyAoR1BfVElNRVJTKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNDAwKSBHUF9USU1FUlMgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVElNRVIwX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MDApIFRpbWVyMCBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBUSU1FUjBfT05fUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzQwMikgVGltZXIwIG9uIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFRJTUVSMF9SRUxPQURfTV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNDA0KSAxNiBiaXRzIHJlbG9hZCB2YWx1ZSBmb3IgVGltZXIwICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVElNRVIwX1JFTE9BRF9OX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MDYpIDE2IGJpdHMgcmVsb2FkIHZhbHVlIGZvciBUaW1lcjAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQV00yX1NUQVJUX0NZQ0xFOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzQwOCkgRGVmaW5lcyBzdGFydCBDeWNsZSBmb3IgUFdNMiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFBXTTNfU1RBUlRfQ1lDTEU7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNDBBKSBEZWZpbmVzIHN0YXJ0IEN5Y2xlIGZvciBQV00zICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUFdNNF9TVEFSVF9DWUNMRTsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MEMpIERlZmluZXMgc3RhcnQgQ3ljbGUgZm9yIFBXTTQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQV00yX0VORF9DWUNMRTsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzQwRSkgRGVmaW5lcyBlbmQgQ3ljbGUgZm9yIFBXTTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFBXTTNfRU5EX0NZQ0xFOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNDEwKSBEZWZpbmVzIGVuZCBDeWNsZSBmb3IgUFdNMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUFdNNF9FTkRfQ1lDTEU7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MTIpIERlZmluZXMgZW5kIEN5Y2xlIGZvciBQV000ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBUUklQTEVfUFdNX0ZSRVFVRU5DWTsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzQxNCkgRGVmaW5lcyB0aGUgUE1XMiwzLDQgZnJlcXVlbmN5ICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFRSSVBMRV9QV01fQ1RSTF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNDE2KSBQV00gMiAzIDQgQ29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQlJFQVRIX0NGR19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MTgpIEJyZWF0aCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBCUkVBVEhfRFVUWV9NQVhfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzQxQSkgQnJlYXRoIG1heCBkdXR5IGN5Y2xlIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEJSRUFUSF9EVVRZX01JTl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNDFDKSBCcmVhdGggbWluIGR1dHkgY3ljbGUgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQlJFQVRIX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MUUpIEJyZWF0aCBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBHUF9USU1FUlNfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBHUEFEQyAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIEdQQURDIHJlZ2lzdGVycyAoR1BBREMpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE5MDApIEdQQURDIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBHUF9BRENfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTkwMCkgR2VuZXJhbCBQdXJwb3NlIEFEQyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEdQX0FEQ19DVFJMMl9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxOTAyKSBHZW5lcmFsIFB1cnBvc2UgQURDIFNlY29uZCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgR1BfQURDX0NUUkwzX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE5MDQpIEdlbmVyYWwgUHVycG9zZSBBREMgVGhpcmQgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBHUF9BRENfT0ZGUF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTkwNikgR2VuZXJhbCBQdXJwb3NlIEFEQyBQb3NpdGl2ZSBPZmZzZXQgUmVnaXN0ZXIgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEdQX0FEQ19PRkZOX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxOTA4KSBHZW5lcmFsIFB1cnBvc2UgQURDIE5lZ2F0aXZlIE9mZnNldCBSZWdpc3RlciAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgR1BfQURDX0NMRUFSX0lOVF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE5MEEpIEdlbmVyYWwgUHVycG9zZSBBREMgQ2xlYXIgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBHUF9BRENfUkVTVUxUX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTkwQykgR2VuZXJhbCBQdXJwb3NlIEFEQyBSZXN1bHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCit9IEdQQURDX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgR1BJTyAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBHUElPIHJlZ2lzdGVycyAoR1BJTykKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAwMCkgR1BJTyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAwX0RBVEFfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDAwKSBQMCBEYXRhIGlucHV0IC8gb3V0cHV0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDFfREFUQV9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMDIpIFAxIERhdGEgaW5wdXQgLyBvdXRwdXQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMl9EQVRBX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAwNCkgUDIgRGF0YSBpbnB1dCAvIG91dHB1dCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAzX0RBVEFfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDA2KSBQMyBEYXRhIGlucHV0IC8gb3V0cHV0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDRfREFUQV9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMDgpIFA0IERhdGEgaW5wdXQgLyBvdXRwdXQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMF9TRVRfREFUQV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAwQSkgUDAgU2V0IHBvcnQgcGlucyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAxX1NFVF9EQVRBX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDBDKSBQMSBTZXQgcG9ydCBwaW5zIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDJfU0VUX0RBVEFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMEUpIFAyIFNldCBwb3J0IHBpbnMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQM19TRVRfREFUQV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAxMCkgUDMgU2V0IHBvcnQgcGlucyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFA0X1NFVF9EQVRBX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDEyKSBQNCBTZXQgcG9ydCBwaW5zIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDBfUkVTRVRfREFUQV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMTQpIFAwIFJlc2V0IHBvcnQgcGlucyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMV9SRVNFVF9EQVRBX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAxNikgUDEgUmVzZXQgcG9ydCBwaW5zIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAyX1JFU0VUX0RBVEFfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDE4KSBQMiBSZXNldCBwb3J0IHBpbnMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDNfUkVTRVRfREFUQV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMUEpIFAzIFJlc2V0IHBvcnQgcGlucyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQNF9SRVNFVF9EQVRBX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAxQykgUDQgUmVzZXQgcG9ydCBwaW5zIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAwMF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDFFKSBQMDAgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDAxX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMjApIFAwMSBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMDJfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAyMikgUDAyIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAwM19NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDI0KSBQMDMgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDA0X01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMjYpIFAwNCBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMDVfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAyOCkgUDA1IE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAwNl9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDJBKSBQMDYgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDA3X01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMkMpIFAwNyBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMTBfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAyRSkgUDEwIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAxMV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDMwKSBQMTEgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDEyX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMzIpIFAxMiBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMTNfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAzNCkgUDEzIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAxNF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDM2KSBQMTQgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDE1X01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMzgpIFAxNSBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMTZfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAzQSkgUDI0IE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAxN19NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDNDKSBQMjUgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDIwX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwM0UpIFAyMCBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMjFfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA0MCkgUDIxIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAyMl9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDQyKSBQMjIgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDIzX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNDQpIFAyMyBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMjRfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA0NikgUDI0IE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEWzNdOworICBfX0lPIHVpbnQxNl90ICBQMzBfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA0RSkgUDMwIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAzMV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDUwKSBQMzEgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDMyX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNTIpIFAzMiBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMzNfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA1NCkgUDMzIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAzNF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDU2KSBQMzQgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDM1X01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNTgpIFAzNSBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMzZfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA1QSkgUDM2IE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAzN19NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDVDKSBQMzcgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDQwX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNUUpIFA0MCBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQNDFfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA2MCkgUDQxIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFA0Ml9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDYyKSBQNDIgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDQzX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNjQpIFA0MyBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQNDRfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA2NikgUDQ0IE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFA0NV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDY4KSBQNDUgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDQ2X01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNkEpIFA0NiBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQNDdfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA2QykgUDQ3IE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMVs0MV07CisgIF9fSU8gdWludDE2X3QgIFAwX1BBRFBXUl9DVFJMX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMEMwKSBQMCBPdXRwdXQgUG93ZXIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDFfUEFEUFdSX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwQzIpIFAxIE91dHB1dCBQb3dlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMl9QQURQV1JfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzBDNCkgUDIgT3V0cHV0IFBvd2VyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAzX1BBRFBXUl9DVFJMX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMEM2KSBQMyBPdXRwdXQgUG93ZXIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDRfUEFEUFdSX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwQzgpIFA0IE91dHB1dCBQb3dlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDJbM107CisgIF9fSU8gdWludDE2X3QgIEdQSU9fQ0xLX1NFTDsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMEQwKSBTZWxlY3Qgd2hpY2ggY2xvY2sgdG8gbWFwIG9uIHBvcnQgaW4gUFBBICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzWzddOworICBfX0lPIHVpbnQxNl90ICBCSVNUX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzBFMCkgQklTVF9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJBTUJJU1RfU1RBVFVTMV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMEUyKSBSQU1CSVNUX1NUQVRVUzFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkFNQklTVF9TVEFUVVMyX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwRTQpIFJBTUJJU1RfU1RBVFVTMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSQU1CSVNUX1NUQVRVUzNfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzBFNikgUkFNQklTVF9TVEFUVVMzX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJPTUJJU1RfUkVTVUxUTF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMEU4KSBST01CSVNUX1JFU1VMVExfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUk9NQklTVF9SRVNVTFRIX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwRUEpIFJPTUJJU1RfUkVTVUxUSF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQ7CisgIF9fSU8gdWludDE2X3QgIFRFU1RfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMEYwKSBURVNUX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVEVTVF9DVFJMMl9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwRjIpIFRFU1RfQ1RSTDJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBURVNUX0NUUkwzX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzBGNCkgVEVTVF9DVFJMM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFRFU1RfQ1RSTDRfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMEY2KSBURVNUX0NUUkw0X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVEVTVF9DVFJMNV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwRjgpIFRFU1RfQ1RSTDVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBHUElPX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgR1BSRUcgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBHUFJFRyByZWdpc3RlcnMgKEdQUkVHKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMzAwKSBHUFJFRyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU0VUX0ZSRUVaRV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMzMDApIENvbnRyb2xzIGZyZWV6aW5nIG9mIHZhcmlvdXMgdGltZXJzL2NvdW50ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5jbC4gRE1BIGFuZCBVU0IpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkVTRVRfRlJFRVpFX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMzMDIpIENvbnRyb2xzIHVuZnJlZXppbmcgb2YgdmFyaW91cyB0aW1lcnMvY291bnRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmNsLiBETUEgYW5kIFVTQikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBERUJVR19SRUc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzMwNCkgVmFyaW91cyBkZWJ1ZyBpbmZvcm1hdGlvbiByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEdQX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMzA2KSBHZW5lcmFsIHB1cnBvc2Ugc3lzdGVtIHN0YXR1cyByZWdpc3Rlci4gICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgR1BfQ09OVFJPTF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMzMDgpIEdlbmVyYWwgcHVycG9zZSBzeXN0ZW0gY29udHJvbCByZWdpc3Rlci4gICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBFQ0NfQkFTRV9BRERSX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzMwQSkgQmFzZSBhZGRyZXNzIG9mIHRoZSBFQ0MgQ3J5cHRvIG1lbW9yeSByZWdpc3Rlci4gICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIExFRF9DT05UUk9MX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMzBDKSBDb250cm9scyBtdXhpbmcgYW5kIGVuYWJsaW5nIG9mIHRoZSBMRURzLiAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQkxFX0ZJTkVDTlRfU0FNUF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMzMEUpIEJMRSBGSU5FQ05UIHNhbXBsZWQgdmFsdWUgd2hpbGUgaW4gZGVlcCBzbGVlcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFBMTF9TWVNfQ1RSTDFfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMzEwKSBTeXN0ZW0gUExMIGNvbnRyb2wgcmVnaXN0ZXIgMS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUExMX1NZU19DVFJMMl9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMzMTIpIFN5c3RlbSBQTEwgY29udHJvbCByZWdpc3RlciAyLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQTExfU1lTX0NUUkwzX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzMxNCkgU3lzdGVtIFBMTCBjb250cm9sIHJlZ2lzdGVyIDMuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFBMTF9TWVNfU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMzE2KSBTeXN0ZW0gUExMIHN0YXR1cyByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUExMX1NZU19URVNUX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMzMTgpIFN5c3RlbSBQTEwgdGVzdCByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBHUFJFR19UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBJMkMgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgSTJDIHJlZ2lzdGVycyAoSTJDKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDAwKSBJMkMgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSTJDX0NPTl9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0MDApIEkyQyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDsKKyAgX19JTyB1aW50MTZfdCAgSTJDX1RBUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0MDQpIEkyQyBUYXJnZXQgQWRkcmVzcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE7CisgIF9fSU8gdWludDE2X3QgIEkyQ19TQVJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDA4KSBJMkMgU2xhdmUgQWRkcmVzcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyWzNdOworICBfX0lPIHVpbnQxNl90ICBJMkNfREFUQV9DTURfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQxMCkgSTJDIFJ4L1R4IERhdGEgQnVmZmVyIGFuZCBDb21tYW5kIFJlZ2lzdGVyICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzsKKyAgX19JTyB1aW50MTZfdCAgSTJDX1NTX1NDTF9IQ05UX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0MTQpIFN0YW5kYXJkIFNwZWVkIEkyQyBDbG9jayBTQ0wgSGlnaCBDb3VudCBSZWdpc3RlciAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDQ7CisgIF9fSU8gdWludDE2X3QgIEkyQ19TU19TQ0xfTENOVF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDE4KSBTdGFuZGFyZCBTcGVlZCBJMkMgQ2xvY2sgU0NMIExvdyBDb3VudCBSZWdpc3RlciAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ1OworICBfX0lPIHVpbnQxNl90ICBJMkNfRlNfU0NMX0hDTlRfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQxQykgRmFzdCBTcGVlZCBJMkMgQ2xvY2sgU0NMIEhpZ2ggQ291bnQgUmVnaXN0ZXIgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENjsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0ZTX1NDTF9MQ05UX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0MjApIEZhc3QgU3BlZWQgSTJDIENsb2NrIFNDTCBMb3cgQ291bnQgUmVnaXN0ZXIgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDdbNV07CisgIF9fSU8gdWludDE2X3QgIEkyQ19JTlRSX1NUQVRfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDJDKSBJMkMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ4OworICBfX0lPIHVpbnQxNl90ICBJMkNfSU5UUl9NQVNLX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQzMCkgSTJDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEOTsKKyAgX19JTyB1aW50MTZfdCAgSTJDX1JBV19JTlRSX1NUQVRfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0MzQpIEkyQyBSYXcgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDEwOworICBfX0lPIHVpbnQxNl90ICBJMkNfUlhfVExfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQzOCkgSTJDIFJlY2VpdmUgRklGTyBUaHJlc2hvbGQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTE7CisgIF9fSU8gdWludDE2X3QgIEkyQ19UWF9UTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDNDKSBJMkMgVHJhbnNtaXQgRklGTyBUaHJlc2hvbGQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxMjsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0NMUl9JTlRSX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0NDApIENsZWFyIENvbWJpbmVkIGFuZCBJbmRpdmlkdWFsIEludGVycnVwdCBSZWdpc3RlciAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDEzOworICBfX0lPIHVpbnQxNl90ICBJMkNfQ0xSX1JYX1VOREVSX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ0NCkgQ2xlYXIgUlhfVU5ERVIgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTQ7CisgIF9fSU8gdWludDE2X3QgIEkyQ19DTFJfUlhfT1ZFUl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDQ4KSBDbGVhciBSWF9PVkVSIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxNTsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0NMUl9UWF9PVkVSX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0NEMpIENsZWFyIFRYX09WRVIgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE2OworICBfX0lPIHVpbnQxNl90ICBJMkNfQ0xSX1JEX1JFUV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ1MCkgQ2xlYXIgUkRfUkVRIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTc7CisgIF9fSU8gdWludDE2X3QgIEkyQ19DTFJfVFhfQUJSVF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDU0KSBDbGVhciBUWF9BQlJUIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxODsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0NMUl9SWF9ET05FX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0NTgpIENsZWFyIFJYX0RPTkUgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE5OworICBfX0lPIHVpbnQxNl90ICBJMkNfQ0xSX0FDVElWSVRZX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ1QykgQ2xlYXIgQUNUSVZJVFkgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjA7CisgIF9fSU8gdWludDE2X3QgIEkyQ19DTFJfU1RPUF9ERVRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDYwKSBDbGVhciBTVE9QX0RFVCBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyMTsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0NMUl9TVEFSVF9ERVRfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0NjQpIENsZWFyIFNUQVJUX0RFVCBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDIyOworICBfX0lPIHVpbnQxNl90ICBJMkNfQ0xSX0dFTl9DQUxMX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ2OCkgQ2xlYXIgR0VOX0NBTEwgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjM7CisgIF9fSU8gdWludDE2X3QgIEkyQ19FTkFCTEVfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDZDKSBJMkMgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyNDsKKyAgX19JTyB1aW50MTZfdCAgSTJDX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0NzApIEkyQyBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI1OworICBfX0lPIHVpbnQxNl90ICBJMkNfVFhGTFJfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ3NCkgSTJDIFRyYW5zbWl0IEZJRk8gTGV2ZWwgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjY7CisgIF9fSU8gdWludDE2X3QgIEkyQ19SWEZMUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDc4KSBJMkMgUmVjZWl2ZSBGSUZPIExldmVsIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyNzsKKyAgX19JTyB1aW50MTZfdCAgSTJDX1NEQV9IT0xEX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0N0MpIEkyQyBTREEgSG9sZCBUaW1lIExlbmd0aCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI4OworICBfX0lPIHVpbnQxNl90ICBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ4MCkgSTJDIFRyYW5zbWl0IEFib3J0IFNvdXJjZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjlbM107CisgIF9fSU8gdWludDE2X3QgIEkyQ19ETUFfQ1JfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDg4KSBETUEgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzMDsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0RNQV9URExSX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0OEMpIERNQSBUcmFuc21pdCBEYXRhIExldmVsIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDMxOworICBfX0lPIHVpbnQxNl90ICBJMkNfRE1BX1JETFJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ5MCkgSTJDIFJlY2VpdmUgRGF0YSBMZXZlbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzI7CisgIF9fSU8gdWludDE2X3QgIEkyQ19TREFfU0VUVVBfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDk0KSBJMkMgU0RBIFNldHVwIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzMzsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0FDS19HRU5FUkFMX0NBTExfUkVHOyAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0OTgpIEkyQyBBQ0sgR2VuZXJhbCBDYWxsIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM0OworICBfX0lPIHVpbnQxNl90ICBJMkNfRU5BQkxFX1NUQVRVU19SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ5QykgSTJDIEVuYWJsZSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzU7CisgIF9fSU8gdWludDE2X3QgIEkyQ19JQ19GU19TUEtMRU5fUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNEEwKSBJMkMgU1MgYW5kIEZTIHNwaWtlIHN1cHByZXNzaW9uIGxpbWl0IFNpemUgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzNls0MV07CisgIF9fSU8gdWludDE2X3QgIEkyQ19DT01QX1BBUkFNMV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNEY0KSBDb21wb25lbnQgUGFyYW1ldGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSTJDX0NPTVBfUEFSQU0yX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0RjYpIENvbXBvbmVudCBQYXJhbWV0ZXIgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJMkNfQ09NUF9WRVJTSU9OX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTRGOCkgSTJDIENvbXBvbmVudCBWZXJzaW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEkyQ19DT01QMl9WRVJTSU9OOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNEZBKSBJMkMgQ29tcG9uZW50MiBWZXJzaW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSTJDX0NPTVBfVFlQRV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0RkMpIEkyQyBDb21wb25lbnQgVHlwZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJMkNfQ09NUF9UWVBFMl9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTRGRSkgSTJDIENvbXBvbmVudDIgVHlwZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IEkyQ19UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIEkyQzIgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgSTJDMiByZWdpc3RlcnMgKEkyQzIpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1MDApIEkyQzIgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NPTl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTUwMCkgSTJDIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEOworICBfX0lPIHVpbnQxNl90ICBJMkMyX1RBUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTUwNCkgSTJDIFRhcmdldCBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9TQVJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1MDgpIEkyQyBTbGF2ZSBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDJbM107CisgIF9fSU8gdWludDE2X3QgIEkyQzJfREFUQV9DTURfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTEwKSBJMkMgUngvVHggRGF0YSBCdWZmZXIgYW5kIENvbW1hbmQgUmVnaXN0ZXIgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzOworICBfX0lPIHVpbnQxNl90ICBJMkMyX1NTX1NDTF9IQ05UX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTUxNCkgU3RhbmRhcmQgU3BlZWQgSTJDIENsb2NrIFNDTCBIaWdoIENvdW50IFJlZ2lzdGVyICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENDsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9TU19TQ0xfTENOVF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1MTgpIFN0YW5kYXJkIFNwZWVkIEkyQyBDbG9jayBTQ0wgTG93IENvdW50IFJlZ2lzdGVyICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDU7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfRlNfU0NMX0hDTlRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTFDKSBGYXN0IFNwZWVkIEkyQyBDbG9jayBTQ0wgSGlnaCBDb3VudCBSZWdpc3RlciAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ2OworICBfX0lPIHVpbnQxNl90ICBJMkMyX0ZTX1NDTF9MQ05UX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTUyMCkgRmFzdCBTcGVlZCBJMkMgQ2xvY2sgU0NMIExvdyBDb3VudCBSZWdpc3RlciAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEN1s1XTsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9JTlRSX1NUQVRfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1MkMpIEkyQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDg7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfSU5UUl9NQVNLX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTMwKSBJMkMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ5OworICBfX0lPIHVpbnQxNl90ICBJMkMyX1JBV19JTlRSX1NUQVRfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTUzNCkgSTJDIFJhdyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTA7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfUlhfVExfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTM4KSBJMkMgUmVjZWl2ZSBGSUZPIFRocmVzaG9sZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxMTsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9UWF9UTF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1M0MpIEkyQyBUcmFuc21pdCBGSUZPIFRocmVzaG9sZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDEyOworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NMUl9JTlRSX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU0MCkgQ2xlYXIgQ29tYmluZWQgYW5kIEluZGl2aWR1YWwgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTM7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ0xSX1JYX1VOREVSX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTQ0KSBDbGVhciBSWF9VTkRFUiBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxNDsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9DTFJfUlhfT1ZFUl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1NDgpIENsZWFyIFJYX09WRVIgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE1OworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NMUl9UWF9PVkVSX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU0QykgQ2xlYXIgVFhfT1ZFUiBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTY7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ0xSX1JEX1JFUV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTUwKSBDbGVhciBSRF9SRVEgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxNzsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9DTFJfVFhfQUJSVF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1NTQpIENsZWFyIFRYX0FCUlQgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE4OworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NMUl9SWF9ET05FX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU1OCkgQ2xlYXIgUlhfRE9ORSBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTk7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ0xSX0FDVElWSVRZX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTVDKSBDbGVhciBBQ1RJVklUWSBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyMDsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9DTFJfU1RPUF9ERVRfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1NjApIENsZWFyIFNUT1BfREVUIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDIxOworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NMUl9TVEFSVF9ERVRfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU2NCkgQ2xlYXIgU1RBUlRfREVUIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjI7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ0xSX0dFTl9DQUxMX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTY4KSBDbGVhciBHRU5fQ0FMTCBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyMzsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9FTkFCTEVfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1NkMpIEkyQyBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI0OworICBfX0lPIHVpbnQxNl90ICBJMkMyX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU3MCkgSTJDIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjU7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfVFhGTFJfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTc0KSBJMkMgVHJhbnNtaXQgRklGTyBMZXZlbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyNjsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9SWEZMUl9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1NzgpIEkyQyBSZWNlaXZlIEZJRk8gTGV2ZWwgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI3OworICBfX0lPIHVpbnQxNl90ICBJMkMyX1NEQV9IT0xEX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU3QykgSTJDIFNEQSBIb2xkIFRpbWUgTGVuZ3RoIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjg7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTgwKSBJMkMgVHJhbnNtaXQgQWJvcnQgU291cmNlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyOVszXTsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9ETUFfQ1JfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1ODgpIERNQSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDMwOworICBfX0lPIHVpbnQxNl90ICBJMkMyX0RNQV9URExSX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU4QykgRE1BIFRyYW5zbWl0IERhdGEgTGV2ZWwgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzE7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfRE1BX1JETFJfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTkwKSBJMkMgUmVjZWl2ZSBEYXRhIExldmVsIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzMjsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9TREFfU0VUVVBfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1OTQpIEkyQyBTREEgU2V0dXAgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDMzOworICBfX0lPIHVpbnQxNl90ICBJMkMyX0FDS19HRU5FUkFMX0NBTExfUkVHOyAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU5OCkgSTJDIEFDSyBHZW5lcmFsIENhbGwgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzQ7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfRU5BQkxFX1NUQVRVU19SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTlDKSBJMkMgRW5hYmxlIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzNTsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9JQ19GU19TUEtMRU5fUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1QTApIEkyQyBTUyBhbmQgRlMgc3Bpa2Ugc3VwcHJlc3Npb24gbGltaXQgU2l6ZSAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM2WzQxXTsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9DT01QX1BBUkFNMV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1RjQpIENvbXBvbmVudCBQYXJhbWV0ZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NPTVBfUEFSQU0yX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTVGNikgQ29tcG9uZW50IFBhcmFtZXRlciBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ09NUF9WRVJTSU9OX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNUY4KSBJMkMgQ29tcG9uZW50IFZlcnNpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSTJDMl9DT01QMl9WRVJTSU9OOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1RkEpIEkyQyBDb21wb25lbnQyIFZlcnNpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NPTVBfVFlQRV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTVGQykgSTJDIENvbXBvbmVudCBUeXBlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ09NUF9UWVBFMl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNUZFKSBJMkMgQ29tcG9uZW50MiBUeXBlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gSTJDMl9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBJUiAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgSVIgcmVnaXN0ZXJzIChJUikKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTcwMCkgSVIgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIElSX0ZSRVFfQ0FSUklFUl9PTl9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNzAwKSBEZWZpbmVzIHRoZSBjYXJyaWVyIHNpZ25hbCBoaWdoIGR1cmF0aW9uICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSVJfRlJFUV9DQVJSSUVSX09GRl9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE3MDIpIERlZm5lcyB0aGUgY2FycmllciBzaWduYWwgbG93IGR1cmF0aW9uICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJUl9MT0dJQ19PTkVfVElNRV9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTcwNCkgRGVmaW5lcyB0aGUgbG9naWMgb25lIHdhdmVmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIElSX0xPR0lDX1pFUk9fVElNRV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNzA2KSBEZWZpbmVzIHRoZSBsb2dpYyB6ZXJvIHdhdmVmcm9tICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSVJfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE3MDgpIElSIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJUl9TVEFUVVNfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTcwQSkgSVIgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIElSX1JFUEVBVF9USU1FX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNzBDKSBEZWZpbmVzIHRoZSByZXBlYXQgdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSVJfTUFJTl9GSUZPX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE3MEUpIE1haW4gZmlmbyB3cml0ZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJUl9SRVBFQVRfRklGT19SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTcxMCkgUmVwZWF0IGZpZm8gd3JpdGUgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIElSX0lSUV9TVEFUVVNfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNzEyKSBJUiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gSVJfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgIEtCU0NBTiAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIEtCU0NBTiByZWdpc3RlcnMgKEtCU0NBTikKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYwMCkgS0JTQ0FOIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjAwKSBLZXlib2FyZCBzY2FubmVyIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fQ1RSTDJfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MDIpIEtleWJvYXJkIHNjYW5uZXIgY29udHJvbCAyIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9NQVRSSVhfU0laRV9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYwNCkgRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fREVCT1VOQ0VfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MDYpIERlZmluZXMgdGhlIGRlYm91bmNlIHRpbWUgZm9yIGtleSBwcmVzcyBhbmQgcmVsZWFzZSAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9TVEFUVVNfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYwOCkga2V5Ym9hcmQgc2Nhbm5lciBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX01FU1NBR0VfS0VZX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjBBKSBSZXR1cm5zIGEga2V5IG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBxdWV1ZSAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDAwX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MEMpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAwMCAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMDFfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYwRSkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDAxICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AwMl9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjEwKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMDIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDAzX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MTIpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAwMyAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMDRfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYxNCkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDA0ICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AwNV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjE2KSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMDUgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDA2X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MTgpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAwNiAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMDdfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYxQSkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDA3ICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AxMF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjFDKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMTAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDExX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MUUpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAxMSAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMTJfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYyMCkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDEyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AxM19NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjIyKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMTMgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDE0X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MjQpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAxNCAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMTVfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYyNikgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDE1ICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AxNl9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjI4KSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMTYgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDE3X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MkEpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAxNyAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMjBfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYyQykgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDIwICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AyMV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjJFKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMjEgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDIyX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MzApIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAyMiAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMjNfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYzMikgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDIzICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AyNF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjM0KSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMjQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRURbM107CisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AzMF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjNDKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMzAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDMxX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2M0UpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAzMSAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMzJfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTY0MCkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDMyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AzM19NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjQyKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMzMgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDM0X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2NDQpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAzNCAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMzVfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTY0NikgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDM1ICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AzNl9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjQ4KSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMzYgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDM3X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2NEEpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAzNyAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QNDBfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTY0QykgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDQwICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1A0MV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjRFKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQNDEgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDQyX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2NTApIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFA0MiAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QNDNfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTY1MikgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDQzICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1A0NF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjU0KSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQNDQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDQ1X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2NTYpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFA0NSAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QNDZfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTY1OCkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDQ2ICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1A0N19NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjVBKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQNDcgICAgICAgICAgICAgICAgICAgICAgKi8KK30gS0JTQ0FOX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgT1RQQyAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBPVFBDIHJlZ2lzdGVycyAoT1RQQykKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwN0Y0MDAwMCkgT1RQQyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIE9UUENfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDA3RjQwMDAwKSBNb2RlIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgT1RQQ19QQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4MDdGNDAwMDQpIEJpdC1wcm9ncmFtbWluZyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBPVFBDX1NUQVRfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwN0Y0MDAwOCkgU3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIE9UUENfQUhCQURSX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDA3RjQwMDBDKSBBSEIgbWFzdGVyIHN0YXJ0IGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgT1RQQ19DRUxBRFJfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4MDdGNDAwMTApIE1hY3JvY2VsbCBzdGFydCBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBPVFBDX05XT1JEU19SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwN0Y0MDAxNCkgTnVtYmVyIG9mIHdvcmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIE9UUENfRkZQUlRfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDA3RjQwMDE4KSBQb3J0cyBhY2Nlc3MgdG8gZmlmbyBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgT1RQQ19GRlJEX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4MDdGNDAwMUMpIFRoZSBkYXRhIHdoaWNoIGhhdmUgdGFrZW4gd2l0aCB0aGUgbGF0ZXN0IHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIE9UUENfRkZQUlRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBPVFBDX1BXT1JETF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwN0Y0MDAyMCkgVGhlIDMyIGxvd2VyIGJpdHMgb2YgdGhlIDY0LWJpdCB3b3JkIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcHJvZ3JhbW1lZCwgd2hlbiB0aGUgTVBST0cgbW9kZSBpcyB1c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIE9UUENfUFdPUkRIX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDA3RjQwMDI0KSBUaGUgMzIgaGlnaGVyIGJpdHMgb2YgdGhlIDY0LWJpdCB3b3JkIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcHJvZ3JhbW1lZCwgd2hlbiB0aGUgTVBST0cgbW9kZSBpcyB1c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIE9UUENfVElNMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDA3RjQwMDI4KSBWYXJpb3VzIHRpbWluZyBwYXJhbWV0ZXJzIG9mIHRoZSBPVFAgY2VsbC4gICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgT1RQQ19USU0yX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4MDdGNDAwMkMpIFZhcmlvdXMgdGltaW5nIHBhcmFtZXRlcnMgb2YgdGhlIE9UUCBjZWxsLiAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBPVFBDX1RFU1RfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwN0Y0MDAzMCkgT1RQQ19URVNUX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IE9UUENfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBQQVRDSCAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIFBBVENIIHJlZ2lzdGVycyAoUEFUQ0gpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwMDApIFBBVENIIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9WQUxJRF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDAwMCkgVmFsaWRpdHkgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX1ZBTElEX1NFVF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDA0KSBWYWxpZGl0eSBTZXQgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfVkFMSURfUkVTRVRfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwMDgpIFZhbGlkaXR5IFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRFs1XTsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjBfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwMjApIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIxX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDI4KSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyOworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDAzMCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMzsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjNfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwMzgpIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQ7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFI0X1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDQwKSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1OworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSNV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDA0OCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENjsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjZfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwNTApIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDc7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFI3X1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDU4KSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ4OworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSOF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDA2MCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOTsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjlfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwNjgpIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEwOworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMTBfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDA3MCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTE7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIxMV9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDc4KSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMjsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjEyX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwODApIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEzOworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMTNfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDA4OCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTQ7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIxNF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDkwKSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxNTsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjE1X1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwOTgpIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE2OworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMTZfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBBMCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTc7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIxN19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEE4KSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxODsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjE4X1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwQjApIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE5OworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMTlfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBCOCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMjA7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIyMF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEMwKSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfREFUQTIwX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwQzQpIFBhdGNoIERhdGEgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMjFfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBDOCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX0RBVEEyMV9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMENDKSBQYXRjaCBEYXRhIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjIyX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwRDApIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9EQVRBMjJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBENCkgUGF0Y2ggRGF0YSBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIyM19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEQ4KSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfREFUQTIzX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwREMpIFBhdGNoIERhdGEgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMjRfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBFMCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX0RBVEEyNF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEU0KSBQYXRjaCBEYXRhIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjI1X1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwRTgpIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9EQVRBMjVfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBFQykgUGF0Y2ggRGF0YSBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIyNl9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEYwKSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfREFUQTI2X1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwRjQpIFBhdGNoIERhdGEgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMjdfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBGOCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX0RBVEEyN19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEZDKSBQYXRjaCBEYXRhIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gUEFUQ0hfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgIFBMTERJRyAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIFBMTERJRyByZWdpc3RlcnMgKFBMTERJRykKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQwMCkgUExMRElHIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1NZTlRIX0NUUkwxX0JMRV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDAwKSBSRl9TWU5USF9DVFJMMV9CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMDIpIFJGX1NZTlRIX0NUUkwxX0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQwNCkgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1NZTlRIX0NUUkwyX0ZUREZfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDA2KSBSRl9TWU5USF9DVFJMMl9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfU1lOVEhfQ1RSTDNfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMDgpIFJGX1NZTlRIX0NUUkwzX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9WQ09DQUxfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQwQSkgUkZfVkNPQ0FMX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01HQUlOX0NUUkxfQkxFX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDBDKSBSRl9NR0FJTl9DVFJMX0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTUdBSU5fQ1RSTF9GVERGX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMEUpIFJGX01HQUlOX0NUUkxfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NR0FJTl9DVFJMMl9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQxMCkgUkZfTUdBSU5fQ1RSTDJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1ZDT19DQUxDQVBfQklUMTRfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDEyKSBSRl9WQ09fQ0FMQ0FQX0JJVDE0X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfVkNPX0NBTENBUF9CSVQxNV9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMTQpIFJGX1ZDT19DQUxDQVBfQklUMTVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9CTUNXX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQxNikgUkZfQk1DV19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0tNT0RfQUxQSEFfQkxFX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDE4KSBSRl9LTU9EX0FMUEhBX0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfS01PRF9BTFBIQV9GVERGX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMUEpIFJGX0tNT0RfQUxQSEFfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDsKKyAgX19JTyB1aW50MTZfdCAgUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMUUpIE11c3QgYmUgUmV0YWluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9TWU5USF9SRVNVTFRfRlRERl9SRUc7ICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQyMCkgTXVzdCBiZSBSZXRhaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1NZTlRIX1JFU1VMVDJfQkxFX1JFRzsgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDIyKSBNdXN0IGJlIFJldGFpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfU1lOVEhfUkVTVUxUMl9GVERGX1JFRzsgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMjQpIE11c3QgYmUgUmV0YWluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9TWU5USF9SRVNVTFQzX0ZUREZfUkVHOyAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQyNikgUkZfU1lOVEhfUkVTVUxUM19GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NBTENBUDFfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDI4KSBSRl9DQUxDQVAxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ0FMQ0FQMl9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMkEpIFJGX0NBTENBUDJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9OTURfT0ZGU0VUX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQyQykgT2Zmc2V0IHZhbHVlcyBmb3IgcGhhc2UgYWxpZ25tZW50IGFmdGVyIFZDTyBjYWxpYnJhdGlvbi4gKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxOworICBfX0lPIHVpbnQxNl90ICBSRl9GVERGX1BIWUFUVFJfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQzMCkgUkZfRlRERl9QSFlBVFRSX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NBTFRSSU1fU1RFUDFfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDMyKSBSRl9DQUxUUklNX1NURVAxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ0FMVFJJTV9TVEVQMl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMzQpIFJGX0NBTFRSSU1fU1RFUDJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DQUxUUklNX1NURVAzX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQzNikgUkZfQ0FMVFJJTV9TVEVQM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NBTFRSSU1fU1RFUDRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDM4KSBSRl9DQUxUUklNX1NURVA0X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTUdBSU5fQ1RSTDNfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEM0EpIFJGX01HQUlOX0NUUkwzX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9WQ09fRlJFUV9FU1RfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQzQykgUkZfVkNPX0ZSRVFfRVNUX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjsKKyAgX19JTyB1aW50MTZfdCAgUkZfU1lOVEhfU1BBUkVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENDApIE1TSyBtb2R1bGF0b3IgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NU0tNT0RfQ1RSTDFfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ0MikgTVNLIG1vZHVsYXRvciBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01TS01PRF9DSElQTF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDQ0KSBNU0sgbW9kdWxhdG9yIENISVAgY29udHJvbCBsb3dlciAxNiBiaXQgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTVNLTU9EX0NISVBIX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENDYpIE1TSyBtb2R1bGF0b3IgQ0hJUCBjb250cm9sIHVwcGVyIDE2IGJpdCAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9UWERBQ19URVNUX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ0OCkgUmVnaXN0ZXIgdG8gcHJvdmlkZSB2YWx1ZSB0byBUWERBQyAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEM1szXTsKKyAgX19JTyB1aW50MTZfdCAgUkZfTUdBSU5fQ09NUF9WQUwwX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENTApIFJGX01HQUlOX0NPTVBfVkFMMF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NR0FJTl9DT01QX1ZBTDFfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ1MikgUkZfTUdBSU5fQ09NUF9WQUwxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01HQUlOX0NPTVBfVkFMMl9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDU0KSBSRl9NR0FJTl9DT01QX1ZBTDJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTUdBSU5fQ09NUF9WQUwzX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENTYpIFJGX01HQUlOX0NPTVBfVkFMM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NR0FJTl9DT01QX1ZBTDRfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ1OCkgUkZfTUdBSU5fQ09NUF9WQUw0X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01HQUlOX0NPTVBfVkFMNV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDVBKSBSRl9NR0FJTl9DT01QX1ZBTDVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTUdBSU5fQ09NUF9WQUw2X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENUMpIFJGX01HQUlOX0NPTVBfVkFMNl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NR0FJTl9DT01QX1ZBTDdfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ1RSkgUkZfTUdBSU5fQ09NUF9WQUw3X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1BVTFNFX1RCTF8wX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDYwKSBSRl9QVUxTRV9UQkxfMF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUFVMU0VfVEJMXzFfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENjIpIFJGX1BVTFNFX1RCTF8xX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9QVUxTRV9UQkxfMl9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ2NCkgUkZfUFVMU0VfVEJMXzJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1BVTFNFX1RCTF8zX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDY2KSBSRl9QVUxTRV9UQkxfM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUFVMU0VfVEJMXzRfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENjgpIFJGX1BVTFNFX1RCTF80X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9QVUxTRV9UQkxfNV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ2QSkgUkZfUFVMU0VfVEJMXzVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1BVTFNFX1RCTF82X1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDZDKSBSRl9QVUxTRV9UQkxfNl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUFVMU0VfVEJMXzdfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENkUpIFJGX1BVTFNFX1RCTF83X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9QVUxTRV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ3MCkgUkZfUFVMU0VfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IFBMTERJR19UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFFTUElDICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgUVNQSUMgcmVnaXN0ZXJzIChRU1BJQykKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDAwMCkgUVNQSUMgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFFTUElDX0NUUkxCVVNfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDAwKSBTUEkgQnVzIGNvbnRyb2wgcmVnaXN0ZXIgZm9yIHRoZSBNYW51YWwgbW9kZSAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfQ1RSTE1PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwMDQpIE1vZGUgQ29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBRU1BJQ19SRUNWREFUQV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDAwOCkgUmVjZWl2ZWQgZGF0YSBmb3IgdGhlIE1hbnVhbCBtb2RlICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFFTUElDX0JVUlNUQ01EQV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDBDKSBUaGUgd2F5IG9mIHJlYWRpbmcgaW4gQXV0byBtb2RlIChjb21tYW5kIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfQlVSU1RDTURCX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwMTApIFRoZSB3YXkgb2YgcmVhZGluZyBpbiBBdXRvIG1vZGUgKGNvbW1hbmQgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBRU1BJQ19TVEFUVVNfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDAxNCkgVGhlIHN0YXR1cyByZWdpc3RlciBvZiB0aGUgUVNQSSBjb250cm9sbGVyICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFFTUElDX1dSSVRFREFUQV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDE4KSBXcml0ZSBkYXRhIHRvIFNQSSBCdXMgZm9yIHRoZSBNYW51YWwgbW9kZSAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfUkVBRERBVEFfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwMUMpIFJlYWQgZGF0YSBmcm9tIFNQSSBCdXMgZm9yIHRoZSBNYW51YWwgbW9kZSAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBRU1BJQ19EVU1NWURBVEFfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDAyMCkgU2VuZCBkdW1teSBjbG9ja3MgdG8gU1BJIEJ1cyBmb3IgdGhlIE1hbnVhbCBtb2RlICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFFTUElDX0VSQVNFQ1RSTF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDI0KSBRU1BJIEVyYXNlIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfRVJBU0VDTURBX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwMjgpIFRoZSB3YXkgb2YgZXJhc2luZyBpbiBBdXRvIG1vZGUgKGNvbW1hbmQgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBRU1BJQ19FUkFTRUNNREJfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDAyQykgVGhlIHdheSBvZiBlcmFzaW5nIGluIEF1dG8gbW9kZSAoY29tbWFuZCByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFFTUElDX0JVUlNUQlJLX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDMwKSBSZWFkIGJyZWFrIHNlcXVlbmNlIGluIEF1dG8gbW9kZSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfU1RBVFVTQ01EX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwMzQpIFRoZSB3YXkgb2YgcmVhZGluZyB0aGUgc3RhdHVzIG9mIGV4dGVybmFsIGRldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQXV0byBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFFTUElDX0NIQ0tFUkFTRV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDM4KSBDaGVjayBlcmFzZSBwcm9ncmVzcyBpbiBBdXRvIG1vZGUgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfR1BfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwM0MpIFFTUEkgR2VuZXJhbCBQdXJwb3NlIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBRU1BJQ19VQ09ERV9TVEFSVDsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDA0MCkgUVNQSUMgdUNvZGUgbWVtb3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IFFTUElDX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgUVVBRCAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBRVUFEIHJlZ2lzdGVycyAoUVVBRCkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUEwMCkgUVVBRCBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFFERUNfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQTAwKSBRdWFkIGRlY29kZXIgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUURFQ19YQ05UX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFBMDIpIENvdW50ZXIgdmFsdWUgb2YgdGhlIFggQXhpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBRREVDX1lDTlRfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUEwNCkgQ291bnRlciB2YWx1ZSBvZiB0aGUgWSBBeGlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFFERUNfWkNOVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQTA2KSBDb3VudGVyIHZhbHVlIG9mIHRoZSBaIEF4aXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUURFQ19DTE9DS0RJVl9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFBMDgpIFF1YWQgZGVjb2RlciBjbG9jayBkaXZpZGVyIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworfSBRVUFEX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgUkZDVSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBSRkNVIHJlZ2lzdGVycyAoUkZDVSkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjAwMCkgUkZDVSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEWzRdOworICBfX0lPIHVpbnQxNl90ICBSRl9PVkVSUlVMRV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjAxMCkgUkZfT1ZFUlJVTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0RJQUdJUlEwMV9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDEyKSBCTEUvUkYgRGlhZ25vc3RpYyBJUlEgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRElBR0lSUTIzX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwMTQpIEJMRS9SRiBEaWFnbm9zdGljIElSUSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9ESUFHSVJRX1NUQVRfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjAxNikgQkxFL1JGIERpYWdub3N0aWMgSVJRIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FHQ19FWFQxX0xVVF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDE4KSBSRl9BR0NfRVhUMV9MVVRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxWzNdOworICBfX0lPIHVpbnQxNl90ICBSRl9DQUxTVEFURV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjAyMCkgUkZfQ0FMU1RBVEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMlsxNV07CisgIF9fSU8gdWludDE2X3QgIFJGX1NDQU5fRkVFREJBQ0tfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDQwKSBSRl9TQ0FOX0ZFRURCQUNLX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUkVGX09TQ19CTEVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwNDIpIFJGX1JFRl9PU0NfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9SRUZfT1NDX0ZUREZfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA0NCkgUkZfUkVGX09TQ19GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEM1s1XTsKKyAgX19JTyB1aW50MTZfdCAgUkZfQ0FMX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwNTApIFJGX0NBTF9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDQ7CisgIF9fSU8gdWludDE2X3QgIFJGX0lSUV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDU0KSBSRl9JUlFfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ1OworICBfX0lPIHVpbnQxNl90ICBSRl9BRENJX0RDX09GRlNFVF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA1OCkgTXVzdCBiZSBSZXRhaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FEQ1FfRENfT0ZGU0VUX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDVBKSBNdXN0IGJlIFJldGFpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzldOworICBfX0lPIHVpbnQxNl90ICBSRl9TUEFSRTFfQkxFX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA4MCkgUkZfU1BBUkUxX0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1NQQVJFMV9GVERGX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDgyKSBSRl9TUEFSRTFfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQklBU19DVFJMMV9CTEVfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwODQpIFJGX0JJQVNfQ1RSTDFfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9CSUFTX0NUUkwxX0ZUREZfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA4NikgUkZfQklBU19DVFJMMV9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0lGRl9DVFJMMV9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDg4KSBSRl9JRkZfQ1RSTDFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQURDX0NUUkwxX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwOEEpIFJGX0FEQ19DVFJMMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9BRENfQ1RSTDJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA4QykgUkZfQURDX0NUUkwyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FEQ19DVFJMM19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDhFKSBSRl9BRENfQ1RSTDNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUEFfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwOTApIFJlbW92ZWQgb2Jzb2xldGUgdmFsdWVzIG9mIGJpdHMgMTA6NywgcGFfcHcgYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01HQ19DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDkyKSBSRl9NR0NfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfVkNPVkFSX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwOTQpIFJGX1ZDT1ZBUl9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9QRkRfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA5NikgUkZfUEZEX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NQX0NUUkxfQkxFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDk4KSBSRl9DUF9DVFJMX0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ1BfQ1RSTF9GVERGX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwOUEpIFJGX0NQX0NUUkxfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9MRl9SRVNfQ1RSTF9CTEVfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA5QykgTEYgcmVzaXN0b3Igc2V0dGluZyBpbiBCTEUgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0xGX1JFU19DVFJMX0ZUREZfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDlFKSBMRiByZXNpc3RvciBzZXR0aW5nIGluIEZUREYgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTUlYRVJfQ1RSTDFfQkxFX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQTApIFJGX01JWEVSX0NUUkwxX0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NSVhFUl9DVFJMMV9GVERGX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBBMikgUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01JWEVSX0NUUkwyX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEE0KSBSRl9NSVhFUl9DVFJMMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTEZfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQTYpIFJGX0xGX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9URENfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBBOCkgVERDIHNldHRpbmdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0lPX0NUUkwxX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEFBKSBSRl9JT19DVFJMMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTE5BX0NUUkwxX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQUMpIFJGX0xOQV9DVFJMMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9MTkFfQ1RSTDJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBBRSkgUkZfTE5BX0NUUkwyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0xOQV9DVFJMM19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEIwKSBSRl9MTkFfQ1RSTDNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfVkNPX0FNUF9DVFJMMV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQjIpIFJGX1ZDT19BTVBfQ1RSTDFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9WQ09fQU1QX0NUUkwyX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBCNCkgUkZfVkNPX0FNUF9DVFJMMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEN1s1XTsKKyAgX19JTyB1aW50MTZfdCAgUkZfVFhfUFdSX0JMRV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQzApIFRYIFBvd2VyIHNldHRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9UWF9QV1JfTFVUXzFfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBDMikgVFggUG93ZXIgc2V0dGluZyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1RYX1BXUl9MVVRfMl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEM0KSBUWCBQb3dlciBzZXR0aW5nIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfVFhfUFdSX0xVVF8zX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQzYpIFRYIFBvd2VyIHNldHRpbmcgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9UWF9QV1JfTFVUXzRfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBDOCkgVFggUG93ZXIgc2V0dGluZyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1RYX1BXUl9MVVRfNV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMENBKSBUWCBQb3dlciBzZXR0aW5nIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfVFhfUFdSX0xVVF82X1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQ0MpIFRYIFBvd2VyIHNldHRpbmcgNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9UWF9QV1JfTFVUXzdfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBDRSkgVFggUG93ZXIgc2V0dGluZyA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1RYX1BXUl9GVERGX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEQwKSBUWCBQb3dlciBzZXR0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfVFhfUFdSX0xVVF9SRF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwRDIpIFRYIFBvd2VyIHJlYWQgYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9ESVZfSVFfUlhfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBENCkgQmlhcyB0cmltbWluZyBvZiBJUSBkaXZpZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0RJVl9JUV9UWF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEQ2KSBCaWFzIHRyaW1taW5nIG9mIElRIGRpdmlkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTE9fSVFfVFJJTV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwRDgpIFRyaW0gc2V0dGluZ3MgZm9yIElRIExPIHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9UWERBQ19DVFJMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBEQSkgQ29udHJvbCBzZXR0aW5ncyBmb3IgdGhlIFRYREFDICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1RYREFDX0NBTF9DQVBfU1RBVF9SRUc7ICAgICAgICAgLyohPCAoQCAweDUwMDAyMERDKSBDdXJyZW50IENBTCBDQVAgdmFsdWUgZm9yIFRYREFDICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ4OworICBfX0lPIHVpbnQxNl90ICBSRl9JRkZfUkVTVUxUX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBFMCkgTm90IHJldGFpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0lGRl9DQ19CTEVfU0VUMV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEUyKSBNdXN0IGJlIHJldGFpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfSUZGX0NDX0JMRV9TRVQyX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwRTQpIE11c3QgYmUgcmV0YWluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9JRkZfQ0NfRlRERl9TRVQxX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBFNikgTXVzdCBiZSByZXRhaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0lGRl9DQ19GVERGX1NFVDJfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEU4KSBNdXN0IGJlIHJldGFpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfSUZGX0NBTF9DQVBfU1RBVF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwRUEpIEN1cnJlbnQgQ0FMX0NBUCB2YWx1ZSBhcHBsaWVkIHRvIElGICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NSVhfQ0FMX0NBUF9TVEFUX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBFQykgQ3VycmVudCBDQUxfQ0FQIHZhbHVlIGFwcGxpZWQgdG8gSUYgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0xGX0NBTF9DQVBfU1RBVF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEVFKSBDdXJyZW50IENBTF9DQVAgdmFsdWUgYXBwbGllZCB0byBJRiAgICAgICAgICAgICAgICAgICAgKi8KK30gUkZDVV9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgIFJGQ1VfUE9XRVIgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgUkZDVV9QT1dFUiByZWdpc3RlcnMgKFJGQ1VfUE9XRVIpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMDApIFJGQ1VfUE9XRVIgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIwMCkgUkZfRU5BQkxFX0NPTkZJRzBfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcxX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjAyKSBSRl9FTkFCTEVfQ09ORklHMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzJfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMDQpIFJGX0VOQUJMRV9DT05GSUcyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHM19SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIwNikgUkZfRU5BQkxFX0NPTkZJRzNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjA4KSBSRl9FTkFCTEVfQ09ORklHNF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzVfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMEEpIFJGX0VOQUJMRV9DT05GSUc1X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNl9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIwQykgUkZfRU5BQkxFX0NPTkZJRzZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc3X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjBFKSBSRl9FTkFCTEVfQ09ORklHN19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzhfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMTApIFJGX0VOQUJMRV9DT05GSUc4X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHOV9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIxMikgUkZfRU5BQkxFX0NPTkZJRzlfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcxMF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjE0KSBSRl9FTkFCTEVfQ09ORklHMTBfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzExX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMTYpIFJGX0VOQUJMRV9DT05GSUcxMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMTJfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIxOCkgUkZfRU5BQkxFX0NPTkZJRzEyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcxM19SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjFBKSBSRl9FTkFCTEVfQ09ORklHMTNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzE0X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMUMpIFJGX0VOQUJMRV9DT05GSUcxNF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMTVfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIxRSkgUkZfRU5BQkxFX0NPTkZJRzE1X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcxNl9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjIwKSBSRl9FTkFCTEVfQ09ORklHMTZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzE3X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMjIpIFJGX0VOQUJMRV9DT05GSUcxN19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMThfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIyNCkgUkZfRU5BQkxFX0NPTkZJRzE4X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcxOV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjI2KSBSRl9FTkFCTEVfQ09ORklHMTlfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzIwX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMjgpIFJGX0VOQUJMRV9DT05GSUcyMF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMjFfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIyQSkgUkZfRU5BQkxFX0NPTkZJRzIxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcyMl9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjJDKSBSRl9FTkFCTEVfQ09ORklHMjJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzIzX0JMRV9SRUc7ICAgICAgICAvKiE8IChAIDB4NTAwMDIyMkUpIFJGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMjRfQkxFX1JFRzsgICAgICAgIC8qITwgKEAgMHg1MDAwMjIzMCkgUkZfRU5BQkxFX0NPTkZJRzI0X0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcyNV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjMyKSBSRl9FTkFCTEVfQ09ORklHMjVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzI2X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMzQpIFJGX0VOQUJMRV9DT05GSUcyNl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMjdfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIzNikgUkZfRU5BQkxFX0NPTkZJRzI3X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcyOF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjM4KSBSRl9FTkFCTEVfQ09ORklHMjhfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzI5X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyM0EpIFJGX0VOQUJMRV9DT05GSUcyOV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMzBfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIzQykgUkZfRU5BQkxFX0NPTkZJRzMwX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUczMV9CTEVfUkVHOyAgICAgICAgLyohPCAoQCAweDUwMDAyMjNFKSBSRl9FTkFCTEVfQ09ORklHMzFfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzMyX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyNDApIFJGX0VOQUJMRV9DT05GSUczMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMzNfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjI0MikgUkZfRU5BQkxFX0NPTkZJRzMzX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUczNF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjQ0KSBSRl9FTkFCTEVfQ09ORklHMzRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzM1X0JMRV9SRUc7ICAgICAgICAvKiE8IChAIDB4NTAwMDIyNDYpIFJGX0VOQUJMRV9DT05GSUczNV9CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMzZfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjI0OCkgUkZfRU5BQkxFX0NPTkZJRzM2X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUczN19CTEVfUkVHOyAgICAgICAgLyohPCAoQCAweDUwMDAyMjRBKSBSRl9FTkFCTEVfQ09ORklHMzdfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzM4X0JMRV9SRUc7ICAgICAgICAvKiE8IChAIDB4NTAwMDIyNEMpIFJGX0VOQUJMRV9DT05GSUczOF9CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMzlfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjI0RSkgUkZfRU5BQkxFX0NPTkZJRzM5X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0MF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjUwKSBSRl9FTkFCTEVfQ09ORklHNDBfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzQxX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyNTIpIFJGX0VOQUJMRV9DT05GSUc0MV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNDJfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjI1NCkgUkZfRU5BQkxFX0NPTkZJRzQyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0M19SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjU2KSBSRl9FTkFCTEVfQ09ORklHNDNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzQ0X0JMRV9SRUc7ICAgICAgICAvKiE8IChAIDB4NTAwMDIyNTgpIFJGX0VOQUJMRV9DT05GSUc0NF9CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFRzsgICAgICAgIC8qITwgKEAgMHg1MDAwMjI1QSkgUkZfRU5BQkxFX0NPTkZJRzQ1X0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHOyAgICAgICAgLyohPCAoQCAweDUwMDAyMjVDKSBSRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzQ3X0JMRV9SRUc7ICAgICAgICAvKiE8IChAIDB4NTAwMDIyNUUpIFJGX0VOQUJMRV9DT05GSUc0N19CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFRzsgICAgICAgIC8qITwgKEAgMHg1MDAwMjI2MCkgUkZfRU5BQkxFX0NPTkZJRzQ4X0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0OV9CTEVfUkVHOyAgICAgICAgLyohPCAoQCAweDUwMDAyMjYyKSBSRl9FTkFCTEVfQ09ORklHNDlfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRURbMzddOworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMjNfRlRERl9SRUc7ICAgICAgIC8qITwgKEAgMHg1MDAwMjJBRSkgUkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcyNF9GVERGX1JFRzsgICAgICAgLyohPCAoQCAweDUwMDAyMkIwKSBSRl9FTkFCTEVfQ09ORklHMjRfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxWzZdOworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMzFfRlRERl9SRUc7ICAgICAgIC8qITwgKEAgMHg1MDAwMjJCRSkgUkZfRU5BQkxFX0NPTkZJRzMxX0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMlszXTsKKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzM1X0ZUREZfUkVHOyAgICAgICAvKiE8IChAIDB4NTAwMDIyQzYpIFJGX0VOQUJMRV9DT05GSUczNV9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM7CisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUczN19GVERGX1JFRzsgICAgICAgLyohPCAoQCAweDUwMDAyMkNBKSBSRl9FTkFCTEVfQ09ORklHMzdfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzM4X0ZUREZfUkVHOyAgICAgICAvKiE8IChAIDB4NTAwMDIyQ0MpIFJGX0VOQUJMRV9DT05GSUczOF9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDRbNV07CisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0NF9GVERGX1JFRzsgICAgICAgLyohPCAoQCAweDUwMDAyMkQ4KSBSRl9FTkFCTEVfQ09ORklHNDRfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHOyAgICAgICAvKiE8IChAIDB4NTAwMDIyREEpIFJGX0VOQUJMRV9DT05GSUc0NV9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUc7ICAgICAgIC8qITwgKEAgMHg1MDAwMjJEQykgUkZfRU5BQkxFX0NPTkZJRzQ2X0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0N19GVERGX1JFRzsgICAgICAgLyohPCAoQCAweDUwMDAyMkRFKSBSRl9FTkFCTEVfQ09ORklHNDdfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzQ4X0ZUREZfUkVHOyAgICAgICAvKiE8IChAIDB4NTAwMDIyRTApIFJGX0VOQUJMRV9DT05GSUc0OF9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNDlfRlRERl9SRUc7ICAgICAgIC8qITwgKEAgMHg1MDAwMjJFMikgUkZfRU5BQkxFX0NPTkZJRzQ5X0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENVsxNV07CisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzFfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzAyKSBSRl9DTlRSTF9USU1FUl8xX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMDQpIFJGX0NOVFJMX1RJTUVSXzJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8zX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMwNikgUkZfQ05UUkxfVElNRVJfM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzA4KSBSRl9DTlRSTF9USU1FUl80X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfNV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMEEpIFJGX0NOVFJMX1RJTUVSXzVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl82X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMwQykgUkZfQ05UUkxfVElNRVJfNl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzdfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzBFKSBSRl9DTlRSTF9USU1FUl83X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfOF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMTApIFJGX0NOVFJMX1RJTUVSXzhfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl85X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMxMikgUkZfQ05UUkxfVElNRVJfOV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzEwX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzE0KSBSRl9DTlRSTF9USU1FUl8xMF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMTFfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMTYpIFJGX0NOVFJMX1RJTUVSXzExX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8xMl9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMxOCkgUkZfQ05UUkxfVElNRVJfMTJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzEzX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzFBKSBSRl9DTlRSTF9USU1FUl8xM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMTRfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMUMpIFJGX0NOVFJMX1RJTUVSXzE0X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8xNV9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMxRSkgUkZfQ05UUkxfVElNRVJfMTVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzE2X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzIwKSBSRl9DTlRSTF9USU1FUl8xNl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMTdfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMjIpIFJGX0NOVFJMX1RJTUVSXzE3X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8xOF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMyNCkgUkZfQ05UUkxfVElNRVJfMThfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzE5X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzI2KSBSRl9DTlRSTF9USU1FUl8xOV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMjBfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMjgpIFJGX0NOVFJMX1RJTUVSXzIwX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8yMV9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMyQSkgUkZfQ05UUkxfVElNRVJfMjFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzIyX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzJDKSBSRl9DTlRSTF9USU1FUl8yMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMjNfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMkUpIFJGX0NOVFJMX1RJTUVSXzIzX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8yNF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMzMCkgUkZfQ05UUkxfVElNRVJfMjRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzI1X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzMyKSBSRl9DTlRSTF9USU1FUl8yNV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMjZfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMzQpIFJGX0NOVFJMX1RJTUVSXzI2X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8yN19SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMzNikgUkZfQ05UUkxfVElNRVJfMjdfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzI4X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzM4KSBSRl9DTlRSTF9USU1FUl8yOF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMjlfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzM0EpIFJGX0NOVFJMX1RJTUVSXzI5X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8zMF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMzQykgUkZfQ05UUkxfVElNRVJfMzBfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzMxX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzNFKSBSRl9DTlRSTF9USU1FUl8zMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzE2XTsKKyAgX19JTyB1aW50MTZfdCAgUkZfQUxXQVlTX0VOMV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzODApIFJGX0FMV0FZU19FTjFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9BTFdBWVNfRU4yX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjM4MikgUkZfQUxXQVlTX0VOMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FMV0FZU19FTjNfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzg0KSBSRl9BTFdBWVNfRU4zX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQUxXQVlTX0VONF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzODYpIFJGX0FMV0FZU19FTjRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9QT1JUX0VOX0JMRV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjM4OCkgUkZfUE9SVF9FTl9CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1BPUlRfRU5fRlRERl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzhBKSBSRl9QT1JUX0VOX0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUE9SVF9QT0xfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzOEMpIFJGX1BPUlRfUE9MX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBSRkNVX1BPV0VSX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgUkZQVCAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBSRlBUIHJlZ2lzdGVycyAoUkZQVCkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzYwMCkgUkZQVCBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGUFRfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNjAwKSBDb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZQVF9BRERSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM2MDIpIEFIQiBtYXN0ZXIgc3RhcnQgYWRkcmVzcyAoTG93IHBhcnQpICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRlBUX0FERFJIX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzYwNCkgQUhCIG1hc3RlciBzdGFydCBhZGRyZXNzIChIaWdoIHBhcnQpICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGUFRfTEVOX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNjA2KSBEYXRhIGxlbmd0aCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZQVF9TVEFUX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM2MDgpIFN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRlBUX0NSVl9BRERSTF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzYwQSkgQUhCIG1hc3RlciBjdXJyZW50IGFkZHJlc3MgKExvdyBwYXJ0KSAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGUFRfQ1JWX0FERFJIX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNjBDKSBBSEIgbWFzdGVyIGN1cnJlbnQgYWRkcmVzcyAoSGlnaCBwYXJ0KSAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZQVF9DUlZfTEVOX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM2MEUpIFRoZSByZW1haW5pbmcgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCAgICAgICAgICAgICAgICAgICAqLworfSBSRlBUX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIFNQSSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBTUEkgcmVnaXN0ZXJzIChTUEkpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEyMDApIFNQSSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTUElfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTIwMCkgU1BJIGNvbnRyb2wgcmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNQSV9SWF9UWF9SRUcwOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMjAyKSBTUEkgUlgvVFggcmVnaXN0ZXIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU1BJX1JYX1RYX1JFRzE7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEyMDQpIFNQSSBSWC9UWCByZWdpc3RlcjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTUElfQ0xFQVJfSU5UX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTIwNikgU1BJIGNsZWFyIGludGVycnVwdCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNQSV9DVFJMX1JFRzE7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMjA4KSBTUEkgY29udHJvbCByZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gU1BJX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgU1BJMiAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBTUEkyIHJlZ2lzdGVycyAoU1BJMikKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTMwMCkgU1BJMiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNQSTJfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMzAwKSBTUEkgY29udHJvbCByZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU1BJMl9SWF9UWF9SRUcwOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEzMDIpIFNQSSBSWC9UWCByZWdpc3RlcjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTUEkyX1JYX1RYX1JFRzE7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTMwNCkgU1BJIFJYL1RYIHJlZ2lzdGVyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNQSTJfQ0xFQVJfSU5UX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMzA2KSBTUEkgY2xlYXIgaW50ZXJydXB0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU1BJMl9DVFJMX1JFRzE7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEzMDgpIFNQSSBjb250cm9sIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBTUEkyX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICBUSU1FUjEgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBUSU1FUjEgcmVnaXN0ZXJzIChUSU1FUjEpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAyMDApIFRJTUVSMSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIwMCkgQ2FwdHVyZSBUaW1lciBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9USU1FUl9WQUxfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMjAyKSBDYXB0dXJlIFRpbWVyIGNvdW50ZXIgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAyMDQpIENhcHR1cmUgVGltZXIgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fR1BJTzFfQ09ORl9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIwNikgQ2FwdHVyZSBUaW1lciBncGlvMSBzZWxlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9HUElPMl9DT05GX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMjA4KSBDYXB0dXJlIFRpbWVyIGdwaW8yIHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX1JFTE9BRF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAyMEEpIENhcHR1cmUgVGltZXIgcmVsb2FkIHZhbHVlIGFuZCBEZWxheSBpbiBzaG90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX1NIT1RXSURUSF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAyMEMpIENhcHR1cmUgVGltZXIgU2hvdCBkdXJhdGlvbiBpbiBzaG90IG1vZGUgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fUFJFU0NBTEVSX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIwRSkgQ2FwdHVyZSBUaW1lciBwcmVzY2FsZXIgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9DQVBUVVJFX0dQSU8xX1JFRzsgICAgICAgICAgLyohPCAoQCAweDUwMDAwMjEwKSBDYXB0dXJlIFRpbWVyIHZhbHVlIGZvciBldmVudCBvbiBHUElPMSAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX0NBUFRVUkVfR1BJTzJfUkVHOyAgICAgICAgICAvKiE8IChAIDB4NTAwMDAyMTIpIENhcHR1cmUgVGltZXIgdmFsdWUgZm9yIGV2ZW50IG9uIEdQSU8yICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fUFJFU0NBTEVSX1ZBTF9SRUc7ICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIxNCkgQ2FwdHVyZSBUaW1lciBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9QV01fRlJFUV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMjE2KSBDYXB0dXJlIFRpbWVyIHB3bSBmcmVxdWVuY3kgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX1BXTV9EQ19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAyMTgpIENhcHR1cmUgVGltZXIgcHdtIGRjIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fVElNRVJfSFZBTF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIxQSkgQ2FwdHVyZSBUaW1lciBjb3VudGVyIGhpZ2ggdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9SRUxPQURfSElHSF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMjFDKSBDYXB0dXJlIFRpbWVyIHJlbG9hZCBoaWdoIHZhbHVlIGFuZCBEZWxheSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdCBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzFfUkVHOyAgICAgLyohPCAoQCAweDUwMDAwMjFFKSBDYXB0dXJlIFRpbWVyIGhpZ2ggdmFsdWUgZm9yIGV2ZW50IG9uIEdQSU8wMSAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX0NBUFRVUkVfSElHSF9HUElPMl9SRUc7ICAgICAvKiE8IChAIDB4NTAwMDAyMjApIENhcHR1cmUgVGltZXIgaGlnaCB2YWx1ZSBmb3IgZXZlbnQgb24gR1BJTzAyICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fU0hPVFdJRFRIX0hJR0hfUkVHOyAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIyMikgQ2FwdHVyZSBUaW1lciBTaG90IGhpZ2ggZHVyYXRpb24gaW4gc2hvdCBtb2RlICAgICAgICAgICovCit9IFRJTUVSMV9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFRSTkcgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgVFJORyByZWdpc3RlcnMgKFRSTkcpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDUwMDApIFRSTkcgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBUUk5HX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNTAwMCkgVFJORyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFRSTkdfRklGT0xWTF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA1MDA0KSBUUk5HIEZJRk8gbGV2ZWwgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgVFJOR19WRVJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDUwMDgpIFRSTkcgVmVyc2lvbiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBUUk5HX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgVUFSVCAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBVQVJUIHJlZ2lzdGVycyAoVUFSVCkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTAwMCkgVUFSVCBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVBUlRfUkJSX1RIUl9ETExfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMDAwKSBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ7CisgIF9fSU8gdWludDE2X3QgIFVBUlRfSUVSX0RMSF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMDA0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxOworICBfX0lPIHVpbnQxNl90ICBVQVJUX0lJUl9GQ1JfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTAwOCkgSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjsKKyAgX19JTyB1aW50MTZfdCAgVUFSVF9MQ1JfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEwMEMpIExpbmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM7CisgIF9fSU8gdWludDE2X3QgIFVBUlRfTUNSX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMDEwKSBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ0OworICBfX0lPIHVpbnQxNl90ICBVQVJUX0xTUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTAxNCkgTGluZSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENVszXTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVF9TQ1JfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEwMUMpIFNjcmF0Y2hwYWQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDZbNDddOworICBfX0lPIHVpbnQxNl90ICBVQVJUX1VTUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTA3QykgVUFSVCBTdGF0dXMgcmVnaXN0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEN1s1XTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVF9TUlJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEwODgpIFNvZnR3YXJlIFJlc2V0IFJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDhbM107CisgIF9fSU8gdWludDE2X3QgIFVBUlRfU0JDUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMDkwKSBTaGFkb3cgQnJlYWsgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ5WzExXTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVF9ETUFTQV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEwQTgpIERNQSBTb2Z0d2FyZSBBY2tub3dsZWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDEwWzExXTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVF9ETEZfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEwQzApIERpdmlzb3IgTGF0Y2ggRnJhY3Rpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDExWzI1XTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVF9DUFJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEwRjQpIENvbXBvbmVudCBQYXJhbWV0ZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDEyOworICBfX0lPIHVpbnQxNl90ICBVQVJUX1VDVl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTBGOCkgQ29tcG9uZW50IFZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTM7CisgIF9fSU8gdWludDE2X3QgIFVBUlRfQ1RSX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMEZDKSBDb21wb25lbnQgVHlwZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gVUFSVF9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFVBUlQyICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgVUFSVDIgcmVnaXN0ZXJzIChVQVJUMikKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTEwMCkgVUFSVDIgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1JCUl9USFJfRExMX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTAwKSBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX0lFUl9ETEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTA0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9JSVJfRkNSX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTEwOCkgSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyL0ZJRk8gQ29udHJvbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfTENSX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExMEMpIExpbmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX01DUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTEwKSBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ0OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9MU1JfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTExNCkgTGluZSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfTVNSX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExMTgpIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDY7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NDUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTFDKSBTY3JhdGNocGFkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ3WzldOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUkJSX1NUSFIwX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTEzMCkgU2hhZG93IFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEODsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JCUl9TVEhSMV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExMzQpIFNoYWRvdyBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDk7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSQlJfU1RIUjJfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTM4KSBTaGFkb3cgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxMDsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JCUl9TVEhSM19SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExM0MpIFNoYWRvdyBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDExOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUkJSX1NUSFI0X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE0MCkgU2hhZG93IFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTI7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSQlJfU1RIUjVfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTQ0KSBTaGFkb3cgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxMzsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JCUl9TVEhSNl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExNDgpIFNoYWRvdyBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE0OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUkJSX1NUSFI3X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE0QykgU2hhZG93IFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTU7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSQlJfU1RIUjhfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTUwKSBTaGFkb3cgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxNjsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JCUl9TVEhSOV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExNTQpIFNoYWRvdyBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE3OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUkJSX1NUSFIxMF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE1OCkgU2hhZG93IFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTg7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSQlJfU1RIUjExX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTVDKSBTaGFkb3cgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxOTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JCUl9TVEhSMTJfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExNjApIFNoYWRvdyBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDIwOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUkJSX1NUSFIxM19SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE2NCkgU2hhZG93IFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjE7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSQlJfU1RIUjE0X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTY4KSBTaGFkb3cgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyMjsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JCUl9TVEhSMTVfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExNkMpIFNoYWRvdyBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDIzOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9GQVJfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE3MCkgRklGTyBBY2Nlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjRbNV07CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1VTUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTdDKSBVQVJUIFN0YXR1cyByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyNTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfVEZMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExODApIFRyYW5zbWl0IEZJRk8gTGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI2OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9SRkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE4NCkgUmVjZWl2ZSBGSUZPIExldmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjc7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTg4KSBTb2Z0d2FyZSBSZXNldCBSZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyODsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JUU19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExOEMpIFNoYWRvdyBSZXF1ZXN0IHRvIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI5OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TQkNSX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE5MCkgU2hhZG93IEJyZWFrIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzA7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NETUFNX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTk0KSBTaGFkb3cgRE1BIE1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzMTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU0ZFX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExOTgpIFNoYWRvdyBGSUZPIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDMyOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUlRfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE5QykgU2hhZG93IFJDVlIgVHJpZ2dlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzM7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NURVRfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMUEwKSBTaGFkb3cgVFggRW1wdHkgVHJpZ2dlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzNDsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfSFRYX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExQTQpIEhhbHQgVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM1OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9ETUFTQV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTFBOCkgRE1BIFNvZnR3YXJlIEFja25vd2xlZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzZbMTFdOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9ETEZfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTFDMCkgRGl2aXNvciBMYXRjaCBGcmFjdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzdbMjVdOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9DUFJfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTFGNCkgQ29tcG9uZW50IFBhcmFtZXRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzg7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1VDVl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMUY4KSBDb21wb25lbnQgVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzOTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfQ1RSX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExRkMpIENvbXBvbmVudCBUeXBlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBVQVJUMl9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBVU0IgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgVVNCIHJlZ2lzdGVycyAoVVNCKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODAwKSBVU0IgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX01DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MDApIE1haW4gQ29udHJvbCBSZWdpc3RlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfWENWRElBR19SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgwMikgVHJhbnNjZWl2ZXIgZGlhZ25vc3RpYyBSZWdpc3RlciAoZm9yIHRlc3QgcHVycG9zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9UQ1JfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODA0KSBUcmFuc2NlaXZlciBjb25maWd1cmF0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1VUUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MDYpIFVTQiB0ZXN0IFJlZ2lzdGVyIChmb3IgdGVzdCBwdXJwb3NlIG9ubHkpICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfRkFSX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgwOCkgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9ORlNSX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODBBKSBOb2RlIEZ1bmN0aW9uYWwgU3RhdGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX01BRVZfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MEMpIE1haW4gRXZlbnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfTUFNU0tfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgwRSkgTWFpbiBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9BTFRFVl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODEwKSBBbHRlcm5hdGUgRXZlbnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX0FMVE1TS19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MTIpIEFsdGVybmF0ZSBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfVFhFVl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgxNCkgVHJhbnNtaXQgRXZlbnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9UWE1TS19SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODE2KSBUcmFuc21pdCBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1JYRVZfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MTgpIFJlY2VpdmUgRXZlbnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfUlhNU0tfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgxQSkgUmVjZWl2ZSBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9OQUtFVl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODFDKSBOQUsgRXZlbnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX05BS01TS19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MUUpIE5BSyBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfRldFVl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgyMCkgRklGTyBXYXJuaW5nIEV2ZW50IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9GV01TS19SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODIyKSBGSUZPIFdhcm5pbmcgTWFzayBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX0ZOSF9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MjQpIEZyYW1lIE51bWJlciBIaWdoIEJ5dGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfRk5MX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgyNikgRnJhbWUgTnVtYmVyIExvdyBCeXRlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEWzExXTsKKyAgX19JTyB1aW50MTZfdCAgVVNCX1VYMjBDRFJfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4M0UpIFRyYW5zY2VpdmVyIDIuMCBDb25maWd1cmF0aW9uIGFuZCBEaWFnbm9zdGljcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIoZm9yIHRlc3QgcHVycG9zZSBvbmx5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9FUEMwX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODQwKSBFbmRwb2ludCBDb250cm9sIDAgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1RYRDBfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NDIpIFRyYW5zbWl0IERhdGEgMCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfVFhTMF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg0NCkgVHJhbnNtaXQgU3RhdHVzIDAgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9UWEMwX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODQ2KSBUcmFuc21pdCBjb21tYW5kIDAgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX0VQMF9OQUtfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NDgpIEVQMCBJTk5BSyBhbmQgT1VUTkFLIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfUlhEMF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg0QSkgUmVjZWl2ZSBEYXRhIDAgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9SWFMwX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODRDKSBSZWNlaXZlIFN0YXR1cyAwIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1JYQzBfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NEUpIFJlY2VpdmUgQ29tbWFuZCAwIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfRVBDMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg1MCkgRW5kcG9pbnQgQ29udHJvbCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9UWEQxX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODUyKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1RYUzFfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NTQpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfVFhDMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg1NikgVHJhbnNtaXQgQ29tbWFuZCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9FUEMyX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODU4KSBFbmRwb2ludCBDb250cm9sIFJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1JYRDFfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NUEpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfUlhTMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg1QykgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9SWEMxX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODVFKSBSZWNlaXZlIENvbW1hbmQgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX0VQQzNfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NjApIEVuZHBvaW50IENvbnRyb2wgUmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfVFhEMl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg2MikgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9UWFMyX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODY0KSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1RYQzJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NjYpIFRyYW5zbWl0IENvbW1hbmQgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfRVBDNF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg2OCkgRW5kcG9pbnQgQ29udHJvbCBSZWdpc3RlciA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9SWEQyX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODZBKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1JYUzJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NkMpIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfUlhDMl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg2RSkgUmVjZWl2ZSBDb21tYW5kIFJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9FUEM1X1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODcwKSBFbmRwb2ludCBDb250cm9sIFJlZ2lzdGVyIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1RYRDNfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NzIpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfVFhTM19SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg3NCkgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9UWEMzX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODc2KSBUcmFuc21pdCBDb21tYW5kIFJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX0VQQzZfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NzgpIEVuZHBvaW50IENvbnRyb2wgUmVnaXN0ZXIgNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfUlhEM19SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg3QSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9SWFMzX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODdDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1JYQzNfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4N0UpIFJlY2VpdmUgQ29tbWFuZCBSZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMjBdOworICBfX0lPIHVpbnQxNl90ICBVU0JfRE1BX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMThEMCkgVVNCIERNQSBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjsKKyAgX19JTyB1aW50MTZfdCAgVVNCX0NIQVJHRVJfQ1RSTF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4RDQpIFVTQiBDaGFyZ2VyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfQ0hBUkdFUl9TVEFUX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMThENikgVVNCIENoYXJnZXIgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IFVTQl9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgV0FLRVVQICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgV0FLRVVQIHJlZ2lzdGVycyAoV0FLRVVQKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTAwKSBXQUtFVVAgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMDApIENvbnRyb2wgcmVnaXN0ZXIgZm9yIHRoZSB3YWtldXAgY291bnRlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDsKKyAgX19JTyB1aW50MTZfdCAgV0tVUF9SRVNFVF9JUlFfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMDQpIFJlc2V0IHdha2V1cCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDFbMl07CisgIF9fSU8gdWludDE2X3QgIFdLVVBfU0VMRUNUX1AwX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTBBKSBzZWxlY3Qgd2hpY2ggaW5wdXRzIGZyb20gUDAgcG9ydCBjYW4gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2t1cCBjb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfU0VMRUNUX1AxX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTBDKSBzZWxlY3Qgd2hpY2ggaW5wdXRzIGZyb20gUDEgcG9ydCBjYW4gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2t1cCBjb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfU0VMRUNUX1AyX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTBFKSBzZWxlY3Qgd2hpY2ggaW5wdXRzIGZyb20gUDIgcG9ydCBjYW4gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2t1cCBjb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfU0VMRUNUX1AzX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTEwKSBzZWxlY3Qgd2hpY2ggaW5wdXRzIGZyb20gUDMgcG9ydCBjYW4gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2t1cCBjb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfU0VMRUNUX1A0X1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTEyKSBzZWxlY3Qgd2hpY2ggaW5wdXRzIGZyb20gUDMgcG9ydCBjYW4gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2t1cCBjb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfUE9MX1AwX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTE0KSBzZWxlY3QgdGhlIHNlc2l0aXZpdHkgcG9sYXJpdHkgZm9yIGVhY2ggUDAgaW5wdXQgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9QT0xfUDFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMTYpIHNlbGVjdCB0aGUgc2VzaXRpdml0eSBwb2xhcml0eSBmb3IgZWFjaCBQMSBpbnB1dCAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX1BPTF9QMl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDExOCkgc2VsZWN0IHRoZSBzZXNpdGl2aXR5IHBvbGFyaXR5IGZvciBlYWNoIFAyIGlucHV0ICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfUE9MX1AzX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTFBKSBzZWxlY3QgdGhlIHNlc2l0aXZpdHkgcG9sYXJpdHkgZm9yIGVhY2ggUDMgaW5wdXQgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9QT0xfUDRfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMUMpIHNlbGVjdCB0aGUgc2VzaXRpdml0eSBwb2xhcml0eSBmb3IgZWFjaCBQMyBpbnB1dCAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX1NUQVRVU18wX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDExRSkgRXZlbnQgc3RhdHVzIHJlZ2lzdGVyIGZvciBQMCBhbmQgUDEgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfU1RBVFVTXzFfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTIwKSBFdmVudCBzdGF0dXMgcmVnaXN0ZXIgZm9yIFAyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9TVEFUVVNfMl9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMjIpIEV2ZW50IHN0YXR1cyByZWdpc3RlciBmb3IgUDMgYW5kIFA0ICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX0NMRUFSXzBfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDEyNCkgQ2xlYXIgZXZlbnQgcmVnaXN0ZXIgZm9yIFAwIGFuZCBQMSAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfQ0xFQVJfMV9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTI2KSBDbGVhciBldmVudCByZWdpc3RlciBmb3IgUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9DTEVBUl8yX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMjgpIENsZWFyIGV2ZW50IHJlZ2lzdGVyIGZvciBQMyBhbmQgUDQgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX1NFTF9HUElPX1AwX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDEyQSkgc2VsZWN0IHdoaWNoIGlucHV0cyBmcm9tIFAwIHBvcnQgY2FuIHRyaWdnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX1NFTF9HUElPX1AxX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDEyQykgc2VsZWN0IHdoaWNoIGlucHV0cyBmcm9tIFAxIHBvcnQgY2FuIHRyaWdnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX1NFTF9HUElPX1AyX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDEyRSkgc2VsZWN0IHdoaWNoIGlucHV0cyBmcm9tIFAyIHBvcnQgY2FuIHRyaWdnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX1NFTF9HUElPX1AzX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDEzMCkgc2VsZWN0IHdoaWNoIGlucHV0cyBmcm9tIFAzIHBvcnQgY2FuIHRyaWdnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX1NFTF9HUElPX1A0X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDEzMikgc2VsZWN0IHdoaWNoIGlucHV0cyBmcm9tIFAzIHBvcnQgY2FuIHRyaWdnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBXQUtFVVBfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBXRE9HICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIFdET0cgcmVnaXN0ZXJzIChXRE9HKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMTAwKSBXRE9HIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0FUQ0hET0dfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMxMDApIFdhdGNoZG9nIHRpbWVyIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXQVRDSERPR19DVFJMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzEwMikgV2F0Y2hkb2cgY29udHJvbCByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IFdET0dfVHlwZTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgRW5kIG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmIGRlZmluZWQoX19DQ19BUk0pCisgICNwcmFnbWEgcG9wCisjZWxpZiBkZWZpbmVkKF9fSUNDQVJNX18pCisgIC8qIGxlYXZlIGFub255bW91cyB1bmlvbnMgZW5hYmxlZCAqLworI2VsaWYgZGVmaW5lZChfX0dOVUNfXykKKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkKF9fVE1TNDcwX18pCisgIC8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2VsaWYgZGVmaW5lZChfX1RBU0tJTkdfXykKKyAgI3ByYWdtYSB3YXJuaW5nIHJlc3RvcmUKKyNlbHNlCisgICN3YXJuaW5nIE5vdCBzdXBwb3J0ZWQgY29tcGlsZXIgdHlwZQorI2VuZGlmCisKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ05WSUMnIFBvc2l0aW9uICYgTWFzayAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JU0VSICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0JMRV9XQUtFVVBfTFBfSVJRbl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBCTEVfV0FLRVVQX0xQX0lSUW4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0JMRV9XQUtFVVBfTFBfSVJRbl9Nc2sgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBCTEVfV0FLRVVQX0xQX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0JMRV9HRU5fSVJRbl9Qb3MgICAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBCTEVfR0VOX0lSUW4gKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0JMRV9HRU5fSVJRbl9Nc2sgICAgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBCTEVfR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0ZUREZfV0FLRVVQX0lSUW5fUG9zICAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBGVERGX1dBS0VVUF9JUlFuIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0ZUREZfV0FLRVVQX0lSUW5fTXNrICAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBGVERGX1dBS0VVUF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0ZUREZfR0VOX0lSUW5fUG9zICAgICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBGVERGX0dFTl9JUlFuIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0ZUREZfR0VOX0lSUW5fTXNrICAgICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBGVERGX0dFTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1JGQ0FMX0lSUW5fUG9zICAgICAgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBSRkNBTF9JUlFuIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1JGQ0FMX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBSRkNBTF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0NPRVhfSVJRbl9Qb3MgICAgICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBDT0VYX0lSUW4gKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0NPRVhfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBDT0VYX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0NSWVBUT19JUlFuX1BvcyAgICAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBDUllQVE9fSVJRbiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0NSWVBUT19JUlFuX01zayAgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBDUllQVE9fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX01STV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBNUk1fSVJRbiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX01STV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBNUk1fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1VBUlRfSVJRbl9Qb3MgICAgICAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBVQVJUX0lSUW4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1VBUlRfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBVQVJUX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1VBUlQyX0lSUW5fUG9zICAgICAgICAgICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBVQVJUMl9JUlFuIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1VBUlQyX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBVQVJUMl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0kyQ19JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBJMkNfSVJRbiAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0kyQ19JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBJMkNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0kyQzJfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBJMkMyX0lSUW4gKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0kyQzJfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBJMkMyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NQSV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTUElfSVJRbiAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NQSV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTUElfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NQSTJfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTUEkyX0lSUW4gKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NQSTJfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTUEkyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0FEQ19JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBBRENfSVJRbiAoQml0IDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0FEQ19JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBBRENfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0tFWUJSRF9JUlFuX1BvcyAgICAgICAgICAgICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBLRVlCUkRfSVJRbiAoQml0IDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0tFWUJSRF9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBLRVlCUkRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0lSR0VOX0lSUW5fUG9zICAgICAgICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBJUkdFTl9JUlFuIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0lSR0VOX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgxMDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBJUkdFTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1dLVVBfR1BJT19JUlFuX1BvcyAgICAgICAgICAoMTdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBXS1VQX0dQSU9fSVJRbiAoQml0IDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1dLVVBfR1BJT19JUlFuX01zayAgICAgICAgICAoMHgyMDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBXS1VQX0dQSU9fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NXVElNMF9JUlFuX1BvcyAgICAgICAgICAgICAoMThVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTV1RJTTBfSVJRbiAoQml0IDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NXVElNMF9JUlFuX01zayAgICAgICAgICAgICAoMHg0MDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTV1RJTTBfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NXVElNMV9JUlFuX1BvcyAgICAgICAgICAgICAoMTlVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTV1RJTTFfSVJRbiAoQml0IDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NXVElNMV9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTV1RJTTFfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1FVQURFQ19JUlFuX1BvcyAgICAgICAgICAgICAoMjBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBRVUFERUNfSVJRbiAoQml0IDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1FVQURFQ19JUlFuX01zayAgICAgICAgICAgICAoMHgxMDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBRVUFERUNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1VTQl9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBVU0JfSVJRbiAoQml0IDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1VTQl9JUlFuX01zayAgICAgICAgICAgICAgICAoMHgyMDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBVU0JfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1BDTV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBQQ01fSVJRbiAoQml0IDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1BDTV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBQQ01fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NSQ19JTl9JUlFuX1BvcyAgICAgICAgICAgICAoMjNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTUkNfSU5fSVJRbiAoQml0IDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NSQ19JTl9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTUkNfSU5fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NSQ19PVVRfSVJRbl9Qb3MgICAgICAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTUkNfT1VUX0lSUW4gKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1NSQ19PVVRfSVJRbl9Nc2sgICAgICAgICAgICAoMHgxMDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBTUkNfT1VUX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1ZCVVNfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBWQlVTX0lSUW4gKEJpdCAyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1ZCVVNfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBWQlVTX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0RNQV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBETUFfSVJRbiAoQml0IDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0RNQV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBETUFfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1JGX0RJQUdfSVJRbl9Qb3MgICAgICAgICAgICAoMjdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBSRl9ESUFHX0lSUW4gKEJpdCAyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1JGX0RJQUdfSVJRbl9Nc2sgICAgICAgICAgICAoMHg4MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBSRl9ESUFHX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1RSTkdfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBUUk5HX0lSUW4gKEJpdCAyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1RSTkdfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgxMDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBUUk5HX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0RDRENfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjlVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBEQ0RDX0lSUW4gKEJpdCAyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX0RDRENfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBEQ0RDX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1hUQUwxNlJEWV9JUlFuX1BvcyAgICAgICAgICAoMzBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBYVEFMMTZSRFlfSVJRbiAoQml0IDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1hUQUwxNlJEWV9JUlFuX01zayAgICAgICAgICAoMHg0MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBYVEFMMTZSRFlfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1JzdmRfX2lycV9fbl9Qb3MgICAgICAgICAgICAoMzFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBSc3ZkX19pcnFfX24gKEJpdCAzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU0VSX1JzdmRfX2lycV9fbl9Nc2sgICAgICAgICAgICAoMHg4MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJU0VSOiBSc3ZkX19pcnFfX24gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JQ0VSICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0JMRV9XQUtFVVBfTFBfSVJRbl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBCTEVfV0FLRVVQX0xQX0lSUW4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0JMRV9XQUtFVVBfTFBfSVJRbl9Nc2sgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBCTEVfV0FLRVVQX0xQX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0JMRV9HRU5fSVJRbl9Qb3MgICAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBCTEVfR0VOX0lSUW4gKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0JMRV9HRU5fSVJRbl9Nc2sgICAgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBCTEVfR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0ZUREZfV0FLRVVQX0lSUW5fUG9zICAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBGVERGX1dBS0VVUF9JUlFuIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0ZUREZfV0FLRVVQX0lSUW5fTXNrICAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBGVERGX1dBS0VVUF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0ZUREZfR0VOX0lSUW5fUG9zICAgICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBGVERGX0dFTl9JUlFuIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0ZUREZfR0VOX0lSUW5fTXNrICAgICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBGVERGX0dFTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1JGQ0FMX0lSUW5fUG9zICAgICAgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBSRkNBTF9JUlFuIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1JGQ0FMX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBSRkNBTF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0NPRVhfSVJRbl9Qb3MgICAgICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBDT0VYX0lSUW4gKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0NPRVhfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBDT0VYX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0NSWVBUT19JUlFuX1BvcyAgICAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBDUllQVE9fSVJRbiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0NSWVBUT19JUlFuX01zayAgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBDUllQVE9fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX01STV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBNUk1fSVJRbiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX01STV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBNUk1fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1VBUlRfSVJRbl9Qb3MgICAgICAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBVQVJUX0lSUW4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1VBUlRfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBVQVJUX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1VBUlQyX0lSUW5fUG9zICAgICAgICAgICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBVQVJUMl9JUlFuIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1VBUlQyX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBVQVJUMl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0kyQ19JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBJMkNfSVJRbiAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0kyQ19JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBJMkNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0kyQzJfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBJMkMyX0lSUW4gKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0kyQzJfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBJMkMyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NQSV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTUElfSVJRbiAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NQSV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTUElfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NQSTJfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTUEkyX0lSUW4gKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NQSTJfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTUEkyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0FEQ19JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBBRENfSVJRbiAoQml0IDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0FEQ19JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBBRENfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0tFWUJSRF9JUlFuX1BvcyAgICAgICAgICAgICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBLRVlCUkRfSVJRbiAoQml0IDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0tFWUJSRF9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBLRVlCUkRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0lSR0VOX0lSUW5fUG9zICAgICAgICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBJUkdFTl9JUlFuIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0lSR0VOX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgxMDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBJUkdFTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1dLVVBfR1BJT19JUlFuX1BvcyAgICAgICAgICAoMTdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBXS1VQX0dQSU9fSVJRbiAoQml0IDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1dLVVBfR1BJT19JUlFuX01zayAgICAgICAgICAoMHgyMDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBXS1VQX0dQSU9fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NXVElNMF9JUlFuX1BvcyAgICAgICAgICAgICAoMThVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTV1RJTTBfSVJRbiAoQml0IDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NXVElNMF9JUlFuX01zayAgICAgICAgICAgICAoMHg0MDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTV1RJTTBfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NXVElNMV9JUlFuX1BvcyAgICAgICAgICAgICAoMTlVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTV1RJTTFfSVJRbiAoQml0IDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NXVElNMV9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTV1RJTTFfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1FVQURFQ19JUlFuX1BvcyAgICAgICAgICAgICAoMjBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBRVUFERUNfSVJRbiAoQml0IDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1FVQURFQ19JUlFuX01zayAgICAgICAgICAgICAoMHgxMDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBRVUFERUNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1VTQl9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBVU0JfSVJRbiAoQml0IDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1VTQl9JUlFuX01zayAgICAgICAgICAgICAgICAoMHgyMDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBVU0JfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1BDTV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBQQ01fSVJRbiAoQml0IDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1BDTV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBQQ01fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NSQ19JTl9JUlFuX1BvcyAgICAgICAgICAgICAoMjNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTUkNfSU5fSVJRbiAoQml0IDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NSQ19JTl9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTUkNfSU5fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NSQ19PVVRfSVJRbl9Qb3MgICAgICAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTUkNfT1VUX0lSUW4gKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1NSQ19PVVRfSVJRbl9Nc2sgICAgICAgICAgICAoMHgxMDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBTUkNfT1VUX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1ZCVVNfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBWQlVTX0lSUW4gKEJpdCAyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1ZCVVNfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBWQlVTX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0RNQV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBETUFfSVJRbiAoQml0IDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0RNQV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBETUFfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1JGX0RJQUdfSVJRbl9Qb3MgICAgICAgICAgICAoMjdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBSRl9ESUFHX0lSUW4gKEJpdCAyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1JGX0RJQUdfSVJRbl9Nc2sgICAgICAgICAgICAoMHg4MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBSRl9ESUFHX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1RSTkdfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBUUk5HX0lSUW4gKEJpdCAyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1RSTkdfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgxMDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBUUk5HX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0RDRENfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjlVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBEQ0RDX0lSUW4gKEJpdCAyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX0RDRENfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBEQ0RDX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1hUQUwxNlJEWV9JUlFuX1BvcyAgICAgICAgICAoMzBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBYVEFMMTZSRFlfSVJRbiAoQml0IDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1hUQUwxNlJEWV9JUlFuX01zayAgICAgICAgICAoMHg0MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBYVEFMMTZSRFlfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1JzdmRfX2lycV9fbl9Qb3MgICAgICAgICAgICAoMzFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBSc3ZkX19pcnFfX24gKEJpdCAzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ0VSX1JzdmRfX2lycV9fbl9Nc2sgICAgICAgICAgICAoMHg4MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJQ0VSOiBSc3ZkX19pcnFfX24gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JU1BSICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0JMRV9XQUtFVVBfTFBfSVJRbl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBCTEVfV0FLRVVQX0xQX0lSUW4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0JMRV9XQUtFVVBfTFBfSVJRbl9Nc2sgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBCTEVfV0FLRVVQX0xQX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0JMRV9HRU5fSVJRbl9Qb3MgICAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBCTEVfR0VOX0lSUW4gKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0JMRV9HRU5fSVJRbl9Nc2sgICAgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBCTEVfR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0ZUREZfV0FLRVVQX0lSUW5fUG9zICAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBGVERGX1dBS0VVUF9JUlFuIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0ZUREZfV0FLRVVQX0lSUW5fTXNrICAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBGVERGX1dBS0VVUF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0ZUREZfR0VOX0lSUW5fUG9zICAgICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBGVERGX0dFTl9JUlFuIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0ZUREZfR0VOX0lSUW5fTXNrICAgICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBGVERGX0dFTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1JGQ0FMX0lSUW5fUG9zICAgICAgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBSRkNBTF9JUlFuIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1JGQ0FMX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBSRkNBTF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0NPRVhfSVJRbl9Qb3MgICAgICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBDT0VYX0lSUW4gKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0NPRVhfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBDT0VYX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0NSWVBUT19JUlFuX1BvcyAgICAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBDUllQVE9fSVJRbiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0NSWVBUT19JUlFuX01zayAgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBDUllQVE9fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX01STV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBNUk1fSVJRbiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX01STV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBNUk1fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1VBUlRfSVJRbl9Qb3MgICAgICAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBVQVJUX0lSUW4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1VBUlRfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBVQVJUX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1VBUlQyX0lSUW5fUG9zICAgICAgICAgICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBVQVJUMl9JUlFuIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1VBUlQyX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBVQVJUMl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0kyQ19JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBJMkNfSVJRbiAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0kyQ19JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBJMkNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0kyQzJfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBJMkMyX0lSUW4gKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0kyQzJfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBJMkMyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NQSV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTUElfSVJRbiAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NQSV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTUElfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NQSTJfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTUEkyX0lSUW4gKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NQSTJfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTUEkyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0FEQ19JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBBRENfSVJRbiAoQml0IDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0FEQ19JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBBRENfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0tFWUJSRF9JUlFuX1BvcyAgICAgICAgICAgICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBLRVlCUkRfSVJRbiAoQml0IDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0tFWUJSRF9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBLRVlCUkRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0lSR0VOX0lSUW5fUG9zICAgICAgICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBJUkdFTl9JUlFuIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0lSR0VOX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgxMDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBJUkdFTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1dLVVBfR1BJT19JUlFuX1BvcyAgICAgICAgICAoMTdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBXS1VQX0dQSU9fSVJRbiAoQml0IDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1dLVVBfR1BJT19JUlFuX01zayAgICAgICAgICAoMHgyMDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBXS1VQX0dQSU9fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NXVElNMF9JUlFuX1BvcyAgICAgICAgICAgICAoMThVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTV1RJTTBfSVJRbiAoQml0IDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NXVElNMF9JUlFuX01zayAgICAgICAgICAgICAoMHg0MDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTV1RJTTBfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NXVElNMV9JUlFuX1BvcyAgICAgICAgICAgICAoMTlVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTV1RJTTFfSVJRbiAoQml0IDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NXVElNMV9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTV1RJTTFfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1FVQURFQ19JUlFuX1BvcyAgICAgICAgICAgICAoMjBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBRVUFERUNfSVJRbiAoQml0IDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1FVQURFQ19JUlFuX01zayAgICAgICAgICAgICAoMHgxMDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBRVUFERUNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1VTQl9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBVU0JfSVJRbiAoQml0IDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1VTQl9JUlFuX01zayAgICAgICAgICAgICAgICAoMHgyMDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBVU0JfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1BDTV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBQQ01fSVJRbiAoQml0IDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1BDTV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBQQ01fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NSQ19JTl9JUlFuX1BvcyAgICAgICAgICAgICAoMjNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTUkNfSU5fSVJRbiAoQml0IDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NSQ19JTl9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTUkNfSU5fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NSQ19PVVRfSVJRbl9Qb3MgICAgICAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTUkNfT1VUX0lSUW4gKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1NSQ19PVVRfSVJRbl9Nc2sgICAgICAgICAgICAoMHgxMDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBTUkNfT1VUX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1ZCVVNfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBWQlVTX0lSUW4gKEJpdCAyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1ZCVVNfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBWQlVTX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0RNQV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBETUFfSVJRbiAoQml0IDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0RNQV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBETUFfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1JGX0RJQUdfSVJRbl9Qb3MgICAgICAgICAgICAoMjdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBSRl9ESUFHX0lSUW4gKEJpdCAyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1JGX0RJQUdfSVJRbl9Nc2sgICAgICAgICAgICAoMHg4MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBSRl9ESUFHX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1RSTkdfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBUUk5HX0lSUW4gKEJpdCAyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1RSTkdfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgxMDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBUUk5HX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0RDRENfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjlVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBEQ0RDX0lSUW4gKEJpdCAyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX0RDRENfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBEQ0RDX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1hUQUwxNlJEWV9JUlFuX1BvcyAgICAgICAgICAoMzBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBYVEFMMTZSRFlfSVJRbiAoQml0IDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1hUQUwxNlJEWV9JUlFuX01zayAgICAgICAgICAoMHg0MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBYVEFMMTZSRFlfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1JzdmRfX2lycV9fbl9Qb3MgICAgICAgICAgICAoMzFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBSc3ZkX19pcnFfX24gKEJpdCAzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JU1BSX1JzdmRfX2lycV9fbl9Nc2sgICAgICAgICAgICAoMHg4MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJU1BSOiBSc3ZkX19pcnFfX24gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JQ1BSICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0JMRV9XQUtFVVBfTFBfSVJRbl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBCTEVfV0FLRVVQX0xQX0lSUW4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0JMRV9XQUtFVVBfTFBfSVJRbl9Nc2sgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBCTEVfV0FLRVVQX0xQX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0JMRV9HRU5fSVJRbl9Qb3MgICAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBCTEVfR0VOX0lSUW4gKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0JMRV9HRU5fSVJRbl9Nc2sgICAgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBCTEVfR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0ZUREZfV0FLRVVQX0lSUW5fUG9zICAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBGVERGX1dBS0VVUF9JUlFuIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0ZUREZfV0FLRVVQX0lSUW5fTXNrICAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBGVERGX1dBS0VVUF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0ZUREZfR0VOX0lSUW5fUG9zICAgICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBGVERGX0dFTl9JUlFuIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0ZUREZfR0VOX0lSUW5fTXNrICAgICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBGVERGX0dFTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1JGQ0FMX0lSUW5fUG9zICAgICAgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBSRkNBTF9JUlFuIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1JGQ0FMX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBSRkNBTF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0NPRVhfSVJRbl9Qb3MgICAgICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBDT0VYX0lSUW4gKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0NPRVhfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBDT0VYX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0NSWVBUT19JUlFuX1BvcyAgICAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBDUllQVE9fSVJRbiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0NSWVBUT19JUlFuX01zayAgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBDUllQVE9fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX01STV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBNUk1fSVJRbiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX01STV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBNUk1fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1VBUlRfSVJRbl9Qb3MgICAgICAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBVQVJUX0lSUW4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1VBUlRfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBVQVJUX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1VBUlQyX0lSUW5fUG9zICAgICAgICAgICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBVQVJUMl9JUlFuIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1VBUlQyX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBVQVJUMl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0kyQ19JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBJMkNfSVJRbiAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0kyQ19JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBJMkNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0kyQzJfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBJMkMyX0lSUW4gKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0kyQzJfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBJMkMyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NQSV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTUElfSVJRbiAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NQSV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTUElfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NQSTJfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTUEkyX0lSUW4gKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NQSTJfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTUEkyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0FEQ19JUlFuX1BvcyAgICAgICAgICAgICAgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBBRENfSVJRbiAoQml0IDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0FEQ19JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBBRENfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0tFWUJSRF9JUlFuX1BvcyAgICAgICAgICAgICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBLRVlCUkRfSVJRbiAoQml0IDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0tFWUJSRF9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBLRVlCUkRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0lSR0VOX0lSUW5fUG9zICAgICAgICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBJUkdFTl9JUlFuIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0lSR0VOX0lSUW5fTXNrICAgICAgICAgICAgICAoMHgxMDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBJUkdFTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1dLVVBfR1BJT19JUlFuX1BvcyAgICAgICAgICAoMTdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBXS1VQX0dQSU9fSVJRbiAoQml0IDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1dLVVBfR1BJT19JUlFuX01zayAgICAgICAgICAoMHgyMDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBXS1VQX0dQSU9fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NXVElNMF9JUlFuX1BvcyAgICAgICAgICAgICAoMThVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTV1RJTTBfSVJRbiAoQml0IDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NXVElNMF9JUlFuX01zayAgICAgICAgICAgICAoMHg0MDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTV1RJTTBfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NXVElNMV9JUlFuX1BvcyAgICAgICAgICAgICAoMTlVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTV1RJTTFfSVJRbiAoQml0IDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NXVElNMV9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTV1RJTTFfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1FVQURFQ19JUlFuX1BvcyAgICAgICAgICAgICAoMjBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBRVUFERUNfSVJRbiAoQml0IDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1FVQURFQ19JUlFuX01zayAgICAgICAgICAgICAoMHgxMDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBRVUFERUNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1VTQl9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBVU0JfSVJRbiAoQml0IDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1VTQl9JUlFuX01zayAgICAgICAgICAgICAgICAoMHgyMDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBVU0JfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1BDTV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBQQ01fSVJRbiAoQml0IDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1BDTV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBQQ01fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NSQ19JTl9JUlFuX1BvcyAgICAgICAgICAgICAoMjNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTUkNfSU5fSVJRbiAoQml0IDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NSQ19JTl9JUlFuX01zayAgICAgICAgICAgICAoMHg4MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTUkNfSU5fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NSQ19PVVRfSVJRbl9Qb3MgICAgICAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTUkNfT1VUX0lSUW4gKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1NSQ19PVVRfSVJRbl9Nc2sgICAgICAgICAgICAoMHgxMDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBTUkNfT1VUX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1ZCVVNfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBWQlVTX0lSUW4gKEJpdCAyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1ZCVVNfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBWQlVTX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0RNQV9JUlFuX1BvcyAgICAgICAgICAgICAgICAoMjZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBETUFfSVJRbiAoQml0IDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0RNQV9JUlFuX01zayAgICAgICAgICAgICAgICAoMHg0MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBETUFfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1JGX0RJQUdfSVJRbl9Qb3MgICAgICAgICAgICAoMjdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBSRl9ESUFHX0lSUW4gKEJpdCAyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1JGX0RJQUdfSVJRbl9Nc2sgICAgICAgICAgICAoMHg4MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBSRl9ESUFHX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1RSTkdfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBUUk5HX0lSUW4gKEJpdCAyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1RSTkdfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgxMDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBUUk5HX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0RDRENfSVJRbl9Qb3MgICAgICAgICAgICAgICAoMjlVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBEQ0RDX0lSUW4gKEJpdCAyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX0RDRENfSVJRbl9Nc2sgICAgICAgICAgICAgICAoMHgyMDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBEQ0RDX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1hUQUwxNlJEWV9JUlFuX1BvcyAgICAgICAgICAoMzBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBYVEFMMTZSRFlfSVJRbiAoQml0IDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1hUQUwxNlJEWV9JUlFuX01zayAgICAgICAgICAoMHg0MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBYVEFMMTZSRFlfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1JzdmRfX2lycV9fbl9Qb3MgICAgICAgICAgICAoMzFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBSc3ZkX19pcnFfX24gKEJpdCAzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JQ1BSX1JzdmRfX2lycV9fbl9Nc2sgICAgICAgICAgICAoMHg4MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJQ1BSOiBSc3ZkX19pcnFfX24gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JUFIwICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JUFIwX0JMRV9XQUtFVVBfTFBfSVJRbl9wcmlvX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIwOiBCTEVfV0FLRVVQX0xQX0lSUW5fcHJpbyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIwX0JMRV9XQUtFVVBfTFBfSVJRbl9wcmlvX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIwOiBCTEVfV0FLRVVQX0xQX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIwX0JMRV9HRU5fSVJRbl9wcmlvX1BvcyAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIwOiBCTEVfR0VOX0lSUW5fcHJpbyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIwX0JMRV9HRU5fSVJRbl9wcmlvX01zayAgICAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIwOiBCTEVfR0VOX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIwX0ZUREZfV0FLRVVQX0lSUW5fcHJpb19Qb3MgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIwOiBGVERGX1dBS0VVUF9JUlFuX3ByaW8gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIwX0ZUREZfV0FLRVVQX0lSUW5fcHJpb19Nc2sgICAoMHhmZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIwOiBGVERGX1dBS0VVUF9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIwX0ZUREZfR0VOX0lSUW5fcHJpb19Qb3MgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIwOiBGVERGX0dFTl9JUlFuX3ByaW8gKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIwX0ZUREZfR0VOX0lSUW5fcHJpb19Nc2sgICAgICAoMHhmZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJUFIwOiBGVERGX0dFTl9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JUFIxICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JUFIxX1JGQ0FMX0lSUW5fcHJpb19Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIxOiBSRkNBTF9JUlFuX3ByaW8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIxX1JGQ0FMX0lSUW5fcHJpb19Nc2sgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIxOiBSRkNBTF9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIxX0NPRVhfSVJRbl9wcmlvX1BvcyAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIxOiBDT0VYX0lSUW5fcHJpbyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIxX0NPRVhfSVJRbl9wcmlvX01zayAgICAgICAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIxOiBDT0VYX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIxX0NSWVBUT19JUlFuX3ByaW9fUG9zICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIxOiBDUllQVE9fSVJRbl9wcmlvIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIxX0NSWVBUT19JUlFuX3ByaW9fTXNrICAgICAgICAoMHhmZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIxOiBDUllQVE9fSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIxX01STV9JUlFuX3ByaW9fUG9zICAgICAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIxOiBNUk1fSVJRbl9wcmlvIChCaXQgMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIxX01STV9JUlFuX3ByaW9fTXNrICAgICAgICAgICAoMHhmZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJUFIxOiBNUk1fSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JUFIyICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JUFIyX1VBUlRfSVJRbl9wcmlvX1BvcyAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIyOiBVQVJUX0lSUW5fcHJpbyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIyX1VBUlRfSVJRbl9wcmlvX01zayAgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIyOiBVQVJUX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIyX1VBUlQyX0lSUW5fcHJpb19Qb3MgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIyOiBVQVJUMl9JUlFuX3ByaW8gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIyX1VBUlQyX0lSUW5fcHJpb19Nc2sgICAgICAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIyOiBVQVJUMl9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIyX0kyQ19JUlFuX3ByaW9fUG9zICAgICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIyOiBJMkNfSVJRbl9wcmlvIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIyX0kyQ19JUlFuX3ByaW9fTXNrICAgICAgICAgICAoMHhmZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIyOiBJMkNfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIyX0kyQzJfSVJRbl9wcmlvX1BvcyAgICAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIyOiBJMkMyX0lSUW5fcHJpbyAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIyX0kyQzJfSVJRbl9wcmlvX01zayAgICAgICAgICAoMHhmZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJUFIyOiBJMkMyX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JUFIzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JUFIzX1NQSV9JUlFuX3ByaW9fUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIzOiBTUElfSVJRbl9wcmlvIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIzX1NQSV9JUlFuX3ByaW9fTXNrICAgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIzOiBTUElfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIzX1NQSTJfSVJRbl9wcmlvX1BvcyAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIzOiBTUEkyX0lSUW5fcHJpbyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIzX1NQSTJfSVJRbl9wcmlvX01zayAgICAgICAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIzOiBTUEkyX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIzX0FEQ19JUlFuX3ByaW9fUG9zICAgICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIzOiBBRENfSVJRbl9wcmlvIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIzX0FEQ19JUlFuX3ByaW9fTXNrICAgICAgICAgICAoMHhmZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIzOiBBRENfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIzX0tFWUJSRF9JUlFuX3ByaW9fUG9zICAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFIzOiBLRVlCUkRfSVJRbl9wcmlvIChCaXQgMjQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFIzX0tFWUJSRF9JUlFuX3ByaW9fTXNrICAgICAgICAoMHhmZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJUFIzOiBLRVlCUkRfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JUFI0ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JUFI0X0lSR0VOX0lSUW5fcHJpb19Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI0OiBJUkdFTl9JUlFuX3ByaW8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI0X0lSR0VOX0lSUW5fcHJpb19Nc2sgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI0OiBJUkdFTl9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI0X1dLVVBfR1BJT19JUlFuX3ByaW9fUG9zICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI0OiBXS1VQX0dQSU9fSVJRbl9wcmlvIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI0X1dLVVBfR1BJT19JUlFuX3ByaW9fTXNrICAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI0OiBXS1VQX0dQSU9fSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI0X1NXVElNMF9JUlFuX3ByaW9fUG9zICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI0OiBTV1RJTTBfSVJRbl9wcmlvIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI0X1NXVElNMF9JUlFuX3ByaW9fTXNrICAgICAgICAoMHhmZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI0OiBTV1RJTTBfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI0X1NXVElNMV9JUlFuX3ByaW9fUG9zICAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI0OiBTV1RJTTFfSVJRbl9wcmlvIChCaXQgMjQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI0X1NXVElNMV9JUlFuX3ByaW9fTXNrICAgICAgICAoMHhmZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJUFI0OiBTV1RJTTFfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JUFI1ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JUFI1X1FVQURFQ19JUlFuX3ByaW9fUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI1OiBRVUFERUNfSVJRbl9wcmlvIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI1X1FVQURFQ19JUlFuX3ByaW9fTXNrICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI1OiBRVUFERUNfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI1X1VTQl9JUlFuX3ByaW9fUG9zICAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI1OiBVU0JfSVJRbl9wcmlvIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI1X1VTQl9JUlFuX3ByaW9fTXNrICAgICAgICAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI1OiBVU0JfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI1X1BDTV9JUlFuX3ByaW9fUG9zICAgICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI1OiBQQ01fSVJRbl9wcmlvIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI1X1BDTV9JUlFuX3ByaW9fTXNrICAgICAgICAgICAoMHhmZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI1OiBQQ01fSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI1X1NSQ19JTl9JUlFuX3ByaW9fUG9zICAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI1OiBTUkNfSU5fSVJRbl9wcmlvIChCaXQgMjQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI1X1NSQ19JTl9JUlFuX3ByaW9fTXNrICAgICAgICAoMHhmZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJUFI1OiBTUkNfSU5fSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JUFI2ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JUFI2X1NSQ19PVVRfSVJRbl9wcmlvX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI2OiBTUkNfT1VUX0lSUW5fcHJpbyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI2X1NSQ19PVVRfSVJRbl9wcmlvX01zayAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI2OiBTUkNfT1VUX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI2X1ZCVVNfSVJRbl9wcmlvX1BvcyAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI2OiBWQlVTX0lSUW5fcHJpbyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI2X1ZCVVNfSVJRbl9wcmlvX01zayAgICAgICAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI2OiBWQlVTX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI2X0RNQV9JUlFuX3ByaW9fUG9zICAgICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI2OiBETUFfSVJRbl9wcmlvIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI2X0RNQV9JUlFuX3ByaW9fTXNrICAgICAgICAgICAoMHhmZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI2OiBETUFfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI2X1JGX0RJQUdfSVJRbl9wcmlvX1BvcyAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI2OiBSRl9ESUFHX0lSUW5fcHJpbyAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI2X1JGX0RJQUdfSVJRbl9wcmlvX01zayAgICAgICAoMHhmZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgTlZJQyBJUFI2OiBSRl9ESUFHX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTlZJQ19JUFI3ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTlZJQ19JUFI3X1RSTkdfSVJRbl9wcmlvX1BvcyAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI3OiBUUk5HX0lSUW5fcHJpbyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI3X1RSTkdfSVJRbl9wcmlvX01zayAgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI3OiBUUk5HX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI3X0RDRENfSVJRbl9wcmlvX1BvcyAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI3OiBEQ0RDX0lSUW5fcHJpbyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI3X0RDRENfSVJRbl9wcmlvX01zayAgICAgICAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI3OiBEQ0RDX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI3X1hUQUwxNlJEWV9JUlFuX3ByaW9fUG9zICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI3OiBYVEFMMTZSRFlfSVJRbl9wcmlvIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI3X1hUQUwxNlJEWV9JUlFuX3ByaW9fTXNrICAgICAoMHhmZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI3OiBYVEFMMTZSRFlfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI3X1JFU0VSVkVEMzFfSVJRbl9ET05UX1VTRV9Qb3MgKDI0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBJUFI3OiBSRVNFUlZFRDMxX0lSUW5fRE9OVF9VU0UgKEJpdCAyNCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTlZJQ19JUFI3X1JFU0VSVkVEMzFfSVJRbl9ET05UX1VTRV9Nc2sgKDB4ZmYwMDAwMDBVTCkgICAgICAgICAgIC8qITwgTlZJQyBJUFI3OiBSRVNFUlZFRDMxX0lSUW5fRE9OVF9VU0UgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgKi8KKworCisKKworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICBzdHJ1Y3QgJ0FFU19IQVNIJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0FMR19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19BTEcgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0FMR19Nc2sgKDB4M1VMKSAgICAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19BTEcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0FMR19NRF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19BTEdfTUQgKEJpdCAyKSAgICAgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0FMR19NRF9Nc2sgKDB4Y1VMKSAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19BTEdfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fT1VUX01EX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX09VVF9NRCAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fT1VUX01EX01zayAoMHgxMFVMKSAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX09VVF9NRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19BRVNfS0VZX1NaX1BvcyAoNVVMKSAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fQUVTX0tFWV9TWiAoQml0IDUpICAgICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19BRVNfS0VZX1NaX01zayAoMHg2MFVMKSAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fQUVTX0tFWV9TWiAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19FTkNERUNfUG9zICg3VUwpICAgICAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fRU5DREVDIChCaXQgNykgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19FTkNERUNfTXNrICgweDgwVUwpICAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fRU5DREVDIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0lSUV9FTl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19JUlFfRU4gKEJpdCA4KSAgICAgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0lSUV9FTl9Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19JUlFfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fSEFTSF9TRUxfUG9zICg5VUwpICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0hBU0hfU0VMIChCaXQgOSkgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fSEFTSF9TRUxfTXNrICgweDIwMFVMKSAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0hBU0hfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0hBU0hfT1VUX0xFTl9Qb3MgKDEwVUwpICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19IQVNIX09VVF9MRU4gKEJpdCAxMCkgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0hBU0hfT1VUX0xFTl9Nc2sgKDB4ZmMwMFVMKSAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19IQVNIX09VVF9MRU4gKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fTU9SRV9JTl9Qb3MgKDE2VUwpICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX01PUkVfSU4gKEJpdCAxNikgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fTU9SRV9JTl9Nc2sgKDB4MTAwMDBVTCkgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX01PUkVfSU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fQUVTX0tFWFBfUG9zICgxN1VMKSAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0FFU19LRVhQIChCaXQgMTcpICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fQUVTX0tFWFBfTXNrICgweDIwMDAwVUwpICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0FFU19LRVhQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQUVTX0hBU0hfQ1JZUFRPX1NUQVJUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fU1RBUlRfUkVHX0NSWVBUT19TVEFSVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fU1RBUlRfUkVHOiBDUllQVE9fU1RBUlQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fU1RBUlRfUkVHX0NSWVBUT19TVEFSVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fU1RBUlRfUkVHOiBDUllQVE9fU1RBUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBRVNfSEFTSF9DUllQVE9fRkVUQ0hfQUREUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19GRVRDSF9BRERSX1JFR19DUllQVE9fRkVUQ0hfQUREUl9Qb3MgKDBVTCkgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19GRVRDSF9BRERSX1JFRzogQ1JZUFRPX0ZFVENIX0FERFIgKEJpdCAwKSAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19GRVRDSF9BRERSX1JFR19DUllQVE9fRkVUQ0hfQUREUl9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBBRVNfSEFTSCBDUllQVE9fRkVUQ0hfQUREUl9SRUc6IENSWVBUT19GRVRDSF9BRERSIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFFU19IQVNIX0NSWVBUT19MRU5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fTEVOX1JFR19DUllQVE9fTEVOX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fTEVOX1JFRzogQ1JZUFRPX0xFTiAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fTEVOX1JFR19DUllQVE9fTEVOX01zayAoMHhmZmZmZmZVTCkgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fTEVOX1JFRzogQ1JZUFRPX0xFTiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQUVTX0hBU0hfQ1JZUFRPX0RFU1RfQUREUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19ERVNUX0FERFJfUkVHX0NSWVBUT19ERVNUX0FERFJfUG9zICgwVUwpICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19ERVNUX0FERFJfUkVHOiBDUllQVE9fREVTVF9BRERSIChCaXQgMCkgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19ERVNUX0FERFJfUkVHX0NSWVBUT19ERVNUX0FERFJfTXNrICgweGZmZmZmZmZmVUwpIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0RFU1RfQUREUl9SRUc6IENSWVBUT19ERVNUX0FERFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFFU19IQVNIX0NSWVBUT19TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19TVEFUVVNfUkVHX0NSWVBUT19JTkFDVElWRV9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19TVEFUVVNfUkVHOiBDUllQVE9fSU5BQ1RJVkUgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19TVEFUVVNfUkVHX0NSWVBUT19JTkFDVElWRV9Nc2sgKDB4MVVMKSAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19TVEFUVVNfUkVHOiBDUllQVE9fSU5BQ1RJVkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19TVEFUVVNfUkVHX0NSWVBUT19XQUlUX0ZPUl9JTl9Qb3MgKDFVTCkgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19TVEFUVVNfUkVHOiBDUllQVE9fV0FJVF9GT1JfSU4gKEJpdCAxKSAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19TVEFUVVNfUkVHX0NSWVBUT19XQUlUX0ZPUl9JTl9Nc2sgKDB4MlVMKSAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19TVEFUVVNfUkVHOiBDUllQVE9fV0FJVF9GT1JfSU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19TVEFUVVNfUkVHX0NSWVBUT19JUlFfU1RfUG9zICgyVUwpICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19TVEFUVVNfUkVHOiBDUllQVE9fSVJRX1NUIChCaXQgMikgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19TVEFUVVNfUkVHX0NSWVBUT19JUlFfU1RfTXNrICgweDRVTCkgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19TVEFUVVNfUkVHOiBDUllQVE9fSVJRX1NUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBRVNfSEFTSF9DUllQVE9fQ0xSSVJRX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ0xSSVJRX1JFR19DUllQVE9fQ0xSSVJRX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ0xSSVJRX1JFRzogQ1JZUFRPX0NMUklSUSAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ0xSSVJRX1JFR19DUllQVE9fQ0xSSVJRX01zayAoMHgxVUwpICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ0xSSVJRX1JFRzogQ1JZUFRPX0NMUklSUSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFFU19IQVNIX0NSWVBUT19NUkVHMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX01SRUcwX1JFR19DUllQVE9fTVJFRzBfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX01SRUcwX1JFRzogQ1JZUFRPX01SRUcwIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX01SRUcwX1JFR19DUllQVE9fTVJFRzBfTXNrICgweGZmZmZmZmZmVUwpICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX01SRUcwX1JFRzogQ1JZUFRPX01SRUcwIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQUVTX0hBU0hfQ1JZUFRPX01SRUcxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fTVJFRzFfUkVHX0NSWVBUT19NUkVHMV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fTVJFRzFfUkVHOiBDUllQVE9fTVJFRzEgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fTVJFRzFfUkVHX0NSWVBUT19NUkVHMV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fTVJFRzFfUkVHOiBDUllQVE9fTVJFRzEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBRVNfSEFTSF9DUllQVE9fTVJFRzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19NUkVHMl9SRUdfQ1JZUFRPX01SRUcyX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19NUkVHMl9SRUc6IENSWVBUT19NUkVHMiAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19NUkVHMl9SRUdfQ1JZUFRPX01SRUcyX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19NUkVHMl9SRUc6IENSWVBUT19NUkVHMiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFFU19IQVNIX0NSWVBUT19NUkVHM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX01SRUczX1JFR19DUllQVE9fTVJFRzNfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX01SRUczX1JFRzogQ1JZUFRPX01SRUczIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX01SRUczX1JFR19DUllQVE9fTVJFRzNfTXNrICgweGZmZmZmZmZmVUwpICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX01SRUczX1JFRzogQ1JZUFRPX01SRUczIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBRVNfSEFTSF9DUllQVE9fS0VZU19TVEFSVCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fS0VZU19TVEFSVF9DUllQVE9fS0VZX1hfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fS0VZU19TVEFSVDogQ1JZUFRPX0tFWV9YIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fS0VZU19TVEFSVF9DUllQVE9fS0VZX1hfTXNrICgweGZmZmZmZmZmVUwpICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fS0VZU19TVEFSVDogQ1JZUFRPX0tFWV9YIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICBzdHJ1Y3QgJ0FOQU1JU0MnIFBvc2l0aW9uICYgTWFzayAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX0FOQV9URVNUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX0FOQV9URVNUX1JFR19URVNUX1NUUlVDVFVSRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIEFOQV9URVNUX1JFRzogVEVTVF9TVFJVQ1RVUkUgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0FOQV9URVNUX1JFR19URVNUX1NUUlVDVFVSRV9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIEFOQV9URVNUX1JFRzogVEVTVF9TVFJVQ1RVUkUgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAqLworI2RlZmluZSBBTkFNSVNDX0FOQV9URVNUX1JFR19BQ09SRV9URVNUQlVTX0VOX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIEFOQV9URVNUX1JFRzogQUNPUkVfVEVTVEJVU19FTiAoQml0IDQpICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0FOQV9URVNUX1JFR19BQ09SRV9URVNUQlVTX0VOX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIEFOQV9URVNUX1JFRzogQUNPUkVfVEVTVEJVU19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwxX1JFR19DSEFSR0VfTEVWRUxfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwxX1JFRzogQ0hBUkdFX0xFVkVMIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwxX1JFR19DSEFSR0VfTEVWRUxfTXNrICgweDFmVUwpICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwxX1JFRzogQ0hBUkdFX0xFVkVMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX0NIQVJHRV9PTl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBDSEFSR0VfT04gKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX0NIQVJHRV9PTl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBDSEFSR0VfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX05UQ19ESVNBQkxFX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBOVENfRElTQUJMRSAoQml0IDYpICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX05UQ19ESVNBQkxFX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBOVENfRElTQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwxX1JFR19OVENfTE9XX0RJU0FCTEVfUG9zICg3VUwpICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwxX1JFRzogTlRDX0xPV19ESVNBQkxFIChCaXQgNykgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwxX1JFR19OVENfTE9XX0RJU0FCTEVfTXNrICgweDgwVUwpICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwxX1JFRzogTlRDX0xPV19ESVNBQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX0NIQVJHRV9DVVJfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBDSEFSR0VfQ1VSIChCaXQgOCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX0NIQVJHRV9DVVJfTXNrICgweGYwMFVMKSAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBDSEFSR0VfQ1VSIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX0RJRV9URU1QX1NFVF9Qb3MgKDEyVUwpICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBESUVfVEVNUF9TRVQgKEJpdCAxMikgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX0RJRV9URU1QX1NFVF9Nc2sgKDB4MzAwMFVMKSAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBESUVfVEVNUF9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMV9SRUdfRElFX1RFTVBfRElTQUJMRV9Qb3MgKDE0VUwpICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMV9SRUc6IERJRV9URU1QX0RJU0FCTEUgKEJpdCAxNCkgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMV9SRUdfRElFX1RFTVBfRElTQUJMRV9Nc2sgKDB4NDAwMFVMKSAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMV9SRUc6IERJRV9URU1QX0RJU0FCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX0NIQVJHRVJfQ1RSTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMl9SRUdfQ1VSUkVOVF9HQUlOX1RSSU1fUG9zICgwVUwpICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMl9SRUc6IENVUlJFTlRfR0FJTl9UUklNIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMl9SRUdfQ1VSUkVOVF9HQUlOX1RSSU1fTXNrICgweGZVTCkgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMl9SRUc6IENVUlJFTlRfR0FJTl9UUklNIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDJfUkVHX0NIQVJHRVJfVkZMT0FUX0FESl9Qb3MgKDRVTCkgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDJfUkVHOiBDSEFSR0VSX1ZGTE9BVF9BREogKEJpdCA0KSAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDJfUkVHX0NIQVJHRVJfVkZMT0FUX0FESl9Nc2sgKDB4ZjBVTCkgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDJfUkVHOiBDSEFSR0VSX1ZGTE9BVF9BREogKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMl9SRUdfQ1VSUkVOVF9PRkZTRVRfVFJJTV9Qb3MgKDhVTCkgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMl9SRUc6IENVUlJFTlRfT0ZGU0VUX1RSSU0gKEJpdCA4KSAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMl9SRUdfQ1VSUkVOVF9PRkZTRVRfVFJJTV9Nc2sgKDB4MWYwMFVMKSAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMl9SRUc6IENVUlJFTlRfT0ZGU0VUX1RSSU0gKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMl9SRUdfQ0hBUkdFUl9URVNUX1BvcyAoMTNVTCkgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMl9SRUc6IENIQVJHRVJfVEVTVCAoQml0IDEzKSAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMl9SRUdfQ0hBUkdFUl9URVNUX01zayAoMHhlMDAwVUwpICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMl9SRUc6IENIQVJHRVJfVEVTVCAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19DSEFSR0VSX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX1NUQVRVU19SRUdfQ0hBUkdFUl9DQ19NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX1NUQVRVU19SRUc6IENIQVJHRVJfQ0NfTU9ERSAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX1NUQVRVU19SRUdfQ0hBUkdFUl9DQ19NT0RFX01zayAoMHgxVUwpICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX1NUQVRVU19SRUc6IENIQVJHRVJfQ0NfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX1NUQVRVU19SRUdfQ0hBUkdFUl9DVl9NT0RFX1BvcyAoMVVMKSAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX1NUQVRVU19SRUc6IENIQVJHRVJfQ1ZfTU9ERSAoQml0IDEpICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX1NUQVRVU19SRUdfQ0hBUkdFUl9DVl9NT0RFX01zayAoMHgyVUwpICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX1NUQVRVU19SRUc6IENIQVJHRVJfQ1ZfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX1NUQVRVU19SRUdfRU5EX09GX0NIQVJHRV9Qb3MgKDJVTCkgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX1NUQVRVU19SRUc6IEVORF9PRl9DSEFSR0UgKEJpdCAyKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX1NUQVRVU19SRUdfRU5EX09GX0NIQVJHRV9Nc2sgKDB4NFVMKSAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX1NUQVRVU19SRUc6IEVORF9PRl9DSEFSR0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9TVEFUVVNfUkVHX0NIQVJHRVJfQkFUVEVNUF9MT1dfUG9zICgzVUwpICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9TVEFUVVNfUkVHOiBDSEFSR0VSX0JBVFRFTVBfTE9XIChCaXQgMykgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9TVEFUVVNfUkVHX0NIQVJHRVJfQkFUVEVNUF9MT1dfTXNrICgweDhVTCkgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9TVEFUVVNfUkVHOiBDSEFSR0VSX0JBVFRFTVBfTE9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfU1RBVFVTX1JFR19DSEFSR0VSX0JBVFRFTVBfT0tfUG9zICg0VUwpICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfU1RBVFVTX1JFRzogQ0hBUkdFUl9CQVRURU1QX09LIChCaXQgNCkgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfU1RBVFVTX1JFR19DSEFSR0VSX0JBVFRFTVBfT0tfTXNrICgweDEwVUwpICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfU1RBVFVTX1JFRzogQ0hBUkdFUl9CQVRURU1QX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfU1RBVFVTX1JFR19DSEFSR0VSX0JBVFRFTVBfSElHSF9Qb3MgKDVVTCkgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfU1RBVFVTX1JFRzogQ0hBUkdFUl9CQVRURU1QX0hJR0ggKEJpdCA1KSAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfU1RBVFVTX1JFR19DSEFSR0VSX0JBVFRFTVBfSElHSF9Nc2sgKDB4MjBVTCkgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfU1RBVFVTX1JFRzogQ0hBUkdFUl9CQVRURU1QX0hJR0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9TVEFUVVNfUkVHX0NIQVJHRVJfVE1PREVfUFJPVF9Qb3MgKDZVTCkgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9TVEFUVVNfUkVHOiBDSEFSR0VSX1RNT0RFX1BST1QgKEJpdCA2KSAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9TVEFUVVNfUkVHX0NIQVJHRVJfVE1PREVfUFJPVF9Nc2sgKDB4NDBVTCkgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9TVEFUVVNfUkVHOiBDSEFSR0VSX1RNT0RFX1BST1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfU09DX0NUUkwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0NUUkwxX1JFR19TT0NfRU5BQkxFX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0NUUkwxX1JFRzogU09DX0VOQUJMRSAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0NUUkwxX1JFR19TT0NfRU5BQkxFX01zayAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0NUUkwxX1JFRzogU09DX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0NUUkwxX1JFR19TT0NfUkVTRVRfQ0hBUkdFX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0NUUkwxX1JFRzogU09DX1JFU0VUX0NIQVJHRSAoQml0IDEpICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0NUUkwxX1JFR19TT0NfUkVTRVRfQ0hBUkdFX01zayAoMHgyVUwpICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0NUUkwxX1JFRzogU09DX1JFU0VUX0NIQVJHRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19SRVNFVF9BVkdfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfUkVTRVRfQVZHIChCaXQgMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19SRVNFVF9BVkdfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfUkVTRVRfQVZHIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19NVVRFX1BvcyAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfTVVURSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19NVVRFX01zayAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfTVVURSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19HUElPX1BvcyAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfR1BJTyAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19HUElPX01zayAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfR1BJTyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19TSUdOX1BvcyAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfU0lHTiAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19TSUdOX01zayAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfU0lHTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19JREFDX1BvcyAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfSURBQyAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19JREFDX01zayAgICAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfSURBQyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19MUEZfUG9zICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfTFBGIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19MUEZfTXNrICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfTFBGIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19DTEtfUG9zICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfQ0xLIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19DTEtfTXNrICAgICAoMHhlMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfQ0xLIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19CSUFTX1BvcyAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfQklBUyAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19CSUFTX01zayAgICAoMHgzMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfQklBUyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19DSU5UX1BvcyAgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfQ0lOVCAoQml0IDE0KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19DSU5UX01zayAgICAoMHhjMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfQ0lOVCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19SVklfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfUlZJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19SVklfTXNrICAgICAoMHgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfUlZJIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19TQ1lDTEVfUG9zICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfU0NZQ0xFIChCaXQgMikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19TQ1lDTEVfTXNrICAoMHgxY1VMKSAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfU0NZQ0xFIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19EQ1lDTEVfUG9zICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfRENZQ0xFIChCaXQgNSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19EQ1lDTEVfTXNrICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfRENZQ0xFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19JQ01fUG9zICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfSUNNIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19JQ01fTXNrICAgICAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfSUNNIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19DSE9QX1BvcyAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfQ0hPUCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19DSE9QX01zayAgICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfQ0hPUCAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19DTUlSRUdfRU5BQkxFX1BvcyAoMTFVTCkgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfQ01JUkVHX0VOQUJMRSAoQml0IDExKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19DTUlSRUdfRU5BQkxFX01zayAoMHg4MDBVTCkgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfQ01JUkVHX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19NQVdfUG9zICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfTUFXIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19NQVdfTXNrICAgICAoMHg3MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfTUFXIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19EWU5BVkdfUG9zICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfRFlOQVZHIChCaXQgMTUpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDJfUkVHX1NPQ19EWU5BVkdfTXNrICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDJfUkVHOiBTT0NfRFlOQVZHIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19TT0NfQ1RSTDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDNfUkVHX1NPQ19WU0FUX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDNfUkVHOiBTT0NfVlNBVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDNfUkVHX1NPQ19WU0FUX01zayAgICAoMHgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDNfUkVHOiBTT0NfVlNBVCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDNfUkVHX1NPQ19EWU5UQVJHX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDNfUkVHOiBTT0NfRFlOVEFSRyAoQml0IDIpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDNfUkVHX1NPQ19EWU5UQVJHX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDNfUkVHOiBTT0NfRFlOVEFSRyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDNfUkVHX1NPQ19EWU5IWVNfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDNfUkVHOiBTT0NfRFlOSFlTIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDNfUkVHX1NPQ19EWU5IWVNfTXNrICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDNfUkVHOiBTT0NfRFlOSFlTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDNfUkVHX1NPQ19WQ01JX1BvcyAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDNfUkVHOiBTT0NfVkNNSSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDNfUkVHX1NPQ19WQ01JX01zayAgICAoMHgzMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDNfUkVHOiBTT0NfVkNNSSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX1NPQ19BREQyQ0hfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQUREMkNIX1JFR19TT0NfQUREMkNIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQUREMkNIX1JFRzogU09DX0FERDJDSCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQUREMkNIX1JFR19TT0NfQUREMkNIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQUREMkNIX1JFRzogU09DX0FERDJDSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX1NPQ19DSEFSR0VfQ05UUjFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ0hBUkdFX0NOVFIxX1JFR19DSEFSR0VfQ05UMV9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ0hBUkdFX0NOVFIxX1JFRzogQ0hBUkdFX0NOVDEgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ0hBUkdFX0NOVFIxX1JFR19DSEFSR0VfQ05UMV9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ0hBUkdFX0NOVFIxX1JFRzogQ0hBUkdFX0NOVDEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX1NPQ19DSEFSR0VfQ05UUjJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ0hBUkdFX0NOVFIyX1JFR19DSEFSR0VfQ05UMl9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ0hBUkdFX0NOVFIyX1JFRzogQ0hBUkdFX0NOVDIgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ0hBUkdFX0NOVFIyX1JFR19DSEFSR0VfQ05UMl9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ0hBUkdFX0NOVFIyX1JFRzogQ0hBUkdFX0NOVDIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX1NPQ19DSEFSR0VfQ05UUjNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ0hBUkdFX0NOVFIzX1JFR19DSEFSR0VfQ05UM19Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ0hBUkdFX0NOVFIzX1JFRzogQ0hBUkdFX0NOVDMgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ0hBUkdFX0NOVFIzX1JFR19DSEFSR0VfQ05UM19Nc2sgKDB4ZmZVTCkgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ0hBUkdFX0NOVFIzX1JFRzogQ0hBUkdFX0NOVDMgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfU09DX0NIQVJHRV9BVkdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0NIQVJHRV9BVkdfUkVHX0NIQVJHRV9BVkdfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0NIQVJHRV9BVkdfUkVHOiBDSEFSR0VfQVZHIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0NIQVJHRV9BVkdfUkVHX0NIQVJHRV9BVkdfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0NIQVJHRV9BVkdfUkVHOiBDSEFSR0VfQVZHIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19TT0NfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFOQU1JU0NfU09DX1NUQVRVU19SRUdfU09DX0lOVF9PVkVSTE9BRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX1NUQVRVU19SRUc6IFNPQ19JTlRfT1ZFUkxPQUQgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX1NUQVRVU19SRUdfU09DX0lOVF9PVkVSTE9BRF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX1NUQVRVU19SRUc6IFNPQ19JTlRfT1ZFUkxPQUQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFOQU1JU0NfU09DX1NUQVRVU19SRUdfU09DX0lOVF9MT0NLRURfUG9zICgxVUwpICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX1NUQVRVU19SRUc6IFNPQ19JTlRfTE9DS0VEIChCaXQgMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX1NUQVRVU19SRUdfU09DX0lOVF9MT0NLRURfTXNrICgweDJVTCkgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX1NUQVRVU19SRUc6IFNPQ19JTlRfTE9DS0VEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfU09DX0VYVF9JTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19JREFDX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfSURBQ19WQUwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19JREFDX1ZBTF9Nc2sgKDB4MWZmVUwpICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfSURBQ19WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MWZmKSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19JREFDX1NJR05fUG9zICg5VUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfSURBQ19TSUdOIChCaXQgOSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19JREFDX1NJR05fTXNrICgweDIwMFVMKSAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfSURBQ19TSUdOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19SREFDX0RJU19Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfUkRBQ19ESVMgKEJpdCAxMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19SREFDX0RJU19Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfUkRBQ19ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19OUl9TQ1lDTEVfUG9zICgxMVVMKSAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfTlJfU0NZQ0xFIChCaXQgMTEpICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19OUl9TQ1lDTEVfTXNrICgweDM4MDBVTCkgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfTlJfU0NZQ0xFIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19FWFRfU0NZQ0xFX0VOX1BvcyAoMTRVTCkgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfRVhUX1NDWUNMRV9FTiAoQml0IDE0KSAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19FWFRfU0NZQ0xFX0VOX01zayAoMHg0MDAwVUwpICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfRVhUX1NDWUNMRV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfRVhUX0lOX1JFR19TT0NfRVhUX0lEQUNfRU5fUG9zICgxNVVMKSAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfRVhUX0lOX1JFRzogU09DX0VYVF9JREFDX0VOIChCaXQgMTUpICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfRVhUX0lOX1JFR19TT0NfRVhUX0lEQUNfRU5fTXNrICgweDgwMDBVTCkgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfRVhUX0lOX1JFRzogU09DX0VYVF9JREFDX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfSElHSF9MSU1fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX0hJR0hfTElNIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfSElHSF9MSU1fTXNrICgweDFVTCkgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX0hJR0hfTElNIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfTE9XTElNX0NPTVBfUG9zICgxVUwpICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX0xPV0xJTV9DT01QIChCaXQgMSkgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfTE9XTElNX0NPTVBfTXNrICgweDJVTCkgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX0xPV0xJTV9DT01QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfUE9TX0NPTVBfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX1BPU19DT01QIChCaXQgMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfUE9TX0NPTVBfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX1BPU19DT01QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfUklTSU5HX0NPTVBfUG9zICgzVUwpICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX1JJU0lOR19DT01QIChCaXQgMykgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfUklTSU5HX0NPTVBfTXNrICgweDhVTCkgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX1JJU0lOR19DT01QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfU1RBVEVfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX1NUQVRFIChCaXQgNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfU1RBVEVfTXNrICgweGYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX1NUQVRFIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfQ1RSTF9FVkVOVF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX0NUUkxfRVZFTlQgKEJpdCA4KSAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfT1VUX1JFR19TT0NfQ1RSTF9FVkVOVF9Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfT1VUX1JFRzogU09DX0NUUkxfRVZFTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19DTEtfUkVGX1NFTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFOQU1JU0NfQ0xLX1JFRl9TRUxfUkVHX1JFRl9DTEtfU0VMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0xLX1JFRl9TRUxfUkVHOiBSRUZfQ0xLX1NFTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0xLX1JFRl9TRUxfUkVHX1JFRl9DTEtfU0VMX01zayAoMHgzVUwpICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0xLX1JFRl9TRUxfUkVHOiBSRUZfQ0xLX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMykgICovCisjZGVmaW5lIEFOQU1JU0NfQ0xLX1JFRl9TRUxfUkVHX1JFRl9DQUxfU1RBUlRfUG9zICgyVUwpICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0xLX1JFRl9TRUxfUkVHOiBSRUZfQ0FMX1NUQVJUIChCaXQgMikgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0xLX1JFRl9TRUxfUkVHX1JFRl9DQUxfU1RBUlRfTXNrICgweDRVTCkgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0xLX1JFRl9TRUxfUkVHOiBSRUZfQ0FMX1NUQVJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfQ0xLX1JFRl9DTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX0NMS19SRUZfQ05UX1JFR19SRUZfQ05UX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENMS19SRUZfQ05UX1JFRzogUkVGX0NOVF9WQUwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NMS19SRUZfQ05UX1JFR19SRUZfQ05UX1ZBTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENMS19SRUZfQ05UX1JFRzogUkVGX0NOVF9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfQ0xLX1JFRl9WQUxfTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19DTEtfUkVGX1ZBTF9MX1JFR19YVEFMX0NOVF9WQUxfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDTEtfUkVGX1ZBTF9MX1JFRzogWFRBTF9DTlRfVkFMIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DTEtfUkVGX1ZBTF9MX1JFR19YVEFMX0NOVF9WQUxfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgQU5BTUlTQyBDTEtfUkVGX1ZBTF9MX1JFRzogWFRBTF9DTlRfVkFMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX0NMS19SRUZfVkFMX0hfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFOQU1JU0NfQ0xLX1JFRl9WQUxfSF9SRUdfWFRBTF9DTlRfVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0xLX1JFRl9WQUxfSF9SRUc6IFhUQUxfQ05UX1ZBTCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0xLX1JFRl9WQUxfSF9SRUdfWFRBTF9DTlRfVkFMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0xLX1JFRl9WQUxfSF9SRUc6IFhUQUxfQ05UX1ZBTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnQVBVJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFQVV9TUkMxX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfRU5fUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfRU5fTXNrICAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fQU1PREVfUG9zICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX0FNT0RFIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fQU1PREVfTXNrICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX0FNT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fQ0FMX0JZUEFTU19Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX0NBTF9CWVBBU1MgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fQ0FMX0JZUEFTU19Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX0NBTF9CWVBBU1MgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fRFNfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX0RTIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fRFNfTXNrICAgICAgICgweDMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX0RTIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fT0tfUG9zICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX09LIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fT0tfTXNrICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfRElUSEVSX0RJU0FCTEVfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0RJVEhFUl9ESVNBQkxFIChCaXQgNykgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfRElUSEVSX0RJU0FCTEVfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0RJVEhFUl9ESVNBQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX0FNT0RFX1BvcyAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9BTU9ERSAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX0FNT0RFX01zayAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9BTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX0NBTF9CWVBBU1NfUG9zICgxNFVMKSAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9DQUxfQllQQVNTIChCaXQgMTQpICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX0NBTF9CWVBBU1NfTXNrICgweDQwMDBVTCkgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9DQUxfQllQQVNTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX1VTX1BvcyAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9VUyAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX1VTX01zayAgICAgICgweDMwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9VUyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX09LX1BvcyAgICAgICgxOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9PSyAoQml0IDE4KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX09LX01zayAgICAgICgweDQwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfUkVTWU5DX1BvcyAgICAgICgxOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX1JFU1lOQyAoQml0IDE5KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfUkVTWU5DX01zayAgICAgICgweDgwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX1JFU1lOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fT1ZGTE9XX1BvcyAgICgyMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX09WRkxPVyAoQml0IDIwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fT1ZGTE9XX01zayAgICgweDEwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX09WRkxPVyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fVU5GTE9XX1BvcyAgICgyMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX1VORkxPVyAoQml0IDIxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fVU5GTE9XX01zayAgICgweDIwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX1VORkxPVyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX09WRkxPV19Qb3MgICgyMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9PVkZMT1cgKEJpdCAyMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX09WRkxPV19Nc2sgICgweDQwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9PVkZMT1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX1VORkxPV19Qb3MgICgyM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9VTkZMT1cgKEJpdCAyMykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX1VORkxPV19Nc2sgICgweDgwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9VTkZMT1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fRkxPV0NMUl9Qb3MgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX0ZMT1dDTFIgKEJpdCAyNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfSU5fRkxPV0NMUl9Nc2sgICgweDEwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX0lOX0ZMT1dDTFIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX0ZMT1dDTFJfUG9zICgyNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9GTE9XQ0xSIChCaXQgMjUpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfT1VUX0ZMT1dDTFJfTXNrICgweDIwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX09VVF9GTE9XQ0xSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfUERNX0RJX0RFTF9Qb3MgICgyNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX1BETV9ESV9ERUwgKEJpdCAyNikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfUERNX0RJX0RFTF9Nc2sgICgweGMwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX1BETV9ESV9ERUwgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfUERNX01PREVfUG9zICAgICgyOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX1BETV9NT0RFIChCaXQgMjgpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfUERNX01PREVfTXNrICAgICgweDMwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX1BETV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfUERNX0RPX0RFTF9Qb3MgICgzMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX1BETV9ET19ERUwgKEJpdCAzMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9DVFJMX1JFR19TUkNfUERNX0RPX0RFTF9Nc2sgICgweGMwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9DVFJMX1JFRzogU1JDX1BETV9ET19ERUwgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1NSQzFfSU5fRlNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfU1JDMV9JTl9GU19SRUdfU1JDX0lOX0ZTX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9JTl9GU19SRUc6IFNSQ19JTl9GUyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9JTl9GU19SRUdfU1JDX0lOX0ZTX01zayAgICAgICgweGZmZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9JTl9GU19SRUc6IFNSQ19JTl9GUyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmYpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1NSQzFfT1VUX0ZTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfU1JDMV9PVVRfRlNfUkVHX1NSQ19PVVRfRlNfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9PVVRfRlNfUkVHOiBTUkNfT1VUX0ZTIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9PVVRfRlNfUkVHX1NSQ19PVVRfRlNfTXNrICAgICgweGZmZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9PVVRfRlNfUkVHOiBTUkNfT1VUX0ZTIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFQVV9TUkMxX0lOMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfU1JDMV9JTjFfUkVHX1NSQ19JTl9Qb3MgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9JTjFfUkVHOiBTUkNfSU4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9JTjFfUkVHX1NSQ19JTl9Nc2sgICAgICAgICAgICgweGZmZmZmZjAwVUwpICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9JTjFfUkVHOiBTUkNfSU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFQVV9TUkMxX0lOMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfU1JDMV9JTjJfUkVHX1NSQ19JTl9Qb3MgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9JTjJfUkVHOiBTUkNfSU4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9JTjJfUkVHX1NSQ19JTl9Nc2sgICAgICAgICAgICgweGZmZmZmZjAwVUwpICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9JTjJfUkVHOiBTUkNfSU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFQVV9TUkMxX09VVDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfU1JDMV9PVVQxX1JFR19TUkNfT1VUX1BvcyAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9PVVQxX1JFRzogU1JDX09VVCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9PVVQxX1JFR19TUkNfT1VUX01zayAgICAgICAgICgweGZmZmZmZjAwVUwpICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9PVVQxX1JFRzogU1JDX09VVCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmYpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFQVV9TUkMxX09VVDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfU1JDMV9PVVQyX1JFR19TUkNfT1VUX1BvcyAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9PVVQyX1JFRzogU1JDX09VVCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfU1JDMV9PVVQyX1JFR19TUkNfT1VUX01zayAgICAgICAgICgweGZmZmZmZjAwVUwpICAgICAgICAgICAgLyohPCBBUFUgU1JDMV9PVVQyX1JFRzogU1JDX09VVCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmYpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBUFVfQVBVX01VWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfQVBVX01VWF9SRUdfU1JDMV9NVVhfSU5fUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQVBVX01VWF9SRUc6IFNSQzFfTVVYX0lOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQVBVX01VWF9SRUdfU1JDMV9NVVhfSU5fTXNrICAgICAgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQVBVX01VWF9SRUc6IFNSQzFfTVVYX0lOIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgICAqLworI2RlZmluZSBBUFVfQVBVX01VWF9SRUdfUENNMV9NVVhfSU5fUG9zICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQVBVX01VWF9SRUc6IFBDTTFfTVVYX0lOIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQVBVX01VWF9SRUdfUENNMV9NVVhfSU5fTXNrICAgICAgICgweDM4VUwpICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQVBVX01VWF9SRUc6IFBDTTFfTVVYX0lOIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgICAqLworI2RlZmluZSBBUFVfQVBVX01VWF9SRUdfUERNMV9NVVhfSU5fUG9zICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQVBVX01VWF9SRUc6IFBETTFfTVVYX0lOIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQVBVX01VWF9SRUdfUERNMV9NVVhfSU5fTXNrICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQVBVX01VWF9SRUc6IFBETTFfTVVYX0lOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX0NPRUYxMF9TRVQxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfQ09FRjEwX1NFVDFfUkVHX1NSQ19DT0VGMF9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjEwX1NFVDFfUkVHOiBTUkNfQ09FRjAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjEwX1NFVDFfUkVHX1NSQ19DT0VGMF9Nc2sgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjEwX1NFVDFfUkVHOiBTUkNfQ09FRjAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjEwX1NFVDFfUkVHX1NSQ19DT0VGMV9Qb3MgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjEwX1NFVDFfUkVHOiBTUkNfQ09FRjEgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjEwX1NFVDFfUkVHX1NSQ19DT0VGMV9Nc2sgICAgICgweGZmZmYwMDAwVUwpICAgICAgICAgICAgLyohPCBBUFUgQ09FRjEwX1NFVDFfUkVHOiBTUkNfQ09FRjEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX0NPRUYzMl9TRVQxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfQ09FRjMyX1NFVDFfUkVHX1NSQ19DT0VGMl9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjMyX1NFVDFfUkVHOiBTUkNfQ09FRjIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjMyX1NFVDFfUkVHX1NSQ19DT0VGMl9Nc2sgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjMyX1NFVDFfUkVHOiBTUkNfQ09FRjIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjMyX1NFVDFfUkVHX1NSQ19DT0VGM19Qb3MgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjMyX1NFVDFfUkVHOiBTUkNfQ09FRjMgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjMyX1NFVDFfUkVHX1NSQ19DT0VGM19Nc2sgICAgICgweGZmZmYwMDAwVUwpICAgICAgICAgICAgLyohPCBBUFUgQ09FRjMyX1NFVDFfUkVHOiBTUkNfQ09FRjMgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX0NPRUY1NF9TRVQxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfQ09FRjU0X1NFVDFfUkVHX1NSQ19DT0VGNF9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjU0X1NFVDFfUkVHOiBTUkNfQ09FRjQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjU0X1NFVDFfUkVHX1NSQ19DT0VGNF9Nc2sgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjU0X1NFVDFfUkVHOiBTUkNfQ09FRjQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjU0X1NFVDFfUkVHX1NSQ19DT0VGNV9Qb3MgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjU0X1NFVDFfUkVHOiBTUkNfQ09FRjUgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjU0X1NFVDFfUkVHX1NSQ19DT0VGNV9Nc2sgICAgICgweGZmZmYwMDAwVUwpICAgICAgICAgICAgLyohPCBBUFUgQ09FRjU0X1NFVDFfUkVHOiBTUkNfQ09FRjUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX0NPRUY3Nl9TRVQxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfQ09FRjc2X1NFVDFfUkVHX1NSQ19DT0VGNl9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjc2X1NFVDFfUkVHOiBTUkNfQ09FRjYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjc2X1NFVDFfUkVHX1NSQ19DT0VGNl9Nc2sgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjc2X1NFVDFfUkVHOiBTUkNfQ09FRjYgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjc2X1NFVDFfUkVHX1NSQ19DT0VGN19Qb3MgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjc2X1NFVDFfUkVHOiBTUkNfQ09FRjcgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjc2X1NFVDFfUkVHX1NSQ19DT0VGN19Nc2sgICAgICgweGZmZmYwMDAwVUwpICAgICAgICAgICAgLyohPCBBUFUgQ09FRjc2X1NFVDFfUkVHOiBTUkNfQ09FRjcgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX0NPRUY5OF9TRVQxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfQ09FRjk4X1NFVDFfUkVHX1NSQ19DT0VGOF9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjk4X1NFVDFfUkVHOiBTUkNfQ09FRjggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjk4X1NFVDFfUkVHX1NSQ19DT0VGOF9Nc2sgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjk4X1NFVDFfUkVHOiBTUkNfQ09FRjggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjk4X1NFVDFfUkVHX1NSQ19DT0VGOV9Qb3MgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjk4X1NFVDFfUkVHOiBTUkNfQ09FRjkgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjk4X1NFVDFfUkVHX1NSQ19DT0VGOV9Nc2sgICAgICgweGZmZmYwMDAwVUwpICAgICAgICAgICAgLyohPCBBUFUgQ09FRjk4X1NFVDFfUkVHOiBTUkNfQ09FRjkgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX0NPRUYwQV9TRVQxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfQ09FRjBBX1NFVDFfUkVHX1NSQ19DT0VGMTBfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjBBX1NFVDFfUkVHOiBTUkNfQ09FRjEwIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfQ09FRjBBX1NFVDFfUkVHX1NSQ19DT0VGMTBfTXNrICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBBUFUgQ09FRjBBX1NFVDFfUkVHOiBTUkNfQ09FRjEwIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFQVV9QQ00xX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRU5fUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRU5fTXNrICAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fTUFTVEVSX1BvcyAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX01BU1RFUiAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fTUFTVEVSX01zayAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX01BU1RFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRlNDTEVOX1BvcyAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0ZTQ0xFTiAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRlNDTEVOX01zayAgICAgICgweDNjVUwpICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0ZTQ0xFTiAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRlNDREVMX1BvcyAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0ZTQ0RFTCAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRlNDREVMX01zayAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0ZTQ0RFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fUFBPRF9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX1BQT0QgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fUFBPRF9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX1BQT0QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fQ0xLSU5WX1BvcyAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0NMS0lOViAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fQ0xLSU5WX01zayAgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0NMS0lOViAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRlNDSU5WX1BvcyAgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0ZTQ0lOViAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRlNDSU5WX01zayAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0ZTQ0lOViAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fQ0xLX0JJVF9Qb3MgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0NMS19CSVQgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fQ0xLX0JJVF9Nc2sgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0NMS19CSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fQ0hfREVMX1BvcyAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0NIX0RFTCAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fQ0hfREVMX01zayAgICAgICgweGY4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0NIX0RFTCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRlNDX0VER0VfUG9zICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0ZTQ19FREdFIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRlNDX0VER0VfTXNrICAgICgweDEwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0ZTQ19FREdFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRlNDX0RJVl9Qb3MgICAgICgyMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0ZTQ19ESVYgKEJpdCAyMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9DVFJMX1JFR19QQ01fRlNDX0RJVl9Nc2sgICAgICgweGZmZjAwMDAwVUwpICAgICAgICAgICAgLyohPCBBUFUgUENNMV9DVFJMX1JFRzogUENNX0ZTQ19ESVYgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFQVV9QQ00xX0lOMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfUENNMV9JTjFfUkVHX1BDTV9JTl9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9JTjFfUkVHOiBQQ01fSU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9JTjFfUkVHX1BDTV9JTl9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBBUFUgUENNMV9JTjFfUkVHOiBQQ01fSU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFQVV9QQ00xX0lOMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfUENNMV9JTjJfUkVHX1BDTV9JTl9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9JTjJfUkVHOiBQQ01fSU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9JTjJfUkVHX1BDTV9JTl9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBBUFUgUENNMV9JTjJfUkVHOiBQQ01fSU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFQVV9QQ00xX09VVDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfUENNMV9PVVQxX1JFR19QQ01fT1VUX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9PVVQxX1JFRzogUENNX09VVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9PVVQxX1JFR19QQ01fT1VUX01zayAgICAgICAgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBBUFUgUENNMV9PVVQxX1JFRzogUENNX09VVCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFQVV9QQ00xX09VVDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBUFVfUENNMV9PVVQyX1JFR19QQ01fT1VUX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFUgUENNMV9PVVQyX1JFRzogUENNX09VVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUFVfUENNMV9PVVQyX1JFR19QQ01fT1VUX01zayAgICAgICAgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBBUFUgUENNMV9PVVQyX1JFRzogUENNX09VVCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgICAgICAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnQkxFJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1JXQkxFQ05UTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfU1lOQ0VSUl9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFNZTkNFUlIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfU1lOQ0VSUl9Nc2sgICAgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFNZTkNFUlIgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfUlhXSU5TWkRFRl9Qb3MgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFJYV0lOU1pERUYgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfUlhXSU5TWkRFRl9Nc2sgICgweGYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFJYV0lOU1pERUYgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfUldCTEVfRU5fUG9zICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFJXQkxFX0VOIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfUldCTEVfRU5fTXNrICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFJXQkxFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfQURWRVJURklMVF9FTl9Qb3MgKDlVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IEFEVkVSVEZJTFRfRU4gKEJpdCA5KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfQURWRVJURklMVF9FTl9Nc2sgKDB4MjAwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IEFEVkVSVEZJTFRfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfQ09SUl9NT0RFX1BvcyAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IENPUlJfTU9ERSAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfQ09SUl9NT0RFX01zayAgICgweDMwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IENPUlJfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfSE9QX1JFTUFQX0RTQl9Qb3MgKDE2VUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IEhPUF9SRU1BUF9EU0IgKEJpdCAxNikgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfSE9QX1JFTUFQX0RTQl9Nc2sgKDB4MTAwMDBVTCkgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IEhPUF9SRU1BUF9EU0IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfQ1JDX0RTQl9Qb3MgICAgICgxN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IENSQ19EU0IgKEJpdCAxNykgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfQ1JDX0RTQl9Nc2sgICAgICgweDIwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IENSQ19EU0IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfV0hJVF9EU0JfUG9zICAgICgxOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFdISVRfRFNCIChCaXQgMTgpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfV0hJVF9EU0JfTXNrICAgICgweDQwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFdISVRfRFNCIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfQ1JZUFRfRFNCX1BvcyAgICgxOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IENSWVBUX0RTQiAoQml0IDE5KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfQ1JZUFRfRFNCX01zayAgICgweDgwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IENSWVBUX0RTQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfTkVTTl9EU0JfUG9zICAgICgyMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IE5FU05fRFNCIChCaXQgMjApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfTkVTTl9EU0JfTXNrICAgICgweDEwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IE5FU05fRFNCIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfU05fRFNCX1BvcyAgICAgICgyMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFNOX0RTQiAoQml0IDIxKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfU05fRFNCX01zayAgICAgICgweDIwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFNOX0RTQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfTURfRFNCX1BvcyAgICAgICgyMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IE1EX0RTQiAoQml0IDIyKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfTURfRFNCX01zayAgICAgICgweDQwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IE1EX0RTQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfU0NBTl9BQk9SVF9Qb3MgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFNDQU5fQUJPUlQgKEJpdCAyNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfU0NBTl9BQk9SVF9Nc2sgICgweDEwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFNDQU5fQUJPUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfQURWRVJUX0FCT1JUX1BvcyAoMjVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IEFEVkVSVF9BQk9SVCAoQml0IDI1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfQURWRVJUX0FCT1JUX01zayAoMHgyMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IEFEVkVSVF9BQk9SVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfUkZURVNUX0FCT1JUX1BvcyAoMjZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFJGVEVTVF9BQk9SVCAoQml0IDI2KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfUkZURVNUX0FCT1JUX01zayAoMHg0MDAwMDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFJGVEVTVF9BQk9SVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfU1dJTlRfUkVRX1BvcyAgICgyOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFNXSU5UX1JFUSAoQml0IDI4KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfU1dJTlRfUkVRX01zayAgICgweDEwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFNXSU5UX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfUkVHX1NPRlRfUlNUX1BvcyAoMjlVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFJFR19TT0ZUX1JTVCAoQml0IDI5KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfUkVHX1NPRlRfUlNUX01zayAoMHgyMDAwMDAwMFVMKSAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IFJFR19TT0ZUX1JTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfTUFTVEVSX1RHU09GVF9SU1RfUG9zICgzMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IE1BU1RFUl9UR1NPRlRfUlNUIChCaXQgMzApICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfTUFTVEVSX1RHU09GVF9SU1RfTXNrICgweDQwMDAwMDAwVUwpICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IE1BU1RFUl9UR1NPRlRfUlNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfTUFTVEVSX1NPRlRfUlNUX1BvcyAoMzFVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IE1BU1RFUl9TT0ZUX1JTVCAoQml0IDMxKSAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ05UTF9SRUdfTUFTVEVSX1NPRlRfUlNUX01zayAoMHg4MDAwMDAwMFVMKSAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ05UTF9SRUc6IE1BU1RFUl9TT0ZUX1JTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfVkVSU0lPTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9WRVJTSU9OX1JFR19CVUlMRF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9WRVJTSU9OX1JFRzogQlVJTEQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9WRVJTSU9OX1JFR19CVUlMRF9Nc2sgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9WRVJTSU9OX1JFRzogQlVJTEQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9WRVJTSU9OX1JFR19VUEdfUG9zICAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9WRVJTSU9OX1JFRzogVVBHIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9WRVJTSU9OX1JFR19VUEdfTXNrICAgICAgICAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9WRVJTSU9OX1JFRzogVVBHIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9WRVJTSU9OX1JFR19SRUxfUG9zICAgICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9WRVJTSU9OX1JFRzogUkVMIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9WRVJTSU9OX1JFR19SRUxfTXNrICAgICAgICAgICAoMHhmZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9WRVJTSU9OX1JFRzogUkVMIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9WRVJTSU9OX1JFR19UWVBfUG9zICAgICAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9WRVJTSU9OX1JFRzogVFlQIChCaXQgMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9WRVJTSU9OX1JFR19UWVBfTXNrICAgICAgICAgICAoMHhmZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9WRVJTSU9OX1JFRzogVFlQIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9SV0JMRUNPTkZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0JVU1dJRFRIX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBCVVNXSURUSCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0JVU1dJRFRIX01zayAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBCVVNXSURUSCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX1VTRUNSWVBUX1BvcyAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBVU0VDUllQVCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX1VTRUNSWVBUX01zayAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBVU0VDUllQVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX1VTRURCR19Qb3MgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBVU0VEQkcgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX1VTRURCR19Nc2sgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBVU0VEQkcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0NPRVhfUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBDT0VYIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0NPRVhfTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBDT0VYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0lOVE1PREVfUG9zICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBJTlRNT0RFIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0lOVE1PREVfTXNrICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBJTlRNT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0RNTU9ERV9Qb3MgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBETU1PREUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0RNTU9ERV9Nc2sgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBETU1PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0RFQ0lQSEVSX1BvcyAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBERUNJUEhFUiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0RFQ0lQSEVSX01zayAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBERUNJUEhFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0NMS19TRUxfUG9zICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBDTEtfU0VMIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0NMS19TRUxfTXNrICAgICAoMHgzZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBDTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX1JGSUZfUG9zICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBSRklGIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX1JGSUZfTXNrICAgICAgICAoMHg3ZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBSRklGIChCaXRmaWVsZC1NYXNrOiAweDdmKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0FERF9XSURUSF9Qb3MgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBBRERfV0lEVEggKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SV0JMRUNPTkZfUkVHX0FERF9XSURUSF9Nc2sgICAoMHgzZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SV0JMRUNPTkZfUkVHOiBBRERfV0lEVEggKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfSU5UQ05UTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19DU0NOVElOVE1TS19Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogQ1NDTlRJTlRNU0sgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19DU0NOVElOVE1TS19Nc2sgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogQ1NDTlRJTlRNU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19SWElOVE1TS19Qb3MgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogUlhJTlRNU0sgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19SWElOVE1TS19Nc2sgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogUlhJTlRNU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19TTFBJTlRNU0tfUG9zICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogU0xQSU5UTVNLIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19TTFBJTlRNU0tfTXNrICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogU0xQSU5UTVNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19FVkVOVElOVE1TS19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogRVZFTlRJTlRNU0sgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19FVkVOVElOVE1TS19Nc2sgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogRVZFTlRJTlRNU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19DUllQVElOVE1TS19Qb3MgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogQ1JZUFRJTlRNU0sgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19DUllQVElOVE1TS19Nc2sgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogQ1JZUFRJTlRNU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19FUlJPUklOVE1TS19Qb3MgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogRVJST1JJTlRNU0sgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19FUlJPUklOVE1TS19Nc2sgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogRVJST1JJTlRNU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19HUk9TU1RHVElNSU5UTVNLX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogR1JPU1NUR1RJTUlOVE1TSyAoQml0IDYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19HUk9TU1RHVElNSU5UTVNLX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogR1JPU1NUR1RJTUlOVE1TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19GSU5FVEdUSU1JTlRNU0tfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogRklORVRHVElNSU5UTVNLIChCaXQgNykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19GSU5FVEdUSU1JTlRNU0tfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogRklORVRHVElNSU5UTVNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19FVkVOVEFQRkFJTlRNU0tfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogRVZFTlRBUEZBSU5UTVNLIChCaXQgOCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19FVkVOVEFQRkFJTlRNU0tfTXNrICgweDEwMFVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogRVZFTlRBUEZBSU5UTVNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19TV0lOVE1TS19Qb3MgICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogU1dJTlRNU0sgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19TV0lOVE1TS19Nc2sgICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogU1dJTlRNU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19DU0NOVERFVk1TS19Qb3MgICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogQ1NDTlRERVZNU0sgKEJpdCAxNSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRDTlRMX1JFR19DU0NOVERFVk1TS19Nc2sgICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRDTlRMX1JFRzogQ1NDTlRERVZNU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfSU5UU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19DU0NOVElOVFNUQVRfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogQ1NDTlRJTlRTVEFUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19DU0NOVElOVFNUQVRfTXNrICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogQ1NDTlRJTlRTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19SWElOVFNUQVRfUG9zICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogUlhJTlRTVEFUIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19SWElOVFNUQVRfTXNrICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogUlhJTlRTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19TTFBJTlRTVEFUX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogU0xQSU5UU1RBVCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19TTFBJTlRTVEFUX01zayAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogU0xQSU5UU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19FVkVOVElOVFNUQVRfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogRVZFTlRJTlRTVEFUIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19FVkVOVElOVFNUQVRfTXNrICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogRVZFTlRJTlRTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19DUllQVElOVFNUQVRfUG9zICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogQ1JZUFRJTlRTVEFUIChCaXQgNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19DUllQVElOVFNUQVRfTXNrICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogQ1JZUFRJTlRTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19FUlJPUklOVFNUQVRfUG9zICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogRVJST1JJTlRTVEFUIChCaXQgNSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19FUlJPUklOVFNUQVRfTXNrICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogRVJST1JJTlRTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19HUk9TU1RHVElNSU5UU1RBVF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogR1JPU1NUR1RJTUlOVFNUQVQgKEJpdCA2KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19HUk9TU1RHVElNSU5UU1RBVF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogR1JPU1NUR1RJTUlOVFNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfSU5UU1RBVF9SRUdfRklORVRHVElNSU5UU1RBVF9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UU1RBVF9SRUc6IEZJTkVUR1RJTUlOVFNUQVQgKEJpdCA3KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UU1RBVF9SRUdfRklORVRHVElNSU5UU1RBVF9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UU1RBVF9SRUc6IEZJTkVUR1RJTUlOVFNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfSU5UU1RBVF9SRUdfRVZFTlRBUEZBSU5UU1RBVF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UU1RBVF9SRUc6IEVWRU5UQVBGQUlOVFNUQVQgKEJpdCA4KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UU1RBVF9SRUdfRVZFTlRBUEZBSU5UU1RBVF9Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UU1RBVF9SRUc6IEVWRU5UQVBGQUlOVFNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfSU5UU1RBVF9SRUdfU1dJTlRTVEFUX1BvcyAgICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UU1RBVF9SRUc6IFNXSU5UU1RBVCAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UU1RBVF9SRUdfU1dJTlRTVEFUX01zayAgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UU1RBVF9SRUc6IFNXSU5UU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9JTlRSQVdTVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfQ1NDTlRJTlRSQVdTVEFUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IENTQ05USU5UUkFXU1RBVCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfQ1NDTlRJTlRSQVdTVEFUX01zayAoMHgxVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IENTQ05USU5UUkFXU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19SWElOVFJBV1NUQVRfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogUlhJTlRSQVdTVEFUIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19SWElOVFJBV1NUQVRfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogUlhJTlRSQVdTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19TTFBJTlRSQVdTVEFUX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogU0xQSU5UUkFXU1RBVCAoQml0IDIpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19TTFBJTlRSQVdTVEFUX01zayAoMHg0VUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogU0xQSU5UUkFXU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19FVkVOVElOVFJBV1NUQVRfUG9zICgzVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogRVZFTlRJTlRSQVdTVEFUIChCaXQgMykgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19FVkVOVElOVFJBV1NUQVRfTXNrICgweDhVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogRVZFTlRJTlRSQVdTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0lOVFJBV1NUQVRfUkVHX0NSWVBUSU5UUkFXU1RBVF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFJBV1NUQVRfUkVHOiBDUllQVElOVFJBV1NUQVQgKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFJBV1NUQVRfUkVHX0NSWVBUSU5UUkFXU1RBVF9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFJBV1NUQVRfUkVHOiBDUllQVElOVFJBV1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfRVJST1JJTlRSQVdTVEFUX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IEVSUk9SSU5UUkFXU1RBVCAoQml0IDUpICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfRVJST1JJTlRSQVdTVEFUX01zayAoMHgyMFVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IEVSUk9SSU5UUkFXU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19HUk9TU1RHVElNSU5UUkFXU1RBVF9Qb3MgKDZVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogR1JPU1NUR1RJTUlOVFJBV1NUQVQgKEJpdCA2KSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19HUk9TU1RHVElNSU5UUkFXU1RBVF9Nc2sgKDB4NDBVTCkgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogR1JPU1NUR1RJTUlOVFJBV1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfRklORVRHVElNSU5UUkFXU1RBVF9Qb3MgKDdVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IEZJTkVUR1RJTUlOVFJBV1NUQVQgKEJpdCA3KSAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfRklORVRHVElNSU5UUkFXU1RBVF9Nc2sgKDB4ODBVTCkgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IEZJTkVUR1RJTUlOVFJBV1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfRVZFTlRBUEZBSU5UUkFXU1RBVF9Qb3MgKDhVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IEVWRU5UQVBGQUlOVFJBV1NUQVQgKEJpdCA4KSAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfRVZFTlRBUEZBSU5UUkFXU1RBVF9Nc2sgKDB4MTAwVUwpICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IEVWRU5UQVBGQUlOVFJBV1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfU1dJTlRSQVdTVEFUX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IFNXSU5UUkFXU1RBVCAoQml0IDkpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfU1dJTlRSQVdTVEFUX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IFNXSU5UUkFXU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0lOVEFDS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19DU0NOVElOVEFDS19Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogQ1NDTlRJTlRBQ0sgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19DU0NOVElOVEFDS19Nc2sgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogQ1NDTlRJTlRBQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19SWElOVEFDS19Qb3MgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogUlhJTlRBQ0sgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19SWElOVEFDS19Nc2sgICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogUlhJTlRBQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19TTFBJTlRBQ0tfUG9zICAgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogU0xQSU5UQUNLIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19TTFBJTlRBQ0tfTXNrICAgICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogU0xQSU5UQUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19FVkVOVElOVEFDS19Qb3MgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogRVZFTlRJTlRBQ0sgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19FVkVOVElOVEFDS19Nc2sgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogRVZFTlRJTlRBQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19DUllQVElOVEFDS19Qb3MgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogQ1JZUFRJTlRBQ0sgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19DUllQVElOVEFDS19Nc2sgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogQ1JZUFRJTlRBQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19FUlJPUklOVEFDS19Qb3MgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogRVJST1JJTlRBQ0sgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19FUlJPUklOVEFDS19Nc2sgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogRVJST1JJTlRBQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19HUk9TU1RHVElNSU5UQUNLX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogR1JPU1NUR1RJTUlOVEFDSyAoQml0IDYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19HUk9TU1RHVElNSU5UQUNLX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogR1JPU1NUR1RJTUlOVEFDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19GSU5FVEdUSU1JTlRBQ0tfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogRklORVRHVElNSU5UQUNLIChCaXQgNykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19GSU5FVEdUSU1JTlRBQ0tfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogRklORVRHVElNSU5UQUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19FVkVOVEFQRkFJTlRBQ0tfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogRVZFTlRBUEZBSU5UQUNLIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19FVkVOVEFQRkFJTlRBQ0tfTXNrICgweDEwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogRVZFTlRBUEZBSU5UQUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19TV0lOVEFDS19Qb3MgICAgICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogU1dJTlRBQ0sgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UQUNLX1JFR19TV0lOVEFDS19Nc2sgICAgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UQUNLX1JFRzogU1dJTlRBQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9CQVNFVElNRUNOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQkFTRVRJTUVDTlRfUkVHX0JBU0VUSU1FQ05UX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkFTRVRJTUVDTlRfUkVHOiBCQVNFVElNRUNOVCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkFTRVRJTUVDTlRfUkVHX0JBU0VUSU1FQ05UX01zayAoMHg3ZmZmZmZmVUwpICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkFTRVRJTUVDTlRfUkVHOiBCQVNFVElNRUNOVCAoQml0ZmllbGQtTWFzazogMHg3ZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfRklORVRJTUVDTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0ZJTkVUSU1FQ05UX1JFR19GSU5FQ05UX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0ZJTkVUSU1FQ05UX1JFRzogRklORUNOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0ZJTkVUSU1FQ05UX1JFR19GSU5FQ05UX01zayAgICgweDNmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0ZJTkVUSU1FQ05UX1JFRzogRklORUNOVCAoQml0ZmllbGQtTWFzazogMHgzZmYpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9CREFERFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0JEQUREUkxfUkVHX0JEQUREUkxfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JEQUREUkxfUkVHOiBCREFERFJMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JEQUREUkxfUkVHX0JEQUREUkxfTXNrICAgICAgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JEQUREUkxfUkVHOiBCREFERFJMIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9CREFERFJVX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0JEQUREUlVfUkVHX0JEQUREUlVfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JEQUREUlVfUkVHOiBCREFERFJVIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JEQUREUlVfUkVHX0JEQUREUlVfTXNrICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JEQUREUlVfUkVHOiBCREFERFJVIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JEQUREUlVfUkVHX1BSSVZfTlBVQl9Qb3MgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JEQUREUlVfUkVHOiBQUklWX05QVUIgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JEQUREUlVfUkVHX1BSSVZfTlBVQl9Nc2sgICAgICgweDEwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JEQUREUlVfUkVHOiBQUklWX05QVUIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQ1VSUkVOVFJYREVTQ1BUUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0NVUlJFTlRSWERFU0NQVFJfUkVHX0NVUlJFTlRSWERFU0NQVFJfUG9zICgwVUwpICAgICAgICAgLyohPCBCTEUgQkxFX0NVUlJFTlRSWERFU0NQVFJfUkVHOiBDVVJSRU5UUlhERVNDUFRSIChCaXQgMCkgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NVUlJFTlRSWERFU0NQVFJfUkVHX0NVUlJFTlRSWERFU0NQVFJfTXNrICgweDdmZmZVTCkgICAgLyohPCBCTEUgQkxFX0NVUlJFTlRSWERFU0NQVFJfUkVHOiBDVVJSRU5UUlhERVNDUFRSIChCaXRmaWVsZC1NYXNrOiAweDdmZmYpICovCisjZGVmaW5lIEJMRV9CTEVfQ1VSUkVOVFJYREVTQ1BUUl9SRUdfRVRQVFJfUG9zICgxNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ1VSUkVOVFJYREVTQ1BUUl9SRUc6IEVUUFRSIChCaXQgMTYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ1VSUkVOVFJYREVTQ1BUUl9SRUdfRVRQVFJfTXNrICgweGZmZmYwMDAwVUwpICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ1VSUkVOVFJYREVTQ1BUUl9SRUc6IEVUUFRSIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9ERUVQU0xDTlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMQ05UTF9SRUdfREVFUF9TTEVFUF9JUlFfRU5fUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMQ05UTF9SRUc6IERFRVBfU0xFRVBfSVJRX0VOIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMQ05UTF9SRUdfREVFUF9TTEVFUF9JUlFfRU5fTXNrICgweDNVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMQ05UTF9SRUc6IERFRVBfU0xFRVBfSVJRX0VOIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTENOVExfUkVHX0RFRVBfU0xFRVBfT05fUG9zICgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTENOVExfUkVHOiBERUVQX1NMRUVQX09OIChCaXQgMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTENOVExfUkVHX0RFRVBfU0xFRVBfT05fTXNrICgweDRVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTENOVExfUkVHOiBERUVQX1NMRUVQX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTENOVExfUkVHX0RFRVBfU0xFRVBfQ09SUl9FTl9Qb3MgKDNVTCkgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTENOVExfUkVHOiBERUVQX1NMRUVQX0NPUlJfRU4gKEJpdCAzKSAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTENOVExfUkVHX0RFRVBfU0xFRVBfQ09SUl9FTl9Nc2sgKDB4OFVMKSAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTENOVExfUkVHOiBERUVQX1NMRUVQX0NPUlJfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMQ05UTF9SRUdfU09GVF9XQUtFVVBfUkVRX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMQ05UTF9SRUc6IFNPRlRfV0FLRVVQX1JFUSAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMQ05UTF9SRUdfU09GVF9XQUtFVVBfUkVRX01zayAoMHgxMFVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMQ05UTF9SRUc6IFNPRlRfV0FLRVVQX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUVQU0xDTlRMX1JFR19ERUVQX1NMRUVQX1NUQVRfUG9zICgxNVVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUVQU0xDTlRMX1JFRzogREVFUF9TTEVFUF9TVEFUIChCaXQgMTUpICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUVQU0xDTlRMX1JFR19ERUVQX1NMRUVQX1NUQVRfTXNrICgweDgwMDBVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUVQU0xDTlRMX1JFRzogREVFUF9TTEVFUF9TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTENOVExfUkVHX0VYVFdLVVBEU0JfUG9zICgzMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTENOVExfUkVHOiBFWFRXS1VQRFNCIChCaXQgMzEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTENOVExfUkVHX0VYVFdLVVBEU0JfTXNrICgweDgwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTENOVExfUkVHOiBFWFRXS1VQRFNCIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfREVFUFNMV0tVUF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTFdLVVBfUkVHX0RFRVBTTFRJTUVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTFdLVVBfUkVHOiBERUVQU0xUSU1FIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTFdLVVBfUkVHX0RFRVBTTFRJTUVfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTFdLVVBfUkVHOiBERUVQU0xUSU1FIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfREVFUFNMU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTFNUQVRfUkVHX0RFRVBTTERVUl9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTFNUQVRfUkVHOiBERUVQU0xEVVIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTFNUQVRfUkVHX0RFRVBTTERVUl9Nc2sgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTFNUQVRfUkVHOiBERUVQU0xEVVIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfRU5CUFJFU0VUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfRU5CUFJFU0VUX1JFR19UV0lSUV9SRVNFVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRU5CUFJFU0VUX1JFRzogVFdJUlFfUkVTRVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRU5CUFJFU0VUX1JFR19UV0lSUV9SRVNFVF9Nc2sgKDB4M2ZmVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRU5CUFJFU0VUX1JFRzogVFdJUlFfUkVTRVQgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAgICovCisjZGVmaW5lIEJMRV9CTEVfRU5CUFJFU0VUX1JFR19UV0lSUV9TRVRfUG9zICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRU5CUFJFU0VUX1JFRzogVFdJUlFfU0VUIChCaXQgMTApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRU5CUFJFU0VUX1JFR19UV0lSUV9TRVRfTXNrICAgKDB4MWZmYzAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRU5CUFJFU0VUX1JFRzogVFdJUlFfU0VUIChCaXRmaWVsZC1NYXNrOiAweDdmZikgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRU5CUFJFU0VUX1JFR19UV0VYVF9Qb3MgICAgICAgKDIxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRU5CUFJFU0VUX1JFRzogVFdFWFQgKEJpdCAyMSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRU5CUFJFU0VUX1JFR19UV0VYVF9Nc2sgICAgICAgKDB4ZmZlMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRU5CUFJFU0VUX1JFRzogVFdFWFQgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmKSAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9GSU5FQ05UQ09SUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfRklORUNOVENPUlJfUkVHX0ZJTkVDTlRDT1JSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRklORUNOVENPUlJfUkVHOiBGSU5FQ05UQ09SUiAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRklORUNOVENPUlJfUkVHX0ZJTkVDTlRDT1JSX01zayAoMHgzZmZVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRklORUNOVENPUlJfUkVHOiBGSU5FQ05UQ09SUiAoQml0ZmllbGQtTWFzazogMHgzZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQkFTRVRJTUVDTlRDT1JSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQkFTRVRJTUVDTlRDT1JSX1JFR19CQVNFVElNRUNOVENPUlJfUG9zICgwVUwpICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkFTRVRJTUVDTlRDT1JSX1JFRzogQkFTRVRJTUVDTlRDT1JSIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkFTRVRJTUVDTlRDT1JSX1JFR19CQVNFVElNRUNOVENPUlJfTXNrICgweDdmZmZmZmZVTCkgICAvKiE8IEJMRSBCTEVfQkFTRVRJTUVDTlRDT1JSX1JFRzogQkFTRVRJTUVDTlRDT1JSIChCaXRmaWVsZC1NYXNrOiAweDdmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfRElBR0NOVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcwX1BvcyAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcwX01zayAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMCAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcwX0VOX1BvcyAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMF9FTiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcwX0VOX01zayAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcxX1BvcyAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMSAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcxX01zayAgICAgICAgKDB4M2YwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMSAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcxX0VOX1BvcyAgICAgKDE1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMV9FTiAoQml0IDE1KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcxX0VOX01zayAgICAgKDB4ODAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcyX1BvcyAgICAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMiAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcyX01zayAgICAgICAgKDB4M2YwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMiAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcyX0VOX1BvcyAgICAgKDIzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMl9FTiAoQml0IDIzKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUcyX0VOX01zayAgICAgKDB4ODAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUczX1BvcyAgICAgICAgKDI0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMyAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUczX01zayAgICAgICAgKDB4M2YwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHMyAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUczX0VOX1BvcyAgICAgKDMxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHM19FTiAoQml0IDMxKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVExfUkVHX0RJQUczX0VOX01zayAgICAgKDB4ODAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVExfUkVHOiBESUFHM19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfRElBR1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfRElBR1NUQVRfUkVHX0RJQUcwU1RBVF9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR1NUQVRfUkVHOiBESUFHMFNUQVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR1NUQVRfUkVHX0RJQUcwU1RBVF9Nc2sgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR1NUQVRfUkVHOiBESUFHMFNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR1NUQVRfUkVHX0RJQUcxU1RBVF9Qb3MgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR1NUQVRfUkVHOiBESUFHMVNUQVQgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR1NUQVRfUkVHX0RJQUcxU1RBVF9Nc2sgICAgKDB4ZmYwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR1NUQVRfUkVHOiBESUFHMVNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR1NUQVRfUkVHX0RJQUcyU1RBVF9Qb3MgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR1NUQVRfUkVHOiBESUFHMlNUQVQgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR1NUQVRfUkVHX0RJQUcyU1RBVF9Nc2sgICAgKDB4ZmYwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR1NUQVRfUkVHOiBESUFHMlNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR1NUQVRfUkVHX0RJQUczU1RBVF9Qb3MgICAgKDI0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR1NUQVRfUkVHOiBESUFHM1NUQVQgKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR1NUQVRfUkVHX0RJQUczU1RBVF9Nc2sgICAgKDB4ZmYwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR1NUQVRfUkVHOiBESUFHM1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9ERUJVR0FERE1BWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfREVCVUdBRERNQVhfUkVHX0VNX0FERE1BWF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVCVUdBRERNQVhfUkVHOiBFTV9BRERNQVggKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfREVCVUdBRERNQVhfUkVHX0VNX0FERE1BWF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVCVUdBRERNQVhfUkVHOiBFTV9BRERNQVggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICovCisjZGVmaW5lIEJMRV9CTEVfREVCVUdBRERNQVhfUkVHX1JFR19BRERNQVhfUG9zICgxNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVCVUdBRERNQVhfUkVHOiBSRUdfQURETUFYIChCaXQgMTYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfREVCVUdBRERNQVhfUkVHX1JFR19BRERNQVhfTXNrICgweGZmZmYwMDAwVUwpICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVCVUdBRERNQVhfUkVHOiBSRUdfQURETUFYIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9ERUJVR0FERE1JTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfREVCVUdBRERNSU5fUkVHX0VNX0FERE1JTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVCVUdBRERNSU5fUkVHOiBFTV9BRERNSU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfREVCVUdBRERNSU5fUkVHX0VNX0FERE1JTl9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVCVUdBRERNSU5fUkVHOiBFTV9BRERNSU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICovCisjZGVmaW5lIEJMRV9CTEVfREVCVUdBRERNSU5fUkVHX1JFR19BRERNSU5fUG9zICgxNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVCVUdBRERNSU5fUkVHOiBSRUdfQURETUlOIChCaXQgMTYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfREVCVUdBRERNSU5fUkVHX1JFR19BRERNSU5fTXNrICgweGZmZmYwMDAwVUwpICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVCVUdBRERNSU5fUkVHOiBSRUdfQURETUlOIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfVFhDUllQVF9FUlJPUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFRYQ1JZUFRfRVJST1IgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfVFhDUllQVF9FUlJPUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFRYQ1JZUFRfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfUlhDUllQVF9FUlJPUl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFJYQ1JZUFRfRVJST1IgKEJpdCAxKSAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfUlhDUllQVF9FUlJPUl9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFJYQ1JZUFRfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfUEtUQ05UTF9FTUFDQ19FUlJPUl9Qb3MgKDJVTCkgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFBLVENOVExfRU1BQ0NfRVJST1IgKEJpdCAyKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfUEtUQ05UTF9FTUFDQ19FUlJPUl9Nc2sgKDB4NFVMKSAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFBLVENOVExfRU1BQ0NfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfUkFESU9fRU1BQ0NfRVJST1JfUG9zICgzVUwpICAgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFJBRElPX0VNQUNDX0VSUk9SIChCaXQgMykgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfUkFESU9fRU1BQ0NfRVJST1JfTXNrICgweDhVTCkgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFJBRElPX0VNQUNDX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX0VWVF9TQ0hETF9FTUFDQ19FUlJPUl9Qb3MgKDRVTCkgICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBFVlRfU0NIRExfRU1BQ0NfRVJST1IgKEJpdCA0KSAgICAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX0VWVF9TQ0hETF9FTUFDQ19FUlJPUl9Nc2sgKDB4MTBVTCkgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBFVlRfU0NIRExfRU1BQ0NfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfRVZUX1NDSERMX0VOVFJZX0VSUk9SX1BvcyAoNVVMKSAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IEVWVF9TQ0hETF9FTlRSWV9FUlJPUiAoQml0IDUpICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfRVZUX1NDSERMX0VOVFJZX0VSUk9SX01zayAoMHgyMFVMKSAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IEVWVF9TQ0hETF9FTlRSWV9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19FVlRfU0NIRExfQVBGTV9FUlJPUl9Qb3MgKDZVTCkgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogRVZUX1NDSERMX0FQRk1fRVJST1IgKEJpdCA2KSAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19FVlRfU0NIRExfQVBGTV9FUlJPUl9Nc2sgKDB4NDBVTCkgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogRVZUX1NDSERMX0FQRk1fRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfRVZUX0NOVExfQVBGTV9FUlJPUl9Qb3MgKDdVTCkgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IEVWVF9DTlRMX0FQRk1fRVJST1IgKEJpdCA3KSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfRVZUX0NOVExfQVBGTV9FUlJPUl9Nc2sgKDB4ODBVTCkgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IEVWVF9DTlRMX0FQRk1fRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfV0hJVEVMSVNUX0VSUk9SX1BvcyAoOFVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFdISVRFTElTVF9FUlJPUiAoQml0IDgpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfV0hJVEVMSVNUX0VSUk9SX01zayAoMHgxMDBVTCkgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFdISVRFTElTVF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19JRlNfVU5ERVJSVU5fUG9zICg5VUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogSUZTX1VOREVSUlVOIChCaXQgOSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19JRlNfVU5ERVJSVU5fTXNrICgweDIwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogSUZTX1VOREVSUlVOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX0FEVl9VTkRFUlJVTl9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBBRFZfVU5ERVJSVU4gKEJpdCAxMCkgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX0FEVl9VTkRFUlJVTl9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBBRFZfVU5ERVJSVU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfTExDSE1BUF9FUlJPUl9Qb3MgKDExVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IExMQ0hNQVBfRVJST1IgKEJpdCAxMSkgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfTExDSE1BUF9FUlJPUl9Nc2sgKDB4ODAwVUwpICAgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IExMQ0hNQVBfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfQ1NGT1JNQVRfRVJST1JfUG9zICgxMlVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IENTRk9STUFUX0VSUk9SIChCaXQgMTIpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfQ1NGT1JNQVRfRVJST1JfTXNrICgweDEwMDBVTCkgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IENTRk9STUFUX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX1RYREVTQ19FTVBUWV9FUlJPUl9Qb3MgKDEzVUwpICAgICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBUWERFU0NfRU1QVFlfRVJST1IgKEJpdCAxMykgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX1RYREVTQ19FTVBUWV9FUlJPUl9Nc2sgKDB4MjAwMFVMKSAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBUWERFU0NfRU1QVFlfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfUlhERVNDX0VNUFRZX0VSUk9SX1BvcyAoMTRVTCkgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFJYREVTQ19FTVBUWV9FUlJPUiAoQml0IDE0KSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfUlhERVNDX0VNUFRZX0VSUk9SX01zayAoMHg0MDAwVUwpICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFJYREVTQ19FTVBUWV9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19UWERBVEFfUFRSX0VSUk9SX1BvcyAoMTVVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogVFhEQVRBX1BUUl9FUlJPUiAoQml0IDE1KSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19UWERBVEFfUFRSX0VSUk9SX01zayAoMHg4MDAwVUwpICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogVFhEQVRBX1BUUl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19SWERBVEFfUFRSX0VSUk9SX1BvcyAoMTZVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogUlhEQVRBX1BUUl9FUlJPUiAoQml0IDE2KSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19SWERBVEFfUFRSX0VSUk9SX01zayAoMHgxMDAwMFVMKSAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogUlhEQVRBX1BUUl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19DT05DRVZUSVJRX0VSUk9SX1BvcyAoMTdVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogQ09OQ0VWVElSUV9FUlJPUiAoQml0IDE3KSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19DT05DRVZUSVJRX0VSUk9SX01zayAoMHgyMDAwMFVMKSAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogQ09OQ0VWVElSUV9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1NXUFJPRklMSU5HX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9TV1BST0ZJTElOR19SRUdfU1dQUk9GVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9TV1BST0ZJTElOR19SRUc6IFNXUFJPRlZBTCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9TV1BST0ZJTElOR19SRUdfU1dQUk9GVkFMX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9TV1BST0ZJTElOR19SRUc6IFNXUFJPRlZBTCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1JBRElPQ05UTDBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT0NOVEwwX1JFR19maWVsZDI0NnJzdl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT0NOVEwwX1JFRzogZmllbGQyNDZyc3YgKEJpdCAyKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT0NOVEwwX1JFR19maWVsZDI0NnJzdl9Nc2sgKDB4MWNVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT0NOVEwwX1JFRzogZmllbGQyNDZyc3YgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1JBRElPQ05UTDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT0NOVEwxX1JFR19YUkZTRUxfUG9zICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT0NOVEwxX1JFRzogWFJGU0VMIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT0NOVEwxX1JFR19YUkZTRUxfTXNrICAgICAoMHgxZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT0NOVEwxX1JFRzogWFJGU0VMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfUkFESU9QV1JVUEROX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT1BXUlVQRE5fUkVHX1RYUFdSVVBfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT1BXUlVQRE5fUkVHOiBUWFBXUlVQIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT1BXUlVQRE5fUkVHX1RYUFdSVVBfTXNrICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT1BXUlVQRE5fUkVHOiBUWFBXUlVQIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT1BXUlVQRE5fUkVHX1RYUFdSRE5fUG9zICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT1BXUlVQRE5fUkVHOiBUWFBXUkROIChCaXQgOCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT1BXUlVQRE5fUkVHX1RYUFdSRE5fTXNrICAoMHhmMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT1BXUlVQRE5fUkVHOiBUWFBXUkROIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT1BXUlVQRE5fUkVHX1JYUFdSVVBfUG9zICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT1BXUlVQRE5fUkVHOiBSWFBXUlVQIChCaXQgMTYpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT1BXUlVQRE5fUkVHX1JYUFdSVVBfTXNrICAoMHhmZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT1BXUlVQRE5fUkVHOiBSWFBXUlVQIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT1BXUlVQRE5fUkVHX1JUUklQX0RFTEFZX1BvcyAoMjRVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT1BXUlVQRE5fUkVHOiBSVFJJUF9ERUxBWSAoQml0IDI0KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SQURJT1BXUlVQRE5fUkVHX1JUUklQX0RFTEFZX01zayAoMHg3ZjAwMDAwMFVMKSAgICAgICAgIC8qITwgQkxFIEJMRV9SQURJT1BXUlVQRE5fUkVHOiBSVFJJUF9ERUxBWSAoQml0ZmllbGQtTWFzazogMHg3ZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9BRFZDSE1BUF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9BRFZDSE1BUF9SRUdfQURWQ0hNQVBfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRFZDSE1BUF9SRUc6IEFEVkNITUFQIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BRFZDSE1BUF9SRUdfQURWQ0hNQVBfTXNrICAgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRFZDSE1BUF9SRUc6IEFEVkNITUFQIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQURWVElNX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9BRFZUSU1fUkVHX0FEVklOVF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRFZUSU1fUkVHOiBBRFZJTlQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BRFZUSU1fUkVHX0FEVklOVF9Nc2sgICAgICAgICAoMHgzZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRFZUSU1fUkVHOiBBRFZJTlQgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0FDVFNDQU5TVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9BQ1RTQ0FOU1RBVF9SRUdfVVBQRVJMSU1JVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BQ1RTQ0FOU1RBVF9SRUc6IFVQUEVSTElNSVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BQ1RTQ0FOU1RBVF9SRUdfVVBQRVJMSU1JVF9Nc2sgKDB4MWZmVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BQ1RTQ0FOU1RBVF9SRUc6IFVQUEVSTElNSVQgKEJpdGZpZWxkLU1hc2s6IDB4MWZmKSAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BQ1RTQ0FOU1RBVF9SRUdfQkFDS09GRl9Qb3MgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BQ1RTQ0FOU1RBVF9SRUc6IEJBQ0tPRkYgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BQ1RTQ0FOU1RBVF9SRUdfQkFDS09GRl9Nc2sgICAoMHgxZmYwMDAwVUwpICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BQ1RTQ0FOU1RBVF9SRUc6IEJBQ0tPRkYgKEJpdGZpZWxkLU1hc2s6IDB4MWZmKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1dMUFVCQUREUFRSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9XTFBVQkFERFBUUl9SRUdfV0xQVUJBRERQVFJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9XTFBVQkFERFBUUl9SRUc6IFdMUFVCQUREUFRSIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9XTFBVQkFERFBUUl9SRUdfV0xQVUJBRERQVFJfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9XTFBVQkFERFBUUl9SRUc6IFdMUFVCQUREUFRSIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1dMUFJJVkFERFBUUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfV0xQUklWQUREUFRSX1JFR19XTFBSSVZBRERQVFJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfV0xQUklWQUREUFRSX1JFRzogV0xQUklWQUREUFRSIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfV0xQUklWQUREUFRSX1JFR19XTFBSSVZBRERQVFJfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfV0xQUklWQUREUFRSX1JFRzogV0xQUklWQUREUFRSIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1dMTkJERVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfV0xOQkRFVl9SRUdfTkJQVUJERVZfUG9zICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfV0xOQkRFVl9SRUc6IE5CUFVCREVWIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfV0xOQkRFVl9SRUdfTkJQVUJERVZfTXNrICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfV0xOQkRFVl9SRUc6IE5CUFVCREVWIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfV0xOQkRFVl9SRUdfTkJQUklWREVWX1BvcyAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfV0xOQkRFVl9SRUc6IE5CUFJJVkRFViAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfV0xOQkRFVl9SRUdfTkJQUklWREVWX01zayAgICAgKDB4ZmYwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfV0xOQkRFVl9SRUc6IE5CUFJJVkRFViAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0FFU0NOVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQUVTQ05UTF9SRUdfQUVTX1NUQVJUX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQUVTQ05UTF9SRUc6IEFFU19TVEFSVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQUVTQ05UTF9SRUdfQUVTX1NUQVJUX01zayAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQUVTQ05UTF9SRUc6IEFFU19TVEFSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQUVTQ05UTF9SRUdfQUVTX01PREVfUG9zICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQUVTQ05UTF9SRUc6IEFFU19NT0RFIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQUVTQ05UTF9SRUdfQUVTX01PREVfTXNrICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQUVTQ05UTF9SRUc6IEFFU19NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9BRVNLRVkzMV8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQUVTS0VZMzFfMF9SRUdfQUVTS0VZMzFfMF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQUVTS0VZMzFfMF9SRUc6IEFFU0tFWTMxXzAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQUVTS0VZMzFfMF9SRUdfQUVTS0VZMzFfMF9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQUVTS0VZMzFfMF9SRUc6IEFFU0tFWTMxXzAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9BRVNLRVk2M18zMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQUVTS0VZNjNfMzJfUkVHX0FFU0tFWTYzXzMyX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQUVTS0VZNjNfMzJfUkVHOiBBRVNLRVk2M18zMiAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQUVTS0VZNjNfMzJfUkVHX0FFU0tFWTYzXzMyX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAvKiE8IEJMRSBCTEVfQUVTS0VZNjNfMzJfUkVHOiBBRVNLRVk2M18zMiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0FFU0tFWTk1XzY0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNLRVk5NV82NF9SRUdfQUVTS0VZOTVfNjRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNLRVk5NV82NF9SRUc6IEFFU0tFWTk1XzY0IChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNLRVk5NV82NF9SRUdfQUVTS0VZOTVfNjRfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNLRVk5NV82NF9SRUc6IEFFU0tFWTk1XzY0IChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9BRVNLRVkxMjdfOTZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0FFU0tFWTEyN185Nl9SRUdfQUVTS0VZMTI3Xzk2X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FFU0tFWTEyN185Nl9SRUc6IEFFU0tFWTEyN185NiAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0FFU0tFWTEyN185Nl9SRUdfQUVTS0VZMTI3Xzk2X01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgLyohPCBCTEUgQkxFX0FFU0tFWTEyN185Nl9SRUc6IEFFU0tFWTEyN185NiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQUVTUFRSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNQVFJfUkVHX0FFU1BUUl9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNQVFJfUkVHOiBBRVNQVFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNQVFJfUkVHX0FFU1BUUl9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNQVFJfUkVHOiBBRVNQVFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9UWE1JQ1ZBTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9UWE1JQ1ZBTF9SRUdfVFhNSUNWQUxfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9UWE1JQ1ZBTF9SRUc6IFRYTUlDVkFMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9UWE1JQ1ZBTF9SRUdfVFhNSUNWQUxfTXNrICAgICAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9UWE1JQ1ZBTF9SRUc6IFRYTUlDVkFMIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9SWE1JQ1ZBTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9SWE1JQ1ZBTF9SRUdfUlhNSUNWQUxfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SWE1JQ1ZBTF9SRUc6IFJYTUlDVkFMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SWE1JQ1ZBTF9SRUdfUlhNSUNWQUxfTXNrICAgICAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SWE1JQ1ZBTF9SRUc6IFJYTUlDVkFMIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1JGVEVTVENOVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19UWExFTkdUSF9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogVFhMRU5HVEggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19UWExFTkdUSF9Nc2sgICAoMHgxZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogVFhMRU5HVEggKEJpdGZpZWxkLU1hc2s6IDB4MWZmKSAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19UWFBLVENOVEVOX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogVFhQS1RDTlRFTiAoQml0IDExKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19UWFBLVENOVEVOX01zayAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogVFhQS1RDTlRFTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19UWFBMRFNSQ19Qb3MgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogVFhQTERTUkMgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19UWFBMRFNSQ19Nc2sgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogVFhQTERTUkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19QUkJTVFlQRV9Qb3MgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogUFJCU1RZUEUgKEJpdCAxMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19QUkJTVFlQRV9Nc2sgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogUFJCU1RZUEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19UWExFTkdUSFNSQ19Qb3MgKDE0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogVFhMRU5HVEhTUkMgKEJpdCAxNCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19UWExFTkdUSFNSQ19Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogVFhMRU5HVEhTUkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19JTkZJTklURVRYX1BvcyAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogSU5GSU5JVEVUWCAoQml0IDE1KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19JTkZJTklURVRYX01zayAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogSU5GSU5JVEVUWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19SWFBLVENOVEVOX1BvcyAoMjdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogUlhQS1RDTlRFTiAoQml0IDI3KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19SWFBLVENOVEVOX01zayAoMHg4MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogUlhQS1RDTlRFTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19JTkZJTklURVJYX1BvcyAoMzFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogSU5GSU5JVEVSWCAoQml0IDMxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RDTlRMX1JFR19JTkZJTklURVJYX01zayAoMHg4MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RDTlRMX1JFRzogSU5GSU5JVEVSWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfUkZURVNUVFhTVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RUWFNUQVRfUkVHX1RYUEtUQ05UX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RUWFNUQVRfUkVHOiBUWFBLVENOVCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RUWFNUQVRfUkVHX1RYUEtUQ05UX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RUWFNUQVRfUkVHOiBUWFBLVENOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfUkZURVNUUlhTVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RSWFNUQVRfUkVHX1JYUEtUQ05UX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RSWFNUQVRfUkVHOiBSWFBLVENOVCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9SRlRFU1RSWFNUQVRfUkVHX1JYUEtUQ05UX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9SRlRFU1RSWFNUQVRfUkVHOiBSWFBLVENOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1RJTUdFTkNOVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9USU1HRU5DTlRMX1JFR19QUkVGRVRDSF9USU1FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9USU1HRU5DTlRMX1JFRzogUFJFRkVUQ0hfVElNRSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9USU1HRU5DTlRMX1JFR19QUkVGRVRDSF9USU1FX01zayAoMHgxZmZVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9USU1HRU5DTlRMX1JFRzogUFJFRkVUQ0hfVElNRSAoQml0ZmllbGQtTWFzazogMHgxZmYpICovCisjZGVmaW5lIEJMRV9CTEVfVElNR0VOQ05UTF9SRUdfUFJFRkVUQ0hBQk9SVF9USU1FX1BvcyAoMTZVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfVElNR0VOQ05UTF9SRUc6IFBSRUZFVENIQUJPUlRfVElNRSAoQml0IDE2KSAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfVElNR0VOQ05UTF9SRUdfUFJFRkVUQ0hBQk9SVF9USU1FX01zayAoMHgzZmYwMDAwVUwpICAgICAvKiE8IEJMRSBCTEVfVElNR0VOQ05UTF9SRUc6IFBSRUZFVENIQUJPUlRfVElNRSAoQml0ZmllbGQtTWFzazogMHgzZmYpICovCisjZGVmaW5lIEJMRV9CTEVfVElNR0VOQ05UTF9SRUdfQVBGTV9FTl9Qb3MgICAgKDMxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfVElNR0VOQ05UTF9SRUc6IEFQRk1fRU4gKEJpdCAzMSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfVElNR0VOQ05UTF9SRUdfQVBGTV9FTl9Nc2sgICAgKDB4ODAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfVElNR0VOQ05UTF9SRUc6IEFQRk1fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9HUk9TU1RJTVRHVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfR1JPU1NUSU1UR1RfUkVHX0dST1NTVEFSR0VUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfR1JPU1NUSU1UR1RfUkVHOiBHUk9TU1RBUkdFVCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfR1JPU1NUSU1UR1RfUkVHX0dST1NTVEFSR0VUX01zayAoMHg3ZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfR1JPU1NUSU1UR1RfUkVHOiBHUk9TU1RBUkdFVCAoQml0ZmllbGQtTWFzazogMHg3ZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9GSU5FVElNVEdUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfRklORVRJTVRHVF9SRUdfRklORVRBUkdFVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRklORVRJTVRHVF9SRUc6IEZJTkVUQVJHRVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRklORVRJTVRHVF9SRUdfRklORVRBUkdFVF9Nc2sgKDB4N2ZmZmZmZlVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRklORVRJTVRHVF9SRUc6IEZJTkVUQVJHRVQgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9TQU1QTEVDTEtfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9TQU1QTEVDTEtfUkVHX1NBTVBfUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9TQU1QTEVDTEtfUkVHOiBTQU1QIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9TQU1QTEVDTEtfUkVHX1NBTVBfTXNrICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9TQU1QTEVDTEtfUkVHOiBTQU1QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0NPRVhJRkNOVEwwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfQ09FWF9FTl9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IENPRVhfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfQ09FWF9FTl9Nc2sgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IENPRVhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfU1lOQ0dFTl9FTl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IFNZTkNHRU5fRU4gKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfU1lOQ0dFTl9FTl9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IFNZTkNHRU5fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfV0xBTlJYTVNLX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IFdMQU5SWE1TSyAoQml0IDQpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfV0xBTlJYTVNLX01zayAoMHgzMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IFdMQU5SWE1TSyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfV0xBTlRYTVNLX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IFdMQU5UWE1TSyAoQml0IDYpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfV0xBTlRYTVNLX01zayAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IFdMQU5UWE1TSyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfV0xDVFhQUklPTU9ERV9Qb3MgKDE2VUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IFdMQ1RYUFJJT01PREUgKEJpdCAxNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfV0xDVFhQUklPTU9ERV9Nc2sgKDB4MzAwMDBVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IFdMQ1RYUFJJT01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIEJMRV9CTEVfQ09FWElGQ05UTDBfUkVHX1dMQ1JYUFJJT01PREVfUG9zICgyMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ09FWElGQ05UTDBfUkVHOiBXTENSWFBSSU9NT0RFIChCaXQgMjApICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ09FWElGQ05UTDBfUkVHX1dMQ1JYUFJJT01PREVfTXNrICgweDMwMDAwMFVMKSAgICAgICAgICAvKiE8IEJMRSBCTEVfQ09FWElGQ05UTDBfUkVHOiBXTENSWFBSSU9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQ09FWElGQ05UTDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwxX1JFR19XTENQREVMQVlfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwxX1JFRzogV0xDUERFTEFZIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwxX1JFR19XTENQREVMQVlfTXNrICgweDdmVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwxX1JFRzogV0xDUERFTEFZIChCaXRmaWVsZC1NYXNrOiAweDdmKSAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwxX1JFR19XTENQRFVSQVRJT05fUG9zICg4VUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwxX1JFRzogV0xDUERVUkFUSU9OIChCaXQgOCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwxX1JFR19XTENQRFVSQVRJT05fTXNrICgweDdmMDBVTCkgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwxX1JFRzogV0xDUERVUkFUSU9OIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwxX1JFR19XTENQVFhUSFJfUG9zICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwxX1JFRzogV0xDUFRYVEhSIChCaXQgMTYpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwxX1JFR19XTENQVFhUSFJfTXNrICgweDFmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwxX1JFRzogV0xDUFRYVEhSIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwxX1JFR19XTENQUlhUSFJfUG9zICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwxX1JFRzogV0xDUFJYVEhSIChCaXQgMjQpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwxX1JFR19XTENQUlhUSFJfTXNrICgweDFmMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwxX1JFRzogV0xDUFJYVEhSIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0JMRU1QUklPMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTBfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU0wIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTBfTXNrICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU0wIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTFfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU0xIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTFfTXNrICAgICAgICgweGYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU0xIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTJfUG9zICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU0yIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTJfTXNrICAgICAgICgweGYwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU0yIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTNfUG9zICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU0zIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTNfTXNrICAgICAgICgweGYwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU0zIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTRfUG9zICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU00IChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTRfTXNrICAgICAgICgweGYwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU00IChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTVfUG9zICAgICAgICgyMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU01IChCaXQgMjApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTVfTXNrICAgICAgICgweGYwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU01IChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTZfUG9zICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU02IChCaXQgMjQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTZfTXNrICAgICAgICgweGYwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU02IChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTdfUG9zICAgICAgICgyOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU03IChCaXQgMjgpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMF9SRUdfQkxFTTdfTXNrICAgICAgICgweGYwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMF9SRUc6IEJMRU03IChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0JMRU1QUklPMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMV9SRUdfQkxFTURFRkFVTFRfUG9zICgyOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMV9SRUc6IEJMRU1ERUZBVUxUIChCaXQgMjgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0JMRU1QUklPMV9SRUdfQkxFTURFRkFVTFRfTXNrICgweGYwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX0JMRU1QUklPMV9SRUc6IEJMRU1ERUZBVUxUIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQ05UTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19FTUFDQ0VSUlNUQVRfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogRU1BQ0NFUlJTVEFUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19FTUFDQ0VSUlNUQVRfTXNrICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogRU1BQ0NFUlJTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19FTUFDQ0VSUkFDS19Qb3MgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogRU1BQ0NFUlJBQ0sgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19FTUFDQ0VSUkFDS19Nc2sgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogRU1BQ0NFUlJBQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19FTUFDQ0VSUk1TS19Qb3MgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogRU1BQ0NFUlJNU0sgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19FTUFDQ0VSUk1TS19Nc2sgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogRU1BQ0NFUlJNU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfRElBR19PVlJfUG9zICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX0RJQUdfT1ZSIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfRElBR19PVlJfTXNrICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX0RJQUdfT1ZSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfRElBR19PVlJfU0VMX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX0RJQUdfT1ZSX1NFTCAoQml0IDQpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfRElBR19PVlJfU0VMX01zayAoMHgzMFVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX0RJQUdfT1ZSX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMykgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfQ0xLX1NUQVRfUG9zICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX0NMS19TVEFUIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfQ0xLX1NUQVRfTXNrICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX0NMS19TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19NT05fTFBfQ0xLX1BvcyAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogTU9OX0xQX0NMSyAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19NT05fTFBfQ0xLX01zayAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogTU9OX0xQX0NMSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19SQURJT19QV1JETl9BTExPV19Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogUkFESU9fUFdSRE5fQUxMT1cgKEJpdCA4KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19SQURJT19QV1JETl9BTExPV19Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogUkFESU9fUFdSRE5fQUxMT1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfQ0xLX1NFTF9Qb3MgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX0NMS19TRUwgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfQ0xLX1NFTF9Nc2sgICAgICgweDdlMDBVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX0NMS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfVFJBTlNBQ1RJT05fU1JDX1BvcyAoMTVVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX1RSQU5TQUNUSU9OX1NSQyAoQml0IDE1KSAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfVFJBTlNBQ1RJT05fU1JDX01zayAoMHg4MDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX1RSQU5TQUNUSU9OX1NSQyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9DTlRMMl9SRUdfQkxFX1RSQU5TQUNUSU9OX01PREVfUG9zICgxNlVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DTlRMMl9SRUc6IEJMRV9UUkFOU0FDVElPTl9NT0RFIChCaXQgMTYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DTlRMMl9SRUdfQkxFX1RSQU5TQUNUSU9OX01PREVfTXNrICgweDEwMDAwVUwpICAgICAgICAgIC8qITwgQkxFIEJMRV9DTlRMMl9SRUc6IEJMRV9UUkFOU0FDVElPTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfUFRJX1NPVVJDRV9TRUxfUG9zICgxN1VMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX1BUSV9TT1VSQ0VfU0VMIChCaXQgMTcpICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfUFRJX1NPVVJDRV9TRUxfTXNrICgweDIwMDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX1BUSV9TT1VSQ0VfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CQl9PTkxZX1BvcyAgICAgICAgICgxOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkJfT05MWSAoQml0IDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CQl9PTkxZX01zayAgICAgICAgICgweDQwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkJfT05MWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19TV19SUExfU1BJX1BvcyAgICAgICgxOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogU1dfUlBMX1NQSSAoQml0IDE5KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19TV19SUExfU1BJX01zayAgICAgICgweDgwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogU1dfUlBMX1NQSSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19XQUtFVVBMUFNUQVRfUG9zICAgICgyMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogV0FLRVVQTFBTVEFUIChCaXQgMjApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19XQUtFVVBMUFNUQVRfTXNrICAgICgweDEwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogV0FLRVVQTFBTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfUlNTSV9TRUxfUG9zICAgICgyMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX1JTU0lfU0VMIChCaXQgMjEpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfUlNTSV9TRUxfTXNrICAgICgweDIwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX1JTU0lfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfVFJBTlNBQ1RJT05fU1RBUlRfUG9zICgyMlVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX1RSQU5TQUNUSU9OX1NUQVJUIChCaXQgMjIpICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfVFJBTlNBQ1RJT05fU1RBUlRfTXNrICgweGZmYzAwMDAwVUwpICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX1RSQU5TQUNUSU9OX1NUQVJUIChCaXRmaWVsZC1NYXNrOiAweDNmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfRU1fQkFTRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9FTV9CQVNFX1JFR19CTEVfRU1fQkFTRV8xNl8xMF9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FTV9CQVNFX1JFRzogQkxFX0VNX0JBU0VfMTZfMTAgKEJpdCAxMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FTV9CQVNFX1JFR19CTEVfRU1fQkFTRV8xNl8xMF9Nc2sgKDB4MWZjMDBVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9FTV9CQVNFX1JFRzogQkxFX0VNX0JBU0VfMTZfMTAgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfRElBR0NOVEwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNF9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNF9Nc2sgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNF9FTl9Qb3MgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzRfRU4gKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNF9FTl9Nc2sgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzRfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNV9Qb3MgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzUgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNV9Nc2sgICAgICAgKDB4M2YwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzUgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNV9FTl9Qb3MgICAgKDE1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzVfRU4gKEJpdCAxNSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNV9FTl9Nc2sgICAgKDB4ODAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzVfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNl9Qb3MgICAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzYgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNl9Nc2sgICAgICAgKDB4M2YwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzYgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNl9FTl9Qb3MgICAgKDIzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzZfRU4gKEJpdCAyMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHNl9FTl9Nc2sgICAgKDB4ODAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzZfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHN19Qb3MgICAgICAgKDI0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzcgKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHN19Nc2sgICAgICAgKDB4M2YwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzcgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHN19FTl9Qb3MgICAgKDMxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzdfRU4gKEJpdCAzMSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwyX1JFR19ESUFHN19FTl9Nc2sgICAgKDB4ODAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwyX1JFRzogRElBRzdfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfRElBR0NOVEwzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMF9CSVRfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzBfQklUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMF9CSVRfTXNrICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzBfQklUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMF9JTlZfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzBfSU5WIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMF9JTlZfTXNrICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzBfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMV9CSVRfUG9zICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzFfQklUIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMV9CSVRfTXNrICAgKDB4NzBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzFfQklUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMV9JTlZfUG9zICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzFfSU5WIChCaXQgNykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMV9JTlZfTXNrICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzFfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMl9CSVRfUG9zICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzJfQklUIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMl9CSVRfTXNrICAgKDB4NzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzJfQklUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMl9JTlZfUG9zICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzJfSU5WIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHMl9JTlZfTXNrICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzJfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHM19CSVRfUG9zICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzNfQklUIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHM19CSVRfTXNrICAgKDB4NzAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzNfQklUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHM19JTlZfUG9zICAgKDE1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzNfSU5WIChCaXQgMTUpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHM19JTlZfTXNrICAgKDB4ODAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzNfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNF9CSVRfUG9zICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzRfQklUIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNF9CSVRfTXNrICAgKDB4NzAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzRfQklUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNF9JTlZfUG9zICAgKDE5VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzRfSU5WIChCaXQgMTkpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNF9JTlZfTXNrICAgKDB4ODAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzRfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNV9CSVRfUG9zICAgKDIwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzVfQklUIChCaXQgMjApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNV9CSVRfTXNrICAgKDB4NzAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzVfQklUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNV9JTlZfUG9zICAgKDIzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzVfSU5WIChCaXQgMjMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNV9JTlZfTXNrICAgKDB4ODAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzVfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNl9CSVRfUG9zICAgKDI0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzZfQklUIChCaXQgMjQpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNl9CSVRfTXNrICAgKDB4NzAwMDAwMFVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzZfQklUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNl9JTlZfUG9zICAgKDI3VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzZfSU5WIChCaXQgMjcpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHNl9JTlZfTXNrICAgKDB4ODAwMDAwMFVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzZfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHN19CSVRfUG9zICAgKDI4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzdfQklUIChCaXQgMjgpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHN19CSVRfTXNrICAgKDB4NzAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzdfQklUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHN19JTlZfUG9zICAgKDMxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzdfSU5WIChCaXQgMzEpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRElBR0NOVEwzX1JFR19ESUFHN19JTlZfTXNrICAgKDB4ODAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRElBR0NOVEwzX1JFRzogRElBRzdfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICBzdHJ1Y3QgJ0NBQ0hFJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENBQ0hFX0NBQ0hFX0NUUkwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwxX1JFR19DQUNIRV9GTFVTSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwxX1JFRzogQ0FDSEVfRkxVU0ggKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwxX1JFR19DQUNIRV9GTFVTSF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwxX1JFRzogQ0FDSEVfRkxVU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwxX1JFR19DQUNIRV9SRVMxX1BvcyAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwxX1JFRzogQ0FDSEVfUkVTMSAoQml0IDEpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwxX1JFR19DQUNIRV9SRVMxX01zayAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwxX1JFRzogQ0FDSEVfUkVTMSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDQUNIRV9DQUNIRV9MTlNJWkVDRkdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0xOU0laRUNGR19SRUdfQ0FDSEVfTElORV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0xOU0laRUNGR19SRUc6IENBQ0hFX0xJTkUgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0xOU0laRUNGR19SRUdfQ0FDSEVfTElORV9Nc2sgKDB4M1VMKSAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0xOU0laRUNGR19SRUc6IENBQ0hFX0xJTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDQUNIRV9DQUNIRV9BU1NPQ0NGR19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0FTU09DQ0ZHX1JFR19DQUNIRV9BU1NPQ19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0FTU09DQ0ZHX1JFRzogQ0FDSEVfQVNTT0MgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0FTU09DQ0ZHX1JFR19DQUNIRV9BU1NPQ19Nc2sgKDB4M1VMKSAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0FTU09DQ0ZHX1JFRzogQ0FDSEVfQVNTT0MgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENBQ0hFX0NBQ0hFX0NUUkwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwyX1JFR19DQUNIRV9MRU5fUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwyX1JFRzogQ0FDSEVfTEVOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwyX1JFR19DQUNIRV9MRU5fTXNrICAgKDB4MWZmVUwpICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwyX1JFRzogQ0FDSEVfTEVOIChCaXRmaWVsZC1NYXNrOiAweDFmZikgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwyX1JFR19DQUNIRV9XRU5fUG9zICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwyX1JFRzogQ0FDSEVfV0VOIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwyX1JFR19DQUNIRV9XRU5fTXNrICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwyX1JFRzogQ0FDSEVfV0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwyX1JFR19DQUNIRV9DR0VOX1BvcyAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwyX1JFRzogQ0FDSEVfQ0dFTiAoQml0IDEwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwyX1JFR19DQUNIRV9DR0VOX01zayAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwyX1JFRzogQ0FDSEVfQ0dFTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwyX1JFR19FTkFCTEVfQUxTT19PVFBfQ0FDSEVEX1BvcyAoMTFVTCkgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwyX1JFRzogRU5BQkxFX0FMU09fT1RQX0NBQ0hFRCAoQml0IDExKSAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwyX1JFR19FTkFCTEVfQUxTT19PVFBfQ0FDSEVEX01zayAoMHg4MDBVTCkgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwyX1JFRzogRU5BQkxFX0FMU09fT1RQX0NBQ0hFRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDJfUkVHX0VOQUJMRV9BTFNPX1FTUElGTEFTSF9DQUNIRURfUG9zICgxMlVMKSAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDJfUkVHOiBFTkFCTEVfQUxTT19RU1BJRkxBU0hfQ0FDSEVEIChCaXQgMTIpICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwyX1JFR19FTkFCTEVfQUxTT19RU1BJRkxBU0hfQ0FDSEVEX01zayAoMHgxMDAwVUwpIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDJfUkVHOiBFTkFCTEVfQUxTT19RU1BJRkxBU0hfQ0FDSEVEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDQUNIRV9DQUNIRV9DVFJMM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDQUNIRV9DQUNIRV9DVFJMM19SRUdfQ0FDSEVfQVNTT0NJQVRJVklUWV9SRVNFVF9WQUxVRV9Qb3MgKDBVTCkgLyohPCBDQUNIRSBDQUNIRV9DVFJMM19SRUc6IENBQ0hFX0FTU09DSUFUSVZJVFlfUkVTRVRfVkFMVUUgKEJpdCAwKSAqLworI2RlZmluZSBDQUNIRV9DQUNIRV9DVFJMM19SRUdfQ0FDSEVfQVNTT0NJQVRJVklUWV9SRVNFVF9WQUxVRV9Nc2sgKDB4M1VMKSAvKiE8IENBQ0hFIENBQ0hFX0NUUkwzX1JFRzogQ0FDSEVfQVNTT0NJQVRJVklUWV9SRVNFVF9WQUxVRSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDNfUkVHX0NBQ0hFX0xJTkVfU0laRV9SRVNFVF9WQUxVRV9Qb3MgKDJVTCkgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDNfUkVHOiBDQUNIRV9MSU5FX1NJWkVfUkVTRVRfVkFMVUUgKEJpdCAyKSAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDNfUkVHX0NBQ0hFX0xJTkVfU0laRV9SRVNFVF9WQUxVRV9Nc2sgKDB4Y1VMKSAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDNfUkVHOiBDQUNIRV9MSU5FX1NJWkVfUkVTRVRfVkFMVUUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwzX1JFR19DQUNIRV9SQU1fU0laRV9SRVNFVF9WQUxVRV9Qb3MgKDRVTCkgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwzX1JFRzogQ0FDSEVfUkFNX1NJWkVfUkVTRVRfVkFMVUUgKEJpdCA0KSAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwzX1JFR19DQUNIRV9SQU1fU0laRV9SRVNFVF9WQUxVRV9Nc2sgKDB4NzBVTCkgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwzX1JFRzogQ0FDSEVfUkFNX1NJWkVfUkVTRVRfVkFMVUUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwzX1JFR19DQUNIRV9DT05UUk9MTEVSX1JFU0VUX1BvcyAoN1VMKSAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwzX1JFRzogQ0FDSEVfQ09OVFJPTExFUl9SRVNFVCAoQml0IDcpICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwzX1JFR19DQUNIRV9DT05UUk9MTEVSX1JFU0VUX01zayAoMHg4MFVMKSAgICAgICAvKiE8IENBQ0hFIENBQ0hFX0NUUkwzX1JFRzogQ0FDSEVfQ09OVFJPTExFUl9SRVNFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENBQ0hFX0NBQ0hFX01STV9ISVRTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX0hJVFNfUkVHX01STV9ISVRTX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX0hJVFNfUkVHOiBNUk1fSElUUyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX0hJVFNfUkVHX01STV9ISVRTX01zayAoMHg3ZmZmZlVMKSAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX0hJVFNfUkVHOiBNUk1fSElUUyAoQml0ZmllbGQtTWFzazogMHg3ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0FDSEVfQ0FDSEVfTVJNX01JU1NFU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX01JU1NFU19SRUdfTVJNX01JU1NFU19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX01JU1NFU19SRUc6IE1STV9NSVNTRVMgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX01JU1NFU19SRUdfTVJNX01JU1NFU19Nc2sgKDB4M2ZmZmZVTCkgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX01JU1NFU19SRUc6IE1STV9NSVNTRVMgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDQUNIRV9DQUNIRV9NUk1fQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9DVFJMX1JFR19NUk1fU1RBUlRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9DVFJMX1JFRzogTVJNX1NUQVJUIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9DVFJMX1JFR19NUk1fU1RBUlRfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9DVFJMX1JFRzogTVJNX1NUQVJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9DVFJMX1JFR19NUk1fSVJRX01BU0tfUG9zICgxVUwpICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9DVFJMX1JFRzogTVJNX0lSUV9NQVNLIChCaXQgMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9DVFJMX1JFR19NUk1fSVJRX01BU0tfTXNrICgweDJVTCkgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9DVFJMX1JFRzogTVJNX0lSUV9NQVNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDQUNIRV9DQUNIRV9NUk1fQ1RSTF9SRUdfTVJNX0lSUV9USU5UX1NUQVRVU19Qb3MgKDJVTCkgICAgICAgICAgLyohPCBDQUNIRSBDQUNIRV9NUk1fQ1RSTF9SRUc6IE1STV9JUlFfVElOVF9TVEFUVVMgKEJpdCAyKSAgICAgICAqLworI2RlZmluZSBDQUNIRV9DQUNIRV9NUk1fQ1RSTF9SRUdfTVJNX0lSUV9USU5UX1NUQVRVU19Nc2sgKDB4NFVMKSAgICAgICAgLyohPCBDQUNIRSBDQUNIRV9NUk1fQ1RSTF9SRUc6IE1STV9JUlFfVElOVF9TVEFUVVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9DVFJMX1JFR19NUk1fSVJRX1RIUkVTX1NUQVRVU19Qb3MgKDNVTCkgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9DVFJMX1JFRzogTVJNX0lSUV9USFJFU19TVEFUVVMgKEJpdCAzKSAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9DVFJMX1JFR19NUk1fSVJRX1RIUkVTX1NUQVRVU19Nc2sgKDB4OFVMKSAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9DVFJMX1JFRzogTVJNX0lSUV9USFJFU19TVEFUVVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDQUNIRV9DQUNIRV9NUk1fVElOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9USU5UX1JFR19NUk1fVElOVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9USU5UX1JFRzogTVJNX1RJTlQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9USU5UX1JFR19NUk1fVElOVF9Nc2sgKDB4M2ZmZmZVTCkgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9USU5UX1JFRzogTVJNX1RJTlQgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDQUNIRV9DQUNIRV9NUk1fVEhSRVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9USFJFU19SRUdfTVJNX1RIUkVTX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9USFJFU19SRUc6IE1STV9USFJFUyAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9USFJFU19SRUdfTVJNX1RIUkVTX01zayAoMHgzZmZmZlVMKSAgICAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9USFJFU19SRUc6IE1STV9USFJFUyAoQml0ZmllbGQtTWFzazogMHgzZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENBQ0hFX1NXRF9SRVNFVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0FDSEVfU1dEX1JFU0VUX1JFR19TV0RfSFdfUkVTRVRfUkVRX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgU1dEX1JFU0VUX1JFRzogU1dEX0hXX1JFU0VUX1JFUSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfU1dEX1JFU0VUX1JFR19TV0RfSFdfUkVTRVRfUkVRX01zayAoMHgxVUwpICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgU1dEX1JFU0VUX1JFRzogU1dEX0hXX1JFU0VUX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgIHN0cnVjdCAnQ0hJUF9WRVJTSU9OJyBQb3NpdGlvbiAmIE1hc2sgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENISVBfVkVSU0lPTl9DSElQX0lEMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfSUQxX1JFR19DSElQX0lEMV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfSUQxX1JFRzogQ0hJUF9JRDEgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfSUQxX1JFR19DSElQX0lEMV9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfSUQxX1JFRzogQ0hJUF9JRDEgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENISVBfVkVSU0lPTl9DSElQX0lEMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfSUQyX1JFR19DSElQX0lEMl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfSUQyX1JFRzogQ0hJUF9JRDIgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfSUQyX1JFR19DSElQX0lEMl9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfSUQyX1JFRzogQ0hJUF9JRDIgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENISVBfVkVSU0lPTl9DSElQX0lEM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfSUQzX1JFR19DSElQX0lEM19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfSUQzX1JFRzogQ0hJUF9JRDMgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfSUQzX1JFR19DSElQX0lEM19Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfSUQzX1JFRzogQ0hJUF9JRDMgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENISVBfVkVSU0lPTl9DSElQX1NXQ19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfU1dDX1JFR19DSElQX1NXQ19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfU1dDX1JFRzogQ0hJUF9TV0MgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfU1dDX1JFR19DSElQX1NXQ19Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfU1dDX1JFRzogQ0hJUF9TV0MgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENISVBfVkVSU0lPTl9DSElQX1JFVklTSU9OX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfUkVWSVNJT05fUkVHX1JFVklTSU9OX0lEX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfUkVWSVNJT05fUkVHOiBSRVZJU0lPTl9JRCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfUkVWSVNJT05fUkVHX1JFVklTSU9OX0lEX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfUkVWSVNJT05fUkVHOiBSRVZJU0lPTl9JRCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDSElQX1ZFUlNJT05fQ0hJUF9DT05GSUcxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfQ09ORklHMV9SRUdfQ0hJUF9DT05GSUcxX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfQ09ORklHMV9SRUc6IENISVBfQ09ORklHMSAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfQ09ORklHMV9SRUdfQ0hJUF9DT05GSUcxX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfQ09ORklHMV9SRUc6IENISVBfQ09ORklHMSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDSElQX1ZFUlNJT05fQ0hJUF9DT05GSUcyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfQ09ORklHMl9SRUdfQ0hJUF9DT05GSUcyX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfQ09ORklHMl9SRUc6IENISVBfQ09ORklHMiAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfQ09ORklHMl9SRUdfQ0hJUF9DT05GSUcyX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfQ09ORklHMl9SRUc6IENISVBfQ09ORklHMiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDSElQX1ZFUlNJT05fQ0hJUF9DT05GSUczX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfQ09ORklHM19SRUdfQ0hJUF9DT05GSUczX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfQ09ORklHM19SRUc6IENISVBfQ09ORklHMyAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0NISVBfQ09ORklHM19SRUdfQ0hJUF9DT05GSUczX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgQ0hJUF9WRVJTSU9OIENISVBfQ09ORklHM19SRUc6IENISVBfQ09ORklHMyAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ0NPRVgnIFBvc2l0aW9uICYgTWFzayAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1BSR0lOR19BUkJJVEVSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBQUkdJTkdfQVJCSVRFUiAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1BSR0lOR19BUkJJVEVSX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBQUkdJTkdfQVJCSVRFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX0RFQ0lTSU9OX1NXX0FMTF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBERUNJU0lPTl9TV19BTEwgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX0RFQ0lTSU9OX1NXX0FMTF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBERUNJU0lPTl9TV19BTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1RYUlhfTU9OX0ZUREZfQUxMX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBUWFJYX01PTl9GVERGX0FMTCAoQml0IDIpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1RYUlhfTU9OX0ZUREZfQUxMX01zayAoMHg0VUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBUWFJYX01PTl9GVERGX0FMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1RYUlhfTU9OX0JMRV9BTExfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBUWFJYX01PTl9CTEVfQUxMIChCaXQgMykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1RYUlhfTU9OX0JMRV9BTExfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBUWFJYX01PTl9CTEVfQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NNQVJUX0FDVF9JTVBMX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTTUFSVF9BQ1RfSU1QTCAoQml0IDQpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NNQVJUX0FDVF9JTVBMX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTTUFSVF9BQ1RfSU1QTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9DT0VYX0RJQUdfUG9zICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfQ09FWF9ESUFHIChCaXQgNSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9DT0VYX0RJQUdfTXNrICAoMHg2MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfQ09FWF9ESUFHIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9GVERGX0NDQV9Qb3MgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfRlRERl9DQ0EgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9GVERGX0NDQV9Nc2sgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfRlRERl9DQ0EgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9GVERGX1BUSV9Qb3MgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfRlRERl9QVEkgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9GVERGX1BUSV9Nc2sgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfRlRERl9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9CTEVfUFRJX1BvcyAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfQkxFX1BUSSAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9CTEVfUFRJX01zayAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfQkxFX1BUSSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9CTEVfV0xBTl9UWF9SWF9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfQkxFX1dMQU5fVFhfUlggKEJpdCAxMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9CTEVfV0xBTl9UWF9SWF9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfQkxFX1dMQU5fVFhfUlggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENPRVhfQ09FWF9DVFJMX1JFR19TRUxfQkxFX1JBRElPX0JVU1lfUG9zICgxMVVMKSAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9DVFJMX1JFRzogU0VMX0JMRV9SQURJT19CVVNZIChCaXQgMTEpICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9DVFJMX1JFR19TRUxfQkxFX1JBRElPX0JVU1lfTXNrICgweDE4MDBVTCkgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9DVFJMX1JFRzogU0VMX0JMRV9SQURJT19CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfSUdOT1JFX0VYVF9Qb3MgICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IElHTk9SRV9FWFQgKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfSUdOT1JFX0VYVF9Nc2sgICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IElHTk9SRV9FWFQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfSUdOT1JFX0ZUREZfUG9zICAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IElHTk9SRV9GVERGIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfSUdOT1JFX0ZUREZfTXNrICAgICgweDQwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IElHTk9SRV9GVERGIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfSUdOT1JFX0JMRV9Qb3MgICAgICgxNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IElHTk9SRV9CTEUgKEJpdCAxNSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfSUdOT1JFX0JMRV9Nc2sgICAgICgweDgwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IElHTk9SRV9CTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ09FWF9DT0VYX1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfQ09FWF9ERUNJU0lPTl9QVFJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IENPRVhfREVDSVNJT05fUFRSIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfQ09FWF9ERUNJU0lPTl9QVFJfTXNrICgweGZVTCkgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IENPRVhfREVDSVNJT05fUFRSIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfQ09FWF9ERUNJU0lPTl9Qb3MgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IENPRVhfREVDSVNJT04gKEJpdCA1KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfQ09FWF9ERUNJU0lPTl9Nc2sgICgweDYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IENPRVhfREVDSVNJT04gKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfQ09FWF9DTE9TSU5HX1BvcyAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IENPRVhfQ0xPU0lORyAoQml0IDcpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfQ09FWF9DTE9TSU5HX01zayAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IENPRVhfQ0xPU0lORyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfU01BUlRfQUNUX1BvcyAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IFNNQVJUX0FDVCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfU01BUlRfQUNUX01zayAgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IFNNQVJUX0FDVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfU01BUlRfUFJJX1BvcyAgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IFNNQVJUX1BSSSAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfU01BUlRfUFJJX01zayAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IFNNQVJUX1BSSSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfRVhUX0FDVDBfUG9zICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IEVYVF9BQ1QwIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfRVhUX0FDVDBfTXNrICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IEVYVF9BQ1QwIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfRVhUX0FDVDFfUG9zICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IEVYVF9BQ1QxIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfRVhUX0FDVDFfTXNrICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IEVYVF9BQ1QxIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfQ09FWF9SQURJT19CVVNZX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IENPRVhfUkFESU9fQlVTWSAoQml0IDEyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfQ09FWF9SQURJT19CVVNZX01zayAoMHgxMDAwVUwpICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IENPRVhfUkFESU9fQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfSUdOT1JFX0VYVF9TVEFUX1BvcyAoMTNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IElHTk9SRV9FWFRfU1RBVCAoQml0IDEzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfSUdOT1JFX0VYVF9TVEFUX01zayAoMHgyMDAwVUwpICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IElHTk9SRV9FWFRfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfSUdOT1JFX0ZUREZfU1RBVF9Qb3MgKDE0VUwpICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IElHTk9SRV9GVERGX1NUQVQgKEJpdCAxNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfSUdOT1JFX0ZUREZfU1RBVF9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IElHTk9SRV9GVERGX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfSUdOT1JFX0JMRV9TVEFUX1BvcyAoMTVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IElHTk9SRV9CTEVfU1RBVCAoQml0IDE1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVF9SRUdfSUdOT1JFX0JMRV9TVEFUX01zayAoMHg4MDAwVUwpICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVF9SRUc6IElHTk9SRV9CTEVfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ09FWF9DT0VYX1NUQVQyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVDJfUkVHX0NPRVhfREVDSVNJT05fV0lUSF9DTE9TSU5HX1BvcyAoMFVMKSAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVDJfUkVHOiBDT0VYX0RFQ0lTSU9OX1dJVEhfQ0xPU0lORyAoQml0IDApICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVDJfUkVHX0NPRVhfREVDSVNJT05fV0lUSF9DTE9TSU5HX01zayAoMHg3VUwpICAgICAgLyohPCBDT0VYIENPRVhfU1RBVDJfUkVHOiBDT0VYX0RFQ0lTSU9OX1dJVEhfQ0xPU0lORyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0ZUREZfQUNUSVZFX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9GVERGX0FDVElWRSAoQml0IDMpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0ZUREZfQUNUSVZFX01zayAoMHg4VUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9GVERGX0FDVElWRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0ZUREZfUlhfRU5fUG9zICg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9GVERGX1JYX0VOIChCaXQgNCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0ZUREZfUlhfRU5fTXNrICgweDEwVUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9GVERGX1JYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0ZUREZfVFhfRU5fUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9GVERGX1RYX0VOIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0ZUREZfVFhfRU5fTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9GVERGX1RYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0ZUREZfUFRJX0lOVF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9GVERGX1BUSV9JTlQgKEJpdCA2KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0ZUREZfUFRJX0lOVF9Nc2sgKDB4MWMwVUwpICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9GVERGX1BUSV9JTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9CTEVfQUNUSVZFX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfQkxFX0FDVElWRSAoQml0IDkpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9CTEVfQUNUSVZFX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfQkxFX0FDVElWRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9CTEVfUlhfRU5fUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfQkxFX1JYX0VOIChCaXQgMTApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9CTEVfUlhfRU5fTXNrICgweDQwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfQkxFX1JYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9CTEVfVFhfRU5fUG9zICgxMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfQkxFX1RYX0VOIChCaXQgMTEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9CTEVfVFhfRU5fTXNrICgweDgwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfQkxFX1RYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9CTEVfUFRJX0lOVF9Qb3MgKDEyVUwpICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfQkxFX1BUSV9JTlQgKEJpdCAxMikgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9CTEVfUFRJX0lOVF9Nc2sgKDB4NzAwMFVMKSAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfQkxFX1BUSV9JTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9FWFRfQUNUX1BvcyAgKDE1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfRVhUX0FDVCAoQml0IDE1KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9FWFRfQUNUX01zayAgKDB4ODAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfRVhUX0FDVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ09FWF9DT0VYX0lOVF9NQVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9JTlRfTUFTS19SRUdfSVJRX1RYUlhfTU9OX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9JTlRfTUFTS19SRUc6IElSUV9UWFJYX01PTiAoQml0IDgpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9JTlRfTUFTS19SRUdfSVJRX1RYUlhfTU9OX01zayAoMHgxMDBVTCkgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9JTlRfTUFTS19SRUc6IElSUV9UWFJYX01PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIENPRVhfQ09FWF9JTlRfTUFTS19SRUdfSVJRX0RFQ0lTSU9OX1NXX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9JTlRfTUFTS19SRUc6IElSUV9ERUNJU0lPTl9TVyAoQml0IDkpICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9JTlRfTUFTS19SRUdfSVJRX0RFQ0lTSU9OX1NXX01zayAoMHgyMDBVTCkgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9JTlRfTUFTS19SRUc6IElSUV9ERUNJU0lPTl9TVyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0lOVF9TVEFUX1JFR19UWFJYX01PTl9QVFJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0lOVF9TVEFUX1JFRzogVFhSWF9NT05fUFRSIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0lOVF9TVEFUX1JFR19UWFJYX01PTl9QVFJfTXNrICgweGZVTCkgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0lOVF9TVEFUX1JFRzogVFhSWF9NT05fUFRSIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0lOVF9TVEFUX1JFR19UWFJYX01PTl9UWF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0lOVF9TVEFUX1JFRzogVFhSWF9NT05fVFggKEJpdCA1KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0lOVF9TVEFUX1JFR19UWFJYX01PTl9UWF9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0lOVF9TVEFUX1JFRzogVFhSWF9NT05fVFggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0lOVF9TVEFUX1JFR19UWFJYX01PTl9QQVNTRURfUG9zICg2VUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0lOVF9TVEFUX1JFRzogVFhSWF9NT05fUEFTU0VEIChCaXQgNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0lOVF9TVEFUX1JFR19UWFJYX01PTl9QQVNTRURfTXNrICgweDQwVUwpICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0lOVF9TVEFUX1JFRzogVFhSWF9NT05fUEFTU0VEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX1RYUlhfTU9OX09WV1JfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBUWFJYX01PTl9PVldSIChCaXQgNykgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX1RYUlhfTU9OX09WV1JfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBUWFJYX01PTl9PVldSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX0lSUV9UWFJYX01PTl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBJUlFfVFhSWF9NT04gKEJpdCA4KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX0lSUV9UWFJYX01PTl9Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBJUlFfVFhSWF9NT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX0lSUV9ERUNJU0lPTl9TV19Qb3MgKDlVTCkgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBJUlFfREVDSVNJT05fU1cgKEJpdCA5KSAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX0lSUV9ERUNJU0lPTl9TV19Nc2sgKDB4MjAwVUwpICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBJUlFfREVDSVNJT05fU1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9CTEVfUFRJX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9CTEVfUFRJX1JFR19DT0VYX0JMRV9QVElfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9CTEVfUFRJX1JFRzogQ09FWF9CTEVfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9CTEVfUFRJX1JFR19DT0VYX0JMRV9QVElfTXNrICgweDdVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9CTEVfUFRJX1JFRzogQ09FWF9CTEVfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ09FWF9DT0VYX0ZUREZfUFRJX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9GVERGX1BUSV9SRUdfQ09FWF9GVERGX1BUSV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9GVERGX1BUSV9SRUc6IENPRVhfRlRERl9QVEkgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9GVERGX1BUSV9SRUdfQ09FWF9GVERGX1BUSV9Nc2sgKDB4N1VMKSAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9GVERGX1BUSV9SRUc6IENPRVhfRlRERl9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxX1JFR19DT0VYX1BSSV9QVElfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxX1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxX1JFR19DT0VYX1BSSV9QVElfTXNrICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxX1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxX1JFR19DT0VYX1BSSV9NQUNfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxX1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxX1JFR19DT0VYX1BSSV9NQUNfTXNrICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxX1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkyX1JFR19DT0VYX1BSSV9QVElfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkyX1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkyX1JFR19DT0VYX1BSSV9QVElfTXNrICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkyX1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkyX1JFR19DT0VYX1BSSV9NQUNfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkyX1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkyX1JFR19DT0VYX1BSSV9NQUNfTXNrICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkyX1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkzX1JFR19DT0VYX1BSSV9QVElfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkzX1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkzX1JFR19DT0VYX1BSSV9QVElfTXNrICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkzX1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkzX1JFR19DT0VYX1BSSV9NQUNfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkzX1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkzX1JFR19DT0VYX1BSSV9NQUNfTXNrICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkzX1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk0X1JFR19DT0VYX1BSSV9QVElfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk0X1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk0X1JFR19DT0VYX1BSSV9QVElfTXNrICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk0X1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk0X1JFR19DT0VYX1BSSV9NQUNfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk0X1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk0X1JFR19DT0VYX1BSSV9NQUNfTXNrICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk0X1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk1X1JFR19DT0VYX1BSSV9QVElfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk1X1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk1X1JFR19DT0VYX1BSSV9QVElfTXNrICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk1X1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk1X1JFR19DT0VYX1BSSV9NQUNfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk1X1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk1X1JFR19DT0VYX1BSSV9NQUNfTXNrICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk1X1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk2X1JFR19DT0VYX1BSSV9QVElfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk2X1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk2X1JFR19DT0VYX1BSSV9QVElfTXNrICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk2X1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk2X1JFR19DT0VYX1BSSV9NQUNfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk2X1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk2X1JFR19DT0VYX1BSSV9NQUNfTXNrICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk2X1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk3X1JFR19DT0VYX1BSSV9QVElfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk3X1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk3X1JFR19DT0VYX1BSSV9QVElfTXNrICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk3X1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk3X1JFR19DT0VYX1BSSV9NQUNfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk3X1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk3X1JFR19DT0VYX1BSSV9NQUNfTXNrICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk3X1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJOF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk4X1JFR19DT0VYX1BSSV9QVElfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk4X1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk4X1JFR19DT0VYX1BSSV9QVElfTXNrICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk4X1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk4X1JFR19DT0VYX1BSSV9NQUNfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk4X1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk4X1JFR19DT0VYX1BSSV9NQUNfTXNrICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk4X1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJOV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk5X1JFR19DT0VYX1BSSV9QVElfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk5X1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk5X1JFR19DT0VYX1BSSV9QVElfTXNrICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk5X1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk5X1JFR19DT0VYX1BSSV9NQUNfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk5X1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkk5X1JFR19DT0VYX1BSSV9NQUNfTXNrICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkk5X1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJMTBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMF9SRUdfQ09FWF9QUklfUFRJX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMF9SRUc6IENPRVhfUFJJX1BUSSAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMF9SRUdfQ09FWF9QUklfUFRJX01zayAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMF9SRUc6IENPRVhfUFJJX1BUSSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMF9SRUdfQ09FWF9QUklfTUFDX1BvcyAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMF9SRUc6IENPRVhfUFJJX01BQyAoQml0IDMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMF9SRUdfQ09FWF9QUklfTUFDX01zayAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMF9SRUc6IENPRVhfUFJJX01BQyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJMTFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMV9SRUdfQ09FWF9QUklfUFRJX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMV9SRUc6IENPRVhfUFJJX1BUSSAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMV9SRUdfQ09FWF9QUklfUFRJX01zayAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMV9SRUc6IENPRVhfUFJJX1BUSSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMV9SRUdfQ09FWF9QUklfTUFDX1BvcyAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMV9SRUc6IENPRVhfUFJJX01BQyAoQml0IDMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMV9SRUdfQ09FWF9QUklfTUFDX01zayAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMV9SRUc6IENPRVhfUFJJX01BQyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJMTJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMl9SRUdfQ09FWF9QUklfUFRJX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMl9SRUc6IENPRVhfUFJJX1BUSSAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMl9SRUdfQ09FWF9QUklfUFRJX01zayAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMl9SRUc6IENPRVhfUFJJX1BUSSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMl9SRUdfQ09FWF9QUklfTUFDX1BvcyAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMl9SRUc6IENPRVhfUFJJX01BQyAoQml0IDMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxMl9SRUdfQ09FWF9QUklfTUFDX01zayAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxMl9SRUc6IENPRVhfUFJJX01BQyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJMTNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxM19SRUdfQ09FWF9QUklfUFRJX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxM19SRUc6IENPRVhfUFJJX1BUSSAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxM19SRUdfQ09FWF9QUklfUFRJX01zayAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxM19SRUc6IENPRVhfUFJJX1BUSSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxM19SRUdfQ09FWF9QUklfTUFDX1BvcyAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxM19SRUc6IENPRVhfUFJJX01BQyAoQml0IDMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxM19SRUdfQ09FWF9QUklfTUFDX01zayAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxM19SRUc6IENPRVhfUFJJX01BQyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJMTRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxNF9SRUdfQ09FWF9QUklfUFRJX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxNF9SRUc6IENPRVhfUFJJX1BUSSAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxNF9SRUdfQ09FWF9QUklfUFRJX01zayAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxNF9SRUc6IENPRVhfUFJJX1BUSSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxNF9SRUdfQ09FWF9QUklfTUFDX1BvcyAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxNF9SRUc6IENPRVhfUFJJX01BQyAoQml0IDMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxNF9SRUdfQ09FWF9QUklfTUFDX01zayAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxNF9SRUc6IENPRVhfUFJJX01BQyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfUFJJMTVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxNV9SRUdfQ09FWF9QUklfUFRJX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxNV9SRUc6IENPRVhfUFJJX1BUSSAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxNV9SRUdfQ09FWF9QUklfUFRJX01zayAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxNV9SRUc6IENPRVhfUFJJX1BUSSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxNV9SRUdfQ09FWF9QUklfTUFDX1BvcyAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxNV9SRUc6IENPRVhfUFJJX01BQyAoQml0IDMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9QUkkxNV9SRUdfQ09FWF9QUklfTUFDX01zayAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9QUkkxNV9SRUc6IENPRVhfUFJJX01BQyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgIHN0cnVjdCAnQ1JHX1BFUicgUG9zaXRpb24gJiBNYXNrICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfUEVSX0NMS19QRVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfVUFSVF9FTkFCTEVfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IFVBUlRfRU5BQkxFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfVUFSVF9FTkFCTEVfTXNrICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IFVBUlRfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfU1BJX0VOQUJMRV9Qb3MgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IFNQSV9FTkFCTEUgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfU1BJX0VOQUJMRV9Nc2sgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IFNQSV9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfSTJDX0VOQUJMRV9Qb3MgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IEkyQ19FTkFCTEUgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfSTJDX0VOQUJMRV9Nc2sgICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IEkyQ19FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfUVVBRF9FTkFCTEVfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IFFVQURfRU5BQkxFIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfUVVBRF9FTkFCTEVfTXNrICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IFFVQURfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfSVJfQ0xLX0VOQUJMRV9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IElSX0NMS19FTkFCTEUgKEJpdCA0KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfSVJfQ0xLX0VOQUJMRV9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IElSX0NMS19FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfS0JTQ0FOX0VOQUJMRV9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IEtCU0NBTl9FTkFCTEUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfS0JTQ0FOX0VOQUJMRV9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IEtCU0NBTl9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfU1BJX0NMS19TRUxfUG9zICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IFNQSV9DTEtfU0VMIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfU1BJX0NMS19TRUxfTXNrICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IFNQSV9DTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfSTJDX0NMS19TRUxfUG9zICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IEkyQ19DTEtfU0VMIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfSTJDX0NMS19TRUxfTXNrICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IEkyQ19DTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfS0JTQ0FOX0NMS19TRUxfUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IEtCU0NBTl9DTEtfU0VMIChCaXQgMTApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfS0JTQ0FOX0NMS19TRUxfTXNrICgweDQwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IEtCU0NBTl9DTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfQURDX0NMS19TRUxfUG9zICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IEFEQ19DTEtfU0VMIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfQ0xLX1BFUl9SRUdfQURDX0NMS19TRUxfTXNrICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgQ0xLX1BFUl9SRUc6IEFEQ19DTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfUEVSX1BDTV9ESVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19QRVJfUENNX0RJVl9SRUdfUENNX0RJVl9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUENNX0RJVl9SRUc6IFBDTV9ESVYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfUENNX0RJVl9SRUdfUENNX0RJVl9Nc2sgICAgICAgKDB4ZmZmVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUENNX0RJVl9SRUc6IFBDTV9ESVYgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmKSAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfUENNX0RJVl9SRUdfQ0xLX1BDTV9FTl9Qb3MgICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUENNX0RJVl9SRUc6IENMS19QQ01fRU4gKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfUENNX0RJVl9SRUdfQ0xLX1BDTV9FTl9Nc2sgICAgKDB4MTAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUENNX0RJVl9SRUc6IENMS19QQ01fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIENSR19QRVJfUENNX0RJVl9SRUdfUENNX1NSQ19TRUxfUG9zICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUENNX0RJVl9SRUc6IFBDTV9TUkNfU0VMIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfUENNX0RJVl9SRUdfUENNX1NSQ19TRUxfTXNrICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUENNX0RJVl9SRUc6IFBDTV9TUkNfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19QRVJfUENNX0ZESVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19QRVJfUENNX0ZESVZfUkVHX1BDTV9GRElWX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUENNX0ZESVZfUkVHOiBQQ01fRkRJViAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfUENNX0ZESVZfUkVHX1BDTV9GRElWX01zayAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUENNX0ZESVZfUkVHOiBQQ01fRkRJViAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfUEVSX1BETV9ESVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19QRVJfUERNX0RJVl9SRUdfUERNX0RJVl9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUERNX0RJVl9SRUc6IFBETV9ESVYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfUERNX0RJVl9SRUdfUERNX0RJVl9Nc2sgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUERNX0RJVl9SRUc6IFBETV9ESVYgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfUERNX0RJVl9SRUdfQ0xLX1BETV9FTl9Qb3MgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUERNX0RJVl9SRUc6IENMS19QRE1fRU4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfUERNX0RJVl9SRUdfQ0xLX1BETV9FTl9Nc2sgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUERNX0RJVl9SRUc6IENMS19QRE1fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIENSR19QRVJfUERNX0RJVl9SRUdfUERNX01BU1RFUl9NT0RFX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUERNX0RJVl9SRUc6IFBETV9NQVNURVJfTU9ERSAoQml0IDkpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfUERNX0RJVl9SRUdfUERNX01BU1RFUl9NT0RFX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgUERNX0RJVl9SRUc6IFBETV9NQVNURVJfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfUEVSX1NSQ19ESVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19QRVJfU1JDX0RJVl9SRUdfU1JDX0RJVl9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgU1JDX0RJVl9SRUc6IFNSQ19ESVYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfU1JDX0RJVl9SRUdfU1JDX0RJVl9Nc2sgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgU1JDX0RJVl9SRUc6IFNSQ19ESVYgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfU1JDX0RJVl9SRUdfQ0xLX1NSQ19FTl9Qb3MgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgU1JDX0RJVl9SRUc6IENMS19TUkNfRU4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfU1JDX0RJVl9SRUdfQ0xLX1NSQ19FTl9Nc2sgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgU1JDX0RJVl9SRUc6IENMS19TUkNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19QRVJfRUhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19QRVJfRUhfUkVHX0VIX0VOX1BvcyAgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgRUhfUkVHOiBFSF9FTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfRUhfUkVHX0VIX0VOX01zayAgICAgICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgRUhfUkVHOiBFSF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfUEVSX1VTQlBBRF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19QRVJfVVNCUEFEX1JFR19VU0JQQURfRU5fUG9zICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgVVNCUEFEX1JFRzogVVNCUEFEX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfVVNCUEFEX1JFR19VU0JQQURfRU5fTXNrICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgVVNCUEFEX1JFRzogVVNCUEFEX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfVVNCUEFEX1JFR19VU0JQSFlfRk9SQ0VfU1cxX09GRl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgVVNCUEFEX1JFRzogVVNCUEhZX0ZPUkNFX1NXMV9PRkYgKEJpdCAxKSAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfVVNCUEFEX1JFR19VU0JQSFlfRk9SQ0VfU1cxX09GRl9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAvKiE8IENSR19QRVIgVVNCUEFEX1JFRzogVVNCUEhZX0ZPUkNFX1NXMV9PRkYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19QRVJfVVNCUEFEX1JFR19VU0JQSFlfRk9SQ0VfU1cyX09OX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19QRVIgVVNCUEFEX1JFRzogVVNCUEhZX0ZPUkNFX1NXMl9PTiAoQml0IDIpICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19QRVJfVVNCUEFEX1JFR19VU0JQSFlfRk9SQ0VfU1cyX09OX01zayAoMHg0VUwpICAgICAgICAgICAgICAvKiE8IENSR19QRVIgVVNCUEFEX1JFRzogVVNCUEhZX0ZPUkNFX1NXMl9PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgc3RydWN0ICdDUkdfVE9QJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9DTEtfQU1CQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfSENMS19ESVZfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IEhDTEtfRElWIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfSENMS19ESVZfTXNrICAgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IEhDTEtfRElWIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfUENMS19ESVZfUG9zICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IFBDTEtfRElWIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfUENMS19ESVZfTXNrICAgICAoMHgzMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IFBDTEtfRElWIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfQUVTX0NMS19FTkFCTEVfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IEFFU19DTEtfRU5BQkxFIChCaXQgNikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfQUVTX0NMS19FTkFCTEVfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IEFFU19DTEtfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfRUNDX0NMS19FTkFCTEVfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IEVDQ19DTEtfRU5BQkxFIChCaXQgNykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfRUNDX0NMS19FTkFCTEVfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IEVDQ19DTEtfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfVFJOR19DTEtfRU5BQkxFX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IFRSTkdfQ0xLX0VOQUJMRSAoQml0IDgpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfVFJOR19DTEtfRU5BQkxFX01zayAoMHgxMDBVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IFRSTkdfQ0xLX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfT1RQX0VOQUJMRV9Qb3MgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IE9UUF9FTkFCTEUgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfT1RQX0VOQUJMRV9Nc2sgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IE9UUF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfUVNQSV9ESVZfUG9zICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IFFTUElfRElWIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfUVNQSV9ESVZfTXNrICAgICAoMHhjMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IFFTUElfRElWIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfUVNQSV9FTkFCTEVfUG9zICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IFFTUElfRU5BQkxFIChCaXQgMTIpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQU1CQV9SRUdfUVNQSV9FTkFCTEVfTXNrICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQU1CQV9SRUc6IFFTUElfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfQ0xLX0ZSRVFfVFJJTV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfRlJFUV9UUklNX1JFR19GSU5FX0FESl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfRlJFUV9UUklNX1JFRzogRklORV9BREogKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfRlJFUV9UUklNX1JFR19GSU5FX0FESl9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfRlJFUV9UUklNX1JFRzogRklORV9BREogKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfRlJFUV9UUklNX1JFR19DT0FSU0VfQURKX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfRlJFUV9UUklNX1JFRzogQ09BUlNFX0FESiAoQml0IDgpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfRlJFUV9UUklNX1JFR19DT0FSU0VfQURKX01zayAoMHg3MDBVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfRlJFUV9UUklNX1JFRzogQ09BUlNFX0FESiAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9DTEtfUkFESU9fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX1JGQ1VfRElWX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBSRkNVX0RJViAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX1JGQ1VfRElWX01zayAgICAoMHgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBSRkNVX0RJViAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX1JGQ1VfRU5BQkxFX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBSRkNVX0VOQUJMRSAoQml0IDMpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX1JGQ1VfRU5BQkxFX01zayAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBSRkNVX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX0JMRV9ESVZfUG9zICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBCTEVfRElWIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX0JMRV9ESVZfTXNrICAgICAoMHgzMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBCTEVfRElWIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX0JMRV9MUF9SRVNFVF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBCTEVfTFBfUkVTRVQgKEJpdCA2KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX0JMRV9MUF9SRVNFVF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBCTEVfTFBfUkVTRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX0JMRV9FTkFCTEVfUG9zICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBCTEVfRU5BQkxFIChCaXQgNykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX0JMRV9FTkFCTEVfTXNrICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBCTEVfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX0ZUREZfTUFDX0RJVl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBGVERGX01BQ19ESVYgKEJpdCA4KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX0ZUREZfTUFDX0RJVl9Nc2sgKDB4MzAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBGVERGX01BQ19ESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX0ZUREZfTUFDX0VOQUJMRV9Qb3MgKDExVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBGVERGX01BQ19FTkFCTEUgKEJpdCAxMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfUkFESU9fUkVHX0ZUREZfTUFDX0VOQUJMRV9Nc2sgKDB4ODAwVUwpICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfUkFESU9fUkVHOiBGVERGX01BQ19FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfQ0xLX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1NZU19DTEtfU0VMX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBTWVNfQ0xLX1NFTCAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1NZU19DTEtfU0VMX01zayAgKDB4M1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBTWVNfQ0xLX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1hUQUwxNk1fRElTQUJMRV9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBYVEFMMTZNX0RJU0FCTEUgKEJpdCAyKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1hUQUwxNk1fRElTQUJMRV9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBYVEFMMTZNX0RJU0FCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1hUQUwzMk1fTU9ERV9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBYVEFMMzJNX01PREUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1hUQUwzMk1fTU9ERV9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBYVEFMMzJNX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1VTQl9DTEtfU1JDX1BvcyAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBVU0JfQ0xLX1NSQyAoQml0IDQpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1VTQl9DTEtfU1JDX01zayAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBVU0JfQ0xLX1NSQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1BMTF9ESVYyX1BvcyAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBQTExfRElWMiAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1BMTF9ESVYyX01zayAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBQTExfRElWMiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX0RJVk5fWFRBTDMyTV9NT0RFX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBESVZOX1hUQUwzMk1fTU9ERSAoQml0IDYpICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX0RJVk5fWFRBTDMyTV9NT0RFX01zayAoMHg0MFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBESVZOX1hUQUwzMk1fTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfRElWTl9TWU5DX0xFVkVMX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IERJVk5fU1lOQ19MRVZFTCAoQml0IDcpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfRElWTl9TWU5DX0xFVkVMX01zayAoMHg4MFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IERJVk5fU1lOQ19MRVZFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfQ0xLMzJLX1NPVVJDRV9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IENMSzMyS19TT1VSQ0UgKEJpdCA4KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfQ0xLMzJLX1NPVVJDRV9Nc2sgKDB4MzAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IENMSzMyS19TT1VSQ0UgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfRElWTl9TSElGVF9TRUxfUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IERJVk5fU0hJRlRfU0VMIChCaXQgMTApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfRElWTl9TSElGVF9TRUxfTXNrICgweDQwMFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IERJVk5fU0hJRlRfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfUlVOTklOR19BVF8zMktfUG9zICgxMlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFJVTk5JTkdfQVRfMzJLIChCaXQgMTIpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfUlVOTklOR19BVF8zMktfTXNrICgweDEwMDBVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFJVTk5JTkdfQVRfMzJLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfUlVOTklOR19BVF9SQzE2TV9Qb3MgKDEzVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFJVTk5JTkdfQVRfUkMxNk0gKEJpdCAxMykgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfUlVOTklOR19BVF9SQzE2TV9Nc2sgKDB4MjAwMFVMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFJVTk5JTkdfQVRfUkMxNk0gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1JVTk5JTkdfQVRfWFRBTDE2TV9Qb3MgKDE0VUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBSVU5OSU5HX0FUX1hUQUwxNk0gKEJpdCAxNCkgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1JVTk5JTkdfQVRfWFRBTDE2TV9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBSVU5OSU5HX0FUX1hUQUwxNk0gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1JVTk5JTkdfQVRfUExMOTZNX1BvcyAoMTVVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBSVU5OSU5HX0FUX1BMTDk2TSAoQml0IDE1KSAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX0NUUkxfUkVHX1JVTk5JTkdfQVRfUExMOTZNX01zayAoMHg4MDAwVUwpICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX0NUUkxfUkVHOiBSVU5OSU5HX0FUX1BMTDk2TSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfQ0xLX1RNUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIwX0RJVl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMF9ESVYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIwX0RJVl9Nc2sgICAgICAoMHgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMF9ESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIwX0VOQUJMRV9Qb3MgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMF9FTkFCTEUgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIwX0VOQUJMRV9Nc2sgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIwX0NMS19TRUxfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMF9DTEtfU0VMIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIwX0NMS19TRUxfTXNrICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMF9DTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIxX0RJVl9Qb3MgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMV9ESVYgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIxX0RJVl9Nc2sgICAgICAoMHgzMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMV9ESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIxX0VOQUJMRV9Qb3MgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMV9FTkFCTEUgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIxX0VOQUJMRV9Nc2sgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMV9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIxX0NMS19TRUxfUG9zICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMV9DTEtfU0VMIChCaXQgNykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIxX0NMS19TRUxfTXNrICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMV9DTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIyX0RJVl9Qb3MgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMl9ESVYgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIyX0RJVl9Nc2sgICAgICAoMHgzMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMl9ESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIyX0VOQUJMRV9Qb3MgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMl9FTkFCTEUgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIyX0VOQUJMRV9Nc2sgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMl9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIyX0NMS19TRUxfUG9zICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMl9DTEtfU0VMIChCaXQgMTEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIyX0NMS19TRUxfTXNrICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogVE1SMl9DTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19CUkVBVEhfRU5BQkxFX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogQlJFQVRIX0VOQUJMRSAoQml0IDEyKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19CUkVBVEhfRU5BQkxFX01zayAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogQlJFQVRIX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19XQUtFVVBDVF9FTkFCTEVfUG9zICgxM1VMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogV0FLRVVQQ1RfRU5BQkxFIChCaXQgMTMpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19XQUtFVVBDVF9FTkFCTEVfTXNrICgweDIwMDBVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogV0FLRVVQQ1RfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19QMDZfVE1SMV9QV01fTU9ERV9Qb3MgKDE0VUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogUDA2X1RNUjFfUFdNX01PREUgKEJpdCAxNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfVE1SX1JFR19QMDZfVE1SMV9QV01fTU9ERV9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfVE1SX1JFRzogUDA2X1RNUjFfUFdNX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfUE1VX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1BFUklQSF9TTEVFUF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBQRVJJUEhfU0xFRVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1BFUklQSF9TTEVFUF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBQRVJJUEhfU0xFRVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1JBRElPX1NMRUVQX1BvcyAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBSQURJT19TTEVFUCAoQml0IDEpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1JBRElPX1NMRUVQX01zayAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBSQURJT19TTEVFUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX0JMRV9TTEVFUF9Qb3MgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBCTEVfU0xFRVAgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX0JMRV9TTEVFUF9Nc2sgICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBCTEVfU0xFRVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX0ZUREZfU0xFRVBfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBGVERGX1NMRUVQIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX0ZUREZfU0xFRVBfTXNrICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBGVERGX1NMRUVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX01BUF9CQU5ER0FQX0VOX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBNQVBfQkFOREdBUF9FTiAoQml0IDQpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX01BUF9CQU5ER0FQX0VOX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBNQVBfQkFOREdBUF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1JFU0VUX09OX1dBS0VVUF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBSRVNFVF9PTl9XQUtFVVAgKEJpdCA1KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1JFU0VUX09OX1dBS0VVUF9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBSRVNFVF9PTl9XQUtFVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX09UUF9DT1BZX0RJVl9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBPVFBfQ09QWV9ESVYgKEJpdCA2KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX09UUF9DT1BZX0RJVl9Nc2sgKDB4YzBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBPVFBfQ09QWV9ESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1JFVEFJTl9SQU1fUG9zICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBSRVRBSU5fUkFNIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1JFVEFJTl9SQU1fTXNrICAgKDB4MWYwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBSRVRBSU5fUkFNIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX0VOQUJMRV9DTEtMRVNTX1BvcyAoMTNVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBFTkFCTEVfQ0xLTEVTUyAoQml0IDEzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX0VOQUJMRV9DTEtMRVNTX01zayAoMHgyMDAwVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBFTkFCTEVfQ0xLTEVTUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1JFVEFJTl9DQUNIRV9Qb3MgKDE0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBSRVRBSU5fQ0FDSEUgKEJpdCAxNCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1JFVEFJTl9DQUNIRV9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBSRVRBSU5fQ0FDSEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1JFVEFJTl9FQ0NSQU1fUG9zICgxNVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBSRVRBSU5fRUNDUkFNIChCaXQgMTUpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE1VX0NUUkxfUkVHX1JFVEFJTl9FQ0NSQU1fTXNrICgweDgwMDBVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE1VX0NUUkxfUkVHOiBSRVRBSU5fRUNDUkFNIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfU1lTX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1JFTUFQX0FEUjBfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBSRU1BUF9BRFIwIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1JFTUFQX0FEUjBfTXNrICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBSRU1BUF9BRFIwIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1JFTUFQX1JBTVNfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBSRU1BUF9SQU1TIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1JFTUFQX1JBTVNfTXNrICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBSRU1BUF9SQU1TIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1BBRF9MQVRDSF9FTl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBQQURfTEFUQ0hfRU4gKEJpdCA1KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1BBRF9MQVRDSF9FTl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBQQURfTEFUQ0hfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX09UUENfUkVTRVRfUkVRX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBPVFBDX1JFU0VUX1JFUSAoQml0IDYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX09UUENfUkVTRVRfUkVRX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBPVFBDX1JFU0VUX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX0RFQlVHR0VSX0VOQUJMRV9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBERUJVR0dFUl9FTkFCTEUgKEJpdCA3KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX0RFQlVHR0VSX0VOQUJMRV9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBERUJVR0dFUl9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX0RSQV9PRkZfUG9zICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBEUkFfT0ZGIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX0RSQV9PRkZfTXNrICAgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBEUkFfT0ZGIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1RJTUVPVVRfRElTQUJMRV9Qb3MgKDlVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBUSU1FT1VUX0RJU0FCTEUgKEJpdCA5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1RJTUVPVVRfRElTQUJMRV9Nc2sgKDB4MjAwVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBUSU1FT1VUX0RJU0FCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX0NBQ0hFUkFNX01VWF9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBDQUNIRVJBTV9NVVggKEJpdCAxMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX0NBQ0hFUkFNX01VWF9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBDQUNIRVJBTV9NVVggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX0RFVl9QSEFTRV9Qb3MgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBERVZfUEhBU0UgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX0RFVl9QSEFTRV9Nc2sgICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBERVZfUEhBU0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1FTUElfSU5JVF9Qb3MgICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBRU1BJX0lOSVQgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1FTUElfSU5JVF9Nc2sgICAgKDB4MTAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBRU1BJX0lOSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX09UUF9DT1BZX1BvcyAgICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBPVFBfQ09QWSAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX09UUF9DT1BZX01zayAgICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBPVFBfQ09QWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1JFTUFQX0lOVFZFQ1RfUG9zICgxNFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBSRU1BUF9JTlRWRUNUIChCaXQgMTQpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1JFTUFQX0lOVFZFQ1RfTXNrICgweDQwMDBVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBSRU1BUF9JTlRWRUNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1NXX1JFU0VUX1BvcyAgICAgKDE1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBTV19SRVNFVCAoQml0IDE1KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX0NUUkxfUkVHX1NXX1JFU0VUX01zayAgICAgKDB4ODAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX0NUUkxfUkVHOiBTV19SRVNFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfU1lTX1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1JBRF9JU19ET1dOX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBSQURfSVNfRE9XTiAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1JBRF9JU19ET1dOX01zayAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBSQURfSVNfRE9XTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1JBRF9JU19VUF9Qb3MgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBSQURfSVNfVVAgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1JBRF9JU19VUF9Nc2sgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBSQURfSVNfVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1BFUl9JU19ET1dOX1BvcyAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBQRVJfSVNfRE9XTiAoQml0IDIpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1BFUl9JU19ET1dOX01zayAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBQRVJfSVNfRE9XTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1BFUl9JU19VUF9Qb3MgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBQRVJfSVNfVVAgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1BFUl9JU19VUF9Nc2sgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBQRVJfSVNfVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1hUQUwxNl9TVzJfUG9zICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBYVEFMMTZfU1cyIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1hUQUwxNl9TVzJfTXNrICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBYVEFMMTZfU1cyIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX0RCR19JU19BQ1RJVkVfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBEQkdfSVNfQUNUSVZFIChCaXQgNSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX0RCR19JU19BQ1RJVkVfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBEQkdfSVNfQUNUSVZFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1hUQUwxNl9UUklNX1JFQURZX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBYVEFMMTZfVFJJTV9SRUFEWSAoQml0IDYpICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX1hUQUwxNl9UUklNX1JFQURZX01zayAoMHg0MFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBYVEFMMTZfVFJJTV9SRUFEWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfWFRBTDE2X1NFVFRMRV9SRUFEWV9Qb3MgKDdVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFhUQUwxNl9TRVRUTEVfUkVBRFkgKEJpdCA3KSAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfWFRBTDE2X1NFVFRMRV9SRUFEWV9Nc2sgKDB4ODBVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFhUQUwxNl9TRVRUTEVfUkVBRFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX0JMRV9JU19ET1dOX1BvcyAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBCTEVfSVNfRE9XTiAoQml0IDgpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX0JMRV9JU19ET1dOX01zayAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBCTEVfSVNfRE9XTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX0JMRV9JU19VUF9Qb3MgICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBCTEVfSVNfVVAgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX0JMRV9JU19VUF9Nc2sgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBCTEVfSVNfVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX0ZUREZfSVNfRE9XTl9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBGVERGX0lTX0RPV04gKEJpdCAxMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX0ZUREZfSVNfRE9XTl9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBGVERGX0lTX0RPV04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX0ZUREZfSVNfVVBfUG9zICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBGVERGX0lTX1VQIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1lTX1NUQVRfUkVHX0ZUREZfSVNfVVBfTXNrICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1lTX1NUQVRfUkVHOiBGVERGX0lTX1VQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfVFJJTV9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfVFJJTV9DVFJMX1JFR19YVEFMX0NPVU5UX05fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgVFJJTV9DVFJMX1JFRzogWFRBTF9DT1VOVF9OIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfVFJJTV9DVFJMX1JFR19YVEFMX0NPVU5UX05fTXNrICgweDNmVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgVFJJTV9DVFJMX1JFRzogWFRBTF9DT1VOVF9OIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICovCisjZGVmaW5lIENSR19UT1BfVFJJTV9DVFJMX1JFR19YVEFMX1RSSU1fU0VMRUNUX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgVFJJTV9DVFJMX1JFRzogWFRBTF9UUklNX1NFTEVDVCAoQml0IDYpICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfVFJJTV9DVFJMX1JFR19YVEFMX1RSSU1fU0VMRUNUX01zayAoMHhjMFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgVFJJTV9DVFJMX1JFRzogWFRBTF9UUklNX1NFTEVDVCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgQ1JHX1RPUF9UUklNX0NUUkxfUkVHX1hUQUxfU0VUVExFX05fUG9zICg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBUUklNX0NUUkxfUkVHOiBYVEFMX1NFVFRMRV9OIChCaXQgOCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9UUklNX0NUUkxfUkVHX1hUQUxfU0VUVExFX05fTXNrICgweDNmMDBVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBUUklNX0NUUkxfUkVHOiBYVEFMX1NFVFRMRV9OIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfQ0xLXzMyS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19YVEFMMzJLX0VOQUJMRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogWFRBTDMyS19FTkFCTEUgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19YVEFMMzJLX0VOQUJMRV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogWFRBTDMyS19FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19YVEFMMzJLX1JCSUFTX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogWFRBTDMyS19SQklBUyAoQml0IDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19YVEFMMzJLX1JCSUFTX01zayAoMHg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogWFRBTDMyS19SQklBUyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19YVEFMMzJLX0NVUl9Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogWFRBTDMyS19DVVIgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19YVEFMMzJLX0NVUl9Nc2sgICAoMHg3OFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogWFRBTDMyS19DVVIgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19SQzMyS19FTkFCTEVfUG9zICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogUkMzMktfRU5BQkxFIChCaXQgNykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19SQzMyS19FTkFCTEVfTXNrICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogUkMzMktfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19SQzMyS19UUklNX1BvcyAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogUkMzMktfVFJJTSAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19SQzMyS19UUklNX01zayAgICAoMHhmMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogUkMzMktfVFJJTSAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19YVEFMMzJLX0RJU0FCTEVfQU1QUkVHX1BvcyAoMTJVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogWFRBTDMyS19ESVNBQkxFX0FNUFJFRyAoQml0IDEyKSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19YVEFMMzJLX0RJU0FCTEVfQU1QUkVHX01zayAoMHgxMDAwVUwpICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogWFRBTDMyS19ESVNBQkxFX0FNUFJFRyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19YVEFMMzJLX1hUQUwxX0JJQVNfRElTQUJMRV9Qb3MgKDEzVUwpICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogWFRBTDMyS19YVEFMMV9CSUFTX0RJU0FCTEUgKEJpdCAxMykgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMzJLX1JFR19YVEFMMzJLX1hUQUwxX0JJQVNfRElTQUJMRV9Nc2sgKDB4MjAwMFVMKSAgIC8qITwgQ1JHX1RPUCBDTEtfMzJLX1JFRzogWFRBTDMyS19YVEFMMV9CSUFTX0RJU0FCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0NMS18xNk1fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfUkMxNk1fRU5BQkxFX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFJDMTZNX0VOQUJMRSAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfUkMxNk1fRU5BQkxFX01zayAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFJDMTZNX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfUkMxNk1fVFJJTV9Qb3MgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFJDMTZNX1RSSU0gKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfUkMxNk1fVFJJTV9Nc2sgICAgKDB4MWVVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFJDMTZNX1RSSU0gKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfWFRBTDE2X0NVUl9TRVRfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFhUQUwxNl9DVVJfU0VUIChCaXQgNSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfWFRBTDE2X0NVUl9TRVRfTXNrICgweGUwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFhUQUwxNl9DVVJfU0VUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfWFRBTDE2X01BWF9DVVJSRU5UX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFhUQUwxNl9NQVhfQ1VSUkVOVCAoQml0IDgpICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfWFRBTDE2X01BWF9DVVJSRU5UX01zayAoMHgxMDBVTCkgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFhUQUwxNl9NQVhfQ1VSUkVOVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19YVEFMMTZfRVhUX0NMS19FTkFCTEVfUG9zICg5VUwpICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogWFRBTDE2X0VYVF9DTEtfRU5BQkxFIChCaXQgOSkgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19YVEFMMTZfRVhUX0NMS19FTkFCTEVfTXNrICgweDIwMFVMKSAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogWFRBTDE2X0VYVF9DTEtfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0NMS18xNk1fUkVHX1hUQUwxNl9BTVBfVFJJTV9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18xNk1fUkVHOiBYVEFMMTZfQU1QX1RSSU0gKEJpdCAxMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18xNk1fUkVHX1hUQUwxNl9BTVBfVFJJTV9Nc2sgKDB4MWMwMFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18xNk1fUkVHOiBYVEFMMTZfQU1QX1RSSU0gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18xNk1fUkVHX1hUQUwxNl9TUElLRV9GTFRfQllQQVNTX1BvcyAoMTNVTCkgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18xNk1fUkVHOiBYVEFMMTZfU1BJS0VfRkxUX0JZUEFTUyAoQml0IDEzKSAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18xNk1fUkVHX1hUQUwxNl9TUElLRV9GTFRfQllQQVNTX01zayAoMHgyMDAwVUwpICAgICAgLyohPCBDUkdfVE9QIENMS18xNk1fUkVHOiBYVEFMMTZfU1BJS0VfRkxUX0JZUEFTUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19YVEFMMTZfSFBBU1NfRkxUX0VOX1BvcyAoMTRVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogWFRBTDE2X0hQQVNTX0ZMVF9FTiAoQml0IDE0KSAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19YVEFMMTZfSFBBU1NfRkxUX0VOX01zayAoMHg0MDAwVUwpICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogWFRBTDE2X0hQQVNTX0ZMVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19SQzE2TV9TVEFSVFVQX0RJU0FCTEVfUG9zICgxNVVMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogUkMxNk1fU1RBUlRVUF9ESVNBQkxFIChCaXQgMTUpICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19SQzE2TV9TVEFSVFVQX0RJU0FCTEVfTXNrICgweDgwMDBVTCkgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogUkMxNk1fU1RBUlRVUF9ESVNBQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfQ0xLX1JDWDIwS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQ1gyMEtfUkVHX1JDWDIwS19UUklNX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQ1gyMEtfUkVHOiBSQ1gyMEtfVFJJTSAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQ1gyMEtfUkVHX1JDWDIwS19UUklNX01zayAoMHhmVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQ1gyMEtfUkVHOiBSQ1gyMEtfVFJJTSAoQml0ZmllbGQtTWFzazogMHgwZikgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQ1gyMEtfUkVHX1JDWDIwS19OVENfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQ1gyMEtfUkVHOiBSQ1gyMEtfTlRDIChCaXQgNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQ1gyMEtfUkVHX1JDWDIwS19OVENfTXNrICgweGYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQ1gyMEtfUkVHOiBSQ1gyMEtfTlRDIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQ1gyMEtfUkVHX1JDWDIwS19CSUFTX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQ1gyMEtfUkVHOiBSQ1gyMEtfQklBUyAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQ1gyMEtfUkVHX1JDWDIwS19CSUFTX01zayAoMHgzMDBVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQ1gyMEtfUkVHOiBSQ1gyMEtfQklBUyAoQml0ZmllbGQtTWFzazogMHgwMykgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQ1gyMEtfUkVHX1JDWDIwS19MT1dGX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQ1gyMEtfUkVHOiBSQ1gyMEtfTE9XRiAoQml0IDEwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQ1gyMEtfUkVHX1JDWDIwS19MT1dGX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQ1gyMEtfUkVHOiBSQ1gyMEtfTE9XRiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQ1gyMEtfUkVHX1JDWDIwS19FTkFCTEVfUG9zICgxMVVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQ1gyMEtfUkVHOiBSQ1gyMEtfRU5BQkxFIChCaXQgMTEpICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQ1gyMEtfUkVHX1JDWDIwS19FTkFCTEVfTXNrICgweDgwMFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQ1gyMEtfUkVHOiBSQ1gyMEtfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9CQU5ER0FQX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0JBTkRHQVBfUkVHX0JHUl9UUklNX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJBTkRHQVBfUkVHOiBCR1JfVFJJTSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JBTkRHQVBfUkVHX0JHUl9UUklNX01zayAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJBTkRHQVBfUkVHOiBCR1JfVFJJTSAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JBTkRHQVBfUkVHX0JHUl9JVFJJTV9Qb3MgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJBTkRHQVBfUkVHOiBCR1JfSVRSSU0gKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JBTkRHQVBfUkVHX0JHUl9JVFJJTV9Nc2sgICAgICgweDNlMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJBTkRHQVBfUkVHOiBCR1JfSVRSSU0gKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JBTkRHQVBfUkVHX0xET19TTEVFUF9UUklNX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJBTkRHQVBfUkVHOiBMRE9fU0xFRVBfVFJJTSAoQml0IDEwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JBTkRHQVBfUkVHX0xET19TTEVFUF9UUklNX01zayAoMHgzYzAwVUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJBTkRHQVBfUkVHOiBMRE9fU0xFRVBfVFJJTSAoQml0ZmllbGQtTWFzazogMHgwZikgICAqLworI2RlZmluZSBDUkdfVE9QX0JBTkRHQVBfUkVHX0xET19TVVBQTFlfVVNFX0JHUkVGX1BvcyAoMTRVTCkgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJBTkRHQVBfUkVHOiBMRE9fU1VQUExZX1VTRV9CR1JFRiAoQml0IDE0KSAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JBTkRHQVBfUkVHX0xET19TVVBQTFlfVVNFX0JHUkVGX01zayAoMHg0MDAwVUwpICAgICAgICAgLyohPCBDUkdfVE9QIEJBTkRHQVBfUkVHOiBMRE9fU1VQUExZX1VTRV9CR1JFRiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fUkFESU9fT0tfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPX1JBRElPX09LIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fUkFESU9fT0tfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPX1JBRElPX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19DT01QX1ZCQVRfT0tfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogQ09NUF9WQkFUX09LIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19DT01QX1ZCQVRfT0tfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogQ09NUF9WQkFUX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19WQlVTX0FWQUlMQUJMRV9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogVkJVU19BVkFJTEFCTEUgKEJpdCAyKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19WQlVTX0FWQUlMQUJMRV9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogVkJVU19BVkFJTEFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfTkVXQkFUX1BvcyAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IE5FV0JBVCAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfTkVXQkFUX01zayAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IE5FV0JBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfTERPX1NVUFBMWV9WQkFUX09LX1BvcyAoNFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IExET19TVVBQTFlfVkJBVF9PSyAoQml0IDQpICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfTERPX1NVUFBMWV9WQkFUX09LX01zayAoMHgxMFVMKSAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IExET19TVVBQTFlfVkJBVF9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fU1VQUExZX1VTQl9PS19Qb3MgKDVVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPX1NVUFBMWV9VU0JfT0sgKEJpdCA1KSAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fU1VQUExZX1VTQl9PS19Nc2sgKDB4MjBVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPX1NVUFBMWV9VU0JfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQkFOREdBUF9PS19Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IEJBTkRHQVBfT0sgKEJpdCA2KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQkFOREdBUF9PS19Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IEJBTkRHQVBfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF9WRERfSElHSF9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfVkREX0hJR0ggKEJpdCA3KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF9WRERfSElHSF9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfVkREX0hJR0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfTERPX0NPUkVfT0tfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IExET19DT1JFX09LIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfTERPX0NPUkVfT0tfTXNrICgweDEwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IExET19DT1JFX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfTERPXzFWOF9QQV9PS19Qb3MgKDlVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IExET18xVjhfUEFfT0sgKEJpdCA5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfTERPXzFWOF9QQV9PS19Nc2sgKDB4MjAwVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IExET18xVjhfUEFfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfTERPXzFWOF9GTEFTSF9PS19Qb3MgKDEwVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IExET18xVjhfRkxBU0hfT0sgKEJpdCAxMCkgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfTERPXzFWOF9GTEFTSF9PS19Nc2sgKDB4NDAwVUwpICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IExET18xVjhfRkxBU0hfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF9WQlVTX0hJR0hfUG9zICgxMVVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfVkJVU19ISUdIIChCaXQgMTEpICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF9WQlVTX0hJR0hfTXNrICgweDgwMFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfVkJVU19ISUdIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0NPTVBfVkJVU19MT1dfUG9zICgxMlVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBDT01QX1ZCVVNfTE9XIChCaXQgMTIpICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0NPTVBfVkJVU19MT1dfTXNrICgweDEwMDBVTCkgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBDT01QX1ZCVVNfTE9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0NPTVBfVjMzX0hJR0hfUG9zICgxM1VMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBDT01QX1YzM19ISUdIIChCaXQgMTMpICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0NPTVBfVjMzX0hJR0hfTXNrICgweDIwMDBVTCkgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBDT01QX1YzM19ISUdIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0NPTVBfMVY4X0ZMQVNIX0hJR0hfUG9zICgxNFVMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBDT01QXzFWOF9GTEFTSF9ISUdIIChCaXQgMTQpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0NPTVBfMVY4X0ZMQVNIX0hJR0hfTXNrICgweDQwMDBVTCkgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBDT01QXzFWOF9GTEFTSF9ISUdIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0NPTVBfMVY4X1BBX0hJR0hfUG9zICgxNVVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBDT01QXzFWOF9QQV9ISUdIIChCaXQgMTUpICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0NPTVBfMVY4X1BBX0hJR0hfTXNrICgweDgwMDBVTCkgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBDT01QXzFWOF9QQV9ISUdIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9CQU5ER0FQX09LX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfQkFOREdBUF9PSyAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9CQU5ER0FQX09LX01zayAoMHgxVUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfQkFOREdBUF9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfTkVXQkFUX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX05FV0JBVCAoQml0IDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfTkVXQkFUX01zayAoMHgyVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX05FV0JBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfTERPX1NVUFBMWV9WQkFUX09LX1BvcyAoMlVMKSAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0xET19TVVBQTFlfVkJBVF9PSyAoQml0IDIpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfTERPX1NVUFBMWV9WQkFUX09LX01zayAoMHg0VUwpICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0xET19TVVBQTFlfVkJBVF9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfTE9EX1NVUFBMWV9VU0JfT0tfUG9zICgzVUwpICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0xPRF9TVVBQTFlfVVNCX09LIChCaXQgMykgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfTE9EX1NVUFBMWV9VU0JfT0tfTXNrICgweDhVTCkgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0xPRF9TVVBQTFlfVVNCX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9MRE9fQ09SRV9PS19Qb3MgKDRVTCkgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfTERPX0NPUkVfT0sgKEJpdCA0KSAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9MRE9fQ09SRV9PS19Nc2sgKDB4MTBVTCkgICAgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfTERPX0NPUkVfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0xET18xVjhfUEFfT0tfUG9zICg1VUwpICAgICAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9MRE9fMVY4X1BBX09LIChCaXQgNSkgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0xET18xVjhfUEFfT0tfTXNrICgweDIwVUwpICAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9MRE9fMVY4X1BBX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9DT01QX1ZERF9ISUdIX1BvcyAoNlVMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfQ09NUF9WRERfSElHSCAoQml0IDYpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9DT01QX1ZERF9ISUdIX01zayAoMHg0MFVMKSAgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfQ09NUF9WRERfSElHSCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfQ09NUF9WMzNfSElHSF9Qb3MgKDdVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0NPTVBfVjMzX0hJR0ggKEJpdCA3KSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfQ09NUF9WMzNfSElHSF9Nc2sgKDB4ODBVTCkgICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0NPTVBfVjMzX0hJR0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0NPTVBfVkJVU19ISUdIX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9DT01QX1ZCVVNfSElHSCAoQml0IDgpICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0NPTVBfVkJVU19ISUdIX01zayAoMHgxMDBVTCkgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9DT01QX1ZCVVNfSElHSCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfQ09NUF9WQlVTX0xPV19Qb3MgKDlVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0NPTVBfVkJVU19MT1cgKEJpdCA5KSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfQ09NUF9WQlVTX0xPV19Nc2sgKDB4MjAwVUwpICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0NPTVBfVkJVU19MT1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0NPTVBfMVY4X1BBX0hJR0hfUG9zICgxMFVMKSAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9DT01QXzFWOF9QQV9ISUdIIChCaXQgMTApICAgICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0NPTVBfMVY4X1BBX0hJR0hfTXNrICgweDQwMFVMKSAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9DT01QXzFWOF9QQV9ISUdIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9DT01QXzFWOF9GTEFTSF9ISUdIX1BvcyAoMTFVTCkgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfQ09NUF8xVjhfRkxBU0hfSElHSCAoQml0IDExKSAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9DT01QXzFWOF9GTEFTSF9ISUdIX01zayAoMHg4MDBVTCkgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfQ09NUF8xVjhfRkxBU0hfSElHSCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfTERPXzFWOF9GTEFTSF9PS19Qb3MgKDEyVUwpICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0xET18xVjhfRkxBU0hfT0sgKEJpdCAxMikgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfTERPXzFWOF9GTEFTSF9PS19Nc2sgKDB4MTAwMFVMKSAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0xET18xVjhfRkxBU0hfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0JPRF9TVEFUVVNfUG9zICgxM1VMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9CT0RfU1RBVFVTIChCaXQgMTMpICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0JPRF9TVEFUVVNfTXNrICgweGUwMDBVTCkgICAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9CT0RfU1RBVFVTIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9WQlVTX0lSUV9NQVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1ZCVVNfSVJRX01BU0tfUkVHX1ZCVVNfSVJRX0VOX0ZBTExfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIFZCVVNfSVJRX01BU0tfUkVHOiBWQlVTX0lSUV9FTl9GQUxMIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1ZCVVNfSVJRX01BU0tfUkVHX1ZCVVNfSVJRX0VOX0ZBTExfTXNrICgweDFVTCkgICAgICAgICAgLyohPCBDUkdfVE9QIFZCVVNfSVJRX01BU0tfUkVHOiBWQlVTX0lSUV9FTl9GQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1ZCVVNfSVJRX01BU0tfUkVHX1ZCVVNfSVJRX0VOX1JJU0VfUG9zICgxVUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIFZCVVNfSVJRX01BU0tfUkVHOiBWQlVTX0lSUV9FTl9SSVNFIChCaXQgMSkgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1ZCVVNfSVJRX01BU0tfUkVHX1ZCVVNfSVJRX0VOX1JJU0VfTXNrICgweDJVTCkgICAgICAgICAgLyohPCBDUkdfVE9QIFZCVVNfSVJRX01BU0tfUkVHOiBWQlVTX0lSUV9FTl9SSVNFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1ZCVVNfSVJRX0NMRUFSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1ZCVVNfSVJRX0NMRUFSX1JFR19WQlVTX0lSUV9DTEVBUl9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFZCVVNfSVJRX0NMRUFSX1JFRzogVkJVU19JUlFfQ0xFQVIgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1ZCVVNfSVJRX0NMRUFSX1JFR19WQlVTX0lSUV9DTEVBUl9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgLyohPCBDUkdfVE9QIFZCVVNfSVJRX0NMRUFSX1JFRzogVkJVU19JUlFfQ0xFQVIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9CT0RfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTF9SRUdfQk9EX1ZERF9UUklNX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTF9SRUc6IEJPRF9WRERfVFJJTSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTF9SRUdfQk9EX1ZERF9UUklNX01zayAoMHgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTF9SRUc6IEJPRF9WRERfVFJJTSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTF9SRUdfQk9EXzFWOF9UUklNX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTF9SRUc6IEJPRF8xVjhfVFJJTSAoQml0IDIpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTF9SRUdfQk9EXzFWOF9UUklNX01zayAoMHhjVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTF9SRUc6IEJPRF8xVjhfVFJJTSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTF9SRUdfQk9EXzFWNF9UUklNX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTF9SRUc6IEJPRF8xVjRfVFJJTSAoQml0IDQpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTF9SRUdfQk9EXzFWNF9UUklNX01zayAoMHgzMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTF9SRUc6IEJPRF8xVjRfVFJJTSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTF9SRUdfQk9EX1YzM19UUklNX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTF9SRUc6IEJPRF9WMzNfVFJJTSAoQml0IDYpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTF9SRUdfQk9EX1YzM19UUklNX01zayAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTF9SRUc6IEJPRF9WMzNfVFJJTSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTF9SRUdfQk9EX1ZERF9MVkxfUG9zICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTF9SRUc6IEJPRF9WRERfTFZMIChCaXQgOCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTF9SRUdfQk9EX1ZERF9MVkxfTXNrICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTF9SRUc6IEJPRF9WRERfTFZMIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9CT0RfQ1RSTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTDJfUkVHX0JPRF9SRVNFVF9FTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTDJfUkVHOiBCT0RfUkVTRVRfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTDJfUkVHX0JPRF9SRVNFVF9FTl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTDJfUkVHOiBCT0RfUkVTRVRfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTDJfUkVHX0JPRF9WRERfRU5fUG9zICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTDJfUkVHOiBCT0RfVkREX0VOIChCaXQgMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTDJfUkVHX0JPRF9WRERfRU5fTXNrICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTDJfUkVHOiBCT0RfVkREX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTDJfUkVHX0JPRF9WMzNfRU5fUG9zICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTDJfUkVHOiBCT0RfVjMzX0VOIChCaXQgMikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTDJfUkVHX0JPRF9WMzNfRU5fTXNrICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTDJfUkVHOiBCT0RfVjMzX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTDJfUkVHX0JPRF8xVjhfUEFfRU5fUG9zICgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTDJfUkVHOiBCT0RfMVY4X1BBX0VOIChCaXQgMykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTDJfUkVHX0JPRF8xVjhfUEFfRU5fTXNrICgweDhVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTDJfUkVHOiBCT0RfMVY4X1BBX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTDJfUkVHX0JPRF8xVjhfRkxBU0hfRU5fUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTDJfUkVHOiBCT0RfMVY4X0ZMQVNIX0VOIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfQ1RSTDJfUkVHX0JPRF8xVjhfRkxBU0hfRU5fTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfQ1RSTDJfUkVHOiBCT0RfMVY4X0ZMQVNIX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EX1ZCQVRfRU5fUG9zICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF9WQkFUX0VOIChCaXQgNSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EX1ZCQVRfRU5fTXNrICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF9WQkFUX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EX1YxNF9FTl9Qb3MgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF9WMTRfRU4gKEJpdCA2KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EX1YxNF9FTl9Nc2sgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF9WMTRfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfQk9EX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9TVEFUVVNfUkVHX0JPRF9WRERfTE9XX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9TVEFUVVNfUkVHOiBCT0RfVkREX0xPVyAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9TVEFUVVNfUkVHX0JPRF9WRERfTE9XX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9TVEFUVVNfUkVHOiBCT0RfVkREX0xPVyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9TVEFUVVNfUkVHX0JPRF8xVjhfUEFfTE9XX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9TVEFUVVNfUkVHOiBCT0RfMVY4X1BBX0xPVyAoQml0IDEpICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9TVEFUVVNfUkVHX0JPRF8xVjhfUEFfTE9XX01zayAoMHgyVUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9TVEFUVVNfUkVHOiBCT0RfMVY4X1BBX0xPVyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfU1RBVFVTX1JFR19CT0RfMVY4X0ZMQVNIX0xPV19Qb3MgKDJVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfU1RBVFVTX1JFRzogQk9EXzFWOF9GTEFTSF9MT1cgKEJpdCAyKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfU1RBVFVTX1JFR19CT0RfMVY4X0ZMQVNIX0xPV19Nc2sgKDB4NFVMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfU1RBVFVTX1JFRzogQk9EXzFWOF9GTEFTSF9MT1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQk9EX1NUQVRVU19SRUdfQk9EX1YzM19MT1dfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX1NUQVRVU19SRUc6IEJPRF9WMzNfTE9XIChCaXQgMykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQk9EX1NUQVRVU19SRUdfQk9EX1YzM19MT1dfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX1NUQVRVU19SRUc6IEJPRF9WMzNfTE9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENSR19UT1BfQk9EX1NUQVRVU19SRUdfQk9EX1ZCQVRfTE9XX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX1NUQVRVU19SRUc6IEJPRF9WQkFUX0xPVyAoQml0IDQpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQk9EX1NUQVRVU19SRUdfQk9EX1ZCQVRfTE9XX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX1NUQVRVU19SRUc6IEJPRF9WQkFUX0xPVyAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIENSR19UT1BfQk9EX1NUQVRVU19SRUdfQk9EX1YxNF9MT1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX1NUQVRVU19SRUc6IEJPRF9WMTRfTE9XIChCaXQgNSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQk9EX1NUQVRVU19SRUdfQk9EX1YxNF9MT1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX1NUQVRVU19SRUc6IEJPRF9WMTRfTE9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfTERPX0NUUkwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fQ09SRV9DVVJMSU1fUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX0NPUkVfQ1VSTElNIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fQ09SRV9DVVJMSU1fTXNrICgweDNVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX0NPUkVfQ1VSTElNIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMV9SRUdfTERPX1ZCQVRfUkVUX0xFVkVMX1BvcyAoMlVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMV9SRUc6IExET19WQkFUX1JFVF9MRVZFTCAoQml0IDIpICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMV9SRUdfTERPX1ZCQVRfUkVUX0xFVkVMX01zayAoMHhjVUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMV9SRUc6IExET19WQkFUX1JFVF9MRVZFTCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDFfUkVHX0xET19TVVBQTFlfVkJBVF9MRVZFTF9Qb3MgKDRVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDFfUkVHOiBMRE9fU1VQUExZX1ZCQVRfTEVWRUwgKEJpdCA0KSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDFfUkVHX0xET19TVVBQTFlfVkJBVF9MRVZFTF9Nc2sgKDB4MzBVTCkgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDFfUkVHOiBMRE9fU1VQUExZX1ZCQVRfTEVWRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fU1VQUExZX1VTQl9MRVZFTF9Qb3MgKDZVTCkgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX1NVUFBMWV9VU0JfTEVWRUwgKEJpdCA2KSAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fU1VQUExZX1VTQl9MRVZFTF9Nc2sgKDB4YzBVTCkgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX1NVUFBMWV9VU0JfTEVWRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fQ09SRV9TRVRWRERfUG9zICg4VUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX0NPUkVfU0VUVkREIChCaXQgOCkgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fQ09SRV9TRVRWRERfTXNrICgweDcwMFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX0NPUkVfU0VUVkREIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMV9SRUdfTERPX1JBRElPX1NFVFZERF9Qb3MgKDExVUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMV9SRUc6IExET19SQURJT19TRVRWREQgKEJpdCAxMSkgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMV9SRUdfTERPX1JBRElPX1NFVFZERF9Nc2sgKDB4MzgwMFVMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMV9SRUc6IExET19SQURJT19TRVRWREQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fUkFESU9fRU5BQkxFX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX1JBRElPX0VOQUJMRSAoQml0IDE0KSAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fUkFESU9fRU5BQkxFX01zayAoMHg0MDAwVUwpICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX1JBRElPX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9MRE9fQ1RSTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDJfUkVHX0xET18xVjJfT05fUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDJfUkVHOiBMRE9fMVYyX09OIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDJfUkVHX0xET18xVjJfT05fTXNrICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDJfUkVHOiBMRE9fMVYyX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDJfUkVHX0xET18zVjNfT05fUG9zICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDJfUkVHOiBMRE9fM1YzX09OIChCaXQgMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDJfUkVHX0xET18zVjNfT05fTXNrICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDJfUkVHOiBMRE9fM1YzX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDJfUkVHX0xET18xVjhfRkxBU0hfT05fUG9zICgyVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDJfUkVHOiBMRE9fMVY4X0ZMQVNIX09OIChCaXQgMikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDJfUkVHX0xET18xVjhfRkxBU0hfT05fTXNrICgweDRVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDJfUkVHOiBMRE9fMVY4X0ZMQVNIX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPXzFWOF9QQV9PTl9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET18xVjhfUEFfT04gKEJpdCAzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPXzFWOF9QQV9PTl9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET18xVjhfUEFfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPX1ZCQVRfUkVUX0RJU0FCTEVfUG9zICg0VUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET19WQkFUX1JFVF9ESVNBQkxFIChCaXQgNCkgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPX1ZCQVRfUkVUX0RJU0FCTEVfTXNrICgweDEwVUwpICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET19WQkFUX1JFVF9ESVNBQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPXzFWOF9GTEFTSF9SRVRfRElTQUJMRV9Qb3MgKDVVTCkgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET18xVjhfRkxBU0hfUkVUX0RJU0FCTEUgKEJpdCA1KSAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPXzFWOF9GTEFTSF9SRVRfRElTQUJMRV9Nc2sgKDB4MjBVTCkgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET18xVjhfRkxBU0hfUkVUX0RJU0FCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwyX1JFR19MRE9fMVY4X1BBX1JFVF9ESVNBQkxFX1BvcyAoNlVMKSAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwyX1JFRzogTERPXzFWOF9QQV9SRVRfRElTQUJMRSAoQml0IDYpICAgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwyX1JFR19MRE9fMVY4X1BBX1JFVF9ESVNBQkxFX01zayAoMHg0MFVMKSAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwyX1JFRzogTERPXzFWOF9QQV9SRVRfRElTQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1NMRUVQX1RJTUVSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9TTEVFUF9USU1FUl9SRUdfU0xFRVBfVElNRVJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTTEVFUF9USU1FUl9SRUc6IFNMRUVQX1RJTUVSIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TTEVFUF9USU1FUl9SRUdfU0xFRVBfVElNRVJfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTTEVFUF9USU1FUl9SRUc6IFNMRUVQX1RJTUVSIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9QT1dFUl9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfUE9XRVJfQ1RSTF9SRUdfVFJJTV9ORVdCQVRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE9XRVJfQ1RSTF9SRUc6IFRSSU1fTkVXQkFUIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE9XRVJfQ1RSTF9SRUdfVFJJTV9ORVdCQVRfTXNrICgweDdVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUE9XRVJfQ1RSTF9SRUc6IFRSSU1fTkVXQkFUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1BPUl9WQkFUX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfUE9SX1ZCQVRfQ1RSTF9SRUdfUE9SX1ZCQVRfVEhSRVNfTE9XX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IENSR19UT1AgUE9SX1ZCQVRfQ1RSTF9SRUc6IFBPUl9WQkFUX1RIUkVTX0xPVyAoQml0IDApICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE9SX1ZCQVRfQ1RSTF9SRUdfUE9SX1ZCQVRfVEhSRVNfTE9XX01zayAoMHhmVUwpICAgICAgICAvKiE8IENSR19UT1AgUE9SX1ZCQVRfQ1RSTF9SRUc6IFBPUl9WQkFUX1RIUkVTX0xPVyAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1JfVkJBVF9DVFJMX1JFR19QT1JfVkJBVF9USFJFU19ISUdIX1BvcyAoNFVMKSAgICAgICAgIC8qITwgQ1JHX1RPUCBQT1JfVkJBVF9DVFJMX1JFRzogUE9SX1ZCQVRfVEhSRVNfSElHSCAoQml0IDQpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1JfVkJBVF9DVFJMX1JFR19QT1JfVkJBVF9USFJFU19ISUdIX01zayAoMHhmMFVMKSAgICAgIC8qITwgQ1JHX1RPUCBQT1JfVkJBVF9DVFJMX1JFRzogUE9SX1ZCQVRfVEhSRVNfSElHSCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1JfVkJBVF9DVFJMX1JFR19QT1JfVkJBVF9IWVNUX0xPV19Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQT1JfVkJBVF9DVFJMX1JFRzogUE9SX1ZCQVRfSFlTVF9MT1cgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1JfVkJBVF9DVFJMX1JFR19QT1JfVkJBVF9IWVNUX0xPV19Nc2sgKDB4ZjAwVUwpICAgICAgIC8qITwgQ1JHX1RPUCBQT1JfVkJBVF9DVFJMX1JFRzogUE9SX1ZCQVRfSFlTVF9MT1cgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIENSR19UT1BfUE9SX1ZCQVRfQ1RSTF9SRUdfUE9SX1ZCQVRfRU5BQkxFX1BvcyAoMTJVTCkgICAgICAgICAgICAvKiE8IENSR19UT1AgUE9SX1ZCQVRfQ1RSTF9SRUc6IFBPUl9WQkFUX0VOQUJMRSAoQml0IDEyKSAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUE9SX1ZCQVRfQ1RSTF9SRUdfUE9SX1ZCQVRfRU5BQkxFX01zayAoMHgxMDAwVUwpICAgICAgICAvKiE8IENSR19UT1AgUE9SX1ZCQVRfQ1RSTF9SRUc6IFBPUl9WQkFUX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1JfVkJBVF9DVFJMX1JFR19QT1JfVkJBVF9NQVNLX05fUG9zICgxM1VMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQT1JfVkJBVF9DVFJMX1JFRzogUE9SX1ZCQVRfTUFTS19OIChCaXQgMTMpICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1JfVkJBVF9DVFJMX1JFR19QT1JfVkJBVF9NQVNLX05fTXNrICgweDIwMDBVTCkgICAgICAgIC8qITwgQ1JHX1RPUCBQT1JfVkJBVF9DVFJMX1JFRzogUE9SX1ZCQVRfTUFTS19OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9YVEFMUkRZX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1hUQUxSRFlfQ1RSTF9SRUdfWFRBTFJEWV9DTlRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUxSRFlfQ1RSTF9SRUc6IFhUQUxSRFlfQ05UIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1hUQUxSRFlfQ1RSTF9SRUdfWFRBTFJEWV9DTlRfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUxSRFlfQ1RSTF9SRUc6IFhUQUxSRFlfQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9YVEFMUkRZX1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1hUQUxSRFlfU1RBVF9SRUdfWFRBTFJEWV9TVEFUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUxSRFlfU1RBVF9SRUc6IFhUQUxSRFlfU1RBVCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1hUQUxSRFlfU1RBVF9SRUdfWFRBTFJEWV9TVEFUX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUxSRFlfU1RBVF9SRUc6IFhUQUxSRFlfU1RBVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9MRE9fQ1RSTDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDNfUkVHX0xET19WQkFUX1JFVF9FTkFCTEVfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDNfUkVHOiBMRE9fVkJBVF9SRVRfRU5BQkxFIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDNfUkVHX0xET19WQkFUX1JFVF9FTkFCTEVfTXNrICgweDFVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDNfUkVHOiBMRE9fVkJBVF9SRVRfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMM19SRUdfTERPX1ZCQVRfUkVUX1ZSRUZfSE9MRF9Qb3MgKDFVTCkgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMM19SRUc6IExET19WQkFUX1JFVF9WUkVGX0hPTEQgKEJpdCAxKSAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMM19SRUdfTERPX1ZCQVRfUkVUX1ZSRUZfSE9MRF9Nc2sgKDB4MlVMKSAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMM19SRUc6IExET19WQkFUX1JFVF9WUkVGX0hPTEQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwzX1JFR19MRE9fMVY4X0ZMQVNIX1JFVF9FTkFCTEVfUG9zICgyVUwpICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwzX1JFRzogTERPXzFWOF9GTEFTSF9SRVRfRU5BQkxFIChCaXQgMikgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwzX1JFR19MRE9fMVY4X0ZMQVNIX1JFVF9FTkFCTEVfTXNrICgweDRVTCkgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwzX1JFRzogTERPXzFWOF9GTEFTSF9SRVRfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMM19SRUdfTERPXzFWOF9GTEFTSF9SRVRfVlJFRl9IT0xEX1BvcyAoM1VMKSAgICAgLyohPCBDUkdfVE9QIExET19DVFJMM19SRUc6IExET18xVjhfRkxBU0hfUkVUX1ZSRUZfSE9MRCAoQml0IDMpICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMM19SRUdfTERPXzFWOF9GTEFTSF9SRVRfVlJFRl9IT0xEX01zayAoMHg4VUwpICAgLyohPCBDUkdfVE9QIExET19DVFJMM19SRUc6IExET18xVjhfRkxBU0hfUkVUX1ZSRUZfSE9MRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDNfUkVHX0xET18xVjhfUEFfUkVUX0VOQUJMRV9Qb3MgKDRVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDNfUkVHOiBMRE9fMVY4X1BBX1JFVF9FTkFCTEUgKEJpdCA0KSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDNfUkVHX0xET18xVjhfUEFfUkVUX0VOQUJMRV9Nc2sgKDB4MTBVTCkgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDNfUkVHOiBMRE9fMVY4X1BBX1JFVF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwzX1JFR19MRE9fMVY4X1BBX1JFVF9WUkVGX0hPTERfUG9zICg1VUwpICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwzX1JFRzogTERPXzFWOF9QQV9SRVRfVlJFRl9IT0xEIChCaXQgNSkgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwzX1JFR19MRE9fMVY4X1BBX1JFVF9WUkVGX0hPTERfTXNrICgweDIwVUwpICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwzX1JFRzogTERPXzFWOF9QQV9SRVRfVlJFRl9IT0xEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9YVEFMMTZNX1NUQVJUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1hUQUwxNk1fU1RBUlRfUkVHX0ZJTkVfQURKX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUwxNk1fU1RBUlRfUkVHOiBGSU5FX0FESiAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1hUQUwxNk1fU1RBUlRfUkVHX0ZJTkVfQURKX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUwxNk1fU1RBUlRfUkVHOiBGSU5FX0FESiAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworI2RlZmluZSBDUkdfVE9QX1hUQUwxNk1fU1RBUlRfUkVHX0NPQVJTRV9BREpfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUwxNk1fU1RBUlRfUkVHOiBDT0FSU0VfQURKIChCaXQgOCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1hUQUwxNk1fU1RBUlRfUkVHX0NPQVJTRV9BREpfTXNrICgweDcwMFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUwxNk1fU1RBUlRfUkVHOiBDT0FSU0VfQURKIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9YVEFMMTZNX1JBTVBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1hUQUwxNk1fUkFNUF9SRUdfRklORV9BREpfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUwxNk1fUkFNUF9SRUc6IEZJTkVfQURKIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1hUQUwxNk1fUkFNUF9SRUdfRklORV9BREpfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUwxNk1fUkFNUF9SRUc6IEZJTkVfQURKIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAqLworI2RlZmluZSBDUkdfVE9QX1hUQUwxNk1fUkFNUF9SRUdfQ09BUlNFX0FESl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUwxNk1fUkFNUF9SRUc6IENPQVJTRV9BREogKEJpdCA4KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1hUQUwxNk1fUkFNUF9SRUdfQ09BUlNFX0FESl9Nc2sgKDB4NzAwVUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUwxNk1fUkFNUF9SRUc6IENPQVJTRV9BREogKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1hUQUwxNk1fVFJTVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1hUQUwxNk1fVFJTVEFUX1JFR19YVEFMMTZNX1RSU1RBVF9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFhUQUwxNk1fVFJTVEFUX1JFRzogWFRBTDE2TV9UUlNUQVQgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1hUQUwxNk1fVFJTVEFUX1JFR19YVEFMMTZNX1RSU1RBVF9Nc2sgKDB4N2ZmZlVMKSAgICAgICAgLyohPCBDUkdfVE9QIFhUQUwxNk1fVFJTVEFUX1JFRzogWFRBTDE2TV9UUlNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1JFU0VUX1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9SRVNFVF9TVEFUX1JFR19QT1JFU0VUX1NUQVRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBSRVNFVF9TVEFUX1JFRzogUE9SRVNFVF9TVEFUIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9SRVNFVF9TVEFUX1JFR19QT1JFU0VUX1NUQVRfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBSRVNFVF9TVEFUX1JFRzogUE9SRVNFVF9TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9SRVNFVF9TVEFUX1JFR19IV1JFU0VUX1NUQVRfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBSRVNFVF9TVEFUX1JFRzogSFdSRVNFVF9TVEFUIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9SRVNFVF9TVEFUX1JFR19IV1JFU0VUX1NUQVRfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBSRVNFVF9TVEFUX1JFRzogSFdSRVNFVF9TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9SRVNFVF9TVEFUX1JFR19TV1JFU0VUX1NUQVRfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBSRVNFVF9TVEFUX1JFRzogU1dSRVNFVF9TVEFUIChCaXQgMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9SRVNFVF9TVEFUX1JFR19TV1JFU0VUX1NUQVRfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBSRVNFVF9TVEFUX1JFRzogU1dSRVNFVF9TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9SRVNFVF9TVEFUX1JFR19XRE9HUkVTRVRfU1RBVF9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBSRVNFVF9TVEFUX1JFRzogV0RPR1JFU0VUX1NUQVQgKEJpdCAzKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9SRVNFVF9TVEFUX1JFR19XRE9HUkVTRVRfU1RBVF9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBSRVNFVF9TVEFUX1JFRzogV0RPR1JFU0VUX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfUkVTRVRfU1RBVF9SRUdfU1dEX0hXUkVTRVRfU1RBVF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgUkVTRVRfU1RBVF9SRUc6IFNXRF9IV1JFU0VUX1NUQVQgKEJpdCA0KSAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfUkVTRVRfU1RBVF9SRUdfU1dEX0hXUkVTRVRfU1RBVF9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAvKiE8IENSR19UT1AgUkVTRVRfU1RBVF9SRUc6IFNXRF9IV1JFU0VUX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9GT1JDRV9TTEVFUF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfRk9SQ0VfU0xFRVBfUkVHX0ZPUkNFX0ZUREZfU0xFRVBfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgRk9SQ0VfU0xFRVBfUkVHOiBGT1JDRV9GVERGX1NMRUVQIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfRk9SQ0VfU0xFRVBfUkVHX0ZPUkNFX0ZUREZfU0xFRVBfTXNrICgweDFVTCkgICAgICAgICAgICAvKiE8IENSR19UT1AgRk9SQ0VfU0xFRVBfUkVHOiBGT1JDRV9GVERGX1NMRUVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0ZPUkNFX1NMRUVQX1JFR19GT1JDRV9CTEVfU0xFRVBfUG9zICgxVUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEZPUkNFX1NMRUVQX1JFRzogRk9SQ0VfQkxFX1NMRUVQIChCaXQgMSkgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0ZPUkNFX1NMRUVQX1JFR19GT1JDRV9CTEVfU0xFRVBfTXNrICgweDJVTCkgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEZPUkNFX1NMRUVQX1JFRzogRk9SQ0VfQkxFX1NMRUVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9MRE9TX0RJU0FCTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0xET1NfRElTQUJMRV9SRUdfTERPU19ESVNBQkxFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET1NfRElTQUJMRV9SRUc6IExET1NfRElTQUJMRSAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET1NfRElTQUJMRV9SRUdfTERPU19ESVNBQkxFX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET1NfRElTQUJMRV9SRUc6IExET1NfRElTQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9BT05fU1BBUkVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9BT05fU1BBUkVfUkVHX09TQzE2X0hPTERfQU1QX1JFR19Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBT05fU1BBUkVfUkVHOiBPU0MxNl9IT0xEX0FNUF9SRUcgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BT05fU1BBUkVfUkVHX09TQzE2X0hPTERfQU1QX1JFR19Nc2sgKDB4MVVMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBT05fU1BBUkVfUkVHOiBPU0MxNl9IT0xEX0FNUF9SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQU9OX1NQQVJFX1JFR19PU0MxNl9TSF9ESVNBQkxFX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU9OX1NQQVJFX1JFRzogT1NDMTZfU0hfRElTQUJMRSAoQml0IDEpICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU9OX1NQQVJFX1JFR19PU0MxNl9TSF9ESVNBQkxFX01zayAoMHgyVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU9OX1NQQVJFX1JFRzogT1NDMTZfU0hfRElTQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BT05fU1BBUkVfUkVHX0VOX0JBVFNZU19SRVRfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBT05fU1BBUkVfUkVHOiBFTl9CQVRTWVNfUkVUIChCaXQgMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BT05fU1BBUkVfUkVHX0VOX0JBVFNZU19SRVRfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBT05fU1BBUkVfUkVHOiBFTl9CQVRTWVNfUkVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BT05fU1BBUkVfUkVHX0VOX0JVU1NZU19SRVRfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBT05fU1BBUkVfUkVHOiBFTl9CVVNTWVNfUkVUIChCaXQgMykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BT05fU1BBUkVfUkVHX0VOX0JVU1NZU19SRVRfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBT05fU1BBUkVfUkVHOiBFTl9CVVNTWVNfUkVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1NFQ1VSRV9CT09UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9TRUNVUkVfQk9PVF9SRUdfU0VDVVJFX0JPT1RfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTRUNVUkVfQk9PVF9SRUc6IFNFQ1VSRV9CT09UIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TRUNVUkVfQk9PVF9SRUdfU0VDVVJFX0JPT1RfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTRUNVUkVfQk9PVF9SRUc6IFNFQ1VSRV9CT09UIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TRUNVUkVfQk9PVF9SRUdfRk9SQ0VfREVCVUdHRVJfT0ZGX1BvcyAoMVVMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTRUNVUkVfQk9PVF9SRUc6IEZPUkNFX0RFQlVHR0VSX09GRiAoQml0IDEpICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TRUNVUkVfQk9PVF9SRUdfRk9SQ0VfREVCVUdHRVJfT0ZGX01zayAoMHgyVUwpICAgICAgICAgIC8qITwgQ1JHX1RPUCBTRUNVUkVfQk9PVF9SRUc6IEZPUkNFX0RFQlVHR0VSX09GRiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9QTVVfUkVTRVRfUkFJTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfUkVTRVRfUkFJTF9SRUdfUkVTRVRfVjE0X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfUkVTRVRfUkFJTF9SRUc6IFJFU0VUX1YxNCAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfUkVTRVRfUkFJTF9SRUdfUkVTRVRfVjE0X01zayAoMHgxVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfUkVTRVRfUkFJTF9SRUc6IFJFU0VUX1YxNCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfUkVTRVRfUkFJTF9SRUdfUkVTRVRfVjE4X1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfUkVTRVRfUkFJTF9SRUc6IFJFU0VUX1YxOCAoQml0IDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfUkVTRVRfUkFJTF9SRUdfUkVTRVRfVjE4X01zayAoMHgyVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfUkVTRVRfUkFJTF9SRUc6IFJFU0VUX1YxOCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfUkVTRVRfUkFJTF9SRUdfUkVTRVRfVjE4UF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfUkVTRVRfUkFJTF9SRUc6IFJFU0VUX1YxOFAgKEJpdCAyKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfUkVTRVRfUkFJTF9SRUdfUkVTRVRfVjE4UF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfUkVTRVRfUkFJTF9SRUc6IFJFU0VUX1YxOFAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfRElTQ0hBUkdFX1JBSUxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfRElTQ0hBUkdFX1JBSUxfUkVHX1JFU0VUX1YxNF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgRElTQ0hBUkdFX1JBSUxfUkVHOiBSRVNFVF9WMTQgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfRElTQ0hBUkdFX1JBSUxfUkVHX1JFU0VUX1YxNF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgRElTQ0hBUkdFX1JBSUxfUkVHOiBSRVNFVF9WMTQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfRElTQ0hBUkdFX1JBSUxfUkVHX1JFU0VUX1YxOF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgRElTQ0hBUkdFX1JBSUxfUkVHOiBSRVNFVF9WMTggKEJpdCAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfRElTQ0hBUkdFX1JBSUxfUkVHX1JFU0VUX1YxOF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgRElTQ0hBUkdFX1JBSUxfUkVHOiBSRVNFVF9WMTggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfRElTQ0hBUkdFX1JBSUxfUkVHX1JFU0VUX1YxOFBfUG9zICgyVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgRElTQ0hBUkdFX1JBSUxfUkVHOiBSRVNFVF9WMThQIChCaXQgMikgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfRElTQ0hBUkdFX1JBSUxfUkVHX1JFU0VUX1YxOFBfTXNrICgweDRVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgRElTQ0hBUkdFX1JBSUxfUkVHOiBSRVNFVF9WMThQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnRENEQycgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfQ1RSTF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8wX1JFR19EQ0RDX01PREVfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8wX1JFRzogRENEQ19NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8wX1JFR19EQ0RDX01PREVfTXNrICAgICgweDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8wX1JFRzogRENEQ19NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8wX1JFR19EQ0RDX0ZXX0VOQUJMRV9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8wX1JFRzogRENEQ19GV19FTkFCTEUgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8wX1JFR19EQ0RDX0ZXX0VOQUJMRV9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8wX1JFRzogRENEQ19GV19FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8wX1JFR19EQ0RDX1BSSU9SSVRZX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8wX1JFRzogRENEQ19QUklPUklUWSAoQml0IDMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8wX1JFR19EQ0RDX1BSSU9SSVRZX01zayAoMHg3ZjhVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8wX1JFRzogRENEQ19QUklPUklUWSAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8wX1JFR19EQ0RDX0lETEVfQ0xLX0RJVl9Qb3MgKDExVUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8wX1JFRzogRENEQ19JRExFX0NMS19ESVYgKEJpdCAxMSkgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8wX1JFR19EQ0RDX0lETEVfQ0xLX0RJVl9Nc2sgKDB4MTgwMFVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8wX1JFRzogRENEQ19JRExFX0NMS19ESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfQlJPV05PVVRfTFZfTU9ERV9Qb3MgKDEzVUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX0JST1dOT1VUX0xWX01PREUgKEJpdCAxMykgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfQlJPV05PVVRfTFZfTU9ERV9Nc2sgKDB4MjAwMFVMKSAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX0JST1dOT1VUX0xWX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfRkFTVF9TVEFSVFVQX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX0ZBU1RfU1RBUlRVUCAoQml0IDE0KSAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfRkFTVF9TVEFSVFVQX01zayAoMHg0MDAwVUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX0ZBU1RfU1RBUlRVUCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX0NUUkxfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMV9SRUdfRENEQ19USU1FT1VUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMV9SRUc6IERDRENfVElNRU9VVCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMV9SRUdfRENEQ19USU1FT1VUX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMV9SRUc6IERDRENfVElNRU9VVCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMV9SRUdfRENEQ19HTE9CQUxfTUFYX0lETEVfVElNRV9Qb3MgKDVVTCkgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMV9SRUc6IERDRENfR0xPQkFMX01BWF9JRExFX1RJTUUgKEJpdCA1KSAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMV9SRUdfRENEQ19HTE9CQUxfTUFYX0lETEVfVElNRV9Nc2sgKDB4N2UwVUwpICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMV9SRUc6IERDRENfR0xPQkFMX01BWF9JRExFX1RJTUUgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzFfUkVHX0RDRENfU1RBUlRVUF9ERUxBWV9Qb3MgKDExVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzFfUkVHOiBEQ0RDX1NUQVJUVVBfREVMQVkgKEJpdCAxMSkgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzFfUkVHX0RDRENfU1RBUlRVUF9ERUxBWV9Nc2sgKDB4ZjgwMFVMKSAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzFfUkVHOiBEQ0RDX1NUQVJUVVBfREVMQVkgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19DVFJMXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzJfUkVHX0RDRENfSFNHTkRfVFJJTV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzJfUkVHOiBEQ0RDX0hTR05EX1RSSU0gKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzJfUkVHX0RDRENfSFNHTkRfVFJJTV9Nc2sgKDB4N1VMKSAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzJfUkVHOiBEQ0RDX0hTR05EX1RSSU0gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzJfUkVHX0RDRENfTFNTVVBfVFJJTV9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzJfUkVHOiBEQ0RDX0xTU1VQX1RSSU0gKEJpdCAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzJfUkVHX0RDRENfTFNTVVBfVFJJTV9Nc2sgKDB4MzhVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzJfUkVHOiBEQ0RDX0xTU1VQX1RSSU0gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzJfUkVHX0RDRENfVFVORV9Qb3MgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzJfUkVHOiBEQ0RDX1RVTkUgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzJfUkVHX0RDRENfVFVORV9Nc2sgICAgKDB4YzBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzJfUkVHOiBEQ0RDX1RVTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzJfUkVHX0RDRENfVElNRU9VVF9JUlFfUkVTX1BvcyAoOFVMKSAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzJfUkVHOiBEQ0RDX1RJTUVPVVRfSVJRX1JFUyAoQml0IDgpICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzJfUkVHX0RDRENfVElNRU9VVF9JUlFfUkVTX01zayAoMHhmMDBVTCkgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzJfUkVHOiBEQ0RDX1RJTUVPVVRfSVJRX1JFUyAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMl9SRUdfRENEQ19USU1FT1VUX0lSUV9UUklHX1BvcyAoMTJVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMl9SRUc6IERDRENfVElNRU9VVF9JUlFfVFJJRyAoQml0IDEyKSAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMl9SRUdfRENEQ19USU1FT1VUX0lSUV9UUklHX01zayAoMHhmMDAwVUwpICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMl9SRUc6IERDRENfVElNRU9VVF9JUlFfVFJJRyAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19WMTRfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxNF8wX1JFR19EQ0RDX1YxNF9DVVJfTElNX01JTl9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxNF8wX1JFRzogRENEQ19WMTRfQ1VSX0xJTV9NSU4gKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxNF8wX1JFR19EQ0RDX1YxNF9DVVJfTElNX01JTl9Nc2sgKDB4MWZVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxNF8wX1JFRzogRENEQ19WMTRfQ1VSX0xJTV9NSU4gKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMF9SRUdfRENEQ19WMTRfQ1VSX0xJTV9NQVhfSFZfUG9zICg1VUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMF9SRUc6IERDRENfVjE0X0NVUl9MSU1fTUFYX0hWIChCaXQgNSkgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMF9SRUdfRENEQ19WMTRfQ1VSX0xJTV9NQVhfSFZfTXNrICgweDNlMFVMKSAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMF9SRUc6IERDRENfVjE0X0NVUl9MSU1fTUFYX0hWIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE0XzBfUkVHX0RDRENfVjE0X1ZPTFRBR0VfUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE0XzBfUkVHOiBEQ0RDX1YxNF9WT0xUQUdFIChCaXQgMTApICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE0XzBfUkVHX0RDRENfVjE0X1ZPTFRBR0VfTXNrICgweDdjMDBVTCkgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE0XzBfUkVHOiBEQ0RDX1YxNF9WT0xUQUdFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE0XzBfUkVHX0RDRENfVjE0X0ZBU1RfUkFNUElOR19Qb3MgKDE1VUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE0XzBfUkVHOiBEQ0RDX1YxNF9GQVNUX1JBTVBJTkcgKEJpdCAxNSkgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE0XzBfUkVHX0RDRENfVjE0X0ZBU1RfUkFNUElOR19Nc2sgKDB4ODAwMFVMKSAgICAgICAgLyohPCBEQ0RDIERDRENfVjE0XzBfUkVHOiBEQ0RDX1YxNF9GQVNUX1JBTVBJTkcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfVjE0XzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMV9SRUdfRENEQ19WMTRfSURMRV9NSU5fUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMV9SRUc6IERDRENfVjE0X0lETEVfTUlOIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMV9SRUdfRENEQ19WMTRfSURMRV9NSU5fTXNrICgweDFmVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMV9SRUc6IERDRENfVjE0X0lETEVfTUlOIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE0XzFfUkVHX0RDRENfVjE0X0lETEVfSFlTVF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE0XzFfUkVHOiBEQ0RDX1YxNF9JRExFX0hZU1QgKEJpdCA1KSAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE0XzFfUkVHX0RDRENfVjE0X0lETEVfSFlTVF9Nc2sgKDB4M2UwVUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE0XzFfUkVHOiBEQ0RDX1YxNF9JRExFX0hZU1QgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMV9SRUdfRENEQ19WMTRfQ1VSX0xJTV9NQVhfTFZfUG9zICgxMFVMKSAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMV9SRUc6IERDRENfVjE0X0NVUl9MSU1fTUFYX0xWIChCaXQgMTApICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMV9SRUdfRENEQ19WMTRfQ1VSX0xJTV9NQVhfTFZfTXNrICgweDNjMDBVTCkgICAgICAvKiE8IERDREMgRENEQ19WMTRfMV9SRUc6IERDRENfVjE0X0NVUl9MSU1fTUFYX0xWIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE0XzFfUkVHX0RDRENfVjE0X0VOQUJMRV9MVl9Qb3MgKDE0VUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE0XzFfUkVHOiBEQ0RDX1YxNF9FTkFCTEVfTFYgKEJpdCAxNCkgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE0XzFfUkVHX0RDRENfVjE0X0VOQUJMRV9MVl9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE0XzFfUkVHOiBEQ0RDX1YxNF9FTkFCTEVfTFYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMV9SRUdfRENEQ19WMTRfRU5BQkxFX0hWX1BvcyAoMTVVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMV9SRUc6IERDRENfVjE0X0VOQUJMRV9IViAoQml0IDE1KSAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMV9SRUdfRENEQ19WMTRfRU5BQkxFX0hWX01zayAoMHg4MDAwVUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMV9SRUc6IERDRENfVjE0X0VOQUJMRV9IViAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19WMThfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOF8wX1JFR19EQ0RDX1YxOF9DVVJfTElNX01JTl9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOF8wX1JFRzogRENEQ19WMThfQ1VSX0xJTV9NSU4gKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOF8wX1JFR19EQ0RDX1YxOF9DVVJfTElNX01JTl9Nc2sgKDB4MWZVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOF8wX1JFRzogRENEQ19WMThfQ1VSX0xJTV9NSU4gKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMF9SRUdfRENEQ19WMThfQ1VSX0xJTV9NQVhfSFZfUG9zICg1VUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMF9SRUc6IERDRENfVjE4X0NVUl9MSU1fTUFYX0hWIChCaXQgNSkgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMF9SRUdfRENEQ19WMThfQ1VSX0xJTV9NQVhfSFZfTXNrICgweDNlMFVMKSAgICAgICAvKiE8IERDREMgRENEQ19WMThfMF9SRUc6IERDRENfVjE4X0NVUl9MSU1fTUFYX0hWIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4XzBfUkVHX0RDRENfVjE4X1ZPTFRBR0VfUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4XzBfUkVHOiBEQ0RDX1YxOF9WT0xUQUdFIChCaXQgMTApICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4XzBfUkVHX0RDRENfVjE4X1ZPTFRBR0VfTXNrICgweDdjMDBVTCkgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4XzBfUkVHOiBEQ0RDX1YxOF9WT0xUQUdFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4XzBfUkVHX0RDRENfVjE4X0ZBU1RfUkFNUElOR19Qb3MgKDE1VUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4XzBfUkVHOiBEQ0RDX1YxOF9GQVNUX1JBTVBJTkcgKEJpdCAxNSkgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4XzBfUkVHX0RDRENfVjE4X0ZBU1RfUkFNUElOR19Nc2sgKDB4ODAwMFVMKSAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4XzBfUkVHOiBEQ0RDX1YxOF9GQVNUX1JBTVBJTkcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfVjE4XzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMV9SRUdfRENEQ19WMThfSURMRV9NSU5fUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMV9SRUc6IERDRENfVjE4X0lETEVfTUlOIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMV9SRUdfRENEQ19WMThfSURMRV9NSU5fTXNrICgweDFmVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMV9SRUc6IERDRENfVjE4X0lETEVfTUlOIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4XzFfUkVHX0RDRENfVjE4X0lETEVfSFlTVF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4XzFfUkVHOiBEQ0RDX1YxOF9JRExFX0hZU1QgKEJpdCA1KSAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4XzFfUkVHX0RDRENfVjE4X0lETEVfSFlTVF9Nc2sgKDB4M2UwVUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4XzFfUkVHOiBEQ0RDX1YxOF9JRExFX0hZU1QgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMV9SRUdfRENEQ19WMThfQ1VSX0xJTV9NQVhfTFZfUG9zICgxMFVMKSAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMV9SRUc6IERDRENfVjE4X0NVUl9MSU1fTUFYX0xWIChCaXQgMTApICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMV9SRUdfRENEQ19WMThfQ1VSX0xJTV9NQVhfTFZfTXNrICgweDNjMDBVTCkgICAgICAvKiE8IERDREMgRENEQ19WMThfMV9SRUc6IERDRENfVjE4X0NVUl9MSU1fTUFYX0xWIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4XzFfUkVHX0RDRENfVjE4X0VOQUJMRV9MVl9Qb3MgKDE0VUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4XzFfUkVHOiBEQ0RDX1YxOF9FTkFCTEVfTFYgKEJpdCAxNCkgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4XzFfUkVHX0RDRENfVjE4X0VOQUJMRV9MVl9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4XzFfUkVHOiBEQ0RDX1YxOF9FTkFCTEVfTFYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMV9SRUdfRENEQ19WMThfRU5BQkxFX0hWX1BvcyAoMTVVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMV9SRUc6IERDRENfVjE4X0VOQUJMRV9IViAoQml0IDE1KSAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMV9SRUdfRENEQ19WMThfRU5BQkxFX0hWX01zayAoMHg4MDAwVUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMV9SRUc6IERDRENfVjE4X0VOQUJMRV9IViAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19WRERfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1ZERF8wX1JFR19EQ0RDX1ZERF9DVVJfTElNX01JTl9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1ZERF8wX1JFRzogRENEQ19WRERfQ1VSX0xJTV9NSU4gKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1ZERF8wX1JFR19EQ0RDX1ZERF9DVVJfTElNX01JTl9Nc2sgKDB4MWZVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1ZERF8wX1JFRzogRENEQ19WRERfQ1VSX0xJTV9NSU4gKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMF9SRUdfRENEQ19WRERfQ1VSX0xJTV9NQVhfSFZfUG9zICg1VUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMF9SRUc6IERDRENfVkREX0NVUl9MSU1fTUFYX0hWIChCaXQgNSkgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMF9SRUdfRENEQ19WRERfQ1VSX0xJTV9NQVhfSFZfTXNrICgweDNlMFVMKSAgICAgICAvKiE8IERDREMgRENEQ19WRERfMF9SRUc6IERDRENfVkREX0NVUl9MSU1fTUFYX0hWIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVkREXzBfUkVHX0RDRENfVkREX1ZPTFRBR0VfUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVkREXzBfUkVHOiBEQ0RDX1ZERF9WT0xUQUdFIChCaXQgMTApICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVkREXzBfUkVHX0RDRENfVkREX1ZPTFRBR0VfTXNrICgweDdjMDBVTCkgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVkREXzBfUkVHOiBEQ0RDX1ZERF9WT0xUQUdFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVkREXzBfUkVHX0RDRENfVkREX0ZBU1RfUkFNUElOR19Qb3MgKDE1VUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVkREXzBfUkVHOiBEQ0RDX1ZERF9GQVNUX1JBTVBJTkcgKEJpdCAxNSkgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVkREXzBfUkVHX0RDRENfVkREX0ZBU1RfUkFNUElOR19Nc2sgKDB4ODAwMFVMKSAgICAgICAgLyohPCBEQ0RDIERDRENfVkREXzBfUkVHOiBEQ0RDX1ZERF9GQVNUX1JBTVBJTkcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfVkREXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMV9SRUdfRENEQ19WRERfSURMRV9NSU5fUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMV9SRUc6IERDRENfVkREX0lETEVfTUlOIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMV9SRUdfRENEQ19WRERfSURMRV9NSU5fTXNrICgweDFmVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMV9SRUc6IERDRENfVkREX0lETEVfTUlOIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVkREXzFfUkVHX0RDRENfVkREX0lETEVfSFlTVF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVkREXzFfUkVHOiBEQ0RDX1ZERF9JRExFX0hZU1QgKEJpdCA1KSAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVkREXzFfUkVHX0RDRENfVkREX0lETEVfSFlTVF9Nc2sgKDB4M2UwVUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVkREXzFfUkVHOiBEQ0RDX1ZERF9JRExFX0hZU1QgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMV9SRUdfRENEQ19WRERfQ1VSX0xJTV9NQVhfTFZfUG9zICgxMFVMKSAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMV9SRUc6IERDRENfVkREX0NVUl9MSU1fTUFYX0xWIChCaXQgMTApICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMV9SRUdfRENEQ19WRERfQ1VSX0xJTV9NQVhfTFZfTXNrICgweDNjMDBVTCkgICAgICAvKiE8IERDREMgRENEQ19WRERfMV9SRUc6IERDRENfVkREX0NVUl9MSU1fTUFYX0xWIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVkREXzFfUkVHX0RDRENfVkREX0VOQUJMRV9MVl9Qb3MgKDE0VUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVkREXzFfUkVHOiBEQ0RDX1ZERF9FTkFCTEVfTFYgKEJpdCAxNCkgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVkREXzFfUkVHX0RDRENfVkREX0VOQUJMRV9MVl9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVkREXzFfUkVHOiBEQ0RDX1ZERF9FTkFCTEVfTFYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMV9SRUdfRENEQ19WRERfRU5BQkxFX0hWX1BvcyAoMTVVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMV9SRUc6IERDRENfVkREX0VOQUJMRV9IViAoQml0IDE1KSAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMV9SRUdfRENEQ19WRERfRU5BQkxFX0hWX01zayAoMHg4MDAwVUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMV9SRUc6IERDRENfVkREX0VOQUJMRV9IViAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1YxOFBfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMF9SRUdfRENEQ19WMThQX0NVUl9MSU1fTUlOX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMF9SRUc6IERDRENfVjE4UF9DVVJfTElNX01JTiAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMF9SRUdfRENEQ19WMThQX0NVUl9MSU1fTUlOX01zayAoMHgxZlVMKSAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMF9SRUc6IERDRENfVjE4UF9DVVJfTElNX01JTiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMF9SRUdfRENEQ19WMThQX0NVUl9MSU1fTUFYX0hWX1BvcyAoNVVMKSAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMF9SRUc6IERDRENfVjE4UF9DVVJfTElNX01BWF9IViAoQml0IDUpICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMF9SRUdfRENEQ19WMThQX0NVUl9MSU1fTUFYX0hWX01zayAoMHgzZTBVTCkgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMF9SRUc6IERDRENfVjE4UF9DVVJfTElNX01BWF9IViAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMF9SRUdfRENEQ19WMThQX1ZPTFRBR0VfUG9zICgxMFVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMF9SRUc6IERDRENfVjE4UF9WT0xUQUdFIChCaXQgMTApICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMF9SRUdfRENEQ19WMThQX1ZPTFRBR0VfTXNrICgweDdjMDBVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMF9SRUc6IERDRENfVjE4UF9WT0xUQUdFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8wX1JFR19EQ0RDX1YxOFBfRkFTVF9SQU1QSU5HX1BvcyAoMTVVTCkgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8wX1JFRzogRENEQ19WMThQX0ZBU1RfUkFNUElORyAoQml0IDE1KSAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8wX1JFR19EQ0RDX1YxOFBfRkFTVF9SQU1QSU5HX01zayAoMHg4MDAwVUwpICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8wX1JFRzogRENEQ19WMThQX0ZBU1RfUkFNUElORyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1YxOFBfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMV9SRUdfRENEQ19WMThQX0lETEVfTUlOX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMV9SRUc6IERDRENfVjE4UF9JRExFX01JTiAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMV9SRUdfRENEQ19WMThQX0lETEVfTUlOX01zayAoMHgxZlVMKSAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMV9SRUc6IERDRENfVjE4UF9JRExFX01JTiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMV9SRUdfRENEQ19WMThQX0lETEVfSFlTVF9Qb3MgKDVVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMV9SRUc6IERDRENfVjE4UF9JRExFX0hZU1QgKEJpdCA1KSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMV9SRUdfRENEQ19WMThQX0lETEVfSFlTVF9Nc2sgKDB4M2UwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMV9SRUc6IERDRENfVjE4UF9JRExFX0hZU1QgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMThQXzFfUkVHX0RDRENfVjE4UF9DVVJfTElNX01BWF9MVl9Qb3MgKDEwVUwpICAgICAgICAvKiE8IERDREMgRENEQ19WMThQXzFfUkVHOiBEQ0RDX1YxOFBfQ1VSX0xJTV9NQVhfTFYgKEJpdCAxMCkgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThQXzFfUkVHX0RDRENfVjE4UF9DVVJfTElNX01BWF9MVl9Nc2sgKDB4M2MwMFVMKSAgICAvKiE8IERDREMgRENEQ19WMThQXzFfUkVHOiBEQ0RDX1YxOFBfQ1VSX0xJTV9NQVhfTFYgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIERDRENfRENEQ19WMThQXzFfUkVHX0RDRENfVjE4UF9FTkFCTEVfTFZfUG9zICgxNFVMKSAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThQXzFfUkVHOiBEQ0RDX1YxOFBfRU5BQkxFX0xWIChCaXQgMTQpICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThQXzFfUkVHX0RDRENfVjE4UF9FTkFCTEVfTFZfTXNrICgweDQwMDBVTCkgICAgICAgICAvKiE8IERDREMgRENEQ19WMThQXzFfUkVHOiBEQ0RDX1YxOFBfRU5BQkxFX0xWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8xX1JFR19EQ0RDX1YxOFBfRU5BQkxFX0hWX1BvcyAoMTVVTCkgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8xX1JFRzogRENEQ19WMThQX0VOQUJMRV9IViAoQml0IDE1KSAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8xX1JFR19EQ0RDX1YxOFBfRU5BQkxFX0hWX01zayAoMHg4MDAwVUwpICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8xX1JFRzogRENEQ19WMThQX0VOQUJMRV9IViAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19SRVRfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8wX1JFR19EQ0RDX1ZERF9DVVJfTElNX1JFVF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8wX1JFRzogRENEQ19WRERfQ1VSX0xJTV9SRVQgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8wX1JFR19EQ0RDX1ZERF9DVVJfTElNX1JFVF9Nc2sgKDB4MWZVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8wX1JFRzogRENEQ19WRERfQ1VSX0xJTV9SRVQgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19SRVRfMF9SRUdfRENEQ19WRERfUkVUX0NZQ0xFU19Qb3MgKDVVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19SRVRfMF9SRUc6IERDRENfVkREX1JFVF9DWUNMRVMgKEJpdCA1KSAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19SRVRfMF9SRUdfRENEQ19WRERfUkVUX0NZQ0xFU19Nc2sgKDB4ZTBVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19SRVRfMF9SRUc6IERDRENfVkREX1JFVF9DWUNMRVMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIERDRENfRENEQ19SRVRfMF9SRUdfRENEQ19WMThQX0NVUl9MSU1fUkVUX1BvcyAoOFVMKSAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19SRVRfMF9SRUc6IERDRENfVjE4UF9DVVJfTElNX1JFVCAoQml0IDgpICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19SRVRfMF9SRUdfRENEQ19WMThQX0NVUl9MSU1fUkVUX01zayAoMHgxZjAwVUwpICAgICAgICAvKiE8IERDREMgRENEQ19SRVRfMF9SRUc6IERDRENfVjE4UF9DVVJfTElNX1JFVCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8wX1JFR19EQ0RDX1YxOFBfUkVUX0NZQ0xFU19Qb3MgKDEzVUwpICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8wX1JFRzogRENEQ19WMThQX1JFVF9DWUNMRVMgKEJpdCAxMykgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8wX1JFR19EQ0RDX1YxOFBfUkVUX0NZQ0xFU19Nc2sgKDB4ZTAwMFVMKSAgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8wX1JFRzogRENEQ19WMThQX1JFVF9DWUNMRVMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfUkVUXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19SRVRfMV9SRUdfRENEQ19WMTRfQ1VSX0xJTV9SRVRfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19SRVRfMV9SRUc6IERDRENfVjE0X0NVUl9MSU1fUkVUIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19SRVRfMV9SRUdfRENEQ19WMTRfQ1VSX0xJTV9SRVRfTXNrICgweDFmVUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19SRVRfMV9SRUc6IERDRENfVjE0X0NVUl9MSU1fUkVUIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfUkVUXzFfUkVHX0RDRENfVjE0X1JFVF9DWUNMRVNfUG9zICg1VUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfUkVUXzFfUkVHOiBEQ0RDX1YxNF9SRVRfQ1lDTEVTIChCaXQgNSkgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfUkVUXzFfUkVHX0RDRENfVjE0X1JFVF9DWUNMRVNfTXNrICgweGUwVUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfUkVUXzFfUkVHOiBEQ0RDX1YxNF9SRVRfQ1lDTEVTIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBEQ0RDX0RDRENfUkVUXzFfUkVHX0RDRENfVjE4X0NVUl9MSU1fUkVUX1BvcyAoOFVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfUkVUXzFfUkVHOiBEQ0RDX1YxOF9DVVJfTElNX1JFVCAoQml0IDgpICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfUkVUXzFfUkVHX0RDRENfVjE4X0NVUl9MSU1fUkVUX01zayAoMHgxZjAwVUwpICAgICAgICAgLyohPCBEQ0RDIERDRENfUkVUXzFfUkVHOiBEQ0RDX1YxOF9DVVJfTElNX1JFVCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8xX1JFR19EQ0RDX1YxOF9SRVRfQ1lDTEVTX1BvcyAoMTNVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8xX1JFRzogRENEQ19WMThfUkVUX0NZQ0xFUyAoQml0IDEzKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8xX1JFR19EQ0RDX1YxOF9SRVRfQ1lDTEVTX01zayAoMHhlMDAwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8xX1JFRzogRENEQ19WMThfUkVUX0NZQ0xFUyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19UUklNX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fUkVHX0RDRENfTl9DT01QX1RSSU1fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fUkVHOiBEQ0RDX05fQ09NUF9UUklNIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fUkVHX0RDRENfTl9DT01QX1RSSU1fTXNrICgweDNmVUwpICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fUkVHOiBEQ0RDX05fQ09NUF9UUklNIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fUkVHX0RDRENfTl9DT01QX01BTl9UUklNX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fUkVHOiBEQ0RDX05fQ09NUF9NQU5fVFJJTSAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fUkVHX0RDRENfTl9DT01QX01BTl9UUklNX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fUkVHOiBEQ0RDX05fQ09NUF9NQU5fVFJJTSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fUkVHX0RDRENfUF9DT01QX1RSSU1fUG9zICg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fUkVHOiBEQ0RDX1BfQ09NUF9UUklNIChCaXQgNykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fUkVHX0RDRENfUF9DT01QX1RSSU1fTXNrICgweDFmODBVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fUkVHOiBEQ0RDX1BfQ09NUF9UUklNIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fUkVHX0RDRENfUF9DT01QX01BTl9UUklNX1BvcyAoMTNVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fUkVHOiBEQ0RDX1BfQ09NUF9NQU5fVFJJTSAoQml0IDEzKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fUkVHX0RDRENfUF9DT01QX01BTl9UUklNX01zayAoMHgyMDAwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fUkVHOiBEQ0RDX1BfQ09NUF9NQU5fVFJJTSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1RFU1RfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9QU1dfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfUFNXIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9QU1dfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfUFNXIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9OU1dfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfTlNXIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9OU1dfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfTlNXIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9GV19Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfRlcgKEJpdCAyKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9GV19Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfRlcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9WMTRfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfVjE0IChCaXQgMykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9WMTRfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfVjE0IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9WMThfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfVjE4IChCaXQgNCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9WMThfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfVjE4IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9WRERfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfVkREIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9WRERfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfVkREIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9WMThQX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfVjE4UCAoQml0IDYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9WMThQX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfVjE4UCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9JRExFX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfSURMRSAoQml0IDcpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9JRExFX01zayAoMHg4MFVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfSURMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19BTkFfVEVTVF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfQU5BX1RFU1QgKEJpdCA4KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19BTkFfVEVTVF9Nc2sgKDB4NzAwVUwpICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfQU5BX1RFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19PVVRQVVRfTU9OSVRPUl9Qb3MgKDExVUwpICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfT1VUUFVUX01PTklUT1IgKEJpdCAxMSkgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19PVVRQVVRfTU9OSVRPUl9Nc2sgKDB4MzgwMFVMKSAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfT1VUUFVUX01PTklUT1IgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIERDRENfRENEQ19URVNUXzBfUkVHX0RDRENfRk9SQ0VfQ1VSUkVOVF9Qb3MgKDE0VUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19URVNUXzBfUkVHOiBEQ0RDX0ZPUkNFX0NVUlJFTlQgKEJpdCAxNCkgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19URVNUXzBfUkVHX0RDRENfRk9SQ0VfQ1VSUkVOVF9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAvKiE8IERDREMgRENEQ19URVNUXzBfUkVHOiBEQ0RDX0ZPUkNFX0NVUlJFTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19URVNUXzBfUkVHX0RDRENfRk9SQ0VfQ09NUF9DTEtfUG9zICgxNVVMKSAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19URVNUXzBfUkVHOiBEQ0RDX0ZPUkNFX0NPTVBfQ0xLIChCaXQgMTUpICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19URVNUXzBfUkVHX0RDRENfRk9SQ0VfQ09NUF9DTEtfTXNrICgweDgwMDBVTCkgICAgICAgICAvKiE8IERDREMgRENEQ19URVNUXzBfUkVHOiBEQ0RDX0ZPUkNFX0NPTVBfQ0xLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfVEVTVF8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8xX1JFR19EQ0RDX1RFU1RfUkVHX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8xX1JFRzogRENEQ19URVNUX1JFRyAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8xX1JFR19EQ0RDX1RFU1RfUkVHX01zayAoMHhmVUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8xX1JFRzogRENEQ19URVNUX1JFRyAoQml0ZmllbGQtTWFzazogMHgwZikgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8xX1JFR19EQ0RDX1RFU1RfQ1VSUkVOVF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8xX1JFRzogRENEQ19URVNUX0NVUlJFTlQgKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8xX1JFR19EQ0RDX1RFU1RfQ1VSUkVOVF9Nc2sgKDB4MWYwVUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8xX1JFRzogRENEQ19URVNUX0NVUlJFTlQgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19URVNUXzFfUkVHX0RDRENfQ09NUF9DTEtfUG9zICg5VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19URVNUXzFfUkVHOiBEQ0RDX0NPTVBfQ0xLIChCaXQgOSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19URVNUXzFfUkVHX0RDRENfQ09NUF9DTEtfTXNrICgweDFlMDBVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19URVNUXzFfUkVHOiBEQ0RDX0NPTVBfQ0xLIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1NUQVRVU18wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMF9SRUdfRENEQ19DSEFSR0VfUkVHXzBfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMF9SRUc6IERDRENfQ0hBUkdFX1JFR18wIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMF9SRUdfRENEQ19DSEFSR0VfUkVHXzBfTXNrICgweDdVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMF9SRUc6IERDRENfQ0hBUkdFX1JFR18wIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzBfUkVHX0RDRENfQ0hBUkdFX1JFR18xX1BvcyAoM1VMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzBfUkVHOiBEQ0RDX0NIQVJHRV9SRUdfMSAoQml0IDMpICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzBfUkVHX0RDRENfQ0hBUkdFX1JFR18xX01zayAoMHgzOFVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzBfUkVHOiBEQ0RDX0NIQVJHRV9SRUdfMSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18wX1JFR19EQ0RDX0NIQVJHRV9SRUdfMl9Qb3MgKDZVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18wX1JFRzogRENEQ19DSEFSR0VfUkVHXzIgKEJpdCA2KSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18wX1JFR19EQ0RDX0NIQVJHRV9SRUdfMl9Nc2sgKDB4MWMwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18wX1JFRzogRENEQ19DSEFSR0VfUkVHXzIgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMF9SRUdfRENEQ19DSEFSR0VfUkVHXzNfUG9zICg5VUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMF9SRUc6IERDRENfQ0hBUkdFX1JFR18zIChCaXQgOSkgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMF9SRUdfRENEQ19DSEFSR0VfUkVHXzNfTXNrICgweGUwMFVMKSAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMF9SRUc6IERDRENfQ0hBUkdFX1JFR18zIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19TVEFUVVNfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE0X05PS19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxNF9OT0sgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE0X05PS19Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxNF9OT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE4X05PS19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxOF9OT0sgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE4X05PS19Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxOF9OT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVkREX05PS19Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1ZERF9OT0sgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVkREX05PS19Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1ZERF9OT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE4UF9OT0tfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxOFBfTk9LIChCaXQgMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE4UF9OT0tfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxOFBfTk9LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE0X09LX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxNF9PSyAoQml0IDQpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE0X09LX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxNF9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE4X09LX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxOF9PSyAoQml0IDUpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE4X09LX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxOF9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVkREX09LX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1ZERF9PSyAoQml0IDYpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVkREX09LX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1ZERF9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE4UF9PS19Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxOFBfT0sgKEJpdCA3KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE4UF9PS19Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxOFBfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE0X0FWQUlMQUJMRV9Qb3MgKDhVTCkgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxNF9BVkFJTEFCTEUgKEJpdCA4KSAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE0X0FWQUlMQUJMRV9Nc2sgKDB4MTAwVUwpICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxNF9BVkFJTEFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThfQVZBSUxBQkxFX1BvcyAoOVVMKSAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4X0FWQUlMQUJMRSAoQml0IDkpICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThfQVZBSUxBQkxFX01zayAoMHgyMDBVTCkgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4X0FWQUlMQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18xX1JFR19EQ0RDX1ZERF9BVkFJTEFCTEVfUG9zICgxMFVMKSAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18xX1JFRzogRENEQ19WRERfQVZBSUxBQkxFIChCaXQgMTApICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18xX1JFR19EQ0RDX1ZERF9BVkFJTEFCTEVfTXNrICgweDQwMFVMKSAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18xX1JFRzogRENEQ19WRERfQVZBSUxBQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE4UF9BVkFJTEFCTEVfUG9zICgxMVVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxOFBfQVZBSUxBQkxFIChCaXQgMTEpICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVjE4UF9BVkFJTEFCTEVfTXNrICgweDgwMFVMKSAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1YxOFBfQVZBSUxBQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19TVEFUVVNfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfTl9DT01QX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX05fQ09NUCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfTl9DT01QX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX05fQ09NUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfUF9DT01QX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1BfQ09NUCAoQml0IDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfUF9DT01QX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1BfQ09NUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfTl9DT01QX05fUG9zICgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX05fQ09NUF9OIChCaXQgMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfTl9DT01QX05fTXNrICgweDRVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX05fQ09NUF9OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfTl9DT01QX1BfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX05fQ09NUF9QIChCaXQgMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfTl9DT01QX1BfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX05fQ09NUF9QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfUF9DT01QX05fUG9zICg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1BfQ09NUF9OIChCaXQgNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfUF9DT01QX05fTXNrICgweDEwVUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1BfQ09NUF9OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfUF9DT01QX1BfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1BfQ09NUF9QIChCaXQgNSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfUF9DT01QX1BfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1BfQ09NUF9QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfUFNXX1NUQVRFX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1BTV19TVEFURSAoQml0IDYpICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfUFNXX1NUQVRFX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1BTV19TVEFURSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18yX1JFR19EQ0RDX05TV19TVEFURV9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18yX1JFRzogRENEQ19OU1dfU1RBVEUgKEJpdCA3KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18yX1JFR19EQ0RDX05TV19TVEFURV9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18yX1JFRzogRENEQ19OU1dfU1RBVEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19WMTRfU1dfU1RBVEVfUG9zICg4VUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfVjE0X1NXX1NUQVRFIChCaXQgOCkgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19WMTRfU1dfU1RBVEVfTXNrICgweDEwMFVMKSAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfVjE0X1NXX1NUQVRFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfVjE4X1NXX1NUQVRFX1BvcyAoOVVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1YxOF9TV19TVEFURSAoQml0IDkpICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfVjE4X1NXX1NUQVRFX01zayAoMHgyMDBVTCkgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1YxOF9TV19TVEFURSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18yX1JFR19EQ0RDX1ZERF9TV19TVEFURV9Qb3MgKDEwVUwpICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18yX1JFRzogRENEQ19WRERfU1dfU1RBVEUgKEJpdCAxMCkgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18yX1JFR19EQ0RDX1ZERF9TV19TVEFURV9Nc2sgKDB4NDAwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18yX1JFRzogRENEQ19WRERfU1dfU1RBVEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19WMThQX1NXX1NUQVRFX1BvcyAoMTFVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfVjE4UF9TV19TVEFURSAoQml0IDExKSAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19WMThQX1NXX1NUQVRFX01zayAoMHg4MDBVTCkgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfVjE4UF9TV19TVEFURSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfU1RBVFVTXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18zX1JFR19EQ0RDX0lfTElNX1ZERF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18zX1JFRzogRENEQ19JX0xJTV9WREQgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18zX1JFR19EQ0RDX0lfTElNX1ZERF9Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18zX1JFRzogRENEQ19JX0xJTV9WREQgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfM19SRUdfRENEQ19JX0xJTV9WMThQX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfM19SRUc6IERDRENfSV9MSU1fVjE4UCAoQml0IDUpICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfM19SRUdfRENEQ19JX0xJTV9WMThQX01zayAoMHgzZTBVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfM19SRUc6IERDRENfSV9MSU1fVjE4UCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18zX1JFR19EQ0RDX0xWX01PREVfUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18zX1JFRzogRENEQ19MVl9NT0RFIChCaXQgMTApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18zX1JFR19EQ0RDX0xWX01PREVfTXNrICgweDQwMFVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18zX1JFRzogRENEQ19MVl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18zX1JFR19EQ0RDX1NUQVJUVVBfQ09NUExFVEVfUG9zICgxMVVMKSAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18zX1JFRzogRENEQ19TVEFSVFVQX0NPTVBMRVRFIChCaXQgMTEpICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18zX1JFR19EQ0RDX1NUQVJUVVBfQ09NUExFVEVfTXNrICgweDgwMFVMKSAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18zX1JFRzogRENEQ19TVEFSVFVQX0NPTVBMRVRFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19TVEFUVVNfNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzRfUkVHX0RDRENfSV9MSU1fVjE0X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzRfUkVHOiBEQ0RDX0lfTElNX1YxNCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzRfUkVHX0RDRENfSV9MSU1fVjE0X01zayAoMHgxZlVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzRfUkVHOiBEQ0RDX0lfTElNX1YxNCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU180X1JFR19EQ0RDX0lfTElNX1YxOF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU180X1JFRzogRENEQ19JX0xJTV9WMTggKEJpdCA1KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU180X1JFR19EQ0RDX0lfTElNX1YxOF9Nc2sgKDB4M2UwVUwpICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU180X1JFRzogRENEQ19JX0xJTV9WMTggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19UUklNXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzBfUkVHX0RDRENfVjE0X1RSSU1fTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzBfUkVHOiBEQ0RDX1YxNF9UUklNX04gKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzBfUkVHX0RDRENfVjE0X1RSSU1fTl9Nc2sgKDB4M2ZVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzBfUkVHOiBEQ0RDX1YxNF9UUklNX04gKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzBfUkVHX0RDRENfVjE0X1RSSU1fUF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzBfUkVHOiBEQ0RDX1YxNF9UUklNX1AgKEJpdCA2KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzBfUkVHX0RDRENfVjE0X1RSSU1fUF9Nc2sgKDB4ZmMwVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzBfUkVHOiBEQ0RDX1YxNF9UUklNX1AgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19UUklNXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzFfUkVHX0RDRENfVjE4X1RSSU1fTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzFfUkVHOiBEQ0RDX1YxOF9UUklNX04gKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzFfUkVHX0RDRENfVjE4X1RSSU1fTl9Nc2sgKDB4M2ZVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzFfUkVHOiBEQ0RDX1YxOF9UUklNX04gKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzFfUkVHX0RDRENfVjE4X1RSSU1fUF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzFfUkVHOiBEQ0RDX1YxOF9UUklNX1AgKEJpdCA2KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzFfUkVHX0RDRENfVjE4X1RSSU1fUF9Nc2sgKDB4ZmMwVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzFfUkVHOiBEQ0RDX1YxOF9UUklNX1AgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19UUklNXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzJfUkVHX0RDRENfVkREX1RSSU1fTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzJfUkVHOiBEQ0RDX1ZERF9UUklNX04gKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzJfUkVHX0RDRENfVkREX1RSSU1fTl9Nc2sgKDB4M2ZVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzJfUkVHOiBEQ0RDX1ZERF9UUklNX04gKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzJfUkVHX0RDRENfVkREX1RSSU1fUF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzJfUkVHOiBEQ0RDX1ZERF9UUklNX1AgKEJpdCA2KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzJfUkVHX0RDRENfVkREX1RSSU1fUF9Nc2sgKDB4ZmMwVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzJfUkVHOiBEQ0RDX1ZERF9UUklNX1AgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19UUklNXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzNfUkVHX0RDRENfVjE4UF9UUklNX05fUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzNfUkVHOiBEQ0RDX1YxOFBfVFJJTV9OIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzNfUkVHX0RDRENfVjE4UF9UUklNX05fTXNrICgweDNmVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzNfUkVHOiBEQ0RDX1YxOFBfVFJJTV9OIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVFJJTV8zX1JFR19EQ0RDX1YxOFBfVFJJTV9QX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVFJJTV8zX1JFRzogRENEQ19WMThQX1RSSU1fUCAoQml0IDYpICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVFJJTV8zX1JFR19EQ0RDX1YxOFBfVFJJTV9QX01zayAoMHhmYzBVTCkgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVFJJTV8zX1JFRzogRENEQ19WMThQX1RSSU1fUCAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19JUlFfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9TVEFUVVNfUkVHX0RDRENfVjE0X1RJTUVPVVRfSVJRX1NUQVRVU19Qb3MgKDBVTCkgIC8qITwgRENEQyBEQ0RDX0lSUV9TVEFUVVNfUkVHOiBEQ0RDX1YxNF9USU1FT1VUX0lSUV9TVEFUVVMgKEJpdCAwKSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX1NUQVRVU19SRUdfRENEQ19WMTRfVElNRU9VVF9JUlFfU1RBVFVTX01zayAoMHgxVUwpIC8qITwgRENEQyBEQ0RDX0lSUV9TVEFUVVNfUkVHOiBEQ0RDX1YxNF9USU1FT1VUX0lSUV9TVEFUVVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfU1RBVFVTX1JFR19EQ0RDX1YxOF9USU1FT1VUX0lSUV9TVEFUVVNfUG9zICgxVUwpICAvKiE8IERDREMgRENEQ19JUlFfU1RBVFVTX1JFRzogRENEQ19WMThfVElNRU9VVF9JUlFfU1RBVFVTIChCaXQgMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9TVEFUVVNfUkVHX0RDRENfVjE4X1RJTUVPVVRfSVJRX1NUQVRVU19Nc2sgKDB4MlVMKSAvKiE8IERDREMgRENEQ19JUlFfU1RBVFVTX1JFRzogRENEQ19WMThfVElNRU9VVF9JUlFfU1RBVFVTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX1NUQVRVU19SRUdfRENEQ19WRERfVElNRU9VVF9JUlFfU1RBVFVTX1BvcyAoMlVMKSAgLyohPCBEQ0RDIERDRENfSVJRX1NUQVRVU19SRUc6IERDRENfVkREX1RJTUVPVVRfSVJRX1NUQVRVUyAoQml0IDIpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfU1RBVFVTX1JFR19EQ0RDX1ZERF9USU1FT1VUX0lSUV9TVEFUVVNfTXNrICgweDRVTCkgLyohPCBEQ0RDIERDRENfSVJRX1NUQVRVU19SRUc6IERDRENfVkREX1RJTUVPVVRfSVJRX1NUQVRVUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9TVEFUVVNfUkVHX0RDRENfVjE4UF9USU1FT1VUX0lSUV9TVEFUVVNfUG9zICgzVUwpIC8qITwgRENEQyBEQ0RDX0lSUV9TVEFUVVNfUkVHOiBEQ0RDX1YxOFBfVElNRU9VVF9JUlFfU1RBVFVTIChCaXQgMykgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9TVEFUVVNfUkVHX0RDRENfVjE4UF9USU1FT1VUX0lSUV9TVEFUVVNfTXNrICgweDhVTCkgLyohPCBEQ0RDIERDRENfSVJRX1NUQVRVU19SRUc6IERDRENfVjE4UF9USU1FT1VUX0lSUV9TVEFUVVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfU1RBVFVTX1JFR19EQ0RDX0JST1dOX09VVF9JUlFfU1RBVFVTX1BvcyAoNFVMKSAgICAvKiE8IERDREMgRENEQ19JUlFfU1RBVFVTX1JFRzogRENEQ19CUk9XTl9PVVRfSVJRX1NUQVRVUyAoQml0IDQpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfU1RBVFVTX1JFR19EQ0RDX0JST1dOX09VVF9JUlFfU1RBVFVTX01zayAoMHgxMFVMKSAvKiE8IERDREMgRENEQ19JUlFfU1RBVFVTX1JFRzogRENEQ19CUk9XTl9PVVRfSVJRX1NUQVRVUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfSVJRX0NMRUFSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9DTEVBUl9SRUdfRENEQ19WMTRfVElNRU9VVF9JUlFfQ0xFQVJfUG9zICgwVUwpICAgIC8qITwgRENEQyBEQ0RDX0lSUV9DTEVBUl9SRUc6IERDRENfVjE0X1RJTUVPVVRfSVJRX0NMRUFSIChCaXQgMCkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9DTEVBUl9SRUdfRENEQ19WMTRfVElNRU9VVF9JUlFfQ0xFQVJfTXNrICgweDFVTCkgIC8qITwgRENEQyBEQ0RDX0lSUV9DTEVBUl9SRUc6IERDRENfVjE0X1RJTUVPVVRfSVJRX0NMRUFSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX0NMRUFSX1JFR19EQ0RDX1YxOF9USU1FT1VUX0lSUV9DTEVBUl9Qb3MgKDFVTCkgICAgLyohPCBEQ0RDIERDRENfSVJRX0NMRUFSX1JFRzogRENEQ19WMThfVElNRU9VVF9JUlFfQ0xFQVIgKEJpdCAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX0NMRUFSX1JFR19EQ0RDX1YxOF9USU1FT1VUX0lSUV9DTEVBUl9Nc2sgKDB4MlVMKSAgLyohPCBEQ0RDIERDRENfSVJRX0NMRUFSX1JFRzogRENEQ19WMThfVElNRU9VVF9JUlFfQ0xFQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfQ0xFQVJfUkVHX0RDRENfVkREX1RJTUVPVVRfSVJRX0NMRUFSX1BvcyAoMlVMKSAgICAvKiE8IERDREMgRENEQ19JUlFfQ0xFQVJfUkVHOiBEQ0RDX1ZERF9USU1FT1VUX0lSUV9DTEVBUiAoQml0IDIpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfQ0xFQVJfUkVHX0RDRENfVkREX1RJTUVPVVRfSVJRX0NMRUFSX01zayAoMHg0VUwpICAvKiE8IERDREMgRENEQ19JUlFfQ0xFQVJfUkVHOiBEQ0RDX1ZERF9USU1FT1VUX0lSUV9DTEVBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9DTEVBUl9SRUdfRENEQ19WMThQX1RJTUVPVVRfSVJRX0NMRUFSX1BvcyAoM1VMKSAgIC8qITwgRENEQyBEQ0RDX0lSUV9DTEVBUl9SRUc6IERDRENfVjE4UF9USU1FT1VUX0lSUV9DTEVBUiAoQml0IDMpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfQ0xFQVJfUkVHX0RDRENfVjE4UF9USU1FT1VUX0lSUV9DTEVBUl9Nc2sgKDB4OFVMKSAvKiE8IERDREMgRENEQ19JUlFfQ0xFQVJfUkVHOiBEQ0RDX1YxOFBfVElNRU9VVF9JUlFfQ0xFQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfQ0xFQVJfUkVHX0RDRENfQlJPV05fT1VUX0lSUV9DTEVBUl9Qb3MgKDRVTCkgICAgICAvKiE8IERDREMgRENEQ19JUlFfQ0xFQVJfUkVHOiBEQ0RDX0JST1dOX09VVF9JUlFfQ0xFQVIgKEJpdCA0KSAgICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfQ0xFQVJfUkVHX0RDRENfQlJPV05fT1VUX0lSUV9DTEVBUl9Nc2sgKDB4MTBVTCkgICAvKiE8IERDREMgRENEQ19JUlFfQ0xFQVJfUkVHOiBEQ0RDX0JST1dOX09VVF9JUlFfQ0xFQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX0lSUV9NQVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfTUFTS19SRUdfRENEQ19WMTRfVElNRU9VVF9JUlFfTUFTS19Qb3MgKDBVTCkgICAgICAvKiE8IERDREMgRENEQ19JUlFfTUFTS19SRUc6IERDRENfVjE0X1RJTUVPVVRfSVJRX01BU0sgKEJpdCAwKSAgICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfTUFTS19SRUdfRENEQ19WMTRfVElNRU9VVF9JUlFfTUFTS19Nc2sgKDB4MVVMKSAgICAvKiE8IERDREMgRENEQ19JUlFfTUFTS19SRUc6IERDRENfVjE0X1RJTUVPVVRfSVJRX01BU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfTUFTS19SRUdfRENEQ19WMThfVElNRU9VVF9JUlFfTUFTS19Qb3MgKDFVTCkgICAgICAvKiE8IERDREMgRENEQ19JUlFfTUFTS19SRUc6IERDRENfVjE4X1RJTUVPVVRfSVJRX01BU0sgKEJpdCAxKSAgICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfTUFTS19SRUdfRENEQ19WMThfVElNRU9VVF9JUlFfTUFTS19Nc2sgKDB4MlVMKSAgICAvKiE8IERDREMgRENEQ19JUlFfTUFTS19SRUc6IERDRENfVjE4X1RJTUVPVVRfSVJRX01BU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfTUFTS19SRUdfRENEQ19WRERfVElNRU9VVF9JUlFfTUFTS19Qb3MgKDJVTCkgICAgICAvKiE8IERDREMgRENEQ19JUlFfTUFTS19SRUc6IERDRENfVkREX1RJTUVPVVRfSVJRX01BU0sgKEJpdCAyKSAgICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfTUFTS19SRUdfRENEQ19WRERfVElNRU9VVF9JUlFfTUFTS19Nc2sgKDB4NFVMKSAgICAvKiE8IERDREMgRENEQ19JUlFfTUFTS19SRUc6IERDRENfVkREX1RJTUVPVVRfSVJRX01BU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfTUFTS19SRUdfRENEQ19WMThQX1RJTUVPVVRfSVJRX01BU0tfUG9zICgzVUwpICAgICAvKiE8IERDREMgRENEQ19JUlFfTUFTS19SRUc6IERDRENfVjE4UF9USU1FT1VUX0lSUV9NQVNLIChCaXQgMykgICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfTUFTS19SRUdfRENEQ19WMThQX1RJTUVPVVRfSVJRX01BU0tfTXNrICgweDhVTCkgICAvKiE8IERDREMgRENEQ19JUlFfTUFTS19SRUc6IERDRENfVjE4UF9USU1FT1VUX0lSUV9NQVNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX01BU0tfUkVHX0RDRENfQlJPV05fT1VUX0lSUV9NQVNLX1BvcyAoNFVMKSAgICAgICAgLyohPCBEQ0RDIERDRENfSVJRX01BU0tfUkVHOiBEQ0RDX0JST1dOX09VVF9JUlFfTUFTSyAoQml0IDQpICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX01BU0tfUkVHX0RDRENfQlJPV05fT1VUX0lSUV9NQVNLX01zayAoMHgxMFVMKSAgICAgLyohPCBEQ0RDIERDRENfSVJRX01BU0tfUkVHOiBEQ0RDX0JST1dOX09VVF9JUlFfTUFTSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ0RFTScgUG9zaXRpb24gJiBNYXNrICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9ERU1fQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19SWERBVEFfSU5WX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogUlhEQVRBX0lOViAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19SWERBVEFfSU5WX01zayAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogUlhEQVRBX0lOViAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19ERU1fSFNJX1BPTF9Qb3MgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogREVNX0hTSV9QT0wgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19ERU1fSFNJX1BPTF9Nc2sgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogREVNX0hTSV9QT0wgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19NQVRDSDAxMDFfVEhfUG9zICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogTUFUQ0gwMTAxX1RIIChCaXQgMikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19NQVRDSDAxMDFfVEhfTXNrICAoMHgzY1VMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogTUFUQ0gwMTAxX1RIIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19FUVVBTF9FTl9Qb3MgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogRVFVQUxfRU4gKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19FUVVBTF9FTl9Nc2sgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogRVFVQUxfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19CTEVfRERDX0VOX1BvcyAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogQkxFX0REQ19FTiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19CTEVfRERDX0VOX01zayAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogQkxFX0REQ19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19JUUNPUlJfRU5fUG9zICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogSVFDT1JSX0VOIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19JUUNPUlJfRU5fTXNrICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogSVFDT1JSX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19DRkVfRE9VQkxFX0VOX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogQ0ZFX0RPVUJMRV9FTiAoQml0IDkpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19DRkVfRE9VQkxFX0VOX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogQ0ZFX0RPVUJMRV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19DRkVfTUVESUFOX0VOX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogQ0ZFX01FRElBTl9FTiAoQml0IDEwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19DRkVfTUVESUFOX0VOX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogQ0ZFX01FRElBTl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19DRkVfUFBPTEVfUG9zICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogQ0ZFX1BQT0xFIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9DVFJMX1JFR19DRkVfUFBPTEVfTXNrICAgICAoMHgzODAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9DVFJMX1JFRzogQ0ZFX1BQT0xFIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0FHQ19MVVRfMDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX1ZHQTJfR0FJTjBfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBWR0EyX0dBSU4wIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX1ZHQTJfR0FJTjBfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBWR0EyX0dBSU4wIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX1ZHQTFfR0FJTjBfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBWR0ExX0dBSU4wIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX1ZHQTFfR0FJTjBfTXNrICAoMHgzOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBWR0ExX0dBSU4wIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX0xOQV9HQUlOMF9Qb3MgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBMTkFfR0FJTjAgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX0xOQV9HQUlOMF9Nc2sgICAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBMTkFfR0FJTjAgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX1ZHQTJfR0FJTjFfUG9zICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBWR0EyX0dBSU4xIChCaXQgOCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX1ZHQTJfR0FJTjFfTXNrICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBWR0EyX0dBSU4xIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX1ZHQTFfR0FJTjFfUG9zICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBWR0ExX0dBSU4xIChCaXQgMTEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX1ZHQTFfR0FJTjFfTXNrICAoMHgzODAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBWR0ExX0dBSU4xIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX0xOQV9HQUlOMV9Qb3MgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBMTkFfR0FJTjEgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMDFfUkVHX0xOQV9HQUlOMV9Nc2sgICAoMHhjMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMDFfUkVHOiBMTkFfR0FJTjEgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0FHQ19MVVRfMjNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX1ZHQTJfR0FJTjJfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBWR0EyX0dBSU4yIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX1ZHQTJfR0FJTjJfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBWR0EyX0dBSU4yIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX1ZHQTFfR0FJTjJfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBWR0ExX0dBSU4yIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX1ZHQTFfR0FJTjJfTXNrICAoMHgzOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBWR0ExX0dBSU4yIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX0xOQV9HQUlOMl9Qb3MgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBMTkFfR0FJTjIgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX0xOQV9HQUlOMl9Nc2sgICAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBMTkFfR0FJTjIgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX1ZHQTJfR0FJTjNfUG9zICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBWR0EyX0dBSU4zIChCaXQgOCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX1ZHQTJfR0FJTjNfTXNrICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBWR0EyX0dBSU4zIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX1ZHQTFfR0FJTjNfUG9zICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBWR0ExX0dBSU4zIChCaXQgMTEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX1ZHQTFfR0FJTjNfTXNrICAoMHgzODAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBWR0ExX0dBSU4zIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX0xOQV9HQUlOM19Qb3MgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBMTkFfR0FJTjMgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfMjNfUkVHX0xOQV9HQUlOM19Nc2sgICAoMHhjMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfMjNfUkVHOiBMTkFfR0FJTjMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0FHQ19MVVRfNDVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX1ZHQTJfR0FJTjRfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBWR0EyX0dBSU40IChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX1ZHQTJfR0FJTjRfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBWR0EyX0dBSU40IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX1ZHQTFfR0FJTjRfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBWR0ExX0dBSU40IChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX1ZHQTFfR0FJTjRfTXNrICAoMHgzOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBWR0ExX0dBSU40IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX0xOQV9HQUlONF9Qb3MgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBMTkFfR0FJTjQgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX0xOQV9HQUlONF9Nc2sgICAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBMTkFfR0FJTjQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX1ZHQTJfR0FJTjVfUG9zICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBWR0EyX0dBSU41IChCaXQgOCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX1ZHQTJfR0FJTjVfTXNrICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBWR0EyX0dBSU41IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX1ZHQTFfR0FJTjVfUG9zICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBWR0ExX0dBSU41IChCaXQgMTEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX1ZHQTFfR0FJTjVfTXNrICAoMHgzODAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBWR0ExX0dBSU41IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX0xOQV9HQUlONV9Qb3MgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBMTkFfR0FJTjUgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNDVfUkVHX0xOQV9HQUlONV9Nc2sgICAoMHhjMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNDVfUkVHOiBMTkFfR0FJTjUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0FHQ19MVVRfNjdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX1ZHQTJfR0FJTjZfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBWR0EyX0dBSU42IChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX1ZHQTJfR0FJTjZfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBWR0EyX0dBSU42IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX1ZHQTFfR0FJTjZfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBWR0ExX0dBSU42IChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX1ZHQTFfR0FJTjZfTXNrICAoMHgzOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBWR0ExX0dBSU42IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX0xOQV9HQUlONl9Qb3MgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBMTkFfR0FJTjYgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX0xOQV9HQUlONl9Nc2sgICAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBMTkFfR0FJTjYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX1ZHQTJfR0FJTjdfUG9zICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBWR0EyX0dBSU43IChCaXQgOCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX1ZHQTJfR0FJTjdfTXNrICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBWR0EyX0dBSU43IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX1ZHQTFfR0FJTjdfUG9zICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBWR0ExX0dBSU43IChCaXQgMTEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX1ZHQTFfR0FJTjdfTXNrICAoMHgzODAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBWR0ExX0dBSU43IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX0xOQV9HQUlON19Qb3MgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBMTkFfR0FJTjcgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfNjdfUkVHX0xOQV9HQUlON19Nc2sgICAoMHhjMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfNjdfUkVHOiBMTkFfR0FJTjcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0FHQ19MVVRfODlfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX1ZHQTJfR0FJTjhfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBWR0EyX0dBSU44IChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX1ZHQTJfR0FJTjhfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBWR0EyX0dBSU44IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX1ZHQTFfR0FJTjhfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBWR0ExX0dBSU44IChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX1ZHQTFfR0FJTjhfTXNrICAoMHgzOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBWR0ExX0dBSU44IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX0xOQV9HQUlOOF9Qb3MgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBMTkFfR0FJTjggKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX0xOQV9HQUlOOF9Nc2sgICAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBMTkFfR0FJTjggKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX1ZHQTJfR0FJTjlfUG9zICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBWR0EyX0dBSU45IChCaXQgOCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX1ZHQTJfR0FJTjlfTXNrICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBWR0EyX0dBSU45IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX1ZHQTFfR0FJTjlfUG9zICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBWR0ExX0dBSU45IChCaXQgMTEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX1ZHQTFfR0FJTjlfTXNrICAoMHgzODAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBWR0ExX0dBSU45IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX0xOQV9HQUlOOV9Qb3MgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBMTkFfR0FJTjkgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19MVVRfODlfUkVHX0xOQV9HQUlOOV9Nc2sgICAoMHhjMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19MVVRfODlfUkVHOiBMTkFfR0FJTjkgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0FHQ19DVFJMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMV9SRUdfQUdDX1RIX0xPV19Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMV9SRUc6IEFHQ19USF9MT1cgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMV9SRUdfQUdDX1RIX0xPV19Nc2sgICAoMHg3ZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMV9SRUc6IEFHQ19USF9MT1cgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMV9SRUdfQUdDX1RIX0hJR0hfUG9zICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMV9SRUc6IEFHQ19USF9ISUdIIChCaXQgNykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMV9SRUdfQUdDX1RIX0hJR0hfTXNrICAoMHgzZjgwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMV9SRUc6IEFHQ19USF9ISUdIIChCaXRmaWVsZC1NYXNrOiAweDdmKSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMV9SRUdfQUdDX01PREVfUG9zICAgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMV9SRUc6IEFHQ19NT0RFIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMV9SRUdfQUdDX01PREVfTXNrICAgICAoMHhjMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMV9SRUc6IEFHQ19NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0FHQ19DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMl9SRUdfUlNTSV9USF9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMl9SRUc6IFJTU0lfVEggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMl9SRUdfUlNTSV9USF9Nc2sgICAgICAoMHgzZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMl9SRUc6IFJTU0lfVEggKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMl9SRUdfRU5fRlJaX0dBSU5fUG9zICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMl9SRUc6IEVOX0ZSWl9HQUlOIChCaXQgNikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMl9SRUdfRU5fRlJaX0dBSU5fTXNrICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMl9SRUc6IEVOX0ZSWl9HQUlOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMl9SRUdfQUdDU0VUVElOR19TRUxfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMl9SRUc6IEFHQ1NFVFRJTkdfU0VMIChCaXQgNykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMl9SRUdfQUdDU0VUVElOR19TRUxfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMl9SRUc6IEFHQ1NFVFRJTkdfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMl9SRUdfQUdDU0VUVElOR19XUl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMl9SRUc6IEFHQ1NFVFRJTkdfV1IgKEJpdCA4KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMl9SRUdfQUdDU0VUVElOR19XUl9Nc2sgKDB4ZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMl9SRUc6IEFHQ1NFVFRJTkdfV1IgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMl9SRUdfU0xPV19BR0NfUG9zICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMl9SRUc6IFNMT1dfQUdDIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19DVFJMMl9SRUdfU0xPV19BR0NfTXNrICAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19DVFJMMl9SRUc6IFNMT1dfQUdDIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9BRkNfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0FGQ19DVFJMX1JFR19BRkNfTU9ERV9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FGQ19DVFJMX1JFRzogQUZDX01PREUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FGQ19DVFJMX1JFR19BRkNfTU9ERV9Nc2sgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FGQ19DVFJMX1JFRzogQUZDX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FGQ19DVFJMX1JFR19QT0xFMV9Qb3MgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FGQ19DVFJMX1JFRzogUE9MRTEgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FGQ19DVFJMX1JFR19QT0xFMV9Nc2sgICAgICAgICAoMHgzMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FGQ19DVFJMX1JFRzogUE9MRTEgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FGQ19DVFJMX1JFR19QT0xFMl9Qb3MgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FGQ19DVFJMX1JFRzogUE9MRTIgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FGQ19DVFJMX1JFR19QT0xFMl9Nc2sgICAgICAgICAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FGQ19DVFJMX1JFRzogUE9MRTIgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FGQ19DVFJMX1JFR19QQURfTU9ERV9Qb3MgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FGQ19DVFJMX1JFRzogUEFEX01PREUgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FGQ19DVFJMX1JFR19QQURfTU9ERV9Nc2sgICAgICAoMHgzMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FGQ19DVFJMX1JFRzogUEFEX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FGQ19DVFJMX1JFR19BUERfTU9ERV9Qb3MgICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FGQ19DVFJMX1JFRzogQVBEX01PREUgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FGQ19DVFJMX1JFR19BUERfTU9ERV9Nc2sgICAgICAoMHgxYzAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FGQ19DVFJMX1JFRzogQVBEX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0RDX09GRlNFVF9DVFJMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMV9SRUdfRENPRkZTRVRfSV9XUl9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMV9SRUc6IERDT0ZGU0VUX0lfV1IgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMV9SRUdfRENPRkZTRVRfSV9XUl9Nc2sgKDB4ZmZVTCkgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMV9SRUc6IERDT0ZGU0VUX0lfV1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDFfUkVHX0RDT0ZGU0VUX1FfV1JfUG9zICg4VUwpICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDFfUkVHOiBEQ09GRlNFVF9RX1dSIChCaXQgOCkgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDFfUkVHX0RDT0ZGU0VUX1FfV1JfTXNrICgweGZmMDBVTCkgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDFfUkVHOiBEQ09GRlNFVF9RX1dSIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfRENfT0ZGU0VUX0NUUkwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRENfT0ZGU0VUX0NUUkwyX1JFR19EQ09GRlNFVF9TRUxfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRENfT0ZGU0VUX0NUUkwyX1JFRzogRENPRkZTRVRfU0VMIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRENfT0ZGU0VUX0NUUkwyX1JFR19EQ09GRlNFVF9TRUxfTXNrICgweDFVTCkgICAgICAgICAgICAgLyohPCBERU0gUkZfRENfT0ZGU0VUX0NUUkwyX1JFRzogRENPRkZTRVRfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBERU1fUkZfRENfT0ZGU0VUX0NUUkwyX1JFR19EQ1BBUkNBTF9FTl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRENfT0ZGU0VUX0NUUkwyX1JFRzogRENQQVJDQUxfRU4gKEJpdCAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRENfT0ZGU0VUX0NUUkwyX1JFR19EQ1BBUkNBTF9FTl9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgLyohPCBERU0gUkZfRENfT0ZGU0VUX0NUUkwyX1JFRzogRENQQVJDQUxfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDUE9MRV9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ1BPTEUgKEJpdCAyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDUE9MRV9Nc2sgKDB4Y1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ1BPTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDTlNURVBfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ05TVEVQIChCaXQgNCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDTlNURVBfTXNrICgweDcwVUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ05TVEVQIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDTkdBSU5fUG9zICg3VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ05HQUlOIChCaXQgNykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDTkdBSU5fTXNrICgweDE4MFVMKSAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ05HQUlOIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDUEFSQ0FMX0lOSVRfUG9zICg5VUwpICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ1BBUkNBTF9JTklUIChCaXQgOSkgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDUEFSQ0FMX0lOSVRfTXNrICgweDIwMFVMKSAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ1BBUkNBTF9JTklUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBERU1fUkZfRENfT0ZGU0VUX0NUUkwyX1JFR19EQ1ZHQTFTQ0FMRV9FTl9Qb3MgKDEwVUwpICAgICAgICAgICAgLyohPCBERU0gUkZfRENfT0ZGU0VUX0NUUkwyX1JFRzogRENWR0ExU0NBTEVfRU4gKEJpdCAxMCkgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRENfT0ZGU0VUX0NUUkwyX1JFR19EQ1ZHQTFTQ0FMRV9FTl9Nc2sgKDB4NDAwVUwpICAgICAgICAgLyohPCBERU0gUkZfRENfT0ZGU0VUX0NUUkwyX1JFRzogRENWR0ExU0NBTEVfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDNfUkVHX0RDQkVUQV9JX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDNfUkVHOiBEQ0JFVEFfSSAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDNfUkVHX0RDQkVUQV9JX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDNfUkVHOiBEQ0JFVEFfSSAoQml0ZmllbGQtTWFzazogMHhmZikgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDNfUkVHX0RDQkVUQV9RX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDNfUkVHOiBEQ0JFVEFfUSAoQml0IDgpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDNfUkVHX0RDQkVUQV9RX01zayAoMHhmZjAwVUwpICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDNfUkVHOiBEQ0JFVEFfUSAoQml0ZmllbGQtTWFzazogMHhmZikgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDRfUkVHX0RDQUdDU0VUVElOR19GVUxMMF9Qb3MgKDBVTCkgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDRfUkVHOiBEQ0FHQ1NFVFRJTkdfRlVMTDAgKEJpdCAwKSAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDRfUkVHX0RDQUdDU0VUVElOR19GVUxMMF9Nc2sgKDB4ZlVMKSAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDRfUkVHOiBEQ0FHQ1NFVFRJTkdfRlVMTDAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDRfUkVHX0RDQUdDU0VUVElOR19GVUxMMV9Qb3MgKDRVTCkgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDRfUkVHOiBEQ0FHQ1NFVFRJTkdfRlVMTDEgKEJpdCA0KSAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDRfUkVHX0RDQUdDU0VUVElOR19GVUxMMV9Nc2sgKDB4ZjBVTCkgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDRfUkVHOiBEQ0FHQ1NFVFRJTkdfRlVMTDEgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDRfUkVHX0RDQUdDU0VUVElOR19GVUxMMl9Qb3MgKDhVTCkgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDRfUkVHOiBEQ0FHQ1NFVFRJTkdfRlVMTDIgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDRfUkVHX0RDQUdDU0VUVElOR19GVUxMMl9Nc2sgKDB4ZjAwVUwpICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDRfUkVHOiBEQ0FHQ1NFVFRJTkdfRlVMTDIgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDRfUkVHX0RDQUdDU0VUVElOR19GVUxMM19Qb3MgKDEyVUwpICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDRfUkVHOiBEQ0FHQ1NFVFRJTkdfRlVMTDMgKEJpdCAxMikgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDRfUkVHX0RDQUdDU0VUVElOR19GVUxMM19Nc2sgKDB4ZjAwMFVMKSAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDRfUkVHOiBEQ0FHQ1NFVFRJTkdfRlVMTDMgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9BR0NfUkVTVUxUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9BR0NfUkVTVUxUX1JFR19BRkNfUkRfUG9zICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9BR0NfUkVTVUxUX1JFRzogQUZDX1JEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9BR0NfUkVTVUxUX1JFR19BRkNfUkRfTXNrICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9BR0NfUkVTVUxUX1JFRzogQUZDX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9BR0NfUkVTVUxUX1JFR19BR0NTRVRUSU5HX1JEX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9BR0NfUkVTVUxUX1JFRzogQUdDU0VUVElOR19SRCAoQml0IDgpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9BR0NfUkVTVUxUX1JFR19BR0NTRVRUSU5HX1JEX01zayAoMHhmMDBVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9BR0NfUkVTVUxUX1JFRzogQUdDU0VUVElOR19SRCAoQml0ZmllbGQtTWFzazogMHgwZikgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX1JTU0lfUkVTVUxUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9SU1NJX1JFU1VMVF9SRUdfUlNTSV9QSF9SRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9SU1NJX1JFU1VMVF9SRUc6IFJTU0lfUEhfUkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9SU1NJX1JFU1VMVF9SRUdfUlNTSV9QSF9SRF9Nc2sgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9SU1NJX1JFU1VMVF9SRUc6IFJTU0lfUEhfUkQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICovCisjZGVmaW5lIERFTV9SRl9SU1NJX1JFU1VMVF9SRUdfUlNTSV9BVkdfUkRfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9SU1NJX1JFU1VMVF9SRUc6IFJTU0lfQVZHX1JEIChCaXQgNikgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9SU1NJX1JFU1VMVF9SRUdfUlNTSV9BVkdfUkRfTXNrICgweGZmYzBVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9SU1NJX1JFU1VMVF9SRUc6IFJTU0lfQVZHX1JEIChCaXRmaWVsZC1NYXNrOiAweDNmZikgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9EQ19PRkZTRVRfUkVTVUxUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfUkVTVUxUX1JFR19EQ09GRlNFVF9JX1JEX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfUkVTVUxUX1JFRzogRENPRkZTRVRfSV9SRCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfUkVTVUxUX1JFR19EQ09GRlNFVF9JX1JEX01zayAoMHhmZlVMKSAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfUkVTVUxUX1JFRzogRENPRkZTRVRfSV9SRCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9SRVNVTFRfUkVHX0RDT0ZGU0VUX1FfUkRfUG9zICg4VUwpICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9SRVNVTFRfUkVHOiBEQ09GRlNFVF9RX1JEIChCaXQgOCkgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9SRVNVTFRfUkVHX0RDT0ZGU0VUX1FfUkRfTXNrICgweGZmMDBVTCkgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9SRVNVTFRfUkVHOiBEQ09GRlNFVF9RX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX1JTU0lfQ09NUF9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfUlNTSV9DT01QX0NUUkxfUkVHX1JTU0lfQ09NUDAxX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfUlNTSV9DT01QX0NUUkxfUkVHOiBSU1NJX0NPTVAwMSAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfUlNTSV9DT01QX0NUUkxfUkVHX1JTU0lfQ09NUDAxX01zayAoMHhmVUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfUlNTSV9DT01QX0NUUkxfUkVHOiBSU1NJX0NPTVAwMSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgREVNX1JGX1JTU0lfQ09NUF9DVFJMX1JFR19SU1NJX0NPTVAxMF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX1JTU0lfQ09NUF9DVFJMX1JFRzogUlNTSV9DT01QMTAgKEJpdCA0KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX1JTU0lfQ09NUF9DVFJMX1JFR19SU1NJX0NPTVAxMF9Nc2sgKDB4ZjBVTCkgICAgICAgICAgICAgIC8qITwgREVNIFJGX1JTU0lfQ09NUF9DVFJMX1JFRzogUlNTSV9DT01QMTAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIERFTV9SRl9SU1NJX0NPTVBfQ1RSTF9SRUdfUlNTSV9DT01QMTFfUG9zICg4VUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9SU1NJX0NPTVBfQ1RSTF9SRUc6IFJTU0lfQ09NUDExIChCaXQgOCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9SU1NJX0NPTVBfQ1RSTF9SRUdfUlNTSV9DT01QMTFfTXNrICgweGYwMFVMKSAgICAgICAgICAgICAvKiE8IERFTSBSRl9SU1NJX0NPTVBfQ1RSTF9SRUc6IFJTU0lfQ09NUDExIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBERU1fUkZfUlNTSV9DT01QX0NUUkxfUkVHX1JTU0lfQ09NUDAwX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfUlNTSV9DT01QX0NUUkxfUkVHOiBSU1NJX0NPTVAwMCAoQml0IDEyKSAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfUlNTSV9DT01QX0NUUkxfUkVHX1JTU0lfQ09NUDAwX01zayAoMHhmMDAwVUwpICAgICAgICAgICAgLyohPCBERU0gUkZfUlNTSV9DT01QX0NUUkxfUkVHOiBSU1NJX0NPTVAwMCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0ZUREZfQ1RSTDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDFfUkVHX0NGRV9CSUFTX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDFfUkVHOiBDRkVfQklBUyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDFfUkVHX0NGRV9CSUFTX01zayAgICAoMHgzZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDFfUkVHOiBDRkVfQklBUyAoQml0ZmllbGQtTWFzazogMHgzZmYpICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDFfUkVHX0NGRV9NT0RFX1BvcyAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDFfUkVHOiBDRkVfTU9ERSAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDFfUkVHX0NGRV9NT0RFX01zayAgICAoMHhjMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDFfUkVHOiBDRkVfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDFfUkVHX0NGRV9OU1RFUF9Qb3MgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDFfUkVHOiBDRkVfTlNURVAgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDFfUkVHX0NGRV9OU1RFUF9Nc2sgICAoMHgzMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDFfUkVHOiBDRkVfTlNURVAgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDFfUkVHX0NIU0VMX0ZJTFRfTU9ERTJfUG9zICgxNFVMKSAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDFfUkVHOiBDSFNFTF9GSUxUX01PREUyIChCaXQgMTQpICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDFfUkVHX0NIU0VMX0ZJTFRfTU9ERTJfTXNrICgweGMwMDBVTCkgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDFfUkVHOiBDSFNFTF9GSUxUX01PREUyIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfRlRERl9DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfQ09SUlRIX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IENPUlJUSCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfQ09SUlRIX01zayAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IENPUlJUSCAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfTk9STV9FTl9Qb3MgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IE5PUk1fRU4gKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfTk9STV9FTl9Nc2sgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IE5PUk1fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfUERfTU9ERV9Qb3MgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IFBEX01PREUgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfUERfTU9ERV9Nc2sgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IFBEX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfUERfTlBFQUtfUG9zICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IFBEX05QRUFLIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfUERfTlBFQUtfTXNrICAgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IFBEX05QRUFLIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfUERfTldJTl9Qb3MgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IFBEX05XSU4gKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfUERfTldJTl9Nc2sgICAgICgweDM4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IFBEX05XSU4gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfUERfT0ZGU0VUX1BvcyAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IFBEX09GRlNFVCAoQml0IDE0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMl9SRUdfUERfT0ZGU0VUX01zayAgICgweGMwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMl9SRUc6IFBEX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfRlRERl9DVFJMM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMM19SRUdfRklGX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMM19SRUc6IEZJRiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMM19SRUdfRklGX01zayAgICAgICAgICgweDFmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMM19SRUc6IEZJRiAoQml0ZmllbGQtTWFzazogMHgxZmYpICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMM19SRUdfRlRERl9ERENfRU5fUG9zICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMM19SRUc6IEZUREZfRERDX0VOIChCaXQgOSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMM19SRUdfRlRERl9ERENfRU5fTXNrICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMM19SRUc6IEZUREZfRERDX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMM19SRUdfTUFUQ0hfRklMVF9FTl9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMM19SRUc6IE1BVENIX0ZJTFRfRU4gKEJpdCAxMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMM19SRUdfTUFUQ0hfRklMVF9FTl9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMM19SRUc6IE1BVENIX0ZJTFRfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMM19SRUdfVElNSU5HX0NPUlJfRU5fUG9zICgxMVVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMM19SRUc6IFRJTUlOR19DT1JSX0VOIChCaXQgMTEpICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMM19SRUdfVElNSU5HX0NPUlJfRU5fTXNrICgweDgwMFVMKSAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMM19SRUc6IFRJTUlOR19DT1JSX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMM19SRUdfQ0hTRUxfRklMVF9NT0RFMV9Qb3MgKDEyVUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMM19SRUc6IENIU0VMX0ZJTFRfTU9ERTEgKEJpdCAxMikgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMM19SRUdfQ0hTRUxfRklMVF9NT0RFMV9Nc2sgKDB4MzAwMFVMKSAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMM19SRUc6IENIU0VMX0ZJTFRfTU9ERTEgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19EU19PRkZTRVRfUG9zICAgKDE0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogRFNfT0ZGU0VUIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19EU19PRkZTRVRfTXNrICAgKDB4YzAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogRFNfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9GVERGX0NUUkw0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19TRkQwX1BvcyAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogU0ZEMCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19TRkQwX01zayAgICAgICAgKDB4ZlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogU0ZEMCAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19TRkQxX1BvcyAgICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogU0ZEMSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19TRkQxX01zayAgICAgICAgKDB4ZjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogU0ZEMSAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19MUUlfUFJFQU1CTEVfRU5fUG9zICg4VUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogTFFJX1BSRUFNQkxFX0VOIChCaXQgOCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19MUUlfUFJFQU1CTEVfRU5fTXNrICgweDEwMFVMKSAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogTFFJX1BSRUFNQkxFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfTFFJX1NZTUJPTF9FTl9Qb3MgKDlVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IExRSV9TWU1CT0xfRU4gKEJpdCA5KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfTFFJX1NZTUJPTF9FTl9Nc2sgKDB4MjAwVUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IExRSV9TWU1CT0xfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfTFFJX0NPUlJUSF9FTl9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IExRSV9DT1JSVEhfRU4gKEJpdCAxMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfTFFJX0NPUlJUSF9FTl9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IExRSV9DT1JSVEhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfTFFJX1NDQUxFX1BvcyAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IExRSV9TQ0FMRSAoQml0IDExKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfTFFJX1NDQUxFX01zayAgICgweDE4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IExRSV9TQ0FMRSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfRlRERl9IU0lfUE9MX1BvcyAoMTNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IEZUREZfSFNJX1BPTCAoQml0IDEzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfRlRERl9IU0lfUE9MX01zayAoMHgyMDAwVUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IEZUREZfSFNJX1BPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfQ0NBX01PREVfUG9zICAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IENDQV9NT0RFIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfQ0NBX01PREVfTXNrICAgICgweDQwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IENDQV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfU09fRlRERl9TRUxfUG9zICgxNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IFNPX0ZUREZfU0VMIChCaXQgMTUpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNF9SRUdfU09fRlRERl9TRUxfTXNrICgweDgwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNF9SRUc6IFNPX0ZUREZfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9GVERGX0xPT1BfR0FJTl9QRF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRlRERl9MT09QX0dBSU5fUERfUkVHX0tQX0xGX1BEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9MT09QX0dBSU5fUERfUkVHOiBLUF9MRl9QRCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9MT09QX0dBSU5fUERfUkVHX0tQX0xGX1BEX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9MT09QX0dBSU5fUERfUkVHOiBLUF9MRl9QRCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfTE9PUF9HQUlOX1BEX1JFR19LSV9MRl9QRF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfTE9PUF9HQUlOX1BEX1JFRzogS0lfTEZfUEQgKEJpdCA4KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfTE9PUF9HQUlOX1BEX1JFR19LSV9MRl9QRF9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfTE9PUF9HQUlOX1BEX1JFRzogS0lfTEZfUEQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0ZUREZfTE9PUF9HQUlOX0RTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9GVERGX0xPT1BfR0FJTl9EU19SRUdfS1BfTEZfRFNfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0xPT1BfR0FJTl9EU19SRUc6IEtQX0xGX0RTIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0xPT1BfR0FJTl9EU19SRUdfS1BfTEZfRFNfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0xPT1BfR0FJTl9EU19SRUc6IEtQX0xGX0RTIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBERU1fUkZfRlRERl9MT09QX0dBSU5fRFNfUkVHX0tJX0xGX0RTX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9MT09QX0dBSU5fRFNfUkVHOiBLSV9MRl9EUyAoQml0IDgpICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9MT09QX0dBSU5fRFNfUkVHX0tJX0xGX0RTX01zayAoMHhmZjAwVUwpICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9MT09QX0dBSU5fRFNfUkVHOiBLSV9MRl9EUyAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0ZUREZfQ1RSTDVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDVfUkVHX1JTU0lUSF9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDVfUkVHOiBSU1NJVEggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDVfUkVHX1JTU0lUSF9Nc2sgICAgICAoMHgxZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDVfUkVHOiBSU1NJVEggKEJpdGZpZWxkLU1hc2s6IDB4MWZmZikgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDVfUkVHX0ZUREZfRERDX0lOVl9Qb3MgKDEzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDVfUkVHOiBGVERGX0REQ19JTlYgKEJpdCAxMykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDVfUkVHX0ZUREZfRERDX0lOVl9Nc2sgKDB4MjAwMFVMKSAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDVfUkVHOiBGVERGX0REQ19JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDVfUkVHX0ZTU1NfQ0xFQVJfUG9zICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDVfUkVHOiBGU1NTX0NMRUFSIChCaXQgMTQpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDVfUkVHX0ZTU1NfQ0xFQVJfTXNrICAoMHg0MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDVfUkVHOiBGU1NTX0NMRUFSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDVfUkVHX0RTX09GRlNFVF9TRUxfUG9zICgxNVVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDVfUkVHOiBEU19PRkZTRVRfU0VMIChCaXQgMTUpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDVfUkVHX0RTX09GRlNFVF9TRUxfTXNrICgweDgwMDBVTCkgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDVfUkVHOiBEU19PRkZTRVRfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9GVERGX0NPQklfTE9XX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ09CSV9MT1dfUkVHX0NPQklfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ09CSV9MT1dfUkVHOiBDT0JJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ09CSV9MT1dfUkVHX0NPQklfTXNrICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ09CSV9MT1dfUkVHOiBDT0JJIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9GVERGX0NPQklfSElHSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ09CSV9ISUdIX1JFR19DT0JJX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ09CSV9ISUdIX1JFRzogQ09CSSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ09CSV9ISUdIX1JFR19DT0JJX01zayAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ09CSV9ISUdIX1JFRzogQ09CSSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfREVNX1RFU1RNT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9URVNUTU9ERV9SRUdfREVNX1RFU1RNT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9URVNUTU9ERV9SRUc6IERFTV9URVNUTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9URVNUTU9ERV9SRUdfREVNX1RFU1RNT0RFX01zayAoMHgzZmZVTCkgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9URVNUTU9ERV9SRUc6IERFTV9URVNUTU9ERSAoQml0ZmllbGQtTWFzazogMHgzZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfREVNX0lRQ09SUkVDVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9ERU1fSVFDT1JSRUNUX1JFR19JUUNPUlJfQkVUQV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9ERU1fSVFDT1JSRUNUX1JFRzogSVFDT1JSX0JFVEEgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9ERU1fSVFDT1JSRUNUX1JFR19JUUNPUlJfQkVUQV9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9ERU1fSVFDT1JSRUNUX1JFRzogSVFDT1JSX0JFVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIERFTV9SRl9ERU1fSVFDT1JSRUNUX1JFR19JUUNPUlJfQUxQSEFfUG9zICg4VUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9ERU1fSVFDT1JSRUNUX1JFRzogSVFDT1JSX0FMUEhBIChCaXQgOCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9ERU1fSVFDT1JSRUNUX1JFR19JUUNPUlJfQUxQSEFfTXNrICgweGZmMDBVTCkgICAgICAgICAgICAvKiE8IERFTSBSRl9ERU1fSVFDT1JSRUNUX1JFRzogSVFDT1JSX0FMUEhBIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9QQURfQ05UX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfUEFEX0NOVF9DVFJMX1JFR19QQURfUE9TX0xJTUlUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfUEFEX0NOVF9DVFJMX1JFRzogUEFEX1BPU19MSU1JVCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfUEFEX0NOVF9DVFJMX1JFR19QQURfUE9TX0xJTUlUX01zayAoMHg3ZlVMKSAgICAgICAgICAgICAgLyohPCBERU0gUkZfUEFEX0NOVF9DVFJMX1JFRzogUEFEX1BPU19MSU1JVCAoQml0ZmllbGQtTWFzazogMHg3ZikgKi8KKyNkZWZpbmUgREVNX1JGX1BBRF9DTlRfQ1RSTF9SRUdfUEFEX05FR19MSU1JVF9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX1BBRF9DTlRfQ1RSTF9SRUc6IFBBRF9ORUdfTElNSVQgKEJpdCA3KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX1BBRF9DTlRfQ1RSTF9SRUdfUEFEX05FR19MSU1JVF9Nc2sgKDB4M2Y4MFVMKSAgICAgICAgICAgIC8qITwgREVNIFJGX1BBRF9DTlRfQ1RSTF9SRUc6IFBBRF9ORUdfTElNSVQgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICovCisjZGVmaW5lIERFTV9SRl9QQURfQ05UX0NUUkxfUkVHX1BBRF9DTEVBUl9DT1VOVF9Qb3MgKDE0VUwpICAgICAgICAgICAgICAvKiE8IERFTSBSRl9QQURfQ05UX0NUUkxfUkVHOiBQQURfQ0xFQVJfQ09VTlQgKEJpdCAxNCkgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9QQURfQ05UX0NUUkxfUkVHX1BBRF9DTEVBUl9DT1VOVF9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAvKiE8IERFTSBSRl9QQURfQ05UX0NUUkxfUkVHOiBQQURfQ0xFQVJfQ09VTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfUEFEX0NOVF9SRVNVTFRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9QQURfQ05UX1JFU1VMVF9SRUdfUEFEX1BPU19DTlRfUkRfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IERFTSBSRl9QQURfQ05UX1JFU1VMVF9SRUc6IFBBRF9QT1NfQ05UX1JEIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9QQURfQ05UX1JFU1VMVF9SRUdfUEFEX1BPU19DTlRfUkRfTXNrICgweGZmVUwpICAgICAgICAgICAvKiE8IERFTSBSRl9QQURfQ05UX1JFU1VMVF9SRUc6IFBBRF9QT1NfQ05UX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBERU1fUkZfUEFEX0NOVF9SRVNVTFRfUkVHX1BBRF9ORUdfQ05UX1JEX1BvcyAoOFVMKSAgICAgICAgICAgICAgLyohPCBERU0gUkZfUEFEX0NOVF9SRVNVTFRfUkVHOiBQQURfTkVHX0NOVF9SRCAoQml0IDgpICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfUEFEX0NOVF9SRVNVTFRfUkVHX1BBRF9ORUdfQ05UX1JEX01zayAoMHhmZjAwVUwpICAgICAgICAgLyohPCBERU0gUkZfUEFEX0NOVF9SRVNVTFRfUkVHOiBQQURfTkVHX0NOVF9SRCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9GU1NTX0lfUkVTVUxUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0ZTU1NfSV9SRVNVTFRfUkVHX0ZTU1NfSV9SRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZTU1NfSV9SRVNVTFRfUkVHOiBGU1NTX0lfUkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZTU1NfSV9SRVNVTFRfUkVHX0ZTU1NfSV9SRF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZTU1NfSV9SRVNVTFRfUkVHOiBGU1NTX0lfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9GU1NTX1FfUkVTVUxUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0ZTU1NfUV9SRVNVTFRfUkVHX0ZTU1NfUV9SRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZTU1NfUV9SRVNVTFRfUkVHOiBGU1NTX1FfUkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZTU1NfUV9SRVNVTFRfUkVHX0ZTU1NfUV9SRF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZTU1NfUV9SRVNVTFRfUkVHOiBGU1NTX1FfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0ZTU1NfTUFHX1JFU1VMVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0ZTU1NfTUFHX1JFU1VMVF9SRUdfRlNTU19NQUdfUkRfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZTU1NfTUFHX1JFU1VMVF9SRUc6IEZTU1NfTUFHX1JEIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZTU1NfTUFHX1JFU1VMVF9SRUdfRlNTU19NQUdfUkRfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgREVNIFJGX0ZTU1NfTUFHX1JFU1VMVF9SRUc6IEZTU1NfTUFHX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9DQ0FfUlNTSVRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9DQ0FfUlNTSVRIX1JFR19DQ0FfUlNTSVRIX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9DQ0FfUlNTSVRIX1JFRzogQ0NBX1JTU0lUSCAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9DQ0FfUlNTSVRIX1JFR19DQ0FfUlNTSVRIX01zayAgKDB4MWZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9DQ0FfUlNTSVRIX1JFRzogQ0NBX1JTU0lUSCAoQml0ZmllbGQtTWFzazogMHgxZmZmKSAgICovCisjZGVmaW5lIERFTV9SRl9DQ0FfUlNTSVRIX1JFR19TSUdERVRfVElNRU9VVF9MRU5fUG9zICgxM1VMKSAgICAgICAgICAgICAvKiE8IERFTSBSRl9DQ0FfUlNTSVRIX1JFRzogU0lHREVUX1RJTUVPVVRfTEVOIChCaXQgMTMpICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9DQ0FfUlNTSVRIX1JFR19TSUdERVRfVElNRU9VVF9MRU5fTXNrICgweGUwMDBVTCkgICAgICAgICAvKiE8IERFTSBSRl9DQ0FfUlNTSVRIX1JFRzogU0lHREVUX1RJTUVPVVRfTEVOIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfRlRERl9TSUdERVRfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRlRERl9TSUdERVRfQ1RSTF9SRUdfU0lHREVUX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9TSUdERVRfQ1RSTF9SRUc6IFNJR0RFVF9NT0RFIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9TSUdERVRfQ1RSTF9SRUdfU0lHREVUX01PREVfTXNrICgweDNVTCkgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9TSUdERVRfQ1RSTF9SRUc6IFNJR0RFVF9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBERU1fUkZfRlRERl9TSUdERVRfQ1RSTF9SRUdfU0lHREVUX1RIUkVTSE9MRF9Qb3MgKDJVTCkgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9TSUdERVRfQ1RSTF9SRUc6IFNJR0RFVF9USFJFU0hPTEQgKEJpdCAyKSAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9TSUdERVRfQ1RSTF9SRUdfU0lHREVUX1RIUkVTSE9MRF9Nc2sgKDB4ZmNVTCkgICAgICAgLyohPCBERU0gUkZfRlRERl9TSUdERVRfQ1RSTF9SRUc6IFNJR0RFVF9USFJFU0hPTEQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisjZGVmaW5lIERFTV9SRl9GVERGX1NJR0RFVF9DVFJMX1JFR19TSUdERVRfRElGRl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX1NJR0RFVF9DVFJMX1JFRzogU0lHREVUX0RJRkYgKEJpdCA4KSAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX1NJR0RFVF9DVFJMX1JFR19TSUdERVRfRElGRl9Nc2sgKDB4MTAwVUwpICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX1NJR0RFVF9DVFJMX1JFRzogU0lHREVUX0RJRkYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERFTV9SRl9GVERGX1NJR0RFVF9DVFJMX1JFR19TSUdERVRfU0ZBQ1RPUjJfUG9zICg5VUwpICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX1NJR0RFVF9DVFJMX1JFRzogU0lHREVUX1NGQUNUT1IyIChCaXQgOSkgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX1NJR0RFVF9DVFJMX1JFR19TSUdERVRfU0ZBQ1RPUjJfTXNrICgweDYwMFVMKSAgICAgICAvKiE8IERFTSBSRl9GVERGX1NJR0RFVF9DVFJMX1JFRzogU0lHREVUX1NGQUNUT1IyIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBERU1fUkZfRlRERl9TSUdERVRfQ1RSTF9SRUdfU0lHREVUX1NGQUNUT1IxX1BvcyAoMTFVTCkgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9TSUdERVRfQ1RSTF9SRUc6IFNJR0RFVF9TRkFDVE9SMSAoQml0IDExKSAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9TSUdERVRfQ1RSTF9SRUdfU0lHREVUX1NGQUNUT1IxX01zayAoMHgxODAwVUwpICAgICAgLyohPCBERU0gUkZfRlRERl9TSUdERVRfQ1RSTF9SRUc6IFNJR0RFVF9TRkFDVE9SMSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfU0lHREVUX0NUUkxfUkVHX1NJR0RFVF9ERUxBWV9Qb3MgKDEzVUwpICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfU0lHREVUX0NUUkxfUkVHOiBTSUdERVRfREVMQVkgKEJpdCAxMykgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfU0lHREVUX0NUUkxfUkVHX1NJR0RFVF9ERUxBWV9Nc2sgKDB4NjAwMFVMKSAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfU0lHREVUX0NUUkxfUkVHOiBTSUdERVRfREVMQVkgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdETUEnIFBvc2l0aW9uICYgTWFzayAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEwX0FfU1RBUlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEwX0FfU1RBUlRMX1JFR19ETUEwX0FfU1RBUlRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0FfU1RBUlRMX1JFRzogRE1BMF9BX1NUQVJUTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0FfU1RBUlRMX1JFR19ETUEwX0FfU1RBUlRMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0FfU1RBUlRMX1JFRzogRE1BMF9BX1NUQVJUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMF9BX1NUQVJUSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMF9BX1NUQVJUSF9SRUdfRE1BMF9BX1NUQVJUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9BX1NUQVJUSF9SRUc6IERNQTBfQV9TVEFSVEggKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9BX1NUQVJUSF9SRUdfRE1BMF9BX1NUQVJUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9BX1NUQVJUSF9SRUc6IERNQTBfQV9TVEFSVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTBfQl9TVEFSVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTBfQl9TVEFSVExfUkVHX0RNQTBfQl9TVEFSVExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTBfQl9TVEFSVExfUkVHOiBETUEwX0JfU1RBUlRMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTBfQl9TVEFSVExfUkVHX0RNQTBfQl9TVEFSVExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTBfQl9TVEFSVExfUkVHOiBETUEwX0JfU1RBUlRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEwX0JfU1RBUlRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEwX0JfU1RBUlRIX1JFR19ETUEwX0JfU1RBUlRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0JfU1RBUlRIX1JFRzogRE1BMF9CX1NUQVJUSCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0JfU1RBUlRIX1JFR19ETUEwX0JfU1RBUlRIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0JfU1RBUlRIX1JFRzogRE1BMF9CX1NUQVJUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEwX0lOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMF9JTlRfUkVHX0RNQTBfSU5UX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9JTlRfUkVHOiBETUEwX0lOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9JTlRfUkVHX0RNQTBfSU5UX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9JTlRfUkVHOiBETUEwX0lOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEwX0xFTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMF9MRU5fUkVHX0RNQTBfTEVOX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9MRU5fUkVHOiBETUEwX0xFTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9MRU5fUkVHX0RNQTBfTEVOX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9MRU5fUkVHOiBETUEwX0xFTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEwX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19ETUFfT05fUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogRE1BX09OIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19ETUFfT05fTXNrICAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogRE1BX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19CV19Qb3MgICAgICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogQlcgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19CV19Nc2sgICAgICAgICAgICAgICgweDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogQlcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19JUlFfRU5BQkxFX1BvcyAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19JUlFfRU5BQkxFX01zayAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19EUkVRX01PREVfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogRFJFUV9NT0RFIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19EUkVRX01PREVfTXNrICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogRFJFUV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19CSU5DX1BvcyAgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogQklOQyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19CSU5DX01zayAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogQklOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19BSU5DX1BvcyAgICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogQUlOQyAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19BSU5DX01zayAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogQUlOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19DSVJDVUxBUl9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19DSVJDVUxBUl9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19ETUFfUFJJT19Qb3MgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogRE1BX1BSSU8gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19ETUFfUFJJT19Nc2sgICAgICAgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogRE1BX1BSSU8gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19ETUFfSURMRV9Qb3MgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogRE1BX0lETEUgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19ETUFfSURMRV9Nc2sgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogRE1BX0lETEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19ETUFfSU5JVF9Qb3MgICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogRE1BX0lOSVQgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19ETUFfSU5JVF9Nc2sgICAgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogRE1BX0lOSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19SRVFfU0VOU0VfUG9zICAgICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogUkVRX1NFTlNFIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9DVFJMX1JFR19SRVFfU0VOU0VfTXNrICAgICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9DVFJMX1JFRzogUkVRX1NFTlNFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEwX0lEWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMF9JRFhfUkVHX0RNQTBfSURYX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9JRFhfUkVHOiBETUEwX0lEWCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9JRFhfUkVHX0RNQTBfSURYX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9JRFhfUkVHOiBETUEwX0lEWCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMV9BX1NUQVJUTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMV9BX1NUQVJUTF9SRUdfRE1BMV9BX1NUQVJUTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9BX1NUQVJUTF9SRUc6IERNQTFfQV9TVEFSVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9BX1NUQVJUTF9SRUdfRE1BMV9BX1NUQVJUTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9BX1NUQVJUTF9SRUc6IERNQTFfQV9TVEFSVEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTFfQV9TVEFSVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTFfQV9TVEFSVEhfUkVHX0RNQTFfQV9TVEFSVEhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQV9TVEFSVEhfUkVHOiBETUExX0FfU1RBUlRIIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQV9TVEFSVEhfUkVHX0RNQTFfQV9TVEFSVEhfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQV9TVEFSVEhfUkVHOiBETUExX0FfU1RBUlRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUExX0JfU1RBUlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUExX0JfU1RBUlRMX1JFR19ETUExX0JfU1RBUlRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUExX0JfU1RBUlRMX1JFRzogRE1BMV9CX1NUQVJUTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUExX0JfU1RBUlRMX1JFR19ETUExX0JfU1RBUlRMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUExX0JfU1RBUlRMX1JFRzogRE1BMV9CX1NUQVJUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMV9CX1NUQVJUSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMV9CX1NUQVJUSF9SRUdfRE1BMV9CX1NUQVJUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9CX1NUQVJUSF9SRUc6IERNQTFfQl9TVEFSVEggKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9CX1NUQVJUSF9SRUdfRE1BMV9CX1NUQVJUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9CX1NUQVJUSF9SRUc6IERNQTFfQl9TVEFSVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMV9JTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTFfSU5UX1JFR19ETUExX0lOVF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfSU5UX1JFRzogRE1BMV9JTlQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfSU5UX1JFR19ETUExX0lOVF9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfSU5UX1JFRzogRE1BMV9JTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMV9MRU5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTFfTEVOX1JFR19ETUExX0xFTl9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfTEVOX1JFRzogRE1BMV9MRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfTEVOX1JFR19ETUExX0xFTl9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfTEVOX1JFRzogRE1BMV9MRU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMV9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfRE1BX09OX1BvcyAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IERNQV9PTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfRE1BX09OX01zayAgICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IERNQV9PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfQldfUG9zICAgICAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IEJXIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfQldfTXNrICAgICAgICAgICAgICAoMHg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IEJXIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfSVJRX0VOQUJMRV9Qb3MgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IElSUV9FTkFCTEUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfSVJRX0VOQUJMRV9Nc2sgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IElSUV9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfRFJFUV9NT0RFX1BvcyAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IERSRVFfTU9ERSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfRFJFUV9NT0RFX01zayAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IERSRVFfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfQklOQ19Qb3MgICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IEJJTkMgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfQklOQ19Nc2sgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IEJJTkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfQUlOQ19Qb3MgICAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IEFJTkMgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfQUlOQ19Nc2sgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IEFJTkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfQ0lSQ1VMQVJfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IENJUkNVTEFSIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfQ0lSQ1VMQVJfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IENJUkNVTEFSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfRE1BX1BSSU9fUG9zICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IERNQV9QUklPIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfRE1BX1BSSU9fTXNrICAgICAgICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IERNQV9QUklPIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfRE1BX0lETEVfUG9zICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IERNQV9JRExFIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfRE1BX0lETEVfTXNrICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IERNQV9JRExFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfRE1BX0lOSVRfUG9zICAgICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IERNQV9JTklUIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfRE1BX0lOSVRfTXNrICAgICAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IERNQV9JTklUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfUkVRX1NFTlNFX1BvcyAgICAgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IFJFUV9TRU5TRSAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQ1RSTF9SRUdfUkVRX1NFTlNFX01zayAgICAgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQ1RSTF9SRUc6IFJFUV9TRU5TRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMV9JRFhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTFfSURYX1JFR19ETUExX0lEWF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfSURYX1JFRzogRE1BMV9JRFggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfSURYX1JFR19ETUExX0lEWF9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfSURYX1JFRzogRE1BMV9JRFggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTJfQV9TVEFSVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTJfQV9TVEFSVExfUkVHX0RNQTJfQV9TVEFSVExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQV9TVEFSVExfUkVHOiBETUEyX0FfU1RBUlRMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQV9TVEFSVExfUkVHX0RNQTJfQV9TVEFSVExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQV9TVEFSVExfUkVHOiBETUEyX0FfU1RBUlRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEyX0FfU1RBUlRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEyX0FfU1RBUlRIX1JFR19ETUEyX0FfU1RBUlRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0FfU1RBUlRIX1JFRzogRE1BMl9BX1NUQVJUSCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0FfU1RBUlRIX1JFR19ETUEyX0FfU1RBUlRIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0FfU1RBUlRIX1JFRzogRE1BMl9BX1NUQVJUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMl9CX1NUQVJUTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMl9CX1NUQVJUTF9SRUdfRE1BMl9CX1NUQVJUTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMl9CX1NUQVJUTF9SRUc6IERNQTJfQl9TVEFSVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMl9CX1NUQVJUTF9SRUdfRE1BMl9CX1NUQVJUTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BMl9CX1NUQVJUTF9SRUc6IERNQTJfQl9TVEFSVEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTJfQl9TVEFSVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTJfQl9TVEFSVEhfUkVHX0RNQTJfQl9TVEFSVEhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQl9TVEFSVEhfUkVHOiBETUEyX0JfU1RBUlRIIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQl9TVEFSVEhfUkVHX0RNQTJfQl9TVEFSVEhfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQl9TVEFSVEhfUkVHOiBETUEyX0JfU1RBUlRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTJfSU5UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEyX0lOVF9SRUdfRE1BMl9JTlRfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0lOVF9SRUc6IERNQTJfSU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0lOVF9SRUdfRE1BMl9JTlRfTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0lOVF9SRUc6IERNQTJfSU5UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTJfTEVOX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEyX0xFTl9SRUdfRE1BMl9MRU5fUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0xFTl9SRUc6IERNQTJfTEVOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0xFTl9SRUdfRE1BMl9MRU5fTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0xFTl9SRUc6IERNQTJfTEVOIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTJfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0RNQV9PTl9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBETUFfT04gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0RNQV9PTl9Nc2sgICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBETUFfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0JXX1BvcyAgICAgICAgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBCVyAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0JXX01zayAgICAgICAgICAgICAgKDB4NlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBCVyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0lSUV9FTkFCTEVfUG9zICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBJUlFfRU5BQkxFIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0lSUV9FTkFCTEVfTXNrICAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBJUlFfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0RSRVFfTU9ERV9Qb3MgICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBEUkVRX01PREUgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0RSRVFfTU9ERV9Nc2sgICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBEUkVRX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0JJTkNfUG9zICAgICAgICAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBCSU5DIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0JJTkNfTXNrICAgICAgICAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBCSU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0FJTkNfUG9zICAgICAgICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBBSU5DIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0FJTkNfTXNrICAgICAgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBBSU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0NJUkNVTEFSX1BvcyAgICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBDSVJDVUxBUiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0NJUkNVTEFSX01zayAgICAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBDSVJDVUxBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0RNQV9QUklPX1BvcyAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBETUFfUFJJTyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0RNQV9QUklPX01zayAgICAgICAgKDB4NzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBETUFfUFJJTyAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0RNQV9JRExFX1BvcyAgICAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBETUFfSURMRSAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0RNQV9JRExFX01zayAgICAgICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBETUFfSURMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0RNQV9JTklUX1BvcyAgICAgICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBETUFfSU5JVCAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX0RNQV9JTklUX01zayAgICAgICAgKDB4MTAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBETUFfSU5JVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX1JFUV9TRU5TRV9Qb3MgICAgICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBSRVFfU0VOU0UgKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0NUUkxfUkVHX1JFUV9TRU5TRV9Nc2sgICAgICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0NUUkxfUkVHOiBSRVFfU0VOU0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTJfSURYX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEyX0lEWF9SRUdfRE1BMl9JRFhfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0lEWF9SRUc6IERNQTJfSURYIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0lEWF9SRUdfRE1BMl9JRFhfTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0lEWF9SRUc6IERNQTJfSURYIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEzX0FfU1RBUlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEzX0FfU1RBUlRMX1JFR19ETUEzX0FfU1RBUlRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0FfU1RBUlRMX1JFRzogRE1BM19BX1NUQVJUTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0FfU1RBUlRMX1JFR19ETUEzX0FfU1RBUlRMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0FfU1RBUlRMX1JFRzogRE1BM19BX1NUQVJUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BM19BX1NUQVJUSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BM19BX1NUQVJUSF9SRUdfRE1BM19BX1NUQVJUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19BX1NUQVJUSF9SRUc6IERNQTNfQV9TVEFSVEggKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19BX1NUQVJUSF9SRUdfRE1BM19BX1NUQVJUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19BX1NUQVJUSF9SRUc6IERNQTNfQV9TVEFSVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTNfQl9TVEFSVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTNfQl9TVEFSVExfUkVHX0RNQTNfQl9TVEFSVExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTNfQl9TVEFSVExfUkVHOiBETUEzX0JfU1RBUlRMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTNfQl9TVEFSVExfUkVHX0RNQTNfQl9TVEFSVExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTNfQl9TVEFSVExfUkVHOiBETUEzX0JfU1RBUlRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEzX0JfU1RBUlRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEzX0JfU1RBUlRIX1JFR19ETUEzX0JfU1RBUlRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0JfU1RBUlRIX1JFRzogRE1BM19CX1NUQVJUSCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0JfU1RBUlRIX1JFR19ETUEzX0JfU1RBUlRIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0JfU1RBUlRIX1JFRzogRE1BM19CX1NUQVJUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEzX0lOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BM19JTlRfUkVHX0RNQTNfSU5UX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19JTlRfUkVHOiBETUEzX0lOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19JTlRfUkVHX0RNQTNfSU5UX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19JTlRfUkVHOiBETUEzX0lOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEzX0xFTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BM19MRU5fUkVHX0RNQTNfTEVOX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19MRU5fUkVHOiBETUEzX0xFTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19MRU5fUkVHX0RNQTNfTEVOX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19MRU5fUkVHOiBETUEzX0xFTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEzX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19ETUFfT05fUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogRE1BX09OIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19ETUFfT05fTXNrICAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogRE1BX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19CV19Qb3MgICAgICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogQlcgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19CV19Nc2sgICAgICAgICAgICAgICgweDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogQlcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19JUlFfRU5BQkxFX1BvcyAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19JUlFfRU5BQkxFX01zayAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19EUkVRX01PREVfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogRFJFUV9NT0RFIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19EUkVRX01PREVfTXNrICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogRFJFUV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19CSU5DX1BvcyAgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogQklOQyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19CSU5DX01zayAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogQklOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19BSU5DX1BvcyAgICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogQUlOQyAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19BSU5DX01zayAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogQUlOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19DSVJDVUxBUl9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19DSVJDVUxBUl9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19ETUFfUFJJT19Qb3MgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogRE1BX1BSSU8gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19ETUFfUFJJT19Nc2sgICAgICAgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogRE1BX1BSSU8gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19ETUFfSURMRV9Qb3MgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogRE1BX0lETEUgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19ETUFfSURMRV9Nc2sgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogRE1BX0lETEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19ETUFfSU5JVF9Qb3MgICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogRE1BX0lOSVQgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19ETUFfSU5JVF9Nc2sgICAgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogRE1BX0lOSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19SRVFfU0VOU0VfUG9zICAgICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogUkVRX1NFTlNFIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19DVFJMX1JFR19SRVFfU0VOU0VfTXNrICAgICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19DVFJMX1JFRzogUkVRX1NFTlNFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEzX0lEWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BM19JRFhfUkVHX0RNQTNfSURYX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19JRFhfUkVHOiBETUEzX0lEWCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19JRFhfUkVHX0RNQTNfSURYX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19JRFhfUkVHOiBETUEzX0lEWCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNF9BX1NUQVJUTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNF9BX1NUQVJUTF9SRUdfRE1BNF9BX1NUQVJUTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9BX1NUQVJUTF9SRUc6IERNQTRfQV9TVEFSVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9BX1NUQVJUTF9SRUdfRE1BNF9BX1NUQVJUTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9BX1NUQVJUTF9SRUc6IERNQTRfQV9TVEFSVEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTRfQV9TVEFSVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTRfQV9TVEFSVEhfUkVHX0RNQTRfQV9TVEFSVEhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQV9TVEFSVEhfUkVHOiBETUE0X0FfU1RBUlRIIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQV9TVEFSVEhfUkVHX0RNQTRfQV9TVEFSVEhfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQV9TVEFSVEhfUkVHOiBETUE0X0FfU1RBUlRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE0X0JfU1RBUlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE0X0JfU1RBUlRMX1JFR19ETUE0X0JfU1RBUlRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE0X0JfU1RBUlRMX1JFRzogRE1BNF9CX1NUQVJUTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE0X0JfU1RBUlRMX1JFR19ETUE0X0JfU1RBUlRMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUE0X0JfU1RBUlRMX1JFRzogRE1BNF9CX1NUQVJUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNF9CX1NUQVJUSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNF9CX1NUQVJUSF9SRUdfRE1BNF9CX1NUQVJUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9CX1NUQVJUSF9SRUc6IERNQTRfQl9TVEFSVEggKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9CX1NUQVJUSF9SRUdfRE1BNF9CX1NUQVJUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9CX1NUQVJUSF9SRUc6IERNQTRfQl9TVEFSVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNF9JTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTRfSU5UX1JFR19ETUE0X0lOVF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfSU5UX1JFRzogRE1BNF9JTlQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfSU5UX1JFR19ETUE0X0lOVF9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfSU5UX1JFRzogRE1BNF9JTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNF9MRU5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTRfTEVOX1JFR19ETUE0X0xFTl9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfTEVOX1JFRzogRE1BNF9MRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfTEVOX1JFR19ETUE0X0xFTl9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfTEVOX1JFRzogRE1BNF9MRU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNF9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfRE1BX09OX1BvcyAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IERNQV9PTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfRE1BX09OX01zayAgICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IERNQV9PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfQldfUG9zICAgICAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IEJXIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfQldfTXNrICAgICAgICAgICAgICAoMHg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IEJXIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfSVJRX0VOQUJMRV9Qb3MgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IElSUV9FTkFCTEUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfSVJRX0VOQUJMRV9Nc2sgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IElSUV9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfRFJFUV9NT0RFX1BvcyAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IERSRVFfTU9ERSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfRFJFUV9NT0RFX01zayAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IERSRVFfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfQklOQ19Qb3MgICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IEJJTkMgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfQklOQ19Nc2sgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IEJJTkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfQUlOQ19Qb3MgICAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IEFJTkMgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfQUlOQ19Nc2sgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IEFJTkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfQ0lSQ1VMQVJfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IENJUkNVTEFSIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfQ0lSQ1VMQVJfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IENJUkNVTEFSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfRE1BX1BSSU9fUG9zICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IERNQV9QUklPIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfRE1BX1BSSU9fTXNrICAgICAgICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IERNQV9QUklPIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfRE1BX0lETEVfUG9zICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IERNQV9JRExFIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfRE1BX0lETEVfTXNrICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IERNQV9JRExFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfRE1BX0lOSVRfUG9zICAgICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IERNQV9JTklUIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfRE1BX0lOSVRfTXNrICAgICAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IERNQV9JTklUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfUkVRX1NFTlNFX1BvcyAgICAgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IFJFUV9TRU5TRSAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQ1RSTF9SRUdfUkVRX1NFTlNFX01zayAgICAgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQ1RSTF9SRUc6IFJFUV9TRU5TRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNF9JRFhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTRfSURYX1JFR19ETUE0X0lEWF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfSURYX1JFRzogRE1BNF9JRFggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfSURYX1JFR19ETUE0X0lEWF9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfSURYX1JFRzogRE1BNF9JRFggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTVfQV9TVEFSVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTVfQV9TVEFSVExfUkVHX0RNQTVfQV9TVEFSVExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQV9TVEFSVExfUkVHOiBETUE1X0FfU1RBUlRMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQV9TVEFSVExfUkVHX0RNQTVfQV9TVEFSVExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQV9TVEFSVExfUkVHOiBETUE1X0FfU1RBUlRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE1X0FfU1RBUlRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE1X0FfU1RBUlRIX1JFR19ETUE1X0FfU1RBUlRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0FfU1RBUlRIX1JFRzogRE1BNV9BX1NUQVJUSCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0FfU1RBUlRIX1JFR19ETUE1X0FfU1RBUlRIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0FfU1RBUlRIX1JFRzogRE1BNV9BX1NUQVJUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNV9CX1NUQVJUTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNV9CX1NUQVJUTF9SRUdfRE1BNV9CX1NUQVJUTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNV9CX1NUQVJUTF9SRUc6IERNQTVfQl9TVEFSVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNV9CX1NUQVJUTF9SRUdfRE1BNV9CX1NUQVJUTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BNV9CX1NUQVJUTF9SRUc6IERNQTVfQl9TVEFSVEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTVfQl9TVEFSVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTVfQl9TVEFSVEhfUkVHX0RNQTVfQl9TVEFSVEhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQl9TVEFSVEhfUkVHOiBETUE1X0JfU1RBUlRIIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQl9TVEFSVEhfUkVHX0RNQTVfQl9TVEFSVEhfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQl9TVEFSVEhfUkVHOiBETUE1X0JfU1RBUlRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTVfSU5UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE1X0lOVF9SRUdfRE1BNV9JTlRfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0lOVF9SRUc6IERNQTVfSU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0lOVF9SRUdfRE1BNV9JTlRfTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0lOVF9SRUc6IERNQTVfSU5UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTVfTEVOX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE1X0xFTl9SRUdfRE1BNV9MRU5fUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0xFTl9SRUc6IERNQTVfTEVOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0xFTl9SRUdfRE1BNV9MRU5fTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0xFTl9SRUc6IERNQTVfTEVOIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTVfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0RNQV9PTl9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBETUFfT04gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0RNQV9PTl9Nc2sgICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBETUFfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0JXX1BvcyAgICAgICAgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBCVyAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0JXX01zayAgICAgICAgICAgICAgKDB4NlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBCVyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0lSUV9FTkFCTEVfUG9zICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBJUlFfRU5BQkxFIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0lSUV9FTkFCTEVfTXNrICAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBJUlFfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0RSRVFfTU9ERV9Qb3MgICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBEUkVRX01PREUgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0RSRVFfTU9ERV9Nc2sgICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBEUkVRX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0JJTkNfUG9zICAgICAgICAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBCSU5DIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0JJTkNfTXNrICAgICAgICAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBCSU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0FJTkNfUG9zICAgICAgICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBBSU5DIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0FJTkNfTXNrICAgICAgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBBSU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0NJUkNVTEFSX1BvcyAgICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBDSVJDVUxBUiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0NJUkNVTEFSX01zayAgICAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBDSVJDVUxBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0RNQV9QUklPX1BvcyAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBETUFfUFJJTyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0RNQV9QUklPX01zayAgICAgICAgKDB4NzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBETUFfUFJJTyAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0RNQV9JRExFX1BvcyAgICAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBETUFfSURMRSAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0RNQV9JRExFX01zayAgICAgICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBETUFfSURMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0RNQV9JTklUX1BvcyAgICAgICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBETUFfSU5JVCAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX0RNQV9JTklUX01zayAgICAgICAgKDB4MTAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBETUFfSU5JVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX1JFUV9TRU5TRV9Qb3MgICAgICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBSRVFfU0VOU0UgKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0NUUkxfUkVHX1JFUV9TRU5TRV9Nc2sgICAgICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0NUUkxfUkVHOiBSRVFfU0VOU0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTVfSURYX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE1X0lEWF9SRUdfRE1BNV9JRFhfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0lEWF9SRUc6IERNQTVfSURYIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0lEWF9SRUdfRE1BNV9JRFhfTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0lEWF9SRUc6IERNQTVfSURYIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE2X0FfU1RBUlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE2X0FfU1RBUlRMX1JFR19ETUE2X0FfU1RBUlRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0FfU1RBUlRMX1JFRzogRE1BNl9BX1NUQVJUTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0FfU1RBUlRMX1JFR19ETUE2X0FfU1RBUlRMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0FfU1RBUlRMX1JFRzogRE1BNl9BX1NUQVJUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNl9BX1NUQVJUSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNl9BX1NUQVJUSF9SRUdfRE1BNl9BX1NUQVJUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9BX1NUQVJUSF9SRUc6IERNQTZfQV9TVEFSVEggKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9BX1NUQVJUSF9SRUdfRE1BNl9BX1NUQVJUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9BX1NUQVJUSF9SRUc6IERNQTZfQV9TVEFSVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTZfQl9TVEFSVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTZfQl9TVEFSVExfUkVHX0RNQTZfQl9TVEFSVExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTZfQl9TVEFSVExfUkVHOiBETUE2X0JfU1RBUlRMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTZfQl9TVEFSVExfUkVHX0RNQTZfQl9TVEFSVExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTZfQl9TVEFSVExfUkVHOiBETUE2X0JfU1RBUlRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE2X0JfU1RBUlRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE2X0JfU1RBUlRIX1JFR19ETUE2X0JfU1RBUlRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0JfU1RBUlRIX1JFRzogRE1BNl9CX1NUQVJUSCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0JfU1RBUlRIX1JFR19ETUE2X0JfU1RBUlRIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0JfU1RBUlRIX1JFRzogRE1BNl9CX1NUQVJUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE2X0lOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNl9JTlRfUkVHX0RNQTZfSU5UX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9JTlRfUkVHOiBETUE2X0lOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9JTlRfUkVHX0RNQTZfSU5UX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9JTlRfUkVHOiBETUE2X0lOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE2X0xFTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNl9MRU5fUkVHX0RNQTZfTEVOX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9MRU5fUkVHOiBETUE2X0xFTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9MRU5fUkVHX0RNQTZfTEVOX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9MRU5fUkVHOiBETUE2X0xFTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE2X0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19ETUFfT05fUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogRE1BX09OIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19ETUFfT05fTXNrICAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogRE1BX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19CV19Qb3MgICAgICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogQlcgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19CV19Nc2sgICAgICAgICAgICAgICgweDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogQlcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19JUlFfRU5BQkxFX1BvcyAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19JUlFfRU5BQkxFX01zayAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19EUkVRX01PREVfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogRFJFUV9NT0RFIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19EUkVRX01PREVfTXNrICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogRFJFUV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19CSU5DX1BvcyAgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogQklOQyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19CSU5DX01zayAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogQklOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19BSU5DX1BvcyAgICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogQUlOQyAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19BSU5DX01zayAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogQUlOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19DSVJDVUxBUl9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19DSVJDVUxBUl9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19ETUFfUFJJT19Qb3MgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogRE1BX1BSSU8gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19ETUFfUFJJT19Nc2sgICAgICAgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogRE1BX1BSSU8gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19ETUFfSURMRV9Qb3MgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogRE1BX0lETEUgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19ETUFfSURMRV9Nc2sgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogRE1BX0lETEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19ETUFfSU5JVF9Qb3MgICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogRE1BX0lOSVQgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19ETUFfSU5JVF9Nc2sgICAgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogRE1BX0lOSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19SRVFfU0VOU0VfUG9zICAgICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogUkVRX1NFTlNFIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9DVFJMX1JFR19SRVFfU0VOU0VfTXNrICAgICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9DVFJMX1JFRzogUkVRX1NFTlNFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE2X0lEWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNl9JRFhfUkVHX0RNQTZfSURYX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9JRFhfUkVHOiBETUE2X0lEWCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9JRFhfUkVHX0RNQTZfSURYX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9JRFhfUkVHOiBETUE2X0lEWCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BN19BX1NUQVJUTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BN19BX1NUQVJUTF9SRUdfRE1BN19BX1NUQVJUTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19BX1NUQVJUTF9SRUc6IERNQTdfQV9TVEFSVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19BX1NUQVJUTF9SRUdfRE1BN19BX1NUQVJUTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19BX1NUQVJUTF9SRUc6IERNQTdfQV9TVEFSVEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTdfQV9TVEFSVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTdfQV9TVEFSVEhfUkVHX0RNQTdfQV9TVEFSVEhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQV9TVEFSVEhfUkVHOiBETUE3X0FfU1RBUlRIIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQV9TVEFSVEhfUkVHX0RNQTdfQV9TVEFSVEhfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQV9TVEFSVEhfUkVHOiBETUE3X0FfU1RBUlRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE3X0JfU1RBUlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE3X0JfU1RBUlRMX1JFR19ETUE3X0JfU1RBUlRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE3X0JfU1RBUlRMX1JFRzogRE1BN19CX1NUQVJUTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE3X0JfU1RBUlRMX1JFR19ETUE3X0JfU1RBUlRMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUE3X0JfU1RBUlRMX1JFRzogRE1BN19CX1NUQVJUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BN19CX1NUQVJUSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BN19CX1NUQVJUSF9SRUdfRE1BN19CX1NUQVJUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19CX1NUQVJUSF9SRUc6IERNQTdfQl9TVEFSVEggKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19CX1NUQVJUSF9SRUdfRE1BN19CX1NUQVJUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19CX1NUQVJUSF9SRUc6IERNQTdfQl9TVEFSVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BN19JTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTdfSU5UX1JFR19ETUE3X0lOVF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfSU5UX1JFRzogRE1BN19JTlQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfSU5UX1JFR19ETUE3X0lOVF9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfSU5UX1JFRzogRE1BN19JTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BN19MRU5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTdfTEVOX1JFR19ETUE3X0xFTl9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfTEVOX1JFRzogRE1BN19MRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfTEVOX1JFR19ETUE3X0xFTl9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfTEVOX1JFRzogRE1BN19MRU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BN19DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfRE1BX09OX1BvcyAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IERNQV9PTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfRE1BX09OX01zayAgICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IERNQV9PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfQldfUG9zICAgICAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IEJXIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfQldfTXNrICAgICAgICAgICAgICAoMHg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IEJXIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfSVJRX0VOQUJMRV9Qb3MgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IElSUV9FTkFCTEUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfSVJRX0VOQUJMRV9Nc2sgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IElSUV9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfRFJFUV9NT0RFX1BvcyAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IERSRVFfTU9ERSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfRFJFUV9NT0RFX01zayAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IERSRVFfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfQklOQ19Qb3MgICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IEJJTkMgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfQklOQ19Nc2sgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IEJJTkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfQUlOQ19Qb3MgICAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IEFJTkMgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfQUlOQ19Nc2sgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IEFJTkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfQ0lSQ1VMQVJfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IENJUkNVTEFSIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfQ0lSQ1VMQVJfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IENJUkNVTEFSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfRE1BX1BSSU9fUG9zICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IERNQV9QUklPIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfRE1BX1BSSU9fTXNrICAgICAgICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IERNQV9QUklPIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfRE1BX0lETEVfUG9zICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IERNQV9JRExFIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfRE1BX0lETEVfTXNrICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IERNQV9JRExFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfRE1BX0lOSVRfUG9zICAgICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IERNQV9JTklUIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfRE1BX0lOSVRfTXNrICAgICAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IERNQV9JTklUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfUkVRX1NFTlNFX1BvcyAgICAgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IFJFUV9TRU5TRSAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQ1RSTF9SRUdfUkVRX1NFTlNFX01zayAgICAgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQ1RSTF9SRUc6IFJFUV9TRU5TRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BN19JRFhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTdfSURYX1JFR19ETUE3X0lEWF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfSURYX1JFRzogRE1BN19JRFggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfSURYX1JFR19ETUE3X0lEWF9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfSURYX1JFRzogRE1BN19JRFggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUFfUkVRX01VWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQV9SRVFfTVVYX1JFR19ETUEwMV9TRUxfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9SRVFfTVVYX1JFRzogRE1BMDFfU0VMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9SRVFfTVVYX1JFR19ETUEwMV9TRUxfTXNrICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9SRVFfTVVYX1JFRzogRE1BMDFfU0VMIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9SRVFfTVVYX1JFR19ETUEyM19TRUxfUG9zICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9SRVFfTVVYX1JFRzogRE1BMjNfU0VMIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9SRVFfTVVYX1JFR19ETUEyM19TRUxfTXNrICAgICAoMHhmMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9SRVFfTVVYX1JFRzogRE1BMjNfU0VMIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9SRVFfTVVYX1JFR19ETUE0NV9TRUxfUG9zICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9SRVFfTVVYX1JFRzogRE1BNDVfU0VMIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9SRVFfTVVYX1JFR19ETUE0NV9TRUxfTXNrICAgICAoMHhmMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9SRVFfTVVYX1JFRzogRE1BNDVfU0VMIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9SRVFfTVVYX1JFR19ETUE2N19TRUxfUG9zICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9SRVFfTVVYX1JFRzogRE1BNjdfU0VMIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9SRVFfTVVYX1JFR19ETUE2N19TRUxfTXNrICAgICAoMHhmMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9SRVFfTVVYX1JFRzogRE1BNjdfU0VMIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BX0lOVF9TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NIMF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDAgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NIMF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NIMV9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDEgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NIMV9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NIMl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDIgKEJpdCAyKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NIMl9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NIM19Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDMgKEJpdCAzKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NIM19Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NINF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDQgKEJpdCA0KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NINF9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NINV9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDUgKEJpdCA1KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NINV9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NINl9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDYgKEJpdCA2KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NINl9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NIN19Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDcgKEJpdCA3KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9JTlRfU1RBVFVTX1JFR19ETUFfSVJRX0NIN19Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9JTlRfU1RBVFVTX1JFRzogRE1BX0lSUV9DSDcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQV9DTEVBUl9JTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NIMF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDAgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NIMF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERNQV9ETUFfQ0xFQVJfSU5UX1JFR19ETUFfUlNUX0lSUV9DSDFfUG9zICgxVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUFfQ0xFQVJfSU5UX1JFRzogRE1BX1JTVF9JUlFfQ0gxIChCaXQgMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUFfQ0xFQVJfSU5UX1JFR19ETUFfUlNUX0lSUV9DSDFfTXNrICgweDJVTCkgICAgICAgICAgICAgICAvKiE8IERNQSBETUFfQ0xFQVJfSU5UX1JFRzogRE1BX1JTVF9JUlFfQ0gxIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBETUFfRE1BX0NMRUFSX0lOVF9SRUdfRE1BX1JTVF9JUlFfQ0gyX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0NMRUFSX0lOVF9SRUc6IERNQV9SU1RfSVJRX0NIMiAoQml0IDIpICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0NMRUFSX0lOVF9SRUdfRE1BX1JTVF9JUlFfQ0gyX01zayAoMHg0VUwpICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0NMRUFSX0lOVF9SRUc6IERNQV9SU1RfSVJRX0NIMiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NIM19Qb3MgKDNVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDMgKEJpdCAzKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NIM19Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERNQV9ETUFfQ0xFQVJfSU5UX1JFR19ETUFfUlNUX0lSUV9DSDRfUG9zICg0VUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUFfQ0xFQVJfSU5UX1JFRzogRE1BX1JTVF9JUlFfQ0g0IChCaXQgNCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUFfQ0xFQVJfSU5UX1JFR19ETUFfUlNUX0lSUV9DSDRfTXNrICgweDEwVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUFfQ0xFQVJfSU5UX1JFRzogRE1BX1JTVF9JUlFfQ0g0IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBETUFfRE1BX0NMRUFSX0lOVF9SRUdfRE1BX1JTVF9JUlFfQ0g1X1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0NMRUFSX0lOVF9SRUc6IERNQV9SU1RfSVJRX0NINSAoQml0IDUpICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0NMRUFSX0lOVF9SRUdfRE1BX1JTVF9JUlFfQ0g1X01zayAoMHgyMFVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0NMRUFSX0lOVF9SRUc6IERNQV9SU1RfSVJRX0NINSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NINl9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDYgKEJpdCA2KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NINl9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERNQV9ETUFfQ0xFQVJfSU5UX1JFR19ETUFfUlNUX0lSUV9DSDdfUG9zICg3VUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUFfQ0xFQVJfSU5UX1JFRzogRE1BX1JTVF9JUlFfQ0g3IChCaXQgNykgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUFfQ0xFQVJfSU5UX1JFR19ETUFfUlNUX0lSUV9DSDdfTXNrICgweDgwVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUFfQ0xFQVJfSU5UX1JFRzogRE1BX1JTVF9JUlFfQ0g3IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnRUNDJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRUNDX0VDQ19DT05GSUdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBFQ0NfRUNDX0NPTkZJR19SRUdfRUNDX09wUHRyQV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTkZJR19SRUc6IEVDQ19PcFB0ckEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTkZJR19SRUdfRUNDX09wUHRyQV9Nc2sgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTkZJR19SRUc6IEVDQ19PcFB0ckEgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTkZJR19SRUdfRUNDX09wUHRyQl9Qb3MgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTkZJR19SRUc6IEVDQ19PcFB0ckIgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTkZJR19SRUdfRUNDX09wUHRyQl9Nc2sgICAgICgweDFmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTkZJR19SRUc6IEVDQ19PcFB0ckIgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTkZJR19SRUdfRUNDX09wUHRyQ19Qb3MgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTkZJR19SRUc6IEVDQ19PcFB0ckMgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTkZJR19SRUdfRUNDX09wUHRyQ19Nc2sgICAgICgweDFmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTkZJR19SRUc6IEVDQ19PcFB0ckMgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRUNDX0VDQ19DT01NQU5EX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19UeXBlT3BlcmF0aW9uX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfVHlwZU9wZXJhdGlvbiAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19UeXBlT3BlcmF0aW9uX01zayAoMHg3ZlVMKSAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfVHlwZU9wZXJhdGlvbiAoQml0ZmllbGQtTWFzazogMHg3ZikgKi8KKyNkZWZpbmUgRUNDX0VDQ19DT01NQU5EX1JFR19FQ0NfRmllbGRfUG9zICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19DT01NQU5EX1JFRzogRUNDX0ZpZWxkIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19DT01NQU5EX1JFR19FQ0NfRmllbGRfTXNrICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19DT01NQU5EX1JFRzogRUNDX0ZpZWxkIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19DT01NQU5EX1JFR19FQ0NfU2l6ZU9mT3BlcmFuZHNfUG9zICg4VUwpICAgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19DT01NQU5EX1JFRzogRUNDX1NpemVPZk9wZXJhbmRzIChCaXQgOCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19DT01NQU5EX1JFR19FQ0NfU2l6ZU9mT3BlcmFuZHNfTXNrICgweGZmMDBVTCkgICAgICAgICAgIC8qITwgRUNDIEVDQ19DT01NQU5EX1JFRzogRUNDX1NpemVPZk9wZXJhbmRzIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19TaWduQV9Qb3MgICAgICgyOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfU2lnbkEgKEJpdCAyOSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19TaWduQV9Nc2sgICAgICgweDIwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfU2lnbkEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19TaWduQl9Qb3MgICAgICgzMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfU2lnbkIgKEJpdCAzMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19TaWduQl9Nc2sgICAgICgweDQwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfU2lnbkIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19DYWxjUjJfUG9zICAgICgzMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfQ2FsY1IyIChCaXQgMzEpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19DYWxjUjJfTXNrICAgICgweDgwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfQ2FsY1IyIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRUNDX0VDQ19DT05UUk9MX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBFQ0NfRUNDX0NPTlRST0xfUkVHX0VDQ19TdGFydF9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTlRST0xfUkVHOiBFQ0NfU3RhcnQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTlRST0xfUkVHX0VDQ19TdGFydF9Nc2sgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTlRST0xfUkVHOiBFQ0NfU3RhcnQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRUNDX0VDQ19TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBFQ0NfRUNDX1NUQVRVU19SRUdfRUNDX0ZhaWxfQWRkcmVzc19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX1NUQVRVU19SRUc6IEVDQ19GYWlsX0FkZHJlc3MgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX1NUQVRVU19SRUdfRUNDX0ZhaWxfQWRkcmVzc19Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX1NUQVRVU19SRUc6IEVDQ19GYWlsX0FkZHJlc3MgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAqLworI2RlZmluZSBFQ0NfRUNDX1NUQVRVU19SRUdfRUNDX1BvaW50X1B4X05vdE9uQ3VydmVfUG9zICg0VUwpICAgICAgICAgICAgLyohPCBFQ0MgRUNDX1NUQVRVU19SRUc6IEVDQ19Qb2ludF9QeF9Ob3RPbkN1cnZlIChCaXQgNCkgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX1NUQVRVU19SRUdfRUNDX1BvaW50X1B4X05vdE9uQ3VydmVfTXNrICgweDEwVUwpICAgICAgICAgLyohPCBFQ0MgRUNDX1NUQVRVU19SRUc6IEVDQ19Qb2ludF9QeF9Ob3RPbkN1cnZlIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBFQ0NfRUNDX1NUQVRVU19SRUdfRUNDX1BvaW50X1B4X0F0SW5maW5pdHlfUG9zICg1VUwpICAgICAgICAgICAgLyohPCBFQ0MgRUNDX1NUQVRVU19SRUc6IEVDQ19Qb2ludF9QeF9BdEluZmluaXR5IChCaXQgNSkgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX1NUQVRVU19SRUdfRUNDX1BvaW50X1B4X0F0SW5maW5pdHlfTXNrICgweDIwVUwpICAgICAgICAgLyohPCBFQ0MgRUNDX1NUQVRVU19SRUc6IEVDQ19Qb2ludF9QeF9BdEluZmluaXR5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBFQ0NfRUNDX1NUQVRVU19SRUdfRUNDX0NvdXBsZV9Ob3RWYWxpZF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX1NUQVRVU19SRUc6IEVDQ19Db3VwbGVfTm90VmFsaWQgKEJpdCA2KSAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX1NUQVRVU19SRUdfRUNDX0NvdXBsZV9Ob3RWYWxpZF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX1NUQVRVU19SRUc6IEVDQ19Db3VwbGVfTm90VmFsaWQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfUGFyYW1fbl9Ob3RWYWxpZF9Qb3MgKDdVTCkgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX1BhcmFtX25fTm90VmFsaWQgKEJpdCA3KSAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfUGFyYW1fbl9Ob3RWYWxpZF9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX1BhcmFtX25fTm90VmFsaWQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfU2lnbmF0dXJlX05vdFZhbGlkX1BvcyAoOVVMKSAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX1NpZ25hdHVyZV9Ob3RWYWxpZCAoQml0IDkpICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfU2lnbmF0dXJlX05vdFZhbGlkX01zayAoMHgyMDBVTCkgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX1NpZ25hdHVyZV9Ob3RWYWxpZCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19QYXJhbV9BQl9Ob3RWYWxpZF9Qb3MgKDEwVUwpICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfUGFyYW1fQUJfTm90VmFsaWQgKEJpdCAxMCkgICAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19QYXJhbV9BQl9Ob3RWYWxpZF9Nc2sgKDB4NDAwVUwpICAgICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfUGFyYW1fQUJfTm90VmFsaWQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfTm90SW52ZXJ0aWJsZV9Qb3MgKDExVUwpICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX05vdEludmVydGlibGUgKEJpdCAxMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfTm90SW52ZXJ0aWJsZV9Nc2sgKDB4ODAwVUwpICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX05vdEludmVydGlibGUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfUHJpbWFsaXR5VGVzdFJlc3VsdF9Qb3MgKDEyVUwpICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX1ByaW1hbGl0eVRlc3RSZXN1bHQgKEJpdCAxMikgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfUHJpbWFsaXR5VGVzdFJlc3VsdF9Nc2sgKDB4MTAwMFVMKSAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX1ByaW1hbGl0eVRlc3RSZXN1bHQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfQnVzeV9Qb3MgICAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX0J1c3kgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfQnVzeV9Nc2sgICAgICAgKDB4MTAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX0J1c3kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFQ0NfRUNDX1ZFUlNJT05fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEVDQ19FQ0NfVkVSU0lPTl9SRUdfRUNDX1NWTl9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfVkVSU0lPTl9SRUc6IEVDQ19TVk4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfVkVSU0lPTl9SRUdfRUNDX1NWTl9Nc2sgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfVkVSU0lPTl9SRUc6IEVDQ19TVk4gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfVkVSU0lPTl9SRUdfRUNDX0hWTl9Qb3MgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfVkVSU0lPTl9SRUc6IEVDQ19IVk4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfVkVSU0lPTl9SRUdfRUNDX0hWTl9Nc2sgICAgICAgKDB4ZmYwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfVkVSU0lPTl9SRUc6IEVDQ19IVk4gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdGVERGJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRklGT18wXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GSUZPXzBfMF9SRUdfVFhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GSUZPXzBfMF9SRUc6IFRYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GSUZPXzBfMF9SRUdfVFhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GSUZPXzBfMF9SRUc6IFRYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRklGT18xXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GSUZPXzFfMF9SRUdfVFhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GSUZPXzFfMF9SRUc6IFRYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GSUZPXzFfMF9SRUdfVFhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GSUZPXzFfMF9SRUc6IFRYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRklGT18yXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GSUZPXzJfMF9SRUdfVFhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GSUZPXzJfMF9SRUc6IFRYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GSUZPXzJfMF9SRUdfVFhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GSUZPXzJfMF9SRUc6IFRYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRklGT18zXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GSUZPXzNfMF9SRUdfVFhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GSUZPXzNfMF9SRUc6IFRYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GSUZPXzNfMF9SRUdfVFhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GSUZPXzNfMF9SRUc6IFRYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19GUkFNRV9MRU5HVEhfUG9zICgwVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzogRlJBTUVfTEVOR1RIIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19GUkFNRV9MRU5HVEhfTXNrICgweDdmVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzogRlJBTUVfTEVOR1RIIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfUEhZQVRUUl9ERU1fUFRJX1BvcyAoN1VMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IFBIWUFUVFJfREVNX1BUSSAoQml0IDcpICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfUEhZQVRUUl9ERU1fUFRJX01zayAoMHg3ODBVTCkgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IFBIWUFUVFJfREVNX1BUSSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX1BIWUFUVFJfQ05fUG9zICgxMVVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBQSFlBVFRSX0NOIChCaXQgMTEpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX1BIWUFUVFJfQ05fTXNrICgweDc4MDBVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBQSFlBVFRSX0NOIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfUEhZQVRUUl9DQUxDQVBfUG9zICgxNVVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IFBIWUFUVFJfQ0FMQ0FQIChCaXQgMTUpICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfUEhZQVRUUl9DQUxDQVBfTXNrICgweDc4MDAwVUwpICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IFBIWUFUVFJfQ0FMQ0FQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfUEhZQVRUUl9SRl9HUElPX1BJTlNfUG9zICgxOVVMKSAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IFBIWUFUVFJfUkZfR1BJT19QSU5TIChCaXQgMTkpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19QSFlBVFRSX1JGX0dQSU9fUElOU19Nc2sgKDB4MzgwMDAwVUwpIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBQSFlBVFRSX1JGX0dQSU9fUElOUyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX1BIWUFUVFJfSFNJX1BvcyAoMjJVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBQSFlBVFRSX0hTSSAoQml0IDIyKSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX1BIWUFUVFJfSFNJX01zayAoMHg0MDAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBQSFlBVFRSX0hTSSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX0ZSQU1FVFlQRV9Qb3MgKDIzVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBGUkFNRVRZUEUgKEJpdCAyMykgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX0ZSQU1FVFlQRV9Nc2sgKDB4MzgwMDAwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBGUkFNRVRZUEUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19DU01BQ0FfRU5BX1BvcyAoMjZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzogQ1NNQUNBX0VOQSAoQml0IDI2KSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19DU01BQ0FfRU5BX01zayAoMHg0MDAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzogQ1NNQUNBX0VOQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX0FDS1JFUVVFU1RfUG9zICgyOFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBBQ0tSRVFVRVNUIChCaXQgMjgpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX0FDS1JFUVVFU1RfTXNrICgweDEwMDAwMDAwVUwpICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBBQ0tSRVFVRVNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfQ1JDMTZfRU5BX1BvcyAoMzBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IENSQzE2X0VOQSAoQml0IDMwKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfQ1JDMTZfRU5BX01zayAoMHg0MDAwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IENSQzE2X0VOQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMV8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8xXzBfUkVHX01BQ1NOX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8xXzBfUkVHOiBNQUNTTiAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8xXzBfUkVHX01BQ1NOX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8xXzBfUkVHOiBNQUNTTiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX0ZSQU1FX0xFTkdUSF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOiBGUkFNRV9MRU5HVEggKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX0ZSQU1FX0xFTkdUSF9Nc2sgKDB4N2ZVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOiBGUkFNRV9MRU5HVEggKEJpdGZpZWxkLU1hc2s6IDB4N2YpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19QSFlBVFRSX0RFTV9QVElfUG9zICg3VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogUEhZQVRUUl9ERU1fUFRJIChCaXQgNykgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19QSFlBVFRSX0RFTV9QVElfTXNrICgweDc4MFVMKSAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogUEhZQVRUUl9ERU1fUFRJIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfUEhZQVRUUl9DTl9Qb3MgKDExVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IFBIWUFUVFJfQ04gKEJpdCAxMSkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfUEhZQVRUUl9DTl9Nc2sgKDB4NzgwMFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IFBIWUFUVFJfQ04gKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19QSFlBVFRSX0NBTENBUF9Qb3MgKDE1VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogUEhZQVRUUl9DQUxDQVAgKEJpdCAxNSkgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19QSFlBVFRSX0NBTENBUF9Nc2sgKDB4NzgwMDBVTCkgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogUEhZQVRUUl9DQUxDQVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19QSFlBVFRSX1JGX0dQSU9fUElOU19Qb3MgKDE5VUwpICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogUEhZQVRUUl9SRl9HUElPX1BJTlMgKEJpdCAxOSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX1BIWUFUVFJfUkZfR1BJT19QSU5TX01zayAoMHgzODAwMDBVTCkgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IFBIWUFUVFJfUkZfR1BJT19QSU5TIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfUEhZQVRUUl9IU0lfUG9zICgyMlVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IFBIWUFUVFJfSFNJIChCaXQgMjIpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfUEhZQVRUUl9IU0lfTXNrICgweDQwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IFBIWUFUVFJfSFNJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfRlJBTUVUWVBFX1BvcyAoMjNVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IEZSQU1FVFlQRSAoQml0IDIzKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfRlJBTUVUWVBFX01zayAoMHgzODAwMDAwVUwpICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IEZSQU1FVFlQRSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX0NTTUFDQV9FTkFfUG9zICgyNlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOiBDU01BQ0FfRU5BIChCaXQgMjYpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX0NTTUFDQV9FTkFfTXNrICgweDQwMDAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOiBDU01BQ0FfRU5BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfQUNLUkVRVUVTVF9Qb3MgKDI4VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IEFDS1JFUVVFU1QgKEJpdCAyOCkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfQUNLUkVRVUVTVF9Nc2sgKDB4MTAwMDAwMDBVTCkgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IEFDS1JFUVVFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19DUkMxNl9FTkFfUG9zICgzMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogQ1JDMTZfRU5BIChCaXQgMzApICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19DUkMxNl9FTkFfTXNrICgweDQwMDAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogQ1JDMTZfRU5BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX01FVEFfREFUQV8xXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzFfMV9SRUdfTUFDU05fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzFfMV9SRUc6IE1BQ1NOIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzFfMV9SRUdfTUFDU05fTXNrICgweGZmVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzFfMV9SRUc6IE1BQ1NOIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfRlJBTUVfTEVOR1RIX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUc6IEZSQU1FX0xFTkdUSCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfRlJBTUVfTEVOR1RIX01zayAoMHg3ZlVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUc6IEZSQU1FX0xFTkdUSCAoQml0ZmllbGQtTWFzazogMHg3ZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX1BIWUFUVFJfREVNX1BUSV9Qb3MgKDdVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBQSFlBVFRSX0RFTV9QVEkgKEJpdCA3KSAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX1BIWUFUVFJfREVNX1BUSV9Nc2sgKDB4NzgwVUwpICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBQSFlBVFRSX0RFTV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19QSFlBVFRSX0NOX1BvcyAoMTFVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogUEhZQVRUUl9DTiAoQml0IDExKSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19QSFlBVFRSX0NOX01zayAoMHg3ODAwVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogUEhZQVRUUl9DTiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX1BIWUFUVFJfQ0FMQ0FQX1BvcyAoMTVVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBQSFlBVFRSX0NBTENBUCAoQml0IDE1KSAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX1BIWUFUVFJfQ0FMQ0FQX01zayAoMHg3ODAwMFVMKSAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBQSFlBVFRSX0NBTENBUCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX1BIWUFUVFJfUkZfR1BJT19QSU5TX1BvcyAoMTlVTCkgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBQSFlBVFRSX1JGX0dQSU9fUElOUyAoQml0IDE5KSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfUEhZQVRUUl9SRl9HUElPX1BJTlNfTXNrICgweDM4MDAwMFVMKSAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogUEhZQVRUUl9SRl9HUElPX1BJTlMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19QSFlBVFRSX0hTSV9Qb3MgKDIyVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogUEhZQVRUUl9IU0kgKEJpdCAyMikgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19QSFlBVFRSX0hTSV9Nc2sgKDB4NDAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogUEhZQVRUUl9IU0kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19GUkFNRVRZUEVfUG9zICgyM1VMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogRlJBTUVUWVBFIChCaXQgMjMpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19GUkFNRVRZUEVfTXNrICgweDM4MDAwMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogRlJBTUVUWVBFIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfQ1NNQUNBX0VOQV9Qb3MgKDI2VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUc6IENTTUFDQV9FTkEgKEJpdCAyNikgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfQ1NNQUNBX0VOQV9Nc2sgKDB4NDAwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUc6IENTTUFDQV9FTkEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19BQ0tSRVFVRVNUX1BvcyAoMjhVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogQUNLUkVRVUVTVCAoQml0IDI4KSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19BQ0tSRVFVRVNUX01zayAoMHgxMDAwMDAwMFVMKSAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogQUNLUkVRVUVTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX0NSQzE2X0VOQV9Qb3MgKDMwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBDUkMxNl9FTkEgKEJpdCAzMCkgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX0NSQzE2X0VOQV9Nc2sgKDB4NDAwMDAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBDUkMxNl9FTkEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzFfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMV8yX1JFR19NQUNTTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMV8yX1JFRzogTUFDU04gKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMV8yX1JFR19NQUNTTl9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMV8yX1JFRzogTUFDU04gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19GUkFNRV9MRU5HVEhfUG9zICgwVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzogRlJBTUVfTEVOR1RIIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19GUkFNRV9MRU5HVEhfTXNrICgweDdmVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzogRlJBTUVfTEVOR1RIIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfUEhZQVRUUl9ERU1fUFRJX1BvcyAoN1VMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IFBIWUFUVFJfREVNX1BUSSAoQml0IDcpICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfUEhZQVRUUl9ERU1fUFRJX01zayAoMHg3ODBVTCkgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IFBIWUFUVFJfREVNX1BUSSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX1BIWUFUVFJfQ05fUG9zICgxMVVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBQSFlBVFRSX0NOIChCaXQgMTEpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX1BIWUFUVFJfQ05fTXNrICgweDc4MDBVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBQSFlBVFRSX0NOIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfUEhZQVRUUl9DQUxDQVBfUG9zICgxNVVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IFBIWUFUVFJfQ0FMQ0FQIChCaXQgMTUpICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfUEhZQVRUUl9DQUxDQVBfTXNrICgweDc4MDAwVUwpICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IFBIWUFUVFJfQ0FMQ0FQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfUEhZQVRUUl9SRl9HUElPX1BJTlNfUG9zICgxOVVMKSAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IFBIWUFUVFJfUkZfR1BJT19QSU5TIChCaXQgMTkpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19QSFlBVFRSX1JGX0dQSU9fUElOU19Nc2sgKDB4MzgwMDAwVUwpIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBQSFlBVFRSX1JGX0dQSU9fUElOUyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX1BIWUFUVFJfSFNJX1BvcyAoMjJVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBQSFlBVFRSX0hTSSAoQml0IDIyKSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX1BIWUFUVFJfSFNJX01zayAoMHg0MDAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBQSFlBVFRSX0hTSSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX0ZSQU1FVFlQRV9Qb3MgKDIzVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBGUkFNRVRZUEUgKEJpdCAyMykgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX0ZSQU1FVFlQRV9Nc2sgKDB4MzgwMDAwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBGUkFNRVRZUEUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19DU01BQ0FfRU5BX1BvcyAoMjZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzogQ1NNQUNBX0VOQSAoQml0IDI2KSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19DU01BQ0FfRU5BX01zayAoMHg0MDAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzogQ1NNQUNBX0VOQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX0FDS1JFUVVFU1RfUG9zICgyOFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBBQ0tSRVFVRVNUIChCaXQgMjgpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX0FDS1JFUVVFU1RfTXNrICgweDEwMDAwMDAwVUwpICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBBQ0tSRVFVRVNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfQ1JDMTZfRU5BX1BvcyAoMzBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IENSQzE2X0VOQSAoQml0IDMwKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfQ1JDMTZfRU5BX01zayAoMHg0MDAwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IENSQzE2X0VOQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMV8zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8xXzNfUkVHX01BQ1NOX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8xXzNfUkVHOiBNQUNTTiAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8xXzNfUkVHX01BQ1NOX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8xXzNfUkVHOiBNQUNTTiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8wX1JFR19UWFRJTUVTVEFNUF9Qb3MgKDBVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8wX1JFRzogVFhUSU1FU1RBTVAgKEJpdCAwKSAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8wX1JFR19UWFRJTUVTVEFNUF9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzBfUkVHOiBUWFRJTUVTVEFNUCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFR19BQ0tGQUlMX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFRzogQUNLRkFJTCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFR19BQ0tGQUlMX01zayAoMHgxVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFRzogQUNLRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFR19DU01BQ0FGQUlMX1BvcyAoMVVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFRzogQ1NNQUNBRkFJTCAoQml0IDEpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFR19DU01BQ0FGQUlMX01zayAoMHgyVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFRzogQ1NNQUNBRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFR19DU01BQ0FOUlJFVFJJRVNfUG9zICgyVUwpICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFRzogQ1NNQUNBTlJSRVRSSUVTIChCaXQgMikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFR19DU01BQ0FOUlJFVFJJRVNfTXNrICgweDFjVUwpIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8wX1JFRzogQ1NNQUNBTlJSRVRSSUVTIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzFfUkVHX1RYVElNRVNUQU1QX1BvcyAoMFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzFfUkVHOiBUWFRJTUVTVEFNUCAoQml0IDApICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzFfUkVHX1RYVElNRVNUQU1QX01zayAoMHhmZmZmZmZmZlVMKSAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMV9SRUc6IFRYVElNRVNUQU1QIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHX0FDS0ZBSUxfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHOiBBQ0tGQUlMIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHX0FDS0ZBSUxfTXNrICgweDFVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHOiBBQ0tGQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHX0NTTUFDQUZBSUxfUG9zICgxVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHOiBDU01BQ0FGQUlMIChCaXQgMSkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHX0NTTUFDQUZBSUxfTXNrICgweDJVTCkgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHOiBDU01BQ0FGQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHX0NTTUFDQU5SUkVUUklFU19Qb3MgKDJVTCkgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHOiBDU01BQ0FOUlJFVFJJRVMgKEJpdCAyKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHX0NTTUFDQU5SUkVUUklFU19Nc2sgKDB4MWNVTCkgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHOiBDU01BQ0FOUlJFVFJJRVMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMl9SRUdfVFhUSU1FU1RBTVBfUG9zICgwVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMl9SRUc6IFRYVElNRVNUQU1QIChCaXQgMCkgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMl9SRUdfVFhUSU1FU1RBTVBfTXNrICgweGZmZmZmZmZmVUwpIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8yX1JFRzogVFhUSU1FU1RBTVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUdfQUNLRkFJTF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUc6IEFDS0ZBSUwgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUdfQUNLRkFJTF9Nc2sgKDB4MVVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUc6IEFDS0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUdfQ1NNQUNBRkFJTF9Qb3MgKDFVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUc6IENTTUFDQUZBSUwgKEJpdCAxKSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUdfQ1NNQUNBRkFJTF9Nc2sgKDB4MlVMKSAgICAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUc6IENTTUFDQUZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUdfQ1NNQUNBTlJSRVRSSUVTX1BvcyAoMlVMKSAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUc6IENTTUFDQU5SUkVUUklFUyAoQml0IDIpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUdfQ1NNQUNBTlJSRVRSSUVTX01zayAoMHgxY1VMKSAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMl9SRUc6IENTTUFDQU5SUkVUUklFUyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8zX1JFR19UWFRJTUVTVEFNUF9Qb3MgKDBVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8zX1JFRzogVFhUSU1FU1RBTVAgKEJpdCAwKSAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8zX1JFR19UWFRJTUVTVEFNUF9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzNfUkVHOiBUWFRJTUVTVEFNUCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFR19BQ0tGQUlMX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFRzogQUNLRkFJTCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFR19BQ0tGQUlMX01zayAoMHgxVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFRzogQUNLRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFR19DU01BQ0FGQUlMX1BvcyAoMVVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFRzogQ1NNQUNBRkFJTCAoQml0IDEpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFR19DU01BQ0FGQUlMX01zayAoMHgyVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFRzogQ1NNQUNBRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFR19DU01BQ0FOUlJFVFJJRVNfUG9zICgyVUwpICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFRzogQ1NNQUNBTlJSRVRSSUVTIChCaXQgMikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFR19DU01BQ0FOUlJFVFJJRVNfTXNrICgweDFjVUwpIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFRzogQ1NNQUNBTlJSRVRSSUVTIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX01FVEFfMF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzBfUkVHX1JYX1RJTUVTVEFNUF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzBfUkVHOiBSWF9USU1FU1RBTVAgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzBfUkVHX1JYX1RJTUVTVEFNUF9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzBfUkVHOiBSWF9USU1FU1RBTVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfQ1JDMTZfRVJST1JfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IENSQzE2X0VSUk9SIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfQ1JDMTZfRVJST1JfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IENSQzE2X0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Qb3MgKDJVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdCAyKSAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Nc2sgKDB4NFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX1BvcyAoM1VMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0IDMpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX01zayAoMHg4VUwpICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8wX1JFR19EUEFOSURfRVJST1JfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8wX1JFRzogRFBBTklEX0VSUk9SIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8wX1JFR19EUEFOSURfRVJST1JfTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8wX1JFRzogRFBBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX0RBRERSX0VSUk9SX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBEQUREUl9FUlJPUiAoQml0IDUpICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX0RBRERSX0VSUk9SX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBEQUREUl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8wX1JFR19TUEFOSURfRVJST1JfUG9zICg2VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8wX1JFRzogU1BBTklEX0VSUk9SIChCaXQgNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8wX1JFR19TUEFOSURfRVJST1JfTXNrICgweDQwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8wX1JFRzogU1BBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfUG9zICg3VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXQgNykgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfTXNrICgweDgwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX01zayAoMHhmZjAwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9NRVRBXzBfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMF8xX1JFR19SWF9USU1FU1RBTVBfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMF8xX1JFRzogUlhfVElNRVNUQU1QIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMF8xX1JFR19SWF9USU1FU1RBTVBfTXNrICgweGZmZmZmZmZmVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMF8xX1JFRzogUlhfVElNRVNUQU1QIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX0NSQzE2X0VSUk9SX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBDUkMxNl9FUlJPUiAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX0NSQzE2X0VSUk9SX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBDUkMxNl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19SRVNfRlJNX1RZUEVfRVJST1JfUG9zICgyVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogUkVTX0ZSTV9UWVBFX0VSUk9SIChCaXQgMikgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19SRVNfRlJNX1RZUEVfRVJST1JfTXNrICgweDRVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogUkVTX0ZSTV9UWVBFX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9Qb3MgKDNVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBSRVNfRlJNX1ZFUlNJT05fRVJST1IgKEJpdCAzKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9Nc2sgKDB4OFVMKSAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBSRVNfRlJNX1ZFUlNJT05fRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMV9SRUdfRFBBTklEX0VSUk9SX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMV9SRUc6IERQQU5JRF9FUlJPUiAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMV9SRUdfRFBBTklEX0VSUk9SX01zayAoMHgxMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMV9SRUc6IERQQU5JRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19EQUREUl9FUlJPUl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogREFERFJfRVJST1IgKEJpdCA1KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19EQUREUl9FUlJPUl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogREFERFJfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMV9SRUdfU1BBTklEX0VSUk9SX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMV9SRUc6IFNQQU5JRF9FUlJPUiAoQml0IDYpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMV9SRUdfU1BBTklEX0VSUk9SX01zayAoMHg0MFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMV9SRUc6IFNQQU5JRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19JU1BBTklEX0NPT1JEX0VSUk9SX1BvcyAoN1VMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogSVNQQU5JRF9DT09SRF9FUlJPUiAoQml0IDcpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19JU1BBTklEX0NPT1JEX0VSUk9SX01zayAoMHg4MFVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogSVNQQU5JRF9DT09SRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19RVUFMSVRZX0lORElDQVRPUl9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogUVVBTElUWV9JTkRJQ0FUT1IgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19RVUFMSVRZX0lORElDQVRPUl9Nc2sgKDB4ZmYwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogUVVBTElUWV9JTkRJQ0FUT1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUVUQV8wXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzBfMl9SRUdfUlhfVElNRVNUQU1QX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzBfMl9SRUc6IFJYX1RJTUVTVEFNUCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzBfMl9SRUdfUlhfVElNRVNUQU1QX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzBfMl9SRUc6IFJYX1RJTUVTVEFNUCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19DUkMxNl9FUlJPUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogQ1JDMTZfRVJST1IgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19DUkMxNl9FUlJPUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogQ1JDMTZfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfUkVTX0ZSTV9UWVBFX0VSUk9SX1BvcyAoMlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IFJFU19GUk1fVFlQRV9FUlJPUiAoQml0IDIpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfUkVTX0ZSTV9UWVBFX0VSUk9SX01zayAoMHg0VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IFJFU19GUk1fVFlQRV9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19SRVNfRlJNX1ZFUlNJT05fRVJST1JfUG9zICgzVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIChCaXQgMykgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19SRVNfRlJNX1ZFUlNJT05fRVJST1JfTXNrICgweDhVTCkgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzJfUkVHX0RQQU5JRF9FUlJPUl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzJfUkVHOiBEUEFOSURfRVJST1IgKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzJfUkVHX0RQQU5JRF9FUlJPUl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzJfUkVHOiBEUEFOSURfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfREFERFJfRVJST1JfUG9zICg1VUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IERBRERSX0VSUk9SIChCaXQgNSkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfREFERFJfRVJST1JfTXNrICgweDIwVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IERBRERSX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzJfUkVHX1NQQU5JRF9FUlJPUl9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzJfUkVHOiBTUEFOSURfRVJST1IgKEJpdCA2KSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzJfUkVHX1NQQU5JRF9FUlJPUl9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzJfUkVHOiBTUEFOSURfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfSVNQQU5JRF9DT09SRF9FUlJPUl9Qb3MgKDdVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IElTUEFOSURfQ09PUkRfRVJST1IgKEJpdCA3KSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfSVNQQU5JRF9DT09SRF9FUlJPUl9Nc2sgKDB4ODBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IElTUEFOSURfQ09PUkRfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfUVVBTElUWV9JTkRJQ0FUT1JfUG9zICg4VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IFFVQUxJVFlfSU5ESUNBVE9SIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfUVVBTElUWV9JTkRJQ0FUT1JfTXNrICgweGZmMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IFFVQUxJVFlfSU5ESUNBVE9SIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX01FVEFfMF8zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzNfUkVHX1JYX1RJTUVTVEFNUF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzNfUkVHOiBSWF9USU1FU1RBTVAgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzNfUkVHX1JYX1RJTUVTVEFNUF9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzNfUkVHOiBSWF9USU1FU1RBTVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfQ1JDMTZfRVJST1JfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IENSQzE2X0VSUk9SIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfQ1JDMTZfRVJST1JfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IENSQzE2X0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Qb3MgKDJVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdCAyKSAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Nc2sgKDB4NFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX1BvcyAoM1VMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0IDMpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX01zayAoMHg4VUwpICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8zX1JFR19EUEFOSURfRVJST1JfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8zX1JFRzogRFBBTklEX0VSUk9SIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8zX1JFR19EUEFOSURfRVJST1JfTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8zX1JFRzogRFBBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX0RBRERSX0VSUk9SX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBEQUREUl9FUlJPUiAoQml0IDUpICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX0RBRERSX0VSUk9SX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBEQUREUl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8zX1JFR19TUEFOSURfRVJST1JfUG9zICg2VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8zX1JFRzogU1BBTklEX0VSUk9SIChCaXQgNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8zX1JFR19TUEFOSURfRVJST1JfTXNrICgweDQwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8zX1JFRzogU1BBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfUG9zICg3VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXQgNykgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfTXNrICgweDgwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX01zayAoMHhmZjAwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9NRVRBXzBfNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMF80X1JFR19SWF9USU1FU1RBTVBfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMF80X1JFRzogUlhfVElNRVNUQU1QIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMF80X1JFR19SWF9USU1FU1RBTVBfTXNrICgweGZmZmZmZmZmVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMF80X1JFRzogUlhfVElNRVNUQU1QIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX01FVEFfMV80X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX0NSQzE2X0VSUk9SX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBDUkMxNl9FUlJPUiAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX0NSQzE2X0VSUk9SX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBDUkMxNl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19SRVNfRlJNX1RZUEVfRVJST1JfUG9zICgyVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogUkVTX0ZSTV9UWVBFX0VSUk9SIChCaXQgMikgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19SRVNfRlJNX1RZUEVfRVJST1JfTXNrICgweDRVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogUkVTX0ZSTV9UWVBFX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9Qb3MgKDNVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBSRVNfRlJNX1ZFUlNJT05fRVJST1IgKEJpdCAzKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9Nc2sgKDB4OFVMKSAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBSRVNfRlJNX1ZFUlNJT05fRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNF9SRUdfRFBBTklEX0VSUk9SX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNF9SRUc6IERQQU5JRF9FUlJPUiAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNF9SRUdfRFBBTklEX0VSUk9SX01zayAoMHgxMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNF9SRUc6IERQQU5JRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19EQUREUl9FUlJPUl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogREFERFJfRVJST1IgKEJpdCA1KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19EQUREUl9FUlJPUl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogREFERFJfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNF9SRUdfU1BBTklEX0VSUk9SX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNF9SRUc6IFNQQU5JRF9FUlJPUiAoQml0IDYpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNF9SRUdfU1BBTklEX0VSUk9SX01zayAoMHg0MFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNF9SRUc6IFNQQU5JRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19JU1BBTklEX0NPT1JEX0VSUk9SX1BvcyAoN1VMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogSVNQQU5JRF9DT09SRF9FUlJPUiAoQml0IDcpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19JU1BBTklEX0NPT1JEX0VSUk9SX01zayAoMHg4MFVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogSVNQQU5JRF9DT09SRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19RVUFMSVRZX0lORElDQVRPUl9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogUVVBTElUWV9JTkRJQ0FUT1IgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19RVUFMSVRZX0lORElDQVRPUl9Nc2sgKDB4ZmYwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogUVVBTElUWV9JTkRJQ0FUT1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUVUQV8wXzVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzBfNV9SRUdfUlhfVElNRVNUQU1QX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzBfNV9SRUc6IFJYX1RJTUVTVEFNUCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzBfNV9SRUdfUlhfVElNRVNUQU1QX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzBfNV9SRUc6IFJYX1RJTUVTVEFNUCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19DUkMxNl9FUlJPUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogQ1JDMTZfRVJST1IgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19DUkMxNl9FUlJPUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogQ1JDMTZfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfUkVTX0ZSTV9UWVBFX0VSUk9SX1BvcyAoMlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IFJFU19GUk1fVFlQRV9FUlJPUiAoQml0IDIpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfUkVTX0ZSTV9UWVBFX0VSUk9SX01zayAoMHg0VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IFJFU19GUk1fVFlQRV9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19SRVNfRlJNX1ZFUlNJT05fRVJST1JfUG9zICgzVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIChCaXQgMykgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19SRVNfRlJNX1ZFUlNJT05fRVJST1JfTXNrICgweDhVTCkgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzVfUkVHX0RQQU5JRF9FUlJPUl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzVfUkVHOiBEUEFOSURfRVJST1IgKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzVfUkVHX0RQQU5JRF9FUlJPUl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzVfUkVHOiBEUEFOSURfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfREFERFJfRVJST1JfUG9zICg1VUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IERBRERSX0VSUk9SIChCaXQgNSkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfREFERFJfRVJST1JfTXNrICgweDIwVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IERBRERSX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzVfUkVHX1NQQU5JRF9FUlJPUl9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzVfUkVHOiBTUEFOSURfRVJST1IgKEJpdCA2KSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzVfUkVHX1NQQU5JRF9FUlJPUl9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzVfUkVHOiBTUEFOSURfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfSVNQQU5JRF9DT09SRF9FUlJPUl9Qb3MgKDdVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IElTUEFOSURfQ09PUkRfRVJST1IgKEJpdCA3KSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfSVNQQU5JRF9DT09SRF9FUlJPUl9Nc2sgKDB4ODBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IElTUEFOSURfQ09PUkRfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfUVVBTElUWV9JTkRJQ0FUT1JfUG9zICg4VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IFFVQUxJVFlfSU5ESUNBVE9SIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfUVVBTElUWV9JTkRJQ0FUT1JfTXNrICgweGZmMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IFFVQUxJVFlfSU5ESUNBVE9SIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX01FVEFfMF82X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzZfUkVHX1JYX1RJTUVTVEFNUF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzZfUkVHOiBSWF9USU1FU1RBTVAgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzZfUkVHX1JYX1RJTUVTVEFNUF9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzZfUkVHOiBSWF9USU1FU1RBTVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfQ1JDMTZfRVJST1JfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IENSQzE2X0VSUk9SIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfQ1JDMTZfRVJST1JfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IENSQzE2X0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Qb3MgKDJVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdCAyKSAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Nc2sgKDB4NFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX1BvcyAoM1VMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0IDMpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX01zayAoMHg4VUwpICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV82X1JFR19EUEFOSURfRVJST1JfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV82X1JFRzogRFBBTklEX0VSUk9SIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV82X1JFR19EUEFOSURfRVJST1JfTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV82X1JFRzogRFBBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX0RBRERSX0VSUk9SX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBEQUREUl9FUlJPUiAoQml0IDUpICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX0RBRERSX0VSUk9SX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBEQUREUl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV82X1JFR19TUEFOSURfRVJST1JfUG9zICg2VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV82X1JFRzogU1BBTklEX0VSUk9SIChCaXQgNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV82X1JFR19TUEFOSURfRVJST1JfTXNrICgweDQwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV82X1JFRzogU1BBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfUG9zICg3VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXQgNykgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfTXNrICgweDgwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX01zayAoMHhmZjAwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9NRVRBXzBfN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMF83X1JFR19SWF9USU1FU1RBTVBfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMF83X1JFRzogUlhfVElNRVNUQU1QIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMF83X1JFR19SWF9USU1FU1RBTVBfTXNrICgweGZmZmZmZmZmVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMF83X1JFRzogUlhfVElNRVNUQU1QIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX01FVEFfMV83X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX0NSQzE2X0VSUk9SX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBDUkMxNl9FUlJPUiAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX0NSQzE2X0VSUk9SX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBDUkMxNl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19SRVNfRlJNX1RZUEVfRVJST1JfUG9zICgyVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogUkVTX0ZSTV9UWVBFX0VSUk9SIChCaXQgMikgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19SRVNfRlJNX1RZUEVfRVJST1JfTXNrICgweDRVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogUkVTX0ZSTV9UWVBFX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9Qb3MgKDNVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBSRVNfRlJNX1ZFUlNJT05fRVJST1IgKEJpdCAzKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9Nc2sgKDB4OFVMKSAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBSRVNfRlJNX1ZFUlNJT05fRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfN19SRUdfRFBBTklEX0VSUk9SX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfN19SRUc6IERQQU5JRF9FUlJPUiAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfN19SRUdfRFBBTklEX0VSUk9SX01zayAoMHgxMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfN19SRUc6IERQQU5JRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19EQUREUl9FUlJPUl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogREFERFJfRVJST1IgKEJpdCA1KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19EQUREUl9FUlJPUl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogREFERFJfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfN19SRUdfU1BBTklEX0VSUk9SX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfN19SRUc6IFNQQU5JRF9FUlJPUiAoQml0IDYpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfN19SRUdfU1BBTklEX0VSUk9SX01zayAoMHg0MFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfN19SRUc6IFNQQU5JRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19JU1BBTklEX0NPT1JEX0VSUk9SX1BvcyAoN1VMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogSVNQQU5JRF9DT09SRF9FUlJPUiAoQml0IDcpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19JU1BBTklEX0NPT1JEX0VSUk9SX01zayAoMHg4MFVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogSVNQQU5JRF9DT09SRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19RVUFMSVRZX0lORElDQVRPUl9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogUVVBTElUWV9JTkRJQ0FUT1IgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19RVUFMSVRZX0lORElDQVRPUl9Nc2sgKDB4ZmYwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogUVVBTElUWV9JTkRJQ0FUT1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfRklGT18wXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzBfMF9SRUdfUlhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzBfMF9SRUc6IFJYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzBfMF9SRUdfUlhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzBfMF9SRUc6IFJYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfRklGT18xXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzFfMF9SRUdfUlhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzFfMF9SRUc6IFJYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzFfMF9SRUdfUlhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzFfMF9SRUc6IFJYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfRklGT18yXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzJfMF9SRUdfUlhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzJfMF9SRUc6IFJYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzJfMF9SRUdfUlhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzJfMF9SRUc6IFJYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfRklGT18zXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzNfMF9SRUdfUlhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzNfMF9SRUc6IFJYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzNfMF9SRUdfUlhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzNfMF9SRUc6IFJYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfRklGT180XzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzRfMF9SRUdfUlhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzRfMF9SRUc6IFJYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzRfMF9SRUdfUlhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzRfMF9SRUc6IFJYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfRklGT181XzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzVfMF9SRUdfUlhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzVfMF9SRUc6IFJYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzVfMF9SRUdfUlhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzVfMF9SRUc6IFJYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfRklGT182XzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzZfMF9SRUdfUlhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzZfMF9SRUc6IFJYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzZfMF9SRUdfUlhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzZfMF9SRUc6IFJYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfRklGT183XzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzdfMF9SRUdfUlhfRklGT19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzdfMF9SRUc6IFJYX0ZJRk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9GSUZPXzdfMF9SRUdfUlhfRklGT19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9GSUZPXzdfMF9SRUc6IFJYX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUkVMX05BTUVfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SRUxfTkFNRV8wX1JFR19SRUxfTkFNRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SRUxfTkFNRV8wX1JFRzogUkVMX05BTUUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SRUxfTkFNRV8wX1JFR19SRUxfTkFNRV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SRUxfTkFNRV8wX1JFRzogUkVMX05BTUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUkVMX05BTUVfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SRUxfTkFNRV8xX1JFR19SRUxfTkFNRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SRUxfTkFNRV8xX1JFRzogUkVMX05BTUUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SRUxfTkFNRV8xX1JFR19SRUxfTkFNRV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SRUxfTkFNRV8xX1JFRzogUkVMX05BTUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUkVMX05BTUVfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SRUxfTkFNRV8yX1JFR19SRUxfTkFNRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SRUxfTkFNRV8yX1JFRzogUkVMX05BTUUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SRUxfTkFNRV8yX1JFR19SRUxfTkFNRV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SRUxfTkFNRV8yX1JFRzogUkVMX05BTUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUkVMX05BTUVfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SRUxfTkFNRV8zX1JFR19SRUxfTkFNRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SRUxfTkFNRV8zX1JFRzogUkVMX05BTUUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SRUxfTkFNRV8zX1JFR19SRUxfTkFNRV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SRUxfTkFNRV8zX1JFRzogUkVMX05BTUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfQlVJTERUSU1FXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9CVUlMRFRJTUVfMF9SRUdfQlVJTERUSU1FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9CVUlMRFRJTUVfMF9SRUc6IEJVSUxEVElNRSAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9CVUlMRFRJTUVfMF9SRUdfQlVJTERUSU1FX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9CVUlMRFRJTUVfMF9SRUc6IEJVSUxEVElNRSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9CVUlMRFRJTUVfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0JVSUxEVElNRV8xX1JFR19CVUlMRFRJTUVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0JVSUxEVElNRV8xX1JFRzogQlVJTERUSU1FIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0JVSUxEVElNRV8xX1JFR19CVUlMRFRJTUVfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX0JVSUxEVElNRV8xX1JFRzogQlVJTERUSU1FIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0JVSUxEVElNRV8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfQlVJTERUSU1FXzJfUkVHX0JVSUxEVElNRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfQlVJTERUSU1FXzJfUkVHOiBCVUlMRFRJTUUgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfQlVJTERUSU1FXzJfUkVHX0JVSUxEVElNRV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfQlVJTERUSU1FXzJfUkVHOiBCVUlMRFRJTUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfQlVJTERUSU1FXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9CVUlMRFRJTUVfM19SRUdfQlVJTERUSU1FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9CVUlMRFRJTUVfM19SRUc6IEJVSUxEVElNRSAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9CVUlMRFRJTUVfM19SRUdfQlVJTERUSU1FX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9CVUlMRFRJTUVfM19SRUc6IEJVSUxEVElNRSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8wX1JFR19JU1BBTkNPT1JESU5BVE9SX1BvcyAoMVVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8wX1JFRzogSVNQQU5DT09SRElOQVRPUiAoQml0IDEpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8wX1JFR19JU1BBTkNPT1JESU5BVE9SX01zayAoMHgyVUwpICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8wX1JFRzogSVNQQU5DT09SRElOQVRPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8wX1JFR19SWF9ETUFfUkVRX1BvcyAoMlVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8wX1JFRzogUlhfRE1BX1JFUSAoQml0IDIpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8wX1JFR19SWF9ETUFfUkVRX01zayAoMHg0VUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8wX1JFRzogUlhfRE1BX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8wX1JFR19UWF9ETUFfUkVRX1BvcyAoM1VMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8wX1JFRzogVFhfRE1BX1JFUSAoQml0IDMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8wX1JFR19UWF9ETUFfUkVRX01zayAoMHg4VUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8wX1JFRzogVFhfRE1BX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8wX1JFR19NQUNTSU1QTEVBRERSRVNTX1BvcyAoOFVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8wX1JFRzogTUFDU0lNUExFQUREUkVTUyAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8wX1JFR19NQUNTSU1QTEVBRERSRVNTX01zayAoMHhmZjAwVUwpICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8wX1JFRzogTUFDU0lNUExFQUREUkVTUyAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8wX1JFR19NQUNMRUVOQUJMRURfUG9zICgxN1VMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8wX1JFRzogTUFDTEVFTkFCTEVEIChCaXQgMTcpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8wX1JFR19NQUNMRUVOQUJMRURfTXNrICgweDIwMDAwVUwpICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8wX1JFRzogTUFDTEVFTkFCTEVEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX01BQ1RTQ0hFTkFCTEVEX1BvcyAoMThVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBNQUNUU0NIRU5BQkxFRCAoQml0IDE4KSAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX01BQ1RTQ0hFTkFCTEVEX01zayAoMHg0MDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBNQUNUU0NIRU5BQkxFRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8xX1JFR19NQUNQQU5JRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8xX1JFRzogTUFDUEFOSUQgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8xX1JFR19NQUNQQU5JRF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8xX1JFRzogTUFDUEFOSUQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8xX1JFR19NQUNTSE9SVEFERFJFU1NfUG9zICgxNlVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8xX1JFRzogTUFDU0hPUlRBRERSRVNTIChCaXQgMTYpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8xX1JFR19NQUNTSE9SVEFERFJFU1NfTXNrICgweGZmZmYwMDAwVUwpIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8xX1JFRzogTUFDU0hPUlRBRERSRVNTIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9HTE9CX0NPTlRST0xfMl9SRUdfQUVYVEVOREVEQUREUkVTU19MX1BvcyAoMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9HTE9CX0NPTlRST0xfMl9SRUc6IEFFWFRFTkRFREFERFJFU1NfTCAoQml0IDApICAgICovCisjZGVmaW5lIEZUREZfRlRERl9HTE9CX0NPTlRST0xfMl9SRUdfQUVYVEVOREVEQUREUkVTU19MX01zayAoMHhmZmZmZmZmZlVMKSAvKiE8IEZUREYgRlRERl9HTE9CX0NPTlRST0xfMl9SRUc6IEFFWFRFTkRFREFERFJFU1NfTCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8zX1JFR19BRVhURU5ERURBRERSRVNTX0hfUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8zX1JFRzogQUVYVEVOREVEQUREUkVTU19IIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8zX1JFR19BRVhURU5ERURBRERSRVNTX0hfTXNrICgweGZmZmZmZmZmVUwpIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8zX1JFRzogQUVYVEVOREVEQUREUkVTU19IIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzBfUkVHX1JYT05EVVJBVElPTl9Qb3MgKDFVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzBfUkVHOiBSWE9ORFVSQVRJT04gKEJpdCAxKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzBfUkVHX1JYT05EVVJBVElPTl9Nc2sgKDB4MWZmZmZmZVVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzBfUkVHOiBSWE9ORFVSQVRJT04gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzBfUkVHX1JYQUxXQVlTT05fUG9zICgyNVVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzBfUkVHOiBSWEFMV0FZU09OIChCaXQgMjUpICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzBfUkVHX1JYQUxXQVlTT05fTXNrICgweDIwMDAwMDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzBfUkVHOiBSWEFMV0FZU09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzBfUkVHX1BUSV9SWF9Qb3MgKDI3VUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzBfUkVHOiBQVElfUlggKEJpdCAyNykgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzBfUkVHX1BUSV9SWF9Nc2sgKDB4NzgwMDAwMDBVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzBfUkVHOiBQVElfUlggKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzBfUkVHX0tFRVBfUEhZX0VOX1BvcyAoMzFVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzBfUkVHOiBLRUVQX1BIWV9FTiAoQml0IDMxKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzBfUkVHX0tFRVBfUEhZX0VOX01zayAoMHg4MDAwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzBfUkVHOiBLRUVQX1BIWV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhQSVBFUFJPUERFTEFZX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYUElQRVBST1BERUxBWV9SRUdfVFhQSVBFUFJPUERFTEFZX1BvcyAoMFVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1RYUElQRVBST1BERUxBWV9SRUc6IFRYUElQRVBST1BERUxBWSAoQml0IDApICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYUElQRVBST1BERUxBWV9SRUdfVFhQSVBFUFJPUERFTEFZX01zayAoMHhmZlVMKSAgICAgIC8qITwgRlRERiBGVERGX1RYUElQRVBST1BERUxBWV9SRUc6IFRYUElQRVBST1BERUxBWSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX01BQ0FDS1dBSVREVVJBVElPTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX01BQ0FDS1dBSVREVVJBVElPTl9SRUdfTUFDQUNLV0FJVERVUkFUSU9OX1BvcyAoMFVMKSAgIC8qITwgRlRERiBGVERGX01BQ0FDS1dBSVREVVJBVElPTl9SRUc6IE1BQ0FDS1dBSVREVVJBVElPTiAoQml0IDApICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNBQ0tXQUlURFVSQVRJT05fUkVHX01BQ0FDS1dBSVREVVJBVElPTl9Nc2sgKDB4ZmZVTCkgLyohPCBGVERGIEZUREZfTUFDQUNLV0FJVERVUkFUSU9OX1JFRzogTUFDQUNLV0FJVERVUkFUSU9OIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9NQUNFTkhBQ0tXQUlURFVSQVRJT05fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTUFDRU5IQUNLV0FJVERVUkFUSU9OX1JFR19NQUNFTkhBQ0tXQUlURFVSQVRJT05fUG9zICgwVUwpIC8qITwgRlRERiBGVERGX01BQ0VOSEFDS1dBSVREVVJBVElPTl9SRUc6IE1BQ0VOSEFDS1dBSVREVVJBVElPTiAoQml0IDApICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNFTkhBQ0tXQUlURFVSQVRJT05fUkVHX01BQ0VOSEFDS1dBSVREVVJBVElPTl9Nc2sgKDB4ZmZmZlVMKSAvKiE8IEZUREYgRlRERl9NQUNFTkhBQ0tXQUlURFVSQVRJT05fUkVHOiBNQUNFTkhBQ0tXQUlURFVSQVRJT04gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xX1JFR19QSFlSWEFUVFJfREVNX1BUSV9Qb3MgKDBVTCkgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xX1JFRzogUEhZUlhBVFRSX0RFTV9QVEkgKEJpdCAwKSAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xX1JFR19QSFlSWEFUVFJfREVNX1BUSV9Nc2sgKDB4ZlVMKSAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xX1JFRzogUEhZUlhBVFRSX0RFTV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMV9SRUdfUEhZUlhBVFRSX0NOX1BvcyAoNFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMV9SRUc6IFBIWVJYQVRUUl9DTiAoQml0IDQpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMV9SRUdfUEhZUlhBVFRSX0NOX01zayAoMHhmMFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMV9SRUc6IFBIWVJYQVRUUl9DTiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xX1JFR19QSFlSWEFUVFJfQ0FMQ0FQX1BvcyAoOFVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xX1JFRzogUEhZUlhBVFRSX0NBTENBUCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xX1JFR19QSFlSWEFUVFJfQ0FMQ0FQX01zayAoMHhmMDBVTCkgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xX1JFRzogUEhZUlhBVFRSX0NBTENBUCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xX1JFR19QSFlSWEFUVFJfUkZfR1BJT19QSU5TX1BvcyAoMTJVTCkgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xX1JFRzogUEhZUlhBVFRSX1JGX0dQSU9fUElOUyAoQml0IDEyKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzFfUkVHX1BIWVJYQVRUUl9SRl9HUElPX1BJTlNfTXNrICgweDcwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzFfUkVHOiBQSFlSWEFUVFJfUkZfR1BJT19QSU5TIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzFfUkVHX1BIWVJYQVRUUl9IU0lfUG9zICgxNVVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzFfUkVHOiBQSFlSWEFUVFJfSFNJIChCaXQgMTUpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzFfUkVHX1BIWVJYQVRUUl9IU0lfTXNrICgweDgwMDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzFfUkVHOiBQSFlSWEFUVFJfSFNJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzJfUkVHX0VEU0NBTkVOQUJMRV9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzJfUkVHOiBFRFNDQU5FTkFCTEUgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzJfUkVHX0VEU0NBTkVOQUJMRV9Nc2sgKDB4MVVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzJfUkVHOiBFRFNDQU5FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMl9SRUdfRURTQ0FORFVSQVRJT05fUG9zICg4VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMl9SRUc6IEVEU0NBTkRVUkFUSU9OIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMl9SRUdfRURTQ0FORFVSQVRJT05fTXNrICgweGZmZmZmZjAwVUwpICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMl9SRUc6IEVEU0NBTkRVUkFUSU9OIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8zX1JFR19NQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUVfUG9zICgwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8zX1JFRzogTUFDTUFYRlJBTUVUT1RBTFdBSVRUSU1FIChCaXQgMCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8zX1JFR19NQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUVfTXNrICgweGZmZmZVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzNfUkVHOiBNQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8zX1JFR19DQ0FJRExFV0FJVF9Qb3MgKDE2VUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8zX1JFRzogQ0NBSURMRVdBSVQgKEJpdCAxNikgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8zX1JFR19DQ0FJRExFV0FJVF9Nc2sgKDB4ZmYwMDAwVUwpICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8zX1JFRzogQ0NBSURMRVdBSVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfM19SRUdfQUREUl9UQUJfTUFUQ0hfRlBfVkFMVUVfUG9zICgyNFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfM19SRUc6IEFERFJfVEFCX01BVENIX0ZQX1ZBTFVFIChCaXQgMjQpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfM19SRUdfQUREUl9UQUJfTUFUQ0hfRlBfVkFMVUVfTXNrICgweDEwMDAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzNfUkVHOiBBRERSX1RBQl9NQVRDSF9GUF9WQUxVRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8zX1JFR19GUF9PVkVSUklERV9Qb3MgKDI1VUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8zX1JFRzogRlBfT1ZFUlJJREUgKEJpdCAyNSkgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8zX1JFR19GUF9PVkVSUklERV9Nc2sgKDB4MjAwMDAwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8zX1JFRzogRlBfT1ZFUlJJREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfM19SRUdfRlBfRk9SQ0VfVkFMVUVfUG9zICgyNlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfM19SRUc6IEZQX0ZPUkNFX1ZBTFVFIChCaXQgMjYpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfM19SRUdfRlBfRk9SQ0VfVkFMVUVfTXNrICgweDQwMDAwMDBVTCkgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfM19SRUc6IEZQX0ZPUkNFX1ZBTFVFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzNfUkVHX0ZUREZfTFBEUF9FTkFCTEVfUG9zICgyN1VMKSAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzNfUkVHOiBGVERGX0xQRFBfRU5BQkxFIChCaXQgMjcpICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzNfUkVHX0ZUREZfTFBEUF9FTkFCTEVfTXNrICgweDgwMDAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzNfUkVHOiBGVERGX0xQRFBfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX09TX1JFR19HRVRHRU5FUkFUT1JWQUxfUG9zICgwVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX09TX1JFRzogR0VUR0VORVJBVE9SVkFMIChCaXQgMCkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX09TX1JFR19HRVRHRU5FUkFUT1JWQUxfTXNrICgweDFVTCkgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX09TX1JFRzogR0VUR0VORVJBVE9SVkFMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX09TX1JFR19SWEVOQUJMRV9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX09TX1JFRzogUlhFTkFCTEUgKEJpdCAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX09TX1JFR19SWEVOQUJMRV9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX09TX1JFRzogUlhFTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHX1NJTkdMRUNDQV9Qb3MgKDJVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHOiBTSU5HTEVDQ0EgKEJpdCAyKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHX1NJTkdMRUNDQV9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHOiBTSU5HTEVDQ0EgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHX0NTTUFfQ0FfUkVTVU1FX1NFVF9Qb3MgKDNVTCkgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHOiBDU01BX0NBX1JFU1VNRV9TRVQgKEJpdCAzKSAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHX0NTTUFfQ0FfUkVTVU1FX1NFVF9Nc2sgKDB4OFVMKSAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHOiBDU01BX0NBX1JFU1VNRV9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHX0NTTUFfQ0FfUkVTVU1FX0NMRUFSX1BvcyAoNFVMKSAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHOiBDU01BX0NBX1JFU1VNRV9DTEVBUiAoQml0IDQpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHX0NTTUFfQ0FfUkVTVU1FX0NMRUFSX01zayAoMHgxMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHOiBDU01BX0NBX1JFU1VNRV9DTEVBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX0xNQUNSRUFEWTRTTEVFUF9Qb3MgKDFVTCkgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBMTUFDUkVBRFk0U0xFRVAgKEJpdCAxKSAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX0xNQUNSRUFEWTRTTEVFUF9Nc2sgKDB4MlVMKSAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBMTUFDUkVBRFk0U0xFRVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFR19DQ0FTVEFUX1BvcyAoMlVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFRzogQ0NBU1RBVCAoQml0IDIpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFR19DQ0FTVEFUX01zayAoMHg0VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFRzogQ0NBU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX1BvcyAoNlVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFRzogV0FLRVVQVElNRVJFTkFCTEVTVEFUVVMgKEJpdCA2KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUdfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfTXNrICgweDQwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBXQUtFVVBUSU1FUkVOQUJMRVNUQVRVUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX0VEU0NBTlZBTFVFX1BvcyAoOFVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBFRFNDQU5WQUxVRSAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX0VEU0NBTlZBTFVFX01zayAoMHhmZjAwVUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBFRFNDQU5WQUxVRSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX0NTTUFfQ0FfTkJfU1RBVF9Qb3MgKDE2VUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBDU01BX0NBX05CX1NUQVQgKEJpdCAxNikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX0NTTUFfQ0FfTkJfU1RBVF9Nc2sgKDB4NzAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUc6IENTTUFfQ0FfTkJfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX0NTTUFfQ0FfUkVTVU1FX1NUQVRfUG9zICgxOVVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFRzogQ1NNQV9DQV9SRVNVTUVfU1RBVCAoQml0IDE5KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUdfQ1NNQV9DQV9SRVNVTUVfU1RBVF9Nc2sgKDB4ODAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUc6IENTTUFfQ0FfUkVTVU1FX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFR19DU01BX0NBX0JPX1NUQVRfUG9zICgyNFVMKSAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFRzogQ1NNQV9DQV9CT19TVEFUIChCaXQgMjQpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFR19DU01BX0NBX0JPX1NUQVRfTXNrICgweGZmMDAwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBDU01BX0NBX0JPX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9FVkVOVENVUlJWQUxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9FVkVOVENVUlJWQUxfUkVHX0VWRU5UQ1VSUlZBTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9FVkVOVENVUlJWQUxfUkVHOiBFVkVOVENVUlJWQUwgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9FVkVOVENVUlJWQUxfUkVHX0VWRU5UQ1VSUlZBTF9Nc2sgKDB4MWZmZmZmZlVMKSAgICAgICAvKiE8IEZUREYgRlRERl9FVkVOVENVUlJWQUxfUkVHOiBFVkVOVENVUlJWQUwgKEJpdGZpZWxkLU1hc2s6IDB4MWZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9USU1FU1RBTVBDVVJSVkFMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RJTUVTVEFNUENVUlJWQUxfUkVHX1RJTUVTVEFNUENVUlJWQUxfUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RJTUVTVEFNUENVUlJWQUxfUkVHOiBUSU1FU1RBTVBDVVJSVkFMIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RJTUVTVEFNUENVUlJWQUxfUkVHX1RJTUVTVEFNUENVUlJWQUxfTXNrICgweGZmZmZmZmZmVUwpIC8qITwgRlRERiBGVERGX1RJTUVTVEFNUENVUlJWQUxfUkVHOiBUSU1FU1RBTVBDVVJSVkFMIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzRfUkVHX1BIWVNMRUVQV0FJVF9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzRfUkVHOiBQSFlTTEVFUFdBSVQgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzRfUkVHX1BIWVNMRUVQV0FJVF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzRfUkVHOiBQSFlTTEVFUFdBSVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUlhQSVBFUFJPUERFTEFZX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNF9SRUc6IFJYUElQRVBST1BERUxBWSAoQml0IDgpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUlhQSVBFUFJPUERFTEFZX01zayAoMHhmZjAwVUwpICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNF9SRUc6IFJYUElQRVBST1BERUxBWSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF80X1JFR19QSFlBQ0tBVFRSX0RFTV9QVElfUG9zICgxNlVMKSAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF80X1JFRzogUEhZQUNLQVRUUl9ERU1fUFRJIChCaXQgMTYpICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF80X1JFR19QSFlBQ0tBVFRSX0RFTV9QVElfTXNrICgweGYwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF80X1JFRzogUEhZQUNLQVRUUl9ERU1fUFRJIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzRfUkVHX1BIWUFDS0FUVFJfQ05fUG9zICgyMFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzRfUkVHOiBQSFlBQ0tBVFRSX0NOIChCaXQgMjApICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzRfUkVHX1BIWUFDS0FUVFJfQ05fTXNrICgweGYwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzRfUkVHOiBQSFlBQ0tBVFRSX0NOIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzRfUkVHX1BIWUFDS0FUVFJfQ0FMQ0FQX1BvcyAoMjRVTCkgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzRfUkVHOiBQSFlBQ0tBVFRSX0NBTENBUCAoQml0IDI0KSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzRfUkVHX1BIWUFDS0FUVFJfQ0FMQ0FQX01zayAoMHhmMDAwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF80X1JFRzogUEhZQUNLQVRUUl9DQUxDQVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUEhZQUNLQVRUUl9SRl9HUElPX1BJTlNfUG9zICgyOFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNF9SRUc6IFBIWUFDS0FUVFJfUkZfR1BJT19QSU5TIChCaXQgMjgpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUEhZQUNLQVRUUl9SRl9HUElPX1BJTlNfTXNrICgweDcwMDAwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF80X1JFRzogUEhZQUNLQVRUUl9SRl9HUElPX1BJTlMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUEhZQUNLQVRUUl9IU0lfUG9zICgzMVVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNF9SRUc6IFBIWUFDS0FUVFJfSFNJIChCaXQgMzEpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUEhZQUNLQVRUUl9IU0lfTXNrICgweDgwMDAwMDAwVUwpICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNF9SRUc6IFBIWUFDS0FUVFJfSFNJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzVfUkVHX0FDS19SRVNQT05TRV9ERUxBWV9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzVfUkVHOiBBQ0tfUkVTUE9OU0VfREVMQVkgKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzVfUkVHX0FDS19SRVNQT05TRV9ERUxBWV9Nc2sgKDB4ZmZVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzVfUkVHOiBBQ0tfUkVTUE9OU0VfREVMQVkgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfQ0NBU1RBVFdBSVRfUG9zICg4VUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNV9SRUc6IENDQVNUQVRXQUlUIChCaXQgOCkgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfQ0NBU1RBVFdBSVRfTXNrICgweGYwMFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNV9SRUc6IENDQVNUQVRXQUlUIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzVfUkVHX1BIWUNTTUFDQUFUVFJfREVNX1BUSV9Qb3MgKDE2VUwpICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzVfUkVHOiBQSFlDU01BQ0FBVFRSX0RFTV9QVEkgKEJpdCAxNikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF81X1JFR19QSFlDU01BQ0FBVFRSX0RFTV9QVElfTXNrICgweGYwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF81X1JFRzogUEhZQ1NNQUNBQVRUUl9ERU1fUFRJIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzVfUkVHX1BIWUNTTUFDQUFUVFJfQ05fUG9zICgyMFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzVfUkVHOiBQSFlDU01BQ0FBVFRSX0NOIChCaXQgMjApICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzVfUkVHX1BIWUNTTUFDQUFUVFJfQ05fTXNrICgweGYwMDAwMFVMKSAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzVfUkVHOiBQSFlDU01BQ0FBVFRSX0NOIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzVfUkVHX1BIWUNTTUFDQUFUVFJfQ0FMQ0FQX1BvcyAoMjRVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzVfUkVHOiBQSFlDU01BQ0FBVFRSX0NBTENBUCAoQml0IDI0KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzVfUkVHX1BIWUNTTUFDQUFUVFJfQ0FMQ0FQX01zayAoMHhmMDAwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF81X1JFRzogUEhZQ1NNQUNBQVRUUl9DQUxDQVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfUEhZQ1NNQUNBQVRUUl9SRl9HUElPX1BJTlNfUG9zICgyOFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNV9SRUc6IFBIWUNTTUFDQUFUVFJfUkZfR1BJT19QSU5TIChCaXQgMjgpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfUEhZQ1NNQUNBQVRUUl9SRl9HUElPX1BJTlNfTXNrICgweDcwMDAwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF81X1JFRzogUEhZQ1NNQUNBQVRUUl9SRl9HUElPX1BJTlMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfUEhZQ1NNQUNBQVRUUl9IU0lfUG9zICgzMVVMKSAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNV9SRUc6IFBIWUNTTUFDQUFUVFJfSFNJIChCaXQgMzEpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfUEhZQ1NNQUNBQVRUUl9IU0lfTXNrICgweDgwMDAwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF81X1JFRzogUEhZQ1NNQUNBQVRUUl9IU0kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfQ09OVFJPTF82X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNl9SRUdfTElGU1BFUklPRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNl9SRUc6IExJRlNQRVJJT0QgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNl9SRUdfTElGU1BFUklPRF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNl9SRUc6IExJRlNQRVJJT0QgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNl9SRUdfU0lGU1BFUklPRF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNl9SRUc6IFNJRlNQRVJJT0QgKEJpdCA4KSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNl9SRUdfU0lGU1BFUklPRF9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNl9SRUc6IFNJRlNQRVJJT0QgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNl9SRUdfV1VJRlNQRVJJT0RfUG9zICgxNlVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNl9SRUc6IFdVSUZTUEVSSU9EIChCaXQgMTYpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNl9SRUdfV1VJRlNQRVJJT0RfTXNrICgweGZmMDAwMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNl9SRUc6IFdVSUZTUEVSSU9EIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzExX1JFR19NQUNSWFRPVEFMQ1lDTEVUSU1FX1BvcyAoMFVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzExX1JFRzogTUFDUlhUT1RBTENZQ0xFVElNRSAoQml0IDApICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzExX1JFR19NQUNSWFRPVEFMQ1lDTEVUSU1FX01zayAoMHhmZmZmVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xMV9SRUc6IE1BQ1JYVE9UQUxDWUNMRVRJTUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xMV9SRUdfTUFDRElTQ0FSWE9GRlRPUlpfUG9zICgxNlVMKSAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xMV9SRUc6IE1BQ0RJU0NBUlhPRkZUT1JaIChCaXQgMTYpICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xMV9SRUdfTUFDRElTQ0FSWE9GRlRPUlpfTXNrICgweDEwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xMV9SRUc6IE1BQ0RJU0NBUlhPRkZUT1JaIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzExX1JFR19DU01BX0NBX05CX1ZBTF9Qb3MgKDE3VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzExX1JFRzogQ1NNQV9DQV9OQl9WQUwgKEJpdCAxNykgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzExX1JFR19DU01BX0NBX05CX1ZBTF9Nc2sgKDB4ZTAwMDBVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzExX1JFRzogQ1NNQV9DQV9OQl9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHX0NTTUFfQ0FfQk9fVEhSRVNIT0xEX1BvcyAoMjRVTCkgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHOiBDU01BX0NBX0JPX1RIUkVTSE9MRCAoQml0IDI0KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzExX1JFR19DU01BX0NBX0JPX1RIUkVTSE9MRF9Nc2sgKDB4ZmYwMDAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzExX1JFRzogQ1NNQV9DQV9CT19USFJFU0hPTEQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHX0xNQUNSRUFEWTRTTEVFUF9EX1BvcyAoMVVMKSAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHOiBMTUFDUkVBRFk0U0xFRVBfRCAoQml0IDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHX0xNQUNSRUFEWTRTTEVFUF9EX01zayAoMHgyVUwpICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHOiBMTUFDUkVBRFk0U0xFRVBfRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfU1lOQ1RJTUVTVEFNUF9FX1BvcyAoMlVMKSAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc6IFNZTkNUSU1FU1RBTVBfRSAoQml0IDIpICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfU1lOQ1RJTUVTVEFNUF9FX01zayAoMHg0VUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc6IFNZTkNUSU1FU1RBTVBfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfU1lNQk9MVElNRVRIUl9FX1BvcyAoM1VMKSAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc6IFNZTUJPTFRJTUVUSFJfRSAoQml0IDMpICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfU1lNQk9MVElNRVRIUl9FX01zayAoMHg4VUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc6IFNZTUJPTFRJTUVUSFJfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfU1lNQk9MVElNRTJUSFJfRV9Qb3MgKDRVTCkgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc6IFNZTUJPTFRJTUUyVEhSX0UgKEJpdCA0KSAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfU1lNQk9MVElNRTJUSFJfRV9Nc2sgKDB4MTBVTCkgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc6IFNZTUJPTFRJTUUyVEhSX0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHX0dFVEdFTkVSQVRPUlZBTF9FX1BvcyAoNVVMKSAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHOiBHRVRHRU5FUkFUT1JWQUxfRSAoQml0IDUpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHX0dFVEdFTkVSQVRPUlZBTF9FX01zayAoMHgyMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHOiBHRVRHRU5FUkFUT1JWQUxfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfRF9Qb3MgKDZVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFRzogV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfRCAoQml0IDYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX0RfTXNrICgweDQwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc6IFdBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX0QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RJTUVTVEFNUENVUlJQSEFTRVZBTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9USU1FU1RBTVBDVVJSUEhBU0VWQUxfUkVHX1RJTUVTVEFNUENVUlJQSEFTRVZBTF9Qb3MgKDBVTCkgLyohPCBGVERGIEZUREZfVElNRVNUQU1QQ1VSUlBIQVNFVkFMX1JFRzogVElNRVNUQU1QQ1VSUlBIQVNFVkFMIChCaXQgMCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RJTUVTVEFNUENVUlJQSEFTRVZBTF9SRUdfVElNRVNUQU1QQ1VSUlBIQVNFVkFMX01zayAoMHhmZlVMKSAvKiE8IEZUREYgRlRERl9USU1FU1RBTVBDVVJSUEhBU0VWQUxfUkVHOiBUSU1FU1RBTVBDVVJSUEhBU0VWQUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9NQUNUU1RYQUNLREVMQVlWQUxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNUU1RYQUNLREVMQVlWQUxfUkVHX01BQ1RTVFhBQ0tERUxBWVZBTF9Qb3MgKDBVTCkgICAvKiE8IEZUREYgRlRERl9NQUNUU1RYQUNLREVMQVlWQUxfUkVHOiBNQUNUU1RYQUNLREVMQVlWQUwgKEJpdCAwKSAqLworI2RlZmluZSBGVERGX0ZUREZfTUFDVFNUWEFDS0RFTEFZVkFMX1JFR19NQUNUU1RYQUNLREVMQVlWQUxfTXNrICgweGZmZmZVTCkgLyohPCBGVERGIEZUREZfTUFDVFNUWEFDS0RFTEFZVkFMX1JFRzogTUFDVFNUWEFDS0RFTEFZVkFMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUdfTE1BQ1JFQURZNFNMRUVQX01fUG9zICgxVUwpICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUc6IExNQUNSRUFEWTRTTEVFUF9NIChCaXQgMSkgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUdfTE1BQ1JFQURZNFNMRUVQX01fTXNrICgweDJVTCkgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUc6IExNQUNSRUFEWTRTTEVFUF9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHX1NZTkNUSU1FU1RBTVBfTV9Qb3MgKDJVTCkgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHOiBTWU5DVElNRVNUQU1QX00gKEJpdCAyKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHX1NZTkNUSU1FU1RBTVBfTV9Nc2sgKDB4NFVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHOiBTWU5DVElNRVNUQU1QX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUdfU1lNQk9MVElNRVRIUl9NX1BvcyAoM1VMKSAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUc6IFNZTUJPTFRJTUVUSFJfTSAoQml0IDMpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUdfU1lNQk9MVElNRVRIUl9NX01zayAoMHg4VUwpICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUc6IFNZTUJPTFRJTUVUSFJfTSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFR19TWU1CT0xUSU1FMlRIUl9NX1BvcyAoNFVMKSAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFRzogU1lNQk9MVElNRTJUSFJfTSAoQml0IDQpICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFR19TWU1CT0xUSU1FMlRIUl9NX01zayAoMHgxMFVMKSAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFRzogU1lNQk9MVElNRTJUSFJfTSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFR19HRVRHRU5FUkFUT1JWQUxfTV9Qb3MgKDVVTCkgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFRzogR0VUR0VORVJBVE9SVkFMX00gKEJpdCA1KSAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFR19HRVRHRU5FUkFUT1JWQUxfTV9Nc2sgKDB4MjBVTCkgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFRzogR0VUR0VORVJBVE9SVkFMX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUdfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfTV9Qb3MgKDZVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHOiBXQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19NIChCaXQgNikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFR19XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19NX01zayAoMHg0MFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUc6IFdBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE1BQ19FVkVOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0VWRU5UX1JFR19FRFNDQU5SRUFEWV9FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0VWRU5UX1JFRzogRURTQ0FOUkVBRFlfRSAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0VWRU5UX1JFR19FRFNDQU5SRUFEWV9FX01zayAoMHgxVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0VWRU5UX1JFRzogRURTQ0FOUkVBRFlfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfRVZFTlRfUkVHX0NDQVNUQVRfRV9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfRVZFTlRfUkVHOiBDQ0FTVEFUX0UgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfRVZFTlRfUkVHX0NDQVNUQVRfRV9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfRVZFTlRfUkVHOiBDQ0FTVEFUX0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfRVZFTlRfUkVHX1JYVElNRVJFWFBJUkVEX0VfUG9zICgyVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfRVZFTlRfUkVHOiBSWFRJTUVSRVhQSVJFRF9FIChCaXQgMikgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfRVZFTlRfUkVHX1JYVElNRVJFWFBJUkVEX0VfTXNrICgweDRVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfRVZFTlRfUkVHOiBSWFRJTUVSRVhQSVJFRF9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19FVkVOVF9SRUdfQ1NNQV9DQV9CT19USFJfRV9Qb3MgKDNVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19FVkVOVF9SRUc6IENTTUFfQ0FfQk9fVEhSX0UgKEJpdCAzKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19FVkVOVF9SRUdfQ1NNQV9DQV9CT19USFJfRV9Nc2sgKDB4OFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19FVkVOVF9SRUc6IENTTUFfQ0FfQk9fVEhSX0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfTUFTS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BU0tfUkVHX0VEU0NBTlJFQURZX01fUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BU0tfUkVHOiBFRFNDQU5SRUFEWV9NIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BU0tfUkVHX0VEU0NBTlJFQURZX01fTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BU0tfUkVHOiBFRFNDQU5SRUFEWV9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQVNLX1JFR19DQ0FTVEFUX01fUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQVNLX1JFRzogQ0NBU1RBVF9NIChCaXQgMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQVNLX1JFR19DQ0FTVEFUX01fTXNrICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQVNLX1JFRzogQ0NBU1RBVF9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQVNLX1JFR19SWFRJTUVSRVhQSVJFRF9NX1BvcyAoMlVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQVNLX1JFRzogUlhUSU1FUkVYUElSRURfTSAoQml0IDIpICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQVNLX1JFR19SWFRJTUVSRVhQSVJFRF9NX01zayAoMHg0VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQVNLX1JFRzogUlhUSU1FUkVYUElSRURfTSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFTS19SRUdfQ1NNQV9DQV9CT19USFJfTV9Qb3MgKDNVTCkgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFTS19SRUc6IENTTUFfQ0FfQk9fVEhSX00gKEJpdCAzKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFTS19SRUdfQ1NNQV9DQV9CT19USFJfTV9Nc2sgKDB4OFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFTS19SRUc6IENTTUFfQ0FfQk9fVEhSX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfTU9ERSAoQml0IDApICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9NT0RFX01zayAoMHgxVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1BIWV9FTl9Qb3MgKDFVTCkgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9QSFlfRU4gKEJpdCAxKSAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1BIWV9FTl9Nc2sgKDB4MlVMKSAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9QSFlfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9UWF9FTl9Qb3MgKDJVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfVFhfRU4gKEJpdCAyKSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9UWF9FTl9Nc2sgKDB4NFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfVFhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9SWF9FTl9Qb3MgKDNVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfUlhfRU4gKEJpdCAzKSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9SWF9FTl9Nc2sgKDB4OFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfUlhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9SWF9QSVBFX0VOX1BvcyAoNFVMKSAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfUlhfUElQRV9FTiAoQml0IDQpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9SWF9QSVBFX0VOX01zayAoMHgxMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfUlhfUElQRV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX0VEX1JFUVVFU1RfUG9zICg1VUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9FRF9SRVFVRVNUIChCaXQgNSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX0VEX1JFUVVFU1RfTXNrICgweDIwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9FRF9SRVFVRVNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfVFhfRlJNX05SX1BvcyAoNlVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1RYX0ZSTV9OUiAoQml0IDYpICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfVFhfRlJNX05SX01zayAoMHhjMFVMKSAgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1RYX0ZSTV9OUiAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1BUSV9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9QVEkgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1BUSV9Nc2sgKDB4ZjAwVUwpICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9QSFlfQVRUUl9ERU1fUFRJX1BvcyAoMTZVTCkgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1BIWV9BVFRSX0RFTV9QVEkgKEJpdCAxNikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1BIWV9BVFRSX0RFTV9QVElfTXNrICgweGYwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9QSFlfQVRUUl9ERU1fUFRJIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUEhZX0FUVFJfQ05fUG9zICgyMFVMKSAgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1BIWV9BVFRSX0NOIChCaXQgMjApICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9QSFlfQVRUUl9DTl9Nc2sgKDB4ZjAwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9QSFlfQVRUUl9DTiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1BIWV9BVFRSX0NBTENBUF9Qb3MgKDI0VUwpIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9QSFlfQVRUUl9DQUxDQVAgKEJpdCAyNCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1BIWV9BVFRSX0NBTENBUF9Nc2sgKDB4ZjAwMDAwMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfUEhZX0FUVFJfQ0FMQ0FQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUEhZX0FUVFJfUkZfR1BJT19QSU5TX1BvcyAoMjhVTCkgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1BIWV9BVFRSX1JGX0dQSU9fUElOUyAoQml0IDI4KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUEhZX0FUVFJfUkZfR1BJT19QSU5TX01zayAoMHg3MDAwMDAwMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfUEhZX0FUVFJfUkZfR1BJT19QSU5TIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUEhZX0FUVFJfSFNJX1BvcyAoMzFVTCkgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1BIWV9BVFRSX0hTSSAoQml0IDMxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUEhZX0FUVFJfSFNJX01zayAoMHg4MDAwMDAwMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfUEhZX0FUVFJfSFNJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX01BTlVBTF9PU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfT1NfUkVHX0xNQUNfTUFOVUFMX1RYX1NUQVJUX1BvcyAoMFVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfT1NfUkVHOiBMTUFDX01BTlVBTF9UWF9TVEFSVCAoQml0IDApICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfT1NfUkVHX0xNQUNfTUFOVUFMX1RYX1NUQVJUX01zayAoMHgxVUwpICAgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfT1NfUkVHOiBMTUFDX01BTlVBTF9UWF9TVEFSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfTUFOVUFMX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMX1NUQVRVU19SRUdfTE1BQ19NQU5VQUxfQ0NBX1NUQVRfUG9zICgwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMX1NUQVRVU19SRUc6IExNQUNfTUFOVUFMX0NDQV9TVEFUIChCaXQgMCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMX1NUQVRVU19SRUdfTE1BQ19NQU5VQUxfQ0NBX1NUQVRfTXNrICgweDFVTCkgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfU1RBVFVTX1JFRzogTE1BQ19NQU5VQUxfQ0NBX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF9TVEFUVVNfUkVHX0xNQUNfTUFOVUFMX0VEX1NUQVRfUG9zICg4VUwpICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF9TVEFUVVNfUkVHOiBMTUFDX01BTlVBTF9FRF9TVEFUIChCaXQgOCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMX1NUQVRVU19SRUdfTE1BQ19NQU5VQUxfRURfU1RBVF9Nc2sgKDB4ZmYwMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF9TVEFUVVNfUkVHOiBMTUFDX01BTlVBTF9FRF9TVEFUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzdfUkVHX01BQ1dVUEVSSU9EX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzdfUkVHOiBNQUNXVVBFUklPRCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzdfUkVHX01BQ1dVUEVSSU9EX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzdfUkVHOiBNQUNXVVBFUklPRCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzdfUkVHX01BQ0NTTFNBTVBMRVBFUklPRF9Qb3MgKDE2VUwpICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzdfUkVHOiBNQUNDU0xTQU1QTEVQRVJJT0QgKEJpdCAxNikgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzdfUkVHX01BQ0NTTFNBTVBMRVBFUklPRF9Nc2sgKDB4ZmZmZjAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzdfUkVHOiBNQUNDU0xTQU1QTEVQRVJJT0QgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF84X1JFR19NQUNDU0xTVEFSVFNBTVBMRVRJTUVfUG9zICgwVUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF84X1JFRzogTUFDQ1NMU1RBUlRTQU1QTEVUSU1FIChCaXQgMCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF84X1JFR19NQUNDU0xTVEFSVFNBTVBMRVRJTUVfTXNrICgweGZmZmZmZmZmVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF84X1JFRzogTUFDQ1NMU1RBUlRTQU1QTEVUSU1FIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfOV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzlfUkVHX01BQ0NTTERBVEFQRVJJT0RfUG9zICgwVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzlfUkVHOiBNQUNDU0xEQVRBUEVSSU9EIChCaXQgMCkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzlfUkVHX01BQ0NTTERBVEFQRVJJT0RfTXNrICgweGZmZmZVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzlfUkVHOiBNQUNDU0xEQVRBUEVSSU9EIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfOV9SRUdfTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFRfUG9zICgxNlVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfOV9SRUc6IE1BQ0NTTEZSQU1FUEVORElOR1dBSVRUIChCaXQgMTYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfOV9SRUdfTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFRfTXNrICgweGZmZmYwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF85X1JFRzogTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzEwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xMF9SRUdfTUFDV1VSWkNPUlJFQ1RJT05fUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xMF9SRUc6IE1BQ1dVUlpDT1JSRUNUSU9OIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xMF9SRUdfTUFDV1VSWkNPUlJFQ1RJT05fTXNrICgweGZmVUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xMF9SRUc6IE1BQ1dVUlpDT1JSRUNUSU9OIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzEwX1JFR19NQUNDU0xNQVJHSU5SWl9Qb3MgKDE2VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzEwX1JFRzogTUFDQ1NMTUFSR0lOUlogKEJpdCAxNikgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzEwX1JFR19NQUNDU0xNQVJHSU5SWl9Nc2sgKDB4ZjAwMDBVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzEwX1JFRzogTUFDQ1NMTUFSR0lOUlogKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTBfUkVHX01BQ1JaWkVST1ZBTF9Qb3MgKDI4VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMTBfUkVHOiBNQUNSWlpFUk9WQUwgKEJpdCAyOCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTBfUkVHX01BQ1JaWkVST1ZBTF9Nc2sgKDB4ZjAwMDAwMDBVTCkgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMTBfUkVHOiBNQUNSWlpFUk9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0VDVVJJVFlfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8wX1JFR19TRUNUWFJYTl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8wX1JFRzogU0VDVFhSWE4gKEJpdCAxKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8wX1JFR19TRUNUWFJYTl9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8wX1JFRzogU0VDVFhSWE4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8wX1JFR19TRUNFTlRSWV9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8wX1JFRzogU0VDRU5UUlkgKEJpdCA4KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8wX1JFR19TRUNFTlRSWV9Nc2sgKDB4ZjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8wX1JFRzogU0VDRU5UUlkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8wX1JFR19TRUNBTEVOR1RIX1BvcyAoMTZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8wX1JFRzogU0VDQUxFTkdUSCAoQml0IDE2KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8wX1JFR19TRUNBTEVOR1RIX01zayAoMHg3ZjAwMDBVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8wX1JFRzogU0VDQUxFTkdUSCAoQml0ZmllbGQtTWFzazogMHg3ZikgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8wX1JFR19TRUNNTEVOR1RIX1BvcyAoMjRVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8wX1JFRzogU0VDTUxFTkdUSCAoQml0IDI0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8wX1JFR19TRUNNTEVOR1RIX01zayAoMHg3ZjAwMDAwMFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8wX1JFRzogU0VDTUxFTkdUSCAoQml0ZmllbGQtTWFzazogMHg3ZikgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8wX1JFR19TRUNFTkNERUNOX1BvcyAoMzFVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8wX1JFRzogU0VDRU5DREVDTiAoQml0IDMxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8wX1JFR19TRUNFTkNERUNOX01zayAoMHg4MDAwMDAwMFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8wX1JFRzogU0VDRU5DREVDTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0VDVVJJVFlfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8xX1JFR19TRUNBVVRIRkxBR1NfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8xX1JFRzogU0VDQVVUSEZMQUdTIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8xX1JFR19TRUNBVVRIRkxBR1NfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8xX1JFRzogU0VDQVVUSEZMQUdTIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDVVJJVFlfMV9SRUdfU0VDRU5DUkZMQUdTX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDVVJJVFlfMV9SRUc6IFNFQ0VOQ1JGTEFHUyAoQml0IDgpICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDVVJJVFlfMV9SRUdfU0VDRU5DUkZMQUdTX01zayAoMHhmZjAwVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDVVJJVFlfMV9SRUc6IFNFQ0VOQ1JGTEFHUyAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0VDS0VZXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ0tFWV8wX1JFR19TRUNLRVlfMF9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ0tFWV8wX1JFRzogU0VDS0VZXzAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ0tFWV8wX1JFR19TRUNLRVlfMF9Nc2sgICAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ0tFWV8wX1JFRzogU0VDS0VZXzAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1NFQ0tFWV8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNLRVlfMV9SRUdfU0VDS0VZXzFfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNLRVlfMV9SRUc6IFNFQ0tFWV8xIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNLRVlfMV9SRUdfU0VDS0VZXzFfTXNrICAgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNLRVlfMV9SRUc6IFNFQ0tFWV8xIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TRUNLRVlfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDS0VZXzJfUkVHX1NFQ0tFWV8yX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDS0VZXzJfUkVHOiBTRUNLRVlfMiAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDS0VZXzJfUkVHX1NFQ0tFWV8yX01zayAgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDS0VZXzJfUkVHOiBTRUNLRVlfMiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0VDS0VZXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ0tFWV8zX1JFR19TRUNLRVlfM19Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ0tFWV8zX1JFRzogU0VDS0VZXzMgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ0tFWV8zX1JFR19TRUNLRVlfM19Nc2sgICAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ0tFWV8zX1JFRzogU0VDS0VZXzMgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0VDTk9OQ0VfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNOT05DRV8wX1JFR19TRUNOT05DRV8wX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNOT05DRV8wX1JFRzogU0VDTk9OQ0VfMCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNOT05DRV8wX1JFR19TRUNOT05DRV8wX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNOT05DRV8wX1JFRzogU0VDTk9OQ0VfMCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TRUNOT05DRV8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ05PTkNFXzFfUkVHX1NFQ05PTkNFXzFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ05PTkNFXzFfUkVHOiBTRUNOT05DRV8xIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ05PTkNFXzFfUkVHX1NFQ05PTkNFXzFfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ05PTkNFXzFfUkVHOiBTRUNOT05DRV8xIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1NFQ05PTkNFXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDTk9OQ0VfMl9SRUdfU0VDTk9OQ0VfMl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDTk9OQ0VfMl9SRUc6IFNFQ05PTkNFXzIgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDTk9OQ0VfMl9SRUdfU0VDTk9OQ0VfMl9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDTk9OQ0VfMl9SRUc6IFNFQ05PTkNFXzIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0VDTk9OQ0VfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNOT05DRV8zX1JFR19TRUNOT05DRV8zX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNOT05DRV8zX1JFRzogU0VDTk9OQ0VfMyAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNOT05DRV8zX1JFR19TRUNOT05DRV8zX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNOT05DRV8zX1JFRzogU0VDTk9OQ0VfMyAoQml0ZmllbGQtTWFzazogMHhmZikgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0VDVVJJVFlfT1NfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9PU19SRUdfU0VDQUJPUlRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9PU19SRUc6IFNFQ0FCT1JUIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9PU19SRUdfU0VDQUJPUlRfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9PU19SRUc6IFNFQ0FCT1JUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9PU19SRUdfU0VDU1RBUlRfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9PU19SRUc6IFNFQ1NUQVJUIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9PU19SRUdfU0VDU1RBUlRfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9PU19SRUc6IFNFQ1NUQVJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1NFQ1VSSVRZX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9TVEFUVVNfUkVHX1NFQ0JVU1lfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9TVEFUVVNfUkVHOiBTRUNCVVNZIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9TVEFUVVNfUkVHX1NFQ0JVU1lfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9TVEFUVVNfUkVHOiBTRUNCVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDVVJJVFlfU1RBVFVTX1JFR19TRUNBVVRIRkFJTF9Qb3MgKDFVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDVVJJVFlfU1RBVFVTX1JFRzogU0VDQVVUSEZBSUwgKEJpdCAxKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDVVJJVFlfU1RBVFVTX1JFR19TRUNBVVRIRkFJTF9Nc2sgKDB4MlVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDVVJJVFlfU1RBVFVTX1JFRzogU0VDQVVUSEZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1NFQ1VSSVRZX0VWRU5UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9FVkVOVF9SRUdfU0VDUkVBRFlfRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9FVkVOVF9SRUc6IFNFQ1JFQURZX0UgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9FVkVOVF9SRUdfU0VDUkVBRFlfRV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9FVkVOVF9SRUc6IFNFQ1JFQURZX0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TRUNVUklUWV9FVkVOVE1BU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9FVkVOVE1BU0tfUkVHX1NFQ1JFQURZX01fUG9zICgwVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9FVkVOVE1BU0tfUkVHOiBTRUNSRUFEWV9NIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9FVkVOVE1BU0tfUkVHX1NFQ1JFQURZX01fTXNrICgweDFVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9FVkVOVE1BU0tfUkVHOiBTRUNSRUFEWV9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UU0NIX0NPTlRST0xfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFNDSF9DT05UUk9MXzBfUkVHX01BQ1RTVFhBQ0tERUxBWV9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfVFNDSF9DT05UUk9MXzBfUkVHOiBNQUNUU1RYQUNLREVMQVkgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFNDSF9DT05UUk9MXzBfUkVHX01BQ1RTVFhBQ0tERUxBWV9Nc2sgKDB4ZmZmZlVMKSAgICAgLyohPCBGVERGIEZUREZfVFNDSF9DT05UUk9MXzBfUkVHOiBNQUNUU1RYQUNLREVMQVkgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RTQ0hfQ09OVFJPTF8wX1JFR19NQUNUU1JYV0FJVF9Qb3MgKDE2VUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RTQ0hfQ09OVFJPTF8wX1JFRzogTUFDVFNSWFdBSVQgKEJpdCAxNikgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RTQ0hfQ09OVFJPTF8wX1JFR19NQUNUU1JYV0FJVF9Nc2sgKDB4ZmZmZjAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1RTQ0hfQ09OVFJPTF8wX1JFRzogTUFDVFNSWFdBSVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFNDSF9DT05UUk9MXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RTQ0hfQ09OVFJPTF8xX1JFR19NQUNUU1JYVFhfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RTQ0hfQ09OVFJPTF8xX1JFRzogTUFDVFNSWFRYIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RTQ0hfQ09OVFJPTF8xX1JFR19NQUNUU1JYVFhfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RTQ0hfQ09OVFJPTF8xX1JFRzogTUFDVFNSWFRYIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RTQ0hfQ09OVFJPTF8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UU0NIX0NPTlRST0xfMl9SRUdfTUFDVFNSWEFDS0RFTEFZX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9UU0NIX0NPTlRST0xfMl9SRUc6IE1BQ1RTUlhBQ0tERUxBWSAoQml0IDApICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UU0NIX0NPTlRST0xfMl9SRUdfTUFDVFNSWEFDS0RFTEFZX01zayAoMHhmZmZmVUwpICAgICAvKiE8IEZUREYgRlRERl9UU0NIX0NPTlRST0xfMl9SRUc6IE1BQ1RTUlhBQ0tERUxBWSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFNDSF9DT05UUk9MXzJfUkVHX01BQ1RTQUNLV0FJVF9Qb3MgKDE2VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFNDSF9DT05UUk9MXzJfUkVHOiBNQUNUU0FDS1dBSVQgKEJpdCAxNikgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFNDSF9DT05UUk9MXzJfUkVHX01BQ1RTQUNLV0FJVF9Nc2sgKDB4ZmZmZjAwMDBVTCkgICAgLyohPCBGVERGIEZUREZfVFNDSF9DT05UUk9MXzJfUkVHOiBNQUNUU0FDS1dBSVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHX1JYQklUUE9TXzBfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHOiBSWEJJVFBPU18wIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHX1JYQklUUE9TXzBfTXNrICgweDdVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHOiBSWEJJVFBPU18wIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfMV9Qb3MgKDRVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzEgKEJpdCA0KSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfMV9Nc2sgKDB4NzBVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFR19SWEJJVFBPU18yX1BvcyAoOFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRzogUlhCSVRQT1NfMiAoQml0IDgpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFR19SWEJJVFBPU18yX01zayAoMHg3MDBVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRzogUlhCSVRQT1NfMiAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHX1JYQklUUE9TXzNfUG9zICgxMlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHOiBSWEJJVFBPU18zIChCaXQgMTIpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHX1JYQklUUE9TXzNfTXNrICgweDcwMDBVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHOiBSWEJJVFBPU18zIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfNF9Qb3MgKDE2VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzQgKEJpdCAxNikgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfNF9Nc2sgKDB4NzAwMDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFR19SWEJJVFBPU181X1BvcyAoMjBVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRzogUlhCSVRQT1NfNSAoQml0IDIwKSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFR19SWEJJVFBPU181X01zayAoMHg3MDAwMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRzogUlhCSVRQT1NfNSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHX1JYQklUUE9TXzZfUG9zICgyNFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHOiBSWEJJVFBPU182IChCaXQgMjQpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHX1JYQklUUE9TXzZfTXNrICgweDcwMDAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHOiBSWEJJVFBPU182IChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfN19Qb3MgKDI4VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzcgKEJpdCAyOCkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfN19Nc2sgKDB4NzAwMDAwMDBVTCkgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzcgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFR19UWEJJVFBPU18wX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRzogVFhCSVRQT1NfMCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFR19UWEJJVFBPU18wX01zayAoMHg3VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRzogVFhCSVRQT1NfMCAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzFfUG9zICg0VUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU18xIChCaXQgNCkgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzFfTXNrICgweDcwVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU18xIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUdfVFhCSVRQT1NfMl9Qb3MgKDhVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUc6IFRYQklUUE9TXzIgKEJpdCA4KSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUdfVFhCSVRQT1NfMl9Nc2sgKDB4NzAwVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUc6IFRYQklUUE9TXzIgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFR19UWEJJVFBPU18zX1BvcyAoMTJVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRzogVFhCSVRQT1NfMyAoQml0IDEyKSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFR19UWEJJVFBPU18zX01zayAoMHg3MDAwVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRzogVFhCSVRQT1NfMyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzRfUG9zICgxNlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU180IChCaXQgMTYpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzRfTXNrICgweDcwMDAwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU180IChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUdfVFhCSVRQT1NfNV9Qb3MgKDIwVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUc6IFRYQklUUE9TXzUgKEJpdCAyMCkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUdfVFhCSVRQT1NfNV9Nc2sgKDB4NzAwMDAwVUwpICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUc6IFRYQklUUE9TXzUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFR19UWEJJVFBPU182X1BvcyAoMjRVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRzogVFhCSVRQT1NfNiAoQml0IDI0KSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFR19UWEJJVFBPU182X01zayAoMHg3MDAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRzogVFhCSVRQT1NfNiAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzdfUG9zICgyOFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU183IChCaXQgMjgpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzdfTXNrICgweDcwMDAwMDAwVUwpICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU183IChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMl9SRUdfUEhZVFhTVEFSVFVQX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMl9SRUc6IFBIWVRYU1RBUlRVUCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMl9SRUdfUEhZVFhTVEFSVFVQX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMl9SRUc6IFBIWVRYU1RBUlRVUCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHX1BIWVRYTEFURU5DWV9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHOiBQSFlUWExBVEVOQ1kgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHX1BIWVRYTEFURU5DWV9Nc2sgKDB4ZmYwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHOiBQSFlUWExBVEVOQ1kgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFR19QSFlUWEZJTklTSF9Qb3MgKDE2VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFRzogUEhZVFhGSU5JU0ggKEJpdCAxNikgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFR19QSFlUWEZJTklTSF9Nc2sgKDB4ZmYwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFRzogUEhZVFhGSU5JU0ggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFR19QSFlUUlhXQUlUX1BvcyAoMjRVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFRzogUEhZVFJYV0FJVCAoQml0IDI0KSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFR19QSFlUUlhXQUlUX01zayAoMHhmZjAwMDAwMFVMKSAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFRzogUEhZVFJYV0FJVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHX1BIWVJYU1RBUlRVUF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHOiBQSFlSWFNUQVJUVVAgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHX1BIWVJYU1RBUlRVUF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHOiBQSFlSWFNUQVJUVVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18zX1JFR19QSFlSWExBVEVOQ1lfUG9zICg4VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18zX1JFRzogUEhZUlhMQVRFTkNZIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18zX1JFR19QSFlSWExBVEVOQ1lfTXNrICgweGZmMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18zX1JFRzogUEhZUlhMQVRFTkNZIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUdfUEhZRU5BQkxFX1BvcyAoMTZVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUc6IFBIWUVOQUJMRSAoQml0IDE2KSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUdfUEhZRU5BQkxFX01zayAoMHhmZjAwMDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUc6IFBIWUVOQUJMRSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHX1VTRV9MRUdBQ1lfUEhZX0VOX1BvcyAoMjRVTCkgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHOiBVU0VfTEVHQUNZX1BIWV9FTiAoQml0IDI0KSAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHX1VTRV9MRUdBQ1lfUEhZX0VOX01zayAoMHgxMDAwMDAwVUwpIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHOiBVU0VfTEVHQUNZX1BIWV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfREJHUlhUUkFOU1BBUkVOVE1PREVfUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IERCR1JYVFJBTlNQQVJFTlRNT0RFIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfREJHUlhUUkFOU1BBUkVOVE1PREVfTXNrICgweDFVTCkgICAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IERCR1JYVFJBTlNQQVJFTlRNT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19SWEJFQUNPTk9OTFlfUG9zICgxVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogUlhCRUFDT05PTkxZIChCaXQgMSkgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19SWEJFQUNPTk9OTFlfTXNrICgweDJVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogUlhCRUFDT05PTkxZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19SWENPT1JEUkVBTElHTk9OTFlfUG9zICgyVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogUlhDT09SRFJFQUxJR05PTkxZIChCaXQgMikgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19SWENPT1JEUkVBTElHTk9OTFlfTXNrICgweDRVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogUlhDT09SRFJFQUxJR05PTkxZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19SWF9SRUFEX0JVRl9QVFJfUG9zICgzVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogUlhfUkVBRF9CVUZfUFRSIChCaXQgMykgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19SWF9SRUFEX0JVRl9QVFJfTXNrICgweDc4VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogUlhfUkVBRF9CVUZfUFRSIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19ESVNSWEZSTVBFTkRJTkdDQV9Qb3MgKDdVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogRElTUlhGUk1QRU5ESU5HQ0EgKEJpdCA3KSAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19ESVNSWEZSTVBFTkRJTkdDQV9Nc2sgKDB4ODBVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogRElTUlhGUk1QRU5ESU5HQ0EgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX0RJU1JYQUNLUkVRVUVTVENBX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBESVNSWEFDS1JFUVVFU1RDQSAoQml0IDgpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX0RJU1JYQUNLUkVRVUVTVENBX01zayAoMHgxMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBESVNSWEFDS1JFUVVFU1RDQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU0NSQ0VSUk9SX1BvcyAoOVVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NDUkNFUlJPUiAoQml0IDkpICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU0NSQ0VSUk9SX01zayAoMHgyMDBVTCkgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NDUkNFUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfRElTREFUQVJFUVVFU1RDQV9Qb3MgKDEwVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IERJU0RBVEFSRVFVRVNUQ0EgKEJpdCAxMCkgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfRElTREFUQVJFUVVFU1RDQV9Nc2sgKDB4NDAwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IERJU0RBVEFSRVFVRVNUQ0EgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX01BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT05fUG9zICgxMVVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTUkVTRlJBTUVWRVJTSU9OIChCaXQgMTEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX01BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT05fTXNrICgweDgwMFVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTUkVTRlJBTUVWRVJTSU9OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTV1JPTkdEUEFOSURfUG9zICgxMlVMKSAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogTUFDQUxXQVlTUEFTU1dST05HRFBBTklEIChCaXQgMTIpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX01BQ0FMV0FZU1BBU1NXUk9OR0RQQU5JRF9Nc2sgKDB4MTAwMFVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTV1JPTkdEUEFOSUQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX01BQ0FMV0FZU1BBU1NXUk9OR0RBRERSX1BvcyAoMTNVTCkgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTV1JPTkdEQUREUiAoQml0IDEzKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTV1JPTkdEQUREUl9Nc2sgKDB4MjAwMFVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTV1JPTkdEQUREUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU0JFQUNPTldST05HUEFOSURfUG9zICgxNFVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRCAoQml0IDE0KSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRF9Nc2sgKDB4NDAwMFVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU1RPUEFOQ09PUkRJTkFUT1JfUG9zICgxNVVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTVE9QQU5DT09SRElOQVRPUiAoQml0IDE1KSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTVE9QQU5DT09SRElOQVRPUl9Nc2sgKDB4ODAwMFVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTVE9QQU5DT09SRElOQVRPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU0ZSTVRZUEVfUG9zICgxNlVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NGUk1UWVBFIChCaXQgMTYpICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU0ZSTVRZUEVfTXNrICgweGZmMDAwMFVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTRlJNVFlQRSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU1dBS0VVUF9Qb3MgKDI0VUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NXQUtFVVAgKEJpdCAyNCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU1dBS0VVUF9Nc2sgKDB4MTAwMDAwMFVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTV0FLRVVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNQQVNTV0FLRVVQX1BvcyAoMjVVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogTUFDUEFTU1dBS0VVUCAoQml0IDI1KSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNQQVNTV0FLRVVQX01zayAoMHgyMDAwMDAwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogTUFDUEFTU1dBS0VVUCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDSU1QTElDSVRCUk9BRENBU1RfUG9zICgyNlVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0lNUExJQ0lUQlJPQURDQVNUIChCaXQgMjYpICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDSU1QTElDSVRCUk9BRENBU1RfTXNrICgweDQwMDAwMDBVTCkgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogTUFDSU1QTElDSVRCUk9BRENBU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX0RJU1JYQUNLUkVDRUlWRURDQV9Qb3MgKDI3VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBESVNSWEFDS1JFQ0VJVkVEQ0EgKEJpdCAyNykgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX0RJU1JYQUNLUkVDRUlWRURDQV9Nc2sgKDB4ODAwMDAwMFVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBESVNSWEFDS1JFQ0VJVkVEQ0EgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX0VWRU5UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9FVkVOVF9SRUdfUlhTT0ZfRV9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9FVkVOVF9SRUc6IFJYU09GX0UgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9FVkVOVF9SRUdfUlhTT0ZfRV9Nc2sgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9FVkVOVF9SRUc6IFJYU09GX0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9FVkVOVF9SRUdfUlhfT1ZFUkZMT1dfRV9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9FVkVOVF9SRUc6IFJYX09WRVJGTE9XX0UgKEJpdCAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9FVkVOVF9SRUdfUlhfT1ZFUkZMT1dfRV9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9FVkVOVF9SRUc6IFJYX09WRVJGTE9XX0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9FVkVOVF9SRUdfUlhfQlVGX0FWQUlMX0VfUG9zICgyVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9FVkVOVF9SRUc6IFJYX0JVRl9BVkFJTF9FIChCaXQgMikgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9FVkVOVF9SRUdfUlhfQlVGX0FWQUlMX0VfTXNrICgweDRVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9FVkVOVF9SRUc6IFJYX0JVRl9BVkFJTF9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfRVZFTlRfUkVHX1JYQllURV9FX1BvcyAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfRVZFTlRfUkVHOiBSWEJZVEVfRSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfRVZFTlRfUkVHX1JYQllURV9FX01zayAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfRVZFTlRfUkVHOiBSWEJZVEVfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUFTS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUFTS19SRUdfUlhTT0ZfTV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUFTS19SRUc6IFJYU09GX00gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUFTS19SRUdfUlhTT0ZfTV9Nc2sgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUFTS19SRUc6IFJYU09GX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUFTS19SRUdfUlhfT1ZFUkZMT1dfTV9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUFTS19SRUc6IFJYX09WRVJGTE9XX00gKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUFTS19SRUdfUlhfT1ZFUkZMT1dfTV9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUFTS19SRUc6IFJYX09WRVJGTE9XX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUFTS19SRUdfUlhfQlVGX0FWQUlMX01fUG9zICgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUFTS19SRUc6IFJYX0JVRl9BVkFJTF9NIChCaXQgMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUFTS19SRUdfUlhfQlVGX0FWQUlMX01fTXNrICgweDRVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUFTS19SRUc6IFJYX0JVRl9BVkFJTF9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUFTS19SRUdfUlhCWVRFX01fUG9zICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUFTS19SRUc6IFJYQllURV9NIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUFTS19SRUdfUlhCWVRFX01fTXNrICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUFTS19SRUc6IFJYQllURV9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfU1RBVFVTX1JFR19SWF9CVUZGX0lTX0ZVTExfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfU1RBVFVTX1JFRzogUlhfQlVGRl9JU19GVUxMIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfU1RBVFVTX1JFR19SWF9CVUZGX0lTX0ZVTExfTXNrICgweDFVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfU1RBVFVTX1JFRzogUlhfQlVGRl9JU19GVUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfU1RBVFVTX1JFR19SWF9XUklURV9CVUZfUFRSX1BvcyAoMVVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfU1RBVFVTX1JFRzogUlhfV1JJVEVfQlVGX1BUUiAoQml0IDEpICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfU1RBVFVTX1JFR19SWF9XUklURV9CVUZfUFRSX01zayAoMHgxZVVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfU1RBVFVTX1JFRzogUlhfV1JJVEVfQlVGX1BUUiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU1lNQk9MVElNRVNOQVBTSE9UVkFMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NZTUJPTFRJTUVTTkFQU0hPVFZBTF9SRUdfU1lNQk9MVElNRVNOQVBTSE9UVkFMX1BvcyAoMFVMKSAvKiE8IEZUREYgRlRERl9TWU1CT0xUSU1FU05BUFNIT1RWQUxfUkVHOiBTWU1CT0xUSU1FU05BUFNIT1RWQUwgKEJpdCAwKSAqLworI2RlZmluZSBGVERGX0ZUREZfU1lNQk9MVElNRVNOQVBTSE9UVkFMX1JFR19TWU1CT0xUSU1FU05BUFNIT1RWQUxfTXNrICgweGZmZmZmZmZmVUwpIC8qITwgRlRERiBGVERGX1NZTUJPTFRJTUVTTkFQU0hPVFZBTF9SRUc6IFNZTUJPTFRJTUVTTkFQU0hPVFZBTCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfU1RBVFVTX0RFTFRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX1NUQVRVU19ERUxUQV9SRUdfUlhfQlVGRl9JU19GVUxMX0RfUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX1NUQVRVU19ERUxUQV9SRUc6IFJYX0JVRkZfSVNfRlVMTF9EIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX1NUQVRVU19ERUxUQV9SRUdfUlhfQlVGRl9JU19GVUxMX0RfTXNrICgweDFVTCkgICAgIC8qITwgRlRERiBGVERGX1JYX1NUQVRVU19ERUxUQV9SRUc6IFJYX0JVRkZfSVNfRlVMTF9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9TVEFUVVNfTUFTS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfU1RBVFVTX01BU0tfUkVHX1JYX0JVRkZfSVNfRlVMTF9NX1BvcyAoMFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfUlhfU1RBVFVTX01BU0tfUkVHOiBSWF9CVUZGX0lTX0ZVTExfTSAoQml0IDApICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfU1RBVFVTX01BU0tfUkVHX1JYX0JVRkZfSVNfRlVMTF9NX01zayAoMHgxVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfU1RBVFVTX01BU0tfUkVHOiBSWF9CVUZGX0lTX0ZVTExfTSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX0NPTlRST0xfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0NPTlRST0xfMF9SRUdfREJHVFhUUkFOU1BBUkVOVE1PREVfUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX0NPTlRST0xfMF9SRUc6IERCR1RYVFJBTlNQQVJFTlRNT0RFIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0NPTlRST0xfMF9SRUdfREJHVFhUUkFOU1BBUkVOVE1PREVfTXNrICgweDFVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX0NPTlRST0xfMF9SRUc6IERCR1RYVFJBTlNQQVJFTlRNT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfQ09OVFJPTF8wX1JFR19NQUNNQVhCRV9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfQ09OVFJPTF8wX1JFRzogTUFDTUFYQkUgKEJpdCA0KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfQ09OVFJPTF8wX1JFR19NQUNNQVhCRV9Nc2sgKDB4ZjBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfQ09OVFJPTF8wX1JFRzogTUFDTUFYQkUgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfQ09OVFJPTF8wX1JFR19NQUNNSU5CRV9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfQ09OVFJPTF8wX1JFRzogTUFDTUlOQkUgKEJpdCA4KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfQ09OVFJPTF8wX1JFR19NQUNNSU5CRV9Nc2sgKDB4ZjAwVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfQ09OVFJPTF8wX1JFRzogTUFDTUlOQkUgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfQ09OVFJPTF8wX1JFR19NQUNNQVhDU01BQkFDS09GRlNfUG9zICgxMlVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfQ09OVFJPTF8wX1JFRzogTUFDTUFYQ1NNQUJBQ0tPRkZTIChCaXQgMTIpICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfQ09OVFJPTF8wX1JFR19NQUNNQVhDU01BQkFDS09GRlNfTXNrICgweDcwMDBVTCkgICAgLyohPCBGVERGIEZUREZfVFhfQ09OVFJPTF8wX1JFRzogTUFDTUFYQ1NNQUJBQ0tPRkZTIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfRlRERl9DRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfRlRERl9DRV9SRUdfRlRERl9DRV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfRlRERl9DRV9SRUc6IEZUREZfQ0UgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfRlRERl9DRV9SRUdfRlRERl9DRV9Nc2sgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfRlRERl9DRV9SRUc6IEZUREZfQ0UgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfRlRERl9DTV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfRlRERl9DTV9SRUdfRlRERl9DTV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfRlRERl9DTV9SRUc6IEZUREZfQ00gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfRlRERl9DTV9SRUdfRlRERl9DTV9Nc2sgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfRlRERl9DTV9SRUc6IEZUREZfQ00gKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1NZTkNUSU1FU1RBTVBUSFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfU1lOQ1RJTUVTVEFNUFRIUl9SRUdfU1lOQ1RJTUVTVEFNUFRIUl9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfU1lOQ1RJTUVTVEFNUFRIUl9SRUc6IFNZTkNUSU1FU1RBTVBUSFIgKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfU1lOQ1RJTUVTVEFNUFRIUl9SRUdfU1lOQ1RJTUVTVEFNUFRIUl9Nc2sgKDB4MWZmZmZmZlVMKSAvKiE8IEZUREYgRlRERl9TWU5DVElNRVNUQU1QVEhSX1JFRzogU1lOQ1RJTUVTVEFNUFRIUiAoQml0ZmllbGQtTWFzazogMHgxZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1NZTkNUSU1FU1RBTVBWQUxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfU1lOQ1RJTUVTVEFNUFZBTF9SRUdfU1lOQ1RJTUVTVEFNUFZBTF9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfU1lOQ1RJTUVTVEFNUFZBTF9SRUc6IFNZTkNUSU1FU1RBTVBWQUwgKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfU1lOQ1RJTUVTVEFNUFZBTF9SRUdfU1lOQ1RJTUVTVEFNUFZBTF9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBGVERGIEZUREZfU1lOQ1RJTUVTVEFNUFZBTF9SRUc6IFNZTkNUSU1FU1RBTVBWQUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RJTUVSX0NPTlRST0xfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9USU1FUl9DT05UUk9MXzFfUkVHX1NZTkNUSU1FU1RBTVBFTkFfUG9zICgxVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9USU1FUl9DT05UUk9MXzFfUkVHOiBTWU5DVElNRVNUQU1QRU5BIChCaXQgMSkgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9USU1FUl9DT05UUk9MXzFfUkVHX1NZTkNUSU1FU1RBTVBFTkFfTXNrICgweDJVTCkgICAgICAvKiE8IEZUREYgRlRERl9USU1FUl9DT05UUk9MXzFfUkVHOiBTWU5DVElNRVNUQU1QRU5BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX01BQ1RYU1REQUNLRlJNQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTUFDVFhTVERBQ0tGUk1DTlRfUkVHX01BQ1RYU1REQUNLRlJNQ05UX1BvcyAoMFVMKSAgICAgLyohPCBGVERGIEZUREZfTUFDVFhTVERBQ0tGUk1DTlRfUkVHOiBNQUNUWFNUREFDS0ZSTUNOVCAoQml0IDApICAqLworI2RlZmluZSBGVERGX0ZUREZfTUFDVFhTVERBQ0tGUk1DTlRfUkVHX01BQ1RYU1REQUNLRlJNQ05UX01zayAoMHhmZmZmZmZmZlVMKSAvKiE8IEZUREYgRlRERl9NQUNUWFNUREFDS0ZSTUNOVF9SRUc6IE1BQ1RYU1REQUNLRlJNQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTUFDUlhTVERBQ0tGUk1PS0NOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTUFDUlhTVERBQ0tGUk1PS0NOVF9SRUdfTUFDUlhTVERBQ0tGUk1PS0NOVF9Qb3MgKDBVTCkgLyohPCBGVERGIEZUREZfTUFDUlhTVERBQ0tGUk1PS0NOVF9SRUc6IE1BQ1JYU1REQUNLRlJNT0tDTlQgKEJpdCAwKSAqLworI2RlZmluZSBGVERGX0ZUREZfTUFDUlhTVERBQ0tGUk1PS0NOVF9SRUdfTUFDUlhTVERBQ0tGUk1PS0NOVF9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBGVERGIEZUREZfTUFDUlhTVERBQ0tGUk1PS0NOVF9SRUc6IE1BQ1JYU1REQUNLRlJNT0tDTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9NQUNSWEFERFJGQUlMRlJNQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNSWEFERFJGQUlMRlJNQ05UX1JFR19NQUNSWEFERFJGQUlMRlJNQ05UX1BvcyAoMFVMKSAvKiE8IEZUREYgRlRERl9NQUNSWEFERFJGQUlMRlJNQ05UX1JFRzogTUFDUlhBRERSRkFJTEZSTUNOVCAoQml0IDApICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNSWEFERFJGQUlMRlJNQ05UX1JFR19NQUNSWEFERFJGQUlMRlJNQ05UX01zayAoMHhmZmZmZmZmZlVMKSAvKiE8IEZUREYgRlRERl9NQUNSWEFERFJGQUlMRlJNQ05UX1JFRzogTUFDUlhBRERSRkFJTEZSTUNOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9NQUNSWFVOU1VQRlJNQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX01BQ1JYVU5TVVBGUk1DTlRfUkVHX01BQ1JYVU5TVVBGUk1DTlRfUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX01BQ1JYVU5TVVBGUk1DTlRfUkVHOiBNQUNSWFVOU1VQRlJNQ05UIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX01BQ1JYVU5TVVBGUk1DTlRfUkVHX01BQ1JYVU5TVVBGUk1DTlRfTXNrICgweGZmZmZmZmZmVUwpIC8qITwgRlRERiBGVERGX01BQ1JYVU5TVVBGUk1DTlRfUkVHOiBNQUNSWFVOU1VQRlJNQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TWU5DVElNRVNUQU1QUEhBU0VWQUxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMX1JFR19TWU5DVElNRVNUQU1QUEhBU0VWQUxfUG9zICgwVUwpIC8qITwgRlRERiBGVERGX1NZTkNUSU1FU1RBTVBQSEFTRVZBTF9SRUc6IFNZTkNUSU1FU1RBTVBQSEFTRVZBTCAoQml0IDApICovCisjZGVmaW5lIEZUREZfRlRERl9TWU5DVElNRVNUQU1QUEhBU0VWQUxfUkVHX1NZTkNUSU1FU1RBTVBQSEFTRVZBTF9Nc2sgKDB4ZmZVTCkgLyohPCBGVERGIEZUREZfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMX1JFRzogU1lOQ1RJTUVTVEFNUFBIQVNFVkFMIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX01BQ0ZDU0VSUk9SQ09VTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTUFDRkNTRVJST1JDT1VOVF9SRUdfTUFDRkNTRVJST1JDT1VOVF9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfTUFDRkNTRVJST1JDT1VOVF9SRUc6IE1BQ0ZDU0VSUk9SQ09VTlQgKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTUFDRkNTRVJST1JDT1VOVF9SRUdfTUFDRkNTRVJST1JDT1VOVF9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBGVERGIEZUREZfTUFDRkNTRVJST1JDT1VOVF9SRUc6IE1BQ0ZDU0VSUk9SQ09VTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNSRVNFVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDUkVTRVRfUkVHX0xNQUNSRVNFVF9DT05UUk9MX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDUkVTRVRfUkVHOiBMTUFDUkVTRVRfQ09OVFJPTCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDUkVTRVRfUkVHX0xNQUNSRVNFVF9DT05UUk9MX01zayAoMHgxVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDUkVTRVRfUkVHOiBMTUFDUkVTRVRfQ09OVFJPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX1JYX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9SWCAoQml0IDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX1JYX01zayAoMHgyVUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX1RYX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9UWCAoQml0IDIpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX1RYX01zayAoMHg0VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX0FIQl9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9BSEIgKEJpdCAzKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX0FIQl9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9BSEIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDUkVTRVRfUkVHX0xNQUNSRVNFVF9PUkVHX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDUkVTRVRfUkVHOiBMTUFDUkVTRVRfT1JFRyAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDUkVTRVRfUkVHX0xNQUNSRVNFVF9PUkVHX01zayAoMHgxMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDUkVTRVRfUkVHOiBMTUFDUkVTRVRfT1JFRyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX1RTVElNX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9UU1RJTSAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX1RTVElNX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9UU1RJTSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX1NFQ19Qb3MgKDdVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9TRUMgKEJpdCA3KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX1NFQ19Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9TRUMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDUkVTRVRfUkVHX0xNQUNSRVNFVF9DT1VOVF9Qb3MgKDlVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDUkVTRVRfUkVHOiBMTUFDUkVTRVRfQ09VTlQgKEJpdCA5KSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDUkVTRVRfUkVHX0xNQUNSRVNFVF9DT1VOVF9Nc2sgKDB4MjAwVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDUkVTRVRfUkVHOiBMTUFDUkVTRVRfQ09VTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDUkVTRVRfUkVHX0xNQUNSRVNFVF9USU1DVFJMX1BvcyAoMTBVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDUkVTRVRfUkVHOiBMTUFDUkVTRVRfVElNQ1RSTCAoQml0IDEwKSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDUkVTRVRfUkVHX0xNQUNSRVNFVF9USU1DVFJMX01zayAoMHg0MDBVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDUkVTRVRfUkVHOiBMTUFDUkVTRVRfVElNQ1RSTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ0dMT0JSRVNFVF9DT1VOVF9Qb3MgKDE2VUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNHTE9CUkVTRVRfQ09VTlQgKEJpdCAxNikgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ0dMT0JSRVNFVF9DT1VOVF9Nc2sgKDB4MTAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNHTE9CUkVTRVRfQ09VTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfV0FLRVVQX0NPTlRST0xfT1NfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9XQUtFVVBfQ09OVFJPTF9PU19SRUdfV0FLRVVQVElNRVJFTkFCTEVfU0VUX1BvcyAoMFVMKSAvKiE8IEZUREYgRlRERl9XQUtFVVBfQ09OVFJPTF9PU19SRUc6IFdBS0VVUFRJTUVSRU5BQkxFX1NFVCAoQml0IDApICovCisjZGVmaW5lIEZUREZfRlRERl9XQUtFVVBfQ09OVFJPTF9PU19SRUdfV0FLRVVQVElNRVJFTkFCTEVfU0VUX01zayAoMHgxVUwpIC8qITwgRlRERiBGVERGX1dBS0VVUF9DT05UUk9MX09TX1JFRzogV0FLRVVQVElNRVJFTkFCTEVfU0VUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfV0FLRVVQX0NPTlRST0xfT1NfUkVHX1dBS0VVUFRJTUVSRU5BQkxFX0NMRUFSX1BvcyAoMVVMKSAvKiE8IEZUREYgRlRERl9XQUtFVVBfQ09OVFJPTF9PU19SRUc6IFdBS0VVUFRJTUVSRU5BQkxFX0NMRUFSIChCaXQgMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1dBS0VVUF9DT05UUk9MX09TX1JFR19XQUtFVVBUSU1FUkVOQUJMRV9DTEVBUl9Nc2sgKDB4MlVMKSAvKiE8IEZUREYgRlRERl9XQUtFVVBfQ09OVFJPTF9PU19SRUc6IFdBS0VVUFRJTUVSRU5BQkxFX0NMRUFSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU1lNQk9MVElNRVRIUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfU1lNQk9MVElNRVRIUl9SRUdfU1lNQk9MVElNRVRIUl9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU1lNQk9MVElNRVRIUl9SRUc6IFNZTUJPTFRJTUVUSFIgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfU1lNQk9MVElNRVRIUl9SRUdfU1lNQk9MVElNRVRIUl9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgLyohPCBGVERGIEZUREZfU1lNQk9MVElNRVRIUl9SRUc6IFNZTUJPTFRJTUVUSFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1NZTUJPTFRJTUUyVEhSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TWU1CT0xUSU1FMlRIUl9SRUdfU1lNQk9MVElNRTJUSFJfUG9zICgwVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TWU1CT0xUSU1FMlRIUl9SRUc6IFNZTUJPTFRJTUUyVEhSIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TWU1CT0xUSU1FMlRIUl9SRUdfU1lNQk9MVElNRTJUSFJfTXNrICgweGZmZmZmZmZmVUwpICAvKiE8IEZUREYgRlRERl9TWU1CT0xUSU1FMlRIUl9SRUc6IFNZTUJPTFRJTUUyVEhSIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfREVCVUdDT05UUk9MX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfREVCVUdDT05UUk9MX1JFR19EQkdfUlhfSU5QVVRfUG9zICg4VUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfREVCVUdDT05UUk9MX1JFRzogREJHX1JYX0lOUFVUIChCaXQgOCkgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfREVCVUdDT05UUk9MX1JFR19EQkdfUlhfSU5QVVRfTXNrICgweDEwMFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfREVCVUdDT05UUk9MX1JFRzogREJHX1JYX0lOUFVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWEJZVEVfRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhCWVRFX0VfUkVHX1RYQllURV9FX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhCWVRFX0VfUkVHOiBUWEJZVEVfRSAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhCWVRFX0VfUkVHX1RYQllURV9FX01zayAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhCWVRFX0VfUkVHOiBUWEJZVEVfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhCWVRFX0VfUkVHX1RYX0xBU1RfU1lNQk9MX0VfUG9zICgxVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhCWVRFX0VfUkVHOiBUWF9MQVNUX1NZTUJPTF9FIChCaXQgMSkgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhCWVRFX0VfUkVHX1RYX0xBU1RfU1lNQk9MX0VfTXNrICgweDJVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhCWVRFX0VfUkVHOiBUWF9MQVNUX1NZTUJPTF9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWEJZVEVfTV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhCWVRFX01fUkVHX1RYQllURV9NX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhCWVRFX01fUkVHOiBUWEJZVEVfTSAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhCWVRFX01fUkVHX1RYQllURV9NX01zayAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhCWVRFX01fUkVHOiBUWEJZVEVfTSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhCWVRFX01fUkVHX1RYX0xBU1RfU1lNQk9MX01fUG9zICgxVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhCWVRFX01fUkVHOiBUWF9MQVNUX1NZTUJPTF9NIChCaXQgMSkgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhCWVRFX01fUkVHX1RYX0xBU1RfU1lNQk9MX01fTXNrICgweDJVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhCWVRFX01fUkVHOiBUWF9MQVNUX1NZTUJPTF9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX0ZMQUdfU18wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19TXzBfUkVHX1RYX0ZMQUdfU1RBVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19TXzBfUkVHOiBUWF9GTEFHX1NUQVQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19TXzBfUkVHX1RYX0ZMQUdfU1RBVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19TXzBfUkVHOiBUWF9GTEFHX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9FXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfMF9SRUdfVFhfRkxBR19DTEVBUl9FX1BvcyAoMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX0NMRUFSX0VfMF9SRUc6IFRYX0ZMQUdfQ0xFQVJfRSAoQml0IDApICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfMF9SRUdfVFhfRkxBR19DTEVBUl9FX01zayAoMHgxVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX0NMRUFSX0VfMF9SRUc6IFRYX0ZMQUdfQ0xFQVJfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX01fMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8wX1JFR19UWF9GTEFHX0NMRUFSX01fUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8wX1JFRzogVFhfRkxBR19DTEVBUl9NIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8wX1JFR19UWF9GTEFHX0NMRUFSX01fTXNrICgweDFVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8wX1JFRzogVFhfRkxBR19DTEVBUl9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMF9SRUdfVFhfUFJJT1JJVFlfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMF9SRUc6IFRYX1BSSU9SSVRZIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMF9SRUdfVFhfUFJJT1JJVFlfTXNrICgweGZVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMF9SRUc6IFRYX1BSSU9SSVRZIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMF9SRUdfSVNXQUtFVVBfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMF9SRUc6IElTV0FLRVVQIChCaXQgNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMF9SRUdfSVNXQUtFVVBfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMF9SRUc6IElTV0FLRVVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMF9SRUdfUFRJX1RYX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMF9SRUc6IFBUSV9UWCAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMF9SRUdfUFRJX1RYX01zayAoMHhmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMF9SRUc6IFBUSV9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX0ZMQUdfU18xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19TXzFfUkVHX1RYX0ZMQUdfU1RBVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19TXzFfUkVHOiBUWF9GTEFHX1NUQVQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19TXzFfUkVHX1RYX0ZMQUdfU1RBVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19TXzFfUkVHOiBUWF9GTEFHX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9FXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfMV9SRUdfVFhfRkxBR19DTEVBUl9FX1BvcyAoMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX0NMRUFSX0VfMV9SRUc6IFRYX0ZMQUdfQ0xFQVJfRSAoQml0IDApICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfMV9SRUdfVFhfRkxBR19DTEVBUl9FX01zayAoMHgxVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX0NMRUFSX0VfMV9SRUc6IFRYX0ZMQUdfQ0xFQVJfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX01fMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8xX1JFR19UWF9GTEFHX0NMRUFSX01fUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8xX1JFRzogVFhfRkxBR19DTEVBUl9NIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8xX1JFR19UWF9GTEFHX0NMRUFSX01fTXNrICgweDFVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8xX1JFRzogVFhfRkxBR19DTEVBUl9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMV9SRUdfVFhfUFJJT1JJVFlfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMV9SRUc6IFRYX1BSSU9SSVRZIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMV9SRUdfVFhfUFJJT1JJVFlfTXNrICgweGZVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMV9SRUc6IFRYX1BSSU9SSVRZIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMV9SRUdfSVNXQUtFVVBfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMV9SRUc6IElTV0FLRVVQIChCaXQgNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMV9SRUdfSVNXQUtFVVBfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMV9SRUc6IElTV0FLRVVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMV9SRUdfUFRJX1RYX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMV9SRUc6IFBUSV9UWCAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMV9SRUdfUFRJX1RYX01zayAoMHhmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMV9SRUc6IFBUSV9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX0ZMQUdfU18yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19TXzJfUkVHX1RYX0ZMQUdfU1RBVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19TXzJfUkVHOiBUWF9GTEFHX1NUQVQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19TXzJfUkVHX1RYX0ZMQUdfU1RBVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19TXzJfUkVHOiBUWF9GTEFHX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9FXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfMl9SRUdfVFhfRkxBR19DTEVBUl9FX1BvcyAoMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX0NMRUFSX0VfMl9SRUc6IFRYX0ZMQUdfQ0xFQVJfRSAoQml0IDApICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfMl9SRUdfVFhfRkxBR19DTEVBUl9FX01zayAoMHgxVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX0NMRUFSX0VfMl9SRUc6IFRYX0ZMQUdfQ0xFQVJfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX01fMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8yX1JFR19UWF9GTEFHX0NMRUFSX01fUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8yX1JFRzogVFhfRkxBR19DTEVBUl9NIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8yX1JFR19UWF9GTEFHX0NMRUFSX01fTXNrICgweDFVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8yX1JFRzogVFhfRkxBR19DTEVBUl9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMl9SRUdfVFhfUFJJT1JJVFlfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMl9SRUc6IFRYX1BSSU9SSVRZIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMl9SRUdfVFhfUFJJT1JJVFlfTXNrICgweGZVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMl9SRUc6IFRYX1BSSU9SSVRZIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMl9SRUdfSVNXQUtFVVBfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMl9SRUc6IElTV0FLRVVQIChCaXQgNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMl9SRUdfSVNXQUtFVVBfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMl9SRUc6IElTV0FLRVVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMl9SRUdfUFRJX1RYX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMl9SRUc6IFBUSV9UWCAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfMl9SRUdfUFRJX1RYX01zayAoMHhmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfMl9SRUc6IFBUSV9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX0ZMQUdfU18zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19TXzNfUkVHX1RYX0ZMQUdfU1RBVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19TXzNfUkVHOiBUWF9GTEFHX1NUQVQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19TXzNfUkVHX1RYX0ZMQUdfU1RBVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19TXzNfUkVHOiBUWF9GTEFHX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9FXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfM19SRUdfVFhfRkxBR19DTEVBUl9FX1BvcyAoMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX0NMRUFSX0VfM19SRUc6IFRYX0ZMQUdfQ0xFQVJfRSAoQml0IDApICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfM19SRUdfVFhfRkxBR19DTEVBUl9FX01zayAoMHgxVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX0NMRUFSX0VfM19SRUc6IFRYX0ZMQUdfQ0xFQVJfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX01fM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8zX1JFR19UWF9GTEFHX0NMRUFSX01fUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8zX1JFRzogVFhfRkxBR19DTEVBUl9NIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8zX1JFR19UWF9GTEFHX0NMRUFSX01fTXNrICgweDFVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8zX1JFRzogVFhfRkxBR19DTEVBUl9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfUFJJT1JJVFlfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfM19SRUdfVFhfUFJJT1JJVFlfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfM19SRUc6IFRYX1BSSU9SSVRZIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfM19SRUdfVFhfUFJJT1JJVFlfTXNrICgweGZVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfM19SRUc6IFRYX1BSSU9SSVRZIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfM19SRUdfSVNXQUtFVVBfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfM19SRUc6IElTV0FLRVVQIChCaXQgNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfM19SRUdfSVNXQUtFVVBfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfM19SRUc6IElTV0FLRVVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfM19SRUdfUFRJX1RYX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfM19SRUc6IFBUSV9UWCAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUFJJT1JJVFlfM19SRUdfUFRJX1RYX01zayAoMHhmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUFJJT1JJVFlfM19SRUc6IFBUSV9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9TRVRfT1NfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfU0VUX09TX1JFR19UWF9GTEFHX1NFVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfU0VUX09TX1JFRzogVFhfRkxBR19TRVQgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfU0VUX09TX1JFR19UWF9GTEFHX1NFVF9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfU0VUX09TX1JFRzogVFhfRkxBR19TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX0NMRUFSX09TX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfQ0xFQVJfT1NfUkVHX1RYX0ZMQUdfQ0xFQVJfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfQ0xFQVJfT1NfUkVHOiBUWF9GTEFHX0NMRUFSIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfQ0xFQVJfT1NfUkVHX1RYX0ZMQUdfQ0xFQVJfTXNrICgweGZVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfQ0xFQVJfT1NfUkVHOiBUWF9GTEFHX0NMRUFSIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9XQUtFVVBfQ09OVFJPTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfV0FLRVVQX0NPTlRST0xfUkVHX1dBS0VVUElOVFRIUl9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfV0FLRVVQX0NPTlRST0xfUkVHOiBXQUtFVVBJTlRUSFIgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfV0FLRVVQX0NPTlRST0xfUkVHX1dBS0VVUElOVFRIUl9Nc2sgKDB4MWZmZmZmZlVMKSAgICAgLyohPCBGVERGIEZUREZfV0FLRVVQX0NPTlRST0xfUkVHOiBXQUtFVVBJTlRUSFIgKEJpdGZpZWxkLU1hc2s6IDB4MWZmZmZmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1dBS0VVUF9DT05UUk9MX1JFR19XQUtFVVBFTkFCTEVfUG9zICgyOVVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1dBS0VVUF9DT05UUk9MX1JFRzogV0FLRVVQRU5BQkxFIChCaXQgMjkpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1dBS0VVUF9DT05UUk9MX1JFR19XQUtFVVBFTkFCTEVfTXNrICgweDIwMDAwMDAwVUwpICAgIC8qITwgRlRERiBGVERGX1dBS0VVUF9DT05UUk9MX1JFRzogV0FLRVVQRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfV0FLRVVQX0NPTlRST0xfUkVHX1dBS0VVUF9NT0RFX1BvcyAoMzBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfV0FLRVVQX0NPTlRST0xfUkVHOiBXQUtFVVBfTU9ERSAoQml0IDMwKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfV0FLRVVQX0NPTlRST0xfUkVHX1dBS0VVUF9NT0RFX01zayAoMHhjMDAwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfV0FLRVVQX0NPTlRST0xfUkVHOiBXQUtFVVBfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xPTkdfQUREUl8wXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xPTkdfQUREUl8wXzBfUkVHX0VYUF9TQV9MX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xPTkdfQUREUl8wXzBfUkVHOiBFWFBfU0FfTCAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xPTkdfQUREUl8wXzBfUkVHX0VYUF9TQV9MX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX0xPTkdfQUREUl8wXzBfUkVHOiBFWFBfU0FfTCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xPTkdfQUREUl8xXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xPTkdfQUREUl8xXzBfUkVHX0VYUF9TQV9IX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xPTkdfQUREUl8xXzBfUkVHOiBFWFBfU0FfSCAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xPTkdfQUREUl8xXzBfUkVHX0VYUF9TQV9IX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX0xPTkdfQUREUl8xXzBfUkVHOiBFWFBfU0FfSCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0laRV9BTkRfVkFMXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NJWkVfQU5EX1ZBTF8wX1JFR19WQUxJRF9TQV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NJWkVfQU5EX1ZBTF8wX1JFRzogVkFMSURfU0EgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NJWkVfQU5EX1ZBTF8wX1JFR19WQUxJRF9TQV9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NJWkVfQU5EX1ZBTF8wX1JFRzogVkFMSURfU0EgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9TSVpFX0FORF9WQUxfMF9SRUdfU0hPUlRfTE9OR05PVF9Qb3MgKDRVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TSVpFX0FORF9WQUxfMF9SRUc6IFNIT1JUX0xPTkdOT1QgKEJpdCA0KSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TSVpFX0FORF9WQUxfMF9SRUdfU0hPUlRfTE9OR05PVF9Nc2sgKDB4MTBVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9TSVpFX0FORF9WQUxfMF9SRUc6IFNIT1JUX0xPTkdOT1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgc3RydWN0ICdHUF9USU1FUlMnIFBvc2l0aW9uICYgTWFzayAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUF9USU1FUlNfVElNRVIwX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfQ1RSTF9SRUdfVElNMF9DVFJMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfQ1RSTF9SRUc6IFRJTTBfQ1RSTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfQ1RSTF9SRUdfVElNMF9DVFJMX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfQ1RSTF9SRUc6IFRJTTBfQ1RSTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfQ1RSTF9SRUdfVElNMF9DTEtfU0VMX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfQ1RSTF9SRUc6IFRJTTBfQ0xLX1NFTCAoQml0IDEpICAgICAgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfQ1RSTF9SRUdfVElNMF9DTEtfU0VMX01zayAoMHgyVUwpICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfQ1RSTF9SRUc6IFRJTTBfQ0xLX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RJTUVSMF9DVFJMX1JFR19USU0wX0NMS19ESVZfUG9zICgyVUwpICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRJTUVSMF9DVFJMX1JFRzogVElNMF9DTEtfRElWIChCaXQgMikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RJTUVSMF9DVFJMX1JFR19USU0wX0NMS19ESVZfTXNrICgweDRVTCkgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRJTUVSMF9DVFJMX1JFRzogVElNMF9DTEtfRElWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUF9USU1FUlNfVElNRVIwX0NUUkxfUkVHX1BXTV9NT0RFX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVElNRVIwX0NUUkxfUkVHOiBQV01fTU9ERSAoQml0IDMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfVElNRVIwX0NUUkxfUkVHX1BXTV9NT0RFX01zayAoMHg4VUwpICAgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVElNRVIwX0NUUkxfUkVHOiBQV01fTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19USU1FUjBfT05fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUF9USU1FUlNfVElNRVIwX09OX1JFR19USU0wX09OX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVElNRVIwX09OX1JFRzogVElNMF9PTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfVElNRVIwX09OX1JFR19USU0wX09OX01zayAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVElNRVIwX09OX1JFRzogVElNMF9PTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19USU1FUjBfUkVMT0FEX01fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUF9USU1FUlNfVElNRVIwX1JFTE9BRF9NX1JFR19USU0wX01fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVElNRVIwX1JFTE9BRF9NX1JFRzogVElNMF9NIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfVElNRVIwX1JFTE9BRF9NX1JFR19USU0wX01fTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVElNRVIwX1JFTE9BRF9NX1JFRzogVElNMF9NIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX1RJTUVSMF9SRUxPQURfTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfUkVMT0FEX05fUkVHX1RJTTBfTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfUkVMT0FEX05fUkVHOiBUSU0wX04gKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfUkVMT0FEX05fUkVHX1RJTTBfTl9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfUkVMT0FEX05fUkVHOiBUSU0wX04gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX1BXTTJfU1RBUlRfQ1lDTEUgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX1BXTTJfU1RBUlRfQ1lDTEVfU1RBUlRfQ1lDTEVfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFBXTTJfU1RBUlRfQ1lDTEU6IFNUQVJUX0NZQ0xFIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1BXTTJfU1RBUlRfQ1lDTEVfU1RBUlRfQ1lDTEVfTXNrICgweDNmZmZVTCkgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFBXTTJfU1RBUlRfQ1lDTEU6IFNUQVJUX0NZQ0xFIChCaXRmaWVsZC1NYXNrOiAweDNmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19QV00zX1NUQVJUX0NZQ0xFICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQX1RJTUVSU19QV00zX1NUQVJUX0NZQ0xFX1NUQVJUX0NZQ0xFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBQV00zX1NUQVJUX0NZQ0xFOiBTVEFSVF9DWUNMRSAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19QV00zX1NUQVJUX0NZQ0xFX1NUQVJUX0NZQ0xFX01zayAoMHgzZmZmVUwpICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBQV00zX1NUQVJUX0NZQ0xFOiBTVEFSVF9DWUNMRSAoQml0ZmllbGQtTWFzazogMHgzZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUF9USU1FUlNfUFdNNF9TVEFSVF9DWUNMRSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUF9USU1FUlNfUFdNNF9TVEFSVF9DWUNMRV9TVEFSVF9DWUNMRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgUFdNNF9TVEFSVF9DWUNMRTogU1RBUlRfQ1lDTEUgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfUFdNNF9TVEFSVF9DWUNMRV9TVEFSVF9DWUNMRV9Nc2sgKDB4M2ZmZlVMKSAgICAgICAgICAgLyohPCBHUF9USU1FUlMgUFdNNF9TVEFSVF9DWUNMRTogU1RBUlRfQ1lDTEUgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19QV00yX0VORF9DWUNMRSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX1BXTTJfRU5EX0NZQ0xFX0VORF9DWUNMRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFBXTTJfRU5EX0NZQ0xFOiBFTkRfQ1lDTEUgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1BXTTJfRU5EX0NZQ0xFX0VORF9DWUNMRV9Nc2sgKDB4M2ZmZlVMKSAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFBXTTJfRU5EX0NZQ0xFOiBFTkRfQ1lDTEUgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19QV00zX0VORF9DWUNMRSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX1BXTTNfRU5EX0NZQ0xFX0VORF9DWUNMRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFBXTTNfRU5EX0NZQ0xFOiBFTkRfQ1lDTEUgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1BXTTNfRU5EX0NZQ0xFX0VORF9DWUNMRV9Nc2sgKDB4M2ZmZlVMKSAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFBXTTNfRU5EX0NZQ0xFOiBFTkRfQ1lDTEUgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19QV000X0VORF9DWUNMRSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX1BXTTRfRU5EX0NZQ0xFX0VORF9DWUNMRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFBXTTRfRU5EX0NZQ0xFOiBFTkRfQ1lDTEUgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1BXTTRfRU5EX0NZQ0xFX0VORF9DWUNMRV9Nc2sgKDB4M2ZmZlVMKSAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFBXTTRfRU5EX0NZQ0xFOiBFTkRfQ1lDTEUgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19UUklQTEVfUFdNX0ZSRVFVRU5DWSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RSSVBMRV9QV01fRlJFUVVFTkNZX0ZSRVFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRSSVBMRV9QV01fRlJFUVVFTkNZOiBGUkVRIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RSSVBMRV9QV01fRlJFUVVFTkNZX0ZSRVFfTXNrICgweDNmZmZVTCkgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRSSVBMRV9QV01fRlJFUVVFTkNZOiBGUkVRIChCaXRmaWVsZC1NYXNrOiAweDNmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX1RSSVBMRV9QV01fQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQX1RJTUVSU19UUklQTEVfUFdNX0NUUkxfUkVHX1RSSVBMRV9QV01fRU5BQkxFX1BvcyAoMFVMKSAgICAgICAvKiE8IEdQX1RJTUVSUyBUUklQTEVfUFdNX0NUUkxfUkVHOiBUUklQTEVfUFdNX0VOQUJMRSAoQml0IDApICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19UUklQTEVfUFdNX0NUUkxfUkVHX1RSSVBMRV9QV01fRU5BQkxFX01zayAoMHgxVUwpICAgICAvKiE8IEdQX1RJTUVSUyBUUklQTEVfUFdNX0NUUkxfUkVHOiBUUklQTEVfUFdNX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RSSVBMRV9QV01fQ1RSTF9SRUdfU1dfUEFVU0VfRU5fUG9zICgxVUwpICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRSSVBMRV9QV01fQ1RSTF9SRUc6IFNXX1BBVVNFX0VOIChCaXQgMSkgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RSSVBMRV9QV01fQ1RSTF9SRUdfU1dfUEFVU0VfRU5fTXNrICgweDJVTCkgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRSSVBMRV9QV01fQ1RSTF9SRUc6IFNXX1BBVVNFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUF9USU1FUlNfVFJJUExFX1BXTV9DVFJMX1JFR19IV19QQVVTRV9FTl9Qb3MgKDJVTCkgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVFJJUExFX1BXTV9DVFJMX1JFRzogSFdfUEFVU0VfRU4gKEJpdCAyKSAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfVFJJUExFX1BXTV9DVFJMX1JFR19IV19QQVVTRV9FTl9Nc2sgKDB4NFVMKSAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVFJJUExFX1BXTV9DVFJMX1JFRzogSFdfUEFVU0VfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQX1RJTUVSU19UUklQTEVfUFdNX0NUUkxfUkVHX1RSSVBMRV9QV01fQ0xLX1NFTF9Qb3MgKDNVTCkgICAgICAvKiE8IEdQX1RJTUVSUyBUUklQTEVfUFdNX0NUUkxfUkVHOiBUUklQTEVfUFdNX0NMS19TRUwgKEJpdCAzKSAgICovCisjZGVmaW5lIEdQX1RJTUVSU19UUklQTEVfUFdNX0NUUkxfUkVHX1RSSVBMRV9QV01fQ0xLX1NFTF9Nc2sgKDB4OFVMKSAgICAvKiE8IEdQX1RJTUVSUyBUUklQTEVfUFdNX0NUUkxfUkVHOiBUUklQTEVfUFdNX0NMS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUF9USU1FUlNfQlJFQVRIX0NGR19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQX1RJTUVSU19CUkVBVEhfQ0ZHX1JFR19CUlRIX0RJVl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBCUkVBVEhfQ0ZHX1JFRzogQlJUSF9ESVYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19CUkVBVEhfQ0ZHX1JFR19CUlRIX0RJVl9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBCUkVBVEhfQ0ZHX1JFRzogQlJUSF9ESVYgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19CUkVBVEhfQ0ZHX1JFR19CUlRIX1NURVBfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBCUkVBVEhfQ0ZHX1JFRzogQlJUSF9TVEVQIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19CUkVBVEhfQ0ZHX1JFR19CUlRIX1NURVBfTXNrICgweGZmMDBVTCkgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBCUkVBVEhfQ0ZHX1JFRzogQlJUSF9TVEVQIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX0JSRUFUSF9EVVRZX01BWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQX1RJTUVSU19CUkVBVEhfRFVUWV9NQVhfUkVHX0JSVEhfRFVUWV9NQVhfUG9zICgwVUwpICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBCUkVBVEhfRFVUWV9NQVhfUkVHOiBCUlRIX0RVVFlfTUFYIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19CUkVBVEhfRFVUWV9NQVhfUkVHX0JSVEhfRFVUWV9NQVhfTXNrICgweGZmVUwpICAgICAgICAvKiE8IEdQX1RJTUVSUyBCUkVBVEhfRFVUWV9NQVhfUkVHOiBCUlRIX0RVVFlfTUFYIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19CUkVBVEhfRFVUWV9NSU5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUF9USU1FUlNfQlJFQVRIX0RVVFlfTUlOX1JFR19CUlRIX0RVVFlfTUlOX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBHUF9USU1FUlMgQlJFQVRIX0RVVFlfTUlOX1JFRzogQlJUSF9EVVRZX01JTiAoQml0IDApICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfQlJFQVRIX0RVVFlfTUlOX1JFR19CUlRIX0RVVFlfTUlOX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBHUF9USU1FUlMgQlJFQVRIX0RVVFlfTUlOX1JFRzogQlJUSF9EVVRZX01JTiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19CUkVBVEhfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX0JSRUFUSF9DVFJMX1JFR19CUlRIX0VOX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIEJSRUFUSF9DVFJMX1JFRzogQlJUSF9FTiAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX0JSRUFUSF9DVFJMX1JFR19CUlRIX0VOX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIEJSRUFUSF9DVFJMX1JFRzogQlJUSF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX0JSRUFUSF9DVFJMX1JFR19CUlRIX1BXTV9QT0xfUG9zICgxVUwpICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIEJSRUFUSF9DVFJMX1JFRzogQlJUSF9QV01fUE9MIChCaXQgMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX0JSRUFUSF9DVFJMX1JFR19CUlRIX1BXTV9QT0xfTXNrICgweDJVTCkgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIEJSRUFUSF9DVFJMX1JFRzogQlJUSF9QV01fUE9MIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgc3RydWN0ICdHUEFEQycgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUEFEQ19HUF9BRENfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0VOX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19FTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0VOX01zayAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX1NUQVJUX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19TVEFSVCAoQml0IDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX1NUQVJUX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19TVEFSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0NPTlRfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19DT05UIChCaXQgMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0NPTlRfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19DT05UIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0NMS19TRUxfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19DTEtfU0VMIChCaXQgMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0NMS19TRUxfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19DTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0lOVF9Qb3MgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19JTlQgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0lOVF9Nc2sgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19JTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX01JTlRfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19NSU5UIChCaXQgNSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX01JTlRfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19NSU5UIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX1NFX1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19TRSAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX1NFX01zayAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19TRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX01VVEVfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19NVVRFIChCaXQgNykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX01VVEVfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19NVVRFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX1NFTF9Qb3MgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19TRUwgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX1NFTF9Nc2sgICgweDFmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX1NJR05fUG9zICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19TSUdOIChCaXQgMTMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX1NJR05fTXNrICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19TSUdOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0NIT1BfUG9zICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19DSE9QIChCaXQgMTQpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0NIT1BfTXNrICgweDQwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19DSE9QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0xET19aRVJPX1BvcyAoMTVVTCkgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19MRE9fWkVSTyAoQml0IDE1KSAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTF9SRUdfR1BfQURDX0xET19aRVJPX01zayAoMHg4MDAwVUwpICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTF9SRUc6IEdQX0FEQ19MRE9fWkVSTyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NUUkwyX1JFR19HUF9BRENfQVRUTjNYX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NUUkwyX1JFRzogR1BfQURDX0FUVE4zWCAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NUUkwyX1JFR19HUF9BRENfQVRUTjNYX01zayAoMHgxVUwpICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NUUkwyX1JFRzogR1BfQURDX0FUVE4zWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NUUkwyX1JFR19HUF9BRENfSURZTl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NUUkwyX1JFRzogR1BfQURDX0lEWU4gKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NUUkwyX1JFR19HUF9BRENfSURZTl9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NUUkwyX1JFRzogR1BfQURDX0lEWU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NUUkwyX1JFR19HUF9BRENfSTIwVV9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NUUkwyX1JFRzogR1BfQURDX0kyMFUgKEJpdCAyKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NUUkwyX1JFR19HUF9BRENfSTIwVV9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NUUkwyX1JFRzogR1BfQURDX0kyMFUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NUUkwyX1JFR19HUF9BRENfRE1BX0VOX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NUUkwyX1JFRzogR1BfQURDX0RNQV9FTiAoQml0IDMpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NUUkwyX1JFR19HUF9BRENfRE1BX0VOX01zayAoMHg4VUwpICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NUUkwyX1JFRzogR1BfQURDX0RNQV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NUUkwyX1JFR19HUF9BRENfQ09OVl9OUlNfUG9zICg1VUwpICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NUUkwyX1JFRzogR1BfQURDX0NPTlZfTlJTIChCaXQgNSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NUUkwyX1JFR19HUF9BRENfQ09OVl9OUlNfTXNrICgweGUwVUwpICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NUUkwyX1JFRzogR1BfQURDX0NPTlZfTlJTIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19TTVBMX1RJTUVfUG9zICg4VUwpICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfU01QTF9USU1FIChCaXQgOCkgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19TTVBMX1RJTUVfTXNrICgweGYwMFVMKSAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfU01QTF9USU1FIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19TVE9SRV9ERUxfUG9zICgxMlVMKSAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfU1RPUkVfREVMIChCaXQgMTIpICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19TVE9SRV9ERUxfTXNrICgweGYwMDBVTCkgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfU1RPUkVfREVMIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQQURDX0dQX0FEQ19DVFJMM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDNfUkVHX0dQX0FEQ19FTl9ERUxfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDNfUkVHOiBHUF9BRENfRU5fREVMIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDNfUkVHX0dQX0FEQ19FTl9ERUxfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDNfUkVHOiBHUF9BRENfRU5fREVMIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDNfUkVHX0dQX0FEQ19JTlRFUlZBTF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDNfUkVHOiBHUF9BRENfSU5URVJWQUwgKEJpdCA4KSAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDNfUkVHX0dQX0FEQ19JTlRFUlZBTF9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDNfUkVHOiBHUF9BRENfSU5URVJWQUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQQURDX0dQX0FEQ19PRkZQX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19PRkZQX1JFR19HUF9BRENfT0ZGUF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19PRkZQX1JFRzogR1BfQURDX09GRlAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19PRkZQX1JFR19HUF9BRENfT0ZGUF9Nc2sgKDB4M2ZmVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19PRkZQX1JFRzogR1BfQURDX09GRlAgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQQURDX0dQX0FEQ19PRkZOX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19PRkZOX1JFR19HUF9BRENfT0ZGTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19PRkZOX1JFRzogR1BfQURDX09GRk4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19PRkZOX1JFR19HUF9BRENfT0ZGTl9Nc2sgKDB4M2ZmVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19PRkZOX1JFRzogR1BfQURDX09GRk4gKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQQURDX0dQX0FEQ19DTEVBUl9JTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DTEVBUl9JTlRfUkVHX0dQX0FEQ19DTFJfSU5UX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DTEVBUl9JTlRfUkVHOiBHUF9BRENfQ0xSX0lOVCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DTEVBUl9JTlRfUkVHX0dQX0FEQ19DTFJfSU5UX01zayAoMHhmZmZmVUwpICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DTEVBUl9JTlRfUkVHOiBHUF9BRENfQ0xSX0lOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQQURDX0dQX0FEQ19SRVNVTFRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfUkVTVUxUX1JFR19HUF9BRENfVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfUkVTVUxUX1JFRzogR1BfQURDX1ZBTCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfUkVTVUxUX1JFR19HUF9BRENfVkFMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfUkVTVUxUX1JFRzogR1BfQURDX1ZBTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnR1BJTycgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDBfREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwX0RBVEFfUkVHX1AwX0RBVEFfUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwX0RBVEFfUkVHOiBQMF9EQVRBIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwX0RBVEFfUkVHX1AwX0RBVEFfTXNrICAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwX0RBVEFfUkVHOiBQMF9EQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDFfREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxX0RBVEFfUkVHX1AxX0RBVEFfUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxX0RBVEFfUkVHOiBQMV9EQVRBIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxX0RBVEFfUkVHX1AxX0RBVEFfTXNrICAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxX0RBVEFfUkVHOiBQMV9EQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDJfREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AyX0RBVEFfUkVHX1AyX0RBVEFfUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyX0RBVEFfUkVHOiBQMl9EQVRBIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyX0RBVEFfUkVHX1AyX0RBVEFfTXNrICAgICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyX0RBVEFfUkVHOiBQMl9EQVRBIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDNfREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzX0RBVEFfUkVHX1AzX0RBVEFfUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzX0RBVEFfUkVHOiBQM19EQVRBIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzX0RBVEFfUkVHX1AzX0RBVEFfTXNrICAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzX0RBVEFfUkVHOiBQM19EQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDRfREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0X0RBVEFfUkVHX1A0X0RBVEFfUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0X0RBVEFfUkVHOiBQNF9EQVRBIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0X0RBVEFfUkVHX1A0X0RBVEFfTXNrICAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0X0RBVEFfUkVHOiBQNF9EQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUElPX1AwX1NFVF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwX1NFVF9EQVRBX1JFR19QMF9TRVRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwX1NFVF9EQVRBX1JFRzogUDBfU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwX1NFVF9EQVRBX1JFR19QMF9TRVRfTXNrICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwX1NFVF9EQVRBX1JFRzogUDBfU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUElPX1AxX1NFVF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxX1NFVF9EQVRBX1JFR19QMV9TRVRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxX1NFVF9EQVRBX1JFRzogUDFfU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxX1NFVF9EQVRBX1JFR19QMV9TRVRfTXNrICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxX1NFVF9EQVRBX1JFRzogUDFfU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUElPX1AyX1NFVF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AyX1NFVF9EQVRBX1JFR19QMl9TRVRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyX1NFVF9EQVRBX1JFRzogUDJfU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyX1NFVF9EQVRBX1JFR19QMl9TRVRfTXNrICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyX1NFVF9EQVRBX1JFRzogUDJfU0VUIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUElPX1AzX1NFVF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzX1NFVF9EQVRBX1JFR19QM19TRVRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzX1NFVF9EQVRBX1JFRzogUDNfU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzX1NFVF9EQVRBX1JFR19QM19TRVRfTXNrICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzX1NFVF9EQVRBX1JFRzogUDNfU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUElPX1A0X1NFVF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0X1NFVF9EQVRBX1JFR19QNF9TRVRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0X1NFVF9EQVRBX1JFRzogUDRfU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0X1NFVF9EQVRBX1JFR19QNF9TRVRfTXNrICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0X1NFVF9EQVRBX1JFRzogUDRfU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDBfUkVTRVRfREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwX1JFU0VUX0RBVEFfUkVHX1AwX1JFU0VUX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwX1JFU0VUX0RBVEFfUkVHOiBQMF9SRVNFVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwX1JFU0VUX0RBVEFfUkVHX1AwX1JFU0VUX01zayAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwX1JFU0VUX0RBVEFfUkVHOiBQMF9SRVNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDFfUkVTRVRfREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxX1JFU0VUX0RBVEFfUkVHX1AxX1JFU0VUX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxX1JFU0VUX0RBVEFfUkVHOiBQMV9SRVNFVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxX1JFU0VUX0RBVEFfUkVHX1AxX1JFU0VUX01zayAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxX1JFU0VUX0RBVEFfUkVHOiBQMV9SRVNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDJfUkVTRVRfREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AyX1JFU0VUX0RBVEFfUkVHX1AyX1JFU0VUX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyX1JFU0VUX0RBVEFfUkVHOiBQMl9SRVNFVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyX1JFU0VUX0RBVEFfUkVHX1AyX1JFU0VUX01zayAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyX1JFU0VUX0RBVEFfUkVHOiBQMl9SRVNFVCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDNfUkVTRVRfREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzX1JFU0VUX0RBVEFfUkVHX1AzX1JFU0VUX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzX1JFU0VUX0RBVEFfUkVHOiBQM19SRVNFVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzX1JFU0VUX0RBVEFfUkVHX1AzX1JFU0VUX01zayAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzX1JFU0VUX0RBVEFfUkVHOiBQM19SRVNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDRfUkVTRVRfREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0X1JFU0VUX0RBVEFfUkVHX1A0X1JFU0VUX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0X1JFU0VUX0RBVEFfUkVHOiBQNF9SRVNFVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0X1JFU0VUX0RBVEFfUkVHX1A0X1JFU0VUX01zayAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0X1JFU0VUX0RBVEFfUkVHOiBQNF9SRVNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDAwX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwMF9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMF9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMF9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMF9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMF9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMF9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMF9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMF9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMF9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMF9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMF9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMF9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDAxX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwMV9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMV9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMV9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMV9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMV9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMV9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMV9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMV9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMV9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMV9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMV9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMV9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDAyX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwMl9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMl9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMl9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMl9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMl9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMl9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMl9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMl9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMl9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMl9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwMl9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwMl9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDAzX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwM19NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwM19NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwM19NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwM19NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwM19NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwM19NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwM19NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwM19NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwM19NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwM19NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwM19NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwM19NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDA0X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwNF9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNF9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNF9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNF9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNF9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNF9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNF9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNF9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNF9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNF9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNF9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNF9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDA1X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwNV9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNV9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNV9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNV9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNV9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNV9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNV9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNV9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNV9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNV9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNV9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNV9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDA2X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwNl9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNl9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNl9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNl9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNl9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNl9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNl9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNl9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNl9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNl9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwNl9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwNl9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDA3X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwN19NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwN19NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwN19NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwN19NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwN19NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwN19NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwN19NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwN19NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwN19NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwN19NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwN19NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwN19NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDEwX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxMF9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMF9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMF9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMF9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMF9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMF9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMF9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMF9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMF9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMF9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMF9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMF9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDExX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxMV9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMV9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMV9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMV9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMV9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMV9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMV9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMV9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMV9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMV9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMV9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMV9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDEyX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxMl9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMl9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMl9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMl9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMl9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMl9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMl9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMl9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMl9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMl9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxMl9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxMl9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDEzX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxM19NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxM19NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxM19NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxM19NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxM19NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxM19NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxM19NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxM19NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxM19NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxM19NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxM19NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxM19NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDE0X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxNF9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNF9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNF9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNF9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNF9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNF9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNF9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNF9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNF9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNF9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNF9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNF9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDE1X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxNV9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNV9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNV9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNV9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNV9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNV9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNV9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNV9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNV9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNV9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNV9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNV9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDE2X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxNl9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNl9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNl9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNl9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNl9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNl9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNl9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNl9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNl9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNl9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxNl9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxNl9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDE3X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxN19NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxN19NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxN19NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxN19NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxN19NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxN19NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxN19NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxN19NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxN19NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxN19NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxN19NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxN19NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDIwX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AyMF9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMF9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMF9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMF9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMF9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMF9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMF9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMF9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMF9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMF9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMF9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMF9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDIxX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AyMV9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMV9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMV9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMV9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMV9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMV9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMV9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMV9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMV9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMV9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMV9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMV9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDIyX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AyMl9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMl9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMl9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMl9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMl9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMl9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMl9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMl9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMl9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMl9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyMl9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyMl9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDIzX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AyM19NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyM19NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyM19NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyM19NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyM19NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyM19NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyM19NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyM19NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyM19NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyM19NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyM19NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyM19NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDI0X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AyNF9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyNF9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyNF9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyNF9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyNF9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyNF9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyNF9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyNF9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyNF9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyNF9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyNF9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyNF9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDMwX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzMF9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMF9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMF9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMF9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMF9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMF9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMF9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMF9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMF9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMF9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMF9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMF9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDMxX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzMV9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMV9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMV9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMV9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMV9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMV9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMV9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMV9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMV9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMV9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMV9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMV9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDMyX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzMl9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMl9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMl9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMl9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMl9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMl9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMl9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMl9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMl9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMl9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzMl9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzMl9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDMzX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzM19NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzM19NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzM19NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzM19NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzM19NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzM19NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzM19NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzM19NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzM19NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzM19NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzM19NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzM19NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDM0X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzNF9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNF9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNF9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNF9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNF9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNF9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNF9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNF9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNF9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNF9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNF9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNF9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDM1X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzNV9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNV9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNV9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNV9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNV9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNV9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNV9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNV9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNV9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNV9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNV9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNV9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDM2X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzNl9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNl9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNl9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNl9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNl9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNl9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNl9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNl9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNl9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNl9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzNl9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzNl9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDM3X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzN19NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzN19NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzN19NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzN19NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzN19NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzN19NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzN19NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzN19NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzN19NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzN19NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzN19NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzN19NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDQwX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0MF9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MF9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0MF9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MF9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0MF9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MF9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0MF9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MF9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0MF9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MF9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0MF9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MF9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDQxX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0MV9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MV9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0MV9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MV9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0MV9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MV9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0MV9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MV9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0MV9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MV9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0MV9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0MV9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDQyX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0Ml9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Ml9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0Ml9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Ml9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0Ml9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Ml9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0Ml9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Ml9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0Ml9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Ml9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0Ml9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Ml9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDQzX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0M19NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0M19NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0M19NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0M19NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0M19NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0M19NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0M19NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0M19NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0M19NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0M19NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0M19NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0M19NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDQ0X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0NF9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NF9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0NF9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NF9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0NF9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NF9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0NF9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NF9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0NF9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NF9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0NF9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NF9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDQ1X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0NV9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NV9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0NV9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NV9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0NV9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NV9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0NV9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NV9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0NV9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NV9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0NV9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0NV9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDQ2X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0Nl9NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Nl9NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0Nl9NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Nl9NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0Nl9NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Nl9NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0Nl9NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Nl9NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0Nl9NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Nl9NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0Nl9NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0Nl9NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDQ3X01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0N19NT0RFX1JFR19QSURfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0N19NT0RFX1JFRzogUElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0N19NT0RFX1JFR19QSURfTXNrICAgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0N19NT0RFX1JFRzogUElEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0N19NT0RFX1JFR19QVVBEX1BvcyAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0N19NT0RFX1JFRzogUFVQRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0N19NT0RFX1JFR19QVVBEX01zayAgICAgICAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0N19NT0RFX1JFRzogUFVQRCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0N19NT0RFX1JFR19QUE9EX1BvcyAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0N19NT0RFX1JFRzogUFBPRCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0N19NT0RFX1JFR19QUE9EX01zayAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0N19NT0RFX1JFRzogUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDBfUEFEUFdSX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AwX1BBRFBXUl9DVFJMX1JFR19QMF9PVVRfQ1RSTF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwX1BBRFBXUl9DVFJMX1JFRzogUDBfT1VUX0NUUkwgKEJpdCA2KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AwX1BBRFBXUl9DVFJMX1JFR19QMF9PVVRfQ1RSTF9Nc2sgKDB4YzBVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFAwX1BBRFBXUl9DVFJMX1JFRzogUDBfT1VUX0NUUkwgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDFfUEFEUFdSX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AxX1BBRFBXUl9DVFJMX1JFR19QMV9PVVRfQ1RSTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxX1BBRFBXUl9DVFJMX1JFRzogUDFfT1VUX0NUUkwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AxX1BBRFBXUl9DVFJMX1JFR19QMV9PVVRfQ1RSTF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFAxX1BBRFBXUl9DVFJMX1JFRzogUDFfT1VUX0NUUkwgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDJfUEFEUFdSX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AyX1BBRFBXUl9DVFJMX1JFR19QMl9PVVRfQ1RSTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyX1BBRFBXUl9DVFJMX1JFRzogUDJfT1VUX0NUUkwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AyX1BBRFBXUl9DVFJMX1JFR19QMl9PVVRfQ1RSTF9Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFAyX1BBRFBXUl9DVFJMX1JFRzogUDJfT1VUX0NUUkwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDNfUEFEUFdSX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1AzX1BBRFBXUl9DVFJMX1JFR19QM19PVVRfQ1RSTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzX1BBRFBXUl9DVFJMX1JFRzogUDNfT1VUX0NUUkwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1AzX1BBRFBXUl9DVFJMX1JFR19QM19PVVRfQ1RSTF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFAzX1BBRFBXUl9DVFJMX1JFRzogUDNfT1VUX0NUUkwgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDRfUEFEUFdSX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1A0X1BBRFBXUl9DVFJMX1JFR19QNF9PVVRfQ1RSTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0X1BBRFBXUl9DVFJMX1JFRzogUDRfT1VUX0NUUkwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1A0X1BBRFBXUl9DVFJMX1JFR19QNF9PVVRfQ1RSTF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFA0X1BBRFBXUl9DVFJMX1JFRzogUDRfT1VUX0NUUkwgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fR1BJT19DTEtfU0VMICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX0dQSU9fQ0xLX1NFTF9GVU5DX0NMT0NLX1NFTF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEdQSU9fQ0xLX1NFTDogRlVOQ19DTE9DS19TRUwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0dQSU9fQ0xLX1NFTF9GVU5DX0NMT0NLX1NFTF9Nc2sgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEdQSU9fQ0xLX1NFTDogRlVOQ19DTE9DS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19CSVNUX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfUkFNX0JJU1RfQ09ORklHX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFJBTV9CSVNUX0NPTkZJRyAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfUkFNX0JJU1RfQ09ORklHX01zayAoMHgzVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFJBTV9CSVNUX0NPTkZJRyAoQml0ZmllbGQtTWFzazogMHgwMykgICAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfUkFNX0JJU1RfUEFUVEVSTl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFJBTV9CSVNUX1BBVFRFUk4gKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfUkFNX0JJU1RfUEFUVEVSTl9Nc2sgKDB4Y1VMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFJBTV9CSVNUX1BBVFRFUk4gKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfUk9NQklTVF9FTkFCTEVfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFJPTUJJU1RfRU5BQkxFIChCaXQgNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfUk9NQklTVF9FTkFCTEVfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFJPTUJJU1RfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfUkFNQklTVF9FTkFCTEVfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFJBTUJJU1RfRU5BQkxFIChCaXQgNSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfUkFNQklTVF9FTkFCTEVfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFJBTUJJU1RfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfU1lTUkFNQklTVF9FTkFCTEVfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFNZU1JBTUJJU1RfRU5BQkxFIChCaXQgNikgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfU1lTUkFNQklTVF9FTkFCTEVfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFNZU1JBTUJJU1RfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfU0hPV19CSVNUX1BvcyAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFNIT1dfQklTVCAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0JJU1RfQ1RSTF9SRUdfU0hPV19CSVNUX01zayAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIEJJU1RfQ1RSTF9SRUc6IFNIT1dfQklTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfU1lTUkFNX0JJU1RfTElORV9GQUlMX1BvcyAoMFVMKSAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFNZU1JBTV9CSVNUX0xJTkVfRkFJTCAoQml0IDApICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfU1lTUkFNX0JJU1RfTElORV9GQUlMX01zayAoMHgxVUwpICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFNZU1JBTV9CSVNUX0xJTkVfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1NZU1JBTV9CSVNUX0ZBSUxfUG9zICgxVUwpICAgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBTWVNSQU1fQklTVF9GQUlMIChCaXQgMSkgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1NZU1JBTV9CSVNUX0ZBSUxfTXNrICgweDJVTCkgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBTWVNSQU1fQklTVF9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfU1lTUkFNX0JJU1RfQlVTWV9Qb3MgKDJVTCkgICAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFNZU1JBTV9CSVNUX0JVU1kgKEJpdCAyKSAgICAgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfU1lTUkFNX0JJU1RfQlVTWV9Nc2sgKDB4NFVMKSAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFNZU1JBTV9CSVNUX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19DVFJBTV9CSVNUX0xJTkVfRkFJTF9Qb3MgKDNVTCkgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogQ1RSQU1fQklTVF9MSU5FX0ZBSUwgKEJpdCAzKSAgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19DVFJBTV9CSVNUX0xJTkVfRkFJTF9Nc2sgKDB4OFVMKSAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogQ1RSQU1fQklTVF9MSU5FX0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19DVFJBTV9CSVNUX0ZBSUxfUG9zICg0VUwpICAgICAgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogQ1RSQU1fQklTVF9GQUlMIChCaXQgNCkgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19DVFJBTV9CSVNUX0ZBSUxfTXNrICgweDEwVUwpICAgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogQ1RSQU1fQklTVF9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfQ1RSQU1fQklTVF9CVVNZX1BvcyAoNVVMKSAgICAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IENUUkFNX0JJU1RfQlVTWSAoQml0IDUpICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfQ1RSQU1fQklTVF9CVVNZX01zayAoMHgyMFVMKSAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IENUUkFNX0JJU1RfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX0NEUkFNX0JJU1RfTElORV9GQUlMX1BvcyAoNlVMKSAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBDRFJBTV9CSVNUX0xJTkVfRkFJTCAoQml0IDYpICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX0NEUkFNX0JJU1RfTElORV9GQUlMX01zayAoMHg0MFVMKSAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBDRFJBTV9CSVNUX0xJTkVfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX0NEUkFNX0JJU1RfRkFJTF9Qb3MgKDdVTCkgICAgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBDRFJBTV9CSVNUX0ZBSUwgKEJpdCA3KSAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX0NEUkFNX0JJU1RfRkFJTF9Nc2sgKDB4ODBVTCkgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBDRFJBTV9CSVNUX0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19DRFJBTV9CSVNUX0JVU1lfUG9zICg4VUwpICAgICAgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogQ0RSQU1fQklTVF9CVVNZIChCaXQgOCkgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19DRFJBTV9CSVNUX0JVU1lfTXNrICgweDEwMFVMKSAgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogQ0RSQU1fQklTVF9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfVVNCUkFNX0JJU1RfTElORV9GQUlMX1BvcyAoOVVMKSAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFVTQlJBTV9CSVNUX0xJTkVfRkFJTCAoQml0IDkpICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfVVNCUkFNX0JJU1RfTElORV9GQUlMX01zayAoMHgyMDBVTCkgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFVTQlJBTV9CSVNUX0xJTkVfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1VTQlJBTV9CSVNUX0ZBSUxfUG9zICgxMFVMKSAgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBVU0JSQU1fQklTVF9GQUlMIChCaXQgMTApICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1VTQlJBTV9CSVNUX0ZBSUxfTXNrICgweDQwMFVMKSAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBVU0JSQU1fQklTVF9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfVVNCUkFNX0JJU1RfQlVTWV9Qb3MgKDExVUwpICAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFVTQlJBTV9CSVNUX0JVU1kgKEJpdCAxMSkgICAgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfVVNCUkFNX0JJU1RfQlVTWV9Nc2sgKDB4ODAwVUwpICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFVTQlJBTV9CSVNUX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19RU1BJUkFNX0JJU1RfTElORV9GQUlMX1BvcyAoMTJVTCkgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogUVNQSVJBTV9CSVNUX0xJTkVfRkFJTCAoQml0IDEyKSAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19RU1BJUkFNX0JJU1RfTElORV9GQUlMX01zayAoMHgxMDAwVUwpICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogUVNQSVJBTV9CSVNUX0xJTkVfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1FTUElSQU1fQklTVF9GQUlMX1BvcyAoMTNVTCkgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBRU1BJUkFNX0JJU1RfRkFJTCAoQml0IDEzKSAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1FTUElSQU1fQklTVF9GQUlMX01zayAoMHgyMDAwVUwpICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBRU1BJUkFNX0JJU1RfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1FTUElSQU1fQklTVF9CVVNZX1BvcyAoMTRVTCkgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBRU1BJUkFNX0JJU1RfQlVTWSAoQml0IDE0KSAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1FTUElSQU1fQklTVF9CVVNZX01zayAoMHg0MDAwVUwpICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBRU1BJUkFNX0JJU1RfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1JPTV9CSVNUX0JVU1lfUG9zICgxNVVMKSAgICAgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBST01fQklTVF9CVVNZIChCaXQgMTUpICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1JPTV9CSVNUX0JVU1lfTXNrICgweDgwMDBVTCkgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBST01fQklTVF9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfRlRERl9UWFJBTV9CSVNUX0xJTkVfRkFJTF9Qb3MgKDBVTCkgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEZUREZfVFhSQU1fQklTVF9MSU5FX0ZBSUwgKEJpdCAwKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfRlRERl9UWFJBTV9CSVNUX0xJTkVfRkFJTF9Nc2sgKDB4MVVMKSAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEZUREZfVFhSQU1fQklTVF9MSU5FX0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19GVERGX1RYUkFNX0JJU1RfRkFJTF9Qb3MgKDFVTCkgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRlRERl9UWFJBTV9CSVNUX0ZBSUwgKEJpdCAxKSAgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19GVERGX1RYUkFNX0JJU1RfRkFJTF9Nc2sgKDB4MlVMKSAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRlRERl9UWFJBTV9CSVNUX0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19GVERGX1RYUkFNX0JJU1RfQlVTWV9Qb3MgKDJVTCkgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRlRERl9UWFJBTV9CSVNUX0JVU1kgKEJpdCAyKSAgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19GVERGX1RYUkFNX0JJU1RfQlVTWV9Nc2sgKDB4NFVMKSAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRlRERl9UWFJBTV9CSVNUX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19GVERGX1JYUkFNX0JJU1RfTElORV9GQUlMX1BvcyAoM1VMKSAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRlRERl9SWFJBTV9CSVNUX0xJTkVfRkFJTCAoQml0IDMpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19GVERGX1JYUkFNX0JJU1RfTElORV9GQUlMX01zayAoMHg4VUwpICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRlRERl9SWFJBTV9CSVNUX0xJTkVfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0ZUREZfUlhSQU1fQklTVF9GQUlMX1BvcyAoNFVMKSAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBGVERGX1JYUkFNX0JJU1RfRkFJTCAoQml0IDQpICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0ZUREZfUlhSQU1fQklTVF9GQUlMX01zayAoMHgxMFVMKSAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBGVERGX1JYUkFNX0JJU1RfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0ZUREZfUlhSQU1fQklTVF9CVVNZX1BvcyAoNVVMKSAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBGVERGX1JYUkFNX0JJU1RfQlVTWSAoQml0IDUpICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0ZUREZfUlhSQU1fQklTVF9CVVNZX01zayAoMHgyMFVMKSAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBGVERGX1JYUkFNX0JJU1RfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0VDQ19DT0RFUkFNX0JJU1RfTElORV9GQUlMX1BvcyAoNlVMKSAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBFQ0NfQ09ERVJBTV9CSVNUX0xJTkVfRkFJTCAoQml0IDYpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19FQ0NfQ09ERVJBTV9CSVNUX0xJTkVfRkFJTF9Nc2sgKDB4NDBVTCkgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEVDQ19DT0RFUkFNX0JJU1RfTElORV9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfRUNDX0NPREVSQU1fQklTVF9GQUlMX1BvcyAoN1VMKSAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEVDQ19DT0RFUkFNX0JJU1RfRkFJTCAoQml0IDcpICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfRUNDX0NPREVSQU1fQklTVF9GQUlMX01zayAoMHg4MFVMKSAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEVDQ19DT0RFUkFNX0JJU1RfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0VDQ19DT0RFUkFNX0JJU1RfQlVTWV9Qb3MgKDhVTCkgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBFQ0NfQ09ERVJBTV9CSVNUX0JVU1kgKEJpdCA4KSAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0VDQ19DT0RFUkFNX0JJU1RfQlVTWV9Nc2sgKDB4MTAwVUwpICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBFQ0NfQ09ERVJBTV9CSVNUX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19FQ0NfVENNUkFNX0JJU1RfTElORV9GQUlMX1BvcyAoOVVMKSAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRUNDX1RDTVJBTV9CSVNUX0xJTkVfRkFJTCAoQml0IDkpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19FQ0NfVENNUkFNX0JJU1RfTElORV9GQUlMX01zayAoMHgyMDBVTCkgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEVDQ19UQ01SQU1fQklTVF9MSU5FX0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19FQ0NfVENNUkFNX0JJU1RfRkFJTF9Qb3MgKDEwVUwpICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRUNDX1RDTVJBTV9CSVNUX0ZBSUwgKEJpdCAxMCkgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19FQ0NfVENNUkFNX0JJU1RfRkFJTF9Nc2sgKDB4NDAwVUwpICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRUNDX1RDTVJBTV9CSVNUX0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19FQ0NfVENNUkFNX0JJU1RfQlVTWV9Qb3MgKDExVUwpICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRUNDX1RDTVJBTV9CSVNUX0JVU1kgKEJpdCAxMSkgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19FQ0NfVENNUkFNX0JJU1RfQlVTWV9Nc2sgKDB4ODAwVUwpICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRUNDX1RDTVJBTV9CSVNUX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19DUllQVE9SQU1fQklTVF9MSU5FX0ZBSUxfUG9zICgxMlVMKSAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogQ1JZUFRPUkFNX0JJU1RfTElORV9GQUlMIChCaXQgMTIpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19DUllQVE9SQU1fQklTVF9MSU5FX0ZBSUxfTXNrICgweDEwMDBVTCkgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IENSWVBUT1JBTV9CSVNUX0xJTkVfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0NSWVBUT1JBTV9CSVNUX0ZBSUxfUG9zICgxM1VMKSAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBDUllQVE9SQU1fQklTVF9GQUlMIChCaXQgMTMpICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0NSWVBUT1JBTV9CSVNUX0ZBSUxfTXNrICgweDIwMDBVTCkgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBDUllQVE9SQU1fQklTVF9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfQ1JZUFRPUkFNX0JJU1RfQlVTWV9Qb3MgKDE0VUwpICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IENSWVBUT1JBTV9CSVNUX0JVU1kgKEJpdCAxNCkgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfQ1JZUFRPUkFNX0JJU1RfQlVTWV9Nc2sgKDB4NDAwMFVMKSAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IENSWVBUT1JBTV9CSVNUX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUElPX1JBTUJJU1RfU1RBVFVTM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMzX1JFR19GVERGX0ZQUkFNX0JJU1RfTElORV9GQUlMX1BvcyAoMFVMKSAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMzX1JFRzogRlRERl9GUFJBTV9CSVNUX0xJTkVfRkFJTCAoQml0IDApICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMzX1JFR19GVERGX0ZQUkFNX0JJU1RfTElORV9GQUlMX01zayAoMHgxVUwpICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMzX1JFRzogRlRERl9GUFJBTV9CSVNUX0xJTkVfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzNfUkVHX0ZUREZfRlBSQU1fQklTVF9GQUlMX1BvcyAoMVVMKSAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzNfUkVHOiBGVERGX0ZQUkFNX0JJU1RfRkFJTCAoQml0IDEpICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzNfUkVHX0ZUREZfRlBSQU1fQklTVF9GQUlMX01zayAoMHgyVUwpICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzNfUkVHOiBGVERGX0ZQUkFNX0JJU1RfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzNfUkVHX0ZUREZfRlBSQU1fQklTVF9CVVNZX1BvcyAoMlVMKSAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzNfUkVHOiBGVERGX0ZQUkFNX0JJU1RfQlVTWSAoQml0IDIpICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzNfUkVHX0ZUREZfRlBSQU1fQklTVF9CVVNZX01zayAoMHg0VUwpICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzNfUkVHOiBGVERGX0ZQUkFNX0JJU1RfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUk9NQklTVF9SRVNVTFRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BJT19ST01CSVNUX1JFU1VMVExfUkVHX1JPTUJJU1RfUkVTVUxUTF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgR1BJTyBST01CSVNUX1JFU1VMVExfUkVHOiBST01CSVNUX1JFU1VMVEwgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ST01CSVNUX1JFU1VMVExfUkVHX1JPTUJJU1RfUkVTVUxUTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgIC8qITwgR1BJTyBST01CSVNUX1JFU1VMVExfUkVHOiBST01CSVNUX1JFU1VMVEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUk9NQklTVF9SRVNVTFRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BJT19ST01CSVNUX1JFU1VMVEhfUkVHX1JPTUJJU1RfUkVTVUxUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgR1BJTyBST01CSVNUX1JFU1VMVEhfUkVHOiBST01CSVNUX1JFU1VMVEggKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ST01CSVNUX1JFU1VMVEhfUkVHX1JPTUJJU1RfUkVTVUxUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgIC8qITwgR1BJTyBST01CSVNUX1JFU1VMVEhfUkVHOiBST01CSVNUX1JFU1VMVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fVEVTVF9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkxfUkVHX1NIT1dfQ0xPQ0tTX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkxfUkVHOiBTSE9XX0NMT0NLUyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkxfUkVHX1NIT1dfQ0xPQ0tTX01zayAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkxfUkVHOiBTSE9XX0NMT0NLUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkxfUkVHX0VOQUJMRV9SRlBUX1BvcyAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkxfUkVHOiBFTkFCTEVfUkZQVCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkxfUkVHX0VOQUJMRV9SRlBUX01zayAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkxfUkVHOiBFTkFCTEVfUkZQVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkxfUkVHX1NIT1dfUExMX1RFU1RfT1VUX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkxfUkVHOiBTSE9XX1BMTF9URVNUX09VVCAoQml0IDIpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkxfUkVHX1NIT1dfUExMX1RFU1RfT1VUX01zayAoMHg0VUwpICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkxfUkVHOiBTSE9XX1BMTF9URVNUX09VVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkxfUkVHX1NIT1dfRENEQ19URVNUQlVTX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkxfUkVHOiBTSE9XX0RDRENfVEVTVEJVUyAoQml0IDMpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkxfUkVHX1NIT1dfRENEQ19URVNUQlVTX01zayAoMHg4VUwpICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkxfUkVHOiBTSE9XX0RDRENfVEVTVEJVUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkxfUkVHX1hUQUwxNk1fQ0FQX1RFU1RfRU5fUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkxfUkVHOiBYVEFMMTZNX0NBUF9URVNUX0VOIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkxfUkVHX1hUQUwxNk1fQ0FQX1RFU1RfRU5fTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkxfUkVHOiBYVEFMMTZNX0NBUF9URVNUX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19JRl9ST19Qb3MgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfSUZfUk8gKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19JRl9ST19Nc2sgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfSUZfUk8gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfUExMX1RTVF9NT0RFX1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFBMTF9UU1RfTU9ERSAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfUExMX1RTVF9NT0RFX01zayAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFBMTF9UU1RfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19UWERBQ19NT0RfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfVFhEQUNfTU9EIChCaXQgNykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19UWERBQ19NT0RfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfVFhEQUNfTU9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19QV1JfVFNUX09VVF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfUFdSX1RTVF9PVVQgKEJpdCA4KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19QV1JfVFNUX09VVF9Nc2sgKDB4NzAwVUwpICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfUFdSX1RTVF9PVVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfWFRBTDE2TV9UU1RfU1lTX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFhUQUwxNk1fVFNUX1NZUyAoQml0IDEyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfWFRBTDE2TV9UU1RfU1lTX01zayAoMHgzMDAwVUwpICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFhUQUwxNk1fVFNUX1NZUyAoQml0ZmllbGQtTWFzazogMHgwMykgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfWFRBTDE2TV9UUklNX1RFU1RfRU5fUG9zICgxNFVMKSAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFhUQUwxNk1fVFJJTV9URVNUX0VOIChCaXQgMTQpICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfWFRBTDE2TV9UUklNX1RFU1RfRU5fTXNrICgweDQwMDBVTCkgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFhUQUwxNk1fVFJJTV9URVNUX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19URVNUX0NUUkwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDJfUkVHX0FOQV9URVNUTVVYX0NUUkxfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDJfUkVHOiBBTkFfVEVTVE1VWF9DVFJMIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDJfUkVHX0FOQV9URVNUTVVYX0NUUkxfTXNrICgweGZVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDJfUkVHOiBBTkFfVEVTVE1VWF9DVFJMIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDJfUkVHX1JGX0lOX1RFU1RNVVhfQ1RSTF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDJfUkVHOiBSRl9JTl9URVNUTVVYX0NUUkwgKEJpdCA4KSAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDJfUkVHX1JGX0lOX1RFU1RNVVhfQ1RSTF9Nc2sgKDB4MzAwVUwpICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDJfUkVHOiBSRl9JTl9URVNUTVVYX0NUUkwgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUElPX1RFU1RfQ1RSTDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMM19SRUdfUkZfVEVTVF9PVVRfU0VMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMM19SRUc6IFJGX1RFU1RfT1VUX1NFTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMM19SRUdfUkZfVEVTVF9PVVRfU0VMX01zayAoMHgzZlVMKSAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMM19SRUc6IFJGX1RFU1RfT1VUX1NFTCAoQml0ZmllbGQtTWFzazogMHgzZikgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMM19SRUdfVkJVU19DT01QQVJBVE9SX1RFU1RfUG9zICg2VUwpICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMM19SRUc6IFZCVVNfQ09NUEFSQVRPUl9URVNUIChCaXQgNikgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMM19SRUdfVkJVU19DT01QQVJBVE9SX1RFU1RfTXNrICgweDQwVUwpICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMM19SRUc6IFZCVVNfQ09NUEFSQVRPUl9URVNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDNfUkVHX1JGX1RFU1RfT1VUX1BBUkFNX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDNfUkVHOiBSRl9URVNUX09VVF9QQVJBTSAoQml0IDgpICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDNfUkVHX1JGX1RFU1RfT1VUX1BBUkFNX01zayAoMHhmZjAwVUwpICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDNfUkVHOiBSRl9URVNUX09VVF9QQVJBTSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fVEVTVF9DVFJMNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw0X1JFR19SRl9URVNUX0lOX1NFTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw0X1JFRzogUkZfVEVTVF9JTl9TRUwgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw0X1JFR19SRl9URVNUX0lOX1NFTF9Nc2sgKDB4N1VMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw0X1JFRzogUkZfVEVTVF9JTl9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw0X1JFR19SRl9URVNUX0lOX1BBUkFNX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw0X1JFRzogUkZfVEVTVF9JTl9QQVJBTSAoQml0IDgpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw0X1JFR19SRl9URVNUX0lOX1BBUkFNX01zayAoMHhmZjAwVUwpICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw0X1JFRzogUkZfVEVTVF9JTl9QQVJBTSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fVEVTVF9DVFJMNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX0JVU19UT19BVlNfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9CVVNfVE9fQVZTIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX0JVU19UT19BVlNfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9CVVNfVE9fQVZTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX0xET18xVjRfUG9zICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9MRE9fMVY0IChCaXQgMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX0xET18xVjRfTXNrICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9MRE9fMVY0IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX0xET18xVjhfRkxBU0hfUG9zICgyVUwpICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9MRE9fMVY4X0ZMQVNIIChCaXQgMikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX0xET18xVjhfRkxBU0hfTXNrICgweDRVTCkgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9MRE9fMVY4X0ZMQVNIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPX0NPUkVfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET19DT1JFIChCaXQgMykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPX0NPUkVfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET19DT1JFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPXzFWOF9QQV9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET18xVjhfUEEgKEJpdCA0KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPXzFWOF9QQV9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET18xVjhfUEEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPX0FEQ19Qb3MgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET19BREMgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPX0FEQ19Nc2sgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET19BREMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPX1BMTF9Qb3MgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET19QTEwgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPX1BMTF9Nc2sgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET19QTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfQkFOREdBUF9JX1RFU1RfUG9zICg3VUwpICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0JBTkRHQVBfSV9URVNUIChCaXQgNykgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfQkFOREdBUF9JX1RFU1RfTXNrICgweDgwVUwpICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0JBTkRHQVBfSV9URVNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfU0lNT19CVUNLX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX1NJTU9fQlVDSyAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfU0lNT19CVUNLX01zayAoMHgxMDBVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX1NJTU9fQlVDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfQk9EX1ZSRUZfT1VUX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0JPRF9WUkVGX09VVCAoQml0IDkpICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfQk9EX1ZSRUZfT1VUX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0JPRF9WUkVGX09VVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX0JPRF9WUkVGX0lOX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9CT0RfVlJFRl9JTiAoQml0IDEwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX0JPRF9WUkVGX0lOX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9CT0RfVlJFRl9JTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX0lfRENEQ19GSUxUX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9JX0RDRENfRklMVCAoQml0IDExKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX0lfRENEQ19GSUxUX01zayAoMHg4MDBVTCkgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9JX0RDRENfRklMVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX1ZDT05UX0FfUG9zICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9WQ09OVF9BIChCaXQgMTIpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX1ZDT05UX0FfTXNrICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9WQ09OVF9BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX1ZSRUZfMVYyX0FfUG9zICgxM1VMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9WUkVGXzFWMl9BIChCaXQgMTMpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX1ZSRUZfMVYyX0FfTXNrICgweDIwMDBVTCkgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9WUkVGXzFWMl9BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX1BPUl9WQkFUX05PS19BVkRfUG9zICgxNFVMKSAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9QT1JfVkJBVF9OT0tfQVZEIChCaXQgMTQpICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkw1X1JFR19URVNUX1BPUl9WQkFUX05PS19BVkRfTXNrICgweDQwMDBVTCkgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkw1X1JFRzogVEVTVF9QT1JfVkJBVF9OT0tfQVZEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgc3RydWN0ICdHUFJFRycgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUFJFR19TRVRfRlJFRVpFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfV0tVUFRJTV9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1dLVVBUSU0gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfV0tVUFRJTV9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1dLVVBUSU0gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfU1dUSU0wX1BvcyAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1NXVElNMCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfU1dUSU0wX01zayAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1NXVElNMCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfQkxFVElNX1BvcyAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX0JMRVRJTSAoQml0IDIpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfQkxFVElNX01zayAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX0JMRVRJTSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfV0RPR19Qb3MgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1dET0cgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfV0RPR19Nc2sgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1dET0cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfVVNCX1BvcyAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1VTQiAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfVVNCX01zayAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1VTQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfRE1BX1BvcyAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX0RNQSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfRE1BX01zayAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX0RNQSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfU1dUSU0xX1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1NXVElNMSAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfU1dUSU0xX01zayAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1NXVElNMSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfU1dUSU0yX1BvcyAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1NXVElNMiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfU1dUSU0yX01zayAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBTRVRfRlJFRVpFX1JFRzogRlJaX1NXVElNMiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9XS1VQVElNX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfV0tVUFRJTSAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9XS1VQVElNX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfV0tVUFRJTSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTBfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0wIChCaXQgMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTBfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0wIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9CTEVUSU1fUG9zICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfQkxFVElNIChCaXQgMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9CTEVUSU1fTXNrICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfQkxFVElNIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9XRE9HX1BvcyAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfV0RPRyAoQml0IDMpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9XRE9HX01zayAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfV0RPRyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9VU0JfUG9zICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfVVNCIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9VU0JfTXNrICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfVVNCIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9ETUFfUG9zICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfRE1BIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9ETUFfTXNrICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfRE1BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTFfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0xIChCaXQgNikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTFfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0xIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTJfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0yIChCaXQgNykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTJfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBSRVNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0yIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUFJFR19ERUJVR19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUFJFR19ERUJVR19SRUdfREVCVUdTX0ZSRUVaRV9FTl9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBERUJVR19SRUc6IERFQlVHU19GUkVFWkVfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19ERUJVR19SRUdfREVCVUdTX0ZSRUVaRV9FTl9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBERUJVR19SRUc6IERFQlVHU19GUkVFWkVfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BSRUdfR1BfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUFJFR19HUF9TVEFUVVNfUkVHX0NBTF9QSEFTRV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBHUF9TVEFUVVNfUkVHOiBDQUxfUEhBU0UgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19HUF9TVEFUVVNfUkVHX0NBTF9QSEFTRV9Nc2sgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBHUF9TVEFUVVNfUkVHOiBDQUxfUEhBU0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUFJFR19HUF9DT05UUk9MX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUFJFR19HUF9DT05UUk9MX1JFR19CTEVfV0FLRVVQX1JFUV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBHUF9DT05UUk9MX1JFRzogQkxFX1dBS0VVUF9SRVEgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19HUF9DT05UUk9MX1JFR19CTEVfV0FLRVVQX1JFUV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBHUF9DT05UUk9MX1JFRzogQkxFX1dBS0VVUF9SRVEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBHUFJFR19HUF9DT05UUk9MX1JFR19CTEVfSDJIX0JSSURHRV9CWVBBU1NfUG9zICgxVUwpICAgICAgICAgICAgLyohPCBHUFJFRyBHUF9DT05UUk9MX1JFRzogQkxFX0gySF9CUklER0VfQllQQVNTIChCaXQgMSkgICAgICAgICAqLworI2RlZmluZSBHUFJFR19HUF9DT05UUk9MX1JFR19CTEVfSDJIX0JSSURHRV9CWVBBU1NfTXNrICgweDJVTCkgICAgICAgICAgLyohPCBHUFJFRyBHUF9DT05UUk9MX1JFRzogQkxFX0gySF9CUklER0VfQllQQVNTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUFJFR19HUF9DT05UUk9MX1JFR19CTEVfV0FLRVVQX0xQX0lSUV9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBHUF9DT05UUk9MX1JFRzogQkxFX1dBS0VVUF9MUF9JUlEgKEJpdCAyKSAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19HUF9DT05UUk9MX1JFR19CTEVfV0FLRVVQX0xQX0lSUV9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgLyohPCBHUFJFRyBHUF9DT05UUk9MX1JFRzogQkxFX1dBS0VVUF9MUF9JUlEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BSRUdfRUNDX0JBU0VfQUREUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQUkVHX0VDQ19CQVNFX0FERFJfUkVHX0VDQ19CQVNFX0FERFJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIEVDQ19CQVNFX0FERFJfUkVHOiBFQ0NfQkFTRV9BRERSIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0VDQ19CQVNFX0FERFJfUkVHX0VDQ19CQVNFX0FERFJfTXNrICgweDdmVUwpICAgICAgICAgICAgICAvKiE8IEdQUkVHIEVDQ19CQVNFX0FERFJfUkVHOiBFQ0NfQkFTRV9BRERSIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUFJFR19MRURfQ09OVFJPTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEMV9TUkNfU0VMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDFfU1JDX1NFTCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEMV9TUkNfU0VMX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDFfU1JDX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEMl9TUkNfU0VMX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDJfU1JDX1NFTCAoQml0IDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEMl9TUkNfU0VMX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDJfU1JDX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEM19TUkNfU0VMX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDNfU1JDX1NFTCAoQml0IDIpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEM19TUkNfU0VMX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDNfU1JDX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEMV9FTl9Qb3MgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDFfRU4gKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEMV9FTl9Nc2sgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDFfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEMl9FTl9Qb3MgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDJfRU4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEMl9FTl9Nc2sgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDJfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEM19FTl9Qb3MgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDNfRU4gKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEM19FTl9Nc2sgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRDNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEX1RSSU1fUG9zICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRF9UUklNIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19MRURfQ09OVFJPTF9SRUdfTEVEX1RSSU1fTXNrICAgICgweDNjMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBMRURfQ09OVFJPTF9SRUc6IExFRF9UUklNIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUFJFR19CTEVfRklORUNOVF9TQU1QX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUFJFR19CTEVfRklORUNOVF9TQU1QX1JFR19CTEVfRklORUNOVF9TQU1QX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBHUFJFRyBCTEVfRklORUNOVF9TQU1QX1JFRzogQkxFX0ZJTkVDTlRfU0FNUCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBHUFJFR19CTEVfRklORUNOVF9TQU1QX1JFR19CTEVfRklORUNOVF9TQU1QX01zayAoMHgzZmZVTCkgICAgICAgLyohPCBHUFJFRyBCTEVfRklORUNOVF9TQU1QX1JFRzogQkxFX0ZJTkVDTlRfU0FNUCAoQml0ZmllbGQtTWFzazogMHgzZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BSRUdfUExMX1NZU19DVFJMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDFfUkVHX1BMTF9FTl9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDFfUkVHOiBQTExfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDFfUkVHX1BMTF9FTl9Nc2sgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDFfUkVHOiBQTExfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDFfUkVHX0xET19QTExfRU5BQkxFX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDFfUkVHOiBMRE9fUExMX0VOQUJMRSAoQml0IDEpICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDFfUkVHX0xET19QTExfRU5BQkxFX01zayAoMHgyVUwpICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDFfUkVHOiBMRE9fUExMX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMMV9SRUdfTERPX1BMTF9WUkVGX0hPTERfUG9zICgyVUwpICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMMV9SRUc6IExET19QTExfVlJFRl9IT0xEIChCaXQgMikgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMMV9SRUdfTERPX1BMTF9WUkVGX0hPTERfTXNrICgweDRVTCkgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMMV9SRUc6IExET19QTExfVlJFRl9IT0xEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwxX1JFR19QTExfUl9ESVZfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwxX1JFRzogUExMX1JfRElWIChCaXQgOCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwxX1JFR19QTExfUl9ESVZfTXNrICgweDdmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwxX1JFRzogUExMX1JfRElWIChCaXRmaWVsZC1NYXNrOiAweDdmKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQUkVHX1BMTF9TWVNfQ1RSTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwyX1JFR19QTExfTl9ESVZfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwyX1JFRzogUExMX05fRElWIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwyX1JFR19QTExfTl9ESVZfTXNrICgweDdmVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwyX1JFRzogUExMX05fRElWIChCaXRmaWVsZC1NYXNrOiAweDdmKSAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwyX1JFR19QTExfREVMX1NFTF9Qb3MgKDEyVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwyX1JFRzogUExMX0RFTF9TRUwgKEJpdCAxMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwyX1JFR19QTExfREVMX1NFTF9Nc2sgKDB4MzAwMFVMKSAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwyX1JFRzogUExMX0RFTF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwyX1JFR19QTExfU0VMX01JTl9DVVJfSU5UX1BvcyAoMTRVTCkgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwyX1JFRzogUExMX1NFTF9NSU5fQ1VSX0lOVCAoQml0IDE0KSAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwyX1JFR19QTExfU0VMX01JTl9DVVJfSU5UX01zayAoMHg0MDAwVUwpICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwyX1JFRzogUExMX1NFTF9NSU5fQ1VSX0lOVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUFJFR19QTExfU1lTX0NUUkwzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMM19SRUdfUExMX0lDUF9TRUxfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMM19SRUc6IFBMTF9JQ1BfU0VMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMM19SRUdfUExMX0lDUF9TRUxfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMM19SRUc6IFBMTF9JQ1BfU0VMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMM19SRUdfUExMX1NUQVJUX0RFTF9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMM19SRUc6IFBMTF9TVEFSVF9ERUwgKEJpdCAxMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMM19SRUdfUExMX1NUQVJUX0RFTF9Nc2sgKDB4N2MwMFVMKSAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMM19SRUc6IFBMTF9TVEFSVF9ERUwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDNfUkVHX1BMTF9SRUNBTElCX1BvcyAoMTVVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDNfUkVHOiBQTExfUkVDQUxJQiAoQml0IDE1KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDNfUkVHX1BMTF9SRUNBTElCX01zayAoMHg4MDAwVUwpICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDNfUkVHOiBQTExfUkVDQUxJQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUFJFR19QTExfU1lTX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfU1RBVFVTX1JFR19QTExfTE9DS19GSU5FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfU1RBVFVTX1JFRzogUExMX0xPQ0tfRklORSAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfU1RBVFVTX1JFR19QTExfTE9DS19GSU5FX01zayAoMHgxVUwpICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfU1RBVFVTX1JFRzogUExMX0xPQ0tfRklORSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19TVEFUVVNfUkVHX0xET19QTExfT0tfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19TVEFUVVNfUkVHOiBMRE9fUExMX09LIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19TVEFUVVNfUkVHX0xET19QTExfT0tfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19TVEFUVVNfUkVHOiBMRE9fUExMX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19TVEFUVVNfUkVHX1BMTF9QTExfQkVTVF9NSU5fQ1VSX1BvcyAoNVVMKSAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19TVEFUVVNfUkVHOiBQTExfUExMX0JFU1RfTUlOX0NVUiAoQml0IDUpICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19TVEFUVVNfUkVHX1BMTF9QTExfQkVTVF9NSU5fQ1VSX01zayAoMHg3ZTBVTCkgICAgIC8qITwgR1BSRUcgUExMX1NZU19TVEFUVVNfUkVHOiBQTExfUExMX0JFU1RfTUlOX0NVUiAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19TVEFUVVNfUkVHX1BMTF9DQUxJQlJfRU5EX1BvcyAoMTFVTCkgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19TVEFUVVNfUkVHOiBQTExfQ0FMSUJSX0VORCAoQml0IDExKSAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19TVEFUVVNfUkVHX1BMTF9DQUxJQlJfRU5EX01zayAoMHg4MDBVTCkgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19TVEFUVVNfUkVHOiBQTExfQ0FMSUJSX0VORCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUFJFR19QTExfU1lTX1RFU1RfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19URVNUX1JFR19QTExfRElTX0xPT1BGSUxUX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19URVNUX1JFRzogUExMX0RJU19MT09QRklMVCAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19URVNUX1JFR19QTExfRElTX0xPT1BGSUxUX01zayAoMHgxVUwpICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19URVNUX1JFRzogUExMX0RJU19MT09QRklMVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19URVNUX1JFR19QTExfTUlOX0NVUlJFTlRfUG9zICgxVUwpICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19URVNUX1JFRzogUExMX01JTl9DVVJSRU5UIChCaXQgMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19URVNUX1JFR19QTExfTUlOX0NVUlJFTlRfTXNrICgweDdlVUwpICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19URVNUX1JFRzogUExMX01JTl9DVVJSRU5UIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9URVNUX1ZDVFJfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfVEVTVF9WQ1RSIChCaXQgNykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9URVNUX1ZDVFJfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfVEVTVF9WQ1RSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9PUEVOX0xPT1BfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfT1BFTl9MT09QIChCaXQgOCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9PUEVOX0xPT1BfTXNrICgweDEwMFVMKSAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfT1BFTl9MT09QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9DSEFOR0VfUG9zICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfQ0hBTkdFIChCaXQgOSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9DSEFOR0VfTXNrICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfQ0hBTkdFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9TRUxfTl9ESVZfVEVTVF9Qb3MgKDEwVUwpICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfU0VMX05fRElWX1RFU1QgKEJpdCAxMCkgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9TRUxfTl9ESVZfVEVTVF9Nc2sgKDB4NDAwVUwpICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfU0VMX05fRElWX1RFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfVEVTVF9SRUdfUExMX1NFTF9SX0RJVl9URVNUX1BvcyAoMTFVTCkgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfVEVTVF9SRUc6IFBMTF9TRUxfUl9ESVZfVEVTVCAoQml0IDExKSAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfVEVTVF9SRUdfUExMX1NFTF9SX0RJVl9URVNUX01zayAoMHg4MDBVTCkgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfVEVTVF9SRUc6IFBMTF9TRUxfUl9ESVZfVEVTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19URVNUX1JFR19QTExfTE9DS19ERVRfUkVTX0NOVF9Qb3MgKDEzVUwpICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19URVNUX1JFRzogUExMX0xPQ0tfREVUX1JFU19DTlQgKEJpdCAxMykgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19URVNUX1JFR19QTExfTE9DS19ERVRfUkVTX0NOVF9Nc2sgKDB4ZTAwMFVMKSAgICAgIC8qITwgR1BSRUcgUExMX1NZU19URVNUX1JFRzogUExMX0xPQ0tfREVUX1JFU19DTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdJMkMnIFBvc2l0aW9uICYgTWFzayAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ09OX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfTUFTVEVSX01PREVfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDX01BU1RFUl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfTUFTVEVSX01PREVfTXNrICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDX01BU1RFUl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfU1BFRURfUG9zICAgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDX1NQRUVEIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfU1BFRURfTXNrICAgICAgICAgKDB4NlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDX1NQRUVEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfMTBCSVRBRERSX1NMQVZFX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDXzEwQklUQUREUl9TTEFWRSAoQml0IDMpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfMTBCSVRBRERSX1NMQVZFX01zayAoMHg4VUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDXzEwQklUQUREUl9TTEFWRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfMTBCSVRBRERSX01BU1RFUl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDXzEwQklUQUREUl9NQVNURVIgKEJpdCA0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfMTBCSVRBRERSX01BU1RFUl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDXzEwQklUQUREUl9NQVNURVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfUkVTVEFSVF9FTl9Qb3MgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDX1JFU1RBUlRfRU4gKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfUkVTVEFSVF9FTl9Nc2sgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDX1JFU1RBUlRfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfU0xBVkVfRElTQUJMRV9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDX1NMQVZFX0RJU0FCTEUgKEJpdCA2KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09OX1JFR19JMkNfU0xBVkVfRElTQUJMRV9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09OX1JFRzogSTJDX1NMQVZFX0RJU0FCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfVEFSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfVEFSX1JFR19JQ19UQVJfUG9zICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfVEFSX1JFRzogSUNfVEFSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVEFSX1JFR19JQ19UQVJfTXNrICAgICAgICAgICAgKDB4M2ZmVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfVEFSX1JFRzogSUNfVEFSIChCaXRmaWVsZC1NYXNrOiAweDNmZikgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVEFSX1JFR19HQ19PUl9TVEFSVF9Qb3MgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfVEFSX1JFRzogR0NfT1JfU1RBUlQgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVEFSX1JFR19HQ19PUl9TVEFSVF9Nc2sgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfVEFSX1JFRzogR0NfT1JfU1RBUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVEFSX1JFR19TUEVDSUFMX1BvcyAgICAgICAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfVEFSX1JFRzogU1BFQ0lBTCAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVEFSX1JFR19TUEVDSUFMX01zayAgICAgICAgICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfVEFSX1JFRzogU1BFQ0lBTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfU0FSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfU0FSX1JFR19JQ19TQVJfUG9zICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfU0FSX1JFRzogSUNfU0FSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfU0FSX1JFR19JQ19TQVJfTXNrICAgICAgICAgICAgKDB4M2ZmVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfU0FSX1JFRzogSUNfU0FSIChCaXRmaWVsZC1NYXNrOiAweDNmZikgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfREFUQV9DTURfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfREFUQV9DTURfUkVHX0RBVF9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfREFUQV9DTURfUkVHOiBEQVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfREFUQV9DTURfUkVHX0RBVF9Nc2sgICAgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfREFUQV9DTURfUkVHOiBEQVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfREFUQV9DTURfUkVHX0NNRF9Qb3MgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfREFUQV9DTURfUkVHOiBDTUQgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfREFUQV9DTURfUkVHX0NNRF9Nc2sgICAgICAgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfREFUQV9DTURfUkVHOiBDTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfREFUQV9DTURfUkVHX1NUT1BfUG9zICAgICAgICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfREFUQV9DTURfUkVHOiBTVE9QIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfREFUQV9DTURfUkVHX1NUT1BfTXNrICAgICAgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfREFUQV9DTURfUkVHOiBTVE9QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfREFUQV9DTURfUkVHX1JFU1RBUlRfUG9zICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfREFUQV9DTURfUkVHOiBSRVNUQVJUIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfREFUQV9DTURfUkVHX1JFU1RBUlRfTXNrICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfREFUQV9DTURfUkVHOiBSRVNUQVJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19TU19TQ0xfSENOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfU1NfU0NMX0hDTlRfUkVHX0lDX1NTX1NDTF9IQ05UX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfU1NfU0NMX0hDTlRfUkVHOiBJQ19TU19TQ0xfSENOVCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfU1NfU0NMX0hDTlRfUkVHX0lDX1NTX1NDTF9IQ05UX01zayAoMHhmZmZmVUwpICAgICAgICAgICAvKiE8IEkyQyBJMkNfU1NfU0NMX0hDTlRfUkVHOiBJQ19TU19TQ0xfSENOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfU1NfU0NMX0xDTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX1NTX1NDTF9MQ05UX1JFR19JQ19TU19TQ0xfTENOVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NTX1NDTF9MQ05UX1JFRzogSUNfU1NfU0NMX0xDTlQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NTX1NDTF9MQ05UX1JFR19JQ19TU19TQ0xfTENOVF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBJMkMgSTJDX1NTX1NDTF9MQ05UX1JFRzogSUNfU1NfU0NMX0xDTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0ZTX1NDTF9IQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19GU19TQ0xfSENOVF9SRUdfSUNfRlNfU0NMX0hDTlRfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19GU19TQ0xfSENOVF9SRUc6IElDX0ZTX1NDTF9IQ05UIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19GU19TQ0xfSENOVF9SRUdfSUNfRlNfU0NMX0hDTlRfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgSTJDIEkyQ19GU19TQ0xfSENOVF9SRUc6IElDX0ZTX1NDTF9IQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19GU19TQ0xfTENOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfRlNfU0NMX0xDTlRfUkVHX0lDX0ZTX1NDTF9MQ05UX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRlNfU0NMX0xDTlRfUkVHOiBJQ19GU19TQ0xfTENOVCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfRlNfU0NMX0xDTlRfUkVHX0lDX0ZTX1NDTF9MQ05UX01zayAoMHhmZmZmVUwpICAgICAgICAgICAvKiE8IEkyQyBJMkNfRlNfU0NMX0xDTlRfUkVHOiBJQ19GU19TQ0xfTENOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0lOVFJfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9SWF9VTkRFUl9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfUlhfVU5ERVIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9SWF9VTkRFUl9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfUlhfVU5ERVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9SWF9PVkVSX1BvcyAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfUlhfT1ZFUiAoQml0IDEpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9SWF9PVkVSX01zayAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfUlhfT1ZFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9SWF9GVUxMX1BvcyAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfUlhfRlVMTCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9SWF9GVUxMX01zayAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfUlhfRlVMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9UWF9PVkVSX1BvcyAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfVFhfT1ZFUiAoQml0IDMpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9UWF9PVkVSX01zayAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfVFhfT1ZFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9UWF9FTVBUWV9Qb3MgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfVFhfRU1QVFkgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9UWF9FTVBUWV9Nc2sgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfVFhfRU1QVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9SRF9SRVFfUG9zICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfUkRfUkVRIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9SRF9SRVFfTXNrICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfUkRfUkVRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9UWF9BQlJUX1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfVFhfQUJSVCAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9UWF9BQlJUX01zayAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfVFhfQUJSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9SWF9ET05FX1BvcyAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfUlhfRE9ORSAoQml0IDcpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9SWF9ET05FX01zayAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfUlhfRE9ORSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9BQ1RJVklUWV9Qb3MgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfQUNUSVZJVFkgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9BQ1RJVklUWV9Nc2sgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfQUNUSVZJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9TVE9QX0RFVF9Qb3MgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfU1RPUF9ERVQgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9TVE9QX0RFVF9Nc2sgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfU1RPUF9ERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9TVEFSVF9ERVRfUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfU1RBUlRfREVUIChCaXQgMTApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9TVEFSVF9ERVRfTXNrICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfU1RBUlRfREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9HRU5fQ0FMTF9Qb3MgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfR0VOX0NBTEwgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfU1RBVF9SRUdfUl9HRU5fQ0FMTF9Nc2sgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfU1RBVF9SRUc6IFJfR0VOX0NBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0lOVFJfTUFTS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9SWF9VTkRFUl9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fUlhfVU5ERVIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9SWF9VTkRFUl9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fUlhfVU5ERVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9SWF9PVkVSX1BvcyAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fUlhfT1ZFUiAoQml0IDEpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9SWF9PVkVSX01zayAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fUlhfT1ZFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9SWF9GVUxMX1BvcyAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fUlhfRlVMTCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9SWF9GVUxMX01zayAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fUlhfRlVMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9UWF9PVkVSX1BvcyAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fVFhfT1ZFUiAoQml0IDMpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9UWF9PVkVSX01zayAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fVFhfT1ZFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9UWF9FTVBUWV9Qb3MgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fVFhfRU1QVFkgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9UWF9FTVBUWV9Nc2sgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fVFhfRU1QVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9SRF9SRVFfUG9zICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fUkRfUkVRIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9SRF9SRVFfTXNrICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fUkRfUkVRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9UWF9BQlJUX1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fVFhfQUJSVCAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9UWF9BQlJUX01zayAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fVFhfQUJSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9SWF9ET05FX1BvcyAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fUlhfRE9ORSAoQml0IDcpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9SWF9ET05FX01zayAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fUlhfRE9ORSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9BQ1RJVklUWV9Qb3MgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fQUNUSVZJVFkgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9BQ1RJVklUWV9Nc2sgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fQUNUSVZJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9TVE9QX0RFVF9Qb3MgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fU1RPUF9ERVQgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9TVE9QX0RFVF9Nc2sgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fU1RPUF9ERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9TVEFSVF9ERVRfUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fU1RBUlRfREVUIChCaXQgMTApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9TVEFSVF9ERVRfTXNrICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fU1RBUlRfREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9HRU5fQ0FMTF9Qb3MgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fR0VOX0NBTEwgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lOVFJfTUFTS19SRUdfTV9HRU5fQ0FMTF9Nc2sgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lOVFJfTUFTS19SRUc6IE1fR0VOX0NBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19SQVdfSU5UUl9TVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1JYX1VOREVSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBSWF9VTkRFUiAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1JYX1VOREVSX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBSWF9VTkRFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1JYX09WRVJfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBSWF9PVkVSIChCaXQgMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1JYX09WRVJfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBSWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1JYX0ZVTExfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBSWF9GVUxMIChCaXQgMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1JYX0ZVTExfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBSWF9GVUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1RYX09WRVJfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBUWF9PVkVSIChCaXQgMykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1RYX09WRVJfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBUWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1RYX0VNUFRZX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBUWF9FTVBUWSAoQml0IDQpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1RYX0VNUFRZX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBUWF9FTVBUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1JEX1JFUV9Qb3MgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBSRF9SRVEgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1JEX1JFUV9Nc2sgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBSRF9SRVEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1RYX0FCUlRfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBUWF9BQlJUIChCaXQgNikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1RYX0FCUlRfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBUWF9BQlJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1JYX0RPTkVfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBSWF9ET05FIChCaXQgNykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1JYX0RPTkVfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBSWF9ET05FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX0FDVElWSVRZX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBBQ1RJVklUWSAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX0FDVElWSVRZX01zayAoMHgxMDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBBQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1NUT1BfREVUX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBTVE9QX0RFVCAoQml0IDkpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1NUT1BfREVUX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBTVE9QX0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1NUQVJUX0RFVF9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBTVEFSVF9ERVQgKEJpdCAxMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX1NUQVJUX0RFVF9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBTVEFSVF9ERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX0dFTl9DQUxMX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBHRU5fQ0FMTCAoQml0IDExKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHX0dFTl9DQUxMX01zayAoMHg4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JBV19JTlRSX1NUQVRfUkVHOiBHRU5fQ0FMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfUlhfVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX1JYX1RMX1JFR19SWF9UTF9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JYX1RMX1JFRzogUlhfVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JYX1RMX1JFR19SWF9UTF9Nc2sgICAgICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JYX1RMX1JFRzogUlhfVEwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfVFhfVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX1RYX1RMX1JFR19UWF9UTF9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX1RMX1JFRzogVFhfVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX1RMX1JFR19UWF9UTF9Nc2sgICAgICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX1RMX1JFRzogVFhfVEwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NMUl9JTlRSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9JTlRSX1JFR19DTFJfSU5UUl9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9JTlRSX1JFRzogQ0xSX0lOVFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9JTlRSX1JFR19DTFJfSU5UUl9Nc2sgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9JTlRSX1JFRzogQ0xSX0lOVFIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19DTFJfUlhfVU5ERVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9SWF9VTkRFUl9SRUdfQ0xSX1JYX1VOREVSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9SWF9VTkRFUl9SRUc6IENMUl9SWF9VTkRFUiAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9SWF9VTkRFUl9SRUdfQ0xSX1JYX1VOREVSX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9SWF9VTkRFUl9SRUc6IENMUl9SWF9VTkRFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NMUl9SWF9PVkVSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfUlhfT1ZFUl9SRUdfQ0xSX1JYX09WRVJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfUlhfT1ZFUl9SRUc6IENMUl9SWF9PVkVSIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfUlhfT1ZFUl9SRUdfQ0xSX1JYX09WRVJfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfUlhfT1ZFUl9SRUc6IENMUl9SWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NMUl9UWF9PVkVSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfVFhfT1ZFUl9SRUdfQ0xSX1RYX09WRVJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfVFhfT1ZFUl9SRUc6IENMUl9UWF9PVkVSIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfVFhfT1ZFUl9SRUdfQ0xSX1RYX09WRVJfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfVFhfT1ZFUl9SRUc6IENMUl9UWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NMUl9SRF9SRVFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfUkRfUkVRX1JFR19DTFJfUkRfUkVRX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfUkRfUkVRX1JFRzogQ0xSX1JEX1JFUSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfUkRfUkVRX1JFR19DTFJfUkRfUkVRX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfUkRfUkVRX1JFRzogQ0xSX1JEX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NMUl9UWF9BQlJUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfVFhfQUJSVF9SRUdfQ0xSX1RYX0FCUlRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfVFhfQUJSVF9SRUc6IENMUl9UWF9BQlJUIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfVFhfQUJSVF9SRUdfQ0xSX1RYX0FCUlRfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfVFhfQUJSVF9SRUc6IENMUl9UWF9BQlJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NMUl9SWF9ET05FX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfUlhfRE9ORV9SRUdfQ0xSX1JYX0RPTkVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfUlhfRE9ORV9SRUc6IENMUl9SWF9ET05FIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfUlhfRE9ORV9SRUdfQ0xSX1JYX0RPTkVfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfUlhfRE9ORV9SRUc6IENMUl9SWF9ET05FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ0xSX0FDVElWSVRZX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfQUNUSVZJVFlfUkVHX0NMUl9BQ1RJVklUWV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfQUNUSVZJVFlfUkVHOiBDTFJfQUNUSVZJVFkgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfQUNUSVZJVFlfUkVHX0NMUl9BQ1RJVklUWV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfQUNUSVZJVFlfUkVHOiBDTFJfQUNUSVZJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NMUl9TVE9QX0RFVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfQ0xSX1NUT1BfREVUX1JFR19DTFJfQUNUSVZJVFlfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ0xSX1NUT1BfREVUX1JFRzogQ0xSX0FDVElWSVRZIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ0xSX1NUT1BfREVUX1JFR19DTFJfQUNUSVZJVFlfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ0xSX1NUT1BfREVUX1JFRzogQ0xSX0FDVElWSVRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19DTFJfU1RBUlRfREVUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9TVEFSVF9ERVRfUkVHX0NMUl9TVEFSVF9ERVRfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9TVEFSVF9ERVRfUkVHOiBDTFJfU1RBUlRfREVUIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9TVEFSVF9ERVRfUkVHX0NMUl9TVEFSVF9ERVRfTXNrICgweDFVTCkgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9TVEFSVF9ERVRfUkVHOiBDTFJfU1RBUlRfREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19DTFJfR0VOX0NBTExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9HRU5fQ0FMTF9SRUdfQ0xSX0dFTl9DQUxMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9HRU5fQ0FMTF9SRUc6IENMUl9HRU5fQ0FMTCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9HRU5fQ0FMTF9SRUdfQ0xSX0dFTl9DQUxMX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9HRU5fQ0FMTF9SRUc6IENMUl9HRU5fQ0FMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfRU5BQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19FTkFCTEVfUkVHX0NUUkxfRU5BQkxFX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19FTkFCTEVfUkVHOiBDVFJMX0VOQUJMRSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19FTkFCTEVfUkVHX0NUUkxfRU5BQkxFX01zayAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19FTkFCTEVfUkVHOiBDVFJMX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX0kyQ19BQ1RJVklUWV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBJMkNfQUNUSVZJVFkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX0kyQ19BQ1RJVklUWV9Nc2sgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBJMkNfQUNUSVZJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX1RGTkZfUG9zICAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBURk5GIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX1RGTkZfTXNrICAgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBURk5GIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX1RGRV9Qb3MgICAgICAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBURkUgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX1RGRV9Nc2sgICAgICAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBURkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX1JGTkVfUG9zICAgICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBSRk5FIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX1JGTkVfTXNrICAgICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBSRk5FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX1JGRl9Qb3MgICAgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBSRkYgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX1JGRl9Nc2sgICAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBSRkYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX01TVF9BQ1RJVklUWV9Qb3MgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBNU1RfQUNUSVZJVFkgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX01TVF9BQ1RJVklUWV9Nc2sgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBNU1RfQUNUSVZJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX1NMVl9BQ1RJVklUWV9Qb3MgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBTTFZfQUNUSVZJVFkgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TVEFUVVNfUkVHX1NMVl9BQ1RJVklUWV9Nc2sgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TVEFUVVNfUkVHOiBTTFZfQUNUSVZJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX1RYRkxSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19UWEZMUl9SRUdfVFhGTFJfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19UWEZMUl9SRUc6IFRYRkxSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWEZMUl9SRUdfVFhGTFJfTXNrICAgICAgICAgICAoMHgzZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19UWEZMUl9SRUc6IFRYRkxSIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX1JYRkxSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19SWEZMUl9SRUdfUlhGTFJfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19SWEZMUl9SRUc6IFJYRkxSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19SWEZMUl9SRUdfUlhGTFJfTXNrICAgICAgICAgICAoMHgzZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19SWEZMUl9SRUc6IFJYRkxSIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19TREFfSE9MRF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19TREFfSE9MRF9SRUdfSUNfU0RBX0hPTERfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TREFfSE9MRF9SRUc6IElDX1NEQV9IT0xEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TREFfSE9MRF9SRUdfSUNfU0RBX0hPTERfTXNrICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TREFfSE9MRF9SRUc6IElDX1NEQV9IT0xEIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF83Ql9BRERSX05PQUNLX1BvcyAoMFVMKSAgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfN0JfQUREUl9OT0FDSyAoQml0IDApICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF83Ql9BRERSX05PQUNLX01zayAoMHgxVUwpICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfN0JfQUREUl9OT0FDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF8xMEFERFIxX05PQUNLX1BvcyAoMVVMKSAgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfMTBBRERSMV9OT0FDSyAoQml0IDEpICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF8xMEFERFIxX05PQUNLX01zayAoMHgyVUwpICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfMTBBRERSMV9OT0FDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF8xMEFERFIyX05PQUNLX1BvcyAoMlVMKSAgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfMTBBRERSMl9OT0FDSyAoQml0IDIpICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF8xMEFERFIyX05PQUNLX01zayAoMHg0VUwpICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfMTBBRERSMl9OT0FDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9UWERBVEFfTk9BQ0tfUG9zICgzVUwpICAgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfVFhEQVRBX05PQUNLIChCaXQgMykgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9UWERBVEFfTk9BQ0tfTXNrICgweDhVTCkgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfVFhEQVRBX05PQUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0dDQUxMX05PQUNLX1BvcyAoNFVMKSAgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9HQ0FMTF9OT0FDSyAoQml0IDQpICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0dDQUxMX05PQUNLX01zayAoMHgxMFVMKSAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9HQ0FMTF9OT0FDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9HQ0FMTF9SRUFEX1BvcyAoNVVMKSAgICAgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfR0NBTExfUkVBRCAoQml0IDUpICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9HQ0FMTF9SRUFEX01zayAoMHgyMFVMKSAgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfR0NBTExfUkVBRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9IU19BQ0tERVRfUG9zICg2VUwpICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfSFNfQUNLREVUIChCaXQgNikgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9IU19BQ0tERVRfTXNrICgweDQwVUwpICAgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfSFNfQUNLREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NCWVRFX0FDS0RFVF9Qb3MgKDdVTCkgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TQllURV9BQ0tERVQgKEJpdCA3KSAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NCWVRFX0FDS0RFVF9Nc2sgKDB4ODBVTCkgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TQllURV9BQ0tERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfSFNfTk9SU1RSVF9Qb3MgKDhVTCkgICAgICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX0hTX05PUlNUUlQgKEJpdCA4KSAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfSFNfTk9SU1RSVF9Nc2sgKDB4MTAwVUwpICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX0hTX05PUlNUUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0JZVEVfTk9SU1RSVF9Qb3MgKDlVTCkgICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NCWVRFX05PUlNUUlQgKEJpdCA5KSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0JZVEVfTk9SU1RSVF9Nc2sgKDB4MjAwVUwpICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NCWVRFX05PUlNUUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfMTBCX1JEX05PUlNUUlRfUG9zICgxMFVMKSAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUXzEwQl9SRF9OT1JTVFJUIChCaXQgMTApICAgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfMTBCX1JEX05PUlNUUlRfTXNrICgweDQwMFVMKSAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUXzEwQl9SRF9OT1JTVFJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX01BU1RFUl9ESVNfUG9zICgxMVVMKSAgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9NQVNURVJfRElTIChCaXQgMTEpICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX01BU1RFUl9ESVNfTXNrICgweDgwMFVMKSAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9NQVNURVJfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BUkJfTE9TVF9Qb3MgKDEyVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQVJCX0xPU1QgKEJpdCAxMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BUkJfTE9TVF9Nc2sgKDB4MTAwMFVMKSAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQVJCX0xPU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NMVkZMVVNIX1RYRklGT19Qb3MgKDEzVUwpICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TTFZGTFVTSF9UWEZJRk8gKEJpdCAxMykgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NMVkZMVVNIX1RYRklGT19Nc2sgKDB4MjAwMFVMKSAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TTFZGTFVTSF9UWEZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWX0FSQkxPU1RfUG9zICgxNFVMKSAgICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NMVl9BUkJMT1NUIChCaXQgMTQpICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWX0FSQkxPU1RfTXNrICgweDQwMDBVTCkgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NMVl9BUkJMT1NUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NMVlJEX0lOVFhfUG9zICgxNVVMKSAgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TTFZSRF9JTlRYIChCaXQgMTUpICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NMVlJEX0lOVFhfTXNrICgweDgwMDBVTCkgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TTFZSRF9JTlRYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19ETUFfQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0RNQV9DUl9SRUdfUkRNQUVfUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0RNQV9DUl9SRUc6IFJETUFFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0RNQV9DUl9SRUdfUkRNQUVfTXNrICAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0RNQV9DUl9SRUc6IFJETUFFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0RNQV9DUl9SRUdfVERNQUVfUG9zICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0RNQV9DUl9SRUc6IFRETUFFIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0RNQV9DUl9SRUdfVERNQUVfTXNrICAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0RNQV9DUl9SRUc6IFRETUFFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0RNQV9URExSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0RNQV9URExSX1JFR19ETUFURExfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0RNQV9URExSX1JFRzogRE1BVERMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0RNQV9URExSX1JFR19ETUFURExfTXNrICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0RNQV9URExSX1JFRzogRE1BVERMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0RNQV9SRExSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0RNQV9SRExSX1JFR19ETUFSRExfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0RNQV9SRExSX1JFRzogRE1BUkRMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0RNQV9SRExSX1JFR19ETUFSRExfTXNrICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0RNQV9SRExSX1JFRzogRE1BUkRMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX1NEQV9TRVRVUF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX1NEQV9TRVRVUF9SRUdfU0RBX1NFVFVQX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NEQV9TRVRVUF9SRUc6IFNEQV9TRVRVUCAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NEQV9TRVRVUF9SRUdfU0RBX1NFVFVQX01zayAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NEQV9TRVRVUF9SRUc6IFNEQV9TRVRVUCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQUNLX0dFTkVSQUxfQ0FMTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0FDS19HRU5FUkFMX0NBTExfUkVHX0FDS19HRU5fQ0FMTF9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0FDS19HRU5FUkFMX0NBTExfUkVHOiBBQ0tfR0VOX0NBTEwgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0FDS19HRU5FUkFMX0NBTExfUkVHX0FDS19HRU5fQ0FMTF9Nc2sgKDB4MVVMKSAgICAgICAgICAgLyohPCBJMkMgSTJDX0FDS19HRU5FUkFMX0NBTExfUkVHOiBBQ0tfR0VOX0NBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0VOQUJMRV9TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfRU5BQkxFX1NUQVRVU19SRUdfSUNfRU5fUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRU5BQkxFX1NUQVRVU19SRUc6IElDX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfRU5BQkxFX1NUQVRVU19SRUdfSUNfRU5fTXNrICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRU5BQkxFX1NUQVRVU19SRUc6IElDX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfRU5BQkxFX1NUQVRVU19SRUdfU0xWX0RJU0FCTEVEX1dISUxFX0JVU1lfUG9zICgxVUwpICAgICAvKiE8IEkyQyBJMkNfRU5BQkxFX1NUQVRVU19SRUc6IFNMVl9ESVNBQkxFRF9XSElMRV9CVVNZIChCaXQgMSkgICovCisjZGVmaW5lIEkyQ19JMkNfRU5BQkxFX1NUQVRVU19SRUdfU0xWX0RJU0FCTEVEX1dISUxFX0JVU1lfTXNrICgweDJVTCkgICAvKiE8IEkyQyBJMkNfRU5BQkxFX1NUQVRVU19SRUc6IFNMVl9ESVNBQkxFRF9XSElMRV9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkNfSTJDX0VOQUJMRV9TVEFUVVNfUkVHX1NMVl9SWF9EQVRBX0xPU1RfUG9zICgyVUwpICAgICAgICAgICAgLyohPCBJMkMgSTJDX0VOQUJMRV9TVEFUVVNfUkVHOiBTTFZfUlhfREFUQV9MT1NUIChCaXQgMikgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0VOQUJMRV9TVEFUVVNfUkVHX1NMVl9SWF9EQVRBX0xPU1RfTXNrICgweDRVTCkgICAgICAgICAgLyohPCBJMkMgSTJDX0VOQUJMRV9TVEFUVVNfUkVHOiBTTFZfUlhfREFUQV9MT1NUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19JQ19GU19TUEtMRU5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0lDX0ZTX1NQS0xFTl9SRUdfSUNfRlNfU1BLTEVOX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lDX0ZTX1NQS0xFTl9SRUc6IElDX0ZTX1NQS0xFTiAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0lDX0ZTX1NQS0xFTl9SRUdfSUNfRlNfU1BLTEVOX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0lDX0ZTX1NQS0xFTl9SRUc6IElDX0ZTX1NQS0xFTiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NPTVBfUEFSQU0xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DT01QX1BBUkFNMV9SRUdfSUNfQ09NUF9QQVJBTTFfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT01QX1BBUkFNMV9SRUc6IElDX0NPTVBfUEFSQU0xIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT01QX1BBUkFNMV9SRUdfSUNfQ09NUF9QQVJBTTFfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT01QX1BBUkFNMV9SRUc6IElDX0NPTVBfUEFSQU0xIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19DT01QX1BBUkFNMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfQ09NUF9QQVJBTTJfUkVHX0lDX0NPTVBfUEFSQU0yX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09NUF9QQVJBTTJfUkVHOiBJQ19DT01QX1BBUkFNMiAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09NUF9QQVJBTTJfUkVHX0lDX0NPTVBfUEFSQU0yX01zayAoMHhmZmZmVUwpICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09NUF9QQVJBTTJfUkVHOiBJQ19DT01QX1BBUkFNMiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19DT01QX1ZFUlNJT05fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NPTVBfVkVSU0lPTl9SRUdfSUNfQ09NUF9WRVJTSU9OX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NPTVBfVkVSU0lPTl9SRUc6IElDX0NPTVBfVkVSU0lPTiAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NPTVBfVkVSU0lPTl9SRUdfSUNfQ09NUF9WRVJTSU9OX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBJMkMgSTJDX0NPTVBfVkVSU0lPTl9SRUc6IElDX0NPTVBfVkVSU0lPTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NPTVAyX1ZFUlNJT04gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NPTVAyX1ZFUlNJT05fSUNfQ09NUDJfVkVSU0lPTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NPTVAyX1ZFUlNJT046IElDX0NPTVAyX1ZFUlNJT04gKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NPTVAyX1ZFUlNJT05fSUNfQ09NUDJfVkVSU0lPTl9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBJMkMgSTJDX0NPTVAyX1ZFUlNJT046IElDX0NPTVAyX1ZFUlNJT04gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19DT01QX1RZUEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DT01QX1RZUEVfUkVHX0lDX0NPTVBfVFlQRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT01QX1RZUEVfUkVHOiBJQ19DT01QX1RZUEUgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT01QX1RZUEVfUkVHX0lDX0NPTVBfVFlQRV9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT01QX1RZUEVfUkVHOiBJQ19DT01QX1RZUEUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NPTVBfVFlQRTJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DT01QX1RZUEUyX1JFR19JQ19DT01QMl9UWVBFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT01QX1RZUEUyX1JFRzogSUNfQ09NUDJfVFlQRSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT01QX1RZUEUyX1JFR19JQ19DT01QMl9UWVBFX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT01QX1RZUEUyX1JFRzogSUNfQ09NUDJfVFlQRSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnSTJDMicgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9DT05fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfTUFTVEVSX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDX01BU1RFUl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfTUFTVEVSX01PREVfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDX01BU1RFUl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfU1BFRURfUG9zICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDX1NQRUVEIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfU1BFRURfTXNrICAgICAgICgweDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDX1NQRUVEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfMTBCSVRBRERSX1NMQVZFX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDXzEwQklUQUREUl9TTEFWRSAoQml0IDMpICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfMTBCSVRBRERSX1NMQVZFX01zayAoMHg4VUwpICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDXzEwQklUQUREUl9TTEFWRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NPTl9SRUdfSTJDXzEwQklUQUREUl9NQVNURVJfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NPTl9SRUc6IEkyQ18xMEJJVEFERFJfTUFTVEVSIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NPTl9SRUdfSTJDXzEwQklUQUREUl9NQVNURVJfTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NPTl9SRUc6IEkyQ18xMEJJVEFERFJfTUFTVEVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfUkVTVEFSVF9FTl9Qb3MgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDX1JFU1RBUlRfRU4gKEJpdCA1KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfUkVTVEFSVF9FTl9Nc2sgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDX1JFU1RBUlRfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfU0xBVkVfRElTQUJMRV9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDX1NMQVZFX0RJU0FCTEUgKEJpdCA2KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfU0xBVkVfRElTQUJMRV9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDX1NMQVZFX0RJU0FCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9UQVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfVEFSX1JFR19JQ19UQVJfUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVEFSX1JFRzogSUNfVEFSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVEFSX1JFR19JQ19UQVJfTXNrICAgICAgICAgICgweDNmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVEFSX1JFRzogSUNfVEFSIChCaXRmaWVsZC1NYXNrOiAweDNmZikgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVEFSX1JFR19HQ19PUl9TVEFSVF9Qb3MgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVEFSX1JFRzogR0NfT1JfU1RBUlQgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVEFSX1JFR19HQ19PUl9TVEFSVF9Nc2sgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVEFSX1JFRzogR0NfT1JfU1RBUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVEFSX1JFR19TUEVDSUFMX1BvcyAgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVEFSX1JFRzogU1BFQ0lBTCAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVEFSX1JFR19TUEVDSUFMX01zayAgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVEFSX1JFRzogU1BFQ0lBTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9TQVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfU0FSX1JFR19JQ19TQVJfUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU0FSX1JFRzogSUNfU0FSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU0FSX1JFR19JQ19TQVJfTXNrICAgICAgICAgICgweDNmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU0FSX1JFRzogSUNfU0FSIChCaXRmaWVsZC1NYXNrOiAweDNmZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9EQVRBX0NNRF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfREFUQV9DTURfUkVHX0RBVF9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfREFUQV9DTURfUkVHOiBEQVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfREFUQV9DTURfUkVHX0RBVF9Nc2sgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfREFUQV9DTURfUkVHOiBEQVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfREFUQV9DTURfUkVHX0NNRF9Qb3MgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfREFUQV9DTURfUkVHOiBDTUQgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfREFUQV9DTURfUkVHX0NNRF9Nc2sgICAgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfREFUQV9DTURfUkVHOiBDTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfREFUQV9DTURfUkVHX1NUT1BfUG9zICAgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfREFUQV9DTURfUkVHOiBTVE9QIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfREFUQV9DTURfUkVHX1NUT1BfTXNrICAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfREFUQV9DTURfUkVHOiBTVE9QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfREFUQV9DTURfUkVHX1JFU1RBUlRfUG9zICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfREFUQV9DTURfUkVHOiBSRVNUQVJUIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfREFUQV9DTURfUkVHX1JFU1RBUlRfTXNrICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfREFUQV9DTURfUkVHOiBSRVNUQVJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX1NTX1NDTF9IQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfU1NfU0NMX0hDTlRfUkVHX0lDX1NTX1NDTF9IQ05UX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1NfU0NMX0hDTlRfUkVHOiBJQ19TU19TQ0xfSENOVCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1NfU0NMX0hDTlRfUkVHX0lDX1NTX1NDTF9IQ05UX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1NfU0NMX0hDTlRfUkVHOiBJQ19TU19TQ0xfSENOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX1NTX1NDTF9MQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfU1NfU0NMX0xDTlRfUkVHX0lDX1NTX1NDTF9MQ05UX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1NfU0NMX0xDTlRfUkVHOiBJQ19TU19TQ0xfTENOVCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1NfU0NMX0xDTlRfUkVHX0lDX1NTX1NDTF9MQ05UX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1NfU0NMX0xDTlRfUkVHOiBJQ19TU19TQ0xfTENOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0ZTX1NDTF9IQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfRlNfU0NMX0hDTlRfUkVHX0lDX0ZTX1NDTF9IQ05UX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfRlNfU0NMX0hDTlRfUkVHOiBJQ19GU19TQ0xfSENOVCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfRlNfU0NMX0hDTlRfUkVHX0lDX0ZTX1NDTF9IQ05UX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBJMkMyIEkyQzJfRlNfU0NMX0hDTlRfUkVHOiBJQ19GU19TQ0xfSENOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0ZTX1NDTF9MQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfRlNfU0NMX0xDTlRfUkVHX0lDX0ZTX1NDTF9MQ05UX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfRlNfU0NMX0xDTlRfUkVHOiBJQ19GU19TQ0xfTENOVCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfRlNfU0NMX0xDTlRfUkVHX0lDX0ZTX1NDTF9MQ05UX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBJMkMyIEkyQzJfRlNfU0NMX0xDTlRfUkVHOiBJQ19GU19TQ0xfTENOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1JYX1VOREVSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9SWF9VTkRFUiAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1JYX1VOREVSX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9SWF9VTkRFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1JYX09WRVJfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9SWF9PVkVSIChCaXQgMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1JYX09WRVJfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9SWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1JYX0ZVTExfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9SWF9GVUxMIChCaXQgMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1JYX0ZVTExfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9SWF9GVUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1RYX09WRVJfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9UWF9PVkVSIChCaXQgMykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1RYX09WRVJfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9UWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1RYX0VNUFRZX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9UWF9FTVBUWSAoQml0IDQpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1RYX0VNUFRZX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9UWF9FTVBUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1JEX1JFUV9Qb3MgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9SRF9SRVEgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1JEX1JFUV9Nc2sgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9SRF9SRVEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1RYX0FCUlRfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9UWF9BQlJUIChCaXQgNikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1RYX0FCUlRfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9UWF9BQlJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1JYX0RPTkVfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9SWF9ET05FIChCaXQgNykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1JYX0RPTkVfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9SWF9ET05FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX0FDVElWSVRZX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9BQ1RJVklUWSAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX0FDVElWSVRZX01zayAoMHgxMDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1NUT1BfREVUX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9TVE9QX0RFVCAoQml0IDkpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1NUT1BfREVUX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9TVE9QX0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1NUQVJUX0RFVF9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9TVEFSVF9ERVQgKEJpdCAxMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX1NUQVJUX0RFVF9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9TVEFSVF9ERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX0dFTl9DQUxMX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9HRU5fQ0FMTCAoQml0IDExKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9TVEFUX1JFR19SX0dFTl9DQUxMX01zayAoMHg4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9TVEFUX1JFRzogUl9HRU5fQ0FMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1JYX1VOREVSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9SWF9VTkRFUiAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1JYX1VOREVSX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9SWF9VTkRFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1JYX09WRVJfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9SWF9PVkVSIChCaXQgMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1JYX09WRVJfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9SWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1JYX0ZVTExfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9SWF9GVUxMIChCaXQgMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1JYX0ZVTExfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9SWF9GVUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1RYX09WRVJfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9UWF9PVkVSIChCaXQgMykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1RYX09WRVJfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9UWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1RYX0VNUFRZX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9UWF9FTVBUWSAoQml0IDQpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1RYX0VNUFRZX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9UWF9FTVBUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1JEX1JFUV9Qb3MgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9SRF9SRVEgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1JEX1JFUV9Nc2sgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9SRF9SRVEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1RYX0FCUlRfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9UWF9BQlJUIChCaXQgNikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1RYX0FCUlRfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9UWF9BQlJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1JYX0RPTkVfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9SWF9ET05FIChCaXQgNykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1JYX0RPTkVfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9SWF9ET05FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX0FDVElWSVRZX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9BQ1RJVklUWSAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX0FDVElWSVRZX01zayAoMHgxMDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1NUT1BfREVUX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9TVE9QX0RFVCAoQml0IDkpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1NUT1BfREVUX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9TVE9QX0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1NUQVJUX0RFVF9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9TVEFSVF9ERVQgKEJpdCAxMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX1NUQVJUX0RFVF9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9TVEFSVF9ERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX0dFTl9DQUxMX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9HRU5fQ0FMTCAoQml0IDExKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSU5UUl9NQVNLX1JFR19NX0dFTl9DQUxMX01zayAoMHg4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSU5UUl9NQVNLX1JFRzogTV9HRU5fQ0FMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfUlhfVU5ERVJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX1VOREVSIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfUlhfVU5ERVJfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX1VOREVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfUlhfT1ZFUl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX09WRVIgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfUlhfT1ZFUl9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfUlhfRlVMTF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX0ZVTEwgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfUlhfRlVMTF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX0ZVTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfVFhfT1ZFUl9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX09WRVIgKEJpdCAzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfVFhfT1ZFUl9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfVFhfRU1QVFlfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX0VNUFRZIChCaXQgNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfVFhfRU1QVFlfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX0VNUFRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfUkRfUkVRX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFJEX1JFUSAoQml0IDUpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfUkRfUkVRX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFJEX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfVFhfQUJSVF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX0FCUlQgKEJpdCA2KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfVFhfQUJSVF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX0FCUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfUlhfRE9ORV9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX0RPTkUgKEJpdCA3KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfUlhfRE9ORV9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX0RPTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfQUNUSVZJVFlfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IEFDVElWSVRZIChCaXQgOCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfQUNUSVZJVFlfTXNrICgweDEwMFVMKSAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IEFDVElWSVRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfU1RPUF9ERVRfUG9zICg5VUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFNUT1BfREVUIChCaXQgOSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfU1RPUF9ERVRfTXNrICgweDIwMFVMKSAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFNUT1BfREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfU1RBUlRfREVUX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFNUQVJUX0RFVCAoQml0IDEwKSAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfU1RBUlRfREVUX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IFNUQVJUX0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1JBV19JTlRSX1NUQVRfUkVHX0dFTl9DQUxMX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1JBV19JTlRSX1NUQVRfUkVHOiBHRU5fQ0FMTCAoQml0IDExKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1JBV19JTlRSX1NUQVRfUkVHX0dFTl9DQUxMX01zayAoMHg4MDBVTCkgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1JBV19JTlRSX1NUQVRfUkVHOiBHRU5fQ0FMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9SWF9UTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1JYX1RMX1JFR19SWF9UTF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1JYX1RMX1JFRzogUlhfVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1JYX1RMX1JFR19SWF9UTF9Nc2sgICAgICAgICAoMHgxZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1JYX1RMX1JFRzogUlhfVEwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9UWF9UTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX1RMX1JFR19UWF9UTF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX1RMX1JFRzogVFhfVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX1RMX1JFR19UWF9UTF9Nc2sgICAgICAgICAoMHgxZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX1RMX1JFRzogVFhfVEwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQ0xSX0lOVFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9JTlRSX1JFR19DTFJfSU5UUl9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9JTlRSX1JFRzogQ0xSX0lOVFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9JTlRSX1JFR19DTFJfSU5UUl9Nc2sgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9JTlRSX1JFRzogQ0xSX0lOVFIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NMUl9SWF9VTkRFUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9SWF9VTkRFUl9SRUdfQ0xSX1JYX1VOREVSX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9SWF9VTkRFUl9SRUc6IENMUl9SWF9VTkRFUiAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9SWF9VTkRFUl9SRUdfQ0xSX1JYX1VOREVSX01zayAoMHgxVUwpICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9SWF9VTkRFUl9SRUc6IENMUl9SWF9VTkRFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9DTFJfUlhfT1ZFUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9SWF9PVkVSX1JFR19DTFJfUlhfT1ZFUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9SWF9PVkVSX1JFRzogQ0xSX1JYX09WRVIgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9SWF9PVkVSX1JFR19DTFJfUlhfT1ZFUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9SWF9PVkVSX1JFRzogQ0xSX1JYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQ0xSX1RYX09WRVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfVFhfT1ZFUl9SRUdfQ0xSX1RYX09WRVJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfVFhfT1ZFUl9SRUc6IENMUl9UWF9PVkVSIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfVFhfT1ZFUl9SRUdfQ0xSX1RYX09WRVJfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfVFhfT1ZFUl9SRUc6IENMUl9UWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NMUl9SRF9SRVFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX1JEX1JFUV9SRUdfQ0xSX1JEX1JFUV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX1JEX1JFUV9SRUc6IENMUl9SRF9SRVEgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX1JEX1JFUV9SRUdfQ0xSX1JEX1JFUV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX1JEX1JFUV9SRUc6IENMUl9SRF9SRVEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NMUl9UWF9BQlJUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX1RYX0FCUlRfUkVHX0NMUl9UWF9BQlJUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX1RYX0FCUlRfUkVHOiBDTFJfVFhfQUJSVCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX1RYX0FCUlRfUkVHX0NMUl9UWF9BQlJUX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX1RYX0FCUlRfUkVHOiBDTFJfVFhfQUJSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9DTFJfUlhfRE9ORV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9SWF9ET05FX1JFR19DTFJfUlhfRE9ORV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9SWF9ET05FX1JFRzogQ0xSX1JYX0RPTkUgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9SWF9ET05FX1JFR19DTFJfUlhfRE9ORV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9SWF9ET05FX1JFRzogQ0xSX1JYX0RPTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9DTFJfQUNUSVZJVFlfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfQUNUSVZJVFlfUkVHX0NMUl9BQ1RJVklUWV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfQUNUSVZJVFlfUkVHOiBDTFJfQUNUSVZJVFkgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfQUNUSVZJVFlfUkVHX0NMUl9BQ1RJVklUWV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfQUNUSVZJVFlfUkVHOiBDTFJfQUNUSVZJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9DTFJfU1RPUF9ERVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfU1RPUF9ERVRfUkVHX0NMUl9BQ1RJVklUWV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfU1RPUF9ERVRfUkVHOiBDTFJfQUNUSVZJVFkgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfU1RPUF9ERVRfUkVHX0NMUl9BQ1RJVklUWV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfU1RPUF9ERVRfUkVHOiBDTFJfQUNUSVZJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9DTFJfU1RBUlRfREVUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfU1RBUlRfREVUX1JFR19DTFJfU1RBUlRfREVUX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfU1RBUlRfREVUX1JFRzogQ0xSX1NUQVJUX0RFVCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfU1RBUlRfREVUX1JFR19DTFJfU1RBUlRfREVUX01zayAoMHgxVUwpICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfU1RBUlRfREVUX1JFRzogQ0xSX1NUQVJUX0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NMUl9HRU5fQ0FMTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9HRU5fQ0FMTF9SRUdfQ0xSX0dFTl9DQUxMX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9HRU5fQ0FMTF9SRUc6IENMUl9HRU5fQ0FMTCAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9HRU5fQ0FMTF9SRUdfQ0xSX0dFTl9DQUxMX01zayAoMHgxVUwpICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9HRU5fQ0FMTF9SRUc6IENMUl9HRU5fQ0FMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0VOQUJMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0VOQUJMRV9SRUdfQ1RSTF9FTkFCTEVfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0VOQUJMRV9SRUc6IENUUkxfRU5BQkxFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0VOQUJMRV9SRUdfQ1RSTF9FTkFCTEVfTXNrICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0VOQUJMRV9SRUc6IENUUkxfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfSTJDX0FDVElWSVRZX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IEkyQ19BQ1RJVklUWSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfSTJDX0FDVElWSVRZX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IEkyQ19BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfVEZORl9Qb3MgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IFRGTkYgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfVEZORl9Nc2sgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IFRGTkYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfVEZFX1BvcyAgICAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IFRGRSAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfVEZFX01zayAgICAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IFRGRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfUkZORV9Qb3MgICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IFJGTkUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfUkZORV9Nc2sgICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IFJGTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfUkZGX1BvcyAgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IFJGRiAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfUkZGX01zayAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IFJGRiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfTVNUX0FDVElWSVRZX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IE1TVF9BQ1RJVklUWSAoQml0IDUpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfTVNUX0FDVElWSVRZX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IE1TVF9BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfU0xWX0FDVElWSVRZX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IFNMVl9BQ1RJVklUWSAoQml0IDYpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NUQVRVU19SRUdfU0xWX0FDVElWSVRZX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NUQVRVU19SRUc6IFNMVl9BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9UWEZMUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYRkxSX1JFR19UWEZMUl9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1RYRkxSX1JFRzogVFhGTFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYRkxSX1JFR19UWEZMUl9Nc2sgICAgICAgICAoMHgzZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1RYRkxSX1JFRzogVFhGTFIgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9SWEZMUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1JYRkxSX1JFR19SWEZMUl9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1JYRkxSX1JFRzogUlhGTFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1JYRkxSX1JFR19SWEZMUl9Nc2sgICAgICAgICAoMHgzZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1JYRkxSX1JFRzogUlhGTFIgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfU0RBX0hPTERfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NEQV9IT0xEX1JFR19JQ19TREFfSE9MRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NEQV9IT0xEX1JFRzogSUNfU0RBX0hPTEQgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NEQV9IT0xEX1JFR19JQ19TREFfSE9MRF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NEQV9IT0xEX1JFRzogSUNfU0RBX0hPTEQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzdCX0FERFJfTk9BQ0tfUG9zICgwVUwpICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF83Ql9BRERSX05PQUNLIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzdCX0FERFJfTk9BQ0tfTXNrICgweDFVTCkgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF83Ql9BRERSX05PQUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfMTBBRERSMV9OT0FDS19Qb3MgKDFVTCkgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUXzEwQUREUjFfTk9BQ0sgKEJpdCAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfMTBBRERSMV9OT0FDS19Nc2sgKDB4MlVMKSAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUXzEwQUREUjFfTk9BQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF8xMEFERFIyX05PQUNLX1BvcyAoMlVMKSAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfMTBBRERSMl9OT0FDSyAoQml0IDIpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF8xMEFERFIyX05PQUNLX01zayAoMHg0VUwpICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfMTBBRERSMl9OT0FDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1RYREFUQV9OT0FDS19Qb3MgKDNVTCkgICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9UWERBVEFfTk9BQ0sgKEJpdCAzKSAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1RYREFUQV9OT0FDS19Nc2sgKDB4OFVMKSAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9UWERBVEFfTk9BQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9HQ0FMTF9OT0FDS19Qb3MgKDRVTCkgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfR0NBTExfTk9BQ0sgKEJpdCA0KSAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9HQ0FMTF9OT0FDS19Nc2sgKDB4MTBVTCkgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfR0NBTExfTk9BQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9HQ0FMTF9SRUFEX1BvcyAoNVVMKSAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfR0NBTExfUkVBRCAoQml0IDUpICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9HQ0FMTF9SRUFEX01zayAoMHgyMFVMKSAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfR0NBTExfUkVBRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0hTX0FDS0RFVF9Qb3MgKDZVTCkgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9IU19BQ0tERVQgKEJpdCA2KSAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0hTX0FDS0RFVF9Nc2sgKDB4NDBVTCkgICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9IU19BQ0tERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TQllURV9BQ0tERVRfUG9zICg3VUwpICAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0JZVEVfQUNLREVUIChCaXQgNykgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TQllURV9BQ0tERVRfTXNrICgweDgwVUwpICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0JZVEVfQUNLREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfSFNfTk9SU1RSVF9Qb3MgKDhVTCkgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX0hTX05PUlNUUlQgKEJpdCA4KSAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfSFNfTk9SU1RSVF9Nc2sgKDB4MTAwVUwpICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX0hTX05PUlNUUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TQllURV9OT1JTVFJUX1BvcyAoOVVMKSAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0JZVEVfTk9SU1RSVCAoQml0IDkpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TQllURV9OT1JTVFJUX01zayAoMHgyMDBVTCkgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0JZVEVfTk9SU1RSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzEwQl9SRF9OT1JTVFJUX1BvcyAoMTBVTCkgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF8xMEJfUkRfTk9SU1RSVCAoQml0IDEwKSAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzEwQl9SRF9OT1JTVFJUX01zayAoMHg0MDBVTCkgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF8xMEJfUkRfTk9SU1RSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX01BU1RFUl9ESVNfUG9zICgxMVVMKSAgICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9NQVNURVJfRElTIChCaXQgMTEpICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX01BU1RFUl9ESVNfTXNrICgweDgwMFVMKSAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9NQVNURVJfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FSQl9MT1NUX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBUkJfTE9TVCAoQml0IDEyKSAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FSQl9MT1NUX01zayAoMHgxMDAwVUwpICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBUkJfTE9TVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NMVkZMVVNIX1RYRklGT19Qb3MgKDEzVUwpICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TTFZGTFVTSF9UWEZJRk8gKEJpdCAxMykgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NMVkZMVVNIX1RYRklGT19Nc2sgKDB4MjAwMFVMKSAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0xWRkxVU0hfVFhGSUZPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWX0FSQkxPU1RfUG9zICgxNFVMKSAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NMVl9BUkJMT1NUIChCaXQgMTQpICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWX0FSQkxPU1RfTXNrICgweDQwMDBVTCkgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NMVl9BUkJMT1NUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWUkRfSU5UWF9Qb3MgKDE1VUwpICAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NMVlJEX0lOVFggKEJpdCAxNSkgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWUkRfSU5UWF9Nc2sgKDB4ODAwMFVMKSAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NMVlJEX0lOVFggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9ETUFfQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9ETUFfQ1JfUkVHX1JETUFFX1BvcyAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9ETUFfQ1JfUkVHOiBSRE1BRSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9ETUFfQ1JfUkVHX1JETUFFX01zayAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9ETUFfQ1JfUkVHOiBSRE1BRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9ETUFfQ1JfUkVHX1RETUFFX1BvcyAgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9ETUFfQ1JfUkVHOiBURE1BRSAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9ETUFfQ1JfUkVHX1RETUFFX01zayAgICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9ETUFfQ1JfUkVHOiBURE1BRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0RNQV9URExSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9ETUFfVERMUl9SRUdfRE1BVERMX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9ETUFfVERMUl9SRUc6IERNQVRETCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9ETUFfVERMUl9SRUdfRE1BVERMX01zayAgICAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9ETUFfVERMUl9SRUc6IERNQVRETCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0RNQV9SRExSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9ETUFfUkRMUl9SRUdfRE1BUkRMX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9ETUFfUkRMUl9SRUc6IERNQVJETCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9ETUFfUkRMUl9SRUdfRE1BUkRMX01zayAgICAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9ETUFfUkRMUl9SRUc6IERNQVJETCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX1NEQV9TRVRVUF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9TREFfU0VUVVBfUkVHX1NEQV9TRVRVUF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9TREFfU0VUVVBfUkVHOiBTREFfU0VUVVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9TREFfU0VUVVBfUkVHX1NEQV9TRVRVUF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9TREFfU0VUVVBfUkVHOiBTREFfU0VUVVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQUNLX0dFTkVSQUxfQ0FMTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9BQ0tfR0VORVJBTF9DQUxMX1JFR19BQ0tfR0VOX0NBTExfUG9zICgwVUwpICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9BQ0tfR0VORVJBTF9DQUxMX1JFRzogQUNLX0dFTl9DQUxMIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9BQ0tfR0VORVJBTF9DQUxMX1JFR19BQ0tfR0VOX0NBTExfTXNrICgweDFVTCkgICAgICAgICAvKiE8IEkyQzIgSTJDMl9BQ0tfR0VORVJBTF9DQUxMX1JFRzogQUNLX0dFTl9DQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfRU5BQkxFX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfRU5BQkxFX1NUQVRVU19SRUdfSUNfRU5fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfRU5BQkxFX1NUQVRVU19SRUc6IElDX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfRU5BQkxFX1NUQVRVU19SRUdfSUNfRU5fTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfRU5BQkxFX1NUQVRVU19SRUc6IElDX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfRU5BQkxFX1NUQVRVU19SRUdfU0xWX0RJU0FCTEVEX1dISUxFX0JVU1lfUG9zICgxVUwpICAgLyohPCBJMkMyIEkyQzJfRU5BQkxFX1NUQVRVU19SRUc6IFNMVl9ESVNBQkxFRF9XSElMRV9CVVNZIChCaXQgMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0VOQUJMRV9TVEFUVVNfUkVHX1NMVl9ESVNBQkxFRF9XSElMRV9CVVNZX01zayAoMHgyVUwpIC8qITwgSTJDMiBJMkMyX0VOQUJMRV9TVEFUVVNfUkVHOiBTTFZfRElTQUJMRURfV0hJTEVfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0VOQUJMRV9TVEFUVVNfUkVHX1NMVl9SWF9EQVRBX0xPU1RfUG9zICgyVUwpICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0VOQUJMRV9TVEFUVVNfUkVHOiBTTFZfUlhfREFUQV9MT1NUIChCaXQgMikgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0VOQUJMRV9TVEFUVVNfUkVHX1NMVl9SWF9EQVRBX0xPU1RfTXNrICgweDRVTCkgICAgICAgIC8qITwgSTJDMiBJMkMyX0VOQUJMRV9TVEFUVVNfUkVHOiBTTFZfUlhfREFUQV9MT1NUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfSUNfRlNfU1BLTEVOX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfSUNfRlNfU1BLTEVOX1JFR19JQ19GU19TUEtMRU5fUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSUNfRlNfU1BLTEVOX1JFRzogSUNfRlNfU1BLTEVOIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfSUNfRlNfU1BLTEVOX1JFR19JQ19GU19TUEtMRU5fTXNrICgweGZmVUwpICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfSUNfRlNfU1BLTEVOX1JFRzogSUNfRlNfU1BLTEVOIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NPTVBfUEFSQU0xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09NUF9QQVJBTTFfUkVHX0lDX0NPTVBfUEFSQU0xX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09NUF9QQVJBTTFfUkVHOiBJQ19DT01QX1BBUkFNMSAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09NUF9QQVJBTTFfUkVHX0lDX0NPTVBfUEFSQU0xX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09NUF9QQVJBTTFfUkVHOiBJQ19DT01QX1BBUkFNMSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NPTVBfUEFSQU0yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09NUF9QQVJBTTJfUkVHX0lDX0NPTVBfUEFSQU0yX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09NUF9QQVJBTTJfUkVHOiBJQ19DT01QX1BBUkFNMiAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09NUF9QQVJBTTJfUkVHX0lDX0NPTVBfUEFSQU0yX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09NUF9QQVJBTTJfUkVHOiBJQ19DT01QX1BBUkFNMiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQ09NUF9WRVJTSU9OX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09NUF9WRVJTSU9OX1JFR19JQ19DT01QX1ZFUlNJT05fUG9zICgwVUwpICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09NUF9WRVJTSU9OX1JFRzogSUNfQ09NUF9WRVJTSU9OIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09NUF9WRVJTSU9OX1JFR19JQ19DT01QX1ZFUlNJT05fTXNrICgweGZmZmZVTCkgICAgICAgLyohPCBJMkMyIEkyQzJfQ09NUF9WRVJTSU9OX1JFRzogSUNfQ09NUF9WRVJTSU9OIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NPTVAyX1ZFUlNJT04gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT01QMl9WRVJTSU9OX0lDX0NPTVAyX1ZFUlNJT05fUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT01QMl9WRVJTSU9OOiBJQ19DT01QMl9WRVJTSU9OIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT01QMl9WRVJTSU9OX0lDX0NPTVAyX1ZFUlNJT05fTXNrICgweGZmZmZVTCkgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT01QMl9WRVJTSU9OOiBJQ19DT01QMl9WRVJTSU9OIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NPTVBfVFlQRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT01QX1RZUEVfUkVHX0lDX0NPTVBfVFlQRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT01QX1RZUEVfUkVHOiBJQ19DT01QX1RZUEUgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT01QX1RZUEVfUkVHX0lDX0NPTVBfVFlQRV9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT01QX1RZUEVfUkVHOiBJQ19DT01QX1RZUEUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9DT01QX1RZUEUyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NPTVBfVFlQRTJfUkVHX0lDX0NPTVAyX1RZUEVfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NPTVBfVFlQRTJfUkVHOiBJQ19DT01QMl9UWVBFIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NPTVBfVFlQRTJfUkVHX0lDX0NPTVAyX1RZUEVfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NPTVBfVFlQRTJfUkVHOiBJQ19DT01QMl9UWVBFIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgIHN0cnVjdCAnSVInIFBvc2l0aW9uICYgTWFzayAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJUl9JUl9GUkVRX0NBUlJJRVJfT05fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIElSX0lSX0ZSRVFfQ0FSUklFUl9PTl9SRUdfSVJfRlJFUV9DQVJSSUVSX09OX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IElSIElSX0ZSRVFfQ0FSUklFUl9PTl9SRUc6IElSX0ZSRVFfQ0FSUklFUl9PTiAoQml0IDApICAgICAgICovCisjZGVmaW5lIElSX0lSX0ZSRVFfQ0FSUklFUl9PTl9SRUdfSVJfRlJFUV9DQVJSSUVSX09OX01zayAoMHgzZmZVTCkgICAgICAvKiE8IElSIElSX0ZSRVFfQ0FSUklFUl9PTl9SRUc6IElSX0ZSRVFfQ0FSUklFUl9PTiAoQml0ZmllbGQtTWFzazogMHgzZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIElSX0lSX0ZSRVFfQ0FSUklFUl9PRkZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIElSX0lSX0ZSRVFfQ0FSUklFUl9PRkZfUkVHX0lSX0ZSRVFfQ0FSUklFUl9PRkZfUG9zICgwVUwpICAgICAgICAvKiE8IElSIElSX0ZSRVFfQ0FSUklFUl9PRkZfUkVHOiBJUl9GUkVRX0NBUlJJRVJfT0ZGIChCaXQgMCkgICAgICovCisjZGVmaW5lIElSX0lSX0ZSRVFfQ0FSUklFUl9PRkZfUkVHX0lSX0ZSRVFfQ0FSUklFUl9PRkZfTXNrICgweDNmZlVMKSAgICAvKiE8IElSIElSX0ZSRVFfQ0FSUklFUl9PRkZfUkVHOiBJUl9GUkVRX0NBUlJJRVJfT0ZGIChCaXRmaWVsZC1NYXNrOiAweDNmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIElSX0lSX0xPR0lDX09ORV9USU1FX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSVJfSVJfTE9HSUNfT05FX1RJTUVfUkVHX0lSX0xPR0lDX09ORV9TUEFDRV9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgSVIgSVJfTE9HSUNfT05FX1RJTUVfUkVHOiBJUl9MT0dJQ19PTkVfU1BBQ0UgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfTE9HSUNfT05FX1RJTUVfUkVHX0lSX0xPR0lDX09ORV9TUEFDRV9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgSVIgSVJfTE9HSUNfT05FX1RJTUVfUkVHOiBJUl9MT0dJQ19PTkVfU1BBQ0UgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIElSX0lSX0xPR0lDX09ORV9USU1FX1JFR19JUl9MT0dJQ19PTkVfTUFSS19Qb3MgKDhVTCkgICAgICAgICAgICAvKiE8IElSIElSX0xPR0lDX09ORV9USU1FX1JFRzogSVJfTE9HSUNfT05FX01BUksgKEJpdCA4KSAgICAgICAgICovCisjZGVmaW5lIElSX0lSX0xPR0lDX09ORV9USU1FX1JFR19JUl9MT0dJQ19PTkVfTUFSS19Nc2sgKDB4ZmYwMFVMKSAgICAgICAvKiE8IElSIElSX0xPR0lDX09ORV9USU1FX1JFRzogSVJfTE9HSUNfT05FX01BUksgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJUl9JUl9MT0dJQ19aRVJPX1RJTUVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIElSX0lSX0xPR0lDX1pFUk9fVElNRV9SRUdfSVJfTE9HSUNfWkVST19TUEFDRV9Qb3MgKDBVTCkgICAgICAgICAvKiE8IElSIElSX0xPR0lDX1pFUk9fVElNRV9SRUc6IElSX0xPR0lDX1pFUk9fU1BBQ0UgKEJpdCAwKSAgICAgICovCisjZGVmaW5lIElSX0lSX0xPR0lDX1pFUk9fVElNRV9SRUdfSVJfTE9HSUNfWkVST19TUEFDRV9Nc2sgKDB4ZmZVTCkgICAgICAvKiE8IElSIElSX0xPR0lDX1pFUk9fVElNRV9SRUc6IElSX0xPR0lDX1pFUk9fU1BBQ0UgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIElSX0lSX0xPR0lDX1pFUk9fVElNRV9SRUdfSVJfTE9HSUNfWkVST19NQVJLX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IElSIElSX0xPR0lDX1pFUk9fVElNRV9SRUc6IElSX0xPR0lDX1pFUk9fTUFSSyAoQml0IDgpICAgICAgICovCisjZGVmaW5lIElSX0lSX0xPR0lDX1pFUk9fVElNRV9SRUdfSVJfTE9HSUNfWkVST19NQVJLX01zayAoMHhmZjAwVUwpICAgICAvKiE8IElSIElSX0xPR0lDX1pFUk9fVElNRV9SRUc6IElSX0xPR0lDX1pFUk9fTUFSSyAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSVJfSVJfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfQ09ERV9GSUZPX1JFU0VUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0NPREVfRklGT19SRVNFVCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfQ09ERV9GSUZPX1JFU0VUX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0NPREVfRklGT19SRVNFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfUkVQX0ZJRk9fUkVTRVRfUG9zICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX1JFUF9GSUZPX1JFU0VUIChCaXQgMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfUkVQX0ZJRk9fUkVTRVRfTXNrICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX1JFUF9GSUZPX1JFU0VUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfRU5BQkxFX1BvcyAgICAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0VOQUJMRSAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfRU5BQkxFX01zayAgICAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfVFhfU1RBUlRfUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX1RYX1NUQVJUIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfVFhfU1RBUlRfTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX1RYX1NUQVJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfUkVQRUFUX1RZUEVfUG9zICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX1JFUEVBVF9UWVBFIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfUkVQRUFUX1RZUEVfTXNrICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX1JFUEVBVF9UWVBFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfSU5WRVJUX09VVFBVVF9Qb3MgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0lOVkVSVF9PVVRQVVQgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfSU5WRVJUX09VVFBVVF9Nc2sgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0lOVkVSVF9PVVRQVVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfTE9HSUNfWkVST19GT1JNQVRfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0xPR0lDX1pFUk9fRk9STUFUIChCaXQgNikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfTE9HSUNfWkVST19GT1JNQVRfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0xPR0lDX1pFUk9fRk9STUFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfTE9HSUNfT05FX0ZPUk1BVF9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0xPR0lDX09ORV9GT1JNQVQgKEJpdCA3KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfTE9HSUNfT05FX0ZPUk1BVF9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0xPR0lDX09ORV9GT1JNQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfSVJRX0VOX1BvcyAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0lSUV9FTiAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfQ1RSTF9SRUdfSVJfSVJRX0VOX01zayAgICAgICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfQ1RSTF9SRUc6IElSX0lSUV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJUl9JUl9TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSVJfSVJfU1RBVFVTX1JFR19JUl9DT0RFX0ZJRk9fV1JEU19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfU1RBVFVTX1JFRzogSVJfQ09ERV9GSUZPX1dSRFMgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfU1RBVFVTX1JFR19JUl9DT0RFX0ZJRk9fV1JEU19Nc2sgKDB4M2ZVTCkgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfU1RBVFVTX1JFRzogSVJfQ09ERV9GSUZPX1dSRFMgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgKi8KKyNkZWZpbmUgSVJfSVJfU1RBVFVTX1JFR19JUl9SRVBfRklGT19XUkRTX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfU1RBVFVTX1JFRzogSVJfUkVQX0ZJRk9fV1JEUyAoQml0IDYpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfU1RBVFVTX1JFR19JUl9SRVBfRklGT19XUkRTX01zayAoMHgzYzBVTCkgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfU1RBVFVTX1JFRzogSVJfUkVQX0ZJRk9fV1JEUyAoQml0ZmllbGQtTWFzazogMHgwZikgICAgKi8KKyNkZWZpbmUgSVJfSVJfU1RBVFVTX1JFR19JUl9CVVNZX1BvcyAgICAgICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfU1RBVFVTX1JFRzogSVJfQlVTWSAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfU1RBVFVTX1JFR19JUl9CVVNZX01zayAgICAgICAgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfU1RBVFVTX1JFRzogSVJfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSVJfSVJfUkVQRUFUX1RJTUVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSVJfSVJfUkVQRUFUX1RJTUVfUkVHX0lSX1JFUEVBVF9USU1FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfUkVQRUFUX1RJTUVfUkVHOiBJUl9SRVBFQVRfVElNRSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfUkVQRUFUX1RJTUVfUkVHX0lSX1JFUEVBVF9USU1FX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgIC8qITwgSVIgSVJfUkVQRUFUX1RJTUVfUkVHOiBJUl9SRVBFQVRfVElNRSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSVJfSVJfTUFJTl9GSUZPX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJUl9JUl9NQUlOX0ZJRk9fUkVHX0lSX0NPREVfRklGT19EQVRBX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9NQUlOX0ZJRk9fUkVHOiBJUl9DT0RFX0ZJRk9fREFUQSAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9NQUlOX0ZJRk9fUkVHX0lSX0NPREVfRklGT19EQVRBX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgLyohPCBJUiBJUl9NQUlOX0ZJRk9fUkVHOiBJUl9DT0RFX0ZJRk9fREFUQSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJUl9JUl9SRVBFQVRfRklGT19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJUl9JUl9SRVBFQVRfRklGT19SRUdfSVJfUkVQRUFUX0ZJRk9fREFUQV9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBJUiBJUl9SRVBFQVRfRklGT19SRUc6IElSX1JFUEVBVF9GSUZPX0RBVEEgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9SRVBFQVRfRklGT19SRUdfSVJfUkVQRUFUX0ZJRk9fREFUQV9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgLyohPCBJUiBJUl9SRVBFQVRfRklGT19SRUc6IElSX1JFUEVBVF9GSUZPX0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSVJfSVJfSVJRX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSVJfSVJfSVJRX1NUQVRVU19SRUdfSVJfSVJRX0FDS19Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfSVJRX1NUQVRVU19SRUc6IElSX0lSUV9BQ0sgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfSVJRX1NUQVRVU19SRUdfSVJfSVJRX0FDS19Nc2sgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSVIgSVJfSVJRX1NUQVRVU19SRUc6IElSX0lSUV9BQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgIHN0cnVjdCAnS0JTQ0FOJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX0VOX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9FTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX0VOX01zayAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX0lSUV9NRVNTQUdFX01BU0tfUG9zICgxVUwpICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9JUlFfTUVTU0FHRV9NQVNLIChCaXQgMSkgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX0lSUV9NRVNTQUdFX01BU0tfTXNrICgweDJVTCkgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9JUlFfTUVTU0FHRV9NQVNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fSVJRX0lOQUNUSVZFX01BU0tfUG9zICgyVUwpICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0lSUV9JTkFDVElWRV9NQVNLIChCaXQgMikgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fSVJRX0lOQUNUSVZFX01BU0tfTXNrICgweDRVTCkgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0lSUV9JTkFDVElWRV9NQVNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fSVJRX0ZJRk9fTUFTS19Qb3MgKDNVTCkgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0lSUV9GSUZPX01BU0sgKEJpdCAzKSAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fSVJRX0ZJRk9fTUFTS19Nc2sgKDB4OFVMKSAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0lSUV9GSUZPX01BU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9DVFJMX1JFR19LQlNDTl9JTkFDVElWRV9USU1FX1BvcyAoNFVMKSAgICAgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9DVFJMX1JFRzogS0JTQ05fSU5BQ1RJVkVfVElNRSAoQml0IDQpICAgICAgICAgICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9DVFJMX1JFR19LQlNDTl9JTkFDVElWRV9USU1FX01zayAoMHg3ZjBVTCkgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9DVFJMX1JFRzogS0JTQ05fSU5BQ1RJVkVfVElNRSAoQml0ZmllbGQtTWFzazogMHg3ZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX0lOQUNUSVZFX0VOX1BvcyAoMTFVTCkgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9JTkFDVElWRV9FTiAoQml0IDExKSAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX0lOQUNUSVZFX0VOX01zayAoMHg4MDBVTCkgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9JTkFDVElWRV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX0NMS0RJVl9Qb3MgKDEyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9DTEtESVYgKEJpdCAxMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX0NMS0RJVl9Nc2sgKDB4MzAwMFVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9DTEtESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX1JFU0VUX0ZJRk9fUG9zICgxNFVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9SRVNFVF9GSUZPIChCaXQgMTQpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX1JFU0VUX0ZJRk9fTXNrICgweDQwMDBVTCkgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9SRVNFVF9GSUZPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTDJfUkVHX0tCU0NOX1JPV19BQ1RJVkVfVElNRV9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTDJfUkVHOiBLQlNDTl9ST1dfQUNUSVZFX1RJTUUgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTDJfUkVHX0tCU0NOX1JPV19BQ1RJVkVfVElNRV9Nc2sgKDB4ZmZmZlVMKSAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTDJfUkVHOiBLQlNDTl9ST1dfQUNUSVZFX1RJTUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBLQlNDQU5fS0JTQ05fTUFUUklYX1NJWkVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX01BVFJJWF9TSVpFX1JFR19LQlNDTl9NQVRSSVhfUk9XX1BvcyAoMFVMKSAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX01BVFJJWF9TSVpFX1JFRzogS0JTQ05fTUFUUklYX1JPVyAoQml0IDApICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX01BVFJJWF9TSVpFX1JFR19LQlNDTl9NQVRSSVhfUk9XX01zayAoMHhmVUwpICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX01BVFJJWF9TSVpFX1JFRzogS0JTQ05fTUFUUklYX1JPVyAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX01BVFJJWF9TSVpFX1JFR19LQlNDTl9NQVRSSVhfQ09MVU1OX1BvcyAoNFVMKSAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX01BVFJJWF9TSVpFX1JFRzogS0JTQ05fTUFUUklYX0NPTFVNTiAoQml0IDQpICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX01BVFJJWF9TSVpFX1JFR19LQlNDTl9NQVRSSVhfQ09MVU1OX01zayAoMHgxZjBVTCkgIC8qITwgS0JTQ0FOIEtCU0NOX01BVFJJWF9TSVpFX1JFRzogS0JTQ05fTUFUUklYX0NPTFVNTiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9ERUJPVU5DRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0RFQk9VTkNFX1JFR19LQlNDTl9ERUJPVU5DRV9SRUxFQVNFX1RJTUVfUG9zICgwVUwpIC8qITwgS0JTQ0FOIEtCU0NOX0RFQk9VTkNFX1JFRzogS0JTQ05fREVCT1VOQ0VfUkVMRUFTRV9USU1FIChCaXQgMCkgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0RFQk9VTkNFX1JFR19LQlNDTl9ERUJPVU5DRV9SRUxFQVNFX1RJTUVfTXNrICgweDNmVUwpIC8qITwgS0JTQ0FOIEtCU0NOX0RFQk9VTkNFX1JFRzogS0JTQ05fREVCT1VOQ0VfUkVMRUFTRV9USU1FIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fREVCT1VOQ0VfUkVHX0tCU0NOX0RFQk9VTkNFX1BSRVNTX1RJTUVfUG9zICg2VUwpICAgLyohPCBLQlNDQU4gS0JTQ05fREVCT1VOQ0VfUkVHOiBLQlNDTl9ERUJPVU5DRV9QUkVTU19USU1FIChCaXQgNikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0RFQk9VTkNFX1JFR19LQlNDTl9ERUJPVU5DRV9QUkVTU19USU1FX01zayAoMHhmYzBVTCkgLyohPCBLQlNDQU4gS0JTQ05fREVCT1VOQ0VfUkVHOiBLQlNDTl9ERUJPVU5DRV9QUkVTU19USU1FIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fU1RBVFVTX1JFR19LQlNDTl9NRVNfSVJRX1NUQVRVU19Qb3MgKDBVTCkgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fU1RBVFVTX1JFRzogS0JTQ05fTUVTX0lSUV9TVEFUVVMgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fU1RBVFVTX1JFR19LQlNDTl9NRVNfSVJRX1NUQVRVU19Nc2sgKDB4MVVMKSAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fU1RBVFVTX1JFRzogS0JTQ05fTUVTX0lSUV9TVEFUVVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9TVEFUVVNfUkVHX0tCU0NOX0lOQUNUSVZFX0lSUV9TVEFUVVNfUG9zICgxVUwpICAgICAvKiE8IEtCU0NBTiBLQlNDTl9TVEFUVVNfUkVHOiBLQlNDTl9JTkFDVElWRV9JUlFfU1RBVFVTIChCaXQgMSkgICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9TVEFUVVNfUkVHX0tCU0NOX0lOQUNUSVZFX0lSUV9TVEFUVVNfTXNrICgweDJVTCkgICAvKiE8IEtCU0NBTiBLQlNDTl9TVEFUVVNfUkVHOiBLQlNDTl9JTkFDVElWRV9JUlFfU1RBVFVTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fU1RBVFVTX1JFR19LQlNDTl9OVU1fTUVTU0FHRV9Qb3MgKDJVTCkgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fU1RBVFVTX1JFRzogS0JTQ05fTlVNX01FU1NBR0UgKEJpdCAyKSAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fU1RBVFVTX1JFR19LQlNDTl9OVU1fTUVTU0FHRV9Nc2sgKDB4N2NVTCkgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fU1RBVFVTX1JFRzogS0JTQ05fTlVNX01FU1NBR0UgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9TVEFUVVNfUkVHX0tCU0NOX0ZJRk9fT1ZFUkZMX1BvcyAoN1VMKSAgICAgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9TVEFUVVNfUkVHOiBLQlNDTl9GSUZPX09WRVJGTCAoQml0IDcpICAgICAgICAgICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9TVEFUVVNfUkVHX0tCU0NOX0ZJRk9fT1ZFUkZMX01zayAoMHg4MFVMKSAgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9TVEFUVVNfUkVHOiBLQlNDTl9GSUZPX09WRVJGTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1NUQVRVU19SRUdfS0JTQ05fRklGT19VTkRFUkZMX1BvcyAoOFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1NUQVRVU19SRUc6IEtCU0NOX0ZJRk9fVU5ERVJGTCAoQml0IDgpICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1NUQVRVU19SRUdfS0JTQ05fRklGT19VTkRFUkZMX01zayAoMHgxMDBVTCkgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1NUQVRVU19SRUc6IEtCU0NOX0ZJRk9fVU5ERVJGTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBLQlNDQU5fS0JTQ05fTUVTU0FHRV9LRVlfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX01FU1NBR0VfS0VZX1JFR19LQlNDTl9LRVlJRF9ST1dfUG9zICgwVUwpICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX01FU1NBR0VfS0VZX1JFRzogS0JTQ05fS0VZSURfUk9XIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX01FU1NBR0VfS0VZX1JFR19LQlNDTl9LRVlJRF9ST1dfTXNrICgweGZVTCkgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX01FU1NBR0VfS0VZX1JFRzogS0JTQ05fS0VZSURfUk9XIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fTUVTU0FHRV9LRVlfUkVHX0tCU0NOX0tFWUlEX0NPTFVNTl9Qb3MgKDRVTCkgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fTUVTU0FHRV9LRVlfUkVHOiBLQlNDTl9LRVlJRF9DT0xVTU4gKEJpdCA0KSAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fTUVTU0FHRV9LRVlfUkVHX0tCU0NOX0tFWUlEX0NPTFVNTl9Nc2sgKDB4MWYwVUwpICAgLyohPCBLQlNDQU4gS0JTQ05fTUVTU0FHRV9LRVlfUkVHOiBLQlNDTl9LRVlJRF9DT0xVTU4gKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9NRVNTQUdFX0tFWV9SRUdfS0JTQ05fS0VZX1NUQVRFX1BvcyAoOVVMKSAgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9NRVNTQUdFX0tFWV9SRUc6IEtCU0NOX0tFWV9TVEFURSAoQml0IDkpICAgICAgICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9NRVNTQUdFX0tFWV9SRUdfS0JTQ05fS0VZX1NUQVRFX01zayAoMHgyMDBVTCkgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9NRVNTQUdFX0tFWV9SRUc6IEtCU0NOX0tFWV9TVEFURSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX01FU1NBR0VfS0VZX1JFR19LQlNDTl9MQVNUX0VOVFJZX1BvcyAoMTBVTCkgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX01FU1NBR0VfS0VZX1JFRzogS0JTQ05fTEFTVF9FTlRSWSAoQml0IDEwKSAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX01FU1NBR0VfS0VZX1JFR19LQlNDTl9MQVNUX0VOVFJZX01zayAoMHg0MDBVTCkgICAgIC8qITwgS0JTQ0FOIEtCU0NOX01FU1NBR0VfS0VZX1JFRzogS0JTQ05fTEFTVF9FTlRSWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMDBfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMF9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMF9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMF9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMF9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMDFfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMV9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMV9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMV9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMV9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMDJfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMl9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMl9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMl9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMl9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwMl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwMl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMDNfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwM19NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwM19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwM19NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwM19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwM19NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwM19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwM19NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwM19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwM19NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwM19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwM19NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwM19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMDRfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNF9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNF9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNF9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNF9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMDVfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNV9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNV9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNV9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNV9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMDZfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNl9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNl9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNl9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNl9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwNl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwNl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMDdfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwN19NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwN19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwN19NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwN19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwN19NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwN19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwN19NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwN19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwN19NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwN19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AwN19NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AwN19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMTBfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMF9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMF9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMF9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMF9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMTFfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMV9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMV9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMV9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMV9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMTJfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMl9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMl9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMl9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMl9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxMl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxMl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMTNfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxM19NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxM19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxM19NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxM19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxM19NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxM19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxM19NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxM19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxM19NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxM19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxM19NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxM19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMTRfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNF9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNF9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNF9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNF9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMTVfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNV9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNV9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNV9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNV9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMTZfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNl9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNl9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNl9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNl9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxNl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxNl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMTdfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxN19NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxN19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxN19NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxN19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxN19NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxN19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxN19NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxN19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxN19NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxN19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AxN19NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AxN19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMjBfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMF9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMF9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMF9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMF9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMjFfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMV9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMV9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMV9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMV9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMjJfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMl9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMl9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMl9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMl9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyMl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyMl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMjNfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyM19NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyM19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyM19NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyM19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyM19NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyM19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyM19NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyM19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyM19NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyM19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyM19NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyM19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMjRfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyNF9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyNF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyNF9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyNF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyNF9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyNF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyNF9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyNF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyNF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyNF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AyNF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AyNF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMzBfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMF9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMF9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMF9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMF9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMzFfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMV9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMV9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMV9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMV9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMzJfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMl9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMl9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMl9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMl9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzMl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzMl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMzNfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzM19NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzM19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzM19NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzM19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzM19NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzM19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzM19NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzM19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzM19NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzM19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzM19NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzM19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMzRfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNF9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNF9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNF9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNF9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMzVfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNV9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNV9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNV9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNV9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMzZfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNl9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNl9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNl9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNl9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzNl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzNl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QMzdfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzN19NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzN19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzN19NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzN19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzN19NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzN19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzN19NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzN19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzN19NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzN19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1AzN19NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1AzN19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QNDBfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MF9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MF9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MF9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MF9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QNDFfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MV9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MV9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MV9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MV9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0MV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0MV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QNDJfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Ml9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Ml9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Ml9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Ml9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Ml9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Ml9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Ml9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Ml9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Ml9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Ml9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Ml9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Ml9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QNDNfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0M19NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0M19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0M19NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0M19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0M19NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0M19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0M19NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0M19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0M19NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0M19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0M19NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0M19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QNDRfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NF9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NF9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NF9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NF9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NF9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NF9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NF9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NF9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QNDVfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NV9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NV9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NV9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NV9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NV9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NV9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0NV9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0NV9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QNDZfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Nl9NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Nl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Nl9NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Nl9NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Nl9NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Nl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Nl9NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Nl9NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Nl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Nl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0Nl9NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0Nl9NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9QNDdfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0N19NT0RFX1JFR19LQlNDTl9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0N19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0N19NT0RFX1JFR19LQlNDTl9NT0RFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0N19NT0RFX1JFRzogS0JTQ05fTU9ERSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0N19NT0RFX1JFR19LQlNDTl9ST1dfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0N19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0N19NT0RFX1JFR19LQlNDTl9ST1dfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0N19NT0RFX1JFRzogS0JTQ05fUk9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0N19NT0RFX1JFR19LQlNDTl9HUElPX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0N19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1A0N19NT0RFX1JFR19LQlNDTl9HUElPX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1A0N19NT0RFX1JFRzogS0JTQ05fR1BJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ09UUEMnIFBvc2l0aW9uICYgTWFzayAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIE9UUENfT1RQQ19NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgT1RQQ19PVFBDX01PREVfUkVHX09UUENfTU9ERV9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX01PREVfUkVHOiBPVFBDX01PREVfTU9ERSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX01PREVfUkVHX09UUENfTU9ERV9NT0RFX01zayAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX01PREVfUkVHOiBPVFBDX01PREVfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX01PREVfUkVHX09UUENfTU9ERV9VU0VfRE1BX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX01PREVfUkVHOiBPVFBDX01PREVfVVNFX0RNQSAoQml0IDQpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX01PREVfUkVHX09UUENfTU9ERV9VU0VfRE1BX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX01PREVfUkVHOiBPVFBDX01PREVfVVNFX0RNQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX01PREVfUkVHX09UUENfTU9ERV9GSUZPX0ZMVVNIX1BvcyAoNVVMKSAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX01PREVfUkVHOiBPVFBDX01PREVfRklGT19GTFVTSCAoQml0IDUpICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX01PREVfUkVHX09UUENfTU9ERV9GSUZPX0ZMVVNIX01zayAoMHgyMFVMKSAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX01PREVfUkVHOiBPVFBDX01PREVfRklGT19GTFVTSCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX01PREVfUkVHX09UUENfTU9ERV9FUlJfUkVTUF9ESVNfUG9zICg2VUwpICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX01PREVfUkVHOiBPVFBDX01PREVfRVJSX1JFU1BfRElTIChCaXQgNikgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX01PREVfUkVHX09UUENfTU9ERV9FUlJfUkVTUF9ESVNfTXNrICgweDQwVUwpICAgICAgICAgIC8qITwgT1RQQyBPVFBDX01PREVfUkVHOiBPVFBDX01PREVfRVJSX1JFU1BfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX1VTRV9TUF9ST1dTX1BvcyAoOFVMKSAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9VU0VfU1BfUk9XUyAoQml0IDgpICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX1VTRV9TUF9ST1dTX01zayAoMHgxMDBVTCkgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9VU0VfU1BfUk9XUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX01PREVfUkVHX09UUENfTU9ERV9STERfUlJfUkVRX1BvcyAoOVVMKSAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX01PREVfUkVHOiBPVFBDX01PREVfUkxEX1JSX1JFUSAoQml0IDkpICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX01PREVfUkVHX09UUENfTU9ERV9STERfUlJfUkVRX01zayAoMHgyMDBVTCkgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX01PREVfUkVHOiBPVFBDX01PREVfUkxEX1JSX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIE9UUENfT1RQQ19QQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1BDVFJMX1JFR19PVFBDX1BDVFJMX1dBRERSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1BDVFJMX1JFRzogT1RQQ19QQ1RSTF9XQUREUiAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1BDVFJMX1JFR19PVFBDX1BDVFJMX1dBRERSX01zayAoMHgxZmZmVUwpICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1BDVFJMX1JFRzogT1RQQ19QQ1RSTF9XQUREUiAoQml0ZmllbGQtTWFzazogMHgxZmZmKSAqLworI2RlZmluZSBPVFBDX09UUENfUENUUkxfUkVHX09UUENfUENUUkxfUFJFVFJZX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfUENUUkxfUkVHOiBPVFBDX1BDVFJMX1BSRVRSWSAoQml0IDE0KSAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfUENUUkxfUkVHX09UUENfUENUUkxfUFJFVFJZX01zayAoMHg0MDAwVUwpICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfUENUUkxfUkVHOiBPVFBDX1BDVFJMX1BSRVRSWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1BDVFJMX1JFR19PVFBDX1BDVFJMX1BTVEFSVF9Qb3MgKDE1VUwpICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1BDVFJMX1JFRzogT1RQQ19QQ1RSTF9QU1RBUlQgKEJpdCAxNSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1BDVFJMX1JFR19PVFBDX1BDVFJMX1BTVEFSVF9Nc2sgKDB4ODAwMFVMKSAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1BDVFJMX1JFRzogT1RQQ19QQ1RSTF9QU1RBUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBPVFBDX09UUENfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIE9UUENfT1RQQ19TVEFUX1JFR19PVFBDX1NUQVRfUFJEWV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19TVEFUX1JFRzogT1RQQ19TVEFUX1BSRFkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19TVEFUX1JFR19PVFBDX1NUQVRfUFJEWV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19TVEFUX1JFRzogT1RQQ19TVEFUX1BSRFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19TVEFUX1JFR19PVFBDX1NUQVRfUEVSUl9VTkNfUG9zICgxVUwpICAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19TVEFUX1JFRzogT1RQQ19TVEFUX1BFUlJfVU5DIChCaXQgMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19TVEFUX1JFR19PVFBDX1NUQVRfUEVSUl9VTkNfTXNrICgweDJVTCkgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19TVEFUX1JFRzogT1RQQ19TVEFUX1BFUlJfVU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX1BFUlJfQ09SX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9QRVJSX0NPUiAoQml0IDIpICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX1BFUlJfQ09SX01zayAoMHg0VUwpICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9QRVJSX0NPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9QWkVST19Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfUFpFUk8gKEJpdCAzKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9QWkVST19Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfUFpFUk8gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9UUkRZX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfVFJEWSAoQml0IDQpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9UUkRZX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfVFJEWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9URVJST1JfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfVEVSUk9SIChCaXQgNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9URVJST1JfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfVEVSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9BUkRZX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfQVJEWSAoQml0IDYpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9BUkRZX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfQVJEWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9SRVJST1JfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfUkVSUk9SIChCaXQgNykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9SRVJST1JfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfUkVSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9GV09SRFNfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfRldPUkRTIChCaXQgOCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9GV09SRFNfTXNrICgweGYwMFVMKSAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfRldPUkRTIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9OV09SRFNfUG9zICgxNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfTldPUkRTIChCaXQgMTYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9OV09SRFNfTXNrICgweDNmZmYwMDAwVUwpICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfTldPUkRTIChCaXRmaWVsZC1NYXNrOiAweDNmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIE9UUENfT1RQQ19BSEJBRFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIE9UUENfT1RQQ19BSEJBRFJfUkVHX09UUENfQUhCQURSX1BvcyAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19BSEJBRFJfUkVHOiBPVFBDX0FIQkFEUiAoQml0IDIpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19BSEJBRFJfUkVHX09UUENfQUhCQURSX01zayAgKDB4ZmZmZmZmZmNVTCkgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19BSEJBRFJfUkVHOiBPVFBDX0FIQkFEUiAoQml0ZmllbGQtTWFzazogMHgzZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgT1RQQ19PVFBDX0NFTEFEUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgT1RQQ19PVFBDX0NFTEFEUl9SRUdfT1RQQ19DRUxBRFJfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX0NFTEFEUl9SRUc6IE9UUENfQ0VMQURSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX0NFTEFEUl9SRUdfT1RQQ19DRUxBRFJfTXNrICAoMHgzZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX0NFTEFEUl9SRUc6IE9UUENfQ0VMQURSIChCaXRmaWVsZC1NYXNrOiAweDNmZmYpICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX0NFTEFEUl9SRUdfT1RQQ19DRUxBRFJfTFZfUG9zICgxNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX0NFTEFEUl9SRUc6IE9UUENfQ0VMQURSX0xWIChCaXQgMTYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX0NFTEFEUl9SRUdfT1RQQ19DRUxBRFJfTFZfTXNrICgweDNmZmYwMDAwVUwpICAgICAgICAgIC8qITwgT1RQQyBPVFBDX0NFTEFEUl9SRUc6IE9UUENfQ0VMQURSX0xWIChCaXRmaWVsZC1NYXNrOiAweDNmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIE9UUENfT1RQQ19OV09SRFNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIE9UUENfT1RQQ19OV09SRFNfUkVHX09UUENfTldPUkRTX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19OV09SRFNfUkVHOiBPVFBDX05XT1JEUyAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19OV09SRFNfUkVHX09UUENfTldPUkRTX01zayAgKDB4M2ZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19OV09SRFNfUkVHOiBPVFBDX05XT1JEUyAoQml0ZmllbGQtTWFzazogMHgzZmZmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBPVFBDX09UUENfRkZQUlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIE9UUENfT1RQQ19GRlBSVF9SRUdfT1RQQ19GRlBSVF9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19GRlBSVF9SRUc6IE9UUENfRkZQUlQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19GRlBSVF9SRUdfT1RQQ19GRlBSVF9Nc2sgICAgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19GRlBSVF9SRUc6IE9UUENfRkZQUlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBPVFBDX09UUENfRkZSRF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIE9UUENfT1RQQ19GRlJEX1JFR19PVFBDX0ZGUkRfUG9zICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19GRlJEX1JFRzogT1RQQ19GRlJEIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19GRlJEX1JFR19PVFBDX0ZGUkRfTXNrICAgICAgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19GRlJEX1JFRzogT1RQQ19GRlJEIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIE9UUENfT1RQQ19QV09SRExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIE9UUENfT1RQQ19QV09SRExfUkVHX09UUENfUFdPUkRMX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19QV09SRExfUkVHOiBPVFBDX1BXT1JETCAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19QV09SRExfUkVHX09UUENfUFdPUkRMX01zayAgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19QV09SRExfUkVHOiBPVFBDX1BXT1JETCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgT1RQQ19PVFBDX1BXT1JESF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1BXT1JESF9SRUdfT1RQQ19QV09SREhfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1BXT1JESF9SRUc6IE9UUENfUFdPUkRIIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1BXT1JESF9SRUdfT1RQQ19QV09SREhfTXNrICAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1BXT1JESF9SRUc6IE9UUENfUFdPUkRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgT1RQQ19PVFBDX1RJTTFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfQ0FEWF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVElNMV9SRUc6IE9UUENfVElNMV9DQ19UX0NBRFggKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfQ0FEWF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVElNMV9SRUc6IE9UUENfVElNMV9DQ19UX0NBRFggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfUFcgKEJpdCA4KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Nc2sgKDB4ZmYwMFVMKSAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfUFcgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8xVVNfUG9zICgxNlVMKSAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfMVVTIChCaXQgMTYpICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8xVVNfTXNrICgweDNmMDAwMFVMKSAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfMVVTIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworI2RlZmluZSBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfNTAwTlNfUG9zICgyMlVMKSAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVElNMV9SRUc6IE9UUENfVElNMV9DQ19UXzUwME5TIChCaXQgMjIpICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfNTAwTlNfTXNrICgweDdjMDAwMDBVTCkgICAgICAgLyohPCBPVFBDIE9UUENfVElNMV9SRUc6IE9UUENfVElNMV9DQ19UXzUwME5TIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjAwTlNfUG9zICgyN1VMKSAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVElNMV9SRUc6IE9UUENfVElNMV9DQ19UXzIwME5TIChCaXQgMjcpICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjAwTlNfTXNrICgweDc4MDAwMDAwVUwpICAgICAgLyohPCBPVFBDIE9UUENfVElNMV9SRUc6IE9UUENfVElNMV9DQ19UXzIwME5TIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjVOU19Qb3MgKDMxVUwpICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVElNMV9SRUc6IE9UUENfVElNMV9DQ19UXzI1TlMgKEJpdCAzMSkgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjVOU19Nc2sgKDB4ODAwMDAwMDBVTCkgICAgICAgLyohPCBPVFBDIE9UUENfVElNMV9SRUc6IE9UUENfVElNMV9DQ19UXzI1TlMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBPVFBDX09UUENfVElNMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0yX1JFR19PVFBDX1RJTTJfQ0NfU1RCWV9USFJfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0yX1JFRzogT1RQQ19USU0yX0NDX1NUQllfVEhSIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0yX1JFR19PVFBDX1RJTTJfQ0NfU1RCWV9USFJfTXNrICgweDNmZlVMKSAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0yX1JFRzogT1RQQ19USU0yX0NDX1NUQllfVEhSIChCaXRmaWVsZC1NYXNrOiAweDNmZikgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RJTTJfUkVHX09UUENfVElNMl9DQ19UX0JDSEtfUG9zICgxNlVMKSAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RJTTJfUkVHOiBPVFBDX1RJTTJfQ0NfVF9CQ0hLIChCaXQgMTYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RJTTJfUkVHX09UUENfVElNMl9DQ19UX0JDSEtfTXNrICgweDdmMDAwMFVMKSAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RJTTJfUkVHOiBPVFBDX1RJTTJfQ0NfVF9CQ0hLIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworI2RlZmluZSBPVFBDX09UUENfVElNMl9SRUdfT1RQQ19USU0yX1JERU5MX1BST1RfUG9zICgyM1VMKSAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVElNMl9SRUc6IE9UUENfVElNMl9SREVOTF9QUk9UIChCaXQgMjMpICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfVElNMl9SRUdfT1RQQ19USU0yX1JERU5MX1BST1RfTXNrICgweDgwMDAwMFVMKSAgICAgICAgLyohPCBPVFBDIE9UUENfVElNMl9SRUc6IE9UUENfVElNMl9SREVOTF9QUk9UIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgT1RQQ19PVFBDX1RFU1RfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBPVFBDX09UUENfVEVTVF9SRUdfT1RQQ19TRUNERURfQ09SX0RJU19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVEVTVF9SRUc6IE9UUENfU0VDREVEX0NPUl9ESVMgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfVEVTVF9SRUdfT1RQQ19TRUNERURfQ09SX0RJU19Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVEVTVF9SRUc6IE9UUENfU0VDREVEX0NPUl9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIE9UUENfT1RQQ19URVNUX1JFR19PVFBDX1NFQ0RFRF9SQVdfRUNDX1BvcyAoMTZVTCkgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19URVNUX1JFRzogT1RQQ19TRUNERURfUkFXX0VDQyAoQml0IDE2KSAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19URVNUX1JFR19PVFBDX1NFQ0RFRF9SQVdfRUNDX01zayAoMHhmZjAwMDBVTCkgICAgICAgICAvKiE8IE9UUEMgT1RQQ19URVNUX1JFRzogT1RQQ19TRUNERURfUkFXX0VDQyAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RFU1RfUkVHX09UUENfU0VDREVEX1NUQVRfUG9zICgyNFVMKSAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RFU1RfUkVHOiBPVFBDX1NFQ0RFRF9TVEFUIChCaXQgMjQpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RFU1RfUkVHX09UUENfU0VDREVEX1NUQVRfTXNrICgweDMwMDAwMDBVTCkgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RFU1RfUkVHOiBPVFBDX1NFQ0RFRF9TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RFU1RfUkVHX09UUENfVVNFRF9SUl9Qb3MgICAoMjZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RFU1RfUkVHOiBPVFBDX1VTRURfUlIgKEJpdCAyNikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RFU1RfUkVHX09UUENfVVNFRF9SUl9Nc2sgICAoMHg0MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RFU1RfUkVHOiBPVFBDX1VTRURfUlIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgIHN0cnVjdCAnUEFUQ0gnIFBvc2l0aW9uICYgTWFzayAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfVkFMSURfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfVkFMSURfUkVHX1BBVENIX1ZBTElEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfVkFMSURfUkVHOiBQQVRDSF9WQUxJRCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfVkFMSURfUkVHX1BBVENIX1ZBTElEX01zayAoMHhmZmZmZmZmVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfVkFMSURfUkVHOiBQQVRDSF9WQUxJRCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfVkFMSURfU0VUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9WQUxJRF9TRVRfUkVHX1BBVENIX1ZBTElEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9WQUxJRF9TRVRfUkVHOiBQQVRDSF9WQUxJRCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9WQUxJRF9TRVRfUkVHX1BBVENIX1ZBTElEX01zayAoMHhmZmZmZmZmVUwpICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9WQUxJRF9TRVRfUkVHOiBQQVRDSF9WQUxJRCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9WQUxJRF9SRVNFVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9WQUxJRF9SRVNFVF9SRUdfUEFUQ0hfVkFMSURfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9WQUxJRF9SRVNFVF9SRUc6IFBBVENIX1ZBTElEIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9WQUxJRF9SRVNFVF9SRUdfUEFUQ0hfVkFMSURfTXNrICgweGZmZmZmZmZVTCkgICAgICAgLyohPCBQQVRDSCBQQVRDSF9WQUxJRF9SRVNFVF9SRUc6IFBBVENIX1ZBTElEIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIwX1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIwX1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIwX1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIwX1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIwX1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIwX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIwX1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIwX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxX1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxX1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxX1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxX1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxX1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxX1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyX1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyX1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyX1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyX1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyX1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyX1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIzX1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIzX1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIzX1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIzX1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIzX1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIzX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIzX1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIzX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFI0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI0X1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI0X1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI0X1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI0X1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI0X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI0X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI0X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI0X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFI1X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI1X1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI1X1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI1X1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI1X1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI1X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI1X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI1X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI1X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFI2X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI2X1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI2X1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI2X1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI2X1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI2X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI2X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI2X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI2X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFI3X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI3X1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI3X1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI3X1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI3X1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI3X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI3X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI3X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI3X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFI4X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI4X1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI4X1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI4X1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI4X1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI4X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI4X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI4X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI4X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFI5X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI5X1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI5X1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI5X1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI5X1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI5X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI5X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFI5X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFI5X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjEwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxMF9SRUdfUEFUQ0hfQUREUl9DX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxMF9SRUc6IFBBVENIX0FERFJfQyAoQml0IDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxMF9SRUdfUEFUQ0hfQUREUl9DX01zayAoMHgxZmZmZVVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxMF9SRUc6IFBBVENIX0FERFJfQyAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTBfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTBfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTBfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTBfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIxMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTFfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTFfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTFfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTFfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjExX1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjExX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjExX1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjExX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMTJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjEyX1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjEyX1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjEyX1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjEyX1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxMl9SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxMl9SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxMl9SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxMl9SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjEzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxM19SRUdfUEFUQ0hfQUREUl9DX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxM19SRUc6IFBBVENIX0FERFJfQyAoQml0IDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxM19SRUdfUEFUQ0hfQUREUl9DX01zayAoMHgxZmZmZVVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxM19SRUc6IFBBVENIX0FERFJfQyAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTNfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTNfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTNfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTNfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIxNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTRfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTRfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTRfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTRfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE0X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE0X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE0X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE0X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMTVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE1X1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE1X1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE1X1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE1X1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxNV9SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxNV9SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxNV9SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxNV9SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjE2X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxNl9SRUdfUEFUQ0hfQUREUl9DX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxNl9SRUc6IFBBVENIX0FERFJfQyAoQml0IDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxNl9SRUdfUEFUQ0hfQUREUl9DX01zayAoMHgxZmZmZVVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxNl9SRUc6IFBBVENIX0FERFJfQyAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTZfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTZfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTZfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTZfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIxN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTdfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTdfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTdfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTdfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE3X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE3X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE3X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE3X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMThfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE4X1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE4X1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE4X1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE4X1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxOF9SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxOF9SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxOF9SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxOF9SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjE5X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxOV9SRUdfUEFUQ0hfQUREUl9DX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxOV9SRUc6IFBBVENIX0FERFJfQyAoQml0IDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxOV9SRUdfUEFUQ0hfQUREUl9DX01zayAoMHgxZmZmZVVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxOV9SRUc6IFBBVENIX0FERFJfQyAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTlfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTlfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTlfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTlfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIyMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjBfUkVHX1BBVENIX0FERFJfRF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjBfUkVHOiBQQVRDSF9BRERSX0QgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjBfUkVHX1BBVENIX0FERFJfRF9Nc2sgKDB4MWZmZmNVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjBfUkVHOiBQQVRDSF9BRERSX0QgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjIwX1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjIwX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjIwX1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjIwX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9EQVRBMjBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTIwX1JFR19QQVRDSF9EQVRBX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTIwX1JFRzogUEFUQ0hfREFUQSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTIwX1JFR19QQVRDSF9EQVRBX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTIwX1JFRzogUEFUQ0hfREFUQSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMjFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjIxX1JFR19QQVRDSF9BRERSX0RfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjIxX1JFRzogUEFUQ0hfQUREUl9EIChCaXQgMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjIxX1JFR19QQVRDSF9BRERSX0RfTXNrICgweDFmZmZjVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjIxX1JFRzogUEFUQ0hfQUREUl9EIChCaXRmaWVsZC1NYXNrOiAweDdmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyMV9SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyMV9SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyMV9SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyMV9SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfREFUQTIxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0RBVEEyMV9SRUdfUEFUQ0hfREFUQV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0RBVEEyMV9SRUc6IFBBVENIX0RBVEEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0RBVEEyMV9SRUdfUEFUQ0hfREFUQV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0RBVEEyMV9SRUc6IFBBVENIX0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjIyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyMl9SRUdfUEFUQ0hfQUREUl9EX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyMl9SRUc6IFBBVENIX0FERFJfRCAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyMl9SRUdfUEFUQ0hfQUREUl9EX01zayAoMHgxZmZmY1VMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyMl9SRUc6IFBBVENIX0FERFJfRCAoQml0ZmllbGQtTWFzazogMHg3ZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjJfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjJfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjJfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjJfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0RBVEEyMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9EQVRBMjJfUkVHX1BBVENIX0RBVEFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9EQVRBMjJfUkVHOiBQQVRDSF9EQVRBIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9EQVRBMjJfUkVHX1BBVENIX0RBVEFfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9EQVRBMjJfUkVHOiBQQVRDSF9EQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIyM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjNfUkVHX1BBVENIX0FERFJfRF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjNfUkVHOiBQQVRDSF9BRERSX0QgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjNfUkVHX1BBVENIX0FERFJfRF9Nc2sgKDB4MWZmZmNVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjNfUkVHOiBQQVRDSF9BRERSX0QgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjIzX1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjIzX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjIzX1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjIzX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9EQVRBMjNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTIzX1JFR19QQVRDSF9EQVRBX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTIzX1JFRzogUEFUQ0hfREFUQSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTIzX1JFR19QQVRDSF9EQVRBX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTIzX1JFRzogUEFUQ0hfREFUQSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMjRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI0X1JFR19QQVRDSF9BRERSX0RfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI0X1JFRzogUEFUQ0hfQUREUl9EIChCaXQgMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI0X1JFR19QQVRDSF9BRERSX0RfTXNrICgweDFmZmZjVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI0X1JFRzogUEFUQ0hfQUREUl9EIChCaXRmaWVsZC1NYXNrOiAweDdmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyNF9SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyNF9SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyNF9SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyNF9SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfREFUQTI0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0RBVEEyNF9SRUdfUEFUQ0hfREFUQV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0RBVEEyNF9SRUc6IFBBVENIX0RBVEEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0RBVEEyNF9SRUdfUEFUQ0hfREFUQV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0RBVEEyNF9SRUc6IFBBVENIX0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjI1X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyNV9SRUdfUEFUQ0hfQUREUl9EX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyNV9SRUc6IFBBVENIX0FERFJfRCAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyNV9SRUdfUEFUQ0hfQUREUl9EX01zayAoMHgxZmZmY1VMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyNV9SRUc6IFBBVENIX0FERFJfRCAoQml0ZmllbGQtTWFzazogMHg3ZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjVfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjVfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjVfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjVfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0RBVEEyNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9EQVRBMjVfUkVHX1BBVENIX0RBVEFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9EQVRBMjVfUkVHOiBQQVRDSF9EQVRBIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9EQVRBMjVfUkVHX1BBVENIX0RBVEFfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9EQVRBMjVfUkVHOiBQQVRDSF9EQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIyNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjZfUkVHX1BBVENIX0FERFJfRF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjZfUkVHOiBQQVRDSF9BRERSX0QgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjZfUkVHX1BBVENIX0FERFJfRF9Nc2sgKDB4MWZmZmNVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjZfUkVHOiBQQVRDSF9BRERSX0QgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI2X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI2X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI2X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI2X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9EQVRBMjZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTI2X1JFR19QQVRDSF9EQVRBX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTI2X1JFRzogUEFUQ0hfREFUQSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTI2X1JFR19QQVRDSF9EQVRBX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTI2X1JFRzogUEFUQ0hfREFUQSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMjdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI3X1JFR19QQVRDSF9BRERSX0RfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI3X1JFRzogUEFUQ0hfQUREUl9EIChCaXQgMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI3X1JFR19QQVRDSF9BRERSX0RfTXNrICgweDFmZmZjVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI3X1JFRzogUEFUQ0hfQUREUl9EIChCaXRmaWVsZC1NYXNrOiAweDdmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyN19SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyN19SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyN19SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyN19SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfREFUQTI3X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0RBVEEyN19SRUdfUEFUQ0hfREFUQV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0RBVEEyN19SRUc6IFBBVENIX0RBVEEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0RBVEEyN19SRUdfUEFUQ0hfREFUQV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0RBVEEyN19SRUc6IFBBVENIX0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICBzdHJ1Y3QgJ1BMTERJRycgUG9zaXRpb24gJiBNYXNrICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1NZTlRIX0NUUkwxX0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMV9CTEVfUkVHX0NIQU5ORUxfWkVST19Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMV9CTEVfUkVHOiBDSEFOTkVMX1pFUk8gKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMV9CTEVfUkVHX0NIQU5ORUxfWkVST19Nc2sgKDB4ZmZmVUwpICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMV9CTEVfUkVHOiBDSEFOTkVMX1pFUk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfQkxFX1JFR19TR05fUG9zICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfQkxFX1JFRzogU0dOIChCaXQgMTIpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfQkxFX1JFR19TR05fTXNrICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfQkxFX1JFRzogU0dOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfQkxFX1JFR19DU19Qb3MgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfQkxFX1JFRzogQ1MgKEJpdCAxMykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfQkxFX1JFR19DU19Nc2sgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfQkxFX1JFRzogQ1MgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfQkxFX1JFR19QTExfSFNJX1BPTF9Qb3MgKDE0VUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfQkxFX1JFRzogUExMX0hTSV9QT0wgKEJpdCAxNCkgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfQkxFX1JFR19QTExfSFNJX1BPTF9Nc2sgKDB4NDAwMFVMKSAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfQkxFX1JFRzogUExMX0hTSV9QT0wgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMV9GVERGX1JFR19DSEFOTkVMX1pFUk9fUG9zICgwVUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMV9GVERGX1JFRzogQ0hBTk5FTF9aRVJPIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMV9GVERGX1JFR19DSEFOTkVMX1pFUk9fTXNrICgweGZmZlVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMV9GVERGX1JFRzogQ0hBTk5FTF9aRVJPIChCaXRmaWVsZC1NYXNrOiAweGZmZikgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwxX0ZUREZfUkVHX1NHTl9Qb3MgKDEyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwxX0ZUREZfUkVHOiBTR04gKEJpdCAxMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwxX0ZUREZfUkVHX1NHTl9Nc2sgKDB4MTAwMFVMKSAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwxX0ZUREZfUkVHOiBTR04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwxX0ZUREZfUkVHX0NTX1BvcyAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwxX0ZUREZfUkVHOiBDUyAoQml0IDEzKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwxX0ZUREZfUkVHX0NTX01zayAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwxX0ZUREZfUkVHOiBDUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwxX0ZUREZfUkVHX1BMTF9IU0lfUE9MX1BvcyAoMTRVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwxX0ZUREZfUkVHOiBQTExfSFNJX1BPTCAoQml0IDE0KSAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwxX0ZUREZfUkVHX1BMTF9IU0lfUE9MX01zayAoMHg0MDAwVUwpICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwxX0ZUREZfUkVHOiBQTExfSFNJX1BPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfU0RfT1JERVJfUlhfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IFNEX09SREVSX1JYIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfU0RfT1JERVJfUlhfTXNrICgweDNVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IFNEX09SREVSX1JYIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19TRF9PUkRFUl9UWF9Qb3MgKDJVTCkgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogU0RfT1JERVJfVFggKEJpdCAyKSAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19TRF9PUkRFUl9UWF9Nc2sgKDB4Y1VMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogU0RfT1JERVJfVFggKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX01PRElOREVYX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBNT0RJTkRFWCAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX01PRElOREVYX01zayAoMHgzMFVMKSAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBNT0RJTkRFWCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfR0FVU1NfREVMQVlfUG9zICg2VUwpICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IEdBVVNTX0RFTEFZIChCaXQgNikgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfR0FVU1NfREVMQVlfTXNrICgweGMwVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IEdBVVNTX0RFTEFZIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19HQVVTU19JTlZfUG9zICg4VUwpICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogR0FVU1NfSU5WIChCaXQgOCkgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19HQVVTU19JTlZfTXNrICgweDEwMFVMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogR0FVU1NfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19HQVVTU184Nl9Qb3MgKDlVTCkgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogR0FVU1NfODYgKEJpdCA5KSAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19HQVVTU184Nl9Nc2sgKDB4MjAwVUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogR0FVU1NfODYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX1RYREFUQV9JTlZfUG9zICgxMFVMKSAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBUWERBVEFfSU5WIChCaXQgMTApICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX1RYREFUQV9JTlZfTXNrICgweDQwMFVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBUWERBVEFfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19FT19QQUNLRVRfRElTX1BvcyAoMTFVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogRU9fUEFDS0VUX0RJUyAoQml0IDExKSAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19FT19QQUNLRVRfRElTX01zayAoMHg4MDBVTCkgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogRU9fUEFDS0VUX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfQlRfU0VMX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IEJUX1NFTCAoQml0IDEyKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfQlRfU0VMX01zayAoMHgxMDAwVUwpICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IEJUX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfQkxFX0RBQ19TRUxfUG9zICgxM1VMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IEJMRV9EQUNfU0VMIChCaXQgMTMpICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfQkxFX0RBQ19TRUxfTXNrICgweDIwMDBVTCkgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IEJMRV9EQUNfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1NZTlRIX0NUUkwyX0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfU0RfT1JERVJfUlhfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IFNEX09SREVSX1JYIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfU0RfT1JERVJfUlhfTXNrICgweDNVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IFNEX09SREVSX1JYIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfU0RfT1JERVJfVFhfUG9zICgyVUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IFNEX09SREVSX1RYIChCaXQgMikgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfU0RfT1JERVJfVFhfTXNrICgweGNVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IFNEX09SREVSX1RYIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfTU9ESU5ERVhfUG9zICg0VUwpICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IE1PRElOREVYIChCaXQgNCkgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfTU9ESU5ERVhfTXNrICgweDMwVUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IE1PRElOREVYIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfVFhEQUNfREVMQVlfUG9zICg2VUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IFRYREFDX0RFTEFZIChCaXQgNikgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfVFhEQUNfREVMQVlfTXNrICgweDQwVUwpICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IFRYREFDX0RFTEFZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfR0FVU1NfSU5WX1BvcyAoOFVMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IEdBVVNTX0lOViAoQml0IDgpICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfR0FVU1NfSU5WX01zayAoMHgxMDBVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IEdBVVNTX0lOViAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0ZUREZfUkVHX1RYREFUQV9JTlZfUG9zICgxMFVMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0ZUREZfUkVHOiBUWERBVEFfSU5WIChCaXQgMTApICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0ZUREZfUkVHX1RYREFUQV9JTlZfTXNrICgweDQwMFVMKSAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0ZUREZfUkVHOiBUWERBVEFfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1NZTlRIX0NUUkwzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDNfUkVHX01PRFZBTF9XUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDNfUkVHOiBNT0RWQUxfV1IgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDNfUkVHX01PRFZBTF9XUl9Nc2sgKDB4M2ZmZlVMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDNfUkVHOiBNT0RWQUxfV1IgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwzX1JFR19NT0RWQUxfU0VMX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwzX1JFRzogTU9EVkFMX1NFTCAoQml0IDE0KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwzX1JFR19NT0RWQUxfU0VMX01zayAoMHg0MDAwVUwpICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwzX1JFRzogTU9EVkFMX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwzX1JFR19aSUZfTU9ERV9FTl9Qb3MgKDE1VUwpICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwzX1JFRzogWklGX01PREVfRU4gKEJpdCAxNSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwzX1JFR19aSUZfTU9ERV9FTl9Nc2sgKDB4ODAwMFVMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwzX1JFRzogWklGX01PREVfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfVkNPQ0FMX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9WQ09DQUxfQ1RSTF9SRUdfVkNPX0ZSRVFUUklNX1dSX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9WQ09DQUxfQ1RSTF9SRUc6IFZDT19GUkVRVFJJTV9XUiAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9WQ09DQUxfQ1RSTF9SRUdfVkNPX0ZSRVFUUklNX1dSX01zayAoMHhmVUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9WQ09DQUxfQ1RSTF9SRUc6IFZDT19GUkVRVFJJTV9XUiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT0NBTF9DVFJMX1JFR19WQ09fRlJFUVRSSU1fU0VMX1BvcyAoNFVMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1ZDT0NBTF9DVFJMX1JFRzogVkNPX0ZSRVFUUklNX1NFTCAoQml0IDQpICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT0NBTF9DVFJMX1JFR19WQ09fRlJFUVRSSU1fU0VMX01zayAoMHgzMFVMKSAgICAgICAgIC8qITwgUExMRElHIFJGX1ZDT0NBTF9DVFJMX1JFRzogVkNPX0ZSRVFUUklNX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT0NBTF9DVFJMX1JFR19WQ09DQUxfUEVSSU9EX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1ZDT0NBTF9DVFJMX1JFRzogVkNPQ0FMX1BFUklPRCAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT0NBTF9DVFJMX1JFR19WQ09DQUxfUEVSSU9EX01zayAoMHhjMFVMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1ZDT0NBTF9DVFJMX1JFRzogVkNPQ0FMX1BFUklPRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT0NBTF9DVFJMX1JFR19WQ09DQUxfTURfU1RBVEVfRExZX1NFTF9Qb3MgKDhVTCkgICAgIC8qITwgUExMRElHIFJGX1ZDT0NBTF9DVFJMX1JFRzogVkNPQ0FMX01EX1NUQVRFX0RMWV9TRUwgKEJpdCA4KSAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT0NBTF9DVFJMX1JFR19WQ09DQUxfTURfU1RBVEVfRExZX1NFTF9Nc2sgKDB4MTAwVUwpIC8qITwgUExMRElHIFJGX1ZDT0NBTF9DVFJMX1JFRzogVkNPQ0FMX01EX1NUQVRFX0RMWV9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01HQUlOX0NUUkxfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0JMRV9SRUdfR0FVU1NfR0FJTl9XUl9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0JMRV9SRUc6IEdBVVNTX0dBSU5fV1IgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0JMRV9SRUdfR0FVU1NfR0FJTl9XUl9Nc2sgKDB4ZmZVTCkgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0JMRV9SRUc6IEdBVVNTX0dBSU5fV1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0JMRV9SRUdfR0FVU1NfR0FJTl9TRUxfUG9zICg4VUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0JMRV9SRUc6IEdBVVNTX0dBSU5fU0VMIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0JMRV9SRUdfR0FVU1NfR0FJTl9TRUxfTXNrICgweDEwMFVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0JMRV9SRUc6IEdBVVNTX0dBSU5fU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTF9CTEVfUkVHX0JMRV9URVNUUEFUX0dFTl9Qb3MgKDlVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHOiBCTEVfVEVTVFBBVF9HRU4gKEJpdCA5KSAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTF9CTEVfUkVHX0JMRV9URVNUUEFUX0dFTl9Nc2sgKDB4MjAwVUwpICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHOiBCTEVfVEVTVFBBVF9HRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0JMRV9SRUdfTUdBSU5fQ01QX0lOVl9Qb3MgKDEwVUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0JMRV9SRUc6IE1HQUlOX0NNUF9JTlYgKEJpdCAxMCkgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0JMRV9SRUdfTUdBSU5fQ01QX0lOVl9Nc2sgKDB4NDAwVUwpICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0JMRV9SRUc6IE1HQUlOX0NNUF9JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0JMRV9SRUdfTUdBSU5fQVZFUl9Qb3MgKDExVUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0JMRV9SRUc6IE1HQUlOX0FWRVIgKEJpdCAxMSkgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0JMRV9SRUdfTUdBSU5fQVZFUl9Nc2sgKDB4MTgwMFVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0JMRV9SRUc6IE1HQUlOX0FWRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01HQUlOX0NUUkxfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0ZUREZfUkVHX01TS19HQUlOX1dSX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0ZUREZfUkVHOiBNU0tfR0FJTl9XUiAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0ZUREZfUkVHX01TS19HQUlOX1dSX01zayAoMHg3ZlVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0ZUREZfUkVHOiBNU0tfR0FJTl9XUiAoQml0ZmllbGQtTWFzazogMHg3ZikgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfRlRERl9SRUdfTVNLX0dBSU5fU0VMX1BvcyAoN1VMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfRlRERl9SRUc6IE1TS19HQUlOX1NFTCAoQml0IDcpICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfRlRERl9SRUdfTVNLX0dBSU5fU0VMX01zayAoMHg4MFVMKSAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfRlRERl9SRUc6IE1TS19HQUlOX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfRlRERl9SRUdfTVNLX0dBSU5fT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfRlRERl9SRUc6IE1TS19HQUlOX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfRlRERl9SRUdfTVNLX0dBSU5fT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfRlRERl9SRUc6IE1TS19HQUlOX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9NR0FJTl9DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkwyX1JFR19NR0FJTl9UUkFOU01JVF9MRU5HVEhfUG9zICgwVUwpICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkwyX1JFRzogTUdBSU5fVFJBTlNNSVRfTEVOR1RIIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkwyX1JFR19NR0FJTl9UUkFOU01JVF9MRU5HVEhfTXNrICgweDdmVUwpICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkwyX1JFRzogTUdBSU5fVFJBTlNNSVRfTEVOR1RIIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTDJfUkVHX01HQUlOX01PREVfU0VMX1BvcyAoN1VMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTDJfUkVHOiBNR0FJTl9NT0RFX1NFTCAoQml0IDcpICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTDJfUkVHX01HQUlOX01PREVfU0VMX01zayAoMHg4MFVMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTDJfUkVHOiBNR0FJTl9NT0RFX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkwyX1JFR19NU0tfR0FJTkNBTF9MT05HX1BvcyAoOFVMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkwyX1JFRzogTVNLX0dBSU5DQUxfTE9ORyAoQml0IDgpICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkwyX1JFR19NU0tfR0FJTkNBTF9MT05HX01zayAoMHgxMDBVTCkgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkwyX1JFRzogTVNLX0dBSU5DQUxfTE9ORyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9WQ09fQ0FMQ0FQX0JJVDE0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT19DQUxDQVBfQklUMTRfUkVHX1ZDT19DQUxDQVBfQklUMTRfUG9zICgwVUwpICAgICAgIC8qITwgUExMRElHIFJGX1ZDT19DQUxDQVBfQklUMTRfUkVHOiBWQ09fQ0FMQ0FQX0JJVDE0IChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT19DQUxDQVBfQklUMTRfUkVHX1ZDT19DQUxDQVBfQklUMTRfTXNrICgweGZmZmZVTCkgIC8qITwgUExMRElHIFJGX1ZDT19DQUxDQVBfQklUMTRfUkVHOiBWQ09fQ0FMQ0FQX0JJVDE0IChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfVkNPX0NBTENBUF9CSVQxNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9WQ09fQ0FMQ0FQX0JJVDE1X1JFR19WQ09fQ0FMQ0FQX0JJVDE1X1BvcyAoMFVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9WQ09fQ0FMQ0FQX0JJVDE1X1JFRzogVkNPX0NBTENBUF9CSVQxNSAoQml0IDApICAgICovCisjZGVmaW5lIFBMTERJR19SRl9WQ09fQ0FMQ0FQX0JJVDE1X1JFR19WQ09fQ0FMQ0FQX0JJVDE1X01zayAoMHhmZmZmVUwpICAvKiE8IFBMTERJRyBSRl9WQ09fQ0FMQ0FQX0JJVDE1X1JFRzogVkNPX0NBTENBUF9CSVQxNSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX0JNQ1dfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfQk1DV19SRUdfQ05fV1JfUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQk1DV19SRUc6IENOX1dSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfQk1DV19SRUdfQ05fV1JfTXNrICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQk1DV19SRUc6IENOX1dSIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfQk1DV19SRUdfSFNJX1dSX1BvcyAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQk1DV19SRUc6IEhTSV9XUiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfQk1DV19SRUdfSFNJX1dSX01zayAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQk1DV19SRUc6IEhTSV9XUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfQk1DV19SRUdfQ05fU0VMX1BvcyAgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQk1DV19SRUc6IENOX1NFTCAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfQk1DV19SRUdfQ05fU0VMX01zayAgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQk1DV19SRUc6IENOX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfQk1DV19SRUdfSFNJX1NFTF9Qb3MgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQk1DV19SRUc6IEhTSV9TRUwgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfQk1DV19SRUdfSFNJX1NFTF9Nc2sgICAgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQk1DV19SRUc6IEhTSV9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9LTU9EX0FMUEhBX0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfS01PRF9BTFBIQV9CTEVfUkVHX0tNT0RfQUxQSEFfR0FVU1NEQUNfUG9zICgwVUwpICAgICAgLyohPCBQTExESUcgUkZfS01PRF9BTFBIQV9CTEVfUkVHOiBLTU9EX0FMUEhBX0dBVVNTREFDIChCaXQgMCkgICAqLworI2RlZmluZSBQTExESUdfUkZfS01PRF9BTFBIQV9CTEVfUkVHX0tNT0RfQUxQSEFfR0FVU1NEQUNfTXNrICgweDNmVUwpICAgLyohPCBQTExESUcgUkZfS01PRF9BTFBIQV9CTEVfUkVHOiBLTU9EX0FMUEhBX0dBVVNTREFDIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworI2RlZmluZSBQTExESUdfUkZfS01PRF9BTFBIQV9CTEVfUkVHX0tNT0RfQUxQSEFfVFhEQUNfUG9zICg2VUwpICAgICAgICAgLyohPCBQTExESUcgUkZfS01PRF9BTFBIQV9CTEVfUkVHOiBLTU9EX0FMUEhBX1RYREFDIChCaXQgNikgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfS01PRF9BTFBIQV9CTEVfUkVHX0tNT0RfQUxQSEFfVFhEQUNfTXNrICgweGZjMFVMKSAgICAgLyohPCBQTExESUcgUkZfS01PRF9BTFBIQV9CTEVfUkVHOiBLTU9EX0FMUEhBX1RYREFDIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9LTU9EX0FMUEhBX0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfS01PRF9BTFBIQV9GVERGX1JFR19LTU9EX0FMUEhBX0ZUREZfUG9zICgwVUwpICAgICAgICAgLyohPCBQTExESUcgUkZfS01PRF9BTFBIQV9GVERGX1JFRzogS01PRF9BTFBIQV9GVERGIChCaXQgMCkgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfS01PRF9BTFBIQV9GVERGX1JFR19LTU9EX0FMUEhBX0ZUREZfTXNrICgweDNmVUwpICAgICAgLyohPCBQTExESUcgUkZfS01PRF9BTFBIQV9GVERGX1JFRzogS01PRF9BTFBIQV9GVERGIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1NZTlRIX1JFU1VMVF9CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUdfR0FVU1NfR0FJTl9DQUxfUkRfUG9zICgwVUwpICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUc6IEdBVVNTX0dBSU5fQ0FMX1JEIChCaXQgMCkgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUdfR0FVU1NfR0FJTl9DQUxfUkRfTXNrICgweGZmVUwpICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUc6IEdBVVNTX0dBSU5fQ0FMX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUdfVkNPX0ZSRVFUUklNX1JEX1BvcyAoOFVMKSAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUc6IFZDT19GUkVRVFJJTV9SRCAoQml0IDgpICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUdfVkNPX0ZSRVFUUklNX1JEX01zayAoMHhmMDBVTCkgICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUc6IFZDT19GUkVRVFJJTV9SRCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9TWU5USF9SRVNVTFRfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX1JFU1VMVF9GVERGX1JFR19NU0tfR0FJTl9DQUxfUkRfUG9zICgwVUwpICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX1JFU1VMVF9GVERGX1JFRzogTVNLX0dBSU5fQ0FMX1JEIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX1JFU1VMVF9GVERGX1JFR19NU0tfR0FJTl9DQUxfUkRfTXNrICgweDdmVUwpICAgIC8qITwgUExMRElHIFJGX1NZTlRIX1JFU1VMVF9GVERGX1JFRzogTVNLX0dBSU5fQ0FMX1JEIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1NZTlRIX1JFU1VMVDJfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUMl9CTEVfUkVHX0dBVVNTX0dBSU5fUkRfUG9zICgwVUwpICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUMl9CTEVfUkVHOiBHQVVTU19HQUlOX1JEIChCaXQgMCkgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUMl9CTEVfUkVHX0dBVVNTX0dBSU5fUkRfTXNrICgweGZmVUwpICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUMl9CTEVfUkVHOiBHQVVTU19HQUlOX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUMl9CTEVfUkVHX0NOX0NBTF9SRF9Qb3MgKDhVTCkgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUMl9CTEVfUkVHOiBDTl9DQUxfUkQgKEJpdCA4KSAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUMl9CTEVfUkVHX0NOX0NBTF9SRF9Nc2sgKDB4M2YwMFVMKSAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUMl9CTEVfUkVHOiBDTl9DQUxfUkQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9TWU5USF9SRVNVTFQyX0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9SRVNVTFQyX0ZUREZfUkVHX01TS19HQUlOX1JEX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9SRVNVTFQyX0ZUREZfUkVHOiBNU0tfR0FJTl9SRCAoQml0IDApICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9SRVNVTFQyX0ZUREZfUkVHX01TS19HQUlOX1JEX01zayAoMHhmZlVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9SRVNVTFQyX0ZUREZfUkVHOiBNU0tfR0FJTl9SRCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1NZTlRIX1JFU1VMVDNfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX1JFU1VMVDNfRlRERl9SRUdfQ05fQ0FMX0ZUREZfUkRfUG9zICgwVUwpICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX1JFU1VMVDNfRlRERl9SRUc6IENOX0NBTF9GVERGX1JEIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX1JFU1VMVDNfRlRERl9SRUdfQ05fQ0FMX0ZUREZfUkRfTXNrICgweDNmVUwpICAgIC8qITwgUExMRElHIFJGX1NZTlRIX1JFU1VMVDNfRlRERl9SRUc6IENOX0NBTF9GVERGX1JEIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfQ0FMQ0FQMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfQ0FMQ0FQMV9SRUdfVkNPX0NBTENBUF9MT1dfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQ0FMQ0FQMV9SRUc6IFZDT19DQUxDQVBfTE9XIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfQ0FMQ0FQMV9SRUdfVkNPX0NBTENBUF9MT1dfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQ0FMQ0FQMV9SRUc6IFZDT19DQUxDQVBfTE9XIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9DQUxDQVAyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9DQUxDQVAyX1JFR19WQ09fQ0FMQ0FQX0hJR0hfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9DQUxDQVAyX1JFRzogVkNPX0NBTENBUF9ISUdIIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9DQUxDQVAyX1JFR19WQ09fQ0FMQ0FQX0hJR0hfTXNrICgweDNVTCkgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9DQUxDQVAyX1JFRzogVkNPX0NBTENBUF9ISUdIIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX05NRF9PRkZTRVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfTk1EX09GRlNFVF9SRUdfTk1EX09GRlNFVF9YVEFMMTZNX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfTk1EX09GRlNFVF9SRUc6IE5NRF9PRkZTRVRfWFRBTDE2TSAoQml0IDApICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTk1EX09GRlNFVF9SRUdfTk1EX09GRlNFVF9YVEFMMTZNX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBQTExESUcgUkZfTk1EX09GRlNFVF9SRUc6IE5NRF9PRkZTRVRfWFRBTDE2TSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUExMRElHX1JGX05NRF9PRkZTRVRfUkVHX05NRF9PRkZTRVRfUExMOTZNX1BvcyAoOFVMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX05NRF9PRkZTRVRfUkVHOiBOTURfT0ZGU0VUX1BMTDk2TSAoQml0IDgpICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX05NRF9PRkZTRVRfUkVHX05NRF9PRkZTRVRfUExMOTZNX01zayAoMHhmZjAwVUwpICAgICAgIC8qITwgUExMRElHIFJGX05NRF9PRkZTRVRfUkVHOiBOTURfT0ZGU0VUX1BMTDk2TSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX0ZUREZfUEhZQVRUUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX0ZUREZfUEhZQVRUUl9SRUdfRlRERl9QSFlBVFRSX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX0ZUREZfUEhZQVRUUl9SRUc6IEZUREZfUEhZQVRUUiAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX0ZUREZfUEhZQVRUUl9SRUdfRlRERl9QSFlBVFRSX01zayAoMHhmZmZmVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX0ZUREZfUEhZQVRUUl9SRUc6IEZUREZfUEhZQVRUUiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfQ0FMVFJJTV9TVEVQMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfQ0FMVFJJTV9TVEVQMV9SRUdfTURTVEFURV9SRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQ0FMVFJJTV9TVEVQMV9SRUc6IE1EU1RBVEVfUkQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfQ0FMVFJJTV9TVEVQMV9SRUdfTURTVEFURV9SRF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfQ0FMVFJJTV9TVEVQMV9SRUc6IE1EU1RBVEVfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX0NBTFRSSU1fU1RFUDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX0NBTFRSSU1fU1RFUDJfUkVHX01EU1RBVEVfUkRfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX0NBTFRSSU1fU1RFUDJfUkVHOiBNRFNUQVRFX1JEIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX0NBTFRSSU1fU1RFUDJfUkVHX01EU1RBVEVfUkRfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX0NBTFRSSU1fU1RFUDJfUkVHOiBNRFNUQVRFX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9DQUxUUklNX1NURVAzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9DQUxUUklNX1NURVAzX1JFR19NRFNUQVRFX1JEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9DQUxUUklNX1NURVAzX1JFRzogTURTVEFURV9SRCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9DQUxUUklNX1NURVAzX1JFR19NRFNUQVRFX1JEX01zayAoMHhmZmZmVUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9DQUxUUklNX1NURVAzX1JFRzogTURTVEFURV9SRCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfQ0FMVFJJTV9TVEVQNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfQ0FMVFJJTV9TVEVQNF9SRUdfTURTVEFURV9SRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQ0FMVFJJTV9TVEVQNF9SRUc6IE1EU1RBVEVfUkQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfQ0FMVFJJTV9TVEVQNF9SRUdfTURTVEFURV9SRF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfQ0FMVFJJTV9TVEVQNF9SRUc6IE1EU1RBVEVfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9NR0FJTl9DVFJMM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkwzX1JFR19HRlNLX0dBSU5fT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkwzX1JFRzogR0ZTS19HQUlOX09GRlNFVCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkwzX1JFR19HRlNLX0dBSU5fT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkwzX1JFRzogR0ZTS19HQUlOX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1ZDT19GUkVRX0VTVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT19GUkVRX0VTVF9SRUdfVkNPX0ZSRVFfRVNUX0VOX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1ZDT19GUkVRX0VTVF9SRUc6IFZDT19GUkVRX0VTVF9FTiAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT19GUkVRX0VTVF9SRUdfVkNPX0ZSRVFfRVNUX0VOX01zayAoMHgxVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX1ZDT19GUkVRX0VTVF9SRUc6IFZDT19GUkVRX0VTVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT19GUkVRX0VTVF9SRUdfVkNPX0ZSRVFfRVNUX0xFTl9Qb3MgKDFVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX1ZDT19GUkVRX0VTVF9SRUc6IFZDT19GUkVRX0VTVF9MRU4gKEJpdCAxKSAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT19GUkVRX0VTVF9SRUdfVkNPX0ZSRVFfRVNUX0xFTl9Nc2sgKDB4ZmVVTCkgICAgICAgIC8qITwgUExMRElHIFJGX1ZDT19GUkVRX0VTVF9SRUc6IFZDT19GUkVRX0VTVF9MRU4gKEJpdGZpZWxkLU1hc2s6IDB4N2YpICovCisjZGVmaW5lIFBMTERJR19SRl9WQ09fRlJFUV9FU1RfUkVHX1ZDT19GUkVRX0VTVF9VUFBFUl9SRF9Qb3MgKDhVTCkgICAgICAvKiE8IFBMTERJRyBSRl9WQ09fRlJFUV9FU1RfUkVHOiBWQ09fRlJFUV9FU1RfVVBQRVJfUkQgKEJpdCA4KSAgICovCisjZGVmaW5lIFBMTERJR19SRl9WQ09fRlJFUV9FU1RfUkVHX1ZDT19GUkVRX0VTVF9VUFBFUl9SRF9Nc2sgKDB4NzAwVUwpICAvKiE8IFBMTERJRyBSRl9WQ09fRlJFUV9FU1RfUkVHOiBWQ09fRlJFUV9FU1RfVVBQRVJfUkQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfU1lOVEhfU1BBUkVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9TUEFSRV9SRUdfU1BBUkVfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9TUEFSRV9SRUc6IFNQQVJFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9TUEFSRV9SRUdfU1BBUkVfTXNrICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9TUEFSRV9SRUc6IFNQQVJFIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9NU0tNT0RfQ1RSTDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ1RSTDFfUkVHX1RYX0RBVEFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ1RSTDFfUkVHOiBUWF9EQVRBIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ1RSTDFfUkVHX1RYX0RBVEFfTXNrICgweGZVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ1RSTDFfUkVHOiBUWF9EQVRBIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ1RSTDFfUkVHX1RYX1ZBTElEX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ1RSTDFfUkVHOiBUWF9WQUxJRCAoQml0IDQpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ1RSTDFfUkVHX1RYX1ZBTElEX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ1RSTDFfUkVHOiBUWF9WQUxJRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ1RSTDFfUkVHX01TS19UWF9TRUxfUG9zICg1VUwpICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ1RSTDFfUkVHOiBNU0tfVFhfU0VMIChCaXQgNSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ1RSTDFfUkVHX01TS19UWF9TRUxfTXNrICgweDIwVUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ1RSTDFfUkVHOiBNU0tfVFhfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfTVNLTU9EX0NUUkwxX1JFR19NU0tfQUxXX0VOX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfTVNLTU9EX0NUUkwxX1JFRzogTVNLX0FMV19FTiAoQml0IDYpICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTVNLTU9EX0NUUkwxX1JFR19NU0tfQUxXX0VOX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfTVNLTU9EX0NUUkwxX1JFRzogTVNLX0FMV19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DVFJMMV9SRUdfVFhfTU9EX0ZST01fR1BJT19Qb3MgKDdVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DVFJMMV9SRUc6IFRYX01PRF9GUk9NX0dQSU8gKEJpdCA3KSAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DVFJMMV9SRUdfVFhfTU9EX0ZST01fR1BJT19Nc2sgKDB4ODBVTCkgICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DVFJMMV9SRUc6IFRYX01PRF9GUk9NX0dQSU8gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ1RSTDFfUkVHX01TS19CWVBBU1NfUEhBU0VfUG9zICg4VUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ1RSTDFfUkVHOiBNU0tfQllQQVNTX1BIQVNFIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ1RSTDFfUkVHX01TS19CWVBBU1NfUEhBU0VfTXNrICgweDEwMFVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ1RSTDFfUkVHOiBNU0tfQllQQVNTX1BIQVNFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfTVNLTU9EX0NISVBMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfTVNLTU9EX0NISVBMX1JFR19NU0tfQ0hJUExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfTVNLTU9EX0NISVBMX1JFRzogTVNLX0NISVBMIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTVNLTU9EX0NISVBMX1JFR19NU0tfQ0hJUExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfTVNLTU9EX0NISVBMX1JFRzogTVNLX0NISVBMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9NU0tNT0RfQ0hJUEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ0hJUEhfUkVHX01TS19DSElQSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ0hJUEhfUkVHOiBNU0tfQ0hJUEggKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ0hJUEhfUkVHX01TS19DSElQSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ0hJUEhfUkVHOiBNU0tfQ0hJUEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9UWERBQ19URVNUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1RYREFDX1RFU1RfUkVHX1JGX1RYREFDX1RFU1RfV1JfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1RYREFDX1RFU1RfUkVHOiBSRl9UWERBQ19URVNUX1dSIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1RYREFDX1RFU1RfUkVHX1JGX1RYREFDX1RFU1RfV1JfTXNrICgweGZmVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX1RYREFDX1RFU1RfUkVHOiBSRl9UWERBQ19URVNUX1dSIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBQTExESUdfUkZfVFhEQUNfVEVTVF9SRUdfUkZfVFhEQUNfVEVTVF9TRUxfUG9zICg4VUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfVFhEQUNfVEVTVF9SRUc6IFJGX1RYREFDX1RFU1RfU0VMIChCaXQgOCkgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfVFhEQUNfVEVTVF9SRUdfUkZfVFhEQUNfVEVTVF9TRUxfTXNrICgweDEwMFVMKSAgICAgICAgLyohPCBQTExESUcgUkZfVFhEQUNfVEVTVF9SRUc6IFJGX1RYREFDX1RFU1RfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUwwX1JFR19NR0FJTl9DT01QX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ09NUF9WQUwwX1JFRzogTUdBSU5fQ09NUF9WQUwgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUwwX1JFR19NR0FJTl9DT01QX1ZBTF9Nc2sgKDB4MWZVTCkgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ09NUF9WQUwwX1JFRzogTUdBSU5fQ09NUF9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDFfUkVHX01HQUlOX0NPTVBfVkFMX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDFfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0IDApICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDFfUkVHX01HQUlOX0NPTVBfVkFMX01zayAoMHgxZlVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDFfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMMl9SRUdfTUdBSU5fQ09NUF9WQUxfUG9zICgwVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NPTVBfVkFMMl9SRUc6IE1HQUlOX0NPTVBfVkFMIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMMl9SRUdfTUdBSU5fQ09NUF9WQUxfTXNrICgweDFmVUwpICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NPTVBfVkFMMl9SRUc6IE1HQUlOX0NPTVBfVkFMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUwzX1JFR19NR0FJTl9DT01QX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ09NUF9WQUwzX1JFRzogTUdBSU5fQ09NUF9WQUwgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUwzX1JFR19NR0FJTl9DT01QX1ZBTF9Nc2sgKDB4MWZVTCkgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ09NUF9WQUwzX1JFRzogTUdBSU5fQ09NUF9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDRfUkVHX01HQUlOX0NPTVBfVkFMX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDRfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0IDApICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDRfUkVHX01HQUlOX0NPTVBfVkFMX01zayAoMHgxZlVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDRfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUw1X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMNV9SRUdfTUdBSU5fQ09NUF9WQUxfUG9zICgwVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NPTVBfVkFMNV9SRUc6IE1HQUlOX0NPTVBfVkFMIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMNV9SRUdfTUdBSU5fQ09NUF9WQUxfTXNrICgweDFmVUwpICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NPTVBfVkFMNV9SRUc6IE1HQUlOX0NPTVBfVkFMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUw2X1JFR19NR0FJTl9DT01QX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ09NUF9WQUw2X1JFRzogTUdBSU5fQ09NUF9WQUwgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUw2X1JFR19NR0FJTl9DT01QX1ZBTF9Nc2sgKDB4MWZVTCkgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ09NUF9WQUw2X1JFRzogTUdBSU5fQ09NUF9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDdfUkVHX01HQUlOX0NPTVBfVkFMX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDdfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0IDApICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDdfUkVHX01HQUlOX0NPTVBfVkFMX01zayAoMHgxZlVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDdfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9QVUxTRV9UQkxfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX1RCTF8wX1JFR19GVERGX1BVTFNFX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX1RCTF8wX1JFRzogRlRERl9QVUxTRV9WQUwgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX1RCTF8wX1JFR19GVERGX1BVTFNFX1ZBTF9Nc2sgKDB4N2ZmVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX1RCTF8wX1JFRzogRlRERl9QVUxTRV9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1BVTFNFX1RCTF8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzFfUkVHX0ZUREZfUFVMU0VfVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzFfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzFfUkVHX0ZUREZfUFVMU0VfVkFMX01zayAoMHg3ZmZVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzFfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0ZmllbGQtTWFzazogMHg3ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfUFVMU0VfVEJMXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9UQkxfMl9SRUdfRlRERl9QVUxTRV9WQUxfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9UQkxfMl9SRUc6IEZUREZfUFVMU0VfVkFMIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9UQkxfMl9SRUdfRlRERl9QVUxTRV9WQUxfTXNrICgweDdmZlVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9UQkxfMl9SRUc6IEZUREZfUFVMU0VfVkFMIChCaXRmaWVsZC1NYXNrOiAweDdmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9QVUxTRV9UQkxfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX1RCTF8zX1JFR19GVERGX1BVTFNFX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX1RCTF8zX1JFRzogRlRERl9QVUxTRV9WQUwgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX1RCTF8zX1JFR19GVERGX1BVTFNFX1ZBTF9Nc2sgKDB4N2ZmVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX1RCTF8zX1JFRzogRlRERl9QVUxTRV9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1BVTFNFX1RCTF80X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzRfUkVHX0ZUREZfUFVMU0VfVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzRfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzRfUkVHX0ZUREZfUFVMU0VfVkFMX01zayAoMHg3ZmZVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzRfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0ZmllbGQtTWFzazogMHg3ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfUFVMU0VfVEJMXzVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9UQkxfNV9SRUdfRlRERl9QVUxTRV9WQUxfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9UQkxfNV9SRUc6IEZUREZfUFVMU0VfVkFMIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9UQkxfNV9SRUdfRlRERl9QVUxTRV9WQUxfTXNrICgweDdmZlVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9UQkxfNV9SRUc6IEZUREZfUFVMU0VfVkFMIChCaXRmaWVsZC1NYXNrOiAweDdmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9QVUxTRV9UQkxfNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX1RCTF82X1JFR19GVERGX1BVTFNFX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX1RCTF82X1JFRzogRlRERl9QVUxTRV9WQUwgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX1RCTF82X1JFR19GVERGX1BVTFNFX1ZBTF9Nc2sgKDB4N2ZmVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX1RCTF82X1JFRzogRlRERl9QVUxTRV9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1BVTFNFX1RCTF83X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzdfUkVHX0ZUREZfUFVMU0VfVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzdfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzdfUkVHX0ZUREZfUFVMU0VfVkFMX01zayAoMHg3ZmZVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzdfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0ZmllbGQtTWFzazogMHg3ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfUFVMU0VfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9DVFJMX1JFR19GVERGX1BVTFNFX1NFTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9DVFJMX1JFRzogRlRERl9QVUxTRV9TRUwgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9DVFJMX1JFR19GVERGX1BVTFNFX1NFTF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9DVFJMX1JFRzogRlRERl9QVUxTRV9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9DVFJMX1JFR19GVERGX1BVTFNFX0dBVEVfUG9zICgxVUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9DVFJMX1JFRzogRlRERl9QVUxTRV9HQVRFIChCaXQgMSkgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9DVFJMX1JFR19GVERGX1BVTFNFX0dBVEVfTXNrICgweDZVTCkgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9DVFJMX1JFRzogRlRERl9QVUxTRV9HQVRFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfQ1RSTF9SRUdfRlRERl9MT1dQQVNTX0VOX1BvcyAoM1VMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfQ1RSTF9SRUc6IEZUREZfTE9XUEFTU19FTiAoQml0IDMpICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfQ1RSTF9SRUdfRlRERl9MT1dQQVNTX0VOX01zayAoMHg4VUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfQ1RSTF9SRUc6IEZUREZfTE9XUEFTU19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX0NUUkxfUkVHX0ZUREZfUFVMU0VfR0FJTl9Qb3MgKDRVTCkgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX0NUUkxfUkVHOiBGVERGX1BVTFNFX0dBSU4gKEJpdCA0KSAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX0NUUkxfUkVHX0ZUREZfUFVMU0VfR0FJTl9Nc2sgKDB4ZjBVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX0NUUkxfUkVHOiBGVERGX1BVTFNFX0dBSU4gKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICBzdHJ1Y3QgJ1FTUElDJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfQ1RSTEJVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxCVVNfUkVHX1FTUElDX1NFVF9TSU5HTEVfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxCVVNfUkVHOiBRU1BJQ19TRVRfU0lOR0xFIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxCVVNfUkVHX1FTUElDX1NFVF9TSU5HTEVfTXNrICgweDFVTCkgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxCVVNfUkVHOiBRU1BJQ19TRVRfU0lOR0xFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMQlVTX1JFR19RU1BJQ19TRVRfRFVBTF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMQlVTX1JFRzogUVNQSUNfU0VUX0RVQUwgKEJpdCAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMQlVTX1JFR19RU1BJQ19TRVRfRFVBTF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMQlVTX1JFRzogUVNQSUNfU0VUX0RVQUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxCVVNfUkVHX1FTUElDX1NFVF9RVUFEX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxCVVNfUkVHOiBRU1BJQ19TRVRfUVVBRCAoQml0IDIpICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxCVVNfUkVHX1FTUElDX1NFVF9RVUFEX01zayAoMHg0VUwpICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxCVVNfUkVHOiBRU1BJQ19TRVRfUVVBRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTEJVU19SRUdfUVNQSUNfRU5fQ1NfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTEJVU19SRUc6IFFTUElDX0VOX0NTIChCaXQgMykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTEJVU19SRUdfUVNQSUNfRU5fQ1NfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTEJVU19SRUc6IFFTUElDX0VOX0NTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTEJVU19SRUdfUVNQSUNfRElTX0NTX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTEJVU19SRUc6IFFTUElDX0RJU19DUyAoQml0IDQpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTEJVU19SRUdfUVNQSUNfRElTX0NTX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTEJVU19SRUc6IFFTUElDX0RJU19DUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX0FVVE9fTURfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19BVVRPX01EIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX0FVVE9fTURfTXNrICgweDFVTCkgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19BVVRPX01EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfQ0xLX01EX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0NMS19NRCAoQml0IDEpICAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfQ0xLX01EX01zayAoMHgyVUwpICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0NMS19NRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX0lPMl9PRU5fUG9zICgyVUwpICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19JTzJfT0VOIChCaXQgMikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX0lPMl9PRU5fTXNrICgweDRVTCkgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19JTzJfT0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfSU8zX09FTl9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0lPM19PRU4gKEJpdCAzKSAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfSU8zX09FTl9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0lPM19PRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19JTzJfREFUX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfSU8yX0RBVCAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19JTzJfREFUX01zayAoMHgxMFVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfSU8yX0RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX0lPM19EQVRfUG9zICg1VUwpICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19JTzNfREFUIChCaXQgNSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX0lPM19EQVRfTXNrICgweDIwVUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19JTzNfREFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfSFJEWV9NRF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0hSRFlfTUQgKEJpdCA2KSAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfSFJEWV9NRF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0hSRFlfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19SWERfTkVHX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfUlhEX05FRyAoQml0IDcpICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19SWERfTkVHX01zayAoMHg4MFVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfUlhEX05FRyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX1JQSVBFX0VOX1BvcyAoOFVMKSAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19SUElQRV9FTiAoQml0IDgpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX1JQSVBFX0VOX01zayAoMHgxMDBVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19SUElQRV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX1BDTEtfTURfUG9zICg5VUwpICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19QQ0xLX01EIChCaXQgOSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX1BDTEtfTURfTXNrICgweGUwMFVMKSAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19QQ0xLX01EIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfRk9SQ0VOU0VRX0VOX1BvcyAoMTJVTCkgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0ZPUkNFTlNFUV9FTiAoQml0IDEyKSAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfRk9SQ0VOU0VRX0VOX01zayAoMHgxMDAwVUwpICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0ZPUkNFTlNFUV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX1VTRV8zMkJBX1BvcyAoMTNVTCkgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19VU0VfMzJCQSAoQml0IDEzKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX1VTRV8zMkJBX01zayAoMHgyMDAwVUwpICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19VU0VfMzJCQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFTUElDX1FTUElDX1JFQ1ZEQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfUkVDVkRBVEFfUkVHX1FTUElDX1JFQ1ZEQVRBX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfUkVDVkRBVEFfUkVHOiBRU1BJQ19SRUNWREFUQSAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfUkVDVkRBVEFfUkVHX1FTUElDX1JFQ1ZEQVRBX01zayAoMHhmZmZmZmZmZlVMKSAgICAgIC8qITwgUVNQSUMgUVNQSUNfUkVDVkRBVEFfUkVHOiBRU1BJQ19SRUNWREFUQSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFTUElDX1FTUElDX0JVUlNUQ01EQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19JTlNUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfSU5TVCAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19JTlNUX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfSU5TVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19JTlNUX1dCX1BvcyAoOFVMKSAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfSU5TVF9XQiAoQml0IDgpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19JTlNUX1dCX01zayAoMHhmZjAwVUwpICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfSU5TVF9XQiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19FWFRfQllURV9Qb3MgKDE2VUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfRVhUX0JZVEUgKEJpdCAxNikgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19FWFRfQllURV9Nc2sgKDB4ZmYwMDAwVUwpICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfRVhUX0JZVEUgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQV9SRUdfUVNQSUNfSU5TVF9UWF9NRF9Qb3MgKDI0VUwpICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQV9SRUc6IFFTUElDX0lOU1RfVFhfTUQgKEJpdCAyNCkgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQV9SRUdfUVNQSUNfSU5TVF9UWF9NRF9Nc2sgKDB4MzAwMDAwMFVMKSAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQV9SRUc6IFFTUElDX0lOU1RfVFhfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQV9SRUdfUVNQSUNfQURSX1RYX01EX1BvcyAoMjZVTCkgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQV9SRUc6IFFTUElDX0FEUl9UWF9NRCAoQml0IDI2KSAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQV9SRUdfUVNQSUNfQURSX1RYX01EX01zayAoMHhjMDAwMDAwVUwpICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQV9SRUc6IFFTUElDX0FEUl9UWF9NRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19FWFRfVFhfTURfUG9zICgyOFVMKSAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfRVhUX1RYX01EIChCaXQgMjgpICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19FWFRfVFhfTURfTXNrICgweDMwMDAwMDAwVUwpICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfRVhUX1RYX01EIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREFfUkVHX1FTUElDX0RNWV9UWF9NRF9Qb3MgKDMwVUwpICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREFfUkVHOiBRU1BJQ19ETVlfVFhfTUQgKEJpdCAzMCkgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREFfUkVHX1FTUElDX0RNWV9UWF9NRF9Nc2sgKDB4YzAwMDAwMDBVTCkgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREFfUkVHOiBRU1BJQ19ETVlfVFhfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQl9SRUdfUVNQSUNfREFUX1JYX01EX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQl9SRUc6IFFTUElDX0RBVF9SWF9NRCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQl9SRUdfUVNQSUNfREFUX1JYX01EX01zayAoMHgzVUwpICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQl9SRUc6IFFTUElDX0RBVF9SWF9NRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19FWFRfQllURV9FTl9Qb3MgKDJVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfRVhUX0JZVEVfRU4gKEJpdCAyKSAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19FWFRfQllURV9FTl9Nc2sgKDB4NFVMKSAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfRVhUX0JZVEVfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQl9SRUdfUVNQSUNfRVhUX0hGX0RTX1BvcyAoM1VMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQl9SRUc6IFFTUElDX0VYVF9IRl9EUyAoQml0IDMpICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQl9SRUdfUVNQSUNfRVhUX0hGX0RTX01zayAoMHg4VUwpICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQl9SRUc6IFFTUElDX0VYVF9IRl9EUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19ETVlfTlVNX1BvcyAoNFVMKSAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfRE1ZX05VTSAoQml0IDQpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19ETVlfTlVNX01zayAoMHgzMFVMKSAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfRE1ZX05VTSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19JTlNUX01EX1BvcyAoNlVMKSAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfSU5TVF9NRCAoQml0IDYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19JTlNUX01EX01zayAoMHg0MFVMKSAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfSU5TVF9NRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19XUkFQX01EX1BvcyAoN1VMKSAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfV1JBUF9NRCAoQml0IDcpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19XUkFQX01EX01zayAoMHg4MFVMKSAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfV1JBUF9NRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19XUkFQX0xFTl9Qb3MgKDhVTCkgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfV1JBUF9MRU4gKEJpdCA4KSAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19XUkFQX0xFTl9Nc2sgKDB4MzAwVUwpICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfV1JBUF9MRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQl9SRUdfUVNQSUNfV1JBUF9TSVpFX1BvcyAoMTBVTCkgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQl9SRUc6IFFTUElDX1dSQVBfU0laRSAoQml0IDEwKSAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQl9SRUdfUVNQSUNfV1JBUF9TSVpFX01zayAoMHhjMDBVTCkgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQl9SRUc6IFFTUElDX1dSQVBfU0laRSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19DU19ISUdIX01JTl9Qb3MgKDEyVUwpICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfQ1NfSElHSF9NSU4gKEJpdCAxMikgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19DU19ISUdIX01JTl9Nc2sgKDB4NzAwMFVMKSAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfQ1NfSElHSF9NSU4gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQl9SRUdfUVNQSUNfRE1ZX0ZPUkNFX1BvcyAoMTVVTCkgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQl9SRUc6IFFTUElDX0RNWV9GT1JDRSAoQml0IDE1KSAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQl9SRUdfUVNQSUNfRE1ZX0ZPUkNFX01zayAoMHg4MDAwVUwpICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQl9SRUc6IFFTUElDX0RNWV9GT1JDRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBRU1BJQ19RU1BJQ19TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfU1RBVFVTX1JFR19RU1BJQ19CVVNZX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfU1RBVFVTX1JFRzogUVNQSUNfQlVTWSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfU1RBVFVTX1JFR19RU1BJQ19CVVNZX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfU1RBVFVTX1JFRzogUVNQSUNfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFTUElDX1FTUElDX1dSSVRFREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfV1JJVEVEQVRBX1JFR19RU1BJQ19XUklURURBVEFfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfV1JJVEVEQVRBX1JFRzogUVNQSUNfV1JJVEVEQVRBIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfV1JJVEVEQVRBX1JFR19RU1BJQ19XUklURURBVEFfTXNrICgweGZmZmZmZmZmVUwpICAgIC8qITwgUVNQSUMgUVNQSUNfV1JJVEVEQVRBX1JFRzogUVNQSUNfV1JJVEVEQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfUkVBRERBVEFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19SRUFEREFUQV9SRUdfUVNQSUNfUkVBRERBVEFfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19SRUFEREFUQV9SRUc6IFFTUElDX1JFQUREQVRBIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19SRUFEREFUQV9SRUdfUVNQSUNfUkVBRERBVEFfTXNrICgweGZmZmZmZmZmVUwpICAgICAgLyohPCBRU1BJQyBRU1BJQ19SRUFEREFUQV9SRUc6IFFTUElDX1JFQUREQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfRFVNTVlEQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19EVU1NWURBVEFfUkVHX1FTUElDX0RVTU1ZREFUQV9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19EVU1NWURBVEFfUkVHOiBRU1BJQ19EVU1NWURBVEEgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19EVU1NWURBVEFfUkVHX1FTUElDX0RVTU1ZREFUQV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgLyohPCBRU1BJQyBRU1BJQ19EVU1NWURBVEFfUkVHOiBRU1BJQ19EVU1NWURBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBRU1BJQ19RU1BJQ19FUkFTRUNUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ1RSTF9SRUdfUVNQSUNfRVJTX0FERFJfUG9zICg0VUwpICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ1RSTF9SRUc6IFFTUElDX0VSU19BRERSIChCaXQgNCkgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ1RSTF9SRUdfUVNQSUNfRVJTX0FERFJfTXNrICgweGZmZmZmMFVMKSAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ1RSTF9SRUc6IFFTUElDX0VSU19BRERSIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNUUkxfUkVHX1FTUElDX0VSQVNFX0VOX1BvcyAoMjRVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNUUkxfUkVHOiBRU1BJQ19FUkFTRV9FTiAoQml0IDI0KSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNUUkxfUkVHX1FTUElDX0VSQVNFX0VOX01zayAoMHgxMDAwMDAwVUwpICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNUUkxfUkVHOiBRU1BJQ19FUkFTRV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDVFJMX1JFR19RU1BJQ19FUlNfU1RBVEVfUG9zICgyNVVMKSAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDVFJMX1JFRzogUVNQSUNfRVJTX1NUQVRFIChCaXQgMjUpICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDVFJMX1JFR19RU1BJQ19FUlNfU1RBVEVfTXNrICgweGUwMDAwMDBVTCkgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDVFJMX1JFRzogUVNQSUNfRVJTX1NUQVRFIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfRVJBU0VDTURBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREFfUkVHX1FTUElDX0VSU19JTlNUX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREFfUkVHOiBRU1BJQ19FUlNfSU5TVCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREFfUkVHX1FTUElDX0VSU19JTlNUX01zayAoMHhmZlVMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREFfUkVHOiBRU1BJQ19FUlNfSU5TVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURBX1JFR19RU1BJQ19XRU5fSU5TVF9Qb3MgKDhVTCkgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURBX1JFRzogUVNQSUNfV0VOX0lOU1QgKEJpdCA4KSAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURBX1JFR19RU1BJQ19XRU5fSU5TVF9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURBX1JFRzogUVNQSUNfV0VOX0lOU1QgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQV9SRUdfUVNQSUNfU1VTX0lOU1RfUG9zICgxNlVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQV9SRUc6IFFTUElDX1NVU19JTlNUIChCaXQgMTYpICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQV9SRUdfUVNQSUNfU1VTX0lOU1RfTXNrICgweGZmMDAwMFVMKSAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQV9SRUc6IFFTUElDX1NVU19JTlNUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREFfUkVHX1FTUElDX1JFU19JTlNUX1BvcyAoMjRVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREFfUkVHOiBRU1BJQ19SRVNfSU5TVCAoQml0IDI0KSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREFfUkVHX1FTUElDX1JFU19JTlNUX01zayAoMHhmZjAwMDAwMFVMKSAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREFfUkVHOiBRU1BJQ19SRVNfSU5TVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFTUElDX1FTUElDX0VSQVNFQ01EQl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19FUlNfVFhfTURfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfRVJTX1RYX01EIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19FUlNfVFhfTURfTXNrICgweDNVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfRVJTX1RYX01EIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX1dFTl9UWF9NRF9Qb3MgKDJVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19XRU5fVFhfTUQgKEJpdCAyKSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX1dFTl9UWF9NRF9Nc2sgKDB4Y1VMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19XRU5fVFhfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQl9SRUdfUVNQSUNfU1VTX1RYX01EX1BvcyAoNFVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQl9SRUc6IFFTUElDX1NVU19UWF9NRCAoQml0IDQpICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQl9SRUdfUVNQSUNfU1VTX1RYX01EX01zayAoMHgzMFVMKSAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQl9SRUc6IFFTUElDX1NVU19UWF9NRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19SRVNfVFhfTURfUG9zICg2VUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfUkVTX1RYX01EIChCaXQgNikgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19SRVNfVFhfTURfTXNrICgweGMwVUwpICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfUkVTX1RYX01EIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX0VBRF9UWF9NRF9Qb3MgKDhVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19FQURfVFhfTUQgKEJpdCA4KSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX0VBRF9UWF9NRF9Nc2sgKDB4MzAwVUwpICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19FQURfVFhfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQl9SRUdfUVNQSUNfRVJTX0NTX0hJX1BvcyAoMTBVTCkgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQl9SRUc6IFFTUElDX0VSU19DU19ISSAoQml0IDEwKSAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQl9SRUdfUVNQSUNfRVJTX0NTX0hJX01zayAoMHg3YzAwVUwpICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQl9SRUc6IFFTUElDX0VSU19DU19ISSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19FUlNSRVNfSExEX1BvcyAoMTZVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfRVJTUkVTX0hMRCAoQml0IDE2KSAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19FUlNSRVNfSExEX01zayAoMHhmMDAwMFVMKSAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfRVJTUkVTX0hMRCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19SRVNTVVNfRExZX1BvcyAoMjRVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfUkVTU1VTX0RMWSAoQml0IDI0KSAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19SRVNTVVNfRExZX01zayAoMHgzZjAwMDAwMFVMKSAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfUkVTU1VTX0RMWSAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFTUElDX1FTUElDX0JVUlNUQlJLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RCUktfUkVHX1FTUElDX0JSS19XUkRfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RCUktfUkVHOiBRU1BJQ19CUktfV1JEIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RCUktfUkVHX1FTUElDX0JSS19XUkRfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RCUktfUkVHOiBRU1BJQ19CUktfV1JEIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQlJLX1JFR19RU1BJQ19CUktfRU5fUG9zICgxNlVMKSAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQlJLX1JFRzogUVNQSUNfQlJLX0VOIChCaXQgMTYpICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQlJLX1JFR19RU1BJQ19CUktfRU5fTXNrICgweDEwMDAwVUwpICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQlJLX1JFRzogUVNQSUNfQlJLX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVEJSS19SRUdfUVNQSUNfQlJLX1NaX1BvcyAoMTdVTCkgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVEJSS19SRUc6IFFTUElDX0JSS19TWiAoQml0IDE3KSAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVEJSS19SRUdfUVNQSUNfQlJLX1NaX01zayAoMHgyMDAwMFVMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVEJSS19SRUc6IFFTUElDX0JSS19TWiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RCUktfUkVHX1FTUElDX0JSS19UWF9NRF9Qb3MgKDE4VUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RCUktfUkVHOiBRU1BJQ19CUktfVFhfTUQgKEJpdCAxOCkgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RCUktfUkVHX1FTUElDX0JSS19UWF9NRF9Nc2sgKDB4YzAwMDBVTCkgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RCUktfUkVHOiBRU1BJQ19CUktfVFhfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQlJLX1JFR19RU1BJQ19TRUNfSEZfRFNfUG9zICgyMFVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQlJLX1JFRzogUVNQSUNfU0VDX0hGX0RTIChCaXQgMjApICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQlJLX1JFR19RU1BJQ19TRUNfSEZfRFNfTXNrICgweDEwMDAwMFVMKSAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQlJLX1JFRzogUVNQSUNfU0VDX0hGX0RTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfU1RBVFVTQ01EX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX1JTVEFUX0lOU1RfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19SU1RBVF9JTlNUIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX1JTVEFUX0lOU1RfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19SU1RBVF9JTlNUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX1JTVEFUX1RYX01EX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19SU1RBVF9UWF9NRCAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX1JTVEFUX1RYX01EX01zayAoMHgzMDBVTCkgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19SU1RBVF9UWF9NRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfU1RBVFVTQ01EX1JFR19RU1BJQ19SU1RBVF9SWF9NRF9Qb3MgKDEwVUwpICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfU1RBVFVTQ01EX1JFRzogUVNQSUNfUlNUQVRfUlhfTUQgKEJpdCAxMCkgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfU1RBVFVTQ01EX1JFR19RU1BJQ19SU1RBVF9SWF9NRF9Nc2sgKDB4YzAwVUwpICAgICAgIC8qITwgUVNQSUMgUVNQSUNfU1RBVFVTQ01EX1JFRzogUVNQSUNfUlNUQVRfUlhfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFFTUElDX1FTUElDX1NUQVRVU0NNRF9SRUdfUVNQSUNfQlVTWV9QT1NfUG9zICgxMlVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX1NUQVRVU0NNRF9SRUc6IFFTUElDX0JVU1lfUE9TIChCaXQgMTIpICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX1NUQVRVU0NNRF9SRUdfUVNQSUNfQlVTWV9QT1NfTXNrICgweDcwMDBVTCkgICAgICAgICAvKiE8IFFTUElDIFFTUElDX1NUQVRVU0NNRF9SRUc6IFFTUElDX0JVU1lfUE9TIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX0JVU1lfVkFMX1BvcyAoMTVVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19CVVNZX1ZBTCAoQml0IDE1KSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX0JVU1lfVkFMX01zayAoMHg4MDAwVUwpICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19CVVNZX1ZBTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfU1RBVFVTQ01EX1JFR19RU1BJQ19SRVNTVFNfRExZX1BvcyAoMTZVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfU1RBVFVTQ01EX1JFRzogUVNQSUNfUkVTU1RTX0RMWSAoQml0IDE2KSAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfU1RBVFVTQ01EX1JFR19RU1BJQ19SRVNTVFNfRExZX01zayAoMHgzZjAwMDBVTCkgICAgIC8qITwgUVNQSUMgUVNQSUNfU1RBVFVTQ01EX1JFRzogUVNQSUNfUkVTU1RTX0RMWSAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfU1RBVFVTQ01EX1JFR19RU1BJQ19TVFNETFlfU0VMX1BvcyAoMjJVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfU1RBVFVTQ01EX1JFRzogUVNQSUNfU1RTRExZX1NFTCAoQml0IDIyKSAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfU1RBVFVTQ01EX1JFR19RU1BJQ19TVFNETFlfU0VMX01zayAoMHg0MDAwMDBVTCkgICAgIC8qITwgUVNQSUMgUVNQSUNfU1RBVFVTQ01EX1JFRzogUVNQSUNfU1RTRExZX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFTUElDX1FTUElDX0NIQ0tFUkFTRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ0hDS0VSQVNFX1JFR19RU1BJQ19DSENLRVJBU0VfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ0hDS0VSQVNFX1JFRzogUVNQSUNfQ0hDS0VSQVNFIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ0hDS0VSQVNFX1JFR19RU1BJQ19DSENLRVJBU0VfTXNrICgweGZmZmZmZmZmVUwpICAgIC8qITwgUVNQSUMgUVNQSUNfQ0hDS0VSQVNFX1JFRzogUVNQSUNfQ0hDS0VSQVNFIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfR1BfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19HUF9SRUdfUVNQSUNfUEFEU19EUlZfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19HUF9SRUc6IFFTUElDX1BBRFNfRFJWIChCaXQgMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19HUF9SRUdfUVNQSUNfUEFEU19EUlZfTXNrICgweDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19HUF9SRUc6IFFTUElDX1BBRFNfRFJWIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19HUF9SRUdfUVNQSUNfUEFEU19TTEVXX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19HUF9SRUc6IFFTUElDX1BBRFNfU0xFVyAoQml0IDMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19HUF9SRUdfUVNQSUNfUEFEU19TTEVXX01zayAoMHgxOFVMKSAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19HUF9SRUc6IFFTUElDX1BBRFNfU0xFVyAoQml0ZmllbGQtTWFzazogMHgwMykgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFTUElDX1FTUElDX1VDT0RFX1NUQVJUICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19VQ09ERV9TVEFSVF9RU1BJQ19VQ09ERV9YX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19VQ09ERV9TVEFSVDogUVNQSUNfVUNPREVfWCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19VQ09ERV9TVEFSVF9RU1BJQ19VQ09ERV9YX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19VQ09ERV9TVEFSVDogUVNQSUNfVUNPREVfWCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ1FVQUQnIFBvc2l0aW9uICYgTWFzayAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFVQURfUURFQ19DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX1FEX0lSUV9NQVNLX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBRRF9JUlFfTUFTSyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX1FEX0lSUV9NQVNLX01zayAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBRRF9JUlFfTUFTSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX1FEX0lSUV9DTFJfUG9zICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBRRF9JUlFfQ0xSIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX1FEX0lSUV9DTFJfTXNrICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBRRF9JUlFfQ0xSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX1FEX0lSUV9TVEFUVVNfUG9zICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBRRF9JUlFfU1RBVFVTIChCaXQgMikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX1FEX0lSUV9TVEFUVVNfTXNrICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBRRF9JUlFfU1RBVFVTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX1FEX0lSUV9USFJFU19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBRRF9JUlFfVEhSRVMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX1FEX0lSUV9USFJFU19Nc2sgICAoMHgzZjhVTCkgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBRRF9JUlFfVEhSRVMgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX0NIWF9QT1JUX0VOX1BvcyAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBDSFhfUE9SVF9FTiAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX0NIWF9QT1JUX0VOX01zayAgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBDSFhfUE9SVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX0NIWV9QT1JUX0VOX1BvcyAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBDSFlfUE9SVF9FTiAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX0NIWV9QT1JUX0VOX01zayAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBDSFlfUE9SVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX0NIWl9QT1JUX0VOX1BvcyAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBDSFpfUE9SVF9FTiAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NUUkxfUkVHX0NIWl9QT1JUX0VOX01zayAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NUUkxfUkVHOiBDSFpfUE9SVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFVQURfUURFQ19YQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVVBRF9RREVDX1hDTlRfUkVHX1hfY291bnRlcl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX1hDTlRfUkVHOiBYX2NvdW50ZXIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX1hDTlRfUkVHX1hfY291bnRlcl9Nc2sgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX1hDTlRfUkVHOiBYX2NvdW50ZXIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFVQURfUURFQ19ZQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVVBRF9RREVDX1lDTlRfUkVHX1lfY291bnRlcl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX1lDTlRfUkVHOiBZX2NvdW50ZXIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX1lDTlRfUkVHX1lfY291bnRlcl9Nc2sgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX1lDTlRfUkVHOiBZX2NvdW50ZXIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFVQURfUURFQ19aQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVVBRF9RREVDX1pDTlRfUkVHX1pfY291bnRlcl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX1pDTlRfUkVHOiBaX2NvdW50ZXIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX1pDTlRfUkVHX1pfY291bnRlcl9Nc2sgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX1pDTlRfUkVHOiBaX2NvdW50ZXIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBRVUFEX1FERUNfQ0xPQ0tESVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NMT0NLRElWX1JFR19jbG9ja19kaXZpZGVyX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NMT0NLRElWX1JFRzogY2xvY2tfZGl2aWRlciAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVVBRF9RREVDX0NMT0NLRElWX1JFR19jbG9ja19kaXZpZGVyX01zayAoMHgzZmZVTCkgICAgICAgICAgICAgIC8qITwgUVVBRCBRREVDX0NMT0NLRElWX1JFRzogY2xvY2tfZGl2aWRlciAoQml0ZmllbGQtTWFzazogMHgzZmYpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdSRkNVJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX1RYX0VOX09WUl9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBUWF9FTl9PVlIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX1RYX0VOX09WUl9Nc2sgICAgKDB4M1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBUWF9FTl9PVlIgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX1JYX0VOX09WUl9Qb3MgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBSWF9FTl9PVlIgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX1JYX0VOX09WUl9Nc2sgICAgKDB4Y1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBSWF9FTl9PVlIgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX1JGX01PREVfT1ZSX1BvcyAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBSRl9NT0RFX09WUiAoQml0IDQpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX1JGX01PREVfT1ZSX01zayAgKDB4MzBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBSRl9NT0RFX09WUiAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX0lGRl9GVERGX09WUl9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBJRkZfRlRERl9PVlIgKEJpdCA2KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX0lGRl9GVERGX09WUl9Nc2sgKDB4YzBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBJRkZfRlRERl9PVlIgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX01JWF9GVERGX09WUl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBNSVhfRlRERl9PVlIgKEJpdCA4KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX01JWF9GVERGX09WUl9Nc2sgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBNSVhfRlRERl9PVlIgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX1RYREFDX1NFTF9Qb3MgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBUWERBQ19TRUwgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX1RYREFDX1NFTF9Nc2sgICAgKDB4YzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBUWERBQ19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX0dBVVNTX0RBQ19TRUxfUG9zICgxMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBHQVVTU19EQUNfU0VMIChCaXQgMTIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX0dBVVNTX0RBQ19TRUxfTXNrICgweDMwMDBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBHQVVTU19EQUNfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX0NOX0ZUREZfVElNRVMyX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBDTl9GVERGX1RJTUVTMiAoQml0IDE0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfT1ZFUlJVTEVfUkVHX0NOX0ZUREZfVElNRVMyX01zayAoMHg0MDAwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfT1ZFUlJVTEVfUkVHOiBDTl9GVERGX1RJTUVTMiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfRElBR0lSUTAxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX01BU0tfMF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9NQVNLXzAgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX01BU0tfMF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9NQVNLXzAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX1dTRUxfMF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9XU0VMXzAgKEJpdCAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX1dTRUxfMF9Nc2sgKDB4NlVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9XU0VMXzAgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX0JTRUxfMF9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9CU0VMXzAgKEJpdCAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX0JTRUxfMF9Nc2sgKDB4MzhVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9CU0VMXzAgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX0VER0VfMF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9FREdFXzAgKEJpdCA2KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX0VER0VfMF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9FREdFXzAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX01BU0tfMV9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9NQVNLXzEgKEJpdCA4KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX01BU0tfMV9Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9NQVNLXzEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX1dTRUxfMV9Qb3MgKDlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9XU0VMXzEgKEJpdCA5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX1dTRUxfMV9Nc2sgKDB4NjAwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9XU0VMXzEgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX0JTRUxfMV9Qb3MgKDExVUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9CU0VMXzEgKEJpdCAxMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX0JTRUxfMV9Nc2sgKDB4MzgwMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9CU0VMXzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX0VER0VfMV9Qb3MgKDE0VUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9FREdFXzEgKEJpdCAxNCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTAxX1JFR19ESUFHSVJRX0VER0VfMV9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTAxX1JFRzogRElBR0lSUV9FREdFXzEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfRElBR0lSUTIzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX01BU0tfMl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9NQVNLXzIgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX01BU0tfMl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9NQVNLXzIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX1dTRUxfMl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9XU0VMXzIgKEJpdCAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX1dTRUxfMl9Nc2sgKDB4NlVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9XU0VMXzIgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX0JTRUxfMl9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9CU0VMXzIgKEJpdCAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX0JTRUxfMl9Nc2sgKDB4MzhVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9CU0VMXzIgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX0VER0VfMl9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9FREdFXzIgKEJpdCA2KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX0VER0VfMl9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9FREdFXzIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX01BU0tfM19Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9NQVNLXzMgKEJpdCA4KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX01BU0tfM19Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9NQVNLXzMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX1dTRUxfM19Qb3MgKDlVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9XU0VMXzMgKEJpdCA5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX1dTRUxfM19Nc2sgKDB4NjAwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9XU0VMXzMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX0JTRUxfM19Qb3MgKDExVUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9CU0VMXzMgKEJpdCAxMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX0JTRUxfM19Nc2sgKDB4MzgwMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9CU0VMXzMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX0VER0VfM19Qb3MgKDE0VUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9FREdFXzMgKEJpdCAxNCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUTIzX1JFR19ESUFHSVJRX0VER0VfM19Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUTIzX1JFRzogRElBR0lSUV9FREdFXzMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0RJQUdJUlFfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUV9TVEFUX1JFR19ESUFHSVJRX1NUQVRfMF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUV9TVEFUX1JFRzogRElBR0lSUV9TVEFUXzAgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUV9TVEFUX1JFR19ESUFHSVJRX1NUQVRfMF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUV9TVEFUX1JFRzogRElBR0lSUV9TVEFUXzAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUV9TVEFUX1JFR19ESUFHSVJRX1NUQVRfMV9Qb3MgKDFVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUV9TVEFUX1JFRzogRElBR0lSUV9TVEFUXzEgKEJpdCAxKSAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUV9TVEFUX1JFR19ESUFHSVJRX1NUQVRfMV9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUV9TVEFUX1JFRzogRElBR0lSUV9TVEFUXzEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUV9TVEFUX1JFR19ESUFHSVJRX1NUQVRfMl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUV9TVEFUX1JFRzogRElBR0lSUV9TVEFUXzIgKEJpdCAyKSAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUV9TVEFUX1JFR19ESUFHSVJRX1NUQVRfMl9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUV9TVEFUX1JFRzogRElBR0lSUV9TVEFUXzIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUV9TVEFUX1JFR19ESUFHSVJRX1NUQVRfM19Qb3MgKDNVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUV9TVEFUX1JFRzogRElBR0lSUV9TVEFUXzMgKEJpdCAzKSAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElBR0lSUV9TVEFUX1JFR19ESUFHSVJRX1NUQVRfM19Nc2sgKDB4OFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElBR0lSUV9TVEFUX1JFRzogRElBR0lSUV9TVEFUXzMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0FHQ19FWFQxX0xVVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfQUdDX0VYVDFfTFVUX1JFR19BR0NfRVhUX0xVVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQUdDX0VYVDFfTFVUX1JFRzogQUdDX0VYVF9MVVQgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQUdDX0VYVDFfTFVUX1JFR19BR0NfRVhUX0xVVF9Nc2sgKDB4M2ZmVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQUdDX0VYVDFfTFVUX1JFRzogQUdDX0VYVF9MVVQgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0NBTFNUQVRFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0NBTFNUQVRFX1JFR19DQUxTVEFURV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTFNUQVRFX1JFRzogQ0FMU1RBVEUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NBTFNUQVRFX1JFR19DQUxTVEFURV9Nc2sgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTFNUQVRFX1JFRzogQ0FMU1RBVEUgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9TQ0FOX0ZFRURCQUNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1NDQU5fRkVFREJBQ0tfUkVHX0xGX1JFU19Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1NDQU5fRkVFREJBQ0tfUkVHOiBMRl9SRVMgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1NDQU5fRkVFREJBQ0tfUkVHX0xGX1JFU19Nc2sgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1NDQU5fRkVFREJBQ0tfUkVHOiBMRl9SRVMgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAqLworI2RlZmluZSBSRkNVX1JGX1NDQU5fRkVFREJBQ0tfUkVHX0NQX0NVUl9Qb3MgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1NDQU5fRkVFREJBQ0tfUkVHOiBDUF9DVVIgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1NDQU5fRkVFREJBQ0tfUkVHX0NQX0NVUl9Nc2sgICgweGYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1NDQU5fRkVFREJBQ0tfUkVHOiBDUF9DVVIgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfUkVGX09TQ19CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1JFRl9PU0NfQkxFX1JFR19DTlRfUk9fUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1JFRl9PU0NfQkxFX1JFRzogQ05UX1JPIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1JFRl9PU0NfQkxFX1JFR19DTlRfUk9fTXNrICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1JFRl9PU0NfQkxFX1JFRzogQ05UX1JPIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1JFRl9PU0NfQkxFX1JFR19DTlRfQ0xLX1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1JFRl9PU0NfQkxFX1JFRzogQ05UX0NMSyAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1JFRl9PU0NfQkxFX1JFR19DTlRfQ0xLX01zayAgICgweDdmYzBVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1JFRl9PU0NfQkxFX1JFRzogQ05UX0NMSyAoQml0ZmllbGQtTWFzazogMHgxZmYpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9SRUZfT1NDX0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1JFRl9PU0NfRlRERl9SRUdfQ05UX1JPX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1JFRl9PU0NfRlRERl9SRUc6IENOVF9STyAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1JFRl9PU0NfRlRERl9SRUdfQ05UX1JPX01zayAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1JFRl9PU0NfRlRERl9SRUc6IENOVF9STyAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1JFRl9PU0NfRlRERl9SRUdfQ05UX0NMS19Qb3MgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1JFRl9PU0NfRlRERl9SRUc6IENOVF9DTEsgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1JFRl9PU0NfRlRERl9SRUdfQ05UX0NMS19Nc2sgICgweDdmYzBVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1JFRl9PU0NfRlRERl9SRUc6IENOVF9DTEsgKEJpdGZpZWxkLU1hc2s6IDB4MWZmKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0NBTF9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0NBTF9DVFJMX1JFR19TT19DQUxfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTF9DVFJMX1JFRzogU09fQ0FMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NBTF9DVFJMX1JFR19TT19DQUxfTXNrICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTF9DVFJMX1JFRzogU09fQ0FMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NBTF9DVFJMX1JFR19FT19DQUxfUG9zICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTF9DVFJMX1JFRzogRU9fQ0FMIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NBTF9DVFJMX1JFR19FT19DQUxfTXNrICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTF9DVFJMX1JFRzogRU9fQ0FMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NBTF9DVFJMX1JFR19NR0FJTl9DQUxfRElTX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTF9DVFJMX1JFRzogTUdBSU5fQ0FMX0RJUyAoQml0IDIpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NBTF9DVFJMX1JFR19NR0FJTl9DQUxfRElTX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTF9DVFJMX1JFRzogTUdBSU5fQ0FMX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBSRkNVX1JGX0NBTF9DVFJMX1JFR19JRkZfQ0FMX0RJU19Qb3MgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTF9DVFJMX1JFRzogSUZGX0NBTF9ESVMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NBTF9DVFJMX1JFR19JRkZfQ0FMX0RJU19Nc2sgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTF9DVFJMX1JFRzogSUZGX0NBTF9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NBTF9DVFJMX1JFR19EQ19PRkZTRVRfQ0FMX0RJU19Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTF9DVFJMX1JFRzogRENfT0ZGU0VUX0NBTF9ESVMgKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NBTF9DVFJMX1JFR19EQ19PRkZTRVRfQ0FMX0RJU19Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NBTF9DVFJMX1JFRzogRENfT0ZGU0VUX0NBTF9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX1ZDT19DQUxfRElTX1BvcyAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBWQ09fQ0FMX0RJUyAoQml0IDUpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX1ZDT19DQUxfRElTX01zayAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBWQ09fQ0FMX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfSVJRX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfSVJRX0NUUkxfUkVHX0VPX0NBTF9DTEVBUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSVJRX0NUUkxfUkVHOiBFT19DQUxfQ0xFQVIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSVJRX0NUUkxfUkVHX0VPX0NBTF9DTEVBUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSVJRX0NUUkxfUkVHOiBFT19DQUxfQ0xFQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfQURDSV9EQ19PRkZTRVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfQURDSV9EQ19PRkZTRVRfUkVHX0FEQ19PRkZQX0lfUkRfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDSV9EQ19PRkZTRVRfUkVHOiBBRENfT0ZGUF9JX1JEIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDSV9EQ19PRkZTRVRfUkVHX0FEQ19PRkZQX0lfUkRfTXNrICgweGZmVUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDSV9EQ19PRkZTRVRfUkVHOiBBRENfT0ZGUF9JX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1JGX0FEQ0lfRENfT0ZGU0VUX1JFR19BRENfT0ZGTl9JX1JEX1BvcyAoOFVMKSAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ0lfRENfT0ZGU0VUX1JFRzogQURDX09GRk5fSV9SRCAoQml0IDgpICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ0lfRENfT0ZGU0VUX1JFR19BRENfT0ZGTl9JX1JEX01zayAoMHhmZjAwVUwpICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ0lfRENfT0ZGU0VUX1JFRzogQURDX09GRk5fSV9SRCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9BRENRX0RDX09GRlNFVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9BRENRX0RDX09GRlNFVF9SRUdfQURDX09GRlBfUV9SRF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9BRENRX0RDX09GRlNFVF9SRUc6IEFEQ19PRkZQX1FfUkQgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9BRENRX0RDX09GRlNFVF9SRUdfQURDX09GRlBfUV9SRF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9BRENRX0RDX09GRlNFVF9SRUc6IEFEQ19PRkZQX1FfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUkZfQURDUV9EQ19PRkZTRVRfUkVHX0FEQ19PRkZOX1FfUkRfUG9zICg4VUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDUV9EQ19PRkZTRVRfUkVHOiBBRENfT0ZGTl9RX1JEIChCaXQgOCkgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDUV9EQ19PRkZTRVRfUkVHX0FEQ19PRkZOX1FfUkRfTXNrICgweGZmMDBVTCkgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDUV9EQ19PRkZTRVRfUkVHOiBBRENfT0ZGTl9RX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfU1BBUkUxX0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9CTEVfUkVHX1JGX1hUQUxfUkZDTEtfVEVTVF9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9CTEVfUkVHOiBSRl9YVEFMX1JGQ0xLX1RFU1QgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9CTEVfUkVHX1JGX1hUQUxfUkZDTEtfVEVTVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9CTEVfUkVHOiBSRl9YVEFMX1JGQ0xLX1RFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0JMRV9SRUdfUkZfWFRBTF9QTExfRFhUQUwxNl9URVNUX1BvcyAoMVVMKSAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0JMRV9SRUc6IFJGX1hUQUxfUExMX0RYVEFMMTZfVEVTVCAoQml0IDEpICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0JMRV9SRUdfUkZfWFRBTF9QTExfRFhUQUwxNl9URVNUX01zayAoMHgyVUwpICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0JMRV9SRUc6IFJGX1hUQUxfUExMX0RYVEFMMTZfVEVTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfQkxFX1JFR19SRl9WVFVORV9UT19BRENfVEVTVF9FTl9Qb3MgKDJVTCkgICAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfQkxFX1JFRzogUkZfVlRVTkVfVE9fQURDX1RFU1RfRU4gKEJpdCAyKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfQkxFX1JFR19SRl9WVFVORV9UT19BRENfVEVTVF9FTl9Nc2sgKDB4NFVMKSAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfQkxFX1JFRzogUkZfVlRVTkVfVE9fQURDX1RFU1RfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0JMRV9SRUdfUkZfVFhEQUNfQ0xLX1BPTF9TRUxfUG9zICgzVUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0JMRV9SRUc6IFJGX1RYREFDX0NMS19QT0xfU0VMIChCaXQgMykgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0JMRV9SRUdfUkZfVFhEQUNfQ0xLX1BPTF9TRUxfTXNrICgweDhVTCkgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0JMRV9SRUc6IFJGX1RYREFDX0NMS19QT0xfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9CTEVfUkVHX1JGX0dEQUNfQ1VSX1NFVF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9CTEVfUkVHOiBSRl9HREFDX0NVUl9TRVQgKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9CTEVfUkVHX1JGX0dEQUNfQ1VSX1NFVF9Nc2sgKDB4MzBVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9CTEVfUkVHOiBSRl9HREFDX0NVUl9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0JMRV9SRUdfUkZfU1BBUkVfUkVHX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0JMRV9SRUc6IFJGX1NQQVJFX1JFRyAoQml0IDYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0JMRV9SRUdfUkZfU1BBUkVfUkVHX01zayAoMHhmZmMwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0JMRV9SRUc6IFJGX1NQQVJFX1JFRyAoQml0ZmllbGQtTWFzazogMHgzZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9TUEFSRTFfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0ZUREZfUkVHX1JGX1hUQUxfUkZDTEtfVEVTVF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0ZUREZfUkVHOiBSRl9YVEFMX1JGQ0xLX1RFU1QgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0ZUREZfUkVHX1JGX1hUQUxfUkZDTEtfVEVTVF9Nc2sgKDB4MVVMKSAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0ZUREZfUkVHOiBSRl9YVEFMX1JGQ0xLX1RFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0ZUREZfUkVHX1JGX1hUQUxfUExMX0RYVEFMMTZfVEVTVF9Qb3MgKDFVTCkgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0ZUREZfUkVHOiBSRl9YVEFMX1BMTF9EWFRBTDE2X1RFU1QgKEJpdCAxKSAgICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0ZUREZfUkVHX1JGX1hUQUxfUExMX0RYVEFMMTZfVEVTVF9Nc2sgKDB4MlVMKSAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0ZUREZfUkVHOiBSRl9YVEFMX1BMTF9EWFRBTDE2X1RFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0ZUREZfUkVHX1JGX1ZUVU5FX1RPX0FEQ19URVNUX0VOX1BvcyAoMlVMKSAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0ZUREZfUkVHOiBSRl9WVFVORV9UT19BRENfVEVTVF9FTiAoQml0IDIpICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0ZUREZfUkVHX1JGX1ZUVU5FX1RPX0FEQ19URVNUX0VOX01zayAoMHg0VUwpICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0ZUREZfUkVHOiBSRl9WVFVORV9UT19BRENfVEVTVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfRlRERl9SRUdfUkZfVFhEQUNfQ0xLX1BPTF9TRUxfUG9zICgzVUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfRlRERl9SRUc6IFJGX1RYREFDX0NMS19QT0xfU0VMIChCaXQgMykgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfRlRERl9SRUdfUkZfVFhEQUNfQ0xLX1BPTF9TRUxfTXNrICgweDhVTCkgICAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfRlRERl9SRUc6IFJGX1RYREFDX0NMS19QT0xfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9GVERGX1JFR19SRl9HREFDX0NVUl9TRVRfUG9zICg0VUwpICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9GVERGX1JFRzogUkZfR0RBQ19DVVJfU0VUIChCaXQgNCkgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9GVERGX1JFR19SRl9HREFDX0NVUl9TRVRfTXNrICgweDMwVUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9GVERGX1JFRzogUkZfR0RBQ19DVVJfU0VUIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9GVERGX1JFR19SRl9TUEFSRV9SRUdfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9GVERGX1JFRzogUkZfU1BBUkVfUkVHIChCaXQgNikgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9GVERGX1JFR19SRl9TUEFSRV9SRUdfTXNrICgweGZmYzBVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9GVERGX1JFRzogUkZfU1BBUkVfUkVHIChCaXRmaWVsZC1NYXNrOiAweDNmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9CSUFTX0NUUkwxX0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9CSUFTX0NUUkwxX0JMRV9SRUdfTUlYX0JJQVNfQkxFX1NFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9CSUFTX0NUUkwxX0JMRV9SRUc6IE1JWF9CSUFTX0JMRV9TRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9CSUFTX0NUUkwxX0JMRV9SRUdfTUlYX0JJQVNfQkxFX1NFVF9Nc2sgKDB4ZlVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9CSUFTX0NUUkwxX0JMRV9SRUc6IE1JWF9CSUFTX0JMRV9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfQklBU19DVFJMMV9CTEVfUkVHX0NQX0JJQVNfQkxFX1NFVF9Qb3MgKDRVTCkgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQklBU19DVFJMMV9CTEVfUkVHOiBDUF9CSUFTX0JMRV9TRVQgKEJpdCA0KSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQklBU19DVFJMMV9CTEVfUkVHX0NQX0JJQVNfQkxFX1NFVF9Nc2sgKDB4ZjBVTCkgICAgICAgICAvKiE8IFJGQ1UgUkZfQklBU19DVFJMMV9CTEVfUkVHOiBDUF9CSUFTX0JMRV9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfQklBU19DVFJMMV9CTEVfUkVHX1ZDT19CSUFTX0JMRV9TRVRfUG9zICg4VUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQklBU19DVFJMMV9CTEVfUkVHOiBWQ09fQklBU19CTEVfU0VUIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQklBU19DVFJMMV9CTEVfUkVHX1ZDT19CSUFTX0JMRV9TRVRfTXNrICgweGYwMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfQklBU19DVFJMMV9CTEVfUkVHOiBWQ09fQklBU19CTEVfU0VUIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfQkxFX1JFR19JRkZfQklBU19CTEVfU0VUX1BvcyAoMTJVTCkgICAgICAgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfQkxFX1JFRzogSUZGX0JJQVNfQkxFX1NFVCAoQml0IDEyKSAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfQkxFX1JFR19JRkZfQklBU19CTEVfU0VUX01zayAoMHhmMDAwVUwpICAgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfQkxFX1JFRzogSUZGX0JJQVNfQkxFX1NFVCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9CSUFTX0NUUkwxX0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9CSUFTX0NUUkwxX0ZUREZfUkVHX01JWF9CSUFTX0ZUREZfU0VUX1BvcyAoMFVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9CSUFTX0NUUkwxX0ZUREZfUkVHOiBNSVhfQklBU19GVERGX1NFVCAoQml0IDApICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9CSUFTX0NUUkwxX0ZUREZfUkVHX01JWF9CSUFTX0ZUREZfU0VUX01zayAoMHhmVUwpICAgICAgIC8qITwgUkZDVSBSRl9CSUFTX0NUUkwxX0ZUREZfUkVHOiBNSVhfQklBU19GVERGX1NFVCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9CSUFTX0NUUkwxX0ZUREZfUkVHX0NQX0JJQVNfRlRERl9TRVRfUG9zICg0VUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9CSUFTX0NUUkwxX0ZUREZfUkVHOiBDUF9CSUFTX0ZUREZfU0VUIChCaXQgNCkgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9CSUFTX0NUUkwxX0ZUREZfUkVHX0NQX0JJQVNfRlRERl9TRVRfTXNrICgweGYwVUwpICAgICAgIC8qITwgUkZDVSBSRl9CSUFTX0NUUkwxX0ZUREZfUkVHOiBDUF9CSUFTX0ZUREZfU0VUIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfRlRERl9SRUdfVkNPX0JJQVNfRlRERl9TRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfRlRERl9SRUc6IFZDT19CSUFTX0ZUREZfU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfRlRERl9SRUdfVkNPX0JJQVNfRlRERl9TRVRfTXNrICgweGYwMFVMKSAgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfRlRERl9SRUc6IFZDT19CSUFTX0ZUREZfU0VUIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfRlRERl9SRUdfSUZGX0JJQVNfRlRERl9TRVRfUG9zICgxMlVMKSAgICAgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfRlRERl9SRUc6IElGRl9CSUFTX0ZUREZfU0VUIChCaXQgMTIpICAgICAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfRlRERl9SRUdfSUZGX0JJQVNfRlRERl9TRVRfTXNrICgweGYwMDBVTCkgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfRlRERl9SRUc6IElGRl9CSUFTX0ZUREZfU0VUIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0lGRl9DVFJMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DVFJMMV9SRUdfSUZfQ0FMX0NBUF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DVFJMMV9SRUc6IElGX0NBTF9DQVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DVFJMMV9SRUdfSUZfQ0FMX0NBUF9Nc2sgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DVFJMMV9SRUc6IElGX0NBTF9DQVAgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DVFJMMV9SRUdfSUZfTVVURV9Qb3MgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DVFJMMV9SRUc6IElGX01VVEUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DVFJMMV9SRUdfSUZfTVVURV9Nc2sgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DVFJMMV9SRUc6IElGX01VVEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DVFJMMV9SRUdfSUZGX0RDT0NfREFDX0RJU19Qb3MgKDZVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DVFJMMV9SRUc6IElGRl9EQ09DX0RBQ19ESVMgKEJpdCA2KSAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DVFJMMV9SRUdfSUZGX0RDT0NfREFDX0RJU19Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DVFJMMV9SRUc6IElGRl9EQ09DX0RBQ19ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19ST19UT19QSU5TX1BvcyAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogUk9fVE9fUElOUyAoQml0IDcpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19ST19UT19QSU5TX01zayAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogUk9fVE9fUElOUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRl9TRUxfU0VUMl9HVF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZfU0VMX1NFVDJfR1QgKEJpdCA4KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRl9TRUxfU0VUMl9HVF9Nc2sgKDB4ZjAwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZfU0VMX1NFVDJfR1QgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRl9TRUxFQ1RfRlNNX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZfU0VMRUNUX0ZTTSAoQml0IDEyKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRl9TRUxFQ1RfRlNNX01zayAoMHgxMDAwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZfU0VMRUNUX0ZTTSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRkZfQ09NUExFWF9ESVNfUG9zICgxM1VMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZGX0NPTVBMRVhfRElTIChCaXQgMTMpICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRkZfQ09NUExFWF9ESVNfTXNrICgweDIwMDBVTCkgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZGX0NPTVBMRVhfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0FEQ19DVFJMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMMV9SRUdfQURDX0RDX09GRlNFVF9TRUxfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMMV9SRUc6IEFEQ19EQ19PRkZTRVRfU0VMIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMMV9SRUdfQURDX0RDX09GRlNFVF9TRUxfTXNrICgweDFVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMMV9SRUc6IEFEQ19EQ19PRkZTRVRfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMMV9SRUdfQURDX01VVEVfUG9zICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMMV9SRUc6IEFEQ19NVVRFIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMMV9SRUdfQURDX01VVEVfTXNrICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMMV9SRUc6IEFEQ19NVVRFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMMV9SRUdfQURDX1NJR05fUG9zICAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMMV9SRUc6IEFEQ19TSUdOIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMMV9SRUdfQURDX1NJR05fTXNrICAgICgweDQwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMMV9SRUc6IEFEQ19TSUdOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0FEQ19DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMMl9SRUdfQURDX09GRlBfSV9XUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMMl9SRUc6IEFEQ19PRkZQX0lfV1IgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMMl9SRUdfQURDX09GRlBfSV9XUl9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMMl9SRUc6IEFEQ19PRkZQX0lfV1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMMl9SRUdfQURDX09GRk5fSV9XUl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMMl9SRUc6IEFEQ19PRkZOX0lfV1IgKEJpdCA4KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMMl9SRUdfQURDX09GRk5fSV9XUl9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMMl9SRUc6IEFEQ19PRkZOX0lfV1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0FEQ19DVFJMM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMM19SRUdfQURDX09GRlBfUV9XUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMM19SRUc6IEFEQ19PRkZQX1FfV1IgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMM19SRUdfQURDX09GRlBfUV9XUl9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMM19SRUc6IEFEQ19PRkZQX1FfV1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMM19SRUdfQURDX09GRk5fUV9XUl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMM19SRUc6IEFEQ19PRkZOX1FfV1IgKEJpdCA4KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ19DVFJMM19SRUdfQURDX09GRk5fUV9XUl9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ19DVFJMM19SRUc6IEFEQ19PRkZOX1FfV1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9QQV9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1BBX0NUUkxfUkVHX1BBX1JBTVBTUEVFRF9ET1dOX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1BBX0NUUkxfUkVHOiBQQV9SQU1QU1BFRURfRE9XTiAoQml0IDUpICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1BBX0NUUkxfUkVHX1BBX1JBTVBTUEVFRF9ET1dOX01zayAoMHg2MFVMKSAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1BBX0NUUkxfUkVHOiBQQV9SQU1QU1BFRURfRE9XTiAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUkZDVV9SRl9QQV9DVFJMX1JFR19QQV9SQU1QU1BFRURfVVBfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9QQV9DVFJMX1JFRzogUEFfUkFNUFNQRUVEX1VQIChCaXQgNykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9QQV9DVFJMX1JFR19QQV9SQU1QU1BFRURfVVBfTXNrICgweDE4MFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9QQV9DVFJMX1JFRzogUEFfUkFNUFNQRUVEX1VQIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgKi8KKyNkZWZpbmUgUkZDVV9SRl9QQV9DVFJMX1JFR19QQV9GQVNUX0RJU0NIQVJHRV9FTl9Qb3MgKDlVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9QQV9DVFJMX1JFRzogUEFfRkFTVF9ESVNDSEFSR0VfRU4gKEJpdCA5KSAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9QQV9DVFJMX1JFR19QQV9GQVNUX0RJU0NIQVJHRV9FTl9Nc2sgKDB4MjAwVUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9QQV9DVFJMX1JFRzogUEFfRkFTVF9ESVNDSEFSR0VfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfUEFfQ1RSTF9SRUdfTEVWRUxfTERPX1JGUEFfUG9zICgxMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUEFfQ1RSTF9SRUc6IExFVkVMX0xET19SRlBBIChCaXQgMTEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUEFfQ1RSTF9SRUdfTEVWRUxfTERPX1JGUEFfTXNrICgweDc4MDBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUEFfQ1RSTF9SRUc6IExFVkVMX0xET19SRlBBIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfTUdDX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfTUdDX0NUUkxfUkVHX01HQ19HQUlOX1NFVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTUdDX0NUUkxfUkVHOiBNR0NfR0FJTl9TRVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTUdDX0NUUkxfUkVHX01HQ19HQUlOX1NFVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTUdDX0NUUkxfUkVHOiBNR0NfR0FJTl9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTUdDX0NUUkxfUkVHX01HQ19QT0xFX1NXX1BvcyAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTUdDX0NUUkxfUkVHOiBNR0NfUE9MRV9TVyAoQml0IDEpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTUdDX0NUUkxfUkVHX01HQ19QT0xFX1NXX01zayAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTUdDX0NUUkxfUkVHOiBNR0NfUE9MRV9TVyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTUdDX0NUUkxfUkVHX0dBVVNTX0RBQ19DVFJMX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTUdDX0NUUkxfUkVHOiBHQVVTU19EQUNfQ1RSTCAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTUdDX0NUUkxfUkVHX0dBVVNTX0RBQ19DVFJMX01zayAoMHhjVUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTUdDX0NUUkxfUkVHOiBHQVVTU19EQUNfQ1RSTCAoQml0ZmllbGQtTWFzazogMHgwMykgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX1RVTkVfVkFSX1YwX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBUVU5FX1ZBUl9WMCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX1RVTkVfVkFSX1YwX01zayAoMHg3VUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBUVU5FX1ZBUl9WMCAoQml0ZmllbGQtTWFzazogMHgwNykgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX1RVTkVfVkFSX1YxX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBUVU5FX1ZBUl9WMSAoQml0IDMpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX1RVTkVfVkFSX1YxX01zayAoMHgzOFVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBUVU5FX1ZBUl9WMSAoQml0ZmllbGQtTWFzazogMHgwNykgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX1RVTkVfVkFSX1YyX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBUVU5FX1ZBUl9WMiAoQml0IDYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX1RVTkVfVkFSX1YyX01zayAoMHgxYzBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBUVU5FX1ZBUl9WMiAoQml0ZmllbGQtTWFzazogMHgwNykgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX1RVTkVfVkFSX1YzX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBUVU5FX1ZBUl9WMyAoQml0IDkpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX1RVTkVfVkFSX1YzX01zayAoMHhlMDBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBUVU5FX1ZBUl9WMyAoQml0ZmllbGQtTWFzazogMHgwNykgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX01PRF9WQVJfVjBfUG9zICgxMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBNT0RfVkFSX1YwIChCaXQgMTIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX01PRF9WQVJfVjBfTXNrICgweDMwMDBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBNT0RfVkFSX1YwIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX01PRF9WQVJfVjFfUG9zICgxNFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBNT0RfVkFSX1YxIChCaXQgMTQpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPVkFSX0NUUkxfUkVHX01PRF9WQVJfVjFfTXNrICgweGMwMDBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPVkFSX0NUUkxfUkVHOiBNT0RfVkFSX1YxIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfUEZEX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfUEZEX0NUUkxfUkVHX0ZJWEVEX0NVUl9TRVRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUEZEX0NUUkxfUkVHOiBGSVhFRF9DVVJfU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUEZEX0NUUkxfUkVHX0ZJWEVEX0NVUl9TRVRfTXNrICgweDNVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUEZEX0NUUkxfUkVHOiBGSVhFRF9DVVJfU0VUIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICovCisjZGVmaW5lIFJGQ1VfUkZfUEZEX0NUUkxfUkVHX0ZJWEVEX0NVUl9FTl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUEZEX0NUUkxfUkVHOiBGSVhFRF9DVVJfRU4gKEJpdCAyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUEZEX0NUUkxfUkVHX0ZJWEVEX0NVUl9FTl9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUEZEX0NUUkxfUkVHOiBGSVhFRF9DVVJfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUEZEX0NUUkxfUkVHX1BGRF9QT0xBUklUWV9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUEZEX0NUUkxfUkVHOiBQRkRfUE9MQVJJVFkgKEJpdCAzKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUEZEX0NUUkxfUkVHX1BGRF9QT0xBUklUWV9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUEZEX0NUUkxfUkVHOiBQRkRfUE9MQVJJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9DUF9DVFJMX0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfQ1BfQ1RSTF9CTEVfUkVHX0NQX0NVUl9TRVRfQkxFX1JYX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ1BfQ1RSTF9CTEVfUkVHOiBDUF9DVVJfU0VUX0JMRV9SWCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ1BfQ1RSTF9CTEVfUkVHX0NQX0NVUl9TRVRfQkxFX1JYX01zayAoMHhmVUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ1BfQ1RSTF9CTEVfUkVHOiBDUF9DVVJfU0VUX0JMRV9SWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0JMRV9SRUdfQ1BfQ1VSX1NFVF9CTEVfVFhfUG9zICg0VUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0JMRV9SRUc6IENQX0NVUl9TRVRfQkxFX1RYIChCaXQgNCkgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0JMRV9SRUdfQ1BfQ1VSX1NFVF9CTEVfVFhfTXNrICgweGYwVUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0JMRV9SRUc6IENQX0NVUl9TRVRfQkxFX1RYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfQkxFX1JFR19DUF9DVVJfQkxFX1JYX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfQkxFX1JFRzogQ1BfQ1VSX0JMRV9SWCAoQml0IDgpICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfQkxFX1JFR19DUF9DVVJfQkxFX1JYX01zayAoMHhmMDBVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfQkxFX1JFRzogQ1BfQ1VSX0JMRV9SWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0JMRV9SRUdfQ1BfQ1VSX0JMRV9UWF9Qb3MgKDEyVUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0JMRV9SRUc6IENQX0NVUl9CTEVfVFggKEJpdCAxMikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0JMRV9SRUdfQ1BfQ1VSX0JMRV9UWF9Nc2sgKDB4ZjAwMFVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0JMRV9SRUc6IENQX0NVUl9CTEVfVFggKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0NQX0NUUkxfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfQ1BfQ1RSTF9GVERGX1JFR19DUF9DVVJfU0VUX0ZUREZfUlhfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ1BfQ1RSTF9GVERGX1JFRzogQ1BfQ1VSX1NFVF9GVERGX1JYIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ1BfQ1RSTF9GVERGX1JFR19DUF9DVVJfU0VUX0ZUREZfUlhfTXNrICgweGZVTCkgICAgICAgICAvKiE8IFJGQ1UgUkZfQ1BfQ1RSTF9GVERGX1JFRzogQ1BfQ1VSX1NFVF9GVERGX1JYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfRlRERl9SRUdfQ1BfQ1VSX1NFVF9GVERGX1RYX1BvcyAoNFVMKSAgICAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfRlRERl9SRUc6IENQX0NVUl9TRVRfRlRERl9UWCAoQml0IDQpICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfRlRERl9SRUdfQ1BfQ1VSX1NFVF9GVERGX1RYX01zayAoMHhmMFVMKSAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfRlRERl9SRUc6IENQX0NVUl9TRVRfRlRERl9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0ZUREZfUkVHX0NQX0NVUl9GVERGX1JYX1BvcyAoOFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0ZUREZfUkVHOiBDUF9DVVJfRlRERl9SWCAoQml0IDgpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0ZUREZfUkVHX0NQX0NVUl9GVERGX1JYX01zayAoMHhmMDBVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0ZUREZfUkVHOiBDUF9DVVJfRlRERl9SWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0ZUREZfUkVHX0NQX0NVUl9GVERGX1RYX1BvcyAoMTJVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0ZUREZfUkVHOiBDUF9DVVJfRlRERl9UWCAoQml0IDEyKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0ZUREZfUkVHX0NQX0NVUl9GVERGX1RYX01zayAoMHhmMDAwVUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0ZUREZfUkVHOiBDUF9DVVJfRlRERl9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9MRl9SRVNfQ1RSTF9CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9CTEVfUkVHX0xGX1JFU19TRVRfQkxFX1JYX1BvcyAoMFVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9CTEVfUkVHOiBMRl9SRVNfU0VUX0JMRV9SWCAoQml0IDApICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9CTEVfUkVHX0xGX1JFU19TRVRfQkxFX1JYX01zayAoMHhmVUwpICAgICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9CTEVfUkVHOiBMRl9SRVNfU0VUX0JMRV9SWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9CTEVfUkVHX0xGX1JFU19TRVRfQkxFX1RYX1BvcyAoNFVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9CTEVfUkVHOiBMRl9SRVNfU0VUX0JMRV9UWCAoQml0IDQpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9CTEVfUkVHX0xGX1JFU19TRVRfQkxFX1RYX01zayAoMHhmMFVMKSAgICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9CTEVfUkVHOiBMRl9SRVNfU0VUX0JMRV9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9CTEVfUkVHX0xGX1JFU19CTEVfUlhfUG9zICg4VUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9CTEVfUkVHOiBMRl9SRVNfQkxFX1JYIChCaXQgOCkgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9CTEVfUkVHX0xGX1JFU19CTEVfUlhfTXNrICgweGYwMFVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9CTEVfUkVHOiBMRl9SRVNfQkxFX1JYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0JMRV9SRUdfTEZfUkVTX0JMRV9UWF9Qb3MgKDEyVUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0JMRV9SRUc6IExGX1JFU19CTEVfVFggKEJpdCAxMikgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0JMRV9SRUdfTEZfUkVTX0JMRV9UWF9Nc2sgKDB4ZjAwMFVMKSAgICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0JMRV9SRUc6IExGX1JFU19CTEVfVFggKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9MRl9SRVNfQ1RSTF9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfUkVTX0NUUkxfRlRERl9SRUdfTEZfUkVTX1NFVF9GVERGX1JYX1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfTEZfUkVTX0NUUkxfRlRERl9SRUc6IExGX1JFU19TRVRfRlRERl9SWCAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfUkVTX0NUUkxfRlRERl9SRUdfTEZfUkVTX1NFVF9GVERGX1JYX01zayAoMHhmVUwpICAgICAvKiE8IFJGQ1UgUkZfTEZfUkVTX0NUUkxfRlRERl9SRUc6IExGX1JFU19TRVRfRlRERl9SWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9GVERGX1JFR19MRl9SRVNfU0VUX0ZUREZfVFhfUG9zICg0VUwpICAgICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9GVERGX1JFRzogTEZfUkVTX1NFVF9GVERGX1RYIChCaXQgNCkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9GVERGX1JFR19MRl9SRVNfU0VUX0ZUREZfVFhfTXNrICgweGYwVUwpICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9GVERGX1JFRzogTEZfUkVTX1NFVF9GVERGX1RYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0ZUREZfUkVHX0xGX1JFU19GVERGX1JYX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0ZUREZfUkVHOiBMRl9SRVNfRlRERl9SWCAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0ZUREZfUkVHX0xGX1JFU19GVERGX1JYX01zayAoMHhmMDBVTCkgICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0ZUREZfUkVHOiBMRl9SRVNfRlRERl9SWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9GVERGX1JFR19MRl9SRVNfRlRERl9UWF9Qb3MgKDEyVUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9GVERGX1JFRzogTEZfUkVTX0ZUREZfVFggKEJpdCAxMikgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9GVERGX1JFR19MRl9SRVNfRlRERl9UWF9Nc2sgKDB4ZjAwMFVMKSAgICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9GVERGX1JFRzogTEZfUkVTX0ZUREZfVFggKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfTUlYRVJfQ1RSTDFfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfTUlYRVJfQ1RSTDFfQkxFX1JFR19NSVhfVFJJTV9HTUJJQVNfQkxFX1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfTUlYRVJfQ1RSTDFfQkxFX1JFRzogTUlYX1RSSU1fR01CSUFTX0JMRSAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTUlYRVJfQ1RSTDFfQkxFX1JFR19NSVhfVFJJTV9HTUJJQVNfQkxFX01zayAoMHhmVUwpICAgICAvKiE8IFJGQ1UgUkZfTUlYRVJfQ1RSTDFfQkxFX1JFRzogTUlYX1RSSU1fR01CSUFTX0JMRSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9CTEVfUkVHX01JWF9UUklNX0lCSUFTX0JMRV9Qb3MgKDRVTCkgICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9CTEVfUkVHOiBNSVhfVFJJTV9JQklBU19CTEUgKEJpdCA0KSAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9CTEVfUkVHX01JWF9UUklNX0lCSUFTX0JMRV9Nc2sgKDB4ZjBVTCkgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9CTEVfUkVHOiBNSVhfVFJJTV9JQklBU19CTEUgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfTUlYRVJfQ1RSTDFfQkxFX1JFR19NSVhfVFJJTV9WQ01fQkxFX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IFJGQ1UgUkZfTUlYRVJfQ1RSTDFfQkxFX1JFRzogTUlYX1RSSU1fVkNNX0JMRSAoQml0IDgpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTUlYRVJfQ1RSTDFfQkxFX1JFR19NSVhfVFJJTV9WQ01fQkxFX01zayAoMHhmMDBVTCkgICAgICAvKiE8IFJGQ1UgUkZfTUlYRVJfQ1RSTDFfQkxFX1JFRzogTUlYX1RSSU1fVkNNX0JMRSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9CTEVfUkVHX01JWF9TUEFSRV9CTEVfUG9zICgxMlVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9CTEVfUkVHOiBNSVhfU1BBUkVfQkxFIChCaXQgMTIpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9CTEVfUkVHX01JWF9TUEFSRV9CTEVfTXNrICgweGYwMDBVTCkgICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9CTEVfUkVHOiBNSVhfU1BBUkVfQkxFIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwxX0ZUREZfUkVHX01JWF9UUklNX0dNQklBU19GVERGX1BvcyAoMFVMKSAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwxX0ZUREZfUkVHOiBNSVhfVFJJTV9HTUJJQVNfRlRERiAoQml0IDApICAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwxX0ZUREZfUkVHX01JWF9UUklNX0dNQklBU19GVERGX01zayAoMHhmVUwpICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwxX0ZUREZfUkVHOiBNSVhfVFJJTV9HTUJJQVNfRlRERiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9GVERGX1JFR19NSVhfVFJJTV9JQklBU19GVERGX1BvcyAoNFVMKSAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9GVERGX1JFRzogTUlYX1RSSU1fSUJJQVNfRlRERiAoQml0IDQpICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9GVERGX1JFR19NSVhfVFJJTV9JQklBU19GVERGX01zayAoMHhmMFVMKSAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9GVERGX1JFRzogTUlYX1RSSU1fSUJJQVNfRlRERiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9GVERGX1JFR19NSVhfVFJJTV9WQ01fRlRERl9Qb3MgKDhVTCkgICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9GVERGX1JFRzogTUlYX1RSSU1fVkNNX0ZUREYgKEJpdCA4KSAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9GVERGX1JFR19NSVhfVFJJTV9WQ01fRlRERl9Nc2sgKDB4ZjAwVUwpICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9GVERGX1JFRzogTUlYX1RSSU1fVkNNX0ZUREYgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUdfTUlYX1NQQVJFX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUc6IE1JWF9TUEFSRSAoQml0IDEyKSAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUdfTUlYX1NQQVJFX01zayAoMHhmMDAwVUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUc6IE1JWF9TUEFSRSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX01JWEVSX0NUUkwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMl9SRUdfTUlYX0NBTF9DQVBfV1JfQkxFX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMl9SRUc6IE1JWF9DQUxfQ0FQX1dSX0JMRSAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMl9SRUdfTUlYX0NBTF9DQVBfV1JfQkxFX01zayAoMHgxZlVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMl9SRUc6IE1JWF9DQUxfQ0FQX1dSX0JMRSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMl9SRUdfTUlYX0NBTF9TRUxFQ1RfUG9zICg1VUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMl9SRUc6IE1JWF9DQUxfU0VMRUNUIChCaXQgNSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMl9SRUdfTUlYX0NBTF9TRUxFQ1RfTXNrICgweDIwVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMl9SRUc6IE1JWF9DQUxfU0VMRUNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwyX1JFR19NSVhfQ0FMX0NBUF9XUl9GVERGX1BvcyAoNlVMKSAgICAgICAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwyX1JFRzogTUlYX0NBTF9DQVBfV1JfRlRERiAoQml0IDYpICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwyX1JFR19NSVhfQ0FMX0NBUF9XUl9GVERGX01zayAoMHg3YzBVTCkgICAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwyX1JFRzogTUlYX0NBTF9DQVBfV1JfRlRERiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfTEZfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DVFJMX1JFR19MRl9DQUxfQ0FQX1dSX0JMRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DVFJMX1JFRzogTEZfQ0FMX0NBUF9XUl9CTEUgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DVFJMX1JFR19MRl9DQUxfQ0FQX1dSX0JMRV9Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DVFJMX1JFRzogTEZfQ0FMX0NBUF9XUl9CTEUgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfQ1RSTF9SRUdfTEZfQ0FMX0NBUF9TRUxfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfQ1RSTF9SRUc6IExGX0NBTF9DQVBfU0VMIChCaXQgNSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfQ1RSTF9SRUdfTEZfQ0FMX0NBUF9TRUxfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfQ1RSTF9SRUc6IExGX0NBTF9DQVBfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfQ1RSTF9SRUdfTEZfU0hPUlRfUjRfQkxFX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfQ1RSTF9SRUc6IExGX1NIT1JUX1I0X0JMRSAoQml0IDYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfQ1RSTF9SRUdfTEZfU0hPUlRfUjRfQkxFX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfQ1RSTF9SRUc6IExGX1NIT1JUX1I0X0JMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfQ1RSTF9SRUdfTEZfU0hPUlRfUjRfRlRERl9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfQ1RSTF9SRUc6IExGX1NIT1JUX1I0X0ZUREYgKEJpdCA3KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfQ1RSTF9SRUdfTEZfU0hPUlRfUjRfRlRERl9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfQ1RSTF9SRUc6IExGX1NIT1JUX1I0X0ZUREYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfQ1RSTF9SRUdfTEZfQ0FMX0NBUF9XUl9GVERGX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfQ1RSTF9SRUc6IExGX0NBTF9DQVBfV1JfRlRERiAoQml0IDgpICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfQ1RSTF9SRUdfTEZfQ0FMX0NBUF9XUl9GVERGX01zayAoMHgxZjAwVUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfQ1RSTF9SRUc6IExGX0NBTF9DQVBfV1JfRlRERiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9URENfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfQ1RSTF9GQVNUX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IENUUkxfRkFTVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfQ1RSTF9GQVNUX01zayAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IENUUkxfRkFTVCAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfQ1RSTF9TTE9XX1BvcyAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IENUUkxfU0xPVyAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfQ1RSTF9TTE9XX01zayAgICAoMHhmMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IENUUkxfU0xPVyAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfQ0FMX1BIXzFfUG9zICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IENBTF9QSF8xIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfQ0FMX1BIXzFfTXNrICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IENBTF9QSF8xIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfQ0FMX1BIXzJfUG9zICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IENBTF9QSF8yIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfQ0FMX1BIXzJfTXNrICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IENBTF9QSF8yIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfUkVGX0NUUkxfUG9zICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IFJFRl9DVFJMIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfUkVGX0NUUkxfTXNrICAgICAoMHhjMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IFJFRl9DVFJMIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfVERDX0NPTk5FQ1RfUG9zICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IFREQ19DT05ORUNUIChCaXQgMTIpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9URENfQ1RSTF9SRUdfVERDX0NPTk5FQ1RfTXNrICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9URENfQ1RSTF9SRUc6IFREQ19DT05ORUNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9JT19DVFJMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9JT19DVFJMMV9SRUdfUkZJT19UUklNMV9DQVBfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JT19DVFJMMV9SRUc6IFJGSU9fVFJJTTFfQ0FQIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JT19DVFJMMV9SRUdfUkZJT19UUklNMV9DQVBfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JT19DVFJMMV9SRUc6IFJGSU9fVFJJTTFfQ0FQIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9MTkFfQ1RSTDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9MTkFfQ1RSTDFfUkVHX0xOQV9UUklNX0NEX0xGX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MTkFfQ1RSTDFfUkVHOiBMTkFfVFJJTV9DRF9MRiAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MTkFfQ1RSTDFfUkVHX0xOQV9UUklNX0NEX0xGX01zayAoMHgzZlVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MTkFfQ1RSTDFfUkVHOiBMTkFfVFJJTV9DRF9MRiAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9MTkFfQ1RSTDFfUkVHX0xOQV9UUklNX0NEX0hGX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MTkFfQ1RSTDFfUkVHOiBMTkFfVFJJTV9DRF9IRiAoQml0IDYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MTkFfQ1RSTDFfUkVHX0xOQV9UUklNX0NEX0hGX01zayAoMHhmYzBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MTkFfQ1RSTDFfUkVHOiBMTkFfVFJJTV9DRF9IRiAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9MTkFfQ1RSTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9MTkFfQ1RSTDJfUkVHX0xOQV9UUklNX0dNX0hJX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MTkFfQ1RSTDJfUkVHOiBMTkFfVFJJTV9HTV9ISSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MTkFfQ1RSTDJfUkVHX0xOQV9UUklNX0dNX0hJX01zayAoMHgzZlVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MTkFfQ1RSTDJfUkVHOiBMTkFfVFJJTV9HTV9ISSAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9MTkFfQ1RSTDJfUkVHX0xOQV9UUklNX0dNX0xPX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MTkFfQ1RSTDJfUkVHOiBMTkFfVFJJTV9HTV9MTyAoQml0IDYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MTkFfQ1RSTDJfUkVHX0xOQV9UUklNX0dNX0xPX01zayAoMHhmYzBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MTkFfQ1RSTDJfUkVHOiBMTkFfVFJJTV9HTV9MTyAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9MTkFfQ1RSTDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9MTkFfQ1RSTDNfUkVHX0xOQV9UUklNX0NHU19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MTkFfQ1RSTDNfUkVHOiBMTkFfVFJJTV9DR1MgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MTkFfQ1RSTDNfUkVHX0xOQV9UUklNX0NHU19Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MTkFfQ1RSTDNfUkVHOiBMTkFfVFJJTV9DR1MgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfVkNPX0FNUF9DVFJMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09fQU1QX0NUUkwxX1JFR19WQ09fQU1QTF9NT0RFX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09fQU1QX0NUUkwxX1JFRzogVkNPX0FNUExfTU9ERSAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09fQU1QX0NUUkwxX1JFR19WQ09fQU1QTF9NT0RFX01zayAoMHg3ZlVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09fQU1QX0NUUkwxX1JFRzogVkNPX0FNUExfTU9ERSAoQml0ZmllbGQtTWFzazogMHg3ZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfVkNPX0FNUF9DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09fQU1QX0NUUkwyX1JFR19WQ09fQU1QTF9TRVRfVFhfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09fQU1QX0NUUkwyX1JFRzogVkNPX0FNUExfU0VUX1RYIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09fQU1QX0NUUkwyX1JFR19WQ09fQU1QTF9TRVRfVFhfTXNrICgweGZmVUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09fQU1QX0NUUkwyX1JFRzogVkNPX0FNUExfU0VUX1RYIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1JGX1ZDT19BTVBfQ1RSTDJfUkVHX1ZDT19BTVBMX1NFVF9SWF9Qb3MgKDhVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1ZDT19BTVBfQ1RSTDJfUkVHOiBWQ09fQU1QTF9TRVRfUlggKEJpdCA4KSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1ZDT19BTVBfQ1RSTDJfUkVHX1ZDT19BTVBMX1NFVF9SWF9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgLyohPCBSRkNVIFJGX1ZDT19BTVBfQ1RSTDJfUkVHOiBWQ09fQU1QTF9TRVRfUlggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9UWF9QV1JfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0JMRV9SRUdfVFhfUE9XRVJfU0VUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0JMRV9SRUc6IFRYX1BPV0VSX1NFVCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0JMRV9SRUdfVFhfUE9XRVJfU0VUX01zayAoMHg3VUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0JMRV9SRUc6IFRYX1BPV0VSX1NFVCAoQml0ZmllbGQtTWFzazogMHgwNykgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1RYX1BXUl9MVVRfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8xX1JFR19UWF9QV1JfUkZfSU9fQ1RSTDFfUkVHX1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8xX1JFRzogVFhfUFdSX1JGX0lPX0NUUkwxX1JFRyAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8xX1JFR19UWF9QV1JfUkZfSU9fQ1RSTDFfUkVHX01zayAoMHgzVUwpICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8xX1JFRzogVFhfUFdSX1JGX0lPX0NUUkwxX1JFRyAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzFfUkVHX1RYX1BXUl9SRl9QQV9DVFJMX1JFR19Qb3MgKDJVTCkgICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzFfUkVHOiBUWF9QV1JfUkZfUEFfQ1RSTF9SRUcgKEJpdCAyKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzFfUkVHX1RYX1BXUl9SRl9QQV9DVFJMX1JFR19Nc2sgKDB4M2NVTCkgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzFfUkVHOiBUWF9QV1JfUkZfUEFfQ1RSTF9SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8xX1JFR19UWF9QV1JfUkZfTE5BX0NUUkwzX1JFR19Qb3MgKDZVTCkgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8xX1JFRzogVFhfUFdSX1JGX0xOQV9DVFJMM19SRUcgKEJpdCA2KSAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8xX1JFR19UWF9QV1JfUkZfTE5BX0NUUkwzX1JFR19Nc2sgKDB4N2MwVUwpICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8xX1JFRzogVFhfUFdSX1JGX0xOQV9DVFJMM19SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8xX1JFR19UWF9QV1JfUkZJT19UWFJYX0RDRl9ESVNfUG9zICgxMVVMKSAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8xX1JFRzogVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTIChCaXQgMTEpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8xX1JFR19UWF9QV1JfUkZJT19UWFJYX0RDRl9ESVNfTXNrICgweDgwMFVMKSAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8xX1JFRzogVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9UWF9QV1JfTFVUXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfMl9SRUdfVFhfUFdSX1JGX0lPX0NUUkwxX1JFR19Qb3MgKDBVTCkgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfMl9SRUc6IFRYX1BXUl9SRl9JT19DVFJMMV9SRUcgKEJpdCAwKSAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfMl9SRUdfVFhfUFdSX1JGX0lPX0NUUkwxX1JFR19Nc2sgKDB4M1VMKSAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfMl9SRUc6IFRYX1BXUl9SRl9JT19DVFJMMV9SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8yX1JFR19UWF9QV1JfUkZfUEFfQ1RSTF9SRUdfUG9zICgyVUwpICAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8yX1JFRzogVFhfUFdSX1JGX1BBX0NUUkxfUkVHIChCaXQgMikgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8yX1JFR19UWF9QV1JfUkZfUEFfQ1RSTF9SRUdfTXNrICgweDNjVUwpICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8yX1JFRzogVFhfUFdSX1JGX1BBX0NUUkxfUkVHIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfMl9SRUdfVFhfUFdSX1JGX0xOQV9DVFJMM19SRUdfUG9zICg2VUwpICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfMl9SRUc6IFRYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHIChCaXQgNikgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfMl9SRUdfVFhfUFdSX1JGX0xOQV9DVFJMM19SRUdfTXNrICgweDdjMFVMKSAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfMl9SRUc6IFRYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfMl9SRUdfVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTX1BvcyAoMTFVTCkgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfMl9SRUc6IFRYX1BXUl9SRklPX1RYUlhfRENGX0RJUyAoQml0IDExKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfMl9SRUdfVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTX01zayAoMHg4MDBVTCkgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfMl9SRUc6IFRYX1BXUl9SRklPX1RYUlhfRENGX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfVFhfUFdSX0xVVF8zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzNfUkVHX1RYX1BXUl9SRl9JT19DVFJMMV9SRUdfUG9zICgwVUwpICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzNfUkVHOiBUWF9QV1JfUkZfSU9fQ1RSTDFfUkVHIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzNfUkVHX1RYX1BXUl9SRl9JT19DVFJMMV9SRUdfTXNrICgweDNVTCkgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzNfUkVHOiBUWF9QV1JfUkZfSU9fQ1RSTDFfUkVHIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfM19SRUdfVFhfUFdSX1JGX1BBX0NUUkxfUkVHX1BvcyAoMlVMKSAgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfM19SRUc6IFRYX1BXUl9SRl9QQV9DVFJMX1JFRyAoQml0IDIpICAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfM19SRUdfVFhfUFdSX1JGX1BBX0NUUkxfUkVHX01zayAoMHgzY1VMKSAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfM19SRUc6IFRYX1BXUl9SRl9QQV9DVFJMX1JFRyAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzNfUkVHX1RYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHX1BvcyAoNlVMKSAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzNfUkVHOiBUWF9QV1JfUkZfTE5BX0NUUkwzX1JFRyAoQml0IDYpICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzNfUkVHX1RYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHX01zayAoMHg3YzBVTCkgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzNfUkVHOiBUWF9QV1JfUkZfTE5BX0NUUkwzX1JFRyAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzNfUkVHX1RYX1BXUl9SRklPX1RYUlhfRENGX0RJU19Qb3MgKDExVUwpICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzNfUkVHOiBUWF9QV1JfUkZJT19UWFJYX0RDRl9ESVMgKEJpdCAxMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzNfUkVHX1RYX1BXUl9SRklPX1RYUlhfRENGX0RJU19Nc2sgKDB4ODAwVUwpIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzNfUkVHOiBUWF9QV1JfUkZJT19UWFJYX0RDRl9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1RYX1BXUl9MVVRfNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF80X1JFR19UWF9QV1JfUkZfSU9fQ1RSTDFfUkVHX1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF80X1JFRzogVFhfUFdSX1JGX0lPX0NUUkwxX1JFRyAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF80X1JFR19UWF9QV1JfUkZfSU9fQ1RSTDFfUkVHX01zayAoMHgzVUwpICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF80X1JFRzogVFhfUFdSX1JGX0lPX0NUUkwxX1JFRyAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzRfUkVHX1RYX1BXUl9SRl9QQV9DVFJMX1JFR19Qb3MgKDJVTCkgICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzRfUkVHOiBUWF9QV1JfUkZfUEFfQ1RSTF9SRUcgKEJpdCAyKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzRfUkVHX1RYX1BXUl9SRl9QQV9DVFJMX1JFR19Nc2sgKDB4M2NVTCkgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzRfUkVHOiBUWF9QV1JfUkZfUEFfQ1RSTF9SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF80X1JFR19UWF9QV1JfUkZfTE5BX0NUUkwzX1JFR19Qb3MgKDZVTCkgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF80X1JFRzogVFhfUFdSX1JGX0xOQV9DVFJMM19SRUcgKEJpdCA2KSAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF80X1JFR19UWF9QV1JfUkZfTE5BX0NUUkwzX1JFR19Nc2sgKDB4N2MwVUwpICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF80X1JFRzogVFhfUFdSX1JGX0xOQV9DVFJMM19SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF80X1JFR19UWF9QV1JfUkZJT19UWFJYX0RDRl9ESVNfUG9zICgxMVVMKSAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF80X1JFRzogVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTIChCaXQgMTEpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF80X1JFR19UWF9QV1JfUkZJT19UWFJYX0RDRl9ESVNfTXNrICgweDgwMFVMKSAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF80X1JFRzogVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9UWF9QV1JfTFVUXzVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNV9SRUdfVFhfUFdSX1JGX0lPX0NUUkwxX1JFR19Qb3MgKDBVTCkgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNV9SRUc6IFRYX1BXUl9SRl9JT19DVFJMMV9SRUcgKEJpdCAwKSAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNV9SRUdfVFhfUFdSX1JGX0lPX0NUUkwxX1JFR19Nc2sgKDB4M1VMKSAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNV9SRUc6IFRYX1BXUl9SRl9JT19DVFJMMV9SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF81X1JFR19UWF9QV1JfUkZfUEFfQ1RSTF9SRUdfUG9zICgyVUwpICAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF81X1JFRzogVFhfUFdSX1JGX1BBX0NUUkxfUkVHIChCaXQgMikgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF81X1JFR19UWF9QV1JfUkZfUEFfQ1RSTF9SRUdfTXNrICgweDNjVUwpICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF81X1JFRzogVFhfUFdSX1JGX1BBX0NUUkxfUkVHIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNV9SRUdfVFhfUFdSX1JGX0xOQV9DVFJMM19SRUdfUG9zICg2VUwpICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNV9SRUc6IFRYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHIChCaXQgNikgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNV9SRUdfVFhfUFdSX1JGX0xOQV9DVFJMM19SRUdfTXNrICgweDdjMFVMKSAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNV9SRUc6IFRYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNV9SRUdfVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTX1BvcyAoMTFVTCkgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNV9SRUc6IFRYX1BXUl9SRklPX1RYUlhfRENGX0RJUyAoQml0IDExKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNV9SRUdfVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTX01zayAoMHg4MDBVTCkgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNV9SRUc6IFRYX1BXUl9SRklPX1RYUlhfRENGX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfVFhfUFdSX0xVVF82X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzZfUkVHX1RYX1BXUl9SRl9JT19DVFJMMV9SRUdfUG9zICgwVUwpICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzZfUkVHOiBUWF9QV1JfUkZfSU9fQ1RSTDFfUkVHIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzZfUkVHX1RYX1BXUl9SRl9JT19DVFJMMV9SRUdfTXNrICgweDNVTCkgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzZfUkVHOiBUWF9QV1JfUkZfSU9fQ1RSTDFfUkVHIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNl9SRUdfVFhfUFdSX1JGX1BBX0NUUkxfUkVHX1BvcyAoMlVMKSAgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNl9SRUc6IFRYX1BXUl9SRl9QQV9DVFJMX1JFRyAoQml0IDIpICAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNl9SRUdfVFhfUFdSX1JGX1BBX0NUUkxfUkVHX01zayAoMHgzY1VMKSAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNl9SRUc6IFRYX1BXUl9SRl9QQV9DVFJMX1JFRyAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzZfUkVHX1RYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHX1BvcyAoNlVMKSAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzZfUkVHOiBUWF9QV1JfUkZfTE5BX0NUUkwzX1JFRyAoQml0IDYpICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzZfUkVHX1RYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHX01zayAoMHg3YzBVTCkgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzZfUkVHOiBUWF9QV1JfUkZfTE5BX0NUUkwzX1JFRyAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzZfUkVHX1RYX1BXUl9SRklPX1RYUlhfRENGX0RJU19Qb3MgKDExVUwpICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzZfUkVHOiBUWF9QV1JfUkZJT19UWFJYX0RDRl9ESVMgKEJpdCAxMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzZfUkVHX1RYX1BXUl9SRklPX1RYUlhfRENGX0RJU19Nc2sgKDB4ODAwVUwpIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzZfUkVHOiBUWF9QV1JfUkZJT19UWFJYX0RDRl9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1RYX1BXUl9MVVRfN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF83X1JFR19UWF9QV1JfUkZfSU9fQ1RSTDFfUkVHX1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF83X1JFRzogVFhfUFdSX1JGX0lPX0NUUkwxX1JFRyAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF83X1JFR19UWF9QV1JfUkZfSU9fQ1RSTDFfUkVHX01zayAoMHgzVUwpICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF83X1JFRzogVFhfUFdSX1JGX0lPX0NUUkwxX1JFRyAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzdfUkVHX1RYX1BXUl9SRl9QQV9DVFJMX1JFR19Qb3MgKDJVTCkgICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzdfUkVHOiBUWF9QV1JfUkZfUEFfQ1RSTF9SRUcgKEJpdCAyKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzdfUkVHX1RYX1BXUl9SRl9QQV9DVFJMX1JFR19Nc2sgKDB4M2NVTCkgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzdfUkVHOiBUWF9QV1JfUkZfUEFfQ1RSTF9SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF83X1JFR19UWF9QV1JfUkZfTE5BX0NUUkwzX1JFR19Qb3MgKDZVTCkgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF83X1JFRzogVFhfUFdSX1JGX0xOQV9DVFJMM19SRUcgKEJpdCA2KSAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF83X1JFR19UWF9QV1JfUkZfTE5BX0NUUkwzX1JFR19Nc2sgKDB4N2MwVUwpICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF83X1JFRzogVFhfUFdSX1JGX0xOQV9DVFJMM19SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF83X1JFR19UWF9QV1JfUkZJT19UWFJYX0RDRl9ESVNfUG9zICgxMVVMKSAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF83X1JFRzogVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTIChCaXQgMTEpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF83X1JFR19UWF9QV1JfUkZJT19UWFJYX0RDRl9ESVNfTXNrICgweDgwMFVMKSAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF83X1JFRzogVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfVFhfUFdSX0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9GVERGX1JFR19UWF9QT1dFUl9TRVRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9GVERGX1JFRzogVFhfUE9XRVJfU0VUIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9GVERGX1JFR19UWF9QT1dFUl9TRVRfTXNrICgweDdVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9GVERGX1JFRzogVFhfUE9XRVJfU0VUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9UWF9QV1JfTFVUX1JEX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfUkRfUkVHX1JGX1RYX1BXUl9MVVRfUkRfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfUkRfUkVHOiBSRl9UWF9QV1JfTFVUX1JEIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfUkRfUkVHX1JGX1RYX1BXUl9MVVRfUkRfTXNrICgweGZmZlVMKSAgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfUkRfUkVHOiBSRl9UWF9QV1JfTFVUX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9ESVZfSVFfUlhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfUlhfUkVHX0RJVjJfT0ZGTl9UUklNX1JYX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfUlhfUkVHOiBESVYyX09GRk5fVFJJTV9SWCAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfUlhfUkVHX0RJVjJfT0ZGTl9UUklNX1JYX01zayAoMHhmVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfUlhfUkVHOiBESVYyX09GRk5fVFJJTV9SWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfUlhfUkVHX0RJVjJfT0ZGUF9UUklNX1JYX1BvcyAoNFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfUlhfUkVHOiBESVYyX09GRlBfVFJJTV9SWCAoQml0IDQpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfUlhfUkVHX0RJVjJfT0ZGUF9UUklNX1JYX01zayAoMHhmMFVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfUlhfUkVHOiBESVYyX09GRlBfVFJJTV9SWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfUlhfUkVHX0RJVjJfSVFfVFJJTV9SWF9TUEFSRV9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfUlhfUkVHOiBESVYyX0lRX1RSSU1fUlhfU1BBUkUgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfUlhfUkVHX0RJVjJfSVFfVFJJTV9SWF9TUEFSRV9Nc2sgKDB4MTAwVUwpICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfUlhfUkVHOiBESVYyX0lRX1RSSU1fUlhfU1BBUkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfRElWX0lRX1RYX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfRElWX0lRX1RYX1JFR19ESVYyX09GRk5fVFJJTV9UWF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElWX0lRX1RYX1JFRzogRElWMl9PRkZOX1RSSU1fVFggKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElWX0lRX1RYX1JFR19ESVYyX09GRk5fVFJJTV9UWF9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElWX0lRX1RYX1JFRzogRElWMl9PRkZOX1RSSU1fVFggKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfRElWX0lRX1RYX1JFR19ESVYyX09GRlBfVFJJTV9UWF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElWX0lRX1RYX1JFRzogRElWMl9PRkZQX1RSSU1fVFggKEJpdCA0KSAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElWX0lRX1RYX1JFR19ESVYyX09GRlBfVFJJTV9UWF9Nc2sgKDB4ZjBVTCkgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElWX0lRX1RYX1JFRzogRElWMl9PRkZQX1RSSU1fVFggKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfRElWX0lRX1RYX1JFR19ESVYyX0lRX1RSSU1fVFhfU1BBUkVfUG9zICg4VUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfRElWX0lRX1RYX1JFRzogRElWMl9JUV9UUklNX1RYX1NQQVJFIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfRElWX0lRX1RYX1JFR19ESVYyX0lRX1RSSU1fVFhfU1BBUkVfTXNrICgweDEwMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfRElWX0lRX1RYX1JFRzogRElWMl9JUV9UUklNX1RYX1NQQVJFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfTE9fSVFfVFJJTV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0xPX0lRX1RSSU1fUkVHX1JGX0xPX0lRX1RSSU1fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xPX0lRX1RSSU1fUkVHOiBSRl9MT19JUV9UUklNIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xPX0lRX1RSSU1fUkVHX1JGX0xPX0lRX1RSSU1fTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xPX0lRX1RSSU1fUkVHOiBSRl9MT19JUV9UUklNIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9UWERBQ19DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfVFhEQUNfQ1RSTF9SRUdfVFhEQUNfQ0FMX0NBUF9XUl9CTEVfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVFhEQUNfQ1RSTF9SRUc6IFRYREFDX0NBTF9DQVBfV1JfQkxFIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhEQUNfQ1RSTF9SRUdfVFhEQUNfQ0FMX0NBUF9XUl9CTEVfTXNrICgweDFmVUwpICAgICAgICAvKiE8IFJGQ1UgUkZfVFhEQUNfQ1RSTF9SRUc6IFRYREFDX0NBTF9DQVBfV1JfQkxFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1JGX1RYREFDX0NUUkxfUkVHX1RYREFDX0NBTF9DQVBfU0VMX1BvcyAoNVVMKSAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1RYREFDX0NUUkxfUkVHOiBUWERBQ19DQUxfQ0FQX1NFTCAoQml0IDUpICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYREFDX0NUUkxfUkVHX1RYREFDX0NBTF9DQVBfU0VMX01zayAoMHgyMFVMKSAgICAgICAgICAgLyohPCBSRkNVIFJGX1RYREFDX0NUUkxfUkVHOiBUWERBQ19DQUxfQ0FQX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWERBQ19DVFJMX1JFR19UWERBQ19GSVhFRF9DQVBfT05fUG9zICg2VUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9UWERBQ19DVFJMX1JFRzogVFhEQUNfRklYRURfQ0FQX09OIChCaXQgNikgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWERBQ19DVFJMX1JFR19UWERBQ19GSVhFRF9DQVBfT05fTXNrICgweDQwVUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9UWERBQ19DVFJMX1JFRzogVFhEQUNfRklYRURfQ0FQX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1JGX1RYREFDX0NUUkxfUkVHX1RYREFDX0NBTF9DQVBfV1JfRlRERl9Qb3MgKDdVTCkgICAgICAgICAgLyohPCBSRkNVIFJGX1RYREFDX0NUUkxfUkVHOiBUWERBQ19DQUxfQ0FQX1dSX0ZUREYgKEJpdCA3KSAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYREFDX0NUUkxfUkVHX1RYREFDX0NBTF9DQVBfV1JfRlRERl9Nc2sgKDB4ZjgwVUwpICAgICAgLyohPCBSRkNVIFJGX1RYREFDX0NUUkxfUkVHOiBUWERBQ19DQUxfQ0FQX1dSX0ZUREYgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1RYREFDX0NBTF9DQVBfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfVFhEQUNfQ0FMX0NBUF9TVEFUX1JFR19UWERBQ19DQUxfQ0FQX1JEX1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfVFhEQUNfQ0FMX0NBUF9TVEFUX1JFRzogVFhEQUNfQ0FMX0NBUF9SRCAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhEQUNfQ0FMX0NBUF9TVEFUX1JFR19UWERBQ19DQUxfQ0FQX1JEX01zayAoMHgxZlVMKSAgICAvKiE8IFJGQ1UgUkZfVFhEQUNfQ0FMX0NBUF9TVEFUX1JFRzogVFhEQUNfQ0FMX0NBUF9SRCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWERBQ19DQUxfQ0FQX1NUQVRfUkVHX1RYREFDX0ZJWEVEX0NBUF9PTl9SRF9Qb3MgKDVVTCkgIC8qITwgUkZDVSBSRl9UWERBQ19DQUxfQ0FQX1NUQVRfUkVHOiBUWERBQ19GSVhFRF9DQVBfT05fUkQgKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1JGX1RYREFDX0NBTF9DQVBfU1RBVF9SRUdfVFhEQUNfRklYRURfQ0FQX09OX1JEX01zayAoMHgyMFVMKSAvKiE8IFJGQ1UgUkZfVFhEQUNfQ0FMX0NBUF9TVEFUX1JFRzogVFhEQUNfRklYRURfQ0FQX09OX1JEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfSUZGX1JFU1VMVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9SRVNVTFRfUkVHX0lGX0NBTF9DQVBfUkRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9SRVNVTFRfUkVHOiBJRl9DQUxfQ0FQX1JEIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9SRVNVTFRfUkVHX0lGX0NBTF9DQVBfUkRfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9SRVNVTFRfUkVHOiBJRl9DQUxfQ0FQX1JEIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0lGRl9DQ19CTEVfU0VUMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DQ19CTEVfU0VUMV9SRUdfSUZfQ0FMX0NBUF9XUl9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DQ19CTEVfU0VUMV9SRUc6IElGX0NBTF9DQVBfV1IgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DQ19CTEVfU0VUMV9SRUdfSUZfQ0FMX0NBUF9XUl9Nc2sgKDB4MWZVTCkgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DQ19CTEVfU0VUMV9SRUc6IElGX0NBTF9DQVBfV1IgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfSUZGX0NDX0JMRV9TRVQyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NDX0JMRV9TRVQyX1JFR19JRl9DQUxfQ0FQX1dSX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NDX0JMRV9TRVQyX1JFRzogSUZfQ0FMX0NBUF9XUiAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NDX0JMRV9TRVQyX1JFR19JRl9DQUxfQ0FQX1dSX01zayAoMHgxZlVMKSAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NDX0JMRV9TRVQyX1JFRzogSUZfQ0FMX0NBUF9XUiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0lGRl9DQ19GVERGX1NFVDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ0NfRlRERl9TRVQxX1JFR19JRl9DQUxfQ0FQX1dSX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ0NfRlRERl9TRVQxX1JFRzogSUZfQ0FMX0NBUF9XUiAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ0NfRlRERl9TRVQxX1JFR19JRl9DQUxfQ0FQX1dSX01zayAoMHgxZlVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ0NfRlRERl9TRVQxX1JFRzogSUZfQ0FMX0NBUF9XUiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0lGRl9DQ19GVERGX1NFVDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ0NfRlRERl9TRVQyX1JFR19JRl9DQUxfQ0FQX1dSX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ0NfRlRERl9TRVQyX1JFRzogSUZfQ0FMX0NBUF9XUiAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ0NfRlRERl9TRVQyX1JFR19JRl9DQUxfQ0FQX1dSX01zayAoMHgxZlVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ0NfRlRERl9TRVQyX1JFRzogSUZfQ0FMX0NBUF9XUiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0lGRl9DQUxfQ0FQX1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ0FMX0NBUF9TVEFUX1JFR19JRl9DQUxfQ0FQX1JEX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ0FMX0NBUF9TVEFUX1JFRzogSUZfQ0FMX0NBUF9SRCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ0FMX0NBUF9TVEFUX1JFR19JRl9DQUxfQ0FQX1JEX01zayAoMHgxZlVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ0FMX0NBUF9TVEFUX1JFRzogSUZfQ0FMX0NBUF9SRCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX01JWF9DQUxfQ0FQX1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhfQ0FMX0NBUF9TVEFUX1JFR19NSVhfQ0FMX0NBUF9SRF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9NSVhfQ0FMX0NBUF9TVEFUX1JFRzogTUlYX0NBTF9DQVBfUkQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhfQ0FMX0NBUF9TVEFUX1JFR19NSVhfQ0FMX0NBUF9SRF9Nc2sgKDB4MWZVTCkgICAgICAgIC8qITwgUkZDVSBSRl9NSVhfQ0FMX0NBUF9TVEFUX1JFRzogTUlYX0NBTF9DQVBfUkQgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfTEZfQ0FMX0NBUF9TVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfQ0FMX0NBUF9TVEFUX1JFR19MRl9DQUxfQ0FQX1JEX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfQ0FMX0NBUF9TVEFUX1JFRzogTEZfQ0FMX0NBUF9SRCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfQ0FMX0NBUF9TVEFUX1JFR19MRl9DQUxfQ0FQX1JEX01zayAoMHgxZlVMKSAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfQ0FMX0NBUF9TVEFUX1JFRzogTEZfQ0FMX0NBUF9SRCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DQUxfQ0FQX1NUQVRfUkVHX0xGX1NIT1JUX1I0X1JEX1BvcyAoNVVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DQUxfQ0FQX1NUQVRfUkVHOiBMRl9TSE9SVF9SNF9SRCAoQml0IDUpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DQUxfQ0FQX1NUQVRfUkVHX0xGX1NIT1JUX1I0X1JEX01zayAoMHgyMFVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DQUxfQ0FQX1NUQVRfUkVHOiBMRl9TSE9SVF9SNF9SRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICBzdHJ1Y3QgJ1JGQ1VfUE9XRVInIFBvc2l0aW9uICYgTWFzayAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMF9SRUdfbG5hX2xkb19lbl9kY2ZfcnhfUG9zICgwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMF9SRUc6IGxuYV9sZG9fZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMF9SRUdfbG5hX2xkb19lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMF9SRUc6IGxuYV9sZG9fZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcwX1JFR19sbmFfbGRvX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcwX1JFRzogbG5hX2xkb19lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcwX1JFR19sbmFfbGRvX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMF9SRUc6IGxuYV9sZG9fZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxX1JFR19sbmFfY29yZV9lbl9kY2ZfcnhfUG9zICgwVUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxX1JFRzogbG5hX2NvcmVfZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMV9SRUdfbG5hX2NvcmVfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzFfUkVHOiBsbmFfY29yZV9lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzFfUkVHX2xuYV9jb3JlX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzFfUkVHOiBsbmFfY29yZV9lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxX1JFR19sbmFfY29yZV9lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzFfUkVHOiBsbmFfY29yZV9lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzJfUkVHX2xuYV9jZ21fZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzJfUkVHOiBsbmFfY2dtX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzJfUkVHX2xuYV9jZ21fZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzJfUkVHOiBsbmFfY2dtX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMl9SRUdfbG5hX2NnbV9lbl9kY2ZfdHhfUG9zICg1VUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMl9SRUc6IGxuYV9jZ21fZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMl9SRUdfbG5hX2NnbV9lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzJfUkVHOiBsbmFfY2dtX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHM19SRUdfbWl4X2xkb19lbl9kY2ZfcnhfUG9zICgwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHM19SRUc6IG1peF9sZG9fZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHM19SRUdfbWl4X2xkb19lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHM19SRUc6IG1peF9sZG9fZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczX1JFR19taXhfbGRvX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczX1JFRzogbWl4X2xkb19lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczX1JFR19taXhfbGRvX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHM19SRUc6IG1peF9sZG9fZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0X1JFR19pZmZfbGRvX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0X1JFRzogaWZmX2xkb19lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0X1JFR19pZmZfbGRvX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0X1JFRzogaWZmX2xkb19lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzRfUkVHX2lmZl9sZG9fZW5fZGNmX3R4X1BvcyAoNVVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzRfUkVHOiBpZmZfbGRvX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzRfUkVHX2lmZl9sZG9fZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0X1JFRzogaWZmX2xkb19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzVfUkVHX2lmZmFkY19sZG9fZW5fZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzVfUkVHOiBpZmZhZGNfbGRvX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzVfUkVHX2lmZmFkY19sZG9fZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzVfUkVHOiBpZmZhZGNfbGRvX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNV9SRUdfaWZmYWRjX2xkb19lbl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNV9SRUc6IGlmZmFkY19sZG9fZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNV9SRUdfaWZmYWRjX2xkb19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzVfUkVHOiBpZmZhZGNfbGRvX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNl9SRUdfdmNvX2xkb19lbl9kY2ZfcnhfUG9zICgwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNl9SRUc6IHZjb19sZG9fZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNl9SRUdfdmNvX2xkb19lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNl9SRUc6IHZjb19sZG9fZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc2X1JFR192Y29fbGRvX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc2X1JFRzogdmNvX2xkb19lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc2X1JFR192Y29fbGRvX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNl9SRUc6IHZjb19sZG9fZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc3X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc3X1JFR19tZF9sZG9fZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc3X1JFRzogbWRfbGRvX2VuX2RjZl9yeCAoQml0IDApICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc3X1JFR19tZF9sZG9fZW5fZGNmX3J4X01zayAoMHgxZlVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc3X1JFRzogbWRfbGRvX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHN19SRUdfbWRfbGRvX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHN19SRUc6IG1kX2xkb19lbl9kY2ZfdHggKEJpdCA1KSAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHN19SRUdfbWRfbGRvX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHN19SRUc6IG1kX2xkb19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzhfUkVHX3BmZF9sZG9fZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzhfUkVHOiBwZmRfbGRvX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzhfUkVHX3BmZF9sZG9fZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzhfUkVHOiBwZmRfbGRvX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHOF9SRUdfcGZkX2xkb19lbl9kY2ZfdHhfUG9zICg1VUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHOF9SRUc6IHBmZF9sZG9fZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHOF9SRUdfcGZkX2xkb19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzhfUkVHOiBwZmRfbGRvX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHOV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHOV9SRUdfcGFfbGRvX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHOV9SRUc6IHBhX2xkb19lbl9kY2ZfcnggKEJpdCAwKSAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHOV9SRUdfcGFfbGRvX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHOV9SRUc6IHBhX2xkb19lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzlfUkVHX3BhX2xkb19lbl9kY2ZfdHhfUG9zICg1VUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzlfUkVHOiBwYV9sZG9fZW5fZGNmX3R4IChCaXQgNSkgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzlfUkVHX3BhX2xkb19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzlfUkVHOiBwYV9sZG9fZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxMF9SRUdfY3Bfc3dpdGNoX2VuX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxMF9SRUc6IGNwX3N3aXRjaF9lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxMF9SRUdfY3Bfc3dpdGNoX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxMF9SRUc6IGNwX3N3aXRjaF9lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEwX1JFR19jcF9zd2l0Y2hfZW5fZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzEwX1JFRzogY3Bfc3dpdGNoX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEwX1JFR19jcF9zd2l0Y2hfZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxMF9SRUc6IGNwX3N3aXRjaF9lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzExX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzExX1JFR192Y29fYmlhc19lbl9kY2ZfcnhfUG9zICgwVUwpICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzExX1JFRzogdmNvX2JpYXNfZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTFfUkVHX3Zjb19iaWFzX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxMV9SRUc6IHZjb19iaWFzX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTFfUkVHX3Zjb19iaWFzX2VuX2RjZl90eF9Qb3MgKDVVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTFfUkVHOiB2Y29fYmlhc19lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxMV9SRUdfdmNvX2JpYXNfZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxMV9SRUc6IHZjb19iaWFzX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTJfUkVHX2NwX2JpYXNfZW5fZGNmX3J4X1BvcyAoMFVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTJfUkVHOiBjcF9iaWFzX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEyX1JFR19jcF9iaWFzX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxMl9SRUc6IGNwX2JpYXNfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxMl9SRUdfY3BfYmlhc19lbl9kY2ZfdHhfUG9zICg1VUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxMl9SRUc6IGNwX2JpYXNfZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTJfUkVHX2NwX2JpYXNfZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxMl9SRUc6IGNwX2JpYXNfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxM19SRUdfbG5hX2xkb196ZXJvX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxM19SRUc6IGxuYV9sZG9femVyb19kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxM19SRUdfbG5hX2xkb196ZXJvX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxM19SRUc6IGxuYV9sZG9femVyb19kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEzX1JFR19sbmFfbGRvX3plcm9fZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzEzX1JFRzogbG5hX2xkb196ZXJvX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEzX1JFR19sbmFfbGRvX3plcm9fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxM19SRUc6IGxuYV9sZG9femVyb19kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE0X1JFR19wYV9yYW1wX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE0X1JFRzogcGFfcmFtcF9lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxNF9SRUdfcGFfcmFtcF9lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTRfUkVHOiBwYV9yYW1wX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTRfUkVHX3BhX3JhbXBfZW5fZGNmX3R4X1BvcyAoNVVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTRfUkVHOiBwYV9yYW1wX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE0X1JFR19wYV9yYW1wX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTRfUkVHOiBwYV9yYW1wX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTVfUkVHX3BhX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTVfUkVHOiBwYV9lbl9kY2ZfcnggKEJpdCAwKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTVfUkVHX3BhX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTVfUkVHOiBwYV9lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE1X1JFR19wYV9lbl9kY2ZfdHhfUG9zICg1VUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE1X1JFRzogcGFfZW5fZGNmX3R4IChCaXQgNSkgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE1X1JFR19wYV9lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE1X1JFRzogcGFfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxNl9SRUdfbWl4X2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxNl9SRUc6IG1peF9lbl9kY2ZfcnggKEJpdCAwKSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxNl9SRUdfbWl4X2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxNl9SRUc6IG1peF9lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE2X1JFR19taXhfZW5fZGNmX3R4X1BvcyAoNVVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE2X1JFRzogbWl4X2VuX2RjZl90eCAoQml0IDUpICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE2X1JFR19taXhfZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE2X1JFRzogbWl4X2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTdfUkVHX2lmZl9lbl9kY2ZfcnhfUG9zICgwVUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTdfUkVHOiBpZmZfZW5fZGNmX3J4IChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTdfUkVHX2lmZl9lbl9kY2ZfcnhfTXNrICgweDFmVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTdfUkVHOiBpZmZfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxN19SRUdfaWZmX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxN19SRUc6IGlmZl9lbl9kY2ZfdHggKEJpdCA1KSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxN19SRUdfaWZmX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxN19SRUc6IGlmZl9lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE4X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE4X1JFR19hZGNfZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE4X1JFRzogYWRjX2VuX2RjZl9yeCAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE4X1JFR19hZGNfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE4X1JFRzogYWRjX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMThfUkVHX2FkY19lbl9kY2ZfdHhfUG9zICg1VUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMThfUkVHOiBhZGNfZW5fZGNmX3R4IChCaXQgNSkgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMThfUkVHX2FkY19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMThfUkVHOiBhZGNfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxOV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxOV9SRUdfdmNvX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxOV9SRUc6IHZjb19lbl9kY2ZfcnggKEJpdCAwKSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxOV9SRUdfdmNvX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxOV9SRUc6IHZjb19lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE5X1JFR192Y29fZW5fZGNmX3R4X1BvcyAoNVVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE5X1JFRzogdmNvX2VuX2RjZl90eCAoQml0IDUpICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE5X1JFR192Y29fZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE5X1JFRzogdmNvX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjBfUkVHX2xvYnVmX21kX2VuX2RjZl9yeF9Qb3MgKDBVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjBfUkVHOiBsb2J1Zl9tZF9lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyMF9SRUdfbG9idWZfbWRfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIwX1JFRzogbG9idWZfbWRfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyMF9SRUdfbG9idWZfbWRfZW5fZGNmX3R4X1BvcyAoNVVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyMF9SRUc6IGxvYnVmX21kX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIwX1JFR19sb2J1Zl9tZF9lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIwX1JFRzogbG9idWZfbWRfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyMV9SRUdfY3BfZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyMV9SRUc6IGNwX2VuX2RjZl9yeCAoQml0IDApICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyMV9SRUdfY3BfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyMV9SRUc6IGNwX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjFfUkVHX2NwX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjFfUkVHOiBjcF9lbl9kY2ZfdHggKEJpdCA1KSAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjFfUkVHX2NwX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjFfUkVHOiBjcF9lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIyX1JFR19wZmRfZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIyX1JFRzogcGZkX2VuX2RjZl9yeCAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIyX1JFR19wZmRfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIyX1JFRzogcGZkX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjJfUkVHX3BmZF9lbl9kY2ZfdHhfUG9zICg1VUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjJfUkVHOiBwZmRfZW5fZGNmX3R4IChCaXQgNSkgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjJfUkVHX3BmZF9lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjJfUkVHOiBwZmRfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjNfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHX2dhdXNzX2VuX2JsZV9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjNfQkxFX1JFRzogZ2F1c3NfZW5fYmxlX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIzX0JMRV9SRUdfZ2F1c3NfZW5fYmxlX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHOiBnYXVzc19lbl9ibGVfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHX2dhdXNzX2VuX2JsZV9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjNfQkxFX1JFRzogZ2F1c3NfZW5fYmxlX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIzX0JMRV9SRUdfZ2F1c3NfZW5fYmxlX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjNfQkxFX1JFRzogZ2F1c3NfZW5fYmxlX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI0X0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjRfQkxFX1JFR19yZmlvX3R4cnhfYmxlX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNF9CTEVfUkVHOiByZmlvX3R4cnhfYmxlX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI0X0JMRV9SRUdfcmZpb190eHJ4X2JsZV9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjRfQkxFX1JFRzogcmZpb190eHJ4X2JsZV9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI0X0JMRV9SRUdfcmZpb190eHJ4X2JsZV9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjRfQkxFX1JFRzogcmZpb190eHJ4X2JsZV9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyNF9CTEVfUkVHX3JmaW9fdHhyeF9ibGVfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNF9CTEVfUkVHOiByZmlvX3R4cnhfYmxlX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjVfUkVHX2xvYnVmX3BhX2VuX2RjZl9yeF9Qb3MgKDBVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjVfUkVHOiBsb2J1Zl9wYV9lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyNV9SRUdfbG9idWZfcGFfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI1X1JFRzogbG9idWZfcGFfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyNV9SRUdfbG9idWZfcGFfZW5fZGNmX3R4X1BvcyAoNVVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNV9SRUc6IGxvYnVmX3BhX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI1X1JFR19sb2J1Zl9wYV9lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI1X1JFRzogbG9idWZfcGFfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyNl9SRUdfbG9idWZfcnhpcV9lbl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjZfUkVHOiBsb2J1Zl9yeGlxX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI2X1JFR19sb2J1Zl9yeGlxX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNl9SRUc6IGxvYnVmX3J4aXFfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyNl9SRUdfbG9idWZfcnhpcV9lbl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjZfUkVHOiBsb2J1Zl9yeGlxX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI2X1JFR19sb2J1Zl9yeGlxX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjZfUkVHOiBsb2J1Zl9yeGlxX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjdfUkVHX2RpdjJfZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjdfUkVHOiBkaXYyX2VuX2RjZl9yeCAoQml0IDApICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjdfUkVHX2RpdjJfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjdfUkVHOiBkaXYyX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjdfUkVHX2RpdjJfZW5fZGNmX3R4X1BvcyAoNVVMKSAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjdfUkVHOiBkaXYyX2VuX2RjZl90eCAoQml0IDUpICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjdfUkVHX2RpdjJfZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjdfUkVHOiBkaXYyX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjhfUkVHX2NwX2JpYXNfc2hfb3Blbl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjhfUkVHOiBjcF9iaWFzX3NoX29wZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjhfUkVHX2NwX2JpYXNfc2hfb3Blbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjhfUkVHOiBjcF9iaWFzX3NoX29wZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyOF9SRUdfY3BfYmlhc19zaF9vcGVuX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyOF9SRUc6IGNwX2JpYXNfc2hfb3Blbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyOF9SRUdfY3BfYmlhc19zaF9vcGVuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjhfUkVHOiBjcF9iaWFzX3NoX29wZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyOV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyOV9SRUdfdmNvX2JpYXNfc2hfb3Blbl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjlfUkVHOiB2Y29fYmlhc19zaF9vcGVuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI5X1JFR192Y29fYmlhc19zaF9vcGVuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyOV9SRUc6IHZjb19iaWFzX3NoX29wZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyOV9SRUdfdmNvX2JpYXNfc2hfb3Blbl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjlfUkVHOiB2Y29fYmlhc19zaF9vcGVuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI5X1JFR192Y29fYmlhc19zaF9vcGVuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjlfUkVHOiB2Y29fYmlhc19zaF9vcGVuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzBfUkVHX2lmZm1peF9iaWFzX3NoX29wZW5fZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMwX1JFRzogaWZmbWl4X2JpYXNfc2hfb3Blbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMF9SRUdfaWZmbWl4X2JpYXNfc2hfb3Blbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzBfUkVHOiBpZmZtaXhfYmlhc19zaF9vcGVuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzBfUkVHX2lmZm1peF9iaWFzX3NoX29wZW5fZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMwX1JFRzogaWZmbWl4X2JpYXNfc2hfb3Blbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMF9SRUdfaWZmbWl4X2JpYXNfc2hfb3Blbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMwX1JFRzogaWZmbWl4X2JpYXNfc2hfb3Blbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMV9CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMxX0JMRV9SRUdfZ2F1c3NfYmlhc19zaF9ibGVfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMxX0JMRV9SRUc6IGdhdXNzX2JpYXNfc2hfYmxlX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMxX0JMRV9SRUdfZ2F1c3NfYmlhc19zaF9ibGVfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMxX0JMRV9SRUc6IGdhdXNzX2JpYXNfc2hfYmxlX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzFfQkxFX1JFR19nYXVzc19iaWFzX3NoX2JsZV9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzFfQkxFX1JFRzogZ2F1c3NfYmlhc19zaF9ibGVfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzFfQkxFX1JFR19nYXVzc19iaWFzX3NoX2JsZV9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMxX0JMRV9SRUc6IGdhdXNzX2JpYXNfc2hfYmxlX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzJfUkVHX21peF9iaWFzX3NoX2RjZl9yeF9Qb3MgKDBVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzJfUkVHOiBtaXhfYmlhc19zaF9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMl9SRUdfbWl4X2JpYXNfc2hfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMyX1JFRzogbWl4X2JpYXNfc2hfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMl9SRUdfbWl4X2JpYXNfc2hfZGNmX3R4X1BvcyAoNVVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczMl9SRUc6IG1peF9iaWFzX3NoX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMyX1JFR19taXhfYmlhc19zaF9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMyX1JFRzogbWl4X2JpYXNfc2hfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczM19SRUdfcGxsX2RpZ19lbl9kY2ZfcnhfUG9zICgwVUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczM19SRUc6IHBsbF9kaWdfZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzNfUkVHX3BsbF9kaWdfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMzX1JFRzogcGxsX2RpZ19lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMzX1JFR19wbGxfZGlnX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMzX1JFRzogcGxsX2RpZ19lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczM19SRUdfcGxsX2RpZ19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMzX1JFRzogcGxsX2RpZ19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM0X1JFR19wbGxjbG9zZWRfZW5fZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM0X1JFRzogcGxsY2xvc2VkX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM0X1JFR19wbGxjbG9zZWRfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM0X1JFRzogcGxsY2xvc2VkX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzRfUkVHX3BsbGNsb3NlZF9lbl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzRfUkVHOiBwbGxjbG9zZWRfZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzRfUkVHX3BsbGNsb3NlZF9lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM0X1JFRzogcGxsY2xvc2VkX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM1X0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzVfQkxFX1JFR19kZW1fZW5fYmxlX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczNV9CTEVfUkVHOiBkZW1fZW5fYmxlX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM1X0JMRV9SRUdfZGVtX2VuX2JsZV9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzVfQkxFX1JFRzogZGVtX2VuX2JsZV9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM1X0JMRV9SRUdfZGVtX2VuX2JsZV9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzVfQkxFX1JFRzogZGVtX2VuX2JsZV9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczNV9CTEVfUkVHX2RlbV9lbl9ibGVfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczNV9CTEVfUkVHOiBkZW1fZW5fYmxlX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzZfUkVHX2xkb196ZXJvX2VuX2RjZl9yeF9Qb3MgKDBVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzZfUkVHOiBsZG9femVyb19lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczNl9SRUdfbGRvX3plcm9fZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM2X1JFRzogbGRvX3plcm9fZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczNl9SRUdfbGRvX3plcm9fZW5fZGNmX3R4X1BvcyAoNVVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczNl9SRUc6IGxkb196ZXJvX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM2X1JFR19sZG9femVyb19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM2X1JFRzogbGRvX3plcm9fZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzdfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczN19CTEVfUkVHX2NhbF9lbl9ibGVfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM3X0JMRV9SRUc6IGNhbF9lbl9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzdfQkxFX1JFR19jYWxfZW5fYmxlX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczN19CTEVfUkVHOiBjYWxfZW5fYmxlX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzdfQkxFX1JFR19jYWxfZW5fYmxlX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczN19CTEVfUkVHOiBjYWxfZW5fYmxlX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM3X0JMRV9SRUdfY2FsX2VuX2JsZV9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM3X0JMRV9SRUc6IGNhbF9lbl9ibGVfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzhfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczOF9CTEVfUkVHX3RkY19lbl9ibGVfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM4X0JMRV9SRUc6IHRkY19lbl9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzhfQkxFX1JFR190ZGNfZW5fYmxlX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczOF9CTEVfUkVHOiB0ZGNfZW5fYmxlX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzhfQkxFX1JFR190ZGNfZW5fYmxlX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczOF9CTEVfUkVHOiB0ZGNfZW5fYmxlX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM4X0JMRV9SRUdfdGRjX2VuX2JsZV9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM4X0JMRV9SRUc6IHRkY19lbl9ibGVfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczOV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczOV9SRUdfbGRvX3JmaW9fZW5fZGNmX3J4X1BvcyAoMFVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczOV9SRUc6IGxkb19yZmlvX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM5X1JFR19sZG9fcmZpb19lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzlfUkVHOiBsZG9fcmZpb19lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM5X1JFR19sZG9fcmZpb19lbl9kY2ZfdHhfUG9zICg1VUwpICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM5X1JFRzogbGRvX3JmaW9fZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzlfUkVHX2xkb19yZmlvX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzlfUkVHOiBsZG9fcmZpb19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQwX1JFR19yZmlvX2JpYXNfZW5fZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQwX1JFRzogcmZpb19iaWFzX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQwX1JFR19yZmlvX2JpYXNfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQwX1JFRzogcmZpb19iaWFzX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDBfUkVHX3JmaW9fYmlhc19lbl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDBfUkVHOiByZmlvX2JpYXNfZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDBfUkVHX3JmaW9fYmlhc19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQwX1JFRzogcmZpb19iaWFzX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDFfUkVHX3JmaW9fYmlhc19zaF9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDFfUkVHOiByZmlvX2JpYXNfc2hfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDFfUkVHX3JmaW9fYmlhc19zaF9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDFfUkVHOiByZmlvX2JpYXNfc2hfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0MV9SRUdfcmZpb19iaWFzX3NoX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0MV9SRUc6IHJmaW9fYmlhc19zaF9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0MV9SRUdfcmZpb19iaWFzX3NoX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDFfUkVHOiByZmlvX2JpYXNfc2hfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0Ml9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0Ml9SRUdfbGRvX3JhZGlvX2VuX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0Ml9SRUc6IGxkb19yYWRpb19lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0Ml9SRUdfbGRvX3JhZGlvX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0Ml9SRUc6IGxkb19yYWRpb19lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQyX1JFR19sZG9fcmFkaW9fZW5fZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQyX1JFRzogbGRvX3JhZGlvX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQyX1JFR19sZG9fcmFkaW9fZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0Ml9SRUc6IGxkb19yYWRpb19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQzX1JFR19hZGNfY2xrX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQzX1JFRzogYWRjX2Nsa19lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0M19SRUdfYWRjX2Nsa19lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDNfUkVHOiBhZGNfY2xrX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDNfUkVHX2FkY19jbGtfZW5fZGNmX3R4X1BvcyAoNVVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDNfUkVHOiBhZGNfY2xrX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQzX1JFR19hZGNfY2xrX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDNfUkVHOiBhZGNfY2xrX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ0X0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDRfQkxFX1JFR190cl9wd21fb2ZmX2VuX2JsZV9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDRfQkxFX1JFRzogdHJfcHdtX29mZl9lbl9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDRfQkxFX1JFR190cl9wd21fb2ZmX2VuX2JsZV9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDRfQkxFX1JFRzogdHJfcHdtX29mZl9lbl9ibGVfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NF9CTEVfUkVHX3RyX3B3bV9vZmZfZW5fYmxlX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NF9CTEVfUkVHOiB0cl9wd21fb2ZmX2VuX2JsZV9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NF9CTEVfUkVHX3RyX3B3bV9vZmZfZW5fYmxlX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDRfQkxFX1JFRzogdHJfcHdtX29mZl9lbl9ibGVfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NV9CTEVfUkVHX3R4ZGFjX2VuX2JsZV9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFRzogdHhkYWNfZW5fYmxlX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ1X0JMRV9SRUdfdHhkYWNfZW5fYmxlX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NV9CTEVfUkVHOiB0eGRhY19lbl9ibGVfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NV9CTEVfUkVHX3R4ZGFjX2VuX2JsZV9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFRzogdHhkYWNfZW5fYmxlX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ1X0JMRV9SRUdfdHhkYWNfZW5fYmxlX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFRzogdHhkYWNfZW5fYmxlX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFR19kZW1fZGNwYXJjYWxfZW5fYmxlX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHOiBkZW1fZGNwYXJjYWxfZW5fYmxlX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUdfZGVtX2RjcGFyY2FsX2VuX2JsZV9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRzogZGVtX2RjcGFyY2FsX2VuX2JsZV9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUdfc3BhcmUyX2VuX2JsZV9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRzogc3BhcmUyX2VuX2JsZV9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHX3NwYXJlMl9lbl9ibGVfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHOiBzcGFyZTJfZW5fYmxlX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ3X0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDdfQkxFX1JFR19kZW1fYWdjdW5mcmVlemVfZW5fYmxlX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0N19CTEVfUkVHOiBkZW1fYWdjdW5mcmVlemVfZW5fYmxlX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ3X0JMRV9SRUdfZGVtX2FnY3VuZnJlZXplX2VuX2JsZV9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDdfQkxFX1JFRzogZGVtX2FnY3VuZnJlZXplX2VuX2JsZV9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ3X0JMRV9SRUdfc3BhcmUzX2VuX2JsZV9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDdfQkxFX1JFRzogc3BhcmUzX2VuX2JsZV9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0N19CTEVfUkVHX3NwYXJlM19lbl9ibGVfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0N19CTEVfUkVHOiBzcGFyZTNfZW5fYmxlX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ4X0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFR19kZW1fc2lnZGV0ZWN0X2VuX2JsZV9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFRzogZGVtX3NpZ2RldGVjdF9lbl9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFR19kZW1fc2lnZGV0ZWN0X2VuX2JsZV9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFRzogZGVtX3NpZ2RldGVjdF9lbl9ibGVfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OF9CTEVfUkVHX3NwYXJlNF9lbl9ibGVfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ4X0JMRV9SRUc6IHNwYXJlNF9lbl9ibGVfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFR19zcGFyZTRfZW5fYmxlX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFRzogc3BhcmU0X2VuX2JsZV9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OV9CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ5X0JMRV9SRUdfZGVtX2Z0ZGZfZW5fYmxlX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OV9CTEVfUkVHOiBkZW1fZnRkZl9lbl9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDlfQkxFX1JFR19kZW1fZnRkZl9lbl9ibGVfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ5X0JMRV9SRUc6IGRlbV9mdGRmX2VuX2JsZV9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ5X0JMRV9SRUdfZGVtX2Z0ZGZfZW5fYmxlX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OV9CTEVfUkVHOiBkZW1fZnRkZl9lbl9ibGVfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDlfQkxFX1JFR19kZW1fZnRkZl9lbl9ibGVfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OV9CTEVfUkVHOiBkZW1fZnRkZl9lbl9ibGVfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyM19GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyM19GVERGX1JFR19nYXVzc19lbl9mdGRmX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyM19GVERGX1JFRzogZ2F1c3NfZW5fZnRkZl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyM19GVERGX1JFR19nYXVzc19lbl9mdGRmX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyM19GVERGX1JFRzogZ2F1c3NfZW5fZnRkZl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHX2dhdXNzX2VuX2Z0ZGZfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHOiBnYXVzc19lbl9mdGRmX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHX2dhdXNzX2VuX2Z0ZGZfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyM19GVERGX1JFRzogZ2F1c3NfZW5fZnRkZl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI0X0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI0X0ZUREZfUkVHX3JmaW9fdHhyeF9mdGRmX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNF9GVERGX1JFRzogcmZpb190eHJ4X2Z0ZGZfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjRfRlRERl9SRUdfcmZpb190eHJ4X2Z0ZGZfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI0X0ZUREZfUkVHOiByZmlvX3R4cnhfZnRkZl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI0X0ZUREZfUkVHX3JmaW9fdHhyeF9mdGRmX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNF9GVERGX1JFRzogcmZpb190eHJ4X2Z0ZGZfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjRfRlRERl9SRUdfcmZpb190eHJ4X2Z0ZGZfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNF9GVERGX1JFRzogcmZpb190eHJ4X2Z0ZGZfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMV9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMV9GVERGX1JFR19nYXVzc19iaWFzX3NoX2Z0ZGZfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMxX0ZUREZfUkVHOiBnYXVzc19iaWFzX3NoX2Z0ZGZfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzFfRlRERl9SRUdfZ2F1c3NfYmlhc19zaF9mdGRmX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczMV9GVERGX1JFRzogZ2F1c3NfYmlhc19zaF9mdGRmX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzFfRlRERl9SRUdfZ2F1c3NfYmlhc19zaF9mdGRmX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczMV9GVERGX1JFRzogZ2F1c3NfYmlhc19zaF9mdGRmX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMxX0ZUREZfUkVHX2dhdXNzX2JpYXNfc2hfZnRkZl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMxX0ZUREZfUkVHOiBnYXVzc19iaWFzX3NoX2Z0ZGZfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczNV9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczNV9GVERGX1JFR19kZW1fZW5fZnRkZl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzVfRlRERl9SRUc6IGRlbV9lbl9mdGRmX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM1X0ZUREZfUkVHX2RlbV9lbl9mdGRmX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczNV9GVERGX1JFRzogZGVtX2VuX2Z0ZGZfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczNV9GVERGX1JFR19kZW1fZW5fZnRkZl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzVfRlRERl9SRUc6IGRlbV9lbl9mdGRmX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM1X0ZUREZfUkVHX2RlbV9lbl9mdGRmX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzVfRlRERl9SRUc6IGRlbV9lbl9mdGRmX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzdfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzdfRlRERl9SRUdfY2FsX2VuX2Z0ZGZfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM3X0ZUREZfUkVHOiBjYWxfZW5fZnRkZl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczN19GVERGX1JFR19jYWxfZW5fZnRkZl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzdfRlRERl9SRUc6IGNhbF9lbl9mdGRmX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzdfRlRERl9SRUdfY2FsX2VuX2Z0ZGZfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM3X0ZUREZfUkVHOiBjYWxfZW5fZnRkZl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczN19GVERGX1JFR19jYWxfZW5fZnRkZl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM3X0ZUREZfUkVHOiBjYWxfZW5fZnRkZl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM4X0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM4X0ZUREZfUkVHX3RkY19lbl9mdGRmX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczOF9GVERGX1JFRzogdGRjX2VuX2Z0ZGZfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzhfRlRERl9SRUdfdGRjX2VuX2Z0ZGZfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM4X0ZUREZfUkVHOiB0ZGNfZW5fZnRkZl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM4X0ZUREZfUkVHX3RkY19lbl9mdGRmX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczOF9GVERGX1JFRzogdGRjX2VuX2Z0ZGZfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzhfRlRERl9SRUdfdGRjX2VuX2Z0ZGZfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczOF9GVERGX1JFRzogdGRjX2VuX2Z0ZGZfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NF9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NF9GVERGX1JFR190cl9wd21fb2ZmX2VuX2Z0ZGZfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ0X0ZUREZfUkVHOiB0cl9wd21fb2ZmX2VuX2Z0ZGZfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDRfRlRERl9SRUdfdHJfcHdtX29mZl9lbl9mdGRmX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NF9GVERGX1JFRzogdHJfcHdtX29mZl9lbl9mdGRmX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDRfRlRERl9SRUdfdHJfcHdtX29mZl9lbl9mdGRmX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NF9GVERGX1JFRzogdHJfcHdtX29mZl9lbl9mdGRmX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ0X0ZUREZfUkVHX3RyX3B3bV9vZmZfZW5fZnRkZl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ0X0ZUREZfUkVHOiB0cl9wd21fb2ZmX2VuX2Z0ZGZfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NV9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NV9GVERGX1JFR190eGRhY19lbl9mdGRmX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NV9GVERGX1JFRzogdHhkYWNfZW5fZnRkZl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NV9GVERGX1JFR190eGRhY19lbl9mdGRmX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NV9GVERGX1JFRzogdHhkYWNfZW5fZnRkZl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHX3R4ZGFjX2VuX2Z0ZGZfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHOiB0eGRhY19lbl9mdGRmX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHX3R4ZGFjX2VuX2Z0ZGZfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NV9GVERGX1JFRzogdHhkYWNfZW5fZnRkZl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ2X0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ2X0ZUREZfUkVHX2RlbV9kY3BhcmNhbF9lbl9mdGRmX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0Nl9GVERGX1JFRzogZGVtX2RjcGFyY2FsX2VuX2Z0ZGZfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUdfZGVtX2RjcGFyY2FsX2VuX2Z0ZGZfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ2X0ZUREZfUkVHOiBkZW1fZGNwYXJjYWxfZW5fZnRkZl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ2X0ZUREZfUkVHX3NwYXJlMl9lbl9mdGRmX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0Nl9GVERGX1JFRzogc3BhcmUyX2VuX2Z0ZGZfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUdfc3BhcmUyX2VuX2Z0ZGZfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0Nl9GVERGX1JFRzogc3BhcmUyX2VuX2Z0ZGZfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0N19GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0N19GVERGX1JFR19kZW1fYWdjdW5mcmVlemVfZW5fZnRkZl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDdfRlRERl9SRUc6IGRlbV9hZ2N1bmZyZWV6ZV9lbl9mdGRmX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ3X0ZUREZfUkVHX2RlbV9hZ2N1bmZyZWV6ZV9lbl9mdGRmX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0N19GVERGX1JFRzogZGVtX2FnY3VuZnJlZXplX2VuX2Z0ZGZfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0N19GVERGX1JFR19zcGFyZTNfZW5fZnRkZl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDdfRlRERl9SRUc6IHNwYXJlM19lbl9mdGRmX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ3X0ZUREZfUkVHX3NwYXJlM19lbl9mdGRmX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDdfRlRERl9SRUc6IHNwYXJlM19lbl9mdGRmX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDhfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDhfRlRERl9SRUdfZGVtX3NpZ2RldGVjdF9lbl9mdGRmX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OF9GVERGX1JFRzogZGVtX3NpZ2RldGVjdF9lbl9mdGRmX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ4X0ZUREZfUkVHX2RlbV9zaWdkZXRlY3RfZW5fZnRkZl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDhfRlRERl9SRUc6IGRlbV9zaWdkZXRlY3RfZW5fZnRkZl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ4X0ZUREZfUkVHX3NwYXJlNF9lbl9mdGRmX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OF9GVERGX1JFRzogc3BhcmU0X2VuX2Z0ZGZfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDhfRlRERl9SRUdfc3BhcmU0X2VuX2Z0ZGZfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OF9GVERGX1JFRzogc3BhcmU0X2VuX2Z0ZGZfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OV9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OV9GVERGX1JFR19kZW1fZnRkZl9lbl9mdGRmX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OV9GVERGX1JFRzogZGVtX2Z0ZGZfZW5fZnRkZl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OV9GVERGX1JFR19kZW1fZnRkZl9lbl9mdGRmX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OV9GVERGX1JFRzogZGVtX2Z0ZGZfZW5fZnRkZl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ5X0ZUREZfUkVHX2RlbV9mdGRmX2VuX2Z0ZGZfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ5X0ZUREZfUkVHOiBkZW1fZnRkZl9lbl9mdGRmX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ5X0ZUREZfUkVHX2RlbV9mdGRmX2VuX2Z0ZGZfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OV9GVERGX1JFRzogZGVtX2Z0ZGZfZW5fZnRkZl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMV9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMV9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMV9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMV9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMV9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMV9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMV9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMV9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yX1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yX1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yX1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yX1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yX1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yX1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yX1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yX1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzNfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzNfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzNfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzNfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzNfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzNfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzNfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzNfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfNF9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfNF9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfNF9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfNF9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfNF9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfNF9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfNF9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfNF9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl81X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl81X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl81X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl81X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl81X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl81X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl81X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl81X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl82X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzZfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzZfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzZfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzZfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzZfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzZfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzZfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzZfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfN19SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfN19SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfN19SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfN19SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfN19SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfN19SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfN19SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfN19SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfOF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl84X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl84X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl84X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl84X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl84X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl84X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl84X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl84X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl85X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzlfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzlfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzlfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzlfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzlfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzlfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzlfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzlfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTBfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTBfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTBfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTBfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzEwX1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzEwX1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzEwX1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzEwX1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzExX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzExX1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzExX1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzExX1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzExX1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xMV9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xMV9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xMV9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xMV9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xMl9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xMl9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xMl9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xMl9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTJfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTJfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTJfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTJfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTNfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTNfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTNfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTNfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzEzX1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzEzX1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzEzX1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzEzX1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE0X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE0X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE0X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE0X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xNF9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xNF9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xNF9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xNF9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xNV9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xNV9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xNV9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xNV9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTVfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTVfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTVfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTVfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTZfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTZfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTZfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTZfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE2X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE2X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE2X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE2X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE3X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE3X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE3X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE3X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE3X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xN19SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xN19SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xN19SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xN19SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xOF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xOF9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xOF9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xOF9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xOF9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMThfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMThfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMThfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMThfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTlfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTlfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTlfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTlfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTlfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE5X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE5X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE5X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE5X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIwX1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIwX1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIwX1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIwX1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yMF9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yMF9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yMF9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yMF9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yMV9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yMV9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yMV9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yMV9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjFfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjFfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjFfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjFfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjJfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjJfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjJfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjJfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIyX1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIyX1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIyX1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIyX1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIzX1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIzX1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIzX1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIzX1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yM19SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yM19SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yM19SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yM19SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yNF9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yNF9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yNF9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yNF9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjRfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjRfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjRfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjRfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjVfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjVfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjVfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjVfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI1X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI1X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI1X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI1X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI2X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI2X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI2X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI2X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI2X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yNl9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yNl9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yNl9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yNl9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yN19SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yN19SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yN19SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yN19SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjdfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjdfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjdfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjdfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjhfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjhfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjhfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjhfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI4X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI4X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI4X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI4X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI5X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI5X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI5X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI5X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI5X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yOV9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yOV9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yOV9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yOV9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8zMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8zMF9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8zMF9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8zMF9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8zMF9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMzBfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMzBfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMzBfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMzBfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMzFfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMzFfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMzFfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMzFfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzMxX1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzMxX1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzMxX1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzMxX1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9MTkFfTERPX0VOX1BvcyAoMFVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fTE5BX0xET19FTiAoQml0IDApICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9MTkFfTERPX0VOX01zayAoMHgxVUwpICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fTE5BX0xET19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fTE5BX0NPUkVfRU5fUG9zICgxVUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX0xOQV9DT1JFX0VOIChCaXQgMSkgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fTE5BX0NPUkVfRU5fTXNrICgweDJVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX0xOQV9DT1JFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9MTkFfQ0dNX0VOX1BvcyAoMlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fTE5BX0NHTV9FTiAoQml0IDIpICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9MTkFfQ0dNX0VOX01zayAoMHg0VUwpICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fTE5BX0NHTV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fTUlYX0xET19FTl9Qb3MgKDNVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX01JWF9MRE9fRU4gKEJpdCAzKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fTUlYX0xET19FTl9Nc2sgKDB4OFVMKSAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX01JWF9MRE9fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0lGRl9MRE9fRU5fUG9zICg0VUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9JRkZfTERPX0VOIChCaXQgNCkgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0lGRl9MRE9fRU5fTXNrICgweDEwVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9JRkZfTERPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9JRkZBRENfTERPX0VOX1BvcyAoNVVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fSUZGQURDX0xET19FTiAoQml0IDUpICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9JRkZBRENfTERPX0VOX01zayAoMHgyMFVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fSUZGQURDX0xET19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fVkNPX0xET19FTl9Qb3MgKDZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX1ZDT19MRE9fRU4gKEJpdCA2KSAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fVkNPX0xET19FTl9Nc2sgKDB4NDBVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX1ZDT19MRE9fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX01EX0xET19FTl9Qb3MgKDdVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9NRF9MRE9fRU4gKEJpdCA3KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX01EX0xET19FTl9Nc2sgKDB4ODBVTCkgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9NRF9MRE9fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX1BGRF9MRE9fRU5fUG9zICg4VUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9QRkRfTERPX0VOIChCaXQgOCkgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX1BGRF9MRE9fRU5fTXNrICgweDEwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9QRkRfTERPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9QQV9MRE9fRU5fUG9zICg5VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fUEFfTERPX0VOIChCaXQgOSkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9QQV9MRE9fRU5fTXNrICgweDIwMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fUEFfTERPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9DUF9TV0lUQ0hfRU5fUG9zICgxMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fQ1BfU1dJVENIX0VOIChCaXQgMTApICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9DUF9TV0lUQ0hfRU5fTXNrICgweDQwMFVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fQ1BfU1dJVENIX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9WQ09fQklBU19FTl9Qb3MgKDExVUwpICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fVkNPX0JJQVNfRU4gKEJpdCAxMSkgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9WQ09fQklBU19FTl9Nc2sgKDB4ODAwVUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fVkNPX0JJQVNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0NQX0JJQVNfRU5fUG9zICgxMlVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9DUF9CSUFTX0VOIChCaXQgMTIpICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0NQX0JJQVNfRU5fTXNrICgweDEwMDBVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9DUF9CSUFTX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9MTkFfTERPX1pFUk9fUG9zICgxM1VMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fTE5BX0xET19aRVJPIChCaXQgMTMpICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9MTkFfTERPX1pFUk9fTXNrICgweDIwMDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fTE5BX0xET19aRVJPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9QQV9SQU1QX0VOX1BvcyAoMTRVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fUEFfUkFNUF9FTiAoQml0IDE0KSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9QQV9SQU1QX0VOX01zayAoMHg0MDAwVUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fUEFfUkFNUF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fUEFfRU5fUG9zICgxNVVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX1BBX0VOIChCaXQgMTUpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fUEFfRU5fTXNrICgweDgwMDBVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX1BBX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9NSVhfRU5fUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fTUlYX0VOIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9NSVhfRU5fTXNrICgweDFVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fTUlYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9JRkZfRU5fUG9zICgxVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fSUZGX0VOIChCaXQgMSkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9JRkZfRU5fTXNrICgweDJVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fSUZGX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9BRENfRU5fUG9zICgyVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fQURDX0VOIChCaXQgMikgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9BRENfRU5fTXNrICgweDRVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fQURDX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9WQ09fRU5fUG9zICgzVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fVkNPX0VOIChCaXQgMykgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9WQ09fRU5fTXNrICgweDhVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fVkNPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9MT0JVRl9NRF9FTl9Qb3MgKDRVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fTE9CVUZfTURfRU4gKEJpdCA0KSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9MT0JVRl9NRF9FTl9Nc2sgKDB4MTBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fTE9CVUZfTURfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0NQX0VOX1BvcyAoNVVMKSAgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9DUF9FTiAoQml0IDUpICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0NQX0VOX01zayAoMHgyMFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9DUF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fUERGX0VOX1BvcyAoNlVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX1BERl9FTiAoQml0IDYpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fUERGX0VOX01zayAoMHg0MFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX1BERl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fR0FVU1NfRU5fUG9zICg3VUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX0dBVVNTX0VOIChCaXQgNykgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fR0FVU1NfRU5fTXNrICgweDgwVUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX0dBVVNTX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9SRklPX1RYUlhfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fUkZJT19UWFJYIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9SRklPX1RYUlhfTXNrICgweDEwMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fUkZJT19UWFJYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9MT0JVRl9QQV9FTl9Qb3MgKDlVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fTE9CVUZfUEFfRU4gKEJpdCA5KSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9MT0JVRl9QQV9FTl9Nc2sgKDB4MjAwVUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fTE9CVUZfUEFfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX1JYSVFfRU5fUG9zICgxMFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9SWElRX0VOIChCaXQgMTApICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX1JYSVFfRU5fTXNrICgweDQwMFVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9SWElRX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9ESVYyX0VOX1BvcyAoMTFVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fRElWMl9FTiAoQml0IDExKSAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9ESVYyX0VOX01zayAoMHg4MDBVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fRElWMl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fQ1BfQklBU19TSF9PUEVOX1BvcyAoMTJVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX0NQX0JJQVNfU0hfT1BFTiAoQml0IDEyKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9DUF9CSUFTX1NIX09QRU5fTXNrICgweDEwMDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fQ1BfQklBU19TSF9PUEVOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9WQ09fQklBU19TSF9PUEVOX1BvcyAoMTNVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fVkNPX0JJQVNfU0hfT1BFTiAoQml0IDEzKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9WQ09fQklBU19TSF9PUEVOX01zayAoMHgyMDAwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX1ZDT19CSUFTX1NIX09QRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0lGRk1JWF9CSUFTX1NIX09QRU5fUG9zICgxNFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9JRkZNSVhfQklBU19TSF9PUEVOIChCaXQgMTQpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0lGRk1JWF9CSUFTX1NIX09QRU5fTXNrICgweDQwMDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fSUZGTUlYX0JJQVNfU0hfT1BFTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fR0FVU1NfQklBU19TSF9Qb3MgKDE1VUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX0dBVVNTX0JJQVNfU0ggKEJpdCAxNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fR0FVU1NfQklBU19TSF9Nc2sgKDB4ODAwMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9HQVVTU19CSUFTX1NIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9NSVhfQklBU19TSF9Qb3MgKDBVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fTUlYX0JJQVNfU0ggKEJpdCAwKSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9NSVhfQklBU19TSF9Nc2sgKDB4MVVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fTUlYX0JJQVNfU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1BMTF9ESUdfRU5fUG9zICgxVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9QTExfRElHX0VOIChCaXQgMSkgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1BMTF9ESUdfRU5fTXNrICgweDJVTCkgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9QTExfRElHX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9QTExDTE9TRURfRU5fUG9zICgyVUwpICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fUExMQ0xPU0VEX0VOIChCaXQgMikgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9QTExDTE9TRURfRU5fTXNrICgweDRVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fUExMQ0xPU0VEX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9ERU1fRU5fUG9zICgzVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fREVNX0VOIChCaXQgMykgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9ERU1fRU5fTXNrICgweDhVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fREVNX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9MRE9fWkVST19FTl9Qb3MgKDRVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fTERPX1pFUk9fRU4gKEJpdCA0KSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9MRE9fWkVST19FTl9Nc2sgKDB4MTBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fTERPX1pFUk9fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX0NBTF9FTl9Qb3MgKDVVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9DQUxfRU4gKEJpdCA1KSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX0NBTF9FTl9Nc2sgKDB4MjBVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9DQUxfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1REQ19FTl9Qb3MgKDZVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9URENfRU4gKEJpdCA2KSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1REQ19FTl9Nc2sgKDB4NDBVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9URENfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX0xET19SRklPX0VOX1BvcyAoN1VMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9MRE9fUkZJT19FTiAoQml0IDcpICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX0xET19SRklPX0VOX01zayAoMHg4MFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9MRE9fUkZJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fUkZJT19CSUFTX0VOX1BvcyAoOFVMKSAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1JGSU9fQklBU19FTiAoQml0IDgpICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fUkZJT19CSUFTX0VOX01zayAoMHgxMDBVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1JGSU9fQklBU19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fUkZJT19CSUFTX1NIX1BvcyAoOVVMKSAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1JGSU9fQklBU19TSCAoQml0IDkpICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fUkZJT19CSUFTX1NIX01zayAoMHgyMDBVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1JGSU9fQklBU19TSCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fTERPX1JBRElPX0VOX1BvcyAoMTBVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX0xET19SQURJT19FTiAoQml0IDEwKSAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fTERPX1JBRElPX0VOX01zayAoMHg0MDBVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX0xET19SQURJT19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fQURDX0NMS19FTl9Qb3MgKDExVUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX0FEQ19DTEtfRU4gKEJpdCAxMSkgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fQURDX0NMS19FTl9Nc2sgKDB4ODAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX0FEQ19DTEtfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1RSX1BXUk1fT0ZGX0VOX1BvcyAoMTJVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9UUl9QV1JNX09GRl9FTiAoQml0IDEyKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9UUl9QV1JNX09GRl9FTl9Nc2sgKDB4MTAwMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9UUl9QV1JNX09GRl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fVFhEQUNfRU5fUG9zICgxM1VMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1RYREFDX0VOIChCaXQgMTMpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fVFhEQUNfRU5fTXNrICgweDIwMDBVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1RYREFDX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9TUEFSRTJfRU5fUG9zICgxNFVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fU1BBUkUyX0VOIChCaXQgMTQpICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9TUEFSRTJfRU5fTXNrICgweDQwMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fU1BBUkUyX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9TUEFSRTNfRU5fUG9zICgxNVVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fU1BBUkUzX0VOIChCaXQgMTUpICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9TUEFSRTNfRU5fTXNrICgweDgwMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fU1BBUkUzX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VONF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjRfUkVHX0FMV19FTl9TUEFSRTRfRU5fUG9zICgwVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjRfUkVHOiBBTFdfRU5fU1BBUkU0X0VOIChCaXQgMCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjRfUkVHX0FMV19FTl9TUEFSRTRfRU5fTXNrICgweDFVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjRfUkVHOiBBTFdfRU5fU1BBUkU0X0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjRfUkVHX0FMV19FTl9ERU1fRlRERl9FTl9Qb3MgKDFVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjRfUkVHOiBBTFdfRU5fREVNX0ZUREZfRU4gKEJpdCAxKSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjRfUkVHX0FMV19FTl9ERU1fRlRERl9FTl9Nc2sgKDB4MlVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjRfUkVHOiBBTFdfRU5fREVNX0ZUREZfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQwX1JYX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUMF9SWCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQwX1JYX01zayAoMHgxVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUMF9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDBfVFhfUG9zICgxVUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQwX1RYIChCaXQgMSkgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDBfVFhfTXNrICgweDJVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQwX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUMV9SWF9Qb3MgKDJVTCkgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDFfUlggKEJpdCAyKSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUMV9SWF9Nc2sgKDB4NFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDFfUlggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQxX1RYX1BvcyAoM1VMKSAgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUMV9UWCAoQml0IDMpICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQxX1RYX01zayAoMHg4VUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUMV9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDJfUlhfUG9zICg0VUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQyX1JYIChCaXQgNCkgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDJfUlhfTXNrICgweDEwVUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQyX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUMl9UWF9Qb3MgKDVVTCkgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDJfVFggKEJpdCA1KSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUMl9UWF9Nc2sgKDB4MjBVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDJfVFggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQzX1JYX1BvcyAoNlVMKSAgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUM19SWCAoQml0IDYpICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQzX1JYX01zayAoMHg0MFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUM19SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDNfVFhfUG9zICg3VUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQzX1RYIChCaXQgNykgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDNfVFhfTXNrICgweDgwVUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQzX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUNF9SWF9Qb3MgKDhVTCkgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDRfUlggKEJpdCA4KSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUNF9SWF9Nc2sgKDB4MTAwVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDRfUlggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQ0X1RYX1BvcyAoOVVMKSAgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUNF9UWCAoQml0IDkpICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQ0X1RYX01zayAoMHgyMDBVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUNF9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQwX1JYX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMF9SWCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQwX1JYX01zayAoMHgxVUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMF9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQwX1RYX1BvcyAoMVVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMF9UWCAoQml0IDEpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQwX1RYX01zayAoMHgyVUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMF9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQxX1JYX1BvcyAoMlVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMV9SWCAoQml0IDIpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQxX1JYX01zayAoMHg0VUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMV9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQxX1RYX1BvcyAoM1VMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMV9UWCAoQml0IDMpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQxX1RYX01zayAoMHg4VUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMV9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQyX1JYX1BvcyAoNFVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMl9SWCAoQml0IDQpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQyX1JYX01zayAoMHgxMFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMl9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQyX1RYX1BvcyAoNVVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMl9UWCAoQml0IDUpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQyX1RYX01zayAoMHgyMFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUMl9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQzX1JYX1BvcyAoNlVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUM19SWCAoQml0IDYpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQzX1JYX01zayAoMHg0MFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUM19SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQzX1RYX1BvcyAoN1VMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUM19UWCAoQml0IDcpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQzX1RYX01zayAoMHg4MFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUM19UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQ0X1JYX1BvcyAoOFVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUNF9SWCAoQml0IDgpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQ0X1JYX01zayAoMHgxMDBVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUNF9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQ0X1RYX1BvcyAoOVVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUNF9UWCAoQml0IDkpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQ0X1RYX01zayAoMHgyMDBVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0ZUREZfUkVHOiBSRl9QT1JUNF9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9QT1JUX1BPTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX1BPTF9SRUdfUkZfUE9SVDBfUE9MX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX1BPTF9SRUc6IFJGX1BPUlQwX1BPTCAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX1BPTF9SRUdfUkZfUE9SVDBfUE9MX01zayAoMHgxVUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX1BPTF9SRUc6IFJGX1BPUlQwX1BPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX1BPTF9SRUdfUkZfUE9SVDFfUE9MX1BvcyAoMVVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX1BPTF9SRUc6IFJGX1BPUlQxX1BPTCAoQml0IDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX1BPTF9SRUdfUkZfUE9SVDFfUE9MX01zayAoMHgyVUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX1BPTF9SRUc6IFJGX1BPUlQxX1BPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX1BPTF9SRUdfUkZfUE9SVDJfUE9MX1BvcyAoMlVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX1BPTF9SRUc6IFJGX1BPUlQyX1BPTCAoQml0IDIpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX1BPTF9SRUdfUkZfUE9SVDJfUE9MX01zayAoMHg0VUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX1BPTF9SRUc6IFJGX1BPUlQyX1BPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX1BPTF9SRUdfUkZfUE9SVDNfUE9MX1BvcyAoM1VMKSAgICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX1BPTF9SRUc6IFJGX1BPUlQzX1BPTCAoQml0IDMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX1BPTF9SRUdfUkZfUE9SVDNfUE9MX01zayAoMHg4VUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX1BPTF9SRUc6IFJGX1BPUlQzX1BPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX1BPTF9SRUdfUkZfUE9SVDRfUE9MX1BvcyAoNFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX1BPTF9SRUc6IFJGX1BPUlQ0X1BPTCAoQml0IDQpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX1BPTF9SRUdfUkZfUE9SVDRfUE9MX01zayAoMHgxMFVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX1BPTF9SRUc6IFJGX1BPUlQ0X1BPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ1JGUFQnIFBvc2l0aW9uICYgTWFzayAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGUFRfUkZQVF9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NUUkxfUkVHX1JGUFRfUEFDS19FTl9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NUUkxfUkVHOiBSRlBUX1BBQ0tfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NUUkxfUkVHX1JGUFRfUEFDS19FTl9Nc2sgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NUUkxfUkVHOiBSRlBUX1BBQ0tfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NUUkxfUkVHX1JGUFRfUEFDS19TRUxfUG9zICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NUUkxfUkVHOiBSRlBUX1BBQ0tfU0VMIChCaXQgMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NUUkxfUkVHX1JGUFRfUEFDS19TRUxfTXNrICAoMHg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NUUkxfUkVHOiBSRlBUX1BBQ0tfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NUUkxfUkVHX1JGUFRfUEFDS19BRENfVFlQRV9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NUUkxfUkVHOiBSRlBUX1BBQ0tfQURDX1RZUEUgKEJpdCAzKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NUUkxfUkVHX1JGUFRfUEFDS19BRENfVFlQRV9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NUUkxfUkVHOiBSRlBUX1BBQ0tfQURDX1RZUEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGUFRfUkZQVF9DVFJMX1JFR19SRlBUX0NJUkNfRU5fUG9zICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9DVFJMX1JFRzogUkZQVF9DSVJDX0VOIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9DVFJMX1JFR19SRlBUX0NJUkNfRU5fTXNrICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9DVFJMX1JFRzogUkZQVF9DSVJDX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9DVFJMX1JFR19SRlBUX0JSRVFfRk9SQ0VfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9DVFJMX1JFRzogUkZQVF9CUkVRX0ZPUkNFIChCaXQgNSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9DVFJMX1JFR19SRlBUX0JSRVFfRk9SQ0VfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9DVFJMX1JFRzogUkZQVF9CUkVRX0ZPUkNFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRlBUX1JGUFRfQUREUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGUFRfUkZQVF9BRERSTF9SRUdfUkZQVF9BRERSTF9Qb3MgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9BRERSTF9SRUc6IFJGUFRfQUREUkwgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9BRERSTF9SRUdfUkZQVF9BRERSTF9Nc2sgICAgKDB4ZmZmY1VMKSAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9BRERSTF9SRUc6IFJGUFRfQUREUkwgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRlBUX1JGUFRfQUREUkhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGUFRfUkZQVF9BRERSSF9SRUdfUkZQVF9BRERSSF9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9BRERSSF9SRUc6IFJGUFRfQUREUkggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9BRERSSF9SRUdfUkZQVF9BRERSSF9Nc2sgICAgKDB4M1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9BRERSSF9SRUc6IFJGUFRfQUREUkggKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZQVF9SRlBUX0xFTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGUFRfUkZQVF9MRU5fUkVHX1JGUFRfTEVOX1BvcyAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9MRU5fUkVHOiBSRlBUX0xFTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9MRU5fUkVHX1JGUFRfTEVOX01zayAgICAgICAgKDB4N2ZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9MRU5fUkVHOiBSRlBUX0xFTiAoQml0ZmllbGQtTWFzazogMHg3ZmZmKSAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRlBUX1JGUFRfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGUFRfUkZQVF9TVEFUX1JFR19SRlBUX0FDVElWRV9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9TVEFUX1JFRzogUkZQVF9BQ1RJVkUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9TVEFUX1JFR19SRlBUX0FDVElWRV9Nc2sgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9TVEFUX1JFRzogUkZQVF9BQ1RJVkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9TVEFUX1JFR19SRlBUX09GTE9XX1NUS19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9TVEFUX1JFRzogUkZQVF9PRkxPV19TVEsgKEJpdCAxKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9TVEFUX1JFR19SRlBUX09GTE9XX1NUS19Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9TVEFUX1JFRzogUkZQVF9PRkxPV19TVEsgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZQVF9SRlBUX0NSVl9BRERSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGUFRfUkZQVF9DUlZfQUREUkxfUkVHX1JGUFRfQ1JWX0FERFJMX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9DUlZfQUREUkxfUkVHOiBSRlBUX0NSVl9BRERSTCAoQml0IDIpICAgICAgICAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9DUlZfQUREUkxfUkVHX1JGUFRfQ1JWX0FERFJMX01zayAoMHhmZmZjVUwpICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9DUlZfQUREUkxfUkVHOiBSRlBUX0NSVl9BRERSTCAoQml0ZmllbGQtTWFzazogMHgzZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGUFRfUkZQVF9DUlZfQUREUkhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRlBUX1JGUFRfQ1JWX0FERFJIX1JFR19SRlBUX0NSVl9BRERSSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBSRlBUIFJGUFRfQ1JWX0FERFJIX1JFRzogUkZQVF9DUlZfQUREUkggKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBSRlBUX1JGUFRfQ1JWX0FERFJIX1JFR19SRlBUX0NSVl9BRERSSF9Nc2sgKDB4M1VMKSAgICAgICAgICAgICAgLyohPCBSRlBUIFJGUFRfQ1JWX0FERFJIX1JFRzogUkZQVF9DUlZfQUREUkggKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGUFRfUkZQVF9DUlZfTEVOX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGUFRfUkZQVF9DUlZfTEVOX1JFR19SRlBUX0NSVl9MRU5fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9DUlZfTEVOX1JFRzogUkZQVF9DUlZfTEVOIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9DUlZfTEVOX1JFR19SRlBUX0NSVl9MRU5fTXNrICgweDdmZmZVTCkgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9DUlZfTEVOX1JFRzogUkZQVF9DUlZfTEVOIChCaXRmaWVsZC1NYXNrOiAweDdmZmYpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdTUEknIFBvc2l0aW9uICYgTWFzayAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU1BJX1NQSV9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX09OX1BvcyAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9PTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX09OX01zayAgICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1BIQV9Qb3MgICAgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9QSEEgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1BIQV9Nc2sgICAgICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9QSEEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1BPTF9Qb3MgICAgICAgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9QT0wgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1BPTF9Nc2sgICAgICAgICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9QT0wgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0NMS19Qb3MgICAgICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9DTEsgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0NMS19Nc2sgICAgICAgICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9DTEsgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0RPX1BvcyAgICAgICAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9ETyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0RPX01zayAgICAgICAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9ETyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1NNTl9Qb3MgICAgICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9TTU4gKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1NNTl9Nc2sgICAgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9TTU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1dPUkRfUG9zICAgICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9XT1JEIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1dPUkRfTXNrICAgICAgICAgKDB4MTgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9XT1JEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1JTVF9Qb3MgICAgICAgICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9SU1QgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1JTVF9Nc2sgICAgICAgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9SU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0ZPUkNFX0RPX1BvcyAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9GT1JDRV9ETyAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0ZPUkNFX0RPX01zayAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9GT1JDRV9ETyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1RYSF9Qb3MgICAgICAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9UWEggKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX1RYSF9Nc2sgICAgICAgICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9UWEggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0RJX1BvcyAgICAgICAgICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9ESSAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0RJX01zayAgICAgICAgICAgKDB4MTAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9ESSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0lOVF9CSVRfUG9zICAgICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9JTlRfQklUIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0lOVF9CSVRfTXNrICAgICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9JTlRfQklUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX01JTlRfUG9zICAgICAgICAgKDE0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9NSU5UIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX01JTlRfTXNrICAgICAgICAgKDB4NDAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9NSU5UIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0VOX0NUUkxfUG9zICAgICAgKDE1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9FTl9DVFJMIChCaXQgMTUpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUdfU1BJX0VOX0NUUkxfTXNrICAgICAgKDB4ODAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUc6IFNQSV9FTl9DVFJMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTUElfU1BJX1JYX1RYX1JFRzAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFNQSV9TUElfUlhfVFhfUkVHMF9TUElfREFUQTBfUG9zICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfUlhfVFhfUkVHMDogU1BJX0RBVEEwIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfUlhfVFhfUkVHMF9TUElfREFUQTBfTXNrICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfUlhfVFhfUkVHMDogU1BJX0RBVEEwIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTUElfU1BJX1JYX1RYX1JFRzEgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFNQSV9TUElfUlhfVFhfUkVHMV9TUElfREFUQTFfUG9zICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfUlhfVFhfUkVHMTogU1BJX0RBVEExIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfUlhfVFhfUkVHMV9TUElfREFUQTFfTXNrICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfUlhfVFhfUkVHMTogU1BJX0RBVEExIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFNQSV9TUElfQ0xFQVJfSU5UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFNQSV9TUElfQ0xFQVJfSU5UX1JFR19TUElfQ0xFQVJfSU5UX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ0xFQVJfSU5UX1JFRzogU1BJX0NMRUFSX0lOVCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ0xFQVJfSU5UX1JFR19TUElfQ0xFQVJfSU5UX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ0xFQVJfSU5UX1JFRzogU1BJX0NMRUFSX0lOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFNQSV9TUElfQ1RSTF9SRUcxICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBTUElfU1BJX0NUUkxfUkVHMV9TUElfRklGT19NT0RFX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkgU1BJX0NUUkxfUkVHMTogU1BJX0ZJRk9fTU9ERSAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUElfU1BJX0NUUkxfUkVHMV9TUElfRklGT19NT0RFX01zayAgICgweDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBTUEkgU1BJX0NUUkxfUkVHMTogU1BJX0ZJRk9fTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworI2RlZmluZSBTUElfU1BJX0NUUkxfUkVHMV9TUElfUFJJT1JJVFlfUG9zICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkgU1BJX0NUUkxfUkVHMTogU1BJX1BSSU9SSVRZIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUElfU1BJX0NUUkxfUkVHMV9TUElfUFJJT1JJVFlfTXNrICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBTUEkgU1BJX0NUUkxfUkVHMTogU1BJX1BSSU9SSVRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBTUElfU1BJX0NUUkxfUkVHMV9TUElfQlVTWV9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkgU1BJX0NUUkxfUkVHMTogU1BJX0JVU1kgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUElfU1BJX0NUUkxfUkVHMV9TUElfQlVTWV9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBTUEkgU1BJX0NUUkxfUkVHMTogU1BJX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBTUElfU1BJX0NUUkxfUkVHMV9TUElfOUJJVF9WQUxfUG9zICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkgU1BJX0NUUkxfUkVHMTogU1BJXzlCSVRfVkFMIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUElfU1BJX0NUUkxfUkVHMV9TUElfOUJJVF9WQUxfTXNrICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBTUEkgU1BJX0NUUkxfUkVHMTogU1BJXzlCSVRfVkFMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnU1BJMicgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU1BJMl9TUEkyX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX09OX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9PTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX09OX01zayAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1BIQV9Qb3MgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9QSEEgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1BIQV9Nc2sgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9QSEEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1BPTF9Qb3MgICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9QT0wgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1BPTF9Nc2sgICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9QT0wgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0NMS19Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9DTEsgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0NMS19Nc2sgICAgICAgICgweDE4VUwpICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9DTEsgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0RPX1BvcyAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9ETyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0RPX01zayAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9ETyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1NNTl9Qb3MgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9TTU4gKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1NNTl9Nc2sgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9TTU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1dPUkRfUG9zICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9XT1JEIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1dPUkRfTXNrICAgICAgICgweDE4MFVMKSAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9XT1JEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1JTVF9Qb3MgICAgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9SU1QgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1JTVF9Nc2sgICAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9SU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0ZPUkNFX0RPX1BvcyAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9GT1JDRV9ETyAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0ZPUkNFX0RPX01zayAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9GT1JDRV9ETyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1RYSF9Qb3MgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9UWEggKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX1RYSF9Nc2sgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9UWEggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0RJX1BvcyAgICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9ESSAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0RJX01zayAgICAgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9ESSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0lOVF9CSVRfUG9zICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9JTlRfQklUIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0lOVF9CSVRfTXNrICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9JTlRfQklUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX01JTlRfUG9zICAgICAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9NSU5UIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX01JTlRfTXNrICAgICAgICgweDQwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9NSU5UIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0VOX0NUUkxfUG9zICAgICgxNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9FTl9DVFJMIChCaXQgMTUpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUdfU1BJX0VOX0NUUkxfTXNrICAgICgweDgwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUc6IFNQSV9FTl9DVFJMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTUEkyX1NQSTJfUlhfVFhfUkVHMCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBTUEkyX1NQSTJfUlhfVFhfUkVHMF9TUElfREFUQTBfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfUlhfVFhfUkVHMDogU1BJX0RBVEEwIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfUlhfVFhfUkVHMF9TUElfREFUQTBfTXNrICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfUlhfVFhfUkVHMDogU1BJX0RBVEEwIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTUEkyX1NQSTJfUlhfVFhfUkVHMSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBTUEkyX1NQSTJfUlhfVFhfUkVHMV9TUElfREFUQTFfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfUlhfVFhfUkVHMTogU1BJX0RBVEExIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfUlhfVFhfUkVHMV9TUElfREFUQTFfTXNrICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfUlhfVFhfUkVHMTogU1BJX0RBVEExIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFNQSTJfU1BJMl9DTEVBUl9JTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBTUEkyX1NQSTJfQ0xFQVJfSU5UX1JFR19TUElfQ0xFQVJfSU5UX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ0xFQVJfSU5UX1JFRzogU1BJX0NMRUFSX0lOVCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ0xFQVJfSU5UX1JFR19TUElfQ0xFQVJfSU5UX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ0xFQVJfSU5UX1JFRzogU1BJX0NMRUFSX0lOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU1BJMl9TUEkyX0NUUkxfUkVHMSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUcxX1NQSV9GSUZPX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUcxOiBTUElfRklGT19NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUcxX1NQSV9GSUZPX01PREVfTXNrICgweDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUcxOiBTUElfRklGT19NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUcxX1NQSV9QUklPUklUWV9Qb3MgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUcxOiBTUElfUFJJT1JJVFkgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUcxX1NQSV9QUklPUklUWV9Nc2sgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUcxOiBTUElfUFJJT1JJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUcxX1NQSV9CVVNZX1BvcyAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUcxOiBTUElfQlVTWSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUcxX1NQSV9CVVNZX01zayAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUcxOiBTUElfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUcxX1NQSV85QklUX1ZBTF9Qb3MgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUcxOiBTUElfOUJJVF9WQUwgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1NQSTJfQ1RSTF9SRUcxX1NQSV85QklUX1ZBTF9Nc2sgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFNQSTJfQ1RSTF9SRUcxOiBTUElfOUJJVF9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgc3RydWN0ICdUSU1FUjEnIFBvc2l0aW9uICYgTWFzayAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9FTl9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9FTl9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9PTkVTSE9UX01PREVfRU5fUG9zICgxVUwpICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fT05FU0hPVF9NT0RFX0VOIChCaXQgMSkgICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9PTkVTSE9UX01PREVfRU5fTXNrICgweDJVTCkgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fT05FU0hPVF9NT0RFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9DT1VOVF9ET1dOX0VOX1BvcyAoMlVMKSAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fQ09VTlRfRE9XTl9FTiAoQml0IDIpICAgICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9DT1VOVF9ET1dOX0VOX01zayAoMHg0VUwpICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fQ09VTlRfRE9XTl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DVFJMX1JFR19DQVBUSU1fSU4xX0VWRU5UX0ZBTExfRU5fUG9zICgzVUwpICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9DVFJMX1JFRzogQ0FQVElNX0lOMV9FVkVOVF9GQUxMX0VOIChCaXQgMykgICAgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DVFJMX1JFR19DQVBUSU1fSU4xX0VWRU5UX0ZBTExfRU5fTXNrICgweDhVTCkgICAgIC8qITwgVElNRVIxIENBUFRJTV9DVFJMX1JFRzogQ0FQVElNX0lOMV9FVkVOVF9GQUxMX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9JTjJfRVZFTlRfRkFMTF9FTl9Qb3MgKDRVTCkgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fSU4yX0VWRU5UX0ZBTExfRU4gKEJpdCA0KSAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9JTjJfRVZFTlRfRkFMTF9FTl9Nc2sgKDB4MTBVTCkgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fSU4yX0VWRU5UX0ZBTExfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0lSUV9FTl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9JUlFfRU4gKEJpdCA1KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0lSUV9FTl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9JUlFfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0ZSRUVfUlVOX01PREVfRU5fUG9zICg2VUwpICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9GUkVFX1JVTl9NT0RFX0VOIChCaXQgNikgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0ZSRUVfUlVOX01PREVfRU5fTXNrICgweDQwVUwpICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9GUkVFX1JVTl9NT0RFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9TWVNfQ0xLX0VOX1BvcyAoN1VMKSAgICAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fU1lTX0NMS19FTiAoQml0IDcpICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9TWVNfQ0xLX0VOX01zayAoMHg4MFVMKSAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fU1lTX0NMS19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9USU1FUl9WQUxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9USU1FUl9WQUxfUkVHX0NBUFRJTV9USU1FUl9WQUxVRV9Qb3MgKDBVTCkgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9USU1FUl9WQUxfUkVHOiBDQVBUSU1fVElNRVJfVkFMVUUgKEJpdCAwKSAgICAgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9USU1FUl9WQUxfUkVHX0NBUFRJTV9USU1FUl9WQUxVRV9Nc2sgKDB4ZmZmZlVMKSAgIC8qITwgVElNRVIxIENBUFRJTV9USU1FUl9WQUxfUkVHOiBDQVBUSU1fVElNRVJfVkFMVUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9TVEFUVVNfUkVHX0NBUFRJTV9JTjFfU1RBVEVfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9TVEFUVVNfUkVHOiBDQVBUSU1fSU4xX1NUQVRFIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9TVEFUVVNfUkVHX0NBUFRJTV9JTjFfU1RBVEVfTXNrICgweDFVTCkgICAgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9TVEFUVVNfUkVHOiBDQVBUSU1fSU4xX1NUQVRFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1NUQVRVU19SRUdfQ0FQVElNX0lOMl9TVEFURV9Qb3MgKDFVTCkgICAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1NUQVRVU19SRUc6IENBUFRJTV9JTjJfU1RBVEUgKEJpdCAxKSAgICAgICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1NUQVRVU19SRUdfQ0FQVElNX0lOMl9TVEFURV9Nc2sgKDB4MlVMKSAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1NUQVRVU19SRUc6IENBUFRJTV9JTjJfU1RBVEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fU1RBVFVTX1JFR19DQVBUSU1fT05FU0hPVF9QSEFTRV9Qb3MgKDJVTCkgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fU1RBVFVTX1JFRzogQ0FQVElNX09ORVNIT1RfUEhBU0UgKEJpdCAyKSAgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fU1RBVFVTX1JFR19DQVBUSU1fT05FU0hPVF9QSEFTRV9Nc2sgKDB4Y1VMKSAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fU1RBVFVTX1JFRzogQ0FQVElNX09ORVNIT1RfUEhBU0UgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9HUElPMV9DT05GX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fR1BJTzFfQ09ORl9SRUdfQ0FQVElNX0dQSU8xX0NPTkZfUG9zICgwVUwpICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fR1BJTzFfQ09ORl9SRUc6IENBUFRJTV9HUElPMV9DT05GIChCaXQgMCkgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fR1BJTzFfQ09ORl9SRUdfQ0FQVElNX0dQSU8xX0NPTkZfTXNrICgweDNmVUwpICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fR1BJTzFfQ09ORl9SRUc6IENBUFRJTV9HUElPMV9DT05GIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fR1BJTzJfQ09ORl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0dQSU8yX0NPTkZfUkVHX0NBUFRJTV9HUElPMl9DT05GX1BvcyAoMFVMKSAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0dQSU8yX0NPTkZfUkVHOiBDQVBUSU1fR1BJTzJfQ09ORiAoQml0IDApICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0dQSU8yX0NPTkZfUkVHX0NBUFRJTV9HUElPMl9DT05GX01zayAoMHgzZlVMKSAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0dQSU8yX0NPTkZfUkVHOiBDQVBUSU1fR1BJTzJfQ09ORiAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fUkVMT0FEX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9SRUxPQURfUkVHX0NBUFRJTV9SRUxPQURfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9SRUxPQURfUkVHOiBDQVBUSU1fUkVMT0FEIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9SRUxPQURfUkVHX0NBUFRJTV9SRUxPQURfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9SRUxPQURfUkVHOiBDQVBUSU1fUkVMT0FEIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fU0hPVFdJRFRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fU0hPVFdJRFRIX1JFR19DQVBUSU1fU0hPVFdJRFRIX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fU0hPVFdJRFRIX1JFRzogQ0FQVElNX1NIT1RXSURUSCAoQml0IDApICAgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fU0hPVFdJRFRIX1JFR19DQVBUSU1fU0hPVFdJRFRIX01zayAoMHhmZmZmVUwpICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fU0hPVFdJRFRIX1JFRzogQ0FQVElNX1NIT1RXSURUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBUSU1FUjFfQ0FQVElNX1BSRVNDQUxFUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1BSRVNDQUxFUl9SRUdfQ0FQVElNX1BSRVNDQUxFUl9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1BSRVNDQUxFUl9SRUc6IENBUFRJTV9QUkVTQ0FMRVIgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1BSRVNDQUxFUl9SRUdfQ0FQVElNX1BSRVNDQUxFUl9Nc2sgKDB4ZmZmZlVMKSAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1BSRVNDQUxFUl9SRUc6IENBUFRJTV9QUkVTQ0FMRVIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fQ0FQVFVSRV9HUElPMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DQVBUVVJFX0dQSU8xX1JFR19DQVBUSU1fQ0FQVFVSRV9HUElPMV9Qb3MgKDBVTCkgIC8qITwgVElNRVIxIENBUFRJTV9DQVBUVVJFX0dQSU8xX1JFRzogQ0FQVElNX0NBUFRVUkVfR1BJTzEgKEJpdCAwKSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NBUFRVUkVfR1BJTzFfUkVHX0NBUFRJTV9DQVBUVVJFX0dQSU8xX01zayAoMHhmZmZmVUwpIC8qITwgVElNRVIxIENBUFRJTV9DQVBUVVJFX0dQSU8xX1JFRzogQ0FQVElNX0NBUFRVUkVfR1BJTzEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fQ0FQVFVSRV9HUElPMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DQVBUVVJFX0dQSU8yX1JFR19DQVBUSU1fQ0FQVFVSRV9HUElPMl9Qb3MgKDBVTCkgIC8qITwgVElNRVIxIENBUFRJTV9DQVBUVVJFX0dQSU8yX1JFRzogQ0FQVElNX0NBUFRVUkVfR1BJTzIgKEJpdCAwKSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NBUFRVUkVfR1BJTzJfUkVHX0NBUFRJTV9DQVBUVVJFX0dQSU8yX01zayAoMHhmZmZmVUwpIC8qITwgVElNRVIxIENBUFRJTV9DQVBUVVJFX0dQSU8yX1JFRzogQ0FQVElNX0NBUFRVUkVfR1BJTzIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fUFJFU0NBTEVSX1ZBTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9QUkVTQ0FMRVJfVkFMX1JFR19DQVBUSU1fUFJFU0NBTEVSX1ZBTF9Qb3MgKDBVTCkgIC8qITwgVElNRVIxIENBUFRJTV9QUkVTQ0FMRVJfVkFMX1JFRzogQ0FQVElNX1BSRVNDQUxFUl9WQUwgKEJpdCAwKSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1BSRVNDQUxFUl9WQUxfUkVHX0NBUFRJTV9QUkVTQ0FMRVJfVkFMX01zayAoMHhmZmZmVUwpIC8qITwgVElNRVIxIENBUFRJTV9QUkVTQ0FMRVJfVkFMX1JFRzogQ0FQVElNX1BSRVNDQUxFUl9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9QV01fRlJFUV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9QV01fRlJFUV9SRUdfQ0FQVElNX1BXTV9GUkVRX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9QV01fRlJFUV9SRUc6IENBUFRJTV9QV01fRlJFUSAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9QV01fRlJFUV9SRUdfQ0FQVElNX1BXTV9GUkVRX01zayAoMHhmZmZmVUwpICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9QV01fRlJFUV9SRUc6IENBUFRJTV9QV01fRlJFUSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9QV01fRENfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1BXTV9EQ19SRUdfQ0FQVElNX1BXTV9EQ19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1BXTV9EQ19SRUc6IENBUFRJTV9QV01fREMgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1BXTV9EQ19SRUdfQ0FQVElNX1BXTV9EQ19Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1BXTV9EQ19SRUc6IENBUFRJTV9QV01fREMgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBUSU1FUjFfQ0FQVElNX1RJTUVSX0hWQUxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9USU1FUl9IVkFMX1JFR19DQVBUSU1fVElNRVJfSFZBTFVFX1BvcyAoMFVMKSAgICAgIC8qITwgVElNRVIxIENBUFRJTV9USU1FUl9IVkFMX1JFRzogQ0FQVElNX1RJTUVSX0hWQUxVRSAoQml0IDApICAgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9USU1FUl9IVkFMX1JFR19DQVBUSU1fVElNRVJfSFZBTFVFX01zayAoMHhmZmZmVUwpIC8qITwgVElNRVIxIENBUFRJTV9USU1FUl9IVkFMX1JFRzogQ0FQVElNX1RJTUVSX0hWQUxVRSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fUkVMT0FEX0hJR0hfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1JFTE9BRF9ISUdIX1JFR19DQVBUSU1fUkVMT0FEX0hJR0hfUG9zICgwVUwpICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1JFTE9BRF9ISUdIX1JFRzogQ0FQVElNX1JFTE9BRF9ISUdIIChCaXQgMCkgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1JFTE9BRF9ISUdIX1JFR19DQVBUSU1fUkVMT0FEX0hJR0hfTXNrICgweGZmZmZVTCkgLyohPCBUSU1FUjEgQ0FQVElNX1JFTE9BRF9ISUdIX1JFRzogQ0FQVElNX1JFTE9BRF9ISUdIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tICBUSU1FUjFfQ0FQVElNX0NBUFRVUkVfSElHSF9HUElPMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8xX1JFR19DQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8xX1BvcyAoMFVMKSAvKiE8IFRJTUVSMSBDQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8xX1JFRzogQ0FQVElNX0NBUFRVUkVfSElHSF9HUElPMSAoQml0IDApICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8xX1JFR19DQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8xX01zayAoMHhmZmZmVUwpIC8qITwgVElNRVIxIENBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzFfUkVHOiBDQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8xIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tICBUSU1FUjFfQ0FQVElNX0NBUFRVUkVfSElHSF9HUElPMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8yX1JFR19DQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8yX1BvcyAoMFVMKSAvKiE8IFRJTUVSMSBDQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8yX1JFRzogQ0FQVElNX0NBUFRVUkVfSElHSF9HUElPMiAoQml0IDApICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8yX1JFR19DQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8yX01zayAoMHhmZmZmVUwpIC8qITwgVElNRVIxIENBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzJfUkVHOiBDQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8yIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fU0hPVFdJRFRIX0hJR0hfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fU0hPVFdJRFRIX0hJR0hfUkVHX0NBUFRJTV9TSE9UV0lEVEhfSElHSF9Qb3MgKDBVTCkgLyohPCBUSU1FUjEgQ0FQVElNX1NIT1RXSURUSF9ISUdIX1JFRzogQ0FQVElNX1NIT1RXSURUSF9ISUdIIChCaXQgMCkgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9TSE9UV0lEVEhfSElHSF9SRUdfQ0FQVElNX1NIT1RXSURUSF9ISUdIX01zayAoMHhmZmZmVUwpIC8qITwgVElNRVIxIENBUFRJTV9TSE9UV0lEVEhfSElHSF9SRUc6IENBUFRJTV9TSE9UV0lEVEhfSElHSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnVFJORycgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVFJOR19UUk5HX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUUk5HX1RSTkdfQ1RSTF9SRUdfVFJOR19FTkFCTEVfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfQ1RSTF9SRUc6IFRSTkdfRU5BQkxFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX1RSTkdfQ1RSTF9SRUdfVFJOR19FTkFCTEVfTXNrICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfQ1RSTF9SRUc6IFRSTkdfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBUUk5HX1RSTkdfQ1RSTF9SRUdfVFJOR19NT0RFX1BvcyAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfQ1RSTF9SRUc6IFRSTkdfTU9ERSAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX1RSTkdfQ1RSTF9SRUdfVFJOR19NT0RFX01zayAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfQ1RSTF9SRUc6IFRSTkdfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBUUk5HX1RSTkdfRklGT0xWTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUUk5HX1RSTkdfRklGT0xWTF9SRUdfVFJOR19GSUZPTFZMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfRklGT0xWTF9SRUc6IFRSTkdfRklGT0xWTCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX1RSTkdfRklGT0xWTF9SRUdfVFJOR19GSUZPTFZMX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfRklGT0xWTF9SRUc6IFRSTkdfRklGT0xWTCAoQml0ZmllbGQtTWFzazogMHgxZikgICAqLworI2RlZmluZSBUUk5HX1RSTkdfRklGT0xWTF9SRUdfVFJOR19GSUZPRlVMTF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfRklGT0xWTF9SRUc6IFRSTkdfRklGT0ZVTEwgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX1RSTkdfRklGT0xWTF9SRUdfVFJOR19GSUZPRlVMTF9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfRklGT0xWTF9SRUc6IFRSTkdfRklGT0ZVTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRSTkdfVFJOR19WRVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUUk5HX1RSTkdfVkVSX1JFR19UUk5HX1NWTl9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfVkVSX1JFRzogVFJOR19TVk4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX1RSTkdfVkVSX1JFR19UUk5HX1NWTl9Nc2sgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfVkVSX1JFRzogVFJOR19TVk4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAqLworI2RlZmluZSBUUk5HX1RSTkdfVkVSX1JFR19UUk5HX01JTl9Qb3MgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfVkVSX1JFRzogVFJOR19NSU4gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX1RSTkdfVkVSX1JFR19UUk5HX01JTl9Nc2sgICAgICAgICgweGZmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfVkVSX1JFRzogVFJOR19NSU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX1RSTkdfVkVSX1JFR19UUk5HX01BSl9Qb3MgICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfVkVSX1JFRzogVFJOR19NQUogKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX1RSTkdfVkVSX1JFR19UUk5HX01BSl9Nc2sgICAgICAgICgweGZmMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBUUk5HIFRSTkdfVkVSX1JFRzogVFJOR19NQUogKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnVUFSVCcgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVF9VQVJUX1JCUl9USFJfRExMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfUkJSX1RIUl9ETExfUkVHX1JCUl9USFJfRExMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfUkJSX1RIUl9ETExfUkVHOiBSQlJfVEhSX0RMTCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfUkJSX1RIUl9ETExfUkVHX1JCUl9USFJfRExMX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfUkJSX1RIUl9ETExfUkVHOiBSQlJfVEhSX0RMTCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVF9VQVJUX0lFUl9ETEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0lFUl9ETEhfUkVHX0VSQkZJX2RsaDBfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0lFUl9ETEhfUkVHOiBFUkJGSV9kbGgwIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0lFUl9ETEhfUkVHX0VSQkZJX2RsaDBfTXNrICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0lFUl9ETEhfUkVHOiBFUkJGSV9kbGgwIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0lFUl9ETEhfUkVHX0VUQkVJX2RsaDFfUG9zICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0lFUl9ETEhfUkVHOiBFVEJFSV9kbGgxIChCaXQgMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0lFUl9ETEhfUkVHX0VUQkVJX2RsaDFfTXNrICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0lFUl9ETEhfUkVHOiBFVEJFSV9kbGgxIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0lFUl9ETEhfUkVHX0VMU0lfZGhsMl9Qb3MgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0lFUl9ETEhfUkVHOiBFTFNJX2RobDIgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0lFUl9ETEhfUkVHX0VMU0lfZGhsMl9Nc2sgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0lFUl9ETEhfUkVHOiBFTFNJX2RobDIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0lFUl9ETEhfUkVHX1BUSU1FX2RsaDdfUG9zICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0lFUl9ETEhfUkVHOiBQVElNRV9kbGg3IChCaXQgNykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0lFUl9ETEhfUkVHX1BUSU1FX2RsaDdfTXNrICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0lFUl9ETEhfUkVHOiBQVElNRV9kbGg3IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVF9VQVJUX0lJUl9GQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0lJUl9GQ1JfUkVHX0lJUl9GQ1JfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0lJUl9GQ1JfUkVHOiBJSVJfRkNSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0lJUl9GQ1JfUkVHX0lJUl9GQ1JfTXNrICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0lJUl9GQ1JfUkVHOiBJSVJfRkNSIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUX1VBUlRfTENSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9ETFNfUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfRExTIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9ETFNfTXNrICAgICAgICAoMHgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfRExTIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9TVE9QX1BvcyAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfU1RPUCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9TVE9QX01zayAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfU1RPUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9QRU5fUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfUEVOIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9QRU5fTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfUEVOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9FUFNfUG9zICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfRVBTIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9FUFNfTXNrICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfRVBTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9CQ19Qb3MgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfQkMgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9CQ19Nc2sgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfQkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9ETEFCX1BvcyAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfRExBQiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9ETEFCX01zayAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xDUl9SRUc6IFVBUlRfRExBQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUX1VBUlRfTUNSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVF9VQVJUX01DUl9SRUdfVUFSVF9PVVQxX1BvcyAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX01DUl9SRUc6IFVBUlRfT1VUMSAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX01DUl9SRUdfVUFSVF9PVVQxX01zayAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX01DUl9SRUc6IFVBUlRfT1VUMSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX01DUl9SRUdfVUFSVF9PVVQyX1BvcyAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX01DUl9SRUc6IFVBUlRfT1VUMiAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX01DUl9SRUdfVUFSVF9PVVQyX01zayAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX01DUl9SRUc6IFVBUlRfT1VUMiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX01DUl9SRUdfVUFSVF9MQl9Qb3MgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX01DUl9SRUc6IFVBUlRfTEIgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX01DUl9SRUdfVUFSVF9MQl9Nc2sgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX01DUl9SRUc6IFVBUlRfTEIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX01DUl9SRUdfVUFSVF9TSVJFX1BvcyAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX01DUl9SRUc6IFVBUlRfU0lSRSAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX01DUl9SRUdfVUFSVF9TSVJFX01zayAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX01DUl9SRUc6IFVBUlRfU0lSRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUX1VBUlRfTFNSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9EUl9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfRFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9EUl9Nc2sgICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfRFIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9PRV9Qb3MgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfT0UgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9PRV9Nc2sgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfT0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9QRV9Qb3MgICAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfUEUgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9QRV9Nc2sgICAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfUEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9GRV9Qb3MgICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfRkUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9GRV9Nc2sgICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfRkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9CSV9Qb3MgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfQkkgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9CSV9Nc2sgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfQkkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9USFJFX1BvcyAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfVEhSRSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9USFJFX01zayAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfVEhSRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9URU1UX1BvcyAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfVEVNVCAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX0xTUl9SRUdfVUFSVF9URU1UX01zayAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX0xTUl9SRUc6IFVBUlRfVEVNVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUX1VBUlRfU0NSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVF9VQVJUX1NDUl9SRUdfVUFSVF9TQ1JBVENIX1BBRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX1NDUl9SRUc6IFVBUlRfU0NSQVRDSF9QQUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX1NDUl9SRUdfVUFSVF9TQ1JBVENIX1BBRF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX1NDUl9SRUc6IFVBUlRfU0NSQVRDSF9QQUQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUX1VBUlRfVVNSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVF9VQVJUX1VTUl9SRUdfVUFSVF9CVVNZX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX1VTUl9SRUc6IFVBUlRfQlVTWSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX1VTUl9SRUdfVUFSVF9CVVNZX01zayAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX1VTUl9SRUc6IFVBUlRfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUX1VBUlRfU1JSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVF9VQVJUX1NSUl9SRUdfVUFSVF9VUl9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX1NSUl9SRUc6IFVBUlRfVVIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX1NSUl9SRUdfVUFSVF9VUl9Nc2sgICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVCBVQVJUX1NSUl9SRUc6IFVBUlRfVVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlRfVUFSVF9TQkNSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVF9VQVJUX1NCQ1JfUkVHX1VBUlRfU0hBRE9XX0JSRUFLX0NPTlRST0xfUG9zICgwVUwpICAgICAgICAgIC8qITwgVUFSVCBVQVJUX1NCQ1JfUkVHOiBVQVJUX1NIQURPV19CUkVBS19DT05UUk9MIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9VQVJUX1NCQ1JfUkVHX1VBUlRfU0hBRE9XX0JSRUFLX0NPTlRST0xfTXNrICgweDFVTCkgICAgICAgIC8qITwgVUFSVCBVQVJUX1NCQ1JfUkVHOiBVQVJUX1NIQURPV19CUkVBS19DT05UUk9MIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVF9VQVJUX0RNQVNBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfRE1BU0FfUkVHX0RNQVNBX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfRE1BU0FfUkVHOiBETUFTQSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfRE1BU0FfUkVHX0RNQVNBX01zayAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfRE1BU0FfUkVHOiBETUFTQSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlRfVUFSVF9ETEZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfRExGX1JFR19VQVJUX0RMRl9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfRExGX1JFRzogVUFSVF9ETEYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfRExGX1JFR19VQVJUX0RMRl9Nc2sgICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfRExGX1JFRzogVUFSVF9ETEYgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlRfVUFSVF9DUFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfQ1BSX1JFR19DUFJfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfQ1BSX1JFRzogQ1BSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfQ1BSX1JFR19DUFJfTXNrICAgICAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfQ1BSX1JFRzogQ1BSIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlRfVUFSVF9VQ1ZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfVUNWX1JFR19VQ1ZfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfVUNWX1JFRzogVUNWIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfVUNWX1JFR19VQ1ZfTXNrICAgICAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfVUNWX1JFRzogVUNWIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlRfVUFSVF9DVFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfQ1RSX1JFR19DVFJfUG9zICAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfQ1RSX1JFRzogQ1RSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfQ1RSX1JFR19DVFJfTXNrICAgICAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfQ1RSX1JFRzogQ1RSIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICAgICAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgc3RydWN0ICdVQVJUMicgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9SQlJfVEhSX0RMTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9SQlJfVEhSX0RMTF9SRUdfUkJSX1RIUl9ETExfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9SQlJfVEhSX0RMTF9SRUc6IFJCUl9USFJfRExMIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9SQlJfVEhSX0RMTF9SRUdfUkJSX1RIUl9ETExfTXNrICgweGZmVUwpICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9SQlJfVEhSX0RMTF9SRUc6IFJCUl9USFJfRExMIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX0lFUl9ETEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9JRVJfRExIX1JFR19FUkJGSV9kbGgwX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9JRVJfRExIX1JFRzogRVJCRklfZGxoMCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9JRVJfRExIX1JFR19FUkJGSV9kbGgwX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9JRVJfRExIX1JFRzogRVJCRklfZGxoMCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9JRVJfRExIX1JFR19FVEJFSV9kbGgxX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9JRVJfRExIX1JFRzogRVRCRUlfZGxoMSAoQml0IDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9JRVJfRExIX1JFR19FVEJFSV9kbGgxX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9JRVJfRExIX1JFRzogRVRCRUlfZGxoMSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9JRVJfRExIX1JFR19FTFNJX2RobDJfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9JRVJfRExIX1JFRzogRUxTSV9kaGwyIChCaXQgMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9JRVJfRExIX1JFR19FTFNJX2RobDJfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9JRVJfRExIX1JFRzogRUxTSV9kaGwyIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9JRVJfRExIX1JFR19QVElNRV9kbGg3X1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9JRVJfRExIX1JFRzogUFRJTUVfZGxoNyAoQml0IDcpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9JRVJfRExIX1JFR19QVElNRV9kbGg3X01zayAoMHg4MFVMKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9JRVJfRExIX1JFRzogUFRJTUVfZGxoNyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX0lJUl9GQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9JSVJfRkNSX1JFR19JSVJfRkNSX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9JSVJfRkNSX1JFRzogSUlSX0ZDUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9JSVJfRkNSX1JFR19JSVJfRkNSX01zayAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9JSVJfRkNSX1JFRzogSUlSX0ZDUiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfTENSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfRExTX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX0RMUyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfRExTX01zayAgICAgICgweDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX0RMUyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfU1RPUF9Qb3MgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX1NUT1AgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfU1RPUF9Nc2sgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX1NUT1AgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfUEVOX1BvcyAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX1BFTiAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfUEVOX01zayAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX1BFTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfRVBTX1BvcyAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX0VQUyAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfRVBTX01zayAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX0VQUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfQkNfUG9zICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX0JDIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfQkNfTXNrICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX0JDIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfRExBQl9Qb3MgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX0RMQUIgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MQ1JfUkVHX1VBUlRfRExBQl9Nc2sgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MQ1JfUkVHOiBVQVJUX0RMQUIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfTUNSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfUlRTX1BvcyAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX1JUUyAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfUlRTX01zayAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX1JUUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfT1VUMV9Qb3MgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX09VVDEgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfT1VUMV9Nc2sgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX09VVDEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfT1VUMl9Qb3MgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX09VVDIgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfT1VUMl9Nc2sgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX09VVDIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfTEJfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX0xCIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfTEJfTXNrICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX0xCIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfQUZDRV9Qb3MgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX0FGQ0UgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfQUZDRV9Nc2sgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX0FGQ0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfU0lSRV9Qb3MgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX1NJUkUgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NQ1JfUkVHX1VBUlRfU0lSRV9Nc2sgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NQ1JfUkVHOiBVQVJUX1NJUkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfTFNSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfRFJfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX0RSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfRFJfTXNrICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX0RSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfT0VfUG9zICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX09FIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfT0VfTXNrICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX09FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfUEVfUG9zICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX1BFIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfUEVfTXNrICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX1BFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfRkVfUG9zICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX0ZFIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfRkVfTXNrICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX0ZFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfQklfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX0JJIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfQklfTXNrICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX0JJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfVEhSRV9Qb3MgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX1RIUkUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfVEhSRV9Nc2sgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX1RIUkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfVEVNVF9Qb3MgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX1RFTVQgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfVEVNVF9Nc2sgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX1RFTVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfUkZFX1BvcyAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX1JGRSAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9MU1JfUkVHX1VBUlRfUkZFX01zayAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9MU1JfUkVHOiBVQVJUX1JGRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfTVNSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NU1JfUkVHX1VBUlRfRENUU19Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NU1JfUkVHOiBVQVJUX0RDVFMgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NU1JfUkVHX1VBUlRfRENUU19Nc2sgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NU1JfUkVHOiBVQVJUX0RDVFMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NU1JfUkVHX1VBUlRfQ1RTX1BvcyAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NU1JfUkVHOiBVQVJUX0NUUyAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9NU1JfUkVHX1VBUlRfQ1RTX01zayAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9NU1JfUkVHOiBVQVJUX0NUUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU0NSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TQ1JfUkVHX1VBUlRfU0NSQVRDSF9QQURfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TQ1JfUkVHOiBVQVJUX1NDUkFUQ0hfUEFEIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TQ1JfUkVHX1VBUlRfU0NSQVRDSF9QQURfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TQ1JfUkVHOiBVQVJUX1NDUkFUQ0hfUEFEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUkJSX1NUSFIwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIwX1JFR19TUkJSX1NUSFJ4X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIwX1JFRzogU1JCUl9TVEhSeCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIwX1JFR19TUkJSX1NUSFJ4X01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIwX1JFRzogU1JCUl9TVEhSeCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMV9SRUdfU1JCUl9TVEhSeF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMV9SRUc6IFNSQlJfU1RIUnggKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMV9SRUdfU1JCUl9TVEhSeF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMV9SRUc6IFNSQlJfU1RIUnggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjJfUkVHX1NSQlJfU1RIUnhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjJfUkVHOiBTUkJSX1NUSFJ4IChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjJfUkVHX1NSQlJfU1RIUnhfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjJfUkVHOiBTUkJSX1NUSFJ4IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUkJSX1NUSFIzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIzX1JFR19TUkJSX1NUSFJ4X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIzX1JFRzogU1JCUl9TVEhSeCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIzX1JFR19TUkJSX1NUSFJ4X01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIzX1JFRzogU1JCUl9TVEhSeCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JCUl9TVEhSNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSNF9SRUdfU1JCUl9TVEhSeF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSNF9SRUc6IFNSQlJfU1RIUnggKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSNF9SRUdfU1JCUl9TVEhSeF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSNF9SRUc6IFNSQlJfU1RIUnggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjVfUkVHX1NSQlJfU1RIUnhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjVfUkVHOiBTUkJSX1NUSFJ4IChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjVfUkVHX1NSQlJfU1RIUnhfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjVfUkVHOiBTUkJSX1NUSFJ4IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUkJSX1NUSFI2X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFI2X1JFR19TUkJSX1NUSFJ4X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFI2X1JFRzogU1JCUl9TVEhSeCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFI2X1JFR19TUkJSX1NUSFJ4X01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFI2X1JFRzogU1JCUl9TVEhSeCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JCUl9TVEhSN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSN19SRUdfU1JCUl9TVEhSeF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSN19SRUc6IFNSQlJfU1RIUnggKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSN19SRUdfU1JCUl9TVEhSeF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSN19SRUc6IFNSQlJfU1RIUnggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjhfUkVHX1NSQlJfU1RIUnhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjhfUkVHOiBTUkJSX1NUSFJ4IChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjhfUkVHX1NSQlJfU1RIUnhfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjhfUkVHOiBTUkJSX1NUSFJ4IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUkJSX1NUSFI5X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFI5X1JFR19TUkJSX1NUSFJ4X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFI5X1JFRzogU1JCUl9TVEhSeCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFI5X1JFR19TUkJSX1NUSFJ4X01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFI5X1JFRzogU1JCUl9TVEhSeCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTBfUkVHX1NSQlJfU1RIUnhfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMTBfUkVHOiBTUkJSX1NUSFJ4IChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTBfUkVHX1NSQlJfU1RIUnhfTXNrICgweGZmVUwpICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMTBfUkVHOiBTUkJSX1NUSFJ4IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxMV9SRUdfU1JCUl9TVEhSeF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIxMV9SRUc6IFNSQlJfU1RIUnggKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxMV9SRUdfU1JCUl9TVEhSeF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIxMV9SRUc6IFNSQlJfU1RIUnggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjEyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjEyX1JFR19TUkJSX1NUSFJ4X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjEyX1JFRzogU1JCUl9TVEhSeCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjEyX1JFR19TUkJSX1NUSFJ4X01zayAoMHhmZlVMKSAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjEyX1JFRzogU1JCUl9TVEhSeCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTNfUkVHX1NSQlJfU1RIUnhfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMTNfUkVHOiBTUkJSX1NUSFJ4IChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTNfUkVHX1NSQlJfU1RIUnhfTXNrICgweGZmVUwpICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMTNfUkVHOiBTUkJSX1NUSFJ4IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxNF9SRUdfU1JCUl9TVEhSeF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIxNF9SRUc6IFNSQlJfU1RIUnggKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxNF9SRUdfU1JCUl9TVEhSeF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIxNF9SRUc6IFNSQlJfU1RIUnggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjE1X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjE1X1JFR19TUkJSX1NUSFJ4X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjE1X1JFRzogU1JCUl9TVEhSeCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjE1X1JFR19TUkJSX1NUSFJ4X01zayAoMHhmZlVMKSAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjE1X1JFRzogU1JCUl9TVEhSeCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX0ZBUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfRkFSX1JFR19VQVJUX0ZBUl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfRkFSX1JFRzogVUFSVF9GQVIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfRkFSX1JFR19VQVJUX0ZBUl9Nc2sgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfRkFSX1JFRzogVUFSVF9GQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1VTUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVVNSX1JFR19VQVJUX0JVU1lfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVVNSX1JFRzogVUFSVF9CVVNZIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVVNSX1JFR19VQVJUX0JVU1lfTXNrICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVVNSX1JFRzogVUFSVF9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVVNSX1JFR19VQVJUX1RGTkZfUG9zICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVVNSX1JFRzogVUFSVF9URk5GIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVVNSX1JFR19VQVJUX1RGTkZfTXNrICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVVNSX1JFRzogVUFSVF9URk5GIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVVNSX1JFR19VQVJUX1RGRV9Qb3MgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVVNSX1JFRzogVUFSVF9URkUgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVVNSX1JFR19VQVJUX1RGRV9Nc2sgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVVNSX1JFRzogVUFSVF9URkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVVNSX1JFR19VQVJUX1JGTkVfUG9zICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVVNSX1JFRzogVUFSVF9SRk5FIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVVNSX1JFR19VQVJUX1JGTkVfTXNrICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVVNSX1JFRzogVUFSVF9SRk5FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVVNSX1JFR19VQVJUX1JGRl9Qb3MgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVVNSX1JFRzogVUFSVF9SRkYgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVVNSX1JFR19VQVJUX1JGRl9Nc2sgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVVNSX1JFRzogVUFSVF9SRkYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1RGTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVEZMX1JFR19VQVJUX1RSQU5TTUlUX0ZJRk9fTEVWRUxfUG9zICgwVUwpICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVEZMX1JFRzogVUFSVF9UUkFOU01JVF9GSUZPX0xFVkVMIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVEZMX1JFR19VQVJUX1RSQU5TTUlUX0ZJRk9fTEVWRUxfTXNrICgweGZmZmZVTCkgICAgIC8qITwgVUFSVDIgVUFSVDJfVEZMX1JFRzogVUFSVF9UUkFOU01JVF9GSUZPX0xFVkVMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9SRkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1JGTF9SRUdfVUFSVF9SRUNFSVZFX0ZJRk9fTEVWRUxfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1JGTF9SRUc6IFVBUlRfUkVDRUlWRV9GSUZPX0xFVkVMIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1JGTF9SRUdfVUFSVF9SRUNFSVZFX0ZJRk9fTEVWRUxfTXNrICgweGZmZmZVTCkgICAgICAvKiE8IFVBUlQyIFVBUlQyX1JGTF9SRUc6IFVBUlRfUkVDRUlWRV9GSUZPX0xFVkVMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUlJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSUl9SRUdfVUFSVF9VUl9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSUl9SRUc6IFVBUlRfVVIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSUl9SRUdfVUFSVF9VUl9Nc2sgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSUl9SRUc6IFVBUlRfVVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSUl9SRUdfVUFSVF9SRlJfUG9zICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSUl9SRUc6IFVBUlRfUkZSIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSUl9SRUdfVUFSVF9SRlJfTXNrICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSUl9SRUc6IFVBUlRfUkZSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSUl9SRUdfVUFSVF9YRlJfUG9zICAgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSUl9SRUc6IFVBUlRfWEZSIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSUl9SRUdfVUFSVF9YRlJfTXNrICAgICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSUl9SRUc6IFVBUlRfWEZSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSVFNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSVFNfUkVHX1VBUlRfU0hBRE9XX1JFUVVFU1RfVE9fU0VORF9Qb3MgKDBVTCkgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSVFNfUkVHOiBVQVJUX1NIQURPV19SRVFVRVNUX1RPX1NFTkQgKEJpdCAwKSAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSVFNfUkVHX1VBUlRfU0hBRE9XX1JFUVVFU1RfVE9fU0VORF9Nc2sgKDB4MVVMKSAgICAvKiE8IFVBUlQyIFVBUlQyX1NSVFNfUkVHOiBVQVJUX1NIQURPV19SRVFVRVNUX1RPX1NFTkQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NCQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NCQ1JfUkVHX1VBUlRfU0hBRE9XX0JSRUFLX0NPTlRST0xfUG9zICgwVUwpICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NCQ1JfUkVHOiBVQVJUX1NIQURPV19CUkVBS19DT05UUk9MIChCaXQgMCkgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NCQ1JfUkVHX1VBUlRfU0hBRE9XX0JSRUFLX0NPTlRST0xfTXNrICgweDFVTCkgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NCQ1JfUkVHOiBVQVJUX1NIQURPV19CUkVBS19DT05UUk9MIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TRE1BTV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TRE1BTV9SRUdfVUFSVF9TSEFET1dfRE1BX01PREVfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TRE1BTV9SRUc6IFVBUlRfU0hBRE9XX0RNQV9NT0RFIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TRE1BTV9SRUdfVUFSVF9TSEFET1dfRE1BX01PREVfTXNrICgweDFVTCkgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TRE1BTV9SRUc6IFVBUlRfU0hBRE9XX0RNQV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU0ZFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TRkVfUkVHX1VBUlRfU0hBRE9XX0ZJRk9fRU5BQkxFX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TRkVfUkVHOiBVQVJUX1NIQURPV19GSUZPX0VOQUJMRSAoQml0IDApICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TRkVfUkVHX1VBUlRfU0hBRE9XX0ZJRk9fRU5BQkxFX01zayAoMHgxVUwpICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TRkVfUkVHOiBVQVJUX1NIQURPV19GSUZPX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JUX1JFR19VQVJUX1NIQURPV19SQ1ZSX1RSSUdHRVJfUG9zICgwVUwpICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JUX1JFRzogVUFSVF9TSEFET1dfUkNWUl9UUklHR0VSIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JUX1JFR19VQVJUX1NIQURPV19SQ1ZSX1RSSUdHRVJfTXNrICgweDNVTCkgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JUX1JFRzogVUFSVF9TSEFET1dfUkNWUl9UUklHR0VSIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TVEVUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TVEVUX1JFR19VQVJUX1NIQURPV19UWF9FTVBUWV9UUklHR0VSX1BvcyAoMFVMKSAgICAgLyohPCBVQVJUMiBVQVJUMl9TVEVUX1JFRzogVUFSVF9TSEFET1dfVFhfRU1QVFlfVFJJR0dFUiAoQml0IDApICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TVEVUX1JFR19VQVJUX1NIQURPV19UWF9FTVBUWV9UUklHR0VSX01zayAoMHgzVUwpICAgLyohPCBVQVJUMiBVQVJUMl9TVEVUX1JFRzogVUFSVF9TSEFET1dfVFhfRU1QVFlfVFJJR0dFUiAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX0hUWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfSFRYX1JFR19VQVJUX0hBTFRfVFhfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfSFRYX1JFRzogVUFSVF9IQUxUX1RYIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfSFRYX1JFR19VQVJUX0hBTFRfVFhfTXNrICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfSFRYX1JFRzogVUFSVF9IQUxUX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfRE1BU0FfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfRE1BU0FfUkVHX0RNQVNBX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfRE1BU0FfUkVHOiBETUFTQSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfRE1BU0FfUkVHX0RNQVNBX01zayAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfRE1BU0FfUkVHOiBETUFTQSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX0RMRl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfRExGX1JFR19VQVJUX0RMRl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfRExGX1JFRzogVUFSVF9ETEYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfRExGX1JFR19VQVJUX0RMRl9Nc2sgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfRExGX1JFRzogVUFSVF9ETEYgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX0NQUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfQ1BSX1JFR19DUFJfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfQ1BSX1JFRzogQ1BSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfQ1BSX1JFR19DUFJfTXNrICAgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfQ1BSX1JFRzogQ1BSIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1VDVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVUNWX1JFR19VQ1ZfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVUNWX1JFRzogVUNWIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfVUNWX1JFR19VQ1ZfTXNrICAgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfVUNWX1JFRzogVUNWIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX0NUUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfQ1RSX1JFR19DVFJfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfQ1RSX1JFRzogQ1RSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfQ1RSX1JFR19DVFJfTXNrICAgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfQ1RSX1JFRzogQ1RSIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICAgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ1VTQicgUG9zaXRpb24gJiBNYXNrICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX01DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9NQ1RSTF9SRUdfVVNCRU5fUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQ1RSTF9SRUc6IFVTQkVOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQ1RSTF9SRUdfVVNCRU5fTXNrICAgICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQ1RSTF9SRUc6IFVTQkVOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQ1RSTF9SRUdfVVNCX0RCR19Qb3MgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQ1RSTF9SRUc6IFVTQl9EQkcgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQ1RSTF9SRUdfVVNCX0RCR19Nc2sgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQ1RSTF9SRUc6IFVTQl9EQkcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQ1RSTF9SRUdfVVNCX05BVF9Qb3MgICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQ1RSTF9SRUc6IFVTQl9OQVQgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQ1RSTF9SRUdfVVNCX05BVF9Nc2sgICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQ1RSTF9SRUc6IFVTQl9OQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQ1RSTF9SRUdfTFNNT0RFX1BvcyAgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQ1RSTF9SRUc6IExTTU9ERSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQ1RSTF9SRUdfTFNNT0RFX01zayAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQ1RSTF9SRUc6IExTTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfWENWRElBR19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfWENWX1RFU1RfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1hDVl9URVNUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfWENWX1RFU1RfTXNrICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1hDVl9URVNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfWENWX1RYcF9Qb3MgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1hDVl9UWHAgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfWENWX1RYcF9Nc2sgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1hDVl9UWHAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfWENWX1RYbl9Qb3MgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1hDVl9UWG4gKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfWENWX1RYbl9Nc2sgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1hDVl9UWG4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfWENWX1RYRU5fUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1hDVl9UWEVOIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfWENWX1RYRU5fTXNrICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1hDVl9UWEVOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfUkNWX1BvcyAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1JDViAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfUkNWX01zayAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1JDViAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfVk1JTl9Qb3MgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1ZNSU4gKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfVk1JTl9Nc2sgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1ZNSU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfVlBJTl9Qb3MgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1ZQSU4gKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9YQ1ZESUFHX1JFR19VU0JfVlBJTl9Nc2sgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9YQ1ZESUFHX1JFRzogVVNCX1ZQSU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9UQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UQ1JfUkVHX1VTQl9DQURKX1BvcyAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UQ1JfUkVHOiBVU0JfQ0FESiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UQ1JfUkVHX1VTQl9DQURKX01zayAgICAgICAgICAoMHgxZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UQ1JfUkVHOiBVU0JfQ0FESiAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UQ1JfUkVHX1VTQl9WQURKX1BvcyAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UQ1JfUkVHOiBVU0JfVkFESiAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UQ1JfUkVHX1VTQl9WQURKX01zayAgICAgICAgICAoMHhlMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UQ1JfUkVHOiBVU0JfVkFESiAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9VVFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9VVFJfUkVHX1VTQl9VVFJfUkVTX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VVFJfUkVHOiBVU0JfVVRSX1JFUyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VVFJfUkVHX1VTQl9VVFJfUkVTX01zayAgICAgICAoMHgxZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VVFJfUkVHOiBVU0JfVVRSX1JFUyAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VVFJfUkVHX1VTQl9TRl9Qb3MgICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VVFJfUkVHOiBVU0JfU0YgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VVFJfUkVHX1VTQl9TRl9Nc2sgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VVFJfUkVHOiBVU0JfU0YgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VVFJfUkVHX1VTQl9OQ1JDX1BvcyAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VVFJfUkVHOiBVU0JfTkNSQyAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VVFJfUkVHX1VTQl9OQ1JDX01zayAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VVFJfUkVHOiBVU0JfTkNSQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VVFJfUkVHX1VTQl9ESUFHX1BvcyAgICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VVFJfUkVHOiBVU0JfRElBRyAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VVFJfUkVHX1VTQl9ESUFHX01zayAgICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VVFJfUkVHOiBVU0JfRElBRyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9GQVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9GQVJfUkVHX1VTQl9BRF9Qb3MgICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GQVJfUkVHOiBVU0JfQUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GQVJfUkVHX1VTQl9BRF9Nc2sgICAgICAgICAgICAoMHg3ZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GQVJfUkVHOiBVU0JfQUQgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GQVJfUkVHX1VTQl9BRF9FTl9Qb3MgICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GQVJfUkVHOiBVU0JfQURfRU4gKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GQVJfUkVHX1VTQl9BRF9FTl9Nc2sgICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GQVJfUkVHOiBVU0JfQURfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX05GU1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9ORlNSX1JFR19VU0JfTkZTX1BvcyAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9ORlNSX1JFRzogVVNCX05GUyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9ORlNSX1JFR19VU0JfTkZTX01zayAgICAgICAgICAoMHgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9ORlNSX1JFRzogVVNCX05GUyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX01BRVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfV0FSTl9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX1dBUk4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfV0FSTl9Nc2sgICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX1dBUk4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfQUxUX1BvcyAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0FMVCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfQUxUX01zayAgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0FMVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfVFhfRVZfUG9zICAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX1RYX0VWIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfVFhfRVZfTXNrICAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX1RYX0VWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfRlJBTUVfUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0ZSQU1FIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfRlJBTUVfTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0ZSQU1FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfTkFLX1BvcyAgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX05BSyAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfTkFLX01zayAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX05BSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfVUxEX1BvcyAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX1VMRCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfVUxEX01zayAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX1VMRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfUlhfRVZfUG9zICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX1JYX0VWIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfUlhfRVZfTXNrICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX1JYX0VWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfSU5UUl9Qb3MgICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0lOVFIgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfSU5UUl9Nc2sgICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0lOVFIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfRVAwX1RYX1BvcyAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0VQMF9UWCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfRVAwX1RYX01zayAgICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0VQMF9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfRVAwX1JYX1BvcyAgICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0VQMF9SWCAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfRVAwX1JYX01zayAgICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0VQMF9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfRVAwX05BS19Qb3MgICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0VQMF9OQUsgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfRVAwX05BS19Nc2sgICAgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0VQMF9OQUsgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfQ0hfRVZfUG9zICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0NIX0VWIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQUVWX1JFR19VU0JfQ0hfRVZfTXNrICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQUVWX1JFRzogVVNCX0NIX0VWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX01BTVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fV0FSTl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX1dBUk4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fV0FSTl9Nc2sgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX1dBUk4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fQUxUX1BvcyAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0FMVCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fQUxUX01zayAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0FMVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fVFhfRVZfUG9zICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX1RYX0VWIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fVFhfRVZfTXNrICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX1RYX0VWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fRlJBTUVfUG9zICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0ZSQU1FIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fRlJBTUVfTXNrICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0ZSQU1FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fTkFLX1BvcyAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX05BSyAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fTkFLX01zayAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX05BSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fVUxEX1BvcyAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX1VMRCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fVUxEX01zayAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX1VMRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fUlhfRVZfUG9zICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX1JYX0VWIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fUlhfRVZfTXNrICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX1JYX0VWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fSU5UUl9Qb3MgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0lOVFIgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fSU5UUl9Nc2sgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0lOVFIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fRVAwX1RYX1BvcyAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0VQMF9UWCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fRVAwX1RYX01zayAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0VQMF9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fRVAwX1JYX1BvcyAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0VQMF9SWCAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fRVAwX1JYX01zayAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0VQMF9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fRVAwX05BS19Qb3MgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0VQMF9OQUsgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fRVAwX05BS19Nc2sgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0VQMF9OQUsgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fQ0hfRVZfUG9zICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0NIX0VWIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9NQU1TS19SRUdfVVNCX01fQ0hfRVZfTXNrICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9NQU1TS19SRUc6IFVTQl9NX0NIX0VWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0FMVEVWX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRFVl9SRUdfVVNCX0VPUF9Qb3MgICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRFVl9SRUc6IFVTQl9FT1AgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRFVl9SRUdfVVNCX0VPUF9Nc2sgICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRFVl9SRUc6IFVTQl9FT1AgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRFVl9SRUdfVVNCX1NEM19Qb3MgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRFVl9SRUc6IFVTQl9TRDMgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRFVl9SRUdfVVNCX1NEM19Nc2sgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRFVl9SRUc6IFVTQl9TRDMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRFVl9SRUdfVVNCX1NENV9Qb3MgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRFVl9SRUc6IFVTQl9TRDUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRFVl9SRUdfVVNCX1NENV9Nc2sgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRFVl9SRUc6IFVTQl9TRDUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRFVl9SRUdfVVNCX1JFU0VUX1BvcyAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRFVl9SRUc6IFVTQl9SRVNFVCAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRFVl9SRUdfVVNCX1JFU0VUX01zayAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRFVl9SRUc6IFVTQl9SRVNFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRFVl9SRUdfVVNCX1JFU1VNRV9Qb3MgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRFVl9SRUc6IFVTQl9SRVNVTUUgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRFVl9SRUdfVVNCX1JFU1VNRV9Nc2sgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRFVl9SRUc6IFVTQl9SRVNVTUUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfQUxUTVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRNU0tfUkVHX1VTQl9NX0VPUF9Qb3MgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRNU0tfUkVHOiBVU0JfTV9FT1AgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRNU0tfUkVHX1VTQl9NX0VPUF9Nc2sgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRNU0tfUkVHOiBVU0JfTV9FT1AgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRNU0tfUkVHX1VTQl9NX1NEM19Qb3MgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRNU0tfUkVHOiBVU0JfTV9TRDMgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRNU0tfUkVHX1VTQl9NX1NEM19Nc2sgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRNU0tfUkVHOiBVU0JfTV9TRDMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRNU0tfUkVHX1VTQl9NX1NENV9Qb3MgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRNU0tfUkVHOiBVU0JfTV9TRDUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRNU0tfUkVHX1VTQl9NX1NENV9Nc2sgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRNU0tfUkVHOiBVU0JfTV9TRDUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRNU0tfUkVHX1VTQl9NX1JFU0VUX1BvcyAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRNU0tfUkVHOiBVU0JfTV9SRVNFVCAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRNU0tfUkVHX1VTQl9NX1JFU0VUX01zayAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRNU0tfUkVHOiBVU0JfTV9SRVNFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRNU0tfUkVHX1VTQl9NX1JFU1VNRV9Qb3MgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRNU0tfUkVHOiBVU0JfTV9SRVNVTUUgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9BTFRNU0tfUkVHX1VTQl9NX1JFU1VNRV9Nc2sgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9BTFRNU0tfUkVHOiBVU0JfTV9SRVNVTUUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYRVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEVWX1JFR19VU0JfVFhGSUZPMzFfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEVWX1JFRzogVVNCX1RYRklGTzMxIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEVWX1JFR19VU0JfVFhGSUZPMzFfTXNrICAgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEVWX1JFRzogVVNCX1RYRklGTzMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEVWX1JFR19VU0JfVFhVRFJSTjMxX1BvcyAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEVWX1JFRzogVVNCX1RYVURSUk4zMSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEVWX1JFR19VU0JfVFhVRFJSTjMxX01zayAgICAoMHg3MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEVWX1JFRzogVVNCX1RYVURSUk4zMSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYTVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWE1TS19SRUdfVVNCX01fVFhGSUZPMzFfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWE1TS19SRUc6IFVTQl9NX1RYRklGTzMxIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWE1TS19SRUdfVVNCX01fVFhGSUZPMzFfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWE1TS19SRUc6IFVTQl9NX1RYRklGTzMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWE1TS19SRUdfVVNCX01fVFhVRFJSTjMxX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWE1TS19SRUc6IFVTQl9NX1RYVURSUk4zMSAoQml0IDQpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWE1TS19SRUdfVVNCX01fVFhVRFJSTjMxX01zayAoMHg3MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWE1TS19SRUc6IFVTQl9NX1RYVURSUk4zMSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYRVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEVWX1JFR19VU0JfUlhGSUZPMzFfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEVWX1JFRzogVVNCX1JYRklGTzMxIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEVWX1JFR19VU0JfUlhGSUZPMzFfTXNrICAgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEVWX1JFRzogVVNCX1JYRklGTzMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEVWX1JFR19VU0JfUlhPVlJSTjMxX1BvcyAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEVWX1JFRzogVVNCX1JYT1ZSUk4zMSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEVWX1JFR19VU0JfUlhPVlJSTjMxX01zayAgICAoMHg3MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEVWX1JFRzogVVNCX1JYT1ZSUk4zMSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYTVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWE1TS19SRUdfVVNCX01fUlhGSUZPMzFfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWE1TS19SRUc6IFVTQl9NX1JYRklGTzMxIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWE1TS19SRUdfVVNCX01fUlhGSUZPMzFfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWE1TS19SRUc6IFVTQl9NX1JYRklGTzMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWE1TS19SRUdfVVNCX01fUlhPVlJSTjMxX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWE1TS19SRUc6IFVTQl9NX1JYT1ZSUk4zMSAoQml0IDQpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWE1TS19SRUdfVVNCX01fUlhPVlJSTjMxX01zayAoMHg3MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWE1TS19SRUc6IFVTQl9NX1JYT1ZSUk4zMSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX05BS0VWX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9OQUtFVl9SRUdfVVNCX0lOMzFfUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9OQUtFVl9SRUc6IFVTQl9JTjMxIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9OQUtFVl9SRUdfVVNCX0lOMzFfTXNrICAgICAgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9OQUtFVl9SRUc6IFVTQl9JTjMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9OQUtFVl9SRUdfVVNCX09VVDMxX1BvcyAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9OQUtFVl9SRUc6IFVTQl9PVVQzMSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9OQUtFVl9SRUdfVVNCX09VVDMxX01zayAgICAgICAoMHg3MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9OQUtFVl9SRUc6IFVTQl9PVVQzMSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfTkFLTVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9OQUtNU0tfUkVHX1VTQl9NX0lOMzFfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9OQUtNU0tfUkVHOiBVU0JfTV9JTjMxIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9OQUtNU0tfUkVHX1VTQl9NX0lOMzFfTXNrICAgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9OQUtNU0tfUkVHOiBVU0JfTV9JTjMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9OQUtNU0tfUkVHX1VTQl9NX09VVDMxX1BvcyAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9OQUtNU0tfUkVHOiBVU0JfTV9PVVQzMSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9OQUtNU0tfUkVHX1VTQl9NX09VVDMxX01zayAgICAoMHg3MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9OQUtNU0tfUkVHOiBVU0JfTV9PVVQzMSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0ZXRVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9GV0VWX1JFR19VU0JfVFhXQVJOMzFfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GV0VWX1JFRzogVVNCX1RYV0FSTjMxIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GV0VWX1JFR19VU0JfVFhXQVJOMzFfTXNrICAgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GV0VWX1JFRzogVVNCX1RYV0FSTjMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GV0VWX1JFR19VU0JfUlhXQVJOMzFfUG9zICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GV0VWX1JFRzogVVNCX1JYV0FSTjMxIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GV0VWX1JFR19VU0JfUlhXQVJOMzFfTXNrICAgICAoMHg3MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GV0VWX1JFRzogVVNCX1JYV0FSTjMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0ZXTVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9GV01TS19SRUdfVVNCX01fVFhXQVJOMzFfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GV01TS19SRUc6IFVTQl9NX1RYV0FSTjMxIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GV01TS19SRUdfVVNCX01fVFhXQVJOMzFfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GV01TS19SRUc6IFVTQl9NX1RYV0FSTjMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GV01TS19SRUdfVVNCX01fUlhXQVJOMzFfUG9zICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GV01TS19SRUc6IFVTQl9NX1JYV0FSTjMxIChCaXQgNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GV01TS19SRUdfVVNCX01fUlhXQVJOMzFfTXNrICAoMHg3MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GV01TS19SRUc6IFVTQl9NX1JYV0FSTjMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9GTkhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9GTkhfUkVHX1VTQl9GTl8xMF84X1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GTkhfUkVHOiBVU0JfRk5fMTBfOCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GTkhfUkVHX1VTQl9GTl8xMF84X01zayAgICAgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GTkhfUkVHOiBVU0JfRk5fMTBfOCAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GTkhfUkVHX1VTQl9SRkNfUG9zICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GTkhfUkVHOiBVU0JfUkZDIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GTkhfUkVHX1VTQl9SRkNfTXNrICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GTkhfUkVHOiBVU0JfUkZDIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GTkhfUkVHX1VTQl9VTF9Qb3MgICAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GTkhfUkVHOiBVU0JfVUwgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GTkhfUkVHX1VTQl9VTF9Nc2sgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GTkhfUkVHOiBVU0JfVUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GTkhfUkVHX1VTQl9NRl9Qb3MgICAgICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GTkhfUkVHOiBVU0JfTUYgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GTkhfUkVHX1VTQl9NRl9Nc2sgICAgICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GTkhfUkVHOiBVU0JfTUYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9GTkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9GTkxfUkVHX1VTQl9GTl9Qb3MgICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GTkxfUkVHOiBVU0JfRk4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9GTkxfUkVHX1VTQl9GTl9Nc2sgICAgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9GTkxfUkVHOiBVU0JfRk4gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVVgyMENEUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfU1NQUk9URU5fUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1NTUFJPVEVOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfU1NQUk9URU5fTXNrICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1NTUFJPVEVOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfUkNERUxBWV9Qb3MgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1JDREVMQVkgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfUkNERUxBWV9Nc2sgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1JDREVMQVkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfVEVTVF9TVzFETV9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1RFU1RfU1cxRE0gKEJpdCAyKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfVEVTVF9TVzFETV9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1RFU1RfU1cxRE0gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfVEVTVF9FTl9Qb3MgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1RFU1RfRU4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfVEVTVF9FTl9Nc2sgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1RFU1RfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfVEVTVF9TVzFfUG9zICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1RFU1RfU1cxIChCaXQgNSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfVEVTVF9TVzFfTXNrICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1RFU1RfU1cxIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfVEVTVF9TVzJfUG9zICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1RFU1RfU1cyIChCaXQgNikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfVEVTVF9TVzJfTXNrICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1RFU1RfU1cyIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfVEVTVDdfUG9zICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1RFU1Q3IChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9VWDIwQ0RSX1JFR19SUFVfVEVTVDdfTXNrICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9VWDIwQ0RSX1JFRzogUlBVX1RFU1Q3IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0VQQzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMwX1JFR19VU0JfRVBfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMwX1JFRzogVVNCX0VQIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMwX1JFR19VU0JfRVBfTXNrICAgICAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMwX1JFRzogVVNCX0VQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMwX1JFR19VU0JfREVGX1BvcyAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMwX1JFRzogVVNCX0RFRiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMwX1JFR19VU0JfREVGX01zayAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMwX1JFRzogVVNCX0RFRiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMwX1JFR19VU0JfU1RBTExfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMwX1JFRzogVVNCX1NUQUxMIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMwX1JFR19VU0JfU1RBTExfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMwX1JFRzogVVNCX1NUQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYRDBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEQwX1JFR19VU0JfVFhGRF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEQwX1JFRzogVVNCX1RYRkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEQwX1JFR19VU0JfVFhGRF9Nc2sgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEQwX1JFRzogVVNCX1RYRkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYUzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMwX1JFR19VU0JfVENPVU5UX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMwX1JFRzogVVNCX1RDT1VOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMwX1JFR19VU0JfVENPVU5UX01zayAgICAgICAoMHgxZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMwX1JFRzogVVNCX1RDT1VOVCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMwX1JFR19VU0JfVFhfRE9ORV9Qb3MgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMwX1JFRzogVVNCX1RYX0RPTkUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMwX1JFR19VU0JfVFhfRE9ORV9Nc2sgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMwX1JFRzogVVNCX1RYX0RPTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMwX1JFR19VU0JfQUNLX1NUQVRfUG9zICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMwX1JFRzogVVNCX0FDS19TVEFUIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMwX1JFR19VU0JfQUNLX1NUQVRfTXNrICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMwX1JFRzogVVNCX0FDS19TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYQzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMwX1JFR19VU0JfVFhfRU5fUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMwX1JFRzogVVNCX1RYX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMwX1JFR19VU0JfVFhfRU5fTXNrICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMwX1JFRzogVVNCX1RYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMwX1JFR19VU0JfVE9HR0xFX1RYMF9Qb3MgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMwX1JFRzogVVNCX1RPR0dMRV9UWDAgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMwX1JFR19VU0JfVE9HR0xFX1RYMF9Nc2sgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMwX1JFRzogVVNCX1RPR0dMRV9UWDAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMwX1JFR19VU0JfRkxVU0hfUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMwX1JFRzogVVNCX0ZMVVNIIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMwX1JFR19VU0JfRkxVU0hfTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMwX1JFRzogVVNCX0ZMVVNIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMwX1JFR19VU0JfSUdOX0lOX1BvcyAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMwX1JFRzogVVNCX0lHTl9JTiAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMwX1JFR19VU0JfSUdOX0lOX01zayAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMwX1JFRzogVVNCX0lHTl9JTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfRVAwX05BS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9FUDBfTkFLX1JFR19VU0JfRVAwX0lOTkFLX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUDBfTkFLX1JFRzogVVNCX0VQMF9JTk5BSyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUDBfTkFLX1JFR19VU0JfRVAwX0lOTkFLX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUDBfTkFLX1JFRzogVVNCX0VQMF9JTk5BSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUDBfTkFLX1JFR19VU0JfRVAwX09VVE5BS19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUDBfTkFLX1JFRzogVVNCX0VQMF9PVVROQUsgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUDBfTkFLX1JFR19VU0JfRVAwX09VVE5BS19Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUDBfTkFLX1JFRzogVVNCX0VQMF9PVVROQUsgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYRDBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEQwX1JFR19VU0JfUlhGRF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEQwX1JFRzogVVNCX1JYRkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEQwX1JFR19VU0JfUlhGRF9Nc2sgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEQwX1JFRzogVVNCX1JYRkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYUzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMwX1JFR19VU0JfUkNPVU5UX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMwX1JFRzogVVNCX1JDT1VOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMwX1JFR19VU0JfUkNPVU5UX01zayAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMwX1JFRzogVVNCX1JDT1VOVCAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMwX1JFR19VU0JfUlhfTEFTVF9Qb3MgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMwX1JFRzogVVNCX1JYX0xBU1QgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMwX1JFR19VU0JfUlhfTEFTVF9Nc2sgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMwX1JFRzogVVNCX1JYX0xBU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMwX1JFR19VU0JfVE9HR0xFX1JYMF9Qb3MgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMwX1JFRzogVVNCX1RPR0dMRV9SWDAgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMwX1JFR19VU0JfVE9HR0xFX1JYMF9Nc2sgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMwX1JFRzogVVNCX1RPR0dMRV9SWDAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMwX1JFR19VU0JfU0VUVVBfUG9zICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMwX1JFRzogVVNCX1NFVFVQIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMwX1JFR19VU0JfU0VUVVBfTXNrICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMwX1JFRzogVVNCX1NFVFVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYQzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMwX1JFR19VU0JfUlhfRU5fUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMwX1JFRzogVVNCX1JYX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMwX1JFR19VU0JfUlhfRU5fTXNrICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMwX1JFRzogVVNCX1JYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMwX1JFR19VU0JfSUdOX09VVF9Qb3MgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMwX1JFRzogVVNCX0lHTl9PVVQgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMwX1JFR19VU0JfSUdOX09VVF9Nc2sgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMwX1JFRzogVVNCX0lHTl9PVVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMwX1JFR19VU0JfSUdOX1NFVFVQX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMwX1JFRzogVVNCX0lHTl9TRVRVUCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMwX1JFR19VU0JfSUdOX1NFVFVQX01zayAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMwX1JFRzogVVNCX0lHTl9TRVRVUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMwX1JFR19VU0JfRkxVU0hfUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMwX1JFRzogVVNCX0ZMVVNIIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMwX1JFR19VU0JfRkxVU0hfTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMwX1JFRzogVVNCX0ZMVVNIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0VQQzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMxX1JFR19VU0JfRVBfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMxX1JFRzogVVNCX0VQIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMxX1JFR19VU0JfRVBfTXNrICAgICAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMxX1JFRzogVVNCX0VQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMxX1JFR19VU0JfRVBfRU5fUG9zICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMxX1JFRzogVVNCX0VQX0VOIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMxX1JFR19VU0JfRVBfRU5fTXNrICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMxX1JFRzogVVNCX0VQX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMxX1JFR19VU0JfSVNPX1BvcyAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMxX1JFRzogVVNCX0lTTyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMxX1JFR19VU0JfSVNPX01zayAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMxX1JFRzogVVNCX0lTTyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMxX1JFR19VU0JfU1RBTExfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMxX1JFRzogVVNCX1NUQUxMIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMxX1JFR19VU0JfU1RBTExfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMxX1JFRzogVVNCX1NUQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYRDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEQxX1JFR19VU0JfVFhGRF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEQxX1JFRzogVVNCX1RYRkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEQxX1JFR19VU0JfVFhGRF9Nc2sgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEQxX1JFRzogVVNCX1RYRkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYUzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMxX1JFR19VU0JfVENPVU5UX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMxX1JFRzogVVNCX1RDT1VOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMxX1JFR19VU0JfVENPVU5UX01zayAgICAgICAoMHgxZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMxX1JFRzogVVNCX1RDT1VOVCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMxX1JFR19VU0JfVFhfRE9ORV9Qb3MgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMxX1JFRzogVVNCX1RYX0RPTkUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMxX1JFR19VU0JfVFhfRE9ORV9Nc2sgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMxX1JFRzogVVNCX1RYX0RPTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMxX1JFR19VU0JfQUNLX1NUQVRfUG9zICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMxX1JFRzogVVNCX0FDS19TVEFUIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMxX1JFR19VU0JfQUNLX1NUQVRfTXNrICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMxX1JFRzogVVNCX0FDS19TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMxX1JFR19VU0JfVFhfVVJVTl9Qb3MgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMxX1JFRzogVVNCX1RYX1VSVU4gKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMxX1JFR19VU0JfVFhfVVJVTl9Nc2sgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMxX1JFRzogVVNCX1RYX1VSVU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYQzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfVFhfRU5fUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX1RYX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfVFhfRU5fTXNrICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX1RYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfTEFTVF9Qb3MgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX0xBU1QgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfTEFTVF9Nc2sgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX0xBU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfVE9HR0xFX1RYX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX1RPR0dMRV9UWCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfVE9HR0xFX1RYX01zayAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX1RPR0dMRV9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfRkxVU0hfUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX0ZMVVNIIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfRkxVU0hfTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX0ZMVVNIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfUkZGX1BvcyAgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX1JGRiAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfUkZGX01zayAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX1JGRiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfVEZXTF9Qb3MgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX1RGV0wgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfVEZXTF9Nc2sgICAgICAgICAoMHg2MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX1RGV0wgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfSUdOX0lTT01TS19Qb3MgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX0lHTl9JU09NU0sgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMxX1JFR19VU0JfSUdOX0lTT01TS19Nc2sgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMxX1JFRzogVVNCX0lHTl9JU09NU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0VQQzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMyX1JFR19VU0JfRVBfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMyX1JFRzogVVNCX0VQIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMyX1JFR19VU0JfRVBfTXNrICAgICAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMyX1JFRzogVVNCX0VQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMyX1JFR19VU0JfRVBfRU5fUG9zICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMyX1JFRzogVVNCX0VQX0VOIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMyX1JFR19VU0JfRVBfRU5fTXNrICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMyX1JFRzogVVNCX0VQX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMyX1JFR19VU0JfSVNPX1BvcyAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMyX1JFRzogVVNCX0lTTyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMyX1JFR19VU0JfSVNPX01zayAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMyX1JFRzogVVNCX0lTTyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMyX1JFR19VU0JfU1RBTExfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMyX1JFRzogVVNCX1NUQUxMIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMyX1JFR19VU0JfU1RBTExfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMyX1JFRzogVVNCX1NUQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYRDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEQxX1JFR19VU0JfUlhGRF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEQxX1JFRzogVVNCX1JYRkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEQxX1JFR19VU0JfUlhGRF9Nc2sgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEQxX1JFRzogVVNCX1JYRkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYUzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMxX1JFR19VU0JfUkNPVU5UX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMxX1JFRzogVVNCX1JDT1VOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMxX1JFR19VU0JfUkNPVU5UX01zayAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMxX1JFRzogVVNCX1JDT1VOVCAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMxX1JFR19VU0JfUlhfTEFTVF9Qb3MgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMxX1JFRzogVVNCX1JYX0xBU1QgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMxX1JFR19VU0JfUlhfTEFTVF9Nc2sgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMxX1JFRzogVVNCX1JYX0xBU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMxX1JFR19VU0JfVE9HR0xFX1JYX1BvcyAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMxX1JFRzogVVNCX1RPR0dMRV9SWCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMxX1JFR19VU0JfVE9HR0xFX1JYX01zayAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMxX1JFRzogVVNCX1RPR0dMRV9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMxX1JFR19VU0JfU0VUVVBfUG9zICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMxX1JFRzogVVNCX1NFVFVQIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMxX1JFR19VU0JfU0VUVVBfTXNrICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMxX1JFRzogVVNCX1NFVFVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMxX1JFR19VU0JfUlhfRVJSX1BvcyAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMxX1JFRzogVVNCX1JYX0VSUiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMxX1JFR19VU0JfUlhfRVJSX01zayAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMxX1JFRzogVVNCX1JYX0VSUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYQzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMxX1JFR19VU0JfUlhfRU5fUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMxX1JFRzogVVNCX1JYX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMxX1JFR19VU0JfUlhfRU5fTXNrICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMxX1JFRzogVVNCX1JYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMxX1JFR19VU0JfSUdOX1NFVFVQX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMxX1JFRzogVVNCX0lHTl9TRVRVUCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMxX1JFR19VU0JfSUdOX1NFVFVQX01zayAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMxX1JFRzogVVNCX0lHTl9TRVRVUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMxX1JFR19VU0JfRkxVU0hfUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMxX1JFRzogVVNCX0ZMVVNIIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMxX1JFR19VU0JfRkxVU0hfTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMxX1JFRzogVVNCX0ZMVVNIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMxX1JFR19VU0JfUkZXTF9Qb3MgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMxX1JFRzogVVNCX1JGV0wgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMxX1JFR19VU0JfUkZXTF9Nc2sgICAgICAgICAoMHg2MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMxX1JFRzogVVNCX1JGV0wgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0VQQzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMzX1JFR19VU0JfRVBfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMzX1JFRzogVVNCX0VQIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMzX1JFR19VU0JfRVBfTXNrICAgICAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMzX1JFRzogVVNCX0VQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMzX1JFR19VU0JfRVBfRU5fUG9zICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMzX1JFRzogVVNCX0VQX0VOIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMzX1JFR19VU0JfRVBfRU5fTXNrICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMzX1JFRzogVVNCX0VQX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMzX1JFR19VU0JfSVNPX1BvcyAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMzX1JFRzogVVNCX0lTTyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMzX1JFR19VU0JfSVNPX01zayAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMzX1JFRzogVVNCX0lTTyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMzX1JFR19VU0JfU1RBTExfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMzX1JFRzogVVNCX1NUQUxMIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEMzX1JFR19VU0JfU1RBTExfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEMzX1JFRzogVVNCX1NUQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYRDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEQyX1JFR19VU0JfVFhGRF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEQyX1JFRzogVVNCX1RYRkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEQyX1JFR19VU0JfVFhGRF9Nc2sgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEQyX1JFRzogVVNCX1RYRkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYUzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMyX1JFR19VU0JfVENPVU5UX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMyX1JFRzogVVNCX1RDT1VOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMyX1JFR19VU0JfVENPVU5UX01zayAgICAgICAoMHgxZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMyX1JFRzogVVNCX1RDT1VOVCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMyX1JFR19VU0JfVFhfRE9ORV9Qb3MgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMyX1JFRzogVVNCX1RYX0RPTkUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMyX1JFR19VU0JfVFhfRE9ORV9Nc2sgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMyX1JFRzogVVNCX1RYX0RPTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMyX1JFR19VU0JfQUNLX1NUQVRfUG9zICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMyX1JFRzogVVNCX0FDS19TVEFUIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMyX1JFR19VU0JfQUNLX1NUQVRfTXNrICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMyX1JFRzogVVNCX0FDS19TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMyX1JFR19VU0JfVFhfVVJVTl9Qb3MgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMyX1JFRzogVVNCX1RYX1VSVU4gKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMyX1JFR19VU0JfVFhfVVJVTl9Nc2sgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMyX1JFRzogVVNCX1RYX1VSVU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYQzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfVFhfRU5fUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX1RYX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfVFhfRU5fTXNrICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX1RYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfTEFTVF9Qb3MgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX0xBU1QgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfTEFTVF9Nc2sgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX0xBU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfVE9HR0xFX1RYX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX1RPR0dMRV9UWCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfVE9HR0xFX1RYX01zayAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX1RPR0dMRV9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfRkxVU0hfUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX0ZMVVNIIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfRkxVU0hfTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX0ZMVVNIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfUkZGX1BvcyAgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX1JGRiAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfUkZGX01zayAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX1JGRiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfVEZXTF9Qb3MgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX1RGV0wgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfVEZXTF9Nc2sgICAgICAgICAoMHg2MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX1RGV0wgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfSUdOX0lTT01TS19Qb3MgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX0lHTl9JU09NU0sgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMyX1JFR19VU0JfSUdOX0lTT01TS19Nc2sgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMyX1JFRzogVVNCX0lHTl9JU09NU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0VQQzRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM0X1JFR19VU0JfRVBfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM0X1JFRzogVVNCX0VQIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM0X1JFR19VU0JfRVBfTXNrICAgICAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM0X1JFRzogVVNCX0VQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM0X1JFR19VU0JfRVBfRU5fUG9zICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM0X1JFRzogVVNCX0VQX0VOIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM0X1JFR19VU0JfRVBfRU5fTXNrICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM0X1JFRzogVVNCX0VQX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM0X1JFR19VU0JfSVNPX1BvcyAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM0X1JFRzogVVNCX0lTTyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM0X1JFR19VU0JfSVNPX01zayAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM0X1JFRzogVVNCX0lTTyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM0X1JFR19VU0JfU1RBTExfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM0X1JFRzogVVNCX1NUQUxMIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM0X1JFR19VU0JfU1RBTExfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM0X1JFRzogVVNCX1NUQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYRDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEQyX1JFR19VU0JfUlhGRF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEQyX1JFRzogVVNCX1JYRkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEQyX1JFR19VU0JfUlhGRF9Nc2sgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEQyX1JFRzogVVNCX1JYRkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYUzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMyX1JFR19VU0JfUkNPVU5UX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMyX1JFRzogVVNCX1JDT1VOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMyX1JFR19VU0JfUkNPVU5UX01zayAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMyX1JFRzogVVNCX1JDT1VOVCAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMyX1JFR19VU0JfUlhfTEFTVF9Qb3MgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMyX1JFRzogVVNCX1JYX0xBU1QgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMyX1JFR19VU0JfUlhfTEFTVF9Nc2sgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMyX1JFRzogVVNCX1JYX0xBU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMyX1JFR19VU0JfVE9HR0xFX1JYX1BvcyAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMyX1JFRzogVVNCX1RPR0dMRV9SWCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMyX1JFR19VU0JfVE9HR0xFX1JYX01zayAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMyX1JFRzogVVNCX1RPR0dMRV9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMyX1JFR19VU0JfU0VUVVBfUG9zICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMyX1JFRzogVVNCX1NFVFVQIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMyX1JFR19VU0JfU0VUVVBfTXNrICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMyX1JFRzogVVNCX1NFVFVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMyX1JFR19VU0JfUlhfRVJSX1BvcyAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMyX1JFRzogVVNCX1JYX0VSUiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMyX1JFR19VU0JfUlhfRVJSX01zayAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMyX1JFRzogVVNCX1JYX0VSUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYQzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMyX1JFR19VU0JfUlhfRU5fUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMyX1JFRzogVVNCX1JYX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMyX1JFR19VU0JfUlhfRU5fTXNrICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMyX1JFRzogVVNCX1JYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMyX1JFR19VU0JfSUdOX1NFVFVQX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMyX1JFRzogVVNCX0lHTl9TRVRVUCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMyX1JFR19VU0JfSUdOX1NFVFVQX01zayAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMyX1JFRzogVVNCX0lHTl9TRVRVUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMyX1JFR19VU0JfRkxVU0hfUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMyX1JFRzogVVNCX0ZMVVNIIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMyX1JFR19VU0JfRkxVU0hfTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMyX1JFRzogVVNCX0ZMVVNIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMyX1JFR19VU0JfUkZXTF9Qb3MgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMyX1JFRzogVVNCX1JGV0wgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMyX1JFR19VU0JfUkZXTF9Nc2sgICAgICAgICAoMHg2MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMyX1JFRzogVVNCX1JGV0wgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0VQQzVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM1X1JFR19VU0JfRVBfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM1X1JFRzogVVNCX0VQIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM1X1JFR19VU0JfRVBfTXNrICAgICAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM1X1JFRzogVVNCX0VQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM1X1JFR19VU0JfRVBfRU5fUG9zICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM1X1JFRzogVVNCX0VQX0VOIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM1X1JFR19VU0JfRVBfRU5fTXNrICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM1X1JFRzogVVNCX0VQX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM1X1JFR19VU0JfSVNPX1BvcyAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM1X1JFRzogVVNCX0lTTyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM1X1JFR19VU0JfSVNPX01zayAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM1X1JFRzogVVNCX0lTTyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM1X1JFR19VU0JfU1RBTExfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM1X1JFRzogVVNCX1NUQUxMIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM1X1JFR19VU0JfU1RBTExfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM1X1JFRzogVVNCX1NUQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYRDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEQzX1JFR19VU0JfVFhGRF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEQzX1JFRzogVVNCX1RYRkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEQzX1JFR19VU0JfVFhGRF9Nc2sgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEQzX1JFRzogVVNCX1RYRkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYUzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMzX1JFR19VU0JfVENPVU5UX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMzX1JFRzogVVNCX1RDT1VOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMzX1JFR19VU0JfVENPVU5UX01zayAgICAgICAoMHgxZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMzX1JFRzogVVNCX1RDT1VOVCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMzX1JFR19VU0JfVFhfRE9ORV9Qb3MgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMzX1JFRzogVVNCX1RYX0RPTkUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMzX1JFR19VU0JfVFhfRE9ORV9Nc2sgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMzX1JFRzogVVNCX1RYX0RPTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMzX1JFR19VU0JfQUNLX1NUQVRfUG9zICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMzX1JFRzogVVNCX0FDS19TVEFUIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMzX1JFR19VU0JfQUNLX1NUQVRfTXNrICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMzX1JFRzogVVNCX0FDS19TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMzX1JFR19VU0JfVFhfVVJVTl9Qb3MgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMzX1JFRzogVVNCX1RYX1VSVU4gKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWFMzX1JFR19VU0JfVFhfVVJVTl9Nc2sgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWFMzX1JFRzogVVNCX1RYX1VSVU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RYQzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfVFhfRU5fUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX1RYX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfVFhfRU5fTXNrICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX1RYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfTEFTVF9Qb3MgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX0xBU1QgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfTEFTVF9Nc2sgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX0xBU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfVE9HR0xFX1RYX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX1RPR0dMRV9UWCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfVE9HR0xFX1RYX01zayAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX1RPR0dMRV9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfRkxVU0hfUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX0ZMVVNIIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfRkxVU0hfTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX0ZMVVNIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfUkZGX1BvcyAgICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX1JGRiAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfUkZGX01zayAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX1JGRiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfVEZXTF9Qb3MgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX1RGV0wgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfVEZXTF9Nc2sgICAgICAgICAoMHg2MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX1RGV0wgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfSUdOX0lTT01TS19Qb3MgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX0lHTl9JU09NU0sgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9UWEMzX1JFR19VU0JfSUdOX0lTT01TS19Nc2sgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9UWEMzX1JFRzogVVNCX0lHTl9JU09NU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0VQQzZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM2X1JFR19VU0JfRVBfUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM2X1JFRzogVVNCX0VQIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM2X1JFR19VU0JfRVBfTXNrICAgICAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM2X1JFRzogVVNCX0VQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM2X1JFR19VU0JfRVBfRU5fUG9zICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM2X1JFRzogVVNCX0VQX0VOIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM2X1JFR19VU0JfRVBfRU5fTXNrICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM2X1JFRzogVVNCX0VQX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM2X1JFR19VU0JfSVNPX1BvcyAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM2X1JFRzogVVNCX0lTTyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM2X1JFR19VU0JfSVNPX01zayAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM2X1JFRzogVVNCX0lTTyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM2X1JFR19VU0JfU1RBTExfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM2X1JFRzogVVNCX1NUQUxMIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9FUEM2X1JFR19VU0JfU1RBTExfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9FUEM2X1JFRzogVVNCX1NUQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYRDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEQzX1JFR19VU0JfUlhGRF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEQzX1JFRzogVVNCX1JYRkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEQzX1JFR19VU0JfUlhGRF9Nc2sgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEQzX1JFRzogVVNCX1JYRkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYUzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMzX1JFR19VU0JfUkNPVU5UX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMzX1JFRzogVVNCX1JDT1VOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMzX1JFR19VU0JfUkNPVU5UX01zayAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMzX1JFRzogVVNCX1JDT1VOVCAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMzX1JFR19VU0JfUlhfTEFTVF9Qb3MgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMzX1JFRzogVVNCX1JYX0xBU1QgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMzX1JFR19VU0JfUlhfTEFTVF9Nc2sgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMzX1JFRzogVVNCX1JYX0xBU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMzX1JFR19VU0JfVE9HR0xFX1JYX1BvcyAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMzX1JFRzogVVNCX1RPR0dMRV9SWCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMzX1JFR19VU0JfVE9HR0xFX1JYX01zayAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMzX1JFRzogVVNCX1RPR0dMRV9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMzX1JFR19VU0JfU0VUVVBfUG9zICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMzX1JFRzogVVNCX1NFVFVQIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMzX1JFR19VU0JfU0VUVVBfTXNrICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMzX1JFRzogVVNCX1NFVFVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMzX1JFR19VU0JfUlhfRVJSX1BvcyAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMzX1JFRzogVVNCX1JYX0VSUiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWFMzX1JFR19VU0JfUlhfRVJSX01zayAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWFMzX1JFRzogVVNCX1JYX0VSUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1JYQzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMzX1JFR19VU0JfUlhfRU5fUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMzX1JFRzogVVNCX1JYX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMzX1JFR19VU0JfUlhfRU5fTXNrICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMzX1JFRzogVVNCX1JYX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMzX1JFR19VU0JfSUdOX1NFVFVQX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMzX1JFRzogVVNCX0lHTl9TRVRVUCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMzX1JFR19VU0JfSUdOX1NFVFVQX01zayAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMzX1JFRzogVVNCX0lHTl9TRVRVUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMzX1JFR19VU0JfRkxVU0hfUG9zICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMzX1JFRzogVVNCX0ZMVVNIIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMzX1JFR19VU0JfRkxVU0hfTXNrICAgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMzX1JFRzogVVNCX0ZMVVNIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMzX1JFR19VU0JfUkZXTF9Qb3MgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMzX1JFRzogVVNCX1JGV0wgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9SWEMzX1JFR19VU0JfUkZXTF9Nc2sgICAgICAgICAoMHg2MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9SWEMzX1JFRzogVVNCX1JGV0wgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9ETUFfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9ETUFfQ1RSTF9SRUdfVVNCX0RNQV9SWF9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9ETUFfQ1RSTF9SRUc6IFVTQl9ETUFfUlggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9ETUFfQ1RSTF9SRUdfVVNCX0RNQV9SWF9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9ETUFfQ1RSTF9SRUc6IFVTQl9ETUFfUlggKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9ETUFfQ1RSTF9SRUdfVVNCX0RNQV9UWF9Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9ETUFfQ1RSTF9SRUc6IFVTQl9ETUFfVFggKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9ETUFfQ1RSTF9SRUdfVVNCX0RNQV9UWF9Nc2sgICAoMHgzOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9ETUFfQ1RSTF9SRUc6IFVTQl9ETUFfVFggKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9ETUFfQ1RSTF9SRUdfVVNCX0RNQV9FTl9Qb3MgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9ETUFfQ1RSTF9SRUc6IFVTQl9ETUFfRU4gKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9ETUFfQ1RSTF9SRUdfVVNCX0RNQV9FTl9Nc2sgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9ETUFfQ1RSTF9SRUc6IFVTQl9ETUFfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfQ0hBUkdFUl9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVVNCX1VTQl9DSEFSR0VSX0NUUkxfUkVHX1VTQl9DSEFSR0VfT05fUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9DSEFSR0VSX0NUUkxfUkVHOiBVU0JfQ0hBUkdFX09OIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1VTQl9DSEFSR0VSX0NUUkxfUkVHX1VTQl9DSEFSR0VfT05fTXNrICgweDFVTCkgICAgICAgICAgICAgIC8qITwgVVNCIFVTQl9DSEFSR0VSX0NUUkxfUkVHOiBVU0JfQ0hBUkdFX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfSURQX1NSQ19PTl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IElEUF9TUkNfT04gKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfSURQX1NSQ19PTl9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IElEUF9TUkNfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfVkRQX1NSQ19PTl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IFZEUF9TUkNfT04gKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfVkRQX1NSQ19PTl9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IFZEUF9TUkNfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfVkRNX1NSQ19PTl9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IFZETV9TUkNfT04gKEJpdCAzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfVkRNX1NSQ19PTl9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IFZETV9TUkNfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfSURQX1NJTktfT05fUG9zICg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IElEUF9TSU5LX09OIChCaXQgNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfSURQX1NJTktfT05fTXNrICgweDEwVUwpICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IElEUF9TSU5LX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfSURNX1NJTktfT05fUG9zICg1VUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IElETV9TSU5LX09OIChCaXQgNSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfSURNX1NJTktfT05fTXNrICgweDIwVUwpICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IElETV9TSU5LX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9DSEFSR0VSX1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0RDUF9ERVRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9EQ1BfREVUIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0RDUF9ERVRfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9EQ1BfREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0NIR19ERVRfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9DSEdfREVUIChCaXQgMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0NIR19ERVRfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9DSEdfREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0RQX1ZBTF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9EUF9WQUwgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0RQX1ZBTF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9EUF9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0RNX1ZBTF9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9ETV9WQUwgKEJpdCAzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0RNX1ZBTF9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9ETV9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0RQX1ZBTDJfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9EUF9WQUwyIChCaXQgNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0RQX1ZBTDJfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9EUF9WQUwyIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0RNX1ZBTDJfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9ETV9WQUwyIChCaXQgNSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUdfVVNCX0RNX1ZBTDJfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfU1RBVF9SRUc6IFVTQl9ETV9WQUwyIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgc3RydWN0ICdXQUtFVVAnIFBvc2l0aW9uICYgTWFzayAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DVFJMX1JFR19XS1VQX0RFQl9WQUxVRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DVFJMX1JFRzogV0tVUF9ERUJfVkFMVUUgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DVFJMX1JFR19XS1VQX0RFQl9WQUxVRV9Nc2sgKDB4M2ZVTCkgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DVFJMX1JFRzogV0tVUF9ERUJfVkFMVUUgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DVFJMX1JFR19XS1VQX1NGVF9LRVlISVRfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DVFJMX1JFRzogV0tVUF9TRlRfS0VZSElUIChCaXQgNikgICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DVFJMX1JFR19XS1VQX1NGVF9LRVlISVRfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DVFJMX1JFRzogV0tVUF9TRlRfS0VZSElUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DVFJMX1JFR19XS1VQX0VOQUJMRV9JUlFfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DVFJMX1JFRzogV0tVUF9FTkFCTEVfSVJRIChCaXQgNykgICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DVFJMX1JFR19XS1VQX0VOQUJMRV9JUlFfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DVFJMX1JFRzogV0tVUF9FTkFCTEVfSVJRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfUkVTRVRfSVJRX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9SRVNFVF9JUlFfUkVHX1dLVVBfSVJRX1JTVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9SRVNFVF9JUlFfUkVHOiBXS1VQX0lSUV9SU1QgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9SRVNFVF9JUlFfUkVHX1dLVVBfSVJRX1JTVF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9SRVNFVF9JUlFfUkVHOiBXS1VQX0lSUV9SU1QgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1NFTEVDVF9QMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMRUNUX1AwX1JFR19XS1VQX1NFTEVDVF9QMF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMRUNUX1AwX1JFRzogV0tVUF9TRUxFQ1RfUDAgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMRUNUX1AwX1JFR19XS1VQX1NFTEVDVF9QMF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMRUNUX1AwX1JFRzogV0tVUF9TRUxFQ1RfUDAgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9TRUxFQ1RfUDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTEVDVF9QMV9SRUdfV0tVUF9TRUxFQ1RfUDFfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTEVDVF9QMV9SRUc6IFdLVVBfU0VMRUNUX1AxIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTEVDVF9QMV9SRUdfV0tVUF9TRUxFQ1RfUDFfTXNrICgweGZmVUwpICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTEVDVF9QMV9SRUc6IFdLVVBfU0VMRUNUX1AxIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfU0VMRUNUX1AyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxFQ1RfUDJfUkVHX1dLVVBfU0VMRUNUX1AyX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxFQ1RfUDJfUkVHOiBXS1VQX1NFTEVDVF9QMiAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxFQ1RfUDJfUkVHX1dLVVBfU0VMRUNUX1AyX01zayAoMHgxZlVMKSAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxFQ1RfUDJfUkVHOiBXS1VQX1NFTEVDVF9QMiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1NFTEVDVF9QM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMRUNUX1AzX1JFR19XS1VQX1NFTEVDVF9QM19Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMRUNUX1AzX1JFRzogV0tVUF9TRUxFQ1RfUDMgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMRUNUX1AzX1JFR19XS1VQX1NFTEVDVF9QM19Nc2sgKDB4ZmZVTCkgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMRUNUX1AzX1JFRzogV0tVUF9TRUxFQ1RfUDMgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9TRUxFQ1RfUDRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTEVDVF9QNF9SRUdfV0tVUF9TRUxFQ1RfUDRfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTEVDVF9QNF9SRUc6IFdLVVBfU0VMRUNUX1A0IChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTEVDVF9QNF9SRUdfV0tVUF9TRUxFQ1RfUDRfTXNrICgweGZmVUwpICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTEVDVF9QNF9SRUc6IFdLVVBfU0VMRUNUX1A0IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1BPTF9QMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9QT0xfUDBfUkVHX1dLVVBfUE9MX1AwX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9QT0xfUDBfUkVHOiBXS1VQX1BPTF9QMCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9QT0xfUDBfUkVHX1dLVVBfUE9MX1AwX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9QT0xfUDBfUkVHOiBXS1VQX1BPTF9QMCAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1BPTF9QMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9QT0xfUDFfUkVHX1dLVVBfUE9MX1AxX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9QT0xfUDFfUkVHOiBXS1VQX1BPTF9QMSAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9QT0xfUDFfUkVHX1dLVVBfUE9MX1AxX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9QT0xfUDFfUkVHOiBXS1VQX1BPTF9QMSAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1BPTF9QMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9QT0xfUDJfUkVHX1dLVVBfUE9MX1AyX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9QT0xfUDJfUkVHOiBXS1VQX1BPTF9QMiAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9QT0xfUDJfUkVHX1dLVVBfUE9MX1AyX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9QT0xfUDJfUkVHOiBXS1VQX1BPTF9QMiAoQml0ZmllbGQtTWFzazogMHgxZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1BPTF9QM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9QT0xfUDNfUkVHX1dLVVBfUE9MX1AzX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9QT0xfUDNfUkVHOiBXS1VQX1BPTF9QMyAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9QT0xfUDNfUkVHX1dLVVBfUE9MX1AzX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9QT0xfUDNfUkVHOiBXS1VQX1BPTF9QMyAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1BPTF9QNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9QT0xfUDRfUkVHX1dLVVBfUE9MX1A0X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9QT0xfUDRfUkVHOiBXS1VQX1BPTF9QNCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9QT0xfUDRfUkVHX1dLVVBfUE9MX1A0X01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9QT0xfUDRfUkVHOiBXS1VQX1BPTF9QNCAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfU1RBVFVTXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TVEFUVVNfMF9SRUdfV0tVUF9TVEFUX1AwX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TVEFUVVNfMF9SRUc6IFdLVVBfU1RBVF9QMCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TVEFUVVNfMF9SRUdfV0tVUF9TVEFUX1AwX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TVEFUVVNfMF9SRUc6IFdLVVBfU1RBVF9QMCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU1RBVFVTXzBfUkVHX1dLVVBfU1RBVF9QMV9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU1RBVFVTXzBfUkVHOiBXS1VQX1NUQVRfUDEgKEJpdCA4KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU1RBVFVTXzBfUkVHX1dLVVBfU1RBVF9QMV9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU1RBVFVTXzBfUkVHOiBXS1VQX1NUQVRfUDEgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9TVEFUVVNfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NUQVRVU18xX1JFR19XS1VQX1NUQVRfUDJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NUQVRVU18xX1JFRzogV0tVUF9TVEFUX1AyIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NUQVRVU18xX1JFR19XS1VQX1NUQVRfUDJfTXNrICgweDFmVUwpICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NUQVRVU18xX1JFRzogV0tVUF9TVEFUX1AyIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfU1RBVFVTXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TVEFUVVNfMl9SRUdfV0tVUF9TVEFUX1AzX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TVEFUVVNfMl9SRUc6IFdLVVBfU1RBVF9QMyAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TVEFUVVNfMl9SRUdfV0tVUF9TVEFUX1AzX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TVEFUVVNfMl9SRUc6IFdLVVBfU1RBVF9QMyAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU1RBVFVTXzJfUkVHX1dLVVBfU1RBVF9QNF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU1RBVFVTXzJfUkVHOiBXS1VQX1NUQVRfUDQgKEJpdCA4KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU1RBVFVTXzJfUkVHX1dLVVBfU1RBVF9QNF9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU1RBVFVTXzJfUkVHOiBXS1VQX1NUQVRfUDQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfQ0xFQVJfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NMRUFSXzBfUkVHX1dLVVBfQ0xFQVJfUDBfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NMRUFSXzBfUkVHOiBXS1VQX0NMRUFSX1AwIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NMRUFSXzBfUkVHX1dLVVBfQ0xFQVJfUDBfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NMRUFSXzBfUkVHOiBXS1VQX0NMRUFSX1AwIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DTEVBUl8wX1JFR19XS1VQX0NMRUFSX1AxX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DTEVBUl8wX1JFRzogV0tVUF9DTEVBUl9QMSAoQml0IDgpICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DTEVBUl8wX1JFR19XS1VQX0NMRUFSX1AxX01zayAoMHhmZjAwVUwpICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DTEVBUl8wX1JFRzogV0tVUF9DTEVBUl9QMSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9DTEVBUl8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfQ0xFQVJfMV9SRUdfV0tVUF9DTEVBUl9QMl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfQ0xFQVJfMV9SRUc6IFdLVVBfQ0xFQVJfUDIgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfQ0xFQVJfMV9SRUdfV0tVUF9DTEVBUl9QMl9Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfQ0xFQVJfMV9SRUc6IFdLVVBfQ0xFQVJfUDIgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfQ0xFQVJfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NMRUFSXzJfUkVHX1dLVVBfQ0xFQVJfUDNfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NMRUFSXzJfUkVHOiBXS1VQX0NMRUFSX1AzIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NMRUFSXzJfUkVHX1dLVVBfQ0xFQVJfUDNfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NMRUFSXzJfUkVHOiBXS1VQX0NMRUFSX1AzIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DTEVBUl8yX1JFR19XS1VQX0NMRUFSX1A0X1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DTEVBUl8yX1JFRzogV0tVUF9DTEVBUl9QNCAoQml0IDgpICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DTEVBUl8yX1JFR19XS1VQX0NMRUFSX1A0X01zayAoMHhmZjAwVUwpICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DTEVBUl8yX1JFRzogV0tVUF9DTEVBUl9QNCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfU0VMX0dQSU9fUDBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMX0dQSU9fUDBfUkVHX1dLVVBfU0VMX0dQSU9fUDBfUG9zICgwVUwpICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMX0dQSU9fUDBfUkVHOiBXS1VQX1NFTF9HUElPX1AwIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMX0dQSU9fUDBfUkVHX1dLVVBfU0VMX0dQSU9fUDBfTXNrICgweGZmVUwpICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMX0dQSU9fUDBfUkVHOiBXS1VQX1NFTF9HUElPX1AwIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9TRUxfR1BJT19QMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxfR1BJT19QMV9SRUdfV0tVUF9TRUxfR1BJT19QMV9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxfR1BJT19QMV9SRUc6IFdLVVBfU0VMX0dQSU9fUDEgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxfR1BJT19QMV9SRUdfV0tVUF9TRUxfR1BJT19QMV9Nc2sgKDB4ZmZVTCkgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxfR1BJT19QMV9SRUc6IFdLVVBfU0VMX0dQSU9fUDEgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1NFTF9HUElPX1AyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTF9HUElPX1AyX1JFR19XS1VQX1NFTF9HUElPX1AyX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTF9HUElPX1AyX1JFRzogV0tVUF9TRUxfR1BJT19QMiAoQml0IDApICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTF9HUElPX1AyX1JFR19XS1VQX1NFTF9HUElPX1AyX01zayAoMHgxZlVMKSAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTF9HUElPX1AyX1JFRzogV0tVUF9TRUxfR1BJT19QMiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfU0VMX0dQSU9fUDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMX0dQSU9fUDNfUkVHX1dLVVBfU0VMX0dQSU9fUDNfUG9zICgwVUwpICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMX0dQSU9fUDNfUkVHOiBXS1VQX1NFTF9HUElPX1AzIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMX0dQSU9fUDNfUkVHX1dLVVBfU0VMX0dQSU9fUDNfTXNrICgweGZmVUwpICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMX0dQSU9fUDNfUkVHOiBXS1VQX1NFTF9HUElPX1AzIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9TRUxfR1BJT19QNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxfR1BJT19QNF9SRUdfV0tVUF9TRUxfR1BJT19QNF9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxfR1BJT19QNF9SRUc6IFdLVVBfU0VMX0dQSU9fUDQgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxfR1BJT19QNF9SRUdfV0tVUF9TRUxfR1BJT19QNF9Nc2sgKDB4ZmZVTCkgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxfR1BJT19QNF9SRUc6IFdLVVBfU0VMX0dQSU9fUDQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdXRE9HJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0RPR19XQVRDSERPR19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdET0dfV0FUQ0hET0dfUkVHX1dET0dfVkFMX1BvcyAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFdET0cgV0FUQ0hET0dfUkVHOiBXRE9HX1ZBTCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdET0dfV0FUQ0hET0dfUkVHX1dET0dfVkFMX01zayAgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IFdET0cgV0FUQ0hET0dfUkVHOiBXRE9HX1ZBTCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICovCisjZGVmaW5lIFdET0dfV0FUQ0hET0dfUkVHX1dET0dfVkFMX05FR19Qb3MgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFdET0cgV0FUQ0hET0dfUkVHOiBXRE9HX1ZBTF9ORUcgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdET0dfV0FUQ0hET0dfUkVHX1dET0dfVkFMX05FR19Nc2sgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IFdET0cgV0FUQ0hET0dfUkVHOiBXRE9HX1ZBTF9ORUcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIFdET0dfV0FUQ0hET0dfUkVHX1dET0dfV0VOX1BvcyAgICAgICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFdET0cgV0FUQ0hET0dfUkVHOiBXRE9HX1dFTiAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdET0dfV0FUQ0hET0dfUkVHX1dET0dfV0VOX01zayAgICAgICAgKDB4ZmUwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFdET0cgV0FUQ0hET0dfUkVHOiBXRE9HX1dFTiAoQml0ZmllbGQtTWFzazogMHg3ZikgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0RPR19XQVRDSERPR19DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdET0dfV0FUQ0hET0dfQ1RSTF9SRUdfTk1JX1JTVF9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFdET0cgV0FUQ0hET0dfQ1RSTF9SRUc6IE5NSV9SU1QgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdET0dfV0FUQ0hET0dfQ1RSTF9SRUdfTk1JX1JTVF9Nc2sgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFdET0cgV0FUQ0hET0dfQ1RSTF9SRUc6IE5NSV9SU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgUGVyaXBoZXJhbCBtZW1vcnkgbWFwICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgQUVTX0hBU0hfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDIwMDAwVUwKKyNkZWZpbmUgQU5BTUlTQ19CQVNFICAgICAgICAgICAgICAgICAgICAweDUwMDAxQjAwVUwKKyNkZWZpbmUgQVBVX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDA0MDAwVUwKKyNkZWZpbmUgQkxFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwVUwKKyNkZWZpbmUgQ0FDSEVfQkFTRSAgICAgICAgICAgICAgICAgICAgICAweDQwMEMzMDAwVUwKKyNkZWZpbmUgQ0hJUF9WRVJTSU9OX0JBU0UgICAgICAgICAgICAgICAweDUwMDAzMjAwVUwKKyNkZWZpbmUgQ09FWF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAyRjAwVUwKKyNkZWZpbmUgQ1JHX1BFUl9CQVNFICAgICAgICAgICAgICAgICAgICAweDUwMDAxQzAwVUwKKyNkZWZpbmUgQ1JHX1RPUF9CQVNFICAgICAgICAgICAgICAgICAgICAweDUwMDAwMDAwVUwKKyNkZWZpbmUgRENEQ19CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAwMDgwVUwKKyNkZWZpbmUgREVNX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAyRTAwVUwKKyNkZWZpbmUgRE1BX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAzNTAwVUwKKyNkZWZpbmUgRUNDX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDA2MDAwVUwKKyNkZWZpbmUgRlRERl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDQwMDgwMDAwVUwKKyNkZWZpbmUgR1BfVElNRVJTX0JBU0UgICAgICAgICAgICAgICAgICAweDUwMDAzNDAwVUwKKyNkZWZpbmUgR1BBRENfQkFTRSAgICAgICAgICAgICAgICAgICAgICAweDUwMDAxOTAwVUwKKyNkZWZpbmUgR1BJT19CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAzMDAwVUwKKyNkZWZpbmUgR1BSRUdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAweDUwMDAzMzAwVUwKKyNkZWZpbmUgSTJDX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAxNDAwVUwKKyNkZWZpbmUgSTJDMl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAxNTAwVUwKKyNkZWZpbmUgSVJfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAxNzAwVUwKKyNkZWZpbmUgS0JTQ0FOX0JBU0UgICAgICAgICAgICAgICAgICAgICAweDUwMDAxNjAwVUwKKyNkZWZpbmUgT1RQQ19CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDA3RjQwMDAwVUwKKyNkZWZpbmUgUEFUQ0hfQkFTRSAgICAgICAgICAgICAgICAgICAgICAweDQwMDUwMDAwVUwKKyNkZWZpbmUgUExMRElHX0JBU0UgICAgICAgICAgICAgICAgICAgICAweDUwMDAyRDAwVUwKKyNkZWZpbmUgUVNQSUNfQkFTRSAgICAgICAgICAgICAgICAgICAgICAweDBDMDAwMDAwVUwKKyNkZWZpbmUgUVVBRF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAxQTAwVUwKKyNkZWZpbmUgUkZDVV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAyMDAwVUwKKyNkZWZpbmUgUkZDVV9QT1dFUl9CQVNFICAgICAgICAgICAgICAgICAweDUwMDAyMjAwVUwKKyNkZWZpbmUgUkZQVF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAzNjAwVUwKKyNkZWZpbmUgU1BJX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAxMjAwVUwKKyNkZWZpbmUgU1BJMl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAxMzAwVUwKKyNkZWZpbmUgVElNRVIxX0JBU0UgICAgICAgICAgICAgICAgICAgICAweDUwMDAwMjAwVUwKKyNkZWZpbmUgVFJOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDUwMDA1MDAwVUwKKyNkZWZpbmUgVUFSVF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAxMDAwVUwKKyNkZWZpbmUgVUFSVDJfQkFTRSAgICAgICAgICAgICAgICAgICAgICAweDUwMDAxMTAwVUwKKyNkZWZpbmUgVVNCX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAxODAwVUwKKyNkZWZpbmUgV0FLRVVQX0JBU0UgICAgICAgICAgICAgICAgICAgICAweDUwMDAwMTAwVUwKKyNkZWZpbmUgV0RPR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAzMTAwVUwKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICBQZXJpcGhlcmFsIGRlY2xhcmF0aW9uICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgQUVTX0hBU0ggICAgICAgICAgICAgICAgICAgICAgICAoKEFFU19IQVNIX1R5cGUgICAgICAgICAgICopIEFFU19IQVNIX0JBU0UpCisjZGVmaW5lIEFOQU1JU0MgICAgICAgICAgICAgICAgICAgICAgICAgKChBTkFNSVNDX1R5cGUgICAgICAgICAgICAqKSBBTkFNSVNDX0JBU0UpCisjZGVmaW5lIEFQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBUFVfVHlwZSAgICAgICAgICAgICAgICAqKSBBUFVfQkFTRSkKKyNkZWZpbmUgQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJMRV9UeXBlICAgICAgICAgICAgICAgICopIEJMRV9CQVNFKQorI2RlZmluZSBDQUNIRSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0FDSEVfVHlwZSAgICAgICAgICAgICAgKikgQ0FDSEVfQkFTRSkKKyNkZWZpbmUgQ0hJUF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAoKENISVBfVkVSU0lPTl9UeXBlICAgICAgICopIENISVBfVkVSU0lPTl9CQVNFKQorI2RlZmluZSBDT0VYICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ09FWF9UeXBlICAgICAgICAgICAgICAgKikgQ09FWF9CQVNFKQorI2RlZmluZSBDUkdfUEVSICAgICAgICAgICAgICAgICAgICAgICAgICgoQ1JHX1BFUl9UeXBlICAgICAgICAgICAgKikgQ1JHX1BFUl9CQVNFKQorI2RlZmluZSBDUkdfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICgoQ1JHX1RPUF9UeXBlICAgICAgICAgICAgKikgQ1JHX1RPUF9CQVNFKQorI2RlZmluZSBEQ0RDICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRENEQ19UeXBlICAgICAgICAgICAgICAgKikgRENEQ19CQVNFKQorI2RlZmluZSBERU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREVNX1R5cGUgICAgICAgICAgICAgICAgKikgREVNX0JBU0UpCisjZGVmaW5lIERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChETUFfVHlwZSAgICAgICAgICAgICAgICAqKSBETUFfQkFTRSkKKyNkZWZpbmUgRUNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVDQ19UeXBlICAgICAgICAgICAgICAgICopIEVDQ19CQVNFKQorI2RlZmluZSBGVERGICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlRERl9UeXBlICAgICAgICAgICAgICAgKikgRlRERl9CQVNFKQorI2RlZmluZSBHUF9USU1FUlMgICAgICAgICAgICAgICAgICAgICAgICgoR1BfVElNRVJTX1R5cGUgICAgICAgICAgKikgR1BfVElNRVJTX0JBU0UpCisjZGVmaW5lIEdQQURDICAgICAgICAgICAgICAgICAgICAgICAgICAgKChHUEFEQ19UeXBlICAgICAgICAgICAgICAqKSBHUEFEQ19CQVNFKQorI2RlZmluZSBHUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoR1BJT19UeXBlICAgICAgICAgICAgICAgKikgR1BJT19CQVNFKQorI2RlZmluZSBHUFJFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoR1BSRUdfVHlwZSAgICAgICAgICAgICAgKikgR1BSRUdfQkFTRSkKKyNkZWZpbmUgSTJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEkyQ19UeXBlICAgICAgICAgICAgICAgICopIEkyQ19CQVNFKQorI2RlZmluZSBJMkMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSTJDMl9UeXBlICAgICAgICAgICAgICAgKikgSTJDMl9CQVNFKQorI2RlZmluZSBJUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVJfVHlwZSAgICAgICAgICAgICAgICAgKikgSVJfQkFTRSkKKyNkZWZpbmUgS0JTQ0FOICAgICAgICAgICAgICAgICAgICAgICAgICAoKEtCU0NBTl9UeXBlICAgICAgICAgICAgICopIEtCU0NBTl9CQVNFKQorI2RlZmluZSBPVFBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoT1RQQ19UeXBlICAgICAgICAgICAgICAgKikgT1RQQ19CQVNFKQorI2RlZmluZSBQQVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEFUQ0hfVHlwZSAgICAgICAgICAgICAgKikgUEFUQ0hfQkFTRSkKKyNkZWZpbmUgUExMRElHICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBMTERJR19UeXBlICAgICAgICAgICAgICopIFBMTERJR19CQVNFKQorI2RlZmluZSBRU1BJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUVNQSUNfVHlwZSAgICAgICAgICAgICAgKikgUVNQSUNfQkFTRSkKKyNkZWZpbmUgUVVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFFVQURfVHlwZSAgICAgICAgICAgICAgICopIFFVQURfQkFTRSkKKyNkZWZpbmUgUkZDVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJGQ1VfVHlwZSAgICAgICAgICAgICAgICopIFJGQ1VfQkFTRSkKKyNkZWZpbmUgUkZDVV9QT1dFUiAgICAgICAgICAgICAgICAgICAgICAoKFJGQ1VfUE9XRVJfVHlwZSAgICAgICAgICopIFJGQ1VfUE9XRVJfQkFTRSkKKyNkZWZpbmUgUkZQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJGUFRfVHlwZSAgICAgICAgICAgICAgICopIFJGUFRfQkFTRSkKKyNkZWZpbmUgU1BJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNQSV9UeXBlICAgICAgICAgICAgICAgICopIFNQSV9CQVNFKQorI2RlZmluZSBTUEkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1BJMl9UeXBlICAgICAgICAgICAgICAgKikgU1BJMl9CQVNFKQorI2RlZmluZSBUSU1FUjEgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNRVIxX1R5cGUgICAgICAgICAgICAgKikgVElNRVIxX0JBU0UpCisjZGVmaW5lIFRSTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUk5HX1R5cGUgICAgICAgICAgICAgICAqKSBUUk5HX0JBU0UpCisjZGVmaW5lIFVBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVQVJUX1R5cGUgICAgICAgICAgICAgICAqKSBVQVJUX0JBU0UpCisjZGVmaW5lIFVBUlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVQVJUMl9UeXBlICAgICAgICAgICAgICAqKSBVQVJUMl9CQVNFKQorI2RlZmluZSBVU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVVNCX1R5cGUgICAgICAgICAgICAgICAgKikgVVNCX0JBU0UpCisjZGVmaW5lIFdBS0VVUCAgICAgICAgICAgICAgICAgICAgICAgICAgKChXQUtFVVBfVHlwZSAgICAgICAgICAgICAqKSBXQUtFVVBfQkFTRSkKKyNkZWZpbmUgV0RPRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdET0dfVHlwZSAgICAgICAgICAgICAgICopIFdET0dfQkFTRSkKKworCisvKiogQH0gKi8gLyogRW5kIG9mIGdyb3VwIERldmljZV9QZXJpcGhlcmFsX1JlZ2lzdGVycyAqLworLyoqIEB9ICovIC8qIEVuZCBvZiBncm91cCBEQTE0NjgwQkEgKi8KKy8qKiBAfSAqLyAvKiBFbmQgb2YgZ3JvdXAgRGlhbG9nICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmICAvKiBEQTE0NjgwQkFfSCAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL2Ntc2lzX2djYy5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9jbXNpc19nY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjg5ZmJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9jbXNpc19nY2MuaApAQCAtMCwwICsxLDEzNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjbXNpc19nY2MuaAorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NIENvcmUgRnVuY3Rpb24vSW5zdHJ1Y3Rpb24gSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmbmRlZiBfX0NNU0lTX0dDQ19ICisjZGVmaW5lIF9fQ01TSVNfR0NDX0gKKworLyogaWdub3JlIHNvbWUgR0NDIHdhcm5pbmdzICovCisjaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3NpZ24tY29udmVyc2lvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1wYXJhbWV0ZXIiCisjZW5kaWYKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgRnVuY3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKiBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICAgIFxkZWZncm91cCBDTVNJU19Db3JlX1JlZ0FjY0Z1bmN0aW9ucyBDTVNJUyBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIElSUSBJbnRlcnJ1cHRzCisgIFxkZXRhaWxzIEVuYWJsZXMgSVJRIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIEktYml0IGluIHRoZSBDUFNSLgorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLgorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZW5hYmxlX2lycSh2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoImNwc2llIGkiIDogOiA6ICJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBJUlEgSW50ZXJydXB0cworICBcZGV0YWlscyBEaXNhYmxlcyBJUlEgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBJLWJpdCBpbiB0aGUgQ1BTUi4KKyAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4KKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2Rpc2FibGVfaXJxKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiY3BzaWQgaSIgOiA6IDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQ29udHJvbCBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBDb250cm9sIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgQ29udHJvbCBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9DT05UUk9MKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgY29udHJvbCIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQ29udHJvbCBSZWdpc3RlcgorICBcZGV0YWlscyBXcml0ZXMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBDb250cm9sIFJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBjb250cm9sICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0NPTlRST0wodWludDMyX3QgY29udHJvbCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgY29udHJvbCwgJTAiIDogOiAiciIgKGNvbnRyb2wpIDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgSVBTUiBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBJUFNSIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgSVBTUiBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9JUFNSKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgaXBzciIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQVBTUiBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBBUFNSIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgQVBTUiBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9BUFNSKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgYXBzciIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgeFBTUiBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSB4UFNSIFJlZ2lzdGVyLgorCisgICAgXHJldHVybiAgICAgICAgICAgICAgIHhQU1IgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfeFBTUih2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIHhwc3IiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQU1AgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfUFNQKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgcHNwXG4iICA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKS4KKyAgXHBhcmFtIFtpbl0gICAgdG9wT2ZQcm9jU3RhY2sgIFByb2Nlc3MgU3RhY2sgUG9pbnRlciB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9QU1AodWludDMyX3QgdG9wT2ZQcm9jU3RhY2spCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIHBzcCwgJTBcbiIgOiA6ICJyIiAodG9wT2ZQcm9jU3RhY2spIDogInNwIik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBNYWluIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLgorICBccmV0dXJuICAgICAgICAgICAgICAgTVNQIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X01TUCh2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIG1zcFxuIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBNYWluIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKS4KKworICAgIFxwYXJhbSBbaW5dICAgIHRvcE9mTWFpblN0YWNrICBNYWluIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfTVNQKHVpbnQzMl90IHRvcE9mTWFpblN0YWNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBtc3AsICUwXG4iIDogOiAiciIgKHRvcE9mTWFpblN0YWNrKSA6ICJzcCIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUHJpb3JpdHkgTWFzaworICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwcmlvcml0eSBtYXNrIGJpdCBmcm9tIHRoZSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgUHJpb3JpdHkgTWFzayB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9QUklNQVNLKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgcHJpbWFzayIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgTWFzaworICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgcHJpTWFzayAgUHJpb3JpdHkgTWFzaworICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BSSU1BU0sodWludDMyX3QgcHJpTWFzaykKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgcHJpbWFzaywgJTAiIDogOiAiciIgKHByaU1hc2spIDogIm1lbW9yeSIpOworfQorCisKKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkKKworLyoqCisgIFxicmllZiAgIEVuYWJsZSBGSVEKKyAgXGRldGFpbHMgRW5hYmxlcyBGSVEgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgRi1iaXQgaW4gdGhlIENQU1IuCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19lbmFibGVfZmF1bHRfaXJxKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiY3BzaWUgZiIgOiA6IDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIEZJUQorICBcZGV0YWlscyBEaXNhYmxlcyBGSVEgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBGLWJpdCBpbiB0aGUgQ1BTUi4KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4KKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2Rpc2FibGVfZmF1bHRfaXJxKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiY3BzaWQgZiIgOiA6IDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQmFzZSBQcmlvcml0eQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgQmFzZSBQcmlvcml0eSByZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9CQVNFUFJJKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgYmFzZXByaSIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJKHVpbnQzMl90IHZhbHVlKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBiYXNlcHJpLCAlMCIgOiA6ICJyIiAodmFsdWUpIDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eSB3aXRoIGNvbmRpdGlvbgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3RlciBvbmx5IGlmIEJBU0VQUkkgbWFza2luZyBpcyBkaXNhYmxlZCwKKyAgICAgICAgICAgb3IgdGhlIG5ldyB2YWx1ZSBpbmNyZWFzZXMgdGhlIEJBU0VQUkkgcHJpb3JpdHkgbGV2ZWwuCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfQkFTRVBSSV9NQVgodWludDMyX3QgdmFsdWUpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIGJhc2VwcmlfbWF4LCAlMCIgOiA6ICJyIiAodmFsdWUpIDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgRmF1bHQgTWFzaworICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBGYXVsdCBNYXNrIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgRmF1bHQgTWFzayByZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9GQVVMVE1BU0sodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBmYXVsdG1hc2siIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IEZhdWx0IE1hc2sKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEZhdWx0IE1hc2sgcmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIGZhdWx0TWFzayAgRmF1bHQgTWFzayB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9GQVVMVE1BU0sodWludDMyX3QgZmF1bHRNYXNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBmYXVsdG1hc2ssICUwIiA6IDogInIiIChmYXVsdE1hc2spIDogIm1lbW9yeSIpOworfQorCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPj0gMHgwM1UpICovCisKKworI2lmICAgICAgIChfX0NPUlRFWF9NID09IDB4MDRVKSB8fCAoX19DT1JURVhfTSA9PSAweDA3VSkKKworLyoqCisgIFxicmllZiAgIEdldCBGUFNDUgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZQU0NSKHZvaWQpCit7CisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQorICB1aW50MzJfdCByZXN1bHQ7CisKKyAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLworICBfX0FTTSB2b2xhdGlsZSAoIiIpOworICBfX0FTTSB2b2xhdGlsZSAoIlZNUlMgJTAsIGZwc2NyIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgX19BU00gdm9sYXRpbGUgKCIiKTsKKyAgcmV0dXJuKHJlc3VsdCk7CisjZWxzZQorICAgcmV0dXJuKDApOworI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBGUFNDUgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIGZwc2NyICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9GUFNDUih1aW50MzJfdCBmcHNjcikKK3sKKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpCisgIC8qIEVtcHR5IGFzbSBzdGF0ZW1lbnQgd29ya3MgYXMgYSBzY2hlZHVsaW5nIGJhcnJpZXIgKi8KKyAgX19BU00gdm9sYXRpbGUgKCIiKTsKKyAgX19BU00gdm9sYXRpbGUgKCJWTVNSIGZwc2NyLCAlMCIgOiA6ICJyIiAoZnBzY3IpIDogInZmcGNjIik7CisgIF9fQVNNIHZvbGF0aWxlICgiIik7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIChfX0NPUlRFWF9NID09IDB4MDRVKSB8fCAoX19DT1JURVhfTSA9PSAweDA3VSkgKi8KKworCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zICovCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGRlZmdyb3VwIENNU0lTX0NvcmVfSW5zdHJ1Y3Rpb25JbnRlcmZhY2UgQ01TSVMgQ29yZSBJbnN0cnVjdGlvbiBJbnRlcmZhY2UKKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBpbnN0cnVjdGlvbnMKKyAgQHsKKyovCisKKy8qIERlZmluZSBtYWNyb3MgZm9yIHBvcnRpbmcgdG8gYm90aCB0aHVtYjEgYW5kIHRodW1iMi4KKyAqIEZvciB0aHVtYjEsIHVzZSBsb3cgcmVnaXN0ZXIgKHIwLXI3KSwgc3BlY2lmaWVkIGJ5IGNvbnN0cmFpbnQgImwiCisgKiBPdGhlcndpc2UsIHVzZSBnZW5lcmFsIHJlZ2lzdGVycywgc3BlY2lmaWVkIGJ5IGNvbnN0cmFpbnQgInIiICovCisjaWYgZGVmaW5lZCAoX190aHVtYl9fKSAmJiAhZGVmaW5lZCAoX190aHVtYjJfXykKKyNkZWZpbmUgX19DTVNJU19HQ0NfT1VUX1JFRyhyKSAiPWwiIChyKQorI2RlZmluZSBfX0NNU0lTX0dDQ19VU0VfUkVHKHIpICJsIiAocikKKyNlbHNlCisjZGVmaW5lIF9fQ01TSVNfR0NDX09VVF9SRUcocikgIj1yIiAocikKKyNkZWZpbmUgX19DTVNJU19HQ0NfVVNFX1JFRyhyKSAiciIgKHIpCisjZW5kaWYKKworLyoqCisgIFxicmllZiAgIE5vIE9wZXJhdGlvbgorICBcZGV0YWlscyBObyBPcGVyYXRpb24gZG9lcyBub3RoaW5nLiBUaGlzIGluc3RydWN0aW9uIGNhbiBiZSB1c2VkIGZvciBjb2RlIGFsaWdubWVudCBwdXJwb3Nlcy4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fTk9QKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgibm9wIik7Cit9CisKKworLyoqCisgIFxicmllZiAgIFdhaXQgRm9yIEludGVycnVwdAorICBcZGV0YWlscyBXYWl0IEZvciBJbnRlcnJ1cHQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgc3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIG9uZSBvZiBhIG51bWJlciBvZiBldmVudHMgb2NjdXJzLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19XRkkodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJ3ZmkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgV2FpdCBGb3IgRXZlbnQKKyAgXGRldGFpbHMgV2FpdCBGb3IgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgcGVybWl0cyB0aGUgcHJvY2Vzc29yIHRvIGVudGVyCisgICAgYSBsb3ctcG93ZXIgc3RhdGUgdW50aWwgb25lIG9mIGEgbnVtYmVyIG9mIGV2ZW50cyBvY2N1cnMuCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1dGRSh2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoIndmZSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZW5kIEV2ZW50CisgIFxkZXRhaWxzIFNlbmQgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uLiBJdCBjYXVzZXMgYW4gZXZlbnQgdG8gYmUgc2lnbmFsZWQgdG8gdGhlIENQVS4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU0VWKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgic2V2Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEluc3RydWN0aW9uIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyCisgIFxkZXRhaWxzIEluc3RydWN0aW9uIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyIGZsdXNoZXMgdGhlIHBpcGVsaW5lIGluIHRoZSBwcm9jZXNzb3IsCisgICAgICAgICAgIHNvIHRoYXQgYWxsIGluc3RydWN0aW9ucyBmb2xsb3dpbmcgdGhlIElTQiBhcmUgZmV0Y2hlZCBmcm9tIGNhY2hlIG9yIG1lbW9yeSwKKyAgICAgICAgICAgYWZ0ZXIgdGhlIGluc3RydWN0aW9uIGhhcyBiZWVuIGNvbXBsZXRlZC4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fSVNCKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiaXNiIDB4RiI6OjoibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIERhdGEgU3luY2hyb25pemF0aW9uIEJhcnJpZXIKKyAgXGRldGFpbHMgQWN0cyBhcyBhIHNwZWNpYWwga2luZCBvZiBEYXRhIE1lbW9yeSBCYXJyaWVyLgorICAgICAgICAgICBJdCBjb21wbGV0ZXMgd2hlbiBhbGwgZXhwbGljaXQgbWVtb3J5IGFjY2Vzc2VzIGJlZm9yZSB0aGlzIGluc3RydWN0aW9uIGNvbXBsZXRlLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19EU0Iodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJkc2IgMHhGIjo6OiJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGF0YSBNZW1vcnkgQmFycmllcgorICBcZGV0YWlscyBFbnN1cmVzIHRoZSBhcHBhcmVudCBvcmRlciBvZiB0aGUgZXhwbGljaXQgbWVtb3J5IG9wZXJhdGlvbnMgYmVmb3JlCisgICAgICAgICAgIGFuZCBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24sIHdpdGhvdXQgZW5zdXJpbmcgdGhlaXIgY29tcGxldGlvbi4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fRE1CKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiZG1iIDB4RiI6OjoibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciAoMzIgYml0KQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiBpbnRlZ2VyIHZhbHVlLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JFVih1aW50MzJfdCB2YWx1ZSkKK3sKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA1KQorICByZXR1cm4gX19idWlsdGluX2Jzd2FwMzIodmFsdWUpOworI2Vsc2UKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicmV2ICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHIChyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyAodmFsdWUpICk7CisgIHJldHVybihyZXN1bHQpOworI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciAoMTYgYml0KQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiB0d28gdW5zaWduZWQgc2hvcnQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JFVjE2KHVpbnQzMl90IHZhbHVlKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJyZXYxNiAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyAocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcgKHZhbHVlKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyIGluIHNpZ25lZCBzaG9ydCB2YWx1ZQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiBhIHNpZ25lZCBzaG9ydCB2YWx1ZSB3aXRoIHNpZ24gZXh0ZW5zaW9uIHRvIGludGVnZXIuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIGludDMyX3QgX19SRVZTSChpbnQzMl90IHZhbHVlKQoreworI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDgpCisgIHJldHVybiAoc2hvcnQpX19idWlsdGluX2Jzd2FwMTYodmFsdWUpOworI2Vsc2UKKyAgaW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJyZXZzaCAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyAocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcgKHZhbHVlKSApOworICByZXR1cm4ocmVzdWx0KTsKKyNlbmRpZgorfQorCisKKy8qKgorICBcYnJpZWYgICBSb3RhdGUgUmlnaHQgaW4gdW5zaWduZWQgdmFsdWUgKDMyIGJpdCkKKyAgXGRldGFpbHMgUm90YXRlIFJpZ2h0IChpbW1lZGlhdGUpIHByb3ZpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciByb3RhdGVkIGJ5IGEgdmFyaWFibGUgbnVtYmVyIG9mIGJpdHMuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByb3RhdGUKKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIE51bWJlciBvZiBCaXRzIHRvIHJvdGF0ZQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUk9SKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICByZXR1cm4gKG9wMSA+PiBvcDIpIHwgKG9wMSA8PCAoMzJVIC0gb3AyKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEJyZWFrcG9pbnQKKyAgXGRldGFpbHMgQ2F1c2VzIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXIgRGVidWcgc3RhdGUuCisgICAgICAgICAgIERlYnVnIHRvb2xzIGNhbiB1c2UgdGhpcyB0byBpbnZlc3RpZ2F0ZSBzeXN0ZW0gc3RhdGUgd2hlbiB0aGUgaW5zdHJ1Y3Rpb24gYXQgYSBwYXJ0aWN1bGFyIGFkZHJlc3MgaXMgcmVhY2hlZC4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIGlzIGlnbm9yZWQgYnkgdGhlIHByb2Nlc3Nvci4KKyAgICAgICAgICAgICAgICAgSWYgcmVxdWlyZWQsIGEgZGVidWdnZXIgY2FuIHVzZSBpdCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBicmVha3BvaW50LgorICovCisjZGVmaW5lIF9fQktQVCh2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fQVNNIHZvbGF0aWxlICgiYmtwdCAiI3ZhbHVlKQorCisKKy8qKgorICBcYnJpZWYgICBSZXZlcnNlIGJpdCBvcmRlciBvZiB2YWx1ZQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYml0IG9yZGVyIG9mIHRoZSBnaXZlbiB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19SQklUKHVpbnQzMl90IHZhbHVlKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpCisgICBfX0FTTSB2b2xhdGlsZSAoInJiaXQgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKHZhbHVlKSApOworI2Vsc2UKKyAgaW50MzJfdCBzID0gNCAvKnNpemVvZih2KSovICogOCAtIDE7IC8qIGV4dHJhIHNoaWZ0IG5lZWRlZCBhdCBlbmQgKi8KKworICByZXN1bHQgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgLyogciB3aWxsIGJlIHJldmVyc2VkIGJpdHMgb2YgdjsgZmlyc3QgZ2V0IExTQiBvZiB2ICovCisgIGZvciAodmFsdWUgPj49IDFVOyB2YWx1ZTsgdmFsdWUgPj49IDFVKQorICB7CisgICAgcmVzdWx0IDw8PSAxVTsKKyAgICByZXN1bHQgfD0gdmFsdWUgJiAxVTsKKyAgICBzLS07CisgIH0KKyAgcmVzdWx0IDw8PSBzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNoaWZ0IHdoZW4gdidzIGhpZ2hlc3QgYml0cyBhcmUgemVybyAqLworI2VuZGlmCisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBDb3VudCBsZWFkaW5nIHplcm9zCisgIFxkZXRhaWxzIENvdW50cyB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2YgYSBkYXRhIHZhbHVlLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGNvdW50IHRoZSBsZWFkaW5nIHplcm9zCisgIFxyZXR1cm4gICAgICAgICAgICAgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3MgaW4gdmFsdWUKKyAqLworI2RlZmluZSBfX0NMWiAgICAgICAgICAgICBfX2J1aWx0aW5fY2x6CisKKworI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkKKworLyoqCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50OF90IF9fTERSRVhCKHZvbGF0aWxlIHVpbnQ4X3QgKmFkZHIpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisjaWYgKF9fR05VQ19fID4gNCkgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gOCkKKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyZXhiICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqYWRkcikgKTsKKyNlbHNlCisgICAgLyogUHJpb3IgdG8gR0NDIDQuOCwgIlEiIHdpbGwgYmUgZXhwYW5kZWQgdG8gW3J4LCAjMF0gd2hpY2ggaXMgbm90CisgICAgICAgYWNjZXB0ZWQgYnkgYXNzZW1ibGVyLiBTbyBoYXMgdG8gdXNlIGZvbGxvd2luZyBsZXNzIGVmZmljaWVudCBwYXR0ZXJuLgorICAgICovCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcmV4YiAlMCwgWyUxXSIgOiAiPXIiIChyZXN1bHQpIDogInIiIChhZGRyKSA6ICJtZW1vcnkiICk7CisjZW5kaWYKKyAgIHJldHVybiAoKHVpbnQ4X3QpIHJlc3VsdCk7ICAgIC8qIEFkZCBleHBsaWNpdCB0eXBlIGNhc3QgaGVyZSAqLworfQorCisKKy8qKgorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MTZfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MTZfdCBfX0xEUkVYSCh2b2xhdGlsZSB1aW50MTZfdCAqYWRkcikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA4KQorICAgX19BU00gdm9sYXRpbGUgKCJsZHJleGggJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCphZGRyKSApOworI2Vsc2UKKyAgICAvKiBQcmlvciB0byBHQ0MgNC44LCAiUSIgd2lsbCBiZSBleHBhbmRlZCB0byBbcngsICMwXSB3aGljaCBpcyBub3QKKyAgICAgICBhY2NlcHRlZCBieSBhc3NlbWJsZXIuIFNvIGhhcyB0byB1c2UgZm9sbG93aW5nIGxlc3MgZWZmaWNpZW50IHBhdHRlcm4uCisgICAgKi8KKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyZXhoICUwLCBbJTFdIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKGFkZHIpIDogIm1lbW9yeSIgKTsKKyNlbmRpZgorICAgcmV0dXJuICgodWludDE2X3QpIHJlc3VsdCk7ICAgIC8qIEFkZCBleHBsaWNpdCB0eXBlIGNhc3QgaGVyZSAqLworfQorCisKKy8qKgorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX0xEUkVYVyh2b2xhdGlsZSB1aW50MzJfdCAqYWRkcikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyZXggJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCphZGRyKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQKKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NUUkVYQih1aW50OF90IHZhbHVlLCB2b2xhdGlsZSB1aW50OF90ICphZGRyKQoreworICAgdWludDMyX3QgcmVzdWx0OworCisgICBfX0FTTSB2b2xhdGlsZSAoInN0cmV4YiAlMCwgJTIsICUxIiA6ICI9JnIiIChyZXN1bHQpLCAiPVEiICgqYWRkcikgOiAiciIgKCh1aW50MzJfdCl2YWx1ZSkgKTsKKyAgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQKKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NUUkVYSCh1aW50MTZfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDE2X3QgKmFkZHIpCit7CisgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RyZXhoICUwLCAlMiwgJTEiIDogIj0mciIgKHJlc3VsdCksICI9USIgKCphZGRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZAorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1RSRVhXKHVpbnQzMl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MzJfdCAqYWRkcikKK3sKKyAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJzdHJleCAlMCwgJTIsICUxIiA6ICI9JnIiIChyZXN1bHQpLCAiPVEiICgqYWRkcikgOiAiciIgKHZhbHVlKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFJlbW92ZSB0aGUgZXhjbHVzaXZlIGxvY2sKKyAgXGRldGFpbHMgUmVtb3ZlcyB0aGUgZXhjbHVzaXZlIGxvY2sgd2hpY2ggaXMgY3JlYXRlZCBieSBMRFJFWC4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fQ0xSRVgodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJjbHJleCIgOjo6ICJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2lnbmVkIFNhdHVyYXRlCisgIFxkZXRhaWxzIFNhdHVyYXRlcyBhIHNpZ25lZCB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBiZSBzYXR1cmF0ZWQKKyAgXHBhcmFtIFtpbl0gICAgc2F0ICBCaXQgcG9zaXRpb24gdG8gc2F0dXJhdGUgdG8gKDEuLjMyKQorICBccmV0dXJuICAgICAgICAgICAgIFNhdHVyYXRlZCB2YWx1ZQorICovCisjZGVmaW5lIF9fU1NBVChBUkcxLEFSRzIpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSk7IFwKKyAgX19BU00gKCJzc2F0ICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJJIiAoQVJHMiksICJyIiAoX19BUkcxKSApOyBcCisgIF9fUkVTOyBcCisgfSkKKworCisvKioKKyAgXGJyaWVmICAgVW5zaWduZWQgU2F0dXJhdGUKKyAgXGRldGFpbHMgU2F0dXJhdGVzIGFuIHVuc2lnbmVkIHZhbHVlLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGJlIHNhdHVyYXRlZAorICBccGFyYW0gW2luXSAgICBzYXQgIEJpdCBwb3NpdGlvbiB0byBzYXR1cmF0ZSB0byAoMC4uMzEpCisgIFxyZXR1cm4gICAgICAgICAgICAgU2F0dXJhdGVkIHZhbHVlCisgKi8KKyNkZWZpbmUgX19VU0FUKEFSRzEsQVJHMikgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXAorICBfX0FTTSAoInVzYXQgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCisKKy8qKgorICBcYnJpZWYgICBSb3RhdGUgUmlnaHQgd2l0aCBFeHRlbmQgKDMyIGJpdCkKKyAgXGRldGFpbHMgTW92ZXMgZWFjaCBiaXQgb2YgYSBiaXRzdHJpbmcgcmlnaHQgYnkgb25lIGJpdC4KKyAgICAgICAgICAgVGhlIGNhcnJ5IGlucHV0IGlzIHNoaWZ0ZWQgaW4gYXQgdGhlIGxlZnQgZW5kIG9mIHRoZSBiaXRzdHJpbmcuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByb3RhdGUKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJvdGF0ZWQgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JSWCh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicnJ4ICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHIChyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyAodmFsdWUpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50OF90IF9fTERSQlQodm9sYXRpbGUgdWludDhfdCAqYWRkcikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA4KQorICAgX19BU00gdm9sYXRpbGUgKCJsZHJidCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJRIiAoKmFkZHIpICk7CisjZWxzZQorICAgIC8qIFByaW9yIHRvIEdDQyA0LjgsICJRIiB3aWxsIGJlIGV4cGFuZGVkIHRvIFtyeCwgIzBdIHdoaWNoIGlzIG5vdAorICAgICAgIGFjY2VwdGVkIGJ5IGFzc2VtYmxlci4gU28gaGFzIHRvIHVzZSBmb2xsb3dpbmcgbGVzcyBlZmZpY2llbnQgcGF0dGVybi4KKyAgICAqLworICAgX19BU00gdm9sYXRpbGUgKCJsZHJidCAlMCwgWyUxXSIgOiAiPXIiIChyZXN1bHQpIDogInIiIChhZGRyKSA6ICJtZW1vcnkiICk7CisjZW5kaWYKKyAgIHJldHVybiAoKHVpbnQ4X3QpIHJlc3VsdCk7ICAgIC8qIEFkZCBleHBsaWNpdCB0eXBlIGNhc3QgaGVyZSAqLworfQorCisKKy8qKgorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IF9fTERSSFQodm9sYXRpbGUgdWludDE2X3QgKmFkZHIpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisjaWYgKF9fR05VQ19fID4gNCkgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gOCkKKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyaHQgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCphZGRyKSApOworI2Vsc2UKKyAgICAvKiBQcmlvciB0byBHQ0MgNC44LCAiUSIgd2lsbCBiZSBleHBhbmRlZCB0byBbcngsICMwXSB3aGljaCBpcyBub3QKKyAgICAgICBhY2NlcHRlZCBieSBhc3NlbWJsZXIuIFNvIGhhcyB0byB1c2UgZm9sbG93aW5nIGxlc3MgZWZmaWNpZW50IHBhdHRlcm4uCisgICAgKi8KKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyaHQgJTAsIFslMV0iIDogIj1yIiAocmVzdWx0KSA6ICJyIiAoYWRkcikgOiAibWVtb3J5IiApOworI2VuZGlmCisgICByZXR1cm4gKCh1aW50MTZfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovCit9CisKKworLyoqCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19MRFJUKHZvbGF0aWxlIHVpbnQzMl90ICphZGRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJsZHJ0ICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqYWRkcikgKTsKKyAgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RSQlQodWludDhfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDhfdCAqYWRkcikKK3sKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RyYnQgJTEsICUwIiA6ICI9USIgKCphZGRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworfQorCisKKy8qKgorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJIVCh1aW50MTZfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDE2X3QgKmFkZHIpCit7CisgICBfX0FTTSB2b2xhdGlsZSAoInN0cmh0ICUxLCAlMCIgOiAiPVEiICgqYWRkcikgOiAiciIgKCh1aW50MzJfdCl2YWx1ZSkgKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RSVCh1aW50MzJfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDMyX3QgKmFkZHIpCit7CisgICBfX0FTTSB2b2xhdGlsZSAoInN0cnQgJTEsICUwIiA6ICI9USIgKCphZGRyKSA6ICJyIiAodmFsdWUpICk7Cit9CisKKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSAqLworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMgIENvbXBpbGVyIHNwZWNpZmljIEludHJpbnNpY3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqIFxkZWZncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgQ01TSVMgU0lNRCBJbnRyaW5zaWNzCisgIEFjY2VzcyB0byBkZWRpY2F0ZWQgU0lNRCBpbnN0cnVjdGlvbnMKKyAgQHsKKyovCisKKyNpZiAoX19DT1JURVhfTSA+PSAweDA0VSkgIC8qIG9ubHkgZm9yIENvcnRleC1NNCBhbmQgYWJvdmUgKi8KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2FkZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2hhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1YWRkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSEFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVoYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicXN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaHN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzdWI4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXFzdWI4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhzdWI4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0FERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUUFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2hhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUUFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cWFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVoYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1NVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUVNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2hzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUVNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cXN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVoc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0FTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2FzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaGFzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1YXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cWFzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSEFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhhc3ggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1NBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic3NheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaHNheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1c2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cXNheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSFNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhzYXggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNBRDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzYWQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTQURBOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1c2FkYTggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKyNkZWZpbmUgX19TU0FUMTYoQVJHMSxBUkcyKSBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSk7IFwKKyAgX19BU00gKCJzc2F0MTYgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCisjZGVmaW5lIF9fVVNBVDE2KEFSRzEsQVJHMikgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXAorICBfX0FTTSAoInVzYXQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXAorICBfX1JFUzsgXAorIH0pCisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVhUQjE2KHVpbnQzMl90IG9wMSkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXh0YjE2ICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVhUQUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXh0YWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TWFRCMTYodWludDMyX3Qgb3AxKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzeHRiMTYgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSkpOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TWFRBQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzeHRhYjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVUFEICAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtdWFkICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVUFEWCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtdWFkeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxBRCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MQURYICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbWxhZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQoreworICB1bmlvbiBsbHJlZ191eworICAgIHVpbnQzMl90IHczMlsyXTsKKyAgICB1aW50NjRfdCB3NjQ7CisgIH0gbGxyOworICBsbHIudzY0ID0gYWNjOworCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxhbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlswXSksICI9ciIgKGxsci53MzJbMV0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlswXSksICIxIiAobGxyLnczMlsxXSkgKTsKKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzFdKSwgIj1yIiAobGxyLnczMlswXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzFdKSwgIjEiIChsbHIudzMyWzBdKSApOworI2VuZGlmCisKKyAgcmV0dXJuKGxsci53NjQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTEFMRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpCit7CisgIHVuaW9uIGxscmVnX3V7CisgICAgdWludDMyX3QgdzMyWzJdOworICAgIHVpbnQ2NF90IHc2NDsKKyAgfSBsbHI7CisgIGxsci53NjQgPSBhY2M7CisKKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlswXSksICI9ciIgKGxsci53MzJbMV0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlswXSksICIxIiAobGxyLnczMlsxXSkgKTsKKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlsxXSksICI9ciIgKGxsci53MzJbMF0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlsxXSksICIxIiAobGxyLnczMlswXSkgKTsKKyNlbmRpZgorCisgIHJldHVybihsbHIudzY0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVTRCAgKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbXVzZCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVTRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbXVzZHggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MU0QgKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSwgInIiIChvcDMpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTFNEWCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic21sc2R4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSwgInIiIChvcDMpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTFNMRCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykKK3sKKyAgdW5pb24gbGxyZWdfdXsKKyAgICB1aW50MzJfdCB3MzJbMl07CisgICAgdWludDY0X3QgdzY0OworICB9IGxscjsKKyAgbGxyLnc2NCA9IGFjYzsKKworI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sc2xkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMF0pLCAiPXIiIChsbHIudzMyWzFdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMF0pLCAiMSIgKGxsci53MzJbMV0pICk7CisjZWxzZSAgICAgICAgICAgICAgIC8qIEJpZyBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlsxXSksICI9ciIgKGxsci53MzJbMF0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlsxXSksICIxIiAobGxyLnczMlswXSkgKTsKKyNlbmRpZgorCisgIHJldHVybihsbHIudzY0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDY0X3QgX19TTUxTTERYICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQoreworICB1bmlvbiBsbHJlZ191eworICAgIHVpbnQzMl90IHczMlsyXTsKKyAgICB1aW50NjRfdCB3NjQ7CisgIH0gbGxyOworICBsbHIudzY0ID0gYWNjOworCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzbGR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMF0pLCAiPXIiIChsbHIudzMyWzFdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMF0pLCAiMSIgKGxsci53MzJbMV0pICk7CisjZWxzZSAgICAgICAgICAgICAgIC8qIEJpZyBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzbGR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMV0pLCAiPXIiIChsbHIudzMyWzBdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMV0pLCAiMSIgKGxsci53MzJbMF0pICk7CisjZW5kaWYKKworICByZXR1cm4obGxyLnc2NCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0VMICAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNlbCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgIGludDMyX3QgX19RQUREKCBpbnQzMl90IG9wMSwgIGludDMyX3Qgb3AyKQoreworICBpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhZGQgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FICBpbnQzMl90IF9fUVNVQiggaW50MzJfdCBvcDEsICBpbnQzMl90IG9wMikKK3sKKyAgaW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc3ViICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisjZGVmaW5lIF9fUEtIQlQoQVJHMSxBUkcyLEFSRzMpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSksIF9fQVJHMiA9IChBUkcyKTsgXAorICBfX0FTTSAoInBraGJ0ICUwLCAlMSwgJTIsIGxzbCAlMyIgOiAiPXIiIChfX1JFUykgOiAgInIiIChfX0FSRzEpLCAiciIgKF9fQVJHMiksICJJIiAoQVJHMykgICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCisjZGVmaW5lIF9fUEtIVEIoQVJHMSxBUkcyLEFSRzMpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSksIF9fQVJHMiA9IChBUkcyKTsgXAorICBpZiAoQVJHMyA9PSAwKSBcCisgICAgX19BU00gKCJwa2h0YiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSAgKTsgXAorICBlbHNlIFwKKyAgICBfX0FTTSAoInBraHRiICUwLCAlMSwgJTIsIGFzciAlMyIgOiAiPXIiIChfX1JFUykgOiAgInIiIChfX0FSRzEpLCAiciIgKF9fQVJHMiksICJJIiAoQVJHMykgICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTUxBIChpbnQzMl90IG9wMSwgaW50MzJfdCBvcDIsIGludDMyX3Qgb3AzKQoreworIGludDMyX3QgcmVzdWx0OworCisgX19BU00gdm9sYXRpbGUgKCJzbW1sYSAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpOiAiciIgIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworIHJldHVybihyZXN1bHQpOworfQorCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPj0gMHgwNCkgKi8KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyAqLworCisKKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisjZW5kaWYgLyogX19DTVNJU19HQ0NfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9jb3JlX2NtMC5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9jb3JlX2NtMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYWU0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL2NvcmVfY20wLmgKQEAgLTAsMCArMSw3OTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjb3JlX2NtMC5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0wIENvcmUgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9DTTBfSF9HRU5FUklDCisjZGVmaW5lIF9fQ09SRV9DTTBfSF9HRU5FUklDCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgIFxwYWdlIENNU0lTX01JU1JBX0V4Y2VwdGlvbnMgIE1JU1JBLUM6MjAwNCBDb21wbGlhbmNlIEV4Y2VwdGlvbnMKKyAgQ01TSVMgdmlvbGF0ZXMgdGhlIGZvbGxvd2luZyBNSVNSQS1DOjIwMDQgcnVsZXM6CisKKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDguNSwgb2JqZWN0L2Z1bmN0aW9uIGRlZmluaXRpb24gaW4gaGVhZGVyIGZpbGUuPGJyPgorICAgICBGdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBoZWFkZXIgZmlsZXMgYXJlIHVzZWQgdG8gYWxsb3cgJ2lubGluaW5nJy4KKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgMTguNCwgZGVjbGFyYXRpb24gb2YgdW5pb24gdHlwZSBvciBvYmplY3Qgb2YgdW5pb24gdHlwZTogJ3suLi59Jy48YnI+CisgICAgIFVuaW9ucyBhcmUgdXNlZCBmb3IgZWZmZWN0aXZlIHJlcHJlc2VudGF0aW9uIG9mIGNvcmUgcmVnaXN0ZXJzLgorCisgICBcbGkgQWR2aXNvcnkgUnVsZSAxOS43LCBGdW5jdGlvbi1saWtlIG1hY3JvIGRlZmluZWQuPGJyPgorICAgICBGdW5jdGlvbi1saWtlIG1hY3JvcyBhcmUgdXNlZCB0byBhbGxvdyBtb3JlIGVmZmljaWVudCBjb2RlLgorICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBDTVNJUyBkZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcaW5ncm91cCBDb3J0ZXhfTTAKKyAgQHsKKyAqLworCisvKiAgQ01TSVMgQ00wIGRlZmluaXRpb25zICovCisjZGVmaW5lIF9fQ00wX0NNU0lTX1ZFUlNJT05fTUFJTiAgKDB4MDRVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBbMzE6MTZdIENNU0lTIEhBTCBtYWluIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTBfQ01TSVNfVkVSU0lPTl9TVUIgICAoMHgxRVUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFsxNTowXSAgQ01TSVMgSEFMIHN1YiB2ZXJzaW9uICovCisjZGVmaW5lIF9fQ00wX0NNU0lTX1ZFUlNJT04gICAgICAgKChfX0NNMF9DTVNJU19WRVJTSU9OX01BSU4gPDwgMTZVKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQ00wX0NNU0lTX1ZFUlNJT05fU1VCICAgICAgICAgICApICAgICAgICAvKiE8IENNU0lTIEhBTCB2ZXJzaW9uIG51bWJlciAqLworCisjZGVmaW5lIF9fQ09SVEVYX00gICAgICAgICAgICAgICAgKDB4MDBVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3J0ZXgtTSBDb3JlICovCisKKworI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIF9faW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBfX2lubGluZQorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBJQVIgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBJQVIgQ29tcGlsZXIuIE9ubHkgYXZhaWxhYmxlIGluIEhpZ2ggb3B0aW1pemF0aW9uIG1vZGUhICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBUSSBDQ1MgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgVEFTS0lORyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjZGVmaW5lIF9fcGFja2VkCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBDT1NNSUMgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlci4gVXNlIC1wYzk5IG9uIGNvbXBpbGUgbGluZSAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxzZQorICAjZXJyb3IgVW5rbm93biBjb21waWxlcgorI2VuZGlmCisKKy8qKiBfX0ZQVV9VU0VEIGluZGljYXRlcyB3aGV0aGVyIGFuIEZQVSBpcyB1c2VkIG9yIG5vdC4KKyAgICBUaGlzIGNvcmUgZG9lcyBub3Qgc3VwcG9ydCBhbiBGUFUgYXQgYWxsCisqLworI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisKKyNpZiBkZWZpbmVkICggX19DQ19BUk0gKQorICAjaWYgZGVmaW5lZCBfX1RBUkdFVF9GUFVfVkZQCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2lmIGRlZmluZWQgX19BUk1fUENTX1ZGUAorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNpZiBkZWZpbmVkIChfX1ZGUF9GUF9fKSAmJiAhZGVmaW5lZChfX1NPRlRGUF9fKQorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2lmIGRlZmluZWQgX19BUk1WRlBfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2lmIGRlZmluZWQgX19USV9WRlBfU1VQUE9SVF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgI2lmIGRlZmluZWQgX19GUFVfVkZQX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjaWYgKCBfX0NTTUNfXyAmIDB4NDAwVSkKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZW5kaWYKKworI2luY2x1ZGUgImNvcmVfY21JbnN0ci5oIiAgICAgICAgICAgICAgICAvKiBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAqLworI2luY2x1ZGUgImNvcmVfY21GdW5jLmgiICAgICAgICAgICAgICAgICAvKiBDb3JlIEZ1bmN0aW9uIEFjY2VzcyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DT1JFX0NNMF9IX0dFTkVSSUMgKi8KKworI2lmbmRlZiBfX0NNU0lTX0dFTkVSSUMKKworI2lmbmRlZiBfX0NPUkVfQ00wX0hfREVQRU5EQU5UCisjZGVmaW5lIF9fQ09SRV9DTTBfSF9ERVBFTkRBTlQKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogY2hlY2sgZGV2aWNlIGRlZmluZXMgYW5kIHVzZSBkZWZhdWx0cyAqLworI2lmIGRlZmluZWQgX19DSEVDS19ERVZJQ0VfREVGSU5FUworICAjaWZuZGVmIF9fQ00wX1JFVgorICAgICNkZWZpbmUgX19DTTBfUkVWICAgICAgICAgICAgICAgMHgwMDAwVQorICAgICN3YXJuaW5nICJfX0NNMF9SRVYgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX05WSUNfUFJJT19CSVRTCisgICAgI2RlZmluZSBfX05WSUNfUFJJT19CSVRTICAgICAgICAgIDJVCisgICAgI3dhcm5pbmcgIl9fTlZJQ19QUklPX0JJVFMgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnCisgICAgI2RlZmluZSBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnICAgIDBVCisgICAgI3dhcm5pbmcgIl9fVmVuZG9yX1N5c1RpY2tDb25maWcgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisjZW5kaWYKKworLyogSU8gZGVmaW5pdGlvbnMgKGFjY2VzcyByZXN0cmljdGlvbnMgdG8gcGVyaXBoZXJhbCByZWdpc3RlcnMpICovCisvKioKKyAgICBcZGVmZ3JvdXAgQ01TSVNfZ2xvYl9kZWZzIENNU0lTIEdsb2JhbCBEZWZpbmVzCisKKyAgICA8c3Ryb25nPklPIFR5cGUgUXVhbGlmaWVyczwvc3Ryb25nPiBhcmUgdXNlZAorICAgIFxsaSB0byBzcGVjaWZ5IHRoZSBhY2Nlc3MgdG8gcGVyaXBoZXJhbCB2YXJpYWJsZXMuCisgICAgXGxpIGZvciBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBwZXJpcGhlcmFsIHJlZ2lzdGVyIGRlYnVnIGluZm9ybWF0aW9uLgorKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworICAjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8KKyNlbHNlCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2VuZGlmCisjZGVmaW5lICAgICBfX08gICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAnd3JpdGUgb25seScgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU8gICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHBlcm1pc3Npb25zICovCisKKy8qIGZvbGxvd2luZyBkZWZpbmVzIHNob3VsZCBiZSB1c2VkIGZvciBzdHJ1Y3R1cmUgbWVtYmVycyAqLworI2RlZmluZSAgICAgX19JTSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAvKiEgRGVmaW5lcyAncmVhZCBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX09NICAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICd3cml0ZSBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX0lPTSAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ29ydGV4X00wICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEFic3RyYWN0aW9uCisgIENvcmUgUmVnaXN0ZXIgY29udGFpbjoKKyAgLSBDb3JlIFJlZ2lzdGVyCisgIC0gQ29yZSBOVklDIFJlZ2lzdGVyCisgIC0gQ29yZSBTQ0IgUmVnaXN0ZXIKKyAgLSBDb3JlIFN5c1RpY2sgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX2NvcmVfcmVnaXN0ZXIgRGVmaW5lcyBhbmQgVHlwZSBEZWZpbml0aW9ucworICBcYnJpZWYgVHlwZSBkZWZpbml0aW9ucyBhbmQgZGVmaW5lcyBmb3IgQ29ydGV4LU0gcHJvY2Vzc29yIGJhc2VkIGRldmljZXMuCisqLworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19DT1JFICBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXJzCisgIFxicmllZiAgICAgIENvcmUgUmVnaXN0ZXIgdHlwZSBkZWZpbml0aW9ucy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKEFQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyODsgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uMjcgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBBUFNSX1R5cGU7CisKKy8qIEFQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQVBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogTWFzayAqLworCisjZGVmaW5lIEFQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgSW50ZXJydXB0IFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChJUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyMzsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IElQU1JfVHlwZTsKKworLyogSVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJUFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IElQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgU3BlY2lhbC1QdXJwb3NlIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVycyAoeFBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MTU7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjIzICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFQ6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI0ICBUaHVtYiBiaXQgICAgICAgIChyZWFkIDApICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMTozOyAgICAgICAgICAgICAgIC8qITwgYml0OiAyNS4uMjcgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSB4UFNSX1R5cGU7CisKKy8qIHhQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgeFBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogTWFzayAqLworCisjZGVmaW5lIHhQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1RfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBUIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVF9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1RfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgTWFzayAqLworCisjZGVmaW5lIHhQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgeFBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBDb250cm9sIFJlZ2lzdGVycyAoQ09OVFJPTCkuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjE7ICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMCAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBTUFNFTDoxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMSAgU3RhY2sgdG8gYmUgdXNlZCAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6MzA7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDIuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBDT05UUk9MX1R5cGU7CisKKy8qIENPTlRST0wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IENPTlRST0xfU1BTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19DT1JFICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfTlZJQyAgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKQorICBcYnJpZWYgICAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgTlZJQyBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IElTRVJbMVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzMxVV07CisgIF9fSU9NIHVpbnQzMl90IElDRVJbMVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSU0VSVkVEMVszMVVdOworICBfX0lPTSB1aW50MzJfdCBJU1BSWzFVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxMDAgKFIvVykgIEludGVycnVwdCBTZXQgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMzFVXTsKKyAgX19JT00gdWludDMyX3QgSUNQUlsxVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbMzFVXTsKKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzY0VV07CisgIF9fSU9NIHVpbnQzMl90IElQWzhVXTsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwMCAoUi9XKSAgSW50ZXJydXB0IFByaW9yaXR5IFJlZ2lzdGVyICovCit9ICBOVklDX1R5cGU7CisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX05WSUMgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1NDQiAgICAgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIChTQ0IpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBDUFVJRDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIENQVUlEIEJhc2UgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgSUNTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBJbnRlcnJ1cHQgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwOworICBfX0lPTSB1aW50MzJfdCBBSVJDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBTQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMTsKKyAgX19JT00gdWludDMyX3QgU0hQWzJVXTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDFDIChSL1cpICBTeXN0ZW0gSGFuZGxlcnMgUHJpb3JpdHkgUmVnaXN0ZXJzLiBbMF0gaXMgUkVTRVJWRUQgKi8KKyAgX19JT00gdWludDMyX3QgU0hDU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworfSBTQ0JfVHlwZTsKKworLyogU0NCIENQVUlEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX01zayAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfUG9zICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9WQVJJQU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Nc2sgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fUG9zICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fTXNrICAgICAgICAgICAgICAgKDB4RkZGVUwgPDwgU0NCX0NQVUlEX1BBUlROT19Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Nc2sgICAgICAgICAgICAgKDB4RlVMIC8qPDwgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyovKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gTWFzayAqLworCisvKiBTQ0IgSW50ZXJydXB0IENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcyAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfTXNrICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MpICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX01zayAgICAgICAgICAgICgweDFGRlVMIC8qPDwgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MqLykgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBNYXNrICovCisKKy8qIFNDQiBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZX01zayAgICAgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX1BvcyAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZU1RBVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfTXNrICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zKSAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcyAgICAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IEVORElBTkVTUyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfRU5ESUFORVNTX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX0VORElBTkVTU19Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IEVORElBTkVTUyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcyAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfTXNrICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX1BvcykgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIE1hc2sgKi8KKworLyogU0NCIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NFVk9OUEVORF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TRVZPTlBFTkRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTRVZPTlBFTkQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX1BvcyAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NMRUVQREVFUF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TTEVFUERFRVBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUERFRVAgTWFzayAqLworCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQT05FWElUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBPTkVYSVRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQT05FWElUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQT05FWElUIE1hc2sgKi8KKworLyogU0NCIENvbmZpZ3VyYXRpb24gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQ0NSX1NUS0FMSUdOX1BvcyAgICAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBTVEtBTElHTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1NUS0FMSUdOX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9TVEtBTElHTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBTVEtBTElHTiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVU5BTElHTl9UUlAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9VTkFMSUdOX1RSUF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfVU5BTElHTl9UUlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVU5BTElHTl9UUlAgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Nc2sgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TVkNBTExQRU5ERURfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TQ0IgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1N5c1RpY2sgICAgIFN5c3RlbSBUaWNrIFRpbWVyIChTeXNUaWNrKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBUaW1lciBSZWdpc3RlcnMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gVGltZXIgKFN5c1RpY2spLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIFN5c1RpY2sgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IExPQUQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgU3lzVGljayBSZWxvYWQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgVkFMOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBTeXNUaWNrIEN1cnJlbnQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQ0FMSUI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSLyApICBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyICovCit9IFN5c1RpY2tfVHlwZTsKKworLyogU3lzVGljayBDb250cm9sIC8gU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2sgICAgICAgICAgICAoMVVMIC8qPDwgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MqLykgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgTWFzayAqLworCisvKiBTeXNUaWNrIFJlbG9hZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ3VycmVudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Nc2sgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX01zayAgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zKi8pICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TeXNUaWNrICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19Db3JlRGVidWcgICAgICAgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMgKENvcmVEZWJ1ZykKKyAgXGJyaWVmICAgIENvcnRleC1NMCBDb3JlIERlYnVnIFJlZ2lzdGVycyAoRENCIHJlZ2lzdGVycywgU0hDU1IsIGFuZCBERlNSKSBhcmUgb25seSBhY2Nlc3NpYmxlIG92ZXIgREFQIGFuZCBub3QgdmlhIHByb2Nlc3Nvci4KKyAgICAgICAgICAgIFRoZXJlZm9yZSB0aGV5IGFyZSBub3QgY292ZXJlZCBieSB0aGUgQ29ydGV4LU0wIGhlYWRlciBmaWxlLgorICBAeworICovCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19Db3JlRGVidWcgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2JpdGZpZWxkICAgICBDb3JlIHJlZ2lzdGVyIGJpdCBmaWVsZCBtYWNyb3MKKyAgXGJyaWVmICAgICAgTWFjcm9zIGZvciB1c2Ugd2l0aCBiaXQgZmllbGQgZGVmaW5pdGlvbnMgKHh4eF9Qb3MsIHh4eF9Nc2spLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBNYXNrIGFuZCBzaGlmdCBhIGJpdCBmaWVsZCB2YWx1ZSBmb3IgdXNlIGluIGEgcmVnaXN0ZXIgYml0IHJhbmdlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHRoZSBiaXQgZmllbGQuCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9WQUwyRkxEKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSA8PCBmaWVsZCAjIyBfUG9zKSAmIGZpZWxkICMjIF9Nc2spCisKKy8qKgorICBcYnJpZWYgICAgIE1hc2sgYW5kIHNoaWZ0IGEgcmVnaXN0ZXIgdmFsdWUgdG8gZXh0cmFjdCBhIGJpdCBmaWxlZCB2YWx1ZS4KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiByZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIGJpdCBmaWVsZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9GTEQyVkFMKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSAmIGZpZWxkICMjIF9Nc2spID4+IGZpZWxkICMjIF9Qb3MpCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX2NvcmVfYml0ZmllbGQgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2Jhc2UgICAgIENvcmUgRGVmaW5pdGlvbnMKKyAgXGJyaWVmICAgICAgRGVmaW5pdGlvbnMgZm9yIGJhc2UgYWRkcmVzc2VzLCB1bmlvbnMsIGFuZCBzdHJ1Y3R1cmVzLgorICBAeworICovCisKKy8qIE1lbW9yeSBtYXBwaW5nIG9mIENvcnRleC1NMCBIYXJkd2FyZSAqLworI2RlZmluZSBTQ1NfQkFTRSAgICAgICAgICAgICgweEUwMDBFMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgU3BhY2UgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFN5c1RpY2tfQkFTRSAgICAgICAgKFNDU19CQVNFICsgIDB4MDAxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBOVklDX0JBU0UgICAgICAgICAgIChTQ1NfQkFTRSArICAweDAxMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU0NCX0JBU0UgICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDAwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIEJsb2NrIEJhc2UgQWRkcmVzcyAqLworCisjZGVmaW5lIFNDQiAgICAgICAgICAgICAgICAgKChTQ0JfVHlwZSAgICAgICAqKSAgICAgU0NCX0JBU0UgICAgICApICAgLyohPCBTQ0IgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgU3lzVGljayAgICAgICAgICAgICAoKFN5c1RpY2tfVHlwZSAgICopICAgICBTeXNUaWNrX0JBU0UgICkgICAvKiE8IFN5c1RpY2sgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgTlZJQyAgICAgICAgICAgICAgICAoKE5WSUNfVHlwZSAgICAgICopICAgICBOVklDX0JBU0UgICAgICkgICAvKiE8IE5WSUMgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKworCisvKkB9ICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIKKyAgQ29yZSBGdW5jdGlvbiBJbnRlcmZhY2UgY29udGFpbnM6CisgIC0gQ29yZSBOVklDIEZ1bmN0aW9ucworICAtIENvcmUgU3lzVGljayBGdW5jdGlvbnMKKyAgLSBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UgRnVuY3Rpb25zIGFuZCBJbnN0cnVjdGlvbnMgUmVmZXJlbmNlCisqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICBOVklDIGZ1bmN0aW9ucyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyBOVklDIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgbWFuYWdlIGludGVycnVwdHMgYW5kIGV4Y2VwdGlvbnMgdmlhIHRoZSBOVklDLgorICBAeworICovCisjaW5jbHVkZSAic2RrX2RlZnMuaCIgLyogRGVjbGFyZXMgSVJRbl9UeXBlICovCisvKiBJbnRlcnJ1cHQgUHJpb3JpdGllcyBhcmUgV09SRCBhY2Nlc3NpYmxlIG9ubHkgdW5kZXIgQVJNdjZNICAgICAgICAgICAgICAgICAgICovCisvKiBUaGUgZm9sbG93aW5nIE1BQ1JPUyBoYW5kbGUgZ2VuZXJhdGlvbiBvZiB0aGUgcmVnaXN0ZXIgb2Zmc2V0IGFuZCBieXRlIG1hc2tzICovCisjZGVmaW5lIF9CSVRfU0hJRlQoSVJRbikgICAgICAgICAoICAoKCgodWludDMyX3QpKGludDMyX3QpKElSUW4pKSAgICAgICAgICkgICAgICAmICAweDAzVUwpICogOFVMKQorI2RlZmluZSBfU0hQX0lEWChJUlFuKSAgICAgICAgICAgKCAoKCgoKHVpbnQzMl90KShpbnQzMl90KShJUlFuKSkgJiAweDBGVUwpLThVTCkgPj4gICAgMlVMKSAgICAgICkKKyNkZWZpbmUgX0lQX0lEWChJUlFuKSAgICAgICAgICAgICggICAoKCh1aW50MzJfdCkoaW50MzJfdCkoSVJRbikpICAgICAgICAgICAgICAgID4+ICAgIDJVTCkgICAgICApCisKKworLyoqCisgIFxicmllZiAgIEVuYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgRW5hYmxlcyBhIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0VuYWJsZUlSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SVNFUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBEaXNhYmxlcyBhIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0Rpc2FibGVJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklDRVJbMFVdID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwZW5kaW5nIHJlZ2lzdGVyIGluIHRoZSBOVklDIGFuZCByZXR1cm5zIHRoZSBwZW5kaW5nIGJpdCBmb3IgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICAwICBJbnRlcnJ1cHQgc3RhdHVzIGlzIG5vdCBwZW5kaW5nLgorICBccmV0dXJuICAgICAgICAgICAgIDEgIEludGVycnVwdCBzdGF0dXMgaXMgcGVuZGluZy4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JU1BSWzBVXSAmICgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgU2V0cyB0aGUgcGVuZGluZyBiaXQgb2YgYW4gZXh0ZXJuYWwgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JU1BSWzBVXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIENsZWFyIFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIENsZWFycyB0aGUgcGVuZGluZyBiaXQgb2YgYW4gZXh0ZXJuYWwgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19DbGVhclBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklDUFJbMFVdID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IEludGVycnVwdCBQcmlvcml0eQorICBcZGV0YWlscyBTZXRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisgIFxub3RlICAgIFRoZSBwcmlvcml0eSBjYW5ub3QgYmUgc2V0IGZvciBldmVyeSBjb3JlIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccGFyYW0gW2luXSAgcHJpb3JpdHkgIFByaW9yaXR5IHRvIHNldC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbiwgdWludDMyX3QgcHJpb3JpdHkpCit7CisgIGlmICgoaW50MzJfdCkoSVJRbikgPCAwKQorICB7CisgICAgU0NCLT5TSFBbX1NIUF9JRFgoSVJRbildID0gKCh1aW50MzJfdCkoU0NCLT5TSFBbX1NIUF9JRFgoSVJRbildICYgfigweEZGVUwgPDwgX0JJVF9TSElGVChJUlFuKSkpIHwKKyAgICAgICAoKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKSA8PCBfQklUX1NISUZUKElSUW4pKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgTlZJQy0+SVBbX0lQX0lEWChJUlFuKV0gID0gKCh1aW50MzJfdCkoTlZJQy0+SVBbX0lQX0lEWChJUlFuKV0gICYgfigweEZGVUwgPDwgX0JJVF9TSElGVChJUlFuKSkpIHwKKyAgICAgICAoKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKSA8PCBfQklUX1NISUZUKElSUW4pKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEludGVycnVwdCBQcmlvcml0eQorICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorICAgICAgICAgICBUaGUgaW50ZXJydXB0IG51bWJlciBjYW4gYmUgcG9zaXRpdmUgdG8gc3BlY2lmeSBhbiBleHRlcm5hbCAoZGV2aWNlIHNwZWNpZmljKSBpbnRlcnJ1cHQsCisgICAgICAgICAgIG9yIG5lZ2F0aXZlIHRvIHNwZWNpZnkgYW4gaW50ZXJuYWwgKGNvcmUpIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIEludGVycnVwdCBQcmlvcml0eS4KKyAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBpcyBhbGlnbmVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIGltcGxlbWVudGVkIHByaW9yaXR5IGJpdHMgb2YgdGhlIG1pY3JvY29udHJvbGxlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4pCit7CisKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICByZXR1cm4oKHVpbnQzMl90KSgoKFNDQi0+U0hQW19TSFBfSURYKElSUW4pXSA+PiBfQklUX1NISUZUKElSUW4pICkgJiAodWludDMyX3QpMHhGRlVMKSA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SVBbIF9JUF9JRFgoSVJRbildID4+IF9CSVRfU0hJRlQoSVJRbikgKSAmICh1aW50MzJfdCkweEZGVUwpID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgU3lzdGVtIFJlc2V0CisgIFxkZXRhaWxzIEluaXRpYXRlcyBhIHN5c3RlbSByZXNldCByZXF1ZXN0IHRvIHJlc2V0IHRoZSBNQ1UuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU3lzdGVtUmVzZXQodm9pZCkKK3sKKyAgX19EU0IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIGFsbCBvdXRzdGFuZGluZyBtZW1vcnkgYWNjZXNzZXMgaW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyZWQgd3JpdGUgYXJlIGNvbXBsZXRlZCBiZWZvcmUgcmVzZXQgKi8KKyAgU0NCLT5BSVJDUiAgPSAoKDB4NUZBVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSB8CisgICAgICAgICAgICAgICAgIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2spOworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgY29tcGxldGlvbiBvZiBtZW1vcnkgYWNjZXNzICovCisKKyAgZm9yKDs7KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2FpdCB1bnRpbCByZXNldCAqLworICB7CisgICAgX19OT1AoKTsKKyAgfQorfQorCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX05WSUNGdW5jdGlvbnMgKi8KKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgU3lzVGljayBmdW5jdGlvbiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zIFN5c1RpY2sgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBjb25maWd1cmUgdGhlIFN5c3RlbS4KKyAgQHsKKyAqLworCisjaWYgKF9fVmVuZG9yX1N5c1RpY2tDb25maWcgPT0gMFUpCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gVGljayBDb25maWd1cmF0aW9uCisgIFxkZXRhaWxzIEluaXRpYWxpemVzIHRoZSBTeXN0ZW0gVGltZXIgYW5kIGl0cyBpbnRlcnJ1cHQsIGFuZCBzdGFydHMgdGhlIFN5c3RlbSBUaWNrIFRpbWVyLgorICAgICAgICAgICBDb3VudGVyIGlzIGluIGZyZWUgcnVubmluZyBtb2RlIHRvIGdlbmVyYXRlIHBlcmlvZGljIGludGVycnVwdHMuCisgIFxwYXJhbSBbaW5dICB0aWNrcyAgTnVtYmVyIG9mIHRpY2tzIGJldHdlZW4gdHdvIGludGVycnVwdHMuCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkLgorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZC4KKyAgXG5vdGUgICAgV2hlbiB0aGUgdmFyaWFibGUgPGI+X19WZW5kb3JfU3lzVGlja0NvbmZpZzwvYj4gaXMgc2V0IHRvIDEsIHRoZW4gdGhlCisgICAgICAgICAgIGZ1bmN0aW9uIDxiPlN5c1RpY2tfQ29uZmlnPC9iPiBpcyBub3QgaW5jbHVkZWQuIEluIHRoaXMgY2FzZSwgdGhlIGZpbGUgPGI+PGk+ZGV2aWNlPC9pPi5oPC9iPgorICAgICAgICAgICBtdXN0IGNvbnRhaW4gYSB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFN5c1RpY2tfQ29uZmlnKHVpbnQzMl90IHRpY2tzKQoreworICBpZiAoKHRpY2tzIC0gMVVMKSA+IFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrKQorICB7CisgICAgcmV0dXJuICgxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbG9hZCB2YWx1ZSBpbXBvc3NpYmxlICovCisgIH0KKworICBTeXNUaWNrLT5MT0FEICA9ICh1aW50MzJfdCkodGlja3MgLSAxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgcmVsb2FkIHJlZ2lzdGVyICovCisgIE5WSUNfU2V0UHJpb3JpdHkgKFN5c1RpY2tfSVJRbiwgKDFVTCA8PCBfX05WSUNfUFJJT19CSVRTKSAtIDFVTCk7IC8qIHNldCBQcmlvcml0eSBmb3IgU3lzdGljayBJbnRlcnJ1cHQgKi8KKyAgU3lzVGljay0+VkFMICAgPSAwVUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9hZCB0aGUgU3lzVGljayBDb3VudGVyIFZhbHVlICovCisgIFN5c1RpY2stPkNUUkwgID0gU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgIHwKKyAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfRU5BQkxFX01zazsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIFN5c1RpY2sgSVJRIGFuZCBTeXNUaWNrIFRpbWVyICovCisgIHJldHVybiAoMFVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIHN1Y2Nlc3NmdWwgKi8KK30KKworI2VuZGlmCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfU3lzVGlja0Z1bmN0aW9ucyAqLworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DT1JFX0NNMF9IX0RFUEVOREFOVCAqLworCisjZW5kaWYgLyogX19DTVNJU19HRU5FUklDICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL2NvcmVfY21GdW5jLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL2NvcmVfY21GdW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyYTQ4YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvY29yZV9jbUZ1bmMuaApAQCAtMCwwICsxLDg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY29yZV9jbUZ1bmMuaAorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NIENvcmUgRnVuY3Rpb24gQWNjZXNzIEhlYWRlciBGaWxlCisgKiBAdmVyc2lvbiAgVjQuMzAKKyAqIEBkYXRlICAgICAyMC4gT2N0b2JlciAyMDE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNSBBUk0gTElNSVRFRAorCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAqCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKyNpZiAgIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAjcHJhZ21hIHN5c3RlbV9pbmNsdWRlICAgICAgICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlIGZvciBNSVNSQSBjaGVjayAqLworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI3ByYWdtYSBjbGFuZyBzeXN0ZW1faGVhZGVyICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlICovCisjZW5kaWYKKworI2lmbmRlZiBfX0NPUkVfQ01GVU5DX0gKKyNkZWZpbmUgX19DT1JFX0NNRlVOQ19ICisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDb3JlIEZ1bmN0aW9uIEFjY2VzcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgQ01TSVMgQ29yZSBSZWdpc3RlciBBY2Nlc3MgRnVuY3Rpb25zCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBSZWFsVmlldyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjaW5jbHVkZSAiY21zaXNfYXJtY2MuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0gQVJNIENvbXBpbGVyIFY2IC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2luY2x1ZGUgImNtc2lzX2FybWNjX1Y2LmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEdOVSBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNpbmNsdWRlICJjbXNpc19nY2MuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0gSUNDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjaW5jbHVkZSA8Y21zaXNfaWFyLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFRJIENDUyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2luY2x1ZGUgPGNtc2lzX2Njcy5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUQVNLSU5HIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAvKgorICAgKiBUaGUgQ01TSVMgZnVuY3Rpb25zIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBhcyBpbnRyaW5zaWNzIGluIHRoZSBjb21waWxlci4KKyAgICogUGxlYXNlIHVzZSAiY2FybSAtP2kiIHRvIGdldCBhbiB1cCB0byBkYXRlIGxpc3Qgb2YgYWxsIGludHJpbnNpY3MsCisgICAqIEluY2x1ZGluZyB0aGUgQ01TSVMgb25lcy4KKyAgICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIENPU01JQyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNpbmNsdWRlIDxjbXNpc19jc20uaD4KKworI2VuZGlmCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zICovCisKKyNlbmRpZiAvKiBfX0NPUkVfQ01GVU5DX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvY29yZV9jbUluc3RyLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL2NvcmVfY21JbnN0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzRiMGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL2NvcmVfY21JbnN0ci5oCkBAIC0wLDAgKzEsODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjb3JlX2NtSW5zdHIuaAorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzIEhlYWRlciBGaWxlCisgKiBAdmVyc2lvbiAgVjQuMzAKKyAqIEBkYXRlICAgICAyMC4gT2N0b2JlciAyMDE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNSBBUk0gTElNSVRFRAorCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAqCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKyNpZiAgIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAjcHJhZ21hIHN5c3RlbV9pbmNsdWRlICAgICAgICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlIGZvciBNSVNSQSBjaGVjayAqLworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI3ByYWdtYSBjbGFuZyBzeXN0ZW1faGVhZGVyICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlICovCisjZW5kaWYKKworI2lmbmRlZiBfX0NPUkVfQ01JTlNUUl9ICisjZGVmaW5lIF9fQ09SRV9DTUlOU1RSX0gKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29yZSBJbnN0cnVjdGlvbiBBY2Nlc3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKiBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSBDTVNJUyBDb3JlIEluc3RydWN0aW9uIEludGVyZmFjZQorICBBY2Nlc3MgdG8gZGVkaWNhdGVkIGluc3RydWN0aW9ucworICBAeworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gUmVhbFZpZXcgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgI2luY2x1ZGUgImNtc2lzX2FybWNjLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEFSTSBDb21waWxlciBWNiAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNpbmNsdWRlICJjbXNpc19hcm1jY19WNi5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBHTlUgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAjaW5jbHVkZSAiY21zaXNfZ2NjLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIElDQyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2luY2x1ZGUgPGNtc2lzX2lhci5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUSSBDQ1MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19UTVM0NzBfXyApCisgICNpbmNsdWRlIDxjbXNpc19jY3MuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gVEFTS0lORyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgLyoKKyAgICogVGhlIENNU0lTIGZ1bmN0aW9ucyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYXMgaW50cmluc2ljcyBpbiB0aGUgY29tcGlsZXIuCisgICAqIFBsZWFzZSB1c2UgImNhcm0gLT9pIiB0byBnZXQgYW4gdXAgdG8gZGF0ZSBsaXN0IG9mIGFsbCBpbnRyaW5zaWNzLAorICAgKiBJbmNsdWRpbmcgdGhlIENNU0lTIG9uZXMuCisgICAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBDT1NNSUMgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjaW5jbHVkZSA8Y21zaXNfY3NtLmg+CisKKyNlbmRpZgorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVfSW5zdHJ1Y3Rpb25JbnRlcmZhY2UgKi8KKworI2VuZGlmIC8qIF9fQ09SRV9DTUlOU1RSX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvaW50ZXJydXB0cy5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9pbnRlcnJ1cHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5MDJjYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvaW50ZXJydXB0cy5oCkBAIC0wLDAgKzEsMTUxIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIFNZU1RFTQorICogXHsKKyAqIFxhZGR0b2dyb3VwIElOVEVSUlVQVFMKKyAqIAorICogXGJyaWVmIEludGVycnVwdCBwcmlvcml0eSBjb25maWd1cmF0aW9uCisgKgorICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGludGVycnVwdHMuaAorICoKKyAqIEBicmllZiBJbnRlcnJ1cHQgcHJpb3JpdHkgY29uZmlndXJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgSU5URVJSVVBUU19IXworI2RlZmluZSBJTlRFUlJVUFRTX0hfCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgU2V0dXAgaW50ZXJydXB0IHByaW9yaXRpZXMKKyAqCisgKiBXaGVuIENQVSBpcyByZXNldCBhbGwgaW50ZXJydXB0cyBoYXZlIHNvbWUgcHJpb3JpdHkgc2V0dXAuCisgKiBSZXNldCAgICAgLTMKKyAqIE5NSSAgICAgICAtMgorICogSGFyZEZhdWx0IC0xCisgKiBBbGwgb3RoZXIgaW50ZXJydXB0cyBoYXZlIGNvbmZpZ3VyYWJsZSBwcmlvcml0eSB0aGF0IGlzIHNldCB0byAwLgorICogSWYgc29tZSBpbnRlcnJ1cHRzIHNob3VsZCBoYXZlIHByaW9yaXR5IG90aGVyIHRoZW4gZGVmYXVsdCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkLgorICogQXJndW1lbnQgXHAgcHJpb3MgY2FuIHNwZWNpZnkgb25seSB0aG9zZSBpbnRlcnJ1cHRzIHRoYXQgbmVlZCB0byBoYXZlIHZhbHVlIG90aGVyIHRoYW4gZGVmYXVsdC4KKyAqIEZvciBtZW1vcnkgZWZmaWNpZW5jeSB0YWJsZSB3aXRoIHByaW9yaXRpZXMgZm9yIGVhY2ggaW50ZXJydXB0IGNvbnNpc3Qgb2YgaW50ZXJydXB0IHByaW9yaXR5CisgKiB0YWcgUFJJT1JJVFlfeCBmb2xsb3dlZCBieSBpbnRlcnJ1cHRzIHRoYXQgc2hvdWxkIGhhdmUgdGhpcyBwcmlvcml0eSwgaW50ZXJydXB0cyBuYW1lcyBhcmUgZnJvbQorICogZW51bSBJUlFuX1R5cGUuCisgKgorICogXG5vdGUgSWYgaW50ZXJydXB0IHByaW9yaXRpZXMgZG8gbm90IG5lZWQgdG8gYmUgY2hhbmdlZCBkeW5hbWljYWxseSBhdCBydW50aW1lLCBiZXN0IHdheSB0bworICogc3BlY2lmeSBzdGF0aWMgY29uZmlndXJhdGlvbiBpcyB0byBjcmVhdGUgdGFibGUgbmFtZWQgX19kaWFsb2dfaW50ZXJydXB0X3ByaW9yaXRpZXMgdGhhdCB3aWxsCisgKiBiZSB1c2VkIGF1dG9tYXRpY2FsbHkgYXQgc3RhcnR1cC4KKyAqCisgKiBNb3N0IGNvbnZlbmllbnQgd2F5IHRvIHByZXBhcmUgc3VjaCB0YWJsZSBpcyB0byB1c2UgbWFjcm9zIGxpa2UgaW4gZXhhbXBsZSBiZWxvdzoKKyAqCisgKiBcY29kZXsuY30KKyAqIElOVEVSUlVQVF9QUklPUklUWV9DT05GSUdfU1RBUlQoX19kaWFsb2dfaW50ZXJydXB0X3ByaW9yaXRpZXMpCisgKiAgICAgIFBSSU9SSVRZXzAsIC8vIFN0YXJ0IGludGVycnVwdHMgd2l0aCBwcmlvcml0eSAwIChoaWdoZXN0KQorICogICAgICAgICAgICAgICBTVkNhbGxfSVJRbiwKKyAqICAgICAgICAgICAgICAgUGVuZFNWX0lSUW4sCisgKiAgICAgICAgICAgICAgIFN5c1RpY2tfSVJRbiwKKyAqICAgICAgUFJJT1JJVFlfMSwgLy8gU3RhcnQgaW50ZXJydXB0cyB3aXRoIHByaW9yaXR5IDEKKyAqICAgICAgICAgICAgICAgQkxFX1dBS0VVUF9MUF9JUlFuLAorICogICAgICAgICAgICAgICBCTEVfR0VOX0lSUW4sCisgKiAgICAgICAgICAgICAgIEZUREZfV0FLRVVQX0lSUW4sCisgKiAgICAgICAgICAgICAgIEZUREZfR0VOX0lSUW4sCisgKiAgICAgIFBSSU9SSVRZXzIsCisgKiAgICAgICAgICAgICAgIFNSQ19JTl9JUlFuLAorICogICAgICAgICAgICAgICBTUkNfT1VUX0lSUW4sCisgKiAgICAgIFBSSU9SSVRZXzMsCisgKiAgICAgICAgICAgICAgIFVBUlRfSVJRbiwKKyAqICAgICAgICAgICAgICAgVUFSVDJfSVJRbiwKKyAqIElOVEVSUlVQVF9QUklPUklUWV9DT05GSUdfRU5ECisgKiBcZW5kY29kZQorICoKKyAqIFRhYmxlIF9fZGlhbG9nX2ludGVycnVwdF9wcmlvcml0aWVzIGNhbiBub3cgYmUgdXNlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24uCisgKiBUYWJsZSBjYW4gc3BlY2lmeSBhbGwgaW50ZXJydXB0cyBvciBvbmx5IHRob3NlIHRoYXQgbmVlZCB0byBiZSBjaGFuZ2VkLgorICoKKyAqIFxwYXJhbSBbaW5dIHByaW9zIHRhYmxlIHdpdGggaW50ZXJydXB0cyBhbmQgcHJpb3JpdGllcyB0byBzZXR1cAorICoKKyAqLwordm9pZCBzZXRfaW50ZXJydXB0X3ByaW9yaXRpZXMoY29uc3QgaW50OF90IHByaW9zW10pOworCisvKioKKyAqIFxicmllZiBDaGVjayB3aGV0aGVyIHJ1bm5pbmcgaW4gaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogXHJldHVybiB0cnVlIGlmIHRoZSBDUFUgaXMgc2VydmluZyBhbiBpbnRlcnJ1cHQuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpbl9pbnRlcnJ1cHQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIChTQ0ItPklDU1IgJiBTQ0JfSUNTUl9WRUNUQUNUSVZFX01zaykgIT0gMDsKK30KKworCisvKioKKyAqIFxicmllZiBEZWZhdWx0IGludGVycnVwdCBwcmlvcml0aWVzIHRhYmxlLgorICoKKyAqLworZXh0ZXJuIGNvbnN0IGludDhfdCBfX2RpYWxvZ19pbnRlcnJ1cHRfcHJpb3JpdGllc1tdOworCisKKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkgJiYgKGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OICE9IDEpCisgICAgICAgICNkZWZpbmUgTEFTVF9JUlFuIFBMTF9MT0NLX0lSUW4KKyNlbHNlCisgICAgICAgICNkZWZpbmUgTEFTVF9JUlFuIFJFU0VSVkVEMzFfSVJRbgorI2VuZGlmCisKKy8qCisgKiBGb2xsb3dpbmcgbWFjcm9zIGFsbG93IGVhc3kgd2F5IHRvIGJ1aWxkIHRhYmxlIHdpdGggaW50ZXJydXB0IHByaW9yaXRpZXMuCisgKiBTZWUgZXhhbXBsZSBpbiBzZXRfaW50ZXJydXB0X3ByaW9yaXRpZXMgZnVuY3Rpb24gZGVzY3JpcHRpb24uCisgKi8KKyNkZWZpbmUgSU5URVJSVVBUX1BSSU9SSVRZX0NPTkZJR19TVEFSVChuYW1lKSBjb25zdCBpbnQ4X3QgbmFtZVtdID0geworI2RlZmluZSBQUklPUklUWV8wICAgICAgKExBU1RfSVJRbiArIDEpCisjZGVmaW5lIFBSSU9SSVRZXzEgICAgICAoTEFTVF9JUlFuICsgMikKKyNkZWZpbmUgUFJJT1JJVFlfMiAgICAgIChMQVNUX0lSUW4gKyAzKQorI2RlZmluZSBQUklPUklUWV8zICAgICAgKExBU1RfSVJRbiArIDQpCisjZGVmaW5lIFBSSU9SSVRZX1RBQkxFX0VORCAoTEFTVF9JUlFuICsgNSkKKyNkZWZpbmUgSU5URVJSVVBUX1BSSU9SSVRZX0NPTkZJR19FTkQgUFJJT1JJVFlfVEFCTEVfRU5EIH07CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBJTlRFUlJVUFRTX0hfICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL3Nka19kZWZzLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL3Nka19kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjMTYyYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvc2RrX2RlZnMuaApAQCAtMCwwICsxLDc3NyBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBTWVNURU0KKyAqIFx7CisgKiBcYWRkdG9ncm91cCBQTEFURk9STQorICoKKyAqIFxicmllZiBQbGF0Zm9ybSBkZWZpbml0aW9ucworICoKKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBzZGtfZGVmcy5oCisgKgorICogQGJyaWVmIENlbnRyYWwgaW5jbHVkZSBoZWFkZXIgZmlsZSB3aXRoIHBsYXRmb3JtIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgX19TREtfREVGU19IX18KKyNkZWZpbmUgX19TREtfREVGU19IX18KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgX19HTlVDX18KKyMgIGRlZmluZSBHQ0NfVkVSU0lPTiAoX19HTlVDX18gKiAxMDAwMCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX0dOVUNfTUlOT1JfXyAqIDEwMCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQorLyogYXNzZXJ0IGdjYyB2ZXJzaW9uIGlzIGF0IGxlYXN0IDQuOS4zICovCisjICBpZiBHQ0NfVkVSU0lPTiA8IDQwOTAzCisjICAgIGVycm9yICJQbGVhc2UgdXNlIGdjYyB2ZXJzaW9uIDQuOS4zIG9yIG5ld2VyISIKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIChkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiA9PSAxKQorCisgICAvKiB1c2UgYSByZWdpc3RlciBkZXNjcmlwdGlvbiB0aGF0IGlzIGdlbmVyaWMgZW5vdWdoIGZvciBvdXIgbmVlZHMgKi8KKyMgIGluY2x1ZGUgIkRBMTQ2ODBBRS5oIgorCisjZWxzZQorCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorIyAgaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19TVEVQID09IEJMQUNLX09SQ0FfSUNfU1RFUF9FCisjICAgICAgIGluY2x1ZGUgIkRBMTQ2ODBBRS5oIgorIyAgZWxzZQorIyAgICAgICBlcnJvciAiVW5rbm93biBjaGlwIHN0ZXBwaW5nIGZvciByZXZpc2lvbiBBIC0tIGNoZWNrIHRoZSB2YWx1ZSBvZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1NURVAiCisjICBlbmRpZgorI2VsaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQgorIyAgaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19TVEVQID09IEJMQUNLX09SQ0FfSUNfU1RFUF9BCisjICAgICAgIGluY2x1ZGUgIkRBMTQ2ODBCQS5oIgorIyAgZWxzZQorIyAgICAgICBlcnJvciAiVW5rbm93biBjaGlwIHN0ZXBwaW5nIGZvciByZXZpc2lvbiBCIC0tIGNoZWNrIHRoZSB2YWx1ZSBvZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1NURVAiCisjICBlbmRpZgorI2Vsc2UKKyMgIGVycm9yICJVbmtub3duIGNoaXAgcmV2aXNpb24gLS0gY2hlY2sgdGhlIHZhbHVlIG9mIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWIgorI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSAiY29yZV9jbTAuaCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29ydGV4LU0wIHByb2Nlc3NvciBhbmQgY29yZSBwZXJpcGhlcmFscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaW5jbHVkZSAic3lzdGVtX0RBMTQ2ODAuaCIgICAgICAgICAgICAgICAgICAgICAgICAgLyogREExNDY4MEFBIFN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1lbW9yeSBtYXAKKyAqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogXGJyaWVmIFJlbWFwcGVkIGRldmljZSBiYXNlIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgTUVNT1JZX1JFTUFQUEVEX0JBU0UgICAgMHgwMDAwMDAwMFVMCisjZGVmaW5lIE1FTU9SWV9SRU1BUFBFRF9FTkQgICAgIDB4MDQwMDAwMDBVTAorCisvKioKKyAqIFxicmllZiBSZW1hcHBlZCBkZXZpY2UgbWVtb3J5IHNpemUgKDY0TWlCKS4KKyAqLworI2RlZmluZSBNRU1PUllfUkVNQVBQRURfU0laRSAgICAoTUVNT1JZX1JFTUFQUEVEX0VORCAtIE1FTU9SWV9SRU1BUFBFRF9CQVNFKQorCisvKioKKyAqIFxicmllZiBST00gYmFzZSBhZGRyZXNzLgorICovCisjZGVmaW5lIE1FTU9SWV9ST01fQkFTRSAgICAgICAgIDB4MDdGMDAwMDBVTAorI2RlZmluZSBNRU1PUllfUk9NX0VORCAgICAgICAgICAweDA3RjQwMDAwVUwKKworLyoqCisgKiBcYnJpZWYgUk9NIG1lbW9yeSBzaXplICgyNTZLaUIpLgorICovCisjZGVmaW5lIE1FTU9SWV9ST01fU0laRSAgICAgICAgIChNRU1PUllfUk9NX0VORCAtIE1FTU9SWV9ST01fQkFTRSkKKworLyoqCisgKiBcYnJpZWYgT1RQIENvbnRyb2xsZXIgYmFzZSBhZGRyZXNzLgorICovCisjZGVmaW5lIE1FTU9SWV9PVFBDX0JBU0UgICAgICAgIDB4MDdGNDAwMDBVTAorI2RlZmluZSBNRU1PUllfT1RQQ19FTkQgICAgICAgICAweDA3RjgwMDAwVUwKKworLyoqCisgKiBcYnJpZWYgT1RQIG1lbW9yeSBiYXNlIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgTUVNT1JZX09UUF9CQVNFICAgICAgICAgMHgwN0Y4MDAwMFVMCisjZGVmaW5lIE1FTU9SWV9PVFBfRU5EICAgICAgICAgIDB4MDdGQzAwMDBVTAorCisvKioKKyAqIFxicmllZiBPVFAgbWVtb3J5IHNpemUgKDI1NktpQikuCisgKi8KKyNkZWZpbmUgTUVNT1JZX09UUF9TSVpFICAgICAgICAgKE1FTU9SWV9PVFBfRU5EIC0gTUVNT1JZX09UUF9CQVNFKQorCisvKioKKyAqIFxicmllZiBTWVNURU0gUkFNIGJhc2UgYWRkcmVzcy4KKyAqLworI2RlZmluZSBNRU1PUllfU1lTUkFNX0JBU0UgICAgICAweDA3RkMwMDAwVUwKKyNkZWZpbmUgTUVNT1JZX1NZU1JBTV9FTkQgICAgICAgMHgwN0ZFMDAwMFVMCisKKy8qKgorICogXGJyaWVmIFNZU1RFTSBSQU0gc2l6ZSAoMTI4S2lCKS4KKyAqLworI2RlZmluZSBNRU1PUllfU1lTUkFNX1NJWkUgICAgICAoTUVNT1JZX1NZU1JBTV9FTkQgLSBNRU1PUllfU1lTUkFNX0JBU0UpCisKKy8qKgorICogXGJyaWVmIENBQ0hFIFJBTSBiYXNlIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgTUVNT1JZX0NBQ0hFUkFNX0JBU0UgICAgMHgwN0ZFMDAwMFVMCisjZGVmaW5lIE1FTU9SWV9DQUNIRVJBTV9FTkQgICAgIDB4MDgwMDAwMDBVTAorCisvKioKKyAqIFxicmllZiBDQUNIRSBSQU0gc2l6ZSAoMTI4S2lCKS4KKyAqLworI2RlZmluZSBNRU1PUllfQ0FDSEVSQU1fU0laRSAgICAoTUVNT1JZX0NBQ0hFUkFNX0VORCAtIE1FTU9SWV9DQUNIRVJBTV9CQVNFKQorCisvKioKKyAqIFxicmllZiBRU1BJIEZsYXNoIGJhc2UgYWRkcmVzcy4KKyAqLworI2RlZmluZSBNRU1PUllfUVNQSUZfQkFTRSAgICAgICAweDA4MDAwMDAwVUwKKyNkZWZpbmUgTUVNT1JZX1FTUElGX0VORCAgICAgICAgMHgwQkYwMDAwMFVMCisKKy8qKgorICogXGJyaWVmIFFTUEkgRmxhc2ggbWVtb3J5IHNpemUgKDYzTWlCKS4KKyAqLworI2RlZmluZSBNRU1PUllfUVNQSUZfU0laRSAgICAgICAoTUVNT1JZX1FTUElGX0VORCAtIE1FTU9SWV9RU1BJRl9CQVNFKQorCisvKioKKyAqIFxicmllZiBRU1BJIENvbnRyb2xsZXIgYmFzZSBhZGRyZXNzLgorICovCisjZGVmaW5lIE1FTU9SWV9RU1BJQ19CQVNFICAgICAgIDB4MEMwMDAwMDBVTAorI2RlZmluZSBNRU1PUllfUVNQSUNfRU5EICAgICAgICAweDBDMTAwMDAwVUwKKworLyoqCisgKiBcYnJpZWYgRUNDIGVuZ2luZSBtaWNyb2NvZGUgYmFzZSBhZGRyZXNzLgorICovCisjZGVmaW5lIE1FTU9SWV9FQ0NfVUNPREVfQkFTRSAgIDB4NDAwMzAwMDBVTAorCisvKioKKyAqIFxicmllZiBUUk5HIEZJRk8gYWRkcmVzcworICovCisjZGVmaW5lIE1FTU9SWV9UUk5HX0ZJRk8gICAgICAgIDB4NDAwNDAwMDBVTAorCisjZGVmaW5lIFdJVEhJTl9SQU5HRShfYSwgX3MsIF9lKSAgICAgICAgKCgodWludDMyX3QpKF9hKSA+PSAodWludDMyX3QpKF9zKSkgJiYgKCh1aW50MzJfdCkoX2EpIDwgKHVpbnQzMl90KShfZSkpKQorCisvKioKKyAqIFxicmllZiBBZGRyZXNzIGlzIGluIHRoZSByZW1hcHBlZCBtZW1vcnkgcmVnaW9uCisgKi8KKyNkZWZpbmUgSVNfUkVNQVBQRURfQUREUkVTUyhfYSkgICAgICAgICBXSVRISU5fUkFOR0UoKF9hKSwgTUVNT1JZX1JFTUFQUEVEX0JBU0UsIE1FTU9SWV9SRU1BUFBFRF9FTkQpCisKKy8qKgorICogXGJyaWVmIEFkZHJlc3MgaXMgaW4gdGhlIFJPTSByZWdpb24KKyAqLworI2RlZmluZSBJU19ST01fQUREUkVTUyhfYSkgICAgICAgICAgICAgIFdJVEhJTl9SQU5HRSgoX2EpLCBNRU1PUllfUk9NX0JBU0UsIE1FTU9SWV9ST01fRU5EKQorCisvKioKKyAqIFxicmllZiBBZGRyZXNzIGlzIGluIHRoZSBPVFAgbWVtb3J5IHJlZ2lvbgorICovCisjZGVmaW5lIElTX09UUF9BRERSRVNTKF9hKSAgICAgICAgICAgICAgV0lUSElOX1JBTkdFKChfYSksIE1FTU9SWV9PVFBfQkFTRSwgTUVNT1JZX09UUF9FTkQpCisKKy8qKgorICogXGJyaWVmIEFkZHJlc3MgaXMgaW4gdGhlIE9UUCBDb250cm9sbGVyIG1lbW9yeSByZWdpb24KKyAqLworI2RlZmluZSBJU19PVFBDX0FERFJFU1MoX2EpICAgICAgICAgICAgIFdJVEhJTl9SQU5HRSgoX2EpLCBNRU1PUllfT1RQQ19CQVNFLCBNRU1PUllfT1RQQ19FTkQpCisKKy8qKgorICogXGJyaWVmIEFkZHJlc3MgaXMgaW4gdGhlIFNZU1RFTSBSQU0gcmVnaW9uCisgKi8KKyNkZWZpbmUgSVNfU1lTUkFNX0FERFJFU1MoX2EpICAgICAgICAgICBXSVRISU5fUkFOR0UoKF9hKSwgTUVNT1JZX1NZU1JBTV9CQVNFLCBNRU1PUllfU1lTUkFNX0VORCkKKworLyoqCisgKiBcYnJpZWYgQWRkcmVzcyBpcyBpbiB0aGUgQ0FDSEUgUkFNIHJlZ2lvbgorICovCisjZGVmaW5lIElTX0NBQ0hFUkFNX0FERFJFU1MoX2EpICAgICAgICAgV0lUSElOX1JBTkdFKChfYSksIE1FTU9SWV9DQUNIRVJBTV9CQVNFLCBNRU1PUllfQ0FDSEVSQU1fRU5EKQorCisvKioKKyAqIFxicmllZiBBZGRyZXNzIGlzIGluIHRoZSBRU1BJIEZsYXNoIG1lbW9yeSByZWdpb24KKyAqLworI2RlZmluZSBJU19RU1BJRl9BRERSRVNTKF9hKSAgICAgICAgICAgIFdJVEhJTl9SQU5HRSgoX2EpLCBNRU1PUllfUVNQSUZfQkFTRSwgTUVNT1JZX1FTUElGX0VORCkKKworLyoqCisgKiBcYnJpZWYgQWRkcmVzcyBpcyBpbiB0aGUgUVNQSSBDb250cm9sbGVyIG1lbW9yeSByZWdpb24KKyAqLworI2RlZmluZSBJU19RU1BJQ19BRERSRVNTKF9hKSAgICAgICAgICAgIFdJVEhJTl9SQU5HRSgoX2EpLCBNRU1PUllfUVNQSUNfQkFTRSwgTUVNT1JZX1FTUElDX0VORCkKKworI2RlZmluZSBfQkxBQ0tfT1JDQV9JQ19WRVJTSU9OKHJldmlzaW9uLCBzdGVwcGluZykgXAorICAgICAgICAoKChyZXZpc2lvbikgPDwgOCkgfCAoc3RlcHBpbmcpKQorCisvKioKKyAqIFxicmllZiBDb252ZW5pZW5jZSBtYWNybyB0byBjcmVhdGUgdGhlIGZ1bGwgY2hpcCB2ZXJzaW9uIGZyb20gcmV2aXNpb24gYW5kIHN0ZXBwaW5nLgorICogICAgICAgIEl0IHRha2VzIGxldHRlcnMgYXMgYXJndW1lbnRzLgorICovCisjZGVmaW5lIEJMQUNLX09SQ0FfSUNfVkVSU0lPTihyZXZpc2lvbiwgc3RlcHBpbmcpIFwKKyAgICAgICAgX0JMQUNLX09SQ0FfSUNfVkVSU0lPTihCTEFDS19PUkNBX0lDX1JFVl8jI3JldmlzaW9uLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBCTEFDS19PUkNBX0lDX1NURVBfIyNzdGVwcGluZykKKworLyoqCisgKiBcYnJpZWYgVGhlIGNoaXAgdmVyc2lvbiB0aGF0IHdlIGNvbXBpbGUgZm9yLgorICovCisjZGVmaW5lIEJMQUNLX09SQ0FfVEFSR0VUX0lDIFwKKyAgICAgICAgIF9CTEFDS19PUkNBX0lDX1ZFUlNJT04oZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYsIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfU1RFUCkKKworCisvKioKKyAqIFxicmllZiBaZXJvLWluaXRpYWxpemVkIGRhdGEgcmV0YWluZWQgbWVtb3J5IGF0dHJpYnV0ZQorICovCisjZGVmaW5lIF9fUkVUQUlORUQgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oInJldGVudGlvbl9tZW1femkiKSkpICAgIC8vIFJldFJBTTAKKyNkZWZpbmUgX19SRVRBSU5FRF8xICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigicmV0ZW50aW9uX21lbV8xX3ppIikpKSAgLy8gUmV0UkFNMQorCisvKioKKyAqIFxicmllZiBJbml0aWFsaXplZCBkYXRhIHJldGFpbmVkIG1lbW9yeSBhdHRyaWJ1dGUKKyAqLworI2RlZmluZSBfX1JFVEFJTkVEX1JXICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJyZXRlbnRpb25fbWVtX2luaXQiKSkpCisKKy8qKgorICogXGJyaWVmIFVuaW5pdGlhbGl6ZWQgZGF0YSByZXRhaW5lZCBtZW1vcnkgYXR0cmlidXRlCisgKi8KKyNkZWZpbmUgX19SRVRBSU5FRF9VTklOSVQgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigicmV0ZW50aW9uX21lbV91bmluaXQiKSkpCisKKyAvKioKKyAgKiBcYnJpZWYgQ29uc3RhbnQgZGF0YSByZXRhaW5lZCBtZW1vcnkgYXR0cmlidXRlCisgICovCisgI2RlZmluZSBfX1JFVEFJTkVEX0NPTlNUX0lOSVQgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oInJldGVudGlvbl9tZW1fY29uc3QiKSkpCisKKy8qKgorICogXGJyaWVmIFRleHQgcmV0YWluZWQgbWVtb3J5IGF0dHJpYnV0ZQorICovCisjaWYgKChkZ19jb25maWdDT0RFX0xPQ0FUSU9OID09IE5PTl9WT0xBVElMRV9JU19GTEFTSCkgJiYgKGRnX2NvbmZpZ0VYRUNfTU9ERSA9PSBNT0RFX0lTX0NBQ0hFRCkpCisjZGVmaW5lIF9fUkVUQUlORURfQ09ERSAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oInRleHRfcmV0YWluZWQiKSkpIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgX19hdHRyaWJ1dGVfXygob3B0aW1pemUgKCJuby10cmVlLXN3aXRjaC1jb252ZXJzaW9uIikpKQorI2Vsc2UKKyNkZWZpbmUgX19SRVRBSU5FRF9DT0RFCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQXR0cmlidXRlIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHRvIGNvbnNpZGVyIGEgc3ltYm9sIGFzIHVzZWQKKyAqLworI2RlZmluZSBfX1VTRUQgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSkKKworLyoqCisgKiBcYnJpZWYgQXR0cmlidXRlIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHRvIGNvbnNpZGVyIGEgc3ltYm9sIGFzIGV4dGVybmFsbHkgdmlzaWJsZSAoZm9yIExUTykKKyAqLworI2RlZmluZSBfX0xUT19FWFQgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChleHRlcm5hbGx5X3Zpc2libGUpKQorCitleHRlcm4gdWludDMyX3QgYmxhY2tfb3JjYV9jaGlwX3ZlcnNpb247CisKKyNkZWZpbmUgQ0hJUF9JU19BRSAgICAgICAgICAgICAgICAgICAgICAoYmxhY2tfb3JjYV9jaGlwX3ZlcnNpb24gPT0gQkxBQ0tfT1JDQV9JQ19WRVJTSU9OKEEsIEUpKQorI2RlZmluZSBDSElQX0lTX0JBICAgICAgICAgICAgICAgICAgICAgIChibGFja19vcmNhX2NoaXBfdmVyc2lvbiA9PSBCTEFDS19PUkNBX0lDX1ZFUlNJT04oQiwgQSkpCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgY2hpcCB2ZXJzaW9uIG9mIHRoZSBzeXN0ZW0sIGF0IHJ1bnRpbWUuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBibGFja19vcmNhX2dldF9jaGlwX3ZlcnNpb24odm9pZCkKK3sKKyAgICAgICAgdWludDMyX3QgcmV2ID0gQ0hJUF9WRVJTSU9OLT5DSElQX1JFVklTSU9OX1JFRyAtICdBJzsKKyAgICAgICAgdWludDMyX3Qgc3RlcCA9IENISVBfVkVSU0lPTi0+Q0hJUF9URVNUMV9SRUc7CisKKyAgICAgICAgcmV0dXJuIF9CTEFDS19PUkNBX0lDX1ZFUlNJT04ocmV2LCBzdGVwKTsKK30KKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbgorX19SRVRBSU5FRF9DT0RFIHZvaWQgaHdfY3BtX2Fzc2VydF90cmlnZ2VyX2dwaW8odm9pZCk7CisKKy8qKgorICogXGJyaWVmIEFzc2VydCBhcyB3YXJuaW5nIG1hY3JvCisgKgorICogXG5vdGUgQWN0aXZlIG9ubHkgd2hpbGUgaW4gZGV2ZWxvcG1lbnQgbW9kZQorICovCisjZGVmaW5lIEFTU0VSVF9XQVJOSU5HKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKGRnX2NvbmZpZ0lNQUdFX1NFVFVQID09IERFVkVMT1BNRU5UX01PREUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIiBjcHNpZCBpICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkVHLT5TRVRfRlJFRVpFX1JFRyA9IEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9XRE9HX01zazsgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3X2NwbV9hc3NlcnRfdHJpZ2dlcl9ncGlvKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHt9IHdoaWxlKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0KKworLyoqCisgKiBcYnJpZWYgQXNzZXJ0IGFzIGVycm9yIG1hY3JvCisgKgorICovCisjZGVmaW5lIEFTU0VSVF9FUlJPUihhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKGRnX2NvbmZpZ0lNQUdFX1NFVFVQID09IERFVkVMT1BNRU5UX01PREUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIiBjcHNpZCBpICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkVHLT5TRVRfRlJFRVpFX1JFRyA9IEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9XRE9HX01zazsgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3X2NwbV9hc3NlcnRfdHJpZ2dlcl9ncGlvKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHt9IHdoaWxlKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIiBjcHNpZCBpICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIiBia3B0IDIgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0KKworLyoqCisgKiBcYnJpZWYgQXNzZXJ0IGFzIHdhcm5pbmcgbWFjcm8gd2hlbiB0aGUgc3lzdGVtIGlzIHN0aWxsIHVuaW5pdGlhbGl6ZWQKKyAqCisgKiBcbm90ZSBBY3RpdmUgb25seSB3aGlsZSBpbiBkZXZlbG9wbWVudCBtb2RlLiBUaGUgU1cgY3Vyc29yIGlzIG5vdCBhY3RpdmF0ZWQuCisgKi8KKyNkZWZpbmUgQVNTRVJUX1dBUk5JTkdfVU5JTklUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoZGdfY29uZmlnSU1BR0VfU0VUVVAgPT0gREVWRUxPUE1FTlRfTU9ERSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiIGNwc2lkIGkgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BSRUctPlNFVF9GUkVFWkVfUkVHID0gR1BSRUdfU0VUX0ZSRUVaRV9SRUdfRlJaX1dET0dfTXNrOyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge30gd2hpbGUoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfQorCisvKioKKyAqIFxicmllZiBBc3NlcnQgYXMgZXJyb3IgbWFjcm8gd2hlbiB0aGUgc3lzdGVtIGlzIHN0aWxsIHVuaW5pdGlhbGl6ZWQKKyAqCisgKiBcbm90ZSBUaGUgU1cgY3Vyc29yIGlzIG5vdCBhY3RpdmF0ZWQuCisgKi8KKyNkZWZpbmUgQVNTRVJUX0VSUk9SX1VOSU5JVChhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoZGdfY29uZmlnSU1BR0VfU0VUVVAgPT0gREVWRUxPUE1FTlRfTU9ERSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiIGNwc2lkIGkgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BSRUctPlNFVF9GUkVFWkVfUkVHID0gR1BSRUdfU0VUX0ZSRUVaRV9SRUdfRlJaX1dET0dfTXNrOyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge30gd2hpbGUoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiIGNwc2lkIGkgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiIGJrcHQgMiAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfQorCisvKioKKyAqIFxicmllZiBNYWNybyB0byBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzCisgKgorICogVGhpcyBtYWNybyBtdXN0IGFsd2F5cyBiZSB1c2VkIHdpdGggR0xPQkFMX0lOVF9SRVNUT1JFKCkuIEUuZy4KKyAqCisgKiBcY29kZXsuY30KKyAqIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICogIC4uLiBjb2RlIHRvIGJlIGV4ZWN1dGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAuLi4KKyAqIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworICogXGVuZGNvZGUKKyAqCisgKiBcc2EgR0xPQkFMX0lOVF9SRVNUT1JFCisgKi8KKyNkZWZpbmUgR0xPQkFMX0lOVF9ESVNBQkxFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xfaXJxX3Jlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoIm1ycyAgICUwLCBwcmltYXNrICBcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ICAgcjEsICQxICAgICBcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1zciAgIHByaW1hc2ssIHIxICBcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoX19sX2lycV9yZXN0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicjEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICBEQkdfQ09ORklHVVJFX0hJR0goQ01OX1RJTUlOR19ERUJVRywgQ01OREJHX0NSSVRJQ0FMX1NFQ1RJT04pOworCisvKioKKyAqIFxicmllZiBNYWNybyB0byByZXN0b3JlIGFsbCBpbnRlcnJ1cHRzCisgKgorICogVGhpcyBtYWNybyBtdXN0IGFsd2F5cyBiZSB1c2VkIGFmdGVyIEdMT0JBTF9JTlRfRElTQUJMRSgpLiBFLmcuCisgKgorICogXGNvZGV7LmN9CisgKiBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAqICAuLi4gY29kZSB0byBiZSBleGVjdXRlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgLi4uCisgKiBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyAqIFxlbmRjb2RlCisgKgorICogXHNhIEdMT0JBTF9JTlRfRElTQUJMRQorICovCisjZGVmaW5lIEdMT0JBTF9JTlRfUkVTVE9SRSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmIChfX2xfaXJxX3Jlc3QgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIERCR19DT05GSUdVUkVfTE9XKENNTl9USU1JTkdfREVCVUcsIENNTkRCR19DUklUSUNBTF9TRUNUSU9OKTsgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICgibXNyICAgcHJpbWFzaywgJTAgIFxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgKF9fbF9pcnFfcmVzdCkgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBjb250YWluaW5nb2Zmc2V0KGFkZHJlc3MsIHR5cGUsIGZpZWxkKSAoKHR5cGUqKSgodWludDgqKShhZGRyZXNzKS0oc2l6ZV90KSgmKCh0eXBlKikwKS0+ZmllbGQpKSkKKworLyoqCisgKiBcYnJpZWYgTWFjcm8gdGhlIG1pbmltdW0gb2YgdHdvIHZhbHVlcworICoKKyAqIFxwYXJhbVtpbl0gYSAgICAgICAgIEZpcnN0IHZhbHVlCisgKiBccGFyYW1baW5dIGIgICAgICAgICBTZWNvbmQgdmFsdWUKKyAqLworI2RlZmluZSBNSU4oYSwgYikgICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKworLyoqCisgKiBcYnJpZWYgTWFjcm8gdGhlIG1heGltdW0gb2YgdHdvIHZhbHVlcworICoKKyAqIFxwYXJhbVtpbl0gYSAgICAgICAgIEZpcnN0IHZhbHVlCisgKiBccGFyYW1baW5dIGIgICAgICAgICBTZWNvbmQgdmFsdWUKKyAqLworI2RlZmluZSBNQVgoYSwgYikgICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKKworLyoqCisgKiBcYnJpZWYgTWFjcm8gdG8gc3dhcCB0aGUgYnl0ZXMgb2YgYSAxNi1iaXQgdmFyaWFibGUKKyAqCisgKiBccGFyYW1baW5dIGEgICAgICAgICBUaGUgMTYtYml0IHZhcmlhYmxlCisgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBTV0FQMTYoYSkgX19idWlsdGluX2Jzd2FwMTYoYSkKKyNlbHNlCisjZGVmaW5lIFNXQVAxNihhKSAoKGE8PDgpIHwgKGE+PjgpKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIE1hY3JvIHRvIHN3YXAgdGhlIGJ5dGVzIG9mIGEgMzItYml0IHZhcmlhYmxlCisgKgorICogXHBhcmFtW2luXSBhICAgICAgICAgVGhlIDMyLWJpdCB2YXJpYWJsZQorICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUgU1dBUDMyKGEpIF9fYnVpbHRpbl9ic3dhcDMyKGEpCisjZWxzZQorI2RlZmluZSBTV0FQMzIoYSkgKChhPj4yNCAmIDB4ZmYpIHwgKGE+PjggJiAweGZmMDApIHwgKGE8PDggJiAweGZmMDAwMCkgfCAoYTw8MjQgJiAweGZmMDAwMDAwKSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUgREVQUkVDQVRFRCBfX2F0dHJpYnV0ZV9fICgoZGVwcmVjYXRlZCkpCisjZWxzZQorI3dhcm5pbmcgRGVwcmVjYXRlZCBtYWNybyBtdXN0IGJlIGltcGxlbWVudGVkIGZvciB0aGlzIGNvbXBpbGVyCisjZGVmaW5lIERFUFJFQ0FURUQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUgREVQUkVDQVRFRF9NU0cobXNnKSBfX2F0dHJpYnV0ZV9fICgoZGVwcmVjYXRlZChtc2cpKSkKKyNlbHNlCisjd2FybmluZyBEZXByZWNhdGVkIG1hY3JvIG11c3QgYmUgaW1wbGVtZW50ZWQgZm9yIHRoaXMgY29tcGlsZXIKKyNkZWZpbmUgREVQUkVDQVRFRF9NU0cobXNnKQorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgZXhpc3QgaW4gUk9NIGNvZGUgKi8KK3ZvaWQgX19hZWFiaV9tZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7Cit2b2lkIF9fYWVhYmlfbWVtbW92ZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTsKK3ZvaWQgX19hZWFiaV9tZW1zZXQodm9pZCAqZGVzdCwgc2l6ZV90IG4sIGludCBjKTsKKworLyoqCisgKiBcYnJpZWYgT3B0aW1pemVkIG1lbWNweQorICovCisjZGVmaW5lIE9QVF9NRU1DUFkgICAgICBfX2FlYWJpX21lbWNweQorCisvKioKKyAqIFxicmllZiBPcHRpbWl6ZWQgbWVtbW92ZQorICovCisjZGVmaW5lIE9QVF9NRU1NT1ZFICAgICBfX2FlYWJpX21lbW1vdmUKKworLyoqCisgKiBcYnJpZWYgT3B0aW1pemVkIG1lbXNldAorICovCisjZGVmaW5lIE9QVF9NRU1TRVQocywgYywgbikgICAgICBfX2FlYWJpX21lbXNldChzLCBuLCBjKQorCisvKioKKyAqIFxicmllZiBBY2Nlc3MgcmVnaXN0ZXIgZmllbGQgbWFzay4KKyAqCisgKiBSZXR1cm5zIGEgcmVnaXN0ZXIgZmllbGQgbWFzayAoYWltZWQgdG8gYmUgdXNlZCB3aXRoIGxvY2FsIHZhcmlhYmxlcykuCisgKiBlLmcuCisgKiBcY29kZQorICogdWludDE2X3QgdG1wOworICoKKyAqIHRtcCA9IENSR19UT1AtPlNZU19TVEFUX1JFRzsKKyAqCisgKiBpZiAodG1wICYgUkVHX01TSyhDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFhUQUwxNl9UUklNX1JFQURZKSkgeworICogLi4uCisgKiBcZW5kY29kZQorICovCisjZGVmaW5lIFJFR19NU0soYmFzZSwgcmVnLCBmaWVsZCkgXAorICAgICAgICAoYmFzZSAjIyBfICMjIHJlZyAjIyBfICMjIGZpZWxkICMjIF9Nc2spCisKKy8qKgorICogXGJyaWVmIEFjY2VzcyByZWdpc3RlciBmaWVsZCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zIGEgcmVnaXN0ZXIgZmllbGQgcG9zaXRpb24gKGFpbWVkIHRvIGJlIHVzZWQgd2l0aCBsb2NhbCB2YXJpYWJsZXMpLgorICovCisjZGVmaW5lIFJFR19QT1MoYmFzZSwgcmVnLCBmaWVsZCkgXAorICAgICAgICAoYmFzZSAjIyBfICMjIHJlZyAjIyBfICMjIGZpZWxkICMjIF9Qb3MpCisKKy8qKgorICogXGJyaWVmIEFjY2VzcyByZWdpc3RlciBmaWVsZCB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zIGEgcmVnaXN0ZXIgZmllbGQgdmFsdWUgKGFpbWVkIHRvIGJlIHVzZWQgd2l0aCBsb2NhbCB2YXJpYWJsZXMpLgorICogZS5nLgorICogXGNvZGUKKyAqIHVpbnQxNl90IHRtcDsKKyAqIGludCBjb3VudGVyOworICogdG1wID0gQ1JHX1RPUC0+VFJJTV9DVFJMX1JFRzsKKyAqIGNvdW50ZXIgPSBSRUdfR0VUX0ZJRUxEKENSR19UT1AsIFRSSU1fQ1RSTF9SRUcsIFhUQUxfQ09VTlRfTiwgdG1wKTsKKyAqIC4uLgorICogXGVuZGNvZGUKKyAqLworI2RlZmluZSBSRUdfR0VUX0ZJRUxEKGJhc2UsIHJlZywgZmllbGQsIHZhcikgXAorICAgICAgICAoKHZhciAmIChiYXNlICMjIF8gIyMgcmVnICMjIF8gIyMgZmllbGQgIyMgX01zaykpID4+IFwKKyAgICAgICAgICAgICAgICAoYmFzZSAjIyBfICMjIHJlZyAjIyBfICMjIGZpZWxkICMjIF9Qb3MpKQorCisvKioKKyAqIFxicmllZiBTZXQgcmVnaXN0ZXIgZmllbGQgdmFsdWUuCisgKgorICogU2V0cyBhIHJlZ2lzdGVyIGZpZWxkIHZhbHVlIChhaW1lZCB0byBiZSB1c2VkIHdpdGggbG9jYWwgdmFyaWFibGVzKS4KKyAqIGUuZy4KKyAqIFxjb2RlCisgKiB1aW50MTZfdCB0bXA7CisgKgorICogdG1wID0gQ1JHX1RPUC0+VFJJTV9DVFJMX1JFRzsKKyAqIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgVFJJTV9DVFJMX1JFRywgWFRBTF9DT1VOVF9OLCB0bXAsIDEwKTsKKyAqIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgVFJJTV9DVFJMX1JFRywgWFRBTF9UUklNX1NFTEVDVCwgdG1wLCAyKTsKKyAqIENSR19UT1AtPlRSSU1fQ1RSTF9SRUcgPSB0bXA7CisgKiAuLi4KKyAqIFxlbmRjb2RlCisgKi8KKyNkZWZpbmUgUkVHX1NFVF9GSUVMRChiYXNlLCByZWcsIGZpZWxkLCB2YXIsIHZhbCkgXAorICAgICAgICB2YXIgPSAoKHZhciAmIH4oKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfTXNrKSkpIHwgXAorICAgICAgICAgICAgICAgICgoKHZhbCkgPDwgKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfUG9zKSkgJiBcCisgICAgICAgICAgICAgICAgKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfTXNrKSkpCisKKy8qKgorICogXGJyaWVmIENsZWFyIHJlZ2lzdGVyIGZpZWxkIHZhbHVlLgorICoKKyAqIENsZWFycyBhIHJlZ2lzdGVyIGZpZWxkIHZhbHVlIChhaW1lZCB0byBiZSB1c2VkIHdpdGggbG9jYWwgdmFyaWFibGVzKS4KKyAqIGUuZy4KKyAqIFxjb2RlCisgKiB1aW50MTZfdCB0bXA7CisgKgorICogdG1wID0gQ1JHX1RPUC0+VFJJTV9DVFJMX1JFRzsKKyAqIFJFR19DTFJfRklFTEQoQ1JHX1RPUCwgVFJJTV9DVFJMX1JFRywgWFRBTF9DT1VOVF9OLCB0bXApOworICogUkVHX0NMUl9GSUVMRChDUkdfVE9QLCBUUklNX0NUUkxfUkVHLCBYVEFMX1RSSU1fU0VMRUNULCB0bXApOworICogQ1JHX1RPUC0+VFJJTV9DVFJMX1JFRyA9IHRtcDsKKyAqIC4uLgorICogXGVuZGNvZGUKKyAqLworI2RlZmluZSBSRUdfQ0xSX0ZJRUxEKGJhc2UsIHJlZywgZmllbGQsIHZhcikgXAorICAgICAgICB2YXIgJj0gfihiYXNlICMjIF8gIyMgcmVnICMjIF8gIyMgZmllbGQgIyMgX01zaykKKworCisvKioKKyAqIFxicmllZiBSZXR1cm4gdGhlIHZhbHVlIG9mIGEgcmVnaXN0ZXIgZmllbGQuCisgKgorICogZS5nLgorICogXGNvZGUKKyAqIHVpbnQxNl90IHZhbDsKKyAqCisgKiB2YWwgPSBSRUdfR0VURihDUkdfVE9QLCBUUklNX0NUUkxfUkVHLCBYVEFMX0NPVU5UX04pOworICogLi4uCisgKiBcZW5kY29kZQorICovCisjZGVmaW5lIFJFR19HRVRGKGJhc2UsIHJlZywgZmllbGQpIFwKKyAgICAgICAgKCgoYmFzZS0+cmVnKSAmIChiYXNlIyNfIyNyZWcjI18jI2ZpZWxkIyNfTXNrKSkgPj4gKGJhc2UjI18jI3JlZyMjXyMjZmllbGQjI19Qb3MpKQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIHZhbHVlIG9mIGEgcmVnaXN0ZXIgZmllbGQuCisgKgorICogZS5nLgorICogXGNvZGUKKyAqCisgKiBSRUdfU0VURihDUkdfVE9QLCBUUklNX0NUUkxfUkVHLCBYVEFMX0NPVU5UX04sIG5ld192YWx1ZSk7CisgKiAuLi4KKyAqIFxlbmRjb2RlCisgKi8KKyNkZWZpbmUgUkVHX1NFVEYoYmFzZSwgcmVnLCBmaWVsZCwgbmV3X3ZhbCkgXAorICAgICAgICAgICAgICAgIGJhc2UtPnJlZyA9ICgoYmFzZS0+cmVnICYgfihiYXNlIyNfIyNyZWcjI18jI2ZpZWxkIyNfTXNrKSkgfCBcCisgICAgICAgICAgICAgICAgKChiYXNlIyNfIyNyZWcjI18jI2ZpZWxkIyNfTXNrKSAmICgobmV3X3ZhbCkgPDwgKGJhc2UjI18jI3JlZyMjXyMjZmllbGQjI19Qb3MpKSkpCisKKy8qKgorICogXGJyaWVmIFNldCBhIGJpdCBvZiBhIHJlZ2lzdGVyLgorICoKKyAqIGUuZy4KKyAqIFxjb2RlCisgKgorICogUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQ0xLX1RNUl9SRUcsIFRNUjFfRU5BQkxFKTsKKyAqIC4uLgorICogXGVuZGNvZGUKKyAqLworI2RlZmluZSBSRUdfU0VUX0JJVChiYXNlLCByZWcsIGZpZWxkKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIGJhc2UtPnJlZyB8PSAoMSA8PCAoYmFzZSMjXyMjcmVnIyNfIyNmaWVsZCMjX1BvcykpOyBcCisgICAgICAgICB9IHdoaWxlICgwKQorCisvKioKKyAqIFxicmllZiBDbGVhciBhIGJpdCBvZiBhIHJlZ2lzdGVyLgorICoKKyAqIGUuZy4KKyAqIFxjb2RlCisgKgorICogUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQ0xLX1RNUl9SRUcsIFRNUjFfRU5BQkxFKTsKKyAqIC4uLgorICogXGVuZGNvZGUKKyAqLworI2RlZmluZSBSRUdfQ0xSX0JJVChiYXNlLCByZWcsIGZpZWxkKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIGJhc2UtPnJlZyAmPSB+KGJhc2UjI18jI3JlZyMjXyMjZmllbGQjI19Nc2spOyBcCisgICAgICAgICB9IHdoaWxlICgwKQorCisvKioKKyAqIFxicmllZiBTZXRzIHJlZ2lzdGVyIGJpdHMsIGluZGljYXRlZCBieSB0aGUgbWFzaywgdG8gYSB2YWx1ZS4KKyAqCisgKiBlLmcuCisgKiBcY29kZQorICogUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfNV9SRUcsIDB4RkYwMCwgMHgxODE4KTsKKyAqIFxlbmRjb2RlCisgKi8KKyNkZWZpbmUgUkVHX1NFVF9NQVNLRUQoYmFzZSwgcmVnLCBtYXNrLCB2YWx1ZSkgXAorICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgICAgICBiYXNlLT5yZWcgPSAoYmFzZS0+cmVnICYgfihtYXNrKSkgfCAoKHZhbHVlKSAmIChtYXNrKSk7IFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworLyoqCisgKiBcYnJpZWYgU2V0cyAxNi1iaXQgd2lkZSByZWdpc3RlciBiaXRzLCBpbmRpY2F0ZWQgYnkgdGhlIGZpZWxkLCB0byBhIHZhbHVlIHYuCisgKi8KKyNkZWZpbmUgQklUUzE2KGJhc2UsIHJlZywgZmllbGQsIHYpIFwKKyAgICAgICAgKCh1aW50MTYpICgoKHVpbnQxNikgKHYpIDw8IChiYXNlICMjIF8gIyMgcmVnICMjIF8gIyMgZmllbGQgIyMgX1BvcykpICYgXAorICAgICAgICAgICAgICAgIChiYXNlICMjIF8gIyMgcmVnICMjIF8gIyMgZmllbGQgIyMgX01zaykpKQorCisvKioKKyAqIFxicmllZiBTZXRzIDMyLWJpdCB3aWRlIHJlZ2lzdGVyIGJpdHMsIGluZGljYXRlZCBieSB0aGUgZmllbGQsIHRvIGEgdmFsdWUgdi4KKyAqLworI2RlZmluZSBCSVRTMzIoYmFzZSwgcmVnLCBmaWVsZCwgdikgXAorICAgICAgICAoKHVpbnQzMikgKCgodWludDMyKSAodikgPDwgKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfUG9zKSkgJiBcCisgICAgICAgICAgICAgICAgKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfTXNrKSkpCisKKy8qKgorICogXGJyaWVmIFJlYWRzIDE2LWJpdCB3aWRlIHJlZ2lzdGVyIGJpdHMsIGluZGljYXRlZCBieSB0aGUgZmllbGQsIHRvIGEgdmFyaWFibGUgdi4KKyAqLworI2RlZmluZSBHRVRCSVRTMTYoYmFzZSwgcmVnLCB2LCBmaWVsZCkgXAorICAgICAgICAoKHVpbnQxNikgKCgodWludDE2KSAodikpICYgKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfTXNrKSkgPj4gXAorICAgICAgICAgICAgICAgIChiYXNlICMjIF8gIyMgcmVnICMjIF8gIyMgZmllbGQgIyMgX1BvcykpCisKKy8qKgorICogXGJyaWVmIFJlYWRzIDMyLWJpdCB3aWRlIHJlZ2lzdGVyIGJpdHMsIGluZGljYXRlZCBieSB0aGUgZmllbGQsIHRvIGEgdmFyaWFibGUgdi4KKyAqLworI2RlZmluZSBHRVRCSVRTMzIoYmFzZSwgcmVnLCB2LCBmaWVsZCkgXAorICAgICAgICAoKHVpbnQzMikgKCgodWludDMyKSAodikpICYgKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfTXNrKSkgPj4gXAorICAgICAgICAgICAgICAgIChiYXNlICMjIF8gIyMgcmVnICMjIF8gIyMgZmllbGQgIyMgX1BvcykpCisKKy8qKgorICogXGJyaWVmIE1hY3JvIHRvIGVuYWJsZSB0aGUgZGVidWdnZXIKKyAqCisgKi8KKyNkZWZpbmUgRU5BQkxFX0RFQlVHR0VSIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgU1lTX0NUUkxfUkVHLCBERUJVR0dFUl9FTkFCTEUpOyBcCisgICAgICAgIH0gd2hpbGUoMCkKKworLyoqCisgKiBcYnJpZWYgTWFjcm8gdG8gZGlzYWJsZSB0aGUgZGVidWdnZXIKKyAqCisgKi8KKyNkZWZpbmUgRElTQUJMRV9ERUJVR0dFUiBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIFNZU19DVFJMX1JFRywgREVCVUdHRVJfRU5BQkxFKTsgXAorICAgICAgICB9IHdoaWxlKDApCisKKworLyoqCisgKiBcYnJpZWYgTWFjcm8gdG8gY2F1c2UgYSBzb2Z0d2FyZSByZXNldAorICoKKyAqLworI2RlZmluZSBTV1JFU0VUIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgUkVHX1NFVF9CSVQoR1BSRUcsIERFQlVHX1JFRywgU1dfUkVTRVQpOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQklUMCAgICAgICAgMHgwMQorI2RlZmluZSBCSVQxICAgICAgICAweDAyCisjZGVmaW5lIEJJVDIgICAgICAgIDB4MDQKKyNkZWZpbmUgQklUMyAgICAgICAgMHgwOAorI2RlZmluZSBCSVQ0ICAgICAgICAweDEwCisjZGVmaW5lIEJJVDUgICAgICAgIDB4MjAKKyNkZWZpbmUgQklUNiAgICAgICAgMHg0MAorI2RlZmluZSBCSVQ3ICAgICAgICAweDgwCisKKyNkZWZpbmUgQklUOCAgICAgIDB4MDEwMAorI2RlZmluZSBCSVQ5ICAgICAgMHgwMjAwCisjZGVmaW5lIEJJVDEwICAgICAweDA0MDAKKyNkZWZpbmUgQklUMTEgICAgIDB4MDgwMAorI2RlZmluZSBCSVQxMiAgICAgMHgxMDAwCisjZGVmaW5lIEJJVDEzICAgICAweDIwMDAKKyNkZWZpbmUgQklUMTQgICAgIDB4NDAwMAorI2RlZmluZSBCSVQxNSAgICAgMHg4MDAwCisKKyNkZWZpbmUgQklUMTYgMHgwMDAxMDAwMAorI2RlZmluZSBCSVQxNyAweDAwMDIwMDAwCisjZGVmaW5lIEJJVDE4IDB4MDAwNDAwMDAKKyNkZWZpbmUgQklUMTkgMHgwMDA4MDAwMAorI2RlZmluZSBCSVQyMCAweDAwMTAwMDAwCisjZGVmaW5lIEJJVDIxIDB4MDAyMDAwMDAKKyNkZWZpbmUgQklUMjIgMHgwMDQwMDAwMAorI2RlZmluZSBCSVQyMyAweDAwODAwMDAwCisKKyNkZWZpbmUgQklUMjQgMHgwMTAwMDAwMAorI2RlZmluZSBCSVQyNSAweDAyMDAwMDAwCisjZGVmaW5lIEJJVDI2IDB4MDQwMDAwMDAKKyNkZWZpbmUgQklUMjcgMHgwODAwMDAwMAorI2RlZmluZSBCSVQyOCAweDEwMDAwMDAwCisjZGVmaW5lIEJJVDI5IDB4MjAwMDAwMDAKKyNkZWZpbmUgQklUMzAgMHg0MDAwMDAwMAorI2RlZmluZSBCSVQzMSAweDgwMDAwMDAwCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgIHVpbnQ4OyAgIC8vICA4IGJpdHMKK3R5cGVkZWYgY2hhciAgICAgICAgICAgICAgIGludDg7ICAgIC8vICA4IGJpdHMKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgIHVpbnQxNjsgIC8vIDE2IGJpdHMKK3R5cGVkZWYgc2hvcnQgICAgICAgICAgICAgIGludDE2OyAgIC8vIDE2IGJpdHMKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgIHVpbnQzMjsgIC8vIDMyIGJpdHMKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICAgIGludDMyOyAgIC8vIDMyIGJpdHMKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NDsgIC8vIDY0IGJpdHMKK3R5cGVkZWYgbG9uZyBsb25nICAgICAgICAgIGludDY0OyAgIC8vIDY0IGJpdHMKKworLyogU2VlIGFsc28gIkRhdGEgVHlwZXMiIG9uIHBhZy4gMjEgb2YgdGhlIChEb3Vsb3MpIENvcnRleC1NMCAvIFNvQyAxLjAgdHJhaW5pbmcgZG9jdW1lbnRhdGlvbi4gKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgIEJZVEU7ICAgICAvLyAgOCBiaXRzID0gQnl0ZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgSFdPUkQ7ICAgIC8vIDE2IGJpdHMgPSBIYWxmd29yZAordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgV09SRDsgICAgIC8vIDMyIGJpdHMgPSBXb3JkCit0eXBlZGVmIGxvbmcgbG9uZyAgICAgICAgICBEV09SRDsgICAgLy8gNjQgYml0cyA9IERvdWJsZXdvcmQKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgIC8qIF9fU0RLX0RFRlNfSF9fICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvc3VvdGEuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvc3VvdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODYyZjQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9zdW90YS5oCkBAIC0wLDAgKzEsMTE4IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIFNZU1RFTQorICogXHsKKyAqIFxhZGR0b2dyb3VwIFNVT1RBCisgKiAKKyAqIFxicmllZiBTVU9UQSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKKyAqCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgc3VvdGEuaAorICoKKyAqIEBicmllZiBTVU9UQSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIFNVT1RBX0hfCisjZGVmaW5lIFNVT1RBX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2RlZmluZSBTVU9UQV9WRVJTSU9OXzFfMSAgICAgICAxMQorI2RlZmluZSBTVU9UQV9WRVJTSU9OXzFfMiAgICAgICAxMgorI2RlZmluZSBTVU9UQV9WRVJTSU9OXzFfMyAgICAgICAxMworCisjaWZuZGVmIFNVT1RBX1ZFUlNJT04KKyNkZWZpbmUgU1VPVEFfVkVSU0lPTiAgICAgICAgICAgU1VPVEFfVkVSU0lPTl8xXzMKKyNlbmRpZgorCisjaWYgU1VPVEFfUFNNICYmIChTVU9UQV9WRVJTSU9OIDwgU1VPVEFfVkVSU0lPTl8xXzIpCisjICAgICAgIGVycm9yICJTVU9UQV9QU00gaXMgb25seSBhcHBsaWNhYmxlIHRvIFNVT1RBX1ZFUlNJT04gPj0gMS4yIgorI2VuZGlmCisKKy8qKgorICogXHN0cnVjdCBzdW90YV8xXzFfcHJvZHVjdF9oZWFkZXJfdDsKKyAqCisgKiBcYnJpZWYgU1VPVEEgMS4xIHByb2R1Y3QgaGVhZGVyIGFzIGRlZmluZWQgYnkgRGlhbG9nIFNVT1RBIHNwZWNpZmljYXRpb24uCisgKgorICogXG5vdGUgdGhlIHNhbWUgaGVhZGVyIGlzIHVzZWQgZm9yIGFueSBTVU9UQSB2ZXJzaW9uIG5ld2VyIHRoYW4gMS4xCisgKgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVpbnQ4X3Qgc2lnbmF0dXJlWzJdOworICAgICAgICB1aW50MTZfdCBmbGFnczsKKyAgICAgICAgdWludDMyX3QgY3VycmVudF9pbWFnZV9sb2NhdGlvbjsKKyAgICAgICAgdWludDMyX3QgdXBkYXRlX2ltYWdlX2xvY2F0aW9uOworICAgICAgICB1aW50OF90IHJlc2VydmVkWzhdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzdW90YV8xXzFfcHJvZHVjdF9oZWFkZXJfdDsKKworI2RlZmluZSBTVU9UQV8xXzFfUFJPRFVDVF9IRUFERVJfU0lHTkFUVVJFX0IxICAgMHg3MAorI2RlZmluZSBTVU9UQV8xXzFfUFJPRFVDVF9IRUFERVJfU0lHTkFUVVJFX0IyICAgMHg2MgorCisvKioKKyAqIFxzdHJ1Y3Qgc3VvdGFfMV8xX2ltYWdlX2hlYWRlcl90CisgKgorICogXGJyaWVmIFNVT1RBIDEuMSBpbWFnZSBoZWFkZXIgYXMgZGVmaW5lZCBieSBEaWFsb2cgU1VPVEEgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBcbm90ZSB0aGUgc2FtZSBoZWFkZXIgaXMgdXNlZCBmb3IgYW55IFNVT1RBIHZlcnNpb24gbmV3ZXIgdGhhbiAxLjEKKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgdWludDhfdCBzaWduYXR1cmVbMl07CisgICAgICAgIHVpbnQxNl90IGZsYWdzOworICAgICAgICB1aW50MzJfdCBjb2RlX3NpemU7CisgICAgICAgIHVpbnQzMl90IGNyYzsKKyAgICAgICAgdWludDhfdCB2ZXJzaW9uWzE2XTsKKyAgICAgICAgdWludDMyX3QgdGltZXN0YW1wOworICAgICAgICB1aW50MzJfdCBleGVjX2xvY2F0aW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzdW90YV8xXzFfaW1hZ2VfaGVhZGVyX3Q7CisKKyNkZWZpbmUgU1VPVEFfMV8xX0lNQUdFX0hFQURFUl9TSUdOQVRVUkVfQjEgICAgIDB4NzAKKyNkZWZpbmUgU1VPVEFfMV8xX0lNQUdFX0hFQURFUl9TSUdOQVRVUkVfQjIgICAgIDB4NjEKKworI2RlZmluZSBTVU9UQV8xXzFfSU1BR0VfRkxBR19GT1JDRV9DUkMgICAgICAgICAgMHgwMQorI2RlZmluZSBTVU9UQV8xXzFfSU1BR0VfRkxBR19WQUxJRCAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBTVU9UQV8xXzFfSU1BR0VfRkxBR19SRVRSWTEgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBTVU9UQV8xXzFfSU1BR0VfRkxBR19SRVRSWTIgICAgICAgICAgICAgMHgwOAorCit0eXBlZGVmIHN1b3RhXzFfMV9pbWFnZV9oZWFkZXJfdCBzdW90YV9pbWFnZV9oZWFkZXJfdDsKKworI2VuZGlmIC8qIFNVT1RBX0hfICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL3N5c3RlbV9BUk1DTTAuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvc3lzdGVtX0FSTUNNMC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjliOGQxMWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL3N5c3RlbV9BUk1DTTAuaApAQCAtMCwwICsxLDY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc3lzdGVtX0FSTUNNMC5oCisgKiBAYnJpZWYgICAgQ01TSVMgRGV2aWNlIFN5c3RlbSBIZWFkZXIgRmlsZSBmb3IKKyAqICAgICAgICAgICBBUk1DTTAgRGV2aWNlIFNlcmllcworICogQHZlcnNpb24gIFYyLjAwCisgKiBAZGF0ZSAgICAgMTguIEF1Z3VzdCAyMDE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxNSBBUk0gTElNSVRFRAorCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAqCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKyNpZm5kZWYgU1lTVEVNX0FSTUNNMF9ICisjZGVmaW5lIFNZU1RFTV9BUk1DTTBfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2V4dGVybiB1aW50MzJfdCBTeXN0ZW1Db3JlQ2xvY2s7ICAgICAvKiE8IFN5c3RlbSBDbG9jayBGcmVxdWVuY3kgKENvcmUgQ2xvY2spICAqLworCisKKy8qKiBAYnJpZWYgU2V0dXAgdGhlIG1pY3JvY29udHJvbGxlciBzeXN0ZW0uCisKKyAgICBJbml0aWFsaXplIHRoZSBTeXN0ZW0gYW5kIHVwZGF0ZSB0aGUgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlLgorICovCitleHRlcm4gdm9pZCBTeXN0ZW1Jbml0ICh2b2lkKTsKKworCisvKiogXGJyaWVmICBVcGRhdGUgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlLgorCisgICAgVXBkYXRlcyB0aGUgU3lzdGVtQ29yZUNsb2NrIHdpdGggY3VycmVudCBjb3JlIENsb2NrCisgICAgcmV0cmlldmVkIGZyb20gY3B1IHJlZ2lzdGVycy4KKyAqLworZXh0ZXJuIHZvaWQgU3lzdGVtQ29yZUNsb2NrVXBkYXRlICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFNZU1RFTV9BUk1DTTBfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9zeXN0ZW1fREExNDY4MC5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9zeXN0ZW1fREExNDY4MC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1YjgyYjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL3N5c3RlbV9EQTE0NjgwLmgKQEAgLTAsMCArMSw5MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHN5c3RlbV9EQTE0NjgwLmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTTAgRGV2aWNlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIEhlYWRlciBGaWxlIGZvcgorICogICAgICAgICAgIERldmljZSBEQTE0NjgwCisgKiBAdmVyc2lvbiAgVjMuMTAKKyAqIEBkYXRlICAgICAyMy4gTm92ZW1iZXIgMjAxMgorICoKKyAqIEBub3RlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAxMiBBUk0gTElNSVRFRAorCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAqCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKyNpZm5kZWYgU1lTVEVNX0RBMTQ2ODBfSCAgIAorI2RlZmluZSBTWVNURU1fREExNDY4MF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworZXh0ZXJuIHVpbnQzMl90IFN5c3RlbUNvcmVDbG9jazsgICAgIC8qITwgU3lzdGVtIENsb2NrIEZyZXF1ZW5jeSAoQ29yZSBDbG9jaykgICovCisKKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBzeXN0ZW0KKyAqCisgKiBAcmV0dXJuIG5vbmUKKyAqCisgKiBAYnJpZWYgIFNldHVwIHRoZSBtaWNyb2NvbnRyb2xsZXIgc3lzdGVtLgorICogICAgICAgICBJbml0aWFsaXplIHRoZSBTeXN0ZW0gYW5kIHVwZGF0ZSB0aGUgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlLgorICovCitleHRlcm4gdm9pZCBTeXN0ZW1Jbml0ICh2b2lkKTsKKworLyoqCisgKiBVcGRhdGUgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlCisgKgorICogQHJldHVybiBub25lCisgKgorICogQGJyaWVmICBVcGRhdGVzIHRoZSBTeXN0ZW1Db3JlQ2xvY2sgd2l0aCBjdXJyZW50IGNvcmUgQ2xvY2sKKyAqICAgICAgICAgcmV0cmlldmVkIGZyb20gY3B1IHJlZ2lzdGVycy4KKyAqLworZXh0ZXJuIHZvaWQgU3lzdGVtQ29yZUNsb2NrVXBkYXRlICh2b2lkKTsKKworCisvKioKKyAqIFxicmllZiBDb252ZXJ0IGEgQ1BVIGFkZHJlc3MgdG8gYSBwaHlzaWNhbCBhZGRyZXNzCisgKgorICogVG8gY2FsY3VsYXRlIHRoZSBwaHlzaWNhbCBhZGRyZXNzLCB0aGUgY3VycmVudCByZW1hcHBpbmcgKFNZU19DVFJMX1JFRy5SRU1BUF9BRFIwKQorICogaXMgdXNlZC4KKyAqCisgKiBccGFyYW0gW2luXSBhZGRyIGFkZHJlc3Mgc2VlbiBieSBDUFUKKyAqCisgKiBccmV0dXJuIHBoeXNpY2FsIGFkZHJlc3MgKGZvciBETUEsIEFFUy9IQVNIIGV0Yy4pIC0tIGNhbiBiZSBzYW1lIG9yIGRpZmZlcmVudCBhcyBhZGRyCisgKgorICovCitleHRlcm4gdWludDMyX3QgYmxhY2tfb3JjYV9waHlfYWRkcih1aW50MzJfdCBhZGRyKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogU1lTVEVNX0RBMTQ2ODBfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvbWVtb3J5L2luY2x1ZGUvcXNwaV9hdXRvbW9kZS5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvbWVtb3J5L2luY2x1ZGUvcXNwaV9hdXRvbW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTA4OTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvaW5jbHVkZS9xc3BpX2F1dG9tb2RlLmgKQEAgLTAsMCArMSwzMTcgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgU1lTVEVNCisgKiBceworICogXGFkZHRvZ3JvdXAgTUVNT1JZCisgKgorICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgcXNwaV9hdXRvbW9kZS5oCisgKgorICogQGJyaWVmIEFjY2VzcyBRU1BJIGZsYXNoIHdoZW4gcnVubmluZyBpbiBhdXRvIG1vZGUKKyAqCisgKiBUaGUgUVNQSSBjb250cm9sbGVyIGFsbG93cyB0byBleGVjdXRlIGNvZGUgZGlyZWN0bHkgZnJvbSBRU1BJIGZsYXNoLgorICogV2hlbiBjb2RlIGlzIGV4ZWN1dGluZyBmcm9tIGZsYXNoLCBpdCBpcyBub3QgcG9zc2libGUgdG8gcmVwcm9ncmFtIHRoZSBmbGFzaC4KKyAqIFRvIGJlIGFibGUgdG8gbW9kaWZ5IHRoZSBmbGFzaCB3aGVuIGl0IGlzIHVzZWQgZm9yIGNvZGUgZXhlY3V0aW9uLCBpdCBtdXN0IG1lIGFzc3VyZWQgdGhhdAorICogZm9yIHRoZSB0aW1lIG5lZWRlZCB0byBlcmFzZS93cml0ZSwgbm8gY29kZSBpcyBydW5uaW5nIGZyb20gZmxhc2guCisgKiBUbyBhY2hpZXZlIHRoaXMsIHRoZSBjb2RlIGluIHRoaXMgbW9kdWxlIGlzIGV4ZWN1dGVkIGZyb20gdGhlIFJBTS4KKyAqIENvZGUgaW4gdGhpcyBtb2R1bGUgd2lsbCBub3QgYWNjZXNzIGFueSBvdGhlciBmdW5jdGlvbnMgb3IgY29uc3RhbnQgdmFyaWFibGVzIHRoYXQgY291bGQgcmVzaWRlCisgKiBpbiBmbGFzaC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgUVNQSV9BVVRPTU9ERV9IXworI2RlZmluZSBRU1BJX0FVVE9NT0RFX0hfCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNka19kZWZzLmg+CisjaW5jbHVkZSA8aHdfcXNwaS5oPgorI2luY2x1ZGUgImh3X2NwbS5oIgorLyoKKyAqIERlYnVnIG9wdGlvbnMKKyAqLworI2lmIF9fREJHX1FTUElfRU5BQkxFRAorI2RlZmluZSBfX0RCR19RU1BJX1ZPTEFUSUxFX18gICAgICAgICAgIHZvbGF0aWxlCisjcHJhZ21hIG1lc3NhZ2UgIkF1dG9tb2RlOiBEZWJ1Z2dpbmcgaXMgb24hIgorI2Vsc2UKKyNkZWZpbmUgX19EQkdfUVNQSV9WT0xBVElMRV9fCisjZW5kaWYKKworCisvKgorICogRGVmaW5lcyAoZ2VuZXJpYykKKyAqLworCisvKiBNYWNyb3MgdG8gcHV0IGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29waWVkIHRvIHJhbSBpbiBvbmUgc2VjdGlvbiAocmV0YWluZWQpICovCisjZGVmaW5lIFFTUElfU0VDVElPTiAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbiAoInRleHRfcmV0YWluZWQiKSwgb3B0aW1pemUgKCJuby10cmVlLXN3aXRjaC1jb252ZXJzaW9uIikpKQorI2RlZmluZSBRU1BJX1NFQ1RJT05fTk9fSU5MSU5FICAgIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgidGV4dF9yZXRhaW5lZCIpKSkgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKwordHlwZWRlZiBzdHJ1Y3QgcXNwaV91Y29kZV9zIHsKKyAgICAgICBjb25zdCB1aW50MzJfdCAqY29kZTsKKyAgICAgICB1aW50OF90IHNpemU7Cit9IHFzcGlfdWNvZGVfdDsKKworLyoKKyAqIEZsYXNoIHNwZWNpZmljIGRlZmluZXMKKyAqLworCisvKioKKyAqIFxicmllZiBTVVMgYml0IGRlbGF5IGFmdGVyIFNVU1BFTkQgY29tbWFuZCAoaW4gzrxzZWMpCisgKgorICovCisjZGVmaW5lIEZMQVNIX1NVU19ERUxBWSAgICAgICAgICAgICAgICAgKDIwKQorCisKKy8qKgorICogXGJyaWVmIEdldCBzaXplIG9mIFJBTSBidWZmZXIgbmVlZGVkIGZvciBjb2RlIHRvIG1vZGlmeSBRU1BJIGZsYXNoLgorICoKKyAqIENhbGxlZCBtdXN0IGFsbG9jYXRlIGJ1ZmZlciBhdCBsZWFzdCBvZiB0aGlzIHNpemUgYW5kIHBhc3MgaXQgcXNwaV9zZXRfY29kZV9idWZmZXIoKSB0byBhbGxvdworICogZmxhc2ggbW9kaWZpY2F0aW9uLgorICoKKyAqIFxyZXR1cm4gc2l6ZSBvZiBidWZmZXIgbmVlZGVkCisgKgorICovCitERVBSRUNBVEVECit1aW50MzJfdCBxc3BpX2F1dG9tb2RlX2dldF9jb2RlX2J1ZmZlcl9zaXplKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTZXQgYnVmZmVyIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjb2RlIHRoYXQgbW9kaWZpZXMgZmxhc2guCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggYnVmZmVyIGFsbG9jYXRlZCBmb3IgZmxhc2ggbWFuaXB1bGF0aW9uIGNvZGUuCisgKiBTaXplIG9mIHRoaXMgYnVmZmVyIHNob3VsZCBiZSBhdCBsZWFzdCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBxc3BpX2dldF9jb2RlX2J1ZmZlcl9zaXplKCkuCisgKiBJZiBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBOVUxMIGFsbCBmdXJ0aGVyIGNhbGxzIHRvIHFzcGlfd3JpdGVfZmxhc2hfcGFnZSgpIG9yCisgKiBxc3BpX2VyYXNlX2ZsYXNoX3NlY3RvcigpIHdpbGwgY3Jhc2guCisgKiBUbyBwcmVzZXJ2ZSBtZW1vcnkgaXQgaXMgcXVpdGUgd2lzZSB0byBhbGxvY2F0ZSBidWZmZXIgYmVmb3JlIGVyYXNlL3dyaXRlLCB1cGRhdGUgZmxhc2ggYW5kCisgKiB0aGVuIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIE5VTEwgYW5kIGZyZWUgbWVtb3J5LgorICoKKyAqIFxwYXJhbSBbaW5dIHJhbSBidWZmZXIgZm9yIGNvZGUgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGVyYXNlIGFuZCB3cml0ZS4KKyAqCisgKi8KK0RFUFJFQ0FURURfTVNHKCJGdW5jdGlvbiBkb2VzIG5vdCBuZWVkIHRvIGJlIGNhbGxlZCIpCit2b2lkIHFzcGlfYXV0b21vZGVfc2V0X2NvZGVfYnVmZmVyKHZvaWQgKnJhbSk7CisKKy8qKgorICogXGJyaWVmIFdyaXRlIGZsYXNoIG1lbW9yeQorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHdyaXRlIHVwIHRvIHBhZ2Ugc2l6ZSBvZiBkYXRhIHRvIGZsYXNoLgorICogSWYgc2l6ZSBpcyBncmVhdGVyIHRoYW4gcGFnZSBzaXplLCBmbGFzaCBjYW4gd3JhcCBkYXRhIGFuZCBvdmVyd3JpdGUgY29udGVudCBvZiBwYWdlLgorICogSXQncyBwb3NzaWJsZSB0byB3cml0ZSBsZXNzIHRoZW4gcGFnZSBzaXplLgorICogTWVtb3J5IHNob3VsZCBiZSBlcmFzZWQgYmVmb3JlLgorICoKKyAqIFxub3RlOiBEbyBub3QgcGFzcyBidWYgcG9pbnRpbmcgdG8gUVNQSSBtYXBwZWQgbWVtb3J5LgorICoKKyAqIFxwYXJhbSBbaW5dIGFkZHIgb2Zmc2V0IGluIGZsYXNoIHRvIHdyaXRlIGRhdGEgdG8KKyAqIFxwYXJhbSBbaW5dIGJ1ZiBwb2ludGVyIHRvIGRhdGEgdG8gd3JpdGUKKyAqIFxwYXJhbSBbaW5dIHNpemUgbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCisgKgorICogcmV0dXJuIG51bWJlciBvZiBieXRlcyB3cml0dGVuCisgKgorICovCitzaXplX3QgcXNwaV9hdXRvbW9kZV93cml0ZV9mbGFzaF9wYWdlKHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IHNpemUpOworCisvKioKKyAqIFxicmllZiBFcmFzZSBmbGFzaCBzZWN0b3IKKyAqCisgKiBccGFyYW0gW2luXSBhZGRyIHN0YXJ0aW5nIG9mZnNldCBvZiBzZWN0b3IKKyAqLwordm9pZCBxc3BpX2F1dG9tb2RlX2VyYXNlX2ZsYXNoX3NlY3Rvcih1aW50MzJfdCBhZGRyKTsKKworLyoqCisgKiBcYnJpZWYgRXJhc2Ugd2hvbGUgY2hpcAorICovCit2b2lkIHFzcGlfYXV0b21vZGVfZXJhc2VfY2hpcCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgUmVhZCBmbGFzaCBtZW1vcnkKKyAqCisgKiBccGFyYW0gW2luXSBhZGRyIHN0YXJ0aW5nIG9mZnNldAorICogXHBhcmFtIFtvdXRdIGJ1ZiBidWZmZXIgdG8gcmVhZCBkYXRhIHRvCisgKiBccGFyYW0gW2luXSBsZW4gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKKyAqCisgKiBccmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgcmVhZAorICovCitzaXplX3QgcXNwaV9hdXRvbW9kZV9yZWFkKHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGxlbik7CisKKy8qKgorICogXGJyaWVmIEdldCBhZGRyZXNzIG9mIGZsYXNoCisgKgorICogXHBhcmFtIFtpbl0gYWRkciBzdGFydGluZyBvZmZzZXQKKyAqCisgKiBccmV0dXJucyBhZGRyZXNzIGluIENQVSBhZGRyZXNzIHNwYWNlIHdoZXJlIGRhdGEgaXMgbG9jYXRlZAorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IHZvaWQgKnFzcGlfYXV0b21vZGVfYWRkcih1aW50MzJfdCBhZGRyKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqcXNwaV9hdXRvbW9kZV9hZGRyKHVpbnQzMl90IGFkZHIpCit7CisgICAgICAgIHJldHVybiAoY29uc3Qgdm9pZCAqKSAoTUVNT1JZX1FTUElGX0JBU0UgKyBhZGRyKTsKK30KKworLyoqCisgKiBcYnJpZWYgUG93ZXIgdXAgZmxhc2gKKyAqLworUVNQSV9TRUNUSU9OIHZvaWQgcXNwaV9hdXRvbW9kZV9mbGFzaF9wb3dlcl91cCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU2V0IFFTUEkgRmxhc2ggaW50byBwb3dlciBkb3duIG1vZGUKKyAqLworUVNQSV9TRUNUSU9OIHZvaWQgcXNwaV9hdXRvbW9kZV9mbGFzaF9wb3dlcl9kb3duKHZvaWQpOworCisvKioKKyAqIFxicmllZiBJbml0IFFTUEkgY29udHJvbGxlcgorICovCitfX1JFVEFJTkVEX0NPREUgYm9vbCBxc3BpX2F1dG9tb2RlX2luaXQodm9pZCk7CisKKyNpZiAoZGdfY29uZmlnRElTQUJMRV9CQUNLR1JPVU5EX0ZMQVNIX09QUyA9PSAwKQorLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgYSBwcm9ncmFtIG9yIHNlY3RvciBlcmFzZSBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MKKyAqCisgKiBccmV0dXJuIGJvb2wgVHJ1ZSBpZiB0aGUgQlVTWSBiaXQgaXMgc2V0IGVsc2UgZmFsc2UuCisgKgorICogXHdhcm5pbmcgVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHZhbHVlIG9mIHRoZSBCVVNZIGJpdCBpbiB0aGUgU3RhdHVzIFJlZ2lzdGVyIDEgb2YgdGhlIEZsYXNoLiBJdAorICogICAgICAgIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGluIHRoZSByaWdodCBjb250ZXh0LiBUaGUKKyAqICAgICAgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICovCitfX1JFVEFJTkVEX0NPREUgYm9vbCBxc3BpX2NoZWNrX3Byb2dyYW1fZXJhc2VfaW5fcHJvZ3Jlc3Modm9pZCk7CisKKy8qKgorICogXGJyaWVmIFN1c3BlbmQgYSBGbGFzaCBwcm9ncmFtIG9yIGVyYXNlIG9wZXJhdGlvbgorICoKKyAqIFxkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd2lsbCB0cnkgdG8gc3VzcGVuZCBhbiBvbmdvaW5nIHByb2dyYW0gb3IgZXJhc2UgcHJvY2VkdXJlLiBUaGUgU1VTIGJpdCBpcworICogICAgICAgIGNoZWNrZWQgYW5kIHRoZSBhY3R1YWwgc3RhdHVzIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuIE5vdGUgdGhhdCB0aGUgcHJvZ3JhbSBvciBlcmFzZQorICogICAgICAgIHByb2NlZHVyZSBtYXkgaGF2ZSBiZWVuIGNvbXBsZXRlZCBiZWZvcmUgdGhlIHN1c3BlbmQgY29tbWFuZCBpcyBwcm9jZXNzZWQgYnkgdGhlIEZsYXNoLiBJbgorICogICAgICAgIHRoaXMgY2FzZSB0aGUgU1VTIGJpdCB3aWxsIGJlIGxlZnQgdG8gMC4KKyAqCisgKiBccmV0dXJuIGJvb2wgVHJ1ZSBpZiB0aGUgcHJvY2VkdXJlIGhhcyBiZWVuIHN1c3BlbmRlZC4gRmFsc2UgaWYgdGhlIHByb2NlZHVyZSB3YXMgbm90IHN1c3BlbmRlZAorICogICAgICAgIHN1Y2Nlc3NmdWxseSBvciBoYWQgZmluaXNoZWQgYmVmb3JlIHRoZSBzdXNwZW5kIGNvbW1hbmQgd2FzIHByb2Nlc3NlZCBieSB0aGUgRmxhc2guCisgKgorICogXHdhcm5pbmcgQWZ0ZXIgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiwgdGhlIFFTUEkgY29udHJvbGxlciBpcyBzZXQgdG8gYXV0byBtb2RlIGFuZCB0aGUgRmxhc2gKKyAqICAgICAgICBhY2Nlc3MgdG8gcXVhZCBtb2RlIChpZiBRVUFEX01PREUgaXMgMSkuIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMKKyAqICAgICAgICBkaXNhYmxlZC4KKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSBib29sIHFzcGlfY2hlY2tfYW5kX3N1c3BlbmQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFJlc3VtZSBhIEZsYXNoIHByb2dyYW0gb3Igc2VjdG9yIGVyYXNlIG9wZXJhdGlvbgorICoKKyAqIFx3YXJuaW5nIEFmdGVyIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24sIHRoZSBRU1BJIGNvbnRyb2xsZXIgaXMgc2V0IHRvIG1hbnVhbCBtb2RlIGFuZCB0aGUgRmxhc2gKKyAqICAgICAgICBhY2Nlc3MgdG8gc2luZ2xlIG1vZGUuIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICovCitfX1JFVEFJTkVEX0NPREUgdm9pZCBxc3BpX3Jlc3VtZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgRXJhc2UgYSBzZWN0b3Igb2YgdGhlIEZsYXNoIGluIG1hbnVhbCBtb2RlCisgKgorICogXHBhcmFtW2luXSBhZGRyIFRoZSBhZGRyZXNzIG9mIHRoZSBzZWN0b3IgdG8gYmUgZXJhc2VkLgorICoKKyAqIFx3YXJuaW5nIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYmxvY2sgdW50aWwgdGhlIEZsYXNoIGhhcyBwcm9jZXNzZWQgdGhlIGNvbW1hbmQhIFRoZSBRU1BJCisgKiAgICAgICAgY29udHJvbGxlciBpcyBsZWZ0IHRvIG1hbnVhbCBtb2RlIGFmdGVyIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBtdXN0IGJlCisgKiAgICAgICAgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSB2b2lkIGZsYXNoX2VyYXNlX3NlY3Rvcl9tYW51YWxfbW9kZSh1aW50MzJfdCBhZGRyKTsKKworLyoqCisgKiBcYnJpZWYgUHJvZ3JhbSBkYXRhIGludG8gYSBwYWdlIG9mIHRoZSBGbGFzaCBpbiBtYW51YWwgbW9kZQorICoKKyAqIFxwYXJhbVtpbl0gYWRkciBUaGUgYWRkcmVzcyBvZiB0aGUgRmxhc2ggd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSB3cml0dGVuLiBJdCBtYXkgYmUgYW55d2hlcmUgaW4gYQorICogICAgICAgIHBhZ2UuCisgKiBccGFyYW1baW5dIGJ1ZiBQb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4uCisgKiBccGFyYW1baW5dIGxlbiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4uCisgKgorICogXHJldHVybiBzaXplX3QgVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorICoKKyAqIFx3YXJuaW5nIFRoZSBib3VuZGFyeSBvZiB0aGUgcGFnZSB3aGVyZSBhZGRyIGJlbG9uZ3MgdG8sIHdpbGwgbm90IGJlIGNyb3NzZWQhIFRoZSBjYWxsZXIgc2hvdWxkCisgKiAgICAgICAgaXNzdWUgYW5vdGhlciBmbGFzaF9wcm9ncmFtX3BhZ2VfbWFudWFsX21vZGUoKSBjYWxsIGluIG9yZGVyIHRvIHdyaXRlIHRoZSByZW1haW5pbmcgZGF0YQorICogICAgICAgIHRvIHRoZSBuZXh0IHBhZ2UuIFRoZSBRU1BJIGNvbnRyb2xsZXIgaXMgbGVmdCB0byBtYW51YWwgbW9kZSBhZnRlciB0aGUgY2FsbCB0byB0aGlzCisgKiAgICAgICAgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICovCitfX1JFVEFJTkVEX0NPREUgc2l6ZV90IGZsYXNoX3Byb2dyYW1fcGFnZV9tYW51YWxfbW9kZSh1aW50MzJfdCBhZGRyLCBjb25zdCB1aW50OF90ICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZW4pOworI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEFjdGl2YXRlIEZsYXNoIGNvbW1hbmQgZW50cnkgbW9kZQorICoKKyAqIFxub3RlIEFmdGVyIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24sIHRoZSBRU1BJIGNvbnRyb2xsZXIgaXMgc2V0IHRvIG1hbnVhbCBtb2RlIGFuZCB0aGUgRmxhc2gKKyAqICAgICAgICBhY2Nlc3MgdG8gc2luZ2xlIG1vZGUuCisgKgorICogXHdhcm5pbmcgVGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSB2b2lkIGZsYXNoX2FjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgRGVhY3RpdmF0ZSBGbGFzaCBjb21tYW5kIGVudHJ5IG1vZGUKKyAqCisgKiBcbm90ZSBBZnRlciB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLCB0aGUgUVNQSSBjb250cm9sbGVyIGlzIHNldCB0byBhdXRvIG1vZGUgYW5kIHRoZSBGbGFzaAorICogICAgICAgIGFjY2VzcyB0byBxdWFkIG1vZGUgKGlmIFFVQURfTU9ERSBpcyAxKS4KKyAqCisgKiBcd2FybmluZyBUaGUgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICoKKyAqLworX19SRVRBSU5FRF9DT0RFIHZvaWQgZmxhc2hfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZSBGbGFzaCBhbmQgUVNQSSBjb250cm9sbGVyIGZvciBzeXN0ZW0gY2xvY2sgZnJlcXVlbmN5CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgRmxhc2ggY29uZmlndXJhdGlvbiBvZiB0aGUgUVNQSSBjb250cm9sbGVyCisgKiB0byB3b3JrIHdpdGggdGhlIHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgZGVmaW5lZCBpbiBzeXNfY2xrLiBEdW1teSBjbG9jaworICogY3ljbGVzIGNvdWxkIGJlIGNoYW5nZWQgaGVyZSB0byBzdXBwb3J0IGhpZ2hlciBjbG9jayBmcmVxdWVuY2llcy4KKyAqIFFTUEkgY29udHJvbGxlciBjbG9jayBkaXZpZGVyIGNvdWxkIGFsc28gYmUgY2hhbmdlZCBpZiB0aGUgRmxhc2gKKyAqIG1heGltdW0gZnJlcXVlbmN5IGlzIHNtYWxsZXIgdGhhbiB0aGUgc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeS4KKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNoYW5naW5nIHN5c3RlbSBjbG9jayBmcmVxdWVuY3kuCisgKgorICogXHBhcmFtIFtpbl0gc3lzX2NsayBTeXN0ZW0gY2xvY2sgZnJlcXVlbmN5CisgKgorICovCitfX1JFVEFJTkVEX0NPREUgdm9pZCBxc3BpX2F1dG9tb2RlX3N5c19jbG9ja19jZmcoc3lzX2Nsa190IHN5c19jbGspOworCisvKioKKyAqIFxicmllZiBHZXQgdWNvZGUgcmVxdWlyZWQgZm9yIHdha2UtdXAgc2VxdWVuY2UKKyAqIFxyZXR1cm4gcXNwaV91Y29kZV90IFBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSB1Y29kZSBhbmQgdWNvZGUgc2l6ZQorICovCitjb25zdCBxc3BpX3Vjb2RlX3QgKnFzcGlfYXV0b21vZGVfZ2V0X3Vjb2RlKHZvaWQpOworCisjZW5kaWYgLyogUVNQSV9BVVRPTU9ERV9IXyAqLworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9pbmNsdWRlL3FzcGlfY29tbW9uLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvaW5jbHVkZS9xc3BpX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMTEwNzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvaW5jbHVkZS9xc3BpX2NvbW1vbi5oCkBAIC0wLDAgKzEsMTczIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIFNZU1RFTQorICogXHsKKyAqIFxhZGR0b2dyb3VwIE1FTU9SWQorICoKKyAqIFxicmllZiBRU1BJIGZsYXNoIGRyaXZlciBmcmFtZXdvcmsKKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIHFzcGlfY29tbW9uLmgKKyAqCisgKiBAYnJpZWYgUVNQSSBmbGFzaCBkcml2ZXIgY29tbW9uIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmbmRlZiBfUVNQSV9DT01NT05fSF8KKyNkZWZpbmUgX1FTUElfQ09NTU9OX0hfCisKKyNpbmNsdWRlICJxc3BpX2F1dG9tb2RlLmgiCisKKy8qCisgKiBGbGFzaCBDb21tYW5kcworICoKKyAqIE5vdGU6IERlZmF1bHQgY29tbWFuZCBpc3N1aW5nIG1vZGUgaXMgc2luZ2xlIG1vZGUhIElmIGNvbW1hbmRzIHNwZWNpZmljIHRvIG90aGVyIG1vZGVzIGhhdmUgdG8gYmUKKyAqIGlzc3VlZCB0aGVuIHRoZSBtb2RlIG11c3QgYmUgY2hhbmdlZCEKKyAqLworI2RlZmluZSBDTURfV1JJVEVfU1RBVFVTX1JFR0lTVEVSICAgICAgIDB4MDEKKyNkZWZpbmUgQ01EX1dSSVRFX0RJU0FCTEUgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIENNRF9SRUFEX1NUQVRVU19SRUdJU1RFUiAgICAgICAgMHgwNQorI2RlZmluZSBDTURfV1JJVEVfRU5BQkxFICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQ01EX1NFQ1RPUl9FUkFTRSAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIENNRF9RVUFEX1BBR0VfUFJPR1JBTSAgICAgICAgICAgMHgzMgorI2RlZmluZSBDTURfUVVBRF9JT19QQUdFX1BST0dSQU0gICAgICAgIDB4MzgKKyNkZWZpbmUgQ01EX0JMT0NLX0VSQVNFICAgICAgICAgICAgICAgICAweDUyCisjZGVmaW5lIENNRF9DSElQX0VSQVNFICAgICAgICAgICAgICAgICAgMHhDNworI2RlZmluZSBDTURfRkFTVF9SRUFEX1FVQUQgICAgICAgICAgICAgIDB4RUIKKyNkZWZpbmUgQ01EX1JFQURfSkVERUNfSUQgICAgICAgICAgICAgICAweDlGCisjZGVmaW5lIENNRF9FWElUX0NPTlRJTlVPVVNfTU9ERSAgICAgICAgMHhGRgorI2RlZmluZSBDTURfUkVMRUFTRV9QT1dFUl9ET1dOICAgICAgICAgIDB4QUIKKyNkZWZpbmUgQ01EX0VOVEVSX1BPV0VSX0RPV04gICAgICAgICAgICAweEI5CisKKyNkZWZpbmUgQ01EX0ZBU1RfUkVBRF9RVUFEXzRCICAgICAgICAgICAweEVDCisjZGVmaW5lIENNRF9TRUNUT1JfRVJBU0VfNEIgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBDTURfUVVBRF9QQUdFX1BST0dSQU1fNEIgICAgICAgIDB4MzQKKyNkZWZpbmUgQ01EX1FVQURfSU9fUEFHRV9QUk9HUkFNXzRCICAgICAweDNFCisKKy8qIEVyYXNlL1dyaXRlIGluIHByb2dyZXNzICovCisjZGVmaW5lIEZMQVNIX1NUQVRVU19CVVNZX0JJVCAgICAgICAgICAgMAorI2RlZmluZSBGTEFTSF9TVEFUVVNfQlVTWV9NQVNLICAgICAgICAgICgxIDw8IEZMQVNIX1NUQVRVU19CVVNZX0JJVCkKKworLyogV0UgTGF0Y2ggYml0ICovCisjZGVmaW5lIEZMQVNIX1NUQVRVU19XRUxfQklUICAgICAgICAgICAgMQorI2RlZmluZSBGTEFTSF9TVEFUVVNfV0VMX01BU0sgICAgICAgICAgICgxIDw8IEZMQVNIX1NUQVRVU19XRUxfQklUKQorCit0eXBlZGVmIGJvb2wgKCppc19zdXNwZW5kZWRfY2JfdCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKCppbml0aWFsaXplX2NiX3QpKHVpbnQ4X3QgZGV2aWNlX3R5cGUsIHVpbnQ4X3QgZGV2aWNlX2RlbnNpdHkpOwordHlwZWRlZiB2b2lkICgqZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGVfY2JfdCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKCpzeXNfY2xrX2NmZ19jYl90KShzeXNfY2xrX3QgdHlwZSk7Cit0eXBlZGVmIHVpbnQ4X3QgKCpnZXRfZHVtbXlfYnl0ZXNfY2JfdCkodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFFTUEkgRmxhc2ggY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHRvIGRlZmluZSBhIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBRU1BJIGZsYXNoLgorICoKKyAqIFxub3RlIFRoZSBzdHJ1Y3QgaW5zdGFuY2UgbXVzdCBiZSBkZWNsYXJlZCBhcyBzdGF0aWMgY29uc3QgZm9yIHRoaXMgdG8gd29yaworICovCit0eXBlZGVmIHN0cnVjdCBxc3BpX2ZsYXNoX2NvbmZpZyB7CisgICAgICAgIC8vIEZ1bmN0aW9uIHBvaW50ZXJzCisgICAgICAgIGluaXRpYWxpemVfY2JfdCBpbml0aWFsaXplOyAgICAgICAgICAgIC8qKjwgRmxhc2gtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KKyAgICAgICAgaXNfc3VzcGVuZGVkX2NiX3QgaXNfc3VzcGVuZGVkOyAgICAgICAgLyoqPCBDaGVjayBpZiBmbGFzaCBpcyBpbiBlcmFzZS9wcm9ncmFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VzcGVuZCBzdGF0ZSAqLworICAgICAgICBkZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZV9jYl90CisgICAgICAgICAgICAgICAgZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGU7IC8qKjwgUGVyZm9ybSBleHRyYSBzdGVwcyBuZWVkZWQgd2hlbiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkgbW9kZSBpcyBkZWFjdGl2YXRlZCAqLworICAgICAgICBzeXNfY2xrX2NmZ19jYl90IHN5c19jbGtfY2ZnOyAgICAgICAgICAvKio8IFBlcmZvcm0gRmxhc2ggY29uZmlndXJhdGlvbiB3aGVuIHN5c3RlbSBjbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNoYW5nZWQgKGUuZy4gY2hhbmdlIGR1bW15IGJ5dGVzIG9yIFFTUElDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgZGl2aWRlciAqLworICAgICAgICBnZXRfZHVtbXlfYnl0ZXNfY2JfdCBnZXRfZHVtbXlfYnl0ZXM7ICAvKio8IFJldHVybiB0aGUgbnVtYmVyIG9mIGR1bW15IGJ5dGVzIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCAodGhleSBtYXkgZS5nLiBjaGFuZ2Ugd2hlbiB0aGUgY2xvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzKSAqLworICAgICAgICB1aW50OF90IG1hbnVmYWN0dXJlcl9pZDsgICAgICAgICAgICAgICAvKio8IFRoZSBGbGFzaCBKRURFQyB2ZW5kb3IgSUQgKENtZCAweDlGLCAxc3QgYnl0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIChhbmQgdGhlIGRldmljZV90eXBlL2RldmljZV9kZW5zaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBuZWVkZWQgZm9yIGZsYXNoIGF1dG9kZXRlY3Rpb24gKi8KKyAgICAgICAgdWludDhfdCBkZXZpY2VfdHlwZTsgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgRmxhc2ggSkVERUMgZGV2aWNlIHR5cGUgKENtZCAweDlGLCAybmQgYnl0ZSkgKi8KKyAgICAgICAgdWludDhfdCBkZXZpY2VfZGVuc2l0eTsgICAgICAgICAgICAgICAgLyoqPCBUaGUgRmxhc2ggSkVERUMgZGV2aWNlIHR5cGUgKENtZCAweDlGLCAzcmQgYnl0ZSkgKi8KKyAgICAgICAgdWludDhfdCBlcmFzZV9vcGNvZGU7ICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgRmxhc2ggZXJhc2Ugb3Bjb2RlIHRvIHVzZSAqLworICAgICAgICB1aW50OF90IGVyYXNlX3N1c3BlbmRfb3Bjb2RlOyAgICAgICAgICAvKio8IFRoZSBGbGFzaCBlcmFzZSBzdXNwZW5kIG9wY29kZSB0byB1c2UgKi8KKyAgICAgICAgdWludDhfdCBlcmFzZV9yZXN1bWVfb3Bjb2RlOyAgICAgICAgICAgLyoqPCBUaGUgRmxhc2ggZXJhc2UgcmVzdW1lIG9wY29kZSB0byB1c2UgKi8KKyAgICAgICAgdWludDhfdCBwYWdlX3Byb2dyYW1fb3Bjb2RlOyAgICAgICAgICAgLyoqPCBUaGUgRmxhc2ggcGFnZSBwcm9ncmFtIG9wY29kZSB0byB1c2UgKi8KKyAgICAgICAgYm9vbCBxdWFkX3BhZ2VfcHJvZ3JhbV9hZGRyZXNzOyAgICAgICAgLyoqPCBJZiB0cnVlLCB0aGUgYWRkcmVzcyB3aWxsIGJlIHRyYW5zbWl0dGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVBRCBtb2RlIHdoZW4gd3JpdGluZyBhIHBhZ2UuIE90aGVyd2lzZSwgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHRyYW5zbWl0dGVkIGluIHNpbmdsZSBtb2RlICovCisgICAgICAgIHVpbnQ4X3QgcmVhZF9lcmFzZV9wcm9ncmVzc19vcGNvZGU7ICAgIC8qKjwgVGhlIG9wY29kZSB0byB1c2UgdG8gY2hlY2sgaWYgZXJhc2UgaXMgaW4gcHJvZ3Jlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVXN1YWxseSB0aGUgUmVhZCBTdGF0dXMgUmVnIG9wY29kZSAoMHg1KSkgKi8KKworICAgICAgICB1aW50OF90IGVyYXNlX2luX3Byb2dyZXNzX2JpdDsgICAgICAgICAvKio8IFRoZSBiaXQgdG8gY2hlY2sgd2hlbiByZWFkaW5nIHRoZSBlcmFzZSBwcm9ncmVzcyAqLworICAgICAgICBib29sIGVyYXNlX2luX3Byb2dyZXNzX2JpdF9oaWdoX2xldmVsOyAvKio8IFRoZSBhY3RpdmUgc3RhdGUgKHRydWU6IGhpZ2gsIGZhbHNlOiBsb3cpIG9mIHRoZSBiaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZSAqLworICAgICAgICB1aW50OF90IHNlbmRfb25jZTsgICAgICAgICAgICAgICAgICAgICAvKio8IElmIHNldCB0byAxLCB0aGUgIlBlcmZvcm1hbmNlIG1vZGUiIChvciBidXJzdCwgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzOyBkaWZmZXJzIHBlciB2ZW5kb3IpIHdpbGwgYmUgdXNlZCBmb3IgcmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2VzLiBJbiB0aGlzIG1vZGUsIHRoZSByZWFkIG9wY29kZSBpcyBvbmx5IHNlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNlLCBhbmQgc3Vic2VxdWVudCBhY2Nlc3NlcyBvbmx5IHRyYW5zZmVyIHRoZSBhZGRyZXNzICovCisgICAgICAgIHVpbnQ4X3QgZXh0cmFfYnl0ZTsgICAgICAgICAgICAgICAgICAgIC8qKjwgVGhlIGV4dHJhIGJ5dGUgdG8gdHJhbnNtaXQsIHdoZW4gaW4gIlBlcmZvcm1hbmNlIG1vZGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbmQgb25jZSBpcyAxKSwgdGhhdCB0ZWxscyB0aGUgZmxhc2ggdGhhdCBpdCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF5IGluIHRoaXMgY29udGludW91cywgcGVyZm9ybWFuY2UgbW9kZSAqLworICAgICAgICBIV19RU1BJX0FERFJfU0laRSBhZGRyZXNzX3NpemU7ICAgICAgICAvKio8IFdoZXRoZXIgdGhlIGZsYXNoIHdvcmtzIGluIDI0LSBvciAzMi1iaXQgYWRkcmVzc2luZyBtb2RlICovCisgICAgICAgIEhXX1FTUElfQlJFQUtfU0VRX1NJWkUgYnJlYWtfc2VxX3NpemU7IC8qKjwgV2hldGhlciB0aGUgYnJlYWsgc2VxdWVuY2UsIHRoYXQgcHV0cyBmbGFzaCBvdXQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludW91cyBtb2RlLCBpcyBvbmUgb3IgdHdvIGJ5dGVzIGxvbmcgKHRoZSBicmVhayBieXRlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRikgKi8KKyAgICAgICAgcXNwaV91Y29kZV90IHVjb2RlX3dha2V1cDsgICAgICAgICAgICAgLyoqPCBUaGUgUVNQSUMgbWljcm9jb2RlIHRvIHVzZSB0byBzZXR1cCB0aGUgZmxhc2ggb24gd2FrZXVwLiBUaGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYXV0b21hdGljYWxseSB1c2VkIGJ5IHRoZSBRU1BJIENvbnRyb2xsZXIgYWZ0ZXIgd2FrZXVwLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgQ1BVIHN0YXJ0cyBjb2RlIGV4ZWN1dGlvbi4gVGhpcyBpcyBkaWZmZXJlbnQgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGV0aGVyIGZsYXNoIHdhcyBhY3RpdmUsIGluIGRlZXAgcG93ZXIgZG93biBvciBjb21wbGV0ZWx5IG9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHNsZWVwaW5nICovCisgICAgICAgIHVpbnQxNl90IHBvd2VyX2Rvd25fZGVsYXk7ICAgICAgICAgICAgIC8qKjwgVGhpcyBpcyB0aGUgdGltZSwgaW4gdXNlYywgbmVlZGVkIGZvciB0aGUgZmxhc2ggdG8gZ28gdG8gcG93ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3duLCBhZnRlciB0aGUgUG93ZXIgRG93biBjb21tYW5kIGlzIGlzc3VlZCAqLworICAgICAgICB1aW50MTZfdCByZWxlYXNlX3Bvd2VyX2Rvd25fZGVsYXk7ICAgICAvKio8IFRoaXMgaXMgdGhlIHRpbWUsIGluIHVzZWMsIG5lZWRlZCBmb3IgdGhlIGZsYXNoIHRvIGV4aXQgdGhlIHBvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93biBtb2RlLCBhZnRlciB0aGUgUmVsZWFzZSBQb3dlciBEb3duIGNvbW1hbmQgaXMgaXNzdWVkICovCit9IHFzcGlfZmxhc2hfY29uZmlnX3Q7CisKK2V4dGVybiBjb25zdCBxc3BpX2ZsYXNoX2NvbmZpZ190KiBmbGFzaF9jb25maWdfaW5pdDsKKyNpZiAoRkxBU0hfQVVUT0RFVEVDVCA9PSAxKQorZXh0ZXJuIHFzcGlfZmxhc2hfY29uZmlnX3QgKmZsYXNoX2NvbmZpZzsKKyNlbHNlCitleHRlcm4gY29uc3QgcXNwaV9mbGFzaF9jb25maWdfdCAqIGNvbnN0IGZsYXNoX2NvbmZpZzsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBxc3BpX3dyaXRlKGNvbnN0IHVpbnQ4X3QgKndidWYsIHNpemVfdCB3bGVuKTsKK3N0YXRpYyB2b2lkIHFzcGlfdHJhbnNhY3QoY29uc3QgdWludDhfdCAqd2J1Ziwgc2l6ZV90IHdsZW4sIHVpbnQ4X3QgKnJidWYsIHNpemVfdCBybGVuKTsKK3N0YXRpYyB1aW50OF90IGZsYXNoX3JlYWRfc3RhdHVzX3JlZ2lzdGVyKHZvaWQpOworc3RhdGljIHZvaWQgZmxhc2hfd3JpdGVfc3RhdHVzX3JlZ2lzdGVyKHVpbnQ4X3QgdmFsdWUpOworc3RhdGljIHZvaWQgZmxhc2hfd3JpdGVfZW5hYmxlKHZvaWQpOworc3RhdGljIHZvaWQgcXNwaV9hdXRvbW9kZV9zZXRfZHVtbXlfYnl0ZXNfY291bnQodWludDhfdCBjb3VudCk7CitzdGF0aWMgYm9vbCBmbGFzaF9pc19idXN5KHZvaWQpOworc3RhdGljIGlubGluZSBib29sIGZsYXNoX2VyYXNlX3Byb2dyYW1faW5fcHJvZ3Jlc3Modm9pZCk7CisKKyNlbmRpZiAvKiBfUVNQSV9DT01NT05fSF8gKi8KKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvaW5jbHVkZS9xc3BpX3cyNXE4MGV3LmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvaW5jbHVkZS9xc3BpX3cyNXE4MGV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzN2ZkMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9pbmNsdWRlL3FzcGlfdzI1cTgwZXcuaApAQCAtMCwwICsxLDExNCBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBTWVNURU0KKyAqIFx7CisgKiBcYWRkdG9ncm91cCBNRU1PUlkKKyAqCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBxc3BpX3cyNXE4MGV3LmgKKyAqCisgKiBAYnJpZWYgUVNQSSBmbGFzaCBkcml2ZXIgZm9yIHRoZSBXaW5ib25kIFcyNVE4MEVXCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjaWZuZGVmIF9RU1BJX1czMlE4MEVXX0hfCisjZGVmaW5lIF9RU1BJX1czMlE4MEVXX0hfCisKKyNpZm5kZWYgV0lOQk9ORF9JRAorI2RlZmluZSBXSU5CT05EX0lEICAgICAgMHhFRgorI2VuZGlmCisKKy8vIERldmljZSB0eXBlIHVzaW5nIGNvbW1hbmQgMHg5RgorI2RlZmluZSBXMjVRODBFVyAgICAgICAgMHg2MAorCisjaWZuZGVmIFcyNVFfOE1iX1NJWkUKKyNkZWZpbmUgVzI1UV84TWJfU0laRSAgIDB4MTQKKyNlbmRpZgorCisjaWYgKEZMQVNIX0FVVE9ERVRFQ1QgPT0gMSkgfHwgKGRnX2NvbmZpZ0ZMQVNIX01BTlVGQUNUVVJFUl9JRCA9PSBXSU5CT05EX0lEICYmIFwKKyAgICAgICAgZGdfY29uZmlnRkxBU0hfREVWSUNFX1RZUEUgPT0gVzI1UTgwRVcgJiYgZGdfY29uZmlnRkxBU0hfREVOU0lUWSA9PSBXMjVRXzhNYl9TSVpFKQorCisjaW5jbHVkZSAicXNwaV9jb21tb24uaCIKKworI2luY2x1ZGUgInFzcGlfd2luYm9uZC5oIgorCitzdGF0aWMgdm9pZCBmbGFzaF93MjVxODBld19zeXNfY2xvY2tfY2ZnKHN5c19jbGtfdCBzeXNfY2xrKTsKK3N0YXRpYyB1aW50OF90IGZsYXNoX3cyNXE4MGV3X2dldF9kdW1teV9ieXRlcyh2b2lkKTsKKworc3RhdGljIGNvbnN0IHFzcGlfZmxhc2hfY29uZmlnX3QgZmxhc2hfdzI1cTgwZXdfY29uZmlnID0geworICAgICAgICAubWFudWZhY3R1cmVyX2lkICAgICAgICAgICAgICAgPSBXSU5CT05EX0lELAorICAgICAgICAuZGV2aWNlX3R5cGUgICAgICAgICAgICAgICAgICAgPSBXMjVRODBFVywKKyAgICAgICAgLmRldmljZV9kZW5zaXR5ICAgICAgICAgICAgICAgID0gVzI1UV84TWJfU0laRSwKKyAgICAgICAgLmlzX3N1c3BlbmRlZCAgICAgICAgICAgICAgICAgID0gZmxhc2hfdzI1cV9pc19zdXNwZW5kZWQsCisgICAgICAgIC5pbml0aWFsaXplICAgICAgICAgICAgICAgICAgICA9IGZsYXNoX3cyNXFfaW5pdGlhbGl6ZSwKKyAgICAgICAgLmRlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlID0gZmxhc2hfdzI1cV9kZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSwKKyAgICAgICAgLnN5c19jbGtfY2ZnICAgICAgICAgICAgICAgICAgID0gZmxhc2hfdzI1cTgwZXdfc3lzX2Nsb2NrX2NmZywKKyAgICAgICAgLmdldF9kdW1teV9ieXRlcyAgICAgICAgICAgICAgID0gZmxhc2hfdzI1cTgwZXdfZ2V0X2R1bW15X2J5dGVzLAorICAgICAgICAuYnJlYWtfc2VxX3NpemUgICAgICAgICAgICAgICAgPSBIV19RU1BJX0JSRUFLX1NFUV9TSVpFXzFCLAorICAgICAgICAuYWRkcmVzc19zaXplICAgICAgICAgICAgICAgICAgPSBIV19RU1BJX0FERFJfU0laRV8yNCwKKyAgICAgICAgLnBhZ2VfcHJvZ3JhbV9vcGNvZGUgICAgICAgICAgID0gQ01EX1FVQURfUEFHRV9QUk9HUkFNLAorICAgICAgICAucXVhZF9wYWdlX3Byb2dyYW1fYWRkcmVzcyAgICAgPSBmYWxzZSwKKyAgICAgICAgLmVyYXNlX29wY29kZSAgICAgICAgICAgICAgICAgID0gQ01EX1NFQ1RPUl9FUkFTRSwKKyAgICAgICAgLmVyYXNlX3N1c3BlbmRfb3Bjb2RlICAgICAgICAgID0gVzI1UV9FUkFTRV9QUk9HUkFNX1NVU1BFTkQsCisgICAgICAgIC5lcmFzZV9yZXN1bWVfb3Bjb2RlICAgICAgICAgICA9IFcyNVFfRVJBU0VfUFJPR1JBTV9SRVNVTUUsCisgICAgICAgIC5yZWFkX2VyYXNlX3Byb2dyZXNzX29wY29kZSAgICA9IENNRF9SRUFEX1NUQVRVU19SRUdJU1RFUiwKKyAgICAgICAgLmVyYXNlX2luX3Byb2dyZXNzX2JpdCAgICAgICAgID0gRkxBU0hfU1RBVFVTX0JVU1lfQklULAorICAgICAgICAuZXJhc2VfaW5fcHJvZ3Jlc3NfYml0X2hpZ2hfbGV2ZWwgPSB0cnVlLAorICAgICAgICAuc2VuZF9vbmNlICAgICAgICAgICAgICAgICAgICAgPSAxLAorICAgICAgICAuZXh0cmFfYnl0ZSAgICAgICAgICAgICAgICAgICAgPSAweEEwLAorICAgICAgICAudWNvZGVfd2FrZXVwICAgICAgICAgICAgICAgICAgPSB7dzI1cV91Y29kZV93YWtldXAsIHNpemVvZih3MjVxX3Vjb2RlX3dha2V1cCl9LAorICAgICAgICAucG93ZXJfZG93bl9kZWxheSAgICAgICAgICAgICAgPSBXMjVRX1BPV0VSX0RPV05fREVMQVlfVVMsCisgICAgICAgIC5yZWxlYXNlX3Bvd2VyX2Rvd25fZGVsYXkgICAgICA9IFcyNVFfUkVMRUFTRV9QT1dFUl9ET1dOX0RFTEFZX1VTLAorfTsKKworI2lmIChGTEFTSF9BVVRPREVURUNUID09IDApCisgICAgICAgIGNvbnN0IHFzcGlfZmxhc2hfY29uZmlnX3QqIGNvbnN0IGZsYXNoX2NvbmZpZyA9ICZmbGFzaF93MjVxODBld19jb25maWc7CisjZW5kaWYKKworUVNQSV9TRUNUSU9OIHN0YXRpYyB2b2lkIGZsYXNoX3cyNXE4MGV3X3N5c19jbG9ja19jZmcoc3lzX2Nsa190IHN5c19jbGspCit7CisKK30KKworUVNQSV9TRUNUSU9OIHN0YXRpYyB1aW50OF90IGZsYXNoX3cyNXE4MGV3X2dldF9kdW1teV9ieXRlcyh2b2lkKQoreworICAgICAgICByZXR1cm4gMjsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1FTUElfVzMyUTgwRVdfSF8gKi8KKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvaW5jbHVkZS9xc3BpX3dpbmJvbmQuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9pbmNsdWRlL3FzcGlfd2luYm9uZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZTZlYjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvaW5jbHVkZS9xc3BpX3dpbmJvbmQuaApAQCAtMCwwICsxLDIzNiBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBTWVNURU0KKyAqIFx7CisgKiBcYWRkdG9ncm91cCBNRU1PUlkKKyAqCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBxc3BpX3dpbmJvbmQuaAorICoKKyAqIEBicmllZiBRU1BJIGZsYXNoIGRyaXZlciBmb3IgV2luYm9uZCBmbGFzaGVzIC0gY29tbW9uIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjaWZuZGVmIF9RU1BJX1dJTkJPTkRfSF8KKyNkZWZpbmUgX1FTUElfV0lOQk9ORF9IXworCisjZGVmaW5lIFdJTkJPTkRfSUQgICAgICAgICAgICAgICAgICAgICAgMHhFRgorCisjaWYgKEZMQVNIX0FVVE9ERVRFQ1QgPT0gMSkgfHwgKGRnX2NvbmZpZ0ZMQVNIX01BTlVGQUNUVVJFUl9JRCA9PSBXSU5CT05EX0lEKQorI2luY2x1ZGUgInFzcGlfY29tbW9uLmgiCisKKyNkZWZpbmUgVzI1UV9FUkFTRV9QUk9HUkFNX1NVU1BFTkQgICAgICAweDc1CisjZGVmaW5lIFcyNVFfRVJBU0VfUFJPR1JBTV9SRVNVTUUgICAgICAgMHg3QQorCisjZGVmaW5lIFcyNVFfV1JJVEVfU1RBVFVTX1JFR0lTVEVSMiAgICAgMHgzMQorI2RlZmluZSBXMjVRX1BBR0VfUFJPR1JBTSAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgVzI1UV9XUklURV9FTkFCTEVfTk9OX1ZPTCAgICAgICAweDUwCisjZGVmaW5lIFcyNVFfUkVBRF9TVEFUVVNfUkVHSVNURVIyICAgICAgMHgzNQorI2RlZmluZSBXMjVRX0JMT0NLX0VSQVNFXzY0SyAgICAgICAgICAgIDB4RDgKKyNkZWZpbmUgVzI1UV9GQVNUX1JFQURfUVBJICAgICAgICAgICAgICAweDBCCisjZGVmaW5lIFcyNVFfUkVBRF9ERVZJQ0VfSURfU0lOR0xFICAgICAgMHg5MCAgICAvLyBSZXF1aXJlcyBzaW5nbGUgbW9kZSBmb3IgdGhlIGNvbW1hbmQgZW50cnkhCisjZGVmaW5lIFcyNVFfUkVBRF9ERVZJQ0VfSURfRFVBTCAgICAgICAgMHg5MiAgICAvLyBSZXF1aXJlcyBkdWFsIG1vZGUgZm9yIHRoZSBjb21tYW5kIGVudHJ5IQorI2RlZmluZSBXMjVRX1JFQURfREVWSUNFX0lEX1FVQUQgICAgICAgIDB4OTQKKyNkZWZpbmUgVzI1UV9SRUFEX1VOSVFVRV9JRCAgICAgICAgICAgICAweDRCICAgIC8vIFJlcXVpcmVzIHNpbmdsZSBtb2RlIGZvciB0aGUgY29tbWFuZCBlbnRyeSEKKyNkZWZpbmUgVzI1UV9SRUFEX1NGRFBfUkVHICAgICAgICAgICAgICAweDVBICAgIC8vIFJlcXVpcmVzIHNpbmdsZSBtb2RlIGZvciB0aGUgY29tbWFuZCBlbnRyeSEKKyNkZWZpbmUgVzI1UV9FUkFTRV9TRUNVUklUWV9SRUdTICAgICAgICAweDQ0ICAgIC8vIFJlcXVpcmVzIHNpbmdsZSBtb2RlIGZvciB0aGUgY29tbWFuZCBlbnRyeSEKKyNkZWZpbmUgVzI1UV9QUk9HUl9TRUNVUklUWV9SRUdTICAgICAgICAweDQyICAgIC8vIFJlcXVpcmVzIHNpbmdsZSBtb2RlIGZvciB0aGUgY29tbWFuZCBlbnRyeSEKKyNkZWZpbmUgVzI1UV9SRUFEX1NFQ1VSSVRZX1JFR1MgICAgICAgICAweDQ4ICAgIC8vIFJlcXVpcmVzIHNpbmdsZSBtb2RlIGZvciB0aGUgY29tbWFuZCBlbnRyeSEKKyNkZWZpbmUgVzI1UV9FTlRFUl9RUElfTU9ERSAgICAgICAgICAgICAweDM4ICAgIC8vIFJlcXVpcmVzIHNpbmdsZSBtb2RlIGZvciB0aGUgY29tbWFuZCBlbnRyeSEKKyNkZWZpbmUgVzI1UV9FWElUX1FQSV9NT0RFICAgICAgICAgICAgICAweEZGICAgIC8vIFJlcXVpcmVzIHF1YWQgbW9kZSBmb3IgdGhlIGNvbW1hbmQgZW50cnkhCisKKy8qIFN1c3BlbmQgKi8KKyNkZWZpbmUgVzI1UV9TVEFUVVMyX1NVU19CSVQgICAgICAgICAgICA3CisjZGVmaW5lIFcyNVFfU1RBVFVTMl9TVVNfTUFTSyAgICAgICAgICAgKDEgPDwgVzI1UV9TVEFUVVMyX1NVU19CSVQpCisKKy8qIFFQSSBFbmFibGUgKi8KKyNkZWZpbmUgVzI1UV9TVEFUVVMyX1FFX0JJVCAgICAgICAgICAgICAxCisjZGVmaW5lIFcyNVFfU1RBVFVTMl9RRV9NQVNLICAgICAgICAgICAgKDEgPDwgVzI1UV9TVEFUVVMyX1FFX0JJVCkKKworLy8gRmxhc2ggcG93ZXIgdXAvZG93biB0aW1pbmdzCisjZGVmaW5lIFcyNVFfUE9XRVJfRE9XTl9ERUxBWV9VUyAgICAgICAgICAzCisjZGVmaW5lIFcyNVFfUkVMRUFTRV9QT1dFUl9ET1dOX0RFTEFZX1VTICAzCisjZGVmaW5lIFcyNVFfUE9XRVJfVVBfREVMQVlfVVMgICAgICAgICAgICAxMAorCisjaWYgKGRnX2NvbmZpZ0ZMQVNIX1BPV0VSX09GRiA9PSAxKQorLyoqCisgKiBcYnJpZWYgdUNvZGUgZm9yIGhhbmRsaW5nIHRoZSBRU1BJIEZMQVNIIGFjdGl2YXRpb24gZnJvbSBwb3dlciBvZmYuCisgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogU2hvdWxkIHdvcmsgd2l0aCBhbGwgV2luYm9uZCBmbGFzaGVzIC0tIHZlcmlmaWVkIHdpdGggVzI1UTgwRVcuCisgICAgICAgICAqCisgICAgICAgICAqIERlbGF5IDEwdXNlYworICAgICAgICAgKiAweDAxICAgLy8gQ01EX05CWVRFUyA9IDAsIENNRF9UWF9NRCA9IDAgKFNpbmdsZSksIENNRF9WQUxJRCA9IDEKKyAgICAgICAgICogMHhBMCAgIC8vIENNRF9XVF9DTlRfTFMgPSAxNjAgLS0+IDEwMDAwIC8gNjIuNSA9IDE2MCA9IDEwdXNlYworICAgICAgICAgKiAweDAwICAgLy8gQ01EX1dUX0NOVF9NUyA9IDAKKyAgICAgICAgICogRXhpdCBmcm9tIEZhc3QgUmVhZCBtb2RlCisgICAgICAgICAqIDB4MDkgICAvLyBDTURfTkJZVEVTID0gMSwgQ01EX1RYX01EID0gMCAoU2luZ2xlKSwgQ01EX1ZBTElEID0gMQorICAgICAgICAgKiAweDAwICAgLy8gQ01EX1dUX0NOVF9MUyA9IDAKKyAgICAgICAgICogMHgwMCAgIC8vIENNRF9XVF9DTlRfTVMgPSAwCisgICAgICAgICAqIDB4RkYgICAvLyBFbmFibGUgUmVzZXQKKyAgICAgICAgICogKHVwIHRvIDE2IHdvcmRzKQorICAgICAgICAgKi8KKyAgICAgICAgY29uc3QgdWludDMyX3QgdzI1cV91Y29kZV93YWtldXBbXSA9IHsKKyAgICAgICAgICAgICAgICAweDA5MDAwMDAxIHwgKCgodWludDE2X3QpKFcyNVFfUE9XRVJfVVBfREVMQVlfVVMqMTAwMC82Mi41KSAmIDB4RkZGRikgPDwgOCksCisgICAgICAgICAgICAgICAgMHgwMEZGMDAwMCwKKyAgICAgICAgfTsKKyNlbGlmIChkZ19jb25maWdGTEFTSF9QT1dFUl9ET1dOID09IDEpCisvKioKKyAqIFxicmllZiB1Q29kZSBmb3IgaGFuZGxpbmcgdGhlIFFTUEkgRkxBU0ggcmVsZWFzZSBmcm9tIHBvd2VyLWRvd24uCisgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogU2hvdWxkIHdvcmsgd2l0aCBhbGwgV2luYm9uZCBmbGFzaGVzIC0tIHZlcmlmaWVkIHdpdGggVzI1UTgwRVcuCisgICAgICAgICAqCisgICAgICAgICAqIDB4MDkgICAvLyBDTURfTkJZVEVTID0gMSwgQ01EX1RYX01EID0gMCAoU2luZ2xlKSwgQ01EX1ZBTElEID0gMQorICAgICAgICAgKiAweDMwICAgLy8gQ01EX1dUX0NOVF9MUyA9IDMwMDAgLyA2Mi41ID0gNDggLy8gM3VzZWMKKyAgICAgICAgICogMHgwMCAgIC8vIENNRF9XVF9DTlRfTVMgPSAwCisgICAgICAgICAqIDB4QUIgICAvLyBSZWxlYXNlIFBvd2VyIERvd24KKyAgICAgICAgICogKHVwIHRvIDE2IHdvcmRzKQorICAgICAgICAgKi8KKyAgICAgICAgY29uc3QgdWludDMyX3QgdzI1cV91Y29kZV93YWtldXBbXSA9IHsKKyAgICAgICAgICAgICAgICAweEFCMDAwMDA5IHwgKCgodWludDE2X3QpKFcyNVFfUkVMRUFTRV9QT1dFUl9ET1dOX0RFTEFZX1VTKjEwMDAvNjIuNSkgJiAweEZGRkYpIDw8IDgpLAorICAgICAgICB9OworI2Vsc2UKKy8qKgorICogXGJyaWVmIHVDb2RlIGZvciBoYW5kbGluZyB0aGUgUVNQSSBGTEFTSCBleGl0IGZyb20gdGhlICJDb250aW51b3VzIFJlYWQgTW9kZSIuCisgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogU2hvdWxkIHdvcmsgd2l0aCBhbGwgV2luYm9uZCBmbGFzaGVzIC0tIHZlcmlmaWVkIHdpdGggVzI1UTgwRVcuCisgICAgICAgICAqCisgICAgICAgICAqIDB4MjUgICAvLyBDTURfTkJZVEVTID0gNCwgQ01EX1RYX01EID0gMiAoUXVhZCksIENNRF9WQUxJRCA9IDEKKyAgICAgICAgICogMHgwMCAgIC8vIENNRF9XVF9DTlRfTFMgPSAwCisgICAgICAgICAqIDB4MDAgICAvLyBDTURfV1RfQ05UX01TID0gMAorICAgICAgICAgKiAweDU1ICAgLy8gQ2xvY2tzIDAtMSAoQTIzLTE2KQorICAgICAgICAgKiAweDU1ICAgLy8gQ2xvY2tzIDItMyAoQTE1LTgpCisgICAgICAgICAqIDB4NTUgICAvLyBDbG9ja3MgNC01IChBNy0wKQorICAgICAgICAgKiAweDU1ICAgLy8gQ2xvY2tzIDYtNyAoTTctMCkgOiBNNS00ICE9ICcxMCcgPT0+IERpc2FibGUgIkNvbnRpbnVvdXMgUmVhZCBNb2RlIgorICAgICAgICAgKiAodXAgdG8gMTYgd29yZHMpCisgICAgICAgICAqLworICAgICAgICBjb25zdCB1aW50MzJfdCB3MjVxX3Vjb2RlX3dha2V1cFtdID0geworICAgICAgICAgICAgICAgIDB4NTUwMDAwMjUsCisgICAgICAgICAgICAgICAgMHgwMDU1NTU1NSwKKyAgICAgICAgfTsKKyNlbmRpZgorCitzdGF0aWMgYm9vbCBmbGFzaF93MjVxX2lzX3N1c3BlbmRlZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGZsYXNoX3cyNXFfaW5pdGlhbGl6ZSh1aW50OF90IGRldmljZV90eXBlLCB1aW50OF90IGRldmljZV9kZW5zaXR5KTsKK3N0YXRpYyB2b2lkIGZsYXNoX3cyNXFfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSB2b2xhdGlsZSB3cml0ZXMgdG8gU3RhdHVzIFJlZ2lzdGVyIGJpdHMKKyAqIFxkZXRhaWxzIFdoZW4gdGhpcyBjb21tYW5kIGlzIGlzc3VlZCwgYW55IHdyaXRlcyB0byBhbnkgb2YgdGhlIFN0YXR1cyBSZWdpc3RlcnMgb2YgdGhlIEZsYXNoIGFyZQorICogICAgICAgIGRvbmUgYXMgdm9sYXRpbGUgd3JpdGVzLiBUaGlzIGNvbW1hbmQgaXMgdmFsaWQgb25seSB3aGVuIHRoZSBXcml0ZSBTdGF0dXMgUmVnaXN0ZXIgY29tbWFuZAorICogICAgICAgIGZvbGxvd3MuCisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBibG9ja3MgdW50aWwgdGhlIEZsYXNoIGhhcyBwcm9jZXNzZWQgdGhlIGNvbW1hbmQuCisgKi8KK1FTUElfU0VDVElPTiBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBzdGF0aWMgaW5saW5lIHZvaWQgZmxhc2hfdzI1cV93cmVfdm9sYXRpbGUodm9pZCkKK3sKKyAgICAgICAgdWludDhfdCBjbWRbXSA9IHsgVzI1UV9XUklURV9FTkFCTEVfTk9OX1ZPTCB9OworCisgICAgICAgIHFzcGlfd3JpdGUoY21kLCAxKTsKKworICAgICAgICAvKiBWZXJpZnkgKi8KKyAgICAgICAgd2hpbGUgKGZsYXNoX2lzX2J1c3koKSk7Cit9CisKK1FTUElfU0VDVElPTiBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgZmxhc2hfdzI1cV9yZWFkX3N0YXR1c19yZWdpc3Rlcl8yKHZvaWQpCit7CisgICAgICAgIF9fREJHX1FTUElfVk9MQVRJTEVfXyB1aW50OF90IHN0YXR1czsKKyAgICAgICAgdWludDhfdCBjbWRbXSA9IHsgVzI1UV9SRUFEX1NUQVRVU19SRUdJU1RFUjIgfTsKKworICAgICAgICBxc3BpX3RyYW5zYWN0KGNtZCwgMSwgJnN0YXR1cywgMSk7CisKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBcYnJpZWYgV3JpdGUgdGhlIFN0YXR1cyBSZWdpc3RlciAyIG9mIHRoZSBGbGFzaAorICoKKyAqIFxwYXJhbVtpbl0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4uCisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBibG9ja3MgdW50aWwgdGhlIEZsYXNoIGhhcyBwcm9jZXNzZWQgdGhlIGNvbW1hbmQuIE5vIHZlcmlmaWNhdGlvbiB0aGF0IHRoZQorICogICAgICAgIHZhbHVlIGhhcyBiZWVuIGFjdHVhbGx5IHdyaXR0ZW4gaXMgZG9uZSB0aG91Z2guIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gZGVjaWRlIHdoZXRoZXIKKyAqICAgICAgICBzdWNoIHZlcmlmaWNhdGlvbiBpcyBuZWVkZWQgb3Igbm90IGFuZCBleGVjdXRlIGl0IG9uIGl0cyBvd24uCisgKi8KK1FTUElfU0VDVElPTiBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBzdGF0aWMgaW5saW5lIHZvaWQgZmxhc2hfdzI1cV93cml0ZV9zdGF0dXNfcmVnaXN0ZXJfMih1aW50OF90IHZhbHVlKQoreworICAgICAgICB1aW50OF90IGNtZFtdID0geyBXMjVRX1dSSVRFX1NUQVRVU19SRUdJU1RFUjIsIHZhbHVlIH07CisKKyAgICAgICAgcXNwaV93cml0ZShjbWQsIDIpOworCisgICAgICAgIC8qIFdhaXQgZm9yIHRoZSBGbGFzaCB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisgICAgICAgIHdoaWxlIChmbGFzaF9pc19idXN5KCkpOworfQorCitRU1BJX1NFQ1RJT04gc3RhdGljIGlubGluZSB2b2lkIGZsYXNoX3cyNXFfZW5hYmxlX3F1YWRfbW9kZSh2b2lkKQoreworICAgICAgICB1aW50OF90IHN0YXR1czsKKworICAgICAgICBzdGF0dXMgPSBmbGFzaF93MjVxX3JlYWRfc3RhdHVzX3JlZ2lzdGVyXzIoKTsKKyAgICAgICAgaWYgKCEoc3RhdHVzICYgVzI1UV9TVEFUVVMyX1FFX01BU0spKSB7CisgICAgICAgICAgICAgICAgZmxhc2hfd3JpdGVfZW5hYmxlKCk7CisgICAgICAgICAgICAgICAgZmxhc2hfdzI1cV93cml0ZV9zdGF0dXNfcmVnaXN0ZXJfMihzdGF0dXMgfCBXMjVRX1NUQVRVUzJfUUVfTUFTSyk7CisgICAgICAgIH0KK30KKworUVNQSV9TRUNUSU9OIHN0YXRpYyBib29sIGZsYXNoX3cyNXFfaXNfc3VzcGVuZGVkKHZvaWQpCit7CisgICAgICAgIF9fREJHX1FTUElfVk9MQVRJTEVfXyB1aW50OF90IHN0YXR1czsKKworICAgICAgICBzdGF0dXMgPSBmbGFzaF93MjVxX3JlYWRfc3RhdHVzX3JlZ2lzdGVyXzIoKTsKKyAgICAgICAgcmV0dXJuIChzdGF0dXMgJiBXMjVRX1NUQVRVUzJfU1VTX01BU0spICE9IDA7Cit9CisKK1FTUElfU0VDVElPTiBzdGF0aWMgdm9pZCBmbGFzaF93MjVxX2luaXRpYWxpemUodWludDhfdCBkZXZpY2VfdHlwZSwgdWludDhfdCBkZXZpY2VfZGVuc2l0eSkKK3sKKyAgICAgICAgZmxhc2hfYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyAgICAgICAgZmxhc2hfdzI1cV9lbmFibGVfcXVhZF9tb2RlKCk7CisKKyAgICAgICAgZmxhc2hfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKK30KKworUVNQSV9TRUNUSU9OIHN0YXRpYyB2b2lkIGZsYXNoX3cyNXFfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUodm9pZCkKK3sKK30KKworI2VuZGlmCisKKyNlbmRpZiAvKiBfUVNQSV9XSU5CT05EX0hfICovCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvbWVtb3J5L3NyYy9xc3BpX2F1dG9tb2RlLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvc3JjL3FzcGlfYXV0b21vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmU3YWI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvbWVtb3J5L3NyYy9xc3BpX2F1dG9tb2RlLmMKQEAgLTAsMCArMSwxMjIwIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgcXNwaV9hdXRvbW9kZS5jCisgKgorICogQGJyaWVmIEFjY2VzcyBRU1BJIGZsYXNoIHdoZW4gcnVubmluZyBpbiBhdXRvIG1vZGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAic2RrX2RlZnMuaCIKKworI2luY2x1ZGUgImh3X2NwbS5oIgorCisjaW5jbHVkZSAiaHdfcXNwaS5oIgorI2luY2x1ZGUgInFzcGlfYXV0b21vZGUuaCIKKworLyoKKyAqIFFTUEkgY29udHJvbGxlciBhbGxvd3MgdG8gZXhlY3V0ZSBjb2RlIGRpcmVjdGx5IGZyb20gUVNQSSBmbGFzaC4KKyAqIFdoZW4gY29kZSBpcyBleGVjdXRpbmcgZnJvbSBmbGFzaCB0aGVyZSBpcyBubyBwb3NzaWJpbGl0eSB0byByZXByb2dyYW0gaXQuCisgKiBUbyBiZSBhYmxlIHRvIG1vZGlmeSBmbGFzaCBtZW1vcnkgd2hpbGUgaXQgaXMgdXNlZCBmb3IgY29kZSBleGVjdXRpb24gaXQgbXVzdCBtZSBhc3N1cmVkIHRoYXQKKyAqIGR1cmluZyB0aGUgdGltZSBuZWVkZWQgZm9yIGVyYXNlL3dyaXRlIG5vIGNvZGUgaXMgcnVubmluZyBmcm9tIGZsYXNoLgorICovCisKKy8qCisgKiBGbGFzaCBzcGVjaWZpYyBkZWZpbmVzCisgKi8KKworLyogU1VTIGJpdCBkZWxheSBhZnRlciBTVVNQRU5EIGNvbW1hbmQgKi8KKyNkZWZpbmUgRkxBU0hfU1VTX0RFTEFZICAgICAgICAgICAgICAgICAoMjApIC8vIGluIHVzZWMKKworLyogRmxhc2ggcGFnZSBzaXplICovCisjZGVmaW5lIEZMQVNIX01BWF9XUklURV9TSVpFICAgICAgICAgICAgZGdfY29uZmlnRkxBU0hfTUFYX1dSSVRFX1NJWkUKKworLyoKKyAqIFVzZSBRVUFEIG1vZGUgZm9yIHBhZ2Ugd3JpdGUuCisgKgorICogTm90ZTogSWYgdGhlIGZsYXNoIGRvZXMgbm90IHN1cHBvcnQgUVVBRCBtb2RlIG9yIGl0IGlzIG5vdCBjb25uZWN0ZWQgZm9yIFFVQUQgbW9kZSBzZXQgaXQgdG8gMAorICogKHNpbmdsZSBtb2RlKS4KKyAqLworI2lmbmRlZiBRVUFEX01PREUKKyNkZWZpbmUgUVVBRF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYKKworI2lmbmRlZiBFUkFTRV9JTl9BVVRPTU9ERQorI2RlZmluZSBFUkFTRV9JTl9BVVRPTU9ERSAgICAgICAgICAgICAgIDEKKyNlbmRpZgorCisjaWZuZGVmIEZMQVNIX0ZPUkNFXzI0QklUX0FERFJFU1NJTkcKKyNkZWZpbmUgRkxBU0hfRk9SQ0VfMjRCSVRfQUREUkVTU0lORyAgICAwICAgICAgIC8vIEZvcmNlIDI0IGJpdCBhZGRyZXNzaW5nIGZvciBkZXZpY2VzID4gMTI4TWJpdHMKKyNlbmRpZgorCisvKgorICogV0FSTklORzogVGhlIEF1dG9kZXRlY3QgbW9kZSB3aWxsIGdyZWF0bHkgaW5jcmVhc2UgYm90aCB0aGUgY29kZSBhbmQgdGhlIHVzZWQgUmV0UkFNIHNpemUhISEhCisgKiAgICAgICAgICBVc2Ugd2l0aCBleHRyZW1lIGNhdXRpb24hIQorICovCisjaWYgZGdfY29uZmlnRkxBU0hfQVVUT0RFVEVDVCA9PSAxCisjZGVmaW5lIEZMQVNIX0FVVE9ERVRFQ1QgICAgICAgICAgICAgICAgMSAgICAgICAvLyBFbmFibGUgRmxhc2ggYXV0by1kZXRlY3Rpb24KKyNlbHNlCisjaWYgIWRlZmluZWQoZGdfY29uZmlnRkxBU0hfTUFOVUZBQ1RVUkVSX0lEKQorI2Vycm9yIFBsZWFzZSBkZWZpbmUgZGdfY29uZmlnRkxBU0hfTUFOVUZBQ1RVUkVSX0lEICEhIQorI2VuZGlmCisjaWYgIWRlZmluZWQoZGdfY29uZmlnRkxBU0hfREVWSUNFX1RZUEUpCisjZXJyb3IgUGxlYXNlIGRlZmluZSBkZ19jb25maWdGTEFTSF9ERVZJQ0VfVFlQRSAhISEKKyNlbmRpZgorI2lmICFkZWZpbmVkKGRnX2NvbmZpZ0ZMQVNIX0RFTlNJVFkpCisjZXJyb3IgUGxlYXNlIGRlZmluZSBkZ19jb25maWdGTEFTSF9ERU5TSVRZICEhIQorI2VuZGlmCisjZGVmaW5lIEZMQVNIX0FVVE9ERVRFQ1QgICAgICAgICAgICAgICAgMAorI2VuZGlmCisKKyNpZiBGTEFTSF9BVVRPREVURUNUID09IDEKKyNpbmNsdWRlICJxc3BpX3cyNXE4MGV3LmgiCisjaW5jbHVkZSAicXNwaV9teDI1dTUxMjQ1LmgiCisjaW5jbHVkZSAicXNwaV9nZDI1bHE4MGIuaCIKKyNlbHNlCisjaWZuZGVmIGRnX2NvbmZpZ0ZMQVNIX0hFQURFUl9GSUxFCisjZXJyb3IgUGxlYXNlIGRlZmluZSBtYWNybyBkZ19jb25maWdGTEFTSF9IRUFERVJfRklMRSB0byB0aGUgaGVhZGVyIGZpbGUgbmFtZSB0aGF0IGNvbnRhaW5zIHRoZSByZXNwZWN0aXZlIGltcGxlbWVudGF0aW9uCisjZW5kaWYKKyNpbmNsdWRlIGRnX2NvbmZpZ0ZMQVNIX0hFQURFUl9GSUxFCisjZW5kaWYKKworI2lmIChGTEFTSF9BVVRPREVURUNUID09IDEpCisKK3N0YXRpYyBjb25zdCBxc3BpX2ZsYXNoX2NvbmZpZ190ICpmbGFzaF9jb25maWdfdGFibGVbXSA9Cit7CisgICAgJmZsYXNoX3cyNXE4MGV3X2NvbmZpZywgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBvbmUKKyAgICAmZmxhc2hfbXgyNXU1MTI0NV9jb25maWcsCisgICAgJmZsYXNoX2dkMjVscTgwYl9jb25maWcsCit9OworCitfX1JFVEFJTkVEIHN0YXRpYyBxc3BpX2ZsYXNoX2NvbmZpZ190IGZsYXNoX2F1dG9kZXRlY3RfY29uZmlnOworCitfX1JFVEFJTkVEIHFzcGlfZmxhc2hfY29uZmlnX3QgKmZsYXNoX2NvbmZpZzsKKworI2VuZGlmCisKKworCisvKgorICogRnVuY3Rpb24gZGVmaW5pdGlvbnMKKyAqLworCisvKioKKyAqIFxicmllZiBTZXQgYnVzIG1vZGUgdG8gc2luZ2xlIG9yIFFVQUQgbW9kZS4KKyAqCisgKiBccGFyYW1baW5dIG1vZGUgQ2FuIGJlIHNpbmdsZSAoSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUpIG9yIHF1YWQgKEhXX1FTUElfQlVTX01PREVfUVVBRCkgbW9kZS4KKyAqCisgKiBcbm90ZSBEVUFMIG1vZGUgcGFnZSBwcm9ncmFtIHNvIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHFzcGlfc2V0X2J1c19tb2RlKEhXX1FTUElfQlVTX01PREUgbW9kZSkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERSBtb2RlKQoreworICAgIGlmIChtb2RlID09IEhXX1FTUElfQlVTX01PREVfU0lOR0xFKQorICAgIHsKKyAgICAgICAgUVNQSUMtPlFTUElDX0NUUkxCVVNfUkVHID0gUkVHX01TSyhRU1BJQywgUVNQSUNfQ1RSTEJVU19SRUcsIFFTUElDX1NFVF9TSU5HTEUpOworICAgICAgICBRU1BJQy0+UVNQSUNfQ1RSTE1PREVfUkVHIHw9CisgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0NUUkxNT0RFX1JFRywgUVNQSUNfSU8yX09FTiwgMSkgfAorICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19DVFJMTU9ERV9SRUcsIFFTUElDX0lPMl9EQVQsIDEpIHwKKyAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQ1RSTE1PREVfUkVHLCBRU1BJQ19JTzNfT0VOLCAxKSB8CisgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0NUUkxNT0RFX1JFRywgUVNQSUNfSU8zX0RBVCwgMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWYgUVVBRF9NT0RFCisgICAgICAgIFFTUElDLT5RU1BJQ19DVFJMQlVTX1JFRyA9IFJFR19NU0soUVNQSUMsIFFTUElDX0NUUkxCVVNfUkVHLCBRU1BJQ19TRVRfUVVBRCk7CisgICAgICAgIFFTUElDLT5RU1BJQ19DVFJMTU9ERV9SRUcgJj0KKyAgICAgICAgICAgIH4oQklUUzMyKFFTUElDLCBRU1BJQ19DVFJMTU9ERV9SRUcsIFFTUElDX0lPMl9PRU4sIDEpIHwKKyAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19DVFJMTU9ERV9SRUcsIFFTUElDX0lPM19PRU4sIDEpKTsKKyNlbmRpZgorICAgIH0KK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBtb2RlIG9mIHRoZSBRU1BJIGNvbnRyb2xsZXIgKG1hbnVhbCBvciBhdXRvKQorICoKKyAqIFxwYXJhbVtpbl0gYXV0b21vZGUgVHJ1ZSBmb3IgYXV0byBhbmQgZmFsc2UgZm9yIG1hbnVhbCBtb2RlIHNldHRpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBxc3BpX3NldF9hdXRvbW9kZShib29sIGF1dG9tb2RlKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxc3BpX3NldF9hdXRvbW9kZShib29sIGF1dG9tb2RlKQoreworICAgIFJFR19TRVRGKFFTUElDLCBRU1BJQ19DVFJMTU9ERV9SRUcsIFFTUElDX0FVVE9fTUQsIGF1dG9tb2RlKTsKK30KKworLyoqCisgKiBcYnJpZWYgV3JpdGUgdG8gdGhlIEZsYXNoIHRoZSBjb250ZW50cyBvZiBhIGJ1ZmZlcgorICoKKyAqIFxwYXJhbVtpbl0gd2J1ZiBQb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlcgorICogXHBhcmFtW2luXSB3bGVuIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbgorICoKKyAqIFxub3RlIFRoZSBkYXRhIGFyZSB0cmFuc2ZlcnJlZCBhcyBieXRlcyAoOCBiaXRzIHdpZGUpLiBObyBvcHRpbWl6YXRpb24gaXMgZG9uZSBpbiB0cnlpbmcgdG8gdXNlCisgKiAgICAgICBmYXN0ZXIgYWNjZXNzIG1ldGhvZHMgKGkuZS4gdHJhbnNmZXIgd29yZHMgaW5zdGVhZCBvZiBieXRlcyB3aGVuZXZlciBpdCBpcyBwb3NzaWJsZSkuCisgKi8KK1FTUElfU0VDVElPTiBzdGF0aWMgdm9pZCBxc3BpX3dyaXRlKGNvbnN0IHVpbnQ4X3QgKndidWYsIHNpemVfdCB3bGVuKQoreworICAgIHNpemVfdCBpOworCisgICAgaHdfcXNwaV9jc19lbmFibGUoKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB3bGVuOyArK2kpCisgICAgeworICAgICAgICBod19xc3BpX3dyaXRlOCh3YnVmW2ldKTsKKyAgICB9CisKKyAgICBod19xc3BpX2NzX2Rpc2FibGUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgV3JpdGUgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBieXRlcyB0byB0aGUgRmxhc2ggYW5kIHRoZW4gcmVhZCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGJ5dGVzCisgKiAgICAgICBmcm9tIHRoZSBGbGFzaCBpbiBvbmUgdHJhbnNhY3Rpb24KKyAqCisgKiBccGFyYW1baW5dIHdidWYgUG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgdGhhdCBjb250YWlucyB0aGUgZGF0YSB0byBiZSB3cml0dGVuCisgKiBccGFyYW1baW5dIHdsZW4gVGhlIG51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuCisgKiBccGFyYW1baW5dIHJidWYgUG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgdGhhbiB0aGUgcmVhZCBkYXRhIGFyZSBzdG9yZWQKKyAqIFxwYXJhbVtpbl0gcmxlbiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlYWQKKyAqCisgKiBcbm90ZSBUaGUgZGF0YSBhcmUgdHJhbnNmZXJyZWQgYXMgYnl0ZXMgKDggYml0cyB3aWRlKS4gTm8gb3B0aW1pemF0aW9uIGlzIGRvbmUgaW4gdHJ5aW5nIHRvIHVzZQorICogICAgICAgZmFzdGVyIGFjY2VzcyBtZXRob2RzIChpLmUuIHRyYW5zZmVyIHdvcmRzIGluc3RlYWQgb2YgYnl0ZXMgd2hlbmV2ZXIgaXQgaXMgcG9zc2libGUpLgorICovCitRU1BJX1NFQ1RJT04gc3RhdGljIHZvaWQgcXNwaV90cmFuc2FjdChjb25zdCB1aW50OF90ICp3YnVmLCBzaXplX3Qgd2xlbiwgdWludDhfdCAqcmJ1Ziwgc2l6ZV90IHJsZW4pCit7CisgICAgc2l6ZV90IGk7CisKKyAgICBod19xc3BpX2NzX2VuYWJsZSgpOworCisgICAgZm9yIChpID0gMDsgaSA8IHdsZW47ICsraSkKKyAgICB7CisgICAgICAgIGh3X3FzcGlfd3JpdGU4KHdidWZbaV0pOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBybGVuOyArK2kpCisgICAgeworICAgICAgICByYnVmW2ldID0gaHdfcXNwaV9yZWFkOCgpOworICAgIH0KKworICAgIGh3X3FzcGlfY3NfZGlzYWJsZSgpOworfQorCitRU1BJX1NFQ1RJT04gc3RhdGljIGlubGluZSBib29sIGZsYXNoX2VyYXNlX3Byb2dyYW1faW5fcHJvZ3Jlc3Modm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitRU1BJX1NFQ1RJT04gc3RhdGljIGlubGluZSBib29sIGZsYXNoX2VyYXNlX3Byb2dyYW1faW5fcHJvZ3Jlc3Modm9pZCkKK3sKKyAgICBfX0RCR19RU1BJX1ZPTEFUSUxFX18gdWludDhfdCBzdGF0dXM7CisgICAgdWludDhfdCBjbWRbXSA9IHsgZmxhc2hfY29uZmlnLT5yZWFkX2VyYXNlX3Byb2dyZXNzX29wY29kZSB9OworCisgICAgcXNwaV90cmFuc2FjdChjbWQsIDEsICZzdGF0dXMsIDEpOworCisgICAgcmV0dXJuICgoc3RhdHVzICYgKDEgPDwgZmxhc2hfY29uZmlnLT5lcmFzZV9pbl9wcm9ncmVzc19iaXQpKSAhPSAwKSA9PSBmbGFzaF9jb25maWctPmVyYXNlX2luX3Byb2dyZXNzX2JpdF9oaWdoX2xldmVsOworfQorCitRU1BJX1NFQ1RJT04gc3RhdGljIGlubGluZSBib29sIGZsYXNoX2lzX2J1c3kodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitRU1BJX1NFQ1RJT04gc3RhdGljIGlubGluZSBib29sIGZsYXNoX2lzX2J1c3kodm9pZCkKK3sKKyAgICByZXR1cm4gKGZsYXNoX3JlYWRfc3RhdHVzX3JlZ2lzdGVyKCkgJiBGTEFTSF9TVEFUVVNfQlVTWV9NQVNLKSAhPSAwOworfQorCisvKioKKyAqIFxicmllZiBFeGl0IGZyb20gY29udGludW91cyBtb2RlLgorICovCitRU1BJX1NFQ1RJT04gc3RhdGljIGlubGluZSB2b2lkIGZsYXNoX3Jlc2V0X2NvbnRpbnVvdXNfbW9kZShIV19RU1BJX0JSRUFLX1NFUV9TSVpFIGJyZWFrX3NlcV9zaXplKSBfX2F0dHJpYnV0ZV9fKCgKKyAgICAgICAgICAgIGFsd2F5c19pbmxpbmUpKTsKKworUVNQSV9TRUNUSU9OIHN0YXRpYyBpbmxpbmUgdm9pZCBmbGFzaF9yZXNldF9jb250aW51b3VzX21vZGUoSFdfUVNQSV9CUkVBS19TRVFfU0laRSBicmVha19zZXFfc2l6ZSkKK3sKKyAgICBod19xc3BpX2NzX2VuYWJsZSgpOworICAgIGh3X3FzcGlfd3JpdGU4KENNRF9FWElUX0NPTlRJTlVPVVNfTU9ERSk7CisKKyAgICBpZiAoYnJlYWtfc2VxX3NpemUgPT0gSFdfUVNQSV9CUkVBS19TRVFfU0laRV8yQikKKyAgICB7CisgICAgICAgIGh3X3FzcGlfd3JpdGU4KENNRF9FWElUX0NPTlRJTlVPVVNfTU9ERSk7CisgICAgfQorCisgICAgaHdfcXNwaV9jc19kaXNhYmxlKCk7CisKKyAgICB3aGlsZSAoZmxhc2hfaXNfYnVzeSgpKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IERldmljZSBJRCB3aGVuIEZsYXNoIGlzIG5vdCBpbiBQb3dlciBEb3duIG1vZGUKKyAqCisgKiBccmV0dXJuIHVpbnQ4X3QgVGhlIERldmljZSBJRCBvZiB0aGUgRmxhc2gKKyAqCisgKiBcbm90ZSBUaGUgZnVuY3Rpb24gYmxvY2tzIHVudGlsIHRoZSBGbGFzaCBleGVjdXRlcyB0aGUgY29tbWFuZC4KKyAqLworUVNQSV9TRUNUSU9OIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIHN0YXRpYyB1aW50OF90IGZsYXNoX2dldF9pZCh2b2lkKQoreworICAgIHVpbnQ4X3QgaWQ7CisKKyAgICBod19xc3BpX2NzX2VuYWJsZSgpOworICAgIGh3X3FzcGlfd3JpdGUzMihDTURfUkVMRUFTRV9QT1dFUl9ET1dOKTsKKyAgICBpZCA9IGh3X3FzcGlfcmVhZDgoKTsKKyAgICBod19xc3BpX2NzX2Rpc2FibGUoKTsKKworICAgIHdoaWxlIChmbGFzaF9pc19idXN5KCkpOworCisgICAgcmV0dXJuIGlkOworfQorCisvKioKKyAqIFxicmllZiBTZXQgV0VMIChXcml0ZSBFbmFibGUgTGF0Y2gpIGJpdCBvZiB0aGUgU3RhdHVzIFJlZ2lzdGVyIG9mIHRoZSBGbGFzaAorICogXGRldGFpbHMgVGhlIFdFTCBiaXQgbXVzdCBiZSBzZXQgcHJpb3IgdG8gZXZlcnkgUGFnZSBQcm9ncmFtLCBRdWFkIFBhZ2UgUHJvZ3JhbSwgU2VjdG9yIEVyYXNlLAorICogICAgICAgQmxvY2sgRXJhc2UsIENoaXAgRXJhc2UsIFdyaXRlIFN0YXR1cyBSZWdpc3RlciBhbmQgRXJhc2UvUHJvZ3JhbSBTZWN1cml0eSBSZWdpc3RlcnMKKyAqICAgICAgIGluc3RydWN0aW9uLiBJbiB0aGUgY2FzZSBvZiBXcml0ZSBTdGF0dXMgUmVnaXN0ZXIgY29tbWFuZCwgYW55IHN0YXR1cyBiaXRzIHdpbGwgYmUgd3JpdHRlbgorICogICAgICAgYXMgbm9uLXZvbGF0aWxlIGJpdHMuCisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBibG9ja3MgdW50aWwgdGhlIEZsYXNoIGhhcyBwcm9jZXNzZWQgdGhlIGNvbW1hbmQgYW5kIGl0IHdpbGwgYmUgcmVwZWF0ZWQgaWYsCisgKiAgICAgICBmb3IgYW55IHJlYXNvbiwgdGhlIGNvbW1hbmQgd2FzIG5vdCBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQgYnkgdGhlIEZsYXNoLgorICovCitRU1BJX1NFQ1RJT04gc3RhdGljIHZvaWQgZmxhc2hfd3JpdGVfZW5hYmxlKHZvaWQpCit7CisgICAgX19EQkdfUVNQSV9WT0xBVElMRV9fIHVpbnQ4X3Qgc3RhdHVzOworICAgIHVpbnQ4X3QgY21kW10gPSB7IENNRF9XUklURV9FTkFCTEUgfTsKKworICAgIGRvCisgICAgeworICAgICAgICBxc3BpX3dyaXRlKGNtZCwgMSk7CisKKyAgICAgICAgLyogVmVyaWZ5ICovCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IGZsYXNoX3JlYWRfc3RhdHVzX3JlZ2lzdGVyKCk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHN0YXR1cyAmIEZMQVNIX1NUQVRVU19CVVNZX01BU0spOworICAgIH0KKyAgICB3aGlsZSAoIShzdGF0dXMgJiBGTEFTSF9TVEFUVVNfV0VMX01BU0spKTsKK30KKworLyoqCisgKiBcYnJpZWYgUmVhZCB0aGUgU3RhdHVzIFJlZ2lzdGVyIDEgb2YgdGhlIEZsYXNoCisgKgorICogXHJldHVybiB1aW50OF90IFRoZSB2YWx1ZSBvZiB0aGUgU3RhdHVzIFJlZ2lzdGVyIDEgb2YgdGhlIEZsYXNoLgorICovCitRU1BJX1NFQ1RJT04gc3RhdGljIHVpbnQ4X3QgZmxhc2hfcmVhZF9zdGF0dXNfcmVnaXN0ZXIodm9pZCkKK3sKKyAgICBfX0RCR19RU1BJX1ZPTEFUSUxFX18gdWludDhfdCBzdGF0dXM7CisgICAgdWludDhfdCBjbWRbXSA9IHsgQ01EX1JFQURfU1RBVFVTX1JFR0lTVEVSIH07CisKKyAgICBxc3BpX3RyYW5zYWN0KGNtZCwgMSwgJnN0YXR1cywgMSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIFxicmllZiBXcml0ZSB0aGUgU3RhdHVzIFJlZ2lzdGVyIDEgb2YgdGhlIEZsYXNoCisgKgorICogXHBhcmFtW2luXSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgd3JpdHRlbi4KKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGJsb2NrcyB1bnRpbCB0aGUgRmxhc2ggaGFzIHByb2Nlc3NlZCB0aGUgY29tbWFuZC4gTm8gdmVyaWZpY2F0aW9uIHRoYXQgdGhlCisgKiAgICAgICAgdmFsdWUgaGFzIGJlZW4gYWN0dWFsbHkgd3JpdHRlbiBpcyBkb25lIHRob3VnaC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBkZWNpZGUgd2hldGhlcgorICogICAgICAgIHN1Y2ggdmVyaWZpY2F0aW9uIGlzIG5lZWRlZCBvciBub3QgYW5kIGV4ZWN1dGUgaXQgb24gaXRzIG93bi4KKyAqLworUVNQSV9TRUNUSU9OIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIHN0YXRpYyB2b2lkIGZsYXNoX3dyaXRlX3N0YXR1c19yZWdpc3Rlcih1aW50OF90IHZhbHVlKQoreworICAgIHVpbnQ4X3QgY21kWzJdID0geyBDTURfV1JJVEVfU1RBVFVTX1JFR0lTVEVSLCB2YWx1ZSB9OworCisgICAgcXNwaV93cml0ZShjbWQsIDIpOworCisgICAgLyogV2FpdCBmb3IgdGhlIEZsYXNoIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKyAgICB3aGlsZSAoZmxhc2hfaXNfYnVzeSgpKTsKK30KKworLyoqCisgKiBcYnJpZWYgRmFzdCBjb3B5IG9mIGEgYnVmZmVyIHRvIGEgRklGTworICogXGRldGFpbHMgSW1wbGVtZW50YXRpb24gb2YgYSBmYXN0IGNvcHkgb2YgdGhlIGNvbnRlbnRzIG9mIGEgYnVmZmVyIHRvIGEgRklGTyBpbiBhc3NlbWJseS4gQWxsCisgKiAgICAgICAgYWRkcmVzc2VzIGFyZSB3b3JkIGFsaWduZWQuCisgKgorICogXHBhcmFtW2luXSBzdGFydCBQb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlcgorICogXHBhcmFtW2luXSBlbmQgUG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIKKyAqIFxwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgRklGTworICoKKyAqIFx3YXJuaW5nIE5vIHZhbGlkaXR5IGNoZWNrcyBhcmUgbWFkZSEgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gbWFrZSBzdXJlIHRoYXQKKyAqICAgICAgICBzYW5lIHZhbHVlcyBhcmUgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZmFzdF93cml0ZV90b19maWZvMzIodWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwgdWludDMyX3QgZGVzdCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZmFzdF93cml0ZV90b19maWZvMzIodWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwgdWludDMyX3QgZGVzdCkKK3sKKyAgICBfX2FzbSB2b2xhdGlsZSgiY29weTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBsZG1pYSAlW3N0YXJ0XSEsIHtyM30gICAgICAgICAgIFxuIgorICAgICAgICAgICAgICAgICAgICIgICAgICAgc3RyIHIzLCBbJVtkZXN0XV0gICAgICAgICAgICAgICBcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGNtcCAlW3N0YXJ0XSwgJVtlbmRdICAgICAgICAgICAgXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBibHQgY29weSAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3V0cHV0ICovCisgICAgICAgICAgICAgICAgICAgW3N0YXJ0XSAibCIoc3RhcnQpLCBbZW5kXSAiciIoZW5kKSwgW2Rlc3RdICJsIihkZXN0KSA6ICAgIC8qIGlucHV0cyAoJTAsICUxLCAlMikgKi8KKyAgICAgICAgICAgICAgICAgICAicjMiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXJzIHRoYXQgYXJlIGRlc3Ryb3llZCAqLworfQorCisvKioKKyAqIFxicmllZiBXcml0ZSBkYXRhICh1cCB0byAxIHBhZ2UpIHRvIEZsYXNoCisgKgorICogXHBhcmFtW2luXSBhZGRyIFRoZSBhZGRyZXNzIG9mIHRoZSBGbGFzaCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHdyaXR0ZW4uIEl0IG1heSBiZSBhbnl3aGVyZSBpbiBhCisgKiAgICAgICAgcGFnZS4KKyAqIFxwYXJhbVtpbl0gYnVmIFBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAqIFxwYXJhbVtpbl0gc2l6ZSBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4uCisgKgorICogXHJldHVybiBzaXplX3QgVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorICoKKyAqIFx3YXJuaW5nIFRoZSBib3VuZGFyeSBvZiB0aGUgcGFnZSB3aGVyZSBhZGRyIGJlbG9uZ3MgdG8sIHdpbGwgbm90IGJlIGNyb3NzZWQhIFRoZSBjYWxsZXIgc2hvdWxkCisgKiAgICAgICAgaXNzdWUgYW5vdGhlciBmbGFzaF93cml0ZV9wYWdlKCkgY2FsbCBpbiBvcmRlciB0byB3cml0ZSB0aGUgcmVtYWluaW5nIGRhdGEgdG8gdGhlIG5leHQKKyAqICAgICAgICBwYWdlLgorICovCitRU1BJX1NFQ1RJT04gc3RhdGljIHNpemVfdCBmbGFzaF93cml0ZV9wYWdlKHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3Qgc2l6ZSkKK3sKKyAgICBzaXplX3QgaSA9IDA7CisgICAgc2l6ZV90IG9kZCA9ICgodWludDMyX3QpIGJ1ZikgJiAzOworICAgIHNpemVfdCBzaXplX2FsaWduZWQzMjsKKyAgICBzaXplX3QgdG1wOworCisgICAgREJHX1NFVF9ISUdIKEZMQVNIX0RFQlVHLCBGTEFTSERCR19QQUdFX1BST0cpOworCisgICAgZmxhc2hfd3JpdGVfZW5hYmxlKCk7CisKKyAgICAvKiBSZWR1Y2UgbWF4IHdyaXRlIHNpemUsIHRoYXQgY2FuIHJlZHVjZSBpbnRlcnJ1cHQgbGF0ZW5jeSB0aW1lICovCisgICAgaWYgKHNpemUgPiBGTEFTSF9NQVhfV1JJVEVfU0laRSkKKyAgICB7CisgICAgICAgIHNpemUgPSBGTEFTSF9NQVhfV1JJVEVfU0laRTsKKyAgICB9CisKKyAgICAvKiBNYWtlIHN1cmUgd3JpdGUgd2lsbCBub3QgY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworICAgIHRtcCA9IDI1NiAtIChhZGRyICYgMHhGRik7CisKKyAgICBpZiAoc2l6ZSA+IHRtcCkKKyAgICB7CisgICAgICAgIHNpemUgPSB0bXA7CisgICAgfQorCisgICAgaHdfcXNwaV9jc19lbmFibGUoKTsKKworICAgIGlmIChmbGFzaF9jb25maWctPmFkZHJlc3Nfc2l6ZSA9PSBIV19RU1BJX0FERFJfU0laRV8zMikKKyAgICB7CisgICAgICAgIGh3X3FzcGlfd3JpdGU4KGZsYXNoX2NvbmZpZy0+cGFnZV9wcm9ncmFtX29wY29kZSk7CisjaWYgUVVBRF9NT0RFCisKKyAgICAgICAgaWYgKGZsYXNoX2NvbmZpZy0+cXVhZF9wYWdlX3Byb2dyYW1fYWRkcmVzcyA9PSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICBxc3BpX3NldF9idXNfbW9kZShIV19RU1BJX0JVU19NT0RFX1FVQUQpOworICAgICAgICB9CisKKyNlbmRpZgorICAgICAgICBod19xc3BpX3dyaXRlMzIoKGFkZHIgPj4gMjQpIHwgKChhZGRyID4+IDgpICYgMHhGRjAwKSB8ICgoYWRkciA8PCA4KSAmIDB4RkYwMDAwKSB8IChhZGRyIDw8IDI0KSk7CisjaWYgUVVBRF9NT0RFCisKKyAgICAgICAgaWYgKGZsYXNoX2NvbmZpZy0+cXVhZF9wYWdlX3Byb2dyYW1fYWRkcmVzcyA9PSBmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERV9RVUFEKTsKKyAgICAgICAgfQorCisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZsYXNoX2NvbmZpZy0+cXVhZF9wYWdlX3Byb2dyYW1fYWRkcmVzcyA9PSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICBod19xc3BpX3dyaXRlOChmbGFzaF9jb25maWctPnBhZ2VfcHJvZ3JhbV9vcGNvZGUpOworI2lmIFFVQURfTU9ERQorICAgICAgICAgICAgcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERV9RVUFEKTsKKyNlbmRpZgorICAgICAgICAgICAgaHdfcXNwaV93cml0ZTE2KCgoYWRkciA+PiAxNikgJiAweEZGKSB8IChhZGRyICYgMHhGRjAwKSk7CisgICAgICAgICAgICBod19xc3BpX3dyaXRlOChhZGRyICYgMHhGRik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBod19xc3BpX3dyaXRlMzIoQ01EX1FVQURfUEFHRV9QUk9HUkFNIHwgKChhZGRyID4+IDgpICYgMHhGRjAwKSB8ICgoYWRkciA8PCA4KSAmIDB4RkYwMDAwKSB8IChhZGRyIDw8IDI0KSk7CisjaWYgUVVBRF9NT0RFCisgICAgICAgICAgICBxc3BpX3NldF9idXNfbW9kZShIV19RU1BJX0JVU19NT0RFX1FVQUQpOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob2RkKQorICAgIHsKKyAgICAgICAgb2RkID0gNCAtIG9kZDsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2RkICYmIGkgPCBzaXplOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X3FzcGlfd3JpdGU4KGJ1ZltpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzaXplX2FsaWduZWQzMiA9ICgoc2l6ZSAtIGkpICYgfjB4Myk7CisKKyAgICBpZiAoc2l6ZV9hbGlnbmVkMzIpCisgICAgeworICAgICAgICBmYXN0X3dyaXRlX3RvX2ZpZm8zMigodWludDMyX3QpKGJ1ZiArIGkpLCAodWludDMyX3QpKGJ1ZiArIGkgKyBzaXplX2FsaWduZWQzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkgJiAoUVNQSUMtPlFTUElDX1dSSVRFREFUQV9SRUcpKTsKKyAgICAgICAgaSArPSBzaXplX2FsaWduZWQzMjsKKyAgICB9CisKKyAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykKKyAgICB7CisgICAgICAgIGh3X3FzcGlfd3JpdGU4KGJ1ZltpXSk7CisgICAgfQorCisgICAgaHdfcXNwaV9jc19kaXNhYmxlKCk7CisKKyAgICBEQkdfU0VUX0xPVyhGTEFTSF9ERUJVRywgRkxBU0hEQkdfUEFHRV9QUk9HKTsKKworI2lmIFFVQURfTU9ERQorICAgIHFzcGlfc2V0X2J1c19tb2RlKEhXX1FTUElfQlVTX01PREVfU0lOR0xFKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGk7Cit9CisKKy8qKgorICogXGJyaWVmIEVyYXNlIGEgc2VjdG9yIG9mIHRoZSBGbGFzaAorICoKKyAqIFxwYXJhbVtpbl0gYWRkciBUaGUgYWRkcmVzcyBvZiB0aGUgc2VjdG9yIHRvIGJlIGVyYXNlZC4KKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGJsb2NrcyB1bnRpbCB0aGUgRmxhc2ggaGFzIHByb2Nlc3NlZCB0aGUgY29tbWFuZC4KKyAqLworUVNQSV9TRUNUSU9OIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIHN0YXRpYyB2b2lkIGZsYXNoX2VyYXNlX3NlY3Rvcih1aW50MzJfdCBhZGRyKQoreworICAgIGZsYXNoX3dyaXRlX2VuYWJsZSgpOworCisgICAgaWYgKGZsYXNoX2NvbmZpZy0+YWRkcmVzc19zaXplID09IEhXX1FTUElfQUREUl9TSVpFXzMyKQorICAgIHsKKyAgICAgICAgdWludDhfdCBjbWRbNV0gPSB7IGZsYXNoX2NvbmZpZy0+ZXJhc2Vfb3Bjb2RlLCBhZGRyID4+IDI0LCBhZGRyID4+IDE2LCBhZGRyID4+ICA4LCBhZGRyIH07CisgICAgICAgIHFzcGlfd3JpdGUoY21kLCA1KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWludDhfdCBjbWRbNF0gPSB7IGZsYXNoX2NvbmZpZy0+ZXJhc2Vfb3Bjb2RlLCBhZGRyID4+IDE2LCBhZGRyID4+ICA4LCBhZGRyIH07CisgICAgICAgIHFzcGlfd3JpdGUoY21kLCA0KTsKKyAgICB9CisKKworICAgIC8qIFdhaXQgZm9yIHRoZSBGbGFzaCB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisgICAgd2hpbGUgKGZsYXNoX2VyYXNlX3Byb2dyYW1faW5fcHJvZ3Jlc3MoKSk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHRoZSBGbGFzaCBjYW4gYWNjZXB0IGNvbW1hbmRzCisgKgorICogXHJldHVybiBib29sIFRydWUgaWYgdGhlIEZsYXNoIGlzIG5vdCBidXN5IGVsc2UgZmFsc2UuCisgKgorICovCitRU1BJX1NFQ1RJT05fTk9fSU5MSU5FIHN0YXRpYyBib29sIHFzcGlfd3JpdGFibGUodm9pZCkKK3sKKyAgICBib29sIHdyaXRhYmxlOworCisgICAgLyoKKyAgICAgKiBGcm9tIG5vdyBvbiBRU1BJIG1heSBub3QgYmUgYXZhaWxhYmxlLCB0dXJuIG9mZiBpbnRlcnJ1cHRzLgorICAgICAqLworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworCisgICAgLyoKKyAgICAgKiBUdXJuIG9uIGNvbW1hbmQgZW50cnkgbW9kZS4KKyAgICAgKi8KKyAgICBmbGFzaF9hY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgZmxhc2ggaXMgcmVhZHkuCisgICAgICovCisgICAgd3JpdGFibGUgPSAhKGZsYXNoX2lzX2J1c3koKSk7CisKKyAgICAvKgorICAgICAqIFJlc3RvcmUgYXV0byBtb2RlLgorICAgICAqLworICAgIGZsYXNoX2RlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyAgICAvKgorICAgICAqIExldCBvdGhlciBjb2RlIHRvIGJlIGV4ZWN1dGVkIGluY2x1ZGluZyBRU1BJIG9uZS4KKyAgICAgKi8KKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKworICAgIHJldHVybiB3cml0YWJsZTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBzdGF0dXMgb2YgYW4gRXJhc2Ugd2hlbiBpdCBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFFTUEkgY29udHJvbGxlcgorICoKKyAqIFxyZXR1cm4gdWludDhfdCBUaGUgc3RhdHVzIG9mIHRoZSBFcmFzZQorICogICAgICAgIDA6IE5vIEVyYXNlCisgKiAgICAgICAgMTogUGVuZGluZyBlcmFzZSByZXF1ZXN0CisgKiAgICAgICAgMjogRXJhc2UgcHJvY2VkdXJlIGlzIHJ1bm5pbmcKKyAqICAgICAgICAzOiBTdXNwZW5kZWQgRXJhc2UgcHJvY2VkdXJlCisgKiAgICAgICAgNDogRmluaXNoaW5nIHRoZSBFcmFzZSBwcm9jZWR1cmUKKyAqLworUVNQSV9TRUNUSU9OIHN0YXRpYyB1aW50OF90IHFzcGlfZ2V0X2VyYXNlX3N0YXR1cyh2b2lkKQoreworICAgIFFTUElDLT5RU1BJQ19DSENLRVJBU0VfUkVHID0gMDsKKworICAgIHJldHVybiBIV19RU1BJQ19SRUdfR0VURihFUkFTRUNUUkwsIEVSU19TVEFURSk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgYWRkcmVzcyBzaXplIHVzZWQgYnkgdGhlIFFTUEkgY29udHJvbGxlcgorICoKKyAqIFxyZXR1cm4gVGhlIGFkZHJlc3Mgc2l6ZSB1c2VkIChIV19RU1BJX0FERFJfU0laRV8yNCBvciBIV19RU1BJX0FERFJfU0laRV8zMikuCisgKi8KK3N0YXRpYyBpbmxpbmUgSFdfUVNQSV9BRERSX1NJWkUgcXNwaV9nZXRfYWRkcmVzc19zaXplKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSBIV19RU1BJX0FERFJfU0laRSBxc3BpX2dldF9hZGRyZXNzX3NpemUodm9pZCkKK3sKKyAgICByZXR1cm4gKEhXX1FTUElfQUREUl9TSVpFKUhXX1FTUElDX1JFR19HRVRGKENUUkxNT0RFLCBVU0VfMzJCQSk7Cit9CisKK19fUkVUQUlORURfQ09ERSB2b2lkIGZsYXNoX2FjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSh2b2lkKQoreworICAgIC8qCisgICAgICogVHVybiBvZmYgYXV0byBtb2RlIHRvIGFsbG93IHdyaXRlLgorICAgICAqLworICAgIHFzcGlfc2V0X2F1dG9tb2RlKGZhbHNlKTsKKworICAgIC8qCisgICAgICogU3dpdGNoIHRvIHNpbmdsZSBtb2RlIGZvciBjb21tYW5kIGVudHJ5LgorICAgICAqLworICAgIHFzcGlfc2V0X2J1c19tb2RlKEhXX1FTUElfQlVTX01PREVfU0lOR0xFKTsKKworICAgIC8qCisgICAgICogRXhpdCBjb250aW51b3VzIG1vZGUgKFFQSSBtb2RlKSwgYWZ0ZXIgdGhpcyB0aGUgZmxhc2ggd2lsbCBpbnRlcnByZXQgY29tbWFuZHMgYWdhaW4uCisgICAgICovCisgICAgaWYgKGZsYXNoX2NvbmZpZy0+c2VuZF9vbmNlICE9IDApCisgICAgeworICAgICAgICBmbGFzaF9yZXNldF9jb250aW51b3VzX21vZGUoZmxhc2hfY29uZmlnLT5icmVha19zZXFfc2l6ZSk7CisgICAgfQorfQorCisKK19fUkVUQUlORURfQ09ERSB2b2lkIGZsYXNoX2RlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKHZvaWQpCit7CisgICAgZmxhc2hfY29uZmlnLT5kZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSgpOworCisjaWYgUVVBRF9NT0RFCisgICAgcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERV9RVUFEKTsKKyNlbmRpZgorICAgIHFzcGlfc2V0X2F1dG9tb2RlKHRydWUpOworfQorCisjaWYgKGRnX2NvbmZpZ0RJU0FCTEVfQkFDS0dST1VORF9GTEFTSF9PUFMgPT0gMCkKK19fUkVUQUlORURfQ09ERSB2b2lkIGZsYXNoX2VyYXNlX3NlY3Rvcl9tYW51YWxfbW9kZSh1aW50MzJfdCBhZGRyKQoreworICAgIC8qCisgICAgICogVHVybiBvbiBjb21tYW5kIGVudHJ5IG1vZGUuCisgICAgICovCisgICAgZmxhc2hfYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyAgICAvKgorICAgICAqIElzc3VlIHRoZSBlcmFzZSBzZWN0b3IgY29tbWFuZC4KKyAgICAgKi8KKyAgICBmbGFzaF93cml0ZV9lbmFibGUoKTsKKworICAgIGlmIChmbGFzaF9jb25maWctPmFkZHJlc3Nfc2l6ZSA9PSBIV19RU1BJX0FERFJfU0laRV8zMikKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgY21kWzVdID0geyBmbGFzaF9jb25maWctPmVyYXNlX29wY29kZSwgYWRkciA+PiAyNCwgYWRkciA+PiAxNiwgYWRkciA+PiAgOCwgYWRkciB9OworICAgICAgICBxc3BpX3dyaXRlKGNtZCwgNSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgY21kWzRdID0geyBmbGFzaF9jb25maWctPmVyYXNlX29wY29kZSwgYWRkciA+PiAxNiwgYWRkciA+PiAgOCwgYWRkciB9OworICAgICAgICBxc3BpX3dyaXRlKGNtZCwgNCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGbGFzaCBzdGF5cyBpbiBtYW51YWwgbW9kZS4KKyAgICAgKi8KK30KKworX19SRVRBSU5FRF9DT0RFIHNpemVfdCBmbGFzaF9wcm9ncmFtX3BhZ2VfbWFudWFsX21vZGUodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqYnVmLCB1aW50MTZfdCBzaXplKQoreworICAgIHNpemVfdCB3cml0dGVuID0gZmxhc2hfd3JpdGVfcGFnZShhZGRyLCBidWYsIHNpemUpOworCisgICAgLyoKKyAgICAgKiBGbGFzaCBzdGF5cyBpbiBtYW51YWwgbW9kZS4KKyAgICAgKi8KKworICAgIHJldHVybiB3cml0dGVuOworfQorCitfX1JFVEFJTkVEX0NPREUgYm9vbCBxc3BpX2NoZWNrX3Byb2dyYW1fZXJhc2VfaW5fcHJvZ3Jlc3Modm9pZCkKK3sKKyAgICByZXR1cm4gZmxhc2hfaXNfYnVzeSgpOworfQorCitfX1JFVEFJTkVEX0NPREUgYm9vbCBxc3BpX2NoZWNrX2FuZF9zdXNwZW5kKHZvaWQpCit7CisgICAgdWludDhfdCBjbWRbXSA9IHsgZmxhc2hfY29uZmlnLT5lcmFzZV9zdXNwZW5kX29wY29kZSB9OworICAgIGJvb2wgYW0gPSBod19xc3BpX2dldF9hdXRvbW9kZSgpOworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKworICAgIGlmIChhbSkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFR1cm4gb24gY29tbWFuZCBlbnRyeSBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgZmxhc2hfYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTdXNwZW5kIGFjdGlvbi4KKyAgICAgKi8KKyAgICBEQkdfU0VUX0hJR0goRkxBU0hfREVCVUcsIEZMQVNIREJHX1NVU1BFTkRfQUNUSU9OKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgYW4gb3BlcmF0aW9uIGlzIG9uZ29pbmcuCisgICAgICovCisgICAgd2hpbGUgKGZsYXNoX2VyYXNlX3Byb2dyYW1faW5fcHJvZ3Jlc3MoKSkKKyAgICB7CisgICAgICAgIHFzcGlfd3JpdGUoY21kLCAxKTsKKyAgICB9CisKKyAgICBod19jcG1fZGVsYXlfdXNlYyhGTEFTSF9TVVNfREVMQVkpOyAgLy8gV2FpdCBmb3IgU1VTIGJpdCB0byBiZSB1cGRhdGVkCisKKyAgICBEQkdfU0VUX0xPVyhGTEFTSF9ERUJVRywgRkxBU0hEQkdfU1VTUEVORF9BQ1RJT04pOworCisgICAgaWYgKGZsYXNoX2NvbmZpZy0+aXNfc3VzcGVuZGVkKCkgPT0gZmFsc2UpCisgICAgeworICAgICAgICByZXQgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlc3RvcmUgYXV0byBtb2RlLgorICAgICAqLworICAgIGZsYXNoX2RlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitfX1JFVEFJTkVEX0NPREUgdm9pZCBxc3BpX3Jlc3VtZSh2b2lkKQoreworICAgIHVpbnQ4X3QgY21kW10gPSB7IGZsYXNoX2NvbmZpZy0+ZXJhc2VfcmVzdW1lX29wY29kZSB9OworCisgICAgZG8KKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFR1cm4gb24gY29tbWFuZCBlbnRyeSBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgZmxhc2hfYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgaWYgc3VzcGVuZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGZsYXNoX2NvbmZpZy0+aXNfc3VzcGVuZGVkKCkgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogV2FpdCBmb3IgZmxhc2ggdG8gYmVjb21lIHJlYWR5IGFnYWluLgorICAgICAgICAgKi8KKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFJlc3VtZSBhY3Rpb24uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHFzcGlfd3JpdGUoY21kLCAxKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIENoZWNrIGlmIFNVUyBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgICAqLworICAgICAgICB9CisgICAgICAgIHdoaWxlIChmbGFzaF9jb25maWctPmlzX3N1c3BlbmRlZCgpKTsKKyAgICB9CisgICAgd2hpbGUgKDApOworCisgICAgLyoKKyAgICAgKiBGbGFzaCBzdGF5cyBpbiBtYW51YWwgbW9kZS4KKyAgICAgKi8KK30KKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBFcmFzZSBzZWN0b3IgKHZpYSBDUE0gYmFja2dyb3VuZCBwcm9jZXNzaW5nIG9yIHVzaW5nIHRoZSBRU1BJIGNvbnRyb2xsZXIpCisgKgorICogXGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIGV4ZWN1dGUgYSBGbGFzaCBzZWN0b3IgZXJhc2Ugb3BlcmF0aW9uLiBUaGUgb3BlcmF0aW9uIHdpbGwgZWl0aGVyIGJlCisgKiAgICAgICAgY2FycmllZCBvdXQgaW1tZWRpYXRlbHkgKGRnX2NvbmZpZ0RJU0FCTEVfQkFDS0dST1VORF9GTEFTSF9PUFMgaXMgc2V0IHRvIDEpIG9yIGl0IHdpbGwgYmUKKyAqICAgICAgICBkZWZlcnJlZCB0byBiZSBleGVjdXRlZCBieSB0aGUgQ1BNIHdoZW4gdGhlIHN5c3RlbSBiZWNvbWVzIGlkbGUgKHdoZW4KKyAqICAgICAgICBkZ19jb25maWdESVNBQkxFX0JBQ0tHUk9VTkRfRkxBU0hfT1BTIGlzIHNldCB0byAwLCBkZWZhdWx0IHZhbHVlKS4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUKKyAqICAgICAgICBjYWxsZXIgd2lsbCBibG9jayB1bnRpbCB0aGUgQ1BNIGNvbXBsZXRlcyB0aGUgcmVnaXN0ZXJlZCBlcmFzZSBvcGVyYXRpb24uCisgKgorICogXHBhcmFtW2luXSBhZGRyIFRoZSBhZGRyZXNzIG9mIHRoZSBzZWN0b3IgdG8gYmUgZXJhc2VkLgorICovCitRU1BJX1NFQ1RJT05fTk9fSU5MSU5FIHN0YXRpYyB2b2lkIHFzcGlfZXJhc2Vfc2VjdG9yKHVpbnQzMl90IGFkZHIpCit7CisgICAgLyogV2FpdCBmb3IgcHJldmlvdXMgZXJhc2UgdG8gZW5kICovCisgICAgd2hpbGUgKHFzcGlfZ2V0X2VyYXNlX3N0YXR1cygpICE9IDApCisgICAgeworICAgIH0KKworICAgIGlmIChxc3BpX2dldF9hZGRyZXNzX3NpemUoKSA9PSBIV19RU1BJX0FERFJfU0laRV8zMikKKyAgICB7CisgICAgICAgIGFkZHIgPj49IDEyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhZGRyID4+PSA0OworICAgIH0KKworICAgIC8qIFNldHVwIGVyYXNlIGJsb2NrIHBhZ2UgKi8KKyAgICBIV19RU1BJQ19SRUdfU0VURihFUkFTRUNUUkwsIEVSU19BRERSLCBhZGRyKTsKKworICAgIC8qIEZpcmUgZXJhc2UgKi8KKyAgICBIV19RU1BJQ19SRUdfU0VURihFUkFTRUNUUkwsIEVSQVNFX0VOLCAxKTsKK30KKworLyoqCisgKiBcYnJpZWYgV3JpdGUgZGF0YSB0byBhIHBhZ2UgaW4gdGhlIEZsYXNoICh2aWEgQ1BNIGJhY2tncm91bmQgcHJvY2Vzc2luZyBvciB1c2luZyB0aGUgUVNQSQorICogICAgICAgIGNvbnRyb2xsZXIpCisgKgorICogXGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIGV4ZWN1dGUgYSBGbGFzaCBwcm9ncmFtIHBhZ2Ugb3BlcmF0aW9uLiBUaGUgb3BlcmF0aW9uIHdpbGwgZWl0aGVyIGJlCisgKiAgICAgICAgY2FycmllZCBvdXQgaW1tZWRpYXRlbHkgKGRnX2NvbmZpZ0RJU0FCTEVfQkFDS0dST1VORF9GTEFTSF9PUFMgaXMgc2V0IHRvIDEpIG9yIGl0IHdpbGwgYmUKKyAqICAgICAgICBkZWZlcnJlZCB0byBiZSBleGVjdXRlZCBieSB0aGUgQ1BNIHdoZW4gdGhlIHN5c3RlbSBiZWNvbWVzIGlkbGUgKHdoZW4KKyAqICAgICAgICBkZ19jb25maWdESVNBQkxFX0JBQ0tHUk9VTkRfRkxBU0hfT1BTIGlzIHNldCB0byAwLCBkZWZhdWx0IHZhbHVlKS4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUKKyAqICAgICAgICBjYWxsZXIgd2lsbCBibG9jayB1bnRpbCB0aGUgQ1BNIGNvbXBsZXRlcyB0aGUgcmVnaXN0ZXJlZCBwYWdlIHByb2dyYW0gb3BlcmF0aW9uLgorICoKKyAqIFxwYXJhbVtpbl0gYWRkciBUaGUgYWRkcmVzcyBvZiB0aGUgRmxhc2ggd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSB3cml0dGVuLiBJdCBtYXkgYmUgYW55d2hlcmUgaW4gYQorICogICAgICAgIHBhZ2UuCisgKiBccGFyYW1baW5dIGJ1ZiBQb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4uCisgKiBccGFyYW1baW5dIHNpemUgVGhlIG51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuLgorICoKKyAqIFxyZXR1cm4gc2l6ZV90IFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KKyAqCisgKiBcd2FybmluZyBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgdGhhdCBidWYgZG9lcyBub3QgcG9pbnQgdG8gUVNQSSBtYXBwZWQgbWVtb3J5LgorICovCitRU1BJX1NFQ1RJT05fTk9fSU5MSU5FIHN0YXRpYyBzaXplX3Qgd3JpdGVfcGFnZSh1aW50MzJfdCBhZGRyLCBjb25zdCB1aW50OF90ICpidWYsIHVpbnQxNl90IHNpemUpCit7CisgICAgc2l6ZV90IHdyaXR0ZW47CisKKyAgICAvKgorICAgICAqIEZyb20gbm93IG9uIFFTUEkgbWF5IG5vdCBiZSBhdmFpbGFibGUsIHR1cm4gb2YgaW50ZXJydXB0cy4KKyAgICAgKi8KKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKworICAgIC8qCisgICAgICogVHVybiBvbiBjb21tYW5kIGVudHJ5IG1vZGUuCisgICAgICovCisgICAgZmxhc2hfYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyAgICAvKgorICAgICAqIFdyaXRlIGRhdGEgaW50byB0aGUgcGFnZSBvZiB0aGUgRmxhc2guCisgICAgICovCisgICAgd3JpdHRlbiA9IGZsYXNoX3dyaXRlX3BhZ2UoYWRkciwgYnVmLCBzaXplKTsKKworICAgIC8qIFdhaXQgZm9yIHRoZSBGbGFzaCB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisgICAgd2hpbGUgKGZsYXNoX2VyYXNlX3Byb2dyYW1faW5fcHJvZ3Jlc3MoKSk7CisKKyAgICAvKgorICAgICAqIFJlc3RvcmUgYXV0byBtb2RlLgorICAgICAqLworICAgIGZsYXNoX2RlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyAgICAvKgorICAgICAqIExldCBvdGhlciBjb2RlIHRvIGJlIGV4ZWN1dGVkIGluY2x1ZGluZyBRU1BJIG9uZS4KKyAgICAgKi8KKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKworICAgIHJldHVybiB3cml0dGVuOworfQorCisvKioKKyAqIFxicmllZiBFcmFzZSBhIHNlY3RvciBvZiB0aGUgRmxhc2gKKyAqCisgKiBcZGV0YWlscyBUaGUgdGltZSBhbmQgdGhlIHdheSB0aGF0IHRoZSBvcGVyYXRpb24gd2lsbCBiZSBjYXJyaWVkIG91dCBkZXBlbmRzIG9uIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBzZXR0aW5nczoKKyAqICAgICAgICBFUkFTRV9JTl9BVVRPTU9ERSA9IDA6IHRoZSBjb21tYW5kIGlzIGlzc3VlZCBpbW1lZGlhdGVseSBpbiBtYW51YWwgbW9kZQorICogICAgICAgIEVSQVNFX0lOX0FVVE9NT0RFID0gMToKKyAqICAgICAgICAgICAgICBkZ19jb25maWdESVNBQkxFX0JBQ0tHUk9VTkRfRkxBU0hfT1BTID0gMDogdGhlIG9wZXJhdGlvbiBpcyBleGVjdXRlZCBtYW51YWxseSBieSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIENQTSB3aGVuIHRoZSBzeXN0ZW0gYmVjb21lcyBpZGxlCisgKiAgICAgICAgICAgICAgZGdfY29uZmlnRElTQUJMRV9CQUNLR1JPVU5EX0ZMQVNIX09QUyA9IDE6IHRoZSBvcGVyYXRpb24gaXMgZXhlY3V0ZWQgYXV0b21hdGljYWxseQorICogICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIFFTUEkgY29udHJvbGxlci4KKyAqCisgKiBccGFyYW1baW5dIGFkZHIgVGhlIGFkZHJlc3Mgb2YgdGhlIHNlY3RvciB0byBiZSBlcmFzZWQuCisgKi8KK1FTUElfU0VDVElPTl9OT19JTkxJTkUgc3RhdGljIHZvaWQgZXJhc2Vfc2VjdG9yKHVpbnQzMl90IGFkZHIpCit7CisjaWYgRVJBU0VfSU5fQVVUT01PREUKKyAgICAvKgorICAgICAqIEVyYXNlIHNlY3RvciBpbiBhdXRvbW9kZQorICAgICAqLworICAgIHFzcGlfZXJhc2Vfc2VjdG9yKGFkZHIpOworCisgICAgLyoKKyAgICAgKiBXYWl0IGZvciBlcmFzZSB0byBmaW5pc2gKKyAgICAgKi8KKyAgICB3aGlsZSAocXNwaV9nZXRfZXJhc2Vfc3RhdHVzKCkpCisgICAgeworICAgIH0KKworI2Vsc2UKKyAgICAvKgorICAgICAqIEZyb20gbm93IG9uIFFTUEkgbWF5IG5vdCBiZSBhdmFpbGFibGUsIHR1cm4gb2YgaW50ZXJydXB0cy4KKyAgICAgKi8KKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKworICAgIC8qCisgICAgICogVHVybiBvZmYgYXV0byBtb2RlIHRvIGFsbG93IHdyaXRlLgorICAgICAqLworICAgIHFzcGlfc2V0X2F1dG9tb2RlKGZhbHNlKTsKKworICAgIHFzcGlfc2V0X2J1c19tb2RlKEhXX1FTUElfQlVTX01PREVfU0lOR0xFKTsKKworICAgIC8qCisgICAgICogR2V0IHRoZSBGbGFzaCBvdXQgb2YgUG93ZXIgRG93biBtb2RlLgorICAgICAqLworICAgIGZsYXNoX3JlbGVhc2VfcG93ZXJfZG93bigpOworCisgICAgLyoKKyAgICAgKiBFeGl0IGNvbnRpbnVvdXMgbW9kZSwgYWZ0ZXIgdGhpcyB0aGUgZmxhc2ggd2lsbCBpbnRlcnByZXQgY29tbWFuZHMgYWdhaW4uCisgICAgICovCisgICAgZmxhc2hfcmVzZXRfY29udGludW91c19tb2RlKGZsYXNoX2NvbmZpZy0+YnJlYWtfc2VxX3NpemUpOworCisgICAgLyoKKyAgICAgKiBFeGVjdXRlIGVyYXNlIGNvbW1hbmQuCisgICAgICovCisgICAgZmxhc2hfZXJhc2Vfc2VjdG9yKGFkZHIpOworCisgICAgLyoKKyAgICAgKiBSZXN0b3JlIGF1dG8gbW9kZS4KKyAgICAgKi8KKyAgICBmbGFzaF9kZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSgpOworCisgICAgLyoKKyAgICAgKiBMZXQgb3RoZXIgY29kZSB0byBiZSBleGVjdXRlZCBpbmNsdWRpbmcgUVNQSSBvbmUuCisgICAgICovCisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisjZW5kaWYKK30KKwordWludDMyX3QgcXNwaV9hdXRvbW9kZV9nZXRfY29kZV9idWZmZXJfc2l6ZSh2b2lkKQoreworICAgIC8qIFJldHVybiAxIGluIGNhc2Ugc29tZSBjb2RlIHdpbGwgcGFzcyB0aGlzIHZhbHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uICovCisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgcXNwaV9hdXRvbW9kZV9zZXRfY29kZV9idWZmZXIodm9pZCAqcmFtKQoreworICAgICh2b2lkKSByYW07IC8qIFVudXNlZCAqLworfQorCitib29sIHFzcGlfYXV0b21vZGVfd3JpdGFibGUodm9pZCkKK3sKKyAgICByZXR1cm4gcXNwaV93cml0YWJsZSgpOworfQorCitzaXplX3QgcXNwaV9hdXRvbW9kZV93cml0ZV9mbGFzaF9wYWdlKHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisgICAgd2hpbGUgKCFxc3BpX2F1dG9tb2RlX3dyaXRhYmxlKCkpCisgICAgeworICAgIH0KKworICAgIHJldHVybiB3cml0ZV9wYWdlKGFkZHIsIGJ1Ziwgc2l6ZSk7Cit9CisKK3ZvaWQgcXNwaV9hdXRvbW9kZV9lcmFzZV9mbGFzaF9zZWN0b3IodWludDMyX3QgYWRkcikKK3sKKyAgICB3aGlsZSAoIXFzcGlfYXV0b21vZGVfd3JpdGFibGUoKSkKKyAgICB7CisgICAgfQorCisgICAgZXJhc2Vfc2VjdG9yKGFkZHIpOworfQorCit2b2lkIHFzcGlfYXV0b21vZGVfZXJhc2VfY2hpcCh2b2lkKQoreworICAgIGZsYXNoX2FjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSgpOworCisgICAgaHdfcXNwaV9jc19lbmFibGUoKTsKKyAgICBod19xc3BpX3dyaXRlOChDTURfV1JJVEVfRU5BQkxFKTsKKyAgICBod19xc3BpX2NzX2Rpc2FibGUoKTsKKworICAgIGh3X3FzcGlfY3NfZW5hYmxlKCk7CisgICAgaHdfcXNwaV93cml0ZTgoQ01EX0NISVBfRVJBU0UpOworICAgIGh3X3FzcGlfY3NfZGlzYWJsZSgpOworCisgICAgaHdfcXNwaV9jc19lbmFibGUoKTsKKyAgICBod19xc3BpX3dyaXRlOChDTURfUkVBRF9TVEFUVVNfUkVHSVNURVIpOworCisgICAgd2hpbGUgKGh3X3FzcGlfcmVhZDgoKSAmIEZMQVNIX1NUQVRVU19CVVNZX01BU0spOworCisgICAgaHdfcXNwaV9jc19kaXNhYmxlKCk7CisKKyAgICBmbGFzaF9kZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSgpOworfQorCitzaXplX3QgcXNwaV9hdXRvbW9kZV9yZWFkKHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKyAgICBtZW1jcHkoYnVmLCAodm9pZCAqKShNRU1PUllfUVNQSUZfQkFTRSArIGFkZHIpLCBsZW4pOworCisgICAgcmV0dXJuIGxlbjsKK30KKworUVNQSV9TRUNUSU9OIHZvaWQgcXNwaV9hdXRvbW9kZV9mbGFzaF9wb3dlcl91cCh2b2lkKQoreworICAgIGh3X2NwbV9kZWxheV91c2VjKGZsYXNoX2NvbmZpZy0+cG93ZXJfZG93bl9kZWxheSk7CisKKyAgICAvKiBJbnRlcnJ1cHRzIG11c3QgYmUgdHVybmVkIG9mZiBzaW5jZSB0aGUgZmxhc2ggZ29lcyBpbiBtYW51YWwgbW9kZSwgYW5kCisgICAgICogY29kZSAoZS5nLiBmb3IgYW4gSVNSKSBjYW5ub3QgYmUgZmV0Y2hlZCBmcm9tIGZsYXNoIGR1cmluZyB0aGlzIHRpbWUKKyAgICAgKi8KKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKworICAgIC8vIERvIG5vdCBjYWxsIGZsYXNoX2FjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSgpLiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsbAorICAgIC8vIGZsYXNoX3Jlc2V0X2NvbnRpbnVvdXNfbW9kZSB3aGljaCB3aWxsIHRyeSB0byBzZW5kIGJyZWFrIHNlcXVlbmNlIHRvIHRoZSBRU1BJIEZsYXNoCisgICAgLy8gd2hpY2ggaXMgaW4gcG93ZXItZG93biBtb2RlLgorICAgIHFzcGlfc2V0X2F1dG9tb2RlKGZhbHNlKTsKKyAgICBxc3BpX3NldF9idXNfbW9kZShIV19RU1BJX0JVU19NT0RFX1NJTkdMRSk7CisKKyAgICBod19xc3BpX2NzX2VuYWJsZSgpOworICAgIGh3X3FzcGlfd3JpdGU4KENNRF9SRUxFQVNFX1BPV0VSX0RPV04pOworICAgIGh3X3FzcGlfY3NfZGlzYWJsZSgpOworCisgICAgZmxhc2hfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworICAgIC8qCisgICAgICogVGhlIGZsYXNoIGlzIGluIGF1dG8gbW9kZSBhZ2Fpbi4gUmUtZW5hYmxlIHRoZSBpbnRlcnJ1cHRzCisgICAgICovCisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisKKyAgICBod19jcG1fZGVsYXlfdXNlYyhmbGFzaF9jb25maWctPnJlbGVhc2VfcG93ZXJfZG93bl9kZWxheSk7Cit9CisKK1FTUElfU0VDVElPTiB2b2lkIHFzcGlfYXV0b21vZGVfZmxhc2hfcG93ZXJfZG93bih2b2lkKQoreworICAgIGZsYXNoX2FjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSgpOworCisgICAgaHdfcXNwaV9jc19lbmFibGUoKTsKKyAgICBod19xc3BpX3dyaXRlOChDTURfRU5URVJfUE9XRVJfRE9XTik7CisgICAgaHdfcXNwaV9jc19kaXNhYmxlKCk7CisKKy8vIERvIG5vdCBjYWxsIGZsYXNoX2RlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCkuIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsCisvLyBmbGFzaF9jb25maWctPmRlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCkgd2hpY2ggd2lsbCB0cnkgdG8gc2VuZCBjb21tYW5kcyB0byB0aGUgUVNQSSBGbGFzaAorLy8gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBzZXQgaW4gcG93ZXItZG93biBtb2RlLgorCisvLyAgICAgICAgZmxhc2hfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworI2lmIFFVQURfTU9ERQorICAgIHFzcGlfc2V0X2J1c19tb2RlKEhXX1FTUElfQlVTX01PREVfUVVBRCk7CisjZW5kaWYKKyAgICBxc3BpX3NldF9hdXRvbW9kZSh0cnVlKTsKK30KKworc3RhdGljIHFzcGlfY29uZmlnIHFzcGlfY2ZnID0KK3sKKyAgICBIV19RU1BJX0FERFJfU0laRV8yNCwgSFdfUVNQSV9QT0xfSElHSCwgSFdfUVNQSV9TQU1QTElOR19FREdFX05FR0FUSVZFCit9OworCisvKioKKyAqIFxicmllZiBSZWFkIHRoZSBKRURFQyBtYW51ZmFjdHVyZXIgSUQsIGRldmljZSB0eXBlIGFuZCBkZXZpY2UgZGVuc2l0eSB1c2luZyBjb21tYW5kIDB4OUYKKyAqCisgKiBccGFyYW1baW5dIG1hbnVmYWN0dXJlcl9pZCBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSB3aGVyZSB0aGUgbWFudWZhY3R1cmVyIElEIHdpbGwgYmUgcmV0dXJuZWQKKyAqIFxwYXJhbVtpbl0gZGV2aWNlX3R5cGUgUG9pbnRlciB0byB0aGUgdmFyaWFibGUgd2hlcmUgdGhlIGRldmljZSB0eXBlIHdpbGwgYmUgcmV0dXJuZWQKKyAqIFxwYXJhbVtpbl0gZGVuc2l0eSBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSB3aGVyZSB0aGUgZGV2aWNlIGRlbnNpdHkgd2lsbCBiZSByZXR1cm5lZAorICovCisjaWYgRkxBU0hfQVVUT0RFVEVDVAorUVNQSV9TRUNUSU9OIHN0YXRpYyB2b2lkIGZsYXNoX3JlYWRfamVkZWNfaWQodWludDhfdCAqbWFudWZhY3R1cmVyX2lkLCB1aW50OF90ICpkZXZpY2VfdHlwZSwgdWludDhfdCAqZGVuc2l0eSkKK3sKKyAgICB1aW50OF90IGNtZFtdID0geyBDTURfUkVBRF9KRURFQ19JRCB9OworICAgIHVpbnQ4X3QgYnVmZmVyWzNdOworCisgICAgcXNwaV9zZXRfYXV0b21vZGUoZmFsc2UpOworICAgIHFzcGlfc2V0X2J1c19tb2RlKEhXX1FTUElfQlVTX01PREVfU0lOR0xFKTsKKworICAgIC8vIHJlc2V0IGNvbnRpbnVvdXMgbW9kZSB1c2luZyBib3RoIG9uZSBhbmQgdHdvIGJyZWFrIGJ5dGVzIHRvIGNvdmVyIGFsbCBjYXNlcworICAgIGZsYXNoX3Jlc2V0X2NvbnRpbnVvdXNfbW9kZShIV19RU1BJX0JSRUFLX1NFUV9TSVpFXzJCKTsKKyAgICBmbGFzaF9yZXNldF9jb250aW51b3VzX21vZGUoSFdfUVNQSV9CUkVBS19TRVFfU0laRV8xQik7CisKKyAgICBxc3BpX3RyYW5zYWN0KGNtZCwgMSwgYnVmZmVyLCAzKTsKKyAgICAqbWFudWZhY3R1cmVyX2lkID0gYnVmZmVyWzBdOworICAgICpkZXZpY2VfdHlwZSA9IGJ1ZmZlclsxXTsKKyAgICAqZGVuc2l0eSA9IGJ1ZmZlclsyXTsKKworI2lmIFFVQURfTU9ERQorICAgIHFzcGlfc2V0X2J1c19tb2RlKEhXX1FTUElfQlVTX01PREVfUVVBRCk7CisjZW5kaWYKKyAgICBxc3BpX3NldF9hdXRvbW9kZSh0cnVlKTsKK30KKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBDb25maWd1cmUgZHVtbXkgYnl0ZXMgaW4gUVNQSSBjb250cm9sbGVyCisgKgorICogXHBhcmFtW2luXSBjb3VudCBOdW1iZXIgb2YgZHVtbXkgYnl0ZXMgKG5vdCBpbmNsdWRpbmcgZXh0cmEgYnl0ZSkKKyAqLworUVNQSV9TRUNUSU9OIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIHN0YXRpYyB2b2lkIHFzcGlfYXV0b21vZGVfc2V0X2R1bW15X2J5dGVzX2NvdW50KHVpbnQ4X3QgY291bnQpCit7CisgICAgaWYgKGNvdW50ID09IDMpCisgICAgeworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihCVVJTVENNREIsIERNWV9GT1JDRSwgMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFFTUElDLT5RU1BJQ19CVVJTVENNREJfUkVHID0KKyAgICAgICAgICAgIChRU1BJQy0+UVNQSUNfQlVSU1RDTURCX1JFRyAmCisgICAgICAgICAgICAgfihSRUdfTVNLKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19ETVlfRk9SQ0UpIHwKKyAgICAgICAgICAgICAgIFJFR19NU0soUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX0RNWV9OVU0pKSkgfAorICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19ETVlfTlVNLAorICAgICAgICAgICAgICAgICAgIGR1bW15X251bVtjb3VudF0pOworICAgIH0KK30KKworX19SRVRBSU5FRF9DT0RFIGJvb2wgcXNwaV9hdXRvbW9kZV9pbml0KHZvaWQpCit7CisgICAgdWludDhfdCBkZXZpY2VfdHlwZTsKKyAgICB1aW50OF90IGRldmljZV9kZW5zaXR5OworCisgICAgaHdfcXNwaV9lbmFibGVfY2xvY2soKTsKKworCisjaWYgX19EQkdfUVNQSV9FTkFCTEVECisgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBRU1BJX0RJViwgMyk7CisjZW5kaWYKKworI2lmIEZMQVNIX0FVVE9ERVRFQ1QKKyAgICB1aW50OF90IG1hbnVmYWN0dXJlcl9pZDsKKyAgICB1aW50OF90IGk7CisKKworICAgIGZsYXNoX3JlYWRfamVkZWNfaWQoJm1hbnVmYWN0dXJlcl9pZCwgJmRldmljZV90eXBlLCAmZGV2aWNlX2RlbnNpdHkpOworCisgICAgY29uc3QgcXNwaV9mbGFzaF9jb25maWdfdCAqZmxhc2hfY29uZmlnX2luaXQgPSBmbGFzaF9jb25maWdfdGFibGVbMF07IC8vIGRlZmF1bHQgdG8gZmlyc3QgZW50cnkuCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGZsYXNoX2NvbmZpZ190YWJsZSkgLyBzaXplb2YocXNwaV9mbGFzaF9jb25maWdfdCAqKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKChmbGFzaF9jb25maWdfdGFibGVbaV0tPm1hbnVmYWN0dXJlcl9pZCA9PSBtYW51ZmFjdHVyZXJfaWQpICYmCisgICAgICAgICAgICAoZmxhc2hfY29uZmlnX3RhYmxlW2ldLT5kZXZpY2VfdHlwZSA9PSBkZXZpY2VfdHlwZSkgJiYKKyAgICAgICAgICAgIChmbGFzaF9jb25maWdfdGFibGVbaV0tPmRldmljZV9kZW5zaXR5ID09IGRldmljZV9kZW5zaXR5KSkKKyAgICAgICAgeworICAgICAgICAgICAgZmxhc2hfY29uZmlnX2luaXQgPSBmbGFzaF9jb25maWdfdGFibGVbaV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZsYXNoX2F1dG9kZXRlY3RfY29uZmlnID0gKmZsYXNoX2NvbmZpZ19pbml0OworICAgIGZsYXNoX2NvbmZpZyA9ICZmbGFzaF9hdXRvZGV0ZWN0X2NvbmZpZzsKKyNlbHNlCisgICAgZGV2aWNlX3R5cGUgICAgID0gZGdfY29uZmlnRkxBU0hfREVWSUNFX1RZUEU7CisgICAgZGV2aWNlX2RlbnNpdHkgID0gZGdfY29uZmlnRkxBU0hfREVOU0lUWTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBDb3B5IHRoZSBzZWxlY3RlZCBmbGFzaCBzdHJ1Y3QgZnJvbSBmbGFzaCBpbnRvIHJldHJhbQorICAgICAqLworICAgIGZsYXNoX2NvbmZpZy0+aW5pdGlhbGl6ZShkZXZpY2VfdHlwZSwgZGV2aWNlX2RlbnNpdHkpOworCisgICAgdWludDhfdCByZWFkX29wY29kZTsKKworICAgIGlmIChmbGFzaF9jb25maWctPmFkZHJlc3Nfc2l6ZSA9PSBIV19RU1BJX0FERFJfU0laRV8zMikKKyAgICB7CisgICAgICAgIHJlYWRfb3Bjb2RlID0gQ01EX0ZBU1RfUkVBRF9RVUFEXzRCOworICAgICAgICBxc3BpX2NmZy5hZGRyZXNzX3NpemUgPSBIV19RU1BJX0FERFJfU0laRV8zMjsgLy8gSXQgd2lsbCBiZSBzZXQgd2hlbiBod19xc3BpX2luaXQoKSBpcyBjYWxsZWQKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVhZF9vcGNvZGUgPSBDTURfRkFTVF9SRUFEX1FVQUQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZXR1cCBlcmFzZSBpbnN0cnVjdGlvbiB0aGF0IHdpbGwgYmUgc2VudCBieSBRU1BJIGNvbnRyb2xsZXIgdG8gZXJhc2Ugc2VjdG9yIGluIGF1dG9tb2RlLgorICAgICAqLworICAgIGh3X3FzcGlfc2V0X2VyYXNlX2luc3RydWN0aW9uKGZsYXNoX2NvbmZpZy0+ZXJhc2Vfb3Bjb2RlLCBIV19RU1BJX0JVU19NT0RFX1NJTkdMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFX1NJTkdMRSwgMTUsIDUpOworICAgIC8qCisgICAgICogU2V0dXAgaW5zdHJ1Y3Rpb24gcGFpciB0aGF0IHdpbGwgdGVtcG9yYXJpbHkgc3VzcGVuZCBlcmFzZSBvcGVyYXRpb24gdG8gYWxsb3cgcmVhZC4KKyAgICAgKi8KKyAgICBod19xc3BpX3NldF9zdXNwZW5kX3Jlc3VtZV9pbnN0cnVjdGlvbnMoZmxhc2hfY29uZmlnLT5lcmFzZV9zdXNwZW5kX29wY29kZSwgSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX2NvbmZpZy0+ZXJhc2VfcmVzdW1lX29wY29kZSwgSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUsIDcpOworCisgICAgLyoKKyAgICAgKiBRU1BJIGNvbnRyb2xsZXIgbXVzdCBzZW5kIHdyaXRlIGVuYWJsZSBiZWZvcmUgZXJhc2UsIHRoaXMgc2V0cyBpdCB1cC4KKyAgICAgKi8KKyAgICBod19xc3BpX3NldF93cml0ZV9lbmFibGVfaW5zdHJ1Y3Rpb24oQ01EX1dSSVRFX0VOQUJMRSwgSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUpOworCisgICAgLyoKKyAgICAgKiBTZXR1cCBpbnN0cnVjdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBwZXJpb2RpY2FsbHkgY2hlY2sgZXJhc2Ugb3BlcmF0aW9uIHN0YXR1cy4KKyAgICAgKiBDaGVjayBMU0Igd2hpY2ggaXMgMSB3aGVuIGVyYXNlIGlzIGluIHByb2dyZXNzLgorICAgICAqLworICAgIGh3X3FzcGlfc2V0X3JlYWRfc3RhdHVzX2luc3RydWN0aW9uKGZsYXNoX2NvbmZpZy0+cmVhZF9lcmFzZV9wcm9ncmVzc19vcGNvZGUsIEhXX1FTUElfQlVTX01PREVfU0lOR0xFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREVfU0lOR0xFLCBmbGFzaF9jb25maWctPmVyYXNlX2luX3Byb2dyZXNzX2JpdCwgZmxhc2hfY29uZmlnLT5lcmFzZV9pbl9wcm9ncmVzc19iaXRfaGlnaF9sZXZlbCA/IDEgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwLCAwKTsKKworICAgIC8qCisgICAgICogVGhpcyBzZXF1ZW5jZSBpcyBuZWNlc3NhcnkgaWYgZmxhc2ggaXMgd29ya2luZyBpbiBjb250aW51b3VzIHJlYWQgbW9kZSwgd2hlbiBpbnN0cnVjdGlvbgorICAgICAqIGlzIG5vdCBzZW50IG9uIGV2ZXJ5IHJlYWQgYWNjZXNzIGp1c3QgYWRkcmVzcy4gU2VuZGluZyAweEZGRkYgd2lsbCBleGl0IHRoaXMgbW9kZS4KKyAgICAgKiBUaGlzIHNlcXVlbmNlIGlzIHNlbnQgb25seSB3aGVuIFFTUEkgaXMgd29ya2luZyBpbiBhdXRvbW9kZSBhbmQgZGVjaWRlcyB0byBzZW5kIG9uZSBvZgorICAgICAqIGluc3RydWN0aW9ucyBhYm92ZS4KKyAgICAgKiBJZiBmbGFzaCBpcyB3b3JraW5nIGluIERVQUwgYnVzIG1vZGUgc2VxdWVuY2Ugc2hvdWxkIGJlIDB4RkZGRiBhbmQgc2l6ZSBzaG91bGQgYmUKKyAgICAgKiBIV19RU1BJX0JSRUFLX1NFUV9TSVpFXzJCLgorICAgICAqLworICAgIGh3X3FzcGlfc2V0X2JyZWFrX3NlcXVlbmNlKDB4RkZGRiwgSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUsIGZsYXNoX2NvbmZpZy0+YnJlYWtfc2VxX3NpemUsIDApOworCisgICAgLyoKKyAgICAgKiBJZiBhcHBsaWNhdGlvbiBzdGFydHMgZnJvbSBGTEFTSCB0aGVuIGJvb3Rsb2FkZXIgbXVzdCBoYXZlIHNldCByZWFkIGluc3RydWN0aW9uLgorICAgICAqLworICAgIGlmIChkZ19jb25maWdDT0RFX0xPQ0FUSU9OICE9IE5PTl9WT0xBVElMRV9JU19GTEFTSCkKKyAgICB7CisgICAgICAgIGh3X3FzcGlfaW5pdCgmcXNwaV9jZmcpOworICAgICAgICBod19xc3BpX3NldF9kaXYoSFdfUVNQSV9ESVZfMSk7CisgICAgfQorCisjaWZkZWYgIEVOQUJMRV9BVVRPTU9ERV9DT05GSUdVUkFUSU9OX0ZPUl9SRUFECisKKyAgICBmbGFzaF9hY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworICAgIGh3X3FzcGlfc2V0X3JlYWRfaW5zdHJ1Y3Rpb24ocmVhZF9vcGNvZGUsIGZsYXNoX2NvbmZpZy0+c2VuZF9vbmNlLCBmbGFzaF9jb25maWctPmdldF9kdW1teV9ieXRlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFX1FVQUQsIEhXX1FTUElfQlVTX01PREVfUVVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREVfUVVBRCk7CisgICAgaHdfcXNwaV9zZXRfZXh0cmFfYnl0ZShmbGFzaF9jb25maWctPmV4dHJhX2J5dGUsIEhXX1FTUElfQlVTX01PREVfUVVBRCwgMCk7CisgICAgaHdfcXNwaV9zZXRfYWRkcmVzc19zaXplKGZsYXNoX2NvbmZpZy0+YWRkcmVzc19zaXplKTsKKworICAgIGZsYXNoX2RlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyAgICBIV19RU1BJQ19SRUdfU0VURihCVVJTVENNREIsIENTX0hJR0hfTUlOLCAwKTsKKyNlbHNlCisgICAgKHZvaWQpIHJlYWRfb3Bjb2RlOworI2VuZGlmCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1FTUElfU0VDVElPTiB2b2lkIHFzcGlfYXV0b21vZGVfc3lzX2Nsb2NrX2NmZyhzeXNfY2xrX3Qgc3lzX2NsaykKK3sKKyAgICBpZiAoKENSR19UT1AtPkNMS19BTUJBX1JFRyAmICgxIDw8IFJFR19QT1MoQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBRU1BJX0VOQUJMRSkpKSAhPSAwKSAgLy8gSWYgY2xvY2sgaXMgZW5hYmxlZAorICAgIHsKKyAgICAgICAgLyogU29tZSBvZiB0aGUgc3lzX2Nsa19jZmcoKSBpbXBsZW1lbnRhdGlvbnMgcHV0IHRoZSBmbGFzaCBpbiBjb21tYW5kIGVudHJ5IG1vZGUsIHdoZXJlIHRoZSBmbGFzaCBpcworICAgICAgICAgKiBub3QgYXZhaWxhYmxlIGZvciBjb2RlIGV4ZWN1dGlvbi4gV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBubyBpbnRlcnJ1cHQgKHRoYXQgbWF5IGNhdXNlIGEgY2FjaGUgbWlzcykKKyAgICAgICAgICogaGl0cyBkdXJpbmcgdGhpcyB0aW1lLgorICAgICAgICAgKi8KKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIGZsYXNoX2NvbmZpZy0+c3lzX2Nsa19jZmcoc3lzX2Nsayk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworICAgIH0KK30KKworY29uc3QgcXNwaV91Y29kZV90ICpxc3BpX2F1dG9tb2RlX2dldF91Y29kZSh2b2lkKQoreworICAgIHJldHVybiAmZmxhc2hfY29uZmlnLT51Y29kZV93YWtldXA7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2NwbS5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19jcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzU4MjBkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19jcG0uaApAQCAtMCwwICsxLDE0MjggQEAKKy8qKgorXGFkZHRvZ3JvdXAgQlNQCitceworXGFkZHRvZ3JvdXAgREVWSUNFUworXHsKK1xhZGR0b2dyb3VwIENQTQorXHsKK1xicmllZiBDbG9jayBhbmQgUG93ZXIgTWFuYWdlcgorKi8KKworLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfY3BtLmgKKyAqCisgKiBAYnJpZWYgQ2xvY2sgYW5kIFBvd2VyIE1hbmFnZXIgaGVhZGVyIGZpbGUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBDUE1fSF8KKyNkZWZpbmUgQ1BNX0hfCisKKyNpZiBkZ19jb25maWdVU0VfSFdfQ1BNCisKKyNpbmNsdWRlICJzZGtfZGVmcy5oIgorCisjZGVmaW5lIFNZU19DTEtfSVNfWFRBTDE2TSAgICAgICAgICAgICAgKDApCisjZGVmaW5lIFNZU19DTEtfSVNfUkMxNiAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIFNZU19DTEtfSVNfTFAgICAgICAgICAgICAgICAgICAgKDIpCisjZGVmaW5lIFNZU19DTEtfSVNfUExMICAgICAgICAgICAgICAgICAgKDMpCisKKyNkZWZpbmUgTFBfQ0xLX0lTX1JDMzJLICAgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgTFBfQ0xLX0lTX1JDWCAgICAgICAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgTFBfQ0xLX0lTX1hUQUwzMksgICAgICAgICAgICAgICAoMikKKyNkZWZpbmUgTFBfQ0xLX0lTX0VYVEVSTkFMICAgICAgICAgICAgICAoMykKKworI2RlZmluZSBEQ0RDX0lTX1JFQURZIFwKKyAgICAgICAgKFJFR19NU0soRENEQywgRENEQ19TVEFUVVNfMV9SRUcsIERDRENfVkREX0FWQUlMQUJMRSkpCisvLyAgICAgICAgKERDRENfVjE4UF9BVkFJTEFCTEUgfCBEQ0RDX1ZERF9BVkFJTEFCTEUgfCBEQ0RDX1YxOF9BVkFJTEFCTEUgfCBEQ0RDX1YxNF9BVkFJTEFCTEUpCisKKyNkZWZpbmUgRENEQ19JU19SRUFEWV9UT19TTEVFUCAgICAgICAgICAoRENEQ19WRERfQVZBSUxBQkxFIHwgRENEQ19WMTRfQVZBSUxBQkxFKQorCit0eXBlZGVmIGVudW0gY2FsX2Nsa19jZWxfdHlwZSB7CisgICAgICAgIENBTElCUkFURV9SQzMySyA9IDAsCisgICAgICAgIENBTElCUkFURV9SQzE2TSwKKyAgICAgICAgQ0FMSUJSQVRFX1hUQUwzMkssCisgICAgICAgIENBTElCUkFURV9SQ1gsCit9IGNhbF9jbGtfdDsKKworLyoqCisgKiBcYnJpZWYgVGhlIHN5c3RlbSBjbG9jayB0eXBlCisgKgorICovCit0eXBlZGVmIGVudW0gc3lzY2xrX3R5cGUgeworICAgICAgICBzeXNjbGtfUkMxNiA9IDAsICAgICAgICAvLyE8IFJDMTYKKyAgICAgICAgc3lzY2xrX1hUQUwxNk0gPSAxLCAgICAgLy8hPCAxIHggMTZNCisgICAgICAgIHN5c2Nsa19YVEFMMzJNID0gMiwgICAgIC8vITwgMiB4IDE2TQorICAgICAgICBzeXNjbGtfUExMNDggPSAzLCAgICAgICAvLyE8IDMgeCAxNk0KKyAgICAgICAgc3lzY2xrX1BMTDk2ID0gNiwgICAgICAgLy8hPCA2IHggMTZNCisgICAgICAgIHN5c2Nsa19MUCA9IDI1NSwgICAgICAgIC8vITwgbm90IGFwcGxpY2FibGUKK30gc3lzX2Nsa190OworCisvKioKKyAqIFxicmllZiBUaGUgQU1CQSBIaWdoLVBlcmZvcm1hbmNlIEJ1cyAoQUhCKSBjbG9jayBkaXZpZGVyCisgKgorICovCit0eXBlZGVmIGVudW0gYWhiZGl2X3R5cGUgeworICAgICAgICBhaGJfZGl2MSA9IDAsICAgICAgICAgICAvLyE8IERpdmlkZSBieSAxCisgICAgICAgIGFoYl9kaXYyLCAgICAgICAgICAgICAgIC8vITwgRGl2aWRlIGJ5IDIKKyAgICAgICAgYWhiX2RpdjQsICAgICAgICAgICAgICAgLy8hPCBEaXZpZGUgYnkgNAorICAgICAgICBhaGJfZGl2OCwgICAgICAgICAgICAgICAvLyE8IERpdmlkZSBieSA4CisgICAgICAgIGFoYl9kaXYxNiwgICAgICAgICAgICAgIC8vITwgRGl2aWRlIGJ5IDE2Cit9IGFoYl9kaXZfdDsKKworYWhiX2Rpdl90IGNtX2FoYmNsazsKK3N5c19jbGtfdCBjbV9zeXNjbGs7CisKKy8qKgorICogXGJyaWVmIFRoZSBBTUJBIFBlcmlwaGVyYWwgQnVzIChBUEIpIGNsb2NrIGRpdmlkZXIKKyAqCisgKi8KK3R5cGVkZWYgZW51bSBhcGJkaXZfdHlwZSB7CisgICAgICAgIGFwYl9kaXYxID0gMCwgICAgICAgICAgIC8vITwgRGl2aWRlIGJ5IDEKKyAgICAgICAgYXBiX2RpdjIsICAgICAgICAgICAgICAgLy8hPCBEaXZpZGUgYnkgMgorICAgICAgICBhcGJfZGl2NCwgICAgICAgICAgICAgICAvLyE8IERpdmlkZSBieSA0CisgICAgICAgIGFwYl9kaXY4LCAgICAgICAgICAgICAgIC8vITwgRGl2aWRlIGJ5IDgKK30gYXBiX2Rpdl90OworCisvKioKKyAqIFxicmllZiBUaGUgQ1BVIGNsb2NrIHR5cGUgKHNwZWVkKQorICoKKyAqLwordHlwZWRlZiBlbnVtIGNwdV9jbGtfdHlwZSB7CisgICAgICAgIGNwdWNsa18xTSA9IDEsICAgICAgICAgIC8vITwgMSBNSHoKKyAgICAgICAgY3B1Y2xrXzJNID0gMiwgICAgICAgICAgLy8hPCAyIE1IegorICAgICAgICBjcHVjbGtfM00gPSAzLCAgICAgICAgICAvLyE8IDMgTUh6CisgICAgICAgIGNwdWNsa180TSA9IDQsICAgICAgICAgIC8vITwgNCBNSHoKKyAgICAgICAgY3B1Y2xrXzZNID0gNiwgICAgICAgICAgLy8hPCA2IE1IegorICAgICAgICBjcHVjbGtfOE0gPSA4LCAgICAgICAgICAvLyE8IDggTUh6CisgICAgICAgIGNwdWNsa18xMk0gPSAxMiwgICAgICAgIC8vITwgMTIgTUh6CisgICAgICAgIGNwdWNsa18xNk0gPSAxNiwgICAgICAgIC8vITwgMTYgTUh6CisgICAgICAgIGNwdWNsa18yNE0gPSAyNCwgICAgICAgIC8vITwgMjQgTUh6CisgICAgICAgIGNwdWNsa18zMk0gPSAzMiwgICAgICAgIC8vITwgMzIgTUh6CisgICAgICAgIGNwdWNsa180OE0gPSA0OCwgICAgICAgIC8vITwgNDggTUh6CisgICAgICAgIGNwdWNsa185Nk0gPSA5NiAgICAgICAgIC8vITwgOTYgTUh6Cit9IGNwdV9jbGtfdDsKKworCisvKioKKyAqIFxicmllZiBUaGUgVENTIHNldHRpbmcgZm9yIHRoZSBCT0QgY29udHJvbC4KKyAqIFxkZXRhaWxzIElmIGl0IGlzIHplcm8gdGhlbiB0aGUgaGFyZC1jb2RlZCBTREsgY29kZSBmb3IgdGhlIEJPRCBzZXR1cCBpcyB1c2VkLiBJdCBpdCBpcyBub3QgemVybywKKyAqICAgICAgICAgIHRoaXMgaXMgdGhlIHZhbHVlIHRoYXQgaXMgd3JpdHRlbiB0byB0aGUgQk9EX0NUUkwyX1JFRy4KKyAqLworZXh0ZXJuIHVpbnQxNl90IGh3X2NwbV9ib2RfZW5hYmxlZF9pbl90Y3M7CisKKworLyoqCisgKiBcYnJpZWYgVHVybiBvbiB0aGUgMS4yViBMRE8uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fdHVybl8xXzJWX29uKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3R1cm5fMV8yVl9vbih2b2lkKQoreworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVYyX09OKTsKK30KKworLyoqCisgKiBcYnJpZWYgVHVybiBvZmYgdGhlIDEuMlYgTERPLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3R1cm5fMV8yVl9vZmYodm9pZCkKK3sKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWMl9PTik7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBDYWNoZSByZXRhaW5hYmlsaXR5LgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3NldF9jYWNoZV9yZXRhaW5lZCh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBSRVRBSU5fQ0FDSEUpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIEVDQyBtaWNyb2NvZGUgUkFNIHJldGFpbm1lbnQuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc2V0X2VjY3JhbV9yZXRhaW5lZCh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBSRVRBSU5fRUNDUkFNKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBRU1BJIGluaXRpYWxpemF0aW9uIGFmdGVyIHdha2UtdXAuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZW5hYmxlX3FzcGlfaW5pdCh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgU1lTX0NUUkxfUkVHLCBRU1BJX0lOSVQpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0dXAgdGhlIFJldGVudGlvbiBNZW1vcnkgY29uZmlndXJhdGlvbi4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9zZXR1cF9yZXRtZW0odm9pZCkKK3sKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19TRVRGKENSR19UT1AsIFBNVV9DVFJMX1JFRywgUkVUQUlOX1JBTSwgZGdfY29uZmlnTUVNX1JFVEVOVElPTl9NT0RFKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgbWVtb3J5IHJldGVudGlvbi4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9ub19yZXRtZW0odm9pZCkKK3sKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIENSR19UT1AtPlBNVV9DVFJMX1JFRyAmPSB+KFJFR19NU0soQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBSRVRBSU5fUkFNKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBSRVRBSU5fQ0FDSEUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFJFVEFJTl9FQ0NSQU0pKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSB0aGUgY2xvY2stbGVzcyBzbGVlcCBtb2RlLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2VuYWJsZV9jbG9ja2xlc3Modm9pZCkKK3sKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIFBNVV9DVFJMX1JFRywgRU5BQkxFX0NMS0xFU1MpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSB0aGUgY2xvY2stbGVzcyBzbGVlcCBtb2RlLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2Rpc2FibGVfY2xvY2tsZXNzKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIEVOQUJMRV9DTEtMRVNTKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIEFjdGl2YXRlIHRoZSAiUmVzZXQgb24gd2FrZS11cCIgZnVuY3Rpb25hbGl0eS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfcmVzZXRfb25fd3VwKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFJFU0VUX09OX1dBS0VVUCk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBBY3RpdmF0ZSBCT0QgcHJvdGVjdGlvbi4KKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSB2b2lkIGh3X2NwbV9hY3RpdmF0ZV9ib2RfcHJvdGVjdGlvbih2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQWN0aXZhdGUgQk9EIHByb3RlY3Rpb24gKG5vbiByZXRhaW5lZCB2ZXJzaW9uKS4KKyAqCisgKi8KK3ZvaWQgaHdfY3BtX2FjdGl2YXRlX2JvZF9wcm90ZWN0aW9uX2F0X2luaXQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZSBCT0QgcHJvdGVjdGlvbi4KKyAqCisgKiBcbm90ZSBOb3QgYXBwbGljYWJsZSBmb3IgREExNDY4MC8xLTAwIGNoaXBzLgorICoKKyAqLwordm9pZCBod19jcG1fY29uZmlndXJlX2JvZF9wcm90ZWN0aW9uKHZvaWQpOworCisvKioKKyAqIFxicmllZiBEZWFjdGl2YXRlIEJPRCBwcm90ZWN0aW9uLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2RlYWN0aXZhdGVfYm9kX3Byb3RlY3Rpb24odm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGVhY3RpdmF0ZV9ib2RfcHJvdGVjdGlvbih2b2lkKQoreworICAgICAgICBDUkdfVE9QLT5CT0RfQ1RSTDJfUkVHID0gMDsKK30KKworLyoqCisgKiBcYnJpZWYgQWN0aXZhdGUgQk9EIHByb3RlY3Rpb24gZm9yIDFWNCByYWlsIChvbmx5IGZvciBEQTE0NjgyLzMtQkEgY2hpcHMhKS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9hY3RpdmF0ZV8xdjRfYm9kX3Byb3RlY3Rpb24odm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fYWN0aXZhdGVfMXY0X2JvZF9wcm90ZWN0aW9uKHZvaWQpCit7CisjaWYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0IpCisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF9WMTRfRU4pOworI2VuZGlmCit9CisKKy8qKgorICogXGJyaWVmIERlYWN0aXZhdGUgQk9EIHByb3RlY3Rpb24gZm9yIDFWNCByYWlsIChvbmx5IGZvciBEQTE0NjgyLzMtQkEgY2hpcHMhKS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9kZWFjdGl2YXRlXzF2NF9ib2RfcHJvdGVjdGlvbih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9kZWFjdGl2YXRlXzF2NF9ib2RfcHJvdGVjdGlvbih2b2lkKQoreworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9CKQorICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBCT0RfQ1RSTDJfUkVHLCBCT0RfVjE0X0VOKTsKKyNlbmRpZgorfQorCisvKioKKyAqIFxicmllZiBQb3dlciBkb3duIHRoZSBSYWRpbyBQb3dlciBEb21haW4uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fcG93ZXJfZG93bl9yYWRpbyh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBSQURJT19TTEVFUCk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBQb3dlciBkb3duIHRoZSBQZXJpcGhlcmFsIFBvd2VyIERvbWFpbi4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9wb3dlcl9kb3duX3BlcmlwaF9wZCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9wb3dlcl9kb3duX3BlcmlwaF9wZCh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBQRVJJUEhfU0xFRVApOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgV2FpdCBmb3IgUmFkaW8gUG93ZXIgRG9tYWluIFBvd2VyIGRvd24uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fd2FpdF9yYWRfcG93ZXJfZG93bih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV93YWl0X3JhZF9wb3dlcl9kb3duKHZvaWQpCit7CisgICAgICAgIHdoaWxlICgoQ1JHX1RPUC0+U1lTX1NUQVRfUkVHICYgUkVHX01TSyhDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFJBRF9JU19ET1dOKSkgPT0gMCk7Cit9CisKKy8qKgorICogXGJyaWVmIFdhaXQgZm9yIFBlcmlwaGVyYWwgUG93ZXIgRG9tYWluIFBvd2VyIGRvd24uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fd2FpdF9wZXJfcG93ZXJfZG93bih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV93YWl0X3Blcl9wb3dlcl9kb3duKHZvaWQpCit7CisgICAgICAgIHdoaWxlICgoQ1JHX1RPUC0+U1lTX1NUQVRfUkVHICYgUkVHX01TSyhDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFBFUl9JU19ET1dOKSkgPT0gMCk7Cit9CisKKy8qKgorICogXGJyaWVmIFBvd2VyIHVwIHRoZSBQZXJpcGhlcmFscyBQb3dlciBEb21haW4uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fcG93ZXJfdXBfcGVyX3BkKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3Bvd2VyX3VwX3Blcl9wZCh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBQRVJJUEhfU0xFRVApOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyAgICAgICAgd2hpbGUgKChDUkdfVE9QLT5TWVNfU1RBVF9SRUcgJiBSRUdfTVNLKENSR19UT1AsIFNZU19TVEFUX1JFRywgUEVSX0lTX1VQKSkgPT0gMCk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0VfRlRERikKKy8qKgorICogXGJyaWVmIENoZWNrIHRoZSBzdGF0dXMgb2YgRlRERiBQb3dlciBEb21haW4uCisgKgorICogXHJldHVybiAwLCBpZiBpdCBpcyBwb3dlcmVkIGRvd24gYW5kIDEgaWYgaXQgaXMgcG93ZXJlZCB1cC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBod19jcG1fY2hlY2tfZnRkZl9wZF9zdGF0dXModm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgRlRERl9JU19VUCk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1VTRV9CTEUpCisvKioKKyAqIFxicmllZiBDaGVjayB0aGUgc3RhdHVzIG9mIEJMRSBQb3dlciBEb21haW4uCisgKgorICogXHJldHVybiAwLCBpZiBpdCBpcyBwb3dlcmVkIGRvd24gYW5kIDEgaWYgaXQgaXMgcG93ZXJlZCB1cC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBod19jcG1fY2hlY2tfYmxlX3BkX3N0YXR1cyh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBCTEVfSVNfVVApOworfQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIENoZWNrIHRoZSBzdGF0dXMgb2YgUGVyaXBoZXJhbHMgUG93ZXIgRG9tYWluLgorICoKKyAqIFxyZXR1cm4gMCwgaWYgaXQgaXMgcG93ZXJlZCBkb3duIGFuZCAxIGlmIGl0IGlzIHBvd2VyZWQgdXAuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgaHdfY3BtX2NoZWNrX3Blcl9wZF9zdGF0dXModm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgUEVSX0lTX1VQKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgdGhlIHN0YXR1cyBvZiBSYWRpbyBQb3dlciBEb21haW4uCisgKgorICogXHJldHVybiAwLCBpZiBpdCBpcyBwb3dlcmVkIGRvd24gYW5kIDEgaWYgaXQgaXMgcG93ZXJlZCB1cC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBod19jcG1fY2hlY2tfcmFkX3BkX3N0YXR1cyh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBSQURfSVNfVVApOworfQorCisvKioKKyAqIFxicmllZiBBY3RpdmF0ZSBQYWQgbGF0Y2hlcy4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9hY3RpdmF0ZV9wYWRfbGF0Y2hlcyh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9hY3RpdmF0ZV9wYWRfbGF0Y2hlcyh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgU1lTX0NUUkxfUkVHLCBQQURfTEFUQ0hfRU4pOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGVhY3RpdmF0ZSBQYWQgbGF0Y2hlcy4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9kZWFjdGl2YXRlX3BhZF9sYXRjaGVzKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2RlYWN0aXZhdGVfcGFkX2xhdGNoZXModm9pZCkKK3sKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIFNZU19DVFJMX1JFRywgUEFEX0xBVENIX0VOKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHRoZSBSQzE2TSBpcyBlbmFibGVkLgorICoKKyAqIFxyZXR1cm4gMCBpZiB0aGUgUkMxNk0gaXMgZGlzYWJsZWQsIGVsc2UgMS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBod19jcG1fY2hlY2tfcmMxNl9zdGF0dXModm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKENSR19UT1AsIENMS18xNk1fUkVHLCBSQzE2TV9FTkFCTEUpOworfQorCisvKioKKyAqIFxicmllZiBBY3RpdmF0ZSB0aGUgUkMxNk0uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZW5hYmxlX3JjMTYodm9pZCkKK3sKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQ0xLXzE2TV9SRUcsIFJDMTZNX0VOQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIERlYWN0aXZhdGUgdGhlIFJDMTZNLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2Rpc2FibGVfcmMxNih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9kaXNhYmxlX3JjMTYodm9pZCkKK3sKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQ0xLXzE2TV9SRUcsIFJDMTZNX0VOQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgWFRBTDE2TSBzZXR0bGluZyB0aW1lLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3NldF94dGFsMTZtX3NldHRsaW5nX3RpbWUodWludDhfdCBjeWNsZXMpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3NldF94dGFsMTZtX3NldHRsaW5nX3RpbWUodWludDhfdCBjeWNsZXMpCit7CisgICAgICAgIENSR19UT1AtPlhUQUxSRFlfQ1RSTF9SRUcgPSBjeWNsZXM7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHRoZSBYVEFMMTZNIGhhcyBzdGFydGVkIHRpY2tpbmcKKyAqCisgKi8KK19fU1RBVElDX0lOTElORSBib29sIGh3X2NwbV9pc194dGFsMTZtX3N0YXJ0ZWQodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBod19jcG1faXNfeHRhbDE2bV9zdGFydGVkKHZvaWQpCit7CisgICAgICAgIHJldHVybiAoUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBYVEFMMTZfVFJJTV9SRUFEWSkgPT0gMSk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHRoZSBYVEFMMTZNIGlzIGVuYWJsZWQuCisgKgorICogXHJldHVybiAwIGlmIHRoZSBYVEFMMTZNIGlzIGRpc2FibGVkLCBub3QgMCBlbHNlLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGh3X2NwbV9jaGVja194dGFsMTZtX3N0YXR1cyh2b2lkKQoreworICAgICAgICB1aW50MzJfdCByZXQ7CisKKyAgICAgICAgcmV0ID0gUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBYVEFMMTZNX0RJU0FCTEUpOworCisgICAgICAgIHJldHVybiAhcmV0OworfQorCisvKioKKyAqIFxicmllZiBBY3RpdmF0ZSB0aGUgWFRBTDE2TS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfeHRhbDE2bSh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBYVEFMMTZNX0RJU0FCTEUpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKworfQorCisvKioKKyAqIFxicmllZiBEZWFjdGl2YXRlIHRoZSBYVEFMMTZNLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2Rpc2FibGVfeHRhbDE2bSh2b2lkKQoreworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFhUQUwxNk1fRElTQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSB0aGUgaGlnaC1wYXNzIGZpbHRlciBvZiB0aGUgWFRBTDE2TS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfeHRhbDE2bV9ocGYodm9pZCkKK3sKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQ0xLXzE2TV9SRUcsIFhUQUwxNl9IUEFTU19GTFRfRU4pOyAvLyBMYXN0IHJldmlldyBkYXRlOiBGZWIgMTUsIDIwMTYgLSAxMjoyNTo0NworfQorCisvKioKKyAqIFxicmllZiBTZXQgYSBmbGFnIGJlZm9yZSBzbGVlcGluZyB0aGF0IHdpbGwgY2hlY2sgYWZ0ZXIgdGhlIGNvZGUgZXhlY3V0aW9uIGlzIHJlc3VtZWQgYWZ0ZXIgdGhlCisgKiAgICAgICAgV0ZJKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN5c3RlbSBhY3R1YWxseSBlbnRlcmVkIGludG8gc2xlZXAgb3Igbm90LiBGb3IgdGhpcworICogICAgICAgIHB1cnBvc2UsIGEgcmF0aGVyIGhhcm1sZXNzIHJlZ2lzdGVyIG9mIHRoZSBTWVMgUG93ZXIgRG9tYWluIGlzIHVzZWQuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc2V0X3NsZWVwX2ZsYWcodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc2V0X3NsZWVwX2ZsYWcodm9pZCkKK3sKKyAgICAgICAgR1BJTy0+R1BJT19DTEtfU0VMID0gMTsKK30KKworLyoqCisgKiBcYnJpZWYgUHJlcGFyZSBSRVNFVCB0eXBlIHRyYWNraW5nLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fdHJhY2tfcmVzZXRfdHlwZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV90cmFja19yZXNldF90eXBlKHZvaWQpCit7CisjaWYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0IpCisgICAgICAgIENSR19UT1AtPlJFU0VUX1NUQVRfUkVHID0gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIFxicmllZiBDaGVjayBpZiB0aGUgc3lzdGVtIGVudGVyZWQgc2xlZXAuCisgKgorICogXHJldHVybiBUcnVlLCBpZiB0aGUgc3lzdGVtIHNsZXB0LCBlbHNlIGZhbHNlLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIGJvb2wgaHdfY3BtX2NoZWNrX3NsZWVwX2ZsYWcodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIChHUElPLT5HUElPX0NMS19TRUwgPT0gMCk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHRoZSBYVEFMMTZNIGhhcyBzZXR0bGVkLgorICoKKyAqIFxyZXR1cm4gMSBpZiB0aGUgWFRBTDE2TSBoYXMgc2V0dGxlZCwgZWxzZSAwLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGh3X2NwbV9pc194dGFsMTZtX3RyaW1tZWQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgWFRBTDE2X1RSSU1fUkVBRFkpOworfQorCisvKioKKyAqIFxicmllZiBDaGVjayBpZiB0aGUgUExMIGlzIG9uIGFuZCBoYXMgbG9ja2VkLgorICoKKyAqIFxyZXR1cm4gMSBpZiB0aGUgUExMIGhhcyBsb2NrZWQsIGVsc2UgMC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBod19jcG1faXNfcGxsX2xvY2tlZCh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoR1BSRUcsIFBMTF9TWVNfU1RBVFVTX1JFRywgUExMX0xPQ0tfRklORSk7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSB0aGUgUExMIGRpdmlkZXIuIFRoZSBvdXRwdXQgZnJlcXVlbmN5IGlzIHNldCB0byA0OE1Iei4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfcGxsX2RpdmlkZXIodm9pZCkKK3sKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBQTExfRElWMik7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgdGhlIFBMTCBkaXZpZGVyLiBUaGUgb3V0cHV0IGZyZXF1ZW5jeSBpcyBzZXQgdG8gOTZNSHouCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGlzYWJsZV9wbGxfZGl2aWRlcih2b2lkKQoreworICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFBMTF9ESVYyKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBzdGF0dXMgb2YgdGhlIFBMTCBkaXZpZGVyLgorICoKKyAqIFxyZXR1cm4gMCBpZiB0aGUgZGl2aWRlciBpcyBkaXNhYmxlZCwgMSBpZiB0aGUgZGl2aWRlciBpcyBlbmFibGVkLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGh3X2NwbV9nZXRfcGxsX2RpdmlkZXJfc3RhdHVzKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFBMTF9ESVYyKTsKK30KKworLyoqCisgKiBcYnJpZWYgUmV0dXJuIHRoZSBjbG9jayB1c2VkIGFzIHRoZSBzeXN0ZW0gY2xvY2suCisgKgorICogXHJldHZhbCBTWVNfQ0xLX0lTX1hUQUwxNk0gQ3J5c3RhbCBvc2NpbGxhdG9yCisgKiBccmV0dmFsIFNZU19DTEtfSVNfUkMxNiBSQyBvc2NpbGxhdG9yCisgKiBccmV0dmFsIFNZU19DTEtfSVNfTFAgTG93IFBvd2VyIGNsb2NrCisgKiBccmV0dmFsIFNZU19DTEtfSVNfUExMIFBMTAorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGh3X2NwbV9nZXRfc3lzY2xrKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFNZU19DTEtfU0VMKTsKK30KKworLyoqCisgKiBcYnJpZWYgUmV0dXJuIHRoZSBkaXZpZGVyIG9mIHRoZSBBTUJBIEhpZ2ggU3BlZWQgQnVzLgorICoKKyAqIFxyZXR2YWwgMCBEaXZpZGUgYnkgMQorICogXHJldHZhbCAxIERpdmlkZSBieSAyCisgKiBccmV0dmFsIDIgRGl2aWRlIGJ5IDQKKyAqIFxyZXR2YWwgMyBEaXZpZGUgYnkgOAorICogXHJldHZhbCAzIERpdmlkZSBieSAxNgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGh3X2NwbV9nZXRfaGNsa19kaXYodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgaHdfY3BtX2dldF9oY2xrX2Rpdih2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBIQ0xLX0RJVik7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgZGl2aWRlciBvZiB0aGUgQU1CQSBIaWdoIFNwZWVkIEJ1cy4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9zZXRfaGNsa19kaXYodWludDMyX3QgZGl2KSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9zZXRfaGNsa19kaXYodWludDMyX3QgZGl2KQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBIQ0xLX0RJViwgZGl2KTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIFJldHVybiB0aGUgZGl2aWRlciBvZiB0aGUgQU1CQSBQZXJpcGhlcmFsIEJ1cy4KKyAqCisgKiBccmV0dmFsIDAgRGl2aWRlIGJ5IDEKKyAqIFxyZXR2YWwgMSBEaXZpZGUgYnkgMgorICogXHJldHZhbCAyIERpdmlkZSBieSA0CisgKiBccmV0dmFsIDMgRGl2aWRlIGJ5IDgKKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBod19jcG1fZ2V0X3BjbGtfZGl2KHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIFBDTEtfRElWKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBkaXZpZGVyIG9mIHRoZSBBTUJBIFBlcmlwaGVyYWwgQnVzLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3NldF9wY2xrX2Rpdih1aW50MzJfdCBkaXYpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3NldF9wY2xrX2Rpdih1aW50MzJfdCBkaXYpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VURihDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIFBDTEtfRElWLCBkaXYpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgd2hldGhlciBhbnkgb2YgdGhlIFRpbWVyMCBhbmQgMiBpcyBhY3RpdmUgYW5kIHVzZXMgdGhlIHN5c3RlbSBjbG9jay4KKyAqCisgKiBccmV0dXJuIFRydWUgaWYgVGltZXIgMCBvciAyIGlzIGFjdGl2ZSBhbmQgdXNlcyB0aGUgc3lzdGVtIGNsb2NrIGZvciBjb3VudGluZywgZWxzZSBmYWxzZS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSBib29sIGh3X2NwbV90aW1lcjAyX3VzZXNfc3lzY2xrKHZvaWQpCit7CisgICAgICAgIHVpbnQzMl90IHJlZ3ZhbDsKKyAgICAgICAgYm9vbCByZXQgPSB0cnVlOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZWd2YWwgPSBDUkdfVE9QLT5DTEtfVE1SX1JFRzsKKworICAgICAgICAgICAgICAgIC8vIENoZWNrIFRpbWVyMCBjbG9jaworICAgICAgICAgICAgICAgIGlmICgocmVndmFsICYgUkVHX01TSyhDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMF9FTkFCTEUpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVndmFsICYgUkVHX01TSyhDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMF9DTEtfU0VMKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENoZWNrIFRpbWVyMiBjbG9jaworICAgICAgICAgICAgICAgIGlmICgocmVndmFsICYgUkVHX01TSyhDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMl9FTkFCTEUpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVndmFsICYgUkVHX01TSyhDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMl9DTEtfU0VMKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICB9IHdoaWxlICgwKTsKKworICAgICAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIFxicmllZiBDaGVjayB3aGV0aGVyIGEgTUFDIGlzIGFjdGl2ZS4KKyAqCisgKiBccmV0dXJuIFRydWUgaWYgTUFDIGlzIGFjdGl2ZSwgZWxzZSBmYWxzZS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSBib29sIGh3X2NwbV9tYWNfaXNfYWN0aXZlKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1VTRV9GVERGCisgICAgICAgIGlmIChSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIEZUREZfSVNfVVApKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTRV9CTEUKKyAgICAgICAgaWYgKFJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgQkxFX0lTX1VQKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIHdoZXRoZXIgdGhlIFJDMzJLIGlzIHRoZSBMb3cgUG93ZXIgY2xvY2suCisgKgorICogXHJldHVybiBUcnVlIGlmIFJDMzJLIGlzIHRoZSBMUCBjbG9jaywgZWxzZSBmYWxzZS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSBib29sIGh3X2NwbV9scF9pc19yYzMyayh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLXzMyS19SRUcsIFJDMzJLX0VOQUJMRSkgJiYKKyAgICAgICAgICAgICAgKFJFR19HRVRGKENSR19UT1AsIENMS19DVFJMX1JFRywgQ0xLMzJLX1NPVVJDRSkgPT0gTFBfQ0xLX0lTX1JDMzJLKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IFJDWCBhcyB0aGUgTG93IFBvd2VyIGNsb2NrLgorICoKKyAqIFx3YXJuaW5nIFRoZSBSQ1ggbXVzdCBoYXZlIGJlZW4gZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fbHBfc2V0X3JjeCh2b2lkKQoreworICAgICAgICBBU1NFUlRfV0FSTklORyhSRUdfR0VURihDUkdfVE9QLCBDTEtfUkNYMjBLX1JFRywgUkNYMjBLX0VOQUJMRSkgPT0gMSk7CisKKyAgICAgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBDTEszMktfU09VUkNFLCBMUF9DTEtfSVNfUkNYKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IFhUQUwzMksgYXMgdGhlIExvdyBQb3dlciBjbG9jay4KKyAqCisgKiBcd2FybmluZyBUaGUgWFRBTDMySyBtdXN0IGhhdmUgYmVlbiBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24hCisgKiAgICAgICAgSW50ZXJydXB0cyBtdXN0IGhhdmUgYmVlbiBkaXNhYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fbHBfc2V0X3h0YWwzMmsodm9pZCkKK3sKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoX19nZXRfUFJJTUFTSygpID09IDEpOworICAgICAgICBBU1NFUlRfV0FSTklORyhSRUdfR0VURihDUkdfVE9QLCBDTEtfMzJLX1JFRywgWFRBTDMyS19FTkFCTEUpID09IDEpOworCisgICAgICAgIFJFR19TRVRGKENSR19UT1AsIENMS19DVFJMX1JFRywgQ0xLMzJLX1NPVVJDRSwgTFBfQ0xLX0lTX1hUQUwzMkspOworfQorCisvKioKKyAqIFxicmllZiBDb25maWd1cmUgcGluIHRvIGNvbm5lY3QgYW4gZXh0ZXJuYWwgZGlnaXRhbCBjbG9jay4KKyAqCisgKi8KK3ZvaWQgaHdfY3BtX2NvbmZpZ3VyZV9leHQzMmtfcGlucyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU2V0IGFuIGV4dGVybmFsIGRpZ2l0YWwgY2xvY2sgYXMgdGhlIExvdyBQb3dlciBjbG9jay4KKyAqCisgKiBcd2FybmluZyBJbnRlcnJ1cHRzIG11c3QgaGF2ZSBiZWVuIGRpc2FibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24hCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9scF9zZXRfZXh0MzJrKHZvaWQpCit7CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKF9fZ2V0X1BSSU1BU0soKSA9PSAxKTsKKworICAgICAgICBSRUdfU0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIENMSzMyS19TT1VSQ0UsIExQX0NMS19JU19FWFRFUk5BTCk7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBSQzMySy4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfcmMzMmsodm9pZCkKK3sKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQ0xLXzMyS19SRUcsIFJDMzJLX0VOQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgUkMzMksuCisgKgorICogXHdhcm5pbmcgUkMzMksgbXVzdCBub3QgYmUgdGhlIExQIGNsb2NrLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2Rpc2FibGVfcmMzMmsodm9pZCkKK3sKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBDTEszMktfU09VUkNFKSAhPSBMUF9DTEtfSVNfUkMzMkspOworCisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIENMS18zMktfUkVHLCBSQzMyS19FTkFCTEUpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgUkMzMksgYXMgdGhlIExvdyBQb3dlciBjbG9jay4KKyAqCisgKiBcd2FybmluZyBUaGUgUkMzMksgbXVzdCBoYXZlIGJlZW4gZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fbHBfc2V0X3JjMzJrKHZvaWQpCit7CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKFJFR19HRVRGKENSR19UT1AsIENMS18zMktfUkVHLCBSQzMyS19FTkFCTEUpID09IDEpOworCisgICAgICAgIFJFR19TRVRGKENSR19UT1AsIENMS19DVFJMX1JFRywgQ0xLMzJLX1NPVVJDRSwgTFBfQ0xLX0lTX1JDMzJLKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlIFJDWC4gVGhpcyBtdXN0IGJlIGRvbmUgb25seSBvbmNlIHNpbmNlIHRoZSByZWdpc3RlciBpcyByZXRhaW5lZC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9jb25maWd1cmVfcmN4KHZvaWQpCit7CisgICAgICAgIHVpbnQzMl90IHJlZzsKKworICAgICAgICByZWcgPSBDUkdfVE9QLT5DTEtfUkNYMjBLX1JFRzsKKworICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIENMS19SQ1gyMEtfUkVHLCBSQ1gyMEtfTlRDLCByZWcsIDB4Qyk7IC8vIDB4NEMyCisgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgQ0xLX1JDWDIwS19SRUcsIFJDWDIwS19CSUFTLCByZWcsIDApOyAvLyBMYXN0IHJldmlldyBkYXRlOiBGZWIgMTUsIDIwMTYgLSAxMjoyNTo0NworICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIENMS19SQ1gyMEtfUkVHLCBSQ1gyMEtfVFJJTSwgcmVnLCAyKTsKKyAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBDTEtfUkNYMjBLX1JFRywgUkNYMjBLX0xPV0YsIHJlZywgMSk7CisKKyAgICAgICAgQ1JHX1RPUC0+Q0xLX1JDWDIwS19SRUcgPSByZWc7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBSQ1ggYnV0IGRvZXMgbm90IHNldCBpdCBhcyB0aGUgTFAgY2xvY2suCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZW5hYmxlX3JjeCh2b2lkKQoreworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfUkNYMjBLX1JFRywgUkNYMjBLX0VOQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgUkNYLgorICoKKyAqIFx3YXJuaW5nIFJDWCBtdXN0IG5vdCBiZSB0aGUgTFAgY2xvY2sKKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9kaXNhYmxlX3JjeCh2b2lkKQoreworICAgICAgICBBU1NFUlRfV0FSTklORyhSRUdfR0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIENMSzMyS19TT1VSQ0UpICE9IExQX0NMS19JU19SQ1gpOworCisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIENMS19SQ1gyMEtfUkVHLCBSQ1gyMEtfRU5BQkxFKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlIFhUQUwzMktYIHBpbnMuCisgKgorICovCit2b2lkIGh3X2NwbV9jb25maWd1cmVfeHRhbDMya19waW5zKHZvaWQpOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmUgWFRBTDMyS1guIFRoaXMgbXVzdCBiZSBkb25lIG9ubHkgb25jZSBzaW5jZSB0aGUgcmVnaXN0ZXIgaXMgcmV0YWluZWQuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fY29uZmlndXJlX3h0YWwzMmsodm9pZCkKK3sKKyAgICAgICAgdWludDMyX3QgcmVnOworCisgICAgICAgIC8vIENvbmZpZ3VyZSB4dGFsLgorICAgICAgICByZWcgPSBDUkdfVE9QLT5DTEtfMzJLX1JFRzsKKyAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBDTEtfMzJLX1JFRywgWFRBTDMyS19DVVIsIHJlZywgNSk7ICAgICAgIC8vIExhc3QgcmV2aWV3IGRhdGU6IEZlYiAxNSwgMjAxNiAtIDEyOjI1OjQ3CisgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgQ0xLXzMyS19SRUcsIFhUQUwzMktfUkJJQVMsIHJlZywgMyk7ICAgICAvLyBMYXN0IHJldmlldyBkYXRlOiBGZWIgMTUsIDIwMTYgLSAxMjoyNTo0NworCisgICAgICAgIGlmIChkZ19jb25maWdFWFRfTFBfSVNfRElHSVRBTCkgeworICAgICAgICAgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgQ0xLXzMyS19SRUcsIFhUQUwzMktfRElTQUJMRV9BTVBSRUcsIHJlZywgMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBDTEtfMzJLX1JFRywgWFRBTDMyS19ESVNBQkxFX0FNUFJFRywgcmVnLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIENSR19UT1AtPkNMS18zMktfUkVHID0gcmVnOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgWFRBTDMySyBidXQgZG9lcyBub3Qgc2V0IGl0IGFzIHRoZSBMUCBjbG9jay4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfeHRhbDMyayh2b2lkKQoreworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfMzJLX1JFRywgWFRBTDMyS19FTkFCTEUpOworfQorCisvKioKKyAqIFxicmllZiBEaXNhYmxlIFhUQUwzMksuCisgKgorICogXHdhcm5pbmcgWFRBTDMySyBtdXN0IG5vdCBiZSB0aGUgTFAgY2xvY2suCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGlzYWJsZV94dGFsMzJrKHZvaWQpCit7CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKFJFR19HRVRGKENSR19UT1AsIENMS19DVFJMX1JFRywgQ0xLMzJLX1NPVVJDRSkgIT0gTFBfQ0xLX0lTX1hUQUwzMkspOworCisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIENMS18zMktfUkVHLCBYVEFMMzJLX0VOQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIHRoZSBzdGF0dXMgb2YgYSByZXF1ZXN0ZWQgY2FsaWJyYXRpb24uCisgKgorICogXHJldHVybiB0cnVlIGlmIHRoZSBjYWxpYnJhdGlvbiBoYXMgZmluaXNoZWQgKG9yIG5ldmVyIHJ1bikgZWxzZSBmYWxzZS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSBib29sIGh3X2NwbV9jYWxpYnJhdGlvbl9maW5pc2hlZCh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoQU5BTUlTQywgQ0xLX1JFRl9TRUxfUkVHLCBSRUZfQ0FMX1NUQVJUKSA9PSAwOworfQorCisvKioKKyAqIFxicmllZiBTdGFydCBjYWxpYnJhdGlvbiBvZiBhIGNsb2NrLgorICoKKyAqIFx3YXJuaW5nIFhUQUwxNk0gbXVzdCBoYXZlIHNldHRsZWQgYW5kIHRoZSBzeXN0ZW0gY2xvY2sgYmUgdGhlIFhUQUwxNk0gb3IgdGhlIFBMTC4KKyAqCisgKi8KK3ZvaWQgaHdfY3BtX3N0YXJ0X2NhbGlicmF0aW9uKGNhbF9jbGtfdCBjbGtfdHlwZSwgdWludDMyX3QgY3ljbGVzKTsKKworLyoqCisgKiBcYnJpZWYgUmV0dXJuIHRoZSBjYWxpYnJhdGlvbiByZXN1bHRzLgorICoKKyAqIFx3YXJuaW5nIFhUQUwxNk0gbXVzdCBoYXZlIHNldHRsZWQgYW5kIHRoZSBzeXN0ZW0gY2xvY2sgYmUgdGhlIFhUQUwxNk0gb3IgdGhlIFBMTC4KKyAqCisgKi8KK3VpbnQzMl90IGh3X2NwbV9nZXRfY2FsaWJyYXRpb25fZGF0YSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdGhlIFJDMTZNIGlzIHRoZSBTeXN0ZW0gQ2xvY2suCisgKgorICogXHJldHVybiAxIGlmIHRoZSBSQzE2TSBpcyB0aGUgU3lzdGVtIENsb2NrIGVsc2UgMC4KKyAqCisgKi8KK3VpbnQzMl90IGh3X2NwbV9zeXNjbGtfaXNfcmMxNih2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdGhlIFhUQUwxNk0gaXMgdGhlIFN5c3RlbSBDbG9jay4KKyAqCisgKiBccmV0dXJuIDEgaWYgdGhlIFhUQUwxNk0gaXMgdGhlIFN5c3RlbSBDbG9jayBlbHNlIDAuCisgKgorICovCit1aW50MzJfdCBod19jcG1fc3lzY2xrX2lzX3h0YWwxNm0odm9pZCk7CisKKy8qKgorICogXGJyaWVmIFNldHVwIHN5c3RlbSBmb3IgYSAzMk1IeiAvIDE2TUh6IGV4dGVybmFsIGNyeXN0YWwuCisgKgorICogXHBhcmFtW2luXSBmcmVxIHRydWUgaWYgMzJNSHogY3J5c3RhbCBpcyBjb25uZWN0ZWQsIGZhbHNlIGlmIDE2TUh6IGNyeXN0YWwgaXMgdXNlZAorICoKKyAqIFxyZXR1cm4gdm9pZAorICoKKyAqLwordm9pZCBod19jcG1fc2V0X2Rpdm4oYm9vbCBmcmVxKTsKKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdGhlIHN5c3RlbSBjbG9jayBjYW4gYmUgc3dpdGNoZWQgdG8gdGhlIFJDMTYuCisgKgorICogXGRldGFpbHMgQ2hlY2tzIHdoZXRoZXIgTUFDLCBBUEhZL0RQSFksIENPRVgsIFNSQywgUERNLCBVQVJUIGFuZCBVU0IgYXJlIGVuYWJsZWQuIElmIGFueSBvZgorICogICAgICAgICAgdGhlc2UgYmxvY2tzIGlzIGVuYWJsZWQgdGhlbiB0aGUgc3dpdGNoaW5nIGlzIG5vdCBhbGxvd2VkLiBJdCBhbHNvIGNoZWNrcyB3aGV0aGVyIHRoZQorICogICAgICAgICAgVGltZXIwLzIsIFBDTSwgQURDLCBJMkMgYW5kIFNQSSBhcmUgYWN0aXZlIGFuZCwgaWYgYW55IG9mIHRoZW0gaXMsIGlmIGl0IGlzIHVzaW5nIHRoZQorICogICAgICAgICAgRElWTiBjbG9jay4gSW4gdGhpcyBjYXNlIHRoZSBzd2l0Y2hpbmcgaXMgbm90IGFsbG93ZWQuCisgKgorICogXHJldHVybiB0cnVlIGlmIGl0IGlzIGFsbG93ZWQgdG8gc3dpdGNoIHRvIFJDMTYgZWxzZSBmYWxzZS4KKyAqCisgKi8KK2Jvb2wgaHdfY3BtX2lzX3JjMTZfYWxsb3dlZCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU2V0IFN5c3RlbSBjbG9jay4KKyAqCisgKiBccGFyYW1baW5dIG1vZGUgVGhlIG5ldyBzeXN0ZW0gY2xvY2suCisgKgorICovCit2b2lkIGh3X2NwbV9zZXRfc3lzY2xrKHVpbnQzMl90IG1vZGUpOworCisvKioKKyAqIFxicmllZiBBZGQgYSBzaG9ydCBkZWxheSBsb29wLgorICoKKyAqLwordm9pZCBod19jcG1fc2hvcnRfZGVsYXkodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSB0aGUgUExMLgorICoKKyAqLwordm9pZCBod19jcG1fcGxsX3N5c19vbih2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSB0aGUgUExMLgorICoKKyAqIFx3YXJuaW5nIFRoZSBTeXN0ZW0gY2xvY2sgbXVzdCBoYXZlIGJlZW4gc2V0IHRvIFhUQUwxNk0gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiEKKyAqCisgKi8KK3ZvaWQgaHdfY3BtX3BsbF9zeXNfb2ZmKHZvaWQpOworCisvKioKKyAqIFxicmllZiBFbmFibGUgdGhlIDNWMyBjbGFtcC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV8zdjNfY2xhbXBfb24odm9pZCkKK3sKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQU9OX1NQQVJFX1JFRywgRU5fQkFUU1lTX1JFVCk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgdGhlIDNWMyBjbGFtcC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV8zdjNfY2xhbXBfb2ZmKHZvaWQpCit7CisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIEFPTl9TUEFSRV9SRUcsIEVOX0JBVFNZU19SRVQpOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgT1NDMTZNIGFtcGxpdHVkZSByZWd1bGF0aW9uCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfb3NjMTZtX2FtcF9yZWcodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZW5hYmxlX29zYzE2bV9hbXBfcmVnKHZvaWQpCit7CisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIEFPTl9TUEFSRV9SRUcsIE9TQzE2X0hPTERfQU1QX1JFRyk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgT1NDMTZNIGFtcGxpdHVkZSByZWd1bGF0aW9uCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9kaXNhYmxlX29zYzE2bV9hbXBfcmVnKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2Rpc2FibGVfb3NjMTZtX2FtcF9yZWcodm9pZCkKK3sKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQU9OX1NQQVJFX1JFRywgT1NDMTZfSE9MRF9BTVBfUkVHKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0cyB0aGUgc3RhdGUgb2YgdGhlIDF2OCByYWlsLgorICoKKyAqIFxwYXJhbVtpbl0gc3RhdGUgdHJ1ZSwgdGhlIDF2OCByYWlsIGlzIGNvbnRyb2xsZWQgdmlhIGRnX2NvbmZpZyBtYWNyb3MKKyAqICAgICAgICAgICAgICAgICAgZmFsc2UsIHRoZSAxdjggcmFpbCBpcyBvZmYKKyAqCisgKi8KK3ZvaWQgaHdfY3BtX3NldF8xdjhfc3RhdGUoYm9vbCBzdGF0ZSk7CisKKy8qKgorICogXGJyaWVmIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSAxdjggcmFpbC4KKyAqCisgKiBccmV0dXJuIGZhbHNlIGlmIHRoZSAxdjggcmFpbCBpcyBvZmYsIHRydWUgaWYgaXQgaXMgY29udHJvbGxlZCB2aWEgZGdfY29uZmlnIG1hY3JvcworICoKKyAqLworX19SRVRBSU5FRF9DT0RFIGJvb2wgaHdfY3BtX2dldF8xdjhfc3RhdGUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSB0aGUgTERPX1ZCQVRfUkVULgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2xkb192YmF0X3JldF9vbih2b2lkKQoreworICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fVkJBVF9SRVRfRElTQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgdGhlIExET19WQkFUX1JFVC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9sZG9fdmJhdF9yZXRfb2ZmKHZvaWQpCit7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET19WQkFUX1JFVF9ESVNBQkxFKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSB0aGUgTERPX0lPX1JFVCBhbmQgdGhlIExET19JTzJfUkVULgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2xkb19pb19yZXRfb2ZmKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2xkb19pb19yZXRfb2ZmKHZvaWQpCit7CisgICAgICAgIHVpbnQzMl90IHJlZyA9IENSR19UT1AtPkxET19DVFJMMl9SRUc7CisKKyAgICAgICAgaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCA9PSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKGRnX2NvbmZpZ1VTRV9CT0QgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQk9EX0NUUkwyX1JFRywgQk9EXzFWOF9GTEFTSF9FTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9GTEFTSF9SRVRfRElTQUJMRSwgcmVnLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkZ19jb25maWdQT1dFUl8xVjhQID09IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGdfY29uZmlnVVNFX0JPRCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBCT0RfQ1RSTDJfUkVHLCBCT0RfMVY4X1BBX0VOKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X1BBX1JFVF9ESVNBQkxFLCByZWcsIDEpOworICAgICAgICB9CisKKyAgICAgICAgQ1JHX1RPUC0+TERPX0NUUkwyX1JFRyA9IHJlZzsKK30KKworLyoKKyAqIFxicmllZiBTZXQgdGhlIExET19SQURJT19TRVRWREQgdG8gdGhlIHByb3BlciBsZXZlbCAoMHgyID0gMS40MFYpCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9yZXNldF9yYWRpb192ZGQodm9pZCkKK3sKKyAgICAgICAgUkVHX1NFVEYoQ1JHX1RPUCwgTERPX0NUUkwxX1JFRywgTERPX1JBRElPX1NFVFZERCwgMHgyKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIHRoZSBMRE9zLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3N0YXJ0X2xkb3Modm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc3RhcnRfbGRvcyh2b2lkKQoreworICAgICAgICB1aW50MzJfdCByZWcgPSBDUkdfVE9QLT5MRE9fQ1RSTDJfUkVHOworICAgICAgICBpZiAoKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0IpICYmCisgICAgICAgICAgICAgICAgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfU1RFUCA9PSBCTEFDS19PUkNBX0lDX1NURVBfQSkpIHsKKyAgICAgICAgICAgICAgICBSRUdfU0VURihDUkdfVE9QLCBMRE9fQ1RSTDFfUkVHLCBMRE9fVkJBVF9SRVRfTEVWRUwsIDApOworICAgICAgICB9CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIExET19DVFJMMV9SRUcsIExET19SQURJT19FTkFCTEUpOworICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjJfT04sIHJlZywgMSk7CisKKyAgICAgICAgaWYgKChkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFID09IDEpICYmIGh3X2NwbV9nZXRfMXY4X3N0YXRlKCkpIHsKKyAgICAgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjhfRkxBU0hfT04sIHJlZywgMSk7CisgICAgICAgICAgICAgICAgaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjhfRkxBU0hfUkVUX0RJU0FCTEUsIHJlZywgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVHX0NMUl9GSUVMRChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X0ZMQVNIX1JFVF9ESVNBQkxFLCByZWcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBSRUdfQ0xSX0ZJRUxEKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjhfRkxBU0hfT04sIHJlZyk7CisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X0ZMQVNIX1JFVF9ESVNBQkxFLCByZWcsIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOFAgPT0gMSkgeworICAgICAgICAgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9QQV9PTiwgcmVnLCAxKTsKKyAgICAgICAgICAgICAgICBSRUdfQ0xSX0ZJRUxEKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjhfUEFfUkVUX0RJU0FCTEUsIHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUkVHX0NMUl9GSUVMRChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X1BBX09OLCByZWcpOworICAgICAgICAgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9QQV9SRVRfRElTQUJMRSwgcmVnLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIENSR19UT1AtPkxET19DVFJMMl9SRUcgPSByZWc7Cit9CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZSB0aGUgRENEQy4KKyAqCisgKi8KK3ZvaWQgaHdfY3BtX2RjZGNfY29uZmlnKHZvaWQpOworCisvKioKKyAqIFxicmllZiBFbmFibGUgdGhlIERDREMuCisgKgorICovCit2b2lkIGh3X2NwbV9kY2RjX29uKHZvaWQpOworCisvKioKKyAqIFxicmllZiBQcmVwYXJlIHRoZSBEQ0RDIGZvciBzbGVlcC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9kY2RjX3NsZWVwKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKwordm9pZCBod19jcG1fZGNkY19zbGVlcCh2b2lkKQoreworICAgICAgICAvLyBEZWFjdGl2YXRlIERDREMgMVY0IG91dHB1dCByYWlsCisgICAgICAgIERDREMtPkRDRENfVjE0XzFfUkVHICY9IH4oUkVHX01TSyhEQ0RDLCBEQ0RDX1YxNF8xX1JFRywgRENEQ19WMTRfRU5BQkxFX0hWKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhEQ0RDLCBEQ0RDX1YxNF8xX1JFRywgRENEQ19WMTRfRU5BQkxFX0xWKSk7CisKKyAgICAgICAgLy8gU2V0IERDREMgdG8gc2xlZXAgbW9kZQorICAgICAgICBSRUdfU0VURihEQ0RDLCBEQ0RDX0NUUkxfMF9SRUcsIERDRENfTU9ERSwgMik7CisKKyAgICAgICAgLy8gRGlzYWJsZSBSZXRlbnRpb24gTERPcyBmb3IgMVY4IGFuZCAxVjhQCisgICAgICAgIENSR19UT1AtPkxET19DVFJMMl9SRUcgfD0gKCgxIDw8IFJFR19QT1MoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9QQV9SRVRfRElTQUJMRSkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgUkVHX1BPUyhDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X0ZMQVNIX1JFVF9ESVNBQkxFKSkpOworCisgICAgICAgIC8vIEVuYWJsZSBMRE9fQ09SRSBiZWZvcmUgZ29pbmcgdG8gc2xlZXAKKyAgICAgICAgaHdfY3BtX3R1cm5fMV8yVl9vbigpOworfQorCisvKioKKyAqIFxicmllZiBEaXNhYmxlIHRoZSBEQ0RDLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2RjZGNfb2ZmKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2RjZGNfb2ZmKHZvaWQpCit7CisgICAgICAgIC8vIEVuYWJsZSB0aGUgTERPcworICAgICAgICBod19jcG1fc3RhcnRfbGRvcygpOworCisgICAgICAgIC8vIFR1cm4gb2ZmIERDREMKKyAgICAgICAgRENEQy0+RENEQ19DVFJMXzBfUkVHICY9IH5SRUdfTVNLKERDREMsIERDRENfQ1RSTF8wX1JFRywgRENEQ19NT0RFKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgRENEQyBpcyBhY3RpdmUuCisgKgorICogXHJldHVybiBUcnVlLCBpZiB0aGUgRENEQyBpcyBhY3RpdmUgZWxzZSBmYWxzZS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSBib29sIGh3X2NwbV9kY2RjX2lzX2FjdGl2ZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSBib29sIGh3X2NwbV9kY2RjX2lzX2FjdGl2ZSh2b2lkKQoreworICAgICAgICByZXR1cm4gKFJFR19HRVRGKERDREMsIERDRENfQ1RSTF8wX1JFRywgRENEQ19NT0RFKSA9PSAxKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSB0aGUgRENEQyBhbmQgc3dpdGNoIHRvIExET3Mgd2l0aG91dCB0dXJuaW5nIG9mZiB0aGUgTERPX1JBRElPLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3N3aXRjaF90b19sZG9zKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3N3aXRjaF90b19sZG9zKHZvaWQpCit7CisgICAgICAgIC8vIEVuYWJsZSB0aGUgTERPcworICAgICAgICBod19jcG1fc3RhcnRfbGRvcygpOworCisgICAgICAgIC8vIFR1cm4gb2ZmIERDREMKKyAgICAgICAgRENEQy0+RENEQ19DVFJMXzBfUkVHICY9IH5SRUdfTVNLKERDREMsIERDRENfQ1RSTF8wX1JFRywgRENEQ19NT0RFKTsKK30KKworCisvKioKKyAqIFxicmllZiBTZXQgdGhlIGNvbmZpZ3VyZWQgdGltZSBmb3IgdGhlIHJlLWNoYXJnaW5nIG9mIHRoZSByZXRlbnRpb24gTERPcyBhbmQgdGhlIERDREMgcmFpbHMuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc2V0X3JlY2hhcmdlX3BlcmlvZCh1aW50MTZfdCBwZXJpb2QpCit7CisgICAgICAgIENSR19UT1AtPlNMRUVQX1RJTUVSX1JFRyA9IHBlcmlvZDsKK30KKworLyoqCisgKiBcYnJpZWYgUmVzZXQgdGhlIHRpbWUgZm9yIHRoZSByZS1jaGFyZ2luZyBvZiB0aGUgcmV0ZW50aW9uIExET3MgYW5kIHRoZSBEQ0RDIHJhaWxzIHRvIHplcm8uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fcmVzZXRfcmVjaGFyZ2VfcGVyaW9kKHZvaWQpCit7CisgICAgICAgIC8vIFNldCB0aGUgRENEQyBjaGFyZ2UgcGVyaW9kCisgICAgICAgIENSR19UT1AtPlNMRUVQX1RJTUVSX1JFRyA9IDA7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCAocGFydCBvZikgdGhlIHByZWZlcnJlZCBzZXR0aW5ncy4KKyAqCisgKi8KK3ZvaWQgaHdfY3BtX3NldF9wcmVmZXJyZWRfdmFsdWVzKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTZXQgdGhlIEdQSU8gdXNlZCBmb3IgdGhlIFNXIGN1cnNvciB0byBIaWdoLVouCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc2V0dXBfc3dfY3Vyc29yKHZvaWQpCit7CisgICAgICAgIGlmIChkZ19jb25maWdVU0VfU1dfQ1VSU09SID09IDEpIHsKKyAgICAgICAgICAgICAgICBTV19DVVJTT1JfR1BJTyA9IDB4MDAwOworICAgICAgICB9Cit9CisKKy8qKgorICogXGJyaWVmIFRyaWdnZXJzIHRoZSBHUElPIHVzZWQgZm9yIHRoZSBTVyBjdXJzb3IuCisgKgorICovCit2b2lkIGh3X2NwbV90cmlnZ2VyX3N3X2N1cnNvcih2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU3RvcCB0aGUgY2xvY2sgdG8gdGhlIFJGIHVuaXQuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fcmZjdV9jbGtfb2ZmKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3JmY3VfY2xrX29mZih2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQ0xLX1JBRElPX1JFRywgUkZDVV9FTkFCTEUpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIHRoZSBkZWJ1Z2dlci4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfZGVidWdnZXIodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZW5hYmxlX2RlYnVnZ2VyKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBTWVNfQ1RSTF9SRUcsIERFQlVHR0VSX0VOQUJMRSk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBEaXNhYmxlIHRoZSBkZWJ1Z2dlci4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9kaXNhYmxlX2RlYnVnZ2VyKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2Rpc2FibGVfZGVidWdnZXIodm9pZCkKK3sKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIFNZU19DVFJMX1JFRywgREVCVUdHRVJfRU5BQkxFKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHRoZSBkZWJ1Z2dlciBpcyBhdHRhY2hlZC4KKyAqCisgKiBccmV0dXJuIHRydWUsIGlmIHRoZSBkZWJ1Z2dlciBpcyBhdHRhY2hlZCwgZWxzZSBmYWxzZS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSBib29sIGh3X2NwbV9pc19kZWJ1Z2dlcl9hdHRhY2hlZCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSBib29sIGh3X2NwbV9pc19kZWJ1Z2dlcl9hdHRhY2hlZCh2b2lkKQoreworICAgICAgICByZXR1cm4gKFJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgREJHX0lTX0FDVElWRSkgIT0gMCk7Cit9CisKKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgYW55IERNQSBjaGFubmVsIGlzIGFjdGl2ZS4KKyAqCisgKiBccmV0dXJuIHRydWUgaWYgYSBjaGFubmVsIGlzIGFjdGl2ZSwgZmFsc2UgaWYgYWxsIGNoYW5uZWxzIGFyZSBpbmFjdGl2ZS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSBib29sIGh3X2NwbV9jaGVja19kbWEodm9pZCkKK3sKKyAgICAgICAgYm9vbCByZXQgPSBmYWxzZTsKKworICAgICAgICBpZiAoKChETUEtPkRNQTBfQ1RSTF9SRUcgJiBSRUdfTVNLKERNQSwgRE1BMF9DVFJMX1JFRywgRE1BX09OKSkgPT0gMSkgfHwKKyAgICAgICAgICAgICgoRE1BLT5ETUExX0NUUkxfUkVHICYgUkVHX01TSyhETUEsIERNQTFfQ1RSTF9SRUcsIERNQV9PTikpID09IDEpIHx8CisgICAgICAgICAgICAoKERNQS0+RE1BMl9DVFJMX1JFRyAmIFJFR19NU0soRE1BLCBETUEyX0NUUkxfUkVHLCBETUFfT04pKSA9PSAxKSB8fAorICAgICAgICAgICAgKChETUEtPkRNQTNfQ1RSTF9SRUcgJiBSRUdfTVNLKERNQSwgRE1BM19DVFJMX1JFRywgRE1BX09OKSkgPT0gMSkgfHwKKyAgICAgICAgICAgICgoRE1BLT5ETUE0X0NUUkxfUkVHICYgUkVHX01TSyhETUEsIERNQTRfQ1RSTF9SRUcsIERNQV9PTikpID09IDEpIHx8CisgICAgICAgICAgICAoKERNQS0+RE1BNV9DVFJMX1JFRyAmIFJFR19NU0soRE1BLCBETUE1X0NUUkxfUkVHLCBETUFfT04pKSA9PSAxKSB8fAorICAgICAgICAgICAgKChETUEtPkRNQTZfQ1RSTF9SRUcgJiBSRUdfTVNLKERNQSwgRE1BNl9DVFJMX1JFRywgRE1BX09OKSkgPT0gMSkgfHwKKyAgICAgICAgICAgICgoRE1BLT5ETUE3X0NUUkxfUkVHICYgUkVHX01TSyhETUEsIERNQTdfQ1RSTF9SRUcsIERNQV9PTikpPT0gMSkgKXsKKyAgICAgICAgICAgICAgICByZXQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBcYnJpZWYgICBJc3N1ZSBhIEhXIHJlc2V0IChkdWUgdG8gYSBmYXVsdCBjb25kaXRpb24pLgorICoKKyAqIFxkZXRhaWxzIEEgSFcgcmVzZXQgKFdET0cpIHdpbGwgYmUgZ2VuZXJhdGVkLiBUaGUgTk1JIEhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgYW5kICJzdGF0dXMiIHdpbGwgYmUKKyAqICAgICAgICAgIHN0b3JlZCBpbiB0aGUgUmV0ZW50aW9uIFJBTS4KKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSB2b2lkIGh3X2NwbV9yZXNldF9zeXN0ZW0odm9pZCk7CisKKy8qKgorICogXGJyaWVmICAgSXNzdWUgYSBIVyByZXNldCAoaW50ZW50aW9uYWxseSwgaS5lLiBhZnRlciBhIFNXIHVwZ3JhZGUpLgorICoKKyAqIFxkZXRhaWxzIEEgSFcgcmVzZXQgKFdET0cpIHdpbGwgYmUgZ2VuZXJhdGVkLiBUaGUgTk1JIEhhbmRsZXIgaXMgYnlwYXNzZWQuIFRodXMsIG5vICJzdGF0dXMiIGlzCisgKiAgICAgICAgICBzdG9yZWQgaW4gdGhlIFJldGVudGlvbiBSQU0uCisgKgorICovCitfX1JFVEFJTkVEX0NPREUgdm9pZCBod19jcG1fcmVib290X3N5c3RlbSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQWRkIGRlbGF5IG9mIE4gdXNlY3MuCisgKgorICogXHBhcmFtW2luXSB1c2VjIFRoZSBudW1iZXIgb2YgdXNlY3MgdG8gd2FpdCBmb3IuCisgKgorICogXHJldHVybiB2b2lkCisgKgorICogXHdhcm5pbmcgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBpbnRlcnJ1cHRzIGRpc2FibGVkLiBJbiBvcmRlciB0byBzYXZlIHByb2Nlc3NpbmcKKyAqICAgICAgIHRpbWUgYW5kIGltcHJvdmUgYWNjdXJhY3ksIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBjbV9zeXNjbGsgYW5kIGNtX2FoYmNsayB2YWx1ZXMgYW5kIG5vdCB0aGUKKyAqICAgICAgIGFjdHVhbCByZWdpc3RlciBzZXR0aW5ncy4gVGhpcyBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBhZnRlciB0aGUgQ1BNIGhhcworICogICAgICAgcmVzdG9yZWQgdGhlIHRpbWluZyBzZXR0aW5ncy4gVGhpcyBvY2N1cnMgZWl0aGVyIG9uIHN0YXJ0LXVwLCB3aGVuIHRoZSBzeXN0ZW0gY2xvY2sgaXMKKyAqICAgICAgIFJDMTYsIG9yIGFmdGVyIHRoZSBYVEFMMTZNIGhhcyBzZXR0bGVkLCB3aGVuIHRoZSBzeXN0ZW0gY2xvY2sgaXMgWFRBTDE2TSBvciBQTEwuCisgKiAgICAgICBUaGVyZWZvcmUsIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBwbGF0Zm9ybSAoZWl0aGVyIHRoZSBDUE0gb3Igc29tZSBvdGhlciBlbnRpdHkpIGhhcworICogICAgICAgY29uZmlndXJlZCB2YWx1ZXMgc3lzX2Nsa190IGNtX3N5c2NsayBhbmQgYWhiX2Rpdl90IGNtX2FoYmNsaworICoKKyAqLworX19SRVRBSU5FRF9DT0RFIHZvaWQgaHdfY3BtX2RlbGF5X3VzZWModWludDMyX3QgdXNlYyk7CisKKy8qKgorICogXGJyaWVmICBUcmlnZ2VyIGEgR1BJTyB3aGVuIEFTU0VSVF9XQVJOSU5HKCkgb3IgQVNTRVJUX0VSUk9SKCkgaGl0cy4KKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSB2b2lkIGh3X2NwbV9hc3NlcnRfdHJpZ2dlcl9ncGlvKHZvaWQpOworCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX0NQTSAqLworCisjZW5kaWYgLyogQ1BNX0hfICovCisKKy8qKgorXH0KK1x9CitcfQorKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfZG1hLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZmM2MzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2RtYS5oCkBAIC0wLDAgKzEsMzgyIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBETUEKKyAqIFx7CisgKiBcYnJpZWYgRE1BIENvbnRyb2xsZXIKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfZG1hLmgKKyAqCisgKiBAYnJpZWYgRGVmaW5pdGlvbiBvZiBBUEkgZm9yIHRoZSBETUEgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgSFdfRE1BX0hfCisjZGVmaW5lIEhXX0RNQV9IXworCisjaWYgZGdfY29uZmlnVVNFX0hXX0RNQQorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKworLyoKKyogRU5VTUVSQVRJT04gREVGSU5JVElPTlMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisvKioKKyAqIFxicmllZiBETUEgY2hhbm5lbCBudW1iZXIKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0RNQV9DSEFOTkVMXzAgPSAwLCAgIC8qKjwgQ2hhbm5lbCBudW1iZXIgMCAqLworICAgICAgICBIV19ETUFfQ0hBTk5FTF8xID0gMSwgICAvKio8IENoYW5uZWwgbnVtYmVyIDEgKi8KKyAgICAgICAgSFdfRE1BX0NIQU5ORUxfMiA9IDIsICAgLyoqPCBDaGFubmVsIG51bWJlciAyICovCisgICAgICAgIEhXX0RNQV9DSEFOTkVMXzMgPSAzLCAgIC8qKjwgQ2hhbm5lbCBudW1iZXIgMyAqLworICAgICAgICBIV19ETUFfQ0hBTk5FTF80ID0gNCwgICAvKio8IENoYW5uZWwgbnVtYmVyIDQgKi8KKyAgICAgICAgSFdfRE1BX0NIQU5ORUxfNSA9IDUsICAgLyoqPCBDaGFubmVsIG51bWJlciA1ICovCisgICAgICAgIEhXX0RNQV9DSEFOTkVMXzYgPSA2LCAgIC8qKjwgQ2hhbm5lbCBudW1iZXIgNiAqLworICAgICAgICBIV19ETUFfQ0hBTk5FTF83ID0gNywgICAgLyoqPCBDaGFubmVsIG51bWJlciA3ICovCisgICAgICAgIEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQgPSA4IC8qKjwgSW52YWxpZCBDaGFubmVsIG51bWJlciAqLworfSBIV19ETUFfQ0hBTk5FTDsKKworLyoqCisgKiBcYnJpZWYgRE1BIGNoYW5uZWwgZW5hYmxlL2Rpc2FibGUKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0RNQV9TVEFURV9ESVNBQkxFRCA9IDB4MCwgICAgLyoqPCBETUEgZGlzYWJsZWQgKi8KKyAgICAgICAgSFdfRE1BX1NUQVRFX0VOQUJMRUQgPSAweDEgICAgICAvKio8IERNQSBlbmFibGVkICovCit9IEhXX0RNQV9TVEFURTsKKworLyoqCisgKiBcYnJpZWYgRE1BIGNoYW5uZWwgYnVzIHdpZHRoIHRyYW5zZmVyCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19ETUFfQldfQllURSA9IDB4MCwgICAgICAgICAgIC8qKjwgQnl0ZSAqLworICAgICAgICBIV19ETUFfQldfSEFMRldPUkQgPSAweDIsICAgICAgIC8qKjwgSGFsZndvcmQgKi8KKyAgICAgICAgSFdfRE1BX0JXX1dPUkQgPSAweDQgICAgICAgICAgICAvKio8IFdvcmQgKi8KK30gSFdfRE1BX0JXOworCisvKioKKyAqIFxicmllZiBETUEgY2hhbm5lbCBpbnRlcnJ1cHQgZW5hYmxlL2Rpc2FibGUKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0RNQV9JUlFfU1RBVEVfRElTQUJMRUQgPSAweDAsICAgICAgICAvKio8IERpc2FibGUgaW50ZXJydXB0IG9uIHRoaXMgY2hhbm5lbCAqLworICAgICAgICBIV19ETUFfSVJRX1NUQVRFX0VOQUJMRUQgPSAweDggICAgICAgICAgLyoqPCBFbmFibGUgaW50ZXJydXB0IG9uIHRoaXMgY2hhbm5lbCAqLworfSBIV19ETUFfSVJRX1NUQVRFOworCisvKioKKyAqIFxicmllZiBETUEgcmVxdWVzdCBpbnB1dCBtdWx0aXBsZXhlciBjb250cm9sbGVkCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19ETUFfRFJFUV9TVEFSVCA9IDB4MCwgICAgICAgIC8qKjwgRE1BIGNoYW5uZWwgc3RhcnRzIGltbWVkaWF0ZWx5ICovCisgICAgICAgIEhXX0RNQV9EUkVRX1RSSUdHRVJFRCA9IDB4MTAgICAgLyoqPCBETUEgY2hhbm5lbCBtdXN0IGJlIHRyaWdnZXJlZCBieSBwZXJpcGhlcmFsIERNQSByZXF1ZXN0ICovCit9IEhXX0RNQV9EUkVROworCisvKioKKyAqIFxicmllZiBJbmNyZW1lbnQgZGVzdGluYXRpb24gYWRkcmVzcyBtb2RlCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19ETUFfQklOQ19GQUxTRSA9IDB4MCwgICAgICAgIC8qKjwgRG8gbm90IGluY3JlbWVudCAqLworICAgICAgICBIV19ETUFfQklOQ19UUlVFICA9IDB4MjAgICAgICAgIC8qKjwgSW5jcmVtZW50IGFjY29yZGluZyB2YWx1ZSBvZiBCVyAqLworfSBIV19ETUFfQklOQzsKKworLyoqCisgKiBcYnJpZWYgSW5jcmVtZW50IG9mIHNvdXJjZSBhZGRyZXNzIG1vZGUKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0RNQV9BSU5DX0ZBTFNFID0gMHgwLCAgICAgICAgLyoqPCBEbyBub3QgaW5jcmVtZW50ICovCisgICAgICAgIEhXX0RNQV9BSU5DX1RSVUUgID0gMHg0MCAgICAgICAgLyoqPCBJbmNyZW1lbnQgYWNjb3JkaW5nIHZhbHVlIG9mIEJXICovCit9IEhXX0RNQV9BSU5DOworCisvKioKKyAqIFxicmllZiBDaGFubmVsIG1vZGUKKyAqCisgKiBJbiBub3JtYWwgbW9kZSB0aGUgRE1BIHRyYW5zZmVyIHN0b3BzIHRoZSB0cmFuc2ZlciBhZnRlcgorICogbGVuZ3RoIERNQXhfTEVOX1JFRy4KKyAqIEluIGNpcmN1bGFyIG1vZGUgdGhlIERNQSBjaGFubmVsIHJlcGVhdHMgdGhlIHRyYW5zZmVyCisgKiBhZnRlciBsZW5ndGggRE1BeF9MRU5fUkVHIHdpdGggdGhlIGluaXRpYWwgcmVnaXN0ZXIgdmFsdWVzCisgKiBETUF4X0FfU1RBUlRfUkVHLCBETUF4X0JfU1RBUlRfUkVHLCBETUF4X0xFTl9SRUcsIERNQXhfSU5UX1JFRy4KKyAqCisgKiBcbm90ZSBvbmx5IHdvcmtzIGlmIERSRVFfTU9ERSA9IDEKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0RNQV9NT0RFX05PUk1BTCA9IDB4MCwgICAgICAgLyoqPCBOb3JtYWwgbW9kZSAqLworICAgICAgICBIV19ETUFfTU9ERV9DSVJDVUxBUiA9IDB4ODAgICAgIC8qKjwgQ2lyY3VsYXIgbW9kZSAqLworfSBIV19ETUFfTU9ERTsKKworLyoqCisgKiBcYnJpZWYgQ2hhbm5lbCBwcmlvcml0eQorICoKKyAqIFNldCBwcmlvcml0eSBsZXZlbCBvZiBETUEgY2hhbm5lbCB0byBkZXRlcm1pbmUgd2hpY2ggRE1BCisgKiBjaGFubmVsIHdpbGwgYmUgYWN0aXZhdGVkIGluIGNhc2UgbW9yZSB0aGFuIG9uZSBETUEgY2hhbm5lbAorICogcmVxdWVzdHMgRE1BLgorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfRE1BX1BSSU9fMCA9IDB4MDAwLCAgLyoqPCBMb3dlc3QgcHJpb3JpdHkgKi8KKyAgICAgICAgSFdfRE1BX1BSSU9fMSA9IDB4MTAwLCAgLyoqPCAuLiAqLworICAgICAgICBIV19ETUFfUFJJT18yID0gMHgyMDAsICAvKio8IC4uICovCisgICAgICAgIEhXX0RNQV9QUklPXzMgPSAweDMwMCwgIC8qKjwgLi4gKi8KKyAgICAgICAgSFdfRE1BX1BSSU9fNCA9IDB4NDAwLCAgLyoqPCAuLiAqLworICAgICAgICBIV19ETUFfUFJJT181ID0gMHg1MDAsICAvKio8IC4uICovCisgICAgICAgIEhXX0RNQV9QUklPXzYgPSAweDYwMCwgIC8qKjwgLi4gKi8KKyAgICAgICAgSFdfRE1BX1BSSU9fNyA9IDB4NzAwICAgLyoqPCBIaWdoZXN0IHByaW9yaXR5ICovCit9IEhXX0RNQV9QUklPOworCisvKioKKyAqIFxicmllZiBETUEgaWRsZSBtb2RlCisgKgorICogSW4gYmxvY2tpbmcgbW9kZSB0aGUgRE1BIHBlcmZvcm1zIGEgZmFzdCBiYWNrLXRvLWJhY2sKKyAqIGNvcHksIGRpc2FibGluZyBidXMgYWNjZXNzIGZvciBhbnkgYnVzIG1hc3RlciB3aXRoIGxvd2VyIHByaW9yaXR5LgorICogSW4gaW50ZXJydXB0aW5nIG1vZGUgdGhlIERNQSBpbnNlcnRzIGEgd2FpdCBjeWNsZSBhZnRlciBlYWNoCisgKiBzdG9yZSBhbGxvd2luZyB0aGUgQ1IxNiB0byBzdGVhbCBjeWNsZXMgb3IgY2FjaGUgdG8gcGVyZm9ybSBhCisgKiBidXJzdCByZWFkLgorICoKKyAqIFxub3RlIGlmIERSRVFfTU9ERSA9IDEsIERNQV9JRExFIGRvZXMgbm90IGhhdmUgYW55IGVmZmVjdAorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfRE1BX0lETEVfQkxPQ0tJTkdfTU9ERSA9IDB4MDAwLCAgICAgIC8qKjwgQmxvY2tpbmcgbW9kZSAqLworICAgICAgICBIV19ETUFfSURMRV9JTlRFUlJVUFRJTkdfTU9ERSA9IDB4ODAwICAgLyoqPCBJbnRlcnJ1cHRpbmcgbW9kZSAqLworfSBIV19ETUFfSURMRTsKKworLyoqCisgKiBcYnJpZWYgRE1BIGluaXQgbW9kZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfRE1BX0lOSVRfQVhfQlhfQVlfQlkgPSAweDAwMDAsICAgICAgIC8qKjwgRE1BIHBlcmZvcm1zIGNvcHkgQTEgdG8gQjEsIEEyIHRvIEIyICovCisgICAgICAgIEhXX0RNQV9JTklUX0FYX0JYX0JZICAgID0gMHgxMDAwICAgICAgICAvKio8IERNQSBwZXJmb3JtcyBjb3B5IEExIHRvIEIxLCBCMiAqLworfSBIV19ETUFfSU5JVDsKKworLyoqCisgKiBcYnJpZWYgQ2hhbm5lbCByZXF1ZXN0IHRyaWdnZXIKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0RNQV9UUklHX1NQSV9SWFRYID0gMHgwLAorICAgICAgICBIV19ETUFfVFJJR19TUEkyX1JYVFggPSAweDEsCisgICAgICAgIEhXX0RNQV9UUklHX1VBUlRfUlhUWCA9IDB4MiwKKyAgICAgICAgSFdfRE1BX1RSSUdfVUFSVDJfUlhUWCA9IDB4MywKKyAgICAgICAgSFdfRE1BX1RSSUdfSTJDX1JYVFggPSAweDQsCisgICAgICAgIEhXX0RNQV9UUklHX0kyQzJfUlhUWCA9IDB4NSwKKyAgICAgICAgSFdfRE1BX1RSSUdfVVNCX1JYVFggPSAweDYsCisgICAgICAgIEhXX0RNQV9UUklHX0kyU19MRUZUUklHSFQgPSAweDgsCisgICAgICAgIEhXX0RNQV9UUklHX1BETV9MRUZUUklHSFQgPSAweDksCisgICAgICAgIEhXX0RNQV9UUklHX0ZUREZfUlhUWCA9IDB4QSwKKyAgICAgICAgSFdfRE1BX1RSSUdfRUNDX1JYVFggPSAweEIsCisgICAgICAgIEhXX0RNQV9UUklHX0FEQyA9IDB4QywKKyAgICAgICAgSFdfRE1BX1RSSUdfTk9ORSA9IDB4RgorfSBIV19ETUFfVFJJRzsKKworLyoqCisgKiBcYnJpZWYgRE1BIGNoYW5uZWwgdHJhbnNmZXIgY2FsbGJhY2sKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgRE1BIGRyaXZlciB3aGVuIHRoZQorICogaW50ZXJydXB0IGlzIGZpcmVkLgorICoKKyAqIFxwYXJhbSBbaW5dIHVzZXJfZGF0YSB0cmFuc2ZlcmVkIGRhdGEKKyAqIFxwYXJhbSBbaW5dIGxlbiBsZW5ndGggb2YgdHJhbnNmZXJlZCBkYXRhCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpod19kbWFfdHJhbnNmZXJfY2IpKHZvaWQgKnVzZXJfZGF0YSwgdWludDE2X3QgbGVuKTsKKworLyoqCisgKiBcYnJpZWYgRE1BIHBhcmFtZXRlcnMgc3RydWN0dXJlCisgKgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIEhXX0RNQV9DSEFOTkVMICAgICAgIGNoYW5uZWxfbnVtYmVyOyAgICAvKio8IERNQSBDaGFubmVsIE51bWJlciB0byBiZSB1c2VkICovCisgICAgICAgIEhXX0RNQV9CVyAgICAgICAgICAgIGJ1c193aWR0aDsgICAgICAgICAvKio8IFRyYW5zZmVyIEJ1cyB3aWR0aDogOCwgMTYgb3IgMzIgYml0cyAqLworICAgICAgICBIV19ETUFfSVJRX1NUQVRFICAgICBpcnFfZW5hYmxlOyAgICAgICAgLyoqPCBFbmFibGUgb3IgZGlzYWJsZSBJUlEgZ2VuZXJhdGlvbiAqLworICAgICAgICB1aW50MTYgICAgICAgICAgICAgICBpcnFfbnJfb2ZfdHJhbnM7ICAgLyoqPCBOdW1iZXIgb2YgdHJhbnNmZXJzIGJlZm9yZSBJUlEgZ2VuZXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdG8gMCB0byBmaXJlIElSUSBhZnRlciB0cmFuc2ZlciBlbmRzICovCisgICAgICAgIEhXX0RNQV9EUkVRICAgICAgICAgIGRyZXFfbW9kZTsgICAgICAgICAvKio8IFN0YXJ0IERNQSBpbW1lZGlhdGVseSBvciB0cmlnZ2VyZWQgYnkgcGVyaXBoZXJhbCAqLworICAgICAgICBIV19ETUFfQUlOQyAgICAgICAgICBhX2luYzsgICAgICAgICAgICAgLyoqPCBJbmNyZW1lbnQgb2Ygc291cmNlIGFkZHJlc3MgKi8KKyAgICAgICAgSFdfRE1BX0JJTkMgICAgICAgICAgYl9pbmM7ICAgICAgICAgICAgIC8qKjwgSW5jcmVtZW50IG9mIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKyAgICAgICAgSFdfRE1BX01PREUgICAgICAgICAgY2lyY3VsYXI7ICAgICAgICAgIC8qKjwgU2VsZWN0IG5vcm1hbCBvciBjaXJjdWxhciBvcGVyYXRpb24gKi8KKyAgICAgICAgSFdfRE1BX1BSSU8gICAgICAgICAgZG1hX3ByaW87ICAgICAgICAgIC8qKjwgQ2hhbm5lbCBwcmlvcml0eSBmcm9tIDAgdG8gNyAqLworICAgICAgICBIV19ETUFfSURMRSAgICAgICAgICBkbWFfaWRsZTsgICAgICAgICAgLyoqPCBJZGxlIG1vZGU6IGJsb2NraW5nIG9yIGludGVycnVwdGluZyAqLworICAgICAgICBIV19ETUFfSU5JVCAgICAgICAgICBkbWFfaW5pdDsgICAgICAgICAgLyoqPCBDb3B5IG1vZGU6IGJsb2NrIGNvcHkgb3IgbWVtIGluaXQgKi8KKyAgICAgICAgSFdfRE1BX1RSSUcgICAgICAgICAgZG1hX3JlcV9tdXg7ICAgICAgIC8qKjwgRE1BIHRyaWdnZXIgKi8KKyAgICAgICAgdWludDMyICAgICAgICAgICAgICAgc3JjX2FkZHJlc3M7ICAgICAgIC8qKjwgU291cmNlIGFkZHJlc3MgKi8KKyAgICAgICAgdWludDMyICAgICAgICAgICAgICAgZGVzdF9hZGRyZXNzOyAgICAgIC8qKjwgRGVzdGluYXRpb24gYWRkcmVzcyAqLworICAgICAgICB1aW50MTYgICAgICAgICAgICAgICBsZW5ndGg7ICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgRE1BIHRyYW5zZmVycyAqLworICAgICAgICBod19kbWFfdHJhbnNmZXJfY2IgICBjYWxsYmFjazsgICAgICAgICAgLyoqPCBGdW5jdGlvbiB0byBjYWxsIGFmdGVyIGlycV9ucl9vZl90cmFucyB0cmFuc2ZlcnMgKi8KKyAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgKnVzZXJfZGF0YTsgICAgICAgIC8qKjwgRGF0YSB0byBwYXNzIHRvIENhbGxiYWNrICovCit9IERNQV9zZXR1cDsKKworLyoKKyogQVBJIEZVTkNUSU9OUyBERUZJTklUSU9OUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKy8qKgorICogXGJyaWVmIEluaXRpYWxpemUgRE1BIENoYW5uZWwKKyAqCisgKiBccGFyYW0gW2luXSBjaGFubmVsX3NldHVwIHBvaW50ZXIgdG8gc3RydWN0IG9mIHR5cGUgRE1BX1NldHVwCisgKgorICovCit2b2lkIGh3X2RtYV9jaGFubmVsX2luaXRpYWxpemF0aW9uKERNQV9zZXR1cCAqY2hhbm5lbF9zZXR1cCk7CisKKy8qKgorICogXGJyaWVmIFVwZGF0ZSBETUEgc291cmNlIGFkZHJlc3MgYW5kIGxlbmd0aAorICoKKyAqIFdoZW4gRE1BIGlzIGNvbmZpZ3VyZWQgZm9yIHNvbWUgcGVyaXBoZXJhbCwgaXQgY291bGQgYmUgZW5vdWdoIHRvIHNldHVwIG9ubHkgc291cmNlIGFkZHJlc3MKKyAqIGFuZCBkYXRhIGxlbmd0aC4gT3RoZXIgcGFyYW1ldGVycyBtb3N0IGxpa2VseSBkbyBub3QgY2hhbmdlIGZvciBzYW1lIHR5cGUgb2YgdHJhbnNtaXNzaW9uCisgKiBmb3IgdmFsdWVzIHRoYXQgd2FyZSBzcGVjaWZpZWQgaW4gXHAgaHdfZG1hX2NoYW5uZWxfaW5pdGlhbGl6YXRpb24oKS4KKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHNwZWVkIHVwIERNQSBzdGFydCB0aW1lIHdoZW4gb25seSBhZGRyZXNzIGFuZCBzaXplIGNoYW5nZXMgZnJvbSBwcmV2aW91cworICogdHJhbnNtaXNzaW9uLgorICoKKyAqIFxwYXJhbSBbaW5dIGNoYW5uZWwgRE1BIGNoYW5uZWwgbnVtYmVyIHRvIG1vZGlmeQorICogXHBhcmFtIFtpbl0gYWRkciBuZXcgc291cmNlIGFkZHJlc3MKKyAqIFxwYXJhbSBbaW5dIGxlbmd0aCBuZXcgZGF0YSB0cmFuc2ZlciBsZW5ndGgKKyAqIFxwYXJhbSBbaW5dIGNiIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgdHJhbnNtaXNzaW9uIGZpbmlzaGVzCisgKgorICovCit2b2lkIGh3X2RtYV9jaGFubmVsX3VwZGF0ZV9zb3VyY2UoSFdfRE1BX0NIQU5ORUwgY2hhbm5lbCwgdm9pZCogYWRkciwgdWludDE2X3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdfZG1hX3RyYW5zZmVyX2NiIGNiKTsKKworLyoqCisgKiBcYnJpZWYgVXBkYXRlIERNQSBkZXN0aW5hdGlvbiBhZGRyZXNzIGFuZCBsZW5ndGgKKyAqCisgKiBXaGVuIERNQSBpcyBjb25maWd1cmVkIGZvciBzb21lIHBlcmlwaGVyYWwsIGl0IGNvdWxkIGJlIGVub3VnaCB0byBzZXR1cCBvbmx5IGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIGFuZCBkYXRhIGxlbmd0aC4gT3RoZXIgcGFyYW1ldGVycyBtb3N0IGxpa2VseSBkbyBub3QgY2hhbmdlIGZvciBzYW1lIHR5cGUgb2YgdHJhbnNtaXNzaW9uCisgKiBmb3IgdmFsdWVzIHRoYXQgd2FyZSBzcGVjaWZpZWQgaW4gXHAgaHdfZG1hX2NoYW5uZWxfaW5pdGlhbGl6YXRpb24oKS4KKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHNwZWVkIHVwIERNQSBzdGFydCB0aW1lIHdoZW4gb25seSBhZGRyZXNzIGFuZCBzaXplIGNoYW5nZXMgZnJvbSBwcmV2aW91cworICogdHJhbnNtaXNzaW9uLgorICoKKyAqIFxwYXJhbSBbaW5dIGNoYW5uZWwgRE1BIGNoYW5uZWwgbnVtYmVyIHRvIG1vZGlmeQorICogXHBhcmFtIFtpbl0gYWRkciBuZXcgc291cmNlIGFkZHJlc3MKKyAqIFxwYXJhbSBbaW5dIGxlbmd0aCBuZXcgZGF0YSB0cmFuc2ZlciBsZW5ndGgKKyAqIFxwYXJhbSBbaW5dIGNiIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgdHJhbnNtaXNzaW9uIGZpbmlzaGVzCisgKgorICovCit2b2lkIGh3X2RtYV9jaGFubmVsX3VwZGF0ZV9kZXN0aW5hdGlvbihIV19ETUFfQ0hBTk5FTCBjaGFubmVsLCB2b2lkICphZGRyLCB1aW50MTZfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod19kbWFfdHJhbnNmZXJfY2IgY2IpOworCisvKioKKyAqIFxicmllZiBVcGRhdGUgRE1BIGludGVycnVwdCB0cmlnZ2VyIGluZGV4CisgKgorICogRE1BIGNoYW5uZWwgY2FuIHRyaWdnZXIgYW4gaW50ZXJydXB0IGFmdGVyIGFyYml0cmFyeSB0cmFuc2ZlciBoYXMgZmluaXNoZWQuCisgKiBVc3VhbGx5IGludGVycnVwdCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgdHJhbnNtaXNzaW9uIGZpbmlzaGVzIGJ1dCBmb3IgY3ljbGljIG1vZGUsCisgKiB3aGVyZSBETUEgbmV2ZXIgc3RvcHMsIGl0IGlzIGNvbnZlbmllbnQgdHJpZ2dlciBpbnRlcnJ1cHQgYXQgb3RoZXIgdGltZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgdHJhbnNmZXJzIGFmdGVyIHdoaWNoIHRoZSBpbnRlcnJ1cHQgaXMgdHJpZ2dlcmVkLgorICoKKyAqIFxwYXJhbSBbaW5dIGNoYW5uZWwgRE1BIGNoYW5uZWwgbnVtYmVyIHRvIG1vZGlmeQorICogXHBhcmFtIFtpbl0gaW50X2l4IE51bWJlciBvZiB0cmFuc2ZlcnMgdW50aWwgdGhlIGludGVycnVwdCBpcyB0cmlnZ2VyZWQKKyAqCisgKi8KK3ZvaWQgaHdfZG1hX2NoYW5uZWxfdXBkYXRlX2ludF9peChIV19ETUFfQ0hBTk5FTCBjaGFubmVsLCB1aW50MTZfdCBpbnRfaXgpOworCisvKioKKyAqIFxicmllZiBFbmFibGUgb3IgZGlzYWJsZSBhIERNQSBjaGFubmVsCisgKgorICogXHBhcmFtIFtpbl0gY2hhbm5lbF9udW1iZXIgRE1BIENoYW5uZWwgTnVtYmVyIHRvIHN0YXJ0L3N0b3AKKyAqIFxwYXJhbSBbaW5dIGRtYV9vbiBlbmFibGUvZGlzYWJsZSBETUEgY2hhbm5lbAorICoKKyAqLwordm9pZCBod19kbWFfY2hhbm5lbF9lbmFibGUoSFdfRE1BX0NIQU5ORUwgY2hhbm5lbF9udW1iZXIsIEhXX0RNQV9TVEFURSBkbWFfb24pOworCisvKioKKyAqIFxicmllZiBTdG9wIERNQSBjaGFubmVsIGlmIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcworICoKKyAqIElmIG5vIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzIG5vdGhpbmcgaGFwcGVucy4KKyAqIElmIHRoZXJlIGlzIG91dHN0YW5kaW5nIERNQSB0cmFuc2ZlciBpdCB3aWxsIGJlIHN0b3BwZWQgYW5kCisgKiBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aXRoIGNvdW50IG9mIGRhdGEgYWxyZWFkeSB0cmFuc2ZlcmVkCisgKgorICogXHBhcmFtIFtpbl0gY2hhbm5lbF9udW1iZXIgRE1BIGNoYW5uZWwgbnVtYmVyIHRvIHN0b3AKKyAqCisgKi8KK3ZvaWQgaHdfZG1hX2NoYW5uZWxfc3RvcChIV19ETUFfQ0hBTk5FTCBjaGFubmVsX251bWJlcik7CisKKy8qKgorICogXGJyaWVmIFJlYWQgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIGJ5dGVzIHNvIGZhcgorICoKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBob3cgbWFueSBieXRlcyB3ZXJlIHRyYW5zZmVyZWQKKyAqIHZpYSBETUEgY2hhbm5lbCBzbyBmYXIuIFRoaXMgbnVtYmVyIGNhbiBjaGFuZ2VkIHZlcnkgc29vbi4KKyAqCisgKiBccGFyYW0gW2luXSBjaGFubmVsX251bWJlciBETUEgY2hhbm5lbCBudW1iZXIKKyAqCisgKiBccmV0dXJuIG51bWJlciBvZiBieXRlcyBhbHJlYWR5IHRyYW5zZmVyZWQgKHdoZW4gdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MpLAorICogICAgICAgICAwIC0gaWYgdHJhbnNmZXIgaXMgYWxyZWFkeSBmaW5pc2hlZCwKKyAqICAgICAgICAgdW5kZWZpbmVkIGlmIGNhbGxlZCBvciBub3Qgc3RhcnRlZCBjaGFubmVsCisgKgorICovCit1aW50MTZfdCBod19kbWFfdHJhbnNmZXJlZF9ieXRlcyhIV19ETUFfQ0hBTk5FTCBjaGFubmVsX251bWJlcik7CisKKy8qKgorICogXGJyaWVmIEZyZWV6ZSBETUEKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19kbWFfZnJlZXplKHZvaWQpCit7CisgICAgICAgIEdQUkVHLT5TRVRfRlJFRVpFX1JFRyA9IFJFR19NU0soR1BSRUcsIFNFVF9GUkVFWkVfUkVHLCBGUlpfRE1BKTsKK30KKworLyoqCisgKiBcYnJpZWYgVW5mcmVlemUgRE1BCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZG1hX3VuZnJlZXplKHZvaWQpCit7CisgICAgICAgIEdQUkVHLT5SRVNFVF9GUkVFWkVfUkVHID0gUkVHX01TSyhHUFJFRywgUkVTRVRfRlJFRVpFX1JFRywgRlJaX0RNQSk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIGFueSBETUEgY2hhbm5lbCBpcyBhY3RpdmUuCisgKgorICogXHJldHVybiB0cnVlLCBpZiBhIGNoYW5uZWwgaXMgYWN0aXZlIGVsc2UgZmFsc2UuCisgKi8KK2Jvb2wgaHdfZG1hX2NoYW5uZWxfYWN0aXZlKHZvaWQpOworCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX0RNQSAqLworCisjZW5kaWYgLyogSFdfRE1BX0hfICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfZmVtX3NreTY2MTEyLTExLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2ZlbV9za3k2NjExMi0xMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTIwOTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2ZlbV9za3k2NjExMi0xMS5oCkBAIC0wLDAgKzEsMzc0IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBGRU0KKyAqIFx7CisgKiBcYnJpZWYgRnJvbnQgRW5kIE1vZHVsZSBmb3IgU0tZV09SS1MgU0tZNjYxMTItMTEKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlCisgKgorICogQGJyaWVmIEZFTSBEcml2ZXIgZm9yIFNLWVdPUktTIFNLWTY2MTEyLTExIExvdyBMZXZlbCBEcml2ZXIgQVBJLgorICoKKyAqIEdQSU9zIHVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSBGRU0gYXJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBtYWNyb3MsIHRoYXQgc2hvdWxkIGJlIHBsYWNlZAorICogaW4gY3VzdG9tX2NvbmZpZy5oOgorICoKKyAqICAgICAgQ1NEICAgOiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1BPUlQvUElOCisgKiAgICAgIENQUyAgIDogZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JUL1BJTgorICogICAgICBDUlggICA6IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUlhfUE9SVC9QSU4KKyAqICAgICAgQ1RYICAgOiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1RYX1BPUlQvUElOCisgKiAgICAgIENITCAgIDogZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QT1JUL1BJTgorICogICAgICBBTlRTRUw6IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUE9SVC9QSU4KKyAqCisgKiBJbiBvcmRlciB0byBjb250cm9sIGFuIGV4dGVybmFsIFBBLCB0aHJlZSBHUElPcyBjYW4gYmUgdXNlZC4gVGhlc2UgYXJlIGNhbGxlZCBSRl9BTlRfVFJJTXgsIHg9MCwxLDIuIEVhY2ggb25lIG9mCisgKiB0aGVzZSBiaXRzIGlzIGVuYWJsZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgUE9SVC9QSU4gbWFjcm9zIGFyZSBzZXQ6CisgKgorICogICAgICBSRl9BTlRfVFJJTTAgOiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMF9QT1JUL1BJTgorICogICAgICBSRl9BTlRfVFJJTTEgOiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMV9QT1JUL1BJTgorICogICAgICBSRl9BTlRfVFJJTTIgOiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMl9QT1JUL1BJTgorICoKKyAqIFRoZSBhY3R1YWwgR1BJTyB2YWx1ZXMgZm9yIFJGX0FOVF9UUklNeCBhcmUgc2V0IGJ5IHRoZSBjb3JyZXNwb25kaW5nIE1BQywgd2hlbmV2ZXIgaXQgZ2FpbnMgYWNjZXNzIGJ5IHRoZSBhcmJpdGVyCisgKiB0byB0aGUgUkYuIFRoaXMgZHJpdmVyIG9ubHkgaGFuZGxlcyB0aGUgR1BJTyBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBGRU0gQklBUyBWb2x0YWdlIGNvbnRyb2wgaXMgZW5hYmxlZCBieSB0aGUgZm9sbG93aW5nIG1hY3JvczoKKyAqCisgKiAgICAgIFYxOCAgICAgICAgICAgIDogZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0ZFTV9CSUFTX1YxOAorICogICAgICBWMThQICAgICAgICAgICA6IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9GRU1fQklBU19WMThQCisgKgorICogSWYgbm9uZSBvZiB0aGVtIGlzIHNldCwgRkVNIEJJQVMgd2lsbCBub3QgYmUgY29udHJvbGxlZCBieSB0aGlzIGRyaXZlci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBIV19GRU1fSF8KKyNkZWZpbmUgSFdfRkVNX0hfCisKKyNpZiBkZ19jb25maWdGRU0gPT0gRkVNX1NLWTY2MTEyXzExCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfRkVNX0JJQVNfVjE4KSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9GRU1fQklBU19WMThQKQorI2Vycm9yIE9ubHkgb25lIG9mIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9GRU1fQklBU19WMTggYW5kIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9GRU1fQklBU19WMThQIGNhbiBiZSBzZXQgYXQgYSB0aW1lCisjZW5kaWYKKworLyogQ29uZmlndXJhdGlvbi9zdGF0ZSBzdHJ1Y3R1cmUgKGFjdHVhbGx5IGp1c3QgYSBieXRlKSAqLwordHlwZWRlZiBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB7CisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgICAgICB1aW50OF90IHR4X3Bvd2VyOiAxOworICAgICAgICB1aW50OF90IHR4X2J5cGFzczogMTsKKyAgICAgICAgdWludDhfdCByeF9ieXBhc3M6IDE7CisjZWxzZQorICAgICAgICB1aW50OF90IHR4X3Bvd2VyX2JsZTogMTsKKyAgICAgICAgdWludDhfdCB0eF9ieXBhc3NfYmxlOiAxOworICAgICAgICB1aW50OF90IHJ4X2J5cGFzc19ibGU6IDE7CisgICAgICAgIHVpbnQ4X3QgdHhfcG93ZXJfZnRkZjogMTsKKyAgICAgICAgdWludDhfdCB0eF9ieXBhc3NfZnRkZjogMTsKKyAgICAgICAgdWludDhfdCByeF9ieXBhc3NfZnRkZjogMTsKKyNlbmRpZgorICAgICAgICB1aW50OF90IGFudHNlbDogMTsKKyAgICAgICAgdWludDhfdCBzdGFydGVkOiAxOworfSBod19mZW1fY29uZmlnOworCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlcyBGRU0gVFggUG93ZXIKKyAqCisgKiBccGFyYW0gW2luXSBoaWdoIFNldCB0cnVlIHRvIGVuYWJsZSBoaWdoIFRYIHBvd2VyCisgKgorICovCit2b2lkIGh3X2ZlbV9zZXRfdHhwb3dlcihib29sIGhpZ2gpOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIEZFTSBUWCBieXBhc3MgbW9kZQorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZSBmYWxzZTogVXNlIFBBLCB0cnVlOiBieXBhc3MKKyAqCisgKi8KK3ZvaWQgaHdfZmVtX3NldF90eF9ieXBhc3MoYm9vbCBlbmFibGUpOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIEZFTSBSWCBieXBhc3MgbW9kZQorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZSBmYWxzZTogVXNlIExOQSwgdHJ1ZTogYnlwYXNzCisgKgorICovCit2b2lkIGh3X2ZlbV9zZXRfcnhfYnlwYXNzKGJvb2wgZW5hYmxlKTsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgVFggUG93ZXIgc2V0dGluZworICoKKyAqIFxyZXR1cm4gdHJ1ZSwgaWYgVFggUG93ZXIgaXMgaGlnaCwgZmFsc2UgaWYgbG93CisgKgorICovCitib29sIGh3X2ZlbV9nZXRfdHhwb3dlcih2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgVFggYnlwYXNzIG1vZGUKKyAqCisgKiBccmV0dXJuIGZhbHNlOiBObyBUWCBieXBhc3MsIHRydWU6IFRYIGJ5cGFzcworICoKKyAqLworYm9vbCBod19mZW1fZ2V0X3R4X2J5cGFzcyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgUlggYnlwYXNzIG1vZGUKKyAqCisgKiBccmV0dXJuIGZhbHNlOiBObyBSWCBieXBhc3MsIHRydWU6IFJYIGJ5cGFzcworICoKKyAqLworYm9vbCBod19mZW1fZ2V0X3J4X2J5cGFzcyh2b2lkKTsKKworI2Vsc2UgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQiAqLworI2lmZGVmIENPTkZJR19VU0VfQkxFCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIEZFTSBUWCBQb3dlciBmb3IgQkxFCisgKgorICogXHBhcmFtIFtpbl0gaGlnaCBTZXQgdHJ1ZSB0byBlbmFibGUgaGlnaCBUWCBwb3dlcgorICoKKyAqLwordm9pZCBod19mZW1fc2V0X3R4cG93ZXJfYmxlKGJvb2wgaGlnaCk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIFRYIGJ5cGFzcyBtb2RlIGZvciBCTEUKKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGUgZmFsc2U6IFVzZSBQQSwgdHJ1ZTogYnlwYXNzCisgKgorICovCit2b2lkIGh3X2ZlbV9zZXRfdHhfYnlwYXNzX2JsZShib29sIGVuYWJsZSk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIFJYIGJ5cGFzcyBtb2RlIGZvciBCTEUKKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGUgZmFsc2U6IFVzZSBMTkEsIHRydWU6IGJ5cGFzcworICoKKyAqLwordm9pZCBod19mZW1fc2V0X3J4X2J5cGFzc19ibGUoYm9vbCBlbmFibGUpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSBUWCBQb3dlciBzZXR0aW5nIGZvciBCTEUKKyAqCisgKiBccmV0dXJuIHRydWUsIGlmIFRYIFBvd2VyIGlzIGhpZ2gsIGZhbHNlIGlmIGxvdworICoKKyAqLworYm9vbCBod19mZW1fZ2V0X3R4cG93ZXJfYmxlKHZvaWQpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSBUWCBieXBhc3MgbW9kZSBmb3IgQkxFCisgKgorICogXHJldHVybiBmYWxzZTogTm8gVFggYnlwYXNzLCB0cnVlOiBUWCBieXBhc3MKKyAqCisgKi8KK2Jvb2wgaHdfZmVtX2dldF90eF9ieXBhc3NfYmxlKHZvaWQpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSBSWCBieXBhc3MgbW9kZSBmb3IgQkxFCisgKgorICogXHJldHVybiBmYWxzZTogTm8gUlggYnlwYXNzLCB0cnVlOiBSWCBieXBhc3MKKyAqCisgKi8KK2Jvb2wgaHdfZmVtX2dldF9yeF9ieXBhc3NfYmxlKHZvaWQpOworI2VuZGlmIC8qIENPTkZJR19VU0VfQkxFICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIFRYIFBvd2VyIGZvciBGVERGCisgKgorICogXHBhcmFtIFtpbl0gaGlnaCBTZXQgdHJ1ZSB0byBlbmFibGUgaGlnaCBUWCBwb3dlcgorICoKKyAqLwordm9pZCBod19mZW1fc2V0X3R4cG93ZXJfZnRkZihib29sIGhpZ2gpOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIEZFTSBUWCBieXBhc3MgbW9kZSBmb3IgRlRERgorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZSBmYWxzZTogVXNlIFBBLCB0cnVlOiBieXBhc3MKKyAqCisgKi8KK3ZvaWQgaHdfZmVtX3NldF90eF9ieXBhc3NfZnRkZihib29sIGVuYWJsZSk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIFJYIGJ5cGFzcyBtb2RlIGZvciBGVERGCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlIGZhbHNlOiBVc2UgTE5BLCB0cnVlOiBieXBhc3MKKyAqCisgKi8KK3ZvaWQgaHdfZmVtX3NldF9yeF9ieXBhc3NfZnRkZihib29sIGVuYWJsZSk7CisKKy8qKgorICogXGJyaWVmIEdldHMgdGhlIFRYIFBvd2VyIHNldHRpbmcgZm9yIEZUREYKKyAqCisgKiBccmV0dXJuIHRydWUsIGlmIFRYIFBvd2VyIGlzIGhpZ2gsIGZhbHNlIGlmIGxvdworICoKKyAqLworYm9vbCBod19mZW1fZ2V0X3R4cG93ZXJfZnRkZih2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgVFggYnlwYXNzIG1vZGUgZm9yIEZUREYKKyAqCisgKiBccmV0dXJuIGZhbHNlOiBObyBUWCBieXBhc3MsIHRydWU6IFRYIGJ5cGFzcworICoKKyAqLworYm9vbCBod19mZW1fZ2V0X3R4X2J5cGFzc19mdGRmKHZvaWQpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSBSWCBieXBhc3MgbW9kZSBmb3IgRlRERgorICoKKyAqIFxyZXR1cm4gZmFsc2U6IE5vIFJYIGJ5cGFzcywgdHJ1ZTogUlggYnlwYXNzCisgKgorICovCitib29sIGh3X2ZlbV9nZXRfcnhfYnlwYXNzX2Z0ZGYodm9pZCk7CisjZW5kaWYgLyogQ09ORklHX1VTRV9GVERGICovCisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIFRYIFBvd2VyCisgKgorICogXHBhcmFtIFtpbl0gaGlnaCBTZXQgdHJ1ZSB0byBlbmFibGUgaGlnaCBUWCBwb3dlcgorICoKKyAqIFxkZXByZWNhdGVkIFVzZSB0aGUgQkxFL0ZUREYgc3BlY2lmaWMgZnVuY3Rpb25zIGluc3RlYWQKKyAqLwordm9pZCBod19mZW1fc2V0X3R4cG93ZXIoYm9vbCBoaWdoKSBERVBSRUNBVEVEOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIEZFTSBUWCBieXBhc3MgbW9kZQorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZSBmYWxzZTogVXNlIFBBLCB0cnVlOiBieXBhc3MKKyAqCisgKiBcZGVwcmVjYXRlZCBVc2UgdGhlIEJMRS9GVERGIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnN0ZWFkCisgKi8KK3ZvaWQgaHdfZmVtX3NldF90eF9ieXBhc3MoYm9vbCBlbmFibGUpIERFUFJFQ0FURUQ7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIFJYIGJ5cGFzcyBtb2RlCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlIGZhbHNlOiBVc2UgTE5BLCB0cnVlOiBieXBhc3MKKyAqCisgKiBcZGVwcmVjYXRlZCBVc2UgdGhlIEJMRS9GVERGIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnN0ZWFkCisgKi8KK3ZvaWQgaHdfZmVtX3NldF9yeF9ieXBhc3MoYm9vbCBlbmFibGUpIERFUFJFQ0FURUQ7CisKKy8qKgorICogXGJyaWVmIEdldHMgdGhlIFRYIFBvd2VyIHNldHRpbmcKKyAqCisgKiBccmV0dXJuIHRydWUsIGlmIFRYIFBvd2VyIGlzIGhpZ2gsIGZhbHNlIGlmIGxvdworICoKKyAqIFxkZXByZWNhdGVkIFVzZSB0aGUgQkxFL0ZUREYgc3BlY2lmaWMgZnVuY3Rpb25zIGluc3RlYWQKKyAgKi8KK2Jvb2wgaHdfZmVtX2dldF90eHBvd2VyKHZvaWQpIERFUFJFQ0FURUQ7CisKKy8qKgorICogXGJyaWVmIEdldHMgdGhlIFRYIGJ5cGFzcyBtb2RlCisgKgorICogXHJldHVybiBmYWxzZTogTm8gVFggYnlwYXNzLCB0cnVlOiBUWCBieXBhc3MKKyAqCisgKiBcZGVwcmVjYXRlZCBVc2UgdGhlIEJMRS9GVERGIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnN0ZWFkCisgKi8KK2Jvb2wgaHdfZmVtX2dldF90eF9ieXBhc3Modm9pZCkgREVQUkVDQVRFRDsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgUlggYnlwYXNzIG1vZGUKKyAqCisgKiBccmV0dXJuIGZhbHNlOiBObyBSWCBieXBhc3MsIHRydWU6IFJYIGJ5cGFzcworICoKKyAqIFxkZXByZWNhdGVkIFVzZSB0aGUgQkxFL0ZUREYgc3BlY2lmaWMgZnVuY3Rpb25zIGluc3RlYWQKKyAqLworYm9vbCBod19mZW1fZ2V0X3J4X2J5cGFzcyh2b2lkKSBERVBSRUNBVEVEOworI2VuZGlmIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0IgKi8KKworCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIEZFTSBBbnRlbm5hIHRvIHVzZQorICoKKyAqIFxwYXJhbSBbaW5dIG9uZSBmYWxzZTogYW50ZW5uYSAwLCB0cnVlOiBhbnRlbm5hIDEKKyAqCisgKi8KK3ZvaWQgaHdfZmVtX3NldF9hbnRlbm5hKGJvb2wgb25lKTsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgc2VsZWN0ZWQgYW50ZW5uYQorICoKKyAqIFxyZXR1cm4gZmFsc2U6IGFudGVubmEgMSwgdHJ1ZTogYW50ZW5uYSAyCisgKgorICovCitib29sIGh3X2ZlbV9nZXRfYW50ZW5uYSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU2V0cyB0aGUgRkVNIEJpYXMKKyAqCisgKiBccGFyYW0gW2luXSB2b2x0YWdlIFRoZSB2b2x0YWdlIHRvIHNldCB0aGUgRkVNIEJpYXMgdG8gKG1WKQorICoKKyAqIFxyZXR1cm4gMDogc3VjY2VzcywgLTE6IE91dCBvZiByYW5nZSB2YWx1ZSBlbnRlcmVkLCAtMjogRkVNIEJJQVMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGJvYXJkCisgKgorICovCitpbnQgaHdfZmVtX3NldF9iaWFzKHVpbnQxNl90IHZvbHRhZ2UpOworCisvKioKKyAqIFxicmllZiBTZXRzIHRoZSAybmQgRkVNIEJpYXMKKyAqCisgKiBccGFyYW0gW2luXSB2b2x0YWdlIFRoZSB2b2x0YWdlIHRvIHNldCB0aGUgMm5kIEZFTSBCaWFzIHRvIChtVikKKyAqCisgKiBccmV0dXJuIDA6IHN1Y2Nlc3MsIC0xOiBPdXQgb2YgcmFuZ2UgdmFsdWUgZW50ZXJlZCwgLTI6IDJuZCBGRU0gQklBUyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgYm9hcmQKKyAqCisgKi8KK2ludCBod19mZW1fc2V0X2JpYXMyKHVpbnQxNl90IHZvbHRhZ2UpOworCisvKioKKyAqIFxicmllZiBTdGFydHMgYW5kIGNvbmZpZ3VyZXMgRkVNLgorICoKKyAqIENvbmZpZ3VyZXMgYW5kIHNldHMgR1BJT3MgYWNjb3JkaW5nIHRvIGNvbmZpZ3VyYXRpb24gc2V0IGJ5IGh3X2ZlbV9zZXRfY29uZmlnKCkuIEFsc28gY29uZmlndXJlcworICogRENGIFRpbWVycy4KKyAqCisgKgorICogXG5vdGUgVG8gYmUgY2FsbGVkIGJ5IHRoZSBSRiBkcml2ZXIgd2hlbiBSRiBpcyBwb3dlcmVkIG9uCisgKgorICovCit2b2lkIGh3X2ZlbV9zdGFydCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU3RvcHMgRkVNLgorICoKKyAqIFN0b3BzIERDRiB0aW1lcnMgYW5kIHNldHMgYWxsIEZFTSBjb250cm9sIHNpZ25hbHMgdG8gMCB0byBhY2hpZXZlIHRoZSBsb3dlc3QgcG9zc2libGUgcG93ZXIKKyAqCisgKiBcbm90ZSBUbyBiZSBjYWxsZWQgYnkgdGhlIFJGIGRyaXZlciB3aGVuIFJGIGlzIHBvd2VyZWQgb2ZmCisgKgorICovCit2b2lkIGh3X2ZlbV9zdG9wKHZvaWQpOworCisjZW5kaWYgLyogZGdfY29uZmlnRkVNID09IEZFTV9TS1k2NjExMl8xMSAqLworI2VuZGlmIC8qIEhXX0ZFTV9IXyAqLworCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19ncGFkYy5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19ncGFkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTE4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2dwYWRjLmgKQEAgLTAsMCArMSw3NjcgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIEdQQURDCisgKiBceworICogXGJyaWVmIEdlbmVyYWwgUHVycG9zZSBBREMKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X2dwYWRjLmgKKyAqCisgKiBAYnJpZWYgRGVmaW5pdGlvbiBvZiBBUEkgZm9yIHRoZSBHUEFEQyBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgSFdfR1BBRENfSAorI2RlZmluZSBIV19HUEFEQ19ICisKKyNpZiBkZ19jb25maWdVU0VfSFdfR1BBREMKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzZGtfZGVmcy5oPgorCitleHRlcm4gaW50MTZfdCBod19ncGFkY19kaWZmZXJlbnRpYWxfZ2Fpbl9lcnJvcjsKK2V4dGVybiBpbnQxNl90IGh3X2dwYWRjX3NpbmdsZV9lbmRlZF9nYWluX2Vycm9yOworCisvKioKKyAqIFxicmllZiBBREMgaW5wdXQgbW9kZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfR1BBRENfSU5QVVRfTU9ERV9ESUZGRVJFTlRJQUwgPSAwLCAgICAvKio8IGRpZmZlcmVudGlhbCBtb2RlIChkZWZhdWx0KSAqLworICAgICAgICBIV19HUEFEQ19JTlBVVF9NT0RFX1NJTkdMRV9FTkRFRCA9IDEgICAgIC8qKjwgc2luZ2xlIGVuZGVkIG1vZGUgKi8KK30gSFdfR1BBRENfSU5QVVRfTU9ERTsKKworLyoqCisgKiBcYnJpZWYgQURDIGNsb2NrIHNvdXJjZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfR1BBRENfQ0xPQ0tfSU5URVJOQUwgPSAwLCAgICAgICAvKio8IGludGVybmFsIGhpZ2gtc3BlZWQgY2xvY2sgKGRlZmF1bHQpICovCisgICAgICAgIEhXX0dQQURDX0NMT0NLX0RJR0lUQUwgPSAxICAgICAgICAgLyoqPCBkaWdpdGFsIGNsb2NrICgxNi85Nk1IeikgKi8KK30gSFdfR1BBRENfQ0xPQ0s7CisKKy8qKgorICogXGJyaWVmIEFEQyBpbnB1dAorICoKKyAqIFxwIEdQQURDX0lOUFVUX1NFXyogdmFsdWVzIHNob3VsZCBiZSB1c2VkIG9ubHkgaW4gc2luZ2xlIGVuZGVkIG1vZGUKKyAqIFxwIEdQQURDX0lOUFVUX0RJRkZfKiB2YWx1ZXMgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBkaWZmZXJlbnRpYWwgbW9kZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfR1BBRENfSU5QVVRfU0VfUDEyID0gMCwgICAgICAgICAvKio8IEdQSU8gMS4yICovCisgICAgICAgIEhXX0dQQURDX0lOUFVUX1NFX1AxNCA9IDEsICAgICAgICAgLyoqPCBHUElPIDEuNCAqLworICAgICAgICBIV19HUEFEQ19JTlBVVF9TRV9QMTMgPSAyLCAgICAgICAgIC8qKjwgR1BJTyAxLjMgKi8KKyAgICAgICAgSFdfR1BBRENfSU5QVVRfU0VfUDA3ID0gMywgICAgICAgICAvKio8IEdQSU8gMC43ICovCisgICAgICAgIEhXX0dQQURDX0lOUFVUX1NFX0FWUyA9IDQsICAgICAgICAgLyoqPCBhbmFsb2cgZ3JvdW5kIGxldmVsICovCisgICAgICAgIEhXX0dQQURDX0lOUFVUX1NFX1ZERCA9IDUsCisgICAgICAgIEhXX0dQQURDX0lOUFVUX1NFX1ZEQ0RDID0gNiwKKyAgICAgICAgSFdfR1BBRENfSU5QVVRfU0VfVjMzID0gNywKKyAgICAgICAgSFdfR1BBRENfSU5QVVRfU0VfVkJBVCA9IDksICAgICAgICAvKio8IGJhdHRlcnkgKi8KKyAgICAgICAgSFdfR1BBRENfSU5QVVRfU0VfVEVNUFNFTlMgPSAxNCwgICAvKio8IHRlbXBlcmF0dXJlIHNlbnNvciAqLworICAgICAgICBIV19HUEFEQ19JTlBVVF9TRV9QMDYgPSAxNiwgICAgICAgIC8qKjwgR1BJTyAwLjYgKi8KKyAgICAgICAgSFdfR1BBRENfSU5QVVRfU0VfUDEwID0gMTcsICAgICAgICAvKio8IEdQSU8gMS4wICovCisgICAgICAgIEhXX0dQQURDX0lOUFVUX1NFX1AxNSA9IDE4LCAgICAgICAgLyoqPCBHUElPIDEuNSAqLworICAgICAgICBIV19HUEFEQ19JTlBVVF9TRV9QMjQgPSAxOSwgICAgICAgIC8qKjwgR1BJTyAyLjQgKi8KKyAgICAgICAgSFdfR1BBRENfSU5QVVRfRElGRl9QMTJfUDE0ID0gMCwgICAvKio8IEdQSU8gMS4yIHZzIDEuNCAqLworICAgICAgICBIV19HUEFEQ19JTlBVVF9ESUZGX1AxM19QMDcgPSAxLCAgIC8qKjwgR1BJTyAxLjMgdnMgMC43ICovCit9IEhXX0dQQURDX0lOUFVUOworCisvKioKKyAqIFxicmllZiBBREMgaW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKmh3X2dwYWRjX2ludGVycnVwdF9jYikodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEFEQyBjb25maWd1cmF0aW9uCisgKgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIEhXX0dQQURDX0NMT0NLICAgICAgICBjbG9jazsgICAgICAgICAgICAgIC8qKjwgY2xvY2sgc291cmNlICovCisgICAgICAgIEhXX0dQQURDX0lOUFVUX01PREUgICBpbnB1dF9tb2RlOyAgICAgICAgIC8qKjwgaW5wdXQgbW9kZSAqLworICAgICAgICBIV19HUEFEQ19JTlBVVCAgICAgICAgaW5wdXQ7ICAgICAgICAgICAgICAvKio8IEFEQyBpbnB1dCAqLworCisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICBzYW1wbGVfdGltZTsgICAgICAgIC8qKjwgc2FtcGxlIHRpbWUgKi8KKyAgICAgICAgYm9vbCAgICAgICAgICAgICAgICAgIGNvbnRpbm91czsgICAgICAgICAgLyoqPCBjb250aW5vdXMgbW9kZSBzdGF0ZSAqLworICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgaW50ZXJ2YWw7ICAgICAgICAgICAvKio8IGludGVydmFsIGJldHdlZW4gY29udmVyc2lvbnMgaW4gY29udGlub3VzIG1vZGUgKi8KKworICAgICAgICBib29sICAgICAgICAgICAgICAgICAgaW5wdXRfYXR0ZW51YXRvcjsgICAvKio8IGlucHV0IGF0dGVudWF0b3Igc3RhdGUgKi8KKyAgICAgICAgYm9vbCAgICAgICAgICAgICAgICAgIGNob3BwaW5nOyAgICAgICAgICAgLyoqPCBjaG9wcGluZyBzdGF0ZSAqLworICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgb3ZlcnNhbXBsaW5nOyAgICAgICAvKio8IG92ZXJzYW1wbGluZyB2YWx1ZSAqLworfSBncGFkY19jb25maWc7CisKKy8qKgorICogXGJyaWVmIEluaXRpYWxpemUgQURDCisgKgorICogXHAgY2ZnIGNhbiBiZSBOVUxMIC0gbm8gY29uZmlndXJhdGlvbiBpcyBwZXJmb3JtZWQgaW4gc3VjaCBjYXNlLgorICoKKyAqIFxwYXJhbSBbaW5dIGNmZyBjb25maWd1cmF0aW9uCisgKgorICovCit2b2lkIGh3X2dwYWRjX2luaXQoY29uc3QgZ3BhZGNfY29uZmlnICpjZmcpOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmUgQURDCisgKgorICogU2hvcnRjdXQgdG8gY2FsbCBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uLiBJZiBccCBjZmcgaXMgTlVMTCwgdGhpcyBmdW5jdGlvbiBkb2VzCisgKiBub3RoaW5nLgorICoKKyAqIFxwYXJhbSBbaW5dIGNmZyBjb25maWd1cmF0aW9uCisgKgorICovCit2b2lkIGh3X2dwYWRjX2NvbmZpZ3VyZShjb25zdCBncGFkY19jb25maWcgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIFJlc2V0IEFEQyB0byBpdHMgZGVmYXVsdCB2YWx1ZXMgd2l0aG91dCBkaXNhYmxpbmcgdGhlIExETy4KKyAqCisgKi8KK3ZvaWQgaHdfZ3BhZGNfcmVzZXQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyCisgKgorICogSW50ZXJydXB0IGlzIGVuYWJsZWQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBBcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcKKyAqIGludGVycnVwdCB1c2luZyBod19ncGFkY19jbGVhcl9pbnRlcnJ1cHQoKS4gSWYgbm8gY2FsbGJhY2sgaXMgc3BlY2lmaWVkIGludGVycnVwdCBpcyBjbGVhcmVkIGJ5CisgKiBkcml2ZXIuCisgKgorICogXHBhcmFtIFtpbl0gY2IgY2FsbGJhY2sgZmlyZWQgb24gaW50ZXJydXB0CisgKgorICogXHNhIGh3X2dwYWRjX2NsZWFyX2ludGVycnVwdAorICoKKyAqLwordm9pZCBod19ncGFkY19yZWdpc3Rlcl9pbnRlcnJ1cHQoaHdfZ3BhZGNfaW50ZXJydXB0X2NiIGNiKTsKKworLyoqCisgKiBcYnJpZWYgVW5yZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqIEludGVycnVwdCBpcyBkaXNhYmxlZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICovCit2b2lkIGh3X2dwYWRjX3VucmVnaXN0ZXJfaW50ZXJydXB0KHZvaWQpOworCisvKioKKyAqIFxicmllZiBDbGVhciBpbnRlcnJ1cHQKKyAqCisgKiBBcHBsaWNhdGlvbiBzaG91bGQgY2FsbCB0aGlzIGluIGludGVycnVwdCBoYW5kbGVyIHRvIGNsZWFyIGludGVycnVwdC4KKyAqCisgKiBcc2EgaHdfZ3BhZGNfcmVnaXN0ZXJfaW50ZXJydXB0CisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfY2xlYXJfaW50ZXJydXB0KHZvaWQpCit7CisgICAgICAgIEdQQURDLT5HUF9BRENfQ0xFQVJfSU5UX1JFRyA9IDE7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBBREMKKyAqCisgKiBTYW1wbGluZyBpcyBzdGFydGVkIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdG8gc3RhcnQgY29udmVyc2lvbiBhcHBsaWNhdGlvbiBzaG91bGQgY2FsbAorICogaHdfZ3BhZGNfc3RhcnQoKS4KKyAqCisgKiBcc2EgaHdfZ3BhZGNfc3RhcnQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19lbmFibGUodm9pZCkKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BBREMsIEdQX0FEQ19DVFJMX1JFRywgR1BfQURDX0VOLCAxKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBBREMKKyAqCisgKiBBcHBsaWNhdGlvbiBzaG91bGQgd2FpdCBmb3IgY29udmVyc2lvbiB0byBiZSBjb21wbGV0ZWQgYmVmb3JlIGRpc2FibGluZyBBREMuIEluIGNhc2Ugb2YKKyAqIGNvbnRpbnVvdXMgbW9kZSwgYXBwbGljYXRpb24gc2hvdWxkIGRpc2FibGUgY29udGludW91cyBtb2RlIGFuZCB0aGVuIHdhaXQgZm9yIGNvbnZlcnNpb24gdG8gYmUKKyAqIGNvbXBsZXRlZCBpbiBvcmRlciB0byBoYXZlIEFEQyBpbiBkZWZpbmVkIHN0YXRlLgorICoKKyAqIFxzYSBod19ncGFkY19pbl9wcm9ncmVzcworICogXHNhIGh3X2dwYWRjX3NldF9jb250aW51b3VzCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfZGlzYWJsZSh2b2lkKQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfRU4sIDApOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIGRlbGF5IHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgQURDX0xETy4KKyAqCisgKiBwYXJhbSBbaW5dIExETyBlbmFibGUgZGVsYXkKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19zZXRfbGRvX2RlbGF5KHVpbnQzMl90IGRlbGF5KQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkwzX1JFRywgR1BfQURDX0VOX0RFTCwgZGVsYXkpOworfQorCisvKiogXGJyaWVmIFBlcmZvcm0gQURDIGNhbGlicmF0aW9uCisgKgorICogQ2FsaWJyYXRpb24gaXMgcGVyZm9ybWVkLiBUaGUgaW5wdXQgbW9kZSBtdXN0IGJlIEhXX0dQQURDX0lOUFVUX1NFX1ZERCAoMS4yVikuCisgKiBMRE8gY29uc3RhbnQgYW5kIGR5bmFtaWMgY3VycmVudHMgbWF5IGJlIG9uLiBUaGUgaW5wdXQgbW9kZSBtdXN0IGJlIFNpbmdsZSBFbmRlZC4gVGhlIGNhbGlicmF0aW9uCisgKiBpcyBwZXJmb3JtZWQgb25seSBvbmNlLgorICoKKyAqIFxzYSBod19ncGFkY19zZXRfaW5wdXRfbW9kZQorICoKKyAqLwordm9pZCBod19ncGFkY19jYWxpYnJhdGUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFN0YXJ0IGNvbnZlcnNpb24KKyAqCisgKiBBcHBsaWNhdGlvbiBzaG91bGQgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGlsZSBjb252ZXJzaW9uIGlzIHN0aWxsIGluIHByb2dyZXNzLgorICoKKyAqIFxzYSBod19ncGFkY19pbl9wcm9ncmVzcworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX3N0YXJ0KHZvaWQpCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19TVEFSVCwgMSk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIGNvbnZlcnNpb24gaXMgaW4gcHJvZ3Jlc3MKKyAqCisgKiBccmV0dXJuIGNvbnZlcnNpb24gc3RhdGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod19ncGFkY19pbl9wcm9ncmVzcyh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoR1BBREMsIEdQX0FEQ19DVFJMX1JFRywgR1BfQURDX1NUQVJUKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IGNvbnRpbnVvdXMgbW9kZQorICoKKyAqIFdpdGggY29udGludW91cyBtb2RlIGVuYWJsZWQgQURDIHdpbGwgYXV0b21hdGljYWxseSByZXN0YXJ0IGNvbnZlcnNpb24gb25jZSBjb21wbGV0ZWQuIEl0J3Mgc3RpbGwKKyAqIHJlcXVpcmVkIHRvIHN0YXJ0IDFzdCBjb252ZXJzaW9uIHVzaW5nIGh3X2dwYWRjX3N0YXJ0KCkuIEludGVydmFsIGJldHdlZW4gc3Vic2VxdWVudCBjb252ZXJzaW9ucworICogY2FuIGJlIGFkanVzdGVkIHVzaW5nIGh3X2dwYWRjX3NldF9pbnRlcnZhbCgpLgorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZWQgY29udGludW91cyBtb2RlIHN0YXRlCisgKgorICogXHNhIGh3X2dwYWRjX3N0YXJ0CisgKiBcc2EgaHdfZ3BhZGNfc2V0X2ludGVydmFsCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X2NvbnRpbnVvdXMoYm9vbCBlbmFibGVkKQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfQ09OVCwgISFlbmFibGVkKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGNvbnRpbnVvdXMgbW9kZSBzdGF0ZQorICoKKyAqIFxyZXR1cm4gY29udGludW91cyBtb2RlIHN0YXRlCisgKgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaHdfZ3BhZGNfZ2V0X2NvbnRpbnVvdXModm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19DT05UKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IGlucHV0IGNoYW5uZWwKKyAqCisgKiBBcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdXNpbmcgcHJvcGVyIGlucHV0IHN5bWJvbHMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgc2luZ2xlIGVuZGVkIG9yCisgKiBkaWZmZXJlbnRpYWwgbW9kZSBpcyB1c2VkLgorICoKKyAqIFxwYXJhbSBbaW5dIGlucHV0IGlucHV0IGNoYW5uZWwKKyAqCisgKiBcc2EgaHdfZ3BhZGNfc2V0X2lucHV0X21vZGUKKyAqIFxzYSBHUEFEQ19JTlBVVF9NT0RFCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X2lucHV0KEhXX0dQQURDX0lOUFVUIGlucHV0KQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfU0VMLCBpbnB1dCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IGlucHV0IGNoYW5uZWwKKyAqCisgKiBccmV0dXJuIGlucHV0IGNoYW5uZWwKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgSFdfR1BBRENfSU5QVVQgaHdfZ3BhZGNfZ2V0X2lucHV0KHZvaWQpCit7CisgICAgICAgIHJldHVybiAoSFdfR1BBRENfSU5QVVQpIFJFR19HRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19TRUwpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgaW5wdXQgbW9kZQorICoKKyAqIFxwYXJhbSBbaW5dIG1vZGUgaW5wdXQgbW9kZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX3NldF9pbnB1dF9tb2RlKEhXX0dQQURDX0lOUFVUX01PREUgbW9kZSkKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BBREMsIEdQX0FEQ19DVFJMX1JFRywgR1BfQURDX1NFLCBtb2RlKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGN1cnJlbnQgaW5wdXQgbW9kZQorICoKKyAqIHJldHVybiBpbnB1dCBtb2RlCisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX0dQQURDX0lOUFVUX01PREUgaHdfZ3BhZGNfZ2V0X2lucHV0X21vZGUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIChIV19HUEFEQ19JTlBVVF9NT0RFKSBSRUdfR0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfU0UpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgY2xvY2sgc291cmNlCisgKgorICogXHBhcmFtIFtpbl0gY2xvY2sgY2xvY2sgc291cmNlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X2Nsb2NrKEhXX0dQQURDX0NMT0NLIGNsb2NrKQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfQ0xLX1NFTCwgY2xvY2spOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBjbG9jayBzb3VyY2UKKyAqCisgKiBccmV0dXJuIGNsb2NrIHNvdXJjZQorICoKKyAqLworc3RhdGljIGlubGluZSBIV19HUEFEQ19DTE9DSyBod19ncGFkY19nZXRfY2xvY2sodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIChIV19HUEFEQ19DTE9DSykgUkVHX0dFVEYoR1BBREMsIEdQX0FEQ19DVFJMX1JFRywgR1BfQURDX0NMS19TRUwpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgb3ZlcnNhbXBsaW5nCisgKgorICogV2l0aCBvdmVyc2FtcGxpbmcgZW5hYmxlZCBtdWx0aXBsZSBzdWNjZXNzaXZlIGNvbnZlcnNpb25zIHdpbGwgYmUgZXhlY3V0ZWQgYW5kIHJlc3VsdHMgYXJlIGFkZGVkCisgKiB0b2dldGhlciB0byBpbmNyZWFzZSBlZmZlY3RpdmUgbnVtYmVyIG9mIGJpdHMgaW4gcmVzdWx0LgorICoKKyAqIE51bWJlciBvZiBzYW1wbGVzIHRha2VuIGlzIDI8c3VwPlxwIG5fc2FtcGxlczwvc3VwPi4gVmFsaWQgdmFsdWVzIGZvciBccCBuX3NhbXBsZXMgYXJlIDAtNyB0aHVzCisgKiBhdCBtb3N0IDEyOCBzYW1wbGVzIGNhbiBiZSB0YWtlbi4gSW4gdGhpcyBjYXNlIDE3Yml0cyBvZiByZXN1bHQgYXJlIGdlbmVyYXRlZCB3aXRoIHRoZSBsZWFzdAorICogc2lnbmlmaWNhbnQgYml0IGJlaW5nIGRpc2NhcmRlZC4KKyAqCisgKiBccGFyYW0gW2luXSBuX3NhbXBsZXMgbnVtYmVyIG9mIHNhbXBsZXMgdG8gYmUgdGFrZW4KKyAqCisgKiBcc2EgaHdfZ3BhZGNfZ2V0X3Jhd192YWx1ZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX3NldF9vdmVyc2FtcGxpbmcodWludDhfdCBuX3NhbXBsZXMpCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTDJfUkVHLCBHUF9BRENfQ09OVl9OUlMsIG5fc2FtcGxlcyk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IG92ZXJzYW1wbGluZworICoKKyAqIFxyZXR1cm4gbnVtYmVyIG9mIHNhbXBsZXMgdG8gYmUgdGFrZW4KKyAqCisgKiBcc2EgaHdfZ3BhZGNfc2V0X292ZXJzYW1wbGluZworICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X2dwYWRjX2dldF9vdmVyc2FtcGxpbmcodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKEdQQURDLCBHUF9BRENfQ1RSTDJfUkVHLCBHUF9BRENfQ09OVl9OUlMpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgc2FtcGxlIHRpbWUKKyAqCisgKiBTYW1wbGUgdGltZSBpcyBccCBtdWx0IHggMzIgY2xvY2sgY3ljbGVzIG9yIDEgY2xvY2sgY3ljbGUgd2hlbiBccCBtdWx0IGlzIDAuIFZhbGlkIHZhbHVlcyBhcmUKKyAqIDAtMTUuCisgKgorICogXHBhcmFtIFtpbl0gbXVsdCBtdWx0aXBsaWVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X3NhbXBsZV90aW1lKHVpbnQ4X3QgbXVsdCkKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BBREMsIEdQX0FEQ19DVFJMMl9SRUcsIEdQX0FEQ19TTVBMX1RJTUUsIG11bHQpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBzYW1wbGUgdGltZQorICoKKyAqIFxyZXR1cm4gbXVsdGlwbGllcgorICoKKyAqIFxzYSBod19ncGFkY19zZXRfc2FtcGxlX3RpbWUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19ncGFkY19nZXRfc2FtcGxlX3RpbWUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKEdQQURDLCBHUF9BRENfQ1RSTDJfUkVHLCBHUF9BRENfU01QTF9USU1FKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHN0YXRlIG9mIGlucHV0IGF0dGVudWF0b3IKKyAqCisgKiBFbmFibGluZyBpbnRlcm5hbCBhdHRlbnVhdG9yIHNjYWxlcyBpbnB1dCB2b2x0YWdlIGJ5IGZhY3RvciBvZiAzIHRodXMgaW5jcmVhc2luZyBlZmZlY3RpdmUgaW5wdXQKKyAqIHNjYWxlIGZyb20gMC0xLjJWIHRvIDAtMy42ViBpbiBzaW5nbGUgZW5kZWQgbW9kZSBvciBmcm9tIC0xLjItMS4yViB0byAtMy42LTMuNlYgaW4gZGlmZmVyZW50aWFsCisgKiBtb2RlLgorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZWQgYXR0ZW51YXRvciBzdGF0ZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX3NldF9pbnB1dF9hdHRlbnVhdG9yX3N0YXRlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BBREMsIEdQX0FEQ19DVFJMMl9SRUcsIEdQX0FEQ19BVFROM1gsICEhZW5hYmxlZCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IHN0YXRlIG9mIGlucHV0IGF0dGVudWF0b3IKKyAqCisgKiBccmV0dXJuIGF0dGVudWF0b3Igc3RhdGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod19ncGFkY19nZXRfaW5wdXRfYXR0ZW51YXRvcl9zdGF0ZSh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoR1BBREMsIEdQX0FEQ19DVFJMMl9SRUcsIEdQX0FEQ19BVFROM1gpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgaW5wdXQgbXV0ZSBzdGF0ZQorICoKKyAqIE9uY2UgZW5hYmxlZCwgc2FtcGxlcyBhcmUgdGFrZW4gYXQgbWlkLXNjYWxlIHRvIGRldGVybWluZSBpbnRlcm5hbCBvZmZzZXQgYW5kL29yIG5vdGljZSBvZiB0aGUKKyAqIEFEQyB3aXRoIHJlZ2FyZHMgdG8gVkREX1JFRi4KKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGVkIG11dGUgc3RhdGUKKyAqCisgKiBcc2EgaHdfZ3BhZGNfY2FsaWJyYXRlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X211dGUoYm9vbCBlbmFibGVkKQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfTVVURSwgISFlbmFibGVkKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGN1cnJlbnQgaW5wdXQgbXV0ZSBzdGF0ZQorICoKKyAqIFxyZXR1cm4gbXV0ZSBzdGF0ZQorICoKKyAqIFxzYSBod19ncGFkY19zZXRfbXV0ZQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X2dwYWRjX2dldF9tdXRlKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfTVVURSk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBpbnB1dCBhbmQgb3V0cHV0IHNpZ24gY2hhbmdlCisgKgorICogT25jZSBlbmFibGVkLCBzaWduIG9mIEFEQyBpbnB1dCBhbmQgb3V0cHV0IGlzIGNoYW5nZWQuCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlZCBzaWduIGNoYW5nZSBzdGF0ZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX3NldF9zaWduX2NoYW5nZShib29sIGVuYWJsZWQpCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19TSUdOLCAhIWVuYWJsZWQpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgaW5wdXQgYW5kIG91dHB1dCBzaWduIGNoYW5nZQorICoKKyAqIFxyZXR1cm4gc2lnbiBjaGFuZ2Ugc3RhdGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod19ncGFkY19nZXRfc2lnbl9jaGFuZ2Uodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19TSUdOKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IGNob3BwaW5nIHN0YXRlCisgKgorICogT25jZSBlbmFibGVkLCB0d28gc2FtcGxlcyB3aXRoIG9wcG9zaXRlIHBvbGFyaXR5IGFyZSB0YWtlbiB0byBjYW5jZWwgb2Zmc2V0LgorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZWQgY2hvcHBpbmcgc3RhdGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19zZXRfY2hvcHBpbmcoYm9vbCBlbmFibGVkKQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfQ0hPUCwgISFlbmFibGVkKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGN1cnJlbnQgY2hvcHBpbmcgc3RhdGUKKyAqCisgKiBccmV0dXJuIGNob3BwaW5nIHN0YXRlCisgKgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaHdfZ3BhZGNfZ2V0X2Nob3BwaW5nKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfQ0hPUCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBzdGF0ZSBvZiBjb25zdGFudCAyMHVBIGxvYWQgY3VycmVudCBvbiBBREMgTERPIG91dHB1dAorICoKKyAqIENvbnN0YW50IDIwdUEgbG9hZCBjdXJyZW50IG9uIExETyBvdXRwdXQgY2FuIGJlIGVuYWJsZWQgc28gdGhhdCB0aGUgY3VycmVudCB3aWxsIG5vdCBkcm9wIHRvIDAuCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlZCBsb2FkIGN1cnJlbnQgc3RhdGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19zZXRfbGRvX2NvbnN0YW50X2N1cnJlbnQoYm9vbCBlbmFibGVkKQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkwyX1JFRywgR1BfQURDX0kyMFUsICEhZW5hYmxlZCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IHN0YXRlIG9mIGNvbnN0YW50IDIwdUEgbG9hZCBjdXJyZW50IG9uIEFEQyBMRE8gb3V0cHV0CisgKgorICogXHJldHVybiBsb2FkIGN1cnJlbnQgY3VycmVudCBzdGF0ZQorICoKKyAqIFxzYSBod19ncGFkY19zZXRfbGRvX2NvbnN0YW50X2N1cnJlbnQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod19ncGFkY19nZXRfbGRvX2NvbnN0YW50X2N1cnJlbnQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKEdQQURDLCBHUF9BRENfQ1RSTDJfUkVHLCBHUF9BRENfSTIwVSk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBzdGF0ZSBvZiBkeW5hbWljIDEwdUEgbG9hZCBjdXJyZW50IG9uIEFEQyBMRE8gb3V0cHV0CisgKgorICogMTB1QSBsb2FkIGN1cnJlbnQgb24gTERPIG91dHB1dCBjYW4gYmUgZW5hYmxlZCBkdXJpbmcgc2FtcGxlIHBoYXNlIHNvIHRoYXQgdGhlIGxvYWQgY3VycmVudAorICogZHVyaW5nIHNhbXBsaW5nIGFuZCBjb252ZXJzaW9uIHBoYXNlIGJlY29tZXMgYXBwcm94aW1hdGVseSB0aGUgc2FtZS4KKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGVkIGxvYWQgY3VycmVudCBzdGF0ZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX3NldF9sZG9fZHluYW1pY19jdXJyZW50KGJvb2wgZW5hYmxlZCkKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BBREMsIEdQX0FEQ19DVFJMMl9SRUcsIEdQX0FEQ19JRFlOLCAhIWVuYWJsZWQpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBzdGF0ZSBvZiBkeW5hbWljIDEwdUEgbG9hZCBjdXJyZW50IG9uIEFEQyBMRE8gb3V0cHV0CisgKgorICogXHJldHVybiBsb2FkIGN1cnJlbnQgY3VycmVudCBzdGF0ZQorICoKKyAqIFxzYSBod19ncGFkY19zZXRfbGRvX2R5bmFtaWNfY3VycmVudAorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X2dwYWRjX2dldF9sZG9fZHluYW1pY19jdXJyZW50KHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihHUEFEQywgR1BfQURDX0NUUkwyX1JFRywgR1BfQURDX0lEWU4pOworfQorCisvKioKKyAqIFxicmllZiBTZXQgaW50ZXJ2YWwgYmV0d2VlbiBjb252ZXJzaW9ucyBpbiBjb250aW51b3VzIG1vZGUKKyAqCisgKiBJbnRlcnZhbCB0aW1lIGlzIFxwIG11bHQgeCAxLjAyNG1zLiBWYWxpZCB2YWx1ZXMgYXJlIDAtMjU1LgorICoKKyAqIFxwYXJhbSBbaW5dIG11bHQgbXVsdGlwbGllcgorICoKKyAqIFxzYSBod19ncGFkY19zZXRfY29udGludW91cworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX3NldF9pbnRlcnZhbCh1aW50OF90IG11bHQpCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTDNfUkVHLCBHUF9BRENfSU5URVJWQUwsIG11bHQpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBpbnRlcnZhbCBiZXR3ZWVuIGNvbnZlcnNpb25zIGluIGNvbnRpbnVvdXMgbW9kZQorICoKKyAqIFxyZXR1cm4gbXVsdGlwbGllcgorICoKKyAqIFxzYSBod19ncGFkY19zZXRfaW50ZXJ2YWwKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19ncGFkY19nZXRfaW50ZXJ2YWwodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKEdQQURDLCBHUF9BRENfQ1RSTDNfUkVHLCBHUF9BRENfSU5URVJWQUwpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgb2Zmc2V0IGFkanVzdG1lbnQgZm9yIHBvc2l0aXZlIEFEQyBhcnJheQorICoKKyAqIFxwYXJhbSBbaW5dIG9mZnNldCBvZmZzZXQgdmFsdWUKKyAqCisgKiBcc2EgaHdfZ3BhZGNfY2FsaWJyYXRlCisgKiBcc2EgaHdfZ3BhZGNfc2V0X25lZ2F0aXZlX29mZnNldAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX3NldF9vZmZzZXRfcG9zaXRpdmUodWludDE2X3Qgb2Zmc2V0KQoreworICAgICAgICBHUEFEQy0+R1BfQURDX09GRlBfUkVHID0gb2Zmc2V0ICYgUkVHX01TSyhHUEFEQywgR1BfQURDX09GRlBfUkVHLCBHUF9BRENfT0ZGUCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IG9mZnNldCBhZGp1c3RtZW50IGZvciBwb3NpdGl2ZSBBREMgYXJyYXkKKyAqCisgKiBccmV0dXJuIG9mZnNldCB2YWx1ZQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBod19ncGFkY19nZXRfb2Zmc2V0X3Bvc2l0aXZlKHZvaWQpCit7CisgICAgICAgIHJldHVybiBHUEFEQy0+R1BfQURDX09GRlBfUkVHICYgUkVHX01TSyhHUEFEQywgR1BfQURDX09GRlBfUkVHLCBHUF9BRENfT0ZGUCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBvZmZzZXQgYWRqdXN0bWVudCBmb3IgbmVnYXRpdmUgQURDIGFycmF5CisgKgorICogXHBhcmFtIFtpbl0gb2Zmc2V0IG9mZnNldCB2YWx1ZQorICoKKyAqIFxzYSBod19ncGFkY19jYWxpYnJhdGUKKyAqIFxzYSBod19ncGFkY19zZXRfcG9zaXRpdmVfb2Zmc2V0CisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X29mZnNldF9uZWdhdGl2ZSh1aW50MTZfdCBvZmZzZXQpCit7CisgICAgICAgIEdQQURDLT5HUF9BRENfT0ZGTl9SRUcgPSBvZmZzZXQgJiBSRUdfTVNLKEdQQURDLCBHUF9BRENfT0ZGTl9SRUcsIEdQX0FEQ19PRkZOKTsKK30KKworCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBvZmZzZXQgYWRqdXN0bWVudCBmb3IgbmVnYXRpdmUgQURDIGFycmF5CisgKgorICogXHJldHVybiBvZmZzZXQgdmFsdWUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgaHdfZ3BhZGNfZ2V0X29mZnNldF9uZWdhdGl2ZSh2b2lkKQoreworICAgICAgICByZXR1cm4gR1BBREMtPkdQX0FEQ19PRkZOX1JFRyAmIFJFR19NU0soR1BBREMsIEdQX0FEQ19PRkZOX1JFRywgR1BfQURDX09GRk4pOworfQorCisvKioKKyAqIFxicmllZiBTdG9yZSBTaW5nbGUgRW5kZWQgQURDIEdhaW4gRXJyb3IKKyAqCisgKiBccGFyYW0gW2luXSBzaW5nbGUgQURDIFNpbmdsZSBFbmRlZCBHYWluIEVycm9yCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc3RvcmVfc2VfZ2Fpbl9lcnJvcihpbnQxNl90IHNpbmdsZSkKK3sKKyAgICAgICAgaHdfZ3BhZGNfc2luZ2xlX2VuZGVkX2dhaW5fZXJyb3IgPSBzaW5nbGU7Cit9CisKKy8qKgorICogXGJyaWVmIFN0b3JlIERpZmZlcmVudGlhbCBBREMgR2FpbiBFcnJvcgorICoKKyAqIFxwYXJhbSBbaW5dIGRpZmYgQURDIERpZmZlcmVudGlhbCBHYWluIEVycm9yCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc3RvcmVfZGlmZl9nYWluX2Vycm9yKGludDE2X3QgZGlmZikKK3sKKyAgICAgICAgaHdfZ3BhZGNfZGlmZmVyZW50aWFsX2dhaW5fZXJyb3IgPSBkaWZmOworfQorCisvKioKKyAqIFxicmllZiBDaGVjayB0aGUgYXZhaWxhYmlsaXR5IG9mIEFEQyBHYWluIEVycm9yCisgKgorICogXHJldHVybiBBREMgR2FpbiBFcnJvciBhdmFpbGFiaWxpdHkKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod19ncGFkY19wcmVfY2hlY2tfZm9yX2dhaW5fZXJyb3Iodm9pZCkKK3sKKyAgICAgICAgaWYgKGRnX2NvbmZpZ1VTRV9BRENfR0FJTl9FUlJPUl9DT1JSRUNUSU9OID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGh3X2dwYWRjX3NpbmdsZV9lbmRlZF9nYWluX2Vycm9yICYmIGh3X2dwYWRjX2RpZmZlcmVudGlhbF9nYWluX2Vycm9yKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHJhdyBjb252ZXJzaW9uIHJlc3VsdCB2YWx1ZQorICoKKyAqIFVwcGVyIDEwIGJpdHMgYXJlIGFsd2F5cyB2YWxpZCwgbG93ZXIgNiBiaXRzIGFyZSBvbmx5IHZhbGlkIGluIGNhc2Ugb3ZlcnNhbXBsaW5nIGlzIGVuYWJsZWQuCisgKgorICogXHJldHVybiBjb252ZXJzaW9uIHJlc3VsdCB2YWx1ZQorICoKKyAqIFxzYSBod19ncGFkY19zdGFydAorICogXHNhIGh3X2dwYWRjX3NldF9vdmVyc2FtcGxpbmcKKyAqIFxzYSBod19ncGFkY19nZXRfdmFsdWUKKyAqCisgKi8KK3VpbnQxNl90IGh3X2dwYWRjX2dldF9yYXdfdmFsdWUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEdldCBjb252ZXJzaW9uIHJlc3VsdCB2YWx1ZQorICoKKyAqIEludmFsaWQgYml0cyBhcmUgZGlzY2FyZGVkIGZyb20gcmVzdWx0LCBpLmUuIG92ZXJzYW1wbGluZyBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZworICogdmFsdWUuCisgKgorICogXHJldHVybiBjb252ZXJzaW9uIHJlc3VsdCB2YWx1ZQorICoKKyAqIFxzYSBod19ncGFkY19zZXRfb3ZlcnNhbXBsaW5nCisgKiBcc2EgaHdfZ3BhZGNfZ2V0X3Jhd192YWx1ZQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBod19ncGFkY19nZXRfdmFsdWUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIGh3X2dwYWRjX2dldF9yYXdfdmFsdWUoKSA+PiAoNiAtIE1JTig2LCBod19ncGFkY19nZXRfb3ZlcnNhbXBsaW5nKCkpKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGNvbnZlcnNpb24gcmVzdWx0IHZhbHVlIHdpdGhvdXQgZ2FpbiBjb21wZW5zYXRpb24gYW5kIG92ZXIgc2FtcGxpbmcuCisgKgorICogXHJldHVybiBjb252ZXJzaW9uIHJlc3VsdCB2YWx1ZQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBod19ncGFkY19nZXRfdmFsdWVfd2l0aG91dF9nYWluKHZvaWQpCit7CisgICAgICAgIHVpbnQxNl90IGFkY19yYXdfcmVzID0gR1BBREMtPkdQX0FEQ19SRVNVTFRfUkVHOworICAgICAgICByZXR1cm4gYWRjX3Jhd19yZXM7Cit9CisKKy8qKgorICogXGJyaWVmIFN0YXJ0IGEgbWVhc3VyZW1lbnQgYW5kIHdhaXQgZm9yIHRoZSByZXN1bHQuCisgKgorICogXHNhIGh3X2dwYWRjX3N0YXJ0CisgKiBcc2EgaHdfZ3BhZGNfaW5fcHJvZ3Jlc3MKKyAqIFxzYSBod19ncGFkY19jbGVhcl9pbnRlcnJ1cHQKKyAqCisgKi8KK3ZvaWQgaHdfZ3BhZGNfYWRjX21lYXN1cmUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFRha2UgbWVhc3VyZW1lbnRzIHVzaW5nIHRoZSBBREMgYW5kIGV2YWx1YXRlIHRoZSByZXN1bHRzLgorICoKKyAqIFxzYSBod19ncGFkY19hZGNfbWVhc3VyZQorICogXHNhIGh3X2dwYWRjX2dldF9yYXdfdmFsdWUKKyAqCisgKi8KK3ZvaWQgaHdfZ3BhZGNfdGVzdF9tZWFzdXJlbWVudHModm9pZCk7CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfR1BBREMgKi8KKworI2VuZGlmIC8qIEhXX0dQQURDX0hfICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2dwaW8uaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MjE5M2UKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2dwaW8uaApAQCAtMCwwICsxLDQ5NSBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgR1BJTworICogXHsKKyAqIFxicmllZiBHUElPIENvbnRyb2wKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X2dwaW8uaAorICoKKyAqIEBicmllZiBEZWZpbml0aW9uIG9mIEFQSSBmb3IgdGhlIEdQSU8gTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEhXX0dQSU9fSF8KKyNkZWZpbmUgSFdfR1BJT19IXworCisjaWYgZGdfY29uZmlnVVNFX0hXX0dQSU8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzZGtfZGVmcy5oPgorCisvKiBHUElPIGxheW91dCBkZWZpbml0aW9ucyAqLworCisvKiogTnVtYmVyIG9mIEdQSU8gcG9ydHMgYXZhaWxhYmxlICovCisjZGVmaW5lIEhXX0dQSU9fTlVNX1BPUlRTICAgICAgICg1KQorLyoqIE51bWJlciBvZiBHUElPIHBpbnMgYXZhaWxhYmxlIChjdW11bGF0aXZlKSAqLworI2RlZmluZSBIV19HUElPX05VTV9QSU5TICAgICAgICAoSFdfR1BJT19QT1JUXzBfTlVNX1BJTlMgKyBIV19HUElPX1BPUlRfMV9OVU1fUElOUyArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX1BPUlRfMl9OVU1fUElOUyArIEhXX0dQSU9fUE9SVF8zX05VTV9QSU5TICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fUE9SVF80X05VTV9QSU5TKQorLyoqIE51bWJlciBvZiBHUElPIHBpbnMgYXZhaWxhYmxlIGluIHBvcnQgMCAqLworI2RlZmluZSBIV19HUElPX1BPUlRfMF9OVU1fUElOUyAoOCkKKy8qKiBOdW1iZXIgb2YgR1BJTyBwaW5zIGF2YWlsYWJsZSBpbiBwb3J0IDEgKi8KKyNkZWZpbmUgSFdfR1BJT19QT1JUXzFfTlVNX1BJTlMgKDgpCisvKiogTnVtYmVyIG9mIEdQSU8gcGlucyBhdmFpbGFibGUgaW4gcG9ydCAyICovCisjZGVmaW5lIEhXX0dQSU9fUE9SVF8yX05VTV9QSU5TICg1KQorLyoqIE51bWJlciBvZiBHUElPIHBpbnMgYXZhaWxhYmxlIGluIHBvcnQgMyAqLworI2RlZmluZSBIV19HUElPX1BPUlRfM19OVU1fUElOUyAoOCkKKy8qKiBOdW1iZXIgb2YgR1BJTyBwaW5zIGF2YWlsYWJsZSBpbiBwb3J0IDQgKi8KKyNkZWZpbmUgSFdfR1BJT19QT1JUXzRfTlVNX1BJTlMgKDgpCisvKiogTnVtYmVyIG9mIHBpbnMgaW4gZWFjaCBHUElPIHBvcnQgKi8KK2V4dGVybiBjb25zdCB1aW50OF90IGh3X2dwaW9fcG9ydF9udW1fcGluc1tIV19HUElPX05VTV9QT1JUU107CisKKworLyoqCisgKiBcYnJpZWYgR1BJTyBpbnB1dC9vdXRwdXQgbW9kZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfR1BJT19NT0RFX0lOUFVUID0gMCwgICAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBhbiBpbnB1dCAqLworICAgICAgICBIV19HUElPX01PREVfSU5QVVRfUFVMTFVQID0gMHgxMDAsICAgICAgLyoqPCBHUElPIGFzIGFuIGlucHV0IHdpdGggcHVsbC11cCAqLworICAgICAgICBIV19HUElPX01PREVfSU5QVVRfUFVMTERPV04gPSAweDIwMCwgICAgLyoqPCBHUElPIGFzIGFuIGlucHV0IHdpdGggcHVsbC1kb3duICovCisgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQgPSAweDMwMCwgICAgICAgICAgICAvKio8IEdQSU8gYXMgYW4gKGltcGxpY2l0bHkgcHVzaC1wdWxsKSBvdXRwdXQgKi8KKyAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVF9QVVNIX1BVTEwgPSAweDMwMCwgIC8qKjwgR1BJTyBhcyBhbiAoZXhwbGljaXRseSBwdXNoLXB1bGwpIG91dHB1dCAqLworICAgICAgICBIV19HUElPX01PREVfT1VUUFVUX09QRU5fRFJBSU4gPSAweDcwMCwgLyoqPCBHUElPIGFzIGFuIG9wZW4tZHJhaW4gb3V0cHV0ICovCit9IEhXX0dQSU9fTU9ERTsKKworLyoqCisgKiBcYnJpZWYgR1BJTyBwb3dlciBzb3VyY2UKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0dQSU9fUE9XRVJfVjMzID0gMCwgICAgICAgICAgLyoqPCBWMzMgKDMuMyBWKSBwb3dlciByYWlsICovCisgICAgICAgIEhXX0dQSU9fUE9XRVJfVkREMVY4UCA9IDEsICAgICAgLyoqPCBWREQxVjhQICgxLjggVikgcG93ZXIgcmFpbCAqLworfSBIV19HUElPX1BPV0VSOworCisvKioKKyAqIFxicmllZiBHUElPIHBvcnQgbnVtYmVyCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19HUElPX1BPUlRfMCA9IDAsICAgICAvKio8IEdQSU8gUG9ydCAwICovCisgICAgICAgIEhXX0dQSU9fUE9SVF8xID0gMSwgICAgIC8qKjwgR1BJTyBQb3J0IDEgKi8KKyAgICAgICAgSFdfR1BJT19QT1JUXzIgPSAyLCAgICAgLyoqPCBHUElPIFBvcnQgMiAqLworICAgICAgICBIV19HUElPX1BPUlRfMyA9IDMsICAgICAvKio8IEdQSU8gUG9ydCAzICovCisgICAgICAgIEhXX0dQSU9fUE9SVF80ID0gNCAgICAgIC8qKjwgR1BJTyBQb3J0IDQgKi8KK30gSFdfR1BJT19QT1JUOworCisvKioKKyAqIFxicmllZiBHUElPIHBpbiBudW1iZXIKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0dQSU9fUElOXzAgPSAwLCAgICAgIC8qKjwgR1BJTyBQaW4gMCAqLworICAgICAgICBIV19HUElPX1BJTl8xID0gMSwgICAgICAvKio8IEdQSU8gUGluIDEgKi8KKyAgICAgICAgSFdfR1BJT19QSU5fMiA9IDIsICAgICAgLyoqPCBHUElPIFBpbiAyICovCisgICAgICAgIEhXX0dQSU9fUElOXzMgPSAzLCAgICAgIC8qKjwgR1BJTyBQaW4gMyAqLworICAgICAgICBIV19HUElPX1BJTl80ID0gNCwgICAgICAvKio8IEdQSU8gUGluIDQgKi8KKyAgICAgICAgSFdfR1BJT19QSU5fNSA9IDUsICAgICAgLyoqPCBHUElPIFBpbiA1ICovCisgICAgICAgIEhXX0dQSU9fUElOXzYgPSA2LCAgICAgIC8qKjwgR1BJTyBQaW4gNiAqLworICAgICAgICBIV19HUElPX1BJTl83ID0gNywgICAgICAvKio8IEdQSU8gUGluIDcgKi8KK30gSFdfR1BJT19QSU47CisKKy8qKgorICogXGJyaWVmIEdQSU8gZnVuY3Rpb24KKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0dQSU9fRlVOQ19HUElPID0gMCwgICAgICAgICAgICAgICAgICAvKio8IEdQSU8gKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1VBUlRfUlggPSAxLCAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBVQVJUIFJYICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19VQVJUX1RYID0gMiwgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgVUFSVCBUWCAqLworICAgICAgICBIV19HUElPX0ZVTkNfVUFSVF9JUkRBX1JYID0gMywgICAgICAgICAgLyoqPCBHUElPIGFzIFVBUlQgSVJEQSBSWCAqLworICAgICAgICBIV19HUElPX0ZVTkNfVUFSVF9JUkRBX1RYID0gNCwgICAgICAgICAgLyoqPCBHUElPIGFzIFVBUlQgSVJEQSBUWCAqLworICAgICAgICBIV19HUElPX0ZVTkNfVUFSVDJfUlggPSA1LCAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFVBUlQyIFJYICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19VQVJUMl9UWCA9IDYsICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgVUFSVDIgVFggKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1VBUlQyX0lSREFfUlggPSA3LCAgICAgICAgIC8qKjwgR1BJTyBhcyBVQVJUMiBJUkRBIFJYICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19VQVJUMl9JUkRBX1RYID0gOCwgICAgICAgICAvKio8IEdQSU8gYXMgVUFSVDIgSVJEQSBUWCAqLworICAgICAgICBIV19HUElPX0ZVTkNfVUFSVDJfQ1RTTiA9IDksICAgICAgICAgICAgLyoqPCBHUElPIGFzIFVBUlQyIENUU04gKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1VBUlQyX1JUU04gPSAxMCwgICAgICAgICAgIC8qKjwgR1BJTyBhcyBVQVJUMiBSVFNOICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19TUElfREkgPSAxMSwgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgU1BJIERJICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19TUElfRE8gPSAxMiwgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgU1BJIERPICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19TUElfQ0xLID0gMTMsICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgU1BJIENMSyAqLworICAgICAgICBIV19HUElPX0ZVTkNfU1BJX0VOID0gMTQsICAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFNQSSBFTiAqLworICAgICAgICBIV19HUElPX0ZVTkNfU1BJMl9ESSA9IDE1LCAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFNQSTIgREkgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1NQSTJfRE8gPSAxNiwgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBTUEkyIERPICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19TUEkyX0NMSyA9IDE3LCAgICAgICAgICAgICAvKio8IEdQSU8gYXMgU1BJMiBDTEsgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1NQSTJfRU4gPSAxOCwgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBTUEkyIEVOICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19JMkNfU0NMID0gMTksICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgSTJDIFNDTCAqLworICAgICAgICBIV19HUElPX0ZVTkNfSTJDX1NEQSA9IDIwLCAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIEkyQyBTREEgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX0kyQzJfU0NMID0gMjEsICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBJMkMyIFNDTCAqLworICAgICAgICBIV19HUElPX0ZVTkNfSTJDMl9TREEgPSAyMiwgICAgICAgICAgICAgLyoqPCBHUElPIGFzIEkyQzIgU0RBICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QV00wID0gMjMsICAgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgUFdNMCAqLworICAgICAgICBIV19HUElPX0ZVTkNfUFdNMSA9IDI0LCAgICAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBXTTEgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1BXTTIgPSAyNSwgICAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBQV00yICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QV00zID0gMjYsICAgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgUFdNMyAqLworICAgICAgICBIV19HUElPX0ZVTkNfUFdNNCA9IDI3LCAgICAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBXTTQgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX0JMRV9ESUFHID0gMjgsICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBCTEUgRElBRyAqLworICAgICAgICBIV19HUElPX0ZVTkNfRlRERl9ESUFHID0gMjksICAgICAgICAgICAgLyoqPCBHUElPIGFzIEZUREYgRElBRyAqLworICAgICAgICBIV19HUElPX0ZVTkNfUENNX0RJID0gMzAsICAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBDTSBESSAqLworICAgICAgICBIV19HUElPX0ZVTkNfUENNX0RPID0gMzEsICAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBDTSBETyAqLworICAgICAgICBIV19HUElPX0ZVTkNfUENNX0ZTQyA9IDMyLCAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBDTSBGU0MgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1BDTV9DTEsgPSAzMywgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBQQ00gQ0xLICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QRE1fREkgPSAzNCwgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgUERNIERJICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QRE1fRE8gPSAzNSwgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgUERNIERPICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QRE1fQ0xLID0gMzYsICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgUERNIENMSyAqLworICAgICAgICBIV19HUElPX0ZVTkNfVVNCX1NPRiA9IDM3LCAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFVTQiBTT0YgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX0FEQyA9IDM4LCAgICAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBBREMgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1VTQiA9IDM4LCAgICAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBVU0IgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1FTUEkgPSAzOCwgICAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBRU1BJICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19YVEFMMzIgPSAzOCwgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgWFRBTDMyICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19RVUFERUNfWEEgPSAzOSwgICAgICAgICAgICAvKio8IEdQSU8gYXMgUVVBREVDIFhBICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19RVUFERUNfWEIgPSA0MCwgICAgICAgICAgICAvKio8IEdQSU8gYXMgUVVBREVDIFhCICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19RVUFERUNfWUEgPSA0MSwgICAgICAgICAgICAvKio8IEdQSU8gYXMgUVVBREVDIFlBICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19RVUFERUNfWUIgPSA0MiwgICAgICAgICAgICAvKio8IEdQSU8gYXMgUVVBREVDIFlCICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19RVUFERUNfWkEgPSA0MywgICAgICAgICAgICAvKio8IEdQSU8gYXMgUVVBREVDIFpBICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19RVUFERUNfWkIgPSA0NCwgICAgICAgICAgICAvKio8IEdQSU8gYXMgUVVBREVDIFpCICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19JUl9PVVQgPSA0NSwgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgSVIgT1VUICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19CUkVBVEggPSA0NiwgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgQlJFQVRIICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19LQl9ST1cgPSA0NywgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgS0IgUk9XICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19DT0VYX0VYVF9BQ1QwID0gNDgsICAgICAgICAvKio8IEdQSU8gYXMgQ09FWCBFWFQgQUNUMCAqLworICAgICAgICBIV19HUElPX0ZVTkNfQ09FWF9FWFRfQUNUMSA9IDQ5LCAgICAgICAgLyoqPCBHUElPIGFzIENPRVggRVhUIEFDVDEgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX0NPRVhfU01BUlRfQUNUID0gNTAsICAgICAgIC8qKjwgR1BJTyBhcyBDT0VYIFNNQVJUIEFDVCAqLworICAgICAgICBIV19HUElPX0ZVTkNfQ09FWF9TTUFSVF9QUkkgPSA1MSwgICAgICAgLyoqPCBHUElPIGFzIENPRVggU01BUlQgUFJJICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19DTE9DSyA9IDUyLCAgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgQ0xPQ0sgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX09ORVNIT1QgPSA1MywgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBPTkVTSE9UICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QV001ID0gNTQsICAgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgUFdNNSAqLworICAgICAgICBIV19HUElPX0ZVTkNfUE9SVDBfRENGID0gNTUsICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBPUlQwIERDRiAqLworICAgICAgICBIV19HUElPX0ZVTkNfUE9SVDFfRENGID0gNTYsICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBPUlQxIERDRiAqLworICAgICAgICBIV19HUElPX0ZVTkNfUE9SVDJfRENGID0gNTcsICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBPUlQyIERDRiAqLworICAgICAgICBIV19HUElPX0ZVTkNfUE9SVDNfRENGID0gNTgsICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBPUlQzIERDRiAqLworICAgICAgICBIV19HUElPX0ZVTkNfUE9SVDRfRENGID0gNTksICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBPUlQ0IERDRiAqLworICAgICAgICBIV19HUElPX0ZVTkNfUkZfQU5UX1RSSU0wID0gNjAsICAgICAgICAgLyoqPCBHUElPIGFzIFJGIEFOVCBUUklNMCAqLworICAgICAgICBIV19HUElPX0ZVTkNfUkZfQU5UX1RSSU0xID0gNjEsICAgICAgICAgLyoqPCBHUElPIGFzIFJGIEFOVCBUUklNMSAqLworICAgICAgICBIV19HUElPX0ZVTkNfUkZfQU5UX1RSSU0yID0gNjIgICAgICAgICAgLyoqPCBHUElPIGFzIFJGIEFOVCBUUklNMiAqLworfSBIV19HUElPX0ZVTkM7CisKKy8qKgorICogXGJyaWVmIEdQSU8gcGluIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBccCBIV19HUElPX1BJTkNPTkZJRyBhbmQgXHAgSFdfR1BJT19QSU5DT05GSUdfUkVTRVJWRSB0byBzZXQgcGluIGVudHJpZXMuCisgKiBFYWNoIGNvbmZpZ3VyYXRpb24gbXVzdCBiZSB0ZXJtaW5hdGVkIHVzaW5nIFxwIEhXX0dQSU9fUElOQ09ORklHX0VORCBtYWNyby4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgdWludDhfdCAgICAgICAgIHBpbjsgICAgIC8qKjwgcGluIG5hbWUsIGhpZ2gtbmliYmxlIGlzIHBvcnQgbnVtYmVyIGFuZCBsb3ctbmliYmxlIGlzIHBpbiAqLworICAgICAgICBIV19HUElPX01PREUgICAgbW9kZTsgICAgLyoqPCBwaW4gbW9kZSAqLworICAgICAgICBIV19HUElPX0ZVTkMgICAgZnVuYzsgICAgLyoqPCBwaW4gZnVuY3Rpb24gKi8KKyAgICAgICAgYm9vbCAgICAgICAgICAgIGhpZ2g7ICAgIC8qKjwgaW5pdGlhbCBwaW4gc3RhdGUsIHRydWUgZm9yIGhpZ2ggYW5kIGZhbHNlIGZvciBsb3cgKi8KKyAgICAgICAgYm9vbCAgICAgICAgICAgIHJlc2VydmU7IC8qPDwgdHJ1ZSBpZiBwaW4gc2hvdWxkIGJlIGFsc28gcmVzZXJ2ZWQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ3Bpb19jb25maWc7CisKKy8qKgorICogXGJyaWVmIEdQSU8gcGluIGNvbmZpZ3VyYXRpb24gZm9yIFxwIGdwaW9fY29uZmlnCisgKgorICogXHAgeHBvcnQgYW5kIFxwIHhwaW4gYXJlIHNwZWNpZmllZCBhcyBzeW1ib2xzIGZyb20gXHAgSFdfR1BJT19QT1JUIGFuZCBccCBIV19HUElPX1BJTiBlbnVtcworICogcmVzcGVjdGl2ZWx5IG9yIG1vcmUgY29udmVuaWVudGx5IGFzIHBsYWluIG51bWVyaWMgdmFsdWVzLgorICogXHAgeG1vZGUgYW5kIFxwIHhmdW5jIGhhdmUgdGhlIHNhbWUgdmFsdWVzIGFzIGRlZmluZWQgaW4gXHAgSFdfR1BJT19NT0RFIGFuZCBccCBIV19HUElPX0ZVTkMgZW51bXMKKyAqIHJlc3BlY3RpdmVseSwgZXhjZXB0IHRoZXkgaGF2ZSBwcmVmaXggc3RyaXBwZWQuCisgKgorICogXHBhcmFtIFtpbl0geHBvcnQgcG9ydCBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIHhwaW4gcGluIG51bWJlcgorICogXHBhcmFtIFtpbl0geG1vZGUgcGluIG1vZGUKKyAqIFxwYXJhbSBbaW5dIHhmdW5jIHBpbiBmdW5jdGlvbgorICogXHBhcmFtIFtpbl0geGhpZ2ggdHJ1ZSBmb3IgaGlnaCBzdGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlCisgKgorICovCisjZGVmaW5lIEhXX0dQSU9fUElOQ09ORklHKHhwb3J0LCB4cGluLCB4bW9kZSwgeGZ1bmMsIHhoaWdoKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAucGluID0gKHhwb3J0IDw8IDQpIHwgKHhwaW4gJiAweDBGKSwgICAgXAorICAgICAgICAgICAgICAgIC5tb2RlID0gSFdfR1BJT19NT0RFXyAjIyB4bW9kZSwgICAgICAgICBcCisgICAgICAgICAgICAgICAgLmZ1bmMgPSBIV19HUElPX0ZVTkNfICMjIHhmdW5jLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAuaGlnaCA9IHhoaWdoLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIC5yZXNlcnZlID0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0KKworLyoqCisgKiBcYnJpZWYgR1BJTyBwaW4gY29uZmlndXJhdGlvbiBhbmQgcmVzZXJ2YXRpb24gZm9yIFxwIGdwaW9fY29uZmlnCisgKgorICogVGhpcyBtYWNybyBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsIHRvIFxwIEhXX0dQSU9fUElOQ09ORklHLCBleGNlcHQgaXQgYWxzbyByZXNlcnZlcyBwaW4uCisgKgorICogXHBhcmFtIFtpbl0geHBvcnQgcG9ydCBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIHhwaW4gcGluIG51bWJlcgorICogXHBhcmFtIFtpbl0geG1vZGUgcGluIG1vZGUKKyAqIFxwYXJhbSBbaW5dIHhmdW5jIHBpbiBmdW5jdGlvbgorICogXHBhcmFtIFtpbl0geGhpZ2ggdHJ1ZSBmb3IgaGlnaCBzdGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlCisgKgorICogXHNhIEhXX0dQSU9fUElOQ09ORklHCisgKgorICovCisjZGVmaW5lIEhXX0dQSU9fUElOQ09ORklHX1JFU0VSVkUoeHBvcnQsIHhwaW4sIHhtb2RlLCB4ZnVuYywgeGhpZ2gpIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIC5waW4gPSAoeHBvcnQgPDwgNCkgfCAoeHBpbiAmIDB4MEYpLCAgICBcCisgICAgICAgICAgICAgICAgLm1vZGUgPSBIV19HUElPX01PREVfICMjIHhtb2RlLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAuZnVuYyA9IEhXX0dQSU9fRlVOQ18gIyMgeGZ1bmMsICAgICAgICAgXAorICAgICAgICAgICAgICAgIC5oaWdoID0geGhpZ2gsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLnJlc2VydmUgPSB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfQorCisvKioKKyAqIFxicmllZiBNYWNybyB0byBwcm9wZXJseSB0ZXJtaW5hdGUgYXJyYXkgb2YgXHAgZ3Bpb19jb25maWcgZGVmaW5pdGlvbgorICoKKyAqLworI2RlZmluZSBIV19HUElPX1BJTkNPTkZJR19FTkQgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLnBpbiA9IDB4RkYsICAgIFwKKyAgICAgICAgfQorCisvKioKKyAqIFxicmllZiBHUElPIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gY29uZmlndXJlIG11bHRpcGxlIEdQSU9zIGluIG9uZSBjYWxsLgorICogXHAgY2ZnIGlzIGFuIGFycmF5IG9mIEdQSU8gcGlucyBjb25maWd1cmF0aW9uLCBpdCBzaG91bGQgYmUgdGVybWluYXRlZCBieSBkdW1teSBlbGVtZW50IHdpdGgKKyAqIFxwIHBpbiBtZW1iZXIgc2V0IHRvIDB4RkYgKG1hY3JvIFxwIEhXX0dQSU9fUElOQ09ORklHIGNhbiBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UpLgorICoKKyAqIFxwYXJhbSBbaW5dIGNmZyBHUElPIHBpbnMgY29uZmlndXJhdGlvbgorICoKKyAqIFxzYSBod19ncGlvX2NvbmZpZ3VyZV9waW4KKyAqIFxzYSBod19ncGlvX3NldF9waW5fZnVuY3Rpb24KKyAqCisgKi8KK3ZvaWQgaHdfZ3Bpb19jb25maWd1cmUoY29uc3QgZ3Bpb19jb25maWcgY2ZnW10pOworCisvKioKKyAqIFxicmllZiBSZXNlcnZlIEdQSU8gcGluCisgKgorICogUmVzZXJ2ZSBwaW4gZm9yIGV4Y2x1c2l2ZSB1c2FnZS4KKyAqIFRoaXMgbWFjcm8gY2FuIGJlIHVzZWQgaW4gYXBwbGljYXRpb24gcGVyaXBoZXJhbF9zZXR1cCBmdW5jdGlvbiB0byBkZXRlY3QKKyAqIHVzYWdlIG9mIHNhbWUgR1BJTyBwaW4gYnkgZGlmZmVyZW50IGFwcGxpY2F0aW9ucy4KKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IEdQSU8gcG9ydCBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIHBpbiBHUElPIHBpbiBudW1iZXIKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgcGluIHdhcyBzdWNjZXNzZnVsbHkgcmVzZXJ2ZWQgYW5kIHNldHVwLCBmYWxzZSBpZiBwaW4gd2FzIGFscmVhZHkgcmVzZXJ2ZWQKKyAqCisgKi8KK2Jvb2wgaHdfZ3Bpb19yZXNlcnZlX3BpbihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluKTsKKworLyoqCisgKiBcYnJpZWYgUmVzZXJ2ZSBHUElPIHBpbiBhbmQgc2V0IHBpbiBmdW5jdGlvbgorICoKKyAqIFJlc2VydmUgcGluIGFuZCBzZXQgdXAgaXQgZnVuY3Rpb24uIElmIHBpbiB3YXMgYWxyZWFkeSByZXNlcnZlZCBkbyBub3RoaW5nLgorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgR1BJTyBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0gcGluIEdQSU8gcGluIG51bWJlcgorICogXHBhcmFtIFtpbl0gbW9kZSBHUElPIGFjY2VzcyBtb2RlCisgKiBccGFyYW0gW2luXSBmdW5jdGlvbiBHUElPIGZ1bmN0aW9uCisgKiBccGFyYW0gW2luXSBoaWdoIGluIGNhc2Ugb2YgUElEX0dQSU8gYW5kIE9VVFBVVCB2YWx1ZSB0byBzZXQgb24gcGluCisgKgorICogXHJldHVybiB0cnVlIGlmIHBpbiB3YXMgc3VjY2Vzc2Z1bGx5IHJlc2VydmVkIGFuZCBzZXR1cCwgZmFsc2UgaWYgcGluIHdhcyBhbHJlYWR5IHJlc2VydmVkCisgKgorICovCitib29sIGh3X2dwaW9fcmVzZXJ2ZV9hbmRfY29uZmlndXJlX3BpbihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluLCBIV19HUElPX01PREUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkMgZnVuY3Rpb24sIGJvb2wgaGlnaCk7CisKKy8qKgorICogXGJyaWVmIFVucmVzZXJ2ZSBHUElPIHBpbgorICoKKyAqIEZyZWUgcmVzZXJ2ZWQgcGluLiBJZiBwaW4gd2FzIG5vdCByZXNlcnZlZCBkbyBub3RoaW5nLgorICogQ29uZmlndXJhdGlvbiBvZiBwaW4gZG9lcyBub3QgY2hhbmdlIGp1c3QgcmVzZXJ2YXRpb24uCisgKgorICogXG5vdGUgSWYgcGluIHdhcyByZXNlcnZlZCB1c2luZyBSRVNFUlZFX0dQSU8gaXQgd2lsbCBhbHNvIGJlIHVucmVzZXJ2ZWQuCisgKiBJZiBSRVNFUlZFX0dQSU8gd2FzIG5vdCBlbmFibGVkIGJ5IGNvbXBpbGUgdGltZSBmbGFncyBjYWxsIHRvIHRoaXMgZnVuY3Rpb24KKyAqIG1heSBjYXVzZSB1bmV4cGVjdGVkIHJlc3VsdC4KKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IEdQSU8gcG9ydCBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIHBpbiBHUElPIHBpbiBudW1iZXIKKyAqCisgKiBcc2EgaHdfZ3Bpb19yZXNlcnZlX2FuZF9jb25maWd1cmVfcGluCisgKiBcc2EgaHdfZ3Bpb19yZXNlcnZlX3BpbgorICogXHNhIFJFU0VSVkVfR1BJTworICoKKyAqLwordm9pZCBod19ncGlvX3VucmVzZXJ2ZV9waW4oSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbik7CisKKyNpZiAoREVCVUdfR1BJT19BTExPQ19NT05JVE9SX0VOQUJMRUQgPT0gMSkKKy8qKgorICogXGJyaWVmIFJlc2VydmUgR1BJTyBwaW4KKyAqCisgKiBSZXNlcnZlIHBpbiBmb3IgZXhjbHVzaXZlIHVzYWdlLiBJZiBwaW4gaXMgYWxyZWFkeSBhbGxvY2F0ZWQgdHJpZ2dlciBicmVha3BvaW50LgorICogVGhpcyBtYWNybyBzaG91bGQgYmUgdXNlZCBpbiBhcHBsaWNhdGlvbiBwZXJpcGhlcmFsX3NldHVwIGZ1bmN0aW9uIHRvIGRldGVjdAorICogdXNhZ2Ugb2Ygc2FtZSBHUElPIHBpbiBieSBkaWZmZXJlbnQgYXBwbGljYXRpb25zLgorICoKKyAqIElmIHJ1bnRpbWUgR1BJTyByZXNlcnZhdGlvbiBpcyBuZWVkZWQsIHVzZSBod19ncGlvX3Jlc2VydmVfcGluLAorICogaHdfZ3Bpb19yZXNlcnZlX2FuZF9jb25maWd1cmVfcGluIGFuZCBod19ncGlvX3VucmVzZXJ2ZV9waW4gaW5zdGVhZC4KKyAqCisgKiBccGFyYW0gW2luXSBuYW1lIHBhcmFtZXRlciBpZ25vcmVkLCB1c2VkIGZvciBkZWJ1ZyBvbmx5CisgKiBccGFyYW0gW2luXSBwb3J0IEdQSU8gcG9ydCBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIHBpbiBHUElPIHBpbiBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIGZ1bmMgcGFyYW1ldGVyIGlnbm9yZWQgKGZvciBjb21wYXRpYmlsaXR5KQorICoKKyAqIFxzYSBod19ncGlvX3Jlc2VydmVfcGluCisgKiBcc2EgaHdfZ3Bpb19yZXNlcnZlX2FuZF9jb25maWd1cmVfcGluCisgKiBcc2EgaHdfZ3Bpb191bnJlc2VydmVfcGluIGluc3RlYWQKKyAqCisgKi8KKyNkZWZpbmUgUkVTRVJWRV9HUElPKG5hbWUsIHBvcnQsIHBpbiwgZnVuYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoIWh3X2dwaW9fcmVzZXJ2ZV9waW4oKHBvcnQpLCAocGluKSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGRlYnVnZ2VyIHN0b3BzIGF0IHRoaXMgbGluZSwgdGhlcmUgaXMgY29uZmlndXJhdGlvbiBwcm9ibGVtICovICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBpbiBpcyB1c2VkIHdpdGhvdXQgYmVpbmcgcmVzZXJ2ZWQgZmlyc3QgKi8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fQktQVCgwKTsgLyogdGhpcyBwaW4gaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgcmVzZXJ2ZWQhICovICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworI2Vsc2UKKworI2RlZmluZSBSRVNFUlZFX0dQSU8oIG5hbWUsIHBvcnQsIHBpbiwgZnVuYyApICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorCisjZW5kaWYgLy8gKERFQlVHX0dQSU9fQUxMT0NfTU9OSVRPUl9FTkFCTEVEID09IDEpCisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgcGluIHR5cGUgYW5kIG1vZGUKKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IEdQSU8gcG9ydAorICogXHBhcmFtIFtpbl0gcGluIEdQSU8gcGluCisgKiBccGFyYW0gW2luXSBtb2RlIEdQSU8gcGluIG1vZGUKKyAqIFxwYXJhbSBbaW5dIGZ1bmN0aW9uIEdQSU8gcGluIHVzYWdlCisgKgorICovCit2b2lkIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluLCBIV19HUElPX01PREUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQyBmdW5jdGlvbik7CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgcGluIHR5cGUgYW5kIG1vZGUKKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IEdQSU8gcG9ydAorICogXHBhcmFtIFtpbl0gcGluIEdQSU8gcGluCisgKiBccGFyYW0gW291dF0gbW9kZSBHUElPIHBpbiBtb2RlCisgKiBccGFyYW0gW291dF0gZnVuY3Rpb24gR1BJTyBwaW4gdXNhZ2UKKyAqCisgKi8KK3ZvaWQgaHdfZ3Bpb19nZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4sIEhXX0dQSU9fTU9ERSogbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQyogZnVuY3Rpb24pOworCisvKioKKyAqIFxicmllZiBDb21iaW5lZCBmdW5jdGlvbiB0byBzZXQgdGhlIHN0YXRlIGFuZCB0aGUgdHlwZSBhbmQgbW9kZSBvZiB0aGUgR1BJTyBwaW4KKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IEdQSU8gcG9ydAorICogXHBhcmFtIFtpbl0gcGluIEdQSU8gcGluCisgKiBccGFyYW0gW2luXSBtb2RlIEdQSU8gcGluIG1vZGUKKyAqIFxwYXJhbSBbaW5dIGZ1bmN0aW9uIEdQSU8gcGluIHVzYWdlCisgKiBccGFyYW0gW2luXSBoaWdoIHNldCB0byBUUlVFIHRvIHNldCB0aGUgcGluIGludG8gaGlnaCBlbHNlIGxvdworICoKKyAqLwordm9pZCBod19ncGlvX2NvbmZpZ3VyZV9waW4oSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbiwgSFdfR1BJT19NT0RFIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQyBmdW5jdGlvbiwgY29uc3QgYm9vbCBoaWdoKTsKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlIHBvd2VyIHNvdXJjZSBmb3IgcGluIG91dHB1dAorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgR1BJTyBwb3J0CisgKiBccGFyYW0gW2luXSBwaW4gR1BJTyBwaW4KKyAqIFxwYXJhbSBbaW5dIHBvd2VyIEdQSU8gcG93ZXIgc291cmNlCisgKgorICovCit2b2lkIGh3X2dwaW9fY29uZmlndXJlX3Bpbl9wb3dlcihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluLCBIV19HUElPX1BPV0VSIHBvd2VyKTsKKworLyoqCisgKiBcYnJpZWYgU2V0IGEgR1BJTyBpbiBoaWdoIHN0YXRlCisgKgorICogVGhlIEdQSU8gc2hvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IGNvbmZpZ3VyZWQgYXMgYW4gb3V0cHV0IQorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgR1BJTyBwb3J0CisgKiBccGFyYW0gW2luXSBwaW4gR1BJTyBwaW4KKyAqCisgKi8KK3ZvaWQgaHdfZ3Bpb19zZXRfYWN0aXZlKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4pOworCisvKioKKyAqIFxicmllZiBTZXQgYSBHUElPIGluIGxvdyBzdGF0ZQorICoKKyAqIFRoZSBHUElPIHNob3VsZCBoYXZlIGJlZW4gcHJldmlvdXNseSBjb25maWd1cmVkIGFzIGFuIG91dHB1dCEKKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IEdQSU8gcG9ydAorICogXHBhcmFtIFtpbl0gcGluIEdQSU8gcGluCisgKgorICovCit2b2lkIGh3X2dwaW9fc2V0X2luYWN0aXZlKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4pOworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIEdQSU8gc3RhdHVzCisgKgorICogVGhlIEdQSU8gc2hvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IGNvbmZpZ3VyZWQgYXMgaW5wdXQhCisgKgorICogXHBhcmFtIFtpbl0gcG9ydCBHUElPIHBvcnQKKyAqIFxwYXJhbSBbaW5dIHBpbiBHUElPIHBpbgorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiB0aGUgcGluIGlzIGhpZ2gsIGZhbHNlIGlmIGxvdworICoKKyAqLworYm9vbCBod19ncGlvX2dldF9waW5fc3RhdHVzKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4pOworCisvKioKKyAqIFxicmllZiBUb2dnbGUgR1BJTyBwaW4gc3RhdGUKKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IEdQSU8gcG9ydAorICogXHBhcmFtIFtpbl0gcGluIEdQSU8gcGluCisgKgorICovCit2b2lkIGh3X2dwaW9fdG9nZ2xlKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4pOworCisvKioKKyAqIFxicmllZiBGaW5kIHBpbnMgd2l0aCBzcGVjaWZpYyBmdW5jdGlvbgorICoKKyAqIEZ1bmN0aW9uIHNlYXJjaGVzIGZvciBwaW5zIGNvbmZpZ3VyZWQgZm9yIHNwZWNpZmljIGZ1bmN0aW9uLgorICogSWYgYnVmIGlzIG5vdCBOVUxMIGFuZCBidWZfc2l6ZSBpcyBncmVhdGVyIHRoYW4gMCBwaW5zIGFyZSBzdG9yZWQgaW4gYnVmCisgKiBoaWdoLW5pYmJsZSBpcyBwb3J0IG51bWJlciBhbmQgbG93LW5pYmJsZSBpcyBwaW4uCisgKiBJZiBudW1iZXIgb2YgcGlucyBmb3VuZCBpcyBncmVhdGVyIHRoZW4gYnVmX3NpemUgb25seSBidWZfc2l6ZSBlbnRyaWVzIGFyZSBmaWxsZWQsIHRob3VnaAorICogdGhlIHJldHVybmVkIG51bWJlciBvZiBmb3VuZCBwaW5zIGlzIGNvcnJlY3QuCisgKgorICogXHBhcmFtIFtpbl0gZnVuYyBmdW5jdGlvbiB0byBsb29rdXAKKyAqIFxwYXJhbSBbb3V0XSBidWYgYnVmZmVyIGZvciBwb3J0LXBpbiBwYWlycyB0aGF0IGFyZSBjb25maWd1cmVkIGZvciBzcGVjaWZpYyBmdW5jdGlvbgorICogXHBhcmFtIFtpbl0gYnVmX3NpemUgc2l6ZSBvZiBidWYKKyAqCisgKiBccmV0dXJuIG51bWJlciBvZiBwaW5zIHdpdGggc3BlY2lmaWMgZnVuY3Rpb24gcHV0IGluIGJ1ZgorICogICAgICAgICAwIC0gbm8gcGluIGlzIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZnVuY3Rpb24KKyAqCisgKi8KK2ludCBod19ncGlvX2dldF9waW5zX3dpdGhfZnVuY3Rpb24oSFdfR1BJT19GVU5DIGZ1bmMsIHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplKTsKKworCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX0dQSU8gKi8KKworI2VuZGlmIC8qIEhXX0dQSU9fSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfaGFyZF9mYXVsdC5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19oYXJkX2ZhdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzM2ZhZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfaGFyZF9mYXVsdC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgU1lTVEVNCisgKiBceworICogXGFkZHRvZ3JvdXAgRXhjZXB0aW9uX0hhbmRsZXJzCisgKiBceworICogXGJyaWVmIEdlbmVyaWMgRXhjZXB0aW9uIEhhbmRsZXJzCisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod19oYXJkX2ZhdWx0LmgKKyAqCisgKiBAYnJpZWYgSGFyZC1GYXVsdCBIYW5kbGVyIGluY2x1ZGUgZmlsZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEhXX0hBUkRfRkFVTFRfSF8KKyNkZWZpbmUgSFdfSEFSRF9GQVVMVF9IXworCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKworI2RlZmluZSBIQVJERkFVTFRfTUFHSUNfTlVNQkVSICAgICAgICAgIDB4QkFEQzBGRkUKKworLyoqCisgKiBcYnJpZWYgSG9sZHMgdGhlIHN0YWNrIGNvbnRlbnRzIHdoZW4gYSBoYXJkLWZhdWx0IG9jY3Vycy4KKyAqCisgKiBcZGV0YWlscyBUaGUgc3RhY2sgY29udGVudHMgYXJlIGNvcGllZCBhdCB0aGlzIHZhcmlhYmxlIHdoZW4gYSBoYXJkLWZhdWx0IG9jY3Vycy4gVGhlIGZpcnN0CisgKiAgICAgICAgcG9zaXRpb24gaXMgbWFya2VkIHdpdGggYSBzcGVjaWFsICJmbGFnIiAoMHhCQURDMEZGRSkgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZGF0YSB0aGF0CisgKiAgICAgICAgZm9sbG93IGFyZSB2YWxpZC4KKyAqLworZXh0ZXJuIHVpbnQzMl90IGhhcmRmYXVsdF9ldmVudF9kYXRhWzldOworCisjZW5kaWYgLyogSFdfSEFSRF9GQVVMVF9IXyAqLworCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2xlZC5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19sZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjRjNDg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19sZWQuaApAQCAtMCwwICsxLDE1MiBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgTEVECisgKiBceworICogXGJyaWVmIExFRCBDb250cm9sbGVyCisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod19sZWQuaAorICoKKyAqIEBicmllZiBEZWZpbml0aW9uIG9mIEFQSSBmb3IgdGhlIExFRCBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgSFdfTEVEX0hfCisjZGVmaW5lIEhXX0xFRF9IXworCisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKworLyoqCisgKiBcYnJpZWYgU291cmNlIGZvciBMRUQxCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0xFRF9TUkMxX1BXTTIgICA9IDAsICAgICAgLyoqPCBMRUQxIGNvbnRyb2xsZWQgYnkgUFdNMiAqLworICAgICAgICBIV19MRURfU1JDMV9CUkVBVEggPSAxICAgICAgIC8qKjwgTEVEMSBjb250cm9sbGVkIGJ5IEJyZWF0aCBUaW1lciAqLworfSBIV19MRURfU1JDMTsKKworLyoqCisgKiBcYnJpZWYgU291cmNlIGZvciBMRUQyCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0xFRF9TUkMyX1BXTTMgICA9IDAsICAgICAgLyoqPCBMRUQyIGNvbnRyb2xsZWQgYnkgUFdNMyAqLworICAgICAgICBIV19MRURfU1JDMl9CUkVBVEggPSAxICAgICAgIC8qKjwgTEVEMiBjb250cm9sbGVkIGJ5IEJyZWF0aCBUaW1lciAqLworfSBIV19MRURfU1JDMjsKKworLyoqCisgKiBcYnJpZWYgU291cmNlIGZvciBMRUQzCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0xFRF9TUkMzX1BXTTQgICA9IDAsICAgICAgLyoqPCBMRUQzIGNvbnRyb2xsZWQgYnkgUFdNNCAqLworICAgICAgICBIV19MRURfU1JDM19CUkVBVEggPSAxICAgICAgIC8qKjwgTEVEMyBjb250cm9sbGVkIGJ5IEJyZWF0aCBUaW1lciAqLworfSBIV19MRURfU1JDMzsKKworCisvKioKKyAqIFxicmllZiBTZXQgdGhlIHNvdXJjZSB0aGF0IGNvbnRyb2xzIExFRDEKKyAqCisgKiBccGFyYW0gW2luXSBzcmMgdGhlIHNvdXJjZSB0aGF0IGNvbnRyb2xzIExFRDEKKyAqCisgKiBcc2EgSFdfTEVEX1NSQzEKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfbGVkX3NldF9sZWQxX3NyYyhIV19MRURfU1JDMSBzcmMpCit7CisgICAgICAgIFJFR19TRVRGKEdQUkVHLCBMRURfQ09OVFJPTF9SRUcsIExFRDFfU1JDX1NFTCwgc3JjKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBzb3VyY2UgdGhhdCBjb250cm9scyBMRUQyCisgKgorICogXHBhcmFtIFtpbl0gc3JjIHRoZSBzb3VyY2UgdGhhdCBjb250cm9scyBMRUQyCisgKgorICogXHNhIEhXX0xFRF9TUkMyCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2xlZF9zZXRfbGVkMl9zcmMoSFdfTEVEX1NSQzIgc3JjKQoreworICAgICAgICBSRUdfU0VURihHUFJFRywgTEVEX0NPTlRST0xfUkVHLCBMRUQyX1NSQ19TRUwsIHNyYyk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgc291cmNlIHRoYXQgY29udHJvbHMgTEVEMworICoKKyAqIFxwYXJhbSBbaW5dIHNyYyB0aGUgc291cmNlIHRoYXQgY29udHJvbHMgTEVEMworICoKKyAqIFxzYSBIV19MRURfU1JDMworICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19sZWRfc2V0X2xlZDNfc3JjKEhXX0xFRF9TUkMzIHNyYykKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BSRUcsIExFRF9DT05UUk9MX1JFRywgTEVEM19TUkNfU0VMLCBzcmMpOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgb3IgZGlzYWJsZSBMRUQxCisgKgorICogXHBhcmFtIFtpbl0gc3RhdGUgdHJ1ZSB0byBlbmFibGUgTEVEMSwgb3IgZmFsc2UgdG8gZGlzYWJsZSBpdAorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfbGVkX2VuYWJsZV9sZWQxKGJvb2wgc3RhdGUpCit7CisgICAgICAgIFJFR19TRVRGKEdQUkVHLCBMRURfQ09OVFJPTF9SRUcsIExFRDFfRU4sIHN0YXRlKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgTEVEMgorICoKKyAqIFxwYXJhbSBbaW5dIHN0YXRlIHRydWUgdG8gZW5hYmxlIExFRDIsIG9yIGZhbHNlIHRvIGRpc2FibGUgaXQKKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2xlZF9lbmFibGVfbGVkMihib29sIHN0YXRlKQoreworICAgICAgICBSRUdfU0VURihHUFJFRywgTEVEX0NPTlRST0xfUkVHLCBMRUQyX0VOLCBzdGF0ZSk7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIExFRDMKKyAqCisgKiBccGFyYW0gW2luXSBzdGF0ZSB0cnVlIHRvIGVuYWJsZSBMRUQzLCBvciBmYWxzZSB0byBkaXNhYmxlIGl0CisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19sZWRfZW5hYmxlX2xlZDMoYm9vbCBzdGF0ZSkKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BSRUcsIExFRF9DT05UUk9MX1JFRywgTEVEM19FTiwgc3RhdGUpOworfQorCisKKyNlbmRpZiAvKiBIV19MRURfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfb3RwYy5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19vdHBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxNTY4NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfb3RwYy5oCkBAIC0wLDAgKzEsNTc2IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBPVFBDCisgKiBceworICogXGJyaWVmIE9UUCBNZW1vcnkgQ29udHJvbGxlcgorICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod19vdHBjLmgKKyAqCisgKiBAYnJpZWYgRGVmaW5pdGlvbiBvZiBBUEkgZm9yIHRoZSBPVFAgQ29udHJvbGxlciBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEhXX09UUENfSF8KKyNkZWZpbmUgSFdfT1RQQ19IXworCisjaWYgZGdfY29uZmlnVVNFX0hXX09UUEMKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzZGtfZGVmcy5oPgorCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgbWFzayBvZiBhIGZpZWxkIG9mIGFuIE9UUEMgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqCisgKi8KKyNkZWZpbmUgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhyZWcsIGZpZWxkKSBcCisgICAgICAgIChPVFBDX09UUENfIyNyZWcjI19SRUdfIyNPVFBDXyMjcmVnIyNfIyNmaWVsZCMjX01zaykKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBiaXQgcG9zaXRpb24gb2YgYSBmaWVsZCBvZiBhbiBPVFBDIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gYWNjZXNzCisgKgorICovCisjZGVmaW5lIEhXX09UUENfUkVHX0ZJRUxEX1BPUyhyZWcsIGZpZWxkKSBcCisgICAgICAgIChPVFBDX09UUENfIyNyZWcjI19SRUdfIyNPVFBDXyMjcmVnIyNfIyNmaWVsZCMjX1BvcykKKworLyoqCisgKiBcYnJpZWYgUHJlcGFyZSAoaS5lLiBzaGlmdCBhbmQgbWFzaykgYSB2YWx1ZSB0byBiZSB1c2VkIGZvciBhbiBPVFBDIHJlZ2lzdGVyIGZpZWxkLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSB2YWwgaXMgdGhlIHZhbHVlIHRvIHByZXBhcmUKKyAqCisgKi8KKyNkZWZpbmUgSFdfT1RQQ19GSUVMRF9WQUwocmVnLCBmaWVsZCwgdmFsKSBcCisgICAgICAgICgoKHZhbCkgPDwgSFdfT1RQQ19SRUdfRklFTERfUE9TKHJlZywgZmllbGQpKSAmIEhXX09UUENfUkVHX0ZJRUxEX01BU0socmVnLCBmaWVsZCkpCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdmFsdWUgb2YgYSBmaWVsZCBvZiBhbiBPVFBDIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gd3JpdGUKKyAqCisgKiBccmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZmllbGQKKyAqCisgKi8KKyNkZWZpbmUgSFdfT1RQQ19SRUdfR0VURihyZWcsIGZpZWxkKSBcCisgICAgICAgICgoT1RQQy0+T1RQQ18jI3JlZyMjX1JFRyAmIChPVFBDX09UUENfIyNyZWcjI19SRUdfIyNPVFBDXyMjcmVnIyNfIyNmaWVsZCMjX01zaykpID4+IChPVFBDX09UUENfIyNyZWcjI19SRUdfIyNPVFBDXyMjcmVnIyNfIyNmaWVsZCMjX1BvcykpCisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgdmFsdWUgb2YgYSBmaWVsZCBvZiBhbiBPVFBDIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gd3JpdGUKKyAqIFxwYXJhbSBbaW5dIG5ld192YWwgaXMgdGhlIHZhbHVlIHRvIHdyaXRlCisgKgorICovCisjZGVmaW5lIEhXX09UUENfUkVHX1NFVEYocmVnLCBmaWVsZCwgbmV3X3ZhbCkgXAorICAgICAgICBPVFBDLT5PVFBDXyMjcmVnIyNfUkVHID0gKChPVFBDLT5PVFBDXyMjcmVnIyNfUkVHICYgfihPVFBDX09UUENfIyNyZWcjI19SRUdfIyNPVFBDXyMjcmVnIyNfIyNmaWVsZCMjX01zaykpIHwgXAorICAgICAgICAoKE9UUENfT1RQQ18jI3JlZyMjX1JFR18jI09UUENfIyNyZWcjI18jI2ZpZWxkIyNfTXNrKSAmICgobmV3X3ZhbCkgPDwgKE9UUENfT1RQQ18jI3JlZyMjX1JFR18jI09UUENfIyNyZWcjI18jI2ZpZWxkIyNfUG9zKSkpKQorCisKKy8qKgorICogXGJyaWVmIE9UUCBDb250cm9sbGVyIG1vZGUKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfT1RQQ19NT0RFX1NUQlkgICAgICAgPSAwLAorICAgICAgICBIV19PVFBDX01PREVfTVJFQUQgICAgICA9IDEsCisgICAgICAgIEhXX09UUENfTU9ERV9NUFJPRyAgICAgID0gMiwKKyAgICAgICAgSFdfT1RQQ19NT0RFX0FSRUFEICAgICAgPSAzLAorICAgICAgICBIV19PVFBDX01PREVfQVBST0cgICAgICA9IDQsCisgICAgICAgIEhXX09UUENfTU9ERV9UQkxBTksgICAgID0gNSwKKyAgICAgICAgSFdfT1RQQ19NT0RFX1RERUMgICAgICAgPSA2LAorICAgICAgICBIV19PVFBDX01PREVfVFdSICAgICAgICA9IDcKK30gSFdfT1RQQ19NT0RFOworCisjZGVmaW5lIE1BWF9SUl9BVkFJTCAgICAgICAgICAgICg4KQorCisjZGVmaW5lIE9UUF9DTEtfSVNfMTZNICAgICAgICAgICgwKQorI2RlZmluZSBPVFBfQ0xLX0lTXzMyTSAgICAgICAgICAoMSkKKyNkZWZpbmUgT1RQX0NMS19JU180OE0gICAgICAgICAgKDIpCisKKworLyoqCisgKiBcYnJpZWYgV29yZCBpbnNpZGUgY2VsbCB0byBwcm9ncmFtL3JlYWQKKyAqCisgKiBDZWxsIGNvbnRlbnRzIGluIG1lbW9yeSBzdGFydHMgd2l0aCBsb3cgd29yZCAoaS5lLiB0byBwcm9ncmFtL3JlYWQgYm90aCB3b3JkcyBpbiBjZWxsIGF0IG9uY2UsCisgKiBIV19PVFBDX1dPUkRfTE9XIHNob3VsZCBiZSB1c2VkIGZvciBhZGRyZXNzaW5nKS4KKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX09UUENfV09SRF9MT1cgPSAwLAorICAgICAgICBIV19PVFBDX1dPUkRfSElHSCA9IDEKK30gSFdfT1RQQ19XT1JEOworCisKKy8qKgorICogXGJyaWVmIFN5c3RlbSBjbG9jayBmcmVxdWVuY3kgaW4gTUh6CisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19PVFBDX1NZU19DTEtfRlJFUV8xID0gMCwKKyAgICAgICAgSFdfT1RQQ19TWVNfQ0xLX0ZSRVFfMiA9IDEsCisgICAgICAgIEhXX09UUENfU1lTX0NMS19GUkVRXzMgPSAyLAorICAgICAgICBIV19PVFBDX1NZU19DTEtfRlJFUV80ID0gMywKKyAgICAgICAgSFdfT1RQQ19TWVNfQ0xLX0ZSRVFfNiA9IDQsCisgICAgICAgIEhXX09UUENfU1lTX0NMS19GUkVRXzggPSA1LAorICAgICAgICBIV19PVFBDX1NZU19DTEtfRlJFUV8xMiA9IDYsCisgICAgICAgIEhXX09UUENfU1lTX0NMS19GUkVRXzE2ID0gNywKKyAgICAgICAgSFdfT1RQQ19TWVNfQ0xLX0ZSRVFfMjQgPSA4LAorICAgICAgICBIV19PVFBDX1NZU19DTEtfRlJFUV8zMiA9IDksCisgICAgICAgIEhXX09UUENfU1lTX0NMS19GUkVRXzQ4ID0gMTAKK30gSFdfT1RQQ19TWVNfQ0xLX0ZSRVE7CisKKy8qCisgKiBSZXNldCB2YWx1ZXMgb2YgT1RQQyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBPVFBDX01PREVfUkVHX1JFU0VUICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE9UUENfUENUUkxfUkVHX1JFU0VUICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgT1RQQ19TVEFUX1JFR19SRVNFVCAgICAgICAgICAgICAgICAgICgweDAwMDAwMDUxKQorI2RlZmluZSBPVFBDX0FIQkFEUl9SRUdfUkVTRVQgICAgICAgICAgICAgICAgKDB4MDdGQzAwMDApCisjZGVmaW5lIE9UUENfQ0VMQURSX1JFR19SRVNFVCAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgT1RQQ19OV09SRFNfUkVHX1JFU0VUICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBPVFBDX0ZGUFJUX1JFR19SRVNFVCAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE9UUENfRkZSRF9SRUdfUkVTRVQgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgT1RQQ19QV09SRExfUkVHX1JFU0VUICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBPVFBDX1BXT1JESF9SRUdfUkVTRVQgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE9UUENfVElNMV9SRUdfUkVTRVQgICAgICAgICAgICAgICAgICAoMHgxQTEwNEYyMCkKKyNkZWZpbmUgT1RQQ19USU0yX1JFR19SRVNFVCAgICAgICAgICAgICAgICAgICgweDAwMDEwMDAwKQorCisvKioKKyAqIFxicmllZiBDb252ZXJ0IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgZXhwcmVzc2VkIGluIE1IeiB0byBlcXVpdmFsZW50IEhXX09UUENfU1lTX0NMS19GUkVRIHZhbHVlCisgKgorICogXHNhIEhXX09UUENfU1lTX0NMS19GUkVRCisgKi8KK19fUkVUQUlORURfQ09ERSBIV19PVFBDX1NZU19DTEtfRlJFUSBod19vdHBjX2NvbnZlcnRfc3lzX2Nsa19taHoodWludDMyX3QgY2xrX2ZyZXEpOworCisKKy8qKgorICogXGJyaWVmIEluaXRpYWxpemUgdGhlIE9UUCBDb250cm9sbGVyLgorICoKKyAqIFx3YXJuaW5nIFRoZSBBSEIgY2xvY2sgbXVzdCBiZSB1cCB0byA0OE1IeiEgSXQgaXMgYSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyIHRvIGNoZWNrIHRoaXMhCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfb3RwY19pbml0KHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBpZiAoKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpCisgICAgICAgICAgICAgICAgfHwgKChkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiA9PSAxKSAmJiAoQ0hJUF9JU19BRSkpKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBSZXNldCBPVFAgY29udHJvbGxlcgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIE9UUEMtPk9UUENfTU9ERV9SRUcgPSBIV19PVFBDX01PREVfU1RCWTsgICAgICAgICAgICAgICAgLy8gU2V0IE9UUEMgdG8gc3RhbmRieQorICAgICAgICAgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIFNZU19DVFJMX1JFRywgT1RQQ19SRVNFVF9SRVEpOyAgICAgLy8gUmVzZXQgdGhlIE9UUEMKKyAgICAgICAgICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBTWVNfQ1RSTF9SRUcsIE9UUENfUkVTRVRfUkVRKTsgICAgIC8vIEdldCB0aGUgT1RQQyBvdXQgb2YgUmVzZXQKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogSW5pdGlhbGl6ZSB0aGUgUE9SIHJlZ2lzdGVycworICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIE9UUEMtPk9UUENfTldPUkRTX1JFRyA9IE9UUENfTldPUkRTX1JFR19SRVNFVDsKKyAgICAgICAgICAgICAgICBPVFBDLT5PVFBDX1RJTTFfUkVHID0gT1RQQ19USU0xX1JFR19SRVNFVDsKKyAgICAgICAgICAgICAgICBPVFBDLT5PVFBDX1RJTTJfUkVHID0gT1RQQ19USU0yX1JFR19SRVNFVDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEVuYWJsZSBPVFBDIGNsb2NrCisgICAgICAgICAqLworICAgICAgICBDUkdfVE9QLT5DTEtfQU1CQV9SRUcgfD0gMSA8PCBSRUdfUE9TKENSR19UT1AsIENMS19BTUJBX1JFRywgT1RQX0VOQUJMRSk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBDbG9zZSB0aGUgT1RQIENvbnRyb2xsZXIuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfb3RwY19jbG9zZSh2b2lkKQoreworICAgICAgICAvKgorICAgICAgICAgKiBEaXNhYmxlIE9UUEMgY2xvY2sKKyAgICAgICAgICovCisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBDUkdfVE9QLT5DTEtfQU1CQV9SRUcgJj0gflJFR19NU0soQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBPVFBfRU5BQkxFKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHRoZSBPVFAgQ290bnJvbGxlciBpcyBhY3RpdmUuCisgKgorICogXHJldHVybiAxIGlmIGl0IGlzIGFjdGl2ZSwgZWxzZSAwLgorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBod19vdHBjX2lzX2FjdGl2ZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaHdfb3RwY19pc19hY3RpdmUodm9pZCkKK3sKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgaWYgdGhlIE9UUEMgY2xvY2sgaXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuICEhKENSR19UT1AtPkNMS19BTUJBX1JFRyAmIFJFR19NU0soQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBPVFBfRU5BQkxFKSk7Cit9CisKKy8qKgorICogXGJyaWVmIFB1dCB0aGUgT1RQIENvbnRyb2xsZXIgaW4gU1RCWSBtb2RlIGFuZCB0dXJuLW9mZiBjbG9jay4KKyAqCisgKi8KK3ZvaWQgaHdfb3RwY19kaXNhYmxlKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTZXQgdGhlIGFjY2VzcyBzcGVlZCBvZiB0aGUgT1RQIENvbnRyb2xsZXIgYmFzZWQgb24gdGhlIHN5c3RlbSBjbG9jay4KKyAqCisgKiBcZGV0YWlscyBTd2l0Y2ggZnJvbSBQTEwgdG8gWFRBTCA6IGNhbGwgZnVuY3Rpb24gYWZ0ZXIgY2xvY2sgc3dpdGNoIHdpdGggaGlnaF9jbGtfc3BlZWQgPT0gZmFsc2UKKyAqICAgICAgICAgIFN3aXRjaCBmcm9tIFhUQUwgdG8gUExMIDogY2FsbCBmdW5jdGlvbiBiZWZvcmUgY2xvY2sgc3dpdGNoIHdpdGggaGlnaF9jbGtfc3BlZWQgPT0gdHJ1ZQorICoKKyAqIFxwYXJhbSBbaW5dIGNsa19zcGVlZCBUaGUgZnJlcXVlbmN5IG9mIHRoZSBzeXN0ZW0gY2xvY2s6IDEsIDIsIDMsIDQsIDYsIDgsIDEyLCAxNiwgMjQsIDMyIGFuZCA0OC4KKyAqCisgKiBcd2FybmluZyBUaGUgT1RQIGNsb2NrIG11c3QgaGF2ZSBiZWVuIGVuYWJsZWQgKE9UUF9FTkFCTEUgPT0gMSkuCisgKiAgICAgICAgICAoTm90ZTogdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBiZSBjYWxsZWQgb25seSBvbmNlIHdoZW4gdGhlIFBMTCBpcyB1c2VkIG9yCisgKiAgICAgICAgICBkdXJpbmcgZWFjaCBjbG9jayBzd2l0Y2ggd2hlbiBib3RoIFBMTCBhbmQgWFRBTDE2IGFyZSB1c2VkLCBzaW5jZSB0aGUgcmVnaXN0ZXIgYml0cyBpdAorICogICAgICAgICAgbW9kaWZpZXMgYXJlIHJldGFpbmVkLikKKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSB2b2lkIGh3X290cGNfc2V0X3NwZWVkKEhXX09UUENfU1lTX0NMS19GUkVRIGNsa19zcGVlZCk7CisKKy8qKgorICogXGJyaWVmIFNldCBvciByZXNldCB0aGUgcG93ZXIgc2F2aW5nIG1vZGUgb2YgdGhlIE9UUCBDb250cm9sbGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIGluYWN0aXZpdHlfcGVyaW9kIFRoZSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gcmVtYWluIHBvd2VyZWQgd2hpbGUgbm8gYWNjZXNzIGlzIG1hZGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gMCwgdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLgorICoKKyAqIFx3YXJuaW5nIFRoZSBod19vdHBjX2luaXQoKSBhbmQgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQuCisgKiAgICAgICAgICAoTm90ZTogdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBiZSBjYWxsZWQgb25seSBvbmNlIHdoZW4gdGhlIFBMTCBpcyB1c2VkIG9yCisgKiAgICAgICAgICBkdXJpbmcgZWFjaCBjbG9jayBzd2l0Y2ggd2hlbiBib3RoIFBMTCBhbmQgWFRBTDE2IGFyZSB1c2VkLCBzaW5jZSB0aGUgcmVnaXN0ZXIgYml0cyBpdAorICogICAgICAgICAgbW9kaWZpZXMgYXJlIHJldGFpbmVkLikKKyAqLwordm9pZCBod19vdHBjX3Bvd2VyX3NhdmUodWludDMyX3QgaW5hY3Rpdml0eV9wZXJpb2QpOworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIG51bWJlciBvZiB0aGUgUmVwYWlyIFJlY29yZHMuCisgKgorICogXHJldHVybiBUaGUgbnVtYmVyIG9mIHVzZWQgUmVwYWlyIFJlY29yZHMuCisgKgorICogXHdhcm5pbmcgVGhlIGh3X290cGNfaW5pdCgpIGFuZCBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZC4gVGhlIE9UUEMgbW9kZSB3aWxsIGJlIHJlc2V0LgorICogICAgICAgICAgKE5vdGU6IHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgYmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBQTEwgaXMgdXNlZCBvcgorICogICAgICAgICAgZHVyaW5nIGVhY2ggY2xvY2sgc3dpdGNoIHdoZW4gYm90aCBQTEwgYW5kIFhUQUwxNiBhcmUgdXNlZCwgc2luY2UgdGhlIHJlZ2lzdGVyIGJpdHMgaXQKKyAqICAgICAgICAgIG1vZGlmaWVzIGFyZSByZXRhaW5lZC4pCisgKi8KK3VpbnQzMl90IGh3X290cGNfbnVtX29mX3JyKHZvaWQpOworCisvKioKKyAqIFxicmllZiBQcm9ncmFtIG1hbnVhbGx5IGFuIE9UUCBlbnRyeS4KKyAqCisgKiBccGFyYW0gW2luXSBjZWxsX29mZnNldCBDZWxsIG9mZnNldCB0byBiZSBwcm9ncmFtbWVkLgorICoKKyAqIFxwYXJhbSBbaW5dIHB3b3JkX2wgICBUaGUgbG93IDMyLWJpdHMgb2YgdGhlIDY0LWJpdCB3b3JkIHRvIGJlIHdyaXR0ZW4uCisgKgorICogXHBhcmFtIFtpbl0gcHdvcmRfaCAgIFRoZSBoaWdoIDMyLWJpdHMgb2YgdGhlIDY0LWJpdCB3b3JkIHRvIGJlIHdyaXR0ZW4uCisgKgorICogXHBhcmFtIFtpbl0gdXNlX3JyICAgIFVzZSBhIFJlcGFpciBSZWNvcmQgaWYgd3JpdGluZyBmYWlscyB3aGVuIHRydWUuCisgKgorICogXHJldHVybiB0cnVlIGZvciBzdWNjZXNzLCBmYWxzZSBmb3IgZmFpbHVyZQorICoKKyAqIFx3YXJuaW5nIFRoZSBod19vdHBjX2luaXQoKSBhbmQgdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGFuZCB0aGUgbW9kZSBtdXN0CisgKiAgICAgICAgICBiZSBTVEJZLiAoTm90ZTogdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBiZSBjYWxsZWQgb25seSBvbmNlIHdoZW4gdGhlIFBMTCBpcyB1c2VkIG9yCisgKiAgICAgICAgICBkdXJpbmcgZWFjaCBjbG9jayBzd2l0Y2ggd2hlbiBib3RoIFBMTCBhbmQgWFRBTDE2IGFyZSB1c2VkLCBzaW5jZSB0aGUgcmVnaXN0ZXIgYml0cyBpdAorICogICAgICAgICAgbW9kaWZpZXMgYXJlIHJldGFpbmVkLikKKyAqCisgKi8KK2Jvb2wgaHdfb3RwY19tYW51YWxfd29yZF9wcm9nKHVpbnQzMl90IGNlbGxfb2Zmc2V0LCB1aW50MzJfdCBwd29yZF9sLCB1aW50MzJfdCBwd29yZF9oLCBib29sIHVzZV9ycik7CisKKy8qKgorICogXGJyaWVmIFByb2dyYW0gbWFudWFsbHkgYW4gT1RQIGJsb2NrLgorICoKKyAqIFxwYXJhbSBbaW5dIHBfZGF0YSAgICAgICBUaGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZGF0YSB0byBjb3B5IGZyb20uCisgKgorICogXHBhcmFtIFtpbl0gY2VsbF9vZmZzZXQgIENlbGwgb2Zmc2V0IHRvIHN0YXJ0IHByb2dyYW1taW5nIGZyb20uCisgKgorICogXHBhcmFtIFtpbl0gY2VsbF93b3JkICAgIFdvcmQgaW5zaWRlIGNlbGwgdG8gc3RhcnQgcHJvZ3JhbW1pbmcgZnJvbS4KKyAqCisgKiBccGFyYW0gW2luXSBudW1fb2Zfd29yZHMgVGhlIGFjdHVhbCBudW1iZXIgb2YgdGhlIHdvcmRzIHRvIGJlIHdyaXR0ZW4uCisgKgorICogXHBhcmFtIFtpbl0gdXNlX3JyICAgICAgIHRydWUgdG8gdXNlIFJlcGFpciBSZWNvcmRzIGlmIHdyaXRpbmcgZmFpbHMKKyAqCisgKiBccmV0dXJuIHRydWUgZm9yIHN1Y2Nlc3MsIGZhbHNlIGZvciBmYWlsdXJlCisgKgorICogXHdhcm5pbmcgVGhlIGh3X290cGNfaW5pdCgpIGFuZCB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYW5kIHRoZSBtb2RlIG11c3QKKyAqICAgICAgICAgIGJlIFNUQlkuIChOb3RlOiB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGJlIGNhbGxlZCBvbmx5IG9uY2Ugd2hlbiB0aGUgUExMIGlzIHVzZWQgb3IKKyAqICAgICAgICAgIGR1cmluZyBlYWNoIGNsb2NrIHN3aXRjaCB3aGVuIGJvdGggUExMIGFuZCBYVEFMMTYgYXJlIHVzZWQsIHNpbmNlIHRoZSByZWdpc3RlciBiaXRzIGl0CisgKiAgICAgICAgICBtb2RpZmllcyBhcmUgcmV0YWluZWQuKQorICoKKyAqLworYm9vbCBod19vdHBjX21hbnVhbF9wcm9nKGNvbnN0IHVpbnQzMl90ICpwX2RhdGEsIHVpbnQzMl90IGNlbGxfb2Zmc2V0LCBIV19PVFBDX1dPUkQgY2VsbF93b3JkLAorICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bV9vZl93b3JkcywgYm9vbCB1c2VfcnIpOworCisvKioKKyAqIFxicmllZiBQdXQgdGhlIE9UUCBpbiBtYW51YWwgcmVhZCBtb2RlLgorICoKKyAqIFxkZXRhaWxzIEluIG1hbnVhbCByZWFkIG1vZGUgdGhlIE9UUCBpcyBtZW1vcnkgbWFwcGVkIHRvIHRoZSBhZGRyZXNzIE1FTU9SWV9PVFBfQkFTRS4gU28sIGFueQorICogICAgICAgICAgYWNjZXNzIHRvIHRoaXMgbWVtb3J5IHNwYWNlIHJlc3VsdHMgaW50byByZWFkaW5nIGZyb20gdGhlIE9UUC4gVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZQorICogICAgICAgICAgdGhhdCB0aGUgZnVuY3Rpb24gaHdfb3RwY19tYW51YWxfcmVhZF9vZmYoKSBpcyBjYWxsZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIE9UUCBpcworICogICAgICAgICAgZmluaXNoZWQuCisgKgorICogXHBhcmFtIFtpbl0gc3BhcmVfcm93cyB0cnVlIHRvIGFjY2VzcyB0aGUgc3BhcmUgcm93cyBhcmVhLCBmYWxzZSB0byBhY2Nlc3Mgbm9ybWFsIG1lbW9yeSBjZWxsCisgKgorICogXHdhcm5pbmcgVGhlIGh3X290cGNfaW5pdCgpIGFuZCB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYW5kIHRoZSBtb2RlIG11c3QKKyAqICAgICAgICAgIGJlIFNUQlkuIChOb3RlOiB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGJlIGNhbGxlZCBvbmx5IG9uY2Ugd2hlbiB0aGUgUExMIGlzIHVzZWQgb3IKKyAqICAgICAgICAgIGR1cmluZyBlYWNoIGNsb2NrIHN3aXRjaCB3aGVuIGJvdGggUExMIGFuZCBYVEFMMTYgYXJlIHVzZWQsIHNpbmNlIHRoZSByZWdpc3RlciBiaXRzIGl0CisgKiAgICAgICAgICBtb2RpZmllcyBhcmUgcmV0YWluZWQuKQorICoKKyAqLwordm9pZCBod19vdHBjX21hbnVhbF9yZWFkX29uKGJvb2wgc3BhcmVfcm93cyk7CisKKy8qKgorICogXGJyaWVmIFRha2UgdGhlIE9UUCBvdXQgb2YgbWFudWFsIHJlYWQgbW9kZSBhbmQgcHV0IGl0IGluIFNUQlkuCisgKgorICogXHdhcm5pbmcgVGhlIGh3X290cGNfaW5pdCgpIGFuZCB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYW5kIHRoZSBtb2RlIG11c3QKKyAqICAgICAgICAgIGJlIFNUQlkuIChOb3RlOiB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGJlIGNhbGxlZCBvbmx5IG9uY2Ugd2hlbiB0aGUgUExMIGlzIHVzZWQgb3IKKyAqICAgICAgICAgIGR1cmluZyBlYWNoIGNsb2NrIHN3aXRjaCB3aGVuIGJvdGggUExMIGFuZCBYVEFMMTYgYXJlIHVzZWQsIHNpbmNlIHRoZSByZWdpc3RlciBiaXRzIGl0CisgKiAgICAgICAgICBtb2RpZmllcyBhcmUgcmV0YWluZWQuKQorICoKKyAqLwordm9pZCBod19vdHBjX21hbnVhbF9yZWFkX29mZih2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgUHJvZ3JhbSBtYW51YWxseSBhIFJlcGFpciBSZWNvcmQgaW4gdGhlIE9UUCdzIHNwYXJlIGFyZWEuCisgKgorICogXHBhcmFtIFtpbl0gY2VsbF9vZmZzZXQgVGhlIGFkZHJlc3MgcHJvZ3JhbW1lZCB3aXRoIGVycm9ycy4KKyAqIFxwYXJhbSBbaW5dIHB3b3JkX2wgICBUaGUgbG93IDMyLWJpdHMgb2YgdGhlIDY0LWJpdCB3b3JkIHRvIGJlIHdyaXR0ZW4uCisgKiBccGFyYW0gW2luXSBwd29yZF9oICAgVGhlIGhpZ2ggMzItYml0cyBvZiB0aGUgNjQtYml0IHdvcmQgdG8gYmUgd3JpdHRlbi4KKyAqIFxyZXR1cm4gdHJ1ZSBmb3Igc3VjY2VzcywgZmFsc2UgZm9yIGZhaWx1cmUKKyAqCisgKiBcd2FybmluZyBUaGUgaHdfb3RwY19pbml0KCkgYW5kIHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbmQgdGhlIG1vZGUgbXVzdAorICogICAgICAgICAgYmUgU1RCWS4gKE5vdGU6IHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgYmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBQTEwgaXMgdXNlZCBvcgorICogICAgICAgICAgZHVyaW5nIGVhY2ggY2xvY2sgc3dpdGNoIHdoZW4gYm90aCBQTEwgYW5kIFhUQUwxNiBhcmUgdXNlZCwgc2luY2UgdGhlIHJlZ2lzdGVyIGJpdHMgaXQKKyAqICAgICAgICAgIG1vZGlmaWVzIGFyZSByZXRhaW5lZC4pCisgKgorICovCitib29sIGh3X290cGNfd3JpdGVfcnIodWludDMyX3QgY2VsbF9vZmZzZXQsIHVpbnQzMl90IHB3b3JkX2wsIHVpbnQzMl90IHB3b3JkX2gpOworCisvKioKKyAqIFxicmllZiBQcm9ncmFtIE9UUCB2aWEgRE1BLgorICoKKyAqIFxwYXJhbSBbaW5dIHBfZGF0YSAgICBUaGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZGF0YSBpbiBSQU0uCisgKgorICogXHBhcmFtIFtpbl0gY2VsbF9vZmZzZXQgQ2VsbCBvZmZzZXQgdG8gYmUgcHJvZ3JhbW1lZC4KKyAqCisgKiBccGFyYW0gW2luXSBjZWxsX3dvcmQgICBXb3JkIGluc2lkZSBjZWxsIHRvIGJlIHByb2dyYW1tZWQuCisgKgorICogXHBhcmFtIFtpbl0gbnVtX29mX3dvcmRzIFRoZSBhY3R1YWwgbnVtYmVyIG9mIHRoZSB3b3JkcyB0byBiZSB3cml0dGVuLiBUaGUgZHJpdmVyIHdpbGwgd3JpdGUgdGhpcworICogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG1pbnVzIDEgdG8gdGhlIHNwZWNpZmljIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHNwYXJlX3Jvd3MgdHJ1ZSB0byBhY2Nlc3MgdGhlIHNwYXJlIHJvd3MgYXJlYSwgZmFsc2UgdG8gYWNjZXNzIG5vcm1hbCBtZW1vcnkgY2VsbAorICoKKyAqIFxyZXR1cm4gdHJ1ZSBmb3Igc3VjY2VzcywgZmFsc2UgZm9yIGZhaWx1cmUgKHRoZSBwcm9ncmFtbWluZyBzaG91bGQgYmUgcmV0cmllZCBvciBmaXhlZCEpCisgKgorICogXHdhcm5pbmcgVGhlIGh3X290cGNfaW5pdCgpIGFuZCB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYW5kIHRoZSBtb2RlIG11c3QKKyAqICAgICAgICAgIGJlIFNUQlkuIChOb3RlOiB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGJlIGNhbGxlZCBvbmx5IG9uY2Ugd2hlbiB0aGUgUExMIGlzIHVzZWQgb3IKKyAqICAgICAgICAgIGR1cmluZyBlYWNoIGNsb2NrIHN3aXRjaCB3aGVuIGJvdGggUExMIGFuZCBYVEFMMTYgYXJlIHVzZWQsIHNpbmNlIHRoZSByZWdpc3RlciBiaXRzIGl0CisgKiAgICAgICAgICBtb2RpZmllcyBhcmUgcmV0YWluZWQuKQorICoKKyAqLworYm9vbCBod19vdHBjX2RtYV9wcm9nKGNvbnN0IHVpbnQzMl90ICpwX2RhdGEsIHVpbnQzMl90IGNlbGxfb2Zmc2V0LCBIV19PVFBDX1dPUkQgY2VsbF93b3JkLAorICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bV9vZl93b3JkcywgYm9vbCBzcGFyZV9yb3dzKTsKKworLyoqCisgKiBcYnJpZWYgUmVhZCBPVFAgdmlhIERNQS4KKyAqCisgKiBccGFyYW0gW2luXSBwX2RhdGEgICAgVGhlIGFkZHJlc3MgaW4gUkFNIHRvIHdyaXRlIHRoZSBkYXRhIHRvLgorICoKKyAqIFxwYXJhbSBbaW5dIGNlbGxfb2Zmc2V0IENlbGwgb2Zmc2V0IHRvIGJlIHByb2dyYW1tZWQuCisgKgorICogXHBhcmFtIFtpbl0gY2VsbF93b3JkICAgV29yZCBpbnNpZGUgY2VsbCB0byBiZSBwcm9ncmFtbWVkLgorICoKKyAqIFxwYXJhbSBbaW5dIG51bV9vZl93b3JkcyBUaGUgYWN0dWFsIG51bWJlciBvZiB0aGUgd29yZHMgdG8gYmUgcmVhZC4gVGhlIGRyaXZlciB3aWxsIHdyaXRlIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBtaW51cyAxIHRvIHRoZSBzcGVjaWZpYyByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSBzcGFyZV9yb3dzIHRydWUgdG8gYWNjZXNzIHRoZSBzcGFyZSByb3dzIGFyZWEsIGZhbHNlIHRvIGFjY2VzcyBub3JtYWwgbWVtb3J5IGNlbGwKKyAqCisgKiBcd2FybmluZyBUaGUgaHdfb3RwY19pbml0KCkgYW5kIHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbmQgdGhlIG1vZGUgbXVzdAorICogICAgICAgICAgYmUgU1RCWS4gKE5vdGU6IHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgYmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBQTEwgaXMgdXNlZCBvcgorICogICAgICAgICAgZHVyaW5nIGVhY2ggY2xvY2sgc3dpdGNoIHdoZW4gYm90aCBQTEwgYW5kIFhUQUwxNiBhcmUgdXNlZCwgc2luY2UgdGhlIHJlZ2lzdGVyIGJpdHMgaXQKKyAqICAgICAgICAgIG1vZGlmaWVzIGFyZSByZXRhaW5lZC4pCisgKgorICovCit2b2lkIGh3X290cGNfZG1hX3JlYWQodWludDMyX3QgKnBfZGF0YSwgdWludDMyX3QgY2VsbF9vZmZzZXQsIEhXX09UUENfV09SRCBjZWxsX3dvcmQsCisgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtX29mX3dvcmRzLCBib29sIHNwYXJlX3Jvd3MpOworCisvKioKKyAqIFxicmllZiBQcm9ncmFtIE9UUCB2aWEgRklGTyAoQXV0byBtb2RlKS4KKyAqCisgKiBccGFyYW0gW2luXSBwX2RhdGEgICAgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRhdGEgaW4gUkFNLgorICoKKyAqIFxwYXJhbSBbaW5dIGNlbGxfb2Zmc2V0IENlbGwgb2Zmc2V0IHRvIGJlIHByb2dyYW1tZWQuCisgKgorICogXHBhcmFtIFtpbl0gY2VsbF93b3JkICAgV29yZCBpbnNpZGUgY2VsbCB0byBiZSBwcm9ncmFtbWVkLgorICoKKyAqIFxwYXJhbSBbaW5dIG51bV9vZl93b3JkcyBUaGUgYWN0dWFsIG51bWJlciBvZiB0aGUgd29yZHMgdG8gYmUgd3JpdHRlbi4gVGhlIGRyaXZlciB3aWxsIHdyaXRlIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBtaW51cyAxIHRvIHRoZSBzcGVjaWZpYyByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSBzcGFyZV9yb3dzIHRydWUgdG8gYWNjZXNzIHRoZSBzcGFyZSByb3dzIGFyZWEsIGZhbHNlIHRvIGFjY2VzcyBub3JtYWwgbWVtb3J5IGNlbGwKKyAqCisgKiBccmV0dXJuIHRydWUgZm9yIHN1Y2Nlc3MsIGZhbHNlIGZvciBmYWlsdXJlCisgKgorICogXHdhcm5pbmcgVGhlIGh3X290cGNfaW5pdCgpIGFuZCB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYW5kIHRoZSBtb2RlIG11c3QKKyAqICAgICAgICAgIGJlIFNUQlkuIChOb3RlOiB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGJlIGNhbGxlZCBvbmx5IG9uY2Ugd2hlbiB0aGUgUExMIGlzIHVzZWQgb3IKKyAqICAgICAgICAgIGR1cmluZyBlYWNoIGNsb2NrIHN3aXRjaCB3aGVuIGJvdGggUExMIGFuZCBYVEFMMTYgYXJlIHVzZWQsIHNpbmNlIHRoZSByZWdpc3RlciBiaXRzIGl0CisgKiAgICAgICAgICBtb2RpZmllcyBhcmUgcmV0YWluZWQuKQorICoKKyAqLworYm9vbCBod19vdHBjX2ZpZm9fcHJvZyhjb25zdCB1aW50MzJfdCAqcF9kYXRhLCB1aW50MzJfdCBjZWxsX29mZnNldCwgSFdfT1RQQ19XT1JEIGNlbGxfd29yZCwKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBudW1fb2Zfd29yZHMsIGJvb2wgc3BhcmVfcm93cyk7CisKKy8qKgorICogXGJyaWVmIFJlYWQgT1RQIHZpYSBGSUZPLgorICoKKyAqIFxwYXJhbSBbaW5dIHBfZGF0YSAgICBUaGUgYWRkcmVzcyBpbiBSQU0gdG8gd3JpdGUgdGhlIGRhdGEgdG8uCisgKgorICogXHBhcmFtIFtpbl0gY2VsbF9vZmZzZXQgQ2VsbCBvZmZzZXQgdG8gYmUgcHJvZ3JhbW1lZC4KKyAqCisgKiBccGFyYW0gW2luXSBjZWxsX3dvcmQgICBXb3JkIGluc2lkZSBjZWxsIHRvIGJlIHByb2dyYW1tZWQuCisgKgorICogXHBhcmFtIFtpbl0gbnVtX29mX3dvcmRzIFRoZSBhY3R1YWwgbnVtYmVyIG9mIHRoZSB3b3JkcyB0byBiZSByZWFkLiBUaGUgZHJpdmVyIHdpbGwgd3JpdGUgdGhpcworICogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG1pbnVzIDEgdG8gdGhlIHNwZWNpZmljIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHNwYXJlX3Jvd3MgdHJ1ZSB0byBhY2Nlc3MgdGhlIHNwYXJlIHJvd3MgYXJlYSwgZmFsc2UgdG8gYWNjZXNzIG5vcm1hbCBtZW1vcnkgY2VsbAorICoKKyAqIFxyZXR1cm4gdHJ1ZSBmb3Igc3VjY2VzcywgZmFsc2UgZm9yIGZhaWx1cmUKKyAqCisgKiBcd2FybmluZyBUaGUgaHdfb3RwY19pbml0KCkgYW5kIHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbmQgdGhlIG1vZGUgbXVzdAorICogICAgICAgICAgYmUgU1RCWS4gKE5vdGU6IHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgYmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBQTEwgaXMgdXNlZCBvcgorICogICAgICAgICAgZHVyaW5nIGVhY2ggY2xvY2sgc3dpdGNoIHdoZW4gYm90aCBQTEwgYW5kIFhUQUwxNiBhcmUgdXNlZCwgc2luY2UgdGhlIHJlZ2lzdGVyIGJpdHMgaXQKKyAqICAgICAgICAgIG1vZGlmaWVzIGFyZSByZXRhaW5lZC4pCisgKgorICovCitib29sIGh3X290cGNfZmlmb19yZWFkKHVpbnQzMl90ICpwX2RhdGEsIHVpbnQzMl90IGNlbGxfb2Zmc2V0LCBIV19PVFBDX1dPUkQgY2VsbF93b3JkLAorICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bV9vZl93b3JkcywgYm9vbCBzcGFyZV9yb3dzKTsKKworLyoqCisgKiBcYnJpZWYgUHJlcGFyZSBPVFBDIHRvIGV4ZWN1dGUgYW4gT1RQIGNvcHkgYWZ0ZXIgd2FrZXVwLgorICoKKyAqIFxwYXJhbSBbaW5dIG51bV9vZl9ieXRlcyBUaGUgYWN0dWFsIG51bWJlciBvZiB0aGUgYnl0ZXMgdG8gYmUgY29waWVkLiBUaGUgZHJpdmVyIHdpbGwgd3JpdGUgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVyIHZhbHVlIHRvIHRoZSBzcGVjaWZpYyByZWdpc3Rlci4KKyAqCisgKiBcd2FybmluZyBUaGUgaHdfb3RwY19pbml0KCkgYW5kIHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbmQgdGhlIG1vZGUgbXVzdAorICogICAgICAgICAgYmUgU1RCWS4gKE5vdGU6IHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgYmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBQTEwgaXMgdXNlZCBvcgorICogICAgICAgICAgZHVyaW5nIGVhY2ggY2xvY2sgc3dpdGNoIHdoZW4gYm90aCBQTEwgYW5kIFhUQUwxNiBhcmUgdXNlZCwgc2luY2UgdGhlIHJlZ2lzdGVyIGJpdHMgaXQKKyAqICAgICAgICAgIG1vZGlmaWVzIGFyZSByZXRhaW5lZC4pCisgKgorICovCit2b2lkIGh3X290cGNfcHJlcGFyZSh1aW50MzJfdCBudW1fb2ZfYnl0ZXMpOworCisvKioKKyAqIFxicmllZiBDYW5jZWwgYW55IHByZXZpb3VzIHByZXBhcmF0aW9ucyBvZiB0aGUgT1RQQyBmb3IgZXhlY3V0aW5nIGFuIE9UUCBjb3B5IGFmdGVyIHdha2V1cC4KKyAqCisgKiBcd2FybmluZyBUaGUgaHdfb3RwY19pbml0KCkgYW5kIHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbmQgdGhlIG1vZGUgbXVzdAorICogICAgICAgICAgYmUgU1RCWS4gKE5vdGU6IHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgYmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBQTEwgaXMgdXNlZCBvcgorICogICAgICAgICAgZHVyaW5nIGVhY2ggY2xvY2sgc3dpdGNoIHdoZW4gYm90aCBQTEwgYW5kIFhUQUwxNiBhcmUgdXNlZCwgc2luY2UgdGhlIHJlZ2lzdGVyIGJpdHMgaXQKKyAqICAgICAgICAgIG1vZGlmaWVzIGFyZSByZXRhaW5lZC4pCisgKgorICovCit2b2lkIGh3X290cGNfY2FuY2VsX3ByZXBhcmUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEdldCBjZWxsIG1lbW9yeSBhZGRyZXNzCisgKgorICogUmV0dXJucyBtYXBwZWQgbWVtb3J5IGFkZHJlc3MgZm9yIGdpdmVuIGNlbGwsIGNhbiBiZSB1c2VkIGZvciBlLmcuIG1hbnVhbCByZWFkaW5nLgorICoKKyAqIFxwYXJhbSBbaW5dIGNlbGxfb2Zmc2V0IGNlbGwgb2Zmc2V0CisgKgorICogXHJldHVybiBjZWxsIG1lbW9yeSBhZGRyZXNzCisgKgorICogXHNhIGh3X290cGNfbWFudWFsX3JlYWRfb24KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqaHdfb3RwY19jZWxsX3RvX21lbSh1aW50MzJfdCBjZWxsX29mZnNldCkKK3sKKyAgICAgICAgcmV0dXJuICh2b2lkICopIChNRU1PUllfT1RQX0JBU0UgKyAoY2VsbF9vZmZzZXQgPDwgMykpOyAvLyBjZWxsIHNpemUgaXMgOCBieXRlcworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBURVNUIEZVTkNUSU9OQUxJVFkKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoqCisgKiBcYnJpZWYgRXhlY3V0aW9uIG9mIHRoZSBCTEFOSyB0ZXN0LgorICoKKyAqIFxyZXR1cm4gVGhlIHRlc3QgcmVzdWx0LgorICogICAgICAgICA8dWw+CisgKiAgICAgICAgICAgICA8bGk+IDAsIGlmIHRoZSB0ZXN0IHN1Y2NlZWRlZAorICogICAgICAgICAgICAgPGxpPiAxLCBpZiB0aGUgdGVzdCAxIGZhaWxlZAorICogICAgICAgICA8L3VsPgorICoKKyAqLworaW50IGh3X290cGNfYmxhbmsodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEV4ZWN1dGlvbiBvZiB0aGUgVERFQyB0ZXN0LgorICoKKyAqIFxyZXR1cm4gVGhlIHRlc3QgcmVzdWx0LgorICogICAgICAgICA8dWw+CisgKiAgICAgICAgICAgICA8bGk+IDAsIGlmIHRoZSB0ZXN0IHN1Y2NlZWRlZAorICogICAgICAgICAgICAgPGxpPiAxLCBpZiB0aGUgdGVzdCAxIGZhaWxlZAorICogICAgICAgICA8L3VsPgorICoKKyAqLworaW50IGh3X290cGNfdGRlYyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgRXhlY3V0aW9uIG9mIHRoZSBUV1IgdGVzdC4KKyAqCisgKiBccmV0dXJuIFRoZSB0ZXN0IHJlc3VsdC4KKyAqICAgICAgICAgPHVsPgorICogICAgICAgICAgICAgPGxpPiAwLCBpZiB0aGUgdGVzdCBzdWNjZWVkZWQKKyAqICAgICAgICAgICAgIDxsaT4gMSwgaWYgdGhlIHRlc3QgMSBmYWlsZWQKKyAqICAgICAgICAgPC91bD4KKyAqCisgKi8KK2ludCBod19vdHBjX3R3cih2b2lkKTsKKworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9IV19PVFBDICovCisKKyNlbmRpZiAvKiBIV19PVFBDX0hfICovCisKKy8qKgorXH0KK1x9CitcfQorKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfcXNwaS5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19xc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFlOTY3ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfcXNwaS5oCkBAIC0wLDAgKzEsMTIwMyBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgUVNQSQorICogXHsKKyAqIFxicmllZiBRU1BJIEZsYXNoIE1lbW9yeSBDb250cm9sbGVyCisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod19xc3BpLmgKKyAqCisgKiBAYnJpZWYgRGVmaW5pdGlvbiBvZiBBUEkgZm9yIHRoZSBRU1BJIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBIV19RU1BJX0hfCisjZGVmaW5lIEhXX1FTUElfSF8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19RU1BJCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIG1hc2sgb2YgYSBmaWVsZCBvZiBhbiBRU1BJQyByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIGFjY2VzcworICoKKyAqLworI2RlZmluZSBIV19RU1BJQ19SRUdfRklFTERfTUFTSyhyZWcsIGZpZWxkKSBcCisgICAgICAgIChRU1BJQ19RU1BJQ18jI3JlZyMjX1JFR18jI1FTUElDXyMjZmllbGQjI19Nc2spCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgYml0IHBvc2l0aW9uIG9mIGEgZmllbGQgb2YgYW4gUVNQSUMgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqCisgKi8KKyNkZWZpbmUgSFdfUVNQSUNfUkVHX0ZJRUxEX1BPUyhyZWcsIGZpZWxkKSBcCisgICAgICAgIChRU1BJQ19RU1BJQ18jI3JlZyMjX1JFR18jI1FTUElDXyMjZmllbGQjI19Qb3MpCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdmFsdWUgb2YgYSBmaWVsZCBvZiBhbiBRU1BJQyByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIHdyaXRlCisgKgorICogXHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIGZpZWxkCisgKgorICovCisjZGVmaW5lIEhXX1FTUElDX1JFR19HRVRGKHJlZywgZmllbGQpIFwKKyAgICAgICAgKChRU1BJQy0+UVNQSUNfIyNyZWcjI19SRUcgJiAoUVNQSUNfUVNQSUNfIyNyZWcjI19SRUdfIyNRU1BJQ18jI2ZpZWxkIyNfTXNrKSkgPj4gKFFTUElDX1FTUElDXyMjcmVnIyNfUkVHXyMjUVNQSUNfIyNmaWVsZCMjX1BvcykpCisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgdmFsdWUgb2YgYSBmaWVsZCBvZiBhbiBRU1BJQyByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIHdyaXRlCisgKiBccGFyYW0gW2luXSBuZXdfdmFsIGlzIHRoZSB2YWx1ZSB0byB3cml0ZQorICoKKyAqLworI2RlZmluZSBIV19RU1BJQ19SRUdfU0VURihyZWcsIGZpZWxkLCBuZXdfdmFsKSBcCisgICAgICAgIFFTUElDLT5RU1BJQ18jI3JlZyMjX1JFRyA9ICgoUVNQSUMtPlFTUElDXyMjcmVnIyNfUkVHICYgfihRU1BJQ19RU1BJQ18jI3JlZyMjX1JFR18jI1FTUElDXyMjZmllbGQjI19Nc2spKSB8IFwKKyAgICAgICAgKChRU1BJQ19RU1BJQ18jI3JlZyMjX1JFR18jI1FTUElDXyMjZmllbGQjI19Nc2spICYgKChuZXdfdmFsKSA8PCAoUVNQSUNfUVNQSUNfIyNyZWcjI19SRUdfIyNRU1BJQ18jI2ZpZWxkIyNfUG9zKSkpKQorCisKK2V4dGVybiB1aW50OF90IGR1bW15X251bVtdOworCisvKgorICogRU5VTUVSQVRJT04gREVGSU5JVElPTlMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKgorICogXGJyaWVmIEJ1cyBtb2RlCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19RU1BJX0JVU19NT0RFX1NJTkdMRSwgICAvKio8IEJ1cyBtb2RlIGluIHNpbmdsZSBtb2RlICovCisgICAgICAgIEhXX1FTUElfQlVTX01PREVfRFVBTCwgICAgIC8qKjwgQnVzIG1vZGUgaW4gZHVhbCBtb2RlICovCisgICAgICAgIEhXX1FTUElfQlVTX01PREVfUVVBRCAgICAgIC8qKjwgQnVzIG1vZGUgaW4gcXVhZCBtb2RlICovCit9IEhXX1FTUElfQlVTX01PREU7CisKKy8qKgorICogXGJyaWVmIEZsYXNoIG1lbW9yeSBhZGRyZXNzIHNpemUKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1FTUElfQUREUl9TSVpFXzI0LCAgICAgIC8qKjwgUVNQSSBmbGFzaCBtZW1vcnkgdXNlcyAyNCBiaXRzIGFkZHJlc3MgKi8KKyAgICAgICAgSFdfUVNQSV9BRERSX1NJWkVfMzIgICAgICAgLyoqPCBRU1BJIGZsYXNoIG1lbW9yeSB1c2VzIDMyIGJpdHMgYWRkcmVzcyAqLworfSBIV19RU1BJX0FERFJfU0laRTsKKworLyoqCisgKiBcYnJpZWYgSWRsZSBjbG9jayBzdGF0ZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfUVNQSV9QT0xfTE9XID0gMCwgICAgICAgIC8qKjwgU1BJIGNsb2NrIHdpbGwgYmUgbG93IGF0IGlkbGUgKi8KKyAgICAgICAgSFdfUVNQSV9QT0xfSElHSCA9IDEgICAgICAgIC8qKjwgU1BJIGNsb2NrIHdpbGwgYmUgaGlnaCBhdCBpZGxlICovCit9IEhXX1FTUElfUE9MOworCisvKioKKyAqIFxicmllZiBUeXBlIG9mIFFTUElfQ0xLIGVkZ2UgZm9yIHNhbXBsaW5nIHJlY2VpdmVkIGRhdGEKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1FTUElfU0FNUExJTkdfRURHRV9QT1NJVElWRSA9IDAsICAgICAgICAvKio8IFNhbXBsZSB0aGUgcmVjZWl2ZWQgZGF0YSB3aXRoIHRoZSBwb3NpdGl2ZSBlZGdlIG9mIHRoZSBRU1BJX1NDSyAqLworICAgICAgICBIV19RU1BJX1NBTVBMSU5HX0VER0VfTkVHQVRJVkUgPSAxICAgICAgICAgLyoqPCBTYW1wbGUgdGhlIHJlY2VpdmVkIGRhdGEgd2l0aCB0aGUgbmVnYXRpdmUgZWRnZSBvZiB0aGUgUVNQSV9TQ0sgKi8KK30gSFdfUVNQSV9TQU1QTElOR19FREdFOworCisvKioKKyAqIFxicmllZiBTZWxlY3RlZCBkYXRhIHNpemUgb2YgYSB3cmFwcGluZyBidXJzdAorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfUVNQSV9XUkFQX1NJWkVfOEJJVFMgPSAwLCAgICAgICAvKio8IEJ5dGUgYWNjZXNzICg4LWJpdHMpICovCisgICAgICAgIEhXX1FTUElfV1JBUF9TSVpFXzE2QklUUyA9IDEsICAgICAgLyoqPCBIYWxmIHdvcmQgYWNjZXNzICg4LWJpdHMpICovCisgICAgICAgIEhXX1FTUElfV1JBUF9TSVpFXzMyQklUUyA9IDIsICAgICAgLyoqPCBXb3JkIGFjY2VzcyAoOC1iaXRzKSAqLworfSBIV19RU1BJX1dSQVBfU0laRTsKKworLyoqCisgKiBcYnJpZWYgU2VsZWN0ZWQgZGF0YSBsZW5ndGggb2YgYSB3cmFwcGluZyBidXJzdAorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfUVNQSV9XUkFQX0xFTl80QkVBVCA9IDAsICAgICAgICAvKio8IDQgYmVhdCB3cmFwcGluZyBidXJzdCAqLworICAgICAgICBIV19RU1BJX1dSQVBfTEVOXzhCRUFUID0gMSwgICAgICAgIC8qKjwgOCBiZWF0IHdyYXBwaW5nIGJ1cnN0ICovCisgICAgICAgIEhXX1FTUElfV1JBUF9MRU5fMTZCRUFUID0gMiwgICAgICAgLyoqPCAxNiBiZWF0IHdyYXBwaW5nIGJ1cnN0ICovCit9IEhXX1FTUElfV1JBUF9MRU47CisKKy8qKgorICogXGJyaWVmIFNpemUgb2YgQnVyc3QgQnJlYWsgU2VxdWVuY2UKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1FTUElfQlJFQUtfU0VRX1NJWkVfMUIgPSAwLCAgICAgLyoqPCBPbmUgYnl0ZSAqLworICAgICAgICBIV19RU1BJX0JSRUFLX1NFUV9TSVpFXzJCID0gMSAgICAgIC8qKjwgVHdvIGJ5dGVzICovCit9IEhXX1FTUElfQlJFQUtfU0VRX1NJWkU7CisKKy8qKgorICogXGJyaWVmIFFTUEkgcGFkcyBzbGV3IHJhdGUgY29udHJvbAorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfUVNQSV9TTEVXX1JBVEVfMCwgICAgICAgLyoqPCB4eCBWL25zICh3ZWFrKSAqLworICAgICAgICBIV19RU1BJX1NMRVdfUkFURV8xLCAgICAgICAvKio8IHh4IFYvbnMgKi8KKyAgICAgICAgSFdfUVNQSV9TTEVXX1JBVEVfMiwgICAgICAgLyoqPCB4eCBWL25zICovCisgICAgICAgIEhXX1FTUElfU0xFV19SQVRFXzMgICAgICAgIC8qKjwgeHggVi9ucyAoc3Ryb25nKSAqLworfSBIV19RU1BJX1NMRVdfUkFURTsKKworLyoqCisgKiBcYnJpZWYgUVNQSSBwYWRzIGRyaXZlIGN1cnJlbnQKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1FTUElfRFJJVkVfQ1VSUkVOVF80LCAgIC8qKjwgNCBtQSAqLworICAgICAgICBIV19RU1BJX0RSSVZFX0NVUlJFTlRfOCwgICAvKio8IDggbUEgKi8KKyAgICAgICAgSFdfUVNQSV9EUklWRV9DVVJSRU5UXzEyLCAgLyoqPCAxMiBtQSAqLworICAgICAgICBIV19RU1BJX0RSSVZFX0NVUlJFTlRfMTYsICAvKio8IDE2IG1BICovCit9IEhXX1FTUElfRFJJVkVfQ1VSUkVOVDsKKworLyoqCisgKiBcYnJpZWYgUVNQSSBjbG9jayBkaXZpZGVyIHNldHRpbmcKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1FTUElfRElWXzEgPSAwLCAgICAgIC8qKjwgZGl2aWRlIGJ5IDEgKi8KKyAgICAgICAgSFdfUVNQSV9ESVZfMiA9IDEsICAgICAgLyoqPCBkaXZpZGUgYnkgMiAqLworICAgICAgICBIV19RU1BJX0RJVl80ID0gMiwgICAgICAvKio8IGRpdmlkZSBieSA0ICovCisgICAgICAgIEhXX1FTUElfRElWXzggPSAzICAgICAgIC8qKjwgZGl2aWRlIGJ5IDggKi8KK30gSFdfUVNQSV9ESVY7CisKKy8qKgorICogXGJyaWVmIFFTUEkgY29uZmlndXJhdGlvbgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBIV19RU1BJX0FERFJfU0laRSBhZGRyZXNzX3NpemU7CisgICAgICAgIEhXX1FTUElfUE9MIGlkbGVfY2xvY2s7CisgICAgICAgIEhXX1FTUElfU0FNUExJTkdfRURHRSBzYW1wbGluZ19lZGdlOworfSBxc3BpX2NvbmZpZzsKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIENTIG9uIFFTUEkgYnVzCisgKgorICogVXNlIHRoaXMgaW4gbWFudWFsIG1vZGUuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9jc19lbmFibGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9jc19lbmFibGUodm9pZCkKK3sKKyAgICAgICAgUVNQSUMtPlFTUElDX0NUUkxCVVNfUkVHID0gUVNQSUNfUVNQSUNfQ1RSTEJVU19SRUdfUVNQSUNfRU5fQ1NfTXNrOworfQorCisvKioKKyAqIFxicmllZiBEaXNhYmxlIENTIG9uIFFTUEkgYnVzCisgKgorICogVXNlIHRoaXMgaW4gbWFudWFsIG1vZGUuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9jc19kaXNhYmxlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfY3NfZGlzYWJsZSh2b2lkKQoreworICAgICAgICBRU1BJQy0+UVNQSUNfQ1RSTEJVU19SRUcgPSBRU1BJQ19RU1BJQ19DVFJMQlVTX1JFR19RU1BJQ19ESVNfQ1NfTXNrOworfQorCisvKioKKyAqIFxicmllZiBTZWxlY3QgUVNQSSBidXMgbW9kZQorICoKKyAqIFVzZSB0aGlzIGluIG1hbnVhbCBtb2RlLgorICoKKyAqIFxub3RlIFNlbGVjdGluZyBRVUFEIG1vZGUgd2lsbCBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBwaW5zIElPMiBhbmQgSU8zIHRvIGlucHV0LgorICoKKyAqIFxwYXJhbSBbaW5dIG1vZGUgc2VsZWN0cyBzaW5nbGUvZHVhbC9xdWFkIG1vZGUgZm9yIFFTUEkgYnVzCisgKgorICovCit2b2lkIGh3X3FzcGlfc2V0X2J1c19tb2RlKEhXX1FTUElfQlVTX01PREUgbW9kZSk7CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlzIFNQSSBCdXMgaXMgYnVzeQorICoKKyAqIFxyZXR1cm4gMCAtIFNQSSBCdXMgaXMgaWRsZSwKKyAqICAgICAgICAgMSAtIFNQSSBCdXMgaXMgYWN0aXZlLiBSZWFkRGF0YSwgV3JpdGVEYXRhIG9yIER1bW15RGF0YSBhY3Rpdml0eSBpcyBpbiBwcm9ncmVzcworICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfaXNfYnVzeSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX2lzX2J1c3kodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuICh1aW50OF90KSBRU1BJQy0+UVNQSUNfU1RBVFVTX1JFRzsKK30KKworLyoqCisgKiBcYnJpZWYgR2VuZXJhdGUgMzIgYml0cyByZWFkIHRyYW5zZmVyIG9uIFFTUEkgYnVzCisgKgorICogVGhlIGRhdGEgaXMgdHJhbnNmZXJyZWQgdXNpbmcgdGhlIHNlbGVjdGVkIG1vZGUgb2YgdGhlIFNQSSBidXMgKFNQSSwgRHVhbAorICogU1BJLCBRdWFkIFNQSSkuCisgKgorICogXHJldHVybiBkYXRhIHJlYWQgZHVyaW5nIHJlYWQgdHJhbnNmZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaHdfcXNwaV9yZWFkMzIodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGh3X3FzcGlfcmVhZDMyKHZvaWQpCit7CisgICAgICAgIHJldHVybiBRU1BJQy0+UVNQSUNfUkVBRERBVEFfUkVHOworfQorCisvKioKKyAqIFxicmllZiBHZW5lcmF0ZSAxNiBiaXRzIHJlYWQgdHJhbnNmZXIgb24gUVNQSSBidXMKKyAqCisgKiBUaGUgZGF0YSBpcyB0cmFuc2ZlcnJlZCB1c2luZyB0aGUgc2VsZWN0ZWQgbW9kZSBvZiB0aGUgU1BJIGJ1cyAoU1BJLCBEdWFsCisgKiBTUEksIFF1YWQgU1BJKS4KKyAqCisgKiBccmV0dXJuIGRhdGEgcmVhZCBkdXJpbmcgcmVhZCB0cmFuc2ZlcgorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBod19xc3BpX3JlYWQxNih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgaHdfcXNwaV9yZWFkMTYodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuICooKHZvbGF0aWxlIHVpbnQxNl90ICopICYoUVNQSUMtPlFTUElDX1JFQUREQVRBX1JFRykpOworfQorCisvKioKKyAqIFxicmllZiBHZW5lcmF0ZSA4IGJpdHMgcmVhZCB0cmFuc2ZlciBvbiBRU1BJIGJ1cworICoKKyAqIFRoZSBkYXRhIGlzIHRyYW5zZmVycmVkIHVzaW5nIHRoZSBzZWxlY3RlZCBtb2RlIG9mIHRoZSBTUEkgYnVzIChTUEksIER1YWwKKyAqIFNQSSwgUXVhZCBTUEkpLgorICoKKyAqIFxyZXR1cm4gZGF0YSByZWFkIGR1cmluZyByZWFkIHRyYW5zZmVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfcXNwaV9yZWFkOCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX3JlYWQ4KHZvaWQpCit7CisgICAgICAgIHJldHVybiAqKCh2b2xhdGlsZSB1aW50OF90ICopICYoUVNQSUMtPlFTUElDX1JFQUREQVRBX1JFRykpOworfQorCisvKioKKyAqIFxicmllZiBHZW5lcmF0ZSAzMiBiaXRzIHdyaXRlIHRyYW5zZmVyIG9uIFFTUEkgYnVzCisgKgorICogVGhlIGRhdGEgaXMgdHJhbnNmZXJyZWQgdXNpbmcgdGhlIHNlbGVjdGVkIG1vZGUgb2YgdGhlIFNQSSBidXMgKFNQSSwgRHVhbAorICogU1BJLCBRdWFkIFNQSSkuCisgKgorICogcGFyYW0gW2luXSBkYXRhIGRhdGEgdG8gdHJhbnNmZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3dyaXRlMzIodWludDMyX3QgZGF0YSkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV93cml0ZTMyKHVpbnQzMl90IGRhdGEpCit7CisgICAgICAgIFFTUElDLT5RU1BJQ19XUklURURBVEFfUkVHID0gZGF0YTsKK30KKworLyoqCisgKiBcYnJpZWYgR2VuZXJhdGUgMTYgYml0cyB3cml0ZSB0cmFuc2ZlciBvbiBRU1BJIGJ1cworICoKKyAqIFRoZSBkYXRhIGlzIHRyYW5zZmVycmVkIHVzaW5nIHRoZSBzZWxlY3RlZCBtb2RlIG9mIHRoZSBTUEkgYnVzIChTUEksIER1YWwKKyAqIFNQSSwgUXVhZCBTUEkpLgorICoKKyAqIHBhcmFtIFtpbl0gZGF0YSBkYXRhIHRvIHRyYW5zZmVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV93cml0ZTE2KHVpbnQxNl90IGRhdGEpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfd3JpdGUxNih1aW50MTZfdCBkYXRhKQoreworICAgICAgICAqKCh2b2xhdGlsZSB1aW50MTZfdCAqKSAmKFFTUElDLT5RU1BJQ19XUklURURBVEFfUkVHKSkgPSBkYXRhOworfQorCisvKioKKyAqIFxicmllZiBHZW5lcmF0ZSA4IGJpdHMgd3JpdGUgdHJhbnNmZXIgb24gUVNQSSBidXMKKyAqCisgKiBUaGUgZGF0YSBpcyB0cmFuc2ZlcnJlZCB1c2luZyB0aGUgc2VsZWN0ZWQgbW9kZSBvZiB0aGUgU1BJIGJ1cyAoU1BJLCBEdWFsCisgKiBTUEksIFF1YWQgU1BJKS4KKyAqCisgKiBwYXJhbSBbaW5dIGRhdGEgZGF0YSB0byB0cmFuc2ZlcgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfd3JpdGU4KHVpbnQ4X3QgZGF0YSkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV93cml0ZTgodWludDhfdCBkYXRhKQoreworICAgICAgICAqKCh2b2xhdGlsZSB1aW50OF90ICopICYoUVNQSUMtPlFTUElDX1dSSVRFREFUQV9SRUcpKSA9IGRhdGE7Cit9CisKKy8qKgorICogXGJyaWVmIEdlbmVyYXRlIGEgY2xvY2sgcHVsc2VzIHRvIHRoZSBTUEkgYnVzIGZvciAzMiBiaXRzIHRyYW5zZmVyCisgKgorICogRHVyaW5nIHRoaXMgYWN0aXZpdHkgaW4gdGhlIFNQSSBidXMsIHRoZSBRU1BJX0lPeCBkYXRhIHBhZHMgYXJlIGluIGhpLXogc3RhdGUuCisgKiBOdW1iZXIgb2YgcHVsc2VzIGRlcGVuZHMgb24gc2VsZWN0ZWQgbW9kZSBvZiB0aGUgU1BJIGJ1cyAoU1BJLCBEdWFsIFNQSSwgUXVhZCBTUEkpLgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfZHVtbXkzMih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2R1bW15MzIodm9pZCkKK3sKKyAgICAgICAgUVNQSUMtPlFTUElDX0RVTU1ZREFUQV9SRUcgPSAwOworfQorCisvKioKKyAqIFxicmllZiBHZW5lcmF0ZSBhIGNsb2NrIHB1bHNlcyB0byB0aGUgU1BJIGJ1cyBmb3IgMTYgYml0cyB0cmFuc2ZlcgorICoKKyAqIER1cmluZyB0aGlzIGFjdGl2aXR5IGluIHRoZSBTUEkgYnVzLCB0aGUgUVNQSV9JT3ggZGF0YSBwYWRzIGFyZSBpbiBoaS16IHN0YXRlLgorICogTnVtYmVyIG9mIHB1bHNlcyBkZXBlbmRzIG9uIHNlbGVjdGVkIG1vZGUgb2YgdGhlIFNQSSBidXMgKFNQSSwgRHVhbCBTUEksIFF1YWQgU1BJKS4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2R1bW15MTYodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9kdW1teTE2KHZvaWQpCit7CisgICAgICAgICooKHZvbGF0aWxlIHVpbnQxNl90ICopICYoUVNQSUMtPlFTUElDX0RVTU1ZREFUQV9SRUcpKSA9IDA7Cit9CisKKy8qKgorICogXGJyaWVmIEdlbmVyYXRlIGEgY2xvY2sgcHVsc2VzIHRvIHRoZSBTUEkgYnVzIGZvciA4IGJpdHMgdHJhbnNmZXIKKyAqCisgKiBEdXJpbmcgdGhpcyBhY3Rpdml0eSBpbiB0aGUgU1BJIGJ1cywgdGhlIFFTUElfSU94IGRhdGEgcGFkcyBhcmUgaW4gaGkteiBzdGF0ZS4KKyAqIE51bWJlciBvZiBwdWxzZXMgZGVwZW5kcyBvbiBzZWxlY3RlZCBtb2RlIG9mIHRoZSBTUEkgYnVzIChTUEksIER1YWwgU1BJLCBRdWFkIFNQSSkuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9kdW1teTgodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9kdW1teTgodm9pZCkKK3sKKyAgICAgICAgKigodm9sYXRpbGUgdWludDhfdCAqKSAmKFFTUElDLT5RU1BJQ19EVU1NWURBVEFfUkVHKSkgPSAwOworfQorCisvKioKKyAqIFxicmllZiBTcGVjaWZpZXMgYWRkcmVzcyB3aXRoIHRoYXQgZmxhc2ggbWVtb3J5IHVzZXMKKyAqCisgKiBUaGUgY29udHJvbGxlciB1c2VzIDMyIG9mIDI0IGJpdHMgZm9yIGFkZHJlc3MgZHVyaW5nIEF1dG8gbW9kZSB0cmFuc2Zlci4KKyAqCisgKiBccGFyYW0gW2luXSBzaXplIHNlbGVjdHMgMzIgb3IgMjQgYWRkcmVzcyBzaXplCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfYWRkcmVzc19zaXplKEhXX1FTUElfQUREUl9TSVpFIHNpemUpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X2FkZHJlc3Nfc2l6ZShIV19RU1BJX0FERFJfU0laRSBzaXplKQoreworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihDVFJMTU9ERSwgVVNFXzMyQkEsIChzaXplID09IEhXX1FTUElfQUREUl9TSVpFXzMyID8gMSA6IDApKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGFkZHJlc3Mgc2l6ZSB0aGF0IGZsYXNoIG1lbW9yeSB1c2VzCisgKgorICogVGhlIGNvbnRyb2xsZXIgdXNlcyAzMiBvZiAyNCBiaXRzIGZvciBhZGRyZXNzIGR1cmluZyBBdXRvIG1vZGUgdHJhbnNmZXIuCisgKgorICogXHJldHVybiBjdXJyZW50bHkgc2VsZWN0ZWQgYWRkcmVzcyBzaXplCisgKgorICogXHNhIGh3X3FzcGlfc2V0X2FkZHJlc3Nfc2l6ZQorICoKKyAqLworc3RhdGljIGlubGluZSBIV19RU1BJX0FERFJfU0laRSBod19xc3BpX2dldF9hZGRyZXNzX3NpemUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIEhXX1FTUElfQUREUl9TSVpFIGh3X3FzcGlfZ2V0X2FkZHJlc3Nfc2l6ZSh2b2lkKQoreworICAgICAgICByZXR1cm4gKEhXX1FTUElfQUREUl9TSVpFKSBIV19RU1BJQ19SRUdfR0VURihDVFJMTU9ERSwgVVNFXzMyQkEpOworfQorCisvKioKKyAqIFxicmllZiBDb250cm9scyB0cmFuc2xhdGlvbiBvZiBidXJzdCBhY2Nlc3NlcyBmb3JtIEFNQkEgYnVzIHRvIHRoZSBRU1BJIGJ1cworICoKKyAqIFxwYXJhbSBbaW5dIGZvcmNlIDAgLSBjb250cm9sbGVyIHRyYW5zbGF0ZXMgYSBidXJzdCBhY2Nlc3Mgb24gdGhlIEFNQkEgYnVzCisgKiAgICAgICAgICAgICAgICAgICAgICAgdG8gYSBidXJzdCBhY2Nlc3Mgb24gdGhlIFFTUEkgYnVzLiBUaGF0IHJlc3VsdHMgdG8gYSBtaW5pbXVtCisgKiAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC9hZGRyZXNzIHBoYXNlcywgYnV0IHRoZSBRU1BJX0NTIGlzIGxvdyBmb3IgYXMKKyAqICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFzIHRoZSBhY2Nlc3Mgb2NjdXJlcywKKyAqICAgICAgICAgICAgICAgICAgIDEgLSBjb250cm9sbGVyIHdpbGwgc3BsaXQgYSBidXJzdCBhY2Nlc3Mgb24gdGhlIEFNQkEgYnVzCisgKiAgICAgICAgICAgICAgICAgICAgICAgaW50byBzaW5nbGUgYWNjZXNzZXMgb24gdGhlIHFzcGkgYnVzLiBUaGlzIHJlc3VsdHMgdG8gYSBzZXBhcmF0ZQorICogICAgICAgICAgICAgICAgICAgICAgIHJlYWQgY29tbWFuZCB0byB0aGUgRkxBU0ggbWVtb3J5IGZvcmVhY2ggZGF0YQorICogICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkLiBBIDQtYmVhdCB3b3JkIGluY3JlbWVudGFsIEFNQkEgYWNjZXNzIHdpbGwgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICBzcGxpdCBpbnRvIDQgZGlmZmVyZW50IHNlcXVlbmNlcyBvZiByZWFkaW5nIChjb21tYW5kL2FkZHJlc3MvCisgKiAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgY2xvY2svcmVhZCBkYXRhKS4gUVNQSV9DUyB3aWxsIGJlIG9ubHkgaGlnaCB3aGlsZSBhIHFzcGkKKyAqICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgb2NjdXJlcy4gVGhpcyByZXN1bHRzIHRvIGxvd2VyIHBvd2VyIGRpc3NpcGF0aW9uIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgICByZXNwZWN0IHRvIFFTUElDX0ZPUkNFTlNFUV9FTj0wIGF0IGNvc3Qgb2YgcGVyZm9ybWFuY2UKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2ZvcmNlX25zZXEodWludDhfdCBmb3JjZSkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9mb3JjZV9uc2VxKHVpbnQ4X3QgZm9yY2UpCit7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKENUUkxNT0RFLCBGT1JDRU5TRVFfRU4sIGZvcmNlKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgYXV0byBtb2RlIG9uIFFTUEkKKyAqCisgKiBcbm90ZSBTZWxlY3RpbmcgYXV0byBtb2RlIHdoZW4gYW55IGNvbW1hbmQgcHJldmlvdXNseSBjb25maWd1cmVkIGhhcyBjaG9zZW4KKyAqIFFVQUQgbW9kZSBmb3IgYW55IHBoYXNlIHdpbGwgYXV0b21hdGljYWxseSBjb25maWd1cmUgcGlucyBJTzIgYW5kIElPMyB0byBpbnB1dC4KKyAqCisgKiBccGFyYW0gW2luXSBhdXRvbW9kZSB0cnVlIGF1dG8gbW9kZSBzZWxlY3RlZCwKKyAqICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIG1hbnVhbCBtb2RlIHNlbGVjdGVkCisgKgorICogXHNhIGh3X3FzcGlfc2V0X3JlYWRfaW5zdHJ1Y3Rpb24KKyAqIFxzYSBod19xc3BpX3NldF9yZWFkX3N0YXR1c19pbnN0cnVjdGlvbgorICogXHNhIGh3X3FzcGlfc2V0X3N1c3BlbmRfcmVzdW1lX2luc3RydWN0aW9ucworICogXHNhIGh3X3FzcGlfc2V0X3dyaXRlX2VuYWJsZV9pbnN0cnVjdGlvbgorICogXHNhIGh3X3FzcGlfc2V0X2V4dHJhX2J5dGUKKyAqIFxzYSBod19xc3BpX3NldF9lcmFzZV9pbnN0cnVjdGlvbgorICogXHNhIGh3X3FzcGlfc2V0X2JyZWFrX3NlcXVlbmNlCisgKgorICovCit2b2lkIGh3X3FzcGlfc2V0X2F1dG9tb2RlKGJvb2wgYXV0b21vZGUpOworCisvKioKKyAqIFxicmllZiBSZWFkIGF1dG9tb2RlIHN0YXRlCisgKgorICogXHJldHVybiB0cnVlIGF1dG8gbW9kZSBpcyBzZWxlY3RlZCwKKyAqICAgICAgICAgZmFsc2UgbWFudWFsIG1vZGUgaXMgc2VsZWN0ZWQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod19xc3BpX2dldF9hdXRvbW9kZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBod19xc3BpX2dldF9hdXRvbW9kZSh2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfUVNQSUNfUkVHX0dFVEYoQ1RSTE1PREUsIEFVVE9fTUQpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgcmVhZCBwaXBlIGNsb2NrIGRlbGF5CisgKgorICogXHJldHVybiByZWFkIHBpcGUgY2xvY2sgZGVsYXkgcmVsYXRpdmUgdG8gdGhlIGZhbGxpbmcgZWRnZSBvZiBRU1BJX1NDSworICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfZ2V0X3JlYWRfcGlwZV9jbG9ja19kZWxheSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX2dldF9yZWFkX3BpcGVfY2xvY2tfZGVsYXkodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1FTUElDX1JFR19HRVRGKENUUkxNT0RFLCBQQ0xLX01EKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHJlYWQgcGlwZSBjbG9jayBkZWxheQorICoKKyAqIFxwYXJhbSBbaW5dIGRlbGF5IHJlYWQgcGlwZSBjbG9jayBkZWxheSByZWxhdGl2ZSB0byB0aGUgZmFsbGluZyBlZGdlIG9mIFFTUElfU0NLCisgKiAgICAgICAgICAgICAgICAgICB2YWx1ZSBzaG91bGQgYmUgaW4gcmFuZ2UgMC4uNworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X3JlYWRfcGlwZV9jbG9ja19kZWxheSh1aW50OF90IGRlbGF5KSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9yZWFkX3BpcGVfY2xvY2tfZGVsYXkodWludDhfdCBkZWxheSkKK3sKKyAgICAgICAgSFdfUVNQSUNfUkVHX1NFVEYoQ1RSTE1PREUsIFBDTEtfTUQsIGRlbGF5KTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgcmVhZCBwaXBlIGlzIGVuYWJsZWQKKyAqCisgKiBccmV0dXJuIDEgaWYgcmVhZCBwaXBlIGlzIGVuYWJsZWQsIDAgb3RoZXJ3aXNlCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfcXNwaV9pc19yZWFkX3BpcGVfY2xvY2tfZW5hYmxlZCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX2lzX3JlYWRfcGlwZV9jbG9ja19lbmFibGVkKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19RU1BJQ19SRUdfR0VURihDVFJMTU9ERSwgUlBJUEVfRU4pOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgcmVhZCBwaXBlCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlIDEgZW5hYmxlIHJlYWQgcGlwZSwKKyAqICAgICAgICAgICAgICAgICAgICAwIGRpc2FibGUgcmVhZCBwaXBlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9lbmFibGVfcmVhZHBpcGUodWludDhfdCBlbmFibGUpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfZW5hYmxlX3JlYWRwaXBlKHVpbnQ4X3QgZW5hYmxlKQoreworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihDVFJMTU9ERSwgUlBJUEVfRU4sIGVuYWJsZSk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCByZWFkIHNhbXBsaW5nIGVkZ2UKKyAqCisgKiBccmV0dXJuIHR5cGUgb2YgUVNQSV9DTEsgZWRnZSBmb3Igc2FtcGxpbmcgcmVjZWl2ZWQgZGF0YQorICoKKyAqLworc3RhdGljIGlubGluZSBIV19RU1BJX1NBTVBMSU5HX0VER0UgaHdfcXNwaV9nZXRfcmVhZF9zYW1wbGluZ19lZGdlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSBIV19RU1BJX1NBTVBMSU5HX0VER0UgaHdfcXNwaV9nZXRfcmVhZF9zYW1wbGluZ19lZGdlKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19RU1BJQ19SRUdfR0VURihDVFJMTU9ERSwgUlhEX05FRyk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCByZWFkIHNhbXBsaW5nIGVkZ2UKKyAqCisgKiBccGFyYW0gW2luXSBlZGdlIHNldHMgd2hldGhlciByZWFkIHNhbXBsZXMgb3IgdGFrZW4gb24gcmlzaW5nIG9yIGZhbGxpbmcgZWRnZQorICogICAgICAgICAgICAgICAgICBvZiBRU1BJX1NDSworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X3JlYWRfc2FtcGxpbmdfZWRnZShIV19RU1BJX1NBTVBMSU5HX0VER0UgZWRnZSkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfcmVhZF9zYW1wbGluZ19lZGdlKEhXX1FTUElfU0FNUExJTkdfRURHRSBlZGdlKQoreworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihDVFJMTU9ERSwgUlhEX05FRywgZWRnZSk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIGhyZWFkeSBzaWduYWwgaXMgdXNlZAorICoKKyAqIFxyZXR1cm4gMCAtIHdoZW4gd2FpdCBzdGF0ZXMgYXJlIG5vdCBhZGRlZCB2aWEgaHJlYWR5IHNpZ25hbCBkdXJpbmcgYWNjZXNzIHRvCisgKiAgICAgICAgICAgICBRU1BJQ19XUklURURBVEEsIFFTUElDX1JFQUREQVRBIGFuZCBRU1BJQ19EVU1NWURBVEEgcmVnaXN0ZXJzLAorICogICAgICAgICAxIC0gd2hlbiB3YWl0IHN0YXRlcyBhcmUgYWRkZWQgdmlhIGhyZWFkeSBzaWduYWwgZHVyaW5nIGFjY2VzcyB0bworICogICAgICAgICAgICAgUVNQSUNfV1JJVEVEQVRBLCBRU1BJQ19SRUFEREFUQSBhbmQgUVNQSUNfRFVNTVlEQVRBIHJlZ2lzdGVycy4KKyAqICAgICAgICAgICAgIEluIHRoaXMgY2FzZSByZWFkIHJlYWQgUVNQSV9TVEFUVVMgcmVnaXN0ZXIgdG8gY2hlY2sgdGhlIGVuZCBvZgorICogICAgICAgICAgICAgYWN0aXZpdHkgYXQgdGhlIFNQSSBidXMKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX2lzX2hyZWFkeV9lbmFibGVkKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfaXNfaHJlYWR5X2VuYWJsZWQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1FTUElDX1JFR19HRVRGKENUUkxNT0RFLCBIUkRZX01EKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlL2Rpc2FibGUgYWRkaW5nIHdhaXQgc3RhdGVzIGR1cmluZyByZWdpc3RlciBhY2Nlc3MKKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGUgMCAtIHdhaXQgc3RhdGVzIHdpbGwgYmUgYWRkZWQgaW4gaHJlYWR5IHNpZ25hbCBkdXJpbmcgYWNjZXNzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgIFFTUElDX1dSSVRFREFUQSwgUVNQSUNfUkVBRERBVEEgYW5kIFFTUElDX0RVTU1ZREFUQSByZWdpc3RlcnMKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2VuYWJsZV9ocmVhZHkodWludDhfdCBlbmFibGUpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfZW5hYmxlX2hyZWFkeSh1aW50OF90IGVuYWJsZSkKK3sKKyAgICAgICAgSFdfUVNQSUNfUkVHX1NFVEYoQ1RSTE1PREUsIEhSRFlfTUQsIGVuYWJsZSk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjbG9jayBtb2RlCisgKgorICogXHJldHVybiAwIC0gU1BJIG1vZGUgMCBpcyB1c2VkIGZvciBRU1BJX0NMSywgdGhlIFFTUElfU0NLIGlzIGxvdyB3aGVuIFFTUElfQ1MgaXMgaGlnaCAoaWRsZSksCisgKiAgICAgICAgIDEgLSBTUEkgbW9kZSAzIGlzIHVzZWQgZm9yIFFTUElfQ0xLLCB0aGUgUVNQSV9TQ0sgaXMgaGlnaCB3aGVuIFFTUElfQ1MgaXMgaGlnaCAoaWRsZSkKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX2dldF9jbG9ja19tb2RlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfZ2V0X2Nsb2NrX21vZGUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1FTUElDX1JFR19HRVRGKENUUkxNT0RFLCBDTEtfTUQpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgY2xvY2sgbW9kZQorICoKKyAqIFxwYXJhbSBbaW5dIG1vZGUgSFdfU1BJX1BPTF9MT1cgLSBTUEkgbW9kZSAwIGlzIHVzZWQgZm9yIFFTUElfQ0xLLAorICogICAgICAgICAgICAgICAgICAgICAgVGhlIFFTUElfU0NLIGlzIGxvdyB3aGVuIFFTUElfQ1MgaXMgaGlnaCAoaWRsZSksCisgKiAgICAgICAgICAgICAgICAgIEhXX1NQSV9QT0xfSElHSCAtIFNQSSBtb2RlIDMgaXMgdXNlZCBmb3IgUVNQSV9DTEssCisgKiAgICAgICAgICAgICAgICAgICAgICBUaGUgUVNQSV9TQ0sgaXMgaGlnaCB3aGVuIFFTUElfQ1MgaXMgaGlnaCAoaWRsZSkKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9jbG9ja19tb2RlKEhXX1FTUElfUE9MIG1vZGUpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X2Nsb2NrX21vZGUoSFdfUVNQSV9QT0wgbW9kZSkKK3sKKyAgICAgICAgSFdfUVNQSUNfUkVHX1NFVEYoQ1RSTE1PREUsIENMS19NRCwgbW9kZSk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBJTzIgZGlyZWN0aW9uCisgKgorICogXHBhcmFtIFtpbl0gb3V0cHV0IFFTUElfSU8yIG91dHB1dCBlbmFibGUuIFVzZSB0aGlzIG9ubHkgaW4gU1BJIG9yIER1YWwgU1BJCisgKiAgICAgICAgICAgICAgICAgICAgbW9kZSB0byBjb250cm9sIC9XUCBzaWduYWwuIFdoZW4gdGhlIEF1dG8gTW9kZSBpcyBzZWxlY3RlZAorICogICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgUVVBRCBTUEkgaXMgdXNlZCwgc2V0IHRoaXMgdG8gZmFsc2UuCisgKiAgICAgICAgICAgICAgICAgICAgZmFsc2U6IFRoZSBRU1BJX0lPMiBwYWQgaXMgaW5wdXQKKyAqICAgICAgICAgICAgICAgICAgICB0cnVlOiBUaGUgUVNQSV9JTzIgcGFkIGlzIG91dHB1dAorICoKKyAqLworI2lmIChkZ19jb25maWdGTEFTSF9QT1dFUl9ET1dOID09IDEpCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJ0ZXh0X3JldGFpbmVkIikpKQorI2VuZGlmCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfaW8yX291dHB1dChib29sIG91dHB1dCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfaW8yX291dHB1dChib29sIG91dHB1dCkKK3sKKyAgICAgICAgSFdfUVNQSUNfUkVHX1NFVEYoQ1RSTE1PREUsIElPMl9PRU4sIG91dHB1dCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBJTzMgZGlyZWN0aW9uCisgKgorICogXHBhcmFtIFtpbl0gb3V0cHV0IFVzZSB0aGlzIG9ubHkgaW4gU1BJIG9yIER1YWwgU1BJIG1vZGUgdG8gY29udHJvbCAvSE9MRCBzaWduYWwuCisgKiAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUgQXV0byBNb2RlIGlzIHNlbGVjdGVkIGFuZCB0aGUgUVVBRCBTUEkgaXMgdXNlZCwKKyAqICAgICAgICAgICAgICAgICAgICBzZXQgdGhpcyB0byBmYWxzZS4KKyAqICAgICAgICAgICAgICAgICAgICBmYWxzZTogVGhlIFFTUElfSU8zIHBhZCBpcyBpbnB1dCwKKyAqICAgICAgICAgICAgICAgICAgICB0cnVlOiBUaGUgUVNQSV9JTzMgcGFkIGlzIG91dHB1dAorICoKKyAqLworI2lmIChkZ19jb25maWdGTEFTSF9QT1dFUl9ET1dOID09IDEpCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJ0ZXh0X3JldGFpbmVkIikpKQorI2VuZGlmCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfaW8zX291dHB1dChib29sIG91dHB1dCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfaW8zX291dHB1dChib29sIG91dHB1dCkKK3sKKyAgICAgICAgSFdfUVNQSUNfUkVHX1NFVEYoQ1RSTE1PREUsIElPM19PRU4sIG91dHB1dCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBzdGF0ZSBmb3IgSU8yIHdoZW4gaXQncyBjb25maWd1cmVkIGFzIG91dHB1dAorICoKKyAqIFxwYXJhbSBbaW5dIHZhbCBRU1BJX0lPMiB2YWx1ZSB0byBzZXQgKDAgb3IgMSkKKyAqCisgKiBcc2EgaHdfcXNwaV9zZXRfaW8yX2RpcmVjdGlvbgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X2lvMih1aW50OF90IHZhbCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfaW8yKHVpbnQ4X3QgdmFsKQoreworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihDVFJMTU9ERSwgSU8yX0RBVCwgdmFsKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHN0YXRlIGZvciBJTzMgd2hlbiBpdCdzIGNvbmZpZ3VyZWQgYXMgb3V0cHV0CisgKgorICogXHBhcmFtIFtpbl0gdmFsIFFTUElfSU8zIHZhbHVlIHRvIHNldCAoMCBvciAxKQorICoKKyAqIFxzYSBod19xc3BpX3NldF9pbzNfZGlyZWN0aW9uCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfaW8zKHVpbnQ4X3QgdmFsKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9pbzModWludDhfdCB2YWwpCit7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKENUUkxNT0RFLCBJTzNfREFULCB2YWwpOworfQorCisvKioKKyAqIFxicmllZiBSZWFkIHN0YXRlIG9mIElPMiB3aGVuIG5vdCBpbiBRVUFEIG1vZGUKKyAqCisgKiBccmV0dXJuIHZhbHVlIG9mIElPMiBwaW4gKDAgb3IgMSkKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX2dldF9pbzIodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfcXNwaV9nZXRfaW8yKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19RU1BJQ19SRUdfR0VURihDVFJMTU9ERSwgSU8yX0RBVCk7Cit9CisKKy8qKgorICogXGJyaWVmIFJlYWQgc3RhdGUgb2YgSU8zIHdoZW4gbm90IGluIFFVQUQgbW9kZQorICoKKyAqIFxyZXR1cm4gdmFsdWUgb2YgSU8zIHBpbiAoMCBvciAxKQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfZ2V0X2lvMyh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX2dldF9pbzModm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1FTUElDX1JFR19HRVRGKENUUkxNT0RFLCBJTzNfREFUKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHJlYWQgaW5zdHJ1Y3Rpb25zIGZvciBRU1BJIGZsYXNoCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIGluc3RydWN0aW9uIHRvIGJlIHNlbnQgdG8gZmxhc2ggbWVtb3J5IHdoZW4gZGF0YSBpcyByZXF1ZXN0ZWQKKyAqIG9uIEFIQiBidXMuCisgKgorICogXHBhcmFtIFtpbl0gaW5zdCBpbnN0cnVjdGlvbiBmb3IgSW5jcmVtZW50YWwgQnVyc3Qgb3IgU2luZ2xlIHJlYWQgYWNjZXNzLgorICogICAgICAgICAgICAgICAgICBUaGlzIHZhbHVlIGlzIHRoZSBzZWxlY3RlZCBpbnN0cnVjdGlvbiBhdCB0aGUgY2FzZXMgb2YgaW5jcmVtZW50YWwKKyAqICAgICAgICAgICAgICAgICAgYnVyc3Qgb3Igc2luZ2xlIHJlYWQgYWNjZXNzLiBBbHNvIHRoaXMgdmFsdWUgaXMgdXNlZCB3aGVuIGEgd3JhcHBpbmcKKyAqICAgICAgICAgICAgICAgICAgYnVyc3QgaXMgbm90IHN1cHBvcnRlZC4KKyAqIFxwYXJhbSBbaW5dIHNlbmRfb25jZSAwIC0gdHJhbnNtaXQgaW5zdHJ1Y3Rpb24gYXQgYW55IGJ1cnN0IGFjY2VzcywKKyAqICAgICAgICAgICAgICAgICAgICAgICAxIC0gdHJhbnNtaXQgaW5zdHJ1Y3Rpb24gb25seSBpbiB0aGUgZmlyc3QgYWNjZXNzIGFmdGVyIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiBvZiBBdXRvIE1vZGUuCisgKiBccGFyYW0gW2luXSBkdW1teV9jb3VudCBudW1iZXIgb2YgZHVtbXkgYnl0ZXMgdG8gc2VuZCAwLi40CisgKiBccGFyYW0gW2luXSBpbnN0X3BoYXNlIGRlc2NyaWJlcyB0aGUgbW9kZSBvZiB0aGUgU1BJIGJ1cyBkdXJpbmcgdGhlIGluc3RydWN0aW9uIHBoYXNlCisgKiBccGFyYW0gW2luXSBhZGRyX3BoYXNlIGRlc2NyaWJlcyB0aGUgbW9kZSBvZiB0aGUgU1BJIGJ1cyBkdXJpbmcgdGhlIGFkZHJlc3MgcGhhc2UKKyAqIFxwYXJhbSBbaW5dIGR1bW15X3BoYXNlIGRlc2NyaWJlcyB0aGUgbW9kZSBvZiB0aGUgU1BJIGJ1cyBkdXJpbmcgdGhlIGR1bW15IHBoYXNlCisgKiBccGFyYW0gW2luXSBkYXRhX3BoYXNlIGRlc2NyaWJlcyB0aGUgbW9kZSBvZiB0aGUgU1BJIGJ1cyBkdXJpbmcgdGhlIGRhdGEgcGhhc2UKKyAqCisgKiBcc2EgaHdfcXNwaV9zZXRfZXh0cmFfYnl0ZQorICogXHNhIGh3X3FzcGlfc2V0X3dyYXBwaW5nX2J1cnN0X2luc3RydWN0aW9uCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfcmVhZF9pbnN0cnVjdGlvbih1aW50OF90IGluc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNlbmRfb25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZHVtbXlfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGluc3RfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGFkZHJfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGR1bW15X3BoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERSBkYXRhX3BoYXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGUoKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X3JlYWRfaW5zdHJ1Y3Rpb24odWludDhfdCBpbnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzZW5kX29uY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGR1bW15X2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERSBpbnN0X3BoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERSBhZGRyX3BoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERSBkdW1teV9waGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgZGF0YV9waGFzZSkKK3sKKyAgICAgICAgUVNQSUMtPlFTUElDX0JVUlNUQ01EQV9SRUcgPQorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURBX1JFRywgUVNQSUNfSU5TVCwgaW5zdCkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURBX1JFRywgUVNQSUNfSU5TVF9UWF9NRCwgaW5zdF9waGFzZSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURBX1JFRywgUVNQSUNfQURSX1RYX01ELCBhZGRyX3BoYXNlKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREFfUkVHLCBRU1BJQ19ETVlfVFhfTUQsIGR1bW15X3BoYXNlKTsKKworICAgICAgICBRU1BJQy0+UVNQSUNfQlVSU1RDTURCX1JFRyA9CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19EQVRfUlhfTUQsIGRhdGFfcGhhc2UpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX0lOU1RfTUQsIHNlbmRfb25jZSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfRE1ZX0ZPUkNFLCAoZHVtbXlfY291bnQgPT0gMyA/IDEgOiAwKSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfRE1ZX05VTSwgZHVtbXlfbnVtW2R1bW15X2NvdW50XSk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCB3cmFwcGluZyBidXJzdCByZWFkIGluc3RydWN0aW9ucyBmb3IgUVNQSSBmbGFzaAorICoKKyAqIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIHNldCB1cCB3cmFwcGluZyBidXJzdCBpbnN0cnVjdGlvbiB0byB1c2UuCisgKiBVc2UgdGhpcyBmZWF0dXJlIG9ubHkgd2hlbiB0aGUgc2VyaWFsIEZMQVNIIG1lbW9yeSBzdXBwb3J0cyBhIHNwZWNpYWwKKyAqIGluc3RydWN0aW9uIGZvciB3cmFwcGluZyBidXJzdCBhY2Nlc3MuCisgKgorICogXHBhcmFtIFtpbl0gaW5zdCBpbnN0cnVjdGlvbiBmb3IgV3JhcHBpbmcgQnVyc3QKKyAqIFxwYXJhbSBbaW5dIGxlbiBkZXNjcmliZXMgdGhlIHNlbGVjdGVkIGxlbmd0aCBvZiBhIHdyYXBwaW5nIGJ1cnN0CisgKiBccGFyYW0gW2luXSBzaXplIGRlc2NyaWJlcyB0aGUgc2VsZWN0ZWQgZGF0YSBzaXplIG9mIGEgd3JhcHBpbmcgYnVyc3QKKyAqCisgKi8KK3ZvaWQgaHdfcXNwaV9zZXRfd3JhcHBpbmdfYnVyc3RfaW5zdHJ1Y3Rpb24odWludDhfdCBpbnN0LCBIV19RU1BJX1dSQVBfTEVOIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfV1JBUF9TSVpFIHNpemUpOworCisvKioKKyAqIFxicmllZiBTZXQgZXh0cmEgYnl0ZSB0byB1c2UgaW4gcmVhZCBpbnN0cnVjdGlvbgorICoKKyAqIFxwYXJhbSBbaW5dIGV4dHJhX2J5dGUgdGhlIHZhbHVlIG9mIGFuIGV4dHJhIGJ5dGUgd2hpY2ggd2lsbCBiZSB0cmFuc2ZlcnJlZCBhZnRlcgorICogICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLiBUaGlzIGJ5dGUgaXMgdXNlZCBmb3IgdGVsbGluZyBtZW1vcnkgaWYgaXQgc2hvdWxkIHN0YXkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgaW4gY29udGludW91cyByZWFkIG1vZGUgb3Igd2FpdCBmb3Igbm9ybWFsIGluc3RydWN0aW9uIGFmdGVyIENTCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGdvZXMgaW5hY3RpdmUKKyAqIFxwYXJhbSBbaW5dIGJ1c19tb2RlIGRlc2NyaWJlcyB0aGUgbW9kZSBvZiB0aGUgU1BJIGJ1cyBkdXJpbmcgdGhlIGV4dHJhIGJ5dGUgcGhhc2UuCisgKiBccGFyYW0gW2luXSBoYWxmX2Rpc2FibGVfb3V0IDEgLSBkaXNhYmxlIChoaS16KSBvdXRwdXQgZHVyaW5nIHRoZSB0cmFuc21pc3Npb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYml0cyBbMzowXSBvZiBleHRyYSBieXRlCisgKgorICogXHNhIGh3X3FzcGlfc2V0X3JlYWRfaW5zdHJ1Y3Rpb24KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9leHRyYV9ieXRlKHVpbnQ4X3QgZXh0cmFfYnl0ZSwgSFdfUVNQSV9CVVNfTU9ERSBidXNfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgaGFsZl9kaXNhYmxlX291dCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfZXh0cmFfYnl0ZSh1aW50OF90IGV4dHJhX2J5dGUsIEhXX1FTUElfQlVTX01PREUgYnVzX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGhhbGZfZGlzYWJsZV9vdXQpCit7CisgICAgICAgIFFTUElDLT5RU1BJQ19CVVJTVENNREFfUkVHID0KKyAgICAgICAgICAgICAgICAoUVNQSUMtPlFTUElDX0JVUlNUQ01EQV9SRUcgJgorICAgICAgICAgICAgICAgICAgICAgICAgfihSRUdfTVNLKFFTUElDLCBRU1BJQ19CVVJTVENNREFfUkVHLCBRU1BJQ19FWFRfQllURSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKFFTUElDLCBRU1BJQ19CVVJTVENNREFfUkVHLCBRU1BJQ19FWFRfVFhfTUQpKSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURBX1JFRywgUVNQSUNfRVhUX0JZVEUsIGV4dHJhX2J5dGUpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQV9SRUcsIFFTUElDX0VYVF9UWF9NRCwgYnVzX21vZGUpOworCisgICAgICAgIFFTUElDLT5RU1BJQ19CVVJTVENNREJfUkVHID0KKyAgICAgICAgICAgICAgICAoUVNQSUMtPlFTUElDX0JVUlNUQ01EQl9SRUcgJgorICAgICAgICAgICAgICAgICAgICAgICAgfihSRUdfTVNLKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19FWFRfQllURV9FTikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19FWFRfSEZfRFMpKSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfRVhUX0JZVEVfRU4sIDEpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX0VYVF9IRl9EUywgaGFsZl9kaXNhYmxlX291dCA/IDEgOiAwKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IGR1bW15IGJ5dGUgY291bnQKKyAqCisgKiBOdW1iZXIgb2YgZHVtbXkgYnl0ZXMgdG8gc2VuZCB3aGVuIHJlYWQgaW5zdHJ1Y3Rpb24gaXMgZXhlY3V0ZWQuCisgKgorICogXHBhcmFtIFtpbl0gY291bnQgbnVtYmVyIG9mIGR1bW15IGJ5dGVzIHRvIHNlbmQgMC4uNAorICoKKyAqLwordm9pZCBod19xc3BpX3NldF9kdW1teV9ieXRlc19jb3VudCh1aW50OF90IGNvdW50KTsKKworLyoqCisgKiBcYnJpZWYgU2V0IG51bWJlciBvZiBjbG9jayB3aGVuIENTIHN0YXlzIGhpZ2gKKyAqCisgKiBccGFyYW0gW2luXSBjbG9ja19jb3VudCBiZXR3ZWVuIHRoZSB0cmFuc21pc3Npb24gb2YgdHdvIGRpZmZlcmVudCBpbnN0cnVjdGlvbnMgdG8gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBmbGFzaCBtZW1vcnksIHRoZSBxc3BpIGJ1cyBzdGF5cyBpbiBpZGxlIHN0YXRlIChRU1BJX0NTIGhpZ2gpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXQgbGVhc3QgdGhpcyBudW1iZXIgb2Ygc3BpIGNsb2NrIGN5Y2xlcy4gU2VlIHRoZSBRU1BJQ19FUlNfQ1NfSEkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGZvciBhbiBleGNlcHRpb24KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9taW5fY3NfaGlnaCh1aW50OF90IGNsb2NrX2NvdW50KSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9taW5fY3NfaGlnaCh1aW50OF90IGNsb2NrX2NvdW50KQoreworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihCVVJTVENNREIsIENTX0hJR0hfTUlOLCBjbG9ja19jb3VudCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCB1cCBlcmFzZSBpbnN0cnVjdGlvbnMKKyAqCisgKiBJbnN0cnVjdGlvbiB3aWxsIGJlIHNlbmQgYWZ0ZXIgY2FsbCB0byBod19xc3BpX2VyYXNlX2Jsb2NrLgorICoKKyAqIFxwYXJhbSBbaW5dIGluc3QgY29kZSB2YWx1ZSBvZiB0aGUgZXJhc2UgaW5zdHJ1Y3Rpb24KKyAqIFxwYXJhbSBbaW5dIGluc3RfcGhhc2UgbW9kZSBvZiB0aGUgUVNQSSBCdXMgZHVyaW5nIHRoZSBpbnN0cnVjdGlvbiBwaGFzZSBvZiB0aGUgZXJhc2UgaW5zdHJ1Y3Rpb24KKyAqIFxwYXJhbSBbaW5dIGFkZHJfcGhhc2UgdGhlIG1vZGUgb2YgdGhlIFFTUEkgQnVzIGR1cmluZyB0aGUgYWRkcmVzcyBwaGFzZSBvZiB0aGUgZXJhc2UgaW5zdHJ1Y3Rpb24KKyAqIFxwYXJhbSBbaW5dIGhjbGtfY3ljbGVzIHRoZSBjb250cm9sbGVyIG11c3Qgc3RheSB3aXRob3V0IGZsYXNoIG1lbW9yeSByZWFkaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyBmb3IgdGhpcyBudW1iZXIgb2YgQU1CQSBBSEIgaGNsayBjeWNsZXMsIGJlZm9yZQorICogICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybXMgdGhlIGNvbW1hbmQgb2YgZXJhc2Ugb3IgcmVzdW1lIDE1IC0gMAorICogXHBhcmFtIFtpbl0gY3NfaGlfY3ljbGVzIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgaW5zdHJ1Y3Rpb25zOiB3cml0ZSBlbmFibGUsIGVyYXNlLCBlcmFzZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHN1c3BlbmQgYW5kIGVyYXNlIHJlc3VtZSwgdGhlIFFTUElfQ1MgcmVtYWlucyBoaWdoIGZvciBhdAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXN0IHRoaXMgbnVtYmVyIG9mIHFzcGkgYnVzIGNsb2NrIGN5Y2xlcworICoKKyAqIFxzYSBod19xc3BpX2VyYXNlX2Jsb2NrCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfZXJhc2VfaW5zdHJ1Y3Rpb24odWludDhfdCBpbnN0LCBIV19RU1BJX0JVU19NT0RFIGluc3RfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGFkZHJfcGhhc2UsIHVpbnQ4X3QgaGNsa19jeWNsZXMsIHVpbnQ4X3QgY3NfaGlfY3ljbGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfZXJhc2VfaW5zdHJ1Y3Rpb24odWludDhfdCBpbnN0LCBIV19RU1BJX0JVU19NT0RFIGluc3RfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGFkZHJfcGhhc2UsIHVpbnQ4X3QgaGNsa19jeWNsZXMsIHVpbnQ4X3QgY3NfaGlfY3ljbGVzKQoreworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihFUkFTRUNNREEsIEVSU19JTlNULCBpbnN0KTsKKyAgICAgICAgUVNQSUMtPlFTUElDX0VSQVNFQ01EQl9SRUcgPQorICAgICAgICAgICAgICAgIChRU1BJQy0+UVNQSUNfRVJBU0VDTURCX1JFRyAmCisgICAgICAgICAgICAgICAgICAgICAgICB+KFJFR19NU0soUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIFFTUElDX0VSU19UWF9NRCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKFFTUElDLCBRU1BJQ19FUkFTRUNNREJfUkVHLCBRU1BJQ19FQURfVFhfTUQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgUVNQSUNfRVJTUkVTX0hMRCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKFFTUElDLCBRU1BJQ19FUkFTRUNNREJfUkVHLCBRU1BJQ19FUlNfQ1NfSEkpKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIFFTUElDX0VSU19UWF9NRCwgaW5zdF9waGFzZSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIFFTUElDX0VBRF9UWF9NRCwgYWRkcl9waGFzZSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIFFTUElDX0VSU1JFU19ITEQsIGhjbGtfY3ljbGVzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgUVNQSUNfRVJTX0NTX0hJLCBjc19oaV9jeWNsZXMpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdXAgd3JpdGUgZW5hYmxlIGluc3RydWN0aW9uCisgKgorICogSW5zdHJ1Y3Rpb24gc2V0dXAgYnkgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSBlcmFzZS4KKyAqCisgKiBccGFyYW0gW2luXSB3cml0ZV9lbmFibGUgY29kZSB2YWx1ZSBvZiB0aGUgd3JpdGUgZW5hYmxlIGluc3RydWN0aW9uCisgKiBccGFyYW0gW2luXSBpbnN0X3BoYXNlIG1vZGUgb2YgdGhlIFFTUEkgQnVzIGR1cmluZyB0aGUgaW5zdHJ1Y3Rpb24gcGhhc2UKKyAqCisgKiBcc2EgaHdfcXNwaV9lcmFzZV9ibG9jaworICogXHNhIGh3X3FzcGlfc2V0X2VyYXNlX2luc3RydWN0aW9uCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfd3JpdGVfZW5hYmxlX2luc3RydWN0aW9uKHVpbnQ4X3Qgd3JpdGVfZW5hYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGluc3RfcGhhc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZSgoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfd3JpdGVfZW5hYmxlX2luc3RydWN0aW9uKHVpbnQ4X3Qgd3JpdGVfZW5hYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGluc3RfcGhhc2UpCit7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKEVSQVNFQ01EQSwgV0VOX0lOU1QsIHdyaXRlX2VuYWJsZSk7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKEVSQVNFQ01EQiwgV0VOX1RYX01ELCBpbnN0X3BoYXNlKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHVwIGVyYXNlIHN1c3BlbmQvcmVzdW1lIGluc3RydWN0aW9ucworICoKKyAqIFxwYXJhbSBbaW5dIGVyYXNlX3N1c3BlbmRfaW5zdCBjb2RlIHZhbHVlIG9mIHRoZSBlcmFzZSBzdXNwZW5kIGluc3RydWN0aW9uLgorICogXHBhcmFtIFtpbl0gc3VzcGVuZF9pbnN0X3BoYXNlIG1vZGUgb2YgdGhlIFFTUEkgQnVzIGR1cmluZyB0aGUgaW5zdHJ1Y3Rpb24gcGhhc2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3VzcGVuZCBpbnN0cnVjdGlvbgorICogXHBhcmFtIFtpbl0gZXJhc2VfcmVzdW1lX2luc3QgY29kZSB2YWx1ZSBvZiB0aGUgZXJhc2UgcmVzdW1lIGluc3RydWN0aW9uLgorICogXHBhcmFtIFtpbl0gcmVzdW1lX2luc3RfcGhhc2UgbW9kZSBvZiB0aGUgUVNQSSBCdXMgZHVyaW5nIHRoZSBpbnN0cnVjdGlvbiBwaGFzZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlc3VtZSBpbnN0cnVjdGlvbgorICogXHBhcmFtIFtpbl0gbWluaW11bV9kZWxheSBkZWZpbmVzIHRoZSBtaW5pbXVtIHRpbWUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgaW5zdHJ1Y3Rpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJhc2Ugc3VzcGVuZCBhbmQgdGhlIHByZXZpb3VzIGluc3RydWN0aW9uIGVyYXNlIHJlc3VtZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkZWxheSB3aWxsIGJlIGFsc28gYXBwbGllZCBhZnRlciB0aGUgRXJhc2UgY29tbWFuZC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAtIGRvbid0IHdhaXQuIFRoZSBjb250cm9sbGVyIHN0YXJ0cyB0aGUgZXJhc2Ugc3VzcGVuZCBwcm9jZWR1cmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZWx5LAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAxLi42MyAtIGNvbnRyb2xsZXIgd2FpdHMgYXQgbGVhc3QgdGhpcyBudW1iZXIgb2YgMjg4a0h6IGNsb2NrIGN5Y2xlcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgc3VzcGVuc2lvbiBvZiBlcmFzaW5nLiBUaW1lIHN0YXJ0cyBjb3VudGluZyBhZnRlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGVyYXNlIHJlc3VtZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X3N1c3BlbmRfcmVzdW1lX2luc3RydWN0aW9ucyh1aW50OF90IGVyYXNlX3N1c3BlbmRfaW5zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIHN1c3BlbmRfaW5zdF9waGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVyYXNlX3Jlc3VtZV9pbnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgcmVzdW1lX2luc3RfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBtaW5pbXVtX2RlbGF5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZSgoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfc3VzcGVuZF9yZXN1bWVfaW5zdHJ1Y3Rpb25zKHVpbnQ4X3QgZXJhc2Vfc3VzcGVuZF9pbnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgc3VzcGVuZF9pbnN0X3BoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZXJhc2VfcmVzdW1lX2luc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERSByZXN1bWVfaW5zdF9waGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1pbmltdW1fZGVsYXkpCit7CisgICAgICAgIFFTUElDLT5RU1BJQ19FUkFTRUNNREFfUkVHID0KKyAgICAgICAgICAgICAgICAoUVNQSUMtPlFTUElDX0VSQVNFQ01EQV9SRUcgJgorICAgICAgICAgICAgICAgICAgICAgICAgfihSRUdfTVNLKFFTUElDLCBRU1BJQ19FUkFTRUNNREFfUkVHLCBRU1BJQ19TVVNfSU5TVCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKFFTUElDLCBRU1BJQ19FUkFTRUNNREFfUkVHLCBRU1BJQ19SRVNfSU5TVCkpKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19FUkFTRUNNREFfUkVHLCBRU1BJQ19TVVNfSU5TVCwgZXJhc2Vfc3VzcGVuZF9pbnN0KSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19FUkFTRUNNREFfUkVHLCBRU1BJQ19SRVNfSU5TVCwgZXJhc2VfcmVzdW1lX2luc3QpOworICAgICAgICBRU1BJQy0+UVNQSUNfRVJBU0VDTURCX1JFRyA9CisgICAgICAgICAgICAgICAgKFFTUElDLT5RU1BJQ19FUkFTRUNNREJfUkVHICYKKyAgICAgICAgICAgICAgICAgICAgICAgIH4oUkVHX01TSyhRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgUVNQSUNfU1VTX1RYX01EKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIFFTUElDX1JFU19UWF9NRCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKFFTUElDLCBRU1BJQ19FUkFTRUNNREJfUkVHLCBRU1BJQ19SRVNTVVNfRExZKSkpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIFFTUElDX1NVU19UWF9NRCwgc3VzcGVuZF9pbnN0X3BoYXNlKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19FUkFTRUNNREJfUkVHLCBRU1BJQ19SRVNfVFhfTUQsIHJlc3VtZV9pbnN0X3BoYXNlKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19FUkFTRUNNREJfUkVHLCBRU1BJQ19SRVNTVVNfRExZLCBtaW5pbXVtX2RlbGF5KTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHN0YXR1cyBjb21tYW5kCisgKgorICogVGhpcyBjb21tYW5kIHdpbGwgYmUgc2VuZCBieSBRU1BJIGNvbnRyb2xsZXIgd2hlbiBpdCBuZWVkcyB0byBjaGVjayBzdGF0dXMgb2YgZmxhc2ggbWVtb3J5LgorICogVGhpcyBjb21tYW5kIGlzIGFsc28gc2VuZCBpbmRpcmVjdGx5IHdoZW4gaHdfcXNwaV9nZXRfZXJhc2Vfc3RhdHVzIGlzIGNhbGxlZC4KKyAqCisgKiBccGFyYW0gW2luXSBpbnN0IGluc3RydWN0aW9uIGZvciByZWFkIHN0YXR1cworICogXHBhcmFtIFtpbl0gaW5zdF9waGFzZSBtb2RlIG9mIHRoZSBRU1BJIEJ1cyBkdXJpbmcgdGhlIGluc3RydWN0aW9uIHBoYXNlIG9mIHRoZSByZWFkCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyBpbnN0cnVjdGlvbgorICogXHBhcmFtIFtpbl0gcmVjZWl2ZV9waGFzZSBtb2RlIG9mIHRoZSBRU1BJIEJ1cyBkdXJpbmcgdGhlIHJlY2VpdmUgc3RhdHVzIHBoYXNlIG9mCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWFkIHN0YXR1cyBpbnN0cnVjdGlvbgorICogXHBhcmFtIFtpbl0gYnVzeV9wb3MgaXQgZGVzY3JpYmVzIHdoaWNoIGJpdCBmcm9tIHRoZSBiaXRzIG9mIHN0YXR1cyByZXByZXNlbnRzCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgQnVzeSBiaXQgKDcgLSAwKQorICogXHBhcmFtIFtpbl0gYnVzeV92YWwgZGVmaW5lcyB0aGUgdmFsdWUgb2YgdGhlIEJ1c3kgYml0IHdoaWNoIG1lYW5zIHRoYXQgdGhlIGZsYXNoIGlzIGJ1c3kKKyAqICAgICAgICAgICAgICAgICAgICAgIDAgLSBmbGFzaCBpcyBidXN5IHdoZW4gdGhlIEJ1c3kgYml0IGlzIGVxdWFsIHRvIDAsCisgKiAgICAgICAgICAgICAgICAgICAgICAxIC0gZmxhc2ggaXMgYnVzeSB3aGVuIHRoZSBCdXN5IGJpdCBpcyBlcXVhbCB0byAxCisgKiBccGFyYW0gW2luXSByZWFkX2RlbGF5IGRlZmluZXMgdGhlIG1pbmltdW0gdGltZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBpbnN0cnVjdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgICByZWFkIHN0YXR1cyByZWdpc3RlciBhbmQgcHJldmlvdXMgaW5zdHJ1Y3Rpb25zIGxpa2UgZXJhc2Ugb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lLiBUaGUgc2FtZSBkZWxheSB3aWxsIGJlIGFsc28gYXBwbGllZCBhZnRlciB0aGUgRXJhc2UgY29tbWFuZC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgMCAtIGRvbid0IHdhaXQuIFRoZSBjb250cm9sbGVyIHN0YXJ0cyB0byByZWFkIHRoZSBGbGFzaCBtZW1vcnkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyByZWdpc3RlciBpbW1lZGlhdGVseS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgMS4uNjMgLSBjb250cm9sbGVyIHdhaXRzIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YgUVNQSV9DTEsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZXMgYW5kIGFmdGVyd2FyZHMgaXQgc3RhcnRzIHRvIHJlYWQgdGhlIEZsYXNoIG1lbW9yeSBzdGF0dXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlci4gVGltZSBzdGFydHMgY291bnRpbmcgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcmFzZS9yZXN1bWUuCisgKiBccGFyYW0gW2luXSBzdHNfZGVsYXkgZGVmaW5lcyB0aGUgcmVnaXN0ZXIgdG8gY291bnQgdGhlIGRlbGF5IHRvIHdhaXQgZm9yIHRoZSBGTEFTSCBTdGF0dXMKKyAqICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciByZWFkIGFmdGVyIGFuIGVyYXNlIG9yIGVyYXNlLyByZXN1bWUgY29tbWFuZC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAwIC0gZGVsYXkgaXMgY29udHJvbGxlZCBieSB0aGUgXHAgcmVhZF9kZWFseSAoUVNQSUNfUkVTU1RTX0RMWSkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggY291bnRzIG9uIHRoZSBxc3BpIGNsb2NrLAorICogICAgICAgICAgICAgICAgICAgICAgIDEgLSBkZWxheSBpcyBjb250cm9sbGVkIGJ5IHRoZSBccCBtaW5pbXVtX2RlbGF5IHZhbHVlIHBhc3NlZCB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgICBod19xc3BpX3NldF9zdXNwZW5kX3Jlc3VtZV9pbnN0cnVjdGlvbnMgKFFTUElDX1JFU1NVU19ETFkpIHdoaWNoCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cyBvbiB0aGUgMjg4IGtIeiBjbG9jaworICoKKyAqIFxzYSBod19xc3BpX3NldF9zdXNwZW5kX3Jlc3VtZV9pbnN0cnVjdGlvbnMKKyAqIFxzYSBod19xc3BpX2dldF9lcmFzZV9zdGF0dXMKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9yZWFkX3N0YXR1c19pbnN0cnVjdGlvbih1aW50OF90IGluc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgaW5zdF9waGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERSByZWNlaXZlX3BoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJ1c3lfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJ1c3lfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHJlYWRfZGVsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc3RzX2RlbGF5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGUoKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X3JlYWRfc3RhdHVzX2luc3RydWN0aW9uKHVpbnQ4X3QgaW5zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERSBpbnN0X3BoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIHJlY2VpdmVfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnVzeV9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnVzeV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgcmVhZF9kZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzdHNfZGVsYXkpCit7CisgICAgICAgIFFTUElDLT5RU1BJQ19TVEFUVVNDTURfUkVHID0KKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX1NUQVRVU0NNRF9SRUcsIFFTUElDX0JVU1lfVkFMLCBidXN5X3ZhbCkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfU1RBVFVTQ01EX1JFRywgUVNQSUNfQlVTWV9QT1MgLCBidXN5X3BvcykgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfU1RBVFVTQ01EX1JFRywgUVNQSUNfUlNUQVRfUlhfTUQsIHJlY2VpdmVfcGhhc2UpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX1NUQVRVU0NNRF9SRUcsIFFTUElDX1JTVEFUX1RYX01ELCBpbnN0X3BoYXNlKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19TVEFUVVNDTURfUkVHLCBRU1BJQ19SU1RBVF9JTlNULCBpbnN0KSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19TVEFUVVNDTURfUkVHLCBRU1BJQ19TVFNETFlfU0VMLCBzdHNfZGVsYXkpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX1NUQVRVU0NNRF9SRUcsIFFTUElDX1JFU1NUU19ETFksIHJlYWRfZGVsYXkpOworfQorCisvKioKKyAqIFxicmllZiBFcmFzZSBibG9jay9zZWN0b3Igb2YgZmxhc2ggbWVtb3J5CisgKgorICogRm9yIHRoaXMgZnVuY3Rpb24gdG8gd29yaywgZXJhc2UgaW5zdHJ1Y3Rpb25zIG11c3QgYmUgc2V0IHVwCisgKiB3aXRoIGh3X3FzcGlfc2V0X2VyYXNlX2luc3RydWN0aW9uLgorICogVXNlciBzaG91bGQgY2FsbCBod19xc3BpX2dldF9lcmFzZV9zdGF0dXMgdG8gY2hlY2sgaWYgYmxvY2sgZXJhc2VkLgorICoKKyAqIFxub3RlIElmIHVzZXIgZG9lc24ndCBjYWxsIGh3X3FzcGlfZ2V0X2VyYXNlX3N0YXR1cyB0aGF0IHJldHVybnMgc3RhdHVzIDAKKyAqIFFTUEkgY29udHJvbGxlciB3aWxsIG5vdCBiZSBhYmxlIHRvIHN3aXRjaCB0byBtYW51YWwgbW9kZS4KKyAqCisgKiBccGFyYW0gW2luXSBhZGRyIG1lbW9yeSBhZGRyZXNzIG9mIGJsb2NrL3NlY3RvciB0aGF0cyBpcyByZXF1ZXN0ZWQgdG8gYmUgZXJhc2VkCisgKiAgICAgICAgICAgICAgICAgIGZvciAyNCBiaXRzIGFkZHJlc3NpbmcsIGJpdHMgWzIzOjEyXSBkZXRlcm1pbmUgdGhlIGJsb2NrL3NlY3RvcgorICogICAgICAgICAgICAgICAgICBhZGRyZXNzIGJpdHMuIEJpdHMgWzExOjBdIGFyZSBpZ25vcmVkIGJ5IHRoZSBjb250cm9sbGVyLgorICogICAgICAgICAgICAgICAgICBGb3IgMzIgYml0cyBhZGRyZXNzaW5nLCBiaXRzIFszMToxMl0gZGV0ZXJtaW5lIHRoZSBibG9jay9zZWN0b3JzCisgKiAgICAgICAgICAgICAgICAgIGFkZHJlc3MgYml0cy4gQml0cyBbMTE6MF0gYXJlIGlnbm9yZWQgYnkgdGhlIGNvbnRyb2xsZXIKKyAqCisgKiBcc2EgaHdfcXNwaV9zZXRfZXJhc2VfaW5zdHJ1Y3Rpb24KKyAqIFxzYSBod19xc3BpX2dldF9lcmFzZV9zdGF0dXMKKyAqIFxzYSBod19xc3BpX3NldF9hdXRvbW9kZQorICoKKyAqLwordm9pZCBod19xc3BpX2VyYXNlX2Jsb2NrKHVpbnQzMl90IGFkZHIpOworCisvKioKKyAqIFxicmllZiBHZXQgZXJhc2Ugc3RhdHVzCisgKgorICogXHJldHVybiBwcm9ncmVzcyBvZiBzZWN0b3IvYmxvY2sgZXJhc2luZworICogICAgICAgICAwID0gbm8gZXJhc2UsCisgKiAgICAgICAgIDEgPSBwZW5kaW5nIGVyYXNlIHJlcXVlc3QsCisgKiAgICAgICAgIDIgPSBlcmFzZSBwcm9jZWR1cmUgaXMgcnVubmluZywKKyAqICAgICAgICAgMyA9IHN1c3BlbmRlZCBlcmFzZSBwcm9jZWR1cmUsCisgKiAgICAgICAgIDQgPSBmaW5pc2hpbmcgdGhlIGVyYXNlIHByb2NlZHVyZQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfZ2V0X2VyYXNlX3N0YXR1cyh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX2dldF9lcmFzZV9zdGF0dXModm9pZCkKK3sKKyAgICAgICAgUVNQSUMtPlFTUElDX0NIQ0tFUkFTRV9SRUcgPSAwOworICAgICAgICByZXR1cm4gSFdfUVNQSUNfUkVHX0dFVEYoRVJBU0VDVFJMLCBFUlNfU1RBVEUpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgYnVyc3QgYnJlYWsgc2VxdWVuY2UKKyAqCisgKiBccGFyYW0gW2luXSBzZXF1ZW5jZSB2YWx1ZSB3aWxsIGJlIHRyYW5zbWl0dGVkIGFzIHRoZSBidXJzdCBicmVhayBzZXF1ZW5jZQorICogXHBhcmFtIFtpbl0gbW9kZSBtb2RlIG9mIHRoZSBRU1BJIEJ1cyBkdXJpbmcgdGhlIHRyYW5zbWlzc2lvbiBvZiB0aGUgYnVyc3QgYnJlYWsgc2VxdWVuY2UKKyAqIFxwYXJhbSBbaW5dIHNpemUgc2l6ZSBvZiBCdXJzdCBCcmVhayBTZXF1ZW5jZQorICogXHBhcmFtIFtpbl0gZGlzX291dCBkaXNhYmxlIG91dHB1dCBkdXJpbmcgdGhlIHRyYW5zbWlzc2lvbiBvZiB0aGUgc2Vjb25kIGhhbGYgKHNlcXVlbmNlWzM6MF0pLgorICogICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgYml0IGlzIG9ubHkgdXNlZnVsIGlmIHNpemUgPSAxLgorICogICAgICAgICAgICAgICAgICAgICAwIC0gY29udHJvbGxlciBkcml2ZXMgdGhlIFFTUEkgYnVzIGR1cmluZyB0aGUgdHJhbnNtaXNzaW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2VxdWVuY2VbMzowXSwKKyAqICAgICAgICAgICAgICAgICAgICAgMSAtIGNvbnRyb2xsZXIgbGVhdmVzIHRoZSBRU1BJIGJ1cyBpbiBIaS1aIGR1cmluZyB0aGUgdHJhbnNtaXNzaW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2VxdWVuY2VbMzowXQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X2JyZWFrX3NlcXVlbmNlKHVpbnQxNl90IHNlcXVlbmNlLCBIV19RU1BJX0JVU19NT0RFIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JSRUFLX1NFUV9TSVpFIHNpemUsIHVpbnQ4X3QgZGlzX291dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X2JyZWFrX3NlcXVlbmNlKHVpbnQxNl90IHNlcXVlbmNlLCBIV19RU1BJX0JVU19NT0RFIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JSRUFLX1NFUV9TSVpFIHNpemUsIHVpbnQ4X3QgZGlzX291dCkKK3sKKyAgICAgICAgUVNQSUMtPlFTUElDX0JVUlNUQlJLX1JFRyA9CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVEJSS19SRUcsIFFTUElDX1NFQ19IRl9EUywgZGlzX291dCkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RCUktfUkVHLCBRU1BJQ19CUktfU1osIHNpemUpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQlJLX1JFRywgUVNQSUNfQlJLX1RYX01ELCBtb2RlKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVEJSS19SRUcsIFFTUElDX0JSS19FTiwgMSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RCUktfUkVHLCBRU1BJQ19CUktfV1JELCBzZXF1ZW5jZSk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgYnVyc3QgYnJlYWsgc2VxdWVuY2UKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2Rpc2FibGVfYnVyc3RfYnJlYWtfc2VxdWVuY2Uodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9kaXNhYmxlX2J1cnN0X2JyZWFrX3NlcXVlbmNlKHZvaWQpCit7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKEJVUlNUQlJLLCBCUktfRU4sIDApOworfQorCisvKioKKyAqIFxicmllZiBTZXQgY29uZmlndXJhdGlvbiBvZiBRU1BJIHBhZHMKKyAqCisgKiBccGFyYW0gW2luXSByYXRlIFFTUEkgcGFkcyBzbGV3IHJhdGUgY29udHJvbAorICogXHBhcmFtIFtpbl0gY3VycmVudCBRU1BJIHBhZHMgZHJpdmUgY3VycmVudAorICoKKyAqLwordm9pZCBod19xc3BpX3NldF9wYWRzKEhXX1FTUElfU0xFV19SQVRFIHJhdGUsIEhXX1FTUElfRFJJVkVfQ1VSUkVOVCBjdXJyZW50KTsKKworLyoqCisgKiBcYnJpZWYgUVNQSSBjb250cm9sbGVyIGluaXRpYWxpemF0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSBRU1BJIGNvbnRyb2xsZXIgaW4gbWFudWFsIG1vZGUuCisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoYW5nZSBRU1BJX0RJVgorICoKKyAqLwordm9pZCBod19xc3BpX2luaXQoY29uc3QgcXNwaV9jb25maWcgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBRU1BJIGNvbnRyb2xsZXIgY2xvY2sKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2VuYWJsZV9jbG9jayh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2VuYWJsZV9jbG9jayh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgQ1JHX1RPUC0+Q0xLX0FNQkFfUkVHIHw9IDEgPDwgUkVHX1BPUyhDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIFFTUElfRU5BQkxFKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgUVNQSSBjb250cm9sbGVyIGNsb2NrCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9kaXNhYmxlX2Nsb2NrKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfZGlzYWJsZV9jbG9jayh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgQ1JHX1RPUC0+Q0xLX0FNQkFfUkVHICY9IH5SRUdfTVNLKENSR19UT1AsIENMS19BTUJBX1JFRywgUVNQSV9FTkFCTEUpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBRU1BJIGNsb2NrIGRpdmlkZXIKKyAqCisgKiBccGFyYW0gW2luXSBkaXYgUVNQSSBjbG9jayBkaXZpZGVyCisgKgorICogXHNhIEhXX1FTUElfRElWCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9kaXYoSFdfUVNQSV9ESVYgZGl2KSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9kaXYoSFdfUVNQSV9ESVYgZGl2KQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBRU1BJX0RJViwgZGl2KTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgUVNQSSBjbG9jayBkaXZpZGVyCisgKgorICogXHJldHVybiB0aGUgUVNQSSBjbG9jayBkaXZpZGVyIHNldHRpbmcKKyAqCisgKiBcc2EgSFdfUVNQSV9ESVYKKyAqLworc3RhdGljIGlubGluZSBIV19RU1BJX0RJViBod19xc3BpX2dldF9kaXYodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIEhXX1FTUElfRElWIGh3X3FzcGlfZ2V0X2Rpdih2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBRU1BJX0RJVik7Cit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfUVNQSSAqLworCisjZW5kaWYgLyogSFdfUVNQSV9IXyAqLworCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19yZi5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19yZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyOGY0YTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3JmLmgKQEAgLTAsMCArMSwzNzcgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIFJGCisgKiBceworICogXGJyaWVmIFJhZGlvIENvbnRyb2wKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X3JmLmgKKyAqCisgKiBAYnJpZWYgUmFkaW8gbW9kdWxlIChSRikgTG93IExldmVsIERyaXZlciBBUEkuCisgKgorICogQG5vdGUgVGhlIGZvbGxvd2luZyByZWNhbGlicmF0aW9uLXJlbGF0ZWQgd2VhayBmdW5jdGlvbnMgY2FuIGJlIG92ZXJyaWRkZW4sIGlmIG5lZWRlZCwgCisgKiAgICAgICB0byBwcm92aWRlIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eQorICoKKyAqIEBub3RlCisgKiB+fn57LmN9CisgKiBib29sIGh3X3JmX3ByZW9mZl9jYih2b2lkKQorICogfn5+CisgKgorICogQG5vdGUgQ2FsbGVkIGJlZm9yZSBhY3R1YWxseSBzaHV0dGluZyBkb3duIHRoZSBSRiBQRC4gSWYgdGhpcyByZXR1cm5zIHRydWUsIHRoZSBQRAorICogICAgICAgd2lsbCBOT1QgYmUgc2h1dGRvd24sIGJ1dCB3aWxsIHN0YXkgb24uIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZGVjaWRlCisgKiAgICAgICB3aGV0aGVyIGFuIFJGIHJlY2FsaWJyYXRpb24gaXMgbmVlZGVkIGFuZCB0byBzdGFydCB0aGUgcmVzcGVjdGl2ZSBvcGVyYXRpb24uCisgKiAgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAoaWYgYW4gZXhwbGljaXQgaW1wbGVtZW50YXRpb24gaXMgb21pdHRlZCkgcmV0dXJucworICogICAgICAgZmFsc2UgKGkuZS4gdGhlIFJGIFBEIHNodXRzIG9mZiBpbW1lZGlhdGVseSkuCisgKgorICogQG5vdGUgCisgKiB+fn57LmN9CisgKiB2b2lkIGh3X3JmX3Bvc3Rjb25mX2NiKHZvaWQpCisgKiB+fn4KKyAqCisgKiBAbm90ZSBDYWxsZWQgYWZ0ZXIgdGhlIFJGIHJlY29tbWVuZGVkIHNldHRpbmdzIGFyZSBhcHBsaWVkLCBvciBhZnRlciB0aGUKKyAqICAgICAgIHJlY2FsaWJyYXRpb24gcHJvY2VkdXJlIGlzIGNvbXBsZXRlZC4gQ2FuIGJlIHVzZWQgdG8gc3RhcnQvcmVzZXQgYQorICogICAgICAgcmVjYWxpYnJhdGlvbiB0aW1lciwgaW4gY2FzZSBwZXJpb2RpYyByZWNhbGlicmF0aW9uIGlzIGVuYWJsZWQgdXNpbmcKKyAqICAgICAgIGRnX2NvbmZpZ1JGX1JFQ0FMSUJSQVRJT05fVElNRVJfVElNRU9VVAorICoKKyAqIEBub3RlIAorICogfn5+ey5jfQorICogdm9pZCBod19yZl9wcmVjYWxpYl9jYih2b2lkKQorICogdm9pZCBod19yZl9wb3N0Y2FsaWJfY2Iodm9pZCk6CisgKiB+fn4KKyAqCisgKiBAbm90ZSBDYWxsZWQgd2hlbiB0aGUgcmUtY2FsaWJyYXRpb24gKG5vdCB0aGUgaW5pdGlhbCBjYWxpYnJhdGlvbikgcHJvY2VkdXJlCisgKiAgICAgICBzdGFydHMvZW5kcy4gQ2FuIGJlIHVzZWQgdG8gaW5zdHJ1Y3QgdGhlIHN5c3RlbSBub3QgdG8gZ28gdG8gc2xlZXAgZHVyaW5nCisgKiAgICAgICB0aGlzIHRpbWUuCisgKgorICogQG5vdGUKKyAqIH5+fnsuY30KKyAqIHZvaWQgaHdfcmZfYXBwbHlfdGNzX2NiKHZvaWQpCisgKiB+fn4KKyAqCisgKiBAbm90ZSBDYWxsZWQgYmVmb3JlIGFwcGx5aW5nIHRoZSByZiByZWNvbW1lbmRlZCBzZXR0aW5ncy4gVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZAorICogICAgICAgYXBwbHkgdGhlIFRDUyB2YWx1ZXMKKyAqCisgKiBAbm90ZQorICogfn5+ey5jfQorICogdWludDY0X3QgaHdfcmZfZ2V0X3N0YXJ0X2lmZl90aW1lKHZvaWQpCisgKiB+fn4KKyAqCisgKiBAbm90ZSBDYWxsZWQgdG8gZ2V0IHRoZSB0aW1lIHdoZW4gSUZGIGNhbGlicmF0aW9uIHN0YXJ0cworICoKKyAqIEBub3RlCisgKiB+fn57LmN9CisgKiBib29sIGh3X3JmX2NoZWNrX2lmZl90aW1lb3V0KHVpbnQ2NF90IHN0YXJ0X3RpbWUpCisgKiB+fn4KKyAqCisgKiBAbm90ZSBDYWxsZWQgdG8gY2hlY2sgaWYgSUZGIGNhbGlicmF0aW9uIGhhcyB0aW1lZC1vdXQgKGkuZS4gdG9vayB0b28gbG9uZykuIEl0IHRha2VzIGFyZ3VtZW50IHRoZQorICogICAgICAgSUZGIGNhbGliIHN0YXJ0X3RpbWUsIGFzIHJldHVybiBieSBod19yZl9nZXRfc3RhcnRfaWZmX3RpbWUoKS4gSXQgc2hvdWxkIG5vcm1hbGx5IGNoZWNrIGFnYWluc3QKKyAqICAgICAgIGNvbmZpZyBtYWNybyBkZ19jb25maWdSRl9JRkZfQ0FMSUJSQVRJT05fVElNRU9VVC4KKyAqCisgKiBAd2FybmluZyBBbGwgdGhlIGFib3ZlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGluIGEgY3JpdGljYWwgc2VjdGlvbi4gVGhleSBzaG91bGQgbm90IGJsb2NrLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjaWZuZGVmIEhXX1JGX0hfCisjZGVmaW5lIEhXX1JGX0hfCisKKyNpZiBkZ19jb25maWdVU0VfSFdfUkYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlICJzZGtfZGVmcy5oIgorCisjaW5jbHVkZSAiaHdfY3BtLmgiCisKKyNpZiBkZ19jb25maWdGRU0gPT0gRkVNX1NLWTY2MTEyXzExCisjaW5jbHVkZSAiaHdfZmVtX3NreTY2MTEyLTExLmgiCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB7CisgICAgICAgIHVpbnQ4X3QgdHhfcG93ZXJfYmxlOiA0OworICAgICAgICB1aW50OF90IHR4X3Bvd2VyX2Z0ZGY6IDQ7Cit9IGh3X3JmX3R4X3Bvd2VyX2x1dHNfdDsKKworZXh0ZXJuIGh3X3JmX3R4X3Bvd2VyX2x1dHNfdCByZl90eF9wb3dlcl9sdXRzOworCisvKioKKyAqIFxicmllZiBQb3dlciBMVVQgc2V0dGluZworICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfUkZfUFdSX0xVVF8wZGJtID0gMCwgICAvKio8IFRYIFBXUiBhdHRlbnVhdGlvbiAwIGRibSAqLworICAgICAgICBIV19SRl9QV1JfTFVUX20xZGJtID0gMSwgIC8qKjwgVFggUFdSIGF0dGVudWF0aW9uIC0xIGRibSAqLworICAgICAgICBIV19SRl9QV1JfTFVUX20yZGJtID0gMiwgIC8qKjwgVFggUFdSIGF0dGVudWF0aW9uIC0yIGRibSAqLworICAgICAgICBIV19SRl9QV1JfTFVUX20zZGJtID0gMywgIC8qKjwgVFggUFdSIGF0dGVudWF0aW9uIC0zIGRibSAqLworICAgICAgICBIV19SRl9QV1JfTFVUX200ZGJtID0gNCwgIC8qKjwgVFggUFdSIGF0dGVudWF0aW9uIC00IGRibSAqLworfSBIV19SRl9QV1JfTFVUX1NFVFRJTkc7CisKKy8qKgorICogXGJyaWVmIEluaXRpYWxpemVzIFJGIHN5c3RlbSwgYW5kIHBlcmZvcm1zIHRoZSBpbml0aWFsIGNhbGlicmF0aW9uCisgKgorICogXG5vdGUgVGhlIFJGIFBEIG11c3QgYmUgb24gYmVmb3JlIHRoaXMgaXMgY2FsbGVkCisgKgorICogXHJldHVybiBUcnVlLCBpZiBpZmYgY2FsaWIgaXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlCisgKi8KK2Jvb2wgaHdfcmZfc3lzdGVtX2luaXQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFNldHMgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gdGhlaXIgcmVjb21tZW5kZWQgdmFsdWVzLgorICovCit2b2lkIGh3X3JmX3NldF9yZWNvbW1lbmRlZF9zZXR0aW5ncyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgKFJlKWNhbGlicmF0ZXMgUkYgREMgb2Zmc2V0LgorICovCit2b2lkIGh3X3JmX2RjX29mZnNldF9jYWxpYnJhdGlvbih2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgKFJlKWNhbGlicmF0ZXMgbW9kdWxhdGlvbiBnYWluLgorICovCit2b2lkIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbihib29sKTsKKworLyoqCisgKiBcYnJpZWYgQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gKHJlKWNhbGlicmF0ZSBhbGwgUkYgcmVsYXRlZCBtb2R1bGVzLgorICoKKyAqIFxyZXR1cm4gVHJ1ZSBpZiBjYWxpYnJhdGlvbiAoc3BlY2lmaWNhbGx5LCB0aGUgaWZmIGNhbGlicmF0aW9uIHBhcnQpCisgKiAgICAgICAgIHN1Y2NlZWRzLCBmYWxzZSBpZiBub3QKKyAqLworYm9vbCBod19yZl9jYWxpYnJhdGlvbih2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU3RhcnQgQ2FsaWJyYXRpb24gcHJvY2VkdXJlIGFuZCByZXR1cm4uCisgKgorICogVGhpcyB3aWxsIGJsb2NrIGZvciBzb21lIHRpbWUgaW4gb3JkZXIgdG8gcGVyZm9ybQorICogdGhlIGZpcnN0IHBhcnQgb2YgY2FsaWJyYXRpb24gKElGRiwgREMgb2Zmc2V0IGFuZCB0aGUgc3RhcnQgb2YgZ2FpbiBjYWxpYikuCisgKiBJbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBccmV0dXJuIFRydWUgaWYgY2FsaWJyYXRpb24gd2FzIHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIG5vdCAoaS5lLiBpZmYgY2FsaWIgaGFuZykKKyAqCisgKi8KK2Jvb2wgaHdfcmZfc3RhcnRfY2FsaWJyYXRpb24odm9pZCk7CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisvKioKKyAqIFxicmllZiBTZXQgVFggUG93ZXIKKyAqCisgKiBUaGlzIGFjdHVhbGx5IHNldHMgdGhlIGluZGV4IG9mIHRoZSBSRl9UWF9QV0VSX0xVVF9YX1JFRyB0byB1c2UuCisgKgorICogXHBhcmFtIFtpbl0gbHV0IFRoZSBUWCBwb3dlciBhdHRlbnVhdGlvbiBzZXR0aW5nCisgKgorICogXHdhcm5pbmcgRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgcmVjb21tZW5kZWQgc2V0dGluZ3MgYXJlIGFwcGxpZWQKKyAqLwordm9pZCBod19yZl9zZXRfdHhfcG93ZXIoSFdfUkZfUFdSX0xVVF9TRVRUSU5HIGx1dCk7CisjZWxzZQorCisjaWZkZWYgQ09ORklHX1VTRV9CTEUKKy8qKgorICogXGJyaWVmIFNldCBUWCBQb3dlciBmb3IgQkxFCisgKgorICogVGhpcyBhY3R1YWxseSBzZXRzIHRoZSBpbmRleCBvZiB0aGUgUkZfVFhfUFdSX0xVVF9YX1JFRyB0byB1c2UuCisgKgorICogXHBhcmFtIFtpbl0gbHV0IFRoZSBUWCBwb3dlciBhdHRlbnVhdGlvbiBzZXR0aW5nCisgKgorICogXHdhcm5pbmcgRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgcmVjb21tZW5kZWQgc2V0dGluZ3MgYXJlIGFwcGxpZWQKKyAqLwordm9pZCBod19yZl9zZXRfdHhfcG93ZXJfYmxlKEhXX1JGX1BXUl9MVVRfU0VUVElORyBsdXQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKKy8qKgorICogXGJyaWVmIFNldCBUWCBQb3dlciBmb3IgRlRERgorICoKKyAqIFRoaXMgYWN0dWFsbHkgc2V0cyB0aGUgaW5kZXggb2YgdGhlIFJGX1RYX1BXUl9MVVRfWF9SRUcgdG8gdXNlLgorICoKKyAqIFxwYXJhbSBbaW5dIGx1dCBUaGUgVFggcG93ZXIgYXR0ZW51YXRpb24gc2V0dGluZworICoKKyAqIFx3YXJuaW5nIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIHJlY29tbWVuZGVkIHNldHRpbmdzIGFyZSBhcHBsaWVkCisgKi8KK3ZvaWQgaHdfcmZfc2V0X3R4X3Bvd2VyX2Z0ZGYoSFdfUkZfUFdSX0xVVF9TRVRUSU5HIGx1dCk7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgU2V0IFRYIFBvd2VyCisgKgorICogVGhpcyBhY3R1YWxseSBzZXRzIHRoZSBpbmRleCBvZiB0aGUgUkZfVFhfUFdSX0xVVF9YX1JFRyB0byB1c2UuCisgKgorICogXHBhcmFtIFtpbl0gbHV0IFRoZSBUWCBwb3dlciBhdHRlbnVhdGlvbiBzZXR0aW5nCisgKgorICogXGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIGl0IGNhbiBvbmx5IHNldAorICogIEJMRSBhbmQgRlRERiBUWCBwb3dlciB3aXRoIHRoZSBzYW1lIHZhbHVlLiBVc2UgaHdfcmZfc2V0X3R4X3Bvd2VyX2JsZSgpCisgKiAgYW5kIGh3X3JmX3NldF90eF9wb3dlcl9mdGRmKCkgaW5zdGVhZC4KKyAqCisgKiBcd2FybmluZyBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSByZWNvbW1lbmRlZCBzZXR0aW5ncyBhcmUgYXBwbGllZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcmZfc2V0X3R4X3Bvd2VyKEhXX1JGX1BXUl9MVVRfU0VUVElORyBsdXQpCit7CisjaWZkZWYgQ09ORklHX1VTRV9CTEUKKyAgICAgICAgaHdfcmZfc2V0X3R4X3Bvd2VyX2JsZShsdXQpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTRV9GVERGCisgICAgICAgIGh3X3JmX3NldF90eF9wb3dlcl9mdGRmKGx1dCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBUdXJucyBvbiBSRiBtb2R1bGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZl9wb3dlcm9uKHZvaWQpICBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZl9wb3dlcm9uKHZvaWQpCit7CisgICAgICAgIGlmICgoZGdfY29uZmlnVVNFX0JPRCA9PSAxKSAmJiAoKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpCisgICAgICAgICAgICAgICAgfHwgKChkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiA9PSAxKSAmJiAoQ0hJUF9JU19BRSkpKSkgeworICAgICAgICAgICAgICAgIGh3X2NwbV9kZWFjdGl2YXRlX2JvZF9wcm90ZWN0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICAvKiBJZiBQRF9SQUQgaXMgdXAsIG1ha2Ugc3VyZSB0byBwb3dlciBpdCBkb3duIHRvIGlzc3VlIGEgcmVzZXQgKi8KKyAgICAgICAgaWYgKFJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgUkFEX0lTX1VQKSkgeworICAgICAgICAgICAgICAgIGlmICgoZGdfY29uZmlnVVNFX0JPRCA9PSAxKSAmJiAoKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OID09IDEpICYmIChDSElQX0lTX0FFKSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBod19jcG1fZGVsYXlfdXNlYygzMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICAgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIFBNVV9DVFJMX1JFRywgUkFESU9fU0xFRVApOworICAgICAgICAgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworICAgICAgICAgICAgICAgIHdoaWxlIChSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFJBRF9JU19ET1dOKSA9PSAweDApOworICAgICAgICB9CisKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIFBNVV9DVFJMX1JFRywgUkFESU9fU0xFRVApOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyAgICAgICAgd2hpbGUgKCFSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFJBRF9JU19VUCkpOworCisgICAgICAgIGlmICgoZGdfY29uZmlnVVNFX0JPRCA9PSAxKSAmJiAoKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpCisgICAgICAgICAgICAgICAgfHwgKChkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiA9PSAxKSAmJiAoQ0hJUF9JU19BRSkpKSkgeworICAgICAgICAgICAgICAgIGh3X2NwbV9kZWxheV91c2VjKDMwKTsKKyAgICAgICAgICAgICAgICBod19jcG1fYWN0aXZhdGVfYm9kX3Byb3RlY3Rpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEVuYWJsZSB0aGUgUExMZGlnL1JGQ1UgY2xvY2sKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIENMS19SQURJT19SRUcsIFJGQ1VfRU5BQkxFKTsKKyAgICAgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQ0xLX1JBRElPX1JFRywgUkZDVV9ESVYsIDEpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKworI2lmIGRnX2NvbmZpZ0ZFTSA9PSBGRU1fU0tZNjYxMTJfMTEKKyAgICAgICAgaHdfZmVtX3N0YXJ0KCk7CisjZW5kaWYKK30KKworLyoqCisgKiBcYnJpZWYgVHVybnMgb2ZmIFJGIG1vZHVsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3JmX3Bvd2Vyb2ZmKCkKK3sKKyNpZiBkZ19jb25maWdGRU0gPT0gRkVNX1NLWTY2MTEyXzExCisgICAgICAgIGh3X2ZlbV9zdG9wKCk7CisjZW5kaWYKKworICAgICAgICBpZiAoKGRnX2NvbmZpZ1VTRV9CT0QgPT0gMSkgJiYgKChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BKQorICAgICAgICAgICAgICAgIHx8ICgoZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gPT0gMSkgJiYgKENISVBfSVNfQUUpKSkpIHsKKyAgICAgICAgICAgICAgICBod19jcG1fZGVhY3RpdmF0ZV9ib2RfcHJvdGVjdGlvbigpOworICAgICAgICAgICAgICAgIGh3X2NwbV9kZWxheV91c2VjKDMwKTsKKyAgICAgICAgfQorCisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFJBRElPX1NMRUVQKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisgICAgICAgIHdoaWxlICghUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBSQURfSVNfRE9XTikpOworCisgICAgICAgIGlmICgoZGdfY29uZmlnVVNFX0JPRCA9PSAxKSAmJiAoKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpCisgICAgICAgICAgICAgICAgfHwgKChkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiA9PSAxKSAmJiAoQ0hJUF9JU19BRSkpKSkgeworICAgICAgICAgICAgICAgIGh3X2NwbV9kZWxheV91c2VjKDMwKTsKKyAgICAgICAgICAgICAgICBod19jcG1fYWN0aXZhdGVfYm9kX3Byb3RlY3Rpb24oKTsKKyAgICAgICAgfQorfQorCisvKioKKyAqIFxicmllZiBTZXRzIHBhcmFtZXRlcnMgYWNjb3JkaW5nIHRvIHRoZWlyIHJlY29tbWVuZGVkIHZhbHVlcywgdGFraW5nIFJGIHN0YXRlIGludG8gYWNjb3VudC4KKyAqCisgKiBBY3RzIGxpa2UgXHJlZiBod19yZl9zZXRfcmVjb21tZW5kZWRfc2V0dGluZ3MgYnV0IG1ha2VzIHN1cmUgdGhhdCB0aGUgUkYgcG93ZXIgZG9tYWluIGlzIG9uIGFuZAorICogdW5jb25maWd1cmVkLgorICogSW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkIGJ5IHRoZSBjYWxsZXIuCisgKgorICovCit2b2lkIGh3X3JmX3JlcXVlc3RfcmVjb21tZW5kZWRfc2V0dGluZ3Modm9pZCk7CisKKy8qKgorICogXGJyaWVmIFJlcXVlc3RzIHRoYXQgdGhlIFJGIGlzIHR1cm5lZCBvbgorICoKKyAqIFJlcXVlc3RzIHRoYXQgdGhlIFJGIGlzIHR1cm5lZCBvbiwgaWYgbm90IGFscmVhZHkgb24uCisgKiBJbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBccGFyYW0gW2luXSBtb2RlX2JsZSBUcnVlLCBpZiB0aGUgcmYgaXMgbmVlZGVkIGZvciBibGUKKyAqLworX19SRVRBSU5FRF9DT0RFIHZvaWQgaHdfcmZfcmVxdWVzdF9vbihib29sIG1vZGVfYmxlKTsKKworLyoqCisgKiBcYnJpZWYgUmVxdWVzdHMgdGhhdCB0aGUgUkYgaXMgdHVybmVkIG9mZgorICoKKyAqIFJlcXVlc3RzIHRoYXQgdGhlIFJGIGlzIHR1cm5lZCBvZmYsIGlmIG5vdCBhbHJlYWR5IG9mZi4KKyAqIFRoZSBSRiB3aWxsIGJlIHR1cm5lZCBvZmYgb25seSBpZiB0aGVyZSBhcmUgbm8gbW9yZQorICogcmVxdWVzdHMgKGllLiBhbGwgcmVxdWVzdGVycyBoYXZlIGNhbGxlZCBod19yZl9yZXF1ZXN0X29mZigpKQorICogSW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkIGJ5IHRoZSBjYWxsZXIuCisgKgorICogXHBhcmFtIFtpbl0gbW9kZV9ibGUgVHJ1ZSwgaWYgdGhlIHJmIHdhcyBuZWVkZWQgZm9yIGJsZQorICovCit2b2lkIGh3X3JmX3JlcXVlc3Rfb2ZmKGJvb2wgbW9kZV9ibGUpOworCisvKioKKyAqIFxicmllZiBTdGFydCB0cmFuc21pdHRpbmcgYSBjb250aW51b3VzIHdhdmUgKHVubW9kdWxhdGVkIHRyYW5zbWlzc2lvbikKKyAqCisgKiBccGFyYW0gW2luXSBtb2RlIGlzIHRoZSBtb2RlIHRvIHVzZS4gMTogQkxFLCAyIG9yIDM6IEZUREYgKDA6IE5vcm1hbCwgdXNlIGh3X3JmX3N0b3BfKikKKyAqCisgKiBccGFyYW0gW2luXSBjaCBpcyB0aGUgQ2hhbm5lbCB0byB0cmFuc21pdCBvbiwgY2FsY3VsYXRlZCBhczoKKyAqICAgICAgICAgICAgIChtb2RlIGlzIEJMRSkgIGNoID0gKEYg4oCTIDI0MDIpIC8gMiwgd2hlcmUgRiByYW5nZXMgZnJvbSAyNDAyIE1IeiB0byAyNDgwIE1Iei4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlOiAweDAwIOKAkyAweDI3LgorICogICAgICAgICAgICAgKG1vZGUgaXMgRlRERikgY2ggPSAoRiDigJMgMjQwNSkgLyA1LCB3aGVyZSBGIHJhbmdlcyBmcm9tIDI0MDUgTUh6IHRvIDI0ODAgTUh6LgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZ2U6IDB4MDAg4oCTIDB4Zi4KKyAqLwordm9pZCBod19yZl9zdGFydF9jb250aW51b3VzX3dhdmUodWludDhfdCBtb2RlLCB1aW50OF90IGNoKTsKKworLyoqCisgKiBcYnJpZWYgU3RvcCB0cmFuc21pdHRpbmcgYSBjb250aW51b3VzIHdhdmUgKHVubW9kdWxhdGVkIHRyYW5zbWlzc2lvbikKKyAqCisgKi8KK3ZvaWQgaHdfcmZfc3RvcF9jb250aW51b3VzX3dhdmUodm9pZCk7CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfUkYgKi8KKworI2VuZGlmIC8qIEhXX1JGX0hfICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3RpbWVyMC5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od190aW1lcjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWRjMjNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od190aW1lcjAuaApAQCAtMCwwICsxLDM4NSBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgVGltZXIwCisgKiBceworICogXGJyaWVmIFRpbWVyMCAKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X3RpbWVyMC5oCisgKgorICogQGJyaWVmIERlZmluaXRpb24gb2YgQVBJIGZvciB0aGUgVGltZXIwIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBIV19USU1FUjBfSF8KKyNkZWZpbmUgSFdfVElNRVIwX0hfCisKKyNpZiBkZ19jb25maWdVU0VfSFdfVElNRVIwCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIG1hc2sgb2YgYSBmaWVsZCBvZiBhbiBUSU1FUjAgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqCisgKi8KKyNkZWZpbmUgSFdfVElNRVIwX1JFR19GSUVMRF9NQVNLKHJlZywgZmllbGQpIFwKKyAgICAgICAgKEdQX1RJTUVSU19USU1FUjBfIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBiaXQgcG9zaXRpb24gb2YgYSBmaWVsZCBvZiBhbiBUSU1FUjAgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqCisgKi8KKyNkZWZpbmUgSFdfVElNRVIwX1JFR19GSUVMRF9QT1MocmVnLCBmaWVsZCkgXAorICAgICAgICAoR1BfVElNRVJTX1RJTUVSMF8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfUG9zKQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQgb2YgYW4gVElNRVIwIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gd3JpdGUKKyAqCisgKiBccmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZmllbGQKKyAqCisgKi8KKyNkZWZpbmUgSFdfVElNRVIwX1JFR19HRVRGKHJlZywgZmllbGQpIFwKKyAgICAgICAgKChHUF9USU1FUlMtPlRJTUVSMF8jI3JlZyMjX1JFRyAmIChHUF9USU1FUlNfVElNRVIwXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Nc2spKSA+PiAoR1BfVElNRVJTX1RJTUVSMF8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfUG9zKSkKKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkIG9mIGFuIFRJTUVSMCByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIHdyaXRlCisgKiBccGFyYW0gW2luXSBuZXdfdmFsIGlzIHRoZSB2YWx1ZSB0byB3cml0ZQorICoKKyAqLworI2RlZmluZSBIV19USU1FUjBfUkVHX1NFVEYocmVnLCBmaWVsZCwgbmV3X3ZhbCkgXAorICAgICAgICBHUF9USU1FUlMtPlRJTUVSMF8jI3JlZyMjX1JFRyA9ICgoR1BfVElNRVJTLT5USU1FUjBfIyNyZWcjI19SRUcgJiB+KEdQX1RJTUVSU19USU1FUjBfIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykpIHwgXAorICAgICAgICAoKEdQX1RJTUVSU19USU1FUjBfIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykgJiAoKG5ld192YWwpIDw8IChHUF9USU1FUlNfVElNRVIwXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Qb3MpKSkpCisKKworLyoqCisgKiBcYnJpZWYgQ2xvY2sgc291cmNlIGZvciB0aW1lcgorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfVElNRVIwX0NMS19TUkNfU0xPVyA9IDAsICAgICAgICAvKio8IDMya0h6IChzbG93KSBjbG9jayAqLworICAgICAgICBIV19USU1FUjBfQ0xLX1NSQ19GQVNUID0gMSAgICAgICAgIC8qKjwgMi80LzgvMTZNSHogKGZhc3QpIGNsb2NrICovCit9IEhXX1RJTUVSMF9DTEtfU1JDOworCisvKioKKyAqIFxicmllZiBGYXN0IGNsb2NrIGRpdmlzaW9uIGZhY3RvcgorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfVElNRVIwX0ZBU1RfQ0xLX0RJVl8xID0gMCwgICAgICAvKio8IGRpdmlkZSBieSAxICovCisgICAgICAgIEhXX1RJTUVSMF9GQVNUX0NMS19ESVZfMiwgICAgICAgICAgLyoqPCBkaXZpZGUgYnkgMiAqLworICAgICAgICBIV19USU1FUjBfRkFTVF9DTEtfRElWXzQsICAgICAgICAgIC8qKjwgZGl2aWRlIGJ5IDQgKi8KKyAgICAgICAgSFdfVElNRVIwX0ZBU1RfQ0xLX0RJVl84LCAgICAgICAgICAvKio8IGRpdmlkZSBieSA4ICovCit9IEhXX1RJTUVSMF9GQVNUX0NMS19ESVY7CisKKy8qKgorICogXGJyaWVmIFBXTSBtb2RlCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19USU1FUjBfTU9ERV9QV00gPSAwLCAgICAgICAgICAgIC8qKjwgUFdNIHNpZ25hbCBpcyAnMScgZHVyaW5nIGhpZ2ggc3RhdGUgKi8KKyAgICAgICAgSFdfVElNRVIwX01PREVfQ0xPQ0sgPSAxICAgICAgICAgICAvKio8IFBXTSBzaWduYWwgaXMgY2xvY2sgZGl2aWRlZCBieSAyIGR1cmluZyBoaWdoIHN0YXRlICovCit9IEhXX1RJTUVSMF9NT0RFOworCisvKioKKyAqIFxicmllZiBUaW1lciBpbnRlcnJ1cHQgY2FsbGJhY2sKKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKmh3X3RpbWVyMF9pbnRlcnJ1cHRfY2IpKHZvaWQpOworCisvKgorICogXGJyaWVmIFRpbWVyIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgSFdfVElNRVIwX0NMS19TUkMgICAgICAgY2xrX3NyYzsgICAgICAgIC8qKjwgY2xvY2sgc291cmNlICovCisgICAgICAgIEhXX1RJTUVSMF9GQVNUX0NMS19ESVYgIGZhc3RfY2xrX2RpdjsgICAvKio8IGNsb2NrIGRpdmlzaW9uIGZhY3RvciAob25seSBhcHBsaWNhYmxlIHdoZW4gZmFzdCBjbG9jayBpcyBzZWxlY3RlZCBhcyBzb3VyY2UpICovCisgICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIG9uX2Nsb2NrX2RpdjsgICAvKio8IGVuYWJsZSBPTi1jb3VudGVyIGNsb2NrIGRpdmlkZXIgKGNsb2NrIGZvciBPTi1jb3VudGVyIGlzIGRpdmlkZWQgYnkgMTApICovCisgICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgIG9uX3JlbG9hZDsgICAgICAvKio8IHJlbG9hZCB2YWx1ZSBmb3IgT04tY291bnRlciAqLworICAgICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICB0MF9yZWxvYWRfbTsgICAgLyoqPCByZWxvYWQgdmFsdWUgZm9yIFQwLWNvdW50ZXIgTS1yZWdpc3RlciAqLworICAgICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICB0MF9yZWxvYWRfbjsgICAgLyoqPCByZWxvYWQgdmFsdWUgZm9yIFQwLWNvdW50ZXIgTi1yZWdpc3RlciAqLworfSB0aW1lcjBfY29uZmlnOworCisvKioKKyAqIFxicmllZiBJbml0aWFsaXplIHRoZSB0aW1lcgorICoKKyAqIFR1cm4gb24gY2xvY2sgZm9yIHRpbWVyIGFuZCBjb25maWd1cmUgdGltZXIuIEFmdGVyIGluaXRpYWxpemF0aW9uIGJvdGggdGltZXIgYW5kIGl0cyBpbnRlcnJ1cHQKKyAqIGFyZSBkaXNhYmxlZC4gXHAgY2ZnIGNhbiBiZSBOVUxMIC0gbm8gY29uZmlndXJhdGlvbiBpcyBwZXJmb3JtZWQgaW4gc3VjaCBjYXNlLgorICoKKyAqIFxwYXJhbSBbaW5dIGNmZyBjb25maWd1cmF0aW9uCisgKgorICovCit2b2lkIGh3X3RpbWVyMF9pbml0KGNvbnN0IHRpbWVyMF9jb25maWcgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIFRpbWVyIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBTaG9ydGN1dCB0byBjYWxsIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uIElmIFxwIGNmZyBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIGRvZXMKKyAqIG5vdGhpbmcuCisgKgorICogXHBhcmFtIFtpbl0gY2ZnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3ZvaWQgaHdfdGltZXIwX2NvbmZpZ3VyZShjb25zdCB0aW1lcjBfY29uZmlnICpjZmcpOworCisvKioKKyAqIFxicmllZiBSZWdpc3RlciBhbiBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqIFxwYXJhbSBbaW5dIGhhbmRsZXIgRnVuY3Rpb24gcG9pbnRlciB0byBjYWxsIHdoZW4gdGltZXIgaW50ZXJydXB0IG9jY3VycworICoKKyAqLwordm9pZCBod190aW1lcjBfcmVnaXN0ZXJfaW50KGh3X3RpbWVyMF9pbnRlcnJ1cHRfY2IgaGFuZGxlcik7CisKKy8qKgorICogXGJyaWVmIFVucmVnaXN0ZXIgYW4gaW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKi8KK3ZvaWQgaHdfdGltZXIwX3VucmVnaXN0ZXJfaW50KHZvaWQpOworCisvKioKKyAqIFxicmllZiBFbmFibGUgdGhlIHRpbWVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIwX2VuYWJsZSh2b2lkKQoreworICAgICAgICBIV19USU1FUjBfUkVHX1NFVEYoQ1RSTCwgVElNMF9DVFJMLCAxKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSB0aGUgdGltZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjBfZGlzYWJsZSh2b2lkKQoreworICAgICAgICBIV19USU1FUjBfUkVHX1NFVEYoQ1RSTCwgVElNMF9DVFJMLCAwKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IGNsb2NrIHNvdXJjZSBmb3IgdGltZXIKKyAqCisgKiBccGFyYW0gW2luXSBjbGtfc3JjIGNsb2NrIHNvdXJjZQorICoKKyAqIFxzYSBUSU1FUjBfQ0xLX1NSQworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMF9zZXRfY2xvY2tfc291cmNlKEhXX1RJTUVSMF9DTEtfU1JDIGNsa19zcmMpCit7CisgICAgICAgIEhXX1RJTUVSMF9SRUdfU0VURihDVFJMLCBUSU0wX0NMS19TRUwsIGNsa19zcmMpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBjbG9jayBzb3VyY2UgZm9yIHRpbWVyCisgKgorICogXHJldHVybiBjbG9jayBzb3VyY2UKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgSFdfVElNRVIwX0NMS19TUkMgaHdfdGltZXIwX2dldF9jbG9ja19zb3VyY2Uodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1RJTUVSMF9SRUdfR0VURihDVFJMLCBUSU0wX0NMS19TRUwpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgZmFzdCBjbG9jayBkaXZpc2lvbiBmYWN0b3IKKyAqCisgKiBccGFyYW0gW2luXSBkaXYgZGl2aXNpb24gZmFjdG9yCisgKgorICogXHNhIFRJTUVSMF9GQVNUX0NMS19ESVYKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjBfc2V0X2Zhc3RfY2xvY2tfZGl2KEhXX1RJTUVSMF9GQVNUX0NMS19ESVYgZGl2KQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQ0xLX1RNUl9SRUcsIFRNUjBfRElWLCBkaXYpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGN1cnJlbnQgZmFzdCBjbG9jayBkaXZpc2lvbiBmYWN0b3IKKyAqCisgKiBccmV0dXJuIGRpdmlzaW9uIGZhY3RvcgorICoKKyAqLworc3RhdGljIGlubGluZSBIV19USU1FUjBfRkFTVF9DTEtfRElWICBod190aW1lcjBfZ2V0X2Zhc3RfY2xvY2tfZGl2KHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMF9ESVYpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgc3RhdGUgb2YgY2xvY2sgZGl2aWRlciBmb3IgT04tY291bnRlcgorICoKKyAqIE9uY2UgZW5hYmxlZCwgT04tY291bnRlciBjbG9jayB3aWxsIGJlIGRpdmlkZWQgYnkgMTAuCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlZCBjbG9jayBkaXZpZGVyIHN0YXR1cworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMF9zZXRfb25fY2xvY2tfZGl2KGJvb2wgZW5hYmxlZCkKK3sKKyAgICAgICAgSFdfVElNRVIwX1JFR19TRVRGKENUUkwsIFRJTTBfQ0xLX0RJViwgIWVuYWJsZWQpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBzdGF0ZSBvZiBjbG9jayBkaXZpZGVyIGZvciBPTi1jb3VudGVyCisgKgorICogXHJldHVybiBjbG9jayBkaXZpZGVyIHN0YXR1cworICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3RpbWVyMF9nZXRfb25fY2xvY2tfZGl2KHZvaWQpCit7CisgICAgICAgIHJldHVybiAhSFdfVElNRVIwX1JFR19HRVRGKENUUkwsIFRJTTBfQ0xLX0RJVik7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBQV00gbW9kZSBmb3IgdGltZXIKKyAqCisgKiBccGFyYW0gW2luXSBtb2RlIFBXTSBtb2RlCisgKgorICogXHNhIFRJTUVSMF9NT0RFCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIwX3NldF9wd21fbW9kZShIV19USU1FUjBfTU9ERSBtb2RlKQoreworICAgICAgICBIV19USU1FUjBfUkVHX1NFVEYoQ1RSTCwgUFdNX01PREUsIG1vZGUpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBQV00gbW9kZSBmb3IgdGltZXIKKyAqCisgKiBccmV0dXJuIFBXTSBtb2RlCisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX1RJTUVSMF9NT0RFIGh3X3RpbWVyMF9nZXRfcHdtX21vZGUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1RJTUVSMF9SRUdfR0VURihDVFJMLCBQV01fTU9ERSk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCByZWxvYWQgdmFsdWUgZm9yIFQwLWNvdW50ZXIKKyAqCisgKiBUMCBjb3VudGVyIHZhbHVlIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggY2xvY2sgY3ljbGUuIEF0IHRoZSBiZWdpbm5pbmcgaXQncyBsb2FkZWQgZnJvbSBNLXJlZ2lzdGVyCisgKiBhbmQgdGhlbiwgb25jZSByZWFjaGVkIHplcm8sIGxvYWRlZCBmcm9tIE4tcmVnaXN0ZXIgKGFuZCB0aGVuIE0gYW5kIE4gYWdhaW4pLgorICoKKyAqIFBXTTAgaXMgaGlnaCB3aGVuIGNvdW50aW5nIGRvd24gTS1yZWdpc3RlciBhbmQgbG93IHdoZW4gY291bnRpbmcgZG93biBOLXJlZ2lzdGVyLgorICogRm9yIFBXTTEgaXMgdGhlIG9wcG9zaXRlLgorICoKKyAqIFxwYXJhbSBbaW5dIG1fdmFsdWUgTS1yZWdpc3RlciByZWxvYWQgdmFsdWUKKyAqIFxwYXJhbSBbaW5dIG5fdmFsdWUgTi1yZWdpc3RlciByZWxvYWQgdmFsdWUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjBfc2V0X3QwX3JlbG9hZCh1aW50MTZfdCBtX3ZhbHVlLCB1aW50MTZfdCBuX3ZhbHVlKQoreworICAgICAgICBHUF9USU1FUlMtPlRJTUVSMF9SRUxPQURfTV9SRUcgPSBtX3ZhbHVlOworICAgICAgICBHUF9USU1FUlMtPlRJTUVSMF9SRUxPQURfTl9SRUcgPSBuX3ZhbHVlOworfQorCisvKioKKyAqIFxicmllZiBTZXQgcmVsb2FkIHZhbHVlIGZvciBPTi1jb3VudGVyCisgKgorICogT04gY291bnRlciB2YWx1ZSBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGNsb2NrIGN5Y2xlLiBPbmNlIE9OIHJlYWNoZXMgemVybyBpdCB3aWxsIHJlbWFpbiB6ZXJvCisgKiB1bnRpbCBUMCBjb3VudGVyIGNvbXBsZXRlcyBkZWNyZW1lbnRpbmcgTi1yZWdpc3RlciB2YWx1ZS4gV2hlbiB0aGlzIGhhcHBlbnMsIGludGVycnVwdCBpcworICogZ2VuZXJhdGVkLgorICoKKyAqIFxwYXJhbSBbaW5dIHZhbHVlIHJlbG9hZCB2YWx1ZQorICoKKyAqIFxzYSBod190aW1lcjBfc2V0X29uX2Nsb2NrX2RpdgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMF9zZXRfb25fcmVsb2FkKHVpbnQxNl90IHZhbHVlKQoreworICAgICAgICBHUF9USU1FUlMtPlRJTUVSMF9PTl9SRUcgPSB2YWx1ZTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IFQwLWNvdW50ZXIgdmFsdWUKKyAqCisgKiBccmV0dXJuIGNvdW50ZXIgdmFsdWUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgaHdfdGltZXIwX2dldF90MCh2b2lkKQoreworICAgICAgICByZXR1cm4gKEdQX1RJTUVSUy0+VElNRVIwX1JFTE9BRF9NX1JFRyk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBPTi1jb3VudGVyIHZhbHVlCisgKgorICogXHJldHVybiBjb3VudGVyIHZhbHVlCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGh3X3RpbWVyMF9nZXRfb24odm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIChHUF9USU1FUlMtPlRJTUVSMF9PTl9SRUcpOworfQorCisvKioKKyAqIFxicmllZiBGcmVlemUgdGltZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjBfZnJlZXplKHZvaWQpCit7CisgICAgICAgIEdQUkVHLT5TRVRfRlJFRVpFX1JFRyA9IEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTBfTXNrOworfQorCisvKioKKyAqIFxicmllZiBVbmZyZWV6ZSB0aW1lcgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMF91bmZyZWV6ZSh2b2lkKQoreworICAgICAgICBHUFJFRy0+UkVTRVRfRlJFRVpFX1JFRyA9IEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTBfTXNrOworfQorCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX1RJTUVSMCAqLworCisjZW5kaWYgLyogSFdfVElNRVIwX0hfICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3RpbWVyMS5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od190aW1lcjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTU2YmFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od190aW1lcjEuaApAQCAtMCwwICsxLDEwNTIgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIFRpbWVyMQorICogXHsKKyAqIFxicmllZiBUaW1lcjEKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X3RpbWVyMS5oCisgKgorICogQGJyaWVmIERlZmluaXRpb24gb2YgQVBJIGZvciB0aGUgVGltZXIxIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBIV19USU1FUjFfSF8KKyNkZWZpbmUgSFdfVElNRVIxX0hfCisKKyNpZiBkZ19jb25maWdVU0VfSFdfVElNRVIxCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIG1hc2sgb2YgYSBmaWVsZCBvZiBhbiBUSU1FUjEgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqCisgKi8KKyNkZWZpbmUgSFdfVElNRVIxX1JFR19GSUVMRF9NQVNLKHJlZywgZmllbGQpIFwKKyAgICAgICAgKFRJTUVSMV9DQVBUSU1fIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBiaXQgcG9zaXRpb24gb2YgYSBmaWVsZCBvZiBhbiBUSU1FUjEgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqCisgKi8KKyNkZWZpbmUgSFdfVElNRVIxX1JFR19GSUVMRF9QT1MocmVnLCBmaWVsZCkgXAorICAgICAgICAoVElNRVIxX0NBUFRJTV8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfUG9zKQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQgb2YgYW4gVElNRVIxIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gd3JpdGUKKyAqCisgKiBccmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZmllbGQKKyAqCisgKi8KKyNkZWZpbmUgSFdfVElNRVIxX1JFR19HRVRGKHJlZywgZmllbGQpIFwKKyAgICAgICAgKChUSU1FUjEtPkNBUFRJTV8jI3JlZyMjX1JFRyAmIChUSU1FUjFfQ0FQVElNXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Nc2spKSA+PiAoVElNRVIxX0NBUFRJTV8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfUG9zKSkKKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkIG9mIGFuIFRJTUVSMSByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIHdyaXRlCisgKiBccGFyYW0gW2luXSBuZXdfdmFsIGlzIHRoZSB2YWx1ZSB0byB3cml0ZQorICoKKyAqLworI2RlZmluZSBIV19USU1FUjFfUkVHX1NFVEYocmVnLCBmaWVsZCwgbmV3X3ZhbCkgXAorICAgICAgICBUSU1FUjEtPkNBUFRJTV8jI3JlZyMjX1JFRyA9ICgoVElNRVIxLT5DQVBUSU1fIyNyZWcjI19SRUcgJiB+KFRJTUVSMV9DQVBUSU1fIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykpIHwgXAorICAgICAgICAoKFRJTUVSMV9DQVBUSU1fIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykgJiAoKG5ld192YWwpIDw8IChUSU1FUjFfQ0FQVElNXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Qb3MpKSkpCisKKworI2RlZmluZSBFWFRfQ0xLICAgIDE2ICAgIC8vIDE2IE1IegorI2RlZmluZSBJTlRfQ0xLICAgIDMyICAgIC8vIDMyIGtIegorCisvKioKKyAqIFxicmllZiBNb2RlIG9mIG9wZXJhdGlvbgorICoKKyAqIFBXTSBpcyBlbmFibGVkIGluIGJvdGggbW9kZXMuCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19USU1FUjFfTU9ERV9USU1FUiA9IDAsICAgICAgIC8qKjwgdGltZXIvY2FwdHVyZSBtb2RlICovCisgICAgICAgIEhXX1RJTUVSMV9NT0RFX09ORVNIT1QgPSAxICAgICAgLyoqPCBvbmUtc2hvdCBtb2RlICovCit9IEhXX1RJTUVSMV9NT0RFOworCisvKioKKyAqIFxicmllZiBDbG9jayBzb3VyY2UgZm9yIHRpbWVyCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19USU1FUjFfQ0xLX1NSQ19JTlQgPSAwLCAgICAgIC8qKjwgSW50ZXJuYWwgY2xvY2sgMzIga0h6IChzbG93KSAqLworICAgICAgICBIV19USU1FUjFfQ0xLX1NSQ19FWFQgPSAxICAgICAgIC8qKjwgRXh0ZXJuYWwgY2xvY2sgMi80LzgvMTYgTUh6IChmYXN0KSAqLworfSBIV19USU1FUjFfQ0xLX1NSQzsKKworLyoqCisgKiBcYnJpZWYgQ291bnRpbmcgZGlyZWN0aW9uCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19USU1FUjFfRElSX1VQID0gMCwgICAgICAgICAgIC8qKjwgVGltZXIgY291bnRzIHVwIChjb3VudGVyIGlzIGluY3JlbWVudGVkKSAqLworICAgICAgICBIV19USU1FUjFfRElSX0RPV04gPSAxICAgICAgICAgIC8qKjwgVGltZXIgY291bnRzIGRvd24gKGNvdW50ZXIgaXMgZGVjcmVtZW50ZWQpICovCit9IEhXX1RJTUVSMV9ESVI7CisKKy8qKgorICogXGJyaWVmIFR5cGUgb2YgdHJpZ2dlcmluZyBldmVudHMKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1RJTUVSMV9UUklHR0VSX1JJU0lORyA9IDAsICAgLyoqPCBFdmVudCBhY3RpdmF0ZWQgcmlzaW5nIGVkZ2UgKi8KKyAgICAgICAgSFdfVElNRVIxX1RSSUdHRVJfRkFMTElORyA9IDEgICAvKio8IEV2ZW50IGFjdGl2YXRlZCBmYWxsaW5nIGVkZ2UgKi8KK30gSFdfVElNRVIxX1RSSUdHRVI7CisKKy8qKgorICogXGJyaWVmIE9uZSBzaG90IG1vZGUgcGhhc2VzCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19USU1FUjFfT05FU0hPVF9XQUlUID0gMCwgICAgIC8qKjwgV2FpdCBmb3IgdGhlIGV2ZW50ICovCisgICAgICAgIEhXX1RJTUVSMV9PTkVTSE9UX0RFTEFZID0gMSwgICAgLyoqPCBEZWxheSBiZWZvcmUgc3RhcnRlZCAqLworICAgICAgICBIV19USU1FUjFfT05FU0hPVF9TVEFSVEVEID0gMiwgIC8qKjwgU3RhcnQgc2hvdCAqLworICAgICAgICBIV19USU1FUjFfT05FU0hPVF9BQ1RJVkUgPSAzICAgIC8qKjwgU2hvdCBpcyBhY3RpdmUgKi8KK30gSFdfVElNRVIxX09ORVNIT1Q7CisKKy8qKgorICogXGJyaWVmIEdQSU9zIGZvciB0aW1lcjEKKyAqCisgKiBNYWlubHkgdXNlIGZvciBtYXJrIHdoaWNoIEdQSU8gd2lsbCB0cmlnZ2VycyB0aW1lciBjb3VudGluZy4KKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1RJTUVSMV9HUElPX05PTkUgPSAwLCAgICAgICAgLyoqPCBOb25lIG9mIEdQSU8gKi8KKyAgICAgICAgLyogcG9ydCAwICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AwMCA9IDEsICAgICAgICAgLyoqPCBQb3J0IDAsIHBpbiAwICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AwMSA9IDIsICAgICAgICAgLyoqPCBQb3J0IDAsIHBpbiAxICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AwMiA9IDMsICAgICAgICAgLyoqPCBQb3J0IDAsIHBpbiAyICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AwMyA9IDQsICAgICAgICAgLyoqPCBQb3J0IDAsIHBpbiAzICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AwNCA9IDUsICAgICAgICAgLyoqPCBQb3J0IDAsIHBpbiA0ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AwNSA9IDYsICAgICAgICAgLyoqPCBQb3J0IDAsIHBpbiA1ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AwNiA9IDcsICAgICAgICAgLyoqPCBQb3J0IDAsIHBpbiA2ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AwNyA9IDgsICAgICAgICAgLyoqPCBQb3J0IDAsIHBpbiA3ICovCisgICAgICAgIC8qIHBvcnQgMSAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMTAgPSA5LCAgICAgICAgIC8qKjwgUG9ydCAxLCBwaW4gMCAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMTEgPSAxMCwgICAgICAgIC8qKjwgUG9ydCAxLCBwaW4gMSAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMTIgPSAxMSwgICAgICAgIC8qKjwgUG9ydCAxLCBwaW4gMiAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMTMgPSAxMiwgICAgICAgIC8qKjwgUG9ydCAxLCBwaW4gMyAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMTQgPSAxMywgICAgICAgIC8qKjwgUG9ydCAxLCBwaW4gNCAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMTUgPSAxNCwgICAgICAgIC8qKjwgUG9ydCAxLCBwaW4gNSAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMTYgPSAxNSwgICAgICAgIC8qKjwgUG9ydCAxLCBwaW4gNiAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMTcgPSAxNiwgICAgICAgIC8qKjwgUG9ydCAxLCBwaW4gNyAqLworICAgICAgICAvKiBwb3J0IDIgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDIwID0gMTcsICAgICAgICAvKio8IFBvcnQgMiwgcGluIDAgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDIxID0gMTgsICAgICAgICAvKio8IFBvcnQgMiwgcGluIDEgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDIyID0gMTksICAgICAgICAvKio8IFBvcnQgMiwgcGluIDIgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDIzID0gMjAsICAgICAgICAvKio8IFBvcnQgMiwgcGluIDMgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDI0ID0gMjEsICAgICAgICAvKio8IFBvcnQgMiwgcGluIDQgKi8KKyAgICAgICAgLyogcG9ydCAzICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AzMCA9IDIyLCAgICAgICAgLyoqPCBQb3J0IDMsIHBpbiAwICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AzMSA9IDIzLCAgICAgICAgLyoqPCBQb3J0IDMsIHBpbiAxICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AzMiA9IDI0LCAgICAgICAgLyoqPCBQb3J0IDMsIHBpbiAyICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AzMyA9IDI1LCAgICAgICAgLyoqPCBQb3J0IDMsIHBpbiAzICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AzNCA9IDI2LCAgICAgICAgLyoqPCBQb3J0IDMsIHBpbiA0ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AzNSA9IDI3LCAgICAgICAgLyoqPCBQb3J0IDMsIHBpbiA1ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AzNiA9IDI4LCAgICAgICAgLyoqPCBQb3J0IDMsIHBpbiA2ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AzNyA9IDI5LCAgICAgICAgLyoqPCBQb3J0IDMsIHBpbiA3ICovCisgICAgICAgIC8qIHBvcnQgNCAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QNDAgPSAzMCwgICAgICAgIC8qKjwgUG9ydCA0LCBwaW4gMCAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QNDEgPSAzMSwgICAgICAgIC8qKjwgUG9ydCA0LCBwaW4gMSAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QNDIgPSAzMiwgICAgICAgIC8qKjwgUG9ydCA0LCBwaW4gMiAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QNDMgPSAzMywgICAgICAgIC8qKjwgUG9ydCA0LCBwaW4gMyAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QNDQgPSAzNCwgICAgICAgIC8qKjwgUG9ydCA0LCBwaW4gNCAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QNDUgPSAzNSwgICAgICAgIC8qKjwgUG9ydCA0LCBwaW4gNSAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QNDYgPSAzNiwgICAgICAgIC8qKjwgUG9ydCA0LCBwaW4gNiAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QNDcgPSAzNywgICAgICAgIC8qKjwgUG9ydCA0LCBwaW4gNyAqLworfSBIV19USU1FUjFfR1BJTzsKKworLyoqCisgKiBcYnJpZWYgVGltZXIgaW50ZXJydXB0IGNhbGxiYWNrCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpod190aW1lcjFfaGFuZGxlcl9jYikodm9pZCk7CisKKy8qCisgKiBcYnJpZWYgVGltZXIgY29uZmlndXJhdGlvbiBmb3IgdGltZXIvY2FwdHVyZSBtb2RlCisgKgorICogXHNhIHRpbWVyMV9jb25maWcKKyAqIFxzYSBod190aW1lcjFfY29uZmlndXJlX3RpbWVyCisgKgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIEhXX1RJTUVSMV9ESVIgICAgICAgZGlyZWN0aW9uOyAgICAvKio8IGNvdW50aW5nIGRpcmVjdGlvbiAqLworICAgICAgICB1aW50MzJfdCAgICAgICAgICAgIHJlbG9hZF92YWw7ICAgLyoqPCByZWxvYWQgdmFsdWUgKi8KKyAgICAgICAgYm9vbCAgICAgICAgICAgICAgICBmcmVlX3J1bjsgICAgIC8qKjwgZnJlZS1ydW5uaW5nIG1vZGUgc3RhdGUgKi8KKworICAgICAgICBIV19USU1FUjFfR1BJTyAgICAgIGdwaW8xOyAgICAgICAgLyoqPCAxc3QgR1BJTyBmb3IgY2FwdHVyZSBtb2RlICovCisgICAgICAgIEhXX1RJTUVSMV9UUklHR0VSICAgdHJpZ2dlcjE7ICAgICAvKio8IDFzdCBHUElPIGNhcHR1cmUgdHJpZ2dlciAqLworICAgICAgICBIV19USU1FUjFfR1BJTyAgICAgIGdwaW8yOyAgICAgICAgLyoqPCAybmQgR1BJTyBmb3IgY2FwdHVyZSBtb2RlICovCisgICAgICAgIEhXX1RJTUVSMV9UUklHR0VSICAgdHJpZ2dlcjI7ICAgICAvKio8IDJuZCBHUElPIGNhcHR1cmUgdHJpZ2dlciAqLworfSB0aW1lcjFfY29uZmlnX3RpbWVyX2NhcHR1cmU7CisKKy8qCisgKiBcYnJpZWYgVGltZXIgY29uZmlndXJhdGlvbiBmb3Igb25lc2hvdCBtb2RlCisgKgorICogXHNhIHRpbWVyMV9jb25maWcKKyAqIFxzYSBod190aW1lcjFfY29uZmlndXJlX29uZXNob3QKKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgdWludDE2X3QgICAgICAgICAgICBkZWxheTsgICAgICAgIC8qKjwgZGVsYXkgKHRpY2tzKSBiZXR3ZWVuIEdQSU8gZXZlbnQgYW5kIG91dHB1dCBwdWxzZSAqLworICAgICAgICB1aW50MzJfdCAgICAgICAgICAgIHNob3Rfd2lkdGg7ICAgLyoqPCB3aWR0aCAodGlja3MpIG9mIGdlbmVyYXRlZCBwdWxzZSAqLworICAgICAgICBIV19USU1FUjFfR1BJTyAgICAgIGdwaW87ICAgICAgICAgLyoqPCBHUElPIHRvIHdhaXQgZm9yIGV2ZW50ICovCisgICAgICAgIEhXX1RJTUVSMV9UUklHR0VSICAgdHJpZ2dlcjsgICAgICAvKio8IEdQSU8gdHJpZ2dlciAqLworfSB0aW1lcjFfY29uZmlnX29uZXNob3Q7CisKKy8qCisgKiBcYnJpZWYgVGltZXIgUFdNIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBcc2EgdGltZXIxX2NvbmZpZworICogXHNhIGh3X3RpbWVyMV9jb25maWd1cmVfcHdtCisgKiBcc2EgaHdfdGltZXIxX3NldF9wd21fZnJlcQorICogXHNhIGh3X3RpbWVyMV9zZXRfcHdtX2R1dHlfY3ljbGUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICB1aW50MTZfdCAgICAgICAgICAgIGZyZXF1ZW5jeTsgICAgLyoqPCBmcmVxdWVuY3kgKi8KKyAgICAgICAgdWludDE2X3QgICAgICAgICAgICBkdXR5X2N5Y2xlOyAgIC8qKjwgZHV0eSBjeWNsZSAqLworfSB0aW1lcjFfY29uZmlnX3B3bTsKKworLyoKKyAqIFxicmllZiBUaW1lciBjb25maWd1cmF0aW9uCisgKgorICogT25seSBvbmUgb2YgXHAgdGltZXIgYW5kIFxwIG9uZXNob3QgY29uZmlndXJhdGlvbiBjYW4gYmUgc2V0IHNpbmNlIHRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgc2FtZQorICogdW5pb24gKGFuZCB3aWxsIG92ZXJ3cml0ZSBlYWNoIG90aGVyKS4gUHJvcGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGlzIHNlbGVjdGVkIGRlcGVuZGluZyBvbgorICogdGltZXIgbW9kZSBzZXQuCisgKgorICogXHNhIHRpbWVyMV9jb25maWdfdGltZXJfY2FwdHVyZQorICogXHNhIHRpbWVyMV9jb25maWdfb25lc2hvdAorICogXHNhIHRpbWVyMV9jb25maWdfcHdtCisgKiBcc2EgaHdfdGltZXIxX2NvbmZpZ3VyZQorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBIV19USU1FUjFfQ0xLX1NSQyAgIGNsa19zcmM7ICAgICAgICAgICAgICAgICAgICAvKio8IGNsb2NrIHNvdXJjZSAqLworICAgICAgICB1aW50MTZfdCAgICAgICAgICAgIHByZXNjYWxlcjsgICAgICAgICAgICAgICAgICAvKio8IGNsb2NrIHByZXNjYWxlciAqLworCisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICB0aW1lcjFfY29uZmlnX3RpbWVyX2NhcHR1cmUgICB0aW1lcjsgICAgLyoqPCBjb25maWd1cmF0aW9uIGZvciB0aW1lci9jYXB0dXJlIG1vZGUgKi8KKyAgICAgICAgICAgICAgICB0aW1lcjFfY29uZmlnX29uZXNob3QgICAgICAgICBvbmVzaG90OyAgLyoqPCBjb25maWd1cmF0aW9uIGZvciBvbmVzaG90IG1vZGUgKi8KKyAgICAgICAgfTsKKyAgICAgICAgdGltZXIxX2NvbmZpZ19wd20gICBwd207ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQV00gY29uZmlndXJhdGlvbiAqLworfSB0aW1lcjFfY29uZmlnOworCisKKyNpZiBkZ19jb25maWdVU0VSX0NBTl9VU0VfVElNRVIxID09IDEKKworLyoqCisgKiBcYnJpZWYgVGltZXIgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBUdXJuIG9uIGNsb2NrIGZvciB0aW1lciBhbmQgY29uZmlndXJlIHRpbWVyLiBBZnRlciBpbml0aWFsaXphdGlvbiBib3RoIHRpbWVyIGFuZCBpdHMgaW50ZXJydXB0CisgKiBhcmUgZGlzYWJsZWQuIFxwIGNmZyBjYW4gYmUgTlVMTCAtIG5vIGNvbmZpZ3VyYXRpb24gaXMgcGVyZm9ybWVkIGluIHN1Y2ggY2FzZS4KKyAqCisgKiBccGFyYW0gW2luXSBtb2RlIHRpbWVyIG1vZGUKKyAqIFxwYXJhbSBbaW5dIGNmZyBjb25maWd1cmF0aW9uCisgKgorICovCit2b2lkIGh3X3RpbWVyMV9pbml0KEhXX1RJTUVSMV9NT0RFIG1vZGUsIGNvbnN0IHRpbWVyMV9jb25maWcgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIFRpbWVyIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBTaG9ydGN1dCB0byBjYWxsIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uIElmIFxwIGNmZyBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIGRvZXMKKyAqIG5vdGhpbmcgZXhjZXB0IHN3aXRjaGluZyB0aW1lciB0byBzZWxlY3RlZCBtb2RlLgorICoKKyAqIFxwYXJhbSBbaW5dIG1vZGUgdGltZXIgbW9kZQorICogXHBhcmFtIFtpbl0gY2ZnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3ZvaWQgaHdfdGltZXIxX2NvbmZpZ3VyZShIV19USU1FUjFfTU9ERSBtb2RlLCBjb25zdCB0aW1lcjFfY29uZmlnICpjZmcpOworCisvKioKKyAqIFxicmllZiBUaW1lciBjb25maWd1cmF0aW9uIGZvciB0aW1lci9jYXB0dXJlIG1vZGUKKyAqCisgKiBTaG9ydGN1dCB0byBjYWxsIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uIFRoaXMgZG9lcyBub3Qgc3dpdGNoIHRpbWVyIHRvIHRpbWVyL2NhcHR1cmUKKyAqIG1vZGUsIGl0IHNob3VsZCBiZSBkb25lIHNlcGFyYXRlbHkgdXNpbmcgaHdfdGltZXIxX3NldF9tb2RlKCkuCisgKgorICogXHBhcmFtIFtpbl0gY2ZnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3ZvaWQgaHdfdGltZXIxX2NvbmZpZ3VyZV90aW1lcihjb25zdCB0aW1lcjFfY29uZmlnX3RpbWVyX2NhcHR1cmUgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIFRpbWVyIGNvbmZpZ3VyYXRpb24gZm9yIG9uZXNob3QgbW9kZQorICoKKyAqIFNob3J0Y3V0IHRvIGNhbGwgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbi4gVGhpcyBkb2VzIG5vdCBzd2l0Y2ggdGltZXIgdG8gb25lc2hvdAorICogbW9kZSwgaXQgc2hvdWxkIGJlIGRvbmUgc2VwYXJhdGVseSB1c2luZyBod190aW1lcjFfc2V0X21vZGUoKS4KKyAqCisgKiBccGFyYW0gW2luXSBjZmcgY29uZmlndXJhdGlvbgorICoKKyAqLwordm9pZCBod190aW1lcjFfY29uZmlndXJlX29uZXNob3QoY29uc3QgdGltZXIxX2NvbmZpZ19vbmVzaG90ICpjZmcpOworCisvKioKKyAqIFxicmllZiBGcmVlemUgdGltZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfZnJlZXplKHZvaWQpCit7CisgICAgICAgIEdQUkVHLT5TRVRfRlJFRVpFX1JFRyA9IEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTFfTXNrOworfQorCisvKioKKyAqIFxicmllZiBVbmZyZWV6ZSB0aW1lcgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV91bmZyZWV6ZSh2b2lkKQoreworICAgICAgICBHUFJFRy0+UkVTRVRfRlJFRVpFX1JFRyA9IEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1NXVElNMV9Nc2s7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHRpbWVyIGlzIGZyb3plbgorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiBpdCBpcyBmcm96ZW4gZWxzZSBmYWxzZQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3RpbWVyMV9mcm96ZW4odm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEdQUkVHLT5TRVRfRlJFRVpFX1JFRyAmIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTFfTXNrID8gdHJ1ZSA6IGZhbHNlOworfQorCisvKioKKyAqIFxicmllZiBTZXQgY2xvY2sgc291cmNlIG9mIHRoZSB0aW1lcgorICoKKyAqIFxwYXJhbSBbaW5dIGNsayBjbG9jayBzb3VyY2Ugb2YgdGhlIHRpbWVyLCBleHRlcm5hbCBvciBpbnRlcm5hbAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9zZXRfY2xrKEhXX1RJTUVSMV9DTEtfU1JDIGNsaykKK3sKKyAgICAgICAgSFdfVElNRVIxX1JFR19TRVRGKENUUkwsIENBUFRJTV9TWVNfQ0xLX0VOLCBjbGspOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdGltZXIgY2xvY2sgcHJlc2NhbGVyCisgKgorICogQWN0dWFsIHRpbWVyIGZyZXF1ZW5jeSBpcyBccCB0aW1lcl9mcmVxID0gXHAgZnJlcV9jbG9jayAvIChccCB2YWx1ZSArIDEpCisgKgorICogXHBhcmFtIFtpbl0gdmFsdWUgcHJlc2NhbGVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX3NldF9wcmVzY2FsZXIodWludDE2X3QgdmFsdWUpCit7CisgICAgICAgIFRJTUVSMS0+Q0FQVElNX1BSRVNDQUxFUl9SRUcgPSB2YWx1ZTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHRpbWVyIHJlbG9hZCB2YWx1ZQorICoKKyAqIFxub3RlIFRoaXMgY2hhbmdlcyB0aGUgc2FtZSByZWdpc3RlciB2YWx1ZSBhcyBod190aW1lcjFfc2V0X29uZXNob3RfZGVsYXkoKSBzaW5jZSBib3RoIHBhcmFtZXRlcnMKKyAqIHNoYXJlIHRoZSBzYW1lIHJlZ2lzdGVyICh2YWx1ZSBpcyBpbnRlcnByZXRlZCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGltZXIgbW9kZSkuCisgKgorICogXHBhcmFtIFtpbl0gdmFsdWUgcmVsb2FkIHZhbHVlCisgKgorICogXHNhIGh3X3RpbWVyMV9zZXRfb25lc2hvdF9kZWxheQorICogXG5vdGUgRm9yIERBMTQ2ODIvMyBjaGlwcywgc2V0dGluZyB0aGUgcmVsb2FkIHZhbHVlIHdpbGwgYWxzbyBmcmVlemUgdGhlIHRpbWVyIHVudGlsIGJvdGgKKyAqIHJlbG9hZCByZWdpc3RlcnMgYXJlIHNldC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9zZXRfcmVsb2FkKHVpbnQzMl90IHZhbHVlKQoreworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BKSAmJiAoZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gIT0gMSkKKyAgICAgICAgYm9vbCB0aW1lcjFfZnJvemVuID0gaHdfdGltZXIxX2Zyb3plbigpOworICAgICAgICBpZiAoIXRpbWVyMV9mcm96ZW4pIHsKKyAgICAgICAgICAgICAgICBod190aW1lcjFfZnJlZXplKCk7CisgICAgICAgIH0KKyAgICAgICAgVElNRVIxLT5DQVBUSU1fUkVMT0FEX1JFRyA9ICh1aW50MTZfdCkgdmFsdWU7CisgICAgICAgIFRJTUVSMS0+Q0FQVElNX1JFTE9BRF9ISUdIX1JFRyA9ICh1aW50MTZfdCkgdmFsdWUgPj4gMTY7CisgICAgICAgIGlmICghdGltZXIxX2Zyb3plbikgeworICAgICAgICAgICAgICAgIGh3X3RpbWVyMV91bmZyZWV6ZSgpOworICAgICAgICB9CisjZWxzZQorICAgICAgICBUSU1FUjEtPkNBUFRJTV9SRUxPQURfUkVHID0gKHVpbnQxNl90KSB2YWx1ZTsKKyNlbmRpZgorfQorCisvKioKKyAqIFxicmllZiBTZXQgcHVsc2UgZGVsYXkgaW4gb25lc2hvdCBtb2RlCisgKgorICogXG5vdGUgVGhpcyBjaGFuZ2VzIHRoZSBzYW1lIHJlZ2lzdGVyIHZhbHVlIGFzIGh3X3RpbWVyMV9zZXRfcmVsb2FkKCkgc2luY2UgYm90aCBwYXJhbWV0ZXJzIHNoYXJlCisgKiB0aGUgc2FtZSByZWdpc3RlciAodmFsdWUgaXMgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRpbWVyIG1vZGUpLgorICoKKyAqIFxwYXJhbSBbaW5dIGRlbGF5IGRlbGF5ICh0aWNrcykKKyAqCisgKiBcc2EgaHdfdGltZXIxX3NldF9yZWxvYWQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfc2V0X29uZXNob3RfZGVsYXkodWludDMyX3QgZGVsYXkpCit7CisgICAgICAgIFRJTUVSMS0+Q0FQVElNX1JFTE9BRF9SRUcgPSAodWludDE2X3QpIGRlbGF5OworfQorCisvKioKKyAqIFxicmllZiBTZXQgc2hvdCB3aWR0aAorICoKKyAqIFRoaXMgYXBwbGllcyBvbmx5IHRvIG9uZS1zaG90IG1vZGUuCisgKgorICogXHBhcmFtIFtpbl0gZHVyYXRpb24gc2hvdCBwaGFzZSBkdXJhdGlvbgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9zZXRfc2hvdF93aWR0aCh1aW50MzJfdCBkdXJhdGlvbikKK3sKKyAgICAgICAgVElNRVIxLT5DQVBUSU1fU0hPVFdJRFRIX1JFRyA9ICh1aW50MTZfdCkgZHVyYXRpb247Cit9CisKKy8qKgorICogXGJyaWVmIFR1cm4gb24gZnJlZSBydW4gbW9kZSBvZiB0aGUgdGltZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfc2V0X2ZyZWVydW4oYm9vbCBlbmFibGVkKQoreworICAgICAgICBIV19USU1FUjFfUkVHX1NFVEYoQ1RSTCwgQ0FQVElNX0ZSRUVfUlVOX01PREVfRU4sIGVuYWJsZWQpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgYSB0eXBlIG9mIHRoZSBlZGdlIHdoaWNoIHRyaWdnZXJzIGV2ZW50MQorICoKKyAqIFxwYXJhbSBbaW5dIGVkZ2UgdHlwZSBvZiBlZGdlLCByaXNpbmcgb3IgZmFsbGluZworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9zZXRfZXZlbnQxX3RyaWdnZXIoSFdfVElNRVIxX1RSSUdHRVIgZWRnZSkKK3sKKyAgICAgICAgSFdfVElNRVIxX1JFR19TRVRGKENUUkwsIENBUFRJTV9JTjFfRVZFTlRfRkFMTF9FTiwgZWRnZSk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBhIHR5cGUgb2YgdGhlIGVkZ2Ugd2hpY2ggdHJpZ2dlcnMgZXZlbnQyCisgKgorICogXHBhcmFtIFtpbl0gZWRnZSB0eXBlIG9mIGVkZ2UsIHJpc2luZyBvciBmYWxsaW5nCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX3NldF9ldmVudDJfdHJpZ2dlcihIV19USU1FUjFfVFJJR0dFUiBlZGdlKQoreworICAgICAgICBIV19USU1FUjFfUkVHX1NFVEYoQ1RSTCwgQ0FQVElNX0lOMl9FVkVOVF9GQUxMX0VOLCBlZGdlKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IGEgR1BJTyBpbnB1dCB3aGljaCB0cmlnZ2VycyBldmVudDEKKyAqCisgKiBccGFyYW0gW2luXSBncGlvIEdQSU8gaW5wdXQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfc2V0X2V2ZW50MV9ncGlvKEhXX1RJTUVSMV9HUElPIGdwaW8pCit7CisgICAgICAgIFRJTUVSMS0+Q0FQVElNX0dQSU8xX0NPTkZfUkVHID0gZ3BpbzsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IGEgR1BJTyBpbnB1dCB3aGljaCB0cmlnZ2VycyBldmVudDIKKyAqCisgKiBccGFyYW0gW2luXSBncGlvIEdQSU8gaW5wdXQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfc2V0X2V2ZW50Ml9ncGlvKEhXX1RJTUVSMV9HUElPIGdwaW8pCit7CisgICAgICAgIFRJTUVSMS0+Q0FQVElNX0dQSU8yX0NPTkZfUkVHID0gZ3BpbzsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGNsb2NrIHNvdXJjZSBvZiB0aGUgdGltZXIKKyAqCisgKiBccmV0dXJuIGNsb2NrIHNvdXJjZQorICoKKyAqLworc3RhdGljIGlubGluZSBIV19USU1FUjFfQ0xLX1NSQyBod190aW1lcjFfZ2V0X2Nsayh2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfVElNRVIxX1JFR19HRVRGKENUUkwsIENBUFRJTV9TWVNfQ0xLX0VOKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRpbWVyIGNsb2NrIHByZXNjYWxlcgorICoKKyAqIEFjdHVhbCB0aW1lciBmcmVxdWVuY3kgaXMgXHAgdGltZXJfZnJlcSA9IFxwIGZyZXFfY2xvY2sgLyAoXHAgcmV0dmFsICsgMSkKKyAqCisgKiBccmV0dXJuIHByZXNjYWxlciB2YWx1ZQorICoKKyAqIFxzYSBod190aW1lcjFfZ2V0X3ByZXNjYWxlcl92YWwKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgaHdfdGltZXIxX2dldF9wcmVzY2FsZXIodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFRJTUVSMS0+Q0FQVElNX1BSRVNDQUxFUl9SRUc7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aW1lciByZWxvYWQgdmFsdWUKKyAqCisgKiBccmV0dXJuIHJlbG9hZCB2YWx1ZQorICoKKyAqIFxzYSBod190aW1lcjFfc2V0X3JlbG9hZAorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBod190aW1lcjFfZ2V0X3JlbG9hZCh2b2lkKQoreworICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fUkVMT0FEX1JFRzsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHB1bHNlIGRlbGF5IGluIG9uZXNob3QgbW9kZQorICoKKyAqIFxyZXR1cm4gZGVsYXkgKHRpY2tzKQorICoKKyAqIFxzYSBod190aW1lcjFfZ2V0X29uZXNob3RfZGVsYXkKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaHdfdGltZXIxX2dldF9vbmVzaG90X2RlbGF5KHZvaWQpCit7CisgICAgICAgIHJldHVybiBUSU1FUjEtPkNBUFRJTV9SRUxPQURfUkVHOworfQorCisvKioKKyAqIFxicmllZiBHZXQgc2hvdCB3aWR0aAorICoKKyAqIFRoaXMgYXBwbGllcyBvbmx5IHRvIG9uZS1zaG90IG1vZGUuCisgKgorICogXHJldHVybiBzaG90IHdpZHRoIHZhbHVlCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGh3X3RpbWVyMV9nZXRfc2hvdF93aWR0aCh2b2lkKQoreworICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fU0hPVFdJRFRIX1JFRzsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGZyZWUtcnVubmluZyBtb2RlIHN0YXRlCisgKgorICogXHJldHVybiBmcmVlLXJ1bm5pbmcgbW9kZSBzdGF0ZQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3RpbWVyMV9nZXRfZnJlZXJ1bih2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfVElNRVIxX1JFR19HRVRGKENUUkwsIENBUFRJTV9GUkVFX1JVTl9NT0RFX0VOKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGEgdHlwZSBvZiB0aGUgZWRnZSB3aGljaCB0cmlnZ2VycyBldmVudDEKKyAqCisgKiBccmV0dXJuIGVkZ2UgdHlwZQorICoKKyAqLworc3RhdGljIGlubGluZSBIV19USU1FUjFfVFJJR0dFUiBod190aW1lcjFfZ2V0X2V2ZW50MV90cmlnZ2VyKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19USU1FUjFfUkVHX0dFVEYoQ1RSTCwgQ0FQVElNX0lOMV9FVkVOVF9GQUxMX0VOKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGEgdHlwZSBvZiB0aGUgZWRnZSB3aGljaCB0cmlnZ2VycyBldmVudDIKKyAqCisgKiBccmV0dXJuIGVkZ2UgdHlwZQorICoKKyAqLworc3RhdGljIGlubGluZSBIV19USU1FUjFfVFJJR0dFUiBod190aW1lcjFfZ2V0X2V2ZW50Ml90cmlnZ2VyKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19USU1FUjFfUkVHX0dFVEYoQ1RSTCwgQ0FQVElNX0lOMl9FVkVOVF9GQUxMX0VOKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGEgR1BJTyBpbnB1dCB3aGljaCB0cmlnZ2VycyBldmVudDEKKyAqCisgKiBccmV0dXJuIEdQSU8gaW5wdXQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgSFdfVElNRVIxX0dQSU8gaHdfdGltZXIxX2dldF9ldmVudDFfZ3Bpbyh2b2lkKQoreworICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fR1BJTzFfQ09ORl9SRUc7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBhIEdQSU8gaW5wdXQgd2hpY2ggdHJpZ2dlcnMgZXZlbnQyCisgKgorICogXHJldHVybiBHUElPIGlucHV0CisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX1RJTUVSMV9HUElPIGh3X3RpbWVyMV9nZXRfZXZlbnQyX2dwaW8odm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFRJTUVSMS0+Q0FQVElNX0dQSU8yX0NPTkZfUkVHOworfQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIGNhcHR1cmUgdGltZSBmb3IgZXZlbnQgb24gR1BJTzEKKyAqCisgKiBccmV0dXJuIHRpbWUgZm9yIGV2ZW50IG9uIEdQSU8xCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGh3X3RpbWVyMV9nZXRfY2FwdHVyZTEodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFRJTUVSMS0+Q0FQVElNX0NBUFRVUkVfR1BJTzFfUkVHOworfQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIGNhcHR1cmUgdGltZSBmb3IgZXZlbnQgb24gR1BJTzIKKyAqCisgKiBccmV0dXJuIHRpbWUgZm9yIGV2ZW50IG9uIEdQSU8yCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGh3X3RpbWVyMV9nZXRfY2FwdHVyZTIodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFRJTUVSMS0+Q0FQVElNX0NBUFRVUkVfR1BJTzJfUkVHOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIGRpcmVjdGlvbiBvZiB0aW1lciBjb3VudGluZworICoKKyAqIFxwYXJhbSBbaW5dIGRpciBjb3VudGluZyBkaXJlY3Rpb24gb2YgdGhlIHRpbWVyLCB1cCBvciBkb3duCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX3NldF9kaXJlY3Rpb24oSFdfVElNRVIxX0RJUiBkaXIpCit7CisgICAgICAgIEhXX1RJTUVSMV9SRUdfU0VURihDVFJMLCBDQVBUSU1fQ09VTlRfRE9XTl9FTiwgZGlyKTsKK30KKworLyoqCisgKiBcYnJpZWYgVHVybiBvbiBvbmUgc2hvdCBtb2RlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX3NldF9tb2RlKEhXX1RJTUVSMV9NT0RFIG1vZGUpCit7CisgICAgICAgIEhXX1RJTUVSMV9SRUdfU0VURihDVFJMLCBDQVBUSU1fT05FU0hPVF9NT0RFX0VOLCBtb2RlKTsKK30KKworLyoqCisgKiBcYnJpZWYgVHVybiBvbiBjYXB0dXJlIG1vZGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgSFdfVElNRVIxX01PREUgaHdfdGltZXIxX2dldF9tb2RlKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19USU1FUjFfUkVHX0dFVEYoQ1RSTCwgQ0FQVElNX09ORVNIT1RfTU9ERV9FTik7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdGljayBjb3VudCBvZiB0aGUgdGltZXIKKyAqCisgKiBccmV0dXJuIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHRpbWVyIHRpY2tzCisgKgorICogXHNhIGh3X3RpbWVyMV9nZXRfcHJlc2NhbGVyX3ZhbAorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBod190aW1lcjFfZ2V0X2NvdW50KHZvaWQpCit7CisjaWYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EpICYmIChkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiAhPSAxKQorICAgICAgICB1aW50MzJfdCBsbywgaGk7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgbG8gPSBUSU1FUjEtPkNBUFRJTV9USU1FUl9WQUxfUkVHOworICAgICAgICAgICAgICAgIGhpID0gVElNRVIxLT5DQVBUSU1fVElNRVJfSFZBTF9SRUc7CisgICAgICAgIH0gd2hpbGUgKGxvICE9IFRJTUVSMS0+Q0FQVElNX1RJTUVSX1ZBTF9SRUcpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyAgICAgICAgcmV0dXJuIChoaSA8PCAxNikgfCBsbzsKKyNlbHNlCisgICAgICAgIHJldHVybiBUSU1FUjEtPkNBUFRJTV9USU1FUl9WQUxfUkVHOworI2VuZGlmCit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgY3VycmVudCBwaGFzZSBvZiB0aGUgb25lIHNob3QgbW9kZQorICoKKyAqIFxyZXR1cm4gY3VycmVudCBwaGFzZSBvZiB0aGUgb25lIHNob3QgbW9kZQorICoKKyAqLworc3RhdGljIGlubGluZSBIV19USU1FUjFfT05FU0hPVCBod190aW1lcjFfZ2V0X29uZXNob3RfcGhhc2Uodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1RJTUVSMV9SRUdfR0VURihTVEFUVVMsIENBUFRJTV9PTkVTSE9UX1BIQVNFKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIElOMQorICoKKyAqIFxyZXR1cm4gY3VycmVudCBsb2dpYyBsZXZlbCBvZiBJTjEKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod190aW1lcjFfZ2V0X2dwaW8xX3N0YXRlKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19USU1FUjFfUkVHX0dFVEYoU1RBVFVTLCBDQVBUSU1fSU4xX1NUQVRFKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIElOMgorICoKKyAqIFxyZXR1cm4gY3VycmVudCBsb2dpYyBsZXZlbCBvZiBJTjIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod190aW1lcjFfZ2V0X2dwaW8yX3N0YXRlKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19USU1FUjFfUkVHX0dFVEYoU1RBVFVTLCBDQVBUSU1fSU4yX1NUQVRFKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBjdXJyZW50IHByZXNjYWxlciBjb3VudGVyIHZhbHVlCisgKgorICogVGhpcyBpcyB2YWx1ZSBvZiBpbnRlcm5hbCBjb3VudGVyIHVzZWQgZm9yIHByZXNjYWxpbmcuIEl0IGNhbiBiZSB1c2VkIHRvIGhhdmUgZmluZXIgZ3JhbnVsYXJpdHkKKyAqIHdoZW4gcmVhZGluZyB0aW1lciB2YWx1ZS4KKyAqCisgKiBGb3IgcmVhZGluZyBjdXJyZW50IHNldHRpbmcgb2YgcHJlc2NhbGVyLCBzZWUgaHdfdGltZXIxX2dldF9wcmVzY2FsZXIoKS4KKyAqCisgKiBccmV0dXJuIGN1cnJlbnQgcHJlc2NhbGVyIGNvdW50ZXIgdmFsdWUKKyAqCisgKiBcc2EgaHdfdGltZXIxX2dldF9jb3VudAorICogXHNhIGh3X3RpbWVyMV9nZXRfcHJlc2NhbGVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGh3X3RpbWVyMV9nZXRfcHJlc2NhbGVyX3ZhbCh2b2lkKQoreworICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fUFJFU0NBTEVSX1ZBTF9SRUc7Cit9CisKKy8qKgorICogXGJyaWVmIFJlZ2lzdGVyIGFuIGludGVycnVwdCBoYW5kbGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIGhhbmRsZXIgZnVuY3Rpb24gcG9pbnRlciB0byBoYW5kbGVyIHRvIGNhbGwgd2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzCisgKgorICovCit2b2lkIGh3X3RpbWVyMV9yZWdpc3Rlcl9pbnQoaHdfdGltZXIxX2hhbmRsZXJfY2IgaGFuZGxlcik7CisKKy8qKgorICogXGJyaWVmIFVucmVnaXN0ZXIgYW4gaW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKi8KK3ZvaWQgaHdfdGltZXIxX3VucmVnaXN0ZXJfaW50KHZvaWQpOworCisjZWxzZSAvLyAoZGdfY29uZmlnVVNFUl9DQU5fVVNFX1RJTUVSMSA9PSAwKQorCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorI2RlZmluZSBMUF9DTlRfUkVHX1JBTkdFICAgICAgICAoIDE2ICkKKyNlbHNlCisjZGVmaW5lIExQX0NOVF9SRUdfUkFOR0UgICAgICAgICggMzIgKQorI2VuZGlmCisjZGVmaW5lIExQX0NOVF9NQVhfVkFMVUUgICAgICAgICggKDFVTEwgPDwgTFBfQ05UX1JFR19SQU5HRSkgLSAxICkKKyNkZWZpbmUgTFBfQ05UX1BSRVNDQUxFRF9NQVNLICAgKCBMUF9DTlRfTUFYX1ZBTFVFICkKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisjZGVmaW5lIExQX0NOVF9OQVRJVkVfTUFTSyAgICAgICggKDFVTEwgPDwgKExQX0NOVF9SRUdfUkFOR0UgKyBkZ19jb25maWdUaW0xUHJlc2NhbGVyQml0UmFuZ2UpKSAtIDEgKQorI2Vsc2UKKyNkZWZpbmUgTFBfQ05UX05BVElWRV9NQVNLICAgICAgKCAoMVVMTCA8PCAoTFBfQ05UX1JFR19SQU5HRSkpIC0gMSApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlIHRpbWVyIGFzIHRpY2sgdGltZXIKKyAqCisgKiBcZGV0YWlscyBTZXR1cCBUaW1lcjEgZm9yIHVzZSBhcyBhIHRpY2sgdGltZXI6CisgKiAgICAgICAgIDx1bD4KKyAqICAgICAgICAgICAgICA8bGk+IHVzZSBMUCBjbG9jayBhbmQgcHJlc2NhbGVyIChpZiBjb25maWd1cmVkKQorICogICAgICAgICAgICAgIDxsaT4gZnJlZSBydW5uaW5nIG1vZGUKKyAqICAgICAgICAgICAgICA8bGk+IElSUSBtYXNrZWQKKyAqICAgICAgICAgICAgICA8bGk+IHVwIGNvdW50ZXIKKyAqICAgICAgICAgICAgICA8bGk+IHRpbWVyIG1vZGUKKyAqICAgICAgICAgICAgICA8bGk+IGRpc2FibGVkCisgKiAgICAgICAgIDwvdWw+CisgKgorICovCit2b2lkIGh3X3RpbWVyMV9scF9jbGtfaW5pdCh2b2lkKTsKKworCisvKioKKyAqIFxicmllZiBFbmFibGUgaW50ZXJydXB0CisgKgorICogXHJldHVybiB2b2lkCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX2ludF9lbmFibGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX2ludF9lbmFibGUodm9pZCkKK3sKKyAgICAgICAgSFdfVElNRVIxX1JFR19TRVRGKENUUkwsIENBUFRJTV9JUlFfRU4sIDEpOworICAgICAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShTV1RJTTFfSVJRbik7CisgICAgICAgIE5WSUNfRW5hYmxlSVJRKFNXVElNMV9JUlFuKTsKK30KKworCisvKioKKyAqIFxicmllZiBEaXNhYmxlIGludGVycnVwdAorICoKKyAqIFxyZXR1cm4gdm9pZAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9pbnRfZGlzYWJsZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfaW50X2Rpc2FibGUodm9pZCkKK3sKKyAgICAgICAgTlZJQ19EaXNhYmxlSVJRKFNXVElNMV9JUlFuKTsKKyAgICAgICAgSFdfVElNRVIxX1JFR19TRVRGKENUUkwsIENBUFRJTV9JUlFfRU4sIDApOworfQorCisKKy8qKgorICogXGJyaWVmIEdldCBjb3VudGVyJ3MgdmFsdWUKKyAqCisgKiBccmV0dXJuIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb3VudGVyIChwcmVzY2FsZWQpLgorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBod190aW1lcjFfZ2V0X3ZhbHVlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB1aW50MzJfdCBod190aW1lcjFfZ2V0X3ZhbHVlKHZvaWQpCit7CisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fVElNRVJfVkFMX1JFRzsKKyNlbHNlCisgICAgICAgIHVpbnQzMl90IGxvLCBoaTsKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBsbyA9IFRJTUVSMS0+Q0FQVElNX1RJTUVSX1ZBTF9SRUc7CisgICAgICAgICAgICAgICAgaGkgPSBUSU1FUjEtPkNBUFRJTV9USU1FUl9IVkFMX1JFRzsKKyAgICAgICAgfSB3aGlsZSAobG8gIT0gVElNRVIxLT5DQVBUSU1fVElNRVJfVkFMX1JFRyk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworICAgICAgICByZXR1cm4gKGhpIDw8IDE2KSB8IGxvOworI2VuZGlmCit9CisKKworLyoqCisgKiBcYnJpZWYgTWFjcm8gdG8gZ2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB0aW1lciwgYm90aCBwcmVzY2FsZWQgYW5kIGluIExQIGNsb2NrIGN5Y2xlcy4KKyAqCisgKiBcZGV0YWlscyBTcGVjaWFsIGNhcmUgaXMgbmVlZGVkIHdoZW4gYSBwcmVzY2FsZXIgaXMgdXNlZC4gSW4gdGhpcyBjYXNlLCB0aGUKKyAqICAgICAgICAgY291bnRpbmcgc2VxdWVuY2UgaXMgdGhlIGZvbGxvd2luZyAoYXNzdW1pbmdhIHByZXNjYWxlciBvZiAzKToKKyAqICAgICAgICAgcHJlc2NhbGVyOiAwICAxICAyICAzICAwICAxICAyICAzICAwCisgKiAgICAgICAgIGNvdW50ZXI6ICAgMCAgICAgICAgICAgMSAgICAgICAgICAgMgorICoKKyAqICAgICAgICAgSWYgbm90IGltcGxlbWVudGVkIHByb3Blcmx5IHRoZW4gdGhlIGZvbGxvd2luZyBtYXkgaGFwcGVuOgorICogICAgICAgICAtIGxldCdzIGFzc3VtZSB0aGF0IHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSB7MCwgM30gcGVyaW9kCisgKiAgICAgICAgIC0gdGhlIGNvdW50ZXIncyB2YWx1ZSBpcyByZWFkIGFuZCB0aGUgcmVzdWx0IGlzIDAKKyAqICAgICAgICAgLSBhdCB0aGF0IG1vbWVudCwgdGhlIGNvdW50ZXIgaW5jcmVhc2VzIGl0J3MgcHJlc2NhbGVyIHZhbHVlIChhbmQgdGhlIGNvdW50ZXIncyB2YWx1ZQorICogICAgICAgICAgIHJlc3BlY3RpdmVseSksIHNvIHRoZSB0aW1lIGJlY29tZXMgezEsIDB9CisgKiAgICAgICAgIC0gdGhlIHJlYWRpbmcgb2YgdGhlIHByZXNjYWxlcidzIHZhbHVlIHdpbGwgZ2l2ZSAwIGJ1dCB7MCwgMH0gaXMgZWFybGllciB0aGFuIHswLCAzfSAod2hlbgorICogICAgICAgICAgIHRoZSBvcGVyYXRpb24gc3RhcnRlZCkgYW5kIHRoaXMgbWF5IHJlc3VsdCBpbiBlcnJvcnMgaW4gdGltZSBjb21wdXRhdGlvbnMuCisgKiBcbm90ZSBUaGlzIG1hY3JvIHNob3VsZCBiZSB1c2VkIGluc2lkZSBhIGNyaXRpY2FsIHNlY3Rpb24uCisgKgorICovCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorI2RlZmluZSBIV19USU1FUjFfR0VUX0lOU1RBTlQocHJlc2NhbGVkLCBmaW5lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZGdfY29uZmlnVGltMVByZXNjYWxlciAhPSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHVpbnQzMl90IHByZXNjYWxlcl92OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2NhbGVyX3YgPSBUSU1FUjEtPkNBUFRJTV9QUkVTQ0FMRVJfVkFMX1JFRzsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2NhbGVkID0gVElNRVIxLT5DQVBUSU1fVElNRVJfVkFMX1JFRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIH0gd2hpbGUgKHByZXNjYWxlcl92ICE9IFRJTUVSMS0+Q0FQVElNX1BSRVNDQUxFUl9WQUxfUkVHKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGZpbmUgPSAoICh1aW50MzJfdClwcmVzY2FsZWQgKiAoMSArIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIpICsgcHJlc2NhbGVyX3YpOyAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHByZXNjYWxlZCA9IFRJTUVSMS0+Q0FQVElNX1RJTUVSX1ZBTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGZpbmUgPSBwcmVzY2FsZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIEhXX1RJTUVSMV9HRVRfSU5TVEFOVChwcmVzY2FsZWQsIGZpbmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVpbnQzMl90IGxvLCBoaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbG8gPSBUSU1FUjEtPkNBUFRJTV9USU1FUl9WQUxfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaGkgPSBUSU1FUjEtPkNBUFRJTV9USU1FUl9IVkFMX1JFRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUgKGxvICE9IFRJTUVSMS0+Q0FQVElNX1RJTUVSX1ZBTF9SRUcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHByZXNjYWxlZCA9IGZpbmUgPSAoaGkgPDwgMTYpIHwgbG87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorI2VuZGlmCisvKioKKyAqIFxicmllZiBNYWNybyB0byBzZXQgdGhlIHRyaWdnZXIgdmFsdWUuIFRoZSBwcmV2aW91cyB0cmlnZ2VyIHZhbHVlIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisgKiBcbm90ZSBGb3IgREExNDY4Mi8zIGNoaXBzLCB0aGlzIG1hY3JvIHdpbGwgZGlzYWJsZSB0aW1lcjEgaW50ZXJydXB0IHVudGlsIHJlbG9hZCByZWdpc3RlcnMKKyAqIHByb2dyYW1tZWQgc28gdGhhdCBmYWxzZSBpbnRlcnJ1cHRzIGFyZSBhdm9pZGVkLgorICovCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorI2RlZmluZSBIV19USU1FUjFfU0VUX1RSSUdHRVIodmFsdWUsIGxhc3RfdmFsdWUpICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGFzdF92YWx1ZSA9IFRJTUVSMS0+Q0FQVElNX1JFTE9BRF9SRUc7ICAgICAgICAgXAorICAgICAgICBUSU1FUjEtPkNBUFRJTV9SRUxPQURfUkVHID0gdmFsdWU7ICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgSFdfVElNRVIxX1NFVF9UUklHR0VSKHZhbHVlLCBsYXN0X3ZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYm9vbCB0aW1lcjFfaXJxX2VuID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUSU1FUjEtPkNBUFRJTV9DVFJMX1JFRyAmIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0lSUV9FTl9Nc2sgPyB0cnVlIDogZmFsc2U7IFwKKyAgICAgICAgbGFzdF92YWx1ZSA9IFRJTUVSMS0+Q0FQVElNX1JFTE9BRF9SRUcgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KSBUSU1FUjEtPkNBUFRJTV9SRUxPQURfSElHSF9SRUcpIDw8IDE2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHRpbWVyMV9pcnFfZW4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUSU1FUjEtPkNBUFRJTV9DVFJMX1JFRyAmPSB+VElNRVIxX0NBUFRJTV9DVFJMX1JFR19DQVBUSU1fSVJRX0VOX01zazsgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVElNRVIxLT5DQVBUSU1fUkVMT0FEX1JFRyA9ICh1aW50MTZfdCkgdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVElNRVIxLT5DQVBUSU1fUkVMT0FEX0hJR0hfUkVHID0gKHVpbnQxNl90KSAoKHZhbHVlKSA+PiAxNik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHRpbWVyMV9pcnFfZW4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUSU1FUjEtPkNBUFRJTV9DVFJMX1JFRyB8PSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9JUlFfRU5fTXNrOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgR2V0IHRyaWdnZXIgdmFsdWUKKyAqCisgKiBccmV0dXJuIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB0cmlnZ2VyIChwcmVzY2FsZWQpLgorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBod190aW1lcjFfZ2V0X3RyaWdnZXIodm9pZCkKK3sKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgICAgIHJldHVybiBUSU1FUjEtPkNBUFRJTV9SRUxPQURfUkVHOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIFRJTUVSMS0+Q0FQVElNX1JFTE9BRF9SRUcgfCAoKHVpbnQzMl90KSBUSU1FUjEtPkNBUFRJTV9SRUxPQURfSElHSF9SRUcpIDw8IDE2OworI2VuZGlmCit9CisKKy8qKgorICogXGJyaWVmIFNldCBhbiAiaW52YWxpZCIgdHJpZ2dlciB2YWx1ZSwgd2hpY2ggcmVmZXJzIGZhciBhd2F5IGluIHRoZSBmdXR1cmUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfaW52YWxpZGF0ZV90cmlnZ2VyKHZvaWQpICBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfaW52YWxpZGF0ZV90cmlnZ2VyKHZvaWQpCit7CisgICAgICAgIHVpbnQzMl90IGxwX2N1cnJlbnRfdGltZTsgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXNjYWxlZAorICAgICAgICB1aW50MzJfdCB0cmlnZ2VyOworICAgICAgICB1aW50MzJfdCBkdW1teSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKTsKKworICAgICAgICBscF9jdXJyZW50X3RpbWUgPSBod190aW1lcjFfZ2V0X3ZhbHVlKCk7ICAgICAgICAvLyBHZXQgY3VycmVudCB0aW1lCisgICAgICAgIHRyaWdnZXIgPSAobHBfY3VycmVudF90aW1lIC0gMSkgJiBMUF9DTlRfUFJFU0NBTEVEX01BU0s7ICAvLyBHZXQgYW4gImludmFsaWQiIHRyaWdnZXIKKyAgICAgICAgSFdfVElNRVIxX1NFVF9UUklHR0VSKHRyaWdnZXIsIGR1bW15KTsgICAgICAgICAgLy8gTW92ZSB0cmlnZ2VyIHRvbyBmYXIgaW4gdGhlIGZ1dHVyZSBzbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IG5vIGludGVycnVwdCBmcm9tIHRoZSB0aW1lciBhcnJpdmVzLgorfQorCisjZW5kaWYgLy8gZGdfY29uZmlnVVNFUl9DQU5fVVNFX1RJTUVSMQorCisKKy8qKgorICogXGJyaWVmIEVuYWJsZSB0aGUgdGltZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfZW5hYmxlKHZvaWQpCit7CisgICAgICAgIEhXX1RJTUVSMV9SRUdfU0VURihDVFJMLCBDQVBUSU1fRU4sIDEpOworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQ0xLX1RNUl9SRUcsIFRNUjFfRU5BQkxFKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgdGhlIHRpbWVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX2Rpc2FibGUodm9pZCkKK3sKKyAgICAgICAgSFdfVElNRVIxX1JFR19TRVRGKENUUkwsIENBUFRJTV9FTiwgMCk7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMV9FTkFCTEUpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgVGltZXIgUFdNIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBTaG9ydGN1dCB0byBjYWxsIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uCisgKgorICogXHBhcmFtIFtpbl0gY2ZnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3ZvaWQgaHdfdGltZXIxX2NvbmZpZ3VyZV9wd20oY29uc3QgdGltZXIxX2NvbmZpZ19wd20gKmNmZyk7CisKKy8qKgorICogXGJyaWVmIFNldCBQV00gZnJlcXVlbmN5IHByZXNjYWxlcgorICoKKyAqIEFjdHVhbCBQV00gZnJlcXVlbmN5IGlzIFxwIHB3bV9mcmVxID0gXHAgdGltZXJfZnJlcSAvIChccCB2YWx1ZSArIDEpCisgKgorICogXHBhcmFtIFtpbl0gdmFsdWUgUFdNIGZyZXF1ZW5jeSBkZWZpbmVkIGFzIGFib3ZlCisgKgorICogXHNhIGh3X3RpbWVyMV9zZXRfcHJlc2NhbGVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX3NldF9wd21fZnJlcSh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICAgICAgVElNRVIxLT5DQVBUSU1fUFdNX0ZSRVFfUkVHID0gdmFsdWU7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBQV00gZHV0eSBjeWNsZQorICoKKyAqIEFjdHVhbHkgUFdNIGR1dHkgY3ljbGUgaXMgXHAgcHdtX2RjID0gXHAgdmFsdWUgLyAoXHAgcHdtX2ZyZXEgKyAxKQorICoKKyAqIFxwYXJhbSBbaW5dIHZhbHVlIFBXTSBkdXR5IGN5Y2xlIGRlZmluZWQgYXMgYWJvdmUKKyAqCisgKiBcc2EgaHdfdGltZXIxX3NldF9wd21fZnJlcQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9zZXRfcHdtX2R1dHlfY3ljbGUodWludDE2X3QgdmFsdWUpCit7CisgICAgICAgIFRJTUVSMS0+Q0FQVElNX1BXTV9EQ19SRUcgPSB2YWx1ZTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IFBXTSBmcmVxdWVuY3kgcHJlc2NhbGVyCisgKgorICogQWN0dWFsIFBXTSBmcmVxdWVuY3kgaXMgXHAgcHdtX2ZyZXEgPSBccCB0aW1lcl9mcmVxIC8gKFxwIHJldHZhbCArIDEpCisgKgorICogXHJldHVybiBQV00gZnJlcXVlbmN5IGFzIGRlZmluZWQgYWJvdmUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgaHdfdGltZXIxX2dldF9wd21fZnJlcSh2b2lkKQoreworICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fUFdNX0ZSRVFfUkVHOworfQorCisvKioKKyAqIFxicmllZiBHZXQgUFdNIGR1dHkgY3ljbGUKKyAqCisgKiBBY3R1YWx5IFBXTSBkdXR5IGN5Y2xlIGlzIFxwIHB3bV9kYyA9IFxwIHJldHZhbCAvIChccCBwd21fZnJlcSArIDEpCisgKgorICogXHJldHVybiBQV00gZHV0eSBjeWNsZSBhcyBkZWZpbmVkIGFib3ZlCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGh3X3RpbWVyMV9nZXRfcHdtX2R1dHlfY3ljbGUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFRJTUVSMS0+Q0FQVElNX1BXTV9EQ19SRUc7Cit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfVElNRVIxICovCisKKyNlbmRpZiAvKiBIV19USU1FUjFfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfdHJuZy5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od190cm5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwOTI0MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfdHJuZy5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X3RybmcuaAorICoKKyAqIEBicmllZiBEZWZpbml0aW9uIG9mIEFQSSBmb3IgdGhlIFRydWUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEhXX1RSTkdfSF8KKyNkZWZpbmUgSFdfVFJOR19IXworCisjaWYgZGdfY29uZmlnVVNFX0hXX1RSTkcKKworI2luY2x1ZGUgPHNka19kZWZzLmg+CisKKy8qKgorICogXGJyaWVmIFRSTkcgY2FsbGJhY2suCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIFRSTkcgZHJpdmVyIHdoZW4gdGhlIGludGVycnVwdCBpcyBmaXJlZC4KKyAqCisgKiBcbm90ZSBJZiB0aGUgVFJORyBpcyBub3QgbmVlZGVkIGFueW1vcmUgdGhlIGh3X3RybmdfZGlzYWJsZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGluIHRoZQorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2F2ZSBwb3dlci4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKmh3X3RybmdfY2IpKHZvaWQpOworCisvKioKKyAqIFxicmllZiBUUk5HIGVuYWJsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIFRSTkcuIElmIGNhbGxiYWNrIGlzIG5vdCBOVUxMIGl0IHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBUUk5HIGludGVycnVwdAorICogb2NjdXJzLiBUaGUgaW50ZXJydXB0IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBUUk5HIEZJRk8gaXMgZnVsbC4KKyAqCisgKiBccGFyYW0gW2luXSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiBhIFRSTkcgaW50ZXJydXB0IG9jY3Vycy4KKyAqCisgKiBcbm90ZSBJZiB0aGUgYW1vdW50IG9mIHJhbmRvbSBudW1iZXJzIG5lZWRlZCBpcyBsZXNzIHRoYW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBGSUZPIGl0IGlzIGZhc3RlcgorICogYW5kIG1vcmUgcG93ZXIgZWZmaWNpZW50IHRvIHVzZSBhIHdhaXQgbG9vcCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBod190cm5nX2dldF9maWZvX2xldmVsCisgKiBmdW5jdGlvbi4gSWYgdGhlIEZJRk8gaGFzIHRoZSByZXF1aXJlZCBsZXZlbCB1c2UgdGhlIGh3X3RybmdfZ2V0X251bWJlcnMgZnVuY3Rpb24gdG8gZ2V0IHRoZQorICogcmFuZG9tIG51bWJlcnMuCisgKgorICovCit2b2lkIGh3X3RybmdfZW5hYmxlKGh3X3RybmdfY2IgY2FsbGJhY2spOworCisvKioKKyAqIFxicmllZiBHZXQgYSByYW5kb20gbnVtYmVyIGZyb20gVFJORy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIGEgcmFuZG9tIG51bWJlciBmcm9tIHRoZSBUUk5HIEZJRk8uCisgKgorICogXHJldHVybiBBIDMyLWJpdCB1bnNpZ25lZCByYW5kb20gbnVtYmVyLgorICoKKyAqIFx3YXJuaW5nIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIG51bWJlciBhdmFpbGFiaWxpdHkgaW4gdGhlIEZJRk8KKyAqCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBzdGF0aWMgaW5saW5lIHVpbnQzMl90IGh3X3RybmdfZ2V0X251bWJlcih2b2lkKQoreworICAgICAgICByZXR1cm4gKigodm9sYXRpbGUgdWludDMyX3QgKilNRU1PUllfVFJOR19GSUZPKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHJhbmRvbSBudW1iZXJzIGZyb20gVFJORy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgYnVmZmVyIHdpdGggcmFuZG9tIG51bWJlcnMgcmVhZCBmcm9tIHRoZSBUUk5HIEZJRk8uCisgKgorICogXHBhcmFtIFtpbl0gYnVmZmVyIFRoZSBidWZmZXIgdG8gd3JpdGUgdGhlIG51bWJlcnMgdG8uCisgKiBccGFyYW0gW2luXSBzaXplIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG1heCAzMikuCisgKgorICogXG5vdGUgRG8gbm90IGZvcmdldCB0byBkaXNhYmxlIHRoZSBUUk5HIGFmdGVyIHJlYWRpbmcgdGhlIGFtb3VudCBvZiBudW1iZXJzIG5lZWRlZCB0byBzYXZlCisgKiBwb3dlci4KKyAqCisgKiBcd2FybmluZyBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIGZvciBudW1iZXIgYXZhaWxhYmlsaXR5IGluIHRoZSBGSUZPCisgKgorICovCit2b2lkIGh3X3RybmdfZ2V0X251bWJlcnModWludDMyX3QqIGJ1ZmZlciwgdWludDhfdCBzaXplKTsKKworLyoqCisgKiBcYnJpZWYgVFJORyBnZXQgRklGTyBsZXZlbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgbGV2ZWwgb2YgdGhlIFRSTkcgRklGTy4KKyAqCisgKiBccmV0dXJuIFRoZSBjdXJyZW50IGxldmVsIG9mIHRoZSBUUk5HIEZJRk8uCisgKgorICovCitfX1JFVEFJTkVEX0NPREUgdWludDhfdCBod190cm5nX2dldF9maWZvX2xldmVsKHZvaWQpOworCisvKioKKyAqIFxicmllZiBUUk5HIGRpc2FibGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBzdG9wcyBUUk5HLCBkaXNhYmxlcyBpdHMgY2xvY2sgYW5kIGl0cyBpbnRlcnJ1cHQuCisgKgorICovCit2b2lkIGh3X3RybmdfZGlzYWJsZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU3RvcCBUUk5HIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3Rybmdfc3RvcCh2b2lkKQoreworICAgICAgICBSRUdfQ0xSX0JJVChUUk5HLCBUUk5HX0NUUkxfUkVHLCBUUk5HX0VOQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgVFJORyBjbG9jay4KKyAqLwordm9pZCBod190cm5nX2Rpc2FibGVfY2xrKHZvaWQpOworCisvKioKKyAqIFxicmllZiBEaXNhYmxlIFRSTkcgaW50ZXJydXB0LgorICovCit2b2lkIGh3X3RybmdfZGlzYWJsZV9pbnRlcnJ1cHQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIENsZWFyIFRSTkcgcGVuZGluZyBpbnRlcnJ1cHQuCisgKi8KK3ZvaWQgaHdfdHJuZ19jbGVhcl9wZW5kaW5nKHZvaWQpOworCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX1RSTkcgKi8KKworI2VuZGlmIC8qIEhXX1RSTkdfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od191YXJ0LmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTg4NTMzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od191YXJ0LmgKQEAgLTAsMCArMSwxMjUwIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBVQVJUCisgKiBceworICogXGJyaWVmIFVBUlQgQ29udHJvbGxlcgorICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfdWFydC5oCisgKgorICogQGJyaWVmIERlZmluaXRpb24gb2YgQVBJIGZvciB0aGUgVUFSVCBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgSFdfVUFSVF9IXworI2RlZmluZSBIV19VQVJUX0hfCisKKyNpZiBkZ19jb25maWdVU0VfSFdfVUFSVAorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHNka19kZWZzLmg+CisjaW5jbHVkZSAiaHdfZG1hLmgiCisKKyNpZm5kZWYgSFdfVUFSVF9VU0VfRE1BX1NVUFBPUlQKKyMgIGRlZmluZSBIV19VQVJUX1VTRV9ETUFfU1VQUE9SVAkxCisjZW5kaWYKKworI2RlZmluZSBVQkEoaWQpICAgICAgICAgKChVQVJUMl9UeXBlICopaWQpCisjZGVmaW5lIEhXX1VBUlQxICAgICAgICAoKHVpbnQxNl90ICopVUFSVF9CQVNFKQorI2RlZmluZSBIV19VQVJUMiAgICAgICAgKCh1aW50MTZfdCAqKVVBUlQyX0JBU0UpCit0eXBlZGVmIHVpbnQxNl90ICogSFdfVUFSVF9JRDsKKworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIG1hc2sgb2YgYSBmaWVsZCBvZiBhIFVBUlQgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gaW5zdGFuY2UgaWRlbnRpZmllcyB0aGUgVUFSVCBpbnN0YW5jZSB0byB1c2UgKGVtcHR5OiBVQVJULCAyOiBVQVJUMikKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gYWNjZXNzCisgKgorICogXG5vdGUgVGhlIHN0cmlwcGVkIHJlZ2lzdGVyIG5hbWUgc2hvdWxkIGJlIHByb3ZpZGVkLCBlLmcuOgorICogICAgICAgIC0gdG8gZ2V0IFVBUlRfVUFSVF9VU1JfUkVHX1VBUlRfQlVTWV9Nc2ssIHVzZQorICogICAgICAgICAgICAgIEhXX1VBUlRfUkVHX0ZJRUxEX01BU0soLCBVU1IsIFVBUlRfQlVTWSkKKyAqICAgICAgICAtIHRvIGdldCBVQVJUMl9VQVJUMl9TRkVfUkVHX1VBUlRfU0hBRE9XX0ZJRk9fRU5BQkxFX01zaywgdXNlCisgKiAgICAgICAgICAgICAgSFdfVUFSVF9SRUdfRklFTERfTUFTSygyLCBTRkUsIFVBUlRfU0hBRE9XX0ZJRk9fRU5BQkxFKQorICoKKyAqLworI2RlZmluZSBIV19VQVJUX1JFR19GSUVMRF9NQVNLKGluc3RhbmNlLCByZWcsIGZpZWxkKSBcCisgICAgICAgIChVQVJUIyNpbnN0YW5jZSMjX1VBUlQjI2luc3RhbmNlIyNfIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBiaXQgcG9zaXRpb24gb2YgYSBmaWVsZCBvZiBhIFVBUlQgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gaW5zdGFuY2UgaWRlbnRpZmllcyB0aGUgVUFSVCBpbnN0YW5jZSB0byB1c2UgKGVtcHR5OiBVQVJULCAyOiBVQVJUMikKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gYWNjZXNzCisgKgorICogXG5vdGUgVGhlIHN0cmlwcGVkIHJlZ2lzdGVyIG5hbWUgc2hvdWxkIGJlIHByb3ZpZGVkLCBlLmcuOgorICogICAgICAgIC0gdG8gZ2V0IFVBUlRfVUFSVF9VU1JfUkVHX1VBUlRfQlVTWV9Qb3MsIHVzZQorICogICAgICAgICAgICAgIEhXX1VBUlRfUkVHX0ZJRUxEX1BPUygsIFVTUiwgVUFSVF9CVVNZKQorICogICAgICAgIC0gdG8gZ2V0IFVBUlQyX1VBUlQyX1NGRV9SRUdfVUFSVF9TSEFET1dfRklGT19FTkFCTEVfUG9zLCB1c2UKKyAqICAgICAgICAgICAgICBIV19VQVJUX1JFR19GSUVMRF9QT1MoMiwgU0ZFLCBVQVJUX1NIQURPV19GSUZPX0VOQUJMRSkKKyAqCisgKi8KKyNkZWZpbmUgSFdfVUFSVF9SRUdfRklFTERfUE9TKGluc3RhbmNlLCByZWcsIGZpZWxkKSBcCisgICAgICAgIChVQVJUIyNpbnN0YW5jZSMjX1VBUlQjI2luc3RhbmNlIyNfIyNyZWcjI19SRUdfIyNmaWVsZCMjX1BvcykKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkIG9mIGEgVUFSVCByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSBpZCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIHdyaXRlCisgKgorICogXHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIGZpZWxkCisgKgorICovCisjZGVmaW5lIEhXX1VBUlRfUkVHX0dFVEYoaWQsIHJlZywgZmllbGQpIFwKKyAgICAgICAgICAgICAgICAoKFVCQShpZCktPlVBUlQyXyMjcmVnIyNfUkVHICYgKFVBUlQyX1VBUlQyXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Nc2spKSA+PiAoVUFSVDJfVUFSVDJfIyNyZWcjI19SRUdfIyNmaWVsZCMjX1BvcykpCisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgdmFsdWUgb2YgYSBmaWVsZCBvZiBhIFVBUlQgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gaWQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byB3cml0ZQorICogXHBhcmFtIFtpbl0gbmV3X3ZhbCBpcyB0aGUgdmFsdWUgdG8gd3JpdGUKKyAqCisgKi8KKyNkZWZpbmUgSFdfVUFSVF9SRUdfU0VURihpZCwgcmVnLCBmaWVsZCwgbmV3X3ZhbCkgXAorICAgICAgICAgICAgICAgIFVCQShpZCktPlVBUlQyXyMjcmVnIyNfUkVHID0gKChVQkEoaWQpLT5VQVJUMl8jI3JlZyMjX1JFRyAmIH4oVUFSVDJfVUFSVDJfIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykpIHwgXAorICAgICAgICAgICAgICAgICgoVUFSVDJfVUFSVDJfIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykgJiAoKG5ld192YWwpIDw8IChVQVJUMl9VQVJUMl8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfUG9zKSkpKQorCisKKworLyoKKyAqIEVOVU1FUkFUSU9OIERFRklOSVRJT05TCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKioKKyAqIFxicmllZiBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gY29kZXMKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1VBUlRfSU5UX01PREVNX1NUQVQgICAgICAgICA9IDAsCisgICAgICAgIEhXX1VBUlRfSU5UX05PX0lOVF9QRU5EICAgICAgICA9IDEsCisgICAgICAgIEhXX1VBUlRfSU5UX1RIUl9FTVBUWSAgICAgICAgICA9IDIsCisgICAgICAgIEhXX1VBUlRfSU5UX1JFQ0VJVkVEX0FWQUlMQUJMRSA9IDQsCisgICAgICAgIEhXX1VBUlRfSU5UX1JFQ0VJVkVfTElORV9TVEFUICA9IDYsCisgICAgICAgIEhXX1VBUlRfSU5UX0JVU1lfREVURUNURUQgICAgICA9IDcsCisgICAgICAgIEhXX1VBUlRfSU5UX1RJTUVPVVQgICAgICAgICAgICA9IDEyLAorfSBIV19VQVJUX0lOVDsKKworLyoqCisgKiBcYnJpZWYgQmF1ZCByYXRlcyBkaXZpZGVycworICoKKyAqIFRoZSBkZWZpbmVkIHZhbHVlcyBjb21wcmlzZSB0aGUgdmFsdWVzIG9mIDMgcmVnaXN0ZXJzOiBETEgsIERMTCwgRExGLgorICogVGhlIGVuY29kaW5nIG9mIHRoZSB2YWx1ZXMgZm9yIGVhY2ggcmVnaXN0ZXIgaXM6CisgKgorICogKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworICogfCB1bnVzZWQgfCAgIERMSCAgfCAgIERMTCAgfCAgIERMRiAgfAorICogKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfVUFSVF9CQVVEUkFURV8xMDAwMDAwICAgPSAweDAwMDAwMTAwLAorICAgICAgICBIV19VQVJUX0JBVURSQVRFXzUwMDAwMCAgICA9IDB4MDAwMDAyMDAsCisgICAgICAgIEhXX1VBUlRfQkFVRFJBVEVfMjMwNDAwICAgID0gMHgwMDAwMDQwNSwKKyAgICAgICAgSFdfVUFSVF9CQVVEUkFURV8xMTUyMDAgICAgPSAweDAwMDAwODBiLAorICAgICAgICBIV19VQVJUX0JBVURSQVRFXzU3NjAwICAgICA9IDB4MDAwMDExMDYsCisgICAgICAgIEhXX1VBUlRfQkFVRFJBVEVfMzg0MDAgICAgID0gMHgwMDAwMWEwMSwKKyAgICAgICAgSFdfVUFSVF9CQVVEUkFURV8yODgwMCAgICAgPSAweDAwMDAyMjBjLAorICAgICAgICBIV19VQVJUX0JBVURSQVRFXzE5MjAwICAgICA9IDB4MDAwMDM0MDEsCisgICAgICAgIEhXX1VBUlRfQkFVRFJBVEVfMTQ0MDAgICAgID0gMHgwMDAwNDUwNywKKyAgICAgICAgSFdfVUFSVF9CQVVEUkFURV85NjAwICAgICAgPSAweDAwMDA2ODAzLAorICAgICAgICBIV19VQVJUX0JBVURSQVRFXzQ4MDAgICAgICA9IDB4MDAwMGQwMDUsCit9IEhXX1VBUlRfQkFVRFJBVEU7CisKKy8qKgorICogXGJyaWVmIENoYXJhY3RlciBmb3JtYXQKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1VBUlRfREFUQUJJVFNfNSAgICAgICAgPSAwLAorICAgICAgICBIV19VQVJUX0RBVEFCSVRTXzYgICAgICAgID0gMSwKKyAgICAgICAgSFdfVUFSVF9EQVRBQklUU183ICAgICAgICA9IDIsCisgICAgICAgIEhXX1VBUlRfREFUQUJJVFNfOCAgICAgICAgPSAzLAorfSBIV19VQVJUX0RBVEFCSVRTOworCisvKioKKyAqIFxicmllZiBQYXJpdHkKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1VBUlRfUEFSSVRZX05PTkUgICAgID0gMCwKKyAgICAgICAgSFdfVUFSVF9QQVJJVFlfT0REICAgICAgPSAxLAorICAgICAgICBIV19VQVJUX1BBUklUWV9FVkVOICAgICA9IDMsCit9IEhXX1VBUlRfUEFSSVRZOworCisvKioKKyAqIFxicmllZiBTdG9wIGJpdHMKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1VBUlRfU1RPUEJJVFNfMSA9IDAsCisgICAgICAgIC8qKjwgVGhlIG51bWJlciBvZiBzdG9wIGJpdHMgaXMgMS41IGlmIGEgY2hhcmFjdGVyIGZvcm1hdCB3aXRoIDUgYml0IGlzIGNob3NlbiAqLworICAgICAgICBIV19VQVJUX1NUT1BCSVRTXzIgPSAxLCAgICAgICAgIC8qKjwgU3RvcCBiaXQgMiAqLworfSBIV19VQVJUX1NUT1BCSVRTOworCisvKioKKyAqIFxicmllZiBVQVJUIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGRlZmluaXRpb24KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgLy8gQmF1ZCByYXRlIGRpdmlzb3IKKyAgICAgICAgSFdfVUFSVF9CQVVEUkFURSAgICAgICAgYmF1ZF9yYXRlOworICAgICAgICBIV19VQVJUX0RBVEFCSVRTICAgICAgICBkYXRhOjI7CisgICAgICAgIEhXX1VBUlRfUEFSSVRZICAgICAgICAgIHBhcml0eToyOworICAgICAgICBIV19VQVJUX1NUT1BCSVRTICAgICAgICBzdG9wOjE7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGF1dG9fZmxvd19jb250cm9sOjE7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIHVzZV9kbWE6MTsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgdXNlX2ZpZm86MTsKKworICAgICAgICBIV19ETUFfQ0hBTk5FTCAgICAgICAgICB0eF9kbWFfY2hhbm5lbDo0OworICAgICAgICBIV19ETUFfQ0hBTk5FTCAgICAgICAgICByeF9kbWFfY2hhbm5lbDo0OworfSB1YXJ0X2NvbmZpZzsKKworLyoqCisgKiBcYnJpZWYgVUFSVCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBkZWZpbml0aW9uIChleHRlbmRlZCB2ZXJzaW9uKQorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICAvLyBCYXVkIHJhdGUgZGl2aXNvcgorICAgICAgICBIV19VQVJUX0JBVURSQVRFICAgICAgICBiYXVkX3JhdGU7CisgICAgICAgIEhXX1VBUlRfREFUQUJJVFMgICAgICAgIGRhdGE6MjsKKyAgICAgICAgSFdfVUFSVF9QQVJJVFkgICAgICAgICAgcGFyaXR5OjI7CisgICAgICAgIEhXX1VBUlRfU1RPUEJJVFMgICAgICAgIHN0b3A6MTsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgYXV0b19mbG93X2NvbnRyb2w6MTsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgdXNlX2RtYToxOworICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICB1c2VfZmlmbzoxOworICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICB0eF9maWZvX3RyX2x2bDoyOworICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICByeF9maWZvX3RyX2x2bDoyOworCisgICAgICAgIEhXX0RNQV9DSEFOTkVMICAgICAgICAgIHR4X2RtYV9jaGFubmVsOjQ7CisgICAgICAgIEhXX0RNQV9DSEFOTkVMICAgICAgICAgIHJ4X2RtYV9jaGFubmVsOjQ7Cit9IHVhcnRfY29uZmlnX2V4OworCisjaWZkZWYgSFdfVUFSVF9FTkFCTEVfVVNFUl9JU1IKKy8qKgorICogXGJyaWVmIFVzZXIgZGVmaW5lZCBpbnRlcnJ1cHQgZnVuY3Rpb24KKyAqCisgKiBVc2VyIGNvZGUgZG9lcyBub3QgbmVlZCB0byBoYW5kbGUgaW50ZXJydXB0cy4gSW50ZXJydXB0cyBhcmUgaGFuZGxlZCBieSB0aGUgZHJpdmVyLgorICogSWYgZm9yIHNvbWUgcmVhc29uIHRoZSB1c2VyIG5lZWQgdG8gaGFuZGxlIGludGVycnVwdHMgZGlmZmVyZW50bHkgaXQgaXMgcG9zc2libGUgdG8KKyAqIHNldCBhIGRpZmZlcmVudCBJU1IgdmlhIGh3X3VhcnRfc2V0X2lzcih1YXJ0X2lkLCB1c2VyX2lzcikuCisgKiBJbiB0aGF0IGNhc2UsIHRoZSB1c2VyLWRlZmluZWQgSVNSIG11c3QgaGFuZGxlIGFsbCBVQVJUIGludGVycnVwdHMgYXMgcmVxdWlyZWQuCisgKgorICogXHNhIGh3X3VhcnRfc2V0X2lzcgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqaHdfdWFydF9pbnRlcnJ1cHRfaXNyKSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU2V0dXAgdXNlciBkZWZpbmVkIGludGVycnVwdCBmdW5jdGlvbiBmb3IgdWFydAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUCisgKiBccGFyYW0gW2luXSBpc3IgdXNlciBkZWZpbmVkIGludGVycnVwdCBoYW5kbGVyCisgKgorICovCit2b2lkIGh3X3VhcnRfc2V0X2lzcihIV19VQVJUX0lEIHVhcnQsIGh3X3VhcnRfaW50ZXJydXB0X2lzciBpc3IpOworI2VuZGlmCisKK3R5cGVkZWYgdm9pZCAoKmh3X3VhcnRfdHhfY2FsbGJhY2spKHZvaWQgKnVzZXJfZGF0YSwgdWludDE2X3Qgd3JpdHRlbik7Cit0eXBlZGVmIHZvaWQgKCpod191YXJ0X3J4X2NhbGxiYWNrKSh2b2lkICp1c2VyX2RhdGEsIHVpbnQxNl90IHJlYWQpOworCisvLz09PT09PT09PT09PT09PT09PT09PT09IFN0YXR1cyBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIGEgc2VyaWFsIHRyYW5zZmVyIGlzIGlucHJvZ3Jlc3MKKyAqCisgKiBccmV0dXJuIHRydWUgb3IgZmFsc2UKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3VhcnRfaXNfYnVzeShIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIHJldHVybiBIV19VQVJUX1JFR19HRVRGKHVhcnQsIFVTUiwgVUFSVF9CVVNZKTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT0gUmVhZC9Xcml0ZSBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoqCisgKiBcYnJpZWYgUmVhZCBvbmUgYnl0ZSBmcm9tIFVBUlQKKyAqCisgKiBUaGlzIGlzIGJsb2NraW5nIGZ1bmN0aW9uIHRvIHJlYWQgc2luZ2xlIGJ5dGUgZnJvbSBVQVJULgorICogVUFSVCBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdGhlIHJlY2VpdmVkIGJ5dGUKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF9yZWFkKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIFdyaXRlIG9uZSBieXRlIHRvIFVBUlQKKyAqCisgKiBGdW5jdGlvbiB3YWl0IHRpbGwgb3V0cHV0IEZJRk8gaGFzIGVtcHR5IHNwYWNlIGFjY29yZGluZyB0bworICogdGhyZXNob2xkIGxldmVsLCBhbmQgcHV0cyBieXRlIHRvIGJlIHRyYW5zbWl0dGVkLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gZGF0YSBieXRlIHRvIGJlIHdyaXR0ZW4KKyAqCisgKi8KK3ZvaWQgaHdfdWFydF93cml0ZShIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgZGF0YSk7CisKKy8qKgorICogXGJyaWVmIFN0b3AgYXN5bmNocm9ub3VzIHJlYWQgZnJvbSBVQVJUCisgKgorICogSWYgdGhlcmUgaXMgb3V0c3RhbmRpbmcgcmVhZCBvbiBnaXZlbiBVQVJUIGl0IHdpbGwgYmUgc3RvcHBlZC4KKyAqIENhbGxiYWNrIHdpbGwgYmUgZmlyZWQgd2l0aCBkYXRhIGFscmVhZHkgcHJlc2VudCBpbiBidWZmZXIuCisgKiBDYWxsYmFjayBtYXkgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGluIHRoZSBtZWFudGltZSBidXQgd2lsbCBiZSBjYWxsZWQKKyAqIG9ubHkgb25jZS4KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWNlaXZlZAorICoKKyAqLwordWludDE2X3QgaHdfdWFydF9hYm9ydF9yZWNlaXZlKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIEdldCBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IHJlY2VpdmVkIGJ5IGFzeW5jaHJvbm91cyByZWFkCisgKgorICogSWYgdGhlcmUgaXMgb3V0c3RhbmRpbmcgcmVhZCBvbiBnaXZlbiBVQVJUIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIG9mCisgKiBieXRlIGN1cnJlbnRseSByZWNlaXZlZC4KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKi8KK3VpbnQxNl90IGh3X3VhcnRfcGVla19yZWNlaXZlZChIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBSZWFkIHJlY2VpdmUgYnVmZmVyIHJlZ2lzdGVyCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiB0aGUgcmVhZCBieXRlCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfdWFydF9yeGRhdGFfZ2V0ZihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIC8vIFJlYWQgZWxlbWVudCBmcm9tIHRoZSByZWNlaXZlIEZJRk8KKyAgICAgICAgcmV0dXJuIFVCQSh1YXJ0KS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHOworfQorCisvKioKKyAqIFxicmllZiBXcml0ZSBieXRlIHRvIHRoZSB0cmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBkYXRhIGJ5dGUgdG8gYmUgd3JpdHRlbgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfdHhkYXRhX3NldGYoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IGRhdGEpCit7CisgICAgICAgIC8vIFdyaXRlIGRhdGEgdG8gdGhlIHRyYW5zbWl0IEZJRk8KKyAgICAgICAgVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUcgPSBkYXRhOworfQorCisvKioKKyAqIFxicmllZiBXcml0ZXMgbnVtYmVyIG9mIGJ5dGVzIHRvIFVBUlQgc3luY2hyb25vdXNseQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmluaXNoZXMgd2hlbiBhbGwgZGF0YSBpcyBwdXQgaW4gRklGTy4gSXQgZG9lcyBub3Qgd2FpdCBmb3IgZGF0YSB0byBiZSB0cmFuc21pdHRlZAorICogb3V0IGZyb20gVUFSVC4gQ2FsbCBcc2EgaHdfdWFydF9pc190eF9maWZvX2VtcHR5KCkgdG8gd2FpdCBmb3IgdHJhbnNtaXNzaW9uIHRvIGZpbmlzaC4KKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIGludGVycnVwdHMgbm9yIERNQS4KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIGRhdGEgZGF0YSB0byBiZSB3cml0dGVuCisgKiBccGFyYW0gW2luXSBsZW4gbGVuZ3RoIG9mIHRvIGJlIHdyaXR0ZW4KKyAqCisgKi8KK3ZvaWQgaHdfdWFydF93cml0ZV9idWZmZXIoSFdfVUFSVF9JRCB1YXJ0LCBjb25zdCB2b2lkICpkYXRhLCB1aW50MTZfdCBsZW4pOworCisvKioKKyAqIFxicmllZiBXcml0ZXMgbnVtYmVyIG9mIGJ5dGVzIHRvIFVBUlQKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIGRhdGEgZGF0YSB0byBiZSB3cml0dGVuCisgKiBccGFyYW0gW2luXSBsZW4gbGVuZ3RoIG9mIHRvIGJlIHdyaXR0ZW4KKyAqIFxwYXJhbSBbaW5dIGNiIGZ1bmN0aW9uIHRvIGNhbGwgZnJvbSBpbnRlcnJ1cHQgd2hlbiB0cmFuc21pc3Npb24gZW5kcworICogXHBhcmFtIFtpbl0gdXNlcl9kYXRhIHBhcmFtZXRlciBwYXNzZWQgdG8gY2IgZnVuY3Rpb24KKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9zZW5kKEhXX1VBUlRfSUQgdWFydCwgY29uc3Qgdm9pZCAqZGF0YSwgdWludDE2X3QgbGVuLCBod191YXJ0X3R4X2NhbGxiYWNrIGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIFxicmllZiBSZWFkIG51bWJlciBvZiBieXRlcyBmcm9tIFVBUlQgc3luY2hyb25vdXNseQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgdG8gcmVjZWl2ZSBccCBsZW4gYnl0ZXMgZnJvbSBVQVJULgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgaW50ZXJydXB0cyBub3QgRE1BLCBpdCBqdXN0IHdhaXRzIGZvciBhbGwgZGF0YSB0byBhcml2ZS4KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbb3V0XSBkYXRhIGJ1ZmZlciBmb3IgaW5jb21pbmcgZGF0YQorICogXHBhcmFtIFtpbl0gbGVuIG51bWJlciBvZiBieXRlcyB0byByZWFkCisgKgorICovCit2b2lkIGh3X3VhcnRfcmVhZF9idWZmZXIoSFdfVUFSVF9JRCB1YXJ0LCB2b2lkICpkYXRhLCB1aW50MTZfdCBsZW4pOworCisvKioKKyAqIFxicmllZiBSZWFkIG51bWJlciBvZiBieXRlcyBmcm9tIFVBUlQKKyAqCisgKiBGdW5jdGlvbiBpbml0aWFsaXplcyBVQVJUIGZvciByZWNlaXZpbmcgZGF0YS4KKyAqIFdoZW4gXHAgbGVuIGRhdGEgaXMgcmVjZWl2ZWQgb3IgdGltZW91dCBvY2N1cnMgdXNlciBwcm92aWRlZCBjYWxsYmFjayB3aWxsIGJlIGZpcmVkIHdpdGgKKyAqIG51bWJlciBvZiBieXRlcyByZWFkIHNvIGZhci4KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbb3V0XSBkYXRhIGJ1ZmZlciBmb3IgaW5jb21pbmcgZGF0YQorICogXHBhcmFtIFtpbl0gbGVuIG1heCBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICogXHBhcmFtIFtpbl0gY2IgZnVuY3Rpb24gdG8gY2FsbCBmcm9tIGludGVycnVwdCB3aGVuIGRhdGEgaXMgcmVjZWl2ZWQKKyAqIFxwYXJhbSBbaW5dIHVzZXJfZGF0YSBwYXJhbWV0ZXIgcGFzc2VkIHRvIGNiIGZ1bmN0aW9uCisgKgorICovCit2b2lkIGh3X3VhcnRfcmVjZWl2ZShIV19VQVJUX0lEIHVhcnQsIHZvaWQgKmRhdGEsIHVpbnQxNl90IGxlbiwgaHdfdWFydF9yeF9jYWxsYmFjayBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworI2lmIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUCisKKy8qKgorICogXGJyaWVmIEFzc2lnbiBETUEgY2hhbm5lbCB0byBVQVJUIHJ4IGFuZCB0eAorICoKKyAqIEZ1bmN0aW9uIHNwZWNpZmllcyBETUEgY2hhbm5lbCB0byB1c2UgZm9yIHNwZWNpZmllZCBVQVJUIHJ4IGFuZCB0eCBGSUZPLgorICogSXQgd2lsbCBzZXR1cCBjaGFubmVsIG9ubHkgaWYgdGhlcmUgaXMgbm8gdHJhbnNtaXNzaW9uIGluIHByb2dyZXNzLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gY2hhbm5lbCBpZCBvZiBETUEgY2hhbm5lbCB0byB1c2UgZm9yIHJ4LAorICogICAgICAgICAgICAgICAgICAgICB0eCB3aWxsIHVzZSBuZXh0IGNoYW5uZWwsCisgKiAgICAgICAgICAgICAgICAgICAgIC0xIGlmIERNQSBzaG91bGQgbm90IGJlIHVzZWQKKyAqIFxwYXJhbSBbaW5dIHByaSBwcmlvcml0eSBETUFfUFJJT18wIChsb3dlc3QpLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIC4uLi4uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX1BSSU9fNyAoaGlnaGVzdCkKKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9zZXRfZG1hX2NoYW5uZWxzKEhXX1VBUlRfSUQgdWFydCwgaW50OF90IGNoYW5uZWwsIEhXX0RNQV9QUklPIHByaSk7CisKKy8qKgorICogXGJyaWVmIEFzc2lnbiBETUEgY2hhbm5lbCB0byBVQVJUIHJ4IGFuZCB0eAorICoKKyAqIEZ1bmN0aW9uIHNwZWNpZmllcyBETUEgY2hhbm5lbCB0byB1c2UgZm9yIHNwZWNpZmllZCBVQVJUIHJ4IGFuZCB0eCBGSUZPLgorICogSXQgd2lsbCBzZXR1cCBjaGFubmVsIG9ubHkgaWYgdGhlcmUgaXMgbm8gdHJhbnNtaXNzaW9uIGluIHByb2dyZXNzLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gdHhfY2hhbm5lbCBpZCBvZiBETUEgY2hhbm5lbCB0byB1c2UgZm9yIHR4OgorICogCQkJCQlIV19ETUFfQ0hBTk5FTF8wLi5IV19ETUFfQ0hBTk5FTF9JTlZBTElECisgKiBccGFyYW0gW2luXSByeF9jaGFubmVsIGlkIG9mIERNQSBjaGFubmVsIHRvIHVzZSBmb3Igcng6CisgKiAJCQkJCUhXX0RNQV9DSEFOTkVMXzAuLkhXX0RNQV9DSEFOTkVMX0lOVkFMSUQKKyAqIFxwYXJhbSBbaW5dIHByaSBwcmlvcml0eSBETUFfUFJJT18wIChsb3dlc3QpLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIC4uLi4uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX1BSSU9fNyAoaGlnaGVzdCkKKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9zZXRfZG1hX2NoYW5uZWxzX2V4KEhXX1VBUlRfSUQgdWFydCwgaW50OF90IHR4X2NoYW5uZWwsIGludDhfdCByeF9jaGFubmVsLCBIV19ETUFfUFJJTyBwcmkpOworI2VuZGlmCisKKy8vPT09PT09PT09PT09PT0gSW50ZXJydXB0IGhhbmRsaW5nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgUmVjZWl2ZWQgRGF0YSBBdmFpbGFibGUgaW50ZXJydXB0CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSByZWNkYXRhYXZhaWwgc2hvdWxkIGJlIDAgdG8gZGlzYWJsZSBhbmQgMSB0byBlbmFibGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X3JlY19kYXRhX2ludF9zZXQoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IHJlY2RhdGFhdmFpbCkKK3sKKyAgICAgICAgLy8gU2V0IEVSQkZJIGJpdCBpbiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgSUVSX0RMSCwgRVJCRklfZGxoMCwgcmVjZGF0YWF2YWlsKTsKK30KKy8qKgorICogXGJyaWVmIFNldCB0aGUgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciBlbXB0eSBpbnRlcnJ1cHQKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIHR4ZW1wdHkgc2hvdWxkIGJlIDAgdG8gZGlzYWJsZSBhbmQgMSB0byBlbmFibGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X3R4X2VtcHR5X2ludF9zZXQoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IHR4ZW1wdHkpCit7CisgICAgICAgIC8vIFNldCBFVEJFSSBiaXQgaW4gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIElFUl9ETEgsIEVUQkVJX2RsaDEsIHR4ZW1wdHkpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIExpbmUgU3RhdHVzIGludGVycnVwdAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gbGluZXN0YXQgc2hvdWxkIGJlIDAgdG8gZGlzYWJsZSBhbmQgMSB0byBlbmFibGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X2xpbmVzdGF0X2ludF9zZXQoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IGxpbmVzdGF0KQoreworICAgICAgICAvLyBTZXQgRUxTSSBiaXQgaW4gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIElFUl9ETEgsIEVMU0lfZGhsMiwgbGluZXN0YXQpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIFByb2dyYW1tYWJsZSBUSFJFIGludGVycnVwdAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gcHRocmUgc2hvdWxkIGJlIDAgdG8gZGlzYWJsZSBhbmQgMSB0byBlbmFibGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X3B0aHJlX2ludF9zZXQoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IHB0aHJlKQoreworICAgICAgICAvLyBTZXQgUFRJTUUgYml0IGluIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBJRVJfRExILCBQVElNRV9kbGg3LCBwdGhyZSk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgSW50ZXJydXB0IElECisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiBpbnRlcnJ1cHQgdHlwZQorICoKKyAqLworc3RhdGljIGlubGluZSBIV19VQVJUX0lOVCBod191YXJ0X2dldF9pbnRlcnJ1cHRfaWQoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICByZXR1cm4gKEhXX1VBUlRfSU5UKSAoVUJBKHVhcnQpLT5VQVJUMl9JSVJfRkNSX1JFRyAmIDB4Rik7Cit9CisKKy8qKgorICogXGJyaWVmIFdyaXRlIFNjcmF0Y2ggcGFkIHJlZ2lzdGVyCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSB2YWx1ZSB0aGUgdmFsdWUgdG8gYmUgd3JpdHRlbgorICoKKyAqIC93YXJuaW5nIFJlc2VydmVkIHdoZW4gcmV0YXJnZXQgaXMgdXNlZCBlbHNlIGl0IGlzIGZyZWUgdG8gdXNlLgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfd3JpdGVfc2NyKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCB2YWx1ZSkKK3sKKyAgICAgICAgVUJBKHVhcnQpLT5VQVJUMl9TQ1JfUkVHID0gdmFsdWU7Cit9CisKKy8qKgorICogXGJyaWVmIFJlYWQgU2NyYXRjaCBwYWQgcmVnaXN0ZXIKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHJlZ2lzdGVyIHZhbHVlCisgKgorICogXHdhcm5pbmcgUmVzZXJ2ZWQgd2hlbiByZXRhcmdldCBpcyB1c2VkIGVsc2UgaXQgaXMgZnJlZSB0byB1c2UuCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfdWFydF9yZWFkX3NjcihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIHJldHVybiBVQkEodWFydCktPlVBUlQyX1NDUl9SRUc7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT0gQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgYmF1ZCByYXRlIHNldHRpbmcKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIGJhdWQgcmF0ZSBvZiBzcGVjaWZpZWQgdWFydAorICoKKyAqLworSFdfVUFSVF9CQVVEUkFURSBod191YXJ0X2JhdWRyYXRlX2dldChIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBTZXQgdGhlIGJhdWQgcmF0ZQorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gYmF1ZF9yYXRlIHVhcnQgYmF1ZCByYXRlCisgKgorICovCit2b2lkIGh3X3VhcnRfYmF1ZHJhdGVfc2V0KEhXX1VBUlRfSUQgdWFydCwgSFdfVUFSVF9CQVVEUkFURSBiYXVkX3JhdGUpOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PSBGSUZPIGNvbnRyb2wgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKioKKyAqIFxicmllZiBDaGVjayBpZiB0aGVyZSBpcyBkYXRhIGF2YWlsYWJsZSBmb3IgcmVhZAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBkYXRhIHRvIHJlY2VpdmUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod191YXJ0X2lzX2RhdGFfcmVhZHkoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICByZXR1cm4gKFVCQSh1YXJ0KS0+VUFSVDJfTFNSX1JFRyAmIDEpICE9IDA7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgRklGTyBtb2RlIHNldHRpbmcKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgRklGTyBpcyBlbmFibGVkIChib3RoIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlcikKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod191YXJ0X2lzX2ZpZm9fZW5hYmxlZChIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIC8qIE9ubHkgVUFSVDIgaGFzIGEgRklGTyAqLworICAgICAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisKKyAgICAgICAgcmV0dXJuIFVBUlQyLT5VQVJUMl9TRkVfUkVHICE9IDA7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgYm90aCBGSUZPcworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfZGlzYWJsZV9maWZvKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgdWludDE2X3QgaWlyX2Zjcl9yZWcgPSBVQkEodWFydCktPlVBUlQyX0lJUl9GQ1JfUkVHOworICAgICAgICBpaXJfZmNyX3JlZyAmPSAweGZmZmU7CisgICAgICAgIFVCQSh1YXJ0KS0+VUFSVDJfSUlSX0ZDUl9SRUcgPSBpaXJfZmNyX3JlZzsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIGJvdGggRklGT3MKKyAqCisgKiBUaHJlc2hvbGRzIHNob3VsZCBiZSBzZXQgYmVmb3JlIGZvciBwcmVkaWN0YWJsZSByZXN1bHRzLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfZW5hYmxlX2ZpZm8oSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICAvKiBPbmx5IFVBUlQyIGhhcyBhIEZJRk8gKi8KKyAgICAgICAgQVNTRVJUX0VSUk9SKHVhcnQgPT0gSFdfVUFSVDIpOworCisgICAgICAgIFVBUlQyLT5VQVJUMl9TRkVfUkVHID0gMSA8PCBIV19VQVJUX1JFR19GSUVMRF9QT1MoMiwgU0ZFLCBVQVJUX1NIQURPV19GSUZPX0VOQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHJlY2VpdmUgRklGTyBpcyBub3QgZW1wdHkKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgRklGTyBpcyBub3QgZW1wdHkKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod191YXJ0X3JlY2VpdmVfZmlmb19ub3RfZW1wdHkoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICAvKiBPbmx5IFVBUlQyIGhhcyBhIEZJRk8gKi8KKyAgICAgICAgQVNTRVJUX0VSUk9SKHVhcnQgPT0gSFdfVUFSVDIpOworICAgICAgICByZXR1cm4gSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBVU1IsIFVBUlRfUkZORSkgIT0gMDsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdHJhbnNtaXQgRklGTyBpcyBub3QgZnVsbAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiBGSUZPIGlzIGZ1bGwKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod191YXJ0X3RyYW5zbWl0X2ZpZm9fbm90X2Z1bGwoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICAvKiBPbmx5IFVBUlQyIGhhcyBhIEZJRk8gKi8KKyAgICAgICAgQVNTRVJUX0VSUk9SKHVhcnQgPT0gSFdfVUFSVDIpOworICAgICAgICByZXR1cm4gSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBVU1IsIFVBUlRfVEZORikgIT0gMDsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdHJhbnNtaXQgRklGTyBpcyBlbXB0eQorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiBGSUZPIGVtcHR5CisgKgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaHdfdWFydF90cmFuc21pdF9maWZvX2VtcHR5KEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgVVNSLCBVQVJUX1RGRSkgIT0gMDsKK30KKworCisvKioKKyAqIFxicmllZiBSZWFkIG51bWJlciBvZiBieXRlIGluIHJlY2VpdmUgRklGTworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gbnVtYmVyIG9mIGJ5dGUgaW4gcmVjZWl2ZSBGSUZPCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGh3X3VhcnRfcmVjZWl2ZV9maWZvX2NvdW50KEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgLyogT25seSBVQVJUMiBoYXMgYSBGSUZPICovCisgICAgICAgIEFTU0VSVF9FUlJPUih1YXJ0ID09IEhXX1VBUlQyKTsKKworICAgICAgICByZXR1cm4gVUFSVDItPlVBUlQyX1JGTF9SRUc7Cit9CisKKy8qKgorICogXGJyaWVmIFJlYWQgbnVtYmVyIG9mIGJ5dGUgaW4gdHJhbnNtaXQgRklGTworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gbnVtYmVyIG9mIGJ5dGUgaW4gdHJhbnNtaXQgRklGTworICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBod191YXJ0X3RyYW5zbWl0X2ZpZm9fY291bnQoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICAvKiBPbmx5IFVBUlQyIGhhcyBhIEZJRk8gKi8KKyAgICAgICAgQVNTRVJUX0VSUk9SKHVhcnQgPT0gSFdfVUFSVDIpOworCisgICAgICAgIHJldHVybiBVQVJUMi0+VUFSVDJfVEZMX1JFRzsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIGxvb3BiYWNrCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF9lbmFibGVfbG9vcGJhY2soSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIE1DUiwgVUFSVF9MQiwgMSk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgbG9vcGJhY2sKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X2Rpc2FibGVfbG9vcGJhY2soSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIE1DUiwgVUFSVF9MQiwgMCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgRklGTyBtb2RlIHNldHRpbmcKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHRoZSBGSUZPIG1vZGUgdGhhdCBoYXMgYmVlbiBzZXQgaW4gdGhlIEZJRk8gQ29udHJvbCBSZWdpc3RlcjoKKyAqICAgICAgICAgMCA9IEZJRk8gbW9kZSBkaXNhYmxlZCwKKyAqICAgICAgICAgMSA9IEZJRk8gbW9kZSBlbmFibGVkCisgKgorICovCit1aW50OF90IGh3X3VhcnRfZmlmb19lbl9nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBVQVJUIEZJRk8gbW9kZQorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gZW4gc2hvdWxkIGJlIDAgdG8gZGlzYWJsZSBhbmQgMSB0byBlbmFibGUgRklGTyBtb2RlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF9maWZvX2VuX3NldGYoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IGVuKQoreworICAgICAgICAvKiBPbmx5IFVBUlQyIGhhcyBhIEZJRk8gKi8KKyAgICAgICAgQVNTRVJUX0VSUk9SKHVhcnQgPT0gSFdfVUFSVDIpOworICAgICAgICAvLyBXcml0ZSBGSUZPIEVuYWJsZSAoRklGT0UpIGJpdCBpbiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgICAgdWludDE2X3QgaWlyX2Zjcl9yZWcgPSBVQkEodWFydCktPlVBUlQyX0lJUl9GQ1JfUkVHOworICAgICAgICBpaXJfZmNyX3JlZyAmPSB+MHgxOworICAgICAgICBpaXJfZmNyX3JlZyB8PSAoZW4gJiAweDEpOworICAgICAgICBVQkEodWFydCktPlVBUlQyX0lJUl9GQ1JfUkVHID0gaWlyX2Zjcl9yZWc7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgcmVjZWl2ZSBGSUZPIHRyaWdnZXIgbGV2ZWwgYXQgd2hpY2ggdGhlCisgKiAgICAgICAgUmVjZWl2ZWQgRGF0YSBBdmFpbGFibGUgSW50ZXJydXB0IGlzIGdlbmVyYXRlZAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdGhlIHJlY2VpdmUgRklGTyB0cmlnZ2VyIGxldmVsOgorICogICAgICAgICAwID0gMSBjaGFyYWN0ZXIgaW4gdGhlIEZJRk8sCisgKiAgICAgICAgIDEgPSBGSUZPIDEvNCBmdWxsLAorICogICAgICAgICAyID0gRklGTyAxLzIgZnVsbCwKKyAqICAgICAgICAgMyA9IEZJRk8gMiBsZXNzIHRoYW4gZnVsbAorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3VhcnRfcnhfZmlmb190cl9sdmxfZ2V0ZihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIC8qIE9ubHkgVUFSVDIgaGFzIGEgRklGTyAqLworICAgICAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisgICAgICAgIHJldHVybiBVQVJUMi0+VUFSVDJfU1JUX1JFRyAmIFVBUlQyX1VBUlQyX1NSVF9SRUdfVUFSVF9TSEFET1dfUkNWUl9UUklHR0VSX01zazsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSByZWNlaXZlIEZJRk8gdHJpZ2dlciBsZXZlbCBhdCB3aGljaCB0aGUKKyAqICAgICAgICBSZWNlaXZlZCBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSB0cl9sdmwgVGhlIHJlY2VpdmUgRklGTyB0cmlnZ2VyIGxldmVsOgorICogICAgICAgICAgICAgICAgICAgIDAgPSAxIGNoYXJhY3RlciBpbiB0aGUgRklGTywKKyAqICAgICAgICAgICAgICAgICAgICAxID0gRklGTyAxLzQgZnVsbCwKKyAqICAgICAgICAgICAgICAgICAgICAyID0gRklGTyAxLzIgZnVsbCwKKyAqICAgICAgICAgICAgICAgICAgICAzID0gRklGTyAyIGxlc3MgdGhhbiBmdWxsCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF9yeF9maWZvX3RyX2x2bF9zZXRmKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCB0cl9sdmwpCit7CisgICAgICAgIC8qIE9ubHkgVUFSVDIgaGFzIGEgRklGTyAqLworICAgICAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisKKyAgICAgICAgVUFSVDItPlVBUlQyX1NSVF9SRUcgPSB0cl9sdmw7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdHJhbnNtaXQgRklGTyB0cmlnZ2VyIGxldmVsIGF0IHdoaWNoIHRoZQorICogICAgICAgIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgKFRIUkUpIEludGVycnVwdCBpcyBnZW5lcmF0ZWQKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHRoZSB0cmFuc21pdCBGSUZPIHRyaWdnZXIgbGV2ZWw6CisgKiAgICAgICAgIDAgPSBGSUZPIGVtcHR5LAorICogICAgICAgICAxID0gMiBjaGFyYWN0ZXJzIGluIHRoZSBGSUZPLAorICogICAgICAgICAyID0gRklGTyAxLzQgZnVsbCwKKyAqICAgICAgICAgMyA9IEZJRk8gMS8yIGZ1bGwKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF90eF9maWZvX3RyX2x2bF9nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgdHJhbnNtaXQgRklGTyB0cmlnZ2VyIGxldmVsIGF0IHdoaWNoIHRoZQorICogICAgICAgIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgKFRIUkUpIEludGVycnVwdCBpcyBnZW5lcmF0ZWQKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIHRyX2x2bCB0aGUgdHJhbnNtaXQgRklGTyB0cmlnZ2VyIGxldmVsOgorICogICAgICAgICAgICAgICAgICAgIDAgPSBGSUZPIGVtcHR5LAorICogICAgICAgICAgICAgICAgICAgIDEgPSAyIGNoYXJhY3RlcnMgaW4gdGhlIEZJRk8sCisgKiAgICAgICAgICAgICAgICAgICAgMiA9IEZJRk8gMS80IGZ1bGwsCisgKiAgICAgICAgICAgICAgICAgICAgMyA9IEZJRk8gMS8yIGZ1bGwKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X3R4X2ZpZm9fdHJfbHZsX3NldGYoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IHRyX2x2bCkKK3sKKyAgICAgICAgLyogT25seSBVQVJUMiBoYXMgYSBGSUZPICovCisgICAgICAgIEFTU0VSVF9FUlJPUih1YXJ0ID09IEhXX1VBUlQyKTsKKworICAgICAgICBVQVJUMi0+VUFSVDJfU1RFVF9SRUcgPSB0cl9sdmw7Cit9CisKKy8qKgorICogXGJyaWVmIFJlc2V0IFVBUlQgdHJhbnNtaXQgRklGTworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfdHhfZmlmb19mbHVzaChIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgU1JSLCBVQVJUX1hGUiwgMSk7Cit9CisKKy8qKgorICogXGJyaWVmIFJlc2V0IFVBUlQgcmVjZWl2ZSBGSUZPCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF9yeF9maWZvX2ZsdXNoKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBTUlIsIFVBUlRfUkZSLCAxKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgd2hldGhlciByZWFkaW5nIGJ1ZmZlciBpcyBlbXB0eQorICoKKyAqIFdvcmtzIGZvciBib3RoIHdoZW4gUnggRklGTyBpcyBlbmFibGVkIG9yIG5vdC4KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgbm8gZGF0YSBhdmFpbGFibGUgZm9yIHJlYWRpbmcKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod191YXJ0X3JlYWRfYnVmX2VtcHR5KEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgcmV0dXJuICFIV19VQVJUX1JFR19HRVRGKHVhcnQsIExTUiwgVUFSVF9EUik7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIHdoZXRoZXIgd3JpdGluZyBidWZmZXIgaXMgZnVsbAorICoKKyAqIFdvcmtzIGZvciBib3RoIHdoZW4gVHggRklGTyBpcyBlbmFibGVkIG9yIG5vdC4KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgdHJhbnNtaXQgYnVmZmVyIGlzIGZ1bGwKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod191YXJ0X3dyaXRlX2J1Zl9mdWxsKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgcmV0dXJuICFIV19VQVJUX1JFR19HRVRGKHVhcnQsIExTUiwgVUFSVF9USFJFKTsKK30KKworI2lmIGRnX2NvbmZpZ1VBUlRfU09GVFdBUkVfRklGTworLyoqCisgKiBcYnJpZWYgU2V0IGJ1ZmZlciB0aGF0IHdpbGwgYmUgdXNlIGZvciBpbmNvbWluZyBkYXRhIHdoZW4gdGhlcmUgaXMgbm8gcmVhZCBpbiBwcm9ncmVzcworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gYnVmIGJ1ZmZlciB0byB1c2UgYXMgc29mdHdhcmUgRklGTworICogXHBhcmFtIFtpbl0gc2l6ZSBzaXplIG9mIFxwIGJ1ZgorICoKKyAqLwordm9pZCBod191YXJ0X3NldF9zb2Z0X2ZpZm8oSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90ICpidWYsIHVpbnQ4X3Qgc2l6ZSk7CisjZW5kaWYKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0gRE1BIGNvbnRyb2wgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoqCisgKiBcYnJpZWYgU2V0IFVBUlQgRE1BIG1vZGUKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIGRtYV9tb2RlIERNQSBtb2RlIDAgb3IgMQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfZG1hX21vZGVfc2V0ZihIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgZG1hX21vZGUpCit7CisgICAgICAgIC8qIE9ubHkgVUFSVDIgaGFzIHRoZSBTRE1BTSByZWdpc3RlciAqLworICAgICAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisKKyAgICAgICAgVUFSVDItPlVBUlQyX1NETUFNX1JFRyA9ICgoZG1hX21vZGUgJiAxKSA8PCBVQVJUMl9VQVJUMl9TRE1BTV9SRUdfVUFSVF9TSEFET1dfRE1BX01PREVfUG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IFVBUlQyX1VBUlQyX1NETUFNX1JFR19VQVJUX1NIQURPV19ETUFfTU9ERV9Nc2s7Cit9CisKKy8qKgorICogXGJyaWVmIENsZWFyIERNQSByZXF1ZXN0CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF9jbGVhcl9kbWFfcmVxdWVzdChIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIFVCQSh1YXJ0KS0+VUFSVDJfRE1BU0FfUkVHID0gMTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0gTGluZSBjb250cm9sIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorICogXGJyaWVmIFNldCBVQVJUIGxpbmUgc2V0dGluZ3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemUgVUFSVCByZWdpc3RlcnMgd2l0aCBnaXZlbiBjb25maWd1cmF0aW9uLgorICogSXQgYWxzbyBpbml0aWFsaXplcyBhbGwgaW50ZXJuYWwgc29mdHdhcmUgdmFyaWFibGVzIGZvciBidWZmZXJlZCB0cmFuc21pc3Npb25zLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gY2ZnIHBvaW50ZXIgdG8gdGhlIFVBUlQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9pbml0KEhXX1VBUlRfSUQgdWFydCwgY29uc3QgdWFydF9jb25maWcgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIFNldCBVQVJUIGxpbmUgc2V0dGluZ3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemUgVUFSVCByZWdpc3RlcnMgd2l0aCBnaXZlbiBjb25maWd1cmF0aW9uLAorICogaW5jbHVkaW5nIHR4IGFuZCByeCBmaWZvIHRyaWdnZXIgbGV2ZWxzCisgKiBJdCBhbHNvIGluaXRpYWxpemVzIGFsbCBpbnRlcm5hbCBzb2Z0d2FyZSB2YXJpYWJsZXMgZm9yIGJ1ZmZlcmVkIHRyYW5zbWlzc2lvbnMuCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBjZmcgcG9pbnRlciB0byB0aGUgVUFSVCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICoKKyAqLwordm9pZCBod191YXJ0X2luaXRfZXgoSFdfVUFSVF9JRCB1YXJ0LCBjb25zdCB1YXJ0X2NvbmZpZ19leCAqY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgUmUtaW5pdGlhbGl6ZSBVQVJUIHJlZ2lzdGVycworICoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGNvbmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgYmUgcmUtYXBwbGllZCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKKyAqIGNhbGxlZCBhZnRlciBwbGF0Zm9ybSBleGl0cyBwb3dlciBzbGVlcCBtb2RlLgorICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIHVhcnRfaW5pdCwgYnV0IGl0IGRvZXMgbm90IGluaXRpYWxpemUgc29mdHdhcmUgdmFyaWFibGVzCisgKiB1c2VkIGZvciB0cmFuc21pc3Npb24gY29udHJvbCBpdCBqdXN0IHJlLWFwcGxpZXMgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKyAqIEl0IHdpbGwgdHVybiBvbiBpbnRlcnJ1cHRzIGlmIHRyYW5zbWlzc2lvbiB3YXMgaW4gcHJvZ3Jlc3MuCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBjZmcgcG9pbnRlciB0byB0aGUgVUFSVCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICoKKyAqLwordm9pZCBod191YXJ0X3JlaW5pdChIV19VQVJUX0lEIHVhcnQsIGNvbnN0IHVhcnRfY29uZmlnICpjZmcpOworCisvKioKKyAqIFxicmllZiBSZS1pbml0aWFsaXplIFVBUlQgcmVnaXN0ZXJzCisgKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBiZSByZS1hcHBsaWVkLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZQorICogY2FsbGVkIGFmdGVyIHBsYXRmb3JtIGV4aXRzIHBvd2VyIHNsZWVwIG1vZGUuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gdWFydF9pbml0X2V4LCBidXQgaXQgZG9lcyBub3QgaW5pdGlhbGl6ZSBzb2Z0d2FyZSB2YXJpYWJsZXMKKyAqIHVzZWQgZm9yIHRyYW5zbWlzc2lvbiBjb250cm9sIGl0IGp1c3QgcmUtYXBwbGllcyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLgorICogSXQgd2lsbCB0dXJuIG9uIGludGVycnVwdHMgaWYgdHJhbnNtaXNzaW9uIHdhcyBpbiBwcm9ncmVzcy4KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIGNmZyBwb2ludGVyIHRvIHRoZSBVQVJUIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKgorICovCit2b2lkIGh3X3VhcnRfcmVpbml0X2V4KEhXX1VBUlRfSUQgdWFydCwgY29uc3QgdWFydF9jb25maWdfZXggKmNmZyk7CisKKy8qKgorICogXGJyaWVmIEdldCBVQVJUIGxpbmUgc2V0dGluZ3MKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIGNmZyBwb2ludGVyIHRvIHRoZSBVQVJUIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKi8KK3ZvaWQgaHdfdWFydF9jZmdfZ2V0KEhXX1VBUlRfSUQgdWFydCwgdWFydF9jb25maWcgKmNmZyk7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09IE1vZGVtIGNvbnRyb2wgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgSXJEQSBTSVIgbW9kZSBzZXR0aW5nCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiBJckRBIFNJUiBtb2RlOgorICogICAgICAgICAwID0gSXJEQSBTSVIgbW9kZSBkaXNhYmxlZCwKKyAqICAgICAgICAgMSA9IElyREEgU0lSIG1vZGUgZW5hYmxlZAorICoKKyAqLwordWludDhfdCBod191YXJ0X3NpcmVfZ2V0ZihIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBTZXQgdGhlIElyREEgU0lSIG1vZGUKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIHNpcmUgMCA9IGRpc2FibGUgSXJEQSBTSVIgbW9kZSwKKyAqICAgICAgICAgICAgICAgICAgMSA9IGVuYWJsZSBJckRBIFNJUiBtb2RlCisgKgorICovCit2b2lkIGh3X3VhcnRfc2lyZV9zZXRmKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCBzaXJlKTsKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBBdXRvIEZsb3cgQ29udHJvbCBFbmFibGUgKEFGQ0UpIHNldHRpbmcKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIEF1dG8gRmxvdyBDb250cm9sIEVuYWJsZSAoQUZDRSk6CisgKiAgICAgICAgIDAgPSBBdXRvIEZsb3cgQ29udHJvbCBNb2RlIGRpc2FibGVkLAorICogICAgICAgICAxID0gQXV0byBGbG93IENvbnRyb2wgTW9kZSBlbmFibGVkCisgKgorICovCit1aW50OF90IGh3X3VhcnRfYWZjZV9nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIEF1dG8gRmxvdyBDb250cm9sCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBhZmNlIEF1dG8gRmxvdyBDb250cm9sIEVuYWJsZSAoQUZDRSk6CisgKiAgICAgICAgICAgICAgICAgIDAgPSBkaXNhYmxlIEF1dG8gRmxvdyBDb250cm9sIE1vZGUsCisgKiAgICAgICAgICAgICAgICAgIDEgPSBlbmFibGUgQXV0byBGbG93IENvbnRyb2wgTW9kZQorICoKKyAqLwordm9pZCBod191YXJ0X2FmY2Vfc2V0ZihIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgYWZjZSk7CisKKy8qKgorICogXGJyaWVmIEdldCBVQVJUIGRpYWdub3N0aWMgbW9kZSBzdGF0dXMKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgbG9vcCBiYWNrIGJpdAorICoKKyAqLwordWludDhfdCBod191YXJ0X2xvb3BiYWNrX2dldGYoSFdfVUFSVF9JRCB1YXJ0KTsKKworLyoqCisgKiBcYnJpZWYgU2V0IFVBUlQgaW4gZGlhZ25vc3RpYyBtb2RlCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBsYiBsb29wIGJhY2sgYml0IHZhbHVlCisgKgorICovCit2b2lkIGh3X3VhcnRfbG9vcGJhY2tfc2V0ZihIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgbGIpOworCisvKioKKyAqIFxicmllZiBHZXQgUlRTIG91dHB1dCB2YWx1ZQorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gUlRTIG91dHB1dCB2YWx1ZQorICoKKyAqLwordWludDhfdCBod191YXJ0X3J0c19nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIFNldCBSVFMgb3V0cHV0IHZhbHVlCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBydHNuIFZhbHVlIGZvciB0aGUgUlRTIG91dHB1dCAoYXNzZXJ0ZWQgbG93KQorICoKKyAqLwordm9pZCBod191YXJ0X3J0c19zZXRmKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCBydHNuKTsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0gTGluZSBzdGF0dXMgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgUmVjZWl2ZXIgRklGTyBFcnJvciBiaXQKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHJlY2VpdmVyIEZJRk8gRXJyb3IgYml0IHZhbHVlOgorICogICAgICAgICAwID0gbm8gZXJyb3IgaW4gUlggRklGTywKKyAqICAgICAgICAgMSA9IGVycm9yIGluIFJYIEZJRk8KKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF9yeF9maWZvX2Vycl9nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdmFsdWUgb2YgdGhlIFRyYW5zbWl0dGVyIEVtcHR5IGJpdAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gMSBpZiB0cmFuc21pdHRlciBGSUZPIGlzIGVtcHR5CisgKgorICovCit1aW50OF90IGh3X3VhcnRfaXNfdHhfZmlmb19lbXB0eShIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5IGJpdAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdGhlIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgYml0IHZhbHVlCisgKgorICovCit1aW50OF90IGh3X3VhcnRfdGhyX2VtcHR5X2dldGYoSFdfVUFSVF9JRCB1YXJ0KTsKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgQnJlYWsgSW50ZXJydXB0IGJpdAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gYnJlYWsgaW50ZXJydXB0IGJpdCB2YWx1ZTogVGhpcyBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBkZXRlY3Rpb24gb2YgYQorICogICAgICAgICBicmVhayBzZXF1ZW5jZSBvbiB0aGUgc2VyaWFsIGlucHV0IGRhdGEKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF9icmVha19pbnRfZ2V0ZihIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBGcmFtaW5nIEVycm9yIGJpdAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gZnJhbWluZyBlcnJvciBiaXQgdmFsdWU6CisgKiAgICAgICAgIDAgPSBubyBmcmFtaW5nIGVycm9yLAorICogICAgICAgICAxID0gZnJhbWluZyBlcnJvcgorICoKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF9mcmFtZV9lcnJfZ2V0ZihIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBQYXJpdHkgRXJyb3IgYml0CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiBwYXJpdHkgZXJyb3IgYml0IHZhbHVlOgorICogICAgICAgICAwID0gbm8gcGFyaXR5IGVycm9yLAorICogICAgICAgICAxID0gcGFyaXR5IGVycm9yCisgKgorICovCit1aW50OF90IGh3X3VhcnRfcGFyaXR5X2Vycl9nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdmFsdWUgb2YgdGhlIE92ZXJydW4gRXJyb3IgYml0CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiBvdmVycnVuIGVycm9yIGJpdCB2YWx1ZToKKyAqICAgICAgICAgMCA9IG5vIG92ZXJydW4gZXJyb3IsCisgKiAgICAgICAgIDEgPSBvdmVycnVuIGVycm9yCisgKgorICovCit1aW50OF90IGh3X3VhcnRfb3ZlcnJ1bl9lcnJfZ2V0ZihIV19VQVJUX0lEIHVhcnQpOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PSBNb2RlbSBzdGF0dXMgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKioKKyAqIFxicmllZiBHZXQgQ1RTIGlucHV0IHN0YXR1cworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gc3RhdHVzIG9mIENUUyBpbnB1dDoKKyAqICAgICAgICAgMCA9IENUU24gaW5wdXQgaXMgZGUtYXNzZXJ0ZWQgKGxvZ2ljIDEpLAorICogICAgICAgICAxID0gQ1RTbiBpbnB1dCBpcyBhc3NlcnRlZCAobG9naWMgMCksCisgKiAgICAgICAgIEluIGxvb3BiYWNrIG1vZGUsIENUUyBpcyB0aGUgc2FtZSBhcyBSVFMKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF9jdHNfZ2V0ZihIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBHZXQgRGVsdGEgQ1RTCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiBEQ1RTOgorICogICAgICAgICAwID0gTm8gY2hhbmdlIG9uIENUUyBzaW5jZSBsYXN0IHJlYWQgb2YgTW9kZW0gQ29udHJvbCBSZWdpc3RlciwKKyAqICAgICAgICAgMSA9IENoYW5nZSBvbiBDVFMgc2luY2UgbGFzdCByZWFkIG9mIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIsCisgKiAgICAgICAgIE5vdGUgdGhhdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciB0aGUgRENUUyBiaXQsCisgKiAgICAgICAgIEluIGxvb3BiYWNrIG1vZGUsIERDVFMgcmVmbGVjdHMgY2hhbmdlcyBvbiBSVFMKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF9kZWx0YV9jdHNfZ2V0ZihIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBDaGVjayBpZiBidWZmZXJlZCB3cml0ZSBpcyBpbiBwcm9ncmVzcworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBUWCB0cmFuc21pc3Npb24gaW4gcHJvZ3Jlc3MKKyAqCisgKi8KK2Jvb2wgaHdfdWFydF90eF9pbl9wcm9ncmVzcyhIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBDaGVjayBpZiBidWZmZXJlZCByZWFkIGlzIGluIHByb2dyZXNzCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIFJYIHRyYW5zbWlzc2lvbiBpbiBwcm9ncmVzcworICoKKyAqLworYm9vbCBod191YXJ0X3J4X2luX3Byb2dyZXNzKEhXX1VBUlRfSUQgdWFydCk7CisKKyNpZiBkZ19jb25maWdVQVJUX1JYX0NJUkNVTEFSX0RNQQorCisvKioKKyAqIFxicmllZiBFbmFibGUgY2lyY3VsYXIgUlggRE1BIGZvciBVQVJUCisgKgorICogVGhpcyByZWNvbmZpZ3VyZXMgUlggRE1BIGNoYW5uZWwgdG8gdXNlIGNpcmN1bGFyIGJ1ZmZlciBmb3IgaW5jb21pbmcgZGF0YSBhbmQgZW5hYmxlZCBpdAorICogaW1tZWRpYXRlbHkuIEluY29taW5nIGRhdGEgd2lsbCBiZSByZWFkIGJ5IERNQSB0byBpbnRlcm1lZGlhdGUgYnVmZmVyLiBTdWJzZXF1ZW50IGNhbGxzIHRvCisgKiBod191YXJ0X3JlY2VpdmUoKSB3aWxsIGZpcmUgY2FsbGJhY2sgYXMgc29vbiBhcyBlbm91Z2ggZGF0YSBhcmUgYXZhaWxhYmxlIGluIGJ1ZmZlciB0byBiZSByZWFkLAorICogYnV0IHRoZSBhY3R1YWwgcmVhZCBmcm9tIGludGVybWVkaWF0ZSBidWZmZXIgaGFzIHRvIGJlIGRvbmUgdXNpbmcgaHdfdWFydF9jb3B5X3J4X2NpcmN1bGFyX2RtYV9idWZmZXIoKS4KKyAqCisgKiBSZWNvbW1lbmRlZCB3YXkgdG8gbW92ZSBiZXR3ZWVuIERNQSBidWZmZXIgYW5kIHVzZXIgYnVmZmVyIGlzIHRvIGNhbGwgaHdfdWFydF9hYm9ydF9yZWNlaXZlKCkKKyAqIHRoYXQgd2lsbCBjb3B5IHRoZSBhbW91bnQgc3BlY2lmaWVkIG9uIHJlYWQgb3IgdGhlIGFjdHVhbCBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMgaWYKKyAqIGh3X3VhcnRfYWJvcnRfcmVjZWl2ZSgpIHdhcyBjYWxsZWQgYmVmb3JlIHJlcXVlc3RlZCB0aGUgYW1vdW50IHdhcyByZWNlaXZlZC4KKyAqCisgKiBcbm90ZQorICogVGhpcyBjYW4gYmUgb25seSBjYWxsZWQgZm9yIGFuIFVBUlQgd2hpY2ggaXMgY29uZmlndXJlZCB1c2luZyBccCBkZ19jb25maWdVQVJUeF9SWF9DSVJDVUxBUl9ETUFfQlVGX1NJWkUuCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICovCit2b2lkIGh3X3VhcnRfZW5hYmxlX3J4X2NpcmN1bGFyX2RtYShIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBDb3B5IGRhdGEgZnJvbSBjaXJjdWxhciBSWCBETUEgYnVmZmVyIHRvIHVzZXIgYnVmZmVyCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBidWYgYnVmZmVyIHRvIGNvcHkgZGF0YSB0bworICogXHBhcmFtIFtpbl0gbGVuIGxlbmd0aCBvZiBkYXRhIHRvIGNvcHkgdG8gYnVmZmVyCisgKgorICovCit2b2lkIGh3X3VhcnRfY29weV9yeF9jaXJjdWxhcl9kbWFfYnVmZmVyKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCAqYnVmLCB1aW50MTZfdCBsZW4pOworCisjZW5kaWYgLyogZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEgKi8KKworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9IV19VQVJUICovCisKKyNlbmRpZiAvKiBIV19VQVJUX0hfICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3dhdGNoZG9nLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3dhdGNoZG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5NjliYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfd2F0Y2hkb2cuaApAQCAtMCwwICsxLDE4OCBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgV2F0Y2hkb2dfVGltZXIKKyAqIFx7CisgKiBcYnJpZWYgV2F0Y2hkb2cgVGltZXIKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X3dhdGNoZG9nLmgKKyAqCisgKiBAYnJpZWYgRGVmaW5pdGlvbiBvZiBBUEkgZm9yIHRoZSBXYXRjaGRvZyB0aW1lciBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgSFdfV0FUQ0hET0dfSF8KKyNkZWZpbmUgSFdfV0FUQ0hET0dfSF8KKworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHNka19kZWZzLmg+CisKKyNkZWZpbmUgTk1JX01BR0lDX05VTUJFUiAgICAgICAgICAgICAgICAweERFQURCRUVGCisKKy8qKgorICogXGJyaWVmIEhvbGRzIHRoZSBzdGFjayBjb250ZW50cyB3aGVuIGFuIE5NSSBvY2N1cnMuCisgKgorICogXGRldGFpbHMgVGhlIHN0YWNrIGNvbnRlbnRzIGFyZSBjb3BpZWQgYXQgdGhpcyB2YXJpYWJsZSB3aGVuIGFuIE5NSSBvY2N1cnMuIFRoZSBmaXJzdCBwb3NpdGlvbiBpcworICogICAgICAgIG1hcmtlZCB3aXRoIGEgc3BlY2lhbCAiZmxhZyIgKDB4REVBREJFRUYpIHRvIGluZGljYXRlIHRoYXQgdGhlIGRhdGEgdGhhdCBmb2xsb3cgYXJlIHZhbGlkLgorICovCitleHRlcm4gdWludDMyX3Qgbm1pX2V2ZW50X2RhdGFbOV07CisKKy8qKgorICogXGJyaWVmIFR5cGVzIG9mIGdlbmVyYXRlZCBzdGF0ZXMgaWYgcmVsb2FkIHZhbHVlIGlzIDAKKyAqCisgKiBHZW5lcmF0ZSBOTUkgKG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQpIG9yIFJTVCAocmVzZXQgb2YgdGhlIHN5c3RlbSkKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1dER19SRVNFVF9OTUkgPSAwLCAgICAgLyoqPCBHZW5lcmF0ZSBOTUkgaWYgdGhlIHdhdGNoZG9nIHJlYWNoZXMgMCBhbmQgV0RPRyByZXNldCBpZiB0aGUgY291bnRlciBiZWNvbWUgbGVzcyBvciBlcXVhbCB0byAtMTYgKi8KKyAgICAgICAgSFdfV0RHX1JFU0VUX1JTVCA9IDEgICAgICAvKio8IEdlbmVyYXRlIFdET0cgcmVzZXQgaXQgdGhlIGNvdW50ZXIgYmVjb21lcyBsZXNzIG9yIGVxdWFsIHRoYW4gMCAqLworfSBIV19XREdfUkVTRVQ7CisKKy8qKgorICogXGJyaWVmIFdhdGNoZG9nIHRpbWVyIGludGVycnVwdCBjYWxsYmFjaworICoKKyAqIFxwYXJhbSBbaW5dIGhhcmRmYXVsdF9hcmdzIHBvaW50ZXIgdG8gY2FsbCBzdGFjaworICoKKyAqLwordHlwZWRlZiB2b2lkICgqaHdfd2F0Y2hkb2dfaW50ZXJydXB0X2NiKSh1bnNpZ25lZCBsb25nICpleGNlcHRpb25fYXJncyk7CisKKy8qKgorICogXGJyaWVmIEZyZWV6ZSB0aGUgd2F0Y2hkb2cKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgb3BlcmF0aW9uIGlzIGFsbG93ZWQsIGVsc2UgZmFsc2UKKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSBib29sIGh3X3dhdGNoZG9nX2ZyZWV6ZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgVW5mcmVlemUgdGhlIHdhdGNoZG9nCisgKgorICovCitfX1JFVEFJTkVEX0NPREUgdm9pZCBod193YXRjaGRvZ191bmZyZWV6ZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU2V0IHBvc2l0aXZlIHJlbG9hZCB2YWx1ZSBvZiB0aGUgd2F0Y2hkb2cgdGltZXIKKyAqCisgKiBccGFyYW0gW2luXSB2YWx1ZSByZWxvYWQgdmFsdWUgZnJvbSAwICgweDAwKSB0byAyNTUgKDB4RkYpCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2F0Y2hkb2dfc2V0X3Bvc192YWwodWludDhfdCB2YWx1ZSkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2F0Y2hkb2dfc2V0X3Bvc192YWwodWludDhfdCB2YWx1ZSkKK3sKKyAgICAgICAgV0RPRy0+V0FUQ0hET0dfUkVHID0gKHVpbnQxNl90KXZhbHVlOworfQorCisvKioKKyAqIFxicmllZiBTZXQgbmVnYXRpdmUgcmVsb2FkIHZhbHVlIG9mIHRoZSB3YXRjaGRvZyB0aW1lcgorICoKKyAqIFxwYXJhbSBbaW5dIHZhbHVlIHJlbG9hZCB2YWx1ZSBmcm9tIC0xNiAoMHgxRkYpIHRvIDAgKDB4MDApCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2F0Y2hkb2dfc2V0X25lZ192YWwodWludDhfdCB2YWx1ZSkKK3sKKyAgICAgICAgV0RPRy0+V0FUQ0hET0dfUkVHID0gV0RPR19XQVRDSERPR19SRUdfV0RPR19WQUxfTkVHX01zayB8ICh1aW50MTZfdCl2YWx1ZTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHJlbG9hZCB2YWx1ZSBvZiB0aGUgd2F0Y2hkb2cgdGltZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgaHdfd2F0Y2hkb2dfZ2V0X3ZhbCh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoV0RPRywgV0FUQ0hET0dfUkVHLCBXRE9HX1ZBTCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdlbmVyYXRlIGEgcmVzZXQgc2lnbmFsIG9mIHRoZSBzeXN0ZW0gaWYgcmVsb2FkIHZhbHVlIHJlYWNoZXMgMAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3dhdGNoZG9nX2dlbl9SU1Qodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2F0Y2hkb2dfZ2VuX1JTVCh2b2lkKQoreworICAgICAgICBSRUdfU0VUX0JJVChXRE9HLCBXQVRDSERPR19DVFJMX1JFRywgTk1JX1JTVCk7Cit9CisKKy8qKgorICogXGJyaWVmIFJlZ2lzdGVyIGFuIGludGVycnVwdCBoYW5kbGVyCisgKgorICogXHBhcmFtIFtpbl0gaGFuZGxlciBmdW5jdGlvbiBwb2ludGVyIHRvIGhhbmRsZXIgdG8gY2FsbCB3aGVuIGFuIGludGVycnVwdCBvY2N1cnMKKyAqCisgKi8KK3ZvaWQgaHdfd2F0Y2hkb2dfcmVnaXN0ZXJfaW50KGh3X3dhdGNoZG9nX2ludGVycnVwdF9jYiBoYW5kbGVyKTsKKworLyoqCisgKiBcYnJpZWYgVW5yZWdpc3RlciBhbiBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqLworX19SRVRBSU5FRF9DT0RFIHZvaWQgaHdfd2F0Y2hkb2dfdW5yZWdpc3Rlcl9pbnQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEhhbmRsZSBOTUkgaW50ZXJydXB0LgorICoKKyAqIFxwYXJhbSBbaW5dIGhhcmRmYXVsdF9hcmdzIHBvaW50ZXIgdG8gY2FsbCBzdGFjaworICoKKyAqLworX19SRVRBSU5FRF9DT0RFIHZvaWQgaHdfd2F0Y2hkb2dfaGFuZGxlX2ludCh1bnNpZ25lZCBsb25nICpoYXJkZmF1bHRfYXJncyk7CisKKy8qKgorICogXGJyaWVmIENoZWNrIHdoZXRoZXIgdGhlIHRpbWVyIGhhcyBleHBpcmVkCisgKgorICogXHJldHVybiB0cnVlLCBpZiB0aGUgdGltZXIgaGFzIGV4cGlyZWQsIGZhbHNlIG90aGVyd2lzZQorICoKKyAqLworYm9vbCBod193YXRjaGRvZ19pc190aW1lcl9leHBpcmVkKHZvaWQpOworCisvKioKKyAqIFxicmllZiBDaGVjayB3aGF0IGlzIGdlbmVyYXRlZCB3aGVuIHdhdGNoZG9nIHJlYWNoZXMgMCB2YWx1ZQorICoKKyAqIElmIGl0IGlzIE5NSSAoaW50ZXJydXB0KSBvciBSU1QgKHN5c3RlbS93ZG9nIHJlc2V0KS4KKyAqCisgKiBccmV0dXJuIEhXX1dER19SRVNFVF9OTUkgaWYgTk1JIGludGVycnVwdCBpcyBnZW5lcmF0ZWQsIG90aGVyd2lzZSBIV19XREdfUkVTRVRfUlNUCisgKgorICovCitIV19XREdfUkVTRVQgaHdfd2F0Y2hkb2dfaXNfaXJxX29yX3JzdF9nZW4odm9pZCk7CisKKyNlbmRpZiAvKiBIV19XQVRDSERPR19IXyAqLworCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3drdXAuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfd2t1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTgzMzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3drdXAuaApAQCAtMCwwICsxLDYwMCBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgV2FrZXVwX1RpbWVyCisgKiBceworICogXGJyaWVmIFdha2V1cCBUaW1lcgorICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfd2t1cC5oCisgKgorICogQGJyaWVmIERlZmluaXRpb24gb2YgQVBJIGZvciB0aGUgV2FrZXVwIHRpbWVyIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBIV19XS1VQX0hfCisjZGVmaW5lIEhXX1dLVVBfSF8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19XS1VQCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKyNpbmNsdWRlICJod19ncGlvLmgiCisKKworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BKSAmJiBkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRQorI2RlZmluZSBXS1VQX1NFTF9QMF9CQVNFX1JFRyAodm9sYXRpbGUgdWludDE2X3QgKikoJldBS0VVUC0+V0tVUF9TRUxfR1BJT19QMF9SRUcpCisjZWxzZQorI2RlZmluZSBXS1VQX1NFTF9QMF9CQVNFX1JFRyAodm9sYXRpbGUgdWludDE2X3QgKikoJldBS0VVUC0+V0tVUF9TRUxFQ1RfUDBfUkVHKQorI2VuZGlmCisKKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkgJiYgZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UKKy8qKgorICogXGJyaWVmIFdha2V1cCB0aW1lciBjb25maWd1cmF0aW9uCisgKgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVpbnQ4X3QgcGluX3N0YXRlW0hXX0dQSU9fTlVNX1BPUlRTXTsgICAvKio8IHBpbiBzdGF0ZXMgaW4gZWFjaCBwb3J0LCAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZCAqLworICAgICAgICB1aW50OF90IHBpbl90cmlnZ2VyW0hXX0dQSU9fTlVNX1BPUlRTXTsgLyoqPCBwaW4gdHJpZ2dlcnMgaW4gZWFjaCBwb3J0LCAxOiBsb3csIDA6IGhpZ2ggKi8KK30gd2t1cF9waW5fY29uZmlnX3Q7CitleHRlcm4gdm9sYXRpbGUgd2t1cF9waW5fY29uZmlnX3Qgd2t1cF9waW5fY29uZmlnOyAgICAgIC8qKjwgc3RvcmVzIHdrdXAgcGluIGNvbmZpZ3VyYXRpb24gKi8KK2V4dGVybiB2b2xhdGlsZSB1aW50OF90IHdrdXBfc3RhdHVzW0hXX0dQSU9fTlVNX1BPUlRTXTsgLyoqPCBzdG9yZXMgd2FrZXVwIHNvdXJjZXMgKi8KKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIG1hc2sgb2YgYSBmaWVsZCBvZiBhbiBXS1VQIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gYWNjZXNzCisgKgorICovCisjZGVmaW5lIEhXX1dLVVBfUkVHX0ZJRUxEX01BU0socmVnLCBmaWVsZCkgXAorICAgICAgICAoV0FLRVVQX1dLVVBfIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBiaXQgcG9zaXRpb24gb2YgYSBmaWVsZCBvZiBhbiBXS1VQIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gYWNjZXNzCisgKgorICovCisjZGVmaW5lIEhXX1dLVVBfUkVHX0ZJRUxEX1BPUyhyZWcsIGZpZWxkKSBcCisgICAgICAgIChXQUtFVVBfV0tVUF8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfUG9zKQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQgb2YgYW4gV0tVUCByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIHdyaXRlCisgKgorICogXHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIGZpZWxkCisgKgorICovCisjZGVmaW5lIEhXX1dLVVBfUkVHX0dFVEYocmVnLCBmaWVsZCkgXAorICAgICAgICAoKFdBS0VVUC0+V0tVUF8jI3JlZyMjX1JFRyAmIChXQUtFVVBfV0tVUF8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKSkgPj4gKFdBS0VVUF9XS1VQXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Qb3MpKQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQgb2YgYW4gV0tVUCByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIHdyaXRlCisgKiBccGFyYW0gW2luXSBuZXdfdmFsIGlzIHRoZSB2YWx1ZSB0byB3cml0ZQorICoKKyAqLworI2RlZmluZSBIV19XS1VQX1JFR19TRVRGKHJlZywgZmllbGQsIG5ld192YWwpIFwKKyAgICAgICAgV0FLRVVQLT5XS1VQXyMjcmVnIyNfUkVHID0gKChXQUtFVVAtPldLVVBfIyNyZWcjI19SRUcgJiB+KFdBS0VVUF9XS1VQXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Nc2spKSB8IFwKKyAgICAgICAgKChXQUtFVVBfV0tVUF8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKSAmICgobmV3X3ZhbCkgPDwgKFdBS0VVUF9XS1VQXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Qb3MpKSkpCisKKworLyoqCisgKiBcYnJpZWYgUGluIHN0YXRlIHdoaWNoIGluY3JlbWVudHMgZXZlbnQgY291bnRlcgorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfV0tVUF9QSU5fU1RBVEVfSElHSCA9IDAsCisgICAgICAgIEhXX1dLVVBfUElOX1NUQVRFX0xPVyA9IDEKK30gSFdfV0tVUF9QSU5fU1RBVEU7CisKKy8qKgorICogXGJyaWVmIFdha2V1cCB0aW1lciBjb25maWd1cmF0aW9uCisgKgorICovCit0eXBlZGVmIHN0cnVjdCB7CisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgICAgICAvKioKKyAgICAgICAgICogY291bnRlciB0aHJlc2hvbGQKKyAgICAgICAgICoKKyAgICAgICAgICogXHdhcm5pbmcgU3VwcG9ydGVkIG9ubHkgaW4gREExNDY4MC8xIGNoaXBzCisgICAgICAgICAqLworICAgICAgICB1aW50OF90IHRocmVzaG9sZDsKKyNlbmRpZgorI2lmICEoKGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFKSAmJiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkpCisgICAgICAgIHVpbnQ4X3QgZGVib3VuY2U7ICAgICAgIC8qKjwgZGVib3VuY2UgdGltZSBpbiBtcyAqLworI2VuZGlmCisgICAgICAgIHVpbnQ4X3QgcGluX3N0YXRlW0hXX0dQSU9fTlVNX1BPUlRTXTsgICAvKio8IHBpbiBzdGF0ZXMgaW4gZWFjaCBwb3J0LCBzZWUgaHdfd2t1cF9jb25maWd1cmVfcG9ydCAqLworICAgICAgICB1aW50OF90IHBpbl90cmlnZ2VyW0hXX0dQSU9fTlVNX1BPUlRTXTsgLyoqPCBwaW4gdHJpZ2dlcnMgaW4gZWFjaCBwb3J0LCBzZWUgaHdfd2t1cF9jb25maWd1cmVfcG9ydCAqLworfSB3a3VwX2NvbmZpZzsKKwordHlwZWRlZiB2b2lkICgqaHdfd2t1cF9pbnRlcnJ1cHRfY2IpKHZvaWQpOworCisvKioKKyAqIFxicmllZiBJbml0aWFsaXplIHBlcmlwaGVyYWwKKyAqCisgKiBSZXNldHMgV2FrZXVwIFRpbWVyIHRvIGluaXRpYWwgc3RhdGUsIGkuZS4gaW50ZXJydXB0IGlzIGRpc2FibGVkIGFuZCBhbGwgcGluIHRyaWdnZXJzIGFyZQorICogZGlzYWJsZWQuCisgKgorICogXHAgY2ZnIGNhbiBiZSBOVUxMIC0gbm8gY29uZmlndXJhdGlvbiBpcyBwZXJmb3JtZWQgaW4gc3VjaCBjYXNlLgorICoKKyAqIFxwYXJhbSBbaW5dIGNmZyBjb25maWd1cmF0aW9uCisgKgorICovCit2b2lkIGh3X3drdXBfaW5pdChjb25zdCB3a3VwX2NvbmZpZyAqY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlIHBlcmlwaGVyYWwKKyAqCisgKiBTaG9ydGN1dCB0byBjYWxsIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uIElmIFxwIGNmZyBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIGRvZXMKKyAqIG5vdGhpbmcuCisgKgorICogXHBhcmFtIFtpbl0gY2ZnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3ZvaWQgaHdfd2t1cF9jb25maWd1cmUoY29uc3Qgd2t1cF9jb25maWcgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIFJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCwgaS5lLiBldmVudCBjb3VudGVyIHJlYWNoZXMgY29uZmlndXJlZAorICogdmFsdWUuIEludGVycnVwdCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBBcHBsaWNhdGlvbiBzaG91bGQgcmVzZXQKKyAqIGludGVycnVwdCBpbiBjYWxsYmFjayBmdW5jdGlvbiB1c2luZyBod193a3VwX3Jlc2V0X2ludGVycnVwdCgpLiBJZiBubyBjYWxsYmFjayBpcyBzcGVjaWZpZWQsCisgKiBpbnRlcnJ1cHQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYnkgdGhlIGRyaXZlci4KKyAqCisgKiBccGFyYW0gW2luXSBjYiBjYWxsYmFjayBmdW5jdGlvbgorICogXHBhcmFtIFtpbl0gcHJpbyB0aGUgcHJpb3JpdHkgb2YgdGhlIGludGVycnVwdAorICoKKyAqIFxzYSBod193a3VwX3VucmVnaXN0ZXJfaW50ZXJydXB0CisgKiBcc2EgaHdfd2t1cF9jbGVhcl9pbnRlcnJ1cHQKKyAqIFxzYSBod193a3VwX3NldF9jb3VudGVyX3RocmVzaG9sZAorICogXHNhIGh3X3drdXBfZ2V0X2NvdW50ZXIKKyAqCisgKi8KK3ZvaWQgaHdfd2t1cF9yZWdpc3Rlcl9pbnRlcnJ1cHQoaHdfd2t1cF9pbnRlcnJ1cHRfY2IgY2IsIHVpbnQzMl90IHByaW8pOworCisvKioKKyAqIFxicmllZiBVbnJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyCisgKgorICogSW50ZXJydXB0IGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqLwordm9pZCBod193a3VwX3VucmVnaXN0ZXJfaW50ZXJydXB0KHZvaWQpOworCisvKioKKyAqIFxicmllZiBSZXNldCBpbnRlcnJ1cHQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgY2FsbGVkIGJ5IGFueSB1c2VyLXNwZWNpZmllZCBpbnRlcnJ1cHQgY2FsbGJhY2ssIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2t1cF9yZXNldF9pbnRlcnJ1cHQodm9pZCkKK3sKKyAgICAgICAgV0FLRVVQLT5XS1VQX1JFU0VUX0lSUV9SRUcgPSAxOworfQorCisvKioKKyAqIFxicmllZiBJbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqLwordm9pZCBod193a3VwX2hhbmRsZXIodm9pZCk7CisKKyNpZiAhKChkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRSkgJiYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EpKQorLyoqCisgKiBcYnJpZWYgU2V0IGRlYm91bmNlIHRpbWUKKyAqCisgKiBTZXR0aW5nIGRlYm91bmNlIHRpbWUgdG8gMCB3aWxsIGRpc2FibGUgaGFyZHdhcmUgZGVib3VuY2luZy4gTWF4aW11bSBkZWJvdW5jZSB0aW1lIGlzIDYzbXMuCisgKgorICogXHBhcmFtIFtpbl0gdGltZV9tcyBkZWJvdW5jZSB0aW1lIGluIG1pbGxpc2Vjb25kcworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3drdXBfc2V0X2RlYm91bmNlX3RpbWUodWludDhfdCB0aW1lX21zKQoreworICAgICAgICBIV19XS1VQX1JFR19TRVRGKENUUkwsIFdLVVBfREVCX1ZBTFVFLCB0aW1lX21zKTsKK30KKyNlbmRpZiAvLyEoKGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFKSAmJiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkpCisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IGRlYm91bmNlIHRpbWUKKyAqCisgKiBccmV0dXJuIGRlYm91bmNlIHRpbWUgaW4gbWlsbGlzZWNvbmRzCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfd2t1cF9nZXRfZGVib3VuY2VfdGltZSh2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfV0tVUF9SRUdfR0VURihDVFJMLCBXS1VQX0RFQl9WQUxVRSk7Cit9CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisvKioKKyAqIFxicmllZiBTZXQgdGhyZXNob2xkIGZvciBldmVudCBjb3VudGVyCisgKgorICogSW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhZnRlciBldmVudCBjb3VudGVyIHJlYWNoZXMgY29uZmlndXJlZCB2YWx1ZS4KKyAqCisgKiBccGFyYW0gW2luXSBsZXZlbCBudW1iZXIgb2YgZXZlbnRzCisgKgorICogXHdhcm5pbmcgU3VwcG9ydGVkIG9ubHkgaW4gREExNDY4MC8xIGNoaXBzCisgKiBcc2EgaHdfd2t1cF9yZWdpc3Rlcl9pbnRlcnJ1cHQKKyAqIFxzYSBod193a3VwX2dldF9jb3VudGVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2t1cF9zZXRfY291bnRlcl90aHJlc2hvbGQodWludDhfdCBsZXZlbCkKK3sKKyAgICAgICAgSFdfV0tVUF9SRUdfU0VURihDT01QQVJFLCBDT01QQVJFLCBsZXZlbCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aHJlc2hvbGQgZm9yIGV2ZW50IGNvdW50ZXIKKyAqCisgKiBccmV0dXJuIG51bWJlciBvZiBldmVudHMKKyAqCisgKiBcd2FybmluZyBTdXBwb3J0ZWQgb25seSBpbiBEQTE0NjgwLzEgY2hpcHMKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3drdXBfZ2V0X2NvdW50ZXJfdGhyZXNob2xkKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19XS1VQX1JFR19HRVRGKENPTVBBUkUsIENPTVBBUkUpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCB2YWx1ZSBvZiBldmVudCBjb3VudGVyCisgKgorICogTnVtYmVyIG9mIGV2ZW50cyBjb3VudGVkIHNvIGZhci4gQ2FuIGJlIHJlc2V0IHVzaW5nIGh3X3drdXBfcmVzZXRfY291bnRlcigpLgorICoKKyAqIFxyZXR1cm4gbnVtYmVyIG9mIGV2ZW50cworICoKKyAqIFxub3RlIFRoZSBjb3VudGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQgYnkgdGhlIGhhcmR3YXJlIHdoZW4gdGhlIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCisgKgorICogXHdhcm5pbmcgU3VwcG9ydGVkIG9ubHkgaW4gREExNDY4MC8xIGNoaXBzCisgKgorICogXHNhIGh3X3drdXBfcmVzZXRfY291bnRlcgorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3drdXBfZ2V0X2NvdW50ZXIodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1dLVVBfUkVHX0dFVEYoQ09VTlRFUiwgRVZFTlRfVkFMVUUpOworfQorCisvKioKKyAqIFxicmllZiBSZXNldCBldmVudCBjb3VudGVyCisgKgorICogVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCBjb3VudGVyIG1hbnVhbGx5IGluIGludGVycnVwdCBjYWxsYmFjayAtIGl0J3MgcmVzZXQgYXV0b21hdGljYWxseSBieQorICogaGFyZHdhcmUuCisgKgorICogXHdhcm5pbmcgU3VwcG9ydGVkIG9ubHkgaW4gREExNDY4MC8xIGNoaXBzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod193a3VwX3Jlc2V0X2NvdW50ZXIodm9pZCkKK3sKKyAgICAgICAgV0FLRVVQLT5XS1VQX1JFU0VUX0NOVFJfUkVHID0gMTsKK30KKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBTZXQgR1BJTyBwaW4gZXZlbnQgY291bnRpbmcgc3RhdGUKKyAqCisgKiBPbmNlIGVuYWJsZWQsIHN0YXRlIGNoYW5nZXMgb24gcGluIHdpbGwgaW5jcmVtZW50IGV2ZW50IGNvdW50ZXIuIFN0YXRlIHdoaWNoIHRyaWdnZXJzIGV2ZW50IGNhbgorICogYmUgc2V0IHVzaW5nIGh3X3drdXBfc2V0X3Bpbl90cmlnZ2VyKCkuCisgKgorICogXHBhcmFtIFtpbl0gcG9ydCBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0gcGluIHBpbiBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZWQgcGluIGV2ZW50IGNvdW50aW5nIHN0YXRlCisgKgorICogXHNhIGh3X3drdXBfc2V0X3Bpbl90cmlnZ2VyCisgKiBcc2EgaHdfd2t1cF9jb25maWd1cmVfcGluCisgKiBcc2EgaHdfd2t1cF9jb25maWd1cmVfcG9ydAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3drdXBfc2V0X3Bpbl9zdGF0ZShIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluLCBib29sIGVuYWJsZWQpCit7CisgICAgICAgIHZvbGF0aWxlIHVpbnQxNl90ICp3a3VwX3Bpbl9lbmFibGVfcmVnID0gV0tVUF9TRUxfUDBfQkFTRV9SRUcgKyBwb3J0OworICAgICAgICB1aW50MTZfdCB3a3VwX3Bpbl9lbmFibGVfdmFsID0gKndrdXBfcGluX2VuYWJsZV9yZWc7CisgICAgICAgIHdrdXBfcGluX2VuYWJsZV92YWwgJj0gfigxIDw8IHBpbik7CisgICAgICAgIHdrdXBfcGluX2VuYWJsZV92YWwgfD0gKCEhZW5hYmxlZCkgPDwgcGluOworICAgICAgICAqd2t1cF9waW5fZW5hYmxlX3JlZyA9IHdrdXBfcGluX2VuYWJsZV92YWw7CisjaWYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpICYmIGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFCisgICAgICAgIHdrdXBfcGluX2NvbmZpZy5waW5fc3RhdGVbcG9ydF0gPSB3a3VwX3Bpbl9lbmFibGVfdmFsOworI2VuZGlmCit9CisKKy8qKiBcYnJpZWYgR2V0IEdQSU8gcGluIGV2ZW50IGNvdW50aW5nIHN0YXRlCisgKgorICogXHBhcmFtIFtpbl0gcG9ydCBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0gcGluIHBpbiBudW1iZXIKKyAqCisgKiBccmV0dXJuIHBpbiBldmVudCBjb3VudGluZyBzdGF0ZQorICoKKyAqIFxzYSBod193a3VwX3NldF9waW5fc3RhdGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod193a3VwX2dldF9waW5fc3RhdGUoSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbikKK3sKKyAgICAgICAgdWludDE2X3Qgd2t1cF9waW5fZW5hYmxlX3ZhbCA9ICooV0tVUF9TRUxfUDBfQkFTRV9SRUcgKyBwb3J0KTsKKyAgICAgICAgcmV0dXJuICh3a3VwX3Bpbl9lbmFibGVfdmFsICYgKDEgPDwgcGluKSkgPj4gcGluOworfQorCisvKioKKyAqIFxicmllZiBTZXQgR1BJTyBwaW4gc3RhdGUgd2hpY2ggdHJpZ2dlcnMgZXZlbnQKKyAqCisgKiBQaW4gZXZlbnQgY291bnRpbmcgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIHRoaXMgc2V0dGluZyB0byBoYXZlIGFueSBlZmZlY3QuCisgKgorICogXHBhcmFtIFtpbl0gcG9ydCBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0gcGluIHBpbiBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIHN0YXRlIHBpbiBzdGF0ZQorICoKKyAqIFxzYSBod193a3VwX3NldF9waW5fY291bnRlcl9zdGF0ZQorICogXHNhIGh3X3drdXBfY29uZmlndXJlX3BpbgorICogXHNhIGh3X3drdXBfY29uZmlndXJlX3BvcnQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod193a3VwX3NldF9waW5fdHJpZ2dlcihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfV0tVUF9QSU5fU1RBVEUgc3RhdGUpCit7CisgICAgICAgIHVpbnQxNl90IHBvbF9yeF9yZWcgPSAqKCh2b2xhdGlsZSB1aW50MTZfdCAqKSgmV0FLRVVQLT5XS1VQX1BPTF9QMF9SRUcpICsgcG9ydCk7CisgICAgICAgIHBvbF9yeF9yZWcgJj0gfigxIDw8IHBpbik7CisgICAgICAgIHBvbF9yeF9yZWcgfD0gKCEhc3RhdGUpIDw8IHBpbjsKKyAgICAgICAgKigodm9sYXRpbGUgdWludDE2X3QgKikoJldBS0VVUC0+V0tVUF9QT0xfUDBfUkVHKSArIHBvcnQpID0gcG9sX3J4X3JlZzsKKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkgJiYgZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UKKyAgICAgICAgd2t1cF9waW5fY29uZmlnLnBpbl90cmlnZ2VyW3BvcnRdID0gcG9sX3J4X3JlZzsKKyNlbmRpZgorfQorCisvKiogXGJyaWVmIEdldCBHUElPIHBpbiBzdGF0ZSB3aGljaCB0cmlnZ2VycyBldmVudAorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgcG9ydCBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIHBpbiBwaW4gbnVtYmVyCisgKgorICogXHJldHVybiBwaW4gc3RhdGUKKyAqCisgKiBcc2EgaHdfd2t1cF9zZXRfcGluX3RyaWdnZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgSFdfV0tVUF9QSU5fU1RBVEUgaHdfd2t1cF9nZXRfcGluX3RyaWdnZXIoSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbikKK3sKKyAgICAgICAgdWludDE2X3QgcG9sX3J4X3JlZyA9ICooKHZvbGF0aWxlIHVpbnQxNl90ICopKCZXQUtFVVAtPldLVVBfUE9MX1AwX1JFRykgKyBwb3J0KTsKKyAgICAgICAgcmV0dXJuIChwb2xfcnhfcmVnICYgKDEgPDwgcGluKSkgPj4gcGluOworfQorCisvKioKKyAqIFxicmllZiBTZXQgR1BJTyBwaW4gZXZlbnQgY291bnRpbmcgYW5kIHRyaWdnZXJlZCBzdGF0ZQorICoKKyAqIEVmZmVjdGl2ZWx5LCB0aGlzIGlzIHNob3J0Y3V0IGZvciBjYWxsaW5nIGh3X3drdXBfc2V0X3Bpbl9zdGF0ZSgpIGFuZCBod193a3VwX3NldF9waW5fdHJpZ2dlcigpLgorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgcG9ydCBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIHBpbiBwaW4gbnVtYmVyCisgKiBccGFyYW0gW2luXSBlbmFibGVkIHBpbiBldmVudCBjb3VudGluZyBzdGF0ZQorICogXHBhcmFtIFtpbl0gc3RhdGUgcGluIHN0YXRlCisgKgorICogXHNhIGh3X3drdXBfc2V0X3Bpbl9jb3VudGVyX3N0YXRlCisgKiBcc2EgaHdfd2t1cF9zZXRfcGluX3RyaWdnZXIKKyAqIFxzYSBod193a3VwX2NvbmZpZ3VyZV9wb3J0CisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2t1cF9jb25maWd1cmVfcGluKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4sIGJvb2wgZW5hYmxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1dLVVBfUElOX1NUQVRFIHN0YXRlKQoreworICAgICAgICAvLyBmaXJzdCBzZXQgdXAgdGhlIHByb3BlciBwb2xhcml0eS4uLgorICAgICAgICBod193a3VwX3NldF9waW5fdHJpZ2dlcihwb3J0LCBwaW4sIHN0YXRlKTsKKyAgICAgICAgLy8gLi4udGhlbiBlbmFibGUgY291bnRpbmcgb24gdGhlIHNwZWNpZmljIEdQSU8KKyAgICAgICAgaHdfd2t1cF9zZXRfcGluX3N0YXRlKHBvcnQsIHBpbiwgZW5hYmxlZCk7Cit9CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZSBldmVudCBjb3VudGluZyBhbmQgdHJpZ2dlcmluZyBzdGF0ZSBmb3Igd2hvbGUgR1BJTyBwb3J0CisgKgorICogSW4gXHAgZW5hYmxlZCBhbmQgXHAgc3RhdGUgYml0bWFza3MgZWFjaCBiaXQgZGVzY3JpYmVzIHN0YXRlIG9mIGNvcnJlc3BvbmRpbmcgcGluIGluIHBvcnQuCisgKiBGb3IgXHAgZW5hYmxlZCAwIG1lYW5zIGRpc2FibGVkIGFuZCAxIG1lYW5zIGVuYWJsZWQuCisgKiBGb3IgXHAgc3RhdGUgMCBtZWFucyBldmVudCBpcyB0cmlnZ2VyZWQgb24gbG93IHN0YXRlIGFuZCAxIG1lYW5zIHRyaWdnZXIgaXMgb24gaGlnaCBzdGF0ZS4KKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IHBvcnQgbnVtYmVyCisgKiBccGFyYW0gW2luXSBlbmFibGVkIHBpbiBldmVudCBjb3VudGluZyBiaXRtYXNrCisgKiBccGFyYW0gW2luXSBzdGF0ZSBwaW4gc3RhdGUgYml0bWFzaworICoKKyAqIFxzYSBod193a3VwX3NldF9waW5fY291bnRlcl9zdGF0ZQorICogXHNhIGh3X3drdXBfc2V0X3Bpbl90cmlnZ2VyCisgKiBcc2EgaHdfd2t1cF9jb25maWd1cmVfcGluCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2t1cF9jb25maWd1cmVfcG9ydChIV19HUElPX1BPUlQgcG9ydCwgdWludDhfdCBlbmFibGVkLCB1aW50OF90IHN0YXRlKQoreworICAgICAgICAqKCh2b2xhdGlsZSB1aW50MTZfdCAqKSgmV0FLRVVQLT5XS1VQX1BPTF9QMF9SRUcpICsgcG9ydCkgPSB+c3RhdGU7IC8vIHJlZ2lzdGVyIGhhcyBpbnZlcnRlZCBsb2dpYyB0aGFuIHN0YXRlIGJpdG1hc2sKKyAgICAgICAgKihXS1VQX1NFTF9QMF9CQVNFX1JFRyArIHBvcnQpID0gZW5hYmxlZDsKKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkgJiYgZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UKKyAgICAgICAgd2t1cF9waW5fY29uZmlnLnBpbl9zdGF0ZVtwb3J0XSA9IGVuYWJsZWQ7CisgICAgICAgIHdrdXBfcGluX2NvbmZpZy5waW5fdHJpZ2dlcltwb3J0XSA9IH5zdGF0ZTsKKyNlbmRpZgorfQorCisvKioKKyAqIFxicmllZiBHZXQgc3RhdGUgKGVuYWJsZWQvZGlzYWJsZWQpIG9mIGFsbCBwaW5zIGluIEdQSU8gcG9ydAorICoKKyAqIE1lYW5pbmcgb2YgYml0cyBpbiByZXR1cm5lZCBiaXRtYXNrIGlzIHRoZSBzYW1lIGFzIGluIGh3X3drdXBfY29uZmlndXJlX3BvcnQoKS4KKyAqCisgKiBccmV0dXJuIHBvcnQgcGluIGV2ZW50IGNvdW50ZXIgc3RhdGUgYml0bWFzaworICoKKyAqIFxzYSBod193a3VwX2NvbmZpZ3VyZV9wb3J0CisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfd2t1cF9nZXRfcG9ydF9zdGF0ZShIV19HUElPX1BPUlQgcG9ydCkKK3sKKyNpZiBkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRQorI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICAgICAgcmV0dXJuIHdrdXBfcGluX2NvbmZpZy5waW5fc3RhdGVbcG9ydF07CisjZWxzZQorICAgICAgICByZXR1cm4gKigodm9sYXRpbGUgdWludDE2X3QgKikoJldBS0VVUC0+V0tVUF9TRUxfR1BJT19QMF9SRUcpICsgcG9ydCk7CisjZW5kaWYKKyNlbHNlCisgICAgICAgIHJldHVybiAqKCh2b2xhdGlsZSB1aW50MTZfdCAqKSgmV0FLRVVQLT5XS1VQX1NFTEVDVF9QMF9SRUcpICsgcG9ydCk7CisjZW5kaWYKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGV2ZW50IHRyaWdnZXJpbmcgc3RhdGUgZm9yIGFsbCBwaW5zIGluIEdQSU8gcG9ydAorICoKKyAqIE1lYW5pbmcgb2YgYml0cyBpbiByZXR1cm5lZCBiaXRtYXNrIGlzIHRoZSBzYW1lIGFzIGluIGh3X3drdXBfY29uZmlndXJlX3BvcnQoKS4KKyAqCisgKiBccmV0dXJuIHBvcnQgcGluIGV2ZW50IHRyaWdnZXJpbmcgc3RhdGUgYml0bWFzaworICoKKyAqIFxzYSBod193a3VwX2NvbmZpZ3VyZV9wb3J0CisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfd2t1cF9nZXRfcG9ydF90cmlnZ2VyKEhXX0dQSU9fUE9SVCBwb3J0KQoreworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BKSAmJiBkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRQorICAgICAgICByZXR1cm4gd2t1cF9waW5fY29uZmlnLnBpbl90cmlnZ2VyW3BvcnRdOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIH4oKigodm9sYXRpbGUgdWludDE2X3QgKikoJldBS0VVUC0+V0tVUF9QT0xfUDBfUkVHKSArIHBvcnQpKTsgLy8gcmVnaXN0ZXIgaGFzIGludmVydGVkIGxvZ2ljIHRoYXQgcmV0dXJuZWQgYml0bWFzaworI2VuZGlmCit9CisKKy8qKgorICogXGJyaWVmIEVtdWxhdGUga2V5IGhpdAorICoKKyAqIEV2ZW50IGNvdW50ZXIgd2lsbCBiZSBpbmNyZWFzZWQgd2l0aCBkZWJvdW5jZSB0aW1lIHRha2VuIGludG8gYWNjb3VudCAoaWYgZW5hYmxlZCkuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2t1cF9lbXVsYXRlX2tleV9oaXQodm9pZCkKK3sKKyAgICAgICAgSFdfV0tVUF9SRUdfU0VURihDVFJMLCBXS1VQX1NGVF9LRVlISVQsIDEpOworICAgICAgICBIV19XS1VQX1JFR19TRVRGKENUUkwsIFdLVVBfU0ZUX0tFWUhJVCwgMCk7Cit9CisKKy8qKgorICogXGJyaWVmIEZyZWV6ZSB3YWtldXAgdGltZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod193a3VwX2ZyZWV6ZSh2b2lkKQoreworICAgICAgICBHUFJFRy0+U0VUX0ZSRUVaRV9SRUcgPSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfV0tVUFRJTV9Nc2s7Cit9CisKKy8qKgorICogXGJyaWVmIFVuZnJlZXplIHdha2V1cCB0aW1lcgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3drdXBfdW5mcmVlemUodm9pZCkKK3sKKyAgICAgICAgR1BSRUctPlJFU0VUX0ZSRUVaRV9SRUcgPSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9XS1VQVElNX01zazsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHBvcnQgc3RhdHVzIG9uIGxhc3Qgd2FrZSB1cAorICoKKyAqIE1lYW5pbmcgb2YgYml0cyBpbiByZXR1cm5lZCBiaXRtYXNrIGlzIHRoZSBzYW1lIGFzIGluIGh3X3drdXBfY29uZmlndXJlX3BvcnQoKS4KKyAqCisgKiBccmV0dXJuIHBvcnQgcGluIGV2ZW50IGNvdW50ZXIgc3RhdGUgYml0bWFzaworICoKKyAqIFxzYSBod193a3VwX2NvbmZpZ3VyZV9wb3J0CisgKgorICovCisjaWYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpICYmIGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfd2t1cF9nZXRfc3RhdHVzKEhXX0dQSU9fUE9SVCBwb3J0KQoreworICAgICAgICByZXR1cm4gd2t1cF9zdGF0dXNbcG9ydF07Cit9CisjZWxpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfd2t1cF9nZXRfc3RhdHVzKEhXX0dQSU9fUE9SVCBwb3J0KQoreworICAgICAgICBzd2l0Y2ggKHBvcnQpIHsKKyAgICAgICAgY2FzZSBIV19HUElPX1BPUlRfMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gSFdfV0tVUF9SRUdfR0VURihTVEFUVVNfMCwgV0tVUF9TVEFUX1AwKTsKKyAgICAgICAgY2FzZSBIV19HUElPX1BPUlRfMToKKyAgICAgICAgICAgICAgICByZXR1cm4gSFdfV0tVUF9SRUdfR0VURihTVEFUVVNfMCwgV0tVUF9TVEFUX1AxKTsKKyAgICAgICAgY2FzZSBIV19HUElPX1BPUlRfMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gSFdfV0tVUF9SRUdfR0VURihTVEFUVVNfMSwgV0tVUF9TVEFUX1AyKTsKKyAgICAgICAgY2FzZSBIV19HUElPX1BPUlRfMzoKKyAgICAgICAgICAgICAgICByZXR1cm4gSFdfV0tVUF9SRUdfR0VURihTVEFUVVNfMiwgV0tVUF9TVEFUX1AzKTsKKyAgICAgICAgY2FzZSBIV19HUElPX1BPUlRfNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gSFdfV0tVUF9SRUdfR0VURihTVEFUVVNfMiwgV0tVUF9TVEFUX1A0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0FSTklORygwKTsvL0ludmFsaWQgYXJndW1lbnQKKyAgICAgICAgfQorfQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIENsZWFyIGxhdGNoIHN0YXR1cworICoKKyAqIFRoaXMgZnVuY3Rpb24gTVVTVCBiZSBjYWxsZWQgYnkgYW55IHVzZXItc3BlY2lmaWVkIGludGVycnVwdCBjYWxsYmFjaywKKyAqIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgbGF0Y2ggc3RhdHVzLgorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgcG9ydCBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIHN0YXR1cyBwaW4gc3RhdHVzIGJpdG1hc2sKKyAqCisgKiBcc2EgaHdfd2t1cF9nZXRfc3RhdHVzCisgKi8KKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkgJiYgZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UKK3N0YXRpYyBpbmxpbmUgdm9pZCBod193a3VwX2NsZWFyX3N0YXR1cyhIV19HUElPX1BPUlQgcG9ydCwgdWludDhfdCBzdGF0dXMpCit7CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKChwb3J0Pj1IV19HUElPX1BPUlRfMCkgJiYgKHBvcnQ8PUhXX0dQSU9fUE9SVF80KSkKKyAgICAgICAgd2t1cF9zdGF0dXNbcG9ydF0gJj0gfnN0YXR1czsKK30KKyNlbGlmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKK3N0YXRpYyBpbmxpbmUgdm9pZCBod193a3VwX2NsZWFyX3N0YXR1cyhIV19HUElPX1BPUlQgcG9ydCwgdWludDhfdCBzdGF0dXMpCit7CisgICAgICAgIHN3aXRjaCAocG9ydCkgeworICAgICAgICBjYXNlIEhXX0dQSU9fUE9SVF8wOgorICAgICAgICAgICAgICAgIEhXX1dLVVBfUkVHX1NFVEYoQ0xFQVJfMCwgV0tVUF9DTEVBUl9QMCwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIV19HUElPX1BPUlRfMToKKyAgICAgICAgICAgICAgICBIV19XS1VQX1JFR19TRVRGKENMRUFSXzAsIFdLVVBfQ0xFQVJfUDEsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSFdfR1BJT19QT1JUXzI6CisgICAgICAgICAgICAgICAgSFdfV0tVUF9SRUdfU0VURihDTEVBUl8xLCBXS1VQX0NMRUFSX1AyLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhXX0dQSU9fUE9SVF8zOgorICAgICAgICAgICAgICAgIEhXX1dLVVBfUkVHX1NFVEYoQ0xFQVJfMiwgV0tVUF9DTEVBUl9QMywgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIV19HUElPX1BPUlRfNDoKKyAgICAgICAgICAgICAgICBIV19XS1VQX1JFR19TRVRGKENMRUFSXzIsIFdLVVBfQ0xFQVJfUDQsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7Ly9JbnZhbGlkIGFyZ3VtZW50CisgICAgICAgIH0KK30KKyNlbmRpZgorCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX1dLVVAgKi8KKyNlbmRpZiAvKiBIV19XS1VQX0hfICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL3N5c190Y3MuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvc3lzX3Rjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZWMyZDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL3N5c190Y3MuaApAQCAtMCwwICsxLDEyMyBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBTWVNURU0KKyAqIFx7CisgKiBcYWRkdG9ncm91cCBUQ1NfSEFORExFUgorICogCisgKiBcYnJpZWYgVENTIEhhbmRsZXIKKyAqCisgKiBceworICovCisKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBAZmlsZSBzeXNfdGNzLmgKKyoKKyogQGJyaWVmIFRDUyBIYW5kbGVyIGhlYWRlciBmaWxlLgorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIFNZU19UQ1NfSF8KKyNkZWZpbmUgU1lTX1RDU19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAic2RrX2RlZnMuaCIKKwordHlwZWRlZiBlbnVtIHN5c190Y3NfYXJlYV90eXBlIHsKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQorICAgICAgICB0Y3NfYmxlLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTRV9GVERGCisgICAgICAgIHRjc19mdGRmLAorI2VuZGlmCisgICAgICAgIHRjc19yYWRpbywKKyAgICAgICAgdGNzX2NoYXJnZXIsCisgICAgICAgIHRjc19hdWRpbywKKyAgICAgICAgdGNzX3N5c3RlbSwgLyogTGFzdCBhcmVhLiBBZGQgYW55IG1pc3NpbmcgYXJlYXMgYWJvdmUgdGhpcyEgKi8KK30gc3lzX3Rjc19hcmVhX3Q7CisKKy8qKgorICogXGJyaWVmIEZsYWcgdG8gY2hlY2sgd2hldGhlciB0aGUgVENTIGlzIHdyaXR0ZW4gb3Igbm90LgorICogXGRldGFpbHMgdHJ1ZSwgdGhlIFRDUyBpcyB3cml0dGVuICh0aGUgQkFOREdBUF9SRUcgdmFsdWUgZXhpc3RzIGluIHRoZSBUQ1MpCisgKiAgICAgICAgICBmYWxzZSwgdGhlIFRDUyBpcyBlbXB0eQorICovCitleHRlcm4gYm9vbCBzeXNfdGNzX2lzX2NhbGlicmF0ZWRfY2hpcDsKKworLyoqCisgKiBcYnJpZWYgVGhlIFhUQUwxNk0gc2V0dGxpbmcgdGltZSAoaW4gVENTKS4KKyAqIFxkZXRhaWxzIFhUQUwzMkssIHRoZSBzZXR0bGluZyB0aW1lIGlzIGV4cHJlc3NlZCBpbiBjbG9jayBjeWNsZXMKKyAqICAgICAgICAgIFJDWCwgbm90IGFwcGxpY2FibGU7IHRoZSBTREsgaGFyZC1jb2RlZCB2YWx1ZSBpcyB1c2VkCisgKiAgICAgICAgICBJZiBpdCBpcyB6ZXJvLCB0aGUgaGFyZC1jb2RlZCB2YWx1ZSAoZGdfY29uZmlnWFRBTDE2X1NFVFRMRV9USU1FKSBpcyBhcHBsaWVkLgorICovCitleHRlcm4gdWludDE2X3Qgc3lzX3Rjc194dGFsMTZtX3NldHRsaW5nX3RpbWU7CisKKy8qKgorICogXGJyaWVmIEluaXRpYWxpemUgdGhlIHZhcmlhYmxlcyB1c2VkIGZyb20gdGhlIFRDUyBoYW5kbGluZyBtb2R1bGUuCisgKgorICovCit2b2lkIHN5c190Y3NfaW5pdCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU3RvcmUgVENTIDxhZGRyZXNzLCB2YWx1ZT4gcGFpciBpbiB0aGUgR2xvYmFsIFRDUyBhcnJheSBpZiBpdCBwb2ludHMgdG8gYSByZWdpc3RlcgorICogICAgICAgIHRoYXQgaXMgbm90IGluIHRoZSBBT04gcG93ZXIgZG93bWFpbiBvciBpcyBub3QgcmV0YWluZWQsIGVsc2UgaXQgYXBwbGllcyB0aGUgdmF1bGUgdG8KKyAqICAgICAgICB0aGUgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gYWRkcmVzcyB0aGUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIKKyAqIFxwYXJhbSBbaW5dIHZhbHVlIHRoZSB2YWx1ZSBmb3IgdGhpcyByZWdpc3RlcgorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiB0aGUgY2hpcCBpcyBjYWxpYnJhdGVkICh0aGUgQkFOREdBUCBzZXR0aW5nIGhhcyBiZWVuIGFwcGxpZWQpLCBlbHNlIGZhbHNlLgorICoKKyAqIFx3YXJuaW5nIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBSQzE2IG11c3QgaGF2ZSBiZWVuIHNldCBhcyB0aGUgc3lzdGVtIGNsb2NrIQorICoKKyAqLworYm9vbCBzeXNfdGNzX3N0b3JlX3BhaXIodWludDMyX3QgYWRkcmVzcywgdWludDMyX3QgdmFsdWUpOworCisvKioKKyAqIFxicmllZiBTb3J0IHRoZSByZWdpc3RlcnMgb2YgdGhlIHJlZ2lzdGVycyBpbiB0aGUgTWVtb3J5IE1hcCBvZiB0aGUgY2hpcCB0byBhIGRpZmZlcmVudCAiY2xhc3NlcyIKKyAqICAgICAgICBpbiB0aGUgVENTIGFycmF5LgorICoKKyAqLwordm9pZCBzeXNfdGNzX3NvcnRfYXJyYXkodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEFwcGx5IHRoZSA8YWRkcmVzcywgdmFsdWU+IHBhaXJzIGxvY2F0ZWQgaW4gYSAiY2xhc3MiIG9mIHRoZSBUQ1MgYXJyYXkuIFRoaXMgaXMgZG9uZSBvbmx5CisgKiAgICAgICAgZm9yIGNhbGlicmF0ZWQgY2hpcHMhCisgKgorICovCit2b2lkIHN5c190Y3NfYXBwbHkoc3lzX3Rjc19hcmVhX3QgYXJlYSk7CisKKyNlbmRpZiAvKiBTWVNfVENTX0hfICovCisKKy8qKgorXH0KK1x9CitcfQorKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19jcG0uYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19jcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJkNDY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X2NwbS5jCkBAIC0wLDAgKzEsODk0IEBACisvKioKK1xhZGR0b2dyb3VwIEJTUAorXHsKK1xhZGR0b2dyb3VwIERFVklDRVMKK1x7CitcYWRkdG9ncm91cCBDUE0KK1x7CisqLworCisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogQGZpbGUgaHdfY3BtLmMKKyoKKyogQGJyaWVmIENsb2NrIGFuZCBQb3dlciBNYW5hZ2VyIERyaXZlcgorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpZiBkZ19jb25maWdVU0VfSFdfQ1BNCisKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImh3X2NwbS5oIgorI2luY2x1ZGUgImh3X3dhdGNoZG9nLmgiCisKKworLyoKKyAqIFRoZXNlIHZhcmlhYmxlcyBzaG91bGQgYmUgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGZyYW1ld29yay9zZGsgdXNlZAorICovCitleHRlcm4gc3lzX2Nsa190IGNtX3N5c2NsazsKK2V4dGVybiBhaGJfZGl2X3QgY21fYWhiY2xrOworCisKKy8qCisgKiBHbG9iYWwgdmFyaWFibGVzCisgKi8KK19fUkVUQUlORURfVU5JTklUIHVpbnQxNl90IGh3X2NwbV9ib2RfZW5hYmxlZF9pbl90Y3M7CisKKyNpZiAoZGdfY29uZmlnUE9XRVJfMVY4X0FDVElWRSA9PSAxKQorX19SRVRBSU5FRF9SVyBzdGF0aWMgYm9vbCBjcG1fMXY4X3N0YXRlID0gdHJ1ZTsKKyNlbHNlCitzdGF0aWMgY29uc3QgYm9vbCBjcG1fMXY4X3N0YXRlID0gZmFsc2U7CisjZW5kaWYKKworCisvKgorICogTG9jYWwgdmFyaWFibGVzCisgKi8KKworCisKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucworICovCisKKworCisvKgorICogRnVuY3Rpb24gZGVmaW5pdGlvbnMKKyAqLworCisKK3VpbnQzMl90IGh3X2NwbV9zeXNjbGtfaXNfcmMxNih2b2lkKQoreworICAgIHVpbnQzMl90IHJldCA9IDA7CisKKyAgICBpZiAoUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBTWVNfQ0xLX1NFTCkgPT0gU1lTX0NMS19JU19SQzE2KQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisKK3VpbnQzMl90IGh3X2NwbV9zeXNjbGtfaXNfeHRhbDE2bSh2b2lkKQoreworICAgIHVpbnQzMl90IHJldCA9IDA7CisKKyAgICBpZiAoUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBTWVNfQ0xLX1NFTCkgPT0gU1lTX0NMS19JU19YVEFMMTZNKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisKK3ZvaWQgaHdfY3BtX3NldF9kaXZuKGJvb2wgZnJlcSkKK3sKKyAgICB1aW50MzJfdCByZWd2YWw7CisgICAgaW50IHZhbDsKKworICAgIGlmIChmcmVxKQorICAgIHsKKyAgICAgICAgdmFsID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmFsID0gMDsKKyAgICB9CisKKyAgICByZWd2YWwgPSBDUkdfVE9QLT5DTEtfQ1RSTF9SRUc7CisgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIERJVk5fWFRBTDMyTV9NT0RFLCByZWd2YWwsIHZhbCk7CisgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFhUQUwzMk1fTU9ERSwgcmVndmFsLCB2YWwpOworICAgIENSR19UT1AtPkNMS19DVFJMX1JFRyA9IHJlZ3ZhbDsKKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkKKyAgICBDUkdfVE9QLT5ESVZOX1NZTkNfUkVHID0gdmFsOworI2VuZGlmCit9CisKKworYm9vbCBod19jcG1faXNfcmMxNl9hbGxvd2VkKHZvaWQpCit7CisgICAgYm9vbCByZXQgPSBmYWxzZTsKKyAgICB1aW50MzJfdCB0bXA7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgdG1wID0gQ1JHX1RPUC0+U1lTX1NUQVRfUkVHOworCisjaWZkZWYgQ09ORklHX1VTRV9GVERGCisKKyAgICAgICAgLy8gQ2hlY2sgRlRERgorICAgICAgICBpZiAodG1wICYgUkVHX01TSyhDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIEZUREZfSVNfVVApKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0VfQkxFCisKKyAgICAgICAgLy8gQ2hlY2sgQkxFCisgICAgICAgIGlmICh0bXAgJiBSRUdfTVNLKENSR19UT1AsIFNZU19TVEFUX1JFRywgQkxFX0lTX1VQKSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworI2VuZGlmCisKKyAgICAgICAgLy8gQ2hlY2sgQVBIWS9EUEhZICYgQ09FWAorICAgICAgICBpZiAodG1wICYgUkVHX01TSyhDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFJBRF9JU19VUCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRtcCAmIFJFR19NU0soQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBQRVJfSVNfVVApKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBDaGVjayBTUkMKKyAgICAgICAgICAgIGlmIChSRUdfR0VURihBUFUsIFNSQzFfQ1RSTF9SRUcsIFNSQ19FTikgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgUERNCisgICAgICAgICAgICBpZiAoUkVHX0dFVEYoQ1JHX1BFUiwgUERNX0RJVl9SRUcsIENMS19QRE1fRU4pID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIFVTQgorICAgICAgICAgICAgaWYgKFJFR19HRVRGKFVTQiwgVVNCX01DVFJMX1JFRywgVVNCRU4pID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRtcCA9IENSR19QRVItPkNMS19QRVJfUkVHOworCisgICAgICAgICAgICAvLyBDaGVjayBVQVJUMS8yCisgICAgICAgICAgICBpZiAodG1wICYgUkVHX01TSyhDUkdfUEVSLCBDTEtfUEVSX1JFRywgVUFSVF9FTkFCTEUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgICAgICAgICAgLy8gQ2hlY2sgQURDIGNsb2NrCisgICAgICAgICAgICBpZiAoUkVHX0dFVEYoR1BBREMsIEdQX0FEQ19DVFJMX1JFRywgR1BfQURDX0VOKSAmJgorICAgICAgICAgICAgICAgICghKHRtcCAmIFJFR19NU0soQ1JHX1BFUiwgQ0xLX1BFUl9SRUcsIEFEQ19DTEtfU0VMKSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBJMkMgY2xvY2sKKyAgICAgICAgICAgIGlmICgodG1wICYgUkVHX01TSyhDUkdfUEVSLCBDTEtfUEVSX1JFRywgSTJDX0VOQUJMRSkpICYmCisgICAgICAgICAgICAgICAgKCEodG1wICYgUkVHX01TSyhDUkdfUEVSLCBDTEtfUEVSX1JFRywgSTJDX0NMS19TRUwpKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIFNQSSBjbG9jaworICAgICAgICAgICAgaWYgKCh0bXAgJiBSRUdfTVNLKENSR19QRVIsIENMS19QRVJfUkVHLCBTUElfRU5BQkxFKSkgJiYKKyAgICAgICAgICAgICAgICAoISh0bXAgJiBSRUdfTVNLKENSR19QRVIsIENMS19QRVJfUkVHLCBTUElfQ0xLX1NFTCkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgUENNIGNsb2NrCisgICAgICAgICAgICB0bXAgPSBDUkdfUEVSLT5QQ01fRElWX1JFRzsKKworICAgICAgICAgICAgaWYgKCh0bXAgJiBSRUdfTVNLKENSR19QRVIsIFBDTV9ESVZfUkVHLCBDTEtfUENNX0VOKSkgJiYKKyAgICAgICAgICAgICAgICAoISh0bXAgJiBSRUdfTVNLKENSR19QRVIsIFBDTV9ESVZfUkVHLCBQQ01fU1JDX1NFTCkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogS0JTQ04gYW5kIFFVQUQgYXJlIG5vdCBzZXJpb3VzbHkgYWZmZWN0ZWQgYnkgdGhlIGNsb2NrIHN3aXRjaCBhbmQsIHRodXMsCisgICAgICAgICAgICAgKiB0aGV5IGNhbm5vdCBibG9jayBpdCEKKyAgICAgICAgICAgICAqLworICAgICAgICB9CisKKyAgICAgICAgdG1wID0gQ1JHX1RPUC0+Q0xLX1RNUl9SRUc7CisKKyAgICAgICAgLy8gQ2hlY2sgVGltZXIwIGNsb2NrCisgICAgICAgIGlmICgodG1wICYgUkVHX01TSyhDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMF9FTkFCTEUpKSAmJgorICAgICAgICAgICAgKCEodG1wICYgUkVHX01TSyhDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMF9DTEtfU0VMKSkpKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIFRpbWVyMiBjbG9jaworICAgICAgICBpZiAoKHRtcCAmIFJFR19NU0soQ1JHX1RPUCwgQ0xLX1RNUl9SRUcsIFRNUjJfRU5BQkxFKSkgJiYKKyAgICAgICAgICAgICghKHRtcCAmIFJFR19NU0soQ1JHX1RPUCwgQ0xLX1RNUl9SRUcsIFRNUjJfQ0xLX1NFTCkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBCcmVhdGhlLCBTT0MgYW5kIFdET0cgYXJlIG5vdCBzZXJpb3VzbHkgYWZmZWN0ZWQgYnkgdGhlIGNsb2NrIHN3aXRjaCBhbmQsIHRodXMsCisgICAgICAgICAqIHRoZXkgY2Fubm90IGJsb2NrIGl0IQorICAgICAgICAgKi8KKworICAgICAgICByZXQgPSB0cnVlOworICAgIH0KKyAgICB3aGlsZSAoMCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCisKK3ZvaWQgaHdfY3BtX3NldF9zeXNjbGsodWludDMyX3QgbW9kZSkKK3sKKyAgICAvKiBNYWtlIHN1cmUgYSB2YWxpZCBzeXMgY2xvY2sgaXMgcmVxdWVzdGVkICovCisgICAgQVNTRVJUX1dBUk5JTkcobW9kZSA8PSBTWVNfQ0xLX0lTX1BMTCk7CisKKyAgICBSRUdfU0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFNZU19DTEtfU0VMLCBtb2RlKTsKKworICAgIC8vIFdhaXQgdW50aWwgdGhlIHN3aXRjaCBpcyBkb25lIQorICAgIHN3aXRjaCAobW9kZSkKKyAgICB7CisgICAgY2FzZSBTWVNfQ0xLX0lTX1hUQUwxNk06CisgICAgICAgIHdoaWxlIChSRUdfR0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFJVTk5JTkdfQVRfWFRBTDE2TSkgPT0gMCkge30KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1lTX0NMS19JU19SQzE2OgorICAgICAgICB3aGlsZSAoUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBSVU5OSU5HX0FUX1JDMTZNKSA9PSAwKSB7fQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTWVNfQ0xLX0lTX0xQOgorICAgICAgICB3aGlsZSAoUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBSVU5OSU5HX0FUXzMySykgPT0gMCkge30KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1lTX0NMS19JU19QTEw6CisgICAgICAgIHdoaWxlIChSRUdfR0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFJVTk5JTkdfQVRfUExMOTZNKSA9PSAwKSB7fQorCisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCit2b2lkIGh3X2NwbV9zaG9ydF9kZWxheSh2b2lkKQoreworICAgIHZvbGF0aWxlIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IDIwOyBpKyspOworfQorCisKK3ZvaWQgaHdfY3BtX3BsbF9zeXNfb24odm9pZCkKK3sKKyAgICAvKiBCZWZvcmUgZW5hYmxpbmcgdGhlIFBMTCBMRE8sIHRoZSAxLjRWIHZvbHRhZ2UgbmVlZHMgdG8gYmUgcHJlc2VudDsgaW4gcmVhbC1saWZlIHRoaXMKKyAgICAgKiBpcyBhY2hpZXZlZCBieSBmaXJzdCB0dXJuaW5nIG9uIHRoZSAxLjRWIEFDT1JFIExETywgdGhlbiB0aGUgRENEQyBjb252ZXJ0ZXIgdG8gdGFrZSBvdmVyCisgICAgICogdGhlIGdlbmVyYXRpb24gb2YgMS40ViBhbmQgZmluYWxseSB0dXJuaW5nIG9mZiB0aGUgQUNPUkUgTERPLgorICAgICAqLworCisgICAgLyogTERPIFBMTCBlbmFibGUuICovCisgICAgUkVHX1NFVF9CSVQoR1BSRUcsIFBMTF9TWVNfQ1RSTDFfUkVHLCBMRE9fUExMX0VOQUJMRSk7CisKKyAgICAvKiBDb25maWd1cmUgc3lzdGVtIFBMTC4gKi8KKyAgICBSRUdfU0VURihHUFJFRywgUExMX1NZU19DVFJMMV9SRUcsIFBMTF9SX0RJViwgMSk7IC8qIERlZmF1bHQvcmVzZXQgdmFsdWUuICovCisKKyAgICAvKiBQcm9ncmFtIE4tZGl2aWRlciBhbmQgREVMX1NFTC4gKi8KKyAgICBSRUdfU0VUX0JJVChHUFJFRywgUExMX1NZU19DVFJMMl9SRUcsIFBMTF9TRUxfTUlOX0NVUl9JTlQpOyAgICAgLy8gTGFzdCByZXZpZXcgZGF0ZTogRmViIDE1LCAyMDE2IC0gMTI6MjU6NDcKKworICAgIC8qIE5vdyB0dXJuIG9uIFBMTC4gKi8KKyAgICBSRUdfU0VUX0JJVChHUFJFRywgUExMX1NZU19DVFJMMV9SRUcsIFBMTF9FTik7CisKKyAgICB3aGlsZSAoKEdQUkVHLT5QTExfU1lTX1NUQVRVU19SRUcgJiBSRUdfTVNLKEdQUkVHLCBQTExfU1lTX1NUQVRVU19SRUcsIExET19QTExfT0spKSA9PSAwKSB7fQorCisgICAgLyogQW5kIHdhaXQgdW50aWwgbG9jay4gKi8KKyAgICB3aGlsZSAoKEdQUkVHLT5QTExfU1lTX1NUQVRVU19SRUcgJiBSRUdfTVNLKEdQUkVHLCBQTExfU1lTX1NUQVRVU19SRUcsIFBMTF9MT0NLX0ZJTkUpKSA9PSAwKSB7fQorfQorCisKK3ZvaWQgaHdfY3BtX3BsbF9zeXNfb2ZmKHZvaWQpCit7CisgICAgLy8gVGhlIFBMTCBpcyBub3QgdGhlIHN5c3RlbSBjbGsuCisgICAgd2hpbGUgKChDUkdfVE9QLT5DTEtfQ1RSTF9SRUcgJiBSRUdfTVNLKENSR19UT1AsIENMS19DVFJMX1JFRywgUlVOTklOR19BVF9QTEw5Nk0pKSAhPSAwKTsKKworICAgIEdQUkVHLT5QTExfU1lTX0NUUkwxX1JFRyA9IDB4MDAwMDsgICAgICAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggb2ZmIHRoZSBQTEwuCit9CisKKworX19SRVRBSU5FRF9DT0RFIHZvaWQgaHdfY3BtX3N0YXJ0X2NhbGlicmF0aW9uKGNhbF9jbGtfdCBjbGtfdHlwZSwgdWludDMyX3QgY3ljbGVzKQoreworICAgIEFTU0VSVF9XQVJOSU5HKFJFR19HRVRGKEFOQU1JU0MsIENMS19SRUZfU0VMX1JFRywgUkVGX0NBTF9TVEFSVCkgPT0gMCk7IC8vIE11c3QgYmUgZGlzYWJsZWQKKworICAgIEFOQU1JU0MtPkNMS19SRUZfQ05UX1JFRyA9IGN5Y2xlczsgICAgICAgICAgICAgICAgICAgICAgLy8gIyBvZiBjYWwgY2xvY2sgY3ljbGVzCisgICAgUkVHX1NFVEYoQU5BTUlTQywgQ0xLX1JFRl9TRUxfUkVHLCBSRUZfQ0xLX1NFTCwgY2xrX3R5cGUpOworICAgIFJFR19TRVRfQklUKEFOQU1JU0MsIENMS19SRUZfU0VMX1JFRywgUkVGX0NBTF9TVEFSVCk7Cit9CisKKwordWludDMyX3QgaHdfY3BtX2dldF9jYWxpYnJhdGlvbl9kYXRhKHZvaWQpCit7CisgICAgdWludDMyX3QgaGlnaDsKKyAgICB1aW50MzJfdCBsb3c7CisgICAgdWludDMyX3QgdmFsdWU7CisKKyAgICB3aGlsZSAoUkVHX0dFVEYoQU5BTUlTQywgQ0xLX1JFRl9TRUxfUkVHLCBSRUZfQ0FMX1NUQVJUKSA9PSAxKTsgICAgICAgICAvLyBXYWl0IHVudGlsIGl0J3MgZmluaXNoZWQKKworICAgIGhpZ2ggPSBBTkFNSVNDLT5DTEtfUkVGX1ZBTF9IX1JFRzsKKyAgICBsb3cgPSBBTkFNSVNDLT5DTEtfUkVGX1ZBTF9MX1JFRzsKKyAgICB2YWx1ZSA9IChoaWdoIDw8IDE2KSArIGxvdzsKKworICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBod19jcG1fZGNkY19jb25maWcodm9pZCkKK3sKKyAgICB1aW50MzJfdCByZWc7CisKKyAgICAvKgorICAgICAqIFByZWZlcnJlZCBzZXR0aW5ncyBzZWN0aW9uCisgICAgICogTGFzdCByZXZpZXcgZGF0ZTogRmViIDE1LCAyMDE2IC0gMTI6MjU6NDcKKyAgICAgKi8KKyAgICBSRUdfQ0xSX0JJVChEQ0RDLCBEQ0RDX0NUUkxfMF9SRUcsIERDRENfRldfRU5BQkxFKTsKKworICAgIHJlZyA9IERDREMtPkRDRENfSVJRX01BU0tfUkVHOworICAgIFJFR19TRVRfRklFTEQoRENEQywgRENEQ19JUlFfTUFTS19SRUcsIERDRENfVjE4UF9USU1FT1VUX0lSUV9NQVNLLCByZWcsIDEpOworICAgIFJFR19TRVRfRklFTEQoRENEQywgRENEQ19JUlFfTUFTS19SRUcsIERDRENfVkREX1RJTUVPVVRfSVJRX01BU0ssIHJlZywgMSk7CisgICAgUkVHX1NFVF9GSUVMRChEQ0RDLCBEQ0RDX0lSUV9NQVNLX1JFRywgRENEQ19WMThfVElNRU9VVF9JUlFfTUFTSywgcmVnLCAxKTsKKyAgICBSRUdfU0VUX0ZJRUxEKERDREMsIERDRENfSVJRX01BU0tfUkVHLCBEQ0RDX1YxNF9USU1FT1VUX0lSUV9NQVNLLCByZWcsIDEpOworICAgIERDREMtPkRDRENfSVJRX01BU0tfUkVHID0gcmVnOworCisgICAgUkVHX1NFVF9CSVQoRENEQywgRENEQ19UUklNX1JFRywgRENEQ19QX0NPTVBfTUFOX1RSSU0pOworCisgICAgRENEQy0+RENEQ19WMTRfMF9SRUcgJj0gfihSRUdfTVNLKERDREMsIERDRENfVjE0XzBfUkVHLCBEQ0RDX1YxNF9DVVJfTElNX01JTikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhEQ0RDLCBEQ0RDX1YxNF8wX1JFRywgRENEQ19WMTRfRkFTVF9SQU1QSU5HKSk7CisKKyAgICBEQ0RDLT5EQ0RDX1YxOF8wX1JFRyAmPSB+KFJFR19NU0soRENEQywgRENEQ19WMThfMF9SRUcsIERDRENfVjE4X0NVUl9MSU1fTUlOKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKERDREMsIERDRENfVjE4XzBfUkVHLCBEQ0RDX1YxOF9GQVNUX1JBTVBJTkcpKTsKKworICAgIERDREMtPkRDRENfVjE4UF8wX1JFRyAmPSB+KFJFR19NU0soRENEQywgRENEQ19WMThQXzBfUkVHLCBEQ0RDX1YxOFBfQ1VSX0xJTV9NSU4pIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKERDREMsIERDRENfVjE4UF8wX1JFRywgRENEQ19WMThQX0ZBU1RfUkFNUElORykpOworCisgICAgRENEQy0+RENEQ19WRERfMF9SRUcgJj0gfihSRUdfTVNLKERDREMsIERDRENfVkREXzBfUkVHLCBEQ0RDX1ZERF9DVVJfTElNX01JTikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhEQ0RDLCBEQ0RDX1ZERF8wX1JFRywgRENEQ19WRERfRkFTVF9SQU1QSU5HKSk7CisKKyAgICBSRUdfU0VURihEQ0RDLCBEQ0RDX1ZERF8xX1JFRywgRENEQ19WRERfQ1VSX0xJTV9NQVhfTFYsIDB4RCk7CisKKyAgICBSRUdfU0VURihEQ0RDLCBEQ0RDX1YxNF8wX1JFRywgRENEQ19WMTRfVk9MVEFHRSwgMHg3KTsKKworICAgIGlmIChkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFID09IDEpCisgICAgeworICAgICAgICBSRUdfU0VURihEQ0RDLCBEQ0RDX1YxOF8wX1JFRywgRENEQ19WMThfVk9MVEFHRSwgMHgxNik7CisgICAgfQorCisgICAgaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOFAgPT0gMSkKKyAgICB7CisgICAgICAgIFJFR19TRVRGKERDREMsIERDRENfVjE4UF8wX1JFRywgRENEQ19WMThQX1ZPTFRBR0UsIDB4MTYpOworICAgIH0KKworICAgIC8vIEVuZCBvZiBwcmVmZXJyZWQgc2V0dGluZ3MKKworICAgIERDREMtPkRDRENfVkREXzFfUkVHIHw9ICgoMSA8PCBSRUdfUE9TKERDREMsIERDRENfVkREXzFfUkVHLCBEQ0RDX1ZERF9FTkFCTEVfSFYpKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IFJFR19QT1MoRENEQywgRENEQ19WRERfMV9SRUcsIERDRENfVkREX0VOQUJMRV9MVikpKTsKKworICAgIGlmICgoZGdfY29uZmlnUE9XRVJfMVY4X0FDVElWRSA9PSAxKSAmJiBjcG1fMXY4X3N0YXRlKQorICAgIHsKKyAgICAgICAgRENEQy0+RENEQ19WMThfMV9SRUcgfD0gKDEgPDwgUkVHX1BPUyhEQ0RDLCBEQ0RDX1YxOF8xX1JFRywgRENEQ19WMThfRU5BQkxFX0hWKSk7CisgICAgICAgIERDREMtPkRDRENfVjE4XzFfUkVHICY9IH5SRUdfTVNLKERDREMsIERDRENfVjE4XzFfUkVHLCBEQ0RDX1YxOF9FTkFCTEVfTFYpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEQ0RDLT5EQ0RDX1YxOF8xX1JFRyAmPSB+KFJFR19NU0soRENEQywgRENEQ19WMThfMV9SRUcsIERDRENfVjE4X0VOQUJMRV9IVikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soRENEQywgRENEQ19WMThfMV9SRUcsIERDRENfVjE4X0VOQUJMRV9MVikpOworICAgIH0KKworICAgIGlmIChkZ19jb25maWdQT1dFUl8xVjhQID09IDEpCisgICAgeworICAgICAgICBEQ0RDLT5EQ0RDX1YxOFBfMV9SRUcgfD0gKDEgPDwgUkVHX1BPUyhEQ0RDLCBEQ0RDX1YxOFBfMV9SRUcsIERDRENfVjE4UF9FTkFCTEVfSFYpKTsKKyAgICAgICAgRENEQy0+RENEQ19WMThQXzFfUkVHICY9IH5SRUdfTVNLKERDREMsIERDRENfVjE4UF8xX1JFRywgRENEQ19WMThQX0VOQUJMRV9MVik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERDREMtPkRDRENfVjE4UF8xX1JFRyAmPSB+KFJFR19NU0soRENEQywgRENEQ19WMThQXzFfUkVHLCBEQ0RDX1YxOFBfRU5BQkxFX0hWKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soRENEQywgRENEQ19WMThQXzFfUkVHLCBEQ0RDX1YxOFBfRU5BQkxFX0xWKSk7CisgICAgfQorfQorCit2b2lkIGh3X2NwbV9kY2RjX29uKHZvaWQpCit7CisgICAgRENEQy0+RENEQ19WMTRfMV9SRUcgfD0gKCgxIDw8IFJFR19QT1MoRENEQywgRENEQ19WMTRfMV9SRUcsIERDRENfVjE0X0VOQUJMRV9IVikpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgUkVHX1BPUyhEQ0RDLCBEQ0RDX1YxNF8xX1JFRywgRENEQ19WMTRfRU5BQkxFX0xWKSkpOworCisgICAgUkVHX1NFVEYoRENEQywgRENEQ19WRERfMF9SRUcsIERDRENfVkREX1ZPTFRBR0UsIDB4MTApOyAgICAgIC8vIDEuMiBWCisKKyAgICBSRUdfU0VURihEQ0RDLCBEQ0RDX0NUUkxfMF9SRUcsIERDRENfTU9ERSwgMSk7CisKKyAgICAvLyBUcmltIHRoZSBMRE9zIGRvd24gdG8gbG93ZXN0IHBvc3NpYmxlIHZvbHRhZ2Ugc28gRENEQyBjYW4gdGFrZSBvdmVyCisgICAgQ1JHX1RPUC0+TERPX0NUUkwxX1JFRyAmPSB+UkVHX01TSyhDUkdfVE9QLCBMRE9fQ1RSTDFfUkVHLCBMRE9fUkFESU9fU0VUVkREKTsKKyAgICBSRUdfU0VURihDUkdfVE9QLCBMRE9fQ1RSTDFfUkVHLCBMRE9fQ09SRV9TRVRWREQsIDB4Mik7CisKKyAgICAvLyBUdXJuIG9mZiBMRE9zCisgICAgQ1JHX1RPUC0+TERPX0NUUkwxX1JFRyAmPSB+UkVHX01TSyhDUkdfVE9QLCBMRE9fQ1RSTDFfUkVHLCBMRE9fUkFESU9fRU5BQkxFKTsKKyAgICBDUkdfVE9QLT5MRE9fQ1RSTDJfUkVHICY9IH4oUkVHX01TSyhDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVYyX09OKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9GTEFTSF9PTikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjhfUEFfT04pKTsKKworICAgIC8vIFRyaW0gdGhlIExET3MgYmFjayB0byBub3JtYWwgbGV2ZWxzCisgICAgaHdfY3BtX3Jlc2V0X3JhZGlvX3ZkZCgpOworICAgIENSR19UT1AtPkxET19DVFJMMV9SRUcgJj0gflJFR19NU0soQ1JHX1RPUCwgTERPX0NUUkwxX1JFRywgTERPX0NPUkVfU0VUVkREKTsKK30KKworCit2b2lkIGh3X2NwbV9zZXRfcHJlZmVycmVkX3ZhbHVlcyh2b2lkKQoreworICAgIHVpbnQzMl90IHJlZzsKKworICAgIHJlZyA9IENSR19UT1AtPkNMS18xNk1fUkVHOworCisgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBDTEtfMTZNX1JFRywgWFRBTDE2X0hQQVNTX0ZMVF9FTiwgcmVnLCAxKTsgLy8gTGFzdCByZXZpZXcgZGF0ZTogRmViIDE1LCAyMDE2IC0gMTI6MjU6NDcKKyAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIENMS18xNk1fUkVHLCBYVEFMMTZfQU1QX1RSSU0sIHJlZywgNSk7CisgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBDTEtfMTZNX1JFRywgWFRBTDE2X0NVUl9TRVQsIHJlZywgNSk7CisKKyAgICBDUkdfVE9QLT5DTEtfMTZNX1JFRyA9IHJlZzsKKworICAgIFJFR19TRVRGKENSR19UT1AsIEJBTkRHQVBfUkVHLCBMRE9fU0xFRVBfVFJJTSwgMHg4KTsKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQkFOREdBUF9SRUcsIEJZUEFTU19DT0xEX0JPT1RfRElTQUJMRSwgMSk7IC8vIExhc3QgcmV2aWV3IGRhdGU6IEZlYiAxNSwgMjAxNiAtIDEyOjI1OjQ3CisjZW5kaWYKK30KKwordm9pZCBod19jcG1fY29uZmlndXJlX3h0YWwzMmtfcGlucyh2b2lkKQoreworICAgIEdQSU8tPlAyMF9NT0RFX1JFRyA9IDB4MjY7CisgICAgR1BJTy0+UDIxX01PREVfUkVHID0gMHgyNjsKK30KKwordm9pZCBod19jcG1fY29uZmlndXJlX2V4dDMya19waW5zKHZvaWQpCit7CisgICAgR1BJTy0+UDIwX01PREVfUkVHID0gMHgwOworfQorCit2b2lkIGh3X2NwbV90cmlnZ2VyX3N3X2N1cnNvcih2b2lkKQoreworICAgIGlmIChkZ19jb25maWdVU0VfU1dfQ1VSU09SID09IDEpCisgICAgeworICAgICAgICBpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9NQl9SRVYgPT0gQkxBQ0tfT1JDQV9NQl9SRVZfRCkKKyAgICAgICAgeworICAgICAgICAgICAgU1dfQ1VSU09SX1NFVCA9IDEgPDwgU1dfQ1VSU09SX1BJTjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFNXX0NVUlNPUl9SRVNFVCA9IDEgPDwgU1dfQ1VSU09SX1BJTjsKKyAgICAgICAgfQorCisgICAgICAgIFNXX0NVUlNPUl9HUElPID0gMHgzMDA7CisKKyAgICAgICAgaHdfY3BtX2RlbGF5X3VzZWMoNTApOworCisgICAgICAgIGlmIChkZ19jb25maWdCTEFDS19PUkNBX01CX1JFViA9PSBCTEFDS19PUkNBX01CX1JFVl9EKQorICAgICAgICB7CisgICAgICAgICAgICBTV19DVVJTT1JfUkVTRVQgPSAxIDw8IFNXX0NVUlNPUl9QSU47CisgICAgICAgIH0KKworICAgICAgICBod19jcG1fc2V0dXBfc3dfY3Vyc29yKCk7CisgICAgfQorfQorCit2b2lkIGh3X2NwbV9yZXNldF9zeXN0ZW0odm9pZCkKK3sKKyAgICBfX2FzbSB2b2xhdGlsZSgiIGNwc2lkIGkgIik7CisKKyAgICBod193YXRjaGRvZ191bnJlZ2lzdGVyX2ludCgpOworICAgIGh3X3dhdGNoZG9nX3NldF9wb3NfdmFsKDEpOworICAgIGh3X3dhdGNoZG9nX3VuZnJlZXplKCk7CisKKyAgICB3aGlsZSAoMSk7Cit9CisKK3ZvaWQgaHdfY3BtX3JlYm9vdF9zeXN0ZW0odm9pZCkKK3sKKyAgICBfX2FzbSB2b2xhdGlsZSgiIGNwc2lkIGkgIik7CisKKyAgICBod193YXRjaGRvZ19nZW5fUlNUKCk7CisgICAgaHdfd2F0Y2hkb2dfc2V0X3Bvc192YWwoMSk7CisgICAgaHdfd2F0Y2hkb2dfdW5mcmVlemUoKTsKKworICAgIHdoaWxlICgxKTsKK30KKwordm9pZCBod19jcG1fYXNzZXJ0X3RyaWdnZXJfZ3Bpbyh2b2lkKQoreworICAgIGlmIChFWENFUFRJT05fREVCVUcgPT0gMSkKKyAgICB7CisgICAgICAgIGlmIChkZ19jb25maWdMUF9DTEtfU09VUkNFID09IExQX0NMS19JU19ESUdJVEFMKQorICAgICAgICB7CisgICAgICAgICAgICBod19jcG1fY29uZmlndXJlX2V4dDMya19waW5zKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyMDAwKQorICAgICAgICAgICAgICAgICB8fCAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzI3NjgpKQorICAgICAgICB7CisgICAgICAgICAgICBod19jcG1fY29uZmlndXJlX3h0YWwzMmtfcGlucygpOworICAgICAgICB9CisKKyAgICAgICAgaHdfY3BtX3Bvd2VyX3VwX3Blcl9wZCgpOworICAgICAgICBod19jcG1fZGVhY3RpdmF0ZV9wYWRfbGF0Y2hlcygpOworCisgICAgICAgIERCR19TRVRfSElHSChFWENFUFRJT05fREVCVUcsIEVYQ0VQVElPTkRCRyk7CisgICAgfQorfQorCisjZGVmaW5lIEhXX0NQTV9BQ1RJVkFURV9CT0RfUFJPVEVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVpbnQxNl90IHZhbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJFR19TRVRGKENSR19UT1AsIEJPRF9DVFJMX1JFRywgQk9EX1ZERF9MVkwsIDEpOyAgICAgICAgICAgICAgICAvKiBWREQgTGV2ZWwgKDcwMG1WKSAqLyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChod19jcG1fYm9kX2VuYWJsZWRfaW5fdGNzID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdmFsID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLyogVkJBVCBlbmFibGUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBCT0RfQ1RSTDJfUkVHLCBCT0RfVkJBVF9FTiwgdmFsLCAxKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLyogMVY4IEZsYXNoIGVuYWJsZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKChkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFID09IDEpICYmIChkZ19jb25maWdQT1dFUl8xVjhfU0xFRVAgPT0gMSkpIHsgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF8xVjhfRkxBU0hfRU4sIHZhbCwgMSk7ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLyogMVY4UCBlbmFibGUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOFAgPT0gMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF8xVjhfUEFfRU4sIHZhbCwgMSk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBCT0RfQ1RSTDJfUkVHLCBCT0RfVkREX0VOLCB2YWwsIDEpOyAgICAgICAvKiBWREQgZW5hYmxlICovICBcCisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBCT0RfQ1RSTDJfUkVHLCBCT0RfUkVTRVRfRU4sIHZhbCwgMSk7ICAgICAvKiBSZXNldCBlbmFibGUgKi9cCisgICAgICAgICAgICAgICAgQ1JHX1RPUC0+Qk9EX0NUUkwyX1JFRyA9IHZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIENSR19UT1AtPkJPRF9DVFJMMl9SRUcgPSBod19jcG1fYm9kX2VuYWJsZWRfaW5fdGNzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKTsKKwordm9pZCBod19jcG1fYWN0aXZhdGVfYm9kX3Byb3RlY3Rpb24odm9pZCkKK3sKKyAgICBIV19DUE1fQUNUSVZBVEVfQk9EX1BST1RFQ1RJT04KK30KKwordm9pZCBod19jcG1fYWN0aXZhdGVfYm9kX3Byb3RlY3Rpb25fYXRfaW5pdCh2b2lkKQoreworICAgIEhXX0NQTV9BQ1RJVkFURV9CT0RfUFJPVEVDVElPTgorfQorCit2b2lkIGh3X2NwbV9jb25maWd1cmVfYm9kX3Byb3RlY3Rpb24odm9pZCkKK3sKKyAgICBSRUdfU0VURihDUkdfVE9QLCBCT0RfQ1RSTF9SRUcsIEJPRF9WRERfTFZMLCAxKTsgICAgICAgICAgICAgICAgLyogVkREIExldmVsICg3MDBtVikgKi8KKworICAgIGlmIChod19jcG1fYm9kX2VuYWJsZWRfaW5fdGNzID09IDApCisgICAgeworICAgICAgICAvKiBWQkFUIGVuYWJsZSAqLworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBCT0RfQ1RSTDJfUkVHLCBCT0RfVkJBVF9FTik7CisKKyAgICAgICAgLyogMVY4IEZsYXNoIGVuYWJsZSAqLworICAgICAgICBpZiAoKGRnX2NvbmZpZ1BPV0VSXzFWOF9BQ1RJVkUgPT0gMSkgJiYgKGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCA9PSAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQk9EX0NUUkwyX1JFRywgQk9EXzFWOF9GTEFTSF9FTik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBCT0RfQ1RSTDJfUkVHLCBCT0RfMVY4X0ZMQVNIX0VOKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIDFWOFAgZW5hYmxlICovCisgICAgICAgIGlmIChkZ19jb25maWdQT1dFUl8xVjhQID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF8xVjhfUEFfRU4pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQk9EX0NUUkwyX1JFRywgQk9EXzFWOF9QQV9FTik7CisgICAgICAgIH0KKworICAgICAgICAvKiBHZW5lcmF0ZSBSZXNldCBvbiBhIEJPRCBldmVudCAqLworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBCT0RfQ1RSTDJfUkVHLCBCT0RfUkVTRVRfRU4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBDUkdfVE9QLT5CT0RfQ1RSTDJfUkVHID0gaHdfY3BtX2JvZF9lbmFibGVkX2luX3RjczsKKyAgICB9Cit9CisKK3ZvaWQgaHdfY3BtX3NldF8xdjhfc3RhdGUoYm9vbCBzdGF0ZSkKK3sKKyAgICBpZiAoKGRnX2NvbmZpZ1BPV0VSXzFWOF9BQ1RJVkUgPT0gMSkgJiYgKGNwbV8xdjhfc3RhdGUgIT0gc3RhdGUpKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgcmVnOworICAgICAgICB1aW50MzJfdCBkY2RjX3N0YXRlOworCisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworCisgICAgICAgIHJlZyA9IENSR19UT1AtPkxET19DVFJMMl9SRUc7CisgICAgICAgIGRjZGNfc3RhdGUgPSAodWludDMyX3QpUkVHX0dFVEYoRENEQywgRENEQ19DVFJMXzBfUkVHLCBEQ0RDX01PREUpOworCisjaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOF9BQ1RJVkUgPT0gMSkKKyAgICAgICAgY3BtXzF2OF9zdGF0ZSA9IHN0YXRlOworI2VuZGlmCisKKyAgICAgICAgaWYgKCFjcG1fMXY4X3N0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEaXNhYmxlIEJPRCBmb3IgdGhlIDFWOCByYWlsCisgICAgICAgICAgICBpZiAoZGdfY29uZmlnVVNFX0JPRCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF8xVjhfRkxBU0hfRU4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBEZWFjdGl2YXRlIDFWOCByYWlsIGluIExET3MKKyAgICAgICAgICAgIFJFR19DTFJfRklFTEQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9GTEFTSF9PTiwgcmVnKTsKKworICAgICAgICAgICAgaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9GTEFTSF9SRVRfRElTQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENSR19UT1AtPkxET19DVFJMMl9SRUcgPSByZWc7CisKKyAgICAgICAgICAgIC8vIERlYWN0aXZhdGUgMVY4IHJhaWwgaW4gRENEQworICAgICAgICAgICAgaWYgKGRnX2NvbmZpZ1VTRV9EQ0RDID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBEQ0RDIHRvIGFwcGx5IGNoYW5nZQorICAgICAgICAgICAgICAgIFJFR19TRVRGKERDREMsIERDRENfQ1RSTF8wX1JFRywgRENEQ19NT0RFLCAwKTsKKworICAgICAgICAgICAgICAgIERDREMtPkRDRENfVjE4XzFfUkVHICY9CisgICAgICAgICAgICAgICAgICAgIH4oUkVHX01TSyhEQ0RDLCBEQ0RDX1YxOF8xX1JFRywgRENEQ19WMThfRU5BQkxFX0hWKSB8CisgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhEQ0RDLCBEQ0RDX1YxOF8xX1JFRywgRENEQ19WMThfRU5BQkxFX0xWKSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIERDREMKKyAgICAgICAgICAgICAgICBSRUdfU0VURihEQ0RDLCBEQ0RDX0NUUkxfMF9SRUcsIERDRENfTU9ERSwgZGNkY19zdGF0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBSZXN0b3JlIDFWOCByYWlsIGluIExET3MKKyAgICAgICAgICAgIC8qIEJ1dCBub3Qgd2hlbiBEQ0RDIGlzIHJ1bm5pbmcuLi4gKi8KKyAgICAgICAgICAgIGlmIChkY2RjX3N0YXRlICE9IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X0ZMQVNIX09OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnLCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFR19DTFJfRklFTEQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9GTEFTSF9SRVRfRElTQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENSR19UT1AtPkxET19DVFJMMl9SRUcgPSByZWc7CisKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgMVY4IHJhaWwgaW4gRENEQworICAgICAgICAgICAgaWYgKGRnX2NvbmZpZ1VTRV9EQ0RDID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRENEQy0+RENEQ19WMThfMV9SRUcgfD0gKDEgPDwgUkVHX1BPUyhEQ0RDLCBEQ0RDX1YxOF8xX1JFRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDRENfVjE4X0VOQUJMRV9IVikpOworICAgICAgICAgICAgICAgIERDREMtPkRDRENfVjE4XzFfUkVHICY9IH5SRUdfTVNLKERDREMsIERDRENfVjE4XzFfUkVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDRENfVjE4X0VOQUJMRV9MVik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgQk9EIHNldHVwCisgICAgICAgICAgICBpZiAoZGdfY29uZmlnVVNFX0JPRCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGh3X2NwbV9kZWxheV91c2VjKDIwMCk7CisgICAgICAgICAgICAgICAgaHdfY3BtX2NvbmZpZ3VyZV9ib2RfcHJvdGVjdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisgICAgfQorfQorCitib29sIGh3X2NwbV9nZXRfMXY4X3N0YXRlKHZvaWQpCit7CisgICAgcmV0dXJuIGNwbV8xdjhfc3RhdGU7Cit9CisKK3ZvaWQgaHdfY3BtX2RlbGF5X3VzZWModWludDMyX3QgdXNlYykKK3sKKyAgICBzeXNfY2xrX3Qgc2NsazsKKyAgICBhaGJfZGl2X3QgaGNsazsKKyAgICB1aW50OF90IGZyZXE7CisKKyAgICBzY2xrID0gY21fc3lzY2xrOworICAgIGhjbGsgPSBjbV9haGJjbGs7CisgICAgZnJlcSA9IDE2ID4+IGhjbGs7CisKKyAgICAvKiBSZXF1ZXN0ZWQgZGVsYXkgdGltZSBtdXN0IGJlID4gMCB1c2VjICovCisgICAgQVNTRVJUX1dBUk5JTkcodXNlYyAhPSAwKTsKKworICAgIC8qCisgICAgICogICAgICBsZHIgcjMsIFtwYywgIzE0OF0gICAgICAyIGN5Y2xlcworICAgICAqICAgICAgcHVzaCB7cjQsIGxyfSAgICAgICAgICAgMiBjeWNsZXMKKyAgICAgKiAgICAgIGxkcmIgcjEsIFtyMywgIzE3XSAgICAgIDIgY3ljbGVzCisgICAgICogICAgICBsZHJiIHIyLCBbcjMsICM4XSAgICAgICAyIGN5Y2xlcworICAgICAqICAgICAgbW92cyByMywgIzE2ICAgICAgICAgICAgMSBjeWNsZQorICAgICAqICAgICAgYXNycyByMywgcjIgICAgICAgICAgICAgMSBjeWNsZQorICAgICAqICAgICAgdXh0YiByMywgcjIgICAgICAgICAgICAgMSBjeWNsZQorICAgICAqICAgICAgLS0tLS0tLS0tLQorICAgICAqICAgICAgY21wIHIwLCAjMCAgICAgICAgICAgICAgNCBjeWNsZXMgb3ZlcmhlYWQgaW4gdG90YWwKKyAgICAgKiAgICAgIGJuZS5uIDB4ODAwMzEwNiA8aHdfY3BtX2RlbGF5X3VzZWMrMzA+CisgICAgICogICAgICBjcHNpZCBpCisgICAgICogICAgICBia3B0IDB4MDAwMgorICAgICAqCisgICAgICogICAgICBUb3RhbDogMTEgY3ljbGVzCisgICAgICovCisKKyAgICBfX2FzbSB2b2xhdGlsZSgiICAgICAgIGNtcCAlW3NjbGtdLCAjMSAgICAgICAgICAgICAgICAgXG4iICAgICAgICAvLyAxIGN5Y2xlICAgICAgOiAxIChzeXNjbGtfUkMxNiwgc3lzY2xrX1hUQUwxNk0pCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBibGUgc3RhcnQgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBvciAzIGN5Y2xlczogMi80CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBjbXAgJVtzY2xrXSwgIzMgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogMyAoc3lzY2xrX1BMTDQ4KQorICAgICAgICAgICAgICAgICAgICIgICAgICAgYmd0IHM5Nk0gICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgb3IgMyBjeWNsZXM6IDQvNgorICAgICAgICAgICAgICAgICAgICIgICAgICAgYmx0IHMzMk0gICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgb3IgMyBjeWNsZXM6IDUvNworICAgICAgICAgICAgICAgICAgICJzNDhNOiAgYWRkIHI0LCAlW2ZyZXFdLCAlW2ZyZXFdICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDYKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGFkZCAlW2ZyZXFdLCByNCwgJVtmcmVxXSAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiA3CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiIHN0YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMyBjeWNsZXMgICAgIDogMTAKKyAgICAgICAgICAgICAgICAgICAiczk2TTogIGFkZCByNCwgJVtmcmVxXSwgJVtmcmVxXSAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiA3CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBhZGQgJVtmcmVxXSwgcjQsICVbZnJlcV0gICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogOAorICAgICAgICAgICAgICAgICAgICIgICAgICAgbHNsICVbZnJlcV0sICVbZnJlcV0sICMxICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDkKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGIgc3RhcnQgICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAzIGN5Y2xlcyAgICAgOiAxMgorICAgICAgICAgICAgICAgICAgICJzMzJNOiAgbHNsICVbZnJlcV0sICVbZnJlcV0sICMxICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDgKKyAgICAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgICAgICAgICAgICAgLyogT3ZlcmhlYWQgdXAgdG8gdGhpcyBwb2ludDoKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIHN5c2Nsa19SQzE2ICAgICA6IDE1IGN5Y2xlcyAoZXJyb3I6IDE1LzE2ICAtIDE1ICAgdXNlYykKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIHN5c2Nsa19YVEFMMTZNICA6IDE1IGN5Y2xlcyAoZXJyb3I6IDE1LzE2ICAtIDE1ICAgdXNlYykKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIHN5c2Nsa19YVEFMMzJNICA6IDE5IGN5Y2xlcyAoZXJyb3I6IDE5LzMyICAtIDE5LzIgdXNlYykKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIHN5c2Nsa19QTEw0OCAgICA6IDIxIGN5Y2xlcyAoZXJyb3I6IDIxLzQ4ICAtIDIxLzMgdXNlYykKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIHN5c2Nsa19QTEw5NiAgICA6IDIzIGN5Y2xlcyAoZXJyb3I6IDIzLzk2IC0gIDIzLzYgdXNlYykKKyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAic3RhcnQ6IGNtcCAlW2ZyZXFdLCAjMTYgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAxCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiZ3QgaGlnaCAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBvciAzIGN5Y2xlczogMi80CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBibHQgbG93ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBvciAzIGN5Y2xlczogMy81CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBtb3YgJVtzY2xrXSwgIzQgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogNAorICAgICAgICAgICAgICAgICAgICIgICAgICAgYiBjYWxjICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzICAgICA6IDcKKyAgICAgICAgICAgICAgICAgICAiaGlnaDogIGNtcCAlW2ZyZXFdLCAjMjQgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiA1CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBibmUgYzMyTSAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBvciAzIGN5Y2xlczogNi84CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBtb3YgJVtzY2xrXSwgIzYgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogNworICAgICAgICAgICAgICAgICAgICIgICAgICAgYiBjYWxjICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzICAgICA6IDEwCisgICAgICAgICAgICAgICAgICAgImMzMk06ICBjbXAgJVtmcmVxXSwgIzMyICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogOQorICAgICAgICAgICAgICAgICAgICIgICAgICAgYm5lIGM0OE0gICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgb3IgMyBjeWNsZXM6IDEwLzEyCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBtb3YgJVtzY2xrXSwgIzggICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogMTEKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGIgY2FsYyAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAzIGN5Y2xlcyAgICAgOiAxMgorICAgICAgICAgICAgICAgICAgICJjNDhNOiAgY21wICVbZnJlcV0sICM0OCAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDEzCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBibmUgYzk2TSAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBvciAzIGN5Y2xlczogMTQvMTYKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIG1vdiAlW3NjbGtdLCAjMTIgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAxNQorICAgICAgICAgICAgICAgICAgICIgICAgICAgYiBjYWxjICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzICAgICA6IDE4CisgICAgICAgICAgICAgICAgICAgImM5Nk06ICBtb3YgJVtzY2xrXSwgIzI0ICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogMTcKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGIgY2FsYyAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAzIGN5Y2xlcyAgICAgOiAyMAorICAgICAgICAgICAgICAgICAgICJsb3c6ICAgY21wICVbZnJlcV0sICMxICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDYKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJndCBjMk0gICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIG9yIDMgY3ljbGVzOiA3LzkKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGxzciAlW3VzZWNdLCAlW3VzZWNdLCAjMiAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiA4CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiIGxvb3AgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMyBjeWNsZXMgICAgIDogMTEKKyAgICAgICAgICAgICAgICAgICAiYzJNOiAgIGNtcCAlW2ZyZXFdLCAjMiAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAxMAorICAgICAgICAgICAgICAgICAgICIgICAgICAgYmd0IGMzTSAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgb3IgMyBjeWNsZXM6IDExLzEzCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBsc3IgJVt1c2VjXSwgJVt1c2VjXSwgIzEgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogMTIKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGIgbG9vcCAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAzIGN5Y2xlcyAgICAgOiAxNQorICAgICAgICAgICAgICAgICAgICJjM006ICAgY21wICVbZnJlcV0sICMzICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDE0CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiZ3QgYzRNICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBvciAzIGN5Y2xlczogMTUvMTcKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGxzciAlW3VzZWNdLCAlW3VzZWNdLCAjMSAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAxNgorICAgICAgICAgICAgICAgICAgICIgICAgICAgYiBsb29wMSAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzICAgICA6IDE5CisgICAgICAgICAgICAgICAgICAgImM0TTogICBjbXAgJVtmcmVxXSwgIzQgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogMTgKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJndCBjNk0gICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIG9yIDMgY3ljbGVzOiAxOS8yMQorICAgICAgICAgICAgICAgICAgICIgICAgICAgYiBsb29wICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzICAgICA6IDIyCisgICAgICAgICAgICAgICAgICAgImM2TTogICBjbXAgJVtmcmVxXSwjNiAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogMjIKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJndCBjOE0gICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIG9yIDMgY3ljbGVzOiAyMy8yNQorICAgICAgICAgICAgICAgICAgICIgICAgICAgYiBsb29wMSAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzICAgICA6IDI2CisgICAgICAgICAgICAgICAgICAgImM4TTogICBjbXAgJVtmcmVxXSwgIzggICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogMjYKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJndCBjMTJNICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIG9yIDMgY3ljbGVzOiAyNy8yOQorICAgICAgICAgICAgICAgICAgICIgICAgICAgbW92ICVbc2Nsa10sICMyICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDI4CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiIGNhbGMgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMyBjeWNsZXMgICAgIDogMzEKKyAgICAgICAgICAgICAgICAgICAiYzEyTTogIG1vdiAlW3NjbGtdLCAjMiAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAzMAorICAgICAgICAgICAgICAgICAgICIgICAgICAgbXVsICVbdXNlY10sICVbc2Nsa10sICVbdXNlY10gICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDMxCisgICAgICAgICAgICAgICAgICAgLyogRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICogICAgICAgMU1IejogMTEgY3ljbGVzLCAxMXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICAyTUh6OiAxNSBjeWNsZXMsICA3LjV1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICAgM01IejogMTkgY3ljbGVzLCAgNi4zM3VzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICA0TUh6OiAyMiBjeWNsZXMsICA1LjV1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICAgNk1IejogMjYgY3ljbGVzLCAgNC4zM3VzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICA4TUh6OiAzMSBjeWNsZXMsICAzLjg3NXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDEyTUh6OiAzMSBjeWNsZXMsICAyLjU4NHVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDE2TUh6OiAgOCBjeWNsZXMsICAwLjV1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICAyNE1IejogMTEgY3ljbGVzLCAgMC40NTl1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICAzMk1IejogMTMgY3ljbGVzLCAgMC40MDZ1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICA0OE1IejogMTkgY3ljbGVzLCAgMC4zOTZ1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICA5Nk1IejogMjEgY3ljbGVzLCAgMC4yMTl1c2VjCisgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgKiAxIGxvb3Agb2YgNCBjeWNsZXMgaXMgLS0tIDEgdXNlYyBpcyAjIGxvb3BzCisgICAgICAgICAgICAgICAgICAgICogICAgICAgMU1IejogNHVzZWMgICAgIC0tLSAgZGl2aWRlICh1c2VjKSBieSA0ICh1cCB0byA1dXNlYyBlcnJvcikKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICAyTUh6OiAydXNlYyAgICAgLS0tICBkaXZpZGUgKHVzZWMpIGJ5IDIgKHVwIHRvIDJ1c2VjIGVycm9yKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgIDRNSHo6IDF1c2VjICAgICAtLS0gIDEgbG9vcCAgKCAwKjQgKyAxKjIsIDAuNTAwMHVzZWMgZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICogICAgICAgOE1IejogNTAwbnNlYyAgIC0tLSAgMiBsb29wcyAoIDEqNCArIDEqMiwgMC4yNTAwdXNlYyBlcnJvcikKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDE2TUh6OiAyNTBuc2VjICAgLS0tICA0IGxvb3BzICggMyo0ICsgMSoyLCAwLjUwMDB1c2VjIGVycm9yKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgMjRNSHo6IDE2N25zZWMgICAtLS0gIDYgbG9vcHMgKCA1KjQgKyAxKjIsIDAuMDgzMHVzZWMgZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICogICAgICAzMk1IejogMTI1bnNlYyAgIC0tLSAgOCBsb29wcyAoIDcqNCArIDEqMiwgMC4wNjI1dXNlYyBlcnJvcikKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDQ4TUh6OiAgODRuc2VjICAgLS0tIDEyIGxvb3BzICgxMSo0ICsgMSoyLCAwLjA0MjB1c2VjIGVycm9yKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgOTZNSHo6ICA0Mm5zZWMgICAtLS0gMjQgbG9vcHMgKDIzKjQgKyAxKjIsIDAuMDIxMHVzZWMgZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgKiAxIGxvb3Agb2YgNiBjeWNsZXMgaXMgLS0tIDEgdXNlYyBpcyAjIGxvb3BzCisgICAgICAgICAgICAgICAgICAgICogICAgICAgM01IejogMnVzZWMgICAgIC0tLSAgZGl2aWRlICh1c2VjKSBieSAyICh1cCB0byAzdXNlYyBlcnJvcikKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICA2TUh6OiAxdXNlYyAgICAgLS0tICAxIGxvb3AgICggMCo2ICsgMSo3LCAwLjE2NzB1c2VjIGVycm9yKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgMTJNSHo6IDAuNXVzZWMgICAtLS0gIDIgbG9vcHMgKCAxKjYgKyAxKjcsIDAuMDgzMHVzZWMgZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgKiBDdW11bGF0aXZlIGVycm9yIGlzOgorICAgICAgICAgICAgICAgICAgICAqICAgICAgIDFNSHo6IDExICsgNSAgICAgICAgID0gMTZ1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICAgMk1IejogNy41ICsgMiAgICAgICAgPSA5LjV1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICAgM01IejogNi4zMyArIDMgICAgICAgPSA5LjMzdXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgIDRNSHo6IDUuNSArIDAuNSAgICAgID0gNnVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICA2TUh6OiA0LjMzICsgMC4xNjcgICA9IDQuNXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICA4TUh6OiAzLjg3NSArIDAuMjUgICA9IDQuMTI1dXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgMTJNSHo6IDIuNTg0ICsgMC4wODMgID0gMi42N3VzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDE2TUh6OiAwLjUgKyAwLjUgICAgICA9IDF1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICAyNE1IejogMC40NTkgKyAwLjA4MyAgPSAwLjU0MXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDMyTUh6OiAwLjQwNiArIDAuMDYyNSA9IDAuNDY5dXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgNDhNSHo6IDAuMzk2ICsgMC4wNDIgID0gMC40Mzh1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICA5Nk1IejogMC4yMTkgKyAwLjAyMSAgPSAwLjQyOXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAibG9vcDE6IHN1YiAgJVt1c2VjXSwgJVt1c2VjXSwgIzEgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZQorICAgICAgICAgICAgICAgICAgICIgICAgICAgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJuZSBsb29wMSAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAzIGN5Y2xlcyBleGNlcHQgZm9yIHRoZSBsYXN0IG9uZSB3aGljaCBpcyAxCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiIGV4aXQgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMyBjeWNsZXMKKyAgICAgICAgICAgICAgICAgICAiY2FsYzogIG11bCAlW3VzZWNdLCAlW3NjbGtdLCAlW3VzZWNdICAgXG4iICAgICAvLyAxIGN5Y2xlCisgICAgICAgICAgICAgICAgICAgImxvb3A6ICBzdWIgICVbdXNlY10sICVbdXNlY10sICMxICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZQorICAgICAgICAgICAgICAgICAgICIgICAgICAgYm5lIGxvb3AgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzIGV4Y2VwdCBmb3IgdGhlIGxhc3Qgb25lIHdoaWNoIGlzIDEKKyAgICAgICAgICAgICAgICAgICAiZXhpdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgKi8KKyAgICAgICAgICAgICAgICAgICBbdXNlY10gInIiKHVzZWMpLCBbZnJlcV0gInIiKGZyZXEpLCBbc2Nsa10gInIiKHNjbGspIDogICAgLyogaW5wdXRzICglMCwgJTEsICUyKSAqLworICAgICAgICAgICAgICAgICAgICJyNCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlcnMgdGhhdCBhcmUgZGVzdHJveWVkICovCit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfQ1BNICovCisvKioKK1x9CitcfQorXH0KKyovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfZG1hLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3MjZiOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19kbWEuYwpAQCAtMCwwICsxLDQ2NiBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBTWVNURU0KKyAqIFx7CisgKiBcYWRkdG9ncm91cCBETUEKKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X2RtYS5jCisgKgorICogQGJyaWVmIEltcGxlbWVudGF0aW9uIG9mIHRoZSBETUEgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19ETUEKKworI2luY2x1ZGUgPGh3X2dwaW8uaD4KKyNpbmNsdWRlIDxod19kbWEuaD4KKworI2lmIChkZ19jb25maWdTWVNURU1WSUVXKQorIyAgaW5jbHVkZSAiU0VHR0VSX1NZU1ZJRVdfRnJlZVJUT1MuaCIKKyNlbHNlCisjICBkZWZpbmUgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VOVEVSKCkKKyMgIGRlZmluZSBTRUdHRVJfU1lTVEVNVklFV19JU1JfRVhJVCgpCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBod19kbWFfY2FsbGJhY2tfZGF0YQoreworICAgIGh3X2RtYV90cmFuc2Zlcl9jYiBjYWxsYmFjazsKKyAgICB2b2lkICp1c2VyX2RhdGE7Cit9IGRtYV9jYWxsYmFja3NfdXNlcl9kYXRhWzhdOworCisjZGVmaW5lIERNQV9DSE5fUkVHKHJlZywgY2hhbikgKCh2b2xhdGlsZSB1aW50MTYgKikoJihyZWcpKSArICgoY2hhbikgKiA4KSkKKworLyoqCisgKiBcYnJpZWYgSW5pdGlhbGl6ZSBETUEgQ2hhbm5lbAorICoKKyAqIFxwYXJhbSBbaW5dIGNoYW5uZWxfc2V0dXAgcG9pbnRlciB0byBzdHJ1Y3Qgb2YgdHlwZSBETUFfU2V0dXAKKyAqCisgKi8KK3ZvaWQgaHdfZG1hX2NoYW5uZWxfaW5pdGlhbGl6YXRpb24oRE1BX3NldHVwICpjaGFubmVsX3NldHVwKQoreworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfY3RybF9yZWc7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9hX3N0YXJ0X2xvd19yZWc7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9hX3N0YXJ0X2hpZ2hfcmVnOworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfYl9zdGFydF9sb3dfcmVnOworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfYl9zdGFydF9oaWdoX3JlZzsKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2xlbl9yZWc7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9pbnRfcmVnOworICAgIHVpbnQzMiBzcmNfYWRkcmVzczsKKyAgICB1aW50MzIgZGVzdF9hZGRyZXNzOworCisgICAgLyogTWFrZSBzdXJlIHRoZSBETUEgY2hhbm5lbCBsZW5ndGggaXMgbm90IHplcm8gKi8KKyAgICBBU1NFUlRfV0FSTklORyhjaGFubmVsX3NldHVwLT5sZW5ndGggPiAwKTsKKworICAgIC8vIExvb2sgdXAgRE1BeF9DVFJMX1JFRyBhZGRyZXNzCisgICAgZG1hX3hfY3RybF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfQ1RSTF9SRUcsIGNoYW5uZWxfc2V0dXAtPmNoYW5uZWxfbnVtYmVyKTsKKworICAgIC8vIExvb2sgdXAgRE1BeF9BX1NUQVJUTF9SRUcgYWRkcmVzcworICAgIGRtYV94X2Ffc3RhcnRfbG93X3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9BX1NUQVJUTF9SRUcsIGNoYW5uZWxfc2V0dXAtPmNoYW5uZWxfbnVtYmVyKTsKKworICAgIC8vIExvb2sgdXAgRE1BeF9BX1NUQVJUSF9SRUcgYWRkcmVzcworICAgIGRtYV94X2Ffc3RhcnRfaGlnaF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfQV9TVEFSVEhfUkVHLCBjaGFubmVsX3NldHVwLT5jaGFubmVsX251bWJlcik7CisKKyAgICAvLyBMb29rIHVwIERNQXhfQl9TVEFSVExfUkVHIGFkZHJlc3MKKyAgICBkbWFfeF9iX3N0YXJ0X2xvd19yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfQl9TVEFSVExfUkVHLCBjaGFubmVsX3NldHVwLT5jaGFubmVsX251bWJlcik7CisKKyAgICAvLyBMb29rIHVwIERNQXhfQl9TVEFSVEhfUkVHIGFkZHJlc3MKKyAgICBkbWFfeF9iX3N0YXJ0X2hpZ2hfcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0JfU1RBUlRIX1JFRywgY2hhbm5lbF9zZXR1cC0+Y2hhbm5lbF9udW1iZXIpOworCisgICAgLy8gTG9vayB1cCBETUFYX0xFTl9SRUcgYWRkcmVzcworICAgIGRtYV94X2xlbl9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfTEVOX1JFRywgY2hhbm5lbF9zZXR1cC0+Y2hhbm5lbF9udW1iZXIpOworCisgICAgLy8gTG9vayB1cCBETUFYX0lOVAorICAgIGRtYV94X2ludF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfSU5UX1JFRywgY2hhbm5lbF9zZXR1cC0+Y2hhbm5lbF9udW1iZXIpOworCisgICAgLy8gTWFrZSBzdXJlIERNQSBjaGFubmVsIGlzIGRpc2FibGVkIGZpcnN0CisgICAgUkVHX1NFVF9GSUVMRChETUEsIERNQTBfQ1RSTF9SRUcsIERNQV9PTiwgKmRtYV94X2N0cmxfcmVnLCBIV19ETUFfU1RBVEVfRElTQUJMRUQpOworCisgICAgLy8gU2V0IERNQXhfQ1RSTF9SRUcgd2lkdGggcHJvdmlkZWQgc2V0dGluZ3MsIGJ1dCBkbyBub3Qgc3RhcnQgdGhlIGNoYW5uZWwuCisgICAgLy8gU3RhcnQgdGhlIGNoYW5uZWwgd2l0aCB0aGUgImRtYV9jaGFubmVsX2VuYWJsZSIgZnVuY3Rpb24gc2VwYXJhdGVseS4KKyAgICAqZG1hX3hfY3RybF9yZWcgPQorICAgICAgICBjaGFubmVsX3NldHVwLT5idXNfd2lkdGggfAorICAgICAgICBjaGFubmVsX3NldHVwLT5pcnFfZW5hYmxlIHwKKyAgICAgICAgY2hhbm5lbF9zZXR1cC0+ZHJlcV9tb2RlIHwKKyAgICAgICAgY2hhbm5lbF9zZXR1cC0+Yl9pbmMgfAorICAgICAgICBjaGFubmVsX3NldHVwLT5hX2luYyB8CisgICAgICAgIGNoYW5uZWxfc2V0dXAtPmNpcmN1bGFyIHwKKyAgICAgICAgY2hhbm5lbF9zZXR1cC0+ZG1hX3ByaW8gfAorICAgICAgICBjaGFubmVsX3NldHVwLT5kbWFfaWRsZSB8CisgICAgICAgIGNoYW5uZWxfc2V0dXAtPmRtYV9pbml0OworCisgICAgLy8gU2V0IERNQV9SRVFfTVVYX1JFRyBmb3IgdGhlIHJlcXVlc3RlZCBjaGFubmVsIC8gdHJpZ2dlciBjb21iaW5hdGlvbgorICAgIGlmIChjaGFubmVsX3NldHVwLT5kbWFfcmVxX211eCAhPSBIV19ETUFfVFJJR19OT05FKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjaGFubmVsX3NldHVwLT5jaGFubmVsX251bWJlcikKKyAgICAgICAgeworICAgICAgICBjYXNlIEhXX0RNQV9DSEFOTkVMXzA6CisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfMToKKyAgICAgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICAgICAgUkVHX1NFVEYoRE1BLCBETUFfUkVRX01VWF9SRUcsIERNQTAxX1NFTCwgY2hhbm5lbF9zZXR1cC0+ZG1hX3JlcV9tdXgpOworICAgICAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhXX0RNQV9DSEFOTkVMXzI6CisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfMzoKKyAgICAgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICAgICAgUkVHX1NFVEYoRE1BLCBETUFfUkVRX01VWF9SRUcsIERNQTIzX1NFTCwgY2hhbm5lbF9zZXR1cC0+ZG1hX3JlcV9tdXgpOworICAgICAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhXX0RNQV9DSEFOTkVMXzQ6CisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfNToKKyAgICAgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICAgICAgUkVHX1NFVEYoRE1BLCBETUFfUkVRX01VWF9SRUcsIERNQTQ1X1NFTCwgY2hhbm5lbF9zZXR1cC0+ZG1hX3JlcV9tdXgpOworICAgICAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhXX0RNQV9DSEFOTkVMXzY6CisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfNzoKKyAgICAgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICAgICAgUkVHX1NFVEYoRE1BLCBETUFfUkVRX01VWF9SRUcsIERNQTY3X1NFTCwgY2hhbm5lbF9zZXR1cC0+ZG1hX3JlcV9tdXgpOworICAgICAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworI2lmIGRnX2NvbmZpZ0RNQV9EWU5BTUlDX01VWCB8fCAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkKKyAgICAgICAgLyoKKyAgICAgICAgICogV2hlbiBkaWZmZXJlbnQgRE1BIGNoYW5uZWxzIGFyZSB1c2VkIGZvciBzYW1lIGRldmljZSBpdCBpcyBpbXBvcnRhbnQKKyAgICAgICAgICogdGhhdCBvbmx5IG9uZSB0cmlnZ2VyIGlzIHNldCBmb3Igc3BlY2lmaWMgZGV2aWNlIGF0IGEgdGltZS4KKyAgICAgICAgICogSGF2aW5nIHNhbWUgdHJpZ2dlciBmb3IgZGlmZmVyZW50IGNoYW5uZWxzIGNhbiBjYXVzZSB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCisgICAgICAgICAqIEZvbGxvd2luZyBjb2RlIGFsc28gc2hvdWxkIGhlbHAgd2hlbiBTUEkxIGlzIGFzc2lnbmVkIHRvIG5vbiAwIGNoYW5uZWwuCisgICAgICAgICAqLworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKworICAgICAgICBzd2l0Y2ggKGNoYW5uZWxfc2V0dXAtPmNoYW5uZWxfbnVtYmVyKQorICAgICAgICB7CisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfNjoKKyAgICAgICAgY2FzZSBIV19ETUFfQ0hBTk5FTF83OgorICAgICAgICAgICAgaWYgKFJFR19HRVRGKERNQSwgRE1BX1JFUV9NVVhfUkVHLCBETUE0NV9TRUwpID09IGNoYW5uZWxfc2V0dXAtPmRtYV9yZXFfbXV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFR19TRVRGKERNQSwgRE1BX1JFUV9NVVhfUkVHLCBETUE0NV9TRUwsIEhXX0RNQV9UUklHX05PTkUpOworICAgICAgICAgICAgfQorCisgICAgICAgIC8qIG5vIGJyZWFrICovCisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfNDoKKyAgICAgICAgY2FzZSBIV19ETUFfQ0hBTk5FTF81OgorICAgICAgICAgICAgaWYgKFJFR19HRVRGKERNQSwgRE1BX1JFUV9NVVhfUkVHLCBETUEyM19TRUwpID09IGNoYW5uZWxfc2V0dXAtPmRtYV9yZXFfbXV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFR19TRVRGKERNQSwgRE1BX1JFUV9NVVhfUkVHLCBETUEyM19TRUwsIEhXX0RNQV9UUklHX05PTkUpOworICAgICAgICAgICAgfQorCisgICAgICAgIC8qIG5vIGJyZWFrICovCisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfMjoKKyAgICAgICAgY2FzZSBIV19ETUFfQ0hBTk5FTF8zOgorICAgICAgICAgICAgaWYgKFJFR19HRVRGKERNQSwgRE1BX1JFUV9NVVhfUkVHLCBETUEwMV9TRUwpID09IGNoYW5uZWxfc2V0dXAtPmRtYV9yZXFfbXV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFR19TRVRGKERNQSwgRE1BX1JFUV9NVVhfUkVHLCBETUEwMV9TRUwsIEhXX0RNQV9UUklHX05PTkUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhXX0RNQV9DSEFOTkVMXzA6CisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfMToKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisjZW5kaWYKKyAgICB9CisKKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQikKKworICAgIC8vU2V0IFJFUV9TRU5TRSBiaXQgb2YgaTJjIGFuZCBVYXJ0IHBlcmlwaGVyYWxzIFRYIHBhdGgKKyAgICBpZiAoKChjaGFubmVsX3NldHVwLT5kbWFfcmVxX211eCA9PSBIV19ETUFfVFJJR19VQVJUX1JYVFgpIHx8CisgICAgICAgICAoY2hhbm5lbF9zZXR1cC0+ZG1hX3JlcV9tdXggPT0gSFdfRE1BX1RSSUdfVUFSVDJfUlhUWCkgfHwKKyAgICAgICAgIChjaGFubmVsX3NldHVwLT5kbWFfcmVxX211eCA9PSBIV19ETUFfVFJJR19JMkNfUlhUWCkgfHwKKyAgICAgICAgIChjaGFubmVsX3NldHVwLT5kbWFfcmVxX211eCA9PSBIV19ETUFfVFJJR19JMkMyX1JYVFgpKSAmJgorICAgICAgICAoY2hhbm5lbF9zZXR1cC0+Y2hhbm5lbF9udW1iZXIgJiAxKSkgIC8vb2RkIGNoYW5uZWxzIHVzZWQgZm9yIFRYCisgICAgeworICAgICAgICBSRUdfU0VUX0ZJRUxEKERNQSwgRE1BMF9DVFJMX1JFRywgUkVRX1NFTlNFLCAqZG1hX3hfY3RybF9yZWcsIDEpOworICAgIH0KKworI2VuZGlmCisgICAgc3JjX2FkZHJlc3MgPSBibGFja19vcmNhX3BoeV9hZGRyKGNoYW5uZWxfc2V0dXAtPnNyY19hZGRyZXNzKTsKKyAgICBkZXN0X2FkZHJlc3MgPSBibGFja19vcmNhX3BoeV9hZGRyKGNoYW5uZWxfc2V0dXAtPmRlc3RfYWRkcmVzcyk7CisKKyAgICAvLyBTZXQgc291cmNlIGFkZHJlc3MgcmVnaXN0ZXJzCisgICAgKmRtYV94X2Ffc3RhcnRfbG93X3JlZyA9IChzcmNfYWRkcmVzcyAmIDB4ZmZmZik7CisgICAgKmRtYV94X2Ffc3RhcnRfaGlnaF9yZWcgPSAoc3JjX2FkZHJlc3MgPj4gMTYpOworCisgICAgLy8gU2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgcmVnaXN0ZXJzCisgICAgKmRtYV94X2Jfc3RhcnRfbG93X3JlZyA9IChkZXN0X2FkZHJlc3MgJiAweGZmZmYpOworICAgICpkbWFfeF9iX3N0YXJ0X2hpZ2hfcmVnID0gKGRlc3RfYWRkcmVzcyA+PiAxNik7CisKKyAgICAvLyBTZXQgSVJRIG51bWJlciBvZiB0cmFuc2ZlcnMKKyAgICBpZiAoY2hhbm5lbF9zZXR1cC0+aXJxX25yX29mX3RyYW5zID4gMCkKKyAgICB7CisgICAgICAgIC8vIElmIHVzZXIgZXhwbGljaXRseSBzZXQgdGhpcyBudW1iZXIgdXNlIGl0CisgICAgICAgICpkbWFfeF9pbnRfcmVnID0gY2hhbm5lbF9zZXR1cC0+aXJxX25yX29mX3RyYW5zIC0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gSWYgdXNlciBwYXNzZWQgMCwgdXNlIHRyYW5zZmVyIGxlbmd0aCB0byBmaXJlIGludGVycnVwdCBhZnRlciB0cmFuc2ZlciBlbmRzCisgICAgICAgICpkbWFfeF9pbnRfcmVnID0gY2hhbm5lbF9zZXR1cC0+bGVuZ3RoIC0gMTsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIHRyYW5zZmVyIGxlbmd0aAorICAgICpkbWFfeF9sZW5fcmVnID0gKGNoYW5uZWxfc2V0dXAtPmxlbmd0aCkgLSAxOworCisgICAgaWYgKGNoYW5uZWxfc2V0dXAtPmlycV9lbmFibGUpCisgICAgeworICAgICAgICBkbWFfY2FsbGJhY2tzX3VzZXJfZGF0YVtjaGFubmVsX3NldHVwLT5jaGFubmVsX251bWJlcl0uY2FsbGJhY2sgPSBjaGFubmVsX3NldHVwLT5jYWxsYmFjazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZG1hX2NhbGxiYWNrc191c2VyX2RhdGFbY2hhbm5lbF9zZXR1cC0+Y2hhbm5lbF9udW1iZXJdLmNhbGxiYWNrID0gTlVMTDsKKyAgICB9CisKKyAgICBkbWFfY2FsbGJhY2tzX3VzZXJfZGF0YVtjaGFubmVsX3NldHVwLT5jaGFubmVsX251bWJlcl0udXNlcl9kYXRhID0gY2hhbm5lbF9zZXR1cC0+dXNlcl9kYXRhOworfQorCit2b2lkIGh3X2RtYV9jaGFubmVsX3VwZGF0ZV9zb3VyY2UoSFdfRE1BX0NIQU5ORUwgY2hhbm5lbCwgdm9pZCAqYWRkciwgdWludDE2X3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3X2RtYV90cmFuc2Zlcl9jYiBjYikKK3sKKyAgICB1aW50MzJfdCBwaHlfYWRkciA9IGJsYWNrX29yY2FfcGh5X2FkZHIoKHVpbnQzMl90KSBhZGRyKTsKKworICAgIGRtYV9jYWxsYmFja3NfdXNlcl9kYXRhW2NoYW5uZWxdLmNhbGxiYWNrID0gY2I7CisKKyAgICAvLyBMb29rIHVwIERNQXhfQV9TVEFSVExfUkVHIGFkZHJlc3MKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2Ffc3RhcnRfbG93X3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9BX1NUQVJUTF9SRUcsIGNoYW5uZWwpOworCisgICAgLy8gTG9vayB1cCBETUF4X0FfU1RBUlRIX1JFRyBhZGRyZXNzCisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9hX3N0YXJ0X2hpZ2hfcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0FfU1RBUlRIX1JFRywgY2hhbm5lbCk7CisKKyAgICAvLyBMb29rIHVwIERNQVhfTEVOX1JFRyBhZGRyZXNzCisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9sZW5fcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0xFTl9SRUcsIGNoYW5uZWwpOworCisKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2ludF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfSU5UX1JFRywgY2hhbm5lbCk7CisKKyAgICAvLyBTZXQgc291cmNlIGFkZHJlc3MgcmVnaXN0ZXJzCisgICAgKmRtYV94X2Ffc3RhcnRfbG93X3JlZyA9IChwaHlfYWRkciAmIDB4ZmZmZik7CisgICAgKmRtYV94X2Ffc3RhcnRfaGlnaF9yZWcgPSAocGh5X2FkZHIgPj4gMTYpOworCisgICAgKmRtYV94X2ludF9yZWcgPSBsZW5ndGggLSAxOworCisgICAgLy8gU2V0IHRoZSB0cmFuc2ZlciBsZW5ndGgKKyAgICAqZG1hX3hfbGVuX3JlZyA9IGxlbmd0aCAtIDE7Cit9CisKK3ZvaWQgaHdfZG1hX2NoYW5uZWxfdXBkYXRlX2Rlc3RpbmF0aW9uKEhXX0RNQV9DSEFOTkVMIGNoYW5uZWwsIHZvaWQgKmFkZHIsIHVpbnQxNl90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3X2RtYV90cmFuc2Zlcl9jYiBjYikKK3sKKyAgICB1aW50MzJfdCBwaHlfYWRkciA9IGJsYWNrX29yY2FfcGh5X2FkZHIoKHVpbnQzMl90KSBhZGRyKTsKKworICAgIGRtYV9jYWxsYmFja3NfdXNlcl9kYXRhW2NoYW5uZWxdLmNhbGxiYWNrID0gY2I7CisKKyAgICAvLyBMb29rIHVwIERNQXhfQl9TVEFSVExfUkVHIGFkZHJlc3MKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2Jfc3RhcnRfbG93X3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9CX1NUQVJUTF9SRUcsIGNoYW5uZWwpOworCisgICAgLy8gTG9vayB1cCBETUF4X0JfU1RBUlRIX1JFRyBhZGRyZXNzCisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9iX3N0YXJ0X2hpZ2hfcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0JfU1RBUlRIX1JFRywgY2hhbm5lbCk7CisKKyAgICAvLyBMb29rIHVwIERNQVhfTEVOX1JFRyBhZGRyZXNzCisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9sZW5fcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0xFTl9SRUcsIGNoYW5uZWwpOworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfaW50X3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9JTlRfUkVHLCBjaGFubmVsKTsKKworICAgIC8vIFNldCBkZXN0aW5hdGlvbiBhZGRyZXNzIHJlZ2lzdGVycworICAgICpkbWFfeF9iX3N0YXJ0X2xvd19yZWcgPSAocGh5X2FkZHIgJiAweGZmZmYpOworICAgICpkbWFfeF9iX3N0YXJ0X2hpZ2hfcmVnID0gKHBoeV9hZGRyID4+IDE2KTsKKworICAgICpkbWFfeF9pbnRfcmVnID0gbGVuZ3RoIC0gMTsKKworICAgIC8vIFNldCB0aGUgdHJhbnNmZXIgbGVuZ3RoCisgICAgKmRtYV94X2xlbl9yZWcgPSBsZW5ndGggLSAxOworfQorCit2b2lkIGh3X2RtYV9jaGFubmVsX3VwZGF0ZV9pbnRfaXgoSFdfRE1BX0NIQU5ORUwgY2hhbm5lbCwgdWludDE2X3QgaW50X2l4KQoreworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfaW50X3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9JTlRfUkVHLCBjaGFubmVsKTsKKworICAgICpkbWFfeF9pbnRfcmVnID0gaW50X2l4OworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgb3IgZGlzYWJsZSBhIERNQSBjaGFubmVsCisgKgorICogXHBhcmFtIFtpbl0gY2hhbm5lbF9udW1iZXIgRE1BIGNoYW5uZWwgbnVtYmVyIHRvIHN0YXJ0L3N0b3AKKyAqIFxwYXJhbSBbaW5dIGRtYV9vbiBlbmFibGUvZGlzYWJsZSBETUEgY2hhbm5lbAorICoKKyAqLwordm9pZCBod19kbWFfY2hhbm5lbF9lbmFibGUoSFdfRE1BX0NIQU5ORUwgY2hhbm5lbF9udW1iZXIsIEhXX0RNQV9TVEFURSBkbWFfb24pCit7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9jdHJsX3JlZzsKKworICAgIC8vIExvb2sgdXAgRE1BeF9DVFJMX1JFRyBhZGRyZXNzCisgICAgZG1hX3hfY3RybF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfQ1RSTF9SRUcsIGNoYW5uZWxfbnVtYmVyKTsKKworCisgICAgaWYgKGRtYV9vbiA9PSBIV19ETUFfU1RBVEVfRU5BQkxFRCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IGRtYV9jdHJsID0gKmRtYV94X2N0cmxfcmVnOworCisgICAgICAgIFJFR19TRVRfRklFTEQoRE1BLCBETUEwX0NUUkxfUkVHLCBETUFfT04sIGRtYV9jdHJsLCAxKTsKKworICAgICAgICBpZiAoZG1hX2NhbGxiYWNrc191c2VyX2RhdGFbY2hhbm5lbF9udW1iZXJdLmNhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKERNQSwgRE1BMF9DVFJMX1JFRywgSVJRX0VOQUJMRSwgZG1hX2N0cmwsIDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RhcnQgdGhlIGNob3NlbiBETUEgY2hhbm5lbAorICAgICAgICAqZG1hX3hfY3RybF9yZWcgPSBkbWFfY3RybDsKKyAgICAgICAgTlZJQ19FbmFibGVJUlEoRE1BX0lSUW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBTdG9wIHRoZSBjaG9zZW4gRE1BIGNoYW5uZWwKKyAgICAgICAgUkVHX1NFVF9GSUVMRChETUEsIERNQTBfQ1RSTF9SRUcsIERNQV9PTiwgKmRtYV94X2N0cmxfcmVnLCAwKTsKKyAgICAgICAgUkVHX1NFVF9GSUVMRChETUEsIERNQTBfQ1RSTF9SRUcsIElSUV9FTkFCTEUsICpkbWFfeF9jdHJsX3JlZywgMCk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2hlbHBlcihIV19ETUFfQ0hBTk5FTCBjaGFubmVsX251bWJlciwgdWludDE2X3QgbGVuLCBib29sIHN0b3BfZG1hKQoreworICAgIGh3X2RtYV90cmFuc2Zlcl9jYiBjYjsKKworICAgIE5WSUNfRGlzYWJsZUlSUShETUFfSVJRbik7CisgICAgY2IgPSBkbWFfY2FsbGJhY2tzX3VzZXJfZGF0YVtjaGFubmVsX251bWJlcl0uY2FsbGJhY2s7CisKKyAgICBpZiAoc3RvcF9kbWEpCisgICAgeworICAgICAgICBkbWFfY2FsbGJhY2tzX3VzZXJfZGF0YVtjaGFubmVsX251bWJlcl0uY2FsbGJhY2sgPSBOVUxMOworICAgICAgICBod19kbWFfY2hhbm5lbF9lbmFibGUoY2hhbm5lbF9udW1iZXIsIEhXX0RNQV9TVEFURV9ESVNBQkxFRCk7CisgICAgfQorCisgICAgaWYgKGNiKQorICAgIHsKKyAgICAgICAgY2IoZG1hX2NhbGxiYWNrc191c2VyX2RhdGFbY2hhbm5lbF9udW1iZXJdLnVzZXJfZGF0YSwgbGVuKTsKKyAgICB9CisKKyAgICBOVklDX0VuYWJsZUlSUShETUFfSVJRbik7Cit9CisKK2Jvb2wgaHdfZG1hX2NoYW5uZWxfYWN0aXZlKHZvaWQpCit7CisgICAgaW50IGRtYV9vbjsKKworICAgIGRtYV9vbiA9IFJFR19HRVRGKERNQSwgRE1BMF9DVFJMX1JFRywgRE1BX09OKTsKKyAgICBkbWFfb24gfD0gUkVHX0dFVEYoRE1BLCBETUExX0NUUkxfUkVHLCBETUFfT04pOworICAgIGRtYV9vbiB8PSBSRUdfR0VURihETUEsIERNQTJfQ1RSTF9SRUcsIERNQV9PTik7CisgICAgZG1hX29uIHw9IFJFR19HRVRGKERNQSwgRE1BM19DVFJMX1JFRywgRE1BX09OKTsKKyAgICBkbWFfb24gfD0gUkVHX0dFVEYoRE1BLCBETUE0X0NUUkxfUkVHLCBETUFfT04pOworICAgIGRtYV9vbiB8PSBSRUdfR0VURihETUEsIERNQTVfQ1RSTF9SRUcsIERNQV9PTik7CisgICAgZG1hX29uIHw9IFJFR19HRVRGKERNQSwgRE1BNl9DVFJMX1JFRywgRE1BX09OKTsKKyAgICBkbWFfb24gfD0gUkVHX0dFVEYoRE1BLCBETUE3X0NUUkxfUkVHLCBETUFfT04pOworCisgICAgcmV0dXJuIChkbWFfb24gPT0gMSk7Cit9CisKKy8qKgorICogXGJyaWVmIENhcHR1cmUgRE1BIEludGVycnVwdCBIYW5kbGVyCisgKgorICogQ2FsbHMgdXNlciBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqLwordm9pZCBETUFfSGFuZGxlcih2b2lkKQoreworICAgIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FTlRFUigpOworCisgICAgdWludDE2X3QgcmlzZW47CisgICAgdWludDE2X3QgaTsKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2xlbl9yZWc7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9pbnRfcmVnOworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfY3RybF9yZWc7CisKKyAgICByaXNlbiA9IERNQS0+RE1BX0lOVF9TVEFUVVNfUkVHOworCisgICAgZm9yIChpID0gMDsgcmlzZW4gIT0gMCAmJiBpIDwgODsgKytpLCByaXNlbiA+Pj0gMSkKKyAgICB7CisgICAgICAgIGlmIChyaXNlbiAmIDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgc3RvcDsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIERNQXhfSU5UX1JFRyBzaG93cyBhZnRlciBob3cgbWFueSB0cmFuc2ZlcnMgdGhlIGludGVycnVwdAorICAgICAgICAgICAgICogaXMgZ2VuZXJhdGVkCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGRtYV94X2ludF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfSU5UX1JFRywgaSk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBETUF4X0xFTl9SRUcgc2hvd3MgdGhlIGxlbmd0aCBvZiB0aGUgRE1BIHRyYW5zZmVyCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGRtYV94X2xlbl9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfTEVOX1JFRywgaSk7CisKKyAgICAgICAgICAgIGRtYV94X2N0cmxfcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0NUUkxfUkVHLCBpKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFN0b3AgRE1BIGlmOgorICAgICAgICAgICAgICogIC0gdHJhbnNmZXIgaXMgY29tcGxldGVkCisgICAgICAgICAgICAgKiAgLSBtb2RlIGlzIG5vdCBjaXJjdWxhcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzdG9wID0gKCpkbWFfeF9pbnRfcmVnID09ICpkbWFfeF9sZW5fcmVnKQorICAgICAgICAgICAgICAgICAgICYmICghUkVHX0dFVF9GSUVMRChETUEsIERNQTBfQ1RSTF9SRUcsIENJUkNVTEFSLCAqZG1hX3hfY3RybF9yZWcpKTsKKyAgICAgICAgICAgIERNQS0+RE1BX0NMRUFSX0lOVF9SRUcgPSAxIDw8IGk7CisgICAgICAgICAgICBkbWFfaGVscGVyKGksICpkbWFfeF9pbnRfcmVnICsgMSwgc3RvcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTRUdHRVJfU1lTVEVNVklFV19JU1JfRVhJVCgpOworfQorCit2b2lkIGh3X2RtYV9jaGFubmVsX3N0b3AoSFdfRE1BX0NIQU5ORUwgY2hhbm5lbF9udW1iZXIpCit7CisgICAgLy8gU3RvcHBpbmcgRE1BIHdpbGwgY2xlYXIgRE1BeF9JRFhfUkVHIHNvIHJlYWQgaXQgYmVmb3JlCisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9pZHhfcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0lEWF9SRUcsIGNoYW5uZWxfbnVtYmVyKTsKKyAgICBkbWFfaGVscGVyKGNoYW5uZWxfbnVtYmVyLCAqZG1hX3hfaWR4X3JlZywgdHJ1ZSk7Cit9CisKK3VpbnQxNl90IGh3X2RtYV90cmFuc2ZlcmVkX2J5dGVzKEhXX0RNQV9DSEFOTkVMIGNoYW5uZWxfbnVtYmVyKQoreworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfaW50X3JlZyA9IGRtYV94X2ludF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfSURYX1JFRywgY2hhbm5lbF9udW1iZXIpOworCisgICAgcmV0dXJuICpkbWFfeF9pbnRfcmVnOworfQorCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX0RNQSAqLworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19mZW1fc2t5NjYxMTItMTEuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19mZW1fc2t5NjYxMTItMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTYwNjM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X2ZlbV9za3k2NjExMi0xMS5jCkBAIC0wLDAgKzEsNjgwIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBGRU0KKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZQorICoKKyAqIEBicmllZiBGRU0gRHJpdmVyIGZvciBTS1lXT1JLUyBTS1k2NjExMi0xMSBSYWRpbyBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZiBkZ19jb25maWdGRU0gPT0gRkVNX1NLWTY2MTEyXzExCisjaW5jbHVkZSAic3RkaW50LmgiCisKKyNpbmNsdWRlICJzZGtfZGVmcy5oIgorI2luY2x1ZGUgImh3X2dwaW8uaCIKKyNpbmNsdWRlICJod19mZW1fc2t5NjYxMTItMTEuaCIKKworc3RhdGljIGh3X2ZlbV9jb25maWcgZmVtX2NvbmZpZyBfX1JFVEFJTkVEOworCisjaWYgIWRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NUWF9QT1JUKSB8fCAhZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1RYX1BJTikKKyNlcnJvciBGRU0gQ1RYIEdQSU8gbXVzdCBiZSBkZWZpbmVkISEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NSWF9QT1JUKSB8fCAhZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1JYX1BJTikKKyNlcnJvciBGRU0gQ1JYIEdQSU8gbXVzdCBiZSBkZWZpbmVkISEKKyNlbmRpZgorCisKK2ludCBod19mZW1fc2V0X2JpYXModWludDE2X3Qgdm9sdGFnZSkKK3sKKyAgICB1aW50MTZfdCB2YWx1ZTsKKworICAgIGlmICh2b2x0YWdlIDwgMTIwMCB8fCB2b2x0YWdlID4gMTk3NSkKKyAgICB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB2YWx1ZSA9ICh2b2x0YWdlIC0gMTIwMCkgLyAyNy41OworCisjaWZkZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0ZFTV9CSUFTX1YxOFAKKyAgICBSRUdfU0VURihEQ0RDLCBEQ0RDX1YxOFBfMF9SRUcsIERDRENfVjE4UF9WT0xUQUdFLCB2YWx1ZSk7CisgICAgcmV0dXJuIDA7CisjZWxpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9GRU1fQklBU19WMTgpCisgICAgUkVHX1NFVEYoRENEQywgRENEQ19WMThfMF9SRUcsIERDRENfVjE4X1ZPTFRBR0UsIHZhbHVlKTsKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgcmV0dXJuIC0yOworI2VuZGlmCisKK30KKworaW50IGh3X2ZlbV9zZXRfYmlhczIodWludDE2X3Qgdm9sdGFnZSkKK3sKKyAgICB1aW50MTZfdCB2YWx1ZTsKKworICAgIGlmICh2b2x0YWdlIDwgMTIwMCB8fCB2b2x0YWdlID4gMTk3NSkKKyAgICB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB2YWx1ZSA9ICh2b2x0YWdlIC0gMTIwMCkgLyAyNy41OworCisvLyAgICAgICAgLyogVmFsdWUgaXMgYWN0dWFsbHkgb25lIGxvd2VyIHRoYW4gY29tcHV0ZWQgKi8KKy8vICAgICAgICBpZiAodmFsdWUgPiAwKQorLy8gICAgICAgICAgICAgICAgdmFsdWUtLTsKKworI2lmZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9GRU1fQklBUzJfVjE4UAorICAgIFJFR19TRVRGKERDREMsIERDRENfVjE4UF8wX1JFRywgRENEQ19WMThQX1ZPTFRBR0UsIHZhbHVlKTsKKyNlbGlmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0ZFTV9CSUFTMl9WMTgpCisgICAgUkVHX1NFVEYoRENEQywgRENEQ19WMThfMF9SRUcsIERDRENfVjE4X1ZPTFRBR0UsIHZhbHVlKTsKKyNlbHNlCisgICAgcmV0dXJuIC0yOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCit2b2lkIGh3X2ZlbV9zZXRfdHhwb3dlcihib29sIGhpZ2gpCit7CisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QSU4pCisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgZmVtX2NvbmZpZy50eF9wb3dlciA9IGhpZ2g7CisKKyAgICBpZiAoZmVtX2NvbmZpZy5zdGFydGVkKQorICAgIHsKKyAgICAgICAgaWYgKGhpZ2ggPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRYIFBvd2VyIGxvdy4gU3RvcCBEQ0YsIHNldCBHUElPIHRvIGxvdyAqLworICAgICAgICAgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgZmFsc2UpOworICAgICAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfUE9SVF9FTl9SRUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fUkVHX1JGX1BPUlQ0X1JYX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fUkVHX1JGX1BPUlQ0X1RYX01zaywgMCk7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRYIFBvd2VyIGhpZ2guIENvbmZpZ3VyZSBHUElPIGZvciBEQ0YuIEVuYWJsZSBEQ0Ygb24gVFguICovCisgICAgICAgICAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19QT1JUNF9EQ0YpOworICAgICAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfUE9SVF9FTl9SRUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fUkVHX1JGX1BPUlQ0X1JYX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fUkVHX1JGX1BPUlQ0X1RYX01zaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9SRUdfUkZfUE9SVDRfVFhfTXNrKTsKKworICAgICAgICB9CisgICAgfQorCisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2V0X2J5cGFzcyh2b2lkKQoreworICAgIHVpbnQxNl90IG0gPSAwOworCisgICAgaWYgKGZlbV9jb25maWcudHhfYnlwYXNzKQorICAgIHsKKyAgICAgICAgbSA9IFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9SRUdfUkZfUE9SVDNfVFhfTXNrOworICAgIH0KKworICAgIGlmIChmZW1fY29uZmlnLnJ4X2J5cGFzcykKKyAgICB7CisgICAgICAgIG0gfD0gUkZDVV9QT1dFUl9SRl9QT1JUX0VOX1JFR19SRl9QT1JUM19SWF9Nc2s7CisgICAgfQorCisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfUE9SVF9FTl9SRUcsCisgICAgICAgICAgICAgICAgICAgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX1JFR19SRl9QT1JUM19SWF9Nc2sgfAorICAgICAgICAgICAgICAgICAgIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9SRUdfUkZfUE9SVDNfVFhfTXNrLCBtKTsKKworICAgIGlmIChtID09IDApCisgICAgeworICAgICAgICAvKiBObyBSWC9UWCBieXBhc3MuIERyaXZlIHRoZSBpbnRlcmZhY2UgbGluZSB0byBsb3cgKi8KKyAgICAgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX0dQSU8sIGZhbHNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogQXQgbGVhc3Qgb25lIG9mIFRYL1JYIG5lZWRzIGJ5cGFzcyAqLworICAgICAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfUE9SVDNfRENGKTsKKyAgICB9Cit9CisKKwordm9pZCBod19mZW1fc2V0X3R4X2J5cGFzcyhib29sIGVuYWJsZSkKK3sKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BJTikKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBmZW1fY29uZmlnLnR4X2J5cGFzcyA9IGVuYWJsZTsKKworICAgIGlmIChmZW1fY29uZmlnLnN0YXJ0ZWQpCisgICAgeworICAgICAgICBzZXRfYnlwYXNzKCk7CisgICAgfQorCisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisjZW5kaWYKK30KKwordm9pZCBod19mZW1fc2V0X3J4X2J5cGFzcyhib29sIGVuYWJsZSkKK3sKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BJTikKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBmZW1fY29uZmlnLnJ4X2J5cGFzcyA9IGVuYWJsZTsKKworICAgIGlmIChmZW1fY29uZmlnLnN0YXJ0ZWQpCisgICAgeworICAgICAgICBzZXRfYnlwYXNzKCk7CisgICAgfQorCisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisjZW5kaWYKK30KKworYm9vbCBod19mZW1fZ2V0X3R4cG93ZXIodm9pZCkKK3sKKyAgICByZXR1cm4gZmVtX2NvbmZpZy50eF9wb3dlcjsKK30KKworYm9vbCBod19mZW1fZ2V0X3R4X2J5cGFzcyh2b2lkKQoreworICAgIHJldHVybiBmZW1fY29uZmlnLnR4X2J5cGFzczsKK30KKworYm9vbCBod19mZW1fZ2V0X3J4X2J5cGFzcyh2b2lkKQoreworICAgIHJldHVybiBmZW1fY29uZmlnLnJ4X2J5cGFzczsKK30KKworI2Vsc2UgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQiAqLworCisjaWZkZWYgQ09ORklHX1VTRV9CTEUKK2Jvb2wgaHdfZmVtX2dldF90eHBvd2VyX2JsZSh2b2lkKQoreworICAgIHJldHVybiBmZW1fY29uZmlnLnR4X3Bvd2VyX2JsZTsKK30KKworYm9vbCBod19mZW1fZ2V0X3R4X2J5cGFzc19ibGUodm9pZCkKK3sKKyAgICByZXR1cm4gZmVtX2NvbmZpZy50eF9ieXBhc3NfYmxlOworfQorCitib29sIGh3X2ZlbV9nZXRfcnhfYnlwYXNzX2JsZSh2b2lkKQoreworICAgIHJldHVybiBmZW1fY29uZmlnLnJ4X2J5cGFzc19ibGU7Cit9CisjZW5kaWYgLyogQ09ORklHX1VTRV9CTEUgKi8KKworI2lmZGVmIENPTkZJR19VU0VfRlRERgorYm9vbCBod19mZW1fZ2V0X3R4cG93ZXJfZnRkZih2b2lkKQoreworICAgIHJldHVybiBmZW1fY29uZmlnLnR4X3Bvd2VyX2Z0ZGY7Cit9CisKK2Jvb2wgaHdfZmVtX2dldF90eF9ieXBhc3NfZnRkZih2b2lkKQoreworICAgIHJldHVybiBmZW1fY29uZmlnLnR4X2J5cGFzc19mdGRmOworfQorCitib29sIGh3X2ZlbV9nZXRfcnhfYnlwYXNzX2Z0ZGYodm9pZCkKK3sKKyAgICByZXR1cm4gZmVtX2NvbmZpZy5yeF9ieXBhc3NfZnRkZjsKK30KKyNlbmRpZiAvKiBDT05GSUdfVVNFX0ZUREYgKi8KKworYm9vbCBod19mZW1fZ2V0X3R4cG93ZXIodm9pZCkKK3sKKyAgICByZXR1cm4gZmVtX2NvbmZpZy50eF9wb3dlcl9ibGU7Cit9CisKK2Jvb2wgaHdfZmVtX2dldF90eF9ieXBhc3Modm9pZCkKK3sKKyAgICByZXR1cm4gZmVtX2NvbmZpZy50eF9ieXBhc3NfYmxlOworfQorCitib29sIGh3X2ZlbV9nZXRfcnhfYnlwYXNzKHZvaWQpCit7CisgICAgcmV0dXJuIGZlbV9jb25maWcucnhfYnlwYXNzX2JsZTsKK30KKworc3RhdGljIHZvaWQgc2V0X3R4cG93ZXIodm9pZCkKK3sKKyAgICBpZiAoIWZlbV9jb25maWcuc3RhcnRlZCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBDSEwgaXMgYWx3YXlzIDAgb24gUlggKi8KKyAgICBSRUdfQ0xSX0JJVChSRkNVX1BPV0VSLCBSRl9QT1JUX0VOX0JMRV9SRUcsIFJGX1BPUlQ0X1JYKTsKKyAgICBSRUdfQ0xSX0JJVChSRkNVX1BPV0VSLCBSRl9QT1JUX0VOX0ZUREZfUkVHLCBSRl9QT1JUNF9SWCk7CisKKyAgICBpZiAoZmVtX2NvbmZpZy50eF9wb3dlcl9ibGUpCisgICAgeworICAgICAgICBSRUdfU0VUX0JJVChSRkNVX1BPV0VSLCBSRl9QT1JUX0VOX0JMRV9SRUcsIFJGX1BPUlQ0X1RYKTsKKyAgICB9CisKKyAgICBpZiAoZmVtX2NvbmZpZy50eF9wb3dlcl9mdGRmKQorICAgIHsKKyAgICAgICAgUkVHX1NFVF9CSVQoUkZDVV9QT1dFUiwgUkZfUE9SVF9FTl9GVERGX1JFRywgUkZfUE9SVDRfVFgpOworICAgIH0KKworICAgIGlmIChmZW1fY29uZmlnLnR4X3Bvd2VyX2JsZSB8fCBmZW1fY29uZmlnLnR4X3Bvd2VyX2Z0ZGYpCisgICAgeworICAgICAgICAvKiBUWCBQb3dlciBoaWdoLiBDb25maWd1cmUgR1BJTyBmb3IgRENGLiBFbmFibGUgRENGIG9uIFRYLiAqLworICAgICAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfUE9SVDRfRENGKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogVFggUG93ZXIgbG93LiBTdG9wIERDRiwgc2V0IEdQSU8gdG8gbG93ICovCisgICAgICAgIGh3X2dwaW9fY29uZmlndXJlX3BpbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmYWxzZSk7CisgICAgfQorfQorCisKK3ZvaWQgaHdfZmVtX3NldF90eHBvd2VyX2JsZShib29sIGhpZ2gpCit7CisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QSU4pCisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgZmVtX2NvbmZpZy50eF9wb3dlcl9ibGUgPSBoaWdoOworICAgIHNldF90eHBvd2VyKCk7CisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisjZW5kaWYKK30KKwordm9pZCBod19mZW1fc2V0X3R4cG93ZXJfZnRkZihib29sIGhpZ2gpCit7CisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QSU4pCisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgZmVtX2NvbmZpZy50eF9wb3dlcl9mdGRmID0gaGlnaDsKKyAgICBzZXRfdHhwb3dlcigpOworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworI2VuZGlmCit9CisKK3ZvaWQgaHdfZmVtX3NldF90eHBvd2VyKGJvb2wgaGlnaCkKK3sKKyAgICBod19mZW1fc2V0X3R4cG93ZXJfYmxlKGhpZ2gpOworfQorCisKKworc3RhdGljIHZvaWQgc2V0X2J5cGFzcyh2b2lkKQoreworICAgIHVpbnQxNl90IG1fYmxlID0gMDsKKyAgICB1aW50MTZfdCBtX2Z0ZGYgPSAwOworCisgICAgaWYgKGZlbV9jb25maWcudHhfYnlwYXNzX2JsZSkKKyAgICB7CisgICAgICAgIG1fYmxlID0gUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDNfVFhfTXNrOworICAgIH0KKworICAgIGlmIChmZW1fY29uZmlnLnJ4X2J5cGFzc19ibGUpCisgICAgeworICAgICAgICBtX2JsZSB8PSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUM19SWF9Nc2s7CisgICAgfQorCisgICAgaWYgKGZlbV9jb25maWcudHhfYnlwYXNzX2Z0ZGYpCisgICAgeworICAgICAgICBtX2Z0ZGYgPSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDNfVFhfTXNrOworICAgIH0KKworICAgIGlmIChmZW1fY29uZmlnLnJ4X2J5cGFzc19mdGRmKQorICAgIHsKKyAgICAgICAgbV9mdGRmIHw9IFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9GVERGX1JFR19SRl9QT1JUM19SWF9Nc2s7CisgICAgfQorCisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfUE9SVF9FTl9CTEVfUkVHLAorICAgICAgICAgICAgICAgICAgIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQzX1JYX01zayB8CisgICAgICAgICAgICAgICAgICAgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDNfVFhfTXNrLCBtX2JsZSk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfUE9SVF9FTl9GVERGX1JFRywKKyAgICAgICAgICAgICAgICAgICBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDNfUlhfTXNrIHwKKyAgICAgICAgICAgICAgICAgICBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDNfVFhfTXNrLCBtX2Z0ZGYpOworCisgICAgaWYgKG1fYmxlID09IDAgJiYgbV9mdGRmID09IDApCisgICAgeworICAgICAgICAvKiBObyBSWC9UWCBieXBhc3MuIERyaXZlIHRoZSBpbnRlcmZhY2UgbGluZSB0byBsb3cgKi8KKyAgICAgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX0dQSU8sIGZhbHNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogQXQgbGVhc3Qgb25lIG9mIFRYL1JYIG5lZWRzIGJ5cGFzcyAqLworICAgICAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfUE9SVDNfRENGKTsKKyAgICB9Cit9CisKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQordm9pZCBod19mZW1fc2V0X3R4X2J5cGFzc19ibGUoYm9vbCBlbmFibGUpCit7CisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QSU4pCisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgZmVtX2NvbmZpZy50eF9ieXBhc3NfYmxlID0gZW5hYmxlOworCisgICAgaWYgKGZlbV9jb25maWcuc3RhcnRlZCkKKyAgICB7CisgICAgICAgIHNldF9ieXBhc3MoKTsKKyAgICB9CisKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyNlbmRpZgorfQorCit2b2lkIGh3X2ZlbV9zZXRfcnhfYnlwYXNzX2JsZShib29sIGVuYWJsZSkKK3sKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BJTikKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBmZW1fY29uZmlnLnJ4X2J5cGFzc19ibGUgPSBlbmFibGU7CisKKyAgICBpZiAoZmVtX2NvbmZpZy5zdGFydGVkKQorICAgIHsKKyAgICAgICAgc2V0X2J5cGFzcygpOworICAgIH0KKworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworI2VuZGlmCit9CisjZW5kaWYgLyogQ09ORklHX1VTRV9CTEUgKi8KKworI2lmZGVmIENPTkZJR19VU0VfRlRERgordm9pZCBod19mZW1fc2V0X3R4X2J5cGFzc19mdGRmKGJvb2wgZW5hYmxlKQoreworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JUKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUElOKQorICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIGZlbV9jb25maWcudHhfYnlwYXNzX2Z0ZGYgPSBlbmFibGU7CisKKyAgICBpZiAoZmVtX2NvbmZpZy5zdGFydGVkKQorICAgIHsKKyAgICAgICAgc2V0X2J5cGFzcygpOworICAgIH0KKworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworI2VuZGlmCit9CisKK3ZvaWQgaHdfZmVtX3NldF9yeF9ieXBhc3NfZnRkZihib29sIGVuYWJsZSkKK3sKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BJTikKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBmZW1fY29uZmlnLnJ4X2J5cGFzc19mdGRmID0gZW5hYmxlOworCisgICAgaWYgKGZlbV9jb25maWcuc3RhcnRlZCkKKyAgICB7CisgICAgICAgIHNldF9ieXBhc3MoKTsKKyAgICB9CisKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyNlbmRpZgorfQorI2VuZGlmIC8qIENPTkZJR19VU0VfRlRERiAqLworCit2b2lkIGh3X2ZlbV9zZXRfdHhfYnlwYXNzKGJvb2wgZW5hYmxlKQoreworICAgIGh3X2ZlbV9zZXRfdHhfYnlwYXNzX2Z0ZGYoZW5hYmxlKTsKK30KKwordm9pZCBod19mZW1fc2V0X3J4X2J5cGFzcyhib29sIGVuYWJsZSkKK3sKKyAgICBod19mZW1fc2V0X3J4X2J5cGFzc19mdGRmKGVuYWJsZSk7Cit9CisjZW5kaWYgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQiAqLworCit2b2lkIGh3X2ZlbV9zZXRfYW50ZW5uYShib29sIG9uZSkKK3sKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UU0VMX1BJTikKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBmZW1fY29uZmlnLmFudHNlbCA9IG9uZTsKKworICAgIGlmIChmZW1fY29uZmlnLnN0YXJ0ZWQpCisgICAgeworICAgICAgICAvKiBBbnRlbm5hIHNlbGVjdGlvbiAqLworICAgICAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgZmVtX2NvbmZpZy5hbnRzZWwpOworICAgIH0KKworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworI2VuZGlmCit9CisKK2Jvb2wgaHdfZmVtX2dldF9hbnRlbm5hKHZvaWQpCit7CisgICAgcmV0dXJuIGZlbV9jb25maWcuYW50c2VsOworfQorCit2b2lkIGh3X2ZlbV9zdGFydCh2b2lkKQoreworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIGZlbV9jb25maWcuc3RhcnRlZCA9IHRydWU7CisKKyAgICB1aW50OF90IHNldF9kZWxheTsKKyAgICB1aW50OF90IHJlc2V0X2RlbGF5OworICAgIHVpbnQxNl90IHJmX3BvcnRfZW47CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogU2V0dXAgR1BJT3MKKyAgICAgKi8KKworICAgIC8qIENTRCBHUElPIENvbmZpZyAqLworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QT1JUKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUElOKQorIyBpZiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1VTRV9EQ0YgPT0gMAorICAgIC8qIE1hbnVhbGx5IHNldCBDU0QgKEVuYWJsZSBGRU0pICovCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCB0cnVlKTsKKyMgZWxzZQorICAgIC8qIFVzZSBEQ0YgZm9yIENTRCAqLworICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1BPUlQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfUE9SVDJfRENGKTsKKyMgZW5kaWYKKyNlbmRpZgorCisgICAgLyogVGltZXIgMjcgR1BJTyAoRENGIFBvcnQgMCkuIFVzZWQgZm9yIFRYIEVOICovCisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DVFhfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NUWF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19QT1JUMF9EQ0YpOworCisgICAgLyogVGltZXIgMjggKERDRiBQb3J0IDEpLiBVc2VkIGZvciBSWCBFTiAqLworICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1JYX1BPUlQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUlhfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfUE9SVDFfRENGKTsKKworICAgIC8qIEFudGVubmEgc2VsZWN0aW9uICovCisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UU0VMX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QSU4pCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmZW1fY29uZmlnLmFudHNlbCk7CisjZW5kaWYKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBTZXR1cCBSRl9BTlRfVFJJTSBHUElPcworICAgICAqLworCisgICAgLyogUkZfQU5UX1RSSU1fMCBDb25maWcgKi8KKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8wX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzBfUElOKQorICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMF9QT1JULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19SRl9BTlRfVFJJTTApOworI2VuZGlmCisKKyAgICAvKiBSRl9BTlRfVFJJTV8xIENvbmZpZyAqLworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzFfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMV9QSU4pCisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8xX1BPUlQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8xX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX1JGX0FOVF9UUklNMSk7CisjZW5kaWYKKworICAgIC8qIFJGX0FOVF9UUklNXzIgQ29uZmlnICovCisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMl9QT1JUKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8yX1BJTikKKyAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzJfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzJfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfUkZfQU5UX1RSSU0yKTsKKyNlbmRpZgorCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFNldHVwIERDRnMKKyAgICAgKi8KKworICAgIC8qIGFzc2lnbiB2YWx1ZXMgdG8gdGhlIHRpbWVyIHJlZ2lzdGVycyBmb3IgQ1RYL0NSWCAoaW4gdXNlYykgKi8KKyAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8yN19SRUcsIFNFVF9PRkZTRVQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9UWFNFVF9EQ0YpOworICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzI3X1JFRywgUkVTRVRfT0ZGU0VULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfVFhSRVNFVF9EQ0YpOworICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzI4X1JFRywgU0VUX09GRlNFVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1JYU0VUX0RDRik7CisgICAgUkVHX1NFVEYoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMjhfUkVHLCBSRVNFVF9PRkZTRVQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9SWFJFU0VUX0RDRik7CisKKyAgICByZl9wb3J0X2VuID0gMHg2OyAvKiBTdGFydCB3aXRoIFBvcnQgMDogVFgsIFBvcnQgMTogUlggKi8KKworICAgIC8qIENvbXB1dGUgc2V0L3Jlc2V0IGRlbGF5cyB0byB1c2UgZm9yIENTRCwgQ1BTLCBDSEwgRENGczogRm9yIHNldHRpbmcgZGVsYXksCisgICAgICogc21hbGxlciBvZiBUWFNFVCwgUlhTRVQsIGFuZCBmb3IgcmVzZXR0aW5nIGRlbGF5LCBsYXJnZXIgb2YgVFhTRVQsIFJYU0VUCisgICAgICovCisjaWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1JYU0VUX0RDRiA+IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9UWFNFVF9EQ0YKKyAgICBzZXRfZGVsYXkgPSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfVFhTRVRfRENGOworI2Vsc2UKKyAgICBzZXRfZGVsYXkgPSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfUlhTRVRfRENGOworI2VuZGlmCisKKyNpZiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfUlhSRVNFVF9EQ0YgPiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfVFhSRVNFVF9EQ0YKKyAgICByZXNldF9kZWxheSA9IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9SWFJFU0VUX0RDRjsKKyNlbHNlCisgICAgcmVzZXRfZGVsYXkgPSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfVFhSRVNFVF9EQ0Y7CisjZW5kaWYKKworICAgIC8qIENTRCBEQ0YgKGlmIGVuYWJsZWQpIGNvbmZpZ3VyYXRpb24gKi8KKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1BJTikKKyMgaWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9VU0VfRENGICE9IDAKKyAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8yOV9SRUcsIFNFVF9PRkZTRVQsIHNldF9kZWxheSk7CisgICAgUkVHX1NFVEYoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMjlfUkVHLCBSRVNFVF9PRkZTRVQsIHJlc2V0X2RlbGF5KTsKKworICAgIC8qIGVuYWJsZSBEQ0YgU2lnbmFscyBmb3IgUG9ydCAyIChDU0QpIGZvciBib3RoIHJ4L3R4ICovCisgICAgcmZfcG9ydF9lbiB8PSAweDMwOworCisjIGVuZGlmIC8qIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfVVNFX0RDRiAhPSAwICovCisjZW5kaWYKKworICAgIC8qIFNldCBieXBhc3MgKENQUykgRENGIHRpbWVycyAoYnV0IGRvbid0IGVuYWJsZSB5ZXQpICovCisgICAgUkVHX1NFVEYoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMzBfUkVHLCBTRVRfT0ZGU0VULCBzZXRfZGVsYXkpOworICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzMwX1JFRywgUkVTRVRfT0ZGU0VULCByZXNldF9kZWxheSk7CisKKyAgICAvKiBTZXQgVFggUG93ZXIgKENITCkgRENGIHRpbWVycyAoYnV0IGRvbid0IGVuYWJsZSB5ZXQpICovCisgICAgUkVHX1NFVEYoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMzFfUkVHLCBTRVRfT0ZGU0VULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfVFhTRVRfRENGKTsKKyAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8zMV9SRUcsIFJFU0VUX09GRlNFVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1RYUkVTRVRfRENGKTsKKworICAgIC8qIEVuYWJsZSBEQ0ZzICovCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgIFJGQ1VfUE9XRVItPlJGX1BPUlRfRU5fUkVHID0gcmZfcG9ydF9lbjsKKyAgICBod19mZW1fc2V0X3R4cG93ZXIoZmVtX2NvbmZpZy50eF9wb3dlcik7CisjZWxzZQorICAgIFJGQ1VfUE9XRVItPlJGX1BPUlRfRU5fQkxFX1JFRyA9IHJmX3BvcnRfZW47CisgICAgUkZDVV9QT1dFUi0+UkZfUE9SVF9FTl9GVERGX1JFRyA9IHJmX3BvcnRfZW47CisKKyAgICBzZXRfdHhwb3dlcigpOworI2VuZGlmCisgICAgc2V0X2J5cGFzcygpOworCisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKK3ZvaWQgaHdfZmVtX3N0b3Aodm9pZCkKK3sKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBmZW1fY29uZmlnLnN0YXJ0ZWQgPSBmYWxzZTsKKworICAgIC8qIFN0b3AgRENGIFRpbWVycyAqLworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICBSRkNVX1BPV0VSLT5SRl9QT1JUX0VOX1JFRyA9IDB4MDsKKyNlbHNlCisgICAgUkZDVV9QT1dFUi0+UkZfUE9SVF9FTl9CTEVfUkVHID0gMHgwOworICAgIFJGQ1VfUE9XRVItPlJGX1BPUlRfRU5fRlRERl9SRUcgPSAweDA7CisjZW5kaWYKKworICAgIC8qIFNldCBhbGwgRkVNIGludGVyZmFjZSBvdXRwdXRzIHRvIEdQSU8gbW9kZSwgYW5kIHZhbHVlIDAsIGluIG9yZGVyIHRvIGdldCB0aGUgbWluaW11bQorICAgICAqIHBvc3NpYmxlIHBvd2VyIGNvbnN1bXB0aW9uIGZyb20gRkVNCisgICAgICovCisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QSU4pCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmYWxzZSk7CisjZW5kaWYKKworICAgIGh3X2dwaW9fY29uZmlndXJlX3BpbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1RYX1BPUlQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DVFhfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgZmFsc2UpOworCisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QSU4pCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmYWxzZSk7CisjZW5kaWYKKworICAgIGh3X2dwaW9fY29uZmlndXJlX3BpbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1JYX1BPUlQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUlhfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgZmFsc2UpOworCisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QSU4pCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmYWxzZSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QT1JUKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUElOKQorICAgIGh3X2dwaW9fY29uZmlndXJlX3BpbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UU0VMX1BPUlQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgZmFsc2UpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8wX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzBfUElOKQorICAgIGh3X2dwaW9fY29uZmlndXJlX3BpbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMF9QT1JULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgZmFsc2UpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8xX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzFfUElOKQorICAgIGh3X2dwaW9fY29uZmlndXJlX3BpbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMV9QT1JULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMV9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgZmFsc2UpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8yX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzJfUElOKQorICAgIGh3X2dwaW9fY29uZmlndXJlX3BpbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMl9QT1JULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMl9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgZmFsc2UpOworI2VuZGlmCisKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKyNlbmRpZiAvKiBkZ19jb25maWdGRU0gPT0gRkVNX1NLWTY2MTEyXzExICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfZ3Bpby5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJkZTlmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X2dwaW8uYwpAQCAtMCwwICsxLDM0MyBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgR1BJTworICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfZ3Bpby5jCisgKgorICogQGJyaWVmIEltcGxlbWVudGF0aW9uIG9mIHRoZSBHUElPIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZiBkZ19jb25maWdVU0VfSFdfR1BJTworCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxod19ncGlvLmg+CisKKy8qIFJlZ2lzdGVyIGFkcmVzc2VzICovCisjZGVmaW5lIFBYX0RBVEFfUkVHX0FERFIoX3BvcnQpICAgICAgICAgKCh2b2xhdGlsZSB1aW50MTZfdCAqKShHUElPX0JBU0UgKyBvZmZzZXRvZihHUElPX1R5cGUsIFAwX0RBVEFfUkVHKSkgKyBfcG9ydCkKKyNkZWZpbmUgUFhfREFUQV9SRUcoX3BvcnQpICAgICAgICAgICAgICAqUFhfREFUQV9SRUdfQUREUihfcG9ydCkKKyNkZWZpbmUgUFhfU0VUX0RBVEFfUkVHX0FERFIoX3BvcnQpICAgICAoKHZvbGF0aWxlIHVpbnQxNl90ICopKEdQSU9fQkFTRSArIG9mZnNldG9mKEdQSU9fVHlwZSwgUDBfU0VUX0RBVEFfUkVHKSkgKyBfcG9ydCkKKyNkZWZpbmUgUFhfU0VUX0RBVEFfUkVHKF9wb3J0KSAgICAgICAgICAqUFhfU0VUX0RBVEFfUkVHX0FERFIoX3BvcnQpCisjZGVmaW5lIFBYX1JFU0VUX0RBVEFfUkVHX0FERFIoX3BvcnQpICAgKCh2b2xhdGlsZSB1aW50MTZfdCAqKShHUElPX0JBU0UgKyBvZmZzZXRvZihHUElPX1R5cGUsIFAwX1JFU0VUX0RBVEFfUkVHKSkgKyBfcG9ydCkKKyNkZWZpbmUgUFhfUkVTRVRfREFUQV9SRUcoX3BvcnQpICAgICAgICAqUFhfUkVTRVRfREFUQV9SRUdfQUREUihfcG9ydCkKKyNkZWZpbmUgUFhYX01PREVfUkVHX0FERFIoX3BvcnQsIF9waW4pICAoKHZvbGF0aWxlIHVpbnQxNl90ICopKEdQSU9fQkFTRSArIG9mZnNldG9mKEdQSU9fVHlwZSwgUDAwX01PREVfUkVHKSkgKyAoX3BvcnQgKiA4KSAgKyBfcGluKQorI2RlZmluZSBQWFhfTU9ERV9SRUcoX3BvcnQsIF9waW4pICAgICAgICpQWFhfTU9ERV9SRUdfQUREUihfcG9ydCwgX3BpbikKKyNkZWZpbmUgUFhfUEFEUFdSX0NUUkxfUkVHX0FERFIoX3BvcnQpICAoKHZvbGF0aWxlIHVpbnQxNl90ICopKEdQSU9fQkFTRSArIG9mZnNldG9mKEdQSU9fVHlwZSwgUDBfUEFEUFdSX0NUUkxfUkVHKSkgKyBfcG9ydCkKKyNkZWZpbmUgUFhfUEFEUFdSX0NUUkxfUkVHKF9wb3J0KSAgICAgICAqUFhfUEFEUFdSX0NUUkxfUkVHX0FERFIoX3BvcnQpCisKKy8qIG9uIEZQR0Egd2UgY2Fubm90IHJlYWQgdGhlIHN0YXRlIG9mIGFuIG91dHB1dCBHUElPICovCisKKyNpZmRlZiBGUEdBX1BBRF9MT09QQkFDS19CUk9LRU4KK3N0YXRpYyB1aW50MTZfdCBQeF9EQVRBX1JFR19jYWNoZVs1XTsKKyNlbmRpZgorCisjaWYgKGRnX2NvbmZpZ0lNQUdFX1NFVFVQID09IFBST0RVQ1RJT05fTU9ERSkgJiYgKERFQlVHX0dQSU9fQUxMT0NfTU9OSVRPUl9FTkFCTEVEID09IDEpCisjd2FybmluZyAiR1BJTyBhc3NpZ25tZW50IG1vbml0b3JpbmcgaXMgYWN0aXZlIGluIFBST0RVQ1RJT04gYnVpbGQhIgorI2VuZGlmCisKK3N0YXRpYyB2b2xhdGlsZSB1aW50OF90IEdQSU9fc3RhdHVzW0hXX0dQSU9fTlVNX1BPUlRTXSA9IHsgMCB9OworCitjb25zdCB1aW50OF90IGh3X2dwaW9fcG9ydF9udW1fcGluc1tIV19HUElPX05VTV9QT1JUU10gPQoreworICAgIEhXX0dQSU9fUE9SVF8wX05VTV9QSU5TLCBIV19HUElPX1BPUlRfMV9OVU1fUElOUywKKyAgICBIV19HUElPX1BPUlRfMl9OVU1fUElOUywgSFdfR1BJT19QT1JUXzNfTlVNX1BJTlMsCisgICAgSFdfR1BJT19QT1JUXzRfTlVNX1BJTlMKK307CisKKy8qCisgKiBHbG9iYWwgRnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3ZvaWQgaHdfZ3Bpb19jb25maWd1cmUoY29uc3QgZ3Bpb19jb25maWcgY2ZnW10pCit7CisjaWYgZGdfY29uZmlnSU1BR0VfU0VUVVAgPT0gREVWRUxPUE1FTlRfTU9ERQorICAgIGludCBudW1fcGlucyA9IDA7CisgICAgdWludDhfdCBzZXRfbWFza1tIV19HUElPX05VTV9QT1JUU107CisjZW5kaWYKKworICAgIGlmICghY2ZnKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdoaWxlIChjZmctPnBpbiAhPSAweEZGKQorICAgIHsKKyAgICAgICAgdWludDhfdCBwb3J0ID0gY2ZnLT5waW4gPj4gNDsKKyAgICAgICAgdWludDhfdCBwaW4gPSBjZmctPnBpbiAmIDB4MEY7CisKKyNpZiBkZ19jb25maWdJTUFHRV9TRVRVUCA9PSBERVZFTE9QTUVOVF9NT0RFCisKKyAgICAgICAgaWYgKHBvcnQgPj0gSFdfR1BJT19OVU1fUE9SVFMgfHwgcGluID49IGh3X2dwaW9fcG9ydF9udW1fcGluc1twb3J0XSkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGludmFsaWQgcG9ydCBvciBwaW4gbnVtYmVyIHNwZWNpZmllZCwgaXQgd2FzIGVpdGhlciBpbmNvcnJlY3RseSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAqIG9mIGNmZyB3YXMgbm90IHRlcm1pbmF0ZWQgcHJvcGVybHkgdXNpbmcgSFdfR1BJT19QSU5DT05GSUdfRU5EIHNvIHdlJ3JlCisgICAgICAgICAgICAgKiByZWFkaW5nIGdhcmJhZ2UKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgX19CS1BUKDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCsrbnVtX3BpbnMgPiBIV19HUElPX05VTV9QSU5TKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogdHJ5aW5nIHRvIHNldCBtb3JlIHBpbnMgdGhhbiBhdmFpbGFibGUsIHBlcmhhcHMgY2ZnIHdhcyBub3QgdGVybWluYXRlZAorICAgICAgICAgICAgICogcHJvcGVybHkgdXNpbmcgSFdfR1BJT19QSU5DT05GSUdfRU5EPworICAgICAgICAgICAgICovCisgICAgICAgICAgICBfX0JLUFQoMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0X21hc2tbcG9ydF0gJiAoMSA8PCBwaW4pKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogdHJ5aW5nIHRvIHNldCBwaW4gd2hpY2ggaGFzIGJlZW4gYWxyZWFkeSBzZXQgYnkgdGhpcyBjYWxsIHdoaWNoIG1lYW5zCisgICAgICAgICAgICAgKiB0aGVyZSBpcyBkdXBsaWNhdGVkIHBpbiBpbiBjb25maWd1cmF0aW9uIC0gZG9lcyBub3QgbWFrZSBzZW5zZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBfX0JLUFQoMCk7CisgICAgICAgIH0KKworICAgICAgICBzZXRfbWFza1twb3J0XSB8PSAoMSA8PCBwaW4pOworI2VuZGlmCisKKyAgICAgICAgaWYgKGNmZy0+cmVzZXJ2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaHdfZ3Bpb19yZXNlcnZlX2FuZF9jb25maWd1cmVfcGluKHBvcnQsIHBpbiwgY2ZnLT5tb2RlLCBjZmctPmZ1bmMsIGNmZy0+aGlnaCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4ocG9ydCwgcGluLCBjZmctPm1vZGUsIGNmZy0+ZnVuYywgY2ZnLT5oaWdoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNmZysrOworICAgIH0KK30KKworYm9vbCBod19ncGlvX3Jlc2VydmVfcGluKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4pCit7CisgICAgaWYgKChHUElPX3N0YXR1c1twb3J0XSAmICgxIDw8IHBpbikpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdQSU9fc3RhdHVzW3BvcnRdIHw9ICgxIDw8IHBpbik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBod19ncGlvX3Jlc2VydmVfYW5kX2NvbmZpZ3VyZV9waW4oSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbiwgSFdfR1BJT19NT0RFIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkMgZnVuY3Rpb24sIGJvb2wgaGlnaCkKK3sKKyAgICBpZiAoIWh3X2dwaW9fcmVzZXJ2ZV9waW4ocG9ydCwgcGluKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4ocG9ydCwgcGluLCBtb2RlLCBmdW5jdGlvbiwgaGlnaCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBod19ncGlvX3VucmVzZXJ2ZV9waW4oSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbikKK3sKKyAgICBHUElPX3N0YXR1c1twb3J0XSAmPSB+KDEgPDwgcGluKTsKK30KKworc3RhdGljIHZvaWQgaHdfZ3Bpb192ZXJpZnlfcmVzZXJ2ZWQoSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbikKK3sKKyNpZiAoREVCVUdfR1BJT19BTExPQ19NT05JVE9SX0VOQUJMRUQgPT0gMSkKKworICAgIGlmICghKEdQSU9fc3RhdHVzW3BvcnRdICYgKDEgPDwgcGluKSkpCisgICAgeworICAgICAgICAvLyBJZiBkZWJ1Z2dlciBzdG9wcyBhdCB0aGlzIGxpbmUsIHRoZXJlIGlzIGNvbmZpZ3VyYXRpb24gcHJvYmxlbQorICAgICAgICAvLyBwaW4gaXMgdXNlZCB3aXRob3V0IGJlaW5nIHJlc2VydmVkIGZpcnN0CisgICAgICAgIF9fQktQVCgwKTsgLyogdGhpcyBwaW4gaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgcmVzZXJ2ZWQhICovCisgICAgfQorCisjZW5kaWYgLy8gKERFQlVHX0dQSU9fQUxMT0NfTU9OSVRPUl9FTkFCTEVEID09IDEpCit9CisKKwordm9pZCBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbiwgSFdfR1BJT19NT0RFIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkMgZnVuY3Rpb24pCit7CisgICAgaHdfZ3Bpb192ZXJpZnlfcmVzZXJ2ZWQocG9ydCwgcGluKTsKKworICAgIFBYWF9NT0RFX1JFRyhwb3J0LCBwaW4pID0gbW9kZSB8IGZ1bmN0aW9uOworfQorCit2b2lkIGh3X2dwaW9fZ2V0X3Bpbl9mdW5jdGlvbihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluLCBIV19HUElPX01PREUgKm1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkMgKmZ1bmN0aW9uKQoreworICAgIHVpbnQxNl90IHZhbDsKKworICAgIGh3X2dwaW9fdmVyaWZ5X3Jlc2VydmVkKHBvcnQsIHBpbik7CisKKyAgICB2YWwgPSBQWFhfTU9ERV9SRUcocG9ydCwgcGluKTsKKyAgICAqbW9kZSA9IHZhbCAmIDB4MDcwMDsKKyAgICAqZnVuY3Rpb24gPSB2YWwgJiAweDAwZmY7Cit9CisKK3ZvaWQgaHdfZ3Bpb19jb25maWd1cmVfcGluKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4sIEhXX0dQSU9fTU9ERSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19GVU5DIGZ1bmN0aW9uLCBjb25zdCBib29sIGhpZ2gpCit7CisgICAgaHdfZ3Bpb192ZXJpZnlfcmVzZXJ2ZWQocG9ydCwgcGluKTsKKworICAgIGlmIChoaWdoKQorICAgIHsKKyAgICAgICAgaHdfZ3Bpb19zZXRfYWN0aXZlKHBvcnQsIHBpbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGh3X2dwaW9fc2V0X2luYWN0aXZlKHBvcnQsIHBpbik7CisgICAgfQorCisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKHBvcnQsIHBpbiwgbW9kZSwgZnVuY3Rpb24pOworfQorCit2b2lkIGh3X2dwaW9fY29uZmlndXJlX3Bpbl9wb3dlcihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluLCBIV19HUElPX1BPV0VSIHBvd2VyKQoreworICAgIHVpbnQxNl90IHBhZHB3cjsKKworICAgIHBhZHB3ciA9IFBYX1BBRFBXUl9DVFJMX1JFRyhwb3J0KTsKKyAgICBwYWRwd3IgJj0gfigxIDw8IHBpbik7CisKKyAgICBpZiAocG93ZXIgPT0gSFdfR1BJT19QT1dFUl9WREQxVjhQKQorICAgIHsKKyAgICAgICAgcGFkcHdyIHw9ICgxIDw8IHBpbik7CisgICAgfQorCisgICAgUFhfUEFEUFdSX0NUUkxfUkVHKHBvcnQpID0gcGFkcHdyOworfQorCit2b2lkIGh3X2dwaW9fc2V0X2FjdGl2ZShIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluKQoreworICAgIGh3X2dwaW9fdmVyaWZ5X3Jlc2VydmVkKHBvcnQsIHBpbik7CisKKyAgICBQWF9TRVRfREFUQV9SRUcocG9ydCkgPSAxIDw8IHBpbjsKKyNpZmRlZiBGUEdBX1BBRF9MT09QQkFDS19CUk9LRU4KKyAgICBQeF9EQVRBX1JFR19jYWNoZVtwb3J0XSB8PSAxIDw8IHBpbjsKKyNlbmRpZgorfQorCit2b2lkIGh3X2dwaW9fc2V0X2luYWN0aXZlKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4pCit7CisgICAgaHdfZ3Bpb192ZXJpZnlfcmVzZXJ2ZWQocG9ydCwgcGluKTsKKworICAgIFBYX1JFU0VUX0RBVEFfUkVHKHBvcnQpID0gMSA8PCBwaW47CisjaWZkZWYgRlBHQV9QQURfTE9PUEJBQ0tfQlJPS0VOCisgICAgUHhfREFUQV9SRUdfY2FjaGVbcG9ydF0gJj0gfigxIDw8IHBpbik7CisjZW5kaWYKK30KKworYm9vbCBod19ncGlvX2dldF9waW5fc3RhdHVzKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4pCit7CisjaWZkZWYgRlBHQV9QQURfTE9PUEJBQ0tfQlJPS0VOCisgICAgSFdfR1BJT19NT0RFIG1vZGU7CisgICAgSFdfR1BJT19GVU5DIGZ1bmN0aW9uOworI2VuZGlmCisgICAgaHdfZ3Bpb192ZXJpZnlfcmVzZXJ2ZWQocG9ydCwgcGluKTsKKworI2lmZGVmIEZQR0FfUEFEX0xPT1BCQUNLX0JST0tFTgorICAgIGh3X2dwaW9fZ2V0X3Bpbl9mdW5jdGlvbihwb3J0LCBwaW4sICZtb2RlLCAmZnVuY3Rpb24pOworCisgICAgaWYgKG1vZGUgIT0gSFdfR1BJT19NT0RFX09VVFBVVCkKKyAgICB7CisgICAgICAgIHJldHVybiAhIShQWF9EQVRBX1JFRyhwb3J0KSAmICgxIDw8IHBpbikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gISEoUHhfREFUQV9SRUdfY2FjaGVbcG9ydF0gJiAoMSA8PCBwaW4pKTsKKyAgICB9CisKKyNlbHNlCisgICAgcmV0dXJuICgoUFhfREFUQV9SRUcocG9ydCkgJiAoMSA8PCBwaW4pKSAhPSAwKTsKKyNlbmRpZgorfQorCit2b2lkIGh3X2dwaW9fdG9nZ2xlKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4pCit7CisgICAgaHdfZ3Bpb192ZXJpZnlfcmVzZXJ2ZWQocG9ydCwgcGluKTsKKworICAgIGlmIChod19ncGlvX2dldF9waW5fc3RhdHVzKHBvcnQsIHBpbikpCisgICAgeworICAgICAgICBod19ncGlvX3NldF9pbmFjdGl2ZShwb3J0LCBwaW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBod19ncGlvX3NldF9hY3RpdmUocG9ydCwgcGluKTsKKyAgICB9Cit9CisKK2ludCBod19ncGlvX2dldF9waW5zX3dpdGhfZnVuY3Rpb24oSFdfR1BJT19GVU5DIGZ1bmMsIHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplKQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgaW50IHBvcnQ7CisgICAgaW50IHBpbjsKKyAgICBIV19HUElPX01PREUgbW9kZTsKKyAgICBIV19HUElPX0ZVTkMgcGluX2Z1bmM7CisKKworICAgIGZvciAocG9ydCA9IDA7IHBvcnQgPCBIV19HUElPX05VTV9QT1JUUzsgKytwb3J0KQorICAgIHsKKyAgICAgICAgZm9yIChwaW4gPSAwOyBwaW4gPCBod19ncGlvX3BvcnRfbnVtX3BpbnNbcG9ydF07ICsrcGluKQorICAgICAgICB7CisgICAgICAgICAgICBod19ncGlvX2dldF9waW5fZnVuY3Rpb24ocG9ydCwgcGluLCAmbW9kZSwgJnBpbl9mdW5jKTsKKworICAgICAgICAgICAgaWYgKHBpbl9mdW5jICE9IGZ1bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb3VudCA8IGJ1Zl9zaXplICYmIGJ1ZiAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJ1Zltjb3VudF0gPSAodWludDhfdCkoKHBvcnQgPDwgNCkgfCBwaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX0dQSU8gKi8KKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfaGFyZF9mYXVsdC5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X2hhcmRfZmF1bHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDBkMjhiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X2hhcmRfZmF1bHQuYwpAQCAtMCwwICsxLDE3NCBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBTWVNURU0KKyAqIFx7CisgKiBcYWRkdG9ncm91cCBFeGNlcHRpb25fSGFuZGxlcnMKKyAqIFx7CisqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfaGFyZF9mYXVsdC5jCisgKgorICogQGJyaWVmIEhhcmRGYXVsdCBoYW5kbGVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAic2RrX2RlZnMuaCIKKyNpbmNsdWRlICJod19oYXJkX2ZhdWx0LmgiCisjaW5jbHVkZSAiaHdfd2F0Y2hkb2cuaCIKKyNpbmNsdWRlICJod19jcG0uaCIKKworCisKKy8qCisgKiBHbG9iYWwgdmFyaWFibGVzCisgKi8KK3VpbnQzMl90IGhhcmRmYXVsdF9ldmVudF9kYXRhWzldIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oImhhcmRfZmF1bHRfaW5mbyIpKSk7CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXMKKyAqLworCisKKy8qCisgKiBUaGlzIGlzIHRoZSBiYXNlIGFkZHJlc3MgaW4gUmV0ZW50aW9uIFJBTSB3aGVyZSB0aGUgc3RhY2tlZCBpbmZvcm1hdGlvbiB3aWxsIGJlIGNvcGllZC4KKyAqLworI2RlZmluZSBTVEFUVVNfQkFTRSAoMHg3RkM1NjAwKQorCisvKgorICogQ29tcGlsYXRpb24gc3dpdGNoIHRvIGVuYWJsZSB2ZXJib3NlIG91dHB1dCBvbiBIYXJkRmF1bHQKKyAqLworI2lmbmRlZiBWRVJCT1NFX0hBUkRGQVVMVAorIyAgICAgICBkZWZpbmUgVkVSQk9TRV9IQVJERkFVTFQgICAgICAgIDAKKyNlbmRpZgorCisKKy8qCisgKiBGdW5jdGlvbiBkZWZpbml0aW9ucworICovCisKKy8qKgorKiBcYnJpZWYgSGFyZEZhdWx0IGhhbmRsZXIgaW1wbGVtZW50YXRpb24uIER1cmluZyBkZXZlbG9wbWVudCBpdCB3aWxsIGNvcHkgdGhlIHN5c3RlbSdzIHN0YXR1cworKiAgICAgICAgdG8gYSBwcmVkZWZpbmVkIGxvY2F0aW9uIGluIG1lbW9yeS4gSW4gcmVsZWFzZSBtb2RlLCBpdCB3aWxsIGNhdXNlIGEgc3lzdGVtIHJlc2V0LgorKgorKiBccGFyYW0gW2luXSBoYXJkZmF1bHRfYXJncyBUaGUgc3lzdGVtJ3Mgc3RhdHVzIHdoZW4gdGhlIEhhcmRGYXVsdCBldmVudCBvY2N1cnJlZC4KKyoKKyogXHJldHVybiB2b2lkCisqCisqLworI2lmIChkZ19jb25maWdDT0RFX0xPQ0FUSU9OID09IE5PTl9WT0xBVElMRV9JU19GTEFTSCkKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oInRleHRfcmV0YWluZWQiKSkpCisjZW5kaWYKK3ZvaWQgSGFyZEZhdWx0X0hhbmRsZXJDKHVuc2lnbmVkIGxvbmcgKmhhcmRmYXVsdF9hcmdzKQoreworICAgIC8vIFN0YWNrIGZyYW1lIGNvbnRhaW5zOgorICAgIC8vIHIwLCByMSwgcjIsIHIzLCByMTIsIHIxNCwgdGhlIHJldHVybiBhZGRyZXNzIGFuZCB4UFNSCisgICAgLy8gLSBTdGFja2VkIFIwID0gaGZfYXJnc1swXQorICAgIC8vIC0gU3RhY2tlZCBSMSA9IGhmX2FyZ3NbMV0KKyAgICAvLyAtIFN0YWNrZWQgUjIgPSBoZl9hcmdzWzJdCisgICAgLy8gLSBTdGFja2VkIFIzID0gaGZfYXJnc1szXQorICAgIC8vIC0gU3RhY2tlZCBSMTIgPSBoZl9hcmdzWzRdCisgICAgLy8gLSBTdGFja2VkIExSID0gaGZfYXJnc1s1XQorICAgIC8vIC0gU3RhY2tlZCBQQyA9IGhmX2FyZ3NbNl0KKyAgICAvLyAtIFN0YWNrZWQgeFBTUj0gaGZfYXJnc1s3XQorICAgIGlmIChkZ19jb25maWdJTUFHRV9TRVRVUCA9PSBERVZFTE9QTUVOVF9NT0RFKQorICAgIHsKKyAgICAgICAgaHdfd2F0Y2hkb2dfZnJlZXplKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcCBXRE9HCisKKyAgICAgICAgRU5BQkxFX0RFQlVHR0VSOworCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSkgPSBoYXJkZmF1bHRfYXJnc1swXTsgICAgICAgICAgIC8vIFIwCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MDQpID0gaGFyZGZhdWx0X2FyZ3NbMV07ICAgIC8vIFIxCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MDgpID0gaGFyZGZhdWx0X2FyZ3NbMl07ICAgIC8vIFIyCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MEMpID0gaGFyZGZhdWx0X2FyZ3NbM107ICAgIC8vIFIzCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MTApID0gaGFyZGZhdWx0X2FyZ3NbNF07ICAgIC8vIFIxMgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDE0KSA9IGhhcmRmYXVsdF9hcmdzWzVdOyAgICAvLyBMUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDE4KSA9IGhhcmRmYXVsdF9hcmdzWzZdOyAgICAvLyBQQworICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDFDKSA9IGhhcmRmYXVsdF9hcmdzWzddOyAgICAvLyBQU1IKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgyMCkgPSAodW5zaWduZWQgbG9uZyloYXJkZmF1bHRfYXJnczsgICAgLy8gU3RhY2sgUG9pbnRlcgorCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MjQpID0gKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhFMDAwRUQyOCkpKTsgICAgLy8gQ0ZTUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDI4KSA9ICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4RTAwMEVEMkMpKSk7ICAgIC8vIEhGU1IKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgyQykgPSAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweEUwMDBFRDMwKSkpOyAgICAvLyBERlNSCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MzApID0gKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhFMDAwRUQzQykpKTsgICAgLy8gQUZTUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDM0KSA9ICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4RTAwMEVEMzQpKSk7ICAgIC8vIE1NQVIKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgzOCkgPSAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweEUwMDBFRDM4KSkpOyAgICAvLyBCRkFSCisKKyAgICAgICAgaWYgKFZFUkJPU0VfSEFSREZBVUxUKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIkhhcmRGYXVsdCBIYW5kbGVyOlxyXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiLSBSMCAgPSAweCUwOGx4XHJcbiIsIGhhcmRmYXVsdF9hcmdzWzBdKTsKKyAgICAgICAgICAgIHByaW50ZigiLSBSMSAgPSAweCUwOGx4XHJcbiIsIGhhcmRmYXVsdF9hcmdzWzFdKTsKKyAgICAgICAgICAgIHByaW50ZigiLSBSMiAgPSAweCUwOGx4XHJcbiIsIGhhcmRmYXVsdF9hcmdzWzJdKTsKKyAgICAgICAgICAgIHByaW50ZigiLSBSMyAgPSAweCUwOGx4XHJcbiIsIGhhcmRmYXVsdF9hcmdzWzNdKTsKKyAgICAgICAgICAgIHByaW50ZigiLSBSMTIgPSAweCUwOGx4XHJcbiIsIGhhcmRmYXVsdF9hcmdzWzRdKTsKKyAgICAgICAgICAgIHByaW50ZigiLSBMUiAgPSAweCUwOGx4XHJcbiIsIGhhcmRmYXVsdF9hcmdzWzVdKTsKKyAgICAgICAgICAgIHByaW50ZigiLSBQQyAgPSAweCUwOGx4XHJcbiIsIGhhcmRmYXVsdF9hcmdzWzZdKTsKKyAgICAgICAgICAgIHByaW50ZigiLSB4UFNSPSAweCUwOGx4XHJcbiIsIGhhcmRmYXVsdF9hcmdzWzddKTsKKyAgICAgICAgfQorCisgICAgICAgIGh3X2NwbV9hc3NlcnRfdHJpZ2dlcl9ncGlvKCk7CisKKyAgICAgICAgd2hpbGUgKDEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworIyBpZmRlZiBQUk9EVUNUSU9OX0RFQlVHX09VVFBVVAorIyBpZiAoVVNFX1dET0cpCisgICAgICAgIFdET0ctPldBVENIRE9HX1JFRyA9IDB4Qzg7ICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IFdET0chIDIwMCAqIDEwLjI0bXMgYWN0aXZlIHRpbWUgZm9yIFVBUlQgdG8gZmluaXNoIHByaW50aW5nIQorIyBlbmRpZgorCisgICAgICAgIGRiZ19wcm9kX291dHB1dCgxLCBoYXJkZmF1bHRfYXJncyk7CisjIGVuZGlmIC8vIFBST0RVQ1RJT05fREVCVUdfT1VUUFVUCisKKyAgICAgICAgaGFyZGZhdWx0X2V2ZW50X2RhdGFbMF0gPSBIQVJERkFVTFRfTUFHSUNfTlVNQkVSOworICAgICAgICBoYXJkZmF1bHRfZXZlbnRfZGF0YVsxXSA9IGhhcmRmYXVsdF9hcmdzWzBdOyAgICAvLyBSMAorICAgICAgICBoYXJkZmF1bHRfZXZlbnRfZGF0YVsyXSA9IGhhcmRmYXVsdF9hcmdzWzFdOyAgICAvLyBSMQorICAgICAgICBoYXJkZmF1bHRfZXZlbnRfZGF0YVszXSA9IGhhcmRmYXVsdF9hcmdzWzJdOyAgICAvLyBSMgorICAgICAgICBoYXJkZmF1bHRfZXZlbnRfZGF0YVs0XSA9IGhhcmRmYXVsdF9hcmdzWzNdOyAgICAvLyBSMworICAgICAgICBoYXJkZmF1bHRfZXZlbnRfZGF0YVs1XSA9IGhhcmRmYXVsdF9hcmdzWzRdOyAgICAvLyBSMTIKKyAgICAgICAgaGFyZGZhdWx0X2V2ZW50X2RhdGFbNl0gPSBoYXJkZmF1bHRfYXJnc1s1XTsgICAgLy8gTFIKKyAgICAgICAgaGFyZGZhdWx0X2V2ZW50X2RhdGFbN10gPSBoYXJkZmF1bHRfYXJnc1s2XTsgICAgLy8gUEMKKyAgICAgICAgaGFyZGZhdWx0X2V2ZW50X2RhdGFbOF0gPSBoYXJkZmF1bHRfYXJnc1s3XTsgICAgLy8gUFNSCisKKyAgICAgICAgaHdfY3BtX3JlYm9vdF9zeXN0ZW0oKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgcmVzZXQKKworICAgICAgICB3aGlsZSAoMSk7CisgICAgfQorfQorCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfb3RwYy5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X290cGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODU0NjFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X290cGMuYwpAQCAtMCwwICsxLDEwOTcgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIE9UUEMKKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X290cGMuYworICoKKyAqIEBicmllZiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgT1RQIENvbnRyb2xsZXIgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19PVFBDCisKKworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiaHdfb3RwYy5oIgorCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXMKKyAqLworCisvKgorICogMU1IejogMSBjeWNsZSA9IDF1cyA9PT4KKyAqICAgIDI1bnMgOiAxdXMsICAgMjAwbnMgOiAxdXMsICAgNTAwbnMgOiAxdXMsICAgMXVzIDogMnVzLCAgICAgNXVzIDogNXVzLCAydXMgOiAzdXMsICAgICBibGFuYyA6IDF1cworICoKKyAqIDJNSHo6IDEgY3ljbGUgPSA1MDBucyA9PT4KKyAqICAgIDI1bnMgOiA1MDBucywgMjAwbnMgOiA1MDBucywgNTAwbnMgOiAxdXMsICAgMXVzIDogMS41dXMsICAgNXVzIDogNXVzLCAydXMgOiAyLjV1cywgICBibGFuYyA6IDUwMG5zCisgKgorICogM01IejogMSBjeWNsZSA9IDMzM25zID09PgorICogICAgMjVucyA6IDMzM25zLCAyMDBucyA6IDMzM25zLCA1MDBucyA6IDY2Nm5zLCAxdXMgOiAxLjMzdXMsICA1dXMgOiA1dXMsIDJ1cyA6IDIuMzN1cywgIGJsYW5jIDogMzMzbnMKKyAqCisgKiA0TUh6OiAxIGN5Y2xlID0gMjUwbnMgPT0+CisgKiAgICAyNW5zIDogMjUwbnMsIDIwMG5zIDogMjUwbnMsIDUwMG5zIDogNzUwbnMsIDF1cyA6IDEuMjVucywgIDV1cyA6IDV1cywgMnVzIDogMi4yNW5zLCAgYmxhbmMgOiAyNTBucworICoKKyAqIDZNSHo6IDEgY3ljbGUgPSAxNjducyA9PT4KKyAqICAgIDI1bnMgOiAxNjducywgMjAwbnMgOiAzMzNucywgNTAwbnMgOiA2NjducywgMXVzIDogMS4xNjducywgNXVzIDogNXVzLCAydXMgOiAyLjE2N25zLCBibGFuYyA6IDE2N25zCisgKgorICogOE1IejogMSBjeWNsZSA9IDEyNW5zID09PgorICogICAgMjVucyA6IDEyNW5zLCAyMDBucyA6IDI1MG5zLCA1MDBucyA6IDYyNW5zLCAxdXMgOiAxLjEyNW5zLCA1dXMgOiA1dXMsIDJ1cyA6IDIuMTI1bnMsIGJsYW5jIDogMTI1bnMKKyAqCisgKiAxMk1IejogMSBjeWNsZSA9IDgzLjMzbnMgPT0+CisgKiAgICAyNW5zIDogODNucywgMjAwbnMgOiAyNTBucywgIDUwMG5zIDogNTgzbnMsIDF1cyA6IDEuMDgzbnMsIDV1cyA6IDV1cywgMnVzIDogMi4wODNucywgYmxhbmMgOiAxNjducworICoKKyAqIDE2TUh6OiAxIGN5Y2xlID0gNjIuNW5zID09PgorICogICAgMjVucyA6IDYybnMsIDIwMG5zIDogMjUwbnMsICA1MDBucyA6IDU2Mm5zLCAxdXMgOiAxLjA2Mm5zLCA1dXMgOiA1dXMsIDJ1cyA6IDIuMDYybnMsIGJsYW5jIDogMTI1bnMKKyAqCisgKiAyNE1IejogMSBjeWNsZSA9IDQxLjY3bnMgPT0+CisgKiAgICAyNW5zIDogNDFucywgMjAwbnMgOiAyMDhucywgIDUwMG5zIDogNTQxbnMsIDF1cyA6IDEuMDQxbnMsIDV1cyA6IDV1cywgMnVzIDogMi4wNDFucywgYmxhbmMgOiAxMjVucworICoKKyAqIDMyTUh6OiAxIGN5Y2xlID0gMzEuMjVucyA9PT4KKyAqICAgIDI1bnMgOiAzMW5zLCAyMDBucyA6IDIxOW5zLCAgNTAwbnMgOiA1MzFucywgMXVzIDogMS4wMzFucywgNXVzIDogNXVzLCAydXMgOiAyLjAzMW5zLCBibGFuYyA6IDEyNW5zCisgKgorICogNDhNSHo6IDEgY3ljbGUgPSA0MS42N25zID09PgorICogICAgMjVucyA6IDQxbnMsIDIwMG5zIDogMjA4bnMsICA1MDBucyA6IDUyMW5zLCAxdXMgOiAxLjAyMW5zLCA1dXMgOiA1dXMsIDJ1cyA6IDIuMDIxbnMsIGJsYW5jIDogMTI1bnMKKyAqCisgKi8KK2NvbnN0IHVpbnQzMl90IHRpbTFbMTFdID0KK3sKKyAgICAvKiAxIE1IeiAqLworICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yNU5TX1BvcykgfAorICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yMDBOU19Qb3MpIHwKKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfNTAwTlNfUG9zKSB8CisgICAgKDEgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzFVU19Qb3MpIHwKKyAgICAoNCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfUFdfUG9zKSB8CisgICAgKDIgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX0NBRFhfUG9zKSwKKyAgICAvKiAyTUh6ICovCisgICAgKDAgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzI1TlNfUG9zKSB8CisgICAgKDAgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzIwME5TX1BvcykgfAorICAgICgxIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF81MDBOU19Qb3MpIHwKKyAgICAoMiA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMVVTX1BvcykgfAorICAgICg5IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Qb3MpIHwKKyAgICAoNCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfQ0FEWF9Qb3MpLAorICAgIC8qIDNNSHogKi8KKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjVOU19Qb3MpIHwKKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjAwTlNfUG9zKSB8CisgICAgKDEgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzUwME5TX1BvcykgfAorICAgICgzIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8xVVNfUG9zKSB8CisgICAgKDE0IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Qb3MpIHwKKyAgICAoNiA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfQ0FEWF9Qb3MpLAorICAgIC8qIDRNSHogKi8KKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjVOU19Qb3MpIHwKKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjAwTlNfUG9zKSB8CisgICAgKDIgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzUwME5TX1BvcykgfAorICAgICg0IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8xVVNfUG9zKSB8CisgICAgKDE5IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Qb3MpIHwKKyAgICAoOCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfQ0FEWF9Qb3MpLAorICAgIC8qIDZNSHogKi8KKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjVOU19Qb3MpIHwKKyAgICAoMSA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjAwTlNfUG9zKSB8CisgICAgKDMgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzUwME5TX1BvcykgfAorICAgICg2IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8xVVNfUG9zKSB8CisgICAgKDI5IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Qb3MpIHwKKyAgICAoMTIgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX0NBRFhfUG9zKSwKKyAgICAvKiA4TUh6ICovCisgICAgKDAgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzI1TlNfUG9zKSB8CisgICAgKDEgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzIwME5TX1BvcykgfAorICAgICg0IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF81MDBOU19Qb3MpIHwKKyAgICAoOCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMVVTX1BvcykgfAorICAgICgzOSA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfUFdfUG9zKSB8CisgICAgKDE2IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9DQURYX1BvcyksCisgICAgLyogMTJNSHogKi8KKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjVOU19Qb3MpIHwKKyAgICAoMiA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjAwTlNfUG9zKSB8CisgICAgKDYgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzUwME5TX1BvcykgfAorICAgICgxMiA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMVVTX1BvcykgfAorICAgICg1OSA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfUFdfUG9zKSB8CisgICAgKDI0IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9DQURYX1BvcyksCisgICAgLyogMTZNSHogKi8KKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjVOU19Qb3MpIHwKKyAgICAoMyA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjAwTlNfUG9zKSB8CisgICAgKDggPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzUwME5TX1BvcykgfAorICAgICgxNiA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMVVTX1BvcykgfAorICAgICg3OSA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfUFdfUG9zKSB8CisgICAgKDMyIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9DQURYX1BvcyksCisgICAgLyogMjRNSHogKi8KKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjVOU19Qb3MpIHwKKyAgICAoNCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjAwTlNfUG9zKSB8CisgICAgKDEyIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF81MDBOU19Qb3MpIHwKKyAgICAoMjQgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzFVU19Qb3MpIHwKKyAgICAoMTE5IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Qb3MpIHwKKyAgICAoNDggPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX0NBRFhfUG9zKSwKKyAgICAvKiAzMk1IeiAqLworICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yNU5TX1BvcykgfAorICAgICg2IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yMDBOU19Qb3MpIHwKKyAgICAoMTYgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzUwME5TX1BvcykgfAorICAgICgzMiA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMVVTX1BvcykgfAorICAgICgxNTkgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX1BXX1BvcykgfAorICAgICg2NCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfQ0FEWF9Qb3MpLAorICAgIC8qIDQ4TUh6ICovCisgICAgKDEgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzI1TlNfUG9zKSB8CisgICAgKDkgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzIwME5TX1BvcykgfAorICAgICgyNCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfNTAwTlNfUG9zKSB8CisgICAgKDQ4IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8xVVNfUG9zKSB8CisgICAgKDIzOSA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfUFdfUG9zKSB8CisgICAgKDk2IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9DQURYX1BvcykKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IHRpbTJbSFdfT1RQQ19TWVNfQ0xLX0ZSRVFfNDggKyAxXSA9Cit7IDAsIDAsIDAsIDAsIDAsIDAsICAxLCAgMSwgIDIsICAzLCAgNSB9OworCisKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucworICovCisKKworCisvKgorICogSW5saW5lIGhlbHBlcnMKKyAqLworCisvKioKKyAqIFdhaXQgZm9yIHByb2dyYW1taW5nIHRvIGZpbmlzaC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgd2FpdF9mb3JfcHJvZ19kb25lKHZvaWQpCit7CisgICAgd2hpbGUgKCEoT1RQQy0+T1RQQ19TVEFUX1JFRyAmIEhXX09UUENfUkVHX0ZJRUxEX01BU0soU1RBVCwgUFJEWSkpKQorICAgICAgICA7Cit9CisKKy8qKgorICogV2FpdCBmb3IgQVJFQUQgb3IgQVBST0cgdG8gZmluaXNoLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCB3YWl0X2Zvcl9hdXRvX2RvbmUodm9pZCkKK3sKKyAgICB3aGlsZSAoIShPVFBDLT5PVFBDX1NUQVRfUkVHICYgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhTVEFULCBBUkRZKSkpCisgICAgICAgIDsKK30KKworLyoqCisgKiBDaGVjayBmb3IgY29ycmVjdGFibGUgb3IgdW5jb3JyZWN0YWJsZSBwcm9ncmFtbWluZyBlcnJvci4KKyAqLworX19TVEFUSUNfSU5MSU5FIGJvb2wgaGF2ZV9wcm9nX2Vycm9yKHZvaWQpCit7CisgICAgcmV0dXJuIE9UUEMtPk9UUENfU1RBVF9SRUcgJgorICAgICAgICAgICAoSFdfT1RQQ19GSUVMRF9WQUwoU1RBVCwgUEVSUl9VTkMsIDEpIHwgSFdfT1RQQ19GSUVMRF9WQUwoU1RBVCwgUEVSUl9DT1IsIDEpKTsKK30KKworLyoKKyAqIEFzc2VydGlvbiBtYWNyb3MKKyAqLworCisvKgorICogTWFrZSBzdXJlIHRoYXQgdGhlIE9UUCBjbG9jayBpcyBlbmFibGVkCisgKi8KKyNkZWZpbmUgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEIFwKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoQ1JHX1RPUC0+Q0xLX0FNQkFfUkVHICYgUkVHX01TSyhDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIE9UUF9FTkFCTEUpKQorCisvKgorICogTWFrZSBzdXJlIHRoYXQgdGhlIE9UUEMgaXMgaW4gZ2l2ZW4gc3RhdGUKKyAqLworI2RlZmluZSBBU1NFUlRfV0FSTklOR19PVFBDX01PREUocykgXAorICAgICAgICBBU1NFUlRfV0FSTklORygoT1RQQy0+T1RQQ19NT0RFX1JFRyAmIEhXX09UUENfUkVHX0ZJRUxEX01BU0soTU9ERSwgTU9ERSkpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgTU9ERSwgcykpCisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgY2VsbCBhZGRyZXNzIGlzIHZhbGlkCisgKi8KKyNkZWZpbmUgQVNTRVJUX0NFTExfT0ZGU0VUX1ZBTElEKG9mZikgXAorICAgICAgICBBU1NFUlRfV0FSTklORyhvZmYgPCAweDIwMDApCisKKy8qCisgKiBNYWtlIHN1cmUgdmFsIGlzIG5vbi16ZXJvIGFuZCBsZXNzIHRoYW4gbWF4aW11bQorICovCisjZGVmaW5lIEFTU0VSVF9XQVJOSU5HX05PTlpFUk9fUkFOR0UodmFsLCBtYXhpbXVtKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIEFTU0VSVF9XQVJOSU5HKHZhbCk7IFwKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0FSTklORygodmFsKSA8IChtYXhpbXVtKSk7IFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworCisvKgorICogRnVuY3Rpb24gZGVmaW5pdGlvbnMKKyAqLworCitfX1JFVEFJTkVEX0NPREUgSFdfT1RQQ19TWVNfQ0xLX0ZSRVEgaHdfb3RwY19jb252ZXJ0X3N5c19jbGtfbWh6KHVpbnQzMl90IGNsa19mcmVxKQoreworICAgIEhXX09UUENfU1lTX0NMS19GUkVRIGY7CisKKyAgICAvKiBWYWx1ZSB0byBjb252ZXJ0IG11c3QgYmUgYXQgbW9zdCA0OCBNSHogKi8KKyAgICBBU1NFUlRfV0FSTklORyhjbGtfZnJlcSA8PSA0OCk7CisKKyAgICBpZiAoLS1jbGtfZnJlcSA8IDQpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBjb3ZlciAxLCAyLCAzLCA0CisgICAgICAgICAqLworICAgICAgICBmID0gKEhXX09UUENfU1lTX0NMS19GUkVRKWNsa19mcmVxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjbGtfZnJlcSAtPSA1OworICAgICAgICAvKgorICAgICAgICAgKiByZW1haW5pbmcgdmFsaWQgdmFsdWVzOgorICAgICAgICAgKiAgLSAgMCAoaW5pdGlhbGx5IDYpCisgICAgICAgICAqICAtICAyIChpbml0aWFsbHkgOCkKKyAgICAgICAgICogIC0gIDYgKGluaXRpYWxseSAxMikKKyAgICAgICAgICogIC0gMTAgKGluaXRpYWxseSAxNikKKyAgICAgICAgICogIC0gMTggKGluaXRpYWxseSAyNCkKKyAgICAgICAgICogIC0gMjYgKGluaXRpYWxseSAzMikKKyAgICAgICAgICogIC0gNDIgKGluaXRpYWxseSA0OCkKKyAgICAgICAgICovCisKKyAgICAgICAgLyogbm8gb2RkIHZhbGlkIHZhbHVlcyBhbnkgbW9yZSAqLworICAgICAgICBBU1NFUlRfV0FSTklORyghKGNsa19mcmVxICYgMSkpOworCisgICAgICAgIGNsa19mcmVxID4+PSAxOworCisgICAgICAgIC8qCisgICAgICAgICAqIHJlbWFpbmluZyB2YWxpZCB2YWx1ZXM6CisgICAgICAgICAqICAtICAwIChpbml0aWFsbHkgNikKKyAgICAgICAgICogIC0gIDEgKGluaXRpYWxseSA4KQorICAgICAgICAgKiAgLSAgMyAoaW5pdGlhbGx5IDEyKQorICAgICAgICAgKiAgLSAgNSAoaW5pdGlhbGx5IDE2KQorICAgICAgICAgKiAgLSAgOSAoaW5pdGlhbGx5IDI0KQorICAgICAgICAgKiAgLSAxMyAoaW5pdGlhbGx5IDMyKQorICAgICAgICAgKiAgLSAyMSAoaW5pdGlhbGx5IDQ4KQorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGNsa19mcmVxID4gOCkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHJlbWFpbmluZyB2YWxpZCB2YWx1ZXM6CisgICAgICAgICAgICAgKiAgLSAgOSAoaW5pdGlhbGx5IDI0KQorICAgICAgICAgICAgICogIC0gMTMgKGluaXRpYWxseSAzMikKKyAgICAgICAgICAgICAqICAtIDIxIChpbml0aWFsbHkgNDgpCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChjbGtfZnJlcSA+IDE2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVF9XQVJOSU5HKGNsa19mcmVxID09IDIxKTsKKworICAgICAgICAgICAgICAgIGYgPSBIV19PVFBDX1NZU19DTEtfRlJFUV80ODsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbGtfZnJlcSAtPSA4OworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogcmVtYWluaW5nIHZhbGlkIHZhbHVlczoKKyAgICAgICAgICAgICAgICAgKiAgLSAgMSAoaW5pdGlhbGx5IDI0KQorICAgICAgICAgICAgICAgICAqICAtICA1IChpbml0aWFsbHkgMzIpCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoKGNsa19mcmVxID09IDEpIHx8IChjbGtfZnJlcSA9PSA1KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY2xrX2ZyZXEgPCA0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZiA9IChIV19PVFBDX1NZU19DTEtfRlJFUSlIV19PVFBDX1NZU19DTEtfRlJFUV8yNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZiA9IChIV19PVFBDX1NZU19DTEtfRlJFUSlIV19PVFBDX1NZU19DTEtfRlJFUV8zMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogcmVtYWluaW5nIHZhbGlkIHZhbHVlczoKKyAgICAgICAgICAgICAqICAtICAwIChpbml0aWFsbHkgNikKKyAgICAgICAgICAgICAqICAtICAxIChpbml0aWFsbHkgOCkKKyAgICAgICAgICAgICAqICAtICAzIChpbml0aWFsbHkgMTIpCisgICAgICAgICAgICAgKiAgLSAgNSAoaW5pdGlhbGx5IDE2KQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoY2xrX2ZyZXEgPiAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVF9XQVJOSU5HKChjbGtfZnJlcSA9PSAzKSB8fCAoY2xrX2ZyZXEgPT0gNSkpOworCisgICAgICAgICAgICAgICAgaWYgKGNsa19mcmVxID4gNCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGYgPSAoSFdfT1RQQ19TWVNfQ0xLX0ZSRVEpSFdfT1RQQ19TWVNfQ0xLX0ZSRVFfMTY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGYgPSAoSFdfT1RQQ19TWVNfQ0xLX0ZSRVEpSFdfT1RQQ19TWVNfQ0xLX0ZSRVFfMTI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGYgPSAoSFdfT1RQQ19TWVNfQ0xLX0ZSRVEpKEhXX09UUENfU1lTX0NMS19GUkVRXzYgKyBjbGtfZnJlcSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZjsKK30KKworCit2b2lkIGh3X290cGNfZGlzYWJsZSh2b2lkKQoreworICAgIC8qCisgICAgICogRW5hYmxlIE9UUEMgY2xvY2sKKyAgICAgKi8KKyAgICBod19vdHBjX2luaXQoKTsKKworICAgIC8qCisgICAgICogc2V0IE9UUEMgdG8gc3RhbmQtYnkgbW9kZQorICAgICAqLworICAgIEhXX09UUENfUkVHX1NFVEYoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX1NUQlkpOworCisgICAgLyoKKyAgICAgKiBEaXNhYmxlIE9UUEMgY2xvY2sKKyAgICAgKi8KKyAgICBod19vdHBjX2Nsb3NlKCk7Cit9CisKKworX19SRVRBSU5FRF9DT0RFIHZvaWQgaHdfb3RwY19zZXRfc3BlZWQoSFdfT1RQQ19TWVNfQ0xLX0ZSRVEgY2xrX3NwZWVkKQoreworICAgIEFTU0VSVF9XQVJOSU5HX09UUF9DTEtfRU5BQkxFRDsKKworICAgIC8qCisgICAgICogU2V0IGFjY2VzcyBzcGVlZAorICAgICAqLworICAgIEFTU0VSVF9XQVJOSU5HKGNsa19zcGVlZCA8PSBIV19PVFBDX1NZU19DTEtfRlJFUV80OCk7CisKKyAgICBPVFBDLT5PVFBDX1RJTTFfUkVHID0gdGltMVtjbGtfc3BlZWRdOworICAgIEhXX09UUENfUkVHX1NFVEYoVElNMiwgQ0NfVF9CQ0hLLCB0aW0yW2Nsa19zcGVlZF0pOworfQorCisKK3ZvaWQgaHdfb3RwY19wb3dlcl9zYXZlKHVpbnQzMl90IGluYWN0aXZpdHlfcGVyaW9kKQoreworICAgIC8qIE9ubHkgZ28gdG8gcG93ZXIgc2F2ZSBmb3IgYW4gaW5hY3Rpdml0eV9wZXJpb2QgPCAxMDI0ICovCisgICAgQVNTRVJUX1dBUk5JTkcoaW5hY3Rpdml0eV9wZXJpb2QgPCAxMDI0KTsKKworICAgIEhXX09UUENfUkVHX1NFVEYoVElNMiwgQ0NfU1RCWV9USFIsIGluYWN0aXZpdHlfcGVyaW9kKTsKK30KKworCit1aW50MzJfdCBod19vdHBjX251bV9vZl9ycih2b2lkKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKnB0ciA9ICh2b2xhdGlsZSB1aW50MzJfdCAqKU1FTU9SWV9PVFBfQkFTRTsKKworICAgIEFTU0VSVF9XQVJOSU5HX09UUF9DTEtfRU5BQkxFRDsKKworICAgIC8vIFNUQlkgbW9kZQorICAgIEhXX09UUENfUkVHX1NFVEYoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX1NUQlkpOworCisgICAgLy8gVGhlIGFjY2VzcyB3aWxsIGJlIHBlcmZvcm1lZCBpbiB0aGUgc3BhcmUgcm93cworICAgIEhXX09UUENfUkVHX1NFVEYoTU9ERSwgVVNFX1NQX1JPV1MsIDEpOworCisgICAgLy8gTVJFQUQgbW9kZQorICAgIEhXX09UUENfUkVHX1NFVEYoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX01SRUFEKTsKKworICAgIC8vIFJlYWQgUmVjb3JkcworICAgIGkgPSAwOworCisgICAgd2hpbGUgKChpIDwgTUFYX1JSX0FWQUlMKSAmJiAocHRyWzB4OWUgLSA0ICogaV0gJiAweDEpKQorICAgIHsKKyAgICAgICAgaSsrOworICAgIH0KKworICAgIC8vIFNUQlkgbW9kZQorICAgIEhXX09UUENfUkVHX1NFVEYoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX1NUQlkpOworCisgICAgLy8gU2VsZWN0IHRoZSBub3JtYWwgbWVtb3J5IGFycmF5CisgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBVU0VfU1BfUk9XUywgMCk7CisKKyAgICByZXR1cm4gaTsKK30KKworc3RhdGljIGJvb2wgbWFudWFsX3Byb2dfdmVyaWZ5KHVpbnQzMl90IGNlbGxfb2Zmc2V0LCB1aW50MzJfdCBwd29yZF9sLCB1aW50MzJfdCBwd29yZF9oKQoreworICAgIHVpbnQzMl90IHZhbF9sLCB2YWxfaCwgb2xkX21vZGUgPSBPVFBDLT5PVFBDX01PREVfUkVHOworICAgIHVpbnQzMl90ICphZGRyID0gaHdfb3RwY19jZWxsX3RvX21lbShjZWxsX29mZnNldCk7CisKKyAgICAvKiB3ZSBoYXZlIHRvIGdvIHRocm91Z2ggc3RhbmRieSBtb2RlIGZpcnN0ICovCisgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfU1RCWSk7CisgICAgX19ETUIoKTsKKyAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIEVSUl9SRVNQX0RJUywgMSk7CisgICAgX19ETUIoKTsKKyAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9NUkVBRCk7CisKKyAgICBpZiAoT1RQQy0+T1RQQ19TVEFUX1JFRyAmIEhXX09UUENfUkVHX0ZJRUxEX01BU0soU1RBVCwgUkVSUk9SKSkKKyAgICB7CisgICAgICAgIEhXX09UUENfUkVHX1NFVEYoU1RBVCwgUkVSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgIDEpOyAvL1RoaXMgYml0IG5lZWQgdG8gYmUgY2xlYXJlZCBtYW51YWxseSAoY2FuIG9ubHkgaGFwcGVuIGlmIGEgcHJldmlvdXMgcmVhZCBoYXMgbm90IGNoZWNrZWQvY2xlYXJlZCBpdCkKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlYWQgY2VsbCBpbiBtYW51YWwgbW9kZSwgYXMgMiAzMi1iaXQgdmFsdWVzIChsaXR0bGUtZW5kaWFuKQorICAgICAqLworICAgIHZhbF9sID0gYWRkclswXTsKKyAgICB2YWxfaCA9IGFkZHJbMV07CisgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfU1RCWSk7CisgICAgX19ETUIoKTsKKyAgICBPVFBDLT5PVFBDX01PREVfUkVHID0gb2xkX21vZGU7CisKKyAgICBpZiAoT1RQQy0+T1RQQ19TVEFUX1JFRyAmIEhXX09UUENfUkVHX0ZJRUxEX01BU0soU1RBVCwgUkVSUk9SKSkKKyAgICB7CisgICAgICAgIEhXX09UUENfUkVHX1NFVEYoU1RBVCwgUkVSUk9SLCAxKTsgLy9UaGlzIGJpdCBuZWVkIHRvIGJlIGNsZWFyZWQgbWFudWFsbHkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiAocHdvcmRfaCA9PSB2YWxfaCkgJiYgKHB3b3JkX2wgPT0gdmFsX2wpOworfQorCisvKgorICogU2V0IHRvIDEgdG8gbWFudWFsbHkgdmVyaWZ5IHRoZSBwcm9ncmFtbWVkIGNlbGwgdmFsdWUsIGlmIHRoZSBhdXRvLXZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworI2RlZmluZSBNQU5VQUxfUFJPR19WRVJJRklDQVRJT04gICAgICAgIDEKKworYm9vbCBod19vdHBjX21hbnVhbF93b3JkX3Byb2codWludDMyX3QgY2VsbF9vZmZzZXQsIHVpbnQzMl90IHB3b3JkX2wsIHVpbnQzMl90IHB3b3JkX2gsIGJvb2wgdXNlX3JyKQoreworICAgIGludCBpOworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKworICAgIEFTU0VSVF9XQVJOSU5HX09UUF9DTEtfRU5BQkxFRDsKKworICAgIEFTU0VSVF9XQVJOSU5HX09UUENfTU9ERShIV19PVFBDX01PREVfU1RCWSk7CisKKyAgICBBU1NFUlRfQ0VMTF9PRkZTRVRfVkFMSUQoY2VsbF9vZmZzZXQpOworCisgICAgLyoKKyAgICAgKiBQcm9ncmFtIHRoZSBkYXRhIHJlZ3MKKyAgICAgKi8KKyAgICBPVFBDLT5PVFBDX1BXT1JETF9SRUcgPSBwd29yZF9sOworICAgIE9UUEMtPk9UUENfUFdPUkRIX1JFRyA9IHB3b3JkX2g7CisKKyAgICAvKgorICAgICAqIFN0YXJ0IHByb2dyYW1taW5nCisgICAgICovCisgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfTVBST0cpOworICAgIE9UUEMtPk9UUENfUENUUkxfUkVHID0KKyAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoUENUUkwsIFdBRERSLCBjZWxsX29mZnNldCkgfAorICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChQQ1RSTCwgUFNUQVJULCAxKTsKKyAgICB3YWl0X2Zvcl9wcm9nX2RvbmUoKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgYW5kIHJldHJ5IHVwIHRvIDEwIHRpbWVzCisgICAgICovCisgICAgaSA9IDA7CisKKyAgICB3aGlsZSAoaGF2ZV9wcm9nX2Vycm9yKCkpCisgICAgeworICAgICAgICBpZiAoaSA9PSAxMCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpID0gaSArIDE7CisKKyAgICAgICAgT1RQQy0+T1RQQ19QQ1RSTF9SRUcgPQorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoUENUUkwsIFdBRERSLCBjZWxsX29mZnNldCkgfAorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoUENUUkwsIFBTVEFSVCwgMSkgfAorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoUENUUkwsIFBSRVRSWSwgMSk7CisKKyAgICAgICAgd2FpdF9mb3JfcHJvZ19kb25lKCk7CisgICAgfQorCisgICAgaWYgKGkgPT0gMTApCisgICAgeworICAgICAgICByZXQgPSBmYWxzZTsKKworICAgICAgICBpZiAoTUFOVUFMX1BST0dfVkVSSUZJQ0FUSU9OKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBtYW51YWxfcHJvZ192ZXJpZnkoY2VsbF9vZmZzZXQsIHB3b3JkX2wsIHB3b3JkX2gpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZV9yciAmJiAhcmV0KQorICAgICAgICB7CisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJlc2V0IHN0YXRlCisgICAgICAgICAgICAgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfU1RCWSk7CisKKyAgICAgICAgICAgICAgICAvLyBBYm9ydCBpZiB0aGUgd3JpdGluZyB3YXMgZG9uZSBpbiB0aGUgc3BhcmUgYXJlYQorICAgICAgICAgICAgICAgIGlmIChPVFBDLT5PVFBDX01PREVfUkVHICYgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhNT0RFLCBVU0VfU1BfUk9XUykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBXcml0ZSB0aGUgcmVwYWlyIHJlY29yZCB0byB0aGUgc3BhcmUgYXJlYQorICAgICAgICAgICAgICAgIGlmICghaHdfb3RwY193cml0ZV9ycihjZWxsX29mZnNldCwgcHdvcmRfbCwgcHdvcmRfaCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9TVEJZKTsKKyAgICAgICAgICAgICAgICAvLyBmb3JjZSByZWxvYWRpbmcKKyAgICAgICAgICAgICAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9NUkVBRCk7CisKKyAgICAgICAgICAgICAgICByZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKDApOworICAgICAgICB9CisgICAgfQorCisgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfU1RCWSk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitib29sIGh3X290cGNfbWFudWFsX3Byb2coY29uc3QgdWludDMyX3QgKnBfZGF0YSwgdWludDMyX3QgY2VsbF9vZmZzZXQsIEhXX09UUENfV09SRCBjZWxsX3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtX29mX3dvcmRzLCBib29sIHVzZV9ycikKK3sKKyAgICB1aW50MzJfdCB3LCBjLCBuY2VsbHMsIG9mZiwgdmFsOworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKyAgICBjb25zdCB1aW50MzJfdCAqYWRkcjsKKworICAgIEFTU0VSVF9XQVJOSU5HX09UUF9DTEtfRU5BQkxFRDsKKworICAgIEFTU0VSVF9XQVJOSU5HX09UUENfTU9ERShIV19PVFBDX01PREVfU1RCWSk7CisKKyAgICBBU1NFUlRfQ0VMTF9PRkZTRVRfVkFMSUQoY2VsbF9vZmZzZXQpOworCisgICAgaWYgKG51bV9vZl93b3JkcyA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7ICAgIC8vIGVhcmx5IGV4aXQKKyAgICB9CisKKyAgICAvKiBpbmRleCBpbiBwX2RhdGFbXSAqLworICAgIHcgPSAwOworICAgIG9mZiA9IGNlbGxfb2Zmc2V0OworCisgICAgaWYgKGNlbGxfd29yZCA9PSBIV19PVFBDX1dPUkRfSElHSCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIHJlYWQgbG93IDMyLWJpdCB3b3JkIHNvIHRoYXQgd2UgcHJvZ3JhbSB0aGUgc2FtZSB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgYWRkciA9IGh3X290cGNfY2VsbF90b19tZW0oY2VsbF9vZmZzZXQpOworCisgICAgICAgIGh3X290cGNfbWFudWFsX3JlYWRfb24odXNlX3JyKTsKKyAgICAgICAgLyogbGl0dGxlLWVuZGlhbiAqLworICAgICAgICB2YWwgPSBhZGRyWzBdOworICAgICAgICBod19vdHBjX21hbnVhbF9yZWFkX29mZigpOworCisgICAgICAgIGlmICghaHdfb3RwY19tYW51YWxfd29yZF9wcm9nKG9mZisrLCB2YWwsIHBfZGF0YVt3KytdLCB1c2VfcnIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBuY2VsbHMgPSAobnVtX29mX3dvcmRzIC0gMSkgPj4gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmNlbGxzID0gbnVtX29mX3dvcmRzID4+IDE7CisgICAgfQorCisgICAgZm9yIChjID0gMDsgYyA8IG5jZWxsczsgYysrLCBvZmYrKywgdyArPSAyKQorICAgIHsKKyAgICAgICAgaWYgKCFod19vdHBjX21hbnVhbF93b3JkX3Byb2cob2ZmLCBwX2RhdGFbd10sIHBfZGF0YVt3ICsgMV0sIHVzZV9ycikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh3IDwgbnVtX29mX3dvcmRzKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVhZCBoaWdoIDMyLWJpdCB3b3JkIHNvIHRoYXQgd2UgcHJvZ3JhbSB0aGUgc2FtZSB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgYWRkciA9IGh3X290cGNfY2VsbF90b19tZW0ob2ZmKTsKKworICAgICAgICBod19vdHBjX21hbnVhbF9yZWFkX29uKHVzZV9ycik7CisgICAgICAgIC8qIGxpdHRsZS1lbmRpYW4gKi8KKyAgICAgICAgdmFsID0gYWRkclsxXTsKKyAgICAgICAgaHdfb3RwY19tYW51YWxfcmVhZF9vZmYoKTsKKworICAgICAgICBpZiAoIWh3X290cGNfbWFudWFsX3dvcmRfcHJvZyhvZmYsIHBfZGF0YVt3KytdLCB2YWwsIHVzZV9ycikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9XQVJOSU5HKHcgPT0gbnVtX29mX3dvcmRzKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK2Jvb2wgaHdfb3RwY193cml0ZV9ycih1aW50MzJfdCBjZWxsX2FkZHIsIHVpbnQzMl90IHB3b3JkX2wsIHVpbnQzMl90IHB3b3JkX2gpCit7CisgICAgdWludDMyX3QgcmVwYWlyX2NudDsKKyAgICBib29sIHJldCA9IGZhbHNlOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQQ19NT0RFKEhXX09UUENfTU9ERV9TVEJZKTsKKworICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIHVzZWQgUmVwYWlyIFJlY29yZHMKKyAgICByZXBhaXJfY250ID0gaHdfb3RwY19udW1fb2ZfcnIoKTsKKworICAgIC8vIEFib3J0IGlmIGFsbCByZXBhaXIgcmVjb3JkcyBhcmUgYmVpbmcgdXNlZAorICAgIGlmIChyZXBhaXJfY250IDwgTUFYX1JSX0FWQUlMKQorICAgIHsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIGFjY2VzcyB3aWxsIGJlIHBlcmZvcm1lZCBpbiB0aGUgc3BhcmUgcm93cworICAgICAgICAgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBVU0VfU1BfUk9XUywgMSk7CisKKyAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBzcGFyZSBhcmVhCisgICAgICAgICAgICBpZiAoIWh3X290cGNfbWFudWFsX3dvcmRfcHJvZygweDRGIC0gcmVwYWlyX2NudCAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwd29yZF9sLCBwd29yZF9oLCBmYWxzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBoZWFkZXIgb2YgdGhlIHJlcGFpciByZWNvcmQgdG8gdGhlIHNwYXJlIGFyZWEKKyAgICAgICAgICAgIGlmICghaHdfb3RwY19tYW51YWxfd29yZF9wcm9nKDB4NEYgLSByZXBhaXJfY250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB8IChjZWxsX2FkZHIgPDwgMSksIDB4MDAwMDAwMDAsIGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoMCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHRvIHRoZSBub3JtYWwgbWVtb3J5IGFycmF5CisgICAgICAgIEhXX09UUENfUkVHX1NFVEYoTU9ERSwgVVNFX1NQX1JPV1MsIDApOworCisgICAgICAgIGlmIChyZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBSZXF1ZXN0IHRoZSByZWxvYWRpbmcgb2YgdGhlIHJlcGFpciByZWNvcmRzIGF0IHRoZSBuZXh0CisgICAgICAgICAgICAgKiBlbmFibGluZyBvZiB0aGUgT1RQIGNlbGwKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBSTERfUlJfUkVRLCAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKwordm9pZCBod19vdHBjX21hbnVhbF9yZWFkX29uKGJvb2wgc3BhcmVfcm93cykKK3sKKyAgICBBU1NFUlRfV0FSTklOR19PVFBfQ0xLX0VOQUJMRUQ7CisKKyAgICBBU1NFUlRfV0FSTklOR19PVFBDX01PREUoSFdfT1RQQ19NT0RFX1NUQlkpOworCisgICAgLyoKKyAgICAgKiBQbGFjZSB0aGUgT1RQQyBpbiBtYW51YWwgcmVhZCBtb2RlCisgICAgICovCisgICAgaWYgKHNwYXJlX3Jvd3MpCisgICAgeworICAgICAgICBPVFBDLT5PVFBDX01PREVfUkVHID0KKyAgICAgICAgICAgIEhXX09UUENfRklFTERfVkFMKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9NUkVBRCkgfAorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgVVNFX1NQX1JPV1MsIDEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBPVFBDLT5PVFBDX01PREVfUkVHID0gSFdfT1RQQ19NT0RFX01SRUFEOworICAgIH0KK30KKworCit2b2lkIGh3X290cGNfbWFudWFsX3JlYWRfb2ZmKHZvaWQpCit7CisgICAgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQQ19NT0RFKEhXX09UUENfTU9ERV9NUkVBRCk7CisKKyAgICAvKgorICAgICAqIFBsYWNlIHRoZSBPVFBDIGluIFNUQlkgbW9kZQorICAgICAqLworICAgIE9UUEMtPk9UUENfTU9ERV9SRUcgPSBIV19PVFBDX01PREVfU1RCWTsKK30KKworCitib29sIGh3X290cGNfZG1hX3Byb2coY29uc3QgdWludDMyX3QgKnBfZGF0YSwgdWludDMyX3QgY2VsbF9vZmZzZXQsIEhXX09UUENfV09SRCBjZWxsX3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtX29mX3dvcmRzLCBib29sIHNwYXJlX3Jvd3MpCit7CisgICAgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQQ19NT0RFKEhXX09UUENfTU9ERV9TVEJZKTsKKworICAgIEFTU0VSVF9DRUxMX09GRlNFVF9WQUxJRChjZWxsX29mZnNldCk7CisKKyAgICAvKgorICAgICAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBzaXplIGlzIHZhbGlkCisgICAgICovCisgICAgQVNTRVJUX1dBUk5JTkcobnVtX29mX3dvcmRzKTsKKyAgICBBU1NFUlRfV0FSTklORyhudW1fb2Zfd29yZHMgPCAxNjM4NCk7CisKKyAgICAvKgorICAgICAqIFNldCB1cCBETUEKKyAgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgcmVtYXBfdHlwZSA9IFJFR19HRVRGKENSR19UT1AsIFNZU19DVFJMX1JFRywgUkVNQVBfQURSMCk7CisKKyAgICBpZiAoSVNfU1lTUkFNX0FERFJFU1MocF9kYXRhKSB8fAorICAgICAgICAoSVNfUkVNQVBQRURfQUREUkVTUyhwX2RhdGEpICYmIChyZW1hcF90eXBlID09IDB4MykpKQorICAgIHsKKyAgICAgICAgT1RQQy0+T1RQQ19BSEJBRFJfUkVHID0gYmxhY2tfb3JjYV9waHlfYWRkcigodWludDMyX3QpcF9kYXRhKTsKKyNpZiBkZ19jb25maWdFWEVDX01PREUgIT0gTU9ERV9JU19DQUNIRUQKKyAgICB9CisgICAgZWxzZSBpZiAoSVNfQ0FDSEVSQU1fQUREUkVTUyhwX2RhdGEpKQorICAgIHsKKyAgICAgICAgT1RQQy0+T1RQQ19BSEJBRFJfUkVHID0gYmxhY2tfb3JjYV9waHlfYWRkcigodWludDMyX3QpcF9kYXRhKTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBEZXN0aW5hdGlvbiBhZGRyZXNzIGNhbiBvbmx5IHJlc2lkZSBpbiBSQU0gb3IgQ2FjaGUgUkFNLCBidXQgaW4gY2FzZSBvZiByZW1hcHBlZAorICAgICAgICAgKiBhZGRyZXNzLCBSRU1BUF9BRFIwIGNhbm5vdCBiZSAweDYgKENhY2hlIERhdGEgUkFNKQorICAgICAgICAgKi8KKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgfQorCisgICAgT1RQQy0+T1RQQ19DRUxBRFJfUkVHID0gKGNlbGxfb2Zmc2V0IDw8IDEpIHwgKGNlbGxfd29yZCA9PSBIV19PVFBDX1dPUkRfSElHSCk7CisgICAgT1RQQy0+T1RQQ19OV09SRFNfUkVHID0gbnVtX29mX3dvcmRzIC0gMTsKKworICAgIC8qCisgICAgICogU3RhcnQgRE1BIHByb2dyYW1taW5nCisgICAgICovCisgICAgaWYgKHNwYXJlX3Jvd3MpCisgICAgeworICAgICAgICBPVFBDLT5PVFBDX01PREVfUkVHID0KKyAgICAgICAgICAgIEhXX09UUENfRklFTERfVkFMKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9BUFJPRykgfAorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgVVNFX0RNQSwgMSkgfAorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgVVNFX1NQX1JPV1MsIDEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBPVFBDLT5PVFBDX01PREVfUkVHID0KKyAgICAgICAgICAgIEhXX09UUENfRklFTERfVkFMKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9BUFJPRykgfAorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgVVNFX0RNQSwgMSk7CisgICAgfQorCisgICAgd2FpdF9mb3JfYXV0b19kb25lKCk7CisKKyAgICAvKgorICAgICAqIENoZWNrIHJlc3VsdAorICAgICAqLworICAgIGlmIChPVFBDLT5PVFBDX1NUQVRfUkVHICYgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhTVEFULCBQRVJSX1VOQykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKwordm9pZCBod19vdHBjX2RtYV9yZWFkKHVpbnQzMl90ICpwX2RhdGEsIHVpbnQzMl90IGNlbGxfb2Zmc2V0LCBIV19PVFBDX1dPUkQgY2VsbF93b3JkLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bV9vZl93b3JkcywgYm9vbCBzcGFyZV9yb3dzKQoreworICAgIEFTU0VSVF9XQVJOSU5HX09UUF9DTEtfRU5BQkxFRDsKKworICAgIEFTU0VSVF9XQVJOSU5HX09UUENfTU9ERShIV19PVFBDX01PREVfU1RCWSk7CisKKyAgICBBU1NFUlRfQ0VMTF9PRkZTRVRfVkFMSUQoY2VsbF9vZmZzZXQpOworCisgICAgLyoKKyAgICAgKiBNYWtlIHN1cmUgdGhhdCB0aGUgc2l6ZSBpcyB2YWxpZAorICAgICAqLworICAgIEFTU0VSVF9XQVJOSU5HKG51bV9vZl93b3Jkcyk7CisgICAgQVNTRVJUX1dBUk5JTkcobnVtX29mX3dvcmRzIDwgMTYzODQpOworCisgICAgLyoKKyAgICAgKiBTZXQgdXAgRE1BCisgICAgICovCisgICAgdW5zaWduZWQgaW50IHJlbWFwX3R5cGUgPSBSRUdfR0VURihDUkdfVE9QLCBTWVNfQ1RSTF9SRUcsIFJFTUFQX0FEUjApOworCisgICAgaWYgKElTX1NZU1JBTV9BRERSRVNTKHBfZGF0YSkgfHwKKyAgICAgICAgKElTX1JFTUFQUEVEX0FERFJFU1MocF9kYXRhKSAmJiAocmVtYXBfdHlwZSA9PSAweDMpKSkKKyAgICB7CisgICAgICAgIE9UUEMtPk9UUENfQUhCQURSX1JFRyA9IGJsYWNrX29yY2FfcGh5X2FkZHIoKHVpbnQzMl90KXBfZGF0YSk7CisjaWYgZGdfY29uZmlnRVhFQ19NT0RFICE9IE1PREVfSVNfQ0FDSEVECisgICAgfQorICAgIGVsc2UgaWYgKElTX0NBQ0hFUkFNX0FERFJFU1MocF9kYXRhKSkKKyAgICB7CisgICAgICAgIE9UUEMtPk9UUENfQUhCQURSX1JFRyA9IGJsYWNrX29yY2FfcGh5X2FkZHIoKHVpbnQzMl90KXBfZGF0YSk7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogRGVzdGluYXRpb24gYWRkcmVzcyBjYW4gb25seSByZXNpZGUgaW4gUkFNIG9yIENhY2hlIFJBTSwgYnV0IGluIGNhc2Ugb2YgcmVtYXBwZWQKKyAgICAgICAgICogYWRkcmVzcywgUkVNQVBfQURSMCBjYW5ub3QgYmUgMHg2IChDYWNoZSBEYXRhIFJBTSkKKyAgICAgICAgICovCisgICAgICAgIEFTU0VSVF9XQVJOSU5HKDApOworICAgIH0KKworICAgIE9UUEMtPk9UUENfQ0VMQURSX1JFRyA9IChjZWxsX29mZnNldCA8PCAxKSB8IChjZWxsX3dvcmQgPT0gSFdfT1RQQ19XT1JEX0hJR0gpOworICAgIE9UUEMtPk9UUENfTldPUkRTX1JFRyA9IG51bV9vZl93b3JkcyAtIDE7CisKKyAgICAvKgorICAgICAqIFN0YXJ0IERNQSBwcm9ncmFtbWluZworICAgICAqLworICAgIGlmIChzcGFyZV9yb3dzKQorICAgIHsKKyAgICAgICAgT1RQQy0+T1RQQ19NT0RFX1JFRyA9CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfQVJFQUQpIHwKKyAgICAgICAgICAgIEhXX09UUENfRklFTERfVkFMKE1PREUsIFVTRV9ETUEsIDEpIHwKKyAgICAgICAgICAgIEhXX09UUENfRklFTERfVkFMKE1PREUsIFVTRV9TUF9ST1dTLCAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgT1RQQy0+T1RQQ19NT0RFX1JFRyA9CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfQVJFQUQpIHwKKyAgICAgICAgICAgIEhXX09UUENfRklFTERfVkFMKE1PREUsIFVTRV9ETUEsIDEpOworICAgIH0KKworICAgIHdhaXRfZm9yX2F1dG9fZG9uZSgpOworfQorCisKK2Jvb2wgaHdfb3RwY19maWZvX3Byb2coY29uc3QgdWludDMyX3QgKnBfZGF0YSwgdWludDMyX3QgY2VsbF9vZmZzZXQsIEhXX09UUENfV09SRCBjZWxsX3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bV9vZl93b3JkcywgYm9vbCBzcGFyZV9yb3dzKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQQ19NT0RFKEhXX09UUENfTU9ERV9TVEJZKTsKKworICAgIEFTU0VSVF9DRUxMX09GRlNFVF9WQUxJRChjZWxsX29mZnNldCk7CisKKyAgICBBU1NFUlRfV0FSTklOR19OT05aRVJPX1JBTkdFKG51bV9vZl93b3JkcywgMTYzODQpOworCisgICAgLyoKKyAgICAgKiBTZXQgdXAgRklGTworICAgICAqLworICAgIE9UUEMtPk9UUENfQ0VMQURSX1JFRyA9IChjZWxsX29mZnNldCA8PCAxKSB8IChjZWxsX3dvcmQgPT0gSFdfT1RQQ19XT1JEX0hJR0gpOworICAgIE9UUEMtPk9UUENfTldPUkRTX1JFRyA9IG51bV9vZl93b3JkcyAtIDE7CisKKyAgICAvKgorICAgICAqIFBlcmZvcm0gcHJvZ3JhbW1pbmcgdmlhIEZJRk8KKyAgICAgKi8KKyAgICBpZiAoc3BhcmVfcm93cykKKyAgICB7CisgICAgICAgIE9UUEMtPk9UUENfTU9ERV9SRUcgPQorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX0FQUk9HKSB8CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChNT0RFLCBVU0VfU1BfUk9XUywgMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE9UUEMtPk9UUENfTU9ERV9SRUcgPSBIV19PVFBDX0ZJRUxEX1ZBTChNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfQVBST0cpOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fb2Zfd29yZHM7IGkrKykKKyAgICB7CisgICAgICAgIHdoaWxlIChIV19PVFBDX1JFR19HRVRGKFNUQVQsIEZXT1JEUykgPT0gOCkKKyAgICAgICAgICAgIDsKKworICAgICAgICBPVFBDLT5PVFBDX0ZGUFJUX1JFRyA9IHBfZGF0YVtpXTsgLy8gV3JpdGUgRklGTyBkYXRhCisgICAgfQorCisgICAgLyoKKyAgICAgKiBXYWl0IGZvciBjb21wbGV0aW9uCisgICAgICovCisgICAgd2FpdF9mb3JfYXV0b19kb25lKCk7CisKKyAgICAvKgorICAgICAqIENoZWNrIHJlc3VsdAorICAgICAqLworICAgIGlmIChPVFBDLT5PVFBDX1NUQVRfUkVHICYgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhTVEFULCBQRVJSX1VOQykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBod19vdHBjX2ZpZm9fcmVhZCh1aW50MzJfdCAqcF9kYXRhLCB1aW50MzJfdCBjZWxsX29mZnNldCwgSFdfT1RQQ19XT1JEIGNlbGxfd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtX29mX3dvcmRzLCBib29sIHNwYXJlX3Jvd3MpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBBU1NFUlRfV0FSTklOR19PVFBfQ0xLX0VOQUJMRUQ7CisKKyAgICBBU1NFUlRfV0FSTklOR19PVFBDX01PREUoSFdfT1RQQ19NT0RFX1NUQlkpOworCisgICAgQVNTRVJUX0NFTExfT0ZGU0VUX1ZBTElEKGNlbGxfb2Zmc2V0KTsKKworICAgIEFTU0VSVF9XQVJOSU5HX05PTlpFUk9fUkFOR0UobnVtX29mX3dvcmRzLCAxNjM4NCk7CisKKyAgICBpZiAoT1RQQy0+T1RQQ19TVEFUX1JFRyAmIEhXX09UUENfUkVHX0ZJRUxEX01BU0soU1RBVCwgUkVSUk9SKSkKKyAgICB7CisgICAgICAgIEhXX09UUENfUkVHX1NFVEYoU1RBVCwgUkVSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgIDEpOyAvL1RoaXMgYml0IG5lZWQgdG8gYmUgY2xlYXJlZCBtYW51YWxseSAoY2FuIG9ubHkgaGFwcGVuIGlmIGEgcHJldmlvdXMgcmVhZCBoYXMgbm90IGNoZWNrZWQvY2xlYXJlZCBpdCkKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCB1cCBGSUZPCisgICAgICovCisgICAgT1RQQy0+T1RQQ19DRUxBRFJfUkVHID0gKGNlbGxfb2Zmc2V0IDw8IDEpIHwgKGNlbGxfd29yZCA9PSBIV19PVFBDX1dPUkRfSElHSCk7CisgICAgT1RQQy0+T1RQQ19OV09SRFNfUkVHID0gbnVtX29mX3dvcmRzIC0gMTsKKworICAgIC8qCisgICAgICogUGVyZm9ybSByZWFkaW5nIHZpYSBGSUZPCisgICAgICovCisgICAgaWYgKHNwYXJlX3Jvd3MpCisgICAgeworICAgICAgICBPVFBDLT5PVFBDX01PREVfUkVHID0KKyAgICAgICAgICAgIEhXX09UUENfRklFTERfVkFMKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9BUkVBRCkgfAorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgVVNFX1NQX1JPV1MsIDEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBPVFBDLT5PVFBDX01PREVfUkVHID0gSFdfT1RQQ19NT0RFX0FSRUFEOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fb2Zfd29yZHM7IGkrKykKKyAgICB7CisgICAgICAgIHdoaWxlIChIV19PVFBDX1JFR19HRVRGKFNUQVQsIEZXT1JEUykgPT0gMCkKKyAgICAgICAgICAgIDsKKworICAgICAgICBwX2RhdGFbaV0gPSBPVFBDLT5PVFBDX0ZGUFJUX1JFRzsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdhaXQgZm9yIGNvbXBsZXRpb24KKyAgICAgKi8KKyAgICB3YWl0X2Zvcl9hdXRvX2RvbmUoKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgcmVzdWx0CisgICAgICovCisgICAgaWYgKE9UUEMtPk9UUENfU1RBVF9SRUcgJiBIV19PVFBDX1JFR19GSUVMRF9NQVNLKFNUQVQsIFJFUlJPUikpCisgICAgeworICAgICAgICBIV19PVFBDX1JFR19TRVRGKFNUQVQsIFJFUlJPUiwgMSk7IC8vVGhpcyBiaXQgbmVlZCB0byBiZSBjbGVhcmVkIG1hbnVhbGx5CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCit2b2lkIGh3X290cGNfcHJlcGFyZSh1aW50MzJfdCBudW1fb2ZfYnl0ZXMpCit7CisgICAgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQQ19NT0RFKEhXX09UUENfTU9ERV9TVEJZKTsKKworICAgIEFTU0VSVF9XQVJOSU5HX05PTlpFUk9fUkFOR0UobnVtX29mX2J5dGVzLCA2NTUzNik7CisKKyAgICAvKgorICAgICAqIFNldCB1cCBpbWFnZSBzaXplCisgICAgICovCisgICAgT1RQQy0+T1RQQ19OV09SRFNfUkVHID0gKChudW1fb2ZfYnl0ZXMgKyAzKSA+PiAyKSAtIDE7CisKKyAgICAvKgorICAgICAqIEVuYWJsZSBPVFBfQ09QWQorICAgICAqLworICAgIENSR19UT1AtPlNZU19DVFJMX1JFRyB8PSAxIDw8IFJFR19QT1MoQ1JHX1RPUCwgU1lTX0NUUkxfUkVHLCBPVFBfQ09QWSk7Cit9CisKKwordm9pZCBod19vdHBjX2NhbmNlbF9wcmVwYXJlKHZvaWQpCit7CisgICAgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQQ19NT0RFKEhXX09UUENfTU9ERV9TVEJZKTsKKworICAgIC8qCisgICAgICogRGlzYWJsZSBPVFBfQ09QWQorICAgICAqLworICAgIENSR19UT1AtPlNZU19DVFJMX1JFRyAmPSB+UkVHX01TSyhDUkdfVE9QLCBTWVNfQ1RSTF9SRUcsIE9UUF9DT1BZKTsKK30KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBURVNUIEZVTkNUSU9OQUxJVFkKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCisvKioKKyAqIFxicmllZiBFeGVjdXRpb24gb2YgdGhlIHRlc3QuCisgKgorICogXHJldHVybiBUaGUgdGVzdCByZXN1bHQuCisgKiAgICAgICAgIDx1bD4KKyAqICAgICAgICAgICAgIDxsaT4gMCwgaWYgdGhlIHRlc3Qgc3VjY2VlZGVkCisgKiAgICAgICAgICAgICA8bGk+IDEsIGlmIHRoZSB0ZXN0IDEgZmFpbGVkCisgKiAgICAgICAgIDwvdWw+CisgKgorICovCitzdGF0aWMgaW50IGh3X290cGNfY29yZV90ZXN0KGludCBtb2RlKQoreworICAgIEFTU0VSVF9XQVJOSU5HX09UUENfTU9ERShIV19PVFBDX01PREVfU1RCWSk7CisKKyAgICAvKgorICAgICAqIFB1dCBPVFBDIGluIHRoZSBwcm9wZXIgdGVzdCBtb2RlCisgICAgICovCisgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBNT0RFLCBtb2RlKTsKKworICAgIC8qCisgICAgICogV2FpdCBlbmQgb2YgdGVzdAorICAgICAqLworICAgIHdoaWxlICghKE9UUEMtPk9UUENfU1RBVF9SRUcgJiBIV19PVFBDX1JFR19GSUVMRF9NQVNLKFNUQVQsIFRSRFkpKSkKKyAgICAgICAgOworCisKKyAgICAvKgorICAgICAqIENoZWNrIHJlc3VsdAorICAgICAqLworICAgIGlmIChPVFBDLT5PVFBDX1NUQVRfUkVHICYgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhTVEFULCBURVJST1IpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworaW50IGh3X290cGNfYmxhbmsodm9pZCkKK3sKKyAgICByZXR1cm4gaHdfb3RwY19jb3JlX3Rlc3QoSFdfT1RQQ19NT0RFX1RCTEFOSyk7Cit9CisKKworaW50IGh3X290cGNfdGRlYyh2b2lkKQoreworICAgIHJldHVybiBod19vdHBjX2NvcmVfdGVzdChIV19PVFBDX01PREVfVERFQyk7Cit9CisKKworaW50IGh3X290cGNfdHdyKHZvaWQpCit7CisgICAgcmV0dXJuIGh3X290cGNfY29yZV90ZXN0KEhXX09UUENfTU9ERV9UV1IpOworfQorCisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfT1RQQyAqLworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19xc3BpLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfcXNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZWYyOTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfcXNwaS5jCkBAIC0wLDAgKzEsMTk1IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBRU1BJCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod19xc3BpLmMKKyAqCisgKiBAYnJpZWYgSW1wbGVtZW50YXRpb24gb2YgdGhlIFFTUEkgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19RU1BJCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJod19xc3BpLmgiCisKK19fUkVUQUlORURfUlcgdWludDhfdCBkdW1teV9udW1bXSA9IHsgMCwgMSwgMiwgMCwgMyB9OworCisjaWYgKGRnX2NvbmZpZ0ZMQVNIX1BPV0VSX0RPV04gPT0gMSkKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oInRleHRfcmV0YWluZWQiKSkpCisjZW5kaWYKK3ZvaWQgaHdfcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkKKyAgICB7CisgICAgY2FzZSBIV19RU1BJX0JVU19NT0RFX1NJTkdMRToKKyAgICAgICAgUVNQSUMtPlFTUElDX0NUUkxCVVNfUkVHID0gUkVHX01TSyhRU1BJQywgUVNQSUNfQ1RSTEJVU19SRUcsIFFTUElDX1NFVF9TSU5HTEUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSFdfUVNQSV9CVVNfTU9ERV9EVUFMOgorICAgICAgICBRU1BJQy0+UVNQSUNfQ1RSTEJVU19SRUcgPSBSRUdfTVNLKFFTUElDLCBRU1BJQ19DVFJMQlVTX1JFRywgUVNQSUNfU0VUX0RVQUwpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSFdfUVNQSV9CVVNfTU9ERV9RVUFEOgorICAgICAgICBRU1BJQy0+UVNQSUNfQ1RSTEJVU19SRUcgPSBSRUdfTVNLKFFTUElDLCBRU1BJQ19DVFJMQlVTX1JFRywgUVNQSUNfU0VUX1FVQUQpOworICAgICAgICBod19xc3BpX3NldF9pbzJfb3V0cHV0KGZhbHNlKTsKKyAgICAgICAgaHdfcXNwaV9zZXRfaW8zX291dHB1dChmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworX19hdHRyaWJ1dGVfXygoc2VjdGlvbigidGV4dF9yZXRhaW5lZCIpKSkgdm9pZCBod19xc3BpX3NldF9hdXRvbW9kZShib29sIGF1dG9tb2RlKQoreworICAgIGlmIChhdXRvbW9kZSkKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGJ1cnN0X2NtZF9hID0gUVNQSUMtPlFTUElDX0JVUlNUQ01EQV9SRUc7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGJ1cnN0X2NtZF9iID0gUVNQSUMtPlFTUElDX0JVUlNUQ01EQl9SRUc7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IHN0YXR1c19jbWQgPSBRU1BJQy0+UVNQSUNfU1RBVFVTQ01EX1JFRzsKKyAgICAgICAgY29uc3QgdWludDMyX3QgZXJhc2VfY21kX2IgPSBRU1BJQy0+UVNQSUNfRVJBU0VDTURCX1JFRzsKKyAgICAgICAgY29uc3QgdWludDMyX3QgYnVyc3RicmsgPSBRU1BJQy0+UVNQSUNfQlVSU1RCUktfUkVHOworCisgICAgICAgIGlmIChHRVRCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQV9SRUcsIGJ1cnN0X2NtZF9hLCBRU1BJQ19JTlNUX1RYX01EKSA9PSBIV19RU1BJX0JVU19NT0RFX1FVQUQgfHwKKyAgICAgICAgICAgIEdFVEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURBX1JFRywgYnVyc3RfY21kX2EsIFFTUElDX0FEUl9UWF9NRCkgPT0gSFdfUVNQSV9CVVNfTU9ERV9RVUFEIHx8CisgICAgICAgICAgICBHRVRCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQV9SRUcsIGJ1cnN0X2NtZF9hLCBRU1BJQ19ETVlfVFhfTUQpID09IEhXX1FTUElfQlVTX01PREVfUVVBRCB8fAorICAgICAgICAgICAgR0VUQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREFfUkVHLCBidXJzdF9jbWRfYSwgUVNQSUNfRVhUX1RYX01EKSA9PSBIV19RU1BJX0JVU19NT0RFX1FVQUQgfHwKKyAgICAgICAgICAgIEdFVEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgYnVyc3RfY21kX2IsIFFTUElDX0RBVF9SWF9NRCkgPT0gSFdfUVNQSV9CVVNfTU9ERV9RVUFEIHx8CisgICAgICAgICAgICBHRVRCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIGJ1cnN0X2NtZF9iLCBRU1BJQ19EQVRfUlhfTUQpID09IEhXX1FTUElfQlVTX01PREVfUVVBRCB8fAorICAgICAgICAgICAgR0VUQklUUzMyKFFTUElDLCBRU1BJQ19TVEFUVVNDTURfUkVHLCBzdGF0dXNfY21kLCBRU1BJQ19SU1RBVF9SWF9NRCkgPT0gSFdfUVNQSV9CVVNfTU9ERV9RVUFEIHx8CisgICAgICAgICAgICBHRVRCSVRTMzIoUVNQSUMsIFFTUElDX1NUQVRVU0NNRF9SRUcsIHN0YXR1c19jbWQsIFFTUElDX1JTVEFUX1RYX01EKSA9PSBIV19RU1BJX0JVU19NT0RFX1FVQUQgfHwKKyAgICAgICAgICAgIEdFVEJJVFMzMihRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgZXJhc2VfY21kX2IsIFFTUElDX0VSU19UWF9NRCkgPT0gSFdfUVNQSV9CVVNfTU9ERV9RVUFEIHx8CisgICAgICAgICAgICBHRVRCSVRTMzIoUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIGVyYXNlX2NtZF9iLCBRU1BJQ19XRU5fVFhfTUQpID09IEhXX1FTUElfQlVTX01PREVfUVVBRCB8fAorICAgICAgICAgICAgR0VUQklUUzMyKFFTUElDLCBRU1BJQ19FUkFTRUNNREJfUkVHLCBlcmFzZV9jbWRfYiwgUVNQSUNfU1VTX1RYX01EKSA9PSBIV19RU1BJX0JVU19NT0RFX1FVQUQgfHwKKyAgICAgICAgICAgIEdFVEJJVFMzMihRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgZXJhc2VfY21kX2IsIFFTUElDX1JFU19UWF9NRCkgPT0gSFdfUVNQSV9CVVNfTU9ERV9RVUFEIHx8CisgICAgICAgICAgICBHRVRCSVRTMzIoUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIGVyYXNlX2NtZF9iLCBRU1BJQ19FQURfVFhfTUQpID09IEhXX1FTUElfQlVTX01PREVfUVVBRCB8fAorICAgICAgICAgICAgR0VUQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVEJSS19SRUcsIGJ1cnN0YnJrLCBRU1BJQ19CUktfVFhfTUQpID09IEhXX1FTUElfQlVTX01PREVfUVVBRCkKKyAgICAgICAgeworICAgICAgICAgICAgaHdfcXNwaV9zZXRfaW8yX291dHB1dChmYWxzZSk7CisgICAgICAgICAgICBod19xc3BpX3NldF9pbzNfb3V0cHV0KGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEhXX1FTUElDX1JFR19TRVRGKENUUkxNT0RFLCBBVVRPX01ELCBhdXRvbW9kZSk7Cit9CisKK3ZvaWQgaHdfcXNwaV9zZXRfd3JhcHBpbmdfYnVyc3RfaW5zdHJ1Y3Rpb24odWludDhfdCBpbnN0LCBIV19RU1BJX1dSQVBfTEVOIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9XUkFQX1NJWkUgc2l6ZSkKK3sKKyAgICBIV19RU1BJQ19SRUdfU0VURihCVVJTVENNREEsIElOU1RfV0IsIGluc3QpOworICAgIFFTUElDLT5RU1BJQ19CVVJTVENNREJfUkVHID0KKyAgICAgICAgKFFTUElDLT5RU1BJQ19CVVJTVENNREJfUkVHICYKKyAgICAgICAgIH4oUkVHX01TSyhRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfV1JBUF9TSVpFKSB8CisgICAgICAgICAgIFJFR19NU0soUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX1dSQVBfTEVOKSkpIHwKKyAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19XUkFQX1NJWkUsIHNpemUpIHwKKyAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19XUkFQX0xFTiwgbGVuKSB8CisgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfV1JBUF9NRCwgMSk7Cit9CisKK3ZvaWQgaHdfcXNwaV9zZXRfZHVtbXlfYnl0ZXNfY291bnQodWludDhfdCBjb3VudCkKK3sKKyAgICBpZiAoY291bnQgPT0gMykKKyAgICB7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKEJVUlNUQ01EQiwgRE1ZX0ZPUkNFLCAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgUVNQSUMtPlFTUElDX0JVUlNUQ01EQl9SRUcgPQorICAgICAgICAgICAgKFFTUElDLT5RU1BJQ19CVVJTVENNREJfUkVHICYKKyAgICAgICAgICAgICB+KFJFR19NU0soUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX0RNWV9GT1JDRSkgfAorICAgICAgICAgICAgICAgUkVHX01TSyhRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfRE1ZX05VTSkpKSB8CisgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX0RNWV9OVU0sCisgICAgICAgICAgICAgICAgICAgZHVtbXlfbnVtW2NvdW50XSk7CisgICAgfQorfQorCit2b2lkIGh3X3FzcGlfZXJhc2VfYmxvY2sodWludDMyX3QgYWRkcikKK3sKKyAgICBpZiAoIWh3X3FzcGlfZ2V0X2F1dG9tb2RlKCkpCisgICAgeworICAgICAgICBod19xc3BpX3NldF9hdXRvbW9kZSh0cnVlKTsKKyAgICB9CisKKyAgICAvLyBXYWl0IGZvciBwcmV2aW91cyBlcmFzZSB0byBlbmQKKyAgICB3aGlsZSAoaHdfcXNwaV9nZXRfZXJhc2Vfc3RhdHVzKCkgIT0gMCkKKyAgICB7CisgICAgfQorCisgICAgaWYgKGh3X3FzcGlfZ2V0X2FkZHJlc3Nfc2l6ZSgpID09IEhXX1FTUElfQUREUl9TSVpFXzMyKQorICAgIHsKKyAgICAgICAgYWRkciA+Pj0gMTI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFkZHIgPj49IDQ7CisgICAgfQorCisgICAgLy8gU2V0dXAgZXJhc2UgYmxvY2sgcGFnZQorICAgIEhXX1FTUElDX1JFR19TRVRGKEVSQVNFQ1RSTCwgRVJTX0FERFIsIGFkZHIpOworICAgIC8vIEZpcmUgZXJhc2UKKyAgICBIV19RU1BJQ19SRUdfU0VURihFUkFTRUNUUkwsIEVSQVNFX0VOLCAxKTsKK30KKwordm9pZCBod19xc3BpX3NldF9wYWRzKEhXX1FTUElfU0xFV19SQVRFIHJhdGUsIEhXX1FTUElfRFJJVkVfQ1VSUkVOVCBjdXJyZW50KQoreworICAgIFFTUElDLT5RU1BJQ19HUF9SRUcgPQorICAgICAgICBCSVRTMTYoUVNQSUMsIFFTUElDX0dQX1JFRywgUVNQSUNfUEFEU19TTEVXLCByYXRlKSB8CisgICAgICAgIEJJVFMxNihRU1BJQywgUVNQSUNfR1BfUkVHLCBRU1BJQ19QQURTX0RSViwgY3VycmVudCk7Cit9CisKK3ZvaWQgaHdfcXNwaV9pbml0KGNvbnN0IHFzcGlfY29uZmlnICpjZmcpCit7CisgICAgaHdfcXNwaV9lbmFibGVfY2xvY2soKTsKKyAgICBod19xc3BpX3NldF9hdXRvbW9kZShmYWxzZSk7CisgICAgaHdfcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUpOworICAgIGh3X3FzcGlfc2V0X2lvMl9vdXRwdXQodHJ1ZSk7CisgICAgaHdfcXNwaV9zZXRfaW8yKDEpOworICAgIGh3X3FzcGlfc2V0X2lvM19vdXRwdXQodHJ1ZSk7CisgICAgaHdfcXNwaV9zZXRfaW8zKDEpOworCisgICAgaWYgKGNmZykKKyAgICB7CisgICAgICAgIGh3X3FzcGlfc2V0X2FkZHJlc3Nfc2l6ZShjZmctPmFkZHJlc3Nfc2l6ZSk7CisgICAgICAgIGh3X3FzcGlfc2V0X2Nsb2NrX21vZGUoY2ZnLT5pZGxlX2Nsb2NrKTsKKyAgICAgICAgaHdfcXNwaV9zZXRfcmVhZF9zYW1wbGluZ19lZGdlKGNmZy0+c2FtcGxpbmdfZWRnZSk7CisgICAgfQorfQorCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX1FTUEkgKi8KKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfcmYuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19yZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMmM2YzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfcmYuYwpAQCAtMCwwICsxLDE2MDAgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIFJGCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUKKyAqCisgKiBAYnJpZWYgUmFkaW8gbW9kdWxlIChSRikgTG93IExldmVsIERyaXZlciBBUEkgZGVmaW5pdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZiBkZ19jb25maWdVU0VfSFdfUkYKKworCisjaW5jbHVkZSAiaHdfcmYuaCIKKyNpbmNsdWRlICJzZGtfZGVmcy5oIgorI2luY2x1ZGUgImh3X2NwbS5oIgorI2luY2x1ZGUgImh3X2dwaW8uaCIKKworI2lmIChkZ19jb25maWdTWVNURU1WSUVXKQorIyAgaW5jbHVkZSAiU0VHR0VSX1NZU1ZJRVdfRnJlZVJUT1MuaCIKKyNlbHNlCisjICBkZWZpbmUgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VOVEVSKCkKKyMgIGRlZmluZSBTRUdHRVJfU1lTVEVNVklFV19JU1JfRVhJVCgpCisjZW5kaWYKKworI2lmIGRnX2NvbmZpZ1VTRV9IV19DT0VYID09IDEKKyNpbmNsdWRlICJod19jb2V4LmgiCisjZW5kaWYKKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyNkZWZpbmUgS01PREVfQUxQSEFfQUNBRF9QUkVGIDB4MDQxMAorI2RlZmluZSBLTU9ERV9BTFBIQV9BQV9QUkVGIDB4MDQxNgorCisjZGVmaW5lIERGMV9EQUNfQ0hFQ0tfVkFMVUUgMzIKKyNkZWZpbmUgREYxX0RHQUlOX1RIUjAgMTYKKyNkZWZpbmUgREYxX0RHQUlOX1RIUjEgMjQKKyNkZWZpbmUgREYxX0RHQUlOX1RIUjIgMzIKKyNlbmRpZgorCisvKiBVc2VyIGNhbGxiYWNrcyAoZGVmaW5lZCBhcyB3ZWFrIGZ1bmN0aW9ucykgZGVmaW5pdGlvbnMgKi8KK2Jvb2wgaHdfcmZfcHJlb2ZmX2NiKHZvaWQpIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK3ZvaWQgaHdfcmZfcG9zdGNvbmZfY2Iodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaykpOwordm9pZCBod19yZl9wcmVjYWxpYl9jYih2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7Cit2b2lkIGh3X3JmX3Bvc3RjYWxpYl9jYih2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7Cit2b2lkIGh3X3JmX2FwcGx5X3Rjc19jYih2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7Cit1aW50NjRfdCBod19yZl9nZXRfc3RhcnRfaWZmX3RpbWUodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaykpOworYm9vbCBod19yZl9jaGVja19pZmZfdGltZW91dCh1aW50NjRfdCBzdGFydF90aW1lKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CisKKyNpZiBkZ19jb25maWdGRU0gPT0gRkVNX1NLWTY2MTEyXzExCisjaW5jbHVkZSAiaHdfZmVtX3NreTY2MTEyLTExLmgiCisjZW5kaWYKKwordHlwZWRlZiBlbnVtIHJmX3N0YXRlc19lCit7CisgICAgUkZfU1RfT0ZGID0gMCwKKyAgICBSRl9TVF9PTiwKKyAgICBSRl9TVF9DT05GSUcsCisgICAgUkZfU1RfV0FJVF9ORVhUMSwKKyAgICBSRl9TVF9XQUlUX05FWFQyCit9IHJmX3N0YXRlc19lOworCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQordHlwZWRlZiBlbnVtCit7CisgICAgSUZGX01PREVfQ1RSTF9CTEUgPSAwLAorICAgIElGRl9NT0RFX0NUUkxfRlRERiA9IDEsCisgICAgSUZGX01PREVfQ1RSTF9DT01CTyA9IDIKK30gaWZmX21vZGVfY3RybF9lOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBJRkZfTU9ERV9PVlJfQkxFID0gMSwKKyAgICBJRkZfTU9ERV9PVlJfRlRERiA9IDIKK30gaWZmX21vZGVfb3ZyX2U7CisKK3R5cGVkZWYgZW51bQoreworICAgIE1HQ19NT0RFX0NUUkxfQkxFX0dBVVNTREFDID0gMCwKKyAgICBNR0NfTU9ERV9DVFJMX0JMRV9UWERBQyA9IDEsCisgICAgTUdDX01PREVfQ1RSTF9GVERGID0gMgorfSBtZ2NfbW9kZV9jdHJsX2U7CisKKyNlbmRpZgorCisvKiogUkYgc3RhdHVzIGJpdG1hcC4gKi8KK3R5cGVkZWYgdWludDhfdCByZl9yZXF1ZXN0X3Q7CisKKy8qKiBJbmRpY2F0ZXMgd2hldGhlciBGVERGIE1BQyBoYXMgdHVybmVkIFJGIG9uLiAqLworI2RlZmluZSBSRl9SRVFVRVNUX0ZUREZfT04gICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorCisvKiogSW5kaWNhdGVzIHdoZXRoZXIgQkxFIE1BQyBoYXMgdHVybmVkIFJGIG9uLiAqLworI2RlZmluZSBSRl9SRVFVRVNUX0JMRV9PTiAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisKKworCitzdGF0aWMgcmZfcmVxdWVzdF90IHJmX3JlcXVlc3QgX19SRVRBSU5FRDsKK3N0YXRpYyByZl9zdGF0ZXNfZSByZl9zdGF0ZSBfX1JFVEFJTkVEOworaHdfcmZfdHhfcG93ZXJfbHV0c190IHJmX3R4X3Bvd2VyX2x1dHMgX19SRVRBSU5FRDsKKworLyogVmFyaWFibGVzIHVzZWQgZm9yIGhvbGRpbmcgcHJldmlvdXMgcmVnIHZhbHVlcyBkdXJpbmcgZ2FpbiBjYWxpYiAqLworc3RhdGljIHVpbnQzMl90IHJmX2NudHJsX3RpbWVyMTRfcmVnX3NldF9vZmZzZXQ7CitzdGF0aWMgdWludDMyX3QgcmZfY250cmxfdGltZXJfN19yZWdfdmFsdWU7CitzdGF0aWMgdWludDMyX3QgcmZfY2FsX2N0cmxfcmVnX3ZhbHVlOworc3RhdGljIHVpbnQzMl90IHJmX21nYWluX2N0cmxfcmVnX3ZhbHVlOworc3RhdGljIHVpbnQzMl90IHJmX21nYWluX2N0cmwyX3JlZ192YWx1ZTsKK3N0YXRpYyB1aW50MTZfdCByZl9zeW50aF9jdHJsMl9ibGVfcmVnX3ZhbHVlOworc3RhdGljIHVpbnQxNl90IHJmX3N5bnRoX2N0cmwyX2Z0ZGZfcmVnX3ZhbHVlOworCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorc3RhdGljIHVpbnQ4X3Qga21vZGFfY2FsIF9fUkVUQUlORUQ7CitfX1JFVEFJTkVEX1JXIHN0YXRpYyB1aW50MzJfdCBnZ19jYWxfbW9kaWZpZWQgPSAxMjg7CitzdGF0aWMgdWludDMyX3QgcmZfZW5hYmxlX2NvbmZpZzE0X2JsZV9yZWdfdmFsdWU7CitzdGF0aWMgdWludDMyX3QgcmZfZW5hYmxlX2NvbmZpZzE1X2JsZV9yZWdfdmFsdWU7CitzdGF0aWMgdWludDMyX3QgcmZfZW5hYmxlX2NvbmZpZzE0X2Z0ZGZfcmVnX3ZhbHVlOworc3RhdGljIHVpbnQzMl90IHJmX2VuYWJsZV9jb25maWcxNV9mdGRmX3JlZ192YWx1ZTsKK3N0YXRpYyB1aW50MTZfdCByZl9ibWN3X3JlZ192YWx1ZTsKK3N0YXRpYyB1aW50MTZfdCByZl92Y29jYWxfY3RybF9yZWdfdmFsdWU7CisjZWxzZQorc3RhdGljIHVpbnQxNl90IHJmX2VuYWJsZV9jb25maWcxNF9yZWdfdmFsdWU7CitzdGF0aWMgdWludDE2X3QgcmZfZW5hYmxlX2NvbmZpZzE1X3JlZ192YWx1ZTsKK3N0YXRpYyB1aW50MTZfdCByZl9vdmVycnVsZV9yZWdfdmFsdWU7CitzdGF0aWMgdWludDE2X3QgcmZfZW5hYmxlX2NvbmZpZzIzX2JsZV9yZWdfdmFsdWU7CitzdGF0aWMgdWludDE2X3QgcmZfZW5hYmxlX2NvbmZpZzIzX2Z0ZGZfcmVnX3ZhbHVlOworc3RhdGljIHVpbnQxNl90IHJmX2VuYWJsZV9jb25maWc0NV9ibGVfcmVnX3ZhbHVlOworc3RhdGljIHVpbnQxNl90IHJmX2VuYWJsZV9jb25maWc0NV9mdGRmX3JlZ192YWx1ZTsKKyNlbmRpZgorYm9vbCBod19yZl9zeXN0ZW1faW5pdCh2b2lkKQoreworICAgIGJvb2wgY2FsaWJfc3VjY2VlZGVkOworCisgICAgcmZfc3RhdGUgPSBSRl9TVF9PRkY7CisgICAgcmZfcmVxdWVzdCA9IDA7CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisKKyAgICAvKiBJbml0aWFsbHkgc2V0IGttb2RhX2NhbCB0byBpdHMgcHJlZmVycmVkIHNldHRpbmdzIHZhbHVlICovCisgICAgaWYgKChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BKQorICAgICAgICB8fCAoKGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OID09IDEpCisgICAgICAgICAgICAmJiAoQ0hJUF9JU19BRSkpKQorICAgIHsKKyAgICAgICAga21vZGFfY2FsID0gS01PREVfQUxQSEFfQUNBRF9QUkVGICYgUkVHX01TSyhQTExESUcsIFJGX0tNT0RfQUxQSEFfUkVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtNT0RfQUxQSEFfQkxFKTsKKyAgICB9CisKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnQ09FWF9FTkFCTEVfQ09ORklHID09IDEKKyAgICBod19jb2V4X2luaXQoKTsKKyNlbmRpZgorICAgIC8qIEFwcGx5IHRjcyBhbmQgcHJlZmVycmVkIHNldHRpbmdzICovCisgICAgaHdfcmZfYXBwbHlfdGNzX2NiKCk7CisgICAgaHdfcmZfc2V0X3JlY29tbWVuZGVkX3NldHRpbmdzKCk7CisKKyAgICAvKiBQZXJmb3JtIGNhbGlicmF0aW9uICovCisgICAgY2FsaWJfc3VjY2VlZGVkID0gaHdfcmZfY2FsaWJyYXRpb24oKTsKKworI2lmbmRlZiBDT05GSUdfVVNFX0JMRQorICAgIC8qIEZvcmNlIGRpc2FibGUgdGhlIGJsZSwgbWFraW5nIHRoZSBmdGRmIHRoZSBvbmx5IHJlcXVlc3RlciAqLworICAgIFJFR19TRVRfQklUKENSR19UT1AsIEZPUkNFX1NMRUVQX1JFRywgRk9SQ0VfQkxFX1NMRUVQKTsKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfVVNFX0ZUREYKKyAgICAvKiBGb3JjZSBkaXNhYmxlIHRoZSBmdGRmLCBtYWtpbmcgdGhlIGJsZSB0aGUgb25seSByZXF1ZXN0ZXIgKi8KKyAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBGT1JDRV9TTEVFUF9SRUcsIEZPUkNFX0ZUREZfU0xFRVApOworI2VuZGlmCisKKyAgICAvKiBTeXN0ZW0gaXMgcmVhZHkgdG8gYmUgdXNlZCAqLworICAgIHJldHVybiBjYWxpYl9zdWNjZWVkZWQ7Cit9CisKKy8qKgorICogXGJyaWVmIFByZWZlcnJlZCBzZXR0aW5ncyA2ODAgcmFkaW8KKyAqCisgKi8KK3ZvaWQgaHdfcmZfc2V0X3JlY29tbWVuZGVkX3NldHRpbmdzKHZvaWQpCit7CisKKyAgICAvLyBQcmVmZXJyZWQgU2V0dGluZ3MgRmlsZSBmb3IgRENUTU9OCisgICAgLy8gRGV2aWNlICAgICAgICAgICAgIDogREExNDY4MEFBCisgICAgLy8gUGFja2FnZSAgICAgICAgICAgIDogQWxsIHBhY2thZ2VzLCBubyBkZXBlbmRlbmN5IG9uIHBhY2thZ2UuCisgICAgLy8gTGFzdCBjaGFuZ2UgZGF0ZSAgIDogSnVuZSAxOCwgMjAxNSAtIDE4OjAwOjQ4CisgICAgLy8gTGFzdCBjaGFuZ2UgaXRlbSAgIDogUmVnaXN0ZXI6IFJGX0tNT0RfQUxQSEFfUkVHLCBGaWVsZDogS01PRF9BTFBIQV9GVERGLCBWYWx1ZTogMHgxMAorICAgIC8vIEZpbGUgZGF0ZSAgICAgICAgICA6IEp1bmUgMTgsIDIwMTUgLSAxOToxNjoxNgorCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgIGlmICgoKGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OID09IDEpICYmIChDSElQX0lTX0FFKSkKKyAgICAgICAgfHwgKEJMQUNLX09SQ0FfVEFSR0VUX0lDID09IEJMQUNLX09SQ0FfSUNfVkVSU0lPTihBLCBFKSkpCisgICAgeworICAgICAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0FGQ19DVFJMX1JFRywgICAgICAgICAgICAgICAgICAgIDB4MDAzMCwgMHgwMEY1KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9BR0NfQ1RSTDJfUkVHLCAgICAgICAgICAgICAgICAgICAweDAwM0YsIDB4MDA0OSk7CisKKyAgICAgICAgLy8gTVAKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9BR0NfQ1RSTDFfUkVHLCAgICAgICAgICAgICAgICAgICAweDAwN0YsIDB4OTUwQSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzEwX1JFRywgICAgICAgMHhGRjAwLCAweDE4MkUpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8xMV9SRUcsICAgICAgIDB4RkYwMCwgMHgxODMwKTsKKyAgICAgICAgUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfMTJfUkVHID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0M7CisgICAgICAgIFJGQ1VfUE9XRVItPlJGX0NOVFJMX1RJTUVSXzEzX1JFRyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2M0M7CisgICAgICAgIFJGQ1VfUE9XRVItPlJGX0NOVFJMX1RJTUVSXzE1X1JFRyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4M0M7CisgICAgICAgIFJGQ1VfUE9XRVItPlJGX0NOVFJMX1RJTUVSXzE2X1JFRyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMDc7CisgICAgICAgIFJGQ1VfUE9XRVItPlJGX0NOVFJMX1RJTUVSXzE3X1JFRyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxMDsKKyAgICAgICAgUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfMThfUkVHID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4OworICAgICAgICBSRkNVX1BPV0VSLT5SRl9DTlRSTF9USU1FUl8xOV9SRUcgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTg7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzFfUkVHLCAgICAgICAgMHhGRjAwLCAweDFFMDApOworICAgICAgICBSRkNVX1BPV0VSLT5SRl9DTlRSTF9USU1FUl8yMF9SRUcgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDg7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzIxX1JFRywgICAgICAgMHgwMEZGLCAweDQ0KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMjJfUkVHLCAgICAgICAweDAwRkYsIDB4NDApOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8yM19SRUcsICAgICAgIDB4MDBGRiwgMHg1Mik7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzJfUkVHLCAgICAgICAgMHhGRjAwLCAweDFCMDgpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8zX1JFRywgICAgICAgIDB4RkYwMCwgMHgxQTEwKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfNV9SRUcsICAgICAgICAweEZGMDAsIDB4MTgxOCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzdfUkVHLCAgICAgICAgMHhGRjAwLCAweDE4MTgpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9DUF9DVFJMX0JMRV9SRUcsICAgICAgICAgICAgICAgIDB4MEYwRiwgMHg3NTc1KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfQ1BfQ1RSTF9GVERGX1JFRywgICAgICAgICAgICAgICAweDBGMEYsIDB4NzU3NSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKERFTSwgUkZfRENfT0ZGU0VUX0NUUkwyX1JFRywgICAgICAgICAgICAgMHgwMjAyLCAweDAxRDApOworICAgICAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0RDX09GRlNFVF9DVFJMM19SRUcsICAgICAgICAgICAgIDB4MDBGRiwgMHhEQ0U0KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfRElWX0lRX1RYX1JFRywgICAgICAgICAgICAgICAgICAweDAwRkYsIDB4MDBBMSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcxMV9CTEVfUkVHLCAgMHgwMDFGLCAweDAwNTQpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMTFfRlRERl9SRUcsIDB4MDAxRiwgMHgwMDU0KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzEyX0JMRV9SRUcsICAweDAwMUYsIDB4MDA3MSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcxMl9GVERGX1JFRywgMHgwMDFGLCAweDAwNzEpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMTVfQkxFX1JFRywgIDB4MDNFMCwgMHgwMUUwKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzE1X0ZUREZfUkVHLCAweDAzRTAsIDB4MDFFMCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcxOV9CTEVfUkVHLCAgMHgwMDFGLCAweDAwNTQpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMTlfRlRERl9SRUcsIDB4MDAxRiwgMHgwMDU0KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzIwX0JMRV9SRUcsICAweDAwMUYsIDB4MDA3MSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyMF9GVERGX1JFRywgMHgwMDFGLCAweDAwNzEpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMjFfQkxFX1JFRywgIDB4MDAxRiwgMHgwMDcxKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzIxX0ZUREZfUkVHLCAweDAwMUYsIDB4MDA3MSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyMl9CTEVfUkVHLCAgMHgwMDFGLCAweDAwNzEpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMjJfRlRERl9SRUcsIDB4MDAxRiwgMHgwMDcxKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzI0X0ZUREZfUkVHLCAweDAzRTAsIDB4MDFBMCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyNV9GVERGX1JFRywgMHgwM0UwLCAweDAwNjApOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMjdfQkxFX1JFRywgIDB4MDAxRiwgMHgwMDcxKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzI3X0ZUREZfUkVHLCAweDAwMUYsIDB4MDA3MSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyOF9CTEVfUkVHLCAgMHgwMDFGLCAweDAwQjIpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMjhfRlRERl9SRUcsIDB4MDAxRiwgMHgwMEIyKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzI5X0JMRV9SRUcsICAweDAwMUYsIDB4MDBCMik7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyOV9GVERGX1JFRywgMHgwMDFGLCAweDAwQjIpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMzNfQkxFX1JFRywgIDB4MDAxRiwgMHgwMDcxKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzMzX0ZUREZfUkVHLCAweDAwMUYsIDB4MDA3MSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUczNF9CTEVfUkVHLCAgMHgwMDFGLCAweDAwRjMpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMzRfRlRERl9SRUcsIDB4MDAxRiwgMHgwMEYzKTsKKyAgICAgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQyX0JMRV9SRUcgPSAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEwOworICAgICAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDJfRlRERl9SRUcgPSAgICAgICAgICAgICAgICAgICAgICAgMHgyMTA7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHLCAgMHgwMDFGLCAweDAwMTUpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUcsIDB4MDAxRiwgMHgwMDE1KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzQ3X0JMRV9SRUcsICAweDAwMUYsIDB4MDAxNik7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUc0N19GVERGX1JFRywgMHgwMDFGLCAweDAwMTYpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFRywgIDB4MDAxRiwgMHgwMDE3KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzQ4X0ZUREZfUkVHLCAweDAwMUYsIDB4MDAxNyk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKERFTSwgUkZfRlRERl9DVFJMMV9SRUcsICAgICAgICAgICAgICAgICAgMHhDMDAwLCAweDg3QzApOworICAgICAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0ZUREZfQ1RSTDJfUkVHLCAgICAgICAgICAgICAgICAgIDB4MDcwMCwgMHg2ODEwKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9GVERGX0NUUkw1X1JFRywgICAgICAgICAgICAgICAgICAweDFGRkYsIDB4NDcwOCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKERFTSwgUkZfRlRERl9MT09QX0dBSU5fRFNfUkVHLCAgICAgICAgICAgMHgwMEZGLCAweDAwNjApOworICAgICAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0ZUREZfTE9PUF9HQUlOX1BEX1JFRywgICAgICAgICAgIDB4MDBGRiwgMHgwMDYwKTsKKyAgICAgICAgUExMRElHLT5SRl9LTU9EX0FMUEhBX1JFRyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtNT0RFX0FMUEhBX0FDQURfUFJFRjsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfTEZfQ1RSTF9SRUcsICAgICAgICAgICAgICAgICAgICAweDAwMUYsIDB4MDBDMCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX0xGX1JFU19DVFJMX0JMRV9SRUcsICAgICAgICAgICAgMHgwRjBGLCAweDc0NzQpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9MRl9SRVNfQ1RSTF9GVERGX1JFRywgICAgICAgICAgIDB4MEYwRiwgMHg3NDc0KTsKKworCisgICAgICAgIFBMTERJRy0+UkZfTUdBSU5fQ1RSTDJfUkVHID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDY7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFBMTERJRywgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHLCAgICAgICAgICAgMHgxQzAwLCAweDE0MDMpOworCisKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfTUlYRVJfQ1RSTDFfQkxFX1JFRywgICAgICAgICAgICAweDAwMEYsIDB4MDAzMSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX01JWEVSX0NUUkwxX0ZUREZfUkVHLCAgICAgICAgICAgMHgwMDBGLCAweDAwMzEpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9NSVhFUl9DVFJMMl9SRUcsICAgICAgICAgICAgICAgIDB4MDAxRiwgMHgwMDAwKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUExMRElHLCBSRl9NU0tNT0RfQ1RSTDFfUkVHLCAgICAgICAgICAgICAweDAwMDMsIDB4MDAwMyk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX1JFRl9PU0NfQkxFX1JFRywgICAgICAgICAgICAgICAgMHg3RkMwLCAweDMwMkMpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9SRUZfT1NDX0ZUREZfUkVHLCAgICAgICAgICAgICAgIDB4N0ZDMCwgMHgzMDJDKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9SU1NJX0NPTVBfQ1RSTF9SRUcsICAgICAgICAgICAgICAweEYwMDAsIDB4OTc3Nyk7CisKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfU1BBUkUxX0ZUREZfUkVHLCAgICAgICAgICAgICAgICAweDQ4MDAsIDB4NDAwMCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFBMTERJRywgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRywgICAgICAgICAgMHgxNEMwLCAweDEwOEIpOworICAgICAgICBSRUdfU0VUX01BU0tFRChQTExESUcsIFJGX1NZTlRIX0NUUkwyX0ZUREZfUkVHLCAgICAgICAgIDB4MDBDMCwgMHgwMDlCKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfVFhfUFdSX0xVVF8xX1JFRywgICAgICAgICAgICAgICAweDAwM0YsIDB4MDAzQik7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX1RYX1BXUl9MVVRfMl9SRUcsICAgICAgICAgICAgICAgMHgwMDNGLCAweDAwMzcpOworICAgICAgICBSRkNVLT5SRl9UWF9QV1JfTFVUXzNfUkVHID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUY2OworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9UWF9QV1JfTFVUXzRfUkVHLCAgICAgICAgICAgICAgIDB4MDAzRiwgMHgwMDM2KTsKKyAgICAgICAgUExMRElHLT5SRl9WQ09fQ0FMQ0FQX0JJVDE0X1JFRyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RDU5RDsKKworICAgICAgICAvKiBGVERGIHNwZWNpZmljICovCisgICAgICAgIFJFR19TRVRGKERFTSwgUkZfRlRERl9DVFJMNV9SRUcsIFJTU0lUSCwgMTgwMCk7CisgICAgfQorCisgICAgUkVHX1NFVEYoUExMRElHLCBSRl9LTU9EX0FMUEhBX1JFRywgS01PRF9BTFBIQV9CTEUsIGttb2RhX2NhbCk7CisgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIEdBVVNTX0dBSU5fV1IsIGdnX2NhbF9tb2RpZmllZCk7CisgICAgUkVHX1NFVF9CSVQoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIEdBVVNTX0dBSU5fU0VMKTsKKyNlbHNlCisgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9BRkNfQ1RSTF9SRUcsICAgICAgICAgICAgICAgICAgICAweDAzMzAsIDB4MDFGNSk7CisgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9BR0NfQ1RSTDFfUkVHLCAgICAgICAgICAgICAgICAgICAweDAwN0YsIDB4OTUwQSk7CisgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9BR0NfQ1RSTDJfUkVHLCAgICAgICAgICAgICAgICAgICAweDAwM0YsIDB4MDA0OSk7CisgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9DQ0FfUlNTSVRIX1JFRywgICAgICAgICAgICAgICAgICAweEUwMDAsIDB4RTcwOCk7CisKKyAgICBSRkNVX1BPV0VSLT5SRl9DTlRSTF9USU1FUl8xMF9SRUcgPSAgMHgwQTQyOworICAgIFJGQ1VfUE9XRVItPlJGX0NOVFJMX1RJTUVSXzExX1JFRyA9ICAweDBBNDQ7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMTJfUkVHLCAgICAgICAweDAwRkYsIDB4MDA1MCk7CisgICAgUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfMTNfUkVHID0gIDB4MDg1MDsKKyAgICBSRkNVX1BPV0VSLT5SRl9DTlRSTF9USU1FUl8xNF9SRUcgPSAgMHgxODU4OworICAgIFJGQ1VfUE9XRVItPlJGX0NOVFJMX1RJTUVSXzE1X1JFRyA9ICAweDBBNTA7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMTZfUkVHLCAweEZGMDAsIDB4MTIwNyk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMV9SRUcsIDB4RkYwMCwgMHgwRjAwKTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8yMV9SRUcsIDB4MDBGRiwgMHgwMDQ0KTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8yMl9SRUcsIDB4MDBGRiwgMHgwMDQwKTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8yM19SRUcsIDB4MDBGRiwgMHgwMDUyKTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8yX1JFRywgMHhGRjAwLCAweDBEMDgpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzNfUkVHLCAweEZGMDAsIDB4MEMxMCk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfNV9SRUcsIDB4RkYwMCwgMHgwQTE4KTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl83X1JFRywgMHhGRjAwLCAweDBBMTgpOworICAgIFJGQ1UtPlJGX0NQX0NUUkxfQkxFX1JFRyA9IDB4MzUzNTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9DUF9DVFJMX0ZUREZfUkVHLCAweDBGMEYsIDB4NzU3NSk7CisgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHLCAweDA0MDIsIDB4MDVEMCk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfRElWX0lRX1RYX1JFRywgMHgwMEZGLCAweDAwQTEpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcxNl9SRUcsIDB4MDAxRiwgMHgwMDE0KTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMjNfQkxFX1JFRywgMHgwM0UwLCAweDAwMDApOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUc0Ml9SRUcgPSAweDAyMTA7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzQ1X0JMRV9SRUcsIDB4MDNFMCwgMHgwMDYwKTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRywgMHgwMDFGLCAweDAwMTUpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUc0Nl9GVERGX1JFRywgMHgwMDFGLCAweDAwMTUpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUc0N19CTEVfUkVHLCAweDAwMUYsIDB4MDAxNik7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzQ3X0ZUREZfUkVHLCAweDAwMUYsIDB4MDAxNik7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzQ4X0JMRV9SRUcsIDB4MDAxRiwgMHgwMDE3KTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHNDhfRlRERl9SRUcsIDB4MDAxRiwgMHgwMDE3KTsKKyAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0ZUREZfQ1RSTDFfUkVHLCAgICAgICAgICAgICAgICAgIDB4QzAwMCwgMHg0N0MwKTsKKyAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0ZUREZfU0lHREVUX0NUUkxfUkVHLCAgICAgICAgICAgIDB4MUZGRiwgMHgwQjZBKTsKKyAgICBSRUdfU0VUX01BU0tFRChQTExESUcsIFJGX0tNT0RfQUxQSEFfQkxFX1JFRywgMHgwRkMwLCAweDAzMEMpOworICAgIFBMTERJRy0+UkZfS01PRF9BTFBIQV9GVERGX1JFRyA9IDB4MDAwRDsKKyAgICBSRkNVLT5SRl9MRl9SRVNfQ1RSTF9CTEVfUkVHID0gMHgzNDM0OworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX0xGX0NUUkxfUkVHLCAgICAgICAgICAgICAgICAgICAgMHgwMDQwLCAweDAwODApOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX0xGX1JFU19DVFJMX0ZUREZfUkVHLCAweDBGMEYsIDB4NzQ3NCk7CisgICAgUkZDVS0+UkZfTE9fSVFfVFJJTV9SRUcgPSAweDAwMDE7CisgICAgUExMRElHLT5SRl9NR0FJTl9DVFJMM19SRUcgPSAweDAwNTA7CisgICAgUkVHX1NFVF9NQVNLRUQoUExMRElHLCBSRl9NR0FJTl9DVFJMX0ZUREZfUkVHLCAweEZGMDAsIDB4NTAwMCk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfTUlYRVJfQ1RSTDFfQkxFX1JFRywgMHgwMDBGLCAweDAwMzEpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX01JWEVSX0NUUkwxX0ZUREZfUkVHLCAweDAwMEYsIDB4MDAzMSk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCAweDNDMDAsIDB4NTgwMCk7CisgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9SU1NJX0NPTVBfQ1RSTF9SRUcsIDB4RjAwMCwgMHg5Nzc3KTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9TUEFSRTFfQkxFX1JFRywgMHgwMDM4LCAweDAwMTgpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX1NQQVJFMV9GVERGX1JFRywgMHgwMDA4LCAweDAwMDgpOworICAgIFJFR19TRVRfTUFTS0VEKFBMTERJRywgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRywgMHgyMEMwLCAweDMwNEIpOworICAgIFJFR19TRVRfTUFTS0VEKFBMTERJRywgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUcsIDB4MDA0MCwgMHgwMDRCKTsKKyAgICBSRkNVLT5SRl9UWF9QV1JfTFVUXzVfUkVHID0gMHgwOUZGOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX1RYREFDX0NUUkxfUkVHLCAweDAwNDAsIDB4MDAwMCk7CisjZW5kaWYKK30KKworCisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisvKioKKyAqIFxicmllZiBNb2R1bGF0aW9uIGdhaW4gY2FsaWJyYXRpb24KKyAqCisgKiBccGFyYW1baW5dIGJvb2wsIHRydWUgZm9yIEJMRSwgZmFsc2UgZm9yIEZUREYKKyAqIFxwYXJhbVtpbl0gYm9vbCwgdHJ1ZSB0byBlbmFibGUgUkZDQUwgSVJRLCBmYWxzZSB0byBwb2xsCisgKgorICovCitzdGF0aWMgdm9pZCBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb25fc3RhcnQoYm9vbCBtb2RlX2JsZSkKK3sKKworICAgIHVpbnQzMl90IGNhbGNhcF9taWQ7ICAvLyAgTVAtMTItMDItMjAxNgorCisgICAgLy8gU3RvcmUgYWxsIHRoZSByZWdpc3RlcnMgdGhhdCB3aWxsIGJlIGNoYW5nZWQgaW4gdGhpcyBmdW5jdGlvbgorICAgIHJmX2NudHJsX3RpbWVyMTRfcmVnX3NldF9vZmZzZXQgPSBSRUdfR0VURihSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8xNF9SRUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9PRkZTRVQpOworICAgIHJmX2NudHJsX3RpbWVyXzdfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfN19SRUc7CisgICAgcmZfZW5hYmxlX2NvbmZpZzE0X2JsZV9yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTRfQkxFX1JFRzsKKyAgICByZl9lbmFibGVfY29uZmlnMTVfYmxlX3JlZ192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxNV9CTEVfUkVHOworICAgIHJmX2VuYWJsZV9jb25maWcxNF9mdGRmX3JlZ192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxNF9GVERGX1JFRzsKKyAgICByZl9lbmFibGVfY29uZmlnMTVfZnRkZl9yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTVfRlRERl9SRUc7CisgICAgcmZfY2FsX2N0cmxfcmVnX3ZhbHVlID0gUkZDVS0+UkZfQ0FMX0NUUkxfUkVHOworICAgIHJmX21nYWluX2N0cmxfcmVnX3ZhbHVlID0gUExMRElHLT5SRl9NR0FJTl9DVFJMX0JMRV9SRUc7CisgICAgcmZfbWdhaW5fY3RybDJfcmVnX3ZhbHVlID0gUExMRElHLT5SRl9NR0FJTl9DVFJMMl9SRUc7CisgICAgcmZfc3ludGhfY3RybDJfYmxlX3JlZ192YWx1ZSA9IFBMTERJRy0+UkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzsKKyAgICByZl9zeW50aF9jdHJsMl9mdGRmX3JlZ192YWx1ZSA9IFBMTERJRy0+UkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc7CisgICAgcmZfYm1jd19yZWdfdmFsdWUgPSBQTExESUctPlJGX0JNQ1dfUkVHOworICAgIHJmX3Zjb2NhbF9jdHJsX3JlZ192YWx1ZSA9IFBMTERJRy0+UkZfVkNPQ0FMX0NUUkxfUkVHOworCisgICAgLy8gbW92ZSBQTExDTE9TRURfRU4gdG8gYWZ0ZXIgUExMIGlzIGluIGxvY2sKKyAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl83X1JFRywgU0VUX09GRlNFVCwKKyAgICAgICAgICAgICByZl9jbnRybF90aW1lcjE0X3JlZ19zZXRfb2Zmc2V0ICsgMTUwKTsKKworICAgIC8vIERpc2FibGUgUEEgYW5kIFBBIHJhbXAuCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE0X0JMRV9SRUcgPSAweDAwMDA7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE1X0JMRV9SRUcgPSAweDAwMDA7CisKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTRfRlRERl9SRUcgPSAweDAwMDA7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE1X0ZUREZfUkVHID0gMHgwMDAwOworCisgICAgLy8gRGlzYWJsZSBlbmQtb2YtcGFja2V0IGRldGVjdGlvbiAobm90IG5lZWRlZCBmb3IgdGhlIE1HQykKKyAgICBSRUdfU0VUX0JJVChQTExESUcsIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUcsIEVPX1BBQ0tFVF9ESVMpOworCisgICAgLy9TZXQgbW9kdWxhdG9yIGludmVyc2lvbgorLy8gICAgICAgIFJFR19DTFJfQklUKFBMTERJRywgUkZfTVNLTU9EX0NUUkwxX1JFRywgSU5WX1NETV9QT0wpOyAgICAgICAgLy8gTm9ybWFsIFNETSBwb2xhcml0eQorLy8gICAgICAgIFJFR19TRVRfQklUKFBMTERJRywgUkZfTVNLTU9EX0NUUkwxX1JFRywgSU5WX0RBQ19QT0wpOyAgICAgIC8vIEludmVydGVkIERBQyBwb2xhcml0eQorCisgICAgLy9NYWtlIHN1cmUgdGhhdCBub3JtYWwgb3BlcmF0aW9uIGlzIHNlbGVjdGVkLgorICAgIFJFR19DTFJfQklUKFBMTERJRywgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHLCBHQVVTU19HQUlOX1NFTCk7CisKKyAgICAvLyBTZXR0aW5ncyBmb3IgbW9kdWxhdGlvbiBnYWluIGNhbGlicmF0aW9uCisgICAgUkVHX1NFVF9CSVQoUkZDVSwgUkZfTUdDX0NUUkxfUkVHLCBNR0NfR0FJTl9TRVQpOworICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHLCBNR0FJTl9BVkVSLCAweDIpOworCisgICAgLy8gaW52ZXJ0IHRoZSBjb21wYXJhdG9yIHZhbHVlIGlmIG1vZGUgYml0IGlzIHNldCB0byB0cnVlLgorICAgIGlmICghbW9kZV9ibGUpCisgICAgeworICAgICAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFJGX01PREVfT1ZSLCAweDIpOyAgIC8vIFNldCByYWRpbyBpbiBGVERGIG1vZGUKKyAgICAgICAgUkVHX1NFVF9CSVQoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIE1HQUlOX0NNUF9JTlYpOworICAgICAgICAvLyBTZXQgbGVuZ3RoIGRlcGVuZGVudCBvbiBtb2RlICwgSkgtMDktMTEtMjAxNQorICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkwyX1JFRywgTUdBSU5fVFJBTlNNSVRfTEVOR1RILCAxMik7CisgICAgICAgIC8vIE5lZWQgdG8gc2V0IE1vZEluZGV4IHZhbHVlIHRvIDB4M0YuCisgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUcsIEZUREZfTU9ESU5ERVgsIDB4M0YpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFJGX01PREVfT1ZSLCAweDEpOyAgIC8vIFNldCByYWRpbyBpbiBCTEUgbW9kZQorICAgICAgICBSRUdfU0VUX0JJVChQTExESUcsIFJGX01HQUlOX0NUUkxfQkxFX1JFRywgTUdBSU5fQ01QX0lOVik7CisgICAgICAgIC8vIFNldCBsZW5ndGggZGVwZW5kZW50IG9uIG1vZGUgLCBKSC0wOS0xMS0yMDE1CisgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTDJfUkVHLCBNR0FJTl9UUkFOU01JVF9MRU5HVEgsIDgpOworICAgICAgICAvLyBTZXQgbW9kaW5kZXggdG8gMjY2a0h6IHRvIGltcHJvdmUgZGYyL2RmMSAsIEpILTA5LTE3LTIwMTUKKyAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9TWU5USF9DVFJMMl9CTEVfUkVHLCBNT0RJTkRFWCwgMHgyKTsKKworICAgICAgICAvLyBTdGFydCB3aXRoIGEgVkNPIGNvYXJzZSBjYWwgdG8gZmluZCB0aGUgY2FsY2FwIGZvciBtaWQgY2hhbm5lbAorICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX0JNQ1dfUkVHLCBDTl9TRUwsIDEpOworICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX0JNQ1dfUkVHLCBDTl9XUiwgMTgpOworCisgICAgICAgIC8vIERpc2FibGUgYWxsIGNhbGlicmF0aW9ucyBleGNlcHQgdGhlIFZDTyBjb2Fyc2UgY2FsLgorICAgICAgICBSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgPSAweDAwMUM7CisKKyAgICAgICAgLy8gQ2xlYXIgZW8tY2FsIGludGVycnVwdCwgc3VjaCB0aGF0IG5ldyBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcmVkCisgICAgICAgIFJGQ1UtPlJGX0lSUV9DVFJMX1JFRyA9IDB4MDAwMDsKKworICAgICAgICAvLyBXYWl0IHVudGlsIHRoZSBWQ08gY29hcnNlIGNhbGlicmF0aW9uIGNhbiBiZSBzdGFydGVkCisgICAgICAgIHdoaWxlICgoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIEVPX0NBTCkpKSB7fQorCisgICAgICAgIC8vIFN0YXJ0IHRoZSBWQ08gY29hcnNlIGNhbGlicmF0aW9uCisgICAgICAgIFJFR19TRVRfQklUKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKTsKKworICAgICAgICAvLyBXYWl0IHVudGlsIHRoZSBWQ08gY29hcnNlIGNhbGlicmF0aW9uIGhhcyBzdGFydGVkCisgICAgICAgIHdoaWxlICghKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpKSkge30KKworICAgICAgICAvLyBXYWl0IHVudGlsIHRoZSBWQ08gY29hcnNlIGNhbGlicmF0aW9uIGlzIGNvbXBsZXRlZAorICAgICAgICB3aGlsZSAoKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpKSkge30KKworICAgICAgICAvLyBDbGVhciBlb19jYWwgaW50ZXJydXB0LCBzbyB0aGF0IG5ldyBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgICAgICBSRkNVLT5SRl9JUlFfQ1RSTF9SRUcgPSAweDAwMDA7CisKKyAgICAgICAgY2FsY2FwX21pZCA9IFJFR19HRVRGKFBMTERJRywgUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUcsIFZDT19GUkVRVFJJTV9SRCk7CisgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfVkNPQ0FMX0NUUkxfUkVHLCAgVkNPX0ZSRVFUUklNX1dSLAorICAgICAgICAgICAgICAgICBjYWxjYXBfbWlkIC0gUkVHX0dFVEYoUExMRElHLCBSRl9WQ09DQUxfQ1RSTF9SRUcsIFZDT19GUkVRVFJJTV9TRUwpKTsKKworICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX1ZDT0NBTF9DVFJMX1JFRywgIFZDT19GUkVRVFJJTV9TRUwsIDIpOyAvLyBtYW51YWwgY2FsY2FwCisKKyAgICB9CisKKyAgICAvLyBEaXNhYmxlIGFsbCBjYWxpYnJhdGlvbnMgZXhjZXB0IHRoZSBtb2R1bGF0aW9uIGdhaW4gY2FsLgorICAgIFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyA9IDB4MDAzODsKKworICAgIC8vIENsZWFyIGVvLWNhbCBpbnRlcnJ1cHQsIHN1Y2ggdGhhdCBuZXcgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJ0ZWQKKyAgICBSRkNVLT5SRl9JUlFfQ1RSTF9SRUcgPSAweDAwMDA7CisKKyAgICAvLyBXYWl0IHVudGlsIG5leHQgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJ0ZWQKKyAgICB3aGlsZSAoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIEVPX0NBTCkpIHt9CisKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShSRkNBTF9JUlFuKTsKKworICAgIC8vIFN0YXJ0IHRoZSBtb2R1bGF0aW9uIGdhaW4gY2FsaWJyYXRpb24KKyAgICBSRUdfU0VUX0JJVChSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCk7CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBtb2R1bGF0aW9uIGdhaW4gY2FsaWJyYXRpb24gaGFzIHN0YXJ0ZWQKKyAgICB3aGlsZSAoIShSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKSkpIHt9Cit9CisjZWxzZSAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9CICovCitzdGF0aWMgdm9pZCBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb25fZ2VuZXJpY19zdGFydChtZ2NfbW9kZV9jdHJsX2UgbW9kZV9jdHJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCBhdmVyYWdlLCBpbnQxNl90IG1nYWluX21vZGUsIGludDE2X3QgZm9yY2UsIGludDE2X3QgbGVuZ3RoKQoreworCisgICAgLy8gU3RvcmUgYWxsIHRoZSByZWdpc3RlcnMgdGhhdCB3aWxsIGJlIGNoYW5nZWQgaW4gdGhpcyBmdW5jdGlvbgorICAgIHJmX2NudHJsX3RpbWVyMTRfcmVnX3NldF9vZmZzZXQgPSBSRUdfR0VURihSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8xNF9SRUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9PRkZTRVQpOworICAgIHJmX2NudHJsX3RpbWVyXzdfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfN19SRUc7CisgICAgcmZfZW5hYmxlX2NvbmZpZzE0X3JlZ192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxNF9SRUc7CisgICAgcmZfZW5hYmxlX2NvbmZpZzE1X3JlZ192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxNV9SRUc7CisgICAgcmZfY2FsX2N0cmxfcmVnX3ZhbHVlID0gUkZDVS0+UkZfQ0FMX0NUUkxfUkVHOworICAgIHJmX21nYWluX2N0cmxfcmVnX3ZhbHVlID0gUExMRElHLT5SRl9NR0FJTl9DVFJMX0JMRV9SRUc7CisgICAgcmZfbWdhaW5fY3RybDJfcmVnX3ZhbHVlID0gUExMRElHLT5SRl9NR0FJTl9DVFJMMl9SRUc7CisgICAgcmZfc3ludGhfY3RybDJfYmxlX3JlZ192YWx1ZSA9IFBMTERJRy0+UkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzsKKyAgICByZl9zeW50aF9jdHJsMl9mdGRmX3JlZ192YWx1ZSA9IFBMTERJRy0+UkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc7CisgICAgcmZfb3ZlcnJ1bGVfcmVnX3ZhbHVlID0gUkZDVS0+UkZfT1ZFUlJVTEVfUkVHOworICAgIHJmX2VuYWJsZV9jb25maWcyM19ibGVfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzIzX0JMRV9SRUc7CisgICAgcmZfZW5hYmxlX2NvbmZpZzIzX2Z0ZGZfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHOworICAgIHJmX2VuYWJsZV9jb25maWc0NV9ibGVfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQ1X0JMRV9SRUc7CisgICAgcmZfZW5hYmxlX2NvbmZpZzQ1X2Z0ZGZfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHOworCisgICAgLy8gbW92ZSBQTExDTE9TRURfRU4gdG8gYWZ0ZXIgUExMIGlzIGluIGxvY2sKKyAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl83X1JFRywgU0VUX09GRlNFVCwKKyAgICAgICAgICAgICByZl9jbnRybF90aW1lcjE0X3JlZ19zZXRfb2Zmc2V0ICsgMTUwKTsKKworICAgIC8vIERpc2FibGUgUEEgYW5kIFBBIHJhbXAuCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE0X1JFRyA9IDB4MDAwMDsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTVfUkVHID0gMHgwMDAwOworCisgICAgLy8gRGlzYWJsZSBlbmQtb2YtcGFja2V0IGRldGVjdGlvbiAobm90IG5lZWRlZCBmb3IgdGhlIE1HQykKKyAgICBSRUdfU0VUX0JJVChQTExESUcsIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUcsIEVPX1BBQ0tFVF9ESVMpOworCisgICAgLy8gU2V0IEdhaW4gaW4gQW5hbG9nIGNvbXBhcmF0b3IgdG8gMQorICAgIFJFR19TRVRfQklUKFJGQ1UsIFJGX01HQ19DVFJMX1JFRywgTUdDX0dBSU5fU0VUKTsKKworCisgICAgLyogU2V0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEJMRSBtb2RlIHdpdGggR2F1c3NEQUMgKi8KKyAgICBpZiAobW9kZV9jdHJsID09IE1HQ19NT0RFX0NUUkxfQkxFX0dBVVNTREFDKQorICAgIHsKKyAgICAgICAgLyogU2V0IHJhZGlvIGluIEJMRSBtb2RlICovCisgICAgICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgUkZfTU9ERV9PVlIsIDB4MSk7CisgICAgICAgIC8qIEludmVyc2lvbiBvZiBhbmFsb2cgY29tcGFyYXRvciBzaWduYWwgKi8KKyAgICAgICAgUkVHX1NFVF9CSVQoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIE1HQUlOX0NNUF9JTlYpOworCisgICAgICAgIGlmIChmb3JjZSAhPSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogRGlzYWJsZSBHYXVzcyBHYWluIG92ZXJyaWRlICovCisgICAgICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkxfQkxFX1JFRywgR0FVU1NfR0FJTl9TRUwsIGZvcmNlICYgMHgxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdmVyYWdlICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgbnVtYmVyIG9mIGF2ZXJhZ2luZyAqLworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIE1HQUlOX0FWRVIsIGF2ZXJhZ2UgJiAweDMpOworICAgICAgICB9CisKKyAgICAgICAgLyogU2V0dGluZyBudW1iZXIgb2YgemVyb3MgYW5kIG9uZXMgKi8KKyAgICAgICAgaWYgKGxlbmd0aCA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMMl9SRUcsIE1HQUlOX1RSQU5TTUlUX0xFTkdUSCwgOCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkwyX1JFRywgTUdBSU5fVFJBTlNNSVRfTEVOR1RILAorICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICYgMHg3Zik7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZXQgbW9kaW5kZXggdG8gMjY2a0h6ICovCisgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRywgTU9ESU5ERVgsIDB4Mik7CisgICAgICAgIC8qIFNlbGVjdCB0aGUgR2F1c3NEYWMgaW4gQkxFIG1vZGUgKi8KKyAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9TWU5USF9DVFJMMl9CTEVfUkVHLCBCTEVfREFDX1NFTCwgMHgwKTsKKworICAgICAgICBpZiAobWdhaW5fbW9kZSAhPSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogVXNlIHRoZSBuZXcgYWxnb3JpdGhtICovCisgICAgICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkwyX1JFRywgTUdBSU5fTU9ERV9TRUwsIG1nYWluX21vZGUgJiAweDEpOworICAgICAgICB9CisKKyAgICAgICAgLyogRGlzYWJsZSBUWERBQyBpbiBCTEUgbW9kZSAqLworICAgICAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFRywgdHhkYWNfZW5fYmxlX2RjZl90eCwgMHgwKTsKKyAgICAgICAgLyogRW5hYmxlIEdhdXNzREFDIGluIEJMRSBtb2RlICovCisgICAgICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHLCBnYXVzc19lbl9ibGVfZGNmX3R4LCAweDMpOworICAgICAgICAvKiBEaXNhYmxlIFRYLURBQyBvdXRwdXQgc2VsZWN0aW9uICovCisgICAgICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgVFhEQUNfU0VMLCAweDApOworICAgICAgICAvKiBFbmFibGUgR2F1c3NEQUMgb3V0cHV0IHNlbGVjdGlvbiBzd2l0Y2ggKi8KKyAgICAgICAgUkVHX1NFVEYoUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCBHQVVTU19EQUNfU0VMLCAweDApOworICAgIH0KKworICAgIC8qIFNldCBtb2RlIHNwZWNpZmljIHNldHRpbmdzIGZvciBCTEUgbW9kZSB3aXRoIFRYREFDICovCisgICAgaWYgKG1vZGVfY3RybCA9PSBNR0NfTU9ERV9DVFJMX0JMRV9UWERBQykKKyAgICB7CisgICAgICAgIC8qIFNldCByYWRpbyBpbiBCTEUgbW9kZSAqLworICAgICAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFJGX01PREVfT1ZSLCAweDEpOworICAgICAgICAvKiBJbnZlcnNpb24gb2YgYW5hbG9nIGNvbXBhcmF0b3Igc2lnbmFsICovCisgICAgICAgIFJFR19TRVRfQklUKFBMTERJRywgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHLCBNR0FJTl9DTVBfSU5WKTsKKworICAgICAgICBpZiAoZm9yY2UgIT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERpc2FibGUgR2F1c3MgR2FpbiBvdmVycmlkZSAqLworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIEdBVVNTX0dBSU5fU0VMLCBmb3JjZSAmIDB4MSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXZlcmFnZSAhPSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2V0IG51bWJlciBvZiBhdmVyYWdpbmcgKi8KKyAgICAgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHLCBNR0FJTl9BVkVSLCBhdmVyYWdlICYgMHgzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldHRpbmcgbnVtYmVyIG9mIHplcm9zIGFuZCBvbmVzICovCisgICAgICAgIGlmIChsZW5ndGggPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTDJfUkVHLCBNR0FJTl9UUkFOU01JVF9MRU5HVEgsIDgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMMl9SRUcsIE1HQUlOX1RSQU5TTUlUX0xFTkdUSCwKKyAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCAmIDB4N2YpOworICAgICAgICB9CisKKyAgICAgICAgLyogU2V0IG1vZGluZGV4IHRvIDI1MGtIeiAqLworICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUcsIE1PRElOREVYLCAweDApOworICAgICAgICAvKiBTZWxlY3QgdGhlIFRYREFDIGluIEJMRSBtb2RlICovCisgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRywgQkxFX0RBQ19TRUwsIDB4MSk7CisKKyAgICAgICAgaWYgKG1nYWluX21vZGUgIT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFVzZSB0aGUgbmV3IGFsZ29yaXRobSAqLworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMMl9SRUcsIE1HQUlOX01PREVfU0VMLCBtZ2Fpbl9tb2RlICYgMHgxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEVuYWJsZSBUWERBQyBpbiBCTEUgbW9kZSAqLworICAgICAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFRywgdHhkYWNfZW5fYmxlX2RjZl90eCwgMHgzKTsKKyAgICAgICAgLyogRGlzYWJsZSBHYXVzc0RBQyBpbiBCTEUgbW9kZSAqLworICAgICAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMjNfQkxFX1JFRywgZ2F1c3NfZW5fYmxlX2RjZl90eCwgMHgwKTsKKyAgICAgICAgLyogU2VsZWN0IFRYLURBQyBvdXRwdXQgc2VsZWN0aW9uICovCisgICAgICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgVFhEQUNfU0VMLCAweDIpOworICAgICAgICAvKiBVbnNlbGVjdCBHYXVzc0RBQyBvdXRwdXQgc2VsZWN0aW9uIHN3aXRjaCAqLworICAgICAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIEdBVVNTX0RBQ19TRUwsIDB4MSk7CisgICAgfQorCisgICAgLyogU2V0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEZUREYgbW9kZSAqLworICAgIGlmIChtb2RlX2N0cmwgPT0gTUdDX01PREVfQ1RSTF9GVERGKQorICAgIHsKKyAgICAgICAgLyogU2V0IHJhZGlvIGluIEZUREYgbW9kZSAqLworICAgICAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFJGX01PREVfT1ZSLCAweDIpOworICAgICAgICAvKiBJbnZlcnNpb24gb2YgYW5hbG9nIGNvbXBhcmF0b3Igc2lnbmFsICovCisgICAgICAgIFJFR19TRVRfQklUKFBMTERJRywgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHLCBNR0FJTl9DTVBfSU5WKTsKKworICAgICAgICBpZiAoZm9yY2UgIT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERpc2FibGUgR2F1c3MgR2FpbiBvdmVycmlkZSAqLworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIEdBVVNTX0dBSU5fU0VMLCBmb3JjZSAmIDB4MSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXZlcmFnZSAhPSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2V0IG51bWJlciBvZiBhdmVyYWdpbmcgKi8KKyAgICAgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHLCBNR0FJTl9BVkVSLCBhdmVyYWdlICYgMHgzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldHRpbmcgbnVtYmVyIG9mIHplcm9zIGFuZCBvbmVzICovCisgICAgICAgIGlmIChsZW5ndGggPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTDJfUkVHLCBNR0FJTl9UUkFOU01JVF9MRU5HVEgsIDE2KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTDJfUkVHLCBNR0FJTl9UUkFOU01JVF9MRU5HVEgsCisgICAgICAgICAgICAgICAgICAgICBsZW5ndGggJiAweDdmKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZ2Fpbl9tb2RlICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBVc2UgdGhlIG5ldyBhbGdvcml0aG0gKi8KKyAgICAgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTDJfUkVHLCBNR0FJTl9NT0RFX1NFTCwgbWdhaW5fbW9kZSAmIDB4MSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBFbmFibGUgVFhEQUMgaW4gRlRERiBtb2RlICovCisgICAgICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUc0NV9GVERGX1JFRywgdHhkYWNfZW5fZnRkZl9kY2ZfdHgsIDB4Myk7CisgICAgICAgIC8qIERpc2FibGUgR2F1c3NEQUMgaW4gRlRERiBtb2RlICovCisgICAgICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyM19GVERGX1JFRywgZ2F1c3NfZW5fZnRkZl9kY2ZfdHgsIDB4MCk7CisgICAgICAgIC8qIFNlbGVjdCBUWC1EQUMgb3V0cHV0IHNlbGVjdGlvbiAqLworICAgICAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFRYREFDX1NFTCwgMHgwKTsKKyAgICAgICAgLyogVW5zZWxlY3QgR2F1c3NEQUMgb3V0cHV0IHNlbGVjdGlvbiBzd2l0Y2ggKi8KKyAgICAgICAgUkVHX1NFVEYoUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCBHQVVTU19EQUNfU0VMLCAweDApOworICAgIH0KKworICAgIC8vIERpc2FibGUgYWxsIGNhbGlicmF0aW9ucyBleGNlcHQgdGhlIG1vZHVsYXRpb24gZ2FpbiBjYWwuCisgICAgUkZDVS0+UkZfQ0FMX0NUUkxfUkVHID0gMHgwMDM4OworCisgICAgLy8gQ2xlYXIgZW8tY2FsIGludGVycnVwdCwgc3VjaCB0aGF0IG5ldyBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgIFJGQ1UtPlJGX0lSUV9DVFJMX1JFRyA9IDB4MDAwMDsKKworICAgIC8vIFdhaXQgdW50aWwgbmV4dCBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgIHdoaWxlIChSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgRU9fQ0FMKSkge30KKworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFJGQ0FMX0lSUW4pOworCisgICAgLy8gU3RhcnQgdGhlIG1vZHVsYXRpb24gZ2FpbiBjYWxpYnJhdGlvbgorICAgIFJFR19TRVRfQklUKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKTsKKworICAgIC8vIFdhaXQgdW50aWwgdGhlIG1vZHVsYXRpb24gZ2FpbiBjYWxpYnJhdGlvbiBoYXMgc3RhcnRlZAorICAgIHdoaWxlICghKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpKSkge30KK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbl9zdGFydChib29sIG1vZGVfYmxlKQoreworICAgIGlmIChtb2RlX2JsZSkKKyAgICB7CisgICAgICAgIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbl9nZW5lcmljX3N0YXJ0KE1HQ19NT0RFX0NUUkxfQkxFX1RYREFDLCAyLCAxLCAwLCA4KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaHdfcmZfbW9kdWxhdGlvbl9nYWluX2NhbGlicmF0aW9uX2dlbmVyaWNfc3RhcnQoTUdDX01PREVfQ1RSTF9GVERGLCAyLCAxLCAwLCA4KTsKKyAgICB9Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaHdfcmZfbW9kdWxhdGlvbl9nYWluX2NhbGlicmF0aW9uX2VuZCh2b2lkKQoreworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICB1aW50MzJfdCAgY2hfY2FsLCBnZ19jYWwsIGdnX2NoX3Byb2QsIGttb2RhX21heCwgZ2cwLCBnZ190aDEsIGdnX3RoMjsgLy8gIE1QLTEyLTAyLTIwMTYKKyAgICB1aW50MzJfdCBrbW9kYV9iYXNlOworICAgIHVpbnQzMl90IFk7CisgICAgdWludDMyX3QgdG1wOworICAgIHVpbnQzMl90IGRnYWluX2tpbGxfc2Vjb25kX2p1bXA7CisgICAgdWludDMyX3QgZGdhaW47CisKKyAgICBpZiAoKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpCisgICAgICAgIHx8ICgoZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gPT0gMSkKKyAgICAgICAgICAgICYmIChDSElQX0lTX0FFKSkpCisgICAgeworICAgICAgICBrbW9kYV9iYXNlID0gS01PREVfQUxQSEFfQUNBRF9QUkVGICYgUkVHX01TSyhQTExESUcsIFJGX0tNT0RfQUxQSEFfUkVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLTU9EX0FMUEhBX0JMRSk7CisgICAgfQorCisgICAgLy8gQ2xlYXIgZW9fY2FsIGludGVycnVwdCwgc28gdGhhdCBuZXcgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJ0ZWQKKyAgICBSRkNVLT5SRl9JUlFfQ1RSTF9SRUcgPSAweDAwMDA7CisKKyAgICBjaF9jYWwgPSBSRUdfR0VURihQTExESUcsIFJGX1NZTlRIX1JFU1VMVDJfQkxFX1JFRywgQ05fQ0FMX1JEKTsKKyAgICBnZ19jYWwgPSBSRUdfR0VURihQTExESUcsIFJGX1NZTlRIX1JFU1VMVF9CTEVfUkVHLCAgR0FVU1NfR0FJTl9DQUxfUkQpOworCisgICAgZ2cwICAgID0gZ2dfY2FsICsgKChnZ19jYWwgKiBrbW9kYV9iYXNlICogY2hfY2FsICsgMTAyNCkgPj4gMTEpOworICAgIGdnX3RoMSA9IChnZ19jYWwgJiAweEUwKSArIERGMV9EQUNfQ0hFQ0tfVkFMVUU7IC8vIGdnX3RoMSA9IChnZ19jYWwmMHhFMCkrMzI7CisgICAgZ2dfdGgyID0gKGdnX3RoMSArIERGMV9EQUNfQ0hFQ0tfVkFMVUUpOyAgICAgIC8vIGdnX3RoMiA9IChnZ190aDErMzIpOworCisgICAgaWYgKGdnMCA+PSBnZ190aDIpICAgLy9zbyAyIGp1bXBzIGFyZSBvbiB0aGUgbGVmdCBvZiB0aGUgY2FsLiBjaGFubmVsCisgICAgeworICAgICAgICAvKgorICAgICAgICBGb3JtdWxhIChNUCk6CisgICAgICAgIFkgPSAxICsgKChrbW9kYV9iYXNlKmNoX2NhbCkvMjA0OCk7CisgICAgICAgIGRnYWluX2tpbGxfc2Vjb25kX2p1bXAgPSBnZ19jYWwgLSAoZ2dfdGgyLTEpL1k7CisKKyAgICAgICAgSW1wcm92ZSB0aGUgcmVzb2x1dGlvbiwKKyAgICAgICAgWSA9IDIwNDgqICsgKGttb2RhX2Jhc2UqY2hfY2FsKTsKKyAgICAgICAgZGdhaW5fa2lsbF9zZWNvbmRfanVtcCA9IGdnX2NhbCAtIChnZ190aDItMSkqMjA0OC9ZOworICAgICAgICAgKi8KKworICAgICAgICBZID0gMjA0OCArIChrbW9kYV9iYXNlICogY2hfY2FsKTsKKyAgICAgICAgdG1wID0gKCgoZ2dfdGgyIC0gMSkgPDwgMTEpIC8gWSk7CisKKyAgICAgICAgaWYgKGdnX2NhbCA+IHRtcCkgIC8vY2hlY2sgdG8gcHJldmVudCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZGdhaW5fa2lsbF9zZWNvbmRfanVtcAorICAgICAgICB7CisgICAgICAgICAgICBkZ2Fpbl9raWxsX3NlY29uZF9qdW1wID0gZ2dfY2FsIC0gdG1wOworCisgICAgICAgICAgICBpZiAoZGdhaW5fa2lsbF9zZWNvbmRfanVtcCA8PSBERjFfREdBSU5fVEhSMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZ2FpbiA9IERGMV9ER0FJTl9USFIxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZGdhaW5fa2lsbF9zZWNvbmRfanVtcCA+PSBERjFfREdBSU5fVEhSMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZ2FpbiA9IERGMV9ER0FJTl9USFIyOyAgLy8gU2hvdWxkIG5ldmVyIGVuZCB1cCBoZXJlIO+/vSBidXQgYmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeS4gZGdhaW5fdGhyMiBpcyBkZWZhdWx0IDE2CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGdhaW4gPSBkZ2Fpbl9raWxsX3NlY29uZF9qdW1wOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGdhaW4gPSAwOyAvLyBFbmQgdXAgaGVyZSBiZWNhdXNlIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNhbGN1bGF0aW9uIG9mIHRtcCEKKyAgICAgICAgfQorCisgICAgfQorICAgIGVsc2UgaWYgKGdnMCA+PSBnZ190aDEpCisgICAgeworICAgICAgICBkZ2FpbiA9IERGMV9ER0FJTl9USFIxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBkZ2FpbiA9IERGMV9ER0FJTl9USFIwOworICAgIH0KKworICAgIGlmIChnZ19jYWwgPiBkZ2FpbikKKyAgICB7CisgICAgICAgIGdnX2NhbF9tb2RpZmllZCA9IGdnX2NhbCAtIGRnYWluOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnZ19jYWxfbW9kaWZpZWQgPSBnZ19jYWw7CisgICAgfQorCisgICAgZ2dfY2hfcHJvZCA9ICh1aW50MzJfdCkoZ2dfY2FsX21vZGlmaWVkICogY2hfY2FsKTsKKworICAgIGlmIChnZ19jaF9wcm9kID09IDApICAgLy8gQXZvaWQgSGFyZEZhdWx0IGR1ZSB0byBkaXZpc2lvbiBieSAwIChub3QgbGlrZWx5KQorICAgIHsKKyAgICAgICAga21vZGFfY2FsID0ga21vZGFfYmFzZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKworICAgICAgICBrbW9kYV9tYXggPSAoMjU1ICogMjA0OCAtIDIwNDggKiBnZ19jYWxfbW9kaWZpZWQpIC8gZ2dfY2hfcHJvZCA7CisKKyAgICAgICAgaWYgKGttb2RhX21heCA+PSBrbW9kYV9iYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBrbW9kYV9jYWwgPSBrbW9kYV9iYXNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAga21vZGFfY2FsID0ga21vZGFfbWF4OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBzaG91bGQgYmUgZG9uZSBib3RoIGhlcmUgKHRvIHRha2UgZWZmZWN0IGFmdGVyIGNhbGliKSBBTkQgYWZ0ZXIgcHJlZmVycmVkIHNldHRpbmdzCisgICAgUkVHX1NFVEYoUExMRElHLCBSRl9LTU9EX0FMUEhBX1JFRywgS01PRF9BTFBIQV9CTEUsIGttb2RhX2NhbCk7CisKKyAgICAvL1Jlc3RvcmUgdGhlIHZhbHVlcyBvZiB0aGUgcmVnaXN0ZXJzIHRoYXQgd2VyZSBjaGFuZ2VkIGluIHRoZSBmdW5jdGlvbgorICAgIC8vUkVHX1NFVF9CSVQoUExMRElHLCBSRl9NU0tNT0RfQ1RSTDFfUkVHLCBJTlZfU0RNX1BPTCk7ICAvLyBJbnZlcnRlZCBTRE0gcG9sYXJpdHkKKyAgICAvL1JFR19DTFJfQklUKFBMTERJRywgUkZfTVNLTU9EX0NUUkwxX1JFRywgSU5WX0RBQ19QT0wpOyAgLy8gTm9ybWFsIERBQyBwb2xhcml0eQorICAgIFJGQ1VfUE9XRVItPlJGX0NOVFJMX1RJTUVSXzdfUkVHID0gcmZfY250cmxfdGltZXJfN19yZWdfdmFsdWU7CisgICAgUkZDVS0+UkZfQ0FMX0NUUkxfUkVHID0gcmZfY2FsX2N0cmxfcmVnX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxNF9CTEVfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzE0X2JsZV9yZWdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE0X0ZUREZfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzE0X2Z0ZGZfcmVnX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxNV9CTEVfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzE1X2JsZV9yZWdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE1X0ZUREZfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzE1X2Z0ZGZfcmVnX3ZhbHVlOworCisgICAgUExMRElHLT5SRl9NR0FJTl9DVFJMX0JMRV9SRUcgPSByZl9tZ2Fpbl9jdHJsX3JlZ192YWx1ZTsKKyAgICBQTExESUctPlJGX01HQUlOX0NUUkwyX1JFRyA9IHJmX21nYWluX2N0cmwyX3JlZ192YWx1ZTsKKyAgICBQTExESUctPlJGX1NZTlRIX0NUUkwyX0JMRV9SRUcgPSByZl9zeW50aF9jdHJsMl9ibGVfcmVnX3ZhbHVlOworICAgIFBMTERJRy0+UkZfU1lOVEhfQ1RSTDJfRlRERl9SRUcgPSByZl9zeW50aF9jdHJsMl9mdGRmX3JlZ192YWx1ZTsKKworICAgIFBMTERJRy0+UkZfQk1DV19SRUcgPSByZl9ibWN3X3JlZ192YWx1ZTsgLy8gTVAtMTItMDItMjAxNgorICAgIFBMTERJRy0+UkZfVkNPQ0FMX0NUUkxfUkVHID0gcmZfdmNvY2FsX2N0cmxfcmVnX3ZhbHVlOyAvLyBNUC0xMi0wMi0yMDE2CisKKyAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkxfQkxFX1JFRywgR0FVU1NfR0FJTl9XUiwgZ2dfY2FsX21vZGlmaWVkKTsKKyAgICBSRUdfU0VUX0JJVChQTExESUcsIFJGX01HQUlOX0NUUkxfQkxFX1JFRywgR0FVU1NfR0FJTl9TRUwpOworCisgICAgLy8gRGlzYWJsZSBvdmVycnVsZSBtb2RlCisgICAgUkZDVS0+UkZfT1ZFUlJVTEVfUkVHICY9IH5SRUdfTVNLKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgUkZfTU9ERV9PVlIpOworI2Vsc2UKKyAgICAvLyBDbGVhciBlb19jYWwgaW50ZXJydXB0LCBzbyB0aGF0IG5ldyBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgIFJGQ1UtPlJGX0lSUV9DVFJMX1JFRyA9IDB4MDAwMDsKKworICAgIC8vUmVzdG9yZSB0aGUgdmFsdWVzIG9mIHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIGNoYW5nZWQgaW4gdGhlIGZ1bmN0aW9uCisgICAgUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfN19SRUcgPSByZl9jbnRybF90aW1lcl83X3JlZ192YWx1ZTsKKyAgICBSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgPSByZl9jYWxfY3RybF9yZWdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE0X1JFRyA9IHJmX2VuYWJsZV9jb25maWcxNF9yZWdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE1X1JFRyA9IHJmX2VuYWJsZV9jb25maWcxNV9yZWdfdmFsdWU7CisgICAgUExMRElHLT5SRl9NR0FJTl9DVFJMX0JMRV9SRUcgPSByZl9tZ2Fpbl9jdHJsX3JlZ192YWx1ZTsKKyAgICBQTExESUctPlJGX01HQUlOX0NUUkwyX1JFRyA9IHJmX21nYWluX2N0cmwyX3JlZ192YWx1ZTsKKyAgICBQTExESUctPlJGX1NZTlRIX0NUUkwyX0JMRV9SRUcgPSByZl9zeW50aF9jdHJsMl9ibGVfcmVnX3ZhbHVlOworICAgIFBMTERJRy0+UkZfU1lOVEhfQ1RSTDJfRlRERl9SRUcgPSByZl9zeW50aF9jdHJsMl9mdGRmX3JlZ192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMjNfQkxFX1JFRyA9IHJmX2VuYWJsZV9jb25maWcyM19ibGVfcmVnX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcyM19GVERGX1JFRyA9IHJmX2VuYWJsZV9jb25maWcyM19mdGRmX3JlZ192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFRyA9IHJmX2VuYWJsZV9jb25maWc0NV9ibGVfcmVnX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUc0NV9GVERGX1JFRyA9IHJmX2VuYWJsZV9jb25maWc0NV9mdGRmX3JlZ192YWx1ZTsKKworICAgIC8vIERpc2FibGUgb3ZlcnJ1bGUgbW9kZQorICAgIFJGQ1UtPlJGX09WRVJSVUxFX1JFRyA9IHJmX292ZXJydWxlX3JlZ192YWx1ZTsKKworI2VuZGlmCit9CisKKy8qKgorICogXGJyaWVmIE1vZHVsYXRpb24gZ2FpbiBjYWxpYnJhdGlvbiAtIFdyYXBwZXIgZnVuY3Rpb24KKyAqCisgKiBVc2VkIG9uIGJvb3QsIGFuZCBnZW5lcmFsbHkgd2hlbmV2ZXIgdGhlIGludGVycnVwdC1iYXNlZCBhcHByb2FjaCBpcyBub3QKKyAqIG5lZWRlZAorICoKKyAqIFxwYXJhbVtpbl0gYm9vbCwgdHJ1ZSBmb3IgRlRERiwgZmFsc2UgZm9yIEJMRQorICoKKyAqLwordm9pZCBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb24oYm9vbCBtb2RlX2JsZSkKK3sKKyAgICAvKiBTdGFydCB0aGUgZ2FpbiBjYWxpYnJhdGlvbiAqLworICAgIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbl9zdGFydChtb2RlX2JsZSk7CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBtb2R1bGF0aW9uIGdhaW4gY2FsaWJyYXRpb24gaXMgY29tcGxldGVkCisgICAgd2hpbGUgKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpKSB7fQorCisgICAgaHdfcmZfbW9kdWxhdGlvbl9nYWluX2NhbGlicmF0aW9uX2VuZCgpOworfQorCisKK3ZvaWQgaHdfcmZfZGNfb2Zmc2V0X2NhbGlicmF0aW9uKHZvaWQpCit7CisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgIC8vIFNhdmUgdGhlIHZhbHVlcyBvZiByZWdpc3RlcnMgdGhhdCB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGZ1bmN0aW9uCisgICAgdWludDMyX3QgUkZfRU5BQkxFX0NPTkZJRzBfQkxFX1JFR192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcwX0JMRV9SRUc7CisgICAgdWludDMyX3QgUkZfRU5BQkxFX0NPTkZJRzFfQkxFX1JFR192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxX0JMRV9SRUc7CisgICAgdWludDMyX3QgUkZfRU5BQkxFX0NPTkZJRzJfQkxFX1JFR192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcyX0JMRV9SRUc7CisgICAgdWludDMyX3QgUkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRzsKKworICAgIHVpbnQzMl90IFJGX0RDX09GRlNFVF9DVFJMMl9SRUdfdmFsdWUgPSBERU0tPlJGX0RDX09GRlNFVF9DVFJMMl9SRUc7CisgICAgdWludDMyX3QgcmZfY2FsX2N0cmxfcmVnX3ZhbHVlX2xvY2FsID0gUkZDVS0+UkZfQ0FMX0NUUkxfUkVHOworICAgIHVpbnQzMl90IHJmX292ZXJydWxlX3JlZ192YWx1ZV9sb2NhbCA9IFJGQ1UtPlJGX09WRVJSVUxFX1JFRzsKKworICAgIC8vIFJlcXVpcmVkIHNldHRpbmcgZm9yIHRoZSBEQy1vZmZzZXQgY2FsaWJyYXRpb24KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMF9CTEVfUkVHID0gMHgwMDAwOyAgIC8vIERpc2FibGUgTE5BX0xETworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxX0JMRV9SRUcgPSAweDAwMDA7ICAgLy8gRGlzYWJsZSBMTkFfQ09SRQorICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcyX0JMRV9SRUcgPSAweDAwMDA7ICAgLy8gRGlzYWJsZSBMTkFfQ0dNCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUcgPSAweDAwMDA7ICAgICAgICAgICAgIC8vIERpc2FibGUgdGhlIERDRiB0cmlnZ2VyZWQgUGFydGlhbCBEQ09DCisKKyAgICAvLyBEQ05HQUlOID0gMywgRENOU1RFUCA9IDUsIERDUEFSQ0FMX0VOID0gMCwgRENPRkZTRVRfU0VMID0gMAorICAgIERFTS0+UkZfRENfT0ZGU0VUX0NUUkwyX1JFRyA9IDB4MDFEMDsKKyAgICAvLyBEaXNhYmxlIGFsbCBjYWxpYnJhdGlvbnMgZXhjZXB0IHRoZSBEQy1vZmZzZXQgY2FsLgorICAgIFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyA9IDB4MDAyQzsKKworICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgUkZfTU9ERV9PVlIsIDB4MSk7ICAgLy8gT3ZlcnJ1bGUgUkZfTU9ERSA8LSBCTEVfTU9ERQorCisgICAgLy8gQ2xlYXIgZW8tY2FsIGludGVycnVwdCwgc28gdGhhdCBuZXcgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJlZAorICAgIFJGQ1UtPlJGX0lSUV9DVFJMX1JFRyA9IDB4MDAwMDsKKworICAgIC8vIFdhaXQgdW50aWwgdGhlIERDLW9mZnNldCBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgIHdoaWxlIChSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgRU9fQ0FMKSkge30KKworICAgIC8vIFN0YXJ0IHRoZSBtb2R1bGF0aW9uIGdhaW4gY2FsaWJyYXRpb24KKyAgICBSRUdfU0VUX0JJVChSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCk7CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBtb2R1bGF0aW9uIGdhaW4gY2FsaWJyYXRpb24gaGFzIHN0YXJ0ZWQKKyAgICB3aGlsZSAoIShSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKSkpIHt9CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBtb2R1bGF0aW9uIGdhaW4gY2FsaWJyYXRpb24gaXMgY29tcGxldGVkCisgICAgd2hpbGUgKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpKSB7fQorCisgICAgLy8gQ2xlYXIgZW8tY2FsIGludGVycnVwdCwgc28gdGhhdCBuZXcgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJ0ZWQKKyAgICBSRkNVLT5SRl9JUlFfQ1RSTF9SRUcgPSAweDAwMDA7CisKKyAgICAvLyBSZXN0b3JlIHRoZSB2YWx1ZXMgb2YgcmVnaXN0ZXJzIHRoYXQgd2VyZSBjaGFuZ2VkIGluIHRoZSBmdW5jdGlvbgorICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcwX0JMRV9SRUcgPSBSRl9FTkFCTEVfQ09ORklHMF9CTEVfUkVHX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxX0JMRV9SRUcgPSBSRl9FTkFCTEVfQ09ORklHMV9CTEVfUkVHX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcyX0JMRV9SRUcgPSBSRl9FTkFCTEVfQ09ORklHMl9CTEVfUkVHX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHID0gUkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUdfdmFsdWU7CisKKyAgICBERU0tPlJGX0RDX09GRlNFVF9DVFJMMl9SRUcgPSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX3ZhbHVlOworICAgIFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyA9IHJmX2NhbF9jdHJsX3JlZ192YWx1ZV9sb2NhbDsKKyAgICBSRkNVLT5SRl9PVkVSUlVMRV9SRUcgPSByZl9vdmVycnVsZV9yZWdfdmFsdWVfbG9jYWw7CisjZWxzZSAvKiBSRVZfQiAqLworICAgIC8vIFNhdmUgdGhlIHZhbHVlcyBvZiByZWdpc3RlcnMgdGhhdCB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGZ1bmN0aW9uCisgICAgdWludDMyX3QgUkZfRU5BQkxFX0NPTkZJRzBfUkVHX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzBfUkVHOworICAgIHVpbnQzMl90IFJGX0VOQUJMRV9DT05GSUcxX1JFR192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxX1JFRzsKKyAgICB1aW50MzJfdCBSRl9FTkFCTEVfQ09ORklHMl9SRUdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMl9SRUc7CisKKyAgICB1aW50MzJfdCBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX3ZhbHVlID0gREVNLT5SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOworICAgIHVpbnQzMl90IHJmX2NhbF9jdHJsX3JlZ192YWx1ZV9sb2NhbCA9IFJGQ1UtPlJGX0NBTF9DVFJMX1JFRzsKKyAgICB1aW50MzJfdCByZl9vdmVycnVsZV9yZWdfdmFsdWVfbG9jYWwgPSBSRkNVLT5SRl9PVkVSUlVMRV9SRUc7CisKKyAgICAvLyBSZXF1aXJlZCBzZXR0aW5nIGZvciB0aGUgREMtb2Zmc2V0IGNhbGlicmF0aW9uCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzBfUkVHID0gMHgwMDAwOyAgIC8vIERpc2FibGUgTE5BX0xETworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxX1JFRyA9IDB4MDAwMDsgICAvLyBEaXNhYmxlIExOQV9DT1JFCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzJfUkVHID0gMHgwMDAwOyAgIC8vIERpc2FibGUgTE5BX0NHTQorCisgICAgLy8gRENOR0FJTiA9IDMsIERDTlNURVAgPSA1LCBEQ1BBUkNBTF9FTiA9IDAsIERDT0ZGU0VUX1NFTCA9IDAKKyAgICBERU0tPlJGX0RDX09GRlNFVF9DVFJMMl9SRUcgPSAweDAxRDA7CisgICAgLy8gRGlzYWJsZSBhbGwgY2FsaWJyYXRpb25zIGV4Y2VwdCB0aGUgREMtb2Zmc2V0IGNhbC4KKyAgICBSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgPSAweDAwMkM7CisKKyAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFJGX01PREVfT1ZSLCAweDEpOyAgIC8vIE92ZXJydWxlIFJGX01PREUgPC0gQkxFX01PREUKKworICAgIC8vIENsZWFyIGVvLWNhbCBpbnRlcnJ1cHQsIHNvIHRoYXQgbmV3IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFyZWQKKyAgICBSRkNVLT5SRl9JUlFfQ1RSTF9SRUcgPSAweDAwMDA7CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBEQy1vZmZzZXQgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJ0ZWQKKyAgICB3aGlsZSAoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIEVPX0NBTCkpIHt9CisKKyAgICAvLyBTdGFydCB0aGUgbW9kdWxhdGlvbiBnYWluIGNhbGlicmF0aW9uCisgICAgUkVHX1NFVF9CSVQoUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpOworCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgbW9kdWxhdGlvbiBnYWluIGNhbGlicmF0aW9uIGhhcyBzdGFydGVkCisgICAgd2hpbGUgKCEoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCkpKSB7fQorCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgbW9kdWxhdGlvbiBnYWluIGNhbGlicmF0aW9uIGlzIGNvbXBsZXRlZAorICAgIHdoaWxlIChSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKSkge30KKworICAgIC8vIENsZWFyIGVvLWNhbCBpbnRlcnJ1cHQsIHNvIHRoYXQgbmV3IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFydGVkCisgICAgUkZDVS0+UkZfSVJRX0NUUkxfUkVHID0gMHgwMDAwOworCisgICAgLy8gUmVzdG9yZSB0aGUgdmFsdWVzIG9mIHJlZ2lzdGVycyB0aGF0IHdlcmUgY2hhbmdlZCBpbiB0aGUgZnVuY3Rpb24KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMF9SRUcgPSBSRl9FTkFCTEVfQ09ORklHMF9SRUdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfUkVHID0gUkZfRU5BQkxFX0NPTkZJRzFfUkVHX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcyX1JFRyA9IFJGX0VOQUJMRV9DT05GSUcyX1JFR192YWx1ZTsKKworICAgIERFTS0+UkZfRENfT0ZGU0VUX0NUUkwyX1JFRyA9IFJGX0RDX09GRlNFVF9DVFJMMl9SRUdfdmFsdWU7CisgICAgUkZDVS0+UkZfQ0FMX0NUUkxfUkVHID0gcmZfY2FsX2N0cmxfcmVnX3ZhbHVlX2xvY2FsOworICAgIFJGQ1UtPlJGX09WRVJSVUxFX1JFRyA9IHJmX292ZXJydWxlX3JlZ192YWx1ZV9sb2NhbDsKKyNlbmRpZgorfQorCisKKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKK2Jvb2wgaHdfcmZfaWZmX2NhbGlicmF0aW9uKHZvaWQpCit7CisgICAgdWludDY0X3Qgc3RhcnRfdGltZTsKKworICAgIHVpbnQxNl90IGNhbGNhcF9yZXN1bHQ7CisKKyAgICAvLyBTYXZlIHRoZSB2YWx1ZXMgb2YgcmVnaXN0ZXJzIHRoYXQgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBmdW5jdGlvbgorICAgIHVpbnQzMl90IHJmX2NhbF9jdHJsX3JlZ192YWx1ZV9sb2NhbCA9IFJGQ1UtPlJGX0NBTF9DVFJMX1JFRzsKKworICAgIC8vIENvbmZpZ3VyZSB0aGUgcmVmZXJlbmNlIG9zY2lsbGF0b3IgZm9yIHRoZSBjYWxpYnJhdGlvbgorICAgIC8vIDIxLTA0LTIwMTUgOiAgSkggIC0gIFJlbW92ZWQgdG8gdXNlIHByZWZlcnJlZCBzZXR0aW5ncyBpbnN0ZWFkCisgICAgLy91aW50MTZfdCByZWcgPSBSRkNVLT5SRl9SRUZfT1NDX0JMRV9SRUc7CisgICAgLy9SRUdfU0VUX0ZJRUxEKFJGQ1UsIFJGX1JFRl9PU0NfQkxFX1JFRywgQ05UX0NMSywgcmVnLCAweEE2KTsKKyAgICAvL1JFR19TRVRfRklFTEQoUkZDVSwgUkZfUkVGX09TQ19CTEVfUkVHLCBDTlRfUk8sIHJlZywgMHgyQyk7CisgICAgLy9SRkNVLT5SRl9SRUZfT1NDX0JMRV9SRUcgPSByZWc7CisgICAgLy9yZWcgPSBSRkNVLT5SRl9SRUZfT1NDX0ZUREZfUkVHOworICAgIC8vUkVHX1NFVF9GSUVMRChSRkNVLCBSRl9SRUZfT1NDX0ZUREZfUkVHLCBDTlRfQ0xLLCByZWcsIDB4QTYpOworICAgIC8vUkVHX1NFVF9GSUVMRChSRkNVLCBSRl9SRUZfT1NDX0ZUREZfUkVHLCBDTlRfUk8sIHJlZywgMHgyQyk7CisgICAgLy9SRkNVLT5SRl9SRUZfT1NDX0ZUREZfUkVHID0gcmVnOworCisgICAgLy8gU2F2ZSB0aGUgdmFsdWVzIG9mIHJlZ2lzdGVycyB0aGF0IHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgZnVuY3Rpb24KKyAgICB1aW50MzJfdCBSRl9FTkFCTEVfQ09ORklHMF9CTEVfUkVHX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzBfQkxFX1JFRzsKKyAgICB1aW50MzJfdCBSRl9FTkFCTEVfQ09ORklHMV9CTEVfUkVHX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfQkxFX1JFRzsKKyAgICB1aW50MzJfdCBSRl9FTkFCTEVfQ09ORklHMl9CTEVfUkVHX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzJfQkxFX1JFRzsKKyAgICB1aW50MzJfdCBSRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFR192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHOworCisgICAgLy8gUmVxdWlyZWQgc2V0dGluZyBmb3IgdGhlIERDLW9mZnNldCBjYWxpYnJhdGlvbgorICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcwX0JMRV9SRUcgPSAweDAwMDA7ICAgLy8gRGlzYWJsZSBMTkFfTERPCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfQkxFX1JFRyA9IDB4MDAwMDsgICAvLyBEaXNhYmxlIExOQV9DT1JFCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzJfQkxFX1JFRyA9IDB4MDAwMDsgICAvLyBEaXNhYmxlIExOQV9DR00KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRyA9IDB4MDAwMDsgICAgICAgICAgICAgLy8gRGlzYWJsZSB0aGUgRENGIHRyaWdnZXJlZCBQYXJ0aWFsIERDT0MKKworICAgIC8vIERpc2FibGUgYWxsIGNhbGlicmF0aW9ucyBleGNlcHQgdGhlIElmZiBjYWwuCisgICAgUkZDVS0+UkZfQ0FMX0NUUkxfUkVHID0gMHgwMDM0OworICAgIC8vIFNlbGVjdCB0aGUgSUYgY2FsY2FwIHRvIHVzZSB0aGUgRlNNIHZhbHVlCisgICAgUkVHX1NFVF9CSVQoUkZDVSwgUkZfSUZGX0NUUkwxX1JFRywgSUZfU0VMRUNUX0ZTTSk7CisKKyAgICAvLyBDbGVhciBlby1jYWwgaW50ZXJydXB0LCBzbyB0aGF0IG5ldyBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcmVkCisgICAgUkZDVS0+UkZfSVJRX0NUUkxfUkVHID0gMHgwMDAwOworCisKKyAgICBzdGFydF90aW1lID0gaHdfcmZfZ2V0X3N0YXJ0X2lmZl90aW1lKCk7CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBJRkYgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJ0ZWQKKyAgICB3aGlsZSAoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIEVPX0NBTCkpCisgICAgeworICAgICAgICBpZiAoaHdfcmZfY2hlY2tfaWZmX3RpbWVvdXQoc3RhcnRfdGltZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIElGRiBsb2NrdXAgZGV0ZWN0ZWQuIEFib3J0ICovCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIE5ldyBjb2RlIGJ5IFNSIDMvMjMvMjAxNgorICAgICAqIChEaXNhYmxlIHBhcnRpYWwgY2FsaWJyYXRpb24gYmVmb3JlIElGRiBjYWxpYnJhdGlvbnMgc3RhcnRzKQorICAgICAqCisgICAgICogU2F2ZSBjdXJyZW50IGNvbnRlbnQgb2YgUkZfRENfT0ZGU0VUX0NUUmwyX1JFRyBhbmQgc2V0IERDUEFSQ0FMX0VOID0gMAorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgcmZfZGNfb2Zmc2V0X2N0cmwyX3JlZyA9IERFTS0+UkZfRENfT0ZGU0VUX0NUUkwyX1JFRzsgLy9HZXRXb3JkMTYoUkZfRENfT0ZGU0VUX0NUUkwyX1JFRyk7CisgICAgUkVHX0NMUl9CSVQoREVNLCBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHLCBEQ1BBUkNBTF9FTik7CisKKyAgICAvLyBTdGFydCB0aGUgSUZGIGNhbGlicmF0aW9uCisgICAgUkVHX1NFVF9CSVQoUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpOworCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgSUZGIGNhbGlicmF0aW9uIGhhcyBzdGFydGVkCisgICAgd2hpbGUgKCEoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCkpKQorICAgIHsKKyAgICAgICAgaWYgKGh3X3JmX2NoZWNrX2lmZl90aW1lb3V0KHN0YXJ0X3RpbWUpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJRkYgbG9ja3VwIGRldGVjdGVkLiBBYm9ydCAqLworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgSUZGIGNhbGlicmF0aW9uIGlzIGNvbXBsZXRlZAorICAgIHdoaWxlIChSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKSkKKyAgICB7CisgICAgICAgIGlmIChod19yZl9jaGVja19pZmZfdGltZW91dChzdGFydF90aW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogSUZGIGxvY2t1cCBkZXRlY3RlZC4gQWJvcnQgKi8KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENsZWFyIGVvLWNhbCBpbnRlcnJ1cHQsIHNvIHRoYXQgbmV3IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFydGVkCisgICAgUkZDVS0+UkZfSVJRX0NUUkxfUkVHID0gMHgwMDAwOworCisgICAgLy8gU3RvcmUgdGhlIHJlc3VsdCB0byBhbGwgSUZGIENDIHJlZ2lzdGVycworICAgIGNhbGNhcF9yZXN1bHQgPSBSRkNVLT5SRl9JRkZfQ0FMX0NBUF9TVEFUX1JFRzsKKyAgICBSRkNVLT5SRl9JRkZfQ0NfQkxFX1NFVDFfUkVHID0gY2FsY2FwX3Jlc3VsdDsKKyAgICBSRkNVLT5SRl9JRkZfQ0NfQkxFX1NFVDJfUkVHID0gY2FsY2FwX3Jlc3VsdDsKKyAgICBSRkNVLT5SRl9JRkZfQ0NfRlRERl9TRVQxX1JFRyA9IGNhbGNhcF9yZXN1bHQ7CisgICAgUkZDVS0+UkZfSUZGX0NDX0ZUREZfU0VUMl9SRUcgPSBjYWxjYXBfcmVzdWx0OworCisgICAgLy8gUmVzdG9yZSB0aGUgdmFsdWVzIG9mIHJlZ2lzdGVycyB0aGF0IHdlcmUgY2hhbmdlZCBpbiB0aGUgZnVuY3Rpb24KKyAgICBSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgPSByZl9jYWxfY3RybF9yZWdfdmFsdWVfbG9jYWw7CisgICAgLy8gRGUtc2VsZWN0IHRoZSBJRiBjYWxjYXAgdG8gdXNlIHRoZSBGU00gdmFsdWUKKyAgICBSRUdfQ0xSX0JJVChSRkNVLCBSRl9JRkZfQ1RSTDFfUkVHLCBJRl9TRUxFQ1RfRlNNKTsKKworCisgICAgLyoKKyAgICAgKiBOZXcgY29kZSBieSBTUiAzLzIzLzIwMTYKKyAgICAgKiAoRGlzYWJsZSBwYXJ0aWFsIGNhbGlicmF0aW9uIGJlZm9yZSBJRkYgY2FsaWJyYXRpb25zIHN0YXJ0cykKKyAgICAgKgorICAgICAqIFJlc3RvcmUgUkZfRENfT0ZGU0VUX0NUUmwyX1JFRworICAgICAqCisgICAgICovCisgICAgREVNLT5SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHID0gcmZfZGNfb2Zmc2V0X2N0cmwyX3JlZzsKKworICAgIC8vIFJlc3RvcmUgdGhlIHZhbHVlcyBvZiByZWdpc3RlcnMgdGhhdCB3ZXJlIGNoYW5nZWQgaW4gdGhlIGZ1bmN0aW9uCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzBfQkxFX1JFRyA9IFJGX0VOQUJMRV9DT05GSUcwX0JMRV9SRUdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfQkxFX1JFRyA9IFJGX0VOQUJMRV9DT05GSUcxX0JMRV9SRUdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzJfQkxFX1JFRyA9IFJGX0VOQUJMRV9DT05GSUcyX0JMRV9SRUdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUcgPSBSRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFR192YWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbHNlIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0IgKi8KK3N0YXRpYyBib29sIGlmZl9jYWxpYl9pbnRlcm5hbChpZmZfbW9kZV9vdnJfZSByZl9tb2RlX292ciwgaWZmX21vZGVfY3RybF9lIG1vZGVfY3RybCkKK3sKKyAgICB1aW50MTZfdCBjYWxjYXBfcmVzdWx0OworICAgIHVpbnQ2NF90IHN0YXJ0X3RpbWU7CisKKyAgICAvLyBTZXQgbW9kZQorICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgUkZfTU9ERV9PVlIsIHJmX21vZGVfb3ZyKTsKKworICAgIC8vIERpc2FibGUgYWxsIGNhbGlicmF0aW9ucyBleGNlcHQgdGhlIElmZiBjYWwuCisgICAgUkZDVS0+UkZfQ0FMX0NUUkxfUkVHID0gMHgwMDM0OworCisgICAgLy8gU2VsZWN0IHRoZSBJRiBjYWxjYXAgdG8gdXNlIHRoZSBGU00gdmFsdWUKKyAgICBSRUdfU0VUX0JJVChSRkNVLCBSRl9JRkZfQ1RSTDFfUkVHLCBJRl9TRUxFQ1RfRlNNKTsKKworICAgIC8vIENsZWFyIGVvLWNhbCBpbnRlcnJ1cHQsIHNvIHRoYXQgbmV3IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFyZWQKKyAgICBSRkNVLT5SRl9JUlFfQ1RSTF9SRUcgPSAweDAwMDA7CisKKyAgICBzdGFydF90aW1lID0gaHdfcmZfZ2V0X3N0YXJ0X2lmZl90aW1lKCk7CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBJRkYgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJ0ZWQKKyAgICB3aGlsZSAoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIEVPX0NBTCkpCisgICAgeworICAgICAgICBpZiAoaHdfcmZfY2hlY2tfaWZmX3RpbWVvdXQoc3RhcnRfdGltZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIElGRiBsb2NrdXAgZGV0ZWN0ZWQuIEFib3J0ICovCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTdGFydCB0aGUgSUZGIGNhbGlicmF0aW9uCisgICAgUkVHX1NFVF9CSVQoUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpOworCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgSUZGIGNhbGlicmF0aW9uIGhhcyBzdGFydGVkCisgICAgd2hpbGUgKCEoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCkpKQorICAgIHsKKyAgICAgICAgaWYgKGh3X3JmX2NoZWNrX2lmZl90aW1lb3V0KHN0YXJ0X3RpbWUpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJRkYgbG9ja3VwIGRldGVjdGVkLiBBYm9ydCAqLworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgSUZGIGNhbGlicmF0aW9uIGlzIGNvbXBsZXRlZAorICAgIHdoaWxlIChSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKSkKKyAgICB7CisgICAgICAgIGlmIChod19yZl9jaGVja19pZmZfdGltZW91dChzdGFydF90aW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogSUZGIGxvY2t1cCBkZXRlY3RlZC4gQWJvcnQgKi8KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENsZWFyIGVvLWNhbCBpbnRlcnJ1cHQsIHNvIHRoYXQgbmV3IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFydGVkCisgICAgUkZDVS0+UkZfSVJRX0NUUkxfUkVHID0gMHgwMDAwOworCisgICAgLy8gU3RvcmUgdGhlIHJlc3VsdCB0byBhbGwgSUZGIENDIEJMRSByZWdpc3RlcnMKKyAgICBjYWxjYXBfcmVzdWx0ID0gUkZDVS0+UkZfSUZGX0NBTF9DQVBfU1RBVF9SRUc7CisKKyAgICBpZiAobW9kZV9jdHJsICE9IElGRl9NT0RFX0NUUkxfQ09NQk8gfHwgcmZfbW9kZV9vdnIgPT0gSUZGX01PREVfT1ZSX0JMRSkKKyAgICB7CisgICAgICAgIFJGQ1UtPlJGX0lGRl9DQ19CTEVfU0VUMV9SRUcgPSBjYWxjYXBfcmVzdWx0OworICAgICAgICBSRkNVLT5SRl9JRkZfQ0NfQkxFX1NFVDJfUkVHID0gY2FsY2FwX3Jlc3VsdDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1vZGVfY3RybCkKKyAgICB7CisgICAgY2FzZSBJRkZfTU9ERV9DVFJMX0JMRTogLy8gQkxFCisgICAgICAgIFJGQ1UtPlJGX0lGRl9DQ19GVERGX1NFVDFfUkVHID0gY2FsY2FwX3Jlc3VsdCAtIDI7CisgICAgICAgIFJGQ1UtPlJGX0lGRl9DQ19GVERGX1NFVDJfUkVHID0gY2FsY2FwX3Jlc3VsdCAtIDI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJRkZfTU9ERV9DVFJMX0ZUREY6IC8vIEZUREYKKyAgICAgICAgUkZDVS0+UkZfSUZGX0NDX0ZUREZfU0VUMV9SRUcgPSBjYWxjYXBfcmVzdWx0ICsgMjsKKyAgICAgICAgUkZDVS0+UkZfSUZGX0NDX0ZUREZfU0VUMl9SRUcgPSBjYWxjYXBfcmVzdWx0ICsgMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElGRl9NT0RFX0NUUkxfQ09NQk86IC8vIENPTUJPCisgICAgICAgIGlmIChyZl9tb2RlX292ciA9PSBJRkZfTU9ERV9PVlJfRlRERikKKyAgICAgICAgeworICAgICAgICAgICAgUkZDVS0+UkZfSUZGX0NDX0ZUREZfU0VUMV9SRUcgPSBjYWxjYXBfcmVzdWx0OworICAgICAgICAgICAgUkZDVS0+UkZfSUZGX0NDX0ZUREZfU0VUMl9SRUcgPSBjYWxjYXBfcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGh3X3JmX2lmZl9jYWxpYnJhdGlvbihpZmZfbW9kZV9jdHJsX2UgbW9kZV9jdHJsKQoreworICAgIGJvb2wgcmV0OworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLy8gQ2FwYWNpdGFuY2UgY2FsaWJyYXRpb24gZm9yIGRpZmZlcmVudCBtb2RlcworICAgIC8vLyBtb2RlX2N0cmw9MCA6IENhbGlicmF0aW9uIGluIEJMRSBtb2RlLCB1c2Ugb2Zmc2V0dGVkIHZhbHVlcyBpbiBGVERGCisgICAgLy8vIG1vZGVfY3RybD0xIDogQ2FsaWJyYXRpb24gaW4gRlRERiBtb2RlLCB1c2Ugb2Zmc2V0dGVkIHZhbHVlcyBpbiBCTEUKKyAgICAvLy8gbW9kZV9jdHJsPTIgOiBDYWxpYnJhdGlvbiBkb25lIGluIEJMRSBtb2RlIGFuZCBGVERGIG1vZGUKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKyAgICAvLyBTYXZlIHRoZSB2YWx1ZXMgb2YgcmVnaXN0ZXJzIHRoYXQgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBmdW5jdGlvbgorICAgIHVpbnQxNl90IHJmX2NhbF9jdHJsX3JlZ192YWx1ZV9sb2NhbCA9IFJGQ1UtPlJGX0NBTF9DVFJMX1JFRzsKKyAgICB1aW50MTZfdCByZl9vdmVycnVsZV9yZWdfdmFsdWVfbG9jYWwgPSBSRkNVLT5SRl9PVkVSUlVMRV9SRUc7CisgICAgdWludDE2X3QgcmZfZW5hYmxlX2NvbmZpZzBfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzBfUkVHOworICAgIHVpbnQxNl90IHJmX2VuYWJsZV9jb25maWcxX3JlZ192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxX1JFRzsKKyAgICB1aW50MTZfdCByZl9lbmFibGVfY29uZmlnMl9yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMl9SRUc7CisgICAgdWludDE2X3QgcmZfZW5hYmxlX2NvbmZpZzQ2X2JsZV9yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRzsKKyAgICB1aW50MTZfdCByZl9lbmFibGVfY29uZmlnNDZfZnRkZl9yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUc7CisgICAgdWludDE2X3QgcmZfZGNfb2Zmc2V0X2N0cmwyX3JlZ192YWx1ZSA9IERFTS0+UkZfRENfT0ZGU0VUX0NUUkwyX1JFRzsKKworICAgIC8vIFJlcXVpcmVkIHNldHRpbmcgZm9yIHRoZSBEQy1vZmZzZXQgY2FsaWJyYXRpb24KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMF9SRUcgPSAweDAwMDA7ICAgLy8gRGlzYWJsZSBMTkFfTERPCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfUkVHID0gMHgwMDAwOyAgIC8vIERpc2FibGUgTE5BX0NPUkUKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMl9SRUcgPSAweDAwMDA7ICAgLy8gRGlzYWJsZSBMTkFfQ0dNCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUcgPSAweDAwMDA7ICAgICAgICAgICAgIC8vIERpc2FibGUgdGhlIERDRiB0cmlnZ2VyZWQgUGFydGlhbCBEQ09DCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQ2X0ZUREZfUkVHID0gMHgwMDAwOyAgICAgICAgICAgICAvLyBEaXNhYmxlIHRoZSBEQ0YgdHJpZ2dlcmVkIFBhcnRpYWwgRENPQworICAgIFJFR19TRVRGKERFTSwgUkZfRENfT0ZGU0VUX0NUUkwyX1JFRywgRENQQVJDQUxfRU4sIDB4MCk7CisKKworICAgIHN3aXRjaCAobW9kZV9jdHJsKQorICAgIHsKKyAgICBjYXNlIElGRl9NT0RFX0NUUkxfQkxFOiAvLyBCTEUKKyAgICAgICAgcmV0ID0gaWZmX2NhbGliX2ludGVybmFsKElGRl9NT0RFX09WUl9CTEUsIElGRl9NT0RFX0NUUkxfQkxFKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElGRl9NT0RFX0NUUkxfRlRERjogLy8gRlRERgorICAgICAgICByZXQgPSBpZmZfY2FsaWJfaW50ZXJuYWwoSUZGX01PREVfT1ZSX0ZUREYsIElGRl9NT0RFX0NUUkxfRlRERik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJRkZfTU9ERV9DVFJMX0NPTUJPOiAvLyBDT01CTworICAgICAgICByZXQgPSBpZmZfY2FsaWJfaW50ZXJuYWwoSUZGX01PREVfT1ZSX0JMRSwgSUZGX01PREVfQ1RSTF9DT01CTyk7CisKKyAgICAgICAgaWYgKCFyZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IGlmZl9jYWxpYl9pbnRlcm5hbChJRkZfTU9ERV9PVlJfRlRERiwgSUZGX01PREVfQ1RSTF9DT01CTyk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXJldCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXN0b3JlIHRoZSB2YWx1ZXMgb2YgcmVnaXN0ZXJzIHRoYXQgd2VyZSBjaGFuZ2VkIGluIHRoZSBmdW5jdGlvbgorICAgIFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyA9IHJmX2NhbF9jdHJsX3JlZ192YWx1ZV9sb2NhbDsKKyAgICBSRkNVLT5SRl9PVkVSUlVMRV9SRUcgPSByZl9vdmVycnVsZV9yZWdfdmFsdWVfbG9jYWw7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzBfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzBfcmVnX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxX1JFRyA9IHJmX2VuYWJsZV9jb25maWcxX3JlZ192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMl9SRUcgPSByZl9lbmFibGVfY29uZmlnMl9yZWdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUcgPSByZl9lbmFibGVfY29uZmlnNDZfYmxlX3JlZ192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUcgPSByZl9lbmFibGVfY29uZmlnNDZfZnRkZl9yZWdfdmFsdWU7CisgICAgREVNLT5SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHID0gcmZfZGNfb2Zmc2V0X2N0cmwyX3JlZ192YWx1ZTsKKworICAgIC8vIERlLXNlbGVjdCB0aGUgSUYgY2FsY2FwIHRvIHVzZSB0aGUgRlNNIHZhbHVlCisgICAgUkVHX0NMUl9CSVQoUkZDVSwgUkZfSUZGX0NUUkwxX1JFRywgSUZfU0VMRUNUX0ZTTSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitib29sIGh3X3JmX2NhbGlicmF0aW9uKHZvaWQpCit7CisgICAgYm9vbCBpZmZfcmVzdWx0OworCisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgaHdfcmZfZGNfb2Zmc2V0X2NhbGlicmF0aW9uKCk7CisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgIGlmZl9yZXN1bHQgPSBod19yZl9pZmZfY2FsaWJyYXRpb24oKTsKKyNlbHNlCisjaWYgZGVmaW5lZChDT05GSUdfVVNFX0ZUREYpICYmIGRlZmluZWQoQ09ORklHX1VTRV9CTEUpCisgICAgaWZmX3Jlc3VsdCA9IGh3X3JmX2lmZl9jYWxpYnJhdGlvbigweDIpOworI2VsaWYgZGVmaW5lZChDT05GSUdfVVNFX0JMRSkKKyAgICBpZmZfcmVzdWx0ID0gaHdfcmZfaWZmX2NhbGlicmF0aW9uKDB4MCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19VU0VfRlRERikKKyAgICBpZmZfcmVzdWx0ID0gaHdfcmZfaWZmX2NhbGlicmF0aW9uKDB4MSk7CisjZW5kaWYKKyNlbmRpZgorCisgICAgaWYgKGlmZl9yZXN1bHQpCisgICAgeworI2lmZGVmIENPTkZJR19VU0VfRlRERgorICAgICAgICBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb24oMCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQorICAgICAgICBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb24oMSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKworICAgIHJldHVybiBpZmZfcmVzdWx0OworfQorCit2b2lkIGh3X3JmX3JlcXVlc3Rfb24oYm9vbCBtb2RlX2JsZSkKK3sKKyAgICAvKiBGaXJzdCBSRiByZXF1ZXN0ZXIuIFN3aXRjaCBpdCBvbiAqLworICAgIGlmIChyZl9yZXF1ZXN0ID09IDApCisgICAgeworICAgICAgICBpZiAocmZfc3RhdGUgPT0gUkZfU1RfT0ZGKQorICAgICAgICB7CisgICAgICAgICAgICBod19yZl9wb3dlcm9uKCk7CisgICAgICAgICAgICByZl9zdGF0ZSA9IFJGX1NUX09OOworI2lmIGRnX2NvbmZpZ0NPRVhfRU5BQkxFX0NPTkZJRyA9PSAxCisgICAgICAgICAgICBod19jb2V4X2FwcGx5X2NvbmZpZygpOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobW9kZV9ibGUpCisgICAgeworICAgICAgICByZl9yZXF1ZXN0IHw9IFJGX1JFUVVFU1RfQkxFX09OOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZl9yZXF1ZXN0IHw9IFJGX1JFUVVFU1RfRlRERl9PTjsKKyAgICB9CisKK30KKworCit2b2lkIGh3X3JmX3JlcXVlc3Rfb2ZmKGJvb2wgbW9kZV9ibGUpCit7CisgICAgaWYgKG1vZGVfYmxlKQorICAgIHsKKyAgICAgICAgcmZfcmVxdWVzdCAmPSB+UkZfUkVRVUVTVF9CTEVfT047CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJmX3JlcXVlc3QgJj0gflJGX1JFUVVFU1RfRlRERl9PTjsKKyAgICB9CisKKyAgICAvKiBJZiBub3QgYWxyZWFkeSBvZmYgb3IgZHVyaW5nIHJlY2FsaWJyYXRpb24uLi4gKi8KKyAgICBpZiAocmZfc3RhdGUgPT0gUkZfU1RfT04gfHwgcmZfc3RhdGUgPT0gUkZfU1RfQ09ORklHKQorICAgIHsKKyAgICAgICAgLyogSWYgbm90IFJGIHJlcXVlc3RlcnMgcmVtYWluLCBzd2l0Y2ggaXQgb2ZmICovCisgICAgICAgIGlmIChyZl9yZXF1ZXN0ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIElmIHVzZXIgcHJlLW9mZiBjYiByZXR1cm5zIHRydWUsIGRvbid0IHNodXRkb3duICovCisgICAgICAgICAgICBpZiAoaHdfcmZfcHJlb2ZmX2NiKCkgPT0gZmFsc2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaHdfcmZfcG93ZXJvZmYoKTsKKyAgICAgICAgICAgICAgICByZl9zdGF0ZSA9IFJGX1NUX09GRjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworCitib29sIGh3X3JmX3N0YXJ0X2NhbGlicmF0aW9uKCkKK3sKKyAgICBib29sIGlmZl9yZXN1bHQ7CisKKyAgICBpZiAocmZfc3RhdGUgPT0gUkZfU1RfQ09ORklHKQorICAgIHsKKyAgICAgICAgLyogQ2FsbCBwcmUtY2FsaWJyYXRpb24gdXNlciBjYiAqLworICAgICAgICBod19yZl9wcmVjYWxpYl9jYigpOworCisgICAgICAgIC8qIGZvcmNlIFJBRElPX0JVU1kgdG8gQkxFIHRvIDAgKi8KKyAgICAgICAgUkVHX1NFVEYoQ09FWCwgQ09FWF9DVFJMX1JFRywgU0VMX0JMRV9SQURJT19CVVNZLCAxKTsKKyAgICAgICAgLyogSWdub3JlIEJMRS9GVERGIFRYL1JYX0VOICovCisgICAgICAgIFJFR19TRVRfQklUKENPRVgsIENPRVhfQ1RSTF9SRUcsIElHTk9SRV9CTEUpOworICAgICAgICBSRUdfU0VUX0JJVChDT0VYLCBDT0VYX0NUUkxfUkVHLCBJR05PUkVfRlRERik7CisKKyAgICAgICAgLyogV2FpdCB1bnRpbCBEQ0ZzIGhhdmUgc2V0dGxlZCAqLworICAgICAgICB3aGlsZSAoUkVHX0dFVEYoQ09FWCwgQ09FWF9TVEFUX1JFRywgQ09FWF9SQURJT19CVVNZKSk7CisKKyAgICAgICAgLyogUGVyZm9ybSBEQyBvZmZzZXQgY2FsaWJyYXRpb24gKi8KKyAgICAgICAgaHdfcmZfZGNfb2Zmc2V0X2NhbGlicmF0aW9uKCk7CisKKyAgICAgICAgLyogUGVyZm9ybSBJRkYgY2FsaWJyYXRpb24gKi8KKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgICAgIGlmZl9yZXN1bHQgPSBod19yZl9pZmZfY2FsaWJyYXRpb24oKTsKKyNlbHNlIC8qIEJMQUNLX09SQ0FfSUNfUkVWX0IgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19VU0VfRlRERikgJiYgZGVmaW5lZChDT05GSUdfVVNFX0JMRSkKKyAgICAgICAgaWZmX3Jlc3VsdCA9IGh3X3JmX2lmZl9jYWxpYnJhdGlvbigweDIpOworI2VsaWYgZGVmaW5lZChDT05GSUdfVVNFX0JMRSkKKyAgICAgICAgaWZmX3Jlc3VsdCA9IGh3X3JmX2lmZl9jYWxpYnJhdGlvbigweDApOworI2VsaWYgZGVmaW5lZChDT05GSUdfVVNFX0ZUREYpCisgICAgICAgIGlmZl9yZXN1bHQgPSBod19yZl9pZmZfY2FsaWJyYXRpb24oMHgxKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICAgICAgaWYgKGlmZl9yZXN1bHQgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIE5WSUNfRW5hYmxlSVJRKFJGQ0FMX0lSUW4pOworCisjaWYgZGVmaW5lZChDT05GSUdfVVNFX0ZUREYpICYmIGRlZmluZWQoQ09ORklHX1VTRV9CTEUpCisgICAgICAgIC8qIFN0YXJ0IHRoZSBnYWluIGNhbGlicmF0aW9uLCBvbiBmdGRmIG1vZGUgKi8KKyAgICAgICAgaHdfcmZfbW9kdWxhdGlvbl9nYWluX2NhbGlicmF0aW9uX3N0YXJ0KDApOworICAgICAgICByZl9zdGF0ZSA9IFJGX1NUX1dBSVRfTkVYVDE7CisjZWxpZiBkZWZpbmVkKENPTkZJR19VU0VfRlRERikKKyAgICAgICAgLyogU3RhcnQgdGhlIGdhaW4gY2FsaWJyYXRpb24sIG9uIGZ0ZGYgbW9kZSAqLworICAgICAgICBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb25fc3RhcnQoMCk7CisgICAgICAgIHJmX3N0YXRlID0gUkZfU1RfV0FJVF9ORVhUMjsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1VTRV9CTEUpCisgICAgICAgIC8qIFN0YXJ0IHRoZSBnYWluIGNhbGlicmF0aW9uLCBvbiBibGUgbW9kZSAqLworICAgICAgICBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb25fc3RhcnQoMSk7CisgICAgICAgIHJmX3N0YXRlID0gUkZfU1RfV0FJVF9ORVhUMjsKKyNlbmRpZgorCisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUkZDQUxfSGFuZGxlcih2b2lkKQoreworICAgIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FTlRFUigpOworCisgICAgdWludDMyX3QgaXNlcjsKKworICAgIC8qIEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZC4gSG93ZXZlciwgc29tZSBjYWxsYmFja3MgYWN0dWFsbHkKKyAgICAgKiB1c2UgRnJlZVJUT1MgY3JpdGljYWwgc2VjdGlvbnMuIFRvIG92ZXJjb21lIHRoaXMgcHJvYmxlbS4gdXNlCisgICAgICogSVNFUi9JQ0VSIHRvIGVuYWJsZS9kaXNhYmxlIGludGVycnVwdHMKKyAgICAgKi8KKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBpc2VyID0gTlZJQy0+SVNFUlswXTs7CisgICAgTlZJQy0+SUNFUlswXSA9IGlzZXI7CisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisKKyAgICBzd2l0Y2ggKHJmX3N0YXRlKQorICAgIHsKKyAgICBjYXNlIFJGX1NUX1dBSVRfTkVYVDE6CisKKyAgICAgICAgLyogRlRERiBnYWluIGNhbGliIChib290KSBjb21wbGV0ZWQuIFByb2NlZWQgd2l0aCBibGUgZ2FpbgorICAgICAgICAgKiBjYWxpYgorICAgICAgICAgKi8KKyAgICAgICAgd2hpbGUgKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpKSB7fQorCisgICAgICAgIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbl9lbmQoKTsKKworICAgICAgICAvKiBNYWtlIHN1cmUgUkZDQUwgSVJRIHdpbGwgYmUgZW5hYmxlZCB3aGVuIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KKyAgICAgICAgaXNlciB8PSAoKHVpbnQzMl90KSgxIDw8IFJGQ0FMX0lSUW4pKTsKKworICAgICAgICAvKiBTdGFydCB0aGUgZ2FpbiBjYWxpYnJhdGlvbiwgb24gYmxlIG1vZGUgKi8KKyAgICAgICAgaHdfcmZfbW9kdWxhdGlvbl9nYWluX2NhbGlicmF0aW9uX3N0YXJ0KDEpOworCisgICAgICAgIHJmX3N0YXRlID0gUkZfU1RfV0FJVF9ORVhUMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJGX1NUX1dBSVRfTkVYVDI6CisKKyAgICAgICAgLyogQkxFIChvciBmdGRmKSBnYWluIGNhbGliIChib290KSBjb21wbGV0ZWQuCisgICAgICAgICAqLworICAgICAgICB3aGlsZSAoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCkpIHt9CisKKyAgICAgICAgaHdfcmZfbW9kdWxhdGlvbl9nYWluX2NhbGlicmF0aW9uX2VuZCgpOworCisgICAgICAgIC8qIE1ha2Ugc3VyZSBSRkNBTCBJUlEgd2lsbCBiZSBkaXNhYmxlZCB3aGVuIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KKyAgICAgICAgaXNlciAmPSB+KCh1aW50MzJfdCkoMSA8PCBSRkNBTF9JUlFuKSk7CisKKyAgICAgICAgLyogUmVzdG9yZSBzdGF0ZSB0byBub3JtYWwgQkxFL0ZUREYgTUFDIG9wZXJhdGlvbiAqLworICAgICAgICBSRUdfQ0xSX0JJVChDT0VYLCBDT0VYX0NUUkxfUkVHLCBJR05PUkVfQkxFKTsKKyAgICAgICAgUkVHX0NMUl9CSVQoQ09FWCwgQ09FWF9DVFJMX1JFRywgSUdOT1JFX0ZUREYpOworICAgICAgICBSRUdfU0VURihDT0VYLCBDT0VYX0NUUkxfUkVHLCBTRUxfQkxFX1JBRElPX0JVU1ksIDApOworCisgICAgICAgIC8qIENhbGlicmF0aW9uIGNvbXBsZXRlLiAqLworICAgICAgICAvKiBDYWxsIHBvc3QtY2FsaWJyYXRpb24gdXNlciBjYiAqLworICAgICAgICBod19yZl9wb3N0Y2FsaWJfY2IoKTsKKworICAgICAgICAvKiBDaGVjayBpZiBSRiBpcyBzdGlsbCBuZWVkZWQgb24sCisgICAgICAgICAqIG90aGVyd2lzZSwgc3dpdGNoIGl0IG9mZgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHJmX3JlcXVlc3QgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaHdfcmZfcG93ZXJvZmYoKTsKKyAgICAgICAgICAgIHJmX3N0YXRlID0gUkZfU1RfT0ZGOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmZfc3RhdGUgPSBSRl9TVF9DT05GSUc7CisgICAgICAgICAgICBod19yZl9wb3N0Y29uZl9jYigpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBSZS1lbmFibGUgaW50ZXJydXB0cyAqLworICAgIE5WSUMtPklTRVJbMF0gPSBpc2VyOworCisgICAgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VYSVQoKTsKK30KKwordm9pZCBod19yZl9yZXF1ZXN0X3JlY29tbWVuZGVkX3NldHRpbmdzKHZvaWQpCit7CisgICAgaWYgKHJmX3N0YXRlID09IFJGX1NUX09OKQorICAgIHsKKyAgICAgICAgaHdfcmZfYXBwbHlfdGNzX2NiKCk7CisgICAgICAgIGh3X3JmX3NldF9yZWNvbW1lbmRlZF9zZXR0aW5ncygpOworCisgICAgICAgIC8qIEluaXRpYWxpemUgVFggUG93ZXIgTFVUcyAqLworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICAgICAgaHdfcmZfc2V0X3R4X3Bvd2VyKHJmX3R4X3Bvd2VyX2x1dHMudHhfcG93ZXJfYmxlKTsKKyNlbHNlCisjaWZkZWYgQ09ORklHX1VTRV9CTEUKKyAgICAgICAgaHdfcmZfc2V0X3R4X3Bvd2VyX2JsZShyZl90eF9wb3dlcl9sdXRzLnR4X3Bvd2VyX2JsZSk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKKyAgICAgICAgaHdfcmZfc2V0X3R4X3Bvd2VyX2Z0ZGYocmZfdHhfcG93ZXJfbHV0cy50eF9wb3dlcl9mdGRmKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICAgICAgcmZfc3RhdGUgPSBSRl9TVF9DT05GSUc7CisgICAgICAgIGh3X3JmX3Bvc3Rjb25mX2NiKCk7CisgICAgfQorfQorCitib29sIF9fYXR0cmlidXRlX18oKHdlYWspKSBod19yZl9wcmVvZmZfY2Iodm9pZCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgaHdfcmZfc3RhcnRfY29udGludW91c193YXZlKHVpbnQ4X3QgbW9kZSwgdWludDhfdCBjaCkKK3sKKyAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFRYX0VOX09WUiwgMSk7ICAvLyBkaXNhYmxlIFRYIG92ZXJydWxlCisgICAgUkVHX1NFVEYoUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCBUWF9FTl9PVlIsIDApOyAgLy8gTk9STUFMIFRYCisKKyAgICBSRUdfU0VURihQTExESUcsIFJGX0JNQ1dfUkVHLCBDTl9TRUwsIDEpOworICAgIFJFR19TRVRGKFBMTERJRywgUkZfQk1DV19SRUcsIENOX1dSLCBjaCk7CisKKyAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFJGX01PREVfT1ZSLCBtb2RlKTsKKyAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFRYX0VOX09WUiwgMik7ICAvLyBPVkVSUlVMRSBUWCBFTkFCTEVECit9CisKK3ZvaWQgaHdfcmZfc3RvcF9jb250aW51b3VzX3dhdmUodm9pZCkKK3sKKyAgICBSRUdfU0VURihQTExESUcsIFJGX0JNQ1dfUkVHLCBDTl9TRUwsIDApOworICAgIFJFR19TRVRGKFBMTERJRywgUkZfQk1DV19SRUcsIENOX1dSLCAgMCk7CisKKyAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFRYX0VOX09WUiwgMSk7ICAvLyBkaXNhYmxlIFRYIG92ZXJydWxlCisgICAgUkVHX1NFVEYoUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCBUWF9FTl9PVlIsIDApOyAgLy8gTk9STUFMIFRYCisgICAgUkVHX1NFVEYoUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCBSRl9NT0RFX09WUiwgMCk7IC8vIE5PUk1BTCBSRiBtb2RlLCBzbyBkaXNhYmxlIEJMRSBtb2RlCit9CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCit2b2lkIGh3X3JmX3NldF90eF9wb3dlcihIV19SRl9QV1JfTFVUX1NFVFRJTkcgbHV0KQoreworICAgIFJGQ1UtPlJGX1RYX1BXUl9SRUcgPSBsdXQ7CisgICAgcmZfdHhfcG93ZXJfbHV0cy50eF9wb3dlcl9ibGUgPSBsdXQ7Cit9CisjZWxzZQorCisjaWZkZWYgQ09ORklHX1VTRV9CTEUKK3ZvaWQgaHdfcmZfc2V0X3R4X3Bvd2VyX2JsZShIV19SRl9QV1JfTFVUX1NFVFRJTkcgbHV0KQoreworICAgIFJGQ1UtPlJGX1RYX1BXUl9CTEVfUkVHID0gbHV0OworICAgIHJmX3R4X3Bvd2VyX2x1dHMudHhfcG93ZXJfYmxlID0gbHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKK3ZvaWQgaHdfcmZfc2V0X3R4X3Bvd2VyX2Z0ZGYoSFdfUkZfUFdSX0xVVF9TRVRUSU5HIGx1dCkKK3sKKyAgICBSRkNVLT5SRl9UWF9QV1JfRlRERl9SRUcgPSBsdXQ7CisgICAgcmZfdHhfcG93ZXJfbHV0cy50eF9wb3dlcl9mdGRmID0gbHV0OworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BICovCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX1JGICovCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3RpbWVyMC5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3RpbWVyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3Y2ZmNGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfdGltZXIwLmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIFRpbWVyMAorICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfdGltZXIwLmMKKyAqCisgKiBAYnJpZWYgSW1wbGVtZW50YXRpb24gb2YgdGhlIFRpbWVyMCBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWYgZGdfY29uZmlnVVNFX0hXX1RJTUVSMAorCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHNka19kZWZzLmg+CisjaW5jbHVkZSA8aHdfdGltZXIwLmg+CisKKyNpZiAoZGdfY29uZmlnU1lTVEVNVklFVykKKyMgIGluY2x1ZGUgIlNFR0dFUl9TWVNWSUVXX0ZyZWVSVE9TLmgiCisjZWxzZQorIyAgZGVmaW5lIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FTlRFUigpCisjICBkZWZpbmUgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VYSVQoKQorI2VuZGlmCisKK3N0YXRpYyBod190aW1lcjBfaW50ZXJydXB0X2NiIGludHJfY2I7CisKK3ZvaWQgaHdfdGltZXIwX2luaXQoY29uc3QgdGltZXIwX2NvbmZpZyAqY2ZnKQoreworICAgIC8qIEVuYWJsZSBjbG9jayBmb3IgcGVyaXBoZXJhbCAqLworICAgIHVpbnQzMl90IGNsa190bXJfcmVnID0gQ1JHX1RPUC0+Q0xLX1RNUl9SRUc7CisgICAgY2xrX3Rtcl9yZWcgJj0gfkNSR19UT1BfQ0xLX1RNUl9SRUdfVE1SMF9ESVZfTXNrOworICAgIGNsa190bXJfcmVnICY9IH5DUkdfVE9QX0NMS19UTVJfUkVHX1RNUjBfQ0xLX1NFTF9Nc2s7CisgICAgY2xrX3Rtcl9yZWcgfD0gQ1JHX1RPUF9DTEtfVE1SX1JFR19UTVIwX0VOQUJMRV9Nc2s7CisgICAgQ1JHX1RPUC0+Q0xLX1RNUl9SRUcgPSBjbGtfdG1yX3JlZyA7CisKKyAgICAvKiBSZXNldCBjb250cm9sIHJlZ2lzdGVyLCBpLmUuIGRpc2FibGUgdGltZXIgKi8KKyAgICBHUF9USU1FUlMtPlRJTUVSMF9DVFJMX1JFRyA9IDB4MDsKKworICAgIC8qIERpc2FibGUgTlZJQyBpbnRlcnJ1cHQgKi8KKyAgICBOVklDX0Rpc2FibGVJUlEoU1dUSU0wX0lSUW4pOworCisgICAgaW50cl9jYiA9IE5VTEw7CisKKyAgICBod190aW1lcjBfY29uZmlndXJlKGNmZyk7Cit9CisKK3ZvaWQgaHdfdGltZXIwX2NvbmZpZ3VyZShjb25zdCB0aW1lcjBfY29uZmlnICpjZmcpCit7CisgICAgaWYgKGNmZykKKyAgICB7CisgICAgICAgIGh3X3RpbWVyMF9zZXRfY2xvY2tfc291cmNlKGNmZy0+Y2xrX3NyYyk7CisgICAgICAgIGh3X3RpbWVyMF9zZXRfZmFzdF9jbG9ja19kaXYoY2ZnLT5mYXN0X2Nsa19kaXYpOworICAgICAgICBod190aW1lcjBfc2V0X29uX2Nsb2NrX2RpdihjZmctPm9uX2Nsb2NrX2Rpdik7CisgICAgICAgIGh3X3RpbWVyMF9zZXRfb25fcmVsb2FkKGNmZy0+b25fcmVsb2FkKTsKKyAgICAgICAgaHdfdGltZXIwX3NldF90MF9yZWxvYWQoY2ZnLT50MF9yZWxvYWRfbSwgY2ZnLT50MF9yZWxvYWRfbik7CisgICAgfQorfQorCit2b2lkIGh3X3RpbWVyMF9yZWdpc3Rlcl9pbnQoaHdfdGltZXIwX2ludGVycnVwdF9jYiBoYW5kbGVyKQoreworICAgIGludHJfY2IgPSBoYW5kbGVyOworICAgIE5WSUNfRW5hYmxlSVJRKFNXVElNMF9JUlFuKTsKK30KKwordm9pZCBod190aW1lcjBfdW5yZWdpc3Rlcl9pbnQodm9pZCkKK3sKKyAgICBOVklDX0Rpc2FibGVJUlEoU1dUSU0wX0lSUW4pOworICAgIGludHJfY2IgPSBOVUxMOworfQorCit2b2lkIFNXVElNMF9IYW5kbGVyKHZvaWQpCit7CisgICAgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VOVEVSKCk7CisKKyAgICBpZiAoaW50cl9jYikKKyAgICB7CisgICAgICAgIGludHJfY2IoKTsKKyAgICB9CisKKyAgICBTRUdHRVJfU1lTVEVNVklFV19JU1JfRVhJVCgpOworfQorCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX1RJTUVSMCAqLworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od190cm5nLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfdHJuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1M2RlY2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfdHJuZy5jCkBAIC0wLDAgKzEsMTMxIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfdHJuZy5jCisgKgorICogQGJyaWVmIEltcGxlbWVudGF0aW9uIG9mIHRoZSBUcnVlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZiBkZ19jb25maWdVU0VfSFdfVFJORworCisjaW5jbHVkZSA8aHdfdHJuZy5oPgorCisjaWYgKGRnX2NvbmZpZ1NZU1RFTVZJRVcpCisjICBpbmNsdWRlICJTRUdHRVJfU1lTVklFV19GcmVlUlRPUy5oIgorI2Vsc2UKKyMgIGRlZmluZSBTRUdHRVJfU1lTVEVNVklFV19JU1JfRU5URVIoKQorIyAgZGVmaW5lIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FWElUKCkKKyNlbmRpZgorCisjZGVmaW5lIEhXX1RSTkdfRklGT19ERVBUSCAgICAgICgzMikKKworc3RhdGljIGh3X3RybmdfY2IgdHJuZ19jYjsKKwordm9pZCBod190cm5nX2Rpc2FibGVfY2xrKHZvaWQpCit7CisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBUUk5HX0NMS19FTkFCTEUpOworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCit2b2lkIGh3X3RybmdfY2xlYXJfcGVuZGluZyh2b2lkKQoreworICAgIHVpbnQzMl90IGR1bW15IF9fYXR0cmlidXRlX18oKHVudXNlZCkpOworICAgIC8qIHJlYWQgVFJOR19GSUZPTFZMX1JFRyB0byBjbGVhciBsZXZlbC1zZW5zaXRpdmUgc291cmNlLiAqLworICAgIGR1bW15ID0gVFJORy0+VFJOR19GSUZPTFZMX1JFRzsKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShUUk5HX0lSUW4pOworfQorCit2b2lkIGh3X3RybmdfZW5hYmxlKGh3X3RybmdfY2IgY2FsbGJhY2spCit7CisgICAgaWYgKGNhbGxiYWNrICE9IE5VTEwpCisgICAgeworICAgICAgICB0cm5nX2NiID0gY2FsbGJhY2s7CisgICAgICAgIGh3X3RybmdfY2xlYXJfcGVuZGluZygpOworICAgICAgICBOVklDX0VuYWJsZUlSUShUUk5HX0lSUW4pOworICAgIH0KKworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIFJFR19TRVRfQklUKENSR19UT1AsIENMS19BTUJBX1JFRywgVFJOR19DTEtfRU5BQkxFKTsKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyAgICBSRUdfU0VUX0JJVChUUk5HLCBUUk5HX0NUUkxfUkVHLCBUUk5HX0VOQUJMRSk7Cit9CisKK3ZvaWQgaHdfdHJuZ19nZXRfbnVtYmVycyh1aW50MzJfdCAqYnVmZmVyLCB1aW50OF90IHNpemUpCit7CisgICAgaWYgKHNpemUgPiBIV19UUk5HX0ZJRk9fREVQVEgpCisgICAgeworICAgICAgICBzaXplID0gSFdfVFJOR19GSUZPX0RFUFRIOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZSA7IGkrKykKKyAgICB7CisgICAgICAgIGJ1ZmZlcltpXSA9IGh3X3RybmdfZ2V0X251bWJlcigpOworICAgIH0KK30KKworX19SRVRBSU5FRF9DT0RFIHVpbnQ4X3QgaHdfdHJuZ19nZXRfZmlmb19sZXZlbCh2b2lkKQoreworICAgIHJldHVybiAoVFJORy0+VFJOR19GSUZPTFZMX1JFRykgJiAoUkVHX01TSyhUUk5HLCBUUk5HX0ZJRk9MVkxfUkVHLCBUUk5HX0ZJRk9MVkwpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soVFJORywgVFJOR19GSUZPTFZMX1JFRywgVFJOR19GSUZPRlVMTCkpOworfQorCit2b2lkIGh3X3RybmdfZGlzYWJsZV9pbnRlcnJ1cHQodm9pZCkKK3sKKyAgICBOVklDX0Rpc2FibGVJUlEoVFJOR19JUlFuKTsKKyAgICB0cm5nX2NiID0gTlVMTDsKK30KKwordm9pZCBod190cm5nX2Rpc2FibGUodm9pZCkKK3sKKyAgICBod190cm5nX3N0b3AoKTsKKyAgICBod190cm5nX2Rpc2FibGVfaW50ZXJydXB0KCk7CisgICAgaHdfdHJuZ19jbGVhcl9wZW5kaW5nKCk7CisgICAgaHdfdHJuZ19kaXNhYmxlX2NsaygpOworfQorCit2b2lkIFRSTkdfSGFuZGxlcih2b2lkKQoreworICAgIHVpbnQzMl90IGR1bW15IF9fYXR0cmlidXRlX18oKHVudXNlZCkpOworCisgICAgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VOVEVSKCk7CisKKyAgICBpZiAodHJuZ19jYiAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgdHJuZ19jYigpOworICAgIH0KKworICAgIC8qIHJlYWQgVFJOR19GSUZPTFZMX1JFRyB0byBjbGVhciBsZXZlbC1zZW5zaXRpdmUgc291cmNlLiAqLworICAgIGR1bW15ID0gVFJORy0+VFJOR19GSUZPTFZMX1JFRzsKKworICAgIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FWElUKCk7Cit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfVFJORyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3VhcnQuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od191YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2MmI1YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od191YXJ0LmMKQEAgLTAsMCArMSwxNjAzIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBVQVJUCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod191YXJ0LmMKKyAqCisgKiBAYnJpZWYgSW1wbGVtZW50YXRpb24gb2YgdGhlIFVBUlQgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19VQVJUCisKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGNvcmVfY20wLmg+CisjaW5jbHVkZSA8aHdfdWFydC5oPgorCisjaWYgKGRnX2NvbmZpZ1NZU1RFTVZJRVcpCisjICBpbmNsdWRlICJTRUdHRVJfU1lTVklFV19GcmVlUlRPUy5oIgorI2Vsc2UKKyMgIGRlZmluZSBTRUdHRVJfU1lTVEVNVklFV19JU1JfRU5URVIoKQorIyAgZGVmaW5lIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FWElUKCkKKyNlbmRpZgorCisjaWYgKGRnX2NvbmZpZ1VBUlQxX1NPRlRXQVJFX0ZJRk9fU0laRSAmJiBkZ19jb25maWdVQVJUX1NPRlRXQVJFX0ZJRk8pCisjaWYgZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEgJiYgKGRnX2NvbmZpZ1VBUlQxX1JYX0NJUkNVTEFSX0RNQV9CVUZfU0laRSA+IDApCisjZXJyb3IgVUFSVDEgY2FuIG5vdCBiZSBjb25maWd1cmVkIHRvIHVzZSBzb2Z0d2FyZSBGSUZPIGFuZCBjaXJjdWxhciBETUEgRklGTyBhdCB0aGUgc2FtZSB0aW1lCisjZW5kaWYKK19fUkVUQUlORUQgc3RhdGljIHVpbnQ4X3QgdWFydDFfc3dfZmlmb1tkZ19jb25maWdVQVJUMV9TT0ZUV0FSRV9GSUZPX1NJWkVdOworI2Vsc2UKKyNkZWZpbmUgdWFydDFfc3dfZmlmbyAgIChOVUxMKQorI2VuZGlmCisKKyNpZiAoZGdfY29uZmlnVUFSVDJfU09GVFdBUkVfRklGT19TSVpFICYmIGRnX2NvbmZpZ1VBUlRfU09GVFdBUkVfRklGTykKKyNpZiBkZ19jb25maWdVQVJUX1JYX0NJUkNVTEFSX0RNQSAmJiAoZGdfY29uZmlnVUFSVDJfUlhfQ0lSQ1VMQVJfRE1BX0JVRl9TSVpFID4gMCkKKyNlcnJvciBVQVJUMiBjYW4gbm90IGJlIGNvbmZpZ3VyZWQgdG8gdXNlIHNvZnR3YXJlIEZJRk8gYW5kIGNpcmN1bGFyIERNQSBGSUZPIGF0IHRoZSBzYW1lIHRpbWUKKyNlbmRpZgorX19SRVRBSU5FRCBzdGF0aWMgdWludDhfdCB1YXJ0Ml9zd19maWZvW2RnX2NvbmZpZ1VBUlQyX1NPRlRXQVJFX0ZJRk9fU0laRV07CisjZWxzZQorI2RlZmluZSB1YXJ0Ml9zd19maWZvICAgKE5VTEwpCisjZW5kaWYKKworI2lmIGRnX2NvbmZpZ1VBUlQxX1NPRlRXQVJFX0ZJRk9fU0laRSA+IDI1NSB8fCBkZ19jb25maWdVQVJUMl9TT0ZUV0FSRV9GSUZPX1NJWkUgPiAyNTUKK3R5cGVkZWYgdWludDE2X3QgZmlmb19zaXplX3Q7CisjZWxzZQordHlwZWRlZiB1aW50OF90IGZpZm9fc2l6ZV90OworI2VuZGlmCisKKyNpZiBkZ19jb25maWdVQVJUMV9TT0ZUV0FSRV9GSUZPX1NJWkUgPiAyNTYgfHwgZGdfY29uZmlnVUFSVDJfU09GVFdBUkVfRklGT19TSVpFID4gMjU2Cit0eXBlZGVmIHVpbnQxNl90IGZpZm9fcHRyX3Q7CisjZWxzZQordHlwZWRlZiB1aW50OF90IGZpZm9fcHRyX3Q7CisjZW5kaWYKKworI2lmIGRnX2NvbmZpZ1VBUlRfUlhfQ0lSQ1VMQVJfRE1BCisKKyNpZiAhSFdfVUFSVF9VU0VfRE1BX1NVUFBPUlQKKyMgICAgICAgZXJyb3IgImRnX2NvbmZpZ1VBUlRfUlhfQ0lSQ1VMQVJfRE1BIHJlcXVpcmVzIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUIHRvIGJlIGVuYWJsZWQhIgorI2VuZGlmCisKKyNpZiBkZ19jb25maWdVQVJUMV9SWF9DSVJDVUxBUl9ETUFfQlVGX1NJWkUgPiAwCitfX1JFVEFJTkVEIHN0YXRpYyB1aW50OF90IHVhcnQxX3J4X2RtYV9idWZbZGdfY29uZmlnVUFSVDFfUlhfQ0lSQ1VMQVJfRE1BX0JVRl9TSVpFXTsKKyNlbHNlCisjZGVmaW5lIHVhcnQxX3J4X2RtYV9idWYgKE5VTEwpCisjZW5kaWYKKworI2lmIGRnX2NvbmZpZ1VBUlQyX1JYX0NJUkNVTEFSX0RNQV9CVUZfU0laRSA+IDAKK19fUkVUQUlORUQgc3RhdGljIHVpbnQ4X3QgdWFydDJfcnhfZG1hX2J1ZltkZ19jb25maWdVQVJUMl9SWF9DSVJDVUxBUl9ETUFfQlVGX1NJWkVdOworI2Vsc2UKKyNkZWZpbmUgdWFydDJfcnhfZG1hX2J1ZiAoTlVMTCkKKyNlbmRpZgorCisjZW5kaWYgLyogZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyNpZmRlZiBIV19VQVJUX0VOQUJMRV9VU0VSX0lTUgorICAgIGh3X3VhcnRfaW50ZXJydXB0X2lzciB1c2VyX2lzcjsKKyNlbmRpZgorICAgIGNvbnN0IHVpbnQ4X3QgICAgICAgKnR4X2J1ZmZlcjsKKyAgICB2b2lkICAgICAgICAgICAgICAgICp0eF91c2VyX2RhdGE7CisgICAgaHdfdWFydF90eF9jYWxsYmFjayB0eF9jYjsKKyAgICB1aW50MTZfdCAgICAgICAgICAgIHR4X2xlbjsKKyAgICB1aW50MTZfdCAgICAgICAgICAgIHR4X2l4OworCisgICAgdm9pZCAgICAgICAgICAgICAgICAqcnhfdXNlcl9kYXRhOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgKnJ4X2J1ZmZlcjsKKyAgICBod191YXJ0X3J4X2NhbGxiYWNrIHJ4X2NiOworICAgIHVpbnQxNl90ICAgICAgICAgICAgcnhfbGVuOworICAgIHVpbnQxNl90ICAgICAgICAgICAgcnhfaXg7CisKKyAgICB1aW50OF90ICAgICAgICAgICAgIHR4X2ZpZm9fb246IDE7CisgICAgdWludDhfdCAgICAgICAgICAgICByeF9maWZvX29uOiAxOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgdHhfZmlmb19sZXZlbDogMjsKKyAgICB1aW50OF90ICAgICAgICAgICAgIHJ4X2ZpZm9fbGV2ZWw6IDI7CisjaWYgZGdfY29uZmlnVUFSVF9TT0ZUV0FSRV9GSUZPCisgICAgdWludDhfdCAgICAgICAgICAgICpyeF9zb2Z0X2ZpZm87CisgICAgZmlmb19zaXplX3QgICAgICAgICByeF9zb2Z0X2ZpZm9fc2l6ZTsKKyAgICBmaWZvX3B0cl90ICAgICAgICAgIHJ4X3NvZnRfZmlmb19yZF9wdHI7CisgICAgZmlmb19wdHJfdCAgICAgICAgICByeF9zb2Z0X2ZpZm9fd3JfcHRyOworI2VuZGlmCisjaWYgSFdfVUFSVF9VU0VfRE1BX1NVUFBPUlQKKyAgICB1aW50OF90ICAgICAgICAgICAgIHVzZV9kbWE6IDE7CisgICAgRE1BX3NldHVwICAgICAgICAgICB0eF9kbWE7CisgICAgRE1BX3NldHVwICAgICAgICAgICByeF9kbWE7CisjaWYgZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEKKyAgICBib29sICAgICAgICAgICAgICAgIHJ4X2RtYV9hY3RpdmU7CisgICAgdWludDhfdCAgICAgICAgICAgICAqcnhfZG1hX2J1ZjsKKyAgICB1aW50MTZfdCAgICAgICAgICAgIHJ4X2RtYV9idWZfc2l6ZTsKKyAgICB1aW50MTZfdCAgICAgICAgICAgIHJ4X2RtYV9oZWFkOworI2VuZGlmIC8qIGRnX2NvbmZpZ1VBUlRfUlhfQ0lSQ1VMQVJfRE1BICovCisjZW5kaWYgLyogSFdfVUFSVF9VU0VfRE1BX1NVUFBPUlQgKi8KK30gVUFSVF9EYXRhOworCitfX1JFVEFJTkVEX1JXIHN0YXRpYyBVQVJUX0RhdGEgdWFydF9kYXRhWzJdOworCisjZGVmaW5lIFVBUlRfSU5UKGlkKSAoKGlkKSA9PSBIV19VQVJUMSA/IChVQVJUX0lSUW4pIDogKFVBUlQyX0lSUW4pKQorI2RlZmluZSBVQVJUSVgoaWQpICgoaWQpID09IEhXX1VBUlQxID8gMCA6IDEpCisjZGVmaW5lIFVBUlREQVRBKGlkKSAoJnVhcnRfZGF0YVtVQVJUSVgoaWQpXSkKKyNkZWZpbmUgVUFSVElEKHVkKSAoKHVkKSA9PSB1YXJ0X2RhdGEgPyBIV19VQVJUMSA6IEhXX1VBUlQyKQorCisjaWZkZWYgSFdfVUFSVF9FTkFCTEVfVVNFUl9JU1IKK3ZvaWQgaHdfdWFydF9zZXRfaXNyKEhXX1VBUlRfSUQgdWFydCwgaHdfdWFydF9pbnRlcnJ1cHRfaXNyIGlzcikKK3sKKyAgICB1YXJ0X2RhdGFbVUFSVElYKHVhcnQpXS51c2VyX2lzciA9IGlzcjsKK30KKyNlbmRpZgorCisvLz09PT09PT09PT09PT09PT09PT09PSBSZWFkL1dyaXRlIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit1aW50OF90IGh3X3VhcnRfcmVhZChIV19VQVJUX0lEIHVhcnQpCit7CisgICAgLy8gV2FpdCB1bnRpbCByZWNlaXZlZCBkYXRhIGFyZSBhdmFpbGFibGUKKyAgICB3aGlsZSAoaHdfdWFydF9yZWFkX2J1Zl9lbXB0eSh1YXJ0KSk7CisKKyAgICAvLyBSZWFkIGVsZW1lbnQgZnJvbSB0aGUgcmVjZWl2ZSBGSUZPCisgICAgcmV0dXJuIFVCQSh1YXJ0KS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHOworfQorCit2b2lkIGh3X3VhcnRfd3JpdGUoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IGRhdGEpCit7CisgICAgLy8gV2FpdCBpZiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIGlzIGZ1bGwKKyAgICB3aGlsZSAoaHdfdWFydF93cml0ZV9idWZfZnVsbCh1YXJ0KSk7CisKKyAgICAvLyBXcml0ZSBkYXRhIHRvIHRoZSB0cmFuc21pdCBGSUZPCisgICAgVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUcgPSBkYXRhOworfQorCit2b2lkIGh3X3VhcnRfd3JpdGVfYnVmZmVyKEhXX1VBUlRfSUQgdWFydCwgY29uc3Qgdm9pZCAqZGF0YSwgdWludDE2X3QgbGVuKQoreworICAgIGNvbnN0IHVpbnQ4X3QgKnAgPSBkYXRhOworCisgICAgd2hpbGUgKGxlbiA+IDApCisgICAgeworICAgICAgICBod191YXJ0X3dyaXRlKHVhcnQsICpwKyspOworICAgICAgICBsZW4tLTsKKyAgICB9Cit9CisKK3ZvaWQgaHdfdWFydF9zZW5kKEhXX1VBUlRfSUQgdWFydCwgY29uc3Qgdm9pZCAqZGF0YSwgdWludDE2X3QgbGVuLCBod191YXJ0X3R4X2NhbGxiYWNrIGNiLAorICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIFVBUlRfRGF0YSAqdWQgPSAmdWFydF9kYXRhW1VBUlRJWCh1YXJ0KV07CisKKyAgICBpZiAoY2IgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGh3X3VhcnRfd3JpdGVfYnVmZmVyKHVhcnQsIGRhdGEsIGxlbik7CisgICAgICAgIHVkLT50eF9peCA9IDA7CisgICAgICAgIHVkLT50eF9sZW4gPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWQtPnR4X2J1ZmZlciA9IGRhdGE7CisgICAgdWQtPnR4X3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKyAgICB1ZC0+dHhfbGVuID0gbGVuOworICAgIHVkLT50eF9peCA9IDA7CisgICAgdWQtPnR4X2NiID0gY2I7CisKKyNpZiBIV19VQVJUX1VTRV9ETUFfU1VQUE9SVAorCisgICAgaWYgKHVkLT50eF9kbWEuY2hhbm5lbF9udW1iZXIgIT0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRCAmJiBsZW4gPiAxKQorICAgIHsKKyAgICAgICAgdWQtPnR4X2RtYS5zcmNfYWRkcmVzcyA9ICh1aW50MzIpIGRhdGE7CisgICAgICAgIHVkLT50eF9kbWEubGVuZ3RoID0gbGVuOworICAgICAgICAvLyBETUEgcmVxdWVzdGVkCisgICAgICAgIGh3X3VhcnRfY2xlYXJfZG1hX3JlcXVlc3QodWFydCk7CisgICAgICAgIGh3X2RtYV9jaGFubmVsX2luaXRpYWxpemF0aW9uKCZ1ZC0+dHhfZG1hKTsKKyAgICAgICAgaHdfZG1hX2NoYW5uZWxfZW5hYmxlKHVkLT50eF9kbWEuY2hhbm5lbF9udW1iZXIsIEhXX0RNQV9TVEFURV9FTkFCTEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2VuZGlmCisgICAgLy8gSW50ZXJydXB0IGRyaXZlbgorICAgIE5WSUNfRGlzYWJsZUlSUShVQVJUX0lOVCh1YXJ0KSk7CisgICAgLy8gRW5hYmxlIHRyYW5zbWl0IGludGVycnVwdHMKKyAgICB1aW50MTZfdCBpZXJfZGxoX3JlZyA9IFVCQSh1YXJ0KS0+VUFSVDJfSUVSX0RMSF9SRUc7CisgICAgaWVyX2RsaF9yZWcgfD0gKCgxIDw8IFVBUlRfVUFSVF9JRVJfRExIX1JFR19FVEJFSV9kbGgxX1BvcykgfCAoMSA8PCBVQVJUX1VBUlRfSUVSX0RMSF9SRUdfUFRJTUVfZGxoN19Qb3MpKTsKKyAgICBVQkEodWFydCktPlVBUlQyX0lFUl9ETEhfUkVHID0gaWVyX2RsaF9yZWc7CisKKyAgICBOVklDX0VuYWJsZUlSUShVQVJUX0lOVCh1YXJ0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X2VuYWJsZV9yeF9pbnQoSFdfVUFSVF9JRCB1YXJ0LCBib29sIGVuYWJsZSkKK3sKKyAgICBOVklDX0Rpc2FibGVJUlEoVUFSVF9JTlQodWFydCkpOworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgSUVSX0RMSCwgRVJCRklfZGxoMCwgZW5hYmxlKTsKKyAgICBOVklDX0VuYWJsZUlSUShVQVJUX0lOVCh1YXJ0KSk7Cit9CisKKyNpZiBkZ19jb25maWdVQVJUX1NPRlRXQVJFX0ZJRk8KKworI2RlZmluZSBTT0ZUV0FSRV9GSUZPX1BSRVNFTlQodWQpICgodWQpLT5yeF9zb2Z0X2ZpZm8gIT0gTlVMTCkKKworLyoKKyAqIENvcHkgYnl0ZXMgZnJvbSBzb2Z0d2FyZSBGSUZPIHRvIHVzZXIgcHJvdmlkZWQgYnVmZmVyLgorICogVGhpcyBmdW5jdGlvbiBhbGxvd3Mgc29mdHdhcmUgRklGTyBpbnRlcnJ1cHRzIHRvIHJlYWQgbW9yZSBkYXRhIHdoaWxlIGNvcHkgdGFrZXMgcGxhY2UuCisgKgorICogRnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIGFsbCByZXF1ZXN0ZWQgZGF0YSBpcyBhbHJlYWR5IGluIHVzZXIgYnVmZmVyLgorICovCitzdGF0aWMgYm9vbCBod191YXJ0X2RyYWluX3J4KEhXX1VBUlRfSUQgdWFydCwgVUFSVF9EYXRhICp1ZCwgaW50IGxlbikKK3sKKyAgICAvKgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggUlggaW50ZXJydXB0IGRpc2FibGVkLgorICAgICAqCisgICAgICogR2V0IGN1cnJlbnQgc29mdHdhcmUgRklGTyBwb2ludGVycyBiZWZvcmUgZW5hYmxpbmcgaW50ZXJydXB0IGFnYWluLgorICAgICAqIHVkLT5yeF9sZW4gaXMgc3RpbGwgc2V0IHRvIDAsIHNvIGludGVycnVwdCB3aWxsIG5vdCB0cnkgdG8gY29weSBkYXRhIHRvCisgICAgICogYXBwbGljYXRpb24gYnVmZmVyIHRpbGwgYWxsIGRhdGEgZnJvbSBzb2Z0d2FyZSBGSUZPIGlzIGRyYWluZWQgdG8gdXNlciBidWZmZXIuCisgICAgICovCisgICAgZmlmb19wdHJfdCByZF9wdHIgPSB1ZC0+cnhfc29mdF9maWZvX3JkX3B0cjsKKyAgICBmaWZvX3B0cl90IHdyX3B0ciA9IHVkLT5yeF9zb2Z0X2ZpZm9fd3JfcHRyOworICAgIGludCBpZHggPSAwOworCisgICAgLyoKKyAgICAgKiB1ZC0+cnhfaXggaXMgMCwgc2V0IHVkLT5yeF9sZW4gdG8gMCB0byBwcmV2ZW50IGludGVycnVwdCBmcm9tIHVzaW5nIGl0CisgICAgICogYmVmb3JlIGFsbCBkYXRhIGZyb20gc29mdHdhcmUgRklGTyBpcyBtb3ZlZCB0byBhcHBsaWNhdGlvbiBidWZmZXIuCisgICAgICovCisgICAgdWQtPnJ4X2xlbiA9IDA7CisKKyAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQodWFydCwgdHJ1ZSk7CisKKyAgICB3aGlsZSAoaWR4IDwgbGVuKQorICAgIHsKKworICAgICAgICBpZiAod3JfcHRyID09IHJkX3B0cikKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIE5vIG1vcmUgZGF0YSBpbiBzb2Z0d2FyZSBGSUZPLCBhdCBsZWFzdCBmcm9tIHN0YXRlIGJlZm9yZQorICAgICAgICAgICAgICogaW50ZXJydXB0IHdhcyBlbmFibGVkLgorICAgICAgICAgICAgICogRGlzYWJsZSBpbnRlcnJ1cHQgYW5kIHVwZGF0ZSByZWFkIHBvaW50ZXIgdG8gcmVmbGVjdCBwb3NpdGlvbgorICAgICAgICAgICAgICogb2YgYWxyZWFkeSBjb3BpZWQgZGF0YS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaHdfdWFydF9lbmFibGVfcnhfaW50KHVhcnQsIGZhbHNlKTsKKyAgICAgICAgICAgIHVkLT5yeF9zb2Z0X2ZpZm9fcmRfcHRyID0gcmRfcHRyOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ2hlY2sgaWYgd3JpdGUgcG9pbnRlciBtb3ZlZCwgaWYgc28gaW50ZXJydXB0IHB1dCBzb21lIG1vcmUgZGF0YQorICAgICAgICAgICAgICogaW4gYnVmZmVyLiBSZW1lbWJlciBjdXJyZW50IHdyaXRlIHBvc2l0aW9uIGFuZCB0cnkgYWdhaW4gd2l0aAorICAgICAgICAgICAgICogaW50ZXJydXB0cyBlbmFibGVkLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAodWQtPnJ4X3NvZnRfZmlmb193cl9wdHIgIT0gd3JfcHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdyX3B0ciA9IHVkLT5yeF9zb2Z0X2ZpZm9fd3JfcHRyOworICAgICAgICAgICAgICAgIGh3X3VhcnRfZW5hYmxlX3J4X2ludCh1YXJ0LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEFsbCB3YXMgY29waWVkIGZyb20gc29mdHdhcmUgRklGTy4KKyAgICAgICAgICAgICAqIFNldHVwIHVzZXIgdHJhbnNhY3Rpb24gaXggYW5kIGxlbiBzbyB3aGVuIGludGVycnVwdHMgYXJlIGVuYWJsZWQKKyAgICAgICAgICAgICAqIGFnYWluIChub3QgaW4gdGhpcyBmdW5jdGlvbikgaW50ZXJydXB0IG9yIERNQSBjYW4gY29udGludWUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHVkLT5yeF9peCA9IGlkeDsKKyAgICAgICAgICAgIHVkLT5yeF9sZW4gPSBsZW47CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENvcHkgZnJvbSBzb2Z0d2FyZSBGSUZPIHRvIHVzZXIgcHJvdmlkZWQgYnVmZmVyICovCisgICAgICAgIHVkLT5yeF9idWZmZXJbaWR4KytdID0gdWQtPnJ4X3NvZnRfZmlmb1tyZF9wdHIrK107CisKKyAgICAgICAgaWYgKHJkX3B0ciA+PSB1ZC0+cnhfc29mdF9maWZvX3NpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJkX3B0ciA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFVzZXIgYnVmZmVyIGlzIGZpbGxlZCwgYmxvY2sgaW50ZXJydXB0IHNvIGVuZCBvZiB0cmFuc21pc3Npb24gY2FsbGJhY2sgd2lsbCBub3QgYmUKKyAgICAgKiBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQuCisgICAgICovCisgICAgaHdfdWFydF9lbmFibGVfcnhfaW50KHVhcnQsIGZhbHNlKTsKKyAgICB1ZC0+cnhfc29mdF9maWZvX3JkX3B0ciA9IHJkX3B0cjsKKyAgICB1ZC0+cnhfbGVuID0gbGVuOworICAgIHVkLT5yeF9peCA9IGxlbjsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGh3X3VhcnRfcmVhZF9idWZmZXIoSFdfVUFSVF9JRCB1YXJ0LCB2b2lkICpkYXRhLCB1aW50MTZfdCBsZW4pCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworICAgIHVpbnQ4X3QgKnAgPSBkYXRhOworCisgICAgLyoKKyAgICAgKiBEaXNhYmxlIFJYIGludGVycnVwdCBiZWZvcmUgZHJhaW5pbmcgc29mdHdhcmUgRklGTy4KKyAgICAgKi8KKyAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQodWFydCwgZmFsc2UpOworCisgICAgaWYgKFNPRlRXQVJFX0ZJRk9fUFJFU0VOVCh1ZCkpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBEcmFpbiB1c2VzIHVkIGZpZWxkcyBzbyBzZXR1cCB0aGVtIGFjY29yZGluZ2x5LgorICAgICAgICAgKi8KKyAgICAgICAgdWQtPnJ4X2J1ZmZlciA9IGRhdGE7CisKKyAgICAgICAgaHdfdWFydF9kcmFpbl9yeCh1YXJ0LCB1ZCwgbGVuKTsKKyAgICAgICAgbGVuIC09IHVkLT5yeF9peDsKKyAgICAgICAgcCArPSB1ZC0+cnhfaXg7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSZWFkIGFsbCByZW1haW5pbmcgYnl0ZXMgd2l0aCBSWCBpbnRlcnJ1cHQgc3RpbGwgZGlzYWJsZWQuCisgICAgICovCisgICAgd2hpbGUgKGxlbiA+IDApCisgICAgeworICAgICAgICAqcCsrID0gaHdfdWFydF9yZWFkKHVhcnQpOworICAgICAgICBsZW4tLTsKKyAgICB9CisKKyAgICB1ZC0+cnhfaXggPSAwOworICAgIHVkLT5yeF9sZW4gPSAwOworICAgIGh3X3VhcnRfZW5hYmxlX3J4X2ludCh1YXJ0LCBTT0ZUV0FSRV9GSUZPX1BSRVNFTlQodWQpKTsKK30KKwordm9pZCBod191YXJ0X3NldF9zb2Z0X2ZpZm8oSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90ICpidWYsIHVpbnQ4X3Qgc2l6ZSkKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gVUFSVERBVEEodWFydCk7CisKKyAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQodWFydCwgZmFsc2UpOworCisgICAgdWQtPnJ4X3NvZnRfZmlmbyA9IGJ1ZjsKKyAgICB1ZC0+cnhfc29mdF9maWZvX3NpemUgPSBzaXplOworICAgIHVkLT5yeF9zb2Z0X2ZpZm9fcmRfcHRyID0gMDsKKyAgICB1ZC0+cnhfc29mdF9maWZvX3dyX3B0ciA9IDA7CisKKyAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQodWFydCwgYnVmICE9IE5VTEwpOworfQorCisjZWxzZQorCisjZGVmaW5lIFNPRlRXQVJFX0ZJRk9fUFJFU0VOVCh1ZCkgIGZhbHNlCisKK3ZvaWQgaHdfdWFydF9yZWFkX2J1ZmZlcihIV19VQVJUX0lEIHVhcnQsIHZvaWQgKmRhdGEsIHVpbnQxNl90IGxlbikKK3sKKyAgICB1aW50OF90ICpwID0gZGF0YTsKKworICAgIHdoaWxlIChsZW4gPiAwKQorICAgIHsKKyAgICAgICAgKnArKyA9IGh3X3VhcnRfcmVhZCh1YXJ0KTsKKyAgICAgICAgbGVuLS07CisgICAgfQorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGh3X3VhcnRfZmlyZV9jYWxsYmFjayhVQVJUX0RhdGEgKnVkKQoreworICAgIGh3X3VhcnRfcnhfY2FsbGJhY2sgY2IgPSB1ZC0+cnhfY2I7CisgICAgdWQtPnJ4X2NiID0gTlVMTDsKKyAgICAvKiBKdXN0IGZpbmlzaGVkIHJlY2VpdmluZywgZGlzYWJsZSBSWCBpbnRlcnJ1cHRzIHVubGVzcyBzb2Z0d2FyZSBGSUZPIGlzIGVuYWJsZWQgKi8KKyAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQoVUFSVElEKHVkKSwgU09GVFdBUkVfRklGT19QUkVTRU5UKHVkKSk7CisKKyAgICBpZiAoY2IpCisgICAgeworICAgICAgICBjYih1ZC0+cnhfdXNlcl9kYXRhLCB1ZC0+cnhfbGVuKTsKKyAgICB9Cit9CisKK3ZvaWQgaHdfdWFydF9yZWNlaXZlKEhXX1VBUlRfSUQgdWFydCwgdm9pZCAqZGF0YSwgdWludDE2X3QgbGVuLCBod191YXJ0X3J4X2NhbGxiYWNrIGNiLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIFVBUlRfRGF0YSAqdWQgPSBVQVJUREFUQSh1YXJ0KTsKKworICAgIGlmIChjYiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgaHdfdWFydF9yZWFkX2J1ZmZlcih1YXJ0LCBkYXRhLCBsZW4pOworICAgICAgICB1ZC0+cnhfaXggPSAwOworICAgICAgICB1ZC0+cnhfbGVuID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVkLT5yeF9idWZmZXIgPSBkYXRhOworICAgIHVkLT5yeF91c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisgICAgaHdfdWFydF9lbmFibGVfcnhfaW50KHVhcnQsIGZhbHNlKTsKKyAgICB1ZC0+cnhfbGVuID0gbGVuOworICAgIHVkLT5yeF9peCA9IDA7CisgICAgdWQtPnJ4X2NiID0gY2I7CisjaWYgZGdfY29uZmlnVUFSVF9TT0ZUV0FSRV9GSUZPCisKKyAgICBpZiAoaHdfdWFydF9kcmFpbl9yeCh1YXJ0LCB1ZCwgbGVuKSkKKyAgICB7CisgICAgICAgIGh3X3VhcnRfZmlyZV9jYWxsYmFjayh1ZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEKKworICAgIGlmICh1ZC0+cnhfZG1hX2J1Zl9zaXplID4gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9FUlJPUihsZW4gPCB1ZC0+cnhfZG1hX2J1Zl9zaXplKTsKKworICAgICAgICB1aW50MTZfdCBuZXdfaW50LCBjdXJfaWR4OworICAgICAgICBib29sIGRhdGFfcmVhZHkgPSBmYWxzZTsKKworICAgICAgICBBU1NFUlRfRVJST1IodWQtPnJ4X2RtYV9hY3RpdmUgPT0gZmFsc2UpOworCisgICAgICAgIC8qIENhbGN1bGF0ZSBpbmRleCBvZiBlbmQgb2YgcmVxdWVzdGVkIGRhdGEgKGRvIG5vdCB3cmFwIGl0ISkgKi8KKyAgICAgICAgbmV3X2ludCA9IHVkLT5yeF9kbWFfaGVhZCArIHVkLT5yeF9sZW4gLSAxOworCisgICAgICAgIC8qIEZyZWV6ZSBETUEgc28gaXQgZG9lcyBub3QgbW92ZSBwb2ludGVycyB3aGlsZSB3ZSB0cnkgdG8gdXBkYXRlIHRoZW0gKi8KKyAgICAgICAgaHdfZG1hX2ZyZWV6ZSgpOworCisgICAgICAgIGN1cl9pZHggPSBod19kbWFfdHJhbnNmZXJlZF9ieXRlcyh1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyKTsKKworICAgICAgICAvKiBjdXJfaWR4IGlzIGxvd2VyIHRoYW4gcnhfaGVhZCBvbmx5IGlmIGl0IHdyYXBwZWQtYXJvdW5kIC0gZml4IGl0ICovCisgICAgICAgIGlmIChjdXJfaWR4IDwgdWQtPnJ4X2RtYV9oZWFkKQorICAgICAgICB7CisgICAgICAgICAgICBjdXJfaWR4ICs9IHVkLT5yeF9kbWFfYnVmX3NpemU7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBJZiBETUEgaGFzIG5vdCByZWFkIHBhc3QgdGhlIGNhbGN1bGF0ZWQgaW5kZXgsIHdlIGNhbiBzZXQgaXQgYW5kIGp1c3Qgd2FpdCBmb3IgYW4KKyAgICAgICAgICogaW50ZXJydXB0LiBJbiBvdGhlciBjYXNlLCBkYXRhIGFyZSByZWFkeSBpbW1lZGlhdGVseSBpbiBidWZmZXIuCisgICAgICAgICAqLworICAgICAgICBpZiAoY3VyX2lkeCA8PSBuZXdfaW50KQorICAgICAgICB7CisgICAgICAgICAgICBuZXdfaW50ICU9IHVkLT5yeF9kbWFfYnVmX3NpemU7CisgICAgICAgICAgICBod19kbWFfY2hhbm5lbF91cGRhdGVfaW50X2l4KHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIsIG5ld19pbnQpOworICAgICAgICAgICAgdWQtPnJ4X2RtYV9hY3RpdmUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaHdfZG1hX2NoYW5uZWxfdXBkYXRlX2ludF9peCh1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyLCBjdXJfaWR4IC0gMSk7CisgICAgICAgICAgICBkYXRhX3JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFVuZnJlZXplIERNQSBub3csIGl0IGNhbiBzdGFydCByZWFkaW5nICovCisgICAgICAgIGh3X2RtYV91bmZyZWV6ZSgpOworCisgICAgICAgIC8qIEZpcmUgY2FsbGJhY2sgaW1tZWRpYXRlbHkgaWYgZGF0YSBhbHJlYWR5IGF2YWlsYWJsZSBpbiBidWZmZXIgKi8KKyAgICAgICAgaWYgKGRhdGFfcmVhZHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X3VhcnRfZmlyZV9jYWxsYmFjayh1ZCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisjZW5kaWYKKworI2lmIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUCisKKyAgICBpZiAodWQtPnJ4X2RtYS5jaGFubmVsX251bWJlciAhPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEICYmICh1ZC0+cnhfbGVuIC0gdWQtPnJ4X2l4ID4gMSkpCisgICAgeworICAgICAgICAvKiByeF9peCBjb3VsZCBhbHJlYWR5IGJlIGNoYW5nZWQgYnkgaHdfdWFydF9kcmFpbl9yeCgpICovCisgICAgICAgIHVkLT5yeF9kbWEuZGVzdF9hZGRyZXNzID0gKHVpbnQzMikgZGF0YSArIHVkLT5yeF9peDsKKyAgICAgICAgdWQtPnJ4X2RtYS5sZW5ndGggPSB1ZC0+cnhfbGVuIC0gdWQtPnJ4X2l4OworICAgICAgICBod191YXJ0X2NsZWFyX2RtYV9yZXF1ZXN0KHVhcnQpOworICAgICAgICAvKiBQcmVwYXJlIGFuZCBzdGFydCBETUEgKi8KKyAgICAgICAgaHdfZG1hX2NoYW5uZWxfaW5pdGlhbGl6YXRpb24oJnVkLT5yeF9kbWEpOworICAgICAgICBod19kbWFfY2hhbm5lbF9lbmFibGUodWQtPnJ4X2RtYS5jaGFubmVsX251bWJlciwgSFdfRE1BX1NUQVRFX0VOQUJMRUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjZW5kaWYKKyAgICAvKiBJbnRlcnJ1cHQgZHJpdmVuICovCisgICAgaHdfdWFydF9lbmFibGVfcnhfaW50KHVhcnQsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBod191YXJ0X2lycV9zdG9wX3JlY2VpdmUoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIFVBUlRfRGF0YSAqdWQgPSAmdWFydF9kYXRhW1VBUlRJWCh1YXJ0KV07CisKKyAgICAvLyBEaXNhYmxlIFJYIGludGVycnVwdAorICAgIGh3X3VhcnRfZW5hYmxlX3J4X2ludCh1YXJ0LCBmYWxzZSk7CisKKyAgICB1ZC0+cnhfbGVuID0gdWQtPnJ4X2l4OworCisgICAgaHdfdWFydF9maXJlX2NhbGxiYWNrKHVkKTsKK30KKworI2lmIGRnX2NvbmZpZ1VBUlRfUlhfQ0lSQ1VMQVJfRE1BCitzdGF0aWMgdm9pZCBod191YXJ0X2NvcHlfZG1hX3J4X3RvX3VzZXJfYnVmZmVyKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gJnVhcnRfZGF0YVtVQVJUSVgodWFydCldOworCisgICAgdWludDE2X3QgY3VyX2lkeDsKKyAgICB1aW50MTZfdCB0b19jb3B5OworICAgIGh3X3VhcnRfcnhfY2FsbGJhY2sgY2I7CisKKyAgICB1ZC0+cnhfZG1hX2FjdGl2ZSA9IGZhbHNlOworICAgIGNiID0gdWQtPnJ4X2NiOworCisgICAgaWYgKGNiKQorICAgIHsKKyAgICAgICAgdWQtPnJ4X2NiID0gTlVMTDsKKyAgICAgICAgLyoKKyAgICAgICAgICogVXNlciBjYWxsYmFjayB3YXMgbm90IGZpcmVkLCBzaW5jZSByeF9kbWFfYWN0aXZlIGlzIGZhbHNlIGl0IHdpbGwgbm90CisgICAgICAgICAqIGZpcmUgZXZlbiBpZiByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzIHdhcyByZWNlaXZlZCB3aGVuIGFib3J0IHdhcyBpbml0aWF0ZWQuCisgICAgICAgICAqLworICAgICAgICBjdXJfaWR4ID0gaHdfZG1hX3RyYW5zZmVyZWRfYnl0ZXModWQtPnJ4X2RtYS5jaGFubmVsX251bWJlcik7CisKKyAgICAgICAgaWYgKHVkLT5yeF9peCA8IHVkLT5yeF9sZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjdXJfaWR4IDwgdWQtPnJ4X2RtYV9oZWFkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN1cl9pZHggKz0gdWQtPnJ4X2RtYV9idWZfc2l6ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9fY29weSA9IGN1cl9pZHggLSB1ZC0+cnhfZG1hX2hlYWQ7CisKKyAgICAgICAgICAgIGlmICh0b19jb3B5ID49IHVkLT5yeF9sZW4gLSB1ZC0+cnhfaXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG9fY29weSA9IHVkLT5yeF9sZW4gLSB1ZC0+cnhfaXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2FsbGJhY2sgYWxyZWFkeSBmaXJlZCwgY2lyY3VsYXIgYnVmZmVyIGhvbGRzIGVub3VnaCBkYXRhLgorICAgICAgICAgKi8KKyAgICAgICAgdG9fY29weSA9IHVkLT5yeF9sZW4gLSB1ZC0+cnhfaXg7CisgICAgfQorCisgICAgaHdfdWFydF9jb3B5X3J4X2NpcmN1bGFyX2RtYV9idWZmZXIodWFydCwgdWQtPnJ4X2J1ZmZlciArIHVkLT5yeF9peCwgdG9fY29weSk7CisgICAgdWQtPnJ4X2l4ICs9IHRvX2NvcHk7CisgICAgdWQtPnJ4X2xlbiA9IHVkLT5yeF9peDsKKworICAgIGlmIChjYikKKyAgICB7CisgICAgICAgIGNiKHVkLT5yeF91c2VyX2RhdGEsIHVkLT5yeF9sZW4pOworICAgIH0KK30KKyNlbmRpZgorCit1aW50MTZfdCBod191YXJ0X2Fib3J0X3JlY2VpdmUoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIFVBUlRfRGF0YSAqdWQgPSAmdWFydF9kYXRhW1VBUlRJWCh1YXJ0KV07CisKKyNpZiBIV19VQVJUX1VTRV9ETUFfU1VQUE9SVAorCisgICAgaWYgKHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIgIT0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRCkKKyAgICB7CisjaWYgZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEKKworICAgICAgICBpZiAodWQtPnJ4X2RtYV9idWZfc2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X3VhcnRfY29weV9kbWFfcnhfdG9fdXNlcl9idWZmZXIodWFydCk7CisgICAgICAgICAgICByZXR1cm4gdWQtPnJ4X2l4OworICAgICAgICB9CisKKyNlbHNlCisgICAgICAgIC8qIE5vIERNQSBjaXJjdWxhciBidWZmZXIsIHN0b3AgRE1BICovCisgICAgICAgIGh3X2RtYV9jaGFubmVsX3N0b3AodWQtPnJ4X2RtYS5jaGFubmVsX251bWJlcik7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGh3X3VhcnRfaXJxX3N0b3BfcmVjZWl2ZSh1YXJ0KTsKKworICAgIHJldHVybiB1ZC0+cnhfaXg7Cit9CisKK3VpbnQxNl90IGh3X3VhcnRfcGVla19yZWNlaXZlZChIV19VQVJUX0lEIHVhcnQpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9ICZ1YXJ0X2RhdGFbVUFSVElYKHVhcnQpXTsKKworI2lmIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUCisKKyAgICBpZiAodWQtPnJ4X2RtYS5jaGFubmVsX251bWJlciAhPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEKQorICAgIHsKKyAgICAgICAgdWQtPnJ4X2l4ID0gaHdfZG1hX3RyYW5zZmVyZWRfYnl0ZXModWQtPnJ4X2RtYS5jaGFubmVsX251bWJlcik7CisgICAgfQorCisjZW5kaWYKKyAgICByZXR1cm4gdWQtPnJ4X2l4OworfQorCisvLz09PT09PT09PT09PT09IEludGVycnVwdCBoYW5kbGluZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF90eF9pc3IoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIFVBUlRfRGF0YSAqdWQgPSBVQVJUREFUQSh1YXJ0KTsKKworICAgIHdoaWxlICh1ZC0+dHhfaXggPCB1ZC0+dHhfbGVuKQorICAgIHsKKyAgICAgICAgaWYgKHVkLT50eF9maWZvX29uKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWh3X3VhcnRfdHJhbnNtaXRfZmlmb19ub3RfZnVsbCh1YXJ0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghaHdfdWFydF90aHJfZW1wdHlfZ2V0Zih1YXJ0KSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBod191YXJ0X3R4ZGF0YV9zZXRmKHVhcnQsIHVkLT50eF9idWZmZXJbdWQtPnR4X2l4KytdKTsKKyAgICB9CisKKyAgICAvLyBFdmVyeXRoaW5nIHNlbnQ/CisgICAgaWYgKHVkLT50eF9peCA+PSB1ZC0+dHhfbGVuKQorICAgIHsKKyAgICAgICAgaHdfdWFydF90eF9jYWxsYmFjayBjYiA9IHVkLT50eF9jYjsKKyAgICAgICAgLy8gRGlzYWJsZSBUWCBpbnRlcnJ1cHRzCisgICAgICAgIC8vIFRoZXkgY2FuIGJlIHJlLWVuYWJsZWQgaW4gdXNlciBjYWxsYmFjaworICAgICAgICB1aW50MTZfdCBpZXJfZGxoX3JlZyA9IFVCQSh1YXJ0KS0+VUFSVDJfSUVSX0RMSF9SRUc7CisgICAgICAgIGllcl9kbGhfcmVnICY9IH4oKDEgPDwgVUFSVF9VQVJUX0lFUl9ETEhfUkVHX0VUQkVJX2RsaDFfUG9zKSB8ICgxIDw8IFVBUlRfVUFSVF9JRVJfRExIX1JFR19QVElNRV9kbGg3X1BvcykpOworICAgICAgICBVQkEodWFydCktPlVBUlQyX0lFUl9ETEhfUkVHID0gaWVyX2RsaF9yZWc7CisgICAgICAgIHVkLT50eF9jYiA9IE5VTEw7CisKKyAgICAgICAgaWYgKGNiKQorICAgICAgICB7CisgICAgICAgICAgICBjYih1ZC0+dHhfdXNlcl9kYXRhLCB1ZC0+dHhfbGVuKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfcnhfaXNyKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gVUFSVERBVEEodWFydCk7CisKKyAgICBpZiAoU09GVFdBUkVfRklGT19QUkVTRU5UKHVkKSkKKyAgICB7CisjaWYgZGdfY29uZmlnVUFSVF9TT0ZUV0FSRV9GSUZPCisKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgeworICAgICAgICAgICAgZmlmb19wdHJfdCB3cl9wdHIgPSB1ZC0+cnhfc29mdF9maWZvX3dyX3B0ciArIDE7CisKKyAgICAgICAgICAgIGlmICh3cl9wdHIgPj0gdWQtPnJ4X3NvZnRfZmlmb19zaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdyX3B0ciA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh3cl9wdHIgPT0gdWQtPnJ4X3NvZnRfZmlmb19yZF9wdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU29mdHdhcmUgRklGTyBmdWxsLCBkaXNhYmxlIGludGVycnVwdCBzaW5jZSBubyBvbmUgaXMgcmVhZGluZyAqLworICAgICAgICAgICAgICAgIGh3X3VhcnRfZW5hYmxlX3J4X2ludCh1YXJ0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWh3X3VhcnRfaXNfZGF0YV9yZWFkeSh1YXJ0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdWQtPnJ4X3NvZnRfZmlmb1t1ZC0+cnhfc29mdF9maWZvX3dyX3B0cl0gPSBod191YXJ0X3J4ZGF0YV9nZXRmKHVhcnQpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQXBwbGljYXRpb24gcmVhZCBpcyBpbiBwcm9ncmVzcy4gQ29weSBkYXRhIGZyb20gc29mdHdhcmUgRklGTyB0bworICAgICAgICAgICAgICogdXNlciBwcm92aWRlZCBidWZmZXIuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICh1ZC0+cnhfaXggPCB1ZC0+cnhfbGVuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVkLT5yeF9idWZmZXJbdWQtPnJ4X2l4KytdID0gdWQtPnJ4X3NvZnRfZmlmb1t1ZC0+cnhfc29mdF9maWZvX3dyX3B0cl07CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBXaGVuIGFwcGxpY2F0aW9uIHJlYWQgaXMgaW4gcHJvZ3Jlc3MsIHJ4X2l4IDwgcnhfbGVuCisgICAgICAgICAgICAgICAgICogVGhpcyBpbnRlcnJ1cHQgaXMgZW5hYmxlZCBvbmx5IGlmIGFsbCBkYXRhIHdhcyBhbHJlYWR5IGNvcGllZCBmcm9tCisgICAgICAgICAgICAgICAgICogRklGTyB0byB1c2VyIGJ1ZmZlci4gSXQgaXMgc2FmZSB0byBtb2RpZnkgcnhfc29mdF9maWZvX3JkX3B0ci4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB1ZC0+cnhfc29mdF9maWZvX3JkX3B0ciA9IHdyX3B0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdWQtPnJ4X3NvZnRfZmlmb193cl9wdHIgPSB3cl9wdHI7CisgICAgICAgIH0KKworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdoaWxlICh1ZC0+cnhfaXggPCB1ZC0+cnhfbGVuKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaHdfdWFydF9pc19kYXRhX3JlYWR5KHVhcnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVkLT5yeF9idWZmZXJbdWQtPnJ4X2l4KytdID0gaHdfdWFydF9yeGRhdGFfZ2V0Zih1YXJ0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEV2ZXJ5dGhpbmcgcmVhZD8KKyAgICBpZiAodWQtPnJ4X2xlbiA+IDAgJiYgdWQtPnJ4X2l4ID49IHVkLT5yeF9sZW4pCisgICAgeworICAgICAgICAvLyBEaXNhYmxlIFJYIGludGVycnVwdHMsIGZpcmUgY2FsbGJhY2sgaWYgcHJlc2VudAorICAgICAgICBod191YXJ0X2lycV9zdG9wX3JlY2VpdmUodWFydCk7CisgICAgfQorCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X3J4X3RpbWVvdXRfaXNyKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gVUFSVERBVEEodWFydCk7CisKKyAgICBod191YXJ0X3J4X2lzcih1YXJ0KTsKKworICAgIC8qCisgICAgICogTm90IGV2ZXJ5dGhpbmcgd2FzIHJlY2VpdmVkIHlldCwgZGlzYWJsZSBpbnRlcnJ1cHQgYW55d2F5IHNpbmNlCisgICAgICogc29tZSBkYXRhIHdhcyByZWNlaXZlZC4KKyAgICAgKi8KKyAgICBpZiAodWQtPnJ4X2l4ID4gMCAmJiB1ZC0+cnhfaXggPCB1ZC0+cnhfbGVuKQorICAgIHsKKyAgICAgICAgLy8gRGlzYWJsZSBSWCBpbnRlcnJ1cHRzIGZpcmUgY2FsbGJhY2sgaWYgcHJlc2VudAorICAgICAgICBod191YXJ0X2lycV9zdG9wX3JlY2VpdmUodWFydCk7CisgICAgfQorfQorCit2b2lkIFVBUlRfSW50ZXJydXB0X0hhbmRsZXIoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIEhXX1VBUlRfSU5UIGludF9pZDsKKworICAgIGZvciAoOzspCisgICAgeworICAgICAgICBpbnRfaWQgPSBod191YXJ0X2dldF9pbnRlcnJ1cHRfaWQodWFydCk7CisKKyAgICAgICAgc3dpdGNoIChpbnRfaWQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBIV19VQVJUX0lOVF9USU1FT1VUOgorICAgICAgICAgICAgaHdfdWFydF9yeF90aW1lb3V0X2lzcih1YXJ0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSFdfVUFSVF9JTlRfTU9ERU1fU1RBVDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSFdfVUFSVF9JTlRfTk9fSU5UX1BFTkQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhXX1VBUlRfSU5UX1RIUl9FTVBUWToKKyAgICAgICAgICAgIGh3X3VhcnRfdHhfaXNyKHVhcnQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBIV19VQVJUX0lOVF9SRUNFSVZFRF9BVkFJTEFCTEU6CisgICAgICAgICAgICBod191YXJ0X3J4X2lzcih1YXJ0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSFdfVUFSVF9JTlRfUkVDRUlWRV9MSU5FX1NUQVQ6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhXX1VBUlRfSU5UX0JVU1lfREVURUNURUQ6CisjaWZkZWYgQ09ORklHX1VBUlRfSUdOT1JFX0JVU1lfREVURUNUCisgICAgICAgICAgICBod191YXJ0X3RyYW5zbWl0X2ZpZm9fZW1wdHkodWFydCk7CisjZWxzZQorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFN0b3AgaGVyZSBtZWFucyB0aGF0IHRpbWluZyBydWxlcyBmb3IgYWNjZXNzIGRpdmlzb3IgbGF0Y2ggd2VyZSBub3QKKyAgICAgICAgICAgICAqIGZvbGxvd2VkLiBTZWUgZGVzY3JpcHRpb24gb2YgcmVnaXN0ZXIgUkJSX1RIUl9ETEwuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIF9fQktQVCgwKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICogXGJyaWVmIEhXX1VBUlQxIEludGVycnVwdCBIYW5kbGVyCisgKgorICovCit2b2lkIFVBUlRfSGFuZGxlcih2b2lkKQoreworICAgIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FTlRFUigpOworCisjaWZkZWYgSFdfVUFSVF9FTkFCTEVfVVNFUl9JU1IKKworICAgIGlmICh1YXJ0X2RhdGFbVUFSVElYKEhXX1VBUlQxKV0udXNlcl9pc3IpCisgICAgeworICAgICAgICB1YXJ0X2RhdGFbVUFSVElYKEhXX1VBUlQxKV0udXNlcl9pc3IoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNlbmRpZgorICAgICAgICBVQVJUX0ludGVycnVwdF9IYW5kbGVyKEhXX1VBUlQxKTsKKyNpZmRlZiBIV19VQVJUX0VOQUJMRV9VU0VSX0lTUgorICAgIH0KKworI2VuZGlmCisKKyAgICBTRUdHRVJfU1lTVEVNVklFV19JU1JfRVhJVCgpOworfQorCisvKioKKyAqIFxicmllZiBVQVJUMiBJbnRlcnJ1cHQgSGFuZGxlcgorICoKKyAqLwordm9pZCBVQVJUMl9IYW5kbGVyKHZvaWQpCit7CisgICAgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VOVEVSKCk7CisKKyNpZmRlZiBIV19VQVJUX0VOQUJMRV9VU0VSX0lTUgorCisgICAgaWYgKHVhcnRfZGF0YVtVQVJUSVgoSFdfVUFSVDIpXS51c2VyX2lzcikKKyAgICB7CisgICAgICAgIHVhcnRfZGF0YVtVQVJUSVgoSFdfVUFSVDIpXS51c2VyX2lzcigpOworICAgIH0KKyAgICBlbHNlCisgICAgeworI2VuZGlmCisgICAgICAgIFVBUlRfSW50ZXJydXB0X0hhbmRsZXIoSFdfVUFSVDIpOworI2lmZGVmIEhXX1VBUlRfRU5BQkxFX1VTRVJfSVNSCisgICAgfQorCisjZW5kaWYKKworICAgIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FWElUKCk7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT0gQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0hXX1VBUlRfQkFVRFJBVEUgaHdfdWFydF9iYXVkcmF0ZV9nZXQoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIHVpbnQzMl90IGJhdWRfcmF0ZTsKKworICAgIC8vIFNldCBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgaW4gTENSIHJlZ2lzdGVyIHRvIGFjY2VzcyBETEwgJiBETEggcmVnaXN0ZXJzCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExBQiwgMSk7CisgICAgLy8gUmVhZCBiYXVkIHJhdGUgbG93IGJ5dGUgZnJvbSBETEwgcmVnaXN0ZXIKKyAgICBiYXVkX3JhdGUgPSAoMHhGRiAmIFVCQSh1YXJ0KS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHKSA8PCA4OworICAgIC8vIFJlYWQgYmF1ZCByYXRlIGhpZ2ggYnl0ZSBmcm9tIERMSCByZWdpc3RlcgorICAgIGJhdWRfcmF0ZSArPSAoMHhGRiAmIFVCQSh1YXJ0KS0+VUFSVDJfSUVSX0RMSF9SRUcpIDw8IDE2OworICAgIC8vIFJlYWQgYmF1ZCByYXRlIGZyYWN0aW9uIGJ5dGUgZnJvbSBETEYgcmVnaXN0ZXIKKyAgICBiYXVkX3JhdGUgKz0gMHhGRiAmIFVCQSh1YXJ0KS0+VUFSVDJfRExGX1JFRzsKKyAgICAvLyBSZXNldCBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgaW4gTGluZSBDb250cm9sIFJlZ2lzdGVyCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExBQiwgMCk7CisKKyAgICByZXR1cm4gKEhXX1VBUlRfQkFVRFJBVEUpIGJhdWRfcmF0ZTsKK30KKwordm9pZCBod191YXJ0X2JhdWRyYXRlX3NldChIV19VQVJUX0lEIHVhcnQsIEhXX1VBUlRfQkFVRFJBVEUgYmF1ZF9yYXRlKQoreworICAgIC8vIFNldCBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgaW4gTENSIHJlZ2lzdGVyIHRvIGFjY2VzcyBETEwgJiBETEggcmVnaXN0ZXJzCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExBQiwgMSk7CisgICAgLy8gU2V0IGZyYWN0aW9uIGJ5dGUgb2YgYmF1ZCByYXRlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9ETEZfUkVHID0gMHhGRiAmIGJhdWRfcmF0ZTsKKyAgICAvLyBTZXQgbG93IGJ5dGUgb2YgYmF1ZCByYXRlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUcgPSAweEZGICYgKGJhdWRfcmF0ZSA+PiA4KTsKKyAgICAvLyBTZXQgaGlnaCBieXRlIG9mIGJhdWQgcmFyZQorICAgIFVCQSh1YXJ0KS0+VUFSVDJfSUVSX0RMSF9SRUcgPSAweEZGICYgKGJhdWRfcmF0ZSA+PiAxNik7CisgICAgLy8gUmVzZXQgRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0IGluIExDUiByZWdpc3RlcgorICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMQUIsIDApOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PSBGSUZPIGNvbnRyb2wgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit1aW50OF90IGh3X3VhcnRfZmlmb19lbl9nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICB1aW50MTZfdCBmaWZvX2VuYWJsZWQ7CisKKyAgICAvKiBPbmx5IFVBUlQyIGhhcyBhIEZJRk8gKi8KKyAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisKKyAgICBmaWZvX2VuYWJsZWQgPSAoVUJBKHVhcnQpLT5VQVJUMl9JSVJfRkNSX1JFRyAmIDB4MDBDMCk7IC8qIEJpdHNbNzo2XSAqLworCisgICAgc3dpdGNoIChmaWZvX2VuYWJsZWQpCisgICAgeworICAgIGNhc2UgMHgwMEMwOgorICAgICAgICByZXR1cm4gMTsKKworICAgIGNhc2UgMHgwMDAwOgorICAgICAgICByZXR1cm4gMDsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9FUlJPUigwKTsKKyAgICAgICAgcmV0dXJuIDI1NTsgICAgIC8vIFRvIHNhdGlzZnkgdGhlIGNvbXBpbGVyCisgICAgfQorfQorCit1aW50OF90IGh3X3VhcnRfdHhfZmlmb190cl9sdmxfZ2V0ZihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgLyogT25seSBVQVJUMiBoYXMgYSBGSUZPICovCisgICAgQVNTRVJUX0VSUk9SKHVhcnQgPT0gSFdfVUFSVDIpOworCisgICAgcmV0dXJuIChVQVJUMi0+VUFSVDJfU1RFVF9SRUcgJiBIV19VQVJUX1JFR19GSUVMRF9NQVNLKDIsIFNURVQsIFVBUlRfU0hBRE9XX1RYX0VNUFRZX1RSSUdHRVIpKQorICAgICAgICAgICA+PiBIV19VQVJUX1JFR19GSUVMRF9QT1MoMiwgU1RFVCwgVUFSVF9TSEFET1dfVFhfRU1QVFlfVFJJR0dFUik7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09IERNQSBjb250cm9sIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNpZiBIV19VQVJUX1VTRV9ETUFfU1VQUE9SVAorCitzdGF0aWMgdm9pZCBod191YXJ0X3J4X2RtYV9jYWxsYmFjayh2b2lkICp1c2VyX2RhdGEsIHVpbnQxNl90IGxlbikKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gdXNlcl9kYXRhOworICAgIGh3X3VhcnRfcnhfY2FsbGJhY2sgY2IgPSB1ZC0+cnhfY2I7CisKKyAgICB1ZC0+cnhfY2IgPSBOVUxMOworICAgIHVkLT5yeF9peCArPSBsZW47CisKKyAgICBpZiAoY2IpCisgICAgeworICAgICAgICB1ZC0+cnhfbGVuID0gdWQtPnJ4X2l4OworICAgICAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQoVUFSVElEKHVkKSwgU09GVFdBUkVfRklGT19QUkVTRU5UKHVkKSk7CisgICAgICAgIGNiKHVkLT5yeF91c2VyX2RhdGEsIHVkLT5yeF9peCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBod191YXJ0X3R4X2RtYV9jYWxsYmFjayh2b2lkICp1c2VyX2RhdGEsIHVpbnQxNl90IGxlbikKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gdXNlcl9kYXRhOworICAgIGh3X3VhcnRfdHhfY2FsbGJhY2sgY2IgPSB1ZC0+dHhfY2I7CisKKyAgICB1ZC0+dHhfY2IgPSBOVUxMOworICAgIHVkLT50eF9peCA9IGxlbjsKKworICAgIGlmIChjYikKKyAgICB7CisgICAgICAgIGNiKHVkLT50eF91c2VyX2RhdGEsIGxlbik7CisgICAgfQorfQorCit2b2lkIGh3X3VhcnRfc2V0X2RtYV9jaGFubmVscyhIV19VQVJUX0lEIHVhcnQsIGludDhfdCBjaGFubmVsLCBIV19ETUFfUFJJTyBwcmkpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworCisgICAgLyogT25seSBzcGVjaWZpYyBETUEgY2hhbm5lbHMgKG9yIC0xIGZvciBubyBETUEpIGFyZSBhbGxvd2VkICovCisgICAgQVNTRVJUX0VSUk9SKGNoYW5uZWwgPCAwIHx8CisgICAgICAgICAgICAgICAgIGNoYW5uZWwgPT0gSFdfRE1BX0NIQU5ORUxfMCB8fAorICAgICAgICAgICAgICAgICBjaGFubmVsID09IEhXX0RNQV9DSEFOTkVMXzIgfHwKKyAgICAgICAgICAgICAgICAgY2hhbm5lbCA9PSBIV19ETUFfQ0hBTk5FTF80IHx8CisgICAgICAgICAgICAgICAgIGNoYW5uZWwgPT0gSFdfRE1BX0NIQU5ORUxfNiB8fAorICAgICAgICAgICAgICAgICBjaGFubmVsID09IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQpOworCisgICAgaWYgKGNoYW5uZWwgPCAwKQorICAgIHsKKyAgICAgICAgdWQtPnVzZV9kbWEgPSAwOworICAgICAgICB1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyID0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRDsKKyAgICAgICAgdWQtPnR4X2RtYS5jaGFubmVsX251bWJlciA9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVkLT51c2VfZG1hID0gMTsKKworICAgICAgICB1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyID0gY2hhbm5lbDsKKyAgICAgICAgdWQtPnJ4X2RtYS5idXNfd2lkdGggPSBIV19ETUFfQldfQllURTsKKyAgICAgICAgdWQtPnJ4X2RtYS5pcnFfZW5hYmxlID0gSFdfRE1BX0lSUV9TVEFURV9FTkFCTEVEOworICAgICAgICB1ZC0+cnhfZG1hLmRtYV9yZXFfbXV4ID0gVUFSVElYKHVhcnQpID09IDAgPyBIV19ETUFfVFJJR19VQVJUX1JYVFggOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfRE1BX1RSSUdfVUFSVDJfUlhUWDsKKyAgICAgICAgdWQtPnJ4X2RtYS5pcnFfbnJfb2ZfdHJhbnMgPSAwOworICAgICAgICB1ZC0+cnhfZG1hLmFfaW5jID0gSFdfRE1BX0FJTkNfRkFMU0U7CisgICAgICAgIHVkLT5yeF9kbWEuYl9pbmMgPSBIV19ETUFfQklOQ19UUlVFOworICAgICAgICB1ZC0+cnhfZG1hLmNpcmN1bGFyID0gSFdfRE1BX01PREVfTk9STUFMOworICAgICAgICB1ZC0+cnhfZG1hLmRtYV9wcmlvID0gcHJpOworICAgICAgICB1ZC0+cnhfZG1hLmRtYV9pZGxlID0gSFdfRE1BX0lETEVfSU5URVJSVVBUSU5HX01PREU7IC8qIE5vdCB1c2VkIGJ5IHRoZSBIVyBpbiB0aGlzIGNhc2UgKi8KKyAgICAgICAgdWQtPnJ4X2RtYS5kbWFfaW5pdCA9IEhXX0RNQV9JTklUX0FYX0JYX0FZX0JZOworICAgICAgICB1ZC0+cnhfZG1hLmRyZXFfbW9kZSA9IEhXX0RNQV9EUkVRX1RSSUdHRVJFRDsKKyAgICAgICAgdWQtPnJ4X2RtYS5zcmNfYWRkcmVzcyA9ICh1aW50MzJfdCkgJlVCQSh1YXJ0KS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHOworICAgICAgICB1ZC0+cnhfZG1hLmRlc3RfYWRkcmVzcyA9IDA7ICAvLyBDaGFuZ2UgZHVyaW5nIHRyYW5zbWlzc2lvbgorICAgICAgICB1ZC0+cnhfZG1hLmxlbmd0aCA9IDA7IC8vIENoYW5nZSBkdXJpbmcgdHJhbnNtaXNzaW9uCisgICAgICAgIHVkLT5yeF9kbWEuY2FsbGJhY2sgPSBod191YXJ0X3J4X2RtYV9jYWxsYmFjazsKKyAgICAgICAgdWQtPnJ4X2RtYS51c2VyX2RhdGEgPSB1ZDsKKworICAgICAgICB1ZC0+dHhfZG1hLmNoYW5uZWxfbnVtYmVyID0gY2hhbm5lbCArIDE7CisgICAgICAgIHVkLT50eF9kbWEuYnVzX3dpZHRoID0gSFdfRE1BX0JXX0JZVEU7CisgICAgICAgIHVkLT50eF9kbWEuaXJxX2VuYWJsZSA9IEhXX0RNQV9JUlFfU1RBVEVfRU5BQkxFRDsKKyAgICAgICAgdWQtPnR4X2RtYS5kbWFfcmVxX211eCA9IFVBUlRJWCh1YXJ0KSA9PSAwID8gSFdfRE1BX1RSSUdfVUFSVF9SWFRYIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0RNQV9UUklHX1VBUlQyX1JYVFg7CisgICAgICAgIHVkLT50eF9kbWEuaXJxX25yX29mX3RyYW5zID0gMDsKKyAgICAgICAgdWQtPnR4X2RtYS5hX2luYyA9IEhXX0RNQV9BSU5DX1RSVUU7CisgICAgICAgIHVkLT50eF9kbWEuYl9pbmMgPSBIV19ETUFfQklOQ19GQUxTRTsKKyAgICAgICAgdWQtPnR4X2RtYS5jaXJjdWxhciA9IEhXX0RNQV9NT0RFX05PUk1BTDsKKyAgICAgICAgdWQtPnR4X2RtYS5kbWFfcHJpbyA9IHByaTsKKyAgICAgICAgdWQtPnR4X2RtYS5kbWFfaWRsZSA9IEhXX0RNQV9JRExFX0lOVEVSUlVQVElOR19NT0RFOyAvKiBOb3QgdXNlZCBieSB0aGUgSFcgaW4gdGhpcyBjYXNlICovCisgICAgICAgIHVkLT50eF9kbWEuZG1hX2luaXQgPSBIV19ETUFfSU5JVF9BWF9CWF9BWV9CWTsKKyAgICAgICAgdWQtPnR4X2RtYS5kcmVxX21vZGUgPSBIV19ETUFfRFJFUV9UUklHR0VSRUQ7CisgICAgICAgIHVkLT50eF9kbWEuc3JjX2FkZHJlc3MgPSAwOyAvLyBDaGFuZ2UgZHVyaW5nIHRyYW5zbWlzc2lvbgorICAgICAgICB1ZC0+dHhfZG1hLmRlc3RfYWRkcmVzcyA9ICh1aW50MzJfdCkgJlVCQSh1YXJ0KS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHOworICAgICAgICB1ZC0+dHhfZG1hLmxlbmd0aCA9IDA7IC8vIENoYW5nZSBkdXJpbmcgdHJhbnNtaXNzaW9uCisgICAgICAgIHVkLT50eF9kbWEuY2FsbGJhY2sgPSBod191YXJ0X3R4X2RtYV9jYWxsYmFjazsKKyAgICAgICAgdWQtPnR4X2RtYS51c2VyX2RhdGEgPSB1ZDsKKyAgICB9Cit9CisKK3ZvaWQgaHdfdWFydF9zZXRfZG1hX2NoYW5uZWxzX2V4KEhXX1VBUlRfSUQgdWFydCwgaW50OF90IHR4X2NoYW5uZWwsIGludDhfdCByeF9jaGFubmVsLCBIV19ETUFfUFJJTyBwcmkpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworCisgICAgLyogT25seSBzcGVjaWZpYyBETUEgY2hhbm5lbHMgYXJlIGFsbG93ZWQgKG9yIEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQgZm9yIG5vIERNQSkgKi8KKyAgICBBU1NFUlRfRVJST1IodHhfY2hhbm5lbCA+PSBIV19ETUFfQ0hBTk5FTF8wICYmCisgICAgICAgICAgICAgICAgIHR4X2NoYW5uZWwgPD0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRCk7CisKKyAgICAvKiBPbmx5IHNwZWNpZmljIERNQSBjaGFubmVscyBhcmUgYWxsb3dlZCAob3IgSFdfRE1BX0NIQU5ORUxfSU5WQUxJRCBmb3Igbm8gRE1BKSAqLworICAgIEFTU0VSVF9FUlJPUihyeF9jaGFubmVsID49IEhXX0RNQV9DSEFOTkVMXzAgJiYKKyAgICAgICAgICAgICAgICAgcnhfY2hhbm5lbCA8PSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEKTsKKworICAgIGlmICh0eF9jaGFubmVsID09IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQgJiYgcnhfY2hhbm5lbCA9PSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEKQorICAgIHsKKyAgICAgICAgdWQtPnVzZV9kbWEgPSAwOworICAgICAgICB1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyID0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRDsKKyAgICAgICAgdWQtPnR4X2RtYS5jaGFubmVsX251bWJlciA9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh0eF9jaGFubmVsICE9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQgJiYgcnhfY2hhbm5lbCAhPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEKSAvL25vdCBib3RoIGludmFsaWQKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX0VSUk9SKHR4X2NoYW5uZWwgIT0gcnhfY2hhbm5lbCk7Ly9ub3QgZXF1YWwKKyAgICAgICAgICAgIEFTU0VSVF9FUlJPUih0eF9jaGFubmVsID4+IDEgPT0gcnhfY2hhbm5lbCA+PiAxKTsgLy9vbiBzYW1lIHBhaXIKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eF9jaGFubmVsICE9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9FUlJPUih0eF9jaGFubmVsICYgMSk7Ly9vZGQgbnVtYmVyCisgICAgICAgIH0KKworICAgICAgICBpZiAocnhfY2hhbm5lbCAhPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfRVJST1IoKHJ4X2NoYW5uZWwgJiAxKSA9PSAwKTsvL29kZCBudW1iZXIKKyAgICAgICAgfQorCisgICAgICAgIHVkLT51c2VfZG1hID0gMTsKKworICAgICAgICB1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyID0gcnhfY2hhbm5lbDsKKyAgICAgICAgdWQtPnJ4X2RtYS5idXNfd2lkdGggPSBIV19ETUFfQldfQllURTsKKyAgICAgICAgdWQtPnJ4X2RtYS5pcnFfZW5hYmxlID0gSFdfRE1BX0lSUV9TVEFURV9FTkFCTEVEOworICAgICAgICB1ZC0+cnhfZG1hLmRtYV9yZXFfbXV4ID0gVUFSVElYKHVhcnQpID09IDAgPyBIV19ETUFfVFJJR19VQVJUX1JYVFggOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfRE1BX1RSSUdfVUFSVDJfUlhUWDsKKyAgICAgICAgdWQtPnJ4X2RtYS5pcnFfbnJfb2ZfdHJhbnMgPSAwOworICAgICAgICB1ZC0+cnhfZG1hLmFfaW5jID0gSFdfRE1BX0FJTkNfRkFMU0U7CisgICAgICAgIHVkLT5yeF9kbWEuYl9pbmMgPSBIV19ETUFfQklOQ19UUlVFOworICAgICAgICB1ZC0+cnhfZG1hLmNpcmN1bGFyID0gSFdfRE1BX01PREVfTk9STUFMOworICAgICAgICB1ZC0+cnhfZG1hLmRtYV9wcmlvID0gcHJpOworICAgICAgICB1ZC0+cnhfZG1hLmRtYV9pZGxlID0gSFdfRE1BX0lETEVfSU5URVJSVVBUSU5HX01PREU7IC8qIE5vdCB1c2VkIGJ5IHRoZSBIVyBpbiB0aGlzIGNhc2UgKi8KKyAgICAgICAgdWQtPnJ4X2RtYS5kbWFfaW5pdCA9IEhXX0RNQV9JTklUX0FYX0JYX0FZX0JZOworICAgICAgICB1ZC0+cnhfZG1hLmRyZXFfbW9kZSA9IEhXX0RNQV9EUkVRX1RSSUdHRVJFRDsKKyAgICAgICAgdWQtPnJ4X2RtYS5zcmNfYWRkcmVzcyA9ICh1aW50MzJfdCkgJlVCQSh1YXJ0KS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHOworICAgICAgICB1ZC0+cnhfZG1hLmRlc3RfYWRkcmVzcyA9IDA7ICAvLyBDaGFuZ2UgZHVyaW5nIHRyYW5zbWlzc2lvbgorICAgICAgICB1ZC0+cnhfZG1hLmxlbmd0aCA9IDA7IC8vIENoYW5nZSBkdXJpbmcgdHJhbnNtaXNzaW9uCisgICAgICAgIHVkLT5yeF9kbWEuY2FsbGJhY2sgPSBod191YXJ0X3J4X2RtYV9jYWxsYmFjazsKKyAgICAgICAgdWQtPnJ4X2RtYS51c2VyX2RhdGEgPSB1ZDsKKworICAgICAgICB1ZC0+dHhfZG1hLmNoYW5uZWxfbnVtYmVyID0gdHhfY2hhbm5lbDsKKyAgICAgICAgdWQtPnR4X2RtYS5idXNfd2lkdGggPSBIV19ETUFfQldfQllURTsKKyAgICAgICAgdWQtPnR4X2RtYS5pcnFfZW5hYmxlID0gSFdfRE1BX0lSUV9TVEFURV9FTkFCTEVEOworICAgICAgICB1ZC0+dHhfZG1hLmRtYV9yZXFfbXV4ID0gVUFSVElYKHVhcnQpID09IDAgPyBIV19ETUFfVFJJR19VQVJUX1JYVFggOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfRE1BX1RSSUdfVUFSVDJfUlhUWDsKKyAgICAgICAgdWQtPnR4X2RtYS5pcnFfbnJfb2ZfdHJhbnMgPSAwOworICAgICAgICB1ZC0+dHhfZG1hLmFfaW5jID0gSFdfRE1BX0FJTkNfVFJVRTsKKyAgICAgICAgdWQtPnR4X2RtYS5iX2luYyA9IEhXX0RNQV9CSU5DX0ZBTFNFOworICAgICAgICB1ZC0+dHhfZG1hLmNpcmN1bGFyID0gSFdfRE1BX01PREVfTk9STUFMOworICAgICAgICB1ZC0+dHhfZG1hLmRtYV9wcmlvID0gcHJpOworICAgICAgICB1ZC0+dHhfZG1hLmRtYV9pZGxlID0gSFdfRE1BX0lETEVfSU5URVJSVVBUSU5HX01PREU7IC8qIE5vdCB1c2VkIGJ5IHRoZSBIVyBpbiB0aGlzIGNhc2UgKi8KKyAgICAgICAgdWQtPnR4X2RtYS5kbWFfaW5pdCA9IEhXX0RNQV9JTklUX0FYX0JYX0FZX0JZOworICAgICAgICB1ZC0+dHhfZG1hLmRyZXFfbW9kZSA9IEhXX0RNQV9EUkVRX1RSSUdHRVJFRDsKKyAgICAgICAgdWQtPnR4X2RtYS5zcmNfYWRkcmVzcyA9IDA7IC8vIENoYW5nZSBkdXJpbmcgdHJhbnNtaXNzaW9uCisgICAgICAgIHVkLT50eF9kbWEuZGVzdF9hZGRyZXNzID0gKHVpbnQzMl90KSAmVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUc7CisgICAgICAgIHVkLT50eF9kbWEubGVuZ3RoID0gMDsgLy8gQ2hhbmdlIGR1cmluZyB0cmFuc21pc3Npb24KKyAgICAgICAgdWQtPnR4X2RtYS5jYWxsYmFjayA9IGh3X3VhcnRfdHhfZG1hX2NhbGxiYWNrOworICAgICAgICB1ZC0+dHhfZG1hLnVzZXJfZGF0YSA9IHVkOworICAgIH0KK30KKworI2lmIGRnX2NvbmZpZ1VBUlRfUlhfQ0lSQ1VMQVJfRE1BCisKK3N0YXRpYyB2b2lkIGh3X3VhcnRfcnhfY2lyY3VsYXJfZG1hX2NhbGxiYWNrKHZvaWQgKnVzZXJfZGF0YSwgdWludDE2X3QgbGVuKQoreworICAgIFVBUlRfRGF0YSAqdWQgPSB1c2VyX2RhdGE7CisgICAgaHdfdWFydF9yeF9jYWxsYmFjayBjYiA9IHVkLT5yeF9jYjsKKworICAgIGlmICghdWQtPnJ4X2RtYV9hY3RpdmUpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWQtPnJ4X2NiID0gTlVMTDsKKyAgICB1ZC0+cnhfZG1hX2FjdGl2ZSA9IGZhbHNlOworCisgICAgaWYgKGNiKQorICAgIHsKKyAgICAgICAgY2IodWQtPnJ4X3VzZXJfZGF0YSwgdWQtPnJ4X2xlbik7CisgICAgfQorfQorCit2b2lkIGh3X3VhcnRfZW5hYmxlX3J4X2NpcmN1bGFyX2RtYShIV19VQVJUX0lEIHVhcnQpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworCisgICAgQVNTRVJUX0VSUk9SKHVkLT5yeF9kbWFfYnVmX3NpemUgPiAwKTsKKworICAgIGh3X2RtYV9jaGFubmVsX2VuYWJsZSh1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyLCBIV19ETUFfU1RBVEVfRElTQUJMRUQpOworCisgICAgLyogTmVlZCB0byByZWNvbmZpZ3VyZSBmZXcgdGhpbmdzIGZvciBjaXJjdWxhciBvcGVyYXRpb24uLi4gKi8KKyAgICB1ZC0+cnhfZG1hLmNpcmN1bGFyID0gSFdfRE1BX01PREVfQ0lSQ1VMQVI7CisgICAgdWQtPnJ4X2RtYS5kZXN0X2FkZHJlc3MgPSAodWludDMyX3QpIHVkLT5yeF9kbWFfYnVmOworICAgIHVkLT5yeF9kbWEubGVuZ3RoID0gdWQtPnJ4X2RtYV9idWZfc2l6ZTsKKyAgICB1ZC0+cnhfZG1hLmNhbGxiYWNrID0gaHdfdWFydF9yeF9jaXJjdWxhcl9kbWFfY2FsbGJhY2s7CisgICAgdWQtPnJ4X2RtYS51c2VyX2RhdGEgPSB1ZDsKKworICAgIC8qIFJlc2V0IERNQSBidWZmZXIgcmVhZCBwb2ludGVyICovCisgICAgdWQtPnJ4X2RtYV9oZWFkID0gMDsKKworICAgIC8qIFN0YXJ0IERNQSBub3cgc2luY2UgaXQgc2hvdWxkIGJlIGFsd2F5cy1ydW5uaW5nICovCisgICAgaHdfdWFydF9jbGVhcl9kbWFfcmVxdWVzdCh1YXJ0KTsKKyAgICBod19kbWFfY2hhbm5lbF9pbml0aWFsaXphdGlvbigmdWQtPnJ4X2RtYSk7CisgICAgaHdfZG1hX2NoYW5uZWxfZW5hYmxlKHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIsIEhXX0RNQV9TVEFURV9FTkFCTEVEKTsKK30KKwordm9pZCBod191YXJ0X2NvcHlfcnhfY2lyY3VsYXJfZG1hX2J1ZmZlcihIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3QgbGVuKQoreworICAgIFVBUlRfRGF0YSAqdWQgPSBVQVJUREFUQSh1YXJ0KTsKKworICAgIEFTU0VSVF9FUlJPUihsZW4gPCB1ZC0+cnhfZG1hX2J1Zl9zaXplKTsKKworICAgIGlmICh1ZC0+cnhfZG1hX2hlYWQgKyBsZW4gPD0gdWQtPnJ4X2RtYV9idWZfc2l6ZSkKKyAgICB7CisgICAgICAgIG1lbWNweShidWYsICZ1ZC0+cnhfZG1hX2J1Zlt1ZC0+cnhfZG1hX2hlYWRdLCBsZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aW50MTZfdCBjaHVua19sZW4gPSB1ZC0+cnhfZG1hX2J1Zl9zaXplIC0gdWQtPnJ4X2RtYV9oZWFkOworICAgICAgICBtZW1jcHkoYnVmLCAmdWQtPnJ4X2RtYV9idWZbdWQtPnJ4X2RtYV9oZWFkXSwgY2h1bmtfbGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1ZiArIGNodW5rX2xlbiwgJnVkLT5yeF9kbWFfYnVmWzBdLCBsZW4gLSBjaHVua19sZW4pOworICAgIH0KKworICAgIC8qIFRoaXMgc2hvdWxkIGJlIHByb3RlY3RlZCBzbyBJU1IgZG9lcyBub3QgdHJ5IHRvIHJlYWQgcnhfZG1hX2hlYWQgd2hpbGUgd2UgdXBkYXRlIGl0ICovCisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgdWQtPnJ4X2RtYV9oZWFkID0gKHVkLT5yeF9kbWFfaGVhZCArIGxlbikgJSB1ZC0+cnhfZG1hX2J1Zl9zaXplOworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisjZW5kaWYgLyogZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEgKi8KKworI2VuZGlmIC8qIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUICovCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09IExpbmUgY29udHJvbCBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZCBod191YXJ0X2luaXRfZXgoSFdfVUFSVF9JRCB1YXJ0LCBjb25zdCB1YXJ0X2NvbmZpZ19leCAqdWFydF9pbml0KQoreworICAgIFVBUlRfRGF0YSAqdWQgPSBVQVJUREFUQSh1YXJ0KTsKKworICAgIC8qCisgICAgICogUmVhZCBVQVJUX1VTUl9SRUcgdG8gY2xlYXIgYW55IHBlbmRpbmcgYnVzeSBpbnRlcnJ1cHQuCisgICAgICovCisgICAgaHdfdWFydF90cmFuc21pdF9maWZvX2VtcHR5KHVhcnQpOworCisKKyAgICBpZiAodWFydCA9PSBIV19VQVJUMSkKKyAgICB7CisgICAgICAgIC8vIHRoZXJlIGlzIG5vIEZJRk8gZm9yIFVBUlQwIGFzIHlldAorICAgICAgICB1ZC0+cnhfZmlmb19vbiA9IDA7CisgICAgICAgIHVkLT50eF9maWZvX29uID0gMDsKKyAgICAgICAgaHdfdWFydF9kaXNhYmxlX2ZpZm8odWFydCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh1YXJ0X2luaXQtPnVzZV9maWZvKQorICAgICAgICB7CisgICAgICAgICAgICB1ZC0+cnhfZmlmb19vbiA9IDE7CisgICAgICAgICAgICB1ZC0+dHhfZmlmb19vbiA9IDE7CisgICAgICAgICAgICBod191YXJ0X2VuYWJsZV9maWZvKHVhcnQpOworICAgICAgICAgICAgdWQtPnJ4X2ZpZm9fbGV2ZWwgPSB1YXJ0X2luaXQtPnJ4X2ZpZm9fdHJfbHZsOworICAgICAgICAgICAgaHdfdWFydF9yeF9maWZvX3RyX2x2bF9zZXRmKHVhcnQsIHVhcnRfaW5pdC0+cnhfZmlmb190cl9sdmwpOworICAgICAgICAgICAgdWQtPnR4X2ZpZm9fbGV2ZWwgPSB1YXJ0X2luaXQtPnR4X2ZpZm9fdHJfbHZsOworICAgICAgICAgICAgaHdfdWFydF90eF9maWZvX3RyX2x2bF9zZXRmKHVhcnQsIHVhcnRfaW5pdC0+dHhfZmlmb190cl9sdmwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdWQtPnJ4X2ZpZm9fb24gPSAwOworICAgICAgICAgICAgdWQtPnR4X2ZpZm9fb24gPSAwOworICAgICAgICAgICAgaHdfdWFydF9kaXNhYmxlX2ZpZm8odWFydCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBSRUdfU0VUX0JJVChDUkdfUEVSLCBDTEtfUEVSX1JFRywgVUFSVF9FTkFCTEUpOworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworCisgICAgLy8gU2V0IERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCBpbiBMQ1IgcmVnaXN0ZXIgdG8gYWNjZXNzIERMTCAmIERMSCByZWdpc3RlcnMKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9ETEFCLCAxKTsKKyAgICAvLyBTZXQgZnJhY3Rpb24gYnl0ZSBvZiBiYXVkIHJhdGUKKyAgICBVQkEodWFydCktPlVBUlQyX0RMRl9SRUcgPSAweEZGICYgdWFydF9pbml0LT5iYXVkX3JhdGU7CisgICAgLy8gU2V0IGxvdyBieXRlIG9mIGJhdWQgcmF0ZQorICAgIFVCQSh1YXJ0KS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHID0gMHhGRiAmICh1YXJ0X2luaXQtPmJhdWRfcmF0ZSA+PiA4KTsKKyAgICAvLyBTZXQgaGlnaCBieXRlIG9mIGJhdWQgcmF0ZQorICAgIFVCQSh1YXJ0KS0+VUFSVDJfSUVSX0RMSF9SRUcgPSAweEZGICYgKHVhcnRfaW5pdC0+YmF1ZF9yYXRlID4+IDE2KTsKKyAgICAvLyBSZXNldCBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgaW4gTENSIHJlZ2lzdGVyCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExBQiwgMCk7CisgICAgLy8gU2V0IFBhcml0eQorICAgIFVCQSh1YXJ0KS0+VUFSVDJfTENSX1JFRyA9ICh1YXJ0X2luaXQtPnBhcml0eSkgPDwgMzsKKyAgICAvLyBTZXQgRGF0YSBCaXRzCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExTLCB1YXJ0X2luaXQtPmRhdGEpOworICAgIC8vIFNldCBTdG9wIEJpdHMKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9TVE9QLCB1YXJ0X2luaXQtPnN0b3ApOworICAgIC8vIFNldCBBdXRvIGZsb3cgY29udHJvbAorICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTUNSLCBVQVJUX0FGQ0UsIHVhcnRfaW5pdC0+YXV0b19mbG93X2NvbnRyb2wpOworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTUNSLCBVQVJUX1JUUywgdWFydF9pbml0LT5hdXRvX2Zsb3dfY29udHJvbCk7CisgICAgdWQtPnR4X2NiID0gTlVMTDsKKyAgICB1ZC0+cnhfY2IgPSBOVUxMOworICAgIHVkLT5yeF9sZW4gPSAwOworICAgIHVkLT50eF9sZW4gPSAwOworICAgIHVkLT51c2VfZG1hID0gMDsKKyAgICB1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyID0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRDsKKyAgICB1ZC0+dHhfZG1hLmNoYW5uZWxfbnVtYmVyID0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRDsKKyNpZiBIV19VQVJUX1VTRV9ETUFfU1VQUE9SVAorCisgICAgaWYgKHVhcnRfaW5pdC0+dXNlX2RtYSkKKyAgICB7CisgICAgICAgIGh3X3VhcnRfc2V0X2RtYV9jaGFubmVsc19leCh1YXJ0LCB1YXJ0X2luaXQtPnR4X2RtYV9jaGFubmVsLCB1YXJ0X2luaXQtPnJ4X2RtYV9jaGFubmVsLCBIV19ETUFfUFJJT18yKTsKKyAgICB9CisKKyNlbmRpZgorfQorCit2b2lkIGh3X3VhcnRfcmVpbml0X2V4KEhXX1VBUlRfSUQgdWFydCwgY29uc3QgdWFydF9jb25maWdfZXggKnVhcnRfaW5pdCkKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gVUFSVERBVEEodWFydCk7CisKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBSRUdfU0VUX0JJVChDUkdfUEVSLCBDTEtfUEVSX1JFRywgVUFSVF9FTkFCTEUpOworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworCisgICAgLyoKKyAgICAgKiBSZWFkIFVBUlRfVVNSX1JFRyB0byBjbGVhciBhbnkgcGVuZGluZyBidXN5IGludGVycnVwdC4KKyAgICAgKi8KKyAgICBod191YXJ0X3RyYW5zbWl0X2ZpZm9fZW1wdHkodWFydCk7CisKKyAgICBpZiAodWFydCA9PSBIV19VQVJUMikKKyAgICB7CisgICAgICAgIGlmICh1YXJ0X2luaXQtPnVzZV9maWZvKQorICAgICAgICB7CisgICAgICAgICAgICBod191YXJ0X2VuYWJsZV9maWZvKHVhcnQpOworICAgICAgICAgICAgaHdfdWFydF9yeF9maWZvX3RyX2x2bF9zZXRmKHVhcnQsIHVhcnRfaW5pdC0+cnhfZmlmb190cl9sdmwpOworICAgICAgICAgICAgaHdfdWFydF90eF9maWZvX3RyX2x2bF9zZXRmKHVhcnQsIHVhcnRfaW5pdC0+dHhfZmlmb190cl9sdmwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaHdfdWFydF9kaXNhYmxlX2ZpZm8odWFydCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0IGluIExDUiByZWdpc3RlciB0byBhY2Nlc3MgRExMICYgRExIIHJlZ2lzdGVycworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMQUIsIDEpOworICAgIC8vIFNldCBmcmFjdGlvbiBieXRlIG9mIGJhdWQgcmF0ZQorICAgIFVCQSh1YXJ0KS0+VUFSVDJfRExGX1JFRyA9IDB4RkYgJiB1YXJ0X2luaXQtPmJhdWRfcmF0ZTsKKyAgICAvLyBTZXQgbG93IGJ5dGUgb2YgYmF1ZCByYXRlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUcgPSAweEZGICYgKHVhcnRfaW5pdC0+YmF1ZF9yYXRlID4+IDgpOworICAgIC8vIFNldCBoaWdoIGJ5dGUgb2YgYmF1ZCByYXJlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9JRVJfRExIX1JFRyA9IDB4RkYgJiAodWFydF9pbml0LT5iYXVkX3JhdGUgPj4gMTYpOworICAgIC8vIFJlc2V0IERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCBpbiBMQ1IgcmVnaXN0ZXIKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9ETEFCLCAwKTsKKyAgICAvLyBTZXQgUGFyaXR5CisgICAgVUJBKHVhcnQpLT5VQVJUMl9MQ1JfUkVHID0gKHVhcnRfaW5pdC0+cGFyaXR5KSA8PCAzOworICAgIC8vIFNldCBEYXRhIEJpdHMKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9ETFMsIHVhcnRfaW5pdC0+ZGF0YSk7CisgICAgLy8gU2V0IFN0b3AgQml0cworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX1NUT1AsIHVhcnRfaW5pdC0+c3RvcCk7CisgICAgLy8gU2V0IEF1dG8gZmxvdyBjb250cm9sCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBNQ1IsIFVBUlRfQUZDRSwgdWFydF9pbml0LT5hdXRvX2Zsb3dfY29udHJvbCk7CisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBNQ1IsIFVBUlRfUlRTLCB1YXJ0X2luaXQtPmF1dG9fZmxvd19jb250cm9sKTsKKworICAgIGlmICh1ZC0+cnhfY2IgJiYgdWQtPnJ4X2xlbiAhPSB1ZC0+cnhfaXgpCisgICAgeworICAgICAgICBpZiAodWQtPnJ4X2xlbiA+IDEgJiYgdWFydF9pbml0LT51c2VfZG1hICYmIHVhcnRfaW5pdC0+cnhfZG1hX2NoYW5uZWwgIT0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSW50ZXJydXB0IGRyaXZlbgorICAgICAgICAgICAgaHdfdWFydF9lbmFibGVfcnhfaW50KHVhcnQsIHRydWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIGh3X3VhcnRfaW5pdChIV19VQVJUX0lEIHVhcnQsIGNvbnN0IHVhcnRfY29uZmlnICp1YXJ0X2luaXQpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworCisgICAgLyoKKyAgICAgKiBSZWFkIFVBUlRfVVNSX1JFRyB0byBjbGVhciBhbnkgcGVuZGluZyBidXN5IGludGVycnVwdC4KKyAgICAgKi8KKyAgICBod191YXJ0X3RyYW5zbWl0X2ZpZm9fZW1wdHkodWFydCk7CisKKworICAgIGlmICh1YXJ0ID09IEhXX1VBUlQxKQorICAgIHsKKyAgICAgICAgLy8gdGhlcmUgaXMgbm8gRklGTyBmb3IgVUFSVDAgYXMgeWV0CisgICAgICAgIHVkLT5yeF9maWZvX29uID0gMDsKKyAgICAgICAgdWQtPnR4X2ZpZm9fb24gPSAwOworICAgICAgICBod191YXJ0X2Rpc2FibGVfZmlmbyh1YXJ0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHVhcnRfaW5pdC0+dXNlX2ZpZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHVkLT5yeF9maWZvX29uID0gMTsKKyAgICAgICAgICAgIHVkLT50eF9maWZvX29uID0gMTsKKyAgICAgICAgICAgIGh3X3VhcnRfZW5hYmxlX2ZpZm8odWFydCk7CisgICAgICAgICAgICBod191YXJ0X3J4X2ZpZm9fdHJfbHZsX3NldGYodWFydCwgMCk7CisgICAgICAgICAgICBod191YXJ0X3R4X2ZpZm9fdHJfbHZsX3NldGYodWFydCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1ZC0+cnhfZmlmb19vbiA9IDA7CisgICAgICAgICAgICB1ZC0+dHhfZmlmb19vbiA9IDA7CisgICAgICAgICAgICBod191YXJ0X2Rpc2FibGVfZmlmbyh1YXJ0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIFJFR19TRVRfQklUKENSR19QRVIsIENMS19QRVJfUkVHLCBVQVJUX0VOQUJMRSk7CisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisKKyAgICAvLyBTZXQgRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0IGluIExDUiByZWdpc3RlciB0byBhY2Nlc3MgRExMICYgRExIIHJlZ2lzdGVycworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMQUIsIDEpOworICAgIC8vIFNldCBmcmFjdGlvbiBieXRlIG9mIGJhdWQgcmF0ZQorICAgIFVCQSh1YXJ0KS0+VUFSVDJfRExGX1JFRyA9IDB4RkYgJiB1YXJ0X2luaXQtPmJhdWRfcmF0ZTsKKyAgICAvLyBTZXQgbG93IGJ5dGUgb2YgYmF1ZCByYXRlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUcgPSAweEZGICYgKHVhcnRfaW5pdC0+YmF1ZF9yYXRlID4+IDgpOworICAgIC8vIFNldCBoaWdoIGJ5dGUgb2YgYmF1ZCByYXRlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9JRVJfRExIX1JFRyA9IDB4RkYgJiAodWFydF9pbml0LT5iYXVkX3JhdGUgPj4gMTYpOworICAgIC8vIFJlc2V0IERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCBpbiBMQ1IgcmVnaXN0ZXIKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9ETEFCLCAwKTsKKyAgICAvLyBTZXQgUGFyaXR5CisgICAgVUJBKHVhcnQpLT5VQVJUMl9MQ1JfUkVHID0gKHVhcnRfaW5pdC0+cGFyaXR5KSA8PCAzOworICAgIC8vIFNldCBEYXRhIEJpdHMKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9ETFMsIHVhcnRfaW5pdC0+ZGF0YSk7CisgICAgLy8gU2V0IFN0b3AgQml0cworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX1NUT1AsIHVhcnRfaW5pdC0+c3RvcCk7CisgICAgLy8gU2V0IEF1dG8gZmxvdyBjb250cm9sCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBNQ1IsIFVBUlRfQUZDRSwgdWFydF9pbml0LT5hdXRvX2Zsb3dfY29udHJvbCk7CisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBNQ1IsIFVBUlRfUlRTLCB1YXJ0X2luaXQtPmF1dG9fZmxvd19jb250cm9sKTsKKyAgICB1ZC0+dHhfY2IgPSBOVUxMOworICAgIHVkLT5yeF9jYiA9IE5VTEw7CisgICAgdWQtPnJ4X2xlbiA9IDA7CisgICAgdWQtPnR4X2xlbiA9IDA7CisgICAgdWQtPnVzZV9kbWEgPSAwOworICAgIHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIgPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEOworICAgIHVkLT50eF9kbWEuY2hhbm5lbF9udW1iZXIgPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEOworI2lmIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUCisKKyAgICBpZiAodWFydF9pbml0LT51c2VfZG1hKQorICAgIHsKKyAgICAgICAgaHdfdWFydF9zZXRfZG1hX2NoYW5uZWxzX2V4KHVhcnQsIHVhcnRfaW5pdC0+dHhfZG1hX2NoYW5uZWwsIHVhcnRfaW5pdC0+cnhfZG1hX2NoYW5uZWwsIEhXX0RNQV9QUklPXzIpOworICAgIH0KKworI2VuZGlmCit9CisKK3ZvaWQgaHdfdWFydF9yZWluaXQoSFdfVUFSVF9JRCB1YXJ0LCBjb25zdCB1YXJ0X2NvbmZpZyAqdWFydF9pbml0KQoreworICAgIFVBUlRfRGF0YSAqdWQgPSBVQVJUREFUQSh1YXJ0KTsKKworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIFJFR19TRVRfQklUKENSR19QRVIsIENMS19QRVJfUkVHLCBVQVJUX0VOQUJMRSk7CisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisKKyAgICAvKgorICAgICAqIFJlYWQgVUFSVF9VU1JfUkVHIHRvIGNsZWFyIGFueSBwZW5kaW5nIGJ1c3kgaW50ZXJydXB0LgorICAgICAqLworICAgIGh3X3VhcnRfdHJhbnNtaXRfZmlmb19lbXB0eSh1YXJ0KTsKKworICAgIGlmICh1YXJ0ID09IEhXX1VBUlQyKQorICAgIHsKKyAgICAgICAgaWYgKHVhcnRfaW5pdC0+dXNlX2ZpZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X3VhcnRfZW5hYmxlX2ZpZm8odWFydCk7CisgICAgICAgICAgICBod191YXJ0X3J4X2ZpZm9fdHJfbHZsX3NldGYodWFydCwgMCk7CisgICAgICAgICAgICBod191YXJ0X3R4X2ZpZm9fdHJfbHZsX3NldGYodWFydCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBod191YXJ0X2Rpc2FibGVfZmlmbyh1YXJ0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNldCBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgaW4gTENSIHJlZ2lzdGVyIHRvIGFjY2VzcyBETEwgJiBETEggcmVnaXN0ZXJzCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExBQiwgMSk7CisgICAgLy8gU2V0IGZyYWN0aW9uIGJ5dGUgb2YgYmF1ZCByYXRlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9ETEZfUkVHID0gMHhGRiAmIHVhcnRfaW5pdC0+YmF1ZF9yYXRlOworICAgIC8vIFNldCBsb3cgYnl0ZSBvZiBiYXVkIHJhdGUKKyAgICBVQkEodWFydCktPlVBUlQyX1JCUl9USFJfRExMX1JFRyA9IDB4RkYgJiAodWFydF9pbml0LT5iYXVkX3JhdGUgPj4gOCk7CisgICAgLy8gU2V0IGhpZ2ggYnl0ZSBvZiBiYXVkIHJhcmUKKyAgICBVQkEodWFydCktPlVBUlQyX0lFUl9ETEhfUkVHID0gMHhGRiAmICh1YXJ0X2luaXQtPmJhdWRfcmF0ZSA+PiAxNik7CisgICAgLy8gUmVzZXQgRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0IGluIExDUiByZWdpc3RlcgorICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMQUIsIDApOworICAgIC8vIFNldCBQYXJpdHkKKyAgICBVQkEodWFydCktPlVBUlQyX0xDUl9SRUcgPSAodWFydF9pbml0LT5wYXJpdHkpIDw8IDM7CisgICAgLy8gU2V0IERhdGEgQml0cworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMUywgdWFydF9pbml0LT5kYXRhKTsKKyAgICAvLyBTZXQgU3RvcCBCaXRzCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfU1RPUCwgdWFydF9pbml0LT5zdG9wKTsKKyAgICAvLyBTZXQgQXV0byBmbG93IGNvbnRyb2wKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIE1DUiwgVUFSVF9BRkNFLCB1YXJ0X2luaXQtPmF1dG9fZmxvd19jb250cm9sKTsKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIE1DUiwgVUFSVF9SVFMsIHVhcnRfaW5pdC0+YXV0b19mbG93X2NvbnRyb2wpOworCisgICAgaWYgKHVkLT5yeF9jYiAmJiB1ZC0+cnhfbGVuICE9IHVkLT5yeF9peCkKKyAgICB7CisgICAgICAgIGlmICh1ZC0+cnhfbGVuID4gMSAmJiB1YXJ0X2luaXQtPnVzZV9kbWEgJiYgdWFydF9pbml0LT5yeF9kbWFfY2hhbm5lbCAhPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJbnRlcnJ1cHQgZHJpdmVuCisgICAgICAgICAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQodWFydCwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgaHdfdWFydF9jZmdfZ2V0KEhXX1VBUlRfSUQgdWFydCwgdWFydF9jb25maWcgKnVhcnRfY2ZnKQoreworI2lmIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUCisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworI2VuZGlmCisKKyAgICAvLyBTZXQgRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0IGluIExDUiByZWdpc3RlciB0byBhY2Nlc3MgRExMICYgRExIIHJlZ2lzdGVycworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMQUIsIDEpOworICAgIC8vIFJlYWQgYmF1ZCByYXRlIGxvdyBieXRlIGZyb20gRExMIHJlZ2lzdGVyCisgICAgdWFydF9jZmctPmJhdWRfcmF0ZSA9ICgweEZGICYgVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUcpIDw8IDg7CisgICAgLy8gUmVhZCBiYXVkIHJhdGUgaGlnaCBieXRlIGZyb20gRExIIHJlZ2lzdGVyCisgICAgdWFydF9jZmctPmJhdWRfcmF0ZSArPSAoMHhGRiAmIFVCQSh1YXJ0KS0+VUFSVDJfSUVSX0RMSF9SRUcpIDw8IDE2OworICAgIC8vIFJlYWQgYmF1ZCByYXRlIGZyYWN0aW9uIGJ5dGUgZnJvbSBETEYgcmVnaXN0ZXIKKyAgICB1YXJ0X2NmZy0+YmF1ZF9yYXRlICs9IDB4RkYgJiBVQkEodWFydCktPlVBUlQyX0RMRl9SRUc7CisgICAgLy8gUmVzZXQgRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0IGluIExpbmUgQ29udHJvbCBSZWdpc3RlcgorICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMQUIsIDApOworCisgICAgLy8gRmlsbC1pbiB0aGUgcmVzdCBvZiB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncworICAgIHVhcnRfY2ZnLT5kYXRhID0gSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBMQ1IsIFVBUlRfRExTKTsKKyAgICB1YXJ0X2NmZy0+cGFyaXR5ID0gVUJBKHVhcnQpLT5VQVJUMl9MQ1JfUkVHOworICAgIHVhcnRfY2ZnLT5wYXJpdHkgJj0gKCgxIDw8IFVBUlRfVUFSVF9MQ1JfUkVHX1VBUlRfRVBTX1BvcykgfCAoMSA8PCBVQVJUX1VBUlRfTENSX1JFR19VQVJUX1BFTl9Qb3MpKTsKKyAgICB1YXJ0X2NmZy0+cGFyaXR5ID0gdWFydF9jZmctPnBhcml0eSA+PiBVQVJUX1VBUlRfTENSX1JFR19VQVJUX1BFTl9Qb3M7CisgICAgdWFydF9jZmctPnN0b3AgPSBIV19VQVJUX1JFR19HRVRGKHVhcnQsIExDUiwgVUFSVF9TVE9QKTsKKyNpZiBIV19VQVJUX1VTRV9ETUFfU1VQUE9SVAorICAgIHVhcnRfY2ZnLT50eF9kbWFfY2hhbm5lbCA9IHVkLT50eF9kbWEuY2hhbm5lbF9udW1iZXI7CisgICAgdWFydF9jZmctPnJ4X2RtYV9jaGFubmVsID0gdWQtPnJ4X2RtYS5jaGFubmVsX251bWJlcjsKKyAgICB1YXJ0X2NmZy0+dXNlX2RtYSA9IHVkLT51c2VfZG1hOworI2VuZGlmCisgICAgdWFydF9jZmctPmF1dG9fZmxvd19jb250cm9sID0gaHdfdWFydF9hZmNlX2dldGYodWFydCk7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09IE1vZGVtIGNvbnRyb2wgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3VpbnQ4X3QgaHdfdWFydF9zaXJlX2dldGYoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIC8vIEdldCB0aGUgdmFsdWUgb2YgdGhlIFNJUkUgYml0IGZyb20gdGhlIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKKyAgICByZXR1cm4gKHVpbnQ4X3QpIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTUNSLCBVQVJUX1NJUkUpOworfQorCit2b2lkIGh3X3VhcnRfc2lyZV9zZXRmKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCBzaXJlKQoreworICAgIC8vIFNldCB0aGUgdmFsdWUgb2YgdGhlIFNJUkUgYml0IGluIHRoZSBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBNQ1IsIFVBUlRfU0lSRSwgIHNpcmUpOworfQorCit1aW50OF90IGh3X3VhcnRfYWZjZV9nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvLyBHZXQgdGhlIHZhbHVlIG9mIHRoZSBBRkNFIGJpdCBmcm9tIHRoZSBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCisgICAgcmV0dXJuIDB4RkYgJiBIV19VQVJUX1JFR19HRVRGKHVhcnQsIE1DUiwgVUFSVF9BRkNFKTsKK30KKwordm9pZCBod191YXJ0X2FmY2Vfc2V0ZihIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgYWZjZSkKK3sKKyAgICAvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSBBRkNFIGJpdCBpbiB0aGUgTW9kZW0gQ29udHJvbCBSZWdpc3RlcgorICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTUNSLCBVQVJUX0FGQ0UsIGFmY2UpOworfQorCit1aW50OF90IGh3X3VhcnRfbG9vcGJhY2tfZ2V0ZihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgLy8gR2V0IHRoZSB2YWx1ZSBvZiB0aGUgbG9vcCBiYWNrIChMQikgYml0IGZyb20gdGhlIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKKyAgICByZXR1cm4gKHVpbnQ4X3QpIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTUNSLCBVQVJUX0xCKTsKK30KKwordm9pZCBod191YXJ0X2xvb3BiYWNrX3NldGYoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IGxiKQoreworICAgIC8vIFNldCB0aGUgdmFsdWUgb2YgdGhlIGxvb3AgYmFjayAoTEIpIGJpdCBpbiB0aGUgTW9kZW0gQ29udHJvbCBSZWdpc3RlcgorICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTUNSLCBVQVJUX0xCLCBsYik7Cit9CisKK3VpbnQ4X3QgaHdfdWFydF9ydHNfZ2V0ZihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgLy8gR2V0IHRoZSB2YWx1ZSBvZiB0aGUgUlRTIGJpdCBmcm9tIHRoZSBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCisgICAgcmV0dXJuIDB4RkYgJiBIV19VQVJUX1JFR19HRVRGKHVhcnQsIE1DUiwgVUFSVF9SVFMpOworfQorCit2b2lkIGh3X3VhcnRfcnRzX3NldGYoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IHJ0c24pCit7CisgICAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgUlRTIGJpdCBpbiB0aGUgTW9kZW0gQ29udHJvbCBSZWdpc3RlcgorICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTUNSLCBVQVJUX1JUUywgcnRzbik7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09IExpbmUgc3RhdHVzIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3VpbnQ4X3QgaHdfdWFydF9yeF9maWZvX2Vycl9nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvKiBPbmx5IFVBUlQyIGhhcyBhIEZJRk8gKi8KKyAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisgICAgLy8gR2V0IFJlY2VpdmVyIEZJRk8gRXJyb3IgYml0CisgICAgcmV0dXJuICh1aW50OF90KSBIV19VQVJUX1JFR19HRVRGKHVhcnQsIExTUiwgVUFSVF9SRkUpOworfQorCit1aW50OF90IGh3X3VhcnRfaXNfdHhfZmlmb19lbXB0eShIV19VQVJUX0lEIHVhcnQpCit7CisgICAgLy8gR2V0IFRyYW5zbWl0dGVyIEVtcHR5IGJpdCBmcm9tIExpbmUgU3RhdHVzIFJlZ2lzdGVyCisgICAgcmV0dXJuIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTFNSLCBVQVJUX1RFTVQpICE9IDA7Cit9CisKK3VpbnQ4X3QgaHdfdWFydF90aHJfZW1wdHlfZ2V0ZihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgLy8gR2V0IFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgYml0IHZhbHVlIGZyb20gTGluZSBTdGF0dXMgUmVnaXN0ZXIKKyAgICByZXR1cm4gSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBMU1IsIFVBUlRfVEhSRSk7Cit9CisKK3VpbnQ4X3QgaHdfdWFydF9icmVha19pbnRfZ2V0ZihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgLy8gR2V0IEJyZWFrIEludGVycnVwdCBiaXQgdmFsdWUgZnJvbSBMaW5lIFN0YXR1cyBSZWdpc3RlcgorICAgIHJldHVybiBIV19VQVJUX1JFR19HRVRGKHVhcnQsIExTUiwgVUFSVF9CSSk7Cit9CisKK3VpbnQ4X3QgaHdfdWFydF9mcmFtZV9lcnJfZ2V0ZihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgLy8gR2V0IEZyYW1pbmcgRXJyb3IgYml0IHZhbHVlIGZyb20gTGluZSBTdGF0dXMgUmVnaXN0ZXIKKyAgICByZXR1cm4gSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBMU1IsIFVBUlRfRkUpOworfQorCit1aW50OF90IGh3X3VhcnRfcGFyaXR5X2Vycl9nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvLyBHZXQgUGFyaXR5IEVycm9yIGJpdCB2YWx1ZSBmcm9tIExpbmUgU3RhdHVzIFJlZ2lzdGVyCisgICAgcmV0dXJuIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTFNSLCBVQVJUX1BFKTsKK30KKwordWludDhfdCBod191YXJ0X292ZXJydW5fZXJyX2dldGYoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIC8vIEdldCBPdmVycnVuIEVycm9yIGJpdCB2YWx1ZSBmcm9tIExpbmUgU3RhdHVzIFJlZ2lzdGVyCisgICAgcmV0dXJuIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTFNSLCBVQVJUX09FKTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0gTW9kZW0gc3RhdHVzIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwordWludDhfdCBod191YXJ0X2N0c19nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvLyBHZXQgQ1RTIGJpdCBmcm9tIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKKyAgICByZXR1cm4gKHVpbnQ4X3QpIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTVNSLCBVQVJUX0NUUyk7Cit9CisKK3VpbnQ4X3QgaHdfdWFydF9kZWx0YV9jdHNfZ2V0ZihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgLy8gR2V0IHRoZSBEQ1RTIGJpdCB2YWx1ZSBmcm9tIHRoZSBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCisgICAgcmV0dXJuICh1aW50OF90KSBIV19VQVJUX1JFR19HRVRGKHVhcnQsIE1TUiwgVUFSVF9EQ1RTKTsKK30KKworYm9vbCBod191YXJ0X3R4X2luX3Byb2dyZXNzKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gVUFSVERBVEEodWFydCk7CisgICAgcmV0dXJuIHVkLT50eF9jYiAhPSBOVUxMOworfQorCitib29sIGh3X3VhcnRfcnhfaW5fcHJvZ3Jlc3MoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIFVBUlRfRGF0YSAqdWQgPSBVQVJUREFUQSh1YXJ0KTsKKyAgICByZXR1cm4gdWQtPnJ4X2NiICE9IE5VTEw7Cit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfVUFSVCAqLworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od193YXRjaGRvZy5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3dhdGNoZG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3NjRiMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od193YXRjaGRvZy5jCkBAIC0wLDAgKzEsMTgxIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBXYXRjaGRvZ19UaW1lcgorICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfd2F0Y2hkb2cuYworICoKKyAqIEBicmllZiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgV2F0Y2hkb2cgdGltZXIgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImh3X3dhdGNoZG9nLmgiCisjaW5jbHVkZSAiaHdfY3BtLmgiCisKKy8qCisgKiBHbG9iYWwgdmFyaWFibGVzCisgKi8KK3VpbnQzMl90IG5taV9ldmVudF9kYXRhWzldIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIm5taV9pbmZvIikpKTsKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlcworICovCitzdGF0aWMgaHdfd2F0Y2hkb2dfaW50ZXJydXB0X2NiIGludF9oYW5kbGVyIF9fUkVUQUlORUQgPSBOVUxMOworCisvKgorICogVGhpcyBpcyB0aGUgYmFzZSBhZGRyZXNzIGluIFJldGVudGlvbiBSQU0gd2hlcmUgdGhlIHN0YWNrZWQgaW5mb3JtYXRpb24gd2lsbCBiZSBjb3BpZWQuCisgKi8KKyNkZWZpbmUgU1RBVFVTX0JBU0UgKDB4N0ZDNTYwMCkKKworYm9vbCBod193YXRjaGRvZ19mcmVlemUodm9pZCkKK3sKKyAgICBHUFJFRy0+U0VUX0ZSRUVaRV9SRUcgPSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfV0RPR19Nc2s7CisKKyAgICByZXR1cm4gIVJFR19HRVRGKFdET0csIFdBVENIRE9HX0NUUkxfUkVHLCBOTUlfUlNUKTsKK30KKwordm9pZCBod193YXRjaGRvZ191bmZyZWV6ZSh2b2lkKQoreworICAgIEdQUkVHLT5SRVNFVF9GUkVFWkVfUkVHID0gR1BSRUdfUkVTRVRfRlJFRVpFX1JFR19GUlpfV0RPR19Nc2s7Cit9CisKK0hXX1dER19SRVNFVCBod193YXRjaGRvZ19pc19pcnFfb3JfcnN0X2dlbih2b2lkKQoreworICAgIGlmIChSRUdfR0VURihXRE9HLCBXQVRDSERPR19DVFJMX1JFRywgTk1JX1JTVCkpCisgICAgeworICAgICAgICByZXR1cm4gSFdfV0RHX1JFU0VUX1JTVDsKKyAgICB9CisKKyAgICByZXR1cm4gSFdfV0RHX1JFU0VUX05NSTsKK30KKwordm9pZCBod193YXRjaGRvZ19yZWdpc3Rlcl9pbnQoaHdfd2F0Y2hkb2dfaW50ZXJydXB0X2NiIGhhbmRsZXIpCit7CisgICAgaW50X2hhbmRsZXIgPSBoYW5kbGVyOworfQorCit2b2lkIGh3X3dhdGNoZG9nX3VucmVnaXN0ZXJfaW50KHZvaWQpCit7CisgICAgaW50X2hhbmRsZXIgPSBOVUxMOworfQorCitfX1JFVEFJTkVEX0NPREUgdm9pZCBod193YXRjaGRvZ19oYW5kbGVfaW50KHVuc2lnbmVkIGxvbmcgKmV4Y2VwdGlvbl9hcmdzKQoreworICAgIC8vIFJlYWNoZWQgdGhpcyBwb2ludCBkdWUgdG8gYSBXRE9HIHRpbWVvdXQKKyAgICB1aW50MTZfdCBwbXVfY3RybF9yZWcgPSBDUkdfVE9QLT5QTVVfQ1RSTF9SRUc7CisgICAgcG11X2N0cmxfcmVnIHw9ICgoMSA8PCBDUkdfVE9QX1BNVV9DVFJMX1JFR19CTEVfU0xFRVBfUG9zKSAgICAgfCAgICAgICAgLyogdHVybiBvZmYgQkxFICovCisgICAgICAgICAgICAgICAgICAgICAoMSA8PCBDUkdfVE9QX1BNVV9DVFJMX1JFR19GVERGX1NMRUVQX1BvcykgICAgfCAgICAgICAgLyogdHVybiBvZmYgRlRERiAqLworICAgICAgICAgICAgICAgICAgICAgKDEgPDwgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUkFESU9fU0xFRVBfUG9zKSAgIHwgICAgICAgIC8qIHR1cm4gb2ZmIHJhZGlvIFBEICovCisgICAgICAgICAgICAgICAgICAgICAoMSA8PCBDUkdfVE9QX1BNVV9DVFJMX1JFR19QRVJJUEhfU0xFRVBfUG9zKSk7ICAgICAgICAgLyogdHVybiBvZmYgcGVyaXBoZXJhbCBwb3dlciBkb21haW4gKi8KKyAgICBDUkdfVE9QLT5QTVVfQ1RSTF9SRUcgPSBwbXVfY3RybF9yZWc7CisgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQ0xLX1JBRElPX1JFRywgQkxFX0xQX1JFU0VUKTsgICAgICAgICAgICAgICAgICAgICAgLyogcmVzZXQgdGhlIEJMRSBMUCB0aW1lciAqLworCisjaWYgKGRnX2NvbmZpZ0lNQUdFX1NFVFVQID09IERFVkVMT1BNRU5UX01PREUpCisgICAgaHdfd2F0Y2hkb2dfZnJlZXplKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcCBXRE9HCisKKyAgICBFTkFCTEVfREVCVUdHRVI7CisKKyAgICBpZiAoZXhjZXB0aW9uX2FyZ3MgIT0gTlVMTCkKKyAgICB7CisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSkgPSBleGNlcHRpb25fYXJnc1swXTsgICAgICAgICAgIC8vIFIwCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MDQpID0gZXhjZXB0aW9uX2FyZ3NbMV07ICAgIC8vIFIxCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MDgpID0gZXhjZXB0aW9uX2FyZ3NbMl07ICAgIC8vIFIyCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MEMpID0gZXhjZXB0aW9uX2FyZ3NbM107ICAgIC8vIFIzCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MTApID0gZXhjZXB0aW9uX2FyZ3NbNF07ICAgIC8vIFIxMgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDE0KSA9IGV4Y2VwdGlvbl9hcmdzWzVdOyAgICAvLyBMUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDE4KSA9IGV4Y2VwdGlvbl9hcmdzWzZdOyAgICAvLyBQQworICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDFDKSA9IGV4Y2VwdGlvbl9hcmdzWzddOyAgICAvLyBQU1IKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgyMCkgPSAodW5zaWduZWQgbG9uZylleGNlcHRpb25fYXJnczsgICAgLy8gU3RhY2sgUG9pbnRlcgorCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MjQpID0gKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhFMDAwRUQyOCkpKTsgICAgLy8gQ0ZTUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDI4KSA9ICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4RTAwMEVEMkMpKSk7ICAgIC8vIEhGU1IKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgyQykgPSAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweEUwMDBFRDMwKSkpOyAgICAvLyBERlNSCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MzApID0gKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhFMDAwRUQzQykpKTsgICAgLy8gQUZTUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDM0KSA9ICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4RTAwMEVEMzQpKSk7ICAgIC8vIE1NQVIKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgzOCkgPSAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweEUwMDBFRDM4KSkpOyAgICAvLyBCRkFSCisgICAgfQorCisgICAgaHdfY3BtX2Fzc2VydF90cmlnZ2VyX2dwaW8oKTsKKworICAgIGlmIChSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIERCR19JU19BQ1RJVkUpKQorICAgIHsKKyAgICAgICAgX19CS1BUKDApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3aGlsZSAoMSk7CisgICAgfQorCisjZWxzZSAvLyBkZ19jb25maWdJTUFHRV9TRVRVUCA9PSBERVZFTE9QTUVOVF9NT0RFCisKKyAgICBpZiAoZXhjZXB0aW9uX2FyZ3MgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5taV9ldmVudF9kYXRhWzBdID0gTk1JX01BR0lDX05VTUJFUjsKKyAgICAgICAgbm1pX2V2ZW50X2RhdGFbMV0gPSBleGNlcHRpb25fYXJnc1swXTsgICAgICAgICAgLy8gUjAKKyAgICAgICAgbm1pX2V2ZW50X2RhdGFbMl0gPSBleGNlcHRpb25fYXJnc1sxXTsgICAgICAgICAgLy8gUjEKKyAgICAgICAgbm1pX2V2ZW50X2RhdGFbM10gPSBleGNlcHRpb25fYXJnc1syXTsgICAgICAgICAgLy8gUjIKKyAgICAgICAgbm1pX2V2ZW50X2RhdGFbNF0gPSBleGNlcHRpb25fYXJnc1szXTsgICAgICAgICAgLy8gUjMKKyAgICAgICAgbm1pX2V2ZW50X2RhdGFbNV0gPSBleGNlcHRpb25fYXJnc1s0XTsgICAgICAgICAgLy8gUjEyCisgICAgICAgIG5taV9ldmVudF9kYXRhWzZdID0gZXhjZXB0aW9uX2FyZ3NbNV07ICAgICAgICAgIC8vIExSCisgICAgICAgIG5taV9ldmVudF9kYXRhWzddID0gZXhjZXB0aW9uX2FyZ3NbNl07ICAgICAgICAgIC8vIFBDCisgICAgICAgIG5taV9ldmVudF9kYXRhWzhdID0gZXhjZXB0aW9uX2FyZ3NbN107ICAgICAgICAgIC8vIFBTUgorICAgIH0KKworICAgIC8vIFdhaXQgZm9yIHRoZSByZXNldCB0byBvY2N1cgorICAgIHdoaWxlICgxKTsKKworI2VuZGlmIC8vIGRnX2NvbmZpZ0lNQUdFX1NFVFVQID09IERFVkVMT1BNRU5UX01PREUKK30KKworX19SRVRBSU5FRF9DT0RFIHZvaWQgTk1JX0hhbmRsZXJDKHVuc2lnbmVkIGxvbmcgKmV4Y2VwdGlvbl9hcmdzKTsKKwordm9pZCBOTUlfSGFuZGxlckModW5zaWduZWQgbG9uZyAqZXhjZXB0aW9uX2FyZ3MpCit7CisgICAgaWYgKGludF9oYW5kbGVyKQorICAgIHsKKyAgICAgICAgaW50X2hhbmRsZXIoZXhjZXB0aW9uX2FyZ3MpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBod193YXRjaGRvZ19oYW5kbGVfaW50KGV4Y2VwdGlvbl9hcmdzKTsKKyAgICB9Cit9CisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfd2t1cC5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3drdXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDA5ZDZmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3drdXAuYwpAQCAtMCwwICsxLDIwOSBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgV2FrZXVwX1RpbWVyCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod193a3VwLmMKKyAqCisgKiBAYnJpZWYgSW1wbGVtZW50YXRpb24gb2YgdGhlIFdha2V1cCB0aW1lciBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19XS1VQCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8aHdfd2t1cC5oPgorCitzdGF0aWMgaHdfd2t1cF9pbnRlcnJ1cHRfY2IgaW50cl9jYiBfX1JFVEFJTkVEIC8qID0gTlVMTCovOworCisjaWYgKChkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRSkgJiYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpKQorI2RlZmluZSBQWF9EQVRBX1JFR19BRERSKF9wb3J0KSAgICAgICAgICgodWludDE2X3QgKikoR1BJT19CQVNFICsgb2Zmc2V0b2YoR1BJT19UeXBlLCBQMF9EQVRBX1JFRykpICsgX3BvcnQpCisjZGVmaW5lIFBYX0RBVEFfUkVHKF9wb3J0KSAgICAgICAgICAgICAgKlBYX0RBVEFfUkVHX0FERFIoX3BvcnQpCisjZGVmaW5lIEJGX0dFVChfdmFyLCBfcG9zKSAgICAgICAgICAgICAgKChfdmFyPj5fcG9zKSAmIDEpCisKK19fUkVUQUlORUQgdm9sYXRpbGUgd2t1cF9waW5fY29uZmlnX3Qgd2t1cF9waW5fY29uZmlnOwordm9sYXRpbGUgdWludDhfdCB3a3VwX3N0YXR1c1tIV19HUElPX05VTV9QT1JUU107CisKK3N0YXRpYyBib29sIGh3X3drdXBfdXBkYXRlX3N0YXR1cyh2b2lkKQoreworICAgICAgICB1aW50OF90IGksIGosIGVuYWJsZV9sb29wX2NudCA9IDA7CisgICAgICAgIHVpbnQ4X3QgcG9sX3J4X3JlZzsKKyAgICAgICAgYm9vbCB3a3VwX3N0YXR1c191cGRhdGVkID0gZmFsc2U7CisgICAgICAgIHVpbnQ4X3QgY3VyX3BvcnRfZGF0YVtIV19HUElPX05VTV9QT1JUU107CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEhXX0dQSU9fTlVNX1BPUlRTOyBpKyspIHsKKyAgICAgICAgICAgICAgICB3a3VwX3N0YXR1c1tpXSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHdrdXBfcGluX2NvbmZpZy5waW5fc3RhdGVbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVhZCBwb3J0IHN0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3BvcnRfZGF0YVtpXSA9IFBYX0RBVEFfUkVHKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy9yZWFkIHRyaWdnZXIgcG9sYXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvbF9yeF9yZWcgPSAqKCh2b2xhdGlsZSB1aW50MTZfdCAqKVdBS0VVUF9CQVNFICsgMTAgKyBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh3a3VwX3Bpbl9jb25maWcucGluX3N0YXRlW2ldICYgKDEgPDwgaikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJGX0dFVChwb2xfcnhfcmVnLCBqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gQkZfR0VUKH5jdXJfcG9ydF9kYXRhW2ldLCBqKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2ludmVydCB0cmlnZ2VyIHBvbGFyaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9sX3J4X3JlZyBePSAoMSA8PCBqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQkZfR0VUKHdrdXBfcGluX2NvbmZpZy5waW5fdHJpZ2dlcltpXSwgaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IEJGX0dFVCh+Y3VyX3BvcnRfZGF0YVtpXSwgaikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdrdXBfc3RhdHVzW2ldIHw9ICgxIDw8IGopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2t1cF9zdGF0dXNfdXBkYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvL3VwZGF0ZSB0cmlnZ2VyIHBvbGFyaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAqKCh2b2xhdGlsZSB1aW50MTZfdCAqKVdBS0VVUF9CQVNFICsgMTAgKyBpKSA9IHBvbF9yeF9yZWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHdrdXBfc3RhdHVzX3VwZGF0ZWQ7Cit9CisjZW5kaWYgIC8qIGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFICovCisKK3ZvaWQgaHdfd2t1cF9pbml0KGNvbnN0IHdrdXBfY29uZmlnICpjZmcpCit7CisgICAgICAgIHVuc2lnbmVkIGludCBpOworCisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfVE1SX1JFRywgV0FLRVVQQ1RfRU5BQkxFKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisKKyAgICAgICAgLyogcmVzZXQgY29uZmlndXJhdGlvbiAqLworICAgICAgICBXQUtFVVAtPldLVVBfQ1RSTF9SRUcgPSAwOworCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgICAgICBXQUtFVVAtPldLVVBfQ09NUEFSRV9SRUcgPSAwOworI2VuZGlmCisKKyAgICAgICAgLyogZGlzYWJsZSBhbGwgcGlucyAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFdfR1BJT19OVU1fUE9SVFM7IGkrKykgeworICAgICAgICAgICAgICAgICooKHZvbGF0aWxlIHVpbnQxNl90ICopKCZXQUtFVVAtPldLVVBfUE9MX1AwX1JFRykgKyBpKSA9IDA7CisgICAgICAgICAgICAgICAgKigodm9sYXRpbGUgdWludDE2X3QgKikoJldBS0VVUC0+V0tVUF9TRUxFQ1RfUDBfUkVHKSArIGkpID0gMDsKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgICAgICAgICAgICAgKigodm9sYXRpbGUgdWludDE2X3QgKikoJldBS0VVUC0+IFdLVVBfU0VMX0dQSU9fUDBfUkVHKSArIGkpID0gMDsKKyNlbmRpZgorI2lmIGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFCisjaWYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpCisgICAgICAgICAgICAgICAgd2t1cF9waW5fY29uZmlnLnBpbl9zdGF0ZVtpXSA9IDA7CisgICAgICAgICAgICAgICAgd2t1cF9waW5fY29uZmlnLnBpbl90cmlnZ2VyW2ldID0gMDsKKyAgICAgICAgICAgICAgICB3a3VwX3N0YXR1c1tpXSA9IDA7CisgICAgICAgICAgICAgICAgaHdfd2t1cF9jbGVhcl9zdGF0dXMoaSwgMHhGRik7CisjZW5kaWYKKyNlbmRpZiAvL2RnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFCisgICAgICAgIH0KKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgICAgIFdBS0VVUC0+V0tVUF9DTEVBUl8wX1JFRyA9IFdBS0VVUC0+V0tVUF9DTEVBUl8xX1JFRyA9IFdBS0VVUC0+V0tVUF9DTEVBUl8yX1JFRyA9IDB4RkZGRjsKKyNlbmRpZgorICAgICAgICBOVklDX0Rpc2FibGVJUlEoV0tVUF9HUElPX0lSUW4pOworCisgICAgICAgIGh3X3drdXBfY29uZmlndXJlKGNmZyk7Cit9CisKK3ZvaWQgaHdfd2t1cF9jb25maWd1cmUoY29uc3Qgd2t1cF9jb25maWcgKmNmZykKK3sKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgaWYgKCFjZmcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICAgICAgaHdfd2t1cF9zZXRfY291bnRlcl90aHJlc2hvbGQoY2ZnLT50aHJlc2hvbGQpOworI2VuZGlmCisjaWYgISgoZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UpICYmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BKSkKKyAgICAgICAgaHdfd2t1cF9zZXRfZGVib3VuY2VfdGltZShjZmctPmRlYm91bmNlKTsKKyNlbmRpZgorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFdfR1BJT19OVU1fUE9SVFM7IGkrKykgeworICAgICAgICAgICAgICAgIGh3X3drdXBfY29uZmlndXJlX3BvcnQoaSwgY2ZnLT5waW5fc3RhdGVbaV0sIGNmZy0+cGluX3RyaWdnZXJbaV0pOworICAgICAgICB9Cit9CisKK3ZvaWQgaHdfd2t1cF9yZWdpc3Rlcl9pbnRlcnJ1cHQoaHdfd2t1cF9pbnRlcnJ1cHRfY2IgY2IsIHVpbnQzMl90IHByaW8pCit7CisgICAgICAgIGludHJfY2IgPSBjYjsKKyNpZiAhKChkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRSkgJiYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EpKQorICAgICAgICBIV19XS1VQX1JFR19TRVRGKENUUkwsIFdLVVBfRU5BQkxFX0lSUSwgMSk7CisjZW5kaWYKKyAgICAgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoV0tVUF9HUElPX0lSUW4pOworICAgICAgICBOVklDX1NldFByaW9yaXR5KFdLVVBfR1BJT19JUlFuLCBwcmlvKTsKKyAgICAgICAgTlZJQ19FbmFibGVJUlEoV0tVUF9HUElPX0lSUW4pOworfQorCit2b2lkIGh3X3drdXBfdW5yZWdpc3Rlcl9pbnRlcnJ1cHQodm9pZCkKK3sKKyAgICAgICAgaW50cl9jYiA9IE5VTEw7CisjaWYgISgoZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UpICYmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BKSkKKyAgICAgICAgSFdfV0tVUF9SRUdfU0VURihDVFJMLCBXS1VQX0VOQUJMRV9JUlEsIDApOworI2VuZGlmCisgICAgICAgIE5WSUNfRGlzYWJsZUlSUShXS1VQX0dQSU9fSVJRbik7Cit9CisKK3ZvaWQgaHdfd2t1cF9oYW5kbGVyKHZvaWQpCit7CisjaWYgKChkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRSkgJiYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpKQorICAgICAgICBpZiAoaW50cl9jYiAmJiBod193a3VwX3VwZGF0ZV9zdGF0dXMoKSkgeworI2Vsc2UKKyAgICAgICAgaWYgKGludHJfY2IpIHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGludHJfY2IoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBod193a3VwX3Jlc2V0X2ludGVycnVwdCgpOworI2lmIGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFCisgICAgICAgICAgICAgICAgaHdfd2t1cF9jbGVhcl9zdGF0dXMoSFdfR1BJT19QT1JUXzAsIDB4RkYpOworICAgICAgICAgICAgICAgIGh3X3drdXBfY2xlYXJfc3RhdHVzKEhXX0dQSU9fUE9SVF8xLCAweEZGKTsKKyAgICAgICAgICAgICAgICBod193a3VwX2NsZWFyX3N0YXR1cyhIV19HUElPX1BPUlRfMiwgMHhGRik7CisgICAgICAgICAgICAgICAgaHdfd2t1cF9jbGVhcl9zdGF0dXMoSFdfR1BJT19QT1JUXzMsIDB4RkYpOworICAgICAgICAgICAgICAgIGh3X3drdXBfY2xlYXJfc3RhdHVzKEhXX0dQSU9fUE9SVF80LCAweEZGKTsKKyNlbmRpZgorICAgICAgICB9Cit9CisKKyNpZmRlZiBPU19CQVJFTUVUQUwKK3ZvaWQgV0tVUF9HUElPX0hhbmRsZXIodm9pZCkKK3sKKyAgICAgICAgaHdfd2t1cF9oYW5kbGVyKCk7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9IV19XS1VQICovCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL3N5c190Y3MuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9zeXNfdGNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyZGUwYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9zeXNfdGNzLmMKQEAgLTAsMCArMSw1MDMgQEAKKy8qKgorXGFkZHRvZ3JvdXAgQlNQCitceworXGFkZHRvZ3JvdXAgU1lTVEVNCitceworXGFkZHRvZ3JvdXAgVENTX0hhbmRsaW5nCitceworKi8KKworLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgc3lzX3Rjcy5jCisgKgorICogQGJyaWVmIFRDUyBIQW5kbGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiaHdfY3BtLmgiCisjaW5jbHVkZSAic3lzX3Rjcy5oIgorI2luY2x1ZGUgImh3X2dwYWRjLmgiCisjaW5jbHVkZSAiaHdfZ3Bpby5oIgorCisjZGVmaW5lIEFQUEVORF9UQ1NfTEVOR1RIICAgICAgICgwKQorCisjZGVmaW5lIFJBRElPX0FSRUFfU0laRSAgICAgICAgICgweDEwMDApCisjZGVmaW5lIFBFUklQSEVSQUxfQVJFQV9TSVpFICAgICgweEM0QSkKKworI2RlZmluZSBJU19JTl9BUkVBKGFkZHIsIGJhc2UsIHNpemUpICAgICgoYWRkciA+PSBiYXNlKSAmJiAoYWRkciA8PSAoYmFzZSArIHNpemUpKSkKKworI2RlZmluZSBBRENfU0VfR0FJTl9FUlJPUih2YWx1ZSkgICAgICAgICgodmFsdWUpICAmIDB4MDAwMEZGRkYpCisjZGVmaW5lIEFEQ19ESUZGX0dBSU5fRVJST1IodmFsdWUpICAgICAgKCgodmFsdWUpICYgMHhGRkZGMDAwMCkgPj4gMTYpCisKKy8qCisgKiBHbG9iYWwgYW5kIC8gb3IgcmV0YWluZWQgdmFyaWFibGVzCisgKi8KKwordWludDMyX3QgdGNzX2RhdGFbMjQgKiAyICsgQVBQRU5EX1RDU19MRU5HVEhdIF9fUkVUQUlORURfVU5JTklUOwordWludDhfdCB0Y3NfbGVuZ3RoIF9fUkVUQUlORURfVU5JTklUOworCit1aW50OF90IGFyZWFfb2Zmc2V0W3Rjc19zeXN0ZW0gKyAxXSBfX1JFVEFJTkVEOwordWludDhfdCBhcmVhX3NpemVfZ2xvYmFsW3Rjc19zeXN0ZW0gKyAxXSBfX1JFVEFJTkVEOwordWludDE2X3Qgc3lzX3Rjc194dGFsMTZtX3NldHRsaW5nX3RpbWUgX19SRVRBSU5FRDsKKworCitjb25zdCB1aW50MzJfdCAqdGNzX3B0ciBfX1JFVEFJTkVEOworCitib29sIHN5c190Y3NfaXNfY2FsaWJyYXRlZF9jaGlwIF9fUkVUQUlORURfVU5JTklUOyAgICAgIC8vIEluaXRpYWwgdmFsdWU6IGZhbHNlCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXMKKyAqLworCitzdGF0aWMgY29uc3QgdWludDMyX3QgdW5jYWxpYnJhdGVkX3Rjc19kYXRhW10gPQoreworICAgIC8qIEJBTkRHQVBfUkVHOiAob2Zmc2V0IDApCisgICAgICogICBbMTRdOiBCWVBBU1NfQ09MRF9CT09UX0RJU0FCTEUgPSAwCisgICAgICogICBbMTM6MTBdOiBMRE9fU0xFRVBfVFJJTSA9IDB4NAorICAgICAqICAgWzk6NV06IEJHUl9JVFJJTSA9IDB4MDAKKyAgICAgKiAgIFs0OjBdOiBCR1JfVFJJTSA9IDB4MTMgKGNoYW5nZSB1bnRpbCBWMTIgaXMgMS4yVikKKyAgICAgKgorICAgICAqICAgRXNwZWNpYWxseSBmb3IgdGhpcyByZWdpc3RlciwgbWVyZ2UgdGhlIHRyaW1tZWQgYW5kIHByZWZlcnJlZCBzZXR0aW5ncy4KKyAgICAgKi8KKyAgICAodWludDMyX3QpICZDUkdfVE9QLT5CQU5ER0FQX1JFRywgMHgxMDEzLAorCisgICAgLyogQ0xLX0ZSRVFfVFJJTV9SRUc6IChvZmZzZXQgMikKKyAgICAgKiAgIFsxMDo4XTogQ09BUlNFX0FESiA9IDB4NAorICAgICAqICAgWzc6MF06IEZJTkVfQURKID0gMHg2MAorICAgICAqLworICAgICh1aW50MzJfdCkgJkNSR19UT1AtPkNMS19GUkVRX1RSSU1fUkVHLCAweDA0NjAsCisKKyAgICAvKiBDTEtfMTZNX1JFRzogKG9mZnNldCA0KQorICAgICAqICAgWzE1XTogUkMxNk1fU1RBUlRVUF9ESVNBQkxFID0gMAorICAgICAqICAgWzE0XTogWFRBTDE2X0hQQVNTX0ZMVF9FTiA9IDAKKyAgICAgKiAgIFsxM106IFhUQUwxNl9TUElLRV9GTFRfQllQQVNTID0gMAorICAgICAqICAgWzEyOjEwXTogWFRBTDE2X0FNUF9UUklNID0gMHg1CisgICAgICogICBbOV06IFhUQUwxNl9FWFRfQ0xLX0VOQUJMRSA9IDAKKyAgICAgKiAgIFs4XTogWFRBTDE2X01BWF9DVVJSRU5UID0gMAorICAgICAqICAgWzc6NV06IFhUQUwxNl9DVVJfU0VUID0gMHg1CisgICAgICogICBbNDoxXTogUkMxNk1fVFJJTSA9IDB4OQorICAgICAqICAgWzBdOiBSQzE2TV9FTkFCTEUgPSAwCisgICAgICoKKyAgICAgKiAgIEFwcGx5IHRoZSB0cmltbWVkIGFuZCBhIGRlZmF1bHQgcHJlZmVycmVkIHZhbHVlLiBUaGUgY29ycmVjdCBvbmUgaXMgYXBwbGllZAorICAgICAqICAgbGF0ZXIuCisgICAgICovCisgICAgKHVpbnQzMl90KSAmQ1JHX1RPUC0+Q0xLXzE2TV9SRUcsIDB4MTRCMiwKKworICAgIC8qIENMS18zMktfUkVHOiAgKG9mZnNldCA2KQorICAgICAqICAgWzE1OjEzXTogMAorICAgICAqICAgWzEyXTogWFRBTDMyS19ESVNBQkxFX0FNUFJFRzAgPSAwCisgICAgICogICBbMTE6OF06IFJDMzJLX1RSSU0gPSAweDA3CisgICAgICogICBbN106IFJDMzJLX0VOQUJMRSA9IDB4MSAocmVzZXQgdmFsdWUpCisgICAgICogICBbNjozXTogWFRBTDMyS19DVVIgPSAweDMgKHJlc2V0IHZhbHVlKQorICAgICAqICAgWzI6MV06IFhUQUwzMktfUkJJQVMgPSAweDIgKHJlc2V0IHZhbHVlKQorICAgICAqICAgWzBdOiBYVEFMMzJLX0VOQUJMRSA9IDAKKyAgICAgKi8KKyAgICAodWludDMyX3QpICZDUkdfVE9QLT5DTEtfMzJLX1JFRywgMHg3OUMsCisKKyAgICAvKiBDSEFSR0VSX0NUUkwyX1JFRzogKG9mZnNldCA4KQorICAgICAqICAgWzE1OjEzXTogMAorICAgICAqICAgWzEyOjhdOiBDVVJSRU5UX09GRlNFVF9UUklNID0gMHgwQworICAgICAqICAgWzc6NF06IENIQVJHRVJfVkZMT0FUX0FESiA9IDB4NQorICAgICAqICAgWzM6MF06IENVUlJFTlRfR0FJTl9UUklNID0gMHhBCisgICAgICovCisgICAgKHVpbnQzMl90KSAmQU5BTUlTQy0+Q0hBUkdFUl9DVFJMMl9SRUcsIDB4MEM1QSwKK307CisKKyNkZWZpbmUgVU5DQUxJQlJBVEVEX0RBVEFfTk9OX1JFVEFJTkVEX09GRlNFVCAgICg4KQorCisjaWZkZWYgQ09ORklHX1VTRV9CTEUKKyNkZWZpbmUgVU5DQUxJQlJBVEVEX0RBVEFfQkxFX1NJWkUgICAgICAgICAgICAgICgwKQorI2RlZmluZSBVTkNBTElCUkFURURfREFUQV9CTEVfT0ZGU0VUICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0VfRlRERgorI2RlZmluZSBVTkNBTElCUkFURURfREFUQV9GVERGX1NJWkUgICAgICAgICAgICAgKDApCisjZGVmaW5lIFVOQ0FMSUJSQVRFRF9EQVRBX0ZUREZfT0ZGU0VUICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjZGVmaW5lIFVOQ0FMSUJSQVRFRF9EQVRBX1JBRElPX1NJWkUgICAgICAgICAgICAoMCkKKyNkZWZpbmUgVU5DQUxJQlJBVEVEX0RBVEFfUkFESU9fT0ZGU0VUICAgICAgICAgICgwKQorCisjZGVmaW5lIFVOQ0FMSUJSQVRFRF9EQVRBX0NIQVJHRVJfU0laRSAgICAgICAgICAoMSAqIDIpCisjZGVmaW5lIFVOQ0FMSUJSQVRFRF9EQVRBX0NIQVJHRVJfT0ZGU0VUICAgICAgICAoOCkKKworI2RlZmluZSBVTkNBTElCUkFURURfREFUQV9BVURJT19TSVpFICAgICAgICAgICAgKDApCisjZGVmaW5lIFVOQ0FMSUJSQVRFRF9EQVRBX0FVRElPX09GRlNFVCAgICAgICAgICAoMCkKKworI2RlZmluZSBVTkNBTElCUkFURURfREFUQV9TWVNURU1fU0laRSAgICAgICAgICAgKDApCisjZGVmaW5lIFVOQ0FMSUJSQVRFRF9EQVRBX1NZU1RFTV9PRkZTRVQgICAgICAgICAoMCkKKworCisvKgorICogRm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworCisKKworLyoKKyAqIEZ1bmN0aW9uIGRlZmluaXRpb25zCisgKi8KKworLyoqCisgKiBcYnJpZWYgQXBwbHkgYSBUQ1MgPGFkZHJlc3MsIHZhbHVlPiBwYWlyLgorICoKKyAqIFxwYXJhbSBbaW5dIGFkZHJlc3MgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyCisgKiBccGFyYW0gW2luXSB2YWx1ZSB0aGUgdmFsdWUgZm9yIHRoaXMgcmVnaXN0ZXIKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGFwcGx5X3BhaXIodWludDMyX3QgYWRkcmVzcywgdWludDMyX3QgdmFsdWUpCit7CisgICAgaWYgKGFkZHJlc3MgJiAweDIpCisgICAgeworICAgICAgICAqKHZvbGF0aWxlIHVpbnQxNl90ICopYWRkcmVzcyA9IHZhbHVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqKHZvbGF0aWxlIHVpbnQzMl90ICopYWRkcmVzcyA9IHZhbHVlOworICAgIH0KK30KKworLyoqCisgKiBcYnJpZWYgQXBwbHkgYSBUQ1MgPGFkZHJlc3MsIHZhbHVlPiBlbnRyeSBvZiB0aGUgVENTIGFycmF5LgorICoKKyAqIFxwYXJhbSBbaW5dIGFkZHJlc3MgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyCisgKiBccGFyYW0gW2luXSB2YWx1ZSB0aGUgdmFsdWUgZm9yIHRoaXMgcmVnaXN0ZXIKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGFwcGx5X2VudHJ5KHVpbnQ4X3QgaW5kZXgpCit7CisgICAgdWludDMyX3QgYWRkcmVzcyA9IHRjc19wdHJbaW5kZXhdOworICAgIHVpbnQzMl90IHZhbHVlID0gdGNzX3B0cltpbmRleCArIDFdOworCisgICAgaWYgKGFkZHJlc3MgJiAweDIpCisgICAgeworICAgICAgICAqKHZvbGF0aWxlIHVpbnQxNl90ICopYWRkcmVzcyA9IHZhbHVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqKHZvbGF0aWxlIHVpbnQzMl90ICopYWRkcmVzcyA9IHZhbHVlOworICAgIH0KK30KKworLyoqCisgKiBcYnJpZWYgU3RvcmUgVENTIDxhZGRyZXNzLCB2YWx1ZT4gcGFpciBpbiB0aGUgR2xvYmFsIFRDUyBhcnJheS4KKyAqCisgKiBccGFyYW0gW2luXSBhZGRyZXNzIHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlcgorICogXHBhcmFtIFtpbl0gdmFsdWUgdGhlIHZhbHVlIGZvciB0aGlzIHJlZ2lzdGVyCisgKgorICovCitzdGF0aWMgdm9pZCBzdG9yZV9pbl9hcnJheSh1aW50MzJfdCBhZGRyZXNzLCB1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICB0Y3NfZGF0YVt0Y3NfbGVuZ3RoXSA9IGFkZHJlc3M7CisgICAgdGNzX2xlbmd0aCsrOworICAgIHRjc19kYXRhW3Rjc19sZW5ndGhdID0gdmFsdWU7CisgICAgdGNzX2xlbmd0aCsrOworfQorCisvKioKKyAqIFxicmllZiBTd2FwcyB0aGUgY29udGVudHMgb2YgdHdvIGVudHJpZXMgaW4gdGhlIFRDUyBhcnJheS4KKyAqCisgKiBccGFyYW0gW2luXSBhZGRyZXNzIHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlcgorICogXHBhcmFtIFtpbl0gdmFsdWUgdGhlIHZhbHVlIGZvciB0aGlzIHJlZ2lzdGVyCisgKgorICogXHdhcm5pbmcgV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIFJDMTYgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIHRoZSBzeXN0ZW0gY2xvY2shCisgKgorICovCitzdGF0aWMgdm9pZCBzd2FwX2VudHJpZXModWludDMyX3QgZmlyc3RfcG9zLCB1aW50MzJfdCBzZWNvbmRfcG9zKQoreworICAgIHVpbnQzMl90IGFkZHJlc3Nfc3RvcmVkOworICAgIHVpbnQzMl90IHZhbHVlX3N0b3JlZDsKKworICAgIGFkZHJlc3Nfc3RvcmVkID0gdGNzX2RhdGFbc2Vjb25kX3Bvc107CisgICAgdmFsdWVfc3RvcmVkID0gdGNzX2RhdGFbc2Vjb25kX3BvcyArIDFdOworICAgIHRjc19kYXRhW3NlY29uZF9wb3NdID0gdGNzX2RhdGFbZmlyc3RfcG9zXTsKKyAgICB0Y3NfZGF0YVtzZWNvbmRfcG9zICsgMV0gPSB0Y3NfZGF0YVtmaXJzdF9wb3MgKyAxXTsKKyAgICB0Y3NfZGF0YVtmaXJzdF9wb3NdID0gYWRkcmVzc19zdG9yZWQ7CisgICAgdGNzX2RhdGFbZmlyc3RfcG9zICsgMV0gPSB2YWx1ZV9zdG9yZWQ7Cit9CisKKy8qKgorICogXGJyaWVmIFNvcnQgdGhlIHJlZ2lzdGVycyBvZiBhIHNwZWNpZmljIE1lbW9yeSBNYXAgYXJlYSBvZiB0aGUgY2hpcCB0byBhIGNvbnRpbnVvdXMgcmVnaW9uIGluIHRoZQorICogICAgICAgIFRDUyBhcnJheS4KKyAqCisgKiBccGFyYW0gW2luXSBhcmVhX2Jhc2UgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgTWVtb3J5IE1hcCBhcmVhCisgKiBccGFyYW0gW2luXSBhcmVhX3NpemUgdGhlIHNpemUgb2YgdGhlIE1lbW9yeSBNYXAgcmVnaW9uIGluIGJ5dGVzCisgKiBccGFyYW0gW2luXSBhcnJheV9wdHIgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIFRDUyBhcnJheSB0byBzdGFydCByZWFkaW5nIGZyb20gKGFsbCBwcmV2aW91cworICogICAgICAgIHBvc2l0aW9ucyBoYXZlIGJlZW4gc29ydGVkKQorICogXHBhcmFtIFtvdXRdIHB0ciB0aGUgb2Zmc2V0IG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNvcnRlZCByZWdpb24gaW4gdGhlIFRDUyBhcnJheQorICogXHBhcmFtIFtvdXRdIHNpemUgdGhlIHNpemUgb2YgdGhlIHNvcnRlZCByZWdpb24gaW4gYnl0ZXMKKyAqCisgKiBccmV0dXJuIFRoZSB1cGRhdGVkIHBvc2l0aW9uIGluIHRoZSBUQ1MgYXJyYXkgdG8gc3RhcnQgcmVhZGluZyBuZXh0IHRpbWUKKyAqLworc3RhdGljIGludCBzeXNfdGNzX3NvcnRfYXJlYSh1aW50MzJfdCBhcmVhX2Jhc2UsIHVpbnQzMl90IGFyZWFfc2l6ZSwgdWludDMyX3QgYXJyYXlfcHRyLCB1aW50OF90ICpwdHIsIHVpbnQ4X3QgKnNpemUpCit7CisgICAgdWludDMyX3QgaSA9IGFycmF5X3B0cjsKKyAgICB1aW50MzJfdCBzb3J0X3N0YXJ0OworICAgIHVpbnQzMl90IHNvcnRfZW5kOworCisgICAgaWYgKGFycmF5X3B0ciA9PSB0Y3NfbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFycmF5X3B0cjsgICAgICAgLy8gTm90aGluZyBlbHNlIGlzIGxlZnQgaW4gdGhlIGFycmF5IG9yIHRjc19sZW5ndGggaXMgemVybworICAgIH0KKworICAgIHNvcnRfc3RhcnQgPSBhcnJheV9wdHI7CisgICAgc29ydF9lbmQgPSBhcnJheV9wdHI7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWVzIGluIFRDUyBkb24ndCBvdmVyZmxvdyB0aGUgYWxsb2NhdGVkIGFycmF5ICovCisgICAgQVNTRVJUX1dBUk5JTkcodGNzX2xlbmd0aCA8PSBzaXplb2YodGNzX2RhdGEpIC8gc2l6ZW9mKHRjc19kYXRhWzBdKSk7CisKKyAgICB3aGlsZSAoaSA8ICh0Y3NfbGVuZ3RoIC0gMSkpCisgICAgeworICAgICAgICBpZiAoSVNfSU5fQVJFQSh0Y3NfZGF0YVtpXSwgYXJlYV9iYXNlLCBhcmVhX3NpemUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSA9PSBhcnJheV9wdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHNvcnRfc3RhcnQgPT0gYXJyYXlfcHRyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc29ydF9zdGFydCA9IGFycmF5X3B0cjsKKyAgICAgICAgICAgICAgICAgICAgc29ydF9lbmQgPSBzb3J0X3N0YXJ0ICsgMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQ29weSBpdCB0byB0aGUgcHJvcGVyIHBsYWNlLgorICAgICAgICAgICAgICAgIGlmIChpICE9IHNvcnRfZW5kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dhcF9lbnRyaWVzKHNvcnRfZW5kLCBpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzb3J0X2VuZCArPSAyOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaSArPSAyOworICAgIH0KKworICAgICpwdHIgPSBzb3J0X3N0YXJ0OworICAgICpzaXplID0gc29ydF9lbmQgLSBzb3J0X3N0YXJ0OworCisgICAgcmV0dXJuIHNvcnRfZW5kOworfQorCit2b2lkIHN5c190Y3NfaW5pdCh2b2lkKQoreworICAgIHRjc19sZW5ndGggPSAwOworICAgIHN5c190Y3NfaXNfY2FsaWJyYXRlZF9jaGlwID0gZmFsc2U7CisgICAgaHdfY3BtX2JvZF9lbmFibGVkX2luX3RjcyA9IDA7Cit9CisKK2Jvb2wgc3lzX3Rjc19zdG9yZV9wYWlyKHVpbnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IHZhbHVlKQoreworICAgIC8vIElmIGl0IHN0b3BzIGhlcmUgdGhlbiB0Y3NfbGVuZ3RoIG11c3QgYmVjb21lIHVpbnQxNl90LgorICAgIEFTU0VSVF9XQVJOSU5HKCgyNTYgKiBzaXplb2YodGNzX2xlbmd0aCkpID49ICgyNCAqIDIgKyBBUFBFTkRfVENTX0xFTkdUSCkpOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIGFkZHJlc3MgaXMgaW4gQWx3YXlzLU9OIG9yIG9mIGEgcmV0YWluZWQgcmVnaXN0ZXIgYW5kIGFwcGx5IGl0LgorICAgIGlmIChJU19JTl9BUkVBKGFkZHJlc3MsIENSR19UT1BfQkFTRSwgc2l6ZW9mKENSR19UT1BfVHlwZSkpCisgICAgICAgIHx8IElTX0lOX0FSRUEoYWRkcmVzcywgVElNRVIxX0JBU0UsIHNpemVvZihUSU1FUjFfVHlwZSkpCisgICAgICAgIHx8IElTX0lOX0FSRUEoYWRkcmVzcywgV0FLRVVQX0JBU0UsIHNpemVvZihXQUtFVVBfVHlwZSkpCisgICAgICAgIHx8IElTX0lOX0FSRUEoYWRkcmVzcywgRENEQ19CQVNFLCBzaXplb2YoRENEQ19UeXBlKSkKKyAgICAgICAgfHwgSVNfSU5fQVJFQShhZGRyZXNzLCBRU1BJQ19CQVNFLCBzaXplb2YoUVNQSUNfVHlwZSkpCisgICAgICAgIHx8IElTX0lOX0FSRUEoYWRkcmVzcywgQ0FDSEVfQkFTRSwgc2l6ZW9mKENBQ0hFX1R5cGUpKQorICAgICAgICB8fCBJU19JTl9BUkVBKGFkZHJlc3MsIE9UUENfQkFTRSwgc2l6ZW9mKE9UUENfVHlwZSkpKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3MgPT0gKHVpbnQzMl90KSZDUkdfVE9QLT5CQU5ER0FQX1JFRykKKyAgICAgICAgeworICAgICAgICAgICAgc3lzX3Rjc19pc19jYWxpYnJhdGVkX2NoaXAgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFkZHJlc3MgPT0gKHVpbnQzMl90KSZDUkdfVE9QLT5DTEtfMTZNX1JFRykKKyAgICAgICAgeworICAgICAgICAgICAgdmFsdWUgfD0gQ1JHX1RPUF9DTEtfMTZNX1JFR19SQzE2TV9FTkFCTEVfTXNrOyAvLyBNYWtlIHN1cmUgdGhhdCBSQzE2IGlzIGVuYWJsZWQhCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYWRkcmVzcyA9PSAodWludDMyX3QpJkNSR19UT1AtPlhUQUxSRFlfQ1RSTF9SRUcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5c190Y3NfeHRhbDE2bV9zZXR0bGluZ190aW1lID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYWRkcmVzcyA9PSAodWludDMyX3QpJkNSR19UT1AtPkJPRF9DVFJMMl9SRUcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X2NwbV9ib2RfZW5hYmxlZF9pbl90Y3MgPSB2YWx1ZTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBSZWFkIHRoZSBBREMgR2FpbiBFcnJvci4gR2l2ZW4gdGhhdCB0aGUgQ2hpcCBDb25maWd1cmF0aW9uIFNlY3Rpb24KKyAgICAgICAgICAgICAqIChDQ1MpIG9mIE9UUCBpcyBvdXQgb2Ygc3BhY2UsIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgVENTIHNlY3Rpb24KKyAgICAgICAgICAgICAqIHVzaW5nIGFzIGFkZHJlc3MgdGhlIHJlYWQtb25seSByZWdpc3RlciBTWVNfU1RBVF9SRUcuCisgICAgICAgICAgICAgKiBUaGUgMTYgTFNCIG9mIHRoZSAzMmJpdCBkYXRhLXZhbHVlIGlzIHRoZSBzaW5nbGUgZW5kZWQgZ2FpbiBlcnJvci4KKyAgICAgICAgICAgICAqIFRoZSAxNiBNU0Igb2YgdGhlIDMyYml0IGRhdGEtdmFsdWUgaXMgdGhlIGRpZmZlcmVudGlhbCBnYWluIGVycm9yLgorICAgICAgICAgICAgICogQm90aCBnYWluIGVycm9yIHZhbHVlcyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgc2lnbmVkIDE2Yml0IGludGVnZXJzLgorICAgICAgICAgICAgICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZGdfY29uZmlnVVNFX0FEQ19HQUlOX0VSUk9SX0NPUlJFQ1RJT04gPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFkZHJlc3MgPT0gKHVpbnQzMl90KSZDUkdfVE9QLT5TWVNfU1RBVF9SRUcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaHdfZ3BhZGNfc3RvcmVfc2VfZ2Fpbl9lcnJvcihBRENfU0VfR0FJTl9FUlJPUih2YWx1ZSkpOworICAgICAgICAgICAgICAgIGh3X2dwYWRjX3N0b3JlX2RpZmZfZ2Fpbl9lcnJvcihBRENfRElGRl9HQUlOX0VSUk9SKHZhbHVlKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhcHBseV9wYWlyKGFkZHJlc3MsIHZhbHVlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RvcmVfaW5fYXJyYXkoYWRkcmVzcywgdmFsdWUpOworICAgIH0KKworICAgIHJldHVybiBzeXNfdGNzX2lzX2NhbGlicmF0ZWRfY2hpcDsKK30KKwordm9pZCBzeXNfdGNzX3NvcnRfYXJyYXkodm9pZCkKK3sKKyAgICBpbnQgZW50cnlfcHRyID0gMDsKKyAgICBpbnQgaTsKKworICAgIC8qCisgICAgICogQXBwbHkgYSBkZWZhdWx0IHZhbHVlIHRvIENMS19GUkVRX1RSSU1fUkVHLCBpZiBub3Qgc2V0IGluIFRDUy4KKyAgICAgKiAgIFsxMDo4XTogQ09BUlNFX0FESiA9IDB4NAorICAgICAqICAgWzc6MF06IEZJTkVfQURKID0gMHg2MAorICAgICAqLworICAgIGlmIChDUkdfVE9QLT5DTEtfRlJFUV9UUklNX1JFRyA9PSAwKQorICAgIHsKKyAgICAgICAgQ1JHX1RPUC0+Q0xLX0ZSRVFfVFJJTV9SRUcgPSAweDA0NjA7CisgICAgfQorCisgICAgaWYgKHN5c190Y3NfaXNfY2FsaWJyYXRlZF9jaGlwKQorICAgIHsKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQorICAgICAgICBlbnRyeV9wdHIgPSBzeXNfdGNzX3NvcnRfYXJlYShCTEVfQkFTRSwgc2l6ZW9mKEJMRV9UeXBlKSwgZW50cnlfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJlYV9vZmZzZXRbdGNzX2JsZV0sICZhcmVhX3NpemVbdGNzX2JsZV0pOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKKyAgICAgICAgZW50cnlfcHRyID0gc3lzX3Rjc19zb3J0X2FyZWEoRlRERl9CQVNFLCBzaXplb2YoRlRERl9UeXBlKSwgZW50cnlfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJlYV9vZmZzZXRbdGNzX2Z0ZGZdLCAmYXJlYV9zaXplX2dsb2JhbFt0Y3NfZnRkZl0pOworI2VuZGlmCisKKyAgICAgICAgZW50cnlfcHRyID0gc3lzX3Rjc19zb3J0X2FyZWEoUkZDVV9CQVNFLCBSQURJT19BUkVBX1NJWkUsIGVudHJ5X3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyZWFfb2Zmc2V0W3Rjc19yYWRpb10sICZhcmVhX3NpemVfZ2xvYmFsW3Rjc19yYWRpb10pOworCisgICAgICAgIGVudHJ5X3B0ciA9IHN5c190Y3Nfc29ydF9hcmVhKCh1aW50MzJfdCkmQU5BTUlTQy0+Q0hBUkdFUl9DVFJMMl9SRUcsIDEsIGVudHJ5X3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyZWFfb2Zmc2V0W3Rjc19jaGFyZ2VyXSwgJmFyZWFfc2l6ZV9nbG9iYWxbdGNzX2NoYXJnZXJdKTsKKworICAgICAgICBlbnRyeV9wdHIgPSBzeXNfdGNzX3NvcnRfYXJlYShBUFVfQkFTRSwgc2l6ZW9mKEFQVV9UeXBlKSwgZW50cnlfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJlYV9vZmZzZXRbdGNzX2F1ZGlvXSwgJmFyZWFfc2l6ZV9nbG9iYWxbdGNzX2F1ZGlvXSk7CisKKyAgICAgICAgLy8gVGhlIHJlc3Qgc2hvdWxkIGJlIFN5c3RlbS4gQXNzZXJ0IGlmIG5vdCEKKyAgICAgICAgZm9yIChpID0gZW50cnlfcHRyOyBpIDwgdGNzX2xlbmd0aDsgaSArPSAyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoSVNfSU5fQVJFQSh0Y3NfZGF0YVtpXSwgVUFSVF9CQVNFLCBQRVJJUEhFUkFMX0FSRUFfU0laRSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChJU19JTl9BUkVBKHRjc19kYXRhW2ldLCBDUkdfVE9QX0JBU0UsIDB4NjEwMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gSXQgaXMgb2sgKG1vc3QgcHJvYmFibHkpLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVF9XQVJOSU5HKDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXJlYV9vZmZzZXRbdGNzX3N5c3RlbV0gPSBlbnRyeV9wdHI7CisgICAgICAgIGFyZWFfc2l6ZV9nbG9iYWxbdGNzX3N5c3RlbV0gPSB0Y3NfbGVuZ3RoIC0gZW50cnlfcHRyOworCisgICAgICAgIHRjc19wdHIgPSB0Y3NfZGF0YTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdGNzX3B0ciA9IHVuY2FsaWJyYXRlZF90Y3NfZGF0YTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgVU5DQUxJQlJBVEVEX0RBVEFfTk9OX1JFVEFJTkVEX09GRlNFVDsgaSArPSAyKQorICAgICAgICB7CisgICAgICAgICAgICBhcHBseV9wYWlyKHRjc19wdHJbaV0sIHRjc19wdHJbaSArIDFdKTsKKyAgICAgICAgfQorCisjaWZkZWYgQ09ORklHX1VTRV9CTEUKKworICAgICAgICBpZiAoVU5DQUxJQlJBVEVEX0RBVEFfQkxFX1NJWkUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBhcmVhX29mZnNldFt0Y3NfYmxlXSA9IFVOQ0FMSUJSQVRFRF9EQVRBX0JMRV9PRkZTRVQ7CisgICAgICAgICAgICBhcmVhX3NpemVbdGNzX2JsZV0gPSBVTkNBTElCUkFURURfREFUQV9CTEVfU0laRTsKKyAgICAgICAgfQorCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0VfRlRERgorCisgICAgICAgIGlmIChVTkNBTElCUkFURURfREFUQV9GVERGX1NJWkUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBhcmVhX29mZnNldFt0Y3NfZnRkZl0gPSBVTkNBTElCUkFURURfREFUQV9GVERGX09GRlNFVDsKKyAgICAgICAgICAgIGFyZWFfc2l6ZV9nbG9iYWxbdGNzX2Z0ZGZdID0gVU5DQUxJQlJBVEVEX0RBVEFfRlRERl9TSVpFOworICAgICAgICB9CisKKyNlbmRpZgorCisgICAgICAgIGlmIChVTkNBTElCUkFURURfREFUQV9SQURJT19TSVpFID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYXJlYV9vZmZzZXRbdGNzX3JhZGlvXSA9IFVOQ0FMSUJSQVRFRF9EQVRBX1JBRElPX09GRlNFVDsKKyAgICAgICAgICAgIGFyZWFfc2l6ZV9nbG9iYWxbdGNzX3JhZGlvXSA9IFVOQ0FMSUJSQVRFRF9EQVRBX1JBRElPX1NJWkU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVU5DQUxJQlJBVEVEX0RBVEFfQ0hBUkdFUl9TSVpFID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYXJlYV9vZmZzZXRbdGNzX2NoYXJnZXJdID0gVU5DQUxJQlJBVEVEX0RBVEFfQ0hBUkdFUl9PRkZTRVQ7CisgICAgICAgICAgICBhcmVhX3NpemVfZ2xvYmFsW3Rjc19jaGFyZ2VyXSA9IFVOQ0FMSUJSQVRFRF9EQVRBX0NIQVJHRVJfU0laRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChVTkNBTElCUkFURURfREFUQV9BVURJT19TSVpFID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYXJlYV9vZmZzZXRbdGNzX2F1ZGlvXSA9IFVOQ0FMSUJSQVRFRF9EQVRBX0FVRElPX09GRlNFVDsKKyAgICAgICAgICAgIGFyZWFfc2l6ZV9nbG9iYWxbdGNzX2F1ZGlvXSA9IFVOQ0FMSUJSQVRFRF9EQVRBX0FVRElPX1NJWkU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVU5DQUxJQlJBVEVEX0RBVEFfU1lTVEVNX1NJWkUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBhcmVhX29mZnNldFt0Y3Nfc3lzdGVtXSA9IFVOQ0FMSUJSQVRFRF9EQVRBX1NZU1RFTV9PRkZTRVQ7CisgICAgICAgICAgICBhcmVhX3NpemVfZ2xvYmFsW3Rjc19zeXN0ZW1dID0gVU5DQUxJQlJBVEVEX0RBVEFfU1lTVEVNX1NJWkU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgc3lzX3Rjc19hcHBseShzeXNfdGNzX2FyZWFfdCBhcmVhKQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0gYXJlYV9vZmZzZXRbYXJlYV07IGkgPCAoYXJlYV9vZmZzZXRbYXJlYV0gKyBhcmVhX3NpemVfZ2xvYmFsW2FyZWFdKTsgaSArPSAyKQorICAgIHsKKyAgICAgICAgYXBwbHlfZW50cnkoaSk7CisgICAgfQorfQorCisvKioKK1x9CitcfQorXH0KKyovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9pbmNsdWRlL2FkX2Z0ZGZfY29uZmlnLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9pbmNsdWRlL2FkX2Z0ZGZfY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3Yzg3YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL2luY2x1ZGUvYWRfZnRkZl9jb25maWcuaApAQCAtMCwwICsxLDExNyBAQAorLyoqCisgXGFkZHRvZ3JvdXAgSU5URVJGQUNFUworIFx7CisgXGFkZHRvZ3JvdXAgRlRERgorIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGZpbGUgYWRfZnRkZl9jb25maWcuaAorICoKKyAqIEBicmllZiBGVERGIEFkYXB0ZXIgQVBJCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEFEX0ZUREZfQ09ORklHX0gKKyNkZWZpbmUgQURfRlRERl9DT05GSUdfSAorCisjaWZuZGVmIEZUREZfUEhZX0FQSQorI2luY2x1ZGUgInF1ZXVlLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImZ0ZGYuaCIKKworCisvKioKKyAqIFxicmllZiBTbGVlcCBXaGVuIElkbGUKKyAqCisgKiBJZiBzZXQsIHRoZSBibG9jayB3aWxsIHNsZWVwIHdoZW4gSWRsZQorICoKKyAqLworI2RlZmluZSBBRF9GVERGX1NMRUVQX1dIRU5fSURMRSAxCisKKy8qKgorICogXGJyaWVmIElkbGUgVGltZW91dAorICoKKyAqIElkbGUgVGltZW91dCwgaW4gT1Mgc2NoZWR1bGVyIHRpY2tzLCBhZnRlciB3aGljaCwgaWYgc3RpbGwgSWRsZSwgRlRERiB3aWxsCisgKiBiZSBwdXQgdG8gc2xlZXAuIE9ubHkgYXBwbGljYWJsZSBpZiBBRF9GVERGX1NMRUVQX1dIRU5fSURMRSAxCisgKgorICovCisjZGVmaW5lIEFEX0ZUREZfSURMRV9USU1FT1VUIDEKKworLyoqCisgKiBcYnJpZWYgVVAgUXVldWUgc2l6ZQorICoKKyAqIERlZmluZXMgdGhlIFVQIChVTUFDIHRvIGNsaWVudCBhcHApIFF1ZXVlIGxlbmd0aCwgaW4gbnVtYmVyIG9mIG1lc3NhZ2VzCisgKgorICovCisjZGVmaW5lIEFEX0ZUREZfVVBfUVVFVUVfTEVOR1RIICAgIDE2CisKKy8qKgorICogXGJyaWVmIERPV04gUXVldWUgc2l6ZQorICoKKyAqIERlZmluZXMgdGhlIERPV04gKGNsaWVudCBhcHAgdG8gVU1BQykgUXVldWUgbGVuZ3RoLCBpbiBudW1iZXIgb2YgbWVzc2FnZXMKKyAqCisgKi8KKyNkZWZpbmUgQURfRlRERl9ET1dOX1FVRVVFX0xFTkdUSCAgMTYKKworLyoqCisgKiBcYnJpZWYgTG93IFBvd2VyIENsb2NrIGN5Y2xlCisgKgorICogRGVmaW5lcyB0aGUgTG93IFBvd2VyIGNsb2NrIGN5Y2xlIGluIHBpY28gc2Vjcy4gVXNlZCBmb3IgY29tcHV0YXRpb24gbmVlZGVkCisgKiBmb3Igc2xlZXBpbmcgLyB3YWtpbmcgdXAgRlRERgorICoKKyAqLworI2RlZmluZSBBRF9GVERGX0xQX0NMT0NLX0NZQ0xFIDMwNTE3NTc4CisKKy8qKgorICogXGJyaWVmIFdha2UgVXAgTGF0ZW5jeQorICoKKyAqIERlZmluZXMgdGhlIFdha2UgVXAgTGF0ZW5jeSBleHByZXNzZWQgaW4gTG93IFBvd2VyIGNsb2NrIGN5Y2xlcywgdGhhdCBpcworICogdGhlIG51bWJlciBvZiBMUCBjbG9jayBjeWNsZXMgbmVlZGVkIGZvciB0aGUgRlRERiB0byBiZSBmdWxseSBvcGVyYXRpb25hbAorICogKGNhbGN1bGF0aW9ucyBhbmQgRlRERiB0aW1lciBzeW5jaHJvbml6YXRpb24pCisgKgorICovCisjZGVmaW5lIEFEX0ZUREZfV1VQX0xBVEVOQ1kgMTAKKworLyoqCisgKiBcYnJpZWYgU2xlZXAgdmFsdWUgY29tcGVuc2F0aW9uCisgKgorICogRGVmaW5lcyB0aGUgc2xlZXAgdmFsdWUgY29tcGVuc2F0aW9uIGV4cHJlc3NlZCBpbiBtaWNyb3NlY29uZHMuIFRoaXMgdmFsdWUKKyAqIGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgc2xlZXAgdGltZSByZXR1cm5lZCBieSBGVERGX2NhblNsZWVwKCApCisgKi8KKyNkZWZpbmUgQURfRlRERl9TTEVFUF9DT01QRU5TQVRJT04gMTUwMAorCisjZW5kaWYgLyogQURfRlRERl9DT05GSUdfSCAqLworLyoqCisgXH0KKyBcfQorIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL2luY2x1ZGUvYWRfZnRkZl9waHlfYXBpLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9pbmNsdWRlL2FkX2Z0ZGZfcGh5X2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOTZjNjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9pbmNsdWRlL2FkX2Z0ZGZfcGh5X2FwaS5oCkBAIC0wLDAgKzEsMTMwIEBACisvKioKKyBcYWRkdG9ncm91cCBJTlRFUkZBQ0VTCisgXHsKKyBcYWRkdG9ncm91cCBGVERGCisgXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAZmlsZSBhZF9mdGRmX3BoeV9hcGkuaAorICoKKyAqIEBicmllZiBGVERGIFBIWSBBZGFwdGVyIEFQSQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBBRF9GVERGX1BIWV9BUElfSAorI2RlZmluZSBBRF9GVERGX1BIWV9BUElfSAorCisjaW5jbHVkZSAiZnRkZi5oIgorI2luY2x1ZGUgImFkX2Z0ZGZfY29uZmlnLmgiCisKKy8qKgorICogXGJyaWVmIEluaXRpYWxpemUgYWRhcHRlciAtIGNyZWF0ZSBxdWV1ZXMKKyAqCisgKi8KK3ZvaWQgYWRfZnRkZl9pbml0KHZvaWQpOworCisvKioKKyAqIFxicmllZiBTZXQgRXh0ZW5kZWQgQWRkcmVzcworICoKKyAqIFNldHMgaW50ZXJmYWNlIGV4dGVuZGVkIGFkZHJlc3MuIFRoaXMgaXMgdGhyZWFkIHNhZmUuCisgKgorICogXHBhcmFtW2luXSBhZGRyZXNzIC0gVGhlIGV4dGVuZGVkIGFkZHJlc3MgdG8gc2V0CisgKi8KK3ZvaWQgYWRfZnRkZl9zZXRFeHRBZGRyZXNzKCBGVERGX0V4dEFkZHJlc3MgYWRkcmVzcyk7CisKKy8qKgorICogXGJyaWVmIEdldCBFeHRlbmRlZCBBZGRyZXNzCisgKgorICogR2V0cyBpbnRlcmZhY2UgZXh0ZW5kZWQgYWRkcmVzcy4gVGhpcyBpcyB0aHJlYWQgc2FmZS4KKyAqCisgKiBccmV0dXJucyBUaGUgZXh0ZW5kZWQgYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNlCisgKi8KK0ZUREZfRXh0QWRkcmVzcyBhZF9mdGRmX2dldEV4dEFkZHJlc3MoIHZvaWQpOworCisvKioKKyAqIFxicmllZiBUcmFuc21pdHMgYSBmcmFtZQorICoKKyAqIFRyYW5zbWl0cyBhIGZyYW1lLiBQYXJhbXM6CisgKgorICogXHBhcmFtW2luXSBmcmFtZUxlbmd0aCAtIFRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIGZyYW1lIHBhc3NlZCBpbiBieXRlcworICogXHBhcmFtW2luXSBmcmFtZSAtIGEgcG9pbnRlciB0byB0aGUgcGFzc2VkIGZyYW1lIGJ1ZmZlcgorICogXHBhcmFtW2luXSBjaGFubmVsIC0gVGhlIGNoYW5uZWwgdG8gdXNlIGZvciB0cmFuc21pc3Npb24gaW4gWzExLCAyNl0KKyAqIFxwYXJhbVtpbl0gY3NtYVN1cHByZXNzIC0gSWYgdHJ1ZSwgY3NtYSBwcm90b2NvbCAoaS5lLiBDQ0EpIHdpbGwgbm90IGJlIHBlcmZvcm1lZAorICogXHBhcmFtW2luXSBwdGkgLSBQYWNrZXQgVHJhZmZpYyBJbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhpcyB0cmFuc2FjdGlvbi4KKyAqLworRlRERl9TdGF0dXMgYWRfZnRkZl9zZW5kX2ZyYW1lX3NpbXBsZSggRlRERl9EYXRhTGVuZ3RoICAgIGZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0KiAgICAgICAgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQ2hhbm5lbE51bWJlciBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1BUSSAgICAgICAgICAgcHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0Jvb2xlYW4gICAgICAgY3NtYVN1cHByZXNzKTsKKworLyoqCisgKiBcYnJpZWYgSW5zdHJ1Y3RzIHRoZSBNQUMgYW5kIFBIWSB0byBnbyB0byBzbGVlcAorICoKKyAqIFxwYXJhbVtpbl0gYWxsb3dfZGVmZXJyZWRfc2xlZXAgLSBJZiB0cnVlLCB0aGVuIGlmIHRoZSBNQUMgY2Fubm90IGdvIHRvIHNsZWVwIGltbWVkaWF0ZWx5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gYSB0cmFuc21pc3Npb24gaXMgcGVuZGluZyksIHRoZSBNQUMgd2lsbCBnbyB0byBzbGVlcAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHNvb24gYXMgcG9zc2libGUuIElmIGZhbHNlLCBhbmQgdGhlIE1BQyBjYW5ub3QgZ28gdG8gc2xlZXAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseSwgc2xlZXAgd2lsbCBiZSBhYm9ydGVkLgorICovCit2b2lkIGFkX2Z0ZGZfc2xlZXBfd2hlbl9wb3NzaWJsZSggRlRERl9Cb29sZWFuIGFsbG93X2RlZmVycmVkX3NsZWVwKTsKKworLyoqCisgKiBcYnJpZWYgSW5zdHJ1Y3RzIHRoZSBNQUMgYW5kIFBIWSB0byB3YWtldXAsIGlmIHNsZWVwaW5nCisgKgorICovCit2b2lkIGFkX2Z0ZGZfd2FrZV91cCh2b2lkKTsKKworI2lmIEZUREZfREJHX0JVU19FTkFCTEUKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgR1BJTyBwaW5zIGZvciB0aGUgRlRERiBkZWJ1ZyBidXMKKyAqCisgKiBEZWJ1ZyBidXMgdXNlcyB0aGUgZm9sbG93aW5nIChmaXhlZCkgR1BJTyBwaW5zOgorICoKKyAqIGJpdCAwOiBIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fNAorICogYml0IDE6IEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl81CisgKiBiaXQgMjogSFdfR1BJT19QT1JUXzEsIEhXX0dQSU9fUElOXzYKKyAqIGJpdCAzOiBIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fNworICogYml0IDQ6IEhXX0dQSU9fUE9SVF8wLCBIV19HUElPX1BJTl82CisgKiBiaXQgNTogSFdfR1BJT19QT1JUXzAsIEhXX0dQSU9fUElOXzcKKyAqIGJpdCA2OiBIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fMworICogYml0IDc6IEhXX0dQSU9fUE9SVF8yLCBIV19HUElPX1BJTl8zCisgKi8KK3ZvaWQgYWRfZnRkZl9kYmdCdXNHcGlvQ29uZmlnKHZvaWQpOworI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKworI2VuZGlmIC8qIEFEX0ZUREZfUEhZX0FQSV9IICovCisKKy8qKgorIFx9CisgXH0KKyBcfQorICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL2luY2x1ZGUvZnRkZi5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvaW5jbHVkZS9mdGRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5OGM2YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL2luY2x1ZGUvZnRkZi5oCkBAIC0wLDAgKzEsMzQzMSBAQAorLyoqCisgXGFkZHRvZ3JvdXAgSU5URVJGQUNFUworIFx7CisgXGFkZHRvZ3JvdXAgRlRERgorIFx7CisgXGJyaWVmIElFRUUgODAyLjE1LjQgV2lyZWxlc3MKKyAqLworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGZ0ZGYuaAorICoKKyAqIEBicmllZiBGVERGIFVNQUMgQVBJIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEZUREZfSF8KKyNkZWZpbmUgRlRERl9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaWZkZWYgRlRERl9QSFlfQVBJCisjaW5jbHVkZSA8ZnRkZl9jb25maWdfcGh5X2FwaS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxmdGRmX2NvbmZpZ19tYWNfYXBpLmg+CisjZW5kaWYKKworI2RlZmluZSBfX3ByaXZhdGUxICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QKKyNkZWZpbmUgX19wcml2YXRlMiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QVNOCisjZGVmaW5lIF9fcHJpdmF0ZTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFNOCisKKyNkZWZpbmUgRlRERl9DQVBBQklMSVRZX0lTX0ZGRCAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEZUREZfQ0FQQUJJTElUWV9BQ19QT1dFUiAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBGVERGX0NBUEFCSUxJVFlfUkVDRUlWRVJfT05fV0hFTl9JRExFIDB4MDgKKyNkZWZpbmUgRlRERl9DQVBBQklMSVRZX0ZBU1RfQVNTT0NJQVRJT04gICAgICAweDEwCisjZGVmaW5lIEZUREZfQ0FQQUJJTElUWV9TVVBQT1JUU19TRUNVUklUWSAgICAgMHg0MAorI2RlZmluZSBGVERGX0NBUEFCSUxJVFlfV0FOVFNfU0hPUlRfQUREUkVTUyAgIDB4ODAKKworI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1VTRV9XQUlUX0ZPUl9BQ0sgICAgICAgMQorCisvLyBUcmFuc3BhcmVuY3kgb3B0aW9ucworI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV8wICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV8xICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV8yICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV8zICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV80ICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV81ICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV82ICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV83ICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX0ZSQU1FX1RZUEVTICAgMHgwMDAwMDBmZgorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX0FVVE9fQUNLICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX0FVVE9fRlBfQUNLICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQ1JDX0VSUk9SICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX0ZSQU1FX1ZFUlNJT04gMHgwMDAwMTAwMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX1BBTl9JRCAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX0FERFIgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX0JFQUNPTiAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX05PX0RFU1RfQUREUiAgMHgwMDAxMDAwMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX0VOQUJMRV9DU01BX0NBICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX0VOQUJMRV9GQ1NfR0VORVJBVElPTiAgMHgwMjAwMDAwMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX0VOQUJMRV9TRUNVUklUWSAgICAgICAgMHgwNDAwMDAwMAorI2lmIEZUREZfVFJBTlNQQVJFTlRfVVNFX1dBSVRfRk9SX0FDSworI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1dBSVRfRk9SX0FDSyAgICAgICAgICAgMHgwODAwMDAwMAorI2VuZGlmCisKKy8vIFRyYW5zcGFyZW50IFRYIHN0YXR1c2VzCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfU0VORF9TVUNDRVNTRlVMIDB4MDAwMDAwMDAKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9DU01BQ0FfRkFJTFVSRSAgMHgwMDAwMDAwMQorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX09WRVJGTE9XICAgICAgICAweDAwMDAwMDAyCisjaWYgRlRERl9UUkFOU1BBUkVOVF9XQUlUX0ZPUl9BQ0sKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9OT19BQ0sgICAgICAgICAgMHgwMDAwMDAwNAorI2VuZGlmCisKKy8vIFRyYW5zcGFyZW50IFJYIHN0YXR1c2VzCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUkNWX1NVQ0NFU1NGVUwgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUkNWX0NSQ19FUlJPUiAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUkNWX1NFQ1VSSVRZX0VSUk9SICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUkNWX1JFU19GUkFNRVRZUEUgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUkNWX1JFU19GUkFNRV9WRVJTSU9OICAweDAwMDAwMDA4CisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUkNWX1VORVhQX0RTVF9BRERSICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUkNWX1VORVhQX0RTVF9QQU5fSUQgICAweDAwMDAwMDIwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUkNWX1VORVhQX0JFQUNPTiAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUkNWX1VORVhQX05PX0RFU1RfQUREUiAweDAwMDAwMDgwCisKK3R5cGVkZWYgdWludDhfdCBGVERGX01zZ0lkOworI2RlZmluZSBGVERGX0RBVEFfUkVRVUVTVCAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRlRERl9EQVRBX0lORElDQVRJT04gICAgICAgICAgICAyCisjZGVmaW5lIEZUREZfREFUQV9DT05GSVJNICAgICAgICAgICAgICAgMworI2RlZmluZSBGVERGX1BVUkdFX1JFUVVFU1QgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRlRERl9QVVJHRV9DT05GSVJNICAgICAgICAgICAgICA1CisjZGVmaW5lIEZUREZfQVNTT0NJQVRFX1JFUVVFU1QgICAgICAgICAgNgorI2RlZmluZSBGVERGX0FTU09DSUFURV9JTkRJQ0FUSU9OICAgICAgIDcKKyNkZWZpbmUgRlRERl9BU1NPQ0lBVEVfUkVTUE9OU0UgICAgICAgICA4CisjZGVmaW5lIEZUREZfQVNTT0NJQVRFX0NPTkZJUk0gICAgICAgICAgOQorI2RlZmluZSBGVERGX0RJU0FTU09DSUFURV9SRVFVRVNUICAgICAgIDEwCisjZGVmaW5lIEZUREZfRElTQVNTT0NJQVRFX0lORElDQVRJT04gICAgMTEKKyNkZWZpbmUgRlRERl9ESVNBU1NPQ0lBVEVfQ09ORklSTSAgICAgICAxMgorI2RlZmluZSBGVERGX0JFQUNPTl9OT1RJRllfSU5ESUNBVElPTiAgIDEzCisjZGVmaW5lIEZUREZfQ09NTV9TVEFUVVNfSU5ESUNBVElPTiAgICAgMTQKKyNkZWZpbmUgRlRERl9HRVRfUkVRVUVTVCAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBGVERGX0dFVF9DT05GSVJNICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZUREZfU0VUX1JFUVVFU1QgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgRlRERl9TRVRfQ09ORklSTSAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBGVERGX0dUU19SRVFVRVNUICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIEZUREZfR1RTX0NPTkZJUk0gICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgRlRERl9HVFNfSU5ESUNBVElPTiAgICAgICAgICAgICAyMQorI2RlZmluZSBGVERGX09SUEhBTl9JTkRJQ0FUSU9OICAgICAgICAgIDIyCisjZGVmaW5lIEZUREZfT1JQSEFOX1JFU1BPTlNFICAgICAgICAgICAgMjMKKyNkZWZpbmUgRlRERl9SRVNFVF9SRVFVRVNUICAgICAgICAgICAgICAyNAorI2RlZmluZSBGVERGX1JFU0VUX0NPTkZJUk0gICAgICAgICAgICAgIDI1CisjZGVmaW5lIEZUREZfUlhfRU5BQkxFX1JFUVVFU1QgICAgICAgICAgMjYKKyNkZWZpbmUgRlRERl9SWF9FTkFCTEVfQ09ORklSTSAgICAgICAgICAyNworI2RlZmluZSBGVERGX1NDQU5fUkVRVUVTVCAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEZUREZfU0NBTl9DT05GSVJNICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgRlRERl9TVEFSVF9SRVFVRVNUICAgICAgICAgICAgICAzMAorI2RlZmluZSBGVERGX1NUQVJUX0NPTkZJUk0gICAgICAgICAgICAgIDMxCisjZGVmaW5lIEZUREZfU1lOQ19SRVFVRVNUICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRlRERl9TWU5DX0xPU1NfSU5ESUNBVElPTiAgICAgICAzMworI2RlZmluZSBGVERGX1BPTExfUkVRVUVTVCAgICAgICAgICAgICAgIDM0CisjZGVmaW5lIEZUREZfUE9MTF9DT05GSVJNICAgICAgICAgICAgICAgMzUKKyNkZWZpbmUgRlRERl9TRVRfU0xPVEZSQU1FX1JFUVVFU1QgICAgICAzNgorI2RlZmluZSBGVERGX1NFVF9TTE9URlJBTUVfQ09ORklSTSAgICAgIDM3CisjZGVmaW5lIEZUREZfU0VUX0xJTktfUkVRVUVTVCAgICAgICAgICAgMzgKKyNkZWZpbmUgRlRERl9TRVRfTElOS19DT05GSVJNICAgICAgICAgICAzOQorI2RlZmluZSBGVERGX1RTQ0hfTU9ERV9SRVFVRVNUICAgICAgICAgIDQwCisjZGVmaW5lIEZUREZfVFNDSF9NT0RFX0NPTkZJUk0gICAgICAgICAgNDEKKyNkZWZpbmUgRlRERl9LRUVQX0FMSVZFX1JFUVVFU1QgICAgICAgICA0MgorI2RlZmluZSBGVERGX0tFRVBfQUxJVkVfQ09ORklSTSAgICAgICAgIDQzCisjZGVmaW5lIEZUREZfQkVBQ09OX1JFUVVFU1QgICAgICAgICAgICAgNDQKKyNkZWZpbmUgRlRERl9CRUFDT05fQ09ORklSTSAgICAgICAgICAgICA0NQorI2RlZmluZSBGVERGX0JFQUNPTl9SRVFVRVNUX0lORElDQVRJT04gIDQ2CisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfQ09ORklSTSAgICAgICAgNDcKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9JTkRJQ0FUSU9OICAgICA0OAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX1JFUVVFU1QgICAgICAgIDQ5CisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfRU5BQkxFX1JFUVVFU1QgNTAKKyNkZWZpbmUgRlRERl9TTEVFUF9SRVFVRVNUICAgICAgICAgICAgICA1MQorI2RlZmluZSBGVERGX0VYUExJQ0lUX1dBS0VfVVAgICAgICAgICAgIDUyCisjZGVmaW5lIEZUREZfUkVNT1RFX1JFUVVFU1QgICAgICAgICAgICAgNTMKKyNpZiBGVERGX0RCR19CVVNfRU5BQkxFCisjZGVmaW5lIEZUREZfREJHX01PREVfU0VUX1JFUVVFU1QgICAgICAgNTQKKyNlbmRpZiAvKiBGVERGX0RCR19CVVNfRU5BQkxFICovCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorI2RlZmluZSBGVERGX0ZQUFJfTU9ERV9TRVRfUkVRVUVTVCAgICAgIDU1CisjZW5kaWYgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSAqLworLyoqCisgKiBcYnJpZWYgIFJlcXVlc3Qgc3RhdHVzCisgKiBccmVtYXJrIFZhbGlkIHN0YXR1c2VzOgorICogICAgICAgICAtIEZUREZfU1VDQ0VTUzogU3VjY2Vzc2Z1bAorICogICAgICAgICAtIEZUREZfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRTogQ0NBIGZhaWx1cmUKKyAqICAgICAgICAgLSBGVERGX05PX0FDSzogTm8gYWNrIHJlY2VpdmVkIGFmdGVyIG1hY01heEZyYW1lUmV0cmllcworICogICAgICAgICAtIEZUREZfTk9fREFUQTogTm8gZGF0YSBmcmFtZXMgcGVuZGluZworICogICAgICAgICAtIEZUREZfQ09VTlRFUl9FUlJPUjogU2VjdXJpdHkgZnJhbWUgY291bnRlciBlcnJvcgorICogICAgICAgICAtIEZUREZfRlJBTUVfVE9PX0xPTkc6IFRvbyBsb25nIGZyYW1lCisgKiAgICAgICAgIC0gRlRERl9JTVBST1BFUl9LRVlfVFlQRTogSW1wcm9wZXIga2V5IHR5cGUKKyAqICAgICAgICAgLSBGVERGX0lNUFJPUEVSX1NFQ1VSSVRZX0xFVkVMOiBJbXByb3BlciBzZWN1cml0eSBsZXZlbAorICogICAgICAgICAtIEZUREZfU0VDVVJJVFlfRVJST1I6IFNlY3VyaXR5IGF1dGhlbnRpY2F0aW9uIGVycm9yCisgKiAgICAgICAgIC0gRlRERl9VTkFWQUlMQUJMRV9LRVk6IFVuYXZhaWxhYmxlIGtleQorICogICAgICAgICAtIEZUREZfVU5BVkFJTEFCTEVfREVWSUNFOiBVbmF2YWlsYWJsZSBkZXZpY2UKKyAqICAgICAgICAgLSBGVERGX1VOQVZBSUxBQkxFX1NFQ1VSSVRZX0xFVkVMOiBVbmF2YWlsYWJsZSBzZWN1cml0eSBsZXZlbAorICogICAgICAgICAtIEZUREZfVU5TVVBQT1JURURfTEVHQUNZOiBVbnN1cHBvcnRlZCBsZWdhY3kKKyAqICAgICAgICAgLSBGVERGX1VOU1VQUE9SVEVEX1NFQ1VSSVRZOiBVbnN1cHBvcnRlZHMgc2VjdXJpdHkKKyAqICAgICAgICAgLSBGVERGX0lOVkFMSURfUEFSQU1FVEVSOiBJbnZhbGlkIHBhcmFtZXRlcgorICogICAgICAgICAtIEZUREZfVFJBTlNBQ1RJT05fT1ZFUkZMT1c6IFRyYW5zYWN0aW9uIG92ZXJmbG93CisgKiAgICAgICAgIC0gRlRERl9UUkFOU0FDVElPTl9FWFBJUkVEOiBUcmFuc2FjdGlvbiBleHBpcmVkCisgKiAgICAgICAgIC0gRlRERl9OT19CRUFDT046IE5vIGJlYWNvbiByZWNlaXZlZAorICogICAgICAgICAtIEZUREZfU0NBTl9JTl9QUk9HUkVTUzogU2NhbiBpbiBwcm9ncmVzcworICogICAgICAgICAtIEZUREZfTk9fU0hPUlRfQUREUkVTUzogRlRERiBkb2VzIG5vdCBoYXZlIGEgc2hvcnQgYWRkcmVzcworICogICAgICAgICAtIEZUREZfU0xPVEZSQU1FX05PVF9GT1VORDogU2xvdGZyYW1lIG5vdCBmb3VuZAorICogICAgICAgICAtIEZUREZfTUFYX1NMT1RGUkFNRVNfRVhDRUVERUQ6IE1heCBzbG90ZnJhbWVzIGV4Y2VlZGVkCisgKiAgICAgICAgIC0gRlRERl9VTktOT1dOX0xJTks6IFVua25vd24gbGluaworICogICAgICAgICAtIEZUREZfTUFYX0xJTktTX0VYQ0VFREVEOiBNYXggbGlua3MgZXhjZWVkZWQKKyAqICAgICAgICAgLSBGVERGX1VOU1VQUE9SVEVEX0FUVFJJQlVURTogVW5zdXBwb3J0ZWQgUElCIGF0dHJpYnV0ZQorICogICAgICAgICAtIEZUREZfUkVBRF9PTkxZOiBSZWFkIG9ubGkgUElCIGF0dHJpYnV0ZQorICogICAgICAgICAtIEZUREZfSU5WQUxJRF9IQU5ETEU6IEludmFsaWQgaGFuZGxlCisgKiAgICAgICAgIC0gRlRERl9QQU5fQVRfQ0FQQUNJVFk6IFBBTiBhdCBjYXBhY2l0eQorICogICAgICAgICAtIEZUREZfUEFOX0FDQ0VTU19ERU5JRUQ6IFBBTiBhY2Nlc3MgZGVuaWVkCisgKiAgICAgICAgIC0gRlRERl9IT1BQSU5HX1NFUVVFTkNFX09GRlNFVF9EVVBMSUNBVElPTjogSG9wcGluZyBzZXF1ZW5jZSBvZmZzZXQgZHVwbGljYXRpb24KKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfU3RhdHVzOworI2RlZmluZSBGVERGX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRlRERl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFICAgICAgICAgICAgICAxCisjZGVmaW5lIEZUREZfTk9fQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGVERGX05PX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRlRERl9DT1VOVEVSX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZUREZfRlJBTUVfVE9PX0xPTkcgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGVERGX0lNUFJPUEVSX0tFWV9UWVBFICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRlRERl9JTVBST1BFUl9TRUNVUklUWV9MRVZFTCAgICAgICAgICAgICA3CisjZGVmaW5lIEZUREZfU0VDVVJJVFlfRVJST1IgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGVERGX1VOQVZBSUxBQkxFX0tFWSAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRlRERl9VTkFWQUlMQUJMRV9ERVZJQ0UgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBGVERGX1VOQVZBSUxBQkxFX1NFQ1VSSVRZX0xFVkVMICAgICAgICAgIDExCisjZGVmaW5lIEZUREZfVU5TVVBQT1JURURfTEVHQUNZICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRlRERl9VTlNVUFBPUlRFRF9TRUNVUklUWSAgICAgICAgICAgICAgICAxMworI2RlZmluZSBGVERGX0lOVkFMSURfUEFSQU1FVEVSICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEZUREZfVFJBTlNBQ1RJT05fT1ZFUkZMT1cgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgRlRERl9UUkFOU0FDVElPTl9FWFBJUkVEICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGVERGX09OX1RJTUVfVE9PX0xPTkcgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEZUREZfTElNSVRfUkVBQ0hFRCAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgRlRERl9OT19CRUFDT04gICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBGVERGX1NDQU5fSU5fUFJPR1JFU1MgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEZUREZfSU5WQUxJRF9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgRlRERl9OT19TSE9SVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBGVERGX1NVUEVSRlJBTUVfT1ZFUkxBUCAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEZUREZfVFJBQ0tJTkdfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRlRERl9TTE9URlJBTUVfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBGVERGX01BWF9TTE9URlJBTUVTX0VYQ0VFREVEICAgICAgICAgICAgIDI2CisjZGVmaW5lIEZUREZfVU5LTk9XTl9MSU5LICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgRlRERl9NQVhfTElOS1NfRVhDRUVERUQgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBGVERGX1VOU1VQUE9SVEVEX0FUVFJJQlVURSAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIEZUREZfUkVBRF9PTkxZICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgRlRERl9JTlZBTElEX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBGVERGX1BBTl9BVF9DQVBBQ0lUWSAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZUREZfUEFOX0FDQ0VTU19ERU5JRUQgICAgICAgICAgICAgICAgICAgMzMKKyNkZWZpbmUgRlRERl9IT1BQSU5HX1NFUVVFTkNFX09GRlNFVF9EVVBMSUNBVElPTiAzNAorCisvKioKKyAqIFxicmllZiBBc3NvY2lhdGlvbiBzdGF0dXMKKyAqIFxyZW1hcmsgU3VwcG9ydGVkIHN0YXR1c2VzOgorICogICAgICAgICAtIEZUREZfQVNTT0NJQVRJT05fU1VDQ0VTU0ZVTDogQXNzb2NpYXRlIHJlcXVlc3QgZ3JhbnRlZAorICogICAgICAgICAtIEZUREZfQVNTT0NJQVRJT05fUEFOX0FUX0NBUEFDSVRZOiBBc3Njb2NpYXRlIGRlbmllZCwgUEFOIGF0IGNhcGFjaXR5CisgKiAgICAgICAgIC0gRlRERl9BU1NPQ0lBVElPTl9QQU5fQUNDRVNTX0RFTklFRDogQXNzb2NpYXRlIGRlbmllZAorICogICAgICAgICAtIEZUREZfRkFTVF9BU1NPQ0lBVElPTl9TVUNDRVNTRlVMOiBBc3NvY2lhdGUgcmVxdWVzdCBncmFudGVkIChmYXN0KQorICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9Bc3NvY2lhdGlvblN0YXR1czsKKyNkZWZpbmUgRlRERl9BU1NPQ0lBVElPTl9TVUNDRVNTRlVMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEZUREZfQVNTT0NJQVRJT05fUEFOX0FUX0NBUEFDSVRZICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBGVERGX0FTU09DSUFUSU9OX1BBTl9BQ0NFU1NfREVOSUVEICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgRlRERl9BU1NPQ0lBVElPTl9IT1BQSU5HX1NFUVVFTkNFX09GRlNFVF9EVVBMSUNBVElPTiAweDAzCisjZGVmaW5lIEZUREZfRkFTVF9BU1NPQ0lBVElPTl9TVUNDRVNTRlVMICAgICAgICAgICAgICAgICAgICAgMHg4MAorCisvKioKKyAqIFxicmllZiBBZGRyZXNzIG1vZGUKKyAqIFxyZW1hcmsgU3VwcG9ydGVkIGFkZHJlc3MgbW9kZXM6CisgKiAgICAgICAgIC0gRlRERl9OT19BRERSRVNTIAorICogICAgICAgICAtIEZUREZfU0hPUlRfQUREUkVTUyAKKyAqICAgICAgICAgLSBGVERGX0VYVEVOREVEX0FERFJFU1MgCisgKi8KK3R5cGVkZWYgdWludDhfdCBGVERGX0FkZHJlc3NNb2RlOworI2RlZmluZSBGVERGX05PX0FERFJFU1MgICAgICAgMAorI2RlZmluZSBGVERGX1NJTVBMRV9BRERSRVNTICAgMQorI2RlZmluZSBGVERGX1NIT1JUX0FERFJFU1MgICAgMgorI2RlZmluZSBGVERGX0VYVEVOREVEX0FERFJFU1MgMworCisvKioKKyAqIFxicmllZiAgUEFOIElECisgKiBccmVtYXJrIFJhbmdlIDAuLiA2NTUzNQorICovCit0eXBlZGVmIHVpbnQxNl90IEZUREZfUEFOSWQ7CisKK3R5cGVkZWYgdWludDhfdCAgRlRERl9TaW1wbGVBZGRyZXNzOworCisvKioKKyAqIFxicmllZiAgU2hvcnQgYWRkcmVzcworICogXHJlbWFyayBSYW5nZSAwMDowMCAtIGZmOmZmCisgKi8KK3R5cGVkZWYgdWludDE2X3QgRlRERl9TaG9ydEFkZHJlc3M7CisKKy8qKgorICogXGJyaWVmICBFeHRlbmRlZCBhZGRyZXNzCisgKiBccmVtYXJrIFJhbmdlIDAwOjAwOjAwOjAwOjAwOjAwOjAwOjAwIC0gZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmYKKyAqLwordHlwZWRlZiB1aW50NjRfdCBGVERGX0V4dEFkZHJlc3M7CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgICAvKiogXGJyaWVmIERPIE5PVCBVU0UgKi8KKyAgICBGVERGX1NpbXBsZUFkZHJlc3Mgc2ltcGxlQWRkcmVzczsKKyAgICAvKiogXGJyaWVmIFNob3J0IGFkZHJlc3MgKi8KKyAgICBGVERGX1Nob3J0QWRkcmVzcyAgc2hvcnRBZGRyZXNzOworICAgIC8qKiBcYnJpZWYgRXh0ZW5kZWQgYWRkcmVzcyAqLworICAgIEZUREZfRXh0QWRkcmVzcyAgICBleHRBZGRyZXNzOworfSBGVERGX0FkZHJlc3M7CisKKyNpZmRlZiBTSU1VTEFUT1IKK3R5cGVkZWYgdWludDE2X3QgRlRERl9EYXRhTGVuZ3RoOworI2Vsc2UKK3R5cGVkZWYgdWludDhfdCAgRlRERl9EYXRhTGVuZ3RoOworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICBIYW5kbGUKKyAqIFxyZW1hcmsgUmFuZ2UgMC4uMjU1CisgKi8KK3R5cGVkZWYgdWludDhfdCBGVERGX0hhbmRsZTsKKworLyoqCisgKiBcYnJpZWYgIEJvb2xlYW4KKyAqIFxyZW1hcmsgVmFsaWQgdmFsdWVzOgorICogICAgICAgICAtIEZUREZfRkFMU0UKKyAqICAgICAgICAgLSBGVERGX1RSVUUKKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfQm9vbGVhbjsKKyNkZWZpbmUgRlRERl9GQUxTRSAwCisjZGVmaW5lIEZUREZfVFJVRSAgMQorCisvKioKKyAqIFxicmllZiAgU2VjdXJpdHkgbGV2ZWwKKyAqIFxyZW1hcmsgVmFsaWQgcmFuZ2UgMC4uNworICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfU2VjdXJpdHlMZXZlbDsKKworLyoqCisgKiBcYnJpZWYgIFNlY3VyaXR5IGtleSBJRCBtb2RlCisgKiBccmVtYXJrIFZhbGlkIHJhbmdlIDAuLjMKKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX0tleUlkTW9kZTsKKworLyoqCisgKiBcYnJpZWYgIFNlY3VyaXR5IGtleSBpbmRleAorICogXHJlbWFyayBWYWxpZCByYW5nZSAwLi4yNTUKKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX0tleUluZGV4OworCisvKioKKyAqIFxicmllZiAgU2VxdWVuY2UgbnVtYmVyCisgKiBccmVtYXJrIFZhbGlkIHJhbmdlIDAuLjI1NQorICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfU047CisKKy8qKgorICogXGJyaWVmICBTZXF1ZW5jZSBudW1iZXIKKyAqIFxyZW1hcmsgVmFsaWQgcmFuZ2UgMC4uMHhmZmZmZmZmZmZmICg1IG9jdGV0cykKKyAqLwordHlwZWRlZiB1aW50NjRfdCBGVERGX0FTTjsKKworLyoqCisgKiBcYnJpZWYgIE9yZGVyCisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9PcmRlcjsKKworLyoqCisgKiBcYnJpZWYgIFRpbWUKKyAqIFxyZW1hcmsgVGltZXN0YW1wIGluIHN5bWJvbHMgd2hpY2ggd3JhcHMgYXJvdW5kIGV2ZXJ5IDB4MTAwMDAwMDAwIHN5bWJvbHMKKyAqLwordHlwZWRlZiB1aW50MzJfdCBGVERGX1RpbWU7CisKKy8qKgorICogXGJyaWVmICBSZWFsIHRpbWUKKyAqIFxyZW1hcmsgVGltZXN0YW1wIGluIHN5bWJvbHMgd2hpY2ggZG9lcyBub3Qgd3JhcCAoaW4gdGhlIGxpZmV0aW1lIG9mIHRoZSBkZXZpY2UpCisgKi8KK3R5cGVkZWYgdWludDY0X3QgRlRERl9UaW1lNjQ7CisKK3R5cGVkZWYgdWludDMyX3QgRlRERl9VU2VjOworCit0eXBlZGVmIHVpbnQ2NF90IEZUREZfUFNlYzsKKwordHlwZWRlZiB1aW50MzJfdCBGVERGX05yTG93UG93ZXJDbG9ja0N5Y2xlczsKKwordHlwZWRlZiB1aW50OF90IEZUREZfTnJCYWNrb2ZmUGVyaW9kczsKKworLyoqCisgKiBcYnJpZWYgIFBlcmlvZCBvZiB0aW1lCisgKiBccmVtYXJrIFJhbmdlIDAuLjY1NTM1CisgKi8KK3R5cGVkZWYgdWludDE2X3QgRlRERl9QZXJpb2Q7CisKKy8qKgorICogXGJyaWVmICBTaXplIHR5cGUKKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX1NpemU7CisKKy8qKgorICogXGJyaWVmICBMZW5ndGggdHlwZQorICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfTGVuZ3RoOworCisvKioKKyAqIFxicmllZiAgUHJpb3JpdHkgdHlwZQorICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfUHJpb3JpdHk7CisKKy8qKgorICogXGJyaWVmICBQZXJmb3JtYW5jZSBjb3VudGVyCisgKiBccmVtYXJrIFJhbmdlIDAuLjB4ZmZmZmZmZmYKKyAqLwordHlwZWRlZiB1aW50MzJfdCBGVERGX0NvdW50OworCisvKioKKyAqIFxicmllZiBEaXNhc3NvY2lhdGUgcmVhc29uCisgKiBccmVtYXJrIEFsbG93ZWQgdmFsdWVzOgorICogICAgICAgICAtIEZUREZfQ09PUkRfV0lTSF9ERVZJQ0VfTEVBVkVfUEFOOiBDb29yZGluYXRvciB3aXNoZXMgdGhhdCBkZXZpY2UgbGVhdmVzIFBBTgorICogICAgICAgICAtIEZUREZfREVWSUNFX1dJU0hfTEVBVkVfUEFOOiBEZXZpY2Ugd2lzaGVzIHRvIGxlYXZlIFBBTgorICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfRGlzYXNzb2NpYXRlUmVhc29uOworI2RlZmluZSBGVERGX0NPT1JEX1dJU0hfREVWSUNFX0xFQVZFX1BBTiAxCisjZGVmaW5lIEZUREZfREVWSUNFX1dJU0hfTEVBVkVfUEFOICAgICAgIDIKKworLyoqCisgKiBcYnJpZWYgQmVhY29uIHR5cGUKKyAqIFxyZW1hcmsgQWxsb3dlZCB2YWx1ZXM6CisgKiAgICAgICAgIC0gRlRERl9OT1JNQUxfQkVBQ09OOiBOb3JtYWwgYmVhY29uCisgKiAgICAgICAgIC0gRlRERl9FTkhBTkNFRF9CRUFDT046IEVuaGFuY2VkIGJlYWNvbgorICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9CZWFjb25UeXBlOworI2RlZmluZSBGVERGX05PUk1BTF9CRUFDT04gICAwCisjZGVmaW5lIEZUREZfRU5IQU5DRURfQkVBQ09OIDEKKworLy8gTUFDIGNvbnN0YW50cworLyoqIFxicmllZiBhQmFzZVNsb3REdXJhdGlvbiAqLworI2RlZmluZSBGVERGX0JBU0VfU0xPVF9EVVJBVElPTiAgICAgICAgICA2MAorLyoqIFxicmllZiBhTnVtU3VwZXJmcmFtZVNsb3RzICovCisjZGVmaW5lIEZUREZfTlVNX1NVUEVSRlJBTUVfU0xPVFMgICAgICAgIDE2CisvKiogXGJyaWVmIGFCYXNlU3VwZXJmcmFtZUR1cmF0aW9uICovCisjZGVmaW5lIEZUREZfQkFTRV9TVVBFUkZSQU1FX0RVUkFUSU9OICAgICggRlRERl9CQVNFX1NMT1RfRFVSQVRJT04gKiBGVERGX05VTV9TVVBFUkZSQU1FX1NMT1RTICkKKy8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyNkZWZpbmUgRlRERl9HVFNfUEVSU0lTVEVOQ0VfVElNRSAgICAgICAgNAorLyoqIFxicmllZiBhTWF4QmVhY29uT3ZlcmhlYWQgKi8KKyNkZWZpbmUgRlRERl9NQVhfQkVBQ09OX09WRVJIRUFEICAgICAgICAgNzUKKy8qKiBcYnJpZWYgYU1heEJlYWNvbk92ZXJoZWFkICovCisjZGVmaW5lIEZUREZfTUFYX1BIWV9QQUNLRVRfU0laRSAgICAgICAgIDEyNworLyoqIFxicmllZiBhTWF4UEhZUGFja2V0U2l6ZSAqLworI2RlZmluZSBGVERGX01BWF9CRUFDT05fUEFZTE9BRF9MRU5HVEggICAoIEZUREZfTUFYX1BIWV9QQUNLRVRfU0laRSAtIEZUREZfTUFYX0JFQUNPTl9PVkVSSEVBRCApCisvKiogXGJyaWVmIE5PVCBVU0VEICAqLworI2RlZmluZSBGVERGX01BWF9MT1NUX0JFQUNPTlMgICAgICAgICAgICA0CisvKiogXGJyaWVmIGFNYXhNUERVVW5zZWN1cmVkT3ZlcmhlYWQgKi8KKyNkZWZpbmUgRlRERl9NQVhfTVBEVV9VTlNFQ1VSRURfT1ZFUkhFQUQgMjUKKy8qKiBcYnJpZWYgYU1pbk1QRFVPdmVyaGVhZCAqLworI2RlZmluZSBGVERGX01JTl9NUERVX09WRVJIRUFEICAgICAgICAgICA5CisvKiogXGJyaWVmIGFNYXhNQUNTYWZlUGF5bG9hZFNpemUgKi8KKyNkZWZpbmUgRlRERl9NQVhfTUFDX1NBRkVfUEFZTE9BRF9TSVpFICAgKCBGVERGX01BWF9QSFlfUEFDS0VUX1NJWkUgLSBGVERGX01BWF9NUERVX1VOU0VDVVJFRF9PVkVSSEVBRCApCisvKiogXGJyaWVmIGFNYXhNQUNTYWZlUGF5bG9hZFNpemUgKi8KKyNkZWZpbmUgRlRERl9NQVhfUEFZTE9BRF9TSVpFICAgICAgICAgICAgKCBGVERGX01BWF9QSFlfUEFDS0VUX1NJWkUgLSBGVERGX01JTl9NUERVX09WRVJIRUFEICkKKy8qKiBcYnJpZWYgYU1heE1BQ1BheWxvYWRTaXplICovCisjZGVmaW5lIEZUREZfTUFYX1NJRlNfRlJBTUVfU0laRSAgICAgICAgIDE4CisvKiogXGJyaWVmIE5PVCBVU0VEICAqLworI2RlZmluZSBGVERGX01JTl9DQVBfTEVOR1RIICAgICAgICAgICAgICA0NDAKKy8qKiBcYnJpZWYgYVVuaXRCYWNrb2ZmUGVyaW9kICovCisjZGVmaW5lIEZUREZfVU5JVF9CQUNLT0ZGX1BFUklPRCAgICAgICAgIDIwCisKKy8qKgorICogXGJyaWVmIFBJQiBhdHRyaWJ1dGUgSUQKKyAqIFxyZW1hcmsgTGlzdCBvZiBzdXBwb3J0ZWQgUElCIGF0dHJpYnV0ZXMsIHRoZWlyIHR5cGVzL3N0cnVjdHVyZXMgYW5kIGRlc2NyaXB0aW9uCisgKiAtIEZUREZfUElCX0VYVEVOREVEX0FERFJFU1MsIFxsaW5rIEZUREZfRXh0QWRkcmVzcyBcZW5kbGluaywKKyAqICAgICAgICAgVGhlIGV4dGVuZGVkIGFkZHJlc3Mgb2YgdGhlIGRldmljZQorICogLSBGVERGX1BJQl9BQ0tfV0FJVF9EVVJBVElPTiwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSBtYXhpbXVtIHRpbWUgaW4gc3ltYm9scyB0aGF0IGlzIHdhaXRlZCBmb3IgYW4gYWNrLCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfQVNTT0NJQVRJT05fUEFOX0NPT1JELCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRpb24gd2hldGhlciB0aGUgZGV2aWNlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIFBBTiBjb29yZGluYXRvcgorICogLSBGVERGX1BJQl9BU1NPQ0lBVElPTl9QRVJNSVQsIFxsaW5rICBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRpb24gd2hldGhlciB0aGUgUEFOIGNvb3JkaW5hdG9yIGdyYXRzIGFzc29jaWF0aW9uIHJlcXVlc3RzCisgKiAtIEZUREZfUElCX0FVVE9fUkVRVUVTVCwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0aW9uIHdoZXRoZXIgYmVhY29uIHJlY2VpdmVkIHdoaWxlIHNjYW5uaW5nIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uIG9yIG5vdAorICogLSBGVERGX1BJQl9CRUFDT05fUEFZTE9BRCwgRlRERl9PY3RldCosIFBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgaW5jbHVkZWQgaW4gYSBiZWFjb24gYXMgcGF5bG9hZAorICogLSBGVERGX1BJQl9CRUFDT05fUEFZTE9BRF9MRU5HVEgsIFxsaW5rIEZUREZfU2l6ZSBcZW5kbGluaywgU2l6ZSBvZiB0aGUgZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBhIGJlYWNvbiBhcyBwYXlsb2FkCisgKiAtIEZUREZfUElCX0JFQUNPTl9PUkRFUiwgXGxpbmsgRlRERl9PcmRlciBcZW5kbGluaywgRml4ZWQgdG8gMTUgaW5kaWNhdGluZyBiZWFjb25sZXNzIG1vZGUKKyAqIC0gRlRERl9QSUJfQlNOLCBcbGluayBGVERGX1NOIFxlbmRsaW5rLCBUaGUgY3VycmVudCBiZWFjb24gc2VxdWVuY2UgbnVtYmVyCisgKiAtIEZUREZfUElCX0NPT1JEX0VYVEVOREVEX0FERFJFU1MsIFxsaW5rIEZUREZfRXh0QWRkcmVzcyBcZW5kbGluaywgVGhlIGV4dGVuZGVkIGFkZHJlc3Mgb2YgdGhlIGNvb3JkaW5hdG9yCisgKiAtIEZUREZfUElCX0NPT1JEX1NIT1JUX0FERFJFU1MsIFxsaW5rIEZUREZfU2hvcnRBZGRyZXNzIFxlbmRsaW5rLCBUaGUgc2hvcnQgYWRkcmVzcyBvZiB0aGUgY29vcmRpbmF0b3IKKyAqIC0gRlRERl9QSUJfRFNOLCBcbGluayBGVERGX1NOIFxlbmRsaW5rLCBUaGUgY3VycmVudCBkYXRhIHNlcXVlbmNlIG51bWJlcgorICogLSBGVERGX1BJQl9NQVhfQkUsIFxsaW5rIEZUREZfQkVFeHBvbmVudCBcZW5kbGluaywgVGhlIG1heGltdW0gYmFja29mZiBleHBvbmVudAorICogLSBGVERGX1BJQl9NQVhfQ1NNQV9CQUNLT0ZGUywgXGxpbmsgRlRERl9TaXplIFxlbmRsaW5rLCBUaGUgbWF4aW11bSBudW1iZXIgb2YgYmFja29mZnMKKyAqIC0gRlRERl9QSUJfTUFYX0ZSQU1FX1RPVEFMX1dBSVRfVElNRSwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSBtYXhpbXVtIHRpbWUgaW4gc3ltYm9scyB0aGF0IFJYIGlzIE9OIGFmdGVyIHRoYXQgYSBmcmFtZSBpcyByZWNlaXZlZCB3aXRoIEZQIHNldC4KKyAqIC0gRlRERl9QSUJfTUFYX0ZSQU1FX1JFVFJJRVMsIFxsaW5rIEZUREZfU2l6ZSBcZW5kbGluaywgVGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lIHJldHJpZXMKKyAqIC0gRlRERl9QSUJfTUlOX0JFLCBcbGluayBGVERGX0JFRXhwb25lbnQgXGVuZGxpbmssIFRoZSBtaW5pbXVtIGJhY2tvZmYgZXhwb25lbnQKKyAqIC0gRlRERl9QSUJfTElGU19QRVJJT0QsIFxsaW5rIEZUREZfUGVyaW9kIFxlbmRsaW5rLCBUaGUgbG9uZyBJRlMgcGVyaW9kIGluIG51bWJlciBvZiBzeW1ib2xzLCBSZWFkIG9vbmx5CisgKiAtIEZUREZfUElCX1NJRlNfUEVSSU9ELCBcbGluayBGVERGX1BlcmlvZCBcZW5kbGluaywgVGhlIHNob3J0IElGUyBwZXJpb2QgaW4gbnVtYmVyIG9mIHN5bWJvbHMsIFJlYWQgb29ubHkKKyAqIC0gRlRERl9QSUJfUEFOX0lELCBcbGluayBGVERGX1BBTklkIFxlbmRsaW5rLCBUaGUgUEFOIElEIG9mIHRoZSBkZXZpY2UKKyAqIC0gRlRERl9QSUJfUFJPTUlTQ1VPVVNfTU9ERSwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0aW9uIHdoZXRoZXIgdGhlIHByb21pc2N1b3VzIGlzIGVuYWJsZSBvciBub3QKKyAqIC0gRlRERl9QSUJfUkVTUE9OU0VfV0FJVF9USU1FLCBcbGluayBGVERGX1NpemUgXGVuZGxpbmssIFRoZSBtYXhpbXVtIHRpbWUgaW4gYUJhc2VTdXBlckZyYW1lUGVyaW9kJ3MgKDk2MCBzeW1ib2xzKSB0aGF0IGlzIHdhaXRlZCBmb3IgYSBjb21tYW5kIGZyYW1lIHJlc3BvbnNlCisgKiAtIEZUREZfUElCX1JYX09OX1dIRU5fSURMRSwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0aW9uIHdoZXRoZXIgdGhlIHJlY2VpdmVyIG11c3QgYmUgb24gd2hlbiBpZGxlCisgKiAtIEZUREZfUElCX1NFQ1VSSVRZX0VOQUJMRUQsIFxsaW5rIEZUREZfQm9vbGVhbiBcZW5kbGluaywgSW5kaWNhdGlvbiB3aGV0aGVyIHRoZSBzZWN1cml0eSBpcyBlbmFibGVkCisgKiAtIEZUREZfUElCX1NIT1JUX0FERFJFU1MsIFxsaW5rIEZUREZfU2hvcnRBZGRyZXNzIFxlbmRsaW5rLCBUaGUgc2hvcnQgYWRkcmVzcyBvZiB0aGUgZGV2aWNlCisgKiAtIEZUREZfUElCX1NZTkNfU1lNQk9MX09GRlNFVCwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSBvZmZzZXQgaW4gc3ltYm9scyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBmcmFtZSBhbmQgdGhhdCB0aGUgdGltZXN0YW1wIGlzIHRha2VuCisgKiAtIEZUREZfUElCX1RJTUVTVEFNUF9TVVBQT1JURUQsIFxsaW5rIEZUREZfQm9vbGVhbiBcZW5kbGluaywgSW5kaWNhdGlvbiB3aGV0aGVyIHRpbWVzdGFtcGluZyBpcyBzdXBwb3J0ZWQKKyAqIC0gRlRERl9QSUJfVFJBTlNBQ1RJT05fUEVSU0lTVEVOQ0VfVElNRSwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSBtYXhpbXVtIHRpbWUgaW4gYUJhc2VTdXBlckZyYW1lUGVyaW9kJ3MgKDk2MCBzeW1ib2xzKSB0aGF0IGluZGlyZWN0IGRhdGEgcmVxdWVzdHMgYXJlIHF1ZXVlZAorICogLSBGVERGX1BJQl9FTkhfQUNLX1dBSVRfRFVSQVRJT04sIFxsaW5rIEZUREZfUGVyaW9kIFxlbmRsaW5rLCBUaGUgbWF4aW11bSB0aW1lIGluIHN5bWJvbHMgdGhhdCBpcyB3YWl0ZWQgZm9yIGFuIGVuaGFuY2VkIGFjaworICogLSBGVERGX1BJQl9JTVBMSUNJVF9CUk9BRENBU1QsIFxsaW5rIEZUREZfQm9vbGVhbiBcZW5kbGluaywgSW5kaWNhdGlvbiB3aGV0aGVyIGZyYW1lcyB3aXRob3V0IGEgZGVzdGluYXRpb24gUEFOIGFyZSB0cmVhdGVkIGFzIGJyb2FkY2FzdHMKKyAqIC0gRlRERl9QSUJfRElTQ09OTkVDVF9USU1FLCBcbGluayBGVERGX1BlcmlvZCBcZW5kbGluaywgVGhlIHRpbWUgaW4gdGltZXNsb3RzIHRoYXQgZGlzYXNzb2N0YXRlIGZyYW1lcyBhcmUgc2VuZCBiZWZvcmUgZGlzY29ubmVjdGluZworICogLSBGVERGX1BJQl9KT0lOX1BSSU9SSVRZLCBcbGluayBGVERGX1ByaW9yaXR5IFxlbmRsaW5rLCBUaGUgam9pbiBwcmlvcml0eQorICogLSBGVERGX1BJQl9BU04sIFxsaW5rIEZUREZfQVNOIFxlbmRsaW5rLCBUaGUgY3VycmVudCBBU04KKyAqIC0gRlRERl9QSUJfU0xPVEZSQU1FX1RBQkxFLCBcbGluayBGVERGX1Nsb3RmcmFtZVRhYmxlIFxlbmRsaW5rLCBUaGUgc2xvdGZyYW1lIHRhYmxlLCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfTElOS19UQUJMRSwgXGxpbmsgRlRERl9MaW5rVGFibGUgXGVuZGxpbmssIFRoZSBsaW5rIHRhYmxlLCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfVElNRVNMT1RfVEVNUExBVEUsIFxsaW5rIEZUREZfVGltZXNsb3RUZW1wbGF0ZSBcZW5kbGluaywgVGhlIGN1cnJlbnQgdGltZXNsb3QgdGVtcGxhdGUKKyAqIC0gRlRERl9QSUJfSE9QUElOR1NFUVVFTkNFX0lELCBcbGluayBGVERGX0hvcHBpbmdTZXF1ZW5jZUlkIFxlbmRsaW5rLCBUaGUgSUQgb2YgdGhlIGN1cnJlbnQgaG9wcGluZyBzZXF1ZW5jZQorICogLSBGVERGX1BJQl9DSEFOTkVMX1BBR0UsIFxsaW5rIEZUREZfQ2hhbm5lbFBhZ2UgXGVuZGxpbmssIFRoZSBjdXJyZW50IGNoYW5uZWwgcGFnZQorICogLSBGVERGX1BJQl9IT1BQSU5HX1NFUVVFTkNFX0xFTkdUSCwgXGxpbmsgRlRERl9MZW5ndGggXGVuZGxpbmssIExlbmd0aCBvZiB0aGUgY3VycmVudCBob3BwaW5nIHNlcXVlbmNlCisgKiAtIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTElTVCwgXGxpbmsgRlRERl9DaGFubmVsTnVtYmVyIFxlbmRsaW5rLCBIb3BwaW5nIHNlcXVlbmNlCisgKiAtIEZUREZfUElCX0NVUlJFTlRfSE9QLCBcbGluayBGVERGX0xlbmd0aCBcZW5kbGluaywgVGhlIGN1cnJlbnQgaG9wCisgKiAtIEZUREZfUElCX0NTTF9QRVJJT0QsIFxsaW5rIEZUREZfUGVyaW9kIFxlbmRsaW5rLCBUaGUgQ1NMIHNhbXBsZSBwZXJpb2QgaW4gdW5pdHMgb2YgMTAgc3ltYm9scworICogLSBGVERGX1BJQl9DU0xfTUFYX1BFUklPRCwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSBtYXhpbXVtIENTTCBzYW1wbGUgcGVyaW9kIG9mIGRldmljZXMgaW4gdGhlIFBBTiBpbiB1bml0cyBvZiAxMCBzeW1ib2xzCisgKiAtIEZUREZfUElCX0NTTF9DSEFOTkVMX01BU0ssIFxsaW5rIEZUREZfQml0bWFwMzIgXGVuZGxpbmssIEJpdG1hcHBlZCBsaXN0IG9mIGNoYW5uZWxzIHRvIGJlIHNhbXBsZSBpbiBDU0wgbW9kZQorICogLSBGVERGX1BJQl9DU0xfRlJBTUVfUEVORElOR19XQUlUX1QsIFxsaW5rIEZUREZfUGVyaW9kIFxlbmRsaW5rLCBUaGUgbWF4aW11bSB0aW1lIGluIHN5bWJvbHMgdGhhdCBSWCBpcyBPTiBhZnRlciB0aGF0IGEgZnJhbWUgaXMgcmVjZWl2ZWQgd2l0aCBGUCBzZXQgaW4gQ1NMIG1vZGUuCisgKiAtIEZUREZfUElCX1BFUkZPUk1BTkNFX01FVFJJQ1MsIFxsaW5rIEZUREZfUGVyZm9ybWFuY2VNZXRyaWNzIFxlbmRsaW5rLCBUaGUgcGVyZm9ybWFuY2UgbWV0cmljcywgUmVhZCBvbmx5CisgKiAtIEZUREZfUElCX0VCX0lFX0xJU1QsIFxsaW5rIEZUREZfSUVMaXN0IFxlbmRsaW5rLCBQYXlsb2FkIElFIGxpc3QgdG8gYmUgYWRkZWQgdG8gYW4gZW5oYW5jZWQgYmVhY29uCisgKiAtIEZUREZfUElCX0VCU04sIFxsaW5rIEZUREZfU04gXGVuZGxpbmssIEN1cnJlbnQgZW5oYW5jZWQgYmVhY29uIHNlcXVlbmNlIG51bWJlcgorICogLSBGVERGX1BJQl9FQl9BVVRPX1NBLCBcbGluayBGVERGX0F1dG9TQSBcZW5kbGluaywgU291cmNlIGFkZHJlc3MgbW9kZSBvZiBhdXRvIGdlbmVyYXRlZCBlbmhhbmNlZCBiZWFjb25zCisgKiAtIEZUREZfUElCX0VBQ0tfSUVfTElTVCwgXGxpbmsgRlRERl9JRUxpc3QgXGVuZGxpbmssIFBheWxvYWQgSUUgbGlzdCB0byBiZSBhZGRlZCB0byBhbiBlbmhhbmNlZCBhY2sKKyAqIC0gRlRERl9QSUJfS0VZX1RBQkxFLCBcbGluayBGVERGX0tleVRhYmxlIFxlbmRsaW5rLCBTZWN1cml0eSBrZXkgdGFibGUKKyAqIC0gRlRERl9QSUJfREVWSUNFX1RBQkxFLCBcbGluayBGVERGX0RldmljZVRhYmxlIFxlbmRsaW5rLCBTZWN1cml0eSBkZXZpY2UgdGFibGUKKyAqIC0gRlRERl9QSUJfU0VDVVJJVFlfTEVWRUxfVEFCTEUsIFxsaW5rIEZUREZfU2VjdXJpdHlMZXZlbFRhYmxlIFxlbmRsaW5rLCBTZWN1cml0eSBsZXZlbCB0YWJsZQorICogLSBGVERGX1BJQl9GUkFNRV9DT1VOVEVSLCBcbGluayBGVERGX0ZyYW1lQ291bnRlciBcZW5kbGluaywgQ3VycmVudCBzZWN1cml0eSBmcmFtZSBjb3VudGVyCisgKiAtIEZUREZfUElCX01UX0RBVEFfU0VDVVJJVFlfTEVWRUwsIFxsaW5rIEZUREZfU2VjdXJpdHlMZXZlbCBcZW5kbGluaywgU2VjdXJpdHkgbGV2ZWwgZm9yIGF1dG8gZ2VuZXJhdGVkIGRhdGEgZnJhbWVzCisgKiAtIEZUREZfUElCX01UX0RBVEFfS0VZX0lEX01PREUsIFxsaW5rIEZUREZfS2V5SWRNb2RlIFxlbmRsaW5rLCBTZWN1cml0eSBrZXkgSUQgbW9kZSBmb3IgYXV0byBnZW5lcmF0ZWQgZGF0YSBmcmFtZXMKKyAqIC0gRlRERl9QSUJfTVRfREFUQV9LRVlfU09VUkNFLCBGVERGX09jdGV0WyA4IF0sIFNlY3VyaXR5IGtleSBzb3VyY2UgZm9yIGF1dG8gZ2VuZXJhdGVkIGRhdGEgZnJhbWVzCisgKiAtIEZUREZfUElCX01UX0RBVEFfS0VZX0lOREVYLCBcbGluayBGVERGX0tleUluZGV4IFxlbmRsaW5rLCBTZWN1cml0eSBrZXkgaW5kZXggZm9yIGF1dG8gZ2VuZXJhdGVkIGRhdGEgZnJhbWVzCisgKiAtIEZUREZfUElCX0RFRkFVTFRfS0VZX1NPVVJDRSwgRlRERl9PY3RldFsgOCBdLCBEZWZhdWx0IGtleSBzb3VyY2UKKyAqIC0gRlRERl9QSUJfRlJBTUVfQ09VTlRFUl9NT0RFLCBcbGluayBGVERGX0ZyYW1lQ291bnRlck1vZGUgXGVuZGxpbmssIFNlY3VyaXR5IGZyYW1lIGNvdW50ZXIgbW9kZQorICogLSBGVERGX1BJQl9DU0xfU1lOQ19UWF9NQVJHSU4sIFxsaW5rIEZUREZfUGVyaW9kIFxlbmRsaW5rLCBUaGUgbWFyZ2luIGluIHVuaXQgb2YgMTAgc3ltYm9scyB1c2VkIGJ5IEZUREYgaW4gQ1NMIG1vZGUgaW4gY2FzZSBvZiBhIHN5bmNocm9uaXNlZCB0cmFuc21pc3Npb24KKyAqIC0gRlRERl9QSUJfQ1NMX01BWF9BR0VfUkVNT1RFX0lORk8sIFxsaW5rIEZUREZfUGVyaW9kIFxlbmRsaW5rLCBUaGUgdGltZSBpbiB1bml0IG9mIDEwIHN5bWJvbHMgYWZ0ZXIgd2hpY2ggRlRERiBkaXNjYXJkIHRoZSByZW1vdGUgc3luY2hyb25pc2F0aW9uIGluZm8uCisgKiAtIEZUREZfUElCX1RTQ0hfRU5BQkxFRCwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgVFNDSCBtb2RlIGlzIGVuYWJsZWQgb3Igbm90LCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfTEVfRU5BQkxFRCwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgQ1NMIG1vZGUgaXMgZW5hYmxlZCBvciBub3QKKyAqIC0gRlRERl9QSUJfQ1VSUkVOVF9DSEFOTkVMLCBcbGluayBGVERGX0NoYW5uZWxOdW1iZXIgXGVuZGxpbmssIFRoZSBjdXJyZW50IGNoYW5uZWwgdXNlZCBieSBGVERGCisgKiAtIEZUREZfUElCX0NIQU5ORUxTX1NVUFBPUlRFRCwgXGxpbmsgRlRERl9DaGFubmVsRGVzY3JpcHRvckxpc3QgXGVuZGxpbmssIExpc3Qgb2YgY2hhbm5lbHMgc3VwcG9ydGVkIGJ5IEZUREYKKyAqIC0gRlRERl9QSUJfVFhfUE9XRVJfVE9MRVJBTkNFLCBcbGluayBGVERGX1RYUG93ZXJUb2xlcmFuY2UgXGVuZGxpbmssIFRYIHBvd2VyIHRvbGVyYW5jZQorICogLSBGVERGX1BJQl9UWF9QT1dFUiwgXGxpbmsgRlRERl9EQm0gXGVuZGxpbmssIFRYIHBvd2VyCisgKiAtIEZUREZfUElCX0NDQV9NT0RFLCBcbGluayBGVERGX0NDQU1vZGUgXGVuZGxpbmssIENDQSBtb2RlCisgKiAtIEZUREZfUElCX0NVUlJFTlRfUEFHRSwgXGxpbmsgRlRERl9DaGFubmVsUGFnZSBcZW5kbGluaywgQ3VycmVudCBjaGFubmVsIHBhZ2UKKyAqIC0gRlRERl9QSUJfTUFYX0ZSQU1FX0RVUkFUSU9OLCBcbGluayBGVERGX1BlcmlvZCBcZW5kbGluaywgVGhlIG1heGltdW0gbnVtYmVyIG9mIHN5bWJvbHMgaW4gZnJhbWUsIFJlYWQgb25seQorICogLSBGVERGX1BJQl9TSFJfRFVSQVRJT04sIFxsaW5rIEZUREZfUGVyaW9kIFxlbmRsaW5rLCBTeW5jaHJvbmlzYXRpb24gaGVhZGVyIGxlbmd0aCBpbiBzeW1ib2xzLCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfVFJBRkZJQ19DT1VOVEVSUywgXGxpbmsgRlRERl9UcmFmZmljQ291bnRlcnMgXGVuZGxpbmssIE1pc2NlbGFuZW91cyB0cmFmZmljIGNvdW50ZXJzLCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfTEVfQ0FQQUJMRSwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0ZXMgd2hldGhlciBGVERGIHN1cHBvcnRzIExFIChDU0wpLCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfTExfQ0FQQUJMRSwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0ZXMgd2hldGhlciBGVERGIHN1cHBvcnRzIExMLCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfRFNNRV9DQVBBQkxFLCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRlcyB3aGV0aGVyIEZUREYgc3VwcG9ydHMgRFNNRSwgUmVhZCBvbmx5CisgKiAtIEZUREZfUElCX1JGSURfQ0FQQUJMRSwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0ZXMgd2hldGhlciBGVERGIHN1cHBvcnRzIFJGSUQsIFJlYWQgb25seQorICogLSBGVERGX1BJQl9BTUNBX0NBUEFCTEUsIFxsaW5rIEZUREZfQm9vbGVhbiBcZW5kbGluaywgSW5kaWNhdGVzIHdoZXRoZXIgRlRERiBzdXBwb3J0cyBBTUNBLCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfVFNDSF9DQVBBQkxFLCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRlcyB3aGV0aGVyIEZUREYgc3VwcG9ydHMgRlRERiwgUmVhZCBvbmx5CisgKiAtIEZUREZfUElCX01FVFJJQ1NfQ0FQQUJMRSwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0ZXMgd2hldGhlciBGVERGIHN1cHBvcnRzIG1ldHJpY3MsIFJlYWQgb25seQorICogLSBGVERGX1BJQl9SQU5HSU5HX1NVUFBPUlRFRCwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0ZXMgd2hldGhlciBGVERGIHN1cHBvcnRzIHJhbmdpbmcsIFJlYWQgb25seQorICogLSBGVERGX1BJQl9LRUVQX1BIWV9FTkFCTEVELCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRlcyB3aGV0aGVyIHRoZSBQSFkgbXVzdCBiZSBrZXB0IGVuYWJsZWQKKyAqIC0gRlRERl9QSUJfTUVUUklDU19FTkFCTEVELCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRlcyB3aGV0aGVyIG1ldHJpY3MgYXJlIGVuYWJsZWQgb3Igbm90CisgKiAtIEZUREZfUElCX0JFQUNPTl9BVVRPX1JFU1BPTkQsIFxsaW5rIEZUREZfQm9vbGVhbiBcZW5kbGluaywgSW5kaWNhdGVzIHdoZXRoZXIgRlRERiBtdXN0IHNlbmQgYXV0b21hdGljYWxseSBhIGJlYWNvbiBhdCBhIEJFQ0FPTl9SRVFVRVNUIGNvbW1hbmQgZnJhbWUgb3IgbXVzdCBmb3J3YXJkIHRoZSByZXF1ZXN0IHRvIHRoZSBhcHBsaWNhdGlvbiB1c2luZyBGVERGX0JFQUNPTl9SRVFVRVNUX0lORElDQVRJT04uCisgKiAtIEZUREZfUElCX1RTX1NZTkNfQ09SUkVDVF9USFJFU0hPTEQsIFxsaW5rIEZUREZfUGVyaW9kIFxlbmRsaW5rLCBUaGUgbWluaW11bSBUU0NIIHNsb3Qgc3luYyBvZmZzZXQgaW4gbWljcm9zZWNvbmRzIGJlZm9yZSByZXN5bmNpbmcKKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfUElCQXR0cmlidXRlOworLy8gU2VlIFRhYmxlIDUyICJNQUMgUElCIGF0dHJpYnV0ZXMiIG9mIElFRUUgODAyLjE1LjQtMjAxMSBhbmQgSUVFRSA4MDIuMTUuNGUtMjAxMiBmb3IgbW9yZSBkZXRhaWxzCisKKy8vIE5PVEU6IEJlIGNhcmVmdWwgd2l0aCBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgdGhlc2UgUElCIGF0dHJpYnV0ZXMgYmVjYXVzZSBpbml0aWFsaXphdGlvbiBvZiByZWxhdGVkCisvLyAgICAgICByZWdpc3RlcnMgd2lsbCBiZSBkb25lIGluIHRoZSBvcmRlciBkZWZpbmVkIGhlcmUuCisjZGVmaW5lIEZUREZfUElCX0VYVEVOREVEX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRlRERl9QSUJfQUNLX1dBSVRfRFVSQVRJT04gICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGVERGX1BJQl9BU1NPQ0lBVElPTl9QQU5fQ09PUkQgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZUREZfUElCX0FTU09DSUFUSU9OX1BFUk1JVCAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRlRERl9QSUJfQVVUT19SRVFVRVNUICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGVERGX1BJQl9CQVRUX0xJRkVfRVhUICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZUREZfUElCX0JBVFRfTElGRV9FWFRfUEVSSU9EUyAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRlRERl9QSUJfQkVBQ09OX1BBWUxPQUQgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGVERGX1BJQl9CRUFDT05fUEFZTE9BRF9MRU5HVEggICAgICAgICAgICAgICA5CisjZGVmaW5lIEZUREZfUElCX0JFQUNPTl9PUkRFUiAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEZUREZfUElCX0JFQUNPTl9UWF9USU1FICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEZUREZfUElCX0JTTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZUREZfUElCX0NPT1JEX0VYVEVOREVEX0FERFJFU1MgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEZUREZfUElCX0NPT1JEX1NIT1JUX0FERFJFU1MgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEZUREZfUElCX0RTTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEZUREZfUElCX0dUU19QRVJNSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZUREZfUElCX01BWF9CRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEZUREZfUElCX01BWF9DU01BX0JBQ0tPRkZTICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEZUREZfUElCX01BWF9GUkFNRV9UT1RBTF9XQUlUX1RJTUUgICAgICAgICAgIDE5CisjZGVmaW5lIEZUREZfUElCX01BWF9GUkFNRV9SRVRSSUVTICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEZUREZfUElCX01JTl9CRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIEZUREZfUElCX0xJRlNfUEVSSU9EICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEZUREZfUElCX1NJRlNfUEVSSU9EICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEZUREZfUElCX1BBTl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZUREZfUElCX1BST01JU0NVT1VTX01PREUgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIEZUREZfUElCX1JFU1BPTlNFX1dBSVRfVElNRSAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIEZUREZfUElCX1JYX09OX1dIRU5fSURMRSAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIEZUREZfUElCX1NFQ1VSSVRZX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEZUREZfUElCX1NIT1JUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIEZUREZfUElCX1NVUEVSRlJBTUVfT1JERVIgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIEZUREZfUElCX1NZTkNfU1lNQk9MX09GRlNFVCAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEZUREZfUElCX1RJTUVTVEFNUF9TVVBQT1JURUQgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZUREZfUElCX1RSQU5TQUNUSU9OX1BFUlNJU1RFTkNFX1RJTUUgICAgICAgIDMzCisjZGVmaW5lIEZUREZfUElCX1RYX0NPTlRST0xfQUNUSVZFX0RVUkFUSU9OICAgICAgICAgIDM0CisjZGVmaW5lIEZUREZfUElCX1RYX0NPTlRST0xfUEFVU0VfRFVSQVRJT04gICAgICAgICAgIDM1CisjZGVmaW5lIEZUREZfUElCX0VOSF9BQ0tfV0FJVF9EVVJBVElPTiAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIEZUREZfUElCX0lNUExJQ0lUX0JST0FEQ0FTVCAgICAgICAgICAgICAgICAgIDM3CisjZGVmaW5lIEZUREZfUElCX1NJTVBMRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDM4CisjZGVmaW5lIEZUREZfUElCX0RJU0NPTk5FQ1RfVElNRSAgICAgICAgICAgICAgICAgICAgIDM5CisjZGVmaW5lIEZUREZfUElCX0pPSU5fUFJJT1JJVFkgICAgICAgICAgICAgICAgICAgICAgIDQwCisjZGVmaW5lIEZUREZfUElCX0FTTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxCisjZGVmaW5lIEZUREZfUElCX05PX0hMX0JVRkZFUlMgICAgICAgICAgICAgICAgICAgICAgIDQyCisjZGVmaW5lIEZUREZfUElCX1NMT1RGUkFNRV9UQUJMRSAgICAgICAgICAgICAgICAgICAgIDQzCisjZGVmaW5lIEZUREZfUElCX0xJTktfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0CisjZGVmaW5lIEZUREZfUElCX1RJTUVTTE9UX1RFTVBMQVRFICAgICAgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIEZUREZfUElCX0hPUFBJTkdTRVFVRU5DRV9JRCAgICAgICAgICAgICAgICAgIDQ2CisjZGVmaW5lIEZUREZfUElCX0NIQU5ORUxfUEFHRSAgICAgICAgICAgICAgICAgICAgICAgIDQ3CisjZGVmaW5lIEZUREZfUElCX05VTUJFUl9PRl9DSEFOTkVMUyAgICAgICAgICAgICAgICAgIDQ4CisjZGVmaW5lIEZUREZfUElCX1BIWV9DT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgIDQ5CisjZGVmaW5lIEZUREZfUElCX0VYVEVOVEVEX0JJVE1BUCAgICAgICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTEVOR1RIICAgICAgICAgICAgIDUxCisjZGVmaW5lIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTElTVCAgICAgICAgICAgICAgIDUyCisjZGVmaW5lIEZUREZfUElCX0NVUlJFTlRfSE9QICAgICAgICAgICAgICAgICAgICAgICAgIDUzCisjZGVmaW5lIEZUREZfUElCX0RXRUxMX1RJTUUgICAgICAgICAgICAgICAgICAgICAgICAgIDU0CisjZGVmaW5lIEZUREZfUElCX0NTTF9QRVJJT0QgICAgICAgICAgICAgICAgICAgICAgICAgIDU1CisjZGVmaW5lIEZUREZfUElCX0NTTF9NQVhfUEVSSU9EICAgICAgICAgICAgICAgICAgICAgIDU2CisjZGVmaW5lIEZUREZfUElCX0NTTF9DSEFOTkVMX01BU0sgICAgICAgICAgICAgICAgICAgIDU3CisjZGVmaW5lIEZUREZfUElCX0NTTF9GUkFNRV9QRU5ESU5HX1dBSVRfVCAgICAgICAgICAgIDU4CisjZGVmaW5lIEZUREZfUElCX0xPV19FTkVSR1lfU1VQRVJGUkFNRV9TVVBQT1JURUQgICAgIDU5CisjZGVmaW5lIEZUREZfUElCX0xPV19FTkVSR1lfU1VQRVJGUkFNRV9TWU5DX0lOVEVSVkFMIDYwCisjZGVmaW5lIEZUREZfUElCX1BFUkZPUk1BTkNFX01FVFJJQ1MgICAgICAgICAgICAgICAgIDYxCisjZGVmaW5lIEZUREZfUElCX1VTRV9FTkhBTkNFRF9CRUFDT04gICAgICAgICAgICAgICAgIDYyCisjZGVmaW5lIEZUREZfUElCX0VCX0lFX0xJU1QgICAgICAgICAgICAgICAgICAgICAgICAgIDYzCisjZGVmaW5lIEZUREZfUElCX0VCX0ZJTFRFUklOR19FTkFCTEVEICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIEZUREZfUElCX0VCU04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1CisjZGVmaW5lIEZUREZfUElCX0VCX0FVVE9fU0EgICAgICAgICAgICAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIEZUREZfUElCX0VBQ0tfSUVfTElTVCAgICAgICAgICAgICAgICAgICAgICAgIDY3CisjZGVmaW5lIEZUREZfUElCX0tFWV9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4CisjZGVmaW5lIEZUREZfUElCX0RFVklDRV9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDY5CisjZGVmaW5lIEZUREZfUElCX1NFQ1VSSVRZX0xFVkVMX1RBQkxFICAgICAgICAgICAgICAgIDcwCisjZGVmaW5lIEZUREZfUElCX0ZSQU1FX0NPVU5URVIgICAgICAgICAgICAgICAgICAgICAgIDcxCisjZGVmaW5lIEZUREZfUElCX01UX0RBVEFfU0VDVVJJVFlfTEVWRUwgICAgICAgICAgICAgIDcyCisjZGVmaW5lIEZUREZfUElCX01UX0RBVEFfS0VZX0lEX01PREUgICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIEZUREZfUElCX01UX0RBVEFfS0VZX1NPVVJDRSAgICAgICAgICAgICAgICAgIDc0CisjZGVmaW5lIEZUREZfUElCX01UX0RBVEFfS0VZX0lOREVYICAgICAgICAgICAgICAgICAgIDc1CisjZGVmaW5lIEZUREZfUElCX0RFRkFVTFRfS0VZX1NPVVJDRSAgICAgICAgICAgICAgICAgIDc2CisjZGVmaW5lIEZUREZfUElCX1BBTl9DT09SRF9FWFRFTkRFRF9BRERSRVNTICAgICAgICAgIDc3CisjZGVmaW5lIEZUREZfUElCX1BBTl9DT09SRF9TSE9SVF9BRERSRVNTICAgICAgICAgICAgIDc4CisjZGVmaW5lIEZUREZfUElCX0ZSQU1FX0NPVU5URVJfTU9ERSAgICAgICAgICAgICAgICAgIDc5CisjZGVmaW5lIEZUREZfUElCX0NTTF9TWU5DX1RYX01BUkdJTiAgICAgICAgICAgICAgICAgIDgwCisjZGVmaW5lIEZUREZfUElCX0NTTF9NQVhfQUdFX1JFTU9URV9JTkZPICAgICAgICAgICAgIDgxCisjZGVmaW5lIEZUREZfUElCX1RTQ0hfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgIDgyCisjZGVmaW5lIEZUREZfUElCX0xFX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgICAgICAgIDgzCisKKy8vIFNlZSBUYWJsZSA3MSAiUEhZIFBJQiBhdHRyaWJ1dGVzIiBvZiBJRUVFIDgwMi4xNS40LTIwMTEgZm9yIG1vcmUgZGV0YWlscworI2RlZmluZSBGVERGX1BJQl9DVVJSRU5UX0NIQU5ORUwgICAgICAgICAgIDg0CisjZGVmaW5lIEZUREZfUElCX0NIQU5ORUxTX1NVUFBPUlRFRCAgICAgICAgODUKKyNkZWZpbmUgRlRERl9QSUJfVFhfUE9XRVJfVE9MRVJBTkNFICAgICAgICA4NgorI2RlZmluZSBGVERGX1BJQl9UWF9QT1dFUiAgICAgICAgICAgICAgICAgIDg3CisjZGVmaW5lIEZUREZfUElCX0NDQV9NT0RFICAgICAgICAgICAgICAgICAgODgKKyNkZWZpbmUgRlRERl9QSUJfQ1VSUkVOVF9QQUdFICAgICAgICAgICAgICA4OQorI2RlZmluZSBGVERGX1BJQl9NQVhfRlJBTUVfRFVSQVRJT04gICAgICAgIDkwCisjZGVmaW5lIEZUREZfUElCX1NIUl9EVVJBVElPTiAgICAgICAgICAgICAgOTEKKworI2RlZmluZSBGVERGX1BJQl9UUkFGRklDX0NPVU5URVJTICAgICAgICAgIDkyCisjZGVmaW5lIEZUREZfUElCX0xFX0NBUEFCTEUgICAgICAgICAgICAgICAgOTMKKyNkZWZpbmUgRlRERl9QSUJfTExfQ0FQQUJMRSAgICAgICAgICAgICAgICA5NAorI2RlZmluZSBGVERGX1BJQl9EU01FX0NBUEFCTEUgICAgICAgICAgICAgIDk1CisjZGVmaW5lIEZUREZfUElCX1JGSURfQ0FQQUJMRSAgICAgICAgICAgICAgOTYKKyNkZWZpbmUgRlRERl9QSUJfQU1DQV9DQVBBQkxFICAgICAgICAgICAgICA5NworI2RlZmluZSBGVERGX1BJQl9NRVRSSUNTX0NBUEFCTEUgICAgICAgICAgIDk4CisjZGVmaW5lIEZUREZfUElCX1JBTkdJTkdfU1VQUE9SVEVEICAgICAgICAgOTkKKyNkZWZpbmUgRlRERl9QSUJfS0VFUF9QSFlfRU5BQkxFRCAgICAgICAgICAxMDAKKyNkZWZpbmUgRlRERl9QSUJfTUVUUklDU19FTkFCTEVEICAgICAgICAgICAxMDEKKyNkZWZpbmUgRlRERl9QSUJfQkVBQ09OX0FVVE9fUkVTUE9ORCAgICAgICAxMDIKKyNkZWZpbmUgRlRERl9QSUJfVFNDSF9DQVBBQkxFICAgICAgICAgICAgICAxMDMKKyNkZWZpbmUgRlRERl9QSUJfVFNfU1lOQ19DT1JSRUNUX1RIUkVTSE9MRCAxMDQKKworLyogUHJvcHJpZXRhcnkgUElCLiAqLworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyNkZWZpbmUgRlRERl9QSUJfQk9fSVJRX1RIUkVTSE9MRCAgICAgICAgICAxMDUKKyNkZWZpbmUgRlRERl9QSUJfUFRJX0NPTkZJRyAgICAgICAgICAgICAgICAxMDYKKyNlbmRpZiAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BICovCisKKy8vIFRvdGFsIG51bWJlciBvZiBQSUIgYXR0cmlidXRlcworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyNkZWZpbmUgRlRERl9OUl9PRl9QSUJfQVRUUklCVVRFUyAgICAgICAgICAxMDYKKyNlbHNlIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKyNkZWZpbmUgRlRERl9OUl9PRl9QSUJfQVRUUklCVVRFUyAgICAgICAgICAxMDQKKyNlbmRpZiAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BICovCisKKy8qIERlZmF1bHQgdmFsdWVzICovCisjaWZuZGVmIEZUREZfQk9fSVJRX1RIUkVTSE9MRAorI2RlZmluZSBGVERGX0JPX0lSUV9USFJFU0hPTEQgICAgICAgICAgICAgICAweGZmCisjZW5kaWYKKworI2lmIEZUREZfREJHX0JVU19FTkFCTEUKKy8qKgorICogXGJyaWVmIERlYnVnIGJ1cyBtb2RlLgorICoKKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfRGJnTW9kZTsKKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBkZWJ1ZyBzaWduYWxzCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKworLyoqCisgKiBcYnJpZWYgTGVnYWN5IGRlYnVnIG1vZGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDcgPSBlZF9yZXF1ZXN0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ID0gZ2VuX2lycQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgPSBwaHlfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSA9IHJ4X3NvZgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCA9IHJ4X2VvZgorICovCisjZGVmaW5lIEZUREZfREJHX0xFR0FDWSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCisKKy8qKgorICogXGJyaWVmIENsb2NrcyBhbmQgcmVzZXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDctMyA9ICIwMDAwMCIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IGxwX2NsayBkaXZpZGUgYnkgMgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gbWFjX2NsayBkaXZpZGUgYnkgMgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gaGNsayBkaXZpZGVkIGJ5IDIKKyAqLworI2RlZmluZSBGVERGX0RCR19DTEtfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMgorCisvKioKKyAqIFxicmllZiBSeCBwaHkgc2lnbmFscworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfZW5hYmxlIHRvd2FyZHMgdGhlIHJ4X3BpcGVsaW5lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSByeF9zb2YgZnJvbSBwaHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUtMiA9IHJ4X2RhdGEgZnJvbSBwaHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IHJ4X2VvZiB0byBwaHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X3NvZiBldmVudCBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqLworI2RlZmluZSBGVERGX0RCR19SWF9QSFlfU0lHTkFMUyAgICAgICAgICAgICAgICAgMHgxMAorCisvKioKKyAqIFxicmllZiBSeCBzb2YgYW5kIGxlbmd0aAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfc29mCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2LTAgPSByeF9tYWNfbGVuZ3RoIGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICovCisjZGVmaW5lIEZUREZfREJHX1JYX1NPRl9BTkRfTEVOR1RIICAgICAgICAgICAgICAweDExCisKKy8qKgorICogXGJyaWVmIFJ4IG1hYyB0aW1pbmcgb3V0cHV0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBFbmFibGUgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBTb3AgICAgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSBFb3AgICAgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ICAgPSBDcmMgICAgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzICAgPSBFcnIgICAgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSBEcm9wICAgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSBGb3J3YXJkIGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfc29mCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfUlhfTUFDX1RJTUlOR19PVVRQVVQgICAgICAgICAgIDB4MTIKKworLyoqCisgKiBcYnJpZWYgUnggbWFjIGZyYW1lIHBhcnNlciBvdXRwdXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IEVuYWJsZSBmcm9tIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IFNvcCAgICBmcm9tICBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSBFb3AgICAgZnJvbSAgbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gQ3JjICAgIGZyb20gIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IEVyciAgICBmcm9tICBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSBEcm9wICAgZnJvbSAgbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gRm9yd2FyZCBmcm9tIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X3NvZgorICovCisjZGVmaW5lIEZUREZfREJHX1JYX01BQ19GUkFNRV9QQVJTRVJfT1VUUFVUICAgICAweDEzCisKKy8qKgorICogXGJyaWVmIFJ4IHN0YXR1cyB0byBVbWFjCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSByeF9mcmFtZV9zdGF0X3VtYWMuY3JjMTZfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5yZXNfZnJtX3R5cGVfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5yZXNfZnJtX3ZlcnNpb25fZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5kcGFuaWRfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5kYWRkcl9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gcnhfZnJhbWVfc3RhdF91bWFjLnNwYW5pZF9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gcnhfZnJhbWVfc3RhdF91bWFjLmlzcGFuX2Nvb3JkX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSByeF9zb2YKKyAqLworI2RlZmluZSBGVERGX0RCR19SWF9TVEFUVVNfVE9fVU1BQyAgICAgICAgICAgICAgMHgxNAorCisvKioKKyAqIFxicmllZiBSeCBzdGF0dXMgdG8gbG1hYworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfZnJhbWVfc3RhdC5wYWNrZXRfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHJ4X2ZyYW1lX3N0YXQucnhfc29mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHJ4X2ZyYW1lX3N0YXQucnhfZW9mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgICA9IHJ4X2ZyYW1lX3N0YXQud2FrZXVwX2ZyYW1lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzLTEgPSByeF9mcmFtZV9zdGF0LmZyYW1lX3R5cGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X2ZyYW1lX3N0YXQucnhfc3Fucl92YWxpZAorICovCisjZGVmaW5lIEZUREZfREJHX1JYX1NUQVRVU19UT19MTUFDICAgICAgICAgICAgICAweDE1CisKKy8qKgorICogXGJyaWVmIFJ4IGJ1ZmZlciBjb250cm9sCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3LTQgPSBwcm92X2Zyb21fc3dpby5yeF9yZWFkX2J1Zl9wdHIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMtMCA9IHN0YXRfdG9fc3dpby5yeF93cml0ZV9idWZfcHRyCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfUlhfQlVGRkVSX0NPTlRST0wgICAgICAgICAgICAgIDB4MTYKKworLyoqCisgKiBcYnJpZWYgUnggaW50ZXJydXB0cworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gc3RhdF90b19zd2lvLnJ4X2J1Zl9hdmFpbF9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBzdGF0X3RvX3N3aW8ucnhfYnVmX2Z1bGwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHN0YXRfdG9fc3dpby5yeF9idWZfb3ZlcmZsb3dfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gc3RhdF90b19zd2lvLnJ4X3NvZl9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzICAgPSBzdGF0X3RvX3N3aW8ucnhieXRlX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IHJ4X2ZyYW1lX2N0cmwucnhfZW5hYmxlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSByeF9lb2YKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X3NvZgorICovCisjZGVmaW5lIEZUREZfREJHX1JYX0lOVEVSUlVQVFMgICAgICAgICAgICAgICAgICAweDE3CisKKy8qKgorICogXGJyaWVmIE1BQyBmcmFtZSBwYXJzZXIgZXZlbnRzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3LTMgPQorICogICAgICAgICAgICAgICAgICAgICAgUHJ0IHN0YXRlbWVudHMgbWFjIGZyYW1lIHBhcnNlcgorICogICAgICAgICAgICAgICAgICAgICAgMCBSZXNldAorICogICAgICAgICAgICAgICAgICAgICAgMSBNdWx0aXB1cnBvc2UgZnJhbWUgd2l0aCBubyBkZXN0aW5hdGlvbiBQQU4gSUQgYW5kIG1hY0ltcGxpY2l0QnJvYWRjYXN0IGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIGFuZCBub3QgUEFOIGNvb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDIgTXVsdGlwdXJwb3NlIGZyYW1lIHdpdGggbm8gZGVzdGluYXRpb24gYWRkcmVzcyBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgYW5kIG5vdCBQQU4gY29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMyBSWCB1bnN1cHBvcnRlZCBmcmFtZSB0eXBlIGRldGVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICA0IFJYIG5vbiBCZWFjb24gZnJhbWUgZGV0ZWN0ZWQgYW5kIGRyb3BwZWQgaW4gUnhCZWFjb25Pbmx5IG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDUgUlggZnJhbWUgcGFzc2VkIGR1ZSB0byBtYWNBbHdheXNQYXNzRnJtVHlwZSBzZXQKKyAqICAgICAgICAgICAgICAgICAgICAgIDYgUlggdW5zdXBwb3J0ZWQgZGFfbW9kZSA9IDAxIGZvciBmcmFtZV92ZXJzaW9uIDB4MC0gZGV0ZWN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDcgUlggdW5zdXBwb3J0ZWQgc2FfbW9kZSA9IDAxIGZvciBmcmFtZV92ZXJzaW9uIDB4MC0gZGV0ZWN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDggRGF0YSBvciBjb21tYW5kIGZyYW1lIHdpdGggbm8gZGVzdGluYXRpb24gUEFOIElEIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdAorICogICAgICAgICAgICAgICAgICAgICAgICBpcyBmYWxzZSBhbmQgbm90IFBBTiBjb29yZGluYXRvciBkcm9wcGVkCisgKiAgICAgICAgICAgICAgICAgICAgICA5IERhdGEgb3IgY29tbWFuZCBmcmFtZSB3aXRoIG5vIGRlc3RpbmF0aW9uIGFkZHJlc3MgYW5kIG1hY0ltcGxpY2l0QnJvYWRjYXN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZhbHNlIGFuZCBub3QgUEFOIGNvb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDEwIFJYIHVuc3VwcG9ydGVkIGZyYW1lX3ZlcnNpb24gZGV0ZWN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDExIE11bHRpcHVycG9zZSBmcmFtZSB3aXRoIG5vIGRlc3RpbmF0aW9uIFBBTiBJRCBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIGFuZCBub3QgUEFOIGNvb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDEyIE11bHRpcHVycG9zZSBmcmFtZSB3aXRoIG5vIGRlc3RpbmF0aW9uIGFkZHJlc3MgYW5kIG1hY0ltcGxpY2l0QnJvYWRjYXN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmYWxzZSBhbmQgbm90IFBBTiBjb29yZGluYXRvciBkcm9wcGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxMyBSWCB1bnN1cHBvcnRlZCBmcmFtZV92ZXJzaW9uIGRldGVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxNCBSWCBEZXN0aW5hdGlvbiBQQU4gSWQgY2hlY2sgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxNSBSWCBEZXN0aW5hdGlvbiBhZGRyZXNzICgxIGJ5dGUpIGNoZWNrIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTYgUlggRGVzdGluYXRpb24gYWRkcmVzcyAoMiBieXRlKSBjaGVjayBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE3IFJYIERlc3RpbmF0aW9uIGFkZHJlc3MgKDggYnl0ZSkgY2hlY2sgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxOCBSWCBTb3VyY2UgUEFOIElkIGNoZWNrIGZvciBCZWFjb24gZnJhbWVzIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTkgUlggU291cmNlIFBBTiBJZCBjaGVjayBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDIwIEF1eGlsaWFyeSBTZWN1cml0eSBIZWFkZXIgc2VjdXJpdHkgY29udHJvbCB3b3JkIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAyMSBBdXhpbGlhcnkgU2VjdXJpdHkgSGVhZGVyIHVuc3VwcG9ydGVkX2xlZ2FjeSByZWNlaXZlZCBmcmFtZV92ZXJzaW9uIDAwCisgKiAgICAgICAgICAgICAgICAgICAgICAyMiBBdXhpbGlhcnkgU2VjdXJpdHkgSGVhZGVyIHVuc3VwcG9ydGVkX2xlZ2FjeSBzZWN1cml0eSBmcmFtZV92ZXJzaW9uIDExCisgKiAgICAgICAgICAgICAgICAgICAgICAyMyBBdXhpbGlhcnkgU2VjdXJpdHkgSGVhZGVyIGZyYW1lIGNvdW50ZXIgZmllbGQgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDI0IEF1eGlsaWFyeSBTZWN1cml0eSBIZWFkZXIgS2V5IGlkZW50aWZpZXIgZmllbGQgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDI1IEVycm9yZWQgZERlc3RpbmF0aW9uIFdha2V1cCBmcmFtZSBmb3VuZCBzZW5kIHRvIFVNQUMsIG5vdCBpbmRpY2F0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHRvd2FyZHMgTE1BQyBjb250cm9sbGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAyNiBNYWNBbHdheXNQYXNzV2FrZVVwRnJhbWVzID0gMSwgV2FrZXVwIGZyYW1lIGZvdW5kIHNlbmQgdG8gVU1BQywgbm90CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZWQgdG93YXJkcyBMTUFDIGNvbnRyb2xsZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDI3IFdha2V1cCBmcmFtZSBmb3VuZCBzZW5kIHRvIExNQUMgY29udHJvbGxlciBhbmQgVU1BQworICogICAgICAgICAgICAgICAgICAgICAgMjggV2FrZXVwIGZyYW1lIGZvdW5kIHNlbmQgdG8gTE1BQyBjb250cm9sbGVyLCBkcm9wcGVkIHRvd2FyZHMgVU1BQworICogICAgICAgICAgICAgICAgICAgICAgMjkgQ29tbWFuZCBmcmFtZSB3aXRoIGRhdGFfcmVxdWVzdCBjb21tYW5kIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAzMCBDb29yZGluYXRvciByZWFsaWdubWVudCBmcmFtZSByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgMzEgTm90IFVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDItMCA9IGZyYW1lX3R5cGUKKyAqLworI2RlZmluZSBGVERGX0RCR19SWF9NQUNfRlJBTUVfUEFSU0VSX0VWRU5UUyAgICAgMHgxOAorCisvKioKKyAqIFxicmllZiBNQUMgZnJhbWUgcGFyc2VyIHN0YXRlcworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNy00ID0KKyAqICAgICAgICAgICAgICAgICAgICAgIEZyYW1lc3RhdGVzIG1hYyBmcmFtZSBwYXJzZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDAgaWRsZV9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMSBmcl9jdHJsX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAyIGZyX2N0cmxfbG9uZ19zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMyBzZXFfbnJfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDQgZGVzdF9wYW5faWRfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDUgZGVzdF9hZGRyX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA2IHNyY19wYW5faWRfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDcgc3JjX2FkZHJfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDggYXV4X3NlY19oZHJfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDkgaGRyX2llX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAxMCBweWxkX2llX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAxMSBpZ25vcmVfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDEyLTE2ICBOb3QgdXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyAgID0gcnhfbWFjX3NvZl9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyLTAgPSBmcmFtZV90eXBlCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfUlhfTUFDX0ZSQU1FX1BBUlNFUl9TVEFURVMgICAgIDB4MTkKKworLyoqCisgKiBcYnJpZWYgVG9wIGFuZCBib3R0b20gaW50ZXJmYWNlcyB0eCBkYXRhcGF0aAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfbWFjX2xkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHR4X21hY19kcmR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gdHhfZGF0YQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gc3ltYm9sX2VuYQorICovCisjZGVmaW5lIEZUREZfREJHX1RYX1RPUF9CT1RUT01fSU5URVJGQUNFUyAgICAgICAweDIwCisKKy8qKgorICogXGJyaWVmIENvbnRyb2wgc2lnbmFscyBmb3IgdHggZGF0YXBhdGgKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IFR4VHJhbnNwYXJlbnRNb2RlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBjdHJsX2xtYWNfdG9fdHguQ1JDMTZfZW5hCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSBjdHJsX2xtYWNfdG9fdHgudHhfc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgICA9IGN0cmxfbG1hY190b190eC5nZW5fYWNrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyLTEgPSBjdHJsX2xtYWNfdG9fdHgudHhfZnJhbWVfbm1icgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gdHhfdmFsaWQKKyAqLworI2RlZmluZSBGVERGX0RCR19UWF9DT05UUk9MX1NJR05BTFMgICAgICAgICAgICAgMHgyMQorCisvKioKKyAqIFxicmllZiBDb250cm9sIHNpZ25hbHMgZm9yIHdha2V1cCBmcmFtZXMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl93dQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNS0xID0gY3RybF9sbWFjX3RvX3R4Lmdlbl93dV9SWig0IERPV05UTyAwKQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gY3RybF90eF90b19sbWFjLnR4X3J6X3plcm8KKyAqLworI2RlZmluZSBGVERGX0RCR19UWF9XQUtFVVBfQ09OVFJPTF9TSUdOQUxTICAgICAgMHgyMgorCisvKioKKyAqIFxicmllZiBEYXRhIHNpZ25hbHMgZm9yIHdha2V1cCBmcmFtZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gdHhfZGF0YQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gY3RybF90eF90b19sbWFjLnR4X3J6X3plcm8KKyAqLworI2RlZmluZSBGVERGX0RCR19UWF9XQUtVUF9EQVRBX1NJR05BTFMgICAgICAgICAgMHgyMworCisvKioKKyAqIFxicmllZiBEYXRhIGFuZCBjb250cm9sIGFjayBmcmFtZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX2FjaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gdHhfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQtMSA9IHR4X2RhdGEKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHN5bWJvbF9lbmEKKyAqLworI2RlZmluZSBGVERGX0RCR19UWF9BQ0tfICAgICAgICAgICAgICAgICAgICAgICAgMHgyNAorCisKKy8qKgorICogXGJyaWVmIFBIWSBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBwaHlfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gcGh5YXR0cigzIGRvd250byAwKQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gZWRfcmVxdWVzdAorICovCisjZGVmaW5lIEZUREZfREJHX0xNQUNfUEhZX1NJR05BTFMgICAgICAgICAgICAgICAweDMwCisKKy8qKgorICogXGJyaWVmIFBIWSBlbmFibGUgYW5kIGRldGFpbGVkIHN0YXRlIG1hY2hpbmUgaW5mbworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2LTAgPSBwcnQgc3RhdGVtZW50cyBkZXRhaWxlZCBzdGF0ZSBtYWNoaW5lIGluZm8KKyAqICAgICAgICAgICAgICAgICAgICAgIDAgUmVzZXQKKyAqICAgICAgICAgICAgICAgICAgICAgIDEgTUFJTl9TVEFURV9JRExFIFRYX0FDS25vd2xlZGdlbWVudCBmcmFtZSBza2lwIENTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgIDIgTUFJTl9TVEFURV9JRExFIDogV2FrZS1VcCBmcmFtZSByZXNpZGVzIGluIGJ1ZmZlciBubworICogICAgICAgICAgICAgICAgICAgICAgMyBNQUlOX1NUQVRFX0lETEUgOiBUWCBmcmFtZSBpbiBUU0NIIG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDQgTUFJTl9TVEFURV9JRExFIDogVFggZnJhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgIDUgTUFJTl9TVEFURV9JRExFIDogZ290byBTSU5HTEVfQ0NBCisgKiAgICAgICAgICAgICAgICAgICAgICA2IE1BSU5fU1RBVEVfSURMRSA6IGdvdG8gRW5lcmd5IERldGVjdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgNyBNQUlOX1NUQVRFX0lETEUgOiBnb3RvIFJYCisgKiAgICAgICAgICAgICAgICAgICAgICA4IE1BSU5fU1RBVEVfSURMRSBkZS1hc3NlcnQgcGh5X2VuIHdhaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICA5IE1BSU5fU1RBVEVfSURMRSBTdGFydCBwaHlfZW4gYW5kIGFzc2VydCBwaHlfZW4gd2FpdCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMTAgTUFJTl9TVEFURV9DU01BX0NBX1dBSVRfRk9SX01FVEFEQVRBIGZyYW1lbnIgOgorICogICAgICAgICAgICAgICAgICAgICAgMTEgTUFJTl9TVEFURV9DU01BX0NBIGZyYW1lbnIgOgorICogICAgICAgICAgICAgICAgICAgICAgMTIgTUFJTl9TVEFURV9DU01BX0NBIHN0YXJ0IENTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgIDE0IE1BSU5fU1RBVEVfQ1NNQV9DQSBza2lwIENTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgIDE1IE1BSU5fU1RBVEVfV0FJVF9GT1JfQ1NNQV9DQSBjc21hX2NhIEZhaWxlZCBmb3IgQ1NMIG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDE2IE1BSU5fU1RBVEVfV0FJVF9GT1JfQ1NNQV9DQSBjc21hX2NhIEZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTcgTUFJTl9TVEFURV9XQUlUX0ZPUl9DU01BX0NBIGNzbWFfY2EgU3VjY2VzcworICogICAgICAgICAgICAgICAgICAgICAgMTggTUFJTl9TVEFURV9TSU5HTEVfQ0NBIENDQSBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE5IE1BSU5fU1RBVEVfU0lOR0xFX0NDQSBDQ0Egb2sKKyAqICAgICAgICAgICAgICAgICAgICAgIDIwIE1BSU5fU1RBVEVfV0FJVF9BQ0tfREVMQVkgd2FpdCB0aW1lIGVsYXBzZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDIxIE1BSU5fU1RBVEVfV0FJVCBBQ0tfREVMQVkgOiBTZW5kIEFjayBpbiBUU0NIIG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDIyIE1BSU5fU1RBVEVfV0FJVCBBQ0tfREVMQVkgOiBBY2sgbm90IHNjaGVkdWxlZCBpbiB0aW1lIGluIFRTQ0ggbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgMjMgTUFJTl9TVEFURV9UU0NIX1RYX0ZSQU1FIG1hY1RTUnhUeCB0aW1lIGVsYXBzZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDI0IE1BSU5fU1RBVEVfVFhfRlJBTUUgaXQgaXMgQ1NMIG1vZGUsIHN0YXJ0IHRoZSBXVSBzZXEgZm9yIG1hY1dVUGVyaW9kCisgKiAgICAgICAgICAgICAgICAgICAgICAyNSBNQUlOX1NUQVRFX1RYX0ZSQU1FMQorICogICAgICAgICAgICAgICAgICAgICAgMjYgTUFJTl9TVEFURV9UWF9GUkFNRV9XMSBleGl0LCB3YWl0ZWQgZm9yIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDI3IE1BSU5fU1RBVEVfVFhfRlJBTUVfVzIgZXhpdCwgd2FpdGVkIGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAyOCBNQUlOX1NUQVRFX1RYX1dBSVRfTEFTVF9TWU1CT0wgZXhpdAorICogICAgICAgICAgICAgICAgICAgICAgMjkgTUFJTl9TVEFURV9UWF9SQU1QRE9XTl9XIGV4aXQsIHdhaXRlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMzAgTUFJTl9TVEFURV9UWF9QSFlUUlhXQUlUIGV4aXQsIHdhaXRlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMzEgTUFJTl9TVEFURV9HRU5fSUZTICwgQWNrIHdpdGggZnJhbWUgcGVuZGluZyByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgMzIgTUFJTl9TVEFURV9HRU5fSUZTICwgQWNrIHJlcXVlc3RlZCBidXQgRGlzUlhhY2tSZWNlaXZlZGNhIGlzIHNldAorICogICAgICAgICAgICAgICAgICAgICAgMzMgTUFJTl9TVEFURV9HRU5fSUZTICwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGFuIElGUywgc3dpdGNoIHRoZSByeC1vbiBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuIEFDSworICogICAgICAgICAgICAgICAgICAgICAgMzQgTUFJTl9TVEFURV9HRU5fSUZTICwgZ2VuZXJhdGluZyBhbiBTSUZTIChTaG9ydCBJbnRlciBGcmFtZSBTcGFjZSkKKyAqICAgICAgICAgICAgICAgICAgICAgIDM1IE1BSU5fU1RBVEVfR0VOX0lGUyAsIGdlbmVyYXRpbmcgYW4gTElGUyAoTG9uZyBJbnRlciBGcmFtZSBTcGFjZSkKKyAqICAgICAgICAgICAgICAgICAgICAgIDM2IE1BSU5fU1RBVEVfR0VOX0lGU19GSU5JU0ggaW4gQ1NMIG1vZGUsICdjc2xwZXJpb2RfdGltZXJfcmVhZHknIGlzIHJlYWR5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBzZW50IHRoZSBkYXRhIGZyYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAzNyBNQUlOX1NUQVRFX0dFTl9JRlNfRklOSVNIIGluIENTTCBtb2RlLCAnUmVuZGV6dm91cyB6ZXJvIHRpbWUgbm90IHlldAorICogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXR0ZWQgc2VudCBhbm90aGVyIFdVIGZyYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAzOCBNQUlOX1NUQVRFX0dFTl9JRlNfRklOSVNIIGV4aXQsIGNvcnJlY3RlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMzkgTUFJTl9TVEFURV9HRU5fSUZTX0ZJTklTSCBpbiBDU0wgbW9kZSwgcnhfcmVzdW1lX2FmdGVyX3R4IGlzIHNldAorICogICAgICAgICAgICAgICAgICAgICAgNDAgTUFJTl9TVEFURV9TRU5UX1NUQVRVUyBDU0xNb2RlIHd1X3NlcXVlbmNlX2RvbmVfZmxhZyA6CisgKiAgICAgICAgICAgICAgICAgICAgICA0MSBNQUlOX1NUQVRFX0FERF9ERUxBWSBleGl0LCBnb3RvIFJYIGZvciBmcmFtZSBwZW5kaW5nIHRpbWUKKyAqICAgICAgICAgICAgICAgICAgICAgIDQyIE1BSU5fU1RBVEVfQUREX0RFTEFZIGV4aXQsIGdvdG8gSURMRQorICogICAgICAgICAgICAgICAgICAgICAgNDMgTUFJTl9TVEFURV9SWCBzd2l0Y2ggdGhlIFJYIGZyb20gb2ZmIHRvIG9uCisgKiAgICAgICAgICAgICAgICAgICAgICA0NCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhTVEFSVCB3YWl0ZWQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICA0NSBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIHN0YXJ0IHRoZSBNYWNBY2tEdXJhdGlvbiB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNDYgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBzdGFydCB0aGUgYWNrIHdhaXQgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDQ3IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kgTk9STUFMIG1vZGUgOiBzdGFydCByeF9kdXJhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgNDggTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBUU0NIIG1vZGUgOiBzdGFydCBtYWNUU1J4V2FpdAorICogICAgICAgICAgICAgICAgICAgICAgICAgKG1hY1RTUnhXYWl0KSB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNDkgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBDU0wgbW9kZSA6IHN0YXJ0IHRoZSBjc2xfcnhfZHVyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNDU0xzYW1wbGVQZXJpb2QpIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA1MCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIENTTCBtb2RlIDogc3RhcnQgdGhlIGNzbF9yeF9kdXJhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgKG1hY0NTTGRhdGFQZXJpb2QpIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA1MSBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDEgYWNrd2FpdF90aW1lcl9yZWFkeSBvciBhY2tfcmVjZWl2ZWRfaW5kCisgKiAgICAgICAgICAgICAgICAgICAgICA1MiBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDIgbm9ybWFsX21vZGUuIEFDSyB3aXRoIEZQIGJpdCBzZXQsIHN0YXJ0IGZyYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA1NCBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDQgUnhBbHdheXNPbiBpcyBzZXQgdG8gMAorICogICAgICAgICAgICAgICAgICAgICAgNTUgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA1IFRTQ0ggbW9kZSB2YWxpZCBmcmFtZSByeGVkCisgKiAgICAgICAgICAgICAgICAgICAgICA1NiBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDYgVFNDSCBtb2RlIG1hY1RTUnh3YWl0IGV4cGlyZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDU3IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgNyBtYWNDU0xzYW1wbGVQZXJpb2QgdGltZXIgcmVhZHkKKyAqICAgICAgICAgICAgICAgICAgICAgIDU4IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgOCBjc2xfbW9kZS4gRGF0YSBmcmFtZSByZWNpZXZlZCB3aXRoIEZQIGJpdAorICogICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCBpbmNyZW1lbnQgUlggZHVyYXRpb24gdGltZQorICogICAgICAgICAgICAgICAgICAgICAgNTkgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA5IENTTCBtb2RlIDogUmVjZWl2ZWQgd3UgZnJhbWUgaW4gZGF0YQorICogICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nIHBlcmlvZCByZXN0YXJ0IG1hY0NTTGRhdGFQZXJpb2QgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDYwIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMTAgY3NsX3J4X2R1cmF0aW9uX3JlYWR5IG9yIGNzbCBkYXRhIGZyYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDYxIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMTEgbm9ybWFsX21vZGUuIEZQIGJpdCBpcyBzZXQsIHN0YXJ0IGZyYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA2MiBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDEyIG5vcm1hbCBtb2RlIHJ4X2R1cmF0aW9uX3RpbWVyX3JlYWR5IGFuZAorICogICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfcGVuZGluZ190aW1lcl9yZWFkeQorICogICAgICAgICAgICAgICAgICAgICAgNjMgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxMyBhY2tub3dsZWRnZSBmcmFtZSByZXF1ZXN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDY0IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMTQgSW50ZXJydXB0IHRvIHNlbnQgYSBmcmFtZS4gZm91bmRfdHhfcGFja2V0CisgKiAgICAgICAgICAgICAgICAgICAgICA2NSBNQUlOX1NUQVRFX0NTTF9SWF9JRExFX0VORCBSWiB0aW1lIGlzIGZhciBhd2F5LCBzd2l0Y2ggcmVjZWl2ZXIgT2ZmIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCBmb3IgY3NsX3J4X3J6X3RpbWUgYmVmb3JlIHN3aXRjaGluZyBvbgorICogICAgICAgICAgICAgICAgICAgICAgNjYgTUFJTl9TVEFURV9DU0xfUlhfSURMRV9FTkQgUlogdGltZSBpcyBub3Qgc28gZmFyIGF3YXksIGtlZXAgcmVjZWl2ZXIgT24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB3YWl0IGZvcgorICogICAgICAgICAgICAgICAgICAgICAgNjcgTUFJTl9TVEFURV9SWF9TVEFSVF9QSFlSWFNUT1AgYWNrIHdpdGggZnAgcmVjZWl2ZWQga2VlcCByeCBvbgorICogICAgICAgICAgICAgICAgICAgICAgNjggTUFJTl9TVEFURV9SWF9TVEFSVF9QSFlSWFNUT1Agc3dpdGNoIHRoZSBSWCBmcm9tIG9uIHRvIG9mZgorICogICAgICAgICAgICAgICAgICAgICAgNjkgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYU1RPUCBhY2tub3dsZWRnZSBkb25lIDogc3dpdGNoIGJhY2sgdG8gZmluaXNoIFRYCisgKiAgICAgICAgICAgICAgICAgICAgICA3MCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhTVE9QIHN3aXRjaCB0aGUgUlggb2ZmCisgKiAgICAgICAgICAgICAgICAgICAgICA3MSBNQUlOX1NUQVRFX0VEIHN3aXRjaCB0aGUgUlggZnJvbSBvZmYgdG8gb24KKyAqICAgICAgICAgICAgICAgICAgICAgIDcyIE1BSU5fU1RBVEVfRURfV0FJVF9QSFlSWFNUQVJUIHdhaXRlZCBmb3IgcGh5UnhTdGFydHVwCisgKiAgICAgICAgICAgICAgICAgICAgICA3MyBNQUlOX1NUQVRFX0VEX1dBSVRfRURTQ0FORFVSQVRJT04gd2FpdGVkIGZvciBFZFNjYW5EdXJhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgNzQgTUFJTl9TVEFURV9FRF9XQUlUX1BIWVJYU1RPUCBlbmQgb2YgRW5lcmd5IERldGVjdGlvbiwgZ290IElETEUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIDc1IC0gMTI3IE5vdCB1c2VkCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfTE1BQ19FTkFCTEVfQU5EX1NNICAgICAgICAgICAgIDB4MzEKKworLyoqCisgKiBcYnJpZWYgUlggZW5hYmxlIGFuZCBkZXRhaWxlZCBzdGF0ZSBtYWNoaW5lIGluZm8KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2LTAgPSBkZXRhaWxlZCBzdGF0ZSBtYWNoaW5lIGluZm8gc2VlIEZUREZfREJHX0xNQUNfRU5BQkxFX0FORF9TTQorICovCisjZGVmaW5lIEZUREZfREJHX0xNQUNfUlhfRU5BQkxFX0FORF9TTSAgICAgICAgICAweDMyCisKKy8qKgorICogXGJyaWVmIFRYIGVuYWJsZSBhbmQgZGV0YWlsZWQgc3RhdGUgbWFjaGluZSBpbmZvCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNi0wID0gZGV0YWlsZWQgc3RhdGUgbWFjaGluZSBpbmZvIHNlZSBGVERGX0RCR19MTUFDX0VOQUJMRV9BTkRfU00KKyAqLworI2RlZmluZSBGVERGX0RCR19MTUFDX1RYX0VOQUJMRV9BTkRfU00gICAgICAgICAgMHgzMworCisvKioKKyAqIFxicmllZiBQSFkgZW5hYmxlLCBUWCBlbmFibGUgYW5kIFJ4IGVuYWJsZSBhbmQgc3RhdGUgbWFjaGluZSBzdGF0ZXMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHBoeV9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0LTAgPSBTdGF0ZSBtYWNoaW5lIHN0YXRlcworICogICAgICAgICAgICAgICAgICAgICAgIDEgIE1BSU5fU1RBVEVfSURMRQorICogICAgICAgICAgICAgICAgICAgICAgIDIgIE1BSU5fU1RBVEVfQ1NNQV9DQV9XQUlUX0ZPUl9NRVRBREFUQQorICogICAgICAgICAgICAgICAgICAgICAgIDMgIE1BSU5fU1RBVEVfQ1NNQV9DQQorICogICAgICAgICAgICAgICAgICAgICAgIDQgIE1BSU5fU1RBVEVfV0FJVF9GT1JfQ1NNQV9DQV8wCisgKiAgICAgICAgICAgICAgICAgICAgICAgNSAgTUFJTl9TVEFURV9XQUlUX0ZPUl9DU01BX0NBCisgKiAgICAgICAgICAgICAgICAgICAgICAgNiAgTUFJTl9TVEFURV9TSU5HTEVfQ0NBCisgKiAgICAgICAgICAgICAgICAgICAgICAgNyAgTUFJTl9TVEFURV9XQUlUX0FDS19ERUxBWQorICogICAgICAgICAgICAgICAgICAgICAgIDggIE1BSU5fU1RBVEVfVFNDSF9UWF9GUkFNRQorICogICAgICAgICAgICAgICAgICAgICAgIDkgIE1BSU5fU1RBVEVfVFhfRlJBTUUKKyAqICAgICAgICAgICAgICAgICAgICAgICAxMCBNQUlOX1NUQVRFX1RYX0ZSQU1FMQorICogICAgICAgICAgICAgICAgICAgICAgIDExIE1BSU5fU1RBVEVfVFhfRlJBTUVfVzEKKyAqICAgICAgICAgICAgICAgICAgICAgICAxMiBNQUlOX1NUQVRFX1RYX0ZSQU1FX1cyCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTMgTUFJTl9TVEFURV9UWF9XQUlUX0xBU1RfU1lNQk9MCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTQgTUFJTl9TVEFURV9UWF9SQU1QRE9XTgorICogICAgICAgICAgICAgICAgICAgICAgIDE1IE1BSU5fU1RBVEVfVFhfUkFNUERPV05fVworICogICAgICAgICAgICAgICAgICAgICAgIDE2IE1BSU5fU1RBVEVfVFhfUEhZVFJYV0FJVAorICogICAgICAgICAgICAgICAgICAgICAgIDE3IE1BSU5fU1RBVEVfR0VOX0lGUworICogICAgICAgICAgICAgICAgICAgICAgIDE4IE1BSU5fU1RBVEVfR0VOX0lGU19GSU5JU0gKKyAqICAgICAgICAgICAgICAgICAgICAgICAxOSBNQUlOX1NUQVRFX1NFTlRfU1RBVFVTCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjAgTUFJTl9TVEFURV9BRERfREVMQVkKKyAqICAgICAgICAgICAgICAgICAgICAgICAyMSBNQUlOX1NUQVRFX1RTQ0hfUlhfQUNLREVMQVkKKyAqICAgICAgICAgICAgICAgICAgICAgICAyMiBNQUlOX1NUQVRFX1JYCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjMgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYU1RBUlQKKyAqICAgICAgICAgICAgICAgICAgICAgICAyNCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjUgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRAorICogICAgICAgICAgICAgICAgICAgICAgIDI2IE1BSU5fU1RBVEVfQ1NMX1JYX0lETEVfRU5ECisgKiAgICAgICAgICAgICAgICAgICAgICAgMjcgTUFJTl9TVEFURV9SWF9TVEFSVF9QSFlSWFNUT1AKKyAqICAgICAgICAgICAgICAgICAgICAgICAyOCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhTVE9QCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjkgTUFJTl9TVEFURV9FRAorICogICAgICAgICAgICAgICAgICAgICAgIDMwIE1BSU5fU1RBVEVfRURfV0FJVF9QSFlSWFNUQVJUCisgKiAgICAgICAgICAgICAgICAgICAgICAgMzEgTUFJTl9TVEFURV9FRF9XQUlUX0VEU0NBTkRVUkFUSU9OCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfTE1BQ19SWF9UWF9FTkFCTEVfQU5EX1NUQVRFUyAgIDB4MzQKKworLyoqCisgKiBcYnJpZWYgTE1BQyBjb250cm9sbGVyIHRvIHR4IGludGVyZmFjZSB3aXRoIHdha2V1cAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX2FjaworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0yID0gY3RybF9sbWFjX3RvX3R4LnR4X2ZyYW1lX25tYnIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gY3RybF90eF90b19sbWFjLnR4X2xhc3Rfc3ltYm9sCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfTE1BQ19UT19UWF9BTkRfV0FLRVVQICAgICAgICAgIDB4MzUKKworLyoqCisgKiBcYnJpZWYgTE1BQyBjb250cm9sbGVyIHRvIHR4IGludGVyZmFjZSB3aXRoIGZyYW1lIHBlbmRpbmcKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbi5mcF9iaXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGN0cmxfbG1hY190b190eC5nZW5fYWNrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzLTIgPSBjdHJsX2xtYWNfdG9fdHgudHhfZnJhbWVfbm1icgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBjdHJsX3R4X3RvX2xtYWMudHhfbGFzdF9zeW1ib2wKKyAqLworI2RlZmluZSBGVERGX0RCR19MTUFDX1RPX1RYX0FORF9GUkFNRV9QRU5ESU5HICAgMHgzNgorCisvKioKKyAqIFxicmllZiBSeCBwaXBlcGxpbmUgdG8gTE1BQyBjb250cm9sbGVyIGludGVyZmFjZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBjdHJsX3J4X3RvX2xtYWMucnhfc29mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGN0cmxfcnhfdG9fbG1hYy5yeF9lb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gY3RybF9yeF90b19sbWFjLnBhY2tldF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMiAgID0gYWNrX3JlY2VpdmVkX2luZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gYWNrX3JlcXVlc3RfaW5kCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBjdHJsX3J4X3RvX2xtYWMuZGF0YV9yZXF1ZXN0X2ZyYW1lCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfTE1BQ19SWF9UT19MTUFDICAgICAgICAgICAgICAgIDB4MzcKKworLyoqCisgKiBcYnJpZWYgQ1NMIHN0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGNzbF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNC0xID0gc3dpb19hbHdheXNfb25fdG9fbG1hY19jdHJsLnR4X2ZsYWdfc3RhdAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gZm91bmRfd3VfcGFja2V0OworICovCisjZGVmaW5lIEZUREZfREJHX0xNQUNfQ1NMX1NUQVJUICAgICAgICAgICAgICAgICAweDM4CisKKy8qKgorICogXGJyaWVmIFRTQ0ggVFggQUNLIHRpbWluZworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNy00ID0gc3dpb19hbHdheXNfb25fdG9fbG1hY19jdHJsLnR4X2ZsYWdfc3RhdAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBjdHJsX3J4X3RvX2xtYWMucGFja2V0X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBvbmVfdXNfdGltZXJfcmVhZHkKKyAqLworI2RlZmluZSBGVERGX0RCR19MTUFDX1RTQ0hfQUNLX1RJTUlORyAgICAgICAgICAgMHgzOQorCisKKy8qKgorICogXGJyaWVmIFNlY3VyaXR5IGNvbnRyb2wKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHN3aW9fdG9fc2VjdXJpdHkuc2VjU3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHN3aW9fdG9fc2VjdXJpdHkuc2VjVHhSeG4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHN3aW9fdG9fc2VjdXJpdHkuc2VjQWJvcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IHN3aW9fdG9fc2VjdXJpdHkuc2VjRW5jRGVjbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gc3dpb19mcm9tX3NlY3VyaXR5LnNlY0J1c3kKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IHN3aW9fZnJvbV9zZWN1cml0eS5zZWNBdXRoRmFpbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gc3dpb19mcm9tX3NlY3VyaXR5LnNlY1JlYWR5X2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9ICcwJworICovCisjZGVmaW5lIEZUREZfREJHX1NFQ19DT05UUk9MICAgICAgICAgICAgICAgICAgICAweDQwCisKKy8qKgorICogXGJyaWVmIFNlY3VyaXR5IENUTElEIGFjY2VzcyBSeCBhbmQgVHgKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X3NlY19jaS5sZF9zdHJiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSB0eF9zZWNfY2kuY3RsaWRfcncKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHR4X3NlY19jaS5zZWxlY3RwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSB0eF9zZWNfY28uZF9yZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IHJ4X3NlY19jaS5sZF9zdHJiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyICAgPSByeF9zZWNfY2kuY3RsaWRfcncKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IHJ4X3NlY19jaS5zZWxlY3RwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSByeF9zZWNfY28uZF9yZHkKKyAqLworI2RlZmluZSBGVERGX0RCR19TRUNfQ1RMSURfQUNDRVNTX1JYX1RYICAgICAgICAgMHg0MQorCisvKioKKyAqIFxicmllZiBTZWN1cml0eSBjdGxpZCBhY2Nlc3MgdHggd2l0aCBzZWNfd3JfZGF0YV92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfc2VjX2NpLmxkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHR4X3NlY19jaS5jdGxpZF9ydworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gdHhfc2VjX2NpLnNlbGVjdHAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IHR4X3NlY19jby5kX3JkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0wID0gc2VjX3dyX2RhdGFfdmFsaWQKKyAqLworI2RlZmluZSBGVERGX0RCR19TRUNfQ1RMSURfQUNDRVNTX1RYX0FORF9TRUNfV1JfREFUQV9WQUxJRCAgICAgIDB4NDIKKworLyoqCisgKiBcYnJpZWYgU2VjdXJpdHkgY3RsaWQgYWNjZXNzIHJ4IHdpdGggc2VjX3dyX2RhdGFfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHJ4X3NlY19jaS5sZF9zdHJiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9zZWNfY2kuY3RsaWRfcncKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHJ4X3NlY19jaS5zZWxlY3RwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSByeF9zZWNfY28uZF9yZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMCA9IHNlY193cl9kYXRhX3ZhbGlkCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfU0VDX0NUTElEX0FDQ0VTU19SWF9BTkRfU0VDX1dSX0RBVEFfVkFMSUQgICAgIDB4NDMKKworLyoqCisgKiBcYnJpZWYgQUhCIGJ1cyB3aXRob3V0IGhzaXplCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBoc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2LTUgPSBodHJhbnMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGh3cml0ZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gaHJlYWR5X2luCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyICAgPSBocmVhZHlfb3V0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxLTAgPSBocmVzcAorICovCisjZGVmaW5lIEZUREZfREJHX0FIQl9XT19IU0laRSAgICAgICAgICAgICAgICAgICAweDUwCisKKy8qKgorICogXGJyaWVmIEFIQiBidXMgd2l0aG91dCBod3JlYWR5X2luIGFuZCBocmVzcCgxKQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gaHNlbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNi01ID0gaHRyYW5zCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBod3JpdGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMiA9IGhoc2l6ZSgxIGRvd250byAwKQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gaHJlYWR5X291dAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gaHJlc3AoMCkKKyAqLworI2RlZmluZSBGVERGX0RCR19BSEJfV09fSFdfUkVBRFlfSFJFU1AgICAgICAgICAgMHg1MQorCisvKioKKyAqIFxicmllZiBBTUJBIFR4IHNpZ25hbHMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGFpX3R4LnBlbmFibGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IGFpX3R4LnBzZWwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGFpX3R4LnB3cml0ZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gYW9fdHgucHJlYWR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBhb190eC5wc2x2ZXJyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyLTEgPSBwc2l6ZV90eAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gaHJlYWR5X291dAorICovCisjZGVmaW5lIEZUREZfREJHX0FIQl9BTUJBX1RYX1NJR05BTFMgICAgICAgICAgICAweDUyCisKKy8qKgorICogXGJyaWVmIEFNQkEgUnggc2lnbmFscworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gYWlfcngucGVuYWJsZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gYWlfcngucHNlbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gYWlfcngucHdyaXRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBhb19yeC5wcmVhZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGFvX3J4LnBzbHZlcnIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDItMSA9IHBzaXplX3J4CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBocmVhZHlfb3V0CisgKi8KKyNkZWZpbmUgRlRERl9EQkdfQUhCX0FNQkFfUlhfU0lHTkFMUyAgICAgICAgICAgIDB4NTMKKworLyoqCisgKiBcYnJpZWYgQU1CQSByZWdpc3RlciBtYXAgc2lnbmFscworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gYWlfcmVnLnBlbmFibGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IGFpX3JlZy5wc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBhaV9yZWcucHdyaXRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBhb19yZWcucHJlYWR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBhb19yZWcucHNsdmVycgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMi0xID0gIjAwIgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gaHJlYWR5X291dAorICovCisjZGVmaW5lIEZUREZfREJHX0FIQl9BTUJBX1JFR19NQVBfU0lHTkFMUyAgICAgICAweDU0CisKKyNlbmRpZiAvKiBGVERGX0RCR19CVVNfRU5BQkxFICovCisKKyNkZWZpbmUgRlRERl9NQVhfSE9QUElOR19TRVFVRU5DRV9MRU5HVEggMTYKKwordHlwZWRlZiB2b2lkICAgICBGVERGX1BJQkF0dHJpYnV0ZVZhbHVlOworCisvKioKKyAqIFxicmllZiAgTGluayBxdWFsaXR5CisgKiBccmVtYXJrIFJhbmdlOiAwLi4yNTUKKyAqIFxyZW1hcmsgQSBoaWdoZXIgbnVtYmVyIGlzIGEgaGlnaGVyIHF1YWxpdHkKKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX0xpbmtRdWFsaXR5OworCisvKioKKyAqIFxicmllZiBIb3BwaW5nIHNlcXVlbmNlIElECisgKi8KK3R5cGVkZWYgdWludDE2X3QgRlRERl9Ib3BwaW5nU2VxdWVuY2VJZDsKKworLyoqCisgKiBcYnJpZWYgIENoYW5uZWwgbnVtYmVyCisgKiBccmVtYXJrIFN1cHBvcnRlZCByYW5nZTogMTEuLjI3CisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9DaGFubmVsTnVtYmVyOworCisvKioKKyAqIFxicmllZiAgUGFja2V0IFRyYWZmaWMgSW5mb3JtYXRpb24gKFBUSSkgdXNlZCB0byBjbGFzc2lmeSBhIHRyYW5zYWN0aW9uIGluIHRoZSByYWRpbyBhcmJpdGVyLgorICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfUFRJOworCitlbnVtCit7CisgICAgICAgIC8qIFBUSSBpbmRleCBmb3IgZXhwbGljaXQgUnguICovCisgICAgICAgIEZUREZfUFRJX0NPTkZJR19SWCwKKyAgICAgICAgLyogUFRJIGluZGV4IGZvciBUeC4gKi8KKyAgICAgICAgRlRERl9QVElfQ09ORklHX1RYLAorICAgICAgICBGVERGX1BUSV9DT05GSUdfUkVTRVJWRUQwLAorICAgICAgICBGVERGX1BUSV9DT05GSUdfUkVTRVJWRUQxLAorICAgICAgICBGVERGX1BUSV9DT05GSUdfUkVTRVJWRUQyLAorICAgICAgICBGVERGX1BUSV9DT05GSUdfUkVTRVJWRUQzLAorICAgICAgICBGVERGX1BUSV9DT05GSUdfUkVTRVJWRUQ0LAorICAgICAgICBGVERGX1BUSV9DT05GSUdfUkVTRVJWRUQ1LAorICAgICAgICAvKiBFbnVtZXJhdGlvbiBlbmQuICovCisgICAgICAgIEZUREZfUFRJUywKK307CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIEZUREZfUFRJIHB0aXNbRlRERl9QVElTXTsKK30gRlRERl9QdGlDb25maWc7CisKKy8qKgorICogXGJyaWVmICBDaGFubmVsIHBhZ2UKKyAqIFxyZW1hcmsgU3VwcG9ydGVkIHZhbHVlczogMAorICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfQ2hhbm5lbFBhZ2U7CisKK3R5cGVkZWYgdWludDhfdCAgRlRERl9DaGFubmVsT2Zmc2V0OworCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfT2N0ZXQ7CisKKy8qKgorICogXGJyaWVmIDgtYml0IHR5cGUgYml0bWFwCisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9CaXRtYXA4OworCisvKioKKyAqIFxicmllZiAxNi1iaXQgdHlwZSBiaXRtYXAKKyAqLwordHlwZWRlZiB1aW50MTZfdCBGVERGX0JpdG1hcDE2OworCisvKioKKyAqIFxicmllZiAzMi1iaXQgdHlwZSBiaXRtYXAKKyAqLwordHlwZWRlZiB1aW50MzJfdCBGVERGX0JpdG1hcDMyOworCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfTnVtT2ZCYWNrb2ZmczsKKwordHlwZWRlZiB1aW50OF90ICBGVERGX0dUU0NoYXJhdGVyaXN0aWNzOworCisvKioKKyAqIFxicmllZiBTY2FuIHR5cGUKKyAqIFxyZW1hcmsgQWxsb3dlZCB2YWx1ZXM6CisgKiAgICAgICAgIC0gRlRERl9FRF9TQ0FOOiBFbmVyZ3kgZGV0ZWN0IHNjYW4KKyAqICAgICAgICAgLSBGVERGX0FDVElWRV9TQ0FOOiBBY3RpdmUgc2NhbgorICogICAgICAgICAtIEZUREZfUEFTU0lWRV9TQ0FOOiBQYXNzaXZlIHNjYW4KKyAqICAgICAgICAgLSBGVERGX09SUEhBTl9TQ0FOOiBPcnBoYW4gc2NhbgorICogICAgICAgICAtIEZUREZfRU5IQU5DRURfQUNUSVZFX1NDQU46IEVuaGFuY2VkIGFjdGl2ZSBzY2FuCisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9TY2FuVHlwZTsKKyNkZWZpbmUgRlRERl9FRF9TQ0FOICAgICAgICAgICAgICAxCisjZGVmaW5lIEZUREZfQUNUSVZFX1NDQU4gICAgICAgICAgMgorI2RlZmluZSBGVERGX1BBU1NJVkVfU0NBTiAgICAgICAgIDMKKyNkZWZpbmUgRlRERl9PUlBIQU5fU0NBTiAgICAgICAgICA0CisjZGVmaW5lIEZUREZfRU5IQU5DRURfQUNUSVZFX1NDQU4gNworCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9TY2FuRHVyYXRpb247CisKKy8qKgorICogXGJyaWVmIExvc3Mgb3BlcmF0aW9uCisgKiBccmVtYXJrIFBvc3NpYmxlIHZhbHVlczoKKyAqICAgICAgICAgLSBGVERGX1BBTl9JRF9DT05GTElDVAorICogICAgICAgICAtIEZUREZfUkVBTElHTk1FTlQKKyAqICAgICAgICAgLSBGVERGX0JFQUNPTl9MT1NUIChub3Qgc3VwcG9ydGVkIGJlY2F1c2Ugb25seSBiZWFjb25sZXNzIG1vZGUgaXMgc3VwcG9ydGVkKQorICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9Mb3NzUmVhc29uOworI2RlZmluZSBGVERGX1BBTl9JRF9DT05GTElDVCAxCisjZGVmaW5lIEZUREZfUkVBTElHTk1FTlQgICAgIDIKKyNkZWZpbmUgRlRERl9CRUFDT05fTE9TVCAgICAgMworCit0eXBlZGVmIHVpbnQxNl90IEZUREZfU2xvdGZyYW1lU2l6ZTsKKworLyoqCisgKiBcYnJpZWYgU2V0IG9wZXJhdGlvbgorICogXHJlbWFyayBBbGxvd2VkIHZhbHVlczoKKyAqICAgICAgICAgLSBGVERGX0FERDogQWRkIGFuIGVudHJ5CisgKiAgICAgICAgIC0gRlRERl9ERUxFVEU6IERlbGV0ZSBhbiBlbnRyeQorICogICAgICAgICAtIEZUREZfTU9ESUZZOiBNb2RpZnkgYW4gZW50cnkKKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX09wZXJhdGlvbjsKKyNkZWZpbmUgRlRERl9BREQgICAgMAorI2RlZmluZSBGVERGX0RFTEVURSAyCisjZGVmaW5lIEZUREZfTU9ESUZZIDMKKwordHlwZWRlZiB1aW50MTZfdCBGVERGX1RpbWVzbG90OworCisvKioKKyAqIFxicmllZiBTZXQgb3BlcmF0aW9uCisgKiBccmVtYXJrIEFsbG93ZWQgdmFsdWVzOgorICogICAgICAgICAtIEZUREZfTk9STUFMX0xJTksKKyAqICAgICAgICAgLSBGVERGX0FEVkVSVElTSU5HX0xJTksKKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX0xpbmtUeXBlOworI2RlZmluZSBGVERGX05PUk1BTF9MSU5LICAgICAgMAorI2RlZmluZSBGVERGX0FEVkVSVElTSU5HX0xJTksgMQorCisvKioKKyAqIFxicmllZiBUU0NIIG1vZGUgc3RhdHVzCisgKiBccmVtYXJrIEFsbG93ZWQgdmFsdWVzOgorICogICAgICAgICAtIEZUREZfVFNDSF9PRkYKKyAqICAgICAgICAgLSBGVERGX1RTQ0hfT04KKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfVFNDSE1vZGU7CisjZGVmaW5lIEZUREZfVFNDSF9PRkYgMAorI2RlZmluZSBGVERGX1RTQ0hfT04gIDEKKwordHlwZWRlZiB1aW50MTZfdCBGVERGX0tlZXBBbGl2ZVBlcmlvZDsKKworLyoqCisgKiBcYnJpZWYgQkUgZXhwb25lbnQKKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX0JFRXhwb25lbnQ7CisKKyNkZWZpbmUgRlRERl9NQVhfU0xPVEZSQU1FUyA0CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBIYW5kbGUgb2YgdGhpcyBzbG90ZnJhbWUgKi8KKyAgICBGVERGX0hhbmRsZSAgICAgICAgc2xvdGZyYW1lSGFuZGxlOworICAgIC8qKiBcYnJpZWYgVGhlIG51bWJlciBvZiB0aW1lc2xvdHMgaW4gdGhpcyBzbG90ZnJhbWUgKi8KKyAgICBGVERGX1Nsb3RmcmFtZVNpemUgc2xvdGZyYW1lU2l6ZTsKK30gRlRERl9TbG90ZnJhbWVFbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE51bWJlciBvZiBzbG90ZnJhbWVzIGluIHRoZSBzbG90ZnJhbWUgdGFibGUgKi8KKyAgICBGVERGX1NpemUgICAgICAgICAgICBuck9mU2xvdGZyYW1lczsKKyAgICAvKiogXGJyaWVmIFBvaW50ZXIgdG8gdGhlIGZpcnN0IHNsb3RmcmFtZSBlbnRyeSAqLworICAgIEZUREZfU2xvdGZyYW1lRW50cnkqIHNsb3RmcmFtZUVudHJpZXM7Cit9IEZUREZfU2xvdGZyYW1lVGFibGU7CisKKyNkZWZpbmUgRlRERl9NQVhfTElOS1MgICAgICAgICAgICAgICAgMTYKKworI2RlZmluZSBGVERGX0xJTktfT1BUSU9OX1RSQU5TTUlUICAgICAweDAxCisjZGVmaW5lIEZUREZfTElOS19PUFRJT05fUkVDRUlWRSAgICAgIDB4MDIKKyNkZWZpbmUgRlRERl9MSU5LX09QVElPTl9TSEFSRUQgICAgICAgMHgwNAorI2RlZmluZSBGVERGX0xJTktfT1BUSU9OX1RJTUVfS0VFUElORyAweDA4CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBIYW5kbGUgb2YgdGhpcyBsaW5rLCB1c2VkIGZvciBkZWxldGUgYW5kIG1vZGlmeSBvcGVyYXRpb25zICovCisgICAgRlRERl9IYW5kbGUgICAgICAgIGxpbmtIYW5kbGU7CisgICAgLyoqCisgICAgICogXGJyaWVmIEJpdCBtYXBwZWQgbGluayBvcHRpb25zLCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDo8YnI+CisgICAgICogICAgICAgIEZUREZfTElOS19PUFRJT05fVFJBTlNNSVQ6IExpayBjYW4gYmUgdXNlZCBmb3IgdHJhbnNtaXR0aW5nPGJyPgorICAgICAqICAgICAgICBGVERGX0xJTktfT1BUSU9OX1JFQ0VJVkU6IExpbmsgY2FuIGJlIHVzZWQgZm9yIHJlY2VpdmluZzxicj4KKyAgICAgKiAgICAgICAgRlRERl9MSU5LX09QVElPTl9TSEFSRUQ6IFNoYXJlZCBsaW5rLCBtdWx0aXBsZSBkZXZpY2UgY2FuIHRyYW5zbWl0IGluIHRoaXMgbGluazxicj4KKyAgICAgKiAgICAgICAgRlRERl9MSU5LX09QVElPTl9USU1FX0tFRVBJTkc6IExpbmsgd2lsbCBiZSB1c2VkIHRvIHN5bmNocm9uaXNlIHRpbWVzbG90czxicj4KKyAgICAgKiAgICAgICAgTXVsdGlwbGUgb3B0aW9ucyBjYW4gYmUgZGVmaW5lZCBieSBvci1pbmcgdGhlbS4KKyAgICAgKi8KKyAgICBGVERGX0JpdG1hcDggICAgICAgbGlua09wdGlvbnM7CisgICAgLyoqIFxicmllZiBMaW5rIHR5cGUgKi8KKyAgICBGVERGX0xpbmtUeXBlICAgICAgbGlua1R5cGU7CisgICAgLyoqIFxicmllZiBIYW5kbGUgb2YgdGhlIHNsb3RmcmFtZSBvZiB0aGlzIGxpbmsgKi8KKyAgICBGVERGX0hhbmRsZSAgICAgICAgc2xvdGZyYW1lSGFuZGxlOworICAgIC8qKiBcYnJpZWYgU2hvcnQgYWRkcmVzcyBvZiB0aGUgcGVlciBub2RlLCBvbmx5IHZhbGlkIGlmIGlzIGEgdHJhbnNtaXQgbGluayAqLworICAgIEZUREZfU2hvcnRBZGRyZXNzICBub2RlQWRkcmVzczsKKyAgICAvKiogXGJyaWVmIFRpbWVzbG90IGluIHRoZSBzbG90ZnJhbWUgKi8KKyAgICBGVERGX1RpbWVzbG90ICAgICAgdGltZXNsb3Q7CisgICAgLyoqIFxicmllZiBDaGFubmVsIG9mZnNldCAqLworICAgIEZUREZfQ2hhbm5lbE9mZnNldCBjaGFubmVsT2Zmc2V0OworICAgIC8qKiBcYnJpZWYgRE8gTk9UIFVTRSAqLworICAgIHZvaWQqICAgICAgICAgICAgICBfX3ByaXZhdGUxOworICAgIC8qKiBcYnJpZWYgRE8gTk9UIFVTRSAqLworICAgIHVpbnQ2NF90ICAgICAgICAgICBfX3ByaXZhdGUyOworfSBGVERGX0xpbmtFbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE51bWJlciBvZiBsaW5rcyBpbiB0aGUgbGluayB0YWJsZSAqLworICAgIEZUREZfU2l6ZSAgICAgICBuck9mTGlua3M7CisgICAgLyoqIFxicmllZiBQb2ludGVyIHRvIHRoZSBmaXJzdCBsaW5rIGVudHJ5ICovCisgICAgRlRERl9MaW5rRW50cnkqIGxpbmtFbnRyaWVzOworfSBGVERGX0xpbmtUYWJsZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX0hhbmRsZSB0aW1lc2xvdFRlbXBsYXRlSWQ7CisgICAgRlRERl9QZXJpb2QgdHNDQ0FPZmZzZXQ7CisgICAgRlRERl9QZXJpb2QgdHNDQ0E7CisgICAgRlRERl9QZXJpb2QgdHNUeE9mZnNldDsKKyAgICBGVERGX1BlcmlvZCB0c1J4T2Zmc2V0OworICAgIEZUREZfUGVyaW9kIHRzUnhBY2tEZWxheTsKKyAgICBGVERGX1BlcmlvZCB0c1R4QWNrRGVsYXk7CisgICAgRlRERl9QZXJpb2QgdHNSeFdhaXQ7CisgICAgRlRERl9QZXJpb2QgdHNBY2tXYWl0OworICAgIEZUREZfUGVyaW9kIHRzUnhUeDsKKyAgICBGVERGX1BlcmlvZCB0c01heEFjazsKKyAgICBGVERGX1BlcmlvZCB0c01heFRzOworICAgIEZUREZfUGVyaW9kIHRzVGltZXNsb3RMZW5ndGg7Cit9IEZUREZfVGltZXNsb3RUZW1wbGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX1NpemUgIGNvdW50ZXJPY3RldHM7CisgICAgRlRERl9Db3VudCByZXRyeUNvdW50OworICAgIEZUREZfQ291bnQgbXVsdGlwbGVSZXRyeUNvdW50OworICAgIEZUREZfQ291bnQgVFhGYWlsQ291bnQ7CisgICAgRlRERl9Db3VudCBUWFN1Y2Nlc3NDb3VudDsKKyAgICBGVERGX0NvdW50IEZDU0Vycm9yQ291bnQ7CisgICAgRlRERl9Db3VudCBzZWN1cml0eUZhaWx1cmVDb3VudDsKKyAgICBGVERGX0NvdW50IGR1cGxpY2F0ZUZyYW1lQ291bnQ7CisgICAgRlRERl9Db3VudCBSWFN1Y2Nlc3NDb3VudDsKKyAgICBGVERGX0NvdW50IE5BQ0tDb3VudDsKKyAgICBGVERGX0NvdW50IFJ4RXhwaXJlZENvdW50OworICAgIEZUREZfQ291bnQgQk9JcnFDb3VudDsKK30gRlRERl9QZXJmb3JtYW5jZU1ldHJpY3M7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9Db3VudCB0eERhdGFGcm1DbnQ7CisgICAgRlRERl9Db3VudCB0eENtZEZybUNudDsKKyAgICBGVERGX0NvdW50IHR4U3RkQWNrRnJtQ250OworICAgIEZUREZfQ291bnQgdHhFbmhBY2tGcm1DbnQ7CisgICAgRlRERl9Db3VudCB0eEJlYWNvbkZybUNudDsKKyAgICBGVERGX0NvdW50IHR4TXVsdGlQdXJwRnJtQ250OworICAgIEZUREZfQ291bnQgcnhEYXRhRnJtT2tDbnQ7CisgICAgRlRERl9Db3VudCByeENtZEZybU9rQ250OworICAgIEZUREZfQ291bnQgcnhTdGRBY2tGcm1Pa0NudDsKKyAgICBGVERGX0NvdW50IHJ4RW5oQWNrRnJtT2tDbnQ7CisgICAgRlRERl9Db3VudCByeEJlYWNvbkZybU9rQ250OworICAgIEZUREZfQ291bnQgcnhNdWx0aVB1cnBGcm1Pa0NudDsKK30gRlRERl9UcmFmZmljQ291bnRlcnM7CisKK3R5cGVkZWYgdWludDhfdCBGVERGX0VuZXJneTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIENvb3JkaW5hdG9yIGFkZHJlc3MgbW9kZSAqLworICAgIEZUREZfQWRkcmVzc01vZGUgICBjb29yZEFkZHJNb2RlOworICAgIC8qKiBcYnJpZWYgQ29vcmRpbmF0b3IgUEFOIElEICovCisgICAgRlRERl9QQU5JZCAgICAgICAgIGNvb3JkUEFOSWQ7CisgICAgLyoqIFxicmllZiBDb29yZGluYXRvciBhZGRyZXNzICovCisgICAgRlRERl9BZGRyZXNzICAgICAgIGNvb3JkQWRkcjsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgbnVtYmVyICovCisgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWxOdW1iZXI7CisgICAgLyoqIFxicmllZiBDaGFubm5lbCBwYWdlICovCisgICAgRlRERl9DaGFubmVsUGFnZSAgIGNoYW5uZWxQYWdlOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0JpdG1hcDE2ICAgICAgc3VwZXJmcmFtZVNwZWM7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfQm9vbGVhbiAgICAgICBHVFNQZXJtaXQ7CisgICAgLyoqIFxicmllZiBMaW5rIHF1YWxpdHkgKi8KKyAgICBGVERGX0xpbmtRdWFsaXR5ICAgbGlua1F1YWxpdHk7CisgICAgLyoqIFxicmllZiAqLworICAgIEZUREZfVGltZSAgICAgICAgICB0aW1lc3RhbXA7Cit9IEZUREZfUEFORGVzY3JpcHRvcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIENvb3JkaW5hdG9yIFBBTiBJRCAqLworICAgIEZUREZfUEFOSWQgICAgICAgICBjb29yZFBBTklkOworICAgIC8qKiBcYnJpZWYgQ29vcmRpbmF0b3Igc2hvcnQgYWRkcmVzcyAqLworICAgIEZUREZfU2hvcnRBZGRyZXNzICBjb29yZFNob3J0QWRkcjsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgbnVtYmVyICovCisgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWxOdW1iZXI7CisgICAgLyoqIFxicmllZiBEZXZpY2Ugc2hvcnQgYWRkcmVzcyAqLworICAgIEZUREZfU2hvcnRBZGRyZXNzICBzaG9ydEFkZHI7CisgICAgLyoqIFxicmllZiBDaGFubm5lbCBwYWdlICovCisgICAgRlRERl9DaGFubmVsUGFnZSAgIGNoYW5uZWxQYWdlOworfSBGVERGX0Nvb3JkUmVhbGlnbkRlc2NyaXB0b3I7CisKKy8qKgorICogXGJyaWVmICBBdXRvIGZyYW1lIHNvdXJjZSBhZGRyZXNzIG1vZGUKKyAqIFxyZW1hcmsgVmFsaWQgdmFsdWVzOgorICogLSBGVERGX0FVVE9fTk9ORTogTm8gYWRkcmVzcworICogLSBGVERGX0FVVE9fU0hPUlQ6IFNob3J0IGFkZHJlc3MKKyAqIC0gRlRERl9BVVRPX0ZVTEw6IEV4dGVuZGVkIGFkZHJlc3MKKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfQXV0b1NBOworI2RlZmluZSBGVERGX0FVVE9fTk9ORSAgMQorI2RlZmluZSBGVERGX0FVVE9fU0hPUlQgMgorI2RlZmluZSBGVERGX0FVVE9fRlVMTCAgMworCisvKioKKyAqIFxicmllZiAgVFggUG93ZXIgdG9sZXJhbmNlCisgKiBccmVtYXJrIFZhbGlkIHZhbHVlczoKKyAqIC0gRlRERl9QT1dFUl9UT0xFUkFOQ0VfMV9EQgorICogLSBGVERGX1BPV0VSX1RPTEVSQU5DRV8zX0RCCisgKiAtIEZUREZfUE9XRVJfVE9MRVJBTkNFXzZfREIKKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfVFhQb3dlclRvbGVyYW5jZTsKKyNkZWZpbmUgRlRERl9QT1dFUl9UT0xFUkFOQ0VfMV9EQiAxCisjZGVmaW5lIEZUREZfUE9XRVJfVE9MRVJBTkNFXzNfREIgMgorI2RlZmluZSBGVERGX1BPV0VSX1RPTEVSQU5DRV82X0RCIDMKKworLyoqCisgKiBcYnJpZWYgIENDQSBtb2RlCisgKiBccmVtYXJrIFZhbGlkIHZhbHVlczoKKyAqIC0gRlRERl9DQ0FfTU9ERV8xCisgKiAtIEZUREZfQ0NBX01PREVfMgorICogLSBGVERGX0NDQV9NT0RFXzMKKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfQ0NBTW9kZTsKKyNkZWZpbmUgRlRERl9DQ0FfTU9ERV8xIDEKKyNkZWZpbmUgRlRERl9DQ0FfTU9ERV8yIDIKKyNkZWZpbmUgRlRERl9DQ0FfTU9ERV8zIDMKKworLyoqCisgKiBcYnJpZWYgIEZyYW1lIGNvbnRyb2wgb3B0aW9ucworICogXHJlbWFyayBTdXBwb3J0ZWQgb3B0aW9uczoKKyAqIC0gRlRERl9QQU5fSURfUFJFU0VOVDogICAgQ29udHJvbHMgdGhlIFBBTiBJRCBjb21wcmVzc2lvbi9wcmVzZW50IGJpdCBpbiBtdWx0aXB1cnBvc2UgYW5kIHZlcnNpb24gMiBmcmFtZXMgCisgKiAtIEZUREZfSUVTX0lOQ0xVREVEOiAgICAgIEluZGljYXRlcyB0aGF0IElFcyBtdXN0IGJlIGluY2x1ZGVkCisgKiAtIEZUREZfU0VRX05SX1NVUFBSRVNTRUQ6IENvbnRyb2xzIHN1cHByZXNzaW9uIG9mIHRoZSBzZXF1ZW5jZSBudW1iZXIKKyAqIFxyZW1hcmsgTXVsdGlwbGUgb3B0aW9ucyBjYW4gc3BlY2lmaWVkIGJ5IGJpdCB3aXNlIG9yLWluZyB0aGVtCisgKi8KK3R5cGVkZWYgdWludDhfdCBGVERGX0ZyYW1lQ29udHJvbE9wdGlvbnM7CisjZGVmaW5lIEZUREZfUEFOX0lEX1BSRVNFTlQgICAgMHgwMQorI2RlZmluZSBGVERGX0lFU19JTkNMVURFRCAgICAgIDB4MDIKKyNkZWZpbmUgRlRERl9TRVFfTlJfU1VQUFJFU1NFRCAweDA0CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9DaGFubmVsUGFnZSAgICBjaGFubmVsUGFnZTsKKyAgICBGVERGX1NpemUgICAgICAgICAgIG5yT2ZDaGFubmVsczsKKyAgICBGVERGX0NoYW5uZWxOdW1iZXIqIGNoYW5uZWxzOworfSBGVERGX0NoYW5uZWxEZXNjcmlwdG9yOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfU2l6ZSAgICAgICAgICAgICAgIG5yT2ZDaGFubmVsRGVzY3JpcHRvcnM7CisgICAgRlRERl9DaGFubmVsRGVzY3JpcHRvciogY2hhbm5lbERlc2NyaXB0b3JzOworfSBGVERGX0NoYW5uZWxEZXNjcmlwdG9yTGlzdDsKKworLyoqCisgKiBcYnJpZWYgRGJtIGRhdGEgdHlwZQorICovCit0eXBlZGVmIGludDhfdCAgRlRERl9EQm07CisKK3R5cGVkZWYgdWludDhfdCBGVERGX0ZyYW1lVHlwZTsKKyNkZWZpbmUgRlRERl9CRUFDT05fRlJBTUUgICAgICAgICAgMAorI2RlZmluZSBGVERGX0RBVEFfRlJBTUUgICAgICAgICAgICAxCisjZGVmaW5lIEZUREZfQUNLTk9XTEVER0VNRU5UX0ZSQU1FIDIKKyNkZWZpbmUgRlRERl9NQUNfQ09NTUFORF9GUkFNRSAgICAgMworI2RlZmluZSBGVERGX0xMRE5fRlJBTUUgICAgICAgICAgICA0CisjZGVmaW5lIEZUREZfTVVMVElQVVJQT1NFX0ZSQU1FICAgIDUKKworLyoqCisgKiBcYnJpZWYgIENvbW1hbmQgZnJhbWUgSUQKKyAqIFxyZW1hcmsgU3VwcG9ydGVkIGNvbW1hbmQgZnJhbWUgSURzOgorICogICAgICAgICAtIEZUREZfQ09NTUFORF9BU1NPQ0lBVElPTl9SRVFVRVNUCisgKiAgICAgICAgIC0gRlRERl9DT01NQU5EX0FTU09DSUFUSU9OX1JFU1BPTlNFCisgKiAgICAgICAgIC0gRlRERl9DT01NQU5EX0RJU0FTU09DSUFUSU9OX05PVElGSUNBVElPTgorICogICAgICAgICAtIEZUREZfQ09NTUFORF9EQVRBX1JFUVVFU1QKKyAqICAgICAgICAgLSBGVERGX0NPTU1BTkRfUEFOX0lEX0NPTkZMSUNUX05PVElGSUNBVElPTgorICogICAgICAgICAtIEZUREZfQ09NTUFORF9PUlBIQU5fTk9USUZJQ0FUSU9OCisgKiAgICAgICAgIC0gRlRERl9DT01NQU5EX0JFQUNPTl9SRVFVRVNUCisgKiAgICAgICAgIC0gRlRERl9DT01NQU5EX0NPT1JESU5BVE9SX1JFQUxJR05NRU5UCisgKiAgICAgICAgIC0gRlRERl9DT01NQU5EX0dUU19SRVFVRVNUCisgKi8KK3R5cGVkZWYgdWludDhfdCBGVERGX0NvbW1hbmRGcmFtZUlkOworI2RlZmluZSBGVERGX0NPTU1BTkRfQVNTT0NJQVRJT05fUkVRVUVTVCAgICAgICAgICAxCisjZGVmaW5lIEZUREZfQ09NTUFORF9BU1NPQ0lBVElPTl9SRVNQT05TRSAgICAgICAgIDIKKyNkZWZpbmUgRlRERl9DT01NQU5EX0RJU0FTU09DSUFUSU9OX05PVElGSUNBVElPTiAgMworI2RlZmluZSBGVERGX0NPTU1BTkRfREFUQV9SRVFVRVNUICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZUREZfQ09NTUFORF9QQU5fSURfQ09ORkxJQ1RfTk9USUZJQ0FUSU9OIDUKKyNkZWZpbmUgRlRERl9DT01NQU5EX09SUEhBTl9OT1RJRklDQVRJT04gICAgICAgICAgNgorI2RlZmluZSBGVERGX0NPTU1BTkRfQkVBQ09OX1JFUVVFU1QgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZUREZfQ09NTUFORF9DT09SRElOQVRPUl9SRUFMSUdOTUVOVCAgICAgIDgKKyNkZWZpbmUgRlRERl9DT01NQU5EX0dUU19SRVFVRVNUICAgICAgICAgICAgICAgICAgOQorCisvKioKKyAqIFxicmllZiBTZWN1cml0eSBmcmFtZSBjb3VudGVyCisgKiBccmVtYXJrIFZhbGlkIHJhbmdlIDAuLjB4ZmZmZmZmZmYgKDQgb2N0ZXRzKSBpZiBmcmFtZSBjb3VudGVyIG1vZGUgZXF1YWxzIDQKKyAqIFxyZW1hcmsgVmFsaWQgcmFuZ2UgMC4uMHhmZmZmZmZmZmZmICg1IG9jdGV0cykgaWYgZnJhbWUgY291bnRlciBtb2RlIGVxdWFscyA1CisgKi8KK3R5cGVkZWYgdWludDY0X3QgRlRERl9GcmFtZUNvdW50ZXI7CisKKy8qKgorICogXGJyaWVmIFNlY3VyaXR5IGZyYW1lIGNvdW50ZXIgbW9kZQorICogXHJlbWFyayBWYWxpZCByYW5nZSA0Li41CisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9GcmFtZUNvdW50ZXJNb2RlOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfS2V5SWRNb2RlICAga2V5SWRNb2RlOworICAgIEZUREZfT2N0ZXQgICAgICAga2V5U291cmNlWyA4IF07CisgICAgRlRERl9LZXlJbmRleCAgICBrZXlJbmRleDsKKyAgICBGVERGX0FkZHJlc3NNb2RlIGRldmljZUFkZHJNb2RlOworICAgIEZUREZfUEFOSWQgICAgICAgZGV2aWNlUEFOSWQ7CisgICAgRlRERl9BZGRyZXNzICAgICBkZXZpY2VBZGRyZXNzOworfSBGVERGX0tleUlkTG9va3VwRGVzY3JpcHRvcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX1BBTklkICAgICAgICBQQU5JZDsKKyAgICBGVERGX1Nob3J0QWRkcmVzcyBzaG9ydEFkZHJlc3M7CisgICAgRlRERl9FeHRBZGRyZXNzICAgZXh0QWRkcmVzczsKKyAgICBGVERGX0ZyYW1lQ291bnRlciBmcmFtZUNvdW50ZXI7CisgICAgRlRERl9Cb29sZWFuICAgICAgZXhlbXB0OworfSBGVERGX0RldmljZURlc2NyaXB0b3I7CisKKy8qKgorICogXGJyaWVmICBEZXZpY2UgZGVzY3JpcHRvciBoYW5kbGUKKyAqIFxyZW1hcmsgVGhpcyBpcyB0aGUgaW5kZXggb2YgYSBkZXZpY2UgaW4gXGxpbmsgRlRERl9EZXZpY2VUYWJsZSBcZW5kbGluaworICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9EZXZpY2VEZXNjcmlwdG9ySGFuZGxlOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgRnJhbWUgdHlwZSAqLworICAgIEZUREZfRnJhbWVUeXBlICAgICAgZnJhbWVUeXBlOworICAgIC8qKiBcYnJpZWYgQ29tbWFuZCBmcmFtZSBJRCAqLworICAgIEZUREZfQ29tbWFuZEZyYW1lSWQgY29tbWFuZEZyYW1lSWQ7Cit9IEZUREZfS2V5VXNhZ2VEZXNjcmlwdG9yOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfU2l6ZSAgICAgICAgICAgICAgICAgICAgbnJPZktleUlkTG9va3VwRGVzY3JpcHRvcnM7CisgICAgRlRERl9LZXlJZExvb2t1cERlc2NyaXB0b3IqICBrZXlJZExvb2t1cERlc2NyaXB0b3JzOworICAgIEZUREZfU2l6ZSAgICAgICAgICAgICAgICAgICAgbnJPZkRldmljZURlc2NyaXB0b3JIYW5kbGVzOworICAgIEZUREZfRGV2aWNlRGVzY3JpcHRvckhhbmRsZSogZGV2aWNlRGVzY3JpcHRvckhhbmRsZXM7CisgICAgRlRERl9TaXplICAgICAgICAgICAgICAgICAgICBuck9mS2V5VXNhZ2VEZXNjcmlwdG9yczsKKyAgICBGVERGX0tleVVzYWdlRGVzY3JpcHRvciogICAgIGtleVVzYWdlRGVzY3JpcHRvcnM7CisgICAgRlRERl9PY3RldCAgICAgICAgICAgICAgICAgICBrZXlbIDE2IF07Cit9IEZUREZfS2V5RGVzY3JpcHRvcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX0ZyYW1lVHlwZSAgICAgIGZyYW1lVHlwZTsKKyAgICBGVERGX0NvbW1hbmRGcmFtZUlkIGNvbW1hbmRGcmFtZUlkOworICAgIEZUREZfU2VjdXJpdHlMZXZlbCAgc2VjdXJpdHlNaW5pbXVtOworICAgIEZUREZfQm9vbGVhbiAgICAgICAgZGV2aWNlT3ZlcnJpZGVTZWN1cml0eU1pbmltdW07CisgICAgRlRERl9CaXRtYXA4ICAgICAgICBhbGxvd2VkU2VjdXJpdHlMZXZlbHM7Cit9IEZUREZfU2VjdXJpdHlMZXZlbERlc2NyaXB0b3I7CisKKy8qKgorICogXGJyaWVmICBLZXkgdGFibGUKKyAqIFxyZW1hcmsgQXMgZm9sbG93ZXMgYW4gZXhhbXBsZSBob3cgdG8gaW5pdGlhbGl6ZSBhIGtleSB0YWJsZSBmb3IgdXNhZ2Ugd2l0aCBGVERGX1NFVF9SRVFVRVNUOgorICogXGNvZGUKKyAqIEZUREZfS2V5SWRMb29rdXBEZXNjcmlwdG9yICBsb29rdXBEZXNjcmlwdG9yc0tleTFbIF0gPSAKKyAqICAgICAgICAgIHsgeyAyLCB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwgNywgMCwgMCAwIH0sCisgKiAgICAgICAgICAgIHsgMCwgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sIDAsIDIsIDB4MTIzNCwgMHgwMDAxIH0gfTsKKyAqIEZUREZfS2V5SWRMb29rdXBEZXNjcmlwdG9yICBsb29rdXBEZXNjcmlwdG9yc0tleTJbIF0gPSAKKyAqICAgICAgICAgIHsgeyAxLCB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgNSwgMCwgMCwgMCB9IH07CisgKiBGVERGX0RldmljZURlc2NyaXB0b3JIYW5kbGUgZGV2aWNlRGVzY3JpcHRvckhhbmRsZXNLZXkxWyBdID0geyAwLCAyIH07CisgKiBGVERGX0RldmljZURlc2NyaXB0b3JIYW5kbGUgZGV2aWNlRGVzY3JpcHRvckhhbmRsZXNLZXkyWyBdID0geyAxIH07CisgKiBGVERGX0tleVVzYWdlRGVzY3JpcHRvciAgICAga2V5VXNhZ2VEZXNjcmlwdG9yS2V5MVsgXSA9IHsgeyAxLCAwIH0sIHsgMywgNCB9IH07CisgKiBGVERGX0tleVVzYWdlRGVzY3JpcHRvciAgICAga2V5VXNhZ2VEZXNjcmlwdG9yS2V5MlsgXSA9IHsgeyAxLCAwIH0gfTsKKyAqIEZUREZfS2V5RGVzY3JpcHRvciAgICAgICAgICBrZXlEZXNjcmlwdG9yc1sgXSA9IAorICogICAgICAgICAgeyB7IHNpemVvZiggbG9va3VwRGVzY3JpcHRvcnNLZXkxICkgLyBzaXplb2YoIEZUREZfS2V5SWRMb29rdXBEZXNjcmlwdG9yICksCisgKiAgICAgICAgICAgICAgbG9va3VwRGVzY3JpcHRvcnNLZXkxLAorICogICAgICAgICAgICAgIHNpemVvZiggZGV2aWNlRGVzY3JpcHRvckhhbmRsZXNLZXkxICkgLyBzaXplb2YoIEZUREZfRGV2aWNlRGVzY3JpcHRvckhhbmRsZSApLAorICogICAgICAgICAgICAgIGRldmljZURlc2NyaXB0b3JIYW5kbGVzS2V5MSwKKyAqICAgICAgICAgICAgICBzaXplb2YoIGtleVVzYWdlRGVzY3JpcHRvcktleTEgKSAvIHNpemVvZiggRlRERl9LZXlVc2FnZURlc2NyaXB0b3IgKSwKKyAqICAgICAgICAgICAgICBrZXlVc2FnZURlc2NyaXB0b3JLZXkxLAorICogICAgICAgICAgICAgIHsgMHg3ZSwgMHgzNywgMHgyZCwgMHg0MSwgMHhkZiwgMHg3NCwgMHg3MiwgMHgzZiwgMHg0YywgMHgzYSwgMHhhNywgMHg1MywgMHhhMSwgMHgxMSwgMHg0NiwgMHg4YiB9IH0sCisgKiAgICAgICAgICAgIHsgc2l6ZW9mKCBsb29rdXBEZXNjcmlwdG9yc0tleTIgKSAvIHNpemVvZiggRlRERl9LZXlJZExvb2t1cERlc2NyaXB0b3IgKSwKKyAqICAgICAgICAgICAgICBsb29rdXBEZXNjcmlwdG9yc0tleTIsCisgKiAgICAgICAgICAgICAgc2l6ZW9mKCBkZXZpY2VEZXNjcmlwdG9ySGFuZGxlc0tleTIgKSAvIHNpemVvZiggRlRERl9EZXZpY2VEZXNjcmlwdG9ySGFuZGxlICksCisgKiAgICAgICAgICAgICAgZGV2aWNlRGVzY3JpcHRvckhhbmRsZXNLZXkyLAorICogICAgICAgICAgICAgIHNpemVvZigga2V5VXNhZ2VEZXNjcmlwdG9yS2V5MiApIC8gc2l6ZW9mKCBGVERGX0tleVVzYWdlRGVzY3JpcHRvciApLAorICogICAgICAgICAgICAgIGtleVVzYWdlRGVzY3JpcHRvcktleTEsCisgKiAgICAgICAgICAgICAgeyAweGRmLCAweDc0LCAweDcyLCAweDNmLCAweDdlLCAweDM3LCAweDJkLCAweDQxLCAweDRjLCAweDNhLCAweGExLCAweDExLCAweDQ2LCAweDgsIDB4YTcsIDB4NTNiIH0gfSB9OworICogRlRERl9LZXlUYWJsZSAgICAgICAgICAgICAgIGtleVRhYmxlID0KKyAqICAgICAgICAgICB7IHNpemVvZigga2V5RGVzY3JpcHRvcnMgKSAvIHNpemVvZiggRlRERl9LZXlEZXNjcmlwdG9yICksIGtleURlc2NyaXB0b3JzIH07CisgKiBcZW5kY29kZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTnVtYmVyIG9mIGtleSBkZXNjcmlwdG9ycyBpbiB0aGUga2V5IHRhYmxlICovCisgICAgRlRERl9TaXplICAgICAgICAgICBuck9mS2V5RGVzY3JpcHRvcnM7CisgICAgLyoqIFxicmllZiBQb2ludGVyIHRvIHRoZSBmaXJzdCBrZXkgZGVzY3JpcHRvciBlbnRyeSAqLworICAgIEZUREZfS2V5RGVzY3JpcHRvcioga2V5RGVzY3JpcHRvcnM7Cit9IEZUREZfS2V5VGFibGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBOdW1iZXIgb2YgZGV2aWNlIGRlc2NyaXB0b3JzIGluIHRoZSBrZXkgdGFibGUgKi8KKyAgICBGVERGX1NpemUgICAgICAgICAgICAgIG5yT2ZEZXZpY2VEZXNjcmlwdG9yczsKKyAgICAvKiogXGJyaWVmIFBvaW50ZXIgdG8gdGhlIGZpcnN0IGRldmljZSBkZXNjcmlwdG9yIGVudHJ5ICovCisgICAgRlRERl9EZXZpY2VEZXNjcmlwdG9yKiBkZXZpY2VEZXNjcmlwdG9yczsKK30gRlRERl9EZXZpY2VUYWJsZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE51bWJlciBvZiBzZWN1cml0eSBsZXZlbCBkZXNjcmlwdG9ycyBpbiB0aGUga2V5IHRhYmxlICovCisgICAgRlRERl9TaXplICAgICAgICAgICAgICAgICAgICAgbnJPZlNlY3VyaXR5TGV2ZWxEZXNjcmlwdG9yczsKKyAgICAvKiogXGJyaWVmIFBvaW50ZXIgdG8gdGhlIGZpcnN0IHNlY3VyaXR5IGxldmVsIGRlc2NyaXB0b3IgZW50cnkgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWxEZXNjcmlwdG9yKiBzZWN1cml0eUxldmVsRGVzY3JpcHRvcnM7Cit9IEZUREZfU2VjdXJpdHlMZXZlbFRhYmxlOworCisvKioKKyAqIFxicmllZiAgSUUgdHlwZQorICogXHJlbWFyayBTdXBwb3J0ZWQgSUUgdHlwZXM6CisgKiAgICAgICAgIC0gRlRERl9TSE9SVF9JRQorICogICAgICAgICAtIEZUREZfTE9OR19JRQorICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9JRVR5cGU7CisjZGVmaW5lIEZUREZfU0hPUlRfSUUgMAorI2RlZmluZSBGVERGX0xPTkdfSUUgIDEKKwordHlwZWRlZiB1aW50OF90IEZUREZfSUVJZDsKKwordHlwZWRlZiB1aW50OF90IEZUREZfSUVMZW5ndGg7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBJRSB0eXBlICovCisgICAgRlRERl9JRVR5cGUgICB0eXBlOworICAgIC8qKiBcYnJpZWYgU3ViIElFIElEKi8KKyAgICBGVERGX0lFSWQgICAgIHN1YklEOworICAgIC8qKiBcYnJpZWYgU3ViIElFIGxlbmd0aCAqLworICAgIEZUREZfSUVMZW5ndGggbGVuZ3RoOworICAgIC8qKiBcYnJpZWYgUG9pbnRlciB0byBzdWIgSUUgY29udGVudCAqLworICAgIEZUREZfT2N0ZXQqICAgc3ViQ29udGVudDsKK30gRlRERl9TdWJJRURlc2NyaXB0b3I7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBOdW1iZXIgb2Ygc3ViIElFIGRlc2NyaXB0b3JzIGluIGFuIE1MTUUgcGF5bG9hZCBJRSAoSUQgPSAxKSAqLworICAgIEZUREZfU2l6ZSAgICAgICAgICAgICBuck9mU3ViSUVzOworICAgIC8qKiBcYnJpZWYgUG9pbnRlciB0byB0aGUgZmlyc3Qgc3ViIElFIGRlc2NyaXB0b3IgKi8KKyAgICBGVERGX1N1YklFRGVzY3JpcHRvciogc3ViSUVzOworfSBGVERGX1N1YklFTGlzdDsKKwordHlwZWRlZiB1bmlvbgoreworICAgIC8qKiBcYnJpZWYgSUUgY29udGVudCBpZiBub3QgYSBNTE1FIHBheWxvYWQgSUUgKElEID0gMSkgKi8KKyAgICBGVERGX09jdGV0KiAgICAgcmF3OworICAgIC8qKiBcYnJpZWYgSUUgY29udGVudCBpZiBhIE1MTUUgcGF5bG9hZCBJRSAoSUQgPSAxKSAqLworICAgIEZUREZfU3ViSUVMaXN0KiBuZXN0ZWQ7Cit9IEZUREZfSUVDb250ZW50OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgSUUgSUQgKi8KKyAgICBGVERGX0lFSWQgICAgICBJRDsKKyAgICAvKiogXGJyaWVmIENvbnRlbnQgbGVuZ3RoIG9mIHRoZSBJRSwgdW5kZWZpbmVkL3VudXNlZCBpbiBjYXNlIG9mIGEgTUxNRSBwYXlsb2FkIElFIChJRCA9IDEpICovCisgICAgRlRERl9JRUxlbmd0aCAgbGVuZ3RoOworICAgIC8qKiBcYnJpZWYgQ29udGVudCBvZiB0aGUgSUUgKi8KKyAgICBGVERGX0lFQ29udGVudCBjb250ZW50OworfSBGVERGX0lFRGVzY3JpcHRvcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE51bWJlciBvZiBJRSBkZXNjcmlwdG9ycyAqLworICAgIEZUREZfU2l6ZSAgICAgICAgICBuck9mSUVzOworICAgIC8qKiBcYnJpZWYgUG9pbnRlciB0byB0aGUgZmlyc3QgSUUgZGVzY3JpcHRvciAqLworICAgIEZUREZfSUVEZXNjcmlwdG9yKiBJRXM7Cit9IEZUREZfSUVMaXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCAqLworICAgIEZUREZfTXNnSWQgbXNnSWQ7Cit9IEZUREZfTXNnQnVmZmVyOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfREFUQV9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU291cmNlIGFkZHJlc3MgbW9kZSAqLworICAgIEZUREZfQWRkcmVzc01vZGUgICAgICAgICBzcmNBZGRyTW9kZTsKKyAgICAvKiogXGJyaWVmIERlc3RpbmF0aW9uIGFkZHJlc3MgbW9kZSAqLworICAgIEZUREZfQWRkcmVzc01vZGUgICAgICAgICBkc3RBZGRyTW9kZTsKKyAgICAvKiogXGJyaWVmIERlc3RpbmF0aW9uIFBBTiBJRCAqLworICAgIEZUREZfUEFOSWQgICAgICAgICAgICAgICBkc3RQQU5JZDsKKyAgICAvKiogXGJyaWVmIERlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKyAgICBGVERGX0FkZHJlc3MgICAgICAgICAgICAgZHN0QWRkcjsKKyAgICAvKiogXGJyaWVmIExlbmd0aCBvZiBNU0RVIHBheWxvYWQgKi8KKyAgICBGVERGX0RhdGFMZW5ndGggICAgICAgICAgbXNkdUxlbmd0aDsKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgTVNEVSBwYXlsb2FkIGRhdGEgYnVmZmVyLiBNdXN0IGJlIGZyZWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB1c2luZyBGVERGX1JFTF9EQVRBX0JVRkZFUgorICAgICAqICAgICAgICB3aGVuIGl0IHJlY2VpdmVzIHRoZSBGVERGX0RBVEFfQ09ORklSTSBtZXNzYWdlCisgICAgICovCisgICAgRlRERl9PY3RldCogICAgICAgICAgICAgIG1zZHU7CisgICAgLyoqIFxicmllZiBIYW5kbGUgKi8KKyAgICBGVERGX0hhbmRsZSAgICAgICAgICAgICAgbXNkdUhhbmRsZTsKKyAgICAvKiogXGJyaWVmIFdoZXRoZXIgdGhlIGRhdGEgZnJhbWUgbmVlZHMgdG8gYmUgYWNrbm93bGVkZ2VkIG9yICovCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgIGFja1RYOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICAgR1RTVFg7CisgICAgLyoqIAorICAgICAqIFxicmllZiBJbmRpY2F0aW9uIHdoZXRoZXIgdGhlIGZyYW1lIG11c3QgYmUgc2VuZCBkaXJlY3RseSBvciBiZSBxdWV1ZWQgdW50aWwgYSBEQVRBX1JFUVVFU1QgQ09NTUFORAorICAgICAqICAgICAgICBmcmFtZSBpcyByZWNlaXZlZAorICAgICAqLworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgICBpbmRpcmVjdFRYOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkgbGV2ZWwgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgICAgICAgc2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBJRCBtb2RlICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgICAgICAgIGtleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBzb3VyY2UgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgaW5kZXggKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAgICAgICAga2V5SW5kZXg7CisgICAgLyoqIFxicmllZiBGcmFtZSBjb250cm9sIG9wdGlvbiBiaXRtYXAgKi8KKyAgICBGVERGX0ZyYW1lQ29udHJvbE9wdGlvbnMgZnJhbWVDb250cm9sT3B0aW9uczsKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgIEhlYWRlciBJRSBsaXN0IHRvIGJlIGluc2VydGVkLgorICAgICAqICAgICAgICAgSWdub3JlZCBpZiB0aGUgRlRERl9JRVNfSU5DTFVERUQgZnJhbWUgY29udHJvbCBvcHRpb24gaXMgTk9UIHNldC4KKyAgICAgKiAgICAgICAgIFRoZSBJRSBsaXN0IG11c3QgYmUgbG9jYXRlZCBpbiByZW50ZW50aW9uIFJBTQorICAgICAqLworICAgIEZUREZfSUVMaXN0KiAgICAgICAgICAgICBoZWFkZXJJRUxpc3Q7CisgICAgLyoqCisgICAgICogXGJyaWVmICBQYXlsb2FkIElFIGxpc3QgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICogICAgICAgICBJZ25vcmVkIGlmIHRoZSBGVERGX0lFU19JTkNMVURFRCBmcmFtZSBjb250cm9sIG9wdGlvbiBpcyBOT1Qgc2V0LgorICAgICAqICAgICAgICAgVGhlIElFIGxpc3QgbXVzdCBiZSBsb2NhdGVkIGluIHJlbnRlbnRpb24gUkFNCisgICAgICovCisgICAgRlRERl9JRUxpc3QqICAgICAgICAgICAgIHBheWxvYWRJRUxpc3Q7CisgICAgLyoqIEluZGljYXRpb24gd2hldGhlciBhIERBVEEgb3IgTVVMVElQVVJQT1NFIGZyYW1lIG11c3QgYmUgc2V0ICovCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgIHNlbmRNdWx0aVB1cnBvc2U7CisgICAgLyoqIFxicmllZiBETyBOT1QgVVNFICovCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgIF9fcHJpdmF0ZTM7Cit9IEZUREZfRGF0YVJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9EQVRBX0lORElDQVRJT04gKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTb3VyY2UgYWRkcmVzcyBtb2RlICovCisgICAgRlRERl9BZGRyZXNzTW9kZSAgIHNyY0FkZHJNb2RlOworICAgIC8qKiBcYnJpZWYgU291cmNlIFBBTiBJRCAqLworICAgIEZUREZfUEFOSWQgICAgICAgICBzcmNQQU5JZDsKKyAgICAvKiogXGJyaWVmIFNvdXJjZSBhZGRyZXNzICovCisgICAgRlRERl9BZGRyZXNzICAgICAgIHNyY0FkZHI7CisgICAgLyoqIFxicmllZiBEZXN0aW5hdGlvbiBhZGRyZXNzIG1vZGUgKi8KKyAgICBGVERGX0FkZHJlc3NNb2RlICAgZHN0QWRkck1vZGU7CisgICAgLyoqIFxicmllZiBEZXN0aW5hdGlvbiBQQU4gSUQgKi8KKyAgICBGVERGX1BBTklkICAgICAgICAgZHN0UEFOSWQ7CisgICAgLyoqIFxicmllZiBEZXN0aW5hdGlvbiBhZGRyZXNzICovCisgICAgRlRERl9BZGRyZXNzICAgICAgIGRzdEFkZHI7CisgICAgLyoqIFxicmllZiBMZW5ndGggb2YgTVNEVSBwYXlsb2FkICovCisgICAgRlRERl9EYXRhTGVuZ3RoICAgIG1zZHVMZW5ndGg7CisgICAgLyoqIFxicmllZiBNU0RVIHBheWxvYWQgZGF0YSBidWZmZXIgTXVzdCBiZSBmcmVlZCBieSB0aGUgYXBwbGljYXRpb24gdXNpbmcgRlRERl9SRUxfREFUQV9CVUZGRVIgKi8KKyAgICBGVERGX09jdGV0KiAgICAgICAgbXNkdTsKKyAgICAvKiogXGJyaWVmIE1QRFUgbGluayBxdWFsaXR5ICovCisgICAgRlRERl9MaW5rUXVhbGl0eSAgIG1wZHVMaW5rUXVhbGl0eTsKKyAgICAvKiogXGJyaWVmIERhdGEgc2VxdWVuY2UgbnVtYmVyICovCisgICAgRlRERl9TTiAgICAgICAgICAgIERTTjsKKyAgICAvKiogXGJyaWVmIFRpbWVzdGFtcCBvZiB0aGUgdGltZSB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkICovCisgICAgRlRERl9UaW1lICAgICAgICAgIHRpbWVzdGFtcDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGxldmVsICovCisgICAgRlRERl9TZWN1cml0eUxldmVsIHNlY3VyaXR5TGV2ZWw7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgSUQgbW9kZSAqLworICAgIEZUREZfS2V5SWRNb2RlICAgICBrZXlJZE1vZGU7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgc291cmNlICovCisgICAgRlRERl9PY3RldCAgICAgICAgIGtleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IGluZGV4ICovCisgICAgRlRERl9LZXlJbmRleCAgICAgIGtleUluZGV4OworICAgIC8qKiAvYnJpZWYgUGF5bG9hZCBJRSBsaXN0PGJyPgorICAgICAqICAgICAgICAgVGhlIHdob2xlIHBheWxvYWQgSUUgbGlzdCAoaW5jbHVkaW5nIElFIGRlc2NyaXB0b3JzLCBTdWIgSUUgZGVzY3JpcHRvcnMgYW5kIGNvbnRlbnQpCisgICAgICogICAgICAgICBpcyBhbGxvY2F0ZWQgaW4gb25lIGRhdGEgYnVmZmVyIHRoYXQgbXVzdCBiZSBmcmVlZCBieSB0aGUgYXBwbGljYXRpb24gdXNpbmcgRlRERl9SRUxfREFUQV9CVUZGRVIKKyAgICAgKiAgICAgICAgIHdpdGggdGhlIElFTGlzdCBwb2ludGVyIGFzIHBhcmFtZXRlcgorICAgICAqLworICAgIEZUREZfSUVMaXN0KiAgICAgICBwYXlsb2FkSUVMaXN0OworfSBGVERGX0RhdGFJbmRpY2F0aW9uOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfREFUQV9DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgIG1zZ0lkOworICAgIC8qKiAvYnJpZWYgVGhlIGhhbmRsZSBnaXZlbiBieSB0aGUgYXBwbGljYXRpb24gaW4gdGhlIGNvcnJlc3BvZGluZyBGVERGX0RBVEFfUkVRVUVTVCAqLworICAgIEZUREZfSGFuZGxlICAgICAgICBtc2R1SGFuZGxlOworICAgIC8qKiAvYnJpZWYgVGltZXN0bWFwIG9mIHRoZSB0aW1lIHRoZSBmcmFtZSBoYXMgYmVlbiBzZW50ICovCisgICAgRlRERl9UaW1lICAgICAgICAgIHRpbWVzdGFtcDsKKyAgICAvKiogL2JyaWVmIFN0YXR1cyBvZiB0aGUgZGF0YSByZXF1ZXN0ICovCisgICAgRlRERl9TdGF0dXMgICAgICAgIHN0YXR1czsKKyAgICAvKiogL2JyaWVmIE51bWJlciBvZiBiYWNrb2ZmcywgdW5kZWZpbmVkIGluIGNhc2Ugc3RhdHVzIG5vdCBlcXVhbCB0byBGVERGX1NVQ0NFU1Mgb3IgVFNDSCBlbmFibGVkICovCisgICAgRlRERl9OdW1PZkJhY2tvZmZzIG51bU9mQmFja29mZnM7CisgICAgLyoqIC9icmllZiBEYXRhIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgc2VudCBmcmFtZSAqLworICAgIEZUREZfU04gICAgICAgICAgICBEU047CisgICAgLyoqIC9icmllZiBBY2tub3dsZWRnZW1lbnQgcGF5bG9hZCBJRSBsaXN0PGJyPgorICAgICAqICAgICAgICAgVGhlIHdob2xlIHBheWxvYWQgSUUgbGlzdCAoaW5jbHVkaW5nIElFIGRlc2NyaXB0b3JzLCBTdWIgSUUgZGVzY3JpcHRvcnMgYW5kIGNvbnRlbnQpCisgICAgICogICAgICAgICBpcyBhbGxvY2F0ZWQgaW4gb25lIGRhdGEgYnVmZmVyIHRoYXQgbXVzdCBiZSBmcmVlZCBieSB0aGUgYXBwbGljYXRpb24gdXNpbmcgRlRERl9SRUxfREFUQV9CVUZGRVIKKyAgICAgKiAgICAgICAgIHdpdGggdGhlIElFTGlzdCBwb2ludGVyIGFzIHBhcmFtZXRlcgorICAgICAqLworICAgIEZUREZfSUVMaXN0KiAgICAgICBhY2tQYXlsb2FkOworfSBGVERGX0RhdGFDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfUFVSR0VfUkVRVUVTVCAqLworICAgIEZUREZfTXNnSWQgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgSGFuZGxlIHRoZSBkYXRhIHJlcXVlc3QgdG8gYmUgcHVyZ2VkICovCisgICAgRlRERl9IYW5kbGUgbXNkdUhhbmRsZTsKK30gRlRERl9QdXJnZVJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9QVVJHRV9DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBIYW5kbGUgb2YgdGhlIHB1cmdlZCBkYXRhIHJlcXVlc3QgKi8KKyAgICBGVERGX0hhbmRsZSBtc2R1SGFuZGxlOworICAgIC8qKiAvYnJpZWYgU3RhdHVzIG9mIHRoZSBwdXJnZSByZXF1ZXN0ICovCisgICAgRlRERl9TdGF0dXMgc3RhdHVzOworfSBGVERGX1B1cmdlQ29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0FTU09DSUFURV9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgbnVtYmVyIHRvIGJlIHVzZWQgZm9yIHRoZSBhc3NvY2lhdGUgcmVxdWVzdC4gSWdub3JlZCBpbiBUU0NIIG1vZGUgKi8KKyAgICBGVERGX0NoYW5uZWxOdW1iZXIgICAgIGNoYW5uZWxOdW1iZXI7CisgICAgLyoqIFxicmllZiBDaGFubmVsIHBhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIGFzc29jaWF0ZSByZXF1ZXN0LiBJZ25vcmVkIGluIFRTQ0ggbW9kZSAqLworICAgIEZUREZfQ2hhbm5lbFBhZ2UgICAgICAgY2hhbm5lbFBhZ2U7CisgICAgLyoqIFxicmllZiBDb29yZGluYXRvciBhZGRyZXNzIG1vZGUgKi8KKyAgICBGVERGX0FkZHJlc3NNb2RlICAgICAgIGNvb3JkQWRkck1vZGU7CisgICAgLyoqIFxicmllZiBDb29yZGluYXRvciBQQU4gSUQgKi8KKyAgICBGVERGX1BBTklkICAgICAgICAgICAgIGNvb3JkUEFOSWQ7CisgICAgLyoqIFxicmllZiBDb29yZGluYXRvciBhZGRyZXNzICovCisgICAgRlRERl9BZGRyZXNzICAgICAgICAgICBjb29yZEFkZHI7CisgICAgLyoqCisgICAgICogXGJyaWVmIENhcGFiaWxsaXR5IGluZm9ybWF0aW9uIGJpdG1hcC4gVGhlIGZvbGxvd2luZyBjYXBhYmlsaXRpZXMgYXJlIGRlZmluZWQ6PGJyPgorICAgICAqICAgICAgICBGVERGX0NBUEFCSUxJVFlfSVNfRkZEOiBEZXZpY2UgaXMgYSBmdWxsIGZ1bmN0aW9uIGRldmljZTxicj4KKyAgICAgKiAgICAgICAgRlRERl9DQVBBQklMSVRZX0FDX1BPV0VSOiBEZXZpY2UgaGFzIEFDIHBvd2VyPGJyPgorICAgICAqICAgICAgICBGVERGX0NBUEFCSUxJVFlfUkVDRUlWRVJfT05fV0hFTl9JRExFOiBEZXZpY2UgcmVjZWl2ZXIgaXMgb24gd2hlbiBpZGxlPGJyPgorICAgICAqICAgICAgICBGVERGX0NBUEFCSUxJVFlfRkFTVF9BU1NPQ0lBVElPTjogRGV2aWNlIHdhbnRzIGEgZmFzdCBhc3NvY2lhdGlvbjxicj4KKyAgICAgKiAgICAgICAgRlRERl9DQVBBQklMSVRZX1NVUFBPUlRTX1NFQ1VSSVRZOiBEZXZpY2Ugc3VwcG9ydHMgc2VjdXJpdHk8YnI+CisgICAgICogICAgICAgIEZUREZfQ0FQQUJJTElUWV9XQU5UU19TSE9SVF9BRERSRVNTOiBEZXZpY2Ugd2FudHMgc2hvcnQgYWRkcmVzczxicj4KKyAgICAgKi8KKyAgICBGVERGX0JpdG1hcDggICAgICAgICAgIGNhcGFiaWxpdHlJbmZvcm1hdGlvbjsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGxldmVsICovCisgICAgRlRERl9TZWN1cml0eUxldmVsICAgICBzZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAgICAgIGtleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBzb3VyY2UgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAgICAgIGtleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IGluZGV4ICovCisgICAgRlRERl9LZXlJbmRleCAgICAgICAgICBrZXlJbmRleDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9DaGFubmVsT2Zmc2V0ICAgICBjaGFubmVsT2Zmc2V0OworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0hvcHBpbmdTZXF1ZW5jZUlkIGhvcHBpbmdTZXF1ZW5jZUlkOworICAgIC8qKiBcYnJpZWYgRE8gTk9UIFVTRSAqLworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgX19wcml2YXRlMzsKK30gRlRERl9Bc3NvY2lhdGVSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfQVNTT0NJQVRFX0lORElDQVRJT04gKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgRXh0ZW5kZWQgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHRoYXQgZGlkIHRoZSBhc3NvY2lhdGlvbiByZXF1ZXN0ICovCisgICAgRlRERl9FeHRBZGRyZXNzICAgICAgICBkZXZpY2VBZGRyZXNzOworICAgIC8qKgorICAgICAqIFxicmllZiBDYXBhYmlsbGl0eSBpbmZvcm1hdGlvbiBiaXRtYXAuIFRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzIGFyZSBkZWZpbmVkOjxicj4KKyAgICAgKiAgICAgICAgRlRERl9DQVBBQklMSVRZX0lTX0ZGRDogRGV2aWNlIGlzIGEgZnVsbCBmdW5jdGlvbiBkZXZpY2U8YnI+CisgICAgICogICAgICAgIEZUREZfQ0FQQUJJTElUWV9BQ19QT1dFUjogRGV2aWNlIGhhcyBBQyBwb3dlcjxicj4KKyAgICAgKiAgICAgICAgRlRERl9DQVBBQklMSVRZX1JFQ0VJVkVSX09OX1dIRU5fSURMRTogRGV2aWNlIHJlY2VpdmVyIGlzIG9uIHdoZW4gaWRsZTxicj4KKyAgICAgKiAgICAgICAgRlRERl9DQVBBQklMSVRZX0ZBU1RfQVNTT0NJQVRJT046IERldmljZSB3YW50cyBhIGZhc3QgYXNzb2NpYXRpb248YnI+CisgICAgICogICAgICAgIEZUREZfQ0FQQUJJTElUWV9TVVBQT1JUU19TRUNVUklUWTogRGV2aWNlIHN1cHBvcnRzIHNlY3VyaXR5PGJyPgorICAgICAqICAgICAgICBGVERGX0NBUEFCSUxJVFlfV0FOVFNfU0hPUlRfQUREUkVTUzogRGV2aWNlIHdhbnRzIHNob3J0IGFkZHJlc3M8YnI+CisgICAgICovCisgICAgRlRERl9CaXRtYXA4ICAgICAgICAgICBjYXBhYmlsaXR5SW5mb3JtYXRpb247CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBsZXZlbCAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbCAgICAgc2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBJRCBtb2RlICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgICAgICBrZXlJZE1vZGU7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgc291cmNlICovCisgICAgRlRERl9PY3RldCAgICAgICAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBpbmRleCAqLworICAgIEZUREZfS2V5SW5kZXggICAgICAgICAga2V5SW5kZXg7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfQ2hhbm5lbE9mZnNldCAgICAgY2hhbm5lbE9mZnNldDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9Ib3BwaW5nU2VxdWVuY2VJZCBob3BwaW5nU2VxdWVuY2VJZDsKK30gRlRERl9Bc3NvY2lhdGVJbmRpY2F0aW9uOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfQVNTT0NJQVRFX1JFU1BPTlNFICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIEV4dGVuZGVkIGFkZHJlc3Mgb2YgdGhlIGRldmljZSB0aGF0IGRpZCBhc3NvY2lhdGlvbiByZXF1ZXN0IGFuZCB0byB3aGljaCB0aGUgcmVzcG9uc2UgbmVlZHMgdG8gYmUgc2VuZCAqLworICAgIEZUREZfRXh0QWRkcmVzcyAgICAgICAgZGV2aWNlQWRkcmVzczsKKyAgICAvKiogXGJyaWVmIFRoZSBzaG9ydCBhZGRyZXNzIGZvciB0aGUgZGV2aWNlIHRoYXQgZGlkIHRoZSBhc3NvY2lhdGUgcmVxdWVzdCAqLworICAgIEZUREZfU2hvcnRBZGRyZXNzICAgICAgYXNzb2NTaG9ydEFkZHJlc3M7CisgICAgLyoqIFxicmllZiBUaGUgYXNzb2NpYXRpb24gc3RhdHVzIG9mIHRoZSBhc3NvY2lhdGUgcmVxdWVzdCAqLworICAgIEZUREZfQXNzb2NpYXRpb25TdGF0dXMgc3RhdHVzOworICAgIC8qKiBcYnJpZWYgSW5kaWNhdGlvbiB3aGV0aGVyIHRoaXMgYSByZXNwb25zZSB0byBmYXN0IG9yIG5vcm1hbCBhc3NvY2lhdGlvbiByZXF1ZXN0ICovCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICBmYXN0QTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGxldmVsICovCisgICAgRlRERl9TZWN1cml0eUxldmVsICAgICBzZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAgICAgIGtleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBzb3VyY2UgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAgICAgIGtleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IGluZGV4ICovCisgICAgRlRERl9LZXlJbmRleCAgICAgICAgICBrZXlJbmRleDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9DaGFubmVsT2Zmc2V0ICAgICBjaGFubmVsT2Zmc2V0OworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0xlbmd0aCAgICAgICAgICAgIGhvcHBpbmdTZXF1ZW5jZUxlbmd0aDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9PY3RldCogICAgICAgICAgICBob3BwaW5nU2VxdWVuY2U7CisgICAgLyoqIFxicmllZiBETyBOT1QgVVNFICovCisgICAgdWludDhfdCAgICAgICAgICAgICAgICBfX3ByaXZhdGUzOworfSBGVERGX0Fzc29jaWF0ZVJlc3BvbnNlOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfQVNTT0NJQVRFX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBUaGUgc2hvcnQgYWRkZHJlc3MgYXNzaWduZWQgYnkgdGhlIGNvb3JkaW5hdG9yICovCisgICAgRlRERl9TaG9ydEFkZHJlc3MgIGFzc29jU2hvcnRBZGRyZXNzOworICAgIC8qKiBcYnJpZWYgU3RhdHVzIG9mIHRoZSBhc3NvY2lhdGUgcmVxdWVzdCAqLworICAgIEZUREZfU3RhdHVzICAgICAgICBzdGF0dXM7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBsZXZlbCAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbCBzZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAga2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBpbmRleCAqLworICAgIEZUREZfS2V5SW5kZXggICAgICBrZXlJbmRleDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9DaGFubmVsT2Zmc2V0IGNoYW5uZWxPZmZzZXQ7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfTGVuZ3RoICAgICAgICBob3BwaW5nU2VxdWVuY2VMZW5ndGg7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfT2N0ZXQqICAgICAgICBob3BwaW5nU2VxdWVuY2U7Cit9IEZUREZfQXNzb2NpYXRlQ29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0RJU0FTU09DSUFURV9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBEZXZpY2UgYWRkcmVzcyBtb2RlICovCisgICAgRlRERl9BZGRyZXNzTW9kZSAgICAgICAgZGV2aWNlQWRkck1vZGU7CisgICAgLyoqIFxicmllZiBEZXZpY2UgUEFOIElEICovCisgICAgRlRERl9QQU5JZCAgICAgICAgICAgICAgZGV2aWNlUEFOSWQ7CisgICAgLyoqIFxicmllZiBEZXZpY2UgYWRkcmVzcyAqLworICAgIEZUREZfQWRkcmVzcyAgICAgICAgICAgIGRldmljZUFkZHJlc3M7CisgICAgLyoqIFxicmllZiBEaXNhc3NvY2lhdGUgcmVhc29uICovCisgICAgRlRERl9EaXNhc3NvY2lhdGVSZWFzb24gZGlzYXNzb2NpYXRlUmVhc29uOworICAgIC8qKgorICAgICAqIFxicmllZiBJbmRpY2F0aW9uIHdoZXRoZXIgdGhlIGRpc2Fzc29jaWF0ZSByZXF1ZXN0IG11c3QgYmUgc2VuZCBkaXJlY3RseSBvciBiZSBxdWV1ZWQgdW50aWwgYQorICAgICAqICAgICAgICBEQVRBX1JFUVVFU1QgY29tbWFuZCBmcmFtZSBpcyByZWNlaXZlZAorICAgICAqLworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIHR4SW5kaXJlY3Q7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBsZXZlbCAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbCAgICAgIHNlY3VyaXR5TGV2ZWw7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgSUQgbW9kZSAqLworICAgIEZUREZfS2V5SWRNb2RlICAgICAgICAgIGtleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBzb3VyY2UgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBpbmRleCAqLworICAgIEZUREZfS2V5SW5kZXggICAgICAgICAgIGtleUluZGV4OworICAgIC8qKiBcYnJpZWYgRE8gTk9UIFVTRSAqLworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIF9fcHJpdmF0ZTM7Cit9IEZUREZfRGlzYXNzb2NpYXRlUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0RJU0FTU09DSUFURV9JTkRJQ0FUSU9OICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBFeHRlbmRlZCBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgdGhhdCBkaWQgZGlzYXNzb2NpYXRlIHJlcXVlc3QgKi8KKyAgICBGVERGX0V4dEFkZHJlc3MgICAgICAgICBkZXZpY2VBZGRyZXNzOworICAgIC8qKiBcYnJpZWYgRGlzYXNzb2NpYXRlIHJlYXNvbiAqLworICAgIEZUREZfRGlzYXNzb2NpYXRlUmVhc29uIGRpc2Fzc29jaWF0ZVJlYXNvbjsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGxldmVsICovCisgICAgRlRERl9TZWN1cml0eUxldmVsICAgICAgc2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBJRCBtb2RlICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgICAgICAga2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICAgICAgIGtleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IGluZGV4ICovCisgICAgRlRERl9LZXlJbmRleCAgICAgICAgICAga2V5SW5kZXg7Cit9IEZUREZfRGlzYXNzb2NpYXRlSW5kaWNhdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0RJU0FTU09DSUFURV9DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIERpc2Fzc29jaWF0ZSByZXF1ZXN0IHN0YXR1cyAqLworICAgIEZUREZfU3RhdHVzICAgICAgc3RhdHVzOworICAgIC8qKiBcYnJpZWYgQWRkcmVzcyBtb2RlIG9mIHRoZSBkZXZpY2UgdGhhdCB3YW50L211c3QgZGlzYXNzb2NpYXRlICovCisgICAgRlRERl9BZGRyZXNzTW9kZSBkZXZpY2VBZGRyTW9kZTsKKyAgICAvKiogXGJyaWVmIFBBTiBJRCBvZiB0aGUgZGV2aWNlIHRoYXQgd2FudC9tdXN0IGRpc2Fzc29jaWF0ZSAqLworICAgIEZUREZfUEFOSWQgICAgICAgZGV2aWNlUEFOSWQ7CisgICAgLyoqIFxicmllZiBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgdGhhdCB3YW50L211c3QgZGlzYXNzb2NpYXRlICovCisgICAgRlRERl9BZGRyZXNzICAgICBkZXZpY2VBZGRyZXNzOworfSBGVERGX0Rpc2Fzc29jaWF0ZUNvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9CRUFDT05fTk9USUZZX0lORENBVElPTiAqLworICAgIEZUREZfTXNnSWQgICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBCZWFjb24gc2VxdWVuY2UgbnVtYmVyLCB2YWxpZCBvbmx5IHdoZW4gYmVhY29uIHR5cGUgaXMgRlRERl9OT1JNQUxfQkVBQ09OICovCisgICAgRlRERl9TTiAgICAgICAgICAgICBCU047CisgICAgLyoqIFxicmllZiBQQU4gZGVzY3JpcHRvciovCisgICAgRlRERl9QQU5EZXNjcmlwdG9yKiBQQU5EZXNjcmlwdG9yOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0JpdG1hcDggICAgICAgIHBlbmRBZGRyU3BlYzsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9BZGRyZXNzKiAgICAgICBhZGRyTGlzdDsKKyAgICAvKiogXGJyaWVmIExlbmd0aCBvZiB0aGUgYmVhY29uIHBheWxvYWQgKi8KKyAgICBGVERGX0RhdGFMZW5ndGggICAgIHNkdUxlbmd0aDsKKyAgICAvKiogXGJyaWVmIEJlYWNvbiBwYXlsb2FkICovCisgICAgRlRERl9PY3RldCogICAgICAgICBzZHU7CisgICAgLyoqIFxicmllZiBFbmhhbmNlZCBiZWFjb24gc2VxdWVuY2UgbnVtYmVyLCB2YWxpZCBvbmx5IHdoZW4gYmVhY29uIHR5cGUgaXMgRlRERl9FTkhBTkNFRF9CRUFDT04gKi8KKyAgICBGVERGX1NOICAgICAgICAgICAgIEVCU047CisgICAgLyoqIFxicmllZiBCZWFjb24gdHlwZSAqLworICAgIEZUREZfQmVhY29uVHlwZSAgICAgYmVhY29uVHlwZTsKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgUGF5bG9hZCBJRSBsaXN0PGJyPgorICAgICAqICAgICAgICBUaGUgd2hvbGUgUGF5bG9hZCBJRSBsaXN0IChpbmNsdWRpbmcgSUUgZGVzY3JpcHRvcnMsIFN1YiBJRSBkZXNjcmlwdG9ycyBhbmQgY29udGVudCkKKyAgICAgKiAgICAgICAgaXMgYWxsb2NhdGUgaW4gb25lIGRhdGEgYnVmZmVyIHRoYXQgbXVzdCBiZSBmcmVlZCBieSB0aGUgYXBwbGljYXRpb24gdXNpbmcgRlRERl9SRUxfREFUQV9CVUZGRVIKKyAgICAgKiAgICAgICAgd2l0aCB0aGUgSUVMaXN0IHBvaW50ZXIgYXMgcGFyYW1ldGVyLgorICAgICAqLworICAgIEZUREZfSUVMaXN0KiAgICAgICAgSUVMaXN0OworICAgIC8qKgorICAgICAqIFxicmllZiBUaW1lc3RhbXAgb2YgdGhlIHRpbWUgdGhlIGJlYWNvbiBmcmFtZSB3YXMgcmVjZWl2ZWQ8YnI+CisgICAgICogICAgICAgIEluIFRTQ0ggbW9kZSB0aGlzIHRpbWVzdGFtcCBzaG91bGQgYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIFRTQ0ggdGltZXNsb3Qgc3RhcnQgdGltZQorICAgICAqICAgICAgICByZXF1aXJlZCBpbiBhIEZUREZfVFNDSF9NT0RFX1JFUVVFU1QgbWVzc2FnZQorICAgICAqLworICAgIEZUREZfVGltZTY0ICAgICAgICAgdGltZXN0YW1wOworfSBGVERGX0JlYWNvbk5vdGlmeUluZGljYXRpb247CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9DT01NX1NUQVRVU19JTkRJQ0FUSU9OICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgUEFOIElEIG9mIHRoZSBmcmFtZSBjYXVzaW5nIHRoZSBlcnJvciAqLworICAgIEZUREZfUEFOSWQgICAgICAgICBQQU5JZDsKKyAgICAvKiogXGJyaWVmIFNvdXJjZSBhZGRyZXNzIG1vZGUgb2YgdGhlIGZyYW1lIGNhdXNpbmcgdGhlIGVycm9yICAqLworICAgIEZUREZfQWRkcmVzc01vZGUgICBzcmNBZGRyTW9kZTsKKyAgICAvKiogXGJyaWVmIFNvdXJjZSBhZGRyZXNzIG9mIHRoZSBmcmFtZSBjYXVzaW5nIHRoZSBlcnJvciAqLworICAgIEZUREZfQWRkcmVzcyAgICAgICBzcmNBZGRyOworICAgIC8qKiBcYnJpZWYgRGVzdGluYXRpb24gYWRkcmVzcyBtb2RlIG9mIHRoZSBmcmFtZSBjYXVzaW5nIHRoZSBlcnJvciAqLworICAgIEZUREZfQWRkcmVzc01vZGUgICBkc3RBZGRyTW9kZTsKKyAgICAvKiogXGJyaWVmIERlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIGZyYW1lIGNhdXNpbmcgdGhlIGVycm9yICovCisgICAgRlRERl9BZGRyZXNzICAgICAgIGRzdEFkZHI7CisgICAgLyoqIFxicmllZiBFcnJvciBzdGF0dXMgKi8KKyAgICBGVERGX1N0YXR1cyAgICAgICAgc3RhdHVzOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkgbGV2ZWwgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgc2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBJRCBtb2RlICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgIGtleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBzb3VyY2UgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgaW5kZXggKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAga2V5SW5kZXg7Cit9IEZUREZfQ29tbVN0YXR1c0luZGljYXRpb247CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9HRVRfUkVRVUVTVCAqLworICAgIEZUREZfTXNnSWQgICAgICAgIG1zZ0lkOworICAgIEZUREZfUElCQXR0cmlidXRlIFBJQkF0dHJpYnV0ZTsKK30gRlRERl9HZXRSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfR0VUX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgICAgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFN0YXR1cyBvZiB0aGUgZ2V0IHJlcXVlc3QgKi8KKyAgICBGVERGX1N0YXR1cyAgICAgICAgICAgICAgICAgICBzdGF0dXM7CisgICAgLyoqIFxicmllZiBQSUIgYXR0cmlidXRlIElEIG9mIFBJQiBhdHRyaWJ1dGUgZ290dGVuICovCisgICAgRlRERl9QSUJBdHRyaWJ1dGUgICAgICAgICAgICAgUElCQXR0cmlidXRlOworICAgIC8qKgorICAgICAqIFxicmllZiBQb2ludGVyIHRvIHRoZSBQSUIgYXR0cmlidXRlIHZhbHVlIHRvIGJlIHNldDxicj4KKyAgICAgKiAgICAgICAgRWFjaCBQSUIgYXR0cmlidXRlIGhhcyBpdHMgb3duIHR5cGUsIHNlZSBcbGluayBGVERGX1BJQkF0dHJpYnV0ZSBcZW5kbGluazxicj4KKyAgICAgKiAgICAgICAgSW4gb3JkZXIgdG8gYWNjZXNzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgdGhlIGFwcGxpY2F0aW9uIG11c3QgY2FzdCB0aGlzIHBpbnRlcgorICAgICAqICAgICAgICB0byB0aGUgY29ycmVjdCB0eXBlLiAKKyAgICAgKi8KKyAgICBjb25zdCBGVERGX1BJQkF0dHJpYnV0ZVZhbHVlKiBQSUJBdHRyaWJ1dGVWYWx1ZTsKK30gRlRERl9HZXRDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfU0VUX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgICAgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFBJQiBhdHRyaWJ1dGUgSUQgb2YgYXR0cmlidXRlIHRvIGJlIHNldCAqLworICAgIEZUREZfUElCQXR0cmlidXRlICAgICAgICAgICAgIFBJQkF0dHJpYnV0ZTsKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgUG9pbnRlciB0byB0aGUgUElCIGF0dHJpYnV0ZSB2YWx1ZSB0byBiZSBzZXQ8YnI+CisgICAgICogICAgICAgIEVhY2ggUElCIGF0dHJpYnV0ZSBoYXMgaXRzIG93biB0eXBlLCBzZWUgXGxpbmsgRlRERl9QSUJBdHRyaWJ1dGUgXGVuZGxpbms8YnI+CisgICAgICogICAgICAgIEZUREYgZG9lcyBhIHNoYWxsb3cgY29weSBvZiB0aGUgUElCIGF0dHJpYnV0ZS4gU28gaWYgdGhlIFBJQiBhdHRyaWJ1dGUgY29udGFpbnMgcG9pbnRlcnMgdG8KKyAgICAgKiAgICAgICAgb3RoZXIgZGF0YSB0aGlzIGRhdGEgaXMgTk9UIGNvcGllZCBieSBGVERGLiBUaGUgYXBwbGljYXRpb24gbXVzdCBtYWtlIHN1cmUgdGhhdCBkYXRhIHJlZmVycmVkCisgICAgICogICAgICAgIGZyb20gYSBQSUIgYXR0cmlidXRlIGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGluIHJldGVudGlvbiBSQU0uCisgICAgICovCisgICAgY29uc3QgRlRERl9QSUJBdHRyaWJ1dGVWYWx1ZSogUElCQXR0cmlidXRlVmFsdWU7Cit9IEZUREZfU2V0UmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0dFVF9DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTZXQgcmVxdWVzdCBzdGF0dXMgKi8KKyAgICBGVERGX1N0YXR1cyAgICAgICBzdGF0dXM7CisgICAgLyoqIFxicmllZiBQSUIgQXR0cmlidXRlIElEIG9mIFBJQiBhdHRyaWJ1dGUgdGhhdCBoYXMgYmVlbiBzZXQgKi8KKyAgICBGVERGX1BJQkF0dHJpYnV0ZSBQSUJBdHRyaWJ1dGU7Cit9IEZUREZfU2V0Q29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX01zZ0lkICAgICAgICAgICAgIG1zZ0lkOworICAgIEZUREZfR1RTQ2hhcmF0ZXJpc3RpY3MgR1RTQ2hhcmF0ZXJpc3RpY3M7CisgICAgRlRERl9TZWN1cml0eUxldmVsICAgICBzZWN1cml0eUxldmVsOworICAgIEZUREZfS2V5SWRNb2RlICAgICAgICAga2V5SWRNb2RlOworICAgIEZUREZfT2N0ZXQgICAgICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgRlRERl9LZXlJbmRleCAgICAgICAgICBrZXlJbmRleDsKK30gRlRERl9HdHNSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfTXNnSWQgICAgICAgICAgICAgbXNnSWQ7CisgICAgRlRERl9HVFNDaGFyYXRlcmlzdGljcyBHVFNDaGFyYXRlcmlzdGljczsKKyAgICBGVERGX1N0YXR1cyAgICAgICAgICAgIHN0YXR1czsKK30gRlRERl9HdHNDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfTXNnSWQgICAgICAgICAgICAgbXNnSWQ7CisgICAgRlRERl9TaG9ydEFkZHJlc3MgICAgICBkZXZpY2VBZGRyZXNzOworICAgIEZUREZfR1RTQ2hhcmF0ZXJpc3RpY3MgR1RTQ2hhcmF0ZXJpc3RpY3M7CisgICAgRlRERl9TZWN1cml0eUxldmVsICAgICBzZWN1cml0eUxldmVsOworICAgIEZUREZfS2V5SWRNb2RlICAgICAgICAga2V5SWRNb2RlOworICAgIEZUREZfT2N0ZXQgICAgICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgRlRERl9LZXlJbmRleCAgICAgICAgICBrZXlJbmRleDsKK30gRlRERl9HdHNJbmRpY2F0aW9uOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfT1JQSEFOX0lORElDQVRJT04gKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBFeHRlbmRlZCBhZGRyZXNzIG9mIG9ycGhhbmVkIGRldmljZSAqLworICAgIEZUREZfRXh0QWRkcmVzcyAgICBvcnBoYW5BZGRyZXNzOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkgbGV2ZWwgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgc2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBJRCBtb2RlICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgIGtleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBzb3VyY2UgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgaW5kZXggKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAga2V5SW5kZXg7Cit9IEZUREZfT3JwaGFuSW5kaWNhdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX09SUEhBTl9SRVNQT05TRSAqLworICAgIEZUREZfTXNnSWQgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIEV4dGVuZGVkIGFkZHJlc3Mgb2Ygb3JwaGFuZWQgZGV2aWNlICovCisgICAgRlRERl9FeHRBZGRyZXNzICAgIG9ycGhhbkFkZHJlc3M7CisgICAgLyoqIFxicmllZiBTaG9ydCBhZGRyZXNzIG9mIG9ycGhhbmVkIGRldmljZSAqLworICAgIEZUREZfU2hvcnRBZGRyZXNzICBzaG9ydEFkZHJlc3M7CisgICAgLyoqIFxicmllZiBJbmRpY2F0aW9uIHdoZXRoZXIgdGhlIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb29yZGluYXRvciBvciBub3QgKi8KKyAgICBGVERGX0Jvb2xlYW4gICAgICAgYXNzb2NpYXRlZE1lbWJlcjsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGxldmVsICovCisgICAgRlRERl9TZWN1cml0eUxldmVsIHNlY3VyaXR5TGV2ZWw7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgSUQgbW9kZSAqLworICAgIEZUREZfS2V5SWRNb2RlICAgICBrZXlJZE1vZGU7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgc291cmNlICovCisgICAgRlRERl9PY3RldCAgICAgICAgIGtleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IGluZGV4ICovCisgICAgRlRERl9LZXlJbmRleCAgICAgIGtleUluZGV4OworfSBGVERGX09ycGhhblJlc3BvbnNlOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfUkVTRVRfUkVRVUVTVCAqLworICAgIEZUREZfTXNnSWQgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIEluZGljYXRpb25lIHdoZXRoZXIgdGhlIFBJQiBhdHRyaWJ1dGVzIG11c3QgYmUgcmVzZXQgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMgb3Igbm90ICovCisgICAgRlRERl9Cb29sZWFuIHNldERlZmF1bHRQSUI7Cit9IEZUREZfUmVzZXRSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfUkVTRVRfQ09ORklSTSAqLworICAgIEZUREZfTXNnSWQgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU3RhdHVzIG9mIHRoZSByZXNldCByZXF1ZXN0ICovCisgICAgRlRERl9TdGF0dXMgc3RhdHVzOworfSBGVERGX1Jlc2V0Q29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX1JYX0VOQUJMRV9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0Jvb2xlYW4gZGVmZXJQZXJtaXQ7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfVGltZSAgICByeE9uVGltZTsKKyAgICAvKiogXGJyaWVmIFRoZSB0aW1lIGluIGFCYXNlU3VwZXJGcmFtZVBlcmlvZCdzICg5NjAgc3ltYm9scykgdGhhdCB0aGUgcmVjZWl2ZXIgd2lsbCBiZSBvbiAqLworICAgIEZUREZfVGltZSAgICByeE9uRHVyYXRpb247Cit9IEZUREZfUnhFbmFibGVSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfUlhfRU5BQkxFX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFN0YXR1cyBvZiB0aGUgUlggZW5hYmxlIHJlcXVlc3QgKi8KKyAgICBGVERGX1N0YXR1cyBzdGF0dXM7Cit9IEZUREZfUnhFbmFibGVDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfU0NBTl9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU2NhbiBUeXBlICovCisgICAgRlRERl9TY2FuVHlwZSAgICAgIHNjYW5UeXBlOworICAgIC8qKiBcYnJpZWYgQml0bWFwIG9mIHRoZSBjaGFubmVscyB0byBiZSBzY2FubmVkICAob25seSBjaGFubmVsIDExIC0gMjcgYXJlIHN1cHBvcnRlZCApICovCisgICAgRlRERl9CaXRtYXAzMiAgICAgIHNjYW5DaGFubmVsczsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgcGFnZSBvZiB0aGUgY2hhbm5lbHMgdG8gYmUgc2Nhbm5lZCAob25seSBwYWdlIDAgaXMgc3VwcG9ydGVkICkgKi8KKyAgICBGVERGX0NoYW5uZWxQYWdlICAgY2hhbm5lbFBhZ2U7CisgICAgLyoqIFxicmllZiBTY2FuIGR1cmF0aW9uIHBlciBjaGFubmVsLCBkdXJhdGlvbiA9ICggKCBzY2FuRHVyYXRpb24gXiAyICkgLSAxICkgKiBhQmFzZVN1cGVyRnJhbWVQZXJpb2Qgc3ltYm9scyAqLworICAgIEZUREZfU2NhbkR1cmF0aW9uICBzY2FuRHVyYXRpb247CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBsZXZlbCAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbCBzZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAga2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBpbmRleCAqLworICAgIEZUREZfS2V5SW5kZXggICAgICBrZXlJbmRleDsKK30gRlRERl9TY2FuUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX1NDQU5fQ09ORklSTSAqLworICAgIEZUREZfTXNnSWQgICAgICAgICAgICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTdGF0dXMgb2YgdGhlIHNjYW4gcmVxdWVzdCAqLworICAgIEZUREZfU3RhdHVzICAgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIC8qKiBcYnJpZWYgU2NhbiBUeXBlICovCisgICAgRlRERl9TY2FuVHlwZSAgICAgICAgICAgICAgICBzY2FuVHlwZTsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgcGFnZSBvZiB0aGUgc2Nhbm5lZCBjaGFubmVscyAqLworICAgIEZUREZfQ2hhbm5lbFBhZ2UgICAgICAgICAgICAgY2hhbm5lbFBhZ2U7CisgICAgLyoqIFxicmllZiBCaXRtYXAgb2YgdGhlIGNoYW5uZWxzIG5vdCBzY2FubmVkIGJ1dCB3ZXJlIHJlcXVlc3RlZCB0byBiZSBzY2FubmVkICovCisgICAgRlRERl9CaXRtYXAzMiAgICAgICAgICAgICAgICB1bnNjYW5uZWRDaGFubmVsczsKKyAgICAvKiogXGJyaWVmIE51bWJlciBvZiBlbnRyaWVzIGluIGVuZXJneURldGVjdExpc3Qgb3IgUEFORGVzY3JpcHRvckxpc3QgKi8KKyAgICBGVERGX1NpemUgICAgICAgICAgICAgICAgICAgIHJlc3VsdExpc3RTaXplOworICAgIC8qKiBcYnJpZWYgUG9pbnRlciB0byB0aGUgZmlyc3QgZW5lcmd5IGRldGVjdCByZXN1bHQgKi8KKyAgICBGVERGX0VuZXJneSogICAgICAgICAgICAgICAgIGVuZXJneURldGVjdExpc3Q7CisgICAgLyoqIFxicmllZiBQb2ludGVyIHRvIHRoZSBmaXJzdCBQQU4gZGVzY3JpcHRvciAqLworICAgIEZUREZfUEFORGVzY3JpcHRvciogICAgICAgICAgUEFORGVzY3JpcHRvckxpc3Q7CisgICAgLyoqIFxicmllZiAqLworICAgIEZUREZfQ29vcmRSZWFsaWduRGVzY3JpcHRvciogY29vcmRSZWFsaWduRGVzY3JpcHRvcjsKK30gRlRERl9TY2FuQ29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX1NUQVJUX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBQQU4gSUQgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIGNvb3JkaW5hdG9yICovCisgICAgRlRERl9QQU5JZCAgICAgICAgIFBBTklkOworICAgIC8qKiBcYnJpZWYgQ2hhbm5lbCBudW1iZXIgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIGNvb3JkaW5hdG9yICovCisgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWxOdW1iZXI7CisgICAgLyoqIFxicmllZiBDaGFubmVsIHBhZ2UgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIGNvb3JkaW5hdG9yICovCisgICAgRlRERl9DaGFubmVsUGFnZSAgIGNoYW5uZWxQYWdlOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX1RpbWUgICAgICAgICAgc3RhcnRUaW1lOworICAgIC8qKiBcYnJpZWYgQmVhY29uIG9yZGVyLCBvbmx5IGJlYWNvbiBvcmRlciAxNSAoYmVhY29ubGVzcykgaXMgc3VwcG9ydGVkICAqLworICAgIEZUREZfT3JkZXIgICAgICAgICBiZWFjb25PcmRlcjsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9PcmRlciAgICAgICAgIHN1cGVyZnJhbWVPcmRlcjsKKyAgICAvKiogXGJyaWVmIEluZGljYXRpb24gd2hldGhlciB0aGUgZGV2aWNlIG11c3QgYmUgYSBjb29yZGluYXRvciBvciBhIFBBTiBjb29yZGluYXRvciAqLworICAgIEZUREZfQm9vbGVhbiAgICAgICBQQU5Db29yZGluYXRvcjsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9Cb29sZWFuICAgICAgIGJhdHRlcnlMaWZlRXh0ZW5zaW9uOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0Jvb2xlYW4gICAgICAgY29vcmRSZWFsaWdubWVudDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9TZWN1cml0eUxldmVsIGNvb3JkUmVhbGlnblNlY3VyaXR5TGV2ZWw7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfS2V5SWRNb2RlICAgICBjb29yZFJlYWxpZ25LZXlJZE1vZGU7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICBjb29yZFJlYWxpZ25LZXlTb3VyY2VbIDggXTsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9LZXlJbmRleCAgICAgIGNvb3JkUmVhbGlnbktleUluZGV4OworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgYmVhY29uU2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgIGJlYWNvbktleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9PY3RldCAgICAgICAgIGJlYWNvbktleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAgYmVhY29uS2V5SW5kZXg7Cit9IEZUREZfU3RhcnRSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfU1RBUlRfQ09ORklSTSAqLworICAgIEZUREZfTXNnSWQgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU3RhdHVzIG9mIHRoZSBzdGFydCByZXF1ZXN0ICovCisgICAgRlRERl9TdGF0dXMgc3RhdHVzOworfSBGVERGX1N0YXJ0Q29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5ubmVsTnVtYmVyOworICAgIEZUREZfQ2hhbm5lbFBhZ2UgICBjaGFubmVsUGFnZTsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgdHJhY2tiZWFjb247Cit9IEZUREZfU3luY1JlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9TWU5DX0xPU1NfSU5ESUNBVElPTiAqLworICAgIEZUREZfTXNnSWQgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIExvc3MgUmVhc29uICovCisgICAgRlRERl9Mb3NzUmVhc29uICAgIGxvc3NSZWFzb247CisgICAgLyoqIFxicmllZiBQQU4gSUQgKi8KKyAgICBGVERGX1BBTklkICAgICAgICAgUEFOSWQ7CisgICAgLyoqIFxicmllZiBDaGFubmVsIG51bWJlciAqLworICAgIEZUREZfQ2hhbm5lbE51bWJlciBjaGFubmVsTnVtYmVyOworICAgIC8qKiBcYnJpZWYgQ2hhbm5lbCBwYWdlICovCisgICAgRlRERl9DaGFubmVsUGFnZSAgIGNoYW5uZWxQYWdlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkgbGV2ZWwgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgc2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBJRCBtb2RlICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgIGtleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBzb3VyY2UgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgaW5kZXggKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAga2V5SW5kZXg7Cit9IEZUREZfU3luY0xvc3NJbmRpY2F0aW9uOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfUE9MTF9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgQ29vcmRpbmF0b3IgYWRkcmVzcyBtb2RlICovCisgICAgRlRERl9BZGRyZXNzTW9kZSAgIGNvb3JkQWRkck1vZGU7CisgICAgLyoqIFxicmllZiBjb29yZGluYXRvciBQQU4gSUQgKi8KKyAgICBGVERGX1BBTklkICAgICAgICAgY29vcmRQQU5JZDsKKyAgICAvKiogXGJyaWVmIENvb3JkaW5hdG9yIGFkZHJlc3MgKi8KKyAgICBGVERGX0FkZHJlc3MgICAgICAgY29vcmRBZGRyOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkgbGV2ZWwgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgc2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBJRCBtb2RlICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgIGtleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBzb3VyY2UgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgaW5kZXggKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAga2V5SW5kZXg7Cit9IEZUREZfUG9sbFJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9QT0xMX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFN0YXR1cyBvZiB0aGUgcG9sbCByZXF1ZXN0ICovCisgICAgRlRERl9TdGF0dXMgc3RhdHVzOworfSBGVERGX1BvbGxDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfU0VUX1NMT1RGUkFNRV9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU2xvdGZyYW1lIGhhbmRsZSAqLworICAgIEZUREZfSGFuZGxlICAgICAgICBoYW5kbGU7CisgICAgLyoqIFxicmllZiBTZXQgb3BlcmF0aW9uICovCisgICAgRlRERl9PcGVyYXRpb24gICAgIG9wZXJhdGlvbjsKKyAgICAvKiogXGJyaWVmIE51bWJlciBvZiB0aW1lc2xvdHMgaW4gdGhpcyBzbG90ZnJhbWUgKi8KKyAgICBGVERGX1Nsb3RmcmFtZVNpemUgc2l6ZTsKK30gRlRERl9TZXRTbG90ZnJhbWVSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfU0VUX1NMT1RGUkFNRV9DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTbG90ZnJhbWUgaGFuZGxlICovCisgICAgRlRERl9IYW5kbGUgaGFuZGxlOworICAgIC8qKiBcYnJpZWYgU3RhdHVzIG9mIHRoZSBzZXQgc2xveXRmcmFtZSByZXF1ZXN0ICovCisgICAgRlRERl9TdGF0dXMgc3RhdHVzOworfSBGVERGX1NldFNsb3RmcmFtZUNvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9TRVRfTElOS19SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU2V0IG9wZXJhdGlvbiAqLworICAgIEZUREZfT3BlcmF0aW9uICAgICBvcGVyYXRpb247CisgICAgLyoqIFxicmllZiBIYW5kbGUgb2YgdGhpcyBsaW5rLCB1c2VkIGZvciBkZWxldGUgYW5kIG1vZGlmeSBvcGVyYXRpb25zICovCisgICAgRlRERl9IYW5kbGUgICAgICAgIGxpbmtIYW5kbGU7CisgICAgLyoqIFxicmllZiBIYW5kbGUgb2YgdGhlIHNsb3RmcmFtZSBvZiB0aGlzIGxpbmsgKi8KKyAgICBGVERGX0hhbmRsZSAgICAgICAgc2xvdGZyYW1lSGFuZGxlOworICAgIC8qKiBcYnJpZWYgVGltZXNsb3QgaW4gdGhlIHNsb3RmcmFtZSAqLworICAgIEZUREZfVGltZXNsb3QgICAgICB0aW1lc2xvdDsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgb2Zmc2V0ICovCisgICAgRlRERl9DaGFubmVsT2Zmc2V0IGNoYW5uZWxPZmZzZXQ7CisgICAgLyoqCisgICAgICogXGJyaWVmIEJpdCBtYXBwZWQgbGluayBvcHRpb25zLCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDo8YnI+CisgICAgICogICAgICAgIEZUREZfTElOS19PUFRJT05fVFJBTlNNSVQ6IExpayBjYW4gYmUgdXNlZCBmb3IgdHJhbnNtaXR0aW5nPGJyPgorICAgICAqICAgICAgICBGVERGX0xJTktfT1BUSU9OX1JFQ0VJVkU6IExpbmsgY2FuIGJlIHVzZWQgZm9yIHJlY2VpdmluZzxicj4KKyAgICAgKiAgICAgICAgRlRERl9MSU5LX09QVElPTl9TSEFSRUQ6IFNoYXJlZCBsaW5rLCBtdWx0aXBsZSBkZXZpY2UgY2FuIHRyYW5zbWl0IGluIHRoaXMgbGluazxicj4KKyAgICAgKiAgICAgICAgRlRERl9MSU5LX09QVElPTl9USU1FX0tFRVBJTkc6IExpbmsgd2lsbCBiZSB1c2VkIHRvIHN5bmNocm9uaXNlIHRpbWVzbG90czxicj4KKyAgICAgKiAgICAgICAgTXVsdGlwbGUgb3B0aW9ucyBjYW4gYmUgZGVmaW5lZCBieSBvci1pbmcgdGhlbS4KKyAgICAgKi8KKyAgICBGVERGX0JpdG1hcDggICAgICAgbGlua09wdGlvbnM7CisgICAgLyoqIFxicmllZiBMaW5rIHR5cGUgKi8KKyAgICBGVERGX0xpbmtUeXBlICAgICAgbGlua1R5cGU7CisgICAgLyoqIFxicmllZiBTaG9ydCBhZGRyZXNzIG9mIHRoZSBwZWVyIG5vZGUsIG9ubHkgdmFsaWQgaWYgaXMgYSB0cmFuc21pdCBsaW5rICovCisgICAgRlRERl9TaG9ydEFkZHJlc3MgIG5vZGVBZGRyZXNzOworfSBGVERGX1NldExpbmtSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfU0VUX0xJTktfQ09ORklSTSAqLworICAgIEZUREZfTXNnSWQgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU3RhdHVzIG9mIHRoZSBzZXQgbGluayByZXF1ZXN0ICovCisgICAgRlRERl9TdGF0dXMgc3RhdHVzOworICAgIC8qKiBcYnJpZWYgTGluayBoYW5kbGUgKi8KKyAgICBGVERGX0hhbmRsZSBsaW5rSGFuZGxlOworICAgIC8qKiBcYnJpZWYgU2xvdGZyYW1lIGhhbmRsZSAqLworICAgIEZUREZfSGFuZGxlIHNsb3RmcmFtZUhhbmRsZTsKK30gRlRERl9TZXRMaW5rQ29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX1RTQ0hfTU9ERV9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFRoZSBuZXcgVFNDSCBtb2RlICovCisgICAgRlRERl9UU0NITW9kZSB0c2NoTW9kZTsKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgVGhlIHRpbWVzdGFtcCBpbiBzeW1ib2xzIG9mIHRoZSBzdGFydCBvZiB0aGUgdGltZXNsb3Qgd2l0aCBBU04gZXF1YWwgdG8gdGhlIFBJQiBhdHRyaWJ1dGUKKyAgICAgKiAgICAgICAgRlRERl9QSUJfQVNOPGJyPgorICAgICAqICAgICAgICBUaGUgdGltZXN0YW1wIHNob3VsZCBiZSBjYWxjdWxhdGVkIGZyb20gdGhlIHRpbWVzdGFtcCBvZiB0aGUgQkVBQ09OX05PVElGWV9JTkRJQ0FUSU9OIG1lc3NhZ2U8YnI+CisgICAgICogICAgICAgIEJlZm9yZSBzZW5kaW5nIHRoZSBGVERGX1RTQ0hfTU9ERV9SRVFVRVNUIG1lc3NhZ2UgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBzZXQgRlRERl9QSUJfQVNOIHdpdGgKKyAgICAgKiAgICAgICAgdGhlIEFTTiBvZiB0aGUgVFNDSCBzeW5jaHJvbml6YXRpb24gSUUgb2YgdGhlIElFTGlzdCBvZiB0aGUgQkVBQ09OX05PVElGWV9JTkRJQ0FUSU9OIG1lc3NhZ2UKKyAgICAgKi8KKyAgICBGVERGX1RpbWUgICAgIHRpbWVzbG90U3RhcnRUaW1lOworfSBGVERGX1RzY2hNb2RlUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX1RTQ0hfTU9ERV9DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFRoZSBuZXcgVFNDSCBtb2RlICovCisgICAgRlRERl9UU0NITW9kZSB0c2NoTW9kZTsKKyAgICAvKiogXGJyaWVmIFN0YXR1cyBvZiB0aGUgVFNDSCBtb2RlIHJlcXVlc3QgKi8KKyAgICBGVERGX1N0YXR1cyAgIHN0YXR1czsKK30gRlRERl9Uc2NoTW9kZUNvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9LRUVQX0FMSVZFX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFNob3J0IGFkZHJlc3MgdG8gd2hpY2gga2VlcCBhbGl2ZSBtZXNzYWdlIHNob3VsZCBiZSBzZW5kICovCisgICAgRlRERl9TaG9ydEFkZHJlc3MgICAgZHN0QWRkcmVzczsKKyAgICAvKiogXGJyaWVmICovCisgICAgRlRERl9LZWVwQWxpdmVQZXJpb2Qga2VlcEFsaXZlUGVyaW9kOworfSBGVERGX0tlZXBBbGl2ZVJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9LRUVQX0FMSVZFX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFN0YXR1cyBvZiB0aGUga2VlcCBhbGl2ZSByZXF1ZXN0ICovCisgICAgRlRERl9TdGF0dXMgc3RhdHVzOworfSBGVERGX0tlZXBBbGl2ZUNvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9CRUFDT05fUkVRVUVTVCAqLworICAgIEZUREZfTXNnSWQgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIEJlYWNvbiB0eXBlICovCisgICAgRlRERl9CZWFjb25UeXBlICAgIGJlYWNvblR5cGU7CisgICAgLyoqIFxicmllZiBDaGFubmVsIG51bWJlciBhdCB3aGljaCB0aGUgYmVhY29uIG11c3QgYmUgc2VudCwgaWdub3JlZCBpbiBUU0NIIG1vZGUgKi8KKyAgICBGVERGX0NoYW5uZWxOdW1iZXIgY2hhbm5lbDsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgcGFnZSwgaWdub3JlZCBpbiBUU0NIIG1vZGUgKi8KKyAgICBGVERGX0NoYW5uZWxQYWdlICAgY2hhbm5lbFBhZ2U7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfT3JkZXIgICAgICAgICBzdXBlcmZyYW1lT3JkZXI7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBsZXZlbCAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbCBiZWFjb25TZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAgYmVhY29uS2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICBiZWFjb25LZXlTb3VyY2VbIDggXTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBpbmRleCAqLworICAgIEZUREZfS2V5SW5kZXggICAgICBiZWFjb25LZXlJbmRleDsKKyAgICAvKiogXGJyaWVmIEJlYWNvbiBkZXN0aW5hdGlvbiBhZGRyZXNzIG1vZGUgKi8KKyAgICBGVERGX0FkZHJlc3NNb2RlICAgZHN0QWRkck1vZGU7CisgICAgLyoqIFxicmllZiBCZWFjb24gZGVzdGluYXRpb24gYWRkcmVzcyAqLworICAgIEZUREZfQWRkcmVzcyAgICAgICBkc3RBZGRyOworICAgIC8qKiBcYnJpZWYgSW5kaWNhdGlvbiB3aGV0aGVyIHRoZSBCU04gKG9yIEVCU04pIGluIHRoZSBiZWFjb24gZnJhbWUgbXVzdCBzdXBwcmVzc2VkICovCisgICAgRlRERl9Cb29sZWFuICAgICAgIEJTTlN1cHByZXNzaW9uOworICAgIC8qKiBcYnJpZWYgRE8gTk9UIFVTRSAqLworICAgIHVpbnQ4X3QgICAgICAgICAgICBfX3ByaXZhdGUzOworfSBGVERGX0JlYWNvblJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9CRUFDT05fQ09ORklSTSAqLworICAgIEZUREZfTXNnSWQgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU3RhdHVzIG9mIHRoZSBiZWFjb24gcmVxdWVzdCAqLworICAgIEZUREZfU3RhdHVzIHN0YXR1czsKK30gRlRERl9CZWFjb25Db25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfQkVBQ09OX1JFUVVFU1RfSU5ESUNBVElPTiAqLworICAgIEZUREZfTXNnSWQgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBCZWFjb24gdHlwZSAqLworICAgIEZUREZfQmVhY29uVHlwZSAgYmVhY29uVHlwZTsKKyAgICAvKiogXGJyaWVmIFNvdXJjZSBhZGRyZXNzIG1vZGUgKi8KKyAgICBGVERGX0FkZHJlc3NNb2RlIHNyY0FkZHJNb2RlOworICAgIC8qKiBcYnJpZWYgU291cmNlIGFkZHJlc3MgKi8KKyAgICBGVERGX0FkZHJlc3MgICAgIHNyY0FkZHI7CisgICAgLyoqIFxicmllZiBTb3VyY2UgUEFOIElEICovCisgICAgRlRERl9QQU5JZCAgICAgICBkc3RQQU5JZDsKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgUGF5bG9hZCBJRSBsaXN0PGJyPgorICAgICAqICAgICAgICBUaGUgd2hvbGUgUGF5bG9hZCBJRSBsaXN0IChpbmNsdWRpbmcgSUUgZGVzY3JpcHRvcnMsIFN1YiBJRSBkZXNjcmlwdG9ycyBhbmQgY29udGVudCkKKyAgICAgKiAgICAgICAgaXMgYWxsb2NhdGUgaW4gb25lIGRhdGEgYnVmZmVyIHRoYXQgbXVzdCBiZSBmcmVlZCBieSB0aGUgYXBwbGljYXRpb24gdXNpbmcgRlRERl9SRUxfREFUQV9CVUZGRVIKKyAgICAgKiAgICAgICAgd2l0aCB0aGUgSUVMaXN0IHBvaW50ZXIgYXMgcGFyYW1ldGVyLgorICAgICAqLworICAgIEZUREZfSUVMaXN0KiAgICAgSUVMaXN0OworfSBGVERGX0JlYWNvblJlcXVlc3RJbmRpY2F0aW9uOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfVFJBTlNQQVJFTlRfRU5BQkxFX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgb2YgdHJhbnNwYXJlbnQgbW9kZSAqLworICAgIEZUREZfQm9vbGVhbiAgZW5hYmxlOworICAgIC8qKiBcYnJpZWYgQml0bWFwcGVkIHRyYW5zcGFyZW50IG9wdGlvbnMsIHNlZSBGVERGX2VuYWJsZVRyYW5zcGFyZW50TW9kZSAqLworICAgIEZUREZfQml0bWFwMzIgb3B0aW9uczsKK30gRlRERl9UcmFuc3BhcmVudEVuYWJsZVJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9UUkFOU1BBUkVOVF9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgRnJhbWUgbGVuZ3RoICovCisgICAgRlRERl9EYXRhTGVuZ3RoICAgIGZyYW1lTGVuZ3RoOworICAgIC8qKiBcYnJpZWYgUG9pbnRlciB0byBmcmFtZSwgbXVzdCBiZSBhbGxvY2F0ZWQgd2l0aCBGVERGX0dFVF9EQVRBX0JVRkZFUiAqLworICAgIEZUREZfT2N0ZXQqICAgICAgICBmcmFtZTsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgbnVtYmVyICovCisgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWw7CisgICAgLyoqIFxicmllZiBQYWNrZXQgVHJhZmZpYyBJbmZvcm1hdGlvbiAoUFRJKSB1c2VkIGZvciB0cmFuc21pdHRpbmcgdGhlIGZyYW1lLiAqLworICAgIEZUREZfUFRJICAgICAgICAgICBwdGk7CisgICAgLyoqIFxicmllZiBDU01BIHN1cHByZXNzaW9uICovCisgICAgRlRERl9Cb29sZWFuICAgICAgIGNtc2FTdXBwcmVzczsKKyAgICAvKiogXGJyaWVmIEFwcGxpY2F0aW9uIHByb3ZpZGVkIGhhbmRsZSwgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgdHJhbnNwYXJlbnQgY29uZmlybSBjYWxsICovCisgICAgdm9pZCogICAgICAgICAgICAgIGhhbmRsZTsKK30gRlRERl9UcmFuc3BhcmVudFJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9UUkFOU1BBUkVOVF9DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIEFwcGxpY2F0aW9uIHByb3ZpZGVkIGhhbmRsZSBvZiB0aGUgY29ycmVzcG9uZGluZyBGVERGX3NlbmRGcmFtZVRyYW5zcGFyZW50IGNhbGwgKi8KKyAgICB2b2lkKiAgICAgICAgIGhhbmRsZTsKKyAgICAvKiogXGJyaWVmIEJpdCBtYXBwZWQgc3RhdHVzICovCisgICAgRlRERl9CaXRtYXAzMiBzdGF0dXM7Cit9IEZUREZfVHJhbnNwYXJlbnRDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfVFJBTlNQQVJFTlRfSU5ESUNBVElPTiAqLworICAgIEZUREZfTXNnSWQgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIEZyYW1lIGxlbmd0aCAqLworICAgIEZUREZfRGF0YUxlbmd0aCBmcmFtZUxlbmd0aDsKKyAgICAvKiogXGJyaWVmIFBvaW50ZXIgdG8gZnJhbWUsIG11c3QgYmUgZnJlZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIEZUREZfUkVMX0RBVEFfQlVGRkVSICovCisgICAgRlRERl9PY3RldCogICAgIGZyYW1lOworICAgIC8qKiBcYnJpZWYgQml0IG1hcHBlZCByZWNlaXZlIHN0YXR1cyAqLworICAgIEZUREZfQml0bWFwMzIgICBzdGF0dXM7Cit9IEZUREZfVHJhbnNwYXJlbnRJbmRpY2F0aW9uOworCit0eXBlZGVmIHN0cnVjdAoreworCS8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfU0xFRVBfUkVRVUVTVCAqLworCUZUREZfTXNnSWQgbXNnSWQ7CisJLyoqIFxicmllZiBTbGVlcCB0aW1lICovCisJRlRERl9VU2VjICBzbGVlcFRpbWU7Cit9IEZUREZfU2xlZXBSZXF1ZXN0OworCisjaWYgRlRERl9EQkdfQlVTX0VOQUJMRQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9EQkdfTU9ERV9TRVRfUkVRVUVTVCAqLworICAgICAgICBGVERGX01zZ0lkIG1zZ0lkOworICAgICAgICAvKiogXGJyaWVmIERlYnVnIGJ1cyBtb2RlICovCisgICAgICAgIEZUREZfRGJnTW9kZSBkYmdNb2RlOworfSBGVERGX0RiZ01vZGVTZXRSZXF1ZXN0OworI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfRlBQUl9NT0RFX1NFVF9SRVFVRVNUICovCisgICAgICAgIEZUREZfTXNnSWQgbXNnSWQ7CisgICAgICAgIC8qKiBcYnJpZWYgZnAgYml0IHZhbHVlIHRvIHNldCB3aGVuIHNyYyBhZGRyZXNzIG1hdGNoZXMqLworICAgICAgICBGVERGX0JpdG1hcDggbWF0Y2hGcDsKKyAgICAgICAgLyoqIFxicmllZiBXaGVuIHNldCwgZnBfZm9yY2VfdmFsdWUgd2lsbCBiZSBhcHBsaWVkIHRvIGZwIGJpdCBmb3IgYWxsIHNyYyBhZGRyZXNzZXMqLworICAgICAgICBGVERGX0JpdG1hcDggZnBPdmVycmlkZTsKKyAgICAgICAgLyoqIFxicmllZiBUaGUgdmFsdWUgd2lsbCBiZSBzZXQgdG8gZnAgYml0IGZvciBhbGwgc3JjIGFkZHJlc3NlcyB3aGVuIGZwX292ZXJyaWRlIGlzIHNldCovCisgICAgICAgIEZUREZfQml0bWFwOCBmcEZvcmNlOworfSBGVERGX0ZwcHJNb2RlU2V0UmVxdWVzdDsKKyNlbmRpZiAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BICovCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX2dldFJlbGVhc2VJbmZvIC0gZ2V0cyB0aGUgTE1BQyAoRlBHQSkgYW5kIFVNQUMgKEZUREYgU1cgZHJpdmVyKSByZWxlYXNlIGluZm8KKyAqIFxwYXJhbVtvdXRdICBsbWFjUmVsTmFtZTogICAgIExNQUMgcmVsZWFzZSBuYW1lCisgKiBccGFyYW1bb3V0XSAgbG1hY0J1aWxkVGltZTogICBMTUFDIGJ1aWxkIHRpbWUKKyAqIFxwYXJhbVtvdXRdICB1bWFjUmVsTmFtZTogICAgIFVNQUMgcmVsZWFzZSBuYW1lCisgKiBccGFyYW1bb3V0XSAgdW1hY0J1aWxkVGltZTogICBVTUFDIGJ1aWxkIHRpbWUKKyAqIFxyZW1hcmsgICAgICBTZXRzIHRoZSBhcHBsaWNhdGlvbiBjaGFyYWN0ZXIgc3RyaW5ncyBwb2ludGVycyB0byBjaGFyYWN0ZXIgc3RyaW5ncyBjb250YWluaW5nIHRoZSByZWxlYXNlCisgKiAgICAgICAgICAgICAgaW5mby4gVGhlIGNoYXJhY3RlciBzdHJpbmcgc3BhY2UgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYnkgRlRERiBhbmQgZG9lcyBub3QgbmVlZCAKKyAqICAgICAgICAgICAgICB0byBiZSByZWxlYXNlZCBieSB0aGUgYXBwbGljYXRpb24uCisgKi8KK3ZvaWQgICAgICAgICAgICBGVERGX2dldFJlbGVhc2VJbmZvKCBjaGFyKiogbG1hY1JlbE5hbWUsIGNoYXIqKiBsbWFjQnVpbGRUaW1lLCBjaGFyKiogdW1hY1JlbE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcioqIHVtYWNCdWlsZFRpbWUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9jb25maXJtTG1hY0ludGVycnVwdCAtIENvbmZpcm1hdGlvbiB0aGF0IHRoZSBMTUFDIGludGVycnVwdCBoYXMgYmVlbiByZWNlaXZlZAorICogICAgICAgICAgICAgIGJ5IHRoZSBhcHBsaWNhdGlvbgorICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIExNQUMgaW50ZXJydXB0LiBUaGUgYXBwbGljYXRpb24gbXVzdCB3YWl0IGZvciBhbnkgb3RoZXIKKyAqICAgICAgICAgICAgICBGVERGIEFQSSBmdW5jdGlvbiB0byBiZSBjb21wbGV0ZWQgYW5kIGNhbGwgdGhlIGZ1bmN0aW9uIEZUREZfZXZlbnRIYW5kbGVyLiBUaGlzIGZ1bmN0aW9uCisgKiAgICAgICAgICAgICAgd2lsbCBlbmFibGUgdGhlIExNQUMgaW50ZXJydXB0IGFnYWluIHRoZSBmdW5jdGlvbiBGVERGX2V2ZW50SGFuZGxlci4KKyAqLwordm9pZCAgICAgICAgICAgIEZUREZfY29uZmlybUxtYWNJbnRlcnJ1cHQoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9ldmVudEhhbmRsZXIgLSBIYW5kbGVzIGFuIGV2ZW50IHNpZ25hbGxlZCBieSB0aGUgTE1BQyBpbnRlcnJ1cHQKKyAqIFxyZW1hcmsgICAgICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGV2ZW50IHNpZ25hbGxlZCBieSB0aGUgTE1BQyBpbnRlcnJ1cHQgYW5kIGVuYWJsZXMgdGhlIExNQUMKKyAqICAgICAgICAgICAgICBpbnRlcnJ1cHQgd2hlbiBmaW5pc2hlZC4KKyAqIFx3YXJuaW5nICAgICBGVERGIGlzIHN0cmljdGx5IE5PTiByZWVudHJhbnQsIHNvIEZUREZfZXZlbnRIYW5kbGVyIGlzIE5PVCBhbGxvd2VkIHRvIGJlIGNhbGxlZCB3aGVuIGFub3RoZXIgRlRERgorICogICAgICAgICAgICAgIGlzIGJlaW5nIGV4ZWN1dGVkCisgKi8KK3ZvaWQgICAgICAgICAgICBGVERGX2V2ZW50SGFuZGxlciggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX3NuZE1zZyAtIFNlbmRzIGEgcmVxdWVzdCAocmVzcG9uc2UpIG1lc3NhZ2UgdG8gRlRERiBkcml2ZXIKKyAqIFxwYXJhbVtpbl0gICBtc2dCdWY6ICAgICAgVGhlIG1lc3NhZ2UgdG8gYmUgc2VuZC4gVG8gYXBwbGljYXRpb24gbXVzdCBzZXQgdGhlIG1zZ0lkIGZpZWxkIGFuZCB0aGUgcmVxdWVzdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBwYXJhbWV0ZXJzIGJ5IGNhc3RpbmcgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIHJlcXVlc3QgbWVzc2FnZSBzdHJ1Y3R1cmUuCisgKiBccmVtYXJrICAgICAgVGhlIG1lc3NhZ2UgbXVzdCBiZSBhbGxvY2F0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBmdW5jdGlvbiBGVERGX0dFVF9NU0dfQlVGRkVSCisgKiAgICAgICAgICAgICAgYW5kIHdpbGwgYmUgcmVsZWFzZWQgYnkgRlRERiB1c2luZyBGVERGX1JFTF9NU0dfQlVGRkVSLiBXaGVuIGZpbmlzaGVkIEZUREYgcmVsZWFzZXMgdGhlIG1lc3NhZ2UKKyAqICAgICAgICAgICAgICBidWZmZXIgYW5kIHNlbmRzIGEgY29uZmlybSAoaW5kaWNhdGlvbikgdG8gdGhlIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBmdW5jdGlvbiBGVERGX1JDVl9NU0cuCisgKiBccmVtYXJrICAgICAgQXMgZm9sbG93cyBhIHRhYmxlIG9mIG1lc3NhZ2UgSURzIGFjY2VwdGVkIGJ5IEZUREZfc25kTXNnLCB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZworICogICAgICAgICAgICAgIHRvIHRoaXMgbWVzc2FnZSBJRCBhbmQgdGhlIGNvbmZpcm0gc2VuZCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiB3aGVuIHRoZSByZXF1ZXN0IGhhcyBiZWVuCisgKiAgICAgICAgICAgICAgY29tcGxldGVkIGJ5IEZUREY6CisgKiBccmVtYXJrICAgICAgPGJyPgorICogXHJlbWFyayAgICAgIFJlcXVlc3QgbWVzc2FnZSBJRCwgUmVxdWVzdCBzdHJ1Y3R1cmUsIFJlcXVlc3QgY29uZmlybQorICogXHJlbWFyayAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogXHJlbWFyayAgICAgIEZUREZfREFUQV9SRVFVRVNULCBGVERGX0RhdGFSZXF1ZXN0LCBGVERGX0RBVEFfQ09ORklSTQorICogXHJlbWFyayAgICAgIEZUREZfUFVSR0VfUkVRVUVTVCwgRlRERl9QdXJnZVJlcXVlc3QsIEZUREZfREFUQV9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9BU1NPQ0lBVEVfUkVRVUVTVCwgRlRERl9Bc3NvY2lhdGVSZXF1ZXN0LCBGVERGX0FTU09DSUFURV9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9BU1NPQ0lBVEVfUkVTUE9OU0UsIEZUREZfQXNzb2NpYXRlUmVzcG9uc2UsIEZUREZfQ09NTV9TVEFUVVNfSU5ESUNBVElPTgorICogXHJlbWFyayAgICAgIEZUREZfRElTQVNTT0NJQVRFX1JFUVVFU1QsIEZUREZfRGlzYXNzb2NpYXRlUmVxdWVzdCwgRlRERl9ESVNBU1NPQ0lBVEVfQ09ORklSTQorICogXHJlbWFyayAgICAgIEZUREZfR0VUX1JFUVVFU1QsIEZUREZfR2V0UmVxdWVzdCwgRlRERl9HRVRfQ09ORklSTQorICogXHJlbWFyayAgICAgIEZUREZfU0VUX1JFUVVFU1QsIEZUREZfU2V0UmVxdWVzdCwgRlRERl9TRVRfQ09ORklSTQorICogXHJlbWFyayAgICAgIEZUREZfT1JQSEFOX1JFU1BPTlNFLCBGVERGX09ycGhhblJlc3BvbnNlLCAgRlRERl9DT01NX1NUQVRVU19JTkRJQ0FUSU9OCisgKiBccmVtYXJrICAgICAgRlRERl9SRVNFVF9SRVFVRVNULCBGVERGX1Jlc2V0UmVxdWVzdCwgRlRERl9SRVNFVF9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9SWF9FTkFCTEVfUkVRVUVTVCwgRlRERl9TY2FuUmVxdWVzdCwgRlRERl9SWF9FTkFCTEVfQ09ORklSTQorICogXHJlbWFyayAgICAgIEZUREZfU0NBTl9SRVFVRVNULCBGVERGX1NjYW5SZXF1ZXN0LCBGVERGX1NDQU5fQ09ORklSTQorICogXHJlbWFyayAgICAgIEZUREZfU1RBUlRfUkVRVUVTVCwgRlRERl9TdGFydFJlcXVlc3QsIEZUREZfU1RBUlRfQ09ORklSTQorICogXHJlbWFyayAgICAgIEZUREZfUE9MTF9SRVFVRVNULCBGVERGX1BvbGxSZXF1ZXN0LCBGVERGX1BPTExfQ09ORklSTQorICogXHJlbWFyayAgICAgIEZUREZfU0VUX1NMT1RGUkFNRV9SRVFVRVNULCBGVERGX1NldFNsb3RmcmFtZVJlcXVlc3QsIEZUREZfU0VUX1NMT1RGUkFNRV9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9TRVRfTElOS19SRVFVRVNULCBGVERGX1NldExpbmtSZXF1ZXN0LCBGVERGX1NFVF9MSU5LX0NPTkZJUk0KKyAqIFxyZW1hcmsgICAgICBGVERGX1RTQ0hfTU9ERV9SRVFVRVNULCBGVERGX1RzY2hNb2RlUmVxdWVzdCwgRlRERl9UU0NIX01PREVfQ09ORklSTQorICogXHJlbWFyayAgICAgIEZUREZfS0VFUF9BTElWRV9SRVFVRVNULCBGVERGX0tlZXBBbGl2ZVJlcXVlc3QsIEZUREZfS0VFUF9BTElWRV9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9CRUFDT05fUkVRVUVTVCwgRlRERl9CZWFjb25SZXF1ZXN0LCBGVERGX0JFQUNPTl9DT05GSVJNCisgKiBcd2FybmluZyAgICAgRlRERiBpcyBzdHJpY3RseSBOT04gcmVlbnRyYW50LCBzbyBpdCBpcyBOT1QgYWxsb3dlZCB0byBjYWxsIGFueSBvdGhlciBGVERGIGZ1bmN0aW9uIGJlZm9yZSB0aGlzIEFQSSBoYXMgYmVlbiBjb21wbGV0ZWQuIFRoaXMgaW5jbHVkaW5nIHRoZSBGVERGX2V2ZW50SGFuZGxlciBmdW5jdGlvbi4KKyAqLwordm9pZCAgICAgICAgICAgIEZUREZfc25kTXNnKCBGVERGX01zZ0J1ZmZlciogbXNnQnVmICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIEZUREZfUkNWX01TRyAtIFJlY2VpdmVzIGEgY29uZmlyIG9yIGluZGljYXRpb24gbWVzc2FnZSBmcm9tIHRoZSBGVERGIGRyaXZlcgorICogXHBhcmFtW2luXSAgIG1zZ0J1ZjogICAgICBUaGUgcmVjZWl2ZWQgbWVzc2FnZS4gVGhlIG1zZ0lkIGZpZWxkIGluZGljYXRlcyB0aGUgcmVjZWl2ZWQgbWVzc2FnZQorICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgYXBwbGljYXRpb24gYW5kIGlzIGNhbGxlZCBieSBGVERGIHRvIHBhc3MgCisgKiAgICAgICAgICAgICAgYSBjb25maXJtIG9yIGluZGljYXRpb24gbWVzc2FnZSB0byB0aGUgYXBwbGljYXRpb24uIEl0IG11c3QgYmUgY29uZmlndXJlZCBpbiB0aGUKKyAqICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgZnRkZl9jb25maWcuaC4KKyAqIFxyZW1hcmsgICAgICBUaGUgbWVzc2FnZSBidWZmZXIgaXMgYWxsb2NhdGVkIGJ5IEZUREYgdXNpbmcgRlRERl9HRVRfTVNHX0JVRkZFUiBhbmQgbXVzdCBiZSByZWxlYXNlZAorICogICAgICAgICAgICAgIGJ5IHRoZSBhcHBsaWNhdGlvbiB1c2luZyBGVERGX1JFTF9NU0dfQlVGRkVSCisgKiBccmVtYXJrICAgICAgQXMgZm9sbG93cyBhIHRhYmxlIG9mIHRoZSBjb25maXJtIGFuZCBpbmRpY2F0aW9ucyBtZXNzYWdlcyBhbmQgdGhlaXIgbWVzc2FnZSBzdHJ1Y3R1cmVzLgorICogXHJlbWFyayAgICAgIDxicj4KKyAqIFxyZW1hcmsgICAgICBDb25maXJtL2luZGljYXRpb24gbWVzc2FnZSBJRCwgQ29uZmlybS9pbmRpY2F0aW9uIHN0cnVjdHVyZQorICogXHJlbWFyayAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogXHJlbWFyayAgICAgIEZUREZfREFUQV9JTkRJQ0FUSU9OLCBGVERGX0RhdGFJbmRpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9EQVRBX0NPTkZJUk0sIEZUREZfRGF0YUNvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX1BVUkdFX0NPTkZJUk0sIEZUREZfUHVyZ2VDb25maXJtCisgKiBccmVtYXJrICAgICAgRlRERl9BU1NPQ0lBVEVfSU5ESUNBVElPTiwgRlRERl9Bc3NvY2lhdGVJbmRpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9BU1NPQ0lBVEVfQ09ORklSTSwgRlRERl9Bc3NvY2lhdGVDb25maXJtCisgKiBccmVtYXJrICAgICAgRlRERl9ESVNBU1NPQ0lBVEVfSU5ESUNBVElPTiwgRlRERl9EaXNhc3NvY2lhdGVJbmRpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9ESVNBU1NPQ0lBVEVfQ09ORklSTSxGVERGX0Rpc2Fzc29jaWF0ZUNvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX0JFQUNPTl9OT1RJRllfSU5ESUNBVElPTiwgRlRERl9CZWFjb25Ob3RpZnlJbmRpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9DT01NX1NUQVRVU19JTkRJQ0FUSU9OLCBGVERGX0NvbW1TdGF0dXNJbmRpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9HRVRfQ09ORklSTSwgRlRERl9HZXRDb25maXJtCisgKiBccmVtYXJrICAgICAgRlRERl9TRVRfQ09ORklSTSwgRlRERl9TZXRDb25maXJtCisgKiBccmVtYXJrICAgICAgRlRERl9PUlBIQU5fSU5ESUNBVElPTiwgRlRERl9PcnBoYW5JbmRpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9SRVNFVF9DT05GSVJNLCBGVERGX1Jlc2V0Q29uZmlybQorICogXHJlbWFyayAgICAgIEZUREZfUlhfRU5BQkxFX0NPTkZJUk0sIEZUREZfUnhFbmFibGVDb25maXJtCisgKiBccmVtYXJrICAgICAgRlRERl9TQ0FOX0NPTkZJUk0sIEZUREZfU2NhbkNvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX1NUQVJUX0NPTkZJUk0sIEZUREZfU3RhcnRDb25maXJtCisgKiBccmVtYXJrICAgICAgRlRERl9TWU5DX0xPU1NfSU5ESUNBVElPTiwgRlRERl9TeW5jTG9zc0luZGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1BPTExfQ09ORklSTSwgRlRERl9Qb2xsQ29uZmlybQorICogXHJlbWFyayAgICAgIEZUREZfU0VUX1NMT1RGUkFNRV9DT05GSVJNLCBGVERGX1NldFNsb3RmcmFtZUNvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX1NFVF9MSU5LX0NPTkZJUk0sIEZUREZfU2V0TGlua0NvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX1RTQ0hfTU9ERV9DT05GSVJNLCBGVERGX1RzY2hNb2RlQ29uZmlybQorICogXHJlbWFyayAgICAgIEZUREZfS0VFUF9BTElWRV9DT05GSVJNLCBGVERGX0tlZXBBbGl2ZUNvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX0JFQUNPTl9DT05GSVJNLCBGVERGX0JlYWNvbkNvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX0JFQUNPTl9SRVFVRVNUX0lORElDQVRJT04sIEZUREZfQmVhY29uUmVxdWVzdEluZGljYXRpb24KKyAqIFx3YXJuaW5nICAgICBGVERGIGlzIHN0cmljdGx5IE5PTiByZWVudHJhbnQuIEJlY2F1c2UgRlRERl9SQ1ZfTVNHIGNhbiBiZSBjYWxsZWQgYnkgRlRERl9zbmRNc2cgb3IgRlRERl9ldmVudEhhbmRsZXIKKyAqICAgICAgICAgICAgICBpdCBpcyBub3QgYWxsb3dlZCB0byBjYWxsIG90aGVyIEZUREYgZnVuY3Rpb25zIHdpdGhpbiBGVERGX1JDVl9NU0cKKyAqLwordm9pZCAgICAgICAgICAgIEZUREZfUkNWX01TRyggRlRERl9Nc2dCdWZmZXIqIG1zZ0J1ZiApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX0dFVF9NU0dfQlVGRkVSIC0gQWxsb2NhdGVzIGEgbWVzc2FnZSBidWZmZXIKKyAqIFxwYXJhbVtpbl0gICBsZW46ICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBidWZmZXIgdG8gYmUgYWxsb2NhdGVkCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBpdCB3aWxsIGNhbGxlZCBieSBib3RoIHRoZQorICogICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGFuZCBGVERGLiBJdCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmdGRmX2NvbmZpZy5oLgorICogXHJlbWFyayAgICAgIFRoZSBhbGxvY2F0ZWQgbWVzc2FnZSBidWZmZXIgbXVzdCBiZSBmcmVlZCB1c2luZyBGVERGX1JFTF9NU0dfQlVGRkVSCisgKiBccmVtYXJrICAgICAgVGhlIG1lc3NhZ2UgYnVmZmVyIG11c3QgYmUgbG9jYXRlZCBpbiByZXRlbnRpb24gUkFNCisgKiBccmV0dXJuICAgICAgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIG1lc3NhZ2UgYnVmZmVyLgorICovCitGVERGX01zZ0J1ZmZlciogRlRERl9HRVRfTVNHX0JVRkZFUiggRlRERl9TaXplIGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX1JFTF9NU0dfQlVGRkVSIC0gRnJlZXMgYSBtZXNzYWdlIGJ1ZmZlcgorICogXHBhcmFtW2luXSAgIG1zZ0J1ZjogICAgICBQb2ludGVyIHRvIHRoZSBtZXNzYWdlIGJ1ZmZlciB0byBiZSByZWxlYXNlZAorICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgYXBwbGljYXRpb24gaXQgd2lsbCBjYWxsZWQgYnkgYm90aCB0aGUKKyAqICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBhbmQgRlRERi4gSXQgbXVzdCBiZSBjb25maWd1cmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZnRkZl9jb25maWcuaC4KKyAqIFxyZW1hcmsgICAgICBJdCB3aWxsIGZyZWUgbWVzc2FnZSBidWZmZXJzIGFsbG9jYXRlZCB3aXRoIEZUREZfR0VUX01TR19CVUZGRVIKKyAqLwordm9pZCAgICAgICAgICAgIEZUREZfUkVMX01TR19CVUZGRVIoIEZUREZfTXNnQnVmZmVyKiBtc2dCdWYgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9HRVRfREFUQV9CVUZGRVIgLSBBbGxvY2F0ZXMgYSBkYXRhIGJ1ZmZlcgorICogXHBhcmFtW2luXSAgIGxlbjogICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGJ1ZmZlciB0byBiZSBhbGxvY2F0ZWQKKyAqIFxyZW1hcmsgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGl0IHdpbGwgY2FsbGVkIGJ5IGJvdGggdGhlCisgKiAgICAgICAgICAgICAgYXBwbGljYXRpb24gYW5kIEZUREYuIEl0IG11c3QgYmUgY29uZmlndXJlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZ0ZGZfY29uZmlnLmguCisgKiBccmVtYXJrICAgICAgVGhlIGFsbG9jYXRlZCBkYXRhIGJ1ZmZlciBtdXN0IGJlIGZyZWVkIHVzaW5nIEZUREZfUkVMX0RBVEFfQlVGRkVSCisgKiBccmVtYXJrICAgICAgVGhlIGRhdGEgYnVmZmVyIG11c3QgbG9jYXRlZCBpbiByZXRlbnRpb24gUkFNCisgKiBccmV0dXJuICAgICAgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGRhdGEgYnVmZmVyLgorICovCitGVERGX09jdGV0KiAgICAgRlRERl9HRVRfREFUQV9CVUZGRVIoIEZUREZfRGF0YUxlbmd0aCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9SRUxfREFUQV9CVUZGRVIgLSBGcmVlcyBhIGRhdGEgYnVmZmVyCisgKiBccGFyYW1baW5dICAgZGF0YUJ1ZjogICAgICBQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciB0byBiZSByZWxlYXNlZAorICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgYXBwbGljYXRpb24gaXQgd2lsbCBjYWxsZWQgYnkgYm90aCB0aGUKKyAqICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBhbmQgRlRERi4gSXQgbXVzdCBiZSBjb25maWd1cmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZnRkZl9jb25maWcuaC4KKyAqIFxyZW1hcmsgICAgICBJdCB3aWxsIGZyZWUgZGF0YSBidWZmZXJzIGFsbG9jYXRlZCB3aXRoIEZUREZfR0VUX0RBVEFfQlVGRkVSCisgKi8KK3ZvaWQgICAgICAgICAgICBGVERGX1JFTF9EQVRBX0JVRkZFUiggRlRERl9PY3RldCogZGF0YUJ1ZiApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX0dFVF9FWFRfQUREUkVTUyAtIEdldHMgdGhlIGV4dGVuZGVkIGFkZHJlc3MKKyAqIFxyZW1hcmsgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGl0IHdpbGwgY2FsbGVkIGJ5IEZUREYuIEl0IG11c3QKKyAqICAgICAgICAgICAgICBiZSBjb25maWd1cmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZnRkZl9jb25maWcuaC4KKyAqIFxyZW1hcmsgICAgICBBZnRlciBhIHJlc2V0IGl0IGlzIHVzZWQgYnkgRlRERiB0byBnZXQgdGhlIGV4dGVuZGVkIGFkZHJlc3Mgb2YgdGhlIGRldmljZQorICogXHJldHVybiAgICAgIEFuIGV4dGVuZGVkIGFkZHJlc3MuIAorICovCitGVERGX0V4dEFkZHJlc3MgRlRERl9HRVRfRVhUX0FERFJFU1MoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9lbmFibGVUcmFuc3BhcmVudE1vZGUgLSBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSB0cmFuc3BhcmVudCBtb2RlCisgKiBccGFyYW1baW5dICAgZW5hYmxlOiBJZiBGVERGX1RSVUUgdHJhbnNwYXJlbnQgbW9kZSBpcyBlbmFibGVkIGVsc2UgaXQgd2lsbCBiZSBkaXNhYmxlZAorICogXHBhcmFtW2luXSAgIG9wdGlvbnM6IEEgYml0bWFwIG9mIHRyYW5zcGFyZW50IG1vZGUgb3B0aW9ucy4gTm90IHVzZWQgaWYgZW5hYmxlIGVxdWFscyB0byBGVERGX0ZBTFNFLgorICogXHJlbWFyayAgICAgIElmIHRoZSB0cmFuc3BhcmVudCBtb2RlIGlzIGVuYWJsZWQgcmVjZWl2ZWQgZnJhbWUgYXJlIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gdXNpbmcKKyAqICAgICAgICAgICAgICBGVERGX1JDVl9GUkFNRV9UUkFOU1BBUkVOVC4gVGhlIHdob2xlIE1BQyBmcmFtZSBpbmNsdWRpbmcgZnJhbWUgaGVhZGVycywgc2VjdXJpdHkgaGVhZGVycworICogICAgICAgICAgICAgIGFuZCBGQ1MgYXJlIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24uIERlcGVuZGluZyBvbiB0aGUgZGVmaW5lZCBvcHRpb25zIHNvbWUgZmlsdGVyaW5nCisgKiAgICAgICAgICAgICAgaXMgZG9uZS4KKyAqIFxyZW1hcmsgICAgICBXaGVuIHRoZSB0cmFuc3BhcmVudCBtb2RlIGlzIGVuYWJsZWQgZnJhbWVzIG11c3QgYmUgc2VuZCB1c2luZyB0aGUgZnVuY3Rpb24gRlRERl9zZW5kRnJhbWVUcmFuc3BhcmVudAorICogXHJlbWFyayAgICAgIFdoZW4gdGhlIHRyYW5zcGFyZW50IG1vZGUgaXMgZW5hYmxlZCBvbmx5IHRoZSBmb2xsb3dpbmcgcmVxdWVzdCBtZXNzYWdlcyBhcmUgc3VwcG9ydGVkOgorICogXHJlbWFyayAgICAgIDxicj4KKyAqIFxyZW1hcmsgICAgICBGVERGX0dFVF9SRVFVRVNUCisgKiBccmVtYXJrICAgICAgRlRERl9TRVRfUkVRVUVTVAorICogXHJlbWFyayAgICAgIEZUREZfUkVTRVRfUkVRVUVTVAorICogXHJlbWFyayAgICAgIDxicj4KKyAqIFxyZW1hcmsgICAgICBUaGUgYmVoYXZpb3Igb2YgRlRERiB3aGVuIGl0IHJlY2VpdmVzIHJlcXVlc3Qgbm90IHN1cHBvcnRlZCBpbiB0cmFuc3BhcmVudCBtb2RlIGlzIE5PVCBkZWZpbmVkIQorICogXHJlbWFyayAgICAgIDxicj4KKyAqIFxyZW1hcmsgICAgICBUcmFuc3BhcmVudCBtb2RlIGNhbm5vdCBiZSBlbmFibGVkIGlmIEZUREYgaXMgaW4gQ1NMIG9yIFRTQ0ggbW9kZS4KKyAqIFxyZW1hcmsgICAgICA8YnI+CisgKiBccmVtYXJrICAgICAgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisgKiBccmVtYXJrICAgICAgPGJyPgorICogXHJlbWFyayAgICAgIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzA6IEZyYW1lcyBvZiB0eXBlIDAgYXJlIGFsd2F5cyBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0ZSQU1FX1RZUEVfMTogRnJhbWVzIG9mIHR5cGUgMSBhcmUgYWx3YXlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV8yOiBGcmFtZXMgb2YgdHlwZSAyIGFyZSBhbHdheXMgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbgorICogXHJlbWFyayAgICAgIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzM6IEZyYW1lcyBvZiB0eXBlIDMgYXJlIGFsd2F5cyBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0ZSQU1FX1RZUEVfNDogRnJhbWVzIG9mIHR5cGUgNCBhcmUgYWx3YXlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV81OiBGcmFtZXMgb2YgdHlwZSA1IGFyZSBhbHdheXMgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbgorICogXHJlbWFyayAgICAgIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzY6IEZyYW1lcyBvZiB0eXBlIDYgYXJlIGFsd2F5cyBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0ZSQU1FX1RZUEVfNzogRnJhbWVzIG9mIHR5cGUgNyBhcmUgYWx3YXlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX0ZSQU1FX1RZUEVTOiBBbGwgZnJhbWUgdHlwZXMgYXJlIGFsd2F5cyBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9BVVRPX0FDSzogRlRERiBzZW5kcyBhbiBhdXRvbWF0aWNhbGx5IGFuZCBBQ0sgaWYgaXQgcmVjZWl2ZXMgYW4gdmVyc2lvbiAwIG9yIDEKKyAqICAgICAgICAgICAgICBmcmFtZSB3aXRoIEFSIHNldCBpbiB0aGUgZnJhbSBjb250cm9sIGZpZWxkCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9BVVRPX0ZQX0FDSzogIEZUREYgc2VuZHMgYW4gYXV0b21hdGljYWxseSBhbmQgQUNLIGZyYW1lIHdpdGggRlAgc2V0IGlmIGl0CisgKiAgICAgICAgICAgICAgcmVjZWl2ZXMgYW4gdmVyc2lvbiAwIG9yIDEgREFUQV9SRVFVRVNUIGNvbW1hbmQgZnJhbWUgd2l0aCBBUiBzZXQgaW4gdGhlIGZyYW0gY29udHJvbCBmaWVsZAorICogXHJlbWFyayAgICAgIEZUREZfVFJBTlNQQVJFTlRfUEFTU19DUkNfRVJST1I6IEZyYW1lcyB3aXRoIGEgQ1JDIChGQ1MpIGVycm9yIGFyZSBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0FMTF9GUkFNRV9WRVJTSU9OOiBGcmFtZXMgd2l0aCBhbnkgZnJhbWUgdmVyc2lvbiBhcmUgcGFzc2VkIHRvIHRoZQorICogICAgICAgICAgICAgIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0FMTF9QQU5fSUQ6IEZyYW1lcyB3aXRoIGFueSBQQU4gSUQgKGV2ZW4gd2hlbiBpdCBkb2VzIG5vdCBtYXRjaCBpdHMgb3duCisgKiAgICAgICAgICAgICAgUEFOIElEKSBhcmUgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbgorICogXHJlbWFyayAgICAgIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfUEFOX0lEOiBGcmFtZXMgd2l0aCBhbnkgYWRkcmVzcyAoZXZlbiB3aGVuIGl0IGRvZXMgbm90IG1hdGNoIGl0cyBvd24KKyAqICAgICAgICAgICAgICBleHRlbmRlZCBvciBzaG9ydCBhZGRyZXNzKSBhcmUgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbgorICogXHJlbWFyayAgICAgIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfQkVBQ09OOiBBbnkgYmVhY29uIGZyYW1lIGlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX05PX0RFU1RfQUREUjogRnJhbWVzIHdpdGggbm8gZGVzdGluYXRpb24gYWRkcmVzcyBhcmUgYWx3YXlzIHBhc3NlZCB0bworICogICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbgorICogXHJlbWFyayAgICAgIEZUREZfVFJBTlNQQVJFTlRfRU5BQkxFX0ZDU19HRU5FUkFUSU9OOiBGVERGIGFkZHMgYW4gRkNTIHRvIGZyYW1lcyBzZW5kIHdpdGggRlRERl9zZW5kRnJhbWVUcmFuc3BhcmVudAorICovCit2b2lkICAgICAgICAgICAgRlRERl9lbmFibGVUcmFuc3BhcmVudE1vZGUoIEZUREZfQm9vbGVhbiAgZW5hYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0JpdG1hcDMyIG9wdGlvbnMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9zZW5kRnJhbWVUcmFuc3BhcmVudCAtIFNlbmRzIGEgZnJhbWUgdHJhbnNwYXJlbnQKKyAqIFxwYXJhbVtpbl0gICBmcmFtZUxlbmd0aDogICBMZW5ndGggb2YgdGhlIE1BQyBmcmFtZSB0byBiZSBzZW5kCisgKiBccGFyYW1baW5dICAgZnJhbWU6ICAgICAgICAgRGF0YSBidWZmZXIgd2l0aCB0aGUgZnJhbWUgdG8gYmUgc2VudC4gTXVzdCBiZSBhbGxvY2F0ZSB1c2luZyBGVERGX0dFVF9EQVRBX0JVRkZFUgorICogXHBhcmFtW2luXSAgIGNoYW5uZWw6ICAgICAgIFRoZSBjaGFubmVsIHVzZWQgdG8gc2VuZCB0aGUgZnJhbWUKKyAqIFxwYXJhbVtpbl0gICBwdGk6ICAgICAgICAgICBQYWNrZXQgVHJhZmZpYyBJbmZvcm1hdGlvbiB1c2VkIGZvciB0cmFuc21pdHRpbmcgdGhlIHBhY2tldAorICogXHBhcmFtW2luXSAgIGNtc2FTdXBwcmVzczogIElmIEZUREZfVFJVRSBubyBDU01BLUNBIGlzIHBlcmZvcm1lZCBiZWZvcmUgc2VuZGluZyB0aGUgZnJhbWUKKyAqIFxwYXJhbVtpbl0gICBoYW5kbGU6ICAgICAgICBBIHVzZXIgZGVmaW5lZCBoYW5kbGUuCisgKiBccmVtYXJrICAgICAgRlRERiBzZW5kcyB0aGUgZnJhbWUgdGFybnNwYXJlbnRseS4gVGhhdCBpcyB0aGUgYXBwbGljYXRpb24gaGFzIHRvIGNvbXBvc2UgdGhlIE1BQyBmcmFtZSBoZWFkZXIsIAorICogICAgICAgICAgICAgIHNlY3VyaXR5IGhlYWRlciwgZXRjIGFuZCBtYWtlIHN1cmUgdGhhdCBpdCBjb21wbGllcyB3aXRoIHRoZSBJRUVFODAyLjE1LjQgc3RhbmRhcmQuIEJlZm9yZSBzZW5kaW5nCisgKiAgICAgICAgICAgICAgaXQgRlRERiBhZGRzIHRoZSAgcHJlYW1ibGUsIGZyYW1lIHN0YXJ0LCBwaHkgaGVhZGVyIG9jdGV0cyBhbmQgb3B0aW9uYWxseSBhbiBGQ1MgdG8gdGhlIGZyYW1lIHByb3ZpZGUKKyAqICAgICAgICAgICAgICBieSB0aGUgYXBwbGljYXRpb24uCisgKiBccmVtYXJrICAgICAgV2hlbiBGVERGIGhhcyBzZW5kIHRoZSBmcmFtZSBvciBmYWlsZWQgdG8gc2VuZCB0aGUgZnJhbWUgaXQgd2lsbCBjYWxsIEZUREZfU0VORF9GUkFNRV9UUkFOU1BBUkVOVF9DT05GSVJNCisgKiAgICAgICAgICAgICAgd2l0aCB0aGUgaGFuZGxlIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIHNlbmQgc3RhdHVzLgorICovCit2b2lkIEZUREZfc2VuZEZyYW1lVHJhbnNwYXJlbnQoIEZUREZfRGF0YUxlbmd0aCAgICBmcmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCogICAgICAgIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0NoYW5uZWxOdW1iZXIgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9QVEkgICAgICAgICAgIHB0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9Cb29sZWFuICAgICAgIGNtc2FTdXBwcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgIGhhbmRsZSApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX1NFTkRfRlJBTUVfVFJBTlNQQVJFTlRfQ09ORklSTSAtIENvbmZpcm1zIGEgdHJhbnNwYXJlbnQgc2VuZAorICogXHBhcmFtW2luXSAgIGhhbmRsZTogICBUaGUgYXBwbGljYXRpb24gcHJvdmlkZWQgaGFuZGxlIG9mIHRoZSBjb3JyZXNwb25kaW5nIEZUREZfc2VuZEZyYW1lVHJhbnNwYXJlbnQgY2FsbAorICogXHBhcmFtW2luXSAgIHN0YXR1czogICBCaXQgbWFwcGVkIHN0YXR1cworICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgYXBwbGljYXRpb24gaXQgd2lsbCBjYWxsZWQgYnkgRlRERi4gSXQgbXVzdAorICogICAgICAgICAgICAgIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmdGRmX2NvbmZpZy5oLgorICogXHJlbWFyayAgICAgIEZUREYgY2FsbHMgdGhpcyBmdW5jdGlvbiB3aGVuIGEgZnJhbWUgaGFzIHNlbmQgc3VjY2Vzc2Z1bGx5IG9yIGZhaWxlZCB0byBzZW5kLiBUaGUgYXBwbGljYXRpb24gY2FuCisgKiAgICAgICAgICAgICAgbm93IGZyZWUgdGhlIGRhdGEgYnVmZmVyIG9mIHRoZSBjb3JyZXNwb25kaW5nIEZUREZfc2VuZEZyYW1lVHJhbnNwYXJlbnQgdXNpbmcgRlRERl9SRUxfREFUQV9CVUZGRVIKKyAqIFxyZW1hcmsgICAgICBJZiB0aGUgZnJhbWUgaXMgc2VuZCBzdWNjZXNzZnVsbHkgc3RhdHVzIGlzIGVxdWFsIHRvIDAKKyAqIFxyZW1hcmsgICAgICBJZiBzZW5kaW5nIHRoZSBmcmFtZSBmYWlsZWQgb25lIG9mIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBzdGF0dXMgYml0cyBpcyBzZXQ6CisgKiAgICAgICAgICAgICAgLSBGVERGX1RSQU5TUEFSRU5UX0NTTUFDQV9GQUlMVVJFOiBTZW5kaW5nIGZhaWxlZCBiZWNhdXNlIENTTUEtQ0EgZmFpbGVkCisgKiAgICAgICAgICAgICAgLSBGVERGX1RSQU5TUEFSRU5UX09WRVJGTE9XOiBTZW5kaW5nIGZhaWxlZCBiZWNhdXNlIG9mIGludGVybmFsIHJlc291cmNlIG92ZXJmbG93CisgKi8KK3ZvaWQgRlRERl9TRU5EX0ZSQU1FX1RSQU5TUEFSRU5UX0NPTkZJUk0oIHZvaWQqICAgICAgICAgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9CaXRtYXAzMiBzdGF0dXMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9zZW5kRnJhbWVUcmFuc3BhcmVudENvbmZpcm0gLSBDb252ZXJ0cyB0aGUgRlRERl9TRU5EX0ZSQU1FX1RSQU5TUEFSRU5UX0NPTkZJUk0gdG8gYSBtc2cgYnVmZmVyCisgKiAgICAgICAgICAgICAgYW5kIHRoZW4gY2FsbHMgRlRERl9SQ1ZfTVNHLgorICogXHBhcmFtW2luXSAgIGhhbmRsZTogICBUaGUgYXBwbGljYXRpb24gcHJvdmlkZWQgaGFuZGxlIG9mIHRoZSBjb3JyZXNwb25kaW5nIEZUREZfc2VuZEZyYW1lVHJhbnNwYXJlbnQgY2FsbAorICogXHBhcmFtW2luXSAgIHN0YXR1czogICBCaXQgbWFwcGVkIHN0YXR1cworICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhlIGlucHV0IHBhcmFtZXRlcnMgdG8gYSBGVERGX1RyYW5zcGFyZW50Q29uZmlybSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICBhbmQgdGhlbiBjYWxscyBGVERGX1JDVl9NU0cuCisgKiBccmVtYXJrICAgICAgRlRERl9TRU5EX0ZSQU1FX1RSQU5TUEFSRU5UX0NPTkZJUk0gY2FuIGJlIGRlZmluZWQgdG8gYmUgdGhpcyBmdW5jdGlvbi4KKyAqLwordm9pZCBGVERGX3NlbmRGcmFtZVRyYW5zcGFyZW50Q29uZmlybSggdm9pZCogICAgICAgICBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0JpdG1hcDMyIHN0YXR1cyApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX1JDVl9GUkFNRV9UUkFOU1BBUkVOVCAtIFJlY2VpdmUgZnJhbWUgdHJhbnNwYXJlbnQKKyAqIFxwYXJhbVtpbl0gICBmcmFtZUxlbmd0aDogTGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBmcmFtZQorICogXHBhcmFtW2luXSAgIGZyYW1lOiAgICAgICBQb2ludGVyIHRvIHJlY2VpdmVkIGZyYW1lLiAKKyAqIFxwYXJhbVtpbl0gICBzdGF0dXM6ICAgICAgQml0bWFwcGVkIHJlY2VpdmUgc3RhdHVzCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBpdCB3aWxsIGNhbGxlZCBieSBGVERGLiBJdCBtdXN0CisgKiAgICAgICAgICAgICAgYmUgY29uZmlndXJlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZ0ZGZfY29uZmlnLmguCisgKiBccmVtYXJrICAgICAgRlRERiBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gYSBmcmFtZSBpcyByZWNlaXZlZCB3aGVuIHRyYW5zcGFyZW50IG1vZGUgaXMgZW5hYmxlZAorICogXHJlbWFyayAgICAgIFRoZSBidWZmZXIgd2l0aCB0aGUgZnJhbWUgbXVzdCBiZSBjb3BpZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIFxyZW1hcmsgICAgICBUaGUgZm9sbG93aW5nIHN0YXR1cyBiaXRzIGNhbiBiZSBzZXQ6CisgKiAgICAgICAgICAgICAgLSBGVERGX1RSQU5TUEFSRU5UX1JDVl9DUkNfRVJST1I6IFRoZSBDUkMgKEZDUykgb2YgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIG5vdCBjb3JyZWN0CisgKiAgICAgICAgICAgICAgLSBGVERGX1RSQU5TUEFSRU5UX1JDVl9SRVNfRlJBTUVUWVBFOiBSZWNlaXZlZCBhIHJlc2VydmVkIGZyYW1lIHR5cGUKKyAqICAgICAgICAgICAgICAtIEZUREZfVFJBTlNQQVJFTlRfUkNWX1JFU19GUkFNRV9WRVJTSU9OOiBSZWNlaXZlZCBhIHJlc2VydmVkIGZyYW1lIHZlcnNpb24KKyAqICAgICAgICAgICAgICAtIEZUREZfVFJBTlNQQVJFTlRfUkNWX1VORVhQX0RTVF9BRERSOiBVbmV4cGVjdGVkIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqICAgICAgICAgICAgICAtIEZUREZfVFJBTlNQQVJFTlRfUkNWX1VORVhQX0RTVF9QQU5fSUQ6IFVuZXhwZWN0ZWQgZGVzdGlvbmF0aW9uIFBBTiBJRAorICogICAgICAgICAgICAgIC0gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfVU5FWFBfQkVBQ09OOiBVbmV4cGVjdGVkIGJlYWNvbiBmcmFtZQorICogICAgICAgICAgICAgIC0gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfVU5FWFBfTk9fREVTVF9BRERSOiBVbmV4cGVjdGVkIGZyYW1lIHdpdGhvdXQgZGVzdGluYXRpb24gYWRyZXMuCisgKi8KK3ZvaWQgRlRERl9SQ1ZfRlJBTUVfVFJBTlNQQVJFTlQoIEZUREZfRGF0YUxlbmd0aCBmcmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQqICAgICBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQml0bWFwMzIgICBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0xpbmtRdWFsaXR5IGxxaSk7CisKKy8qKgorICogXGJyaWVmICAgICAgIEZUREZfcmN2RnJhbWVUcmFuc3BhcmVudCAtIENvbnZlcnRzIHRoZSBGVERGX1JDVl9GUkFNRV9UUkFOU1BBUkVOVCB0byBhIG1zZyBidWZmZXIKKyAqICAgICAgICAgICAgICBhbmQgdGhlbiBjYWxscyBGVERGX1JDVl9NU0cuCisgKiBccGFyYW1baW5dICAgZnJhbWVMZW5ndGg6IExlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUKKyAqIFxwYXJhbVtpbl0gICBmcmFtZTogICAgICAgUG9pbnRlciB0byByZWNlaXZlZCBmcmFtZS4gCisgKiBccGFyYW1baW5dICAgc3RhdHVzOiAgICAgIEJpdG1hcHBlZCByZWNlaXZlIHN0YXR1cworICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gY29udmVycyB0aGUgaW5wdXQgcGFyYW1ldGVycyB0byBhIEZUREZfVHJhbnNwYXJlbnRJbmRpY2F0aW9uIHN0cnVjdHVyZQorICogICAgICAgICAgICAgIGFuZCB0aGVuIGNhbGxzIEZUREZfUkNWX01TRy4KKyAqIFxyZW1hcmsgICAgICBGVERGX1JDVl9GUkFNRV9UUkFOU1BBUkVOVCBjYW4gYmUgZGVmaW5lZCB0byBiZSB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIEZUREZfcmN2RnJhbWVUcmFuc3BhcmVudCggRlRERl9EYXRhTGVuZ3RoIGZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQqICAgICBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0JpdG1hcDMyICAgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTGlua1F1YWxpdHkgbHFpKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9zZXRTbGVlcEF0dHJpYnV0ZXMgLSBTZXQgc2xlZXAgYXRyaWJ1dGVzCisgKiBccGFyYW1baW5dICAgbG93UG93ZXJDbG9ja0N5Y2xlOiBUaGUgTFAgY2xvY2sgY3ljbGUgaW4gcGljb3NlY29uZHMKKyAqIFxwYXJhbVtpbl0gICB3YWtlVXBMYXRlbmN5OiAgICAgIFRoZSB3YWtlcCB1cCBsYXRlbmN5IHRpbWUgaW4gbG93IHBvd2VyIGNsb2NrIGN5Y2xlcworICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb25zIHNldHMgc29tZSBhdHRyaWJ1dGVzIHJlcXVpcmVkIGJ5IEZUREYgdG8gZ28gaW50byBhIGRlZXAgc2xlZXAgYW5kIHdha2UgdXAgZnJvbSBpdC4KKyAqIFxyZW1hcmsgICAgICBUaGUgd2FrZSB1cCBsYXRlbmN5IGlzIHRoZSB0aW1lIGJldHdlZW4gdGhlIHdha2V1cCBzaWduYWwgc2VuZCBieSBGVERGIGFuZCB0aGUgbW9tZW50IHRoYXQgdGhlCisgKiAgICAgICAgICAgICAgY2xvY2tzIGFyZSBzdGFibGUuIEl0IHdpbGwgYmUgdXNlZCBieSBGVERGIHRvIGRldGVybWluZSB3aGVuIGl0IG11c3QgbXVzdCBzZW5kIHRoZSB3YWtldXAgc2lnbmFsLgorICogXHJlbWFyayAgICAgIFRoZSBsb3cgcG93ZXIgY2xvY2sgY3ljbGUgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBob3cgbG9uZyB0aGUgc3lzdGVtIGhhcyBzbGVwdCBhbmQgcmVjb3ZlciAKKyAqICAgICAgICAgICAgICB0aGUgc3ltYm9sIGNvdW50ZXIgaW50ZXJuYWxseSB1c2VkIGJ5IEZUREYuCisgKi8KK3ZvaWQgRlRERl9zZXRTbGVlcEF0dHJpYnV0ZXMoIEZUREZfUFNlYyAgICAgICAgICAgICAgICAgIGxvd1Bvd2VyQ2xvY2tDeWNsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTnJMb3dQb3dlckNsb2NrQ3ljbGVzIHdha2VVcExhdGVuY3kgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9jYW5TbGVlcCAtIEluZGljYXRlcyB3aGV0aGVyIEZUREYgY2FuIGdvIGluIGEgZGVlcCBzbGVlcAorICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZSBpbiBtaWNyb3NlY29uZHMgdGhhdCB0aGUgRlRERiBjYW4gZGVlcCBzbGVlcC4KKyAqIFxyZW1hcmsgICAgICBJdCBkb2VzIE5PVCB0YWtlIGludG8gYWNjb3VudCB0aGUgd2FrZXVwIGxhdGVuY3kuCisgKiBccmV0dXJuICAgICAgVGhlIG51bWJlciBvZiBtaWNyb3NlY29uZHMgdGhhdCB0aGUgRlRERiBjYW4gZGVlcCBzbGVlcC4gSWYgZXF1YWwgdG8gMCB0aGUgRlRERiBpcyBzdGlsbCBhY3RpdmUKKyAqICAgICAgICAgICAgICBhbmQgY2Fubm90IGRlZXAgc2xlZXAKKyAqLworRlRERl9VU2VjIEZUREZfY2FuU2xlZXAoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9wcmVwYXJlRm9yU2xlZXAgLSBQcmVwYXJlIHRoZSBGVERGIGZvciBhIGRlZXAgc2xlZXAKKyAqIFxwYXJhbVtpbl0gICBzbGVlcFRpbWU6IFRoZSBzbGVlcCB0aW1lLiBBZnRlciB0aGUgc2xlZXAgdGltZSB0aGUgRlRERiBtdXN0IGJlIHJlYWR5IHRvIGRvIG5leHQgc2NoZWR1bGVkIGFjdGl2aXR5LgorICogXHJlbWFyayAgICAgIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjb21wbGV0ZWQgdGhlIGFwcGxpY2F0aW9uIGNhbiBzYWZlbHkgcG93ZXIgb2ZmIHRoZSBGVERGIGFuZCBwdXQgdGhlIHVQIGluCisgKiAgICAgICAgICAgICAgYSBkZWVwIHNsZWVwLiBBdCBsZWFzdCB3YWtlIHVwIGxhdGVuY3kgdGltZSBtaWNyb3NlY29uZHMgYmVmb3JlIHNsZWVwIHRpbWUgaXMgZXhwaXJlZCB0aGUgRlRERgorICogICAgICAgICAgICAgIHdpbGwgc2VuZCBhIHdha2V1cCBzaWduYWwuIEZUREYgZXhwZWN0IHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbGxzIEZUREZfd2FrZVVwIGFzIGl0IGhhcyBiZWVuCisgKiAgICAgICAgICAgICAgd29rZW4gdXAuCisgKiBccmV0dXJuICAgICAgRlRERl9UUlVFIGlmIHRoZSBGVERGIGNhbiBiZSBwdXQgaW4gZGVlcCBzbGVlcCwgRlRERl9GQUxTRSBpZiB0aGUgc2xlZXBUaW1lIGlzIHRvbyBzaG9ydCB0byBnbyB0bworICogICAgICAgICAgICAgIGRlZXAgc2xlZXAgYW5kIHdha2UgdXAgYWdhaW4gYWZ0ZXIgc2xlZXBUaW1lIG1pY3Jvc2Vjb25kcywgdGhlIEZUREYgY2Fubm90IGJlIHB1dCBpbiBkZWVwIHNsZWVwLgorICovCitGVERGX0Jvb2xlYW4gRlRERl9wcmVwYXJlRm9yU2xlZXAoIEZUREZfVVNlYyBzbGVlcFRpbWUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl93YWtlVXAgLSBXYWtlIHVwIHRoZSBGVERGIGFmdGVyIGEgc2xlZXAKKyAqIFxyZW1hcmsgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzdG9yZXMgdGhlIEZUREYgdG8gc3RhdGUgYmVmb3JlIHRoZSBkZWVwIHNsZWVwLiBJdCB3aWxsIGRvZXMgdGhpcyBpbiAyIHN0ZXBzCisgKiAgICAgICAgICAgICAgMS4gSXQgaW5pdGlhbGlzZXMgaXQgaW50ZXJuYWwgc3RhdGVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsbCB0aGUgbm9uIHRpbWluZyBzcGVjaWZpYyBIVy4gQWZ0ZXIKKyAqICAgICAgICAgICAgICB0aGF0IGl0IHdhaXRzIHVudGlsIHRoZSB3YWtlIHVwIGxhdGVuY3kgdGltZSBoYXMgYmVlbiBleHBpcmVkLiBXaGVuIGV4cGlyZWQgRlRERiBhc3N1bWVzIHRoYXQgdGhlCisgKiAgICAgICAgICAgICAgc2xvY2tzIGFyZSBzdGFibGUuCisgKiAgICAgICAgICAgICAgMi4gSXQgcmVzdG9yZXMgdGltZXJzIGluIEhXIGFuZCBjYWxscyB0aGUgZnVuY3Rpb24gRlRERl9XQUtFX1VQX1JFQURZIHRvIGluZGljYXRlIEZUREYgaXMgdXAgYWdhaW4sCisgKiAgICAgICAgICAgICAgcmVhZHkgdG8gcGVyZm9ybSBzY2hlZHVsZWQgYWN0aXZpdGllcyBhbmQgcmVhZHkgdG8gcHJvY2VzcyBuZXcgcmVxdWVzdHMgZnJvbSB0aGUgYXBwbGljYXRpb24uCisgKi8KK3ZvaWQgRlRERl93YWtlVXAoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9XQUtFX1VQX1JFQURZIC0gSW5kaWNhdGlvbiB0aGF0IEZUREYgaGFzIHdva2UgdXAKKyAqIFxyZW1hcmsgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGl0IHdpbGwgY2FsbGVkIGJ5IEZUREYuIEl0IG11c3QKKyAqICAgICAgICAgICAgICBiZSBjb25maWd1cmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZnRkZl9jb25maWcuaC4KKyAqIFxyZW1hcmsgICAgICBGVERGIGNhbGxzIHRoaXMgZnVuY3Rpb24gd2hlbiBpdCBpcyB1cCBhZ2FpbiwgcmVhZHkgdG8gcGVyZm9ybSBzY2hlZHVsZWQgYWN0aXZpdGllcyBhbmQgcmVhZHkgdG8KKyAqICAgICAgICAgICAgICBwcm9jZXNzIG5ldyByZXF1ZXN0cyBmcm9tIHRoZSBhcHBsaWNhdGlvbi4KKyAqLwordm9pZCBGVERGX1dBS0VfVVBfUkVBRFkoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9TTEVFUF9DQUxMQkFDSyAtIENhbGxiYWNrIGZyb20gRlRERl9TTEVFUF9SRVFVRVNUCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiwgaXQgd2lsbCBiZSBjYWxsZWQgYnkgRlRERi4KKyAqICAgICAgICAgICAgICBJdCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmdGRmX2NvbmZpZy5oCisgKiBccmVtYXJrICAgICAgRlRERiBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gYW4gRlRERl9TTEVFUF9SRVFVRVNUIG1lc3NhZ2UgaXMgc2VudCB0aHJvdWdoIHRoZSBGVERGX3NuZE1zZyBmdW5jdGlvbi4KKyAqLwordm9pZCBGVERGX1NMRUVQX0NBTExCQUNLKCBGVERGX1VTZWMgc2xlZXBUaW1lICk7CisKK3ZvaWQgRlRERl9yZXNldChpbnQgc2V0RGVmYXVsdFBJQik7CisKK0ZUREZfUFRJIEZUREZfZ2V0UnhQdGkoIHZvaWQgKTsKKworI2lmIEZUREZfVVNFX1BUSQordm9pZCBGVERGX3NldFJ4UHRpKCBGVERGX1BUSSByeF9wdGkgKTsKKyNpZiBGVERGX1VTRV9BVVRPX1BUSQordm9pZCBGVERGX3Jlc3RvcmVSeFB0aSh2b2lkKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBGVERGX1BIWV9BUEkKK0ZUREZfU3RhdHVzIEZUREZfc2VuZEZyYW1lU2ltcGxlKCBGVERGX0RhdGFMZW5ndGggICAgZnJhbWVMZW5ndGgsCisgICAgICAgIEZUREZfT2N0ZXQqICAgICAgICBmcmFtZSwKKyAgICAgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWwsCisgICAgICAgIEZUREZfUFRJICAgICAgICAgICBwdGksCisgICAgICAgIEZUREZfQm9vbGVhbiAgICAgICBjc21hU3VwcHJlc3MpOworRlRERl9QSUJBdHRyaWJ1dGVWYWx1ZSAqRlRERl9nZXRWYWx1ZShGVERGX1BJQkF0dHJpYnV0ZSBQSUJBdHRyaWJ1dGUpOworRlRERl9TdGF0dXMgRlRERl9zZXRWYWx1ZShGVERGX1BJQkF0dHJpYnV0ZSBQSUJBdHRyaWJ1dGUsIGNvbnN0IEZUREZfUElCQXR0cmlidXRlVmFsdWUgKlBJQkF0dHJpYnV0ZVZhbHVlKTsKK3ZvaWQgRlRERl9yeEVuYWJsZShGVERGX1RpbWUgcnhPbkR1cmF0aW9uKTsKKyNlbmRpZiAvKiBGVERGX1BIWV9BUEkgKi8KKworI2lmIEZUREZfREJHX0JVU19FTkFCTEUKKy8qKgorICogXGJyaWVmIENoZWNrcyBjdXJyZW50IGRlYnVnIG1vZGUgYW5kIG1ha2VzIGFwcHJvcHJpYXRlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLgorICovCit2b2lkIEZUREZfY2hlY2tEYmdNb2RlKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTZXRzIGRlYnVnIGJ1cyBtb2RlLgorICovCit2b2lkIEZUREZfc2V0RGJnTW9kZShGVERGX0RiZ01vZGUgZGJnTW9kZSk7CisKKy8qKgorICogXGJyaWVmIERlYnVnIGJ1cyBHUElPIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2suIE1ha2VzIGFwcHJvcHJpYXRlIEdQSU8gY29uZmlndXJhdGlvbnMgZm9yIHRoZSBkZWJ1ZworICogYnVzLgorICovCit2b2lkIEZUREZfREJHX0JVU19HUElPX0NPTkZJRyh2b2lkKTsKKyNlbmRpZiAvKiBGVERGX0RCR19CVVNfRU5BQkxFICovCisKKyNpZiBkZ19jb25maWdVU0VfRlRERl9ERFBIWSA9PSAxCit2b2lkIEZUREZfZGRwaHlTZXQodWludDE2X3QgY2NhUmVnKTsKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfRlRERl9ERFBIWSA9PSAxICovCisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisKKyNpZiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTworI2lmbmRlZiBGVERGX0xJVEUKKy8qKgorICogXGJyaWVmIENvbnRyb2xzIHdoZW4gdGhlIEZQUFIgYWRkcmVzcyBpbnZhbGlkYXRpb24gd2lsbCBiZSBwZXJmb3JtZWQuCisgKgorICogSWYgc2V0IHRvIDAgKHJlY29tbWVuZGVkKSwgYWRkcmVzcyBpbnZhbGlkYXRpb24gaW4gRlBQUiBvY2N1cnMgcmlnaHQgYWZ0ZXIgdGhlIGZyYW1lIGlzIHBhc3NlZCB0bworICogTE1BQyBmb3IgZGlyZWN0IHRyYW5zbWlzc2lvbi4gSWYgc2V0IHRvIDEsIGFkZHJlc3MgaW52YWxpZGF0aW9uIG9jY3VycyBhZnRlciB0aGUgYXNzb2NpYXRlZAorICogY29uZmlybSBtZXNzYWdlIGlzIHJlY2VpdmVkLgorICovCisjZGVmaW5lIEZUREZfRlBQUl9ERUZFUl9JTlZBTElEQVRJT04gICAgICAgICAgICAgICAgICAgIDAKKworLyoqCisgKiBcYnJpZWYgQWRkcyBhIG5ldyBzaG9ydCBhZGRyZXNzIHRvIEZQUFIsIGluaXRpYWxpemluZyB0aGUgY29ycmVzcG9uZGluZyBGU00uCisgKgorICogQSBzaG9ydCBhZGRyZXNzIEZQIEZTTSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgbm90aWZpY2F0aW9ucyAoZXZlbnRzKToKKyAqCisgKiAtIE5ldyBhZGRyZXNzIChpbml0aWFsaXplKSBieSBjYWxsaW5nIEByZWYgRlRERl9mcEZzbVNob3J0QWRkcmVzc05ldygpCisgKiAtIExhc3QgZnJhbWUgcGVuZGluZyAocGFzc2VkIHRvIGRpcmVjdCBzZW5kaW5nKSBieSBjYWxsaW5nIEByZWYKKyAqIEZUREZfZnBGc21TaG9ydEFkZHJlc3NMYXN0RnJhbWVQZW5kaW5nKCkKKyAqIC0gTGFzdCBwZW5kaW5nIGZyYW1lIHNlbnQgYnkgY2FsbGluZyBAcmVmIEZUREZfZnBGc21DbGVhclBlbmRpbmcoKQorICoKKyAqIEEgbmV3IGFkZHJlc3MgbWF5IGJlIHJlamVjdGVkIGlmIHRoZXJlIGlzIG5vIGFkZXF1YXRlIHNwYWNlIGxlZnQgaW4gRlBQUi4KKyAqCisgKiBccGFyYW0gW2luXSBwYW5JZCBEZXN0aW5hdGlvbiBQQU4gSUQuCisgKiBccGFyYW0gW2luXSBzaG9ydEFkZHJlc3MgRGVzdGluYXRpb24gc2hvcnQgYWRkcmVzcy4KKyAqCisgKiBccmV0dXJuIFxyZWYgRlRERl9UUlVFIG9uIHN1Y2Nlc3MuCisgKi8KK0ZUREZfQm9vbGVhbiBGVERGX2ZwRnNtU2hvcnRBZGRyZXNzTmV3KEZUREZfUEFOSWQgcGFuSWQsIEZUREZfU2hvcnRBZGRyZXNzIHNob3J0QWRkcmVzcyk7CisKKy8qKgorICogXGJyaWVmIEFkZHMgYSBuZXcgZXh0ZW5kZWQgYWRkcmVzcyB0byBGUFBSLCBpbml0aWFsaXppbmcgdGhlIGNvcnJlc3BvbmRpbmcgRlNNLgorICoKKyAqIEFuIGV4dGVuZGVkIGFkZHJlc3MgRlAgRlNNIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBub3RpZmljYXRpb25zIChldmVudHMpOgorICoKKyAqIC0gTmV3IGFkZHJlc3MgKGluaXRpYWxpemUpIGJ5IGNhbGxpbmcgQHJlZiBGVERGX2ZwRnNtRXh0QWRkcmVzc05ldygpCisgKiAtIExhc3QgZnJhbWUgcGVuZGluZyAocGFzc2VkIHRvIGRpcmVjdCBzZW5kaW5nKSBieSBjYWxsaW5nIEByZWYKKyAqIEZUREZfZnBGc21FeHRBZGRyZXNzTGFzdEZyYW1lUGVuZGluZygpCisgKiAtIExhc3QgcGVuZGluZyBmcmFtZSBzZW50IGJ5IGNhbGxpbmcgQHJlZiBGVERGX2ZwRnNtQ2xlYXJQZW5kaW5nKCkKKyAqCisgKiBBIG5ldyBhZGRyZXNzIG1heSBiZSByZWplY3RlZCBpZiB0aGVyZSBpcyBubyBhZGVxdWF0ZSBzcGFjZSBsZWZ0IGluIEZQUFIuCisgKgorICogXHBhcmFtIFtpbl0gcGFuSWQgRGVzdGluYXRpb24gUEFOIElELgorICogXHBhcmFtIFtpbl0gZXh0QWRkcmVzcyBEZXN0aW5hdGlvbiBleHRlbmRlZCBhZGRyZXNzLgorICoKKyAqIFxyZXR1cm4gXHJlZiBGVERGX1RSVUUgb24gc3VjY2Vzcy4KKyAqLworRlRERl9Cb29sZWFuIEZUREZfZnBGc21FeHRBZGRyZXNzTmV3KEZUREZfUEFOSWQgcGFuSWQsIEZUREZfRXh0QWRkcmVzcyBleHRBZGRyZXNzKTsKKworLyoqCisgKiBcYnJpZWYgTm90aWZpZXMgRlAgRlNNIHRoYXQgdGhlIGxhc3QgcGFja2V0IGZvciB0aGUgYXNzb2NpYXRlZCBkZXN0aW5hdGlvbiBoYXMgYmVlbiBwYXNzZWQgZm9yCisgKiBkaXJlY3QgdHJhbnNtaXNzaW9uLgorICoKKyAqIFxwYXJhbSBbaW5dIHBhbklkIERlc3RpbmF0aW9uIFBBTiBJRC4KKyAqIFxwYXJhbSBbaW5dIHNob3J0QWRkcmVzcyBEZXN0aW5hdGlvbiBzaG9ydCBhZGRyZXNzLgorICovCit2b2lkIEZUREZfZnBGc21TaG9ydEFkZHJlc3NMYXN0RnJhbWVQZW5kaW5nKEZUREZfUEFOSWQgcGFuSWQsIEZUREZfU2hvcnRBZGRyZXNzIHNob3J0QWRkcmVzcyk7CisKKy8qKgorICogXGJyaWVmIE5vdGlmaWVzIEZQIEZTTSB0aGF0IHRoZSBsYXN0IHBhY2tldCBmb3IgdGhlIGFzc29jaWF0ZWQgZGVzdGluYXRpb24gaGFzIGJlZW4gcGFzc2VkIGZvcgorICogZGlyZWN0IHRyYW5zbWlzc2lvbi4KKyAqCisgKiBccGFyYW0gW2luXSBwYW5JZCBEZXN0aW5hdGlvbiBQQU4gSUQuCisgKiBccGFyYW0gW2luXSBzaG9ydEFkZHJlc3MgRGVzdGluYXRpb24gZXh0ZW5kZWQgYWRkcmVzcy4KKyAqLwordm9pZCBGVERGX2ZwRnNtRXh0QWRkcmVzc0xhc3RGcmFtZVBlbmRpbmcoRlRERl9QQU5JZCBwYW5JZCwgRlRERl9FeHRBZGRyZXNzIGV4dEFkZHJlc3MpOworCisvKioKKyAqIFxicmllZiBOb3RpZmllcyBGUCBGU00gdGhhdCB0aGUgbGFzdCBwZW5kaW5nIHBhY2tldCBoYXMgYmVlbiB0cmFuc21pdHRlZCAoVU1BQyBzdGF0ZSBtYWNoaW5lCisgKiBjbG9zZWQpLgorICovCit2b2lkIEZUREZfZnBGc21DbGVhclBlbmRpbmcodm9pZCk7CisKKyNlbmRpZiAvKiAjaWZuZGVmIEZUREZfTElURSAqLworCisvKioKKyAqIFxicmllZiBOdW1iZXIgb2YgRlBQUiB0YWJsZSBlbnRyaWVzLgorICovCisjZGVmaW5lIEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8qKgorICogXGJyaWVmIE51bWJlciBvZiBleHRlbmRlZCBhZGRyZXNzIHRhYmxlIGVudHJpZXMuCisgKi8KKyNkZWZpbmUgRlRERl9GUFBSX1RBQkxFX0VYVF9BRERSRVNTX0VOVFJJRVMgICAgICAgICAgICAgRlRERl9GUFBSX1RBQkxFX0VOVFJJRVMKKworLyoqCisgKiBcYnJpZWYgTnVtYmVyIG9mIHNob3J0IGFkZHJlc3MgdGFibGUgZW50cmllcy4KKyAqLworI2RlZmluZSBGVERGX0ZQUFJfVEFCTEVfU0hPUlRfQUREUkVTU19FTlRSSUVTICAgICAgICAgICAoRlRERl9GUFBSX1RBQkxFX0VOVFJJRVMgKiA0KQorCisvKioKKyAqIFxicmllZiBSZXNldHMgRlBQUiB0YWJsZSwgaW52YWxpZGF0aW5nIGFsbCBhZGRyZXNzZXMuCisgKi8KK3ZvaWQgRlRERl9mcHByUmVzZXQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEdldHMgdGhlIHNob3J0IGFkZHJlc3MgcHJvZ3JhbW1lZCBhdCB0aGUgc3BlY2lmaWVkIEZQUFIgdGFibGUgcG9zaXRpb24uCisgKgorICogXHBhcmFtIFtpbl0gZW50cnkgRlBQUiB0YWJsZSBlbnRyeSAoMCB0byBccmVmIEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTIC0gMSkuCisgKiBccGFyYW0gW2luXSBzaG9ydEFkZHJJZHggU2hvcnQgYWRkcmVzcyBwb3NpdGlvbiB3aXRoaW4gdGhlIGVudHJ5ICgwIHRvIDMpLgorICoKKyAqIFxyZXR1cm4gUmVxdWVzdGVkIHNob3J0IGFkZHJlc3MKKyAqLworRlRERl9TaG9ydEFkZHJlc3MgRlRERl9mcHByR2V0U2hvcnRBZGRyZXNzKHVpbnQ4X3QgZW50cnksIHVpbnQ4X3Qgc2hvcnRBZGRySWR4KTsKKworLyoqCisgKiBcYnJpZWYgUHJvZ3JhbXMgYSBzaG9ydCBhZGRyZXNzIHByb2dyYW1tZWQgYXQgdGhlIHNwZWNpZmllZCBGUFBSIHRhYmxlIHBvc2l0aW9uLgorICoKKyAqIFxwYXJhbSBbaW5dIGVudHJ5IEZQUFIgdGFibGUgZW50cnkgKDAgdG8gXHJlZiBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyAtIDEpLgorICogXHBhcmFtIFtpbl0gc2hvcnRBZGRySWR4IFNob3J0IGFkZHJlc3MgcG9zaXRpb24gd2l0aGluIHRoZSBlbnRyeSAoMCB0byAzKS4KKyAqIFxwYXJhbSBbaW5dIEFzc29jaWF0ZWQgc2hvcnQgYWRkcmVzcy4KKyAqLwordm9pZCBGVERGX2ZwcHJTZXRTaG9ydEFkZHJlc3ModWludDhfdCBlbnRyeSwgdWludDhfdCBzaG9ydEFkZHJJZHgsCisgICAgICAgIEZUREZfU2hvcnRBZGRyZXNzIHNob3J0QWRkcmVzcyk7CisKKy8qKgorICogXGJyaWVmIERldGVybWluZXMgdmFsaWRpdHkgb2YgYSBzaG9ydCBhZGRyZXNzIHByb2dyYW1tZWQgYXQgdGhlIHNwZWNpZmllZCBGUFBSIHRhYmxlIHBvc2l0aW9uLgorICoKKyAqIFxwYXJhbSBbaW5dIGVudHJ5IEZQUFIgdGFibGUgZW50cnkgKDAgdG8gXHJlZiBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyAtIDEpLgorICogXHBhcmFtIFtpbl0gc2hvcnRBZGRySWR4IFNob3J0IGFkZHJlc3MgcG9zaXRpb24gd2l0aGluIHRoZSBlbnRyeSAoMCB0byAzKS4KKyAqCisgKiBccmV0dXJuIEZUREZfVFJVRSBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZC4KKyAqLworRlRERl9Cb29sZWFuIEZUREZfZnBwckdldFNob3J0QWRkcmVzc1ZhbGlkKHVpbnQ4X3QgZW50cnksIHVpbnQ4X3Qgc2hvcnRBZGRySWR4KTsKKworLyoqCisgKiBcYnJpZWYgU2V0cyB2YWxpZGl0eSBvZiBhIHNob3J0IGFkZHJlc3MgcHJvZ3JhbW1lZCBhdCB0aGUgc3BlY2lmaWVkIEZQUFIgdGFibGUgcG9zaXRpb24uCisgKgorICogXHBhcmFtIFtpbl0gZW50cnkgRlBQUiB0YWJsZSBlbnRyeSAoMCB0byBccmVmIEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTIC0gMSkuCisgKiBccGFyYW0gW2luXSBzaG9ydEFkZHJJZHggU2hvcnQgYWRkcmVzcyBwb3NpdGlvbiB3aXRoaW4gdGhlIGVudHJ5ICgwIHRvIDMpLgorICogXHBhcmFtIFtpbl0gdmFsaWQgQXNzb2NpYXRlZCB2YWxpZGl0eS4KKyAqLwordm9pZCBGVERGX2ZwcHJTZXRTaG9ydEFkZHJlc3NWYWxpZCh1aW50OF90IGVudHJ5LCB1aW50OF90IHNob3J0QWRkcklkeCwKKyAgICAgICAgRlRERl9Cb29sZWFuIHZhbGlkKTsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgZXh0ZW5kZWQgYWRkcmVzcyBwcm9ncmFtbWVkIGF0IHRoZSBzcGVjaWZpZWQgRlBQUiB0YWJsZSBwb3NpdGlvbi4KKyAqCisgKiBccGFyYW0gW2luXSBlbnRyeSBGUFBSIHRhYmxlIGVudHJ5ICgwIHRvIFxyZWYgRlRERl9GUFBSX1RBQkxFX0VOVFJJRVMgLSAxKS4KKyAqCisgKiBccmV0dXJuIFJlcXVlc3RlZCBleHRlbmRlZCBhZGRyZXNzCisgKi8KK0ZUREZfRXh0QWRkcmVzcyBGVERGX2ZwcHJHZXRFeHRBZGRyZXNzKHVpbnQ4X3QgZW50cnkpOworCisvKioKKyAqIFxicmllZiBQcm9ncmFtcyBhbiBleHRlbmRlZCBhZGRyZXNzIHByb2dyYW1tZWQgYXQgdGhlIHNwZWNpZmllZCBGUFBSIHRhYmxlIHBvc2l0aW9uLgorICoKKyAqIFxwYXJhbSBbaW5dIGVudHJ5IEZQUFIgdGFibGUgZW50cnkgKDAgdG8gXHJlZiBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyAtIDEpLgorICogXHBhcmFtIFtpbl0gQXNzb2NpYXRlZCBleHRlbmRlZCBhZGRyZXNzLgorICovCit2b2lkIEZUREZfZnBwclNldEV4dEFkZHJlc3ModWludDhfdCBlbnRyeSwgRlRERl9FeHRBZGRyZXNzIGV4dEFkZHJlc3MpOworCisvKioKKyAqIFxicmllZiBEZXRlcm1pbmVzIHZhbGlkaXR5IG9mIGFuIGV4dGVuZGVkIGFkZHJlc3MgcHJvZ3JhbW1lZCBhdCB0aGUgc3BlY2lmaWVkIEZQUFIgdGFibGUKKyAqIHBvc2l0aW9uLgorICoKKyAqIFxwYXJhbSBbaW5dIGVudHJ5IEZQUFIgdGFibGUgZW50cnkgKDAgdG8gXHJlZiBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyAtIDEpLgorICoKKyAqIFxyZXR1cm4gXHJlZiBGVERGX1RSVUUgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQuCisgKi8KK0ZUREZfQm9vbGVhbiBGVERGX2ZwcHJHZXRFeHRBZGRyZXNzVmFsaWQodWludDhfdCBlbnRyeSk7CisKKy8qKgorICogXGJyaWVmIFNldHMgdmFsaWRpdHkgb2YgYW4gZXh0ZW5kZWQgYWRkcmVzcyBwcm9ncmFtbWVkIGF0IHRoZSBzcGVjaWZpZWQgRlBQUiB0YWJsZSBwb3NpdGlvbi4KKyAqCisgKiBccGFyYW0gW2luXSBlbnRyeSBGUFBSIHRhYmxlIGVudHJ5ICgwIHRvIFxyZWYgRlRERl9GUFBSX1RBQkxFX0VOVFJJRVMgLSAxKS4KKyAqIFxwYXJhbSBbaW5dIHZhbGlkIEFzc29jaWF0ZWQgdmFsaWRpdHkuCisgKi8KK3ZvaWQgRlRERl9mcHByU2V0RXh0QWRkcmVzc1ZhbGlkKHVpbnQ4X3QgZW50cnksIEZUREZfQm9vbGVhbiB2YWxpZCk7CisKKy8qKgorICogXGJyaWVmIEdldHMgYSBmcmVlIChpbnZhbGlkKSBzaG9ydCBhZGRyZXNzIHBvc2l0aW9uIGluIHRoZSBGUFBSIHRhYmxlLgorICoKKyAqIFxwYXJhbSBbb3V0XSBlbnRyeSBSZWZlcmVuY2UgdG8gdGhlIEZQUFIgdGFibGUgZW50cnkuCisgKiBccGFyYW0gW291dF0gc2hvcnRBZGRySWR4IFJlZmVyZW5jZSB0byB0aGUgc2hvcnQgYWRkcmVzcyBwb3NpdGlvbiB3aXRoaW4gdGhlIGVudHJ5LgorICoKKyAqIFxyZXR1cm4gXHJlZiBGVERGX1RSVUUgaWYgYSBmcmVlIHBvc2l0aW9uIHdhcyBmb3VuZC4KKyAqLworRlRERl9Cb29sZWFuIEZUREZfZnBwckdldEZyZWVTaG9ydEFkZHJlc3ModWludDhfdCAqIGVudHJ5LAorICAgICAgICB1aW50OF90ICogc2hvcnRBZGRySWR4KTsKKworLyoqCisgKiBcYnJpZWYgR2V0cyBhIGZyZWUgKGludmFsaWQpIGV4dGVuZGVkIGFkZHJlc3MgcG9zaXRpb24gaW4gdGhlIEZQUFIgdGFibGUuCisgKgorICogXHBhcmFtIFtvdXRdIGVudHJ5IFJlZmVyZW5jZSB0byB0aGUgRlBQUiB0YWJsZSBlbnRyeS4KKyAqCisgKiBccmV0dXJuIFxyZWYgRlRERl9UUlVFIGlmIGEgZnJlZSBwb3NpdGlvbiB3YXMgZm91bmQuCisgKi8KK0ZUREZfQm9vbGVhbiBGVERGX2ZwcHJHZXRGcmVlRXh0QWRkcmVzcyh1aW50OF90ICogZW50cnkpOworCisvKioKKyAqIFxicmllZiBMb29rcyB1cCBhIHNob3J0IGFkZHJlc3Mgd2l0aGluIHRoZSBGUFBSIHRhYmxlLgorICoKKyAqIFxwYXJhbSBbaW5dIHNob3J0QWRkciBBc3NvY2lhdGVkIHNob3J0IGFkZHJlc3MuCisgKiBccGFyYW0gW291dF0gZW50cnkgUmVmZXJlbmNlIHRvIHRoZSBGUFBSIHRhYmxlIGVudHJ5LgorICogXHBhcmFtIFtvdXRdIHNob3J0QWRkcklkeCBSZWZlcmVuY2UgdG8gdGhlIHNob3J0IGFkZHJlc3MgcG9zaXRpb24gd2l0aGluIHRoZSBlbnRyeS4KKyAqCisgKiAgKiBccmV0dXJuIFxyZWYgRlRERl9UUlVFIGlmIHRoZSBhZGRyZXNzIHdhcyBmb3VuZC4KKyAqLworRlRERl9Cb29sZWFuIEZUREZfZnBwckxvb2t1cFNob3J0QWRkcmVzcyhGVERGX1Nob3J0QWRkcmVzcyBzaG9ydEFkZHIsIHVpbnQ4X3QgKiBlbnRyeSwKKyAgICAgICAgdWludDhfdCAqIHNob3J0QWRkcklkeCk7CisKKy8qKgorICogXGJyaWVmIExvb2tzIHVwIGFuIGV4dGVuZGVkIGFkZHJlc3Mgd2l0aGluIHRoZSBGUFBSIHRhYmxlLgorICoKKyAqIFxwYXJhbSBbaW5dIGV4dEFkZHIgQXNzb2NpYXRlZCBleHRlbmRlZCBhZGRyZXNzLgorICogXHBhcmFtIFtvdXRdIGVudHJ5IFJlZmVyZW5jZSB0byB0aGUgRlBQUiB0YWJsZSBlbnRyeS4KKyAqCisgKiAgKiBccmV0dXJuIFxyZWYgRlRERl9UUlVFIGlmIHRoZSBhZGRyZXNzIHdhcyBmb3VuZC4KKyAqLworRlRERl9Cb29sZWFuIEZUREZfZnBwckxvb2t1cEV4dEFkZHJlc3MoRlRERl9FeHRBZGRyZXNzIGV4dEFkZHIsIHVpbnQ4X3QgKiBlbnRyeSk7CisKKyNlbmRpZiAvKiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTyAqLworCisvKioKKyAqIFxicmllZiBTZXRzIEZQUFIgbW9kZS4KKyAqCisgKiBccGFyYW0gW2luXSBtYXRjaEZwIFNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhlIEZQIGJpdCB3aGVuIGFja25vd2xlZGdpbmcgYSByZWNlaXZlZCBmcmFtZSB3aXRoIGEKKyAqIHNvdXJjZSBhZGRyZXNzIHRoYXQgbWF0Y2hlcyBhIHZhbGlkIGEgYWRkcmVzcyBpbiB0aGUgRlBQUiB0YWJsZS4gVGhlIG9wcG9zaXRlIHZhbHVlIGlzIHNldCBpZiB0aGUKKyAqIHNvdXJjZSBhZGRyZXNzIGRvZXMgbm90IG1hdGNoLiBJZ25vcmVkIGlmIFxhIGZwT3ZlcnJpZGUgaXMgXHJlZiBGVERGX1RSVUUuCisgKgorICogXHBhcmFtIFtpbl0gZnBPdmVycmlkZSBJZiBccmVmIEZUREZfVFJVRSwgdGhlIHZhbHVlIG9mIFxhIGZwRm9yY2UgaXMgdXNlZCBmb3Igc2V0dGluZyB0aGUgRlAgYml0LAorICogcmVnYXJkbGVzcyBvZiB0aGUgYWRkcmVzcyB0YWJsZSBtYXRjaGluZyByZXN1bHQuCisgKgorICogXHBhcmFtIFtpbl0gZnBGb3JjZSBGUCBiaXQgdmFsdWUgd2hlbiBmcE92ZXJyaWRlIGlzIFxyZWYgRlRERl9UUlVFLiBJZ25vcmVkIG90aGVyd2lzZS4KKyAqLwordm9pZCBGVERGX2ZwcHJTZXRNb2RlKEZUREZfQm9vbGVhbiBtYXRjaEZwLCBGVERGX0Jvb2xlYW4gZnBPdmVycmlkZSwgRlRERl9Cb29sZWFuIGZwRm9yY2UpOworCisjaWYgRlRERl9GUF9CSVRfVEVTVF9NT0RFCisvKioKKyAqIFxicmllZiBHZXRzIEZQUFIgbW9kZS4KKyAqCisgKiBccGFyYW0gW291dF0gbWF0Y2hGcCBSZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIHZhbHVlLiBcc2VlIEZUREZfZnBwclJhbVNldE1vZGUKKyAqCisgKiBccGFyYW0gW291dF0gZnBPdmVycmlkZSBSZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIHZhbHVlLiBcc2VlIEZUREZfZnBwclJhbVNldE1vZGUKKyAqCisgKiBccGFyYW0gW291dF0gZnBGb3JjZSBGUCBSZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIHZhbHVlLiBcc2VlIEZUREZfZnBwclJhbVNldE1vZGUKKyAqLwordm9pZCBGVERGX2ZwcHJHZXRNb2RlKEZUREZfQm9vbGVhbiAqIG1hdGNoRnAsIEZUREZfQm9vbGVhbiAqIGZwT3ZlcnJpZGUsIEZUREZfQm9vbGVhbiAqIGZwRm9yY2UpOworI2VuZGlmIC8vRlRERl9GUF9CSVRfVEVTVF9NT0RFCisKKyNpZiBGVERGX1VTRV9MUERQID09IDEKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgTFBEUC4KKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGUgaWYgRlRERl9UUlVFLCBMUERQIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4KKyAqLwordm9pZCBGVERGX2xwZHBFbmFibGUoRlRERl9Cb29sZWFuIGVuYWJsZSk7CisKKyNpZiBGVERGX0ZQX0JJVF9URVNUX01PREUKKy8qKgorICogXGJyaWVmIENoZWNrcyB3aGV0aGVyIExQRFAgaXMgZW5hYmxlZC4KKyAqCisgKiBccmV0dXJuIEZUREZfVFJVRSwgaWYgTFBEUCBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQuCisgKi8KK0ZUREZfQm9vbGVhbiBGVERGX2xwZHBJc0VuYWJsZWQodm9pZCk7CisjZW5kaWYKKworI2VuZGlmIC8qICNpZiBGVERGX1VTRV9MUERQID09IDEgKi8KKyNlbmRpZiAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BICovCisKKyNlbmRpZiAvKiBGVERGX0hfICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL2luY2x1ZGUvZnRkZl9jb25maWdfcGh5X2FwaS5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvaW5jbHVkZS9mdGRmX2NvbmZpZ19waHlfYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRlNjhjMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL2luY2x1ZGUvZnRkZl9jb25maWdfcGh5X2FwaS5oCkBAIC0wLDAgKzEsMTYyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgZnRkZl9jb25maWdfcGh5X2FwaS5oCisgKgorICogQGJyaWVmIEZUREYgUEhZIEFQSSBjb25maWd1cmF0aW9uIHRlbXBsYXRlIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgRlRERl9DT05GSUdfUEhZX0FQSV9IXworI2RlZmluZSBGVERGX0NPTkZJR19QSFlfQVBJX0hfCisKKy8qKgorICogXHJlbWFyayAgICAgIHBoeSBjb25maWd1cmF0aW9uIHZhbHVlcyBpbiBtaWNyb3NlY29uZHMKKyAqLworI2RlZmluZSBGVERGX1BIWVRYU1RBUlRVUCAweDRjCisjZGVmaW5lIEZUREZfUEhZVFhMQVRFTkNZIDB4MDEKKyNkZWZpbmUgRlRERl9QSFlUWEZJTklTSCAgMHgwMAorI2RlZmluZSBGVERGX1BIWVRSWFdBSVQgICAweDIwCisjZGVmaW5lIEZUREZfUEhZUlhTVEFSVFVQIDAKKyNkZWZpbmUgRlRERl9QSFlSWExBVEVOQ1kgMAorI2RlZmluZSBGVERGX1BIWUVOQUJMRSAgICAweDIxCisKKyNpZm5kZWYgRlRERl9MSVRFCisjZGVmaW5lIEZUREZfTElURQorI2VuZGlmCisKKy8qKgorICogXHJlbWFyayAgICAgIFNlZSBGVERGX0dFVF9NU0dfQlVGRkVSIGluIGZ0ZGYuaAorICovCisjZGVmaW5lIEZUREZfR0VUX01TR19CVUZGRVIgICAgICAgIGFkX2Z0ZGZfZ2V0TXNnQnVmZmVyCisKKy8qKgorICogXHJlbWFyayAgICAgIFNlZSBGVERGX1JFTF9NU0dfQlVGRkVSIGluIGZ0ZGYuaAorICovCisjZGVmaW5lIEZUREZfUkVMX01TR19CVUZGRVIgICAgICAgIGFkX2Z0ZGZfcmVsTXNnQnVmZmVyCisKKy8qKgorICogXHJlbWFyayAgICAgIFNlZSBGVERGX1JFQ19NU0cgaW4gZnRkZi5oCisgKi8KKyNkZWZpbmUgRlRERl9SQ1ZfTVNHICAgICAgICAgICAgICAgYWRfZnRkZl9yY3ZNc2cKKworLyoqCisgKiBccmVtYXJrICAgICAgU2VlIEZUREZfR0VUX0RBVEFfQlVGRkVSIGluIGZ0ZGYuaAorICovCisjZGVmaW5lIEZUREZfR0VUX0RBVEFfQlVGRkVSICAgICAgIGFkX2Z0ZGZfZ2V0RGF0YUJ1ZmZlcgorCisvKioKKyAqIFxyZW1hcmsgICAgICBTZWUgRlRERl9SRUxfREFUQV9CVUZGRVIgaW4gZnRkZi5oCisgKi8KKyNkZWZpbmUgRlRERl9SRUxfREFUQV9CVUZGRVIgICAgICAgYWRfZnRkZl9yZWxEYXRhQnVmZmVyCisKKy8qKgorICogXHJlbWFyayAgICAgIFNlZSBGVERGX0dFVF9FWFRfQUREUkVTUyBpbiBmdGRmLmgKKyAqLworI2RlZmluZSBGVERGX0dFVF9FWFRfQUREUkVTUyAgICAgICBhZF9mdGRmX2dldEV4dEFkZHJlc3MKKworLyoqCisgKiBccmVtYXJrICAgICAgU2VlIEZUREZfUkNWX0ZSQU1FX1RSQU5TUEFSRU5UIGluIGZ0ZGYuaAorICovCisjZGVmaW5lIEZUREZfUkNWX0ZSQU1FX1RSQU5TUEFSRU5UIEZUREZfcmN2RnJhbWVUcmFuc3BhcmVudAorCisvKioKKyAqIFxyZW1hcmsgICAgICBTZWUgRlRERl9TRU5EX0ZSQU1FX1RSQU5TUEFSRU5UX0NPTkZJUk0gaW4gZnRkZi5oCisgKi8KKyNkZWZpbmUgRlRERl9TRU5EX0ZSQU1FX1RSQU5TUEFSRU5UX0NPTkZJUk0gRlRERl9zZW5kRnJhbWVUcmFuc3BhcmVudENvbmZpcm0KKworLyoqCisgKiBccmVtYXJrICAgICAgU2VlIEZUREZfV0FLRV9VUF9SRUFEWSBpbiBmdGRmLmgKKyAqLworI2RlZmluZSBGVERGX1dBS0VfVVBfUkVBRFkgICAgICAgICBhZF9mdGRmX3dha2VVcFJlYWR5CisKKy8qKgorICogXHJlbWFyayAgICAgIFNlZSBGVERGX1NMRUVQX0NBTExCQUNLIGluIGZ0ZGYuaAorICovCisjZGVmaW5lIEZUREZfU0xFRVBfQ0FMTEJBQ0sgICAgICAgIGFkX2Z0ZGZfc2xlZXBDYgorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCit2b2lkIHNsZWVwX3doZW5fcG9zc2libGUoIHVpbnQ4X3QgZXhwbGljaXRfcmVxdWVzdCwgdWludDMyX3Qgc2xlZXBUaW1lICk7CisKKyNkZWZpbmUgRlRERl9MTUFDUkVBRFk0U0xFRVBfQ0IgICAgc2xlZXBfd2hlbl9wb3NzaWJsZQorCisjaWZuZGVmIE9TX0ZSRUVSVE9TCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICAoICIgY3BzaWQgaSAiICk7IFwKKyAgICAgICAgICAgICAgICBEQkdfQ09ORklHVVJFX0hJR0goQ01OX1RJTUlOR19ERUJVRywgQ01OREJHX0NSSVRJQ0FMX1NFQ1RJT04pOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgREJHX0NPTkZJR1VSRV9MT1coQ01OX1RJTUlOR19ERUJVRywgQ01OREJHX0NSSVRJQ0FMX1NFQ1RJT04pOyBcCisgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgICggIiBjcHNpZSBpICIgKTsgXAorICAgICAgICB9IHdoaWxlICgwKQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsKK3ZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsKKyNlbmRpZgorCisvKioKKyAqIFxyZW1hcmsgICAgICBDcml0aWNhbCBzZWN0aW9uCisgKi8KKworCisjZGVmaW5lIEZUREZfY3JpdGljYWxWYXIoICkKKyNkZWZpbmUgRlRERl9lbnRlckNyaXRpY2FsKCApIHZQb3J0RW50ZXJDcml0aWNhbCgpCisjZGVmaW5lIEZUREZfZXhpdENyaXRpY2FsKCApIHZQb3J0RXhpdENyaXRpY2FsKCkKKworI2lmbmRlZiBGVERGX0RCR19CVVNfRU5BQkxFCisvKioKKyAqIFxicmllZiBXaGV0aGVyIEZUREYgZGVidWcgYnVzIHdpbGwgYmUgYXZhaWxhYmxlIG9yIG5vdC4KKyAqCisgKiBEZWZpbmUgdG8gMCBmb3IgcHJvZHVjdGlvbiBzb2Z0d2FyZS4KKyAqCisgKiBSZWZlciB0byBccmVmIGFkX2Z0ZGZfZGJnQnVzR3Bpb0NvbmZpZyBmb3IgdGhlIEdQSU8gcGlucyB1c2VkIGZvciB0aGUgZGVidWcgYnVzLgorICovCisjZGVmaW5lIEZUREZfREJHX0JVU19FTkFCTEUgICAgICAgICAwCisjZW5kaWYKKworI2lmIEZUREZfREJHX0JVU19FTkFCTEUKKyNkZWZpbmUgRlRERl9EQkdfQlVTX0dQSU9fQ09ORklHICAgYWRfZnRkZl9kYmdCdXNHcGlvQ29uZmlnCisjZW5kaWYgLyogRlRERl9EQkdfQlVTX0VOQUJMRSAqLworCisjaWZuZGVmIEZUREZfVVNFX0ZQX1BST0NFU1NJTkdfUkFNCisvKioKKyAqIFxicmllZiBXaGV0aGVyIHRvIHVzZSBIVyBhY2NlbGVyYXRpb24gZm9yIGluZGlyZWN0IHNlbmRpbmcuCisgKgorICogRmVhdHVyZSBpcyBzdXBwb3J0ZWQgYXMgb2YgSUMgcmV2aXNpb24gMTQ2ODMtMDAuCisgKi8KKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisjZGVmaW5lIEZUREZfVVNFX0ZQX1BST0NFU1NJTkdfUkFNICAgICAgICAgICAgICAxCisjZWxzZQorI2RlZmluZSBGVERGX1VTRV9GUF9QUk9DRVNTSU5HX1JBTSAgICAgICAgICAgICAgMAorI2VuZGlmCisjZW5kaWYgLyogRlRERl9VU0VfRlBfUFJPQ0VTU0lOR19SQU0gKi8KKworI2VuZGlmIC8qIEZUREZfQ09ORklHX1BIWV9BUElfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2FkX2Z0ZGYuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9hZF9mdGRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4MjlkOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9hZF9mdGRmLmMKQEAgLTAsMCArMSwzMTYgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBmdGRmLmMKKyAqCisgKiBAYnJpZWYgRlRERiBGcmVlUlRPUyBBZGFwdGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjaWZkZWYgQ09ORklHX1VTRV9GVERGCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaWZuZGVmIEZUREZfUEhZX0FQSQorI2luY2x1ZGUgIm9zYWwuaCIKKyNpbmNsdWRlICJxdWV1ZS5oIgorCisjaW5jbHVkZSAic3lzX3Bvd2VyX21nci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJhZF9yZi5oIgorCisjaW5jbHVkZSAic3lzX3Rjcy5oIgorCisjaW5jbHVkZSAic2RrX2RlZnMuaCIKKyNpbmNsdWRlICJhZF9mdGRmLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJyZWdtYXAuaCIKKyNpZiBGVERGX0RCR19CVVNfRU5BQkxFCisjaW5jbHVkZSAiaHdfZ3Bpby5oIgorI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKworI2lmIEZUREZfREJHX0JMT0NLX1NMRUVQX0VOQUJMRQorI2luY2x1ZGUgImh3X2dwaW8uaCIKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnVVNFX0ZUREZfRERQSFkgPT0gMQorI2luY2x1ZGUgInJhZGlvLmgiCisjZW5kaWYKKworI2RlZmluZSBXVVBfTEFURU5DWSAgKEFEX0ZUREZfTFBfQ0xPQ0tfQ1lDTEUgKiBBRF9GVERGX1dVUF9MQVRFTkNZKQorCisjaWZkZWYgRlRERl9QSFlfQVBJCisjaWZuZGVmIFBSSVZJTEVHRURfREFUQQorI2RlZmluZSBQUklWSUxFR0VEX0RBVEEgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigicHJpdmlsZWdlZF9kYXRhX3ppIikpKQorI2VuZGlmCisjaWZuZGVmIElOSVRJQUxJWkVEX1BSSVZJTEVHRURfREFUQQorI2RlZmluZSBJTklUSUFMSVpFRF9QUklWSUxFR0VEX0RBVEEgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigicHJpdmlsZWdlZF9kYXRhX2luaXQiKSkpCisjZW5kaWYKKyNlbmRpZgorCitQUklWSUxFR0VEX0RBVEEgRlRERl9Cb29sZWFuIGV4cGxpY2l0X3NsZWVwOyAvKiA9IEZUREZfRkFMU0U7ICovCitQUklWSUxFR0VEX0RBVEEgZVNsZWVwU3RhdHVzIHNsZWVwX3N0YXR1czsKKworUFJJVklMRUdFRF9EQVRBIEZUREZfRXh0QWRkcmVzcyB1RXh0QWRkcmVzczsKKworc3RhdGljIHZvaWQgYWRfZnRkZl9zbGVlcCh2b2lkKQoreworCisgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworICAgIFJFR19TRVRfQklUKENSR19UT1AsIFBNVV9DVFJMX1JFRywgRlRERl9TTEVFUCk7ICAgICAgICAgICAgICAgICAvLyBnbyBzbGVlcAorICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisKKyAgICB3aGlsZSAoUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBGVERGX0lTX0RPV04pID09IDB4MCkgICAgLy8gZG9uJ3QgZ28tZ28gYmVmb3JlIEkgc2xlZXAKKyAgICB7CisgICAgfQorCisjaWYgRlRERl9EQkdfQkxPQ0tfU0xFRVBfRU5BQkxFCisgICAgaHdfZ3Bpb19zZXRfaW5hY3RpdmUoRlRERl9EQkdfQkxPQ0tfU0xFRVBfR1BJT19QT1JULCBGVERGX0RCR19CTE9DS19TTEVFUF9HUElPX1BJTik7CisjZW5kaWYKK30KKwordm9pZCBhZF9mdGRmX3dha2VfdXBfaW50ZXJuYWwoYm9vbCBzeW5jKQoreworICAgIGlmIChzbGVlcF9zdGF0dXMgIT0gQkxPQ0tfU0xFRVBJTkcpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworICAgIC8qIFdha2UgdXAgcG93ZXIgZG9tYWlucyAqLworICAgIFJFR19DTFJfQklUKENSR19UT1AsIFBNVV9DVFJMX1JFRywgRlRERl9TTEVFUCk7ICAgICAgICAgICAgICAgICAvLyBnbyB3YWtlIHVwCisgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKworICAgIHdoaWxlIChSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIEZUREZfSVNfVVApID09IDB4MCkgICAgICAvLyBkb24ndCBnby1nbyBiZWZvcmUgSSBzbGVlcAorICAgIHsKKyAgICB9CisKKyNpZiBGVERGX0RCR19CTE9DS19TTEVFUF9FTkFCTEUKKyAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4oRlRERl9EQkdfQkxPQ0tfU0xFRVBfR1BJT19QT1JULCBGVERGX0RCR19CTE9DS19TTEVFUF9HUElPX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX0dQSU8sIHRydWUpOworI2VuZGlmCisKKyAgICAvKiBQb3dlciBvbiBhbmQgY29uZmlndXJlIFJGICovCisgICAgYWRfcmZfcmVxdWVzdF9vbihmYWxzZSk7CisKKyAgICAvKiBBcHBseSB0cmltIHZhbHVlcyAqLworLy8gICAgICAgIHN5c190Y3NfYXBwbHkodGNzX2Z0ZGYpOworCisgICAgYWRfcmZfcmVxdWVzdF9yZWNvbW1lbmRlZF9zZXR0aW5ncygpOworCisgICAgaWYgKHN5bmMpCisgICAgeworICAgICAgICBGVERGX2luaXRMbWFjKCk7CisgICAgICAgIHNsZWVwX3N0YXR1cyA9IEJMT0NLX0FDVElWRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogV2FrZSB1cCBGVERGIGJsb2NrICovCisgICAgICAgIHNsZWVwX3N0YXR1cyA9IEJMT0NLX1dBS0lOR19VUDsKKyAgICAgICAgRlRERl93YWtlVXAoKTsKKyNpZiBkZWZpbmVkKEZUREZfTk9fQ1NMKSAmJiBkZWZpbmVkKEZUREZfTk9fVFNDSCkKKyAgICAgICAgYWRfZnRkZl93YWtlVXBSZWFkeSgpOworI2VuZGlmCisgICAgfQorCit9CisKK3ZvaWQgYWRfZnRkZl93YWtlX3VwX2FzeW5jKHZvaWQpCit7CisgICAgYWRfZnRkZl93YWtlX3VwX2ludGVybmFsKGZhbHNlKTsKK30KKwordm9pZCBhZF9mdGRmX3dha2VfdXBfc3luYyh2b2lkKQoreworICAgIGFkX2Z0ZGZfd2FrZV91cF9pbnRlcm5hbCh0cnVlKTsKK30KKwordm9pZCBzbGVlcF93aGVuX3Bvc3NpYmxlKHVpbnQ4X3QgZXhwbGljaXRfcmVxdWVzdCwgdWludDMyX3Qgc2xlZXBUaW1lKQoreworICAgIEZUREZfQm9vbGVhbiBibG9ja1NsZWVwID0gRlRERl9GQUxTRTsKKworICAgIGlmICgoIUFEX0ZUREZfU0xFRVBfV0hFTl9JRExFICYmICFleHBsaWNpdF9yZXF1ZXN0KSB8fCBzbGVlcF9zdGF0dXMgIT0gQkxPQ0tfQUNUSVZFKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZUREZfVVNlYyB1czsKKworCisgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworI2lmZGVmIEZUREZfUEhZX0FQSQorCisgICAgaWYgKGV4cGxpY2l0X3JlcXVlc3QgJiYgRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVApID09IDApCisgICAgeworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCAqbG1hY0N0cmxNYXNrID0gRlRERl9HRVRfUkVHX0FERFIoT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSyk7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICpsbWFjUmVhZHk0c2xlZXBFdmVudCA9IEZUREZfR0VUX0ZJRUxEX0FERFIoT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfRCk7CisKKyAgICAgICAgLyogY2xlYXIgYSBwcmV2aW91cyBpbnRlcnJ1cHQgKi8KKyAgICAgICAgKmxtYWNSZWFkeTRzbGVlcEV2ZW50ID0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9EOworCisgICAgICAgIC8qIEVuYWJsZSAodW5tYXNrKSBpbnRlcnJ1cHQgKi8KKyAgICAgICAgKmxtYWNDdHJsTWFzayB8PSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX007CisgICAgICAgIHVzID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdXMgPSBGVERGX2NhblNsZWVwKCk7CisgICAgfQorCisjZWxzZQorICAgIHVzID0gRlRERl9jYW5TbGVlcCgpOworI2VuZGlmCisKKyAgICAvKiBUcnkgdG8gc2xlZXAgYXMgbXVjaCBhcyBuZWVkZWQgKGlmIHNsZWVwVGltZSBpcyAwLCB0aGVuIHNsZWVwIGFzIG11Y2ggYXMgcG9zc2libGUpLgorICAgICAqIE90aGVyd2lzZSwgc2xlZXAgYXMgbXVjaCBhcyBwb3NzaWJsZS4gKi8KKyAgICBpZiAoZXhwbGljaXRfcmVxdWVzdCA9PSBGVERGX1RSVUUpCisgICAgeworICAgICAgICBpZiAoc2xlZXBUaW1lICYmIHVzID4gc2xlZXBUaW1lKQorICAgICAgICB7CisgICAgICAgICAgICB1cyA9IHNsZWVwVGltZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh1cyA+IChXVVBfTEFURU5DWSAvIDEwMDAwMDApICsgQURfRlRERl9TTEVFUF9DT01QRU5TQVRJT04pCisgICAgeworICAgICAgICAvLyBTdWJ0cmFjdCBzbGVlcCBjb21wZW5zYXRpb24gZnJvbSB0aGUgc2xlZXAgdGltZSwgY29tcGVuc2F0aW5nIGZvciBkZWxheXMKKyAgICAgICAgdXMgLT0gQURfRlRERl9TTEVFUF9DT01QRU5TQVRJT047CisKKyAgICAgICAgYmxvY2tTbGVlcCA9IEZUREZfcHJlcGFyZUZvclNsZWVwKHVzKTsKKworICAgICAgICBpZiAoYmxvY2tTbGVlcCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRlRERiByZWFkeSB0byBzbGVlcCwgZGlzYWJsZSBjbG9ja3MKKyAgICAgICAgICAgIHNsZWVwX3N0YXR1cyA9IEJMT0NLX1NMRUVQSU5HOworICAgICAgICAgICAgZXhwbGljaXRfc2xlZXAgPSBleHBsaWNpdF9yZXF1ZXN0OworI2lmIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGCisgICAgICAgICAgICBGVERGX3NkYkZzbVNsZWVwKCk7CisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKyNpZiBkZ19jb25maWdVU0VfRlRERl9ERFBIWSA9PSAxCisgICAgICAgICAgICBGVERGX2RkcGh5U2F2ZSgpOworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9GVERGX0REUEhZICovCisgICAgICAgICAgICBhZF9mdGRmX3NsZWVwKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisjaWYgRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYKKyAgICAgICAgICAgIEZUREZfc2RiRnNtQWJvcnRTbGVlcCgpOworI2VuZGlmIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICBGVERGX2V4aXRDcml0aWNhbCgpOworCisgICAgaWYgKGJsb2NrU2xlZXApCisgICAgeworICAgICAgICBhZF9yZl9yZXF1ZXN0X29mZihmYWxzZSk7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBvZiBGVERGIGFkYXB0ZXIKKyAqLwordm9pZCBhZF9mdGRmX2luaXQodm9pZCkKK3sKKyAgICAvKiBXYWtlIHVwIHBvd2VyIGRvbWFpbnMgKi8KKyAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIEZUREZfU0xFRVApOyAgICAgICAgICAgICAgICAgLy8gZ28gd2FrZSB1cAorCisgICAgd2hpbGUgKFJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgRlRERl9JU19VUCkgPT0gMHgwKSAgICAgIC8vIGRvbid0IGdvLWdvIGJlZm9yZSBJIHNsZWVwCisgICAgeworICAgIH0KKworI2lmIEZUREZfREJHX0JMT0NLX1NMRUVQX0VOQUJMRQorICAgIGh3X2dwaW9fY29uZmlndXJlX3BpbihGVERGX0RCR19CTE9DS19TTEVFUF9HUElPX1BPUlQsIEZUREZfREJHX0JMT0NLX1NMRUVQX0dQSU9fUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgdHJ1ZSk7CisjZW5kaWYKKyAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfUkFESU9fUkVHLCBGVERGX01BQ19FTkFCTEUpOyAgIC8vIG9uCisgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQ0xLX1JBRElPX1JFRywgRlRERl9NQUNfRElWLCAwKTsgICAgICAvLyBkaXZpZGUgYnkgMQorCisgICAgLyogUG93ZXIgb24gYW5kIGNvbmZpZ3VyZSBSRiAqLworICAgIGFkX3JmX3JlcXVlc3Rfb24oZmFsc2UpOworCisgICAgLyogQXBwbHkgdHJpbSB2YWx1ZXMgKi8KKyAgICBzeXNfdGNzX2FwcGx5KHRjc19mdGRmKTsKKworICAgIGFkX3JmX3JlcXVlc3RfcmVjb21tZW5kZWRfc2V0dGluZ3MoKTsKKworICAgIEZUREZfc2V0U2xlZXBBdHRyaWJ1dGVzKEFEX0ZUREZfTFBfQ0xPQ0tfQ1lDTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURfRlRERl9XVVBfTEFURU5DWSk7CisKKyNpZmRlZiBGVERGX1BIWV9BUEkKKyAgICBhZF9mdGRmX2luaXRfcGh5X2FwaSgpOworI2Vsc2UKKyAgICBhZF9mdGRmX2luaXRfbWFjX2FwaSgpOworI2VuZGlmCit9CisKK3ZvaWQgYWRfZnRkZl9zbGVlcENiKEZUREZfVVNlYyBzbGVlcFRpbWUpCit7CisgICAgc2xlZXBfd2hlbl9wb3NzaWJsZShGVERGX1RSVUUsIHNsZWVwVGltZSk7CisKKworfQorCisjaWYgRlRERl9EQkdfQlVTX0VOQUJMRQordm9pZCBhZF9mdGRmX2RiZ0J1c0dwaW9Db25maWcodm9pZCkKK3sKKyAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oSFdfR1BJT19QT1JUXzEsIEhXX0dQSU9fUElOXzQsIEhXX0dQSU9fTU9ERV9PVVRQVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQ19GVERGX0RJQUcpOworICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fNSwgSFdfR1BJT19NT0RFX09VVFBVVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19GVU5DX0ZUREZfRElBRyk7CisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl82LCBIV19HUElPX01PREVfT1VUUFVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkNfRlRERl9ESUFHKTsKKyAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oSFdfR1BJT19QT1JUXzEsIEhXX0dQSU9fUElOXzcsIEhXX0dQSU9fTU9ERV9PVVRQVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQ19GVERGX0RJQUcpOworI2lmIEZUREZfREJHX0JVU19VU0VfU1dESU9fUElOCisgICAgLyoKKyAgICAgKiBOb3RlIHRoYXQgdGhpcyBwaW4gaGFzIGEgY29uZmxpY3Qgd2l0aCBTV0QuIERpc2FibGUgdGhlIGRlYnVnZ2VyIGluIG9yZGVyIHRvIHVzZSB0aGlzCisgICAgICogcGluLgorICAgICAqLworICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihIV19HUElPX1BPUlRfMCwgSFdfR1BJT19QSU5fNiwgSFdfR1BJT19NT0RFX09VVFBVVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19GVU5DX0ZUREZfRElBRyk7CisjZW5kaWYKKyAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oSFdfR1BJT19QT1JUXzAsIEhXX0dQSU9fUElOXzcsIEhXX0dQSU9fTU9ERV9PVVRQVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQ19GVERGX0RJQUcpOworI2lmIEZUREZfREJHX0JVU19VU0VfR1BJT19QMV8zX1AyXzIKKyAgICAvKgorICAgICAqIE5vdGUgdGhhdCB0aGVzZSBwaW5zIGhhdmUgYSBjb25mbGljdCB3aXRoIHRoZSBwaW5zIHVzZWQgZm9yIFVBUlQgYnkgZGVmYXVsdC4gQ29uZmlndXJlCisgICAgICogVUFSVCBvbiBkaWZmZXJlbnQgcGlucyBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgdGhlIHBpbnMgYmVsb3cgZm9yIGRpYWdub3N0aWNzLgorICAgICAqLworICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fMywgSFdfR1BJT19NT0RFX09VVFBVVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19GVU5DX0ZUREZfRElBRyk7CisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVF8yLCBIV19HUElPX1BJTl8zLCBIV19HUElPX01PREVfT1VUUFVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkNfRlRERl9ESUFHKTsKKyNlbmRpZgorfQorI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2FkX2Z0ZGYuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9hZF9mdGRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkYTJkMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9hZF9mdGRmLmgKQEAgLTAsMCArMSw5MyBAQAorLyoqCisgXGFkZHRvZ3JvdXAgSU5URVJGQUNFUworIFx7CisgXGFkZHRvZ3JvdXAgRlRERgorIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGZpbGUgYWRfZnRkZi5oCisgKgorICogQGJyaWVmIEZUREYgQWRhcHRlciBpbnRlcm5hbCBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBBRF9GVERGX0gKKyNkZWZpbmUgQURfRlRERl9ICisKKyNpZm5kZWYgRlRERl9QSFlfQVBJCisjaW5jbHVkZSAiRnJlZVJUT1MuaCIKKyNpbmNsdWRlICJxdWV1ZS5oIgorI2luY2x1ZGUgInRhc2suaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiZnRkZi5oIgorI2luY2x1ZGUgImFkX2Z0ZGZfY29uZmlnLmgiCisKK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEJMT0NLX0FDVElWRSA9IDAsIEJMT0NLX1NMRUVQSU5HLCBCTE9DS19XQUtJTkdfVVAKK30gZVNsZWVwU3RhdHVzOworCitleHRlcm4gZVNsZWVwU3RhdHVzIHNsZWVwX3N0YXR1czsKK2V4dGVybiBGVERGX0V4dEFkZHJlc3MgdUV4dEFkZHJlc3M7CitleHRlcm4gRlRERl9Cb29sZWFuIGV4cGxpY2l0X3NsZWVwOworCit2b2lkIGFkX2Z0ZGZfaW5pdF9tYWNfYXBpKHZvaWQpOwordm9pZCBhZF9mdGRmX2luaXRfcGh5X2FwaSh2b2lkKTsKKwordm9pZCBhZF9mdGRmX3dha2VfdXBfYXN5bmModm9pZCk7Cit2b2lkIGFkX2Z0ZGZfd2FrZV91cF9zeW5jKHZvaWQpOworCit2b2lkIHNsZWVwX3doZW5fcG9zc2libGUoIHVpbnQ4X3QgZXhwbGljaXRfcmVxdWVzdCwgdWludDMyX3Qgc2xlZXBUaW1lICk7CisKKyNpZiBGVERGX0RCR19CVVNfRU5BQkxFCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIEdQSU8gcGlucyBmb3IgdGhlIEZUREYgZGVidWcgYnVzCisgKgorICogRGVidWcgYnVzIHVzZXMgdGhlIGZvbGxvd2luZyAoZml4ZWQpIEdQSU8gcGluczoKKyAqCisgKiBiaXQgMDogSFdfR1BJT19QT1JUXzEsIEhXX0dQSU9fUElOXzQKKyAqIGJpdCAxOiBIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fNQorICogYml0IDI6IEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl82CisgKiBiaXQgMzogSFdfR1BJT19QT1JUXzEsIEhXX0dQSU9fUElOXzcKKyAqIGJpdCA0OiBIV19HUElPX1BPUlRfMCwgSFdfR1BJT19QSU5fNgorICogYml0IDU6IEhXX0dQSU9fUE9SVF8wLCBIV19HUElPX1BJTl83CisgKiBiaXQgNjogSFdfR1BJT19QT1JUXzEsIEhXX0dQSU9fUElOXzMKKyAqIGJpdCA3OiBIV19HUElPX1BPUlRfMiwgSFdfR1BJT19QSU5fMworICovCit2b2lkIGFkX2Z0ZGZfZGJnQnVzR3Bpb0NvbmZpZyh2b2lkKTsKKyNlbmRpZiAvKiBGVERGX0RCR19CVVNfRU5BQkxFICovCisKKyNlbmRpZiAvKiBBRF9GVERGX0ggKi8KKy8qKgorIFx9CisgXH0KKyBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvYWRfZnRkZl9waHlfYXBpLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvYWRfZnRkZl9waHlfYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYxOWNiNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9hZF9mdGRmX3BoeV9hcGkuYwpAQCAtMCwwICsxLDE3MSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGZ0ZGYuYworICoKKyAqIEBicmllZiBGVERGIEZyZWVSVE9TIEFkYXB0ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKKworI2lmZGVmIEZUREZfUEhZX0FQSQorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjaW5jbHVkZSAic2RrX2RlZnMuaCIKKyNpbmNsdWRlICJhZF9mdGRmLmgiCisjaW5jbHVkZSAiYWRfZnRkZl9waHlfYXBpLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpZiBGVERGX0RCR19CVVNfRU5BQkxFCisjaW5jbHVkZSAiaHdfZ3Bpby5oIgorI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKworI2lmbmRlZiBPU19GUkVFUlRPUworc3RhdGljIHVuc2lnbmVkIGxvbmcgdXhDcml0aWNhbE5lc3RpbmcgPSAweGFhYWFhYWFhOworCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCh2b2lkKQoreworICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsKKyAgICB1eENyaXRpY2FsTmVzdGluZysrOworICAgIF9fYXNtIHZvbGF0aWxlKCJkc2IiKTsKKyAgICBfX2FzbSB2b2xhdGlsZSgiaXNiIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKHZvaWQpCit7CisKKyAgICB1eENyaXRpY2FsTmVzdGluZy0tOworCisgICAgaWYgKHV4Q3JpdGljYWxOZXN0aW5nID09IDApCisgICAgeworICAgICAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsKKyAgICB9Cit9CisjZW5kaWYgLyogIU9TX0ZSRUVSVE9TICovCisKKy8qKgorICogQGJyaWVmIGZ0ZGZfZ2VuX2lycSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCisgKi8KK3ZvaWQgRlRERl9HRU5fSGFuZGxlcih2b2lkKQoreworICAgIEZUREZfY29uZmlybUxtYWNJbnRlcnJ1cHQoKTsKKyAgICBGVERGX2V2ZW50SGFuZGxlcigpOworfQorLyoqCisgKiBAYnJpZWYgZnRkZl93YWt1cF9pcnEgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZQorICovCit2b2lkIEZUREZfV0FLRVVQX0hhbmRsZXIodm9pZCkKK3sKKyAgICBhZF9mdGRmX3dha2VfdXBfYXN5bmMoKTsKK30KKwordm9pZCBhZF9mdGRmX3NldEV4dEFkZHJlc3MoRlRERl9FeHRBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgdUV4dEFkZHJlc3MgPSBhZGRyZXNzOworfQorCitGVERGX0V4dEFkZHJlc3MgYWRfZnRkZl9nZXRFeHRBZGRyZXNzKHZvaWQpCit7CisgICAgcmV0dXJuIHVFeHRBZGRyZXNzOworfQorCit2b2lkIGFkX2Z0ZGZfd2FrZVVwUmVhZHkodm9pZCkKK3sKK30KKworRlRERl9TdGF0dXMgYWRfZnRkZl9zZW5kX2ZyYW1lX3NpbXBsZShGVERGX0RhdGFMZW5ndGggICAgZnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQgICAgICAgICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfUFRJICAgICAgICAgICBwdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQm9vbGVhbiAgICAgICBjc21hU3VwcHJlc3MpCit7CisgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworCisgICAgaWYgKEZUREZfdHhJblByb2dyZXNzID09IEZUREZfVFJVRSkKKyAgICB7CisgICAgICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisgICAgICAgIHJldHVybiBGVERGX1RSQU5TUEFSRU5UX09WRVJGTE9XOworICAgIH0KKworICAgIEZUREZfdHhJblByb2dyZXNzID0gRlRERl9UUlVFOworICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisKKyAgICBpZiAoc2xlZXBfc3RhdHVzID09IEJMT0NLX1NMRUVQSU5HKQorICAgIHsKKyAgICAgICAgLyogV2FrZS11cCB0aGUgYmxvY2sgKi8KKyAgICAgICAgYWRfZnRkZl93YWtlX3VwX2FzeW5jKCk7CisjaWYgRlRERl9EQkdfQlVTX0VOQUJMRQorICAgICAgICBGVERGX2NoZWNrRGJnTW9kZSgpOworI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKyAgICAgICAgc2xlZXBfc3RhdHVzID0gQkxPQ0tfQUNUSVZFOworICAgIH0KKworICAgIHJldHVybiBGVERGX3NlbmRGcmFtZVNpbXBsZShmcmFtZUxlbmd0aCwgZnJhbWUsIGNoYW5uZWwsIHB0aSwgY3NtYVN1cHByZXNzKTsKK30KKworCit2b2lkIGFkX2Z0ZGZfc2xlZXBfd2hlbl9wb3NzaWJsZShGVERGX0Jvb2xlYW4gYWxsb3dfZGVmZXJyZWRfc2xlZXApCit7CisgICAgc2xlZXBfd2hlbl9wb3NzaWJsZShhbGxvd19kZWZlcnJlZF9zbGVlcCwgMCk7Cit9CisKK3ZvaWQgYWRfZnRkZl93YWtlX3VwKHZvaWQpCit7CisgICAgaWYgKHNsZWVwX3N0YXR1cyA9PSBCTE9DS19TTEVFUElORykKKyAgICB7CisgICAgICAgIC8qIFdha2UtdXAgdGhlIGJsb2NrICovCisgICAgICAgIGFkX2Z0ZGZfd2FrZV91cF9hc3luYygpOworI2lmIEZUREZfREJHX0JVU19FTkFCTEUKKyAgICAgICAgRlRERl9jaGVja0RiZ01vZGUoKTsKKyNlbmRpZiAvKiBGVERGX0RCR19CVVNfRU5BQkxFICovCisgICAgICAgIHNsZWVwX3N0YXR1cyA9IEJMT0NLX0FDVElWRTsKKyAgICB9CisKK30KKwordm9pZCBhZF9mdGRmX2luaXRfcGh5X2FwaSh2b2lkKQoreworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKEZUREZfV0FLRVVQX0lSUW4pOworICAgIE5WSUNfRW5hYmxlSVJRKEZUREZfV0FLRVVQX0lSUW4pOworCisgICAgLy9OVklDX0NsZWFyUGVuZGluZ0lSUShGVERGX0dFTl9JUlFuKTsgICAgLy8gRGlzYWJsZSBmdGRmIGludGVycnVwdHMKKyAgICAvL05WSUNfRW5hYmxlSVJRKEZUREZfR0VOX0lSUW4pOyAgICAgICAgICAvLyBmdGRmIHdpbGwgYmUgaGFuZGxlZCBieSBwb2lsaW5nCisgICAgc2xlZXBfc3RhdHVzID0gQkxPQ0tfQUNUSVZFOworI2lmbmRlZiBPU19GUkVFUlRPUworICAgIHV4Q3JpdGljYWxOZXN0aW5nID0gMDsKKyNlbmRpZgorCisgICAgRlRERl9yZXNldCgxKTsKK30KKyNlbmRpZiAvKiBGVERGX1BIWV9BUEkgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2NvbW1vbi5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYTM3OWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvY29tbW9uLmMKQEAgLTAsMCArMSw1NTk5IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgY29tbW9uLmMKKyAqCisgKiBAYnJpZWYgQ29tbW9uIEZUREYgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGZ0ZGYuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgInJlZ21hcC5oIgorI2luY2x1ZGUgInNka19kZWZzLmgiCisKKyNpZiBkZ19jb25maWdDT0VYX0VOQUJMRV9DT05GSUcKKyNpbmNsdWRlICJod19jb2V4LmgiCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdm9pZCAgICphZGRyOworICAgIHVpbnQ4X3Qgc2l6ZTsKKyAgICB2b2lkICgqIGdldEZ1bmMpKHZvaWQpOworICAgIHZvaWQgKCogc2V0RnVuYykodm9pZCk7Cit9IFBJQkF0dHJpYnV0ZURlZjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQSUJBdHRyaWJ1dGVEZWYgYXR0cmlidXRlRGVmc1sgRlRERl9OUl9PRl9QSUJfQVRUUklCVVRFUyArIDEgXTsKK30gUElCQXR0cmlidXRlVGFibGU7CisKK3N0cnVjdCBGVERGX1BpYiAgICAgICAgICAgICAgICAgIEZUREZfcGliIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworCisjaWYgRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8KKyNpZiBGVERGX0ZQUFJfREVGRVJfSU5WQUxJREFUSU9OCitzdGF0aWMgc3RydWN0Cit7CisgICAgRlRERl9BZGRyZXNzTW9kZSAgICAgICAgYWRkck1vZGU7CisgICAgRlRERl9QQU5JZCAgICAgICAgICAgICAgUEFOSWQ7CisgICAgRlRERl9BZGRyZXNzICAgICAgICAgICAgYWRkcjsKK30gRlRERl9mcHByUGVuZGluZyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKyNlbmRpZiAvKiBGVERGX0ZQUFJfREVGRVJfSU5WQUxJREFUSU9OICovCisjZW5kaWYgLyogRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8gKi8KKworI2lmbmRlZiBGVERGX0xJVEUKK2NvbnN0IEZUREZfQ2hhbm5lbE51bWJlciAgICAgICAgIHBhZ2UwQ2hhbm5lbHNbIEZUREZfTlJfT0ZfQ0hBTk5FTFMgXSA9Cit7IDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2IH07Citjb25zdCBGVERGX0NoYW5uZWxEZXNjcmlwdG9yICAgICBjaGFubmVsRGVzY3JpcHRvcnNbIDEgXSA9IHsgeyAwLCAxNiwgKEZUREZfQ2hhbm5lbE51bWJlciAqKSBwYWdlMENoYW5uZWxzIH0gfTsKK2NvbnN0IEZUREZfQ2hhbm5lbERlc2NyaXB0b3JMaXN0IGNoYW5uZWxzU3VwcG9ydGVkID0geyAxLCAoRlRERl9DaGFubmVsRGVzY3JpcHRvciAqKSBjaGFubmVsRGVzY3JpcHRvcnMgfTsKKyNlbmRpZgorCitjb25zdCBQSUJBdHRyaWJ1dGVUYWJsZSAgICAgICAgICBwaWJBdHRyaWJ1dGVUYWJsZSA9Cit7CisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VYVEVOREVEX0FERFJFU1MgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5leHRBZGRyZXNzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FWFRFTkRFRF9BRERSRVNTIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuZXh0QWRkcmVzcyksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VYVEVOREVEX0FERFJFU1MgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICA9IEZUREZfZ2V0RXh0QWRkcmVzcywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRVhURU5ERURfQUREUkVTUyBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRFeHRBZGRyZXNzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BQ0tfV0FJVF9EVVJBVElPTiBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuYWNrV2FpdER1cmF0aW9uLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BQ0tfV0FJVF9EVVJBVElPTiBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BQ0tfV0FJVF9EVVJBVElPTiBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBGVERGX2dldEFja1dhaXREdXJhdGlvbiwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQUNLX1dBSVRfRFVSQVRJT04gXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FTU09DSUFUSU9OX1BBTl9DT09SRCBdLmFkZHIgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5hc3NvY2lhdGVkUEFOQ29vcmQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FTU09DSUFUSU9OX1BBTl9DT09SRCBdLnNpemUgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5hc3NvY2lhdGVkUEFOQ29vcmQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BU1NPQ0lBVElPTl9QQU5fQ09PUkQgXS5nZXRGdW5jICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BU1NPQ0lBVElPTl9QQU5fQ09PUkQgXS5zZXRGdW5jICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BU1NPQ0lBVElPTl9QRVJNSVQgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuYXNzb2NpYXRpb25QZXJtaXQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FTU09DSUFUSU9OX1BFUk1JVCBdLnNpemUgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5hc3NvY2lhdGlvblBlcm1pdCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FTU09DSUFUSU9OX1BFUk1JVCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FTU09DSUFUSU9OX1BFUk1JVCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FVVE9fUkVRVUVTVCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5hdXRvUmVxdWVzdCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQVVUT19SRVFVRVNUIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmF1dG9SZXF1ZXN0KSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQVVUT19SRVFVRVNUIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQVVUT19SRVFVRVNUIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkFUVF9MSUZFX0VYVCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmJhdHRMaWZlRXh0LAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CQVRUX0xJRkVfRVhUIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuYmF0dExpZmVFeHQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CQVRUX0xJRkVfRVhUIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CQVRUX0xJRkVfRVhUIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CQVRUX0xJRkVfRVhUX1BFUklPRFMgXS5hZGRyICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuYmF0dExpZmVFeHRQZXJpb2RzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CQVRUX0xJRkVfRVhUX1BFUklPRFMgXS5zaXplICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuYmF0dExpZmVFeHRQZXJpb2RzKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkFUVF9MSUZFX0VYVF9QRVJJT0RTIF0uZ2V0RnVuYyAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkFUVF9MSUZFX0VYVF9QRVJJT0RTIF0uc2V0RnVuYyAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX1BBWUxPQUQgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmJlYWNvblBheWxvYWQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JFQUNPTl9QQVlMT0FEIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5iZWFjb25QYXlsb2FkKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX1BBWUxPQUQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX1BBWUxPQUQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX1BBWUxPQURfTEVOR1RIIF0uYWRkciAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmJlYWNvblBheWxvYWRMZW5ndGgsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JFQUNPTl9QQVlMT0FEX0xFTkdUSCBdLnNpemUgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5iZWFjb25QYXlsb2FkTGVuZ3RoKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX1BBWUxPQURfTEVOR1RIIF0uZ2V0RnVuYyAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX1BBWUxPQURfTEVOR1RIIF0uc2V0RnVuYyAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX09SREVSIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmJlYWNvbk9yZGVyLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fT1JERVIgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fT1JERVIgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fT1JERVIgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fVFhfVElNRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuYmVhY29uVHhUaW1lLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fVFhfVElNRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuYmVhY29uVHhUaW1lKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX1RYX1RJTUUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX1RYX1RJTUUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQlNOIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkJTTiwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQlNOIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLkJTTiksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JTTiBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JTTiBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NPT1JEX0VYVEVOREVEX0FERFJFU1MgXS5hZGRyICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5jb29yZEV4dEFkZHJlc3MsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NPT1JEX0VYVEVOREVEX0FERFJFU1MgXS5zaXplICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5jb29yZEV4dEFkZHJlc3MpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DT09SRF9FWFRFTkRFRF9BRERSRVNTIF0uZ2V0RnVuYyAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DT09SRF9FWFRFTkRFRF9BRERSRVNTIF0uc2V0RnVuYyAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DT09SRF9TSE9SVF9BRERSRVNTIF0uYWRkciAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuY29vcmRTaG9ydEFkZHJlc3MsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NPT1JEX1NIT1JUX0FERFJFU1MgXS5zaXplICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5jb29yZFNob3J0QWRkcmVzcyksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NPT1JEX1NIT1JUX0FERFJFU1MgXS5nZXRGdW5jICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NPT1JEX1NIT1JUX0FERFJFU1MgXS5zZXRGdW5jICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RTTiBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5EU04sCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RTTiBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5EU04pLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9EU04gXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9EU04gXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9HVFNfUEVSTUlUIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuR1RTUGVybWl0LAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9HVFNfUEVSTUlUIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9HVFNfUEVSTUlUIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9HVFNfUEVSTUlUIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0JFIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLm1heEJFLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfQkUgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIubWF4QkUpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfQkUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfQkUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldE1heEJFLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfQ1NNQV9CQUNLT0ZGUyBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubWF4Q1NNQUJhY2tvZmZzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfQ1NNQV9CQUNLT0ZGUyBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIubWF4Q1NNQUJhY2tvZmZzKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0NTTUFfQkFDS09GRlMgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0NTTUFfQkFDS09GRlMgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRNYXhDU01BQmFja29mZnMsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9GUkFNRV9UT1RBTF9XQUlUX1RJTUUgXS5hZGRyICAgICAgICAgICAgICA9ICZGVERGX3BpYi5tYXhGcmFtZVRvdGFsV2FpdFRpbWUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9GUkFNRV9UT1RBTF9XQUlUX1RJTUUgXS5zaXplICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5tYXhGcmFtZVRvdGFsV2FpdFRpbWUpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfRlJBTUVfVE9UQUxfV0FJVF9USU1FIF0uZ2V0RnVuYyAgICAgICAgICAgPSBGVERGX2dldE1heEZyYW1lVG90YWxXYWl0VGltZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0ZSQU1FX1RPVEFMX1dBSVRfVElNRSBdLnNldEZ1bmMgICAgICAgICAgID0gRlRERl9zZXRNYXhGcmFtZVRvdGFsV2FpdFRpbWUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9GUkFNRV9SRVRSSUVTIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5tYXhGcmFtZVJldHJpZXMsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9GUkFNRV9SRVRSSUVTIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5tYXhGcmFtZVJldHJpZXMpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfRlJBTUVfUkVUUklFUyBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfRlJBTUVfUkVUUklFUyBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NSU5fQkUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubWluQkUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01JTl9CRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5taW5CRSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01JTl9CRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01JTl9CRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfc2V0TWluQkUsCisjaWZuZGVmIEZUREZfTElURQorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MSUZTX1BFUklPRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuTElGU1BlcmlvZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTElGU19QRVJJT0QgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTElGU19QRVJJT0QgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTElGU19QRVJJT0QgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0lGU19QRVJJT0QgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLlNJRlNQZXJpb2QsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NJRlNfUEVSSU9EIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NJRlNfUEVSSU9EIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NJRlNfUEVSSU9EIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisjZW5kaWYKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUEFOX0lEIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLlBBTklkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fSUQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuUEFOSWQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fSUQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX2dldFBBTklkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fSUQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldFBBTklkLAorI2lmbmRlZiBGVERGX0xJVEUKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUFJPTUlTQ1VPVVNfTU9ERSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLnByb21pc2N1b3VzTW9kZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUFJPTUlTQ1VPVVNfTU9ERSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLnByb21pc2N1b3VzTW9kZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BST01JU0NVT1VTX01PREUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BST01JU0NVT1VTX01PREUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1JFU1BPTlNFX1dBSVRfVElNRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5yZXNwb25zZVdhaXRUaW1lLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SRVNQT05TRV9XQUlUX1RJTUUgXS5zaXplICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIucmVzcG9uc2VXYWl0VGltZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1JFU1BPTlNFX1dBSVRfVElNRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1JFU1BPTlNFX1dBSVRfVElNRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SWF9PTl9XSEVOX0lETEUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIucnhPbldoZW5JZGxlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SWF9PTl9XSEVOX0lETEUgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIucnhPbldoZW5JZGxlKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUlhfT05fV0hFTl9JRExFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gRlRERl9nZXRSeE9uV2hlbklkbGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1JYX09OX1dIRU5fSURMRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICA9IEZUREZfc2V0UnhPbldoZW5JZGxlLAorI2lmbmRlZiBGVERGX0xJVEUKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0VDVVJJVFlfRU5BQkxFRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLnNlY3VyaXR5RW5hYmxlZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0VDVVJJVFlfRU5BQkxFRCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLnNlY3VyaXR5RW5hYmxlZCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NFQ1VSSVRZX0VOQUJMRUQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NFQ1VSSVRZX0VOQUJMRUQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TSE9SVF9BRERSRVNTIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuc2hvcnRBZGRyZXNzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TSE9SVF9BRERSRVNTIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuc2hvcnRBZGRyZXNzKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0hPUlRfQUREUkVTUyBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0hPUlRfQUREUkVTUyBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRTaG9ydEFkZHJlc3MsCisjaWZuZGVmIEZUREZfTElURQorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TVVBFUkZSQU1FX09SREVSIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuc3VwZXJmcmFtZU9yZGVyLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TVVBFUkZSQU1FX09SREVSIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TVVBFUkZSQU1FX09SREVSIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TVVBFUkZSQU1FX09SREVSIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TWU5DX1NZTUJPTF9PRkZTRVQgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuc3luY1N5bWJvbE9mZnNldCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU1lOQ19TWU1CT0xfT0ZGU0VUIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU1lOQ19TWU1CT0xfT0ZGU0VUIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU1lOQ19TWU1CT0xfT0ZGU0VUIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVElNRVNUQU1QX1NVUFBPUlRFRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLnRpbWVzdGFtcFN1cHBvcnRlZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVElNRVNUQU1QX1NVUFBPUlRFRCBdLnNpemUgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVElNRVNUQU1QX1NVUFBPUlRFRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVElNRVNUQU1QX1NVUFBPUlRFRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFJBTlNBQ1RJT05fUEVSU0lTVEVOQ0VfVElNRSBdLmFkZHIgICAgICAgICAgID0gJkZUREZfcGliLnRyYW5zYWN0aW9uUGVyc2lzdGVuY2VUaW1lLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9UUkFOU0FDVElPTl9QRVJTSVNURU5DRV9USU1FIF0uc2l6ZSAgICAgICAgICAgPQorICAgIHNpemVvZihGVERGX3BpYi50cmFuc2FjdGlvblBlcnNpc3RlbmNlVGltZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RSQU5TQUNUSU9OX1BFUlNJU1RFTkNFX1RJTUUgXS5nZXRGdW5jICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RSQU5TQUNUSU9OX1BFUlNJU1RFTkNFX1RJTUUgXS5zZXRGdW5jICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VOSF9BQ0tfV0FJVF9EVVJBVElPTiBdLmFkZHIgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5lbmhBY2tXYWl0RHVyYXRpb24sCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VOSF9BQ0tfV0FJVF9EVVJBVElPTiBdLnNpemUgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5lbmhBY2tXYWl0RHVyYXRpb24pLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FTkhfQUNLX1dBSVRfRFVSQVRJT04gXS5nZXRGdW5jICAgICAgICAgICAgICAgPSBGVERGX2dldEVuaEFja1dhaXREdXJhdGlvbiwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRU5IX0FDS19XQUlUX0RVUkFUSU9OIF0uc2V0RnVuYyAgICAgICAgICAgICAgID0gRlRERl9zZXRFbmhBY2tXYWl0RHVyYXRpb24sCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0lNUExJQ0lUX0JST0FEQ0FTVCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5pbXBsaWNpdEJyb2FkY2FzdCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSU1QTElDSVRfQlJPQURDQVNUIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmltcGxpY2l0QnJvYWRjYXN0KSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSU1QTElDSVRfQlJPQURDQVNUIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgID0gRlRERl9nZXRJbXBsaWNpdEJyb2FkY2FzdCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSU1QTElDSVRfQlJPQURDQVNUIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRJbXBsaWNpdEJyb2FkY2FzdCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0lNUExFX0FERFJFU1MgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLnNpbXBsZUFkZHJlc3MsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NJTVBMRV9BRERSRVNTIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5zaW1wbGVBZGRyZXNzKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0lNUExFX0FERFJFU1MgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0lNUExFX0FERFJFU1MgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRTaW1wbGVBZGRyZXNzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9ESVNDT05ORUNUX1RJTUUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuZGlzY29ubmVjdFRpbWUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RJU0NPTk5FQ1RfVElNRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5kaXNjb25uZWN0VGltZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RJU0NPTk5FQ1RfVElNRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RJU0NPTk5FQ1RfVElNRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0pPSU5fUFJJT1JJVFkgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5qb2luUHJpb3JpdHksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0pPSU5fUFJJT1JJVFkgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5qb2luUHJpb3JpdHkpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9KT0lOX1BSSU9SSVRZIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9KT0lOX1BSSU9SSVRZIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BU04gXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuQVNOLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BU04gXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuQVNOKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQVNOIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQVNOIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTk9fSExfQlVGRkVSUyBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLm5vSExCdWZmZXJzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9OT19ITF9CVUZGRVJTIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIubm9ITEJ1ZmZlcnMpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9OT19ITF9CVUZGRVJTIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9OT19ITF9CVUZGRVJTIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TTE9URlJBTUVfVEFCTEUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuc2xvdGZyYW1lVGFibGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NMT1RGUkFNRV9UQUJMRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NMT1RGUkFNRV9UQUJMRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NMT1RGUkFNRV9UQUJMRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xJTktfVEFCTEUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5saW5rVGFibGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xJTktfVEFCTEUgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xJTktfVEFCTEUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xJTktfVEFCTEUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RJTUVTTE9UX1RFTVBMQVRFIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9USU1FU0xPVF9URU1QTEFURSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RJTUVTTE9UX1RFTVBMQVRFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisjaWZkZWYgRlRERl9OT19UU0NICisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RJTUVTTE9UX1RFTVBMQVRFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisjZWxzZQorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9USU1FU0xPVF9URU1QTEFURSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldFRpbWVzbG90VGVtcGxhdGUsCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0hPUFBJTkdTRVFVRU5DRV9JRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5Ib3BwaW5nU2VxdWVuY2VJZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSE9QUElOR1NFUVVFTkNFX0lEIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLkhvcHBpbmdTZXF1ZW5jZUlkKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSE9QUElOR1NFUVVFTkNFX0lEIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSE9QUElOR1NFUVVFTkNFX0lEIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ0hBTk5FTF9QQUdFIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmNoYW5uZWxQYWdlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DSEFOTkVMX1BBR0UgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuY2hhbm5lbFBhZ2UpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DSEFOTkVMX1BBR0UgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DSEFOTkVMX1BBR0UgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9OVU1CRVJfT0ZfQ0hBTk5FTFMgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubnVtYmVyT2ZDaGFubmVscywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTlVNQkVSX09GX0NIQU5ORUxTIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLm51bWJlck9mQ2hhbm5lbHMpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9OVU1CRVJfT0ZfQ0hBTk5FTFMgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9OVU1CRVJfT0ZfQ0hBTk5FTFMgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QSFlfQ09ORklHVVJBVElPTiBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIucGh5Q29uZmlndXJhdGlvbiwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUEhZX0NPTkZJR1VSQVRJT04gXS5zaXplICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLnBoeUNvbmZpZ3VyYXRpb24pLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QSFlfQ09ORklHVVJBVElPTiBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QSFlfQ09ORklHVVJBVElPTiBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FWFRFTlRFRF9CSVRNQVAgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuZXh0ZW5kZWRCaXRtYXAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VYVEVOVEVEX0JJVE1BUCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5leHRlbmRlZEJpdG1hcCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VYVEVOVEVEX0JJVE1BUCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VYVEVOVEVEX0JJVE1BUCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTEVOR1RIIF0uYWRkciAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5ob3BwaW5nU2VxdWVuY2VMZW5ndGgsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTEVOR1RIIF0uc2l6ZSAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5ob3BwaW5nU2VxdWVuY2VMZW5ndGgpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9IT1BQSU5HX1NFUVVFTkNFX0xFTkdUSCBdLmdldEZ1bmMgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9IT1BQSU5HX1NFUVVFTkNFX0xFTkdUSCBdLnNldEZ1bmMgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9IT1BQSU5HX1NFUVVFTkNFX0xJU1QgXS5hZGRyICAgICAgICAgICAgICAgICAgPSBGVERGX3BpYi5ob3BwaW5nU2VxdWVuY2VMaXN0LAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9IT1BQSU5HX1NFUVVFTkNFX0xJU1QgXS5zaXplICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuaG9wcGluZ1NlcXVlbmNlTGlzdCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTElTVCBdLmdldEZ1bmMgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTElTVCBdLnNldEZ1bmMgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NVUlJFTlRfSE9QIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5jdXJyZW50SG9wLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DVVJSRU5UX0hPUCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuY3VycmVudEhvcCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NVUlJFTlRfSE9QIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NVUlJFTlRfSE9QIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RXRUxMX1RJTUUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5kd2VsbFRpbWUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RXRUxMX1RJTUUgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5kd2VsbFRpbWUpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9EV0VMTF9USU1FIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9EV0VMTF9USU1FIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfUEVSSU9EIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuQ1NMUGVyaW9kLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfUEVSSU9EIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuQ1NMUGVyaW9kKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX1BFUklPRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX1BFUklPRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX01BWF9QRVJJT0QgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkNTTE1heFBlcmlvZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX01BWF9QRVJJT0QgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLkNTTE1heFBlcmlvZCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9NQVhfUEVSSU9EIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9NQVhfUEVSSU9EIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9DSEFOTkVMX01BU0sgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5DU0xDaGFubmVsTWFzaywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX0NIQU5ORUxfTUFTSyBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLkNTTENoYW5uZWxNYXNrKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX0NIQU5ORUxfTUFTSyBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX0NIQU5ORUxfTUFTSyBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX0ZSQU1FX1BFTkRJTkdfV0FJVF9UIF0uYWRkciAgICAgICAgICAgICAgID0gJkZUREZfcGliLkNTTEZyYW1lUGVuZGluZ1dhaXRULAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfRlJBTUVfUEVORElOR19XQUlUX1QgXS5zaXplICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuQ1NMRnJhbWVQZW5kaW5nV2FpdFQpLAorI2lmZGVmIEZUREZfTk9fQ1NMCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9GUkFNRV9QRU5ESU5HX1dBSVRfVCBdLmdldEZ1bmMgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9GUkFNRV9QRU5ESU5HX1dBSVRfVCBdLnNldEZ1bmMgICAgICAgICAgICA9IE5VTEwsCisjZWxzZQorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfRlJBTUVfUEVORElOR19XQUlUX1QgXS5nZXRGdW5jICAgICAgICAgICAgPSBGVERGX2dldENzbEZyYW1lUGVuZGluZ1dhaXRULAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfRlJBTUVfUEVORElOR19XQUlUX1QgXS5zZXRGdW5jICAgICAgICAgICAgPSBGVERGX3NldENzbEZyYW1lUGVuZGluZ1dhaXRULAorI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xPV19FTkVSR1lfU1VQRVJGUkFNRV9TVVBQT1JURUQgXS5hZGRyICAgICAgICA9ICZGVERGX3BpYi5sb3dFbmVyZ3lTdXBlcmZyYW1lU3VwcG9ydGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MT1dfRU5FUkdZX1NVUEVSRlJBTUVfU1VQUE9SVEVEIF0uc2l6ZSAgICAgICAgPQorICAgIHNpemVvZihGVERGX3BpYi5sb3dFbmVyZ3lTdXBlcmZyYW1lU3VwcG9ydGVkKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTE9XX0VORVJHWV9TVVBFUkZSQU1FX1NVUFBPUlRFRCBdLmdldEZ1bmMgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTE9XX0VORVJHWV9TVVBFUkZSQU1FX1NVUFBPUlRFRCBdLnNldEZ1bmMgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTE9XX0VORVJHWV9TVVBFUkZSQU1FX1NZTkNfSU5URVJWQUwgXS5hZGRyICAgID0gJkZUREZfcGliLmxvd0VuZXJneVN1cGVyZnJhbWVTeW5jSW50ZXJ2YWwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xPV19FTkVSR1lfU1VQRVJGUkFNRV9TWU5DX0lOVEVSVkFMIF0uc2l6ZSAgICA9CisgICAgc2l6ZW9mKEZUREZfcGliLmxvd0VuZXJneVN1cGVyZnJhbWVTeW5jSW50ZXJ2YWwpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MT1dfRU5FUkdZX1NVUEVSRlJBTUVfU1lOQ19JTlRFUlZBTCBdLmdldEZ1bmMgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MT1dfRU5FUkdZX1NVUEVSRlJBTUVfU1lOQ19JTlRFUlZBTCBdLnNldEZ1bmMgPSBOVUxMLAorI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUEVSRk9STUFOQ0VfTUVUUklDUyBdLmFkZHIgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUEVSRk9STUFOQ0VfTUVUUklDUyBdLnNpemUgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcyksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BFUkZPUk1BTkNFX01FVFJJQ1MgXS5nZXRGdW5jICAgICAgICAgICAgICAgICA9IEZUREZfZ2V0TG1hY1BtRGF0YSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUEVSRk9STUFOQ0VfTUVUUklDUyBdLnNldEZ1bmMgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1VTRV9FTkhBTkNFRF9CRUFDT04gXS5hZGRyICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi51c2VFbmhhbmNlZEJlY2FvbiwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVVNFX0VOSEFOQ0VEX0JFQUNPTiBdLnNpemUgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLnVzZUVuaGFuY2VkQmVjYW9uKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVVNFX0VOSEFOQ0VEX0JFQUNPTiBdLmdldEZ1bmMgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVVNFX0VOSEFOQ0VEX0JFQUNPTiBdLnNldEZ1bmMgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRUJfSUVfTElTVCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkVCSUVMaXN0LAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9JRV9MSVNUIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuRUJJRUxpc3QpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9JRV9MSVNUIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9JRV9MSVNUIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9GSUxURVJJTkdfRU5BQkxFRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuRUJGaWx0ZXJpbmdFbmFibGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9GSUxURVJJTkdfRU5BQkxFRCBdLnNpemUgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuRUJGaWx0ZXJpbmdFbmFibGVkKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRUJfRklMVEVSSU5HX0VOQUJMRUQgXS5nZXRGdW5jICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRUJfRklMVEVSSU5HX0VOQUJMRUQgXS5zZXRGdW5jICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRUJTTiBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkVCU04sCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VCU04gXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5FQlNOKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRUJTTiBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRUJTTiBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRUJfQVVUT19TQSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkVCQXV0b1NBLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9BVVRPX1NBIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuRUJBdXRvU0EpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9BVVRPX1NBIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9BVVRPX1NBIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQUNLX0lFX0xJU1QgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuRUFja0lFTGlzdCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRUFDS19JRV9MSVNUIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLkVBY2tJRUxpc3QpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQUNLX0lFX0xJU1QgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQUNLX0lFX0xJU1QgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9LRVlfVEFCTEUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIua2V5VGFibGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0tFWV9UQUJMRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5rZXlUYWJsZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0tFWV9UQUJMRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0tFWV9UQUJMRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RFVklDRV9UQUJMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5kZXZpY2VUYWJsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfREVWSUNFX1RBQkxFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmRldmljZVRhYmxlKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfREVWSUNFX1RBQkxFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfREVWSUNFX1RBQkxFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0VDVVJJVFlfTEVWRUxfVEFCTEUgXS5hZGRyICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLnNlY3VyaXR5TGV2ZWxUYWJsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0VDVVJJVFlfTEVWRUxfVEFCTEUgXS5zaXplICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLnNlY3VyaXR5TGV2ZWxUYWJsZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NFQ1VSSVRZX0xFVkVMX1RBQkxFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NFQ1VSSVRZX0xFVkVMX1RBQkxFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0ZSQU1FX0NPVU5URVIgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5mcmFtZUNvdW50ZXIsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0ZSQU1FX0NPVU5URVIgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5mcmFtZUNvdW50ZXIpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9GUkFNRV9DT1VOVEVSIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9GUkFNRV9DT1VOVEVSIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX1NFQ1VSSVRZX0xFVkVMIF0uYWRkciAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubXREYXRhU2VjdXJpdHlMZXZlbCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTVRfREFUQV9TRUNVUklUWV9MRVZFTCBdLnNpemUgICAgICAgICAgICAgICAgID0KKyAgICBzaXplb2YoRlRERl9waWIubXREYXRhU2VjdXJpdHlMZXZlbCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfU0VDVVJJVFlfTEVWRUwgXS5nZXRGdW5jICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfU0VDVVJJVFlfTEVWRUwgXS5zZXRGdW5jICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfS0VZX0lEX01PREUgXS5hZGRyICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5tdERhdGFLZXlJZE1vZGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfS0VZX0lEX01PREUgXS5zaXplICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5tdERhdGFLZXlJZE1vZGUpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX0tFWV9JRF9NT0RFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX0tFWV9JRF9NT0RFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX0tFWV9TT1VSQ0UgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubXREYXRhS2V5U291cmNlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX0tFWV9TT1VSQ0UgXS5zaXplICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIubXREYXRhS2V5U291cmNlKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTVRfREFUQV9LRVlfU09VUkNFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTVRfREFUQV9LRVlfU09VUkNFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTVRfREFUQV9LRVlfSU5ERVggXS5hZGRyICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLm10RGF0YUtleUluZGV4LAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX0tFWV9JTkRFWCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIubXREYXRhS2V5SW5kZXgpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX0tFWV9JTkRFWCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX0tFWV9JTkRFWCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9ERUZBVUxUX0tFWV9TT1VSQ0UgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuZGVmYXVsdEtleVNvdXJjZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfREVGQVVMVF9LRVlfU09VUkNFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmRlZmF1bHRLZXlTb3VyY2UpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9ERUZBVUxUX0tFWV9TT1VSQ0UgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9ERUZBVUxUX0tFWV9TT1VSQ0UgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fQ09PUkRfRVhURU5ERURfQUREUkVTUyBdLmFkZHIgICAgICAgICAgICAgPSAmRlRERl9waWIuUEFOQ29vcmRFeHRBZGRyZXNzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fQ09PUkRfRVhURU5ERURfQUREUkVTUyBdLnNpemUgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuUEFOQ29vcmRFeHRBZGRyZXNzKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUEFOX0NPT1JEX0VYVEVOREVEX0FERFJFU1MgXS5nZXRGdW5jICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUEFOX0NPT1JEX0VYVEVOREVEX0FERFJFU1MgXS5zZXRGdW5jICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUEFOX0NPT1JEX1NIT1JUX0FERFJFU1MgXS5hZGRyICAgICAgICAgICAgICAgID0gJkZUREZfcGliLlBBTkNvb3JkU2hvcnRBZGRyZXNzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fQ09PUkRfU0hPUlRfQUREUkVTUyBdLnNpemUgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuUEFOQ29vcmRTaG9ydEFkZHJlc3MpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fQ09PUkRfU0hPUlRfQUREUkVTUyBdLmdldEZ1bmMgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fQ09PUkRfU0hPUlRfQUREUkVTUyBdLnNldEZ1bmMgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9GUkFNRV9DT1VOVEVSX01PREUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuZnJhbWVDb3VudGVyTW9kZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRlJBTUVfQ09VTlRFUl9NT0RFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmZyYW1lQ291bnRlck1vZGUpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9GUkFNRV9DT1VOVEVSX01PREUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9GUkFNRV9DT1VOVEVSX01PREUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfU1lOQ19UWF9NQVJHSU4gXS5hZGRyICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuQ1NMU3luY1R4TWFyZ2luLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfU1lOQ19UWF9NQVJHSU4gXS5zaXplICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuQ1NMU3luY1R4TWFyZ2luKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX1NZTkNfVFhfTUFSR0lOIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX1NZTkNfVFhfTUFSR0lOIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX01BWF9BR0VfUkVNT1RFX0lORk8gXS5hZGRyICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkNTTE1heEFnZVJlbW90ZUluZm8sCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9NQVhfQUdFX1JFTU9URV9JTkZPIF0uc2l6ZSAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5DU0xNYXhBZ2VSZW1vdGVJbmZvKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX01BWF9BR0VfUkVNT1RFX0lORk8gXS5nZXRGdW5jICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX01BWF9BR0VfUkVNT1RFX0lORk8gXS5zZXRGdW5jICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFNDSF9FTkFCTEVEIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLnRzY2hFbmFibGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9UU0NIX0VOQUJMRUQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9UU0NIX0VOQUJMRUQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9UU0NIX0VOQUJMRUQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorI2lmZGVmIEZUREZfTk9fQ1NMCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xFX0VOQUJMRUQgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5sZUVuYWJsZWQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xFX0VOQUJMRUQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xFX0VOQUJMRUQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xFX0VOQUJMRUQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisjZWxzZQorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MRV9FTkFCTEVEIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubGVFbmFibGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MRV9FTkFCTEVEIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIubGVFbmFibGVkKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTEVfRU5BQkxFRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTEVfRU5BQkxFRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRMZUVuYWJsZWQsCisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NVUlJFTlRfQ0hBTk5FTCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5jdXJyZW50Q2hhbm5lbCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1VSUkVOVF9DSEFOTkVMIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmN1cnJlbnRDaGFubmVsKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1VSUkVOVF9DSEFOTkVMIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gRlRERl9nZXRDdXJyZW50Q2hhbm5lbCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1VSUkVOVF9DSEFOTkVMIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRDdXJyZW50Q2hhbm5lbCwKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NIQU5ORUxTX1NVUFBPUlRFRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICh2b2lkICopICZjaGFubmVsc1N1cHBvcnRlZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ0hBTk5FTFNfU1VQUE9SVEVEIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ0hBTk5FTFNfU1VQUE9SVEVEIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ0hBTk5FTFNfU1VQUE9SVEVEIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RYX1BPV0VSX1RPTEVSQU5DRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5UWFBvd2VyVG9sZXJhbmNlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9UWF9QT1dFUl9UT0xFUkFOQ0UgXS5zaXplICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuVFhQb3dlclRvbGVyYW5jZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RYX1BPV0VSX1RPTEVSQU5DRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RYX1BPV0VSX1RPTEVSQU5DRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RYX1BPV0VSIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5UWFBvd2VyLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9UWF9QT1dFUiBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuVFhQb3dlciksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RYX1BPV0VSIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RYX1BPV0VSIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NDQV9NT0RFIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5DQ0FNb2RlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DQ0FfTU9ERSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuQ0NBTW9kZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NDQV9NT0RFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NDQV9NT0RFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfc2V0VFhQb3dlciwKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NVUlJFTlRfUEFHRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5jdXJyZW50UGFnZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1VSUkVOVF9QQUdFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1VSUkVOVF9QQUdFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1VSUkVOVF9QQUdFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0ZSQU1FX0RVUkFUSU9OIF0uYWRkciAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLm1heEZyYW1lRHVyYXRpb24sCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9GUkFNRV9EVVJBVElPTiBdLnNpemUgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9GUkFNRV9EVVJBVElPTiBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9GUkFNRV9EVVJBVElPTiBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NIUl9EVVJBVElPTiBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5TSFJEdXJhdGlvbiwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0hSX0RVUkFUSU9OIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0hSX0RVUkFUSU9OIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0hSX0RVUkFUSU9OIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RSQUZGSUNfQ09VTlRFUlMgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi50cmFmZmljQ291bnRlcnMsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RSQUZGSUNfQ09VTlRFUlMgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RSQUZGSUNfQ09VTlRFUlMgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICA9IEZUREZfZ2V0TG1hY1RyYWZmaWNDb3VudGVycywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFJBRkZJQ19DT1VOVEVSUyBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xFX0NBUEFCTEUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5MRUNhcGFibGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xFX0NBUEFCTEUgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xFX0NBUEFCTEUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xFX0NBUEFCTEUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xMX0NBUEFCTEUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5MTENhcGFibGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xMX0NBUEFCTEUgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xMX0NBUEFCTEUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xMX0NBUEFCTEUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RTTUVfQ0FQQUJMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5EU01FQ2FwYWJsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRFNNRV9DQVBBQkxFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRFNNRV9DQVBBQkxFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRFNNRV9DQVBBQkxFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUkZJRF9DQVBBQkxFIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLlJGSURDYXBhYmxlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SRklEX0NBUEFCTEUgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SRklEX0NBUEFCTEUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SRklEX0NBUEFCTEUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BTUNBX0NBUEFCTEUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuQU1DQUNhcGFibGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FNQ0FfQ0FQQUJMRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FNQ0FfQ0FQQUJMRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FNQ0FfQ0FQQUJMRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NRVRSSUNTX0NBUEFCTEUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubWV0cmljc0NhcGFibGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01FVFJJQ1NfQ0FQQUJMRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01FVFJJQ1NfQ0FQQUJMRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01FVFJJQ1NfQ0FQQUJMRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisjaWZuZGVmIEZUREZfTElURQorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SQU5HSU5HX1NVUFBPUlRFRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIucmFuZ2luZ1N1cHBvcnRlZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUkFOR0lOR19TVVBQT1JURUQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUkFOR0lOR19TVVBQT1JURUQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUkFOR0lOR19TVVBQT1JURUQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0tFRVBfUEhZX0VOQUJMRUQgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5rZWVwUGh5RW5hYmxlZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfS0VFUF9QSFlfRU5BQkxFRCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmtlZXBQaHlFbmFibGVkKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfS0VFUF9QSFlfRU5BQkxFRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gRlRERl9nZXRLZWVwUGh5RW5hYmxlZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfS0VFUF9QSFlfRU5BQkxFRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRLZWVwUGh5RW5hYmxlZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUVUUklDU19FTkFCTEVEIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLm1ldHJpY3NFbmFibGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NRVRSSUNTX0VOQUJMRUQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIubWV0cmljc0VuYWJsZWQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NRVRSSUNTX0VOQUJMRUQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NRVRSSUNTX0VOQUJMRUQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorI2lmbmRlZiBGVERGX0xJVEUKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX0FVVE9fUkVTUE9ORCBdLmFkZHIgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmJlYWNvbkF1dG9SZXNwb25kLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fQVVUT19SRVNQT05EIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuYmVhY29uQXV0b1Jlc3BvbmQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fQVVUT19SRVNQT05EIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fQVVUT19SRVNQT05EIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9UU0NIX0NBUEFCTEUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIudHNjaENhcGFibGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RTQ0hfQ0FQQUJMRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RTQ0hfQ0FQQUJMRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RTQ0hfQ0FQQUJMRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RTX1NZTkNfQ09SUkVDVF9USFJFU0hPTEQgXS5hZGRyICAgICAgICAgICAgICA9ICZGVERGX3BpYi50c1N5bmNDb3JyZWN0VGhyZXNob2xkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9UU19TWU5DX0NPUlJFQ1RfVEhSRVNIT0xEIF0uc2l6ZSAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIudHNTeW5jQ29ycmVjdFRocmVzaG9sZCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RTX1NZTkNfQ09SUkVDVF9USFJFU0hPTEQgXS5nZXRGdW5jICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RTX1NZTkNfQ09SUkVDVF9USFJFU0hPTEQgXS5zZXRGdW5jICAgICAgICAgICA9IE5VTEwsCisjZW5kaWYgLyogIUZUREZfTElURSAqLworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQk9fSVJRX1RIUkVTSE9MRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmJvSXJxVGhyZXNob2xkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CT19JUlFfVEhSRVNIT0xEIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuYm9JcnFUaHJlc2hvbGQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CT19JUlFfVEhSRVNIT0xEIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgPSBGVERGX2dldEJvSXJxVGhyZXNob2xkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CT19JUlFfVEhSRVNIT0xEIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldEJvSXJxVGhyZXNob2xkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QVElfQ09ORklHIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIucHRpQ29uZmlnLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QVElfQ09ORklHIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIucHRpQ29uZmlnKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUFRJX0NPTkZJRyBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUFRJX0NPTkZJRyBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRQdGlDb25maWcsCisjZW5kaWYgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSAqLworfTsKKworRlRERl9Cb29sZWFuICAgICAgICBGVERGX3RyYW5zcGFyZW50TW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9CaXRtYXAzMiAgICAgICBGVERGX3RyYW5zcGFyZW50TW9kZU9wdGlvbnMgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworI2lmIEZUREZfREJHX0JVU19FTkFCTEUKK0ZUREZfRGJnTW9kZSAgICAgICAgRlRERl9kYmdNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKyNlbmRpZgorI2lmIGRnX2NvbmZpZ1VTRV9GVERGX0REUEhZID09IDEKK3VpbnQxNl90ICAgICAgICAgICAgRlRERl9kZHBoeUNjYVJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKyNlbmRpZgorI2lmbmRlZiBGVERGX0xJVEUKK0ZUREZfQnVmZmVyICAgICAgICAgRlRERl9yZXFCdWZmZXJzWyBGVERGX05SX09GX1JFUV9CVUZGRVJTIF0gICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKK0ZUREZfUXVldWUgICAgICAgICAgRlRERl9yZXFRdWV1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKK0ZUREZfUXVldWUgICAgICAgICAgRlRERl9mcmVlUXVldWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKK0ZUREZfUGVuZGluZyAgICAgICAgRlRERl90eFBlbmRpbmdMaXN0WyBGVERGX05SX09GX1JFUV9CVUZGRVJTIF0gICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKK0ZUREZfUGVuZGluZ1RMICAgICAgRlRERl90eFBlbmRpbmdUaW1lckxpc3RbIEZUREZfTlJfT0ZfUkVRX0JVRkZFUlMgXSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKK0ZUREZfUGVuZGluZ1RMICAgICAqRlRERl90eFBlbmRpbmdUaW1lckhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKK0ZUREZfVGltZSAgICAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lckxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKK0ZUREZfVGltZSAgICAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lclRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisjaWZuZGVmIEZUREZfUEhZX0FQSQorRlRERl9Nc2dCdWZmZXIgICAgICpGVERGX3JlcUN1cnJlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworI2VuZGlmCitGVERGX1NpemUgICAgICAgICAgIEZUREZfbnJPZlJldHJpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CisjaWYgRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYKK3N0YXRpYyBGVERGX1NkYiAgICAgRlRERl9zZGIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKyNlbmRpZiAvKiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRiAqLworI2lmbmRlZiBGVERGX0xJVEUKK0ZUREZfQm9vbGVhbiAgICAgICAgRlRERl9pc1BBTkNvb3JkaW5hdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKK0ZUREZfVGltZSAgICAgICAgICAgRlRERl9zdGFydENzbFNhbXBsZVRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKK0ZUREZfUnhBZGRyZXNzQWRtaW4gRlRERl9yeGFbIEZUREZfTlJfT0ZfUlhfQUREUlMgXSAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCitGVERGX0Jvb2xlYW4gICAgICAgIEZUREZfdHhJblByb2dyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CisjaWZuZGVmIEZUREZfTElURQorI2lmbmRlZiBGVERGX05PX0NTTAorRlRERl9QZWVyQ3NsVGltaW5nICBGVERGX3BlZXJDc2xUaW1pbmdbIEZUREZfTlJfT0ZfQ1NMX1BFRVJTIF0gICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9Cb29sZWFuICAgICAgICBGVERGX29sZExlRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9UaW1lICAgICAgICAgICBGVERGX3J6VGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9TaG9ydEFkZHJlc3MgICBGVERGX3NlbmRGcmFtZVBlbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisjZW5kaWYgLyogIUZUREZfTElURSAqLwordWludDMyX3QgICAgICAgICAgICBGVERGX2N1clRpbWVbIDIgXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9MbWFjQ291bnRlcnMgICBGVERGX2xtYWNDb3VudGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9GcmFtZUhlYWRlciAgICBGVERGX2ZoOworI2lmbmRlZiBGVERGX0xJVEUKK0ZUREZfU2VjdXJpdHlIZWFkZXIgRlRERl9zaDsKK0ZUREZfQXNzb2NBZG1pbiAgICAgRlRERl9hYTsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKKyNpZiBGVERGX1VTRV9QVEkKKy8qIFBhY2tldCB0cmFmZmljIGluZm9ybWF0aW9uIHVzZWQgd2hlbiBGVERGIGlzIGluIFJYIGVuYWJsZS4gKi8KK3N0YXRpYyBGVERGX1BUSSAgRlRERl9SeFB0aSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgc2VuZENvbmZpcm0oRlRERl9TdGF0dXMgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9Nc2dJZCAgbXNnSWQpOworCit2b2lkIEZUREZfcmVzZXQoaW50IHNldERlZmF1bHRQSUIpCit7CisgICAgaWYgKHNldERlZmF1bHRQSUIpCisgICAgeworICAgICAgICAvLyBSZXNldCBQSUIgdmFsdWVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzCisgICAgICAgIG1lbXNldCgmRlRERl9waWIsIDAsIHNpemVvZihGVERGX3BpYikpOworCisgICAgICAgIEZUREZfcGliLmV4dEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfR0VUX0VYVF9BRERSRVNTKCk7CisgICAgICAgIEZUREZfcGliLmFja1dhaXREdXJhdGlvbiAgICAgICAgICAgICAgICAgICA9IDB4MzY7CisjaWZuZGVmIEZUREZfTElURQorICAgICAgICBGVERGX3BpYi5hdXRvUmVxdWVzdCAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX1RSVUU7CisgICAgICAgIEZUREZfcGliLmJlYWNvbk9yZGVyICAgICAgICAgICAgICAgICAgICAgICA9IDE1OworICAgICAgICBGVERGX3BpYi5EU04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3BpYi5leHRBZGRyZXNzICYgMHhmZjsKKyAgICAgICAgRlRERl9waWIuQlNOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9waWIuZXh0QWRkcmVzcyAmIDB4ZmY7CisgICAgICAgIEZUREZfcGliLkVCU04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfcGliLmV4dEFkZHJlc3MgJiAweGZmOworICAgICAgICBGVERGX3BpYi5jb29yZFNob3J0QWRkcmVzcyAgICAgICAgICAgICAgICAgPSAweGZmZmY7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgICAgICBGVERGX3BpYi5tYXhCRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSA1OworICAgICAgICBGVERGX3BpYi5tYXhDU01BQmFja29mZnMgICAgICAgICAgICAgICAgICAgPSA0OworICAgICAgICBGVERGX3BpYi5tYXhGcmFtZVRvdGFsV2FpdFRpbWUgICAgICAgICAgICAgPSAxMDI2OyAvLyBzZWUgYXNpY192b2wgdjQwLjEwMC4yLjMwIFBSMjU0MAorICAgICAgICBGVERGX3BpYi5tYXhGcmFtZVJldHJpZXMgICAgICAgICAgICAgICAgICAgPSAzOworICAgICAgICBGVERGX3BpYi5taW5CRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAzOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICAgICAgRlRERl9waWIuTElGU1BlcmlvZCAgICAgICAgICAgICAgICAgICAgICAgID0gNDA7CisgICAgICAgIEZUREZfcGliLlNJRlNQZXJpb2QgICAgICAgICAgICAgICAgICAgICAgICA9IDEyOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAgICAgRlRERl9waWIuUEFOSWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhmZmZmOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICAgICAgRlRERl9waWIucmVzcG9uc2VXYWl0VGltZSAgICAgICAgICAgICAgICAgID0gMzI7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgICAgICBGVERGX3BpYi5zaG9ydEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgPSAweGZmZmY7CisjaWZuZGVmIEZUREZfTElURQorICAgICAgICBGVERGX3BpYi5zdXBlcmZyYW1lT3JkZXIgICAgICAgICAgICAgICAgICAgPSAxNTsKKyAgICAgICAgRlRERl9waWIudGltZXN0YW1wU3VwcG9ydGVkICAgICAgICAgICAgICAgID0gRlRERl9UUlVFOworICAgICAgICBGVERGX3BpYi50cmFuc2FjdGlvblBlcnNpc3RlbmNlVGltZSAgICAgICAgPSAweDFmNDsKKyAgICAgICAgRlRERl9waWIuZW5oQWNrV2FpdER1cmF0aW9uICAgICAgICAgICAgICAgID0gMHgzNjA7CisgICAgICAgIEZUREZfcGliLkVCQXV0b1NBICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfQVVUT19GVUxMOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAgICAgRlRERl9waWIuY3VycmVudENoYW5uZWwgICAgICAgICAgICAgICAgICAgID0gMTE7CisgICAgICAgIEZUREZfcGliLkNDQU1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfQ0NBX01PREVfMTsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgICAgIEZUREZfcGliLm1heEZyYW1lRHVyYXRpb24gICAgICAgICAgICAgICAgICA9IEZUREZfVEJEOworICAgICAgICBGVERGX3BpYi5TSFJEdXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX1RCRDsKKyAgICAgICAgRlRERl9waWIuZnJhbWVDb3VudGVyTW9kZSAgICAgICAgICAgICAgICAgID0gNDsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgICAgIEZUREZfcGliLm1ldHJpY3NDYXBhYmxlICAgICAgICAgICAgICAgICAgICA9IEZUREZfVFJVRTsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgICAgIEZUREZfcGliLmJlYWNvbkF1dG9SZXNwb25kICAgICAgICAgICAgICAgICA9IEZUREZfVFJVRTsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgICAgIEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcy5jb3VudGVyT2N0ZXRzICA9IDQ7IC8vIDMyIGJpdCBjb3VudGVycworI2lmbmRlZiBGVERGX0xJVEUKKyAgICAgICAgRlRERl9waWIuam9pblByaW9yaXR5ICAgICAgICAgICAgICAgICAgICAgID0gMTsKKyAgICAgICAgRlRERl9waWIuc2xvdGZyYW1lVGFibGUuc2xvdGZyYW1lRW50cmllcyAgID0gRlRERl9zbG90ZnJhbWVUYWJsZTsKKyAgICAgICAgRlRERl9waWIubGlua1RhYmxlLmxpbmtFbnRyaWVzICAgICAgICAgICAgID0gRlRERl9saW5rVGFibGU7CisgICAgICAgIEZUREZfcGliLnRpbWVzbG90VGVtcGxhdGUudHNDQ0FPZmZzZXQgICAgICA9IDE4MDA7CisgICAgICAgIEZUREZfcGliLnRpbWVzbG90VGVtcGxhdGUudHNDQ0EgICAgICAgICAgICA9IDEyODsKKyAgICAgICAgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c1R4T2Zmc2V0ICAgICAgID0gMjEyMDsKKyAgICAgICAgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c1J4T2Zmc2V0ICAgICAgID0gMTAyMDsKKyAgICAgICAgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c1J4QWNrRGVsYXkgICAgID0gODAwOworICAgICAgICBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzVHhBY2tEZWxheSAgICAgPSAxMDAwOworICAgICAgICBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzUnhXYWl0ICAgICAgICAgPSAyMjAwOworICAgICAgICBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzQWNrV2FpdCAgICAgICAgPSA0MDA7CisgICAgICAgIEZUREZfcGliLnRpbWVzbG90VGVtcGxhdGUudHNSeFR4ICAgICAgICAgICA9IDE5MjsKKyAgICAgICAgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c01heEFjayAgICAgICAgID0gMjQwMDsKKyAgICAgICAgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c01heFRzICAgICAgICAgID0gNDI1NjsKKyAgICAgICAgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c1RpbWVzbG90TGVuZ3RoID0gMTAwMDA7CisgICAgICAgIEZUREZfcGliLnRzU3luY0NvcnJlY3RUaHJlc2hvbGQgICAgICAgICAgICA9IDIyMDsKKyAgICAgICAgRlRERl9waWIuaG9wcGluZ1NlcXVlbmNlTGVuZ3RoICAgICAgICAgICAgID0gMTY7CisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgICAgICBpbnQgaTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlRERl9QVElTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfcGliLnB0aUNvbmZpZy5wdGlzW2ldID0gMDsKKyAgICAgICAgfQorCisjZW5kaWYKKyNpZmRlZiBGVERGX05PX0NTTAorICAgICAgICBGVERGX3BpYi5MRUNhcGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX0ZBTFNFOworI2Vsc2UKKyAgICAgICAgRlRERl9waWIuTEVDYXBhYmxlICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9UUlVFOworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisjaWZkZWYgRlRERl9OT19UU0NICisgICAgICAgIEZUREZfcGliLnRzY2hDYXBhYmxlICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfRkFMU0U7CisjZWxzZQorICAgICAgICBGVERGX3BpYi50c2NoQ2FwYWJsZSAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX1RSVUU7CisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisKKyAgICAgICAgaW50IG47CisKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IEZUREZfTUFYX0hPUFBJTkdfU0VRVUVOQ0VfTEVOR1RIOyBuKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfcGliLmhvcHBpbmdTZXF1ZW5jZUxpc3RbIG4gXSA9IG4gKyAxMTsKKyAgICAgICAgfQorCisjZW5kaWYgLyogIUZUREZfTElURSAqLworCisgICAgICAgIEZUREZfdHJhbnNwYXJlbnRNb2RlICA9IEZUREZfRkFMU0U7CisjaWZuZGVmIEZUREZfTElURQorICAgICAgICBGVERGX2lzUEFOQ29vcmRpbmF0b3IgPSBGVERGX0ZBTFNFOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAgICAgRlRERl9sbWFjQ291bnRlcnMuZmNzRXJyb3JDbnQgPSAwOworICAgICAgICBGVERGX2xtYWNDb3VudGVycy50eFN0ZEFja0NudCA9IDA7CisgICAgICAgIEZUREZfbG1hY0NvdW50ZXJzLnJ4U3RkQWNrQ250ID0gMDsKKworI2lmbmRlZiBGVERGX0xJVEUKKyAgICAgICAgbWVtc2V0KEZUREZfcGliLmRlZmF1bHRLZXlTb3VyY2UsIDB4ZmYsIDgpOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgICAgIEZUREZfcGliLmJvSXJxVGhyZXNob2xkICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9CT19JUlFfVEhSRVNIT0xEOworI2VuZGlmIC8qICNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BICovCisgICAgfQorCisgICAgRlRERl9pbml0UXVldWVzKCk7CisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqbG1hY1Jlc2V0ID0gRlRERl9HRVRfUkVHX0FERFIoT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQpOworICAgICpsbWFjUmVzZXQgPSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKmNvbnRyb2xTdGF0dXMgPSBGVERGX0dFVF9SRUdfQUREUihPTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMpOworICAgIHVpbnQzMl90ICAgICAgICAgICB3YWl0ICAgICAgICAgID0gMDsKKworICAgIHdoaWxlICgoKmNvbnRyb2xTdGF0dXMgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQKSA9PSAwKQorICAgIHsKKyAgICAgICAgd2FpdCsrOworICAgIH0KKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICp3YWtldXBUaW1lckVuYWJsZVN0YXR1cyA9IEZUREZfR0VUX0ZJRUxEX0FERFIoT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVUyk7CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgRlRERl9TRVRfRklFTEQoQUxXQVlTX09OX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRSwgMCk7CisKKyNlbHNlCisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRV9DTEVBUiwgMSk7CisjZW5kaWYKKworICAgIHdoaWxlICgqd2FrZXVwVGltZXJFbmFibGVTdGF0dXMgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVMpCisgICAgeyB9CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgRlRERl9TRVRfRklFTEQoQUxXQVlTX09OX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRSwgMSk7CisKKyNlbHNlCisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRV9TRVQsIDEpOworI2VuZGlmCisKKyAgICB3aGlsZSAoKCp3YWtldXBUaW1lckVuYWJsZVN0YXR1cyAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVUykgPT0gMCkKKyAgICB7IH0KKworI2lmbmRlZiBGVERGX0xJVEUKKyAgICBpbnQgbjsKKworI2lmbmRlZiBGVERGX05PX0NTTAorCisgICAgZm9yIChuID0gMDsgbiA8IEZUREZfTlJfT0ZfQ1NMX1BFRVJTOyBuKyspCisgICAgeworICAgICAgICBGVERGX3BlZXJDc2xUaW1pbmdbIG4gXS5hZGRyID0gMHhmZmZmOworICAgIH0KKworICAgIEZUREZfb2xkTGVFbmFibGVkICAgICA9IEZUREZfRkFMU0U7CisgICAgRlRERl93YWtlVXBFbmFibGVMZSAgID0gRlRERl9GQUxTRTsKKyAgICBGVERGX3NlbmRGcmFtZVBlbmRpbmcgPSAweGZmZmU7CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgRlRERl90eEluUHJvZ3Jlc3MgICAgID0gRlRERl9GQUxTRTsKKworICAgIEZUREZfaW5pdEN1clRpbWU2NCgpOworI2lmbmRlZiBGVERGX05PX1RTQ0gKKyAgICBGVERGX2luaXRUc2NoUmV0cmllcygpOworICAgIEZUREZfaW5pdEJhY2tvZmYoKTsKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKworI2lmbmRlZiBGVERGX0xJVEUKKworICAgIGZvciAobiA9IDA7IG4gPCBGVERGX05SX09GX1JYX0FERFJTOyBuKyspCisgICAgeworICAgICAgICBGVERGX3J4YVsgbiBdLmFkZHJNb2RlICA9IEZUREZfTk9fQUREUkVTUzsKKyAgICAgICAgRlRERl9yeGFbIG4gXS5kc25WYWxpZCAgPSBGVERGX0ZBTFNFOworICAgICAgICBGVERGX3J4YVsgbiBdLmJzblZhbGlkICA9IEZUREZfRkFMU0U7CisgICAgICAgIEZUREZfcnhhWyBuIF0uZWJzblZhbGlkID0gRlRERl9GQUxTRTsKKyAgICB9CisKKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9OUl9PRl9ORUlHSEJPUlM7IG4rKykKKyAgICB7CisgICAgICAgIEZUREZfbmVpZ2hib3JUYWJsZVsgbiBdLmRzdEFkZHIgPSAweGZmZmY7CisgICAgfQorCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisjZW5kaWYgLyogIUZUREZfTElURSAqLworI2lmIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGCisgICAgRlRERl9zZGJGc21SZXNldCgpOworI2VuZGlmIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisgICAgRlRERl9pbml0TG1hYygpOworCisjaWZuZGVmIEZUREZfTk9fQ1NMCisgICAgRlRERl9yelRpbWUgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCk7CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9GVERGX0REUEhZID09IDEKKyAgICBGVERGX2RkcGh5U2V0KDApOworI2VuZGlmCit9CisKKyNpZm5kZWYgRlRERl9QSFlfQVBJCit2b2lkIEZUREZfcHJvY2Vzc1Jlc2V0UmVxdWVzdChGVERGX1Jlc2V0UmVxdWVzdCAqcmVzZXRSZXF1ZXN0KQoreworCisgICAgRlRERl9yZXNldChyZXNldFJlcXVlc3QtPnNldERlZmF1bHRQSUIpOworICAgIEZUREZfUmVzZXRDb25maXJtICpyZXNldENvbmZpcm0gPSAoRlRERl9SZXNldENvbmZpcm0gKikgRlRERl9HRVRfTVNHX0JVRkZFUihzaXplb2YoRlRERl9SZXNldENvbmZpcm0pKTsKKworICAgIHJlc2V0Q29uZmlybS0+bXNnSWQgID0gRlRERl9SRVNFVF9DT05GSVJNOworICAgIHJlc2V0Q29uZmlybS0+c3RhdHVzID0gRlRERl9TVUNDRVNTOworCisgICAgRlRERl9SRUxfTVNHX0JVRkZFUigoRlRERl9Nc2dCdWZmZXIgKikgcmVzZXRSZXF1ZXN0KTsKKworICAgIEZUREZfUkNWX01TRygoRlRERl9Nc2dCdWZmZXIgKikgcmVzZXRDb25maXJtKTsKK30KKyNlbmRpZiAvKiBGVERGX1BIWV9BUEkgKi8KKwordm9pZCBGVERGX2luaXRMbWFjKHZvaWQpCit7CisgICAgRlRERl9QSUJBdHRyaWJ1dGUgUElCQXR0cmlidXRlOworCisgICAgZm9yIChQSUJBdHRyaWJ1dGUgPSAxOyBQSUJBdHRyaWJ1dGUgPD0gRlRERl9OUl9PRl9QSUJfQVRUUklCVVRFUzsgUElCQXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpZiAocGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uc2V0RnVuYyAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5zZXRGdW5jKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoRlRERl90cmFuc3BhcmVudE1vZGUgPT0gRlRERl9UUlVFKQorICAgIHsKKyAgICAgICAgRlRERl9lbmFibGVUcmFuc3BhcmVudE1vZGUoRlRERl9UUlVFLCBGVERGX3RyYW5zcGFyZW50TW9kZU9wdGlvbnMpOworICAgIH0KKworI2lmbmRlZiBGVERGX0xJVEUKKworICAgIGlmIChGVERGX2lzUEFOQ29vcmRpbmF0b3IpCisgICAgeworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0lTUEFOQ09PUkRJTkFUT1IsIDEpOworICAgIH0KKworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0NDQUlETEVXQUlULCAxOTIpOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4RmxhZ0NsZWFyID0gRlRERl9HRVRfRklFTERfQUREUihPTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVIpOworICAgICp0eEZsYWdDbGVhciA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKnBoeVBhcmFtcyA9IEZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMik7CisgICAgKnBoeVBhcmFtcyA9IChGVERGX1BIWVRYU1RBUlRVUCA8PCBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhTVEFSVFVQKSB8CisgICAgICAgICAgICAgICAgIChGVERGX1BIWVRYTEFURU5DWSA8PCBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhMQVRFTkNZKSB8CisgICAgICAgICAgICAgICAgIChGVERGX1BIWVRYRklOSVNIIDw8IE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWEZJTklTSCkgfAorICAgICAgICAgICAgICAgICAoRlRERl9QSFlUUlhXQUlUIDw8IE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUUlhXQUlUKTsKKworICAgIHBoeVBhcmFtcyA9IEZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMyk7CisgICAgKnBoeVBhcmFtcyA9IChGVERGX1BIWVJYU1RBUlRVUCA8PCBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhTVEFSVFVQKSB8CisgICAgICAgICAgICAgICAgIChGVERGX1BIWVJYTEFURU5DWSA8PCBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhMQVRFTkNZKSB8CisgICAgICAgICAgICAgICAgIChGVERGX1BIWUVOQUJMRSA8PCBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZRU5BQkxFKTsKKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpmdGRmQ20gPSBGVERGX0dFVF9SRUdfQUREUihPTl9PRkZfUkVHTUFQX0ZUREZfQ00pOworICAgICpmdGRmQ20gPSBGVERGX01TS19UWF9DRSB8IEZUREZfTVNLX1JYX0NFIHwgRlRERl9NU0tfU1lNQk9MX1RNUl9DRTsKKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpyeE1hc2sgPSBGVERGX0dFVF9SRUdfQUREUihPTl9PRkZfUkVHTUFQX1JYX01BU0spOworICAgICpyeE1hc2sgPSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfTUFTSzsKKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpsbWFjTWFzayA9IEZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfTE1BQ19NQVNLKTsKKyAgICAqbG1hY01hc2sgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfTTsKKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpsbWFjQ3RybE1hc2sgPSBGVERGX0dFVF9SRUdfQUREUihPTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLKTsKKyAgICAqbG1hY0N0cmxNYXNrID0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfTSB8CisgICAgICAgICAgICAgICAgICAgIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUl9NIHwKKyAgICAgICAgICAgICAgICAgICAgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfTTsKKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eEZsYWdDbGVhck07CisgICAgdHhGbGFnQ2xlYXJNICAgPSBGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00sIEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgICp0eEZsYWdDbGVhck0gfD0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTTsKKyAgICB0eEZsYWdDbGVhck0gICA9IEZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChPTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTSwgRlRERl9UWF9XQUtFVVBfQlVGRkVSKTsKKyAgICAqdHhGbGFnQ2xlYXJNIHw9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX007CisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorI2lmIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPCisgICAgRlRERl9mcHByUmVzZXQoKTsKKyAgICBGVERGX2ZwcHJTZXRNb2RlKEZUREZfVFJVRSwgRlRERl9GQUxTRSwgRlRERl9GQUxTRSk7CisjZWxzZQorICAgIEZUREZfZnBwclNldE1vZGUoRlRERl9GQUxTRSwgRlRERl9UUlVFLCBGVERGX1RSVUUpOworI2VuZGlmIC8qICNpZiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTyAqLworI2lmIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGCisgICAgLyogVW5tYXNrIGxvbmcgQk8gaW50ZXJydXB0LiAqLworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19USFJfTSwgMSk7CisjZWxzZSAvKiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRiAqLworICAgIC8qIFNldCBCTyB0aHJlc2hvbGQuICovCisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUkVTSE9MRCwgRlRERl9CT19JUlFfVEhSRVNIT0xEKTsKKworICAgIC8qIE1hc2sgbG9uZyBCTyBpbnRlcnJ1cHQuICovCisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9NLCAwKTsKKyNlbmRpZiAvKiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRiAqLworI2lmIEZUREZfVVNFX0xQRFAgPT0gMQorICAgIEZUREZfbHBkcEVuYWJsZShGVERGX1RSVUUpOworI2VuZGlmIC8qICNpZiBGVERGX1VTRV9MUERQID09IDEgKi8KKyNlbmRpZiAvKiAjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSAqLworfQorCisjaWZkZWYgRlRERl9QSFlfQVBJCitGVERGX1BJQkF0dHJpYnV0ZVZhbHVlICpGVERGX2dldFZhbHVlKEZUREZfUElCQXR0cmlidXRlIFBJQkF0dHJpYnV0ZSkKK3sKKworICAgIGlmIChQSUJBdHRyaWJ1dGUgPD0gRlRERl9OUl9PRl9QSUJfQVRUUklCVVRFUyAmJgorICAgICAgICBwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5hZGRyICE9IE5VTEwpCisgICAgeworICAgICAgICAvLyBVcGRhdGUgUElCIGF0dHJpYnV0ZSB3aXRoIGN1cnJlbnQgTE1BQyBzdGF0dXMgaWYgYSBnZXRGdW5jIGlzIGRlZmluZWQKKyAgICAgICAgaWYgKHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLmdldEZ1bmMgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uZ2V0RnVuYygpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLmFkZHI7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0ZUREZfU3RhdHVzIEZUREZfc2V0VmFsdWUoRlRERl9QSUJBdHRyaWJ1dGUgUElCQXR0cmlidXRlLCBjb25zdCBGVERGX1BJQkF0dHJpYnV0ZVZhbHVlICpQSUJBdHRyaWJ1dGVWYWx1ZSkKK3sKKyAgICBpZiAoUElCQXR0cmlidXRlIDw9IEZUREZfTlJfT0ZfUElCX0FUVFJJQlVURVMgJiYKKyAgICAgICAgcGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uYWRkciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLnNpemUgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLmFkZHIsCisgICAgICAgICAgICAgICAgICAgUElCQXR0cmlidXRlVmFsdWUsCisgICAgICAgICAgICAgICAgICAgcGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uc2l6ZSk7CisKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBMTUFDIHdpdGggbmV3IFBJQiBhdHRyaWJ1dGUgdmFsdWUgaWYgYSBzZXRGdW5jIGlzIGRlZmluZWQKKyAgICAgICAgICAgIGlmIChwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5zZXRGdW5jICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uc2V0RnVuYygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gRlRERl9TVUNDRVNTOworCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRlRERl9SRUFEX09OTFk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRlRERl9VTlNVUFBPUlRFRF9BVFRSSUJVVEU7Cit9CisKKyNlbHNlIC8qIEZUREZfUEhZX0FQSSAqLwordm9pZCBGVERGX3Byb2Nlc3NHZXRSZXF1ZXN0KEZUREZfR2V0UmVxdWVzdCAqZ2V0UmVxdWVzdCkKK3sKKyAgICBGVERGX0dldENvbmZpcm0gICpnZXRDb25maXJtICAgPSAoRlRERl9HZXRDb25maXJtICopIEZUREZfR0VUX01TR19CVUZGRVIoc2l6ZW9mKEZUREZfR2V0Q29uZmlybSkpOworICAgIEZUREZfUElCQXR0cmlidXRlIFBJQkF0dHJpYnV0ZSA9IGdldFJlcXVlc3QtPlBJQkF0dHJpYnV0ZTsKKworICAgIGdldENvbmZpcm0tPm1zZ0lkICAgICAgICA9IEZUREZfR0VUX0NPTkZJUk07CisgICAgZ2V0Q29uZmlybS0+UElCQXR0cmlidXRlID0gUElCQXR0cmlidXRlOworCisgICAgaWYgKFBJQkF0dHJpYnV0ZSA8PSBGVERGX05SX09GX1BJQl9BVFRSSUJVVEVTICYmCisgICAgICAgIHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLmFkZHIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIC8vIFVwZGF0ZSBQSUIgYXR0cmlidXRlIHdpdGggY3VycmVudCBMTUFDIHN0YXR1cyBpZiBhIGdldEZ1bmMgaXMgZGVmaW5lZAorICAgICAgICBpZiAocGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uZ2V0RnVuYyAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5nZXRGdW5jKCk7CisgICAgICAgIH0KKworICAgICAgICBnZXRDb25maXJtLT5zdGF0dXMgICAgICAgICAgICA9IEZUREZfU1VDQ0VTUzsKKyAgICAgICAgZ2V0Q29uZmlybS0+UElCQXR0cmlidXRlVmFsdWUgPSBwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5hZGRyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnZXRDb25maXJtLT5zdGF0dXMgPSBGVERGX1VOU1VQUE9SVEVEX0FUVFJJQlVURTsKKyAgICB9CisKKyAgICBGVERGX1JFTF9NU0dfQlVGRkVSKChGVERGX01zZ0J1ZmZlciAqKSBnZXRSZXF1ZXN0KTsKKworICAgIEZUREZfUkNWX01TRygoRlRERl9Nc2dCdWZmZXIgKikgZ2V0Q29uZmlybSk7Cit9CisKK3ZvaWQgRlRERl9wcm9jZXNzU2V0UmVxdWVzdChGVERGX1NldFJlcXVlc3QgKnNldFJlcXVlc3QpCit7CisgICAgRlRERl9TZXRDb25maXJtICAqc2V0Q29uZmlybSAgID0gKEZUREZfU2V0Q29uZmlybSAqKSBGVERGX0dFVF9NU0dfQlVGRkVSKHNpemVvZihGVERGX1NldENvbmZpcm0pKTsKKyAgICBGVERGX1BJQkF0dHJpYnV0ZSBQSUJBdHRyaWJ1dGUgPSBzZXRSZXF1ZXN0LT5QSUJBdHRyaWJ1dGU7CisKKyAgICBzZXRDb25maXJtLT5tc2dJZCAgICAgICAgPSBGVERGX1NFVF9DT05GSVJNOworICAgIHNldENvbmZpcm0tPlBJQkF0dHJpYnV0ZSA9IFBJQkF0dHJpYnV0ZTsKKworICAgIGlmIChQSUJBdHRyaWJ1dGUgPD0gRlRERl9OUl9PRl9QSUJfQVRUUklCVVRFUyAmJgorICAgICAgICBwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5hZGRyICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAocGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uc2l6ZSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzZXRDb25maXJtLT5zdGF0dXMgPSBGVERGX1NVQ0NFU1M7CisgICAgICAgICAgICBtZW1jcHkocGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uYWRkciwKKyAgICAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0LT5QSUJBdHRyaWJ1dGVWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICBwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5zaXplKTsKKworICAgICAgICAgICAgLy8gVXBkYXRlIExNQUMgd2l0aCBuZXcgUElCIGF0dHJpYnV0ZSB2YWx1ZSBpZiBhIHNldEZ1bmMgaXMgZGVmaW5lZAorICAgICAgICAgICAgaWYgKHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLnNldEZ1bmMgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5zZXRGdW5jKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzZXRDb25maXJtLT5zdGF0dXMgPSBGVERGX1JFQURfT05MWTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzZXRDb25maXJtLT5zdGF0dXMgPSBGVERGX1VOU1VQUE9SVEVEX0FUVFJJQlVURTsKKyAgICB9CisKKyAgICBGVERGX1JFTF9NU0dfQlVGRkVSKChGVERGX01zZ0J1ZmZlciAqKSBzZXRSZXF1ZXN0KTsKKworICAgIEZUREZfUkNWX01TRygoRlRERl9Nc2dCdWZmZXIgKikgc2V0Q29uZmlybSk7Cit9CisKKwordm9pZCBGVERGX3NlbmRDb21tU3RhdHVzSW5kaWNhdGlvbihGVERGX01zZ0J1ZmZlciAgICAgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU3RhdHVzICAgICAgICAgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1BBTklkICAgICAgICAgIFBBTklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0FkZHJlc3NNb2RlICAgIHNyY0FkZHJNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0FkZHJlc3MgICAgICAgIHNyY0FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQWRkcmVzc01vZGUgICAgZHN0QWRkck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQWRkcmVzcyAgICAgICAgZHN0QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TZWN1cml0eUxldmVsICBzZWN1cml0eUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0tleUlkTW9kZSAgICAgIGtleUlkTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCAgICAgICAgICprZXlTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfS2V5SW5kZXggICAgICAga2V5SW5kZXgpCit7CisgICAgRlRERl9Db21tU3RhdHVzSW5kaWNhdGlvbiAqY29tbVN0YXR1cyA9CisgICAgICAgIChGVERGX0NvbW1TdGF0dXNJbmRpY2F0aW9uICopIEZUREZfR0VUX01TR19CVUZGRVIoc2l6ZW9mKEZUREZfQ29tbVN0YXR1c0luZGljYXRpb24pKTsKKworICAgIGNvbW1TdGF0dXMtPm1zZ0lkICAgICAgICAgPSBGVERGX0NPTU1fU1RBVFVTX0lORElDQVRJT047CisgICAgY29tbVN0YXR1cy0+UEFOSWQgICAgICAgICA9IFBBTklkOworICAgIGNvbW1TdGF0dXMtPnNyY0FkZHJNb2RlICAgPSBzcmNBZGRyTW9kZTsKKyAgICBjb21tU3RhdHVzLT5zcmNBZGRyICAgICAgID0gc3JjQWRkcjsKKyAgICBjb21tU3RhdHVzLT5kc3RBZGRyTW9kZSAgID0gZHN0QWRkck1vZGU7CisgICAgY29tbVN0YXR1cy0+ZHN0QWRkciAgICAgICA9IGRzdEFkZHI7CisgICAgY29tbVN0YXR1cy0+c3RhdHVzICAgICAgICA9IHN0YXR1czsKKyAgICBjb21tU3RhdHVzLT5zZWN1cml0eUxldmVsID0gc2VjdXJpdHlMZXZlbDsKKyAgICBjb21tU3RhdHVzLT5rZXlJZE1vZGUgICAgID0ga2V5SWRNb2RlOworICAgIGNvbW1TdGF0dXMtPmtleUluZGV4ICAgICAgPSBrZXlJbmRleDsKKworICAgIHVpbnQ4X3QgbjsKKworICAgIGlmIChzZWN1cml0eUxldmVsICE9IDApCisgICAgeworICAgICAgICBpZiAoa2V5SWRNb2RlID09IDB4MikKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IDQ7IG4rKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb21tU3RhdHVzLT5rZXlTb3VyY2VbIG4gXSA9IGtleVNvdXJjZVsgbiBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGtleUlkTW9kZSA9PSAweDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCA4OyBuKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29tbVN0YXR1cy0+a2V5U291cmNlWyBuIF0gPSBrZXlTb3VyY2VbIG4gXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworI2lmbmRlZiBGVERGX0xJVEUKKworICAgIGlmIChyZXF1ZXN0ICYmCisgICAgICAgIChyZXF1ZXN0LT5tc2dJZCA9PSBGVERGX09SUEhBTl9SRVNQT05TRSB8fAorICAgICAgICAgcmVxdWVzdC0+bXNnSWQgPT0gRlRERl9BU1NPQ0lBVEVfUkVTUE9OU0UpKQorICAgIHsKKyAgICAgICAgaWYgKEZUREZfcmVxQ3VycmVudCA9PSByZXF1ZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3JlcUN1cnJlbnQgPSBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgRlRERl9SRUxfTVNHX0JVRkZFUihyZXF1ZXN0KTsKKyAgICAgICAgRlRERl9SQ1ZfTVNHKChGVERGX01zZ0J1ZmZlciAqKSBjb21tU3RhdHVzKTsKKyAgICAgICAgLyogQ2hlY2sgZm9yIG9ycGhhbiByZXNwb25zZS4gKi8KKyNpZiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTworICAgICAgICBGVERGX2ZwRnNtQ2xlYXJQZW5kaW5nKCk7CisjZW5kaWYgLyogRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8gKi8KKyAgICAgICAgRlRERl9wcm9jZXNzTmV4dFJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICBGVERGX1JDVl9NU0coKEZUREZfTXNnQnVmZmVyICopIGNvbW1TdGF0dXMpOworfQorI2VuZGlmIC8qIEZUREZfUEhZX0FQSSAqLworCisjaWZuZGVmIEZUREZfTElURQorRlRERl9PY3RldCAqRlRERl9hZGRGcmFtZUhlYWRlcihGVERGX09jdGV0ICAgICAgICp0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9GcmFtZUhlYWRlciAqZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRGF0YUxlbmd0aCAgIG1zZHVMZW5ndGgpCit7CisgICAgdWludDhfdCAgICAgICAgICBmcmFtZVZlcnNpb247CisgICAgdWludDhfdCAgICAgICAgICBsb25nRnJhbWVDb250cm9sID0gMHgwMDsKKyAgICBGVERGX0Jvb2xlYW4gICAgIHBhbklkQ29tcHJlc3Npb24gPSBGVERGX0ZBTFNFOworICAgIEZUREZfQml0bWFwOCAgICAgb3B0aW9ucyAgICAgICAgICA9IGZyYW1lSGVhZGVyLT5vcHRpb25zOworICAgIEZUREZfQm9vbGVhbiAgICAgc2VjdXJlICAgICAgICAgICA9IG9wdGlvbnMgJiBGVERGX09QVF9TRUNVUklUWV9FTkFCTEVEOworICAgIEZUREZfQm9vbGVhbiAgICAgZnJhbWVQZW5kaW5nICAgICA9IG9wdGlvbnMgJiBGVERGX09QVF9GUkFNRV9QRU5ESU5HOworICAgIEZUREZfQm9vbGVhbiAgICAgYWNrVFggICAgICAgICAgICA9IG9wdGlvbnMgJiBGVERGX09QVF9BQ0tfUkVRVUVTVEVEOworICAgIEZUREZfQm9vbGVhbiAgICAgcGFuSWRQcmVzZW50ICAgICA9IG9wdGlvbnMgJiBGVERGX09QVF9QQU5fSURfUFJFU0VOVDsKKyAgICBGVERGX0Jvb2xlYW4gICAgIHNlcU5yU3VwcHJlc3NlZCAgPSBvcHRpb25zICYgRlRERl9PUFRfU0VRX05SX1NVUFBSRVNTRUQ7CisgICAgRlRERl9Cb29sZWFuICAgICBpZXNJbmNsdWRlZCAgICAgID0gb3B0aW9ucyAmIEZUREZfT1BUX0lFU19QUkVTRU5UOworICAgIEZUREZfRnJhbWVUeXBlICAgZnJhbWVUeXBlICAgICAgICA9IGZyYW1lSGVhZGVyLT5mcmFtZVR5cGU7CisgICAgRlRERl9BZGRyZXNzTW9kZSBkc3RBZGRyTW9kZSAgICAgID0gZnJhbWVIZWFkZXItPmRzdEFkZHJNb2RlOworICAgIEZUREZfQWRkcmVzc01vZGUgc3JjQWRkck1vZGUgICAgICA9IGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZTsKKyAgICBGVERGX1BBTklkICAgICAgIGRzdFBBTklkICAgICAgICAgPSBmcmFtZUhlYWRlci0+ZHN0UEFOSWQ7CisKKyAgICBpZiAoZnJhbWVUeXBlID09IEZUREZfTVVMVElQVVJQT1NFX0ZSQU1FKQorICAgIHsKKyAgICAgICAgaWYgKG9wdGlvbnMgJiAoRlRERl9PUFRfU0VDVVJJVFlfRU5BQkxFRCB8IEZUREZfT1BUX0FDS19SRVFVRVNURUQgfCBGVERGX09QVF9QQU5fSURfUFJFU0VOVCB8CisgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT1BUX0lFU19QUkVTRU5UIHwgRlRERl9PUFRfU0VRX05SX1NVUFBSRVNTRUQgfCBGVERGX09QVF9GUkFNRV9QRU5ESU5HKSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9uZ0ZyYW1lQ29udHJvbCA9IDB4MDg7CisgICAgICAgIH0KKworICAgICAgICAvLyBGcmFtZSBjb250cm9sIGZpZWxkIGJ5dGUgMQorICAgICAgICAqdHhQdHIrKyA9IDB4MDUgfCBsb25nRnJhbWVDb250cm9sIHwgZHN0QWRkck1vZGUgPDwgNCB8IHNyY0FkZHJNb2RlIDw8IDY7CisKKyAgICAgICAgaWYgKGxvbmdGcmFtZUNvbnRyb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZyYW1lIGNvbnRyb2wgZmllbGQgYnl0ZSAyCisgICAgICAgICAgICAqdHhQdHIrKyA9CisgICAgICAgICAgICAgICAgKHBhbklkUHJlc2VudCA/IDB4MDEgOiAweDAwKSB8CisgICAgICAgICAgICAgICAgKHNlY3VyZSA/IDB4MDIgOiAweDAwKSB8CisgICAgICAgICAgICAgICAgKHNlcU5yU3VwcHJlc3NlZCA/IDB4MDQgOiAweDAwKSB8CisgICAgICAgICAgICAgICAgKGZyYW1lUGVuZGluZyA/IDB4MDggOiAweDAwKSB8CisgICAgICAgICAgICAgICAgKGFja1RYID8gMHg0MCA6IDB4MDApIHwKKyAgICAgICAgICAgICAgICAoaWVzSW5jbHVkZWQgPyAweDgwIDogMHgwMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gICAgICAgIGlmICggcGFuSWRQcmVzZW50IHx8IGllc0luY2x1ZGVkIHx8IHNlcU5yU3VwcHJlc3NlZCB8fCAoIG9wdGlvbnMgJiBGVERGX09QVF9FTkhBTkNFRCApIHx8IEZUREZfcGliLnRzY2hFbmFibGVkICkKKyAgICAgICAgaWYgKHBhbklkUHJlc2VudCB8fCBpZXNJbmNsdWRlZCB8fCBzZXFOclN1cHByZXNzZWQgfHwgKG9wdGlvbnMgJiBGVERGX09QVF9FTkhBTkNFRCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZyYW1lVmVyc2lvbiA9IDBiMTA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2VjdXJlIHx8CisgICAgICAgICAgICAgICAgbXNkdUxlbmd0aCA+IEZUREZfTUFYX01BQ19TQUZFX1BBWUxPQURfU0laRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmFtZVZlcnNpb24gPSAwYjAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyYW1lVmVyc2lvbiA9IDBiMDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZnJhbWVWZXJzaW9uIDwgMGIxMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRzdEFkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUyAmJgorICAgICAgICAgICAgICAgIHNyY0FkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUyAmJgorICAgICAgICAgICAgICAgIGRzdFBBTklkID09IGZyYW1lSGVhZGVyLT5zcmNQQU5JZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYW5JZENvbXByZXNzaW9uID0gRlRERl9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcGFuSWRDb21wcmVzc2lvbiA9IHBhbklkUHJlc2VudDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZyYW1lIGNvbnRyb2wgZmllbGQgYnl0ZSAxCisgICAgICAgICp0eFB0cisrID0KKyAgICAgICAgICAgIChmcmFtZVR5cGUgJiAweDcpIHwKKyAgICAgICAgICAgIChzZWN1cmUgPyAweDA4IDogMHgwMCkgfAorICAgICAgICAgICAgKGZyYW1lUGVuZGluZyA/IDB4MTAgOiAweDAwKSB8CisgICAgICAgICAgICAoYWNrVFggPyAweDIwIDogMHgwMCkgfAorICAgICAgICAgICAgKHBhbklkQ29tcHJlc3Npb24gPyAweDQwIDogMHgwMCk7CisKKyAgICAgICAgLy8gRnJhbWUgY29udHJvbCBmaWVsZCBieXRlIDIKKyAgICAgICAgKnR4UHRyKysgPQorICAgICAgICAgICAgKHNlcU5yU3VwcHJlc3NlZCA/IDB4MDEgOiAweDAwKSB8CisgICAgICAgICAgICAoaWVzSW5jbHVkZWQgPyAweDAyIDogMHgwMCkgfAorICAgICAgICAgICAgZHN0QWRkck1vZGUgPDwgMiB8CisgICAgICAgICAgICBmcmFtZVZlcnNpb24gPDwgNCB8CisgICAgICAgICAgICBzcmNBZGRyTW9kZSA8PCA2OworICAgIH0KKworICAgIGlmICghc2VxTnJTdXBwcmVzc2VkKQorICAgIHsKKyAgICAgICAgKnR4UHRyKysgPSBmcmFtZUhlYWRlci0+U047CisgICAgfQorCisgICAgRlRERl9Cb29sZWFuIGFkZERzdFBBTklkID0gRlRERl9GQUxTRTsKKworICAgIGlmIChmcmFtZVR5cGUgPT0gRlRERl9NVUxUSVBVUlBPU0VfRlJBTUUpCisgICAgeworICAgICAgICBpZiAocGFuSWRQcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBhZGREc3RQQU5JZCA9IEZUREZfVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoZnJhbWVWZXJzaW9uIDwgMGIxMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRzdEFkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhZGREc3RQQU5JZCA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFNlZSBUYWJsZSAyYSAiUEFOIElEIENvbXByZXNzaW9uIiBvZiBJRUVFIDgwMi4xNS40LTIwMTEgZm9yIG1vcmUgZGV0YWlscworICAgICAgICAgICAgaWYgKChzcmNBZGRyTW9kZSA9PSBGVERGX05PX0FERFJFU1MgJiYgZHN0QWRkck1vZGUgPT0gRlRERl9OT19BRERSRVNTICYmIHBhbklkQ29tcHJlc3Npb24pIHx8CisgICAgICAgICAgICAgICAgKHNyY0FkZHJNb2RlID09IEZUREZfTk9fQUREUkVTUyAmJiBkc3RBZGRyTW9kZSAhPSBGVERGX05PX0FERFJFU1MgJiYgIXBhbklkQ29tcHJlc3Npb24pIHx8CisgICAgICAgICAgICAgICAgKHNyY0FkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUyAmJiBkc3RBZGRyTW9kZSAhPSBGVERGX05PX0FERFJFU1MgJiYgIXBhbklkQ29tcHJlc3Npb24pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZERzdFBBTklkID0gRlRERl9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFkZERzdFBBTklkKQorICAgIHsKKyAgICAgICAgRlRERl9PY3RldCAqUEFOSWRQdHIgPSAoRlRERl9PY3RldCAqKSZkc3RQQU5JZDsKKworICAgICAgICAqdHhQdHIrKyA9ICpQQU5JZFB0cisrOworICAgICAgICAqdHhQdHIrKyA9ICpQQU5JZFB0cjsKKyAgICB9CisKKyAgICBGVERGX0FkZHJlc3MgZHN0QWRkciA9IGZyYW1lSGVhZGVyLT5kc3RBZGRyOworCisgICAgaWYgKGRzdEFkZHJNb2RlID09IEZUREZfU0lNUExFX0FERFJFU1MpCisgICAgeworICAgICAgICAqdHhQdHIrKyA9IGRzdEFkZHIuc2ltcGxlQWRkcmVzczsKKyAgICB9CisgICAgZWxzZSBpZiAoZHN0QWRkck1vZGUgPT0gRlRERl9TSE9SVF9BRERSRVNTKQorICAgIHsKKyAgICAgICAgRlRERl9PY3RldCAqc2hvcnRBZGRyZXNzUHRyID0gKEZUREZfT2N0ZXQgKikmZHN0QWRkci5zaG9ydEFkZHJlc3M7CisKKyAgICAgICAgKnR4UHRyKysgPSAqc2hvcnRBZGRyZXNzUHRyKys7CisgICAgICAgICp0eFB0cisrID0gKnNob3J0QWRkcmVzc1B0cjsKKyAgICB9CisgICAgZWxzZSBpZiAoZHN0QWRkck1vZGUgPT0gRlRERl9FWFRFTkRFRF9BRERSRVNTKQorICAgIHsKKyAgICAgICAgRlRERl9PY3RldCAqZXh0QWRkcmVzc1B0ciA9IChGVERGX09jdGV0ICopJmRzdEFkZHIuZXh0QWRkcmVzczsKKyAgICAgICAgaW50ICAgICAgICAgbjsKKworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgODsgbisrKQorICAgICAgICB7CisgICAgICAgICAgICAqdHhQdHIrKyA9ICpleHRBZGRyZXNzUHRyKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBGVERGX0Jvb2xlYW4gYWRkU3JjUEFOSWQgPSBGVERGX0ZBTFNFOworCisgICAgaWYgKGZyYW1lVHlwZSAhPSBGVERGX01VTFRJUFVSUE9TRV9GUkFNRSkKKyAgICB7CisgICAgICAgIGlmIChmcmFtZVZlcnNpb24gPCAwYjEwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3JjQWRkck1vZGUgIT0gRlRERl9OT19BRERSRVNTICYmICFwYW5JZENvbXByZXNzaW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZFNyY1BBTklkID0gRlRERl9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2VlIFRhYmxlIDJhICJQQU4gSUQgQ29tcHJlc3Npb24iIG9mIElFRUUgODAyLjE1LjQtMjAxMSBmb3IgbW9yZSBkZXRhaWxzCisgICAgICAgICAgICBpZiAoc3JjQWRkck1vZGUgIT0gRlRERl9OT19BRERSRVNTICYmIGRzdEFkZHJNb2RlID09IEZUREZfTk9fQUREUkVTUyAmJiAhcGFuSWRDb21wcmVzc2lvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhZGRTcmNQQU5JZCA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhZGRTcmNQQU5JZCkKKyAgICB7CisgICAgICAgIEZUREZfT2N0ZXQgKlBBTklkUHRyID0gKEZUREZfT2N0ZXQgKikmZnJhbWVIZWFkZXItPnNyY1BBTklkOworCisgICAgICAgICp0eFB0cisrID0gKlBBTklkUHRyKys7CisgICAgICAgICp0eFB0cisrID0gKlBBTklkUHRyOworICAgIH0KKworICAgIGlmIChzcmNBZGRyTW9kZSA9PSBGVERGX1NJTVBMRV9BRERSRVNTKQorICAgIHsKKyAgICAgICAgKnR4UHRyKysgPSBGVERGX3BpYi5zaW1wbGVBZGRyZXNzOworICAgIH0KKyAgICBlbHNlIGlmIChzcmNBZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgeworICAgICAgICBGVERGX09jdGV0ICpzaG9ydEFkZHJlc3NQdHIgPSAoRlRERl9PY3RldCAqKSZGVERGX3BpYi5zaG9ydEFkZHJlc3M7CisKKyAgICAgICAgKnR4UHRyKysgPSAqc2hvcnRBZGRyZXNzUHRyKys7CisgICAgICAgICp0eFB0cisrID0gKnNob3J0QWRkcmVzc1B0cjsKKyAgICB9CisgICAgZWxzZSBpZiAoc3JjQWRkck1vZGUgPT0gRlRERl9FWFRFTkRFRF9BRERSRVNTKQorICAgIHsKKyAgICAgICAgRlRERl9PY3RldCAqZXh0QWRkcmVzc1B0ciA9IChGVERGX09jdGV0ICopJkZUREZfcGliLmV4dEFkZHJlc3M7CisgICAgICAgIGludCAgICAgICAgIG47CisKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IDg7IG4rKykKKyAgICAgICAgeworICAgICAgICAgICAgKnR4UHRyKysgPSAqZXh0QWRkcmVzc1B0cisrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHR4UHRyOworfQorI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworRlRERl9QVEkgRlRERl9nZXRSeFB0aSh2b2lkKQoreworI2lmIEZUREZfVVNFX1BUSQorICAgIEZUREZfUFRJIHJ4X3B0aTsKKyAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisgICAgcnhfcHRpID0gRlRERl9SeFB0aTsKKyAgICBGVERGX2V4aXRDcml0aWNhbCgpOworICAgIHJldHVybiByeF9wdGk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKyNpZmRlZiBGVERGX1BIWV9BUEkKK3ZvaWQgRlRERl9yeEVuYWJsZShGVERGX1RpbWUgcnhPbkR1cmF0aW9uKQoreworI2lmIGRnX2NvbmZpZ0NPRVhfRU5BQkxFX0NPTkZJRworICAgIC8qIFdlIGRvIG5vdCBmb3JjZSBkZWNpc2lvbiBoZXJlLiBJdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbWFkZSB3aGVuIEZUREYgYmVnaW5zCisgICAgICogdHJhbnNhY3Rpb24uCisgICAgICovCisgICAgaHdfY29leF91cGRhdGVfZnRkZl9wdGkoKGh3X2NvZXhfcHRpX3QpIEZUREZfZ2V0UnhQdGkoKSwgTlVMTCwgZmFsc2UpOworI2VuZGlmCisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9SWEVOQUJMRSwgMCk7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9SWE9ORFVSQVRJT04sIHJ4T25EdXJhdGlvbik7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9SWEVOQUJMRSwgMSk7Cit9CisjZWxzZQordm9pZCBGVERGX3Byb2Nlc3NSeEVuYWJsZVJlcXVlc3QoRlRERl9SeEVuYWJsZVJlcXVlc3QgKnJ4RW5hYmxlUmVxdWVzdCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1JYRU5BQkxFLCAwKTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1JYT05EVVJBVElPTiwgcnhFbmFibGVSZXF1ZXN0LT5yeE9uRHVyYXRpb24pOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUlhFTkFCTEUsIDEpOworCisgICAgRlRERl9SeEVuYWJsZUNvbmZpcm0gKnJ4RW5hYmxlQ29uZmlybSA9CisgICAgICAgIChGVERGX1J4RW5hYmxlQ29uZmlybSAqKSBGVERGX0dFVF9NU0dfQlVGRkVSKHNpemVvZihGVERGX1J4RW5hYmxlQ29uZmlybSkpOworCisgICAgcnhFbmFibGVDb25maXJtLT5tc2dJZCAgPSBGVERGX1JYX0VOQUJMRV9DT05GSVJNOworICAgIHJ4RW5hYmxlQ29uZmlybS0+c3RhdHVzID0gRlRERl9TVUNDRVNTOworCisgICAgRlRERl9SRUxfTVNHX0JVRkZFUigoRlRERl9Nc2dCdWZmZXIgKikgcnhFbmFibGVSZXF1ZXN0KTsKKyAgICBGVERGX1JDVl9NU0coKEZUREZfTXNnQnVmZmVyICopIHJ4RW5hYmxlQ29uZmlybSk7Cit9CisjZW5kaWYgLyogRlRERl9QSFlfQVBJICovCisKK0ZUREZfT2N0ZXQgKkZUREZfZ2V0RnJhbWVIZWFkZXIoRlRERl9PY3RldCAgICAgICAqcnhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRnJhbWVIZWFkZXIgKmZyYW1lSGVhZGVyKQoreworICAgIEZUREZfRnJhbWVUeXBlICAgZnJhbWVUeXBlICAgID0gKnJ4QnVmZmVyICYgMHgwNzsKKyAgICB1aW50OF90ICAgICAgICAgIGZyYW1lVmVyc2lvbiA9IDA7CisgICAgRlRERl9CaXRtYXA4ICAgICBvcHRpb25zICAgICAgPSAwOworICAgIEZUREZfQWRkcmVzc01vZGUgZHN0QWRkck1vZGU7CisgICAgRlRERl9BZGRyZXNzTW9kZSBzcmNBZGRyTW9kZTsKKyAgICBGVERGX0Jvb2xlYW4gICAgIHBhbklkQ29tcHJlc3Npb24gPSBGVERGX0ZBTFNFOworICAgIEZUREZfQm9vbGVhbiAgICAgcGFuSWRQcmVzZW50ICAgICA9IEZUREZfRkFMU0U7CisKKyAgICBpZiAoZnJhbWVUeXBlID09IEZUREZfTVVMVElQVVJQT1NFX0ZSQU1FKQorICAgIHsKKyAgICAgICAgZHN0QWRkck1vZGUgPSAoKnJ4QnVmZmVyICYgMHgzMCkgPj4gNDsKKyAgICAgICAgc3JjQWRkck1vZGUgPSAoKnJ4QnVmZmVyICYgMHhjMCkgPj4gNjsKKworICAgICAgICAvLyBDaGVjayBMb25nIEZyYW1lIENvbnRyb2wKKyAgICAgICAgaWYgKCpyeEJ1ZmZlciAmIDB4MDgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ4QnVmZmVyKys7CisKKyAgICAgICAgICAgIHBhbklkUHJlc2VudCA9ICpyeEJ1ZmZlciAmIDB4MDE7CisKKyAgICAgICAgICAgIGlmICgqcnhCdWZmZXIgJiAweDAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gRlRERl9PUFRfU0VDVVJJVFlfRU5BQkxFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCpyeEJ1ZmZlciAmIDB4MDQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBGVERGX09QVF9TRVFfTlJfU1VQUFJFU1NFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCpyeEJ1ZmZlciAmIDB4MDgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBGVERGX09QVF9GUkFNRV9QRU5ESU5HOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKnJ4QnVmZmVyICYgMHg0MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEZUREZfT1BUX0FDS19SRVFVRVNURUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgqcnhCdWZmZXIgJiAweDgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gRlRERl9PUFRfSUVTX1BSRVNFTlQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZyYW1lVmVyc2lvbiAgICAgICAgICAgICAgPSAwOworCisgICAgICAgICAgICBmcmFtZUhlYWRlci0+ZnJhbWVWZXJzaW9uID0gRlRERl9GUkFNRV9WRVJTSU9OX0U7CisKKyAgICAgICAgICAgIHJ4QnVmZmVyKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByeEJ1ZmZlcisrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICgqcnhCdWZmZXIgJiAweDA4KQorICAgICAgICB7CisgICAgICAgICAgICBvcHRpb25zIHw9IEZUREZfT1BUX1NFQ1VSSVRZX0VOQUJMRUQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKnJ4QnVmZmVyICYgMHgxMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0aW9ucyB8PSBGVERGX09QVF9GUkFNRV9QRU5ESU5HOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCpyeEJ1ZmZlciAmIDB4MjApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gRlRERl9PUFRfQUNLX1JFUVVFU1RFRDsKKyAgICAgICAgfQorCisgICAgICAgIHBhbklkQ29tcHJlc3Npb24gPSAqcnhCdWZmZXIgJiAweDQwOworCisgICAgICAgIHJ4QnVmZmVyKys7CisKKyAgICAgICAgZnJhbWVWZXJzaW9uID0gKCpyeEJ1ZmZlciAmIDB4MzApID4+IDQ7CisKKyAgICAgICAgaWYgKGZyYW1lVmVyc2lvbiA9PSAweDAyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKnJ4QnVmZmVyICYgMHgwMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEZUREZfT1BUX1NFUV9OUl9TVVBQUkVTU0VEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKnJ4QnVmZmVyICYgMHgwMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEZUREZfT1BUX0lFU19QUkVTRU5UOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmcmFtZUhlYWRlci0+ZnJhbWVWZXJzaW9uID0gRlRERl9GUkFNRV9WRVJTSU9OX0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZnJhbWVWZXJzaW9uID09IDB4MDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5mcmFtZVZlcnNpb24gPSBGVERGX0ZSQU1FX1ZFUlNJT05fMjAxMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmcmFtZVZlcnNpb24gPT0gMHgwMCkKKyAgICAgICAgeworICAgICAgICAgICAgZnJhbWVIZWFkZXItPmZyYW1lVmVyc2lvbiA9IEZUREZfRlJBTUVfVkVSU0lPTl8yMDAzOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZnJhbWVIZWFkZXItPmZyYW1lVmVyc2lvbiA9IEZUREZfRlJBTUVfVkVSU0lPTl9OT1RfU1VQUE9SVEVEOworICAgICAgICAgICAgcmV0dXJuIHJ4QnVmZmVyOworICAgICAgICB9CisKKyAgICAgICAgZHN0QWRkck1vZGUgPSAoKnJ4QnVmZmVyICYgMHgwYykgPj4gMjsKKyAgICAgICAgc3JjQWRkck1vZGUgPSAoKnJ4QnVmZmVyICYgMHhjMCkgPj4gNjsKKworICAgICAgICByeEJ1ZmZlcisrOworICAgIH0KKworICAgIGlmICgob3B0aW9ucyAmIEZUREZfT1BUX1NFUV9OUl9TVVBQUkVTU0VEKSA9PSAwKQorICAgIHsKKyAgICAgICAgZnJhbWVIZWFkZXItPlNOID0gKnJ4QnVmZmVyKys7CisgICAgfQorCisgICAgRlRERl9Cb29sZWFuIGhhc0RzdFBBTklkID0gRlRERl9GQUxTRTsKKworICAgIGlmIChmcmFtZVR5cGUgPT0gRlRERl9NVUxUSVBVUlBPU0VfRlJBTUUpCisgICAgeworICAgICAgICBoYXNEc3RQQU5JZCA9IHBhbklkUHJlc2VudDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZyYW1lVmVyc2lvbiA8IDB4MDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChkc3RBZGRyTW9kZSAhPSBGVERGX05PX0FERFJFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFzRHN0UEFOSWQgPSBGVERGX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHNyY0FkZHJNb2RlID09IEZUREZfTk9fQUREUkVTUyAmJiBkc3RBZGRyTW9kZSA9PSBGVERGX05PX0FERFJFU1MgJiYgcGFuSWRDb21wcmVzc2lvbikgfHwKKyAgICAgICAgICAgICAgICAoc3JjQWRkck1vZGUgPT0gRlRERl9OT19BRERSRVNTICYmIGRzdEFkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUyAmJiAhcGFuSWRDb21wcmVzc2lvbikgfHwKKyAgICAgICAgICAgICAgICAoc3JjQWRkck1vZGUgIT0gRlRERl9OT19BRERSRVNTICYmIGRzdEFkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUyAmJiAhcGFuSWRDb21wcmVzc2lvbikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFzRHN0UEFOSWQgPSBGVERGX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGFzRHN0UEFOSWQpCisgICAgeworICAgICAgICBGVERGX09jdGV0ICpQQU5JZFB0ciA9IChGVERGX09jdGV0ICopICZmcmFtZUhlYWRlci0+ZHN0UEFOSWQ7CisKKyAgICAgICAgKlBBTklkUHRyKysgPSAqcnhCdWZmZXIrKzsKKyAgICAgICAgKlBBTklkUHRyICAgPSAqcnhCdWZmZXIrKzsKKyAgICB9CisKKyAgICBpZiAoZHN0QWRkck1vZGUgPT0gRlRERl9TSU1QTEVfQUREUkVTUykKKyAgICB7CisgICAgICAgIGZyYW1lSGVhZGVyLT5kc3RBZGRyLnNpbXBsZUFkZHJlc3MgPSAqcnhCdWZmZXIrKzsKKyAgICB9CisgICAgZWxzZSBpZiAoZHN0QWRkck1vZGUgPT0gRlRERl9TSE9SVF9BRERSRVNTKQorICAgIHsKKyAgICAgICAgRlRERl9PY3RldCAqc2hvcnRBZGRyZXNzUHRyID0gKEZUREZfT2N0ZXQgKikmZnJhbWVIZWFkZXItPmRzdEFkZHIuc2hvcnRBZGRyZXNzOworCisgICAgICAgICpzaG9ydEFkZHJlc3NQdHIrKyA9ICpyeEJ1ZmZlcisrOworICAgICAgICAqc2hvcnRBZGRyZXNzUHRyICAgPSAqcnhCdWZmZXIrKzsKKyAgICB9CisgICAgZWxzZSBpZiAoZHN0QWRkck1vZGUgPT0gRlRERl9FWFRFTkRFRF9BRERSRVNTKQorICAgIHsKKyAgICAgICAgRlRERl9PY3RldCAqZXh0QWRkcmVzc1B0ciA9IChGVERGX09jdGV0ICopJmZyYW1lSGVhZGVyLT5kc3RBZGRyLmV4dEFkZHJlc3M7CisgICAgICAgIGludCAgICAgICAgIG47CisKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IDg7IG4rKykKKyAgICAgICAgeworICAgICAgICAgICAgKmV4dEFkZHJlc3NQdHIrKyA9ICpyeEJ1ZmZlcisrOworICAgICAgICB9CisgICAgfQorCisgICAgRlRERl9Cb29sZWFuIGhhc1NyY1BBTklkID0gRlRERl9GQUxTRTsKKworICAgIGlmIChmcmFtZVZlcnNpb24gPCAweDAyICYmIGZyYW1lVHlwZSAhPSBGVERGX01VTFRJUFVSUE9TRV9GUkFNRSkKKyAgICB7CisgICAgICAgIGlmIChzcmNBZGRyTW9kZSAhPSBGVERGX05PX0FERFJFU1MgJiYgIXBhbklkQ29tcHJlc3Npb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhc1NyY1BBTklkID0gRlRERl9UUlVFOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChzcmNBZGRyTW9kZSAhPSBGVERGX05PX0FERFJFU1MgJiYgZHN0QWRkck1vZGUgPT0gRlRERl9OT19BRERSRVNTICYmICFwYW5JZENvbXByZXNzaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBoYXNTcmNQQU5JZCA9IEZUREZfVFJVRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChoYXNTcmNQQU5JZCkKKyAgICB7CisgICAgICAgIEZUREZfT2N0ZXQgKlBBTklkUHRyID0gKEZUREZfT2N0ZXQgKikgJmZyYW1lSGVhZGVyLT5zcmNQQU5JZDsKKworICAgICAgICAqUEFOSWRQdHIrKyA9ICpyeEJ1ZmZlcisrOworICAgICAgICAqUEFOSWRQdHIgICA9ICpyeEJ1ZmZlcisrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmcmFtZUhlYWRlci0+c3JjUEFOSWQgPSBmcmFtZUhlYWRlci0+ZHN0UEFOSWQ7CisgICAgfQorCisgICAgaWYgKHNyY0FkZHJNb2RlID09IEZUREZfU0lNUExFX0FERFJFU1MpCisgICAgeworICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkci5zaW1wbGVBZGRyZXNzID0gKnJ4QnVmZmVyKys7CisgICAgfQorICAgIGVsc2UgaWYgKHNyY0FkZHJNb2RlID09IEZUREZfU0hPUlRfQUREUkVTUykKKyAgICB7CisgICAgICAgIEZUREZfT2N0ZXQgKnNob3J0QWRkcmVzc1B0ciA9IChGVERGX09jdGV0ICopJmZyYW1lSGVhZGVyLT5zcmNBZGRyLnNob3J0QWRkcmVzczsKKworICAgICAgICAqc2hvcnRBZGRyZXNzUHRyKysgPSAqcnhCdWZmZXIrKzsKKyAgICAgICAgKnNob3J0QWRkcmVzc1B0ciAgID0gKnJ4QnVmZmVyKys7CisgICAgfQorICAgIGVsc2UgaWYgKHNyY0FkZHJNb2RlID09IEZUREZfRVhURU5ERURfQUREUkVTUykKKyAgICB7CisgICAgICAgIEZUREZfT2N0ZXQgKmV4dEFkZHJlc3NQdHIgPSAoRlRERl9PY3RldCAqKSZmcmFtZUhlYWRlci0+c3JjQWRkci5leHRBZGRyZXNzOworICAgICAgICBpbnQgICAgICAgICBuOworCisgICAgICAgIGZvciAobiA9IDA7IG4gPCA4OyBuKyspCisgICAgICAgIHsKKyAgICAgICAgICAgICpleHRBZGRyZXNzUHRyKysgPSAqcnhCdWZmZXIrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lSGVhZGVyLT5mcmFtZVR5cGUgICA9IGZyYW1lVHlwZTsKKyAgICBmcmFtZUhlYWRlci0+b3B0aW9ucyAgICAgPSBvcHRpb25zOworICAgIGZyYW1lSGVhZGVyLT5kc3RBZGRyTW9kZSA9IGRzdEFkZHJNb2RlOworICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9IHNyY0FkZHJNb2RlOworCisgICAgcmV0dXJuIHJ4QnVmZmVyOworfQorCisjaWZuZGVmIEZUREZfTElURQordm9pZCBGVERGX3Byb2Nlc3NOZXh0UmVxdWVzdCh2b2lkKQoreworI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgIGlmIChGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICB7CisgICAgICAgIEZUREZfTXNnQnVmZmVyICpyZXF1ZXN0ID0gRlRERl90c2NoR2V0UGVuZGluZyhGVERGX3RzY2hTbG90TGluay0+cmVxdWVzdCk7CisKKyAgICAgICAgRlRERl90c2NoU2xvdExpbmstPnJlcXVlc3QgPSBOVUxMOworCisgICAgICAgIEZUREZfc2NoZWR1bGVUc2NoKHJlcXVlc3QpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKworICAgIHdoaWxlIChGVERGX3JlcUN1cnJlbnQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEZUREZfTXNnQnVmZmVyICpyZXF1ZXN0ID0gRlRERl9kZXF1ZXVlUmVxVGFpbCgmRlRERl9yZXFRdWV1ZSk7CisKKyAgICAgICAgaWYgKHJlcXVlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKK3N0YXRpYyB2b2lkIHByb2Nlc3NSeEZyYW1lKGludCByZWFkQnVmKQoreworICAgIHN0YXRpYyBGVERGX1BBTkRlc2NyaXB0b3IgUEFORGVzY3JpcHRvcjsKKyAgICBzdGF0aWMgRlRERl9BZGRyZXNzICAgICAgIHBlbmRBZGRyTGlzdFsgNyBdOworCisgICAgRlRERl9GcmFtZUhlYWRlciAgICAgICAgICpmcmFtZUhlYWRlciAgICA9ICZGVERGX2ZoOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICBGVERGX1NlY3VyaXR5SGVhZGVyICAgICAgKnNlY3VyaXR5SGVhZGVyID0gJkZUREZfc2g7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICBwZW5kQWRkclNwZWMgICA9IDA7CisKKyAgICBGVERGX09jdGV0ICAgICAgICAgICAgICAgKnJ4QnVmZmVyICAgICAgID0KKyAgICAgICAgKEZUREZfT2N0ZXQgKikoSU5EX1JfRlRERl9SWF9SQU1fUlhfRklGTyArIChpbnRwdHJfdCkgcmVhZEJ1ZiAqIEZUREZfQlVGRkVSX0xFTkdUSCk7CisgICAgRlRERl9PY3RldCAgICAgICAgICAgICAgICpyeFB0ciAgICAgICAgICA9IHJ4QnVmZmVyOworICAgIEZUREZfRGF0YUxlbmd0aCAgICAgICAgICAgZnJhbWVMZW4gICAgICAgPSAqcnhQdHIrKzsKKworICAgIGlmIChGVERGX3RyYW5zcGFyZW50TW9kZSkKKyAgICB7CisgICAgICAgIGlmIChGVERGX3BpYi5tZXRyaWNzRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLlJYU3VjY2Vzc0NvdW50Kys7CisgICAgICAgIH0KKworICAgICAgICB1aW50MzJfdCAgICAgICAgICAgcnhNZXRhMSA9ICpGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fUlhfTUVUQV8xLCAoaW50cHRyX3QpcmVhZEJ1Zik7CisgICAgICAgIEZUREZfTGlua1F1YWxpdHkgICBscWkgICAgID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChSRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SLCByZWFkQnVmKTsKKyAgICAgICAgRlRERl9CaXRtYXAzMiAgICAgIHN0YXR1cyAgPSBGVERGX1RSQU5TUEFSRU5UX1JDVl9TVUNDRVNTRlVMOworCisgICAgICAgIHN0YXR1cyB8PSByeE1ldGExICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VSUk9SID8gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfQ1JDX0VSUk9SIDogMDsKKyAgICAgICAgc3RhdHVzIHw9IHJ4TWV0YTEgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SID8gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfUkVTX0ZSQU1FVFlQRSA6IDA7CisgICAgICAgIHN0YXR1cyB8PSByeE1ldGExICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVkVSU0lPTl9FUlJPUiA/IEZUREZfVFJBTlNQQVJFTlRfUkNWX1JFU19GUkFNRV9WRVJTSU9OIDogMDsKKyAgICAgICAgc3RhdHVzIHw9IHJ4TWV0YTEgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fRFBBTklEX0VSUk9SID8gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfVU5FWFBfRFNUX1BBTl9JRCA6IDA7CisgICAgICAgIHN0YXR1cyB8PSByeE1ldGExICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0RBRERSX0VSUk9SID8gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfVU5FWFBfRFNUX0FERFIgOiAwOworCisgICAgICAgIEZUREZfUkNWX0ZSQU1FX1RSQU5TUEFSRU5UKGZyYW1lTGVuLCByeFB0ciwgc3RhdHVzLCBscWkpOworCisjaWYgRlRERl9UUkFOU1BBUkVOVF9VU0VfV0FJVF9GT1JfQUNLCisKKyAgICAgICAgaWYgKChGVERGX3RyYW5zcGFyZW50TW9kZU9wdGlvbnMgJiBGVERGX1RSQU5TUEFSRU5UX1dBSVRfRk9SX0FDSykpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfZ2V0RnJhbWVIZWFkZXIocnhQdHIsIGZyYW1lSGVhZGVyKTsKKworICAgICAgICAgICAgaWYgKGZyYW1lSGVhZGVyLT5mcmFtZVR5cGUgPT0gRlRERl9BQ0tOT1dMRURHRU1FTlRfRlJBTUUgJiYKKyAgICAgICAgICAgICAgICAoc3RhdHVzID09IEZUREZfVFJBTlNQQVJFTlRfUkNWX1NVQ0NFU1NGVUwpKQorICAgICAgICAgICAgeworCisjaWZuZGVmIEZUREZfUEhZX0FQSQorICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eEZsYWdTID0gRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChPTl9PRkZfUkVHTUFQX1RYX0ZMQUdfUywgRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoKnR4RmxhZ1MgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TVEFUKQorICAgICAgICAgICAgICAgIHsgfQorCisgICAgICAgICAgICAgICAgLy8gSXQgaXMgcmVxdWlyZWQgdG8gY2FsbCBGVERGX3Byb2Nlc3NUeEV2ZW50IGhlcmUgYmVjYXVzZSBhbiBSWCBhY2sgZ2VuZXJhdGVzIHR3byBldmVudHMKKyAgICAgICAgICAgICAgICAvLyBUaGUgUlggZXZlbnQgaXMgcmFpc2VkIGZpcnN0LCB0aGVuIGFmdGVyIGFuIElGUyB0aGUgVFggZXZlbnQgaXMgcmFpc2VkLiBIb3dldmVyLAorICAgICAgICAgICAgICAgIC8vIHRoZSBGVERGX3Byb2Nlc3NOZXh0UmVxdWVzdCByZXF1aXJlcyB0aGF0IGJvdGggZXZlbnRzIGhhdmUgYmVlbiBoYW5kbGVkLgorICAgICAgICAgICAgICAgIEZUREZfcHJvY2Vzc1R4RXZlbnQoKTsKKyNlbmRpZiAvKiAhRlRERl9QSFlfQVBJICovCisKKyAgICAgICAgICAgICAgICBGVERGX1NOIFNOID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChSRVRFTlRJT05fUkFNX01BQ1NOLCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworI2lmZGVmIEZUREZfUEhZX0FQSQorICAgICAgICAgICAgICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICAgICAgICAgICAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKworICAgICAgICAgICAgICAgIGlmIChGVERGX3R4SW5Qcm9ncmVzcyAmJgorICAgICAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+U04gPT0gU04pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKyNlbHNlCisKKyAgICAgICAgICAgICAgICBpZiAoRlRERl9yZXFDdXJyZW50ICYmCisgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5TTiA9PSBTTikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEZUREZfVHJhbnNwYXJlbnRSZXF1ZXN0ICp0cmFuc3BhcmVudFJlcXVlc3QgPSAoRlRERl9UcmFuc3BhcmVudFJlcXVlc3QgKikgRlRERl9yZXFDdXJyZW50OworCisgICAgICAgICAgICAgICAgICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisgICAgICAgICAgICAgICAgICAgIEZUREZfcmVxQ3VycmVudCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisgICAgICAgICAgICAgICAgICAgIEZUREZfU0VORF9GUkFNRV9UUkFOU1BBUkVOVF9DT05GSVJNKHRyYW5zcGFyZW50UmVxdWVzdC0+aGFuZGxlLCBGVERGX1RSQU5TUEFSRU5UX1NFTkRfU1VDQ0VTU0ZVTCk7CisKKyAgICAgICAgICAgICAgICAgICAgRlRERl9SRUxfTVNHX0JVRkZFUigoRlRERl9Nc2dCdWZmZXIgKikgdHJhbnNwYXJlbnRSZXF1ZXN0KTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisjZW5kaWYgLyogRlRERl9QSFlfQVBJICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworI2VuZGlmIC8qIEZUREZfVFJBTlNQQVJFTlRfVVNFX1dBSVRfRk9SX0FDSyAqLworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWZuZGVmIEZUREZfTElURQorICAgIHJ4UHRyID0gRlRERl9nZXRGcmFtZUhlYWRlcihyeFB0ciwgZnJhbWVIZWFkZXIpOworCisjaWYgRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX01BTlVBTAorCisgICAgaWYgKGZyYW1lSGVhZGVyLT5vcHRpb25zICYgRlRERl9PUFRfQUNLX1JFUVVFU1RFRCkKKyAgICB7CisgICAgICAgIGludCBuOworICAgICAgICBGVERGX0Jvb2xlYW4gYWRkcmVzc0ZvdW5kID0gRlRERl9GQUxTRTsKKworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9OUl9PRl9SRVFfQlVGRkVSUzsgbisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uYWRkck1vZGUgPT0gZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlICYmCisgICAgICAgICAgICAgICAgRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uUEFOSWQgPT0gZnJhbWVIZWFkZXItPnNyY1BBTklkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgPT0gRlRERl9TSE9SVF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLmFkZHIuc2hvcnRBZGRyZXNzID09CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkci5zaG9ydEFkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NGb3VuZCA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9PSBGVERGX0VYVEVOREVEX0FERFJFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uYWRkci5leHRBZGRyZXNzID09CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkci5leHRBZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzRm91bmQgPSBGVERGX1RSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIHNyY0FkZHJNb2RlCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWRkcmVzc0ZvdW5kKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX2ZwcHJTZXRNb2RlKEZUREZfRkFMU0UsIEZUREZfVFJVRSwgRlRERl9UUlVFKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfZnBwclNldE1vZGUoRlRERl9GQUxTRSwgRlRERl9UUlVFLCBGVERGX0ZBTFNFKTsKKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmCisKKyAgICBpZiAoZnJhbWVIZWFkZXItPmZyYW1lVmVyc2lvbiA9PSBGVERGX0ZSQU1FX1ZFUlNJT05fTk9UX1NVUFBPUlRFRCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBkZWZpbmVkKEZUREZfTk9fQ1NMKSAmJiBkZWZpbmVkKEZUREZfTk9fVFNDSCkKKyAgICBlbHNlIGlmIChmcmFtZUhlYWRlci0+ZnJhbWVWZXJzaW9uID09IEZUREZfRlJBTUVfVkVSU0lPTl9FIHx8CisgICAgICAgICAgICAgZnJhbWVIZWFkZXItPmZyYW1lVHlwZSA9PSBGVERGX01VTFRJUFVSUE9TRV9GUkFNRSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAmJiBGVERGX05PX1RTQ0ggKi8KKworICAgIEZUREZfRnJhbWVUeXBlIGZyYW1lVHlwZSA9IGZyYW1lSGVhZGVyLT5mcmFtZVR5cGU7CisgICAgRlRERl9Cb29sZWFuICAgZHVwbGljYXRlID0gRlRERl9GQUxTRTsKKworICAgIGlmICgoZnJhbWVIZWFkZXItPm9wdGlvbnMgJiBGVERGX09QVF9TRVFfTlJfU1VQUFJFU1NFRCkgPT0gMCAmJgorICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgIT0gRlRERl9OT19BRERSRVNTKQorICAgIHsKKyAgICAgICAgRlRERl9UaW1lICAgIHRpbWVzdGFtcCA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVAsIHJlYWRCdWYpOworICAgICAgICBGVERGX1NOU2VsICAgc25TZWwgICAgID0gRlRERl9TTl9TRUxfRFNOOworICAgICAgICBGVERGX0Jvb2xlYW4gZHJvcDsKKworICAgICAgICBpZiAoKEZUREZfcGliLnRzY2hFbmFibGVkIHx8IGZyYW1lSGVhZGVyLT5mcmFtZVZlcnNpb24gPT0gRlRERl9GUkFNRV9WRVJTSU9OX0UpICYmCisgICAgICAgICAgICAoZnJhbWVIZWFkZXItPm9wdGlvbnMgJiBGVERGX09QVF9BQ0tfUkVRVUVTVEVEKSkKKyAgICAgICAgeworICAgICAgICAgICAgZHJvcCA9IEZUREZfRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkcm9wID0gRlRERl9UUlVFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZyYW1lVHlwZSA9PSBGVERGX0JFQUNPTl9GUkFNRSkKKyAgICAgICAgeworICAgICAgICAgICAgc25TZWwgPSBmcmFtZUhlYWRlci0+ZnJhbWVWZXJzaW9uID09IEZUREZfRlJBTUVfVkVSU0lPTl9FID8gRlRERl9TTl9TRUxfRUJTTiA6IEZUREZfU05fU0VMX0JTTjsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QgaTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlRERl9OUl9PRl9SWF9BRERSUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBlbnRyeSBpcyBlbXB0eSBvciBtYXRjaGVzCisgICAgICAgICAgICBpZiAoRlRERl9yeGFbIGkgXS5hZGRyTW9kZSA9PSBGVERGX05PX0FERFJFU1MgfHwKKyAgICAgICAgICAgICAgICAoRlRERl9yeGFbIGkgXS5hZGRyTW9kZSA9PSBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgJiYKKyAgICAgICAgICAgICAgICAgKChmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgPT0gRlRERl9TSE9SVF9BRERSRVNTICYmCisgICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHIuc2hvcnRBZGRyZXNzID09IEZUREZfcnhhWyBpIF0uYWRkci5zaG9ydEFkZHJlc3MpIHx8CisgICAgICAgICAgICAgICAgICAoZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlID09IEZUREZfRVhURU5ERURfQUREUkVTUyAmJgorICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyLmV4dEFkZHJlc3MgPT0gRlRERl9yeGFbIGkgXS5hZGRyLmV4dEFkZHJlc3MpKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaSA8IEZUREZfTlJfT0ZfUlhfQUREUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGVERGX3J4YVsgaSBdLmFkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNuU2VsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZUREZfU05fU0VMX0RTTjoKKworICAgICAgICAgICAgICAgICAgICBpZiAoRlRERl9yeGFbIGkgXS5kc25WYWxpZCA9PSBGVERGX1RSVUUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZUhlYWRlci0+U04gPT0gRlRERl9yeGFbIGkgXS5kc24pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZUREZfcGliLm1ldHJpY3NFbmFibGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLmR1cGxpY2F0ZUZyYW1lQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHJvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGUgPSBGVERGX1RSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3J4YVsgaSBdLmRzblZhbGlkID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgRlRERl9yeGFbIGkgXS5kc24gPSBmcmFtZUhlYWRlci0+U047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBGVERGX1NOX1NFTF9CU046CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZUREZfcnhhWyBpIF0uYnNuVmFsaWQgPT0gRlRERl9UUlVFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVIZWFkZXItPlNOID09IEZUREZfcnhhWyBpIF0uYnNuKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGVERGX3BpYi5tZXRyaWNzRW5hYmxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcy5kdXBsaWNhdGVGcmFtZUNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRyb3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVwbGljYXRlID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9yeGFbIGkgXS5ic25WYWxpZCA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIEZUREZfcnhhWyBpIF0uYnNuID0gZnJhbWVIZWFkZXItPlNOOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgRlRERl9TTl9TRUxfRUJTTjoKKworICAgICAgICAgICAgICAgICAgICBpZiAoRlRERl9yeGFbIGkgXS5lYnNuVmFsaWQgPT0gRlRERl9UUlVFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVIZWFkZXItPlNOID09IEZUREZfcnhhWyBpIF0uZWJzbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRlRERl9waWIubWV0cmljc0VuYWJsZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3BpYi5wZXJmb3JtYW5jZU1ldHJpY3MuZHVwbGljYXRlRnJhbWVDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcm9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcnhhWyBpIF0uZWJzblZhbGlkID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgRlRERl9yeGFbIGkgXS5lYnNuID0gZnJhbWVIZWFkZXItPlNOOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9yeGFbIGkgXS5hZGRyTW9kZSA9IGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZTsKKyAgICAgICAgICAgICAgICBGVERGX3J4YVsgaSBdLmFkZHIgICAgID0gZnJhbWVIZWFkZXItPnNyY0FkZHI7CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNuU2VsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZUREZfU05fU0VMX0RTTjoKKyAgICAgICAgICAgICAgICAgICAgRlRERl9yeGFbIGkgXS5kc25WYWxpZCA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9yeGFbIGkgXS5kc24gICAgICA9IGZyYW1lSGVhZGVyLT5TTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEZUREZfU05fU0VMX0JTTjoKKyAgICAgICAgICAgICAgICAgICAgRlRERl9yeGFbIGkgXS5ic25WYWxpZCA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9yeGFbIGkgXS5ic24gICAgICA9IGZyYW1lSGVhZGVyLT5TTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEZUREZfU05fU0VMX0VCU046CisgICAgICAgICAgICAgICAgICAgIEZUREZfcnhhWyBpIF0uZWJzblZhbGlkID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgICAgICBGVERGX3J4YVsgaSBdLmVic24gICAgICA9IGZyYW1lSGVhZGVyLT5TTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBGVERGX3J4YVsgaSBdLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGZpbmQgb2xkZXN0IGVudHJ5IGFuZCBvdmVyd3JpdGUgaXQKKyAgICAgICAgICAgIEZUREZfVGltZSBjdXJUaW1lID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworICAgICAgICAgICAgRlRERl9UaW1lIGRlbHRhLCBncmVhdGVzdERlbHRhID0gMDsKKyAgICAgICAgICAgIHVpbnQ4X3QgICBlbnRyeSAgID0gMDsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEZUREZfTlJfT0ZfUlhfQUREUlM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWx0YSA9IGN1clRpbWUgLSBGVERGX3J4YVsgaSBdLnRpbWVzdGFtcDsKKworICAgICAgICAgICAgICAgIGlmIChkZWx0YSA+IGdyZWF0ZXN0RGVsdGEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBncmVhdGVzdERlbHRhID0gZGVsdGE7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5ICAgICAgICAgPSBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRlRERl9yeGFbIGVudHJ5IF0uYWRkck1vZGUgPSBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGU7CisgICAgICAgICAgICBGVERGX3J4YVsgZW50cnkgXS5hZGRyICAgICA9IGZyYW1lSGVhZGVyLT5zcmNBZGRyOworCisgICAgICAgICAgICBzd2l0Y2ggKHNuU2VsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBGVERGX1NOX1NFTF9EU046CisgICAgICAgICAgICAgICAgRlRERl9yeGFbIGVudHJ5IF0uYnNuVmFsaWQgID0gRlRERl9GQUxTRTsKKyAgICAgICAgICAgICAgICBGVERGX3J4YVsgZW50cnkgXS5lYnNuVmFsaWQgPSBGVERGX0ZBTFNFOworICAgICAgICAgICAgICAgIEZUREZfcnhhWyBlbnRyeSBdLmRzblZhbGlkICA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgICAgICBGVERGX3J4YVsgZW50cnkgXS5kc24gICAgICAgPSBmcmFtZUhlYWRlci0+U047CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRlRERl9TTl9TRUxfQlNOOgorICAgICAgICAgICAgICAgIEZUREZfcnhhWyBlbnRyeSBdLmRzblZhbGlkICA9IEZUREZfRkFMU0U7CisgICAgICAgICAgICAgICAgRlRERl9yeGFbIGVudHJ5IF0uZWJzblZhbGlkID0gRlRERl9GQUxTRTsKKyAgICAgICAgICAgICAgICBGVERGX3J4YVsgZW50cnkgXS5ic25WYWxpZCAgPSBGVERGX1RSVUU7CisgICAgICAgICAgICAgICAgRlRERl9yeGFbIGVudHJ5IF0uYnNuICAgICAgID0gZnJhbWVIZWFkZXItPlNOOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEZUREZfU05fU0VMX0VCU046CisgICAgICAgICAgICAgICAgRlRERl9yeGFbIGVudHJ5IF0uZHNuVmFsaWQgID0gRlRERl9GQUxTRTsKKyAgICAgICAgICAgICAgICBGVERGX3J4YVsgZW50cnkgXS5ic25WYWxpZCAgPSBGVERGX0ZBTFNFOworICAgICAgICAgICAgICAgIEZUREZfcnhhWyBlbnRyeSBdLmVic25WYWxpZCA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgICAgICBGVERGX3J4YVsgZW50cnkgXS5lYnNuICAgICAgPSBmcmFtZUhlYWRlci0+U047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZnJhbWVIZWFkZXItPm9wdGlvbnMgJiBGVERGX09QVF9TRUNVUklUWV9FTkFCTEVEKQorICAgIHsKKyAgICAgICAgcnhQdHIgPSBGVERGX2dldFNlY3VyaXR5SGVhZGVyKHJ4UHRyLCBmcmFtZUhlYWRlci0+ZnJhbWVWZXJzaW9uLCBzZWN1cml0eUhlYWRlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNlY3VyaXR5SGVhZGVyLT5zZWN1cml0eUxldmVsID0gMDsKKyAgICAgICAgc2VjdXJpdHlIZWFkZXItPmtleUlkTW9kZSAgICAgPSAwOworICAgIH0KKworICAgIEZUREZfSUVMaXN0ICpoZWFkZXJJRUxpc3QgID0gTlVMTDsKKyAgICBGVERGX0lFTGlzdCAqcGF5bG9hZElFTGlzdCA9IE5VTEw7CisgICAgaW50ICAgICAgICAgIG1pY0xlbmd0aCAgICAgPSBGVERGX2dldE1pY0xlbmd0aChzZWN1cml0eUhlYWRlci0+c2VjdXJpdHlMZXZlbCk7CisKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorCisgICAgaWYgKGZyYW1lSGVhZGVyLT5vcHRpb25zICYgRlRERl9PUFRfSUVTX1BSRVNFTlQpCisgICAgeworICAgICAgICByeFB0ciA9CisgICAgICAgICAgICBGVERGX2dldEllcyhyeFB0ciwgcnhCdWZmZXIgKyAoZnJhbWVMZW4gLSBtaWNMZW5ndGggLSBGVERGX0ZDU19MRU5HVEgpLCAmaGVhZGVySUVMaXN0LCAmcGF5bG9hZElFTGlzdCk7CisgICAgfQorCisjZW5kaWYgLyogIUZUREZfTk9fQ1NMIHx8ICFGVERGX05PX1RTQ0ggKi8KKworICAgIC8vIEdldCBzdGFydCBvZiBwcml2YXRlIGRhdGEgKG5lZWRlZCB0byB1bnNlY3VyZSBhIGZyYW1lKQorICAgIGlmIChmcmFtZVR5cGUgPT0gRlRERl9NQUNfQ09NTUFORF9GUkFNRSkKKyAgICB7CisgICAgICAgIGZyYW1lSGVhZGVyLT5jb21tYW5kRnJhbWVJZCA9ICpyeFB0cisrOworICAgIH0KKyAgICBlbHNlIGlmIChmcmFtZVR5cGUgPT0gRlRERl9CRUFDT05fRlJBTUUpCisgICAgeworICAgICAgICBQQU5EZXNjcmlwdG9yLmNvb3JkQWRkck1vZGUgPSBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGU7CisgICAgICAgIFBBTkRlc2NyaXB0b3IuY29vcmRQQU5JZCAgICA9IGZyYW1lSGVhZGVyLT5zcmNQQU5JZDsKKyAgICAgICAgUEFORGVzY3JpcHRvci5jb29yZEFkZHIgICAgID0gZnJhbWVIZWFkZXItPnNyY0FkZHI7CisgICAgICAgIFBBTkRlc2NyaXB0b3IuY2hhbm5lbE51bWJlciA9ICgoRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9QSFlSWEFUVFIpID4+IDQpICYgMHhmKSArIDExOworICAgICAgICBQQU5EZXNjcmlwdG9yLmNoYW5uZWxQYWdlICAgPSAwOworICAgICAgICBQQU5EZXNjcmlwdG9yLnRpbWVzdGFtcCAgICAgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QLCByZWFkQnVmKTsKKyAgICAgICAgUEFORGVzY3JpcHRvci5saW5rUXVhbGl0eSAgID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChSRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SLCByZWFkQnVmKTsKKworICAgICAgICBGVERGX09jdGV0ICpzdXBlcmZyYW1lU3BlY1B0ciA9IChGVERGX09jdGV0ICopICZQQU5EZXNjcmlwdG9yLnN1cGVyZnJhbWVTcGVjOworICAgICAgICAqc3VwZXJmcmFtZVNwZWNQdHIrKyA9ICpyeFB0cisrOworICAgICAgICAqc3VwZXJmcmFtZVNwZWNQdHIgICA9ICpyeFB0cisrOworCisgICAgICAgIHVpbnQ4X3QgZ3RzU3BlYyA9ICpyeFB0cisrOworCisgICAgICAgIFBBTkRlc2NyaXB0b3IuR1RTUGVybWl0ID0gKGd0c1NwZWMgJiAweDA4KSA/IEZUREZfVFJVRSA6IEZUREZfRkFMU0U7CisgICAgICAgIHVpbnQ4X3QgZ3RzRGVzY3JDb3VudCA9IGd0c1NwZWMgJiAweDc7CisKKyAgICAgICAgaWYgKGd0c0Rlc2NyQ291bnQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gR1RTIGlzIG5vdCBzdXBwb3J0ZWQsIHNvIGp1c3Qgc2tpcCB0aGUgR1RTIGRpcmVjdGlvbiBhbmQgR1RTIGxpc3QgZmllbGRzIGlmIHByZXNlbnQKKyAgICAgICAgICAgIHJ4UHRyICs9ICgxICsgKDMgKiBndHNEZXNjckNvdW50KSk7CisgICAgICAgIH0KKworICAgICAgICBwZW5kQWRkclNwZWMgPSAqcnhQdHIrKzsKKyAgICAgICAgdWludDhfdCBuck9mU2hvcnRBZGRycyA9IHBlbmRBZGRyU3BlYyAmIDB4MDc7CisgICAgICAgIHVpbnQ4X3QgbnJPZkV4dEFkZHJzICAgPSAocGVuZEFkZHJTcGVjICYgMHg3MCkgPj4gNDsKKworICAgICAgICBpbnQgICAgIG47CisKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IChuck9mU2hvcnRBZGRycyArIG5yT2ZFeHRBZGRycyk7IG4rKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG4gPCBuck9mU2hvcnRBZGRycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX09jdGV0ICpzaG9ydEFkZHJlc3NQdHIgPSAoRlRERl9PY3RldCAqKSAmcGVuZEFkZHJMaXN0WyBuIF0uc2hvcnRBZGRyZXNzOworICAgICAgICAgICAgICAgICpzaG9ydEFkZHJlc3NQdHIrKyA9ICpyeEJ1ZmZlcisrOworICAgICAgICAgICAgICAgICpzaG9ydEFkZHJlc3NQdHIgICA9ICpyeEJ1ZmZlcisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQgKmV4dEFkZHJlc3NQdHIgPSAoRlRERl9PY3RldCAqKSAmcGVuZEFkZHJMaXN0WyBuIF0uZXh0QWRkcmVzczsKKyAgICAgICAgICAgICAgICBpbnQgICAgICAgICBtOworCisgICAgICAgICAgICAgICAgZm9yIChtID0gMDsgbSA8IDg7IG0rKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpleHRBZGRyZXNzUHRyKysgPSAqcnhCdWZmZXIrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZnJhbWVUeXBlID09IEZUREZfQUNLTk9XTEVER0VNRU5UX0ZSQU1FICYmCisgICAgICAgICAgICAgc2VjdXJpdHlIZWFkZXItPnNlY3VyaXR5TGV2ZWwgIT0gMCkKKyAgICB7CisgICAgICAgIGlmIChGVERGX3JlcUN1cnJlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoRlRERl9yZXFDdXJyZW50LT5tc2dJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgRlRERl9EQVRBX1JFUVVFU1Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9EYXRhUmVxdWVzdCAqZGF0YVJlcXVlc3QgPSAoRlRERl9EYXRhUmVxdWVzdCAqKSBGVERGX3JlcUN1cnJlbnQ7CisgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY1BBTklkICAgID0gZGF0YVJlcXVlc3QtPmRzdFBBTklkOworICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9IGRhdGFSZXF1ZXN0LT5kc3RBZGRyTW9kZTsKKyAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkciAgICAgPSBkYXRhUmVxdWVzdC0+ZHN0QWRkcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBGVERGX1BPTExfUkVRVUVTVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX1BvbGxSZXF1ZXN0ICpwb2xsUmVxdWVzdCA9IChGVERGX1BvbGxSZXF1ZXN0ICopIEZUREZfcmVxQ3VycmVudDsKKyAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjUEFOSWQgICAgPSBwb2xsUmVxdWVzdC0+Y29vcmRQQU5JZDsKKyAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgPSBwb2xsUmVxdWVzdC0+Y29vcmRBZGRyTW9kZTsKKyAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkciAgICAgPSBwb2xsUmVxdWVzdC0+Y29vcmRBZGRyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEZUREZfQVNTT0NJQVRFX1JFUVVFU1Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9Bc3NvY2lhdGVSZXF1ZXN0ICphc3NvY2lhdGVSZXF1ZXN0ID0gKEZUREZfQXNzb2NpYXRlUmVxdWVzdCAqKSBGVERGX3JlcUN1cnJlbnQ7CisgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY1BBTklkICAgID0gYXNzb2NpYXRlUmVxdWVzdC0+Y29vcmRQQU5JZDsKKyAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgPSBhc3NvY2lhdGVSZXF1ZXN0LT5jb29yZEFkZHJNb2RlOworICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyICAgICA9IGFzc29jaWF0ZVJlcXVlc3QtPmNvb3JkQWRkcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBGVERGX0RJU0FTU09DSUFURV9SRVFVRVNUOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfRGlzYXNzb2NpYXRlUmVxdWVzdCAqZGlzYXNzb2NpYXRlUmVxdWVzdCA9CisgICAgICAgICAgICAgICAgICAgIChGVERGX0Rpc2Fzc29jaWF0ZVJlcXVlc3QgKikgRlRERl9yZXFDdXJyZW50OworICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNQQU5JZCAgICA9IGRpc2Fzc29jaWF0ZVJlcXVlc3QtPmRldmljZVBBTklkOworICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9IGRpc2Fzc29jaWF0ZVJlcXVlc3QtPmRldmljZUFkZHJNb2RlOworICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyICAgICA9IGRpc2Fzc29jaWF0ZVJlcXVlc3QtPmRldmljZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgRlRERl9BU1NPQ0lBVEVfUkVTUE9OU0U6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9Bc3NvY2lhdGVSZXNwb25zZSAqYXNzb2NpYXRlUmVzcG9uc2UgPSAoRlRERl9Bc3NvY2lhdGVSZXNwb25zZSAqKSBGVERGX3JlcUN1cnJlbnQ7CisgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlICAgICAgICA9IEZUREZfRVhURU5ERURfQUREUkVTUzsKKyAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkci5leHRBZGRyZXNzID0gYXNzb2NpYXRlUmVzcG9uc2UtPmRldmljZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBGVERGX1N0YXR1cyBzdGF0dXMgPSBGVERGX3Vuc2VjdXJlRnJhbWUocnhCdWZmZXIsIHJ4UHRyLCBmcmFtZUhlYWRlciwgc2VjdXJpdHlIZWFkZXIpOworCisgICAgaWYgKHN0YXR1cyAhPSBGVERGX1NVQ0NFU1MpCisgICAgeworICAgICAgICBpZiAoRlRERl9waWIubWV0cmljc0VuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcy5zZWN1cml0eUZhaWx1cmVDb3VudCsrOworICAgICAgICB9CisKKyAgICAgICAgRlRERl9SRUxfREFUQV9CVUZGRVIoKEZUREZfT2N0ZXQgKilwYXlsb2FkSUVMaXN0KTsKKworICAgICAgICAvLyBTaW5jZSB1bnNlY3VyZSBvZiBhY2tub3dsZWRnZW1lbnQgZnJhbWUgaXMgYWx3YXlzIHN1Y2Nlc3NmdWwsCisgICAgICAgIC8vIG5vdGhpbmcgc3BlY2lhbCBoYXMgdG8gYmUgZG9uZSB0byBnZXQgdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24gY29ycmVjdC4KKyAgICAgICAgRlRERl9zZW5kQ29tbVN0YXR1c0luZGljYXRpb24oRlRERl9yZXFDdXJyZW50LCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcGliLlBBTklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+ZHN0QWRkck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5kc3RBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUhlYWRlci0+c2VjdXJpdHlMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlIZWFkZXItPmtleUlkTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlIZWFkZXItPmtleVNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlIZWFkZXItPmtleUluZGV4KTsKKworICAgICAgICBpZiAoZnJhbWVUeXBlID09IEZUREZfQUNLTk9XTEVER0VNRU5UX0ZSQU1FICYmIEZUREZfcmVxQ3VycmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgc2VuZENvbmZpcm0oRlRERl9OT19BQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3JlcUN1cnJlbnQtPm1zZ0lkKTsKKworICAgICAgICAgICAgRlRERl9wcm9jZXNzTmV4dFJlcXVlc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoRlRERl9waWIubWV0cmljc0VuYWJsZWQgJiYgZnJhbWVUeXBlICE9IEZUREZfQUNLTk9XTEVER0VNRU5UX0ZSQU1FKQorICAgIHsKKyAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLlJYU3VjY2Vzc0NvdW50Kys7CisgICAgfQorCisjaWZuZGVmIEZUREZfTk9fVFNDSAorCisgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkICYmIGZyYW1lVHlwZSAhPSBGVERGX0FDS05PV0xFREdFTUVOVF9GUkFNRSkKKyAgICB7CisgICAgICAgIEZUREZfVGltZSB0aW1lc3RhbXAgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QLCByZWFkQnVmKTsKKworICAgICAgICBGVERGX2NvcnJlY3RTbG90VGltZSh0aW1lc3RhbXApOworICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworCisgICAgc3dpdGNoIChmcmFtZVR5cGUpCisgICAgeworICAgIGNhc2UgRlRERl9BQ0tOT1dMRURHRU1FTlRfRlJBTUU6CisKKyAgICAgICAgaWYgKEZUREZfcGliLm1ldHJpY3NFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRlRERl9uck9mUmV0cmllcyA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcy5UWFN1Y2Nlc3NDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoRlRERl9uck9mUmV0cmllcyA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcy5yZXRyeUNvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLm11bHRpcGxlUmV0cnlDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZyYW1lSGVhZGVyLT5mcmFtZVZlcnNpb24gPT0gRlRERl9GUkFNRV9WRVJTSU9OX0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfcGliLnRyYWZmaWNDb3VudGVycy5yeEVuaEFja0ZybU9rQ250Kys7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9CRUFDT05fRlJBTUU6CisgICAgICAgIEZUREZfcGliLnRyYWZmaWNDb3VudGVycy5yeEJlYWNvbkZybU9rQ250Kys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX0RBVEFfRlJBTUU6CisgICAgICAgIEZUREZfcGliLnRyYWZmaWNDb3VudGVycy5yeERhdGFGcm1Pa0NudCsrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9NQUNfQ09NTUFORF9GUkFNRToKKyAgICAgICAgRlRERl9waWIudHJhZmZpY0NvdW50ZXJzLnJ4Q21kRnJtT2tDbnQrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfTVVMVElQVVJQT1NFX0ZSQU1FOgorICAgICAgICBGVERGX3BpYi50cmFmZmljQ291bnRlcnMucnhNdWx0aVB1cnBGcm1Pa0NudCsrOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoZnJhbWVUeXBlID09IEZUREZfQUNLTk9XTEVER0VNRU5UX0ZSQU1FKQorICAgIHsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4RmxhZ1MgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKE9OX09GRl9SRUdNQVBfVFhfRkxBR19TLCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworICAgICAgICB3aGlsZSAoKnR4RmxhZ1MgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TVEFUKQorICAgICAgICB7IH0KKworICAgICAgICAvLyBJdCBpcyByZXF1aXJlZCB0byBjYWxsIEZUREZfcHJvY2Vzc1R4RXZlbnQgaGVyZSBiZWNhdXNlIGFuIFJYIGFjayBnZW5lcmF0ZXMgdHdvIGV2ZW50cworICAgICAgICAvLyBUaGUgUlggZXZlbnQgaXMgcmFpc2VkIGZpcnN0LCB0aGVuIGFmdGVyIGFuIElGUyB0aGUgVFggZXZlbnQgaXMgcmFpc2VkLiBIb3dldmVyLAorICAgICAgICAvLyB0aGUgRlRERl9wcm9jZXNzTmV4dFJlcXVlc3QgcmVxdWlyZXMgdGhhdCBib3RoIGV2ZW50cyBoYXZlIGJlZW4gaGFuZGxlZC4KKyAgICAgICAgRlRERl9wcm9jZXNzVHhFdmVudCgpOworCisgICAgICAgIEZUREZfU04gU04gPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fTUFDU04sIEZUREZfVFhfREFUQV9CVUZGRVIpOworCisgICAgICAgIGlmIChGVERGX3JlcUN1cnJlbnQgJiYKKyAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5TTiA9PSBTTikKKyAgICAgICAgeworI2lmbmRlZiBGVERGX05PX0NTTAorCisgICAgICAgICAgICBpZiAoRlRERl9waWIubGVFbmFibGVkID09IEZUREZfVFJVRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX1RpbWUgdGltZXN0YW1wID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChSRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQnVmKTsKKworICAgICAgICAgICAgICAgIEZUREZfc2V0UGVlckNzbFRpbWluZyhoZWFkZXJJRUxpc3QsIHRpbWVzdGFtcCk7CisgICAgICAgICAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworCisjaWZuZGVmIEZUREZfTk9fVFNDSAorCisgICAgICAgICAgICBpZiAoRlRERl9waWIudHNjaEVuYWJsZWQgPT0gRlRERl9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfY29ycmVjdFNsb3RUaW1lRnJvbUFjayhoZWFkZXJJRUxpc3QpOworCisgICAgICAgICAgICAgICAgRlRERl9Uc2NoUmV0cnkgKnRzY2hSZXRyeSA9IEZUREZfZ2V0VHNjaFJldHJ5KEZUREZfZ2V0UmVxdWVzdEFkZHJlc3MoRlRERl9yZXFDdXJyZW50KSk7CisKKyAgICAgICAgICAgICAgICB0c2NoUmV0cnktPm5yT2ZSZXRyaWVzICAgICA9IDA7CisgICAgICAgICAgICAgICAgRlRERl90c2NoU2xvdExpbmstPnJlcXVlc3QgPSBOVUxMOworICAgICAgICAgICAgfQorCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisKKyAgICAgICAgICAgIHN3aXRjaCAoRlRERl9yZXFDdXJyZW50LT5tc2dJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgRlRERl9EQVRBX1JFUVVFU1Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9UaW1lICAgICAgICAgIHRpbWVzdGFtcCAgICAgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhUSU1FU1RBTVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgICAgICAgICAgICAgIEZUREZfTnVtT2ZCYWNrb2ZmcyBudW1PZkJhY2tvZmZzID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChSRVRFTlRJT05fUkFNX0NTTUFDQU5SUkVUUklFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyAgICAgICAgICAgICAgICBGVERGX3NlbmREYXRhQ29uZmlybSgoRlRERl9EYXRhUmVxdWVzdCAqKUZUREZfcmVxQ3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NVQ0NFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU9mQmFja29mZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZElFTGlzdCk7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBGVERGX1BPTExfUkVRVUVTVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIShmcmFtZUhlYWRlci0+b3B0aW9ucyAmIEZUREZfT1BUX0ZSQU1FX1BFTkRJTkcpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9zZW5kUG9sbENvbmZpcm0oKEZUREZfUG9sbFJlcXVlc3QgKilGVERGX3JlcUN1cnJlbnQsIEZUREZfTk9fREFUQSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgRlRERl9BU1NPQ0lBVEVfUkVRVUVTVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX0Fzc29jQWRtaW4gKmFzc29jQWRtaW4gPSAmRlRERl9hYTsKKworICAgICAgICAgICAgICAgIGlmIChhc3NvY0FkbWluLT5mYXN0QSA9PSBGVERGX1RSVUUgfHwKKyAgICAgICAgICAgICAgICAgICAgYXNzb2NBZG1pbi0+ZGF0YVIgPT0gRlRERl9GQUxTRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRpbWVzdGFtcCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWVzdGFtcCArIEZUREZfcGliLnJlc3BvbnNlV2FpdFRpbWUgKiBGVERGX0JBU0VfU1VQRVJGUkFNRV9EVVJBVElPTikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICghKGZyYW1lSGVhZGVyLT5vcHRpb25zICYgRlRERl9PUFRfRlJBTUVfUEVORElORykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGVERGX3NlbmRBc3NvY2lhdGVDb25maXJtKChGVERGX0Fzc29jaWF0ZVJlcXVlc3QgKilGVERGX3JlcUN1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9OT19EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgRlRERl9BU1NPQ0lBVEVfUkVTUE9OU0U6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9Bc3NvY2lhdGVSZXNwb25zZSAqYXNzb2NSZXNwID0gKEZUREZfQXNzb2NpYXRlUmVzcG9uc2UgKilGVERGX3JlcUN1cnJlbnQ7CisKKyAgICAgICAgICAgICAgICBGVERGX0FkZHJlc3Mgc3JjQWRkciwgZHN0QWRkcjsKKyAgICAgICAgICAgICAgICBzcmNBZGRyLmV4dEFkZHJlc3MgPSBGVERGX3BpYi5leHRBZGRyZXNzOworICAgICAgICAgICAgICAgIGRzdEFkZHIuZXh0QWRkcmVzcyA9IGFzc29jUmVzcC0+ZGV2aWNlQWRkcmVzczsKKworICAgICAgICAgICAgICAgIEZUREZfc2VuZENvbW1TdGF0dXNJbmRpY2F0aW9uKEZUREZfcmVxQ3VycmVudCwgRlRERl9TVUNDRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcGliLlBBTklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRVhURU5ERURfQUREUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRVhURU5ERURfQUREUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jUmVzcC0+c2VjdXJpdHlMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NvY1Jlc3AtPmtleUlkTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NvY1Jlc3AtPmtleVNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NvY1Jlc3AtPmtleUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBGVERGX09SUEhBTl9SRVNQT05TRToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX09ycGhhblJlc3BvbnNlICpvcnBoYW5SZXNwID0gKEZUREZfT3JwaGFuUmVzcG9uc2UgKilGVERGX3JlcUN1cnJlbnQ7CisKKyAgICAgICAgICAgICAgICBGVERGX0FkZHJlc3Mgc3JjQWRkciwgZHN0QWRkcjsKKyAgICAgICAgICAgICAgICBzcmNBZGRyLmV4dEFkZHJlc3MgPSBGVERGX3BpYi5leHRBZGRyZXNzOworICAgICAgICAgICAgICAgIGRzdEFkZHIuZXh0QWRkcmVzcyA9IG9ycGhhblJlc3AtPm9ycGhhbkFkZHJlc3M7CisKKyAgICAgICAgICAgICAgICBGVERGX3NlbmRDb21tU3RhdHVzSW5kaWNhdGlvbihGVERGX3JlcUN1cnJlbnQsIEZUREZfU1VDQ0VTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3BpYi5QQU5JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0VYVEVOREVEX0FERFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0VYVEVOREVEX0FERFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnBoYW5SZXNwLT5zZWN1cml0eUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ycGhhblJlc3AtPmtleUlkTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnBoYW5SZXNwLT5rZXlTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JwaGFuUmVzcC0+a2V5SW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEZUREZfRElTQVNTT0NJQVRFX1JFUVVFU1Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9zZW5kRGlzYXNzb2NpYXRlQ29uZmlybSgoRlRERl9EaXNhc3NvY2lhdGVSZXF1ZXN0ICopRlRERl9yZXFDdXJyZW50LCBGVERGX1NVQ0NFU1MpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEZUREZfUkVNT1RFX1JFUVVFU1Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9SZW1vdGVSZXF1ZXN0ICpyZW1vdGVSZXF1ZXN0ID0gKEZUREZfUmVtb3RlUmVxdWVzdCAqKSBGVERGX3JlcUN1cnJlbnQ7CisKKyAgICAgICAgICAgICAgICBpZiAocmVtb3RlUmVxdWVzdC0+cmVtb3RlSWQgPT0gRlRERl9SRU1PVEVfUEFOX0lEX0NPTkZMSUNUX05PVElGSUNBVElPTikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEZUREZfc2VuZFN5bmNMb3NzSW5kaWNhdGlvbihGVERGX1BBTl9JRF9DT05GTElDVCwgc2VjdXJpdHlIZWFkZXIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEZUREZfcmVxQ3VycmVudCA9IE5VTEw7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKEZUREZfcmVxQ3VycmVudC0+bXNnSWQgIT0gRlRERl9EQVRBX1JFUVVFU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZm9yIGRhdGEgcmVxdWVzdCB0aGUgYXBwbGljYXRpb24gb3ducyB0aGUgbWVtb3J5CisgICAgICAgICAgICAgICAgRlRERl9SRUxfREFUQV9CVUZGRVIoKEZUREZfT2N0ZXQgKilwYXlsb2FkSUVMaXN0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRlRERl9wcm9jZXNzTmV4dFJlcXVlc3QoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfUkVMX0RBVEFfQlVGRkVSKChGVERGX09jdGV0ICopcGF5bG9hZElFTGlzdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoKGZyYW1lSGVhZGVyLT5mcmFtZVZlcnNpb24gPT0gRlRERl9GUkFNRV9WRVJTSU9OX0UgfHwgRlRERl9waWIudHNjaEVuYWJsZWQpICYmCisgICAgICAgICAgICAgKGZyYW1lSGVhZGVyLT5vcHRpb25zICYgRlRERl9PUFRfQUNLX1JFUVVFU1RFRCkpCisgICAgeworI2lmICFkZWZpbmVkKEZUREZfTk9fQ1NMKSB8fCAhZGVmaW5lZChGVERGX05PX1RTQ0gpCisgICAgICAgIHN0YXRpYyBGVERGX0ZyYW1lSGVhZGVyIGFmaDsKKyAgICAgICAgRlRERl9GcmFtZUhlYWRlciAgICAgICAqYWNrRnJhbWVIZWFkZXIgPSAmYWZoOworCisgICAgICAgIGFja0ZyYW1lSGVhZGVyLT5mcmFtZVR5cGUgPSBGVERGX0FDS05PV0xFREdFTUVOVF9GUkFNRTsKKyAgICAgICAgYWNrRnJhbWVIZWFkZXItPm9wdGlvbnMgICA9CisgICAgICAgICAgICAoZnJhbWVIZWFkZXItPm9wdGlvbnMgJgorICAgICAgICAgICAgIChGVERGX09QVF9TRUNVUklUWV9FTkFCTEVEIHwgRlRERl9PUFRfU0VRX05SX1NVUFBSRVNTRUQpKSB8IEZUREZfT1BUX0VOSEFOQ0VEOworCisgICAgICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgPT0gRlRERl9UUlVFIHx8CisgICAgICAgICAgICBGVERGX3BpYi50c2NoRW5hYmxlZCA9PSBGVERGX1RSVUUgfHwKKyAgICAgICAgICAgIEZUREZfcGliLkVBY2tJRUxpc3QubnJPZklFcyAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBhY2tGcmFtZUhlYWRlci0+b3B0aW9ucyB8PSBGVERGX09QVF9JRVNfUFJFU0VOVDsKKyAgICAgICAgfQorCisgICAgICAgIGFja0ZyYW1lSGVhZGVyLT5kc3RBZGRyTW9kZSA9IEZUREZfTk9fQUREUkVTUzsKKyAgICAgICAgYWNrRnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlID0gRlRERl9OT19BRERSRVNTOworICAgICAgICBhY2tGcmFtZUhlYWRlci0+U04gICAgICAgICAgPSBmcmFtZUhlYWRlci0+U047CisKKyAgICAgICAgRlRERl9PY3RldCAqdHhQdHIgPSAoRlRERl9PY3RldCAqKSBGVERGX0dFVF9SRUdfQUREUihSRVRFTlRJT05fUkFNX1RYX0ZJRk8pICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRERl9CVUZGRVJfTEVOR1RIICogRlRERl9UWF9BQ0tfQlVGRkVSKTsKKworICAgICAgICAvLyBTa2lwIFBIWSBoZWFkZXIgKD0gTUFDIGxlbmd0aCkKKyAgICAgICAgdHhQdHIrKzsKKworICAgICAgICB0eFB0ciA9IEZUREZfYWRkRnJhbWVIZWFkZXIodHhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2tGcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgICAgIGlmIChmcmFtZUhlYWRlci0+b3B0aW9ucyAmIEZUREZfT1BUX1NFQ1VSSVRZX0VOQUJMRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlY3VyaXR5SGVhZGVyLT5mcmFtZUNvdW50ZXIgICAgID0gRlRERl9waWIuZnJhbWVDb3VudGVyOworICAgICAgICAgICAgc2VjdXJpdHlIZWFkZXItPmZyYW1lQ291bnRlck1vZGUgPSBGVERGX3BpYi5mcmFtZUNvdW50ZXJNb2RlOworCisgICAgICAgICAgICB0eFB0ciAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfYWRkU2VjdXJpdHlIZWFkZXIodHhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlIZWFkZXIpOworICAgICAgICB9CisKKyNpZm5kZWYgRlRERl9OT19DU0wKKworICAgICAgICBpZiAoRlRERl9waWIubGVFbmFibGVkID09IEZUREZfVFJVRSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIEZUREZfT2N0ZXQgICAgICAgIHBoYXNlQW5kUGVyaW9kWyA0IF07CisgICAgICAgICAgICBzdGF0aWMgRlRERl9JRURlc2NyaXB0b3IgY3NsSUUgICAgID0geyAweDFhLCA0LCB7IHBoYXNlQW5kUGVyaW9kIH0gfTsKKyAgICAgICAgICAgIHN0YXRpYyBGVERGX0lFTGlzdCAgICAgICBjc2xJRUxpc3QgPSB7IDEsICZjc2xJRSB9OworICAgICAgICAgICAgRlRERl9UaW1lICAgICAgICAgICAgICAgIGN1clRpbWUgICA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKworICAgICAgICAgICAgRlRERl9UaW1lICAgICAgICAgICAgICAgIGRlbHRhICAgICA9IGN1clRpbWUgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZSAtIEZUREZfcGliLkNTTFBlcmlvZCAqIDEwKTsKKworICAgICAgICAgICAgKihGVERGX1BlcmlvZCAqKShwaGFzZUFuZFBlcmlvZCArIDApID0gKEZUREZfUGVyaW9kKShkZWx0YSAvIDEwKTsKKyAgICAgICAgICAgICooRlRERl9QZXJpb2QgKikocGhhc2VBbmRQZXJpb2QgKyAyKSA9IEZUREZfcGliLkNTTFBlcmlvZDsKKworICAgICAgICAgICAgdHhQdHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX2FkZEllcyh0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNzbElFTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZUREZfcGliLkVBY2tJRUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRkFMU0UpOworICAgICAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworCisjaWZuZGVmIEZUREZfTk9fVFNDSAorCisgICAgICAgIGlmIChGVERGX3BpYi50c2NoRW5hYmxlZCA9PSBGVERGX1RSVUUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfVGltZSByeFRpbWVzdGFtcCA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVAsIHJlYWRCdWYpOworCisgICAgICAgICAgICB0eFB0ciA9IEZUREZfYWRkQ29yclRpbWVJRSh0eFB0ciwgcnhUaW1lc3RhbXApOworICAgICAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKworICAgICAgICBpZiAoIUZUREZfcGliLmxlRW5hYmxlZCAmJiAhRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHR4UHRyID0gRlRERl9hZGRJZXModHhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGVERGX3BpYi5FQWNrSUVMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIEZUREZfc2VuZEFja0ZyYW1lKGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHhQdHIpOworI2VuZGlmIC8qICFGVERGX05PX0NTTCB8fCAhRlRERl9OT19UU0NIICovCisKKyAgICAgICAgaWYgKGR1cGxpY2F0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9SRUxfREFUQV9CVUZGRVIoKEZUREZfT2N0ZXQgKilwYXlsb2FkSUVMaXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChmcmFtZVR5cGUgPT0gRlRERl9EQVRBX0ZSQU1FIHx8IGZyYW1lVHlwZSA9PSBGVERGX01VTFRJUFVSUE9TRV9GUkFNRSkKKyAgICB7CisgICAgICAgIEZUREZfRGF0YUxlbmd0aCBwYXlsb2FkTGVuZ3RoID0gZnJhbWVMZW4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyeFB0ciAtIHJ4QnVmZmVyKSArIDEgLSBtaWNMZW5ndGggLSBGVERGX0ZDU19MRU5HVEg7CisKKyAgICAgICAgaWYgKEZUREZfcmVxQ3VycmVudCAmJgorICAgICAgICAgICAgRlRERl9yZXFDdXJyZW50LT5tc2dJZCA9PSBGVERGX1BPTExfUkVRVUVTVCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9Qb2xsUmVxdWVzdCAqcG9sbFJlcXVlc3QgPSAoRlRERl9Qb2xsUmVxdWVzdCAqKSBGVERGX3JlcUN1cnJlbnQ7CisKKyAgICAgICAgICAgIGlmIChmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgPT0gcG9sbFJlcXVlc3QtPmNvb3JkQWRkck1vZGUgJiYKKyAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjUEFOSWQgPT0gcG9sbFJlcXVlc3QtPmNvb3JkUEFOSWQgJiYKKyAgICAgICAgICAgICAgICAoKGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MgJiYKKyAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyLnNob3J0QWRkcmVzcyA9PSBwb2xsUmVxdWVzdC0+Y29vcmRBZGRyLnNob3J0QWRkcmVzcykgfHwKKyAgICAgICAgICAgICAgICAgKGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9PSBGVERGX0VYVEVOREVEX0FERFJFU1MgJiYKKyAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyLmV4dEFkZHJlc3MgPT0gcG9sbFJlcXVlc3QtPmNvb3JkQWRkci5leHRBZGRyZXNzKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEZUREZfc2VuZFBvbGxDb25maXJtKHBvbGxSZXF1ZXN0LCBGVERGX05PX0RBVEEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGVERGX3NlbmRQb2xsQ29uZmlybShwb2xsUmVxdWVzdCwgRlRERl9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoRlRERl9yZXFDdXJyZW50ICYmCisgICAgICAgICAgICAgICAgIEZUREZfcmVxQ3VycmVudC0+bXNnSWQgPT0gRlRERl9BU1NPQ0lBVEVfUkVRVUVTVCAmJgorICAgICAgICAgICAgICAgICBwYXlsb2FkTGVuZ3RoID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlbmRDb25maXJtKEZUREZfTk9fREFUQSwgRlRERl9BU1NPQ0lBVEVfUkVRVUVTVCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGF5bG9hZExlbmd0aCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX0xpbmtRdWFsaXR5IG1wZHVMaW5rUXVhbGl0eSA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9RVUFMSVRZX0lORElDQVRPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQnVmKTsKKyAgICAgICAgICAgIEZUREZfVGltZSAgICAgICAgdGltZXN0YW1wICAgICAgID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChSRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQnVmKTsKKworICAgICAgICAgICAgRlRERl9zZW5kRGF0YUluZGljYXRpb24oZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRJRUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGR1TGlua1F1YWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXApOworICAgICAgICB9CisKKyNpZm5kZWYgRlRERl9OT19DU0wKKyAgICAgICAgZWxzZSBpZiAoaGVhZGVySUVMaXN0LT5uck9mSUVzID09IDEgJiYKKyAgICAgICAgICAgICAgICAgaGVhZGVySUVMaXN0LT5JRXNbIDAgXS5JRCA9PSAweDFkKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX1BlcmlvZCByelRpbWUgPSAqKHVpbnQxNl90ICopIGhlYWRlcklFTGlzdC0+SUVzWyAwIF0uY29udGVudC5yYXc7CisKKyAgICAgICAgICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICAgICAgICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworCisgICAgICAgICAgICBGVERGX1RpbWUgY3VyVGltZSA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKworICAgICAgICAgICAgRlRERl9yelRpbWUgPSBjdXJUaW1lICsgKEZUREZfVGltZSkgcnpUaW1lICogMTAgKyAyNjA7ICAvLyAyNjAgbGVuZ3RoIG9mIG1heCBmcmFtZSBpbiBzeW1ib2xzCisKKyAgICAgICAgICAgIEZUREZfVGltZSBDU0xQZXJpb2QgPSBGVERGX3BpYi5DU0xQZXJpb2QgKiAxMDsKKyAgICAgICAgICAgIEZUREZfVGltZSBkZWx0YSAgICAgPSBGVERGX3J6VGltZSAtIEZUREZfc3RhcnRDc2xTYW1wbGVUaW1lOworCisgICAgICAgICAgICB3aGlsZSAoZGVsdGEgPCAweDgwMDAwMDAwKSAgICAvLyBBIGRlbHRhIGxhcmdlciB0aGFuIDB4ODAwMDAwMDAgaXMgYXNzdW1lZCBhIG5lZ2F0aXZlIGRlbHRhCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9zdGFydENzbFNhbXBsZVRpbWUgKz0gQ1NMUGVyaW9kOworICAgICAgICAgICAgICAgIGRlbHRhICAgICAgICAgICAgICAgICAgICA9IEZUREZfcnpUaW1lIC0gRlRERl9zdGFydENzbFNhbXBsZVRpbWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FLCBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZSk7CisKKyAgICAgICAgICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisKKyAgICAgICAgICAgIEZUREZfUkVMX0RBVEFfQlVGRkVSKChGVERGX09jdGV0ICopcGF5bG9hZElFTGlzdCk7CisgICAgICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9SRUxfREFUQV9CVUZGRVIoKEZUREZfT2N0ZXQgKilwYXlsb2FkSUVMaXN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChmcmFtZVR5cGUgPT0gRlRERl9NQUNfQ09NTUFORF9GUkFNRSkKKyAgICB7CisgICAgICAgIEZUREZfcHJvY2Vzc0NvbW1hbmRGcmFtZShyeFB0ciwgZnJhbWVIZWFkZXIsIHNlY3VyaXR5SGVhZGVyLCBwYXlsb2FkSUVMaXN0KTsKKyAgICB9CisgICAgZWxzZSBpZiAoZnJhbWVUeXBlID09IEZUREZfQkVBQ09OX0ZSQU1FKQorICAgIHsKKyAgICAgICAgRlRERl9PY3RldCAqc3VwZXJmcmFtZVNwZWNQdHIgPSAoRlRERl9PY3RldCAqKSZQQU5EZXNjcmlwdG9yLnN1cGVyZnJhbWVTcGVjOworICAgICAgICBzdXBlcmZyYW1lU3BlY1B0cisrOworCisgICAgICAgIGlmIChGVERGX2lzUEFOQ29vcmRpbmF0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmcmFtZUhlYWRlci0+c3JjUEFOSWQgPT0gRlRERl9waWIuUEFOSWQgJiYgKCpzdXBlcmZyYW1lU3BlY1B0ciAmIDB4NDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfUkVMX0RBVEFfQlVGRkVSKChGVERGX09jdGV0ICopcGF5bG9hZElFTGlzdCk7CisgICAgICAgICAgICAgICAgRlRERl9zZW5kU3luY0xvc3NJbmRpY2F0aW9uKEZUREZfUEFOX0lEX0NPTkZMSUNULCBzZWN1cml0eUhlYWRlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEZUREZfcGliLmFzc29jaWF0ZWRQQU5Db29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZyYW1lSGVhZGVyLT5zcmNQQU5JZCA9PSBGVERGX3BpYi5QQU5JZCAmJiAoKnN1cGVyZnJhbWVTcGVjUHRyICYgMHg0MCkgJiYKKyAgICAgICAgICAgICAgICAoKGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MgJiYKKyAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyLnNob3J0QWRkcmVzcyAhPSBGVERGX3BpYi5jb29yZFNob3J0QWRkcmVzcykgfHwKKyAgICAgICAgICAgICAgICAgKGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9PSBGVERGX0VYVEVOREVEX0FERFJFU1MgJiYKKyAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyLmV4dEFkZHJlc3MgIT0gRlRERl9waWIuY29vcmRFeHRBZGRyZXNzKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9SRUxfREFUQV9CVUZGRVIoKEZUREZfT2N0ZXQgKilwYXlsb2FkSUVMaXN0KTsKKyAgICAgICAgICAgICAgICBGVERGX3NlbmRQQU5JZENvbmZsaWN0Tm90aWZpY2F0aW9uKGZyYW1lSGVhZGVyLCBzZWN1cml0eUhlYWRlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgRlRERl9EYXRhTGVuZ3RoIGJlYWNvblBheWxvYWRMZW5ndGggPSBmcmFtZUxlbiAtIChyeFB0ciAtIHJ4QnVmZmVyKSArIDEgLSBtaWNMZW5ndGggLSBGVERGX0ZDU19MRU5HVEg7CisKKyAgICAgICAgaWYgKEZUREZfcGliLmF1dG9SZXF1ZXN0ID09IEZUREZfRkFMU0UgfHwKKyAgICAgICAgICAgIGJlYWNvblBheWxvYWRMZW5ndGggIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9UaW1lIHRpbWVzdGFtcCA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQnVmKTsKKworICAgICAgICAgICAgRlRERl9CZWFjb25Ob3RpZnlJbmRpY2F0aW9uICpiZWFjb25Ob3RpZnlJbmRpY2F0aW9uID0KKyAgICAgICAgICAgICAgICAoRlRERl9CZWFjb25Ob3RpZnlJbmRpY2F0aW9uICopIEZUREZfR0VUX01TR19CVUZGRVIoCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihGVERGX0JlYWNvbk5vdGlmeUluZGljYXRpb24pKTsKKworICAgICAgICAgICAgYmVhY29uTm90aWZ5SW5kaWNhdGlvbi0+bXNnSWQgICAgICAgICA9IEZUREZfQkVBQ09OX05PVElGWV9JTkRJQ0FUSU9OOworICAgICAgICAgICAgYmVhY29uTm90aWZ5SW5kaWNhdGlvbi0+QlNOICAgICAgICAgICA9IGZyYW1lSGVhZGVyLT5TTjsKKyAgICAgICAgICAgIGJlYWNvbk5vdGlmeUluZGljYXRpb24tPlBBTkRlc2NyaXB0b3IgPSAmUEFORGVzY3JpcHRvcjsKKyAgICAgICAgICAgIGJlYWNvbk5vdGlmeUluZGljYXRpb24tPnBlbmRBZGRyU3BlYyAgPSBwZW5kQWRkclNwZWM7CisgICAgICAgICAgICBiZWFjb25Ob3RpZnlJbmRpY2F0aW9uLT5hZGRyTGlzdCAgICAgID0gcGVuZEFkZHJMaXN0OworICAgICAgICAgICAgYmVhY29uTm90aWZ5SW5kaWNhdGlvbi0+c2R1TGVuZ3RoICAgICA9IGJlYWNvblBheWxvYWRMZW5ndGg7CisgICAgICAgICAgICBiZWFjb25Ob3RpZnlJbmRpY2F0aW9uLT5zZHUgICAgICAgICAgID0gRlRERl9HRVRfREFUQV9CVUZGRVIoYmVhY29uUGF5bG9hZExlbmd0aCk7CisgICAgICAgICAgICBiZWFjb25Ob3RpZnlJbmRpY2F0aW9uLT5FQlNOICAgICAgICAgID0gZnJhbWVIZWFkZXItPlNOOworICAgICAgICAgICAgYmVhY29uTm90aWZ5SW5kaWNhdGlvbi0+YmVhY29uVHlwZSAgICA9CisgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPmZyYW1lVmVyc2lvbiA9PSBGVERGX0ZSQU1FX1ZFUlNJT05fRSA/IEZUREZfRU5IQU5DRURfQkVBQ09OIDogRlRERl9OT1JNQUxfQkVBQ09OOworICAgICAgICAgICAgYmVhY29uTm90aWZ5SW5kaWNhdGlvbi0+SUVMaXN0ICAgICAgICA9IHBheWxvYWRJRUxpc3Q7CisgICAgICAgICAgICBiZWFjb25Ob3RpZnlJbmRpY2F0aW9uLT50aW1lc3RhbXAgICAgID0gdGltZXN0YW1wOworCisgICAgICAgICAgICBtZW1jcHkoYmVhY29uTm90aWZ5SW5kaWNhdGlvbi0+c2R1LCByeFB0ciwgYmVhY29uUGF5bG9hZExlbmd0aCk7CisKKyAgICAgICAgICAgIEZUREZfUkNWX01TRygoRlRERl9Nc2dCdWZmZXIgKikgYmVhY29uTm90aWZ5SW5kaWNhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoRlRERl9yZXFDdXJyZW50ICYmCisgICAgICAgICAgICAgICAgIEZUREZfcmVxQ3VycmVudC0+bXNnSWQgPT0gRlRERl9TQ0FOX1JFUVVFU1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfUkVMX0RBVEFfQlVGRkVSKChGVERGX09jdGV0ICopcGF5bG9hZElFTGlzdCk7CisgICAgICAgICAgICBGVERGX2FkZFBBTmRlc2NyaXB0b3IoJlBBTkRlc2NyaXB0b3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9SRUxfREFUQV9CVUZGRVIoKEZUREZfT2N0ZXQgKilwYXlsb2FkSUVMaXN0KTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIEZUREZfVVNFX0xQRFAKKyNpZiBGVERGX0ZQX0JJVF9URVNUX01PREUKKworICAgIGlmIChGVERGX2xwZHBJc0VuYWJsZWQoKSAmJiAhRlRERl9yZXFDdXJyZW50ICYmIGZyYW1lVHlwZSA9PSBGVERGX0RBVEFfRlJBTUUpCisgICAgeworICAgICAgICBGVERGX3Byb2Nlc3NUeFBlbmRpbmcoZnJhbWVIZWFkZXIsIHNlY3VyaXR5SGVhZGVyKTsKKyAgICB9CisKKyNlbHNlIC8qIEZUREZfRlBfQklUX1RFU1RfTU9ERSAqLworCisgICAgaWYgKCFGVERGX3JlcUN1cnJlbnQgJiYgZnJhbWVUeXBlID09IEZUREZfREFUQV9GUkFNRSkKKyAgICB7CisgICAgICAgIEZUREZfcHJvY2Vzc1R4UGVuZGluZyhmcmFtZUhlYWRlciwgc2VjdXJpdHlIZWFkZXIpOworICAgIH0KKworI2VuZGlmIC8qIEZUREZfRlBfQklUX1RFU1RfTU9ERSAqLworI2VuZGlmIC8qIEZUREZfVVNFX0xQRFAgKi8KKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICBpZiAoRlRERl9waWIudHNjaEVuYWJsZWQgPT0gRlRERl9UUlVFKQorICAgIHsKKyAgICAgICAgRlRERl9zY2hlZHVsZVRzY2goTlVMTCk7CisgICAgfQorCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisjZW5kaWYgLyogIUZUREZfTElURSAqLworfQorCisKKwordm9pZCBGVERGX3Byb2Nlc3NSeEV2ZW50KHZvaWQpCit7CisgICAgdm9sYXRpbGUgdWludDMyX3QgKnJ4RXZlbnQgPSAodm9sYXRpbGUgdWludDMyX3QgKikgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UOworCisgICAgaWYgKCpyeEV2ZW50ICYgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYU09GX0UpCisgICAgeworI2lmZGVmIFNJTVVMQVRPUgorICAgICAgICAqcnhFdmVudCAmPSB+TVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYU09GX0U7CisjZWxzZQorICAgICAgICAqcnhFdmVudCAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfRTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmICgqcnhFdmVudCAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfRSkKKyAgICB7CisjaWZkZWYgU0lNVUxBVE9SCisgICAgICAgICpyeEV2ZW50ICY9IH5NU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCWVRFX0U7CisjZWxzZQorICAgICAgICAqcnhFdmVudCAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCWVRFX0U7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoKnJ4RXZlbnQgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfT1ZFUkZMT1dfRSkKKyAgICB7CisgICAgICAgIC8vIE5vIEFQSSBkZWZpbmVkIHRvIHJlcG9ydCB0aGlzIGVycm9yIHRvIHRoZSBoaWdoZXIgbGF5ZXIsIHNvIGp1c3QgY2xlYXIgaXQuCisjaWZkZWYgU0lNVUxBVE9SCisgICAgICAgICpyeEV2ZW50ICY9IH5NU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfT1ZFUkZMT1dfRTsKKyNlbHNlCisgICAgICAgICpyeEV2ZW50ICA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19FOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKCpyeEV2ZW50ICYgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRl9BVkFJTF9FKQorICAgIHsKKyAgICAgICAgaW50IHJlYWRCdWYgID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9SWF9SRUFEX0JVRl9QVFIpOworICAgICAgICBpbnQgd3JpdGVCdWYgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1JYX1dSSVRFX0JVRl9QVFIpOworCisgICAgICAgIHdoaWxlIChyZWFkQnVmICE9IHdyaXRlQnVmKQorICAgICAgICB7CisgICAgICAgICAgICBwcm9jZXNzUnhGcmFtZShyZWFkQnVmICUgOCk7CisgICAgICAgICAgICByZWFkQnVmID0gKHJlYWRCdWYgKyAxKSAlIDE2OworICAgICAgICB9CisKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9SWF9SRUFEX0JVRl9QVFIsIHJlYWRCdWYpOworCisjaWZkZWYgU0lNVUxBVE9SCisgICAgICAgICpyeEV2ZW50ICY9IH5NU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX0U7CisjZWxzZQorICAgICAgICAqcnhFdmVudCAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX0U7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqbG1hY0V2ZW50ID0gKHZvbGF0aWxlIHVpbnQzMl90ICopIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0VWRU5UOworCisgICAgaWYgKCpsbWFjRXZlbnQgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOUkVBRFlfRSkKKyAgICB7CisjaWZkZWYgU0lNVUxBVE9SCisgICAgICAgICpsbWFjRXZlbnQgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9FOworI2Vsc2UKKyAgICAgICAgKmxtYWNFdmVudCAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOUkVBRFlfRTsKKyNlbmRpZgorCisjaWZuZGVmIEZUREZfTElURQorICAgICAgICBGVERGX01zZ0J1ZmZlciAqcmVxdWVzdCA9IEZUREZfcmVxQ3VycmVudDsKKworICAgICAgICBpZiAocmVxdWVzdC0+bXNnSWQgPT0gRlRERl9TQ0FOX1JFUVVFU1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfc2NhblJlYWR5KChGVERGX1NjYW5SZXF1ZXN0ICopIHJlcXVlc3QpOworICAgICAgICB9CisKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgfQorCisgICAgaWYgKCpsbWFjRXZlbnQgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfRSkKKyAgICB7CisjaWZkZWYgU0lNVUxBVE9SCisgICAgICAgICpsbWFjRXZlbnQgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9FOworI2Vsc2UKKyAgICAgICAgKmxtYWNFdmVudCAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfRTsKKyNlbmRpZgorCisgICAgICAgIGlmIChGVERGX3BpYi5tZXRyaWNzRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLlJ4RXhwaXJlZENvdW50Kys7CisgICAgICAgIH0KKworI2lmbmRlZiBGVERGX0xJVEUKKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICAgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3NjaGVkdWxlVHNjaChOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisgICAgICAgICAgICBpZiAoRlRERl9yZXFDdXJyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfTXNnSWQgbXNnSWQgPSBGVERGX3JlcUN1cnJlbnQtPm1zZ0lkOworCisgICAgICAgICAgICAgICAgaWYgKG1zZ0lkID09IEZUREZfUE9MTF9SRVFVRVNUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9zZW5kUG9sbENvbmZpcm0oKEZUREZfUG9sbFJlcXVlc3QgKilGVERGX3JlcUN1cnJlbnQsIEZUREZfTk9fREFUQSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1zZ0lkID09IEZUREZfU0NBTl9SRVFVRVNUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9zY2FuUmVhZHkoKEZUREZfU2NhblJlcXVlc3QgKikgRlRERl9yZXFDdXJyZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobXNnSWQgPT0gRlRERl9BU1NPQ0lBVEVfUkVRVUVTVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEZUREZfc2VuZEFzc29jaWF0ZUNvbmZpcm0oKEZUREZfQXNzb2NpYXRlUmVxdWVzdCAqKUZUREZfcmVxQ3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX05PX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgfQorCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorCisgICAgaWYgKCpsbWFjRXZlbnQgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19USFJfRSkKKyAgICB7CisjaWZkZWYgU0lNVUxBVE9SCisgICAgICAgICpsbWFjRXZlbnQgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9FOworI2Vsc2UKKyAgICAgICAgKmxtYWNFdmVudCAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19USFJfRTsKKyNlbmRpZgorI2lmIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGCisKKyAgICAgICAgaWYgKEZUREZfcGliLm1ldHJpY3NFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3BpYi5wZXJmb3JtYW5jZU1ldHJpY3MuQk9JcnFDb3VudCsrOworICAgICAgICB9CisKKyAgICAgICAgRlRERl9zZGJGc21CYWNrb2ZmSVJRKCk7CisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKyAgICB9CisKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBzZW5kQ29uZmlybShGVERGX1N0YXR1cyBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX01zZ0lkICBtc2dJZCkKK3sKKyAgICBzd2l0Y2ggKG1zZ0lkKQorICAgIHsKKyNpZm5kZWYgRlRERl9MSVRFCisKKyAgICBjYXNlIEZUREZfREFUQV9SRVFVRVNUOgorICAgIHsKKyAgICAgICAgRlRERl9EYXRhUmVxdWVzdCAgKmRhdGFSZXF1ZXN0ICAgPSAoRlRERl9EYXRhUmVxdWVzdCAqKSBGVERGX3JlcUN1cnJlbnQ7CisKKyAgICAgICAgRlRERl9UaW1lICAgICAgICAgIHRpbWVzdGFtcCAgICAgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhUSU1FU1RBTVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKyAgICAgICAgRlRERl9TTiAgICAgICAgICAgIFNOICAgICAgICAgICAgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fTUFDU04sIEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgICAgICBGVERGX051bU9mQmFja29mZnMgbnVtT2ZCYWNrb2ZmcyA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9DU01BQ0FOUlJFVFJJRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworICAgICAgICBGVERGX3NlbmREYXRhQ29uZmlybShkYXRhUmVxdWVzdCwgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1PZkJhY2tvZmZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEZUREZfUE9MTF9SRVFVRVNUOgorCisgICAgICAgIGlmIChzdGF0dXMgIT0gRlRERl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3NlbmRQb2xsQ29uZmlybSgoRlRERl9Qb2xsUmVxdWVzdCAqKUZUREZfcmVxQ3VycmVudCwgc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX0FTU09DSUFURV9SRVFVRVNUOgorCisgICAgICAgIGlmIChzdGF0dXMgIT0gRlRERl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3NlbmRBc3NvY2lhdGVDb25maXJtKChGVERGX0Fzc29jaWF0ZVJlcXVlc3QgKilGVERGX3JlcUN1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX0FTU09DSUFURV9SRVNQT05TRToKKworICAgICAgICBpZiAoc3RhdHVzICE9IEZUREZfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9Bc3NvY2lhdGVSZXNwb25zZSAqYXNzb2NSZXNwID0gKEZUREZfQXNzb2NpYXRlUmVzcG9uc2UgKilGVERGX3JlcUN1cnJlbnQ7CisKKyAgICAgICAgICAgIEZUREZfQWRkcmVzcyBzcmNBZGRyLCBkc3RBZGRyOworICAgICAgICAgICAgc3JjQWRkci5leHRBZGRyZXNzID0gRlRERl9waWIuZXh0QWRkcmVzczsKKyAgICAgICAgICAgIGRzdEFkZHIuZXh0QWRkcmVzcyA9IGFzc29jUmVzcC0+ZGV2aWNlQWRkcmVzczsKKworICAgICAgICAgICAgRlRERl9zZW5kQ29tbVN0YXR1c0luZGljYXRpb24oRlRERl9yZXFDdXJyZW50LCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3BpYi5QQU5JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRVhURU5ERURfQUREUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0VYVEVOREVEX0FERFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NSZXNwLT5zZWN1cml0eUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NSZXNwLT5rZXlJZE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NvY1Jlc3AtPmtleVNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jUmVzcC0+a2V5SW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfT1JQSEFOX1JFU1BPTlNFOgorCisgICAgICAgIGlmIChzdGF0dXMgIT0gRlRERl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX09ycGhhblJlc3BvbnNlICpvcnBoYW5SZXNwID0gKEZUREZfT3JwaGFuUmVzcG9uc2UgKilGVERGX3JlcUN1cnJlbnQ7CisKKyAgICAgICAgICAgIEZUREZfQWRkcmVzcyBzcmNBZGRyLCBkc3RBZGRyOworICAgICAgICAgICAgc3JjQWRkci5leHRBZGRyZXNzID0gRlRERl9waWIuZXh0QWRkcmVzczsKKyAgICAgICAgICAgIGRzdEFkZHIuZXh0QWRkcmVzcyA9IG9ycGhhblJlc3AtPm9ycGhhbkFkZHJlc3M7CisKKyAgICAgICAgICAgIEZUREZfc2VuZENvbW1TdGF0dXNJbmRpY2F0aW9uKEZUREZfcmVxQ3VycmVudCwgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9waWIuUEFOSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0VYVEVOREVEX0FERFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9FWFRFTkRFRF9BRERSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ycGhhblJlc3AtPnNlY3VyaXR5TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnBoYW5SZXNwLT5rZXlJZE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnBoYW5SZXNwLT5rZXlTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnBoYW5SZXNwLT5rZXlJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9ESVNBU1NPQ0lBVEVfUkVRVUVTVDoKKworICAgICAgICBpZiAoc3RhdHVzICE9IEZUREZfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9zZW5kRGlzYXNzb2NpYXRlQ29uZmlybSgoRlRERl9EaXNhc3NvY2lhdGVSZXF1ZXN0ICopRlRERl9yZXFDdXJyZW50LCBzdGF0dXMpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfU0NBTl9SRVFVRVNUOgorCisgICAgICAgIGlmIChzdGF0dXMgIT0gRlRERl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3NlbmRTY2FuQ29uZmlybSgoRlRERl9TY2FuUmVxdWVzdCAqKUZUREZfcmVxQ3VycmVudCwgc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX0JFQUNPTl9SRVFVRVNUOgorICAgICAgICBGVERGX3NlbmRCZWFjb25Db25maXJtKChGVERGX0JlYWNvblJlcXVlc3QgKilGVERGX3JlcUN1cnJlbnQsIHN0YXR1cyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX1JFTU9URV9SRVFVRVNUOgorICAgICAgICBGVERGX3JlcUN1cnJlbnQgPSBOVUxMOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKKyAgICBjYXNlIEZUREZfVFJBTlNQQVJFTlRfUkVRVUVTVDoKKyAgICB7CisjaWZuZGVmIEZUREZfUEhZX0FQSQorICAgICAgICBGVERGX1RyYW5zcGFyZW50UmVxdWVzdCAqdHJhbnNwYXJlbnRSZXF1ZXN0ID0gKEZUREZfVHJhbnNwYXJlbnRSZXF1ZXN0ICopIEZUREZfcmVxQ3VycmVudDsKKyNlbmRpZgorICAgICAgICBGVERGX0JpdG1hcDMyICAgICAgICAgICAgdHJhbnNwYXJlbnRTdGF0dXMgID0gMDsKKworICAgICAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICAgICAgeworICAgICAgICBjYXNlIEZUREZfU1VDQ0VTUzoKKyAgICAgICAgICAgIHRyYW5zcGFyZW50U3RhdHVzID0gRlRERl9UUkFOU1BBUkVOVF9TRU5EX1NVQ0NFU1NGVUw7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEZUREZfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRToKKyAgICAgICAgICAgIHRyYW5zcGFyZW50U3RhdHVzID0gRlRERl9UUkFOU1BBUkVOVF9DU01BQ0FfRkFJTFVSRTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIEZUREZfVFJBTlNQQVJFTlRfV0FJVF9GT1JfQUNLCisKKyAgICAgICAgY2FzZSBGVERGX05PX0FDSzoKKyAgICAgICAgICAgIHRyYW5zcGFyZW50U3RhdHVzID0gRlRERl9UUkFOU1BBUkVOVF9OT19BQ0s7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgaWYgKEZUREZfcGliLm1ldHJpY3NFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3BpYi5wZXJmb3JtYW5jZU1ldHJpY3MuVFhTdWNjZXNzQ291bnQrKzsKKyAgICAgICAgfQorCisjaWZkZWYgRlRERl9QSFlfQVBJCisgICAgICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICAgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisgICAgICAgIEZUREZfdHhJblByb2dyZXNzID0gRlRERl9GQUxTRTsKKyAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKworICAgICAgICBGVERGX1NFTkRfRlJBTUVfVFJBTlNQQVJFTlRfQ09ORklSTShOVUxMLCB0cmFuc3BhcmVudFN0YXR1cyk7CisjZWxzZQorCisgICAgICAgIEZUREZfcmVxQ3VycmVudCA9IE5VTEw7CisKKyAgICAgICAgRlRERl9TRU5EX0ZSQU1FX1RSQU5TUEFSRU5UX0NPTkZJUk0odHJhbnNwYXJlbnRSZXF1ZXN0LT5oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50U3RhdHVzKTsKKworICAgICAgICBGVERGX1JFTF9NU0dfQlVGRkVSKChGVERGX01zZ0J1ZmZlciAqKSB0cmFuc3BhcmVudFJlcXVlc3QpOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICAgICAgRlRERl9wcm9jZXNzTmV4dFJlcXVlc3QoKTsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKKyNlbmRpZiAvKiBGVERGX1BIWV9BUEkgKi8KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KK30KKwordm9pZCBGVERGX3Byb2Nlc3NUeEV2ZW50KHZvaWQpCit7CisgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4RmxhZ1N0YXRFOworICAgIEZUREZfU3RhdHVzICAgICAgICBzdGF0dXMgPSBGVERGX1NVQ0NFU1M7CisKKyNpZiBGVERGX1VTRV9QVEkgJiYgIUZUREZfVVNFX0FVVE9fUFRJCisgICAgLyogUmVzdG9yZSBSeCBQVEkgaW4gY2FzZSB0aGUgVHggdHJhbnNhY3Rpb24gdGhhdCBqdXN0IGVuZGVkIGludGVycnVwdGVkIGFuIFJ4LWFsd2F5cy1vbgorICAgICAqIHRyYW5zYWN0aW9uLiAqLworICAgIGh3X2NvZXhfcHRpX3QgdHhfcHRpOworICAgIGh3X2NvZXhfdXBkYXRlX2Z0ZGZfcHRpKEZUREZfZ2V0UnhQdGkoKSwgJnR4X3B0aSwgdHJ1ZSk7CisjZW5kaWYKKworICAgIHR4RmxhZ1N0YXRFID0gRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKE9OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FLCBGVERGX1RYX1dBS0VVUF9CVUZGRVIpOworCisgICAgaWYgKCp0eEZsYWdTdGF0RSAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UpCisgICAgeworI2lmZGVmIFNJTVVMQVRPUgorICAgICAgICAqdHhGbGFnU3RhdEUgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0U7CisjZWxzZQorICAgICAgICAqdHhGbGFnU3RhdEUgID0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRTsKKyNlbmRpZgorCisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eFN0YXR1cyA9CisgICAgICAgICAgICBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xLCBGVERGX1RYX1dBS0VVUF9CVUZGRVIpOworCisgICAgICAgIGlmICgqdHhTdGF0dXMgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBRkFJTCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEZUREZfcGliLm1ldHJpY3NFbmFibGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcy5UWEZhaWxDb3VudCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0dXMgPSBGVERGX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0eEZsYWdTdGF0RSA9IEZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChPTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRSwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyAgICBpZiAoKnR4RmxhZ1N0YXRFICYgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRSkKKyAgICB7CisjaWZkZWYgU0lNVUxBVE9SCisgICAgICAgICp0eEZsYWdTdGF0RSAmPSB+TVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRTsKKyNlbHNlCisgICAgICAgICp0eEZsYWdTdGF0RSAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZm5kZWYgRlRERl9QSFlfQVBJCisgICAgRlRERl90eEluUHJvZ3Jlc3MgPSBGVERGX0ZBTFNFOworCisgICAgaWYgKEZUREZfcmVxQ3VycmVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2Vsc2UKKyAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisKKyAgICBpZiAoRlRERl90eEluUHJvZ3Jlc3MgPT0gRlRERl9GQUxTRSkKKyAgICB7CisgICAgICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGVERGX2V4aXRDcml0aWNhbCgpOworI2VuZGlmCisjaWYgRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYKKyAgICBGVERGX3NkYkZzbVR4SVJRKCk7CisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKyAgICBGVERGX0Jvb2xlYW4gYWNrVFggPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fQUNLUkVRVUVTVCwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyAgICBpZiAoc3RhdHVzID09IEZUREZfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eE1ldGEgICAgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAsIEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgICAgICBGVERGX0ZyYW1lVHlwZSAgICAgZnJhbWVUeXBlID0KKyAgICAgICAgICAgICgqdHhNZXRhICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSkgPj4gT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRTsKKworICAgICAgICBzd2l0Y2ggKGZyYW1lVHlwZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIEZUREZfQkVBQ09OX0ZSQU1FOgorICAgICAgICAgICAgRlRERl9waWIudHJhZmZpY0NvdW50ZXJzLnR4QmVhY29uRnJtQ250Kys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEZUREZfREFUQV9GUkFNRToKKyAgICAgICAgICAgIEZUREZfcGliLnRyYWZmaWNDb3VudGVycy50eERhdGFGcm1DbnQrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRlRERl9NQUNfQ09NTUFORF9GUkFNRToKKyAgICAgICAgICAgIEZUREZfcGliLnRyYWZmaWNDb3VudGVycy50eENtZEZybUNudCsrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBGVERGX01VTFRJUFVSUE9TRV9GUkFNRToKKyAgICAgICAgICAgIEZUREZfcGliLnRyYWZmaWNDb3VudGVycy50eE11bHRpUHVycEZybUNudCsrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCAqdHhTdGF0dXMgPQorICAgICAgICAgICAgRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChSRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMSwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisjaWZuZGVmIEZUREZfTElURQorI2lmbmRlZiBGVERGX05PX1RTQ0gKKyAgICAgICAgRlRERl9Uc2NoUmV0cnkgKnRzY2hSZXRyeSA9IE5VTEw7CisKKyAgICAgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICB0c2NoUmV0cnkgPSBGVERGX2dldFRzY2hSZXRyeShGVERGX2dldFJlcXVlc3RBZGRyZXNzKEZUREZfcmVxQ3VycmVudCkpOworICAgICAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKKyAgICAgICAgaWYgKCp0eFN0YXR1cyAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tGQUlMKQorICAgICAgICB7CisjaWZuZGVmIEZUREZfTElURQorI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgICAgICAgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRzY2hSZXRyeS0+bnJPZlJldHJpZXMrKzsKKyAgICAgICAgICAgICAgICBGVERGX3RzY2hTbG90TGluay0+cmVxdWVzdCA9IE5VTEw7CisgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NjaGVkdWxlVHNjaChGVERGX3JlcUN1cnJlbnQpOworCisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBGVERGX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiBGVERGX3JlcUN1cnJlbnQgaXMgbm90IGVxdWFsIHRvIE5VTEwgdGhlIHJldHJpZWQgcmVxdWVzdCB3aWxsIGJlIHF1ZXVlZAorICAgICAgICAgICAgICAgICAgICAvLyByYXRoZXIgdGhlbiBzZW5kIGFnYWluCisgICAgICAgICAgICAgICAgICAgIEZUREZfcmVxQ3VycmVudCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworICAgICAgICAgICAgICAgIGlmIChGVERGX25yT2ZSZXRyaWVzIDwgRlRERl9waWIubWF4RnJhbWVSZXRyaWVzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9uck9mUmV0cmllcysrOworI2lmbmRlZiBGVERGX0xJVEUKKyNpZm5kZWYgRlRERl9OT19DU0wKKworICAgICAgICAgICAgICAgICAgICBpZiAoRlRERl9waWIubGVFbmFibGVkKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3NldFBlZXJDc2xUaW1pbmcoTlVMTCwgMCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RpbWUgY3VyVGltZSA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgRlRERl90eEluUHJvZ3Jlc3MgPSBGVERGX1RSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0NTTFNUQVJUU0FNUExFVElNRSwgY3VyVGltZSArIDUpOworICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNXVVBFUklPRCwgRlRERl9waWIuQ1NMTWF4UGVyaW9kKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4RmxhZ1NldCA9IEZUREZfR0VUX0ZJRUxEX0FERFIoT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NFVCk7CisgICAgICAgICAgICAgICAgICAgICAgICAqdHhGbGFnU2V0IHw9ICgoMSA8PCBGVERGX1RYX0RBVEFfQlVGRkVSKSB8ICgxIDw8IEZUREZfVFhfV0FLRVVQX0JVRkZFUikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAgICAgICAgICAgICAgICAgeworI2lmIEZUREZfVVNFX1BUSSAmJiAhRlRERl9VU0VfQVVUT19QVEkKKyAgICAgICAgICAgICAgICAgICAgICAgIGh3X2NvZXhfdXBkYXRlX2Z0ZGZfcHRpKHR4X3B0aSwgTlVMTCwgdHJ1ZSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eEZsYWdTZXQgPSBGVERGX0dFVF9GSUVMRF9BRERSKE9OX09GRl9SRUdNQVBfVFhfRkxBR19TRVQpOworICAgICAgICAgICAgICAgICAgICAgICAgKnR4RmxhZ1NldCB8PSAoMSA8PCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZUREZfcGliLm1ldHJpY3NFbmFibGVkKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3BpYi5wZXJmb3JtYW5jZU1ldHJpY3MuVFhGYWlsQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IEZUREZfTk9fQUNLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgqdHhTdGF0dXMgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBRkFJTCkKKyAgICAgICAgeworI2lmbmRlZiBGVERGX0xJVEUKKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICAgICAgICAgIGlmIChGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0c2NoUmV0cnktPm5yT2ZDY2FSZXRyaWVzKys7CisKKyAgICAgICAgICAgICAgICBpZiAodHNjaFJldHJ5LT5uck9mQ2NhUmV0cmllcyA8IEZUREZfcGliLm1heENTTUFCYWNrb2ZmcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEZUREZfdHNjaFNsb3RMaW5rLT5yZXF1ZXN0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NjaGVkdWxlVHNjaChGVERGX3JlcUN1cnJlbnQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gRlRERl9TVUNDRVNTKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBGVERGX3JlcUN1cnJlbnQgaXMgbm90IGVxdWFsIHRvIE5VTEwgdGhlIHJldHJpZWQgcmVxdWVzdCB3aWxsIGJlIHF1ZXVlZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmF0aGVyIHRoZW4gc2VuZCBhZ2FpbgorICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9yZXFDdXJyZW50ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBGVERGX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBGVERGX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChGVERGX3BpYi5tZXRyaWNzRW5hYmxlZCAmJiBzdGF0dXMgIT0gRlRERl9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcy5UWEZhaWxDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFja1RYID09IEZUREZfRkFMU0UgJiYgRlRERl9waWIubWV0cmljc0VuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLlRYU3VjY2Vzc0NvdW50Kys7CisgICAgICAgICAgICB9CisKKyNpZm5kZWYgRlRERl9MSVRFCisjaWZuZGVmIEZUREZfTk9fVFNDSAorCisgICAgICAgICAgICBpZiAoRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHNjaFJldHJ5LT5uck9mQ2NhUmV0cmllcyA9IDA7CisgICAgICAgICAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgICAgIH0KKyAgICB9CisKKyNpZm5kZWYgRlRERl9QSFlfQVBJCisKKyAgICBpZiAoKGFja1RYID09IEZUREZfRkFMU0UgfHwgc3RhdHVzICE9IEZUREZfU1VDQ0VTUykgJiYgRlRERl9yZXFDdXJyZW50KQorICAgIHsKKyAgICAgICAgc2VuZENvbmZpcm0oc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICBGVERGX3JlcUN1cnJlbnQtPm1zZ0lkKTsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgICAgIEZUREZfcHJvY2Vzc05leHRSZXF1ZXN0KCk7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIH0KKworI2Vsc2UKKworICAgIGlmIChGVERGX3R4SW5Qcm9ncmVzcykKKyAgICB7CisgICAgICAgIHNlbmRDb25maXJtKHN0YXR1cywgRlRERl9UUkFOU1BBUkVOVF9SRVFVRVNUKTsKKyAgICB9CisKKyNlbmRpZgorfQorCit2b2lkIEZUREZfcHJvY2Vzc1N5bWJvbFRpbWVyRXZlbnQodm9pZCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqc3ltYm9sVGltZVRockV2ZW50ID0gRlRERl9HRVRfRklFTERfQUREUihPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfRSk7CisKKyNpZmRlZiBGVERGX1BIWV9BUEkKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqbG1hY1JlYWR5NHNsZWVwRXZlbnQgPSBGVERGX0dFVF9GSUVMRF9BRERSKE9OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX0QpOworCisgICAgaWYgKCpsbWFjUmVhZHk0c2xlZXBFdmVudCAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfRCkKKyAgICB7CisgICAgICAgICpsbWFjUmVhZHk0c2xlZXBFdmVudCA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfRDsKKworICAgICAgICAvKiBJZiBsbWFjIHJlYWR5IDQgc2xlZXAsIGNhbGwgcmVzcGVjdGl2ZSBjYWxsYmFjaywgYWZ0ZXIgZGlzYWJsaW5nIHRoZSBpbnRlcnJ1cHQgKi8KKyAgICAgICAgaWYgKEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQKSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCAqbG1hY0N0cmxNYXNrID0gRlRERl9HRVRfUkVHX0FERFIoT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSyk7CisgICAgICAgICAgICAqbG1hY0N0cmxNYXNrICY9IH5NU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX007CisgICAgICAgICAgICBGVERGX0xNQUNSRUFEWTRTTEVFUF9DQihGVERGX1RSVUUsIDApOworICAgICAgICB9CisgICAgfQorCisjZW5kaWYKKworICAgIC8vIHN5bmMgdGltZXN0YW1wIGV2ZW50CisgICAgaWYgKCpzeW1ib2xUaW1lVGhyRXZlbnQgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9FKQorICAgIHsKKyNpZmRlZiBTSU1VTEFUT1IKKyAgICAgICAgKnN5bWJvbFRpbWVUaHJFdmVudCAmPSB+TVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfRTsKKyNlbHNlCisgICAgICAgICpzeW1ib2xUaW1lVGhyRXZlbnQgID0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfRTsKKyNlbmRpZgorCisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUEVOQSwgMCk7CisjaWZuZGVmIEZUREZfTElURQorI2lmbmRlZiBGVERGX05PX0NTTAorICAgICAgICBGVERGX29sZExlRW5hYmxlZCA9IEZUREZfRkFMU0U7CisKKyAgICAgICAgaWYgKEZUREZfd2FrZVVwRW5hYmxlTGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfcGliLmxlRW5hYmxlZCAgPSBGVERGX1RSVUU7CisgICAgICAgICAgICBGVERGX3NldExlRW5hYmxlZCgpOworICAgICAgICAgICAgRlRERl93YWtlVXBFbmFibGVMZSA9IEZUREZfRkFMU0U7CisgICAgICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisKKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICAgICAgaWYgKEZUREZfd2FrZVVwRW5hYmxlVHNjaCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9zZXRUc2NoRW5hYmxlZCgpOworICAgICAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKworICAgICAgICBGVERGX3Jlc3RvcmVUeFBlbmRpbmdUaW1lcigpOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAgICAgRlRERl9XQUtFX1VQX1JFQURZKCk7CisgICAgfQorCisgICAgLy8gbWlzY2VsbGFuZW91cyBldmVudAorICAgIC8vIC0gTm9uLVRTQ0ggbW9kZTogYXNzb2NpYXRpb24gdGltZXIKKyAgICAvLyAtIFRTQ0ggbW9kZTogbmV4dCBhY3RpdmUgbGluayB0aW1lcgorICAgIGlmICgqc3ltYm9sVGltZVRockV2ZW50ICYgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX0UpCisgICAgeworI2lmZGVmIFNJTVVMQVRPUgorICAgICAgICAqc3ltYm9sVGltZVRockV2ZW50ICY9IH5NU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfRTsKKyNlbHNlCisgICAgICAgICpzeW1ib2xUaW1lVGhyRXZlbnQgID0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX0U7CisjZW5kaWYKKworI2lmbmRlZiBGVERGX0xJVEUKKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICAgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3RzY2hQcm9jZXNzUmVxdWVzdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKyAgICAgICAgICAgIGlmIChGVERGX3JlcUN1cnJlbnQgJiYKKyAgICAgICAgICAgICAgICBGVERGX3JlcUN1cnJlbnQtPm1zZ0lkID09IEZUREZfQVNTT0NJQVRFX1JFUVVFU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9Bc3NvY0FkbWluICphc3NvY0FkbWluID0gJkZUREZfYWE7CisKKyAgICAgICAgICAgICAgICAvLyBtYWNSZXNwb25zZVdhaXRUaW1lIGV4cGlyZWQKKyAgICAgICAgICAgICAgICBhc3NvY0FkbWluLT5kYXRhUiA9IEZUREZfVFJVRTsKKworICAgICAgICAgICAgICAgIEZUREZfc2VuZEFzc29jaWF0ZURhdGFSZXF1ZXN0KCk7CisgICAgICAgICAgICB9CisKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgfQorCisgICAgLy8gcGVuZGluZyBxdWV1ZSBzeW1ib2wgdGltZXIgZXZlbnQKKyAgICBpZiAoKnN5bWJvbFRpbWVUaHJFdmVudCAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX0UpCisgICAgeworI2lmZGVmIFNJTVVMQVRPUgorICAgICAgICAqc3ltYm9sVGltZVRockV2ZW50ICY9IH5NU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9FOworI2Vsc2UKKyAgICAgICAgKnN5bWJvbFRpbWVUaHJFdmVudCAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9FOworI2VuZGlmCisKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgICAgIEZUREZfcmVtb3ZlVHhQZW5kaW5nVGltZXIoTlVMTCk7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIH0KK30KKworI2lmbmRlZiBGVERGX0xJVEUKK0ZUREZfU3RhdHVzIEZUREZfc2VuZEZyYW1lKEZUREZfQ2hhbm5lbE51bWJlciAgIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0ZyYW1lSGVhZGVyICAgICpmcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU2VjdXJpdHlIZWFkZXIgKnNlY3VyaXR5SGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCAgICAgICAgICAqdHhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0RhdGFMZW5ndGggICAgICBwYXlsb2FkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQgICAgICAgICAgKnBheWxvYWQpCit7CisgICAgRlRERl9PY3RldCAgICAgKnR4QnVmUHRyICAgICAgID0gKEZUREZfT2N0ZXQgKikgRlRERl9HRVRfUkVHX0FERFIoUkVURU5USU9OX1JBTV9UWF9GSUZPKTsKKworICAgIEZUREZfRGF0YUxlbmd0aCBtaWNMZW5ndGggICAgICA9IEZUREZfZ2V0TWljTGVuZ3RoKHNlY3VyaXR5SGVhZGVyLT5zZWN1cml0eUxldmVsKTsKKyAgICBGVERGX0RhdGFMZW5ndGggcGh5UGF5bG9hZFNpemUgPSAodHhQdHIgLSB0eEJ1ZlB0cikgLSAxICsgcGF5bG9hZFNpemUgKyBtaWNMZW5ndGggKyBGVERGX0ZDU19MRU5HVEg7CisKKyAgICBpZiAocGh5UGF5bG9hZFNpemUgPiAoRlRERl9CVUZGRVJfTEVOR1RIIC0gMSkpCisgICAgeworICAgICAgICByZXR1cm4gRlRERl9GUkFNRV9UT09fTE9ORzsKKyAgICB9CisKKyAgICAqdHhCdWZQdHIgPSBwaHlQYXlsb2FkU2l6ZTsKKworICAgIEZUREZfT2N0ZXQgKnByaXZQdHIgPSB0eFB0cjsKKworICAgIGludCAgICAgICAgIG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgcGF5bG9hZFNpemU7IG4rKykKKyAgICB7CisgICAgICAgICp0eFB0cisrID0gKnBheWxvYWQrKzsKKyAgICB9CisKKyAgICBGVERGX1N0YXR1cyBzdGF0dXMgPSBGVERGX3NlY3VyZUZyYW1lKHR4QnVmUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdlB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlIZWFkZXIpOworCisgICAgaWYgKHN0YXR1cyAhPSBGVERGX1NVQ0NFU1MpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIEZUREZfQml0bWFwOCAgICAgICBvcHRpb25zICAgPSBmcmFtZUhlYWRlci0+b3B0aW9uczsKKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICptZXRhRGF0YTAgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAsIEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICptZXRhRGF0YTEgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEsIEZUREZfVFhfREFUQV9CVUZGRVIpOworCisgICAgdWludDE2X3QgICAgICAgICAgIHBoeUF0dHIgICA9IChGVERGX3BpYi5DQ0FNb2RlICYgMHgzKSB8IDB4MDggfCAoKGNoYW5uZWwgLSAxMSkgJiAweDBGKSA8PCA0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUREZfcGliLlRYUG93ZXIgJiAweDA3KSA8PCAxMjsKKworICAgIG1ldGFEYXRhMCAgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAsIEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgIG1ldGFEYXRhMSAgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEsIEZUREZfVFhfREFUQV9CVUZGRVIpOworCisgICAgKm1ldGFEYXRhMCA9CisgICAgICAgICgocGh5UGF5bG9hZFNpemUgPDwgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCkgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIKSB8CisgICAgICAgICgocGh5QXR0ciA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUikgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUikgfAorICAgICAgICAoKGZyYW1lSGVhZGVyLT5mcmFtZVR5cGUgPDwgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSkgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFKSB8CisgICAgICAgIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BIHwKKyAgICAgICAgKChvcHRpb25zICYgRlRERl9PUFRfQUNLX1JFUVVFU1RFRCkgPyBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQUNLUkVRVUVTVCA6IDApIHwKKyAgICAgICAgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQTsKKworICAgICptZXRhRGF0YTEgPQorICAgICAgICAoKGZyYW1lSGVhZGVyLT5TTiA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04pICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOKTsKKworICAgIHVpbnQzMl90IHBoeUNzbWFDYUF0dHIgPSAoRlRERl9waWIuQ0NBTW9kZSAmIDB4MykgfCAoKGNoYW5uZWwgLSAxMSkgJiAweGYpIDw8IDQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRERl9waWIuVFhQb3dlciAmIDB4MDcpIDw8IDEyOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUEhZQ1NNQUNBQVRUUiwgcGh5Q3NtYUNhQXR0cik7CisKKyNpZm5kZWYgRlRERl9OT19DU0wKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgPT0gRlRERl9UUlVFKQorICAgIHsKKyAgICAgICAgaWYgKGZyYW1lSGVhZGVyLT5kc3RBZGRyTW9kZSAhPSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGVERGX05PX1NIT1JUX0FERFJFU1M7CisgICAgICAgIH0KKworICAgICAgICAvLyBDbGVhciBDU01BQ0Egb2YgZGF0YSBmcmFtZSBidWZmZXIKKyAgICAgICAgKm1ldGFEYXRhMCAmPSB+TVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQV9FTkE7CisKKyAgICAgICAgdHhQdHIgICAgICAgPSB0eEJ1ZlB0ciA9ICgoRlRERl9PY3RldCAqKSBGVERGX0dFVF9SRUdfQUREUihSRVRFTlRJT05fUkFNX1RYX0ZJRk8pKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRERl9CVUZGRVJfTEVOR1RIICogRlRERl9UWF9XQUtFVVBfQlVGRkVSKTsKKworICAgICAgICAqdHhQdHIrKyAgICAgICAgICAgICAgICAgICAgPSAweDBkOworICAgICAgICAqdHhQdHIrKyAgICAgICAgICAgICAgICAgICAgPSAweDJkOworICAgICAgICAqdHhQdHIrKyAgICAgICAgICAgICAgICAgICAgPSAweDgxOworICAgICAgICAqdHhQdHIrKyAgICAgICAgICAgICAgICAgICAgPSBmcmFtZUhlYWRlci0+U047CisgICAgICAgICooRlRERl9QQU5JZCAqKSB0eFB0ciAgICAgICAgPSBmcmFtZUhlYWRlci0+ZHN0UEFOSWQ7CisgICAgICAgIHR4UHRyICAgICAgICAgICAgICAgICAgICAgICs9IDI7CisgICAgICAgICooRlRERl9TaG9ydEFkZHJlc3MgKikgdHhQdHIgPSBmcmFtZUhlYWRlci0+ZHN0QWRkci5zaG9ydEFkZHJlc3M7CisgICAgICAgIHR4UHRyICAgICAgICAgICAgICAgICAgICAgICs9IDI7CisgICAgICAgICp0eFB0cisrICAgICAgICAgICAgICAgICAgICA9IDB4ODI7CisgICAgICAgICp0eFB0cisrICAgICAgICAgICAgICAgICAgICA9IDB4MGU7CisKKyAgICAgICAgbWV0YURhdGEwICAgICAgICAgICAgICAgICAgID0gRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChSRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wLCBGVERGX1RYX1dBS0VVUF9CVUZGRVIpOworICAgICAgICBtZXRhRGF0YTEgICAgICAgICAgICAgICAgICAgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEsIEZUREZfVFhfV0FLRVVQX0JVRkZFUik7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eFByaW9yaXR5ID0KKyAgICAgICAgICAgIEZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWSwgRlRERl9UWF9XQUtFVVBfQlVGRkVSKTsKKworICAgICAgICAqbWV0YURhdGEwID0KKyAgICAgICAgICAgICgoMHgwZCA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRV9MRU5HVEgpIHwKKyAgICAgICAgICAgICgocGh5QXR0ciA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUikgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUikgfAorICAgICAgICAgICAgKChGVERGX01VTFRJUFVSUE9TRV9GUkFNRSA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEUpIHwKKyAgICAgICAgICAgIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BIHwKKyAgICAgICAgICAgIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkE7CisKKyAgICAgICAgKm1ldGFEYXRhMSA9CisgICAgICAgICAgICAoKGZyYW1lSGVhZGVyLT5TTiA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04pICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOKTsKKyNpZiBGVERGX1VTRV9QVEkgJiYgRlRERl9VU0VfQVVUT19QVEkKKyAgICAgICAgKnR4UHJpb3JpdHkgfD0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTV0FLRVVQOworI2Vsc2UKKyAgICAgICAgKnR4UHJpb3JpdHkgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfSVNXQUtFVVA7CisjZW5kaWYKKyAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4RmxhZ1NldCA9IEZUREZfR0VUX0ZJRUxEX0FERFIoT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NFVCk7CisKKyNpZm5kZWYgRlRERl9OT19DU0wKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgPT0gRlRERl9UUlVFKQorICAgIHsKKyAgICAgICAgRlRERl9UaW1lIGN1clRpbWUgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCk7CisgICAgICAgIEZUREZfVGltZSBkZWx0YSAgID0gY3VyVGltZSAtIEZUREZfcnpUaW1lOworCisgICAgICAgIGlmIChkZWx0YSA+IDB4ODAwMDAwMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlY2VpdmluZyBhbiB3YWtldXAgZnJhbWUgc2VxdWVuY2UsIGRlbGF5IHNlbmRpbmcgdW50aWwgUlogaGFzIHBhc3NlZC4KKyAgICAgICAgICAgIEZUREZfc2VuZEZyYW1lUGVuZGluZyA9IGZyYW1lSGVhZGVyLT5kc3RBZGRyLnNob3J0QWRkcmVzczsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfVGltZSAgIHdha2V1cFN0YXJ0VGltZTsKKyAgICAgICAgICAgIEZUREZfUGVyaW9kIHdha2V1cFBlcmlvZDsKKworICAgICAgICAgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgICAgICAgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisKKyAgICAgICAgICAgIEZUREZfZ2V0V2FrZXVwUGFyYW1zKGZyYW1lSGVhZGVyLT5kc3RBZGRyLnNob3J0QWRkcmVzcywgJndha2V1cFN0YXJ0VGltZSwgJndha2V1cFBlcmlvZCk7CisKKyAgICAgICAgICAgIEZUREZfdHhJblByb2dyZXNzID0gRlRERl9UUlVFOworICAgICAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNDU0xTVEFSVFNBTVBMRVRJTUUsIHdha2V1cFN0YXJ0VGltZSk7CisgICAgICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ1dVUEVSSU9ELCB3YWtldXBQZXJpb2QpOworCisgICAgICAgICAgICAqdHhGbGFnU2V0IHw9ICgoMSA8PCBGVERGX1RYX0RBVEFfQlVGRkVSKSB8ICgxIDw8IEZUREZfVFhfV0FLRVVQX0JVRkZFUikpOworCisgICAgICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworICAgICAgICBpZiAoIUZUREZfcGliLnRzY2hFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICAqdHhGbGFnU2V0IHw9ICgxIDw8IEZUREZfVFhfREFUQV9CVUZGRVIpOworLy8gICAgICAgICAgICAgICAgU2V0V29yZDE2KFAyX1NFVF9EQVRBX1JFRywgKDEgPDwgMykpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBTZXRXb3JkMTYoUDIzX01PREVfUkVHLCAweDMwMCk7IC8vIFNXIHRyaWdnZXIgLSBvdXRwdXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2b2xhdGlsZSBpbnQgayA9IDA7IGsgPCAxMDA7IGsrKykgeworLy8gICAgICAgICAgICAgICAgICAgICAgICB9CisvLyAgICAgICAgICAgICAgICAgICAgICAgIFNldFdvcmQxNihQMjNfTU9ERV9SRUcsIDB4MDAwKTsvLyBTVyB0cmlnZ2VyIC0gaGlnaCBaCisKKworICAgICAgICB9CisKKyAgICByZXR1cm4gRlRERl9TVUNDRVNTOworfQorCisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKK0ZUREZfU3RhdHVzIEZUREZfc2VuZEFja0ZyYW1lKEZUREZfRnJhbWVIZWFkZXIgICAgKmZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TZWN1cml0eUhlYWRlciAqc2VjdXJpdHlIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0ICAgICAgICAgICp0eFB0cikKK3sKKyAgICBGVERGX09jdGV0ICAgICAqdHhCdWZQdHIgICAgICAgPSAoKEZUREZfT2N0ZXQgKikgRlRERl9HRVRfUkVHX0FERFIoUkVURU5USU9OX1JBTV9UWF9GSUZPKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKiBGVERGX0JVRkZFUl9MRU5HVEg7CisgICAgRlRERl9EYXRhTGVuZ3RoIG1pY0xlbmd0aCAgICAgID0gRlRERl9nZXRNaWNMZW5ndGgoc2VjdXJpdHlIZWFkZXItPnNlY3VyaXR5TGV2ZWwpOworICAgIEZUREZfRGF0YUxlbmd0aCBwaHlQYXlsb2FkU2l6ZSA9ICh0eFB0ciAtIHR4QnVmUHRyKSAtIDEgKyBtaWNMZW5ndGggKyBGVERGX0ZDU19MRU5HVEg7CisKKyAgICAqdHhCdWZQdHIgPSBwaHlQYXlsb2FkU2l6ZTsKKworICAgIEZUREZfU3RhdHVzIHN0YXR1cyA9IEZUREZfc2VjdXJlRnJhbWUodHhCdWZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlIZWFkZXIpOworCisgICAgaWYgKHN0YXR1cyAhPSBGVERGX1NVQ0NFU1MpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICptZXRhRGF0YTAgID0gRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChSRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wLCBGVERGX1RYX0FDS19CVUZGRVIpOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICptZXRhRGF0YTEgID0gRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChSRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8xLCBGVERGX1RYX0FDS19CVUZGRVIpOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eFByaW9yaXR5ID0gRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChPTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZLCBGVERGX1RYX0FDS19CVUZGRVIpOworCisgICAgdWludDE2X3QgICAgICAgICAgIHBoeUF0dHIgICAgPQorICAgICAgICAoRlRERl9waWIuQ0NBTW9kZSAmIDB4MykgfCAweDA4IHwgKEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUEhZUlhBVFRSKSAmIDB4MDBmMCkgfAorICAgICAgICAoRlRERl9waWIuVFhQb3dlciAmIDB4MDcpIDw8IDEyOworCisgICAgKm1ldGFEYXRhMCA9CisgICAgICAgICgocGh5UGF5bG9hZFNpemUgPDwgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCkgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIKSB8CisgICAgICAgICgocGh5QXR0ciA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUikgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUikgfAorICAgICAgICAoKEZUREZfQUNLTk9XTEVER0VNRU5UX0ZSQU1FIDw8IE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEUpICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSkgfAorICAgICAgICBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRU5BOworCisgICAgKm1ldGFEYXRhMSA9CisgICAgICAgICgoZnJhbWVIZWFkZXItPlNOIDw8IE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTikgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04pOworCisjaWYgRlRERl9VU0VfUFRJICYmIEZUREZfVVNFX0FVVE9fUFRJCisgICAgKnR4UHJpb3JpdHkgfD0gMTsKKyNlbHNlCisgICAgKnR4UHJpb3JpdHkgPSAxOworI2VuZGlmCisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqdHhGbGFnU2V0ID0gRlRERl9HRVRfRklFTERfQUREUihPTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU0VUKTsKKworI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgIGlmIChGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICB7CisgICAgICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICAgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisKKyAgICAgICAgRlRERl9QZXJpb2QgdHhBY2tEZWxheVZhbCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMKTsKKworICAgICAgICBpZiAodHhBY2tEZWxheVZhbCA+IDIwKQorICAgICAgICB7CisgICAgICAgICAgICAqdHhGbGFnU2V0IHw9IDEgPDwgRlRERl9UWF9BQ0tfQlVGRkVSOworICAgICAgICB9CisKKyAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworICAgIHsKKyAgICAgICAgKnR4RmxhZ1NldCB8PSAxIDw8IEZUREZfVFhfQUNLX0JVRkZFUjsKKyAgICB9CisKKyAgICBGVERGX3BpYi50cmFmZmljQ291bnRlcnMudHhFbmhBY2tGcm1DbnQrKzsKKworICAgIHJldHVybiBGVERGX1NVQ0NFU1M7Cit9CisjZW5kaWYgLyogIUZUREZfTk9fQ1NMIHx8ICFGVERGX05PX1RTQ0ggKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKK3ZvaWQgRlRERl9zZW5kVHJhbnNwYXJlbnRGcmFtZShGVERGX0RhdGFMZW5ndGggICAgZnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCAgICAgICAgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQ2hhbm5lbE51bWJlciBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfUFRJICAgICAgICAgICBwdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9Cb29sZWFuICAgICAgIGNtc2FTdXBwcmVzcykKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqbWV0YURhdGEwID0gRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChSRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wLCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqbWV0YURhdGExID0gRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChSRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8xLCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqdHhQcmlvcml0eSA9IEZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWSwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyNpZiBGVERGX1RSQU5TUEFSRU5UX1VTRV9XQUlUX0ZPUl9BQ0sKKyAgICBGVERGX0Jvb2xlYW4gdXNlQWNrID0gRlRERl9GQUxTRTsKKyAgICAvL0ZUREZfRnJhbWVIZWFkZXIqICAgICAgICAgZnJhbWVIZWFkZXIgICAgPSAmRlRERl9maDsKKyAgICBGVERGX0ZyYW1lSGVhZGVyIGZyYW1lSGVhZGVyOworICAgIEZUREZfU04gU047CisjZW5kaWYKKyAgICB1aW50MTZfdCAgICAgICAgICAgcGh5QXR0ciAgID0gKEZUREZfcGliLkNDQU1vZGUgJiAweDMpIHwgMHgwOCB8ICgoY2hhbm5lbCAtIDExKSAmIDB4MEYpIDw8IDQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRERl9waWIuVFhQb3dlciAmIDB4MDcpIDw8IDEyOworI2lmIEZUREZfVFJBTlNQQVJFTlRfVVNFX1dBSVRfRk9SX0FDSworCisgICAgaWYgKEZUREZfdHJhbnNwYXJlbnRNb2RlT3B0aW9ucyAmIEZUREZfVFJBTlNQQVJFTlRfV0FJVF9GT1JfQUNLKQorICAgIHsKKyAgICAgICAgRlRERl9nZXRGcmFtZUhlYWRlcihmcmFtZSwgJmZyYW1lSGVhZGVyKTsKKworICAgICAgICBpZiAoZnJhbWVIZWFkZXIub3B0aW9ucyAmIEZUREZfT1BUX0FDS19SRVFVRVNURUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzZUFjayA9IEZUREZfVFJVRTsKKyAgICAgICAgfQorCisgICAgICAgIFNOID0gZnJhbWVIZWFkZXIuU047CisgICAgfQorCisjZW5kaWYKKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICAqdHhQcmlvcml0eSA9ICgocHRpIDw8IE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QVElfVFgpICYKKyAgICAgICAgICAgICAgICAgICBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUFRJX1RYKSB8IDE7CisjZW5kaWYKKyAgICAqbWV0YURhdGEwID0KKyAgICAgICAgKChmcmFtZUxlbmd0aCA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRV9MRU5HVEgpIHwKKyAgICAgICAgKChwaHlBdHRyIDw8IE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSKSB8CisgICAgICAgICgoKCpmcmFtZSAmIDB4NykgPDwgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSkgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFKSB8CisgICAgICAgICgoY21zYVN1cHByZXNzKSA/IDAgOiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBX0VOQSkgfAorI2lmIEZUREZfVFJBTlNQQVJFTlRfVVNFX1dBSVRfRk9SX0FDSworICAgICAgICAoKHVzZUFjaykgPyBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQUNLUkVRVUVTVCA6IDApIHwKKyNlbmRpZgorICAgICAgICAoKEZUREZfdHJhbnNwYXJlbnRNb2RlT3B0aW9ucyAmCisgICAgICAgICAgRlRERl9UUkFOU1BBUkVOVF9FTkFCTEVfRkNTX0dFTkVSQVRJT04pID8gTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQSA6IDApOworCisjaWYgRlRERl9UUkFOU1BBUkVOVF9VU0VfV0FJVF9GT1JfQUNLCisKKyAgICBpZiAodXNlQWNrKQorICAgIHsKKyAgICAgICAgKm1ldGFEYXRhMSA9ICgoU04gPDwgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICptZXRhRGF0YTEgPSAoKDAgPDwgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTik7CisgICAgfQorCisjZWxzZQorICAgICptZXRhRGF0YTEgPQorICAgICAgICAoKDAgPDwgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTik7CisjZW5kaWYKKworICAgIHVpbnQzMl90IHBoeUNzbWFDYUF0dHIgPSAoRlRERl9waWIuQ0NBTW9kZSAmIDB4MykgfCAoKGNoYW5uZWwgLSAxMSkgJiAweGYpIDw8IDQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRERl9waWIuVFhQb3dlciAmIDB4MDcpIDw8IDEyOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUEhZQ1NNQUNBQVRUUiwgcGh5Q3NtYUNhQXR0cik7CisjaWYgRlRERl9VU0VfUFRJICYmICFGVERGX1VTRV9BVVRPX1BUSQorICAgIGh3X2NvZXhfdXBkYXRlX2Z0ZGZfcHRpKChod19jb2V4X3B0aV90KSBwdGksIE5VTEwsIHRydWUpOworI2Vsc2UKKyAgICAvLyBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1BUSV9UWCwgcHRpKTsKKyNlbmRpZgorICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eEZsYWdTZXQgPSBGVERGX0dFVF9GSUVMRF9BRERSKE9OX09GRl9SRUdNQVBfVFhfRkxBR19TRVQpOworICAgICp0eEZsYWdTZXQgfD0gKDEgPDwgRlRERl9UWF9EQVRBX0JVRkZFUik7Cit9CisKK3ZvaWQgRlRERl9pbml0UXVldWVzKHZvaWQpCit7CisjaWZuZGVmIEZUREZfTElURQorICAgIEZUREZfaW5pdFF1ZXVlKCZGVERGX2ZyZWVRdWV1ZSk7CisgICAgRlRERl9pbml0UXVldWUoJkZUREZfcmVxUXVldWUpOworCisgICAgaW50IG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9OUl9PRl9SRVFfQlVGRkVSUzsgbisrKQorICAgIHsKKyAgICAgICAgRlRERl9xdWV1ZUJ1ZmZlckhlYWQoJkZUREZfcmVxQnVmZmVyc1sgbiBdLCAmRlRERl9mcmVlUXVldWUpOworCisgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLmFkZHIuZXh0QWRkcmVzcyA9IDB4RkZGRkZGRkZGRkZGRkZGRkxMOworICAgICAgICBGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5hZGRyTW9kZSAgICAgICAgPSBGVERGX05PX0FERFJFU1M7CisgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLlBBTklkICAgICAgICAgICA9IDB4RkZGRjsKKyAgICAgICAgRlRERl9pbml0UXVldWUoJkZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLnF1ZXVlKTsKKworICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVyTGlzdFsgbiBdLmZyZWUgPSBGVERGX1RSVUU7CisgICAgICAgIEZUREZfdHhQZW5kaW5nVGltZXJMaXN0WyBuIF0ubmV4dCA9IE5VTEw7CisgICAgfQorCisgICAgRlRERl90eFBlbmRpbmdUaW1lckhlYWQgPSBGVERGX3R4UGVuZGluZ1RpbWVyTGlzdDsKKyAgICBGVERGX3R4UGVuZGluZ1RpbWVyVGltZSA9IDA7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworI2lmbmRlZiBGVERGX1BIWV9BUEkKKyAgICBGVERGX3JlcUN1cnJlbnQgICAgICAgICA9IE5VTEw7CisjZW5kaWYKK30KKworI2lmbmRlZiBGVERGX0xJVEUKK3ZvaWQgRlRERl9pbml0UXVldWUoRlRERl9RdWV1ZSAqcXVldWUpCit7CisgICAgcXVldWUtPmhlYWQubmV4dCA9IChGVERGX0J1ZmZlciAqKSAmcXVldWUtPnRhaWw7CisgICAgcXVldWUtPmhlYWQucHJldiA9IE5VTEw7CisgICAgcXVldWUtPnRhaWwubmV4dCA9IE5VTEw7CisgICAgcXVldWUtPnRhaWwucHJldiA9IChGVERGX0J1ZmZlciAqKSAmcXVldWUtPmhlYWQ7Cit9CisKK3ZvaWQgRlRERl9xdWV1ZUJ1ZmZlckhlYWQoRlRERl9CdWZmZXIgKmJ1ZmZlciwgRlRERl9RdWV1ZSAqcXVldWUpCit7CisgICAgRlRERl9CdWZmZXIgKm5leHQgPSBxdWV1ZS0+aGVhZC5uZXh0OworCisgICAgcXVldWUtPmhlYWQubmV4dCAgICA9IGJ1ZmZlcjsKKyAgICBuZXh0LT5oZWFkZXIucHJldiAgID0gYnVmZmVyOworICAgIGJ1ZmZlci0+aGVhZGVyLm5leHQgPSBuZXh0OworICAgIGJ1ZmZlci0+aGVhZGVyLnByZXYgPSAoRlRERl9CdWZmZXIgKikgJnF1ZXVlLT5oZWFkOworfQorCitGVERGX0J1ZmZlciAqRlRERl9kZXF1ZXVlQnVmZmVyVGFpbChGVERGX1F1ZXVlICpxdWV1ZSkKK3sKKyAgICBGVERGX0J1ZmZlciAqYnVmZmVyID0gcXVldWUtPnRhaWwucHJldjsKKworICAgIGlmIChidWZmZXItPmhlYWRlci5wcmV2ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBxdWV1ZS0+dGFpbC5wcmV2ICAgICAgICAgICAgICAgICA9IGJ1ZmZlci0+aGVhZGVyLnByZXY7CisgICAgYnVmZmVyLT5oZWFkZXIucHJldi0+aGVhZGVyLm5leHQgPSAoRlRERl9CdWZmZXIgKikgJnF1ZXVlLT50YWlsOworCisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworRlRERl9TdGF0dXMgRlRERl9xdWV1ZVJlcUhlYWQoRlRERl9Nc2dCdWZmZXIgKnJlcXVlc3QsIEZUREZfUXVldWUgKnF1ZXVlKQoreworICAgIEZUREZfQnVmZmVyICpidWZmZXIgPSBGVERGX2RlcXVldWVCdWZmZXJUYWlsKCZGVERGX2ZyZWVRdWV1ZSk7CisKKyAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRlRERl9UUkFOU0FDVElPTl9PVkVSRkxPVzsKKyAgICB9CisKKyAgICBGVERGX0J1ZmZlciAqbmV4dCA9IHF1ZXVlLT5oZWFkLm5leHQ7CisKKyAgICBxdWV1ZS0+aGVhZC5uZXh0ICAgID0gYnVmZmVyOworICAgIG5leHQtPmhlYWRlci5wcmV2ICAgPSBidWZmZXI7CisgICAgYnVmZmVyLT5oZWFkZXIubmV4dCA9IG5leHQ7CisgICAgYnVmZmVyLT5oZWFkZXIucHJldiA9IChGVERGX0J1ZmZlciAqKSAmcXVldWUtPmhlYWQ7CisgICAgYnVmZmVyLT5yZXF1ZXN0ICAgICA9IHJlcXVlc3Q7CisKKyAgICByZXR1cm4gRlRERl9TVUNDRVNTOworfQorCitGVERGX01zZ0J1ZmZlciAqRlRERl9kZXF1ZXVlUmVxVGFpbChGVERGX1F1ZXVlICpxdWV1ZSkKK3sKKyAgICBGVERGX0J1ZmZlciAqYnVmZmVyID0gcXVldWUtPnRhaWwucHJldjsKKworICAgIGlmIChidWZmZXItPmhlYWRlci5wcmV2ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBxdWV1ZS0+dGFpbC5wcmV2ICAgICAgICAgICAgICAgICA9IGJ1ZmZlci0+aGVhZGVyLnByZXY7CisgICAgYnVmZmVyLT5oZWFkZXIucHJldi0+aGVhZGVyLm5leHQgPSAoRlRERl9CdWZmZXIgKikgJnF1ZXVlLT50YWlsOworCisgICAgRlRERl9Nc2dCdWZmZXIgKnJlcXVlc3QgPSBidWZmZXItPnJlcXVlc3Q7CisKKyAgICBGVERGX3F1ZXVlQnVmZmVySGVhZChidWZmZXIsICZGVERGX2ZyZWVRdWV1ZSk7CisKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworRlRERl9Nc2dCdWZmZXIgKkZUREZfZGVxdWV1ZUJ5SGFuZGxlKEZUREZfSGFuZGxlIGhhbmRsZSwgRlRERl9RdWV1ZSAqcXVldWUpCit7CisgICAgRlRERl9CdWZmZXIgKmJ1ZmZlciA9IHF1ZXVlLT5oZWFkLm5leHQ7CisKKyAgICB3aGlsZSAoYnVmZmVyLT5oZWFkZXIubmV4dCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZmZlci0+cmVxdWVzdCAmJgorICAgICAgICAgICAgYnVmZmVyLT5yZXF1ZXN0LT5tc2dJZCA9PSBGVERGX0RBVEFfUkVRVUVTVCAmJgorICAgICAgICAgICAgKChGVERGX0RhdGFSZXF1ZXN0ICopIGJ1ZmZlci0+cmVxdWVzdCktPm1zZHVIYW5kbGUgPT0gaGFuZGxlKQorICAgICAgICB7CisgICAgICAgICAgICBidWZmZXItPmhlYWRlci5wcmV2LT5oZWFkZXIubmV4dCA9IGJ1ZmZlci0+aGVhZGVyLm5leHQ7CisgICAgICAgICAgICBidWZmZXItPmhlYWRlci5uZXh0LT5oZWFkZXIucHJldiA9IGJ1ZmZlci0+aGVhZGVyLnByZXY7CisKKyAgICAgICAgICAgIEZUREZfTXNnQnVmZmVyICpyZXF1ZXN0ID0gYnVmZmVyLT5yZXF1ZXN0OworCisgICAgICAgICAgICBGVERGX3F1ZXVlQnVmZmVySGVhZChidWZmZXIsICZGVERGX2ZyZWVRdWV1ZSk7CisKKyAgICAgICAgICAgIHJldHVybiByZXF1ZXN0OworICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyID0gYnVmZmVyLT5oZWFkZXIubmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworRlRERl9Nc2dCdWZmZXIgKkZUREZfZGVxdWV1ZUJ5UmVxdWVzdChGVERGX01zZ0J1ZmZlciAqcmVxdWVzdCwgRlRERl9RdWV1ZSAqcXVldWUpCit7CisgICAgRlRERl9CdWZmZXIgKmJ1ZmZlciA9IHF1ZXVlLT5oZWFkLm5leHQ7CisKKyAgICB3aGlsZSAoYnVmZmVyLT5oZWFkZXIubmV4dCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZmZlci0+cmVxdWVzdCA9PSByZXF1ZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBidWZmZXItPmhlYWRlci5wcmV2LT5oZWFkZXIubmV4dCA9IGJ1ZmZlci0+aGVhZGVyLm5leHQ7CisgICAgICAgICAgICBidWZmZXItPmhlYWRlci5uZXh0LT5oZWFkZXIucHJldiA9IGJ1ZmZlci0+aGVhZGVyLnByZXY7CisKKyAgICAgICAgICAgIEZUREZfTXNnQnVmZmVyICpyZXEgPSBidWZmZXItPnJlcXVlc3Q7CisKKyAgICAgICAgICAgIEZUREZfcXVldWVCdWZmZXJIZWFkKGJ1ZmZlciwgJkZUREZfZnJlZVF1ZXVlKTsKKworICAgICAgICAgICAgcmV0dXJuIHJlcTsKKyAgICAgICAgfQorCisgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci0+aGVhZGVyLm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0ZUREZfQm9vbGVhbiBGVERGX2lzUXVldWVFbXB0eShGVERGX1F1ZXVlICpxdWV1ZSkKK3sKKyAgICBpZiAocXVldWUtPmhlYWQubmV4dC0+aGVhZGVyLm5leHQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBGVERGX1RSVUU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBGVERGX0ZBTFNFOworICAgIH0KK30KKworc3RhdGljIEZUREZfUGVuZGluZ1RMICpGVERGX2ZpbmRGcmVlUGVuZGluZ1RpbWVyKHZvaWQpCit7CisgICAgdWludDhfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IEZUREZfTlJfT0ZfUkVRX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChGVERGX3R4UGVuZGluZ1RpbWVyTGlzdFsgaSBdLmZyZWUgPT0gRlRERl9UUlVFKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAmRlRERl90eFBlbmRpbmdUaW1lckxpc3RbIGkgXTsKK30KKwordm9pZCBGVERGX2FkZFR4UGVuZGluZ1RpbWVyKEZUREZfTXNnQnVmZmVyICpyZXF1ZXN0LCB1aW50OF90IHBlbmRMaXN0TnIsIEZUREZfVGltZSBkZWx0YSwgdm9pZCAoKiBmdW5jKSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9QZW5kaW5nVEwgKikpCit7CisgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworCisgICAgRlRERl9QZW5kaW5nVEwgKnB0ciAgICAgICA9IEZUREZfdHhQZW5kaW5nVGltZXJIZWFkOworICAgIEZUREZfVGltZSAgICAgICB0aW1lc3RhbXAgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCk7CisKKyAgICBpZiAocHRyLT5mcmVlID09IEZUREZfRkFMU0UpCisgICAgeworICAgICAgICB3aGlsZSAocHRyKQorICAgICAgICB7CisgICAgICAgICAgICBwdHItPmRlbHRhIC09IHRpbWVzdGFtcCAtIEZUREZfdHhQZW5kaW5nVGltZXJMVDsKKyAgICAgICAgICAgIHB0ciAgICAgICAgID0gcHRyLT5uZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgRlRERl90eFBlbmRpbmdUaW1lckxUID0gdGltZXN0YW1wOworICAgIHB0ciAgICAgICAgICAgICAgICAgICA9IEZUREZfdHhQZW5kaW5nVGltZXJIZWFkOworCisgICAgaWYgKHB0ci0+ZnJlZSA9PSBGVERGX1RSVUUpCisgICAgeworICAgICAgICBwdHItPmZyZWUgICAgICAgPSBGVERGX0ZBTFNFOworICAgICAgICBwdHItPm5leHQgICAgICAgPSBOVUxMOworICAgICAgICBwdHItPnJlcXVlc3QgICAgPSByZXF1ZXN0OworICAgICAgICBwdHItPmRlbHRhICAgICAgPSBkZWx0YTsKKyAgICAgICAgcHRyLT5wZW5kTGlzdE5yID0gcGVuZExpc3ROcjsKKyAgICAgICAgcHRyLT5mdW5jICAgICAgID0gZnVuYzsKKworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIsIGRlbHRhICsgdGltZXN0YW1wKTsKKyAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lclRpbWUgPSBkZWx0YSArIHRpbWVzdGFtcDsKKyAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwdHItPmRlbHRhID4gZGVsdGEpCisgICAgeworICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVySGVhZCAgICAgICAgICAgICA9IEZUREZfZmluZEZyZWVQZW5kaW5nVGltZXIoKTsKKyAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lckhlYWQtPmZyZWUgICAgICAgPSBGVERGX0ZBTFNFOworICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVySGVhZC0+bmV4dCAgICAgICA9IHB0cjsKKyAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lckhlYWQtPnJlcXVlc3QgICAgPSByZXF1ZXN0OworICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVySGVhZC0+ZGVsdGEgICAgICA9IGRlbHRhOworICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVySGVhZC0+cGVuZExpc3ROciA9IHBlbmRMaXN0TnI7CisgICAgICAgIEZUREZfdHhQZW5kaW5nVGltZXJIZWFkLT5mdW5jICAgICAgID0gZnVuYzsKKworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIsIGRlbHRhICsgdGltZXN0YW1wKTsKKyAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lclRpbWUgPSBkZWx0YSArIHRpbWVzdGFtcDsKKyAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChwdHItPmRlbHRhID09IGRlbHRhKQorICAgIHsKKyAgICAgICAgZGVsdGErKzsKKyAgICB9CisKKyAgICBGVERGX1BlbmRpbmdUTCAqcHJldjsKKworICAgIHdoaWxlIChwdHItPm5leHQpCisgICAgeworICAgICAgICBwcmV2ID0gcHRyOworICAgICAgICBwdHIgID0gcHRyLT5uZXh0OworCisgICAgICAgIGlmIChwdHItPmRlbHRhID09IGRlbHRhKQorICAgICAgICB7CisgICAgICAgICAgICBkZWx0YSsrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHByZXYtPmRlbHRhIDwgZGVsdGEgJiYgcHRyLT5kZWx0YSA+IGRlbHRhKQorICAgICAgICB7CisgICAgICAgICAgICBwcmV2LT5uZXh0ICAgICAgID0gRlRERl9maW5kRnJlZVBlbmRpbmdUaW1lcigpOworICAgICAgICAgICAgcHJldi0+bmV4dC0+bmV4dCA9IHB0cjsKKyAgICAgICAgICAgIHB0ciAgICAgICAgICAgICAgPSBwcmV2LT5uZXh0OworICAgICAgICAgICAgcHRyLT5mcmVlICAgICAgICA9IEZUREZfRkFMU0U7CisgICAgICAgICAgICBwdHItPnJlcXVlc3QgICAgID0gcmVxdWVzdDsKKyAgICAgICAgICAgIHB0ci0+ZGVsdGEgICAgICAgPSBkZWx0YTsKKyAgICAgICAgICAgIHB0ci0+cGVuZExpc3ROciAgPSBwZW5kTGlzdE5yOworICAgICAgICAgICAgcHRyLT5mdW5jICAgICAgICA9IGZ1bmM7CisKKyAgICAgICAgICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdHItPm5leHQgICAgICAgPSBGVERGX2ZpbmRGcmVlUGVuZGluZ1RpbWVyKCk7CisgICAgcHRyICAgICAgICAgICAgID0gcHRyLT5uZXh0OworICAgIHB0ci0+ZnJlZSAgICAgICA9IEZUREZfRkFMU0U7CisgICAgcHRyLT5uZXh0ICAgICAgID0gTlVMTDsKKyAgICBwdHItPnJlcXVlc3QgICAgPSByZXF1ZXN0OworICAgIHB0ci0+ZGVsdGEgICAgICA9IGRlbHRhOworICAgIHB0ci0+cGVuZExpc3ROciA9IHBlbmRMaXN0TnI7CisgICAgcHRyLT5mdW5jICAgICAgID0gZnVuYzsKKworICAgIEZUREZfZXhpdENyaXRpY2FsKCk7Cit9CisKK3ZvaWQgRlRERl9yZW1vdmVUeFBlbmRpbmdUaW1lcihGVERGX01zZ0J1ZmZlciAqcmVxdWVzdCkKK3sKKyAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisKKyAgICBGVERGX1BlbmRpbmdUTCAqcHRyICAgICAgID0gRlRERl90eFBlbmRpbmdUaW1lckhlYWQ7CisgICAgRlRERl9UaW1lICAgICAgIHRpbWVzdGFtcCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKworICAgIGlmIChwdHItPmZyZWUgPT0gRlRERl9UUlVFKQorICAgIHsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSLCB0aW1lc3RhbXAgLSAxKTsKKyAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lclRpbWUgPSB0aW1lc3RhbXAgLSAxOworICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd2hpbGUgKHB0cikKKyAgICB7CisgICAgICAgIHB0ci0+ZGVsdGEgLT0gdGltZXN0YW1wIC0gRlRERl90eFBlbmRpbmdUaW1lckxUOworICAgICAgICBwdHIgICAgICAgICA9IHB0ci0+bmV4dDsKKyAgICB9CisKKyAgICBGVERGX3R4UGVuZGluZ1RpbWVyTFQgPSB0aW1lc3RhbXA7CisgICAgcHRyICAgICAgICAgICAgICAgICAgID0gRlRERl90eFBlbmRpbmdUaW1lckhlYWQ7CisKKyAgICBpZiAoIXJlcXVlc3QgfHwgcHRyLT5yZXF1ZXN0ID09IHJlcXVlc3QpCisgICAgeworICAgICAgICBpZiAocHRyLT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX1BlbmRpbmdUTCAqdGVtcCA9IHB0cjsKKworICAgICAgICAgICAgaWYgKHB0ci0+bmV4dC0+ZGVsdGEgPCA3NSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAodGVtcCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRlbXAtPmRlbHRhICs9IDc1OworICAgICAgICAgICAgICAgICAgICB0ZW1wICAgICAgICAgPSB0ZW1wLT5uZXh0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSLCB0aW1lc3RhbXAgKyBwdHItPm5leHQtPmRlbHRhKTsKKyAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nVGltZXJUaW1lID0gdGltZXN0YW1wICsgcHRyLT5uZXh0LT5kZWx0YTsKKyAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nVGltZXJIZWFkID0gcHRyLT5uZXh0OworCisgICAgICAgICAgICBwdHItPmZyZWUgICAgICAgICAgICAgICA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgIHB0ci0+bmV4dCAgICAgICAgICAgICAgID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiwgdGltZXN0YW1wIC0gMSk7CisgICAgICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVyVGltZSA9IHRpbWVzdGFtcCAtIDE7CisKKyAgICAgICAgICAgIHB0ci0+ZnJlZSA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgIHB0ci0+bmV4dCA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworCisgICAgICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHB0ci0+ZnVuYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdHItPmZ1bmMocHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGVERGX1BlbmRpbmdUTCAqcHJldiA9IHB0cjsKKworICAgIHdoaWxlIChwdHItPm5leHQpCisgICAgeworICAgICAgICBwcmV2ID0gcHRyOworICAgICAgICBwdHIgID0gcHRyLT5uZXh0OworCisgICAgICAgIGlmIChwdHItPnJlcXVlc3QgPT0gcmVxdWVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJldi0+bmV4dCA9IHB0ci0+bmV4dDsKKyAgICAgICAgICAgIHB0ci0+ZnJlZSAgPSBGVERGX1RSVUU7CisgICAgICAgICAgICBwdHItPm5leHQgID0gTlVMTDsKKworICAgICAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiwgdGltZXN0YW1wIC0gMSk7CisgICAgRlRERl90eFBlbmRpbmdUaW1lclRpbWUgPSB0aW1lc3RhbXAgLSAxOworICAgIEZUREZfZXhpdENyaXRpY2FsKCk7Cit9CisKK3ZvaWQgRlRERl9yZXN0b3JlVHhQZW5kaW5nVGltZXIodm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIsIEZUREZfdHhQZW5kaW5nVGltZXJUaW1lKTsKK30KKworRlRERl9Cb29sZWFuIEZUREZfZ2V0VHhQZW5kaW5nVGltZXJIZWFkKEZUREZfVGltZSAqdGltZSkKK3sKKyAgICBGVERGX1BlbmRpbmdUTCAqcHRyID0gRlRERl90eFBlbmRpbmdUaW1lckhlYWQ7CisKKyAgICBpZiAocHRyLT5mcmVlID09IEZUREZfVFJVRSkKKyAgICB7CisgICAgICAgIHJldHVybiBGVERGX0ZBTFNFOworICAgIH0KKworICAgICp0aW1lID0gRlRERl90eFBlbmRpbmdUaW1lclRpbWU7CisgICAgcmV0dXJuIEZUREZfVFJVRTsKK30KKworI2lmbmRlZiBGVERGX05PX1RTQ0gKK3ZvaWQgRlRERl9wcm9jZXNzS2VlcEFsaXZlVGltZXJFeHAoRlRERl9QZW5kaW5nVEwgKnB0cikKK3sKKyAgICBGVERGX1JlbW90ZVJlcXVlc3QgKnJlbW90ZVJlcXVlc3QgPSAoRlRERl9SZW1vdGVSZXF1ZXN0ICopcHRyLT5yZXF1ZXN0OworCisgICAgcmVtb3RlUmVxdWVzdC0+bXNnSWQgICAgPSBGVERGX1JFTU9URV9SRVFVRVNUOworICAgIHJlbW90ZVJlcXVlc3QtPnJlbW90ZUlkID0gRlRERl9SRU1PVEVfS0VFUF9BTElWRTsKKyAgICByZW1vdGVSZXF1ZXN0LT5kc3RBZGRyICA9IEZUREZfbmVpZ2hib3JUYWJsZVsgcHRyLT5wZW5kTGlzdE5yIF0uZHN0QWRkcjsKKworICAgIEZUREZfcHJvY2Vzc1JlbW90ZVJlcXVlc3QocmVtb3RlUmVxdWVzdCk7Cit9CisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisKK3ZvaWQgRlRERl9zZW5kVHJhbnNhY3Rpb25FeHBpcmVkKEZUREZfUGVuZGluZ1RMICpwdHIpCit7CisgICAgRlRERl9Nc2dCdWZmZXIgKnJlcSA9CisgICAgICAgIEZUREZfZGVxdWV1ZUJ5UmVxdWVzdChwdHItPnJlcXVlc3QsICZGVERGX3R4UGVuZGluZ0xpc3RbIHB0ci0+cGVuZExpc3ROciBdLnF1ZXVlKTsKKworICAgIGlmICghcmVxKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChGVERGX2lzUXVldWVFbXB0eSgmRlRERl90eFBlbmRpbmdMaXN0WyBwdHItPnBlbmRMaXN0TnIgXS5xdWV1ZSkpCisgICAgeworI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgICAgICBpZiAoRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgcHRyLT5wZW5kTGlzdE5yIF0uYWRkci5zaG9ydEFkZHJlc3MgPSAweGZmZmU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworICAgICAgICB7CisjaWYgRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8KKworICAgICAgICAgICAgaWYgKEZUREZfdHhQZW5kaW5nTGlzdFsgcHRyLT5wZW5kTGlzdE5yIF0uYWRkck1vZGUgPT0gRlRERl9TSE9SVF9BRERSRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVpbnQ4X3QgZW50cnksIHNob3J0QWRkcklkeDsKKyAgICAgICAgICAgICAgICBGVERGX0Jvb2xlYW4gZm91bmQgPSBGVERGX2ZwcHJMb29rdXBTaG9ydEFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgcHRyLT5wZW5kTGlzdE5yIF0uYWRkci5zaG9ydEFkZHJlc3MsICZlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNob3J0QWRkcklkeCk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoZm91bmQpOworICAgICAgICAgICAgICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzc1ZhbGlkKGVudHJ5LCBzaG9ydEFkZHJJZHgsIEZUREZfRkFMU0UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBwdHItPnBlbmRMaXN0TnIgXS5hZGRyTW9kZSA9PSBGVERGX0VYVEVOREVEX0FERFJFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWludDhfdCBlbnRyeTsKKyAgICAgICAgICAgICAgICBGVERGX0Jvb2xlYW4gZm91bmQgPSBGVERGX2ZwcHJMb29rdXBFeHRBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3R4UGVuZGluZ0xpc3RbIHB0ci0+cGVuZExpc3ROciBdLmFkZHIuZXh0QWRkcmVzcywgJmVudHJ5KTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0FSTklORyhmb3VuZCk7CisgICAgICAgICAgICAgICAgRlRERl9mcHByU2V0RXh0QWRkcmVzc1ZhbGlkKGVudHJ5LCBGVERGX0ZBTFNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICAgICAgICAgIH0KKworI2VuZGlmIC8qIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPICovCisgICAgICAgICAgICBGVERGX3R4UGVuZGluZ0xpc3RbIHB0ci0+cGVuZExpc3ROciBdLmFkZHJNb2RlID0gRlRERl9OT19BRERSRVNTOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChyZXEtPm1zZ0lkKQorICAgIHsKKyAgICBjYXNlIEZUREZfREFUQV9SRVFVRVNUOgorICAgIHsKKyAgICAgICAgRlRERl9EYXRhUmVxdWVzdCAqZGF0YVJlcXVlc3QgPSAoRlRERl9EYXRhUmVxdWVzdCAqKXJlcTsKKworICAgICAgICBGVERGX3NlbmREYXRhQ29uZmlybShkYXRhUmVxdWVzdCwgRlRERl9UUkFOU0FDVElPTl9FWFBJUkVELCAwLCAwLCAwLCBOVUxMKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEZUREZfQVNTT0NJQVRFX1JFUVVFU1Q6CisgICAgeworICAgICAgICBGVERGX0Fzc29jaWF0ZVJlcXVlc3QgKmFzc29jaWF0ZVJlcXVlc3QgPSAoRlRERl9Bc3NvY2lhdGVSZXF1ZXN0ICopcmVxOworCisgICAgICAgIEZUREZfc2VuZEFzc29jaWF0ZUNvbmZpcm0oYXNzb2NpYXRlUmVxdWVzdCwgRlRERl9UUkFOU0FDVElPTl9FWFBJUkVELCAweGZmZmYpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRlRERl9BU1NPQ0lBVEVfUkVTUE9OU0U6CisgICAgeworICAgICAgICBGVERGX0Fzc29jaWF0ZVJlc3BvbnNlICphc3NvY1Jlc3AgPSAoRlRERl9Bc3NvY2lhdGVSZXNwb25zZSAqKXJlcTsKKworICAgICAgICBGVERGX0FkZHJlc3Mgc3JjQWRkciwgZHN0QWRkcjsKKyAgICAgICAgc3JjQWRkci5leHRBZGRyZXNzID0gRlRERl9waWIuZXh0QWRkcmVzczsKKyAgICAgICAgZHN0QWRkci5leHRBZGRyZXNzID0gYXNzb2NSZXNwLT5kZXZpY2VBZGRyZXNzOworCisgICAgICAgIEZUREZfc2VuZENvbW1TdGF0dXNJbmRpY2F0aW9uKHJlcSwgRlRERl9UUkFOU0FDVElPTl9FWFBJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3BpYi5QQU5JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9FWFRFTkRFRF9BRERSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0VYVEVOREVEX0FERFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jUmVzcC0+c2VjdXJpdHlMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NSZXNwLT5rZXlJZE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jUmVzcC0+a2V5U291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NvY1Jlc3AtPmtleUluZGV4KTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEZUREZfRElTQVNTT0NJQVRFX1JFUVVFU1Q6CisgICAgeworICAgICAgICBGVERGX0Rpc2Fzc29jaWF0ZVJlcXVlc3QgKmRpc1JlcSA9IChGVERGX0Rpc2Fzc29jaWF0ZVJlcXVlc3QgKilyZXE7CisKKyAgICAgICAgRlRERl9zZW5kRGlzYXNzb2NpYXRlQ29uZmlybShkaXNSZXEsIEZUREZfVFJBTlNBQ1RJT05fRVhQSVJFRCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBGVERGX0JFQUNPTl9SRVFVRVNUOgorICAgIHsKKyAgICAgICAgRlRERl9CZWFjb25SZXF1ZXN0ICpiZWFjb25SZXF1ZXN0ID0gKEZUREZfQmVhY29uUmVxdWVzdCAqKXJlcTsKKworICAgICAgICBGVERGX3NlbmRCZWFjb25Db25maXJtKGJlYWNvblJlcXVlc3QsIEZUREZfVFJBTlNBQ1RJT05fRVhQSVJFRCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KK30KKworI2lmbmRlZiBGVERGX05PX1RTQ0gKK3ZvaWQgRlRERl9yZXNldEtlZXBBbGl2ZVRpbWVyKEZUREZfU2hvcnRBZGRyZXNzIGRzdEFkZHIpCit7CisgICAgdWludDhfdCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IEZUREZfTlJfT0ZfTkVJR0hCT1JTOyBuKyspCisgICAgeworICAgICAgICBpZiAoRlRERl9uZWlnaGJvclRhYmxlWyBuIF0uZHN0QWRkciA9PSBkc3RBZGRyKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChuID09IEZUREZfTlJfT0ZfTkVJR0hCT1JTKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZUREZfcmVtb3ZlVHhQZW5kaW5nVGltZXIoKEZUREZfTXNnQnVmZmVyICopJkZUREZfbmVpZ2hib3JUYWJsZVsgbiBdLm1zZyk7CisKKyAgICBGVERGX1RpbWUgdHNUaW1lc2xvdExlbmd0aCA9IChGVERGX1RpbWUpIEZUREZfcGliLnRpbWVzbG90VGVtcGxhdGUudHNUaW1lc2xvdExlbmd0aCAvIDE2OworICAgIEZUREZfVGltZSBkZWx0YSAgICAgICAgICAgID0gdHNUaW1lc2xvdExlbmd0aCAqIEZUREZfbmVpZ2hib3JUYWJsZVsgbiBdLnBlcmlvZDsKKworICAgIEZUREZfYWRkVHhQZW5kaW5nVGltZXIoKEZUREZfTXNnQnVmZmVyICopJkZUREZfbmVpZ2hib3JUYWJsZVsgbiBdLm1zZywgbiwgZGVsdGEsIEZUREZfcHJvY2Vzc0tlZXBBbGl2ZVRpbWVyRXhwKTsKK30KKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKK3ZvaWQgRlRERl9lbmFibGVUcmFuc3BhcmVudE1vZGUoRlRERl9Cb29sZWFuICBlbmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQml0bWFwMzIgb3B0aW9ucykKK3sKKyNpZm5kZWYgRlRERl9MSVRFCisKKyAgICBpZiAoRlRERl9waWIubGVFbmFibGVkID09IEZUREZfVFJVRSB8fAorICAgICAgICBGVERGX3BpYi50c2NoRW5hYmxlZCA9PSBGVERGX1RSVUUpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisjZW5kaWYgLyogIUZUREZfTElURSAqLworCisgICAgRlRERl90cmFuc3BhcmVudE1vZGUgICAgICAgID0gZW5hYmxlOworICAgIEZUREZfdHJhbnNwYXJlbnRNb2RlT3B0aW9ucyA9IG9wdGlvbnM7CisKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTRlJNVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMgJiBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX0ZSQU1FX1RZUEVTKSk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfRElTUlhBQ0tSRVFVRVNUQ0EsIChvcHRpb25zICYgRlRERl9UUkFOU1BBUkVOVF9BVVRPX0FDSyA/IDAgOiAxKSk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0NSQ0VSUk9SLCAob3B0aW9ucyAmIEZUREZfVFJBTlNQQVJFTlRfUEFTU19DUkNfRVJST1IgPyAxIDogMCkpOworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25zICYgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0FMTF9GUkFNRV9WRVJTSU9OID8gMSA6IDApKTsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV1JPTkdEUEFOSUQsCisgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25zICYgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0FMTF9QQU5fSUQgPyAxIDogMCkpOworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RBRERSLCAob3B0aW9ucyAmIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfQUREUiA/IDEgOiAwKSk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0JFQUNPTldST05HUEFOSUQsCisgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25zICYgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0FMTF9CRUFDT04gPyAxIDogMCkpOworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9ucyAmIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfTk9fREVTVF9BRERSID8gMSA6IDApKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTRlJNVFlQRSwgMCk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfRElTUlhBQ0tSRVFVRVNUQ0EsIDApOworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NDUkNFUlJPUiwgMCk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1JFU0ZSQU1FVkVSU0lPTiwgMCk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HRFBBTklELCAwKTsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV1JPTkdEQUREUiwgMCk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0JFQUNPTldST05HUEFOSUQsIDApOworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SLCAwKTsKKyAgICB9Cit9CisKKyNpZiBGVERGX0RCR19CVVNfRU5BQkxFCit2b2lkIEZUREZfY2hlY2tEYmdNb2RlKHZvaWQpCit7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9EQkdfQ09OVFJPTCwgRlRERl9kYmdNb2RlKTsKKworICAgIGlmIChGVERGX2RiZ01vZGUpCisgICAgeworICAgICAgICBGVERGX0RCR19CVVNfR1BJT19DT05GSUcoKTsKKyAgICB9Cit9CisKK3ZvaWQgRlRERl9zZXREYmdNb2RlKEZUREZfRGJnTW9kZSBkYmdNb2RlKQoreworICAgIEZUREZfZGJnTW9kZSA9IGRiZ01vZGU7CisgICAgRlRERl9jaGVja0RiZ01vZGUoKTsKK30KKyNlbmRpZiAvKiBGVERGX0RCR19CVVNfRU5BQkxFICovCisKKyNpZm5kZWYgRlRERl9MSVRFCisjaWZuZGVmIEZUREZfTk9fQ1NMCit2b2lkIEZUREZfc2V0UGVlckNzbFRpbWluZyhGVERGX0lFTGlzdCAqaGVhZGVySUVMaXN0LCBGVERGX1RpbWUgdGltZVN0YW1wKQoreworICAgIGlmIChGVERGX3JlcUN1cnJlbnQtPm1zZ0lkICE9IEZUREZfREFUQV9SRVFVRVNUKQorICAgIHsKKyAgICAgICAgLy8gT25seSB1c2UgdGhlIENTTCB0aW1pbmcgb2YgZGF0YSBmcmFtZSBhY2tzCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGVERGX0RhdGFSZXF1ZXN0ICpkYXRhUmVxdWVzdCA9IChGVERGX0RhdGFSZXF1ZXN0ICopIEZUREZfcmVxQ3VycmVudDsKKyAgICBGVERGX1Nob3J0QWRkcmVzcyBkc3RBZGRyICAgICA9IGRhdGFSZXF1ZXN0LT5kc3RBZGRyLnNob3J0QWRkcmVzczsKKworICAgIGlmIChkYXRhUmVxdWVzdC0+ZHN0QWRkck1vZGUgIT0gRlRERl9TSE9SVF9BRERSRVNTIHx8CisgICAgICAgIGRzdEFkZHIgPT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBuOworCisgICAgLy8gU2VhcmNoIGZvciBhbiBleGlzdGluZyBlbnRyeQorICAgIGZvciAobiA9IDA7IG4gPCBGVERGX05SX09GX0NTTF9QRUVSUzsgbisrKQorICAgIHsKKyAgICAgICAgaWYgKEZUREZfcGVlckNzbFRpbWluZ1sgbiBdLmFkZHIgPT0gZHN0QWRkcikKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGVhZGVySUVMaXN0ID09IE5VTEwpCisgICAgeworICAgICAgICBpZiAobiA8IEZUREZfTlJfT0ZfQ1NMX1BFRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEZWxldGUgZW50cnkKKyAgICAgICAgICAgIEZUREZfcGVlckNzbFRpbWluZ1sgbiBdLmFkZHIgPSAweGZmZmY7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IGllTnIgPSAwOworCisgICAgd2hpbGUgKGllTnIgPCBoZWFkZXJJRUxpc3QtPm5yT2ZJRXMgJiYKKyAgICAgICAgICAgaGVhZGVySUVMaXN0LT5JRXNbIGllTnIgXS5JRCAhPSAweDFhKQorICAgIHsKKyAgICAgICAgaWVOcisrOworICAgIH0KKworICAgIGlmIChpZU5yID09IGhlYWRlcklFTGlzdC0+bnJPZklFcykKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobiA9PSBGVERGX05SX09GX0NTTF9QRUVSUykKKyAgICB7CisgICAgICAgIC8vIFNlYXJjaCBmb3IgYW4gZW1wdHkgZW50cnkKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IEZUREZfTlJfT0ZfQ1NMX1BFRVJTOyBuKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGVERGX3BlZXJDc2xUaW1pbmdbIG4gXS5hZGRyID09IDB4ZmZmZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChuID09IEZUREZfTlJfT0ZfQ1NMX1BFRVJTKQorICAgIHsKKyAgICAgICAgLy8gTm8gZnJlZSBlbnRyeSwgc2VhcmNoIGZvciB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyeQorICAgICAgICBGVERGX1RpbWUgbWF4RGVsdGEgPSAwOworICAgICAgICBpbnQgICAgICAgbHJ1ICAgICAgPSAwOworCisgICAgICAgIGZvciAobiA9IDA7IG4gPCBGVERGX05SX09GX0NTTF9QRUVSUzsgbisrKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX1RpbWUgZGVsdGEgPSB0aW1lU3RhbXAgLSBGVERGX3BlZXJDc2xUaW1pbmdbIG4gXS50aW1lOworCisgICAgICAgICAgICBpZiAoZGVsdGEgPiBtYXhEZWx0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYXhEZWx0YSA9IGRlbHRhOworICAgICAgICAgICAgICAgIGxydSAgICAgID0gbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG4gPSBscnU7CisgICAgfQorCisgICAgRlRERl9QZXJpb2QgcGhhc2UgID0gKCooRlRERl9QZXJpb2QgKikoaGVhZGVySUVMaXN0LT5JRXNbIDAgXS5jb250ZW50LnJhdyArIDApKTsKKyAgICBGVERGX1BlcmlvZCBwZXJpb2QgPSAoKihGVERGX1BlcmlvZCAqKShoZWFkZXJJRUxpc3QtPklFc1sgMCBdLmNvbnRlbnQucmF3ICsgMikpOworCisgICAgRlRERl9wZWVyQ3NsVGltaW5nWyBuIF0uYWRkciAgID0gZHN0QWRkcjsKKyAgICBGVERGX3BlZXJDc2xUaW1pbmdbIG4gXS50aW1lICAgPSB0aW1lU3RhbXAgLSAocGhhc2UgKiAxMCk7CisgICAgRlRERl9wZWVyQ3NsVGltaW5nWyBuIF0ucGVyaW9kID0gcGVyaW9kOworfQorCit2b2lkIEZUREZfZ2V0V2FrZXVwUGFyYW1zKEZUREZfU2hvcnRBZGRyZXNzIGRzdEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVGltZSAgICAgICAgKndha2V1cFN0YXJ0VGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9QZXJpb2QgICAgICAqd2FrZXVwUGVyaW9kKQoreworICAgIGludCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IEZUREZfTlJfT0ZfQ1NMX1BFRVJTOyBuKyspCisgICAgeworICAgICAgICBpZiAoRlRERl9wZWVyQ3NsVGltaW5nWyBuIF0uYWRkciA9PSBkc3RBZGRyKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIEZUREZfVGltZSBjdXJUaW1lID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworCisgICAgaWYgKGRzdEFkZHIgPT0gMHhmZmZmIHx8CisgICAgICAgIG4gPT0gRlRERl9OUl9PRl9DU0xfUEVFUlMpCisgICAgeworICAgICAgICAqd2FrZXVwU3RhcnRUaW1lID0gY3VyVGltZSArIDU7CisgICAgICAgICp3YWtldXBQZXJpb2QgICAgPSBGVERGX3BpYi5DU0xNYXhQZXJpb2Q7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZUREZfVGltZSBwZWVyVGltZSAgID0gRlRERl9wZWVyQ3NsVGltaW5nWyBuIF0udGltZTsKKyAgICBGVERGX1RpbWUgcGVlclBlcmlvZCA9IEZUREZfcGVlckNzbFRpbWluZ1sgbiBdLnBlcmlvZCAqIDEwOworICAgIEZUREZfVGltZSBkZWx0YSAgICAgID0gY3VyVGltZSAtIHBlZXJUaW1lOworCisgICAgaWYgKGRlbHRhID4gKHVpbnQzMl90KShGVERGX3BpYi5DU0xNYXhBZ2VSZW1vdGVJbmZvICogMTApKQorICAgIHsKKyAgICAgICAgKndha2V1cFN0YXJ0VGltZSA9IGN1clRpbWUgKyA1OworICAgICAgICAqd2FrZXVwUGVyaW9kICAgID0gRlRERl9waWIuQ1NMTWF4UGVyaW9kOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGVERGX1RpbWUgd1N0YXJ0ID0gcGVlclRpbWUgKyAoKChkZWx0YSAvIHBlZXJQZXJpb2QpICsgMSkgKiBwZWVyUGVyaW9kKSAtIEZUREZfcGliLkNTTFN5bmNUeE1hcmdpbjsKKyAgICBkZWx0YSA9IHdTdGFydCAtIGN1clRpbWU7CisKKyAgICBpZiAoZGVsdGEgPCAzIHx8IGRlbHRhID4gMHg4MDAwMDAwMCkgICAgLy8gQSBkZWx0YSBsYXJnZXIgdGhhbiAweDgwMDAwMDAwIGlzIGFzc3VtZWQgYSBuZWdhdGl2ZSBkZWx0YQorICAgIHsKKyAgICAgICAgd1N0YXJ0ICs9IHBlZXJQZXJpb2Q7CisgICAgfQorCisgICAgKndha2V1cFBlcmlvZCAgICA9IChGVERGX3BpYi5DU0xTeW5jVHhNYXJnaW4gLyAxMCkgKiAyOworICAgICp3YWtldXBTdGFydFRpbWUgPSB3U3RhcnQ7Cit9CisKK3ZvaWQgRlRERl9zZXRDc2xTYW1wbGVUaW1lKHZvaWQpCit7CisgICAgRlRERl9UaW1lIENTTFBlcmlvZCA9IEZUREZfcGliLkNTTFBlcmlvZCAqIDEwOworCisgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworCisgICAgRlRERl9UaW1lIGN1clRpbWUgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCk7CisgICAgRlRERl9UaW1lIGRlbHRhICAgPSAoY3VyVGltZSAtIEZUREZfc3RhcnRDc2xTYW1wbGVUaW1lKTsKKworICAgIC8vIEEgZGVsdGEgbGFyZ2VyIHRoYW4gMHg4MDAwMDAwMCBpcyBhc3N1bWVkIGEgbmVnYXRpdmUgZGVsdGEsIGluIHRoaXMgY2FzZSB0aGUgc2FtcGxlIHRpbWUgZG9lcworICAgIC8vIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQuCisgICAgaWYgKGRlbHRhIDwgMHg4MDAwMDAwMCkKKyAgICB7CisgICAgICAgIGlmIChkZWx0YSA8IENTTFBlcmlvZCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9zdGFydENzbFNhbXBsZVRpbWUgKz0gQ1NMUGVyaW9kOworCisgICAgICAgICAgICBpZiAoZGVsdGEgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHRvIHNldCB0aGUgQ1NMIHNhbXBsZSB0aW1lIHRvIGEgdGltZSBzdGFtcCBpbiB0aGUgcGFzdCBzZXQgaXQgdG8gYSBzYW1wbGUgcGVyaW9kIGxhdGVyCisgICAgICAgICAgICAgICAgLy8gaWYgdGhlIG5leHQgc2FtcGxlIHdvdWxkIGJlIHdpdGhpbiAzIHN5bWJvbHMuCisgICAgICAgICAgICAgICAgRlRERl9zdGFydENzbFNhbXBsZVRpbWUgKz0gQ1NMUGVyaW9kOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9zdGFydENzbFNhbXBsZVRpbWUgPSBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZSArICgoZGVsdGEgLyBDU0xQZXJpb2QpICsgMSkgKiBDU0xQZXJpb2Q7CisgICAgICAgIH0KKworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0NTTFNUQVJUU0FNUExFVElNRSwgRlRERl9zdGFydENzbFNhbXBsZVRpbWUpOworICAgIH0KKworICAgIEZUREZfZXhpdENyaXRpY2FsKCk7Cit9CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKK0ZUREZfVGltZTY0IEZUREZfZ2V0Q3VyVGltZTY0KHZvaWQpCit7CisgICAgRlRERl9UaW1lIG5ld1RpbWUgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCk7CisKKyAgICBpZiAobmV3VGltZSA8IEZUREZfY3VyVGltZVsgMCBdKQorICAgIHsKKyAgICAgICAgRlRERl9jdXJUaW1lWyAxIF0rKzsKKyAgICB9CisKKyAgICBGVERGX2N1clRpbWVbIDAgXSA9IG5ld1RpbWU7CisKKyAgICByZXR1cm4gKihGVERGX1RpbWU2NCAqKUZUREZfY3VyVGltZTsKK30KKwordm9pZCBGVERGX2luaXRDdXJUaW1lNjQodm9pZCkKK3sKKyAgICBGVERGX2N1clRpbWVbIDAgXSA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKyAgICBGVERGX2N1clRpbWVbIDEgXSA9IDA7Cit9CisKK3ZvaWQgRlRERl9nZXRFeHRBZGRyZXNzKHZvaWQpCit7CisgICAgdWludDMyX3QgKmV4dEFkZHJlc3MgPSAodWludDMyX3QgKikgJkZUREZfcGliLmV4dEFkZHJlc3M7CisgICAgZXh0QWRkcmVzc1sgMCBdID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0wpOworICAgIGV4dEFkZHJlc3NbIDEgXSA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfQUVYVEVOREVEQUREUkVTU19IKTsKK30KKwordm9pZCBGVERGX3NldEV4dEFkZHJlc3Modm9pZCkKK3sKKyAgICB1aW50MzJfdCAqZXh0QWRkcmVzcyA9ICh1aW50MzJfdCAqKSAmRlRERl9waWIuZXh0QWRkcmVzczsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfTCwgZXh0QWRkcmVzc1sgMCBdKTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfSCwgZXh0QWRkcmVzc1sgMSBdKTsKK30KKwordm9pZCBGVERGX2dldEFja1dhaXREdXJhdGlvbih2b2lkKQoreworICAgIEZUREZfcGliLmFja1dhaXREdXJhdGlvbiA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQUNLV0FJVERVUkFUSU9OKTsKK30KKworI2lmbmRlZiBGVERGX0xJVEUKK3ZvaWQgRlRERl9nZXRFbmhBY2tXYWl0RHVyYXRpb24odm9pZCkKK3sKKyAgICBGVERGX3BpYi5lbmhBY2tXYWl0RHVyYXRpb24gPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTik7Cit9CisKK3ZvaWQgRlRERl9zZXRFbmhBY2tXYWl0RHVyYXRpb24odm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTiwgRlRERl9waWIuZW5oQWNrV2FpdER1cmF0aW9uKTsKK30KKwordm9pZCBGVERGX2dldEltcGxpY2l0QnJvYWRjYXN0KHZvaWQpCit7CisgICAgRlRERl9waWIuaW1wbGljaXRCcm9hZGNhc3QgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0lNUExJQ0lUQlJPQURDQVNUKTsKK30KKwordm9pZCBGVERGX3NldEltcGxpY2l0QnJvYWRjYXN0KHZvaWQpCit7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNJTVBMSUNJVEJST0FEQ0FTVCwgRlRERl9waWIuaW1wbGljaXRCcm9hZGNhc3QpOworfQorI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKwordm9pZCBGVERGX3NldFNob3J0QWRkcmVzcyh2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDU0hPUlRBRERSRVNTLCBGVERGX3BpYi5zaG9ydEFkZHJlc3MpOworfQorCisjaWZuZGVmIEZUREZfTElURQordm9pZCBGVERGX3NldFNpbXBsZUFkZHJlc3Modm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ1NJTVBMRUFERFJFU1MsIEZUREZfcGliLnNpbXBsZUFkZHJlc3MpOworfQorI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKwordm9pZCBGVERGX2dldFJ4T25XaGVuSWRsZSh2b2lkKQoreworICAgIEZUREZfcGliLnJ4T25XaGVuSWRsZSA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUlhBTFdBWVNPTik7Cit9CisKK3ZvaWQgRlRERl9zZXRSeE9uV2hlbklkbGUodm9pZCkKK3sKKyNpZiBGVERGX1VTRV9QVEkgJiYgIUZUREZfVVNFX0FVVE9fUFRJCisgICAgLyogV2UgZG8gbm90IGZvcmNlIGRlY2lzaW9uIGhlcmUuIEl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBtYWRlIHdoZW4gRlRERiBiZWdpbnMKKyAgICAgKiB0cmFuc2FjdGlvbi4KKyAgICAgKi8KKyAgICBod19jb2V4X3VwZGF0ZV9mdGRmX3B0aSgoaHdfY29leF9wdGlfdCkgRlRERl9nZXRSeFB0aSgpLCBOVUxMLCBmYWxzZSk7CisjZW5kaWYgLyogRlRERl9VU0VfUFRJICYmICFGVERGX1VTRV9BVVRPX1BUSSAqLworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUlhFTkFCTEUsIDApOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUlhBTFdBWVNPTiwgRlRERl9waWIucnhPbldoZW5JZGxlKTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1JYRU5BQkxFLCAxKTsKKworfQorCit2b2lkIEZUREZfZ2V0UEFOSWQodm9pZCkKK3sKKyAgICBGVERGX3BpYi5QQU5JZCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDUEFOSUQpOworfQorCit2b2lkIEZUREZfc2V0UEFOSWQodm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ1BBTklELCBGVERGX3BpYi5QQU5JZCk7Cit9CisKK3ZvaWQgRlRERl9nZXRDdXJyZW50Q2hhbm5lbCh2b2lkKQoreworICAgIEZUREZfcGliLmN1cnJlbnRDaGFubmVsID0gKChGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1BIWVJYQVRUUikgJiAweDAwZjApID4+IDQpICsgMTE7Cit9CisKK3ZvaWQgRlRERl9zZXRDdXJyZW50Q2hhbm5lbCh2b2lkKQoreworICAgIHVpbnQzMl90IHBoeUFja0F0dHIgPSAweDA4IHwgKChGVERGX3BpYi5jdXJyZW50Q2hhbm5lbCAtIDExKSAmIDB4ZikgPDwgNCB8IChGVERGX3BpYi5UWFBvd2VyICYgMHg3KSA8PCAxMjsKKworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUEhZUlhBVFRSLCAoKChGVERGX3BpYi5jdXJyZW50Q2hhbm5lbCAtIDExKSAmIDB4ZikgPDwgNCkpOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUEhZQUNLQVRUUiwgcGh5QWNrQXR0cik7Cit9CisKK3ZvaWQgRlRERl9zZXRUWFBvd2VyKHZvaWQpCit7CisgICAgLyogSnVzdCBsaWtlIHNldEN1cnJlbnRDaGFubmVsLCB0aGlzIHNldHMgcHlBY2tBdHRyICovCisgICAgdWludDMyX3QgcGh5QWNrQXR0ciA9IDB4MDggfCAoKEZUREZfcGliLmN1cnJlbnRDaGFubmVsIC0gMTEpICYgMHhmKSA8PCA0IHwgKEZUREZfcGliLlRYUG93ZXIgJiAweDcpIDw8IDEyOworCisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9QSFlBQ0tBVFRSLCBwaHlBY2tBdHRyKTsKK30KKwordm9pZCBGVERGX2dldE1heEZyYW1lVG90YWxXYWl0VGltZSh2b2lkKQoreworICAgIEZUREZfcGliLm1heEZyYW1lVG90YWxXYWl0VGltZSA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDTUFYRlJBTUVUT1RBTFdBSVRUSU1FKTsKK30KKwordm9pZCBGVERGX3NldE1heEZyYW1lVG90YWxXYWl0VGltZSh2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDTUFYRlJBTUVUT1RBTFdBSVRUSU1FLCBGVERGX3BpYi5tYXhGcmFtZVRvdGFsV2FpdFRpbWUpOworfQorCit2b2lkIEZUREZfc2V0TWF4Q1NNQUJhY2tvZmZzKHZvaWQpCit7CisjaWZuZGVmIEZUREZfTElURQorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCA9PSBGVERGX0ZBTFNFICYmIEZUREZfcGliLnRzY2hFbmFibGVkID09IEZUREZfRkFMU0UpCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIHsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNNQVhDU01BQkFDS09GRlMsIEZUREZfcGliLm1heENTTUFCYWNrb2Zmcyk7CisgICAgfQorfQorCit2b2lkIEZUREZfc2V0TWF4QkUodm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ01BWEJFLCBGVERGX3BpYi5tYXhCRSk7Cit9CisKK3ZvaWQgRlRERl9zZXRNaW5CRSh2b2lkKQoreworI2lmbmRlZiBGVERGX0xJVEUKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgPT0gRlRERl9GQUxTRSAmJiBGVERGX3BpYi50c2NoRW5hYmxlZCA9PSBGVERGX0ZBTFNFKQorI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICB7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDTUlOQkUsIEZUREZfcGliLm1pbkJFKTsKKyAgICB9Cit9CisKKyNpZm5kZWYgRlRERl9MSVRFCisjaWZuZGVmIEZUREZfTk9fQ1NMCit2b2lkIEZUREZfc2V0TGVFbmFibGVkKHZvaWQpCit7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNDU0xTQU1QTEVQRVJJT0QsIDY2KTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0NTTERBVEFQRVJJT0QsIDY2KTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0NTTE1BUkdJTlJaLCAxKTsKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQpCisgICAgeworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ01BWENTTUFCQUNLT0ZGUywgMCk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDTUlOQkUsIDApOworCisgICAgICAgIGlmIChGVERGX29sZExlRW5hYmxlZCA9PSBGVERGX0ZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRlRERl93YWtlVXBFbmFibGVMZSA9PSBGVERGX0ZBTFNFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfc3RhcnRDc2xTYW1wbGVUaW1lID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworICAgICAgICAgICAgICAgIEZUREZfc2V0Q3NsU2FtcGxlVGltZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FLCBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNNQVhDU01BQkFDS09GRlMsIEZUREZfcGliLm1heENTTUFCYWNrb2Zmcyk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDTUlOQkUsIEZUREZfcGliLm1pbkJFKTsKKyAgICB9CisKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0xFRU5BQkxFRCwgRlRERl9waWIubGVFbmFibGVkKTsKKworICAgIEZUREZfb2xkTGVFbmFibGVkID0gRlRERl9waWIubGVFbmFibGVkOworfQorCit2b2lkIEZUREZfZ2V0Q3NsRnJhbWVQZW5kaW5nV2FpdFQodm9pZCkKK3sKKyAgICBGVERGX3BpYi5DU0xGcmFtZVBlbmRpbmdXYWl0VCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFQpOworfQorCit2b2lkIEZUREZfc2V0Q3NsRnJhbWVQZW5kaW5nV2FpdFQodm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0NTTEZSQU1FUEVORElOR1dBSVRULCBGVERGX3BpYi5DU0xGcmFtZVBlbmRpbmdXYWl0VCk7Cit9CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKK3ZvaWQgRlRERl9nZXRMbWFjUG1EYXRhKHZvaWQpCit7CisgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLkZDU0Vycm9yQ291bnQgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0ZDU0VSUk9SQ09VTlQpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfbG1hY0NvdW50ZXJzLmZjc0Vycm9yQ250OworfQorCit2b2lkIEZUREZfZ2V0TG1hY1RyYWZmaWNDb3VudGVycyh2b2lkKQoreworICAgIEZUREZfcGliLnRyYWZmaWNDb3VudGVycy50eFN0ZEFja0ZybUNudCAgID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9sbWFjQ291bnRlcnMudHhTdGRBY2tDbnQ7CisgICAgRlRERl9waWIudHJhZmZpY0NvdW50ZXJzLnJ4U3RkQWNrRnJtT2tDbnQgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ1JYU1REQUNLRlJNT0tDTlQpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfbG1hY0NvdW50ZXJzLnJ4U3RkQWNrQ250OworfQorCit2b2lkIEZUREZfZ2V0S2VlcFBoeUVuYWJsZWQodm9pZCkKK3sKKyAgICBGVERGX3BpYi5rZWVwUGh5RW5hYmxlZCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfS0VFUF9QSFlfRU4pOworfQorCit2b2lkIEZUREZfc2V0S2VlcFBoeUVuYWJsZWQodm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0tFRVBfUEhZX0VOLCBGVERGX3BpYi5rZWVwUGh5RW5hYmxlZCk7Cit9CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCit2b2lkIEZUREZfc2V0Qm9JcnFUaHJlc2hvbGQodm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fVEhSRVNIT0xELCBGVERGX3BpYi5ib0lycVRocmVzaG9sZCk7Cit9Cit2b2lkIEZUREZfZ2V0Qm9JcnFUaHJlc2hvbGQodm9pZCkKK3sKKyAgICBGVERGX3BpYi5ib0lycVRocmVzaG9sZCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19USFJFU0hPTEQpOworfQordm9pZCBGVERGX3NldFB0aUNvbmZpZyh2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEX0lOREVYRUQoT05fT0ZGX1JFR01BUF9QVElfVFgsIEZUREZfcGliLnB0aUNvbmZpZy5wdGlzW0ZUREZfUFRJX0NPTkZJR19UWF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKyAgICBGVERGX1NFVF9GSUVMRF9JTkRFWEVEKE9OX09GRl9SRUdNQVBfUFRJX1RYLCBGVERGX3BpYi5wdGlDb25maWcucHRpc1tGVERGX1BUSV9DT05GSUdfVFhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9UWF9XQUtFVVBfQlVGRkVSKTsKKyAgICBGVERGX1NFVF9GSUVMRF9JTkRFWEVEKE9OX09GRl9SRUdNQVBfUFRJX1RYLCBGVERGX3BpYi5wdGlDb25maWcucHRpc1tGVERGX1BUSV9DT05GSUdfUlhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9UWF9BQ0tfQlVGRkVSKTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1BUSV9SWCwgRlRERl9waWIucHRpQ29uZmlnLnB0aXNbRlRERl9QVElfQ09ORklHX1JYXSk7Cit9CisjZW5kaWYgLyogI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKworI2lmbmRlZiBGVERGX0xJVEUKKyNpZm5kZWYgRlRERl9OT19UU0NICit2b2lkIEZUREZfc2V0VGltZXNsb3RUZW1wbGF0ZSh2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZLCBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzVHhBY2tEZWxheSk7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNUU1JYV0FJVCwgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c1J4V2FpdCk7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNUU1JYQUNLREVMQVksIEZUREZfcGliLnRpbWVzbG90VGVtcGxhdGUudHNSeEFja0RlbGF5KTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ1RTQUNLV0FJVCwgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c0Fja1dhaXQpOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDVFNSWFRYLCBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzUnhUeCAtCisgICAgICAgICAgICAgICAgICAgRlRERl9QSFlUUlhXQUlUIC0gRlRERl9QSFlUWFNUQVJUVVAgLSBGVERGX1BIWVRYTEFURU5DWSk7Cit9CisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisjZW5kaWYgLyogIUZUREZfTElURSAqLworCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorI2lmIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEZQUFIgY29tbW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIEZUREZfTElURQorCitGVERGX0Jvb2xlYW4gRlRERl9mcEZzbVNob3J0QWRkcmVzc05ldyhGVERGX1BBTklkIHBhbklkLCBGVERGX1Nob3J0QWRkcmVzcyBzaG9ydEFkZHJlc3MpCit7CisgICAgdWludDhfdCBlbnRyeTsKKyAgICB1aW50OF90IHNob3J0QWRkcklkeDsKKworICAgIGlmIChGVERGX2ZwcHJHZXRGcmVlU2hvcnRBZGRyZXNzKCZlbnRyeSwgJnNob3J0QWRkcklkeCkgPT0gRlRERl9GQUxTRSkKKyAgICB7CisgICAgICAgIHJldHVybiBGVERGX0ZBTFNFOworICAgIH0KKworICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzcyhlbnRyeSwgc2hvcnRBZGRySWR4LCBzaG9ydEFkZHJlc3MpOworICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzc1ZhbGlkKGVudHJ5LCBzaG9ydEFkZHJJZHgsIEZUREZfVFJVRSk7CisKKyAgICByZXR1cm4gRlRERl9UUlVFOworfQorCitGVERGX0Jvb2xlYW4gRlRERl9mcEZzbUV4dEFkZHJlc3NOZXcoRlRERl9QQU5JZCBwYW5JZCwgRlRERl9FeHRBZGRyZXNzIGV4dEFkZHJlc3MpCit7CisgICAgdWludDhfdCBlbnRyeTsKKworICAgIGlmIChGVERGX2ZwcHJHZXRGcmVlRXh0QWRkcmVzcygmZW50cnkpID09IEZUREZfRkFMU0UpCisgICAgeworICAgICAgICByZXR1cm4gRlRERl9GQUxTRTsKKyAgICB9CisKKyAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzKGVudHJ5LCBleHRBZGRyZXNzKTsKKyAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzVmFsaWQoZW50cnksIEZUREZfVFJVRSk7CisKKyAgICByZXR1cm4gRlRERl9UUlVFOworfQorCit2b2lkIEZUREZfZnBGc21TaG9ydEFkZHJlc3NMYXN0RnJhbWVQZW5kaW5nKEZUREZfUEFOSWQgUEFOSWQsIEZUREZfU2hvcnRBZGRyZXNzIHNob3J0QWRkcmVzcykKK3sKKyNpZiBGVERGX0ZQUFJfREVGRVJfSU5WQUxJREFUSU9OCisgICAgRlRERl9mcHByUGVuZGluZy5hZGRyTW9kZSA9IEZUREZfU0hPUlRfQUREUkVTUzsKKyAgICBGVERGX2ZwcHJQZW5kaW5nLlBBTklkID0gUEFOSWQ7CisgICAgRlRERl9mcHByUGVuZGluZy5hZGRyLnNob3J0QWRkcmVzcyA9IHNob3J0QWRkcmVzczsKKyNlbHNlIC8qIEZUREZfRlBQUl9ERUZFUl9JTlZBTElEQVRJT04gKi8KKyAgICB1aW50OF90IGVudHJ5OworICAgIHVpbnQ4X3Qgc2hvcnRBZGRySWR4OworICAgIEZUREZfQm9vbGVhbiBmb3VuZCA9IEZUREZfZnBwckxvb2t1cFNob3J0QWRkcmVzcyhzaG9ydEFkZHJlc3MsICZlbnRyeSwgJnNob3J0QWRkcklkeCk7CisgICAgQVNTRVJUX1dBUk5JTkcoZm91bmQpOworICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzc1ZhbGlkKGVudHJ5LCBzaG9ydEFkZHJJZHgsIEZUREZfRkFMU0UpOworI2VuZGlmIC8qIEZUREZfRlBQUl9ERUZFUl9JTlZBTElEQVRJT04gKi8KK30KKwordm9pZCBGVERGX2ZwRnNtRXh0QWRkcmVzc0xhc3RGcmFtZVBlbmRpbmcoRlRERl9QQU5JZCBQQU5JZCwgRlRERl9FeHRBZGRyZXNzIGV4dEFkZHJlc3MpCit7CisjaWYgRlRERl9GUFBSX0RFRkVSX0lOVkFMSURBVElPTgorICAgIEZUREZfZnBwclBlbmRpbmcuYWRkck1vZGUgPSBGVERGX0VYVEVOREVEX0FERFJFU1M7CisgICAgRlRERl9mcHByUGVuZGluZy5QQU5JZCA9IFBBTklkOworICAgIEZUREZfZnBwclBlbmRpbmcuYWRkci5leHRBZGRyZXNzID0gZXh0QWRkcmVzczsKKyNlbHNlIC8qIEZUREZfRlBQUl9ERUZFUl9JTlZBTElEQVRJT04gKi8KKyAgICB1aW50OF90IGVudHJ5OworICAgIEZUREZfQm9vbGVhbiBmb3VuZCA9IEZUREZfZnBwckxvb2t1cEV4dEFkZHJlc3MoZXh0QWRkcmVzcywgJmVudHJ5KTsKKyAgICBBU1NFUlRfV0FSTklORyhmb3VuZCk7CisgICAgRlRERl9mcHByU2V0RXh0QWRkcmVzc1ZhbGlkKGVudHJ5LCBGVERGX0ZBTFNFKTsKKyNlbmRpZiAvKiBGVERGX0ZQUFJfREVGRVJfSU5WQUxJREFUSU9OICovCit9CisKK3ZvaWQgRlRERl9mcEZzbUNsZWFyUGVuZGluZyh2b2lkKQoreworI2lmIEZUREZfRlBQUl9ERUZFUl9JTlZBTElEQVRJT04KKyAgICBpbnQgbjsKKworICAgIGlmIChGVERGX2ZwcHJQZW5kaW5nLmFkZHJNb2RlID09IEZUREZfTk9fQUREUkVTUykKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoRlRERl9mcHByUGVuZGluZy5hZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgeworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9OUl9PRl9SRVFfQlVGRkVSUzsgbisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uYWRkck1vZGUgPT0gRlRERl9TSE9SVF9BRERSRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgoRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uUEFOSWQgPT0gRlRERl9mcHByUGVuZGluZy5QQU5JZCkgJiYKKyAgICAgICAgICAgICAgICAgICAgKEZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLmFkZHIuc2hvcnRBZGRyZXNzID09CisgICAgICAgICAgICAgICAgICAgICBGVERGX2ZwcHJQZW5kaW5nLmFkZHIuc2hvcnRBZGRyZXNzKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGRyZXNzIG5vdCBmb3VuZC4KKyAgICAgICAgdWludDhfdCBlbnRyeTsKKyAgICAgICAgdWludDhfdCBzaG9ydEFkZHJJZHg7CisgICAgICAgIEZUREZfQm9vbGVhbiBmb3VuZCA9IEZUREZfZnBwckxvb2t1cFNob3J0QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfZnBwclBlbmRpbmcuYWRkci5zaG9ydEFkZHJlc3MsICZlbnRyeSwgJnNob3J0QWRkcklkeCk7CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKGZvdW5kKTsKKyAgICAgICAgRlRERl9mcHByU2V0U2hvcnRBZGRyZXNzVmFsaWQoZW50cnksIHNob3J0QWRkcklkeCwgRlRERl9GQUxTRSk7CisgICAgfQorICAgIGVsc2UgaWYgKEZUREZfZnBwclBlbmRpbmcuYWRkck1vZGUgPT0gRlRERl9FWFRFTkRFRF9BRERSRVNTKQorICAgIHsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IEZUREZfTlJfT0ZfUkVRX0JVRkZFUlM7IG4rKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLmFkZHJNb2RlID09IEZUREZfRVhURU5ERURfQUREUkVTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uYWRkci5leHRBZGRyZXNzID09CisgICAgICAgICAgICAgICAgICAgIEZUREZfZnBwclBlbmRpbmcuYWRkci5leHRBZGRyZXNzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZHJlc3Mgbm90IGZvdW5kLgorICAgICAgICB1aW50OF90IGVudHJ5OworICAgICAgICBGVERGX0Jvb2xlYW4gZm91bmQgPSBGVERGX2ZwcHJMb29rdXBFeHRBZGRyZXNzKEZUREZfZnBwclBlbmRpbmcuYWRkci5leHRBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyeSk7CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKGZvdW5kKTsKKyAgICAgICAgRlRERl9mcHByU2V0RXh0QWRkcmVzc1ZhbGlkKGVudHJ5LCBGVERGX0ZBTFNFKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKworICAgIH0KKworICAgIEZUREZfZnBwclBlbmRpbmcuYWRkck1vZGUgPSBGVERGX05PX0FERFJFU1M7CisjZW5kaWYgLyogRlRERl9GUFBSX0RFRkVSX0lOVkFMSURBVElPTiAqLworfQorCisjZW5kaWYgLyogI2lmbmRlZiBGVERGX0xJVEUgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBGUFBSIGxvdy1sZXZlbCBhY2Nlc3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgRlRERl9mcHByUmVzZXQodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgKkZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fU0laRV9BTkRfVkFMLCBpKSA9IDA7CisgICAgfQorfQorCitGVERGX1Nob3J0QWRkcmVzcyBGVERGX2ZwcHJHZXRTaG9ydEFkZHJlc3ModWludDhfdCBlbnRyeSwgdWludDhfdCBzaG9ydEFkZHJJZHgpCit7CisgICAgQVNTRVJUX1dBUk5JTkcoZW50cnkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyk7CisKKyAgICBzd2l0Y2ggKHNob3J0QWRkcklkeCkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4gKEZUREZfU2hvcnRBZGRyZXNzKQorICAgICAgICAgICAgICAgKiBGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0wsIGVudHJ5KSAmCisgICAgICAgICAgICAgICAweDAwMDBmZmZmOworCisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gKEZUREZfU2hvcnRBZGRyZXNzKQorICAgICAgICAgICAgICAgKCpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0wsIGVudHJ5KSA+PiAxNikgJgorICAgICAgICAgICAgICAgMHgwMDAwZmZmZjsKKworICAgIGNhc2UgMjoKKyAgICAgICAgcmV0dXJuIChGVERGX1Nob3J0QWRkcmVzcykKKyAgICAgICAgICAgICAgICogRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9ILCBlbnRyeSkgJgorICAgICAgICAgICAgICAgMHgwMDAwZmZmZjsKKworICAgIGNhc2UgMzoKKyAgICAgICAgcmV0dXJuIChGVERGX1Nob3J0QWRkcmVzcykKKyAgICAgICAgICAgICAgICgqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9ILCBlbnRyeSkgPj4gMTYpICYKKyAgICAgICAgICAgICAgIDB4MDAwMGZmZmY7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICB9Cit9CisKK3ZvaWQgRlRERl9mcHByU2V0U2hvcnRBZGRyZXNzKHVpbnQ4X3QgZW50cnksIHVpbnQ4X3Qgc2hvcnRBZGRySWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TaG9ydEFkZHJlc3Mgc2hvcnRBZGRyZXNzKQoreworICAgIEFTU0VSVF9XQVJOSU5HKGVudHJ5IDwgRlRERl9GUFBSX1RBQkxFX0VOVFJJRVMpOworICAgIHVpbnQzMl90IHZhbDMyOworCisgICAgc3dpdGNoIChzaG9ydEFkZHJJZHgpCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgICAgdmFsMzIgPSAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9MLCBlbnRyeSk7CisgICAgICAgIHZhbDMyICY9IDB4ZmZmZjAwMDA7CisgICAgICAgIHZhbDMyIHw9IChzaG9ydEFkZHJlc3MgJiAweDAwMDBmZmZmKTsKKyAgICAgICAgKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfTCwgZW50cnkpID0gdmFsMzI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAxOgorICAgICAgICB2YWwzMiA9ICpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0wsIGVudHJ5KTsKKyAgICAgICAgdmFsMzIgJj0gMHgwMDAwZmZmZjsKKyAgICAgICAgdmFsMzIgfD0gKHNob3J0QWRkcmVzcyAmIDB4MDAwMGZmZmYpIDw8IDE2OworICAgICAgICAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9MLCBlbnRyeSkgPSB2YWwzMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICAgIHZhbDMyID0gKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfSCwgZW50cnkpOworICAgICAgICB2YWwzMiAmPSAweGZmZmYwMDAwOworICAgICAgICB2YWwzMiB8PSAoc2hvcnRBZGRyZXNzICYgMHgwMDAwZmZmZik7CisgICAgICAgICpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0gsIGVudHJ5KSA9IHZhbDMyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMzoKKyAgICAgICAgdmFsMzIgPSAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9ILCBlbnRyeSk7CisgICAgICAgIHZhbDMyICY9IDB4MDAwMGZmZmY7CisgICAgICAgIHZhbDMyIHw9IChzaG9ydEFkZHJlc3MgJiAweDAwMDBmZmZmKSA8PCAxNjsKKyAgICAgICAgKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfSCwgZW50cnkpID0gdmFsMzI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgfQorfQorCitGVERGX0Jvb2xlYW4gRlRERl9mcHByR2V0U2hvcnRBZGRyZXNzVmFsaWQodWludDhfdCBlbnRyeSwgdWludDhfdCBzaG9ydEFkZHJJZHgpCit7CisgICAgQVNTRVJUX1dBUk5JTkcoZW50cnkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyk7CisgICAgQVNTRVJUX1dBUk5JTkcoc2hvcnRBZGRySWR4IDwgNCk7CisgICAgdWludDMyX3QgdmFsMzI7CisgICAgdmFsMzIgPSAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX1ZBTElEX1NBLCBlbnRyeSk7CisgICAgcmV0dXJuICgodmFsMzIgJiAoTVNLX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9TSE9SVF9MT05HTk9UIHwgKDEgPDwgc2hvcnRBZGRySWR4KSkpID09CisgICAgICAgICAgICAoTVNLX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9TSE9SVF9MT05HTk9UIHwgKDEgPDwgc2hvcnRBZGRySWR4KSkpID8KKyAgICAgICAgICAgRlRERl9UUlVFIDogRlRERl9GQUxTRTsKK30KKwordm9pZCBGVERGX2ZwcHJTZXRTaG9ydEFkZHJlc3NWYWxpZCh1aW50OF90IGVudHJ5LCB1aW50OF90IHNob3J0QWRkcklkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9Cb29sZWFuIHZhbGlkKQoreworICAgIEFTU0VSVF9XQVJOSU5HKGVudHJ5IDwgRlRERl9GUFBSX1RBQkxFX0VOVFJJRVMpOworICAgIEFTU0VSVF9XQVJOSU5HKHNob3J0QWRkcklkeCA8IDQpOworICAgIHVpbnQzMl90IHZhbDMyOworICAgIHZhbDMyID0gKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9WQUxJRF9TQSwgZW50cnkpOworCisgICAgaWYgKHZhbGlkKQorICAgIHsKKyAgICAgICAgdmFsMzIgfD0gTVNLX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9TSE9SVF9MT05HTk9UIHwgKDEgPDwgc2hvcnRBZGRySWR4KTsgLyogQWxzbyBpbmRpY2F0ZSBzaG9ydCBhZGRyZXNzLiAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2YWwzMiAmPSB+KDEgPDwgc2hvcnRBZGRySWR4KTsKKyAgICB9CisKKyAgICAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX1ZBTElEX1NBLCBlbnRyeSkgPSB2YWwzMjsKK30KKworRlRERl9FeHRBZGRyZXNzIEZUREZfZnBwckdldEV4dEFkZHJlc3ModWludDhfdCBlbnRyeSkKK3sKKyAgICBGVERGX0V4dEFkZHJlc3MgZXh0QWRkcmVzczsKKyAgICBBU1NFUlRfV0FSTklORyhlbnRyeSA8IEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTKTsKKyAgICBleHRBZGRyZXNzID0gKEZUREZfRXh0QWRkcmVzcykgKiBGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5KSA8PCAzMjsKKyAgICBleHRBZGRyZXNzIHw9IChGVERGX0V4dEFkZHJlc3MpICogRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9MLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkpOworICAgIHJldHVybiBleHRBZGRyZXNzOworfQorCit2b2lkIEZUREZfZnBwclNldEV4dEFkZHJlc3ModWludDhfdCBlbnRyeSwgRlRERl9FeHRBZGRyZXNzIGV4dEFkZHJlc3MpCit7CisgICAgQVNTRVJUX1dBUk5JTkcoZW50cnkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyk7CisgICAgKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfTCwgZW50cnkpID0KKyAgICAgICAgKHVpbnQzMl90KShleHRBZGRyZXNzKTsKKyAgICAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9ILCBlbnRyeSkgPQorICAgICAgICAodWludDMyX3QpKChleHRBZGRyZXNzID4+IDMyKSk7Cit9CisKK0ZUREZfQm9vbGVhbiBGVERGX2ZwcHJHZXRFeHRBZGRyZXNzVmFsaWQodWludDhfdCBlbnRyeSkKK3sKKyAgICByZXR1cm4gKCpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fVkFMSURfU0EsIGVudHJ5KSA9PSAweDEpID8KKyAgICAgICAgICAgRlRERl9UUlVFIDogRlRERl9GQUxTRTsKK30KKwordm9pZCBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzVmFsaWQodWludDhfdCBlbnRyeSwgRlRERl9Cb29sZWFuIHZhbGlkKQoreworICAgIEFTU0VSVF9XQVJOSU5HKGVudHJ5IDwgRlRERl9GUFBSX1RBQkxFX0VOVFJJRVMpOworCisgICAgaWYgKHZhbGlkKQorICAgIHsKKyAgICAgICAgLyogQWxzbyBpbmRpY2F0ZSBleHQgYWRkcmVzcy4gKi8KKyAgICAgICAgKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9WQUxJRF9TQSwgZW50cnkpID0gMHgxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX1ZBTElEX1NBLCBlbnRyeSkgPSAweDA7CisgICAgfQorfQorCitGVERGX0Jvb2xlYW4gRlRERl9mcHByR2V0RnJlZVNob3J0QWRkcmVzcyh1aW50OF90ICplbnRyeSwgdWludDhfdCAqc2hvcnRBZGRySWR4KQoreworICAgIGludCBpLCBqOworICAgIHVpbnQzMl90IHNpemVBbmRWYWw7CisgICAgaW50IGVtcHR5RW50cnk7CisgICAgYm9vbCBlbXB0eUZvdW5kID0gZmFsc2UsIG5vbkVtcHR5Rm91bmQgPSBmYWxzZTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgc2l6ZUFuZFZhbCA9ICpGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX1NJWkVfQU5EX1ZBTCwgaSk7CisKKyAgICAgICAgaWYgKHNpemVBbmRWYWwgPT0gMHgxKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSBpcyBhIHZhbGlkIGV4dGVuZGVkIGFkZHJlc3MuICAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHNpemVBbmRWYWwgJiBNU0tfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NIT1JUX0xPTkdOT1QpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoZXJlIGlzIGFuIGludmFsaWQgZXh0ZW5kZWQgYWRkcmVzcywgaWdub3JlIFNBIHZhbGlkIGJpdHMgICovCisgICAgICAgICAgICBzaXplQW5kVmFsID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoZXJlIGlzIGEgU0EuIFdlIGFyZSBpbnRlcmVzdGVkIGluIGJpdHMgVjAgLSBWMy4gKi8KKyAgICAgICAgICAgIHNpemVBbmRWYWwgJj0gMHhmOworICAgICAgICB9CisKKyAgICAgICAgLyogQ2hlY2sgaWYgZW50aXJlIGVudHJ5IGlzIGZyZWUuICovCisgICAgICAgIGlmIChzaXplQW5kVmFsID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFdlIHByZWZlciB0byB1c2UgcGFydGlhbGx5IGZ1bGwgZW50cmllcy4gTWFrZSBub3RlIG9mIHRoaXMgYW5kCisgICAgICAgICAgICAgKiBjb250aW51ZS4gKi8KKyAgICAgICAgICAgIGlmICghZW1wdHlGb3VuZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbXB0eUVudHJ5ID0gaTsKKyAgICAgICAgICAgICAgICBlbXB0eUZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayBmb3IgZnJlZSBzaG9ydCBhZGRyZXNzIGVudHJpZXMuICovCisgICAgICAgIHNpemVBbmRWYWwgPSAofnNpemVBbmRWYWwpICYgMHhmOworICAgICAgICBqID0gMDsKKworICAgICAgICB3aGlsZSAoc2l6ZUFuZFZhbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNpemVBbmRWYWwgJiAweDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9uRW1wdHlGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNpemVBbmRWYWwgPj49IDE7CisgICAgICAgICAgICBqKys7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9uRW1wdHlGb3VuZCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobm9uRW1wdHlGb3VuZCkKKyAgICB7CisgICAgICAgICplbnRyeSA9IGk7CisgICAgICAgICpzaG9ydEFkZHJJZHggPSBqOworICAgIH0KKyAgICBlbHNlIGlmIChlbXB0eUZvdW5kKQorICAgIHsKKyAgICAgICAgKmVudHJ5ID0gZW1wdHlFbnRyeTsKKyAgICAgICAgKnNob3J0QWRkcklkeCA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBGVERGX0ZBTFNFOworICAgIH0KKworICAgIHJldHVybiBGVERGX1RSVUU7Cit9CisKK0ZUREZfQm9vbGVhbiBGVERGX2ZwcHJHZXRGcmVlRXh0QWRkcmVzcyh1aW50OF90ICplbnRyeSkKK3sKKyAgICBpbnQgaTsKKyAgICB1aW50MzJfdCBzaXplQW5kVmFsOworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgc2l6ZUFuZFZhbCA9ICpGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX1NJWkVfQU5EX1ZBTCwgaSk7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgbm8gdmFsaWQgZXh0ZW5kZWQgb3Igc2hvcnQgYWRkcmVzcy4gICovCisgICAgICAgIGlmICghc2l6ZUFuZFZhbCB8fCAoc2l6ZUFuZFZhbCA9PSBNU0tfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NIT1JUX0xPTkdOT1QpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChmb3VuZCkKKyAgICB7CisgICAgICAgICplbnRyeSA9IGk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBGVERGX0ZBTFNFOworICAgIH0KKworICAgIHJldHVybiBGVERGX1RSVUU7Cit9CisKK0ZUREZfQm9vbGVhbiBGVERGX2ZwcHJMb29rdXBTaG9ydEFkZHJlc3MoRlRERl9TaG9ydEFkZHJlc3Mgc2hvcnRBZGRyLCB1aW50OF90ICplbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqc2hvcnRBZGRySWR4KQoreworICAgIHVpbnQ4X3QgaTsKKyAgICB1aW50MzJfdCBzaXplQW5kVmFsOworICAgIHVpbnQzMl90IHNhUGFydDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgc2l6ZUFuZFZhbCA9ICpGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX1NJWkVfQU5EX1ZBTCwgaSk7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgYSB2YWxpZCBzaG9ydCBhZGRyZXNzLiAqLworICAgICAgICBpZiAoIShzaXplQW5kVmFsICYgTVNLX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9TSE9SVF9MT05HTk9UKSB8fAorICAgICAgICAgICAgIShzaXplQW5kVmFsICYgTVNLX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9WQUxJRF9TQSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc2FQYXJ0ID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfTCwgaSk7CisKKyAgICAgICAgaWYgKHNpemVBbmRWYWwgJiAweDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzaG9ydEFkZHIgPT0gKEZUREZfU2hvcnRBZGRyZXNzKShzYVBhcnQgJiAweDAwMDBmZmZmKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZW50cnkgPSBpOworICAgICAgICAgICAgICAgICpzaG9ydEFkZHJJZHggPSAwOworICAgICAgICAgICAgICAgIHJldHVybiBGVERGX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZUFuZFZhbCAmIDB4MikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNob3J0QWRkciA9PSAoRlRERl9TaG9ydEFkZHJlc3MpKChzYVBhcnQgPj4gMTYpICYgMHgwMDAwZmZmZikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmVudHJ5ID0gaTsKKyAgICAgICAgICAgICAgICAqc2hvcnRBZGRySWR4ID0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRlRERl9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc2FQYXJ0ID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfSCwgaSk7CisKKyAgICAgICAgaWYgKHNpemVBbmRWYWwgJiAweDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzaG9ydEFkZHIgPT0gKEZUREZfU2hvcnRBZGRyZXNzKShzYVBhcnQgJiAweDAwMDBmZmZmKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZW50cnkgPSBpOworICAgICAgICAgICAgICAgICpzaG9ydEFkZHJJZHggPSAyOworICAgICAgICAgICAgICAgIHJldHVybiBGVERGX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZUFuZFZhbCAmIDB4OCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNob3J0QWRkciA9PSAoKEZUREZfU2hvcnRBZGRyZXNzKShzYVBhcnQgPj4gMTYpICYgMHgwMDAwZmZmZikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmVudHJ5ID0gaTsKKyAgICAgICAgICAgICAgICAqc2hvcnRBZGRySWR4ID0gMzsKKyAgICAgICAgICAgICAgICByZXR1cm4gRlRERl9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEZUREZfRkFMU0U7Cit9CisKK0ZUREZfQm9vbGVhbiBGVERGX2ZwcHJMb29rdXBFeHRBZGRyZXNzKEZUREZfRXh0QWRkcmVzcyBleHRBZGRyLCB1aW50OF90ICplbnRyeSkKK3sKKyAgICB1aW50OF90IGk7CisgICAgdWludDMyX3Qgc2l6ZUFuZFZhbDsKKyAgICB1aW50MzJfdCBleHRBZGRySGksIGV4dEFkZHJMbzsKKyAgICBleHRBZGRySGkgPSAodWludDMyX3QpKChleHRBZGRyID4+IDMyKSAmIDB4ZmZmZmZmZmYpOworICAgIGV4dEFkZHJMbyA9ICh1aW50MzJfdCkoZXh0QWRkciAmIDB4ZmZmZmZmZmYpOworCisgICAgZm9yIChpID0gMDsgaSA8IEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBzaXplQW5kVmFsID0gKkZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fU0laRV9BTkRfVkFMLCBpKTsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSBpcyBhIHZhbGlkIGV4dGVuZGVkIGFkZHJlc3MuICovCisgICAgICAgIGlmIChzaXplQW5kVmFsICE9IDB4MSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGV4dEFkZHJMbyA9PSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9MLCBpKSkgJiYKKyAgICAgICAgICAgIChleHRBZGRySGkgPT0gRlRERl9HRVRfRklFTERfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfSCwgaSkpKQorICAgICAgICB7CisgICAgICAgICAgICAqZW50cnkgPSBpOworICAgICAgICAgICAgcmV0dXJuIEZUREZfVFJVRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVERGX0ZBTFNFOworfQorCisjZW5kaWYgLyogRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8gKi8KKwordm9pZCBGVERGX2ZwcHJTZXRNb2RlKEZUREZfQm9vbGVhbiBtYXRjaEZwLCBGVERGX0Jvb2xlYW4gZnBPdmVycmlkZSwgRlRERl9Cb29sZWFuIGZwRm9yY2UpCit7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9BRERSX1RBQl9NQVRDSF9GUF9WQUxVRSwgbWF0Y2hGcCA/IDEgOiAwKTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0ZQX09WRVJSSURFLCBmcE92ZXJyaWRlID8gMSA6IDApOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfRlBfRk9SQ0VfVkFMVUUsIGZwRm9yY2UgPyAxIDogMCk7Cit9CisKKyNpZiBGVERGX0ZQX0JJVF9URVNUX01PREUKK3ZvaWQgRlRERl9mcHByR2V0TW9kZShGVERGX0Jvb2xlYW4gKm1hdGNoRnAsIEZUREZfQm9vbGVhbiAqZnBPdmVycmlkZSwgRlRERl9Cb29sZWFuICpmcEZvcmNlKQoreworICAgICptYXRjaEZwID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9BRERSX1RBQl9NQVRDSF9GUF9WQUxVRSkgPyBGVERGX1RSVUUgOiBGVERGX0ZBTFNFOworICAgICpmcE92ZXJyaWRlID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9GUF9PVkVSUklERSkgPyBGVERGX1RSVUUgOiBGVERGX0ZBTFNFOworICAgICpmcEZvcmNlID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9GUF9GT1JDRV9WQUxVRSkgPyBGVERGX1RSVUUgOiBGVERGX0ZBTFNFOworfQorI2VuZGlmIC8vIEZUREZfRlBfQklUX1RFU1RfTU9ERQorCit2b2lkIEZUREZfbHBkcEVuYWJsZShGVERGX0Jvb2xlYW4gZW5hYmxlKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfRlRERl9MUERQX0VOQUJMRSwgZW5hYmxlID8gMSA6IDApOworfQorCisjaWYgRlRERl9GUF9CSVRfVEVTVF9NT0RFCitGVERGX0Jvb2xlYW4gRlRERl9scGRwSXNFbmFibGVkKHZvaWQpCit7CisgICAgcmV0dXJuIEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfRlRERl9MUERQX0VOQUJMRSkgPyBGVERGX1RSVUUgOiBGVERGX0ZBTFNFOworfQorI2VuZGlmCisKKyNpZiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRgorCitzdGF0aWMgaW5saW5lIHZvaWQgRlRERl9zZGJTYXZlU3RhdGUodm9pZCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqdHhGaWZvUHRyID0gRlRERl9HRVRfUkVHX0FERFIoUkVURU5USU9OX1JBTV9UWF9GSUZPKTsKKyAgICB1aW50MzJfdCAqZHN0UHRyID0gKHVpbnQzMl90ICopIEZUREZfc2RiLmJ1ZmZlcjsKKyAgICB1aW50OF90IHdvcmRfbGVuZ3RoX3JlbTsKKworICAgIEZUREZfc2RiLm5yT2ZCYWNrb2ZmcyA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfQ1NNQV9DQV9OQl9TVEFUKTsKKworICAgIC8qIFJlYWQgZmlyc3QgNCBieXRlcy4gKi8KKyAgICAqZHN0UHRyKysgPSAqdHhGaWZvUHRyKys7CisKKyAgICBBU1NFUlRfV0FSTklORygoRlRERl9zZGIuYnVmZmVyWzBdID49IDMpICYmIChGVERGX3NkYi5idWZmZXJbMF0gPCBGVERGX0JVRkZFUl9MRU5HVEgpKTsKKyAgICAvKiBUaGUgbGVuZ3RoIGlzIHRoZSBidWZmZXIgbGVuZ3RoIGV4Y2x1ZGluZyB0aGUgbGVuZ3RoIGJ5dGUgaXRzZWxmICovCisgICAgd29yZF9sZW5ndGhfcmVtID0gKEZUREZfc2RiLmJ1ZmZlclswXSArIDQpIC8gNCAtIDE7IC8qIDEgd29yZCB3ZSBhbHJlYWR5IHJlYWQgKi8KKworICAgIHdoaWxlICh3b3JkX2xlbmd0aF9yZW0tLSkKKyAgICB7CisgICAgICAgICpkc3RQdHIrKyA9ICp0eEZpZm9QdHIrKzsKKyAgICB9CisKKyAgICBGVERGX3NkYi5tZXRhZGF0YTAgPSAqRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChSRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgIEZUREZfc2RiLm1ldGFkYXRhMSA9ICpGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9UWF9EQVRBX0JVRkZFUik7CisgICAgRlRERl9zZGIucGh5Q3NtYUNhQXR0ciA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUEhZQ1NNQUNBQVRUUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBGVERGX3NkYlJlc3VtZSh2b2lkKQoreworICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eEZpZm9QdHIgPSBGVERGX0dFVF9SRUdfQUREUihSRVRFTlRJT05fUkFNX1RYX0ZJRk8pOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eEZsYWdTZXQgPSBGVERGX0dFVF9GSUVMRF9BRERSKE9OX09GRl9SRUdNQVBfVFhfRkxBR19TRVQpOworICAgIHVpbnQzMl90ICpzcmNQdHIgPSAodWludDMyX3QgKikgRlRERl9zZGIuYnVmZmVyOworCisgICAgdWludDhfdCB3b3JkX2xlbmd0aF9yZW07CisKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0NTTUFfQ0FfTkJfVkFMLCBGVERGX3NkYi5uck9mQmFja29mZnMpOworCisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9DU01BX0NBX1JFU1VNRV9TRVQsIDEpOworCisgICAgQVNTRVJUX1dBUk5JTkcoKEZUREZfc2RiLmJ1ZmZlclswXSA+PSAzKSAmJiAoRlRERl9zZGIuYnVmZmVyWzBdIDwgRlRERl9CVUZGRVJfTEVOR1RIKSk7CisKKyAgICAvKiBUaGUgbGVuZ3RoIGlzIHRoZSBidWZmZXIgbGVuZ3RoIGV4Y2x1ZGluZyB0aGUgbGVuZ3RoIGJ5dGUgaXRzZWxmICovCisgICAgd29yZF9sZW5ndGhfcmVtID0gKEZUREZfc2RiLmJ1ZmZlclswXSArIDQpIC8gNDsKKworICAgIHdoaWxlICh3b3JkX2xlbmd0aF9yZW0tLSkKKyAgICB7CisgICAgICAgICp0eEZpZm9QdHIrKyA9ICpzcmNQdHIrKzsKKyAgICB9CisKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1BIWUNTTUFDQUFUVFIsIEZUREZfc2RiLnBoeUNzbWFDYUF0dHIpOworCisgICAgKkZUREZfR0VUX1JFR19BRERSKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzApID0gRlRERl9zZGIubWV0YWRhdGEwOworCisgICAgKkZUREZfR0VUX1JFR19BRERSKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEpID0gRlRERl9zZGIubWV0YWRhdGExOworCisgICAgKnR4RmxhZ1NldCB8PSAoMSA8PCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEZUREZfc2RiUmVzZXQodm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0NTTUFfQ0FfUkVTVU1FX0NMRUFSLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEZUREZfc2RiU2V0Q0NBUmV0cnlUaW1lKHZvaWQpCit7CisgICAgRlRERl9UaW1lIHRpbWVzdGFtcCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKyAgICBGVERGX1RpbWUgYm9TdGF0ID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1NUQVQpICoKKyAgICAgICAgICAgICAgICAgICAgICAgRlRERl9VTklUX0JBQ0tPRkZfUEVSSU9EOworICAgIEZUREZfc2RiLmNjYVJldHJ5VGltZSA9IHRpbWVzdGFtcCArIGJvU3RhdDsKK30KKwordm9pZCBGVERGX3NkYkZzbVJlc2V0KHZvaWQpCit7CisgICAgRlRERl9zZGJSZXNldCgpOworICAgIEZUREZfc2RiLnN0YXRlID0gRlRERl9TREJfU1RBVEVfSU5JVDsKK30KKwordm9pZCBGVERGX3NkYkZzbUJhY2tvZmZJUlEodm9pZCkKK3sKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCB8fCBGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZgorCisgICAgc3dpdGNoIChGVERGX3NkYi5zdGF0ZSkKKyAgICB7CisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9SRVNVTUlORzoKKyAgICAgICAgRlRERl9zZGJSZXNldCgpOworCisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9JTklUOgorICAgIGNhc2UgRlRERl9TREJfU1RBVEVfQkFDS0lOR19PRkY6CisgICAgICAgIEZUREZfc2RiU2V0Q0NBUmV0cnlUaW1lKCk7CisgICAgICAgIEZUREZfc2RiLnN0YXRlID0gRlRERl9TREJfU1RBVEVfQkFDS0lOR19PRkY7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgfQorfQorCit2b2lkIEZUREZfc2RiRnNtU2xlZXAodm9pZCkKK3sKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCB8fCBGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZgorCisgICAgc3dpdGNoIChGVERGX3NkYi5zdGF0ZSkKKyAgICB7CisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9CQUNLSU5HX09GRjoKKyAgICAgICAgRlRERl9zZGJTYXZlU3RhdGUoKTsKKyAgICAgICAgRlRERl9zZGIuc3RhdGUgPSBGVERGX1NEQl9TVEFURV9XQUlUSU5HX1dBS0VfVVBfSVJROworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9TREJfU1RBVEVfSU5JVDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICB9Cit9CisKK3ZvaWQgRlRERl9zZGJGc21BYm9ydFNsZWVwKHZvaWQpCit7CisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgfHwgRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisjZW5kaWYKKworICAgIHN3aXRjaCAoRlRERl9zZGIuc3RhdGUpCisgICAgeworICAgIGNhc2UgRlRERl9TREJfU1RBVEVfQkFDS0lOR19PRkY6CisgICAgICAgIEZUREZfc2RiLnN0YXRlID0gRlRERl9TREJfU1RBVEVfSU5JVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX0lOSVQ6CisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9XQUlUSU5HX1dBS0VfVVBfSVJROgorICAgIGNhc2UgRlRERl9TREJfU1RBVEVfUkVTVU1JTkc6CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgfQorfQorCit2b2lkIEZUREZfc2RiRnNtV2FrZVVwSVJRKHZvaWQpCit7CisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgfHwgRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisjZW5kaWYKKworICAgIHN3aXRjaCAoRlRERl9zZGIuc3RhdGUpCisgICAgeworICAgIGNhc2UgRlRERl9TREJfU1RBVEVfV0FJVElOR19XQUtFX1VQX0lSUToKKyAgICAgICAgRlRERl9zZGIuc3RhdGUgPSBGVERGX1NEQl9TVEFURV9SRVNVTUlORzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX0lOSVQ6CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgfQorfQorCit2b2lkIEZUREZfc2RiRnNtV2FrZVVwKHZvaWQpCit7CisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgfHwgRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisjZW5kaWYKKworICAgIHN3aXRjaCAoRlRERl9zZGIuc3RhdGUpCisgICAgeworICAgIGNhc2UgRlRERl9TREJfU1RBVEVfUkVTVU1JTkc6CisgICAgICAgIEZUREZfc2RiUmVzdW1lKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9XQUlUSU5HX1dBS0VfVVBfSVJROgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9TREJfU1RBVEVfSU5JVDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICB9Cit9CisKK3ZvaWQgRlRERl9zZGJGc21UeElSUSh2b2lkKQoreworI2lmICFkZWZpbmVkKEZUREZfTk9fQ1NMKSB8fCAhZGVmaW5lZChGVERGX05PX1RTQ0gpCisKKyAgICBpZiAoRlRERl9waWIubGVFbmFibGVkIHx8IEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2VuZGlmCisKKyAgICBzd2l0Y2ggKEZUREZfc2RiLnN0YXRlKQorICAgIHsKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX1JFU1VNSU5HOgorICAgICAgICBGVERGX3NkYlJlc2V0KCk7CisgICAgICAgIEZUREZfc2RiLnN0YXRlID0gRlRERl9TREJfU1RBVEVfSU5JVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX0JBQ0tJTkdfT0ZGOgorICAgICAgICBGVERGX3NkYi5zdGF0ZSA9IEZUREZfU0RCX1NUQVRFX0lOSVQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9JTklUOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKDApOworICAgIH0KK30KKworRlRERl9VU2VjIEZUREZfc2RiR2V0U2xlZXBUaW1lKHZvaWQpCit7CisgICAgRlRERl9VU2VjIHNsZWVwVGltZSA9IH4oKEZUREZfVVNlYykgMCk7CisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgfHwgRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgeworICAgICAgICByZXR1cm4gc2xlZXBUaW1lOworICAgIH0KKworI2VuZGlmCisKKyAgICBzd2l0Y2ggKEZUREZfc2RiLnN0YXRlKQorICAgIHsKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX0lOSVQ6CisgICAgeworICAgICAgICBpZiAoKEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQKSA9PSAwKSB8fCBGVERGX3JlcUN1cnJlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNsZWVwVGltZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzbGVlcFRpbWUgPSB+KChGVERGX1VTZWMpIDApOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9CQUNLSU5HX09GRjoKKyAgICB7CisgICAgICAgIEZUREZfVGltZSBjdXJyZW50VGltZSA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKworICAgICAgICBpZiAoY3VycmVudFRpbWUgPD0gRlRERl9zZGIuY2NhUmV0cnlUaW1lKQorICAgICAgICB7CisgICAgICAgICAgICBzbGVlcFRpbWUgPSAoRlRERl9zZGIuY2NhUmV0cnlUaW1lIC0gY3VycmVudFRpbWUpICogMTY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzbGVlcFRpbWUgPSAoMSA8PCBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCAtIDEpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGltZSArIEZUREZfc2RiLmNjYVJldHJ5VGltZSkgKiAxNjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzbGVlcFRpbWUgPiAyNTYgKiBGVERGX1VOSVRfQkFDS09GRl9QRVJJT0QgKiAxNikKKyAgICAgICAgeworICAgICAgICAgICAgLyogV2UgaGF2ZSBleGNlZWRlZCB0aGUgQ0NBIHJldHJ5IHRpbWUuIEFib3J0IHNsZWVwIGFuZCB3YWl0IGZvciBUeCBJUlEuICovCisgICAgICAgICAgICBzbGVlcFRpbWUgPSAwOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9SRVNVTUlORzoKKyAgICAgICAgc2xlZXBUaW1lID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX1dBSVRJTkdfV0FLRV9VUF9JUlE6CisgICAgICAgIHNsZWVwVGltZSA9IH4oKEZUREZfVVNlYykgMCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgfQorCisgICAgcmV0dXJuIHNsZWVwVGltZTsKK30KKworI2VuZGlmIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisKKyNlbmRpZiAvKiAjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSAqLworCisjaWYgZGdfY29uZmlnVVNFX0ZUREZfRERQSFkgPT0gMQordm9pZCBGVERGX2RkcGh5U2V0KHVpbnQxNl90IGNjYVJlZykKK3sKKyAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisgICAgLyogV2UgdXNlIHRoZSBjcml0aWNhbCBzZWN0aW9uIGhlcmUgYXMgcHJvdGVjdGlvbiBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZSBhbmQgdGhlIEhXIHNsZWVwCisgICAgICogc3RhdGUuICovCisgICAgRlRERl9kZHBoeUNjYVJlZyA9IGNjYVJlZzsKKworICAgIC8qIEFwcGx5IGltbWVkaWF0ZWx5IGlmIGJsb2NrIGlzIHVwLiAqLworICAgIGlmIChSRUdfR0VURihDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIEZUREZfU0xFRVApID09IDB4MCkKKyAgICB7CisgICAgICAgIEZUREZfRFBIWS0+RERQSFlfQ0NBX1JFRyA9IEZUREZfZGRwaHlDY2FSZWc7CisgICAgfQorCisgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKK30KKwordm9pZCBGVERGX2RkcGh5UmVzdG9yZSh2b2lkKQoreworICAgIGlmIChGVERGX2RkcGh5Q2NhUmVnKQorICAgIHsKKyAgICAgICAgLyogQXBwbHkgaW1tZWRpYXRlbHkgaWYgYmxvY2sgaXMgdXAuICovCisgICAgICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICAgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKFJFR19HRVRGKENSR19UT1AsIFBNVV9DVFJMX1JFRywgRlRERl9TTEVFUCkgPT0gMHgwKTsKKyAgICAgICAgRlRERl9EUEhZLT5ERFBIWV9DQ0FfUkVHID0gRlRERl9kZHBoeUNjYVJlZzsKKyAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKyAgICB9Cit9CisKK3ZvaWQgRlRERl9kZHBoeVNhdmUodm9pZCkKK3sKKyAgICAvKiBBcHBseSBpbW1lZGlhdGVseSBpZiBibG9jayBpcyB1cC4gKi8KKyAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisgICAgQVNTRVJUX1dBUk5JTkcoUkVHX0dFVEYoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBGVERGX1NMRUVQKSA9PSAweDApOworICAgIEZUREZfZGRwaHlDY2FSZWcgPSBGVERGX0RQSFktPkREUEhZX0NDQV9SRUc7CisgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2RhdGEuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M2MzhkYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9kYXRhLmMKQEAgLTAsMCArMSw3MzUgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBkYXRhLmMKKyAqCisgKiBAYnJpZWYgRlRERiBkYXRhIHNlbmQvcmVjZWl2ZSBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8ZnRkZi5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAicmVnbWFwLmgiCisKKyNpZm5kZWYgRlRERl9MSVRFCit2b2lkIEZUREZfcHJvY2Vzc0RhdGFSZXF1ZXN0KEZUREZfRGF0YVJlcXVlc3QgKmRhdGFSZXF1ZXN0KQoreworI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgIGlmIChGVERGX3BpYi50c2NoRW5hYmxlZCAmJgorICAgICAgICBGVERGX3RzY2hTbG90TGluay0+cmVxdWVzdCAhPSBkYXRhUmVxdWVzdCkKKyAgICB7CisgICAgICAgIEZUREZfU3RhdHVzIHN0YXR1czsKKworICAgICAgICBpZiAoZGF0YVJlcXVlc3QtPmRzdEFkZHJNb2RlID09IEZUREZfU0hPUlRfQUREUkVTUyAmJgorICAgICAgICAgICAgIWRhdGFSZXF1ZXN0LT5pbmRpcmVjdFRYKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBGVERGX3NjaGVkdWxlVHNjaCgoRlRERl9Nc2dCdWZmZXIgKikgZGF0YVJlcXVlc3QpOworCisgICAgICAgICAgICBpZiAoc3RhdHVzID09IEZUREZfU1VDQ0VTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBGVERGX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICB9CisKKyAgICAgICAgRlRERl9zZW5kRGF0YUNvbmZpcm0oZGF0YVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworCisgICAgaW50ICAgICAgICAgICAgICBxdWV1ZTsKKyAgICBGVERGX0FkZHJlc3NNb2RlIGRzdEFkZHJNb2RlID0gZGF0YVJlcXVlc3QtPmRzdEFkZHJNb2RlOworICAgIEZUREZfUEFOSWQgICAgICAgZHN0UEFOSWQgICAgPSBkYXRhUmVxdWVzdC0+ZHN0UEFOSWQ7CisgICAgRlRERl9BZGRyZXNzICAgICBkc3RBZGRyICAgICA9IGRhdGFSZXF1ZXN0LT5kc3RBZGRyOworCisgICAgLy8gU2VhcmNoIGZvciBhbiBleGlzdGluZyBpbmRpcmVjdCBxdWV1ZQorICAgIGZvciAocXVldWUgPSAwOyBxdWV1ZSA8IEZUREZfTlJfT0ZfUkVRX0JVRkZFUlM7IHF1ZXVlKyspCisgICAgeworICAgICAgICBpZiAoZHN0QWRkck1vZGUgPT0gRlRERl9TSE9SVF9BRERSRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBxdWV1ZSBdLmFkZHJNb2RlID09IGRzdEFkZHJNb2RlICYmCisgICAgICAgICAgICAgICAgRlRERl90eFBlbmRpbmdMaXN0WyBxdWV1ZSBdLmFkZHIuc2hvcnRBZGRyZXNzID09IGRzdEFkZHIuc2hvcnRBZGRyZXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRzdEFkZHJNb2RlID09IEZUREZfRVhURU5ERURfQUREUkVTUykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEZUREZfdHhQZW5kaW5nTGlzdFsgcXVldWUgXS5hZGRyTW9kZSA9PSBkc3RBZGRyTW9kZSAmJgorICAgICAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgcXVldWUgXS5hZGRyLmV4dEFkZHJlc3MgPT0gZHN0QWRkci5leHRBZGRyZXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRhdGFSZXF1ZXN0LT5pbmRpcmVjdFRYKQorICAgIHsKKyAgICAgICAgRlRERl9TdGF0dXMgc3RhdHVzID0gRlRERl9TVUNDRVNTOworCisgICAgICAgIGlmIChxdWV1ZSA8IEZUREZfTlJfT0ZfUkVRX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFF1ZXVlIHJlcXVlc3QgaW4gZXhpc3RpbmcgcXVldWUKKyAgICAgICAgICAgIHN0YXR1cyA9IEZUREZfcXVldWVSZXFIZWFkKChGVERGX01zZ0J1ZmZlciAqKSBkYXRhUmVxdWVzdCwgJkZUREZfdHhQZW5kaW5nTGlzdFsgcXVldWUgXS5xdWV1ZSk7CisKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gRlRERl9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfYWRkVHhQZW5kaW5nVGltZXIoKEZUREZfTXNnQnVmZmVyICopIGRhdGFSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3BpYi50cmFuc2FjdGlvblBlcnNpc3RlbmNlVGltZSAqIEZUREZfQkFTRV9TVVBFUkZSQU1FX0RVUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9zZW5kVHJhbnNhY3Rpb25FeHBpcmVkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZHN0QWRkck1vZGUgIT0gRlRERl9FWFRFTkRFRF9BRERSRVNTICYmCisgICAgICAgICAgICBkc3RBZGRyTW9kZSAhPSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IEZUREZfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhdHVzICE9IEZUREZfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUXVldWVpbmcgb2YgaW5kaXJlY3QgdHJhbnNmZXIgd2FzIG5vdCBzdWNjZXNzZnVsCisgICAgICAgICAgICBGVERGX3NlbmREYXRhQ29uZmlybShkYXRhUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworI2lmIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPCisgICAgICAgIHVpbnQ4X3QgZW50cnksIHNob3J0QWRkcklkeDsKKworICAgICAgICBpZiAoZHN0QWRkck1vZGUgPT0gRlRERl9TSE9SVF9BRERSRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRlRERl9mcHByR2V0RnJlZVNob3J0QWRkcmVzcygmZW50cnksICZzaG9ydEFkZHJJZHgpID09IEZUREZfRkFMU0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ290byB0cmFuc2FjdGlvbl9vdmVyZmxvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkc3RBZGRyTW9kZSA9PSBGVERGX0VYVEVOREVEX0FERFJFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGVERGX2ZwcHJHZXRGcmVlRXh0QWRkcmVzcygmZW50cnkpID09IEZUREZfRkFMU0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ290byB0cmFuc2FjdGlvbl9vdmVyZmxvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IEZUREZfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICAgIH0KKworI2VuZGlmCisKKyAgICAgICAgLy8gU2VhcmNoIGZvciBhbiBlbXB0eSBpbmRpcmVjdCBxdWV1ZQorICAgICAgICBmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBGVERGX05SX09GX1JFUV9CVUZGRVJTOyBxdWV1ZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBxdWV1ZSBdLmFkZHJNb2RlID09IEZUREZfTk9fQUREUkVTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX3R4UGVuZGluZ0xpc3RbIHF1ZXVlIF0uYWRkck1vZGUgPSBkc3RBZGRyTW9kZTsKKyAgICAgICAgICAgICAgICBGVERGX3R4UGVuZGluZ0xpc3RbIHF1ZXVlIF0uUEFOSWQgICAgPSBkc3RQQU5JZDsKKyAgICAgICAgICAgICAgICBGVERGX3R4UGVuZGluZ0xpc3RbIHF1ZXVlIF0uYWRkciAgICAgPSBkc3RBZGRyOworCisgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9xdWV1ZVJlcUhlYWQoKEZUREZfTXNnQnVmZmVyICopIGRhdGFSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGVERGX3R4UGVuZGluZ0xpc3RbIHF1ZXVlIF0ucXVldWUpOworCisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBGVERGX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgeworI2lmIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRzdEFkZHJNb2RlID09IEZUREZfU0hPUlRfQUREUkVTUykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9mcHByU2V0U2hvcnRBZGRyZXNzKGVudHJ5LCBzaG9ydEFkZHJJZHgsIGRzdEFkZHIuc2hvcnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzc1ZhbGlkKGVudHJ5LCBzaG9ydEFkZHJJZHgsIEZUREZfVFJVRSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZHN0QWRkck1vZGUgPT0gRlRERl9FWFRFTkRFRF9BRERSRVNTKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzKGVudHJ5LCBkc3RBZGRyLnNob3J0QWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzVmFsaWQoZW50cnksIEZUREZfVFJVRSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisjZW5kaWYgLyogRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8gKi8KKyAgICAgICAgICAgICAgICAgICAgRlRERl9hZGRUeFBlbmRpbmdUaW1lcigoRlRERl9Nc2dCdWZmZXIgKikgZGF0YVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9waWIudHJhbnNhY3Rpb25QZXJzaXN0ZW5jZVRpbWUgKiBGVERGX0JBU0VfU1VQRVJGUkFNRV9EVVJBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3NlbmRUcmFuc2FjdGlvbkV4cGlyZWQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIERpZCBub3QgZmluZCBhbiBleGlzdGluZyBvciBhbiBlbXB0eSBxdWV1ZQorI2lmIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPCit0cmFuc2FjdGlvbl9vdmVyZmxvdzoKKyNlbmRpZgorICAgICAgICBGVERGX3NlbmREYXRhQ29uZmlybShkYXRhUmVxdWVzdCwgRlRERl9UUkFOU0FDVElPTl9PVkVSRkxPVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChGVERGX3JlcUN1cnJlbnQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEZUREZfcmVxQ3VycmVudCA9IChGVERGX01zZ0J1ZmZlciAqKSBkYXRhUmVxdWVzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKEZUREZfcXVldWVSZXFIZWFkKChGVERGX01zZ0J1ZmZlciAqKSBkYXRhUmVxdWVzdCwgJkZUREZfcmVxUXVldWUpID09IEZUREZfVFJBTlNBQ1RJT05fT1ZFUkZMT1cpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfc2VuZERhdGFDb25maXJtKGRhdGFSZXF1ZXN0LCBGVERGX1RSQU5TQUNUSU9OX09WRVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRlRERl9GcmFtZUhlYWRlciAgICAqZnJhbWVIZWFkZXIgICAgPSAmRlRERl9maDsKKyAgICBGVERGX1NlY3VyaXR5SGVhZGVyICpzZWN1cml0eUhlYWRlciA9ICZGVERGX3NoOworCisgICAgZnJhbWVIZWFkZXItPmZyYW1lVHlwZSA9IGRhdGFSZXF1ZXN0LT5zZW5kTXVsdGlQdXJwb3NlID8gRlRERl9NVUxUSVBVUlBPU0VfRlJBTUUgOiBGVERGX0RBVEFfRlJBTUU7CisKKyAgICBGVERGX0Jvb2xlYW4gZnJhbWVQZW5kaW5nOworCisgICAgaWYgKHF1ZXVlIDwgRlRERl9OUl9PRl9SRVFfQlVGRkVSUykKKyAgICB7CisgICAgICAgIGZyYW1lUGVuZGluZyA9IEZUREZfVFJVRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZnJhbWVQZW5kaW5nID0gRlRERl9GQUxTRTsKKyAgICB9CisKKyAgICBmcmFtZUhlYWRlci0+b3B0aW9ucyA9CisgICAgICAgIChkYXRhUmVxdWVzdC0+c2VjdXJpdHlMZXZlbCA+IDAgPyBGVERGX09QVF9TRUNVUklUWV9FTkFCTEVEIDogMCkgfAorICAgICAgICAoZGF0YVJlcXVlc3QtPmFja1RYID8gRlRERl9PUFRfQUNLX1JFUVVFU1RFRCA6IDApIHwKKyAgICAgICAgKGZyYW1lUGVuZGluZyA/IEZUREZfT1BUX0ZSQU1FX1BFTkRJTkcgOiAwKSB8CisgICAgICAgICgoZGF0YVJlcXVlc3QtPmZyYW1lQ29udHJvbE9wdGlvbnMgJiBGVERGX1BBTl9JRF9QUkVTRU5UKSA/IEZUREZfT1BUX1BBTl9JRF9QUkVTRU5UIDogMCkgfAorICAgICAgICAoKGRhdGFSZXF1ZXN0LT5mcmFtZUNvbnRyb2xPcHRpb25zICYgRlRERl9JRVNfSU5DTFVERUQpID8gRlRERl9PUFRfSUVTX1BSRVNFTlQgOiAwKSB8CisgICAgICAgICgoZGF0YVJlcXVlc3QtPmZyYW1lQ29udHJvbE9wdGlvbnMgJiBGVERGX1NFUV9OUl9TVVBQUkVTU0VEKSA/IEZUREZfT1BUX1NFUV9OUl9TVVBQUkVTU0VEIDogMCk7CisKKyAgICBpZiAoRlRERl9waWIubGVFbmFibGVkIHx8IEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgIHsKKyAgICAgICAgZnJhbWVIZWFkZXItPm9wdGlvbnMgfD0gRlRERl9PUFRfRU5IQU5DRUQ7CisgICAgfQorCisgICAgZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlICAgICAgICAgPSBkYXRhUmVxdWVzdC0+c3JjQWRkck1vZGU7CisgICAgZnJhbWVIZWFkZXItPnNyY1BBTklkICAgICAgICAgICAgPSBGVERGX3BpYi5QQU5JZDsKKyAgICBmcmFtZUhlYWRlci0+ZHN0QWRkck1vZGUgICAgICAgICA9IGRhdGFSZXF1ZXN0LT5kc3RBZGRyTW9kZTsKKyAgICBmcmFtZUhlYWRlci0+ZHN0UEFOSWQgICAgICAgICAgICA9IGRhdGFSZXF1ZXN0LT5kc3RQQU5JZDsKKyAgICBmcmFtZUhlYWRlci0+ZHN0QWRkciAgICAgICAgICAgICA9IGRhdGFSZXF1ZXN0LT5kc3RBZGRyOworCisgICAgc2VjdXJpdHlIZWFkZXItPnNlY3VyaXR5TGV2ZWwgICAgPSBkYXRhUmVxdWVzdC0+c2VjdXJpdHlMZXZlbDsKKyAgICBzZWN1cml0eUhlYWRlci0+a2V5SWRNb2RlICAgICAgICA9IGRhdGFSZXF1ZXN0LT5rZXlJZE1vZGU7CisgICAgc2VjdXJpdHlIZWFkZXItPmtleUluZGV4ICAgICAgICAgPSBkYXRhUmVxdWVzdC0+a2V5SW5kZXg7CisgICAgc2VjdXJpdHlIZWFkZXItPmtleVNvdXJjZSAgICAgICAgPSBkYXRhUmVxdWVzdC0+a2V5U291cmNlOworICAgIHNlY3VyaXR5SGVhZGVyLT5mcmFtZUNvdW50ZXIgICAgID0gRlRERl9waWIuZnJhbWVDb3VudGVyOworICAgIHNlY3VyaXR5SGVhZGVyLT5mcmFtZUNvdW50ZXJNb2RlID0gRlRERl9waWIuZnJhbWVDb3VudGVyTW9kZTsKKworI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgIGlmIChGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICB7CisgICAgICAgIGZyYW1lSGVhZGVyLT5TTiA9IEZUREZfcHJvY2Vzc1RzY2hTTigoRlRERl9Nc2dCdWZmZXIgKilkYXRhUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcGliLkRTTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhUmVxdWVzdC0+cmVxdWVzdFNOKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworICAgIHsKKyAgICAgICAgZnJhbWVIZWFkZXItPlNOID0gRlRERl9waWIuRFNOOworICAgIH0KKworICAgIEZUREZfT2N0ZXQgKnR4UHRyID0gKEZUREZfT2N0ZXQgKikgRlRERl9HRVRfUkVHX0FERFIoUkVURU5USU9OX1JBTV9UWF9GSUZPKSArCisgICAgICAgICAgICAgICAgICAgICAgICAoRlRERl9CVUZGRVJfTEVOR1RIICogRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyAgICAvLyBTa2lwIFBIWSBoZWFkZXIgKD0gTUFDIGxlbmd0aCkKKyAgICB0eFB0cisrOworCisgICAgRlRERl9EYXRhTGVuZ3RoIG1zZHVMZW5ndGggPSBkYXRhUmVxdWVzdC0+bXNkdUxlbmd0aDsKKworICAgIHR4UHRyICAgICAgICAgICA9IEZUREZfYWRkRnJhbWVIZWFkZXIodHhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZHVMZW5ndGgpOworCisgICAgdHhQdHIgPSBGVERGX2FkZFNlY3VyaXR5SGVhZGVyKHR4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUhlYWRlcik7CisKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorCisgICAgaWYgKGRhdGFSZXF1ZXN0LT5mcmFtZUNvbnRyb2xPcHRpb25zICYgRlRERl9JRVNfSU5DTFVERUQpCisgICAgeworICAgICAgICB0eFB0ciA9IEZUREZfYWRkSWVzKHR4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZXF1ZXN0LT5oZWFkZXJJRUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlcXVlc3QtPnBheWxvYWRJRUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlcXVlc3QtPm1zZHVMZW5ndGgpOworICAgIH0KKworI2VuZGlmIC8qICFGVERGX05PX0NTTCB8fCAhRlRERl9OT19UU0NIICovCisKKyAgICBGVERGX1N0YXR1cyBzdGF0dXMgPSBGVERGX3NlbmRGcmFtZShGVERGX3BpYi5jdXJyZW50Q2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVxdWVzdC0+bXNkdUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVxdWVzdC0+bXNkdSk7CisKKyAgICBpZiAoc3RhdHVzICE9IEZUREZfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIEZUREZfc2VuZERhdGFDb25maXJtKGRhdGFSZXF1ZXN0LCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgICAgIEZUREZfcmVxQ3VycmVudCA9IE5VTEw7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZUREZfbnJPZlJldHJpZXMgPSAwOworCisgICAgaWYgKGZyYW1lSGVhZGVyLT5TTiA9PSBGVERGX3BpYi5EU04pCisgICAgeworICAgICAgICBGVERGX3BpYi5EU04rKzsKKyAgICB9Cit9CisKK3ZvaWQgRlRERl9zZW5kRGF0YUNvbmZpcm0oRlRERl9EYXRhUmVxdWVzdCAgKmRhdGFSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1N0YXR1cyAgICAgICAgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RpbWUgICAgICAgICAgdGltZXN0YW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NOICAgICAgICAgICAgRFNOLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX051bU9mQmFja29mZnMgbnVtT2ZCYWNrb2ZmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9JRUxpc3QgICAgICAgKmFja1BheWxvYWQpCit7CisgICAgRlRERl9SRUxfREFUQV9CVUZGRVIoZGF0YVJlcXVlc3QtPm1zZHUpOworCisgICAgRlRERl9EYXRhQ29uZmlybSAqZGF0YUNvbmZpcm0gPSAoRlRERl9EYXRhQ29uZmlybSAqKSBGVERGX0dFVF9NU0dfQlVGRkVSKHNpemVvZihGVERGX0RhdGFDb25maXJtKSk7CisKKyAgICBkYXRhQ29uZmlybS0+bXNnSWQgICAgICAgICA9IEZUREZfREFUQV9DT05GSVJNOworICAgIGRhdGFDb25maXJtLT5tc2R1SGFuZGxlICAgID0gZGF0YVJlcXVlc3QtPm1zZHVIYW5kbGU7CisgICAgZGF0YUNvbmZpcm0tPnN0YXR1cyAgICAgICAgPSBzdGF0dXM7CisgICAgZGF0YUNvbmZpcm0tPnRpbWVzdGFtcCAgICAgPSB0aW1lc3RhbXA7CisgICAgZGF0YUNvbmZpcm0tPm51bU9mQmFja29mZnMgPSBudW1PZkJhY2tvZmZzOworICAgIGRhdGFDb25maXJtLT5EU04gICAgICAgICAgID0gRFNOOworICAgIGRhdGFDb25maXJtLT5hY2tQYXlsb2FkICAgID0gYWNrUGF5bG9hZDsKKworICAgIGlmIChGVERGX3JlcUN1cnJlbnQgPT0gKEZUREZfTXNnQnVmZmVyICopZGF0YVJlcXVlc3QpCisgICAgeworICAgICAgICBGVERGX3JlcUN1cnJlbnQgPSBOVUxMOworICAgIH0KKworICAgIEZUREZfUkVMX01TR19CVUZGRVIoKEZUREZfTXNnQnVmZmVyICopIGRhdGFSZXF1ZXN0KTsKKyAgICBGVERGX1JDVl9NU0coKEZUREZfTXNnQnVmZmVyICopIGRhdGFDb25maXJtKTsKKyNpZiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTworICAgIEZUREZfZnBGc21DbGVhclBlbmRpbmcoKTsKKyNlbmRpZiAvKiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTyAqLworICAgIEZUREZfcHJvY2Vzc05leHRSZXF1ZXN0KCk7Cit9CisKK3ZvaWQgRlRERl9zZW5kRGF0YUluZGljYXRpb24oRlRERl9GcmFtZUhlYWRlciAgICAqZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU2VjdXJpdHlIZWFkZXIgKnNlY3VyaXR5SGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0lFTGlzdCAgICAgICAgICpwYXlsb2FkSUVMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0RhdGFMZW5ndGggICAgICBtc2R1TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0ICAgICAgICAgICptc2R1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0xpbmtRdWFsaXR5ICAgICBtcGR1TGlua1F1YWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVGltZSAgICAgICAgICAgIHRpbWVzdGFtcCkKK3sKKyAgICBGVERGX0RhdGFJbmRpY2F0aW9uICpkYXRhSW5kaWNhdGlvbiA9IChGVERGX0RhdGFJbmRpY2F0aW9uICopIEZUREZfR0VUX01TR19CVUZGRVIoc2l6ZW9mKEZUREZfRGF0YUluZGljYXRpb24pKTsKKyAgICBGVERGX09jdGV0ICAgICAgICAgICptc2R1QnVmICAgICAgICA9IEZUREZfR0VUX0RBVEFfQlVGRkVSKG1zZHVMZW5ndGgpOworICAgIEZUREZfT2N0ZXQgICAgICAgICAgKmJ1ZlB0ciAgICAgICAgID0gbXNkdUJ1ZjsKKworICAgIGludCAgICAgICAgICAgICAgICAgIG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgbXNkdUxlbmd0aDsgbisrKQorICAgIHsKKyAgICAgICAgKm1zZHVCdWYrKyA9ICptc2R1Kys7CisgICAgfQorCisgICAgZGF0YUluZGljYXRpb24tPm1zZ0lkICAgICAgICAgICA9IEZUREZfREFUQV9JTkRJQ0FUSU9OOworICAgIGRhdGFJbmRpY2F0aW9uLT5zcmNBZGRyTW9kZSAgICAgPSBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGU7CisgICAgZGF0YUluZGljYXRpb24tPnNyY1BBTklkICAgICAgICA9IGZyYW1lSGVhZGVyLT5zcmNQQU5JZDsKKyAgICBkYXRhSW5kaWNhdGlvbi0+c3JjQWRkciAgICAgICAgID0gZnJhbWVIZWFkZXItPnNyY0FkZHI7CisgICAgZGF0YUluZGljYXRpb24tPmRzdEFkZHJNb2RlICAgICA9IGZyYW1lSGVhZGVyLT5kc3RBZGRyTW9kZTsKKyAgICBkYXRhSW5kaWNhdGlvbi0+ZHN0UEFOSWQgICAgICAgID0gZnJhbWVIZWFkZXItPmRzdFBBTklkOworICAgIGRhdGFJbmRpY2F0aW9uLT5kc3RBZGRyICAgICAgICAgPSBmcmFtZUhlYWRlci0+ZHN0QWRkcjsKKyAgICBkYXRhSW5kaWNhdGlvbi0+bXNkdUxlbmd0aCAgICAgID0gbXNkdUxlbmd0aDsKKyAgICBkYXRhSW5kaWNhdGlvbi0+bXNkdSAgICAgICAgICAgID0gYnVmUHRyOworICAgIGRhdGFJbmRpY2F0aW9uLT5tcGR1TGlua1F1YWxpdHkgPSBtcGR1TGlua1F1YWxpdHk7CisgICAgZGF0YUluZGljYXRpb24tPkRTTiAgICAgICAgICAgICA9IGZyYW1lSGVhZGVyLT5TTjsKKyAgICBkYXRhSW5kaWNhdGlvbi0+dGltZXN0YW1wICAgICAgID0gdGltZXN0YW1wOworICAgIGRhdGFJbmRpY2F0aW9uLT5zZWN1cml0eUxldmVsICAgPSBzZWN1cml0eUhlYWRlci0+c2VjdXJpdHlMZXZlbDsKKyAgICBkYXRhSW5kaWNhdGlvbi0+a2V5SWRNb2RlICAgICAgID0gc2VjdXJpdHlIZWFkZXItPmtleUlkTW9kZTsKKyAgICBkYXRhSW5kaWNhdGlvbi0+a2V5SW5kZXggICAgICAgID0gc2VjdXJpdHlIZWFkZXItPmtleUluZGV4OworICAgIGRhdGFJbmRpY2F0aW9uLT5wYXlsb2FkSUVMaXN0ICAgPSBwYXlsb2FkSUVMaXN0OworCisgICAgaWYgKGRhdGFJbmRpY2F0aW9uLT5rZXlJZE1vZGUgPT0gMHgyKQorICAgIHsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IDQ7IG4rKykKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YUluZGljYXRpb24tPmtleVNvdXJjZVsgbiBdID0gc2VjdXJpdHlIZWFkZXItPmtleVNvdXJjZVsgbiBdOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGRhdGFJbmRpY2F0aW9uLT5rZXlJZE1vZGUgPT0gMHgzKQorICAgIHsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IDg7IG4rKykKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YUluZGljYXRpb24tPmtleVNvdXJjZVsgbiBdID0gc2VjdXJpdHlIZWFkZXItPmtleVNvdXJjZVsgbiBdOworICAgICAgICB9CisgICAgfQorCisgICAgRlRERl9SQ1ZfTVNHKChGVERGX01zZ0J1ZmZlciAqKSBkYXRhSW5kaWNhdGlvbik7Cit9CisKK3ZvaWQgRlRERl9wcm9jZXNzUG9sbFJlcXVlc3QoRlRERl9Qb2xsUmVxdWVzdCAqcG9sbFJlcXVlc3QpCit7CisgICAgaWYgKEZUREZfcmVxQ3VycmVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgRlRERl9yZXFDdXJyZW50ID0gKEZUREZfTXNnQnVmZmVyICopIHBvbGxSZXF1ZXN0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoRlRERl9xdWV1ZVJlcUhlYWQoKEZUREZfTXNnQnVmZmVyICopIHBvbGxSZXF1ZXN0LCAmRlRERl9yZXFRdWV1ZSkgPT0gRlRERl9UUkFOU0FDVElPTl9PVkVSRkxPVykKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9zZW5kUG9sbENvbmZpcm0ocG9sbFJlcXVlc3QsIEZUREZfVFJBTlNBQ1RJT05fT1ZFUkZMT1cpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZUREZfRnJhbWVIZWFkZXIgICAgKmZyYW1lSGVhZGVyICAgID0gJkZUREZfZmg7CisgICAgRlRERl9TZWN1cml0eUhlYWRlciAqc2VjdXJpdHlIZWFkZXIgPSAmRlRERl9zaDsKKworICAgIGZyYW1lSGVhZGVyLT5mcmFtZVR5cGUgPSBGVERGX01BQ19DT01NQU5EX0ZSQU1FOworICAgIGZyYW1lSGVhZGVyLT5vcHRpb25zICAgPQorICAgICAgICAocG9sbFJlcXVlc3QtPnNlY3VyaXR5TGV2ZWwgPiAwID8gRlRERl9PUFRfU0VDVVJJVFlfRU5BQkxFRCA6IDApIHwgRlRERl9PUFRfQUNLX1JFUVVFU1RFRDsKKworICAgIGlmIChGVERGX3BpYi5zaG9ydEFkZHJlc3MgPCAweGZmZmUpCisgICAgeworICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgICAgICAgICAgPSBGVERGX1NIT1JUX0FERFJFU1M7CisgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyLnNob3J0QWRkcmVzcyA9IEZUREZfcGliLnNob3J0QWRkcmVzczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlICAgICAgICA9IEZUREZfRVhURU5ERURfQUREUkVTUzsKKyAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHIuZXh0QWRkcmVzcyA9IEZUREZfcGliLmV4dEFkZHJlc3M7CisgICAgfQorCisgICAgZnJhbWVIZWFkZXItPnNyY1BBTklkICAgICAgICAgICAgPSBGVERGX3BpYi5QQU5JZDsKKyAgICBmcmFtZUhlYWRlci0+ZHN0QWRkck1vZGUgICAgICAgICA9IHBvbGxSZXF1ZXN0LT5jb29yZEFkZHJNb2RlOworICAgIGZyYW1lSGVhZGVyLT5kc3RQQU5JZCAgICAgICAgICAgID0gcG9sbFJlcXVlc3QtPmNvb3JkUEFOSWQ7CisgICAgZnJhbWVIZWFkZXItPmRzdEFkZHIgICAgICAgICAgICAgPSBwb2xsUmVxdWVzdC0+Y29vcmRBZGRyOworCisgICAgc2VjdXJpdHlIZWFkZXItPnNlY3VyaXR5TGV2ZWwgICAgPSBwb2xsUmVxdWVzdC0+c2VjdXJpdHlMZXZlbDsKKyAgICBzZWN1cml0eUhlYWRlci0+a2V5SWRNb2RlICAgICAgICA9IHBvbGxSZXF1ZXN0LT5rZXlJZE1vZGU7CisgICAgc2VjdXJpdHlIZWFkZXItPmtleUluZGV4ICAgICAgICAgPSBwb2xsUmVxdWVzdC0+a2V5SW5kZXg7CisgICAgc2VjdXJpdHlIZWFkZXItPmtleVNvdXJjZSAgICAgICAgPSBwb2xsUmVxdWVzdC0+a2V5U291cmNlOworICAgIHNlY3VyaXR5SGVhZGVyLT5mcmFtZUNvdW50ZXIgICAgID0gRlRERl9waWIuZnJhbWVDb3VudGVyOworICAgIHNlY3VyaXR5SGVhZGVyLT5mcmFtZUNvdW50ZXJNb2RlID0gRlRERl9waWIuZnJhbWVDb3VudGVyTW9kZTsKKworICAgIEZUREZfT2N0ZXQgKnR4UHRyID0gKEZUREZfT2N0ZXQgKikgRlRERl9HRVRfUkVHX0FERFIoUkVURU5USU9OX1JBTV9UWF9GSUZPKSArCisgICAgICAgICAgICAgICAgICAgICAgICAoRlRERl9CVUZGRVJfTEVOR1RIICogRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyAgICAvLyBTa2lwIFBIWSBoZWFkZXIgKD0gTUFDIGxlbmd0aCkKKyAgICB0eFB0cisrOworCisgICAgZnJhbWVIZWFkZXItPlNOID0gRlRERl9waWIuRFNOOworCisgICAgdHhQdHIgICAgICAgICAgID0gRlRERl9hZGRGcmFtZUhlYWRlcih0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CisKKyAgICB0eFB0ciA9IEZUREZfYWRkU2VjdXJpdHlIZWFkZXIodHhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5SGVhZGVyKTsKKworICAgICp0eFB0cisrID0gRlRERl9DT01NQU5EX0RBVEFfUkVRVUVTVDsKKworICAgIEZUREZfU3RhdHVzIHN0YXR1cyA9IEZUREZfc2VuZEZyYW1lKEZUREZfcGliLmN1cnJlbnRDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5SGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoc3RhdHVzICE9IEZUREZfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIEZUREZfc2VuZFBvbGxDb25maXJtKHBvbGxSZXF1ZXN0LCBzdGF0dXMpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGVERGX25yT2ZSZXRyaWVzID0gMDsKKyAgICBGVERGX3BpYi5EU04rKzsKK30KKwordm9pZCBGVERGX3NlbmRQb2xsQ29uZmlybShGVERGX1BvbGxSZXF1ZXN0ICpwb2xsUmVxdWVzdCwgRlRERl9TdGF0dXMgc3RhdHVzKQoreworICAgIEZUREZfUG9sbENvbmZpcm0gKnBvbGxDb25maXJtID0gKEZUREZfUG9sbENvbmZpcm0gKikgRlRERl9HRVRfTVNHX0JVRkZFUihzaXplb2YoRlRERl9Qb2xsQ29uZmlybSkpOworCisgICAgcG9sbENvbmZpcm0tPm1zZ0lkICA9IEZUREZfUE9MTF9DT05GSVJNOworICAgIHBvbGxDb25maXJtLT5zdGF0dXMgPSBzdGF0dXM7CisKKyAgICBpZiAoRlRERl9yZXFDdXJyZW50ID09IChGVERGX01zZ0J1ZmZlciAqKXBvbGxSZXF1ZXN0KQorICAgIHsKKyAgICAgICAgRlRERl9yZXFDdXJyZW50ID0gTlVMTDsKKyAgICB9CisKKyAgICBGVERGX1JFTF9NU0dfQlVGRkVSKChGVERGX01zZ0J1ZmZlciAqKSBwb2xsUmVxdWVzdCk7CisgICAgRlRERl9SQ1ZfTVNHKChGVERGX01zZ0J1ZmZlciAqKSBwb2xsQ29uZmlybSk7CisKKyAgICBGVERGX3Byb2Nlc3NOZXh0UmVxdWVzdCgpOworfQorCit2b2lkIEZUREZfcHJvY2Vzc1B1cmdlUmVxdWVzdChGVERGX1B1cmdlUmVxdWVzdCAqcHVyZ2VSZXF1ZXN0KQoreworICAgIEZUREZfSGFuZGxlIG1zZHVIYW5kbGUgPSBwdXJnZVJlcXVlc3QtPm1zZHVIYW5kbGU7CisgICAgRlRERl9TdGF0dXMgc3RhdHVzICAgICA9IEZUREZfSU5WQUxJRF9IQU5ETEU7CisKKyAgICBpbnQgICAgICAgICBuOworCisgICAgZm9yIChuID0gMDsgbiA8IEZUREZfTlJfT0ZfUkVRX0JVRkZFUlM7IG4rKykKKyAgICB7CisgICAgICAgIEZUREZfTXNnQnVmZmVyICpyZXF1ZXN0ID0gRlRERl9kZXF1ZXVlQnlIYW5kbGUobXNkdUhhbmRsZSwgJkZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLnF1ZXVlKTsKKworICAgICAgICBpZiAocmVxdWVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9EYXRhUmVxdWVzdCAqZGF0YVJlcXVlc3QgPSAoRlRERl9EYXRhUmVxdWVzdCAqKSByZXF1ZXN0OworCisgICAgICAgICAgICBpZiAoZGF0YVJlcXVlc3QtPmluZGlyZWN0VFggPT0gRlRERl9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfcmVtb3ZlVHhQZW5kaW5nVGltZXIocmVxdWVzdCk7CisjaWYgRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8KKworICAgICAgICAgICAgICAgIGlmIChGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5hZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVudHJ5LCBzaG9ydEFkZHJJZHg7CisgICAgICAgICAgICAgICAgICAgIEZUREZfQm9vbGVhbiBmb3VuZCA9IEZUREZfZnBwckxvb2t1cFNob3J0QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLmFkZHIuc2hvcnRBZGRyZXNzLCAmZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hvcnRBZGRySWR4KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoZm91bmQpOworICAgICAgICAgICAgICAgICAgICBGVERGX2ZwcHJTZXRTaG9ydEFkZHJlc3NWYWxpZChlbnRyeSwgc2hvcnRBZGRySWR4LCBGVERGX0ZBTFNFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uYWRkck1vZGUgID09IEZUREZfRVhURU5ERURfQUREUkVTUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZW50cnk7CisgICAgICAgICAgICAgICAgICAgIEZUREZfQm9vbGVhbiBmb3VuZCA9IEZUREZfZnBwckxvb2t1cEV4dEFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5hZGRyLmV4dEFkZHJlc3MsICZlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9XQVJOSU5HKGZvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9mcHByU2V0RXh0QWRkcmVzc1ZhbGlkKGVudHJ5LCBGVERGX0ZBTFNFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgICAgICAgICAgICAgfQorCisjZW5kaWYgLyogRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8gKi8KKworICAgICAgICAgICAgICAgIGlmIChGVERGX2lzUXVldWVFbXB0eSgmRlRERl90eFBlbmRpbmdMaXN0WyBuIF0ucXVldWUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uYWRkck1vZGUgPSBGVERGX05PX0FERFJFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBGVERGX1JFTF9EQVRBX0JVRkZFUihkYXRhUmVxdWVzdC0+bXNkdSk7CisgICAgICAgICAgICBGVERGX1JFTF9NU0dfQlVGRkVSKChGVERGX01zZ0J1ZmZlciAqKSBkYXRhUmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IEZUREZfU1VDQ0VTUzsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBGVERGX1B1cmdlQ29uZmlybSAqcHVyZ2VDb25maXJtID0gKEZUREZfUHVyZ2VDb25maXJtICopIEZUREZfR0VUX01TR19CVUZGRVIoc2l6ZW9mKEZUREZfUHVyZ2VDb25maXJtKSk7CisKKyAgICBwdXJnZUNvbmZpcm0tPm1zZ0lkICAgICAgPSBGVERGX1BVUkdFX0NPTkZJUk07CisgICAgcHVyZ2VDb25maXJtLT5tc2R1SGFuZGxlID0gbXNkdUhhbmRsZTsKKyAgICBwdXJnZUNvbmZpcm0tPnN0YXR1cyAgICAgPSBzdGF0dXM7CisKKyAgICBGVERGX1JFTF9NU0dfQlVGRkVSKChGVERGX01zZ0J1ZmZlciAqKSBwdXJnZVJlcXVlc3QpOworICAgIEZUREZfUkNWX01TRygoRlRERl9Nc2dCdWZmZXIgKikgcHVyZ2VDb25maXJtKTsKK30KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKKyNpZmRlZiBGVERGX1BIWV9BUEkKK0ZUREZfU3RhdHVzIEZUREZfc2VuZEZyYW1lU2ltcGxlKEZUREZfRGF0YUxlbmd0aCAgICBmcmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQgICAgICAgICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQ2hhbm5lbE51bWJlciBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9QVEkgICAgICAgICAgIHB0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQm9vbGVhbiAgICAgICBjc21hU3VwcHJlc3MpCit7CisKKyAgICBGVERGX09jdGV0ICpmcCA9IGZyYW1lOworCisgICAgaWYgKGZyYW1lTGVuZ3RoID4gMTI3IHx8CisgICAgICAgIEZUREZfdHJhbnNwYXJlbnRNb2RlICE9IEZUREZfVFJVRSkKKyAgICB7CisgICAgICAgIHJldHVybiBGVERGX0lOVkFMSURfUEFSQU1FVEVSOworICAgIH0KKworICAgIEZUREZfT2N0ZXQgKnR4UHRyID0gKEZUREZfT2N0ZXQgKikgRlRERl9HRVRfUkVHX0FERFIoUkVURU5USU9OX1JBTV9UWF9GSUZPKSArCisgICAgICAgICAgICAgICAgICAgICAgICAoRlRERl9CVUZGRVJfTEVOR1RIICogRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyAgICAvKiBUaGlzIGRhdGEgY29weSBjb3VsZC9zaG91bGQgYmUgb3B0aW1pemVkIHVzaW5nIERNQSAqLworICAgICp0eFB0cisrID0gZnJhbWVMZW5ndGg7CisKKyAgICBpbnQgICAgICAgICBuOworCisgICAgZm9yIChuID0gMDsgbiA8IGZyYW1lTGVuZ3RoOyBuKyspCisgICAgeworICAgICAgICAqdHhQdHIrKyA9ICpmcCsrOworICAgIH0KKworICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKyAgICBGVERGX25yT2ZSZXRyaWVzID0gMDsKKyAgICBGVERGX2V4aXRDcml0aWNhbCgpOworICAgIEZUREZfc2VuZFRyYW5zcGFyZW50RnJhbWUoZnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc21hU3VwcHJlc3MpOworCisgICAgcmV0dXJuIEZUREZfU1VDQ0VTUzsKK30KKworCisKKyNlbHNlIC8qICFGVERGX1BIWV9BUEkgKi8KK3ZvaWQgRlRERl9wcm9jZXNzVHJhbnNwYXJlbnRSZXF1ZXN0KEZUREZfVHJhbnNwYXJlbnRSZXF1ZXN0ICp0cmFuc3BhcmVudFJlcXVlc3QpCit7CisgICAgRlRERl9EYXRhTGVuZ3RoIGZyYW1lTGVuZ3RoID0gdHJhbnNwYXJlbnRSZXF1ZXN0LT5mcmFtZUxlbmd0aDsKKworICAgIGlmIChmcmFtZUxlbmd0aCA+IDEyNyB8fAorICAgICAgICBGVERGX3RyYW5zcGFyZW50TW9kZSAhPSBGVERGX1RSVUUpCisgICAgeworICAgICAgICBGVERGX1NFTkRfRlJBTUVfVFJBTlNQQVJFTlRfQ09ORklSTSh0cmFuc3BhcmVudFJlcXVlc3QtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9JTlZBTElEX1BBUkFNRVRFUik7CisKKyAgICAgICAgRlRERl9SRUxfTVNHX0JVRkZFUigoRlRERl9Nc2dCdWZmZXIgKikgdHJhbnNwYXJlbnRSZXF1ZXN0KTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKEZUREZfcmVxQ3VycmVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgRlRERl9yZXFDdXJyZW50ID0gKEZUREZfTXNnQnVmZmVyICopIHRyYW5zcGFyZW50UmVxdWVzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNpZm5kZWYgRlRERl9MSVRFCisKKyAgICAgICAgaWYgKEZUREZfcXVldWVSZXFIZWFkKChGVERGX01zZ0J1ZmZlciAqKSB0cmFuc3BhcmVudFJlcXVlc3QsICZGVERGX3JlcVF1ZXVlKSA9PSBGVERGX1RSQU5TQUNUSU9OX09WRVJGTE9XKQorICAgICAgICB7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgICAgICAgICAgRlRERl9TRU5EX0ZSQU1FX1RSQU5TUEFSRU5UX0NPTkZJUk0odHJhbnNwYXJlbnRSZXF1ZXN0LT5oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RSQU5TUEFSRU5UX09WRVJGTE9XKTsKKworICAgICAgICAgICAgRlRERl9SRUxfTVNHX0JVRkZFUigoRlRERl9Nc2dCdWZmZXIgKikgdHJhbnNwYXJlbnRSZXF1ZXN0KTsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgICAgIH0KKworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZUREZfT2N0ZXQgKnR4UHRyID0gKEZUREZfT2N0ZXQgKikgRlRERl9HRVRfUkVHX0FERFIoUkVURU5USU9OX1JBTV9UWF9GSUZPKSArCisgICAgICAgICAgICAgICAgICAgICAgICAoRlRERl9CVUZGRVJfTEVOR1RIICogRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyAgICAqdHhQdHIrKyA9IGZyYW1lTGVuZ3RoOworCisgICAgRlRERl9PY3RldCAqZnJhbWUgPSB0cmFuc3BhcmVudFJlcXVlc3QtPmZyYW1lOworCisgICAgaW50ICAgICAgICAgbjsKKworICAgIGZvciAobiA9IDA7IG4gPCBmcmFtZUxlbmd0aDsgbisrKQorICAgIHsKKyAgICAgICAgKnR4UHRyKysgPSAqZnJhbWUrKzsKKyAgICB9CisKKyAgICBGVERGX3NlbmRUcmFuc3BhcmVudEZyYW1lKGZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRSZXF1ZXN0LT5mcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50UmVxdWVzdC0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50UmVxdWVzdC0+cHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRSZXF1ZXN0LT5jbXNhU3VwcHJlc3MpOworICAgIEZUREZfbnJPZlJldHJpZXMgPSAwOworfQorCisKK3ZvaWQgRlRERl9zZW5kRnJhbWVUcmFuc3BhcmVudChGVERGX0RhdGFMZW5ndGggICAgZnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCAgICAgICAgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQ2hhbm5lbE51bWJlciBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfUFRJICAgICAgICAgICBwdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9Cb29sZWFuICAgICAgIGNtc2FTdXBwcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAgICAqaGFuZGxlKQoreworICAgIEZUREZfVHJhbnNwYXJlbnRSZXF1ZXN0ICp0cmFuc3BhcmVudFJlcXVlc3QgPQorICAgICAgICAoRlRERl9UcmFuc3BhcmVudFJlcXVlc3QgKikgRlRERl9HRVRfTVNHX0JVRkZFUihzaXplb2YoRlRERl9UcmFuc3BhcmVudFJlcXVlc3QpKTsKKworICAgIHRyYW5zcGFyZW50UmVxdWVzdC0+bXNnSWQgICAgICAgID0gRlRERl9UUkFOU1BBUkVOVF9SRVFVRVNUOworICAgIHRyYW5zcGFyZW50UmVxdWVzdC0+ZnJhbWVMZW5ndGggID0gZnJhbWVMZW5ndGg7CisgICAgdHJhbnNwYXJlbnRSZXF1ZXN0LT5mcmFtZSAgICAgICAgPSBmcmFtZTsKKyAgICB0cmFuc3BhcmVudFJlcXVlc3QtPmNoYW5uZWwgICAgICA9IGNoYW5uZWw7CisgICAgdHJhbnNwYXJlbnRSZXF1ZXN0LT5wdGkgICAgICAgICAgPSBwdGk7CisgICAgdHJhbnNwYXJlbnRSZXF1ZXN0LT5jbXNhU3VwcHJlc3MgPSBjbXNhU3VwcHJlc3M7CisgICAgdHJhbnNwYXJlbnRSZXF1ZXN0LT5oYW5kbGUgICAgICAgPSBoYW5kbGU7CisKKyAgICBGVERGX3Byb2Nlc3NUcmFuc3BhcmVudFJlcXVlc3QodHJhbnNwYXJlbnRSZXF1ZXN0KTsKK30KKworI2VuZGlmIC8qIEZUREZfUEhZX0FQSSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2Z0ZGZJbmZvLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvZnRkZkluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOGQwYzEyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2Z0ZGZJbmZvLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBGVERGSU5GT19IXworI2RlZmluZSBGVERGSU5GT19IXworCisvKgorICogVGhlIEZUREYgcmVsZWFzZSBuYW1lICh2ZXJzaW9uKSBpcyBsaXN0ZWQgYmVsb3csIGFuZCBtYW51YWxseSBtYWludGFpbmVkLgorICogVGhlIGJ1aWxkIHRpbWUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuCisgKi8KKyNkZWZpbmUgRlRERl9BUkNISVRFQ1RVUkVfVkVSU0lPTiAxCisjZGVmaW5lIEZUREZfQlJBTkNIX1ZFUlNJT04gICAgICAgMAorI2RlZmluZSBGVERGX0xPQURfVkVSU0lPTiAgICAgICAgIDMyCisKK2NvbnN0IGNoYXIqIEZUREZfZ2V0VW1hY1JlbE5hbWUoIHZvaWQgKTsKK2NvbnN0IGNoYXIqIEZUREZfZ2V0VW1hY0J1aWxkVGltZSggdm9pZCApOworCisjZW5kaWYgLyogRlRERklORk9fSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9pbnRlcm5hbC5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllNWQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsNzQ0IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaW50ZXJuYWwuaAorICoKKyAqIEBicmllZiBJbnRlcm5hbCBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2RlZmluZSBGVERGX1RCRCAgICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgRlRERl9GQ1NfTEVOR1RIICAgICAgICAgICAgMgorI2RlZmluZSBGVERGX0JVRkZFUl9MRU5HVEggICAgICAgICAxMjgKKyNpZm5kZWYgRlRERl9OUl9PRl9SRVFfQlVGRkVSUworI2RlZmluZSBGVERGX05SX09GX1JFUV9CVUZGRVJTICAgICA5NgorI2VuZGlmCisjZGVmaW5lIEZUREZfTlJfT0ZfUlhfQlVGRkVSUyAgICAgIDgKKyNkZWZpbmUgRlRERl9OUl9PRl9DSEFOTkVMUyAgICAgICAgMTYKKyNkZWZpbmUgRlRERl9OUl9PRl9TQ0FOX1JFU1VMVFMgICAgMTYKKyNkZWZpbmUgRlRERl9OUl9PRl9DU0xfUEVFUlMgICAgICAgMTYKKyNkZWZpbmUgRlRERl9NQVhfSEVBREVSX0lFUyAgICAgICAgOAorI2RlZmluZSBGVERGX01BWF9QQVlMT0FEX0lFUyAgICAgICA0CisjZGVmaW5lIEZUREZfTUFYX1NVQl9JRVMgICAgICAgICAgIDgKKyNkZWZpbmUgRlRERl9NQVhfSUVfQ09OVEVOVCAgICAgICAgMTI4CisjZGVmaW5lIEZUREZfTlJfT0ZfUlhfQUREUlMgICAgICAgIDE2CisjZGVmaW5lIEZUREZfTlJfT0ZfTkVJR0hCT1JTICAgICAgIDE2CisKKyNkZWZpbmUgRlRERl9UWF9EQVRBX0JVRkZFUiAgICAgICAgMAorI2RlZmluZSBGVERGX1RYX1dBS0VVUF9CVUZGRVIgICAgICAxCisjZGVmaW5lIEZUREZfVFhfQUNLX0JVRkZFUiAgICAgICAgIDIKKworI2RlZmluZSBGVERGX09QVF9TRUNVUklUWV9FTkFCTEVEICAweDAxCisjZGVmaW5lIEZUREZfT1BUX0ZSQU1FX1BFTkRJTkcgICAgIDB4MDIKKyNkZWZpbmUgRlRERl9PUFRfU0VRX05SX1NVUFBSRVNTRUQgMHgwNAorI2RlZmluZSBGVERGX09QVF9BQ0tfUkVRVUVTVEVEICAgICAweDA4CisjZGVmaW5lIEZUREZfT1BUX0lFU19QUkVTRU5UICAgICAgIDB4MTAKKyNkZWZpbmUgRlRERl9PUFRfUEFOX0lEX1BSRVNFTlQgICAgMHgyMAorI2RlZmluZSBGVERGX09QVF9FTkhBTkNFRCAgICAgICAgICAweDQwCisKKyNkZWZpbmUgRlRERl9NU0tfUlhfQ0UgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGVERGX01TS19TWU1CT0xfVE1SX0NFICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEZUREZfTVNLX1RYX0NFICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gVGhlIG1heGltdW0gdGltZSBpbiBzeW1ib2xzIHRoYXQgaXMgdGFrZXMgdG8gcHJvY2VzcyByZXF1ZXN0LiBBZnRlciBzdWNjZXNmdWwKKy8vIHByb2Nlc3NpbmcgYSByZXF1ZXN0IHRoZSBUWCBidWZmZXIgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIHJlYWR5IHRvIGJlIHNlbnQuCisjZGVmaW5lIEZUREZfVFNDSF9NQVhfUFJPQ0VTU19SRVFVRVNUX1RJTUUgMzUKKworLy8gVGhlIG1heGltdW0gdGltZSBpbiBzeW1ib2xzIG5lZWRlZCB0byBzZWFyY2ggZm9yIHRoZSBuZXh0IHNsb3QgZm9yIHdoaWNoIGEKKy8vIFRYIG9yIFJYIG5lZWRzIHRvIGJlIGRvbmUKKyNkZWZpbmUgRlRERl9UU0NIX01BWF9TQ0hFRFVMRV9USU1FIDMwCisKKyNkZWZpbmUgRlRERl9HRVRfRklFTERfQUREUiggZmllbGROYW1lICkgICAgICAgICAgICAgICAgKCAodm9sYXRpbGUgdWludDMyX3QqKSAoIElORF9GX0ZUREZfICMjIGZpZWxkTmFtZSApICkKKyNkZWZpbmUgRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKCBmaWVsZE5hbWUsIGluZGV4ICkgKCAodm9sYXRpbGUgdWludDMyX3QqKSAoIElORF9GX0ZUREZfICMjIGZpZWxkTmFtZSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRwdHJfdCkgaW5kZXggKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGXyAjIyBmaWVsZE5hbWUgIyMgX0lOVFZMICkgKQorI2RlZmluZSBGVERGX0dFVF9SRUdfQUREUiggcmVnTmFtZSApICAgICAgICAgICAgICAgICAgICAoICh2b2xhdGlsZSB1aW50MzJfdCopICggSU5EX1JfRlRERl8gIyMgcmVnTmFtZSApICkKKyNkZWZpbmUgRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRCggcmVnTmFtZSwgaW5kZXggKSAgICAgKCAodm9sYXRpbGUgdWludDMyX3QqKSAoIElORF9SX0ZUREZfICMjIHJlZ05hbWUgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50cHRyX3QpIGluZGV4ICogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl8gIyMgcmVnTmFtZSAjIyBfSU5UVkwgKSApCisjZGVmaW5lIEZUREZfR0VUX0ZJRUxEKCBmaWVsZE5hbWUgKSAgICAgICAgICAgICAgICAgICAgICggKCAoICoodm9sYXRpbGUgdWludDMyX3QqKSAoIElORF9GX0ZUREZfICMjIGZpZWxkTmFtZSApICkgJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNU0tfRl9GVERGXyAjIyBmaWVsZE5hbWUgKSA+PiBPRkZfRl9GVERGXyAjIyBmaWVsZE5hbWUgKQorI2RlZmluZSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKCBmaWVsZE5hbWUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKSAgICAgICAgICAgICAgICAgKCAoICggKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRCggZmllbGROYW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICkgKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIE1TS19GX0ZUREZfICMjIGZpZWxkTmFtZSApID4+IE9GRl9GX0ZUREZfICMjIGZpZWxkTmFtZSApCisKKyNkZWZpbmUgRlRERl9TRVRfRklFTEQoIGZpZWxkTmFtZSwgdmFsdWUgKSAgICAgICAgICAgICAgZG8geyAgICAgICAgICAgIFwKKyAgICAgICAgdWludDMyX3QgdG1wID0gICpGVERGX0dFVF9GSUVMRF9BRERSKCBmaWVsZE5hbWUgKSAmIH5NU0tfRl9GVERGXyAjIyBmaWVsZE5hbWU7IFwKKyAgICAgICAgKkZUREZfR0VUX0ZJRUxEX0FERFIoIGZpZWxkTmFtZSApID0gdG1wIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggKCB2YWx1ZSApIDw8IE9GRl9GX0ZUREZfICMjIGZpZWxkTmFtZSApICYgTVNLX0ZfRlRERl8gIyMgZmllbGROYW1lICk7IFwKK30gXAorICAgIHdoaWxlICggMCApCisKKworI2RlZmluZSBGVERGX1NFVF9GSUVMRF9JTkRFWEVEKCBmaWVsZE5hbWUsIHZhbHVlLCBpbmRleCApICAgICAgICAgICAgICBkbyB7ICAgICAgICAgICAgXAorICAgICAgICB1aW50MzJfdCB0bXAgPSAgKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRCggZmllbGROYW1lLCBpbmRleCApICYgfk1TS19GX0ZUREZfICMjIGZpZWxkTmFtZTsgXAorICAgICAgICAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKCBmaWVsZE5hbWUsIGluZGV4ICkgPSB0bXAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCAoIHZhbHVlICkgPDwgT0ZGX0ZfRlRERl8gIyMgZmllbGROYW1lICkgJiBNU0tfRl9GVERGXyAjIyBmaWVsZE5hbWUgKTsgXAorfSBcCisgICAgd2hpbGUgKCAwICkKKworI2RlZmluZSBGVERGX3Byb2Nlc3NSZXF1ZXN0IEZUREZfc25kTXNnCisKK3N0cnVjdCBGVERGX1BpYgoreworICAgIEZUREZfRXh0QWRkcmVzcyAgICAgICAgIGV4dEFkZHJlc3M7CisgICAgRlRERl9QZXJpb2QgICAgICAgICAgICAgYWNrV2FpdER1cmF0aW9uOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBhc3NvY2lhdGVkUEFOQ29vcmQ7CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgYXNzb2NpYXRpb25QZXJtaXQ7CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgYXV0b1JlcXVlc3Q7CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgYmF0dExpZmVFeHQ7CisgICAgRlRERl9OdW1PZkJhY2tvZmZzICAgICAgYmF0dExpZmVFeHRQZXJpb2RzOworICAgIEZUREZfT2N0ZXQgICAgICAgICAgICAgIGJlYWNvblBheWxvYWRbIEZUREZfTUFYX0JFQUNPTl9QQVlMT0FEX0xFTkdUSCBdOworICAgIEZUREZfU2l6ZSAgICAgICAgICAgICAgIGJlYWNvblBheWxvYWRMZW5ndGg7CisgICAgRlRERl9PcmRlciAgICAgICAgICAgICAgYmVhY29uT3JkZXI7CisgICAgRlRERl9UaW1lICAgICAgICAgICAgICAgYmVhY29uVHhUaW1lOworICAgIEZUREZfU04gICAgICAgICAgICAgICAgIEJTTjsKKyAgICBGVERGX0V4dEFkZHJlc3MgICAgICAgICBjb29yZEV4dEFkZHJlc3M7CisgICAgRlRERl9TaG9ydEFkZHJlc3MgICAgICAgY29vcmRTaG9ydEFkZHJlc3M7CisgICAgRlRERl9TTiAgICAgICAgICAgICAgICAgRFNOOworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIEdUU1Blcm1pdDsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgRlRERl9CRUV4cG9uZW50ICAgICAgICAgbWF4QkU7CisgICAgRlRERl9TaXplICAgICAgICAgICAgICAgbWF4Q1NNQUJhY2tvZmZzOworICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIG1heEZyYW1lVG90YWxXYWl0VGltZTsKKyAgICBGVERGX1NpemUgICAgICAgICAgICAgICBtYXhGcmFtZVJldHJpZXM7CisgICAgRlRERl9CRUV4cG9uZW50ICAgICAgICAgbWluQkU7CisjaWZuZGVmIEZUREZfTElURQorICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIExJRlNQZXJpb2Q7CisgICAgRlRERl9QZXJpb2QgICAgICAgICAgICAgU0lGU1BlcmlvZDsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgRlRERl9QQU5JZCAgICAgICAgICAgICAgUEFOSWQ7CisjaWZuZGVmIEZUREZfTElURQorICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIHByb21pc2N1b3VzTW9kZTsgLyogTm90IHN1cHBvcnRlZC4gVXNlIHRyYW5zcGFyZW50IG1vZGUgaW5zdGVhZCAqLworICAgIEZUREZfU2l6ZSAgICAgICAgICAgICAgIHJlc3BvbnNlV2FpdFRpbWU7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIHJ4T25XaGVuSWRsZTsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgc2VjdXJpdHlFbmFibGVkOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICBGVERGX1Nob3J0QWRkcmVzcyAgICAgICBzaG9ydEFkZHJlc3M7CisjaWZuZGVmIEZUREZfTElURQorICAgIEZUREZfU2l6ZSAgICAgICAgICAgICAgIHN1cGVyZnJhbWVPcmRlcjsKKyAgICBGVERGX1BlcmlvZCAgICAgICAgICAgICBzeW5jU3ltYm9sT2Zmc2V0OworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIHRpbWVzdGFtcFN1cHBvcnRlZDsKKyAgICBGVERGX1BlcmlvZCAgICAgICAgICAgICB0cmFuc2FjdGlvblBlcnNpc3RlbmNlVGltZTsKKyAgICBGVERGX1BlcmlvZCAgICAgICAgICAgICBlbmhBY2tXYWl0RHVyYXRpb247CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgaW1wbGljaXRCcm9hZGNhc3Q7CisgICAgRlRERl9TaW1wbGVBZGRyZXNzICAgICAgc2ltcGxlQWRkcmVzczsKKyAgICBGVERGX1BlcmlvZCAgICAgICAgICAgICBkaXNjb25uZWN0VGltZTsKKyAgICBGVERGX1ByaW9yaXR5ICAgICAgICAgICBqb2luUHJpb3JpdHk7CisgICAgRlRERl9BU04gICAgICAgICAgICAgICAgQVNOOworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIG5vSExCdWZmZXJzOworICAgIEZUREZfU2xvdGZyYW1lVGFibGUgICAgIHNsb3RmcmFtZVRhYmxlOworICAgIEZUREZfTGlua1RhYmxlICAgICAgICAgIGxpbmtUYWJsZTsKKyAgICBGVERGX1RpbWVzbG90VGVtcGxhdGUgICB0aW1lc2xvdFRlbXBsYXRlOworICAgIEZUREZfSG9wcGluZ1NlcXVlbmNlSWQgIEhvcHBpbmdTZXF1ZW5jZUlkOworICAgIEZUREZfQ2hhbm5lbFBhZ2UgICAgICAgIGNoYW5uZWxQYWdlOworICAgIEZUREZfQ2hhbm5lbE51bWJlciAgICAgIG51bWJlck9mQ2hhbm5lbHM7CisgICAgRlRERl9CaXRtYXAzMiAgICAgICAgICAgcGh5Q29uZmlndXJhdGlvbjsKKyAgICBGVERGX0JpdG1hcDggICAgICAgICAgICBleHRlbmRlZEJpdG1hcDsKKyAgICBGVERGX0xlbmd0aCAgICAgICAgICAgICBob3BwaW5nU2VxdWVuY2VMZW5ndGg7CisgICAgRlRERl9DaGFubmVsTnVtYmVyICAgICAgaG9wcGluZ1NlcXVlbmNlTGlzdFsgRlRERl9NQVhfSE9QUElOR19TRVFVRU5DRV9MRU5HVEggXTsKKyAgICBGVERGX0xlbmd0aCAgICAgICAgICAgICBjdXJyZW50SG9wOworICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIGR3ZWxsVGltZTsKKyAgICBGVERGX1BlcmlvZCAgICAgICAgICAgICBDU0xQZXJpb2Q7CisgICAgRlRERl9QZXJpb2QgICAgICAgICAgICAgQ1NMTWF4UGVyaW9kOworICAgIEZUREZfQml0bWFwMzIgICAgICAgICAgIENTTENoYW5uZWxNYXNrOworICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIENTTEZyYW1lUGVuZGluZ1dhaXRUOworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIGxvd0VuZXJneVN1cGVyZnJhbWVTdXBwb3J0ZWQ7CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgbG93RW5lcmd5U3VwZXJmcmFtZVN5bmNJbnRlcnZhbDsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgRlRERl9QZXJmb3JtYW5jZU1ldHJpY3MgcGVyZm9ybWFuY2VNZXRyaWNzOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICB1c2VFbmhhbmNlZEJlY2FvbjsKKyAgICBGVERGX0lFTGlzdCAgICAgICAgICAgICBFQklFTGlzdDsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBFQkZpbHRlcmluZ0VuYWJsZWQ7CisgICAgRlRERl9TTiAgICAgICAgICAgICAgICAgRUJTTjsKKyAgICBGVERGX0F1dG9TQSAgICAgICAgICAgICBFQkF1dG9TQTsKKyAgICBGVERGX0lFTGlzdCAgICAgICAgICAgICBFQWNrSUVMaXN0OworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIHRzY2hFbmFibGVkOworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIGxlRW5hYmxlZDsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgRlRERl9DaGFubmVsTnVtYmVyICAgICAgY3VycmVudENoYW5uZWw7CisgICAgRlRERl9UWFBvd2VyVG9sZXJhbmNlICAgVFhQb3dlclRvbGVyYW5jZTsKKyAgICBGVERGX0RCbSAgICAgICAgICAgICAgICBUWFBvd2VyOworICAgIEZUREZfQ0NBTW9kZSAgICAgICAgICAgIENDQU1vZGU7CisjaWZuZGVmIEZUREZfTElURQorICAgIEZUREZfQ2hhbm5lbFBhZ2UgICAgICAgIGN1cnJlbnRQYWdlOworICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIG1heEZyYW1lRHVyYXRpb247CisgICAgRlRERl9QZXJpb2QgICAgICAgICAgICAgU0hSRHVyYXRpb247CisgICAgRlRERl9LZXlUYWJsZSAgICAgICAgICAga2V5VGFibGU7CisgICAgRlRERl9EZXZpY2VUYWJsZSAgICAgICAgZGV2aWNlVGFibGU7CisgICAgRlRERl9TZWN1cml0eUxldmVsVGFibGUgc2VjdXJpdHlMZXZlbFRhYmxlOworICAgIEZUREZfRnJhbWVDb3VudGVyICAgICAgIGZyYW1lQ291bnRlcjsKKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgICAgICBtdERhdGFTZWN1cml0eUxldmVsOworICAgIEZUREZfS2V5SWRNb2RlICAgICAgICAgIG10RGF0YUtleUlkTW9kZTsKKyAgICBGVERGX09jdGV0ICAgICAgICAgICAgICBtdERhdGFLZXlTb3VyY2VbIDggXTsKKyAgICBGVERGX0tleUluZGV4ICAgICAgICAgICBtdERhdGFLZXlJbmRleDsKKyAgICBGVERGX09jdGV0ICAgICAgICAgICAgICBkZWZhdWx0S2V5U291cmNlWyA4IF07CisgICAgRlRERl9FeHRBZGRyZXNzICAgICAgICAgUEFOQ29vcmRFeHRBZGRyZXNzOworICAgIEZUREZfU2hvcnRBZGRyZXNzICAgICAgIFBBTkNvb3JkU2hvcnRBZGRyZXNzOworICAgIEZUREZfRnJhbWVDb3VudGVyTW9kZSAgIGZyYW1lQ291bnRlck1vZGU7CisgICAgRlRERl9QZXJpb2QgICAgICAgICAgICAgQ1NMU3luY1R4TWFyZ2luOworICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIENTTE1heEFnZVJlbW90ZUluZm87CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIEZUREZfVHJhZmZpY0NvdW50ZXJzICAgIHRyYWZmaWNDb3VudGVyczsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgTEVDYXBhYmxlOworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIExMQ2FwYWJsZTsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBEU01FQ2FwYWJsZTsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBSRklEQ2FwYWJsZTsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBBTUNBQ2FwYWJsZTsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgbWV0cmljc0NhcGFibGU7CisjaWZuZGVmIEZUREZfTElURQorICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIHJhbmdpbmdTdXBwb3J0ZWQ7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIGtlZXBQaHlFbmFibGVkOworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIG1ldHJpY3NFbmFibGVkOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBiZWFjb25BdXRvUmVzcG9uZDsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICB0c2NoQ2FwYWJsZTsKKyAgICBGVERGX1BlcmlvZCAgICAgICAgICAgICB0c1N5bmNDb3JyZWN0VGhyZXNob2xkOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgRlRERl9OckJhY2tvZmZQZXJpb2RzICAgYm9JcnFUaHJlc2hvbGQ7CisgICAgRlRERl9QdGlDb25maWcgICAgICAgICAgcHRpQ29uZmlnOworI2VuZGlmCit9OworCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9GcmFtZVZlcnNpb247CisjZGVmaW5lIEZUREZfRlJBTUVfVkVSU0lPTl8yMDAzICAgICAgICAgIDAKKyNkZWZpbmUgRlRERl9GUkFNRV9WRVJTSU9OXzIwMTEgICAgICAgICAgMQorI2RlZmluZSBGVERGX0ZSQU1FX1ZFUlNJT05fRSAgICAgICAgICAgICAyCisjZGVmaW5lIEZUREZfRlJBTUVfVkVSU0lPTl9OT1RfU1VQUE9SVEVEIDMKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX0ZyYW1lVHlwZSAgICAgIGZyYW1lVHlwZTsKKyAgICBGVERGX0ZyYW1lVmVyc2lvbiAgIGZyYW1lVmVyc2lvbjsKKyAgICBGVERGX0JpdG1hcDggICAgICAgIG9wdGlvbnM7CisgICAgRlRERl9TTiAgICAgICAgICAgICBTTjsKKyAgICBGVERGX0FkZHJlc3NNb2RlICAgIHNyY0FkZHJNb2RlOworICAgIEZUREZfUEFOSWQgICAgICAgICAgc3JjUEFOSWQ7CisgICAgRlRERl9BZGRyZXNzICAgICAgICBzcmNBZGRyOworICAgIEZUREZfQWRkcmVzc01vZGUgICAgZHN0QWRkck1vZGU7CisgICAgRlRERl9QQU5JZCAgICAgICAgICBkc3RQQU5JZDsKKyAgICBGVERGX0FkZHJlc3MgICAgICAgIGRzdEFkZHI7CisgICAgRlRERl9Db21tYW5kRnJhbWVJZCBjb21tYW5kRnJhbWVJZDsKK30gRlRERl9GcmFtZUhlYWRlcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgICAgc2VjdXJpdHlMZXZlbDsKKyAgICBGVERGX0tleUlkTW9kZSAgICAgICAga2V5SWRNb2RlOworICAgIEZUREZfS2V5SW5kZXggICAgICAgICBrZXlJbmRleDsKKyAgICBGVERGX0ZyYW1lQ291bnRlck1vZGUgZnJhbWVDb3VudGVyTW9kZTsKKyAgICBGVERGX09jdGV0KiAgICAgICAgICAga2V5U291cmNlOworICAgIEZUREZfRnJhbWVDb3VudGVyICAgICBmcmFtZUNvdW50ZXI7Cit9IEZUREZfU2VjdXJpdHlIZWFkZXI7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9Cb29sZWFuIGZhc3RBOworICAgIEZUREZfQm9vbGVhbiBkYXRhUjsKK30gRlRERl9Bc3NvY0FkbWluOworCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9TTlNlbDsKKyNkZWZpbmUgRlRERl9TTl9TRUxfRFNOICAwCisjZGVmaW5lIEZUREZfU05fU0VMX0JTTiAgMQorI2RlZmluZSBGVERGX1NOX1NFTF9FQlNOIDIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX0FkZHJlc3NNb2RlIGFkZHJNb2RlOworICAgIEZUREZfQWRkcmVzcyAgICAgYWRkcjsKKyAgICBGVERGX1RpbWUgICAgICAgIHRpbWVzdGFtcDsKKyAgICBGVERGX0Jvb2xlYW4gICAgIGRzblZhbGlkOworICAgIEZUREZfU04gICAgICAgICAgZHNuOworICAgIEZUREZfQm9vbGVhbiAgICAgYnNuVmFsaWQ7CisgICAgRlRERl9TTiAgICAgICAgICBic247CisgICAgRlRERl9Cb29sZWFuICAgICBlYnNuVmFsaWQ7CisgICAgRlRERl9TTiAgICAgICAgICBlYnNuOworfSBGVERGX1J4QWRkcmVzc0FkbWluOworCitzdHJ1Y3QgRlRERl9CdWZmZXJfOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIHN0cnVjdCBGVERGX0J1ZmZlcl8qIG5leHQ7CisgICAgc3RydWN0IEZUREZfQnVmZmVyXyogcHJldjsKK30gRlRERl9CdWZmZXJIZWFkZXI7CisKK3R5cGVkZWYgc3RydWN0IEZUREZfQnVmZmVyXworeworICAgIEZUREZfQnVmZmVySGVhZGVyIGhlYWRlcjsKKyAgICBGVERGX01zZ0J1ZmZlciogICByZXF1ZXN0OworfSBGVERGX0J1ZmZlcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX0J1ZmZlckhlYWRlciBoZWFkOworICAgIEZUREZfQnVmZmVySGVhZGVyIHRhaWw7Cit9IEZUREZfUXVldWU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9BZGRyZXNzICAgICBhZGRyOworICAgIEZUREZfQWRkcmVzc01vZGUgYWRkck1vZGU7CisgICAgRlRERl9QQU5JZCAgICAgICBQQU5JZDsKKyAgICBGVERGX1F1ZXVlICAgICAgIHF1ZXVlOworfSBGVERGX1BlbmRpbmc7CisKK3R5cGVkZWYgc3RydWN0IF9GVERGX1BlbmRpbmdUTF8KK3sKKyAgICBzdHJ1Y3QgX0ZUREZfUGVuZGluZ1RMXyogbmV4dDsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICAgZnJlZTsKKyAgICBGVERGX01zZ0J1ZmZlciogICAgICAgICAgcmVxdWVzdDsKKyAgICBGVERGX1RpbWUgICAgICAgICAgICAgICAgZGVsdGE7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgIHBlbmRMaXN0TnI7CisgICAgdm9pZCAoICogZnVuYyApKCBzdHJ1Y3QgX0ZUREZfUGVuZGluZ1RMXyogKTsKK30gRlRERl9QZW5kaW5nVEw7CisKK3R5cGVkZWYgdWludDhfdCBGVERGX1JlbW90ZUlkOworI2RlZmluZSBGVERGX1JFTU9URV9EQVRBX1JFUVVFU1QgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRlRERl9SRU1PVEVfUEFOX0lEX0NPTkZMSUNUX05PVElGSUNBVElPTiAxCisjZGVmaW5lIEZUREZfUkVNT1RFX0JFQUNPTiAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGVERGX1JFTU9URV9LRUVQX0FMSVZFICAgICAgICAgICAgICAgICAgIDMKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX01zZ0lkICAgICAgICBtc2dJZDsKKyAgICBGVERGX1JlbW90ZUlkICAgICByZW1vdGVJZDsKKyAgICBGVERGX1Nob3J0QWRkcmVzcyBkc3RBZGRyOworfSBGVERGX1JlbW90ZVJlcXVlc3Q7CisKKyNpZm5kZWYgRlRERl9OT19DU0wKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9TaG9ydEFkZHJlc3MgYWRkcjsKKyAgICBGVERGX1RpbWUgICAgICAgICB0aW1lOworICAgIEZUREZfUGVyaW9kICAgICAgIHBlcmlvZDsKK30gRlRERl9QZWVyQ3NsVGltaW5nOworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisKK3R5cGVkZWYgdWludDhfdCBGVERGX1N0YXRlOworI2RlZmluZSBGVERGX1NUQVRFX1VOSU5JVElBTElaRUQgMAorI2RlZmluZSBGVERGX1NUQVRFX0lETEUgICAgICAgICAgMQorI2RlZmluZSBGVERGX1NUQVRFX0RBVEFfUkVRVUVTVCAgMgorI2RlZmluZSBGVERGX1NUQVRFX1BPTExfUkVRVUVTVCAgMworI2RlZmluZSBGVERGX1NUQVRFX1NDQU5OSU5HICAgICAgNAorCisjaWZuZGVmIEZUREZfTk9fVFNDSAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX1Nob3J0QWRkcmVzcyBub2RlQWRkcjsKKyAgICBGVERGX1NpemUgICAgICAgICBuck9mUmV0cmllczsKKyAgICBGVERGX1NpemUgICAgICAgICBuck9mQ2NhUmV0cmllczsKKyAgICBGVERGX0JFRXhwb25lbnQgICBCRTsKK30gRlRERl9Uc2NoUmV0cnk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9TaG9ydEFkZHJlc3MgICAgZHN0QWRkcjsKKyAgICBGVERGX0tlZXBBbGl2ZVBlcmlvZCBwZXJpb2Q7CisgICAgRlRERl9SZW1vdGVSZXF1ZXN0ICAgbXNnOworfSBGVERGX05laWdoYm9yRW50cnk7CisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9Db3VudCBmY3NFcnJvckNudDsKKyAgICBGVERGX0NvdW50IHR4U3RkQWNrQ250OworICAgIEZUREZfQ291bnQgcnhTdGRBY2tDbnQ7Cit9IEZUREZfTG1hY0NvdW50ZXJzOworCitleHRlcm4gc3RydWN0IEZUREZfUGliICAgICBGVERGX3BpYjsKK2V4dGVybiBGVERGX1N0YXRlKiAgICAgICAgIEZUREZfc3RhdGU7CitleHRlcm4gRlRERl9Cb29sZWFuICAgICAgICBGVERGX3RyYW5zcGFyZW50TW9kZTsKK2V4dGVybiBGVERGX0JpdG1hcDMyICAgICAgIEZUREZfdHJhbnNwYXJlbnRNb2RlT3B0aW9uczsKK2V4dGVybiBGVERGX1F1ZXVlICAgICAgICAgIEZUREZfcmVxUXVldWU7CitleHRlcm4gRlRERl9RdWV1ZSAgICAgICAgICBGVERGX2ZyZWVRdWV1ZTsKK2V4dGVybiBGVERGX1BlbmRpbmcgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgRlRERl9OUl9PRl9SRVFfQlVGRkVSUyBdOworZXh0ZXJuIEZUREZfUGVuZGluZ1RMICAgICAgRlRERl90eFBlbmRpbmdUaW1lckxpc3RbIEZUREZfTlJfT0ZfUkVRX0JVRkZFUlMgXTsKK2V4dGVybiBGVERGX1BlbmRpbmdUTCogICAgIEZUREZfdHhQZW5kaW5nVGltZXJIZWFkOworZXh0ZXJuIEZUREZfVGltZSAgICAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lckxUOworZXh0ZXJuIEZUREZfVGltZSAgICAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lclRpbWU7CitleHRlcm4gRlRERl9Nc2dCdWZmZXIqICAgICBGVERGX3JlcUN1cnJlbnQ7CitleHRlcm4gRlRERl9TaXplICAgICAgICAgICBGVERGX25yT2ZSZXRyaWVzOworZXh0ZXJuIEZUREZfQm9vbGVhbiAgICAgICAgRlRERl9pc1BBTkNvb3JkaW5hdG9yOworZXh0ZXJuIEZUREZfU2xvdGZyYW1lRW50cnkgRlRERl9zbG90ZnJhbWVUYWJsZVsgRlRERl9NQVhfU0xPVEZSQU1FUyBdOworZXh0ZXJuIEZUREZfTGlua0VudHJ5ICAgICAgRlRERl9saW5rVGFibGVbIEZUREZfTUFYX0xJTktTIF07CisjaWZuZGVmIEZUREZfTk9fVFNDSAorZXh0ZXJuIEZUREZfTGlua0VudHJ5KiAgICAgRlRERl9zdGFydExpbmtzWyBGVERGX01BWF9TTE9URlJBTUVTIF07CitleHRlcm4gRlRERl9MaW5rRW50cnkqICAgICBGVERGX2VuZExpbmtzWyBGVERGX01BWF9TTE9URlJBTUVTIF07CitleHRlcm4gRlRERl9OZWlnaGJvckVudHJ5ICBGVERGX25laWdoYm9yVGFibGVbIEZUREZfTlJfT0ZfTkVJR0hCT1JTIF07CitleHRlcm4gRlRERl9Cb29sZWFuICAgICAgICBGVERGX3dha2VVcEVuYWJsZVRzY2g7CisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisjaWZuZGVmIEZUREZfTk9fQ1NMCitleHRlcm4gRlRERl9Cb29sZWFuICAgICAgICBGVERGX3dha2VVcEVuYWJsZUxlOworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCitleHRlcm4gRlRERl9MbWFjQ291bnRlcnMgICBGVERGX2xtYWNDb3VudGVyczsKKworZXh0ZXJuIEZUREZfRnJhbWVIZWFkZXIgICAgRlRERl9maDsKK2V4dGVybiBGVERGX1NlY3VyaXR5SGVhZGVyIEZUREZfc2g7CitleHRlcm4gRlRERl9Bc3NvY0FkbWluICAgICBGVERGX2FhOworZXh0ZXJuIEZUREZfQm9vbGVhbiAgICAgICAgRlRERl90eEluUHJvZ3Jlc3M7CisjaWZuZGVmIEZUREZfTk9fQ1NMCitleHRlcm4gRlRERl9UaW1lICAgICAgICAgICBGVERGX3J6VGltZTsKK2V4dGVybiBGVERGX1Nob3J0QWRkcmVzcyAgIEZUREZfc2VuZEZyYW1lUGVuZGluZzsKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworZXh0ZXJuIEZUREZfVGltZSAgICAgICAgICAgRlRERl9zdGFydENzbFNhbXBsZVRpbWU7CisKKyNpZm5kZWYgRlRERl9OT19UU0NICitleHRlcm4gRlRERl9MaW5rRW50cnkqICAgICBGVERGX3RzY2hTbG90TGluazsKK2V4dGVybiBGVERGX1RpbWU2NCAgICAgICAgIEZUREZfdHNjaFNsb3RUaW1lOworZXh0ZXJuIEZUREZfQVNOICAgICAgICAgICAgRlRERl90c2NoU2xvdEFTTjsKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKwordm9pZCBGVERGX3Byb2Nlc3NEYXRhUmVxdWVzdCggRlRERl9EYXRhUmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc1B1cmdlUmVxdWVzdCggRlRERl9QdXJnZVJlcXVlc3QqIHJlcSApOwordm9pZCBGVERGX3Byb2Nlc3NBc3NvY2lhdGVSZXF1ZXN0KCBGVERGX0Fzc29jaWF0ZVJlcXVlc3QqIHJlcSApOwordm9pZCBGVERGX3Byb2Nlc3NBc3NvY2lhdGVSZXNwb25zZSggRlRERl9Bc3NvY2lhdGVSZXNwb25zZSogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc0Rpc2Fzc29jaWF0ZVJlcXVlc3QoIEZUREZfRGlzYXNzb2NpYXRlUmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc0dldFJlcXVlc3QoIEZUREZfR2V0UmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc1NldFJlcXVlc3QoIEZUREZfU2V0UmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc09ycGhhblJlc3BvbnNlKCBGVERGX09ycGhhblJlc3BvbnNlKiByZXEgKTsKK3ZvaWQgRlRERl9wcm9jZXNzUmVzZXRSZXF1ZXN0KCBGVERGX1Jlc2V0UmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc1J4RW5hYmxlUmVxdWVzdCggRlRERl9SeEVuYWJsZVJlcXVlc3QqIHJlcSApOwordm9pZCBGVERGX3Byb2Nlc3NTY2FuUmVxdWVzdCggRlRERl9TY2FuUmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc1N0YXJ0UmVxdWVzdCggRlRERl9TdGFydFJlcXVlc3QqIHJlcSApOwordm9pZCBGVERGX3Byb2Nlc3NQb2xsUmVxdWVzdCggRlRERl9Qb2xsUmVxdWVzdCogcmVxICk7CisjaWZuZGVmIEZUREZfTk9fVFNDSAordm9pZCBGVERGX3Byb2Nlc3NTZXRTbG90ZnJhbWVSZXF1ZXN0KCBGVERGX1NldFNsb3RmcmFtZVJlcXVlc3QqIHJlcSApOwordm9pZCBGVERGX3Byb2Nlc3NTZXRMaW5rUmVxdWVzdCggRlRERl9TZXRMaW5rUmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc1RzY2hNb2RlUmVxdWVzdCggRlRERl9Uc2NoTW9kZVJlcXVlc3QqIHJlcSApOwordm9pZCBGVERGX3Byb2Nlc3NLZWVwQWxpdmVSZXF1ZXN0KCBGVERGX0tlZXBBbGl2ZVJlcXVlc3QqIHJlcSApOworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLwordm9pZCBGVERGX3Byb2Nlc3NCZWFjb25SZXF1ZXN0KCBGVERGX0JlYWNvblJlcXVlc3QqIHJlcSApOwordm9pZCBGVERGX3Byb2Nlc3NUcmFuc3BhcmVudFJlcXVlc3QoIEZUREZfVHJhbnNwYXJlbnRSZXF1ZXN0KiByZXEgKTsKK3ZvaWQgRlRERl9wcm9jZXNzUmVtb3RlUmVxdWVzdCggRlRERl9SZW1vdGVSZXF1ZXN0KiByZXEgKTsKKwordm9pZCBGVERGX3Byb2Nlc3NOZXh0UmVxdWVzdCggdm9pZCApOwordm9pZCBGVERGX3Byb2Nlc3NSeEV2ZW50KCB2b2lkICk7Cit2b2lkIEZUREZfcHJvY2Vzc1R4RXZlbnQoIHZvaWQgKTsKK3ZvaWQgRlRERl9wcm9jZXNzU3ltYm9sVGltZXJFdmVudCggdm9pZCApOworCit2b2lkIEZUREZfc2VuZERhdGFDb25maXJtKCBGVERGX0RhdGFSZXF1ZXN0KiAgZGF0YVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1N0YXR1cyAgICAgICAgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9UaW1lICAgICAgICAgIHRpbWVzdGFtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU04gICAgICAgICAgICBEU04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX051bU9mQmFja29mZnMgbnVtT2ZCYWNrb2ZmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfSUVMaXN0KiAgICAgICBhY2tQYXlsb2FkICk7CisKK3ZvaWQgRlRERl9zZW5kRGF0YUluZGljYXRpb24oIEZUREZfRnJhbWVIZWFkZXIqICAgIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TZWN1cml0eUhlYWRlciogc2VjdXJpdHlIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0lFTGlzdCogICAgICAgICBwYXlsb2FkSUVMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9EYXRhTGVuZ3RoICAgICAgbXNkdUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQqICAgICAgICAgIG1zZHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0xpbmtRdWFsaXR5ICAgICBtcGR1TGlua1F1YWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RpbWUgICAgICAgICAgICB0aW1lc3RhbXAgKTsKKwordm9pZCBGVERGX3NlbmRQb2xsQ29uZmlybSggRlRERl9Qb2xsUmVxdWVzdCogcG9sbFJlcXVlc3QsIEZUREZfU3RhdHVzIHN0YXR1cyApOworCit2b2lkIEZUREZfc2VuZFNjYW5Db25maXJtKCBGVERGX1NjYW5SZXF1ZXN0KiBzY2FuUmVxdWVzdCwgRlRERl9TdGF0dXMgc3RhdHVzICk7CisKK3ZvaWQgRlRERl9zZW5kQmVhY29uTm90aWZ5SW5kaWNhdGlvbiggRlRERl9QQU5EZXNjcmlwdG9yKiBQQU5EZXNjcmlwdG9yICk7CisKK3ZvaWQgRlRERl9zZW5kQmVhY29uQ29uZmlybSggRlRERl9CZWFjb25SZXF1ZXN0KiBiZWFjb25SZXF1ZXN0LCBGVERGX1N0YXR1cyBzdGF0dXMgKTsKKwordm9pZCBGVERGX3NlbmRBc3NvY2lhdGVDb25maXJtKCBGVERGX0Fzc29jaWF0ZVJlcXVlc3QqIGFzc29jaWF0ZVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU3RhdHVzICAgICAgICAgICAgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1Nob3J0QWRkcmVzcyAgICAgIGFzc29jU2hvcnRBZGRyICk7CisKK3ZvaWQgRlRERl9zZW5kQXNzb2NpYXRlRGF0YVJlcXVlc3QoIHZvaWQgKTsKKwordm9pZCBGVERGX3NlbmREaXNhc3NvY2lhdGVDb25maXJtKCBGVERGX0Rpc2Fzc29jaWF0ZVJlcXVlc3QqIGRpc1JlcSwgRlRERl9TdGF0dXMgc3RhdHVzICk7CisKK3ZvaWQgRlRERl9zZW5kU3luY0xvc3NJbmRpY2F0aW9uKCBGVERGX0xvc3NSZWFzb24gbG9zc1JlYXNvbiwgRlRERl9TZWN1cml0eUhlYWRlciogc2VjdXJpdHlIZWFkZXIgKTsKKwordm9pZCBGVERGX3NlbmRQQU5JZENvbmZsaWN0Tm90aWZpY2F0aW9uKCBGVERGX0ZyYW1lSGVhZGVyKiBmcmFtZUhlYWRlciwgRlRERl9TZWN1cml0eUhlYWRlciogc2VjdXJpdHlIZWFkZXIgKTsKKwordm9pZCBGVERGX3NlbmRDb21tU3RhdHVzSW5kaWNhdGlvbiggRlRERl9Nc2dCdWZmZXIqICAgICByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TdGF0dXMgICAgICAgICBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1BBTklkICAgICAgICAgIFBBTklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9BZGRyZXNzTW9kZSAgICBzcmNBZGRyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQWRkcmVzcyAgICAgICAgc3JjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQWRkcmVzc01vZGUgICAgZHN0QWRkck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0FkZHJlc3MgICAgICAgIGRzdEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NlY3VyaXR5TGV2ZWwgIHNlY3VyaXR5TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0tleUlkTW9kZSAgICAgIGtleUlkTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQqICAgICAgICAga2V5U291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9LZXlJbmRleCAgICAgICBrZXlJbmRleCApOworCit2b2lkIEZUREZfc3RhcnRUaW1lciggRlRERl9QZXJpb2QgcGVyaW9kLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICggKiB0aW1lckZ1bmMgKSggdm9pZCogcGFyYW1zICksCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgcGFyYW1zICk7CisKK0ZUREZfT2N0ZXQqIEZUREZfZ2V0VHhCdWZQdHIoIEZUREZfQnVmZmVyKiB0eEJ1ZmZlciApOworCit2b2lkICAgICAgICBGVERGX3NldFR4TWV0YURhdGEoIEZUREZfQnVmZmVyKiAgICAgICB0eEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9EYXRhTGVuZ3RoICAgIGZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0NoYW5uZWxOdW1iZXIgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9GcmFtZVR5cGUgICAgIGZyYW1lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9Cb29sZWFuICAgICAgIGFja1RYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NOICAgICAgICAgICAgU04gKTsKKworRlRERl9TdGF0dXMgRlRERl9zZW5kRnJhbWUoIEZUREZfQ2hhbm5lbE51bWJlciAgIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9GcmFtZUhlYWRlciogICAgZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TZWN1cml0eUhlYWRlciogc2VjdXJpdHlIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCogICAgICAgICAgdHhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9EYXRhTGVuZ3RoICAgICAgcGF5bG9hZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCogICAgICAgICAgcGF5bG9hZCApOworCisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKK0ZUREZfU3RhdHVzIEZUREZfc2VuZEFja0ZyYW1lKCBGVERGX0ZyYW1lSGVhZGVyKiAgICBmcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NlY3VyaXR5SGVhZGVyKiBzZWN1cml0eUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0KiAgICAgICAgICB0eFB0ciApOworI2VuZGlmIC8qICFGVERGX05PX0NTTCB8fCAhRlRERl9OT19UU0NIICovCisKK3ZvaWQgRlRERl9zZW5kVHJhbnNwYXJlbnRGcmFtZSggRlRERl9EYXRhTGVuZ3RoICAgIGZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0KiAgICAgICAgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQ2hhbm5lbE51bWJlciBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1BUSSAgICAgICAgICAgcHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0Jvb2xlYW4gICAgICAgY21zYVN1cHByZXNzICk7CisKK0ZUREZfT2N0ZXQqIEZUREZfZ2V0UnhCdWZmZXIoIHZvaWQgKTsKKwordm9pZCAgICAgICAgRlRERl9wcm9jZXNzUnhFdmVudCggdm9pZCApOworCitGVERGX09jdGV0KiBGVERGX2FkZEZyYW1lSGVhZGVyKCBGVERGX09jdGV0KiAgICAgICB0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRnJhbWVIZWFkZXIqIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9EYXRhTGVuZ3RoICAgbXNkdUxlbmd0aCApOworCitGVERGX09jdGV0KiBGVERGX2dldEZyYW1lSGVhZGVyKCBGVERGX09jdGV0KiAgICAgICByeFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRnJhbWVIZWFkZXIqIGZyYW1lSGVhZGVyICk7CisKK0ZUREZfRGF0YUxlbmd0aCBGVERGX2dldE1pY0xlbmd0aCggRlRERl9TZWN1cml0eUxldmVsIHNlY3VyaXR5TGV2ZWwgKTsKKworRlRERl9PY3RldCogICAgIEZUREZfZ2V0U2VjdXJpdHlIZWFkZXIoIEZUREZfT2N0ZXQqICAgICAgICAgIHJ4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgIGZyYW1lVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NlY3VyaXR5SGVhZGVyKiBzZWN1cml0eUhlYWRlciApOworCitGVERGX09jdGV0KiBGVERGX2FkZFNlY3VyaXR5SGVhZGVyKCBGVERGX09jdGV0KiAgICAgICAgICB0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU2VjdXJpdHlIZWFkZXIqIHNlY3VyaXR5SGVhZGVyICk7CisKK0ZUREZfU3RhdHVzIEZUREZfc2VjdXJlRnJhbWUoIEZUREZfT2N0ZXQqICAgICAgICAgIGJ1ZlB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQqICAgICAgICAgIHByaXZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0ZyYW1lSGVhZGVyKiAgICBmcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU2VjdXJpdHlIZWFkZXIqIHNlY3VyaXR5SGVhZGVyICk7CisKK0ZUREZfU3RhdHVzIEZUREZfdW5zZWN1cmVGcmFtZSggRlRERl9PY3RldCogICAgICAgICAgYnVmUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0KiAgICAgICAgICBwcml2UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0ZyYW1lSGVhZGVyKiAgICBmcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TZWN1cml0eUhlYWRlciogc2VjdXJpdHlIZWFkZXIgKTsKKworRlRERl9LZXlEZXNjcmlwdG9yKiBGVERGX2xvb2t1cEtleSggRlRERl9BZGRyZXNzTW9kZSBkZXZBZGRyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfUEFOSWQgICAgICAgZGV2UEFOSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0FkZHJlc3MgICAgIGRldkFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0ZyYW1lVHlwZSAgIGZyYW1lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfS2V5SWRNb2RlICAga2V5SWRNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9LZXlJbmRleCAgICBrZXlJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQqICAgICAga2V5U291cmNlICk7CisKK0ZUREZfRGV2aWNlRGVzY3JpcHRvciogRlRERl9sb29rdXBEZXZpY2UoIEZUREZfU2l6ZSAgICAgICAgICAgICAgICAgICAgbnJPZkRldmljZURlc2NyaXB0b3JIYW5kbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9EZXZpY2VEZXNjcmlwdG9ySGFuZGxlKiBkZXZpY2VEZXNjcmlwdG9ySGFuZGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQWRkcmVzc01vZGUgICAgICAgICAgICAgZGV2QWRkck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1BBTklkICAgICAgICAgICAgICAgICAgIGRldlBBTklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9BZGRyZXNzICAgICAgICAgICAgICAgICBkZXZBZGRyICk7CisKK0ZUREZfU2VjdXJpdHlMZXZlbERlc2NyaXB0b3IqIEZUREZfZ2V0U2VjdXJpdHlMZXZlbERlc2NyKCBGVERGX0ZyYW1lVHlwZSAgICAgIGZyYW1lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0NvbW1hbmRGcmFtZUlkIGNvbW1hbmRGcmFtZUlkICk7CisKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorRlRERl9PY3RldCogRlRERl9hZGRJZXMoIEZUREZfT2N0ZXQqICB0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0lFTGlzdCogaGVhZGVySUVMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfSUVMaXN0KiBwYXlsb2FkSUVMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQm9vbGVhbiB3aXRoVGVybWluYXRpb25JRSApOworCitGVERGX09jdGV0KiBGVERGX2dldEllcyggRlRERl9PY3RldCogICByeFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0KiAgIGZyYW1lRW5kUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfSUVMaXN0KiogaGVhZGVySUVMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfSUVMaXN0KiogcGF5bG9hZElFTGlzdCApOworI2VuZGlmIC8qICFGVERGX05PX0NTTCB8fCAhRlRERl9OT19UU0NIICovCisKKyNpZm5kZWYgRlRERl9OT19DU0wKK3ZvaWQgRlRERl9zZXRQZWVyQ3NsVGltaW5nKCBGVERGX0lFTGlzdCogaGVhZGVySUVMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVGltZSAgICB0aW1lU3RhbXAgKTsKK3ZvaWQgRlRERl9zZXRDc2xTYW1wbGVUaW1lKCB2b2lkICk7Cit2b2lkIEZUREZfZ2V0V2FrZXVwUGFyYW1zKCBGVERGX1Nob3J0QWRkcmVzcyBkc3RBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9UaW1lKiAgICAgICAgd2FrZXVwU3RhcnRUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9QZXJpb2QqICAgICAgd2FrZXVwUGVyaW9kICk7CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKwordm9pZCAgICAgICAgICAgIEZUREZfZ2V0RXh0QWRkcmVzcyggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0RXh0QWRkcmVzcyggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfZ2V0QWNrV2FpdER1cmF0aW9uKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9nZXRFbmhBY2tXYWl0RHVyYXRpb24oIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3NldEVuaEFja1dhaXREdXJhdGlvbiggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfZ2V0SW1wbGljaXRCcm9hZGNhc3QoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3NldEltcGxpY2l0QnJvYWRjYXN0KCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9zZXRTaG9ydEFkZHJlc3MoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3NldFNpbXBsZUFkZHJlc3MoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX2dldFJ4T25XaGVuSWRsZSggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0UnhPbldoZW5JZGxlKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9nZXRQQU5JZCggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0UEFOSWQoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX2dldEN1cnJlbnRDaGFubmVsKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9zZXRDdXJyZW50Q2hhbm5lbCggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0VFhQb3dlciggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfZ2V0TWF4RnJhbWVUb3RhbFdhaXRUaW1lKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9zZXRNYXhGcmFtZVRvdGFsV2FpdFRpbWUoIHZvaWQgKTsKKyNpZm5kZWYgRlRERl9OT19DU0wKK3ZvaWQgICAgICAgICAgICBGVERGX3NldExlRW5hYmxlZCggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfZ2V0Q3NsRnJhbWVQZW5kaW5nV2FpdFQoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3NldENzbEZyYW1lUGVuZGluZ1dhaXRUKCB2b2lkICk7CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KK3ZvaWQgICAgICAgICAgICBGVERGX2dldExtYWNQbURhdGEoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX2dldExtYWNUcmFmZmljQ291bnRlcnMoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3NldE1heENTTUFCYWNrb2Zmcyggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0TWF4QkUoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3NldE1pbkJFKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9nZXRLZWVwUGh5RW5hYmxlZCggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0S2VlcFBoeUVuYWJsZWQoIHZvaWQgKTsKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCit2b2lkICAgICAgICAgICAgRlRERl9zZXRCb0lycVRocmVzaG9sZCggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfZ2V0Qm9JcnFUaHJlc2hvbGQoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3NldFB0aUNvbmZpZyggdm9pZCApOworI2VuZGlmIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKworI2lmbmRlZiBGVERGX05PX1RTQ0gKK3ZvaWQgICAgICAgICAgICBGVERGX3NldFRpbWVzbG90VGVtcGxhdGUoIHZvaWQgKTsKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKwordm9pZCAgICAgICAgICAgIEZUREZfaW5pdExtYWMoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX2luaXRRdWV1ZXMoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX2luaXRRdWV1ZSggRlRERl9RdWV1ZSogcXVldWUgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3F1ZXVlQnVmZmVySGVhZCggRlRERl9CdWZmZXIqIGJ1ZmZlciwgRlRERl9RdWV1ZSogcXVldWUgKTsKK0ZUREZfU3RhdHVzICAgICBGVERGX3F1ZXVlUmVxSGVhZCggRlRERl9Nc2dCdWZmZXIqIHJlcXVlc3QsIEZUREZfUXVldWUqIHF1ZXVlICk7CitGVERGX0J1ZmZlciogICAgRlRERl9kZXF1ZXVlQnVmZmVyVGFpbCggRlRERl9RdWV1ZSogcXVldWUgKTsKK0ZUREZfTXNnQnVmZmVyKiBGVERGX2RlcXVldWVSZXFUYWlsKCBGVERGX1F1ZXVlKiBxdWV1ZSApOworRlRERl9Nc2dCdWZmZXIqIEZUREZfZGVxdWV1ZUJ5SGFuZGxlKCBGVERGX0hhbmRsZSBoYW5kbGUsIEZUREZfUXVldWUqIHF1ZXVlICk7CitGVERGX0J1ZmZlciogICAgRlRERl9kZXF1ZXVlQnlCdWZmZXIoIEZUREZfQnVmZmVyKiBidWZmZXIsIEZUREZfUXVldWUqIHF1ZXVlICk7CitGVERGX0Jvb2xlYW4gICAgRlRERl9pc1F1ZXVlRW1wdHkoIEZUREZfUXVldWUqIHF1ZXVlICk7Cit2b2lkICAgICAgICAgICAgRlRERl9hZGRUeFBlbmRpbmdUaW1lciggRlRERl9Nc2dCdWZmZXIqIHJlcXVlc3QsIHVpbnQ4X3QgcGVuZExpc3ROciwgRlRERl9UaW1lIGRlbHRhLCB2b2lkICggKiBmdW5jICkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfUGVuZGluZ1RMKiApICk7Cit2b2lkICAgICAgICAgICAgRlRERl9yZW1vdmVUeFBlbmRpbmdUaW1lciggRlRERl9Nc2dCdWZmZXIqIHJlcXVlc3QgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3Jlc3RvcmVUeFBlbmRpbmdUaW1lciggdm9pZCApOworRlRERl9Cb29sZWFuICAgIEZUREZfZ2V0VHhQZW5kaW5nVGltZXJIZWFkKCBGVERGX1RpbWUqIHRpbWUgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3NlbmRUcmFuc2FjdGlvbkV4cGlyZWQoIEZUREZfUGVuZGluZ1RMKiBwdHIgKTsKKyNpZm5kZWYgRlRERl9OT19UU0NICit2b2lkICAgICAgICAgICAgRlRERl9wcm9jZXNzS2VlcEFsaXZlVGltZXJFeHAoIEZUREZfUGVuZGluZ1RMKiBwdHIgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3Jlc2V0S2VlcEFsaXZlVGltZXIoIEZUREZfU2hvcnRBZGRyZXNzIGRzdEFkZHIgKTsKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKwordm9pZCBGVERGX3Byb2Nlc3NUeFBlbmRpbmcoRlRERl9GcmFtZUhlYWRlciogICAgZnJhbWVIZWFkZXIsCisgICAgICAgIEZUREZfU2VjdXJpdHlIZWFkZXIqIHNlY3VyaXR5SGVhZGVyICk7CisKK3ZvaWQgICAgICAgICAgICBGVERGX3Byb2Nlc3NDb21tYW5kRnJhbWUoIEZUREZfT2N0ZXQqICAgICAgICAgIHJ4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9GcmFtZUhlYWRlciogICAgZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NlY3VyaXR5SGVhZGVyKiBzZWN1cml0eUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfSUVMaXN0KiAgICAgICAgIHBheWxvYWRJRUxpc3QgKTsKKwordm9pZCAgICAgICAgICAgICAgIEZUREZfc2NhblJlYWR5KCBGVERGX1NjYW5SZXF1ZXN0KiApOwordm9pZCAgICAgICAgICAgICAgIEZUREZfYWRkUEFOZGVzY3JpcHRvciggRlRERl9QQU5EZXNjcmlwdG9yKiApOwordm9pZCAgICAgICAgICAgICAgIEZUREZfc2VuZEJlYWNvblJlcXVlc3QoIEZUREZfQ2hhbm5lbE51bWJlciBjaGFubmVsICk7Cit2b2lkICAgICAgICAgICAgICAgRlRERl9zZW5kQmVhY29uUmVxdWVzdEluZGljYXRpb24oIEZUREZfRnJhbWVIZWFkZXIqIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0lFTGlzdCogICAgICBwYXlsb2FkSUVMaXN0ICk7Cit2b2lkICAgICAgICAgICAgICAgRlRERl9zZW5kT3JwaGFuTm90aWZpY2F0aW9uKCBGVERGX0NoYW5uZWxOdW1iZXIgY2hhbm5lbCApOworCisjaWZuZGVmIEZUREZfTk9fVFNDSAordm9pZCAgICAgICAgICAgICAgIEZUREZfc2V0VHNjaEVuYWJsZWQoIHZvaWQgKTsKK0ZUREZfU3RhdHVzICAgICAgICBGVERGX3NjaGVkdWxlVHNjaCggRlRERl9Nc2dCdWZmZXIqIHJlcXVlc3QgKTsKK3ZvaWQgICAgICAgICAgICAgICBGVERGX3RzY2hQcm9jZXNzUmVxdWVzdCggdm9pZCApOworRlRERl9TaXplICAgICAgICAgIEZUREZfZ2V0VHNjaFN5bmNTdWJJZSggdm9pZCApOworRlRERl9PY3RldCogICAgICAgIEZUREZfYWRkVHNjaFN5bmNTdWJJZSggRlRERl9PY3RldCogdHhQdHIgKTsKK0ZUREZfU2hvcnRBZGRyZXNzICBGVERGX2dldFJlcXVlc3RBZGRyZXNzKCBGVERGX01zZ0J1ZmZlciogcmVxdWVzdCApOworRlRERl9Nc2dCdWZmZXIqICAgIEZUREZfdHNjaEdldFBlbmRpbmcoIEZUREZfTXNnQnVmZmVyKiByZXF1ZXN0ICk7CitGVERGX09jdGV0KiAgICAgICAgRlRERl9hZGRDb3JyVGltZUlFKCBGVERGX09jdGV0KiB0eFB0ciwgRlRERl9UaW1lIHJ4VGltZXN0YW1wICk7Cit2b2lkICAgICAgICAgICAgICAgRlRERl9jb3JyZWN0U2xvdFRpbWUoIEZUREZfVGltZSByeFRpbWVzdGFtcCApOwordm9pZCAgICAgICAgICAgICAgIEZUREZfY29ycmVjdFNsb3RUaW1lRnJvbUFjayggRlRERl9JRUxpc3QqIGhlYWRlcklFTGlzdCApOwordm9pZCAgICAgICAgICAgICAgIEZUREZfaW5pdFRzY2hSZXRyaWVzKCB2b2lkICk7CitGVERGX1RzY2hSZXRyeSogICAgRlRERl9nZXRUc2NoUmV0cnkoIEZUREZfU2hvcnRBZGRyZXNzIG5vZGVBZGRyICk7CitGVERGX051bU9mQmFja29mZnMgRlRERl9nZXROdW1PZkJhY2tvZmZzKCBGVERGX0JFRXhwb25lbnQgQkUgKTsKK3ZvaWQgICAgICAgICAgICAgICBGVERGX2luaXRCYWNrb2ZmKCB2b2lkICk7CitGVERGX1NOICAgICAgICAgICAgRlRERl9wcm9jZXNzVHNjaFNOKCBGVERGX01zZ0J1ZmZlciogbXNnLCBGVERGX1NOIHNuLCB1aW50OF90KiBwcml2ICk7CisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisKK0ZUREZfVGltZTY0ICAgICAgICBGVERGX2dldEN1clRpbWU2NCggdm9pZCApOwordm9pZCAgICAgICAgICAgICAgIEZUREZfaW5pdEN1clRpbWU2NCggdm9pZCApOworCisjaWYgRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYKK3R5cGVkZWYgZW51bQoreworICAgICAgICBGVERGX1NEQl9TVEFURV9JTklUID0gMCwKKyAgICAgICAgRlRERl9TREJfU1RBVEVfQkFDS0lOR19PRkYsCisgICAgICAgIEZUREZfU0RCX1NUQVRFX1dBSVRJTkdfV0FLRV9VUF9JUlEsCisgICAgICAgIEZUREZfU0RCX1NUQVRFX1JFU1VNSU5HLAorfSBGVERGX1NkYlN0YXRlOworCit0eXBlZGVmIHN0cnVjdAoreworICAgICAgICBGVERGX1NkYlN0YXRlIHN0YXRlOworICAgICAgICBGVERGX1NpemUgbnJPZkJhY2tvZmZzOworICAgICAgICBGVERGX1RpbWUgY2NhUmV0cnlUaW1lOworICAgICAgICBGVERGX09jdGV0IGJ1ZmZlcltGVERGX0JVRkZFUl9MRU5HVEhdOworICAgICAgICB1aW50MzJfdCBtZXRhZGF0YTA7CisgICAgICAgIHVpbnQzMl90IG1ldGFkYXRhMTsKKyAgICAgICAgdWludDMyX3QgcGh5Q3NtYUNhQXR0cjsKK30gRlRERl9TZGI7CisKK3ZvaWQgRlRERl9zZGJGc21SZXNldCh2b2lkKTsKKwordm9pZCBGVERGX3NkYkZzbUJhY2tvZmZJUlEodm9pZCk7CisKK3ZvaWQgRlRERl9zZGJGc21TbGVlcCh2b2lkKTsKKwordm9pZCBGVERGX3NkYkZzbUFib3J0U2xlZXAodm9pZCk7CisKK3ZvaWQgRlRERl9zZGJGc21XYWtlVXBJUlEodm9pZCk7CisKK3ZvaWQgRlRERl9zZGJGc21XYWtlVXAodm9pZCk7CisKK3ZvaWQgRlRERl9zZGJGc21UeElSUSh2b2lkKTsKKworRlRERl9VU2VjIEZUREZfc2RiR2V0U2xlZXBUaW1lKHZvaWQpOworCisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9GVERGX0REUEhZID09IDEKKwordm9pZCBGVERGX2RkcGh5UmVzdG9yZSh2b2lkKTsKKwordm9pZCBGVERGX2RkcGh5U2F2ZSh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvbWFpbi5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODY5ZjkxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL21haW4uYwpAQCAtMCwwICsxLDMzMSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIG1haW4uYworICoKKyAqIEBicmllZiBNYWluIEZUREYgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpbmNsdWRlIDxmdGRmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgInJlZ21hcC5oIgorI2luY2x1ZGUgImZ0ZGZJbmZvLmgiCisKK3ZvaWQgRlRERl9nZXRSZWxlYXNlSW5mbyhjaGFyICoqbG1hY1JlbE5hbWUsIGNoYXIgKipsbWFjQnVpbGRUaW1lLCBjaGFyICoqdW1hY1JlbE5hbWUsIGNoYXIgKip1bWFjQnVpbGRUaW1lKQoreworICAgIHN0YXRpYyBjaGFyICAgICAgICBscmVsTmFtZVsgMTYgXTsKKyAgICBzdGF0aWMgY2hhciAgICAgICAgbGJsZFRpbWVbIDE2IF07CisgICAgc3RhdGljIGNoYXIgICAgICAgIHVyZWxOYW1lWyAxNiBdOworICAgIHN0YXRpYyBjaGFyICAgICAgICB1YmxkVGltZVsgMTYgXTsKKyAgICB1aW50OF90ICAgICAgICAgICAgaTsKKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpwdHIgICAgPSBGVERGX0dFVF9SRUdfQUREUihPTl9PRkZfUkVHTUFQX1JFTF9OQU1FKTsKKyAgICB1aW50MzJfdCAgICAgICAgICAqY2hyUHRyID0gKHVpbnQzMl90ICopbHJlbE5hbWU7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgKmNoclB0cisrID0gKnB0cisrOworICAgIH0KKworICAgIHB0ciAgICA9IEZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfQlVJTERUSU1FKTsKKyAgICBjaHJQdHIgPSAodWludDMyX3QgKilsYmxkVGltZTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgKmNoclB0cisrID0gKnB0cisrOworICAgIH0KKworICAgIGNvbnN0IGNoYXIgKnVtYWNWUHRyID0gRlRERl9nZXRVbWFjUmVsTmFtZSgpOworCisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisgICAgeworICAgICAgICB1cmVsTmFtZVsgaSBdID0gdW1hY1ZQdHJbIGkgXTsKKworICAgICAgICBpZiAodW1hY1ZQdHJbIGkgXSA9PSAnXDAnKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVtYWNWUHRyID0gRlRERl9nZXRVbWFjQnVpbGRUaW1lKCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICB7CisgICAgICAgIHVibGRUaW1lWyBpIF0gPSB1bWFjVlB0clsgaSBdOworCisgICAgICAgIGlmICh1bWFjVlB0clsgaSBdID09ICdcMCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgbHJlbE5hbWVbIDE1IF0gPSAnXDAnOworICAgIGxibGRUaW1lWyAxNSBdID0gJ1wwJzsKKyAgICB1cmVsTmFtZVsgMTUgXSA9ICdcMCc7CisgICAgdWJsZFRpbWVbIDE1IF0gPSAnXDAnOworCisgICAgKmxtYWNSZWxOYW1lICAgPSBscmVsTmFtZTsKKyAgICAqbG1hY0J1aWxkVGltZSA9IGxibGRUaW1lOworICAgICp1bWFjUmVsTmFtZSAgID0gdXJlbE5hbWU7CisgICAgKnVtYWNCdWlsZFRpbWUgPSB1YmxkVGltZTsKK30KKwordm9pZCBGVERGX2NvbmZpcm1MbWFjSW50ZXJydXB0KHZvaWQpCit7CisgICAgdm9sYXRpbGUgdWludDMyX3QgKmZ0ZGZDbSA9IEZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfRlRERl9DTSk7CisgICAgKmZ0ZGZDbSA9IDA7Cit9CisKK3ZvaWQgRlRERl9ldmVudEhhbmRsZXIodm9pZCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBmdGRmQ2UgPSAqRlRERl9HRVRfUkVHX0FERFIoT05fT0ZGX1JFR01BUF9GVERGX0NFKTsKKworICAgIGlmIChmdGRmQ2UgJiBGVERGX01TS19SWF9DRSkKKyAgICB7CisgICAgICAgIEZUREZfcHJvY2Vzc1J4RXZlbnQoKTsKKyAgICB9CisKKyAgICBpZiAoZnRkZkNlICYgRlRERl9NU0tfVFhfQ0UpCisgICAgeworICAgICAgICBGVERGX3Byb2Nlc3NUeEV2ZW50KCk7CisgICAgfQorCisgICAgaWYgKGZ0ZGZDZSAmIEZUREZfTVNLX1NZTUJPTF9UTVJfQ0UpCisgICAgeworICAgICAgICBGVERGX3Byb2Nlc3NTeW1ib2xUaW1lckV2ZW50KCk7CisgICAgfQorCisjaWZuZGVmIEZUREZfTElURQorI2lmbmRlZiBGVERGX05PX0NTTAorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCkKKyAgICB7CisgICAgICAgIEZUREZfVGltZSBjdXJUaW1lID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworICAgICAgICBGVERGX1RpbWUgZGVsdGEgICA9IGN1clRpbWUgLSBGVERGX3J6VGltZTsKKworICAgICAgICBpZiAoZGVsdGEgPCAweDgwMDAwMDAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBSWiBoYXMgcGFzc2VkIGNoZWNrIGlmIGEgc2VuZCBmcmFtZSBpcyBwZW5kaW5nCisgICAgICAgICAgICBpZiAoRlRERl9zZW5kRnJhbWVQZW5kaW5nICE9IDB4ZmZmZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX1RpbWUgICB3YWtldXBTdGFydFRpbWU7CisgICAgICAgICAgICAgICAgRlRERl9QZXJpb2Qgd2FrZXVwUGVyaW9kOworCisgICAgICAgICAgICAgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgICAgICAgICAgICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworCisgICAgICAgICAgICAgICAgRlRERl9nZXRXYWtldXBQYXJhbXMoRlRERl9zZW5kRnJhbWVQZW5kaW5nLCAmd2FrZXVwU3RhcnRUaW1lLCAmd2FrZXVwUGVyaW9kKTsKKworICAgICAgICAgICAgICAgIEZUREZfdHhJblByb2dyZXNzID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FLCB3YWtldXBTdGFydFRpbWUpOworICAgICAgICAgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDV1VQRVJJT0QsIHdha2V1cFBlcmlvZCk7CisKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCAqdHhGbGFnU2V0ID0gRlRERl9HRVRfRklFTERfQUREUihPTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU0VUKTsKKyAgICAgICAgICAgICAgICAqdHhGbGFnU2V0ICAgICAgICAgICB8PSAoKDEgPDwgRlRERl9UWF9EQVRBX0JVRkZFUikgfCAoMSA8PCBGVERGX1RYX1dBS0VVUF9CVUZGRVIpKTsKKworICAgICAgICAgICAgICAgIEZUREZfc2VuZEZyYW1lUGVuZGluZyA9IDB4ZmZmZTsKKworICAgICAgICAgICAgICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChGVERGX3R4SW5Qcm9ncmVzcyA9PSBGVERGX0ZBTFNFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfc2V0Q3NsU2FtcGxlVGltZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgdm9sYXRpbGUgdWludDMyX3QgKmZ0ZGZDbSA9IEZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfRlRERl9DTSk7CisgICAgKmZ0ZGZDbSA9IEZUREZfTVNLX1RYX0NFIHwgRlRERl9NU0tfUlhfQ0UgfCBGVERGX01TS19TWU1CT0xfVE1SX0NFOworfQorCisjaWZuZGVmIEZUREZfUEhZX0FQSQordm9pZCBGVERGX3NuZE1zZyhGVERGX01zZ0J1ZmZlciAqbXNnQnVmKQoreworICAgIHN3aXRjaCAobXNnQnVmLT5tc2dJZCkKKyAgICB7CisjaWZuZGVmIEZUREZfTElURQorCisgICAgY2FzZSBGVERGX0RBVEFfUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzRGF0YVJlcXVlc3QoKEZUREZfRGF0YVJlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfUFVSR0VfUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzUHVyZ2VSZXF1ZXN0KChGVERGX1B1cmdlUmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9BU1NPQ0lBVEVfUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzQXNzb2NpYXRlUmVxdWVzdCgoRlRERl9Bc3NvY2lhdGVSZXF1ZXN0ICopIG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX0FTU09DSUFURV9SRVNQT05TRToKKyAgICAgICAgRlRERl9wcm9jZXNzQXNzb2NpYXRlUmVzcG9uc2UoKEZUREZfQXNzb2NpYXRlUmVzcG9uc2UgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfRElTQVNTT0NJQVRFX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc0Rpc2Fzc29jaWF0ZVJlcXVlc3QoKEZUREZfRGlzYXNzb2NpYXRlUmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKKyAgICBjYXNlIEZUREZfR0VUX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc0dldFJlcXVlc3QoKEZUREZfR2V0UmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9TRVRfUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzU2V0UmVxdWVzdCgoRlRERl9TZXRSZXF1ZXN0ICopIG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworI2lmbmRlZiBGVERGX0xJVEUKKworICAgIGNhc2UgRlRERl9PUlBIQU5fUkVTUE9OU0U6CisgICAgICAgIEZUREZfcHJvY2Vzc09ycGhhblJlc3BvbnNlKChGVERGX09ycGhhblJlc3BvbnNlICopIG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworICAgIGNhc2UgRlRERl9SRVNFVF9SRVFVRVNUOgorICAgICAgICBGVERGX3Byb2Nlc3NSZXNldFJlcXVlc3QoKEZUREZfUmVzZXRSZXF1ZXN0ICopIG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX1JYX0VOQUJMRV9SRVFVRVNUOgorICAgICAgICBGVERGX3Byb2Nlc3NSeEVuYWJsZVJlcXVlc3QoKEZUREZfUnhFbmFibGVSZXF1ZXN0ICopIG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworI2lmbmRlZiBGVERGX0xJVEUKKworICAgIGNhc2UgRlRERl9TQ0FOX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc1NjYW5SZXF1ZXN0KChGVERGX1NjYW5SZXF1ZXN0ICopIG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX1NUQVJUX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc1N0YXJ0UmVxdWVzdCgoRlRERl9TdGFydFJlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfUE9MTF9SRVFVRVNUOgorICAgICAgICBGVERGX3Byb2Nlc3NQb2xsUmVxdWVzdCgoRlRERl9Qb2xsUmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICBjYXNlIEZUREZfU0VUX1NMT1RGUkFNRV9SRVFVRVNUOgorICAgICAgICBGVERGX3Byb2Nlc3NTZXRTbG90ZnJhbWVSZXF1ZXN0KChGVERGX1NldFNsb3RmcmFtZVJlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfU0VUX0xJTktfUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzU2V0TGlua1JlcXVlc3QoKEZUREZfU2V0TGlua1JlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfVFNDSF9NT0RFX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc1RzY2hNb2RlUmVxdWVzdCgoRlRERl9Uc2NoTW9kZVJlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfS0VFUF9BTElWRV9SRVFVRVNUOgorICAgICAgICBGVERGX3Byb2Nlc3NLZWVwQWxpdmVSZXF1ZXN0KChGVERGX0tlZXBBbGl2ZVJlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisKKyAgICBjYXNlIEZUREZfQkVBQ09OX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc0JlYWNvblJlcXVlc3QoKEZUREZfQmVhY29uUmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKKyAgICBjYXNlIEZUREZfVFJBTlNQQVJFTlRfRU5BQkxFX1JFUVVFU1Q6CisgICAgICAgIEZUREZfZW5hYmxlVHJhbnNwYXJlbnRNb2RlKCgoRlRERl9UcmFuc3BhcmVudEVuYWJsZVJlcXVlc3QgKikgbXNnQnVmKS0+ZW5hYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZUREZfVHJhbnNwYXJlbnRFbmFibGVSZXF1ZXN0ICopIG1zZ0J1ZiktPm9wdGlvbnMpOworICAgICAgICBGVERGX1JFTF9NU0dfQlVGRkVSKG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX1RSQU5TUEFSRU5UX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc1RyYW5zcGFyZW50UmVxdWVzdCgoRlRERl9UcmFuc3BhcmVudFJlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfU0xFRVBfUkVRVUVTVDoKKyAgICAgICAgRlRERl9TTEVFUF9DQUxMQkFDSygoKEZUREZfU2xlZXBSZXF1ZXN0ICopbXNnQnVmKS0+c2xlZXBUaW1lKTsKKyAgICAgICAgRlRERl9SRUxfTVNHX0JVRkZFUihtc2dCdWYpOworICAgICAgICBicmVhazsKKyNpZm5kZWYgRlRERl9MSVRFCisKKyAgICBjYXNlIEZUREZfUkVNT1RFX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc1JlbW90ZVJlcXVlc3QoKEZUREZfUmVtb3RlUmVxdWVzdCAqKW1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyNpZiBGVERGX0RCR19CVVNfRU5BQkxFCisKKyAgICBjYXNlIEZUREZfREJHX01PREVfU0VUX1JFUVVFU1Q6CisgICAgICAgIEZUREZfc2V0RGJnTW9kZSgoKEZUREZfRGJnTW9kZVNldFJlcXVlc3QgKikgbXNnQnVmKS0+ZGJnTW9kZSk7CisgICAgICAgIEZUREZfUkVMX01TR19CVUZGRVIobXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlRERl9EQkdfQlVTX0VOQUJMRSAqLworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKworICAgIGNhc2UgRlRERl9GUFBSX01PREVfU0VUX1JFUVVFU1Q6CisgICAgICAgIEZUREZfZnBwclNldE1vZGUoKChGVERGX0ZwcHJNb2RlU2V0UmVxdWVzdCAqKSBtc2dCdWYpLT5tYXRjaEZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoRlRERl9GcHByTW9kZVNldFJlcXVlc3QgKikgbXNnQnVmKS0+ZnBPdmVycmlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKEZUREZfRnBwck1vZGVTZXRSZXF1ZXN0ICopIG1zZ0J1ZiktPmZwRm9yY2UpOworICAgICAgICBGVERGX1JFTF9NU0dfQlVGRkVSKG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFNpbGVudHkgcmVsZWFzZSB0aGUgbWVzc2FnZSBidWZmZXIKKyAgICAgICAgRlRERl9SRUxfTVNHX0JVRkZFUihtc2dCdWYpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgRlRERl9zZW5kRnJhbWVUcmFuc3BhcmVudENvbmZpcm0odm9pZCAgICAgICAgICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQml0bWFwMzIgc3RhdHVzKQoreworICAgIEZUREZfVHJhbnNwYXJlbnRDb25maXJtICpjb25maXJtID0KKyAgICAgICAgKEZUREZfVHJhbnNwYXJlbnRDb25maXJtICopIEZUREZfR0VUX01TR19CVUZGRVIoc2l6ZW9mKEZUREZfVHJhbnNwYXJlbnRDb25maXJtKSk7CisKKyAgICBjb25maXJtLT5tc2dJZCAgPSBGVERGX1RSQU5TUEFSRU5UX0NPTkZJUk07CisgICAgY29uZmlybS0+aGFuZGxlID0gaGFuZGxlOworICAgIGNvbmZpcm0tPnN0YXR1cyA9IHN0YXR1czsKKworICAgIEZUREZfUkNWX01TRygoRlRERl9Nc2dCdWZmZXIgKikgY29uZmlybSk7Cit9CisKK3ZvaWQgRlRERl9yY3ZGcmFtZVRyYW5zcGFyZW50KEZUREZfRGF0YUxlbmd0aCBmcmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQgICAgICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQml0bWFwMzIgICBzdGF0dXMpCit7CisgICAgRlRERl9UcmFuc3BhcmVudEluZGljYXRpb24gKmluZGljYXRpb24gPQorICAgICAgICAoRlRERl9UcmFuc3BhcmVudEluZGljYXRpb24gKikgRlRERl9HRVRfTVNHX0JVRkZFUihzaXplb2YoRlRERl9UcmFuc3BhcmVudEluZGljYXRpb24pKTsKKworICAgIGluZGljYXRpb24tPm1zZ0lkICAgICAgID0gRlRERl9UUkFOU1BBUkVOVF9JTkRJQ0FUSU9OOworICAgIGluZGljYXRpb24tPmZyYW1lTGVuZ3RoID0gZnJhbWVMZW5ndGg7CisgICAgaW5kaWNhdGlvbi0+c3RhdHVzICAgICAgPSBzdGF0dXM7CisgICAgaW5kaWNhdGlvbi0+ZnJhbWUgICAgICAgPSBGVERGX0dFVF9EQVRBX0JVRkZFUihmcmFtZUxlbmd0aCk7CisgICAgbWVtY3B5KGluZGljYXRpb24tPmZyYW1lLCBmcmFtZSwgZnJhbWVMZW5ndGgpOworCisgICAgRlRERl9SQ1ZfTVNHKChGVERGX01zZ0J1ZmZlciAqKSBpbmRpY2F0aW9uKTsKK30KKyNlbmRpZiAvKiAhRlRERl9QSFlfQVBJICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvcG93ZXIuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9wb3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5M2NmOTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvcG93ZXIuYwpAQCAtMCwwICsxLDM3MSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIHBvd2VyLmMKKyAqCisgKiBAYnJpZWYgRlRERiBwb3dlciBvbi9vZmYgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGZ0ZGYuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgInJlZ21hcC5oIgorCitzdGF0aWMgRlRERl9QU2VjIEZUREZfbG93UG93ZXJDbG9ja0N5Y2xlICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworc3RhdGljIEZUREZfUFNlYyBGVERGX3dha2VVcExhdGVuY3kgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKy8qIFByZS1jYWxjdWxhdGVkIHZhbHVlIGZvciBvcHRpbWl6YXRpb24uICovCitzdGF0aWMgRlRERl9VU2VjIEZUREZfbG93UG93ZXJDbG9ja0N5Y2xlVVNlYyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKy8qIFByZS1jYWxjdWxhdGVkIHZhbHVlIGZvciBvcHRpbWl6YXRpb24uICovCitzdGF0aWMgRlRERl9VU2VjIEZUREZfd2FrZVVwTGF0ZW5jeVVTZWMgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworLyogUHJlLWNhbGN1bGF0ZWQgdmFsdWUgZm9yIG9wdGltaXphdGlvbi4gKi8KK3N0YXRpYyBGVERGX05yTG93UG93ZXJDbG9ja0N5Y2xlcyBGVERGX2NzbWFjYVdha2V1cFRociBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKworI2lmICFkZWZpbmVkKEZUREZfTk9fQ1NMKSB8fCAhZGVmaW5lZChGVERGX05PX1RTQ0gpCitzdGF0aWMgdWludDMyX3QgIEZUREZfZXZlbnRDdXJyVmFsICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworc3RhdGljIHVpbnQzMl90ICBGVERGX3RpbWVTdGFtcEN1cnJWYWwgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKK3N0YXRpYyB1aW50MzJfdCAgRlRERl90aW1lU3RhbXBDdXJyUGhhc2VWYWwgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CisjZW5kaWYKKyNpZm5kZWYgRlRERl9OT19DU0wKK0ZUREZfQm9vbGVhbiAgICAgRlRERl93YWtlVXBFbmFibGVMZSAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKyNpZm5kZWYgRlRERl9OT19UU0NICitGVERGX0Jvb2xlYW4gICAgIEZUREZfd2FrZVVwRW5hYmxlVHNjaDsKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKwordm9pZCBGVERGX3NldFNsZWVwQXR0cmlidXRlcyhGVERGX1BTZWMgICAgICAgICAgICAgICAgICBsb3dQb3dlckNsb2NrQ3ljbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTnJMb3dQb3dlckNsb2NrQ3ljbGVzIHdha2VVcExhdGVuY3kpCit7CisgICAgRlRERl9sb3dQb3dlckNsb2NrQ3ljbGUgPSBsb3dQb3dlckNsb2NrQ3ljbGU7CisgICAgRlRERl93YWtlVXBMYXRlbmN5ICAgICAgPSAodWludDY0X3Qpd2FrZVVwTGF0ZW5jeSAqIGxvd1Bvd2VyQ2xvY2tDeWNsZTsKKyAgICBGVERGX2xvd1Bvd2VyQ2xvY2tDeWNsZVVTZWMgPSBGVERGX2xvd1Bvd2VyQ2xvY2tDeWNsZSAvIDEwMDAwMDA7CisgICAgRlRERl93YWtlVXBMYXRlbmN5VVNlYyA9IEZUREZfd2FrZVVwTGF0ZW5jeSAvIDEwMDAwMDA7CisgICAgRlRERl9jc21hY2FXYWtldXBUaHIgPSAoRlRERl9Ockxvd1Bvd2VyQ2xvY2tDeWNsZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChGVERGX1BTZWMpIDB4ZmZmZmZmZmYgKiAxMDAwMDAwIC0gRlRERl93YWtlVXBMYXRlbmN5KSAvIEZUREZfbG93UG93ZXJDbG9ja0N5Y2xlKTsKK30KKworRlRERl9VU2VjIEZUREZfY2FuU2xlZXAodm9pZCkKK3sKKyNpZmRlZiBGVERGX1BIWV9BUEkKKworICAgIGlmIChGVERGX3R4SW5Qcm9ncmVzcyB8fCBGVERGX3BpYi5rZWVwUGh5RW5hYmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworI2Vsc2UKKyNpZiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRgorCisgICAgaWYgKEZUREZfcGliLmtlZXBQaHlFbmFibGVkKQorI2Vsc2UKKyAgICBpZiAoRlRERl9yZXFDdXJyZW50IHx8IEZUREZfcGliLmtlZXBQaHlFbmFibGVkKQorI2VuZGlmIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyNlbmRpZgorI2lmIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGCisKKyAgICBpZiAoRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TRUNCVVNZKSA9PSAxKQorI2Vsc2UgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKyAgICBpZiAoRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVApID09IDAgfHwKKyAgICAgICAgRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TRUNCVVNZKSA9PSAxKQorI2VuZGlmIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyNpZm5kZWYgRlRERl9OT19DU0wKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQpCisgICAgeworI2lmIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGCisKKyAgICAgICAgLyogQWJvcnQgc2xlZXAgd2hlbiBMTUFDIGlzIGJ1c3kuICovCisgICAgICAgIGlmIChGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworI2VuZGlmIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisKKyAgICAgICAgaWYgKEZUREZfdHhJblByb2dyZXNzID09IEZUREZfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfVGltZSBjdXJUaW1lID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworICAgICAgICAgICAgRlRERl9UaW1lIGRlbHRhICAgPSBjdXJUaW1lIC0gRlRERl9zdGFydENzbFNhbXBsZVRpbWU7CisKKyAgICAgICAgICAgIC8vIEEgZGVsdGEgbGFyZ2VyIHRoYW4gMHg4MDAwMDAwMCBpcyBhc3N1bWVkIHRvIGJlIG5lZ2F0aXZlCisgICAgICAgICAgICAvLyBEbyBub3QgcmV0dXJuIGEgc2xlZXAgdmFsdWUgd2hlbiBDU0wgc2FtcGxlIHRpbWUgaXMgaW4gdGhlIHBhc3QKKyAgICAgICAgICAgIGlmIChkZWx0YSA8IDB4ODAwMDAwMDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAoRlRERl9zdGFydENzbFNhbXBsZVRpbWUgLSBjdXJUaW1lKSAqIDE2OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworCisjaWZuZGVmIEZUREZfTk9fVFNDSAorCisgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgIHsKKyNpZiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRgorCisgICAgICAgIC8qIEFib3J0IHNsZWVwIHdoZW4gTE1BQyBpcyBidXN5LiAqLworICAgICAgICBpZiAoRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVApID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyNlbmRpZgorICAgICAgICBGVERGX1RpbWU2NCBjdXJUaW1lNjQgPSBGVERGX2dldEN1clRpbWU2NCgpOworICAgICAgICBGVERGX1RpbWU2NCBkZWx0YSAgICAgPSBjdXJUaW1lNjQgLSBGVERGX3RzY2hTbG90VGltZTsKKworICAgICAgICAvLyBBIGRlbHRhIGxhcmdlciB0aGFuIDB4ODAwMDAwMDAwMDAwMDAwMCBpcyBhc3N1bWVkIHRvIGJlIG5lZ2F0aXZlCisgICAgICAgIC8vIERvIG5vdCByZXR1cm4gYSBzbGVlcCB2YWx1ZSB3aGVuIFRTQ0ggc2xvdCB0aW1lIGlzIGluIHRoZSBwYXN0CisgICAgICAgIGlmIChkZWx0YSA8IDB4ODAwMDAwMDAwMDAwMDAwMFVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBGVERGX1VTZWMgICAgc2xlZXBUaW1lID0gKEZUREZfVVNlYykoRlRERl90c2NoU2xvdFRpbWUgLSBjdXJUaW1lNjQpOworCisgICAgICAgIEZUREZfVGltZSAgICBwZW5kTGlzdFRpbWU7CisgICAgICAgIEZUREZfVGltZSAgICBjdXJUaW1lID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworICAgICAgICBGVERGX0Jvb2xlYW4gcGVuZGluZyA9IEZUREZfZ2V0VHhQZW5kaW5nVGltZXJIZWFkKCZwZW5kTGlzdFRpbWUpOworCisgICAgICAgIGlmIChwZW5kaW5nKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBBIGRlbHRhIGxhcmdlciB0aGFuIDB4ODAwMDAwMDAgaXMgYXNzdW1lZCB0byBiZSBuZWdhdGl2ZQorICAgICAgICAgICAgLy8gRG8gbm90IHJldHVybiBhIHNsZWVwIHZhbHVlIHdoZW4gcGVuZGluZyB0aW1lciB0aW1lIGlzIGluIHRoZSBwYXN0CisgICAgICAgICAgICBpZiAoY3VyVGltZSAtIHBlbmRMaXN0VGltZSA8IDB4ODAwMDAwMDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEZUREZfVVNlYyB0bXBTbGVlcFRpbWUgPSAoRlRERl9VU2VjKShwZW5kTGlzdFRpbWUgLSBjdXJUaW1lKTsKKworICAgICAgICAgICAgaWYgKHRtcFNsZWVwVGltZSA8IHNsZWVwVGltZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzbGVlcFRpbWUgPSB0bXBTbGVlcFRpbWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2xlZXBUaW1lIDwgRlRERl9UU0NIX01BWF9QUk9DRVNTX1JFUVVFU1RfVElNRSArIEZUREZfVFNDSF9NQVhfU0NIRURVTEVfVElNRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKHNsZWVwVGltZSAtIChGVERGX1RTQ0hfTUFYX1BST0NFU1NfUkVRVUVTVF9USU1FICsgRlRERl9UU0NIX01BWF9TQ0hFRFVMRV9USU1FKSkgKiAxNjsKKyAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKworI2lmbmRlZiBGVERGX0xJVEUKKyAgICAvLyBOb3JtYWwgbW9kZQorICAgIGludCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IEZUREZfTlJfT0ZfUkVRX0JVRkZFUlM7IG4rKykKKyAgICB7CisgICAgICAgIGlmIChGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5hZGRyTW9kZSAhPSBGVERGX05PX0FERFJFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisjZW5kaWYgLyogIUZUREZfTElURSAqLworI2lmIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGCisgICAgcmV0dXJuIEZUREZfc2RiR2V0U2xlZXBUaW1lKCk7CisjZWxzZSAvKiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRiAqLworICAgIHJldHVybiAweGZmZmZmZmZmOworI2VuZGlmIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisKK30KKworRlRERl9Cb29sZWFuIEZUREZfcHJlcGFyZUZvclNsZWVwKEZUREZfVVNlYyBzbGVlcFRpbWUpCit7CisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgfHwgRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgeworICAgICAgICBpZiAoc2xlZXBUaW1lIDwgMiAqIEZUREZfbG93UG93ZXJDbG9ja0N5Y2xlVVNlYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZUREZfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb3JyZWN0IHNsZWVwdGltZSB3aXRoIHRoZSBpbmFjY3VyYWN5IG9mIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgc2xlZXBUaW1lIC09IDIgKiBGVERGX2xvd1Bvd2VyQ2xvY2tDeWNsZVVTZWM7CisKKyAgICAgICAgaWYgKHNsZWVwVGltZSA8IEZUREZfd2FrZVVwTGF0ZW5jeVVTZWMgKyA1MDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGVERGX0ZBTFNFOworICAgICAgICB9CisgICAgfQorCisjZW5kaWYKKworICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKworI2lmICFkZWZpbmVkKEZUREZfTk9fQ1NMKSB8fCAhZGVmaW5lZChGVERGX05PX1RTQ0gpCisgICAgLy8gQ2FwdHVyZSB0aGUgY3VycmVudCB2YWx1ZSBvZiBib3RoIHRoZSBldmVudCBnZW5lcmF0b3IgYW5kIHRoZSB0aW1lc3RhbXAgZ2VuZXJhdG9yCisgICAgLy8gYW5kIHBoYXNlIG9uIHRoZSByaXNpbmcgZWRnZSBvZiBMUF9DTEsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTCwgMSk7CisKKyNlbmRpZgorICAgIC8vIFNhdmUgY3VycmVudCBMTUFDIFBNIGNvdW50ZXJzCisgICAgRlRERl9sbWFjQ291bnRlcnMuZmNzRXJyb3JDbnQgKz0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UKTsKKyAgICBGVERGX2xtYWNDb3VudGVycy50eFN0ZEFja0NudCArPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ1RYU1REQUNLRlJNQ05UKTsKKyAgICBGVERGX2xtYWNDb3VudGVycy5yeFN0ZEFja0NudCArPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ1JYU1REQUNLRlJNT0tDTlQpOworCisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqZ2V0R2VuZXJhdG9yVmFsRSA9IEZUREZfR0VUX0ZJRUxEX0FERFIoT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRSk7CisKKyAgICAvLyBXYWl0IHVudGlsIGRhdGEgaXMgcmVhZHkKKyAgICB3aGlsZSAoKCpnZXRHZW5lcmF0b3JWYWxFICYgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FKSA9PSAwKQorICAgIHsgfQorCisgICAgRlRERl9ldmVudEN1cnJWYWwgICAgICAgICAgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCk7CisgICAgRlRERl90aW1lU3RhbXBDdXJyVmFsICAgICAgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJWQUwpOworICAgIEZUREZfdGltZVN0YW1wQ3VyclBoYXNlVmFsID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwpOworCisjaWZkZWYgU0lNVUxBVE9SCisgICAgKmdldEdlbmVyYXRvclZhbEUgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRTsKKyNlbHNlCisgICAgKmdldEdlbmVyYXRvclZhbEUgID0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FOworI2VuZGlmCisgICAgdWludDY0X3QgbmV4dFdha2VVcFRocjsKKyNpZiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRgorICAgIHVpbnQ2NF90IHBpY29TbGVlcFRpbWUgPSAodWludDY0X3Qpc2xlZXBUaW1lICogMTAwMDAwMDsKKyAgICBuZXh0V2FrZVVwVGhyID0gKHBpY29TbGVlcFRpbWUgLSBGVERGX3dha2VVcExhdGVuY3kpIC8gRlRERl9sb3dQb3dlckNsb2NrQ3ljbGU7CisjZWxzZSAvKiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRiAqLworCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCB8fCBGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IHBpY29TbGVlcFRpbWUgPSAodWludDY0X3Qpc2xlZXBUaW1lICogMTAwMDAwMDsKKyAgICAgICAgbmV4dFdha2VVcFRociA9IChwaWNvU2xlZXBUaW1lIC0gRlRERl93YWtlVXBMYXRlbmN5KSAvIEZUREZfbG93UG93ZXJDbG9ja0N5Y2xlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuZXh0V2FrZVVwVGhyID0gRlRERl9jc21hY2FXYWtldXBUaHI7CisgICAgfQorCisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKworICAgIC8vIFNldCB3YWtlIHVwIHRocmVzaG9sZAorICAgIHVpbnQzMl90IHdha2VVcEludFRociA9IEZUREZfZXZlbnRDdXJyVmFsICsgbmV4dFdha2VVcFRocjsKKyAgICAvLyBOb3RlIHRoYXQgZm9yIElDIHJldnMgb3RoZXIgdGhhbiBBIHRoZSBzaXplIG9mIFdBS0VVUElOVFRIUiBpcyAyNSBiaXRzLgorICAgIEZUREZfU0VUX0ZJRUxEKEFMV0FZU19PTl9SRUdNQVBfV0FLRVVQSU5UVEhSLCB3YWtlVXBJbnRUaHIpOworICAgIEZUREZfU0VUX0ZJRUxEKEFMV0FZU19PTl9SRUdNQVBfV0FLRVVQRU5BQkxFLCAxKTsKKyNlbmRpZgorICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisKKyAgICByZXR1cm4gRlRERl9UUlVFOworfQorCit2b2lkIEZUREZfd2FrZVVwKHZvaWQpCit7CisjaWZuZGVmIEZUREZfUEhZX0FQSQorICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKworICAgIEZUREZfU0VUX0ZJRUxEKEFMV0FZU19PTl9SRUdNQVBfV0FLRVVQRU5BQkxFLCAwKTsKKworI2lmICFkZWZpbmVkKEZUREZfTk9fQ1NMKSB8fCAhZGVmaW5lZChGVERGX05PX1RTQ0gpCisgICAgLy8gQ2FwdHVyZSB0aGUgY3VycmVudCB2YWx1ZSBvZiBib3RoIHRoZSBldmVudCBnZW5lcmF0b3IgYW5kIHRoZSB0aW1lc3RhbXAgZ2VuZXJhdG9yCisgICAgLy8gYW5kIHBoYXNlIG9uIHRoZSByaXNpbmcgZWRnZSBvZiBMUF9DTEsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTCwgMSk7CisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqZ2V0R2VuZXJhdG9yVmFsRSA9IEZUREZfR0VUX0ZJRUxEX0FERFIoT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRSk7CisKKyAgICAvLyBXYWl0IHVudGlsIGRhdGEgaXMgcmVhZHkKKyAgICB3aGlsZSAoKCpnZXRHZW5lcmF0b3JWYWxFICYgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FKSA9PSAwKQorICAgIHsgfQorCisgICAgdWludDMyX3QgZXZlbnROZXdDdXJyVmFsID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwpOworCisjaWZkZWYgU0lNVUxBVE9SCisgICAgKmdldEdlbmVyYXRvclZhbEUgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRTsKKyNlbHNlCisgICAgKmdldEdlbmVyYXRvclZhbEUgID0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FOworI2VuZGlmCisKKyAgICAvLyBCYWNrd2FyZCBjYWxjdWxhdGUgdGhlIHRpbWUgc2xlcHQKKyAgICAvL0ZUREZfUFNlYyBzbGVlcFRpbWUgPSAoICh1aW50NjRfdCkoIGV2ZW50TmV3Q3VyclZhbCAtIEZUREZfZXZlbnRDdXJyVmFsICkgKiBGVERGX2xvd1Bvd2VyQ2xvY2tDeWNsZSApICsgRlRERl93YWtlVXBMYXRlbmN5OworCisgICAgRlRERl9QU2VjIHNsZWVwVGltZTsKKworICAgIGlmIChldmVudE5ld0N1cnJWYWwgPj0gRlRERl9ldmVudEN1cnJWYWwpICAgLyogQ2hlY2sgZm9yIHdyYXBzLiAqLworICAgIHsKKyAgICAgICAgc2xlZXBUaW1lID0gKGV2ZW50TmV3Q3VyclZhbCAtIEZUREZfZXZlbnRDdXJyVmFsKSAqIEZUREZfbG93UG93ZXJDbG9ja0N5Y2xlICArCisgICAgICAgICAgICAgICAgICAgIEZUREZfd2FrZVVwTGF0ZW5jeTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2xlZXBUaW1lID0gKGV2ZW50TmV3Q3VyclZhbCArCisgICAgICAgICAgICAgICAgICAgICAoTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAtIEZUREZfZXZlbnRDdXJyVmFsKSkgKgorICAgICAgICAgICAgICAgICAgICBGVERGX2xvd1Bvd2VyQ2xvY2tDeWNsZSAgKyBGVERGX3dha2VVcExhdGVuY3k7CisgICAgfQorCisgICAgLy8gQ2FsY3VsYXRlIHN5bmMgdmFsdWVzCisgICAgdWludDY0X3QgbmV3U3luY1ZhbHMgPSAoKHVpbnQ2NF90KUZUREZfdGltZVN0YW1wQ3VyclZhbCA8PCA4KSB8IChGVERGX3RpbWVTdGFtcEN1cnJQaGFzZVZhbCAmIDB4ZmYpOworICAgIG5ld1N5bmNWYWxzICs9IChzbGVlcFRpbWUgLyA2MjUwMCkgKyAxOworCisgICAgdWludDMyX3Qgc3luY1RpbWVzdGFtcFRociAgICAgID0gRlRERl9ldmVudEN1cnJWYWwgKyAoc2xlZXBUaW1lIC8gRlRERl9sb3dQb3dlckNsb2NrQ3ljbGUpOworICAgIHVpbnQzMl90IHN5bmNUaW1lc3RhbXBWYWwgICAgICA9IChuZXdTeW5jVmFscyAmIDB4ZmZmZmZmZmYwMCkgPj4gODsKKyAgICB1aW50MzJfdCBzeW5jVGltZXN0YW1wUGhhc2VWYWwgPSAobmV3U3luY1ZhbHMgJiAweGZmKTsKKworICAgIC8vIFNldCB2YWx1ZXMKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIsIHN5bmNUaW1lc3RhbXBUaHIpOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFZBTCwgc3luY1RpbWVzdGFtcFZhbCk7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwsIHN5bmNUaW1lc3RhbXBQaGFzZVZhbCk7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QRU5BLCAxKTsKKyNlbmRpZgorCisgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKworI2lmbmRlZiBGVERGX05PX0NTTAorICAgIEZUREZfd2FrZVVwRW5hYmxlTGUgICA9IEZUREZfcGliLmxlRW5hYmxlZDsKKyAgICBGVERGX3BpYi5sZUVuYWJsZWQgICAgPSBGVERGX0ZBTFNFOworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisKKyNpZm5kZWYgRlRERl9OT19UU0NICisgICAgRlRERl93YWtlVXBFbmFibGVUc2NoID0gRlRERl9waWIudHNjaEVuYWJsZWQ7CisgICAgRlRERl9waWIudHNjaEVuYWJsZWQgID0gRlRERl9GQUxTRTsKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKyNlbmRpZiAvKiAhIEZUREZfUEhZX0FQSSAqLworICAgIC8vIEluaXQgTE1BQworICAgIEZUREZfaW5pdExtYWMoKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9yZWdtYXAuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9yZWdtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ1MDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL3JlZ21hcC5oCkBAIC0wLDAgKzEsODYwOSBAQAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENyZWF0ZWQgYXQgMjUuMTEuMjAxNCwgMTI6NDIgYnkgbWtyZWdtYXAKKy8vICAgcmVsZWFzZTogdjJfNDIgKGJ1aWxkIGRhdGUgT2N0ICA5IDIwMTQpCisvLyAgIG9wdGlvbnM6ICAtaSBmdGRmX3NyYy5yZ20gLWhkciAtYWxsCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2lmbmRlZiBfZnRkZgorI2RlZmluZSBfZnRkZgorCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9yZXRlbnRpb25fcmFtX3R4X2ZpZm8KKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gICAgMHg0MDA4MDAwMAorI2RlZmluZSBTSVpFX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gICAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gICAgMHhmZmZmZmZmZgorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfRklGT19OVU1fMUQgICAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk9fSU5UVkxfMUQgMHg4MAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfRklGT19OVU1fMkQgICAweDIwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX0lOVFZMXzJEIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfRklGT19OVU1fMUQgICAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk9fSU5UVkxfMUQgMHg4MAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfRklGT19OVU1fMkQgICAweDIwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX0lOVFZMXzJEIDB4NAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fdHhfZmlmbworICoKKyAqIFRyYW5zbWl0IGZpZm8gYnVmZmVyLCBjb250YWlucyAzMiBhZGRyZXNzZXMgcGVyIGVudHJ5ICgzMmIgeCAzMmEgPSAxMjhCKS4gVGhlcmUgYXJlIDQgZW50cmllcyBzdXBwb3J0ZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fVFhfRklGTyAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3JldGVudGlvbl9yYW1fdHhfbWV0YV9kYXRhXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAgIDB4NDAwODAyMDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wICAweDU3ZmZmZmZmCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMF9OVU0gICAgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMF9JTlRWTCAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIX05VTSAgICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIX0lOVFZMICAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1BIWUFUVFJfTlVNICAgICAgICAgICAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1BIWUFUVFJfSU5UVkwgICAgICAgICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEVfTlVNICAgICAgICAgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEVfSU5UVkwgICAgICAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBX0VOQV9OVU0gICAgICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBX0VOQV9JTlRWTCAgICAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0FDS1JFUVVFU1RfTlVNICAgICAgICAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0FDS1JFUVVFU1RfSU5UVkwgICAgICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkFfTlVNICAgICAgICAgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkFfSU5UVkwgICAgICAgMHgxMAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fZnJhbWVfbGVuZ3RoCisgKgorICogRnJhbWUgbGVuZ3RoCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRV9MRU5HVEggIDB4N2YKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCA3CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fcGh5QXR0cgorICoKKyAqIER1cmluZyB0aGUgUlgtT04gcGhhc2UsIHRoZSBjb250cm9sIHJlZ2lzdGVyIHBoeVJ4QXR0clsxNl0gc291cmNlcyB0aGUgUEhZQVRUUiBvdXRwdXQgc2lnbmFsIHRvIHRoZSBEUEhZLgorICogVGhpcyBpcyBhbHNvIGFwcGxpY2FibGUgZHVyaW5nIGEgQ0NBIG9yIEVuZXJneSBkZXRlY3Qgc2NhbiBwaGFzZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUiAgICAgICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1BIWUFUVFIgICAgICAgMHg3ZmZmODAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1BIWUFUVFIgICAgICAgNworI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX1BIWUFUVFIgICAgICAxNgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9yZXRlbnRpb25fcmFtX2ZyYW1ldHlwZQorICoKKyAqIERhdGEvQ21kL0FjayBldGMuIEFsc28gaW5kaWNhdGUgd2FrZXVwIGZyYW1lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSAgICAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEUgICAgIDB4MzgwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFICAgICAyMworI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSAgICAzCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX0NzbWFDYV9lbmEKKyAqCisgKiBJbmRpY2F0ZXMgd2hldGhlciBhIENTTUEtQ0EgaXMgcmVxdWlyZWQgZm9yIHRoZSB0cmFuc21pc3Npb24gb2YgdGhpcyBwYWNrZXQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQV9FTkEgICAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BICAgIDB4NDAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBX0VOQSAgICAyNgorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQV9FTkEgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX0Fja1JlcXVlc3QKKyAqCisgKiBJbmRpY2F0ZXMgd2hldGhlciBhbiBhY2tub3dsZWRnZSBpcyBleHBlY3RlZCBmcm9tIHRoZSByZWNpcGllbnQgb2YgdGhpcyBwYWNrZXQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS1JFUVVFU1QgICAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tSRVFVRVNUICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS1JFUVVFU1QgICAgMjgKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tSRVFVRVNUICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9DUkMxNl9lbmEKKyAqCisgKiBJbmRpY2F0ZXMgd2hldGhlciBDUkMxNiBpbnNlcnRpb24gbXVzdCBiZSBlbmFibGVkIG9yIG5vdC4KKyAqICAwIDogTm8gaGFyZHdhcmUgaW5zZXJ0ZWQgQ1JDMTYKKyAqICAxIDogSGFyZHdhcmUgaW5zZXJ0cyBDUkMxNgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkEgICAgIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMAorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRU5BICAgICAweDQwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkEgICAgIDMwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRU5BICAgIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9yZXRlbnRpb25fcmFtX3R4X21ldGFfZGF0YV8xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8xICAweDQwMDgwMjA0CisjZGVmaW5lIFNJWkVfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMSAgMHhmZgorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzFfTlVNICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzFfSU5UVkwgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOX05VTSAgICAgICAgICAgICAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOX0lOVFZMICAgICAgICAgICAweDEwCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9tYWNTTgorICoKKyAqIFNlcXVlbmNlIE51bWJlciBvZiB0aGlzIHBhY2tldC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04gIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04gIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04gOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3JldGVudGlvbl9yYW1fdHhfcmV0dXJuX3N0YXR1c18wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMCAgMHg0MDA4MDI0MAorI2RlZmluZSBTSVpFX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMCAgMHhmZmZmZmZmZgorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18wX05VTSAgICAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMF9JTlRWTCAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhUSU1FU1RBTVBfTlVNICAgICAgICAgICAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYVElNRVNUQU1QX0lOVFZMICAgICAgICAgMHgxMAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fVHhUaW1lc3RhbXAKKyAqCisgKiBUcmFuc21pdCBUaW1lc3RhbXAKKyAqIFRoZSBUaW1lU3RhbXAgb2YgdGhlIHRyYW5zbWl0dGVkIHBhY2tldC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fVFhUSU1FU1RBTVAgIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYVElNRVNUQU1QICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9UWFRJTUVTVEFNUCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYVElNRVNUQU1QIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfcmV0ZW50aW9uX3JhbV90eF9yZXR1cm5fc3RhdHVzXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xICAweDQwMDgwMjQ0CisjZGVmaW5lIFNJWkVfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xICAweDFmCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzFfTlVNICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xX0lOVFZMICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9BQ0tGQUlMX05VTSAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQUNLRkFJTF9JTlRWTCAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMX05VTSAgICAgICAgICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBRkFJTF9JTlRWTCAgICAgICAgICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FOUlJFVFJJRVNfTlVNICAgICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBTlJSRVRSSUVTX0lOVFZMICAgICAweDEwCisKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fQWNrRmFpbAorICoKKyAqIEFja25vd2xlZGdlbWVudCBzdGF0dXMKKyAqICAwIDogU1VDQ0VTUworICogIDEgOiBGQUlMCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS0ZBSUwgICAgICAgICAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQUNLRkFJTCAgICAgICAgICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS0ZBSUwgICAgICAgICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS0ZBSUwgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX0NzbWFDYUZhaWwKKyAqCisgKiBDU01BLUNBIHN0YXR1cworICogIDAgOiBTVUNDRVNTCisgKiAgMSA6IEZBSUwKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBRkFJTCAgICAgICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMICAgICAgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBRkFJTCAgICAgICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBRkFJTCAgICAgIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9Dc21hQ2FOclJldHJpZXMKKyAqCisgKiBOdW1iZXIgb2YgQ1NNQS1DQSByZXRyaWVzCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQU5SUkVUUklFUyAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBTlJSRVRSSUVTICAweDFjCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FOUlJFVFJJRVMgIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FOUlJFVFJJRVMgMworCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3JldGVudGlvbl9yYW1fcnhfbWV0YV8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMCAgICAweDQwMDgwMjgwCisjZGVmaW5lIFNJWkVfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8wICAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzAgICAgMHhmZmZmZmZmZgorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8wX05VTSAgICAgIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8wX0lOVFZMICAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUF9OVU0gICAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUF9JTlRWTCAweDEwCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9yeF90aW1lc3RhbXAKKyAqCisgKiBUaW1lc3RhbXAgdGFrZW4gd2hlbiBmcmFtZSB3YXMgcmVjZWl2ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8wCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3JldGVudGlvbl9yYW1fcnhfbWV0YV8xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMSAgICAgICAgICAgICAweDQwMDgwMjg0CisjZGVmaW5lIFNJWkVfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xICAgICAgICAgICAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEgICAgICAgICAgICAgMHhmZmZkCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzFfTlVNICAgICAgICAgICAgICAgMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzFfSU5UVkwgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRVJST1JfTlVNICAgICAgICAgICAgIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRVJST1JfSU5UVkwgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVFlQRV9FUlJPUl9OVU0gICAgICAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVFlQRV9FUlJPUl9JTlRWTCAgICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SRVNfRlJNX1ZFUlNJT05fRVJST1JfTlVNICAgMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SRVNfRlJNX1ZFUlNJT05fRVJST1JfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fRFBBTklEX0VSUk9SX05VTSAgICAgICAgICAgIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fRFBBTklEX0VSUk9SX0lOVFZMICAgICAgICAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0RBRERSX0VSUk9SX05VTSAgICAgICAgICAgICAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0RBRERSX0VSUk9SX0lOVFZMICAgICAgICAgICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9TUEFOSURfRVJST1JfTlVNICAgICAgICAgICAgMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9TUEFOSURfRVJST1JfSU5UVkwgICAgICAgICAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fSVNQQU5JRF9DT09SRF9FUlJPUl9OVU0gICAgIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fSVNQQU5JRF9DT09SRF9FUlJPUl9JTlRWTCAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SX05VTSAgICAgICAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SX0lOVFZMICAgICAweDEwCisKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fY3JjMTZfZXJyb3IKKyAqCisgKiBDUkMgZXJyb3IsIGFwcGxpY2FibGUgZm9yIHRyYW5zcGFyZW50IG1vZGUgb25seQorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FUlJPUiAgICAgICAgICAgIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VSUk9SICAgICAgICAgICAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FUlJPUiAgICAgICAgICAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FUlJPUiAgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9yZXNfZnJtX3R5cGVfZXJyb3IKKyAqCisgKiBOb3Qgc3VwcG9ydGVkIGZyYW1lIHR5cGUgZXJyb3IsIGFwcGxpY2FibGUgd2hlbiBmcmFtZSBpcyBub3QgZGlzY2FyZGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVFlQRV9FUlJPUiAgICAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SICAgICAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVFlQRV9FUlJPUiAgICAgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVFlQRV9FUlJPUiAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX3Jlc19mcm1fdmVyc2lvbl9lcnJvcgorICoKKyAqIE5vdCBzdXBwb3J0ZWQgZnJhbWUgdmVyc2lvbiBlcnJvciwgYXBwbGljYWJsZSB3aGVuIGZyYW1lIGlzIG5vdCBkaXNjYXJkZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVkVSU0lPTl9FUlJPUiAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9WRVJTSU9OX0VSUk9SICAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVkVSU0lPTl9FUlJPUiAgMworI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVkVSU0lPTl9FUlJPUiAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX2RwYW5pZF9lcnJvcgorICoKKyAqIEQgUEFOIElEIGVycm9yLCBhcHBsaWNhYmxlIHdoZW4gZnJhbWUgaXMgbm90IGRpc2NhcmRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9EUEFOSURfRVJST1IgICAgICAgICAgIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0RQQU5JRF9FUlJPUiAgICAgICAgICAgMHgxMAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRFBBTklEX0VSUk9SICAgICAgICAgICA0CisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fRFBBTklEX0VSUk9SICAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fZGFkZHJfZXJyb3IKKyAqCisgKiBEIEFkZHJlc3MgZXJyb3IsIGFwcGxpY2FibGUgd2hlbiBmcmFtZSBpcyBub3QgZGlzY2FyZGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0RBRERSX0VSUk9SICAgICAgICAgICAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fREFERFJfRVJST1IgICAgICAgICAgICAweDIwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9EQUREUl9FUlJPUiAgICAgICAgICAgIDUKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9EQUREUl9FUlJPUiAgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9zcGFuaWRfZXJyb3IKKyAqCisgKiBQQU4gSUQgZXJyb3IsIGFwcGxpY2FibGUgd2hlbiBmcmFtZSBpcyBub3QgZGlzY2FyZGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX1NQQU5JRF9FUlJPUiAgICAgICAgICAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fU1BBTklEX0VSUk9SICAgICAgICAgICAweDQwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9TUEFOSURfRVJST1IgICAgICAgICAgIDYKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9TUEFOSURfRVJST1IgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9pc3BhbmlkX2Nvb3JkX2Vycm9yCisgKgorICogUmVjZWl2ZWQgZnJhbWUgbm90IGZvciBQQU4gY29vcmRpbmF0b3IsIGFwcGxpY2FibGUgd2hlbiBmcmFtZSBpcyBub3QgZGlzY2FyZGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0lTUEFOSURfQ09PUkRfRVJST1IgICAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fSVNQQU5JRF9DT09SRF9FUlJPUiAgICAweDgwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9JU1BBTklEX0NPT1JEX0VSUk9SICAgIDcKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9JU1BBTklEX0NPT1JEX0VSUk9SICAgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9yZXRlbnRpb25fcmFtX3F1YWxpdHlfaW5kaWNhdG9yCisgKgorICogTGluayBRdWFsaXR5IEluZGljYXRpb24KKyAqCisgKiAjICRzb2Z0d2FyZV9zY3JhdGNoQHJldGVudGlvbl9yYW0KKyAqICMgVFggcmFtIG5vdCB1c2VkIGJ5IGhhcmR3YXJlLCBjYW4gYmUgdXNlZCBieSBzb2Z0d2FyZSBhcyBzY3JhdGNoIHJhbSB3aXRoIHJldGVudGlvbi4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fUVVBTElUWV9JTkRJQ0FUT1IgICAgICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9RVUFMSVRZX0lORElDQVRPUiAgICAgIDB4ZmYwMAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUVVBTElUWV9JTkRJQ0FUT1IgICAgICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fUVVBTElUWV9JTkRJQ0FUT1IgICAgIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9yeF9yYW1fcnhfZmlmbworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfUlhfUkFNX1JYX0ZJRk8gICAgMHg0MDA4ODAwMAorI2RlZmluZSBTSVpFX1JfRlRERl9SWF9SQU1fUlhfRklGTyAgIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX1JYX1JBTV9SWF9GSUZPICAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgRlRERl9SWF9SQU1fUlhfRklGT19OVU1fMUQgICAweDgKKyNkZWZpbmUgRlRERl9SWF9SQU1fUlhfRklGT19JTlRWTF8xRCAweDgwCisjZGVmaW5lIEZUREZfUlhfUkFNX1JYX0ZJRk9fTlVNXzJEICAgMHgyMAorI2RlZmluZSBGVERGX1JYX1JBTV9SWF9GSUZPX0lOVFZMXzJEIDB4NAorI2RlZmluZSBGVERGX1JYX1JBTV9SWF9GSUZPX05VTV8xRCAgIDB4OAorI2RlZmluZSBGVERGX1JYX1JBTV9SWF9GSUZPX0lOVFZMXzFEIDB4ODAKKyNkZWZpbmUgRlRERl9SWF9SQU1fUlhfRklGT19OVU1fMkQgICAweDIwCisjZGVmaW5lIEZUREZfUlhfUkFNX1JYX0ZJRk9fSU5UVkxfMkQgMHg0CisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcnhfcmFtX3J4X2ZpZm8KKyAqCisgKiBSZWNlaXZlIGZpZm8gcmFtLCBjb250YWlucyAzMiBhZGRyZXNzZXMgcGVyIGVudHJ5ICgzMmIgeCAzMmEgPSAxMjhCKS4gVGhlcmUgYXJlIDggZW50cmllcyBzdXBwb3J0ZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SWF9SQU1fUlhfRklGTyAgSU5EX1JfRlRERl9SWF9SQU1fUlhfRklGTworI2RlZmluZSBNU0tfRl9GVERGX1JYX1JBTV9SWF9GSUZPICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfUlhfUkFNX1JYX0ZJRk8gIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfUlhfUkFNX1JYX0ZJRk8gMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1JlbF9OYW1lCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FICAweDQwMDkwMDAwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUUgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRSAgMHhmZmZmZmZmZgorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUVfTlVNICAgIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUVfSU5UVkwgIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUVfTlVNICAgIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUVfSU5UVkwgIDB4NAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfUmVsX05hbWUKKyAqCisgKiBOYW1lIG9mIHRoZSByZWxlYXNlCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUUKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9CdWlsZFRpbWUKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FICAweDQwMDkwMDEwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FICAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUVfTlVNICAgIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FX0lOVFZMICAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRV9OVU0gICAgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUVfSU5UVkwgIDB4NAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfQnVpbGRUaW1lCisgKgorICogQnVpbGQgdGltZSBvZiBkZXZpY2UKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUUgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRSAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfZ2xvYl9jb250cm9sXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHhmZjAwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDZmZjBlCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8wICAweDQwMDkwMDIwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMCAgMHg2ZmYwZQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0lzUEFOQ29vcmRpbmF0b3IKKyAqCisgKiBFbmFibGUvZGlzYWJsZSByZWNlaXZlciBjaGVjayBvbiBhZGRyZXNzCisgKiBmaWVsZHMgKDA9ZW5hYmxlZCwgMT1kaXNhYmxlZCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfSVNQQU5DT09SRElOQVRPUiAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9JU1BBTkNPT1JESU5BVE9SICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTUEFOQ09PUkRJTkFUT1IgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9JU1BBTkNPT1JESU5BVE9SIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhfZG1hX3JlcQorICoKKyAqIFNvdXJjZSBvZiB0aGUgUlhfRE1BX1JFUSBvdXRwdXQgb2YgdGhpcyBibG9jay4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfRE1BX1JFUSAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9ETUFfUkVRICAgICAgICAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0RNQV9SRVEgICAgICAgIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9ETUFfUkVRICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZG1hX3JlcQorICoKKyAqIFNvdXJjZSBvZiB0aGUgVFhfRE1BX1JFUSBvdXRwdXQgb2YgdGhpcyBibG9jay4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRE1BX1JFUSAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9ETUFfUkVRICAgICAgICAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0RNQV9SRVEgICAgICAgIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9ETUFfUkVRICAgICAgIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNTaW1wbGVBZGRyZXNzCisgKgorICogU2ltcGxlIGFkZHJlc3Mgb2YgdGhlIFBBTiBjb29yZGluYXRvcgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNTSU1QTEVBRERSRVNTICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1NJTVBMRUFERFJFU1MgIDB4ZmYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0lNUExFQUREUkVTUyAgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1NJTVBMRUFERFJFU1MgOAorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNMRWVuYWJsZWQKKyAqCisgKiBJZiBzZXQsIExvdyBFbmVyZ3kgbW9kZSBpcyBlbmFibGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0xFRU5BQkxFRCAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTEVFTkFCTEVEICAgICAgMHgyMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTEVFTkFCTEVEICAgICAgMTcKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNMRUVOQUJMRUQgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjVFNDSGVuYWJsZWQKKyAqCisgKiBJZiBzZXQsIFRTQ0ggbW9kZSBpcyBlbmFibGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQ0hFTkFCTEVEICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNDSEVOQUJMRUQgICAgMHg0MDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNDSEVOQUJMRUQgICAgMTgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU0NIRU5BQkxFRCAgIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2dsb2JfY29udHJvbF8xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4ZmZmZmZmZmYgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzEgIDB4NDAwOTAwMjQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8xICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNQQU5JZAorICoKKyAqIFRoZSB2YWx1ZXMgMHhGRkZGIGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UKKyAqIGlzIG5vdCBhc3NvY2lhdGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1BBTklEICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNQQU5JRCAgICAgICAgIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFOSUQgICAgICAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFOSUQgICAgICAgIDE2CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjU2hvcnRBZGRyZXNzCisgKgorICogVGhlIHZhbHVlcyAweEZGRkYgYW5kIDB4RkZGRSBpbmRpY2F0ZQorICogdGhhdCBubyBJRUVFIFNob3J0IEFkZHJlc3MgaXMgYXZhaWxhYmxlLgorICogVGhlIGxhdHRlciBvbmUgaXMgdXNlZCBpZiB0aGUgZGV2aWNlIGkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0hPUlRBRERSRVNTICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1NIT1JUQUREUkVTUyAgMHhmZmZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0hPUlRBRERSRVNTICAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1NIT1JUQUREUkVTUyAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfZ2xvYl9jb250cm9sXzIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHhmZmZmZmZmZiAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMiAgMHg0MDA5MDAyOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8yIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzIgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX2FFeHRlbmRlZEFkZHJlc3NfbAorICoKKyAqIFVuaXF1ZSBkZXZpY2UgYWRkcmVzcywgbG93ZXIgMzIgYml0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfTCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0wgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfTCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfTCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfZ2xvYl9jb250cm9sXzMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHhmZmZmZmZmZiAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMyAgMHg0MDA5MDAyYworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8zIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzMgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX2FFeHRlbmRlZEFkZHJlc3NfaAorICoKKyAqIFVuaXF1ZSBkZXZpY2UgYWRkcmVzcywgaGlnaGVyIDE2IGJpdAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0ggIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQUVYVEVOREVEQUREUkVTU19IICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0ggIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0ggMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmYmZmZmZmZQorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMCAgMHg0MDA5MDAzMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzAgIDB4ZmJmZmZmZmUKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4b25EdXJhdGlvbgorICoKKyAqIFRpbWUgdGhlIFJ4IG11c3QgYmUgb24KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhPTkRVUkFUSU9OICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYT05EVVJBVElPTiAgMHgxZmZmZmZlCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWE9ORFVSQVRJT04gIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWE9ORFVSQVRJT04gMjQKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfUnhBbHdheXNPbgorICoKKyAqIElmIHNldCwgdGhlIHJlY2VpdmVyIHNoYWxsIGJlIGFsd2F5cyBvbiBpZgorICogUnhFbmFibGUgaXMgc2V0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQUxXQVlTT04gICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEFMV0FZU09OICAgIDB4MjAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhBTFdBWVNPTiAgICAyNQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQUxXQVlTT04gICAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcHRpCisgKgorICogSW5mbyB0byBhcmJpdGVyIGlmIHBoeV9lbiBpcyBzZXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUFRJICAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BUSSAgICAgICAgICAgMHg3ODAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUFRJICAgICAgICAgICAyNworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BUSSAgICAgICAgICA0CisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2tlZXBfcGh5X2VuCisgKgorICogV2hlbiB0aGUgdHJhbnNtaXQgb3IgcmVjZWl2ZSBhY3Rpb24gaXMgcmVhZHkgKExtYWNSZWFkeTRTbGVlcCB3aWxsIGlzIHNldCksIHRoZSBwaHlfZW4gc2lnbmFsIGlzIGNsZWFyZWQgdW5sZXNzIHRoZSBjb250cm9sIHJlZ2lzdGVyIGtlZXBfcGh5X2VuIGlzIHNldC4KKyAqIFdoZW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIga2VlcF9waHlfZW4gaXMgc2V0LCB0aGUgc2lnbmFsIHBoeV9lbiBzaGFsbCByZW1haW4gYmVpbmcgc2V0IHVudGlsIHRoZSBrZWVwX3BoeV9lbiBpcyBjbGVhcmVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9LRUVQX1BIWV9FTiAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfS0VFUF9QSFlfRU4gICAweDgwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9LRUVQX1BIWV9FTiAgIDMxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfS0VFUF9QSFlfRU4gIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1R4UGlwZVByb3BEZWxheQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhQSVBFUFJPUERFTEFZICAweDQwMDkwMDM0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhQSVBFUFJPUERFTEFZIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhQSVBFUFJPUERFTEFZICAweGZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9UeFBpcGVQcm9wRGVsYXkKKyAqCisgKiBQcm9wIGRlbGF5IG9mIHR4IHBpcGUsIHN0YXJ0IHRvIERQSFkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhQSVBFUFJPUERFTEFZICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhQSVBFUFJPUERFTEFZCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkgIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYUElQRVBST1BERUxBWSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYUElQRVBST1BERUxBWSA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9NYWNBY2tXYWl0RHVyYXRpb24KKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgzNiAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04gIDB4NDAwOTAwMzgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04gMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04gIDB4ZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX01hY0Fja1dhaXREdXJhdGlvbgorICoKKyAqIE1heCB0aW1lIHRvIHdhaXQgZm9yIGEgKG5vcm1hbCkgQUNLCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUNLV0FJVERVUkFUSU9OICAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04gIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04gOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfTWFjRW5oQWNrV2FpdER1cmF0aW9uCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MzYwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDRU5IQUNLV0FJVERVUkFUSU9OICAweDQwMDkwMDNjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDRU5IQUNLV0FJVERVUkFUSU9OIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDRU5IQUNLV0FJVERVUkFUSU9OICAweGZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX01hY0VuaEFja1dhaXREdXJhdGlvbgorICoKKyAqIFRoZSBtYXhpbXVtIHRpbWUgKGluID8/cykgdG8gd2FpdCBmb3IgYW4KKyAqIGVuaGFuY2VkIGFja25vd2xlZGdlbWVudCBmcmFtZQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04KKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTiAgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF8xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xICAweDQwMDkwMDQwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMSAgMHhmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlSeEF0dHIKKyAqCisgKiBwaHlhdHRyIHRvIERQSFkgZHVyaW5nIFJ4IG9wZXJhdGlvbgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWEFUVFIgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhBVFRSICAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYQVRUUiAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYQVRUUiAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZjAxCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8yICAweDQwMDkwMDQ0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMiAgMHhmZmZmZmYwMQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0VkU2NhbkVuYWJsZQorICoKKyAqIGlmIHNldCwgRW5lcmd5IERldGVjdCBzY2FuIHdpbGwgYmUgZG9uZQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5FTkFCTEUgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5FTkFCTEUgICAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5FTkFCTEUgICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkVOQUJMRSAgIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9FZFNjYW5EdXJhdGlvbgorICoKKyAqIExlbmd0aCBvZiBFRCBzY2FuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkRVUkFUSU9OICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkRVUkFUSU9OICAweGZmZmZmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5EVVJBVElPTiAgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkRVUkFUSU9OIDI0CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfMworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDRjNCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzMgIDB4NDAwOTAwNDgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zICAweGZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjTWF4RnJhbWVUb3RhbFdhaXRUaW1lCisgKgorICogTWF4IHRpbWUgdG8gd2FpdCBmb3IgYSByZXF1ZXN0ZWQgRGF0YSBGcmFtZSBvciBhbiBhbm5vdW5jZWQgYnJvYWRjYXN0IGZyYW1lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWEZSQU1FVE9UQUxXQUlUVElNRSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUUgIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYRlJBTUVUT1RBTFdBSVRUSU1FICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYRlJBTUVUT1RBTFdBSVRUSU1FIDE2CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfQ2NhSWRsZVdhaXQKKyAqCisgKiBUaW1lIHRvIHdhaXQgYWZ0ZXIgQ0NBIHJldHVybmVkICJtZWRpdW0gaWRsZSIgYmVmb3JlIHN0YXJ0aW5nIFRYLU9OIChpbiB1cykuCisgKiBOb3RlOiBub3QgYXBwbGljYWJsZSBpbiBUU0NIIG1vZGUgc2luY2UgdGhlcmUgbWFjVFNSeFR4IHNoYWxsIGJlIHVzZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQUlETEVXQUlUICAgICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FJRExFV0FJVCAgICAgICAgICAgICAgIDB4ZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FJRExFV0FJVCAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBSURMRVdBSVQgICAgICAgICAgICAgIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF9vcworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4NworICogQWNjZXNzIG1vZGU6IE9TLVcgKG9uZS1zaG90IC0gd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9PUyAgMHg0MDA5MDA1MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9PUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9PUyAgMHg3CisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfZ2V0R2VuZXJhdG9yVmFsCisgKgorICogSWYgc2V0LCB0aGUgY3VycmVudCB2YWx1ZXMgb2YgV1UgZ2VuIGFuZCBUUyBnZW4gd2lsbCBiZSBjYXB0dXJlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUwgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfUnhFbmFibGUKKyAqCisgKiBJZiBzZXQsIHJlY2VpdmluZyBkYXRhIG1heSBiZSBkb25lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYRU5BQkxFICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhFTkFCTEUgICAgICAgICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYRU5BQkxFICAgICAgICAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYRU5BQkxFICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1NpbmdsZUNDQQorICoKKyAqIElmIHNldCwgYSBzaW5nbGUgQ0NBIHdpbGwgYmUgcGVyZm9ybWVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TSU5HTEVDQ0EgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJTkdMRUNDQSAgICAgICAgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TSU5HTEVDQ0EgICAgICAgIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TSU5HTEVDQ0EgICAgICAgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sX3N0YXR1cworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfU1RBVFVTICAweDQwMDkwMDU0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMgIDB4ZmY0NgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZWFkeTRzbGVlcAorICoKKyAqIEluZGljYXRlcyB0aGF0IHRoZSBMTUFDIGlzIHJlYWR5IHRvIGdvIHRvIHNsZWVwLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUCAgICAgICAgICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUCAgICAgICAgICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9DQ0FTdGF0CisgKgorICogVmFsdWUgc2luZ2xlIENDQSB3aGVuIENDQXN0YXRfZSBpcyBzZXQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVQgICAgICAgICAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVCAgICAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVCAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUICAgICAgICAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1dha2V1cFRpbWVyRW5hYmxlU3RhdHVzCisgKgorICogU3RhdHVzIG9mIFdha2V1cFRpbWVyRW5hYmxlIGFmdGVyIGJlaW5nIGNsb2NrZWQgYnkgTFBfQ0xLIChzaG93aW5nIGl0J3MgZWZmZWN0aXZlIHZhbHVlKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVMgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfU1RBVFVTCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVUyAgMHg0MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVMgIDYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVUyAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfRWRTY2FuVmFsdWUKKyAqCisgKiBSZXN1bHQgb2YgRUQgc2Nhbi4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOVkFMVUUgICAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfU1RBVFVTCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5WQUxVRSAgICAgICAgICAgICAgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5WQUxVRSAgICAgICAgICAgICAgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlZBTFVFICAgICAgICAgICAgIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX0V2ZW50Q3VyclZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwgIDB4NDAwOTAwNTgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0V2ZW50Q3VyclZhbAorICoKKyAqIFZhbHVlIG9mIGNhcHR1cmVkIEV2ZW50IGdlbmVyYXRvcgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRVZFTlRDVVJSVkFMICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRVZFTlRDVVJSVkFMIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9UaW1lU3RhbXBDdXJyVmFsCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJWQUwgIDB4NDAwOTAwNWMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSVkFMIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTCAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfVGltZVN0YW1wQ3VyclZhbAorICoKKyAqIFZhbHVlIG9mIGNhcHR1cmVkIFRTIGdlbgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSVkFMICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTCAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJWQUwgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1RpbWVTdGFtcEN1cnJQaGFzZVZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwgIDB4NDAwOTAwNzQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwgIDB4ZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1RpbWVTdGFtcEN1cnJQaGFzZVZhbAorICoKKyAqIFZhbHVlIG9mIGNhcHR1cmVkIFRTIGdlbiBwaGFzZSB3aXRoaW4gYSBzeW1ib2wKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlBIQVNFVkFMICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlBIQVNFVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwgIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTCA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUU1R4QWNrRGVsYXlWYWwKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMICAweDQwMDkwMDc4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMICAweGZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTVHhBY2tEZWxheVZhbAorICoKKyAqIFRoZSB0aW1lIGluIHVzIGxlZnQgdW50aWwgdGhlIGFjayBmcmFtZSBpcyBzZW50IGJ5IHRoZSBsbWFjCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWVZBTCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWVZBTAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMICAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWVZBTCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWVZBTCAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF80ICAweDQwMDkwMDYwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNCAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5U2xlZXBXYWl0CisgKgorICogVGltZSBiZXR3ZWVuIG5lZ2F0ZSBhbmQgYXNzZXJ0IFBIWV9FTgorICogV2hlbiB0aGUgc2lnbmFsIHBoeV9lbiBpcyBkZWFzc2VydGVkLCBpdCB3aWxsIG5vdCBiZSBhc3NlcnRlZCB3aXRoaW4gdGhlIHRpbWUgcGh5U2xlZXBXYWl0LgorICogVGhpcyB0aW1lIGlzIGluZGljYXRlZCBieSB0aGUgY29udHJvbCByZWdpc3RlciBwaHlTbGVlcFdhaXQgKHJlc29sdXRpb246IH5zKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZU0xFRVBXQUlUICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVNMRUVQV0FJVCAgICAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZU0xFRVBXQUlUICAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZU0xFRVBXQUlUICAgIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeFBpcGVQcm9wRGVsYXkKKyAqCisgKiBUaGUgY29udHJvbCByZWdpc3RlciBSeFBpcGVQcm9wRGVsYXkgaW5kaWNhdGVzIHRoZSBwcm9wYWdhdGlvbiBkZWxheSBpbiB+cyBvZiB0aGUgUnggcGlwZWxpbmUgYmV0d2VlbiB0aGUgbGFzdCBzeW1ib2wgYmVpbmcgY2FwdHVyZWQgYXQgdGhlIERQSFkgaW50ZXJmYWNlIGFuZCB0aGUgImRhdGEgdmFsaWQiIGluZGljYXRpb24gdG8gdGhlIExNQUMgY29udHJvbGxlci4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhQSVBFUFJPUERFTEFZICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYUElQRVBST1BERUxBWSAgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFBJUEVQUk9QREVMQVkgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFBJUEVQUk9QREVMQVkgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeUFja0F0dHIKKyAqCisgKiBEdXJpbmcgdHJhbnNtaXNzaW9uIG9mIGFuIEFDSyBmcmFtZSwgcGh5QWNrQXR0ciBpcyB1c2VkIGFzIHBoeUF0dHIgb24gdGhlIERQSFkgaW50ZXJmYWNlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlBQ0tBVFRSICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZQUNLQVRUUiAgICAgICAweGZmZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlBQ0tBVFRSICAgICAgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZQUNLQVRUUiAgICAgIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfNQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDhjMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmMGZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNSAgMHg0MDA5MDA2NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF81IDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzUgIDB4ZmZmZjBmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0Fja19SZXNwb25zZV9EZWxheQorICoKKyAqIEluIG9yZGVyIHRvIGhhdmUgc29tZSBmbGV4aWJpbGl0eSB0aGUgY29udHJvbCByZWdpc3RlciBBY2tfUmVzcG9uc2VfRGVsYXkgaW5kaWNhdGVzIHRoZSBBY2tub3dsZWRnZSByZXNwb25zZSB0aW1lIGluIH5zLgorICogVGhlIGRlZmF1bHQgdmFsdWUgc2hhbGwgaXMgMTkyIH5zICgxMiBzeW1ib2xzKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQUNLX1JFU1BPTlNFX0RFTEFZICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzUKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FDS19SRVNQT05TRV9ERUxBWSAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQUNLX1JFU1BPTlNFX0RFTEFZICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQUNLX1JFU1BPTlNFX0RFTEFZIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9DY2FTdGF0V2FpdAorICoKKyAqIFRoZSBvdXRwdXQgQ0NBU1RBVCBpcyB2YWxpZCBhZnRlciA4IHN5bWJvbHMgKyBwaHlSeFN0YXJ0dXAuCisgKiBUaGUgOCBzeW1ib2xzIGFyZSBwcm9ncmFtbWFibGUgYnkgY29udHJvbCByZWdpc3RlckNjYVN0YXRXYWl0WzRdIGluIHN5bWJvbCB0aW1lc2wuCisgKiBEZWZhdWx0IHZhbHVlIGlzIDhkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUV0FJVCAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVFdBSVQgICAgICAgICAweGYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVFdBSVQgICAgICAgICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVFdBSVQgICAgICAgIDQKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlDc21hQ2FBdHRyCisgKgorICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgcGh5Q3NtYUNhQXR0ciBpcyB1c2VkIHRvIHNvdXJjZSBQSFlBVFQgb24gdGhlIERQSFkgaW50ZXJmYWNlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlDU01BQ0FBVFRSICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZQ1NNQUNBQVRUUiAgICAgICAweGZmZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlDU01BQ0FBVFRSICAgICAgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZQ1NNQUNBQVRUUiAgICAgIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfNgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweGMwYzI4ICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNiAgMHg0MDA5MDA2OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF82IDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzYgIDB4ZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MaWZzUGVyaW9kCisgKgorICogVGhlIExJRlMgcGVyaW9kIGlzIHByb2dyYW1tYWJsZSBieSBMaWZzUGVyaW9kIChpbiBzeW1ib2xzKS4KKyAqIFRoZSBkZWZhdWx0IGlzIDQwIHN5bWJvbHMgKDY0MCB+cyksCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xJRlNQRVJJT0QgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzYKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xJRlNQRVJJT0QgICAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MSUZTUEVSSU9EICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xJRlNQRVJJT0QgIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TaWZzUGVyaW9kCisgKgorICogVGhlIFNJRlMgcGVyaW9kIGlzIHByb2dyYW1tYWJsZSBieSBTaWZzUGVyaW9kIChpbiBzeW1ib2xzKS4KKyAqIFRoZSBkZWZhdWx0IGlzIDEyIHN5bWJvbHMgKDE5MiB+cykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJRlNQRVJJT0QgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzYKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJRlNQRVJJT0QgICAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJRlNQRVJJT0QgICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0lGU1BFUklPRCAgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1dVaWZzUGVyaW9kCisgKgorICogVGhlIFdha2VVcCBJRlMgcGVyaW9kIGlzIHByb2dyYW1tYWJsZSBieSBXVWlmc1BlcmlvZCAoaW4gc3ltYm9scykuCisgKiBUaGUgZGVmYXVsdCBpcyAxMiBzeW1ib2xzICgxOTIgfnMpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9XVUlGU1BFUklPRCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF82CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9XVUlGU1BFUklPRCAgMHhmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dVSUZTUEVSSU9EICAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dVSUZTUEVSSU9EIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF8xMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MWZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzExICAweDQwMDkwMDZjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzExIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzExICAweDFmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNSeFRvdGFsQ3ljbGVUaW1lCisgKgorICogSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY2FsY3VsYXRlIGlmIGl0IGlzIGVmZmljaWVudCB0byBkaXNhYmxlIGFuZCBlbmFibGUgdGhlIFBIWSBSeCB1bnRpbCB0aGUgUlogdGltZSBpcyByZWFjaGVkLCBhIGNvbnRyb2wgcmVnaXN0ZXIgaW5kaWNhdGVzIHRoZSB0aW1lIG5lZWRlZCB0byBkaXNhYmxlIGFuZCBlbmFibGUgdGhlIFBIWSBSeDogbWFjUnhUb3RhbEN5Y2xlVGltZSAocmVzb2x1dGlvbiBpbiAxMCBzeW0pCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVE9UQUxDWUNMRVRJTUUgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVE9UQUxDWUNMRVRJTUUgIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhUT1RBTENZQ0xFVElNRSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVE9UQUxDWUNMRVRJTUUgMTYKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjRGlzQ2FSeE9mZnRvUloKKyAqCisgKiBUaGlzIHN3aXRjaGluZyBvZmYgYW5kIG9uIG9mIHRoZSBQSFkgUnggY2FuIGJlIGRpc2FibGVkIHdoaXRoIHRoZSBjb250cm9sIHJlZ2lzdGVyIG1hY0Rpc0NhUnhPZmZ0b1JaLgorICogIDAgOiBEaXNhYmxlZAorICogIDEgOiBFbmFibGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0RJU0NBUlhPRkZUT1JaICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0RJU0NBUlhPRkZUT1JaICAgIDB4MTAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0RJU0NBUlhPRkZUT1JaICAgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRElTQ0FSWE9GRlRPUlogICAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfZGVsdGEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDdlCisgKiBBY2Nlc3MgbW9kZTogRC1SQ1cgKGRlbHRhIHJlYWQvY2xlYXIgb24gd3JpdGUgMSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBICAweDQwMDkwMDcwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBICAweDdlCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1JlYWR5NHNsZWVwX2QKKyAqCisgKiBEZWx0YSBiaXQgZm9yIHJlZ2lzdGVyICJMbWFjUmVhZHk0c2xlZXAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9EICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9EICAgICAgICAgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX0QgICAgICAgICAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9EICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW5jVGltZVN0YW1wX2UKKyAqCisgKiBUaGUgU3luY1RpbWVTdGFtcF9lIGV2ZW50IGlzIHNldCB3aGVuIHRoZSBUaW1lU3RhbXBnZW5lcmF0b3IgaXMgbG9hZGVkIHdpdGggU3luY1RpbWVTdGFtcFZhbC4KKyAqIFRoaXMgb2NjdXJzIGF0IHRoZSByaXNpbmcgZWRnZSBvZiBscF9jbGsgd2hlbiBTeW5jVGltZVN0YW1wRW5hIGlzIHNldCBhbmQgdGhlIHZhbHVlIG9mIHRoZSBFdmVudCBnZW5lcmF0b3IgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIFN5bmNUaW1lc3RhbXBUaHIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfRSAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfRSAgICAgICAgICAgIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9FICAgICAgICAgICAgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfRSAgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lVGhyX2UKKyAqCisgKiBFdmVudCB0aGF0IHN5bWJvbHRpbWUgY291bnRlciBtYXRjaGVkIFN5bWJvbFRpbWVUaHIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9FICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9ERUxUQQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9FICAgICAgICAgICAgMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX0UgICAgICAgICAgICAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9FICAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWUyVGhyX2UKKyAqCisgKiBFdmVudCB0aGF0IHN5bWJvbHRpbWUgY291bnRlciBtYXRjaGVkIFN5bWJvbFRpbWUyVGhyCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX0UgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX0UgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX0UgICAgICAgICAgIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUl9FICAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfZ2V0R2VuZXJhdG9yVmFsX2UKKyAqCisgKiBFdmVudCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBXYWtldXBUaW1lckVuYWJsZVN0YXR1cyBoYXMgY2hhbmdlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRSAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRSAgICAgICAgICAweDIwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRSAgICAgICAgICA1CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX0UgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1dha2V1cFRpbWVyRW5hYmxlU3RhdHVzX2QKKyAqCisgKiBEZWx0YSB3aGljaCBpbmRpY2F0ZXMgdGhlIGdldEdlbmVyYXRvclZhbCByZXF1ZXN0IGlzIGNvbXBsZXRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19EICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19EICAweDQwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19EICA2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfRCAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfbWFzaworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4N2UKKyAqIEFjY2VzcyBtb2RlOiBETS1SVyAoZGVsdGEgbWFzaykKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0sgIDB4NDAwOTAwODAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLICAweDdlCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1JlYWR5NHNsZWVwX20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZGVsdGEgYml0ICJMbWFjUmVhZHk0c2xlZXBfZCIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX00gICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfTSAgICAgICAgICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9NICAgICAgICAgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfTSAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcF9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50IHJlZ2lzdGVyIFN5bmNUaW1lU3RhbXBfZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9NICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QX00gICAgICAgICAgICAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfTSAgICAgICAgICAgIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QX00gICAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZVRocl9tCisgKgorICogTWFzayBmb3IgU3ltYm9sVGltZVRocl9lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfTSAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9NICAgICAgICAgICAgMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX00gICAgICAgICAgICAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9NICAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWUyVGhyX20KKyAqCisgKiBNYXNrIGZvciBTeW1ib2xUaW1lMlRocl9lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX00gICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfTSAgICAgICAgICAgMHgxMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfTSAgICAgICAgICAgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX00gICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9nZXRHZW5lcmF0b3JWYWxfbQorICoKKyAqIE1hc2sgZm9yIGdldEdlbmVyYXRvclZhbF9lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9NICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX00gICAgICAgICAgMHgyMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX00gICAgICAgICAgNQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9NICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9XYWtldXBUaW1lckVuYWJsZVN0YXR1c19tCisgKgorICogTWFzayBmb3IgV2FrZXVwVGltZXJFbmFibGVTdGF0dXNfZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19NICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX00gIDB4NDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX00gIDYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19NIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfZXZlbnQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDcKKyAqIEFjY2VzcyBtb2RlOiBFLVJDVyAoZXZlbnQgcmVhZC9jbGVhciBvbiB3cml0ZSAxKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0VWRU5UICAweDQwMDkwMDkwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19FVkVOVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfRVZFTlQgIDB4NworCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0VkU2NhblJlYWR5X2UKKyAqCisgKiBUaGUgZXZlbnQgRWRTY2FuUmVhZHlfZSBpcyBzZXQgdG8gbm90aWZ5IHRoYXQgdGhlIEVEIHNjYW4gaXMgcmVhZHkuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX0UgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9FICAgICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX0UgICAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9FICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfQ0NBc3RhdF9lCisgKgorICogSWYgc2V0LCB0aGUgc2luZ2xlIENDQSBpcyByZWFkeQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUX0UgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19FVkVOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVF9FICAgICAgICAgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUX0UgICAgICAgICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVF9FICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4VGltZXJFeHBpcmVkX2UKKyAqCisgKiBTZXQgaWYgb25lIG9mIHRoZSB0aW1lcnMgZW5hYmxpbmcgdGhlIFJYLU9OIG1vZGUgZXhwaXJlcyB3aXRob3V0IGhhdmluZyByZWNlaXZlZCBhbnkgdmFsaWQgZnJhbWUKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfRSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYVElNRVJFWFBJUkVEX0UgIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfRSAgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYVElNRVJFWFBJUkVEX0UgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYXNrCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHg3CisgKiBBY2Nlc3MgbW9kZTogRU0tUlcgKGV2ZW50IG1hc2spCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFTSyAgMHg0MDA5MDA5NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFTSyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFTSyAgMHg3CisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRWRTY2FuUmVhZHlfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAiRWRTY2FuUmVhZHlfZSIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOUkVBRFlfTSAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOUkVBRFlfTSAgICAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9NICAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOUkVBRFlfTSAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0NDQXN0YXRfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAiQ0NBc3RhdF9lIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUX00gICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUX00gICAgICAgICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRfTSAgICAgICAgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUX00gICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfUnhUaW1lckV4cGlyZWRfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAiUnhUaW1lckV4cGlyZWRfZSIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfTSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfTSAgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9NICAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfTSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF8xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmMGZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF8xICAweDQwMDkwMGEwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEgIDB4ZmZmZjBmZmYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9tb2RlCisgKgorICogSWYgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgbG1hY19tYW51YWxfbW9kZSBpcyBzZXQsIHRoZSBMTUFDIGNvbnRyb2xsZXIgY29udHJvbAorICogc2lnbmFscyBzaG91bGQgYmUgY29udHJvbGxlZCBieSB0aGUgbG1hY19tYW51YWxfY29udHJvbCByZWdpc3RlcnMKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfTU9ERSAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX01PREUgICAgICAgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfTU9ERSAgICAgICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX01PREUgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9waHlfZW4KKyAqCisgKiBsbWFjX21hbnVhbF9waHlfZW4gY29udHJvbHMgdGhlIFBIWV9FTiBpbnRlcmZhY2Ugc2lnbmFsIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUEhZX0VOICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BIWV9FTiAgICAgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUEhZX0VOICAgICAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BIWV9FTiAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF90eF9lbgorICoKKyAqIGxtYWNfbWFudWFsX3R4X2VuIGNvbnRyb2xzIHRoZSBUWF9FTiBpbnRlcmZhY2Ugc2lnbmFsIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRU4gICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX0VOICAgICAgIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRU4gICAgICAgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX0VOICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9yeF9lbgorICoKKyAqIGxtYWNfbWFudWFsX3J4X2VuIGNvbnRyb2xzIHRoZSBSWF9FTiBpbnRlcmZhY2Ugc2lnbmFsIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfRU4gICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1JYX0VOICAgICAgIDB4OAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfRU4gICAgICAgMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1JYX0VOICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9yeF9waXBlX2VuCisgKgorICogbG1hY19tYW51YWxfcnhfcGlwZV9lbiBjb250cm9scyB0aGUgcnhfZW5hYmxlIHNpZ25hbCB0b3dhcmRzIHRoZSByeCBwaXBlbGluZSB3aGVuIGxtYWNfbWFudWFsX21vZGUgaXMgc2V0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1JYX1BJUEVfRU4gIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9SWF9QSVBFX0VOICAweDEwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9SWF9QSVBFX0VOICA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfUElQRV9FTiAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX2VkX3JlcXVlc3QKKyAqCisgKiBsbWFjX21hbnVhbF9lZF9yZXF1ZXN0IGNvbnRyb2xzIHRoZSBFRF9SRVFVRVNUIGludGVyZmFjZSBzaWduYWwgd2hlbiBsbWFjX21hbnVhbF9tb2RlIGlzIHNldAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9FRF9SRVFVRVNUICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfUkVRVUVTVCAgMHgyMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfUkVRVUVTVCAgNQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0VEX1JFUVVFU1QgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX3R4X2ZybV9ucgorICoKKyAqIGxtYWNfbWFudWFsX3R4X2ZybV9uciBjb250cm9scyB0aGUgZW50cnkgaW4gdGhlIHR4IGJ1ZmZlciB0byBiZSB0cmFuc21pdHRlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRlJNX05SICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX0ZSTV9OUiAgIDB4YzAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX0ZSTV9OUiAgIDYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9GUk1fTlIgIDIKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9wdGkKKyAqCisgKiBsbWFjX21hbnVhbF9wdGkgY29udHJvbHMgdGhlIFBUSSBpbnRlcmZhY2Ugc2lnbmFsIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUFRJICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BUSSAgICAgICAgIDB4ZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QVEkgICAgICAgICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUFRJICAgICAgICA0CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfcGh5X2F0dHIKKyAqCisgKiBsbWFjX21hbnVhbF9waHlfYXR0ciBjb250cm9scyB0aGUgUEhZX0FUVFIgaW50ZXJmYWNlIHNpZ25hbCB3aGVuIGxtYWNfbWFudWFsX21vZGUgaXMgc2V0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BIWV9BVFRSICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QSFlfQVRUUiAgICAweGZmZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QSFlfQVRUUiAgICAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BIWV9BVFRSICAgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX29zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxCisgKiBBY2Nlc3MgbW9kZTogT1MtVyAob25lLXNob3QgLSB3cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfT1MgIDB4NDAwOTAwYTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9PUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX09TICAweDEKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF90eF9zdGFydAorICoKKyAqIE9uZSBzaG90IHJlZ2lzdGVyIHdoaWNoIHRyaWdnZXJzIHRoZSB0cmFuc21pc3Npb24gb2YgYSBmcmFtZSBmcm9tIHRoZSB0eCBidWZmZXIgaW4gbG1hY19tYW51YWxfbW9kZQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9TVEFSVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9TVEFSVCAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9TVEFSVCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX1NUQVJUIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX3N0YXR1cworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9TVEFUVVMgIDB4NDAwOTAwYTgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9TVEFUVVMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9TVEFUVVMgIDB4ZmYwMQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX2NjYV9zdGF0CisgKgorICogbG1hY19tYW51YWxfY2NhX3N0YXQgc2hvd3MgdGhlIHN0YXR1cyBvZiB0aGUgQ0NBX1NUQVQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfQ0NBX1NUQVQgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0NDQV9TVEFUICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0NDQV9TVEFUICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfQ0NBX1NUQVQgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX2VkX3N0YXQKKyAqCisgKiBsbWFjX21hbnVhbF9lZF9zdGF0IHNob3dzIHRoZSBzdGF0dXMgb2YgdGhlIEVEX1NUQVQgaW50ZXJmYWNlIHNpZ25hbC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfU1RBVCAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0VEX1NUQVQgICAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0VEX1NUQVQgICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfU1RBVCAgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzcKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHg0MjAwMDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzcgIDB4NDAwOTAxMDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF83ICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNXVVBlcmlvZAorICoKKyAqIFdha2UtdXAgZHVyYXRpb24gaW4gc3ltYm9scy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDV1VQRVJJT0QgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzcKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUEVSSU9EICAgICAgICAgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNXVVBFUklPRCAgICAgICAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNXVVBFUklPRCAgICAgICAgMTYKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNDU0xzYW1wbGVQZXJpb2QKKyAqCisgKiBXaGVuIHBlcmZvcm1pbmcgYSBpZGxlIGxpc3RlbmluZywgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQgZm9yIGF0IGxlYXN0IG1hY0NTTHNhbXBsZVBlcmlvZCAoaW4gc3ltYm9scykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTFNBTVBMRVBFUklPRCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF83CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xTQU1QTEVQRVJJT0QgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTFNBTVBMRVBFUklPRCAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xTQU1QTEVQRVJJT0QgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF84CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOCAgMHg0MDA5MDEwNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF84IDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzggIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0NTTHN0YXJ0U2FtcGxlVGltZQorICoKKyAqIFRoZSBjb250cm9sIHJlZ2lzdGVyIG1hY0NTTHN0YXJ0U2FtcGxlVGltZSBpbmRpY2F0ZXMgdGhlIFRpbWVTdGFtcCBnZW5lcmF0b3IgdGltZSAoaW4gc3ltYm9scykgd2hlbiB0byBzdGFydCBsaXN0ZW5pbmcgKGNhbGxlZCAiaWRsZSBsaXN0ZW5pbmciKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzgKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTFNUQVJUU0FNUExFVElNRSAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfOQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDQyICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF85ICAweDQwMDkwMTA4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzkgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOSAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQ1NMZGF0YVBlcmlvZAorICoKKyAqIEFmdGVyIHRoZSB3YWtlLXVwIHNlcXVlbmNlIGEgZnJhbWUgaXMgZXhwZWN0ZWQsIHRoZSByZWNlaXZlciB3aWxsIGJlIGVuYWJsZWQgZm9yIGF0IGxlYXN0IGEgcGVyaW9kIG9mIG1hY0NTTGRhdGFQZXJpb2QgKGluIHN5bWJvbHMpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xEQVRBUEVSSU9EICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF85CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xEQVRBUEVSSU9EICAgICAgICAgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xEQVRBUEVSSU9EICAgICAgICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTERBVEFQRVJJT0QgICAgICAgIDE2CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQ1NMRnJhbWVQZW5kaW5nV2FpdFQKKyAqCisgKiBJZiBhIG5vbiBXYWtlLXVwIGZyYW1lIHdpdGggRnJhbWUgUGVuZGluZyBiaXQgPSAnMScgaXMgcmVjZWl2ZWQsIHRoZSByZWNlaXZlciBpcyBlbmFibGVkIGZvciBhdCBsZWFzdCBhbiBleHRyYSBwZXJpb2Qgb2YgbWFjQ1NMRnJhbWVQZW5kaW5nV2FpdFQgKGluIHN5bWJvbHMpIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgorICogVGhlIHRpbWUgdGhlIEVuaGFuY2VkIEFDSyB0cmFuc21pc3Npb24gbGFzdHMgKGlmIGFwcGxpY2FibGUpIGlzIGluY2x1ZGVkIGluIHRoaXMgdGltZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFQgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFQgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTEZSQU1FUEVORElOR1dBSVRUICAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTEZSQU1FUEVORElOR1dBSVRUIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfMTAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgyMDAwMDAwMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmMDBmMDBmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTAgIDB4NDAwOTAxMGMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTAgIDB4ZjAwZjAwZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1JaemVyb1ZhbAorICoKKyAqIElmIHRoZSBjdXJyZW50IFJadGltZSBpcyBsZXNzIG9yIEVxdWFsIHRvIG1hY1JaemVyb1ZhbCBhbiBSWnRpbWUgd2l0aCB2YWx1ZSB6ZXJvIGlzIGluc2VydGVkIGluIHRoZSB3YWtldXAgZnJhbWUKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlpaRVJPVkFMICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JaWkVST1ZBTCAgICAgICAweGYwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWlpFUk9WQUwgICAgICAgMjgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWlpFUk9WQUwgICAgICA0CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQ1NMbWFyZ2luUloKKyAqCisgKiBUaGUgVU1BQyBjYW4gc2V0IHRoZSBtYXJnaW4gZm9yIHRoZSBleHBlY3RlZCBmcmFtZSBieSBjb250cm9sIHJlZ2lzdGVyIG1hY0NTTG1hcmdpblJaIChpbiAxMCBzeW0pLgorICogU28gdGhlIExNQUMgd2lsbCBtYWtlIHN1cmUgdGhlIHJlY2VpdmVyIGlzIHJlYWR5IHRvIHJlY2VpdmUgZGF0YSB0aGlzIGFtb3VudCBvZiB0aW1lIGVhcmxpZXIgdGhhbiB0byBiZSBleHBlY3RlZCBieSB0aGUgcmVjZWl2ZWQgUlogdGltZQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xNQVJHSU5SWiAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMTUFSR0lOUlogICAgIDB4ZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTE1BUkdJTlJaICAgICAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTE1BUkdJTlJaICAgIDQKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNXVVJaQ29ycmVjdGlvbgorICoKKyAqIFRoaXMgcmVnaXN0ZXIgc2hhbGwgYmUgdXNlZCBpZiB0aGUgV2FrZS11cCBmcmFtZSB0byBiZSB0cmFuc21pdHRlZCBpcyBsYXJnZXIgdGhhbiAxNSBvY3RldHMuCisgKiBJdCBzaGFsbCBpbmRpY2F0ZSB0aGUgYW1vdW50IG9mIGV4dHJhIGRhdGEgaW4gYSBXYWtlLXVwIGZyYW1lIGFmdGVyIHRoZSBSWiBwb3NpdGlvbiBpbiB0aGUgZnJhbWUgKGluIDEwIHN5bSkuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUlpDT1JSRUNUSU9OICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzEwCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNXVVJaQ09SUkVDVElPTiAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDV1VSWkNPUlJFQ1RJT04gIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNXVVJaQ09SUkVDVElPTiA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWN1cml0eV8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZjdmMGYwMgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wICAweDQwMDkwMTEwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzAgIDB4ZmY3ZjBmMDIKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNUeFJ4bgorICoKKyAqIFNlZSByZWdpc3RlciAic2VjRW50cnkiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1RYUlhOICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNUWFJYTiAgICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1RYUlhOICAgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNUWFJYTiAgIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNFbnRyeQorICoKKyAqIFRoZSBVTUFDIHNoYWxsIGluZGljYXRlIGJ5IGNvbnRyb2wgcmVnaXN0ZXJzIHNlY0VudHJ5IGFuZCBzZWNUeFJ4biB3aGljaCBlbnRyeSB0byB1c2UgYW5kIGlmIGl0J3MgZnJvbSB0aGUgVHggb3IgUnggYnVmZmVyICgnMScgcmVzcC4gJzAnKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5UUlkgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOVFJZICAgIDB4ZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTlRSWSAgICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5UUlkgICA0CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjQWxlbmd0aAorICoKKyAqIFRoZSBsZW5ndGggb2YgdGhlIGFfZGF0YSBpcyBpbmRpY2F0ZWQgYnkgY29udHJvbCByZWdpc3RlciBzZWNBbGVuZ3RoLgorICogVGhlIGVuZCBvZiB0aGUgYV9kYXRhIGlzIHRoZSBzdGFydCBwb2ludCBvZiB0aGUgbV9kYXRhLiAoU28gc2VjQWxlbmd0aCBtdXN0IGFsc28gYmUgc2V0IGlmIHNlY3VyaXR5IGxldmVsPT00KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBTEVOR1RIICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUxFTkdUSCAgMHg3ZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FMRU5HVEggIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUxFTkdUSCA3CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTWxlbmd0aAorICoKKyAqIFRoZSBsZW5ndGggb2YgdGhlIG1fZGF0YSBpcyBpbmRpY2F0ZWQgYnkgY29udHJvbCByZWdpc3RlciBzZWNNbGVuZ3RoLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNNTEVOR1RIICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTUxFTkdUSCAgMHg3ZjAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTUxFTkdUSCAgMjQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNNTEVOR1RIIDcKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfc2VjRW5jRGVjbgorICoKKyAqIFRoZSBjb250cm9sIHJlZ2lzdGVyIHNlY0VuY0RlY24gaW5kaWNhdGVzIHdoZXRoZXIgdG8gZW5jcnlwdCAoJzEnKSBvciBkZWNyeXB0ICgnMCcpIHRoZSBkYXRhLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNERUNOICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5DREVDTiAgMHg4MDAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5DREVDTiAgMzEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNERUNOIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY3VyaXR5XzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMSAgMHg0MDA5MDExNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8xICAweGZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0F1dGhGbGFncworICoKKyAqIFJlZ2lzdGVyIHNlY0F1dGhGbGFncyBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gZmxhZ3MgZmllbGRzLgorICogYml0WzddIGlzICcwJworICogYml0WzZdIGlzICJBX2RhdGEgcHJlc2VudCIKKyAqIGJpdFs1OjNdOiAzLWJpdCBzZWN1cml0eSBsZXZlbCBvZiBtX2RhdGEKKyAqIGJpdFsyOjBdOiAzLWJpdCBzZWN1cml0eSBsZXZlbCBvZiBhX2RhdGEuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FVVEhGTEFHUyAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FVVEhGTEFHUyAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZMQUdTICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZMQUdTIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNFbmNyRmxhZ3MKKyAqCisgKiBSZWdpc3RlciBzZWNFbmNyRmxhZ3MgY29udGFpbiB0aGUgZW5jcnlwdGlvbiBmbGFncyBmaWVsZC4KKyAqIEJpdHMgWzI6MF0gYXJlIHRoZSAzLWJpdCBlbmNvZGluZyBmbGFncyBvZiBhX2RhdGEsIHRoZSBvdGhlciBiaXRzIG1zdXQgYmUgc2V0IHRvICcwJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5DUkZMQUdTICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5DUkZMQUdTICAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOQ1JGTEFHUyAgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOQ1JGTEFHUyA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzAgIDB4NDAwOTAxMTgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMAorICoKKyAqIFJlZ2lzdGVycyBzZWNLZXlbMC4uM10gIGNvbnRhaW4gdGhlIGtleSB0byBiZSB1c2VkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMCAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xICAweDQwMDkwMTFjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMSAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzEKKyAqCisgKiBTZWUgcmVnaXN0ZXIgInNlY0tleV8wIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMSAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzEgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMSAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8yICAweDQwMDkwMTIwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzIKKyAqCisgKiBTZWUgcmVnaXN0ZXIgInNlY0tleV8wIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzIgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zICAweDQwMDkwMTI0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMyAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzMKKyAqCisgKiBTZWUgcmVnaXN0ZXIgInNlY0tleV8wIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMyAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMyAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzMgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMyAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMCAgMHg0MDA5MDEyOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8wICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNOb25jZV8wCisgKgorICogUmVnaXN0ZXIgc2VjTm9uY2VbMC4uM10gY29udGFpbnMgdGhlIE5vbmNlIHRvIGJlIHVzZWQgZm9yIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8wIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNOb25jZV8xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8xICAweDQwMDkwMTJjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY05vbmNlXzEKKyAqCisgKiBTZWUgcmVnaXN0ZXIgIk5vbmNlXzAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8xICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8xICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMSAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMiAgMHg0MDA5MDEzMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8yICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNOb25jZV8yCisgKgorICogU2VlIHJlZ2lzdGVyICJOb25jZV8wIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8yICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMiAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMiAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY05vbmNlXzMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgIDB4NDAwOTAxMzQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8zIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMyAgMHhmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMworICoKKyAqIFNlZSByZWdpc3RlciAiTm9uY2VfMCIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMyAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8zIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY3VyaXR5X29zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgzCisgKiBBY2Nlc3MgbW9kZTogT1MtVyAob25lLXNob3QgLSB3cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfT1MgIDB4NDAwOTAxMzgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9PUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX09TICAweDMKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNBYm9ydAorICoKKyAqIFNlZSByZWdpc3RlciAiTm9uY2VfMCIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUJPUlQgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUJPUlQgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUJPUlQgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBQk9SVCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY1N0YXJ0CisgKgorICogT25lX3Nob3QgcmVnaXN0ZXIgdG8gc3RhcnQgdGhlIGVuY3J5cHRpb24sIGRlY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgdGFzay4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDU1RBUlQgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDU1RBUlQgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDU1RBUlQgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNTVEFSVCAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWN1cml0eV9zdGF0dXMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfU1RBVFVTICAweDQwMDkwMTQwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfU1RBVFVTIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfU1RBVFVTICAweDMKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNCdXN5CisgKgorICogUmVnaXN0ZXIgInNlY0J1c3kiIGluZGljYXRlcyBpZiB0aGUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQlVTWSAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0JVU1kgICAgICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0JVU1kgICAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQlVTWSAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNBdXRoRmFpbAorICoKKyAqIEluIGNhc2Ugb2YgZGVjcnlwdGlvbiwgdGhlIHN0YXR1cyBiaXQgc2VjQXV0aEZhaWwgd2lsbCBiZSBzZXQgd2hlbiB0aGUgYXV0aGVudGljYXRpb24gaGFzIGZhaWxlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZBSUwgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FVVEhGQUlMICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FVVEhGQUlMICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZBSUwgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjdXJpdHlfZXZlbnQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEKKyAqIEFjY2VzcyBtb2RlOiBFLVJDVyAoZXZlbnQgcmVhZC9jbGVhciBvbiB3cml0ZSAxKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9FVkVOVCAgMHg0MDA5MDE1MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX0VWRU5UIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfRVZFTlQgIDB4MQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY1JlYWR5X2UKKyAqCisgKiBUaGUgRXZlbnQgYml0IHNlY1JlYWR5X2UgaXMgc2V0IHdoZW4gdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgaXMgcmVhZHkgKGkuZS4gc2VjQnVzeSBpcyBjbGVhcmVkKS4KKyAqIFRoaXMgRXZlbnQgc2hhbGwgY29udHJpYnV0ZSB0byB0aGUgZ2VuX2lycS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDUkVBRFlfRSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNSRUFEWV9FICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX0UgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNSRUFEWV9FIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY3VyaXR5X2V2ZW50bWFzaworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MQorICogQWNjZXNzIG1vZGU6IEVNLVJXIChldmVudCBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9FVkVOVE1BU0sgIDB4NDAwOTAxNTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9FVkVOVE1BU0sgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9FVkVOVE1BU0sgIDB4MQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY1JlYWR5X20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgInNlY1JlYWR5X2UiLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNSRUFEWV9NICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfRVZFTlRNQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNSRUFEWV9NICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX00gIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNSRUFEWV9NIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3RzY2hfY29udHJvbF8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4ODk4MDNlOCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMCAgMHg0MDA5MDE2MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzAgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTVHhBY2tEZWxheQorICoKKyAqIEVuZCBvZiBSeCBmcmFtZSB0byBzdGFydCBvZiBBY2sKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWSAgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVkgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVkgMTYKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUU1J4V2FpdAorICoKKyAqIFRoZSB0aW1lcyB0byB3YWl0IGZvciBzdGFydCBvZiBmcmFtZQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYV0FJVCAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWFdBSVQgICAgICAweGZmZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYV0FJVCAgICAgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWFdBSVQgICAgIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90c2NoX2NvbnRyb2xfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweGMwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzEgIDB4NDAwOTAxNjQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8xICAweGZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTUnhUeAorICoKKyAqIFRoZSB0aW1lIGJldHdlZW4gdGhlIENDQSBhbmQgdGhlIFRYIG9mIGEgZnJhbWUKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWFRYICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhUWCAgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYVFggIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYVFggMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3RzY2hfY29udHJvbF8yCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MTkwMDMyMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMiAgMHg0MDA5MDE2OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8yIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzIgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTUnhBY2tEZWxheQorICoKKyAqIEVuZCBvZiBmcmFtZSB0byB3aGVuIHRoZSB0cmFuc21pdHRlciBzaGFsbCBsaXN0ZW4gZm9yIEFja25vd2xlZGdlbWVudAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYQUNLREVMQVkgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWEFDS0RFTEFZICAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhBQ0tERUxBWSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhBQ0tERUxBWSAxNgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTQWNrV2FpdAorICoKKyAqIFRoZSBtaW5pbXVtIHRpbWUgdG8gd2FpdCBmb3Igc3RhcnQgb2YgYW4gQWNrbm93bGVkZ2VtZW50CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQUNLV0FJVCAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU0FDS1dBSVQgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQUNLV0FJVCAgICAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU0FDS1dBSVQgICAgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeV9wYXJhbWV0ZXJzXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHg3NjU0MzIxMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHg3Nzc3Nzc3NworICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wICAweDQwMDkwMTgwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAgIDB4Nzc3Nzc3NzcKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Qml0UG9zXzAKKyAqCisgKiBDb250cm9sIHJ4Qml0UG9zKDgpKDMpIGNvbnRyb2xzIHRoZSBwb3NpdGlvbiB0aGF0IGEgYml0IHNob3VsZCBoYXZlIGF0IHRoZSBEUEhZIGludGVyZmFjZS4KKyAqIFNvIHRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgcnhCaXRQb3NfMCA9IDAsIHJ4Qml0UG9zXzEgPSAxLCByeEJpdFBvc18yID0gMiwgZXRjLgorICoKKyAqIE5vdGUxIHRoYXQgdGhpcyBpcyBhIGNvbnZlcnNpb24gZnJvbSByeCBEUEhZIGludGVyZmFjZSB0byB0aGUgaW50ZXJuYWwgZGF0YSBieXRlCisgKiBTbworICogIGZvcihuPTc7bj49MDtuLS0pCisgKiAgICByeF9kYXRhKG4pID0gZHBoeV9iaXQodHhfQml0UG9zKG4pKQorICogIGVuZGZvcgorICoKKyAqIE5vdGUyIHRoYXQgcnhCaXRQb3MgYW5kIHR4Qml0UG9zIG11c3QgaGF2ZSBpbnZlcnNlIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzAgIDB4NworI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzAgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Qml0UG9zXzEKKyAqCisgKiBTZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18xICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMSAgMHg3MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMSAgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzEgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Qml0UG9zXzIKKyAqCisgKiBTZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18yICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMiAgMHg3MDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzIgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18yIDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeEJpdFBvc18zCisgKgorICogU2VlIHJ4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMyAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzMgIDB4NzAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMyAgMTIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18zIDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeEJpdFBvc180CisgKgorICogU2VlIHJ4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzQgIDB4NzAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzQgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNCAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhCaXRQb3NfNQorICoKKyAqIFNlZSByeEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzUgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU181ICAweDcwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNSAgMjAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU181IDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeEJpdFBvc182CisgKgorICogU2VlIHJ4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNiAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzYgIDB4NzAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNiAgMjQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU182IDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeEJpdFBvc183CisgKgorICogU2VlIHJ4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNyAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzcgIDB4NzAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzcgIDI4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNyAzCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlfcGFyYW1ldGVyc18xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4NzY1NDMyMTAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4Nzc3Nzc3NzcKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMSAgMHg0MDA5MDE4NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xICAweDc3Nzc3Nzc3CisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc18wCisgKgorICogQ29udHJvbCB0eEJpdFBvcyg4KSgzKSBjb250cm9scyB0aGUgcG9zaXRpb24gdGhhdCBhIGJpdCBzaG91bGQgaGF2ZSBhdCB0aGUgRFBIWSBpbnRlcmZhY2UuCisgKiBTbyB0aGUgZGVmYXVsdCB2YWx1ZXMgYXJlIHR4Qml0UG9zXzAgPSAwLCB0eEJpdFBvc18xID0gMSwgdHhCaXRQb3NfMiA9IDIsIGV0Yy4KKyAqCisgKiBOb3RlMSB0aGF0IHRoaXMgaXMgYSBjb252ZXJzaW9uIGZyb20gaW50ZXJuYWwgZGF0YSBieXRlIHRvIHRoZSBEUEhZIGludGVyZmFjZS4KKyAqIFNvCisgKiAgZm9yKG49NztuPj0wO24tLSkKKyAqICAgIHR4X2RwaHlfYml0KG4pID0gdHhfZGF0YSh0eF9CaXRQb3MobikpCisgKiAgZW5kZm9yCisgKgorICogTm90ZTIgdGhhdCB0eEJpdFBvcyBhbmQgcnhCaXRQb3MgbXVzdCBoYXZlIGludmVyc2UgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18wICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMCAgMHg3CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18wICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMCAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhCaXRQb3NfMQorICoKKyAqIFNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzEgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18xICAweDcwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18xICA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMSAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhCaXRQb3NfMgorICoKKyAqIFNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzIgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18yICAweDcwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMiAgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzIgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Qml0UG9zXzMKKyAqCisgKiBTZWUgdHhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18zICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMyAgMHg3MDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18zICAxMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzMgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Qml0UG9zXzQKKyAqCisgKiBTZWUgdHhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU180ICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNCAgMHg3MDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNCAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU180IDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc181CisgKgorICogU2VlIHR4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzUgIDB4NzAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU181ICAyMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzUgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Qml0UG9zXzYKKyAqCisgKiBTZWUgdHhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU182ICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNiAgMHg3MDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU182ICAyNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzYgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Qml0UG9zXzcKKyAqCisgKiBTZWUgdHhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU183ICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNyAgMHg3MDAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNyAgMjgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU183IDMKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeV9wYXJhbWV0ZXJzXzIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzIgIDB4NDAwOTAxODgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18yIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMiAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5VHhTdGFydHVwCisgKgorICogUGh5IHdhaXQgdGltZSBiZWZvcmUgdHJhbnNtaXNzaW9uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYU1RBUlRVUCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYU1RBUlRVUCAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhTVEFSVFVQICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhTVEFSVFVQIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlUeExhdGVuY3kKKyAqCisgKiBQaHkgZGVsYXkgYmV0d2VlbiBEUEhZIGkvZiBhbmQgYWlyCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYTEFURU5DWSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYTEFURU5DWSAgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWExBVEVOQ1kgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWExBVEVOQ1kgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeVR4RmluaXNoCisgKgorICogUGh5IHdhaXQgdGltZSBiZWZvcmUgZGVhc3NlcnRpbmcgVFhfRU4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhGSU5JU0ggICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhGSU5JU0ggICAweGZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhGSU5JU0ggICAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYRklOSVNIICA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5VFJ4V2FpdAorICoKKyAqIFBoeSB3YWl0IHRpbWUgYmV0d2VlbiBUWF9FTi9SWF9FTgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUUlhXQUlUICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUUlhXQUlUICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRSWFdBSVQgICAgMjQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUUlhXQUlUICAgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5X3BhcmFtZXRlcnNfMworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzMgIDB4NDAwOTAxOGMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18zIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMyAgMHhmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeVJ4U3RhcnR1cAorICoKKyAqIFBoeSB3YWl0IHRpbWUgYmVmb3JlIHJlY2VpdmluZworICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWFNUQVJUVVAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWFNUQVJUVVAgIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYU1RBUlRVUCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYU1RBUlRVUCA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5UnhMYXRlbmN5CisgKgorICogUGh5IGRlbGF5IGJldHdlZW4gYWlyIGFuZCBEUEhZIGkvZgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWExBVEVOQ1kgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWExBVEVOQ1kgIDB4ZmYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhMQVRFTkNZICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhMQVRFTkNZIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlFbmFibGUKKyAqCisgKiBBc3NlcnRpbmcgdGhlIERQSFkgaW50ZXJmYWNlIHNpZ25hbHMgVFhfRU4gb3IgUlhfRU4gZG9lcyBub3QgdGFrZSBwbGFjZSB3aXRoaW4gdGhlIHRpbWUgcGh5RW5hYmxlIGFmdGVyIGFzc2VydGluZyB0aGUgc2lnbmFsIHBoeV9lbi4KKyAqIChyZXNvbHV0aW9uOiB+cykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUVOQUJMRSAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUVOQUJMRSAgICAgMHhmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUVOQUJMRSAgICAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlFTkFCTEUgICAgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfY29udHJvbF8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMCAgMHg0MDA5MDIwMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMCAgMHhmZmZmZmZmCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRGJnUnhUcmFuc3BhcmVudE1vZGUKKyAqCisgKiBJZiBzZXQsIFJ4IHBpcGUgaXMgZnVsbHkgc2V0IGluIHRyYW5zcGFyZW50IG1vZGUgKGZvciBkZWJ1ZyBwdXJwb3NlKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfREJHUlhUUkFOU1BBUkVOVE1PREUgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR1JYVFJBTlNQQVJFTlRNT0RFICAgICAgICAgICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR1JYVFJBTlNQQVJFTlRNT0RFICAgICAgICAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfREJHUlhUUkFOU1BBUkVOVE1PREUgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeEJlYWNvbk9ubHkKKyAqCisgKiBJZiBzZXQsIG9ubHkgQmVhY29ucyBmcmFtZXMgYXJlIGFjY2VwdGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQkVBQ09OT05MWSAgICAgICAgICAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJFQUNPTk9OTFkgICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJFQUNPTk9OTFkgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQkVBQ09OT05MWSAgICAgICAgICAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfUnhDb29yZFJlYWxpZ25Pbmx5CisgKgorICogSWYgc2V0LCBvbmx5IENvb3JkaW5hdG9yIFJlYWxpZ25tZW50IGZyYW1lcyBhcmUgYWNjZXB0ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhDT09SRFJFQUxJR05PTkxZICAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQ09PUkRSRUFMSUdOT05MWSAgICAgICAgICAgICAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQ09PUkRSRUFMSUdOT05MWSAgICAgICAgICAgICAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhDT09SRFJFQUxJR05PTkxZICAgICAgICAgICAgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X3JlYWRfYnVmX3B0cgorICoKKyAqIEluZGljYXRpb24gd2hlcmUgbmV3IGRhdGEgd2lsbCBiZSByZWFkCisgKiBBbGwgZm91ciBiaXRzIHNoYWxsIGJlIHVzZWQgd2hlbiB1c2luZyB0aGVzZSBwb2ludGVyIHZhbHVlcyAoMGQgLSAxNWQpLgorICogSG93ZXZlciwgdGhlIFJlY2VpdmUgUGFja2V0IGJ1ZmZlciBoYXMgYSBzaXplIG9mIDggZW50cmllcy4KKyAqIFNvIHJlYWRpbmcgdGhlIFJlY2VpdmUgUGFja2V0IGJ1ZmZlciBlbnRyaWVzIHNoYWxsIHVzZSB0aGUgbW9kOCBvZiB0aGUgcG9pbnRlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1JFQURfQlVGX1BUUiAgICAgICAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9SRUFEX0JVRl9QVFIgICAgICAgICAgICAgICAgMHg3OAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfUkVBRF9CVUZfUFRSICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9SRUFEX0JVRl9QVFIgICAgICAgICAgICAgICA0CisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0Rpc1J4RnJtUGVuZGluZ2NhCisgKgorICogV2hhbiB0aGUgY29udHJvbCByZWdpc3RlciBEaXNSeEZybVBlbmRpbmdDYSBpcyBzZXQsIHRoZSBub3RpZmljYXRpb24gb2YgdGhlIHJlY2VpdmVkIEZQIGJpdCB0byB0aGUgTE1BQyBDb250cm9sbGVyIGlzIGRpc2FibGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEZSTVBFTkRJTkdDQSAgICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhGUk1QRU5ESU5HQ0EgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYRlJNUEVORElOR0NBICAgICAgICAgICAgICA3CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhGUk1QRU5ESU5HQ0EgICAgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9EaXNSeEFja1JlcXVlc3RjYQorICoKKyAqIFdoZW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgRGlzUnhBY2tSZXF1ZXN0Y2EgaXMgc2V0IGFsbCBjb25zZXF1ZW50IGFjdGlvbnMgZm9yIGEgcmVjZWl2ZWQgQWNrbm93bGVkZ2UgUmVxdWVzdCBiaXQgYXJlIGRpc2FibGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEFDS1JFUVVFU1RDQSAgICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRVFVRVNUQ0EgICAgICAgICAgICAgIDB4MTAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEFDS1JFUVVFU1RDQSAgICAgICAgICAgICAgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVRVUVTVENBICAgICAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQWx3YXlzUGFzc0NyY2Vycm9yCisgKgorICogSWYgc2V0LCBhIEZDUyBlcnJvciB3aWxsIG5vdCBkcm9wIHRoZSBmcmFtZQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQ1JDRVJST1IgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0NSQ0VSUk9SICAgICAgICAgIDB4MjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQ1JDRVJST1IgICAgICAgICAgOQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NDUkNFUlJPUiAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRGlzRGF0YVJlcXVlc3RjYQorICoKKyAqIFdoZW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgRGlzRGF0YVJlcXVlc3RDYSBpcyBzZXQsIHRoZSBub3RpZmljYXRpb24gb2YgdGhlIHJlY2VpdmVkIERhdGEgUmVxdWVzdCBpcyBkaXNhYmxlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRElTREFUQVJFUVVFU1RDQSAgICAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU0RBVEFSRVFVRVNUQ0EgICAgICAgICAgICAgICAweDQwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRElTREFUQVJFUVVFU1RDQSAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRElTREFUQVJFUVVFU1RDQSAgICAgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzUmVzRnJhbWVWZXJzaW9uCisgKgorICogSWYgc2V0LCBhIHBhY2tldCB3aXRoIGEgcmVzZXJ2ZWQgRnJhbWVWZXJzaW9uIHNoYWxsIG5vdCBiZSBkcm9wcGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT04gICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTUkVTRlJBTUVWRVJTSU9OICAgMHg4MDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT04gICAxMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT04gIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQWx3YXlzUGFzc1dyb25nRFBBTklkCisgKgorICogSWYgcmVnaXN0ZXIgbWFjQWx3YXlzUGFzc1dyb25nRFBBTklkIGlzIHNldCwgcGFja2V0IHdpdGggYSB3cm9uZyBEZXN0aWFudGlvbiBQYW5JRCB3aWxsIG5vdCBiZSBkcm9wcGVkLgorICogSG93ZXZlciwgaW4gY2FzZSBvZiBhbiBGQ1MgZXJyb3IsIHRoZSBwYWNrZXQgaXMgZHJvcHBlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HRFBBTklEICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RQQU5JRCAgICAgICAweDEwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RQQU5JRCAgICAgICAxMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RQQU5JRCAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQWx3YXlzUGFzc1dyb25nREFkZHIKKyAqCisgKiBJZiBzZXQsIGEgcGFja2V0IHdpdGggYSB3cm9uZyBEQWRkciBpcyAgbm90IGRyb3BwZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HREFERFIgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RBRERSICAgICAgICAweDIwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RBRERSICAgICAgICAxMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RBRERSICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQWx3YXlzUGFzc0JlYWNvbldyb25nUEFOSWQKKyAqCisgKiBJZiB0aGUgY29udHJvbCByZWdpc3RlciBtYWNBbHdheXNQYXNzQmVhY29uV3JvbmdQQU5JZCBpcyBzZXQsIHRoZSBmcmFtZSBpcyBub3QgZHJvcHBlZCBpbiBjYXNlIG9mIGEgbWlzbWF0Y2ggaW4gUEFOLUlELCBpcnJlc3BlY3RpdmUgb2YgdGhlIHNldHRpbmcgb2YgUnhCZWFjb25Pbmx5LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0JFQUNPTldST05HUEFOSUQgIDB4NDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0JFQUNPTldST05HUEFOSUQgIDE0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0JFQUNPTldST05HUEFOSUQgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzVG9QYW5Db29yZGluYXRvcgorICoKKyAqIFdoZW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgbWFjQWx3YXlzUGFzc1RvUGFuQ29vcmRpbmF0b3IgaXMgc2V0LCB0aGUgZnJhbWUgaXMgbm90IGRyb3BwZWQgZHVlIHRvIGEgc3Bhbl9jb29yZF9lcnJvci4KKyAqIEhvd2V2ZXIsIGluIGNhc2Ugb2YgYW4gRkNTIGVycm9yLCB0aGUgcGFja2V0IGlzIGRyb3BwZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTVE9QQU5DT09SRElOQVRPUiAgMHg4MDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTVE9QQU5DT09SRElOQVRPUiAgMTUKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTVE9QQU5DT09SRElOQVRPUiAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQWx3YXlzUGFzc0ZybVR5cGUKKyAqCisgKiBUaGUgY29udHJvbCByZWdpc3RlcnMgbWFjQWx3YXlzUGFzc0ZybVR5cGVbNzowXSwgc2hhbGwgY29udHJvbCBpZiB0aGlzIEZyYW1lIFR5cGUgc2hhbGwgYmUgZHJvcHBlZC4KKyAqIElmIGEgYml0IGlzIHNldCwgdGhlIEZyYW1lIFR5cGUgY29ycmVzcG9uZGluZyB3aXRoIHRoZSBiaXQgcG9zaXRpb24gaXMgbm90IGRyb3BwZWQsIGV2ZW4gaW4gY2FzZSBvZiBhIENSQyBlcnJvci4KKyAqIEV4YW1wbGU6IGlmIGJpdCAxIGlzIHNldCwgRnJhbWUgVHlwZSAxIHNoYWxsIG5vdCBiZSBkcm9wcGVkLgorICogVGhlIGVycm9yIHNoYWxsIGJlIHJlcG9ydGVkIGluIHRoZSBSeCBtZXRhIGRhdGEKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0ZSTVRZUEUgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NGUk1UWVBFICAgICAgICAgICAweGZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0ZSTVRZUEUgICAgICAgICAgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0ZSTVRZUEUgICAgICAgICAgOAorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzV2FrZVVwCisgKgorICogSWYgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgbWFjQWx3YXlzUGFzc1dha2VVcCBpcyBzZXQsIHJlY2VpdmVkIFdha2UtIHVwIGZyYW1lcyBmb3IgdGhpcyBkZXZpY2UgYXJlIHB1dCBpbnRvIHRoZSBSeCBwYWNrZXQgYnVmZmVyIHdpdGhvdXQgbm90aWZ5aW5nIHRoZSBMTUFDIENvbnRyb2xsZXIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXQUtFVVAgICAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV0FLRVVQICAgICAgICAgICAgMHgxMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV0FLRVVQICAgICAgICAgICAgMjQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV0FLRVVQICAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1Bhc3NXYWtlVXAKKyAqCisgKiBJZiBzZXQsIFdha2VVcCBmcmFtZXMgd2lsbCBub3QgYmUgcmVwb3J0ZWQgYnV0IHdpbGwgYmUgcHV0IGludG8gdGhlIFJ4IGJ1ZmZlci4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFTU1dBS0VVUCAgICAgICAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1BBU1NXQUtFVVAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1BBU1NXQUtFVVAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1BBU1NXQUtFVVAgICAgICAgICAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjSW1wbGljaXRCcm9hZGNhc3QKKyAqCisgKiBJZiBzZXQsIEZyYW1lIFZlcnNpb24gMiBmcmFtZXMgd2l0aG91dCBEYWRkciBvciBEUEFOSWQgc2hhbGwgYmUgYWNjZXB0ZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0lNUExJQ0lUQlJPQURDQVNUICAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNJTVBMSUNJVEJST0FEQ0FTVCAgICAgICAgICAgMHg0MDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNJTVBMSUNJVEJST0FEQ0FTVCAgICAgICAgICAgMjYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNJTVBMSUNJVEJST0FEQ0FTVCAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0Rpc1J4QWNrUmVjZWl2ZWRjYQorICoKKyAqIElmIHNldCwgdGhlIExNQUMgY29udHJvbGxlciBzaGFsbCBpZ25vcmUgYWxsIGNvbnNlcXVlbnQgYWN0aW9ucyB1cG9uIGEgc2V0IEFSIGJpdCBpbiB0aGUgdHJhbnNtaXR0ZWQgZnJhbWUKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRUNFSVZFRENBICAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVDRUlWRURDQSAgICAgICAgICAgICAweDgwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVDRUlWRURDQSAgICAgICAgICAgICAyNworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVDRUlWRURDQSAgICAgICAgICAgIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2V2ZW50CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmCisgKiBBY2Nlc3MgbW9kZTogRS1SQ1cyIChldmVudCByZWFkL2NsZWFyIG9uIHdyaXRlIDEpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UICAweDQwMDkwMjA0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfRVZFTlQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9FVkVOVCAgMHhmCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfUnhTb2ZfZQorICoKKyAqIFNldCB3aGVuIFJYX1NPRiBoYXMgYmVlbiBkZXRlY3RlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfRSAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9FVkVOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfRSAgICAgICAgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfRSAgICAgICAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9FICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X292ZXJmbG93X2UKKyAqCisgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgUnggcGFja2V0IGJ1ZmZlciBoYXMgYW4KKyAqIG92ZXJmbG93bAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19FICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19FICAgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19FICAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX0UgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhfYnVmX2F2YWlsX2UKKyAqCisgKiBJbmRpY2F0ZXMgdGhhdCBhIG5ldyBwYWNrZXQgaXMgcmVjZWl2ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX0UgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9FVkVOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX0UgIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX0UgIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Ynl0ZV9lCisgKgorICogSW5kaWNhdGVzIHRoZSBmaXJzdCBieXRlIG9mIGEgbmV3IHBhY2tldCBpcyByZWNlaXZlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfRSAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfRSAgICAgICAgMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfRSAgICAgICAgMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9FICAgICAgIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X21hc2sKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGYKKyAqIEFjY2VzcyBtb2RlOiBFTS1SVyAoZXZlbnQgbWFzaykKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfTUFTSyAgMHg0MDA5MDIwOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX01BU0sgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9NQVNLICAweGYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeFNvZl9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJSeFNvZl9lIi4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfTSAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9NICAgICAgICAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9NICAgICAgICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYU09GX00gICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhfb3ZlcmZsb3dfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAiIHJ4X292ZXJmbG93X2UiLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19NICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX00gICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX00gICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfT1ZFUkZMT1dfTSAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9idWZfYXZhaWxfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAicnhfYnVmX2F2YWlsX2UiLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfTSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRl9BVkFJTF9NICAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRl9BVkFJTF9NICAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX00gMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeGJ5dGVfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAicnhieXRlX2UiLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfTSAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9NICAgICAgICAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9NICAgICAgICAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCWVRFX00gICAgICAgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfc3RhdHVzCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVUyAgMHg0MDA5MDIwYworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVUyAgMHgxZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2J1ZmZfaXNfZnVsbAorICoKKyAqIEluZGljYXRlcyB0aGF0IHRoZSBSeCBwYWNrZXQgYnVmZmVyIGlzIGZ1bGwKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMICAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTEwgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMICAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfd3JpdGVfYnVmX3B0cgorICoKKyAqIEluZGljYXRpb24gd2hlcmUgbmV3IGRhdGEgd2lsbCBiZSB3cml0dGVuLgorICogQWxsIGZvdXIgYml0cyBzaGFsbCBiZSB1c2VkIHdoZW4gdXNpbmcgdGhlc2UgcG9pbnRlciB2YWx1ZXMgKDBkIC0gMTVkKS4KKyAqIEhvd2V2ZXIsIHRoZSBSZWNlaXZlIFBhY2tldCBidWZmZXIgaGFzIGEgc2l6ZSBvZiA4IGVudHJpZXMuCisgKiBTbyByZWFkaW5nIHRoZSBSZWNlaXZlIFBhY2tldCBidWZmZXIgZW50cmllcyBzaGFsbCB1c2UgdGhlIG1vZDggb2YgdGhlIHBvaW50ZXIgdmFsdWVzLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9XUklURV9CVUZfUFRSICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9XUklURV9CVUZfUFRSICAweDFlCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9XUklURV9CVUZfUFRSICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfV1JJVEVfQlVGX1BUUiA0CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lU25hcHNob3RWYWwKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMICAweDQwMDkwMjEwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lU25hcHNob3RWYWwKKyAqCisgKiBUaGUgU3RhdHVzIHJlZ2lzdGVyIFN5bWJvbFRpbWVTbmFwc2hvdFZhbCBpbmRpY2F0ZXMgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgVGltZVN0YW1wIGdlbmVyYXRvci4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfc3RhdHVzX2RlbHRhCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxCisgKiBBY2Nlc3MgbW9kZTogRC1SQ1cgKGRlbHRhIHJlYWQvY2xlYXIgb24gd3JpdGUgMSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTX0RFTFRBICAweDQwMDkwMjIwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTX0RFTFRBIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTX0RFTFRBICAweDEKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9idWZmX2lzX2Z1bGxfZAorICoKKyAqIERlbHRhIGJpdCBvZiBzdGF0dXMgInJ4X2J1ZmZfaXNfZnVsbCIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMX0QgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9EICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9EICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMX0QgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfc3RhdHVzX21hc2sKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEKKyAqIEFjY2VzcyBtb2RlOiBETS1SVyAoZGVsdGEgbWFzaykKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTX01BU0sgIDB4NDAwOTAyMjQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfTUFTSyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVU19NQVNLICAweDEKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9idWZmX2lzX2Z1bGxfbQorICoKKyAqIE1hc2sgYml0IG9mIHN0YXR1cyAicnhfYnVmZl9pc19mdWxsIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTExfTSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVU19NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTExfTSAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTExfTSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9NIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2NvbnRyb2xfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDQzNTAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4N2ZmMQorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DT05UUk9MXzAgIDB4NDAwOTAyNDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DT05UUk9MXzAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DT05UUk9MXzAgIDB4N2ZmMQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0RiZ1R4VHJhbnNwYXJlbnRNb2RlCisgKgorICogSWYgMSwgdGhlIE1QRFUgb2N0ZXRzIHBhc3MgdHJhbnNwYXJlbnRseSB0aHJvdWdoIHRoZSBNQUMgaW4gdGhlIHRyYW5zbWl0IGRpcmVjdGlvbiAoZm9yIGRlYnVnIHB1cnBvc2UpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdUWFRSQU5TUEFSRU5UTU9ERSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfREJHVFhUUkFOU1BBUkVOVE1PREUgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfREJHVFhUUkFOU1BBUkVOVE1PREUgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdUWFRSQU5TUEFSRU5UTU9ERSAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjTWF4QkUKKyAqCisgKiBNYXhpbXVtIEJhY2tvZmYgRXhwb25lbnQgKHJhbmdlIDMtOCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQkUgICAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWEJFICAgICAgICAgICAgICAweGYwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhCRSAgICAgICAgICAgICAgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWEJFICAgICAgICAgICAgIDQKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNNaW5CRQorICoKKyAqIE1pbmltdW0gQmFja29mZiBFeHBvbmVudCAocmFuZ2UgMC1tYWNNYXhCRSkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUlOQkUgICAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01JTkJFICAgICAgICAgICAgICAweGYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUlOQkUgICAgICAgICAgICAgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNSU5CRSAgICAgICAgICAgICA0CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjTWF4Q1NNQUJhY2tvZmZzCisgKgorICogTWF4aW11bSBudW1iZXIgb2YgQ1NNQS1DQSBiYWNrb2ZmcworICogKHJhbmdlIDAtNSkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQ1NNQUJBQ0tPRkZTICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWENTTUFCQUNLT0ZGUyAgICAweDcwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWENTTUFCQUNLT0ZGUyAgICAxMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWENTTUFCQUNLT0ZGUyAgIDMKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2Z0ZGZfY2UKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBFQy1SIChjb21wb3NpdGUgZXZlbnQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ0UgIDB4NDAwOTAyNTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DRSAgMHgzZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfZnRkZl9jZQorICoKKyAqIENvbXBvc2l0ZSBzZXJ2ZWljZSByZXF1ZXN0IGZyb20gZnRkZiBtYWNybyAoc2VlIEZSMDQwMCBpbiB2NDAuMTAwLjIuNDEucGRmKQorICogQml0IDAgPSB1bnVzZWQKKyAqIEJpdCAxID0gcnggaW50ZXJydXB0cworICogQml0IDIgPSB0eCBpbnRlcnJ1cHRzCisgKiBCaXQgMyA9IG1pc2NlbGFuZW91cyBpbnRlcnJ1cHRzCisgKiBCaXQgNCA9IHR4IGludGVycnVwdHMgZnJvbSBwYWdlcyBiZWxvdyAoMHgzIGFuZCAweDQpCisgKiBCaXQgNSA9IFJlc2VydmVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ0UgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFICAweDNmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DRSA2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9mdGRmX2NtCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgzZgorICogQWNjZXNzIG1vZGU6IEVDTS1SVyAoY29tcG9zaXRlIGV2ZW50IG1hc2spCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ00gIDB4NDAwOTAyNTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NNIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTSAgMHgzZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfZnRkZl9jbQorICoKKyAqIG1hc2sgYml0cyBmb3IgZnRmX2NlCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ00gIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NNCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NNICAweDNmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NNICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTSA2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW5jVGltZVN0YW1wVGhyCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVEhSICAweDQwMDkwMzA0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBUaHIKKyAqCisgKiBUaHJlc2hvbGQgZm9yIHN5bmNocm9uaXplIFRTIGdlbi4KKyAqIE5vdGUgdGhhdCBkdWUgdG8gaW1wbGVtZW50YXRpb24gdGhpcyByZWdpc3RlciBtYXkgb25seSBiZSB3cml0dGVuIG9uY2UgcGVyIHR3byBMUF9DTEsgcGVyaW9kcy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVEhSIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW5jVGltZVN0YW1wVmFsCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVkFMICAweDQwMDkwMzA4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFZBTCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBWYWwKKyAqCisgKiBWYWx1ZSB0byBzeW5jIFRTIGdlbiB3aXRoLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVkFMICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFZBTAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFZBTCAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFZBTCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBQaGFzZVZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMICAweDQwMDkwMzIwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMICAweGZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW5jVGltZVN0YW1wUGhhc2VWYWwKKyAqCisgKiBWYWx1ZSB0byBzeW5jIFRTIGdlbiBwaGFzZSB3aXRoaW4gYSBzeW1ib2wgd2l0aC4KKyAqIFBsZWFzZSBub3RlIHRoZSArMSBjb3JyZWN0aW9uIG5lZWRlZCBmb3IgbW9zdCBhY2N1cmF0ZSByZXN1bHQgKCswLjUgaXMgdGhhbiB0aGUgYXZlcmFnZSBlcnJvciwgcmVzdWx0aW5nIGlzIGEganVzdCB0b28gZmFzdCBjbG9jaykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBQSEFTRVZBTCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBQSEFTRVZBTAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMICAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdGltZXJfY29udHJvbF8xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgyCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVSX0NPTlRST0xfMSAgMHg0MDA5MDMwYworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVSX0NPTlRST0xfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVSX0NPTlRST0xfMSAgMHgyCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcEVuYQorICoKKyAqIElmIHNldCwgdGhlIFRpbWVTdGFtcFRociBpcyBlbmFibGVkIHRvIGdlbmVyYXRlIGEgc3luYyBvZiB0aGUgVFMgZ2VuLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QRU5BICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVJfQ09OVFJPTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QRU5BICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBFTkEgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QRU5BIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1R4U3RkQWNrRnJtQ250CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RYU1REQUNLRlJNQ05UICAweDQwMDkwMzEwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFhTVERBQ0tGUk1DTlQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjVHhTdGRBY2tGcm1DbnQKKyAqCisgKiBTdGFuZGFyZCBBY2tub3dsZWRnbWVudCBmcmFtZXMgdHJhbnNtaXR0ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFhTVERBQ0tGUk1DTlQgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFhTVERBQ0tGUk1DTlQgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RYU1REQUNLRlJNQ05UICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFhTVERBQ0tGUk1DTlQgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1J4U3RkQWNrRnJtT2tDbnQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVCAgMHg0MDA5MDMxNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYU1REQUNLRlJNT0tDTlQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNSeFN0ZEFja0ZybU9rQ250CisgKgorICogU3RhbmRhcmQgQWNrbm93bGVkZ21lbnQgZnJhbWVzIHJlY2VpdmVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYU1REQUNLRlJNT0tDTlQgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUnhBZGRyRmFpbEZybUNudAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWEFERFJGQUlMRlJNQ05UICAweDQwMDkwMzE4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1J4QWRkckZhaWxGcm1DbnQKKyAqCisgKiBGcmFtZXMgZGlzY2FyZGVkIGR1ZSB0byBpbmNvcnJlY3QgYWRkcmVzcyBvciBQQU4gSWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWEFERFJGQUlMRlJNQ05UIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNSeFVuc3VwRnJtQ250CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVU5TVVBGUk1DTlQgIDB4NDAwOTAzMWMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFVOU1VQRlJNQ05UIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhVTlNVUEZSTUNOVCAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUnhVbnN1cEZybUNudAorICoKKyAqIEZyYW1lcyB3aGljaCBkbyBwYXNzIHRoZSBjaGVja3MgYnV0IGFyZSBub3Qgc3VwcG9ydGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVU5TVVBGUk1DTlQgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFVOU1VQRlJNQ05UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFVOU1VQRlJNQ05UICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFVOU1VQRlJNQ05UICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhVTlNVUEZSTUNOVCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjRkNTRXJyb3JDb3VudAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UICAweDQwMDkwMzQwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0ZDU0VSUk9SQ09VTlQgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0ZDU0Vycm9yQ291bnQKKyAqCisgKiBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IHdlcmUgZGlzY2FyZGVkIGR1ZSB0byBhbiBpbmNvcnJlY3QgRkNTLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVCAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0ZDU0VSUk9SQ09VTlQgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MTA2ZGYKKyAqIEFjY2VzcyBtb2RlOiBPUy1XIChvbmUtc2hvdCAtIHdyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQgIDB4NDAwOTAzNjAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQgIDB4MTA2ZGYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfY29udHJvbAorICoKKyAqIExtYWNSZXNldF9jb250cm9sOiBBICcxJyBSZXNldHMgTE1BQyBDb250cm9sbGVyIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9DT05UUk9MICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9DT05UUk9MICAgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPTlRST0wgICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9DT05UUk9MICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfcngKKyAqCisgKiBMbWFjUmVzZXRfcng6IEEgJzEnIFJlc2V0cyBMTUFDIHJ4IHBpcGVsaW5lIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9SWCAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9SWCAgICAgICAgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1JYICAgICAgICAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9SWCAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfdHgKKyAqCisgKiBMbWFjUmVzZXRfdHg6IEEgJzEnIFJlc2V0cyBMTUFDIHR4IHBpcGVsaW5lIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9UWCAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9UWCAgICAgICAgIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RYICAgICAgICAgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9UWCAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfYWhiCisgKgorICogTG1hY1Jlc2V0X2FoYjogQSAnMScgUmVzZXRzIExNQUMgYWhiIGludGVyZmFjZSAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQUhCICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQUhCICAgICAgICAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9BSEIgICAgICAgIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQUhCICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1Jlc2V0X29yZWcKKyAqCisgKiBMbWFjUmVzZXRfb3JlZzogQSAnMScgUmVzZXRzIExNQUMgb25fb2ZmIHJlZ21hcCAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICoKKyAqICMkTG1hY1Jlc2V0X2FyZWdAb25fb2ZmX3JlZ21hcAorICogI0xtYWNSZXNldF9hcmVnOiBBICcxJyBSZXNldHMgTE1BQyBhbHdheXNfb24gcmVnbWFwIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9PUkVHICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9PUkVHICAgICAgIDB4MTAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9PUkVHICAgICAgIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfT1JFRyAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1Jlc2V0X3RzdGltCisgKgorICogTG1hY1Jlc2V0X3RzdGltOiBBICcxJyBSZXNldHMgTE1BQyB0aW1lc3RhbXAgdGltZXIgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RTVElNICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RTVElNICAgICAgMHg0MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RTVElNICAgICAgNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9UU1RJTSAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfc2VjCisgKgorICogTG1hY1Jlc2V0X3NlYzogQSAnMScgUmVzZXRzIExNQUMgc2VjdXJpdHkgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqCisgKiAjJExtYWNSZXNldF93dXRpbUBvbl9vZmZfcmVnbWFwCisgKiAjTG1hY1Jlc2V0X3d1dGltOiBBICcxJyBSZXNldHMgTE1BQyB3YWtlLXVwIHRpbWVyIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9TRUMgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9TRUMgICAgICAgIDB4ODAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9TRUMgICAgICAgIDcKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfU0VDICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1Jlc2V0X2NvdW50CisgKgorICogTG1hY1Jlc2V0X2NvdW50OiBBICcxJyBSZXNldHMgTE1BQyBtYWMgY291bnRlcnMgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPVU5UICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPVU5UICAgICAgMHgyMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9DT1VOVCAgICAgIDkKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQ09VTlQgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1Jlc2V0X3RpbWN0cmwKKyAqCisgKiBMbWFjUmVzZXRfY291bnQ6IEEgJzEnIFJlc2V0cyBMTUFDIHRpbWluZyBjb250cm9sIGJsb2NrIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9USU1DVFJMICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9USU1DVFJMICAgIDB4NDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVElNQ1RSTCAgICAxMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9USU1DVFJMICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjR2xvYlJlc2V0X2NvdW50CisgKgorICogSWYgc2V0LCB0aGUgTE1BQyBwZXJmb3JtYW5jZSBhbmQgdHJhZmZpYyBjb3VudGVycyB3aWxsIGJlIHJlc2V0LgorICogVXNlIHRoaXMgcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWxseSByZXNldCB0aGVzZSBjb3VudGVycy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ0dMT0JSRVNFVF9DT1VOVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ0dMT0JSRVNFVF9DT1VOVCAgMHgxMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ0dMT0JSRVNFVF9DT1VOVCAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDR0xPQlJFU0VUX0NPVU5UIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWVUaHIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIgIDB4NDAwOTAzODAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZVRocgorICoKKyAqIFN5bWJvbHRpbWUgVGhyZXNob2xkIHRvIGdlbmVyYXRlIGEgZ2VuZXJhbCBpbnRlcnJ1cHQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lMlRocgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFIgIDB4NDAwOTAzODQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lMlRocgorICoKKyAqIFN5bWJvbHRpbWUgMiBUaHJlc2hvbGQgdG8gZ2VuZXJhdGUgYSBnZW5lcmFsIGludGVycnVwdAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFIgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfRGVidWdDb250cm9sCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfREVCVUdDT05UUk9MICAweDQwMDkwMzkwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfREVCVUdDT05UUk9MIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfREVCVUdDT05UUk9MICAweDFmZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2RiZ19yeF9pbnB1dAorICoKKyAqIElmIHNldCwgdGhlIFJ4IGRlYnVnIGludGVyZmFjZSB3aWxsIGJlIHNlbGVjdGVkIGFzIGlucHV0IGZvciB0aGUgUnggcGlwZWxpbmUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR19SWF9JTlBVVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0RFQlVHQ09OVFJPTAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX1JYX0lOUFVUICAweDEwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX1JYX0lOUFVUICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX1JYX0lOUFVUIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9kYmdfY29udHJvbAorICoKKyAqIENvbnRyb2wgb2YgdGhlIGRlYnVnIGludGVyZmFjZQorICoKKyAqIGRiZ19jb250cm9sIDB4MDAgTm90IHVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDcgLSAwID0gYWxsICcwJworICoKKyAqIGRiZ19jb250cm9sIDB4MDEgTGVnYWN5IGRlYnVnIG1vZGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDcgPSBlZF9yZXF1ZXN0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ID0gZ2VuX2lycQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgPSBwaHlfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSA9IHJ4X3NvZgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCA9IHJ4X2VvZgorICoKKyAqIGRiZ19jb250cm9sIDB4MDIgQ2xvY2tzIGFuZCByZXNldAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNy0zID0gIjAwMDAwIgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gbHBfY2xrIGRpdmlkZSBieSAyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSBtYWNfY2xrIGRpdmlkZSBieSAyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBoY2xrIGRpdmlkZWQgYnkgMgorICoKKyAqIGRiZ19jb250cm9sIGluIHJhbmdlIDB4MDIgLSAweDBmIE5vdCB1c2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA3IC0gMCA9IGFsbCAnMCcKKyAqCisgKiBkYmdfY29udHJvbCBpbiByYW5nZSAweDEwIC0gMHgxZiBEZWJ1ZyByeCBwaXBlbGluZQorICoKKyAqICAgICAgMHgxMAlSeCBwaHkgc2lnbmFscworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfZW5hYmxlIHRvd2FyZHMgdGhlIHJ4X3BpcGVsaW5lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSByeF9zb2YgZnJvbSBwaHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUtMiA9IHJ4X2RhdGEgZnJvbSBwaHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IHJ4X2VvZiB0byBwaHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X3NvZiBldmVudCBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqCisgKiAgICAgIDB4MTEJUnggc29mIGFuZCBsZW5ndGgKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHJ4X3NvZgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNi0wID0gcnhfbWFjX2xlbmd0aCBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqCisgKiAgICAgIDB4MTIJUnggbWFjIHRpbWluZyBvdXRwdXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IEVuYWJsZSBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IFNvcCAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IEVvcCAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgICA9IENyYyAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IEVyciAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IERyb3AgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IEZvcndhcmQgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSByeF9zb2YKKyAqCisgKiAgICAgIDB4MTMJUnggbWFjIGZyYW1lIHBhcnNlciBvdXRwdXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IEVuYWJsZSBmcm9tIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IFNvcCAgICBmcm9tICBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSBFb3AgICAgZnJvbSAgbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gQ3JjICAgIGZyb20gIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IEVyciAgICBmcm9tICBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSBEcm9wICAgZnJvbSAgbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gRm9yd2FyZCBmcm9tIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X3NvZgorICoKKyAqICAgICAgMHgxNAlSeCBzdGF0dXMgdG8gVW1hYworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfZnJhbWVfc3RhdF91bWFjLmNyYzE2X2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSByeF9mcmFtZV9zdGF0X3VtYWMucmVzX2ZybV90eXBlX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSByeF9mcmFtZV9zdGF0X3VtYWMucmVzX2ZybV92ZXJzaW9uX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ICAgPSByeF9mcmFtZV9zdGF0X3VtYWMuZHBhbmlkX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzICAgPSByeF9mcmFtZV9zdGF0X3VtYWMuZGFkZHJfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5zcGFuaWRfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5pc3Bhbl9jb29yZF9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfc29mCisgKgorICogICAgICAweDE1CVJ4IHN0YXR1cyB0byBsbWFjCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSByeF9mcmFtZV9zdGF0LnBhY2tldF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gcnhfZnJhbWVfc3RhdC5yeF9zb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gcnhfZnJhbWVfc3RhdC5yeF9lb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gcnhfZnJhbWVfc3RhdC53YWtldXBfZnJhbWUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMtMSA9IHJ4X2ZyYW1lX3N0YXQuZnJhbWVfdHlwZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfZnJhbWVfc3RhdC5yeF9zcW5yX3ZhbGlkCisgKgorICogICAgICAweDE2CVJ4IGJ1ZmZlciBjb250cm9sCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3LTQgPSBwcm92X2Zyb21fc3dpby5yeF9yZWFkX2J1Zl9wdHIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMtMCA9IHN0YXRfdG9fc3dpby5yeF93cml0ZV9idWZfcHRyCisgKgorICogICAgICAweDE3CVJ4IGludGVycnVwdHMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHN0YXRfdG9fc3dpby5yeF9idWZfYXZhaWxfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gc3RhdF90b19zd2lvLnJ4X2J1Zl9mdWxsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSBzdGF0X3RvX3N3aW8ucnhfYnVmX292ZXJmbG93X2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgICA9IHN0YXRfdG9fc3dpby5yeF9zb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyAgID0gc3RhdF90b19zd2lvLnJ4Ynl0ZV9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSByeF9mcmFtZV9jdHJsLnJ4X2VuYWJsZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gcnhfZW9mCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSByeF9zb2YKKyAqCisgKiAgICAgIDB4MTgJZGlhZ25vc2VfYnVzIGJpdCA3LTMgPQorICogICAgICAgICAgICAgICAgICAgICAgUHJ0IHN0YXRlbWVudHMgbWFjIGZyYW1lIHBhcnNlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgMCBSZXNldAorICogICAgICAgICAgICAgICAgICAgICAgMSBNdWx0aXB1cnBvc2UgZnJhbWUgd2l0aCBubyBkcGFuaWQgYW5kIG1hY0ltcGxpY2l0QnJvYWRjYXN0IGlzIGZhbHNlIGFuZCBub3QgcGFuIGNvb29yZGluYXRvciBkcm9wcGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAyIE11bHRpcHVycG9zZSBmcmFtZSB3aXRoIG5vIGRlc3QgYWRkcmVzcyBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QgaXMgZmFsc2UgYW5kIG5vdCBwYW4gY29vb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDMgUlggdW5zdXBwb3J0ZWQgZnJhbWUgdHlwZSBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgICAgICAgNCBSWCBub24gQmVhY29uIGZyYW1lIGRldGVjdGVkIGFuZCBkcm9wcGVkIGluIFJ4QmVhY29uT25seSBtb2RlCisgKiAgICAgICAgICAgICAgICAgICAgICA1IFJYIGZyYW1lIHBhc3NlZCBkdWUgdG8gbWFjQWx3YXlzUGFzc0ZybVR5cGUgc2V0CisgKiAgICAgICAgICAgICAgICAgICAgICA2IFJYIHVuc3VwcG9ydGVkIGRhX21vZGUgPSAwMSBmb3IgZnJhbWVfdmVyc2lvbiAweDAtIGRldGVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICA3IFJYIHVuc3VwcG9ydGVkIHNhX21vZGUgPSAwMSBmb3IgZnJhbWVfdmVyc2lvbiAweDAtIGRldGVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICA4IERhdGEgb3IgY29tbWFuZCBmcmFtZSB3aXRoIG5vIGRwYW5pZCBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QgaXMgZmFsc2UgYW5kIG5vdCBwYW4gY29vb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDkgRGF0YSBvciBjb21tYW5kIGZyYW1lIHdpdGggbm8gZGVzdCBhZGRyZXNzIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdCBpcyBmYWxzZSBhbmQgbm90IHBhbiBjb29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMTAgUlggdW5zdXBwb3J0ZWQgZnJhbWVfdmVyc2lvbiBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgICAgICAgMTEgTXVsdGlwdXJwb3NlIGZyYW1lIHdpdGggbm8gZHBhbmlkIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdCBpcyBmYWxzZSBhbmQgbm90IHBhbiBjb29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMTIgTXVsdGlwdXJwb3NlIGZyYW1lIHdpdGggbm8gZGVzdCBhZGRyZXNzIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdCBpcyBmYWxzZSBhbmQgbm90IHBhbiBjb29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMTMgUlggdW5zdXBwb3J0ZWQgZnJhbWVfdmVyc2lvbiBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgICAgICAgMTQgUlggRGVzdGluYXRpb24gUEFOIElkIGNoZWNrIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTUgUlggRGVzdGluYXRpb24gYWRkcmVzcyAoMSBieXRlKSAgY2hlY2sgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxNiBSWCBEZXN0aW5hdGlvbiBhZGRyZXNzICgyIGJ5dGUpICBjaGVjayBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE3IFJYIERlc3RpbmF0aW9uIGFkZHJlc3MgKDggYnl0ZSkgIGNoZWNrIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTggUlggU291cmNlIFBBTiBJZCBjaGVjayBmb3IgQmVhY29uIGZyYW1lcyBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE5IFJYIFNvdXJjZSBQQU4gSWQgY2hlY2sgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAyMCBBdXhpbGlhcnkgU2VjdXJpdHkgSGVhZGVyIHNlY3VyaXR5IGNvbnRyb2wgd29yZCByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgMjEgQXV4aWxpYXJ5IFNlY3VyaXR5IEhlYWRlciB1bnN1cHBvcnRlZF9sZWdhY3kgcmVjZWl2ZWQgZnJhbWVfdmVyc2lvbiAwMAorICogICAgICAgICAgICAgICAgICAgICAgMjIgQXV4aWxpYXJ5IFNlY3VyaXR5IEhlYWRlciB1bnN1cHBvcnRlZF9sZWdhY3kgc2VjdXJpdHkgZnJhbWVfdmVyc2lvbiAxMQorICogICAgICAgICAgICAgICAgICAgICAgMjMgQXV4aWxpYXJ5IFNlY3VyaXR5IEhlYWRlciBmcmFtZSBjb3VudGVyIGZpZWxkIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAyNCBBdXhpbGlhcnkgU2VjdXJpdHkgSGVhZGVyIEtleSBpZGVudGlmaWVyIGZpZWxkIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAyNSBFcnJvcmVkIERlc3RpbmF0aW9uICBXYWtldXAgZnJhbWUgZm91bmQgc2VuZCB0byBVbWFjLCBub3QgaW5kaWNhdGVkIHRvd2FyZHMgbG1hYyBjb250cm9sbGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAyNiBNYWNBbHdheXNQYXNzV2FrZVVwRnJhbWVzID0gMSwgV2FrZXVwIGZyYW1lIGZvdW5kIHNlbmQgdG8gVW1hYywgbm90IGluZGljYXRlZCB0b3dhcmRzIGxtYWMgY29udHJvbGxlcgorICogICAgICAgICAgICAgICAgICAgICAgMjcgV2FrZXVwIGZyYW1lIGZvdW5kIHNlbmQgdG8gbG1hYyBjb250cm9sbGVyIGFuZCBVbWFjCisgKiAgICAgICAgICAgICAgICAgICAgICAyOCBXYWtldXAgZnJhbWUgZm91bmQgc2VuZCB0byBsbWFjIGNvbnRyb2xsZXIsIGRyb3BwZWQgdG93YXJkcyBVbWFjCisgKiAgICAgICAgICAgICAgICAgICAgICAyOSBDb21tYW5kIGZyYW1lIHdpdGggZGF0YV9yZXF1ZXN0IGNvbW1hbmQgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDMwIENvb3JkaW5hdG9yIHJlYWxpZ25tZW50IGZyYW1lIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAzMSBOb3QgVXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMi0wID0gZnJhbWVfdHlwZQorICoKKyAqICAgICAgMHgxOQlkaWFnbm9zZV9idXMgYml0IDctNCA9CisgKiAgICAgICAgICAgICAgICAgICAgICBGcmFtZXN0YXRlcyBtYWMgZnJhbWUgcGFyc2VyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAwIGlkbGVfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDEgZnJfY3RybF9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMiBmcl9jdHJsX2xvbmdfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDMgc2VxX25yX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA0IGRlc3RfcGFuX2lkX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA1IGRlc3RfYWRkcl9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgNiBzcmNfcGFuX2lkX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA3IHNyY19hZGRyX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA4IGF1eF9zZWNfaGRyX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA5IGhkcl9pZV9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMTAgcHlsZF9pZV9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMTEgaWdub3JlX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAxMi0xNiAgTm90IHVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IHJ4X21hY19zb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMi0wID0gZnJhbWVfdHlwZQorICoKKyAqICAgICAgMHgxYS0weDFmCU5vdCBVc2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA3IC0gMCA9IGFsbCAnMCcKKyAqCisgKiBkYmdfY29udHJvbCBpbiByYW5nZSAweDIwIC0gMHgyZiBEZWJ1ZyB0eCBwaXBlbGluZQorICogICAgICAweDIwCVRvcCBhbmQgYm90dG9tIGludGVyZmFjZXMgdHggZGF0YXBhdGgKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X21hY19sZF9zdHJiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSB0eF9tYWNfZHJkeQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gdHhfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQtMSA9IHR4X2RhdGEKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHN5bWJvbF9lbmEKKyAqCisgKiAgICAgIDB4MjEJQ29udHJvbCBzaWduYWxzIGZvciB0eCBkYXRhcGF0aAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gVHhUcmFuc3BhcmVudE1vZGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IGN0cmxfbG1hY190b190eC5DUkMxNl9lbmEKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl9hY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IGN0cmxfbG1hY190b190eC5nZW5fd3UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDItMSA9IGN0cmxfbG1hY190b190eC50eF9mcmFtZV9ubWJyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSB0eF92YWxpZAorICoKKyAqICAgICAgMHgyMglDb250cm9sIHNpZ25hbHMgZm9yIHdha2V1cCBmcmFtZXMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl93dQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNS0xID0gY3RybF9sbWFjX3RvX3R4Lmdlbl93dV9SWig0IERPV05UTyAwKQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gY3RybF90eF90b19sbWFjLnR4X3J6X3plcm8KKyAqCisgKiAgICAgIDB4MjMJRGF0YSBzaWduYWxzIGZvciB3YWtldXAgZnJhbWUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl93dQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gdHhfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQtMSA9IHR4X2RhdGEKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IGN0cmxfdHhfdG9fbG1hYy50eF9yel96ZXJvCisgKgorICogICAgICAweDI0CURhdGEgYW5kIGNvbnRyb2wgYWNrIGZyYW1lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBjdHJsX2xtYWNfdG9fdHgudHhfc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IGN0cmxfbG1hY190b190eC5nZW5fYWNrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gdHhfZGF0YQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gc3ltYm9sX2VuYQorICoKKyAqICAgICAgMHgyNS0weDJmCU5vdCBVc2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA3IC0gMCA9IGFsbCAnMCcKKyAqCisgKiBkYmdfY29udHJvbCBpbiByYW5nZSAweDMwIC0gMHgzZiBEZWJ1ZyBsbWFjX2NvbnRyb2xsZXIKKyAqICAgICAgMHgzMAlQaHkgc2lnbmFscworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQtMSA9IHBoeWF0dHIoMyBkb3dudG8gMCkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IGVkX3JlcXVlc3QKKyAqCisgKiAgICAgIDB4MzEJUGh5IGVuYWJsZSBhbmQgZGV0YWlsZWQgc3RhdGVtYWNoaW5lIGluZm8KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHBoeV9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNi0wID0gcHJ0IHN0YXRlbWVudHMgZGV0YWlsZWQgc3RhdGVtYWNoaW5lIGluZm8KKyAqICAgICAgICAgICAgICAgICAgICAgIDAgUmVzZXQKKyAqICAgICAgICAgICAgICAgICAgICAgIDEgTUFJTl9TVEFURV9JRExFIFRYX0FDS25vd2xlZGdlbWVudCBmcmFtZSBza2lwIENTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgIDIgTUFJTl9TVEFURV9JRExFIDogV2FrZS1VcCBmcmFtZSByZXNpZGVzIGluIGJ1ZmZlciBubworICogICAgICAgICAgICAgICAgICAgICAgMyBNQUlOX1NUQVRFX0lETEUgOiBUWCBmcmFtZSBpbiBUU0NIIG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDQgTUFJTl9TVEFURV9JRExFIDogVFggZnJhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgIDUgTUFJTl9TVEFURV9JRExFIDogZ290byBTSU5HTEVfQ0NBCisgKiAgICAgICAgICAgICAgICAgICAgICA2IE1BSU5fU1RBVEVfSURMRSA6IGdvdG8gRW5lcmd5IERldGVjdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgNyBNQUlOX1NUQVRFX0lETEUgOiBnb3RvIFJYCisgKiAgICAgICAgICAgICAgICAgICAgICA4IE1BSU5fU1RBVEVfSURMRSBkZS1hc3NlcnQgcGh5X2VuIHdhaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICA5IE1BSU5fU1RBVEVfSURMRSBTdGFydCBwaHlfZW4gYW5kIGFzc2VydCBwaHlfZW4gd2FpdCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMTAgTUFJTl9TVEFURV9DU01BX0NBX1dBSVRfRk9SX01FVEFEQVRBICBmcmFtZW5yIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDExIE1BSU5fU1RBVEVfQ1NNQV9DQSBmcmFtZW5yIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDEyIE1BSU5fU1RBVEVfQ1NNQV9DQSBzdGFydCBDU01BX0NBCisgKiAgICAgICAgICAgICAgICAgICAgICAxNCBNQUlOX1NUQVRFX0NTTUFfQ0Egc2tpcCBDU01BX0NBCisgKiAgICAgICAgICAgICAgICAgICAgICAxNSBNQUlOX1NUQVRFX1dBSVRfRk9SX0NTTUFfQ0EgY3NtYV9jYSBGYWlsZWQgZm9yIENTTCBtb2RlCisgKiAgICAgICAgICAgICAgICAgICAgICAxNiBNQUlOX1NUQVRFX1dBSVRfRk9SX0NTTUFfQ0EgY3NtYV9jYSBGYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE3IE1BSU5fU1RBVEVfV0FJVF9GT1JfQ1NNQV9DQSBjc21hX2NhIFN1Y2Nlc3MKKyAqICAgICAgICAgICAgICAgICAgICAgIDE4IE1BSU5fU1RBVEVfU0lOR0xFX0NDQSBjY2EgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxOSBNQUlOX1NUQVRFX1NJTkdMRV9DQ0EgY2NhIG9rCisgKiAgICAgICAgICAgICAgICAgICAgICAyMCBNQUlOX1NUQVRFX1dBSVRfQUNLX0RFTEFZIHdhaXQgdGltZSBlbGFwc2VkCisgKiAgICAgICAgICAgICAgICAgICAgICAyMSBNQUlOX1NUQVRFX1dBSVQgQUNLX0RFTEFZIDogU2VuZCBBY2sgaW4gVFNDSCBtb2RlCisgKiAgICAgICAgICAgICAgICAgICAgICAyMiBNQUlOX1NUQVRFX1dBSVQgQUNLX0RFTEFZIDogQWNrIG5vdCBzY2hlZHVsZWQgaW4gdGltZSBpbiBUU0NIIG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDIzIE1BSU5fU1RBVEVfVFNDSF9UWF9GUkFNRSBtYWNUU1J4VHggdGltZSBlbGFwc2VkCisgKiAgICAgICAgICAgICAgICAgICAgICAyNCBNQUlOX1NUQVRFX1RYX0ZSQU1FIGl0IGlzIENTTCBtb2RlLCBzdGFydCB0aGUgV1Ugc2VxIGZvciBtYWNXVVBlcmlvZAorICogICAgICAgICAgICAgICAgICAgICAgMjUgTUFJTl9TVEFURV9UWF9GUkFNRTEKKyAqICAgICAgICAgICAgICAgICAgICAgIDI2IE1BSU5fU1RBVEVfVFhfRlJBTUVfVzEgZXhpdCwgd2FpdGVkIGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAyNyBNQUlOX1NUQVRFX1RYX0ZSQU1FX1cyIGV4aXQsIHdhaXRlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMjggTUFJTl9TVEFURV9UWF9XQUlUX0xBU1RfU1lNQk9MIGV4aXQKKyAqICAgICAgICAgICAgICAgICAgICAgIDI5IE1BSU5fU1RBVEVfVFhfUkFNUERPV05fVyBleGl0LCB3YWl0ZWQgZm9yIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDMwIE1BSU5fU1RBVEVfVFhfUEhZVFJYV0FJVCBleGl0LCB3YWl0ZWQgZm9yIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDMxIE1BSU5fU1RBVEVfR0VOX0lGUyAsIEFjayB3aXRoIGZyYW1lIHBlbmRpbmcgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDMyIE1BSU5fU1RBVEVfR0VOX0lGUyAsIEFjayByZXF1ZXN0ZWQgYnV0IERpc1JYYWNrUmVjZWl2ZWRjYSBpcyBzZXQKKyAqICAgICAgICAgICAgICAgICAgICAgIDMzIE1BSU5fU1RBVEVfR0VOX0lGUyAsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhbiBJRlMsIHN3aXRjaCB0aGUgcngtb24gZm9yIGFuIEFDSworICogICAgICAgICAgICAgICAgICAgICAgMzQgTUFJTl9TVEFURV9HRU5fSUZTICwgZ2VuZXJhdGluZyBhbiBTSUZTIChTaG9ydCBJbnRlciBGcmFtZSBTcGFjZSkKKyAqICAgICAgICAgICAgICAgICAgICAgIDM1IE1BSU5fU1RBVEVfR0VOX0lGUyAsIGdlbmVyYXRpbmcgYW4gTElGUyAoTG9uZyBJbnRlciBGcmFtZSBTcGFjZSkKKyAqICAgICAgICAgICAgICAgICAgICAgIDM2IE1BSU5fU1RBVEVfR0VOX0lGU19GSU5JU0ggaW4gQ1NMIG1vZGUsICdjc2xwZXJpb2RfdGltZXJfcmVhZHknIGlzIHJlYWR5IHNlbnQgdGhlIGRhdGEgZnJhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgIDM3IE1BSU5fU1RBVEVfR0VOX0lGU19GSU5JU0ggaW4gQ1NMIG1vZGUsICdSZW5kZXp2b3VzIHplcm8gdGltZSBub3QgeWV0IHRyYW5zbWl0dGVkIHNlbnQgYW5vdGhlciBXVSBmcmFtZQorICogICAgICAgICAgICAgICAgICAgICAgMzggTUFJTl9TVEFURV9HRU5fSUZTX0ZJTklTSCBleGl0LCBjb3JyZWN0ZWQgZm9yIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDM5IE1BSU5fU1RBVEVfR0VOX0lGU19GSU5JU0ggaW4gQ1NMIG1vZGUsIHJ4X3Jlc3VtZV9hZnRlcl90eCBpcyBzZXQKKyAqICAgICAgICAgICAgICAgICAgICAgIDQwIE1BSU5fU1RBVEVfU0VOVF9TVEFUVVMgQ1NMTW9kZSB3dV9zZXF1ZW5jZV9kb25lX2ZsYWcgOgorICogICAgICAgICAgICAgICAgICAgICAgNDEgTUFJTl9TVEFURV9BRERfREVMQVkgZXhpdCwgZ290byBSWCBmb3IgZnJhbWUgcGVuZGluZyB0aW1lCisgKiAgICAgICAgICAgICAgICAgICAgICA0MiBNQUlOX1NUQVRFX0FERF9ERUxBWSBleGl0LCBnb3RvIElETEUKKyAqICAgICAgICAgICAgICAgICAgICAgIDQzIE1BSU5fU1RBVEVfUlggc3dpdGNoIHRoZSBSWCBmcm9tIG9mZiB0byBvbgorICogICAgICAgICAgICAgICAgICAgICAgNDQgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYU1RBUlQgd2FpdGVkIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgNDUgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBzdGFydCB0aGUgTWFjQWNrRHVyYXRpb24gdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDQ2IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kgc3RhcnQgdGhlIGFjayB3YWl0IHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA0NyBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIE5PUk1BTCBtb2RlIDogc3RhcnQgcnhfZHVyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIDQ4IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kgVFNDSCBtb2RlIDogc3RhcnQgbWFjVFNSeFdhaXQgKG1hY1RTUnhXYWl0KSB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNDkgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBDU0wgbW9kZSA6IHN0YXJ0IHRoZSBjc2xfcnhfZHVyYXRpb24gKG1hY0NTTHNhbXBsZVBlcmlvZCkgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDUwIE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kgQ1NMIG1vZGUgOiBzdGFydCB0aGUgY3NsX3J4X2R1cmF0aW9uIChtYWNDU0xkYXRhUGVyaW9kKSB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNTEgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxIGFja3dhaXRfdGltZXJfcmVhZHkgb3IgYWNrX3JlY2VpdmVkX2luZAorICogICAgICAgICAgICAgICAgICAgICAgNTIgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAyIG5vcm1hbF9tb2RlLiBBQ0sgd2l0aCBGUCBiaXQgc2V0LCBzdGFydCBmcmFtZSBwZW5kaW5nIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA1NCBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDQgUnhBbHdheXNPbiBpcyBzZXQgdG8gMAorICogICAgICAgICAgICAgICAgICAgICAgNTUgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA1IFRTQ0ggbW9kZSB2YWxpZCBmcmFtZSByeGVkCisgKiAgICAgICAgICAgICAgICAgICAgICA1NiBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDYgVFNDSCBtb2RlIG1hY1RTUnh3YWl0IGV4cGlyZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDU3IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgNyBtYWNDU0xzYW1wbGVQZXJpb2QgdGltZXIgcmVhZHkKKyAqICAgICAgICAgICAgICAgICAgICAgIDU4IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgOCBjc2xfbW9kZS4gRGF0YSBmcmFtZSByZWNpZXZlZCB3aXRoIEZQIGJpdCBzZXQsIGluY3JlbWVudCBSWCBkdXJhdGlvbiB0aW1lCisgKiAgICAgICAgICAgICAgICAgICAgICA1OSBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDkgQ1NMIG1vZGUgOiBSZWNlaXZlZCB3dSBmcmFtZSBpbiBkYXRhIGxpc3RlbmluZyBwZXJpb2QgcmVzdGFydCBtYWNDU0xkYXRhUGVyaW9kIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA2MCBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDEwIGNzbF9yeF9kdXJhdGlvbl9yZWFkeSBvciBjc2wgZGF0YSBmcmFtZSByZWNlaXZlZDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDYxIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMTEgbm9ybWFsX21vZGUuIEZQIGJpdCBpcyBzZXQsIHN0YXJ0IGZyYW1lIHBlbmRpbmcgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDYyIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMTIgbm9ybWFsIG1vZGUgcnhfZHVyYXRpb25fdGltZXJfcmVhZHkgYW5kIGZyYW1lX3BlbmRpbmdfdGltZXJfcmVhZHkKKyAqICAgICAgICAgICAgICAgICAgICAgIDYzIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMTMgYWNrbm93bGVkZ2UgZnJhbWUgcmVxdWVzdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICA2NCBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDE0IEludGVycnVwdCB0byBzZW50IGEgZnJhbWUuIGZvdW5kX3R4X3BhY2tldAorICogICAgICAgICAgICAgICAgICAgICAgNjUgTUFJTl9TVEFURV9DU0xfUlhfSURMRV9FTkQgUlogdGltZSBpcyBmYXIgYXdheSwgc3dpdGNoIHJlY2VpdmVyIE9mZiBhbmQgd2FpdCBmb3IgY3NsX3J4X3J6X3RpbWUgYmVmb3JlIHN3aXRjaGluZyBvbgorICogICAgICAgICAgICAgICAgICAgICAgNjYgTUFJTl9TVEFURV9DU0xfUlhfSURMRV9FTkQgUlogdGltZSBpcyBub3Qgc28gZmFyIGF3YXksIGtlZXAgcmVjZWl2ZXIgT24gYW5kIHdhaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICA2NyBNQUlOX1NUQVRFX1JYX1NUQVJUX1BIWVJYU1RPUCBhY2sgd2l0aCBmcCByZWNlaXZlZCBrZWVwIHJ4IG9uCisgKiAgICAgICAgICAgICAgICAgICAgICA2OCBNQUlOX1NUQVRFX1JYX1NUQVJUX1BIWVJYU1RPUCBzd2l0Y2ggdGhlIFJYIGZyb20gb24gdG8gb2ZmCisgKiAgICAgICAgICAgICAgICAgICAgICA2OSBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhTVE9QIGFja25vd2xlZGdlIGRvbmUgOiBzd2l0Y2ggYmFjayB0byBmaW5pc2ggVFgKKyAqICAgICAgICAgICAgICAgICAgICAgIDcwIE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWFNUT1Agc3dpdGNoIHRoZSBSWCBvZmYKKyAqICAgICAgICAgICAgICAgICAgICAgIDcxIE1BSU5fU1RBVEVfRUQgc3dpdGNoIHRoZSBSWCBmcm9tIG9mZiB0byBvbgorICogICAgICAgICAgICAgICAgICAgICAgNzIgTUFJTl9TVEFURV9FRF9XQUlUX1BIWVJYU1RBUlQgd2FpdGVkIGZvciBwaHlSeFN0YXJ0dXAKKyAqICAgICAgICAgICAgICAgICAgICAgIDczIE1BSU5fU1RBVEVfRURfV0FJVF9FRFNDQU5EVVJBVElPTiB3YWl0ZWQgZm9yIEVkU2NhbkR1cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICA3NCBNQUlOX1NUQVRFX0VEX1dBSVRfUEhZUlhTVE9QIGVuZCBvZiBFbmVyZ3kgRGV0ZWN0aW9uLCBnb3QgSURMRQorICogICAgICAgICAgICAgICAgICAgICAgICAgNzUgLSAxMjcgTm90IHVzZWQKKyAqCisgKiAgICAgIDB4MzIJUlggZW5hYmxlIGFuZCBkZXRhaWxlZCBzdGF0ZW1hY2hpbmUgaW5mbworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYtMCA9IGRldGFpbGVkIHN0YXRlbWFjaGluZSBpbmZvIHNlZSBkYmdfY29udHJvbCA9IDB4MzEKKyAqCisgKiAgICAgIDB4MzMJVFggZW5hYmxlIGFuZCBkZXRhaWxlZCBzdGF0ZW1hY2hpbmUgaW5mbworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYtMCA9IGRldGFpbGVkIHN0YXRlbWFjaGluZSBpbmZvIHNlZSBkYmdfY29udHJvbCA9IDB4MzEKKyAqCisgKiAgICAgIDB4MzQJUGh5IGVuYWJsZSwgVFggZW5hYmxlIGFuZCBSeCBlbmFibGUgYW5kIHN0YXRlIG1hY2hpbmUgc3RhdGVzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBwaHlfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0wID0gU3RhdGUgbWFjaGluZSBzdGF0ZXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAxICBNQUlOX1NUQVRFX0lETEUKKyAqICAgICAgICAgICAgICAgICAgICAgICAyICBNQUlOX1NUQVRFX0NTTUFfQ0FfV0FJVF9GT1JfTUVUQURBVEEKKyAqICAgICAgICAgICAgICAgICAgICAgICAzICBNQUlOX1NUQVRFX0NTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgICA0ICBNQUlOX1NUQVRFX1dBSVRfRk9SX0NTTUFfQ0FfMAorICogICAgICAgICAgICAgICAgICAgICAgIDUgIE1BSU5fU1RBVEVfV0FJVF9GT1JfQ1NNQV9DQQorICogICAgICAgICAgICAgICAgICAgICAgIDYgIE1BSU5fU1RBVEVfU0lOR0xFX0NDQQorICogICAgICAgICAgICAgICAgICAgICAgIDcgIE1BSU5fU1RBVEVfV0FJVF9BQ0tfREVMQVkKKyAqICAgICAgICAgICAgICAgICAgICAgICA4ICBNQUlOX1NUQVRFX1RTQ0hfVFhfRlJBTUUKKyAqICAgICAgICAgICAgICAgICAgICAgICA5ICBNQUlOX1NUQVRFX1RYX0ZSQU1FCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTAgTUFJTl9TVEFURV9UWF9GUkFNRTEKKyAqICAgICAgICAgICAgICAgICAgICAgICAxMSBNQUlOX1NUQVRFX1RYX0ZSQU1FX1cxCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTIgTUFJTl9TVEFURV9UWF9GUkFNRV9XMgorICogICAgICAgICAgICAgICAgICAgICAgIDEzIE1BSU5fU1RBVEVfVFhfV0FJVF9MQVNUX1NZTUJPTAorICogICAgICAgICAgICAgICAgICAgICAgIDE0IE1BSU5fU1RBVEVfVFhfUkFNUERPV04KKyAqICAgICAgICAgICAgICAgICAgICAgICAxNSBNQUlOX1NUQVRFX1RYX1JBTVBET1dOX1cKKyAqICAgICAgICAgICAgICAgICAgICAgICAxNiBNQUlOX1NUQVRFX1RYX1BIWVRSWFdBSVQKKyAqICAgICAgICAgICAgICAgICAgICAgICAxNyBNQUlOX1NUQVRFX0dFTl9JRlMKKyAqICAgICAgICAgICAgICAgICAgICAgICAxOCBNQUlOX1NUQVRFX0dFTl9JRlNfRklOSVNICisgKiAgICAgICAgICAgICAgICAgICAgICAgMTkgTUFJTl9TVEFURV9TRU5UX1NUQVRVUworICogICAgICAgICAgICAgICAgICAgICAgIDIwIE1BSU5fU1RBVEVfQUREX0RFTEFZCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjEgTUFJTl9TVEFURV9UU0NIX1JYX0FDS0RFTEFZCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjIgTUFJTl9TVEFURV9SWAorICogICAgICAgICAgICAgICAgICAgICAgIDIzIE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWFNUQVJUCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjQgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWQorICogICAgICAgICAgICAgICAgICAgICAgIDI1IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQKKyAqICAgICAgICAgICAgICAgICAgICAgICAyNiBNQUlOX1NUQVRFX0NTTF9SWF9JRExFX0VORAorICogICAgICAgICAgICAgICAgICAgICAgIDI3IE1BSU5fU1RBVEVfUlhfU1RBUlRfUEhZUlhTVE9QCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjggTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYU1RPUAorICogICAgICAgICAgICAgICAgICAgICAgIDI5IE1BSU5fU1RBVEVfRUQKKyAqICAgICAgICAgICAgICAgICAgICAgICAzMCBNQUlOX1NUQVRFX0VEX1dBSVRfUEhZUlhTVEFSVAorICogICAgICAgICAgICAgICAgICAgICAgIDMxIE1BSU5fU1RBVEVfRURfV0FJVF9FRFNDQU5EVVJBVElPTgorICoKKyAqICAgICAgMHgzNQlsbWFjIGNvbnRyb2xsZXIgdG8gdHggaW50ZXJmYWNlIHdpdGggd2FrZXVwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGN0cmxfbG1hY190b190eC5nZW5fd3UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGN0cmxfbG1hY190b190eC5nZW5fYWNrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzLTIgPSBjdHJsX2xtYWNfdG9fdHgudHhfZnJhbWVfbm1icgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBjdHJsX3R4X3RvX2xtYWMudHhfbGFzdF9zeW1ib2wKKyAqCisgKiAgICAgIDB4MzYJbG1hYyBjb250cm9sbGVyIHRvIHR4IGludGVyZmFjZSB3aXRoIGZyYW1lIHBlbmRpbmcKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbi5mcF9iaXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGN0cmxfbG1hY190b190eC5nZW5fYWNrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzLTIgPSBjdHJsX2xtYWNfdG9fdHgudHhfZnJhbWVfbm1icgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBjdHJsX3R4X3RvX2xtYWMudHhfbGFzdF9zeW1ib2wKKyAqCisgKiAgICAgIDB4MzcJcnggcGlwZXBsaW5lIHRvIGxtYWMgY29udHJvbGxlciBpbnRlcmZhY2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gY3RybF9yeF90b19sbWFjLnJ4X3NvZl9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBjdHJsX3J4X3RvX2xtYWMucnhfZW9mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGN0cmxfcnhfdG9fbG1hYy5wYWNrZXRfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IGFja19yZWNlaXZlZF9pbmQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IGFja19yZXF1ZXN0X2luZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gY3RybF9yeF90b19sbWFjLmRhdGFfcmVxdWVzdF9mcmFtZQorICoKKyAqICAgICAgMHgzOAljc2wgc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gY3NsX3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0LTEgPSBzd2lvX2Fsd2F5c19vbl90b19sbWFjX2N0cmwudHhfZmxhZ19zdGF0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBmb3VuZF93dV9wYWNrZXQ7CisgKgorICogICAgICAweDM5CVRzY2ggVFggYWNrIHRpbWluZworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNy00ID0gc3dpb19hbHdheXNfb25fdG9fbG1hY19jdHJsLnR4X2ZsYWdfc3RhdAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBjdHJsX3J4X3RvX2xtYWMucGFja2V0X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBvbmVfdXNfdGltZXJfcmVhZHkKKyAqCisgKiAgICAgIDB4M2EtMHgzZglOb3QgdXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNyAtIDAgPSBhbGwgJzAnCisgKgorICogZGJnX2NvbnRyb2wgaW4gcmFuZ2UgMHg0MCAtIDB4NGYgRGVidWcgc2VjdXJpdHkKKyAqICAgICAgMHg0MAlTZWN1cml0eSBjb250cm9sCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBzd2lvX3RvX3NlY3VyaXR5LnNlY1N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBzd2lvX3RvX3NlY3VyaXR5LnNlY1R4UnhuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBzd2lvX3RvX3NlY3VyaXR5LnNlY0Fib3J0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBzd2lvX3RvX3NlY3VyaXR5LnNlY0VuY0RlY24KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IHN3aW9fZnJvbV9zZWN1cml0eS5zZWNCdXN5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyICAgPSBzd2lvX2Zyb21fc2VjdXJpdHkuc2VjQXV0aEZhaWwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IHN3aW9fZnJvbV9zZWN1cml0eS5zZWNSZWFkeV9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSAnMCcKKyAqCisgKiAgICAgIDB4NDEJU2VjdXJpdHkgY3RsaWQgYWNjZXNzIHJ4IGFuZCB0eAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfc2VjX2NpLmxkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHR4X3NlY19jaS5jdGxpZF9ydworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gdHhfc2VjX2NpLnNlbGVjdHAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IHR4X3NlY19jby5kX3JkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gcnhfc2VjX2NpLmxkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IHJ4X3NlY19jaS5jdGxpZF9ydworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gcnhfc2VjX2NpLnNlbGVjdHAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IHJ4X3NlY19jby5kX3JkeQorICoKKyAqICAgICAgMHg0MglTZWN1cml0eSBjdGxpZCBhY2Nlc3MgdHggd2l0aCBzZWNfd3JfZGF0YV92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfc2VjX2NpLmxkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHR4X3NlY19jaS5jdGxpZF9ydworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gdHhfc2VjX2NpLnNlbGVjdHAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IHR4X3NlY19jby5kX3JkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0wID0gc2VjX3dyX2RhdGFfdmFsaWQKKyAqCisgKiAgICAgIDB4NDMJU2VjdXJpdHkgY3RsaWQgYWNjZXNzIHJ4IHdpdGggc2VjX3dyX2RhdGFfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHJ4X3NlY19jaS5sZF9zdHJiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9zZWNfY2kuY3RsaWRfcncKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHJ4X3NlY19jaS5zZWxlY3RwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSByeF9zZWNfY28uZF9yZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMCA9IHNlY193cl9kYXRhX3ZhbGlkCisgKgorICogICAgICAweDQ0LTB4NGYJTm90IHVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDcgLSAwID0gYWxsICcwJworICoKKyAqIGRiZ19jb250cm9sIGluIHJhbmdlIDB4NTAgLSAweDVmIEFIQiBidXMKKyAqICAgICAgMHg1MAlhaGIgYnVzIHdpdGhvdXQgaHNpemUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGhzZWwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYtNSA9IGh0cmFucworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gaHdyaXRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBocmVhZHlfaW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IGhyZWFkeV9vdXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEtMCA9IGhyZXNwCisgKgorICogICAgICAweDUxCWFoYiBidXMgd2l0aG91dCBod3JlYWR5X2luIGFuZCBocmVzcCgxKQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gaHNlbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNi01ID0gaHRyYW5zCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBod3JpdGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMiA9IGhoc2l6ZSgxIGRvd250byAwKQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gaHJlYWR5X291dAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gaHJlc3AoMCkKKyAqCisgKiAgICAgIDB4NTIJQW1iYSB0eCBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBhaV90eC5wZW5hYmxlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBhaV90eC5wc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBhaV90eC5wd3JpdGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGFvX3R4LnByZWFkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gYW9fdHgucHNsdmVycgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMi0xID0gcHNpemVfdHgKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGhyZWFkeV9vdXQKKyAqCisgKiAgICAgIDB4NTMJQW1iYSByeCBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBhaV9yeC5wZW5hYmxlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBhaV9yeC5wc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBhaV9yeC5wd3JpdGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGFvX3J4LnByZWFkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gYW9fcngucHNsdmVycgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMi0xID0gcHNpemVfcngKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGhyZWFkeV9vdXQKKyAqCisgKiAgICAgIDB4NTQJQW1iYSByZWdpc3RlciBtYXAgc2lnbmFscworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gYWlfcmVnLnBlbmFibGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IGFpX3JlZy5wc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBhaV9yZWcucHdyaXRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBhb19yZWcucHJlYWR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBhb19yZWcucHNsdmVycgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMi0xID0gIjAwIgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gaHJlYWR5X291dAorICoKKyAqICAgICAgMHg1NS0weDVmCU5vdCB1c2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA3IC0gMCA9IGFsbCAnMCcKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX0NPTlRST0wgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfREVCVUdDT05UUk9MCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdfQ09OVFJPTCAgIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR19DT05UUk9MICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR19DT05UUk9MICA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eGJ5dGVfZQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MworICogQWNjZXNzIG1vZGU6IEUtUkNXIChldmVudCByZWFkL2NsZWFyIG9uIHdyaXRlIDEpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FICAweDQwMDkwMzk0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX0UgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRSAgMHgzCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhieXRlX2UKKyAqCisgKiBJbmRpY2F0ZXMgdGhlIGZpcnN0IGJ5dGUgb2YgYSBmcmFtZSBpcyB0cmFuc21pdHRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRSAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX0UKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FICAgICAgICAgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX0UgICAgICAgICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9sYXN0X3N5bWJvbF9lCisgKgorICogSW5kaWNhdGVzIHRoZSBsYXN0IHN5bWJvbCBvZiBhIGZyYW1lIGlzIHRyYW5zbWl0dGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0xBU1RfU1lNQk9MX0UgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfTEFTVF9TWU1CT0xfRSAgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9MQVNUX1NZTUJPTF9FICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfTEFTVF9TWU1CT0xfRSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eGJ5dGVfbQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MworICogQWNjZXNzIG1vZGU6IEVNLVJXIChldmVudCBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTSAgMHg0MDA5MDM5OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9NIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00gIDB4MworCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Ynl0ZV9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJ0eGJ5dGVfZSIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9NICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00gICAgICAgICAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTSAgICAgICAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00gICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2xhc3Rfc3ltYm9sX20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgInR4X2xhc3Rfc3ltYm9sX2UiLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9MQVNUX1NZTUJPTF9NICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00KKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0xBU1RfU1lNQk9MX00gIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfTEFTVF9TWU1CT0xfTSAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0xBU1RfU1lNQk9MX00gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZmxhZ19zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfUyAgICAweDQwMDkwNDAwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TICAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1MgICAgMHgxCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NfTlVNICAgICAgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NfSU5UVkwgICAgMHgyMAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TVEFUX05VTSAgIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TVEFUX0lOVFZMIDB4MjAKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX3N0YXQKKyAqCisgKiBQYWNrZXQgaXMgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NUQVQgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU1RBVCAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NUQVQgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NUQVQgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZmxhZ19jbGVhcl9lCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxCisgKiBBY2Nlc3MgbW9kZTogRS1SQ1cgKGV2ZW50IHJlYWQvY2xlYXIgb24gd3JpdGUgMSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FICAweDQwMDkwNDA0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FICAweDEKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRV9OVU0gICAgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0VfSU5UVkwgIDB4MjAKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRV9OVU0gICAgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0VfSU5UVkwgIDB4MjAKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX2NsZWFyX2UKKyAqCisgKiBXaGVuIHRoZSBMTUFDIGNsZWFycyB0aGUgdHhfZmxhZ19zdGF0IHN0YXR1cyBldmVudCBiaXQgdHhfZmxhZ19jbGVhcl9lIGlzIHNldC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2ZsYWdfY2xlYXJfbQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MQorICogQWNjZXNzIG1vZGU6IEVNLVJXIChldmVudCBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gIDB4NDAwOTA0MDgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gIDB4MQorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NX05VTSAgICAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTV9JTlRWTCAgMHgyMAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NX05VTSAgICAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTV9JTlRWTCAgMHgyMAorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2ZsYWdfY2xlYXJfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAidHhfZmxhZ19jbGVhcl9lIi4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X3ByaW9yaXR5CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWSAgMHg0MDA5MDQxMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkgIDB4MWYKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZX05VTSAgICAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZX0lOVFZMICAweDIwCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWV9OVU0gICAgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWV9JTlRWTCAgMHgyMAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfSVNXQUtFVVBfTlVNICAgICAgIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfSVNXQUtFVVBfSU5UVkwgICAgIDB4MjAKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X3ByaW9yaXR5CisgKgorICogUHJpb3JpdHkgb2YgcGFja2V0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZICAweGYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkgNAorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9Jc1dha2VVcAorICoKKyAqIEEgYmFzaWMgd2FrZS11cCBmcmFtZSBjYW4gYmUgZ2VuZXJhdGVkIGJ5IHRoZSBVTUFDIGluIHRoZSBUeCBidWZmZXIuCisgKiBUaGUgbWV0YSBkYXRhIGNvbnRyb2wgYml0IElzV2FrZVVwIG11c3QgYmUgc2V0IHRvIGluZGljYXRlIHRoYXQgdGhpcyBpcyBhIFdha2UtdXAgZnJhbWUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTV0FLRVVQICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTV0FLRVVQICAgICAweDEwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9JU1dBS0VVUCAgICAgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTV0FLRVVQICAgIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X3NldF9vcworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZgorICogQWNjZXNzIG1vZGU6IE9TLVcgKG9uZS1zaG90IC0gd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1NFVF9PUyAgMHg0MDA5MDQ4MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1NFVF9PUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1NFVF9PUyAgMHhmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX3NldAorICoKKyAqIFRvIHNldCB0eF9mbGFnX3N0YXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TRVQgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9TRVRfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU0VUICAweGYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU0VUICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TRVQgNAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfY2xlYXJfb3MKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGYKKyAqIEFjY2VzcyBtb2RlOiBPUy1XIChvbmUtc2hvdCAtIHdyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DTEVBUl9PUyAgMHg0MDA5MDQ4NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NMRUFSX09TIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfQ0xFQVJfT1MgIDB4ZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZmxhZ19jbGVhcgorICoKKyAqIFRvIGNsZWFyIHR4X2ZsYWdfc3RhdAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfQ0xFQVJfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVIgIDB4ZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUiAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVIgNAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX2Fsd2F5c19vbl9yZWdtYXBfV2FrZVVwSW50VGhyCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBJTlRUSFIgIDB4NDAwOTEwMDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBJTlRUSFIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBJTlRUSFIgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9hbHdheXNfb25fcmVnbWFwX1dha2VVcEludFRocgorICoKKyAqIFRocmVzaG9sZCBmb3Igd2FrZS11cCBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUElOVFRIUiAgSU5EX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUElOVFRIUgorI2RlZmluZSBNU0tfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQSU5UVEhSICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBJTlRUSFIgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBJTlRUSFIgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9hbHdheXNfb25fcmVnbWFwX3dha2V1cF9jb250cm9sCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgzCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUF9DT05UUk9MICAweDQwMDkxMDA0CisjZGVmaW5lIFNJWkVfUl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQX0NPTlRST0wgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBfQ09OVFJPTCAgMHgzCisKKy8qCisgKgorICogQml0OiBmdGRmX2Fsd2F5c19vbl9yZWdtYXBfV2FrZVVwRW5hYmxlCisgKgorICogSWYgc2V0LCB0aGUgV2FrZVVwSW50VGhyIGlzIGVuYWJsZWQgdG8gZ2VuZXJhdGUgYW4gaW50ZXJydXB0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBFTkFCTEUgICAgICAgSU5EX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUF9DT05UUk9MCisjZGVmaW5lIE1TS19GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBFTkFCTEUgICAgICAgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBFTkFCTEUgICAgICAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUEVOQUJMRSAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX2Fsd2F5c19vbl9yZWdtYXBfV2FrZXVwVGltZXJFbmFibGUKKyAqCisgKiBBICcxJyBFbmFibGVzIHRoZSB3YWtldXAgdGltZXIuCisgKiBOb3RlIHRoYXQgaW4gb25fb2ZmX3JlZ21hcCwgdGhlIHJlZ2lzdGVyIFdha2V1cFRpbWVyRW5hYmxlU3RhdHVzIHNob3dzIHRoZSBzdGF0dXMgb2YgdGhpcyByZWdpc3RlciBhZnRlciBiZWluZyBjbG9ja2VkIGJ5IExQX0NMSy4KKyAqIENoZWNraW5nIHRoaXMgcmVnaXN0ZXIgY2FuIGJlIHVzZWQgYXMgaW5kaWNhdGlvbiBmb3Igc29mdHdhcmUgdGhhdCB0aGlzIGJpdCBpcyBlZmZlY3RpdmUgaW4gdGhlIGRlc2luZy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEUgIElORF9SX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBfQ09OVFJPTAorI2RlZmluZSBNU0tfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEUgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEUgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRSAxCisjZWxzZSAvLyBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3JldGVudGlvbl9yYW1fdHhfZmlmbworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPIDB4NDAwODAwMDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfRklGTyAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX05VTV8xRCAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk9fSU5UVkxfMUQgMHg4MAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfRklGT19OVU1fMkQgMHgyMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfRklGT19JTlRWTF8yRCAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk9fTlVNXzFEIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfRklGT19JTlRWTF8xRCAweDgwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX05VTV8yRCAweDIwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX0lOVFZMXzJEIDB4NAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fdHhfZmlmbworICoKKyAqIFRyYW5zbWl0IGZpZm8gYnVmZmVyLCBjb250YWlucyAzMiBhZGRyZXNzZXMgcGVyIGVudHJ5ICgzMmIgeCAzMmEgPSAxMjhCKS4gVGhlcmUgYXJlIDQgZW50cmllcyBzdXBwb3J0ZWQuCisgKiBOb3RlIHRoYXQsIGRlc3BpdGUgdGhlIG5hbWUsIHRoaXMgZmlmbyBpcyBOT1QgcmV0YWluZWQgd2hlbiB0aGUgTE1BQyBpcyBwdXQgaW50byBkZWVwLXNsZWVwIQorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9yZXRlbnRpb25fcmFtX3R4X21ldGFfZGF0YV8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wIDB4NDAwODAyMDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wIDB4NTdmZmZmZmYKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wX05VTSAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSF9OVU0gMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9GUkFNRV9MRU5HVEhfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUl9OVU0gMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRV9OVU0gMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEVfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBX0VOQV9OVU0gMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0FDS1JFUVVFU1RfTlVNIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQUNLUkVRVUVTVF9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkFfTlVNIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRU5BX0lOVFZMIDB4MTAKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9yZXRlbnRpb25fcmFtX2ZyYW1lX2xlbmd0aAorICoKKyAqIFR4IG1ldGEgZGF0YSBwZXIgZW50cnk6IEZyYW1lIGxlbmd0aCAoaW4gYnl0ZXMpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCAweDdmCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRV9MRU5HVEggMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCA3CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fcGh5QXR0cgorICoKKyAqIFR4IG1ldGEgZGF0YSBwZXIgZW50cnk6IGR1cmluZyB0aGUgVHgtb24gcGhhc2UsIHRoZSBjb250cm9sIHJlZ2lzdGVyIHBoeVJ4QXR0clsxNl0gc291cmNlcyB0aGUgUEhZQVRUUiBvdXRwdXQgc2lnbmFsIHRvIHRoZSBEUEhZLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMAorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUiAweDdmZmY4MAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUiA3CisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUiAxNgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9yZXRlbnRpb25fcmFtX2ZyYW1ldHlwZQorICoKKyAqIFR4IG1ldGEgZGF0YSBwZXIgZW50cnk6IHRoZSBmcmFtZSB0eXBlIG9mIHRoZSBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkIChEYXRhL0NtZC9BY2svd2FrZXVwIGZyYW1lL2V0Yy4pLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEUgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEUgMHgzODAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEUgMjMKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEUgMworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9Dc21hQ2FfZW5hCisgKgorICogVHggbWV0YSBkYXRhIHBlciBlbnRyeTogJzEnIGluZGljYXRlcyB0aGF0IGEgQ1NNQS1DQSBpcyByZXF1aXJlZCBmb3IgdGhlIHRyYW5zbWlzc2lvbiBvZiB0aGlzIHBhY2tldC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBX0VOQSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQV9FTkEgMHg0MDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BIDI2CisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBX0VOQSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX0Fja1JlcXVlc3QKKyAqCisgKiBUeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiAnMScgaW5kaWNhdGVzIHRoYXQgYW4gYWNrbm93bGVkZ2UgaXMgZXhwZWN0ZWQgZnJvbSB0aGUgcmVjaXBpZW50IG9mIHRoaXMgcGFja2V0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tSRVFVRVNUIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMAorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQUNLUkVRVUVTVCAweDEwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tSRVFVRVNUIDI4CisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fQUNLUkVRVUVTVCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX0NSQzE2X2VuYQorICoKKyAqIFR4IG1ldGEgZGF0YSBwZXIgZW50cnk6IEluZGljYXRlcyB3aGV0aGVyIENSQzE2IGluc2VydGlvbiBtdXN0IGJlIGVuYWJsZWQgb3Igbm90LgorICogIDAgOiBObyBoYXJkd2FyZSBpbnNlcnRlZCBDUkMxNgorICogIDEgOiBIYXJkd2FyZSBpbnNlcnRzIENSQzE2CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQSAweDQwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkEgMzAKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkEgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3JldGVudGlvbl9yYW1fdHhfbWV0YV9kYXRhXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEgMHg0MDA4MDIwNAorI2RlZmluZSBTSVpFX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEgMHhmZgorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzFfTlVNIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzFfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fTUFDU05fTlVNIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fTUFDU05fSU5UVkwgMHgxMAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fbWFjU04KKyAqCisgKiBUeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiBTZXF1ZW5jZSBOdW1iZXIgb2YgdGhpcyBwYWNrZXQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04gMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04gMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9yZXRlbnRpb25fcmFtX3R4X3JldHVybl9zdGF0dXNfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzAgMHg0MDA4MDI0MAorI2RlZmluZSBTSVpFX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMCAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzBfTlVNIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18wX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYVElNRVNUQU1QX05VTSAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYVElNRVNUQU1QX0lOVFZMIDB4MTAKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9yZXRlbnRpb25fcmFtX1R4VGltZXN0YW1wCisgKgorICogVHggcmV0dXJuIHN0YXR1cyBwZXIgZW50cnk6IFRyYW5zbWl0IFRpbWVzdGFtcAorICogVGhlIFRpbWVzdGFtcCBvZiB0aGUgdHJhbnNtaXR0ZWQgcGFja2V0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9UWFRJTUVTVEFNUCBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18wCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9UWFRJTUVTVEFNUCAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9UWFRJTUVTVEFNUCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fVFhUSU1FU1RBTVAgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9yZXRlbnRpb25fcmFtX3R4X3JldHVybl9zdGF0dXNfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzEgMHg0MDA4MDI0NAorI2RlZmluZSBTSVpFX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMSAweDFmCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzFfTlVNIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0FDS0ZBSUxfTlVNIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQUNLRkFJTF9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMX05VTSAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQUZBSUxfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBTlJSRVRSSUVTX05VTSAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQU5SUkVUUklFU19JTlRWTCAweDEwCisKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fQWNrRmFpbAorICoKKyAqIFR4IHJldHVybiBzdGF0dXMgcGVyIGVudHJ5OiBBY2tub3dsZWRnZW1lbnQgc3RhdHVzCisgKiAgMCA6IFNVQ0NFU1MKKyAqICAxIDogRkFJTAorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tGQUlMIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS0ZBSUwgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tGQUlMIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tGQUlMIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fQ3NtYUNhRmFpbAorICoKKyAqIFR4IHJldHVybiBzdGF0dXMgcGVyIGVudHJ5OiBDU01BLUNBIHN0YXR1cworICogIDAgOiBTVUNDRVNTCisgKiAgMSA6IEZBSUwKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBRkFJTCBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBRkFJTCAxCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBRkFJTCAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fQ3NtYUNhTnJSZXRyaWVzCisgKgorICogVHggcmV0dXJuIHN0YXR1cyBwZXIgZW50cnk6IE51bWJlciBvZiBDU01BLUNBIHJldHJpZXMgYmVmb3JlIHRoaXMgZnJhbWUgaGFzIGJlZW4gdHJhbnNtaXR0ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBTlJSRVRSSUVTIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQU5SUkVUUklFUyAweDFjCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FOUlJFVFJJRVMgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQU5SUkVUUklFUyAzCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9yeF9tZXRhXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8wIDB4NDAwODAyODAKKyNkZWZpbmUgU0laRV9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzAgMHhmZmZmZmZmZgorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8wX05VTSAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMF9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVBfTlVNIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QX0lOVFZMIDB4MTAKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9yZXRlbnRpb25fcmFtX3J4X3RpbWVzdGFtcAorICoKKyAqIFJ4IG1ldGEgZGF0YSBwZXIgZW50cnk6IFRpbWVzdGFtcCB0YWtlbiB3aGVuIGZyYW1lIHdhcyByZWNlaXZlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMAorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9yeF9tZXRhXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xIDB4NDAwODAyODQKKyNkZWZpbmUgU0laRV9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEgMHhmZmZkCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzFfTlVNIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VSUk9SX05VTSAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VSUk9SX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVFlQRV9FUlJPUl9OVU0gMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SRVNfRlJNX1RZUEVfRVJST1JfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX05VTSAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9EUEFOSURfRVJST1JfTlVNIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fRFBBTklEX0VSUk9SX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0RBRERSX0VSUk9SX05VTSAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0RBRERSX0VSUk9SX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1NQQU5JRF9FUlJPUl9OVU0gMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9TUEFOSURfRVJST1JfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fSVNQQU5JRF9DT09SRF9FUlJPUl9OVU0gMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9JU1BBTklEX0NPT1JEX0VSUk9SX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SX05VTSAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SX0lOVFZMIDB4MTAKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9jcmMxNl9lcnJvcgorICoKKyAqIFJ4IG1ldGEgZGF0YSBwZXIgZW50cnk6IGlmIHNldCwgYSBDUkMgZXJyb3IgaGFzIG9jY3VycmVkIGluIHRoaXMgZnJhbWUsIGFwcGxpY2FibGUgZm9yIHRyYW5zcGFyZW50IG1vZGUgb25seQorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FUlJPUiBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FUlJPUiAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VSUk9SIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FUlJPUiAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX3Jlc19mcm1fdHlwZV9lcnJvcgorICoKKyAqIFJ4IG1ldGEgZGF0YSBwZXIgZW50cnk6IGlmIHNldCB0byAnMScgdGhpcyBmcmFtZSBpcyBhIG5vdCBzdXBwb3J0ZWQgZnJhbWUgdHlwZSwgYXBwbGljYWJsZSB3aGVuIGZyYW1lIGlzIG5vdCBkaXNjYXJkZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVFlQRV9FUlJPUiAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVFlQRV9FUlJPUiAyCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fcmVzX2ZybV92ZXJzaW9uX2Vycm9yCisgKgorICogUnggbWV0YSBkYXRhIHBlciBlbnRyeTogaWYgc2V0IHRvICcxJyB0aGlzIGZyYW1lIGlzIGEgbm90IHN1cHBvcnRlZCBmcmFtZSB2ZXJzaW9uLCBhcHBsaWNhYmxlIHdoZW4gZnJhbWUgaXMgbm90IGRpc2NhcmRlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVkVSU0lPTl9FUlJPUiAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVkVSU0lPTl9FUlJPUiAzCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fZHBhbmlkX2Vycm9yCisgKgorICogUnggbWV0YSBkYXRhIHBlciBlbnRyeTogaWYgc2V0IHRvICcxJywgYSBkZXN0aW5hdGlvbiBQQU4gSUQgZXJyb3IgaGFzIG9jY3VycmVkLCBhcHBsaWNhYmxlIHdoZW4gZnJhbWUgaXMgbm90IGRpc2NhcmRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9EUEFOSURfRVJST1IgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fRFBBTklEX0VSUk9SIDB4MTAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0RQQU5JRF9FUlJPUiA0CisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fRFBBTklEX0VSUk9SIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fZGFkZHJfZXJyb3IKKyAqCisgKiBSeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiBpZiBzZXQgdG8gJzEnLCBhIGRlc3RpbmF0aW9uIEFkZHJlc3MgZXJyb3IgaGFzIG9jY3VycmVkLCBhcHBsaWNhYmxlIHdoZW4gZnJhbWUgaXMgbm90IGRpc2NhcmRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9EQUREUl9FUlJPUiBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9EQUREUl9FUlJPUiAweDIwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9EQUREUl9FUlJPUiA1CisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fREFERFJfRVJST1IgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9zcGFuaWRfZXJyb3IKKyAqCisgKiBSeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiBpZiBzZXQgdG8gJzEnLCBhIFBBTiBJRCBlcnJvciBoYXMgb2NjdXJyZWQsIGFwcGxpY2FibGUgd2hlbiBmcmFtZSBpcyBub3QgZGlzY2FyZGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX1NQQU5JRF9FUlJPUiBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9TUEFOSURfRVJST1IgMHg0MAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fU1BBTklEX0VSUk9SIDYKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9TUEFOSURfRVJST1IgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9pc3BhbmlkX2Nvb3JkX2Vycm9yCisgKgorICogUnggbWV0YSBkYXRhIHBlciBlbnRyeTogaWYgc2V0IHRvICcxJywgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIG5vdCBmb3IgUEFOIGNvb3JkaW5hdG9yLCBhcHBsaWNhYmxlIHdoZW4gZnJhbWUgaXMgbm90IGRpc2NhcmRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9JU1BBTklEX0NPT1JEX0VSUk9SIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0lTUEFOSURfQ09PUkRfRVJST1IgMHg4MAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fSVNQQU5JRF9DT09SRF9FUlJPUiA3CisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fSVNQQU5JRF9DT09SRF9FUlJPUiAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fcXVhbGl0eV9pbmRpY2F0b3IKKyAqCisgKiBSeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiB0aGUgTGluayBRdWFsaXR5IEluZGljYXRpb24gdmFsdWUgZHVyaW5nIHJlY2VwdGlvbiBvZiB0aGlzIGZyYW1lLgorICoKKyAqICMgJHNvZnR3YXJlX3NjcmF0Y2hAcmV0ZW50aW9uX3JhbQorICogIyBUWCByYW0gbm90IHVzZWQgYnkgaGFyZHdhcmUsIGNhbiBiZSB1c2VkIGJ5IHNvZnR3YXJlIGFzIHNjcmF0Y2ggcmFtIHdpdGggcmV0ZW50aW9uLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9RVUFMSVRZX0lORElDQVRPUiBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9RVUFMSVRZX0lORElDQVRPUiAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9RVUFMSVRZX0lORElDQVRPUiA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfcnhfcmFtX3J4X2ZpZm8KKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JYX1JBTV9SWF9GSUZPIDB4NDAwODgwMDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfUlhfUkFNX1JYX0ZJRk8gMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfUlhfUkFNX1JYX0ZJRk8gMHhmZmZmZmZmZgorI2RlZmluZSBGVERGX1JYX1JBTV9SWF9GSUZPX05VTV8xRCAweDgKKyNkZWZpbmUgRlRERl9SWF9SQU1fUlhfRklGT19JTlRWTF8xRCAweDgwCisjZGVmaW5lIEZUREZfUlhfUkFNX1JYX0ZJRk9fTlVNXzJEIDB4MjAKKyNkZWZpbmUgRlRERl9SWF9SQU1fUlhfRklGT19JTlRWTF8yRCAweDQKKyNkZWZpbmUgRlRERl9SWF9SQU1fUlhfRklGT19OVU1fMUQgMHg4CisjZGVmaW5lIEZUREZfUlhfUkFNX1JYX0ZJRk9fSU5UVkxfMUQgMHg4MAorI2RlZmluZSBGVERGX1JYX1JBTV9SWF9GSUZPX05VTV8yRCAweDIwCisjZGVmaW5lIEZUREZfUlhfUkFNX1JYX0ZJRk9fSU5UVkxfMkQgMHg0CisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcnhfcmFtX3J4X2ZpZm8KKyAqCisgKiBSZWNlaXZlIGZpZm8gcmFtLCBjb250YWlucyAzMiBhZGRyZXNzZXMgcGVyIGVudHJ5ICgzMmIgeCAzMmEgPSAxMjhCKS4gVGhlcmUgYXJlIDggZW50cmllcyBzdXBwb3J0ZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SWF9SQU1fUlhfRklGTyBJTkRfUl9GVERGX1JYX1JBTV9SWF9GSUZPCisjZGVmaW5lIE1TS19GX0ZUREZfUlhfUkFNX1JYX0ZJRk8gMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX1JYX1JBTV9SWF9GSUZPIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfUlhfUkFNX1JYX0ZJRk8gMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1JlbF9OYW1lCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FIDB4NDAwOTAwMDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FIDB4ZmZmZmZmZmYKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FX05VTSAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FX0lOVFZMIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUVfTlVNIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUVfSU5UVkwgMHg0CisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SZWxfTmFtZQorICoKKyAqIEEgNCB3b3JkcyB3aWRlIHJlZ2lzdGVyLCBzaG93aW5nIGluIEFTQ0lJIHRoZSBuYW1lIG9mIHRoZSByZWxlYXNlLCBlZy4gImZ0ZGZfMTA3Ii4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRSAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUUgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX0J1aWxkVGltZQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUUgMHg0MDA5MDAxMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRSAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUVfTlVNIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FX0lOVFZMIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FX05VTSAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRV9JTlRWTCAweDQKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0J1aWxkVGltZQorICoKKyAqIEEgNCB3b3JkcyB3aWRlIHJlZ2lzdGVyLCBzaG93aW5nIGluIEFTQ0lJIHRoZSBidWlsZCBkYXRlIChkZCBtbW0geXkpIGFuZCB0aW1lIChoaDptbSkgb2YgZGV2aWNlLCBlZy4gIjAxIERlYyAxNCAxNDoxMCAiLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9nbG9iX2NvbnRyb2xfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweGZmMDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4NmZmMGUKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAgMHg0MDA5MDAyMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAgMHg2ZmYwZQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0lzUEFOQ29vcmRpbmF0b3IKKyAqCisgKiBFbmFibGUvZGlzYWJsZSByZWNlaXZlciBjaGVjayBvbiBhZGRyZXNzIGZpZWxkcyAoMD1lbmFibGVkLCAxPWRpc2FibGVkKQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9JU1BBTkNPT1JESU5BVE9SIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfSVNQQU5DT09SRElOQVRPUiAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTUEFOQ09PUkRJTkFUT1IgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTUEFOQ09PUkRJTkFUT1IgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9kbWFfcmVxCisgKgorICogU291cmNlIG9mIHRoZSBSWF9ETUFfUkVRIG91dHB1dCBwaW4gb2YgdGhpcyBibG9jay4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfRE1BX1JFUSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0RNQV9SRVEgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9ETUFfUkVRIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9ETUFfUkVRIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZG1hX3JlcQorICoKKyAqIFNvdXJjZSBvZiB0aGUgVFhfRE1BX1JFUSBvdXRwdXQgcGluIG9mIHRoaXMgYmxvY2suCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0RNQV9SRVEgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9ETUFfUkVRIDB4OAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRE1BX1JFUSAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRE1BX1JFUSAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjU2ltcGxlQWRkcmVzcworICoKKyAqIFNpbXBsZSBhZGRyZXNzIG9mIHRoZSBQQU4gY29vcmRpbmF0b3IKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0lNUExFQUREUkVTUyBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1NJTVBMRUFERFJFU1MgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNTSU1QTEVBRERSRVNTIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNTSU1QTEVBRERSRVNTIDgKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjTEVlbmFibGVkCisgKgorICogSWYgc2V0IHRvICcxJywgdGhlIExvdyBFbmVyZ3kgbW9kZSAoYWxzbyBjYWxsZWQgQ1NMKSBpcyBlbmFibGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0xFRU5BQkxFRCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0xFRU5BQkxFRCAweDIwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNMRUVOQUJMRUQgMTcKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNMRUVOQUJMRUQgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUU0NIZW5hYmxlZAorICoKKyAqIElmIHNldCB0byAnMScsIHRoZSBUU0NIIG1vZGUgaXMgZW5hYmxlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU0NIRU5BQkxFRCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQ0hFTkFCTEVEIDB4NDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQ0hFTkFCTEVEIDE4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNDSEVOQUJMRUQgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfZ2xvYl9jb250cm9sXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHhmZmZmZmZmZiAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMSAweDQwMDkwMDI0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMSAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNQQU5JZAorICoKKyAqIFRoZSBQQU4gSUQgb2YgdGhpcyBkZXZpY2UuCisgKiBUaGUgdmFsdWUgMHhGRkZGIGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UgaXMgbm90IGFzc29jaWF0ZWQgdG8gYSBQQU4uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1BBTklEIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFOSUQgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNQQU5JRCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFOSUQgMTYKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNTaG9ydEFkZHJlc3MKKyAqCisgKiBUaGUgc2hvcnQgYWRkcmVzcyBvZiB0aGUgZGV2aWNlLiBUaGUgdmFsdWVzIDB4RkZGRiBhbmQgMHhGRkZFIGluZGljYXRlIHRoYXQgbm8gSUVFRSBTaG9ydCBBZGRyZXNzIGlzIGF2YWlsYWJsZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0hPUlRBRERSRVNTIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0hPUlRBRERSRVNTIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1NIT1JUQUREUkVTUyAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1NIT1JUQUREUkVTUyAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfZ2xvYl9jb250cm9sXzIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHhmZmZmZmZmZiAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMiAweDQwMDkwMDI4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMiAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9hRXh0ZW5kZWRBZGRyZXNzX2wKKyAqCisgKiBVbmlxdWUgZGV2aWNlIGFkZHJlc3MsIDQ4IGJpdHMgd2lkZSwgbG93ZXN0IDMyIGJpdAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0wgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0wgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQUVYVEVOREVEQUREUkVTU19MIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0wgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2dsb2JfY29udHJvbF8zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4ZmZmZmZmZmYgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzMgMHg0MDA5MDAyYworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8zIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzMgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfYUV4dGVuZGVkQWRkcmVzc19oCisgKgorICogVW5pcXVlIGRldmljZSBhZGRyZXNzLCA0OCBiaXRzIHdpZGUsIGhpZ2hlc3QgMTYgYml0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfSCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfSCAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0ggMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfSCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZiZmZmZmZlCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8wIDB4NDAwOTAwMzAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8wIDB4ZmJmZmZmZmUKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4b25EdXJhdGlvbgorICoKKyAqIFRoZSB0aW1lIChpbiBzeW1ib2wgcGVyaW9kcykgdGhlIFJ4IG11c3QgYmUgb24gYWZ0ZXIgc2V0dGluZyBSeEVuYWJsZSB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYT05EVVJBVElPTiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYT05EVVJBVElPTiAweDFmZmZmZmUKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYT05EVVJBVElPTiAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhPTkRVUkFUSU9OIDI0CisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4QWx3YXlzT24KKyAqCisgKiBJZiBzZXQgdG8gJzEnLCB0aGUgcmVjZWl2ZXIgc2hhbGwgYmUgYWx3YXlzIG9uIGlmIFJ4RW5hYmxlIGlzIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQUxXQVlTT04gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEFMV0FZU09OIDB4MjAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhBTFdBWVNPTiAyNQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQUxXQVlTT04gMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3B0aV9yeAorICoKKyAqIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGR1cmluZyByZWNlaXZpbmcgZnJhbWVzLCBkdXJpbmcgdGhlIGF1dG8gQUNLICh3aGVuIHRoZSBBUiBiaXQgaXMgc2V0IGluIHRoZSByZWNlaXZlZCBmcmFtZSwgc2VlIFtGUjA2NTVdIGFuZCBmdXJ0aGVyKSwgYSBzaW5nbGUgQ0NBIGFuZCBFRCBzY2FuLgorICogSW4gVFNDSCBtb2RlIHRoaXMgcmVnaXN0ZXIgd2lsbCBiZSB1c2VkIGR1cmluZyB0aGUgdGltZSBzbG90IGluIHdoaWNoIGZyYW1lcyBjYW4gYmUgcmVjZWl2ZWQgYW5kIGNvbnNlcXVlbnRseSBhbiBFbmhhbmNlZCBBQ0sgY2FuIGJlIHRyYW5zbWl0dGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QVElfUlggSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QVElfUlggMHg3ODAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUFRJX1JYIDI3CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUFRJX1JYIDQKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfa2VlcF9waHlfZW4KKyAqCisgKiBXaGVuIHRoZSB0cmFuc21pdCBvciByZWNlaXZlIGFjdGlvbiBpcyByZWFkeSAoTG1hY1JlYWR5NFNsZWVwIGlzIHNldCksIHRoZSBQSFlfRU4gc2lnbmFsIGlzIGNsZWFyZWQgdW5sZXNzIHRoZSBjb250cm9sIHJlZ2lzdGVyIGtlZXBfcGh5X2VuIGlzIHNldCB0byAnMScuCisgKiBXaGVuIHRoZSBjb250cm9sIHJlZ2lzdGVyIGtlZXBfcGh5X2VuIGlzIHNldCB0byAnMScsIHRoZSBzaWduYWwgUEhZX0VOIHNoYWxsIHJlbWFpbiBiZWluZyBzZXQgdW50aWwgdGhlIGtlZXBfcGh5X2VuIGlzIGNsZWFyZWQuCisgKiBUaGlzIHdpbGwgaGVscCBjb250cm9sIHRoZSBiZWhhdmlvciBvZiB0aGUgYXJiaXRlciBiZXR3ZWVuIHRoZSBMTUFDIGFuZCB0aGUgRFBIWS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfS0VFUF9QSFlfRU4gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9LRUVQX1BIWV9FTiAweDgwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9LRUVQX1BIWV9FTiAzMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0tFRVBfUEhZX0VOIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1R4UGlwZVByb3BEZWxheQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhQSVBFUFJPUERFTEFZIDB4NDAwOTAwMzQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkgMHhmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfVHhQaXBlUHJvcERlbGF5CisgKgorICogUHJvcGFnYXRpb24gZGVsYXkgKGluIHVzKSBvZiB0aGUgdHggcGlwZSwgYmV0d2VlbiBzdGFydCBvZiB0cmFuc21pc3Npb24gKGluZGljYXRlZCBieSBzZXR0aW5nIHR4X2ZsYWdfc3RhdHVzKSB0byB0aGUgRFBIWS4KKyAqIFRoZSByZXNldCB2YWx1ZSBpcyAwIHVzLCB3aGljaCBpcyBhbHNvIHRoZSBjbG9zZXN0IHZhbHVlIHRvIHRoZSByZWFsIGltcGxlbWVudGF0aW9uIGZpZ3VyZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhQSVBFUFJPUERFTEFZIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYUElQRVBST1BERUxBWSAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYUElQRVBST1BERUxBWSA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9NYWNBY2tXYWl0RHVyYXRpb24KKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgzNiAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04gMHg0MDA5MDAzOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiAweGZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9NYWNBY2tXYWl0RHVyYXRpb24KKyAqCisgKiBNYXhpbXVtIHRpbWUgKGluIHN5bWJvbCBwZXJpb2RzKSB0byB3YWl0IGZvciBhbiBBQ0sgcmVzcG9uc2UgYWZ0ZXIgdHJhbnNtaXR0aW5nIGEgZnJhbWUgd2l0aCB0aGUgQVIgYml0IHNldCB0byAnMScuCisgKiBUaGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIG5vcm1hbCBtb2RlIGZvciB0aGUgd2FpdCBvZiBhbiBBQ0sgcmVzcG9uc2UsIGlycmVzcGVjdGl2ZSBpZiB0aGUgQUNLIGlzIGEgbm9ybWFsIEFDSyBvciBhbiBFbmhhbmNlZCBBQ0suCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUNLV0FJVERVUkFUSU9OCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04gMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUNLV0FJVERVUkFUSU9OIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04gOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfTWFjRW5oQWNrV2FpdER1cmF0aW9uCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MzYwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDRU5IQUNLV0FJVERVUkFUSU9OIDB4NDAwOTAwM2MKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gMHhmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9NYWNFbmhBY2tXYWl0RHVyYXRpb24KKyAqCisgKiBNYXhpbXVtIHRpbWUgKGluIHVzKSB0byB3YWl0IGZvciBhbiBFbmhhbmNlZCBBQ0sgcmVzcG9uc2UgYWZ0ZXIgdHJhbnNtaXR0aW5nIGEgZnJhbWUgd2l0aCB0aGUgQVIgYml0IHNldCB0byAnMScuCisgKiBUaGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIExFL0NTTCBtb2RlIGZvciB0aGUgd2FpdCBvZiBhbiBBQ0sgcmVzcG9uc2UgKHdoaWNoIGlzIGFsd2F5cyBhbiBFbmhhbmNlZCBBQ0spLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRU5IQUNLV0FJVERVUkFUSU9OIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRU5IQUNLV0FJVERVUkFUSU9OIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF8xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xIDB4NDAwOTAwNDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xIDB4ZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5UnhBdHRyCisgKgorICogVmFsdWUgb2YgdGhlIFBIWUFUVFIgYnVzIHRvIERQSFkgZHVyaW5nIFJ4IG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhBVFRSIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhBVFRSIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhBVFRSIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWEFUVFIgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF8yCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmYwMQorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMiAweDQwMDkwMDQ0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMiAweGZmZmZmZjAxCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRWRTY2FuRW5hYmxlCisgKgorICogSWYgc2V0IHRvICcxJywgdGhlIEVuZXJneSBEZXRlY3Qgc2NhbiB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIFJ4RW5hYmxlIGlzIHNldCB0byAnMScgcmF0aGVyIHRoYW4gc3RhcnRpbmcgYSByZWNlaXZlIGFjdGlvbi4KKyAqIFRoZSBsZW5ndGggb2YgdGhpcyBzY2FuIGlzIGRlZmluZWQgYnkgRWRTY2FuRHVyYXRpb24uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkVOQUJMRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkVOQUJMRSAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkVOQUJMRSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FORU5BQkxFIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9FZFNjYW5EdXJhdGlvbgorICoKKyAqIFRoZSBsZW5ndGggb2YgRUQgc2NhbiBpbiBzeW1ib2wgcGVyaW9kcy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FORFVSQVRJT04gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5EVVJBVElPTiAweGZmZmZmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5EVVJBVElPTiA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FORFVSQVRJT04gMjQKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF8zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4NzAwMDRjNCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zIDB4NDAwOTAwNDgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zIDB4ZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjTWF4RnJhbWVUb3RhbFdhaXRUaW1lCisgKgorICogTWF4IHRpbWUgdG8gd2FpdCAoaW4gc3ltYm9sIHBlcmlvZHMpIGZvciBhIHJlcXVlc3RlZCBEYXRhIEZyYW1lIG9yIGFuIGFubm91bmNlZCBicm9hZGNhc3QgZnJhbWUsIHRyaWdnZXJlZCBieSB0aGUgRlAgYml0IGluIHRoZSByZWNlaXZlZCBmcmFtZSB3YXMgc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYRlJBTUVUT1RBTFdBSVRUSU1FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYRlJBTUVUT1RBTFdBSVRUSU1FIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYRlJBTUVUT1RBTFdBSVRUSU1FIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUUgMTYKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9DY2FJZGxlV2FpdAorICoKKyAqIFRpbWUgdG8gd2FpdCAoaW4gdXMpIGFmdGVyIENDQSByZXR1cm5lZCAibWVkaXVtIGlkbGUiIGJlZm9yZSBzdGFydGluZyBUWC1PTi4KKyAqIE5vdGVzOgorICogMSkgZXh0cmEgd2FpdCB0aW1lcyBhcmUgaW52b2x2ZWQgYmVmb3JlIGEgcGFja2V0IGlzIHJlYWxseSB0cmFuc21pdHRlZCwgc2VlIHRoZSByZWxldmFudCB0aW1pbmcgZmlndXJlcy4KKyAqIDIpIG5vdCBhcHBsaWNhYmxlIGluIFRTQ0ggbW9kZSBzaW5jZSB0aGVyZSBtYWNUU1J4VHggc2hhbGwgYmUgdXNlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBSURMRVdBSVQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FJRExFV0FJVCAweGZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBSURMRVdBSVQgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FJRExFV0FJVCA4CisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0FkZHJfdGFiX21hdGNoX0ZQX3ZhbHVlCisgKgorICogSW4gY2FzZSB0aGUgcmVjZWl2ZWQgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB3aXRoIG9uZSBvZiB0aGUgRXhwX1NBIHJlZ2lzdGVycywgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVyIEFkZHJfdGFwX21hdGNoX0ZQX3ZhbHVlIHdpbGwgYmUgaW5zZXJ0ZWQgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBGUCBiaXQuCisgKiBJbiBjYXNlIHRoZXJlIGlzIG5vIG1hdGNoIGZvdW5kLCB0aGUgaW52ZXJzZSB2YWx1ZSBvZiBBZGRyX3RhcF9tYXRjaF9GUF92YWx1ZSB3aWxsIGJlIGluc2VydGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9BRERSX1RBQl9NQVRDSF9GUF9WQUxVRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FERFJfVEFCX01BVENIX0ZQX1ZBTFVFIDB4MTAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQUREUl9UQUJfTUFUQ0hfRlBfVkFMVUUgMjQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9BRERSX1RBQl9NQVRDSF9GUF9WQUxVRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0ZQX292ZXJyaWRlCisgKgorICogSW4gY2FzZSB0aGUgY29udHJvbCByZWdpc3RlciBGUF9vdmVycmlkZSBpcyBzZXQsIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCByZWdpc3RlciBGUF9mb3JjZV92YWx1ZSB3aWxsIGFsd2F5cyBiZSB0aGUgdmFsdWUgb2YgdGhlIEZQIGJpdCBpbiB0aGUgYXV0b21hdGljIEFDSyByZXNwb25zZSBmcmFtZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRlBfT1ZFUlJJREUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9GUF9PVkVSUklERSAweDIwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZQX09WRVJSSURFIDI1CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRlBfT1ZFUlJJREUgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9GUF9mb3JjZV92YWx1ZQorICoKKyAqIEluIGNhc2UgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgRlBfb3ZlcnJpZGUgaXMgc2V0LCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgRlBfZm9yY2VfdmFsdWUgd2lsbCBhbHdheXMgYmUgdGhlIHZhbHVlIG9mIHRoZSBGUCBiaXQgaW4gdGhlIGF1dG9tYXRpYyBBQ0sgcmVzcG9uc2UgZnJhbWUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZQX0ZPUkNFX1ZBTFVFIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRlBfRk9SQ0VfVkFMVUUgMHg0MDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9GUF9GT1JDRV9WQUxVRSAyNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZQX0ZPUkNFX1ZBTFVFIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRlRERl9MUERQX0VuYWJsZQorICoKKyAqIElmIHNldCwgbm90IG9ubHkgaXMgRlBfb3ZlcnJpZGUgYW5kIFNBIG1hdGNoaW5nIGRvbmUgb24gZGF0YV9yZXF1ZXN0IGZyYW1lcyBidXQgdG8gYWxsIGNvbW1hbmQgYW5kIGRhdGEgZnJhbWUgdHlwZXMgKGluIG5vcm1hbCBtb2RlKQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0xQRFBfRU5BQkxFIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9MUERQX0VOQUJMRSAweDgwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfTFBEUF9FTkFCTEUgMjcKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0xQRFBfRU5BQkxFIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF9vcworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MWYKKyAqIEFjY2VzcyBtb2RlOiBPUy1XIChvbmUtc2hvdCAtIHdyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfT1MgMHg0MDA5MDA1MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9PUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9PUyAweDFmCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfZ2V0R2VuZXJhdG9yVmFsCisgKgorICogSWYgc2V0IHRvICcxJywgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSBXYWtlLXVwIChldmVudCkgY291bnRlci9nZW5lcmF0b3IgKEV2ZW50Q3VyclZhbCkgYW5kIFRpbWVzdGFtcCAoc3ltYm9sKSBjb3VudGVyL2dlbmVyYXRvciAoVGltZVN0YW1wQ3VyclZhbCBhbmQgVGltZVN0YW1wQ3VyclBoYXNlVmFsKSB3aWxsIGJlIGNhcHR1cmVkLgorICogTm90ZSB0aGF0IHRoaXMgY2FwdHVyZSBhY3R1YWxseSBoYXMgYmVlbiBkb25lIHdoZW4gZ2V0R2VuZXJhdG9yVmFsX2UgaXMgc2V0IChhc3N1bWluZyBpdCB3YXMgY2xlYXJlZCBpbiBhZHZhbmNlKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTCAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfUnhFbmFibGUKKyAqCisgKiBJZiBzZXQsIHJlY2VpdmluZyBkYXRhIG1heSBiZSBkb25lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYRU5BQkxFIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYRU5BQkxFIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhFTkFCTEUgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYRU5BQkxFIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU2luZ2xlQ0NBCisgKgorICogSWYgc2V0IHRvICcxJywgYSBzaW5nbGUgQ0NBIHdpbGwgYmUgcGVyZm9ybWVkLgorICogVGhpcyBjYW4gYmUgdXNlZCB3aGVuIGUuZy4gdGhlIFRTQ0ggdGltaW5nIGlzIG5vdCBwZXJmb3JtZWQgYnkgdGhlIExNQUMgYnV0IGNvbXBsZXRlbHkgYnkgc29mdHdhcmUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJTkdMRUNDQSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TSU5HTEVDQ0EgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TSU5HTEVDQ0EgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJTkdMRUNDQSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0NzbWFfQ2FfcmVzdW1lX3NldAorICoKKyAqIElmIHNldCwgQ3NtYV9DYV9yZXN1bWVfc3RhdCBpcyBzZXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9SRVNVTUVfU0VUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfUkVTVU1FX1NFVCAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfUkVTVU1FX1NFVCAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9SRVNVTUVfU0VUIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfQ3NtYV9DYV9yZXN1bWVfY2xlYXIKKyAqCisgKiBJZiBzZXQsIENzbWFfQ2FfcmVzdW1lX3N0YXQgaXMgY2xlYXJlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX1JFU1VNRV9DTEVBUiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX1JFU1VNRV9DTEVBUiAweDEwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX1JFU1VNRV9DTEVBUiA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9SRVNVTUVfQ0xFQVIgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sX3N0YXR1cworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfU1RBVFVTIDB4NDAwOTAwNTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfU1RBVFVTIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUyAweGZmMGZmZjQ2CisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1JlYWR5NHNsZWVwCisgKgorICogSWYgc2V0IHRvICcxJyB0aGlzIHJlZ2lzdGVyIGluZGljYXRlcyB0aGF0IHRoZSBMTUFDIGlzIHJlYWR5IHRvIGdvIHRvIHNsZWVwLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUCAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUCAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfQ0NBU3RhdAorICoKKyAqIFRoZSB2YWx1ZSBvZiBhIHNpbmdsZSBDQ0EsIHZhbGlkIHdoZW4gQ0NBc3RhdF9lIGlzIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVQgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfV2FrZXVwVGltZXJFbmFibGVTdGF0dXMKKyAqCisgKiBTdGF0dXMgb2YgV2FrZXVwVGltZXJFbmFibGUgYWZ0ZXIgYmVpbmcgY2xvY2tlZCBieSBMUF9DTEsgKHNob3dpbmcgaXQncyBlZmZlY3RpdmUgdmFsdWUpLgorICogV2FrZXVwVGltZXJFbmFibGVTdGF0dXMgY2FuIGJlIHNldCBieSBzZXR0aW5nIHRoZSBvbmUtc2hvdCByZWdpc3RlciBXYWtldXBUaW1lckVuYWJsZV9zZXQgYW5kIGNsZWFyZWQgYnkgc2V0dGluZyB0aGUgb25lLXNob3QgcmVnaXN0ZXIgV2FrZXVwVGltZXJFbmFibGVfY2xlYXIuCisgKiBXaGVuIFdha2V1cFRpbWVyRW5hYmxlU3RhdHVzIGlzIHNldCAoYWZ0ZXIgYmVpbmcgY2xlYXJlZCksIHRoZSBldmVudCBjb3VudGVyIHdpbGwgYmUgcmVzZXQgdG8gMHgwLgorICoKKyAqIFRoaXMgc3RhdHVzIGNhbiBiZSB1c2VkIGJ5IHNvZnR3YXJlIHNpbmNlIFdha2V1cFRpbWVyRW5hYmxlIGlzIHVzZWQgaW4gdGhlIHNsb3cgTFBfQ0xLIGFyZWEuCisgKiBSYXRoZXIgdGhhbiB3YWl0aW5nIGZvciBhIGNlcnRhaW4gbnVtYmVyIG9mIExQX0NMSyBwZXJpb2RzLCBzaW1wbHkgc2Nhbm5pbmcgdGhpcyBzdGF0dXMgKG9yIGVuYWJsZSB0aGUgaW50ZXJydXB0IGNyZWF0ZWQgYnkgV2FrZXVwVGltZXJFbmFibGVTdGF0dXNfZSkgd2lsbCBhbGxvdyBzb2Z0d2FyZSB0byBkZXRlcm1pbmUgaWYgdGhpcyBzaWduYWwgaGFzIGJlZW4gZWZmZWN0ZWQuCisgKiBOb3RlIHRoYXQgdGhlIHJpc2luZyBlZGdlIG9mIFdha2V1cFRpbWVyRW5hYmxlIHdpbGwgcmVzZXQgdGhlIFdha2UtdXAgKGV2ZW50KSBjb3VudGVyLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVUyBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVMgMHg0MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVMgNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9FZFNjYW5WYWx1ZQorICoKKyAqIFRoZSByZXN1bHQgb2YgYW4gRUQgc2Nhbi4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOVkFMVUUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlZBTFVFIDB4ZmYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOVkFMVUUgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlZBTFVFIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9Dc21hX0NhX05CX3N0YXQKKyAqCisgKiBDdXJyZW50IHN0YXR1cyBvZiB0aGUgTnVtYmVyIG9mIEJhY2tvZmZzLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX05CX1NUQVQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfTkJfU1RBVCAweDcwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX05CX1NUQVQgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX05CX1NUQVQgMworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9Dc21hX0NhX3Jlc3VtZV9zdGF0CisgKgorICogSW4gY2FzZSBDc21hX0NhX3Jlc3VtZV9zdGF0IGlzIHNldCB0aGUgTE1BQyB3aWxsCisgKiAtIHVzZSB0aGUgdmFsdWUgb2YgQ3NtYV9DYV9OQl92YWwgaW4gdGhlIENTTUEtQ0EgcHJvY2VzcyByYXRoZXIgdGhhbiB0aGUgaW5pdGlhbCB2YWx1ZSAwZC4KKyAqIC0gaW1tZWRpYXRlbHkgcGVyZm9ybSBDQ0EgYWZ0ZXIgdGhlIHNsZWVwLCBub3Qgd2FpdGluZyBmb3IgdGhlIGJhY2tvZmYgdGltZS4KKyAqIC0gcmVzZXQgQ3NtYV9DYV9yZXN1bWVfc3RhdCB3aGVuIGl0IHJlc3VtZXMgQ1NNQS1DQSBhZnRlciB0aGUgc2xlZXAuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfUkVTVU1FX1NUQVQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfUkVTVU1FX1NUQVQgMHg4MDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9SRVNVTUVfU1RBVCAxOQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfUkVTVU1FX1NUQVQgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0NzbWFfQ2FfQk9fc3RhdAorICoKKyAqIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudGx5IGNhbGN1bGF0ZWQgQmFja09mZiB2YWx1ZS4gVG8gYmUgdXNlZCBmb3IgdGhlIHNsZWVwIHRpbWUgY2FsY3VsYXRpb24gaW4gY2FzZSBvZiBzbGVlcCBkdXJpbmcgdGhlIEJhY2tPZmYgdGltZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19TVEFUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfU1RBVFVTCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1NUQVQgMHhmZjAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19TVEFUIDI0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19TVEFUIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX0V2ZW50Q3VyclZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwgMHg0MDA5MDA1OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAweDFmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0V2ZW50Q3VyclZhbAorICoKKyAqIFRoZSB2YWx1ZSBvZiB0aGUgY2FwdHVyZWQgRXZlbnQgZ2VuZXJhdG9yIChXYWtlLXVwIGNvdW50ZXIpIChpbml0aWF0ZWQgYnkgZ2V0R2VuZXJhdG9yVmFsLCB2YWxpZCB3aGVuIGdldEdlbmVyYXRvclZhbF9lIGlzIHNldCkuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfRVZFTlRDVVJSVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwgMHgxZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAyNQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfVGltZVN0YW1wQ3VyclZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSVkFMIDB4NDAwOTAwNWMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSVkFMIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTCAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9UaW1lU3RhbXBDdXJyVmFsCisgKgorICogVGhlIHZhbHVlIG9mIGNhcHR1cmVkIHRpbWVzdGFtcCBnZW5lcmF0b3IgKHN5bWJvbCBjb3VudGVyKSAoaW5pdGlhdGVkIGJ5IGdldEdlbmVyYXRvclZhbCwgdmFsaWQgd2hlbiBnZXRHZW5lcmF0b3JWYWxfZSBpcyBzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJWQUwgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJWQUwKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJWQUwgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfVGltZVN0YW1wQ3VyclBoYXNlVmFsCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTCAweDQwMDkwMDc0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlBIQVNFVkFMIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlBIQVNFVkFMIDB4ZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1RpbWVTdGFtcEN1cnJQaGFzZVZhbAorICoKKyAqIFZhbHVlIG9mIGNhcHR1cmVkIHRpbWVzdGFtcCBnZW5lcmF0b3IgcGhhc2Ugd2l0aGluIGEgc3ltYm9sIChpbml0aWF0ZWQgYnkgZ2V0R2VuZXJhdG9yVmFsLCB2YWxpZCB3aGVuIGdldEdlbmVyYXRvclZhbF9lIGlzIHNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlBIQVNFVkFMIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTCAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTCA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUU1R4QWNrRGVsYXlWYWwKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMIDB4NDAwOTAwNzgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwgMHhmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUU1R4QWNrRGVsYXlWYWwKKyAqCisgKiBUaGUgdGltZSAoaW4gdXMpIGxlZnQgdW50aWwgdGhlIGFjayBmcmFtZSBpcyBzZW50IGJ5IHRoZSBsbWFjLgorICogVGhpcyBjYW4gYmUgdXNlZCBieSBzb2Z0d2FyZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgZW5vdWdoIHRpbWUgbGVmdCB0byBzZW5kIHRoZSwgYnkgc29mdHdhcmUgY3JlYXRlZCwgRW5oYW5jZWQgQUNLIGZyYW1lLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWVZBTAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF80CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNCAweDQwMDkwMDYwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNCAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlTbGVlcFdhaXQKKyAqCisgKiBUaGUgbWludW1lIHRpbWUgKGluIHVzKSByZXF1aXJlZCBiZXR3ZWVuIHRoZSBjbGVhciB0byAnMCcgYW5kIHNldCB0byAnMScgb2YgUEhZX0VOLgorICogV2hlbiB0aGUgc2lnbmFsIFBIWV9FTiBpcyBkZWFzc2VydGVkLCBpdCB3aWxsIG5vdCBiZSBhc3NlcnRlZCB3aXRoaW4gdGhlIHRpbWUgcGh5U2xlZXBXYWl0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlTTEVFUFdBSVQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF80CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlTTEVFUFdBSVQgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZU0xFRVBXQUlUIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlTTEVFUFdBSVQgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4UGlwZVByb3BEZWxheQorICoKKyAqIFRoZSBjb250cm9sIHJlZ2lzdGVyIFJ4UGlwZVByb3BEZWxheSBpbmRpY2F0ZXMgdGhlIHByb3BhZ2F0aW9uIGRlbGF5IGluIH5zIG9mIHRoZSBSeCBwaXBlbGluZSBiZXR3ZWVuIHRoZSBsYXN0IHN5bWJvbCBiZWluZyBjYXB0dXJlZCBhdCB0aGUgRFBIWSBpbnRlcmZhY2UgYW5kIHRoZSAiZGF0YSB2YWxpZCIgaW5kaWNhdGlvbiB0byB0aGUgTE1BQyBjb250cm9sbGVyLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFBJUEVQUk9QREVMQVkgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF80CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFBJUEVQUk9QREVMQVkgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFBJUEVQUk9QREVMQVkgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYUElQRVBST1BERUxBWSA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5QWNrQXR0cgorICoKKyAqIER1cmluZyB0cmFuc21pc3Npb24gb2YgYW4gQUNLIGZyYW1lLCBwaHlBY2tBdHRyIGlzIHVzZWQgYXMgUEhZQVRUUiBvbiB0aGUgRFBIWSBpbnRlcmZhY2UuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUFDS0FUVFIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF80CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlBQ0tBVFRSIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUFDS0FUVFIgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlBQ0tBVFRSIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfNQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDhjMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmMGZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNSAweDQwMDkwMDY0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzUgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNSAweGZmZmYwZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9BY2tfUmVzcG9uc2VfRGVsYXkKKyAqCisgKiBJbiBvcmRlciB0byBoYXZlIHNvbWUgZmxleGliaWxpdHkgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgQWNrX1Jlc3BvbnNlX0RlbGF5IGluZGljYXRlcyB0aGUgQWNrbm93bGVkZ2UgcmVzcG9uc2UgdGltZSBpbiB+cy4KKyAqIFRoZSBkZWZhdWx0IHZhbHVlIHNoYWxsIGlzIDE5MiB+cyAoMTIgc3ltYm9scykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FDS19SRVNQT05TRV9ERUxBWSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzUKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FDS19SRVNQT05TRV9ERUxBWSAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9BQ0tfUkVTUE9OU0VfREVMQVkgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FDS19SRVNQT05TRV9ERUxBWSA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfQ2NhU3RhdFdhaXQKKyAqCisgKiBUaGUgb3V0cHV0IENDQVNUQVQgaXMgdmFsaWQgYWZ0ZXIgOCBzeW1ib2xzICsgcGh5UnhTdGFydHVwLgorICogVGhlIDggc3ltYm9scyBhcmUgcHJvZ3JhbW1hYmxlIGJ5IGNvbnRyb2wgcmVnaXN0ZXJDY2FTdGF0V2FpdCAoaW4gc3ltYm9sIHBlcmlvZHMpLgorICogRGVmYXVsdCB2YWx1ZSBpcyA4ZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVFdBSVQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF81CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUV0FJVCAweGYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVFdBSVQgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRXQUlUIDQKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlDc21hQ2FBdHRyCisgKgorICogRHVyaW5nIENTTUEtQ0Egb3IgQ0NBLCB0aGUgY29udHJvbCByZWdpc3RlciBwaHlDc21hQ2FBdHRyIGlzIHVzZWQgdG8gc291cmNlIFBIWUFUVCBvbiB0aGUgRFBIWSBpbnRlcmZhY2UuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUNTTUFDQUFUVFIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF81CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlDU01BQ0FBVFRSIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUNTTUFDQUFUVFIgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlDU01BQ0FBVFRSIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfNgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweGMwYzI4ICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNiAweDQwMDkwMDY4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzYgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNiAweGZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfTGlmc1BlcmlvZAorICoKKyAqIFRoZSBMb25nIElGUyBwZXJpb2QgaXMgcHJvZ3JhbW1hYmxlIGJ5IExpZnNQZXJpb2QgKGluIHN5bWJvbHMpLgorICogVGhlIGRlZmF1bHQgaXMgNDAgc3ltYm9scyAoNjQwIHVzKSwKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTElGU1BFUklPRCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzYKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xJRlNQRVJJT0QgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTElGU1BFUklPRCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTElGU1BFUklPRCA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfU2lmc1BlcmlvZAorICoKKyAqIFRoZSBTaG9ydCBJRlMgcGVyaW9kIGlzIHByb2dyYW1tYWJsZSBieSBTaWZzUGVyaW9kIChpbiBzeW1ib2xzKS4KKyAqIFRoZSBkZWZhdWx0IGlzIDEyIHN5bWJvbHMgKDE5MiBpcykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJRlNQRVJJT0QgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF82CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TSUZTUEVSSU9EIDB4ZmYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0lGU1BFUklPRCA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0lGU1BFUklPRCA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfV1VpZnNQZXJpb2QKKyAqCisgKiBUaGUgV2FrZVVwIElGUyBwZXJpb2QgaXMgcHJvZ3JhbW1hYmxlIGJ5IFdVaWZzUGVyaW9kIChpbiBzeW1ib2xzKS4KKyAqIFRoZSBkZWZhdWx0IGlzIDEyIHN5bWJvbHMgKDE5MiB1cykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dVSUZTUEVSSU9EIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfV1VJRlNQRVJJT0QgMHhmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dVSUZTUEVSSU9EIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfV1VJRlNQRVJJT0QgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzExCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4ZmYwMDAwMDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmYwZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzExIDB4NDAwOTAwNmMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTEgMHhmZjBmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUnhUb3RhbEN5Y2xlVGltZQorICoKKyAqIEluIENTTCBtb2RlIGl0IGNhbiBiZSBkZWNpZGVkIHRvIGRpc2FibGUgdGhlIFBIWSBSeCAoUngtb2ZmKSBhZnRlciByZWNlcHRpb24gb2YgYSBXYWtlLXVwIGZyYW1lIGFuZCBlbmFibGUgdGhlIFBIWSBSeCAoUngtb24pIHdoZW4gdGhlIGRhdGEgZnJhbWUgaXMgdG8gYmUgZXhwZWN0ZWQsIGJhc2VkIG9uIHRoZSByZWNlaXZlZCBSWiB0aW1lLgorICogSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY2FsY3VsYXRlIGlmIGl0IGlzIGVmZmljaWVudCB0byBzd2l0Y2ggdG8gUngtb2ZmIGFuZCBSeC1vbiBhZ2FpbiwgYSBjb250cm9sIHJlZ2lzdGVyIGluZGljYXRlcyB0aGUgdGltZSBuZWVkZWQgdG8gZGlzYWJsZSBhbmQgZW5hYmxlIHRoZSBQSFkgUng6IG1hY1J4VG90YWxDeWNsZVRpbWUgKHJlc29sdXRpb24gaXMgMTAgc3ltYm9sIHBlcmlvZHMpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVE9UQUxDWUNMRVRJTUUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhUT1RBTENZQ0xFVElNRSAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVE9UQUxDWUNMRVRJTUUgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVE9UQUxDWUNMRVRJTUUgMTYKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjRGlzQ2FSeE9mZnRvUloKKyAqCisgKiBUaGUgc3dpdGNoaW5nIG9mZiBhbmQgb24gb2YgdGhlIFBIWSBSeCAoc2VlIG1hY1J4VG90YWxDeWNsZVRpbWUpIGNhbiBiZSBkaXNhYmxlZCB3aGl0aCB0aGUgY29udHJvbCByZWdpc3RlciBtYWNEaXNDYVJ4T2ZmdG9SWi4KKyAqICAwIDogRGlzYWJsZWQKKyAqICAxIDogRW5hYmxlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNESVNDQVJYT0ZGVE9SWiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzExCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNESVNDQVJYT0ZGVE9SWiAweDEwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNESVNDQVJYT0ZGVE9SWiAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0RJU0NBUlhPRkZUT1JaIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9Dc21hX0NhX05CX3ZhbAorICoKKyAqIE51bWJlciBvZiBiYWNrb2ZmcyB2YWx1ZSBpbiBjYXNlIG9mIGEgQ1NNQS1DQSByZXN1bWUgYWN0aW9uLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX05CX1ZBTCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzExCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX05CX1ZBTCAweGUwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX05CX1ZBTCAxNworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfTkJfVkFMIDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9Dc21hX0NhX0JPX3RocmVzaG9sZAorICoKKyAqIElmIHRoZSBiYWNrb2ZmIHRpbWUgY2FsY3VsYXRlZCBpbiB0aGUgQ1NNQS1DQSBwcm9jZWR1cmUgYXMgZGVzY3JpYmVkIGluIFtGUjMyODBdIGlzIGVxdWFsIHRvIG9yIGhpZ2hlciB0aGFuIHRoZSBjb250cm9sIHJlZ2lzdGVyIENzbWFfQ2FfQk9fdGhyZXNob2xkWzhdIChyZXNvbHV0aW9uIDMyMHVzLCBzZWUgW0ZSMzI5MF0pIHRoZSBldmVudCByZWdpc3RlciBDc21hX0NhX0JPX3Rocl9lIHdpbGwgYmUgc2V0IGFuZCBhbiBpbnRlcnJ1cHQuCisgKiBJbiBjYXNlIENzbWFfQ2FfQk9fdGhyZXNob2xkIGVxdWFscyAweEZGIG5vIGNoZWNrIHdpbGwgYmUgcGVyZm9ybWVkIGFuZCBjb25zZXF1ZW50bHkgQ3NtYV9DYV9CT190aHJfZSB3aWxsIG5vdCBiZSBzZXQgYW5kIG5vIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19USFJFU0hPTEQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19USFJFU0hPTEQgMHhmZjAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19USFJFU0hPTEQgMjQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUkVTSE9MRCA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfZGVsdGEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDdlCisgKiBBY2Nlc3MgbW9kZTogRC1SQ1cgKGRlbHRhIHJlYWQvY2xlYXIgb24gd3JpdGUgMSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBIDB4NDAwOTAwNzAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEgMHg3ZQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZWFkeTRzbGVlcF9kCisgKgorICogRGVsdGEgYml0IGZvciByZWdpc3RlciAiTG1hY1JlYWR5NHNsZWVwIi4KKyAqIFRoaXMgZGVsdGEgYml0IGlzIHNldCB0byAnMScgb24gZWFjaCBjaGFuZ2Ugb2YgdGhpcyBzdGF0dXMsIGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbM10uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9EIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9EIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX0QgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9EIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcF9lCisgKgorICogVGhlIFN5bmNUaW1lU3RhbXBfZSBldmVudCBpcyBzZXQgdG8gJzEnIHdoZW4gdGhlIFRpbWVTdGFtcGdlbmVyYXRvciBpcyBsb2FkZWQgd2l0aCBTeW5jVGltZVN0YW1wVmFsLgorICogVGhpcyBvY2N1cnMgYXQgdGhlIHJpc2luZyBlZGdlIG9mIGxwX2NsayB3aGVuIFN5bmNUaW1lU3RhbXBFbmEgaXMgc2V0IGFuZCB0aGUgdmFsdWUgb2YgdGhlIEV2ZW50IGdlbmVyYXRvciBpcyBlcXVhbCB0byB0aGUgdmFsdWUgU3luY1RpbWVzdGFtcFRoci4KKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbM10uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QX0UgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QX0UgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWVUaHJfZQorICoKKyAqIEV2ZW50LCBzZXQgdG8gJzEnIHdoZW4gdGhlIHN5bWJvbHRpbWUgY291bnRlciBtYXRjaGVkIFN5bWJvbFRpbWVUaHIKKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbM10uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX0UgMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX0UgMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWUyVGhyX2UKKyAqCisgKiBFdmVudCwgc2V0IHRvICcxJyB3aGVuIHRoZSBzeW1ib2x0aW1lIGNvdW50ZXIgbWF0Y2hlZCBTeW1ib2xUaW1lMlRocgorICogVGhpcyBldmVudCBiaXQgY29udHJpYnV0ZXMgdG8gZnRkZl9jZVszXS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUl9FIDB4MTAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX0UgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX0UgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9nZXRHZW5lcmF0b3JWYWxfZQorICoKKyAqIEV2ZW50LCBzZXQgdG8gJzEnIHRvIGluZGljYXRlIHRoYXQgdGhlIHRoZSBnZXRHZW5lcmF0b3JWYWwgcmVxdWVzdCBpcyBjb21wbGV0ZWQuCisgKiBUaGlzIGV2ZW50IGJpdCBjb250cmlidXRlcyB0byBmdGRmX2NlWzNdLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRSAweDIwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRSA1CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX0UgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9XYWtldXBUaW1lckVuYWJsZVN0YXR1c19kCisgKgorICogRGVsdGEgd2hpY2ggaW5kaWNhdGVzIHRoYXQgV2FrZXVwVGltZXJFbmFibGVTdGF0dXMgaGFzIGNoYW5nZWQKKyAqIFRoaXMgZGVsdGEgYml0IGlzIHNldCB0byAnMScgb24gZWFjaCBjaGFuZ2Ugb2YgdGhpcyBzdGF0dXMsIGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbM10uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX0QgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9ERUxUQQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfRCAweDQwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19EIDYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19EIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF9tYXNrCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHg3ZQorICogQWNjZXNzIG1vZGU6IERNLVJXIChkZWx0YSBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSyAweDQwMDkwMDgwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0sgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSyAweDdlCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1JlYWR5NHNsZWVwX20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZGVsdGEgYml0ICJMbWFjUmVhZHk0c2xlZXBfZCIuCisgKiBUaGUgbWFzayBiaXQgaXMgbWFza2luZyB3aGVuIGNsZWFyZWQgdG8gJzAnIChkZWZhdWx0IHZhbHVlKSBhbmQgd2lsbCBlbmFibGUgdGhlIGNvbnRyaWJ1dGlvbiB0byB0aGUgaW50ZXJydXB0IHdoZW4gc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfTSAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9NIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfTSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCByZWdpc3RlciBTeW5jVGltZVN0YW1wX2UuCisgKiBUaGUgbWFzayBiaXQgaXMgbWFza2luZyB3aGVuIGNsZWFyZWQgdG8gJzAnIChkZWZhdWx0IHZhbHVlKSBhbmQgd2lsbCBlbmFibGUgdGhlIGNvbnRyaWJ1dGlvbiB0byB0aGUgaW50ZXJydXB0IHdoZW4gc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9NIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9NIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QX00gMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lVGhyX20KKyAqCisgKiBNYXNrIGZvciBTeW1ib2xUaW1lVGhyX2UKKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX00gMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX00gMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfTSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWUyVGhyX20KKyAqCisgKiBNYXNrIGZvciBTeW1ib2xUaW1lMlRocl9lCisgKiBUaGUgbWFzayBiaXQgaXMgbWFza2luZyB3aGVuIGNsZWFyZWQgdG8gJzAnIChkZWZhdWx0IHZhbHVlKSBhbmQgd2lsbCBlbmFibGUgdGhlIGNvbnRyaWJ1dGlvbiB0byB0aGUgaW50ZXJydXB0IHdoZW4gc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX00gMHgxMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfTSA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfTSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2dldEdlbmVyYXRvclZhbF9tCisgKgorICogTWFzayBmb3IgZ2V0R2VuZXJhdG9yVmFsX2UKKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9NIDB4MjAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9NIDUKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfTSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1dha2V1cFRpbWVyRW5hYmxlU3RhdHVzX20KKyAqCisgKiBNYXNrIGZvciBXYWtldXBUaW1lckVuYWJsZVN0YXR1c19kCisgKiBUaGUgbWFzayBiaXQgaXMgbWFza2luZyB3aGVuIGNsZWFyZWQgdG8gJzAnIChkZWZhdWx0IHZhbHVlKSBhbmQgd2lsbCBlbmFibGUgdGhlIGNvbnRyaWJ1dGlvbiB0byB0aGUgaW50ZXJydXB0IHdoZW4gc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX00gMHg0MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfTSA2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfTSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2V2ZW50CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmCisgKiBBY2Nlc3MgbW9kZTogRS1SQ1cgKGV2ZW50IHJlYWQvY2xlYXIgb24gd3JpdGUgMSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19FVkVOVCAweDQwMDkwMDkwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19FVkVOVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfRVZFTlQgMHhmCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRWRTY2FuUmVhZHlfZQorICoKKyAqIFRoZSBldmVudCBFZFNjYW5SZWFkeV9lIGlzIHNldCB0byAnMScgdG8gbm90aWZ5IHRoYXQgdGhlIEVEIHNjYW4gaXMgcmVhZHkuCisgKiBUaGlzIGV2ZW50IGJpdCBjb250cmlidXRlcyB0byBmdGRmX2NlWzFdLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9FIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOUkVBRFlfRSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOUkVBRFlfRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0NDQXN0YXRfZQorICoKKyAqIElmIHNldCB0byAnMScsIHRoZSBzaW5nbGUgQ0NBIGlzIHJlYWR5CisgKiBUaGlzIGV2ZW50IGJpdCBjb250cmlidXRlcyB0byBmdGRmX2NlWzFdLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUX0UgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRfRSAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRfRSAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVF9FIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfUnhUaW1lckV4cGlyZWRfZQorICoKKyAqIFNldCB0byAnMScgaWYgb25lIG9mIHRoZSB0aW1lcnMgZW5hYmxpbmcgdGhlIFJ4LW9uIG1vZGUgZXhwaXJlcyB3aXRob3V0IGhhdmluZyByZWNlaXZlZCBhbnkgdmFsaWQgZnJhbWUuCisgKiBUaGlzIGV2ZW50IGJpdCBjb250cmlidXRlcyB0byBmdGRmX2NlWzFdLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9FIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfRSAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0NzbWFfQ2FfQk9fdGhyX2UKKyAqCisgKiBJZiBzZXQsIHRoZSBjYWxjdWxhdGVkIGJhY2tvZmYgdGltZSBpcyBtb3JlIHRoYW4gQ3NtYV9DYV9CT190aHJlc2hvbGQuCisgKiBUaGlzIGV2ZW50IGJpdCBjb250cmlidXRlcyB0byBmdGRmX2NlWzFdLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9FIDB4OAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19USFJfRSAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19USFJfRSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hc2sKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGYKKyAqIEFjY2VzcyBtb2RlOiBFTS1SVyAoZXZlbnQgbWFzaykKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQVNLIDB4NDAwOTAwOTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BU0sgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BU0sgMHhmCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRWRTY2FuUmVhZHlfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAiRWRTY2FuUmVhZHlfZSIKKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX00gMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9NIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9NIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfQ0NBc3RhdF9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJDQ0FzdGF0X2UiCisgKiBUaGUgbWFzayBiaXQgaXMgbWFza2luZyB3aGVuIGNsZWFyZWQgdG8gJzAnIChkZWZhdWx0IHZhbHVlKSBhbmQgd2lsbCBlbmFibGUgdGhlIGNvbnRyaWJ1dGlvbiB0byB0aGUgaW50ZXJydXB0IHdoZW4gc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVF9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRfTSAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRfTSAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVF9NIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfUnhUaW1lckV4cGlyZWRfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAiUnhUaW1lckV4cGlyZWRfZSIKKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYVElNRVJFWFBJUkVEX00gMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9NIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9NIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfQ3NtYV9DYV9CT190aHJfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAiQ3NtYV9DYV9CT190aHJfZSIKKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fVEhSX00gMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9NIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9NIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYwZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEgMHg0MDA5MDBhMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF8xIDB4ZmZmZjBmZmYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9tb2RlCisgKgorICogSWYgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgbG1hY19tYW51YWxfbW9kZSBpcyBzZXQgdG8gJzEnLCB0aGUgTE1BQyBjb250cm9sbGVyIGNvbnRyb2wgc2lnbmFscyBzaG91bGQgYmUgY29udHJvbGxlZCBieSB0aGUgbG1hY19tYW51YWxfY29udHJvbCByZWdpc3RlcnMKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfTU9ERSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfTU9ERSAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX01PREUgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX01PREUgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9waHlfZW4KKyAqCisgKiBsbWFjX21hbnVhbF9waHlfZW4gY29udHJvbHMgdGhlIFBIWV9FTiBpbnRlcmZhY2Ugc2lnbmFsIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QSFlfRU4gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BIWV9FTiAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BIWV9FTiAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUEhZX0VOIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfdHhfZW4KKyAqCisgKiBsbWFjX21hbnVhbF90eF9lbiBjb250cm9scyB0aGUgVFhfRU4gaW50ZXJmYWNlIHNpZ25hbCB3aGVuIGxtYWNfbWFudWFsX21vZGUgaXMgc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRU4gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX0VOIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRU4gMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX0VOIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfcnhfZW4KKyAqCisgKiBsbWFjX21hbnVhbF9yeF9lbiBjb250cm9scyB0aGUgUlhfRU4gaW50ZXJmYWNlIHNpZ25hbCB3aGVuIGxtYWNfbWFudWFsX21vZGUgaXMgc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfRU4gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1JYX0VOIDB4OAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfRU4gMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1JYX0VOIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfcnhfcGlwZV9lbgorICoKKyAqIGxtYWNfbWFudWFsX3J4X3BpcGVfZW4gY29udHJvbHMgdGhlIHJ4X2VuYWJsZSBzaWduYWwgdG93YXJkcyB0aGUgcnggcGlwZWxpbmUgd2hlbiBsbWFjX21hbnVhbF9tb2RlIGlzIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1JYX1BJUEVfRU4gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1JYX1BJUEVfRU4gMHgxMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfUElQRV9FTiA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfUElQRV9FTiAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX2VkX3JlcXVlc3QKKyAqCisgKiBsbWFjX21hbnVhbF9lZF9yZXF1ZXN0IGNvbnRyb2xzIHRoZSBFRF9SRVFVRVNUIGludGVyZmFjZSBzaWduYWwgd2hlbiBsbWFjX21hbnVhbF9tb2RlIGlzIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0VEX1JFUVVFU1QgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0VEX1JFUVVFU1QgMHgyMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfUkVRVUVTVCA1CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfUkVRVUVTVCAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfdHhfZnJtX25yCisgKgorICogbG1hY19tYW51YWxfdHhfZnJtX25yIGNvbnRyb2xzIHRoZSBlbnRyeSBpbiB0aGUgdHggYnVmZmVyIHRvIGJlIHRyYW5zbWl0dGVkIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9GUk1fTlIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX0ZSTV9OUiAweGMwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9GUk1fTlIgNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX0ZSTV9OUiAyCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfcHRpCisgKgorICogbG1hY19tYW51YWxfcHRpIGNvbnRyb2xzIHRoZSBQVEkgaW50ZXJmYWNlIHNpZ25hbCB3aGVuIGxtYWNfbWFudWFsX21vZGUgaXMgc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUFRJIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QVEkgMHhmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BUSSA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUFRJIDQKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9waHlfYXR0cgorICoKKyAqIGxtYWNfbWFudWFsX3BoeV9hdHRyIGNvbnRyb2xzIHRoZSBQSFlfQVRUUiBpbnRlcmZhY2Ugc2lnbmFsIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QSFlfQVRUUiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUEhZX0FUVFIgMHhmZmZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUEhZX0FUVFIgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QSFlfQVRUUiAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfb3MKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEKKyAqIEFjY2VzcyBtb2RlOiBPUy1XIChvbmUtc2hvdCAtIHdyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9PUyAweDQwMDkwMGE0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfT1MgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9PUyAweDEKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF90eF9zdGFydAorICoKKyAqIE9uZSBzaG90IHJlZ2lzdGVyIHdoaWNoIHRyaWdnZXJzIHRoZSB0cmFuc21pc3Npb24gb2YgYSBmcmFtZSBmcm9tIHRoZSB0eCBidWZmZXIgaW4gbG1hY19tYW51YWxfbW9kZSB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX1NUQVJUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfU1RBUlQgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9TVEFSVCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfU1RBUlQgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfc3RhdHVzCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1NUQVRVUyAweDQwMDkwMGE4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfU1RBVFVTIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfU1RBVFVTIDB4ZmYwMQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX2NjYV9zdGF0CisgKgorICogbG1hY19tYW51YWxfY2NhX3N0YXQgc2hvd3MgdGhlIHN0YXR1cyBvZiB0aGUgQ0NBX1NUQVQgRFBIWSBpbnRlcmZhY2Ugc2lnbmFsLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9DQ0FfU1RBVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfU1RBVFVTCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9DQ0FfU1RBVCAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0NDQV9TVEFUIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9DQ0FfU1RBVCAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfZWRfc3RhdAorICoKKyAqIGxtYWNfbWFudWFsX2VkX3N0YXQgc2hvd3MgdGhlIHN0YXR1cyBvZiB0aGUgRURfU1RBVCBEUEhZIGludGVyZmFjZSBzaWduYWwuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0VEX1NUQVQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfU1RBVCAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0VEX1NUQVQgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0VEX1NUQVQgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzcKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHg0MjAwMDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzcgMHg0MDA5MDEwMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF83IDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzcgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjV1VQZXJpb2QKKyAqCisgKiBJbiBDU0wgbW9kZSwgdGhlIFdha2UtdXAgZHVyYXRpb24gaW4gc3ltYm9sIHBlcmlvZHMuIER1cmluZyB0aGlzIHBlcmlvZCwgV2FrZS11cCBmcmFtZXMgd2lsbCBiZSB0cmFuc21pdHRlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDV1VQRVJJT0QgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF83CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNXVVBFUklPRCAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUEVSSU9EIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNXVVBFUklPRCAxNgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0NTTHNhbXBsZVBlcmlvZAorICoKKyAqIEluIENTTCBtb2RlLCB3aGVuIHBlcmZvcm1pbmcgYSBpZGxlIGxpc3RlbmluZywgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQgZm9yIGF0IGxlYXN0IG1hY0NTTHNhbXBsZVBlcmlvZCAoaW4gc3ltYm9sIG9lcmlvZHMpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xTQU1QTEVQRVJJT0QgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF83CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xTQU1QTEVQRVJJT0QgMHhmZmZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMU0FNUExFUEVSSU9EIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMU0FNUExFUEVSSU9EIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfOAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzggMHg0MDA5MDEwNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF84IDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzggMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQ1NMc3RhcnRTYW1wbGVUaW1lCisgKgorICogSW4gQ1NMIG1vZGUsIHRoZSBjb250cm9sIHJlZ2lzdGVyIG1hY0NTTHN0YXJ0U2FtcGxlVGltZSBpbmRpY2F0ZXMgdGhlIFRpbWVTdGFtcCBnZW5lcmF0b3IgdGltZSAoaW4gc3ltYm9sIHBlcmlvZHMpIHdoZW4gdG8gc3RhcnQgbGlzdGVuaW5nIChjYWxsZWQgImlkbGUgbGlzdGVuaW5nIikgb3IgdHJhbnNtaXR0aW5nICh3aGVuIHR4X2ZsYWdfc3RhdHVzIGlzIHNldCkuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTFNUQVJUU0FNUExFVElNRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzgKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTFNUQVJUU0FNUExFVElNRSAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xTVEFSVFNBTVBMRVRJTUUgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTFNUQVJUU0FNUExFVElNRSAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzkKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHg0MiAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOSAweDQwMDkwMTA4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzkgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOSAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNDU0xkYXRhUGVyaW9kCisgKgorICogSW4gQ1NMIG1vZGUsIGFmdGVyIHRoZSB3YWtlLXVwIHNlcXVlbmNlIGEgZGF0YSBmcmFtZSBpcyBleHBlY3RlZC4gVGhlIHJlY2VpdmVyIHdpbGwgYmUgZW5hYmxlZCBmb3IgYXQgbGVhc3QgYSBwZXJpb2Qgb2YgbWFjQ1NMZGF0YVBlcmlvZCAoaW4gc3ltYm9sIHBlcmlvZHMpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xEQVRBUEVSSU9EIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMREFUQVBFUklPRCAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTERBVEFQRVJJT0QgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTERBVEFQRVJJT0QgMTYKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNDU0xGcmFtZVBlbmRpbmdXYWl0VAorICoKKyAqIEluIENTTCBtb2RlLCBpZiBhIG5vbiBXYWtlLXVwIGZyYW1lIHdpdGggRnJhbWUgUGVuZGluZyBiaXQgPSAnMScgaXMgcmVjZWl2ZWQsIHRoZSByZWNlaXZlciBpcyBlbmFibGVkIGZvciBhdCBsZWFzdCBhbiBleHRyYSBwZXJpb2Qgb2YgbWFjQ1NMRnJhbWVQZW5kaW5nV2FpdFQgKGluIHN5bWJvbCBwZXJpb2RzKSBhZnRlciB0aGUgZW5kIG9mIHRoZSByZWNlaXZlZCBmcmFtZS4KKyAqIFRoZSB0aW1lIHRoZSBFbmhhbmNlZCBBQ0sgdHJhbnNtaXNzaW9uIGxhc3RzIChpZiBhcHBsaWNhYmxlKSBpcyBpbmNsdWRlZCBpbiB0aGlzIHRpbWUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTEZSQU1FUEVORElOR1dBSVRUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFQgMHhmZmZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFQgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xGUkFNRVBFTkRJTkdXQUlUVCAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzEwCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MjAwMDAwMDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZjAwZjAwZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzEwIDB4NDAwOTAxMGMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTAgMHhmMDBmMDBmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUlp6ZXJvVmFsCisgKgorICogSW4gQ1NMIG1vZGUsIGlmIHRoZSBjdXJyZW50IFJadGltZSBpcyBsZXNzIG9yIEVxdWFsIHRvIG1hY1JaemVyb1ZhbCBhbiBSWnRpbWUgd2l0aCB2YWx1ZSB6ZXJvIGlzIGluc2VydGVkIGluIHRoZSB3YWtldXAgZnJhbWUuIFNvIHRoaXMgaXMgYnkgZGVmYXVsdCB0aGUgbGFzdCBXYWtlLXVwIGZyYW1lIG9mIGEgV2FrZS11cCBzZXF1ZW5jZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlpaRVJPVkFMIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JaWkVST1ZBTCAweGYwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWlpFUk9WQUwgMjgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWlpFUk9WQUwgNAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0NTTG1hcmdpblJaCisgKgorICogSW4gQ1NMIG1vZGUsIHRoZSBzb2Z0d2FyZSBjYW4gc2V0IHRoZSBtYXJnaW4gZm9yIHRoZSBleHBlY3RlZCBmcmFtZSBieSBjb250cm9sIHJlZ2lzdGVyIG1hY0NTTG1hcmdpblJaIChpbiAxMCBzeW1ib2wgcGVyaW9kcykuCisgKiBUaGUgTE1BQyB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWNlaXZlciBpcyByZWFkeSB0byByZWNlaXZlIGRhdGEgdGhpcyBhbW91bnQgb2YgdGltZSBlYXJsaWVyIHRoYW4gdG8gYmUgZXhwZWN0ZWQgYnkgdGhlIHJlY2VpdmVkIFJaIHRpbWUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTE1BUkdJTlJaIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTE1BUkdJTlJaIDB4ZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTE1BUkdJTlJaIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMTUFSR0lOUlogNAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1dVUlpDb3JyZWN0aW9uCisgKgorICogSW4gQ1NMIG1vZGUsIHRoaXMgcmVnaXN0ZXIgc2hhbGwgYmUgdXNlZCBpZiB0aGUgV2FrZS11cCBmcmFtZSB0byBiZSB0cmFuc21pdHRlZCBpcyBsYXJnZXIgdGhhbiAxNSBvY3RldHMuCisgKiBJdCBzaGFsbCBpbmRpY2F0ZSB0aGUgYW1vdW50IG9mIGV4dHJhIGRhdGEgaW4gYSBXYWtlLXVwIGZyYW1lIGFmdGVyIHRoZSBSWiBwb3NpdGlvbiBpbiB0aGUgZnJhbWUgKGluIDEwIHN5bWJvbCBwZXJpb2RzKS4KKyAqIFRoaXMgY29ycmVjdGlvbiBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvcnJlY3QgUlogdGltZSBpcyBmaWxsZWQgaW4gYnkgdGhlIExNQUMuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUlpDT1JSRUNUSU9OIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUlpDT1JSRUNUSU9OIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUlpDT1JSRUNUSU9OIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNXVVJaQ09SUkVDVElPTiA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWN1cml0eV8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZjdmMGYwMgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wIDB4NDAwOTAxMTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMCAweGZmN2YwZjAyCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfc2VjVHhSeG4KKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogc2VlIHJlZ2lzdGVyICJzZWNFbnRyeSIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1RYUlhOIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNUWFJYTiAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1RYUlhOIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNUWFJYTiAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjRW50cnkKKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogdGhlIHNvZnR3YXJlIGluZGljYXRlcyBieSB0aGUgY29udHJvbCByZWdpc3RlcnMgc2VjRW50cnkgYW5kIHNlY1R4UnhuIHdoaWNoIGVudHJ5IHRvIHVzZSBhbmQgaWYgaXQncyBmcm9tIHRoZSBUeCBvciBSeCBidWZmZXIgKCcxJyByZXNwLiAnMCcpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTlRSWSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5UUlkgMHhmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOVFJZIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTlRSWSA0CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjQWxlbmd0aAorICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiB0aGUgbGVuZ3RoIG9mIHRoZSBhX2RhdGEgaXMgaW5kaWNhdGVkIGJ5IGNvbnRyb2wgcmVnaXN0ZXIgc2VjQWxlbmd0aCAoaW4gYnl0ZXMpLgorICogVGhlIGVuZCBvZiB0aGUgYV9kYXRhIGlzIHRoZSBzdGFydCBwb2ludCBvZiB0aGUgbV9kYXRhLiBTbyBzZWNBbGVuZ3RoIG11c3QgYWxzbyBiZSBzZXQgaWYgc2VjdXJpdHkgbGV2ZWw9PTQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FMRU5HVEggSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FMRU5HVEggMHg3ZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FMRU5HVEggMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBTEVOR1RIIDcKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNNbGVuZ3RoCisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IHRoZSBsZW5ndGggb2YgdGhlIG1fZGF0YSBpcyBpbmRpY2F0ZWQgYnkgY29udHJvbCByZWdpc3RlciBzZWNNbGVuZ3RoIChpbiBieXRlcykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ01MRU5HVEggSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ01MRU5HVEggMHg3ZjAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTUxFTkdUSCAyNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ01MRU5HVEggNworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNFbmNEZWNuCisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IHRoZSBjb250cm9sIHJlZ2lzdGVyIHNlY0VuY0RlY24gaW5kaWNhdGVzIHdoZXRoZXIgdG8gZW5jcnlwdCAoJzEnKSBvciBkZWNyeXB0ICgnMCcpIHRoZSBkYXRhLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNERUNOIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNERUNOIDB4ODAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOQ0RFQ04gMzEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNERUNOIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY3VyaXR5XzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMSAweDQwMDkwMTE0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzEgMHhmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNBdXRoRmxhZ3MKKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogcmVnaXN0ZXIgc2VjQXV0aEZsYWdzIGNvbnRhaW5zIHRoZSBhdXRoZW50aWNhdGlvbiBmbGFncyBmaWVsZHMuCisgKiBiaXRbN10gaXMgJzAnCisgKiBiaXRbNl0gaXMgIkFfZGF0YSBwcmVzZW50IgorICogYml0WzU6M106IDMtYml0IHNlY3VyaXR5IGxldmVsIG9mIG1fZGF0YQorICogYml0WzI6MF06IDMtYml0IHNlY3VyaXR5IGxldmVsIG9mIGFfZGF0YS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZMQUdTIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBVVRIRkxBR1MgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZMQUdTIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBVVRIRkxBR1MgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0VuY3JGbGFncworICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiByZWdpc3RlciBzZWNFbmNyRmxhZ3MgY29udGFpbnMgdGhlIGVuY3J5cHRpb24gZmxhZ3MgZmllbGQuCisgKiBCaXRzIFsyOjBdIGFyZSB0aGUgMy1iaXQgZW5jb2RpbmcgZmxhZ3Mgb2YgYV9kYXRhLCB0aGUgb3RoZXIgYml0cyBtc3V0IGJlIHNldCB0byAnMCcuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOQ1JGTEFHUyBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5DUkZMQUdTIDB4ZmYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5DUkZMQUdTIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNSRkxBR1MgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wIDB4NDAwOTAxMTgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0tleV8wCisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IFJlZ2lzdGVycyBzZWNLZXlbMC4uM10gIGNvbnRhaW4gdGhlIGtleSB0byBiZSB1c2VkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xIDB4NDAwOTAxMWMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0tleV8xCisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IHNlZSByZWdpc3RlciAic2VjS2V5XzAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzEgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzEgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzIgMHg0MDA5MDEyMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8yIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzIgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzIKKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogc2VlIHJlZ2lzdGVyICJzZWNLZXlfMCIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzIgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0tleV8zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMyAweDQwMDkwMTI0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMyAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMworICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiBzZWUgcmVnaXN0ZXIgInNlY0tleV8wIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMyBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMyAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMCAweDQwMDkwMTI4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMAorICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiByZWdpc3RlciBzZWNOb25jZVswLi4zXSBjb250YWlucyB0aGUgTm9uY2UgdG8gYmUgdXNlZCBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8wIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8wIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY05vbmNlXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgMHg0MDA5MDEyYworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8xIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY05vbmNlXzEKKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogc2VlIHJlZ2lzdGVyICJOb25jZV8wIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8xIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8xIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY05vbmNlXzIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIgMHg0MDA5MDEzMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8yIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY05vbmNlXzIKKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogc2VlIHJlZ2lzdGVyICJOb25jZV8wIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8yIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8yIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY05vbmNlXzMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgMHg0MDA5MDEzNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8zIDB4ZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY05vbmNlXzMKKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogc2VlIHJlZ2lzdGVyICJOb25jZV8wIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8zIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8zIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjdXJpdHlfb3MKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDMKKyAqIEFjY2VzcyBtb2RlOiBPUy1XIChvbmUtc2hvdCAtIHdyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9PUyAweDQwMDkwMTM4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfT1MgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9PUyAweDMKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNBYm9ydAorICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiBzZWUgcmVnaXN0ZXIgIk5vbmNlXzAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FCT1JUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUJPUlQgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBQk9SVCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUJPUlQgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNTdGFydAorICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiBvbmVfc2hvdCByZWdpc3RlciB0byBzdGFydCB0aGUgZW5jcnlwdGlvbiwgZGVjcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24gc3VwcG9ydCB0YXNrLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNTVEFSVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1NUQVJUIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDU1RBUlQgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1NUQVJUIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY3VyaXR5X3N0YXR1cworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9TVEFUVVMgMHg0MDA5MDE0MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX1NUQVRVUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX1NUQVRVUyAweDMKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNCdXN5CisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IHJlZ2lzdGVyICJzZWNCdXN5IiBpbmRpY2F0ZXMgaWYgdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0JVU1kgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQlVTWSAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0JVU1kgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0JVU1kgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNBdXRoRmFpbAorICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiBpbiBjYXNlIG9mIGRlY3J5cHRpb24sIHRoZSBzdGF0dXMgYml0IHNlY0F1dGhGYWlsIHdpbGwgYmUgc2V0IHdoZW4gdGhlIGF1dGhlbnRpY2F0aW9uIGhhcyBmYWlsZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FVVEhGQUlMIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FVVEhGQUlMIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZBSUwgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FVVEhGQUlMIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY3VyaXR5X2V2ZW50CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxCisgKiBBY2Nlc3MgbW9kZTogRS1SQ1cgKGV2ZW50IHJlYWQvY2xlYXIgb24gd3JpdGUgMSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfRVZFTlQgMHg0MDA5MDE1MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX0VWRU5UIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfRVZFTlQgMHgxCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfc2VjUmVhZHlfZQorICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiB0aGUgRXZlbnQgYml0IHNlY1JlYWR5X2UgaXMgc2V0IHRvICcxJyB3aGVuIHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzIGlzIHJlYWR5IChpLmUuIHNlY0J1c3kgaXMgY2xlYXJlZCkuCisgKiBUaGlzIGV2ZW50IGJpdCBjb250cmlidXRlcyB0byBmdGRmX2NlWzNdLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNSRUFEWV9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9FVkVOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDUkVBRFlfRSAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX0UgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX0UgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjdXJpdHlfZXZlbnRtYXNrCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxCisgKiBBY2Nlc3MgbW9kZTogRU0tUlcgKGV2ZW50IG1hc2spCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX0VWRU5UTUFTSyAweDQwMDkwMTU0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfRVZFTlRNQVNLIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfRVZFTlRNQVNLIDB4MQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY1JlYWR5X20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgInNlY1JlYWR5X2UiLgorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX0VWRU5UTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDUkVBRFlfTSAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX00gMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX00gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHNjaF9jb250cm9sXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHg4OTgwM2U4ICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8wIDB4NDAwOTAxNjAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8wIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTVHhBY2tEZWxheQorICoKKyAqIFRTQ0ggbW9kZTogdGhlIHRpbWUgYmV0d2VlbiB0aGUgZW5kIG9mIGEgUnggZnJhbWUgYW5kIHRoZSBzdGFydCBvZiBhbiBFbmhhbmNlZCBBY2tub3dsZWdkZSBmcmFtZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVkgMTYKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUU1J4V2FpdAorICoKKyAqIFRTQ0ggbW9kZTogVGhlIHRpbWVzIHRvIHdhaXQgZm9yIHN0YXJ0IG9mIGZyYW1lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhXQUlUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWFdBSVQgMHhmZmZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWFdBSVQgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYV0FJVCAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHNjaF9jb250cm9sXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHhjMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8xIDB4NDAwOTAxNjQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8xIDB4ZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjVFNSeFR4CisgKgorICogVFNDSCBtb2RlOiBUaGUgdGltZSBiZXR3ZWVuIHRoZSBDQ0EgYW5kIHRoZSBUWCBvZiBhIGZyYW1lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhUWCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhUWCAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhUWCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWFRYIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90c2NoX2NvbnRyb2xfMgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDE5MDAzMjAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzIgMHg0MDA5MDE2OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8yIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzIgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjVFNSeEFja0RlbGF5CisgKgorICogVFNDSCBtb2RlOiBFbmQgb2YgZnJhbWUgdG8gd2hlbiB0aGUgdHJhbnNtaXR0ZXIgc2hhbGwgbGlzdGVuIGZvciBBY2tub3dsZWRnZW1lbnQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWEFDS0RFTEFZIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWEFDS0RFTEFZIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWEFDS0RFTEFZIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYQUNLREVMQVkgMTYKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUU0Fja1dhaXQKKyAqCisgKiBUU0NIIG1vZGU6IFRoZSBtaW5pbXVtIHRpbWUgdG8gd2FpdCBmb3Igc3RhcnQgb2YgYW4gQWNrbm93bGVkZ2VtZW50CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQUNLV0FJVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQUNLV0FJVCAweGZmZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU0FDS1dBSVQgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU0FDS1dBSVQgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeV9wYXJhbWV0ZXJzXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHg3NjU0MzIxMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHg3Nzc3Nzc3NworICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wIDB4NDAwOTAxODAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMCAweDc3Nzc3Nzc3CisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeEJpdFBvc18wCisgKgorICogRFBIWSBpbnRlcmZhY2U6IGNvbnRyb2wgcnhCaXRQb3MoOCkoMykgY29udHJvbHMgdGhlIHBvc2l0aW9uIHRoYXQgYSBiaXQgc2hvdWxkIGhhdmUgYXQgdGhlIERQSFkgaW50ZXJmYWNlLgorICogU28gdGhlIGRlZmF1bHQgdmFsdWVzIGFyZSByeEJpdFBvc18wID0gMCwgcnhCaXRQb3NfMSA9IDEsIHJ4Qml0UG9zXzIgPSAyLCBldGMuCisgKgorICogTm90ZTEgdGhhdCB0aGlzIGlzIGEgY29udmVyc2lvbiBmcm9tIHJ4IERQSFkgaW50ZXJmYWNlIHRvIHRoZSBpbnRlcm5hbCBkYXRhIGJ5dGUKKyAqIFNvCisgKiAgZm9yKG49NztuPj0wO24tLSkKKyAqICAgIHJ4X2RhdGEobikgPSBkcGh5X2JpdCh0eF9CaXRQb3MobikpCisgKiAgZW5kZm9yCisgKgorICogTm90ZTIgdGhhdCByeEJpdFBvcyBhbmQgdHhCaXRQb3MgbXVzdCBoYXZlIGludmVyc2UgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18wIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18wIDB4NworI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMCAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhCaXRQb3NfMQorICoKKyAqIERQSFkgaW50ZXJmYWNlOiBzZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18xIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18xIDB4NzAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzEgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzEgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Qml0UG9zXzIKKyAqCisgKiBEUEhZIGludGVyZmFjZTogc2VlIHJ4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMiAweDcwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMiA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMiAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhCaXRQb3NfMworICoKKyAqIERQSFkgaW50ZXJmYWNlOiBzZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18zIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18zIDB4NzAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMyAxMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzMgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Qml0UG9zXzQKKyAqCisgKiBEUEhZIGludGVyZmFjZTogc2VlIHJ4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNCAweDcwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU180IDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNCAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhCaXRQb3NfNQorICoKKyAqIERQSFkgaW50ZXJmYWNlOiBzZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU181IElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU181IDB4NzAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU181IDIwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNSAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhCaXRQb3NfNgorICoKKyAqIERQSFkgaW50ZXJmYWNlOiBzZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU182IElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU182IDB4NzAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNiAyNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzYgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Qml0UG9zXzcKKyAqCisgKiBEUEhZIGludGVyZmFjZTogc2VlIHJ4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNyBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNyAweDcwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU183IDI4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNyAzCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlfcGFyYW1ldGVyc18xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4NzY1NDMyMTAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4Nzc3Nzc3NzcKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMSAweDQwMDkwMTg0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEgMHg3Nzc3Nzc3NworCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhCaXRQb3NfMAorICoKKyAqIERQSFkgaW50ZXJmYWNlOiBjb250cm9sIHR4Qml0UG9zKDgpKDMpIGNvbnRyb2xzIHRoZSBwb3NpdGlvbiB0aGF0IGEgYml0IHNob3VsZCBoYXZlIGF0IHRoZSBEUEhZIGludGVyZmFjZS4KKyAqIFNvIHRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgdHhCaXRQb3NfMCA9IDAsIHR4Qml0UG9zXzEgPSAxLCB0eEJpdFBvc18yID0gMiwgZXRjLgorICoKKyAqIE5vdGUxIHRoYXQgdGhpcyBpcyBhIGNvbnZlcnNpb24gZnJvbSBpbnRlcm5hbCBkYXRhIGJ5dGUgdG8gdGhlIERQSFkgaW50ZXJmYWNlLgorICogU28KKyAqICBmb3Iobj03O24+PTA7bi0tKQorICogICAgdHhfZHBoeV9iaXQobikgPSB0eF9kYXRhKHR4X0JpdFBvcyhuKSkKKyAqICBlbmRmb3IKKyAqCisgKiBOb3RlMiB0aGF0IHR4Qml0UG9zIGFuZCByeEJpdFBvcyBtdXN0IGhhdmUgaW52ZXJzZSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzAgMHg3CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18wIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18wIDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc18xCisgKgorICogRFBIWSBpbnRlcmZhY2U6IHNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzEgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzEgMHg3MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMSA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMSAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhCaXRQb3NfMgorICoKKyAqIERQSFkgaW50ZXJmYWNlOiBzZWUgdHhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18yIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18yIDB4NzAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18yIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18yIDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc18zCisgKgorICogRFBIWSBpbnRlcmZhY2U6IHNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzMgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzMgMHg3MDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18zIDEyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMyAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhCaXRQb3NfNAorICoKKyAqIERQSFkgaW50ZXJmYWNlOiBzZWUgdHhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU180IElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU180IDB4NzAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzQgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU180IDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc181CisgKgorICogRFBIWSBpbnRlcmZhY2U6IHNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzUgMHg3MDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzUgMjAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU181IDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc182CisgKgorICogRFBIWSBpbnRlcmZhY2U6IHNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzYgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzYgMHg3MDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU182IDI0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNiAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhCaXRQb3NfNworICoKKyAqIERQSFkgaW50ZXJmYWNlOiBzZWUgdHhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU183IElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU183IDB4NzAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzcgMjgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU183IDMKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeV9wYXJhbWV0ZXJzXzIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzIgMHg0MDA5MDE4OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18yIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeVR4U3RhcnR1cAorICoKKyAqIERQSFkgaW50ZXJmYWNlOiB0aGUgcGh5IHdhaXQgdGltZSAoaW4gdXMpIGJlZm9yZSB0cmFuc21pc3Npb24gb2YgYSBmcmFtZSBtYXkgc3RhcnQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYU1RBUlRVUCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhTVEFSVFVQIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYU1RBUlRVUCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhTVEFSVFVQIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlUeExhdGVuY3kKKyAqCisgKiBEUEhZIGludGVyZmFjZTogcGh5IGRlbGF5IChpbiB1cykgYmV0d2VlbiBEUEhZIGludGVyZmFjZSBhbmQgYWlyIGludGVyZmFjZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhMQVRFTkNZIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWExBVEVOQ1kgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWExBVEVOQ1kgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYTEFURU5DWSA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5VHhGaW5pc2gKKyAqCisgKiBEUEhZIGludGVyZmFjZTogUGh5IHdhaXQgdGltZSAoaW4gdXMpIGJlZm9yZSBkZWFzc2VydGluZyBUWF9FTiBhZnRlciBkZWFzc2VydGluZyBUWF9WQUxJRC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhGSU5JU0ggSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYRklOSVNIIDB4ZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWEZJTklTSCAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYRklOSVNIIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlUUnhXYWl0CisgKgorICogRFBIWSBpbnRlcmZhY2U6IFBoeSB3YWl0IHRpbWUgKGluIHVzKSBiZXR3ZWVuIGRlYXNzZXJ0aW9uIG9mIFRYX0VOIGFuZCBhc3NlcnRpb24gb2YgUlhfRU4gb3IgdmljZSB2ZXJzYS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFJYV0FJVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFJYV0FJVCAweGZmMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUUlhXQUlUIDI0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFJYV0FJVCA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlfcGFyYW1ldGVyc18zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MTAwMDAwMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzMgMHg0MDA5MDE4YworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18zIDB4MWZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5UnhTdGFydHVwCisgKgorICogRFBIWSBpbnRlcmZhY2U6IFBoeSB3YWl0IHRpbWUgKGluIHVzKSBiZWZvcmUgcmVjZWl2aW5nIG9mIGEgZnJhbWUgbWF5IHN0YXJ0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWFNUQVJUVVAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYU1RBUlRVUCAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWFNUQVJUVVAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYU1RBUlRVUCA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5UnhMYXRlbmN5CisgKgorICogRFBIWSBpbnRlcmZhY2U6IFBoeSBkZWxheSAoaW4gdXMpIGJldHdlZW4gYWlyIGFuZCBEUEhZIGludGVyZmFjZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhMQVRFTkNZIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWExBVEVOQ1kgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWExBVEVOQ1kgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYTEFURU5DWSA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5RW5hYmxlCisgKgorICogRFBIWSBpbnRlcmZhY2U6IEFzc2VydGluZyB0aGUgRFBIWSBpbnRlcmZhY2Ugc2lnbmFscyBUWF9FTiBvciBSWF9FTiBkb2VzIG5vdCB0YWtlIHBsYWNlIHdpdGhpbiB0aGUgdGltZSBwaHlFbmFibGUgYWZ0ZXIgYXNzZXJ0aW5nIHRoZSBzaWduYWwgUEhZX0VOLgorICogKGluIHVzKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZRU5BQkxFIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlFTkFCTEUgMHhmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUVOQUJMRSAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUVOQUJMRSA4CisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3VzZV9sZWdhY3lfcGh5X2VuCisgKgorICogSWYgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgdXNlX2xlZ2FjeV9waHlfZW4gaXMgc2V0IChkZWZhdWx0KSwgdGhlIG91dHB1dCBzaWduYWwgUEhZX1RSQU5TQUNUSU9OIHdpbGwgYmUgc291cmNlZCBieSBQSFlfRU4gcmF0aGVyIHRoYW4gUEhZX1RSQU5TQUNUSU9OLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9VU0VfTEVHQUNZX1BIWV9FTiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVVNFX0xFR0FDWV9QSFlfRU4gMHgxMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9VU0VfTEVHQUNZX1BIWV9FTiAyNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1VTRV9MRUdBQ1lfUEhZX0VOIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2NvbnRyb2xfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAgMHg0MDA5MDIwMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMCAweGZmZmZmZmYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9EYmdSeFRyYW5zcGFyZW50TW9kZQorICoKKyAqIElmIHNldCB5byAnMScsIFJ4IHBpcGUgaXMgZnVsbHkgc2V0IGluIHRyYW5zcGFyZW50IG1vZGUgKGZvciBkZWJ1ZyBwdXJwb3NlKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfREJHUlhUUkFOU1BBUkVOVE1PREUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfREJHUlhUUkFOU1BBUkVOVE1PREUgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdSWFRSQU5TUEFSRU5UTU9ERSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfREJHUlhUUkFOU1BBUkVOVE1PREUgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeEJlYWNvbk9ubHkKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCBvbmx5IEJlYWNvbnMgZnJhbWVzIGFyZSBhY2NlcHRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJFQUNPTk9OTFkgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCRUFDT05PTkxZIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCRUFDT05PTkxZIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJFQUNPTk9OTFkgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeENvb3JkUmVhbGlnbk9ubHkKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCBvbmx5IENvb3JkaW5hdG9yIFJlYWxpZ25tZW50IGZyYW1lcyBhcmUgYWNjZXB0ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhDT09SRFJFQUxJR05PTkxZIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQ09PUkRSRUFMSUdOT05MWSAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQ09PUkRSRUFMSUdOT05MWSAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhDT09SRFJFQUxJR05PTkxZIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9yZWFkX2J1Zl9wdHIKKyAqCisgKiBJbmRpY2F0aW9uIHdoZXJlIG5ldyBkYXRhIHdpbGwgYmUgcmVhZAorICogQWxsIGZvdXIgYml0cyBzaGFsbCBiZSB1c2VkIHdoZW4gdXNpbmcgdGhlc2UgcG9pbnRlciB2YWx1ZXMgKDBkIC0gMTVkKS4KKyAqIEhvd2V2ZXIsIHRoZSBSZWNlaXZlIFBhY2tldCBidWZmZXIgaGFzIGEgc2l6ZSBvZiA4IGVudHJpZXMuCisgKiBTbyByZWFkaW5nIHRoZSBSZWNlaXZlIFBhY2tldCBidWZmZXIgZW50cmllcyBzaGFsbCB1c2UgdGhlIG1vZDggb2YgdGhlIHBvaW50ZXIgdmFsdWVzLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9SRUFEX0JVRl9QVFIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfUkVBRF9CVUZfUFRSIDB4NzgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1JFQURfQlVGX1BUUiAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfUkVBRF9CVUZfUFRSIDQKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRGlzUnhGcm1QZW5kaW5nY2EKKyAqCisgKiBXaGFuIHRoZSBjb250cm9sIHJlZ2lzdGVyIERpc1J4RnJtUGVuZGluZ0NhIGlzIHNldCB0byAnMScsIHRoZSBub3RpZmljYXRpb24gb2YgdGhlIHJlY2VpdmVkIEZQIGJpdCB0byB0aGUgTE1BQyBDb250cm9sbGVyIGlzIGRpc2FibGVkIGFuZCB0aHVzIG5vIGNvbnNlcXVlbnQgYWN0aW9ucyB3aWxsIHRha2UgcGxhY2UuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYRlJNUEVORElOR0NBIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYRlJNUEVORElOR0NBIDB4ODAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYRlJNUEVORElOR0NBIDcKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEZSTVBFTkRJTkdDQSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0Rpc1J4QWNrUmVxdWVzdGNhCisgKgorICogV2hlbiB0aGUgY29udHJvbCByZWdpc3RlciBEaXNSeEFja1JlcXVlc3RjYSBpcyBzZXQgdG8gJzEnIGFsbCBjb25zZXF1ZW50IGFjdGlvbnMgZm9yIGEgcmVjZWl2ZWQgQWNrbm93bGVkZ2UgUmVxdWVzdCBiaXQgYXJlIGRpc2FibGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEFDS1JFUVVFU1RDQSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEFDS1JFUVVFU1RDQSAweDEwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRVFVRVNUQ0EgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVRVUVTVENBIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQWx3YXlzUGFzc0NyY2Vycm9yCisgKgorICogSWYgc2V0IHRvICcxJywgYSBGQ1MgZXJyb3Igd2lsbCBub3QgZHJvcCB0aGUgZnJhbWUuIEhvd2V2ZXIsIGFuIEZDUyBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGluIHRoZSBSeCBtZXRhIGRhdGEgKGNyYzE2X2Vycm9yIGlzIHNldCB0byAnMScpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQ1JDRVJST1IgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0NSQ0VSUk9SIDB4MjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQ1JDRVJST1IgOQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NDUkNFUlJPUiAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0Rpc0RhdGFSZXF1ZXN0Y2EKKyAqCisgKiBXaGVuIHRoZSBjb250cm9sIHJlZ2lzdGVyIERpc0RhdGFSZXF1ZXN0Q2EgaXMgc2V0LCB0aGUgbm90aWZpY2F0aW9uIG9mIHRoZSByZWNlaXZlZCBEYXRhIFJlcXVlc3QgaXMgZGlzYWJsZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU0RBVEFSRVFVRVNUQ0EgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRElTREFUQVJFUVVFU1RDQSAweDQwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRElTREFUQVJFUVVFU1RDQSAxMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU0RBVEFSRVFVRVNUQ0EgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzUmVzRnJhbWVWZXJzaW9uCisgKgorICogSWYgc2V0IHRvICcxJywgYSBwYWNrZXQgd2l0aCBhIHJlc2VydmVkIEZyYW1lVmVyc2lvbiBzaGFsbCBub3QgYmUgZHJvcHBlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTUkVTRlJBTUVWRVJTSU9OIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT04gMHg4MDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT04gMTEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTUkVTRlJBTUVWRVJTSU9OIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQWx3YXlzUGFzc1dyb25nRFBBTklkCisgKgorICogSWYgcmVnaXN0ZXIgbWFjQWx3YXlzUGFzc1dyb25nRFBBTklkIGlzIHNldCB0byAnMScsIHBhY2tldCB3aXRoIGEgd3JvbmcgRGVzdGlhbnRpb24gUGFuSUQgd2lsbCBub3QgYmUgZHJvcHBlZC4KKyAqIEhvd2V2ZXIsIGluIGNhc2Ugb2YgYW4gRkNTIGVycm9yLCB0aGUgcGFja2V0IGlzIGRyb3BwZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RQQU5JRCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV1JPTkdEUEFOSUQgMHgxMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV1JPTkdEUEFOSUQgMTIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV1JPTkdEUEFOSUQgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzV3JvbmdEQWRkcgorICoKKyAqIElmIHNldCB0byAnMScsIGEgcGFja2V0IHdpdGggYSB3cm9uZyBEQWRkciBpcyAgbm90IGRyb3BwZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HREFERFIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HREFERFIgMHgyMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV1JPTkdEQUREUiAxMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RBRERSIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQWx3YXlzUGFzc0JlYWNvbldyb25nUEFOSWQKKyAqCisgKiBJZiB0aGUgY29udHJvbCByZWdpc3RlciBtYWNBbHdheXNQYXNzQmVhY29uV3JvbmdQQU5JZCBpcyBzZXQsIHRoZSBmcmFtZSBpcyBub3QgZHJvcHBlZCBpbiBjYXNlIG9mIGEgbWlzbWF0Y2ggaW4gUEFOLUlELCBpcnJlc3BlY3RpdmUgb2YgdGhlIHNldHRpbmcgb2YgUnhCZWFjb25Pbmx5LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRCAweDQwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NCRUFDT05XUk9OR1BBTklEIDE0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0JFQUNPTldST05HUEFOSUQgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzVG9QYW5Db29yZGluYXRvcgorICoKKyAqIFdoZW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgbWFjQWx3YXlzUGFzc1RvUGFuQ29vcmRpbmF0b3IgaXMgc2V0IHRvICcxJywgdGhlIGZyYW1lIGlzIG5vdCBkcm9wcGVkIGR1ZSB0byBhIHNwYW5fY29vcmRfZXJyb3IuCisgKiBIb3dldmVyLCBpbiBjYXNlIG9mIGFuIEZDUyBlcnJvciwgdGhlIHBhY2tldCBpcyBkcm9wcGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTVE9QQU5DT09SRElOQVRPUiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTVE9QQU5DT09SRElOQVRPUiAweDgwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SIDE1CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1RPUEFOQ09PUkRJTkFUT1IgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0Fsd2F5c1Bhc3NGcm1UeXBlCisgKgorICogVGhlIGNvbnRyb2wgcmVnaXN0ZXJzIG1hY0Fsd2F5c1Bhc3NGcm1UeXBlWzc6MF0sIHNoYWxsIGNvbnRyb2wgaWYgdGhpcyBGcmFtZSBUeXBlIHNoYWxsIGJlIGRyb3BwZWQuCisgKiBJZiBhIGJpdCBpcyBzZXQgdG8gJzEnLCB0aGUgRnJhbWUgVHlwZSBjb3JyZXNwb25kaW5nIHdpdGggdGhlIGJpdCBwb3NpdGlvbiBpcyBub3QgZHJvcHBlZCwgZXZlbiBpbiBjYXNlIG9mIGEgQ1JDIGVycm9yLgorICogRXhhbXBsZToKKyAqICAgaWYgYml0IDMgaXMgc2V0IHRvICcxJywgRnJhbWUgVHlwZSAzIHNoYWxsIG5vdCBiZSBkcm9wcGVkLgorICogICBJZiB0aGVyZSBpcyBhIEZDUyBlcnJvciwgdGhlIGVycm9yIHNoYWxsIGJlIHJlcG9ydGVkIGluIHRoZSBSeCBtZXRhIGRhdGEgKGNyYzE2X2Vycm9yIGlzIHNldCB0byAnMScpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTRlJNVFlQRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTRlJNVFlQRSAweGZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0ZSTVRZUEUgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTRlJNVFlQRSA4CisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0Fsd2F5c1Bhc3NXYWtlVXAKKyAqCisgKiBJbiBDU0wgbW9kZSwgaWYgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgbWFjQWx3YXlzUGFzc1dha2VVcCBpcyBzZXQgdG8gJzEnLCByZWNlaXZlZCBXYWtlLSB1cCBmcmFtZXMgZm9yIHRoaXMgZGV2aWNlIGFyZSBwdXQgaW50byB0aGUgUnggcGFja2V0IGJ1ZmZlciB3aXRob3V0IG5vdGlmeWluZyB0aGUgTE1BQyBDb250cm9sbGVyIChwYXJ0IG9mIHRyYW5zcGFyZW50IG1vZGUgY29udHJvbCkuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXQUtFVVAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dBS0VVUCAweDEwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXQUtFVVAgMjQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV0FLRVVQIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUGFzc1dha2VVcAorICoKKyAqIEluIENTTCBtb2RlLCBpZiBzZXQgdG8gJzEnLCBXYWtlVXAgZnJhbWVzIHdpbGwgYmUgcHV0IGludG8gdGhlIFJ4IGJ1ZmZlci4KKyAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igc29mdHdhcmUgdG8gcGFyc2UgdGhlIFdha2VVcCBmcmFtZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFTU1dBS0VVUCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNQQVNTV0FLRVVQIDB4MjAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFTU1dBS0VVUCAyNQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1BBU1NXQUtFVVAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNJbXBsaWNpdEJyb2FkY2FzdAorICoKKyAqIElmIHNldCB0byAnMScsIEZyYW1lIFZlcnNpb24gMiBmcmFtZXMgd2l0aG91dCBEYWRkciBvciBEUEFOSWQgc2hhbGwgYmUgYWNjZXB0ZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0lNUExJQ0lUQlJPQURDQVNUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0lNUExJQ0lUQlJPQURDQVNUIDB4NDAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDSU1QTElDSVRCUk9BRENBU1QgMjYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNJTVBMSUNJVEJST0FEQ0FTVCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0Rpc1J4QWNrUmVjZWl2ZWRjYQorICoKKyAqIElmIHNldCB0byAnMScsIHRoZSBMTUFDIGNvbnRyb2xsZXIgc2hhbGwgaWdub3JlIGFsbCBjb25zZXF1ZW50IGFjdGlvbnMgdXBvbiBhIHNldCBBUiBiaXQgaW4gdGhlIHRyYW5zbWl0dGVkIGZyYW1lIChlLmcuIGVuYWJsaW5nIFJ4LW9uIG1vZGUgYWZ0ZXIgdGhlIHRyYW5zbWlzc2lvbiBhbmQgd2FpdCBmb3IgYW4gQUNLKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRUNFSVZFRENBIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVDRUlWRURDQSAweDgwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVDRUlWRURDQSAyNworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVDRUlWRURDQSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9ldmVudAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZgorICogQWNjZXNzIG1vZGU6IEUtUkNXMiAoZXZlbnQgcmVhZC9jbGVhciBvbiB3cml0ZSAxKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9FVkVOVCAweDQwMDkwMjA0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfRVZFTlQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9FVkVOVCAweGYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeFNvZl9lCisgKgorICogU2V0IHRvICcxJyB3aGVuIFJYX1NPRiBoYXMgYmVlbiBkZXRlY3RlZC4KKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbMV0uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYU09GX0UgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9FIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfRSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X292ZXJmbG93X2UKKyAqCisgKiBJZiBzZXQgdG8gJzEnIGl0IGluZGljYXRlcyB0aGF0IHRoZSBSeCBwYWNrZXQgYnVmZmVyIGhhcyBhbiBvdmVyZmxvdy4KKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbMV0uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX0UgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19FIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfT1ZFUkZMT1dfRSAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfT1ZFUkZMT1dfRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2J1Zl9hdmFpbF9lCisgKgorICogSWYgc2V0IHRvICcxJyBpdCBpbmRpY2F0ZXMgdGhhdCBhIG5ldyB2YWxpZCBwYWNrZXQgY29tcGxldGVseSBoYXMgYmVlbiByZWNlaXZlZAorICogVGhpcyBldmVudCBiaXQgY29udHJpYnV0ZXMgdG8gZnRkZl9jZVsxXS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX0UgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfRSAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRl9BVkFJTF9FIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Ynl0ZV9lCisgKgorICogSWYgc2V0IHRvICcxJyBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgZmlyc3QgYnl0ZSBvZiBhIG5ldyBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2ZWQKKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbMV0uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9FVkVOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCWVRFX0UgMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfRSAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCWVRFX0UgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfbWFzaworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZgorICogQWNjZXNzIG1vZGU6IEVNLVJXIChldmVudCBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9NQVNLIDB4NDAwOTAyMDgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9NQVNLIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfTUFTSyAweGYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeFNvZl9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJSeFNvZl9lIi4KKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9NIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfTSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfTSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X292ZXJmbG93X20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgIiByeF9vdmVyZmxvd19lIi4KKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19NIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfT1ZFUkZMT1dfTSAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfT1ZFUkZMT1dfTSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2J1Zl9hdmFpbF9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJyeF9idWZfYXZhaWxfZSIuCisgKiBUaGUgbWFzayBiaXQgaXMgbWFza2luZyB3aGVuIGNsZWFyZWQgdG8gJzAnIChkZWZhdWx0IHZhbHVlKSBhbmQgd2lsbCBlbmFibGUgdGhlIGNvbnRyaWJ1dGlvbiB0byB0aGUgaW50ZXJydXB0IHdoZW4gc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRl9BVkFJTF9NIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX00gMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRl9BVkFJTF9NIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhieXRlX20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgInJ4Ynl0ZV9lIi4KKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCWVRFX00gMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfTSAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCWVRFX00gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfc3RhdHVzCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVUyAweDQwMDkwMjBjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTIDB4MWYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9idWZmX2lzX2Z1bGwKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgUnggcGFja2V0IGJ1ZmZlciBpcyBmdWxsCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTEwgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTEwgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTCAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfd3JpdGVfYnVmX3B0cgorICoKKyAqIEluZGljYXRpb24gd2hlcmUgbmV3IGRhdGEgd2lsbCBiZSB3cml0dGVuLgorICogQWxsIGZvdXIgYml0cyBzaGFsbCBiZSB1c2VkIHdoZW4gdXNpbmcgdGhlc2UgcG9pbnRlciB2YWx1ZXMgKDBkIC0gMTVkKS4KKyAqIEhvd2V2ZXIsIHRoZSBSZWNlaXZlIFBhY2tldCBidWZmZXIgaGFzIGEgc2l6ZSBvZiA4IGVudHJpZXMuCisgKiBTbyByZWFkaW5nIHRoZSBSZWNlaXZlIFBhY2tldCBidWZmZXIgZW50cmllcyBzaGFsbCB1c2UgdGhlIG1vZDggb2YgdGhlIHBvaW50ZXIgdmFsdWVzLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9XUklURV9CVUZfUFRSIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1dSSVRFX0JVRl9QVFIgMHgxZQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfV1JJVEVfQlVGX1BUUiAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfV1JJVEVfQlVGX1BUUiA0CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lU25hcHNob3RWYWwKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMIDB4NDAwOTAyMTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZVNuYXBzaG90VmFsCisgKgorICogVGhlIFN0YXR1cyByZWdpc3RlciBTeW1ib2xUaW1lU25hcHNob3RWYWwgaW5kaWNhdGVzIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIFRpbWVTdGFtcCBnZW5lcmF0b3IuCisgKiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHNvZnR3YXJlIHRvIHVzZSBlLmcuIGluIENTTCBtb2RlIGF0IGNyZWF0aW5nIGFuIEVuaGFuY2VkIEFDSyB0byBjYWxjdWxhdGUgdGhlIENTTCBwaGFzZSBhbmQgcGVyaW9kLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9zdGF0dXNfZGVsdGEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEKKyAqIEFjY2VzcyBtb2RlOiBELVJDVyAoZGVsdGEgcmVhZC9jbGVhciBvbiB3cml0ZSAxKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfREVMVEEgMHg0MDA5MDIyMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVU19ERUxUQSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVU19ERUxUQSAweDEKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9idWZmX2lzX2Z1bGxfZAorICoKKyAqIERlbHRhIGJpdCBvZiBzdGF0dXMgInJ4X2J1ZmZfaXNfZnVsbCIuCisgKiBUaGlzIGRlbHRhIGJpdCBpcyBzZXQgdG8gJzEnIG9uIGVhY2ggY2hhbmdlIG9mIHRoaXMgc3RhdHVzLCBjb250cmlidXRlcyB0byBmdGRmX2NlWzFdLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTExfRCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTX0RFTFRBCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTExfRCAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9EIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTExfRCAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9zdGF0dXNfbWFzaworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MQorICogQWNjZXNzIG1vZGU6IERNLVJXIChkZWx0YSBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfTUFTSyAweDQwMDkwMjI0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTX01BU0sgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfTUFTSyAweDEKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9idWZmX2lzX2Z1bGxfbQorICoKKyAqIE1hc2sgYml0IGZvciBkZWx0YSBiaXQgInJ4X2J1ZmZfaXNfZnVsbF9kIi4KKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTExfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9NIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMX00gMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9NIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2NvbnRyb2xfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDQzNTAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4N2ZmMQorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DT05UUk9MXzAgMHg0MDA5MDI0MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMCAweDdmZjEKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9EYmdUeFRyYW5zcGFyZW50TW9kZQorICoKKyAqIElmIHNldCB0byAnMScsIHRoZSBNUERVIG9jdGV0cyBwYXNzIHRyYW5zcGFyZW50bHkgdGhyb3VnaCB0aGUgTUFDIGluIHRoZSB0cmFuc21pdCBkaXJlY3Rpb24gKGZvciBkZWJ1ZyBwdXJwb3NlKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfREJHVFhUUkFOU1BBUkVOVE1PREUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfREJHVFhUUkFOU1BBUkVOVE1PREUgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdUWFRSQU5TUEFSRU5UTU9ERSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfREJHVFhUUkFOU1BBUkVOVE1PREUgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY01heEJFCisgKgorICogQ1NNQS1DQTogTWF4aW11bSBCYWNrb2ZmIEV4cG9uZW50IChyYW5nZSAzLTgpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWEJFIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWEJFIDB4ZjAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWEJFIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhCRSA0CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjTWluQkUKKyAqCisgKiBDU01BLUNBOiBNaW5pbXVtIEJhY2tvZmYgRXhwb25lbnQgKHJhbmdlIDAtbWFjTWF4QkUpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01JTkJFIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01JTkJFIDB4ZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNSU5CRSA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUlOQkUgNAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY01heENTTUFCYWNrb2ZmcworICoKKyAqIENTTUEtQ0E6IE1heGltdW0gbnVtYmVyIG9mIENTTUEtQ0EgYmFja29mZnMgKHJhbmdlIDAtNSkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQ1NNQUJBQ0tPRkZTIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWENTTUFCQUNLT0ZGUyAweDcwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWENTTUFCQUNLT0ZGUyAxMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWENTTUFCQUNLT0ZGUyAzCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9mdGRmX2NlCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogRUMtUiAoY29tcG9zaXRlIGV2ZW50KQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFIDB4NDAwOTAyNTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DRSAweDNmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9mdGRmX2NlCisgKgorICogQ29tcG9zaXRlIHNlcnZpY2UgcmVxdWVzdCBmcm9tIGZ0ZGYgbWFjcm8gKHNlZSBGUjA0MDAgaW4gdjQwLjEwMC4yLjQxLnBkZiksIHNldCB0byAnMScgaWYgdGhlIGJyYW5jaCBjdXJyZW50bHkgY29udHJpYnV0ZXMgdG8gdGhlIGludGVycnVwdC4KKyAqIEJpdCAwID0gdW51c2VkCisgKiBCaXQgMSA9IHJ4IGludGVycnVwdHMKKyAqIEJpdCAyID0gdW51c2VkCisgKiBCaXQgMyA9IG1pc2NlbGFuZW91cyBpbnRlcnJ1cHRzCisgKiBCaXQgNCA9IHR4IGludGVycnVwdHMKKyAqIEJpdCA1ID0gUmVzZXJ2ZWQKKyAqIFVwb24gYW4gaW50ZXJydXB0LCB1c2luZyB0aGUgZnRkZl9jZSBiaXRzIGl0IGNhbiBiZSBjaGVja2VkIHdoaWNoIGludGVycnVwdCBicmFuY2ggY3JlYXRlcyB0aGlzIGludGVycnVwdC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DRQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DRSAweDNmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFIDYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2Z0ZGZfY20KKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDNmCisgKiBBY2Nlc3MgbW9kZTogRUNNLVJXIChjb21wb3NpdGUgZXZlbnQgbWFzaykKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTSAweDQwMDkwMjU0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ00gMHgzZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfZnRkZl9jbQorICoKKyAqIG1hc2sgYml0cyBmb3IgZnRmX2NlLgorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ00KKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ00gMHgzZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTSA2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW5jVGltZVN0YW1wVGhyCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIgMHg0MDA5MDMwNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVEhSIDB4MWZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcFRocgorICoKKyAqIFRocmVzaG9sZCBmb3Igc3luY2hyb25pemUgdGhlIHRpbWVzdGFtcCBjb3VudGVyOiBhdCB0aGlzIHZhbHVlIG9mIHRoZSBldmVudCBjb3VudGVyIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIHRpbWVzdGFtcCAoc3ltYm9sKSBjb3VudGVyIGlzIGRvbmUgKGlmIFN5bmNUaW1lU3RhbXBFbmEgaXMgc2V0IHRvICcxJykuCisgKiBJZiBTeW5jVGltZVN0YW1wX2UgaXMgc2V0IHRvICcxJyB0aGUgc3luY2hyb25pemF0aW9uIGhhcyB0YWtlbiBwbGFjZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiAweDFmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIgMjUKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBWYWwKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwgMHg0MDA5MDMwOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVkFMIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBWYWwKKyAqCisgKiBWYWx1ZSB0byBzeW5jaHJvbml6ZSB0aGUgdGltZXN0YW1wIGNvdW50ZXIgd2l0aCBhdCB0aGUgbW9tZW50IGluZGljYXRlZCBieSBTeW5jVGltZVN0YW1wVGhyLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVkFMIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVkFMIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBQaGFzZVZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMIDB4NDAwOTAzMjAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgMHhmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcFBoYXNlVmFsCisgKgorICogVmFsdWUgdG8gc3luY2hyb25pemUgdGhlIHRpbWVzdGFtcCBjb3VudGVyIHBoYXNlIHdpdGggYXQgdGhlIG1vbWVudCBpbmRpY2F0ZWQgYnkgU3luY1RpbWVTdGFtcFRoci4KKyAqIFBsZWFzZSBub3RlIHRoZSArMSBjb3JyZWN0aW9uIG5lZWRlZCBmb3IgbW9zdCBhY2N1cmF0ZSByZXN1bHQgKCswLjUgaXMgdGhhbiB0aGUgYXZlcmFnZSBlcnJvciwgcmVzdWx0aW5nIGlzIGEganVzdCB0b28gZmFzdCBjbG9jaykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBQSEFTRVZBTCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdGltZXJfY29udHJvbF8xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgyCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVSX0NPTlRST0xfMSAweDQwMDkwMzBjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVJfQ09OVFJPTF8xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVJfQ09OVFJPTF8xIDB4MgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBFbmEKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSB0aW1lc3RhbXAgY291bnRlciBhZnRlciBhIGRlZXAtc2xlZXAgY3ljbGUgd2lsbCBiZSBwZXJmb3JtZWQgd2hlbiBTeW5jVGltZVN0YW1wVGhyIG1hdGNoZXMgdGhlIHZhbHVlIG9mIHRoZSBldmVudCAod2FrZS11cCkgY291bnRlci4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUEVOQSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVJfQ09OVFJPTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QRU5BIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUEVOQSAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUEVOQSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUeFN0ZEFja0ZybUNudAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCAweDQwMDkwMzEwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFhTVERBQ0tGUk1DTlQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUeFN0ZEFja0ZybUNudAorICoKKyAqIFRyYWZmaWMgY291bnRlcjogdGhlIG51bWJlciBvZiBzdGFuZGFyZCBBY2tub3dsZWRnbWVudCBmcmFtZXMgdHJhbnNtaXR0ZWQgYWZ0ZXIgdGhlIGxhc3QgZGVlcC1zbGVlcCBjeWNsZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFhTVERBQ0tGUk1DTlQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RYU1REQUNLRlJNQ05UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFhTVERBQ0tGUk1DTlQgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1J4U3RkQWNrRnJtT2tDbnQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVCAweDQwMDkwMzE0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYU1REQUNLRlJNT0tDTlQgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUnhTdGRBY2tGcm1Pa0NudAorICoKKyAqIFRyYWZmaWMgY291bnRlcjogdGhlIG51bWJlciBvZiBTdGFuZGFyZCBBY2tub3dsZWRnbWVudCBmcmFtZXMgcmVjZWl2ZWQgYWZ0ZXIgdGhlIGxhc3QgZGVlcC1zbGVlcCBjeWNsZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVCAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNSeEFkZHJGYWlsRnJtQ250CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQgMHg0MDA5MDMxOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWEFERFJGQUlMRlJNQ05UIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1J4QWRkckZhaWxGcm1DbnQKKyAqCisgKiBUcmFmZmljIGNvdW50ZXI6IHRoZSBudW1iZXIgb2YgZnJhbWVzIGRpc2NhcmRlZCBkdWUgdG8gaW5jb3JyZWN0IGFkZHJlc3Mgb3IgUEFOIElkIGFmdGVyIHRoZSBsYXN0IGRlZXAtc2xlZXAgY3ljbGUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUnhVbnN1cEZybUNudAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFVOU1VQRlJNQ05UIDB4NDAwOTAzMWMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFVOU1VQRlJNQ05UIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhVTlNVUEZSTUNOVCAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNSeFVuc3VwRnJtQ250CisgKgorICogVHJhZmZpYyBjb3VudGVyOiB0aGUgbnVtYmVyIG9mIGZyYW1lcyB3aGljaCBkbyBwYXNzIHRoZSBjaGVja3MgYnV0IGFyZSBub3Qgc3VwcG9ydGVkIGFmdGVyIHRoZSBsYXN0IGRlZXAtc2xlZXAgY3ljbGUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVU5TVVBGUk1DTlQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVU5TVVBGUk1DTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVU5TVVBGUk1DTlQgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhVTlNVUEZSTUNOVCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhVTlNVUEZSTUNOVCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjRkNTRXJyb3JDb3VudAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UIDB4NDAwOTAzNDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVCAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNGQ1NFcnJvckNvdW50CisgKgorICogbWV0cmljcyBjb3VudGVyOiB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IHdlcmUgZGlzY2FyZGVkIGR1ZSB0byBhbiBpbmNvcnJlY3QgRkNTIGFmdGVyIHRoZSBsYXN0IGRlZXAtc2xlZXAgY3ljbGUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0ZDU0VSUk9SQ09VTlQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0ZDU0VSUk9SQ09VTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0ZDU0VSUk9SQ09VTlQgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1Jlc2V0CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxMDZkZgorICogQWNjZXNzIG1vZGU6IE9TLVcgKG9uZS1zaG90IC0gd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVCAweDQwMDkwMzYwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUIDB4MTA2ZGYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfY29udHJvbAorICoKKyAqIExtYWNSZXNldF9jb250cm9sOiBBICcxJyByZXNldHMgTE1BQyBDb250cm9sbGVyIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9DT05UUk9MIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9DT05UUk9MIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPTlRST0wgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9DT05UUk9MIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1Jlc2V0X3J4CisgKgorICogTG1hY1Jlc2V0X3J4OiBBICcxJyByZXNldHMgTE1BQyByeCBwaXBlbGluZSAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfUlggSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1JYIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1JYIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfUlggMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfdHgKKyAqCisgKiBMbWFjUmVzZXRfdHg6IEEgJzEnIHJlc2V0cyBMTUFDIHR4IHBpcGVsaW5lIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9UWCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVFggMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVFggMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9UWCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF9haGIKKyAqCisgKiBMbWFjUmVzZXRfYWhiOiBBICcxJyByZXNldHMgTE1BQyBhaGIgaW50ZXJmYWNlIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9BSEIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0FIQiAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9BSEIgMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9BSEIgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfb3JlZworICoKKyAqIExtYWNSZXNldF9vcmVnOiBBICcxJyByZXNldHMgTE1BQyBvbl9vZmYgcmVnbWFwIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKgorICogIyRMbWFjUmVzZXRfYXJlZ0Bvbl9vZmZfcmVnbWFwCisgKiAjTG1hY1Jlc2V0X2FyZWc6IEEgJzEnIFJlc2V0cyBMTUFDIGFsd2F5c19vbiByZWdtYXAgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX09SRUcgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX09SRUcgMHgxMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX09SRUcgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9PUkVHIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1Jlc2V0X3RzdGltCisgKgorICogTG1hY1Jlc2V0X3RzdGltOiBBICcxJyByZXNldHMgTE1BQyB0aW1lc3RhbXAgdGltZXIgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RTVElNIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9UU1RJTSAweDQwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVFNUSU0gNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9UU1RJTSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF9zZWMKKyAqCisgKiBMbWFjUmVzZXRfc2VjOiBBICcxJyByZXNldHMgTE1BQyBzZWN1cml0eSAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICoKKyAqICMkTG1hY1Jlc2V0X3d1dGltQG9uX29mZl9yZWdtYXAKKyAqICNMbWFjUmVzZXRfd3V0aW06IEEgJzEnIFJlc2V0cyBMTUFDIHdha2UtdXAgdGltZXIgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1NFQyBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfU0VDIDB4ODAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9TRUMgNworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9TRUMgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfY291bnQKKyAqCisgKiBMbWFjUmVzZXRfY291bnQ6IEEgJzEnIHJlc2V0cyBMTUFDIG1hYyBjb3VudGVycyAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQ09VTlQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPVU5UIDB4MjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQ09VTlQgOQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9DT1VOVCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF90aW1jdHJsCisgKgorICogTG1hY1Jlc2V0X2NvdW50OiBBICcxJyByZXNldHMgTE1BQyB0aW1pbmcgY29udHJvbCBibG9jayAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVElNQ1RSTCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVElNQ1RSTCAweDQwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RJTUNUUkwgMTAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVElNQ1RSTCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNHbG9iUmVzZXRfY291bnQKKyAqCisgKiBJZiBzZXQsIHRoZSBMTUFDIHBlcmZvcm1hbmNlIGFuZCB0cmFmZmljIGNvdW50ZXJzIHdpbGwgYmUgcmVzZXQuCisgKiBVc2UgdGhpcyByZWdpc3RlciBmb3IgZnVuY3Rpb25hbGx5IHJlc2V0IHRoZXNlIGNvdW50ZXJzLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDR0xPQlJFU0VUX0NPVU5UIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNHTE9CUkVTRVRfQ09VTlQgMHgxMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ0dMT0JSRVNFVF9DT1VOVCAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNHTE9CUkVTRVRfQ09VTlQgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfd2FrZXVwX2NvbnRyb2xfb3MKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDMKKyAqIEFjY2VzcyBtb2RlOiBPUy1XIChvbmUtc2hvdCAtIHdyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBfQ09OVFJPTF9PUyAweDQwMDkwMzY0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQX0NPTlRST0xfT1MgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBfQ09OVFJPTF9PUyAweDMKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9XYWtldXBUaW1lckVuYWJsZV9zZXQKKyAqCisgKiBJZiBzZXQsIFdha2V1cFRpbWVyRW5hYmxlU3RhdHVzIHdpbGwgYmUgc2V0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRV9TRVQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUF9DT05UUk9MX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRV9TRVQgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRV9TRVQgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFX1NFVCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1dha2V1cFRpbWVyRW5hYmxlX2NsZWFyCisgKgorICogSWYgc2V0LCBXYWtldXBUaW1lckVuYWJsZVN0YXR1cyB3aWxsIGJlIGNsZWFyZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFX0NMRUFSIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBfQ09OVFJPTF9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVfQ0xFQVIgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRV9DTEVBUiAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVfQ0xFQVIgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZVRocgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiAweDQwMDkwMzgwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZVRocgorICoKKyAqIFN5bWJvbHRpbWUgVGhyZXNob2xkIHRvIGdlbmVyYXRlIGEgZ2VuZXJhbCBpbnRlcnJ1cHQgd2hlbiB0aGlzIHZhbHVlIG1hdGNoZXMgdGhlIHN5bWJvbCBjb3VudGVyIHZhbHVlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWUyVGhyCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiAweDQwMDkwMzg0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lMlRocgorICoKKyAqIFN5bWJvbHRpbWUgMiBUaHJlc2hvbGQgdG8gZ2VuZXJhdGUgYSBnZW5lcmFsIGludGVycnVwdCB3aGVuIHRoaXMgdmFsdWUgbWF0Y2hlcyB0aGUgc3ltYm9sIGNvdW50ZXIgdmFsdWUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFIgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFIgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9EZWJ1Z0NvbnRyb2wKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDFmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9ERUJVR0NPTlRST0wgMHg0MDA5MDM5MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0RFQlVHQ09OVFJPTCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0RFQlVHQ09OVFJPTCAweDFmZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2RiZ19yeF9pbnB1dAorICoKKyAqIElmIHNldCB0byAnMScsIHRoZSBSeCBkZWJ1ZyBpbnRlcmZhY2Ugd2lsbCBiZSBzZWxlY3RlZCBhcyBpbnB1dCBmb3IgdGhlIFJ4IHBpcGVsaW5lIHJhdGhlciB0aGFuIHRoZSBEUEhZIGludGVyZmFjZSBzaWduYWxzLgorICogTm90ZSB0aGF0IGluIHRoaXMgbW9kZSwgREJHX1JYX0RBVEFbMzowXSBhbmQgREJHX1JYX1NPRiBhcmUgc291cmNlZCBieSBhbm90aGVyIHNvdXJjZSAob3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIExNQUMpIHdoaWxlIHRoZSBvdGhlciBSeCBpbnB1dHMgKENDQV9TVEFULCBMUUlbNzowXSBhbmQgRURfU1RBVFs3OjBdKSBhcmUgZm9yY2VkIHRvIDB4MDAuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR19SWF9JTlBVVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfREVCVUdDT05UUk9MCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdfUlhfSU5QVVQgMHgxMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR19SWF9JTlBVVCA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX1JYX0lOUFVUIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9kYmdfY29udHJvbAorICoKKyAqIENvbnRyb2wgb2YgdGhlIGRlYnVnIGludGVyZmFjZToKKyAqCisgKiBkYmdfY29udHJvbCAweDAwIE5vdCB1c2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA3IC0gMCA9IGFsbCAnMCcKKyAqCisgKiBkYmdfY29udHJvbCAweDAxIExlZ2FjeSBkZWJ1ZyBtb2RlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA3ID0gZWRfcmVxdWVzdAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiA9IGdlbl9pcnEKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzID0gcGh5X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyID0gdHhfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgPSByeF9zb2YKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgPSByeF9lb2YKKyAqCisgKiBkYmdfY29udHJvbCAweDAyIENsb2NrcyBhbmQgcmVzZXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDctMyA9ICIwMDAwMCIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IGxwX2NsayBkaXZpZGUgYnkgMgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gbWFjX2NsayBkaXZpZGUgYnkgMgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gaGNsayBkaXZpZGVkIGJ5IDIKKyAqCisgKiBkYmdfY29udHJvbCBpbiByYW5nZSAweDAyIC0gMHgwZiBOb3QgdXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNyAtIDAgPSBhbGwgJzAnCisgKgorICogZGJnX2NvbnRyb2wgaW4gcmFuZ2UgMHgxMCAtIDB4MWYgRGVidWcgcnggcGlwZWxpbmUKKyAqCisgKiAgICAgIDB4MTAgICAgUnggcGh5IHNpZ25hbHMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHJ4X2VuYWJsZSB0b3dhcmRzIHRoZSByeF9waXBlbGluZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gcnhfc29mIGZyb20gcGh5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1LTIgPSByeF9kYXRhIGZyb20gcGh5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSByeF9lb2YgdG8gcGh5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSByeF9zb2YgZXZlbnQgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKgorICogICAgICAweDExICAgIFJ4IHNvZiBhbmQgbGVuZ3RoCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSByeF9zb2YKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYtMCA9IHJ4X21hY19sZW5ndGggZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKgorICogICAgICAweDEyICAgIFJ4IG1hYyB0aW1pbmcgb3V0cHV0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBFbmFibGUgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBTb3AgICAgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSBFb3AgICAgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ICAgPSBDcmMgICAgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzICAgPSBFcnIgICAgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSBEcm9wICAgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSBGb3J3YXJkIGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfc29mCisgKgorICogICAgICAweDEzICAgIFJ4IG1hYyBmcmFtZSBwYXJzZXIgb3V0cHV0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBFbmFibGUgZnJvbSBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBTb3AgICAgZnJvbSAgbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gRW9wICAgIGZyb20gIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgICA9IENyYyAgICBmcm9tICBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzICAgPSBFcnIgICAgZnJvbSAgbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gRHJvcCAgIGZyb20gIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IEZvcndhcmQgZnJvbSBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSByeF9zb2YKKyAqCisgKiAgICAgIDB4MTQgICAgUnggc3RhdHVzIHRvIFVtYWMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5jcmMxNl9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gcnhfZnJhbWVfc3RhdF91bWFjLnJlc19mcm1fdHlwZV9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gcnhfZnJhbWVfc3RhdF91bWFjLnJlc19mcm1fdmVyc2lvbl9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gcnhfZnJhbWVfc3RhdF91bWFjLmRwYW5pZF9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyAgID0gcnhfZnJhbWVfc3RhdF91bWFjLmRhZGRyX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSByeF9mcmFtZV9zdGF0X3VtYWMuc3BhbmlkX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSByeF9mcmFtZV9zdGF0X3VtYWMuaXNwYW5fY29vcmRfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X3NvZgorICoKKyAqICAgICAgMHgxNSAgICBSeCBzdGF0dXMgdG8gbG1hYworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfZnJhbWVfc3RhdC5wYWNrZXRfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHJ4X2ZyYW1lX3N0YXQucnhfc29mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHJ4X2ZyYW1lX3N0YXQucnhfZW9mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgICA9IHJ4X2ZyYW1lX3N0YXQud2FrZXVwX2ZyYW1lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzLTEgPSByeF9mcmFtZV9zdGF0LmZyYW1lX3R5cGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X2ZyYW1lX3N0YXQucnhfc3Fucl92YWxpZAorICoKKyAqICAgICAgMHgxNiAgICBSeCBidWZmZXIgY29udHJvbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNy00ID0gcHJvdl9mcm9tX3N3aW8ucnhfcmVhZF9idWZfcHRyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzLTAgPSBzdGF0X3RvX3N3aW8ucnhfd3JpdGVfYnVmX3B0cgorICoKKyAqICAgICAgMHgxNyAgICBSeCBpbnRlcnJ1cHRzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBzdGF0X3RvX3N3aW8ucnhfYnVmX2F2YWlsX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHN0YXRfdG9fc3dpby5yeF9idWZfZnVsbAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gc3RhdF90b19zd2lvLnJ4X2J1Zl9vdmVyZmxvd19lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ICAgPSBzdGF0X3RvX3N3aW8ucnhfc29mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IHN0YXRfdG9fc3dpby5yeGJ5dGVfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gcnhfZnJhbWVfY3RybC5yeF9lbmFibGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IHJ4X2VvZgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfc29mCisgKgorICogICAgICAweDE4ICAgIGRpYWdub3NlX2J1cyBiaXQgNy0zID0KKyAqICAgICAgICAgICAgICAgICAgICAgIFBydCBzdGF0ZW1lbnRzIG1hYyBmcmFtZSBwYXJzZXIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIDAgUmVzZXQKKyAqICAgICAgICAgICAgICAgICAgICAgIDEgTXVsdGlwdXJwb3NlIGZyYW1lIHdpdGggbm8gZHBhbmlkIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdCBpcyBmYWxzZSBhbmQgbm90IHBhbiBjb29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMiBNdWx0aXB1cnBvc2UgZnJhbWUgd2l0aCBubyBkZXN0IGFkZHJlc3MgYW5kIG1hY0ltcGxpY2l0QnJvYWRjYXN0IGlzIGZhbHNlIGFuZCBub3QgcGFuIGNvb29yZGluYXRvciBkcm9wcGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAzIFJYIHVuc3VwcG9ydGVkIGZyYW1lIHR5cGUgZGV0ZWN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDQgUlggbm9uIEJlYWNvbiBmcmFtZSBkZXRlY3RlZCBhbmQgZHJvcHBlZCBpbiBSeEJlYWNvbk9ubHkgbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgNSBSWCBmcmFtZSBwYXNzZWQgZHVlIHRvIG1hY0Fsd2F5c1Bhc3NGcm1UeXBlIHNldAorICogICAgICAgICAgICAgICAgICAgICAgNiBSWCB1bnN1cHBvcnRlZCBkYV9tb2RlID0gMDEgZm9yIGZyYW1lX3ZlcnNpb24gMHgwLSBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgICAgICAgNyBSWCB1bnN1cHBvcnRlZCBzYV9tb2RlID0gMDEgZm9yIGZyYW1lX3ZlcnNpb24gMHgwLSBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgICAgICAgOCBEYXRhIG9yIGNvbW1hbmQgZnJhbWUgd2l0aCBubyBkcGFuaWQgYW5kIG1hY0ltcGxpY2l0QnJvYWRjYXN0IGlzIGZhbHNlIGFuZCBub3QgcGFuIGNvb29yZGluYXRvciBkcm9wcGVkCisgKiAgICAgICAgICAgICAgICAgICAgICA5IERhdGEgb3IgY29tbWFuZCBmcmFtZSB3aXRoIG5vIGRlc3QgYWRkcmVzcyBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QgaXMgZmFsc2UgYW5kIG5vdCBwYW4gY29vb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDEwIFJYIHVuc3VwcG9ydGVkIGZyYW1lX3ZlcnNpb24gZGV0ZWN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDExIE11bHRpcHVycG9zZSBmcmFtZSB3aXRoIG5vIGRwYW5pZCBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QgaXMgZmFsc2UgYW5kIG5vdCBwYW4gY29vb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDEyIE11bHRpcHVycG9zZSBmcmFtZSB3aXRoIG5vIGRlc3QgYWRkcmVzcyBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QgaXMgZmFsc2UgYW5kIG5vdCBwYW4gY29vb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDEzIFJYIHVuc3VwcG9ydGVkIGZyYW1lX3ZlcnNpb24gZGV0ZWN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE0IFJYIERlc3RpbmF0aW9uIFBBTiBJZCBjaGVjayBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE1IFJYIERlc3RpbmF0aW9uIGFkZHJlc3MgKDEgYnl0ZSkgIGNoZWNrIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTYgUlggRGVzdGluYXRpb24gYWRkcmVzcyAoMiBieXRlKSAgY2hlY2sgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxNyBSWCBEZXN0aW5hdGlvbiBhZGRyZXNzICg4IGJ5dGUpICBjaGVjayBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE4IFJYIFNvdXJjZSBQQU4gSWQgY2hlY2sgZm9yIEJlYWNvbiBmcmFtZXMgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxOSBSWCBTb3VyY2UgUEFOIElkIGNoZWNrIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMjAgQXV4aWxpYXJ5IFNlY3VyaXR5IEhlYWRlciBzZWN1cml0eSBjb250cm9sIHdvcmQgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDIxIEF1eGlsaWFyeSBTZWN1cml0eSBIZWFkZXIgdW5zdXBwb3J0ZWRfbGVnYWN5IHJlY2VpdmVkIGZyYW1lX3ZlcnNpb24gMDAKKyAqICAgICAgICAgICAgICAgICAgICAgIDIyIEF1eGlsaWFyeSBTZWN1cml0eSBIZWFkZXIgdW5zdXBwb3J0ZWRfbGVnYWN5IHNlY3VyaXR5IGZyYW1lX3ZlcnNpb24gMTEKKyAqICAgICAgICAgICAgICAgICAgICAgIDIzIEF1eGlsaWFyeSBTZWN1cml0eSBIZWFkZXIgZnJhbWUgY291bnRlciBmaWVsZCByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgMjQgQXV4aWxpYXJ5IFNlY3VyaXR5IEhlYWRlciBLZXkgaWRlbnRpZmllciBmaWVsZCByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgMjUgRXJyb3JlZCBEZXN0aW5hdGlvbiAgV2FrZXVwIGZyYW1lIGZvdW5kIHNlbmQgdG8gVW1hYywgbm90IGluZGljYXRlZCB0b3dhcmRzIGxtYWMgY29udHJvbGxlcgorICogICAgICAgICAgICAgICAgICAgICAgMjYgTWFjQWx3YXlzUGFzc1dha2VVcEZyYW1lcyA9IDEsIFdha2V1cCBmcmFtZSBmb3VuZCBzZW5kIHRvIFVtYWMsIG5vdCBpbmRpY2F0ZWQgdG93YXJkcyBsbWFjIGNvbnRyb2xsZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDI3IFdha2V1cCBmcmFtZSBmb3VuZCBzZW5kIHRvIGxtYWMgY29udHJvbGxlciBhbmQgVW1hYworICogICAgICAgICAgICAgICAgICAgICAgMjggV2FrZXVwIGZyYW1lIGZvdW5kIHNlbmQgdG8gbG1hYyBjb250cm9sbGVyLCBkcm9wcGVkIHRvd2FyZHMgVW1hYworICogICAgICAgICAgICAgICAgICAgICAgMjkgQ29tbWFuZCBmcmFtZSB3aXRoIGRhdGFfcmVxdWVzdCBjb21tYW5kIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAzMCBDb29yZGluYXRvciByZWFsaWdubWVudCBmcmFtZSByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgMzEgTm90IFVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDItMCA9IGZyYW1lX3R5cGUKKyAqCisgKiAgICAgIDB4MTkgICAgZGlhZ25vc2VfYnVzIGJpdCA3LTQgPQorICogICAgICAgICAgICAgICAgICAgICAgRnJhbWVzdGF0ZXMgbWFjIGZyYW1lIHBhcnNlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgMCBpZGxlX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAxIGZyX2N0cmxfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDIgZnJfY3RybF9sb25nX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAzIHNlcV9ucl9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgNCBkZXN0X3Bhbl9pZF9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgNSBkZXN0X2FkZHJfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDYgc3JjX3Bhbl9pZF9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgNyBzcmNfYWRkcl9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgOCBhdXhfc2VjX2hkcl9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgOSBoZHJfaWVfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDEwIHB5bGRfaWVfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDExIGlnbm9yZV9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMTItMTYgIE5vdCB1c2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzICAgPSByeF9tYWNfc29mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDItMCA9IGZyYW1lX3R5cGUKKyAqCisgKiAgICAgIDB4MWEgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBleGVjdXRlX3NhX21hdGNoCisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBzYV9tYXRjaF9mb3VuZCAoMSBjbGsgZGVsYXllZCkKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHByb3ZfZnJvbV9zd2lvLkZQX292ZXJyaWRlCisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBmcF9tYWNfZHJkeQorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gZnBfbWFjX2xkX3N0cmIKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDItMSA9IHJ4X2ZyYW1lX3N0YXRfbG1hYy5yeF9zYV9tb2RlCisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSByeF9tYWNfc29mX2UKKyAqCisgKiAgICAgIDB4MWIgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBleGVjdXRlX3NhX21hdGNoCisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2LTIgPSBmcF9tYWNfYWRkcl9jbnQKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IGZwX2JpdF9kZWNpZGVkCisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBwcm92X2Zyb21fc3dpby5BZGRyX3RhYl9tYXRjaF9GUF92YWx1ZQorICoKKyAqICAgICAgMHgxYyAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGV4ZWN1dGVfc2FfbWF0Y2gKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHNhX21hdGNoX2ZvdW5kICgxIGNsayBkZWxheWVkKQorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gZnBfbWFjX3JkYXRhKDY4KTogU2hvcnRfTG9uZ05vdAorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNC0xID0gZnBfbWFjX3JkYXRhKDY3IERPV05UTyA2NCk6IFNBIHZhbGlkIGJpdHMKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGZwX21hY19yZGF0YSgwKTogbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGZyb20gRlBQUgorICoKKyAqICAgICAgMHgxZCAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGV4ZWN1dGVfc2FfbWF0Y2gKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHNhX21hdGNoX2ZvdW5kICgxIGNsayBkZWxheWVkKQorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNS0wID0gZnBfbWFjX3JkYXRhKDUgRE9XTlRPIDApOiA2IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBGUFBSCisgKgorICogICAgICAgICAweDFlLTB4MWYgICAgTm90IFVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDctMCA9IGFsbCAnMCcKKyAqCisgKiBkYmdfY29udHJvbCBpbiByYW5nZSAweDIwIC0gMHgyZiBEZWJ1ZyB0eCBwaXBlbGluZQorICogICAgICAweDIwICAgIFRvcCBhbmQgYm90dG9tIGludGVyZmFjZXMgdHggZGF0YXBhdGgKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X21hY19sZF9zdHJiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSB0eF9tYWNfZHJkeQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gdHhfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQtMSA9IHR4X2RhdGEKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHN5bWJvbF9lbmEKKyAqCisgKiAgICAgIDB4MjEgICAgQ29udHJvbCBzaWduYWxzIGZvciB0eCBkYXRhcGF0aAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gVHhUcmFuc3BhcmVudE1vZGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IGN0cmxfbG1hY190b190eC5DUkMxNl9lbmEKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl9hY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IGN0cmxfbG1hY190b190eC5nZW5fd3UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDItMSA9IGN0cmxfbG1hY190b190eC50eF9mcmFtZV9ubWJyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSB0eF92YWxpZAorICoKKyAqICAgICAgMHgyMiAgICBDb250cm9sIHNpZ25hbHMgZm9yIHdha2V1cCBmcmFtZXMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl93dQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNS0xID0gY3RybF9sbWFjX3RvX3R4Lmdlbl93dV9SWig0IERPV05UTyAwKQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gY3RybF90eF90b19sbWFjLnR4X3J6X3plcm8KKyAqCisgKiAgICAgIDB4MjMgICAgRGF0YSBzaWduYWxzIGZvciB3YWtldXAgZnJhbWUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl93dQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gdHhfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQtMSA9IHR4X2RhdGEKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IGN0cmxfdHhfdG9fbG1hYy50eF9yel96ZXJvCisgKgorICogICAgICAweDI0ICAgIERhdGEgYW5kIGNvbnRyb2wgYWNrIGZyYW1lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBjdHJsX2xtYWNfdG9fdHgudHhfc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IGN0cmxfbG1hY190b190eC5nZW5fYWNrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gdHhfZGF0YQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gc3ltYm9sX2VuYQorICoKKyAqICAgICAgMHgyNSAgICBGUCBiaXQgZGVjaXNpb24KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGZwX2JpdF9kZWNpZGVkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBleGVjdXRlX3NhX21hdGNoCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSBjdHJsX2xtYWNfdG9fdHgucnhfZnBfZGVjaWRlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0zID0gY3RybF9sbWFjX3RvX3R4LnJ4X3NhX21vZGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IHN3aW9fdG9fbG1hY190eC5GUF9vdmVycmlkZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gc3dpb190b19sbWFjX3R4LkZQX2ZvcmNlX3ZhbHVlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSB0eF92YWxpZAorICoKKyAqICAgICAgMHgyYSAgICBFdmVudCBjb3VudGVyLCA4IGxlYXN0IHNpZ25pZmljYW50IGJpdHMsIHN5bmNocm9uaXplZCB0byBtYWNfY2xrCisgKgorICogICAgICAgICAweDJiICAgIHN5bWJvbCBjb3VudGVyLCA4IGZvcmUgbW9zdCBsZWFzdCBzaWduaWZpY2FudCBiaXRzICgxNSBkb3dudG8gOCkKKyAqCisgKiAgICAgICAgIDB4MmMgICAgc3ltYm9sIGNvdW50ZXIsIDggbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyAoNyBkb3dudG8gMCkKKyAqCisgKgorICogZGJnX2NvbnRyb2wgaW4gcmFuZ2UgMHgyZSAtIDB4M2YgRGVidWcgbG1hY19jb250cm9sbGVyCisgKiAgICAgIDB4MmQgICAgTm90IFVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDctMCA9IGFsbCAnMCcKKyAqCisgKiAgICAgICAgIDB4MjMgICAgUGh5X3RyYW5zYWN0aW9uIGxhc3QgbWludXRlIGNoYW5nZXMgZHVlIHRvIGNvcm5lciBjYXNlcworICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X3RyYW5zYWN0aW9uCisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBzeW1ib2xfdGltZXJfcHJlc2V0CisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBzeW1ib2xfdGltZXJfYWxtb3N0X3JlYWR5CisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBjc2xfaWRsZV9yeAorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gY3NsX2RhdGFfcngKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IHJ4X2VuYWJsZV9vc19jYXB0CisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSByeF9lbmFibGVfb3NfY2FwdF9kb25lCisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBwaHlfZW5fcmVhZHkKKyAqCisgKiAgICAgICAgIDB4MmYgICAgUGh5IGNvbnRyb2wgaW4gY29tYmluYXRpb24gd2l0aCBhcmJpdGVyIHN0YXRlIG1hY2hpbmUKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHBoeV90cmFuc2FjdGlvbgorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gYXJiX3BoeV90cmFuc19yZXNfc3RvcmUKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUtMCA9IGFyYl9kZWJ1Z19pbmZvCisgKgorICogICAgICAweDMwICAgIFBoeSBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBwaHlfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gcGh5YXR0cigzIGRvd250byAwKQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gZWRfcmVxdWVzdAorICoKKyAqICAgICAgMHgzMSAgICBQaHkgZW5hYmxlIGFuZCBkZXRhaWxlZCBzdGF0ZW1hY2hpbmUgaW5mbworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2LTAgPSBwcnQgc3RhdGVtZW50cyBkZXRhaWxlZCBzdGF0ZW1hY2hpbmUgaW5mbworICogICAgICAgICAgICAgICAgICAgICAgMCBSZXNldAorICogICAgICAgICAgICAgICAgICAgICAgMSBNQUlOX1NUQVRFX0lETEUgVFhfQUNLbm93bGVkZ2VtZW50IGZyYW1lIHNraXAgQ1NNQV9DQQorICogICAgICAgICAgICAgICAgICAgICAgMiBNQUlOX1NUQVRFX0lETEUgOiBXYWtlLVVwIGZyYW1lIHJlc2lkZXMgaW4gYnVmZmVyIG5vCisgKiAgICAgICAgICAgICAgICAgICAgICAzIE1BSU5fU1RBVEVfSURMRSA6IFRYIGZyYW1lIGluIFRTQ0ggbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgNCBNQUlOX1NUQVRFX0lETEUgOiBUWCBmcmFtZQorICogICAgICAgICAgICAgICAgICAgICAgNSBNQUlOX1NUQVRFX0lETEUgOiBnb3RvIFNJTkdMRV9DQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgIDYgTUFJTl9TVEFURV9JRExFIDogZ290byBFbmVyZ3kgRGV0ZWN0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICA3IE1BSU5fU1RBVEVfSURMRSA6IGdvdG8gUlgKKyAqICAgICAgICAgICAgICAgICAgICAgIDggTUFJTl9TVEFURV9JRExFIGRlLWFzc2VydCBwaHlfZW4gd2FpdCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIDkgTUFJTl9TVEFURV9JRExFIFN0YXJ0IHBoeV9lbiBhbmQgYXNzZXJ0IHBoeV9lbiB3YWl0IGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAxMCBNQUlOX1NUQVRFX0NTTUFfQ0FfV0FJVF9GT1JfTUVUQURBVEEgIGZyYW1lbnIgOgorICogICAgICAgICAgICAgICAgICAgICAgMTEgTUFJTl9TVEFURV9DU01BX0NBIGZyYW1lbnIgOgorICogICAgICAgICAgICAgICAgICAgICAgMTIgTUFJTl9TVEFURV9DU01BX0NBIHN0YXJ0IENTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgIDE0IE1BSU5fU1RBVEVfQ1NNQV9DQSBza2lwIENTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgIDE1IE1BSU5fU1RBVEVfV0FJVF9GT1JfQ1NNQV9DQSBjc21hX2NhIEZhaWxlZCBmb3IgQ1NMIG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDE2IE1BSU5fU1RBVEVfV0FJVF9GT1JfQ1NNQV9DQSBjc21hX2NhIEZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTcgTUFJTl9TVEFURV9XQUlUX0ZPUl9DU01BX0NBIGNzbWFfY2EgU3VjY2VzcworICogICAgICAgICAgICAgICAgICAgICAgMTggTUFJTl9TVEFURV9TSU5HTEVfQ0NBIGNjYSBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE5IE1BSU5fU1RBVEVfU0lOR0xFX0NDQSBjY2Egb2sKKyAqICAgICAgICAgICAgICAgICAgICAgIDIwIE1BSU5fU1RBVEVfV0FJVF9BQ0tfREVMQVkgd2FpdCB0aW1lIGVsYXBzZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDIxIE1BSU5fU1RBVEVfV0FJVCBBQ0tfREVMQVkgOiBTZW5kIEFjayBpbiBUU0NIIG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDIyIE1BSU5fU1RBVEVfV0FJVCBBQ0tfREVMQVkgOiBBY2sgbm90IHNjaGVkdWxlZCBpbiB0aW1lIGluIFRTQ0ggbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgMjMgTUFJTl9TVEFURV9UU0NIX1RYX0ZSQU1FIG1hY1RTUnhUeCB0aW1lIGVsYXBzZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDI0IE1BSU5fU1RBVEVfVFhfRlJBTUUgaXQgaXMgQ1NMIG1vZGUsIHN0YXJ0IHRoZSBXVSBzZXEgZm9yIG1hY1dVUGVyaW9kCisgKiAgICAgICAgICAgICAgICAgICAgICAyNSBNQUlOX1NUQVRFX1RYX0ZSQU1FMQorICogICAgICAgICAgICAgICAgICAgICAgMjYgTUFJTl9TVEFURV9UWF9GUkFNRV9XMSBleGl0LCB3YWl0ZWQgZm9yIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDI3IE1BSU5fU1RBVEVfVFhfRlJBTUVfVzIgZXhpdCwgd2FpdGVkIGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAyOCBNQUlOX1NUQVRFX1RYX1dBSVRfTEFTVF9TWU1CT0wgZXhpdAorICogICAgICAgICAgICAgICAgICAgICAgMjkgTUFJTl9TVEFURV9UWF9SQU1QRE9XTl9XIGV4aXQsIHdhaXRlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMzAgTUFJTl9TVEFURV9UWF9QSFlUUlhXQUlUIGV4aXQsIHdhaXRlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMzEgTUFJTl9TVEFURV9HRU5fSUZTICwgQWNrIHdpdGggZnJhbWUgcGVuZGluZyByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgMzIgTUFJTl9TVEFURV9HRU5fSUZTICwgQWNrIHJlcXVlc3RlZCBidXQgRGlzUlhhY2tSZWNlaXZlZGNhIGlzIHNldAorICogICAgICAgICAgICAgICAgICAgICAgMzMgTUFJTl9TVEFURV9HRU5fSUZTICwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGFuIElGUywgc3dpdGNoIHRoZSByeC1vbiBmb3IgYW4gQUNLCisgKiAgICAgICAgICAgICAgICAgICAgICAzNCBNQUlOX1NUQVRFX0dFTl9JRlMgLCBnZW5lcmF0aW5nIGFuIFNJRlMgKFNob3J0IEludGVyIEZyYW1lIFNwYWNlKQorICogICAgICAgICAgICAgICAgICAgICAgMzUgTUFJTl9TVEFURV9HRU5fSUZTICwgZ2VuZXJhdGluZyBhbiBMSUZTIChMb25nIEludGVyIEZyYW1lIFNwYWNlKQorICogICAgICAgICAgICAgICAgICAgICAgMzYgTUFJTl9TVEFURV9HRU5fSUZTX0ZJTklTSCBpbiBDU0wgbW9kZSwgJ2NzbHBlcmlvZF90aW1lcl9yZWFkeScgaXMgcmVhZHkgc2VudCB0aGUgZGF0YSBmcmFtZQorICogICAgICAgICAgICAgICAgICAgICAgMzcgTUFJTl9TVEFURV9HRU5fSUZTX0ZJTklTSCBpbiBDU0wgbW9kZSwgJ1JlbmRlenZvdXMgemVybyB0aW1lIG5vdCB5ZXQgdHJhbnNtaXR0ZWQgc2VudCBhbm90aGVyIFdVIGZyYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAzOCBNQUlOX1NUQVRFX0dFTl9JRlNfRklOSVNIIGV4aXQsIGNvcnJlY3RlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMzkgTUFJTl9TVEFURV9HRU5fSUZTX0ZJTklTSCBpbiBDU0wgbW9kZSwgcnhfcmVzdW1lX2FmdGVyX3R4IGlzIHNldAorICogICAgICAgICAgICAgICAgICAgICAgNDAgTUFJTl9TVEFURV9TRU5UX1NUQVRVUyBDU0xNb2RlIHd1X3NlcXVlbmNlX2RvbmVfZmxhZyA6CisgKiAgICAgICAgICAgICAgICAgICAgICA0MSBNQUlOX1NUQVRFX0FERF9ERUxBWSBleGl0LCBnb3RvIFJYIGZvciBmcmFtZSBwZW5kaW5nIHRpbWUKKyAqICAgICAgICAgICAgICAgICAgICAgIDQyIE1BSU5fU1RBVEVfQUREX0RFTEFZIGV4aXQsIGdvdG8gSURMRQorICogICAgICAgICAgICAgICAgICAgICAgNDMgTUFJTl9TVEFURV9SWCBzd2l0Y2ggdGhlIFJYIGZyb20gb2ZmIHRvIG9uCisgKiAgICAgICAgICAgICAgICAgICAgICA0NCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhTVEFSVCB3YWl0ZWQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICA0NSBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIHN0YXJ0IHRoZSBNYWNBY2tEdXJhdGlvbiB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNDYgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBzdGFydCB0aGUgYWNrIHdhaXQgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDQ3IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kgTk9STUFMIG1vZGUgOiBzdGFydCByeF9kdXJhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgNDggTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBUU0NIIG1vZGUgOiBzdGFydCBtYWNUU1J4V2FpdCAobWFjVFNSeFdhaXQpIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA0OSBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIENTTCBtb2RlIDogc3RhcnQgdGhlIGNzbF9yeF9kdXJhdGlvbiAobWFjQ1NMc2FtcGxlUGVyaW9kKSB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNTAgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBDU0wgbW9kZSA6IHN0YXJ0IHRoZSBjc2xfcnhfZHVyYXRpb24gKG1hY0NTTGRhdGFQZXJpb2QpIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA1MSBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDEgYWNrd2FpdF90aW1lcl9yZWFkeSBvciBhY2tfcmVjZWl2ZWRfaW5kCisgKiAgICAgICAgICAgICAgICAgICAgICA1MiBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDIgbm9ybWFsX21vZGUuIEFDSyB3aXRoIEZQIGJpdCBzZXQsIHN0YXJ0IGZyYW1lIHBlbmRpbmcgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDU0IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgNCBSeEFsd2F5c09uIGlzIHNldCB0byAwCisgKiAgICAgICAgICAgICAgICAgICAgICA1NSBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDUgVFNDSCBtb2RlIHZhbGlkIGZyYW1lIHJ4ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDU2IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgNiBUU0NIIG1vZGUgbWFjVFNSeHdhaXQgZXhwaXJlZAorICogICAgICAgICAgICAgICAgICAgICAgNTcgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA3IG1hY0NTTHNhbXBsZVBlcmlvZCB0aW1lciByZWFkeQorICogICAgICAgICAgICAgICAgICAgICAgNTggTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA4IGNzbF9tb2RlLiBEYXRhIGZyYW1lIHJlY2lldmVkIHdpdGggRlAgYml0IHNldCwgaW5jcmVtZW50IFJYIGR1cmF0aW9uIHRpbWUKKyAqICAgICAgICAgICAgICAgICAgICAgIDU5IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgOSBDU0wgbW9kZSA6IFJlY2VpdmVkIHd1IGZyYW1lIGluIGRhdGEgbGlzdGVuaW5nIHBlcmlvZCByZXN0YXJ0IG1hY0NTTGRhdGFQZXJpb2QgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDYwIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMTAgY3NsX3J4X2R1cmF0aW9uX3JlYWR5IG9yIGNzbCBkYXRhIGZyYW1lIHJlY2VpdmVkOgorICogICAgICAgICAgICAgICAgICAgICAgNjEgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxMSBub3JtYWxfbW9kZS4gRlAgYml0IGlzIHNldCwgc3RhcnQgZnJhbWUgcGVuZGluZyB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNjIgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxMiBub3JtYWwgbW9kZSByeF9kdXJhdGlvbl90aW1lcl9yZWFkeSBhbmQgZnJhbWVfcGVuZGluZ190aW1lcl9yZWFkeQorICogICAgICAgICAgICAgICAgICAgICAgNjMgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxMyBhY2tub3dsZWRnZSBmcmFtZSByZXF1ZXN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDY0IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMTQgSW50ZXJydXB0IHRvIHNlbnQgYSBmcmFtZS4gZm91bmRfdHhfcGFja2V0CisgKiAgICAgICAgICAgICAgICAgICAgICA2NSBNQUlOX1NUQVRFX0NTTF9SWF9JRExFX0VORCBSWiB0aW1lIGlzIGZhciBhd2F5LCBzd2l0Y2ggcmVjZWl2ZXIgT2ZmIGFuZCB3YWl0IGZvciBjc2xfcnhfcnpfdGltZSBiZWZvcmUgc3dpdGNoaW5nIG9uCisgKiAgICAgICAgICAgICAgICAgICAgICA2NiBNQUlOX1NUQVRFX0NTTF9SWF9JRExFX0VORCBSWiB0aW1lIGlzIG5vdCBzbyBmYXIgYXdheSwga2VlcCByZWNlaXZlciBPbiBhbmQgd2FpdCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIDY3IE1BSU5fU1RBVEVfUlhfU1RBUlRfUEhZUlhTVE9QIGFjayB3aXRoIGZwIHJlY2VpdmVkIGtlZXAgcnggb24KKyAqICAgICAgICAgICAgICAgICAgICAgIDY4IE1BSU5fU1RBVEVfUlhfU1RBUlRfUEhZUlhTVE9QIHN3aXRjaCB0aGUgUlggZnJvbSBvbiB0byBvZmYKKyAqICAgICAgICAgICAgICAgICAgICAgIDY5IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWFNUT1AgYWNrbm93bGVkZ2UgZG9uZSA6IHN3aXRjaCBiYWNrIHRvIGZpbmlzaCBUWAorICogICAgICAgICAgICAgICAgICAgICAgNzAgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYU1RPUCBzd2l0Y2ggdGhlIFJYIG9mZgorICogICAgICAgICAgICAgICAgICAgICAgNzEgTUFJTl9TVEFURV9FRCBzd2l0Y2ggdGhlIFJYIGZyb20gb2ZmIHRvIG9uCisgKiAgICAgICAgICAgICAgICAgICAgICA3MiBNQUlOX1NUQVRFX0VEX1dBSVRfUEhZUlhTVEFSVCB3YWl0ZWQgZm9yIHBoeVJ4U3RhcnR1cAorICogICAgICAgICAgICAgICAgICAgICAgNzMgTUFJTl9TVEFURV9FRF9XQUlUX0VEU0NBTkRVUkFUSU9OIHdhaXRlZCBmb3IgRWRTY2FuRHVyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIDc0IE1BSU5fU1RBVEVfRURfV0FJVF9QSFlSWFNUT1AgZW5kIG9mIEVuZXJneSBEZXRlY3Rpb24sIGdvdCBJRExFCisgKiAgICAgICAgICAgICAgICAgICAgICAgICA3NSBNQUlOX1NUQVRFX0lETEUsIHVzZV9sZWdhY3lfcGh5X2VuID0gJzAnLCByeF9lbmFibGVfb3NfY2FwdCBkZXRlY3RlZCBhbmQgbm90IHlldCAxIHVzIDEwMSBvZiBQSFlfRU4gZG9uZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIDc2IC0gMTI3IE5vdCB1c2VkCisgKgorICogICAgICAweDMyICAgIFJYIGVuYWJsZSBhbmQgZGV0YWlsZWQgc3RhdGVtYWNoaW5lIGluZm8KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2LTAgPSBkZXRhaWxlZCBzdGF0ZW1hY2hpbmUgaW5mbyBzZWUgZGJnX2NvbnRyb2wgPSAweDMxCisgKgorICogICAgICAweDMzICAgIFRYIGVuYWJsZSBhbmQgZGV0YWlsZWQgc3RhdGVtYWNoaW5lIGluZm8KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2LTAgPSBkZXRhaWxlZCBzdGF0ZW1hY2hpbmUgaW5mbyBzZWUgZGJnX2NvbnRyb2wgPSAweDMxCisgKgorICogICAgICAweDM0ICAgIFBoeSBlbmFibGUsIFRYIGVuYWJsZSBhbmQgUnggZW5hYmxlIGFuZCBzdGF0ZSBtYWNoaW5lIHN0YXRlcworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQtMCA9IFN0YXRlIG1hY2hpbmUgc3RhdGVzCisgKiAgICAgICAgICAgICAgICAgICAgICAgMSAgTUFJTl9TVEFURV9JRExFCisgKiAgICAgICAgICAgICAgICAgICAgICAgMiAgTUFJTl9TVEFURV9DU01BX0NBX1dBSVRfRk9SX01FVEFEQVRBCisgKiAgICAgICAgICAgICAgICAgICAgICAgMyAgTUFJTl9TVEFURV9DU01BX0NBCisgKiAgICAgICAgICAgICAgICAgICAgICAgNCAgTUFJTl9TVEFURV9XQUlUX0ZPUl9DU01BX0NBXzAKKyAqICAgICAgICAgICAgICAgICAgICAgICA1ICBNQUlOX1NUQVRFX1dBSVRfRk9SX0NTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgICA2ICBNQUlOX1NUQVRFX1NJTkdMRV9DQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgICA3ICBNQUlOX1NUQVRFX1dBSVRfQUNLX0RFTEFZCisgKiAgICAgICAgICAgICAgICAgICAgICAgOCAgTUFJTl9TVEFURV9UU0NIX1RYX0ZSQU1FCisgKiAgICAgICAgICAgICAgICAgICAgICAgOSAgTUFJTl9TVEFURV9UWF9GUkFNRQorICogICAgICAgICAgICAgICAgICAgICAgIDEwIE1BSU5fU1RBVEVfVFhfRlJBTUUxCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTEgTUFJTl9TVEFURV9UWF9GUkFNRV9XMQorICogICAgICAgICAgICAgICAgICAgICAgIDEyIE1BSU5fU1RBVEVfVFhfRlJBTUVfVzIKKyAqICAgICAgICAgICAgICAgICAgICAgICAxMyBNQUlOX1NUQVRFX1RYX1dBSVRfTEFTVF9TWU1CT0wKKyAqICAgICAgICAgICAgICAgICAgICAgICAxNCBNQUlOX1NUQVRFX1RYX1JBTVBET1dOCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTUgTUFJTl9TVEFURV9UWF9SQU1QRE9XTl9XCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTYgTUFJTl9TVEFURV9UWF9QSFlUUlhXQUlUCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTcgTUFJTl9TVEFURV9HRU5fSUZTCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTggTUFJTl9TVEFURV9HRU5fSUZTX0ZJTklTSAorICogICAgICAgICAgICAgICAgICAgICAgIDE5IE1BSU5fU1RBVEVfU0VOVF9TVEFUVVMKKyAqICAgICAgICAgICAgICAgICAgICAgICAyMCBNQUlOX1NUQVRFX0FERF9ERUxBWQorICogICAgICAgICAgICAgICAgICAgICAgIDIxIE1BSU5fU1RBVEVfVFNDSF9SWF9BQ0tERUxBWQorICogICAgICAgICAgICAgICAgICAgICAgIDIyIE1BSU5fU1RBVEVfUlgKKyAqICAgICAgICAgICAgICAgICAgICAgICAyMyBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhTVEFSVAorICogICAgICAgICAgICAgICAgICAgICAgIDI0IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kKKyAqICAgICAgICAgICAgICAgICAgICAgICAyNSBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVECisgKiAgICAgICAgICAgICAgICAgICAgICAgMjYgTUFJTl9TVEFURV9DU0xfUlhfSURMRV9FTkQKKyAqICAgICAgICAgICAgICAgICAgICAgICAyNyBNQUlOX1NUQVRFX1JYX1NUQVJUX1BIWVJYU1RPUAorICogICAgICAgICAgICAgICAgICAgICAgIDI4IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWFNUT1AKKyAqICAgICAgICAgICAgICAgICAgICAgICAyOSBNQUlOX1NUQVRFX0VECisgKiAgICAgICAgICAgICAgICAgICAgICAgMzAgTUFJTl9TVEFURV9FRF9XQUlUX1BIWVJYU1RBUlQKKyAqICAgICAgICAgICAgICAgICAgICAgICAzMSBNQUlOX1NUQVRFX0VEX1dBSVRfRURTQ0FORFVSQVRJT04KKyAqCisgKiAgICAgIDB4MzUgICAgbG1hYyBjb250cm9sbGVyIHRvIHR4IGludGVyZmFjZSB3aXRoIHdha2V1cAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX2FjaworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0yID0gY3RybF9sbWFjX3RvX3R4LnR4X2ZyYW1lX25tYnIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gY3RybF90eF90b19sbWFjLnR4X2xhc3Rfc3ltYm9sCisgKgorICogICAgICAweDM2ICAgIGxtYWMgY29udHJvbGxlciB0byB0eCBpbnRlcmZhY2Ugd2l0aCBmcmFtZSBwZW5kaW5nCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGN0cmxfbG1hY190b190eC5nZW4uZnBfYml0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX2FjaworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0yID0gY3RybF9sbWFjX3RvX3R4LnR4X2ZyYW1lX25tYnIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gY3RybF90eF90b19sbWFjLnR4X2xhc3Rfc3ltYm9sCisgKgorICogICAgICAweDM3ICAgIHJ4IHBpcGVwbGluZSB0byBsbWFjIGNvbnRyb2xsZXIgaW50ZXJmYWNlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGN0cmxfcnhfdG9fbG1hYy5yeF9zb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gY3RybF9yeF90b19sbWFjLnJ4X2VvZl9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBjdHJsX3J4X3RvX2xtYWMucGFja2V0X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyICAgPSBhY2tfcmVjZWl2ZWRfaW5kCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBhY2tfcmVxdWVzdF9pbmQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGN0cmxfcnhfdG9fbG1hYy5kYXRhX3JlcXVlc3RfZnJhbWUKKyAqCisgKiAgICAgIDB4MzggICAgY3NsIHN0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGNzbF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNC0xID0gc3dpb19hbHdheXNfb25fdG9fbG1hY19jdHJsLnR4X2ZsYWdfc3RhdAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gZm91bmRfd3VfcGFja2V0OworICoKKyAqICAgICAgMHgzOSAgICBUc2NoIFRYIGFjayB0aW1pbmcKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDctNCA9IHN3aW9fYWx3YXlzX29uX3RvX2xtYWNfY3RybC50eF9mbGFnX3N0YXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gY3RybF9yeF90b19sbWFjLnBhY2tldF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gb25lX3VzX3RpbWVyX3JlYWR5CisgKgorICogICAgICAweDNhICAgIFBoeSBjb250cm9sIGFuZCBQaHkgc3RhdHVzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBwaHlfdHJhbnNhY3Rpb24KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHBoeV9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBjY2Ffc3RhdAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gZWRfcmVxdWVzdAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gcnhfZW5hYmxlX29zX2NhcHQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IGZvdW5kX3R4X3BhY2tldAorICoKKyAqICAgICAgMHgzYiAgICBQaHkgY29udHJvbCwgaW5jbCBvbGQgUEhZX0VOICh0byBzaG93IHRoZSBpbXByb3ZlbWVudCB1c2luZyB2MikKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHBoeV90cmFuc2FjdGlvbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcGh5X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMCA9IHB0aQorICoKKyAqICAgICAgICAgMHgzYyAgICBDb250cm9sIHNpZ25hbHMgZm9yIGFyYml0ZXIgY29udHJvbCBzdGF0ZSBtYWNoaW5lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBwaHlfdHJhbnNhY3Rpb24KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IGFyYl9waHlfdHJhbnNfc2V0X3N0b3JlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBhcmJfcGh5X3RyYW5zX2Nscl9zdG9yZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gYXJiX3BoeV90cmFuc19yZXNfc3RvcmUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGZvdW5kX3R4X3BhY2tldAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gZm91bmRfdHhfcGFja2V0X25leHQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IGZvdW5kX3d1X3BhY2tldAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcmVxX2Zvcl9hY2tfZmxhZworICoKKyAqICAgICAgMHgzZCAgICBPdXRwdXQgb2YgY2hlY2sgd2hpY2ggcGFja2V0IHRvIHNlbmQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHBoeV90cmFuc2FjdGlvbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gTG1hY1JlYWR5NHNsZWVwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1LTQgPSBmb3VuZF90eF9udW1iZXIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMiA9IGZvdW5kX3R4X251bWJlcl9uZXh0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxLTAgPSBmb3VuZF93dV9udW1iZXIKKyAqCisgKiAgICAgICAgIDB4M2UgICAgQ1NNQV9DQSBhbmQgdGltZXIgY29udHJvbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X3RyYW5zYWN0aW9uCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBDc21hX2NhX3Jlc3VtZV9zdGF0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBTaW5nbGVDQ0Ffb3NfY2FwdAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gYmFja29mZl90aW1lcl9wcmVzZXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGJhY2tvZmZfdGltZXJfYWxtb3N0X3JlYWR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSBiYWNrb2ZmX3RpbWVyX3JlYWR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSBhcmJfdGltZXJfcHJlc2V0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBhcmJfdGltZXJfcmVhZHkKKyAqCisgKiAgICAgICAgIDB4M2YgICAgYXJiaXRlciBjb250cm9sIHN0YXRlIG1hY2hpbmUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHBoeV90cmFuc2FjdGlvbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGFyYl9waHlfdHJhbnNfc2V0X3N0b3JlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBhcmJfcGh5X3RyYW5zX2Nscl9zdG9yZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gYXJiX3BoeV90cmFuc19yZXNfc3RvcmUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDItMCA9IGFyYl9zdGF0ZV9pbmZvCisgKgorICoKKyAqIGRiZ19jb250cm9sIGluIHJhbmdlIDB4NDAgLSAweDRmIERlYnVnIHNlY3VyaXR5CisgKiAgICAgIDB4NDAgICAgU2VjdXJpdHkgY29udHJvbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gc3dpb190b19zZWN1cml0eS5zZWNTdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gc3dpb190b19zZWN1cml0eS5zZWNUeFJ4bgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gc3dpb190b19zZWN1cml0eS5zZWNBYm9ydAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gc3dpb190b19zZWN1cml0eS5zZWNFbmNEZWNuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBzd2lvX2Zyb21fc2VjdXJpdHkuc2VjQnVzeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMiAgID0gc3dpb19mcm9tX3NlY3VyaXR5LnNlY0F1dGhGYWlsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBzd2lvX2Zyb21fc2VjdXJpdHkuc2VjUmVhZHlfZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gJzAnCisgKgorICogICAgICAweDQxICAgIFNlY3VyaXR5IGN0bGlkIGFjY2VzcyByeCBhbmQgdHgKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X3NlY19jaS5sZF9zdHJiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSB0eF9zZWNfY2kuY3RsaWRfcncKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHR4X3NlY19jaS5zZWxlY3RwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSB0eF9zZWNfY28uZF9yZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IHJ4X3NlY19jaS5sZF9zdHJiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyICAgPSByeF9zZWNfY2kuY3RsaWRfcncKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IHJ4X3NlY19jaS5zZWxlY3RwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSByeF9zZWNfY28uZF9yZHkKKyAqCisgKiAgICAgIDB4NDIgICAgU2VjdXJpdHkgY3RsaWQgYWNjZXNzIHR4IHdpdGggc2VjX3dyX2RhdGFfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X3NlY19jaS5sZF9zdHJiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSB0eF9zZWNfY2kuY3RsaWRfcncKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHR4X3NlY19jaS5zZWxlY3RwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSB0eF9zZWNfY28uZF9yZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMCA9IHNlY193cl9kYXRhX3ZhbGlkCisgKgorICogICAgICAweDQzICAgIFNlY3VyaXR5IGN0bGlkIGFjY2VzcyByeCB3aXRoIHNlY193cl9kYXRhX3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSByeF9zZWNfY2kubGRfc3RyYgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcnhfc2VjX2NpLmN0bGlkX3J3CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSByeF9zZWNfY2kuc2VsZWN0cAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gcnhfc2VjX2NvLmRfcmR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzLTAgPSBzZWNfd3JfZGF0YV92YWxpZAorICoKKyAqICAgICAgMHg0NC0weDRmICAgICAgIE5vdCB1c2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA3IC0gMCA9IGFsbCAnMCcKKyAqCisgKiBkYmdfY29udHJvbCBpbiByYW5nZSAweDUwIC0gMHg1ZiBBSEIgYnVzCisgKiAgICAgIDB4NTAgICAgYWhiIGJ1cyB3aXRob3V0IGhzaXplCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBoc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2LTUgPSBodHJhbnMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGh3cml0ZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gaHJlYWR5X2luCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyICAgPSBocmVhZHlfb3V0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxLTAgPSBocmVzcAorICoKKyAqICAgICAgMHg1MSAgICBhaGIgYnVzIHdpdGhvdXQgaHdyZWFkeV9pbiBhbmQgaHJlc3AoMSkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGhzZWwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYtNSA9IGh0cmFucworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gaHdyaXRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzLTIgPSBoaHNpemUoMSBkb3dudG8gMCkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IGhyZWFkeV9vdXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGhyZXNwKDApCisgKgorICogICAgICAweDUyICAgIEFtYmEgdHggc2lnbmFscworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gYWlfdHgucGVuYWJsZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gYWlfdHgucHNlbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gYWlfdHgucHdyaXRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBhb190eC5wcmVhZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGFvX3R4LnBzbHZlcnIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDItMSA9IHBzaXplX3R4CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBocmVhZHlfb3V0CisgKgorICogICAgICAweDUzICAgIEFtYmEgcnggc2lnbmFscworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gYWlfcngucGVuYWJsZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gYWlfcngucHNlbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gYWlfcngucHdyaXRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBhb19yeC5wcmVhZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGFvX3J4LnBzbHZlcnIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDItMSA9IHBzaXplX3J4CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBocmVhZHlfb3V0CisgKgorICogICAgICAweDU0ICAgIEFtYmEgcmVnaXN0ZXIgbWFwIHNpZ25hbHMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGFpX3JlZy5wZW5hYmxlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBhaV9yZWcucHNlbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gYWlfcmVnLnB3cml0ZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gYW9fcmVnLnByZWFkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gYW9fcmVnLnBzbHZlcnIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDItMSA9ICIwMCIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGhyZWFkeV9vdXQKKyAqCisgKiAgICAgIDB4NTUtMHg1ZiAgICAgICBOb3QgdXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNyAtIDAgPSBhbGwgJzAnCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR19DT05UUk9MIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9ERUJVR0NPTlRST0wKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR19DT05UUk9MIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR19DT05UUk9MIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdfQ09OVFJPTCA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eGJ5dGVfZQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MworICogQWNjZXNzIG1vZGU6IEUtUkNXIChldmVudCByZWFkL2NsZWFyIG9uIHdyaXRlIDEpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FIDB4NDAwOTAzOTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FIDB4MworCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Ynl0ZV9lCisgKgorICogSWYgc2V0IHRvICcxJywgaXQgaW5kaWNhdGVzIHRoZSBmaXJzdCBieXRlIG9mIGEgZnJhbWUgaXMgdHJhbnNtaXR0ZWQKKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbNF0uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX0UgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX0UgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9sYXN0X3N5bWJvbF9lCisgKgorICogSWYgc2V0IHRvICcxJywgaXQgaW5kaWNhdGVzIHRoZSBsYXN0IHN5bWJvbCBvZiBhIGZyYW1lIGlzIHRyYW5zbWl0dGVkCisgKiBUaGlzIGV2ZW50IGJpdCBjb250cmlidXRlcyB0byBmdGRmX2NlWzRdLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9MQVNUX1NZTUJPTF9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfTEFTVF9TWU1CT0xfRSAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0xBU1RfU1lNQk9MX0UgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0xBU1RfU1lNQk9MX0UgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhieXRlX20KKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDMKKyAqIEFjY2VzcyBtb2RlOiBFTS1SVyAoZXZlbnQgbWFzaykKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00gMHg0MDA5MDM5OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9NIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00gMHgzCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhieXRlX20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgInR4Ynl0ZV9lIi4KKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00KKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9NIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00gMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9NIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhfbGFzdF9zeW1ib2xfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAidHhfbGFzdF9zeW1ib2xfZSIuCisgKiBUaGUgbWFzayBiaXQgaXMgbWFza2luZyB3aGVuIGNsZWFyZWQgdG8gJzAnIChkZWZhdWx0IHZhbHVlKSBhbmQgd2lsbCBlbmFibGUgdGhlIGNvbnRyaWJ1dGlvbiB0byB0aGUgaW50ZXJydXB0IHdoZW4gc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfTEFTVF9TWU1CT0xfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00KKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0xBU1RfU1lNQk9MX00gMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9MQVNUX1NZTUJPTF9NIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9MQVNUX1NZTUJPTF9NIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2ZsYWdfcworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1MgMHg0MDA5MDQwMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfUyAweDEKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU19OVU0gMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NfSU5UVkwgMHgyMAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TVEFUX05VTSAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU1RBVF9JTlRWTCAweDIwCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZmxhZ19zdGF0CisgKgorICogVHggbWV0YSBkYXRhIHBlciBlbnRyeTogaWYgc2V0IHRvICcxJywgdGhlIHBhY2tldCBpcyByZWFkeSBmb3IgdHJhbnNtaXNzaW9uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU1RBVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NUQVQgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NUQVQgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU1RBVCAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX2NsZWFyX2UKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEKKyAqIEFjY2VzcyBtb2RlOiBFLVJDVyAoZXZlbnQgcmVhZC9jbGVhciBvbiB3cml0ZSAxKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UgMHg0MDA5MDQwNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRSAweDEKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRV9OVU0gMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0VfSU5UVkwgMHgyMAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FX05VTSAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRV9JTlRWTCAweDIwCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZmxhZ19jbGVhcl9lCisgKgorICogVHggbWV0YSBkYXRhIHBlciBlbnRyeTogaWYgc2V0IHRvICcxJyB0aGUgTE1BQyBoYXJkd2FyZSBoYXMgY2xlYXJlZCB0aGUgdHhfZmxhZ19zdGF0IHN0YXR1cy4KKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbNF0uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX2NsZWFyX20KKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEKKyAqIEFjY2VzcyBtb2RlOiBFTS1SVyAoZXZlbnQgbWFzaykKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NIDB4NDAwOTA0MDgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gMHgxCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX01fTlVNIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NX0lOVFZMIDB4MjAKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTV9OVU0gMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX01fSU5UVkwgMHgyMAorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2ZsYWdfY2xlYXJfbQorICoKKyAqIFR4IG1ldGEgZGF0YSBwZXIgZW50cnk6IE1hc2sgYml0IGZvciBldmVudCAidHhfZmxhZ19jbGVhcl9lIi4KKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfcHJpb3JpdHkKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGYxZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWSAweDQwMDkwNDEwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWSAweGYxZgorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFlfTlVNIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFlfSU5UVkwgMHgyMAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFlfTlVNIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFlfSU5UVkwgMHgyMAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfSVNXQUtFVVBfTlVNIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfSVNXQUtFVVBfSU5UVkwgMHgyMAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfUFRJX1RYX05VTSAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1BUSV9UWF9JTlRWTCAweDIwCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9wcmlvcml0eQorICoKKyAqIFR4IG1ldGEgZGF0YSBwZXIgZW50cnk6IFByaW9yaXR5IG9mIHBhY2tldAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZIDB4ZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZIDQKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfSXNXYWtlVXAKKyAqCisgKiBUeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiBBIGJhc2ljIHdha2UtdXAgZnJhbWUgY2FuIGJlIGdlbmVyYXRlZCBieSB0aGUgVU1BQyBpbiB0aGUgVHggYnVmZmVyLgorICogVGhlIG1ldGEgZGF0YSBjb250cm9sIGJpdCBJc1dha2VVcCBtdXN0IGJlIHNldCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgaXMgYSBXYWtlLXVwIGZyYW1lLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9JU1dBS0VVUCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTV0FLRVVQIDB4MTAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTV0FLRVVQIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9JU1dBS0VVUCAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcHRpX3R4CisgKgorICogVGhpcyByZWdpc3RlciBoYXMgNCBlbnRyaWVzLCBiZWxvbmdpbmcgdG8gdGhlIGVudHJ5IG9mIHRoZSBUeCBmcmFtZSB0byBzZW5kLCB0byBiZSB1c2VkIGR1cmluZyB0cmFuc21pdHRpbmcgZnJhbWVzIGFuZCB0aGUgQ01TQS1DQSBwaGFzZSBiZWZvcmUgKHdoZW4gcmVxdWVzdGVkKS4KKyAqIEluIFRTQ0ggbW9kZSB0aGlzIHJlZ2lzdGVyIHNoYWxsIGJlIHVzZWQgZHVyaW5nIHRoZSB0aW1lIHNsb3QgaW4gd2hpY2ggZnJhbWVzIGNhbiBiZSB0cmFuc21pdHRlZCBhbmQgY29uc2VxdWVudGx5IGFuIEVuaGFuY2VkIEFDSyBjYW4gYmUgcmVjZWl2ZWQuCisgKiBTaW5jZSBwdGlfdHggYmVsb25ncyB0byBhIGNlcnRhaW4gZnJhbWUgdG8gYmUgdHJhbnNtaXR0ZWQsIHB0aV90eCBjYW4gYmUgY29uc2lkZXJlZCBhcyBleHRyYSBUeCBtZXRhIGRhdGEuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BUSV9UWCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BUSV9UWCAweGYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUFRJX1RYIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QVElfVFggNAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfc2V0X29zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmCisgKiBBY2Nlc3MgbW9kZTogT1MtVyAob25lLXNob3QgLSB3cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfU0VUX09TIDB4NDAwOTA0ODAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9TRVRfT1MgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9TRVRfT1MgMHhmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX3NldAorICoKKyAqIFR4IG1ldGEgZGF0YSBwZXIgZW50cnk6IGlmIHNldCB0byAnMScsIHRoZSB0eF9mbGFnX3N0YXQgd2lsbCBiZSBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NFVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfU0VUX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NFVCAweGYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU0VUIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NFVCA0CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9jbGVhcl9vcworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZgorICogQWNjZXNzIG1vZGU6IE9TLVcgKG9uZS1zaG90IC0gd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NMRUFSX09TIDB4NDAwOTA0ODQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DTEVBUl9PUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NMRUFSX09TIDB4ZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZmxhZ19jbGVhcgorICoKKyAqIFR4IG1ldGEgZGF0YSBwZXIgZW50cnk6IGlmIHNldCB0byAnMScsIHRoZSB0eF9mbGFnX3N0YXQgd2lsbCBiZSBjbGVhcmVkIHRvICcwJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfQ0xFQVJfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVIgMHhmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSIDQKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9hbHdheXNfb25fcmVnbWFwX3dha2V1cF9jb250cm9sCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4NDAwMDAwMDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZTFmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQX0NPTlRST0wgMHg0MDA5MTAwMAorI2RlZmluZSBTSVpFX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUF9DT05UUk9MIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQX0NPTlRST0wgMHhlMWZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX2Fsd2F5c19vbl9yZWdtYXBfV2FrZVVwSW50VGhyCisgKgorICogVGhyZXNob2xkIGZvciB3YWtlLXVwIGludGVycnVwdC4gV2hlbiBXYWtlVXBFbmFibGUgaXMgc2V0IHRvICcxJyBhbmQgdGhlIFdha2UtdXAgKGV2ZW50KSBjb3VudGVyIG1hdGNoZXMgdGhpcyB2YWx1ZSwgdGhlIGludGVycnVwdCBXQUtFVVBfSVJRIGlzIHNldCB0byAnMScgZm9yIHRoZSBkdXJhdGlvbiBvZiBvbmUgTFBfQ0xLIHBlcmlvZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQSU5UVEhSIElORF9SX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBfQ09OVFJPTAorI2RlZmluZSBNU0tfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQSU5UVEhSIDB4MWZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQSU5UVEhSIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBJTlRUSFIgMjUKKy8qCisgKgorICogQml0OiBmdGRmX2Fsd2F5c19vbl9yZWdtYXBfV2FrZVVwRW5hYmxlCisgKgorICogSWYgc2V0IHRvICcxJywgdGhlIFdha2VVcEludFRociBpcyBlbmFibGVkIHRvIGdlbmVyYXRlIGFuIFdBS0VVUF9JUlEgaW50ZXJydXB0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBFTkFCTEUgSU5EX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUF9DT05UUk9MCisjZGVmaW5lIE1TS19GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBFTkFCTEUgMHgyMDAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQRU5BQkxFIDI5CisjZGVmaW5lIFNJWkVfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQRU5BQkxFIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfYWx3YXlzX29uX3JlZ21hcF9XYWtlVXBfbW9kZQorICoKKyAqIFRoZSBDb250cm9sIHJlZ2lzdGVyIFdha2VVcF9tb2RlIGNvbnRyb2xzIHRoZSBiZWhhdmlvciBvZiB0aGUgRXZlbnQgY291bnRlcjoKKyAqIDBkID0gb2ZmLCAxZCA9IGZyZWUgcnVubmluZyAoZGVmYXVsdCksIDJkID0gb25lIHNob3Qgd2l0aCBhdXRvIGNsZWFyLCAzZCA9IGNvbmZpZ3VyYWJsZSBwZXJpb2QgKHRpbWVyCisgKiBtb2RlKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQX01PREUgSU5EX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUF9DT05UUk9MCisjZGVmaW5lIE1TS19GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBfTU9ERSAweGMwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBfTU9ERSAzMAorI2RlZmluZSBTSVpFX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUF9NT0RFIDIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9mcF9wcm9jZXNzaW5nX3JhbV9sb25nX2FkZHJfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fTE9OR19BRERSXzAgMHg0MDA5MjAwMAorI2RlZmluZSBTSVpFX1JfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9MT05HX0FERFJfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9MT05HX0FERFJfMCAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfRlBfUFJPQ0VTU0lOR19SQU1fTE9OR19BRERSXzBfTlVNIDB4MTgKKyNkZWZpbmUgRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9MT05HX0FERFJfMF9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0xfTlVNIDB4MTgKKyNkZWZpbmUgRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfTF9JTlRWTCAweDEwCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfZnBfcHJvY2Vzc2luZ19yYW1fRXhwX1NBX2wKKyAqCisgKiBMb3dlc3QgcGFydCBvZiB0aGUgNjQgYml0cyBsb25nIHNvdXJjZSBhZGRyZXNzIG9yIFNBIGVudHJ5IDEgcmVzcC4gU0EgZW50cnkgMCBpbiBjYXNlIG9mIHNob3J0IHNvdXJjZSBhZGRyZXNzLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0wgSU5EX1JfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9MT05HX0FERFJfMAorI2RlZmluZSBNU0tfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9MIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfTCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9MIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfZnBfcHJvY2Vzc2luZ19yYW1fbG9uZ19hZGRyXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX0xPTkdfQUREUl8xIDB4NDAwOTIwMDQKKyNkZWZpbmUgU0laRV9SX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fTE9OR19BRERSXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fTE9OR19BRERSXzEgMHhmZmZmZmZmZgorI2RlZmluZSBGVERGX0ZQX1BST0NFU1NJTkdfUkFNX0xPTkdfQUREUl8xX05VTSAweDE4CisjZGVmaW5lIEZUREZfRlBfUFJPQ0VTU0lOR19SQU1fTE9OR19BRERSXzFfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX0ZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9IX05VTSAweDE4CisjZGVmaW5lIEZUREZfRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0hfSU5UVkwgMHgxMAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX2ZwX3Byb2Nlc3NpbmdfcmFtX0V4cF9TQV9oCisgKgorICogSGlnaGVzdCBwYXJ0IG9mIHRoZSA2NCBiaXRzIGxvbmcgc291cmNlIGFkZHJlc3Mgb3IgU0EgZW50cnkgMyByZXNwLiBTQSBlbnRyeSAyIGluIGNhc2Ugb2Ygc2hvcnQgc291cmNlIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfSCBJTkRfUl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX0xPTkdfQUREUl8xCisjZGVmaW5lIE1TS19GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0ggMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9IIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0ggMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9mcF9wcm9jZXNzaW5nX3JhbV9zaXplX2FuZF92YWwKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NJWkVfQU5EX1ZBTCAweDQwMDkyMDA4CisjZGVmaW5lIFNJWkVfUl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NJWkVfQU5EX1ZBTCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9TSVpFX0FORF9WQUwgMHgxZgorI2RlZmluZSBGVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NJWkVfQU5EX1ZBTF9OVU0gMHgxOAorI2RlZmluZSBGVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NJWkVfQU5EX1ZBTF9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfRlBfUFJPQ0VTU0lOR19SQU1fVkFMSURfU0FfTlVNIDB4MTgKKyNkZWZpbmUgRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9WQUxJRF9TQV9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0hPUlRfTE9OR05PVF9OVU0gMHgxOAorI2RlZmluZSBGVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NIT1JUX0xPTkdOT1RfSU5UVkwgMHgxMAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX2ZwX3Byb2Nlc3NpbmdfcmFtX1ZhbGlkX1NBCisgKgorICogSW5kaWNhdGlvbiB3aGljaCBTQSBlbnRyeSBpcyB2YWxpZCAoaWYgc2V0KS4gSW4gY2FzZSBvZiA0IHNob3J0IFNBIFZhbGlkIGJpdCAzIGJlbG9uZ3MgdG8gU0EgZW50cnkgMyBldGMuCisgKiBJbiBjYXNlIG9mIGEgbG9uZyBTQSBWYWxpZCBiaXQgMCBpcyB0aGUgdmFsaWQgaW5kaWNhdGlvbi4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1ZBTElEX1NBIElORF9SX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0laRV9BTkRfVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fVkFMSURfU0EgMHhmCisjZGVmaW5lIE9GRl9GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fVkFMSURfU0EgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9WQUxJRF9TQSA0CisvKgorICoKKyAqIEJpdDogZnRkZl9mcF9wcm9jZXNzaW5nX3JhbV9TaG9ydF9Mb25nTm90CisgKgorICogQSAnMScgaW5kaWNhdGVzIHRoYXQgRXhwX1NBIGNvbnRhaW5zIGZvdXIgc2hvcnQgU0EncywgYSAnMCcgaW5kaWNhdGVzIG9uZSBsb25nIFNBLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0hPUlRfTE9OR05PVCBJTkRfUl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NJWkVfQU5EX1ZBTAorI2RlZmluZSBNU0tfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NIT1JUX0xPTkdOT1QgMHgxMAorI2RlZmluZSBPRkZfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NIT1JUX0xPTkdOT1QgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9TSE9SVF9MT05HTk9UIDEKKyNlbmRpZiAvLyBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisjZW5kaWYgLy8gX2Z0ZGYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dUb29scy9jbGlfcHJvZ3JhbW1lciBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dUb29scy9jbGlfcHJvZ3JhbW1lcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNzk1NTFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1Rvb2xzL2NsaV9wcm9ncmFtbWVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dUb29scy9pbWdwcmVwLnNoIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1Rvb2xzL2ltZ3ByZXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGEyMDYwMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dUb29scy9pbWdwcmVwLnNoCkBAIC0wLDAgKzEsNCBAQAorYXJtLW5vbmUtZWFiaS1vYmpjb3B5IC1PIGJpbmFyeSAuLi8uLi8uLi9vdXRwdXQvZGExNTAwMC9iaW4vb3QtY2xpLWZ0ZCAuLi8uLi8uLi9vdXRwdXQvZGExNTAwMC9iaW4vb3QtY2xpLWZ0ZC5iaW4KKworCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9SRUFETUUubWQgYi90aGlyZF9wYXJ0eS9kaWFsb2cvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYmZjNjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTcgQEAKK1VSTDogaHR0cDovL3d3dy5kaWFsb2ctc2VtaWNvbmR1Y3Rvci5jb20vb3BlbnRocmVhZC1zYW5kYm94LWRldmVsb3BtZW50LWtpdAorCitWZXJzaW9uOiAgIFRPIEJFIFVQREFURUQhCisKKworTGljZW5zZTogICBCU0QzCisKKworRGVzY3JpcHRpb246CisKK0RpYWxvZ1NESyAtIGNvbnRhaW4gYm9hcmQgc3VwcG9ydCBwYWNrYWdlIGFuZCByYWRpbyBpbnRlcmZhY2UgdXNlZCBmb3IgYnVpbGQKKworRGlhbG9nVG9vbHMgLSBjb250YWluIGZsYXNoIHRvb2xzCisJaW1ncHJlcC5zaCAtIHByZXBhcmUgaW1hZ2UgZnJvbSBnZW5lcmF0ZWQgYmluYXJ5IHVzaW5nIGJpbjJpbWFnZSB0b29sCisJY2xpX3Byb2dyYW1tZXIgYW5kIHVhcnRib290IC0gdXRpbGl0aWVzIGZvciBsb2FkaW5nIGltYWdlIGludG8gdGhlIHBsYXRmb3JtCisKK0xvb2sgaW50byBleGFtcGxlcy9wbGF0Zm9ybS9kYTE1MDAwL1JFQURNRS5hbSBmb3IgRGlhbG9nVG9vbHMgdXNhZ2UgZGVzY3JpcHRpb24uCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL01ha2VmaWxlLmFtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2JmMGIyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDEzOCBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNiBUaGUgT3BlblRocmVhZCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBtYmVkdGxzLWNvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXBvL2luY2x1ZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxpYm1iZWRjcnlwdG8uYQorCisjIERvIG5vdCBlbmFibGUgLVdjb252ZXJzaW9uIGZvciBtYmVkdGxzCitvdmVycmlkZSBDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSAkKGZpbHRlci1vdXQgLVdjb252ZXJzaW9uLCQoQ0ZMQUdTKSkKK292ZXJyaWRlIENYWEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9ICQoZmlsdGVyLW91dCAtV2NvbnZlcnNpb24sJChDWFhGTEFHUykpCisKKyMgRG8gbm90IGVuYWJsZSAtcGVkYW50aWMtZXJyb3JzIGZvciBtYmVkdGxzCitvdmVycmlkZSBDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSAkKGZpbHRlci1vdXQgLXBlZGFudGljLWVycm9ycywkKENGTEFHUykpCitvdmVycmlkZSBDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSAkKGZpbHRlci1vdXQgLXBlZGFudGljLWVycm9ycywkKENYWEZMQUdTKSkKKworTUJFRFRMU19TUkNESVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8KKworbGlibWJlZGNyeXB0b19hX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMvY29yZSAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJChNQkVEVExTX1NSQ0RJUikvaW5jbHVkZSAgICAgICAgICAgICAgICAgXAorICAgICQoTUJFRFRMU19DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGlibWJlZGNyeXB0b19hX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGhhcmR3YXJlX2VudHJvcHkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9tZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9tZF93cmFwLmMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9tZW1vcnlfYnVmZmVyX2FsbG9jLmMgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9wbGF0Zm9ybS5jICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9zaGEyNTYuYyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19FRlIzMgorbm9kaXN0X2xpYm1iZWRjcnlwdG9fYV9TT1VSQ0VTICAgICAgICAgICAgICAgID0gXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS91dGlsL3RoaXJkX3BhcnR5L21iZWR0bHMvc2xfY3J5cHRvL3NyYy9zbF9hZXMuYyBcCisgICAgJChOVUxMKQorZWxzZQorbGlibWJlZGNyeXB0b19hX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIHJlcG8vbGlicmFyeS9hZXMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmICAjIE9QRU5USFJFQURfRVhBTVBMRVNfRUZSMzIKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfRFRMUworbGlibWJlZGNyeXB0b19hX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIHJlcG8vbGlicmFyeS9iaWdudW0uYyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9jY20uYyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9jaXBoZXIuYyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9jaXBoZXJfd3JhcC5jICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9jbWFjLmMgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9jdHJfZHJiZy5jICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9kZWJ1Zy5jICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9lY2pwYWtlLmMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9lY3BfY3VydmVzLmMgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9lbnRyb3B5LmMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9lbnRyb3B5X3BvbGwuYyAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9zc2xfY29va2llLmMgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9zc2xfY2lwaGVyc3VpdGVzLmMgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9zc2xfY2xpLmMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9zc2xfc3J2LmMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9zc2xfdGlja2V0LmMgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vbGlicmFyeS9zc2xfdGxzLmMgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19FRlIzMgorbm9kaXN0X2xpYm1iZWRjcnlwdG9fYV9TT1VSQ0VTICAgICAgICAgICAgICAgKz0gXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS91dGlsL3RoaXJkX3BhcnR5L21iZWR0bHMvbGlicmFyeS9lY3AuYyBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3V0aWwvdGhpcmRfcGFydHkvbWJlZHRscy9zbF9jcnlwdG8vc3JjL3NsX2VjcC5jIFwKKyAgICAkKE5VTEwpCitlbHNlCitsaWJtYmVkY3J5cHRvX2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgcmVwby9saWJyYXJ5L2VjcC5jICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgICMgT1BFTlRIUkVBRF9FWEFNUExFU19FRlIzMgorCisjCisjIG1iZWR0bHMgcGF0Y2hlcworIworCitNQkVEVExTX0FCU19TUkNESVIgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSAkKGFic3BhdGggJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9tYmVkdGxzKQorCitFWFRSQV9ESVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIHBhdGNoLzAwMDEtRml4LWNvbW1pc3Npb25pbmctcHJvYmxlbS13aXRoLXJldHJhbnNtaXNzaW9ucy5wYXRjaCAgIFwKKyAgICBwYXRjaC8wMDAyLUZpeC13YXJuaW5nLWRlYWQtc3RvcmUucGF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCityZXBvL2xpYnJhcnkvbGlibWJlZGNyeXB0b19hLXNzbF90bHMuJChPQkpFWFQpOiAkKE1CRURUTFNfU1JDRElSKS9saWJyYXJ5L3NzbF90bHMuYy5wYXRjaGVkCisKKyQoTUJFRFRMU19TUkNESVIpL2xpYnJhcnkvc3NsX3Rscy5jLnBhdGNoZWQ6ICQoTUJFRFRMU19BQlNfU1JDRElSKS9wYXRjaC8wMDAxLUZpeC1jb21taXNzaW9uaW5nLXByb2JsZW0td2l0aC1yZXRyYW5zbWlzc2lvbnMucGF0Y2gKKwljaG1vZCB1K3cgJChNQkVEVExTX0FCU19TUkNESVIpL3JlcG8vbGlicmFyeS8KKwljaG1vZCB1K3cgJChNQkVEVExTX0FCU19TUkNESVIpL3JlcG8vbGlicmFyeS9zc2xfdGxzLmMKKwlpZiBbIC1lICRAIF07IHRoZW4gcGF0Y2ggLVIgJChNQkVEVExTX0FCU19TUkNESVIpL3JlcG8vbGlicmFyeS9zc2xfdGxzLmMgJEA7IGZpCisJcGF0Y2ggJChNQkVEVExTX0FCU19TUkNESVIpL3JlcG8vbGlicmFyeS9zc2xfdGxzLmMgJDwKKwljcCAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcGF0Y2gvMDAwMS1GaXgtY29tbWlzc2lvbmluZy1wcm9ibGVtLXdpdGgtcmV0cmFuc21pc3Npb25zLnBhdGNoICRACisKK3JlcG8vbGlicmFyeS9saWJtYmVkY3J5cHRvX2Etc3NsX3Nydi4kKE9CSkVYVCk6ICQoTUJFRFRMU19TUkNESVIpL2xpYnJhcnkvc3NsX3Nydi5jLnBhdGNoZWQKKworJChNQkVEVExTX1NSQ0RJUikvbGlicmFyeS9zc2xfc3J2LmMucGF0Y2hlZDogJChNQkVEVExTX0FCU19TUkNESVIpL3BhdGNoLzAwMDItRml4LXdhcm5pbmctZGVhZC1zdG9yZS5wYXRjaAorCWNobW9kIHUrdyAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcmVwby9saWJyYXJ5LworCWNobW9kIHUrdyAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcmVwby9saWJyYXJ5L3NzbF9zcnYuYworCWlmIFsgLWUgJEAgXTsgdGhlbiBwYXRjaCAtUiAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcmVwby9saWJyYXJ5L3NzbF9zcnYuYyAkQDsgZmkKKwlwYXRjaCAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcmVwby9saWJyYXJ5L3NzbF9zcnYuYyAkPAorCWNwICQoTUJFRFRMU19BQlNfU1JDRElSKS9wYXRjaC8wMDAyLUZpeC13YXJuaW5nLWRlYWQtc3RvcmUucGF0Y2ggJEAKKworYWxsLWxvY2FsOiBsaWJtYmVkY3J5cHRvLmEKKwlpZiBbIC1lICQoTUJFRFRMU19TUkNESVIpL2xpYnJhcnkvc3NsX3Rscy5jLnBhdGNoZWQgXTsgdGhlbiBwYXRjaCAtUiAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcmVwby9saWJyYXJ5L3NzbF90bHMuYyAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcGF0Y2gvMDAwMS1GaXgtY29tbWlzc2lvbmluZy1wcm9ibGVtLXdpdGgtcmV0cmFuc21pc3Npb25zLnBhdGNoOyBybSAtZiAkKE1CRURUTFNfU1JDRElSKS9saWJyYXJ5L3NzbF90bHMuYy5wYXRjaGVkOyBmaQorCWlmIFsgLWUgJChNQkVEVExTX1NSQ0RJUikvbGlicmFyeS9zc2xfc3J2LmMucGF0Y2hlZCBdOyB0aGVuIHBhdGNoIC1SICQoTUJFRFRMU19BQlNfU1JDRElSKS9yZXBvL2xpYnJhcnkvc3NsX3Nydi5jICQoTUJFRFRMU19BQlNfU1JDRElSKS9wYXRjaC8wMDAyLUZpeC13YXJuaW5nLWRlYWQtc3RvcmUucGF0Y2g7IHJtIC1mICQoTUJFRFRMU19TUkNESVIpL2xpYnJhcnkvc3NsX3Nydi5jLnBhdGNoZWQ7IGZpCisKK2NsZWFuLWxvY2FsOgorCWlmIFsgLWUgJChNQkVEVExTX1NSQ0RJUikvbGlicmFyeS9zc2xfdGxzLmMucGF0Y2hlZCBdOyB0aGVuIHBhdGNoIC1SICQoTUJFRFRMU19BQlNfU1JDRElSKS9yZXBvL2xpYnJhcnkvc3NsX3Rscy5jICQoTUJFRFRMU19BQlNfU1JDRElSKS9wYXRjaC8wMDAxLUZpeC1jb21taXNzaW9uaW5nLXByb2JsZW0td2l0aC1yZXRyYW5zbWlzc2lvbnMucGF0Y2g7IHJtIC1mICQoTUJFRFRMU19TUkNESVIpL2xpYnJhcnkvc3NsX3Rscy5jLnBhdGNoZWQ7IGZpCisJaWYgWyAtZSAkKE1CRURUTFNfU1JDRElSKS9saWJyYXJ5L3NzbF9zcnYuYy5wYXRjaGVkIF07IHRoZW4gcGF0Y2ggLVIgJChNQkVEVExTX0FCU19TUkNESVIpL3JlcG8vbGlicmFyeS9zc2xfc3J2LmMgJChNQkVEVExTX0FCU19TUkNESVIpL3BhdGNoLzAwMDItRml4LXdhcm5pbmctZGVhZC1zdG9yZS5wYXRjaDsgcm0gLWYgJChNQkVEVExTX1NSQ0RJUikvbGlicmFyeS9zc2xfc3J2LmMucGF0Y2hlZDsgZmkKKworZW5kaWYgICMgT1BFTlRIUkVBRF9FTkFCTEVfRFRMUworCitpZiBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCitEYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAtCitDTEVBTkZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKHNoZWxsIGZpbmQgJCh0b3BfYnVpbGRkaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMgJChEYXNoKW5hbWUgIiouZ2NkYSIgJChEYXNoKW8gJChEYXNoKW5hbWUgIiouZ2NubyIpCitlbmRpZiAjIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL1JFQURNRS5tZCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YmRlMzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL1JFQURNRS5tZApAQCAtMCwwICsxLDI0IEBACisjIG1iZWQgVExTCisKKyMjIFVSTAorCitodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkdGxzL3JlbGVhc2VzL3RhZy9tYmVkdGxzLTIuNC4xCisKKyMjIFZlcnNpb24KKworMi40LjEKKworIyMgTGljZW5zZQorCitBcGFjaGUgMi4wCisKKyMjIExpY2Vuc2UgRmlsZQorCitbTElDRU5TRV0ocmVwby9MSUNFTlNFKQorCisjIyBEZXNjcmlwdGlvbgorCittYmVkIFRMUyAoZm9ybWVybHkga25vd24gYXMgUG9sYXJTU0wpIG1ha2VzIGl0IHRyaXZpYWxseSBlYXN5IGZvcgorZGV2ZWxvcGVycyB0byBpbmNsdWRlIGNyeXB0b2dyYXBoaWMgYW5kIFNTTC9UTFMgY2FwYWJpbGl0aWVzIGluIHRoZWlyCisoZW1iZWRkZWQpIHByb2R1Y3RzLCBmYWNpbGl0YXRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IHdpdGggYSBtaW5pbWFsCitjb2RpbmcgZm9vdHByaW50LgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9oYXJkd2FyZV9lbnRyb3B5LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL2hhcmR3YXJlX2VudHJvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDNmMmNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9oYXJkd2FyZV9lbnRyb3B5LmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICAgIENvcHlyaWdodCAyMDE2IFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRvIHVzZSBoYXJkd2FyZSBlbnRyb3B5IHNvdXJjZS4KKyAqICAgdW5jb21tZW50IE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQgaW4gbWJlZHRscy9tYmVkdGxzX2NvbmZpZy5oIHRvIHVzZSB0aGlzLgorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQvdHlwZXMuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oIgorCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisKK2ludCBtYmVkdGxzX2hhcmR3YXJlX3BvbGwodm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4pCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgICh2b2lkKWRhdGE7CisKKyAgICBlcnJvciA9IG90UGxhdFJhbmRvbUdldFRydWUoKHVpbnQ4X3QgKilvdXRwdXQsICh1aW50MTZfdClsZW4pOworCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICByZXR1cm4gTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEOworICAgIH0KKworICAgIGlmIChvbGVuICE9IE5VTEwpCisgICAgeworICAgICAgICAqb2xlbiA9IGxlbjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvbWJlZHRscy1jb25maWcuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvbWJlZHRscy1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjk2OTNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9tYmVkdGxzLWNvbmZpZy5oCkBAIC0wLDAgKzEsMjYzMyBAQAorLyoqCisgKiBcZmlsZSBjb25maWcuaAorICoKKyAqIFxicmllZiBDb25maWd1cmF0aW9uIG9wdGlvbnMgKHNldCBvZiBkZWZpbmVzKQorICoKKyAqICBUaGlzIHNldCBvZiBjb21waWxlLXRpbWUgb3B0aW9ucyBtYXkgYmUgdXNlZCB0byBlbmFibGUKKyAqICBvciBkaXNhYmxlIGZlYXR1cmVzIHNlbGVjdGl2ZWx5LCBhbmQgcmVkdWNlIHRoZSBnbG9iYWwKKyAqICBtZW1vcnkgZm9vdHByaW50LgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWZuZGVmIE1CRURUTFNfQ09ORklHX0gKKyNkZWZpbmUgTUJFRFRMU19DT05GSUdfSAorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWVtb3J5Lmg+CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorLy8gVGVtcG9yYXJ5LCB1bnRpbCB0aGUgd2FybmluZ3MgY2FuIGdldCBmaXhlZCBpbiB0aGUgbWJlZCBsaWJyYXJ5CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQyKSAgLy8gY29udmVyc2lvbiBmcm9tICcqJyB0byAnKicsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NCkgIC8vIGNvbnZlcnNpb24gZnJvbSAnKicgdG8gJyonLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGEKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNjcpICAvLyBjb252ZXJzaW9uIGZyb20gJyonIHRvICcqJywgcG9zc2libGUgbG9zcyBvZiBkYXRhCisjZW5kaWYKKworI2lmIGRlZmluZWQoX0tFUk5FTF9NT0RFKQorI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0VYSVRfTUFDUk8KK19faW5saW5lIGludCB3aW5kb3dzX2tlcm5lbF9zbnByaW50ZihjaGFyICogcywgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKiBmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3A7CisgICAgdmFfc3RhcnQoIGFyZ3AsIGZvcm1hdCApOworICAgIGludCByZXQgPSBfdnNucHJpbnRmX3MoIHMsIG4sIF9UUlVOQ0FURSwgZm9ybWF0LCBhcmdwICk7CisgICAgdmFfZW5kKCBhcmdwICk7CisgICAgcmV0dXJuIHJldDsKK30KKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYgICAgd2luZG93c19rZXJuZWxfc25wcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFKSAmJiAhZGVmaW5lZChfS0VSTkVMX01PREUpCisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAxCisjZW5kaWYKKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBTeXN0ZW0gc3VwcG9ydAorICoKKyAqIFRoaXMgc2VjdGlvbiBzZXRzIHN5c3RlbSBzcGVjaWZpYyBzZXR0aW5ncy4KKyAqIFx7CisgKi8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRV9BU00KKyAqCisgKiBUaGUgY29tcGlsZXIgaGFzIHN1cHBvcnQgZm9yIGFzbSgpLgorICoKKyAqIFJlcXVpcmVzIHN1cHBvcnQgZm9yIGFzbSgpIGluIGNvbXBpbGVyLgorICoKKyAqIFVzZWQgaW46CisgKiAgICAgIGxpYnJhcnkvdGltaW5nLmMKKyAqICAgICAgbGlicmFyeS9wYWRsb2NrLmMKKyAqICAgICAgaW5jbHVkZS9tYmVkdGxzL2JuX211bC5oCisgKgorICogQ29tbWVudCB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgYXNzZW1ibHkgY29kZS4KKyAqLworI2RlZmluZSBNQkVEVExTX0hBVkVfQVNNCisKKy8qKgorICogXGRlZiBNQkVEVExTX0hBVkVfU1NFMgorICoKKyAqIENQVSBzdXBwb3J0cyBTU0UyIGluc3RydWN0aW9uIHNldC4KKyAqCisgKiBVbmNvbW1lbnQgaWYgdGhlIENQVSBzdXBwb3J0cyBTU0UyIChJQS0zMiBzcGVjaWZpYykuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hBVkVfU1NFMgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19IQVZFX1RJTUUKKyAqCisgKiBTeXN0ZW0gaGFzIHRpbWUuaCBhbmQgdGltZSgpLgorICogVGhlIHRpbWUgZG9lcyBub3QgbmVlZCB0byBiZSBjb3JyZWN0LCBvbmx5IHRpbWUgZGlmZmVyZW5jZXMgYXJlIHVzZWQsCisgKiBieSBjb250cmFzdCB3aXRoIE1CRURUTFNfSEFWRV9USU1FX0RBVEUKKyAqCisgKiBEZWZpbmluZyBNQkVEVExTX0hBVkVfVElNRSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgTUJFRFRMU19QTEFURk9STV9USU1FX0FMVCwKKyAqIE1CRURUTFNfUExBVEZPUk1fVElNRV9NQUNSTywgTUJFRFRMU19QTEFURk9STV9USU1FX1RZUEVfTUFDUk8gYW5kCisgKiBNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FLgorICoKKyAqIENvbW1lbnQgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCB0aW1lIGZ1bmN0aW9ucworICovCisvLyNkZWZpbmUgTUJFRFRMU19IQVZFX1RJTUUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRV9USU1FX0RBVEUKKyAqCisgKiBTeXN0ZW0gaGFzIHRpbWUuaCBhbmQgdGltZSgpLCBnbXRpbWUoKSBhbmQgdGhlIGNsb2NrIGlzIGNvcnJlY3QuCisgKiBUaGUgdGltZSBuZWVkcyB0byBiZSBjb3JyZWN0IChub3QgbmVjZXNhcmlseSB2ZXJ5IGFjY3VyYXRlLCBidXQgYXQgbGVhc3QKKyAqIHRoZSBkYXRlIHNob3VsZCBiZSBjb3JyZWN0KS4gVGhpcyBpcyB1c2VkIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgcGVyaW9kIG9mCisgKiBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisgKgorICogQ29tbWVudCBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgY29ycmVjdCBjbG9jay4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfSEFWRV9USU1FX0RBVEUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZCisgKgorICogRW5hYmxlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBsYXllci4KKyAqCisgKiBCeSBkZWZhdWx0IG1iZWQgVExTIHVzZXMgdGhlIHN5c3RlbS1wcm92aWRlZCBjYWxsb2MoKSBhbmQgZnJlZSgpLgorICogVGhpcyBhbGxvd3MgZGlmZmVyZW50IGFsbG9jYXRvcnMgKHNlbGYtaW1wbGVtZW50ZWQgb3IgcHJvdmlkZWQpIHRvIGJlCisgKiBwcm92aWRlZCB0byB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIuCisgKgorICogRW5hYmxpbmcgTUJFRFRMU19QTEFURk9STV9NRU1PUlkgd2l0aG91dCB0aGUKKyAqIE1CRURUTFNfUExBVEZPUk1fe0ZSRUUsQ0FMTE9DfV9NQUNST3Mgd2lsbCBwcm92aWRlCisgKiAibWJlZHRsc19wbGF0Zm9ybV9zZXRfY2FsbG9jX2ZyZWUoKSIgYWxsb3dpbmcgeW91IHRvIHNldCBhbiBhbHRlcm5hdGl2ZSBjYWxsb2MoKSBhbmQKKyAqIGZyZWUoKSBmdW5jdGlvbiBwb2ludGVyIGF0IHJ1bnRpbWUuCisgKgorICogRW5hYmxpbmcgTUJFRFRMU19QTEFURk9STV9NRU1PUlkgYW5kIHNwZWNpZnlpbmcKKyAqIE1CRURUTFNfUExBVEZPUk1fe0NBTExPQyxGUkVFfV9NQUNST3Mgd2lsbCBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0aGUKKyAqIGFsdGVybmF0ZSBmdW5jdGlvbiBhdCBjb21waWxlIHRpbWUuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUExBVEZPUk1fQworICoKKyAqIEVuYWJsZSB0aGlzIGxheWVyIHRvIGFsbG93IHVzZSBvZiBhbHRlcm5hdGl2ZSBtZW1vcnkgYWxsb2NhdG9ycy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX01FTU9SWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TCisgKgorICogRG8gbm90IGFzc2lnbiBzdGFuZGFyZCBmdW5jdGlvbnMgaW4gdGhlIHBsYXRmb3JtIGxheWVyIChlLmcuIGNhbGxvYygpIHRvCisgKiBNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MgYW5kIHByaW50ZigpIHRvIE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URikKKyAqCisgKiBUaGlzIG1ha2VzIHN1cmUgdGhlcmUgYXJlIG5vIGxpbmtpbmcgZXJyb3JzIG9uIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0CisgKiB0aGVzZSBmdW5jdGlvbnMuIFlvdSB3aWxsIEhBVkUgdG8gcHJvdmlkZSBhbHRlcm5hdGl2ZXMsIGVpdGhlciBhdCBydW50aW1lCisgKiB2aWEgdGhlIHBsYXRmb3JtX3NldF94eHgoKSBmdW5jdGlvbnMgb3IgYXQgY29tcGlsZSB0aW1lIGJ5IHNldHRpbmcKKyAqIHRoZSBNQkVEVExTX1BMQVRGT1JNX1NURF9YWFggZGVmaW5lcywgb3IgZW5hYmxpbmcgYQorICogTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8uCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUExBVEZPUk1fQworICoKKyAqIFVuY29tbWVudCB0byBwcmV2ZW50IGRlZmF1bHQgYXNzaWdubWVudCBvZiBzdGFuZGFyZCBmdW5jdGlvbnMgaW4gdGhlCisgKiBwbGF0Zm9ybSBsYXllci4KKyAqLworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQKKyAqCisgKiBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQ6IFVuY29tbWVudCBhIG1hY3JvIHRvIGxldCBtYmVkIFRMUyBzdXBwb3J0IHRoZQorICogZnVuY3Rpb24gaW4gdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGxheWVyLgorICoKKyAqIEV4YW1wbGU6IEluIGNhc2UgeW91IHVuY29tbWVudCBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQsIG1iZWQgVExTIHdpbGwKKyAqIHByb3ZpZGUgYSBmdW5jdGlvbiAibWJlZHRsc19wbGF0Zm9ybV9zZXRfcHJpbnRmKCkiIHRoYXQgYWxsb3dzIHlvdSB0byBzZXQgYW4KKyAqIGFsdGVybmF0aXZlIHByaW50ZiBmdW5jdGlvbiBwb2ludGVyLgorICoKKyAqIEFsbCB0aGVzZSBkZWZpbmUgcmVxdWlyZSBNQkVEVExTX1BMQVRGT1JNX0MgdG8gYmUgZGVmaW5lZCEKKyAqCisgKiBcbm90ZSBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCBpcyByZXF1aXJlZCBvbiBXaW5kb3dzOworICogaXQgd2lsbCBiZSBlbmFibGVkIGF1dG9tYXRpY2FsbHkgYnkgY2hlY2tfY29uZmlnLmgKKyAqCisgKiBcd2FybmluZyBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQgY2Fubm90IGJlIGRlZmluZWQgYXQgdGhlIHNhbWUgdGltZSBhcworICogTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8hCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQgcmVxdWlyZXMgTUJFRFRMU19IQVZFX1RJTUUKKyAqCisgKiBVbmNvbW1lbnQgYSBtYWNybyB0byBlbmFibGUgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9mIHNwZWNpZmljIGJhc2UKKyAqIHBsYXRmb3JtIGZ1bmN0aW9uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9USU1FX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HCisgKgorICogTWFyayBkZXByZWNhdGVkIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZXkgZ2VuZXJhdGUgYSB3YXJuaW5nIGlmIHVzZWQuCisgKiBGdW5jdGlvbnMgZGVwcmVjYXRlZCBpbiBvbmUgdmVyc2lvbiB3aWxsIHVzdWFsbHkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dAorICogdmVyc2lvbi4gWW91IGNhbiBlbmFibGUgdGhpcyB0byBoZWxwIHlvdSBwcmVwYXJlIHRoZSB0cmFuc2l0aW9uIHRvIGEgbmV3CisgKiBtYWpvciB2ZXJzaW9uIGJ5IG1ha2luZyBzdXJlIHlvdXIgY29kZSBpcyBub3QgdXNpbmcgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgb25seSB3b3JrcyB3aXRoIEdDQyBhbmQgQ2xhbmcuIFdpdGggb3RoZXIgY29tcGlsZXJzLCB5b3UgbWF5IHdhbnQgdG8KKyAqIHVzZSBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRAorICoKKyAqIFVuY29tbWVudCB0byBnZXQgd2FybmluZ3Mgb24gdXNpbmcgZGVwcmVjYXRlZCBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKKyAqCisgKiBSZW1vdmUgZGVwcmVjYXRlZCBmdW5jdGlvbnMgc28gdGhhdCB0aGV5IGdlbmVyYXRlIGFuIGVycm9yIGlmIHVzZWQuCisgKiBGdW5jdGlvbnMgZGVwcmVjYXRlZCBpbiBvbmUgdmVyc2lvbiB3aWxsIHVzdWFsbHkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dAorICogdmVyc2lvbi4gWW91IGNhbiBlbmFibGUgdGhpcyB0byBoZWxwIHlvdSBwcmVwYXJlIHRoZSB0cmFuc2l0aW9uIHRvIGEgbmV3CisgKiBtYWpvciB2ZXJzaW9uIGJ5IG1ha2luZyBzdXJlIHlvdXIgY29kZSBpcyBub3QgdXNpbmcgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqIFVuY29tbWVudCB0byBnZXQgZXJyb3JzIG9uIHVzaW5nIGRlcHJlY2F0ZWQgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKKworLyogXH0gbmFtZSBTRUNUSU9OOiBTeXN0ZW0gc3VwcG9ydCAqLworCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IG1iZWQgVExTIGZlYXR1cmUgc3VwcG9ydAorICoKKyAqIFRoaXMgc2VjdGlvbiBzZXRzIHN1cHBvcnQgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIG9yIGFyZSBub3QgbmVlZGVkCisgKiB3aXRoaW4gdGhlIG1vZHVsZXMgdGhhdCBhcmUgZW5hYmxlZC4KKyAqIFx7CisgKi8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfVElNSU5HX0FMVAorICoKKyAqIFVuY29tbWVudCB0byBwcm92aWRlIHlvdXIgb3duIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCksCisgKiBtYmVkdGxzX3RpbWluZ19nZXRfdGltZXIoKSwgbWJlZHRsc19zZXRfYWxhcm0oKSwgbWJlZHRsc19zZXQvZ2V0X2RlbGF5KCkKKyAqCisgKiBPbmx5IHdvcmtzIGlmIHlvdSBoYXZlIE1CRURUTFNfVElNSU5HX0MgZW5hYmxlZC4KKyAqCisgKiBZb3Ugd2lsbCBuZWVkIHRvIHByb3ZpZGUgYSBoZWFkZXIgInRpbWluZ19hbHQuaCIgYW5kIGFuIGltcGxlbWVudGF0aW9uIGF0CisgKiBjb21waWxlIHRpbWUuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1RJTUlOR19BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTX0FMVAorICoKKyAqIE1CRURUTFNfX01PRFVMRV9OQU1FX19BTFQ6IFVuY29tbWVudCBhIG1hY3JvIHRvIGxldCBtYmVkIFRMUyB1c2UgeW91cgorICogYWx0ZXJuYXRlIGNvcmUgaW1wbGVtZW50YXRpb24gb2YgYSBzeW1tZXRyaWMgY3J5cHRvIG9yIGhhc2ggbW9kdWxlIChlLmcuCisgKiBwbGF0Zm9ybSBzcGVjaWZpYyBhc3NlbWJseSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb25zKS4gS2VlcCBpbiBtaW5kIHRoYXQKKyAqIHRoZSBmdW5jdGlvbiBwcm90b3R5cGVzIHNob3VsZCByZW1haW4gdGhlIHNhbWUuCisgKgorICogVGhpcyByZXBsYWNlcyB0aGUgd2hvbGUgbW9kdWxlLiBJZiB5b3Ugb25seSB3YW50IHRvIHJlcGxhY2Ugb25lIG9mIHRoZQorICogZnVuY3Rpb25zLCB1c2Ugb25lIG9mIHRoZSBNQkVEVExTX19GVU5DVElPTl9OQU1FX19BTFQgZmxhZ3MuCisgKgorICogRXhhbXBsZTogSW4gY2FzZSB5b3UgdW5jb21tZW50IE1CRURUTFNfQUVTX0FMVCwgbWJlZCBUTFMgd2lsbCBubyBsb25nZXIKKyAqIHByb3ZpZGUgdGhlICJzdHJ1Y3QgbWJlZHRsc19hZXNfY29udGV4dCIgZGVmaW5pdGlvbiBhbmQgb21pdCB0aGUgYmFzZSBmdW5jdGlvbgorICogZGVjbGFyYXRpb25zIGFuZCBpbXBsZW1lbnRhdGlvbnMuICJhZXNfYWx0LmgiIHdpbGwgYmUgaW5jbHVkZWQgZnJvbQorICogImFlcy5oIiB0byBpbmNsdWRlIHRoZSBuZXcgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCisgKgorICogVW5jb21tZW50IGEgbWFjcm8gdG8gZW5hYmxlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZworICogbW9kdWxlLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19BRVNfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19BUkM0X0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQkxPV0ZJU0hfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19DQU1FTExJQV9BTFQKKy8vI2RlZmluZSBNQkVEVExTX0RFU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX1hURUFfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19NRDJfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19NRDRfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19NRDVfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19SSVBFTUQxNjBfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19TSEExX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBMjU2X0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBNTEyX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRDJfUFJPQ0VTU19BTFQKKyAqCisgKiBNQkVEVExTX19GVU5DVElPTl9OQU1FX19BTFQ6IFVuY29tbWVudCBhIG1hY3JvIHRvIGxldCBtYmVkIFRMUyB1c2UgeW91CisgKiBhbHRlcm5hdGUgY29yZSBpbXBsZW1lbnRhdGlvbiBvZiBzeW1tZXRyaWMgY3J5cHRvIG9yIGhhc2ggZnVuY3Rpb24uIEtlZXAgaW4KKyAqIG1pbmQgdGhhdCBmdW5jdGlvbiBwcm90b3R5cGVzIHNob3VsZCByZW1haW4gdGhlIHNhbWUuCisgKgorICogVGhpcyByZXBsYWNlcyBvbmx5IG9uZSBmdW5jdGlvbi4gVGhlIGhlYWRlciBmaWxlIGZyb20gbWJlZCBUTFMgaXMgc3RpbGwKKyAqIHVzZWQsIGluIGNvbnRyYXN0IHRvIHRoZSBNQkVEVExTX19NT0RVTEVfTkFNRV9fQUxUIGZsYWdzLgorICoKKyAqIEV4YW1wbGU6IEluIGNhc2UgeW91IHVuY29tbWVudCBNQkVEVExTX1NIQTI1Nl9QUk9DRVNTX0FMVCwgbWJlZCBUTFMgd2lsbAorICogbm8gbG9uZ2VyIHByb3ZpZGUgdGhlIG1iZWR0bHNfc2hhMV9wcm9jZXNzKCkgZnVuY3Rpb24sIGJ1dCBpdCB3aWxsIHN0aWxsIHByb3ZpZGUKKyAqIHRoZSBvdGhlciBmdW5jdGlvbiAodXNpbmcgeW91ciBtYmVkdGxzX3NoYTFfcHJvY2VzcygpIGZ1bmN0aW9uKSBhbmQgdGhlIGRlZmluaXRpb24KKyAqIG9mIG1iZWR0bHNfc2hhMV9jb250ZXh0LCBzbyB5b3VyIGltcGxlbWVudGF0aW9uIG9mIG1iZWR0bHNfc2hhMV9wcm9jZXNzIG11c3QgYmUgY29tcGF0aWJsZQorICogd2l0aCB0aGlzIGRlZmluaXRpb24uCisgKgorICogTm90ZTogaWYgeW91IHVzZSB0aGUgQUVTX3h4eF9BTFQgbWFjcm9zLCB0aGVuIGlzIGlzIHJlY29tbWVuZGVkIHRvIGFsc28gc2V0CisgKiBNQkVEVExTX0FFU19ST01fVEFCTEVTIGluIG9yZGVyIHRvIGhlbHAgdGhlIGxpbmtlciBnYXJiYWdlLWNvbGxlY3QgdGhlIEFFUworICogdGFibGVzLgorICoKKyAqIFVuY29tbWVudCBhIG1hY3JvIHRvIGVuYWJsZSBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGZ1bmN0aW9uLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19NRDJfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX01ENF9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQ1X1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19SSVBFTUQxNjBfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX1NIQTFfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBNTEyX1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19ERVNfU0VUS0VZX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfREVTX0NSWVBUX0VDQl9BTFQKKy8vI2RlZmluZSBNQkVEVExTX0RFUzNfQ1JZUFRfRUNCX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQUVTX1NFVEtFWV9FTkNfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19BRVNfU0VUS0VZX0RFQ19BTFQKKy8vI2RlZmluZSBNQkVEVExTX0FFU19FTkNSWVBUX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQUVTX0RFQ1JZUFRfQUxUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZCisgKgorICogRW5hYmxlcyB0ZXN0aW5nIGFuZCB1c2Ugb2YgbWJlZCBUTFMgd2l0aG91dCBhbnkgY29uZmlndXJlZCBlbnRyb3B5IHNvdXJjZXMuCisgKiBUaGlzIHBlcm1pdHMgdXNlIG9mIHRoZSBsaWJyYXJ5IG9uIHBsYXRmb3JtcyBiZWZvcmUgYW4gZW50cm9weSBzb3VyY2UgaGFzCisgKiBiZWVuIGludGVncmF0ZWQgKHNlZSBmb3IgZXhhbXBsZSB0aGUgTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVCBvciB0aGUKKyAqIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEIHN3aXRjaGVzKS4KKyAqCisgKiBXQVJOSU5HISBUaGlzIHN3aXRjaCBNVVNUIGJlIGRpc2FibGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBhbmQgaXMgc3VpdGFibGUKKyAqIG9ubHkgZm9yIGRldmVsb3BtZW50LgorICogRW5hYmxpbmcgdGhlIHN3aXRjaCBuZWdhdGVzIGFueSBzZWN1cml0eSBwcm92aWRlZCBieSB0aGUgbGlicmFyeS4KKyAqCisgKiBSZXF1aXJlcyBNQkVEVExTX0VOVFJPUFlfQywgTUJFRFRMU19OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUworICoKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBsZXQgbWJlZCBUTFMgdXNlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIGEKKyAqIGhhcmR3YXJlIGVudHJvcHkgY29sbGVjdG9yLgorICoKKyAqIFlvdXIgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgXGMgbWJlZHRsc19oYXJkd2FyZV9wb2xsKCksIGhhdmUgdGhlIHNhbWUKKyAqIHByb3RvdHlwZSBhcyBkZWNsYXJlZCBpbiBlbnRyb3B5X3BvbGwuaCwgYW5kIGFjY2VwdCBOVUxMIGFzIGZpcnN0IGFyZ3VtZW50LgorICoKKyAqIFVuY29tbWVudCB0byB1c2UgeW91ciBvd24gaGFyZHdhcmUgZW50cm9weSBjb2xsZWN0b3IuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworICoKKyAqIFN0b3JlIHRoZSBBRVMgdGFibGVzIGluIFJPTS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBzdG9yZSB0aGUgQUVTIHRhYmxlcyBpbiBST00uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkKKyAqCisgKiBVc2UgbGVzcyBST00gZm9yIHRoZSBDYW1lbGxpYSBpbXBsZW1lbnRhdGlvbiAoc2F2ZXMgYWJvdXQgNzY4IGJ5dGVzKS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byB1c2UgbGVzcyBtZW1vcnkgZm9yIENhbWVsbGlhLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisgKgorICogRW5hYmxlIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlIChDQkMpIGZvciBzeW1tZXRyaWMgY2lwaGVycy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorICoKKyAqIEVuYWJsZSBDaXBoZXIgRmVlZGJhY2sgbW9kZSAoQ0ZCKSBmb3Igc3ltbWV0cmljIGNpcGhlcnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKKyAqCisgKiBFbmFibGUgQ291bnRlciBCbG9jayBDaXBoZXIgbW9kZSAoQ1RSKSBmb3Igc3ltbWV0cmljIGNpcGhlcnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKKyAqCisgKiBFbmFibGUgTlVMTCBjaXBoZXIuCisgKiBXYXJuaW5nOiBPbmx5IGRvIHNvIHdoZW4geW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBUaGlzIGFsbG93cyBmb3IKKyAqIGVuY3J5cHRpb24gb3IgY2hhbm5lbHMgd2l0aG91dCBhbnkgc2VjdXJpdHkhCisgKgorICogUmVxdWlyZXMgTUJFRFRMU19FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMgYXMgd2VsbCB0byBlbmFibGUKKyAqIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9OVUxMX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfTUQ1CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZW5hYmxlIHRoZSBOVUxMIGNpcGhlciBhbmQgY2lwaGVyc3VpdGVzCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworICoKKyAqIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWFhYOiBVbmNvbW1lbnQgb3IgY29tbWVudCBtYWNyb3MgdG8gYWRkIHN1cHBvcnQgZm9yCisgKiBzcGVjaWZpYyBwYWRkaW5nIG1vZGVzIGluIHRoZSBjaXBoZXIgbGF5ZXIgd2l0aCBjaXBoZXIgbW9kZXMgdGhhdCBzdXBwb3J0CisgKiBwYWRkaW5nIChlLmcuIENCQykKKyAqCisgKiBJZiB5b3UgZGlzYWJsZSBhbGwgcGFkZGluZyBtb2Rlcywgb25seSBmdWxsIGJsb2NrcyBjYW4gYmUgdXNlZCB3aXRoIENCQy4KKyAqCisgKiBFbmFibGUgcGFkZGluZyBtb2RlcyBpbiB0aGUgY2lwaGVyIGxheWVyLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTCisgKgorICogRW5hYmxlIHdlYWsgY2lwaGVyc3VpdGVzIGluIFNTTCAvIFRMUy4KKyAqIFdhcm5pbmc6IE9ubHkgZG8gc28gd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuIFRoaXMgYWxsb3dzIGZvcgorICogY2hhbm5lbHMgd2l0aCB2aXJ0dWFsbHkgbm8gc2VjdXJpdHkgYXQgYWxsIQorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlczoKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfREVTX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0RFU19DQkNfU0hBCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZW5hYmxlIHdlYWsgY2lwaGVyc3VpdGVzCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMKKyAqCisgKiBSZW1vdmUgUkM0IGNpcGhlcnN1aXRlcyBieSBkZWZhdWx0IGluIFNTTCAvIFRMUy4KKyAqIFRoaXMgZmxhZyByZW1vdmVzIHRoZSBjaXBoZXJzdWl0ZXMgYmFzZWQgb24gUkM0IGZyb20gdGhlIGRlZmF1bHQgbGlzdCBhcworICogcmV0dXJuZWQgYnkgbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoKS4gSG93ZXZlciwgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8KKyAqIGVuYWJsZSAoc29tZSBvZikgdGhlbSB3aXRoIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCkgYnkgaW5jbHVkaW5nIHRoZW0KKyAqIGV4cGxpY2l0bHkuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcmVtb3ZlIFJDNCBjaXBoZXJzdWl0ZXMgYnkgZGVmYXVsdC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorICoKKyAqIE1CRURUTFNfRUNQX1hYWFhfRU5BQkxFRDogRW5hYmxlcyBzcGVjaWZpYyBjdXJ2ZXMgd2l0aGluIHRoZSBFbGxpcHRpYyBDdXJ2ZQorICogbW9kdWxlLiAgQnkgZGVmYXVsdCBhbGwgc3VwcG9ydGVkIGN1cnZlcyBhcmUgZW5hYmxlZC4KKyAqCisgKiBDb21tZW50IG1hY3JvcyB0byBkaXNhYmxlIHRoZSBjdXJ2ZSBhbmQgZnVuY3Rpb25zIGZvciBpdAorICovCisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVECisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNQX05JU1RfT1BUSU0KKyAqCisgKiBFbmFibGUgc3BlY2lmaWMgJ21vZHVsbyBwJyByb3V0aW5lcyBmb3IgZWFjaCBOSVNUIHByaW1lLgorICogRGVwZW5kaW5nIG9uIHRoZSBwcmltZSBhbmQgYXJjaGl0ZWN0dXJlLCBtYWtlcyBvcGVyYXRpb25zIDQgdG8gOCB0aW1lcworICogZmFzdGVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIGN1cnZlLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIE5JU1QgY3VydmVzIG9wdGltaXNhdGlvbi4KKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9OSVNUX09QVElNCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKKyAqCisgKiBFbmFibGUgZGV0ZXJtaW5pc3RpYyBFQ0RTQSAoUkZDIDY5NzkpLgorICogU3RhbmRhcmQgRUNEU0EgaXMgImZyYWdpbGUiIGluIHRoZSBzZW5zZSB0aGF0IGxhY2sgb2YgZW50cm9weSB3aGVuIHNpZ25pbmcKKyAqIG1heSByZXN1bHQgaW4gYSBjb21wcm9taXNlIG9mIHRoZSBsb25nLXRlcm0gc2lnbmluZyBrZXkuIFRoaXMgaXMgYXZvaWRlZCBieQorICogdGhlIGRldGVybWluaXN0aWMgdmFyaWFudC4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19ITUFDX0RSQkdfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIGRldGVybWluaXN0aWMgRUNEU0EuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBQU0sgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIERIRS1QU0sgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0RITV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESEUtUFNLIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgUlNBLVBTSyBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUlNBX0MsIE1CRURUTFNfUEtDUzFfVjE1LAorICogICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIFJTQS1vbmx5IGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19SU0FfQywgTUJFRFRMU19QS0NTMV9WMTUsCisgKiAgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X01ENQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgREhFLVJTQSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfREhNX0MsIE1CRURUTFNfUlNBX0MsIE1CRURUTFNfUEtDUzFfVjE1LAorICogICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0RIRS1SU0EgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDREhfQywgTUJFRFRMU19SU0FfQywgTUJFRFRMU19QS0NTMV9WMTUsCisgKiAgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIEVDREhFLUVDRFNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MsIE1CRURUTFNfRUNEU0FfQywgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DLAorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESC1FQ0RTQSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNESF9DLCBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIEVDREgtUlNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MsIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNKUEFLRSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogXHdhcm5pbmcgVGhpcyBpcyBjdXJyZW50bHkgZXhwZXJpbWVudGFsLiBFQyBKLVBBS0Ugc3VwcG9ydCBpcyBiYXNlZCBvbiB0aGUKKyAqIFRocmVhZCB2MS4wLjAgc3BlY2lmaWNhdGlvbjsgaW5jb21wYXRpYmxlIGNoYW5nZXMgdG8gdGhlIHNwZWNpZmljYXRpb24KKyAqIG1pZ2h0IHN0aWxsIGhhcHBlbi4gRm9yIHRoaXMgcmVhc29uLCB0aGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNKUEFLRV9DCisgKiAgICAgICAgICAgTUJFRFRMU19TSEEyNTZfQworICogICAgICAgICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNKUEFLRV9XSVRIX0FFU18xMjhfQ0NNXzgKKyAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQKKyAqCisgKiBFbmhhbmNlIHN1cHBvcnQgZm9yIHJlYWRpbmcgRUMga2V5cyB1c2luZyB2YXJpYW50cyBvZiBTRUMxIG5vdCBhbGxvd2VkIGJ5CisgKiBSRkMgNTkxNSBhbmQgUkZDIDU0ODAuCisgKgorICogQ3VycmVudGx5IHRoaXMgbWVhbnMgcGFyc2luZyB0aGUgU3BlY2lmaWVkRUNEb21haW4gY2hvaWNlIG9mIEVDCisgKiBwYXJhbWV0ZXJzIChvbmx5IGtub3duIGdyb3VwcyBhcmUgc3VwcG9ydGVkLCBub3QgYXJiaXRyYXJ5IGRvbWFpbnMsIHRvCisgKiBhdm9pZCB2YWxpZGF0aW9uIGlzc3VlcykuCisgKgorICogRGlzYWJsZSBpZiB5b3Ugb25seSBuZWVkIHRvIHN1cHBvcnQgUkZDIDU5MTUgKyA1NDgwIGtleSBmb3JtYXRzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS19QQVJTRV9FQ19FWFRFTkRFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWQorICoKKyAqIEVuYWJsZSBhIGR1bW15IGVycm9yIGZ1bmN0aW9uIHRvIG1ha2UgdXNlIG9mIG1iZWR0bHNfc3RyZXJyb3IoKSBpbgorICogdGhpcmQgcGFydHkgbGlicmFyaWVzIGVhc2llciB3aGVuIE1CRURUTFNfRVJST1JfQyBpcyBkaXNhYmxlZAorICogKG5vIGVmZmVjdCB3aGVuIE1CRURUTFNfRVJST1JfQyBpcyBlbmFibGVkKS4KKyAqCisgKiBZb3UgY2FuIHNhZmVseSBkaXNhYmxlIHRoaXMgaWYgTUJFRFRMU19FUlJPUl9DIGlzIGVuYWJsZWQsIG9yIGlmIHlvdSdyZQorICogbm90IHVzaW5nIG1iZWR0bHNfc3RyZXJyb3IoKSBvciBlcnJvcl9zdHJlcnJvcigpIGluIHlvdXIgYXBwbGljYXRpb24uCisgKgorICogRGlzYWJsZSBpZiB5b3UgcnVuIGludG8gbmFtZSBjb25mbGljdHMgYW5kIHdhbnQgdG8gcmVhbGx5IHJlbW92ZSB0aGUKKyAqIG1iZWR0bHNfc3RyZXJyb3IoKQorICovCisvLyNkZWZpbmUgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19HRU5QUklNRQorICoKKyAqIEVuYWJsZSB0aGUgcHJpbWUtbnVtYmVyIGdlbmVyYXRpb24gY29kZS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CSUdOVU1fQworICovCisvLyNkZWZpbmUgTUJFRFRMU19HRU5QUklNRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19GU19JTworICoKKyAqIEVuYWJsZSBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlIGZpbGVzeXN0ZW0uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0ZTX0lPCisKKy8qKgorICogXGRlZiBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCisgKgorICogRG8gbm90IGFkZCBkZWZhdWx0IGVudHJvcHkgc291cmNlcy4gVGhlc2UgYXJlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYywKKyAqIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayBhbmQgSEFWRUdFIGJhc2VkIHBvbGwgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgaXMgdXNlZnVsIHRvIGhhdmUgbW9yZSBjb250cm9sIG92ZXIgdGhlIGFkZGVkIGVudHJvcHkgc291cmNlcyBpbiBhbgorICogYXBwbGljYXRpb24uCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcHJldmVudCBsb2FkaW5nIG9mIGRlZmF1bHQgZW50cm9weSBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCisKKy8qKgorICogXGRlZiBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkKKyAqCisgKiBEbyBub3QgdXNlIGJ1aWx0LWluIHBsYXRmb3JtIGVudHJvcHkgZnVuY3Rpb25zLgorICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0CisgKiBzdGFuZGFyZHMgbGlrZSB0aGUgL2Rldi91cmFuZG9tIG9yIFdpbmRvd3MgQ3J5cHRvQVBJLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgdGhlIGJ1aWx0LWluIHBsYXRmb3JtIGVudHJvcHkgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FTlRST1BZX0ZPUkNFX1NIQTI1NgorICoKKyAqIEZvcmNlIHRoZSBlbnRyb3B5IGFjY3VtdWxhdG9yIHRvIHVzZSBhIFNIQS0yNTYgYWNjdW11bGF0b3IgaW5zdGVhZCBvZiB0aGUKKyAqIGRlZmF1bHQgU0hBLTUxMiBiYXNlZCBvbmUgKGlmIGJvdGggYXJlIGF2YWlsYWJsZSkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU0hBMjU2X0MKKyAqCisgKiBPbiAzMi1iaXQgc3lzdGVtcyBTSEEtMjU2IGNhbiBiZSBtdWNoIGZhc3RlciB0aGFuIFNIQS01MTIuIFVzZSB0aGlzIG9wdGlvbgorICogaWYgeW91IGhhdmUgcGVyZm9ybWFuY2UgY29uY2VybnMuCisgKgorICogVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgaWYgYm90aCBNQkVEVExTX1NIQTI1Nl9DIGFuZAorICogTUJFRFRMU19TSEE1MTJfQyBhcmUgZGVmaW5lZC4gT3RoZXJ3aXNlIHRoZSBhdmFpbGFibGUgaGFzaCBtb2R1bGUgaXMgdXNlZC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9GT1JDRV9TSEEyNTYKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVECisgKgorICogRW5hYmxlIHRoZSBub24tdm9sYXRpbGUgKE5WKSBzZWVkIGZpbGUtYmFzZWQgZW50cm9weSBzb3VyY2UuCisgKiAoQWxzbyBlbmFibGVzIHRoZSBOViBzZWVkIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGluIHRoZSBwbGF0Zm9ybSBsYXllcikKKyAqCisgKiBUaGlzIGlzIGNydWNpYWwgKGlmIG5vdCByZXF1aXJlZCkgb24gc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIGEKKyAqIGNyeXB0b2dyYXBoaWMgZW50cm9weSBzb3VyY2UgKGluIGhhcmR3YXJlIG9yIGtlcm5lbCkgYXZhaWxhYmxlLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VOVFJPUFlfQywgTUJFRFRMU19QTEFURk9STV9DCisgKgorICogXG5vdGUgVGhlIHJlYWQvd3JpdGUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGVudHJvcHkgc291cmNlIGFyZQorICogICAgICAgZGV0ZXJtaW5lZCBpbiB0aGUgcGxhdGZvcm0gbGF5ZXIsIGFuZCBjYW4gYmUgbW9kaWZpZWQgYXQgcnVudGltZSBhbmQvb3IKKyAqICAgICAgIGNvbXBpbGUtdGltZSBkZXBlbmRpbmcgb24gdGhlIGZsYWdzIChNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfKikgdXNlZC4KKyAqCisgKiBcbm90ZSBJZiB5b3UgdXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucyB0aGF0IHJlYWQgYSBzZWVkZmlsZQorICogICAgICAgd2l0aCByZWd1bGFyIGZvcGVuKCksIHBsZWFzZSBtYWtlIHN1cmUgeW91IG1ha2UgYSBzZWVkZmlsZSB3aXRoIHRoZQorICogICAgICAgcHJvcGVyIG5hbWUgKGRlZmluZWQgaW4gTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9GSUxFKSBhbmQgYXQKKyAqICAgICAgIGxlYXN0IE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFIGJ5dGVzIGluIHNpemUgdGhhdCBjYW4gYmUgcmVhZCBmcm9tCisgKiAgICAgICBhbmQgd3JpdHRlbiB0byBvciB5b3Ugd2lsbCBnZXQgYW4gZW50cm9weSBzb3VyY2UgZXJyb3IhIFRoZSBkZWZhdWx0CisgKiAgICAgICBpbXBsZW1lbnRhdGlvbiB3aWxsIG9ubHkgdXNlIHRoZSBmaXJzdCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRQorICogICAgICAgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KKyAqCisgKiBcbm90ZSBUaGUgZW50cm9weSBjb2xsZWN0b3Igd2lsbCB3cml0ZSB0byB0aGUgc2VlZCBmaWxlIGJlZm9yZSBlbnRyb3B5IGlzCisgKiAgICAgICBnaXZlbiB0byBhbiBleHRlcm5hbCBzb3VyY2UsIHRvIHVwZGF0ZSBpdC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVECisKKy8qKgorICogXGRlZiBNQkVEVExTX01FTU9SWV9ERUJVRworICoKKyAqIEVuYWJsZSBkZWJ1Z2dpbmcgb2YgYnVmZmVyIGFsbG9jYXRvciBtZW1vcnkgaXNzdWVzLiBBdXRvbWF0aWNhbGx5IHByaW50cworICogKHRvIHN0ZGVycikgYWxsIChmYXRhbCkgbWVzc2FnZXMgb24gbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzLiBFbmFibGVzCisgKiBmdW5jdGlvbiBmb3IgJ2RlYnVnIG91dHB1dCcgb2YgYWxsb2NhdGVkIG1lbW9yeS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBsZXQgdGhlIGJ1ZmZlciBhbGxvY2F0b3IgcHJpbnQgb3V0IGVycm9yIG1lc3NhZ2VzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19NRU1PUllfREVCVUcKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRQorICoKKyAqIEluY2x1ZGUgYmFja3RyYWNlIGluZm9ybWF0aW9uIHdpdGggZWFjaCBhbGxvY2F0ZWQgYmxvY2suCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisgKiAgICAgICAgICAgR0xJQkMtY29tcGF0aWJsZSBiYWNrdHJhY2UoKSBhbiBiYWNrdHJhY2Vfc3ltYm9scygpIHN1cHBvcnQKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBpbmNsdWRlIGJhY2t0cmFjZSBpbmZvcm1hdGlvbgorICovCisvLyNkZWZpbmUgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVAorICoKKyAqIFN1cHBvcnQgZXh0ZXJuYWwgcHJpdmF0ZSBSU0Ega2V5cyAoZWcgZnJvbSBhIEhTTSkgaW4gdGhlIFBLIGxheWVyLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIGV4dGVybmFsIHByaXZhdGUgUlNBIGtleXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS0NTMV9WMTUKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUEtDUyMxIHYxLjUgZW5jb2RpbmcuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUlNBX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgUEtDUyMxIHYxLjUgb3BlcmF0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtDUzFfVjE1CisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLQ1MxX1YyMQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBQS0NTIzEgdjIuMSBlbmNvZGluZy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRF9DLCBNQkVEVExTX1JTQV9DCisgKgorICogVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIFJTQUVTLU9BRVAgYW5kIFJTQVNTQS1QU1Mgb3BlcmF0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtDUzFfVjIxCisKKy8qKgorICogXGRlZiBNQkVEVExTX1JTQV9OT19DUlQKKyAqCisgKiBEbyBub3QgdXNlIHRoZSBDaGluZXNlIFJlbWFpbmRlciBUaGVvcmVtIGZvciB0aGUgUlNBIHByaXZhdGUgb3BlcmF0aW9uLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgdGhlIHVzZSBvZiBDUlQgaW4gUlNBLgorICoKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUlNBX05PX0NSVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TRUxGX1RFU1QKKyAqCisgKiBFbmFibGUgdGhlIGNoZWNrdXAgZnVuY3Rpb25zICgqX3NlbGZfdGVzdCkuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NFTEZfVEVTVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TSEEyNTZfU01BTExFUgorICoKKyAqIEVuYWJsZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBTSEEtMjU2IHRoYXQgaGFzIGxvd2VyIFJPTSBmb290cHJpbnQgYnV0IGFsc28KKyAqIGxvd2VyIHBlcmZvcm1hbmNlLgorICoKKyAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIG1lYW50IHRvIGJlIGEgcmVhc29ubmFibGUgY29tcHJvbWlzZSBiZXR3ZWVuCisgKiBwZXJmb3JtYW5jZSBhbmQgc2l6ZS4gVGhpcyB2ZXJzaW9uIG9wdGltaXplcyBtb3JlIGFnZ3Jlc3NpdmVseSBmb3Igc2l6ZSBhdAorICogdGhlIGV4cGVuc2Ugb2YgcGVyZm9ybWFuY2UuIEVnIG9uIENvcnRleC1NNCBpdCByZWR1Y2VzIHRoZSBzaXplIG9mCisgKiBtYmVkdGxzX3NoYTI1Nl9wcm9jZXNzKCkgZnJvbSB+MktCIHRvIH4wLjVLQiBmb3IgYSBwZXJmb3JtYW5jZSBoaXQgb2YgYWJvdXQKKyAqIDMwJS4KKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHRoZSBzbWFsbGVyIGltcGxlbWVudGF0aW9uIG9mIFNIQTI1Ni4KKyAqLworI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9TTUFMTEVSCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9BTExfQUxFUlRfTUVTU0FHRVMKKyAqCisgKiBFbmFibGUgc2VuZGluZyBvZiBhbGVydCBtZXNzYWdlcyBpbiBjYXNlIG9mIGVuY291bnRlcmVkIGVycm9ycyBhcyBwZXIgUkZDLgorICogSWYgeW91IGNob29zZSBub3QgdG8gc2VuZCB0aGUgYWxlcnQgbWVzc2FnZXMsIG1iZWQgVExTIGNhbiBzdGlsbCBjb21tdW5pY2F0ZQorICogd2l0aCBvdGhlciBzZXJ2ZXJzLCBvbmx5IGRlYnVnZ2luZyBvZiBmYWlsdXJlcyBpcyBoYXJkZXIuCisgKgorICogVGhlIGFkdmFudGFnZSBvZiBub3Qgc2VuZGluZyBhbGVydCBtZXNzYWdlcywgaXMgdGhhdCBubyBpbmZvcm1hdGlvbiBpcyBnaXZlbgorICogYWJvdXQgcmVhc29ucyBmb3IgZmFpbHVyZXMgdGh1cyBwcmV2ZW50aW5nIGFkdmVyc2FyaWVzIG9mIGdhaW5pbmcgaW50ZWwuCisgKgorICogRW5hYmxlIHNlbmRpbmcgb2YgYWxsIGFsZXJ0IG1lc3NhZ2VzCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9BTExfQUxFUlRfTUVTU0FHRVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RFQlVHX0FMTAorICoKKyAqIEVuYWJsZSB0aGUgZGVidWcgbWVzc2FnZXMgaW4gU1NMIG1vZHVsZSBmb3IgYWxsIGlzc3Vlcy4KKyAqIERlYnVnIG1lc3NhZ2VzIGhhdmUgYmVlbiBkaXNhYmxlZCBpbiBzb21lIHBsYWNlcyB0byBwcmV2ZW50IHRpbWluZworICogYXR0YWNrcyBkdWUgdG8gKHVuYmFsYW5jZWQpIGRlYnVnZ2luZyBmdW5jdGlvbiBjYWxscy4KKyAqCisgKiBJZiB5b3UgbmVlZCBhbGwgZXJyb3IgcmVwb3J0aW5nIHlvdSBzaG91bGQgZW5hYmxlIHRoaXMgZHVyaW5nIGRlYnVnZ2luZywKKyAqIGJ1dCByZW1vdmUgdGhpcyBmb3IgcHJvZHVjdGlvbiBzZXJ2ZXJzIHRoYXQgc2hvdWxkIGxvZyBhcyB3ZWxsLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIHJlcG9ydCBhbGwgZGVidWcgbWVzc2FnZXMgb24gZXJyb3JzIGludHJvZHVjaW5nCisgKiBhIHRpbWluZyBzaWRlLWNoYW5uZWwuCisgKgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX0FMTAorCisvKiogXGRlZiBNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIEVuY3J5cHQtdGhlbi1NQUMsIFJGQyA3MzY2LgorICoKKyAqIFRoaXMgYWxsb3dzIHBlZXJzIHRoYXQgYm90aCBzdXBwb3J0IGl0IHRvIHVzZSBhIG1vcmUgcm9idXN0IHByb3RlY3Rpb24gZm9yCisgKiBjaXBoZXJzdWl0ZXMgdXNpbmcgQ0JDLCBwcm92aWRpbmcgZGVlcCByZXNpc3RhbmNlIGFnYWluc3QgdGltaW5nIGF0dGFja3MKKyAqIG9uIHRoZSBwYWRkaW5nIG9yIHVuZGVybHlpbmcgY2lwaGVyLgorICoKKyAqIFRoaXMgb25seSBhZmZlY3RzIENCQyBjaXBoZXJzdWl0ZXMsIGFuZCBpcyB1c2VsZXNzIGlmIG5vbmUgaXMgZGVmaW5lZC4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TU0xfUFJPVE9fVExTMSAgICBvcgorICogICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSAgb3IKKyAqICAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBFbmNyeXB0LXRoZW4tTUFDCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDCisKKy8qKiBcZGVmIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgRXh0ZW5kZWQgTWFzdGVyIFNlY3JldCwgYWthIFNlc3Npb24gSGFzaAorICogKGRyYWZ0LWlldGYtdGxzLXNlc3Npb24taGFzaC0wMikuCisgKgorICogVGhpcyB3YXMgaW50cm9kdWNlZCBhcyAidGhlIHByb3BlciBmaXgiIHRvIHRoZSBUcmlwbGUgSGFuZHNoYWtlIGZhbWlsaXkgb2YKKyAqIGF0dGFja3MsIGJ1dCBpdCBpcyByZWNvbW1lbmRlZCB0byBhbHdheXMgdXNlIGl0IChldmVuIGlmIHlvdSBkaXNhYmxlCisgKiByZW5lZ290aWF0aW9uKSwgc2luY2UgaXQgYWN0dWFsbHkgZml4ZXMgYSBtb3JlIGZ1bmRhbWVudGFsIGlzc3VlIGluIHRoZQorICogb3JpZ2luYWwgU1NML1RMUyBkZXNpZ24sIGFuZCBoYXMgaW1wbGljYXRpb25zIGJleW9uZCBUcmlwbGUgSGFuZHNoYWtlLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19UTFMxICAgIG9yCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xICBvcgorICogICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIEV4dGVuZGVkIE1hc3RlciBTZWNyZXQuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIEZBTExCQUNLX1NDU1YgKGRyYWZ0LWlldGYtdGxzLWRvd25ncmFkZS1zY3N2LTAwKS4KKyAqCisgKiBGb3Igc2VydmVycywgaXQgaXMgcmVjb21tZW5kZWQgdG8gYWx3YXlzIGVuYWJsZSB0aGlzLCB1bmxlc3MgeW91IHN1cHBvcnQKKyAqIG9ubHkgb25lIHZlcnNpb24gb2YgVExTLCBvciBrbm93IGZvciBzdXJlIHRoYXQgbm9uZSBvZiB5b3VyIGNsaWVudHMKKyAqIGltcGxlbWVudHMgYSBmYWxsYmFjayBzdHJhdGVneS4KKyAqCisgKiBGb3IgY2xpZW50cywgeW91IG9ubHkgbmVlZCB0aGlzIGlmIHlvdSdyZSB1c2luZyBhIGZhbGxiYWNrIHN0cmF0ZWd5LCB3aGljaAorICogaXMgbm90IHJlY29tbWVuZGVkIGluIHRoZSBmaXJzdCBwbGFjZSwgdW5sZXNzIHlvdSBhYnNvbHV0ZWx5IG5lZWQgaXQgdG8KKyAqIGludGVyb3BlcmF0ZSB3aXRoIGJ1Z2d5ICh2ZXJzaW9uLWludG9sZXJhbnQpIHNlcnZlcnMuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgRkFMTEJBQ0tfU0NTVgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMCisgKgorICogRW5hYmxlIGhvb2tpbmcgZnVuY3Rpb25zIGluIFNTTCBtb2R1bGUgZm9yIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZgorICogaW5kaXZpZHVhbCByZWNvcmRzLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGVuYWJsZSBob29raW5nIGZ1bmN0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcKKyAqCisgKiBFbmFibGUgMS9uLTEgcmVjb3JkIHNwbGl0dGluZyBmb3IgQ0JDIG1vZGUgaW4gU1NMdjMgYW5kIFRMUyAxLjAuCisgKgorICogVGhpcyBpcyBhIGNvdW50ZXJtZWFzdXJlIHRvIHRoZSBCRUFTVCBhdHRhY2ssIHdoaWNoIGFsc28gbWluaW1pemVzIHRoZSByaXNrCisgKiBvZiBpbnRlcm9wZXJhYmlsaXR5IGlzc3VlcyBjb21wYXJlZCB0byBzZW5kaW5nIDAtbGVuZ3RoIHJlY29yZHMuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgMS9uLTEgcmVjb3JkIHNwbGl0dGluZy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OCisgKgorICogRGlzYWJsZSBzdXBwb3J0IGZvciBUTFMgcmVuZWdvdGlhdGlvbi4KKyAqCisgKiBUaGUgdHdvIG1haW4gdXNlcyBvZiByZW5lZ290aWF0aW9uIGFyZSAoMSkgcmVmcmVzaCBrZXlzIG9uIGxvbmctbGl2ZWQKKyAqIGNvbm5lY3Rpb25zIGFuZCAoMikgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGFmdGVyIHRoZSBpbml0aWFsIGhhbmRzaGFrZS4KKyAqIElmIHlvdSBkb24ndCBuZWVkIHJlbmVnb3RpYXRpb24sIGl0J3MgcHJvYmFibHkgYmV0dGVyIHRvIGRpc2FibGUgaXQsIHNpbmNlCisgKiBpdCBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggc2VjdXJpdHkgaXNzdWVzIGluIHRoZSBwYXN0IGFuZCBpcyBlYXN5IHRvCisgKiBtaXN1c2UvbWlzdW5kZXJzdGFuZC4KKyAqCisgKiBDb21tZW50IHRoaXMgdG8gZGlzYWJsZSBzdXBwb3J0IGZvciByZW5lZ290aWF0aW9uLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIHJlY2VpdmluZyBhbmQgcGFyc2luZyBTU0x2MiBDbGllbnQgSGVsbG8gbWVzc2FnZXMgZm9yIHRoZQorICogU1NMIFNlcnZlciBtb2R1bGUgKE1CRURUTFNfU1NMX1NSVl9DKS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBlbmFibGUgc3VwcG9ydCBmb3IgU1NMdjIgQ2xpZW50IEhlbGxvIG1lc3NhZ2VzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRQorICoKKyAqIFBpY2sgdGhlIGNpcGhlcnN1aXRlIGFjY29yZGluZyB0byB0aGUgY2xpZW50J3MgcHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gb3VycworICogaW4gdGhlIFNTTCBTZXJ2ZXIgbW9kdWxlIChNQkVEVExTX1NTTF9TUlZfQykuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcmVzcGVjdCBjbGllbnQncyBjaXBoZXJzdWl0ZSBvcmRlcgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfU1JWX1JFU1BFQ1RfQ0xJRU5UX1BSRUZFUkVOQ0UKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUkZDIDYwNjYgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24gaW4gU1NMLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHRoZSBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgU1NMIDMuMC4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRDVfQworICogICAgICAgICAgIE1CRURUTFNfU0hBMV9DCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgU1NMIDMuMAorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fVExTMQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4wLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01ENV9DCisgKiAgICAgICAgICAgTUJFRFRMU19TSEExX0MKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4wCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19UTFMxCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgVExTIDEuMSAoYW5kIERUTFMgMS4wIGlmIERUTFMgaXMgZW5hYmxlZCkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTUQ1X0MKKyAqICAgICAgICAgICBNQkVEVExTX1NIQTFfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjEgLyBEVExTIDEuMAorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgVExTIDEuMiAoYW5kIERUTFMgMS4yIGlmIERUTFMgaXMgZW5hYmxlZCkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU0hBMV9DIG9yIE1CRURUTFNfU0hBMjU2X0Mgb3IgTUJFRFRMU19TSEE1MTJfQworICogICAgICAgICAgIChEZXBlbmRzIG9uIGNpcGhlcnN1aXRlcykKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4yIC8gRFRMUyAxLjIKKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgRFRMUyAoYWxsIGF2YWlsYWJsZSB2ZXJzaW9ucykuCisgKgorICogRW5hYmxlIHRoaXMgYW5kIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSB0byBlbmFibGUgRFRMUyAxLjAsCisgKiBhbmQvb3IgdGhpcyBhbmQgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yIHRvIGVuYWJsZSBEVExTIDEuMi4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xCisgKiAgICAgICAgb3IgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgRFRMUworICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0FMUE4KKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUkZDIDczMDEgQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgTmVnb3RpYXRpb24uCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgQUxQTi4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0FMUE4KKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIGFudGktcmVwbGF5IG1lY2hhbmlzbSBpbiBEVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9UTFNfQworICogICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKyAqCisgKiBcd2FybmluZyBEaXNhYmxpbmcgdGhpcyBpcyBvZnRlbiBhIHNlY3VyaXR5IHJpc2shCisgKiBTZWUgbWJlZHRsc19zc2xfY29uZl9kdGxzX2FudGlfcmVwbGF5KCkgZm9yIGRldGFpbHMuCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgYW50aS1yZXBsYXkgaW4gRFRMUy4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBIZWxsb1ZlcmlmeVJlcXVlc3Qgb24gRFRMUyBzZXJ2ZXJzLgorICoKKyAqIFRoaXMgZmVhdHVyZSBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gcHJldmVudCBEVExTIHNlcnZlcnMgYmVpbmcgdXNlZCBhcworICogYW1wbGlmaWVycyBpbiBEb1MgYXR0YWNrcyBhZ2FpbnN0IG90aGVyIGhvc3RzLiBJdCBzaG91bGQgYWx3YXlzIGJlIGVuYWJsZWQKKyAqIHVubGVzcyB5b3Uga25vdyBmb3Igc3VyZSBhbXBsaWZpY2F0aW9uIGNhbm5vdCBiZSBhIHByb2JsZW0gaW4gdGhlCisgKiBlbnZpcm9ubWVudCBpbiB3aGljaCB5b3VyIHNlcnZlciBvcGVyYXRlcy4KKyAqCisgKiBcd2FybmluZyBEaXNhYmxpbmcgdGhpcyBjYW4gYmEgYSBzZWN1cml0eSByaXNrISAoc2VlIGFib3ZlKQorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19EVExTCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgSGVsbG9WZXJpZnlSZXF1ZXN0LgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFCisgKgorICogRW5hYmxlIHNlcnZlci1zaWRlIHN1cHBvcnQgZm9yIGNsaWVudHMgdGhhdCByZWNvbm5lY3QgZnJvbSB0aGUgc2FtZSBwb3J0LgorICoKKyAqIFNvbWUgY2xpZW50cyB1bmV4cGVjdGVkbHkgY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHRyeSB0byByZWNvbm5lY3QgdXNpbmcgdGhlCisgKiBzYW1lIHNvdXJjZSBwb3J0LiBUaGlzIG5lZWRzIHNwZWNpYWwgc3VwcG9ydCBmcm9tIHRoZSBzZXJ2ZXIgdG8gaGFuZGxlIHRoZQorICogbmV3IGNvbm5lY3Rpb24gc2VjdXJlbHksIGFzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDQuMi44IG9mIFJGQyA2MzQ3LiBUaGlzCisgKiBmbGFnIGVuYWJsZXMgdGhhdCBzdXBwb3J0LgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWQorICoKKyAqIENvbW1lbnQgdGhpcyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIGNsaWVudHMgcmV1c2luZyB0aGUgc291cmNlIHBvcnQuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVAorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBhIGxpbWl0IG9mIHJlY29yZHMgd2l0aCBiYWQgTUFDLgorICoKKyAqIFNlZSBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYmFkbWFjX2xpbWl0KCkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUkZDIDUwNzcgc2Vzc2lvbiB0aWNrZXRzIGluIFNTTC4KKyAqIENsaWVudC1zaWRlLCBwcm92aWRlcyBmdWxsIHN1cHBvcnQgZm9yIHNlc3Npb24gdGlja2V0cyAobWFpbnRhaW5hbmNlIG9mIGEKKyAqIHNlc3Npb24gc3RvcmUgcmVtYWlucyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGFwcGxpY2F0aW9uLCB0aG91Z2gpLgorICogU2VydmVyLXNpZGUsIHlvdSBhbHNvIG5lZWQgdG8gcHJvdmlkZSBjYWxsYmFja3MgZm9yIHdyaXRpbmcgYW5kIHBhcnNpbmcKKyAqIHRpY2tldHMsIGluY2x1ZGluZyBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gYW5kIGtleSBtYW5hZ2VtZW50LiBFeGFtcGxlCisgKiBjYWxsYmFja3MgYXJlIHByb3ZpZGVkIGJ5IE1CRURUTFNfU1NMX1RJQ0tFVF9DLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIFNTTCBzZXNzaW9uIHRpY2tldHMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgZXhwb3J0aW5nIGtleSBibG9jayBhbmQgbWFzdGVyIHNlY3JldC4KKyAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNlcnRhaW4gdXNlcnMgb2YgVExTLCBlLmcuIEVBUC1UTFMuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3Iga2V5IGV4cG9ydAorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFJGQyA2MDY2IHNlcnZlciBuYW1lIGluZGljYXRpb24gKFNOSSkgaW4gU1NMLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBzZXJ2ZXIgbmFtZSBpbmRpY2F0aW9uIGluIFNTTAorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUkZDIDYwNjYgdHJ1bmNhdGVkIEhNQUMgaW4gU1NMLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHRydW5jYXRlZCBITUFDIGluIFNTTAorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVEhSRUFESU5HX0FMVAorICoKKyAqIFByb3ZpZGUgeW91ciBvd24gYWx0ZXJuYXRlIHRocmVhZGluZyBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19USFJFQURJTkdfQworICoKKyAqIFVuY29tbWVudCB0aGlzIHRvIGFsbG93IHlvdXIgb3duIGFsdGVybmF0ZSB0aHJlYWRpbmcgaW1wbGVtZW50YXRpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1RIUkVBRElOR19BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQKKyAqCisgKiBFbmFibGUgdGhlIHB0aHJlYWQgd3JhcHBlciBsYXllciBmb3IgdGhlIHRocmVhZGluZyBsYXllci4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19USFJFQURJTkdfQworICoKKyAqIFVuY29tbWVudCB0aGlzIHRvIGVuYWJsZSBwdGhyZWFkIG11dGV4ZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1RIUkVBRElOR19QVEhSRUFECisKKy8qKgorICogXGRlZiBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMKKyAqCisgKiBBbGxvdyBydW4tdGltZSBjaGVja2luZyBvZiBjb21waWxlLXRpbWUgZW5hYmxlZCBmZWF0dXJlcy4gVGh1cyBhbGxvd2luZyB1c2VycworICogdG8gY2hlY2sgYXQgcnVuLXRpbWUgaWYgdGhlIGxpYnJhcnkgaXMgZm9yIGluc3RhbmNlIGNvbXBpbGVkIHdpdGggdGhyZWFkaW5nCisgKiBzdXBwb3J0IHZpYSBtYmVkdGxzX3ZlcnNpb25fY2hlY2tfZmVhdHVyZSgpLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1ZFUlNJT05fQworICoKKyAqIENvbW1lbnQgdGhpcyB0byBkaXNhYmxlIHJ1bi10aW1lIGNoZWNraW5nIGFuZCBzYXZlIFJPTSBzcGFjZQorICovCisvLyNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMKKyAqCisgKiBJZiBzZXQsIHRoZSBYNTA5IHBhcnNlciB3aWxsIG5vdCBicmVhay1vZmYgd2hlbiBwYXJzaW5nIGFuIFg1MDkgY2VydGlmaWNhdGUKKyAqIGFuZCBlbmNvdW50ZXJpbmcgYW4gZXh0ZW5zaW9uIGluIGEgdjEgb3IgdjIgY2VydGlmaWNhdGUuCisgKgorICogVW5jb21tZW50IHRvIHByZXZlbnQgYW4gZXJyb3IuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9BTExPV19VTlNVUFBPUlRFRF9DUklUSUNBTF9FWFRFTlNJT04KKyAqCisgKiBJZiBzZXQsIHRoZSBYNTA5IHBhcnNlciB3aWxsIG5vdCBicmVhay1vZmYgd2hlbiBwYXJzaW5nIGFuIFg1MDkgY2VydGlmaWNhdGUKKyAqIGFuZCBlbmNvdW50ZXJpbmcgYW4gdW5rbm93biBjcml0aWNhbCBleHRlbnNpb24uCisgKgorICogXHdhcm5pbmcgRGVwZW5kaW5nIG9uIHlvdXIgUEtJIHVzZSwgZW5hYmxpbmcgdGhpcyBjYW4gYmUgYSBzZWN1cml0eSByaXNrIQorICoKKyAqIFVuY29tbWVudCB0byBwcmV2ZW50IGFuIGVycm9yLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRQorICoKKyAqIEVuYWJsZSB2ZXJpZmljYXRpb24gb2YgdGhlIGtleVVzYWdlIGV4dGVuc2lvbiAoQ0EgYW5kIGxlYWYgY2VydGlmaWNhdGVzKS4KKyAqCisgKiBEaXNhYmxpbmcgdGhpcyBhdm9pZHMgcHJvYmxlbXMgd2l0aCBtaXMtaXNzdWVkIGFuZC9vciBtaXN1c2VkCisgKiAoaW50ZXJtZWRpYXRlKSBDQSBhbmQgbGVhZiBjZXJ0aWZpY2F0ZXMuCisgKgorICogXHdhcm5pbmcgRGVwZW5kaW5nIG9uIHlvdXIgUEtJIHVzZSwgZGlzYWJsaW5nIHRoaXMgY2FuIGJlIGEgc2VjdXJpdHkgcmlzayEKKyAqCisgKiBDb21tZW50IHRvIHNraXAga2V5VXNhZ2UgY2hlY2tpbmcgZm9yIGJvdGggQ0EgYW5kIGxlYWYgY2VydGlmaWNhdGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRQorICoKKyAqIEVuYWJsZSB2ZXJpZmljYXRpb24gb2YgdGhlIGV4dGVuZGVkS2V5VXNhZ2UgZXh0ZW5zaW9uIChsZWFmIGNlcnRpZmljYXRlcykuCisgKgorICogRGlzYWJsaW5nIHRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGggbWlzLWlzc3VlZCBhbmQvb3IgbWlzdXNlZCBjZXJ0aWZpY2F0ZXMuCisgKgorICogXHdhcm5pbmcgRGVwZW5kaW5nIG9uIHlvdXIgUEtJIHVzZSwgZGlzYWJsaW5nIHRoaXMgY2FuIGJlIGEgc2VjdXJpdHkgcmlzayEKKyAqCisgKiBDb21tZW50IHRvIHNraXAgZXh0ZW5kZWRLZXlVc2FnZSBjaGVja2luZyBmb3IgY2VydGlmaWNhdGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVAorICoKKyAqIEVuYWJsZSBwYXJzaW5nIGFuZCB2ZXJpZmljYXRpb24gb2YgWC41MDkgY2VydGlmaWNhdGVzLCBDUkxzIGFuZCBDU1JTCisgKiBzaWduZWQgd2l0aCBSU0FTU0EtUFNTIChha2EgUEtDUyMxIHYyLjEpLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhbGxvdyB1c2luZyBSU0FTU0EtUFNTIGluIGNlcnRpZmljYXRlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWkxJQl9TVVBQT1JUCisgKgorICogSWYgc2V0LCB0aGUgU1NML1RMUyBtb2R1bGUgdXNlcyBaTElCIHRvIHN1cHBvcnQgY29tcHJlc3Npb24gYW5kCisgKiBkZWNvbXByZXNzaW9uIG9mIHBhY2tldCBkYXRhLgorICoKKyAqIFx3YXJuaW5nIFRMUy1sZXZlbCBjb21wcmVzc2lvbiBNQVkgUkVEVUNFIFNFQ1VSSVRZISBTZWUgZm9yIGV4YW1wbGUgdGhlCisgKiBDUklNRSBhdHRhY2suIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiwgeW91IHNob3VsZCBleGFtaW5lIHdpdGggY2FyZSBpZgorICogQ1JJTUUgb3Igc2ltaWxhciBleHBsb2l0cyBtYXkgYmUgYSBhcHBsaWNhYmxlIHRvIHlvdXIgdXNlIGNhc2UuCisgKgorICogXG5vdGUgQ3VycmVudGx5IGNvbXByZXNzaW9uIGNhbid0IGJlIHVzZWQgd2l0aCBEVExTLgorICoKKyAqIFVzZWQgaW46IGxpYnJhcnkvc3NsX3Rscy5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBUaGlzIGZlYXR1cmUgcmVxdWlyZXMgemxpYiBsaWJyYXJ5IGFuZCBoZWFkZXJzIHRvIGJlIHByZXNlbnQuCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSB1c2Ugb2YgWkxJQgorICovCisvLyNkZWZpbmUgTUJFRFRMU19aTElCX1NVUFBPUlQKKy8qIFx9IG5hbWUgU0VDVElPTjogbWJlZCBUTFMgZmVhdHVyZSBzdXBwb3J0ICovCisKKy8qKgorICogXG5hbWUgU0VDVElPTjogbWJlZCBUTFMgbW9kdWxlcworICoKKyAqIFRoaXMgc2VjdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIGVudGlyZSBtb2R1bGVzIGluIG1iZWQgVExTCisgKiBceworICovCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FFU05JX0MKKyAqCisgKiBFbmFibGUgQUVTLU5JIHN1cHBvcnQgb24geDg2LTY0LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYWVzbmkuYworICogQ2FsbGVyOiAgbGlicmFyeS9hZXMuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0hBVkVfQVNNCisgKgorICogVGhpcyBtb2R1bGVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFFUy1OSSBpbnN0cnVjdGlvbnMgb24geDg2LTY0CisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0FFU05JX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTX0MKKyAqCisgKiBFbmFibGUgdGhlIEFFUyBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hZXMuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGVtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvY3RyX2RyYmcuYworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqCisgKiBQRU1fUEFSU0UgdXNlcyBBRVMgZm9yIGRlY3J5cHRpbmcgZW5jcnlwdGVkIGtleXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19BUkM0X0MKKyAqCisgKiBFbmFibGUgdGhlIEFSQ0ZPVVIgc3RyZWFtIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2FyYzQuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9NRDUKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0FSQzRfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19BU04xX1BBUlNFX0MKKyAqCisgKiBFbmFibGUgdGhlIGdlbmVyaWMgQVNOMSBwYXJzZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hc24xLmMKKyAqIENhbGxlcjogIGxpYnJhcnkveDUwOS5jCisgKiAgICAgICAgICBsaWJyYXJ5L2RobS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BrY3MxMi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BrY3M1LmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtwYXJzZS5jCisgKi8KKyNkZWZpbmUgTUJFRFRMU19BU04xX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQVNOMV9XUklURV9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIEFTTjEgd3JpdGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYXNuMXdyaXRlLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvZWNkc2EuYworICogICAgICAgICAgbGlicmFyeS9wa3dyaXRlLmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOV9jcmVhdGUuYworICogICAgICAgICAgbGlicmFyeS94NTA5d3JpdGVfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5d3JpdGVfY3NyLmMKKyAqLworI2RlZmluZSBNQkVEVExTX0FTTjFfV1JJVEVfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19CQVNFNjRfQworICoKKyAqIEVuYWJsZSB0aGUgQmFzZTY0IG1vZHVsZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2Jhc2U2NC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3BlbS5jCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFBFTSBzdXBwb3J0IChyZXF1aXJlZCBieSBYLjUwOSkuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0JBU0U2NF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0JJR05VTV9DCisgKgorICogRW5hYmxlIHRoZSBtdWx0aS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYmlnbnVtLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvZGhtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvZWNwLmMKKyAqICAgICAgICAgIGxpYnJhcnkvZWNkc2EuYworICogICAgICAgICAgbGlicmFyeS9yc2EuYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgUlNBLCBESE0gYW5kIEVDQyAoRUNESCwgRUNEU0EpIHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19CSUdOVU1fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19CTE9XRklTSF9DCisgKgorICogRW5hYmxlIHRoZSBCbG93ZmlzaCBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9ibG93ZmlzaC5jCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0JMT1dGSVNIX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0FNRUxMSUFfQworICoKKyAqIEVuYWJsZSB0aGUgQ2FtZWxsaWEgYmxvY2sgY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvY2FtZWxsaWEuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NBTUVMTElBX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0NNX0MKKyAqCisgKiBFbmFibGUgdGhlIENvdW50ZXIgd2l0aCBDQkMtTUFDIChDQ00pIG1vZGUgZm9yIDEyOC1iaXQgYmxvY2sgY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvY2NtLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19BRVNfQyBvciBNQkVEVExTX0NBTUVMTElBX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIHRoZSBBRVMtQ0NNIGNpcGhlcnN1aXRlcywgaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbC4KKyAqLworI2RlZmluZSBNQkVEVExTX0NDTV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NFUlRTX0MKKyAqCisgKiBFbmFibGUgdGhlIHRlc3QgY2VydGlmaWNhdGVzLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvY2VydHMuYworICogQ2FsbGVyOgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgZm9yIHRlc3RpbmcgKHNzbF9jbGllbnQvc2VydmVyKS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0VSVFNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBjaXBoZXIgbGF5ZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jaXBoZXIuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGdlbmVyaWMgY2lwaGVyIHdyYXBwZXJzLgorICovCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ01BQ19DCisgKgorICogRW5hYmxlIHRoZSBDTUFDIChDaXBoZXItYmFzZWQgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlKSBtb2RlIGZvciBibG9jaworICogY2lwaGVycy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2NtYWMuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FFU19DIG9yIE1CRURUTFNfREVTX0MKKyAqCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DTUFDX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ1RSX0RSQkdfQworICoKKyAqIEVuYWJsZSB0aGUgQ1RSX0RSQkcgQUVTLTI1Ni1iYXNlZCByYW5kb20gZ2VuZXJhdG9yLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvY3RyX2RyYmcuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FFU19DCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIENUUl9EUkJHIEFFUy0yNTYgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0RFQlVHX0MKKyAqCisgKiBFbmFibGUgdGhlIGRlYnVnIGZ1bmN0aW9ucy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2RlYnVnLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBkZWJ1Z2dpbmcgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIE1CRURUTFNfREVCVUdfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ERVNfQworICoKKyAqIEVuYWJsZSB0aGUgREVTIGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2Rlcy5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3BlbS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqCisgKiBQRU1fUEFSU0UgdXNlcyBERVMvM0RFUyBmb3IgZGVjcnlwdGluZyBlbmNyeXB0ZWQga2V5cy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfREVTX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREhNX0MKKyAqCisgKiBFbmFibGUgdGhlIERpZmZpZS1IZWxsbWFuLU1lcmtsZSBtb2R1bGUuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9kaG0uYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGtleSBleGNoYW5nZXM6CisgKiAgICAgIERIRS1SU0EsIERIRS1QU0sKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfREhNX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNESF9DCisgKgorICogRW5hYmxlIHRoZSBlbGxpcHRpYyBjdXJ2ZSBEaWZmaWUtSGVsbG1hbiBsaWJyYXJ5LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZWNkaC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcga2V5IGV4Y2hhbmdlczoKKyAqICAgICAgRUNESEUtRUNEU0EsIEVDREhFLVJTQSwgREhFLVBTSworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDUF9DCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VDREhfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ0RTQV9DCisgKgorICogRW5hYmxlIHRoZSBlbGxpcHRpYyBjdXJ2ZSBEU0EgbGlicmFyeS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2VjZHNhLmMKKyAqIENhbGxlcjoKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcga2V5IGV4Y2hhbmdlczoKKyAqICAgICAgRUNESEUtRUNEU0EKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ1BfQywgTUJFRFRMU19BU04xX1dSSVRFX0MsIE1CRURUTFNfQVNOMV9QQVJTRV9DCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VDRFNBX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNKUEFLRV9DCisgKgorICogRW5hYmxlIHRoZSBlbGxpcHRpYyBjdXJ2ZSBKLVBBS0UgbGlicmFyeS4KKyAqCisgKiBcd2FybmluZyBUaGlzIGlzIGN1cnJlbnRseSBleHBlcmltZW50YWwuIEVDIEotUEFLRSBzdXBwb3J0IGlzIGJhc2VkIG9uIHRoZQorICogVGhyZWFkIHYxLjAuMCBzcGVjaWZpY2F0aW9uOyBpbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWNhdGlvbgorICogbWlnaHQgc3RpbGwgaGFwcGVuLiBGb3IgdGhpcyByZWFzb24sIHRoaXMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2VjanBha2UuYworICogQ2FsbGVyOgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBrZXkgZXhjaGFuZ2VzOgorICogICAgICBFQ0pQQUtFCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNQX0MsIE1CRURUTFNfTURfQworICovCisjZGVmaW5lIE1CRURUTFNfRUNKUEFLRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDUF9DCisgKgorICogRW5hYmxlIHRoZSBlbGxpcHRpYyBjdXJ2ZSBvdmVyIEdGKHApIGxpYnJhcnkuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9lY3AuYworICogQ2FsbGVyOiAgbGlicmFyeS9lY2RoLmMKKyAqICAgICAgICAgIGxpYnJhcnkvZWNkc2EuYworICogICAgICAgICAgbGlicmFyeS9lY2pwYWtlLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CSUdOVU1fQyBhbmQgYXQgbGVhc3Qgb25lIE1CRURUTFNfRUNQX0RQX1hYWF9FTkFCTEVECisgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FTlRST1BZX0MKKyAqCisgKiBFbmFibGUgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGVudHJvcHkgY29kZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2VudHJvcHkuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NIQTUxMl9DIG9yIE1CRURUTFNfU0hBMjU2X0MKKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGdlbmVyaWMgZW50cm9weSBwb29sCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRVJST1JfQworICoKKyAqIEVuYWJsZSBlcnJvciBjb2RlIHRvIGVycm9yIHN0cmluZyBjb252ZXJzaW9uLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZXJyb3IuYworICogQ2FsbGVyOgorICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgbWJlZHRsc19zdHJlcnJvcigpLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19FUlJPUl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0dDTV9DCisgKgorICogRW5hYmxlIHRoZSBHYWxvaXMvQ291bnRlciBNb2RlIChHQ00pIGZvciBBRVMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9nY20uYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FFU19DIG9yIE1CRURUTFNfQ0FNRUxMSUFfQworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIEFFUy1HQ00gYW5kIENBTUVMTElBLUdDTSBjaXBoZXJzdWl0ZXMsIGlmIG90aGVyCisgKiByZXF1aXNpdGVzIGFyZSBlbmFibGVkIGFzIHdlbGwuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0dDTV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0hBVkVHRV9DCisgKgorICogRW5hYmxlIHRoZSBIQVZFR0UgcmFuZG9tIGdlbmVyYXRvci4KKyAqCisgKiBXYXJuaW5nOiB0aGUgSEFWRUdFIHJhbmRvbSBnZW5lcmF0b3IgaXMgbm90IHN1aXRhYmxlIGZvciB2aXJ0dWFsaXplZAorICogICAgICAgICAgZW52aXJvbm1lbnRzCisgKgorICogV2FybmluZzogdGhlIEhBVkVHRSByYW5kb20gZ2VuZXJhdG9yIGlzIGRlcGVuZGVudCBvbiB0aW1pbmcgYW5kIHNwZWNpZmljCisgKiAgICAgICAgICBwcm9jZXNzb3IgdHJhaXRzLiBJdCBpcyB0aGVyZWZvcmUgbm90IGFkdmlzZWQgdG8gdXNlIEhBVkVHRSBhcworICogICAgICAgICAgeW91ciBhcHBsaWNhdGlvbnMgcHJpbWFyeSByYW5kb20gZ2VuZXJhdG9yIG9yIHByaW1hcnkgZW50cm9weSBwb29sCisgKiAgICAgICAgICBpbnB1dC4gQXMgYSBzZWNvbmRhcnkgaW5wdXQgdG8geW91ciBlbnRyb3B5IHBvb2wsIGl0IElTIGFibGUgYWRkCisgKiAgICAgICAgICB0aGUgKGxpbWl0ZWQpIGV4dHJhIGVudHJvcHkgaXQgcHJvdmlkZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9oYXZlZ2UuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1RJTUlOR19DCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSB0aGUgSEFWRUdFIHJhbmRvbSBnZW5lcmF0b3IuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hBVkVHRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0hNQUNfRFJCR19DCisgKgorICogRW5hYmxlIHRoZSBITUFDX0RSQkcgcmFuZG9tIGdlbmVyYXRvci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2htYWNfZHJiZy5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTURfQworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgdGhlIEhNQUNfRFJCRyByYW5kb20gbnVtYmVyIGdlZXJhdG9yLgorICovCisjZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTURfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBtZXNzYWdlIGRpZ2VzdCBsYXllci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogQ2FsbGVyOgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBtZXNzYWdlIGRpZ2VzdCB3cmFwcGVycy4KKyAqLworI2RlZmluZSBNQkVEVExTX01EX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUQyX0MKKyAqCisgKiBFbmFibGUgdGhlIE1EMiBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfbWQyLmMKKyAqIENhbGxlcjoKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIChyYXJlKSBNRDItc2lnbmVkIFguNTA5IGNlcnRzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19NRDJfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRDRfQworICoKKyAqIEVuYWJsZSB0aGUgTUQ0IGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19tZDQuYworICogQ2FsbGVyOgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgKHJhcmUpIE1ENC1zaWduZWQgWC41MDkgY2VydHMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01ENF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX01ENV9DCisgKgorICogRW5hYmxlIHRoZSBNRDUgaGFzaCBhbGdvcml0aG0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX21kNS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogICAgICAgICAgbGlicmFyeS9wZW0uYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUyBhbmQgWC41MDkuCisgKiBQRU1fUEFSU0UgdXNlcyBNRDUgZm9yIGRlY3J5cHRpbmcgZW5jcnlwdGVkIGtleXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01ENV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworICoKKyAqIEVuYWJsZSB0aGUgYnVmZmVyIGFsbG9jYXRvciBpbXBsZW1lbnRhdGlvbiB0aGF0IG1ha2VzIHVzZSBvZiBhIChzdGFjaykKKyAqIGJhc2VkIGJ1ZmZlciB0byAnYWxsb2NhdGUnIGR5bmFtaWMgbWVtb3J5LiAocmVwbGFjZXMgY2FsbG9jKCkgYW5kIGZyZWUoKQorICogY2FsbHMpCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tZW1vcnlfYnVmZmVyX2FsbG9jLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19QTEFURk9STV9DCisgKiAgICAgICAgICAgTUJFRFRMU19QTEFURk9STV9NRU1PUlkgKHRvIHVzZSBpdCB3aXRoaW4gbWJlZCBUTFMpCisgKgorICogRW5hYmxlIHRoaXMgbW9kdWxlIHRvIGVuYWJsZSB0aGUgYnVmZmVyIG1lbW9yeSBhbGxvY2F0b3IuCisgKi8KKyNpZiAhT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisjZGVmaW5lIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisjZW5kaWYKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTkVUX0MKKyAqCisgKiBFbmFibGUgdGhlIFRDUCBhbmQgVURQIG92ZXIgSVB2Ni9JUHY0IG5ldHdvcmtpbmcgcm91dGluZXMuCisgKgorICogXG5vdGUgVGhpcyBtb2R1bGUgb25seSB3b3JrcyBvbiBQT1NJWC9Vbml4IChpbmNsdWRpbmcgTGludXgsIEJTRCBhbmQgT1MgWCkKKyAqIGFuZCBXaW5kb3dzLiBGb3Igb3RoZXIgcGxhdGZvcm1zLCB5b3UnbGwgd2FudCB0byBkaXNhYmxlIGl0LCBhbmQgd3JpdGUgeW91cgorICogb3duIG5ldHdvcmtpbmcgY2FsbGJhY2tzIHRvIGJlIHBhc3NlZCB0byBcYyBtYmVkdGxzX3NzbF9zZXRfYmlvKCkuCisgKgorICogXG5vdGUgU2VlIGFsc28gb3VyIEtub3dsZWRnZSBCYXNlIGFydGljbGUgYWJvdXQgcG9ydGluZyB0byBhIG5ldworICogZW52aXJvbm1lbnQ6CisgKiBodHRwczovL3Rscy5tYmVkLm9yZy9rYi9ob3ctdG8vaG93LWRvLWktcG9ydC1tYmVkLXRscy10by1hLW5ldy1lbnZpcm9ubWVudC1PUworICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbmV0X3NvY2tldHMuYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIG5ldHdvcmtpbmcgcm91dGluZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX05FVF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX09JRF9DCisgKgorICogRW5hYmxlIHRoZSBPSUQgZGF0YWJhc2UuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9vaWQuYworICogQ2FsbGVyOiAgbGlicmFyeS9hc24xd3JpdGUuYworICogICAgICAgICAgbGlicmFyeS9wa2NzNS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BrcGFyc2UuYworICogICAgICAgICAgbGlicmFyeS9wa3dyaXRlLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcnNhLmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDlfY3JlYXRlLmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2NybC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOXdyaXRlX2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOXdyaXRlX2Nzci5jCisgKgorICogVGhpcyBtb2R1bGVzIHRyYW5zbGF0ZXMgYmV0d2VlbiBPSURzIGFuZCBpbnRlcm5hbCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QQURMT0NLX0MKKyAqCisgKiBFbmFibGUgVklBIFBhZGxvY2sgc3VwcG9ydCBvbiB4ODYuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wYWRsb2NrLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvYWVzLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19IQVZFX0FTTQorICoKKyAqIFRoaXMgbW9kdWxlcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBWSUEgUGFkTG9jayBvbiB4ODYuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BBRExPQ0tfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QRU1fUEFSU0VfQworICoKKyAqIEVuYWJsZSBQRU0gZGVjb2RpbmcgLyBwYXJzaW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGVtLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvZGhtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtwYXJzZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcmwuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2Nzci5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQkFTRTY0X0MKKyAqCisgKiBUaGlzIG1vZHVsZXMgYWRkcyBzdXBwb3J0IGZvciBkZWNvZGluZyAvIHBhcnNpbmcgUEVNIGZpbGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QRU1fUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QRU1fV1JJVEVfQworICoKKyAqIEVuYWJsZSBQRU0gZW5jb2RpbmcgLyB3cml0aW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGVtLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGt3cml0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDl3cml0ZV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDl3cml0ZV9jc3IuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JBU0U2NF9DCisgKgorICogVGhpcyBtb2R1bGVzIGFkZHMgc3VwcG9ydCBmb3IgZW5jb2RpbmcgLyB3cml0aW5nIFBFTSBmaWxlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEVNX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBwdWJsaWMgKGFzeW1ldHJpYykga2V5IGxheWVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGsuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1JTQV9DIG9yIE1CRURUTFNfRUNQX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGdlbmVyaWMgcHVibGljIGtleSB3cmFwcGVycy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BLX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfUEFSU0VfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBwdWJsaWMgKGFzeW1ldHJpYykga2V5IHBhcnNlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3BrcGFyc2UuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2Nzci5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUEtfQworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBwdWJsaWMga2V5IHBhcnNlIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BLX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfV1JJVEVfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBwdWJsaWMgKGFzeW1ldHJpYykga2V5IHdyaXRlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3Brd3JpdGUuYworICogQ2FsbGVyOiAgbGlicmFyeS94NTA5d3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BLX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGdlbmVyaWMgcHVibGljIGtleSB3cml0ZSBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BLX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzVfQworICoKKyAqIEVuYWJsZSBQS0NTIzUgZnVuY3Rpb25zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGtjczUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01EX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQS0NTIzUgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS0NTNV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLQ1MxMV9DCisgKgorICogRW5hYmxlIHdyYXBwZXIgZm9yIFBLQ1MjMTEgc21hcnRjYXJkIHN1cHBvcnQuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa2NzMTEuYworICogQ2FsbGVyOiAgbGlicmFyeS9way5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUEtfQworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgU1NML1RMUyBQS0NTICMxMSBzbWFydGNhcmQgc3VwcG9ydC4KKyAqIFJlcXVpcmVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgUEtDUyMxMSBoZWxwZXIgbGlicmFyeSAobGlicGtjczExLWhlbHBlcikKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtDUzExX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzEyX0MKKyAqCisgKiBFbmFibGUgUEtDUyMxMiBQQkUgZnVuY3Rpb25zLgorICogQWRkcyBhbGdvcml0aG1zIGZvciBwYXJzaW5nIFBLQ1MjOCBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlzCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa2NzMTIuYworICogQ2FsbGVyOiAgbGlicmFyeS9wa3BhcnNlLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19BU04xX1BBUlNFX0MsIE1CRURUTFNfQ0lQSEVSX0MsIE1CRURUTFNfTURfQworICogQ2FuIHVzZTogIE1CRURUTFNfQVJDNF9DCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBQS0NTIzEyIGZ1bmN0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtDUzEyX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fQworICoKKyAqIEVuYWJsZSB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIgdGhhdCBhbGxvd3MgeW91IHRvIHJlLWFzc2lnbgorICogZnVuY3Rpb25zIGxpa2UgY2FsbG9jKCksIGZyZWUoKSwgc25wcmludGYoKSwgcHJpbnRmKCksIGZwcmludGYoKSwgZXhpdCgpLgorICoKKyAqIEVuYWJsaW5nIE1CRURUTFNfUExBVEZPUk1fQyBlbmFibGVzIHRvIHVzZSBvZiBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQKKyAqIG9yIE1CRURUTFNfUExBVEZPUk1fWFhYX01BQ1JPIGRpcmVjdGl2ZXMsIGFsbG93aW5nIHRoZSBmdW5jdGlvbnMgbWVudGlvbmVkCisgKiBhYm92ZSB0byBiZSBzcGVjaWZpZWQgYXQgcnVudGltZSBvciBjb21waWxlIHRpbWUgcmVzcGVjdGl2ZWx5LgorICoKKyAqIFxub3RlIFRoaXMgYWJzdHJhY3Rpb24gbGF5ZXIgbXVzdCBiZSBlbmFibGVkIG9uIFdpbmRvd3MgKGluY2x1ZGluZyBNU1lTMikKKyAqIGFzIG90aGVyIG1vZHVsZSByZWx5IG9uIGl0IGZvciBhIGZpeGVkIHNucHJpbnRmIGltcGxlbWVudGF0aW9uLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGxhdGZvcm0uYworICogQ2FsbGVyOiAgTW9zdCBvdGhlciAuYyBmaWxlcworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgYWJzdHJhY3Rpb24gb2YgY29tbW9uIChsaWJjKSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1JJUEVNRDE2MF9DCisgKgorICogRW5hYmxlIHRoZSBSSVBFTUQtMTYwIGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19yaXBlbWQxNjAuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX21kLmMKKyAqCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1JJUEVNRDE2MF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1JTQV9DCisgKgorICogRW5hYmxlIHRoZSBSU0EgcHVibGljLWtleSBjcnlwdG9zeXN0ZW0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9yc2EuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS94NTA5LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcga2V5IGV4Y2hhbmdlczoKKyAqICAgICAgUlNBLCBESEUtUlNBLCBFQ0RIRS1SU0EsIFJTQS1QU0sKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CSUdOVU1fQywgTUJFRFRMU19PSURfQworICovCisvLyNkZWZpbmUgTUJFRFRMU19SU0FfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TSEExX0MKKyAqCisgKiBFbmFibGUgdGhlIFNIQTEgY3J5cHRvZ3JhcGhpYyBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfc2hhMS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogICAgICAgICAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS94NTA5d3JpdGVfY3J0LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUyBhbmQgU0hBMS1zaWduZWQgY2VydGlmaWNhdGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TSEExX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU0hBMjU2X0MKKyAqCisgKiBFbmFibGUgdGhlIFNIQS0yMjQgYW5kIFNIQS0yNTYgY3J5cHRvZ3JhcGhpYyBoYXNoIGFsZ29yaXRobXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3NoYTI1Ni5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2VudHJvcHkuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX21kLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFNIQS0yMjQgYW5kIFNIQS0yNTYuCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgdGhlIFNTTC9UTFMgMS4yIFBSRiBmdW5jdGlvbi4KKyAqLworI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NIQTUxMl9DCisgKgorICogRW5hYmxlIHRoZSBTSEEtMzg0IGFuZCBTSEEtNTEyIGNyeXB0b2dyYXBoaWMgaGFzaCBhbGdvcml0aG1zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19zaGE1MTIuYworICogQ2FsbGVyOiAgbGlicmFyeS9lbnRyb3B5LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFNIQS0zODQgYW5kIFNIQS01MTIuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NIQTUxMl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DQUNIRV9DCisgKgorICogRW5hYmxlIHNpbXBsZSBTU0wgY2FjaGUgaW1wbGVtZW50YXRpb24uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfY2FjaGUuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9DQUNIRV9DCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DT09LSUVfQworICoKKyAqIEVuYWJsZSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBEVExTIGNvb2tpZXMgZm9yIGhlbGxvIHZlcmlmaWNhdGlvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF9jb29raWUuYworICogQ2FsbGVyOgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0NPT0tJRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9USUNLRVRfQworICoKKyAqIEVuYWJsZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBUTFMgc2VydmVyLXNpZGUgY2FsbGJhY2tzIGZvciBzZXNzaW9uIHRpY2tldHMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfdGlja2V0LmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19DSVBIRVJfQworICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfVElDS0VUX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0NMSV9DCisgKgorICogRW5hYmxlIHRoZSBTU0wvVExTIGNsaWVudCBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvc3NsX2NsaS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1RMU19DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFNTTC9UTFMgY2xpZW50IHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0xJX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NSVl9DCisgKgorICogRW5hYmxlIHRoZSBTU0wvVExTIHNlcnZlciBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvc3NsX3Nydi5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1RMU19DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFNTTC9UTFMgc2VydmVyIHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfU1JWX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1RMU19DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIFNTTC9UTFMgY29kZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF90bHMuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQ0lQSEVSX0MsIE1CRURUTFNfTURfQworICogICAgICAgICAgIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlIE1CRURUTFNfU1NMX1BST1RPX1hYWCBkZWZpbmVzCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFNTTC9UTFMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVEhSRUFESU5HX0MKKyAqCisgKiBFbmFibGUgdGhlIHRocmVhZGluZyBhYnN0cmFjdGlvbiBsYXllci4KKyAqIEJ5IGRlZmF1bHQgbWJlZCBUTFMgYXNzdW1lcyBpdCBpcyB1c2VkIGluIGEgbm9uLXRocmVhZGVkIGVudmlyb25tZW50IG9yIHRoYXQKKyAqIGNvbnRleHRzIGFyZSBub3Qgc2hhcmVkIGJldHdlZW4gdGhyZWFkcy4gSWYgeW91IGRvIGludGVuZCB0byB1c2UgY29udGV4dHMKKyAqIGJldHdlZW4gdGhyZWFkcywgeW91IHdpbGwgbmVlZCB0byBlbmFibGUgdGhpcyBsYXllciB0byBwcmV2ZW50IHJhY2UKKyAqIGNvbmRpdGlvbnMuIFNlZSBhbHNvIG91ciBLbm93bGVkZ2UgQmFzZSBhcnRpY2xlIGFib3V0IHRocmVhZGluZzoKKyAqIGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiL2RldmVsb3BtZW50L3RocmVhZC1zYWZldHktYW5kLW11bHRpLXRocmVhZGluZworICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvdGhyZWFkaW5nLmMKKyAqCisgKiBUaGlzIGFsbG93cyBkaWZmZXJlbnQgdGhyZWFkaW5nIGltcGxlbWVudGF0aW9ucyAoc2VsZi1pbXBsZW1lbnRlZCBvcgorICogcHJvdmlkZWQpLgorICoKKyAqIFlvdSB3aWxsIGhhdmUgdG8gZW5hYmxlIGVpdGhlciBNQkVEVExTX1RIUkVBRElOR19BTFQgb3IKKyAqIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQuCisgKgorICogRW5hYmxlIHRoaXMgbGF5ZXIgdG8gYWxsb3cgdXNlIG9mIG11dGV4ZXMgd2l0aGluIG1iZWQgVExTCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1RIUkVBRElOR19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1RJTUlOR19DCisgKgorICogRW5hYmxlIHRoZSBzZW1pLXBvcnRhYmxlIHRpbWluZyBpbnRlcmZhY2UuCisgKgorICogXG5vdGUgVGhlIHByb3ZpZGVkIGltcGxlbWVudGF0aW9uIG9ubHkgd29ya3Mgb24gUE9TSVgvVW5peCAoaW5jbHVkaW5nIExpbnV4LAorICogQlNEIGFuZCBPUyBYKSBhbmQgV2luZG93cy4gT24gb3RoZXIgcGxhdGZvcm1zLCB5b3UgY2FuIGVpdGhlciBkaXNhYmxlIHRoYXQKKyAqIG1vZHVsZSBhbmQgcHJvdmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGNhbGxiYWNrcyBuZWVkZWQgYnkKKyAqIFxjIG1iZWR0bHNfc3NsX3NldF90aW1lcl9jYigpIGZvciBEVExTLCBvciBsZWF2ZSBpdCBlbmFibGVkIGFuZCBwcm92aWRlCisgKiB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgd2hvbGUgbW9kdWxlIGJ5IHNldHRpbmcKKyAqIFxjIE1CRURUTFNfVElNSU5HX0FMVCBpbiB0aGUgY3VycmVudCBmaWxlLgorICoKKyAqIFxub3RlIFNlZSBhbHNvIG91ciBLbm93bGVkZ2UgQmFzZSBhcnRpY2xlIGFib3V0IHBvcnRpbmcgdG8gYSBuZXcKKyAqIGVudmlyb25tZW50OgorICogaHR0cHM6Ly90bHMubWJlZC5vcmcva2IvaG93LXRvL2hvdy1kby1pLXBvcnQtbWJlZC10bHMtdG8tYS1uZXctZW52aXJvbm1lbnQtT1MKKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3RpbWluZy5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2hhdmVnZS5jCisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0aGUgSEFWRUdFIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19USU1JTkdfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19WRVJTSU9OX0MKKyAqCisgKiBFbmFibGUgcnVuLXRpbWUgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3ZlcnNpb24uYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHJ1bi10aW1lIHZlcnNpb24gaW5mb3JtYXRpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogRW5hYmxlIFguNTA5IGNvcmUgZm9yIHVzaW5nIGNlcnRpZmljYXRlcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3g1MDkuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3JsLmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jc3IuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FTTjFfUEFSU0VfQywgTUJFRFRMU19CSUdOVU1fQywgTUJFRFRMU19PSURfQywKKyAqICAgICAgICAgICBNQkVEVExTX1BLX1BBUlNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgdGhlIFguNTA5IHBhcnNpbmcgbW9kdWxlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9VU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogRW5hYmxlIFguNTA5IGNlcnRpZmljYXRlIHBhcnNpbmcuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFguNTA5IGNlcnRpZmljYXRlIHBhcnNpbmcuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQworICoKKyAqIEVuYWJsZSBYLjUwOSBDUkwgcGFyc2luZy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcmwuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFguNTA5IENSTCBwYXJzaW5nLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MKKyAqCisgKiBFbmFibGUgWC41MDkgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0IChDU1IpIHBhcnNpbmcuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqIENhbGxlcjogIGxpYnJhcnkveDUwOV9jcnRfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfVVNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGZvciByZWFkaW5nIFguNTA5IGNlcnRpZmljYXRlIHJlcXVlc3QuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DUkVBVEVfQworICoKKyAqIEVuYWJsZSBYLjUwOSBjb3JlIGZvciBjcmVhdGluZyBjZXJ0aWZpY2F0ZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS94NTA5X2NyZWF0ZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQklHTlVNX0MsIE1CRURUTFNfT0lEX0MsIE1CRURUTFNfUEtfV1JJVEVfQworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHRoZSBiYXNpcyBmb3IgY3JlYXRpbmcgWC41MDkgY2VydGlmaWNhdGVzIGFuZCBDU1JzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSRUFURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MKKyAqCisgKiBFbmFibGUgY3JlYXRpbmcgWC41MDkgY2VydGlmaWNhdGVzLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkveDUwOV9jcnRfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgY2VydGlmaWNhdGUgY3JlYXRpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQworICoKKyAqIEVuYWJsZSBjcmVhdGluZyBYLjUwOSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3RzIChDU1IpLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkveDUwOV9jc3Jfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgY2VydGlmaWNhdGUgcmVxdWVzdCB3cml0aW5nLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0NTUl9XUklURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1hURUFfQworICoKKyAqIEVuYWJsZSB0aGUgWFRFQSBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS94dGVhLmMKKyAqIENhbGxlcjoKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWFRFQV9DCisKKy8qIFx9IG5hbWUgU0VDVElPTjogbWJlZCBUTFMgbW9kdWxlcyAqLworCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyAqCisgKiBUaGlzIHNlY3Rpb24gYWxsb3dzIGZvciB0aGUgc2V0dGluZyBvZiBtb2R1bGUgc3BlY2lmaWMgc2l6ZXMgYW5kCisgKiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZQorICogcmVsZXZhbnQgaGVhZGVyIGZpbGVzIGFuZCBzaG91bGQgc3VmZmljZSBmb3IgdGhlIHJlZ3VsYXIgdXNlIGNhc2VzLgorICoKKyAqIE91ciBhZHZpY2UgaXMgdG8gZW5hYmxlIG9wdGlvbnMgYW5kIGNoYW5nZSB0aGVpciB2YWx1ZXMgaGVyZQorICogb25seSBpZiB5b3UgaGF2ZSBhIGdvb2QgcmVhc29uIGFuZCBrbm93IHRoZSBjb25zZXF1ZW5jZXMuCisgKgorICogUGxlYXNlIGNoZWNrIHRoZSByZXNwZWN0aXZlIGhlYWRlciBmaWxlIGZvciBkb2N1bWVudGF0aW9uIG9uIHRoZXNlCisgKiBwYXJhbWV0ZXJzICh0byBwcmV2ZW50IGR1cGxpY2F0ZSBkb2N1bWVudGF0aW9uKS4KKyAqIFx7CisgKi8KKworLyogTVBJIC8gQklHTlVNIG9wdGlvbnMgKi8KKyNkZWZpbmUgTUJFRFRMU19NUElfV0lORE9XX1NJWkUgICAgICAgICAgICAxIC8qKjwgTWF4aW11bSB3aW5kb3dzIHNpemUgdXNlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19NUElfTUFYX1NJWkUgICAgICAgICAgICAzMiAvKio8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGZvciB1c2FibGUgTVBJcy4gKi8KKworLyogQ1RSX0RSQkcgb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4gICAgICAgICAgICAgICA0OCAvKio8IEFtb3VudCBvZiBlbnRyb3B5IHVzZWQgcGVyIHNlZWQgYnkgZGVmYXVsdCAoNDggd2l0aCBTSEEtNTEyLCAzMiB3aXRoIFNIQS0yNTYpICovCisvLyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19SRVNFRURfSU5URVJWQUwgICAgICAgIDEwMDAwIC8qKjwgSW50ZXJ2YWwgYmVmb3JlIHJlc2VlZCBpcyBwZXJmb3JtZWQgYnkgZGVmYXVsdCAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfTUFYX0lOUFVUICAgICAgICAgICAgICAgIDI1NiAvKio8IE1heGltdW0gbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW5wdXQgYnl0ZXMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX01BWF9SRVFVRVNUICAgICAgICAgICAgIDEwMjQgLyoqPCBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgcGVyIGNhbGwgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUICAgICAgICAgICAzODQgLyoqPCBNYXhpbXVtIHNpemUgb2YgKHJlKXNlZWQgYnVmZmVyICovCisKKy8qIEhNQUNfRFJCRyBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfUkVTRUVEX0lOVEVSVkFMICAgMTAwMDAgLyoqPCBJbnRlcnZhbCBiZWZvcmUgcmVzZWVkIGlzIHBlcmZvcm1lZCBieSBkZWZhdWx0ICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfTUFYX0lOUFVUICAgICAgICAgICAyNTYgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBhZGRpdGlvbmFsIGlucHV0IGJ5dGVzICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfTUFYX1JFUVVFU1QgICAgICAgIDEwMjQgLyoqPCBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgcGVyIGNhbGwgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVCAgICAgIDM4NCAvKio8IE1heGltdW0gc2l6ZSBvZiAocmUpc2VlZCBidWZmZXIgKi8KKworLyogRUNQIG9wdGlvbnMgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfTUFYX0JJVFMgICAgICAgICAgICAgMjU2IC8qKjwgTWF4aW11bSBiaXQgc2l6ZSBvZiBncm91cHMgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUgICAgICAgICAgICAyIC8qKjwgTWF4aW11bSB3aW5kb3cgc2l6ZSB1c2VkICovCisjZGVmaW5lIE1CRURUTFNfRUNQX0ZJWEVEX1BPSU5UX09QVElNICAgICAgMCAvKio8IEVuYWJsZSBmaXhlZC1wb2ludCBzcGVlZC11cCAqLworCisvKiBFbnRyb3B5IG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfTUFYX1NPVVJDRVMgICAgICAgICAgICAgICAgMjAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBzb3VyY2VzIHN1cHBvcnRlZCAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NQVhfR0FUSEVSICAgICAgICAgICAgICAgIDEyOCAvKio8IE1heGltdW0gYW1vdW50IHJlcXVlc3RlZCBmcm9tIGVudHJvcHkgc291cmNlcyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NSU5fSEFSRFdBUkUgICAgICAgICAgICAgICAzMiAvKio8IERlZmF1bHQgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgZm9yIHRoZSBoYXJkd2FyZSBlbnRyb3B5IHNvdXJjZSBtYmVkdGxzX2hhcmR3YXJlX3BvbGwoKSBiZWZvcmUgZW50cm9weSBpcyByZWxlYXNlZCAqLworCisKKy8qIE1lbW9yeSBidWZmZXIgYWxsb2NhdG9yIG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRSAgICAgIDQgLyoqPCBBbGlnbiBvbiBtdWx0aXBsZXMgb2YgdGhpcyB2YWx1ZSAqLworCisvKiBQbGF0Zm9ybSBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfTUVNX0hEUiAgIDxzdGRsaWIuaD4gLyoqPCBIZWFkZXIgdG8gaW5jbHVkZSBpZiBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMgaXMgZGVmaW5lZC4gRG9uJ3QgZGVmaW5lIGlmIG5vIGhlYWRlciBpcyBuZWVkZWQuICovCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQyAgICBvdFBsYXRDQWxsb2MgLyoqPCBEZWZhdWx0IGFsbG9jYXRvciB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRlJFRSAgICAgICAgb3RQbGF0RnJlZSAvKio8IERlZmF1bHQgZnJlZSB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKyNlbmRpZgorLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVQgICAgICAgICAgICBleGl0IC8qKjwgRGVmYXVsdCBleGl0IHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX1RJTUUgICAgICAgICAgICB0aW1lIC8qKjwgRGVmYXVsdCB0aW1lIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZC4gTUJFRFRMU19IQVZFX1RJTUUgbXVzdCBiZSBlbmFibGVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URiAgICAgIGZwcmludGYgLyoqPCBEZWZhdWx0IGZwcmludGYgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfUFJJTlRGICAgICAgICBwcmludGYgLyoqPCBEZWZhdWx0IHByaW50ZiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8qIE5vdGU6IHlvdXIgc25wcmludGYgbXVzdCBjb3JyZWNsdHkgemVyby10ZXJtaW5hdGUgdGhlIGJ1ZmZlciEgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URiAgICBzbnByaW50ZiAvKio8IERlZmF1bHQgc25wcmludGYgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVF9TVUNDRVNTICAgICAgIDAgLyoqPCBEZWZhdWx0IGV4aXQgdmFsdWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVF9GQUlMVVJFICAgICAgIDEgLyoqPCBEZWZhdWx0IGV4aXQgdmFsdWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9SRUFEICAgbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF9yZWFkIC8qKjwgRGVmYXVsdCBudl9zZWVkX3JlYWQgZnVuY3Rpb24gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9XUklURSAgbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF93cml0ZSAvKio8IERlZmF1bHQgbnZfc2VlZF93cml0ZSBmdW5jdGlvbiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX0ZJTEUgICJzZWVkZmlsZSIgLyoqPCBTZWVkIGZpbGUgdG8gcmVhZC93cml0ZSB3aXRoIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gKi8KKworLyogVG8gVXNlIEZ1bmN0aW9uIE1hY3JvcyBNQkVEVExTX1BMQVRGT1JNX0MgbXVzdCBiZSBlbmFibGVkICovCisvKiBNQkVEVExTX1BMQVRGT1JNX1hYWF9NQUNSTyBhbmQgTUJFRFRMU19QTEFURk9STV9YWFhfQUxUIGNhbm5vdCBib3RoIGJlIGRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0NBTExPQ19NQUNSTyAgICAgICAgY2FsbG9jIC8qKjwgRGVmYXVsdCBhbGxvY2F0b3IgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9GUkVFX01BQ1JPICAgICAgICAgICAgZnJlZSAvKio8IERlZmF1bHQgZnJlZSBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0VYSVRfTUFDUk8gICAgICAgICAgICBleGl0IC8qKjwgRGVmYXVsdCBleGl0IG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fVElNRV9NQUNSTyAgICAgICAgICAgIHRpbWUgLyoqPCBEZWZhdWx0IHRpbWUgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkLiBNQkVEVExTX0hBVkVfVElNRSBtdXN0IGJlIGVuYWJsZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1RJTUVfVFlQRV9NQUNSTyAgICAgICB0aW1lX3QgLyoqPCBEZWZhdWx0IHRpbWUgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkLiBNQkVEVExTX0hBVkVfVElNRSBtdXN0IGJlIGVuYWJsZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfTUFDUk8gICAgICBmcHJpbnRmIC8qKjwgRGVmYXVsdCBmcHJpbnRmIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX01BQ1JPICAgICAgICBwcmludGYgLyoqPCBEZWZhdWx0IHByaW50ZiBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8qIE5vdGU6IHlvdXIgc25wcmludGYgbXVzdCBjb3JyZWNsdHkgemVyby10ZXJtaW5hdGUgdGhlIGJ1ZmZlciEgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPICAgIHNucHJpbnRmIC8qKjwgRGVmYXVsdCBzbnByaW50ZiBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfUkVBRF9NQUNSTyAgIG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfcmVhZCAvKio8IERlZmF1bHQgbnZfc2VlZF9yZWFkIGZ1bmN0aW9uIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9XUklURV9NQUNSTyAgbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF93cml0ZSAvKio8IERlZmF1bHQgbnZfc2VlZF93cml0ZSBmdW5jdGlvbiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKworLyogU1NMIENhY2hlIG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX1RJTUVPVVQgICAgICAgODY0MDAgLyoqPCAxIGRheSAgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX01BWF9FTlRSSUVTICAgICAgNTAgLyoqPCBNYXhpbXVtIGVudHJpZXMgaW4gY2FjaGUgKi8KKworLyogU1NMIG9wdGlvbnMgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICAgICAgICAgICAgIDc2OCAvKio8IE1heGl1bSBmcmFnbWVudCBsZW5ndGggaW4gYnl0ZXMsIGRldGVybWluZXMgdGhlIHNpemUgb2YgZWFjaCBvZiB0aGUgdHdvIGludGVybmFsIEkvTyBidWZmZXJzICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfREVGQVVMVF9USUNLRVRfTElGRVRJTUUgICAgIDg2NDAwIC8qKjwgTGlmZXRpbWUgb2Ygc2Vzc2lvbiB0aWNrZXRzIChpZiBlbmFibGVkKSAqLworLy8jZGVmaW5lIE1CRURUTFNfUFNLX01BWF9MRU4gICAgICAgICAgICAgICAzMiAvKio8IE1heCBzaXplIG9mIFRMUyBwcmUtc2hhcmVkIGtleXMsIGluIGJ5dGVzIChkZWZhdWx0IDI1NiBiaXRzKSAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0NPT0tJRV9USU1FT1VUICAgICAgICA2MCAvKio8IERlZmF1bHQgZXhwaXJhdGlvbiBkZWxheSBvZiBEVExTIGNvb2tpZXMsIGluIHNlY29uZHMgaWYgSEFWRV9USU1FLCBvciBpbiBudW1iZXIgb2YgY29va2llcyBpc3N1ZWQgKi8KKworLyoqCisgKiBDb21wbGV0ZSBsaXN0IG9mIGNpcGhlcnN1aXRlcyB0byB1c2UsIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCisgKgorICogXHdhcm5pbmcgTm8gZGVwZW5kZW5jeSBjaGVja2luZyBpcyBkb25lIG9uIHRoYXQgZmllbGQhIFRoaXMgb3B0aW9uIGNhbiBvbmx5CisgKiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBzZXQgb2YgYXZhaWxhYmxlIGNpcGhlcnN1aXRlcy4gSXQgaXMgeW91cgorICogcmVzcG9uc2liaWxpdHkgdG8gbWFrZSBzdXJlIHRoZSBuZWVkZWQgbW9kdWxlcyBhcmUgYWN0aXZlLgorICoKKyAqIFVzZSB0aGlzIHRvIHNhdmUgYSBmZXcgaHVuZHJlZCBieXRlcyBvZiBST00gKGRlZmF1bHQgb3JkZXJpbmcgb2YgYWxsCisgKiBhdmFpbGFibGUgY2lwaGVyc3VpdGVzKSBhbmQgYSBmZXcgdG8gYSBmZXcgaHVuZHJlZCBieXRlcyBvZiBSQU0uCisgKgorICogVGhlIHZhbHVlIGJlbG93IGlzIG9ubHkgYW4gZXhhbXBsZSwgbm90IHRoZSBkZWZhdWx0LgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUyBNQkVEVExTX1RMU19FQ0pQQUtFX1dJVEhfQUVTXzEyOF9DQ01fOAorCisvKiBYNTA5IG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQSAgIDggICAvKio8IE1heGltdW0gbnVtYmVyIG9mIGludGVybWVkaWF0ZSBDQXMgaW4gYSB2ZXJpZmljYXRpb24gY2hhaW4uICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X01BWF9GSUxFX1BBVEhfTEVOICAgICA1MTIgLyoqPCBNYXhpbXVtIGxlbmd0aCBvZiBhIHBhdGgvZmlsZW5hbWUgc3RyaW5nIGluIGJ5dGVzIGluY2x1ZGluZyB0aGUgbnVsbCB0ZXJtaW5hdG9yIGNoYXJhY3RlciAoJ1wwJykuICovCisKKy8qIFx9IG5hbWUgU0VDVElPTjogQ3VzdG9taXNhdGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KKworLyogVGFyZ2V0IGFuZCBhcHBsaWNhdGlvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyAqLworLy8jZGVmaW5lIFlPVFRBX0NGR19NQkVEVExTX1RBUkdFVF9DT05GSUdfRklMRSAibWJlZHRscy90YXJnZXRfY29uZmlnLmgiCisKKyNpZiBkZWZpbmVkKFRBUkdFVF9MSUtFX01CRUQpICYmIGRlZmluZWQoWU9UVEFfQ0ZHX01CRURUTFNfVEFSR0VUX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgWU9UVEFfQ0ZHX01CRURUTFNfVEFSR0VUX0NPTkZJR19GSUxFCisjZW5kaWYKKworLyoKKyAqIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgYW55IHByZXZpb3VzIGRlZmF1bHQuCisgKgorICogVXNlIHR3byBtYWNybyBuYW1lcyBmb3IgdGhhdCwgYXM6CisgKiAtIHdpdGggeW90dGEgdGhlIHByZWZpeCBZT1RUQV9DRkdfIGlzIGZvcmNlZAorICogLSB3aXRob3V0IHlvdHRhIGlzIGxvb2tzIHdlaXJkIHRvIGhhdmUgYSBZT1RUQSBwcmVmaXguCisgKi8KKyNpZiBkZWZpbmVkKFlPVFRBX0NGR19NQkVEVExTX1VTRVJfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSBZT1RUQV9DRkdfTUJFRFRMU19VU0VSX0NPTkZJR19GSUxFCisjZWxpZiBkZWZpbmVkKE1CRURUTFNfVVNFUl9DT05GSUdfRklMRSkKKyNpbmNsdWRlIE1CRURUTFNfVVNFUl9DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzL2NoZWNrX2NvbmZpZy5oIgorCisjZW5kaWYgLyogTUJFRFRMU19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9wYXRjaC8wMDAxLUZpeC1jb21taXNzaW9uaW5nLXByb2JsZW0td2l0aC1yZXRyYW5zbWlzc2lvbnMucGF0Y2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3BhdGNoLzAwMDEtRml4LWNvbW1pc3Npb25pbmctcHJvYmxlbS13aXRoLXJldHJhbnNtaXNzaW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWU1MWFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9wYXRjaC8wMDAxLUZpeC1jb21taXNzaW9uaW5nLXByb2JsZW0td2l0aC1yZXRyYW5zbWlzc2lvbnMucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF90bHMuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF90bHMuYworaW5kZXggODRhMDRhZS4uMjE1M2M4MCAxMDA2NDQKKy0tLSBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF90bHMuYworKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3Rscy5jCitAQCAtMzYwOCw2ICszNjA4LDI0IEBAIHN0YXRpYyBpbnQgc3NsX3BhcnNlX3JlY29yZF9oZWFkZXIoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAlZCwgcmVjZWl2ZWQgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX2Vwb2NoLCByZWNfZXBvY2ggKSApOworIAorKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorKyAgICAgICAgICAgIC8qCisrICAgICAgICAgICAgICogQ2hlY2sgZm9yIGFuIGVwb2NoIDAgQ2hhbmdlIENpcGhlciBTcGVjIHJldHJhbnNtaXNzaW9uLgorKyAgICAgICAgICAgICAqLworKyAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiAmJgorKyAgICAgICAgICAgICAgICBzc2wtPnN0YXRlID09IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSICYmCisrICAgICAgICAgICAgICAgIHJlY19lcG9jaCA9PSAwICYmCisrICAgICAgICAgICAgICAgIHNzbC0+aW5fZXBvY2ggPT0gMSAmJgorKyAgICAgICAgICAgICAgICBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSAmJgorKyAgICAgICAgICAgICAgICBzc2wtPmluX2xlZnQgPiAxMyAmJgorKyAgICAgICAgICAgICAgICBzc2wtPmluX2J1ZlsxM10gPT0gTUJFRFRMU19TU0xfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSApCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInBvc3NpYmxlIENsaWVudCBLZXkgRXhjaGFuZ2UgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHJhbnNtaXNzaW9uIiApICk7CisrICAgICAgICAgICAgICAgIHJldHVybiggbWJlZHRsc19zc2xfcmVzZW5kKCBzc2wgKSApOworKyAgICAgICAgICAgIH0KKysjZW5kaWYKKysKKyAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICogQ2hlY2sgZm9yIGFuIGVwb2NoIDAgQ2xpZW50SGVsbG8uIFdlIGNhbid0IHVzZSBpbl9tc2cgaGVyZSB0bworQEAgLTM3MzcsNyArMzc1NSw4IEBAIGludCBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKKyAKKyAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRsZV9tZXNzYWdlX3R5cGUoIHNzbCApOworIAorLSAgICB9IHdoaWxlKCBNQkVEVExTX0VSUl9TU0xfTk9OX0ZBVEFMID09IHJldCApOworKyAgICB9IHdoaWxlKCBNQkVEVExTX0VSUl9TU0xfTk9OX0ZBVEFMID09IHJldCB8fAorKyAgICAgICAgICAgICAoIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgPT0gcmV0ICYmIHNzbC0+aW5fbXNnbGVuICkgKTsKKyAKKyAgICAgaWYoIDAgIT0gcmV0ICkKKyAgICAgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9wYXRjaC8wMDAyLUZpeC13YXJuaW5nLWRlYWQtc3RvcmUucGF0Y2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3BhdGNoLzAwMDItRml4LXdhcm5pbmctZGVhZC1zdG9yZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWMxYWUzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9wYXRjaC8wMDAyLUZpeC13YXJuaW5nLWRlYWQtc3RvcmUucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9zcnYuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9zcnYuYworaW5kZXggZmMwZDJkN2IuLmZhZDU0ZGQ4IDEwMDY0NAorLS0tIGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3Nydi5jCisrKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfc3J2LmMKK0BAIC0zMDE3LDYgKzMwMTcsOSBAQCBjdXJ2ZV9tYXRjaGluZ19kb25lOgorICAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCB8fAorICAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEICovCisgCisrICAgIC8vIG1hc2sgZGVhZCBzdG9yZSBvZiBwCisrICAgICh2b2lkKXA7CisrCisgICAgIHNzbC0+b3V0X21zZ2xlbiAgPSA0ICsgbjsKKyAgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U7CisgICAgIHNzbC0+b3V0X21zZ1swXSAgPSBNQkVEVExTX1NTTF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvLy50cmF2aXMueW1sIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvLy50cmF2aXMueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMDFlNWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vLnRyYXZpcy55bWwKQEAgLTAsMCArMSwzOSBAQAorbGFuZ3VhZ2U6IGMKK2NvbXBpbGVyOgorLSBjbGFuZworLSBnY2MKK3N1ZG86IGZhbHNlCitjYWNoZTogY2NhY2hlCitzY3JpcHQ6CistIHRlc3RzL3NjcmlwdHMvcmVjdXJzaW9uLnBsIGxpYnJhcnkvKi5jCistIHRlc3RzL3NjcmlwdHMvY2hlY2stZ2VuZXJhdGVkLWZpbGVzLnNoCistIHRlc3RzL3NjcmlwdHMvY2hlY2stZG94eS1ibG9ja3MucGwKKy0gdGVzdHMvc2NyaXB0cy9jaGVjay1uYW1lcy5zaAorLSB0ZXN0cy9zY3JpcHRzL2RveHlnZW4uc2gKKy0gY21ha2UgLUQgQ01BS0VfQlVJTERfVFlQRTpTdHJpbmc9IkNoZWNrIiAuCistIG1ha2UKKy0gbWFrZSB0ZXN0CistIHByb2dyYW1zL3Rlc3Qvc2VsZnRlc3QKKy0gT1NTTF9OT19EVExTPTEgdGVzdHMvY29tcGF0LnNoCistIHRlc3RzL3NzbC1vcHQuc2ggLWUgJ1woRFRMU1x8U0NTVlwpLipvcGVuc3NsJworLSB0ZXN0cy9zY3JpcHRzL3Rlc3QtcmVmLWNvbmZpZ3MucGwKKy0gdGVzdHMvc2NyaXB0cy9jdXJ2ZXMucGwKKy0gdGVzdHMvc2NyaXB0cy9rZXktZXhjaGFuZ2VzLnBsCithZnRlcl9mYWlsdXJlOgorLSB0ZXN0cy9zY3JpcHRzL3RyYXZpcy1sb2ctZmFpbHVyZS5zaAorZW52OgorICBnbG9iYWw6CisgICAgc2VjdXJlOiAiYmFySGxkbmlBZlh5b1dPRC92Y08rRTYvWG00Zm1jYVVvQzlCZUtXK0x3c0hxbERNTHZ1Z2FKbm1MWGtTcGtiWWhWTDYxSHpmM2JvMEtQSm44OEFGYzVSa2Y4b1lIUGpINGFkTW5WWGtmM0I5Z2hIQ2d6bnFIc0FIM2Nob282dG5QeGFGZ093T1ltTEdiMzgyblF4ZkU1bFVkdm5NL1cvcHNRald0NjZBMStrPSIKKworYWRkb25zOgorICBhcHQ6CisgICAgcGFja2FnZXM6CisgICAgLSBkb3h5Z2VuCisgICAgLSBncmFwaHZpegorICBjb3Zlcml0eV9zY2FuOgorICAgIHByb2plY3Q6CisgICAgICBuYW1lOiAiQVJNbWJlZC9tYmVkdGxzIgorICAgIG5vdGlmaWNhdGlvbl9lbWFpbDogcC5qLmJha2tlckBwb2xhcnNzbC5vcmcKKyAgICBidWlsZF9jb21tYW5kX3ByZXBlbmQ6CisgICAgYnVpbGRfY29tbWFuZDogbWFrZQorICAgIGJyYW5jaF9wYXR0ZXJuOiBjb3Zlcml0eV9zY2FuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vQ01ha2VMaXN0cy50eHQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlYmZjMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE2NCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuNikKK3Byb2plY3QoIm1iZWQgVExTIiBDKQorCitvcHRpb24oVVNFX1BLQ1MxMV9IRUxQRVJfTElCUkFSWSAiQnVpbGQgbWJlZCBUTFMgd2l0aCB0aGUgcGtjczExLWhlbHBlciBsaWJyYXJ5LiIgT0ZGKQorb3B0aW9uKEVOQUJMRV9aTElCX1NVUFBPUlQgIkJ1aWxkIG1iZWQgVExTIHdpdGggemxpYiBsaWJyYXJ5LiIgT0ZGKQorCitvcHRpb24oRU5BQkxFX1BST0dSQU1TICJCdWlsZCBtYmVkIFRMUyBwcm9ncmFtcy4iIE9OKQorCitvcHRpb24oVU5TQUZFX0JVSUxEICJBbGxvdyB1bnNhZmUgYnVpbGRzLiBUaGVzZSBidWlsZHMgQVJFIE5PVCBTRUNVUkUuIiBPRkYpCisKKyMgdGhlIHRlc3Qgc3VpdGVzIGN1cnJlbnRseSBoYXZlIGNvbXBpbGUgZXJyb3JzIHdpdGggTVNWQworaWYoTVNWQykKKyAgICBvcHRpb24oRU5BQkxFX1RFU1RJTkcgIkJ1aWxkIG1iZWQgVExTIHRlc3RzLiIgT0ZGKQorZWxzZSgpCisgICAgb3B0aW9uKEVOQUJMRV9URVNUSU5HICJCdWlsZCBtYmVkIFRMUyB0ZXN0cy4iIE9OKQorZW5kaWYoKQorCisjIFdhcm5pbmcgc3RyaW5nIC0gY3JlYXRlZCBhcyBhIGxpc3QgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSAyLjgKK3NldChXQVJOSU5HX0JPUkRFUiAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikKK3NldChOVUxMX0VOVFJPUFlfV0FSTl9MMSAiKioqKiAgV0FSTklORyEgIE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgZGVmaW5lZCFcbiIpCitzZXQoTlVMTF9FTlRST1BZX1dBUk5fTDIgIioqKiogIFRISVMgQlVJTEQgSEFTIE5PIERFRklORUQgRU5UUk9QWSBTT1VSQ0VTXG4iKQorc2V0KE5VTExfRU5UUk9QWV9XQVJOX0wzICIqKioqICBBTkQgSVMgKk5PVCogU1VJVEFCTEUgRk9SIFBST0RVQ1RJT04gVVNFXG4iKQorCitzZXQoTlVMTF9FTlRST1BZX1dBUk5JTkcgIiR7V0FSTklOR19CT1JERVJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICIke05VTExfRU5UUk9QWV9XQVJOX0wxfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJHtOVUxMX0VOVFJPUFlfV0FSTl9MMn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiR7TlVMTF9FTlRST1BZX1dBUk5fTDN9IgorICAgICAgICAgICAgICAgICAgICAgICAgICIke1dBUk5JTkdfQk9SREVSfSIpCisKK2ZpbmRfcGFja2FnZShQZXJsKQoraWYoUEVSTF9GT1VORCkKKworICAgICMgSWYgTlVMTCBFbnRyb3B5IGlzIGNvbmZpZ3VyZWQsIGRpc3BsYXkgYW4gYXBwcm9wcmlhdGUgd2FybmluZworICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAke0NNQUtFX1NPVVJDRV9ESVJ9L3NjcmlwdHMvY29uZmlnLnBsIC1mICR7Q01BS0VfU09VUkNFX0RJUn0vaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oIGdldCBNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZCisgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0KQorICAgIGlmKCR7cmVzdWx0fSBFUVVBTCAwKQorICAgICAgICBtZXNzYWdlKFdBUk5JTkcgJHtOVUxMX0VOVFJPUFlfV0FSTklOR30pCisKKyAgICAgICAgaWYoTk9UIFVOU0FGRV9CVUlMRCkKKyAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlwKK1xuXAorV2FybmluZyEgWW91IGhhdmUgZW5hYmxlZCBNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZLiBcCitUaGlzIG9wdGlvbiBpcyBub3Qgc2FmZSBmb3IgcHJvZHVjdGlvbiB1c2UgYW5kIG5lZ2F0ZXMgYWxsIHNlY3VyaXR5IFwKK0l0IGlzIGludGVuZGVkIGZvciBkZXZlbG9wbWVudCB1c2Ugb25seS4gXAorXG5cCitUbyBjb25maXJtIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggdGhpcyBvcHRpb24sIHJlLXJ1biBjbWFrZSB3aXRoIHRoZSBcCitvcHRpb246IFxuXAorICBjbWFrZSAtRFVOU0FGRV9CVUlMRD1PTiAiKQorCisgICAgICAgICAgICByZXR1cm4oKQorICAgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorZW5kaWYoKQorCitzZXQoQ01BS0VfQlVJTERfVFlQRSAke0NNQUtFX0JVSUxEX1RZUEV9CisgICAgQ0FDSEUgU1RSSU5HICJDaG9vc2UgdGhlIHR5cGUgb2YgYnVpbGQ6IE5vbmUgRGVidWcgUmVsZWFzZSBDb3ZlcmFnZSBBU2FuIEFTYW5EYmcgTWVtU2FuIE1lbVNhbkRiZyBDaGVjayBDaGVja0Z1bGwiCisgICAgRk9SQ0UpCisKK3N0cmluZyhSRUdFWCBNQVRDSCAiQ2xhbmciIENNQUtFX0NPTVBJTEVSX0lTX0NMQU5HICIke0NNQUtFX0NfQ09NUElMRVJfSUR9IikKKworaWYoQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MpCisgICAgIyBzb21lIHdhcm5pbmdzIHdlIHdhbnQgYXJlIG5vdCBhdmFpbGFibGUgd2l0aCBvbGQgR0NDIHZlcnNpb25zCisgICAgIyBub3RlOiBzdGFydGluZyB3aXRoIENNYWtlIDIuOCB3ZSBjb3VsZCB1c2UgQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OCisgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DX0NPTVBJTEVSfSAtZHVtcHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIEdDQ19WRVJTSU9OKQorICAgIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1XYWxsIC1XZXh0cmEgLVcgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgLVd3cml0ZS1zdHJpbmdzIikKKyAgICBpZiAoR0NDX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSIDQuNSBPUiBHQ0NfVkVSU0lPTiBWRVJTSU9OX0VRVUFMIDQuNSkKKyAgICAgICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVdsb2dpY2FsLW9wIikKKyAgICBlbmRpZigpCisgICAgaWYgKEdDQ19WRVJTSU9OIFZFUlNJT05fR1JFQVRFUiA0LjggT1IgR0NDX1ZFUlNJT04gVkVSU0lPTl9FUVVBTCA0LjgpCisgICAgICAgIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1Xc2hhZG93IikKKyAgICBlbmRpZigpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfUkVMRUFTRSAgICAgIi1PMiIpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfREVCVUcgICAgICAgIi1PMCAtZzMiKQorICAgIHNldChDTUFLRV9DX0ZMQUdTX0NPVkVSQUdFICAgICItTzAgLWczIC0tY292ZXJhZ2UiKQorICAgIHNldChDTUFLRV9DX0ZMQUdTX0FTQU4gICAgICAgICItV2Vycm9yIC1mc2FuaXRpemU9YWRkcmVzcyAtZm5vLWNvbW1vbiAtTzMiKQorICAgIHNldChDTUFLRV9DX0ZMQUdTX0FTQU5EQkcgICAgICItV2Vycm9yIC1mc2FuaXRpemU9YWRkcmVzcyAtZm5vLWNvbW1vbiAtTzEgLWczIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tb3B0aW1pemUtc2libGluZy1jYWxscyAiKQorICAgIHNldChDTUFLRV9DX0ZMQUdTX0NIRUNLICAgICAgICItV2Vycm9yIC1PcyIpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfQ0hFQ0tGVUxMICAgIiR7Q01BS0VfQ19GTEFHU19DSEVDS30gLVdjYXN0LXF1YWwiKQorZW5kaWYoQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MpCisKK2lmKENNQUtFX0NPTVBJTEVSX0lTX0NMQU5HKQorICAgIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1XYWxsIC1XZXh0cmEgLVcgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgLVd3cml0ZS1zdHJpbmdzIC1XcG9pbnRlci1hcml0aCAtV2ltcGxpY2l0LWZhbGx0aHJvdWdoIC1Xc2hhZG93IikKKyAgICBzZXQoQ01BS0VfQ19GTEFHU19SRUxFQVNFICAgICAiLU8yIikKKyAgICBzZXQoQ01BS0VfQ19GTEFHU19ERUJVRyAgICAgICAiLU8wIC1nMyIpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfQ09WRVJBR0UgICAgIi1PMCAtZzMgLS1jb3ZlcmFnZSIpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfQVNBTiAgICAgICAgIi1XZXJyb3IgLWZzYW5pdGl6ZT1hZGRyZXNzIC1mbm8tY29tbW9uIC1mc2FuaXRpemU9dW5kZWZpbmVkIC1mbm8tc2FuaXRpemUtcmVjb3ZlciAtTzMiKQorICAgIHNldChDTUFLRV9DX0ZMQUdTX0FTQU5EQkcgICAgICItV2Vycm9yIC1mc2FuaXRpemU9YWRkcmVzcyAtZm5vLWNvbW1vbiAtZnNhbml0aXplPXVuZGVmaW5lZCAtZm5vLXNhbml0aXplLXJlY292ZXIgLU8xIC1nMyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZm5vLW9wdGltaXplLXNpYmxpbmctY2FsbHMgIikKKyAgICBzZXQoQ01BS0VfQ19GTEFHU19NRU1TQU4gICAgICAiLVdlcnJvciAtZnNhbml0aXplPW1lbW9yeSAtTzMiKQorICAgIHNldChDTUFLRV9DX0ZMQUdTX01FTVNBTkRCRyAgICItV2Vycm9yIC1mc2FuaXRpemU9bWVtb3J5IC1PMSAtZzMgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1vcHRpbWl6ZS1zaWJsaW5nLWNhbGxzIC1mc2FuaXRpemUtbWVtb3J5LXRyYWNrLW9yaWdpbnM9MiIpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfQ0hFQ0sgICAgICAgIi1XZXJyb3IgLU9zIikKK2VuZGlmKENNQUtFX0NPTVBJTEVSX0lTX0NMQU5HKQorCitpZihNU1ZDKQorICAgIHNldChDTUFLRV9DX0ZMQUdTX0NIRUNLICAgICAgICIvV1giKQorZW5kaWYoTVNWQykKKworaWYoQ01BS0VfQlVJTERfVFlQRSBTVFJFUVVBTCAiQ292ZXJhZ2UiKQorICAgIGlmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDIE9SIENNQUtFX0NPTVBJTEVSX0lTX0NMQU5HKQorICAgICAgICBzZXQoQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHUyAiLS1jb3ZlcmFnZSIpCisgICAgZW5kaWYoQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MgT1IgQ01BS0VfQ09NUElMRVJfSVNfQ0xBTkcpCitlbmRpZihDTUFLRV9CVUlMRF9UWVBFIFNUUkVRVUFMICJDb3ZlcmFnZSIpCisKK2lmKExJQl9JTlNUQUxMX0RJUikKK2Vsc2UoKQorICAgIHNldChMSUJfSU5TVEFMTF9ESVIgbGliKQorZW5kaWYoKQorCitpbmNsdWRlX2RpcmVjdG9yaWVzKGluY2x1ZGUvKQorCitpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorICAgIGZpbmRfcGFja2FnZShaTElCKQorCisgICAgaWYoWkxJQl9GT1VORCkKKyAgICAgICAgaW5jbHVkZV9kaXJlY3Rvcmllcygke1pMSUJfSU5DTFVERV9ESVJ9KQorICAgIGVuZGlmKFpMSUJfRk9VTkQpCitlbmRpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorCithZGRfc3ViZGlyZWN0b3J5KGxpYnJhcnkpCithZGRfc3ViZGlyZWN0b3J5KGluY2x1ZGUpCisKK2lmKEVOQUJMRV9QUk9HUkFNUykKKyAgICBhZGRfc3ViZGlyZWN0b3J5KHByb2dyYW1zKQorZW5kaWYoKQorCitBRERfQ1VTVE9NX1RBUkdFVChhcGlkb2MKKyAgICBDT01NQU5EIGRveHlnZW4gZG94eWdlbi9tYmVkdGxzLmRveHlmaWxlCisgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9KQorCitpZihFTkFCTEVfVEVTVElORykKKyAgICBlbmFibGVfdGVzdGluZygpCisKKyAgICBhZGRfc3ViZGlyZWN0b3J5KHRlc3RzKQorCisgICAgIyBhZGRpdGlvbmFsIGNvbnZlbmllbmNlIHRhcmdldHMgZm9yIFVuaXggb25seQorICAgIGlmKFVOSVgpCisKKyAgICAgICAgQUREX0NVU1RPTV9UQVJHRVQoY292dGVzdAorICAgICAgICAgICAgQ09NTUFORCBtYWtlIHRlc3QKKyAgICAgICAgICAgIENPTU1BTkQgcHJvZ3JhbXMvdGVzdC9zZWxmdGVzdAorICAgICAgICAgICAgQ09NTUFORCB0ZXN0cy9jb21wYXQuc2gKKyAgICAgICAgICAgIENPTU1BTkQgdGVzdHMvc3NsLW9wdC5zaAorICAgICAgICApCisKKyAgICAgICAgQUREX0NVU1RPTV9UQVJHRVQobGNvdgorICAgICAgICAgICAgQ09NTUFORCBybSAtcmYgQ292ZXJhZ2UKKyAgICAgICAgICAgIENPTU1BTkQgbGNvdiAtLWNhcHR1cmUgLS1pbml0aWFsIC0tZGlyZWN0b3J5IGxpYnJhcnkvQ01ha2VGaWxlcy9tYmVkdGxzLmRpciAtbyBmaWxlcy5pbmZvCisgICAgICAgICAgICBDT01NQU5EIGxjb3YgLS1jYXB0dXJlIC0tZGlyZWN0b3J5IGxpYnJhcnkvQ01ha2VGaWxlcy9tYmVkdGxzLmRpciAtbyB0ZXN0cy5pbmZvCisgICAgICAgICAgICBDT01NQU5EIGxjb3YgLS1hZGQtdHJhY2VmaWxlIGZpbGVzLmluZm8gLS1hZGQtdHJhY2VmaWxlIHRlc3RzLmluZm8gLW8gYWxsLmluZm8KKyAgICAgICAgICAgIENPTU1BTkQgbGNvdiAtLXJlbW92ZSBhbGwuaW5mbyAtbyBmaW5hbC5pbmZvICcqLmgnCisgICAgICAgICAgICBDT01NQU5EIGdlbmRlc2MgdGVzdHMvRGVzY3JpcHRpb25zLnR4dCAtbyBkZXNjcmlwdGlvbnMKKyAgICAgICAgICAgIENPTU1BTkQgZ2VuaHRtbCAtLXRpdGxlICJtYmVkIFRMUyIgLS1kZXNjcmlwdGlvbi1maWxlIGRlc2NyaXB0aW9ucyAtLWtlZXAtZGVzY3JpcHRpb25zIC0tbGVnZW5kIC0tbm8tYnJhbmNoLWNvdmVyYWdlIC1vIENvdmVyYWdlIGZpbmFsLmluZm8KKyAgICAgICAgICAgIENPTU1BTkQgcm0gLWYgZmlsZXMuaW5mbyB0ZXN0cy5pbmZvIGFsbC5pbmZvIGZpbmFsLmluZm8gZGVzY3JpcHRpb25zCisgICAgICAgICkKKworICAgICAgICBBRERfQ1VTVE9NX1RBUkdFVChtZW1jaGVjaworICAgICAgICAgICAgQ09NTUFORCBzZWQgLWkuYmFrIHMrL3Vzci9iaW4vdmFsZ3JpbmQrYHdoaWNoIHZhbGdyaW5kYCsgRGFydENvbmZpZ3VyYXRpb24udGNsCisgICAgICAgICAgICBDT01NQU5EIGN0ZXN0IC1PIG1lbWNoZWNrLmxvZyAtRCBFeHBlcmltZW50YWxNZW1DaGVjaworICAgICAgICAgICAgQ09NTUFORCB0YWlsIC1uMSBtZW1jaGVjay5sb2cgfCBncmVwICdNZW1vcnkgY2hlY2tpbmcgcmVzdWx0czonID4gL2Rldi9udWxsCisgICAgICAgICAgICBDT01NQU5EIHJtIC1mIG1lbWNoZWNrLmxvZworICAgICAgICAgICAgQ09NTUFORCBtdiBEYXJ0Q29uZmlndXJhdGlvbi50Y2wuYmFrIERhcnRDb25maWd1cmF0aW9uLnRjbAorICAgICAgICApCisgICAgZW5kaWYoVU5JWCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9DaGFuZ2VMb2cgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODU3YmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vQ2hhbmdlTG9nCkBAIC0wLDAgKzEsMjA4NCBAQAorbWJlZCBUTFMgQ2hhbmdlTG9nIChTb3J0ZWQgcGVyIGJyYW5jaCwgZGF0ZSkKKworPSBtYmVkIFRMUyAyLjQuMSBicmFuY2ggcmVsZWFzZWQgMjAxNi0xMi0xMworCitDaGFuZ2VzCisgICAqIFVwZGF0ZSB0byBDTUFDIHRlc3QgZGF0YSwgdGFrZW4gZnJvbSAtIE5JU1QgU3BlY2lhbCBQdWJsaWNhdGlvbiA4MDAtMzhCIC0KKyAgICAgUmVjb21tZW5kYXRpb24gZm9yIEJsb2NrIENpcGhlciBNb2RlcyBvZiBPcGVyYXRpb246IFRoZSBDTUFDIE1vZGUgZm9yCisgICAgIEF1dGhlbnRpY2F0aW9uIOKAkyBPY3RvYmVyICAyMDE2CisKKz0gbWJlZCBUTFMgMi40LjAgYnJhbmNoIHJlbGVhc2VkIDIwMTYtMTAtMTcKKworU2VjdXJpdHkKKyAgICogUmVtb3ZlZCB0aGUgTUJFRFRMU19TU0xfQUVBRF9SQU5ET01fSVYgb3B0aW9uLCBiZWNhdXNlIGl0IHdhcyBub3QgY29tcGxpYW50CisgICAgIHdpdGggUkZDLTUxMTYgYW5kIGNvdWxkIGxlYWQgdG8gc2Vzc2lvbiBrZXkgcmVjb3ZlcnkgaW4gdmVyeSBsb25nIFRMUworICAgICBzZXNzaW9ucy4gIk5vbmNlLURpc3Jlc3BlY3RpbmcgQWR2ZXJzYXJpZXMgUHJhY3RpY2FsIEZvcmdlcnkgQXR0YWNrcyBvbiBHQ00gaW4KKyAgICAgVExTIiAtIEguIEJvY2ssIEEuIFphdW5lciwgUy4gRGV2bGluLCBKLiBTb21vcm92c2t5LCBQLiBKb3Zhbm92aWMuCisgICAgIGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTYvNDc1LnBkZgorICAgKiBGaXhlZCBwb3RlbnRpYWwgc3RhY2sgY29ycnVwdGlvbiBpbiBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfZGVyKCkgYW5kCisgICAgIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9kZXIoKSB3aGVuIHRoZSBzaWduYXR1cmUgaXMgY29waWVkIHRvIHRoZSBidWZmZXIKKyAgICAgd2l0aG91dCBjaGVja2luZyB3aGV0aGVyIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBpbiB0aGUgZGVzdGluYXRpb24uIFRoZQorICAgICBpc3N1ZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIHJlbW90ZWx5LiBGb3VuZCBieSBKZXRocm8gQmVla21hbi4KKworRmVhdHVyZXMKKyAgICogQWRkZWQgc3VwcG9ydCBmb3IgQ01BQyBmb3IgQUVTIGFuZCAzREVTIGFuZCBBRVMtQ01BQy1QUkYtMTI4LCBhcyBkZWZpbmVkIGJ5CisgICAgIE5JU1QgU1AgODAwLTM4QiwgUkZDLTQ0OTMgYW5kIFJGQy00NjE1LgorICAgKiBBZGRlZCBoYXJkd2FyZSBlbnRyb3B5IHNlbGZ0ZXN0IHRvIHZlcmlmeSB0aGF0IHRoZSBoYXJkd2FyZSBlbnRyb3B5IHNvdXJjZQorICAgICBpcyBmdW5jdGlvbmluZyBjb3JyZWN0bHkuCisgICAqIEFkZGVkIGEgc2NyaXB0IHRvIHByaW50IGJ1aWxkIGVudmlyb25tZW50IGluZm8gZm9yIGRpYWdub3N0aWMgdXNlIGluIHRlc3QKKyAgICAgc2NyaXB0cywgd2hpY2ggaXMgYWxzbyBub3cgY2FsbGVkIGJ5IGFsbC5zaC4KKyAgICogQWRkZWQgdGhlIG1hY3JvIE1CRURUTFNfWDUwOV9NQVhfRklMRV9QQVRIX0xFTiB0aGF0IGVuYWJsZXMgdGhlIHVzZXIgdG8KKyAgICAgY29uZmlndXJlIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGZpbGUgcGF0aCB0aGF0IGNhbiBiZSBidWZmZXJlZCB3aGVuCisgICAgIGNhbGxpbmcgbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoKCkuCisgICAqIEFkZGVkIGEgY29uZmlndXJhdGlvbiBmaWxlIGNvbmZpZy1uby1lbnRyb3B5LmggdGhhdCBjb25maWd1cmVzIHRoZSBzdWJzZXQgb2YKKyAgICAgbGlicmFyeSBmZWF0dXJlcyB0aGF0IGRvIG5vdCByZXF1aXJlIGFuIGVudHJvcHkgc291cmNlLgorICAgKiBBZGRlZCB0aGUgbWFjcm8gTUJFRFRMU19FTlRST1BZX01JTl9IQVJEV0FSRSBpbiBjb25maWcuaC4gVGhpcyBhbGxvd3MgdXNlcnMKKyAgICAgdG8gY29uZmlndXJlIHRoZSBtaW5pbXVtIG51bWJlciBvZiBieXRlcyBmb3IgZW50cm9weSBzb3VyY2VzIHVzaW5nIHRoZQorICAgICBtYmVkdGxzX2hhcmR3YXJlX3BvbGwoKSBmdW5jdGlvbi4KKworQnVnZml4CisgICAqIEZpeCBmb3IgcGxhdGZvcm0gdGltZSBhYnN0cmFjdGlvbiB0byBhdm9pZCBkZXBlbmRlbmN5IGlzc3VlcyB3aGVyZSBhIGJ1aWxkCisgICAgIG1heSBuZWVkIHRpbWUgYnV0IG5vdCB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IGFic3RyYWN0aW9uLCBhbmQgYWRkZWQKKyAgICAgY29uZmlndXJhdGlvbiBjb25zaXN0ZW5jeSBjaGVja3MgdG8gY2hlY2tfY29uZmlnLmgKKyAgICogRml4IGRlcGVuZGVuY3kgaXNzdWUgaW4gTWFrZWZpbGUgdG8gYWxsb3cgcGFyYWxsZWwgYnVpbGRzLgorICAgKiBGaXggaW5jb3JyZWN0IGhhbmRsaW5nIG9mIGJsb2NrIGxlbmd0aHMgaW4gY3J5cHRfYW5kX2hhc2guYyBzYW1wbGUgcHJvZ3JhbSwKKyAgICAgd2hlbiBHQ00gaXMgdXNlZC4gRm91bmQgYnkgdWRmMjQ1Ny4gIzQ0MQorICAgKiBGaXggZm9yIGtleSBleGNoYW5nZXMgYmFzZWQgb24gRUNESC1SU0Egb3IgRUNESC1FQ0RTQSB3aGljaCB3ZXJlbid0CisgICAgIGVuYWJsZWQgdW5sZXNzIG90aGVycyB3ZXJlIGFsc28gcHJlc2VudC4gRm91bmQgYnkgRGF2aWQgRmVybmFuZGV6LiAjNDI4CisgICAqIEZpeCBmb3Igb3V0LW9mLXRyZWUgYnVpbGRzIHVzaW5nIENNYWtlLiBGb3VuZCBieSBqd3VyemVyLCBhbmQgZml4IGJhc2VkIG9uCisgICAgIGEgY29udHJpYnV0aW9uIGZyb20gVG9iaWFzIFRhbmdlbWFubi4gIzU0MQorICAgKiBGaXhlZCBjZXJ0X2FwcC5jIHNhbXBsZSBwcm9ncmFtIGZvciBkZWJ1ZyBvdXRwdXQgYW5kIGZvciB1c2Ugd2hlbiBubyByb290CisgICAgIGNlcnRpZmljYXRlcyBhcmUgcHJvdmlkZWQuCisgICAqIEZpeCBjb25kaXRpb25hbCBzdGF0ZW1lbnQgdGhhdCB3b3VsZCBjYXVzZSBhIDEgYnl0ZSBvdmVycmVhZCBpbgorICAgICBtYmVkdGxzX2FzbjFfZ2V0X2ludCgpLiBGb3VuZCBhbmQgZml4ZWQgYnkgR3VpZG8gVnJhbmtlbi4gIzU5OQorICAgKiBGaXhlZCBwdGhyZWFkIGltcGxlbWVudGF0aW9uIHRvIGF2b2lkIHVuaW50ZW5kZWQgZG91YmxlIGluaXRpYWxpc2F0aW9ucworICAgICBhbmQgZG91YmxlIGZyZWVzLiBGb3VuZCBieSBOaWtsYXMgQW1uZWJyYXR0LgorICAgKiBGaXhlZCB0aGUgc2FtcGxlIGFwcGxpY2F0aW9ucyBnZW5fa2V5LmMsIGNlcnRfcmVxLmMgYW5kIGNlcnRfd3JpdGUuYyBmb3IKKyAgICAgYnVpbGRzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIE1CRURUTFNfUEVNX1dSSVRFX0MgaXMgbm90IGRlZmluZWQuIEZvdW5kCisgICAgIGJ5IGluZXN0bGVyb2RlLiAjNTU5LgorICAgKiBGaXggbWJlZHRsc194NTA5X2dldF9zaWcoKSB0byB1cGRhdGUgdGhlIEFTTjEgdHlwZSBpbiB0aGUgbWJlZHRsc194NTA5X2J1ZgorICAgICBkYXRhIHN0cnVjdHVyZSB1bnRpbCBhZnRlciBlcnJvciBjaGVja3MgYXJlIHN1Y2Nlc3NmdWwuIEZvdW5kIGJ5CisgICAgIHN1YnJhbWFueWFtLWMuICM2MjIKKyAgICogRml4IGRvY3VtZW50YXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG1pc3NtYXRjaCBmb3IgZnVuY3Rpb24gYXJndW1lbnRzIG9mCisgICAgIG1iZWR0bHNfZ2NtX2ZpbmlzaCgpLiBGb3VuZCBieSBjbWlhdHBhYXIuICM2MDIKKyAgICogR3VhcmFudGVlIHRoYXQgUD5RIGF0IFJTQSBrZXkgZ2VuZXJhdGlvbi4gRm91bmQgYnkgaW5lc3RsZXJvZGUuICM1NTgKKyAgICogRml4IHBvdGVudGlhbCBieXRlIG92ZXJyZWFkIHdoZW4gdmVyaWZ5aW5nIG1hbGZvcm1lZCBTRVJWRVJfSEVMTE8gaW4KKyAgICAgc3NsX3BhcnNlX2hlbGxvX3ZlcmlmeV9yZXF1ZXN0KCkgZm9yIERUTFMuIEZvdW5kIGJ5IEd1aWRvIFZyYW5rZW4uCisgICAqIEZpeCBjaGVjayBmb3IgdmFsaWRpdHkgb2YgZGF0ZSB3aGVuIHBhcnNpbmcgaW4gbWJlZHRsc194NTA5X2dldF90aW1lKCkuCisgICAgIEZvdW5kIGJ5IHN1YnJhbWFueWFtLWMuICM2MjYKKyAgICogRml4IGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciBjbGllbnQgYXV0aGVudGljYXRpb24sCisgICAgIHdoZXJlIHRoZSBsaW1pdGVkIGhhc2ggY2hvaWNlcyBwcmV2ZW50ZWQgdGhlIGNsaWVudCBmcm9tIHNlbmRpbmcgaXRzCisgICAgIGNlcnRpZmljYXRlLiBGb3VuZCBieSB0ZXVtYXMuICM1MTMKKyAgICogRml4IGNvbXBpbGF0aW9uIHdpdGhvdXQgTUJFRFRMU19TRUxGX1RFU1QgZW5hYmxlZC4KKworQ2hhbmdlcworICAgKiBFeHRlbmRlZCB0ZXN0IGNvdmVyYWdlIG9mIHNwZWNpYWwgY2FzZXMsIGFuZCBhZGRlZCBuZXcgdGltaW5nIHRlc3Qgc3VpdGUuCisgICAqIFJlbW92ZWQgc2VsZi10ZXN0cyBmcm9tIHRoZSBiYXNpYy1idWlsdC10ZXN0LnNoIHNjcmlwdCwgYW5kIGFkZGVkIGFsbAorICAgICBtaXNzaW5nIHNlbGYtdGVzdHMgdG8gdGhlIHRlc3Qgc3VpdGVzLCB0byBlbnN1cmUgc2VsZi10ZXN0cyBhcmUgb25seQorICAgICBleGVjdXRlZCBvbmNlLgorICAgKiBBZGRlZCBzdXBwb3J0IGZvciAzIGFuZCA0IGJ5dGUgbGVuZ3RocyB0byBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCkuCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIGEgWW90dGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIC0KKyAgICAgdGhyb3VnaCB0aGUgc3ltYm9sIFlPVFRBX0NGR19NQkVEVExTX1RBUkdFVF9DT05GSUdfRklMRS4KKyAgICogQWRkZWQgb3B0aW1pemF0aW9uIGZvciBjb2RlIHNwYWNlIGZvciBYLjUwOS9PSUQgYmFzZWQgb24gY29uZmlndXJlZAorICAgICBmZWF0dXJlcy4gQ29udHJpYnV0ZWQgYnkgQXZpdiBQYWxpdm9kYS4KKyAgICogUmVuYW1lZCBzb3VyY2UgZmlsZSBsaWJyYXJ5L25ldC5jIHRvIGxpYnJhcnkvbmV0X3NvY2tldHMuYyB0byBhdm9pZAorICAgICBuYW1pbmcgY29sbGlzaW9uIGluIHByb2plY3RzIHdoaWNoIGFsc28gaGF2ZSBmaWxlcyB3aXRoIHRoZSBjb21tb24gbmFtZQorICAgICBuZXQuYy4gRm9yIGNvbnNpc3RlbmN5LCB0aGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZSwgbmV0LmgsIGlzIG1hcmtlZCBhcworICAgICBkZXByZWNhdGVkLCBhbmQgaXRzIGNvbnRlbnRzIG1vdmVkIHRvIG5ldF9zb2NrZXRzLmguCisgICAqIENoYW5nZWQgdGhlIHN0cmF0ZWd5IGZvciBYLjUwOSBjZXJ0aWZpY2F0ZSBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uLCB0byBubworICAgICBsb25nZXIgZGlzcmVnYXJkIGNlcnRpZmljYXRlcyB3aXRoIHVucmVjb2duaXNlZCBmaWVsZHMuCisKKz0gbWJlZCBUTFMgMi4zLjAgYnJhbmNoIHJlbGVhc2VkIDIwMTYtMDYtMjgKKworU2VjdXJpdHkKKyAgICogRml4IG1pc3NpbmcgcGFkZGluZyBsZW5ndGggY2hlY2sgaW4gbWJlZHRsc19yc2FfcnNhZXNfcGtjczFfdjE1X2RlY3J5cHQKKyAgICAgcmVxdWlyZWQgYnkgUEtDUzEgdjIuMgorICAgKiBGaXggcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdG8gYnVmZmVyIG92ZXJmbG93IGluCisgICAgIG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9lbmNyeXB0IGFuZCBtYmVkdGxzX3JzYV9yc2Flc19vYWVwX2VuY3J5cHQKKyAgICAgKG5vdCB0cmlnZ2VyYWJsZSByZW1vdGVseSBpbiAoRClUTFMpLgorICAgKiBGaXggYSBwb3RlbnRpYWwgaW50ZWdlciB1bmRlcmZsb3cgdG8gYnVmZmVyIG92ZXJyZWFkIGluIAorICAgICBtYmVkdGxzX3JzYV9yc2Flc19vYWVwX2RlY3J5cHQuIEl0IGlzIG5vdCB0cmlnZ2VyYWJsZSByZW1vdGVseSBpbgorICAgICBTU0wvVExTLgorCitGZWF0dXJlcworICAgKiBTdXBwb3J0IGZvciBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBvZiB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IHRpbWUoKQorICAgICBmdW5jdGlvbi4KKworQnVnZml4CisgICAqIEZpeCBidWcgaW4gbWJlZHRsc19tcGlfYWRkX21waSgpIHRoYXQgY2F1c2VkIHdyb25nIHJlc3VsdHMgd2hlbiB0aGUgdGhyZWUKKyAgICAgYXJndW1lbnRzIHdoZXJlIHRoZSBzYW1lIChpbi1wbGFjZSBkb3VibGluZykuIEZvdW5kIGFuZCBmaXhlZCBieSBKYW5vcworICAgICBGb2xsYXRoLiAjMzA5CisgICAqIEZpeCBwb3RlbnRpYWwgYnVpbGQgZmFpbHVyZXMgcmVsYXRlZCB0byB0aGUgJ2FwaWRvYycgdGFyZ2V0LCBpbnRyb2R1Y2VkCisgICAgIGluIHRoZSBwcmV2aW91cyBwYXRjaCByZWxlYXNlLiBGb3VuZCBieSBSb2JlcnQgU2NoZWNrLiAjMzkwICMzOTEKKyAgICogRml4IGlzc3VlIGluIE1ha2VmaWxlIHRoYXQgcHJldmVudGVkIGJ1aWxkaW5nIHVzaW5nIGFybWFyLiAjMzg2CisgICAqIEZpeCBtZW1vcnkgbGVhayB0aGF0IG9jY3VyZWQgb25seSB3aGVuIEVDSlBBS0Ugd2FzIGVuYWJsZWQgYW5kIEVDREhFIGFuZAorICAgICBFQ0RTQSB3YXMgZGlzYWJsZWQgaW4gY29uZmlnLmggLiBUaGUgbGVhayBkaWRuJ3Qgb2NjdXIgYnkgZGVmYXVsdC4KKyAgICogRml4IGFuIGlzc3VlIHRoYXQgY2F1c2VkIHZhbGlkIGNlcnRpZmljYXRlcyB0byBiZSByZWplY3RlZCB3aGVuZXZlciBhbgorICAgICBleHBpcmVkIG9yIG5vdCB5ZXQgdmFsaWQgY2VydGlmaWNhdGUgd2FzIHBhcnNlZCBiZWZvcmUgYSB2YWxpZCBjZXJ0aWZpY2F0ZQorICAgICBpbiB0aGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSBsaXN0LgorICAgKiBGaXggYnVnIGluIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgdGhhdCBjYXVzZWQgdHJhaWxpbmcgZXh0cmEgZGF0YSBpbiB0aGUgCisgICAgIGJ1ZmZlciBhZnRlciBERVIgY2VydGlmaWNhdGVzIHRvIGJlIGluY2x1ZGVkIGluIHRoZSByYXcgcmVwcmVzZW50YXRpb24uCisgICAqIEZpeCBpc3N1ZSB0aGF0IGNhdXNlZCBhIGhhbmcgd2hlbiBnZW5lcmF0aW5nIFJTQSBrZXlzIG9mIG9kZCBiaXRsZW5ndGgKKyAgICogRml4IGJ1ZyBpbiBtYmVkdGxzX3JzYV9yc2Flc19wa2NzMV92MTVfZW5jcnlwdCB0aGF0IG1hZGUgbnVsbCBwb2ludGVyCisgICAgIGRlcmVmZXJlbmNlIHBvc3NpYmxlLgorICAgKiBGaXggaXNzdWUgdGhhdCBjYXVzZWQgYSBjcmFzaCBpZiBpbnZhbGlkIGN1cnZlcyB3ZXJlIHBhc3NlZCB0bworICAgICBtYmVkdGxzX3NzbF9jb25mX2N1cnZlcy4gIzM3MworICAgKiBGaXggaXNzdWUgaW4gc3NsX2Zvcmtfc2VydmVyIHdoaWNoIHdhcyBwcmV2ZW50aW5nIGl0IGZyb20gZnVuY3Rpb25pbmcuICM0MjkKKyAgICogRml4IG1lbW9yeSBsZWFrcyBpbiB0ZXN0IGZyYW1ld29yaworICAgKiBGaXggdGVzdCBpbiBzc2wtb3B0LnNoIHRoYXQgZG9lcyBub3QgcnVuIHByb3Blcmx5IHdpdGggdmFsZ3JpbmQKKyAgICogRml4IHVuY2hlY2tlZCBjYWxscyB0byBtbWJlZHRsc19tZF9zZXR1cCgpLiBGaXggYnkgQnJpYW4gTXVycmF5LiAjNTAyCisKK0NoYW5nZXMKKyAgICogT24gQVJNIHBsYXRmb3Jtcywgd2hlbiBjb21waWxpbmcgd2l0aCAtTzAgd2l0aCBHQ0MsIENsYW5nIG9yIGFybWNjNSwKKyAgICAgZG9uJ3QgdXNlIHRoZSBvcHRpbWl6ZWQgYXNzZW1ibHkgZm9yIGJpZ251bSBtdWx0aXBsaWNhdGlvbi4gVGhpcyByZW1vdmVzCisgICAgIHRoZSBuZWVkIHRvIHBhc3MgLWZvbWl0LWZyYW1lLXBvaW50ZXIgdG8gYXZvaWQgYSBidWlsZCBlcnJvciB3aXRoIC1PMC4KKyAgICogRGlzYWJsZWQgU1NMdjMgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICogT3B0aW1pemVkIG1iZWR0bHNfbXBpX3plcm9pemUoKSBmb3IgTVBJIGludGVnZXIgc2l6ZS4gKEZpeCBieSBBbGV4ZXkKKyAgICAgU2thbG96dWIpLgorICAgKiBGaXggbm9uLWNvbXBsaWFuY2Ugc2VydmVyIGV4dGVuc2lvbiBoYW5kbGluZy4gRXh0ZW5zaW9ucyBmb3IgU1NMdjMgYXJlIG5vdworICAgICBpZ25vcmVkLCBhcyByZXF1aXJlZCBieSBSRkM2MTAxLgorCis9IG1iZWQgVExTIDIuMi4xIHJlbGVhc2VkIDIwMTYtMDEtMDUKKworU2VjdXJpdHkKKyAgICogRml4IHBvdGVudGlhbCBkb3VibGUgZnJlZSB3aGVuIG1iZWR0bHNfYXNuMV9zdG9yZV9uYW1lZF9kYXRhKCkgZmFpbHMgdG8KKyAgICAgYWxsb2NhdGUgbWVtb3J5LiBPbmx5IHVzZWQgZm9yIGNlcnRpZmljYXRlIGdlbmVyYXRpb24sIG5vdCB0cmlnZ2VyYWJsZQorICAgICByZW1vdGVseSBpbiBTU0wvVExTLiBGb3VuZCBieSBSYWZhxYIgUHJ6eXdhcmEuICMzNjcKKyAgICogRGlzYWJsZSBNRDUgaGFuZHNoYWtlIHNpZ25hdHVyZXMgaW4gVExTIDEuMiBieSBkZWZhdWx0IHRvIHByZXZlbnQgdGhlCisgICAgIFNMT1RIIGF0dGFjayBvbiBUTFMgMS4yIHNlcnZlciBhdXRoZW50aWNhdGlvbiAob3RoZXIgYXR0YWNrcyBmcm9tIHRoZQorICAgICBTTE9USCBwYXBlciBkbyBub3QgYXBwbHkgdG8gYW55IHZlcnNpb24gb2YgbWJlZCBUTFMgb3IgUG9sYXJTU0wpLgorICAgICBodHRwczovL3d3dy5taXRscy5vcmcvcGFnZXMvYXR0YWNrcy9TTE9USAorCitCdWdmaXgKKyAgICogRml4IG92ZXItcmVzdHJpY3RpdmUgbGVuZ3RoIGxpbWl0IGluIEdDTS4gRm91bmQgYnkgQW5kcmVhcy1OLiAjMzYyCisgICAqIEZpeCBidWcgaW4gY2VydGlmaWNhdGUgdmFsaWRhdGlvbiB0aGF0IGNhdXNlZCB2YWxpZCBjaGFpbnMgdG8gYmUgcmVqZWN0ZWQKKyAgICAgd2hlbiB0aGUgZmlyc3QgaW50ZXJtZWRpYXRlIGNlcnRpZmljYXRlIGhhcyBwYXRoTGVuQ29uc3RyYWludD0wLiBGb3VuZCBieQorICAgICBOaWNob2xhcyBXaWxzb24uIEludHJvZHVjZWQgaW4gbWJlZCBUTFMgMi4yLjAuICMyODAKKyAgICogUmVtb3ZlZCBwb3RlbnRpYWwgbGVhayBpbiBtYmVkdGxzX3JzYV9yc2Fzc2FfcGtjczFfdjE1X3NpZ24oKSwgZm91bmQgYnkKKyAgICAgSmF5YXJhZ2hhdmVuZHJhbksuICMzNzIKKyAgICogRml4IHN1Ym9wdGltYWwgaGFuZGxpbmcgb2YgdW5leHBlY3RlZCByZWNvcmRzIHRoYXQgY2F1c2VkIGludGVyb3AgaXNzdWVzCisgICAgIHdpdGggc29tZSBwZWVycyBvdmVyIHVucmVsaWFibGUgbGlua3MuIEF2b2lkIGRyb3BwaW5nIGFuIGVudGlyZSBEVExTCisgICAgIGRhdGFncmFtIGlmIGEgc2luZ2xlIHJlY29yZCBpbiBhIGRhdGFncmFtIGlzIHVuZXhwZWN0ZWQsIGluc3RlYWQgb25seQorICAgICBkcm9wIHRoZSByZWNvcmQgYW5kIGxvb2sgYXQgc3Vic2VxdWVudCByZWNvcmRzIChpZiBhbnkgYXJlIHByZXNlbnQpIGluCisgICAgIHRoZSBzYW1lIGRhdGFncmFtLiBGb3VuZCBieSBqZWFubm90bGFwaW4uICMzNDUKKworPSBtYmVkIFRMUyAyLjIuMCByZWxlYXNlZCAyMDE1LTExLTA0CisKK1NlY3VyaXR5CisgICAqIEZpeCBwb3RlbnRpYWwgZG91YmxlIGZyZWUgaWYgbWJlZHRsc19zc2xfY29uZl9wc2soKSBpcyBjYWxsZWQgbW9yZSB0aGFuCisgICAgIG9uY2UgYW5kIHNvbWUgYWxsb2NhdGlvbiBmYWlscy4gQ2Fubm90IGJlIGZvcmNlZCByZW1vdGVseS4gRm91bmQgYnkgR3VpZG8KKyAgICAgVnJhbmtlbiwgSW50ZWx3b3Jrcy4KKyAgICogRml4IHBvdGVudGlhbCBoZWFwIGNvcnJ1cHRpb24gb24gV2luZG93cyB3aGVuCisgICAgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aCgpIGlzIHBhc3NlZCBhIHBhdGggbG9uZ2VyIHRoYW4gMkdCLiBDYW5ub3QgYmUKKyAgICAgdHJpZ2dlcmVkIHJlbW90ZWx5LiBGb3VuZCBieSBHdWlkbyBWcmFua2VuLCBJbnRlbHdvcmtzLgorICAgKiBGaXggcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpbiBzb21lIGFzbjFfd3JpdGVfeHh4KCkgZnVuY3Rpb25zLgorICAgICBDYW5ub3QgYmUgdHJpZ2dlcmVkIHJlbW90ZWx5IHVubGVzcyB5b3UgY3JlYXRlIFguNTA5IGNlcnRpZmljYXRlcyBiYXNlZAorICAgICBvbiB1bnRydXN0ZWQgaW5wdXQgb3Igd3JpdGUga2V5cyBvZiB1bnRydXN0ZWQgb3JpZ2luLiBGb3VuZCBieSBHdWlkbworICAgICBWcmFua2VuLCBJbnRlbHdvcmtzLgorICAgKiBUaGUgWDUwOSBtYXhfcGF0aGxlbiBjb25zdHJhaW50IHdhcyBub3QgZW5mb3JjZWQgb24gaW50ZXJtZWRpYXRlCisgICAgIGNlcnRpZmljYXRlcy4gRm91bmQgYnkgTmljaG9sYXMgV2lsc29uLCBmaXggYW5kIHRlc3RzIHByb3ZpZGVkIGJ5CisgICAgIEphbm9zIEZvbGxhdGguICMyODAgYW5kICMzMTkKKworRmVhdHVyZXMKKyAgICogRXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIEVDIEotUEFLRSBhcyBkZWZpbmVkIGluIFRocmVhZCAxLjAuMC4KKyAgICAgRGlzYWJsZWQgYnkgZGVmYXVsdCBhcyB0aGUgc3BlY2lmaWNhdGlvbiBtaWdodCBzdGlsbCBjaGFuZ2UuCisgICAqIEFkZGVkIGEga2V5IGV4dHJhY3Rpb24gY2FsbGJhY2sgdG8gYWNjZWVzIHRoZSBtYXN0ZXIgc2VjcmV0IGFuZCBrZXkKKyAgICAgYmxvY2suIChQb3RlbnRpYWwgdXNlcyBpbmNsdWRlIEVBUC1UTFMgYW5kIFRocmVhZC4pCisKK0J1Z2ZpeAorICAgKiBTZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXMgd2VyZSBub3QgZXhjbHVkZWQgZnJvbSBwYXRobGVuIGNvdW50aW5nLAorICAgICByZXN1bHRpbmcgaW4gc29tZSB2YWxpZCBYLjUwOSBiZWluZyBpbmNvcnJlY3RseSByZWplY3RlZC4gRm91bmQgYW5kIGZpeAorICAgICBwcm92aWRlZCBieSBKYW5vcyBGb2xsYXRoLiAjMzE5CisgICAqIEZpeCBidWlsZCBlcnJvciB3aXRoIGNvbmZpZ3VyYXRpb25zIHdoZXJlIEVDREhFLVBTSyBpcyB0aGUgb25seSBrZXkKKyAgICAgZXhjaGFuZ2UuIEZvdW5kIGFuZCBmaXggcHJvdmlkZWQgYnkgQ2hyaXMgSGFtbW9uZC4gIzI3MAorICAgKiBGaXggYnVpbGQgZXJyb3Igd2l0aCBjb25maWd1cmF0aW9ucyB3aGVyZSBSU0EsIFJTQS1QU0ssIEVDREgtUlNBIG9yCisgICAgIEVDSEQtRUNEU0EgaWYgdGhlIG9ubHkga2V5IGV4Y2hhbmdlLiBNdWx0aXBsZSByZXBvcnRzLiAjMzEwCisgICAqIEZpeGVkIGEgYnVnIGNhdXNpbmcgc29tZSBoYW5kc2hha2VzIHRvIGZhaWwgZHVlIHRvIHNvbWUgbm9uLWZhdGFsIGFsZXJ0cworICAgICBub3QgYmVpbmcgcHJvcGVybHkgaWdub3JlZC4gRm91bmQgYnkgbWFuY2hhIGFuZCBLYXNvbSBLb2h0LWFyc2EsICMzMDgKKyAgICogbWJlZHRsc194NTA5X2NydF92ZXJpZnkoX3dpdGhfcHJvZmlsZSkoKSBub3cgYWxzbyBjaGVja3MgdGhlIGtleSB0eXBlIGFuZAorICAgICBzaXplL2N1cnZlIGFnYWluc3QgdGhlIHByb2ZpbGUuIEJlZm9yZSB0aGF0LCB0aGVyZSB3YXMgbm8gd2F5IHRvIHNldCBhCisgICAgIG1pbmltdW0ga2V5IHNpemUgZm9yIGVuZC1lbnRpdHkgY2VydGlmaWNhdGVzIHdpdGggUlNBIGtleXMuIEZvdW5kIGJ5CisgICAgIE1hdHRoZXcgUGFnZSBvZiBTY2FubmV4IEVsZWN0cm9uaWNzIEx0ZC4KKyAgICogRml4IGZhaWx1cmVzIGluIE1QSSBvbiBTcGFyYyg2NCkgZHVlIHRvIHVzZSBvZiBiYWQgYXNzZW1ibHkgY29kZS4KKyAgICAgRm91bmQgYnkgS3VydCBEYW5pZWxzb24uICMyOTIKKyAgICogRml4IHR5cG8gaW4gbmFtZSBvZiB0aGUgZXh0S2V5VXNhZ2UgT0lELiBGb3VuZCBieSBpbmVzdGxlcm9kZSwgIzMxNAorICAgKiBGaXggYnVnIGluIEFTTi4xIGVuY29kaW5nIG9mIGJvb2xlYW5zIHRoYXQgY2F1c2VkIGdlbmVyYXRlZCBDQQorICAgICBjZXJ0aWZpY2F0ZXMgdG8gYmUgcmVqZWN0ZWQgYnkgc29tZSBhcHBsaWNhdGlvbnMsIGluY2x1ZGluZyBPUyBYCisgICAgIEtleWNoYWluLiBGb3VuZCBhbmQgZml4ZWQgYnkgSm9uYXRoYW4gTGVyb3ksIEluaWt1cC4KKworQ2hhbmdlcworICAgKiBJbXByb3ZlZCBwZXJmb3JtYW5jZSBvZiBtYmVkdGxzX2VjcF9tdWxhZGQoKSB3aGVuIG9uZSBvZiB0aGUgc2NhbGFycyBpcyAxCisgICAgIG9yIC0xLgorCis9IG1iZWQgVExTIDIuMS4yIHJlbGVhc2VkIDIwMTUtMTAtMDYKKworU2VjdXJpdHkKKyAgICogQWRkZWQgZml4IGZvciBDVkUtMjAxNS01MjkxIHRvIHByZXZlbnQgaGVhcCBjb3JydXB0aW9uIGR1ZSB0byBidWZmZXIKKyAgICAgb3ZlcmZsb3cgb2YgdGhlIGhvc3RuYW1lIG9yIHNlc3Npb24gdGlja2V0LiBGb3VuZCBieSBHdWlkbyBWcmFua2VuLAorICAgICBJbnRlbHdvcmtzLgorICAgKiBGaXggcG90ZW50aWFsIGRvdWJsZS1mcmVlIGlmIG1iZWR0bHNfc3NsX3NldF9oc19wc2soKSBpcyBjYWxsZWQgbW9yZSB0aGFuCisgICAgIG9uY2UgaW4gdGhlIHNhbWUgaGFuZGhha2UgYW5kIG1iZWR0bHNfc3NsX2NvbmZfcHNrKCkgd2FzIHVzZWQuCisgICAgIEZvdW5kIGFuZCBwYXRjaCBwcm92aWRlZCBieSBHdWlkbyBWcmFua2VuLCBJbnRlbHdvcmtzLiBDYW5ub3QgYmUgZm9yY2VkCisgICAgIHJlbW90ZWx5LgorICAgKiBGaXggc3RhY2sgYnVmZmVyIG92ZXJmbG93IGluIHBrY3MxMiBkZWNyeXB0aW9uICh1c2VkIGJ5CisgICAgIG1iZWR0bHNfcGtfcGFyc2Vfa2V5KGZpbGUpKCkgd2hlbiB0aGUgcGFzc3dvcmQgaXMgPiAxMjkgYnl0ZXMuCisgICAgIEZvdW5kIGJ5IEd1aWRvIFZyYW5rZW4sIEludGVsd29ya3MuIE5vdCB0cmlnZ2VyYWJsZSByZW1vdGVseS4KKyAgICogRml4IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgaW4gbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoKS4KKyAgICAgRm91bmQgYnkgR3VpZG8gVnJhbmtlbiwgSW50ZWx3b3Jrcy4gTm90IGV4cGxvaXRhYmxlIHJlbW90ZWx5IGluIHRoZSBjb250ZXh0CisgICAgIG9mIFRMUywgYnV0IG1pZ2h0IGJlIGluIG90aGVyIHVzZXMuIE9uIDMyIGJpdCBtYWNoaW5lcywgcmVxdWlyZXMgcmVhZGluZyBhCisgICAgIHN0cmluZyBvZiBjbG9zZSB0byBvciBsYXJnZXIgdGhhbiAxR0IgdG8gZXhwbG9pdDsgb24gNjQgYml0IG1hY2hpbmVzLCB3b3VsZAorICAgICByZXF1aXJlIHJlYWRpbmcgYSBzdHJpbmcgb2YgY2xvc2UgdG8gb3IgbGFyZ2VyIHRoYW4gMl42MiBieXRlcy4KKyAgICogRml4IHBvdGVudGlhbCByYW5kb20gbWVtb3J5IGFsbG9jYXRpb24gaW4gbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoKQorICAgICBvbiBjcmFmdGVkIFBFTSBpbnB1dCBkYXRhLiBGb3VuZCBhbmQgZml4IHByb3ZpZGVkIGJ5IEd1aWRvIFZyYW5rZW4sCisgICAgIEludGVsd29ya3MuIE5vdCB0cmlnZ2VyYWJsZSByZW1vdGVseSBpbiBUTFMuIFRyaWdnZXJhYmxlIHJlbW90ZWx5IGlmIHlvdQorICAgICBhY2NlcHQgUEVNIGRhdGEgZnJvbSBhbiB1bnRydXN0ZWQgc291cmNlLgorICAgKiBGaXggcG9zc2libGUgaGVhcCBidWZmZXIgb3ZlcmZsb3cgaW4gYmFzZTY0X2VuY29kZWQoKSB3aGVuIHRoZSBpbnB1dAorICAgICBidWZmZXIgaXMgNTEyTUIgb3IgbGFyZ2VyIG9uIDMyLWJpdCBwbGF0Zm9ybXMuIEZvdW5kIGJ5IEd1aWRvIFZyYW5rZW4sCisgICAgIEludGVsd29ya3MuIE5vdCB0cmlnZXJyYWJsZSByZW1vdGVseSBpbiBUTFMuCisgICAqIEZpeCBwb3RlbnRpYWwgZG91YmxlLWZyZWUgaWYgbWJlZHRsc19jb25mX3BzaygpIGlzIGNhbGxlZCByZXBlYXRlZGx5IG9uCisgICAgIHRoZSBzYW1lIG1iZWR0bHNfc3NsX2NvbmZpZyBvYmplY3QgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLiBGb3VuZCBieQorICAgICBHdWlkbyBWcmFua2VuLCBJbnRlbHdvcmtzLiBDYW5ub3QgYmUgZm9yY2VkIHJlbW90ZWx5LgorICAgKiBGaXggcG90ZW50aWFsIGhlYXAgYnVmZmVyIG92ZXJmbG93IGluIHNlcnZlcnMgdGhhdCBwZXJmb3JtIGNsaWVudAorICAgICBhdXRoZW50aWNhdGlvbiBhZ2FpbnN0IGEgY3JhZnRlZCBDQSBjZXJ0LiBDYW5ub3QgYmUgdHJpZ2dlcmVkIHJlbW90ZWx5CisgICAgIHVubGVzcyB5b3UgYWxsb3cgdGhpcmQgcGFydGllcyB0byBwaWNrIHRydXN0IENBcyBmb3IgY2xpZW50IGF1dGguCisgICAgIEZvdW5kIGJ5IEd1aWRvIFZyYW5rZW4sIEludGVsd29ya3MuCisKK0J1Z2ZpeAorICAgKiBGaXggY29tcGlsZSBlcnJvciBpbiBuZXQuYyB3aXRoIG11c2wgbGliYy4gRm91bmQgYW5kIHBhdGNoIHByb3ZpZGVkIGJ5CisgICAgIHpoYXNoYSAoIzI3OCkuCisgICAqIEZpeCBtYWNyb2l6YXRpb24gb2YgJ2lubGluZScga2V5d29yZCB3aGVuIGJ1aWxkaW5nIGFzIEMrKy4gKCMyNzkpCisKK0NoYW5nZXMKKyAgICogQWRkZWQgY2hlY2tpbmcgb2YgaG9zdG5hbWUgbGVuZ3RoIGluIG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSgpIHRvIGVuc3VyZQorICAgICBkb21haW4gbmFtZXMgYXJlIGNvbXBsaWFudCB3aXRoIFJGQyAxMDM1LgorICAgKiBGaXhlZCBwYXRocyBmb3IgY2hlY2tfY29uZmlnLmggaW4gZXhhbXBsZSBjb25maWcgZmlsZXMuIChGb3VuZCBieSBiYWNocCkKKyAgICAgKCMyOTEpCisKKz0gbWJlZCBUTFMgMi4xLjEgcmVsZWFzZWQgMjAxNS0wOS0xNworCitTZWN1cml0eQorICAgKiBBZGQgY291bnRlcm1lYXN1cmUgYWdhaW5zdCBMZW5zdHJhJ3MgUlNBLUNSVCBhdHRhY2sgZm9yIFBLQ1MjMSB2MS41CisgICAgIHNpZ25hdHVyZXMuIChGb3VuZCBieSBGbG9yaWFuIFdlaW1lciwgUmVkIEhhdC4pCisgICAgIGh0dHBzOi8vc2VjdXJpdHlibG9nLnJlZGhhdC5jb20vMjAxNS8wOS8wMi9mYWN0b3JpbmctcnNhLWtleXMtd2l0aC10bHMtcGVyZmVjdC1mb3J3YXJkLXNlY3JlY3kvCisgICAqIEZpeCBwb3NzaWJsZSBjbGllbnQtc2lkZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgKHJlYWQpIHdoZW4gdGhlIGNsaWVudAorICAgICB0cmllcyB0byBjb250aW51ZSB0aGUgaGFuZHNoYWtlIGFmdGVyIGl0IGZhaWxlZCAoYSBtaXN1c2Ugb2YgdGhlIEFQSSkuCisgICAgIChGb3VuZCBhbmQgcGF0Y2ggcHJvdmlkZWQgYnkgRmFiaWFuIEZvZXJnLCBHb3RoYW0gRGlnaXRhbCBTY2llbmNlIHVzaW5nCisgICAgIGFmbC1mdXp6LikKKworQnVnZml4CisgICAqIEZpeCB3YXJuaW5nIHdoZW4gdXNpbmcgYSA2NGJpdCBwbGF0Zm9ybS4gKGZvdW5kIGJ5IGVtYmVkdGhpcykgKCMyNzUpCisgICAqIEZpeCBvZmYtYnktb25lIGVycm9yIGluIHBhcnNpbmcgU3VwcG9ydGVkIFBvaW50IEZvcm1hdCBleHRlbnNpb24gdGhhdAorICAgICBjYXVzZWQgc29tZSBoYW5kc2hha2VzIHRvIGZhaWwuCisKK0NoYW5nZXMKKyAgICogTWFkZSBYNTA5IHByb2ZpbGUgcG9pbnRlciBjb25zdCBpbiBtYmVkdGxzX3NzbF9jb25mX2NlcnRfcHJvZmlsZSgpIHRvIGFsbG93CisgICAgIHVzZSBvZiBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGVfbmV4dC4gKGZvdW5kIGJ5IE5XaWxzb24pCisgICAqIFdoZW4gYSBjbGllbnQgaW5pdGlhdGVzIGEgcmVjb25uZWN0IGZyb20gdGhlIHNhbWUgcG9ydCBhcyBhIGxpdmUKKyAgICAgY29ubmVjdGlvbiwgaWYgY29va2llIHZlcmlmaWNhdGlvbiBpcyBhdmFpbGFibGUKKyAgICAgKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZIGRlZmluZWQgaW4gY29uZmlnLmgsIGFuZCB1c2FibGUgY29va2llCisgICAgIGNhbGxiYWNrcyBzZXQgd2l0aCBtYmVkdGxzX3NzbF9jb25mX2R0bHNfY29va2llcygpKSwgdGhpcyB3aWxsIGJlCisgICAgIGRldGVjdGVkIGFuZCBtYmVkdGxzX3NzbF9yZWFkKCkgd2lsbCByZXR1cm4KKyAgICAgTUJFRFRMU19FUlJfU1NMX0NMSUVOVF9SRUNPTk5FQ1QgLSBpdCBpcyB0aGVuIHBvc3NpYmxlIHRvIHN0YXJ0IGEgbmV3CisgICAgIGhhbmRzaGFrZSB3aXRoIHRoZSBzYW1lIGNvbnRleHQuIChTZWUgUkZDIDYzNDcgc2VjdGlvbiA0LjIuOC4pCisKKz0gbWJlZCBUTFMgMi4xLjAgcmVsZWFzZWQgMjAxNS0wOS0wNAorCitGZWF0dXJlcworICAgKiBBZGRlZCBzdXBwb3J0IGZvciB5b3R0YSBhcyBhIGJ1aWxkIHN5c3RlbS4KKyAgICogUHJpbWFyeSBvcGVuIHNvdXJjZSBsaWNlbnNlIGNoYW5nZWQgdG8gQXBhY2hlIDIuMCBsaWNlbnNlLgorCitCdWdmaXgKKyAgICogRml4IHNlZ2ZhdWx0IGluIHRoZSBiZW5jaG1hcmsgcHJvZ3JhbSB3aGVuIGJlbmNobWFya2luZyBESE0uCisgICAqIEZpeCBidWlsZCBlcnJvciB3aXRoIENNYWtlIGFuZCBwcmUtNC41IHZlcnNpb25zIG9mIEdDQyAoZm91bmQgYnkgSHVnbworICAgICBMZWlzaW5rKS4KKyAgICogRml4IGJ1ZyB3aGVuIHBhcnNpbmcgYSBTZXJ2ZXJIZWxsbyB3aXRob3V0IGV4dGVuc2lvbnMgKGZvdW5kIGJ5IERhdmlkCisgICAgIFNlYXJzKS4KKyAgICogRml4IGJ1ZyBpbiBDTWFrZSBsaXN0cyB0aGF0IGNhdXNlZCBsaWJtYmVkY3J5cHRvLmEgbm90IHRvIGJlIGluc3RhbGxlZAorICAgICAoZm91bmQgYnkgQmVub2l0IExlY29jcSkuCisgICAqIEZpeCBidWcgaW4gTWFrZWZpbGUgdGhhdCBjYXVzZWQgbGlibWJlZGNyeXB0byBhbmQgbGlibWJlZHg1MDkgbm90IHRvIGJlCisgICAgIGluc3RhbGxlZCAoZm91bmQgYnkgUmF3aTY2NikuCisgICAqIEZpeCBjb21waWxlIGVycm9yIHdpdGggYXJtY2MgNSB3aXRoIC0tZ251IG9wdGlvbi4KKyAgICogRml4IGJ1ZyBpbiBNYWtlZmlsZSB0aGF0IGNhdXNlZCBwcm9ncmFtcyBub3QgdG8gYmUgaW5zdGFsbGVkIGNvcnJlY3RseQorICAgICAoZm91bmQgYnkgcm9ib3RhbmFyY2h5KSAoIzIzMikuCisgICAqIEZpeCBidWcgaW4gTWFrZWZpbGUgdGhhdCBwcmV2ZW50ZWQgZnJvbSBpbnN0YWxsaW5nIHdpdGhvdXQgYnVpbGRpbmcgdGhlCisgICAgIHRlc3RzIChmb3VuZCBieSByb2JvdGFuYXJjaHkpICgjMjMyKS4KKyAgICogRml4IG1pc3NpbmcgLXN0YXRpYy1saWJnY2Mgd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzIGZvciBXaW5kb3dzCisgICAgIHdpdGggbWFrZS4KKyAgICogRml4IGxpbmsgZXJyb3Igd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzIGZvciBXaW5kb3dzIHdpdGggbWFrZS4KKyAgICogRml4IGVycm9yIHdoZW4gbG9hZGluZyBsaWJtYmVkdGxzLnNvLgorICAgKiBGaXggYnVnIGluIG1iZWR0bHNfc3NsX2NvbmZfZGVmYXVsdCgpIHRoYXQgY2F1c2VkIHRoZSBkZWZhdWx0IHByZXNldCB0bworICAgICBiZSBhbHdheXMgdXNlZCAoZm91bmQgYnkgZGNiMzE0KSAoIzIzNSkKKyAgICogRml4IGJ1ZyBpbiBtYmVkdGxzX3JzYV9wdWJsaWMoKSBhbmQgbWJlZHRsc19yc2FfcHJpdmF0ZSgpIHRoYXQgY291bGQKKyAgICAgcmVzdWx0IHRyeWluZyB0byB1bmxvY2sgYW4gdW5sb2NrZWQgbXV0ZXggb24gaW52YWxpZCBpbnB1dCAoZm91bmQgYnkKKyAgICAgRnJlZHJpayBBeGVsc3NvbikgKCMyNTcpCisgICAqIEZpeCAtV3NoYWRvdyB3YXJuaW5ncyAoZm91bmQgYnkgaG5ya3ApICgjMjQwKQorICAgKiBGaXggbWVtb3J5IGNvcnJ1cHRpb24gb24gY2xpZW50IHdpdGggb3ZlcmxvbmcgUFNLIGlkZW50aXR5LCBhcm91bmQKKyAgICAgU1NMX01BWF9DT05URU5UX0xFTiBvciBoaWdoZXIgLSBub3QgdHJpZ2dlcnJhYmxlIHJlbW90ZWx5IChmb3VuZCBieQorICAgICBBbGVrc2FuZHJzIFNhdmVsamV2cykgKCMyMzgpCisgICAqIEZpeCB1bnVzZWQgZnVuY3Rpb24gd2FybmluZyB3aGVuIHVzaW5nIE1CRURUTFNfTUR4X0FMVCBvcgorICAgICBNQkVEVExTX1NIQXh4eF9BTFQgKGZvdW5kIGJ5IEhlbnJpaykgKCMyMzkpCisgICAqIEZpeCBtZW1vcnkgY29ycnVwdGlvbiBpbiBwa2V5IHByb2dyYW1zIChmb3VuZCBieSB5YW5rdW5jaGVuZykgKCMyMTApCisKK0NoYW5nZXMKKyAgICogVGhlIFBFTSBwYXJzZXIgbm93IGFjY2VwdHMgYSB0cmFpbGluZyBzcGFjZSBhdCBlbmQgb2YgbGluZXMgKCMyMjYpLgorICAgKiBJdCBpcyBub3cgcG9zc2libGUgdG8gI2luY2x1ZGUgYSB1c2VyLXByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gZmlsZSBhdCB0aGUKKyAgICAgZW5kIG9mIHRoZSBkZWZhdWx0IGNvbmZpZy5oIGJ5IGRlZmluaW5nIE1CRURUTFNfVVNFUl9DT05GSUdfRklMRSBvbiB0aGUKKyAgICAgY29tcGlsZXIncyBjb21tYW5kIGxpbmUuCisgICAqIFdoZW4gdmVyaWZ5aW5nIGEgY2VydGlmaWNhdGUgY2hhaW4sIGlmIGFuIGludGVybWVkaWF0ZSBjZXJ0aWZpY2F0ZSBpcworICAgICB0cnVzdGVkLCBubyBsYXRlciBjZXJ0IGlzIGNoZWNrZWQuIChzdWdnZXN0ZWQgYnkgaGFubmVzLWxhbmRlaG9sbSkKKyAgICAgKCMyMjApLgorICAgKiBQcmVwZW5kIGEgInRocmVhZCBpZGVudGlmaWVyIiB0byBkZWJ1ZyBtZXNzYWdlcyAoaXNzdWUgcG9pbnRlZCBvdXQgYnkKKyAgICAgSHVnbyBMZWlzaW5rKSAoIzIxMCkuCisgICAqIEFkZCBtYmVkdGxzX3NzbF9nZXRfbWF4X2ZyYWdfbGVuKCkgdG8gcXVlcnkgdGhlIGN1cnJlbnQgbWF4aW11bSBmcmFnbWVudAorICAgICBsZW5ndGguCisKKz0gbWJlZCBUTFMgMi4wLjAgcmVsZWFzZWQgMjAxNS0wNy0xMworCitGZWF0dXJlcworICAgKiBTdXBwb3J0IGZvciBEVExTIDEuMCBhbmQgMS4yIChSRkMgNjM0NykuCisgICAqIEFiaWxpdHkgdG8gb3ZlcnJpZGUgY29yZSBmdW5jdGlvbnMgZnJvbSBNRHgsIFNIQXgsIEFFUyBhbmQgREVTIG1vZHVsZXMKKyAgICAgd2l0aCBjdXN0b20gaW1wbGVtZW50YXRpb24gKGVnIGhhcmR3YXJlIGFjY2VsZXJhdGVkKSwgY29tcGxlbWVudGluZyB0aGUKKyAgICAgYWJpbGl0eSB0byBvdmVycmlkZSB0aGUgd2hvbGUgbW9kdWxlLgorICAgKiBOZXcgc2VydmVyLXNpZGUgaW1wbGVtZW50YXRpb24gb2Ygc2Vzc2lvbiB0aWNrZXRzIHRoYXQgcm90YXRlIGtleXMgdG8KKyAgICAgcHJlc2VydmUgZm9yd2FyZCBzZWNyZWN5LCBhbmQgYWxsb3dzIHNoYXJpbmcgYWNyb3NzIG11bHRpcGxlIGNvbnRleHRzLgorICAgKiBBZGRlZCBhIGNvbmNlcHQgb2YgWC41MDkgY2VyaWZpY2F0ZSB2ZXJpZmljYXRpb24gcHJvZmlsZSB0aGF0IGNvbnRyb2xzCisgICAgIHdoaWNoIGFsZ29yaXRobXMgYW5kIGtleSBzaXplcyAoY3VydmVzIGZvciBFQ0RTQSkgYXJlIGFjY2VwdGFibGUuCisgICAqIEV4cGFuZGVkIGNvbmZpZ3VyYWJpbGl0eSBvZiBzZWN1cml0eSBwYXJhbWV0ZXJzIGluIHRoZSBTU0wgbW9kdWxlIHdpdGgKKyAgICAgbWJlZHRsc19zc2xfY29uZl9kaG1fbWluX2JpdGxlbigpIGFuZCBtYmVkdGxzX3NzbF9jb25mX3NpZ19oYXNoZXMoKS4KKyAgICogSW50cm9kdWNlZCBhIGNvbmNlcHQgb2YgcHJlc2V0cyBmb3IgU1NMIHNlY3VyaXR5LXJlbGV2YW50IGNvbmZpZ3VyYXRpb24KKyAgICAgcGFyYW1ldGVycy4KKworQVBJIENoYW5nZXMKKyAgICogVGhlIGxpYnJhcnkgaGFzIGJlZW4gc3BsaXQgaW50byBsaWJtYmVkY3J5cHRvLCBsaWJtYmVkeDUwOSwgbGlibWJlZHRscy4KKyAgICAgWW91IG5vdyBuZWVkIHRvIGxpbmsgdG8gYWxsIG9mIHRoZW0gaWYgeW91IHVzZSBUTFMgZm9yIGV4YW1wbGUuCisgICAqIEFsbCBwdWJsaWMgaWRlbnRpZmllcnMgbW92ZWQgdG8gdGhlIG1iZWR0bHNfKiBvciBNQkVEVExTXyogbmFtZXNwYWNlLgorICAgICBTb21lIG5hbWVzIGhhdmUgYmVlbiBmdXJ0aGVyIGNoYW5nZWQgdG8gbWFrZSB0aGVtIG1vcmUgY29uc2lzdGVudC4KKyAgICAgTWlncmF0aW9uIGhlbHBlcnMgc2NyaXB0cy9yZW5hbWUucGwgYW5kIGluY2x1ZGUvbWJlZGx0cy9jb21wYXQtMS4zLmggYXJlCisgICAgIHByb3ZpZGVkLiBGdWxsIGxpc3Qgb2YgcmVuYW1pbmdzIGluIHNjcmlwdHMvZGF0YV9maWxlcy9yZW5hbWUtMS4zLTIuMC50eHQKKyAgICogUmVuYW1pbmdzIG9mIGZpZWxkcyBpbnNpZGUgc3RydWN0dXJlcywgbm90IGNvdmVyZWQgYnkgdGhlIHByZXZpb3VzIGxpc3Q6CisgICAgIG1iZWR0bHNfY2lwaGVyX2luZm9fdC5rZXlfbGVuZ3RoIC0+IGtleV9iaXRsZW4KKyAgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90LmtleV9sZW5ndGggLT4ga2V5X2JpdGxlbgorICAgICBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvLnNpemUgLT4gYml0X3NpemUKKyAgICogSGVhZGVycyBhcmUgbm93IGZvdW5kIGluIHRoZSAnbWJlZHRscycgZGlyZWN0b3J5IChwcmV2aW91c2x5ICdwb2xhcnNzbCcpLgorICAgKiBUaGUgZm9sbG93aW5nIF9pbml0KCkgZnVuY3Rpb25zIHRoYXQgY291bGQgcmV0dXJuIGVycm9ycyBoYXZlCisgICAgIGJlZW4gc3BsaXQgaW50byBhbiBfaW5pdCgpIHRoYXQgcmV0dXJucyB2b2lkIGFuZCBhbm90aGVyIGZ1bmN0aW9uIHRoYXQKKyAgICAgc2hvdWxkIGdlbmVyYWxseSBiZSB0aGUgZmlyc3QgZnVuY3Rpb24gY2FsbGVkIG9uIHRoaXMgY29udGV4dCBhZnRlciBpbml0OgorICAgICBtYmVkdGxzX3NzbF9pbml0KCkgLT4gbWJlZHRsc19zc2xfc2V0dXAoKQorICAgICBtYmVkdGxzX2NjbV9pbml0KCkgLT4gbWJlZHRsc19jY21fc2V0a2V5KCkKKyAgICAgbWJlZHRsc19nY21faW5pdCgpIC0+IG1iZWR0bHNfZ2NtX3NldGtleSgpCisgICAgIG1iZWR0bHNfaG1hY19kcmJnX2luaXQoKSAtPiBtYmVkdGxzX2htYWNfZHJiZ19zZWVkKF9idWYpKCkKKyAgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCkgIC0+IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCgpCisgICAgIE5vdGUgdGhhdCBmb3IgbWJlZHRsc19zc2xfc2V0dXAoKSwgeW91IG5lZWQgdG8gYmUgZG9uZSBzZXR0aW5nIHVwIHRoZQorICAgICBzc2xfY29uZmlnIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyBpdC4KKyAgICogTW9zdCBzc2xfc2V0X3h4eCgpIGZ1bmN0aW9ucyAoYWxsIGV4Y2VwdCBzc2xfc2V0X2JpbygpLCBzc2xfc2V0X2hvc3RuYW1lKCksCisgICAgIHNzbF9zZXRfc2Vzc2lvbigpIGFuZCBzc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQoKSwgcGx1cworICAgICBzc2xfbGVnYWN5X3JlbmVnb3RpYXRpb24oKSkgaGF2ZSBiZWVuIHJlbmFtZWQgdG8gbWJlZHRsc19zc2xfY29uZl94eHgoKQorICAgICAoc2VlIHJlbmFtZS5wbCBhbmQgY29tcGF0LTEuMy5oIGFib3ZlKSBhbmQgdGhlaXIgZmlyc3QgYXJndW1lbnQncyB0eXBlCisgICAgIGNoYW5nZWQgZnJvbSBzc2xfY29udGV4dCB0byBzc2xfY29uZmlnLgorICAgKiBzc2xfc2V0X2JpbygpIGNoYW5nZWQgc2lnbmF0dXJlIChjb250ZXh0cyBtZXJnZWQsIG9yZGVyIHN3aXRjaGVkLCBvbmUKKyAgICAgYWRkaXRpb25hbCBjYWxsYmFjayBmb3IgcmVhZC13aXRoLXRpbWVvdXQpLgorICAgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBoYXZlIGJlZW4gaW50cm9kdWNlZCBhbmQgbXVzdCBiZSB1c2VkIGluIGNhbGxiYWNrCisgICAgIGltcGxlbWVudGF0aW9ucyAoU05JLCBQU0spIGluc3RlYWQgb2YgdGhlaXIgKmNvbmYgY291bnRlcnBhcnRzOgorICAgICBtYmVkdGxzX3NzbF9zZXRfaHNfb3duX2NlcnQoKQorICAgICBtYmVkdGxzX3NzbF9zZXRfaHNfY2FfY2hhaW4oKQorICAgICBtYmVkdGxzX3NzbF9zZXRfaHNfcHNrKCkKKyAgICogbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbigpIGxvc3QgaXRzIGxhc3QgYXJndW1lbnQgKHBlZXJfY24pLCBub3cgc2V0CisgICAgIHVzaW5nIG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSgpLgorICAgKiBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fY2FjaGUoKSBjaGFuZ2VkIHByb3RvdHlwZSAob25seSBvbmUgY29udGV4dAorICAgICBwb2ludGVyLCBwYXJhbWV0ZXJzIHJlb3JkZXJlZCkuCisgICAqIE9uIHNlcnZlciwgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHNfY2IoKSBtdXN0IG5vdyBiZSB1c2VkIGluCisgICAgIHBsYWNlIG9mIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl90aWNrZXRzKCkgdG8gZW5hYmxlIHNlc3Npb24gdGlja2V0cy4KKyAgICogVGhlIFNTTCBkZWJ1ZyBjYWxsYmFjayBnYWluZWQgdHdvIG5ldyBhcmd1bWVudHMgKGZpbGUgbmFtZSwgbGluZSBudW1iZXIpLgorICAgKiBEZWJ1ZyBtb2RlcyB3ZXJlIHJlbW92ZWQuCisgICAqIG1iZWR0bHNfc3NsX2NvbmZfdHJ1bmNhdGVkX2htYWMoKSBub3cgcmV0dXJucyB2b2lkLgorICAgKiBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCgpIG5vdyByZXR1cm5zIHZvaWQuCisgICAqIFguNTA5IHZlcmlmaWNhdGlvbiBmbGFncyBhcmUgbm93IGFuIHVpbnQzMl90LiBBZmZlY3QgdGhlIHNpZ25hdHVyZSBvZjoKKyAgICAgbWJlZHRsc19zc2xfZ2V0X3ZlcmlmeV9yZXN1bHQoKQorICAgICBtYmVkdGxzX3g1MDlfY3RyX3ZlcmlmeV9pbmZvKCkKKyAgICAgbWJlZHRsc194NTA5X2NydF92ZXJpZnkoKSAoZmxhZ3MsIGZfdnJmeSAtPiBuZWVkcyB0byBiZSB1cGRhdGVkKQorICAgICBtYmVkdGxzX3NzbF9jb25mX3ZlcmlmeSgpIChmX3ZyZnkgLT4gbmVlZHMgdG8gYmUgdXBkYXRlZCkKKyAgICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY2hhbmdlZCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gaW4tb3V0IGxlbmd0aAorICAgICBwYXJhbWV0ZXI6CisgICAgIG1iZWR0bHNfYmFzZTY0X2VuY29kZSgpCisgICAgIG1iZWR0bHNfYmFzZTY0X2RlY29kZSgpCisgICAgIG1iZWR0bHNfbXBpX3dyaXRlX3N0cmluZygpCisgICAgIG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0KCkKKyAgICogSW4gdGhlIE5FVCBtb2R1bGUsIGFsbCAiaW50IiBhbmQgImludCAqIiBhcmd1bWVudHMgZm9yIGZpbGUgZGVzY3JpcHRvcnMKKyAgICAgY2hhbmdlZCB0eXBlIHRvICJtYmVkdGxzX25ldF9jb250ZXh0ICoiLgorICAgKiBuZXRfYWNjZXB0KCkgZ2FpbmVkIG5ldyBhcmd1bWVudHMgZm9yIHRoZSBzaXplIG9mIHRoZSBjbGllbnRfaXAgYnVmZmVyLgorICAgKiBJbiB0aGUgdGhyZWFkaW5nIGxheWVyLCBtYmVkdGxzX211dGV4X2luaXQoKSBhbmQgbWJlZHRsc19tdXRleF9mcmVlKCkgbm93CisgICAgIHJldHVybiB2b2lkLgorICAgKiBlY2RzYV93cml0ZV9zaWduYXR1cmUoKSBnYWluZWQgYW4gYWRkdGlvbmFsIG1kX2FsZyBhcmd1bWVudCBhbmQKKyAgICAgZWNkc2Ffd3JpdGVfc2lnbmF0dXJlX2RldCgpIHdhcyBkZXByZWNhdGVkLgorICAgKiBwa19zaWduKCkgbm8gbG9uZ2VyIGFjY2VwdHMgbWRfYWxnID09IFBPTEFSU1NMX01EX05PTkUgd2l0aCBFQ0RTQS4KKyAgICogTGFzdCBhcmd1bWVudCBvZiB4NTA5X2NydF9jaGVja19rZXlfdXNhZ2UoKSBhbmQKKyAgICAgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9rZXlfdXNhZ2UoKSBjaGFuZ2VkIGZyb20gaW50IHRvIHVuc2lnbmVkLgorICAgKiB0ZXN0X2NhX2xpc3QgKGZyb20gY2VydHMuaCkgaXMgcmVuYW1lZCB0byB0ZXN0X2Nhc19wZW0gYW5kIGlzIG9ubHkKKyAgICAgYXZhaWxhYmxlIGlmIFBPTEFSU1NMX1BFTV9QQVJTRV9DIGlzIGRlZmluZWQgKGl0IG5ldmVyIHdvcmtlZCB3aXRob3V0KS4KKyAgICogVGVzdCBjZXJ0aWZpY2F0ZXMgaW4gY2VydHMuYyBhcmUgbm8gbG9uZ2VyIGd1YXJhbnRlZWQgdG8gYmUgbnVsLXRlcm1pbmF0ZWQKKyAgICAgc3RyaW5nczsgdXNlIHRoZSBuZXcgKl9sZW4gdmFyaWFibGVzIGluc3RlYWQgb2Ygc3RybGVuKCkuCisgICAqIEZ1bmN0aW9ucyBtYmVkdGxzX3g1MDlfeHh4X3BhcnNlKCksIG1iZWR0bHNfcGtfcGFyc2Vfa2V5KCksCisgICAgIG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleSgpIGFuZCBtYmVkdGxzX2RobV9wYXJzZV9kaG0oKSBub3cgZXhwZWN0IHRoZQorICAgICBsZW5ndGggcGFyYW1ldGVyIHRvIGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSBmb3IgUEVNIGlucHV0LgorICAgKiBTaWduYXR1cmUgb2YgbXBpX211bF9tcGkoKSBjaGFuZ2VkIHRvIG1ha2UgdGhlIGxhc3QgYXJndW1lbnQgdW5zaWduZWQKKyAgICogY2FsbG9jKCkgaXMgbm93IHVzZWQgaW5zdGVhZCBvZiBtYWxsb2MoKSBldmVyeXdoZXJlLiBBUEkgb2YgcGxhdGZvcm0KKyAgICAgbGF5ZXIgYW5kIHRoZSBtZW1vcnlfYnVmZmVyX2FsbG9jIG1vZHVsZSBjaGFuZ2VkIGFjY29yZGluZ2x5LgorICAgICAoVGhhbmtzIHRvIE1hbnNvdXIgTW91ZmlkIGZvciBoZWxwaW5nIHdpdGggdGhlIHJlcGxhY2VtZW50LikKKyAgICogQ2hhbmdlIFNTTF9ESVNBQkxFX1JFTkVHT1RJQVRJT04gY29uZmlnLmggZmxhZyB0byBTU0xfUkVORUdPVElBVElPTgorICAgICAoc3VwcG9ydCBmb3IgcmVuZWdvdGlhdGlvbiBub3cgbmVlZHMgZXhwbGljaXQgZW5hYmxpbmcgaW4gY29uZmlnLmgpLgorICAgKiBTcGxpdCBNQkVEVExTX0hBVkVfVElNRSBpbnRvIE1CRURUTFNfSEFWRV9USU1FIGFuZCBNQkVEVExTX0hBVkVfVElNRV9EQVRFCisgICAgIGluIGNvbmZpZy5oCisgICAqIG5ldF9jb25uZWN0KCkgYW5kIG5ldF9iaW5kKCkgaGF2ZSBhIG5ldyAncHJvdG8nIGFyZ3VtZW50IHRvIGNob29zZQorICAgICBiZXR3ZWVuIFRDUCBhbmQgVURQLCB1c2luZyB0aGUgbWFjcm9zIE5FVF9QUk9UT19UQ1Agb3IgTkVUX1BST1RPX1VEUC4KKyAgICAgVGhlaXIgJ3BvcnQnIGFyZ3VtZW50IHR5cGUgaXMgY2hhbmdlZCB0byBhIHN0cmluZy4KKyAgICogU29tZSBjb25zdG5lc3MgZml4ZXMKKworUmVtb3ZhbHMKKyAgICogUmVtb3ZlZCBtYmVkdGxzX2VjcF9ncm91cF9yZWFkX3N0cmluZygpLiBPbmx5IG5hbWVkIGdyb3VwcyBhcmUgc3VwcG9ydGVkLgorICAgKiBSZW1vdmVkIG1iZWR0bHNfZWNwX3N1YigpIGFuZCBtYmVkdGxzX2VjcF9hZGQoKSwgdXNlCisgICAgIG1iZWR0bHNfZWNwX211bGFkZCgpLgorICAgKiBSZW1vdmVkIGluZGl2aWR1YWwgbWRYX2htYWMsIHNoYVhfaG1hYywgbWRYX2ZpbGUgYW5kIHNoYVhfZmlsZSBmdW5jdGlvbnMKKyAgICAgKHVzZSBnZW5lcmljIGZ1bmN0aW9ucyBmcm9tIG1kLmgpCisgICAqIFJlbW92ZWQgbWJlZHRsc190aW1pbmdfbXNsZWVwKCkuIFVzZSBtYmVkdGxzX25ldF91c2xlZXAoKSBvciBhIGN1c3RvbQorICAgICB3YWl0aW5nIGZ1bmN0aW9uLgorICAgKiBSZW1vdmVkIHRlc3QgREhNIHBhcmFtZXRlcnMgZnJvbSB0aGUgdGVzdCBjZXJ0cyBtb2R1bGUuCisgICAqIFJlbW92ZWQgdGhlIFBCS0RGMiBtb2R1bGUgKHVzZSBQS0NTNSkuCisgICAqIFJlbW92ZWQgUE9MQVJTU0xfRVJST1JfU1RSRVJST1JfQkMgKHVzZSBtYmVkdGxzX3N0cmVycm9yKCkpLgorICAgKiBSZW1vdmVkIGNvbXBhdC0xLjIuaCAoaGVscGVyIGZvciBtaWdyYXRpbmcgZnJvbSAxLjIgdG8gMS4zKS4KKyAgICogUmVtb3ZlZCBvcGVuc3NsLmggKHZlcnkgcGFydGlhbCBPcGVuU1NMIGNvbXBhdGliaWxpdHkgbGF5ZXIpLgorICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgUE9MQVJTU0xfSEFWRV9MT05HTE9ORyB3YXMgcmVtb3ZlZCAobm93IGFsd2F5cyBvbikuCisgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBQT0xBUlNTTF9IQVZFX0lOVDggYW5kIFBPTEFSU1NMX0hBVkVfSU5UMTYgaGF2ZQorICAgICBiZWVuIHJlbW92ZWQgKGNvbXBpbGVyIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgMzItYml0IG9wZXJhdGlvbnMpLgorICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbiBQT0xBUlNTTF9IQVZFX0lQVjYgd2FzIHJlbW92ZWQgKGFsd2F5cyBlbmFibGVkKS4KKyAgICogUmVtb3ZlZCB0ZXN0IHByb2dyYW0gb19wX3Rlc3QsIHRoZSBzY3JpcHQgY29tcGF0LnNoIGRvZXMgbW9yZS4KKyAgICogUmVtb3ZlZCB0ZXN0IHByb2dyYW0gc3NsX3Rlc3QsIHN1cGVyc2VkZWQgYnkgc3NsLW9wdC5zaC4KKyAgICogUmVtb3ZlZCBoZWxwZXIgc2NyaXB0IGFjdGl2ZS1jb25maWcucGwKKworTmV3IGRlcHJlY2F0aW9ucworICAgKiBtZF9pbml0X2N0eCgpIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIG1kX3NldHVwKCksIHRoYXQgYWRkcyBhIHRoaXJkCisgICAgIGFyZ3VtZW50IChhbGxvd2luZyBtZW1vcnkgc2F2aW5ncyBpZiBITUFDIGlzIG5vdCB1c2VkKQorCitTZW1pLUFQSSBjaGFuZ2VzICh0ZWNobmljYWxseSBwdWJsaWMsIG1vcmFsbHkgcHJpdmF0ZSkKKyAgICogUmVuYW1lZCBhIGZldyBoZWFkZXJzIHRvIGluY2x1ZGUgX2ludGVybmFsIGluIHRoZSBuYW1lLiBUaG9zZSBoZWFkZXJzIGFyZQorICAgICBub3Qgc3VwcG9zZWQgdG8gYmUgaW5jbHVkZWQgYnkgdXNlcnMuCisgICAqIENoYW5nZWQgbWRfaW5mb190IGludG8gYW4gb3BhcXVlIHN0cnVjdHVyZSAodXNlIG1kX2dldF94eHgoKSBhY2Nlc3NvcnMpLgorICAgKiBDaGFuZ2VkIHBrX2luZm9fdCBpbnRvIGFuIG9wYXF1ZSBzdHJ1Y3R1cmUuCisgICAqIENoYW5nZWQgY2lwaGVyX2Jhc2VfdCBpbnRvIGFuIG9wYXF1ZSBzdHJ1Y3R1cmUuCisgICAqIFJlbW92ZWQgc2lnX29pZDIgYW5kIHJlbmFtZSBzaWdfb2lkMSB0byBzaWdfb2lkIGluIHg1MDlfY3J0IGFuZCB4NTA5X2NybC4KKyAgICogeDUwOV9jcnQua2V5X3VzYWdlIGNoYW5nZWQgZnJvbSB1bnNpZ25lZCBjaGFyIHRvIHVuc2lnbmVkIGludC4KKyAgICogUmVtb3ZlZCByIGFuZCBzIGZyb20gZWNkc2FfY29udGV4dAorICAgKiBSZW1vdmVkIG1vZGUgZnJvbSBkZXNfY29udGV4dCBhbmQgZGVzM19jb250ZXh0CisKK0RlZmF1bHQgYmVoYXZpb3IgY2hhbmdlcworICAgKiBUaGUgZGVmYXVsdCBtaW5pbXVtIFRMUyB2ZXJzaW9uIGlzIG5vdyBUTFMgMS4wLgorICAgKiBSQzQgaXMgbm93IGJsYWNrbGlzdGVkIGJ5IGRlZmF1bHQgaW4gdGhlIFNTTC9UTFMgbGF5ZXIsIGFuZCBleGNsdWRlZCBmcm9tIHRoZQorICAgICBkZWZhdWx0IGNpcGhlcnN1aXRlIGxpc3QgcmV0dXJuZWQgYnkgc3NsX2xpc3RfY2lwaGVyc3VpdGVzKCkKKyAgICogU3VwcG9ydCBmb3IgcmVjZWl2aW5nIFNTTHYyIENsaWVudEhlbGxvIGlzIG5vdyBkaXNhYmxlZCBieSBkZWZhdWx0IGF0CisgICAgIGNvbXBpbGUgdGltZS4KKyAgICogVGhlIGRlZmF1bHQgYXV0aG1vZGUgZm9yIFNTTC9UTFMgY2xpZW50cyBpcyBub3cgUkVRVUlSRUQuCisgICAqIFN1cHBvcnQgZm9yIFJTQV9BTFQgY29udGV4dHMgaW4gdGhlIFBLIGxheWVyIGlzIG5vdyBvcHRpb25hbC4gU2luY2UgaXMgaXMKKyAgICAgZW5hYmxlZCBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG9ubHkgbm90aWNlYWJsZSBpZiB1c2luZyBhCisgICAgIGN1c3RvbSBjb25maWcuaAorICAgKiBEZWZhdWx0IERITSBwYXJhbWV0ZXJzIHNlcnZlci1zaWRlIHVwZ3JhZGVkIGZyb20gMTAyNCB0byAyMDQ4IGJpdHMuCisgICAqIEEgbWluaW11bSBSU0Ega2V5IHNpemUgb2YgMjA0OCBiaXRzIGlzIG5vdyBlbmZvcmNlZCBkdXJpbmcgY2VyaXRpZmljYXRlCisgICAgIGNoYWluIHZlcmlmaWNhdGlvbi4KKyAgICogTmVnb3RpYXRpb24gb2YgdHJ1bmNhdGVkIEhNQUMgaXMgbm93IGRpc2FibGVkIGJ5IGRlZmF1bHQgb24gc2VydmVyIHRvby4KKyAgICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIG5vdyBjYXNlLXNlbnNpdGl2ZToKKyAgICAgbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3N0cmluZygpCisgICAgIG1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV9uYW1lKCkKKyAgICAgbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKCkKKyAgICAgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9zdHJpbmcoKQorICAgICBtYmVkdGxzX3ZlcnNpb25fY2hlY2tfZmVhdHVyZSgpCisKK1JlcXVpcmVtZW50IGNoYW5nZXMKKyAgICogVGhlIG1pbmltdW0gTVNWQyB2ZXJzaW9uIHJlcXVpcmVkIGlzIG5vdyAyMDEwIChiZXR0ZXIgQzk5IHN1cHBvcnQpLgorICAgKiBUaGUgTkVUIGxheWVyIG5vdyB1bmNvbmRpdGlvbm5hbHkgcmVsaWVzIG9uIGdldGFkZHJpbmZvKCkgYW5kIHNlbGVjdCgpLgorICAgKiBDb21waWxlciBpcyByZXF1aXJlZCB0byBzdXBwb3J0IEM5OSB0eXBlcyBzdWNoIGFzIGxvbmcgbG9uZyBhbmQgdWludDMyX3QuCisKK0FQSSBjaGFuZ2VzIGZyb20gdGhlIDEuNCBwcmV2aWV3IGJyYW5jaAorICAgKiBzc2xfc2V0X2Jpb190aW1lb3V0KCkgd2FzIHJlbW92ZWQsIHNwbGl0IGludG8gbWJlZHRsc19zc2xfc2V0X2JpbygpIHdpdGgKKyAgICAgbmV3IHByb3RvdHlwZSwgYW5kIG1iZWR0bHNfc3NsX3NldF9yZWFkX3RpbWVvdXQoKS4KKyAgICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbm93IHJldHVybiB2b2lkOgorICAgICBtYmVkdGxzX3NzbF9jb25mX3RyYW5zcG9ydCgpCisgICAgIG1iZWR0bHNfc3NsX2NvbmZfbWF4X3ZlcnNpb24oKQorICAgICBtYmVkdGxzX3NzbF9jb25mX21pbl92ZXJzaW9uKCkKKyAgICogRFRMUyBubyBsb25nZXIgaGFyZC1kZXBlbmRzIG9uIFRJTUlOR19DLCBidXQgdXNlcyBhIGNhbGxiYWNrIGludGVyZmFjZQorICAgICBpbnN0ZWFkLCBzZWUgbWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCksIHdpdGggdGhlIFRpbWluZyBtb2R1bGUgcHJvdmlkaW5nCisgICAgIGFuIGV4YW1wbGUgaW1wbGVtZW50YXRpb24sIHNlZSBtYmVkdGxzX3RpbWluZ19kZWxheV9jb250ZXh0IGFuZAorICAgICBtYmVkdGxzX3RpbWluZ19zZXQvZ2V0X2RlbGF5KCkuCisgICAqIFdpdGggVURQIHNvY2tldHMsIGl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gY2FsbCBuZXRfYmluZCgpIGFnYWluCisgICAgIGFmdGVyIGEgc3VjY2Vzc2Z1bCBuZXRfYWNjZXB0KCkuCisKK0NoYW5nZXMKKyAgICogbWJlZHRsc19jdHJfZHJiZ19yYW5kb20oKSBhbmQgbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCkgYXJlIG5vdworICAgICB0aHJlYWQtc2FmZSBpZiBNQkVEVExTX1RIUkVBRElOR19DIGlzIGVuYWJsZWQuCisgICAqIFJlZHVjZWQgUk9NIGZvb3ByaW50IG9mIFNIQS0yNTYgYW5kIGFkZGVkIGFuIG9wdGlvbiB0byByZWR1Y2UgaXQgZXZlbgorICAgICBtb3JlIChhdCB0aGUgZXhwZW5zZSBvZiBwZXJmb3JtYW5jZSkgTUJFRFRMU19TSEEyNTZfU01BTExFUi4KKworPSBtYmVkIFRMUyAxLjMgYnJhbmNoCisKK1NlY3VyaXR5CisgICAqIFdpdGggYXV0aG1vZGUgc2V0IHRvIFNTTF9WRVJJRllfT1BUSU9OQUwsIHZlcmlmaWNhdGlvbiBvZiBrZXlVc2FnZSBhbmQKKyAgICAgZXh0ZW5kZWRLZXlVc2FnZSBvbiB0aGUgbGVhZiBjZXJ0aWZpY2F0ZSB3YXMgbG9zdCAocmVzdWx0cyBub3QgYWNjZXNzaWJsZQorICAgICB2aWEgc3NsX2dldF92ZXJpZnlfcmVzdWx0cygpKS4KKyAgICogQWRkIGNvdW50ZXJtZWFzdXJlIGFnYWluc3QgIkx1Y2t5IDEzIHN0cmlrZXMgYmFjayIgY2FjaGUtYmFzZWQgYXR0YWNrLAorICAgICBodHRwczovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTI3MTQ2MjUKKworRmVhdHVyZXMKKyAgICogSW1wcm92ZSBFQ0MgcGVyZm9ybWFuY2UgYnkgdXNpbmcgbW9yZSBlZmZpY2llbnQgZG91YmxpbmcgZm9ybXVsYXMKKyAgICAgKGNvbnRyaWJ1dGVkIGJ5IFBldGVyIERldHRtYW4pLgorICAgKiBBZGQgeDUwOV9jcnRfdmVyaWZ5X2luZm8oKSB0byBkaXNwbGF5IGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiByZXN1bHRzLgorICAgKiBBZGQgc3VwcG9ydCBmb3IgcmVhZGluZyBESCBwYXJhbWV0ZXJzIHdpdGggcHJpdmF0ZVZhbHVlTGVuZ3RoIGluY2x1ZGVkCisgICAgIChjb250cmlidXRlZCBieSBEYW5pZWwgS2FobiBHaWxsbW9yKS4KKyAgICogQWRkIHN1cHBvcnQgZm9yIGJpdCBzdHJpbmdzIGluIFguNTA5IG5hbWVzIChyZXF1ZXN0IGJ5IEZyZWRyaWsgQXhlbHNzb24pLgorICAgKiBBZGQgc3VwcG9ydCBmb3IgaWQtYXQtdW5pcXVlSWRlbnRpZmllciBpbiBYLjUwOSBuYW1lcy4KKyAgICogQWRkIHN1cHBvcnQgZm9yIG92ZXJyaWRpbmcgc25wcmludGYoKSAoZXhjZXB0IG9uIFdpbmRvd3MpIGFuZCBleGl0KCkgaW4KKyAgICAgdGhlIHBsYXRmb3JtIGxheWVyLgorICAgKiBBZGQgYW4gb3B0aW9uIHRvIHVzZSBtYWNyb3MgaW5zdGVhZCBvZiBmdW5jdGlvbiBwb2ludGVycyBpbiB0aGUgcGxhdGZvcm0KKyAgICAgbGF5ZXIgKGhlbHBzIGdldCByaWQgb2YgdW53YW50ZWQgcmVmZXJlbmNlcykuCisgICAqIEltcHJvdmVkIE1ha2VmaWxlcyBmb3IgV2luZG93cyB0YXJnZXRzIGJ5IGZpeGluZyBsaWJyYXJ5IHRhcmdldHMgYW5kIG1ha2luZworICAgICBjcm9zcy1jb21waWxhdGlvbiBlYXNpZXIgKHRoYW5rcyB0byBBbG9uIEJhci1MZXYpLgorICAgKiBUaGUgYmVuY2htYXJrIHByb2dyYW0gYWxzbyBwcmludHMgaGVhcCB1c2FnZSBmb3IgcHVibGljLWtleSBwcmltaXRpdmVzCisgICAgIGlmIFBPTEFSU1NMX01FTU9SWV9CVUZGRVJfQUxMT0NfQyBhbmQgUE9MQVJTU0xfTUVNT1JZX0RFQlVHIGFyZSBkZWZpbmVkLgorICAgKiBOZXcgc2NyaXB0IGVjYy1oZWFwLnNoIGhlbHBzIG1lYXN1cmluZyB0aGUgaW1wYWN0IG9mIEVDQyBwYXJhbWV0ZXJzIG9uCisgICAgIHNwZWVkIGFuZCBSQU0gKGhlYXAgb25seSBmb3Igbm93KSB1c2FnZS4KKyAgICogTmV3IHNjcmlwdCBtZW1vcnkuc2ggaGVscHMgbWVhc3VyaW5nIHRoZSBST00gYW5kIFJBTSByZXF1aXJlbWVudHMgb2YgdHdvCisgICAgIHJlZHVjZWQgY29uZmlndXJhdGlvbnMgKFBTSy1DQ00gYW5kIE5TQSBzdWl0ZSBCKS4KKyAgICogQWRkIGNvbmZpZyBmbGFnIFBPTEFSU1NMX0RFUFJFQ0FURURfV0FSTklORyAob2ZmIGJ5IGRlZmF1bHQpIHRvIHByb2R1Y2UKKyAgICAgd2FybmluZ3Mgb24gdXNlIG9mIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICh3aXRoIEdDQyBhbmQgQ2xhbmcgb25seSkuCisgICAqIEFkZCBjb25maWcgZmxhZyBQT0xBUlNTTF9ERVBSRUNBVEVEX1JFTU9WRUQgKG9mZiBieSBkZWZhdWx0KSB0byBwcm9kdWNlCisgICAgIGVycm9ycyBvbiB1c2Ugb2YgZGVwcmVjYXRlZCBmdW5jdGlvbnMuCisKK0J1Z2ZpeAorICAgKiBGaXggY29tcGlsZSBlcnJvcnMgd2l0aCBQTEFURk9STV9OT19TVERfRlVOQ1RJT05TLgorICAgKiBGaXggY29tcGlsZSBlcnJvciB3aXRoIFBMQVRGT1JNX0VYSVRfQUxUICh0aGFua3MgdG8gUmFmYcWCIFByenl3YXJhKS4KKyAgICogRml4IGJ1ZyBpbiBlbnRyb3B5LmMgd2hlbiBUSFJFQURJTkdfQyBpcyBhbHNvIGVuYWJsZWQgdGhhdCBjYXVzZWQKKyAgICAgZW50cm9weV9mcmVlKCkgdG8gY3Jhc2ggKHRoYW5rcyB0byBSYWZhxYIgUHJ6eXdhcmEpLgorICAgKiBGaXggbWVtb3J5IGxlYWsgd2hlbiBnY21fc2V0a2V5KCkgYW5kIGNjbV9zZXRrZXkoKSBhcmUgdXNlZCBtb3JlIHRoYW4KKyAgICAgb25jZSBvbiB0aGUgc2FtZSBjb250ZXh0LgorICAgKiBGaXggYnVnIGluIHNzbF9tYWlsX2NsaWVudCB3aGVuIHBhc3N3b3JkIGlzIGxvbmdlciB0aGF0IHVzZXJuYW1lIChmb3VuZAorICAgICBieSBCcnVubyBQYXBlKS4KKyAgICogRml4IHVuZGVmaW5lZCBiZWhhdmlvdXIgKG1lbWNtcCggTlVMTCwgTlVMTCwgMCApOykgaW4gWC41MDkgbW9kdWxlcworICAgICAoZGV0ZWN0ZWQgYnkgQ2xhbmcncyAzLjYgVUJTYW4pLgorICAgKiBtcGlfc2l6ZSgpIGFuZCBtcGlfbXNiKCkgd291bGQgc2VnZmF1bHQgd2hlbiBjYWxsZWQgb24gYW4gbXBpIHRoYXQgaXMKKyAgICAgaW5pdGlhbGl6ZWQgYnV0IG5vdCBzZXQgKGZvdW5kIGJ5IHByYXZpYykuCisgICAqIEZpeCBkZXRlY3Rpb24gb2Ygc3VwcG9ydCBmb3IgZ2V0cmFuZG9tKCkgb24gTGludXggKHJlcG9ydGVkIGJ5IHN5enplcikgYnkKKyAgICAgZG9pbmcgaXQgYXQgcnVudGltZSAodXNpbmcgdW5hbWUpIHJhdGhlciB0aGF0IGNvbXBpbGUgdGltZS4KKyAgICogRml4IGhhbmRsaW5nIG9mIHN5bWxpbmtzIGJ5ICJtYWtlIGluc3RhbGwiIChmb3VuZCBieSBHYcOrbCBQT1JUQVkpLgorICAgKiBGaXggcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAobm90IHRyaWdlcnJhYmxlIHJlbW90ZWx5KSB3aGVuCisgICAgIHNzbF93cml0ZSgpIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGhhbmRzaGFrZSBpcyBmaW5pc2hlZCAoaW50cm9kdWNlZCBpbgorICAgICAxLjMuMTApIChmaXJzdCByZXBvcnRlZCBieSBNYXJ0aW4gQmx1bWVuc3RpbmdsKS4KKyAgICogRml4IGJ1ZyBpbiBwa19wYXJzZV9rZXkoKSB0aGF0IGNhdXNlZCBzb21lIHZhbGlkIHByaXZhdGUgRUMga2V5cyB0byBiZQorICAgICByZWplY3RlZC4KKyAgICogRml4IGJ1ZyBpbiBWaWEgUGFkbG9jayBzdXBwb3J0IChmb3VuZCBieSBOaWtvcyBNYXZyb2dpYW5ub3BvdWxvcykuCisgICAqIEZpeCB0aHJlYWQgc2FmZXR5IGJ1ZyBpbiBSU0Egb3BlcmF0aW9ucyAoZm91bmQgYnkgRnJlZHJpayBBeGVsc3NvbikuCisgICAqIEZpeCBoYXJkY2xvY2soKSAob25seSB1c2VkIGluIHRoZSBiZW5jaG1hcmtpbmcgcHJvZ3JhbSkgd2l0aCBzb21lCisgICAgIHZlcnNpb25zIG9mIG1pbmd3NjQgKGZvdW5kIGJ5IGt4amhsZWxlKS4KKyAgICogRml4IHdhcm5pbmdzIGZyb20gbWluZ3c2NCBpbiB0aW1pbmcuYyAoZm91bmQgYnkga3hqa2xlbGUpLgorICAgKiBGaXggcG90ZW50aWFsIHVuaW50ZW5kZWQgc2lnbiBleHRlbnNpb24gaW4gYXNuMV9nZXRfbGVuKCkgb24gNjQtYml0CisgICAgIHBsYXRmb3Jtcy4KKyAgICogRml4IHBvdGVudGlhbCBtZW1vcnkgbGVhayBpbiBzc2xfc2V0X3BzaygpIChmb3VuZCBieSBNYW5zb3VyIE1vdWZpZCkuCisgICAqIEZpeCBjb21waWxlIGVycm9yIHdoZW4gUE9MQVJTU0xfU1NMX0RJU0FCTEVfUkVORUdPVEFUSU9OIGFuZAorICAgICBQT0xBUlNTTF9TU0xfU1NFU1NJT05fVElDS0VUUyB3aGVyZSBib3RoIGVuYWJsZWQgaW4gY29uZmlnLmggKGludHJvZHVjZWQKKyAgICAgaW4gMS4zLjEwKS4KKyAgICogQWRkIG1pc3NpbmcgZXh0ZXJuICJDIiBndWFyZCBpbiBhZXNuaS5oIChyZXBvcnRlZCBieSBhbWlyIHphbWFuaSkuCisgICAqIEFkZCBtaXNzaW5nIGRlcGVuZGVuY3kgb24gU0hBLTI1NiBpbiBzb21lIHg1MDkgcHJvZ3JhbXMgKHJlcG9ydGVkIGJ5CisgICAgIEdlcmdlbHkgQnVkYWkpLgorICAgKiBGaXggYnVnIHJlbGF0ZWQgdG8gc3NsX3NldF9jdXJ2ZXMoKTogdGhlIGNsaWVudCBkaWRuJ3QgY2hlY2sgdGhhdCB0aGUKKyAgICAgY3VydmUgcGlja2VkIGJ5IHRoZSBzZXJ2ZXIgd2FzIGFjdHVhbGx5IGFsbG93ZWQuCisKK0NoYW5nZXMKKyAgICogUmVtb3ZlIGJpYXMgaW4gbXBpX2dlbl9wcmltZSAoY29udHJpYnV0ZWQgYnkgUGFzY2FsIEp1bm9kKS4KKyAgICogUmVtb3ZlIHBvdGVudGlhbCBzb3VyY2VzIG9mIHRpbWluZyB2YXJpYXRpb25zIChzb21lIGNvbnRyaWJ1dGVkIGJ5IFBhc2NhbAorICAgICBKdW5vZCkuCisgICAqIE9wdGlvbnMgUE9MQVJTU0xfSEFWRV9JTlQ4IGFuZCBQT0xBUlNTTF9IQVZFX0lOVDE2IGFyZSBkZXByZWNhdGVkLgorICAgKiBFbmFibGluZyBQT0xBUlNTTF9ORVRfQyB3aXRob3V0IFBPTEFSU1NMX0hBVkVfSVBWNiBpcyBkZXByZWNhdGVkLgorICAgKiBjb21wYXQtMS4yLmggYW5kIG9wZW5zc2wuaCBhcmUgZGVwcmVjYXRlZC4KKyAgICogQWRqdXN0aW5nL292ZXJyaWRpbmcgQ0ZMQUdTIGFuZCBMREZMQUdTIHdpdGggdGhlIG1ha2UgYnVpbGQgc3lzdGVtIGlzIG5vdworICAgICBtb3JlIGZsZXhpYmxlICh3YXJuaW5nOiBPRkxBR1MgaXMgbm90IHVzZWQgYW55IG1vcmUpIChzZWUgdGhlIFJFQURNRSkKKyAgICAgKGNvbnRyaWJ1dGVkIGJ5IEFsb24gQmFyLUxldikuCisgICAqIHNzbF9zZXRfb3duX2NlcnQoKSBubyBsb25nZXIgY2FsbHMgcGtfY2hlY2tfcGFpcigpIHNpbmNlIHRoZQorICAgICBwZXJmb3JtYW5jZSBpbXBhY3Qgd2FzIGJhZCBmb3Igc29tZSB1c2VycyAodGhpcyB3YXMgaW50cm9kdWNlZCBpbiAxLjMuMTApLgorICAgKiBNb3ZlIGZyb20gU0hBLTEgdG8gU0hBLTI1NiBpbiBleGFtcGxlIHByb2dyYW1zIHVzaW5nIHNpZ25hdHVyZXMKKyAgICAgKHN1Z2dlc3RlZCBieSBUaG9yc3RlbiBNw7xobGZlbGRlcikuCisgICAqIFJlbW92ZSBzb21lIHVubmVlZGVkIGluY2x1c2lvbnMgb2YgaGVhZGVyIGZpbGVzIGZyb20gdGhlIHN0YW5kYXJkIGxpYnJhcnkKKyAgICAgIm1pbmltaXplIiBvdGhlcnMgKGVnIHVzZSBzdGRkZWYuaCBpZiBvbmx5IHNpemVfdCBpcyBuZWVkZWQpLgorICAgKiBDaGFuZ2UgI2luY2x1ZGUgbGluZXMgaW4gdGVzdCBmaWxlcyB0byB1c2UgZG91YmxlIHF1b3RlcyBpbnN0ZWFkIG9mIGFuZ2xlCisgICAgIGJyYWNrZXRzIGZvciB1bmlmb3JtaXR5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvZGUuCisgICAqIFJlbW92ZSBkZXBlbmRlbmN5IG9uIHNzY2FuZigpIGluIFguNTA5IHBhcnNpbmcgbW9kdWxlcy4KKworPSBtYmVkIFRMUyAxLjMuMTAgcmVsZWFzZWQgMjAxNS0wMi0wOQorU2VjdXJpdHkKKyAgICogTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBidWZmZXItYmFzZWQgYWxsb2NhdG9yIHdoZW4gdGhlIGJ1ZmZlciBpcworICAgICBmdWxsIGFuZCBwb2xhcnNzbF9mcmVlKCkgaXMgY2FsbGVkIChmb3VuZCBieSBNYXJrIEhhc2VtZXllcikKKyAgICAgKG9ubHkgcG9zc2libGUgaWYgUE9MQVJTU0xfTUVNT1JZX0JVRkZFUl9BTExPQ19DIGlzIGVuYWJsZWQsIHdoaWNoIGl0IGlzCisgICAgIG5vdCBieSBkZWZhdWx0KS4KKyAgICogRml4IHJlbW90ZWx5LXRyaWdnZXJhYmxlIHVuaW5pdGlhbGlzZWQgcG9pbnRlciBkZXJlZmVyZW5jZSBjYXVzZWQgYnkKKyAgICAgY3JhZnRlZCBYLjUwOSBjZXJ0aWZpY2F0ZSAoVExTIHNlcnZlciBpcyBub3QgYWZmZWN0ZWQgaWYgaXQgZG9lc24ndCBhc2sgZm9yIGEKKyAgICAgY2xpZW50IGNlcnRpZmljYXRlKSAoZm91bmQgdXNpbmcgQ29kZW5vbWljb24gRGVmZW5zaWNzKS4KKyAgICogRml4IHJlbW90ZWx5LXRyaWdnZXJhYmxlIG1lbW9yeSBsZWFrIGNhdXNlZCBieSBjcmFmdGVkIFguNTA5IGNlcnRpZmljYXRlcworICAgICAoVExTIHNlcnZlciBpcyBub3QgYWZmZWN0ZWQgaWYgaXQgZG9lc24ndCBhc2sgZm9yIGEgY2xpZW50IGNlcnRpZmljYXRlKQorICAgICAoZm91bmQgdXNpbmcgQ29kZW5vbWljb24gRGVmZW5zaWNzKS4KKyAgICogRml4IHBvdGVudGlhbCBzdGFjayBvdmVyZmxvdyB3aGlsZSBwYXJzaW5nIGNyYWZ0ZWQgWC41MDkgY2VydGlmaWNhdGVzCisgICAgIChUTFMgc2VydmVyIGlzIG5vdCBhZmZlY3RlZCBpZiBpdCBkb2Vzbid0IGFzayBmb3IgYSBjbGllbnQgY2VydGlmaWNhdGUpCisgICAgIChmb3VuZCB1c2luZyBDb2Rlbm9taWNvbiBEZWZlbnNpY3MpLgorICAgKiBGaXggdGltaW5nIGRpZmZlcmVuY2UgdGhhdCBjb3VsZCB0aGVvcmV0aWNhbGx5IGxlYWQgdG8gYQorICAgICBCbGVpY2hlbmJhY2hlci1zdHlsZSBhdHRhY2sgaW4gdGhlIFJTQSBhbmQgUlNBLVBTSyBrZXkgZXhjaGFuZ2VzCisgICAgIChyZXBvcnRlZCBieSBTZWJhc3RpYW4gU2NoaW56ZWwpLgorCitGZWF0dXJlcworICAgKiBBZGQgc3VwcG9ydCBmb3IgRkFMTEJBQ0tfU0NTViAoZHJhZnQtaWV0Zi10bHMtZG93bmdyYWRlLXNjc3YpLgorICAgKiBBZGQgc3VwcG9ydCBmb3IgRXh0ZW5kZWQgTWFzdGVyIFNlY3JldCAoZHJhZnQtaWV0Zi10bHMtc2Vzc2lvbi1oYXNoKS4KKyAgICogQWRkIHN1cHBvcnQgZm9yIEVuY3J5cHQtdGhlbi1NQUMgKFJGQyA3MzY2KS4KKyAgICogQWRkIGZ1bmN0aW9uIHBrX2NoZWNrX3BhaXIoKSB0byB0ZXN0IGlmIHB1YmxpYyBhbmQgcHJpdmF0ZSBrZXlzIG1hdGNoLgorICAgKiBBZGQgeDUwOV9jcmxfcGFyc2VfZGVyKCkuCisgICAqIEFkZCBjb21waWxlLXRpbWUgb3B0aW9uIFBPTEFSU1NMX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQSB0byBsaW1pdCB0aGUKKyAgICAgbGVuZ3RoIG9mIGFuIFguNTA5IHZlcmlmaWNhdGlvbiBjaGFpbi4KKyAgICogU3VwcG9ydCBmb3IgcmVuZWdvdGlhdGlvbiBjYW4gbm93IGJlIGRpc2FibGVkIGF0IGNvbXBpbGUtdGltZQorICAgKiBTdXBwb3J0IGZvciAxL24tMSByZWNvcmQgc3BsaXR0aW5nLCBhIGNvdW50ZXJtZWFzdXJlIGFnYWluc3QgQkVBU1QuCisgICAqIENlcnRpZmljYXRlIHNlbGVjdGlvbiBiYXNlZCBvbiBzaWduYXR1cmUgaGFzaCwgcHJlZmVycmluZyBTSEEtMSBvdmVyIFNIQS0yCisgICAgIGZvciBwcmUtMS4yIGNsaWVudHMgd2hlbiBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMgYXJlIGF2YWlsYWJsZS4KKyAgICogQWRkIHN1cHBvcnQgZm9yIGdldHJhbmRvbSgpIHN5c2NhbGwgb24gcmVjZW50IExpbnV4IGtlcm5lbHMgd2l0aCBHbGliYyBvcgorICAgICBhIGNvbXBhdGlibGUgZW5vdWdoIGxpYmMgKGVnIHVDbGliYykuCisgICAqIEFkZCBzc2xfc2V0X2FyYzRfc3VwcG9ydCgpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRpc2FibGUgUkM0IGF0IHJ1bnRpbWUKKyAgICAgd2hpbGUgdXNpbmcgdGhlIGRlZmF1bHQgY2lwaGVyc3VpdGUgbGlzdC4KKyAgICogQWRkZWQgbmV3IGVycm9yIGNvZGVzIGFuZCBkZWJ1ZyBtZXNzYWdlcyBhYm91dCBzZWxlY3Rpb24gb2YKKyAgICAgY2lwaGVyc3VpdGUvY2VydGlmaWNhdGUuCisKK0J1Z2ZpeAorICAgKiBTdGFjayBidWZmZXIgb3ZlcmZsb3cgaWYgY3RyX2RyYmdfdXBkYXRlKCkgaXMgY2FsbGVkIHdpdGggdG9vIGxhcmdlCisgICAgIGFkZF9sZW4gKGZvdW5kIGJ5IEplYW4tUGhpbGlwcGUgQXVtYXNzb24pIChub3QgdHJpZ2dlcmFibGUgcmVtb3RlbHkpLgorICAgKiBQb3NzaWJsZSBidWZmZXIgb3ZlcmZsb3cgb2YgbGVuZ3RoIGF0IG1vc3QgUE9MQVJTU0xfTUVNT1JZX0FMSUdOX01VTFRJUExFCisgICAgIGlmIG1lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCgpIHdhcyBjYWxsZWQgd2l0aCBidWYgbm90IGFsaWduZWQgYW5kIGxlbiBub3QKKyAgICAgYSBtdWx0aXBsZSBvZiBQT0xBUlNTTF9NRU1PUllfQUxJR05fTVVMVElQTEUgKG5vdCB0cmlnZ2VyYWJsZSByZW1vdGVseSkuCisgICAqIFVzZXIgc2V0IENGTEFHUyB3ZXJlIGlnbm9yZWQgYnkgQ21ha2Ugd2l0aCBnY2MgKGludHJvZHVjZWQgaW4gMS4zLjksIGZvdW5kCisgICAgIGJ5IEp1bGlhbiBPc3BhbGQpLgorICAgKiBGaXggcG90ZW50aWFsIHVuZGVmaW5lZCBiZWhhdmlvdXIgaW4gQ2FtZWxsaWEuCisgICAqIEZpeCBwb3RlbnRpYWwgZmFpbHVyZSBpbiBFQ0RTQSBzaWduYXR1cmVzIHdoZW4gUE9MQVJTU0xfRUNQX01BWF9CSVRTIGlzIGEKKyAgICAgbXVsdGlwbGUgb2YgOCAoZm91bmQgYnkgR2VyZ2VseSBCdWRhaSkuCisgICAqIEZpeCB1bmNoZWNrZWQgcmV0dXJuIGNvZGUgaW4geDUwOV9jcnRfcGFyc2VfcGF0aCgpIG9uIFdpbmRvd3MgKGZvdW5kIGJ5CisgICAgIFBldGVyIFZhc2tvdmljKS4KKyAgICogRml4IGFzc2VtYmx5IHNlbGVjdGlvbiBmb3IgTUlQUzY0ICh0aGFua3MgdG8gSmFtZXMgQ293Z2lsbCkuCisgICAqIHNzbF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIG5vdyB3b3JrcyBldmVuIGlmIHRoZSBoYW5kc2hha2Ugd2FzIGFib3J0ZWQgZHVlCisgICAgIHRvIGEgZmFpbGVkIHZlcmlmaWNhdGlvbiAoZm91bmQgYnkgRnJlZHJpayBBeGVsc3NvbikuCisgICAqIFNraXAgd3JpdGluZyBhbmQgcGFyc2luZyBzaWduYXR1cmVfYWxnb3JpdGhtIGV4dGVuc2lvbiBpZiBub25lIG9mIHRoZQorICAgICBrZXkgZXhjaGFuZ2VzIGVuYWJsZWQgbmVlZHMgY2VydGlmaWNhdGVzLiBUaGlzIGZpeGVzIGEgcG9zc2libGUgaW50ZXJvcAorICAgICBpc3N1ZSB3aXRoIHNvbWUgc2VydmVycyB3aGVuIGEgemVyby1sZW5ndGggZXh0ZW5zaW9uIHdhcyBzZW50LiAoUmVwb3J0ZWQKKyAgICAgYnkgUGV0ZXIgRGV0dG1hbi4pCisgICAqIE9uIGEgMC1sZW5ndGggaW5wdXQsIGJhc2U2NF9lbmNvZGUoKSBkaWQgbm90IGNvcnJlY3RseSBzZXQgb3V0cHV0IGxlbmd0aAorICAgICAoZm91bmQgYnkgSGVuZHJpayB2YW4gZGVuIEJvb2dhYXJkKS4KKworQ2hhbmdlcworICAgKiBVc2UgZGV0ZXJtaW5pc3RpYyBub25jZXMgZm9yIEFFQUQgY2lwaGVycyBpbiBUTFMgYnkgZGVmYXVsdCAocG9zc2libGUgdG8KKyAgICAgc3dpdGNoIGJhY2sgdG8gcmFuZG9tIHdpdGggUE9MQVJTU0xfU1NMX0FFQURfUkFORE9NX0lWIGluIGNvbmZpZy5oKS4KKyAgICogQmxpbmQgUlNBIHByaXZhdGUgb3BlcmF0aW9ucyBldmVuIHdoZW4gUE9MQVJTU0xfUlNBX05PX0NSVCBpcyBkZWZpbmVkLgorICAgKiBzc2xfc2V0X293bl9jZXJ0KCkgbm93IHJldHVybnMgYW4gZXJyb3Igb24ga2V5LWNlcnRpZmljYXRlIG1pc21hdGNoLgorICAgKiBGb3JiaWQgcmVwZWF0ZWQgZXh0ZW5zaW9ucyBpbiBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisgICAqIGRlYnVnX3ByaW50X2J1ZigpIG5vdyBwcmludHMgYSB0ZXh0IHZpZXcgaW4gYWRkaXRpb24gdG8gaGV4YWRlY2ltYWwuCisgICAqIEEgc3BlY2lmaWMgZXJyb3IgaXMgbm93IHJldHVybmVkIHdoZW4gdGhlcmUgYXJlIGNpcGhlcnN1aXRlcyBpbiBjb21tb24KKyAgICAgYnV0IG5vbmUgb2YgdGhlbSBpcyB1c2FibGUgZHVlIHRvIGV4dGVybmFsIGZhY3RvcnMgc3VjaCBhcyBubyBjZXJ0aWZpY2F0ZQorICAgICB3aXRoIGEgc3VpdGFibGUgKGV4dGVuZGVkKUtleVVzYWdlIG9yIGN1cnZlIG9yIG5vIFBTSyBzZXQuCisgICAqIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBkaXNhYmxlIG5lZ290aWF0aW9uIG9mIHRydW5jYXRlZCBITUFDIHNlcnZlci1zaWRlCisgICAgIGF0IHJ1bnRpbWUgd2l0aCBzc2xfc2V0X3RydW5jYXRlZF9obWFjKCkuCisgICAqIEV4YW1wbGUgcHJvZ3JhbXMgZm9yIFNTTCBjbGllbnQgYW5kIHNlcnZlciBub3cgZGlzYWJsZSBTU0x2MyBieSBkZWZhdWx0LgorICAgKiBFeGFtcGxlIHByb2dyYW1zIGZvciBTU0wgY2xpZW50IGFuZCBzZXJ2ZXIgbm93IGRpc2FibGUgUkM0IGJ5IGRlZmF1bHQuCisgICAqIFVzZSBwbGF0Zm9ybS5oIGluIGFsbCB0ZXN0IHN1aXRlcyBhbmQgcHJvZ3JhbXMuCisKKz0gUG9sYXJTU0wgMS4zLjkgcmVsZWFzZWQgMjAxNC0xMC0yMAorU2VjdXJpdHkKKyAgICogTG93ZXN0IGNvbW1vbiBoYXNoIHdhcyBzZWxlY3RlZCBmcm9tIHNpZ25hdHVyZV9hbGdvcml0aG1zIGV4dGVuc2lvbiBpbgorICAgICBUTFMgMS4yIChmb3VuZCBieSBEYXJyZW4gQmFuZSkgKGludHJvZHVjZWQgaW4gMS4zLjgpLgorICAgKiBSZW1vdGVseS10cmlnZ2VyYWJsZSBtZW1vcnkgbGVhayB3aGVuIHBhcnNpbmcgc29tZSBYLjUwOSBjZXJ0aWZpY2F0ZXMKKyAgICAgKHNlcnZlciBpcyBub3QgYWZmZWN0ZWQgaWYgaXQgZG9lc24ndCBhc2sgZm9yIGEgY2xpZW50IGNlcnRpZmljYXRlKQorICAgICAoZm91bmQgdXNpbmcgQ29kZW5vbWljb24gRGVmZW5zaWNzKS4KKyAgICogUmVtb3RlbHktdHJpZ2dlcmFibGUgbWVtb3J5IGxlYWsgd2hlbiBwYXJzaW5nIGNyYWZ0ZWQgQ2xpZW50SGVsbG8KKyAgICAgKG5vdCBhZmZlY3RlZCBpZiBFQ0Mgc3VwcG9ydCB3YXMgY29tcGlsZWQgb3V0KSAoZm91bmQgdXNpbmcgQ29kZW5vbWljb24KKyAgICAgRGVmZW5zaWNzKS4KKworQnVnZml4CisgICAqIFN1cHBvcnQgZXNjYXBpbmcgb2YgY29tbWFzIGluIHg1MDlfc3RyaW5nX3RvX25hbWVzKCkKKyAgICogRml4IGNvbXBpbGUgZXJyb3IgaW4gc3NsX3B0aHJlYWRfc2VydmVyIChmb3VuZCBieSBKdWxpYW4gT3NwYWxkKS4KKyAgICogRml4IG5ldF9hY2NlcHQoKSByZWdhcmRpbmcgbm9uLWJsb2NraW5nIHNvY2tldHMgKGZvdW5kIGJ5IEx1Y2EgUGVzY2UpLgorICAgKiBEb24ndCBwcmludCB1bmluaXRpYWxpc2VkIGJ1ZmZlciBpbiBzc2xfbWFpbF9jbGllbnQgKGZvdW5kIGJ5IE1hcmMgQWJlbCkuCisgICAqIEZpeCB3YXJuaW5ncyBmcm9tIENsYW5nJ3Mgc2Nhbi1idWlsZCAoY29udHJpYnV0ZWQgYnkgQWxmcmVkIEtsb21wKS4KKyAgICogRml4IGNvbXBpbGUgZXJyb3IgaW4gdGltaW5nLmMgd2hlbiBQT0xBUlNTTF9ORVRfQyBhbmQgUE9MQVJTU0xfU0VMRlRFU1QKKyAgICAgYXJlIGRlZmluZWQgYnV0IG5vdCBQT0xBUlNTTF9IQVZFX1RJTUUgKGZvdW5kIGJ5IFN0ZXBoYW5lIERpIFZpdG8pLgorICAgKiBSZW1vdmUgbm9uLWV4aXN0ZW50IGZpbGUgZnJvbSBWUyBwcm9qZWN0cyAoZm91bmQgYnkgUGV0ZXIgVmFza292aWMpLgorICAgKiBzc2xfcmVhZCgpIGNvdWxkIHJldHVybiBub24tYXBwbGljYXRpb24gZGF0YSByZWNvcmRzIG9uIHNlcnZlciB3aGlsZQorICAgICByZW5lZ290YXRpb24gd2FzIHBlbmRpbmcsIGFuZCBvbiBjbGllbnQgd2hlbiBhIEhlbGxvUmVxdWVzdCB3YXMgcmVjZWl2ZWQuCisgICAqIFNlcnZlci1pbml0aWF0ZWQgcmVuZWdvdGlhdGlvbiB3b3VsZCBmYWlsIHdpdGggbm9uLWJsb2NraW5nIEkvTyBpZiB0aGUKKyAgICAgd3JpdGUgY2FsbGJhY2sgcmV0dXJuZWQgV0FOVF9XUklURSB3aGVuIHJlcXVlc3RpbmcgcmVuZWdvdGlhdGlvbi4KKyAgICogc3NsX2Nsb3NlX25vdGlmeSgpIGNvdWxkIHNlbmQgbW9yZSB0aGFuIG9uZSBtZXNzYWdlIGluIHNvbWUgY2lyY3Vtc3RhbmNlcworICAgICB3aXRoIG5vbi1ibG9ja2luZyBJL08uCisgICAqIEZpeCBjb21waWxlciB3YXJuaW5ncyBvbiBpT1MgKGZvdW5kIGJ5IFNhbmRlciBOaWVtZWlqZXIpLgorICAgKiB4NTA5X2NydF9wYXJzZSgpIGRpZCBub3QgaW5jcmVhc2UgdG90YWxfZmFpbGVkIG9uIFBFTSBlcnJvcgorICAgKiBGaXggY29tcGlsZSBlcnJvciB3aXRoIGFybWNjIGluIG1waV9pc19wcmltZSgpCisgICAqIEZpeCBwb3RlbnRpYWwgYmFkIHJlYWQgaW4gcGFyc2luZyBTZXJ2ZXJIZWxsbyAoZm91bmQgYnkgQWRyaWVuCisgICAgIFZpYWxsZXRlbGxlKS4KKworQ2hhbmdlcworICAgKiBDaXBoZXJzdWl0ZXMgdXNpbmcgU0hBLTI1NiBvciBTSEEtMzg0IG5vdyByZXF1aXJlIFRMUyAxLnggKHRoZXJlIGlzIG5vCisgICAgIHN0YW5kYXJkIGRlZmluaW5nIGhvdyB0byB1c2UgU0hBLTIgd2l0aCBTU0wgMy4wKS4KKyAgICogQ2lwaGVyc3VpdGVzIHVzaW5nIFJTQS1QU0sga2V5IGV4Y2hhbmdlIG5ldyByZXF1aXJlIFRMUyAxLnggKHRoZSBzcGVjIGlzCisgICAgIGFtYmlndW91cyBvbiBob3cgdG8gZW5jb2RlIHNvbWUgcGFja2V0cyB3aXRoIFNTTCAzLjApLgorICAgKiBNYWRlIGJ1ZmZlciBzaXplIGluIHBrX3dyaXRlXyhwdWIpa2V5X3BlbSgpIG1vcmUgZHluYW1pYywgZWcgc21hbGxlciBpZgorICAgICBSU0EgaXMgZGlzYWJsZWQsIGxhcmdlciBpZiBQT0xBUlNTTF9NUElfTUFYX1NJWkUgaXMgbGFyZ2VyLgorICAgKiBzc2xfcmVhZCgpIG5vdyByZXR1cm5zIFBPTEFSU1NMX0VSUl9ORVRfV0FOVF9SRUFEIHJhdGhlciB0aGFuCisgICAgIFBPTEFSU1NMX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFIG9uIGhhcm1sZXNzIGFsZXJ0cy4KKyAgICogUE9MQVJTU0xfTVBJX01BWF9TSVpFIG5vdyBkZWZhdWx0cyB0byAxMDI0IGluIG9yZGVyIHRvIGFsbG93IDgxOTIgYml0cworICAgICBSU0Ega2V5cy4KKyAgICogQWNjZXB0IHNwYWNlcyBhdCBlbmQgb2YgbGluZSBvciBlbmQgb2YgYnVmZmVyIGluIGJhc2U2NF9kZWNvZGUoKS4KKyAgICogWC41MDkgY2VydGlmaWNhdGVzIHdpdGggbW9yZSB0aGFuIG9uZSBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUgcGVyCisgICAgIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUgYXJlIG5vdCBhY2NlcHRlZCBhbnkgbW9yZS4KKworPSBQb2xhclNTTCAxLjMuOCByZWxlYXNlZCAyMDE0LTA3LTExCitTZWN1cml0eQorICAgKiBGaXggbGVuZ3RoIGNoZWNraW5nIGZvciBBRUFEIGNpcGhlcnN1aXRlcyAoZm91bmQgYnkgQ29kZW5vbWljb24pLgorICAgICBJdCB3YXMgcG9zc2libGUgdG8gY3Jhc2ggdGhlIHNlcnZlciAoYW5kIGNsaWVudCkgdXNpbmcgY3JhZnRlZCBtZXNzYWdlcworICAgICB3aGVuIGEgR0NNIHN1aXRlIHdhcyBjaG9zZW4uCisKK0ZlYXR1cmVzCisgICAqIEFkZCBDQ00gbW9kdWxlIGFuZCBjaXBoZXIgbW9kZSB0byBDaXBoZXIgTGF5ZXIKKyAgICogU3VwcG9ydCBmb3IgQ0NNIGFuZCBDQ01fOCBjaXBoZXJzdWl0ZXMKKyAgICogU3VwcG9ydCBmb3IgcGFyc2luZyBhbmQgdmVyaWZ5aW5nIFJTQVNTQS1QU1Mgc2lnbmF0dXJlcyBpbiB0aGUgWC41MDkKKyAgICAgbW9kdWxlcyAoY2VydGlmaWNhdGVzLCBDUkxzIGFuZCBDU1JzKS4KKyAgICogQmxvd2Zpc2ggaW4gdGhlIGNpcGhlciBsYXllciBub3cgc3VwcG9ydHMgdmFyaWFibGUgbGVuZ3RoIGtleXMuCisgICAqIEFkZCBleGFtcGxlIGNvbmZpZy5oIGZvciBQU0sgd2l0aCBDQ00sIG9wdGltaXplZCBmb3IgbG93IFJBTSB1c2FnZS4KKyAgICogT3B0aW1pemUgZm9yIFJBTSB1c2FnZSBpbiBleGFtcGxlIGNvbmZpZy5oIGZvciBOU0EgU3VpdGUgQiBwcm9maWxlLgorICAgKiBBZGQgUE9MQVJTU0xfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTIHRvIGFsbG93IHJlbW92aW5nIFJDNCBjaXBoZXJzdWl0ZXMKKyAgICAgZnJvbSB0aGUgZGVmYXVsdCBsaXN0IChpbmFjdGl2ZSBieSBkZWZhdWx0KS4KKyAgICogQWRkIHNlcnZlci1zaWRlIGVuZm9yY2VtZW50IG9mIHNlbnQgcmVuZWdvdGlhdGlvbiByZXF1ZXN0cworICAgICAoc3NsX3NldF9yZW5lZ290aWF0aW9uX2VuZm9yY2VkKCkpCisgICAqIEFkZCBTU0xfQ0lQSEVSU1VJVEVTIGNvbmZpZy5oIGZsYWcgdG8gYWxsb3cgc3BlY2lmeWluZyBhIGxpc3Qgb2YKKyAgICAgY2lwaGVyc3VpdGVzIHRvIHVzZSBhbmQgc2F2ZSBzb21lIG1lbW9yeSBpZiB0aGUgbGlzdCBpcyBzbWFsbC4KKworQ2hhbmdlcworICAgKiBBZGQgTElOS19XSVRIX1BUSFJFQUQgb3B0aW9uIGluIENNYWtlIGZvciBleHBsaWNpdCBsaW5raW5nIHRoYXQgaXMKKyAgICAgcmVxdWlyZWQgb24gc29tZSBwbGF0Zm9ybXMgKGUuZy4gT3BlbkJTRCkKKyAgICogTWlncmF0ZSB6ZXJvaXppbmcgb2YgZGF0YSB0byBwb2xhcnNzbF96ZXJvaXplKCkgaW5zdGVhZCBvZiBtZW1zZXQoKQorICAgICBhZ2FpbnN0IHVud2FudGVkIGNvbXBpbGVyIG9wdGltaXphdGlvbnMKKyAgICogbWRfbGlzdCgpIG5vdyByZXR1cm5zIGhhc2hlcyBzdHJvbmdlc3QgZmlyc3QKKyAgICogU2VsZWN0aW9uIG9mIGhhc2ggZm9yIHNpZ25pbmcgU2VydmVyS2V5RXhjaGFuZ2UgaW4gVExTIDEuMiBub3cgcGlja3MKKyAgICAgc3Ryb25nZXN0IG9mZmVyZWQgYnkgY2xpZW50LgorICAgKiBBbGwgcHVibGljIGNvbnRleHRzIGhhdmUgX2luaXQoKSBhbmQgX2ZyZWUoKSBmdW5jdGlvbnMgbm93IGZvciBzaW1wbGVyCisgICAgIHVzYWdlIHBhdHRlcm4KKworQnVnZml4CisgICAqIEZpeCBpbiBkZWJ1Z19wcmludF9tc2coKQorICAgKiBFbmZvcmNlIGFsaWdubWVudCBpbiB0aGUgYnVmZmVyIGFsbG9jYXRvciBldmVuIGlmIGJ1ZmZlciBpcyBub3QgYWxpZ25lZAorICAgKiBSZW1vdmUgbGVzcy10aGFuLXplcm8gY2hlY2tzIG9uIHVuc2lnbmVkIG51bWJlcnMKKyAgICogU3RyaWN0ZXIgY2hlY2sgb24gU1NMIENsaWVudEhlbGxvIGludGVybmFsIHNpemVzIGNvbXBhcmVkIHRvIGFjdHVhbCBwYWNrZXQKKyAgICAgc2l6ZSAoZm91bmQgYnkgVHJ1c3RJblNvZnQpCisgICAqIEZpeCBXU0FTdGFydHVwKCkgcmV0dXJuIHZhbHVlIGNoZWNrIChmb3VuZCBieSBQZXRlciBWYXNrb3ZpYykKKyAgICogT3RoZXIgbWlub3IgaXNzdWVzIChmb3VuZCBieSBQZXRlciBWYXNrb3ZpYykKKyAgICogRml4IHN5bWxpbmsgY29tbWFuZCBmb3IgY3Jvc3MgY29tcGlsaW5nIHdpdGggQ01ha2UgKGZvdW5kIGJ5IEFuZHJlCisgICAgIEhlaW5lY2tlKQorICAgKiBGaXggREVSIG91dHB1dCBvZiBnZW5fa2V5IGFwcCAoZm91bmQgYnkgR2VyZ2VseSBCdWRhaSkKKyAgICogVmVyeSBzbWFsbCByZWNvcmRzIHdlcmUgaW5jb3JyZWN0bHkgcmVqZWN0ZWQgd2hlbiB0cnVuY2F0ZWQgSE1BQyB3YXMgaW4KKyAgICAgdXNlIHdpdGggc29tZSBjaXBoZXJzdWl0ZXMgYW5kIHZlcnNpb25zIChSQzQgaW4gYWxsIHZlcnNpb25zLCBDQkMgd2l0aAorICAgICB2ZXJzaW9ucyA8IFRMUyAxLjEpLgorICAgKiBWZXJ5IGxhcmdlIHJlY29yZHMgdXNpbmcgbW9yZSB0aGFuIDIyNCBieXRlcyBvZiBwYWRkaW5nIHdlcmUgaW5jb3JyZWN0bHkKKyAgICAgcmVqZWN0ZWQgd2l0aCBDQkMtYmFzZWQgY2lwaGVyc3VpdGVzIGFuZCBUTFMgPj0gMS4xCisgICAqIFZlcnkgbGFyZ2UgcmVjb3JkcyB1c2luZyBsZXNzIHBhZGRpbmcgY291bGQgY2F1c2UgYSBidWZmZXIgb3ZlcnJlYWQgb2YgdXAKKyAgICAgdG8gMzIgYnl0ZXMgd2l0aCBDQkMtYmFzZWQgY2lwaGVyc3VpdGVzIGFuZCBUTFMgPj0gMS4xCisgICAqIFJlc3RvcmUgYWJpbGl0eSB0byB1c2UgYSB2MSBjZXJ0IGFzIGEgQ0EgaWYgdHJ1c3RlZCBsb2NhbGx5LiAoVGhpcyBoYWQKKyAgICAgYmVlbiByZW1vdmVkIGluIDEuMy42LikKKyAgICogUmVzdG9yZSBhYmlsaXR5IHRvIGxvY2FsbHkgdHJ1c3QgYSBzZWxmLXNpZ25lZCBjZXJ0IHRoYXQgaXMgbm90IGEgcHJvcGVyCisgICAgIENBIGZvciB1c2UgYXMgYW4gZW5kIGVudGl0eSBjZXJ0aWZpY2F0ZS4gKFRoaXMgaGFkIGJlZW4gcmVtb3ZlZCBpbgorICAgICAxLjMuNi4pCisgICAqIEZpeCBwcmVwcm9jZXNzb3IgY2hlY2tzIGZvciBibl9tdWwgUFBDIGFzbSAoZm91bmQgYnkgQmFycnkgSy4gTmF0aGFuKS4KKyAgICogVXNlIFxuXHQgcmF0aGVyIHRoYW4gc2VtaWNvbG9ucyBmb3IgYm5fbXVsIGFzbSwgc2luY2Ugc29tZSBhc3NlbWJsZXJzCisgICAgIGludGVycHJldCBzZW1pY29sb25zIGFzIGNvbW1lbnQgZGVsaW1pdGVycyAoZm91bmQgYnkgQmFycnkgSy4gTmF0aGFuKS4KKyAgICogRml4IG9mZi1ieS1vbmUgZXJyb3IgaW4gcGFyc2luZyBTdXBwb3J0ZWQgUG9pbnQgRm9ybWF0IGV4dGVuc2lvbiB0aGF0CisgICAgIGNhdXNlZCBzb21lIGhhbmRzaGFrZXMgdG8gZmFpbC4KKyAgICogRml4IHBvc3NpYmxlIG1pc2NvbXB1dGF0aW9uIG9mIHRoZSBwcmVtYXN0ZXIgc2VjcmV0IHdpdGggREhFLVBTSyBrZXkKKyAgICAgZXhjaGFuZ2UgdGhhdCBjYXVzZWQgc29tZSBoYW5kc2hha2VzIHRvIGZhaWwgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMuCisgICAgIChGYWlsdXJlIHJhdGUgPD0gMS8yNTUgd2l0aCBjb21tb24gREhNIG1vZHVsaS4pCisgICAqIERpc2FibGUgYnJva2VuIFNwYXJjNjQgYm5fbXVsIGFzc2VtYmx5IChmb3VuZCBieSBGbG9yaWFuIE9ic2VyKS4KKyAgICogRml4IGJhc2U2NF9kZWNvZGUoKSB0byByZXR1cm4gYW5kIGNoZWNrIGxlbmd0aCBjb3JyZWN0bHkgKGluIGNhc2Ugb2YKKyAgICAgdGlnaHQgYnVmZmVycykKKyAgICogRml4IG1waV93cml0ZV9zdHJpbmcoKSB0byB3cml0ZSAiMDAiIGFzIGhleCBvdXRwdXQgZm9yIGVtcHR5IE1QSSAoZm91bmQKKyAgICAgYnkgSHVpIERvbmcpCisKKz0gUG9sYXJTU0wgMS4zLjcgcmVsZWFzZWQgb24gMjAxNC0wNS0wMgorRmVhdHVyZXMKKyAgICogZGVidWdfc2V0X2xvZ19tb2RlKCkgYWRkZWQgdG8gZGV0ZXJtaW5lIHJhdyBvciBmdWxsIGxvZ2dpbmcKKyAgICogZGVidWdfc2V0X3RocmVzaG9sZCgpIGFkZGVkIHRvIGlnbm9yZSBtZXNzYWdlcyBvdmVyIHRocmVzaG9sZCBsZXZlbAorICAgKiB2ZXJzaW9uX2NoZWNrX2ZlYXR1cmUoKSBhZGRlZCB0byBjaGVjayBmb3IgY29tcGlsZS10aW1lIG9wdGlvbnMgYXQKKyAgICAgcnVuLXRpbWUKKworQ2hhbmdlcworICAgKiBQT0xBUlNTTF9DT05GSUdfT1BUSU9OUyBoYXMgYmVlbiByZW1vdmVkLiBBbGwgdmFsdWVzIGFyZSBpbmRpdmlkdWFsbHkKKyAgICAgY2hlY2tlZCBhbmQgZmlsbGVkIGluIHRoZSByZWxldmFudCBtb2R1bGUgaGVhZGVycworICAgKiBEZWJ1ZyBtb2R1bGUgb25seSBvdXRwdXRzIGZ1bGwgbGluZXMgaW5zdGVhZCBvZiBwYXJ0cworICAgKiBCZXR0ZXIgc3VwcG9ydCBmb3IgdGhlIGRpZmZlcmVudCBBdHRyaWJ1dGUgVHlwZXMgZnJvbSBJRVRGIFBLSVggKFJGQyA1MjgwKQorICAgKiBBRVMtTkkgbm93IGNvbXBpbGVzIHdpdGggIm9sZCIgYXNzZW1ibGVycyB0b28KKyAgICogQ2lwaGVyc3VpdGVzIGJhc2VkIG9uIFJDNCBub3cgaGF2ZSB0aGUgbG93ZXN0IHByaW9yaXR5IGJ5IGRlZmF1bHQKKworQnVnZml4CisgICAqIE9ubHkgaXRlcmF0ZSBvdmVyIGFjdHVhbCBjZXJ0aWZpY2F0ZXMgaW4gc3NsX3dyaXRlX2NlcnRpZmljYXRlX3JlcXVlc3QoKQorICAgICAoZm91bmQgYnkgTWF0dGhldyBQYWdlKQorICAgKiBUeXBvcyBpbiBwbGF0Zm9ybS5jIGFuZCBwa2NzMTEuYyAoZm91bmQgYnkgRGFuaWVsIFBoaWxsaXBzIGFuZCBTdGVmZmFuCisgICAgIEthcmdlcikKKyAgICogY2VydF93cml0ZSBhcHAgc2hvdWxkIHVzZSBzdWJqZWN0IG9mIGlzc3VlciBjZXJ0aWZpY2F0ZSBhcyBpc3N1ZXIgb2YgY2VydAorICAgKiBGaXggZmFsc2UgcmVqZWN0IGluIHBhZGRpbmcgY2hlY2sgaW4gc3NsX2RlY3J5cHRfYnVmKCkgZm9yIENCQworICAgICBjaXBoZXJzdWl0ZXMsIGZvciBmdWxsIFNTTCBmcmFtZXMgb2YgZGF0YS4KKyAgICogSW1wcm92ZSBpbnRlcm9wZXJhYmlsaXR5IGJ5IG5vdCB3cml0aW5nIGV4dGVuc2lvbiBsZW5ndGggaW4gQ2xpZW50SGVsbG8gLworICAgICBTZXJ2ZXJIZWxsbyB3aGVuIG5vIGV4dGVuc2lvbnMgYXJlIHByZXNlbnQgKGZvdW5kIGJ5IE1hdHRoZXcgUGFnZSkKKyAgICogcnNhX2NoZWNrX3B1YmtleSgpIG5vdyBhbGxvd3MgYW4gRSB1cCB0byBOCisgICAqIE9uIE9wZW5CU0QsIHVzZSBhcmM0cmFuZG9tX2J1ZigpIGluc3RlYWQgb2YgcmFuZCgpIHRvIHByZXZlbnQgd2FybmluZ3MKKyAgICogbXBpX2ZpbGxfcmFuZG9tKCkgd2FzIGNyZWF0aW5nIG51bWJlcnMgbGFyZ2VyIHRoYW4gcmVxdWVzdGVkIG9uCisgICAgIGJpZy1lbmRpYW4gcGxhdGZvcm0gd2hlbiBzaXplIHdhcyBub3QgYW4gaW50ZWdlciBudW1iZXIgb2YgbGltYnMKKyAgICogRml4IGRlcGVuZGVuY2llcyBpc3N1ZXMgaW4gWC41MDkgdGVzdCBzdWl0ZS4KKyAgICogU29tZSBwYXJ0cyBvZiBzc2xfdGxzLmMgd2VyZSBjb21waWxlZCBldmVuIHdoZW4gdGhlIG1vZHVsZSB3YXMgZGlzYWJsZWQuCisgICAqIEZpeCBkZXRlY3Rpb24gb2YgRHJhZ29uZmx5QlNEIGluIG5ldC5jIChmb3VuZCBieSBNYXJrdXMgUGZlaWZmZXIpCisgICAqIEZpeCBkZXRlY3Rpb24gb2YgQ2xhbmcgb24gc29tZSBBcHBsZSBwbGF0Zm9ybXMgd2l0aCBDTWFrZQorICAgICAoZm91bmQgYnkgQmFycnkgSy4gTmF0aGFuKQorCis9IFBvbGFyU1NMIDEuMy42IHJlbGVhc2VkIG9uIDIwMTQtMDQtMTEKKworRmVhdHVyZXMKKyAgICogU3VwcG9ydCBmb3IgdGhlIEFMUE4gU1NMIGV4dGVuc2lvbgorICAgKiBBZGQgb3B0aW9uICd1c2VfZGV2X3JhbmRvbScgdG8gZ2VuX2tleSBhcHBsaWNhdGlvbgorICAgKiBFbmFibGUgdmVyaWZpY2F0aW9uIG9mIHRoZSBrZXlVc2FnZSBleHRlbnNpb24gZm9yIENBIGFuZCBsZWFmCisgICAgIGNlcnRpZmljYXRlcyAoUE9MQVJTU0xfWDUwOV9DSEVDS19LRVlfVVNBR0UpCisgICAqIEVuYWJsZSB2ZXJpZmljYXRpb24gb2YgdGhlIGV4dGVuZGVkS2V5VXNhZ2UgZXh0ZW5zaW9uCisgICAgIChQT0xBUlNTTF9YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRSkKKworQ2hhbmdlcworICAgKiB4NTA5X2NydF9pbmZvKCkgbm93IHByaW50cyBpbmZvcm1hdGlvbiBhYm91dCBwYXJzZWQgZXh0ZW5zaW9ucyBhcyB3ZWxsCisgICAqIHBrX3ZlcmlmeSgpIG5vdyByZXR1cm5zIGEgc3BlY2lmaWMgZXJyb3IgY29kZSB3aGVuIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQKKyAgICAgYnV0IHNob3J0ZXIgdGhhbiB0aGUgc3VwcGxpZWQgbGVuZ3RoLgorICAgKiBVc2UgVVRDIHRpbWUgdG8gY2hlY2sgY2VydGlmaWNhdGUgdmFsaWRpdHkuCisgICAqIFJlamVjdCBjZXJ0aWZpY2F0ZXMgd2l0aCB0aW1lcyBub3QgaW4gVVRDLCBwZXIgUkZDIDUyODAuCisKK1NlY3VyaXR5CisgICAqIEF2b2lkIHBvdGVudGlhbCB0aW1pbmcgbGVhayBpbiBlY2RzYV9zaWduKCkgYnkgYmxpbmRpbmcgbW9kdWxhciBkaXZpc2lvbi4KKyAgICAgKEZvdW5kIGJ5IFdhdHNvbiBMYWRkLikKKyAgICogVGhlIG5vdEFmdGVyIGRhdGUgb2Ygc29tZSBjZXJ0aWZpY2F0ZXMgd2FzIG5vIGxvbmdlciBjaGVja2VkIHNpbmNlIDEuMy41LgorICAgICBUaGlzIGFmZmVjdHMgY2VydGlmaWNhdGVzIGluIHRoZSB1c2VyLXN1cHBsaWVkIGNoYWluIGV4Y2VwdCB0aGUgdG9wCisgICAgIGNlcnRpZmljYXRlLiBJZiB0aGUgdXNlci1zdXBwbGllZCBjaGFpbiBjb250YWlucyBvbmx5IG9uZSBjZXJ0aWZpY2F0ZXMsCisgICAgIGl0IGlzIG5vdCBhZmZlY3RlZCAoaWUsIGl0cyBub3RBZnRlciBkYXRlIGlzIHByb3Blcmx5IGNoZWNrZWQpLgorICAgKiBQcmV2ZW50IHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gc3NsX3JlYWRfcmVjb3JkKCkgKGZvdW5kIGJ5CisgICAgIFRydXN0SW5Tb2Z0KQorCitCdWdmaXgKKyAgICogVGhlIGxlbmd0aCBvZiB2YXJpb3VzIENsaWVudEtleUV4Y2hhbmdlIG1lc3NhZ2VzIHdhcyBub3QgcHJvcGVybHkgY2hlY2tlZC4KKyAgICogU29tZSBleGFtcGxlIHNlcnZlciBwcm9ncmFtcyB3ZXJlIG5vdCBzZW5kaW5nIHRoZSBjbG9zZV9ub3RpZnkgYWxlcnQuCisgICAqIFBvdGVudGlhbCBtZW1vcnkgbGVhayBpbiBtcGlfZXhwX21vZCgpIHdoZW4gZXJyb3Igb2NjdXJzIGR1cmluZworICAgICBjYWxjdWxhdGlvbiBvZiBSUi4KKyAgICogRml4ZWQgbWFsbG9jL2ZyZWUgZGVmYXVsdCAjZGVmaW5lIGluIHBsYXRmb3JtLmMgKGZvdW5kIGJ5IEdlcmdlbHkgQnVkYWkpLgorICAgKiBGaXhlZCB0eXBlIHdoaWNoIG1hZGUgUE9MQVJTU0xfRU5UUk9QWV9GT1JDRV9TSEEyNTYgdW5lZmZlY3RpdmUgKGZvdW5kIGJ5CisgICAgIEdlcmdlbHkgQnVkYWkpLgorICAgKiBGaXggI2luY2x1ZGUgcGF0aCBpbiBlY2RzYS5oIHdoaWNoIHdhc24ndCBhY2NlcHRlZCBieSBzb21lIGNvbXBpbGVycy4KKyAgICAgKGZvdW5kIGJ5IEdlcmdlbHkgQnVkYWkpCisgICAqIEZpeCBjb21waWxlIGVycm9ycyB3aGVuIFBPTEFSU1NMX0VSUk9SX1NUUkVSUk9SX0JDIGlzIHVuZGVmaW5lZCAoZm91bmQgYnkKKyAgICAgU2h1byBDaGVuKS4KKyAgICogb2lkX2dldF9udW1lcmljX3N0cmluZygpIHVzZWQgdG8gdHJ1bmNhdGUgdGhlIG91dHB1dCB3aXRob3V0IHJldHVybmluZyBhbgorICAgICBlcnJvciBpZiB0aGUgb3V0cHV0IGJ1ZmZlciB3YXMganVzdCAxIGJ5dGUgdG9vIHNtYWxsLgorICAgKiBkaG1fcGFyc2VfZGhtKCkgKGhlbmNlIGRobV9wYXJzZV9kaG1maWxlKCkpIGRpZCBub3Qgc2V0IGRobS0+bGVuLgorICAgKiBDYWxsaW5nIHBrX2RlYnVnKCkgb24gYW4gUlNBLWFsdCBrZXkgd291bGQgc2VnZmF1bHQuCisgICAqIHBrX2dldF9zaXplKCkgYW5kIHBrX2dldF9sZW4oKSB3ZXJlIG9mZiBieSBhIGZhY3RvciA4IGZvciBSU0EtYWx0IGtleXMuCisgICAqIFBvdGVudGlhbCBidWZmZXIgb3ZlcndyaXRlIGluIHBlbV93cml0ZV9idWZmZXIoKSBiZWNhdXNlIG9mIGxvdyBsZW5ndGgKKyAgICAgaW5kaWNhdGlvbiAoZm91bmQgYnkgVGhpanMgQWxrZW1hZGUpCisgICAqIEVDIGN1cnZlcyBjb25zdGFudHMsIHdoaWNoIHNob3VsZCBiZSBvbmx5IGluIFJPTSBzaW5jZSAxLjMuMywgd2VyZSBhbHNvCisgICAgIHN0b3JlZCBpbiBSQU0gZHVlIHRvIG1pc3NpbmcgJ2NvbnN0J3MgKGZvdW5kIGJ5IEdlcmdlbHkgQnVkYWkpLgorCis9IFBvbGFyU1NMIDEuMy41IHJlbGVhc2VkIG9uIDIwMTQtMDMtMjYKK0ZlYXR1cmVzCisgICAqIEhNQUMtRFJCRyBhcyBhIHNlcGFyYXRlIG1vZHVsZQorICAgKiBPcHRpb24gdG8gc2V0IHRoZSBDdXJ2ZSBwcmVmZXJlbmNlIG9yZGVyIChkaXNhYmxlZCBieSBkZWZhdWx0KQorICAgKiBTaW5nbGUgUGxhdGZvcm0gY29tcGF0aWxpYml0eSBsYXllciAoZm9yIG1lbW9yeSAvIHByaW50ZiAvIGZwcmludGYpCisgICAqIEFiaWxpdHkgdG8gcHJvdmlkZSBhbHRlcm5hdGUgdGltaW5nIGltcGxlbWVudGF0aW9uCisgICAqIEFiaWxpdHkgdG8gZm9yY2UgdGhlIGVudHJvcHkgbW9kdWxlIHRvIHVzZSBTSEEtMjU2IGFzIGl0cyBiYXNpcworICAgICAoUE9MQVJTU0xfRU5UUk9QWV9GT1JDRV9TSEEyNTYpCisgICAqIFRlc3Rpbmcgc2NyaXB0IHNzbC1vcHQuc2ggYWRkZWQgZm9yIHRlc3RpbmcgJ2xpdmUnIHNzbCBvcHRpb24KKyAgICAgaW50ZXJvcGVyYWJpbGl0eSBhZ2FpbnN0IE9wZW5TU0wgYW5kIFBvbGFyU1NMCisgICAqIFN1cHBvcnQgZm9yIHJlYWRpbmcgRUMga2V5cyB0aGF0IHVzZSBTcGVjaWZpZWRFQ0RvbWFpbiBpbiBzb21lIGNhc2VzLgorICAgKiBFbnRyb3B5IG1vZHVsZSBub3cgc3VwcG9ydHMgc2VlZCB3cml0aW5nIGFuZCByZWFkaW5nCisKK0NoYW5nZXMKKyAgICogRGVwcmVjYXRlZCB0aGUgTWVtb3J5IGxheWVyCisgICAqIGVudHJvcHlfYWRkX3NvdXJjZSgpLCBlbnRyb3B5X3VwZGF0ZV9tYW51YWwoKSBhbmQgZW50cm9weV9nYXRoZXIoKQorICAgICBub3cgdGhyZWFkLXNhZmUgaWYgUE9MQVJTU0xfVEhSRUFESU5HX0MgZGVmaW5lZAorICAgKiBJbXByb3ZlbWVudHMgdG8gdGhlIENNYWtlIGJ1aWxkIHN5c3RlbSwgY29udHJpYnV0ZWQgYnkgSnVsaWFuIE9zcGFsZC4KKyAgICogV29yayBhcm91bmQgYSBidWcgb2YgdGhlIHZlcnNpb24gb2YgQ2xhbmcgc2hpcHBlZCBieSBBcHBsZSB3aXRoIE1hdmVyaWNrcworICAgICB0aGF0IHByZXZlbnRlZCBiaWdudW0uYyBmcm9tIGNvbXBpbGluZy4gKFJlcG9ydGVkIGJ5IFJhZmFlbCBCYXB0aXN0YS4pCisgICAqIFJldmFtcGVkIHRoZSBjb21wYXQuc2ggaW50ZXJvcGVyYXRpYmlsaXR5IHNjcmlwdCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yCisgICAgIHRlc3RpbmcgYWdhaW5zdCBHbnVUTFMKKyAgICogRGVwcmVjYXRlZCBzc2xfc2V0X293bl9jZXJ0X3JzYSgpIGFuZCBzc2xfc2V0X293bl9jZXJ0X3JzYV9hbHQoKQorICAgKiBJbXByb3ZlbWVudHMgdG8gdGVzdHMvTWFrZWZpbGUsIGNvbnRyaWJ1dGVkIGJ5IE9kZW4gRXJpa3Nzb24uCisKK1NlY3VyaXR5CisgICAqIEZvcmJpZCBjaGFuZ2Ugb2Ygc2VydmVyIGNlcnRpZmljYXRlIGR1cmluZyByZW5lZ290aWF0aW9uIHRvIHByZXZlbnQKKyAgICAgInRyaXBsZSBoYW5kc2hha2UiIGF0dGFjayB3aGVuIGF1dGhlbnRpY2F0aW9uIG1vZGUgaXMgJ29wdGlvbmFsJyAodGhlCisgICAgIGF0dGFjayB3YXMgYWxyZWFkeSBpbXBvc3NpYmxlIHdoZW4gYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQpLgorICAgKiBDaGVjayBub3RCZWZvcmUgdGltZXN0YW1wIG9mIGNlcnRpZmljYXRlcyBhbmQgQ1JMcyBmcm9tIHRoZSBmdXR1cmUuCisgICAqIEZvcmJpZCBzZXF1ZW5jZSBudW1iZXIgd3JhcHBpbmcKKyAgICogRml4ZWQgcG9zc2libGUgYnVmZmVyIG92ZXJmbG93IHdpdGggb3ZlcmxvbmcgUFNLCisgICAqIFBvc3NpYmxlIHJlbW90ZWx5LXRyaWdnZXJlZCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MgZml4ZWQgKGZvdW5kIGJ5CisgICAgIFRydXN0SW5Tb2Z0KQorCitCdWdmaXgKKyAgICogZWNwX2dlbl9rZXlwYWlyKCkgZG9lcyBtb3JlIHRyaWVzIHRvIHByZXZlbnQgZmFpbHVyZSBiZWNhdXNlIG9mCisgICAgIHN0YXRpc3RpY3MKKyAgICogRml4ZWQgYnVnIGluIFJTQSBQS0NTIzEgdjEuNSAicmV2ZXJzZWQiIG9wZXJhdGlvbnMKKyAgICogRml4ZWQgdGVzdGluZyB3aXRoIG91dC1vZi1zb3VyY2UgYnVpbGRzIHVzaW5nIGNtYWtlCisgICAqIEZpeGVkIHZlcnNpb24tbWFqb3IgaW50b2xlcmFuY2UgaW4gc2VydmVyCisgICAqIEZpeGVkIENNYWtlIHN5bWxpbmtpbmcgb24gb3V0LW9mLXNvdXJjZSBidWlsZHMKKyAgICogRml4ZWQgZGVwZW5kZW5jeSBpc3N1ZXMgaW4gdGVzdCBzdWl0ZQorICAgKiBQcm9ncmFtcyByc2Ffc2lnbl9wc3MgYW5kIHJzYV92ZXJpZnlfcHNzIHdlcmUgbm90IHVzaW5nIFBTUyBzaW5jZSAxLjMuMAorICAgKiBCaWdudW0ncyBNSVBTLTMyIGFzc2VtYmx5IHdhcyB1c2VkIG9uIE1JUFMtNjQsIGNhdXNpbmcgY2hhb3MuIChGb3VuZCBieQorICAgICBBbGV4IFdpbHNvbi4pCisgICAqIHNzbF9jYWNoZSB3YXMgY3JlYXRpbmcgZW50cmllcyB3aGVuIG1heF9lbnRyaWVzPTAgaWYgVElNSU5HX0Mgd2FzIGVuYWJsZWQuCisgICAqIG1fc2xlZXAoKSB3YXMgc2xlZXBpbmcgdHdpY2UgdG9vIGxvbmcgb24gbW9zdCBVbml4IHBsYXRmb3Jtcy4KKyAgICogRml4ZWQgYnVnIHdpdGggc2Vzc2lvbiB0aWNrZXRzIGFuZCBub24tYmxvY2tpbmcgSS9PIGluIHRoZSB1bmxpa2VseSBjYXNlCisgICAgIHNlbmQoKSB3b3VsZCByZXR1cm4gYW4gRUFHQUlOIGVycm9yIHdoZW4gc2VuZGluZyB0aGUgdGlja2V0LgorICAgKiBzc2xfY2FjaGUgd2FzIGxlYWtpbmcgbWVtb3J5IHdoZW4gcmV1c2luZyBhIHRpbWVkIG91dCBlbnRyeSBjb250YWluaW5nIGEKKyAgICAgY2xpZW50IGNlcnRpZmljYXRlLgorICAgKiBzc2xfc3J2IHdhcyBsZWFraW5nIG1lbW9yeSB3aGVuIGNsaWVudCBwcmVzZW50ZWQgYSB0aW1lZCBvdXQgdGlja2V0CisgICAgIGNvbnRhaW5pbmcgYSBjbGllbnQgY2VydGlmaWNhdGUKKyAgICogc3NsX2luaXQoKSB3YXMgbGVhdmluZyBhIGRpcnR5IHBvaW50ZXIgaW4gc3NsX2NvbnRleHQgaWYgbWFsbG9jIG9mCisgICAgIG91dF9jdHIgZmFpbGVkCisgICAqIHNzbF9oYW5kc2hha2VfaW5pdCgpIHdhcyBsZWF2aW5nIGRpcnR5IHBvaW50ZXJzIGluIHN1YmNvbnRleHRzIGlmIG1hbGxvYworICAgICBvZiBvbmUgb2YgdGhlbSBmYWlsZWQKKyAgICogRml4IHR5cG8gaW4gcnNhX2NvcHkoKSB0aGF0IGltcGFjdGVkIFBLQ1MjMSB2MiBjb250ZXh0cworICAgKiB4NTA5X2dldF9jdXJyZW50X3RpbWUoKSB1c2VzIGxvY2FsdGltZV9yKCkgdG8gcHJldmVudCB0aHJlYWQgaXNzdWVzCisKKz0gUG9sYXJTU0wgMS4zLjQgcmVsZWFzZWQgb24gMjAxNC0wMS0yNworRmVhdHVyZXMKKyAgICogU3VwcG9ydCBmb3IgdGhlIEtvYmxpdHogY3VydmVzOiBzZWNwMTkyazEsIHNlY3AyMjRrMSwgc2VjcDI1NmsxCisgICAqIFN1cHBvcnQgZm9yIFJJUEVNRC0xNjAKKyAgICogU3VwcG9ydCBmb3IgQUVTIENGQjggbW9kZQorICAgKiBTdXBwb3J0IGZvciBkZXRlcm1pbmlzdGljIEVDRFNBIChSRkMgNjk3OSkKKworQnVnZml4CisgICAqIFBvdGVudGlhbCBtZW1vcnkgbGVhayBpbiBiaWdudW1fc2VsZnRlc3QoKQorICAgKiBSZXBsYWNlZCBleHBpcmVkIHRlc3QgY2VydGlmaWNhdGUKKyAgICogc3NsX21haWxfY2xpZW50IG5vdyB0ZXJtaW5hdGVzIGxpbmVzIHdpdGggQ1JMRiwgaW5zdGVhZCBvZiBMRgorICAgKiBuZXQgbW9kdWxlIGhhbmRsZXMgdGltZW91dHMgb24gYmxvY2tpbmcgc29ja2V0cyBiZXR0ZXIgKGZvdW5kIGJ5IFRpbG1hbgorICAgICBTYXVlcmJlY2spCisgICAqIEFzc2VtYmx5IGZvcm1hdCBmaXhlcyBpbiBibl9tdWwuaAorCitTZWN1cml0eQorICAgKiBNaXNzaW5nIE1QSV9DSEsgY2FsbHMgYWRkZWQgYXJvdW5kIHVuZ3VhcmRlZCBtcGkgY2FsbHMgKGZvdW5kIGJ5CisgICAgIFRydXN0SW5Tb2Z0KQorCis9IFBvbGFyU1NMIDEuMy4zIHJlbGVhc2VkIG9uIDIwMTMtMTItMzEKK0ZlYXR1cmVzCisgICAqIEVDIGtleSBnZW5lcmF0aW9uIHN1cHBvcnQgaW4gZ2VuX2tleSBhcHAKKyAgICogU3VwcG9ydCBmb3IgYWRoZXJpbmcgdG8gY2xpZW50IGNpcGhlcnN1aXRlIG9yZGVyIHByZWZlcmVuY2UKKyAgICAgKFBPTEFSU1NMX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRSkKKyAgICogU3VwcG9ydCBmb3IgQ3VydmUyNTUxOQorICAgKiBTdXBwb3J0IGZvciBFQ0RILVJTQSBhbmQgRUNESC1FQ0RTQSBrZXkgZXhjaGFuZ2VzIGFuZCBjaXBoZXJzdWl0ZXMKKyAgICogU3VwcG9ydCBmb3IgSVB2NiBpbiB0aGUgTkVUIG1vZHVsZQorICAgKiBBRVMtTkkgc3VwcG9ydCBmb3IgQUVTLCBBRVMtR0NNIGFuZCBBRVMga2V5IHNjaGVkdWxpbmcKKyAgICogU1NMIFB0aHJlYWQtYmFzZWQgc2VydmVyIGV4YW1wbGUgYWRkZWQgKHNzbF9wdGhyZWFkX3NlcnZlcikKKworQ2hhbmdlcworICAgKiBnZW5fcHJpbWUoKSBzcGVlZHVwCisgICAqIFNwZWVkdXAgb2YgRUNQIG11bHRpcGxpY2F0aW9uIG9wZXJhdGlvbgorICAgKiBSZWxheGVkIHNvbWUgU0hBMiBjaXBoZXJzdWl0ZSdzIHZlcnNpb24gcmVxdWlyZW1lbnRzCisgICAqIERyb3BwZWQgdXNlIG9mIHJlYWRkaXJfcigpIGluc3RlYWQgb2YgcmVhZGRpcigpIHdpdGggdGhyZWFkaW5nIHN1cHBvcnQKKyAgICogTW9yZSBjb25zdGFudC10aW1lIGNoZWNrcyBpbiB0aGUgUlNBIG1vZHVsZQorICAgKiBTcGxpdCBvZmYgY3VydmVzIGZyb20gZWNwLmMgaW50byBlY3BfY3VydmVzLmMKKyAgICogQ3VydmVzIGFyZSBub3cgc3RvcmVkIGZ1bGx5IGluIFJPTQorICAgKiBNZW1vcnkgdXNhZ2Ugb3B0aW1pemF0aW9ucyBpbiBFQ1AgbW9kdWxlCisgICAqIFJlbW92ZWQgUE9MQVJTU0xfVEhSRUFESU5HX0RVTU1ZCisKK0J1Z2ZpeAorICAgKiBGaXhlZCBidWcgaW4gbXBpX3NldF9iaXQoKSBvbiBwbGF0Zm9ybXMgd2hlcmUgdF91aW50IGlzIHdpZGVyIHRoYW4gaW50CisgICAqIEZpeGVkIFguNTA5IGhvc3RuYW1lIGNvbXBhcmlzb24gKHdpdGggbm9uLXJlZ3VsYXIgY2hhcmFjdGVycykKKyAgICogU1NMIG5vdyBncmFjZWZ1bGx5IGhhbmRsZXMgbWlzc2luZyBSTkcKKyAgICogTWlzc2luZyBkZWZpbmVzIC8gY2FzZXMgZm9yIFJTQV9QU0sga2V5IGV4Y2hhbmdlCisgICAqIGNyeXB0X2FuZF9oYXNoIGFwcCBjaGVja3MgTUFDIGJlZm9yZSBmaW5hbCBkZWNyeXB0aW9uCisgICAqIFBvdGVudGlhbCBtZW1vcnkgbGVhayBpbiBzc2xfdGlja2V0X2tleXNfaW5pdCgpCisgICAqIE1lbW9yeSBsZWFrIGluIGJlbmNobWFyayBhcHBsaWNhdGlvbgorICAgKiBGaXhlZCB4NTA5X2NydF9wYXJzZV9wYXRoKCkgYnVnIG9uIFdpbmRvd3MgcGxhdGZvcm1zCisgICAqIEFkZGVkIG1pc3NpbmcgTVBJX0NISygpIGFyb3VuZCBzb21lIHN0YXRlbWVudHMgaW4gbXBpX2Rpdl9tcGkoKSAoZm91bmQgYnkKKyAgICAgVHJ1c3RJblNvZnQpCisgICAqIEZpeGVkIHBvdGVudGlhbCBvdmVyZmxvdyBpbiBjZXJ0aWZpY2F0ZSBzaXplIHZlcmlmaWNhdGlvbiBpbgorICAgICBzc2xfd3JpdGVfY2VydGlmaWNhdGUoKSAoZm91bmQgYnkgVHJ1c3RJblNvZnQpCisKK1NlY3VyaXR5CisgICAqIFBvc3NpYmxlIHJlbW90ZWx5LXRyaWdnZXJlZCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MgZml4ZWQgKGZvdW5kIGJ5CisgICAgIFRydXN0SW5Tb2Z0KQorCis9IFBvbGFyU1NMIDEuMy4yIHJlbGVhc2VkIG9uIDIwMTMtMTEtMDQKK0ZlYXR1cmVzCisgICAqIFBLIHRlc3RzIGFkZGVkIHRvIHRlc3QgZnJhbWV3b3JrCisgICAqIEFkZGVkIG9wdGlvbmFsIG9wdGltaXphdGlvbiBmb3IgTklTVCBNT0RQIGN1cnZlcyAoUE9MQVJTU0xfRUNQX05JU1RfT1BUSU0pCisgICAqIFN1cHBvcnQgZm9yIENhbWVsbGlhLUdDTSBtb2RlIGFuZCBjaXBoZXJzdWl0ZXMKKworQ2hhbmdlcworICAgKiBQYWRkaW5nIGNoZWNrcyBpbiBjaXBoZXIgbGF5ZXIgYXJlIG5vdyBjb25zdGFudC10aW1lCisgICAqIFZhbHVlIGNvbXBhcmlzb25zIGluIFNTTCBsYXllciBhcmUgbm93IGNvbnN0YW50LXRpbWUKKyAgICogU3VwcG9ydCBmb3Igc2VyaWFsTnVtYmVyLCBwb3N0YWxBZGRyZXNzIGFuZCBwb3N0YWxDb2RlIGluIFg1MDkgbmFtZXMKKyAgICogU1NMIFJlbmVnb3RpYXRpb24gd2FzIHJlZmFjdG9yZWQKKworQnVnZml4CisgICAqIE1vcmUgc3RyaW5nZW50IGNoZWNrcyBpbiBjaXBoZXIgbGF5ZXIKKyAgICogU2VydmVyIGRvZXMgbm90IHNlbmQgb3V0IGV4dGVuc2lvbnMgbm90IGFkdmVydGlzZWQgYnkgY2xpZW50CisgICAqIFByZXZlbnQgcG9zc2libGUgYWxpZ25tZW50IHdhcm5pbmdzIG9uIGNhc3RpbmcgZnJvbSBjaGFyICogdG8gJ2FsaWduZWQgKicKKyAgICogTWlzYyBmaXhlcyBhbmQgYWRkaXRpb25zIHRvIGRlcGVuZGVuY3kgY2hlY2tzCisgICAqIENvbnN0IGNvcnJlY3RuZXNzCisgICAqIGNlcnRfd3JpdGUgd2l0aCBzZWxmc2lnbiBzaG91bGQgdXNlIGlzc3Vlcl9uYW1lIGFzIHN1YmplY3RfbmFtZQorICAgKiBGaXggRUNEU0EgY29ybmVyIGNhc2U6IG1pc3NpbmcgcmVkdWN0aW9uIG1vZCBOIChmb3VuZCBieSBEdWFsVGFjaHlvbikKKyAgICogRGVmaW5lcyB0byBoYW5kbGUgVUVGSSBlbnZpcm9ubWVudCB1bmRlciBNU1ZDCisgICAqIFNlcnZlci1zaWRlIGluaXRpYXRlZCByZW5lZ290aWF0aW9ucyBzZW5kIEhlbGxvUmVxdWVzdAorCis9IFBvbGFyU1NMIDEuMy4xIHJlbGVhc2VkIG9uIDIwMTMtMTAtMTUKK0ZlYXR1cmVzCisgICAqIFN1cHBvcnQgZm9yIEJyYWlucG9vbCBjdXJ2ZXMgYW5kIFRMUyBjaXBoZXJzdWl0ZXMgKFJGQyA3MDI3KQorICAgKiBTdXBwb3J0IGZvciBFQ0RIRS1QU0sga2V5LWV4Y2hhbmdlIGFuZCBjaXBoZXJzdWl0ZXMKKyAgICogU3VwcG9ydCBmb3IgUlNBLVBTSyBrZXktZXhjaGFuZ2UgYW5kIGNpcGhlcnN1aXRlcworCitDaGFuZ2VzCisgICAqIFJTQSBibGluZGluZyBsb2NrcyBmb3IgYSBzbWFsbGVyIGFtb3VudCBvZiB0aW1lCisgICAqIFRMUyBjb21wcmVzc2lvbiBvbmx5IGFsbG9jYXRlcyB3b3JraW5nIGJ1ZmZlciBvbmNlCisgICAqIEludHJvZHVjZWQgUE9MQVJTU0xfSEFWRV9SRUFERElSX1IgZm9yIHN5c3RlbXMgd2l0aG91dCBpdAorICAgKiBjb25maWcuaCBpcyBtb3JlIHNjcmlwdC1mcmllbmRseQorCitCdWdmaXgKKyAgICogTWlzc2luZyBNU1ZDIGRlZmluZXMgYWRkZWQKKyAgICogQ29tcGlsZSBlcnJvcnMgd2l0aCBQT0xBUlNTTF9SU0FfTk9fQ1JUCisgICAqIEhlYWRlciBmaWxlcyB3aXRoICdwb2xhcnNzbC8nCisgICAqIENvbnN0IGNvcnJlY3RuZXNzCisgICAqIFBvc3NpYmxlIG5hbWluZyBjb2xsaXNpb24gaW4gZGhtX2NvbnRleHQKKyAgICogQmV0dGVyIHN1cHBvcnQgZm9yIE1TVkMKKyAgICogdGhyZWFkaW5nX3NldF9hbHQoKSBuYW1lCisgICAqIEFkZGVkIG1pc3NpbmcgeDUwOXdyaXRlX2NydF9zZXRfdmVyc2lvbigpCisKKz0gUG9sYXJTU0wgMS4zLjAgcmVsZWFzZWQgb24gMjAxMy0xMC0wMQorRmVhdHVyZXMKKyAgICogRWxsaXB0aWMgQ3VydmUgQ3J5cHRvZ3JhcGh5IG1vZHVsZSBhZGRlZAorICAgKiBFbGxpcHRpYyBDdXJ2ZSBEaWZmaWUgSGVsbG1hbiBtb2R1bGUgYWRkZWQKKyAgICogRXBoZW1lcmFsIEVsbGlwdGljIEN1cnZlIERpZmZpZSBIZWxsbWFuIHN1cHBvcnQgZm9yIFNTTC9UTFMKKyAgICAoRUNESEUtYmFzZWQgY2lwaGVyc3VpdGVzKQorICAgKiBFcGhlbWVyYWwgRWxsaXB0aWMgQ3VydmUgRGlnaXRhbCBTaWduYXR1cmUgQWxnb3JpdGhtIHN1cHBvcnQgZm9yIFNTTC9UTFMKKyAgICAoRUNEU0EtYmFzZWQgY2lwaGVyc3VpdGVzKQorICAgKiBBYmlsaXR5IHRvIHNwZWNpZnkgYWxsb3dlZCBjaXBoZXJzdWl0ZXMgYmFzZWQgb24gdGhlIHByb3RvY29sIHZlcnNpb24uCisgICAqIFBTSyBhbmQgREhFLVBTSyBiYXNlZCBjaXBoZXJzdWl0ZXMgYWRkZWQKKyAgICogTWVtb3J5IGFsbG9jYXRpb24gYWJzdHJhY3Rpb24gbGF5ZXIgYWRkZWQKKyAgICogQnVmZmVyLWJhc2VkIG1lbW9yeSBhbGxvY2F0b3IgYWRkZWQgKG5vIG1hbGxvYygpIC8gZnJlZSgpIC8gSEVBUCB1c2FnZSkKKyAgICogVGhyZWFkaW5nIGFic3RyYWN0aW9uIGxheWVyIGFkZGVkIChkdW1teSAvIHB0aHJlYWQgLyBhbHRlcm5hdGUpCisgICAqIFB1YmxpYyBLZXkgYWJzdHJhY3Rpb24gbGF5ZXIgYWRkZWQKKyAgICogUGFyc2luZyBFbGxpcHRpYyBDdXJ2ZSBrZXlzCisgICAqIFBhcnNpbmcgRWxsaXB0aWMgQ3VydmUgY2VydGlmaWNhdGVzCisgICAqIFN1cHBvcnQgZm9yIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIChSRkMgNjA2NikKKyAgICogU3VwcG9ydCBmb3IgdHJ1bmNhdGVkX2htYWMgZXh0ZW5zaW9uIChSRkMgNjA2NikKKyAgICogU3VwcG9ydCBmb3IgemVyb3MtYW5kLWxlbmd0aCAoQU5TSSBYLjkyMykgcGFkZGluZywgb25lLWFuZC16ZXJvcworICAgICAoSVNPL0lFQyA3ODE2LTQpIHBhZGRpbmcgYW5kIHplcm8gcGFkZGluZyBpbiB0aGUgY2lwaGVyIGxheWVyCisgICAqIFN1cHBvcnQgZm9yIHNlc3Npb24gdGlja2V0cyAoUkZDIDUwNzcpCisgICAqIENlcnRpZmljYXRlIFJlcXVlc3QgKENTUikgZ2VuZXJhdGlvbiB3aXRoIGV4dGVuc2lvbnMgKGtleV91c2FnZSwKKyAgICAgbnNfY2VydF90eXBlKQorICAgKiBYNTA5IENlcnRpZmljYXRlIHdyaXRpbmcgd2l0aCBleHRlbnNpb25zIChiYXNpY19jb25zdHJhaW50cywKKyAgICAgaXNzdWVyX2tleV9pZGVudGlmaWVyLCBldGMpCisgICAqIE9wdGlvbmFsIGJsaW5kaW5nIGZvciBSU0EsIERITSBhbmQgRUMKKyAgICogU3VwcG9ydCBmb3IgbXVsdGlwbGUgYWN0aXZlIGNlcnRpZmljYXRlIC8ga2V5IHBhaXJzIGluIFNTTCBzZXJ2ZXJzIGZvcgorICAgCSB0aGUgc2FtZSBob3N0IChOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCBTTkkhKQorCitDaGFuZ2VzCisgICAqIEFiaWxpdHkgdG8gZW5hYmxlIC8gZGlzYWJsZSBTU0wgdjMgLyBUTFMgMS4wIC8gVExTIDEuMSAvIFRMUyAxLjIKKyAgICAgaW5kaXZpZHVhbGx5CisgICAqIEludHJvZHVjZWQgc2VwYXJhdGUgU1NMIENpcGhlcnN1aXRlcyBtb2R1bGUgdGhhdCBpcyBiYXNlZCBvbgorICAgICBDaXBoZXIgYW5kIE1EIGluZm9ybWF0aW9uCisgICAqIEludGVybmFscyBmb3IgU1NMIG1vZHVsZSBhZGFwdGVkIHRvIGhhdmUgc2VwYXJhdGUgSVYgcG9pbnRlciB0aGF0IGlzCisgICAgIGR5bmFtaWNhbGx5IHNldCAoQmV0dGVyIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGFjY2VsZXJhdGlvbikKKyAgICogTW92ZWQgYWxsIE9JRCBmdW5jdGlvbmFsaXR5IHRvIGEgc2VwYXJhdGUgbW9kdWxlLiBSU0EgZnVuY3Rpb24KKyAgICAgcHJvdG90eXBlcyBmb3IgdGhlIFJTQSBzaWduIGFuZCB2ZXJpZnkgZnVuY3Rpb25zIGNoYW5nZWQgYXMgYSByZXN1bHQKKyAgICogU3BsaXQgdXAgdGhlIEdDTSBtb2R1bGUgaW50byBhIHN0YXJ0cy91cGRhdGUvZmluaXNoIGN5Y2xlCisgICAqIENsaWVudCBhbmQgc2VydmVyIG5vdyBmaWx0ZXIgc2VudCBhbmQgYWNjZXB0ZWQgY2lwaGVyc3VpdGVzIG9uIG1pbmltdW0KKyAgICAgYW5kIG1heGltdW0gcHJvdG9jb2wgdmVyc2lvbgorICAgKiBBYmlsaXR5IHRvIGRpc2FibGUgc2VydmVyX25hbWUgZXh0ZW5zaW9uIChSRkMgNjA2NikKKyAgICogUmVuYW1lZCBlcnJvcl9zdHJlcnJvcigpIHRvIHRoZSBsZXNzIGNvbmZsaWN0aW5nIHBvbGFyc3NsX3N0cmVycm9yKCkKKyAgICAgKEFiaWxpdHkgdG8ga2VlcCBvbGQgYXMgd2VsbCB3aXRoIFBPTEFSU1NMX0VSUk9SX1NUUkVSUk9SX0JDKQorICAgKiBTSEEyIHJlbmFtZWQgdG8gU0hBMjU2LCBTSEE0IHJlbmFtZWQgdG8gU0hBNTEyIGFuZCBmdW5jdGlvbnMgYWNjb3JkaW5nbHkKKyAgICogQWxsIFJTQSBvcGVyYXRpb25zIHJlcXVpcmUgYSByYW5kb20gZ2VuZXJhdG9yIGZvciBibGluZGluZyBwdXJwb3NlcworICAgKiBYNTA5IGNvcmUgcmVmYWN0b3JlZAorICAgKiB4NTA5X2NydF92ZXJpZnkoKSBub3cgY2FzZSBpbnNlbnNpdGl2ZSBmb3IgY24gKFJGQyA2MTI1IDYuNCkKKyAgICogQWxzbyBjb21waWxlcyAvIHJ1bnMgd2l0aG91dCB0aW1lLWJhc2VkIGZ1bmN0aW9ucyAoIVBPTEFSU1NMX0hBVkVfVElNRSkKKyAgICogU3VwcG9ydCBmYXVsdHkgWDUwOSB2MSBjZXJ0aWZpY2F0ZXMgd2l0aCBleHRlbnNpb25zCisgICAgIChQT0xBUlNTTF9YNTA5X0FMTE9XX0VYVEVOU0lPTlNfTk9OX1YzKQorCitCdWdmaXgKKyAgICogRml4ZWQgcGFyc2UgZXJyb3IgaW4gc3NsX3BhcnNlX2NlcnRpZmljYXRlX3JlcXVlc3QoKQorICAgKiB6bGliIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gc2tpcHBlZCBvbiBlbXB0eSBibG9ja3MKKyAgICogU3VwcG9ydCBmb3IgQUlYIGhlYWRlciBsb2NhdGlvbnMgaW4gbmV0LmMgbW9kdWxlCisgICAqIEZpeGVkIGZpbGUgZGVzY3JpcHRvciBsZWFrcworCitTZWN1cml0eQorICAgKiBSU0EgYmxpbmRpbmcgb24gQ1JUIG9wZXJhdGlvbnMgdG8gY291bnRlciB0aW1pbmcgYXR0YWNrcworICAgICAoZm91bmQgYnkgQ3lyaWwgQXJuYXVkIGFuZCBQaWVycmUtQWxhaW4gRm91cXVlKQorCisKKz0gVmVyc2lvbiAxLjIuMTQgcmVsZWFzZWQgMjAxNS0wNS0/PworCitTZWN1cml0eQorICAgKiBGaXggcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IHJlYWQgaW4gdGhlIHNlcnZlciwgdGhhdCBhbGxvd3MgYSBjbGllbnQgdG8KKyAgICAgY3Jhc2ggaXQgcmVtb3RlbHkgKGZvdW5kIGJ5IENhaiBMYXJzc29uKS4KKyAgICogRml4IHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSByZWFkIGluIGNlcnRpZmljYXRlIHBhcnNpbmcsIHRoYXQgYWxsb3dzIGEKKyAgICAgY2xpZW50IHRvIGNyYXNoIHRoZSBzZXJ2ZXIgcmVtb3RlbHkgaWYgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQKKyAgICAgKGZvdW5kIHVzaW5nIENvZGVub21pY29uIERlZmVuc2ljcykuCisgICAqIEFkZCBjb3VudGVybWVhc3VyZSBhZ2FpbnN0ICJMdWNreSAxMyBzdHJpa2VzIGJhY2siIGNhY2hlLWJhc2VkIGF0dGFjaywKKyAgICAgaHR0cHM6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0yNzE0NjI1CisKK0J1Z2ZpeAorICAgKiBGaXggYnVnIGluIFZpYSBQYWRsb2NrIHN1cHBvcnQgKGZvdW5kIGJ5IE5pa29zIE1hdnJvZ2lhbm5vcG91bG9zKS4KKyAgICogRml4IGhhcmRjbG9jaygpIChvbmx5IHVzZWQgaW4gdGhlIGJlbmNobWFya2luZyBwcm9ncmFtKSB3aXRoIHNvbWUKKyAgICAgdmVyc2lvbnMgb2YgbWluZ3c2NCAoZm91bmQgYnkga3hqaGxlbGUpLgorICAgKiBGaXggd2FybmluZ3MgZnJvbSBtaW5ndzY0IGluIHRpbWluZy5jIChmb3VuZCBieSBreGprbGVsZSkuCisgICAqIEZpeCBwb3RlbnRpYWwgdW5pbnRlbmRlZCBzaWduIGV4dGVuc2lvbiBpbiBhc24xX2dldF9sZW4oKSBvbiA2NC1iaXQKKyAgICAgcGxhdGZvcm1zIChmb3VuZCB3aXRoIENvdmVyaXR5IFNjYW4pLgorCis9IFZlcnNpb24gMS4yLjEzIHJlbGVhc2VkIDIwMTUtMDItMTYKK05vdGU6IEFsdGhvdWdoIFBvbGFyU1NMIGhhcyBiZWVuIHJlbmFtZWQgdG8gbWJlZCBUTFMsIG5vIGNoYW5nZXMgcmVmbGVjdGluZworICAgICAgdGhpcyB3aWxsIGJlIG1hZGUgaW4gdGhlIDEuMiBicmFuY2ggYXQgdGhpcyBwb2ludC4KKworU2VjdXJpdHkKKyAgICogRml4IHJlbW90ZWx5LXRyaWdnZXJhYmxlIHVuaW5pdGlhbGlzZWQgcG9pbnRlciBkZXJlZmVyZW5jZSBjYXVzZWQgYnkKKyAgICAgY3JhZnRlZCBYLjUwOSBjZXJ0aWZpY2F0ZSAoVExTIHNlcnZlciBpcyBub3QgYWZmZWN0ZWQgaWYgaXQgZG9lc24ndCBhc2sKKyAgICAgZm9yIGEgY2xpZW50IGNlcnRpZmljYXRlKSAoZm91bmQgdXNpbmcgQ29kZW5vbWljb24gRGVmZW5zaWNzKS4KKyAgICogRml4IHJlbW90ZWx5LXRyaWdnZXJhYmxlIG1lbW9yeSBsZWFrIGNhdXNlZCBieSBjcmFmdGVkIFguNTA5IGNlcnRpZmljYXRlcworICAgICAoVExTIHNlcnZlciBpcyBub3QgYWZmZWN0ZWQgaWYgaXQgZG9lc24ndCBhc2sgZm9yIGEgY2xpZW50IGNlcnRpZmljYXRlKQorICAgICAoZm91bmQgdXNpbmcgQ29kZW5vbWljb24gRGVmZW5zaWNzKS4KKyAgICogRml4IHBvdGVudGlhbCBzdGFjayBvdmVyZmxvdyB3aGlsZSBwYXJzaW5nIGNyYWZ0ZWQgWC41MDkgY2VydGlmaWNhdGVzCisgICAgIChUTFMgc2VydmVyIGlzIG5vdCBhZmZlY3RlZCBpZiBpdCBkb2Vzbid0IGFzayBmb3IgYSBjbGllbnQgY2VydGlmaWNhdGUpCisgICAgIGZvdW5kIHVzaW5nIENvZGVub21pY29uIERlZmVuc2ljcykuCisgICAqIEZpeCBidWZmZXIgb3ZlcnJlYWQgb2Ygc2l6ZSAxIHdoZW4gcGFyc2luZyBjcmFmdGVkIFguNTA5IGNlcnRpZmljYXRlcworICAgICAoVExTIHNlcnZlciBpcyBub3QgYWZmZWN0ZWQgaWYgaXQgZG9lc24ndCBhc2sgZm9yIGEgY2xpZW50IGNlcnRpZmljYXRlKS4KKworQnVnZml4CisgICAqIEZpeCBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW91ciBpbiBDYW1lbGxpYS4KKyAgICogRml4IG1lbW9yeSBsZWFrcyBpbiBQS0NTIzUgYW5kIFBLQ1MjMTIuCisgICAqIFN0YWNrIGJ1ZmZlciBvdmVyZmxvdyBpZiBjdHJfZHJiZ191cGRhdGUoKSBpcyBjYWxsZWQgd2l0aCB0b28gbGFyZ2UKKyAgICAgYWRkX2xlbiAoZm91bmQgYnkgSmVhbi1QaGlsaXBwZSBBdW1hc3NvbikgKG5vdCB0cmlnZ2VyYWJsZSByZW1vdGVseSkuCisgICAqIEZpeCBidWcgaW4gTVBJL2JpZ251bSBvbiBzMzkwL3MzOTB4IChyZXBvcnRlZCBieSBEYW4gSG9yw6FrKSAoaW50cm9kdWNlZAorICAgICBpbiAxLjIuMTIpLgorICAgKiBGaXggdW5jaGVja2VkIHJldHVybiBjb2RlIGluIHg1MDlfY3J0X3BhcnNlX3BhdGgoKSBvbiBXaW5kb3dzIChmb3VuZCBieQorICAgICBQZXRlciBWYXNrb3ZpYykuCisgICAqIEZpeCBhc3NlbWJseSBzZWxlY3Rpb24gZm9yIE1JUFM2NCAodGhhbmtzIHRvIEphbWVzIENvd2dpbGwpLgorICAgKiBzc2xfZ2V0X3ZlcmlmeV9yZXN1bHQoKSBub3cgd29ya3MgZXZlbiBpZiB0aGUgaGFuZHNoYWtlIHdhcyBhYm9ydGVkIGR1ZQorICAgICB0byBhIGZhaWxlZCB2ZXJpZmljYXRpb24gKGZvdW5kIGJ5IEZyZWRyaWsgQXhlbHNzb24pLgorICAgKiBTa2lwIHdyaXRpbmcgYW5kIHBhcnNpbmcgc2lnbmF0dXJlX2FsZ29yaXRobSBleHRlbnNpb24gaWYgbm9uZSBvZiB0aGUKKyAgICAga2V5IGV4Y2hhbmdlcyBlbmFibGVkIG5lZWRzIGNlcnRpZmljYXRlcy4gVGhpcyBmaXhlcyBhIHBvc3NpYmxlIGludGVyb3AKKyAgICAgaXNzdWUgd2l0aCBzb21lIHNlcnZlcnMgd2hlbiBhIHplcm8tbGVuZ3RoIGV4dGVuc2lvbiB3YXMgc2VudC4gKFJlcG9ydGVkCisgICAgIGJ5IFBldGVyIERldHRtYW4uKQorICAgKiBPbiBhIDAtbGVuZ3RoIGlucHV0LCBiYXNlNjRfZW5jb2RlKCkgZGlkIG5vdCBjb3JyZWN0bHkgc2V0IG91dHB1dCBsZW5ndGgKKyAgICAgKGZvdW5kIGJ5IEhlbmRyaWsgdmFuIGRlbiBCb29nYWFyZCkuCisKK0NoYW5nZXMKKyAgICogQmxpbmQgUlNBIHByaXZhdGUgb3BlcmF0aW9ucyBldmVuIHdoZW4gUE9MQVJTU0xfUlNBX05PX0NSVCBpcyBkZWZpbmVkLgorICAgKiBGb3JiaWQgcmVwZWF0ZWQgZXh0ZW5zaW9ucyBpbiBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisgICAqIEFkZCBjb21waWxlLXRpbWUgb3B0aW9uIFBPTEFSU1NMX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQSB0byBsaW1pdCB0aGUKKyAgICAgbGVuZ3RoIG9mIGFuIFguNTA5IHZlcmlmaWNhdGlvbiBjaGFpbiAoZGVmYXVsdCA9IDgpLgorPSBWZXJzaW9uIDEuMi4xMiByZWxlYXNlZCAyMDE0LTEwLTI0CisKK1NlY3VyaXR5CisgICAqIFJlbW90ZWx5LXRyaWdnZXJhYmxlIG1lbW9yeSBsZWFrIHdoZW4gcGFyc2luZyBzb21lIFguNTA5IGNlcnRpZmljYXRlcworICAgICAoc2VydmVyIGlzIG5vdCBhZmZlY3RlZCBpZiBpdCBkb2Vzbid0IGFzayBmb3IgYSBjbGllbnQgY2VydGlmaWNhdGUpLgorICAgICAoRm91bmQgdXNpbmcgQ29kZW5vbWljb24gRGVmZW5zaWNzLikKKworQnVnZml4CisgICAqIEZpeCBwb3RlbnRpYWwgYmFkIHJlYWQgaW4gcGFyc2luZyBTZXJ2ZXJIZWxsbyAoZm91bmQgYnkgQWRyaWVuCisgICAgIFZpYWxsZXRlbGxlKS4KKyAgICogc3NsX2Nsb3NlX25vdGlmeSgpIGNvdWxkIHNlbmQgbW9yZSB0aGFuIG9uZSBtZXNzYWdlIGluIHNvbWUgY2lyY3Vtc3RhbmNlcworICAgICB3aXRoIG5vbi1ibG9ja2luZyBJL08uCisgICAqIHg1MDlfY3J0X3BhcnNlKCkgZGlkIG5vdCBpbmNyZWFzZSB0b3RhbF9mYWlsZWQgb24gUEVNIGVycm9yCisgICAqIEZpeCBjb21waWxlciB3YXJuaW5ncyBvbiBpT1MgKGZvdW5kIGJ5IFNhbmRlciBOaWVtZWlqZXIpLgorICAgKiBEb24ndCBwcmludCB1bmluaXRpYWxpc2VkIGJ1ZmZlciBpbiBzc2xfbWFpbF9jbGllbnQgKGZvdW5kIGJ5IE1hcmMgQWJlbCkuCisgICAqIEZpeCBuZXRfYWNjZXB0KCkgcmVnYXJkaW5nIG5vbi1ibG9ja2luZyBzb2NrZXRzIChmb3VuZCBieSBMdWNhIFBlc2NlKS4KKyAgICogc3NsX3JlYWQoKSBjb3VsZCByZXR1cm4gbm9uLWFwcGxpY2F0aW9uIGRhdGEgcmVjb3JkcyBvbiBzZXJ2ZXIgd2hpbGUKKyAgICAgcmVuZWdvdGF0aW9uIHdhcyBwZW5kaW5nLCBhbmQgb24gY2xpZW50IHdoZW4gYSBIZWxsb1JlcXVlc3Qgd2FzIHJlY2VpdmVkLgorICAgKiBGaXggd2FybmluZ3MgZnJvbSBDbGFuZydzIHNjYW4tYnVpbGQgKGNvbnRyaWJ1dGVkIGJ5IEFsZnJlZCBLbG9tcCkuCisKK0NoYW5nZXMKKyAgICogWC41MDkgY2VydGlmaWNhdGVzIHdpdGggbW9yZSB0aGFuIG9uZSBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUgcGVyCisgICAgIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUgYXJlIG5vdCBhY2NlcHRlZCBhbnkgbW9yZS4KKyAgICogc3NsX3JlYWQoKSBub3cgcmV0dXJucyBQT0xBUlNTTF9FUlJfTkVUX1dBTlRfUkVBRCByYXRoZXIgdGhhbgorICAgICBQT0xBUlNTTF9FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSBvbiBoYXJtbGVzcyBhbGVydHMuCisgICAqIEFjY2VwdCBzcGFjZXMgYXQgZW5kIG9mIGxpbmUgb3IgZW5kIG9mIGJ1ZmZlciBpbiBiYXNlNjRfZGVjb2RlKCkuCisKKz0gVmVyc2lvbiAxLjIuMTEgcmVsZWFzZWQgMjAxNC0wNy0xMQorRmVhdHVyZXMKKyAgICogRW50cm9weSBtb2R1bGUgbm93IHN1cHBvcnRzIHNlZWQgd3JpdGluZyBhbmQgcmVhZGluZworCitDaGFuZ2VzCisgICAqIEludHJvZHVjZWQgUE9MQVJTU0xfSEFWRV9SRUFERElSX1IgZm9yIHN5c3RlbXMgd2l0aG91dCBpdAorICAgKiBJbXByb3ZlbWVudHMgdG8gdGhlIENNYWtlIGJ1aWxkIHN5c3RlbSwgY29udHJpYnV0ZWQgYnkgSnVsaWFuIE9zcGFsZC4KKyAgICogV29yayBhcm91bmQgYSBidWcgb2YgdGhlIHZlcnNpb24gb2YgQ2xhbmcgc2hpcHBlZCBieSBBcHBsZSB3aXRoIE1hdmVyaWNrcworICAgICB0aGF0IHByZXZlbnRlZCBiaWdudW0uYyBmcm9tIGNvbXBpbGluZy4gKFJlcG9ydGVkIGJ5IFJhZmFlbCBCYXB0aXN0YS4pCisgICAqIEltcHJvdmVtZW50cyB0byB0ZXN0cy9NYWtlZmlsZSwgY29udHJpYnV0ZWQgYnkgT2RlbiBFcmlrc3Nvbi4KKyAgICogVXNlIFVUQyB0aW1lIHRvIGNoZWNrIGNlcnRpZmljYXRlIHZhbGlkaXR5LgorICAgKiBSZWplY3QgY2VydGlmaWNhdGVzIHdpdGggdGltZXMgbm90IGluIFVUQywgcGVyIFJGQyA1MjgwLgorICAgKiBNaWdyYXRlIHplcm9pemluZyBvZiBkYXRhIHRvIHBvbGFyc3NsX3plcm9pemUoKSBpbnN0ZWFkIG9mIG1lbXNldCgpCisgICAgIGFnYWluc3QgdW53YW50ZWQgY29tcGlsZXIgb3B0aW1pemF0aW9ucworCitTZWN1cml0eQorICAgKiBGb3JiaWQgY2hhbmdlIG9mIHNlcnZlciBjZXJ0aWZpY2F0ZSBkdXJpbmcgcmVuZWdvdGlhdGlvbiB0byBwcmV2ZW50CisgICAgICJ0cmlwbGUgaGFuZHNoYWtlIiBhdHRhY2sgd2hlbiBhdXRoZW50aWNhdGlvbiBtb2RlIGlzIG9wdGlvbmFsICh0aGUKKyAgICAgYXR0YWNrIHdhcyBhbHJlYWR5IGltcG9zc2libGUgd2hlbiBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZCkuCisgICAqIENoZWNrIG5vdEJlZm9yZSB0aW1lc3RhbXAgb2YgY2VydGlmaWNhdGVzIGFuZCBDUkxzIGZyb20gdGhlIGZ1dHVyZS4KKyAgICogRm9yYmlkIHNlcXVlbmNlIG51bWJlciB3cmFwcGluZworICAgKiBQcmV2ZW50IHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gc3NsX3JlYWRfcmVjb3JkKCkgKGZvdW5kIGJ5CisgICAgIFRydXN0SW5Tb2Z0KQorICAgKiBGaXggbGVuZ3RoIGNoZWNraW5nIGZvciBBRUFEIGNpcGhlcnN1aXRlcyAoZm91bmQgYnkgQ29kZW5vbWljb24pLgorICAgICBJdCB3YXMgcG9zc2libGUgdG8gY3Jhc2ggdGhlIHNlcnZlciAoYW5kIGNsaWVudCkgdXNpbmcgY3JhZnRlZCBtZXNzYWdlcworICAgICB3aGVuIGEgR0NNIHN1aXRlIHdhcyBjaG9zZW4uCisKK0J1Z2ZpeAorICAgKiBGaXhlZCBYLjUwOSBob3N0bmFtZSBjb21wYXJpc29uICh3aXRoIG5vbi1yZWd1bGFyIGNoYXJhY3RlcnMpCisgICAqIFNTTCBub3cgZ3JhY2VmdWxseSBoYW5kbGVzIG1pc3NpbmcgUk5HCisgICAqIGNyeXB0X2FuZF9oYXNoIGFwcCBjaGVja3MgTUFDIGJlZm9yZSBmaW5hbCBkZWNyeXB0aW9uCisgICAqIEZpeGVkIHg1MDlfY3J0X3BhcnNlX3BhdGgoKSBidWcgb24gV2luZG93cyBwbGF0Zm9ybXMKKyAgICogQWRkZWQgbWlzc2luZyBNUElfQ0hLKCkgYXJvdW5kIHNvbWUgc3RhdGVtZW50cyBpbiBtcGlfZGl2X21waSgpIChmb3VuZCBieQorICAgICBUcnVzdEluU29mdCkKKyAgICogRml4ZWQgcG90ZW50aWFsIG92ZXJmbG93IGluIGNlcnRpZmljYXRlIHNpemUgdmVyaWZpY2F0aW9uIGluCisgICAgIHNzbF93cml0ZV9jZXJ0aWZpY2F0ZSgpIChmb3VuZCBieSBUcnVzdEluU29mdCkKKyAgICogRml4IEFTTSBmb3JtYXQgaW4gYm5fbXVsLmgKKyAgICogUG90ZW50aWFsIG1lbW9yeSBsZWFrIGluIGJpZ251bV9zZWxmdGVzdCgpCisgICAqIFJlcGxhY2VkIGV4cGlyZWQgdGVzdCBjZXJ0aWZpY2F0ZQorICAgKiBzc2xfbWFpbF9jbGllbnQgbm93IHRlcm1pbmF0ZXMgbGluZXMgd2l0aCBDUkxGLCBpbnN0ZWFkIG9mIExGCisgICAqIEZpeCBidWcgaW4gUlNBIFBLQ1MjMSB2MS41ICJyZXZlcnNlZCIgb3BlcmF0aW9ucworICAgKiBGaXhlZCB0ZXN0aW5nIHdpdGggb3V0LW9mLXNvdXJjZSBidWlsZHMgdXNpbmcgY21ha2UKKyAgICogRml4ZWQgdmVyc2lvbi1tYWpvciBpbnRvbGVyYW5jZSBpbiBzZXJ2ZXIKKyAgICogRml4ZWQgQ01ha2Ugc3ltbGlua2luZyBvbiBvdXQtb2Ytc291cmNlIGJ1aWxkcworICAgKiBCaWdudW0ncyBNSVBTLTMyIGFzc2VtYmx5IHdhcyB1c2VkIG9uIE1JUFMtNjQsIGNhdXNpbmcgY2hhb3MuIChGb3VuZCBieQorICAgICBBbGV4IFdpbHNvbi4pCisgICAqIHNzbF9pbml0KCkgd2FzIGxlYXZpbmcgYSBkaXJ0eSBwb2ludGVyIGluIHNzbF9jb250ZXh0IGlmIG1hbGxvYyBvZgorICAgICBvdXRfY3RyIGZhaWxlZAorICAgKiBzc2xfaGFuZHNoYWtlX2luaXQoKSB3YXMgbGVhdmluZyBkaXJ0eSBwb2ludGVycyBpbiBzdWJjb250ZXh0cyBpZiBtYWxsb2MKKyAgICAgb2Ygb25lIG9mIHRoZW0gZmFpbGVkCisgICAqIHg1MDlfZ2V0X2N1cnJlbnRfdGltZSgpIHVzZXMgbG9jYWx0aW1lX3IoKSB0byBwcmV2ZW50IHRocmVhZCBpc3N1ZXMKKyAgICogU29tZSBleGFtcGxlIHNlcnZlciBwcm9ncmFtcyB3ZXJlIG5vdCBzZW5kaW5nIHRoZSBjbG9zZV9ub3RpZnkgYWxlcnQuCisgICAqIFBvdGVudGlhbCBtZW1vcnkgbGVhayBpbiBtcGlfZXhwX21vZCgpIHdoZW4gZXJyb3Igb2NjdXJzIGR1cmluZworICAgICBjYWxjdWxhdGlvbiBvZiBSUi4KKyAgICogSW1wcm92ZSBpbnRlcm9wZXJhYmlsaXR5IGJ5IG5vdCB3cml0aW5nIGV4dGVuc2lvbiBsZW5ndGggaW4gQ2xpZW50SGVsbG8KKyAgICAgd2hlbiBubyBleHRlbnNpb25zIGFyZSBwcmVzZW50IChmb3VuZCBieSBNYXR0aGV3IFBhZ2UpCisgICAqIHJzYV9jaGVja19wdWJrZXkoKSBub3cgYWxsb3dzIGFuIEUgdXAgdG8gTgorICAgKiBPbiBPcGVuQlNELCB1c2UgYXJjNHJhbmRvbV9idWYoKSBpbnN0ZWFkIG9mIHJhbmQoKSB0byBwcmV2ZW50IHdhcm5pbmdzCisgICAqIG1waV9maWxsX3JhbmRvbSgpIHdhcyBjcmVhdGluZyBudW1iZXJzIGxhcmdlciB0aGFuIHJlcXVlc3RlZCBvbgorICAgICBiaWctZW5kaWFuIHBsYXRmb3JtIHdoZW4gc2l6ZSB3YXMgbm90IGFuIGludGVnZXIgbnVtYmVyIG9mIGxpbWJzCisgICAqIEZpeCBkZXRlY3Rpb24gb2YgRHJhZ29uZmx5QlNEIGluIG5ldC5jIChmb3VuZCBieSBNYXJrdXMgUGZlaWZmZXIpCisgICAqIFN0cmljdGVyIGNoZWNrIG9uIFNTTCBDbGllbnRIZWxsbyBpbnRlcm5hbCBzaXplcyBjb21wYXJlZCB0byBhY3R1YWwgcGFja2V0CisgICAgIHNpemUgKGZvdW5kIGJ5IFRydXN0SW5Tb2Z0KQorICAgKiBGaXggcHJlcHJvY2Vzc29yIGNoZWNrcyBmb3IgYm5fbXVsIFBQQyBhc20gKGZvdW5kIGJ5IEJhcnJ5IEsuIE5hdGhhbikuCisgICAqIFVzZSBcblx0IHJhdGhlciB0aGFuIHNlbWljb2xvbnMgZm9yIGJuX211bCBhc20sIHNpbmNlIHNvbWUgYXNzZW1ibGVycworICAgICBpbnRlcnByZXQgc2VtaWNvbG9ucyBhcyBjb21tZW50IGRlbGltaXRlcnMgKGZvdW5kIGJ5IEJhcnJ5IEsuIE5hdGhhbikuCisgICAqIERpc2FibGUgYnJva2VuIFNwYXJjNjQgYm5fbXVsIGFzc2VtYmx5IChmb3VuZCBieSBGbG9yaWFuIE9ic2VyKS4KKyAgICogRml4IGJhc2U2NF9kZWNvZGUoKSB0byByZXR1cm4gYW5kIGNoZWNrIGxlbmd0aCBjb3JyZWN0bHkgKGluIGNhc2Ugb2YKKyAgICAgdGlnaHQgYnVmZmVycykKKworPSBWZXJzaW9uIDEuMi4xMCByZWxlYXNlZCAyMDEzLTEwLTA3CitDaGFuZ2VzCisgICAqIENoYW5nZWQgUlNBIGJsaW5kaW5nIHRvIGEgc2xvd2VyIGJ1dCB0aHJlYWQtc2FmZSB2ZXJzaW9uCisKK0J1Z2ZpeAorICAgKiBGaXhlZCBtZW1vcnkgbGVhayBpbiBSU0EgYXMgYSByZXN1bHQgb2YgaW50cm9kdWN0aW9uIG9mIGJsaW5kaW5nCisgICAqIEZpeGVkIHNzbF9wa2NzMTFfZGVjcnlwdCgpIHByb3RvdHlwZQorICAgKiBGaXhlZCBNU1ZDIHByb2plY3QgZmlsZXMKKworPSBWZXJzaW9uIDEuMi45IHJlbGVhc2VkIDIwMTMtMTAtMDEKK0NoYW5nZXMKKyAgICogeDUwOV92ZXJpZnkoKSBub3cgY2FzZSBpbnNlbnNpdGl2ZSBmb3IgY24gKFJGQyA2MTI1IDYuNCkKKworQnVnZml4CisgICAqIEZpeGVkIHBvdGVudGlhbCBtZW1vcnkgbGVhayB3aGVuIGZhaWxpbmcgdG8gcmVzdW1lIGEgc2Vzc2lvbgorICAgKiBGaXhlZCBwb3RlbnRpYWwgZmlsZSBkZXNjcmlwdG9yIGxlYWtzIChmb3VuZCBieSBSZW1pIEdhY29nbmUpCisgICAqIE1pbm9yIGZpeGVzCisKK1NlY3VyaXR5CisgICAqIEZpeGVkIHBvdGVudGlhbCBoZWFwIGJ1ZmZlciBvdmVyZmxvdyBvbiBsYXJnZSBob3N0bmFtZSBzZXR0aW5nCisgICAqIEZpeGVkIHBvdGVudGlhbCBuZWdhdGl2ZSB2YWx1ZSBtaXNpbnRlcnByZXRhdGlvbiBpbiBsb2FkX2ZpbGUoKQorICAgKiBSU0EgYmxpbmRpbmcgb24gQ1JUIG9wZXJhdGlvbnMgdG8gY291bnRlciB0aW1pbmcgYXR0YWNrcworICAgICAoZm91bmQgYnkgQ3lyaWwgQXJuYXVkIGFuZCBQaWVycmUtQWxhaW4gRm91cXVlKQorCis9IFZlcnNpb24gMS4yLjggcmVsZWFzZWQgMjAxMy0wNi0xOQorRmVhdHVyZXMKKyAgICogUGFyc2luZyBvZiBQS0NTIzggZW5jcnlwdGVkIHByaXZhdGUga2V5IGZpbGVzCisgICAqIFBLQ1MjMTIgUEJFIGFuZCBkZXJpdmF0aW9uIGZ1bmN0aW9ucworICAgKiBDZW50cmFsaXplZCBtb2R1bGUgb3B0aW9uIHZhbHVlcyBpbiBjb25maWcuaCB0byBhbGxvdyB1c2VyLWRlZmluZWQKKyAgICAgc2V0dGluZ3Mgd2l0aG91dCBlZGl0aW5nIGhlYWRlciBmaWxlcyBieSB1c2luZyBQT0xBUlNTTF9DT05GSUdfT1BUSU9OUworCitDaGFuZ2VzCisgICAqIEhBVkVHRSByYW5kb20gZ2VuZXJhdG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQKKyAgICogSW50ZXJuYWxseSBzcGxpdCB1cCB4NTA5cGFyc2Vfa2V5KCkgaW50byBhIChQRU0pIGhhbmRsZXIgZnVuY3Rpb24KKyAgICAgYW5kIHNwZWNpZmljIERFUiBwYXJzZXIgZnVuY3Rpb25zIGZvciB0aGUgUEtDUyMxIGFuZCB1bmVuY3J5cHRlZAorICAgICBQS0NTIzggcHJpdmF0ZSBrZXkgZm9ybWF0cworICAgKiBBZGRlZCBtZWNoYW5pc20gdG8gcHJvdmlkZSBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgZm9yIGFsbAorICAgICBzeW1tZXRyaWMgY2lwaGVyIGFuZCBoYXNoIGFsZ29yaXRobXMgKGUuZy4gUE9MQVJTU0xfQUVTX0FMVCBpbgorCSBjb25maWcuaCkKKyAgICogUEtDUyM1IG1vZHVsZSBhZGRlZC4gTW92ZWQgUEJLREYyIGZ1bmN0aW9uYWxpdHkgaW5zaWRlIGFuZCBkZXByZWNhdGVkCisgICAgIG9sZCBQQktERjIgbW9kdWxlCisKK0J1Z2ZpeAorICAgKiBTZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24gc2hvdWxkIG9ubHkgYmUgc2VudCBpbiBjYXNlIGNsaWVudAorICAgICBzdXBwb3J0cyBzZWN1cmUgcmVuZWdvdGlhdGlvbgorICAgKiBGaXhlZCBvZmZzZXQgZm9yIGNlcnRfdHlwZSBsaXN0IGluIHNzbF9wYXJzZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCkKKyAgICogRml4ZWQgY29uc3QgY29ycmVjdG5lc3MgaXNzdWVzIHRoYXQgaGF2ZSBubyBpbXBhY3Qgb24gdGhlIEFCSQorICAgKiB4NTA5cGFyc2VfY3J0KCkgbm93IGJldHRlciBoYW5kbGVzIFBFTSBlcnJvciBzaXR1YXRpb25zCisgICAqIHNzbF9wYXJzZV9jZXJ0aWZpY2F0ZSgpIG5vdyBjYWxscyB4NTA5cGFyc2VfY3J0X2RlcigpIGRpcmVjdGx5CisgICAgIGluc3RlYWQgb2YgdGhlIHg1MDlwYXJzZV9jcnQoKSB3cmFwcGVyIHRoYXQgY2FuIGFsc28gcGFyc2UgUEVNCisJIGNlcnRpZmljYXRlcworICAgKiB4NTA5cGFyc2VfY3J0cGF0aCgpIGlzIG5vdyByZWVudHJhbnQgYW5kIHVzZXMgbW9yZSBwb3J0YWJsZSBzdGF0KCkKKyAgICogRml4ZWQgYmlnbnVtLmMgYW5kIGJuX211bC5oIHRvIHN1cHBvcnQgVGh1bWIyIGFuZCBMTFZNIGNvbXBpbGVyCisgICAqIEZpeGVkIHZhbHVlcyBmb3IgMi1rZXkgVHJpcGxlIERFUyBpbiBjaXBoZXIgbGF5ZXIKKyAgICogc3NsX3dyaXRlX2NlcnRpZmljYXRlX3JlcXVlc3QoKSBjYW4gaGFuZGxlIGVtcHR5IGNhX2NoYWluCisKK1NlY3VyaXR5CisgICAqIEEgcG9zc2libGUgRG9TIGR1cmluZyB0aGUgU1NMIEhhbmRzaGFrZSwgZHVlIHRvIGZhdWx0eSBwYXJzaW5nIG9mCisgICAgIFBFTS1lbmNvZGVkIGNlcnRpZmljYXRlcyBoYXMgYmVlbiBmaXhlZCAoZm91bmQgYnkgSmFjayBMbG95ZCkKKworPSBWZXJzaW9uIDEuMi43IHJlbGVhc2VkIDIwMTMtMDQtMTMKK0ZlYXR1cmVzCisgICAqIEFiaWxpdHkgdG8gc3BlY2lmeSBhbGxvd2VkIGNpcGhlcnN1aXRlcyBiYXNlZCBvbiB0aGUgcHJvdG9jb2wgdmVyc2lvbi4KKworQ2hhbmdlcworICAgKiBEZWZhdWx0IEJsb3dmaXNoIGtleXNpemUgaXMgbm93IDEyOC1iaXRzCisgICAqIFRlc3Qgc3VpdGVzIG1hZGUgc21hbGxlciB0byBhY2NvbW1vZGF0ZSBSYXNwYmVycnkgUGkKKworQnVnZml4CisgICAqIEZpeCBmb3IgTVBJIGFzc2VtYmx5IGZvciBBUk0KKyAgICogR0NNIGFkYXB0ZWQgdG8gc3VwcG9ydCBzaXplcyA+IDJeMjkKKworPSBWZXJzaW9uIDEuMi42IHJlbGVhc2VkIDIwMTMtMDMtMTEKK0J1Z2ZpeAorICAgKiBGaXhlZCBtZW1vcnkgbGVhayBpbiBzc2xfZnJlZSgpIGFuZCBzc2xfcmVzZXQoKSBmb3IgYWN0aXZlIHNlc3Npb24KKyAgICogQ29ycmVjdGVkIEdDTSBjb3VudGVyIGluY3JlbWVudGF0aW9uIHRvIHVzZSBvbmx5IDMyLWJpdHMgaW5zdGVhZCBvZgorICAgICAxMjgtYml0cyAoZm91bmQgYnkgWWF3bmluZyBBbmdlbCkKKyAgICogRml4ZXMgZm9yIDY0LWJpdCBjb21waWxhdGlvbiB3aXRoIE1TIFZpc3VhbCBTdHVkaW8KKyAgICogRml4ZWQgbmV0X2JpbmQoKSBmb3Igc3BlY2lmaWVkIElQIGFkZHJlc3NlcyBvbiBsaXR0bGUgZW5kaWFuIHN5c3RlbXMKKyAgICogRml4ZWQgYXNzZW1ibHkgY29kZSBmb3IgQVJNIChUaHVtYiBhbmQgcmVndWxhcikgZm9yIHNvbWUgY29tcGlsZXJzCisKK0NoYW5nZXMKKyAgICogSW50ZXJuYWxseSBzcGxpdCB1cCByc2FfcGtjczFfZW5jcnlwdCgpLCByc2FfcGtjczFfZGVjcnlwdCgpLAorICAgICByc2FfcGtjczFfc2lnbigpIGFuZCByc2FfcGtjczFfdmVyaWZ5KCkgdG8gc2VwYXJhdGUgUEtDUyMxIHYxLjUgYW5kCisgICAgIFBLQ1MjMSB2Mi4xIGZ1bmN0aW9ucworICAgKiBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20gbGFiZWxzIHdoZW4gdXNpbmcgcnNhX3JzYWVzX29hZXBfZW5jcnlwdCgpCisgICAgIG9yIHJzYV9yc2Flc19vYWVwX2RlY3J5cHQoKQorICAgKiBSZS1hZGRlZCBoYW5kbGluZyBmb3IgU1NMdjIgQ2xpZW50IEhlbGxvIHdoZW4gdGhlIGRlZmluZQorICAgICBQT0xBUlNTTF9TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPIGlzIHNldAorICAgKiBUaGUgU1NMIHNlc3Npb24gY2FjaGUgbW9kdWxlIChzc2xfY2FjaGUpIG5vdyBhbHNvIHJldGFpbnMgcGVlcl9jZXJ0CisgICAgIGluZm9ybWF0aW9uIChub3QgdGhlIGVudGlyZSBjaGFpbikKKworU2VjdXJpdHkKKyAgICogUmVtb3ZlZCBmdXJ0aGVyIHRpbWluZyBkaWZmZXJlbmNlcyBkdXJpbmcgU1NMIG1lc3NhZ2UgZGVjcnlwdGlvbiBpbgorICAgICBzc2xfZGVjcnlwdF9idWYoKQorICAgKiBSZW1vdmVkIHRpbWluZyBkaWZmZXJlbmNlcyBkdWUgdG8gYmFkIHBhZGRpbmcgZnJvbQorICAgICByc2FfcnNhZXNfcGtjczFfdjE1X2RlY3J5cHQoKSBhbmQgcnNhX3BrY3MxX2RlY3J5cHQoKSBmb3IgUEtDUyMxIHYxLjUKKyAgICAgb3BlcmF0aW9ucworCis9IFZlcnNpb24gMS4yLjUgcmVsZWFzZWQgMjAxMy0wMi0wMgorQ2hhbmdlcworICAgKiBBbGxvdyBlbmFibGluZyBvZiBkdW1teSBlcnJvcl9zdHJlcnJvcigpIHRvIHN1cHBvcnQgc29tZSB1c2UtY2FzZXMKKyAgICogRGVidWcgbWVzc2FnZXMgYWJvdXQgcGFkZGluZyBlcnJvcnMgZHVyaW5nIFNTTCBtZXNzYWdlIGRlY3J5cHRpb24gYXJlCisgICAgIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIGNhbiBiZSBlbmFibGVkIHdpdGggUE9MQVJTU0xfU1NMX0RFQlVHX0FMTCAKKyAgICogU2VuZGluZyBvZiBzZWN1cml0eS1yZWxldmFudCBhbGVydCBtZXNzYWdlcyB0aGF0IGRvIG5vdCBicmVhaworICAgICBpbnRlcm9wZXJhYmlsaXR5IGNhbiBiZSBzd2l0Y2hlZCBvbi9vZmYgd2l0aCB0aGUgZmxhZworICAgICBQT0xBUlNTTF9TU0xfQUxMX0FMRVJUX01FU1NBR0VTCisKK1NlY3VyaXR5CisgICAqIFJlbW92ZWQgdGltaW5nIGRpZmZlcmVuY2VzIGR1cmluZyBTU0wgbWVzc2FnZSBkZWNyeXB0aW9uIGluCisgICAgIHNzbF9kZWNyeXB0X2J1ZigpIGR1ZSB0byBiYWRseSBmb3JtYXR0ZWQgcGFkZGluZworCis9IFZlcnNpb24gMS4yLjQgcmVsZWFzZWQgMjAxMy0wMS0yNQorQ2hhbmdlcworICAgKiBNb3JlIGFkdmFuY2VkIFNTTCBjaXBoZXJzdWl0ZSByZXByZXNlbnRhdGlvbiBhbmQgbW92ZWQgdG8gbW9yZSBkeW5hbWljCisgICAgIFNTTCBjb3JlCisgICAqIEFkZGVkIHNzbF9oYW5kc2hha2Vfc3RlcCgpIHRvIGFsbG93IHNpbmdsZSBzdGVwcGluZyB0aGUgaGFuZHNoYWtlIHByb2Nlc3MKKworQnVnZml4CisgICAqIE1lbW9yeSBsZWFrIHdoZW4gdXNpbmcgUlNBX1BLQ1NfVjIxIG9wZXJhdGlvbnMgZml4ZWQKKyAgICogSGFuZGxlIGZ1dHVyZSB2ZXJzaW9uIHByb3Blcmx5IGluIHNzbF93cml0ZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCkKKyAgICogQ29ycmVjdGx5IGhhbmRsZSBDZXJ0aWZpY2F0ZVJlcXVlc3QgbWVzc2FnZSBpbiBjbGllbnQgZm9yIDw9IFRMUyAxLjEKKyAgICAgd2l0aG91dCBETiBsaXN0CisKKz0gVmVyc2lvbiAxLjIuMyByZWxlYXNlZCAyMDEyLTExLTI2CitCdWdmaXgKKyAgICogU2VydmVyIG5vdCBhbHdheXMgc2VuZGluZyBjb3JyZWN0IENlcnRpZmljYXRlUmVxdWVzdCBtZXNzYWdlCisKKz0gVmVyc2lvbiAxLjIuMiByZWxlYXNlZCAyMDEyLTExLTI0CitDaGFuZ2VzCisgICAqIEFkZGVkIHBfaHdfZGF0YSB0byBzc2xfY29udGV4dCBmb3IgY29udGV4dCBzcGVjaWZpYyBoYXJkd2FyZSBhY2NlbGVyYXRpb24KKyAgICAgZGF0YQorICAgKiBEdXJpbmcgdmVyaWZ5IHRydXN0LUNBIGlzIG9ubHkgY2hlY2tlZCBmb3IgZXhwaXJhdGlvbiBhbmQgQ1JMIHByZXNlbmNlICAKKworQnVnZml4ZXMKKyAgICogRml4ZWQgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGNvbXBhdGliaWxpdHkKKyAgICogRml4ZWQgZGVwZW5kZW5jeSBvbiBQT0xBUlNTTF9TSEE0X0MgaW4gU1NMIG1vZHVsZXMKKworPSBWZXJzaW9uIDEuMi4xIHJlbGVhc2VkIDIwMTItMTEtMjAKK0NoYW5nZXMKKyAgICogRGVwdGggdGhhdCB0aGUgY2VydGlmaWNhdGUgdmVyaWZ5IGNhbGxiYWNrIHJlY2VpdmVzIGlzIG5vdyBudW1iZXJlZAorICAgICBib3R0b20tdXAgKFBlZXIgY2VydCBkZXB0aCBpcyAwKQorCitCdWdmaXhlcworICAgKiBGaXhlcyBmb3IgTVNWQzYKKyAgICogTW92ZWQgbXBpX2ludl9tb2QoKSBvdXRzaWRlIFBPTEFSU1NMX0dFTlBSSU1FCisgICAqIEFsbG93IFIgYW5kIEEgdG8gcG9pbnQgdG8gc2FtZSBtcGkgaW4gbXBpX2Rpdl9tcGkgKGZvdW5kIGJ5IE1hbnVlbAorICAgICBQw6lnb3VyacOpLUdvbm5hcmQpCisgICAqIEZpeGVkIHBvc3NpYmxlIHNlZ2ZhdWx0IGluIG1waV9zaGlmdF9yKCkgKGZvdW5kIGJ5IE1hbnVlbAorICAgICBQw6lnb3VyacOpLUdvbm5hcmQpCisgICAqIEFkZGVkIG1heCBsZW5ndGggY2hlY2sgZm9yIHJzYV9wa2NzMV9zaWduIHdpdGggUEtDUyMxIHYyLjEKKworPSBWZXJzaW9uIDEuMi4wIHJlbGVhc2VkIDIwMTItMTAtMzEKK0ZlYXR1cmVzCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIE5VTEwgY2lwaGVyIChQT0xBUlNTTF9DSVBIRVJfTlVMTF9DSVBIRVIpIGFuZCB3ZWFrCisgICAgIGNpcGhlcnN1aXRlcyAoUE9MQVJTU0xfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTKS4gVGhleSBhcmUgZGlzYWJsZWQgYnkKKyAgICAgZGVmYXVsdCEKKyAgICogQWRkZWQgc3VwcG9ydCBmb3Igd2lsZGNhcmQgY2VydGlmaWNhdGVzCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIG11bHRpLWRvbWFpbiBjZXJ0aWZpY2F0ZXMgdGhyb3VnaCB0aGUgWDUwOSBTdWJqZWN0CisgICAgIEFsdGVybmF0aXZlIE5hbWUgZXh0ZW5zaW9uCisgICAqIEFkZGVkIHByZWxpbWluYXJ5IEFTTi4xIGJ1ZmZlciB3cml0aW5nIHN1cHBvcnQKKyAgICogQWRkZWQgcHJlbGltaW5hcnkgWDUwOSBDZXJ0aWZpY2F0ZSBSZXF1ZXN0IHdyaXRpbmcgc3VwcG9ydAorICAgKiBBZGRlZCBrZXlfYXBwX3dyaXRlciBleGFtcGxlIGFwcGxpY2F0aW9uCisgICAqIEFkZGVkIGNlcnRfcmVxIGV4YW1wbGUgYXBwbGljYXRpb24KKyAgICogQWRkZWQgYmFzZSBHYWxvaXMgQ291bnRlciBNb2RlIChHQ00pIGZvciBBRVMKKyAgICogQWRkZWQgVExTIDEuMiBzdXBwb3J0IChSRkMgNTI0NikKKyAgICogQWRkZWQgR0NNIHN1aXRlcyB0byBUTFMgMS4yIChSRkMgNTI4OCkKKyAgICogQWRkZWQgY29tbWFuZGxpbmUgZXJyb3IgY29kZSBjb252ZXJ0b3IgKHV0aWwvc3RyZXJyb3IpCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIEhhcmR3YXJlIEFjY2VsZXJhdGlvbiBob29raW5nIGluIFNTTC9UTFMKKyAgICogQWRkZWQgT3BlblNTTCAvIFBvbGFyU1NMIGNvbXBhdGliaWxpdHkgc2NyaXB0ICh0ZXN0cy9jb21wYXQuc2gpIGFuZAorICAgICBleGFtcGxlIGFwcGxpY2F0aW9uIChwcm9ncmFtcy9zc2wvb19wX3Rlc3QpIChyZXF1aXJlcyBPcGVuU1NMKQorICAgKiBBZGRlZCBYNTA5IENBIFBhdGggc3VwcG9ydAorICAgKiBBZGRlZCBUaHVtYiBhc3NlbWJseSBvcHRpbWl6YXRpb25zCisgICAqIEFkZGVkIERFRkxBVEUgY29tcHJlc3Npb24gc3VwcG9ydCBhcyBwZXIgUkZDMzc0OSAocmVxdWlyZXMgemxpYikKKyAgICogQWRkZWQgYmxvd2Zpc2ggYWxnb3JpdGhtIChHZW5lcmljIGFuZCBjaXBoZXIgbGF5ZXIpCisgICAqIEFkZGVkIFBLQ1MjNSBQQktERjIga2V5IGRlcml2YXRpb24gZnVuY3Rpb24KKyAgICogQWRkZWQgU2VjdXJlIFJlbmVnb3RpYXRpb24gKFJGQyA1NzQ2KQorICAgKiBBZGRlZCBwcmVkZWZpbmVkIERITSBncm91cHMgZnJvbSBSRkMgNTExNAorICAgKiBBZGRlZCBzaW1wbGUgU1NMIHNlc3Npb24gY2FjaGUgaW1wbGVtZW50YXRpb24KKyAgICogQWRkZWQgU2VydmVyTmFtZSBleHRlbnNpb24gcGFyc2luZyAoU05JKSBhdCBzZXJ2ZXIgc2lkZQorICAgKiBBZGRlZCBvcHRpb24gdG8gYWRkIG1pbmltdW0gYWNjZXB0ZWQgU1NML1RMUyBwcm90b2NvbCB2ZXJzaW9uCisKK0NoYW5nZXMKKyAgICogUmVtb3ZlZCByZWR1bmRhbnQgUE9MQVJTU0xfREVCVUdfTVNHIGRlZmluZQorICAgKiBBRVMgY29kZSBvbmx5IGNoZWNrIGZvciBQYWRsb2NrIG9uY2UKKyAgICogRml4ZWQgY29uc3QtY29ycmVjdG5lc3MgbXBpX2dldF9iaXQoKQorICAgKiBEb2N1bWVudGF0aW9uIGZvciBtcGlfbHNiKCkgYW5kIG1waV9tc2IoKQorICAgKiBNb3ZlZCBvdXRfbXNnIHRvIG91dF9oZHIgKyAzMiB0byBzdXBwb3J0IGhhcmR3YXJlIGFjY2VsZXJhdGlvbgorICAgKiBDaGFuZ2VkIGNlcnRpZmljYXRlIHZlcmlmeSBiZWhhdmlvdXIgdG8gY29tcGx5IHdpdGggUkZDIDYxMjUgc2VjdGlvbiA2LjMKKyAgICAgdG8gbm90IG1hdGNoIENOIGlmIHN1YmplY3RBbHROYW1lIGV4dGVuc2lvbiBpcyBwcmVzZW50IChDbG9zZXMgdGlja2V0ICM1NikKKyAgICogQ2lwaGVyIGxheWVyIGNpcGhlcl9tb2RlX3QgUE9MQVJTU0xfTU9ERV9DRkIxMjggaXMgcmVuYW1lZCB0bworICAgICBQT0xBUlNTTF9NT0RFX0NGQiwgdG8gYWxzbyBoYW5kbGUgZGlmZmVyZW50IGJsb2NrIHNpemUgQ0ZCIG1vZGVzLgorICAgKiBSZW1vdmVkIGhhbmRsaW5nIGZvciBTU0x2MiBDbGllbnQgSGVsbG8gKGFzIHBlciBSRkMgNTI0NiByZWNvbW1lbmRhdGlvbikKKyAgICogUmV2YW1wZWQgc2Vzc2lvbiByZXN1bXB0aW9uIGhhbmRsaW5nCisgICAqIEdlbmVyYWxpemVkIGV4dGVybmFsIHByaXZhdGUga2V5IGltcGxlbWVudGF0aW9uIGhhbmRsaW5nIChsaWtlIFBLQ1MjMTEpCisgICAgIGluIFNTTC9UTFMKKyAgICogUmV2YW1wZWQgeDUwOV92ZXJpZnkoKSBhbmQgdGhlIFNTTCBmX3ZyZnkgY2FsbGJhY2sgaW1wbGVtZW50YXRpb25zCisgICAqIE1vdmVkIGZyb20gdW5zaWduZWQgbG9uZyB0byBmaXhlZCB3aWR0aCB1aW50MzJfdCB0eXBlcyB0aHJvdWdob3V0IGNvZGUKKyAgICogUmVuYW1lZCBjaXBoZXJzdWl0ZXMgbmFtaW5nIHNjaGVtZSB0byBJQU5BIHJlc2VydmVkIG5hbWVzCisKK0J1Z2ZpeAorICAgKiBGaXhlZCBoYW5kbGluZyBlcnJvciBpbiBtcGlfY21wX21waSgpIG9uIGxvbmdlciBCIHZhbHVlcyAoZm91bmQgYnkKKyAgICAgSHVpIERvbmcpCisgICAqIEZpeGVkIHBvdGVudGlhbCBoZWFwIGNvcnJ1cHRpb24gaW4geDUwOV9uYW1lIGFsbG9jYXRpb24KKyAgICogRml4ZWQgc2luZ2xlIFJTQSB0ZXN0IHRoYXQgZmFpbGVkIG9uIEJpZyBFbmRpYW4gc3lzdGVtcyAoQ2xvc2VzIHRpY2tldCAjNTQpCisgICAqIG1waV9leHBfbW9kKCkgbm93IGNvcnJlY3RseSBoYW5kbGVzIG5lZ2F0aXZlIGJhc2UgbnVtYmVycyAoQ2xvc2VzIHRpY2tldAorICAgICAjNTIpCisgICAqIEhhbmRsZSBlbmNyeXB0aW9uIHdpdGggcHJpdmF0ZSBrZXkgYW5kIGRlY3J5cHRpb24gd2l0aCBwdWJsaWMga2V5IGFzIHBlcgorICAgCSBSRkMgMjMxMworICAgKiBIYW5kbGUgZW1wdHkgY2VydGlmaWNhdGUgc3ViamVjdCBuYW1lcworICAgKiBQcmV2ZW50IHJlYWRpbmcgb3ZlciBidWZmZXIgYm91bmRhcmllcyBvbiBYNTA5IGNlcnRpZmljYXRlIHBhcnNpbmcKKyAgICogbXBpX2FkZF9hYnMoKSBub3cgY29ycmVjdGx5IGhhbmRsZXMgYWRkaW5nIHNob3J0IG51bWJlcnMgdG8gbG9uZyBudW1iZXJzCisgICAgIHdpdGggY2Fycnkgcm9sbG92ZXIgKGZvdW5kIGJ5IFJ1c2xhbiBZdXNoY2hlbmtvKQorICAgKiBIYW5kbGUgZXhpc3RlbmNlIG9mIE9wZW5TU0wgVHJ1c3QgRXh0ZW5zaW9ucyBhdCBlbmQgb2YgWC41MDkgREVSIGJsb2IKKyAgICogRml4ZWQgTVBJIGFzc2VtYmx5IGZvciBTUEFSQzY0IHBsYXRmb3JtCisKK1NlY3VyaXR5CisgICAqIEZpeGVkIHBvdGVudGlhbCBtZW1vcnkgemVyb2l6YXRpb24gb24gbWlzY3JhZnRlZCBSU0Ega2V5IChmb3VuZCBieSBFbG9pCisgICAgIFZhbmRlcmJla2VuKQorCis9IFZlcnNpb24gMS4xLjggcmVsZWFzZWQgb24gMjAxMy0xMC0wMQorQnVnZml4CisgICAqIEZpeGVkIHBvdGVudGlhbCBtZW1vcnkgbGVhayB3aGVuIGZhaWxpbmcgdG8gcmVzdW1lIGEgc2Vzc2lvbgorICAgKiBGaXhlZCBwb3RlbnRpYWwgZmlsZSBkZXNjcmlwdG9yIGxlYWtzCisKK1NlY3VyaXR5CisgICAqIFBvdGVudGlhbCBidWZmZXItb3ZlcmZsb3cgZm9yIHNzbF9yZWFkX3JlY29yZCgpIChpbmRlcGVuZGVudGx5IGZvdW5kIGJ5CisgICAgIGJvdGggVHJ1c3RJblNvZnQgYW5kIFBhdWwgQnJvZGV1ciBvZiBMZXZpYXRoYW4gU2VjdXJpdHkgR3JvdXApCisgICAqIFBvdGVudGlhbCBuZWdhdGl2ZSB2YWx1ZSBtaXNpbnRlcnByZXRhdGlvbiBpbiBsb2FkX2ZpbGUoKQorICAgKiBQb3RlbnRpYWwgaGVhcCBidWZmZXIgb3ZlcmZsb3cgb24gbGFyZ2UgaG9zdG5hbWUgc2V0dGluZworCis9IFZlcnNpb24gMS4xLjcgcmVsZWFzZWQgb24gMjAxMy0wNi0xOQorQ2hhbmdlcworICAgKiBIQVZFR0UgcmFuZG9tIGdlbmVyYXRvciBkaXNhYmxlZCBieSBkZWZhdWx0CisKK0J1Z2ZpeAorICAgKiB4NTA5cGFyc2VfY3J0KCkgbm93IGJldHRlciBoYW5kbGVzIFBFTSBlcnJvciBzaXR1YXRpb25zCisgICAqIHNzbF9wYXJzZV9jZXJ0aWZpY2F0ZSgpIG5vdyBjYWxscyB4NTA5cGFyc2VfY3J0X2RlcigpIGRpcmVjdGx5CisgICAgIGluc3RlYWQgb2YgdGhlIHg1MDlwYXJzZV9jcnQoKSB3cmFwcGVyIHRoYXQgY2FuIGFsc28gcGFyc2UgUEVNCisJIGNlcnRpZmljYXRlcworICAgKiBGaXhlZCB2YWx1ZXMgZm9yIDIta2V5IFRyaXBsZSBERVMgaW4gY2lwaGVyIGxheWVyCisgICAqIHNzbF93cml0ZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCkgY2FuIGhhbmRsZSBlbXB0eSBjYV9jaGFpbgorCitTZWN1cml0eQorICAgKiBBIHBvc3NpYmxlIERvUyBkdXJpbmcgdGhlIFNTTCBIYW5kc2hha2UsIGR1ZSB0byBmYXVsdHkgcGFyc2luZyBvZgorICAgICBQRU0tZW5jb2RlZCBjZXJ0aWZpY2F0ZXMgaGFzIGJlZW4gZml4ZWQgKGZvdW5kIGJ5IEphY2sgTGxveWQpCisKKz0gVmVyc2lvbiAxLjEuNiByZWxlYXNlZCBvbiAyMDEzLTAzLTExCitCdWdmaXgKKyAgICogRml4ZWQgbmV0X2JpbmQoKSBmb3Igc3BlY2lmaWVkIElQIGFkZHJlc3NlcyBvbiBsaXR0bGUgZW5kaWFuIHN5c3RlbXMKKworQ2hhbmdlcworICAgKiBBbGxvdyBlbmFibGluZyBvZiBkdW1teSBlcnJvcl9zdHJlcnJvcigpIHRvIHN1cHBvcnQgc29tZSB1c2UtY2FzZXMKKyAgICogRGVidWcgbWVzc2FnZXMgYWJvdXQgcGFkZGluZyBlcnJvcnMgZHVyaW5nIFNTTCBtZXNzYWdlIGRlY3J5cHRpb24gYXJlCisgICAgIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIGNhbiBiZSBlbmFibGVkIHdpdGggUE9MQVJTU0xfU1NMX0RFQlVHX0FMTAorCitTZWN1cml0eQorICAgKiBSZW1vdmVkIHRpbWluZyBkaWZmZXJlbmNlcyBkdXJpbmcgU1NMIG1lc3NhZ2UgZGVjcnlwdGlvbiBpbgorICAgICBzc2xfZGVjcnlwdF9idWYoKQorICAgKiBSZW1vdmVkIHRpbWluZyBkaWZmZXJlbmNlcyBkdWUgdG8gYmFkIHBhZGRpbmcgZnJvbQorICAgICByc2FfcnNhZXNfcGtjczFfdjE1X2RlY3J5cHQoKSBhbmQgcnNhX3BrY3MxX2RlY3J5cHQoKSBmb3IgUEtDUyMxIHYxLjUKKyAgICAgb3BlcmF0aW9ucworCis9IFZlcnNpb24gMS4xLjUgcmVsZWFzZWQgb24gMjAxMy0wMS0xNgorQnVnZml4CisgICAqIEZpeGVkIE1QSSBhc3NlbWJseSBmb3IgU1BBUkM2NCBwbGF0Zm9ybQorICAgKiBIYW5kbGUgZXhpc3RlbmNlIG9mIE9wZW5TU0wgVHJ1c3QgRXh0ZW5zaW9ucyBhdCBlbmQgb2YgWC41MDkgREVSIGJsb2IKKyAgICogbXBpX2FkZF9hYnMoKSBub3cgY29ycmVjdGx5IGhhbmRsZXMgYWRkaW5nIHNob3J0IG51bWJlcnMgdG8gbG9uZyBudW1iZXJzCisgICAgIHdpdGggY2Fycnkgcm9sbG92ZXIKKyAgICogTW92ZWQgbXBpX2ludl9tb2QoKSBvdXRzaWRlIFBPTEFSU1NMX0dFTlBSSU1FCisgICAqIFByZXZlbnQgcmVhZGluZyBvdmVyIGJ1ZmZlciBib3VuZGFyaWVzIG9uIFg1MDkgY2VydGlmaWNhdGUgcGFyc2luZworICAgKiBtcGlfZXhwX21vZCgpIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBuZWdhdGl2ZSBiYXNlIG51bWJlcnMgKENsb3NlcyB0aWNrZXQKKyAgICAgIzUyKQorICAgKiBGaXhlZCBwb3NzaWJsZSBzZWdmYXVsdCBpbiBtcGlfc2hpZnRfcigpIChmb3VuZCBieSBNYW51ZWwKKyAgICAgUMOpZ291cmnDqS1Hb25uYXJkKQorICAgKiBBbGxvdyBSIGFuZCBBIHRvIHBvaW50IHRvIHNhbWUgbXBpIGluIG1waV9kaXZfbXBpIChmb3VuZCBieSBNYW51ZWwKKyAgICAgUMOpZ291cmnDqS1Hb25uYXJkKQorICAgKiBBZGRlZCBtYXggbGVuZ3RoIGNoZWNrIGZvciByc2FfcGtjczFfc2lnbiB3aXRoIFBLQ1MjMSB2Mi4xCisgICAqIE1lbW9yeSBsZWFrIHdoZW4gdXNpbmcgUlNBX1BLQ1NfVjIxIG9wZXJhdGlvbnMgZml4ZWQKKyAgICogSGFuZGxlIGVuY3J5cHRpb24gd2l0aCBwcml2YXRlIGtleSBhbmQgZGVjcnlwdGlvbiB3aXRoIHB1YmxpYyBrZXkgYXMgcGVyCisgICAgIFJGQyAyMzEzCisgICAqIEZpeGVzIGZvciBNU1ZDNgorCitTZWN1cml0eQorICAgKiBGaXhlZCBwb3RlbnRpYWwgbWVtb3J5IHplcm9pemF0aW9uIG9uIG1pc2NyYWZ0ZWQgUlNBIGtleSAoZm91bmQgYnkgRWxvaQorICAgICBWYW5kZXJiZWtlbikKKworPSBWZXJzaW9uIDEuMS40IHJlbGVhc2VkIG9uIDIwMTItMDUtMzEKK0J1Z2ZpeAorICAgKiBDb3JyZWN0bHkgaGFuZGxlIGVtcHR5IFNTTC9UTFMgcGFja2V0cyAoRm91bmQgYnkgSmFtZXMgWW9uYW4pCisgICAqIEZpeGVkIHBvdGVudGlhbCBoZWFwIGNvcnJ1cHRpb24gaW4geDUwOV9uYW1lIGFsbG9jYXRpb24KKyAgICogRml4ZWQgc2luZ2xlIFJTQSB0ZXN0IHRoYXQgZmFpbGVkIG9uIEJpZyBFbmRpYW4gc3lzdGVtcyAoQ2xvc2VzIHRpY2tldCAjNTQpCisKKz0gVmVyc2lvbiAxLjEuMyByZWxlYXNlZCBvbiAyMDEyLTA0LTI5CitCdWdmaXgKKyAgICogRml4ZWQgcmFuZG9tIE1QSSBnZW5lcmF0aW9uIHRvIG5vdCBnZW5lcmF0ZSBtb3JlIHNpemUgdGhhbiByZXF1ZXN0ZWQuCisKKz0gVmVyc2lvbiAxLjEuMiByZWxlYXNlZCBvbiAyMDEyLTA0LTI2CitCdWdmaXgKKyAgICogRml4ZWQgaGFuZGxpbmcgZXJyb3IgaW4gbXBpX2NtcF9tcGkoKSBvbiBsb25nZXIgQiB2YWx1ZXMgKGZvdW5kIGJ5CisgICAgIEh1aSBEb25nKQorCitTZWN1cml0eQorICAgKiBGaXhlZCBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb24gbWlzY3JhZnRlZCBjbGllbnQgbWVzc2FnZXMgKGZvdW5kIGJ5CisgICAgIEZyYW1hLUMgdGVhbSBhdCBDRUEgTElTVCkKKyAgICogRml4ZWQgZ2VuZXJhdGlvbiBvZiBESE0gcGFyYW1ldGVycyB0byBjb3JyZWN0IGxlbmd0aCAoZm91bmQgYnkgUnVzbGFuCisgICAgIFl1c2hjaGVua28pCisKKz0gVmVyc2lvbiAxLjEuMSByZWxlYXNlZCBvbiAyMDEyLTAxLTIzCitCdWdmaXgKKyAgICogQ2hlY2sgZm9yIGZhaWxlZCBtYWxsb2MoKSBpbiBzc2xfc2V0X2hvc3RuYW1lKCkgYW5kIHg1MDlfZ2V0X2VudHJpZXMoKQorICAgICAoQ2xvc2VzIHRpY2tldCAjNDcsIGZvdW5kIGJ5IEh1Z28gTGVpc2luaykKKyAgICogRml4ZWQgaXNzdWVzIHdpdGggSW50ZWwgY29tcGlsZXIgb24gNjQtYml0IHN5c3RlbXMgKENsb3NlcyB0aWNrZXQgIzUwKQorICAgKiBGaXhlZCBtdWx0aXBsZSBjb21waWxlciB3YXJuaW5ncyBmb3IgVlM2IGFuZCBhcm1jYworICAgKiBGaXhlZCBidWcgaW4gQ1RSX0NSQkcgc2VsZnRlc3QKKworPSBWZXJzaW9uIDEuMS4wIHJlbGVhc2VkIG9uIDIwMTEtMTItMjIKK0ZlYXR1cmVzCisgICAqIEFkZGVkIHNzbF9zZXNzaW9uX3Jlc2V0KCkgdG8gYWxsb3cgYmV0dGVyIG11bHRpLWNvbm5lY3Rpb24gcG9vbHMgb2YKKyAgICAgU1NMIGNvbnRleHRzIHdpdGhvdXQgbmVlZGluZyB0byBzZXQgYWxsIG5vbi1jb25uZWN0aW9uLXNwZWNpZmljCisJIGRhdGEgYW5kIHBvaW50ZXJzIGFnYWluLiBBZGFwdGVkIHNzbF9zZXJ2ZXIgdG8gdXNlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyAgICogQWRkZWQgc3NsX3NldF9tYXhfdmVyc2lvbigpIHRvIGFsbG93IGNsaWVudHMgdG8gb2ZmZXIgYSBsb3dlciBtYXhpbXVtCisgICAgIHN1cHBvcnRlZCB2ZXJzaW9uIHRvIGEgc2VydmVyIHRvIGhlbHAgYnVnZ3kgc2VydmVyIGltcGxlbWVudGF0aW9ucy4KKwkgKENsb3NlcyB0aWNrZXQgIzM2KQorICAgKiBBZGRlZCBjaXBoZXJfZ2V0X2NpcGhlcl9tb2RlKCkgYW5kIGNpcGhlcl9nZXRfY2lwaGVyX29wZXJhdGlvbigpCisgICAgIGludHJvc3BlY3Rpb24gZnVuY3Rpb25zIChDbG9zZXMgdGlja2V0ICM0MCkKKyAgICogQWRkZWQgQ1RSX0RSQkcgYmFzZWQgb24gQUVTLTI1Ni1DVFIgKE5JU1QgU1AgODAwLTkwKSByYW5kb20gZ2VuZXJhdG9yCisgICAqIEFkZGVkIGEgZ2VuZXJpYyBlbnRyb3B5IGFjY3VtdWxhdG9yIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgYWRkaW5nCisgICAgIGN1c3RvbSBlbnRyb3B5IHNvdXJjZXMgYW5kIGFkZGVkIHNvbWUgZ2VuZXJpYyBhbmQgcGxhdGZvcm0gZGVwZW5kZW50CisJIGVudHJvcHkgc291cmNlcworCitDaGFuZ2VzCisgICAqIERvY3VtZW50YXRpb24gZm9yIEFFUyBhbmQgQ2FtZWxsaWEgaW4gbW9kZXMgQ1RSIGFuZCBDRkIxMjggY2xhcmlmaWVkLgorICAgKiBGaXhlZCByc2FfZW5jcnlwdCBhbmQgcnNhX2RlY3J5cHQgZXhhbXBsZXMgdG8gdXNlIHB1YmxpYyBrZXkgZm9yCisgICAgIGVuY3J5cHRpb24gYW5kIHByaXZhdGUga2V5IGZvciBkZWNyeXB0aW9uLiAoQ2xvc2VzIHRpY2tldCAjMzQpCisgICAqIEluY2Vhc2VkIG1heGltdW0gc2l6ZSBvZiBBU04xIGxlbmd0aCByZWFkcyB0byAzMi1iaXRzLgorICAgKiBBZGRlZCBhbiBFWFBMSUNJVCB0YWcgbnVtYmVyIHBhcmFtZXRlciB0byB4NTA5X2dldF9leHQoKQorICAgKiBBZGRlZCBhIHNlcGFyYXRlIENSTCBlbnRyeSBleHRlbnNpb24gcGFyc2luZyBmdW5jdGlvbgorICAgKiBTZXBhcmF0ZWQgdGhlIEFTTi4xIHBhcnNpbmcgY29kZSBmcm9tIHRoZSBYLjUwOSBzcGVjaWZpYyBwYXJzaW5nIGNvZGUuCisgICAgIFNvIG5vdyB0aGVyZSBpcyBhIG1vZHVsZSB0aGF0IGlzIGNvbnRyb2xsZWQgd2l0aCBQT0xBUlNTTF9BU04xX1BBUlNFX0MuCisgICAqIENoYW5nZWQgdGhlIGRlZmluZWQga2V5LWxlbmd0aCBvZiBERVMgY2lwaGVycyBpbiBjaXBoZXIuaCB0byBpbmNsdWRlIHRoZQorICAgICBwYXJpdHkgYml0cywgdG8gcHJldmVudCBtaXN0YWtlcyBpbiBjb3B5aW5nIGRhdGEuIChDbG9zZXMgdGlja2V0ICMzMykKKyAgICogTG9hZHMgb2YgbWluaW1hbCBjaGFuZ2VzIHRvIGJldHRlciBzdXBwb3J0IFdJTkNFIGFzIGEgYnVpbGQgdGFyZ2V0CisgICAgIChDcmVkaXRzIGdvIHRvIE1hcmNvIExpenphKQorICAgKiBBZGRlZCBQT0xBUlNTTF9NUElfV0lORE9XX1NJWkUgZGVmaW5pdGlvbiB0byBhbGxvdyBlYXNpZXIgdGltZSB0byBtZW1vcnkKKyAgICAgdHJhZGUtb2ZmCisgICAqIEludHJvZHVjZWQgUE9MQVJTU0xfTVBJX01BWF9TSVpFIGFuZCBQT0xBUlNTTF9NUElfTUFYX0JJVFMgZm9yIE1QSSBzaXplCisgICAgIG1hbmFnZW1lbnQgKENsb3NlcyB0aWNrZXQgIzQ0KQorICAgKiBDaGFuZ2VkIHRoZSB1c2VkIHJhbmRvbSBmdW5jdGlvbiBwb2ludGVyIHRvIG1vcmUgZmxleGlibGUgZm9ybWF0LiBSZW5hbWVkCisgICAgIGhhdmVnZV9yYW5kKCkgdG8gaGF2ZWdlX3JhbmRvbSgpIHRvIHByZXZlbnQgbWlzdGFrZXMuIExvdHMgb2YgY2hhbmdlcyBhcworICAgICBhIGNvbnNlcXVlbmNlIGluIGxpYnJhcnkgY29kZSBhbmQgcHJvZ3JhbXMKKyAgICogTW92ZWQgYWxsIGV4YW1wbGVzIHByb2dyYW1zIHRvIHVzZSB0aGUgbmV3IGVudHJvcHkgYW5kIENUUl9EUkJHCisgICAqIEFkZGVkIHBlcm1pc3NpdmUgY2VydGlmaWNhdGUgcGFyc2luZyB0byB4NTA5cGFyc2VfY3J0KCkgYW5kCisgICAgIHg1MDlwYXJzZV9jcnRmaWxlKCkuIFdpdGggcGVybWlzc2l2ZSBwYXJzaW5nIHRoZSBwYXJzaW5nIGRvZXMgbm90IHN0b3Agb24KKyAgICAgZW5jb3VudGVyaW5nIGEgcGFyc2UtZXJyb3IuIEJld2FyZSB0aGF0IHRoZSBtZWFuaW5nIG9mIHJldHVybiB2YWx1ZXMgaGFzCisgICAgIGNoYW5nZWQhCisgICAqIEFsbCBlcnJvciBjb2RlcyBhcmUgbm93IG5lZ2F0aXZlLiBFdmVuIG9uIG1lcm1vcnkgZmFpbHVyZXMgYW5kIElPIGVycm9ycy4KKworQnVnZml4CisgICAqIEZpeGVkIGZhdWx0eSBITUFDLU1EMiBpbXBsZW1lbnRhdGlvbi4gRm91bmQgYnkgZGliYWMuIChDbG9zZXMKKyAgICAgdGlja2V0ICMzNykKKyAgICogRml4ZWQgYSBidWcgd2hlcmUgdGhlIENSTCBwYXJzZXIgZXhwZWN0ZWQgYW4gRVhQTElDSVQgQVNOLjEgdGFnCisgICAgIGJlZm9yZSB2ZXJzaW9uIG51bWJlcnMKKyAgICogQWxsb3dlZCBYNTA5IGtleSB1c2FnZSBwYXJzaW5nIHRvIGFjY2VwdCA0IGJ5dGUgdmFsdWVzIGluc3RlYWQgb2YgdGhlCisgICAgIHN0YW5kYXJkIDEgYnl0ZSB2ZXJzaW9uIHNvbWV0aW1lcyB1c2VkIGJ5IE1pY3Jvc29mdC4gKENsb3NlcyB0aWNrZXQgIzM4KQorICAgKiBGaXhlZCBpbmNvcnJlY3QgYmVoYXZpb3VyIGluIGNhc2Ugb2YgUlNBU1NBLVBTUyB3aXRoIGEgc2FsdCBsZW5ndGgKKyAgICAgc21hbGxlciB0aGFuIHRoZSBoYXNoIGxlbmd0aC4gKENsb3NlcyB0aWNrZXQgIzQxKQorICAgKiBJZiBjZXJ0aWZpY2F0ZSBzZXJpYWwgaXMgbG9uZ2VyIHRoYW4gMzIgb2N0ZXRzLCBzZXJpYWwgbnVtYmVyIGlzIG5vdworICAgICBhcHBlbmRlZCB3aXRoICcuLi4uJyBhZnRlciBmaXJzdCAyOCBvY3RldHMKKyAgICogSW1wcm92ZWQgYnVpbGQgc3VwcG9ydCBmb3IgczM5MHggYW5kIHNwYXJjNjQgaW4gYmlnbnVtLmgKKyAgICogRml4ZWQgTVMgVmlzdWFsIEMrKyBuYW1lIGNsYXNoIHdpdGggaW50NjQgaW4gc2hhNC5oCisgICAqIENvcnJlY3RlZCByZW1vdmFsIG9mIGxlYWRpbmcgIjAwOiIgaW4gcHJpbnRpbmcgc2VyaWFsIG51bWJlcnMgaW4KKyAgICAgY2VydGlmaWNhdGVzIGFuZCBDUkxzCisKKz0gVmVyc2lvbiAxLjAuMCByZWxlYXNlZCBvbiAyMDExLTA3LTI3CitGZWF0dXJlcworICAgKiBFeHBhbmRlZCBjaXBoZXIgbGF5ZXIgd2l0aCBzdXBwb3J0IGZvciBDRkIxMjggYW5kIENUUiBtb2RlCisgICAqIEFkZGVkIHJzYV9lbmNyeXB0IGFuZCByc2FfZGVjcnlwdCBzaW1wbGUgZXhhbXBsZSBwcm9ncmFtcy4KKworQ2hhbmdlcworICAgKiBUaGUgZ2VuZXJpYyBjaXBoZXIgYW5kIG1lc3NhZ2UgZGlnZXN0IGxheWVyIG5vdyBoYXZlIG5vcm1hbCBlcnJvcgorICAgICBjb2RlcyBpbnN0ZWFkIG9mIGludGVnZXJzCisKK0J1Z2ZpeAorICAgKiBVbmRpZCBmYXVsdHkgYnVnIGZpeCBpbiBzc2xfd3JpdGUoKSB3aGVuIGZsdXNoaW5nIG9sZCBkYXRhIChUaWNrZXQKKyAgICAgIzE4KQorCis9IFZlcnNpb24gMC45OS1wcmU1IHJlbGVhc2VkIG9uIDIwMTEtMDUtMjYKK0ZlYXR1cmVzCisgICAqIEFkZGVkIGFkZGl0aW9uYWwgQ2lwaGVyIEJsb2NrIE1vZGVzIHRvIHN5bW1ldHJpYyBjaXBoZXJzCisgICAgIChBRVMgQ1RSLCBDYW1lbGxpYSBDVFIsIFhURUEgQ0JDKSBpbmNsdWRpbmcgdGhlIG9wdGlvbiB0bworICAgICBlbmFibGUgYW5kIGRpc2FibGUgaW5kaXZpZHVhbCBtb2RlcyB3aGVuIG5lZWRlZAorICAgKiBGdW5jdGlvbnMgcmVxdWlyaW5nIEZpbGUgU3lzdGVtIGZ1bmN0aW9ucyBjYW4gbm93IGJlIGRpc2FibGVkCisgICAgIGJ5IHVuZGVmaW5pbmcgUE9MQVJTU0xfRlNfSU8KKyAgICogQSBlcnJvcl9zdHJlcnJvciBmdW5jdGlvbigpIGhhcyBiZWVuIGFkZGVkIHRvIHRyYW5zbGF0ZSBiZXR3ZWVuCisgICAgIGVycm9yIGNvZGVzIGFuZCB0aGVpciBkZXNjcmlwdGlvbi4KKyAgICogQWRkZWQgbXBpX2dldF9iaXQoKSBhbmQgbXBpX3NldF9iaXQoKSBpbmRpdmlkdWFsIGJpdCBzZXR0ZXIvZ2V0dGVyCisgICAgIGZ1bmN0aW9ucy4KKyAgICogQWRkZWQgc3NsX21haWxfY2xpZW50IGFuZCBzc2xfZm9ya19zZXJ2ZXIgYXMgZXhhbXBsZSBwcm9ncmFtcy4KKworQ2hhbmdlcworICAgKiBNYWpvciBhcmd1bWVudCAvIHZhcmlhYmxlIHJld3JpdGUuIEludHJvZHVjZWQgdXNlIG9mIHNpemVfdAorICAgICBpbnN0ZWFkIG9mIGludCBmb3IgYnVmZmVyIGxlbmd0aHMgYW5kIGxvb3AgdmFyaWFibGVzIGZvcgorICAgICBiZXR0ZXIgdW5zaWduZWQgLyBzaWduZWQgdXNlLiBSZW5hbWVkIGludGVybmFsIGJpZ2ludCB0eXBlcworICAgICB0X2ludCBhbmQgdF9kYmwgdG8gdF91aW50IGFuZCB0X3VkYmwgaW4gdGhlIHByb2Nlc3MKKyAgICogbXBpX2luaXQoKSBhbmQgbXBpX2ZyZWUoKSBub3cgb25seSBhY2NlcHQgYSBzaW5nbGUgTVBJCisgICAgIGFyZ3VtZW50IGFuZCBkbyBub3QgYWNjZXB0IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3RzIGFueW1vcmUuCisgICAqIFRoZSBlcnJvciBjb2RlcyBoYXZlIGJlZW4gcmVtYXBwZWQgYW5kIGNvbWJpbmluZyBlcnJvciBjb2RlcworICAgICBpcyBub3cgZG9uZSB3aXRoIGEgUExVUyBpbnN0ZWFkIG9mIGFuIE9SIGFzIGVycm9yIGNvZGVzCisgICAgIHVzZWQgYXJlIG5lZ2F0aXZlLgorICAgKiBDaGFuZ2VkIGJlaGF2aW91ciBvZiBuZXRfcmVhZCgpLCBzc2xfZmV0Y2hfaW5wdXQoKSBhbmQgc3NsX3JlY3YoKS4KKyAgICAgbmV0X3JlY3YoKSBub3cgcmV0dXJucyAwIG9uIEVPRiBpbnN0ZWFkIG9mCisgICAgIFBPTEFSU1NMX0VSUl9ORVRfQ09OTl9SRVNFVC4gc3NsX2ZldGNoX2lucHV0KCkgcmV0dXJucworICAgICBQT0xBUlNTTF9FUlJfU1NMX0NPTk5fRU9GIG9uIGFuIEVPRiBmcm9tIGl0cyBmX3JlY3YoKSBmdW5jdGlvbi4KKyAgICAgc3NsX3JlYWQoKSByZXR1cm5zIDAgaWYgYSBQT0xBUlNTTF9FUlJfU1NMX0NPTk5fRU9GIGlzIHJlY2VpdmVkCisgICAgIGFmdGVyIHRoZSBoYW5kc2hha2UuCisgICAqIE5ldHdvcmsgZnVuY3Rpb25zIG5vdyByZXR1cm4gUE9MQVJTU0xfRVJSX05FVF9XQU5UX1JFQUQgb3IKKyAgICAgUE9MQVJTU0xfRVJSX05FVF9XQU5UX1dSSVRFIGluc3RlYWQgb2YgdGhlIGFtYmlndW91cworICAgICBQT0xBUlNTTF9FUlJfTkVUX1RSWV9BR0FJTgorCis9IFZlcnNpb24gMC45OS1wcmU0IHJlbGVhc2VkIG9uIDIwMTEtMDQtMDEKK0ZlYXR1cmVzCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIFBLQ1MjMSB2Mi4xIGVuY29kaW5nIGFuZCB0aHVzIHN1cHBvcnQKKyAgICAgZm9yIHRoZSBSU0FFUy1PQUVQIGFuZCBSU0FTU0EtUFNTIG9wZXJhdGlvbnMuCisgICAqIFJlYWRpbmcgb2YgUHVibGljIEtleSBmaWxlcyBpbmNvcnBvcmF0ZWQgaW50byBkZWZhdWx0IHg1MDkKKyAgICAgZnVuY3Rpb25hbGl0eSBhcyB3ZWxsLgorICAgKiBBZGRlZCBtcGlfZmlsbF9yYW5kb20oKSBmb3IgY2VudHJhbGl6ZWQgZmlsbGluZyBvZiBiaWcgbnVtYmVycworICAgICB3aXRoIHJhbmRvbSBkYXRhIChGaXhlZCB0aWNrZXQgIzEwKQorCitDaGFuZ2VzCisgICAqIERlYnVnIHByaW50IG9mIE1QSSBub3cgcmVtb3ZlcyBsZWFkaW5nIHplcm8gb2N0ZXRzIGFuZCAKKyAgICAgZGlzcGxheXMgYWN0dWFsIGJpdCBzaXplIG9mIHRoZSB2YWx1ZS4KKyAgICogeDUwOXBhcnNlX2tleSgpIChhbmQgYXMgYSBjb25zZXF1ZW5jZSB4NTA5cGFyc2Vfa2V5ZmlsZSgpKSAKKyAgICAgZG9lcyBub3QgemVyb2l6ZSBtZW1vcnkgaW4gYWR2YW5jZSBhbnltb3JlLiBVc2UgcnNhX2luaXQoKQorICAgICBiZWZvcmUgcGFyc2luZyBhIGtleSBvciBrZXlmaWxlIQorCitCdWdmaXgKKyAgICogRGVidWcgb3V0cHV0IG9mIE1QSSdzIG5vdyB0aGUgc2FtZSBpbmRlcGVuZGVudCBvZiB1bmRlcmx5aW5nCisgICAgIHBsYXRmb3JtICgzMi1iaXQgLyA2NC1iaXQpIChGaXhlcyB0aWNrZXQgIzE5LCBmb3VuZCBieSBNYWRzCisgICAgIEtpaWxlcmljaCBhbmQgTWloYWkgTWlsaXRhcnUpCisgICAqIEZpeGVkIGJ1ZyBpbiBzc2xfd3JpdGUoKSB3aGVuIGZsdXNoaW5nIG9sZCBkYXRhIChGaXhlZCB0aWNrZXQKKyAgICAgIzE4LCBmb3VuZCBieSBOaWtvbGF5IEVwaWZhbm92KQorICAgKiBGaXhlZCBwcm9wZXIgaGFuZGxpbmcgb2YgUlNBU1NBLVBTUyB2ZXJpZmljYXRpb24gd2l0aCB2YXJpYWJsZQorICAgICBsZW5ndGggc2FsdCBsZW5ndGhzCisKKz0gVmVyc2lvbiAwLjk5LXByZTMgcmVsZWFzZWQgb24gMjAxMS0wMi0yOAorVGhpcyByZWxlYXNlIHJlcGxhY2VzIHZlcnNpb24gMC45OS1wcmUyIHdoaWNoIGhhZCBwb3NzaWJsZSBjb3B5cmlnaHQgaXNzdWVzLgorRmVhdHVyZXMKKyAgICogUGFyc2luZyBQRU0gcHJpdmF0ZSBrZXlzIGVuY3J5cHRlZCB3aXRoIERFUyBhbmQgQUVTCisgICAgIGFyZSBub3cgc3VwcG9ydGVkIGFzIHdlbGwgKEZpeGVzIHRpY2tldCAjNSkKKyAgICogQWRkZWQgY3JsX2FwcCBwcm9ncmFtIHRvIGFsbG93IGVhc3kgcmVhZGluZyBhbmQKKyAgICAgcHJpbnRpbmcgb2YgWDUwOSBDUkxzIGZyb20gZmlsZQorCitDaGFuZ2VzCisgICAqIFBhcnNpbmcgb2YgUEVNIGZpbGVzIG1vdmVkIHRvIHNlcGFyYXRlIG1vZHVsZSAoRml4ZXMgCisgICAgIHRpY2tldCAjMTMpLiBBbHNvIHBvc3NpYmxlIHRvIHJlbW92ZSBQRU0gc3VwcG9ydCBmb3IKKyAgICAgc3lzdGVtcyBvbmx5IHVzaW5nIERFUiBlbmNvZGluZworCitCdWdmaXhlcworICAgKiBDb3JyZWN0ZWQgcGFyc2luZyBvZiBVVENUaW1lIGRhdGVzIGJlZm9yZSAxOTkwIGFuZAorICAgICBhZnRlciAxOTUwCisgICAqIFN1cHBvcnQgbW9yZSBleG90aWMgT0lEJ3Mgd2hlbiBwYXJzaW5nIGNlcnRpZmljYXRlcworICAgCSAoZm91bmQgYnkgTWFkcyBLaWlsZXJpY2gpCisgICAqIFN1cHBvcnQgbW9yZSBleG90aWMgbmFtZSByZXByZXNlbnRhdGlvbnMgd2hlbiBwYXJzaW5nCisgICAgIGNlcnRpZmljYXRlcyAoZm91bmQgYnkgTWFkcyBLaWlsZXJpY2gpCisgICAqIFJlcGxhY2VkIHRoZSBleHBpcmVkIHRlc3QgY2VydGlmaWNhdGVzCisgICAqIERvIG5vdCBiYWlsIG91dCBpZiBubyBjbGllbnQgY2VydGlmaWNhdGUgc3BlY2lmaWVkLiBUcnkKKyAgICAgdG8gbmVnb3RpYXRlIGFub255bW91cyBjb25uZWN0aW9uIChGaXhlcyB0aWNrZXQgIzEyLAorICAgICBmb3VuZCBieSBCb3JpcyBLcmFzbm92c2tpeSkKKworU2VjdXJpdHkgZml4ZXMKKyAgICogRml4ZWQgYSBwb3NzaWJsZSBNYW4taW4tdGhlLU1pZGRsZSBhdHRhY2sgb24gdGhlCisgICAgIERpZmZpZSBIZWxsbWFuIGtleSBleGNoYW5nZSAodGhhbmtzIHRvIExhcnJ5IEhpZ2hzbWl0aCwKKyAgICAgU3VicmVwdGlvbiBMTEMpCisKKz0gVmVyc2lvbiAwLjk5LXByZTEgcmVsZWFzZWQgb24gMjAxMS0wMS0zMAorRmVhdHVyZXMKK05vdGU6IE1vc3Qgb2YgdGhlc2UgZmVhdHVyZXMgaGF2ZSBiZWVuIGRvbmF0ZWQgYnkgRm94LUlUCisgICAqIEFkZGVkIERveHlnZW4gc291cmNlIGNvZGUgZG9jdW1lbnRhdGlvbiBwYXJ0cworICAgKiBBZGRlZCByZWFkaW5nIG9mIERITSBjb250ZXh0IGZyb20gbWVtb3J5IGFuZCBmaWxlCisgICAqIEltcHJvdmVkIFg1MDkgY2VydGlmaWNhdGUgcGFyc2luZyB0byBpbmNsdWRlIGV4dGVuZGVkCisgICAgIGNlcnRpZmljYXRlIGZpZWxkcywgaW5jbHVkaW5nIEtleSBVc2FnZQorICAgKiBJbXByb3ZlZCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gYW5kIHZlcmlmaWNhdGlvbgorICAgICBhZ2FpbnN0IHRoZSBhdmFpbGFibGUgQ1JMcworICAgKiBEZXRlY3Rpb24gZm9yIERFUyB3ZWFrIGtleXMgYW5kIHBhcml0eSBiaXRzIGFkZGVkCisgICAqIEltcHJvdmVtZW50cyB0byBzdXBwb3J0IGludGVncmF0aW9uIGluIG90aGVyCisgICAgIGFwcGxpY2F0aW9uczoKKyAgICAgICArIEFkZGVkIGdlbmVyaWMgbWVzc2FnZSBkaWdlc3QgYW5kIGNpcGhlciB3cmFwcGVyCisgICAgICAgKyBJbXByb3ZlZCBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGNhcGFiaWxpdGllcywKKyAgICAgICAgIHN0YXR1cywgb2JqZWN0cyBhbmQgY29uZmlndXJhdGlvbgorICAgICAgICsgQWRkZWQgdmVyaWZpY2F0aW9uIGNhbGxiYWNrIG9uIGNlcnRpZmljYXRlIGNoYWluCisgICAgICAgICB2ZXJpZmljYXRpb24gdG8gYWxsb3cgZXh0ZXJuYWwgYmxhY2tsaXN0aW5nCisJICAgKyBBZGRpdGlvbmFsIGV4YW1wbGUgcHJvZ3JhbXMgdG8gc2hvdyB1c2FnZQorICAgKiBBZGRlZCBzdXBwb3J0IGZvciBQS0NTIzExIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUKKyAgICAgbGlicGtjczExLWhlbHBlciBsaWJyYXJ5CisKK0NoYW5nZXMKKyAgICogeDUwOXBhcnNlX3RpbWVfZXhwaXJlZCgpIGNoZWNrcyB0aW1lIGluIGFkZGl0aW9uIHRvCisgICAgIHRoZSBleGlzdGluZyBkYXRlIGNoZWNrCisgICAqIFRoZSBjaXBoZXJzIG1lbWJlciBvZiBzc2xfY29udGV4dCBhbmQgdGhlIGNpcGhlciBtZW1iZXIKKyAgICAgb2Ygc3NsX3Nlc3Npb24gaGF2ZSBiZWVuIHJlbmFtZWQgdG8gY2lwaGVyc3VpdGVzIGFuZAorICAgICBjaXBoZXJzdWl0ZSByZXNwZWN0aXZlbHkuIFRoaXMgY2xhcmlmaWVzIHRoZSBkaWZmZXJlbmNlCisgICAgIHdpdGggdGhlIGdlbmVyaWMgY2lwaGVyIGxheWVyIGFuZCBpcyBiZXR0ZXIgbmFtaW5nCisgICAgIGFsdG9nZXRoZXIKKworPSBWZXJzaW9uIDAuMTQuMCByZWxlYXNlZCBvbiAyMDEwLTA4LTE2CitGZWF0dXJlcworICAgKiBBZGRlZCBzdXBwb3J0IGZvciBTU0xfRURIX1JTQV9BRVNfMTI4X1NIQSBhbmQKKyAgICAgU1NMX0VESF9SU0FfQ0FNRUxMSUFfMTI4X1NIQSBjaXBoZXJzdWl0ZXMKKyAgICogQWRkZWQgY29tcGlsZS10aW1lIGFuZCBydW4tdGltZSB2ZXJzaW9uIGluZm9ybWF0aW9uCisgICAqIEV4cGFuZGVkIHNzbF9jbGllbnQyIGFyZ3VtZW50cyBmb3IgbW9yZSBmbGV4aWJpbGl0eQorICAgKiBBZGRlZCBzdXBwb3J0IGZvciBUTFMgdjEuMQorCitDaGFuZ2VzCisgICAqIE1hZGUgTWFrZWZpbGUgY2xlYW5lcgorICAgKiBSZW1vdmVkIGRlcGVuZGVuY3kgb24gcmFuZCgpIGluIHJzYV9wa2NzMV9lbmNyeXB0KCkuCisgICAgIE5vdyB1c2luZyByYW5kb20gZnVjdGlvbiBwcm92aWRlZCB0byBmdW5jdGlvbiBhbmQKKyAgICAgY2hhbmdlZCB0aGUgcHJvdG90eXBlIG9mIHJzYV9wa2NzMV9lbmNyeXB0KCksCisgICAgIHJzYV9pbml0KCkgYW5kIHJzYV9nZW5fa2V5KCkuCisgICAqIFNvbWUgU1NMIGRlZmluZXMgd2VyZSByZW5hbWVkIGluIG9yZGVyIHRvIGF2b2lkCisgICAgIGZ1dHVyZSBjb25mdXNpb24KKworQnVnIGZpeGVzCisgICAqIEZpeGVkIENNYWtlIG91dCBvZiBzb3VyY2UgYnVpbGQgZm9yIHRlc3RzIChmb3VuZCBieQorICAgICBra2VydCkKKyAgICogcnNhX2NoZWNrX3ByaXZhdGUoKSBub3cgc3VwcG9ydHMgUEtDUzF2MiBrZXlzIGFzIHdlbGwKKyAgICogRml4ZWQgZGVhZGxvY2sgaW4gcnNhX3BrY3MxX2VuY3J5cHQoKSBvbiBmYWlsaW5nIHJhbmRvbQorICAgICBnZW5lcmF0b3IKKworPSBWZXJzaW9uIDAuMTMuMSByZWxlYXNlZCBvbiAyMDEwLTAzLTI0CitCdWcgZml4ZXMKKyAgICogRml4ZWQgTWFrZWZpbGUgaW4gbGlicmFyeSB0aGF0IHdhcyBtaXN0YWtlbmx5IG1lcmdlZAorICAgKiBBZGRlZCBtaXNzaW5nIGNvbnN0IHN0cmluZyBmaXhlcworCis9IFZlcnNpb24gMC4xMy4wIHJlbGVhc2VkIG9uIDIwMTAtMDMtMjEKK0ZlYXR1cmVzCisgICAqIEFkZGVkIG9wdGlvbiBwYXJzaW5nIGZvciBob3N0IGFuZCBwb3J0IHNlbGVjdGlvbiB0bworICAgICBzc2xfY2xpZW50MgorICAgKiBBZGRlZCBzdXBwb3J0IGZvciBHZW5lcmFsaXplZFRpbWUgaW4gWDUwOSBwYXJzaW5nCisgICAqIEFkZGVkIGNlcnRfYXBwIHByb2dyYW0gdG8gYWxsb3cgZWFzeSByZWFkaW5nIGFuZAorICAgICBwcmludGluZyBvZiBYNTA5IGNlcnRpZmljYXRlcyBmcm9tIGZpbGUgb3IgU1NMCisgICAgIGNvbm5lY3Rpb24uCisKK0NoYW5nZXMKKyAgICogQWRkZWQgY29uc3QgY29ycmVjdG5lc3MgZm9yIG1haW4gY29kZSBiYXNlCisgICAqIFg1MDkgc2lnbmF0dXJlIGFsZ29yaXRobSBkZXRlcm1pbmF0aW9uIGlzIG5vdworICAgICBpbiBhIGZ1bmN0aW9uIHRvIGFsbG93IGVhc3kgZnV0dXJlIGV4cGFuc2lvbgorICAgKiBDaGFuZ2VkIHN5bW1ldHJpYyBjaXBoZXIgZnVuY3Rpb25zIHRvCisgICAgIGlkZW50aWNhbCBpbnRlcmZhY2UgKHJldHVybmluZyBpbnQgcmVzdWx0IHZhbHVlcykKKyAgICogQ2hhbmdlZCBBUkM0IHRvIHVzZSBzZXBhcmF0ZSBpbnB1dC9vdXRwdXQgYnVmZmVyCisgICAqIEFkZGVkIHJlc2V0IGZ1bmN0aW9uIGZvciBITUFDIGNvbnRleHQgYXMgc3BlZWQtdXAKKyAgICAgZm9yIHNwZWNpZmljIHVzZS1jYXNlcworCitCdWcgZml4ZXMKKyAgICogRml4ZWQgYnVnIHJlc3VsdGluZyBpbiBmYWlsdXJlIHRvIHNlbmQgdGhlIGxhc3QKKyAgICAgY2VydGlmaWNhdGUgaW4gdGhlIGNoYWluIGluIHNzbF93cml0ZV9jZXJ0aWZpY2F0ZSgpIGFuZAorICAgICBzc2xfd3JpdGVfY2VydGlmaWNhdGVfcmVxdWVzdCgpIChmb3VuZCBieSBmYXRib2IpCisgICAqIEFkZGVkIHNtYWxsIGZpeGVzIGZvciBjb21waWxlciB3YXJuaW5ncyBvbiBhIE1hYworICAgICAoZm91bmQgYnkgRnJhbmsgZGUgQnJhYmFuZGVyKQorICAgKiBGaXhlZCBhbGdvcml0aG1pYyBidWcgaW4gbXBpX2lzX3ByaW1lKCkgKGZvdW5kIGJ5CisgICAgIFNtYmF0IFRvbm95YW4pCisKKz0gVmVyc2lvbiAwLjEyLjEgcmVsZWFzZWQgb24gMjAwOS0xMC0wNAorQ2hhbmdlcworICAgKiBDb3ZlcmFnZSB0ZXN0IGRlZmluaXRpb25zIG5vdyBzdXBwb3J0ICdkZXBlbmRzX29uJworICAgICB0YWdnaW5nIHN5c3RlbS4KKyAgICogVGVzdHMgcmVxdWlyaW5nIHNwZWNpZmljIGhhc2hpbmcgYWxnb3JpdGhtcyBub3cgaG9ub3IKKyAgICAgdGhlIGRlZmluZXMuCisKK0J1ZyBmaXhlcworICAgKiBDaGFuZ2VkIHR5cG8gaW4gI2lmZGVmIGluIHg1MDlwYXJzZS5jIChmb3VuZAorICAgICBieSBFZHVhcmRvKQorCis9IFZlcnNpb24gMC4xMi4wIHJlbGVhc2VkIG9uIDIwMDktMDctMjgKK0ZlYXR1cmVzCisgICAqIEFkZGVkIENNYWtlIG1ha2VmaWxlcyBhcyBhbHRlcm5hdGl2ZSB0byByZWd1bGFyIE1ha2VmaWxlcy4KKyAgICogQWRkZWQgcHJlbGltaW5hcnkgQ29kZSBDb3ZlcmFnZSB0ZXN0cyBmb3IgQUVTLCBBUkM0LAorICAgICBCYXNlNjQsIE1QSSwgU0hBLWZhbWlseSwgTUQtZmFtaWx5LCBITUFDLVNIQS1mYW1pbHksCisgICAgIENhbWVsbGlhLCBERVMsIDMtREVTLCBSU0EgUEtDUyMxLCBYVEVBLCBEaWZmaWUtSGVsbG1hbgorICAgICBhbmQgWDUwOXBhcnNlLgorCitDaGFuZ2VzCisgICAqIEVycm9yIGNvZGVzIGFyZSBub3QgKG5lY2Vzc2FyaWx5KSBuZWdhdGl2ZS4gS2VlcAorICAgICB0aGlzIGlzIG1pbmQgd2hlbiBjaGVja2luZyBmb3IgZXJyb3JzLgorICAgKiBSU0FfUkFXIHJlbmFtZWQgdG8gU0lHX1JTQV9SQVcgZm9yIGNvbnNpc3RlbmN5LgorICAgKiBGaXhlZCB0eXBvIGluIG5hbWUgb2YgUE9MQVJTU0xfRVJSX1JTQV9PVVRQVVRfVE9PX0xBUkdFLgorICAgKiBDaGFuZ2VkIGludGVyZmFjZSBmb3IgQUVTIGFuZCBDYW1lbGxpYSBzZXRrZXkgZnVuY3Rpb25zCisgICAgIHRvIGluZGljYXRlIGludmFsaWQga2V5IGxlbmd0aHMuCisKK0J1ZyBmaXhlcworICAgKiBGaXhlZCBpbmNsdWRlIGxvY2F0aW9uIG9mIGVuZGlhbi5oIG9uIEZyZWVCU0QgKGZvdW5kIGJ5CisgICAgIEdhYnJpZWwpCisgICAqIEZpeGVkIGluY2x1ZGUgbG9jYXRpb24gb2YgZW5kaWFuLmggYW5kIG5hbWUgY2xhc2ggb24KKyAgICAgQXBwbGVzIChmb3VuZCBieSBNYXJ0aW4gdmFuIEhlbnNiZXJnZW4pCisgICAqIEZpeGVkIEhNQUMtTUQyIGJ5IG1vZGlmeWluZyBtZDJfc3RhcnRzKCksIHNvIHRoYXQgdGhlCisgICAgIHJlcXVpcmVkIEhNQUMgaXBhZCBhbmQgb3BhZCB2YXJpYWJsZXMgYXJlIG5vdCBjbGVhcmVkLgorICAgICAoZm91bmQgYnkgY29kZSBjb3ZlcmFnZSB0ZXN0cykKKyAgICogUHJldmVudGVkIHVzZSBvZiBsb25nIGxvbmcgaW4gYmlnbnVtIGlmIAorICAgICBQT0xBUlNTTF9IQVZFX0xPTkdMT05HIG5vdCBkZWZpbmVkIChmb3VuZCBieSBHaWxlcworICAgICBCYXRoZ2F0ZSkuCisgICAqIEZpeGVkIGluY29ycmVjdCBoYW5kbGluZyBvZiBuZWdhdGl2ZSBzdHJpbmdzIGluCisgICAgIG1waV9yZWFkX3N0cmluZygpIChmb3VuZCBieSBjb2RlIGNvdmVyYWdlIHRlc3RzKS4KKyAgICogRml4ZWQgc2VnZmF1bHQgb24gaGFuZGxpbmcgZW1wdHkgcnNhX2NvbnRleHQgaW4KKyAgICAgcnNhX2NoZWNrX3B1YmtleSgpIGFuZCByc2FfY2hlY2tfcHJpdmtleSgpIChmb3VuZCBieQorICAgICBjb2RlIGNvdmVyYWdlIHRlc3RzKS4KKyAgICogRml4ZWQgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIG9uZSBzaW5nbGUgbmVnYXRpdmUgaW5wdXQKKyAgICAgdmFsdWUgaW4gbXBpX2FkZF9hYnMoKSAoZm91bmQgYnkgY29kZSBjb3ZlcmFnZSB0ZXN0cykuCisgICAqIEZpeGVkIGluY29ycmVjdCBoYW5kbGluZyBvZiBuZWdhdGl2ZSBmaXJzdCBpbnB1dAorICAgICB2YWx1ZSBpbiBtcGlfc3ViX2FicygpIChmb3VuZCBieSBjb2RlIGNvdmVyYWdlIHRlc3RzKS4KKyAgICogRml4ZWQgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIG5lZ2F0aXZlIGZpcnN0IGlucHV0CisgICAgIHZhbHVlIGluIG1waV9tb2RfbXBpKCkgYW5kIG1waV9tb2RfaW50KCkuIFJlc3VsdGluZworICAgICBjaGFuZ2UgYWxzbyBhZmZlY3RzIG1waV93cml0ZV9zdHJpbmcoKSAoZm91bmQgYnkgY29kZQorICAgICBjb3ZlcmFnZSB0ZXN0cykuCisgICAqIENvcnJlY3RlZCBpc19wcmltZSgpIHJlc3VsdHMgZm9yIDAsIDEgYW5kIDIgKGZvdW5kIGJ5CisgICAgIGNvZGUgY292ZXJhZ2UgdGVzdHMpLgorICAgKiBGaXhlZCBDYW1lbGxpYSBhbmQgWFRFQSBmb3IgNjQtYml0IFdpbmRvd3Mgc3lzdGVtcy4KKworPSBWZXJzaW9uIDAuMTEuMSByZWxlYXNlZCBvbiAyMDA5LTA1LTE3CisgICAqIEZpeGVkIG1pc3NpbmcgZnVuY3Rpb25hbGl0eSBmb3IgU0hBLTIyNCwgU0hBLTI1NiwgU0hBMzg0LAorICAgICBTSEEtNTEyIGluIHJzYV9wa2NzMV9zaWduKCkKKworPSBWZXJzaW9uIDAuMTEuMCByZWxlYXNlZCBvbiAyMDA5LTA1LTAzCisgICAqIEZpeGVkIGEgYnVnIGluIG1waV9nY2QoKSBzbyB0aGF0IGl0IGFsc28gd29ya3Mgd2hlbiBib3RoCisgICAgIGlucHV0IG51bWJlcnMgYXJlIGV2ZW4gYW5kIGFkZGVkIHRlc3RjYXNlcyB0byBjaGVjaworICAgICAoZm91bmQgYnkgUGllcnJlIEhhYm91eml0KS4KKyAgICogQWRkZWQgc3VwcG9ydCBmb3IgU0hBLTIyNCwgU0hBLTI1NiwgU0hBLTM4NCBhbmQgU0hBLTUxMgorICAgICBvbmUgd2F5IGhhc2ggZnVuY3Rpb25zIHdpdGggdGhlIFBLQ1MjMSB2MS41IHNpZ25pbmcgYW5kCisgICAgIHZlcmlmaWNhdGlvbi4KKyAgICogRml4ZWQgbWlub3IgYnVnIHJlZ2FyZGluZyBtcGlfZ2NkIGxvY2F0ZWQgd2l0aGluIHRoZQorICAgICBQT0xBUlNTTF9HRU5QUklNRSBibG9jay4KKyAgICogRml4ZWQgbWlub3IgbWVtb3J5IGxlYWsgaW4geDUwOXBhcnNlX2NydCgpIGFuZCBhZGRlZCBiZXR0ZXIKKyAgICAgaGFuZGxpbmcgb2YgJ2Z1bGwnIGNlcnRpZmljYXRlIGNoYWlucyAoZm91bmQgYnkgTWF0aGlhcworICAgICBPbHNzb24pLgorICAgKiBDZW50cmFsaXplZCBmaWxlIG9wZW5pbmcgYW5kIHJlYWRpbmcgZm9yIHg1MDkgZmlsZXMgaW50bworICAgICBsb2FkX2ZpbGUoKQorICAgKiBNYWRlIGRlZmluaXRpb24gb2YgbmV0X2h0b25zKCkgZW5kaWFuLWNsZWFuIGZvciBiaWcgZW5kaWFuCisgICAgIHN5c3RlbXMgKEZvdW5kIGJ5IEdlcm5vdCkuCisgICAqIFVuZGVmaW5pbmcgUE9MQVJTU0xfSEFWRV9BU00gbm93IGFsc28gaGFuZGxlcyBwcmV2ZW50cyBhc20gaW4KKyAgICAgcGFkbG9jayBhbmQgdGltaW5nIGNvZGUuIAorICAgKiBGaXhlZCBhbiBvZmYtYnktb25lIGJ1ZmZlciBhbGxvY2F0aW9uIGluIHNzbF9zZXRfaG9zdG5hbWUoKQorICAgICByZXNwb25zaWJsZSBmb3IgY3Jhc2hlcyBhbmQgdW53YW50ZWQgYmVoYXZpb3VyLgorICAgKiBBZGRlZCBzdXBwb3J0IGZvciBDZXJ0aWZpY2F0ZSBSZXZvY2F0aW9uIExpc3QgKENSTCkgcGFyc2luZy4KKyAgICogQWRkZWQgc3VwcG9ydCBmb3IgQ1JMIHJldm9jYXRpb24gdG8geDUwOXBhcnNlX3ZlcmlmeSgpIGFuZAorICAgICBTU0wvVExTIGNvZGUuCisgICAqIEZpeGVkIGNvbXBhdGliaWxpdHkgb2YgWFRFQSBhbmQgQ2FtZWxsaWEgb24gYSA2NC1iaXQgc3lzdGVtCisgICAgIChmb3VuZCBieSBGZWxpeCB2b24gTGVpdG5lcikuCisKKz0gVmVyc2lvbiAwLjEwLjAgcmVsZWFzZWQgb24gMjAwOS0wMS0xMgorICAgKiBNaWdyYXRlZCBYeVNTTCB0byBQb2xhclNTTAorICAgKiBBZGRlZCBYVEVBIHN5bW1ldHJpYyBjaXBoZXIKKyAgICogQWRkZWQgQ2FtZWxsaWEgc3ltbWV0cmljIGNpcGhlcgorICAgKiBBZGRlZCBzdXBwb3J0IGZvciBjaXBoZXJzdWl0ZXM6IFNTTF9SU0FfQ0FNRUxMSUFfMTI4X1NIQSwKKyAgICAgU1NMX1JTQV9DQU1FTExJQV8yNTZfU0hBIGFuZCBTU0xfRURIX1JTQV9DQU1FTExJQV8yNTZfU0hBCisgICAqIEZpeGVkIGRhbmdlcm91cyBidWcgdGhhdCBjYW4gY2F1c2UgYSBoZWFwIG92ZXJmbG93IGluCisgICAgIHJzYV9wa2NzMV9kZWNyeXB0IChmb3VuZCBieSBDaHJpc3RvcGhlIERldmluZSkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorWHlTU0wgQ2hhbmdlTG9nCisKKz0gVmVyc2lvbiAwLjkgcmVsZWFzZWQgb24gMjAwOC0wMy0xNgorCisgICAgKiBBZGRlZCBzdXBwb3J0IGZvciBjaXBoZXJzdWl0ZTogU1NMX1JTQV9BRVNfMTI4X1NIQQorICAgICogRW5hYmxlZCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlcyBieSBkZWZhdWx0IGluIGFlc2NyeXB0Mi5jCisgICAgKiBQcmVsaW1pbmFyeSBvcGVuc3NsIHdyYXBwZXIgY29udHJpYnV0ZWQgYnkgRGF2aWQgQmFycmV0dAorICAgICogRml4ZWQgYSBidWcgaW4gc3NsX3dyaXRlKCkgdGhhdCBjYXVzZWQgdGhlIHNhbWUgcGF5bG9hZCB0bworICAgICAgYmUgc2VudCB0d2ljZSBpbiBub24tYmxvY2tpbmcgbW9kZSB3aGVuIHNlbmQgcmV0dXJucyBFQUdBSU4KKyAgICAqIEZpeGVkIHNzbF9wYXJzZV9jbGllbnRfaGVsbG8oKTogc2Vzc2lvbiBpZCBhbmQgY2hhbGxlbmdlIG11c3QKKyAgICAgIG5vdCBiZSBzd2FwcGVkIGluIHRoZSBTU0x2MiBDbGllbnRIZWxsbyAoZm91bmQgYnkgR3JlZyBSb2Jzb24pCisgICAgKiBBZGRlZCB1c2VyLWRlZmluZWQgY2FsbGJhY2sgZGVidWcgZnVuY3Rpb24gKEtyeXN0aWFuIEtvbG9kemllaikKKyAgICAqIEJlZm9yZSBmcmVlaW5nIGEgY2VydGlmaWNhdGUsIHByb3Blcmx5IHplcm8gb3V0IGFsbCBjZXJ0LiBkYXRhCisgICAgKiBGaXhlZCB0aGUgIm1vZGUiIHBhcmFtZXRlciBzbyB0aGF0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiBhcmUKKyAgICAgIG5vdCBzd2FwcGVkIG9uIFBhZExvY2s7IGFsc28gZml4ZWQgY29tcGlsYXRpb24gb24gb2xkZXIgdmVyc2lvbnMKKyAgICAgIG9mIGdjYyAoYnVnIHJlcG9ydGVkIGJ5IERhdmlkIEJhcnJldHQpCisgICAgKiBDb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlIGluIHBhZGxvY2tfeGNyeXB0Y2JjKCkgd2hlbiBpbnB1dCBvcgorICAgICAgb3VwdXQgZGF0YSBpcyBub24tYWxpZ25lZCBieSBmYWxsaW5nIGJhY2sgdG8gdGhlIHNvZnR3YXJlCisgICAgICBpbXBsZW1lbnRhdGlvbiwgYXMgVklBIE5laGVtaWFoIGNhbm5vdCBoYW5kbGUgbm9uLWFsaWduZWQgYnVmZmVycworICAgICogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB4NTA5cGFyc2VfY3J0KCkgd2hpY2ggd2FzIHJlcG9ydGVkIGJ5IEdyZWcKKyAgICAgIFJvYnNvbi1HYXJ0aDsgc29tZSB4NTA5d3JpdGUuYyBmaXhlcyBieSBQYXNjYWwgVml6ZWxpLCB0aGFua3MgdG8KKyAgICAgIE1hdHRoZXcgUGFnZSB3aG8gcmVwb3J0ZWQgc2V2ZXJhbCBidWdzCisgICAgKiBGaXhlZCB4NTA5X2dldF9leHQoKSB0byBhY2NlcHQgc29tZSByYXJlIGNlcnRpZmljYXRlcyB3aGljaCBoYXZlCisgICAgICBhbiBJTlRFR0VSIGluc3RlYWQgb2YgYSBCT09MRUFOIGZvciBCYXNpY0NvbnN0cmFpbnRzOjpjQS4KKyAgICAqIEFkZGVkIHN1cHBvcnQgb24gdGhlIGNsaWVudCBzaWRlIGZvciB0aGUgVExTICJob3N0bmFtZSIgZXh0ZW5zaW9uCisgICAgICAocGF0Y2ggY29udHJpYnV0ZWQgYnkgRGF2aWQgUGF0aW5vKQorICAgICogTWFrZSB4NTA5cGFyc2VfdmVyaWZ5KCkgcmV0dXJuIEJBRENFUlRfQ05fTUlTTUFUQ0ggd2hlbiBhbiBlbXB0eQorICAgICAgc3RyaW5nIGlzIHBhc3NlZCBhcyB0aGUgQ04gKGJ1ZyByZXBvcnRlZCBieSBzcG9vZnkpCisgICAgKiBBZGRlZCBhbiBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgdGhlIEJOIGFzc2VtYmx5IGNvZGUKKyAgICAqIFVwZGF0ZWQgcnNhX2NoZWNrX3ByaXZrZXkoKSB0byB2ZXJpZnkgdGhhdCAoRCpFKSA9IDEgJSAoUC0xKSooUS0xKQorICAgICogRGlzYWJsZWQgb2Jzb2xldGUgaGFzaCBmdW5jdGlvbnMgYnkgZGVmYXVsdCAoTUQyLCBNRDQpOyB1cGRhdGVkCisgICAgICBzZWxmdGVzdCBhbmQgYmVuY2htYXJrIHRvIG5vdCB0ZXN0IGNpcGhlcnMgdGhhdCBoYXZlIGJlZW4gZGlzYWJsZWQKKyAgICAqIFVwZGF0ZWQgeDUwOXBhcnNlX2NlcnRfaW5mbygpIHRvIGNvcnJlY3RseSBkaXNwbGF5IGJ5dGUgMCBvZiB0aGUKKyAgICAgIHNlcmlhbCBudW1iZXIsIHNldHVwIGNvcnJlY3Qgc2VydmVyIHBvcnQgaW4gdGhlIHNzbCBjbGllbnQgZXhhbXBsZQorICAgICogRml4ZWQgYSBjcml0aWNhbCBkZW5pYWwtb2Ytc2VydmljZSB3aXRoIFguNTA5IGNlcnQuIHZlcmlmaWNhdGlvbjoKKyAgICAgIHBlZXIgbWF5IGNhdXNlIHh5c3NsIHRvIGxvb3AgaW5kZWZpbml0ZWx5IGJ5IHNlbmRpbmcgYSBjZXJ0aWZpY2F0ZQorICAgICAgZm9yIHdoaWNoIHRoZSBSU0Egc2lnbmF0dXJlIGNoZWNrIGZhaWxzIChidWcgcmVwb3J0ZWQgYnkgQmVub2l0KQorICAgICogQWRkZWQgdGVzdCB2ZWN0b3JzIGZvcjogQUVTLUNCQywgQUVTLUNGQiwgREVTLUNCQyBhbmQgM0RFUy1DQkMsCisgICAgICBITUFDLU1ENSwgSE1BQy1TSEExLCBITUFDLVNIQS0yNTYsIEhNQUMtU0hBLTM4NCwgYW5kIEhNQUMtU0hBLTUxMgorICAgICogRml4ZWQgSE1BQy1TSEEtMzg0IGFuZCBITUFDLVNIQS01MTIgKHRoYW5rcyB0byBKb3NoIFNpbnlraW4pCisgICAgKiBNb2RpZmllZCBzc2xfcGFyc2VfY2xpZW50X2tleV9leGNoYW5nZSgpIHRvIHByb3RlY3QgYWdhaW5zdAorICAgICAgRGFuaWVsIEJsZWljaGVuYmFjaGVyIGF0dGFjayBvbiBQS0NTIzEgdjEuNSBwYWRkaW5nLCBhcyB3ZWxsCisgICAgICBhcyB0aGUgS2xpbWEtUG9rb3JueS1Sb3NhIGV4dGVuc2lvbiBvZiBCbGVpY2hlbmJhY2hlcidzIGF0dGFjaworICAgICogVXBkYXRlZCByc2FfZ2VuX2tleSgpIHNvIHRoYXQgY3R4LT5OIGlzIGFsd2F5cyBuYml0cyBpbiBzaXplCisgICAgKiBGaXhlZCBhc3NlbWJseSBQUEMgY29tcGlsYXRpb24gZXJyb3JzIG9uIE1hYyBPUyBYLCB0aGFua3MgdG8KKyAgICAgIERhdmlkIEJhcnJldHQgYW5kIER1c2FuIFNlbWVuCisKKz0gVmVyc2lvbiAwLjggcmVsZWFzZWQgb24gMjAwNy0xMC0yMAorCisgICAgKiBNb2RpZmllZCB0aGUgSE1BQyBmdW5jdGlvbnMgdG8gaGFuZGxlIGtleXMgbGFyZ2VyCisgICAgICB0aGFuIDY0IGJ5dGVzLCB0aGFua3MgdG8gU3RlcGhhbmUgRGVzbmV1eCBhbmQgZ2FyeSBuZworICAgICogRml4ZWQgc3NsX3JlYWRfcmVjb3JkKCkgdG8gcHJvcGVybHkgdXBkYXRlIHRoZSBoYW5kc2hha2UKKyAgICAgIG1lc3NhZ2UgZGlnZXN0cywgd2hpY2ggZml4ZXMgSUU2L0lFNyBjbGllbnQgYXV0aGVudGljYXRpb24KKyAgICAqIENsZWFuZWQgdXAgdGhlIFhZU1NMKiAjZGVmaW5lcywgc3VnZ2VzdGVkIGJ5IEF6cmllbCBGYXN0ZW4KKyAgICAqIEZpeGVkIG5ldF9yZWN2KCksIHRoYW5rcyB0byBMb3JlbnogU2Nob3JpIGFuZCBFZ29uIEtvY2phbgorICAgICogQWRkZWQgdXNlci1kZWZpbmVkIGNhbGxiYWNrcyBmb3IgaGFuZGxpbmcgSS9PIGFuZCBzZXNzaW9ucworICAgICogQWRkZWQgbG90cyBvZiBkZWJ1Z2dpbmcgb3V0cHV0IGluIHRoZSBTU0wvVExTIGZ1bmN0aW9ucworICAgICogQWRkZWQgcHJlbGltaW5hcnkgWC41MDkgY2VydC4gd3JpdGluZyBieSBQYXNjYWwgVml6ZWxpCisgICAgKiBBZGRlZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciB0aGUgVklBIFBhZExvY2sgcm91dGluZXMKKyAgICAqIEFkZGVkIEFFUy1DRkIgbW9kZSBvZiBvcGVyYXRpb24sIGNvbnRyaWJ1dGVkIGJ5IGNobWlrZQorICAgICogQWRkZWQgYW4gU1NML1RMUyBzdHJlc3MgdGVzdGluZyBwcm9ncmFtIChzc2xfdGVzdC5jKQorICAgICogVXBkYXRlZCB0aGUgUlNBIFBLQ1MjMSBjb2RlIHRvIGFsbG93IGNob29zaW5nIGJldHdlZW4KKyAgICAgIFJTQV9QVUJMSUMgYW5kIFJTQV9QUklWQVRFLCBhcyBzdWdnZXN0ZWQgYnkgRGF2aWQgQmFycmV0dAorICAgICogVXBkYXRlZCBzc2xfcmVhZCgpIHRvIHNraXAgMC1sZW5ndGggcmVjb3JkcyBmcm9tIE9wZW5TU0wKKyAgICAqIEZpeGVkIHRoZSBtYWtlIGluc3RhbGwgdGFyZ2V0IHRvIGNvbXBseSB3aXRoICpCU0QgbWFrZQorICAgICogRml4ZWQgYSBidWcgaW4gbXBpX3JlYWRfYmluYXJ5KCkgb24gNjQtYml0IHBsYXRmb3JtcworICAgICogbXBpX2lzX3ByaW1lKCkgc3BlZWR1cHMsIHRoYW5rcyB0byBLZXZpbiBNY0xhdWdobGluCisgICAgKiBGaXhlZCBhIGxvbmcgc3RhbmRpbmcgbWVtb3J5IGxlYWsgaW4gbXBpX2lzX3ByaW1lKCkKKyAgICAqIFJlcGxhY2VkIHJlYWxsb2Mgd2l0aCBtYWxsb2MgaW4gbXBpX2dyb3coKSwgYW5kIHNldAorICAgICAgdGhlIHNpZ24gb2YgemVybyBhcyBwb3NpdGl2ZSBpbiBtcGlfaW5pdCgpIChyZXBvcnRlZAorICAgICAgYnkgSm9uYXRoYW4gTS4gTWNDdW5lKQorCis9IFZlcnNpb24gMC43IHJlbGVhc2VkIG9uIDIwMDctMDctMDcKKworICAgICogQWRkZWQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvQmxhemUgc29mdC1jb3JlIHByb2Nlc3NvcgorICAgICogRml4ZWQgYSBidWcgaW4gc3NsX3Rscy5jIHdoaWNoIHNvbWV0aW1lcyBwcmV2ZW50ZWQgU1NMCisgICAgICBjb25uZWN0aW9ucyBmcm9tIGJlaW5nIGVzdGFibGlzaGVkIHdpdGggbm9uLWJsb2NraW5nIEkvTworICAgICogRml4ZWQgYSBjb3VwbGUgYnVncyBpbiB0aGUgVlM2IGFuZCBVTklYIE1ha2VmaWxlcworICAgICogRml4ZWQgdGhlICJQSUMgcmVnaXN0ZXIgZWJ4IGNsb2JiZXJlZCBpbiBhc20iIGJ1ZworICAgICogQWRkZWQgSE1BQyBzdGFydHMvdXBkYXRlL2ZpbmlzaCBzdXBwb3J0IGZ1bmN0aW9ucworICAgICogQWRkZWQgdGhlIFNIQS0yMjQsIFNIQS0zODQgYW5kIFNIQS01MTIgaGFzaCBmdW5jdGlvbnMKKyAgICAqIEZpeGVkIHRoZSBuZXRfc2V0XypibG9jayByb3V0aW5lcywgdGhhbmtzIHRvIEFuZHJlYXMKKyAgICAqIEFkZGVkIGEgZmV3IGRlbW9uc3RyYXRpb24gcHJvZ3JhbXM6IG1kNXN1bSwgc2hhMXN1bSwKKyAgICAgIGRoX2NsaWVudCwgZGhfc2VydmVyLCByc2FfZ2Vua2V5LCByc2Ffc2lnbiwgcnNhX3ZlcmlmeQorICAgICogQWRkZWQgbmV3IGJpZ251bSBpbXBvcnQgYW5kIGV4cG9ydCBoZWxwZXIgZnVuY3Rpb25zCisgICAgKiBSZXdyb3RlIFJFQURNRS50eHQgaW4gcHJvZ3JhbS9zc2wvY2EgdG8gYmV0dGVyIGV4cGxhaW4KKyAgICAgIGhvdyB0byBjcmVhdGUgYSB0ZXN0IFBLSQorCis9IFZlcnNpb24gMC42IHJlbGVhc2VkIG9uIDIwMDctMDQtMDEKKworICAgICogQ2lwaGVycyB1c2VkIGluIFNTTC9UTFMgY2FuIG5vdyBiZSBkaXNhYmxlZCBhdCBjb21waWxlCisgICAgICB0aW1lLCB0byByZWR1Y2UgdGhlIG1lbW9yeSBmb290cHJpbnQgb24gZW1iZWRkZWQgc3lzdGVtcworICAgICogQWRkZWQgbXVsdGlwbHkgYXNzZW1ibHkgY29kZSBmb3IgdGhlIFRyaUNvcmUgYW5kIG1vZGlmaWVkCisgICAgICBoYXZlZ2Vfc3RydWN0IGZvciB0aGlzIHByb2Nlc3NvciwgdGhhbmtzIHRvIERhdmlkIFBhdGnDsW8KKyAgICAqIEFkZGVkIG11bHRpcGx5IGFzc2VtYmx5IGNvZGUgZm9yIDY0LWJpdCBQb3dlclBDcywKKyAgICAgIHRoYW5rcyB0byBQZWtpbmcgVW5pdmVyc2l0eSBhbmQgdGhlIE9TVSBPcGVuIFNvdXJjZSBMYWIKKyAgICAqIEFkZGVkIGV4cGVyaW1lbnRhbCBzdXBwb3J0IG9mIFF1YW50dW0gQ3J5cHRvZ3JhcGh5CisgICAgKiBBZGRlZCBzdXBwb3J0IGZvciBhdXRvY29uZiwgY29udHJpYnV0ZWQgYnkgQXJuYXVkIENvcm5ldAorICAgICogRml4ZWQgImxvbmcgbG9uZyIgY29tcGlsYXRpb24gaXNzdWVzIG9uIElBLTY0IGFuZCBQUEM2NAorICAgICogRml4ZWQgYSBidWcgaW50cm9kdWNlZCBpbiB4eXNzbC0wLjUvdGltaW5nLmM6IGhhcmRjbG9jaworICAgICAgd2FzIG5vdCBiZWluZyBjb3JyZWN0bHkgZGVmaW5lZCBvbiBBUk0gYW5kIE1JUFMKKworPSBWZXJzaW9uIDAuNSByZWxlYXNlZCBvbiAyMDA3LTAzLTAxCisKKyAgICAqIEFkZGVkIG11bHRpcGx5IGFzc2VtYmx5IGNvZGUgZm9yIFNQQVJDIGFuZCBBbHBoYQorICAgICogQWRkZWQgKGJldGEpIHN1cHBvcnQgZm9yIG5vbi1ibG9ja2luZyBJL08gb3BlcmF0aW9ucworICAgICogSW1wbGVtZW50ZWQgc2Vzc2lvbiByZXN1bWluZyBhbmQgY2xpZW50IGF1dGhlbnRpY2F0aW9uCisgICAgKiBGaXhlZCBzb21lIHBvcnRhYmlsaXR5IGlzc3VlcyBvbiBXaW5DRSwgTUlOSVggMywgUGxhbjkKKyAgICAgICh0aGFua3MgdG8gQmVuamFtaW4gTmV3bWFuKSwgSFAtVVgsIEZyZWVCU0QgYW5kIFNvbGFyaXMKKyAgICAqIEltcHJvdmVkIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgRURIIGtleSBleGNoYW5nZQorICAgICogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgdmFsaWQgcGFja2V0cyB3aXRoIGEgcGF5bG9hZAorICAgICAgc2l6ZSBvZiAxNjM4NCBieXRlcyB0byBiZSByZWplY3RlZAorCis9IFZlcnNpb24gMC40IHJlbGVhc2VkIG9uIDIwMDctMDItMDEKKworICAgICogQWRkZWQgc3VwcG9ydCBmb3IgRXBoZW1lcmFsIERpZmZpZS1IZWxsbWFuIGtleSBleGNoYW5nZQorICAgICogQWRkZWQgbXVsdGlwbHkgYXNtIGNvZGUgZm9yIFNTRTIsIEFSTSwgUFBDLCBNSVBTIGFuZCBNNjhLCisgICAgKiBWYXJpb3VzIGltcHJvdmVtZW50IHRvIHRoZSBtb2R1bGFyIGV4cG9uZW50aWF0aW9uIGNvZGUKKyAgICAqIFJld3JvdGUgdGhlIGhlYWRlcnMgdG8gZ2VuZXJhdGUgdGhlIEFQSSBkb2NzIHdpdGggZG94eWdlbgorICAgICogRml4ZWQgYSBidWcgaW4gc3NsX2VuY3J5cHRfYnVmIChpbmNvcnJlY3QgcGFkZGluZyB3YXMKKyAgICAgIGdlbmVyYXRlZCkgYW5kIGluIHNzbF9wYXJzZV9jbGllbnRfaGVsbG8gKG1heC4gY2xpZW50CisgICAgICB2ZXJzaW9uIHdhcyBub3QgcHJvcGVybHkgc2V0KSwgdGhhbmtzIHRvIERpZGllciBSZWJlaXgKKyAgICAqIEZpeGVkIGFub3RoZXIgYnVnIGluIHNzbF9wYXJzZV9jbGllbnRfaGVsbG86IGNsaWVudHMgd2l0aAorICAgICAgY2lwaGVybGlzdHMgbGFyZ2VyIHRoYW4gOTYgYnl0ZXMgd2VyZSBpbmNvcnJlY3RseSByZWplY3RlZAorICAgICogRml4ZWQgYSBjb3VwbGUgbWVtb3J5IGxlYWsgaW4geDUwOV9yZWFkLmMKKworPSBWZXJzaW9uIDAuMyByZWxlYXNlZCBvbiAyMDA3LTAxLTAxCisKKyAgICAqIEFkZGVkIHNlcnZlci1zaWRlIFNTTHYzIGFuZCBUTFN2MS4wIHN1cHBvcnQKKyAgICAqIE11bHRpcGxlIGZpeGVzIHRvIGVuaGFuY2UgdGhlIGNvbXBhdGliaWxpdHkgd2l0aCBnKyssCisgICAgICB0aGFua3MgdG8gWG9zw6kgQW50w7NuIE90ZXJvIEZlcnJlaXJhCisgICAgKiBGaXhlZCBhIGJ1ZyBpbiB0aGUgQ0JDIGNvZGUsIHRoYW5rcyB0byBkb3dzdDsgYWxzbywKKyAgICAgIHRoZSBiaWdudW0gY29kZSBpcyBubyBsb25nZXIgZGVwZW5kZW50IG9uIGxvbmcgbG9uZworICAgICogVXBkYXRlZCByc2FfcGtjczFfc2lnbiB0byBoYW5kbGUgYXJiaXRyYXJ5IGxhcmdlIGlucHV0cworICAgICogVXBkYXRlZCB0aW1pbmcuYyBmb3IgaW1wcm92ZWQgY29tcGF0aWJpbGl0eSB3aXRoIGkzODYKKyAgICAgIGFuZCA0ODYgcHJvY2Vzc29ycywgdGhhbmtzIHRvIEFybmF1ZCBDb3JuZXQKKworPSBWZXJzaW9uIDAuMiByZWxlYXNlZCBvbiAyMDA2LTEyLTAxCisKKyAgICAqIFVwZGF0ZWQgdGltaW5nLmMgdG8gc3VwcG9ydCBBUk0gYW5kIE1JUFMgYXJjaAorICAgICogVXBkYXRlZCB0aGUgTVBJIGNvZGUgdG8gc3VwcG9ydCA4MDg2IG9uIE1TVkMgMS41CisgICAgKiBBZGRlZCB0aGUgY29weXJpZ2h0IG5vdGljZSBhdCB0aGUgdG9wIG9mIGhhdmVnZS5oCisgICAgKiBGaXhlZCBhIGJ1ZyBpbiBzaGEyX2htYWMsIHRoYW5rcyB0byBuZXdzb2Z0L1dlbmZhbmcgWmhhbmcKKyAgICAqIEZpeGVkIGEgYnVnIHJlcG9ydGVkIGJ5IEFkcmlhbiBSw7xlZ3NlZ2dlciBpbiB4NTA5X3JlYWRfa2V5CisgICAgKiBGaXhlZCBhIGJ1ZyByZXBvcnRlZCBieSBUb3JzdGVuIExhdXRlciBpbiBzc2xfcmVhZF9yZWNvcmQKKyAgICAqIEZpeGVkIGEgYnVnIGluIHJzYV9jaGVja19wcml2a2V5IHRoYXQgd291bGQgd3JvbmdseSBjYXVzZQorICAgICAgdmFsaWQgUlNBIGtleXMgdG8gYmUgZGlzbWlzc2VkICh0aGFua3MgdG8gb2xkd29sZikKKyAgICAqIEZpeGVkIGEgYnVnIGluIG1waV9pc19wcmltZSB0aGF0IGNhdXNlZCBzb21lIHByaW1lcyB0byBmYWlsCisgICAgICB0aGUgTWlsbGVyLVJhYmluIHByaW1hbGl0eSB0ZXN0CisKKyAgICBJJ2QgYWxzbyBsaWtlIHRvIHRoYW5rIFlvdW7DqHMgSGFmcmkgZm9yIHRoZSBDUlVYIGxpbnV4IHBvcnQsCisgICAgS2hhbGlsIFBldGl0IHdobyBhZGRlZCBYeVNTTCBpbnRvIHBrZ3NyYyBhbmQgQXJuYXVkIENvcm5ldAorICAgIHdobyBtYWludGFpbnMgdGhlIERlYmlhbiBwYWNrYWdlIDotKQorCis9IFZlcnNpb24gMC4xIHJlbGVhc2VkIG9uIDIwMDYtMTEtMDEKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL0RhcnRDb25maWd1cmF0aW9uLnRjbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9EYXJ0Q29uZmlndXJhdGlvbi50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhMGYwNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9EYXJ0Q29uZmlndXJhdGlvbi50Y2wKQEAgLTAsMCArMSw0IEBACitTaXRlOiBsb2NhbGhvc3QKK0J1aWxkTmFtZTogbWJlZCBUTFMtdGVzdAorQ292ZXJhZ2VDb21tYW5kOiAvdXNyL2Jpbi9nY292CitNZW1vcnlDaGVja0NvbW1hbmQ6IC91c3IvYmluL3ZhbGdyaW5kCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vTElDRU5TRSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NmE4ZTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vTElDRU5TRQpAQCAtMCwwICsxLDIgQEAKK1VubGVzcyBzcGVjaWZpY2FsbHkgaW5kaWNhdGVkIG90aGVyd2lzZSBpbiBhIGZpbGUsIGZpbGVzIGFyZSBsaWNlbnNlZAordW5kZXIgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSwgYXMgY2FuIGJlIGZvdW5kIGluOiBhcGFjaGUtMi4wLnR4dApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL01ha2VmaWxlIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NzU4NjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vTWFrZWZpbGUKQEAgLTAsMCArMSwxMTAgQEAKKworREVTVERJUj0vdXNyL2xvY2FsCitQUkVGSVg9bWJlZHRsc18KKworLlNJTEVOVDoKKworLlBIT05ZOiBhbGwgbm9fdGVzdCBwcm9ncmFtcyBsaWIgdGVzdHMgaW5zdGFsbCB1bmluc3RhbGwgY2xlYW4gdGVzdCBjaGVjayBjb3Z0ZXN0IGxjb3YgYXBpZG9jIGFwaWRvY19jbGVhbgorCithbGw6IHByb2dyYW1zIHRlc3RzCisJJChNQUtFKSBwb3N0X2J1aWxkCisKK25vX3Rlc3Q6IHByb2dyYW1zCisKK3Byb2dyYW1zOiBsaWIKKwkkKE1BS0UpIC1DIHByb2dyYW1zCisKK2xpYjoKKwkkKE1BS0UpIC1DIGxpYnJhcnkKKwordGVzdHM6IGxpYgorCSQoTUFLRSkgLUMgdGVzdHMKKworaWZuZGVmIFdJTkRPV1MKK2luc3RhbGw6IG5vX3Rlc3QKKwlta2RpciAtcCAkKERFU1RESVIpL2luY2x1ZGUvbWJlZHRscworCWNwIC1yIGluY2x1ZGUvbWJlZHRscyAkKERFU1RESVIpL2luY2x1ZGUKKwkKKwlta2RpciAtcCAkKERFU1RESVIpL2xpYgorCWNwIC1SUCBsaWJyYXJ5L2xpYm1iZWR0bHMuKiAgICAkKERFU1RESVIpL2xpYgorCWNwIC1SUCBsaWJyYXJ5L2xpYm1iZWR4NTA5LiogICAkKERFU1RESVIpL2xpYgorCWNwIC1SUCBsaWJyYXJ5L2xpYm1iZWRjcnlwdG8uKiAkKERFU1RESVIpL2xpYgorCQorCW1rZGlyIC1wICQoREVTVERJUikvYmluCisJZm9yIHAgaW4gcHJvZ3JhbXMvKi8qIDsgZG8gICAgICAgICAgICAgIFwKKwkgICAgaWYgWyAteCAkJHAgXSAmJiBbICEgLWQgJCRwIF0gOyAgICAgXAorCSAgICB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICBmPSQoUFJFRklYKWBiYXNlbmFtZSAkJHBgIDsgICAgIFwKKwkgICAgICAgIGNwICQkcCAkKERFU1RESVIpL2Jpbi8kJGYgOyAgICAgXAorCSAgICBmaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG9uZQorCit1bmluc3RhbGw6CisJcm0gLXJmICQoREVTVERJUikvaW5jbHVkZS9tYmVkdGxzCisJcm0gLWYgJChERVNURElSKS9saWIvbGlibWJlZHRscy4qCisJcm0gLWYgJChERVNURElSKS9saWIvbGlibWJlZHg1MDkuKgorCXJtIC1mICQoREVTVERJUikvbGliL2xpYm1iZWRjcnlwdG8uKgorCQorCWZvciBwIGluIHByb2dyYW1zLyovKiA7IGRvICAgICAgICAgICAgICBcCisJICAgIGlmIFsgLXggJCRwIF0gJiYgWyAhIC1kICQkcCBdIDsgICAgIFwKKwkgICAgdGhlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgZj0kKFBSRUZJWClgYmFzZW5hbWUgJCRwYCA7ICAgICBcCisJICAgICAgICBybSAtZiAkKERFU1RESVIpL2Jpbi8kJGYgOyAgICAgIFwKKwkgICAgZmkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRvbmUKK2VuZGlmCisKK1dBUk5JTkdfQk9SREVSICAgICAgPSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbgorTlVMTF9FTlRST1BZX1dBUk5fTDE9KioqKiAgV0FSTklORyEgIE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgZGVmaW5lZCEgKioqKlxuCitOVUxMX0VOVFJPUFlfV0FSTl9MMj0qKioqICBUSElTIEJVSUxEIEhBUyBOTyBERUZJTkVEIEVOVFJPUFkgU09VUkNFUyAgICAqKioqXG4KK05VTExfRU5UUk9QWV9XQVJOX0wzPSoqKiogIEFORCBJUyAqTk9UKiBTVUlUQUJMRSBGT1IgUFJPRFVDVElPTiBVU0UgICAgICoqKipcbgorCitOVUxMX0VOVFJPUFlfV0FSTklORz1cbiQoV0FSTklOR19CT1JERVIpJChOVUxMX0VOVFJPUFlfV0FSTl9MMSkkKE5VTExfRU5UUk9QWV9XQVJOX0wyKSQoTlVMTF9FTlRST1BZX1dBUk5fTDMpJChXQVJOSU5HX0JPUkRFUikKKworIyBQb3N0IGJ1aWxkIHN0ZXBzCitwb3N0X2J1aWxkOgoraWZuZGVmIFdJTkRPV1MKKwkjIElmIE5VTEwgRW50cm9weSBpcyBjb25maWd1cmVkLCBkaXNwbGF5IGFuIGFwcHJvcHJpYXRlIHdhcm5pbmcKKwktc2NyaXB0cy9jb25maWcucGwgZ2V0IE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgJiYgKFsgJCQ/IC1lcSAwIF0pICYmIFwKKwkgICAgZWNobyAnJChOVUxMX0VOVFJPUFlfV0FSTklORyknCitlbmRpZgorCitjbGVhbjoKKwkkKE1BS0UpIC1DIGxpYnJhcnkgY2xlYW4KKwkkKE1BS0UpIC1DIHByb2dyYW1zIGNsZWFuCisJJChNQUtFKSAtQyB0ZXN0cyBjbGVhbgoraWZuZGVmIFdJTkRPV1MKKwlmaW5kIC4gXCggLW5hbWUgXCouZ2NubyAtbyAtbmFtZSBcKi5nY2RhIC1vIC1uYW1lIFwqLmluZm8gXCkgLWV4ZWMgcm0ge30gKworZW5kaWYKKworY2hlY2s6IGxpYiB0ZXN0cworCSQoTUFLRSkgLUMgdGVzdHMgY2hlY2sKKwordGVzdDogY2hlY2sKKworaWZuZGVmIFdJTkRPV1MKKyMgbm90ZTogZm9yIGNvdmVyYWdlIHRlc3RpbmcsIGJ1aWxkIHdpdGg6CisjIG1ha2UgQ0ZMQUdTPSctLWNvdmVyYWdlIC1nMyAtTzAnCitjb3Z0ZXN0OgorCSQoTUFLRSkgY2hlY2sKKwlwcm9ncmFtcy90ZXN0L3NlbGZ0ZXN0CisJdGVzdHMvY29tcGF0LnNoCisJdGVzdHMvc3NsLW9wdC5zaAorCitsY292OgorCXJtIC1yZiBDb3ZlcmFnZQorCWxjb3YgLS1jYXB0dXJlIC0taW5pdGlhbCAtLWRpcmVjdG9yeSBsaWJyYXJ5IC1vIGZpbGVzLmluZm8KKwlsY292IC0tY2FwdHVyZSAtLWRpcmVjdG9yeSBsaWJyYXJ5IC1vIHRlc3RzLmluZm8KKwlsY292IC0tYWRkLXRyYWNlZmlsZSBmaWxlcy5pbmZvIC0tYWRkLXRyYWNlZmlsZSB0ZXN0cy5pbmZvIC1vIGFsbC5pbmZvCisJbGNvdiAtLXJlbW92ZSBhbGwuaW5mbyAtbyBmaW5hbC5pbmZvICcqLmgnCisJZ2VuZGVzYyB0ZXN0cy9EZXNjcmlwdGlvbnMudHh0IC1vIGRlc2NyaXB0aW9ucworCWdlbmh0bWwgLS10aXRsZSAibWJlZCBUTFMiIC0tZGVzY3JpcHRpb24tZmlsZSBkZXNjcmlwdGlvbnMgLS1rZWVwLWRlc2NyaXB0aW9ucyAtLWxlZ2VuZCAtLW5vLWJyYW5jaC1jb3ZlcmFnZSAtbyBDb3ZlcmFnZSBmaW5hbC5pbmZvCisJcm0gLWYgZmlsZXMuaW5mbyB0ZXN0cy5pbmZvIGFsbC5pbmZvIGZpbmFsLmluZm8gZGVzY3JpcHRpb25zCisKK2FwaWRvYzoKKwlta2RpciAtcCBhcGlkb2MKKwlkb3h5Z2VuIGRveHlnZW4vbWJlZHRscy5kb3h5ZmlsZQorCithcGlkb2NfY2xlYW46CisJcm0gLXJmIGFwaWRvYworZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9SRUFETUUubWQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYWU0N2QKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTc2IEBACitSRUFETUUgZm9yIG1iZWQgVExTCis9PT09PT09PT09PT09PT09PT09CisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworbWJlZCBUTFMgc2hvdWxkIGJ1aWxkIG91dCBvZiB0aGUgYm94IG9uIG1vc3Qgc3lzdGVtcy4gU29tZSBwbGF0Zm9ybSBzcGVjaWZpYyBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIGZ1bGx5IGRvY3VtZW50ZWQgY29uZmlndXJhdGlvbiBmaWxlIGBpbmNsdWRlL21iZWR0bHMvY29uZmlnLmhgLCB3aGljaCBpcyBhbHNvIHRoZSBwbGFjZSB3aGVyZSBmZWF0dXJlcyBjYW4gYmUgc2VsZWN0ZWQuIFRoaXMgZmlsZSBjYW4gYmUgZWRpdGVkIG1hbnVhbGx5LCBvciBpbiBhIG1vcmUgcHJvZ3JhbW1hdGljIHdheSB1c2luZyB0aGUgUGVybCBzY3JpcHQgYHNjcmlwdHMvY29uZmlnLnBsYCAodXNlIGAtLWhlbHBgIGZvciB1c2FnZSBpbnN0cnVjdGlvbnMpLgorCitDb21waWxlciBvcHRpb25zIGNhbiBiZSBzZXQgdXNpbmcgY29udmVudGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzIGBDQ2AgYW5kIGBDRkxBR1NgIHdoZW4gdXNpbmcgdGhlIE1ha2UgYW5kIENNYWtlIGJ1aWxkIHN5c3RlbSAoc2VlIGJlbG93KS4KKworQ29tcGlsaW5nCistLS0tLS0tLS0KKworVGhlcmUgYXJlIGN1cnJlbnRseSBmb3VyIGFjdGl2ZSBidWlsZCBzeXN0ZW1zIHVzZWQgd2l0aGluIG1iZWQgVExTIHJlbGVhc2VzOgorCistICAgeW90dGEKKy0gICBNYWtlCistICAgQ01ha2UKKy0gICBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAoVmlzdWFsIFN0dWRpbyA2IGFuZCBWaXN1YWwgU3R1ZGlvIDIwMTApCisKK1RoZSBtYWluIHN5c3RlbXMgdXNlZCBmb3IgZGV2ZWxvcG1lbnQgYXJlIENNYWtlIGFuZCBNYWtlLiBUaG9zZSBzeXN0ZW1zIGFyZSBhbHdheXMgY29tcGxldGUgYW5kIHVwLXRvLWRhdGUuIFRoZSBvdGhlcnMgc2hvdWxkIHJlZmxlY3QgYWxsIGNoYW5nZXMgcHJlc2VudCBpbiB0aGUgQ01ha2UgYW5kIE1ha2UgYnVpbGQgc3lzdGVtLCBhbHRob3VnaCBmZWF0dXJlcyBtYXkgbm90IGJlIHBvcnRlZCB0aGVyZSBhdXRvbWF0aWNhbGx5LgorCitZb3R0YSwgYXMgYSBidWlsZCBzeXN0ZW0sIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoZSBvdGhlciBidWlsZCBzeXN0ZW1zOgorCistICAgaXQgcHJvdmlkZXMgYSBtaW5pbWFsaXN0aWMgY29uZmlndXJhdGlvbiBmaWxlIGJ5IGRlZmF1bHQKKy0gICBkZXBlbmRpbmcgb24gdGhlIHlvdHRhIHRhcmdldCwgZmVhdHVyZXMgb2YgbWJlZCBPUyBtYXkgYmUgdXNlZCBpbiBleGFtcGxlcyBhbmQgdGVzdHMKKworVGhlIE1ha2UgYW5kIENNYWtlIGJ1aWxkIHN5c3RlbXMgY3JlYXRlIHRocmVlIGxpYnJhcmllczogbGlibWJlZGNyeXB0bywgbGlibWJlZHg1MDksIGFuZCBsaWJtYmVkdGxzLiBOb3RlIHRoYXQgbGlibWJlZHRscyBkZXBlbmRzIG9uIGxpYm1iZWR4NTA5IGFuZCBsaWJtYmVkY3J5cHRvLCBhbmQgbGlibWJlZHg1MDkgZGVwZW5kcyBvbiBsaWJtYmVkY3J5cHRvLiBBcyBhIHJlc3VsdCwgc29tZSBsaW5rZXJzIHdpbGwgZXhwZWN0IGZsYWdzIHRvIGJlIGluIGEgc3BlY2lmaWMgb3JkZXIsIGZvciBleGFtcGxlIHRoZSBHTlUgbGlua2VyIHdhbnRzIGAtbG1iZWR0bHMgLWxtYmVkeDUwOSAtbG1iZWRjcnlwdG9gLiBBbHNvLCB3aGVuIGxvYWRpbmcgc2hhcmVkIGxpYnJhcmllcyB1c2luZyBkbG9wZW4oKSwgeW91J2xsIG5lZWQgdG8gbG9hZCBsaWJtYmVkY3J5cHRvIGZpcnN0LCB0aGVuIGxpYm1iZWR4NTA5LCBiZWZvcmUgeW91IGNhbiBsb2FkIGxpYm1iZWR0bHMuCisKKyMjIyBZb3R0YQorCitbeW90dGFdKGh0dHA6Ly95b3R0YWJ1aWxkLm9yZykgaXMgYSBwYWNrYWdlIG1hbmFnZXIgYW5kIGJ1aWxkIHN5c3RlbSBkZXZlbG9wZWQgYnkgbWJlZCwgYW5kIGlzIHRoZSBidWlsZCBzeXN0ZW0gb2YgbWJlZCBPUyAxNi4wMy4gVG8gaW5zdGFsbCBpdCBvbiB5b3VyIHBsYXRmb3JtLCBwbGVhc2UgZm9sbG93IHRoZSB5b3R0YSBbaW5zdGFsbGF0aW9uIGluc3RydWN0aW9uc10oaHR0cDovL2RvY3MueW90dGFidWlsZC5vcmcvI2luc3RhbGxpbmcpLgorCitPbmNlIHlvdHRhIGlzIGluc3RhbGxlZCwgeW91IGNhbiB1c2UgaXQgdG8gZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIG1iZWQgVExTIGZyb20gdGhlIHlvdHRhIHJlZ2lzdHJ5IHdpdGg6CisKKyAgICB5b3R0YSBpbnN0YWxsIG1iZWR0bHMKKworYW5kIGJ1aWxkIGl0IHdpdGg6CisKKyAgICB5b3R0YSBidWlsZAorCitJZiwgb24gdGhlIG90aGVyIGhhbmQsIHlvdSBhbHJlYWR5IGhhdmUgYSBjb3B5IG9mIG1iZWQgVExTIGZyb20gYSBzb3VyY2Ugb3RoZXIgdGhhbiB0aGUgeW90dGEgcmVnaXN0cnksIGZvciBleGFtcGxlIGZyb20gY2xvbmluZyBvdXIgR2l0SHViIHJlcG9zaXRvcnksIG9yIGZyb20gZG93bmxvYWRpbmcgYSB0YXJiYWxsIG9mIHRoZSBzdGFuZGFsb25lIGVkaXRpb24sIHRoZW4geW91J2xsIGZpcnN0IG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHlvdHRhIG1vZHVsZSBieSBydW5uaW5nOgorCisgICAgeW90dGEvY3JlYXRlLW1vZHVsZS5zaAorCitUaGlzIHNob3VsZCBiZSBleGVjdXRlZCBmcm9tIHRoZSByb290IG1iZWQgVExTIHByb2plY3QgZGlyZWN0b3J5LiBUaGlzIHdpbGwgY3JlYXRlIHRoZSB5b3R0YSBtb2R1bGUgaW4gdGhlIGB5b3R0YS9tb2R1bGVgIGRpcmVjdG9yeSB3aXRoaW4gaXQuIFlvdSBjYW4gdGhlbiBjaGFuZ2UgdG8gdGhhdCBkaXJlY3RvcnkgYW5kIGJ1aWxkIGFzIHVzdWFsOgorCisgICAgY2QgeW90dGEvbW9kdWxlCisgICAgeW90dGEgYnVpbGQKKworSW4gYW55IGNhc2UsIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHNldCB0aGUgeW90dGEgdGFyZ2V0IGJlZm9yZSBidWlsZGluZyB1bmxlc3MgaXQgaGFzIGFscmVhZHkgYmVlbiBzZXQgZ2xvYmFsbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHlvdHRhLCBwbGVhc2UgY29uc3VsdCB0aGUgW3lvdHRhIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnlvdHRhYnVpbGQub3JnLykuCisKK0ZvciBtb3JlIGRldGFpbHMgb24gdGhlIHlvdHRhL21iZWQgT1MgZWRpdGlvbiBvZiBtYmVkIFRMUywgaW5jbHVkaW5nIGV4YW1wbGUgcHJvZ3JhbXMsIHBsZWFzZSBjb25zdWx0IHRoZSBbUmVhZG1lIGF0IHRoZSByb290IG9mIHRoZSB5b3R0YSBtb2R1bGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWR0bHMvYmxvYi9kZXZlbG9wbWVudC95b3R0YS9kYXRhL1JFQURNRS5tZCkuCisKKyMjIyBNYWtlCisKK1dlIGludGVudGlvbmFsbHkgb25seSB1c2UgdGhlIG1pbmltdW0gb2YgYE1ha2VgIGZ1bmN0aW9uYWxpdHksIGFzIGEgbG90IG9mIGBNYWtlYCBmZWF0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBvbiBhbGwgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZiBNYWtlIG9yIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuIEFzIHN1Y2gsIHRoZSBNYWtlZmlsZXMgc29tZXRpbWVzIHJlcXVpcmUgc29tZSBtYW51YWwgY2hhbmdlcyBvciBleHBvcnQgc3RhdGVtZW50cyBpbiBvcmRlciB0byB3b3JrIGZvciB5b3VyIHBsYXRmb3JtLgorCitJbiBvcmRlciB0byBidWlsZCBmcm9tIHRoZSBzb3VyY2UgY29kZSB1c2luZyBNYWtlLCBqdXN0IGVudGVyIGF0IHRoZSBjb21tYW5kIGxpbmU6CisKKyAgICBtYWtlCisKK0luIG9yZGVyIHRvIHJ1biB0aGUgdGVzdHMsIGVudGVyOgorCisgICAgbWFrZSBjaGVjaworCitUaGUgdGVzdHMgbmVlZCBQZXJsIHRvIGJlIGJ1aWx0IGFuZCBydW4uIElmIHlvdSBkb24ndCBoYXZlIFBlcmwgaW5zdGFsbGVkLCB5b3UgY2FuIHNraXAgYnVpbGRpbmcgdGhlIHRlc3RzIHdpdGg6CisKKyAgICBtYWtlIG5vX3Rlc3QKKworWW91J2xsIHN0aWxsIGJlIGFibGUgdG8gcnVuIGEgbXVjaCBzbWFsbGVyIHNldCBvZiB0ZXN0cyB3aXRoOgorCisgICAgcHJvZ3JhbXMvdGVzdC9zZWxmdGVzdAorCitJbiBvcmRlciB0byBidWlsZCBmb3IgYSBXaW5kb3dzIHBsYXRmb3JtLCB5b3Ugc2hvdWxkIHVzZSBgV0lORE9XU19CVUlMRD0xYCBpZiB0aGUgdGFyZ2V0IGlzIFdpbmRvd3MgYnV0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBVbml4LWxpa2UgKGZvciBpbnN0YW5jZSB3aGVuIGNyb3NzLWNvbXBpbGluZywgb3IgY29tcGlsaW5nIGZyb20gYW4gTVNZUyBzaGVsbCksIGFuZCBgV0lORE9XUz0xYCBpZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgYSBXaW5kb3dzIHNoZWxsIChmb3IgaW5zdGFuY2UgdXNpbmcgbWluZ3czMi1tYWtlKSAoaW4gdGhhdCBjYXNlIHNvbWUgdGFyZ2V0cyB3aWxsIG5vdCBiZSBhdmFpbGFibGUpLgorCitTZXR0aW5nIHRoZSB2YXJpYWJsZSBgU0hBUkVEYCBpbiB5b3VyIGVudmlyb25tZW50IHdpbGwgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBpbiBhZGRpdGlvbiB0byB0aGUgc3RhdGljIGxpYnJhcmllcy4gU2V0dGluZyBgREVCVUdgIGdpdmVzIHlvdSBhIGRlYnVnIGJ1aWxkLiBZb3UgY2FuIG92ZXJyaWRlIGBDRkxBR1NgIGFuZCBgTERGTEFHU2AgYnkgc2V0dGluZyB0aGVtIGluIHlvdXIgZW52aXJvbm1lbnQgb3Igb24gdGhlIG1ha2UgY29tbWFuZCBsaW5lOyBpZiB5b3UgZG8gc28sIGVzc2VudGlhbCBwYXJ0cyBzdWNoIGFzIGAtSWAgd2lsbCBzdGlsbCBiZSBwcmVzZXJ2ZWQuIFdhcm5pbmcgb3B0aW9ucyBtYXkgYmUgb3ZlcnJpZGRlbiBzZXBhcmF0ZWx5IHVzaW5nIGBXQVJOSU5HX0NGTEFHU2AuCisKK0RlcGVuZGluZyBvbiB5b3VyIHBsYXRmb3JtLCB5b3UgbWlnaHQgcnVuIGludG8gc29tZSBpc3N1ZXMuIFBsZWFzZSBjaGVjayB0aGUgTWFrZWZpbGVzIGluIGBsaWJyYXJ5L2AsIGBwcm9ncmFtcy9gIGFuZCBgdGVzdHMvYCBmb3Igb3B0aW9ucyB0byBtYW51YWxseSBhZGQgb3IgcmVtb3ZlIGZvciBzcGVjaWZpYyBwbGF0Zm9ybXMuIFlvdSBjYW4gYWxzbyBjaGVjayBbdGhlIG1iZWQgVExTIEtub3dsZWRnZSBCYXNlXShodHRwczovL3Rscy5tYmVkLm9yZy9rYikgZm9yIGFydGljbGVzIG9uIHlvdXIgcGxhdGZvcm0gb3IgaXNzdWUuCisKK0luIGNhc2UgeW91IGZpbmQgdGhhdCB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgZWxzZSBhcyB3ZWxsLCBwbGVhc2UgbGV0IHVzIGtub3cgd2hhdCwgc28gd2UgY2FuIGFkZCBpdCB0byB0aGUgW21iZWQgVExTIGtub3dsZWRnZSBiYXNlXShodHRwczovL3Rscy5tYmVkLm9yZy9rYikuCisKKyMjIyBDTWFrZQorCitJbiBvcmRlciB0byBidWlsZCB0aGUgc291cmNlIHVzaW5nIENNYWtlLCBqdXN0IGVudGVyIGF0IHRoZSBjb21tYW5kIGxpbmU6CisKKyAgICBjbWFrZSAuCisgICAgbWFrZQorCitJbiBvcmRlciB0byBydW4gdGhlIHRlc3RzLCBlbnRlcjoKKworICAgIG1ha2UgdGVzdAorCitUaGUgdGVzdCBzdWl0ZXMgbmVlZCBQZXJsIHRvIGJlIGJ1aWx0LiBJZiB5b3UgZG9uJ3QgaGF2ZSBQZXJsIGluc3RhbGxlZCwgeW91J2xsIHdhbnQgdG8gZGlzYWJsZSB0aGUgdGVzdCBzdWl0ZXMgd2l0aDoKKworICAgIGNtYWtlIC1ERU5BQkxFX1RFU1RJTkc9T2ZmIC4KKworSWYgeW91IGRpc2FibGVkIHRoZSB0ZXN0IHN1aXRlcywgYnV0IGtlcHQgdGhlIHByb2dyYW1zIGVuYWJsZWQsIHlvdSBjYW4gc3RpbGwgcnVuIGEgbXVjaCBzbWFsbGVyIHNldCBvZiB0ZXN0cyB3aXRoOgorCisgICAgcHJvZ3JhbXMvdGVzdC9zZWxmdGVzdAorCitUbyBjb25maWd1cmUgQ01ha2UgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMsIHVzZToKKworICAgIGNtYWtlIC1EVVNFX1NIQVJFRF9NQkVEVExTX0xJQlJBUlk9T24gLgorCitUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgYnVpbGQgbW9kZXMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgQ01ha2UgYnVpbGRzeXN0ZW0uIE1vc3Qgb2YgdGhlbSBhcmUgYXZhaWxhYmxlIGZvciBnY2MgYW5kIGNsYW5nLCB0aG91Z2ggc29tZSBhcmUgY29tcGlsZXItc3BlY2lmaWM6CisKKy0gICBSZWxlYXNlLiBUaGlzIGdlbmVyYXRlcyB0aGUgZGVmYXVsdCBjb2RlIHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IGluZm9ybWF0aW9uIGluIHRoZSBiaW5hcnkgZmlsZXMuCistICAgRGVidWcuIFRoaXMgZ2VuZXJhdGVzIGRlYnVnIGluZm9ybWF0aW9uIGFuZCBkaXNhYmxlcyBvcHRpbWl6YXRpb24gb2YgdGhlIGNvZGUuCistICAgQ292ZXJhZ2UuIFRoaXMgZ2VuZXJhdGVzIGNvZGUgY292ZXJhZ2UgaW5mb3JtYXRpb24gaW4gYWRkaXRpb24gdG8gZGVidWcgaW5mb3JtYXRpb24uCistICAgQVNhbi4gVGhpcyBpbnN0cnVtZW50cyB0aGUgY29kZSB3aXRoIEFkZHJlc3NTYW5pdGl6ZXIgdG8gY2hlY2sgZm9yIG1lbW9yeSBlcnJvcnMuIChUaGlzIGluY2x1ZGVzIExlYWtTYW5pdGl6ZXIsIHdpdGggcmVjZW50IHZlcnNpb24gb2YgZ2NjIGFuZCBjbGFuZy4pIChXaXRoIHJlY2VudCB2ZXJzaW9uIG9mIGNsYW5nLCB0aGlzIG1vZGUgYWxzbyBpbnN0cnVtZW50cyB0aGUgY29kZSB3aXRoIFVuZGVmaW5lZFNhbml0aXplciB0byBjaGVjayBmb3IgdW5kZWZpbmVkIGJlaGF2aW91ci4pCistICAgQVNhbkRiZy4gU2FtZSBhcyBBU2FuIGJ1dCBzbG93ZXIsIHdpdGggZGVidWcgaW5mb3JtYXRpb24gYW5kIGJldHRlciBzdGFjayB0cmFjZXMuCistICAgTWVtU2FuLiBUaGlzIGluc3RydW1lbnRzIHRoZSBjb2RlIHdpdGggTWVtb3J5U2FuaXRpemVyIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpc2VkIG1lbW9yeSByZWFkcy4gRXhwZXJpbWVudGFsLCBuZWVkcyByZWNlbnQgY2xhbmcgb24gTGludXgveDg2XF82NC4KKy0gICBNZW1TYW5EYmcuIFNhbWUgYXMgTWVtU2FuIGJ1dCBzbG93ZXIsIHdpdGggZGVidWcgaW5mb3JtYXRpb24sIGJldHRlciBzdGFjayB0cmFjZXMgYW5kIG9yaWdpbiB0cmFja2luZy4KKy0gICBDaGVjay4gVGhpcyBhY3RpdmF0ZXMgdGhlIGNvbXBpbGVyIHdhcm5pbmdzIHRoYXQgZGVwZW5kIG9uIG9wdGltaXphdGlvbiBhbmQgdHJlYXRzIGFsbCB3YXJuaW5ncyBhcyBlcnJvcnMuCisKK1N3aXRjaGluZyBidWlsZCBtb2RlcyBpbiBDTWFrZSBpcyBzaW1wbGUuIEZvciBkZWJ1ZyBtb2RlLCBlbnRlciBhdCB0aGUgY29tbWFuZCBsaW5lOgorCisgICAgY21ha2UgLUQgQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZyAuCisKK1RvIGxpc3Qgb3RoZXIgYXZhaWxhYmxlIENNYWtlIG9wdGlvbnMsIHVzZToKKworICAgIGNtYWtlIC1MSAorCitOb3RlIHRoYXQsIHdpdGggQ01ha2UsIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgY29tcGlsZXIgb3IgaXRzIG9wdGlvbnMgYWZ0ZXIgeW91IGFscmVhZHkgcmFuIENNYWtlLCB5b3UgbmVlZCB0byBjbGVhciBpdHMgY2FjaGUgZmlyc3QsIGUuZy4gKHVzaW5nIEdOVSBmaW5kKToKKworICAgIGZpbmQgLiAtaW5hbWUgJypjbWFrZSonIC1ub3QgLW5hbWUgQ01ha2VMaXN0cy50eHQgLWV4ZWMgcm0gLXJmIHt9ICsKKyAgICBDQz1nY2MgQ0ZMQUdTPSctZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgLVdhLC0tbm9leGVjc3RhY2snIGNtYWtlIC4KKworIyMjIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCisKK1RoZSBidWlsZCBmaWxlcyBmb3IgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gYXJlIGdlbmVyYXRlZCBmb3IgVmlzdWFsIFN0dWRpbyAyMDEwLgorCitUaGUgc29sdXRpb24gZmlsZSBgbWJlZFRMUy5zbG5gIGNvbnRhaW5zIGFsbCB0aGUgYmFzaWMgcHJvamVjdHMgbmVlZGVkIHRvIGJ1aWxkIHRoZSBsaWJyYXJ5IGFuZCBhbGwgdGhlIHByb2dyYW1zLiBUaGUgZmlsZXMgaW4gdGVzdHMgYXJlIG5vdCBnZW5lcmF0ZWQgYW5kIGNvbXBpbGVkLCBhcyB0aGVzZSBuZWVkIGEgcGVybCBlbnZpcm9ubWVudCBhcyB3ZWxsLiBIb3dldmVyLCB0aGUgc2VsZnRlc3QgcHJvZ3JhbSBpbiBgcHJvZ3JhbXMvdGVzdC9gIGlzIHN0aWxsIGF2YWlsYWJsZS4KKworRXhhbXBsZSBwcm9ncmFtcworLS0tLS0tLS0tLS0tLS0tLQorCitXZSd2ZSBpbmNsdWRlZCBleGFtcGxlIHByb2dyYW1zIGZvciBhIGxvdCBvZiBkaWZmZXJlbnQgZmVhdHVyZXMgYW5kIHVzZXMgaW4gYHByb2dyYW1zL2AuIE1vc3QgcHJvZ3JhbXMgb25seSBmb2N1cyBvbiBhIHNpbmdsZSBmZWF0dXJlIG9yIHVzYWdlIHNjZW5hcmlvLCBzbyBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGNvcHlpbmcgcGFydHMgb2YgdGhlIGNvZGUuCisKK1Rlc3RzCistLS0tLQorCittYmVkIFRMUyBpbmNsdWRlcyBhbiBlbGFib3JhdGUgdGVzdCBzdWl0ZSBpbiBgdGVzdHMvYCB0aGF0IGluaXRpYWxseSByZXF1aXJlcyBQZXJsIHRvIGdlbmVyYXRlIHRoZSB0ZXN0cyBmaWxlcyAoZS5nLiBgdGVzdFxfc3VpdGVcX21waS5jYCkuIFRoZXNlIGZpbGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSBhIGBmdW5jdGlvbiBmaWxlYCAoZS5nLiBgc3VpdGVzL3Rlc3RcX3N1aXRlXF9tcGkuZnVuY3Rpb25gKSBhbmQgYSBgZGF0YSBmaWxlYCAoZS5nLiBgc3VpdGVzL3Rlc3RcX3N1aXRlXF9tcGkuZGF0YWApLiBUaGUgYGZ1bmN0aW9uIGZpbGVgIGNvbnRhaW5zIHRoZSB0ZXN0IGZ1bmN0aW9ucy4gVGhlIGBkYXRhIGZpbGVgIGNvbnRhaW5zIHRoZSB0ZXN0IGNhc2VzLCBzcGVjaWZpZWQgYXMgcGFyYW1ldGVycyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB0ZXN0IGZ1bmN0aW9uLgorCitGb3IgbWFjaGluZXMgd2l0aCBhIFVuaXggc2hlbGwgYW5kIE9wZW5TU0wgKGFuZCBvcHRpb25hbGx5IEdudVRMUykgaW5zdGFsbGVkLCBhZGRpdGlvbmFsIHRlc3Qgc2NyaXB0cyBhcmUgYXZhaWxhYmxlOgorCistICAgYHRlc3RzL3NzbC1vcHQuc2hgIHJ1bnMgaW50ZWdyYXRpb24gdGVzdHMgZm9yIHZhcmlvdXMgVExTIG9wdGlvbnMgKHJlbmVnb3RpYXRpb24sIHJlc3VtcHRpb24sIGV0Yy4pIGFuZCB0ZXN0cyBpbnRlcm9wZXJhYmlsaXR5IG9mIHRoZXNlIG9wdGlvbnMgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMuCistICAgYHRlc3RzL2NvbXBhdC5zaGAgdGVzdHMgaW50ZXJvcGVyYWJpbGl0eSBvZiBldmVyeSBjaXBoZXJzdWl0ZSB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucy4KKy0gICBgdGVzdHMvc2NyaXB0cy90ZXN0LXJlZi1jb25maWdzLnBsYCB0ZXN0IGJ1aWxkcyBpbiB2YXJpb3VzIHJlZHVjZWQgY29uZmlndXJhdGlvbnMuCistICAgYHRlc3RzL3NjcmlwdHMva2V5LWV4Y2hhbmdlcy5wbGAgdGVzdCBidWlsZHMgaW4gY29uZmlndXJhdGlvbnMgd2l0aCBhIHNpbmdsZSBrZXkgZXhjaGFuZ2UgZW5hYmxlZAorLSAgIGB0ZXN0cy9zY3JpcHRzL2FsbC5zaGAgcnVucyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZSB0ZXN0cywgcGx1cyBzb21lIG1vcmUsIHdpdGggdmFyaW91cyBidWlsZCBvcHRpb25zIChzdWNoIGFzIEFTYW4sIGZ1bGwgYGNvbmZpZy5oYCwgZXRjKS4KKworQ29uZmlndXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tCisKK1dlIHByb3ZpZGUgc29tZSBub24tc3RhbmRhcmQgY29uZmlndXJhdGlvbnMgZm9jdXNlZCBvbiBzcGVjaWZpYyB1c2UgY2FzZXMgaW4gdGhlIGBjb25maWdzL2AgZGlyZWN0b3J5LiBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCB0aG9zZSBpbiBgY29uZmlncy9SRUFETUUudHh0YAorCitDb250cmlidXRpbmcKKy0tLS0tLS0tLS0tLQorCitXZSBncmF0ZWZ1bGx5IGFjY2VwdCBidWcgcmVwb3J0cyBhbmQgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBjb21tdW5pdHkuIFRoZXJlIGFyZSBzb21lIHJlcXVpcmVtZW50cyB3ZSBuZWVkIHRvIGZ1bGZpbGwgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBpbnRlZ3JhdGUgY29udHJpYnV0aW9uczoKKworLSAgIEFsbCBjb250cmlidXRpb25zLCB3aGV0aGVyIGxhcmdlIG9yIHNtYWxsIHJlcXVpcmUgYSBDb250cmlidXRvcidzIExpY2Vuc2UgQWdyZWVtZW50IChDTEEpIHRvIGJlIGFjY2VwdGVkLiBUaGlzIGlzIGJlY2F1c2Ugc291cmNlIGNvZGUgY2FuIHBvc3NpYmx5IGZhbGwgdW5kZXIgY29weXJpZ2h0IGxhdyBhbmQgd2UgbmVlZCB5b3VyIGNvbnNlbnQgdG8gc2hhcmUgaW4gdGhlIG93bmVyc2hpcCBvZiB0aGUgY29weXJpZ2h0LgorLSAgIFdlIHdvdWxkIGFzayB0aGF0IGNvbnRyaWJ1dGlvbnMgY29uZm9ybSB0byBbb3VyIGNvZGluZyBzdGFuZGFyZHNdKGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiL2RldmVsb3BtZW50L21iZWR0bHMtY29kaW5nLXN0YW5kYXJkcyksIGFuZCB0aGF0IGNvbnRyaWJ1dGlvbnMgc2hvdWxkIGJlIGZ1bGx5IHRlc3RlZCBiZWZvcmUgc3VibWlzc2lvbi4KKy0gICBBcyB3aXRoIGFueSBvcGVuIHNvdXJjZSBwcm9qZWN0LCBjb250cmlidXRpb25zIHdpbGwgYmUgcmV2aWV3ZWQgYnkgdGhlIHByb2plY3QgdGVhbSBhbmQgY29tbXVuaXR5IGFuZCBtYXkgbmVlZCBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYmUgYWNjZXB0ZWQuCisKK1RvIGFjY2VwdCB0aGUgQ29udHJpYnV0b3LigJlzIExpY2VuY2UgQWdyZWVtZW50IChDTEEpLCBpbmRpdmlkdWFsIGNvbnRyaWJ1dG9ycyBjYW4gZG8gdGhpcyBieSBjcmVhdGluZyBhbiBtYmVkIGFjY291bnQgYW5kIFthY2NlcHRpbmcgdGhlIG9ubGluZSBhZ3JlZW1lbnQgaGVyZSB3aXRoIGEgY2xpY2sgdGhyb3VnaF0oaHR0cHM6Ly9kZXZlbG9wZXIubWJlZC5vcmcvY29udHJpYnV0b3JfYWdyZWVtZW50LykuIEFsdGVybmF0aXZlbHksIGZvciBjb250cmlidXRpb25zIGZyb20gY29ycG9yYXRpb25zLCBvciB0aG9zZSB0aGF0IGRvIG5vdCB3aXNoIHRvIGNyZWF0ZSBhbiBtYmVkIGFjY291bnQsIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGFncmVlZW1lbnQgY2FuIGJlIGZvdW5kIFtoZXJlXShodHRwczovL3d3dy5tYmVkLmNvbS9lbi9hYm91dC1tYmVkL2NvbnRyaWJ1dG9yLWxpY2Vuc2UtYWdyZWVtZW50cy8pLiBUaGlzIGFncmVlbWVudCBzaG91bGQgYmUgc2lnbmVkIGFuZCByZXR1cm5lZCB0byBBUk0gYXMgZGVzY3JpYmVkIGluIHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4uCisKKyMjIyBNYWtpbmcgYSBDb250cmlidXRpb24KKworMS4gIFtDaGVjayBmb3Igb3BlbiBpc3N1ZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWR0bHMvaXNzdWVzKSBvciBbc3RhcnQgYSBkaXNjdXNzaW9uXShodHRwczovL3Rscy5tYmVkLm9yZy9kaXNjdXNzaW9ucykgYXJvdW5kIGEgZmVhdHVyZSBpZGVhIG9yIGEgYnVnLgorMi4gIEZvcmsgdGhlIFttYmVkIFRMUyByZXBvc2l0b3J5IG9uIEdpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZHRscykgdG8gc3RhcnQgbWFraW5nIHlvdXIgY2hhbmdlcy4gQXMgYSBnZW5lcmFsIHJ1bGUsIHlvdSBzaG91bGQgdXNlIHRoZSAiZGV2ZWxvcG1lbnQiIGJyYW5jaCBhcyBhIGJhc2lzLgorMy4gIFdyaXRlIGEgdGVzdCB3aGljaCBzaG93cyB0aGF0IHRoZSBidWcgd2FzIGZpeGVkIG9yIHRoYXQgdGhlIGZlYXR1cmUgd29ya3MgYXMgZXhwZWN0ZWQuCis0LiAgU2VuZCBhIHB1bGwgcmVxdWVzdCBhbmQgYnVnIHVzIHVudGlsIGl0IGdldHMgbWVyZ2VkIGFuZCBwdWJsaXNoZWQuIENvbnRyaWJ1dGlvbnMgbWF5IG5lZWQgc29tZSBtb2RpZmljYXRpb25zLCBzbyB3b3JrIHdpdGggdXMgdG8gZ2V0IHlvdXIgY2hhbmdlIGFjY2VwdGVkLiBXZSB3aWxsIGluY2x1ZGUgeW91ciBuYW1lIGluIHRoZSBDaGFuZ2VMb2cgOikKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2FwYWNoZS0yLjAudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2FwYWNoZS0yLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDU2OTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vYXBhY2hlLTIuMC50eHQKQEAgLTAsMCArMSwyMDIgQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY2lyY2xlLnltbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jaXJjbGUueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZWQwMmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY2lyY2xlLnltbApAQCAtMCwwICsxLDQ0IEBACisjIFB1cnBvc2U6CisjIC0gVG8gdGVzdCBhbmQgcHJvdmUgdGhhdCBhIG5ldyBjb21taXQgaW4gIHRoZSBtYmVkIFRMUyByZXBvc2l0b3J5IGJ1aWxkcworIyBhbmQgaW50ZWdyYXRlcyB3aXRoIG1iZWQtb3MgcHJvcGVybHkuCisjICAgICAgICAgICBBTkQKKyMgLSBUbyB0ZXN0IGFuZCBwcm92ZSB0aGF0IHRoZSBjdXJyZW50IGRldmVsb3BtZW50IGhlYWQgb2YgbWJlZCBUTFMgYnVpbGRzCisjIGFuZCBpbnRlZ3JhdGVzIHdpdGggdGhlIGN1cnJlbnQgbWJlZC1vcyBtYXN0ZXIgYnJhbmNoLgorIworIyBUaGUgc2NyaXB0IGZldGNoZXMgYWxsIHRoZSBwcmVyZXF1aXNpdGVzIGFuZCBidWlsZHMgdGhlIG1iZWQgVExTICd0bHMtY2xpZW50JworIyBleGFtcGxlLiBUaGlzIHNjcmlwdCBpcyB0cmlnZ2VyZWQgYnkgZXZlcnkgY29tbWl0IGFuZCBvbmNlIGVhY2ggbmlnaHQgYW5kIHRoZQorIyBleGFjdCBiZWhhdmlvdXIgZGVwZW5kcyBvbiBob3cgaXQgd2FzIHRyaWdnZXJlZDoKKyMgLSBJZiBpdCBpcyBhIG5pZ2h0bHkgYnVpbGQgdGhlbiBpdCBidWlsZHMgdGhlIG1iZWQgVExTIGRldmVsb3BtZW50IGhlYWQgd2l0aAorIyAgIG1iZWQtb3MgbWFzdGVyLgorIyAtIElmIGl0IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGNvbW1pdCwgdGhlbiBpdCBidWlsZHMgdGhlIGV4YW1wbGUgd2l0aCBtYmVkIFRMUworIyAgIGF0IHRoYXQgY29tbWl0IGFuZCBtYmVkLW9zIGF0IHRoZSBjb21taXQgcG9pbnRlZCBieSBtYmVkLW9zLmxpYiBpbiB0aGUKKyMgICBleGFtcGxlIHJlcG9zaXRvcnkuCisKK3Rlc3Q6CisgICAgb3ZlcnJpZGU6CisgICAgICAgIC0gY2QgLi4vbWJlZC1vcy1leGFtcGxlLXRscy90bHMtY2xpZW50LyAmJiBtYmVkIGNvbXBpbGUgLW0gSzY0RiAtdCBHQ0NfQVJNIC1jCisKK2RlcGVuZGVuY2llczoKKyAgICBwcmU6CisgICAgICAgICMgSW5zdGFsbCBnY2MtYXJtCisgICAgICAgIC0gY2QgLi4gJiYgd2dldCAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2djYy1hcm0tZW1iZWRkZWQvNC45LzQuOS0yMDE1LXEzLXVwZGF0ZS8rZG93bmxvYWQvZ2NjLWFybS1ub25lLWVhYmktNF85LTIwMTVxMy0yMDE1MDkyMS1saW51eC50YXIuYnoyIgorICAgICAgICAtIGNkIC4uICYmIHRhciAteHZqZiBnY2MtYXJtLW5vbmUtZWFiaS00XzktMjAxNXEzLTIwMTUwOTIxLWxpbnV4LnRhci5iejIKKyAgICAgICAgLSBsbiAtcyAuLi9nY2MtYXJtLW5vbmUtZWFiaS00XzktMjAxNXEzL2Jpbi8qIC4uL2Jpbi8KKyAgICAgICAgIyBJbnN0YWxsIG1iZWQtY2xpCisgICAgICAgIC0gY2QgLi4vICYmIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkLWNsaS5naXQKKyAgICAgICAgLSBjZCAuLi9tYmVkLWNsaSAmJiBzdWRvIC1IIHBpcCBpbnN0YWxsIC1lIC4KKyAgICAgICAgIyBHZXQgdGhlIHNhbXBsZSBhcHBsaWNhdGlvbgorICAgICAgICAtIGNkIC4uLyAmJiBnaXQgY2xvbmUgZ2l0QGdpdGh1Yi5jb206QVJNbWJlZC9tYmVkLW9zLWV4YW1wbGUtdGxzLmdpdAorICAgICAgICAjIEdldCBtYmVkLW9zCisgICAgICAgIC0gY2QgLi4vbWJlZC1vcy1leGFtcGxlLXRscy90bHMtY2xpZW50ICYmIG1iZWQgZGVwbG95CisgICAgICAgICMgVXBkYXRlIG1iZWQtb3MgdG8gbWFzdGVyIG9ubHkgaWYgaXQgaXMgYSBuaWdodGx5IGJ1aWxkCisgICAgICAgIC0gPgorICAgICAgICAgICAgaWYgWyAtbiAiJHtSVU5fTklHSFRMWV9CVUlMRH0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICBjZCAuLi9tYmVkLW9zLWV4YW1wbGUtdGxzL3Rscy1jbGllbnQvbWJlZC1vcy8gJiYgbWJlZCB1cGRhdGUgbWFzdGVyOworICAgICAgICAgICAgZmkKKyAgICAgICAgIyBJbXBvcnQgbWJlZHRscyBjdXJyZW50IHJldmlzaW9uCisgICAgICAgIC0gbG4gLXMgLi4vLi4vLi4vLi4vLi4vLi4vLi4vbWJlZHRscy8gLi4vbWJlZC1vcy1leGFtcGxlLXRscy90bHMtY2xpZW50L21iZWQtb3MvZmVhdHVyZXMvbWJlZHRscy9pbXBvcnRlci9UQVJHRVRfSUdOT1JFL21iZWR0bHMKKyAgICAgICAgLSBjZCAuLi9tYmVkLW9zLWV4YW1wbGUtdGxzL3Rscy1jbGllbnQvbWJlZC1vcy9mZWF0dXJlcy9tYmVkdGxzL2ltcG9ydGVyLyAmJiBtYWtlCisgICAgb3ZlcnJpZGU6CisgICAgICAgICMgSW5zdGFsbCB0aGUgbWlzc2luZyBweXRob24gcGFja2FnZXMKKyAgICAgICAgLSBjZCAuLi9tYmVkLW9zLWV4YW1wbGUtdGxzL3Rscy1jbGllbnQvbWJlZC1vcy8gJiYgc3VkbyAtSCBwaXAgaW5zdGFsbCAtciByZXF1aXJlbWVudHMudHh0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9SRUFETUUudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTg2N2JjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvUkVBRE1FLnR4dApAQCAtMCwwICsxLDI2IEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKK1RoZSBleGFtcGxlcyBhcmUgZ2VuZXJhbGx5IGZvY3VzZWQgb24gYSBwYXJ0aWN1bGFyIHVzYWdlIGNhc2UgKGVnLCBzdXBwb3J0IGZvcgorYSByZXN0cmljdGVkIG51bWJlciBvZiBjaXBoZXJzdWl0ZXMpIGFuZCBhaW0gYXQgbWluaW1pemluZyByZXNvdXJjZSB1c2FnZSBmb3IKK3RoaXMgdGFyZ2V0LiBUaGV5IGNhbiBiZSB1c2VkIGFzIGEgYmFzaXMgZm9yIGN1c3RvbSBjb25maWd1cmF0aW9ucy4KKworVGhlc2UgZmlsZXMgYXJlIGNvbXBsZXRlIHJlcGxhY2VtZW50cyBmb3IgdGhlIGRlZmF1bHQgY29uZmlnLmguIFRvIHVzZSBvbmUgb2YKK3RoZW0sIHlvdSBjYW4gcGljayBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCisxLiBSZXBsYWNlIHRoZSBkZWZhdWx0IGZpbGUgaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oIHdpdGggdGhlIGNob3NlbiBvbmUuCisgICAoRGVwZW5kaW5nIG9uIHlvdXIgY29tcGlsZXIsIHlvdSBtYXkgbmVlZCB0byBhanVzdCB0aGUgbGluZSB3aXRoCisgICAjaW5jbHVkZSAibWJlZHRscy9jaGVja19jb25maWcuaCIgdGhlbi4pCisKKzIuIERlZmluZSBNQkVEVExTX0NPTkZJR19GSUxFIGFuZCBhZGp1c3QgdGhlIGluY2x1ZGUgcGF0aCBhY2NvcmRpbmdseS4KKyAgIEZvciBleGFtcGxlLCB1c2luZyBtYWtlOgorCisgICAgQ0ZMQUdTPSItSSRQV0QvY29uZmlncyAtRE1CRURUTFNfQ09ORklHX0ZJTEU9Jzxmb28uaD4nIiBtYWtlCisKKyAgIE9yLCB1c2luZyBjbWFrZToKKworICAgIGZpbmQgLiAtaW5hbWUgJypjbWFrZSonIC1ub3QgLW5hbWUgQ01ha2VMaXN0cy50eHQgLWV4ZWMgcm0gLXJmIHt9ICsKKyAgICBDRkxBR1M9Ii1JJFBXRC9jb25maWdzIC1ETUJFRFRMU19DT05GSUdfRklMRT0nPGZvby5oPiciIGNtYWtlIC4KKyAgICBtYWtlCisKK05vdGUgdGhhdCB0aGUgc2Vjb25kIG1ldGhvZCBhbHNvIHdvcmtzIGlmIHlvdSB3YW50IHRvIGtlZXAgeW91ciBjdXN0b20KK2NvbmZpZ3VyYXRpb24gZmlsZSBvdXRzaWRlIHRoZSBtYmVkIFRMUyB0cmVlLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLWNjbS1wc2stdGxzMV8yLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctY2NtLXBzay10bHMxXzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWUxMGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLWNjbS1wc2stdGxzMV8yLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqICBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gZm9yIFRMUyAxLjIgd2l0aCBQU0sgYW5kIEFFUy1DQ00gY2lwaGVyc3VpdGVzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogTWluaW1hbCBjb25maWd1cmF0aW9uIGZvciBUTFMgMS4yIHdpdGggUFNLIGFuZCBBRVMtQ0NNIGNpcGhlcnN1aXRlcworICogRGlzdGluZ3Vpc2hpbmcgZmVhdHVyZXM6CisgKiAtIG5vIGJpZ251bSwgbm8gUEssIG5vIFg1MDkKKyAqIC0gZnVsbHkgbW9kZXJuIGFuZCBzZWN1cmUgKHByb3ZpZGVkIHRoZSBwcmUtc2hhcmVkIGtleXMgaGF2ZSBoaWdoIGVudHJvcHkpCisgKiAtIHZlcnkgbG93IHJlY29yZCBvdmVyaGVhZCB3aXRoIENDTS04CisgKiAtIG9wdGltaXplZCBmb3IgbG93IFJBTSB1c2FnZQorICoKKyAqIFNlZSBSRUFETUUudHh0IGZvciB1c2FnZSBpbnN0cnVjdGlvbnMuCisgKi8KKyNpZm5kZWYgTUJFRFRMU19DT05GSUdfSAorI2RlZmluZSBNQkVEVExTX0NPTkZJR19ICisKKy8qIFN5c3RlbSBzdXBwb3J0ICovCisvLyNkZWZpbmUgTUJFRFRMU19IQVZFX1RJTUUgLyogT3B0aW9uYWxseSB1c2VkIGluIEhlbGxvIG1lc3NhZ2VzICovCisvKiBPdGhlciBNQkVEVExTX0hBVkVfWFhYIGZsYWdzIGlycmVsZXZhbnQgZm9yIHRoaXMgY29uZmlndXJhdGlvbiAqLworCisvKiBtYmVkIFRMUyBmZWF0dXJlIHN1cHBvcnQgKi8KKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCisKKy8qIG1iZWQgVExTIG1vZHVsZXMgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfQworI2RlZmluZSBNQkVEVExTX0NDTV9DCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX0MKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19DCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9DCisjZGVmaW5lIE1CRURUTFNfTURfQworI2RlZmluZSBNQkVEVExTX05FVF9DCisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0xJX0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfU1JWX0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTX0MKKworLyogU2F2ZSBSQU0gYXQgdGhlIGV4cGVuc2Ugb2YgUk9NICovCisjZGVmaW5lIE1CRURUTFNfQUVTX1JPTV9UQUJMRVMKKworLyogU2F2ZSBzb21lIFJBTSBieSBhZGp1c3RpbmcgdG8geW91ciBleGFjdCBuZWVkcyAqLworI2RlZmluZSBNQkVEVExTX1BTS19NQVhfTEVOICAgIDE2IC8qIDEyOC1iaXRzIGtleXMgYXJlIGdlbmVyYWxseSBlbm91Z2ggKi8KKworLyoKKyAqIFlvdSBzaG91bGQgYWRqdXN0IHRoaXMgdG8gdGhlIGV4YWN0IG51bWJlciBvZiBzb3VyY2VzIHlvdSdyZSB1c2luZzogZGVmYXVsdAorICogaXMgdGhlICJwbGF0Zm9ybV9lbnRyb3B5X3BvbGwiIHNvdXJjZSwgYnV0IHlvdSBtYXkgd2FudCB0byBhZGQgb3RoZXIgb25lcworICogTWluaW11bSBpcyAyIGZvciB0aGUgZW50cm9weSB0ZXN0IHN1aXRlLgorICovCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NQVhfU09VUkNFUyAyCisKKy8qCisgKiBVc2Ugb25seSBDQ01fOCBjaXBoZXJzdWl0ZXMsIGFuZAorICogc2F2ZSBST00gYW5kIGEgZmV3IGJ5dGVzIG9mIFJBTSBieSBzcGVjaWZ5aW5nIG91ciBvd24gY2lwaGVyc3VpdGUgbGlzdAorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOCwgICAgICAgICAgICAgXAorICAgICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NDTV84CisKKy8qCisgKiBTYXZlIFJBTSBhdCB0aGUgZXhwZW5zZSBvZiBpbnRlcm9wZXJhYmlsaXR5OiBkbyB0aGlzIG9ubHkgaWYgeW91IGNvbnRyb2wKKyAqIGJvdGggZW5kcyBvZiB0aGUgY29ubmVjdGlvbiEgIChTZWUgY29tbWVudHMgaW4gIm1iZWR0bHMvc3NsLmgiLikKKyAqIFRoZSBvcHRpbWFsIHNpemUgaGVyZSBkZXBlbmRzIG9uIHRoZSB0eXBpY2FsIHNpemUgb2YgcmVjb3Jkcy4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gICAgICAgICAgICAgNTEyCisKKyNpbmNsdWRlICJtYmVkdGxzL2NoZWNrX2NvbmZpZy5oIgorCisjZW5kaWYgLyogTUJFRFRMU19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLW1pbmktdGxzMV8xLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctbWluaS10bHMxXzEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjIzNjNkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLW1pbmktdGxzMV8xLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqICBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gZm9yIFRMUyAxLjEgKFJGQyA0MzQ2KQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqIE1pbmltYWwgY29uZmlndXJhdGlvbiBmb3IgVExTIDEuMSAoUkZDIDQzNDYpLCBpbXBsZW1lbnRpbmcgb25seSB0aGUKKyAqIHJlcXVpcmVkIGNpcGhlcnN1aXRlOiBNQkVEVExTX1RMU19SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKgorICogU2VlIFJFQURNRS50eHQgZm9yIHVzYWdlIGluc3RydWN0aW9ucy4KKyAqLworCisjaWZuZGVmIE1CRURUTFNfQ09ORklHX0gKKyNkZWZpbmUgTUJFRFRMU19DT05GSUdfSAorCisvKiBTeXN0ZW0gc3VwcG9ydCAqLworI2RlZmluZSBNQkVEVExTX0hBVkVfQVNNCisjZGVmaW5lIE1CRURUTFNfSEFWRV9USU1FCisKKy8qIG1iZWQgVExTIGZlYXR1cmUgc3VwcG9ydCAqLworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworI2RlZmluZSBNQkVEVExTX1BLQ1MxX1YxNQorI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKKworLyogbWJlZCBUTFMgbW9kdWxlcyAqLworI2RlZmluZSBNQkVEVExTX0FFU19DCisjZGVmaW5lIE1CRURUTFNfQVNOMV9QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfQVNOMV9XUklURV9DCisjZGVmaW5lIE1CRURUTFNfQklHTlVNX0MKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfQworI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX0MKKyNkZWZpbmUgTUJFRFRMU19ERVNfQworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfQworI2RlZmluZSBNQkVEVExTX01EX0MKKyNkZWZpbmUgTUJFRFRMU19NRDVfQworI2RlZmluZSBNQkVEVExTX05FVF9DCisjZGVmaW5lIE1CRURUTFNfT0lEX0MKKyNkZWZpbmUgTUJFRFRMU19QS19DCisjZGVmaW5lIE1CRURUTFNfUEtfUEFSU0VfQworI2RlZmluZSBNQkVEVExTX1JTQV9DCisjZGVmaW5lIE1CRURUTFNfU0hBMV9DCisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0xJX0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfU1JWX0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTX0MKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfWDUwOV9VU0VfQworCisvKiBGb3IgdGVzdCBjZXJ0aWZpY2F0ZXMgKi8KKyNkZWZpbmUgTUJFRFRMU19CQVNFNjRfQworI2RlZmluZSBNQkVEVExTX0NFUlRTX0MKKyNkZWZpbmUgTUJFRFRMU19QRU1fUEFSU0VfQworCisvKiBGb3IgdGVzdGluZyB3aXRoIGNvbXBhdC5zaCAqLworI2RlZmluZSBNQkVEVExTX0ZTX0lPCisKKyNpbmNsdWRlICJtYmVkdGxzL2NoZWNrX2NvbmZpZy5oIgorCisjZW5kaWYgLyogTUJFRFRMU19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLW5vLWVudHJvcHkuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jb25maWdzL2NvbmZpZy1uby1lbnRyb3B5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmMTdkNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jb25maWdzL2NvbmZpZy1uby1lbnRyb3B5LmgKQEAgLTAsMCArMSw4NSBAQAorLyoqCisgKiAgTWluaW1hbCBjb25maWd1cmF0aW9uIG9mIGZlYXR1cmVzIHRoYXQgZG8gbm90IHJlcXVpcmUgYW4gZW50cm9weSBzb3VyY2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogTWluaW1hbCBjb25maWd1cmF0aW9uIG9mIGZlYXR1cmVzIHRoYXQgZG8gbm90IHJlcXVpcmUgYW4gZW50cm9weSBzb3VyY2UKKyAqIERpc3Rpbmd1aXNoaW5nIHJlYXR1cmVzOgorICogLSBubyBlbnRyb3B5IG1vZHVsZQorICogLSBubyBUTFMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIGR1ZSB0byBhYnNlbmNlIG9mIGFuIGVudHJvcHkKKyAqICAgc291cmNlCisgKgorICogU2VlIFJFQURNRS50eHQgZm9yIHVzYWdlIGluc3RydWN0aW9ucy4KKyAqLworCisjaWZuZGVmIE1CRURUTFNfQ09ORklHX0gKKyNkZWZpbmUgTUJFRFRMU19DT05GSUdfSAorCisvKiBTeXN0ZW0gc3VwcG9ydCAqLworI2RlZmluZSBNQkVEVExTX0hBVkVfQVNNCisjZGVmaW5lIE1CRURUTFNfSEFWRV9USU1FCisKKy8qIG1iZWQgVExTIGZlYXR1cmUgc3VwcG9ydCAqLworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CisjZGVmaW5lIE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTCisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9OSVNUX09QVElNCisjZGVmaW5lIE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQworI2RlZmluZSBNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVAorI2RlZmluZSBNQkVEVExTX1BLQ1MxX1YxNQorI2RlZmluZSBNQkVEVExTX1BLQ1MxX1YyMQorI2RlZmluZSBNQkVEVExTX1NFTEZfVEVTVAorI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRQorI2RlZmluZSBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFCisKKy8qIG1iZWQgVExTIG1vZHVsZXMgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfQworI2RlZmluZSBNQkVEVExTX0FTTjFfUEFSU0VfQworI2RlZmluZSBNQkVEVExTX0FTTjFfV1JJVEVfQworI2RlZmluZSBNQkVEVExTX0JBU0U2NF9DCisjZGVmaW5lIE1CRURUTFNfQklHTlVNX0MKKyNkZWZpbmUgTUJFRFRMU19DQ01fQworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9DCisjZGVmaW5lIE1CRURUTFNfRUNEU0FfQworI2RlZmluZSBNQkVEVExTX0VDUF9DCisjZGVmaW5lIE1CRURUTFNfRVJST1JfQworI2RlZmluZSBNQkVEVExTX0dDTV9DCisjZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX0MKKyNkZWZpbmUgTUJFRFRMU19NRF9DCisjZGVmaW5lIE1CRURUTFNfT0lEX0MKKyNkZWZpbmUgTUJFRFRMU19QRU1fUEFSU0VfQworI2RlZmluZSBNQkVEVExTX1BLX0MKKyNkZWZpbmUgTUJFRFRMU19QS19QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfUEtfV1JJVEVfQworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0MKKyNkZWZpbmUgTUJFRFRMU19SU0FfQworI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9DCisjZGVmaW5lIE1CRURUTFNfU0hBNTEyX0MKKyNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX0MKKyNkZWZpbmUgTUJFRFRMU19YNTA5X1VTRV9DCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MKKworI2luY2x1ZGUgImNoZWNrX2NvbmZpZy5oIgorCisjZW5kaWYgLyogTUJFRFRMU19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLXBpY29jb2luLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctcGljb2NvaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmIyNGE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLXBpY29jb2luLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqICBSZWR1Y2VkIGNvbmZpZ3VyYXRpb24gdXNlZCBieSBQaWNvY29pbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiBSZWR1Y2VkIGNvbmZpZ3VyYXRpb24gdXNlZCBieSBQaWNvY29pbi4KKyAqCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgdXNhZ2UgaW5zdHJ1Y3Rpb25zLgorICoKKyAqIERpc3Rpbmd1aXNoaW5nIGZlYXR1cmVzOgorICogLSBubyBTU0wvVExTOworICogLSBubyBYLjUwOTsKKyAqIC0gRUNEU0EvUEsgYW5kIHNvbWUgb3RoZXIgY2hvc2VuIGNyeXB0byBiaXRzLgorICovCisKKyNpZm5kZWYgTUJFRFRMU19DT05GSUdfSAorI2RlZmluZSBNQkVEVExTX0NPTkZJR19ICisKKy8qIFN5c3RlbSBzdXBwb3J0ICovCisjZGVmaW5lIE1CRURUTFNfSEFWRV9BU00KKyNkZWZpbmUgTUJFRFRMU19IQVZFX1RJTUUKKworLyogbWJlZCBUTFMgZmVhdHVyZSBzdXBwb3J0ICovCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDCisjZGVmaW5lIE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQKKyNkZWZpbmUgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWQorI2RlZmluZSBNQkVEVExTX0ZTX0lPCisKKy8qIG1iZWQgVExTIG1vZHVsZXMgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNOSV9DCisjZGVmaW5lIE1CRURUTFNfQUVTX0MKKyNkZWZpbmUgTUJFRFRMU19BU04xX1BBUlNFX0MKKyNkZWZpbmUgTUJFRFRMU19BU04xX1dSSVRFX0MKKyNkZWZpbmUgTUJFRFRMU19CQVNFNjRfQworI2RlZmluZSBNQkVEVExTX0JJR05VTV9DCisjZGVmaW5lIE1CRURUTFNfRUNEU0FfQworI2RlZmluZSBNQkVEVExTX0VDUF9DCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9DCisjZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX0MKKyNkZWZpbmUgTUJFRFRMU19NRF9DCisjZGVmaW5lIE1CRURUTFNfT0lEX0MKKyNkZWZpbmUgTUJFRFRMU19QQURMT0NLX0MKKyNkZWZpbmUgTUJFRFRMU19QS19DCisjZGVmaW5lIE1CRURUTFNfUEtfUEFSU0VfQworI2RlZmluZSBNQkVEVExTX1BLX1dSSVRFX0MKKyNkZWZpbmUgTUJFRFRMU19SSVBFTUQxNjBfQworI2RlZmluZSBNQkVEVExTX1NIQTFfQworI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9DCisKKyNpbmNsdWRlICJtYmVkdGxzL2NoZWNrX2NvbmZpZy5oIgorCisjZW5kaWYgLyogTUJFRFRMU19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLXN1aXRlLWIuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jb25maWdzL2NvbmZpZy1zdWl0ZS1iLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0ODA0YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jb25maWdzL2NvbmZpZy1zdWl0ZS1iLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgTWluaW1hbCBjb25maWd1cmF0aW9uIGZvciBUTFMgTlNBIFN1aXRlIEIgUHJvZmlsZSAoUkZDIDY0NjApCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogTWluaW1hbCBjb25maWd1cmF0aW9uIGZvciBUTFMgTlNBIFN1aXRlIEIgUHJvZmlsZSAoUkZDIDY0NjApCisgKgorICogRGlzdGluZ3Vpc2hpbmcgZmVhdHVyZXM6CisgKiAtIG5vIFJTQSBvciBjbGFzc2ljIERILCBmdWxseSBiYXNlZCBvbiBFQ0MKKyAqIC0gb3B0aW1pemVkIGZvciBsb3cgUkFNIHVzYWdlCisgKgorICogUG9zc2libGUgaW1wcm92ZW1lbnRzOgorICogLSBpZiAxMjgtYml0IHNlY3VyaXR5IGlzIGVub3VnaCwgZGlzYWJsZSBzZWNwMzg0cjEgYW5kIFNIQS01MTIKKyAqIC0gdXNlIGVtYmVkZGVkIGNlcnRzIGluIERFUiBmb3JtYXQgYW5kIGRpc2FibGUgUEVNX1BBUlNFX0MgYW5kIEJBU0U2NF9DCisgKgorICogU2VlIFJFQURNRS50eHQgZm9yIHVzYWdlIGluc3RydWN0aW9ucy4KKyAqLworCisjaWZuZGVmIE1CRURUTFNfQ09ORklHX0gKKyNkZWZpbmUgTUJFRFRMU19DT05GSUdfSAorCisvKiBTeXN0ZW0gc3VwcG9ydCAqLworI2RlZmluZSBNQkVEVExTX0hBVkVfQVNNCisjZGVmaW5lIE1CRURUTFNfSEFWRV9USU1FCisKKy8qIG1iZWQgVExTIGZlYXR1cmUgc3VwcG9ydCAqLworI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorCisvKiBtYmVkIFRMUyBtb2R1bGVzICovCisjZGVmaW5lIE1CRURUTFNfQUVTX0MKKyNkZWZpbmUgTUJFRFRMU19BU04xX1BBUlNFX0MKKyNkZWZpbmUgTUJFRFRMU19BU04xX1dSSVRFX0MKKyNkZWZpbmUgTUJFRFRMU19CSUdOVU1fQworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9DCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfQworI2RlZmluZSBNQkVEVExTX0VDREhfQworI2RlZmluZSBNQkVEVExTX0VDRFNBX0MKKyNkZWZpbmUgTUJFRFRMU19FQ1BfQworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfQworI2RlZmluZSBNQkVEVExTX0dDTV9DCisjZGVmaW5lIE1CRURUTFNfTURfQworI2RlZmluZSBNQkVEVExTX05FVF9DCisjZGVmaW5lIE1CRURUTFNfT0lEX0MKKyNkZWZpbmUgTUJFRFRMU19QS19DCisjZGVmaW5lIE1CRURUTFNfUEtfUEFSU0VfQworI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9DCisjZGVmaW5lIE1CRURUTFNfU0hBNTEyX0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0xJX0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfU1JWX0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTX0MKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfWDUwOV9VU0VfQworCisvKiBGb3IgdGVzdCBjZXJ0aWZpY2F0ZXMgKi8KKyNkZWZpbmUgTUJFRFRMU19CQVNFNjRfQworI2RlZmluZSBNQkVEVExTX0NFUlRTX0MKKyNkZWZpbmUgTUJFRFRMU19QRU1fUEFSU0VfQworCisvKiBTYXZlIFJBTSBhdCB0aGUgZXhwZW5zZSBvZiBST00gKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworCisvKiBTYXZlIFJBTSBieSBhZGp1c3RpbmcgdG8gb3VyIGV4YWN0IG5lZWRzICovCisjZGVmaW5lIE1CRURUTFNfRUNQX01BWF9CSVRTICAgMzg0CisjZGVmaW5lIE1CRURUTFNfTVBJX01BWF9TSVpFICAgIDQ4IC8vIDM4NCBiaXRzIGlzIDQ4IGJ5dGVzCisKKy8qIFNhdmUgUkFNIGF0IHRoZSBleHBlbnNlIG9mIHNwZWVkLCBzZWUgZWNwLmggKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUgICAgICAgIDIKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRklYRURfUE9JTlRfT1BUSU0gIDAKKworLyogU2lnbmlmaWNhbnQgc3BlZWQgYmVuZWZpdCBhdCB0aGUgZXhwZW5zZSBvZiBzb21lIFJPTSAqLworI2RlZmluZSBNQkVEVExTX0VDUF9OSVNUX09QVElNCisKKy8qCisgKiBZb3Ugc2hvdWxkIGFkanVzdCB0aGlzIHRvIHRoZSBleGFjdCBudW1iZXIgb2Ygc291cmNlcyB5b3UncmUgdXNpbmc6IGRlZmF1bHQKKyAqIGlzIHRoZSAibWJlZHRsc19wbGF0Zm9ybV9lbnRyb3B5X3BvbGwiIHNvdXJjZSwgYnV0IHlvdSBtYXkgd2FudCB0byBhZGQgb3RoZXIgb25lcy4KKyAqIE1pbmltdW0gaXMgMiBmb3IgdGhlIGVudHJvcHkgdGVzdCBzdWl0ZS4KKyAqLworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfTUFYX1NPVVJDRVMgMgorCisvKiBTYXZlIFJPTSBhbmQgYSBmZXcgYnl0ZXMgb2YgUkFNIGJ5IHNwZWNpZnlpbmcgb3VyIG93biBjaXBoZXJzdWl0ZSBsaXN0ICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwgICAgXAorICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisKKy8qCisgKiBTYXZlIFJBTSBhdCB0aGUgZXhwZW5zZSBvZiBpbnRlcm9wZXJhYmlsaXR5OiBkbyB0aGlzIG9ubHkgaWYgeW91IGNvbnRyb2wKKyAqIGJvdGggZW5kcyBvZiB0aGUgY29ubmVjdGlvbiEgIChTZWUgY29tZW50cyBpbiAibWJlZHRscy9zc2wuaCIuKQorICogVGhlIG1pbmltdW0gc2l6ZSBoZXJlIGRlcGVuZHMgb24gdGhlIGNlcnRpZmljYXRlIGNoYWluIHVzZWQgYXMgd2VsbCBhcyB0aGUKKyAqIHR5cGljYWwgc2l6ZSBvZiByZWNvcmRzLgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiAgICAgICAgICAgICAxMDI0CisKKyNpbmNsdWRlICJtYmVkdGxzL2NoZWNrX2NvbmZpZy5oIgorCisjZW5kaWYgLyogTUJFRFRMU19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLXRocmVhZC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLXRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MGZlMDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctdGhyZWFkLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqICBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gZm9yIHVzaW5nIFRMUyBhcyBwYXJ0IG9mIFRocmVhZAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKgorICogTWluaW1hbCBjb25maWd1cmF0aW9uIGZvciB1c2luZyBUTFMgYSBwYXJ0IG9mIFRocmVhZAorICogaHR0cDovL3RocmVhZGdyb3VwLm9yZy8KKyAqCisgKiBEaXN0aW5ndWlzaGluZyBmZWF0dXJlczoKKyAqIC0gbm8gUlNBIG9yIGNsYXNzaWMgREgsIGZ1bGx5IGJhc2VkIG9uIEVDQworICogLSBubyBYLjUwOQorICogLSBzdXBwb3J0IGZvciBleHBlcmltZW50YWwgRUMgSi1QQUtFIGtleSBleGNoYW5nZQorICoKKyAqIFNlZSBSRUFETUUudHh0IGZvciB1c2FnZSBpbnN0cnVjdGlvbnMuCisgKi8KKworI2lmbmRlZiBNQkVEVExTX0NPTkZJR19ICisjZGVmaW5lIE1CRURUTFNfQ09ORklHX0gKKworLyogU3lzdGVtIHN1cHBvcnQgKi8KKyNkZWZpbmUgTUJFRFRMU19IQVZFX0FTTQorCisvKiBtYmVkIFRMUyBmZWF0dXJlIHN1cHBvcnQgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9OSVNUX09QVElNCisjZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RICisjZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19EVExTCisjZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkKKyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkKKyNkZWZpbmUgTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMKKworLyogbWJlZCBUTFMgbW9kdWxlcyAqLworI2RlZmluZSBNQkVEVExTX0FFU19DCisjZGVmaW5lIE1CRURUTFNfQVNOMV9QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfQVNOMV9XUklURV9DCisjZGVmaW5lIE1CRURUTFNfQklHTlVNX0MKKyNkZWZpbmUgTUJFRFRMU19DQ01fQworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9DCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfQworI2RlZmluZSBNQkVEVExTX0NNQUNfQworI2RlZmluZSBNQkVEVExTX0VDSlBBS0VfQworI2RlZmluZSBNQkVEVExTX0VDUF9DCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9DCisjZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX0MKKyNkZWZpbmUgTUJFRFRMU19NRF9DCisjZGVmaW5lIE1CRURUTFNfT0lEX0MKKyNkZWZpbmUgTUJFRFRMU19QS19DCisjZGVmaW5lIE1CRURUTFNfUEtfUEFSU0VfQworI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9DCisjZGVmaW5lIE1CRURUTFNfU1NMX0NPT0tJRV9DCisjZGVmaW5lIE1CRURUTFNfU1NMX0NMSV9DCisjZGVmaW5lIE1CRURUTFNfU1NMX1NSVl9DCisjZGVmaW5lIE1CRURUTFNfU1NMX1RMU19DCisKKy8qIEZvciB0ZXN0cyB1c2luZyBzc2wtb3B0LnNoICovCisjZGVmaW5lIE1CRURUTFNfTkVUX0MKKyNkZWZpbmUgTUJFRFRMU19USU1JTkdfQworCisvKiBTYXZlIFJBTSBhdCB0aGUgZXhwZW5zZSBvZiBST00gKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworCisvKiBTYXZlIFJBTSBieSBhZGp1c3RpbmcgdG8gb3VyIGV4YWN0IG5lZWRzICovCisjZGVmaW5lIE1CRURUTFNfRUNQX01BWF9CSVRTICAgICAgICAgICAgIDI1NgorI2RlZmluZSBNQkVEVExTX01QSV9NQVhfU0laRSAgICAgICAgICAgICAgMzIgLy8gMjU2IGJpdHMgaXMgMzIgYnl0ZXMKKworLyogU2F2ZSBST00gYW5kIGEgZmV3IGJ5dGVzIG9mIFJBTSBieSBzcGVjaWZ5aW5nIG91ciBvd24gY2lwaGVyc3VpdGUgbGlzdCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9DSVBIRVJTVUlURVMgTUJFRFRMU19UTFNfRUNKUEFLRV9XSVRIX0FFU18xMjhfQ0NNXzgKKworI2luY2x1ZGUgIm1iZWR0bHMvY2hlY2tfY29uZmlnLmgiCisKKyNlbmRpZiAvKiBNQkVEVExTX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfZW5jZGVjLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfZW5jZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzOGVkMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY19lbmNkZWMuaApAQCAtMCwwICsxLDY5IEBACisvKioKKyAqIEBmaWxlCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kdWxlIGRvY3VtZW50YXRpb24gZmlsZS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoqCisgKiBAYWRkdG9ncm91cCBlbmNkZWNfbW9kdWxlIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2R1bGUKKyAqCisgKiBUaGUgRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZHVsZSBwcm92aWRlcyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gZnVuY3Rpb25zLgorICogT25lIGNhbiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gc3ltbWV0cmljIGFuZCBhc3ltbWV0cmljIGFsZ29yaXRobXM7IHRoZQorICogc3ltbWV0cmljIG9uZXMgYXJlIG1vc3RseSB1c2VkIGZvciBtZXNzYWdlIGNvbmZpZGVudGlhbGl0eSBhbmQgdGhlIGFzeW1tZXRyaWMKKyAqIG9uZXMgZm9yIGtleSBleGNoYW5nZSBhbmQgbWVzc2FnZSBpbnRlZ3JpdHkuCisgKiBTb21lIHN5bW1ldHJpYyBhbGdvcml0aG1zIHByb3ZpZGUgZGlmZmVyZW50IGJsb2NrIGNpcGhlciBtb2RlcywgbWFpbmx5CisgKiBFbGVjdHJvbmljIENvZGUgQm9vayAoRUNCKSB3aGljaCBpcyB1c2VkIGZvciBzaG9ydCAoNjQtYml0KSBtZXNzYWdlcyBhbmQKKyAqIENpcGhlciBCbG9jayBDaGFpbmluZyAoQ0JDKSB3aGljaCBwcm92aWRlcyB0aGUgc3RydWN0dXJlIG5lZWRlZCBmb3IgbG9uZ2VyCisgKiBtZXNzYWdlcy4gSW4gYWRkaXRpb24gdGhlIENpcGhlciBGZWVkYmFjayBNb2RlIChDRkItMTI4KSBzdHJlYW0gY2lwaGVyIG1vZGUsCisgKiBDb3VudGVyIG1vZGUgKENUUikgYW5kIEdhbG9pcyBDb3VudGVyIE1vZGUgKEdDTSkgYXJlIGltcGxlbWVudGVkIGZvcgorICogc3BlY2lmaWMgYWxnb3JpdGhtcy4KKyAqCisgKiBBbGwgc3ltbWV0cmljIGVuY3J5cHRpb24gYWxnb3JpdGhtcyBhcmUgYWNjZXNzaWJsZSB2aWEgdGhlIGdlbmVyaWMgY2lwaGVyIGxheWVyCisgKiAoc2VlIFxjIG1iZWR0bHNfY2lwaGVyX3NldHVwKCkpLgorICoKKyAqIFRoZSBhc3ltbWV0cmljIGVuY3J5cHRyaW9uIGFsZ29yaXRobXMgYXJlIGFjY2Vzc2libGUgdmlhIHRoZSBnZW5lcmljIHB1YmxpYworICoga2V5IGxheWVyIChzZWUgXGMgbWJlZHRsc19wa19pbml0KCkpLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtcyBhcmUgcHJvdmlkZWQ6CisgKiAtIFN5bW1ldHJpYzoKKyAqICAgLSBBRVMgKHNlZSBcYyBtYmVkdGxzX2Flc19jcnlwdF9lY2IoKSwgXGMgbWJlZHRsc19hZXNfY3J5cHRfY2JjKCksIFxjIG1iZWR0bHNfYWVzX2NyeXB0X2NmYjEyOCgpIGFuZAorICogICAgIFxjIG1iZWR0bHNfYWVzX2NyeXB0X2N0cigpKS4KKyAqICAgLSBBUkNGT1VSIChzZWUgXGMgbWJlZHRsc19hcmM0X2NyeXB0KCkpLgorICogICAtIEJsb3dmaXNoIC8gQkYgKHNlZSBcYyBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2VjYigpLCBcYyBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NiYygpLAorICogICAgIFxjIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2ZiNjQoKSBhbmQgXGMgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jdHIoKSkKKyAqICAgLSBDYW1lbGxpYSAoc2VlIFxjIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiKCksIFxjIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2JjKCksCisgKiAgICAgXGMgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jZmIxMjgoKSBhbmQgXGMgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jdHIoKSkuCisgKiAgIC0gREVTLzNERVMgKHNlZSBcYyBtYmVkdGxzX2Rlc19jcnlwdF9lY2IoKSwgXGMgbWJlZHRsc19kZXNfY3J5cHRfY2JjKCksIFxjIG1iZWR0bHNfZGVzM19jcnlwdF9lY2IoKQorICogICAgIGFuZCBcYyBtYmVkdGxzX2RlczNfY3J5cHRfY2JjKCkpLgorICogICAtIEdDTSAoQUVTLUdDTSBhbmQgQ0FNRUxMSUEtR0NNKSAoc2VlIFxjIG1iZWR0bHNfZ2NtX2luaXQoKSkKKyAqICAgLSBYVEVBIChzZWUgXGMgbWJlZHRsc194dGVhX2NyeXB0X2VjYigpKS4KKyAqIC0gQXN5bW1ldHJpYzoKKyAqICAgLSBEaWZmaWUtSGVsbG1hbi1NZXJrbGUgKHNlZSBcYyBtYmVkdGxzX2RobV9yZWFkX3B1YmxpYygpLCBcYyBtYmVkdGxzX2RobV9tYWtlX3B1YmxpYygpCisgKiAgICAgYW5kIFxjIG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0KCkpLgorICogICAtIFJTQSAoc2VlIFxjIG1iZWR0bHNfcnNhX3B1YmxpYygpIGFuZCBcYyBtYmVkdGxzX3JzYV9wcml2YXRlKCkpLgorICogICAtIEVsbGlwdGljIEN1cnZlcyBvdmVyIEdGKHApIChzZWUgXGMgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCgpKS4KKyAqICAgLSBFbGxpcHRpYyBDdXJ2ZSBEaWdpdGFsIFNpZ25hdHVyZSBBbGdvcml0aG0gKEVDRFNBKSAoc2VlIFxjIG1iZWR0bHNfZWNkc2FfaW5pdCgpKS4KKyAqICAgLSBFbGxpcHRpYyBDdXJ2ZSBEaWZmaWUgSGVsbG1hbiAoRUNESCkgKHNlZSBcYyBtYmVkdGxzX2VjZGhfaW5pdCgpKS4KKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2hpY2ggY2FuIGJlIHVzZWQgdG8gcHJvdmlkZQorICogc2VjcmVjeS4KKyAqCisgKiBJdCBhbHNvIHByb3ZpZGVzIGFzeW1tZXRyaWMga2V5IGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgdXNlZCBmb3IKKyAqIGNvbmZpZGVudGlhbGl0eSwgaW50ZWdyaXR5LCBhdXRoZW50aWNhdGlvbiBhbmQgbm9uLXJlcHVkaWF0aW9uLgorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfaGFzaGluZy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX2hhc2hpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWYxNWVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX2hhc2hpbmcuaApAQCAtMCwwICsxLDQxIEBACisvKioKKyAqIEBmaWxlCisgKiBIYXNoaW5nIG1vZHVsZSBkb2N1bWVudGF0aW9uIGZpbGUuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qKgorICogQGFkZHRvZ3JvdXAgaGFzaGluZ19tb2R1bGUgSGFzaGluZyBtb2R1bGUKKyAqCisgKiBUaGUgTWVzc2FnZSBEaWdlc3QgKE1EKSBvciBIYXNoaW5nIG1vZHVsZSBwcm92aWRlcyBvbmUtd2F5IGhhc2hpbmcKKyAqIGZ1bmN0aW9ucy4gU3VjaCBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgaGFzaCBtZXNzYWdlCisgKiBhdXRoZW50aWNhdGlvbiBjb2RlIChITUFDKSB3aGVuIHNlbmRpbmcgYSBtZXNzYWdlLiBTdWNoIGEgSE1BQyBjYW4gYmUgdXNlZAorICogaW4gY29tYmluYXRpb24gd2l0aCBhIHByaXZhdGUga2V5IGZvciBhdXRoZW50aWNhdGlvbiwgd2hpY2ggaXMgYSBtZXNzYWdlCisgKiBpbnRlZ3JpdHkgY29udHJvbC4KKyAqCisgKiBBbGwgaGFzaCBhbGdvcml0aG1zIGNhbiBiZSBhY2Nlc3NlZCB2aWEgdGhlIGdlbmVyaWMgTUQgbGF5ZXIgKHNlZQorICogXGMgbWJlZHRsc19tZF9zZXR1cCgpKQorICoKKyAqIFRoZSBmb2xsb3dpbmcgaGFzaGluZy1hbGdvcml0aG1zIGFyZSBwcm92aWRlZDoKKyAqIC0gTUQyLCBNRDQsIE1ENSAxMjgtYml0IG9uZS13YXkgaGFzaCBmdW5jdGlvbnMgYnkgUm9uIFJpdmVzdC4KKyAqIC0gU0hBLTEsIFNIQS0yNTYsIFNIQS0zODQvNTEyIDE2MC1iaXQgb3IgbW9yZSBvbmUtd2F5IGhhc2ggZnVuY3Rpb25zIGJ5CisgKiAgIE5JU1QgYW5kIE5TQS4KKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBvbmUtd2F5IGhhc2hpbmcgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLgorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfbWFpbnBhZ2UuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY19tYWlucGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTQxNjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfbWFpbnBhZ2UuaApAQCAtMCwwICsxLDkzIEBACisvKioKKyAqIEBmaWxlCisgKiBNYWluIHBhZ2UgZG9jdW1lbnRhdGlvbiBmaWxlLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKioKKyAqIEBtYWlucGFnZSBtYmVkIFRMUyB2Mi40LjEgc291cmNlIGNvZGUgZG9jdW1lbnRhdGlvbgorICoKKyAqIFRoaXMgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgdGhlIGludGVybmFsIHN0cnVjdHVyZSBvZiBtYmVkIFRMUy4gIEl0IHdhcworICogYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzcGVjaWFsbHkgZm9ybWF0dGVkIGNvbW1lbnQgYmxvY2tzIGluCisgKiBtYmVkIFRMUydzIHNvdXJjZSBjb2RlIHVzaW5nIERveHlnZW4uICAoU2VlCisgKiBodHRwOi8vd3d3LnN0YWNrLm5sL35kaW1pdHJpL2RveHlnZW4vIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIERveHlnZW4pCisgKgorICogbWJlZCBUTFMgaGFzIGEgc2ltcGxlIHNldHVwOiBpdCBwcm92aWRlcyB0aGUgaW5ncmVkaWVudHMgZm9yIGFuIFNTTC9UTFMKKyAqIGltcGxlbWVudGF0aW9uLiBUaGVzZSBpbmdyZWRpZW50cyBhcmUgbGlzdGVkIGFzIG1vZHVsZXMgaW4gdGhlCisgKiBccmVmIG1haW5wYWdlX21vZHVsZXMgIk1vZHVsZXMgc2VjdGlvbiIuIFRoaXMgIk1vZHVsZXMgc2VjdGlvbiIgaW50cm9kdWNlcworICogdGhlIGhpZ2gtbGV2ZWwgbW9kdWxlIGNvbmNlcHRzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGRvY3VtZW50YXRpb24uXG4KKyAqIFNvbWUgZXhhbXBsZXMgb2YgbWJlZCBUTFMgdXNhZ2UgY2FuIGJlIGZvdW5kIGluIHRoZSBccmVmIG1haW5wYWdlX2V4YW1wbGVzCisgKiAiRXhhbXBsZXMgc2VjdGlvbiIuCisgKgorICogQHNlY3Rpb24gbWFpbnBhZ2VfbW9kdWxlcyBNb2R1bGVzCisgKgorICogbWJlZCBUTFMgc3VwcG9ydHMgU1NMdjMgdXAgdG8gVExTdjEuMiBjb21tdW5pY2F0aW9uIGJ5IHByb3ZpZGluZyB0aGUKKyAqIGZvbGxvd2luZzoKKyAqIC0gVENQL0lQIGNvbW11bmljYXRpb24gZnVuY3Rpb25zOiBsaXN0ZW4sIGNvbm5lY3QsIGFjY2VwdCwgcmVhZC93cml0ZS4KKyAqIC0gU1NML1RMUyBjb21tdW5pY2F0aW9uIGZ1bmN0aW9uczogaW5pdCwgaGFuZHNoYWtlLCByZWFkL3dyaXRlLgorICogLSBYLjUwOSBmdW5jdGlvbnM6IENSVCwgQ1JMIGFuZCBrZXkgaGFuZGxpbmcKKyAqIC0gUmFuZG9tIG51bWJlciBnZW5lcmF0aW9uCisgKiAtIEhhc2hpbmcKKyAqIC0gRW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKgorICogQWJvdmUgZnVuY3Rpb25zIGFyZSBzcGxpdCB1cCBuZWF0bHkgaW50byBsb2dpY2FsIGludGVyZmFjZXMuIFRoZXNlIGNhbiBiZQorICogdXNlZCBzZXBhcmF0ZWx5IHRvIHByb3ZpZGUgYW55IG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMgb3IgdG8gbWl4LWFuZC1tYXRjaAorICogaW50byBhbiBTU0wgc2VydmVyL2NsaWVudCBzb2x1dGlvbiB0aGF0IHV0aWxpc2VzIGEgWC41MDkgUEtJLiBFeGFtcGxlcyBvZgorICogc3VjaCBpbXBsZW1lbnRhdGlvbnMgYXJlIGFtcGx5IHByb3ZpZGVkIHdpdGggdGhlIHNvdXJjZSBjb2RlLgorICoKKyAqIE5vdGUgdGhhdCBtYmVkIFRMUyBkb2VzIG5vdCBwcm92aWRlIGEgY29udHJvbCBjaGFubmVsIG9yIChtdWx0aXBsZSkgc2Vzc2lvbgorICogaGFuZGxpbmcgd2l0aG91dCBhZGRpdGlvbmFsIHdvcmsgZnJvbSB0aGUgZGV2ZWxvcGVyLgorICoKKyAqIEBzZWN0aW9uIG1haW5wYWdlX2V4YW1wbGVzIEV4YW1wbGVzCisgKgorICogRXhhbXBsZSBzZXJ2ZXIgc2V0dXA6CisgKgorICogXGIgUHJlcmVxdWlzaXRlczoKKyAqIC0gWC41MDkgY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5CisgKiAtIHNlc3Npb24gaGFuZGxpbmcgZnVuY3Rpb25zCisgKgorICogXGIgU2V0dXA6CisgKiAtIExvYWQgeW91ciBjZXJ0aWZpY2F0ZSBhbmQgeW91ciBwcml2YXRlIFJTQSBrZXkgKFguNTA5IGludGVyZmFjZSkKKyAqIC0gU2V0dXAgdGhlIGxpc3RlbmluZyBUQ1Agc29ja2V0IChUQ1AvSVAgaW50ZXJmYWNlKQorICogLSBBY2NlcHQgaW5jb21pbmcgY2xpZW50IGNvbm5lY3Rpb24gKFRDUC9JUCBpbnRlcmZhY2UpCisgKiAtIEluaXRpYWxpc2UgYXMgYW4gU1NMLXNlcnZlciAoU1NML1RMUyBpbnRlcmZhY2UpCisgKiAgIC0gU2V0IHBhcmFtZXRlcnMsIGUuZy4gYXV0aGVudGljYXRpb24sIGNpcGhlcnMsIENBLWNoYWluLCBrZXkgZXhjaGFuZ2UKKyAqICAgLSBTZXQgY2FsbGJhY2sgZnVuY3Rpb25zIFJORywgSU8sIHNlc3Npb24gaGFuZGxpbmcKKyAqIC0gUGVyZm9ybSBhbiBTU0wtaGFuZHNoYWtlIChTU0wvVExTIGludGVyZmFjZSkKKyAqIC0gUmVhZC93cml0ZSBkYXRhIChTU0wvVExTIGludGVyZmFjZSkKKyAqIC0gQ2xvc2UgYW5kIGNsZWFudXAgKGFsbCBpbnRlcmZhY2VzKQorICoKKyAqIEV4YW1wbGUgY2xpZW50IHNldHVwOgorICoKKyAqIFxiIFByZXJlcXVpc2l0ZXM6CisgKiAtIFguNTA5IGNlcnRpZmljYXRlIGFuZCBwcml2YXRlIGtleQorICogLSBYLjUwOSB0cnVzdGVkIENBIGNlcnRpZmljYXRlcworICoKKyAqIFxiIFNldHVwOgorICogLSBMb2FkIHRoZSB0cnVzdGVkIENBIGNlcnRpZmljYXRlcyAoWC41MDkgaW50ZXJmYWNlKQorICogLSBMb2FkIHlvdXIgY2VydGlmaWNhdGUgYW5kIHlvdXIgcHJpdmF0ZSBSU0Ega2V5IChYLjUwOSBpbnRlcmZhY2UpCisgKiAtIFNldHVwIGEgVENQL0lQIGNvbm5lY3Rpb24gKFRDUC9JUCBpbnRlcmZhY2UpCisgKiAtIEluaXRpYWxpc2UgYXMgYW4gU1NMLWNsaWVudCAoU1NML1RMUyBpbnRlcmZhY2UpCisgKiAgIC0gU2V0IHBhcmFtZXRlcnMsIGUuZy4gYXV0aGVudGljYXRpb24gbW9kZSwgY2lwaGVycywgQ0EtY2hhaW4sIHNlc3Npb24KKyAqICAgLSBTZXQgY2FsbGJhY2sgZnVuY3Rpb25zIFJORywgSU8KKyAqIC0gUGVyZm9ybSBhbiBTU0wtaGFuZHNoYWtlIChTU0wvVExTIGludGVyZmFjZSkKKyAqIC0gVmVyaWZ5IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgKFNTTC9UTFMgaW50ZXJmYWNlKQorICogLSBXcml0ZS9yZWFkIGRhdGEgKFNTTC9UTFMgaW50ZXJmYWNlKQorICogLSBDbG9zZSBhbmQgY2xlYW51cCAoYWxsIGludGVyZmFjZXMpCisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY19ybmcuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY19ybmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTU5ZWYzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX3JuZy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKgorICogQGZpbGUKKyAqIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChSTkcpIG1vZHVsZSBkb2N1bWVudGF0aW9uIGZpbGUuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qKgorICogQGFkZHRvZ3JvdXAgcm5nX21vZHVsZSBSYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoUk5HKSBtb2R1bGUKKyAqCisgKiBUaGUgUmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKFJORykgbW9kdWxlIHByb3ZpZGVzIHJhbmRvbSBudW1iZXIKKyAqIGdlbmVyYXRpb24sIHNlZSBcYyBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSgpLgorICoKKyAqIFRoZSBibG9jay1jaXBoZXIgY291bnRlci1tb2RlIGJhc2VkIGRldGVybWluaXN0aWMgcmFuZG9tCisgKiBiaXQgZ2VuZXJhdG9yIChDVFJfREJSRykgYXMgc3BlY2lmaWVkIGluIE5JU1QgU1A4MDAtOTAuIEl0IG5lZWRzIGFuIGV4dGVybmFsCisgKiBzb3VyY2Ugb2YgZW50cm9weS4gRm9yIHRoZXNlIHB1cnBvc2VzIFxjIG1iZWR0bHNfZW50cm9weV9mdW5jKCkgY2FuIGJlIHVzZWQuCisgKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGEgc2ltcGxlIGVudHJvcHkgYWNjdW11bGF0b3IgZGVzaWduLgorICoKKyAqIFRoZSBvdGhlciBudW1iZXIgZ2VuZXJhdG9yIHRoYXQgaXMgaW5jbHVkZWQgaXMgbGVzcyBzdHJvbmcgYW5kIHVzZXMgdGhlCisgKiBIQVZFR0UgKEhBcmR3YXJlIFZvbGF0aWxlIEVudHJvcHkgR2F0aGVyaW5nIGFuZCBFeHBhbnNpb24pIHNvZnR3YXJlIGhldXJpc3RpYworICogd2hpY2ggY29uc2lkZXJlZCB1bnNhZmUgZm9yIHByaW1hcnkgdXNhZ2UsIGJ1dCBwcm92aWRlcyBhZGRpdGlvbmFsIHJhbmRvbQorICogdG8gdGhlIGVudHJvcHkgcG9vbCBpZiBlbmFibGVzLgorICoKKyAqIE1lYW5pbmcgdGhhdCB0aGVyZSBzZWVtcyB0byBiZSBubyBwcmFjdGljYWwgYWxnb3JpdGhtIHRoYXQgY2FuIGd1ZXNzCisgKiB0aGUgbmV4dCBiaXQgd2l0aCBhIHByb2JhYmlsaXR5IGxhcmdlciB0aGFuIDEvMiBpbiBhbiBvdXRwdXQgc2VxdWVuY2UuCisgKgorICogVGhpcyBtb2R1bGUgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgcmFuZG9tIG51bWJlcnMuCisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY19zc2x0bHMuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY19zc2x0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjEwNGJkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX3NzbHRscy5oCkBAIC0wLDAgKzEsNDggQEAKKy8qKgorICogQGZpbGUKKyAqIFNTTC9UTFMgY29tbXVuaWNhdGlvbiBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmaWxlLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKioKKyAqIEBhZGR0b2dyb3VwIHNzbHRsc19jb21tdW5pY2F0aW9uX21vZHVsZSBTU0wvVExTIGNvbW11bmljYXRpb24gbW9kdWxlCisgKgorICogVGhlIFNTTC9UTFMgY29tbXVuaWNhdGlvbiBtb2R1bGUgcHJvdmlkZXMgdGhlIG1lYW5zIHRvIGNyZWF0ZSBhbiBTU0wvVExTCisgKiBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCisgKgorICogVGhlIGJhc2ljIHByb3Zpc2lvbnMgYXJlOgorICogLSBpbml0aWFsaXNlIGFuIFNTTC9UTFMgY29udGV4dCAoc2VlIFxjIG1iZWR0bHNfc3NsX2luaXQoKSkuCisgKiAtIHBlcmZvcm0gYW4gU1NML1RMUyBoYW5kc2hha2UgKHNlZSBcYyBtYmVkdGxzX3NzbF9oYW5kc2hha2UoKSkuCisgKiAtIHJlYWQvd3JpdGUgKHNlZSBcYyBtYmVkdGxzX3NzbF9yZWFkKCkgYW5kIFxjIG1iZWR0bHNfc3NsX3dyaXRlKCkpLgorICogLSBub3RpZnkgYSBwZWVyIHRoYXQgY29ubmVjdGlvbiBpcyBiZWluZyBjbG9zZWQgKHNlZSBcYyBtYmVkdGxzX3NzbF9jbG9zZV9ub3RpZnkoKSkuCisgKgorICogTWFueSBhc3BlY3RzIG9mIHN1Y2ggYSBjaGFubmVsIGFyZSBzZXQgdGhyb3VnaCBwYXJhbWV0ZXJzIGFuZCBjYWxsYmFjaworICogZnVuY3Rpb25zOgorICogLSB0aGUgZW5kcG9pbnQgcm9sZTogY2xpZW50IG9yIHNlcnZlci4KKyAqIC0gdGhlIGF1dGhlbnRpY2F0aW9uIG1vZGUuIFNob3VsZCB2ZXJpZmljYXRpb24gdGFrZSBwbGFjZS4KKyAqIC0gdGhlIEhvc3QtdG8taG9zdCBjb21tdW5pY2F0aW9uIGNoYW5uZWwuIEEgVENQL0lQIG1vZHVsZSBpcyBwcm92aWRlZC4KKyAqIC0gdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChSTkcpLgorICogLSB0aGUgY2lwaGVycyB0byB1c2UgZm9yIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4KKyAqIC0gc2Vzc2lvbiBjb250cm9sIGZ1bmN0aW9ucy4KKyAqIC0gWC41MDkgcGFyYW1ldGVycyBmb3IgY2VydGlmaWNhdGUtaGFuZGxpbmcgYW5kIGtleSBleGNoYW5nZS4KKyAqCisgKiBUaGlzIG1vZHVsZSBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYW4gU1NML1RMUyBzZXJ2ZXIgYW5kIGNsaWVudCBhbmQgdG8gcHJvdmlkZSBhIGJhc2ljCisgKiBmcmFtZXdvcmsgdG8gc2V0dXAgYW5kIGNvbW11bmljYXRlIHRocm91Z2ggYW4gU1NML1RMUyBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXG4KKyAqIE5vdGUgdGhhdCB5b3UgbmVlZCB0byBwcm92aWRlIGZvciBzZXZlcmFsIGFzcGVjdHMgeW91cnNlbGYgYXMgbWVudGlvbmVkIGFib3ZlLgorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfdGNwaXAuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY190Y3BpcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZDNjYTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfdGNwaXAuaApAQCAtMCwwICsxLDQzIEBACisvKioKKyAqIEBmaWxlCisgKiBUQ1AvSVAgY29tbXVuaWNhdGlvbiBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmaWxlLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKioKKyAqIEBhZGR0b2dyb3VwIHRjcGlwX2NvbW11bmljYXRpb25fbW9kdWxlIFRDUC9JUCBjb21tdW5pY2F0aW9uIG1vZHVsZQorICoKKyAqIFRoZSBUQ1AvSVAgY29tbXVuaWNhdGlvbiBtb2R1bGUgcHJvdmlkZXMgZm9yIGEgY2hhbm5lbCBvZgorICogY29tbXVuaWNhdGlvbiBmb3IgdGhlIFxsaW5rIHNzbHRsc19jb21tdW5pY2F0aW9uX21vZHVsZSBTU0wvVExTIGNvbW11bmljYXRpb24KKyAqIG1vZHVsZVxlbmRsaW5rIHRvIHVzZS4KKyAqIEluIHRoZSBUQ1AvSVAtbW9kZWwgaXQgcHJvdmlkZXMgZm9yIGNvbW11bmljYXRpb24gdXAgdG8gdGhlIFRyYW5zcG9ydAorICogKG9yIEhvc3QtdG8taG9zdCkgbGF5ZXIuCisgKiBTU0wvVExTIHJlc2lkZXMgb24gdG9wIG9mIHRoYXQsIGluIHRoZSBBcHBsaWNhdGlvbiBsYXllciwgYW5kIG1ha2VzIHVzZSBvZgorICogaXRzIGJhc2ljIHByb3Zpc2lvbnM6CisgKiAtIGxpc3RlbmluZyBvbiBhIHBvcnQgKHNlZSBcYyBtYmVkdGxzX25ldF9iaW5kKCkpLgorICogLSBhY2NlcHRpbmcgYSBjb25uZWN0aW9uICh0aHJvdWdoIFxjIG1iZWR0bHNfbmV0X2FjY2VwdCgpKS4KKyAqIC0gcmVhZC93cml0ZSAodGhyb3VnaCBcYyBtYmVkdGxzX25ldF9yZWN2KCkvXGMgbWJlZHRsc19uZXRfc2VuZCgpKS4KKyAqIC0gY2xvc2UgYSBjb25uZWN0aW9uICh0aHJvdWdoIFxjIG1iZWR0bHNfbmV0X2Nsb3NlKCkpLgorICoKKyAqIFRoaXMgd2F5IHlvdSBoYXZlIHRoZSBtZWFucyB0bywgZm9yIGV4YW1wbGUsIGltcGxlbWVudCBhbmQgdXNlIGFuIFVEUCBvcgorICogSVBTZWMgY29tbXVuaWNhdGlvbiBzb2x1dGlvbiBhcyBhIGJhc2lzLgorICoKKyAqIFRoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIGF0IHNlcnZlci0gYW5kIGNsaWVudHNpZGUgdG8gcHJvdmlkZSBhIGJhc2ljCisgKiBtZWFucyBvZiBjb21tdW5pY2F0aW9uIG92ZXIgdGhlIGludGVybmV0LgorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfeDUwOS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX3g1MDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTVmMGUzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX3g1MDkuaApAQCAtMCwwICsxLDQyIEBACisvKioKKyAqIEBmaWxlCisgKiBYLjUwOSBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmaWxlLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKioKKyAqIEBhZGR0b2dyb3VwIHg1MDlfbW9kdWxlIFguNTA5IG1vZHVsZQorICoKKyAqIFRoZSBYLjUwOSBtb2R1bGUgcHJvdmlkZXMgWC41MDkgc3VwcG9ydCBmb3IgcmVhZGluZywgd3JpdGluZyBhbmQgdmVyaWZpY2F0aW9uCisgKiBvZiBjZXJ0aWZpY2F0ZXMuCisgKiBJbiBzdW1tYXJ5OgorICogICAtIFguNTA5IGNlcnRpZmljYXRlIChDUlQpIHJlYWRpbmcgKHNlZSBcYyBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCksCisgKiAgICAgXGMgbWJlZHRsc194NTA5X2NydF9wYXJzZV9kZXIoKSwgXGMgbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCkpLgorICogICAtIFguNTA5IGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdCAoQ1JMKSByZWFkaW5nIChzZWUKKyAqICAgICBcYyBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlKCksIFxjIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZGVyKCksCisgKiAgICAgYW5kIFxjIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZmlsZSgpKS4KKyAqICAgLSBYLjUwOSBjZXJ0aWZpY2F0ZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIChzZWUgXGMKKyAqICAgICBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeSgpIGFuZCBcYyBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV93aXRoX3Byb2ZpbGUoKS4KKyAqICAgLSBYLjUwOSBjZXJ0aWZpY2F0ZSB3cml0aW5nIGFuZCBjZXJ0aWZpY2F0ZSByZXF1ZXN0IHdyaXRpbmcgKHNlZQorICogICAgIFxjIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9kZXIoKSBhbmQgXGMgbWJlZHRsc194NTA5d3JpdGVfY3NyX2RlcigpKS4KKyAqCisgKiBUaGlzIG1vZHVsZSBjYW4gYmUgdXNlZCB0byBidWlsZCBhIGNlcnRpZmljYXRlIGF1dGhvcml0eSAoQ0EpIGNoYWluIGFuZAorICogdmVyaWZ5IGl0cyBzaWduYXR1cmUuIEl0IGlzIGFsc28gdXNlZCB0byBnZW5lcmF0ZSBDZXJ0aWZpY2F0ZSBTaWduaW5nCisgKiBSZXF1ZXN0cyBhbmQgWC41MDkgY2VydGlmaWNhdGVzIGp1c3QgYXMgYSBDQSB3b3VsZCBkby4KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vbWJlZHRscy5kb3h5ZmlsZSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL21iZWR0bHMuZG94eWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4Nzk0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL21iZWR0bHMuZG94eWZpbGUKQEAgLTAsMCArMSwxOTExIEBACisjIERveHlmaWxlIDEuOC40CisKKyMgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgc2V0dGluZ3MgdG8gYmUgdXNlZCBieSB0aGUgZG9jdW1lbnRhdGlvbiBzeXN0ZW0KKyMgZG94eWdlbiAod3d3LmRveHlnZW4ub3JnKSBmb3IgYSBwcm9qZWN0LgorIworIyBBbGwgdGV4dCBhZnRlciBhIGRvdWJsZSBoYXNoICgjIykgaXMgY29uc2lkZXJlZCBhIGNvbW1lbnQgYW5kIGlzIHBsYWNlZAorIyBpbiBmcm9udCBvZiB0aGUgVEFHIGl0IGlzIHByZWNlZGluZyAuCisjIEFsbCB0ZXh0IGFmdGVyIGEgaGFzaCAoIykgaXMgY29uc2lkZXJlZCBhIGNvbW1lbnQgYW5kIHdpbGwgYmUgaWdub3JlZC4KKyMgVGhlIGZvcm1hdCBpczoKKyMgICAgICAgVEFHID0gdmFsdWUgW3ZhbHVlLCAuLi5dCisjIEZvciBsaXN0cyBpdGVtcyBjYW4gYWxzbyBiZSBhcHBlbmRlZCB1c2luZzoKKyMgICAgICAgVEFHICs9IHZhbHVlIFt2YWx1ZSwgLi4uXQorIyBWYWx1ZXMgdGhhdCBjb250YWluIHNwYWNlcyBzaG91bGQgYmUgcGxhY2VkIGJldHdlZW4gcXVvdGVzICgiICIpLgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2plY3QgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGlzIHRhZyBzcGVjaWZpZXMgdGhlIGVuY29kaW5nIHVzZWQgZm9yIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBjb25maWcgZmlsZQorIyB0aGF0IGZvbGxvdy4gVGhlIGRlZmF1bHQgaXMgVVRGLTggd2hpY2ggaXMgYWxzbyB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgYWxsCisjIHRleHQgYmVmb3JlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoaXMgdGFnLiBEb3h5Z2VuIHVzZXMgbGliaWNvbnYgKG9yIHRoZQorIyBpY29udiBidWlsdCBpbnRvIGxpYmMpIGZvciB0aGUgdHJhbnNjb2RpbmcuIFNlZQorIyBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWNvbnYgZm9yIHRoZSBsaXN0IG9mIHBvc3NpYmxlIGVuY29kaW5ncy4KKworRE9YWUZJTEVfRU5DT0RJTkcgICAgICA9IFVURi04CisKKyMgVGhlIFBST0pFQ1RfTkFNRSB0YWcgaXMgYSBzaW5nbGUgd29yZCAob3Igc2VxdWVuY2Ugb2Ygd29yZHMpIHRoYXQgc2hvdWxkCisjIGlkZW50aWZ5IHRoZSBwcm9qZWN0LiBOb3RlIHRoYXQgaWYgeW91IGRvIG5vdCB1c2UgRG94eXdpemFyZCB5b3UgbmVlZAorIyB0byBwdXQgcXVvdGVzIGFyb3VuZCB0aGUgcHJvamVjdCBuYW1lIGlmIGl0IGNvbnRhaW5zIHNwYWNlcy4KKworUFJPSkVDVF9OQU1FICAgICAgICAgICA9ICJtYmVkIFRMUyB2Mi40LjEiCisKKyMgVGhlIFBST0pFQ1RfTlVNQkVSIHRhZyBjYW4gYmUgdXNlZCB0byBlbnRlciBhIHByb2plY3Qgb3IgcmV2aXNpb24gbnVtYmVyLgorIyBUaGlzIGNvdWxkIGJlIGhhbmR5IGZvciBhcmNoaXZpbmcgdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIG9yCisjIGlmIHNvbWUgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBpcyB1c2VkLgorCitQUk9KRUNUX05VTUJFUiAgICAgICAgID0KKworIyBVc2luZyB0aGUgUFJPSkVDVF9CUklFRiB0YWcgb25lIGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIG9uZSBsaW5lIGRlc2NyaXB0aW9uCisjIGZvciBhIHByb2plY3QgdGhhdCBhcHBlYXJzIGF0IHRoZSB0b3Agb2YgZWFjaCBwYWdlIGFuZCBzaG91bGQgZ2l2ZSB2aWV3ZXIKKyMgYSBxdWljayBpZGVhIGFib3V0IHRoZSBwdXJwb3NlIG9mIHRoZSBwcm9qZWN0LiBLZWVwIHRoZSBkZXNjcmlwdGlvbiBzaG9ydC4KKworUFJPSkVDVF9CUklFRiAgICAgICAgICA9CisKKyMgV2l0aCB0aGUgUFJPSkVDVF9MT0dPIHRhZyBvbmUgY2FuIHNwZWNpZnkgYW4gbG9nbyBvciBpY29uIHRoYXQgaXMKKyMgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uIFRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgbG9nbyBzaG91bGQgbm90CisjIGV4Y2VlZCA1NSBwaXhlbHMgYW5kIHRoZSBtYXhpbXVtIHdpZHRoIHNob3VsZCBub3QgZXhjZWVkIDIwMCBwaXhlbHMuCisjIERveHlnZW4gd2lsbCBjb3B5IHRoZSBsb2dvIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LgorCitQUk9KRUNUX0xPR08gICAgICAgICAgID0KKworIyBUaGUgT1VUUFVUX0RJUkVDVE9SWSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSAocmVsYXRpdmUgb3IgYWJzb2x1dGUpCisjIGJhc2UgcGF0aCB3aGVyZSB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkLCBpdCB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbgorIyB3aGVyZSBkb3h5Z2VuIHdhcyBzdGFydGVkLiBJZiBsZWZ0IGJsYW5rIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQuCisKK09VVFBVVF9ESVJFQ1RPUlkgICAgICAgPSBhcGlkb2MvCisKKyMgSWYgdGhlIENSRUFURV9TVUJESVJTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCBjcmVhdGUKKyMgNDA5NiBzdWItZGlyZWN0b3JpZXMgKGluIDIgbGV2ZWxzKSB1bmRlciB0aGUgb3V0cHV0IGRpcmVjdG9yeSBvZiBlYWNoIG91dHB1dAorIyBmb3JtYXQgYW5kIHdpbGwgZGlzdHJpYnV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzIG92ZXIgdGhlc2UgZGlyZWN0b3JpZXMuCisjIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBmZWVkaW5nIGRveHlnZW4gYSBodWdlIGFtb3VudCBvZgorIyBzb3VyY2UgZmlsZXMsIHdoZXJlIHB1dHRpbmcgYWxsIGdlbmVyYXRlZCBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd291bGQKKyMgb3RoZXJ3aXNlIGNhdXNlIHBlcmZvcm1hbmNlIHByb2JsZW1zIGZvciB0aGUgZmlsZSBzeXN0ZW0uCisKK0NSRUFURV9TVUJESVJTICAgICAgICAgPSBOTworCisjIFRoZSBPVVRQVVRfTEFOR1VBR0UgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGFuZ3VhZ2UgaW4gd2hpY2ggYWxsCisjIGRvY3VtZW50YXRpb24gZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaXMgd3JpdHRlbi4gRG94eWdlbiB3aWxsIHVzZSB0aGlzCisjIGluZm9ybWF0aW9uIHRvIGdlbmVyYXRlIGFsbCBjb25zdGFudCBvdXRwdXQgaW4gdGhlIHByb3BlciBsYW5ndWFnZS4KKyMgVGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgRW5nbGlzaCwgb3RoZXIgc3VwcG9ydGVkIGxhbmd1YWdlcyBhcmU6CisjIEFmcmlrYWFucywgQXJhYmljLCBCcmF6aWxpYW4sIENhdGFsYW4sIENoaW5lc2UsIENoaW5lc2UtVHJhZGl0aW9uYWwsCisjIENyb2F0aWFuLCBDemVjaCwgRGFuaXNoLCBEdXRjaCwgRXNwZXJhbnRvLCBGYXJzaSwgRmlubmlzaCwgRnJlbmNoLCBHZXJtYW4sCisjIEdyZWVrLCBIdW5nYXJpYW4sIEl0YWxpYW4sIEphcGFuZXNlLCBKYXBhbmVzZS1lbiAoSmFwYW5lc2Ugd2l0aCBFbmdsaXNoCisjIG1lc3NhZ2VzKSwgS29yZWFuLCBLb3JlYW4tZW4sIExhdHZpYW4sIExpdGh1YW5pYW4sIE5vcndlZ2lhbiwgTWFjZWRvbmlhbiwKKyMgUGVyc2lhbiwgUG9saXNoLCBQb3J0dWd1ZXNlLCBSb21hbmlhbiwgUnVzc2lhbiwgU2VyYmlhbiwgU2VyYmlhbi1DeXJpbGxpYywKKyMgU2xvdmFrLCBTbG92ZW5lLCBTcGFuaXNoLCBTd2VkaXNoLCBVa3JhaW5pYW4sIGFuZCBWaWV0bmFtZXNlLgorCitPVVRQVVRfTEFOR1VBR0UgICAgICAgID0gRW5nbGlzaAorCisjIElmIHRoZSBCUklFRl9NRU1CRVJfREVTQyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbAorIyBpbmNsdWRlIGJyaWVmIG1lbWJlciBkZXNjcmlwdGlvbnMgYWZ0ZXIgdGhlIG1lbWJlcnMgdGhhdCBhcmUgbGlzdGVkIGluCisjIHRoZSBmaWxlIGFuZCBjbGFzcyBkb2N1bWVudGF0aW9uIChzaW1pbGFyIHRvIEphdmFEb2MpLgorIyBTZXQgdG8gTk8gdG8gZGlzYWJsZSB0aGlzLgorCitCUklFRl9NRU1CRVJfREVTQyAgICAgID0gWUVTCisKKyMgSWYgdGhlIFJFUEVBVF9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCBwcmVwZW5kCisjIHRoZSBicmllZiBkZXNjcmlwdGlvbiBvZiBhIG1lbWJlciBvciBmdW5jdGlvbiBiZWZvcmUgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLgorIyBOb3RlOiBpZiBib3RoIEhJREVfVU5ET0NfTUVNQkVSUyBhbmQgQlJJRUZfTUVNQkVSX0RFU0MgYXJlIHNldCB0byBOTywgdGhlCisjIGJyaWVmIGRlc2NyaXB0aW9ucyB3aWxsIGJlIGNvbXBsZXRlbHkgc3VwcHJlc3NlZC4KKworUkVQRUFUX0JSSUVGICAgICAgICAgICA9IFlFUworCisjIFRoaXMgdGFnIGltcGxlbWVudHMgYSBxdWFzaS1pbnRlbGxpZ2VudCBicmllZiBkZXNjcmlwdGlvbiBhYmJyZXZpYXRvcgorIyB0aGF0IGlzIHVzZWQgdG8gZm9ybSB0aGUgdGV4dCBpbiB2YXJpb3VzIGxpc3RpbmdzLiBFYWNoIHN0cmluZworIyBpbiB0aGlzIGxpc3QsIGlmIGZvdW5kIGFzIHRoZSBsZWFkaW5nIHRleHQgb2YgdGhlIGJyaWVmIGRlc2NyaXB0aW9uLCB3aWxsIGJlCisjIHN0cmlwcGVkIGZyb20gdGhlIHRleHQgYW5kIHRoZSByZXN1bHQgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgd2hvbGUgbGlzdCwgaXMKKyMgdXNlZCBhcyB0aGUgYW5ub3RhdGVkIHRleHQuIE90aGVyd2lzZSwgdGhlIGJyaWVmIGRlc2NyaXB0aW9uIGlzIHVzZWQgYXMtaXMuCisjIElmIGxlZnQgYmxhbmssIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB1c2VkICgiJG5hbWUiIGlzIGF1dG9tYXRpY2FsbHkKKyMgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZW50aXR5KTogIlRoZSAkbmFtZSBjbGFzcyIgIlRoZSAkbmFtZSB3aWRnZXQiCisjICJUaGUgJG5hbWUgZmlsZSIgImlzIiAicHJvdmlkZXMiICJzcGVjaWZpZXMiICJjb250YWlucyIKKyMgInJlcHJlc2VudHMiICJhIiAiYW4iICJ0aGUiCisKK0FCQlJFVklBVEVfQlJJRUYgICAgICAgPSAiVGhlICRuYW1lIGNsYXNzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSAkbmFtZSB3aWRnZXQiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlICRuYW1lIGZpbGUiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFuIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKworIyBJZiB0aGUgQUxXQVlTX0RFVEFJTEVEX1NFQyBhbmQgUkVQRUFUX0JSSUVGIHRhZ3MgYXJlIGJvdGggc2V0IHRvIFlFUyB0aGVuCisjIERveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGRldGFpbGVkIHNlY3Rpb24gZXZlbiBpZiB0aGVyZSBpcyBvbmx5IGEgYnJpZWYKKyMgZGVzY3JpcHRpb24uCisKK0FMV0FZU19ERVRBSUxFRF9TRUMgICAgPSBOTworCisjIElmIHRoZSBJTkxJTkVfSU5IRVJJVEVEX01FTUIgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBzaG93IGFsbAorIyBpbmhlcml0ZWQgbWVtYmVycyBvZiBhIGNsYXNzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgY2xhc3MgYXMgaWYgdGhvc2UKKyMgbWVtYmVycyB3ZXJlIG9yZGluYXJ5IGNsYXNzIG1lbWJlcnMuIENvbnN0cnVjdG9ycywgZGVzdHJ1Y3RvcnMgYW5kIGFzc2lnbm1lbnQKKyMgb3BlcmF0b3JzIG9mIHRoZSBiYXNlIGNsYXNzZXMgd2lsbCBub3QgYmUgc2hvd24uCisKK0lOTElORV9JTkhFUklURURfTUVNQiAgPSBOTworCisjIElmIHRoZSBGVUxMX1BBVEhfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuIHdpbGwgcHJlcGVuZCB0aGUgZnVsbAorIyBwYXRoIGJlZm9yZSBmaWxlcyBuYW1lIGluIHRoZSBmaWxlIGxpc3QgYW5kIGluIHRoZSBoZWFkZXIgZmlsZXMuIElmIHNldAorIyB0byBOTyB0aGUgc2hvcnRlc3QgcGF0aCB0aGF0IG1ha2VzIHRoZSBmaWxlIG5hbWUgdW5pcXVlIHdpbGwgYmUgdXNlZC4KKworRlVMTF9QQVRIX05BTUVTICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEZVTExfUEFUSF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHRoZSBTVFJJUF9GUk9NX1BBVEggdGFnCisjIGNhbiBiZSB1c2VkIHRvIHN0cmlwIGEgdXNlci1kZWZpbmVkIHBhcnQgb2YgdGhlIHBhdGguIFN0cmlwcGluZyBpcworIyBvbmx5IGRvbmUgaWYgb25lIG9mIHRoZSBzcGVjaWZpZWQgc3RyaW5ncyBtYXRjaGVzIHRoZSBsZWZ0LWhhbmQgcGFydCBvZgorIyB0aGUgcGF0aC4gVGhlIHRhZyBjYW4gYmUgdXNlZCB0byBzaG93IHJlbGF0aXZlIHBhdGhzIGluIHRoZSBmaWxlIGxpc3QuCisjIElmIGxlZnQgYmxhbmsgdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRveHlnZW4gaXMgcnVuIGlzIHVzZWQgYXMgdGhlCisjIHBhdGggdG8gc3RyaXAuIE5vdGUgdGhhdCB5b3Ugc3BlY2lmeSBhYnNvbHV0ZSBwYXRocyBoZXJlLCBidXQgYWxzbworIyByZWxhdGl2ZSBwYXRocywgd2hpY2ggd2lsbCBiZSByZWxhdGl2ZSBmcm9tIHRoZSBkaXJlY3Rvcnkgd2hlcmUgZG94eWdlbiBpcworIyBzdGFydGVkLgorCitTVFJJUF9GUk9NX1BBVEggICAgICAgID0KKworIyBUaGUgU1RSSVBfRlJPTV9JTkNfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3RyaXAgYSB1c2VyLWRlZmluZWQgcGFydCBvZgorIyB0aGUgcGF0aCBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgYSBjbGFzcywgd2hpY2ggdGVsbHMKKyMgdGhlIHJlYWRlciB3aGljaCBoZWFkZXIgZmlsZSB0byBpbmNsdWRlIGluIG9yZGVyIHRvIHVzZSBhIGNsYXNzLgorIyBJZiBsZWZ0IGJsYW5rIG9ubHkgdGhlIG5hbWUgb2YgdGhlIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgdGhlIGNsYXNzCisjIGRlZmluaXRpb24gaXMgdXNlZC4gT3RoZXJ3aXNlIG9uZSBzaG91bGQgc3BlY2lmeSB0aGUgaW5jbHVkZSBwYXRocyB0aGF0CisjIGFyZSBub3JtYWxseSBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyIHVzaW5nIHRoZSAtSSBmbGFnLgorCitTVFJJUF9GUk9NX0lOQ19QQVRIICAgID0KKworIyBJZiB0aGUgU0hPUlRfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBtdWNoIHNob3J0ZXIKKyMgKGJ1dCBsZXNzIHJlYWRhYmxlKSBmaWxlIG5hbWVzLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91ciBmaWxlIHN5c3RlbQorIyBkb2Vzbid0IHN1cHBvcnQgbG9uZyBuYW1lcyBsaWtlIG9uIERPUywgTWFjLCBvciBDRC1ST00uCisKK1NIT1JUX05BTUVTICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBKQVZBRE9DX0FVVE9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIERveHlnZW4KKyMgd2lsbCBpbnRlcnByZXQgdGhlIGZpcnN0IGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgSmF2YURvYy1zdHlsZQorIyBjb21tZW50IGFzIHRoZSBicmllZiBkZXNjcmlwdGlvbi4gSWYgc2V0IHRvIE5PLCB0aGUgSmF2YURvYworIyBjb21tZW50cyB3aWxsIGJlaGF2ZSBqdXN0IGxpa2UgcmVndWxhciBRdC1zdHlsZSBjb21tZW50cworIyAodGh1cyByZXF1aXJpbmcgYW4gZXhwbGljaXQgQGJyaWVmIGNvbW1hbmQgZm9yIGEgYnJpZWYgZGVzY3JpcHRpb24uKQorCitKQVZBRE9DX0FVVE9CUklFRiAgICAgID0gWUVTCisKKyMgSWYgdGhlIFFUX0FVVE9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIERveHlnZW4gd2lsbAorIyBpbnRlcnByZXQgdGhlIGZpcnN0IGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgUXQtc3R5bGUKKyMgY29tbWVudCBhcyB0aGUgYnJpZWYgZGVzY3JpcHRpb24uIElmIHNldCB0byBOTywgdGhlIGNvbW1lbnRzCisjIHdpbGwgYmVoYXZlIGp1c3QgbGlrZSByZWd1bGFyIFF0LXN0eWxlIGNvbW1lbnRzICh0aHVzIHJlcXVpcmluZworIyBhbiBleHBsaWNpdCBcYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4pCisKK1FUX0FVVE9CUklFRiAgICAgICAgICAgPSBOTworCisjIFRoZSBNVUxUSUxJTkVfQ1BQX0lTX0JSSUVGIHRhZyBjYW4gYmUgc2V0IHRvIFlFUyB0byBtYWtlIERveHlnZW4KKyMgdHJlYXQgYSBtdWx0aS1saW5lIEMrKyBzcGVjaWFsIGNvbW1lbnQgYmxvY2sgKGkuZS4gYSBibG9jayBvZiAvLyEgb3IgLy8vCisjIGNvbW1lbnRzKSBhcyBhIGJyaWVmIGRlc2NyaXB0aW9uLiBUaGlzIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorIyBUaGUgbmV3IGRlZmF1bHQgaXMgdG8gdHJlYXQgYSBtdWx0aS1saW5lIEMrKyBjb21tZW50IGJsb2NrIGFzIGEgZGV0YWlsZWQKKyMgZGVzY3JpcHRpb24uIFNldCB0aGlzIHRhZyB0byBZRVMgaWYgeW91IHByZWZlciB0aGUgb2xkIGJlaGF2aW91ciBpbnN0ZWFkLgorCitNVUxUSUxJTkVfQ1BQX0lTX0JSSUVGID0gTk8KKworIyBJZiB0aGUgSU5IRVJJVF9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBhbiB1bmRvY3VtZW50ZWQKKyMgbWVtYmVyIGluaGVyaXRzIHRoZSBkb2N1bWVudGF0aW9uIGZyb20gYW55IGRvY3VtZW50ZWQgbWVtYmVyIHRoYXQgaXQKKyMgcmUtaW1wbGVtZW50cy4KKworSU5IRVJJVF9ET0NTICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBTRVBBUkFURV9NRU1CRVJfUEFHRVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHByb2R1Y2UKKyMgYSBuZXcgcGFnZSBmb3IgZWFjaCBtZW1iZXIuIElmIHNldCB0byBOTywgdGhlIGRvY3VtZW50YXRpb24gb2YgYSBtZW1iZXIgd2lsbAorIyBiZSBwYXJ0IG9mIHRoZSBmaWxlL2NsYXNzL25hbWVzcGFjZSB0aGF0IGNvbnRhaW5zIGl0LgorCitTRVBBUkFURV9NRU1CRVJfUEFHRVMgID0gTk8KKworIyBUaGUgVEFCX1NJWkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIHNwYWNlcyBpbiBhIHRhYi4KKyMgRG94eWdlbiB1c2VzIHRoaXMgdmFsdWUgdG8gcmVwbGFjZSB0YWJzIGJ5IHNwYWNlcyBpbiBjb2RlIGZyYWdtZW50cy4KKworVEFCX1NJWkUgICAgICAgICAgICAgICA9IDgKKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbnVtYmVyIG9mIGFsaWFzZXMgdGhhdCBhY3RzCisjIGFzIGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLiBBbiBhbGlhcyBoYXMgdGhlIGZvcm0gIm5hbWU9dmFsdWUiLgorIyBGb3IgZXhhbXBsZSBhZGRpbmcgInNpZGVlZmZlY3Q9XHBhciBTaWRlIEVmZmVjdHM6XG4iIHdpbGwgYWxsb3cgeW91IHRvCisjIHB1dCB0aGUgY29tbWFuZCBcc2lkZWVmZmVjdCAob3IgQHNpZGVlZmZlY3QpIGluIHRoZSBkb2N1bWVudGF0aW9uLCB3aGljaAorIyB3aWxsIHJlc3VsdCBpbiBhIHVzZXItZGVmaW5lZCBwYXJhZ3JhcGggd2l0aCBoZWFkaW5nICJTaWRlIEVmZmVjdHM6Ii4KKyMgWW91IGNhbiBwdXQgXG4ncyBpbiB0aGUgdmFsdWUgcGFydCBvZiBhbiBhbGlhcyB0byBpbnNlcnQgbmV3bGluZXMuCisKK0FMSUFTRVMgICAgICAgICAgICAgICAgPQorCisjIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBudW1iZXIgb2Ygd29yZC1rZXl3b3JkIG1hcHBpbmdzIChUQ0wgb25seSkuCisjIEEgbWFwcGluZyBoYXMgdGhlIGZvcm0gIm5hbWU9dmFsdWUiLiBGb3IgZXhhbXBsZSBhZGRpbmcKKyMgImNsYXNzPWl0Y2w6OmNsYXNzIiB3aWxsIGFsbG93IHlvdSB0byB1c2UgdGhlIGNvbW1hbmQgY2xhc3MgaW4gdGhlCisjIGl0Y2w6OmNsYXNzIG1lYW5pbmcuCisKK1RDTF9TVUJTVCAgICAgICAgICAgICAgPQorCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0ZPUl9DIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIEMKKyMgc291cmNlcyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkIGZvciBDLgorIyBGb3IgaW5zdGFuY2UsIHNvbWUgb2YgdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgd2lsbCBiZSBkaWZmZXJlbnQuIFRoZSBsaXN0CisjIG9mIGFsbCBtZW1iZXJzIHdpbGwgYmUgb21pdHRlZCwgZXRjLgorCitPUFRJTUlaRV9PVVRQVVRfRk9SX0MgID0gWUVTCisKKyMgU2V0IHRoZSBPUFRJTUlaRV9PVVRQVVRfSkFWQSB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBKYXZhCisjIHNvdXJjZXMgb25seS4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgbW9yZSB0YWlsb3JlZCBmb3IKKyMgSmF2YS4gRm9yIGluc3RhbmNlLCBuYW1lc3BhY2VzIHdpbGwgYmUgcHJlc2VudGVkIGFzIHBhY2thZ2VzLCBxdWFsaWZpZWQKKyMgc2NvcGVzIHdpbGwgbG9vayBkaWZmZXJlbnQsIGV0Yy4KKworT1BUSU1JWkVfT1VUUFVUX0pBVkEgICA9IE5PCisKKyMgU2V0IHRoZSBPUFRJTUlaRV9GT1JfRk9SVFJBTiB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBGb3J0cmFuCisjIHNvdXJjZXMgb25seS4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgbW9yZSB0YWlsb3JlZCBmb3IKKyMgRm9ydHJhbi4KKworT1BUSU1JWkVfRk9SX0ZPUlRSQU4gICA9IE5PCisKKyMgU2V0IHRoZSBPUFRJTUlaRV9PVVRQVVRfVkhETCB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBWSERMCisjIHNvdXJjZXMuIERveHlnZW4gd2lsbCB0aGVuIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIHRhaWxvcmVkIGZvcgorIyBWSERMLgorCitPUFRJTUlaRV9PVVRQVVRfVkhETCAgID0gTk8KKworIyBEb3h5Z2VuIHNlbGVjdHMgdGhlIHBhcnNlciB0byB1c2UgZGVwZW5kaW5nIG9uIHRoZSBleHRlbnNpb24gb2YgdGhlIGZpbGVzIGl0CisjIHBhcnNlcy4gV2l0aCB0aGlzIHRhZyB5b3UgY2FuIGFzc2lnbiB3aGljaCBwYXJzZXIgdG8gdXNlIGZvciBhIGdpdmVuCisjIGV4dGVuc2lvbi4gRG94eWdlbiBoYXMgYSBidWlsdC1pbiBtYXBwaW5nLCBidXQgeW91IGNhbiBvdmVycmlkZSBvciBleHRlbmQgaXQKKyMgdXNpbmcgdGhpcyB0YWcuIFRoZSBmb3JtYXQgaXMgZXh0PWxhbmd1YWdlLCB3aGVyZSBleHQgaXMgYSBmaWxlIGV4dGVuc2lvbiwKKyMgYW5kIGxhbmd1YWdlIGlzIG9uZSBvZiB0aGUgcGFyc2VycyBzdXBwb3J0ZWQgYnkgZG94eWdlbjogSURMLCBKYXZhLAorIyBKYXZhc2NyaXB0LCBDU2hhcnAsIEMsIEMrKywgRCwgUEhQLCBPYmplY3RpdmUtQywgUHl0aG9uLCBGb3J0cmFuLCBWSERMLCBDLAorIyBDKysuIEZvciBpbnN0YW5jZSB0byBtYWtlIGRveHlnZW4gdHJlYXQgLmluYyBmaWxlcyBhcyBGb3J0cmFuIGZpbGVzIChkZWZhdWx0CisjIGlzIFBIUCksIGFuZCAuZiBmaWxlcyBhcyBDIChkZWZhdWx0IGlzIEZvcnRyYW4pLCB1c2U6IGluYz1Gb3J0cmFuIGY9Qy4gTm90ZQorIyB0aGF0IGZvciBjdXN0b20gZXh0ZW5zaW9ucyB5b3UgYWxzbyBuZWVkIHRvIHNldCBGSUxFX1BBVFRFUk5TIG90aGVyd2lzZSB0aGUKKyMgZmlsZXMgYXJlIG5vdCByZWFkIGJ5IGRveHlnZW4uCisKK0VYVEVOU0lPTl9NQVBQSU5HICAgICAgPQorCisjIElmIE1BUktET1dOX1NVUFBPUlQgaXMgZW5hYmxlZCAodGhlIGRlZmF1bHQpIHRoZW4gZG94eWdlbiBwcmUtcHJvY2Vzc2VzIGFsbAorIyBjb21tZW50cyBhY2NvcmRpbmcgdG8gdGhlIE1hcmtkb3duIGZvcm1hdCwgd2hpY2ggYWxsb3dzIGZvciBtb3JlIHJlYWRhYmxlCisjIGRvY3VtZW50YXRpb24uIFNlZSBodHRwOi8vZGFyaW5nZmlyZWJhbGwubmV0L3Byb2plY3RzL21hcmtkb3duLyBmb3IgZGV0YWlscy4KKyMgVGhlIG91dHB1dCBvZiBtYXJrZG93biBwcm9jZXNzaW5nIGlzIGZ1cnRoZXIgcHJvY2Vzc2VkIGJ5IGRveHlnZW4sIHNvIHlvdQorIyBjYW4gbWl4IGRveHlnZW4sIEhUTUwsIGFuZCBYTUwgY29tbWFuZHMgd2l0aCBNYXJrZG93biBmb3JtYXR0aW5nLgorIyBEaXNhYmxlIG9ubHkgaW4gY2FzZSBvZiBiYWNrd2FyZCBjb21wYXRpYmlsaXRpZXMgaXNzdWVzLgorCitNQVJLRE9XTl9TVVBQT1JUICAgICAgID0gWUVTCisKKyMgV2hlbiBlbmFibGVkIGRveHlnZW4gdHJpZXMgdG8gbGluayB3b3JkcyB0aGF0IGNvcnJlc3BvbmQgdG8gZG9jdW1lbnRlZAorIyBjbGFzc2VzLCBvciBuYW1lc3BhY2VzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbi4gU3VjaCBhIGxpbmsgY2FuCisjIGJlIHByZXZlbnRlZCBpbiBpbmRpdmlkdWFsIGNhc2VzIGJ5IGJ5IHB1dHRpbmcgYSAlIHNpZ24gaW4gZnJvbnQgb2YgdGhlIHdvcmQKKyMgb3IgZ2xvYmFsbHkgYnkgc2V0dGluZyBBVVRPTElOS19TVVBQT1JUIHRvIE5PLgorCitBVVRPTElOS19TVVBQT1JUICAgICAgID0gWUVTCisKKyMgSWYgeW91IHVzZSBTVEwgY2xhc3NlcyAoaS5lLiBzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3IsIGV0Yy4pIGJ1dCBkbyBub3Qgd2FudAorIyB0byBpbmNsdWRlIChhIHRhZyBmaWxlIGZvcikgdGhlIFNUTCBzb3VyY2VzIGFzIGlucHV0LCB0aGVuIHlvdSBzaG91bGQKKyMgc2V0IHRoaXMgdGFnIHRvIFlFUyBpbiBvcmRlciB0byBsZXQgZG94eWdlbiBtYXRjaCBmdW5jdGlvbnMgZGVjbGFyYXRpb25zIGFuZAorIyBkZWZpbml0aW9ucyB3aG9zZSBhcmd1bWVudHMgY29udGFpbiBTVEwgY2xhc3NlcyAoZS5nLiBmdW5jKHN0ZDo6c3RyaW5nKTsgdi5zLgorIyBmdW5jKHN0ZDo6c3RyaW5nKSB7fSkuIFRoaXMgYWxzbyBtYWtlcyB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24KKyMgZGlhZ3JhbXMgdGhhdCBpbnZvbHZlIFNUTCBjbGFzc2VzIG1vcmUgY29tcGxldGUgYW5kIGFjY3VyYXRlLgorCitCVUlMVElOX1NUTF9TVVBQT1JUICAgID0gTk8KKworIyBJZiB5b3UgdXNlIE1pY3Jvc29mdCdzIEMrKy9DTEkgbGFuZ3VhZ2UsIHlvdSBzaG91bGQgc2V0IHRoaXMgb3B0aW9uIHRvIFlFUyB0bworIyBlbmFibGUgcGFyc2luZyBzdXBwb3J0LgorCitDUFBfQ0xJX1NVUFBPUlQgICAgICAgID0gTk8KKworIyBTZXQgdGhlIFNJUF9TVVBQT1JUIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIHNpcCBzb3VyY2VzIG9ubHkuCisjIERveHlnZW4gd2lsbCBwYXJzZSB0aGVtIGxpa2Ugbm9ybWFsIEMrKyBidXQgd2lsbCBhc3N1bWUgYWxsIGNsYXNzZXMgdXNlIHB1YmxpYworIyBpbnN0ZWFkIG9mIHByaXZhdGUgaW5oZXJpdGFuY2Ugd2hlbiBubyBleHBsaWNpdCBwcm90ZWN0aW9uIGtleXdvcmQgaXMgcHJlc2VudC4KKworU0lQX1NVUFBPUlQgICAgICAgICAgICA9IE5PCisKKyMgRm9yIE1pY3Jvc29mdCdzIElETCB0aGVyZSBhcmUgcHJvcGdldCBhbmQgcHJvcHB1dCBhdHRyaWJ1dGVzIHRvIGluZGljYXRlCisjIGdldHRlciBhbmQgc2V0dGVyIG1ldGhvZHMgZm9yIGEgcHJvcGVydHkuIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gWUVTICh0aGUKKyMgZGVmYXVsdCkgd2lsbCBtYWtlIGRveHlnZW4gcmVwbGFjZSB0aGUgZ2V0IGFuZCBzZXQgbWV0aG9kcyBieSBhIHByb3BlcnR5IGluCisjIHRoZSBkb2N1bWVudGF0aW9uLiBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBtZXRob2RzIGFyZSBpbmRlZWQgZ2V0dGluZyBvcgorIyBzZXR0aW5nIGEgc2ltcGxlIHR5cGUuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBvciB5b3Ugd2FudCB0byBzaG93IHRoZQorIyBtZXRob2RzIGFueXdheSwgeW91IHNob3VsZCBzZXQgdGhpcyBvcHRpb24gdG8gTk8uCisKK0lETF9QUk9QRVJUWV9TVVBQT1JUICAgPSBZRVMKKworIyBJZiBtZW1iZXIgZ3JvdXBpbmcgaXMgdXNlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIERJU1RSSUJVVEVfR1JPVVBfRE9DCisjIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCByZXVzZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZmlyc3QKKyMgbWVtYmVyIGluIHRoZSBncm91cCAoaWYgYW55KSBmb3IgdGhlIG90aGVyIG1lbWJlcnMgb2YgdGhlIGdyb3VwLiBCeSBkZWZhdWx0CisjIGFsbCBtZW1iZXJzIG9mIGEgZ3JvdXAgbXVzdCBiZSBkb2N1bWVudGVkIGV4cGxpY2l0bHkuCisKK0RJU1RSSUJVVEVfR1JPVVBfRE9DICAgPSBOTworCisjIFNldCB0aGUgU1VCR1JPVVBJTkcgdGFnIHRvIFlFUyAodGhlIGRlZmF1bHQpIHRvIGFsbG93IGNsYXNzIG1lbWJlciBncm91cHMgb2YKKyMgdGhlIHNhbWUgdHlwZSAoZm9yIGluc3RhbmNlIGEgZ3JvdXAgb2YgcHVibGljIGZ1bmN0aW9ucykgdG8gYmUgcHV0IGFzIGEKKyMgc3ViZ3JvdXAgb2YgdGhhdCB0eXBlIChlLmcuIHVuZGVyIHRoZSBQdWJsaWMgRnVuY3Rpb25zIHNlY3Rpb24pLiBTZXQgaXQgdG8KKyMgTk8gdG8gcHJldmVudCBzdWJncm91cGluZy4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgZG9uZSBwZXIgY2xhc3MgdXNpbmcKKyMgdGhlIFxub3N1Ymdyb3VwaW5nIGNvbW1hbmQuCisKK1NVQkdST1VQSU5HICAgICAgICAgICAgPSBZRVMKKworIyBXaGVuIHRoZSBJTkxJTkVfR1JPVVBFRF9DTEFTU0VTIHRhZyBpcyBzZXQgdG8gWUVTLCBjbGFzc2VzLCBzdHJ1Y3RzIGFuZAorIyB1bmlvbnMgYXJlIHNob3duIGluc2lkZSB0aGUgZ3JvdXAgaW4gd2hpY2ggdGhleSBhcmUgaW5jbHVkZWQgKGUuZy4gdXNpbmcKKyMgQGluZ3JvdXApIGluc3RlYWQgb2Ygb24gYSBzZXBhcmF0ZSBwYWdlIChmb3IgSFRNTCBhbmQgTWFuIHBhZ2VzKSBvcgorIyBzZWN0aW9uIChmb3IgTGFUZVggYW5kIFJURikuCisKK0lOTElORV9HUk9VUEVEX0NMQVNTRVMgPSBOTworCisjIFdoZW4gdGhlIElOTElORV9TSU1QTEVfU1RSVUNUUyB0YWcgaXMgc2V0IHRvIFlFUywgc3RydWN0cywgY2xhc3NlcywgYW5kCisjIHVuaW9ucyB3aXRoIG9ubHkgcHVibGljIGRhdGEgZmllbGRzIG9yIHNpbXBsZSB0eXBlZGVmIGZpZWxkcyB3aWxsIGJlIHNob3duCisjIGlubGluZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgc2NvcGUgaW4gd2hpY2ggdGhleSBhcmUgZGVmaW5lZCAoaS5lLiBmaWxlLAorIyBuYW1lc3BhY2UsIG9yIGdyb3VwIGRvY3VtZW50YXRpb24pLCBwcm92aWRlZCB0aGlzIHNjb3BlIGlzIGRvY3VtZW50ZWQuIElmIHNldAorIyB0byBOTyAodGhlIGRlZmF1bHQpLCBzdHJ1Y3RzLCBjbGFzc2VzLCBhbmQgdW5pb25zIGFyZSBzaG93biBvbiBhIHNlcGFyYXRlCisjIHBhZ2UgKGZvciBIVE1MIGFuZCBNYW4gcGFnZXMpIG9yIHNlY3Rpb24gKGZvciBMYVRlWCBhbmQgUlRGKS4KKworSU5MSU5FX1NJTVBMRV9TVFJVQ1RTICA9IE5PCisKKyMgV2hlbiBUWVBFREVGX0hJREVTX1NUUlVDVCBpcyBlbmFibGVkLCBhIHR5cGVkZWYgb2YgYSBzdHJ1Y3QsIHVuaW9uLCBvciBlbnVtCisjIGlzIGRvY3VtZW50ZWQgYXMgc3RydWN0LCB1bmlvbiwgb3IgZW51bSB3aXRoIHRoZSBuYW1lIG9mIHRoZSB0eXBlZGVmLiBTbworIyB0eXBlZGVmIHN0cnVjdCBUeXBlUyB7fSBUeXBlVCwgd2lsbCBhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYXMgYSBzdHJ1Y3QKKyMgd2l0aCBuYW1lIFR5cGVULiBXaGVuIGRpc2FibGVkIHRoZSB0eXBlZGVmIHdpbGwgYXBwZWFyIGFzIGEgbWVtYmVyIG9mIGEgZmlsZSwKKyMgbmFtZXNwYWNlLCBvciBjbGFzcy4gQW5kIHRoZSBzdHJ1Y3Qgd2lsbCBiZSBuYW1lZCBUeXBlUy4gVGhpcyBjYW4gdHlwaWNhbGx5CisjIGJlIHVzZWZ1bCBmb3IgQyBjb2RlIGluIGNhc2UgdGhlIGNvZGluZyBjb252ZW50aW9uIGRpY3RhdGVzIHRoYXQgYWxsIGNvbXBvdW5kCisjIHR5cGVzIGFyZSB0eXBlZGVmJ2VkIGFuZCBvbmx5IHRoZSB0eXBlZGVmIGlzIHJlZmVyZW5jZWQsIG5ldmVyIHRoZSB0YWcgbmFtZS4KKworVFlQRURFRl9ISURFU19TVFJVQ1QgICA9IE5PCisKKyMgVGhlIHNpemUgb2YgdGhlIHN5bWJvbCBsb29rdXAgY2FjaGUgY2FuIGJlIHNldCB1c2luZyBMT09LVVBfQ0FDSEVfU0laRS4gVGhpcworIyBjYWNoZSBpcyB1c2VkIHRvIHJlc29sdmUgc3ltYm9scyBnaXZlbiB0aGVpciBuYW1lIGFuZCBzY29wZS4gU2luY2UgdGhpcyBjYW4KKyMgYmUgYW4gZXhwZW5zaXZlIHByb2Nlc3MgYW5kIG9mdGVuIHRoZSBzYW1lIHN5bWJvbCBhcHBlYXIgbXVsdGlwbGUgdGltZXMgaW4KKyMgdGhlIGNvZGUsIGRveHlnZW4ga2VlcHMgYSBjYWNoZSBvZiBwcmUtcmVzb2x2ZWQgc3ltYm9scy4gSWYgdGhlIGNhY2hlIGlzIHRvbworIyBzbWFsbCBkb3h5Z2VuIHdpbGwgYmVjb21lIHNsb3dlci4gSWYgdGhlIGNhY2hlIGlzIHRvbyBsYXJnZSwgbWVtb3J5IGlzIHdhc3RlZC4KKyMgVGhlIGNhY2hlIHNpemUgaXMgZ2l2ZW4gYnkgdGhpcyBmb3JtdWxhOiAyXigxNitMT09LVVBfQ0FDSEVfU0laRSkuIFRoZSB2YWxpZAorIyByYW5nZSBpcyAwLi45LCB0aGUgZGVmYXVsdCBpcyAwLCBjb3JyZXNwb25kaW5nIHRvIGEgY2FjaGUgc2l6ZSBvZiAyXjE2ID0gNjU1MzYKKyMgc3ltYm9scy4KKworTE9PS1VQX0NBQ0hFX1NJWkUgICAgICA9IDAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCdWlsZCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBFWFRSQUNUX0FMTCB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgYXNzdW1lIGFsbCBlbnRpdGllcyBpbgorIyBkb2N1bWVudGF0aW9uIGFyZSBkb2N1bWVudGVkLCBldmVuIGlmIG5vIGRvY3VtZW50YXRpb24gd2FzIGF2YWlsYWJsZS4KKyMgUHJpdmF0ZSBjbGFzcyBtZW1iZXJzIGFuZCBzdGF0aWMgZmlsZSBtZW1iZXJzIHdpbGwgYmUgaGlkZGVuIHVubGVzcworIyB0aGUgRVhUUkFDVF9QUklWQVRFIHJlc3BlY3RpdmVseSBFWFRSQUNUX1NUQVRJQyB0YWdzIGFyZSBzZXQgdG8gWUVTCisKK0VYVFJBQ1RfQUxMICAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRVhUUkFDVF9QUklWQVRFIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBwcml2YXRlIG1lbWJlcnMgb2YgYSBjbGFzcworIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitFWFRSQUNUX1BSSVZBVEUgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYVFJBQ1RfUEFDS0FHRSB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgbWVtYmVycyB3aXRoIHBhY2thZ2Ugb3IgaW50ZXJuYWwKKyMgc2NvcGUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworRVhUUkFDVF9QQUNLQUdFICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfU1RBVElDIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBzdGF0aWMgbWVtYmVycyBvZiBhIGZpbGUKKyMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworRVhUUkFDVF9TVEFUSUMgICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFRSQUNUX0xPQ0FMX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMgY2xhc3NlcyAoYW5kIHN0cnVjdHMpCisjIGRlZmluZWQgbG9jYWxseSBpbiBzb3VyY2UgZmlsZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgSWYgc2V0IHRvIE5PIG9ubHkgY2xhc3NlcyBkZWZpbmVkIGluIGhlYWRlciBmaWxlcyBhcmUgaW5jbHVkZWQuCisKK0VYVFJBQ1RfTE9DQUxfQ0xBU1NFUyAgPSBZRVMKKworIyBUaGlzIGZsYWcgaXMgb25seSB1c2VmdWwgZm9yIE9iamVjdGl2ZS1DIGNvZGUuIFdoZW4gc2V0IHRvIFlFUyBsb2NhbAorIyBtZXRob2RzLCB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gc2VjdGlvbiBidXQgbm90IGluCisjIHRoZSBpbnRlcmZhY2UgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSBvbmx5IG1ldGhvZHMgaW4gdGhlIGludGVyZmFjZSBhcmUgaW5jbHVkZWQuCisKK0VYVFJBQ1RfTE9DQUxfTUVUSE9EUyAgPSBZRVMKKworIyBJZiB0aGlzIGZsYWcgaXMgc2V0IHRvIFlFUywgdGhlIG1lbWJlcnMgb2YgYW5vbnltb3VzIG5hbWVzcGFjZXMgd2lsbCBiZQorIyBleHRyYWN0ZWQgYW5kIGFwcGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhcyBhIG5hbWVzcGFjZSBjYWxsZWQKKyMgJ2Fub255bW91c19uYW1lc3BhY2V7ZmlsZX0nLCB3aGVyZSBmaWxlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgYmFzZQorIyBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGFub255bW91cyBuYW1lc3BhY2UuIEJ5IGRlZmF1bHQKKyMgYW5vbnltb3VzIG5hbWVzcGFjZXMgYXJlIGhpZGRlbi4KKworRVhUUkFDVF9BTk9OX05TUEFDRVMgICA9IFlFUworCisjIElmIHRoZSBISURFX1VORE9DX01FTUJFUlMgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFsbAorIyB1bmRvY3VtZW50ZWQgbWVtYmVycyBvZiBkb2N1bWVudGVkIGNsYXNzZXMsIGZpbGVzIG9yIG5hbWVzcGFjZXMuCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIG1lbWJlcnMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUKKyMgdmFyaW91cyBvdmVydmlld3MsIGJ1dCBubyBkb2N1bWVudGF0aW9uIHNlY3Rpb24gaXMgZ2VuZXJhdGVkLgorIyBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuCisKK0hJREVfVU5ET0NfTUVNQkVSUyAgICAgPSBOTworCisjIElmIHRoZSBISURFX1VORE9DX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFsbAorIyB1bmRvY3VtZW50ZWQgY2xhc3NlcyB0aGF0IGFyZSBub3JtYWxseSB2aXNpYmxlIGluIHRoZSBjbGFzcyBoaWVyYXJjaHkuCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIGNsYXNzZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgdmFyaW91cworIyBvdmVydmlld3MuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgRVhUUkFDVF9BTEwgaXMgZW5hYmxlZC4KKworSElERV9VTkRPQ19DTEFTU0VTICAgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfRlJJRU5EX0NPTVBPVU5EUyB0YWcgaXMgc2V0IHRvIFlFUywgRG94eWdlbiB3aWxsIGhpZGUgYWxsCisjIGZyaWVuZCAoY2xhc3N8c3RydWN0fHVuaW9uKSBkZWNsYXJhdGlvbnMuCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIGRlY2xhcmF0aW9ucyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLgorCitISURFX0ZSSUVORF9DT01QT1VORFMgID0gTk8KKworIyBJZiB0aGUgSElERV9JTl9CT0RZX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFueQorIyBkb2N1bWVudGF0aW9uIGJsb2NrcyBmb3VuZCBpbnNpZGUgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbi4KKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgYmxvY2tzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlCisjIGZ1bmN0aW9uJ3MgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBibG9jay4KKworSElERV9JTl9CT0RZX0RPQ1MgICAgICA9IE5PCisKKyMgVGhlIElOVEVSTkFMX0RPQ1MgdGFnIGRldGVybWluZXMgaWYgZG9jdW1lbnRhdGlvbgorIyB0aGF0IGlzIHR5cGVkIGFmdGVyIGEgXGludGVybmFsIGNvbW1hbmQgaXMgaW5jbHVkZWQuIElmIHRoZSB0YWcgaXMgc2V0CisjIHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlbiB0aGUgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIGV4Y2x1ZGVkLgorIyBTZXQgaXQgdG8gWUVTIHRvIGluY2x1ZGUgdGhlIGludGVybmFsIGRvY3VtZW50YXRpb24uCisKK0lOVEVSTkFMX0RPQ1MgICAgICAgICAgPSBOTworCisjIElmIHRoZSBDQVNFX1NFTlNFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gdGhlbiBEb3h5Z2VuIHdpbGwgb25seSBnZW5lcmF0ZQorIyBmaWxlIG5hbWVzIGluIGxvd2VyLWNhc2UgbGV0dGVycy4gSWYgc2V0IHRvIFlFUyB1cHBlci1jYXNlIGxldHRlcnMgYXJlIGFsc28KKyMgYWxsb3dlZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgY2xhc3NlcyBvciBmaWxlcyB3aG9zZSBuYW1lcyBvbmx5IGRpZmZlcgorIyBpbiBjYXNlIGFuZCBpZiB5b3VyIGZpbGUgc3lzdGVtIHN1cHBvcnRzIGNhc2Ugc2Vuc2l0aXZlIGZpbGUgbmFtZXMuIFdpbmRvd3MKKyMgYW5kIE1hYyB1c2VycyBhcmUgYWR2aXNlZCB0byBzZXQgdGhpcyBvcHRpb24gdG8gTk8uCisKK0NBU0VfU0VOU0VfTkFNRVMgICAgICAgPSBOTworCisjIElmIHRoZSBISURFX1NDT1BFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVuIERveHlnZW4KKyMgd2lsbCBzaG93IG1lbWJlcnMgd2l0aCB0aGVpciBmdWxsIGNsYXNzIGFuZCBuYW1lc3BhY2Ugc2NvcGVzIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gWUVTIHRoZSBzY29wZSB3aWxsIGJlIGhpZGRlbi4KKworSElERV9TQ09QRV9OQU1FUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIFNIT1dfSU5DTFVERV9GSUxFUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gRG94eWdlbgorIyB3aWxsIHB1dCBhIGxpc3Qgb2YgdGhlIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5IGEgZmlsZSBpbiB0aGUgZG9jdW1lbnRhdGlvbgorIyBvZiB0aGF0IGZpbGUuCisKK1NIT1dfSU5DTFVERV9GSUxFUyAgICAgPSBZRVMKKworIyBJZiB0aGUgRk9SQ0VfTE9DQUxfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuCisjIHdpbGwgbGlzdCBpbmNsdWRlIGZpbGVzIHdpdGggZG91YmxlIHF1b3RlcyBpbiB0aGUgZG9jdW1lbnRhdGlvbgorIyByYXRoZXIgdGhhbiB3aXRoIHNoYXJwIGJyYWNrZXRzLgorCitGT1JDRV9MT0NBTF9JTkNMVURFUyAgID0gTk8KKworIyBJZiB0aGUgSU5MSU5FX0lORk8gdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIGEgdGFnIFtpbmxpbmVdCisjIGlzIGluc2VydGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBpbmxpbmUgbWVtYmVycy4KKworSU5MSU5FX0lORk8gICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBTT1JUX01FTUJFUl9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBkb3h5Z2VuCisjIHdpbGwgc29ydCB0aGUgKGRldGFpbGVkKSBkb2N1bWVudGF0aW9uIG9mIGZpbGUgYW5kIGNsYXNzIG1lbWJlcnMKKyMgYWxwaGFiZXRpY2FsbHkgYnkgbWVtYmVyIG5hbWUuIElmIHNldCB0byBOTyB0aGUgbWVtYmVycyB3aWxsIGFwcGVhciBpbgorIyBkZWNsYXJhdGlvbiBvcmRlci4KKworU09SVF9NRU1CRVJfRE9DUyAgICAgICA9IFlFUworCisjIElmIHRoZSBTT1JUX0JSSUVGX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUKKyMgYnJpZWYgZG9jdW1lbnRhdGlvbiBvZiBmaWxlLCBuYW1lc3BhY2UgYW5kIGNsYXNzIG1lbWJlcnMgYWxwaGFiZXRpY2FsbHkKKyMgYnkgbWVtYmVyIG5hbWUuIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZSBtZW1iZXJzIHdpbGwgYXBwZWFyIGluCisjIGRlY2xhcmF0aW9uIG9yZGVyLgorCitTT1JUX0JSSUVGX0RPQ1MgICAgICAgID0gTk8KKworIyBJZiB0aGUgU09SVF9NRU1CRVJTX0NUT1JTXzFTVCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4KKyMgd2lsbCBzb3J0IHRoZSAoYnJpZWYgYW5kIGRldGFpbGVkKSBkb2N1bWVudGF0aW9uIG9mIGNsYXNzIG1lbWJlcnMgc28gdGhhdAorIyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIGFyZSBsaXN0ZWQgZmlyc3QuIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpCisjIHRoZSBjb25zdHJ1Y3RvcnMgd2lsbCBhcHBlYXIgaW4gdGhlIHJlc3BlY3RpdmUgb3JkZXJzIGRlZmluZWQgYnkKKyMgU09SVF9NRU1CRVJfRE9DUyBhbmQgU09SVF9CUklFRl9ET0NTLgorIyBUaGlzIHRhZyB3aWxsIGJlIGlnbm9yZWQgZm9yIGJyaWVmIGRvY3MgaWYgU09SVF9CUklFRl9ET0NTIGlzIHNldCB0byBOTworIyBhbmQgaWdub3JlZCBmb3IgZGV0YWlsZWQgZG9jcyBpZiBTT1JUX01FTUJFUl9ET0NTIGlzIHNldCB0byBOTy4KKworU09SVF9NRU1CRVJTX0NUT1JTXzFTVCA9IE5PCisKKyMgSWYgdGhlIFNPUlRfR1JPVVBfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUKKyMgaGllcmFyY2h5IG9mIGdyb3VwIG5hbWVzIGludG8gYWxwaGFiZXRpY2FsIG9yZGVyLiBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KQorIyB0aGUgZ3JvdXAgbmFtZXMgd2lsbCBhcHBlYXIgaW4gdGhlaXIgZGVmaW5lZCBvcmRlci4KKworU09SVF9HUk9VUF9OQU1FUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIFNPUlRfQllfU0NPUEVfTkFNRSB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIGNsYXNzIGxpc3Qgd2lsbCBiZQorIyBzb3J0ZWQgYnkgZnVsbHktcXVhbGlmaWVkIG5hbWVzLCBpbmNsdWRpbmcgbmFtZXNwYWNlcy4gSWYgc2V0IHRvCisjIE5PICh0aGUgZGVmYXVsdCksIHRoZSBjbGFzcyBsaXN0IHdpbGwgYmUgc29ydGVkIG9ubHkgYnkgY2xhc3MgbmFtZSwKKyMgbm90IGluY2x1ZGluZyB0aGUgbmFtZXNwYWNlIHBhcnQuCisjIE5vdGU6IFRoaXMgb3B0aW9uIGlzIG5vdCB2ZXJ5IHVzZWZ1bCBpZiBISURFX1NDT1BFX05BTUVTIGlzIHNldCB0byBZRVMuCisjIE5vdGU6IFRoaXMgb3B0aW9uIGFwcGxpZXMgb25seSB0byB0aGUgY2xhc3MgbGlzdCwgbm90IHRvIHRoZQorIyBhbHBoYWJldGljYWwgbGlzdC4KKworU09SVF9CWV9TQ09QRV9OQU1FICAgICA9IE5PCisKKyMgSWYgdGhlIFNUUklDVF9QUk9UT19NQVRDSElORyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgZG94eWdlbiBmYWlscyB0bworIyBkbyBwcm9wZXIgdHlwZSByZXNvbHV0aW9uIG9mIGFsbCBwYXJhbWV0ZXJzIG9mIGEgZnVuY3Rpb24gaXQgd2lsbCByZWplY3QgYQorIyBtYXRjaCBiZXR3ZWVuIHRoZSBwcm90b3R5cGUgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIG1lbWJlciBmdW5jdGlvbiBldmVuCisjIGlmIHRoZXJlIGlzIG9ubHkgb25lIGNhbmRpZGF0ZSBvciBpdCBpcyBvYnZpb3VzIHdoaWNoIGNhbmRpZGF0ZSB0byBjaG9vc2UKKyMgYnkgZG9pbmcgYSBzaW1wbGUgc3RyaW5nIG1hdGNoLiBCeSBkaXNhYmxpbmcgU1RSSUNUX1BST1RPX01BVENISU5HIGRveHlnZW4KKyMgd2lsbCBzdGlsbCBhY2NlcHQgYSBtYXRjaCBiZXR3ZWVuIHByb3RvdHlwZSBhbmQgaW1wbGVtZW50YXRpb24gaW4gc3VjaCBjYXNlcy4KKworU1RSSUNUX1BST1RPX01BVENISU5HICA9IE5PCisKKyMgVGhlIEdFTkVSQVRFX1RPRE9MSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IKKyMgZGlzYWJsZSAoTk8pIHRoZSB0b2RvIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXHRvZG8KKyMgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX1RPRE9MSVNUICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfVEVTVExJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvcgorIyBkaXNhYmxlIChOTykgdGhlIHRlc3QgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcdGVzdAorIyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfVEVTVExJU1QgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9CVUdMSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IKKyMgZGlzYWJsZSAoTk8pIHRoZSBidWcgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcYnVnCisjIGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9CVUdMSVNUICAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX0RFUFJFQ0FURURMSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IKKyMgZGlzYWJsZSAoTk8pIHRoZSBkZXByZWNhdGVkIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcKKyMgXGRlcHJlY2F0ZWQgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX0RFUFJFQ0FURURMSVNUPSBZRVMKKworIyBUaGUgRU5BQkxFRF9TRUNUSU9OUyB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGNvbmRpdGlvbmFsCisjIGRvY3VtZW50YXRpb24gc2VjdGlvbnMsIG1hcmtlZCBieSBcaWYgc2VjdGlvbi1sYWJlbCAuLi4gXGVuZGlmCisjIGFuZCBcY29uZCBzZWN0aW9uLWxhYmVsIC4uLiBcZW5kY29uZCBibG9ja3MuCisKK0VOQUJMRURfU0VDVElPTlMgICAgICAgPQorCisjIFRoZSBNQVhfSU5JVElBTElaRVJfTElORVMgdGFnIGRldGVybWluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzCisjIHRoZSBpbml0aWFsIHZhbHVlIG9mIGEgdmFyaWFibGUgb3IgbWFjcm8gY29uc2lzdHMgb2YgZm9yIGl0IHRvIGFwcGVhciBpbgorIyB0aGUgZG9jdW1lbnRhdGlvbi4gSWYgdGhlIGluaXRpYWxpemVyIGNvbnNpc3RzIG9mIG1vcmUgbGluZXMgdGhhbiBzcGVjaWZpZWQKKyMgaGVyZSBpdCB3aWxsIGJlIGhpZGRlbi4gVXNlIGEgdmFsdWUgb2YgMCB0byBoaWRlIGluaXRpYWxpemVycyBjb21wbGV0ZWx5LgorIyBUaGUgYXBwZWFyYW5jZSBvZiB0aGUgaW5pdGlhbGl6ZXIgb2YgaW5kaXZpZHVhbCB2YXJpYWJsZXMgYW5kIG1hY3JvcyBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbiBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBcc2hvd2luaXRpYWxpemVyIG9yIFxoaWRlaW5pdGlhbGl6ZXIKKyMgY29tbWFuZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy4KKworTUFYX0lOSVRJQUxJWkVSX0xJTkVTICA9IDMwCisKKyMgU2V0IHRoZSBTSE9XX1VTRURfRklMRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGxpc3Qgb2YgZmlsZXMgZ2VuZXJhdGVkCisjIGF0IHRoZSBib3R0b20gb2YgdGhlIGRvY3VtZW50YXRpb24gb2YgY2xhc3NlcyBhbmQgc3RydWN0cy4gSWYgc2V0IHRvIFlFUyB0aGUKKyMgbGlzdCB3aWxsIG1lbnRpb24gdGhlIGZpbGVzIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkb2N1bWVudGF0aW9uLgorCitTSE9XX1VTRURfRklMRVMgICAgICAgID0gWUVTCisKKyMgU2V0IHRoZSBTSE9XX0ZJTEVTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBGaWxlcyBwYWdlLgorIyBUaGlzIHdpbGwgcmVtb3ZlIHRoZSBGaWxlcyBlbnRyeSBmcm9tIHRoZSBRdWljayBJbmRleCBhbmQgZnJvbSB0aGUKKyMgRm9sZGVyIFRyZWUgVmlldyAoaWYgc3BlY2lmaWVkKS4gVGhlIGRlZmF1bHQgaXMgWUVTLgorCitTSE9XX0ZJTEVTICAgICAgICAgICAgID0gWUVTCisKKyMgU2V0IHRoZSBTSE9XX05BTUVTUEFDRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlCisjIE5hbWVzcGFjZXMgcGFnZS4KKyMgVGhpcyB3aWxsIHJlbW92ZSB0aGUgTmFtZXNwYWNlcyBlbnRyeSBmcm9tIHRoZSBRdWljayBJbmRleAorIyBhbmQgZnJvbSB0aGUgRm9sZGVyIFRyZWUgVmlldyAoaWYgc3BlY2lmaWVkKS4gVGhlIGRlZmF1bHQgaXMgWUVTLgorCitTSE9XX05BTUVTUEFDRVMgICAgICAgID0gWUVTCisKKyMgVGhlIEZJTEVfVkVSU0lPTl9GSUxURVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcm9ncmFtIG9yIHNjcmlwdCB0aGF0CisjIGRveHlnZW4gc2hvdWxkIGludm9rZSB0byBnZXQgdGhlIGN1cnJlbnQgdmVyc2lvbiBmb3IgZWFjaCBmaWxlICh0eXBpY2FsbHkgZnJvbQorIyB0aGUgdmVyc2lvbiBjb250cm9sIHN5c3RlbSkuIERveHlnZW4gd2lsbCBpbnZva2UgdGhlIHByb2dyYW0gYnkgZXhlY3V0aW5nICh2aWEKKyMgcG9wZW4oKSkgdGhlIGNvbW1hbmQgPGNvbW1hbmQ+IDxpbnB1dC1maWxlPiwgd2hlcmUgPGNvbW1hbmQ+IGlzIHRoZSB2YWx1ZSBvZgorIyB0aGUgRklMRV9WRVJTSU9OX0ZJTFRFUiB0YWcsIGFuZCA8aW5wdXQtZmlsZT4gaXMgdGhlIG5hbWUgb2YgYW4gaW5wdXQgZmlsZQorIyBwcm92aWRlZCBieSBkb3h5Z2VuLiBXaGF0ZXZlciB0aGUgcHJvZ3JhbSB3cml0ZXMgdG8gc3RhbmRhcmQgb3V0cHV0CisjIGlzIHVzZWQgYXMgdGhlIGZpbGUgdmVyc2lvbi4gU2VlIHRoZSBtYW51YWwgZm9yIGV4YW1wbGVzLgorCitGSUxFX1ZFUlNJT05fRklMVEVSICAgID0KKworIyBUaGUgTEFZT1VUX0ZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBsYXlvdXQgZmlsZSB3aGljaCB3aWxsIGJlIHBhcnNlZAorIyBieSBkb3h5Z2VuLiBUaGUgbGF5b3V0IGZpbGUgY29udHJvbHMgdGhlIGdsb2JhbCBzdHJ1Y3R1cmUgb2YgdGhlIGdlbmVyYXRlZAorIyBvdXRwdXQgZmlsZXMgaW4gYW4gb3V0cHV0IGZvcm1hdCBpbmRlcGVuZGVudCB3YXkuIFRvIGNyZWF0ZSB0aGUgbGF5b3V0IGZpbGUKKyMgdGhhdCByZXByZXNlbnRzIGRveHlnZW4ncyBkZWZhdWx0cywgcnVuIGRveHlnZW4gd2l0aCB0aGUgLWwgb3B0aW9uLgorIyBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhIGZpbGUgbmFtZSBhZnRlciB0aGUgb3B0aW9uLCBpZiBvbWl0dGVkCisjIERveHlnZW5MYXlvdXQueG1sIHdpbGwgYmUgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgbGF5b3V0IGZpbGUuCisKK0xBWU9VVF9GSUxFICAgICAgICAgICAgPQorCisjIFRoZSBDSVRFX0JJQl9GSUxFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBiaWIgZmlsZXMKKyMgY29udGFpbmluZyB0aGUgcmVmZXJlbmNlcyBkYXRhLiBUaGlzIG11c3QgYmUgYSBsaXN0IG9mIC5iaWIgZmlsZXMuIFRoZQorIyAuYmliIGV4dGVuc2lvbiBpcyBhdXRvbWF0aWNhbGx5IGFwcGVuZGVkIGlmIG9taXR0ZWQuIFVzaW5nIHRoaXMgY29tbWFuZAorIyByZXF1aXJlcyB0aGUgYmlidGV4IHRvb2wgdG8gYmUgaW5zdGFsbGVkLiBTZWUgYWxzbworIyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpYlRlWCBmb3IgbW9yZSBpbmZvLiBGb3IgTGFUZVggdGhlIHN0eWxlCisjIG9mIHRoZSBiaWJsaW9ncmFwaHkgY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgTEFURVhfQklCX1NUWUxFLiBUbyB1c2UgdGhpcworIyBmZWF0dXJlIHlvdSBuZWVkIGJpYnRleCBhbmQgcGVybCBhdmFpbGFibGUgaW4gdGhlIHNlYXJjaCBwYXRoLiBEbyBub3QgdXNlCisjIGZpbGUgbmFtZXMgd2l0aCBzcGFjZXMsIGJpYnRleCBjYW5ub3QgaGFuZGxlIHRoZW0uCisKK0NJVEVfQklCX0ZJTEVTICAgICAgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdhcm5pbmcgYW5kIHByb2dyZXNzIG1lc3NhZ2VzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIFFVSUVUIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgbWVzc2FnZXMgdGhhdCBhcmUgZ2VuZXJhdGVkCisjIGJ5IGRveHlnZW4uIFBvc3NpYmxlIHZhbHVlcyBhcmUgWUVTIGFuZCBOTy4gSWYgbGVmdCBibGFuayBOTyBpcyB1c2VkLgorCitRVUlFVCAgICAgICAgICAgICAgICAgID0gTk8KKworIyBUaGUgV0FSTklOR1MgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgYXJlCisjIGdlbmVyYXRlZCBieSBkb3h5Z2VuLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIFlFUyBhbmQgTk8uIElmIGxlZnQgYmxhbmsKKyMgTk8gaXMgdXNlZC4KKworV0FSTklOR1MgICAgICAgICAgICAgICA9IFlFUworCisjIElmIFdBUk5fSUZfVU5ET0NVTUVOVEVEIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIHdhcm5pbmdzCisjIGZvciB1bmRvY3VtZW50ZWQgbWVtYmVycy4gSWYgRVhUUkFDVF9BTEwgaXMgc2V0IHRvIFlFUyB0aGVuIHRoaXMgZmxhZyB3aWxsCisjIGF1dG9tYXRpY2FsbHkgYmUgZGlzYWJsZWQuCisKK1dBUk5fSUZfVU5ET0NVTUVOVEVEICAgPSBZRVMKKworIyBJZiBXQVJOX0lGX0RPQ19FUlJPUiBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgd2FybmluZ3MgZm9yCisjIHBvdGVudGlhbCBlcnJvcnMgaW4gdGhlIGRvY3VtZW50YXRpb24sIHN1Y2ggYXMgbm90IGRvY3VtZW50aW5nIHNvbWUKKyMgcGFyYW1ldGVycyBpbiBhIGRvY3VtZW50ZWQgZnVuY3Rpb24sIG9yIGRvY3VtZW50aW5nIHBhcmFtZXRlcnMgdGhhdAorIyBkb24ndCBleGlzdCBvciB1c2luZyBtYXJrdXAgY29tbWFuZHMgd3JvbmdseS4KKworV0FSTl9JRl9ET0NfRVJST1IgICAgICA9IFlFUworCisjIFRoZSBXQVJOX05PX1BBUkFNRE9DIG9wdGlvbiBjYW4gYmUgZW5hYmxlZCB0byBnZXQgd2FybmluZ3MgZm9yCisjIGZ1bmN0aW9ucyB0aGF0IGFyZSBkb2N1bWVudGVkLCBidXQgaGF2ZSBubyBkb2N1bWVudGF0aW9uIGZvciB0aGVpciBwYXJhbWV0ZXJzCisjIG9yIHJldHVybiB2YWx1ZS4gSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgZG94eWdlbiB3aWxsIG9ubHkgd2FybiBhYm91dAorIyB3cm9uZyBvciBpbmNvbXBsZXRlIHBhcmFtZXRlciBkb2N1bWVudGF0aW9uLCBidXQgbm90IGFib3V0IHRoZSBhYnNlbmNlIG9mCisjIGRvY3VtZW50YXRpb24uCisKK1dBUk5fTk9fUEFSQU1ET0MgICAgICAgPSBOTworCisjIFRoZSBXQVJOX0ZPUk1BVCB0YWcgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQKKyMgZG94eWdlbiBjYW4gcHJvZHVjZS4gVGhlIHN0cmluZyBzaG91bGQgY29udGFpbiB0aGUgJGZpbGUsICRsaW5lLCBhbmQgJHRleHQKKyMgdGFncywgd2hpY2ggd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZmlsZSBhbmQgbGluZSBudW1iZXIgZnJvbSB3aGljaCB0aGUKKyMgd2FybmluZyBvcmlnaW5hdGVkIGFuZCB0aGUgd2FybmluZyB0ZXh0LiBPcHRpb25hbGx5IHRoZSBmb3JtYXQgbWF5IGNvbnRhaW4KKyMgJHZlcnNpb24sIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHZlcnNpb24gb2YgdGhlIGZpbGUgKGlmIGl0IGNvdWxkCisjIGJlIG9idGFpbmVkIHZpYSBGSUxFX1ZFUlNJT05fRklMVEVSKQorCitXQVJOX0ZPUk1BVCAgICAgICAgICAgID0gIiRmaWxlOiRsaW5lOiAkdGV4dCIKKworIyBUaGUgV0FSTl9MT0dGSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZmlsZSB0byB3aGljaCB3YXJuaW5nCisjIGFuZCBlcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgd3JpdHRlbi4gSWYgbGVmdCBibGFuayB0aGUgb3V0cHV0IGlzIHdyaXR0ZW4KKyMgdG8gc3RkZXJyLgorCitXQVJOX0xPR0ZJTEUgICAgICAgICAgID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgaW5wdXQgZmlsZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgSU5QVVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4KKyMgZG9jdW1lbnRlZCBzb3VyY2UgZmlsZXMuIFlvdSBtYXkgZW50ZXIgZmlsZSBuYW1lcyBsaWtlICJteWZpbGUuY3BwIiBvcgorIyBkaXJlY3RvcmllcyBsaWtlICIvdXNyL3NyYy9teXByb2plY3QiLiBTZXBhcmF0ZSB0aGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMKKyMgd2l0aCBzcGFjZXMuCisKK0lOUFVUICAgICAgICAgICAgICAgICAgPSAuCisKKyMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIG9mIHRoZSBzb3VyY2UgZmlsZXMKKyMgdGhhdCBkb3h5Z2VuIHBhcnNlcy4gSW50ZXJuYWxseSBkb3h5Z2VuIHVzZXMgdGhlIFVURi04IGVuY29kaW5nLCB3aGljaCBpcworIyBhbHNvIHRoZSBkZWZhdWx0IGlucHV0IGVuY29kaW5nLiBEb3h5Z2VuIHVzZXMgbGliaWNvbnYgKG9yIHRoZSBpY29udiBidWlsdAorIyBpbnRvIGxpYmMpIGZvciB0aGUgdHJhbnNjb2RpbmcuIFNlZSBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWNvbnYgZm9yCisjIHRoZSBsaXN0IG9mIHBvc3NpYmxlIGVuY29kaW5ncy4KKworSU5QVVRfRU5DT0RJTkcgICAgICAgICA9IFVURi04CisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZQorIyBGSUxFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm4gKGxpa2UgKi5jcHAKKyMgYW5kICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdAorIyBibGFuayB0aGUgZm9sbG93aW5nIHBhdHRlcm5zIGFyZSB0ZXN0ZWQ6CisjICouYyAqLmNjICouY3h4ICouY3BwICouYysrICouZCAqLmphdmEgKi5paSAqLml4eCAqLmlwcCAqLmkrKyAqLmlubCAqLmggKi5oaAorIyAqLmh4eCAqLmhwcCAqLmgrKyAqLmlkbCAqLm9kbCAqLmNzICoucGhwICoucGhwMyAqLmluYyAqLm0gKi5tbSAqLmRveCAqLnB5CisjICouZjkwICouZiAqLmZvciAqLnZoZCAqLnZoZGwKKworRklMRV9QQVRURVJOUyAgICAgICAgICA9ICouaAorCisjIFRoZSBSRUNVUlNJVkUgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCBzdWJkaXJlY3RvcmllcworIyBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIGlucHV0IGZpbGVzIGFzIHdlbGwuIFBvc3NpYmxlIHZhbHVlcyBhcmUgWUVTIGFuZCBOTy4KKyMgSWYgbGVmdCBibGFuayBOTyBpcyB1c2VkLgorCitSRUNVUlNJVkUgICAgICAgICAgICAgID0gWUVTCisKKyMgVGhlIEVYQ0xVREUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZmlsZXMgYW5kL29yIGRpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIGJlCisjIGV4Y2x1ZGVkIGZyb20gdGhlIElOUFVUIHNvdXJjZSBmaWxlcy4gVGhpcyB3YXkgeW91IGNhbiBlYXNpbHkgZXhjbHVkZSBhCisjIHN1YmRpcmVjdG9yeSBmcm9tIGEgZGlyZWN0b3J5IHRyZWUgd2hvc2Ugcm9vdCBpcyBzcGVjaWZpZWQgd2l0aCB0aGUgSU5QVVQgdGFnLgorIyBOb3RlIHRoYXQgcmVsYXRpdmUgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCBkb3h5Z2VuIGlzCisjIHJ1bi4KKworRVhDTFVERSAgICAgICAgICAgICAgICA9IGNvbmZpZ3MgeW90dGEvbW9kdWxlCisKKyMgVGhlIEVYQ0xVREVfU1lNTElOS1MgdGFnIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB3aGV0aGVyIG9yIG5vdCBmaWxlcyBvcgorIyBkaXJlY3RvcmllcyB0aGF0IGFyZSBzeW1ib2xpYyBsaW5rcyAoYSBVbml4IGZpbGUgc3lzdGVtIGZlYXR1cmUpIGFyZSBleGNsdWRlZAorIyBmcm9tIHRoZSBpbnB1dC4KKworRVhDTFVERV9TWU1MSU5LUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZQorIyBFWENMVURFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm5zIHRvIGV4Y2x1ZGUKKyMgY2VydGFpbiBmaWxlcyBmcm9tIHRob3NlIGRpcmVjdG9yaWVzLiBOb3RlIHRoYXQgdGhlIHdpbGRjYXJkcyBhcmUgbWF0Y2hlZAorIyBhZ2FpbnN0IHRoZSBmaWxlIHdpdGggYWJzb2x1dGUgcGF0aCwgc28gdG8gZXhjbHVkZSBhbGwgdGVzdCBkaXJlY3RvcmllcworIyBmb3IgZXhhbXBsZSB1c2UgdGhlIHBhdHRlcm4gKi90ZXN0LyoKKworRVhDTFVERV9QQVRURVJOUyAgICAgICA9ICpfaW50ZXJuYWwuaCAqX3dyYXAuaAorCisjIFRoZSBFWENMVURFX1NZTUJPTFMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgc3ltYm9sIG5hbWVzCisjIChuYW1lc3BhY2VzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGV0Yy4pIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlCisjIG91dHB1dC4gVGhlIHN5bWJvbCBuYW1lIGNhbiBiZSBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lLCBhIHdvcmQsIG9yIGlmIHRoZQorIyB3aWxkY2FyZCAqIGlzIHVzZWQsIGEgc3Vic3RyaW5nLiBFeGFtcGxlczogQU5hbWVzcGFjZSwgQUNsYXNzLAorIyBBQ2xhc3M6OkFOYW1lc3BhY2UsIEFOYW1lc3BhY2U6OipUZXN0CisKK0VYQ0xVREVfU1lNQk9MUyAgICAgICAgPQorCisjIFRoZSBFWEFNUExFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZmlsZXMgb3IKKyMgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIGV4YW1wbGUgY29kZSBmcmFnbWVudHMgdGhhdCBhcmUgaW5jbHVkZWQgKHNlZQorIyB0aGUgXGluY2x1ZGUgY29tbWFuZCkuCisKK0VYQU1QTEVfUEFUSCAgICAgICAgICAgPQorCisjIElmIHRoZSB2YWx1ZSBvZiB0aGUgRVhBTVBMRV9QQVRIIHRhZyBjb250YWlucyBkaXJlY3RvcmllcywgeW91IGNhbiB1c2UgdGhlCisjIEVYQU1QTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybiAobGlrZSAqLmNwcAorIyBhbmQgKi5oKSB0byBmaWx0ZXIgb3V0IHRoZSBzb3VyY2UtZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLiBJZiBsZWZ0CisjIGJsYW5rIGFsbCBmaWxlcyBhcmUgaW5jbHVkZWQuCisKK0VYQU1QTEVfUEFUVEVSTlMgICAgICAgPSAqCisKKyMgSWYgdGhlIEVYQU1QTEVfUkVDVVJTSVZFIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gc3ViZGlyZWN0b3JpZXMgd2lsbCBiZQorIyBzZWFyY2hlZCBmb3IgaW5wdXQgZmlsZXMgdG8gYmUgdXNlZCB3aXRoIHRoZSBcaW5jbHVkZSBvciBcZG9udGluY2x1ZGUKKyMgY29tbWFuZHMgaXJyZXNwZWN0aXZlIG9mIHRoZSB2YWx1ZSBvZiB0aGUgUkVDVVJTSVZFIHRhZy4KKyMgUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiBJZiBsZWZ0IGJsYW5rIE5PIGlzIHVzZWQuCisKK0VYQU1QTEVfUkVDVVJTSVZFICAgICAgPSBOTworCisjIFRoZSBJTUFHRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yCisjIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBpbWFnZSB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlCisjIHRoZSBcaW1hZ2UgY29tbWFuZCkuCisKK0lNQUdFX1BBVEggICAgICAgICAgICAgPQorCisjIFRoZSBJTlBVVF9GSUxURVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcm9ncmFtIHRoYXQgZG94eWdlbiBzaG91bGQKKyMgaW52b2tlIHRvIGZpbHRlciBmb3IgZWFjaCBpbnB1dCBmaWxlLiBEb3h5Z2VuIHdpbGwgaW52b2tlIHRoZSBmaWx0ZXIgcHJvZ3JhbQorIyBieSBleGVjdXRpbmcgKHZpYSBwb3BlbigpKSB0aGUgY29tbWFuZCA8ZmlsdGVyPiA8aW5wdXQtZmlsZT4sIHdoZXJlIDxmaWx0ZXI+CisjIGlzIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVRfRklMVEVSIHRhZywgYW5kIDxpbnB1dC1maWxlPiBpcyB0aGUgbmFtZSBvZiBhbgorIyBpbnB1dCBmaWxlLiBEb3h5Z2VuIHdpbGwgdGhlbiB1c2UgdGhlIG91dHB1dCB0aGF0IHRoZSBmaWx0ZXIgcHJvZ3JhbSB3cml0ZXMKKyMgdG8gc3RhbmRhcmQgb3V0cHV0LgorIyBJZiBGSUxURVJfUEFUVEVSTlMgaXMgc3BlY2lmaWVkLCB0aGlzIHRhZyB3aWxsIGJlIGlnbm9yZWQuCisjIE5vdGUgdGhhdCB0aGUgZmlsdGVyIG11c3Qgbm90IGFkZCBvciByZW1vdmUgbGluZXM7IGl0IGlzIGFwcGxpZWQgYmVmb3JlIHRoZQorIyBjb2RlIGlzIHNjYW5uZWQsIGJ1dCBub3Qgd2hlbiB0aGUgb3V0cHV0IGNvZGUgaXMgZ2VuZXJhdGVkLiBJZiBsaW5lcyBhcmUgYWRkZWQKKyMgb3IgcmVtb3ZlZCwgdGhlIGFuY2hvcnMgd2lsbCBub3QgYmUgcGxhY2VkIGNvcnJlY3RseS4KKworSU5QVVRfRklMVEVSICAgICAgICAgICA9CisKKyMgVGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWx0ZXJzIG9uIGEgcGVyIGZpbGUgcGF0dGVybgorIyBiYXNpcy4KKyMgRG94eWdlbiB3aWxsIGNvbXBhcmUgdGhlIGZpbGUgbmFtZSB3aXRoIGVhY2ggcGF0dGVybiBhbmQgYXBwbHkgdGhlCisjIGZpbHRlciBpZiB0aGVyZSBpcyBhIG1hdGNoLgorIyBUaGUgZmlsdGVycyBhcmUgYSBsaXN0IG9mIHRoZSBmb3JtOgorIyBwYXR0ZXJuPWZpbHRlciAobGlrZSAqLmNwcD1teV9jcHBfZmlsdGVyKS4gU2VlIElOUFVUX0ZJTFRFUiBmb3IgZnVydGhlcgorIyBpbmZvIG9uIGhvdyBmaWx0ZXJzIGFyZSB1c2VkLiBJZiBGSUxURVJfUEFUVEVSTlMgaXMgZW1wdHkgb3IgaWYKKyMgbm9uIG9mIHRoZSBwYXR0ZXJucyBtYXRjaCB0aGUgZmlsZSBuYW1lLCBJTlBVVF9GSUxURVIgaXMgYXBwbGllZC4KKworRklMVEVSX1BBVFRFUk5TICAgICAgICA9CisKKyMgSWYgdGhlIEZJTFRFUl9TT1VSQ0VfRklMRVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBpbnB1dCBmaWx0ZXIgKGlmIHNldCB1c2luZworIyBJTlBVVF9GSUxURVIpIHdpbGwgYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGlucHV0IGZpbGVzIHdoZW4gcHJvZHVjaW5nIHNvdXJjZQorIyBmaWxlcyB0byBicm93c2UgKGkuZS4gd2hlbiBTT1VSQ0VfQlJPV1NFUiBpcyBzZXQgdG8gWUVTKS4KKworRklMVEVSX1NPVVJDRV9GSUxFUyAgICA9IE5PCisKKyMgVGhlIEZJTFRFUl9TT1VSQ0VfUEFUVEVSTlMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgc291cmNlIGZpbHRlcnMgcGVyIGZpbGUKKyMgcGF0dGVybi4gQSBwYXR0ZXJuIHdpbGwgb3ZlcnJpZGUgdGhlIHNldHRpbmcgZm9yIEZJTFRFUl9QQVRURVJOIChpZiBhbnkpCisjIGFuZCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGRpc2FibGUgc291cmNlIGZpbHRlcmluZyBmb3IgYSBzcGVjaWZpYyBwYXR0ZXJuCisjIHVzaW5nICouZXh0PSAoc28gd2l0aG91dCBuYW1pbmcgYSBmaWx0ZXIpLiBUaGlzIG9wdGlvbiBvbmx5IGhhcyBlZmZlY3Qgd2hlbgorIyBGSUxURVJfU09VUkNFX0ZJTEVTIGlzIGVuYWJsZWQuCisKK0ZJTFRFUl9TT1VSQ0VfUEFUVEVSTlMgPQorCisjIElmIHRoZSBVU0VfTURfRklMRV9BU19NQUlOUEFHRSB0YWcgcmVmZXJzIHRvIHRoZSBuYW1lIG9mIGEgbWFya2Rvd24gZmlsZSB0aGF0CisjIGlzIHBhcnQgb2YgdGhlIGlucHV0LCBpdHMgY29udGVudHMgd2lsbCBiZSBwbGFjZWQgb24gdGhlIG1haW4gcGFnZQorIyAoaW5kZXguaHRtbCkuIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIHByb2plY3Qgb24gZm9yIGluc3RhbmNlIEdpdEh1YgorIyBhbmQgd2FudCByZXVzZSB0aGUgaW50cm9kdWN0aW9uIHBhZ2UgYWxzbyBmb3IgdGhlIGRveHlnZW4gb3V0cHV0LgorCitVU0VfTURGSUxFX0FTX01BSU5QQUdFID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBzb3VyY2UgYnJvd3NpbmcKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgU09VUkNFX0JST1dTRVIgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBhIGxpc3Qgb2Ygc291cmNlIGZpbGVzIHdpbGwKKyMgYmUgZ2VuZXJhdGVkLiBEb2N1bWVudGVkIGVudGl0aWVzIHdpbGwgYmUgY3Jvc3MtcmVmZXJlbmNlZCB3aXRoIHRoZXNlIHNvdXJjZXMuCisjIE5vdGU6IFRvIGdldCByaWQgb2YgYWxsIHNvdXJjZSBjb2RlIGluIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LCBtYWtlIHN1cmUgYWxzbworIyBWRVJCQVRJTV9IRUFERVJTIGlzIHNldCB0byBOTy4KKworU09VUkNFX0JST1dTRVIgICAgICAgICA9IFlFUworCisjIFNldHRpbmcgdGhlIElOTElORV9TT1VSQ0VTIHRhZyB0byBZRVMgd2lsbCBpbmNsdWRlIHRoZSBib2R5CisjIG9mIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyBkaXJlY3RseSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworSU5MSU5FX1NPVVJDRVMgICAgICAgICA9IE5PCisKKyMgU2V0dGluZyB0aGUgU1RSSVBfQ09ERV9DT01NRU5UUyB0YWcgdG8gWUVTICh0aGUgZGVmYXVsdCkgd2lsbCBpbnN0cnVjdAorIyBkb3h5Z2VuIHRvIGhpZGUgYW55IHNwZWNpYWwgY29tbWVudCBibG9ja3MgZnJvbSBnZW5lcmF0ZWQgc291cmNlIGNvZGUKKyMgZnJhZ21lbnRzLiBOb3JtYWwgQywgQysrIGFuZCBGb3J0cmFuIGNvbW1lbnRzIHdpbGwgYWx3YXlzIHJlbWFpbiB2aXNpYmxlLgorCitTVFJJUF9DT0RFX0NPTU1FTlRTICAgID0gWUVTCisKKyMgSWYgdGhlIFJFRkVSRU5DRURfQllfUkVMQVRJT04gdGFnIGlzIHNldCB0byBZRVMKKyMgdGhlbiBmb3IgZWFjaCBkb2N1bWVudGVkIGZ1bmN0aW9uIGFsbCBkb2N1bWVudGVkCisjIGZ1bmN0aW9ucyByZWZlcmVuY2luZyBpdCB3aWxsIGJlIGxpc3RlZC4KKworUkVGRVJFTkNFRF9CWV9SRUxBVElPTiA9IFlFUworCisjIElmIHRoZSBSRUZFUkVOQ0VTX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTCisjIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZCBmdW5jdGlvbiBhbGwgZG9jdW1lbnRlZCBlbnRpdGllcworIyBjYWxsZWQvdXNlZCBieSB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgbGlzdGVkLgorCitSRUZFUkVOQ0VTX1JFTEFUSU9OICAgID0gWUVTCisKKyMgSWYgdGhlIFJFRkVSRU5DRVNfTElOS19TT1VSQ0UgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KQorIyBhbmQgU09VUkNFX0JST1dTRVIgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gdGhlIGh5cGVybGlua3MgZnJvbQorIyBmdW5jdGlvbnMgaW4gUkVGRVJFTkNFU19SRUxBVElPTiBhbmQgUkVGRVJFTkNFRF9CWV9SRUxBVElPTiBsaXN0cyB3aWxsCisjIGxpbmsgdG8gdGhlIHNvdXJjZSBjb2RlLgorIyBPdGhlcndpc2UgdGhleSB3aWxsIGxpbmsgdG8gdGhlIGRvY3VtZW50YXRpb24uCisKK1JFRkVSRU5DRVNfTElOS19TT1VSQ0UgPSBZRVMKKworIyBJZiB0aGUgVVNFX0hUQUdTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIHJlZmVyZW5jZXMgdG8gc291cmNlIGNvZGUKKyMgd2lsbCBwb2ludCB0byB0aGUgSFRNTCBnZW5lcmF0ZWQgYnkgdGhlIGh0YWdzKDEpIHRvb2wgaW5zdGVhZCBvZiBkb3h5Z2VuCisjIGJ1aWx0LWluIHNvdXJjZSBicm93c2VyLiBUaGUgaHRhZ3MgdG9vbCBpcyBwYXJ0IG9mIEdOVSdzIGdsb2JhbCBzb3VyY2UKKyMgdGFnZ2luZyBzeXN0ZW0gKHNlZSBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2xvYmFsL2dsb2JhbC5odG1sKS4gWW91CisjIHdpbGwgbmVlZCB2ZXJzaW9uIDQuOC42IG9yIGhpZ2hlci4KKworVVNFX0hUQUdTICAgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFZFUkJBVElNX0hFQURFUlMgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIERveHlnZW4KKyMgd2lsbCBnZW5lcmF0ZSBhIHZlcmJhdGltIGNvcHkgb2YgdGhlIGhlYWRlciBmaWxlIGZvciBlYWNoIGNsYXNzIGZvcgorIyB3aGljaCBhbiBpbmNsdWRlIGlzIHNwZWNpZmllZC4gU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4KKworVkVSQkFUSU1fSEVBREVSUyAgICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBhbHBoYWJldGljYWwgY2xhc3MgaW5kZXgKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgQUxQSEFCRVRJQ0FMX0lOREVYIHRhZyBpcyBzZXQgdG8gWUVTLCBhbiBhbHBoYWJldGljYWwgaW5kZXgKKyMgb2YgYWxsIGNvbXBvdW5kcyB3aWxsIGJlIGdlbmVyYXRlZC4gRW5hYmxlIHRoaXMgaWYgdGhlIHByb2plY3QKKyMgY29udGFpbnMgYSBsb3Qgb2YgY2xhc3Nlcywgc3RydWN0cywgdW5pb25zIG9yIGludGVyZmFjZXMuCisKK0FMUEhBQkVUSUNBTF9JTkRFWCAgICAgPSBOTworCisjIElmIHRoZSBhbHBoYWJldGljYWwgaW5kZXggaXMgZW5hYmxlZCAoc2VlIEFMUEhBQkVUSUNBTF9JTkRFWCkgdGhlbgorIyB0aGUgQ09MU19JTl9BTFBIQV9JTkRFWCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMKKyMgaW4gd2hpY2ggdGhpcyBsaXN0IHdpbGwgYmUgc3BsaXQgKGNhbiBiZSBhIG51bWJlciBpbiB0aGUgcmFuZ2UgWzEuLjIwXSkKKworQ09MU19JTl9BTFBIQV9JTkRFWCAgICA9IDUKKworIyBJbiBjYXNlIGFsbCBjbGFzc2VzIGluIGEgcHJvamVjdCBzdGFydCB3aXRoIGEgY29tbW9uIHByZWZpeCwgYWxsCisjIGNsYXNzZXMgd2lsbCBiZSBwdXQgdW5kZXIgdGhlIHNhbWUgaGVhZGVyIGluIHRoZSBhbHBoYWJldGljYWwgaW5kZXguCisjIFRoZSBJR05PUkVfUFJFRklYIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHByZWZpeGVzIHRoYXQKKyMgc2hvdWxkIGJlIGlnbm9yZWQgd2hpbGUgZ2VuZXJhdGluZyB0aGUgaW5kZXggaGVhZGVycy4KKworSUdOT1JFX1BSRUZJWCAgICAgICAgICA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIEhUTUwgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUwgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwKKyMgZ2VuZXJhdGUgSFRNTCBvdXRwdXQuCisKK0dFTkVSQVRFX0hUTUwgICAgICAgICAgPSBZRVMKKworIyBUaGUgSFRNTF9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgSFRNTCBkb2NzIHdpbGwgYmUgcHV0LgorIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlCisjIHB1dCBpbiBmcm9udCBvZiBpdC4gSWYgbGVmdCBibGFuayBgaHRtbCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK0hUTUxfT1VUUFVUICAgICAgICAgICAgPSAuCisKKyMgVGhlIEhUTUxfRklMRV9FWFRFTlNJT04gdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGZvcgorIyBlYWNoIGdlbmVyYXRlZCBIVE1MIHBhZ2UgKGZvciBleGFtcGxlOiAuaHRtLC5waHAsLmFzcCkuIElmIGl0IGlzIGxlZnQgYmxhbmsKKyMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGZpbGVzIHdpdGggLmh0bWwgZXh0ZW5zaW9uLgorCitIVE1MX0ZJTEVfRVhURU5TSU9OICAgID0gLmh0bWwKKworIyBUaGUgSFRNTF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBIVE1MIGhlYWRlciBmb3IKKyMgZWFjaCBnZW5lcmF0ZWQgSFRNTCBwYWdlLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIHN0YW5kYXJkIGhlYWRlci4gTm90ZSB0aGF0IHdoZW4gdXNpbmcgYSBjdXN0b20gaGVhZGVyIHlvdSBhcmUgcmVzcG9uc2libGUKKyMgIGZvciB0aGUgcHJvcGVyIGluY2x1c2lvbiBvZiBhbnkgc2NyaXB0cyBhbmQgc3R5bGUgc2hlZXRzIHRoYXQgZG94eWdlbgorIyBuZWVkcywgd2hpY2ggaXMgZGVwZW5kZW50IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdXNlZC4KKyMgSXQgaXMgYWR2aXNlZCB0byBnZW5lcmF0ZSBhIGRlZmF1bHQgaGVhZGVyIHVzaW5nICJkb3h5Z2VuIC13IGh0bWwKKyMgaGVhZGVyLmh0bWwgZm9vdGVyLmh0bWwgc3R5bGVzaGVldC5jc3MgWW91ckNvbmZpZ0ZpbGUiIGFuZCB0aGVuIG1vZGlmeQorIyB0aGF0IGhlYWRlci4gTm90ZSB0aGF0IHRoZSBoZWFkZXIgaXMgc3ViamVjdCB0byBjaGFuZ2Ugc28geW91IHR5cGljYWxseQorIyBoYXZlIHRvIHJlZG8gdGhpcyB3aGVuIHVwZ3JhZGluZyB0byBhIG5ld2VyIHZlcnNpb24gb2YgZG94eWdlbiBvciB3aGVuCisjIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBjb25maWd1cmF0aW9uIHNldHRpbmdzIHN1Y2ggYXMgR0VORVJBVEVfVFJFRVZJRVchCisKK0hUTUxfSEVBREVSICAgICAgICAgICAgPQorCisjIFRoZSBIVE1MX0ZPT1RFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHBlcnNvbmFsIEhUTUwgZm9vdGVyIGZvcgorIyBlYWNoIGdlbmVyYXRlZCBIVE1MIHBhZ2UuIElmIGl0IGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgc3RhbmRhcmQgZm9vdGVyLgorCitIVE1MX0ZPT1RFUiAgICAgICAgICAgID0KKworIyBUaGUgSFRNTF9TVFlMRVNIRUVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgdXNlci1kZWZpbmVkIGNhc2NhZGluZworIyBzdHlsZSBzaGVldCB0aGF0IGlzIHVzZWQgYnkgZWFjaCBIVE1MIHBhZ2UuIEl0IGNhbiBiZSB1c2VkIHRvCisjIGZpbmUtdHVuZSB0aGUgbG9vayBvZiB0aGUgSFRNTCBvdXRwdXQuIElmIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsCisjIGdlbmVyYXRlIGEgZGVmYXVsdCBzdHlsZSBzaGVldC4gTm90ZSB0aGF0IGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZQorIyBIVE1MX0VYVFJBX1NUWUxFU0hFRVQgaW5zdGVhZCBvZiB0aGlzIG9uZSwgYXMgaXQgaXMgbW9yZSByb2J1c3QgYW5kIHRoaXMKKyMgdGFnIHdpbGwgaW4gdGhlIGZ1dHVyZSBiZWNvbWUgb2Jzb2xldGUuCisKK0hUTUxfU1RZTEVTSEVFVCAgICAgICAgPQorCisjIFRoZSBIVE1MX0VYVFJBX1NUWUxFU0hFRVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW4gYWRkaXRpb25hbAorIyB1c2VyLWRlZmluZWQgY2FzY2FkaW5nIHN0eWxlIHNoZWV0IHRoYXQgaXMgaW5jbHVkZWQgYWZ0ZXIgdGhlIHN0YW5kYXJkCisjIHN0eWxlIHNoZWV0cyBjcmVhdGVkIGJ5IGRveHlnZW4uIFVzaW5nIHRoaXMgb3B0aW9uIG9uZSBjYW4gb3ZlcnJ1bGUKKyMgY2VydGFpbiBzdHlsZSBhc3BlY3RzLiBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIHVzaW5nIEhUTUxfU1RZTEVTSEVFVAorIyBzaW5jZSBpdCBkb2VzIG5vdCByZXBsYWNlIHRoZSBzdGFuZGFyZCBzdHlsZSBzaGVldCBhbmQgaXMgdGhlcmVmb3IgbW9yZQorIyByb2J1c3QgYWdhaW5zdCBmdXR1cmUgdXBkYXRlcy4gRG94eWdlbiB3aWxsIGNvcHkgdGhlIHN0eWxlIHNoZWV0IGZpbGUgdG8KKyMgdGhlIG91dHB1dCBkaXJlY3RvcnkuCisKK0hUTUxfRVhUUkFfU1RZTEVTSEVFVCAgPQorCisjIFRoZSBIVE1MX0VYVFJBX0ZJTEVTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4dHJhIGltYWdlcyBvcgorIyBvdGhlciBzb3VyY2UgZmlsZXMgd2hpY2ggc2hvdWxkIGJlIGNvcGllZCB0byB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LiBOb3RlCisjIHRoYXQgdGhlc2UgZmlsZXMgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGJhc2UgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LiBVc2UgdGhlCisjICRyZWxwYXRoXiBtYXJrZXIgaW4gdGhlIEhUTUxfSEVBREVSIGFuZC9vciBIVE1MX0ZPT1RFUiBmaWxlcyB0byBsb2FkIHRoZXNlCisjIGZpbGVzLiBJbiB0aGUgSFRNTF9TVFlMRVNIRUVUIGZpbGUsIHVzZSB0aGUgZmlsZSBuYW1lIG9ubHkuIEFsc28gbm90ZSB0aGF0CisjIHRoZSBmaWxlcyB3aWxsIGJlIGNvcGllZCBhcy1pczsgdGhlcmUgYXJlIG5vIGNvbW1hbmRzIG9yIG1hcmtlcnMgYXZhaWxhYmxlLgorCitIVE1MX0VYVFJBX0ZJTEVTICAgICAgID0KKworIyBUaGUgSFRNTF9DT0xPUlNUWUxFX0hVRSB0YWcgY29udHJvbHMgdGhlIGNvbG9yIG9mIHRoZSBIVE1MIG91dHB1dC4KKyMgRG94eWdlbiB3aWxsIGFkanVzdCB0aGUgY29sb3JzIGluIHRoZSBzdHlsZSBzaGVldCBhbmQgYmFja2dyb3VuZCBpbWFnZXMKKyMgYWNjb3JkaW5nIHRvIHRoaXMgY29sb3IuIEh1ZSBpcyBzcGVjaWZpZWQgYXMgYW4gYW5nbGUgb24gYSBjb2xvcndoZWVsLAorIyBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IdWUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjIEZvciBpbnN0YW5jZSB0aGUgdmFsdWUgMCByZXByZXNlbnRzIHJlZCwgNjAgaXMgeWVsbG93LCAxMjAgaXMgZ3JlZW4sCisjIDE4MCBpcyBjeWFuLCAyNDAgaXMgYmx1ZSwgMzAwIHB1cnBsZSwgYW5kIDM2MCBpcyByZWQgYWdhaW4uCisjIFRoZSBhbGxvd2VkIHJhbmdlIGlzIDAgdG8gMzU5LgorCitIVE1MX0NPTE9SU1RZTEVfSFVFICAgID0gMjIwCisKKyMgVGhlIEhUTUxfQ09MT1JTVFlMRV9TQVQgdGFnIGNvbnRyb2xzIHRoZSBwdXJpdHkgKG9yIHNhdHVyYXRpb24pIG9mCisjIHRoZSBjb2xvcnMgaW4gdGhlIEhUTUwgb3V0cHV0LiBGb3IgYSB2YWx1ZSBvZiAwIHRoZSBvdXRwdXQgd2lsbCB1c2UKKyMgZ3JheXNjYWxlcyBvbmx5LiBBIHZhbHVlIG9mIDI1NSB3aWxsIHByb2R1Y2UgdGhlIG1vc3Qgdml2aWQgY29sb3JzLgorCitIVE1MX0NPTE9SU1RZTEVfU0FUICAgID0gMTAwCisKKyMgVGhlIEhUTUxfQ09MT1JTVFlMRV9HQU1NQSB0YWcgY29udHJvbHMgdGhlIGdhbW1hIGNvcnJlY3Rpb24gYXBwbGllZCB0bworIyB0aGUgbHVtaW5hbmNlIGNvbXBvbmVudCBvZiB0aGUgY29sb3JzIGluIHRoZSBIVE1MIG91dHB1dC4gVmFsdWVzIGJlbG93CisjIDEwMCBncmFkdWFsbHkgbWFrZSB0aGUgb3V0cHV0IGxpZ2h0ZXIsIHdoZXJlYXMgdmFsdWVzIGFib3ZlIDEwMCBtYWtlCisjIHRoZSBvdXRwdXQgZGFya2VyLiBUaGUgdmFsdWUgZGl2aWRlZCBieSAxMDAgaXMgdGhlIGFjdHVhbCBnYW1tYSBhcHBsaWVkLAorIyBzbyA4MCByZXByZXNlbnRzIGEgZ2FtbWEgb2YgMC44LCBUaGUgdmFsdWUgMjIwIHJlcHJlc2VudHMgYSBnYW1tYSBvZiAyLjIsCisjIGFuZCAxMDAgZG9lcyBub3QgY2hhbmdlIHRoZSBnYW1tYS4KKworSFRNTF9DT0xPUlNUWUxFX0dBTU1BICA9IDgwCisKKyMgSWYgdGhlIEhUTUxfVElNRVNUQU1QIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIGZvb3RlciBvZiBlYWNoIGdlbmVyYXRlZCBIVE1MCisjIHBhZ2Ugd2lsbCBjb250YWluIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlIHBhZ2Ugd2FzIGdlbmVyYXRlZC4gU2V0dGluZworIyB0aGlzIHRvIE5PIGNhbiBoZWxwIHdoZW4gY29tcGFyaW5nIHRoZSBvdXRwdXQgb2YgbXVsdGlwbGUgcnVucy4KKworSFRNTF9USU1FU1RBTVAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBIVE1MX0RZTkFNSUNfU0VDVElPTlMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgZ2VuZXJhdGVkIEhUTUwKKyMgZG9jdW1lbnRhdGlvbiB3aWxsIGNvbnRhaW4gc2VjdGlvbnMgdGhhdCBjYW4gYmUgaGlkZGVuIGFuZCBzaG93biBhZnRlciB0aGUKKyMgcGFnZSBoYXMgbG9hZGVkLgorCitIVE1MX0RZTkFNSUNfU0VDVElPTlMgID0gTk8KKworIyBXaXRoIEhUTUxfSU5ERVhfTlVNX0VOVFJJRVMgb25lIGNhbiBjb250cm9sIHRoZSBwcmVmZXJyZWQgbnVtYmVyIG9mCisjIGVudHJpZXMgc2hvd24gaW4gdGhlIHZhcmlvdXMgdHJlZSBzdHJ1Y3R1cmVkIGluZGljZXMgaW5pdGlhbGx5OyB0aGUgdXNlcgorIyBjYW4gZXhwYW5kIGFuZCBjb2xsYXBzZSBlbnRyaWVzIGR5bmFtaWNhbGx5IGxhdGVyIG9uLiBEb3h5Z2VuIHdpbGwgZXhwYW5kCisjIHRoZSB0cmVlIHRvIHN1Y2ggYSBsZXZlbCB0aGF0IGF0IG1vc3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZW50cmllcyBhcmUKKyMgdmlzaWJsZSAodW5sZXNzIGEgZnVsbHkgY29sbGFwc2VkIHRyZWUgYWxyZWFkeSBleGNlZWRzIHRoaXMgYW1vdW50KS4KKyMgU28gc2V0dGluZyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgMSB3aWxsIHByb2R1Y2UgYSBmdWxsIGNvbGxhcHNlZCB0cmVlIGJ5CisjIGRlZmF1bHQuIDAgaXMgYSBzcGVjaWFsIHZhbHVlIHJlcHJlc2VudGluZyBhbiBpbmZpbml0ZSBudW1iZXIgb2YgZW50cmllcworIyBhbmQgd2lsbCByZXN1bHQgaW4gYSBmdWxsIGV4cGFuZGVkIHRyZWUgYnkgZGVmYXVsdC4KKworSFRNTF9JTkRFWF9OVU1fRU5UUklFUyA9IDEwMAorCisjIElmIHRoZSBHRU5FUkFURV9ET0NTRVQgdGFnIGlzIHNldCB0byBZRVMsIGFkZGl0aW9uYWwgaW5kZXggZmlsZXMKKyMgd2lsbCBiZSBnZW5lcmF0ZWQgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgQXBwbGUncyBYY29kZSAzCisjIGludGVncmF0ZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIGludHJvZHVjZWQgd2l0aCBPU1ggMTAuNSAoTGVvcGFyZCkuCisjIFRvIGNyZWF0ZSBhIGRvY3VtZW50YXRpb24gc2V0LCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBNYWtlZmlsZSBpbiB0aGUKKyMgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LiBSdW5uaW5nIG1ha2Ugd2lsbCBwcm9kdWNlIHRoZSBkb2NzZXQgaW4gdGhhdAorIyBkaXJlY3RvcnkgYW5kIHJ1bm5pbmcgIm1ha2UgaW5zdGFsbCIgd2lsbCBpbnN0YWxsIHRoZSBkb2NzZXQgaW4KKyMgfi9MaWJyYXJ5L0RldmVsb3Blci9TaGFyZWQvRG9jdW1lbnRhdGlvbi9Eb2NTZXRzIHNvIHRoYXQgWGNvZGUgd2lsbCBmaW5kCisjIGl0IGF0IHN0YXJ0dXAuCisjIFNlZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90b29scy9jcmVhdGluZ2RvY3NldHN3aXRoZG94eWdlbi5odG1sCisjIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitHRU5FUkFURV9ET0NTRVQgICAgICAgID0gTk8KKworIyBXaGVuIEdFTkVSQVRFX0RPQ1NFVCB0YWcgaXMgc2V0IHRvIFlFUywgdGhpcyB0YWcgZGV0ZXJtaW5lcyB0aGUgbmFtZSBvZiB0aGUKKyMgZmVlZC4gQSBkb2N1bWVudGF0aW9uIGZlZWQgcHJvdmlkZXMgYW4gdW1icmVsbGEgdW5kZXIgd2hpY2ggbXVsdGlwbGUKKyMgZG9jdW1lbnRhdGlvbiBzZXRzIGZyb20gYSBzaW5nbGUgcHJvdmlkZXIgKHN1Y2ggYXMgYSBjb21wYW55IG9yIHByb2R1Y3Qgc3VpdGUpCisjIGNhbiBiZSBncm91cGVkLgorCitET0NTRVRfRkVFRE5BTUUgICAgICAgID0gIkRveHlnZW4gZ2VuZXJhdGVkIGRvY3MiCisKKyMgV2hlbiBHRU5FUkFURV9ET0NTRVQgdGFnIGlzIHNldCB0byBZRVMsIHRoaXMgdGFnIHNwZWNpZmllcyBhIHN0cmluZyB0aGF0CisjIHNob3VsZCB1bmlxdWVseSBpZGVudGlmeSB0aGUgZG9jdW1lbnRhdGlvbiBzZXQgYnVuZGxlLiBUaGlzIHNob3VsZCBiZSBhCisjIHJldmVyc2UgZG9tYWluLW5hbWUgc3R5bGUgc3RyaW5nLCBlLmcuIGNvbS5teWNvbXBhbnkuTXlEb2NTZXQuIERveHlnZW4KKyMgd2lsbCBhcHBlbmQgLmRvY3NldCB0byB0aGUgbmFtZS4KKworRE9DU0VUX0JVTkRMRV9JRCAgICAgICA9IG9yZy5kb3h5Z2VuLlByb2plY3QKKworIyBXaGVuIEdFTkVSQVRFX1BVQkxJU0hFUl9JRCB0YWcgc3BlY2lmaWVzIGEgc3RyaW5nIHRoYXQgc2hvdWxkIHVuaXF1ZWx5CisjIGlkZW50aWZ5IHRoZSBkb2N1bWVudGF0aW9uIHB1Ymxpc2hlci4gVGhpcyBzaG91bGQgYmUgYSByZXZlcnNlIGRvbWFpbi1uYW1lCisjIHN0eWxlIHN0cmluZywgZS5nLiBjb20ubXljb21wYW55Lk15RG9jU2V0LmRvY3VtZW50YXRpb24uCisKK0RPQ1NFVF9QVUJMSVNIRVJfSUQgICAgPSBvcmcuZG94eWdlbi5QdWJsaXNoZXIKKworIyBUaGUgR0VORVJBVEVfUFVCTElTSEVSX05BTUUgdGFnIGlkZW50aWZpZXMgdGhlIGRvY3VtZW50YXRpb24gcHVibGlzaGVyLgorCitET0NTRVRfUFVCTElTSEVSX05BTUUgID0gUHVibGlzaGVyCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCBhZGRpdGlvbmFsIGluZGV4IGZpbGVzCisjIHdpbGwgYmUgZ2VuZXJhdGVkIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIHRvb2xzIGxpa2UgdGhlCisjIE1pY3Jvc29mdCBIVE1MIGhlbHAgd29ya3Nob3AgdG8gZ2VuZXJhdGUgYSBjb21waWxlZCBIVE1MIGhlbHAgZmlsZSAoLmNobSkKKyMgb2YgdGhlIGdlbmVyYXRlZCBIVE1MIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX0hUTUxIRUxQICAgICAgPSBOTworCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIENITV9GSUxFIHRhZyBjYW4KKyMgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAuY2htIGZpbGUuIFlvdQorIyBjYW4gYWRkIGEgcGF0aCBpbiBmcm9udCBvZiB0aGUgZmlsZSBpZiB0aGUgcmVzdWx0IHNob3VsZCBub3QgYmUKKyMgd3JpdHRlbiB0byB0aGUgaHRtbCBvdXRwdXQgZGlyZWN0b3J5LgorCitDSE1fRklMRSAgICAgICAgICAgICAgID0KKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBISENfTE9DQVRJT04gdGFnIGNhbgorIyBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIChhYnNvbHV0ZSBwYXRoIGluY2x1ZGluZyBmaWxlIG5hbWUpIG9mCisjIHRoZSBIVE1MIGhlbHAgY29tcGlsZXIgKGhoYy5leGUpLiBJZiBub24tZW1wdHkgZG94eWdlbiB3aWxsIHRyeSB0byBydW4KKyMgdGhlIEhUTUwgaGVscCBjb21waWxlciBvbiB0aGUgZ2VuZXJhdGVkIGluZGV4LmhocC4KKworSEhDX0xPQ0FUSU9OICAgICAgICAgICA9CisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgR0VORVJBVEVfQ0hJIGZsYWcKKyMgY29udHJvbHMgaWYgYSBzZXBhcmF0ZSAuY2hpIGluZGV4IGZpbGUgaXMgZ2VuZXJhdGVkIChZRVMpIG9yIHRoYXQKKyMgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBtYXN0ZXIgLmNobSBmaWxlIChOTykuCisKK0dFTkVSQVRFX0NISSAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIENITV9JTkRFWF9FTkNPRElORworIyBpcyB1c2VkIHRvIGVuY29kZSBIdG1sSGVscCBpbmRleCAoaGhrKSwgY29udGVudCAoaGhjKSBhbmQgcHJvamVjdCBmaWxlCisjIGNvbnRlbnQuCisKK0NITV9JTkRFWF9FTkNPRElORyAgICAgPQorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIEJJTkFSWV9UT0MgZmxhZworIyBjb250cm9scyB3aGV0aGVyIGEgYmluYXJ5IHRhYmxlIG9mIGNvbnRlbnRzIGlzIGdlbmVyYXRlZCAoWUVTKSBvciBhCisjIG5vcm1hbCB0YWJsZSBvZiBjb250ZW50cyAoTk8pIGluIHRoZSAuY2htIGZpbGUuCisKK0JJTkFSWV9UT0MgICAgICAgICAgICAgPSBOTworCisjIFRoZSBUT0NfRVhQQU5EIGZsYWcgY2FuIGJlIHNldCB0byBZRVMgdG8gYWRkIGV4dHJhIGl0ZW1zIGZvciBncm91cCBtZW1iZXJzCisjIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgSFRNTCBoZWxwIGRvY3VtZW50YXRpb24gYW5kIHRvIHRoZSB0cmVlIHZpZXcuCisKK1RPQ19FWFBBTkQgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBHRU5FUkFURV9RSFAgdGFnIGlzIHNldCB0byBZRVMgYW5kIGJvdGggUUhQX05BTUVTUEFDRSBhbmQKKyMgUUhQX1ZJUlRVQUxfRk9MREVSIGFyZSBzZXQsIGFuIGFkZGl0aW9uYWwgaW5kZXggZmlsZSB3aWxsIGJlIGdlbmVyYXRlZAorIyB0aGF0IGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciBRdCdzIHFoZWxwZ2VuZXJhdG9yIHRvIGdlbmVyYXRlIGEKKyMgUXQgQ29tcHJlc3NlZCBIZWxwICgucWNoKSBvZiB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfUUhQICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFFIR19MT0NBVElPTiB0YWcgaXMgc3BlY2lmaWVkLCB0aGUgUUNIX0ZJTEUgdGFnIGNhbgorIyBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIC5xY2ggZmlsZS4KKyMgVGhlIHBhdGggc3BlY2lmaWVkIGlzIHJlbGF0aXZlIHRvIHRoZSBIVE1MIG91dHB1dCBmb2xkZXIuCisKK1FDSF9GSUxFICAgICAgICAgICAgICAgPQorCisjIFRoZSBRSFBfTkFNRVNQQUNFIHRhZyBzcGVjaWZpZXMgdGhlIG5hbWVzcGFjZSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nCisjIFF0IEhlbHAgUHJvamVjdCBvdXRwdXQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUKKyMgaHR0cDovL2RvYy50cm9sbHRlY2guY29tL3F0aGVscHByb2plY3QuaHRtbCNuYW1lc3BhY2UKKworUUhQX05BTUVTUEFDRSAgICAgICAgICA9IG9yZy5kb3h5Z2VuLlByb2plY3QKKworIyBUaGUgUUhQX1ZJUlRVQUxfRk9MREVSIHRhZyBzcGVjaWZpZXMgdGhlIG5hbWVzcGFjZSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nCisjIFF0IEhlbHAgUHJvamVjdCBvdXRwdXQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUKKyMgaHR0cDovL2RvYy50cm9sbHRlY2guY29tL3F0aGVscHByb2plY3QuaHRtbCN2aXJ0dWFsLWZvbGRlcnMKKworUUhQX1ZJUlRVQUxfRk9MREVSICAgICA9IGRvYworCisjIElmIFFIUF9DVVNUX0ZJTFRFUl9OQU1FIGlzIHNldCwgaXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgY3VzdG9tIGZpbHRlciB0bworIyBhZGQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUKKyMgaHR0cDovL2RvYy50cm9sbHRlY2guY29tL3F0aGVscHByb2plY3QuaHRtbCNjdXN0b20tZmlsdGVycworCitRSFBfQ1VTVF9GSUxURVJfTkFNRSAgID0KKworIyBUaGUgUUhQX0NVU1RfRklMVF9BVFRSUyB0YWcgc3BlY2lmaWVzIHRoZSBsaXN0IG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZQorIyBjdXN0b20gZmlsdGVyIHRvIGFkZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZQorIyA8YSBocmVmPSJodHRwOi8vZG9jLnRyb2xsdGVjaC5jb20vcXRoZWxwcHJvamVjdC5odG1sI2N1c3RvbS1maWx0ZXJzIj4KKyMgUXQgSGVscCBQcm9qZWN0IC8gQ3VzdG9tIEZpbHRlcnM8L2E+LgorCitRSFBfQ1VTVF9GSUxURVJfQVRUUlMgID0KKworIyBUaGUgUUhQX1NFQ1RfRklMVEVSX0FUVFJTIHRhZyBzcGVjaWZpZXMgdGhlIGxpc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgdGhpcworIyBwcm9qZWN0J3MKKyMgZmlsdGVyIHNlY3Rpb24gbWF0Y2hlcy4KKyMgPGEgaHJlZj0iaHR0cDovL2RvYy50cm9sbHRlY2guY29tL3F0aGVscHByb2plY3QuaHRtbCNmaWx0ZXItYXR0cmlidXRlcyI+CisjIFF0IEhlbHAgUHJvamVjdCAvIEZpbHRlciBBdHRyaWJ1dGVzPC9hPi4KKworUUhQX1NFQ1RfRklMVEVSX0FUVFJTICA9CisKKyMgSWYgdGhlIEdFTkVSQVRFX1FIUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIFFIR19MT0NBVElPTiB0YWcgY2FuCisjIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgUXQncyBxaGVscGdlbmVyYXRvci4KKyMgSWYgbm9uLWVtcHR5IGRveHlnZW4gd2lsbCB0cnkgdG8gcnVuIHFoZWxwZ2VuZXJhdG9yIG9uIHRoZSBnZW5lcmF0ZWQKKyMgLnFocCBmaWxlLgorCitRSEdfTE9DQVRJT04gICAgICAgICAgID0KKworIyBJZiB0aGUgR0VORVJBVEVfRUNMSVBTRUhFTFAgdGFnIGlzIHNldCB0byBZRVMsIGFkZGl0aW9uYWwgaW5kZXggZmlsZXMKKyMgIHdpbGwgYmUgZ2VuZXJhdGVkLCB3aGljaCB0b2dldGhlciB3aXRoIHRoZSBIVE1MIGZpbGVzLCBmb3JtIGFuIEVjbGlwc2UgaGVscAorIyBwbHVnaW4uIFRvIGluc3RhbGwgdGhpcyBwbHVnaW4gYW5kIG1ha2UgaXQgYXZhaWxhYmxlIHVuZGVyIHRoZSBoZWxwIGNvbnRlbnRzCisjIG1lbnUgaW4gRWNsaXBzZSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgSFRNTCBhbmQgWE1MCisjIGZpbGVzIG5lZWRzIHRvIGJlIGNvcGllZCBpbnRvIHRoZSBwbHVnaW5zIGRpcmVjdG9yeSBvZiBlY2xpcHNlLiBUaGUgbmFtZSBvZgorIyB0aGUgZGlyZWN0b3J5IHdpdGhpbiB0aGUgcGx1Z2lucyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRoZSBzYW1lIGFzCisjIHRoZSBFQ0xJUFNFX0RPQ19JRCB2YWx1ZS4gQWZ0ZXIgY29weWluZyBFY2xpcHNlIG5lZWRzIHRvIGJlIHJlc3RhcnRlZCBiZWZvcmUKKyMgdGhlIGhlbHAgYXBwZWFycy4KKworR0VORVJBVEVfRUNMSVBTRUhFTFAgICA9IE5PCisKKyMgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVjbGlwc2UgaGVscCBwbHVnaW4uIFdoZW4gaW5zdGFsbGluZyB0aGUgcGx1Z2luCisjIHRoZSBkaXJlY3RvcnkgbmFtZSBjb250YWluaW5nIHRoZSBIVE1MIGFuZCBYTUwgZmlsZXMgc2hvdWxkIGFsc28gaGF2ZQorIyB0aGlzIG5hbWUuCisKK0VDTElQU0VfRE9DX0lEICAgICAgICAgPSBvcmcuZG94eWdlbi5Qcm9qZWN0CisKKyMgVGhlIERJU0FCTEVfSU5ERVggdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSBjb25kZW5zZWQgaW5kZXggKHRhYnMpCisjIGF0IHRvcCBvZiBlYWNoIEhUTUwgcGFnZS4gVGhlIHZhbHVlIE5PICh0aGUgZGVmYXVsdCkgZW5hYmxlcyB0aGUgaW5kZXggYW5kCisjIHRoZSB2YWx1ZSBZRVMgZGlzYWJsZXMgaXQuIFNpbmNlIHRoZSB0YWJzIGhhdmUgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgdGhlCisjIG5hdmlnYXRpb24gdHJlZSB5b3UgY2FuIHNldCB0aGlzIG9wdGlvbiB0byBOTyBpZiB5b3UgYWxyZWFkeSBzZXQKKyMgR0VORVJBVEVfVFJFRVZJRVcgdG8gWUVTLgorCitESVNBQkxFX0lOREVYICAgICAgICAgID0gTk8KKworIyBUaGUgR0VORVJBVEVfVFJFRVZJRVcgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIGEgdHJlZS1saWtlIGluZGV4CisjIHN0cnVjdHVyZSBzaG91bGQgYmUgZ2VuZXJhdGVkIHRvIGRpc3BsYXkgaGllcmFyY2hpY2FsIGluZm9ybWF0aW9uLgorIyBJZiB0aGUgdGFnIHZhbHVlIGlzIHNldCB0byBZRVMsIGEgc2lkZSBwYW5lbCB3aWxsIGJlIGdlbmVyYXRlZAorIyBjb250YWluaW5nIGEgdHJlZS1saWtlIGluZGV4IHN0cnVjdHVyZSAoanVzdCBsaWtlIHRoZSBvbmUgdGhhdAorIyBpcyBnZW5lcmF0ZWQgZm9yIEhUTUwgSGVscCkuIEZvciB0aGlzIHRvIHdvcmsgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMKKyMgSmF2YVNjcmlwdCwgREhUTUwsIENTUyBhbmQgZnJhbWVzIGlzIHJlcXVpcmVkIChpLmUuIGFueSBtb2Rlcm4gYnJvd3NlcikuCisjIFdpbmRvd3MgdXNlcnMgYXJlIHByb2JhYmx5IGJldHRlciBvZmYgdXNpbmcgdGhlIEhUTUwgaGVscCBmZWF0dXJlLgorIyBTaW5jZSB0aGUgdHJlZSBiYXNpY2FsbHkgaGFzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIHRoZSB0YWIgaW5kZXggeW91CisjIGNvdWxkIGNvbnNpZGVyIHRvIHNldCBESVNBQkxFX0lOREVYIHRvIE5PIHdoZW4gZW5hYmxpbmcgdGhpcyBvcHRpb24uCisKK0dFTkVSQVRFX1RSRUVWSUVXICAgICAgPSBOTworCisjIFRoZSBFTlVNX1ZBTFVFU19QRVJfTElORSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgZW51bSB2YWx1ZXMKKyMgKHJhbmdlIFswLDEuLjIwXSkgdGhhdCBkb3h5Z2VuIHdpbGwgZ3JvdXAgb24gb25lIGxpbmUgaW4gdGhlIGdlbmVyYXRlZCBIVE1MCisjIGRvY3VtZW50YXRpb24uIE5vdGUgdGhhdCBhIHZhbHVlIG9mIDAgd2lsbCBjb21wbGV0ZWx5IHN1cHByZXNzIHRoZSBlbnVtCisjIHZhbHVlcyBmcm9tIGFwcGVhcmluZyBpbiB0aGUgb3ZlcnZpZXcgc2VjdGlvbi4KKworRU5VTV9WQUxVRVNfUEVSX0xJTkUgICA9IDQKKworIyBJZiB0aGUgdHJlZXZpZXcgaXMgZW5hYmxlZCAoc2VlIEdFTkVSQVRFX1RSRUVWSUVXKSB0aGVuIHRoaXMgdGFnIGNhbiBiZQorIyB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZnJhbWUgaW4gd2hpY2ggdGhlIHRyZWUKKyMgaXMgc2hvd24uCisKK1RSRUVWSUVXX1dJRFRIICAgICAgICAgPSAyNTAKKworIyBXaGVuIHRoZSBFWFRfTElOS1NfSU5fV0lORE9XIG9wdGlvbiBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBvcGVuCisjIGxpbmtzIHRvIGV4dGVybmFsIHN5bWJvbHMgaW1wb3J0ZWQgdmlhIHRhZyBmaWxlcyBpbiBhIHNlcGFyYXRlIHdpbmRvdy4KKworRVhUX0xJTktTX0lOX1dJTkRPVyAgICA9IE5PCisKKyMgVXNlIHRoaXMgdGFnIHRvIGNoYW5nZSB0aGUgZm9udCBzaXplIG9mIExhdGV4IGZvcm11bGFzIGluY2x1ZGVkCisjIGFzIGltYWdlcyBpbiB0aGUgSFRNTCBkb2N1bWVudGF0aW9uLiBUaGUgZGVmYXVsdCBpcyAxMC4gTm90ZSB0aGF0CisjIHdoZW4geW91IGNoYW5nZSB0aGUgZm9udCBzaXplIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkb3h5Z2VuIHJ1biB5b3UgbmVlZAorIyB0byBtYW51YWxseSByZW1vdmUgYW55IGZvcm1fKi5wbmcgaW1hZ2VzIGZyb20gdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeQorIyB0byBmb3JjZSB0aGVtIHRvIGJlIHJlZ2VuZXJhdGVkLgorCitGT1JNVUxBX0ZPTlRTSVpFICAgICAgID0gMTAKKworIyBVc2UgdGhlIEZPUk1VTEFfVFJBTlBBUkVOVCB0YWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZXMKKyMgZ2VuZXJhdGVkIGZvciBmb3JtdWxhcyBhcmUgdHJhbnNwYXJlbnQgUE5Hcy4gVHJhbnNwYXJlbnQgUE5HcyBhcmUKKyMgbm90IHN1cHBvcnRlZCBwcm9wZXJseSBmb3IgSUUgNi4wLCBidXQgYXJlIHN1cHBvcnRlZCBvbiBhbGwgbW9kZXJuIGJyb3dzZXJzLgorIyBOb3RlIHRoYXQgd2hlbiBjaGFuZ2luZyB0aGlzIG9wdGlvbiB5b3UgbmVlZCB0byBkZWxldGUgYW55IGZvcm1fKi5wbmcgZmlsZXMKKyMgaW4gdGhlIEhUTUwgb3V0cHV0IGJlZm9yZSB0aGUgY2hhbmdlcyBoYXZlIGVmZmVjdC4KKworRk9STVVMQV9UUkFOU1BBUkVOVCAgICA9IFlFUworCisjIEVuYWJsZSB0aGUgVVNFX01BVEhKQVggb3B0aW9uIHRvIHJlbmRlciBMYVRlWCBmb3JtdWxhcyB1c2luZyBNYXRoSmF4CisjIChzZWUgaHR0cDovL3d3dy5tYXRoamF4Lm9yZykgd2hpY2ggdXNlcyBjbGllbnQgc2lkZSBKYXZhc2NyaXB0IGZvciB0aGUKKyMgcmVuZGVyaW5nIGluc3RlYWQgb2YgdXNpbmcgcHJlcmVuZGVyZWQgYml0bWFwcy4gVXNlIHRoaXMgaWYgeW91IGRvIG5vdAorIyBoYXZlIExhVGVYIGluc3RhbGxlZCBvciBpZiB5b3Ugd2FudCB0byBmb3JtdWxhcyBsb29rIHByZXR0aWVyIGluIHRoZSBIVE1MCisjIG91dHB1dC4gV2hlbiBlbmFibGVkIHlvdSBtYXkgYWxzbyBuZWVkIHRvIGluc3RhbGwgTWF0aEpheCBzZXBhcmF0ZWx5IGFuZAorIyBjb25maWd1cmUgdGhlIHBhdGggdG8gaXQgdXNpbmcgdGhlIE1BVEhKQVhfUkVMUEFUSCBvcHRpb24uCisKK1VTRV9NQVRISkFYICAgICAgICAgICAgPSBOTworCisjIFdoZW4gTWF0aEpheCBpcyBlbmFibGVkIHlvdSBjYW4gc2V0IHRoZSBkZWZhdWx0IG91dHB1dCBmb3JtYXQgdG8gYmUgdXNlZCBmb3IKKyMgdGhlIE1hdGhKYXggb3V0cHV0LiBTdXBwb3J0ZWQgdHlwZXMgYXJlIEhUTUwtQ1NTLCBOYXRpdmVNTUwgKGkuZS4gTWF0aE1MKSBhbmQKKyMgU1ZHLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBIVE1MLUNTUywgd2hpY2ggaXMgc2xvd2VyLCBidXQgaGFzIHRoZSBiZXN0CisjIGNvbXBhdGliaWxpdHkuCisKK01BVEhKQVhfRk9STUFUICAgICAgICAgPSBIVE1MLUNTUworCisjIFdoZW4gTWF0aEpheCBpcyBlbmFibGVkIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIHJlbGF0aXZlIHRvIHRoZQorIyBIVE1MIG91dHB1dCBkaXJlY3RvcnkgdXNpbmcgdGhlIE1BVEhKQVhfUkVMUEFUSCBvcHRpb24uIFRoZSBkZXN0aW5hdGlvbgorIyBkaXJlY3Rvcnkgc2hvdWxkIGNvbnRhaW4gdGhlIE1hdGhKYXguanMgc2NyaXB0LiBGb3IgaW5zdGFuY2UsIGlmIHRoZSBtYXRoamF4CisjIGRpcmVjdG9yeSBpcyBsb2NhdGVkIGF0IHRoZSBzYW1lIGxldmVsIGFzIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnksIHRoZW4KKyMgTUFUSEpBWF9SRUxQQVRIIHNob3VsZCBiZSAuLi9tYXRoamF4LiBUaGUgZGVmYXVsdCB2YWx1ZSBwb2ludHMgdG8KKyMgdGhlIE1hdGhKYXggQ29udGVudCBEZWxpdmVyeSBOZXR3b3JrIHNvIHlvdSBjYW4gcXVpY2tseSBzZWUgdGhlIHJlc3VsdCB3aXRob3V0CisjIGluc3RhbGxpbmcgTWF0aEpheC4KKyMgSG93ZXZlciwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gaW5zdGFsbCBhIGxvY2FsCisjIGNvcHkgb2YgTWF0aEpheCBmcm9tIGh0dHA6Ly93d3cubWF0aGpheC5vcmcgYmVmb3JlIGRlcGxveW1lbnQuCisKK01BVEhKQVhfUkVMUEFUSCAgICAgICAgPSBodHRwOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0CisKKyMgVGhlIE1BVEhKQVhfRVhURU5TSU9OUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgTWF0aEpheCBleHRlbnNpb24KKyMgbmFtZXMgdGhhdCBzaG91bGQgYmUgZW5hYmxlZCBkdXJpbmcgTWF0aEpheCByZW5kZXJpbmcuCisKK01BVEhKQVhfRVhURU5TSU9OUyAgICAgPQorCisjIFRoZSBNQVRISkFYX0NPREVGSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZmlsZSB3aXRoIGphdmFzY3JpcHQKKyMgcGllY2VzIG9mIGNvZGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gc3RhcnR1cCBvZiB0aGUgTWF0aEpheCBjb2RlLgorCitNQVRISkFYX0NPREVGSUxFICAgICAgID0KKworIyBXaGVuIHRoZSBTRUFSQ0hFTkdJTkUgdGFnIGlzIGVuYWJsZWQgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgc2VhcmNoIGJveAorIyBmb3IgdGhlIEhUTUwgb3V0cHV0LiBUaGUgdW5kZXJseWluZyBzZWFyY2ggZW5naW5lIHVzZXMgamF2YXNjcmlwdAorIyBhbmQgREhUTUwgYW5kIHNob3VsZCB3b3JrIG9uIGFueSBtb2Rlcm4gYnJvd3Nlci4gTm90ZSB0aGF0IHdoZW4gdXNpbmcKKyMgSFRNTCBoZWxwIChHRU5FUkFURV9IVE1MSEVMUCksIFF0IGhlbHAgKEdFTkVSQVRFX1FIUCksIG9yIGRvY3NldHMKKyMgKEdFTkVSQVRFX0RPQ1NFVCkgdGhlcmUgaXMgYWxyZWFkeSBhIHNlYXJjaCBmdW5jdGlvbiBzbyB0aGlzIG9uZSBzaG91bGQKKyMgdHlwaWNhbGx5IGJlIGRpc2FibGVkLiBGb3IgbGFyZ2UgcHJvamVjdHMgdGhlIGphdmFzY3JpcHQgYmFzZWQgc2VhcmNoIGVuZ2luZQorIyBjYW4gYmUgc2xvdywgdGhlbiBlbmFibGluZyBTRVJWRVJfQkFTRURfU0VBUkNIIG1heSBwcm92aWRlIGEgYmV0dGVyIHNvbHV0aW9uLgorCitTRUFSQ0hFTkdJTkUgICAgICAgICAgID0gTk8KKworIyBXaGVuIHRoZSBTRVJWRVJfQkFTRURfU0VBUkNIIHRhZyBpcyBlbmFibGVkIHRoZSBzZWFyY2ggZW5naW5lIHdpbGwgYmUKKyMgaW1wbGVtZW50ZWQgdXNpbmcgYSB3ZWIgc2VydmVyIGluc3RlYWQgb2YgYSB3ZWIgY2xpZW50IHVzaW5nIEphdmFzY3JpcHQuCisjIFRoZXJlIGFyZSB0d28gZmxhdm91cnMgb2Ygd2ViIHNlcnZlciBiYXNlZCBzZWFyY2ggZGVwZW5kaW5nIG9uIHRoZQorIyBFWFRFUk5BTF9TRUFSQ0ggc2V0dGluZy4gV2hlbiBkaXNhYmxlZCwgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgUEhQIHNjcmlwdCBmb3IKKyMgc2VhcmNoaW5nIGFuZCBhbiBpbmRleCBmaWxlIHVzZWQgYnkgdGhlIHNjcmlwdC4gV2hlbiBFWFRFUk5BTF9TRUFSQ0ggaXMKKyMgZW5hYmxlZCB0aGUgaW5kZXhpbmcgYW5kIHNlYXJjaGluZyBuZWVkcyB0byBiZSBwcm92aWRlZCBieSBleHRlcm5hbCB0b29scy4KKyMgU2VlIHRoZSBtYW51YWwgZm9yIGRldGFpbHMuCisKK1NFUlZFUl9CQVNFRF9TRUFSQ0ggICAgPSBOTworCisjIFdoZW4gRVhURVJOQUxfU0VBUkNIIGlzIGVuYWJsZWQgZG94eWdlbiB3aWxsIG5vIGxvbmdlciBnZW5lcmF0ZSB0aGUgUEhQCisjIHNjcmlwdCBmb3Igc2VhcmNoaW5nLiBJbnN0ZWFkIHRoZSBzZWFyY2ggcmVzdWx0cyBhcmUgd3JpdHRlbiB0byBhbiBYTUwgZmlsZQorIyB3aGljaCBuZWVkcyB0byBiZSBwcm9jZXNzZWQgYnkgYW4gZXh0ZXJuYWwgaW5kZXhlci4gRG94eWdlbiB3aWxsIGludm9rZSBhbgorIyBleHRlcm5hbCBzZWFyY2ggZW5naW5lIHBvaW50ZWQgdG8gYnkgdGhlIFNFQVJDSEVOR0lORV9VUkwgb3B0aW9uIHRvIG9idGFpbgorIyB0aGUgc2VhcmNoIHJlc3VsdHMuIERveHlnZW4gc2hpcHMgd2l0aCBhbiBleGFtcGxlIGluZGV4ZXIgKGRveHlpbmRleGVyKSBhbmQKKyMgc2VhcmNoIGVuZ2luZSAoZG94eXNlYXJjaC5jZ2kpIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgb3BlbiBzb3VyY2Ugc2VhcmNoCisjIGVuZ2luZSBsaWJyYXJ5IFhhcGlhbi4gU2VlIHRoZSBtYW51YWwgZm9yIGNvbmZpZ3VyYXRpb24gZGV0YWlscy4KKworRVhURVJOQUxfU0VBUkNIICAgICAgICA9IE5PCisKKyMgVGhlIFNFQVJDSEVOR0lORV9VUkwgc2hvdWxkIHBvaW50IHRvIGEgc2VhcmNoIGVuZ2luZSBob3N0ZWQgYnkgYSB3ZWIgc2VydmVyCisjIHdoaWNoIHdpbGwgcmV0dXJuZWQgdGhlIHNlYXJjaCByZXN1bHRzIHdoZW4gRVhURVJOQUxfU0VBUkNIIGlzIGVuYWJsZWQuCisjIERveHlnZW4gc2hpcHMgd2l0aCBhbiBleGFtcGxlIHNlYXJjaCBlbmdpbmUgKGRveHlzZWFyY2gpIHdoaWNoIGlzIGJhc2VkIG9uCisjIHRoZSBvcGVuIHNvdXJjZSBzZWFyY2ggZW5naW5lIGxpYnJhcnkgWGFwaWFuLiBTZWUgdGhlIG1hbnVhbCBmb3IgY29uZmlndXJhdGlvbgorIyBkZXRhaWxzLgorCitTRUFSQ0hFTkdJTkVfVVJMICAgICAgID0KKworIyBXaGVuIFNFUlZFUl9CQVNFRF9TRUFSQ0ggYW5kIEVYVEVSTkFMX1NFQVJDSCBhcmUgYm90aCBlbmFibGVkIHRoZSB1bmluZGV4ZWQKKyMgc2VhcmNoIGRhdGEgaXMgd3JpdHRlbiB0byBhIGZpbGUgZm9yIGluZGV4aW5nIGJ5IGFuIGV4dGVybmFsIHRvb2wuIFdpdGggdGhlCisjIFNFQVJDSERBVEFfRklMRSB0YWcgdGhlIG5hbWUgb2YgdGhpcyBmaWxlIGNhbiBiZSBzcGVjaWZpZWQuCisKK1NFQVJDSERBVEFfRklMRSAgICAgICAgPSBzZWFyY2hkYXRhLnhtbAorCisjIFdoZW4gU0VSVkVSX0JBU0VEX1NFQVJDSCBBTkQgRVhURVJOQUxfU0VBUkNIIGFyZSBib3RoIGVuYWJsZWQgdGhlCisjIEVYVEVSTkFMX1NFQVJDSF9JRCB0YWcgY2FuIGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllciBmb3IgdGhlIHByb2plY3QuIFRoaXMgaXMKKyMgdXNlZnVsIGluIGNvbWJpbmF0aW9uIHdpdGggRVhUUkFfU0VBUkNIX01BUFBJTkdTIHRvIHNlYXJjaCB0aHJvdWdoIG11bHRpcGxlCisjIHByb2plY3RzIGFuZCByZWRpcmVjdCB0aGUgcmVzdWx0cyBiYWNrIHRvIHRoZSByaWdodCBwcm9qZWN0LgorCitFWFRFUk5BTF9TRUFSQ0hfSUQgICAgID0KKworIyBUaGUgRVhUUkFfU0VBUkNIX01BUFBJTkdTIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgc2VhcmNoaW5nIHRocm91Z2ggZG94eWdlbgorIyBwcm9qZWN0cyBvdGhlciB0aGFuIHRoZSBvbmUgZGVmaW5lZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSwgYnV0IHRoYXQgYXJlCisjIGFsbCBhZGRlZCB0byB0aGUgc2FtZSBleHRlcm5hbCBzZWFyY2ggaW5kZXguIEVhY2ggcHJvamVjdCBuZWVkcyB0byBoYXZlIGEKKyMgdW5pcXVlIGlkIHNldCB2aWEgRVhURVJOQUxfU0VBUkNIX0lELiBUaGUgc2VhcmNoIG1hcHBpbmcgdGhlbiBtYXBzIHRoZSBpZAorIyBvZiB0byBhIHJlbGF0aXZlIGxvY2F0aW9uIHdoZXJlIHRoZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZC4KKyMgVGhlIGZvcm1hdCBpczogRVhUUkFfU0VBUkNIX01BUFBJTkdTID0gaWQxPWxvYzEgaWQyPWxvYzIgLi4uCisKK0VYVFJBX1NFQVJDSF9NQVBQSU5HUyAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTEFURVggdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwKKyMgZ2VuZXJhdGUgTGF0ZXggb3V0cHV0LgorCitHRU5FUkFURV9MQVRFWCAgICAgICAgID0gTk8KKworIyBUaGUgTEFURVhfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIExhVGVYIGRvY3Mgd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBsYXRleCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK0xBVEVYX09VVFBVVCAgICAgICAgICAgPSBsYXRleAorCisjIFRoZSBMQVRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgTGFUZVggY29tbWFuZCBuYW1lIHRvIGJlCisjIGludm9rZWQuIElmIGxlZnQgYmxhbmsgYGxhdGV4JyB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgY29tbWFuZCBuYW1lLgorIyBOb3RlIHRoYXQgd2hlbiBlbmFibGluZyBVU0VfUERGTEFURVggdGhpcyBvcHRpb24gaXMgb25seSB1c2VkIGZvcgorIyBnZW5lcmF0aW5nIGJpdG1hcHMgZm9yIGZvcm11bGFzIGluIHRoZSBIVE1MIG91dHB1dCwgYnV0IG5vdCBpbiB0aGUKKyMgTWFrZWZpbGUgdGhhdCBpcyB3cml0dGVuIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LgorCitMQVRFWF9DTURfTkFNRSAgICAgICAgID0gbGF0ZXgKKworIyBUaGUgTUFLRUlOREVYX0NNRF9OQU1FIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb21tYW5kIG5hbWUgdG8KKyMgZ2VuZXJhdGUgaW5kZXggZm9yIExhVGVYLiBJZiBsZWZ0IGJsYW5rIGBtYWtlaW5kZXgnIHdpbGwgYmUgdXNlZCBhcyB0aGUKKyMgZGVmYXVsdCBjb21tYW5kIG5hbWUuCisKK01BS0VJTkRFWF9DTURfTkFNRSAgICAgPSBtYWtlaW5kZXgKKworIyBJZiB0aGUgQ09NUEFDVF9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIGdlbmVyYXRlcyBtb3JlIGNvbXBhY3QKKyMgTGFUZVggZG9jdW1lbnRzLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIHNtYWxsIHByb2plY3RzIGFuZCBtYXkgaGVscCB0bworIyBzYXZlIHNvbWUgdHJlZXMgaW4gZ2VuZXJhbC4KKworQ09NUEFDVF9MQVRFWCAgICAgICAgICA9IFlFUworCisjIFRoZSBQQVBFUl9UWVBFIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHBhcGVyIHR5cGUgdGhhdCBpcyB1c2VkCisjIGJ5IHRoZSBwcmludGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBhNCwgbGV0dGVyLCBsZWdhbCBhbmQKKyMgZXhlY3V0aXZlLiBJZiBsZWZ0IGJsYW5rIGE0IHdpbGwgYmUgdXNlZC4KKworUEFQRVJfVFlQRSAgICAgICAgICAgICA9IGE0d2lkZQorCisjIFRoZSBFWFRSQV9QQUNLQUdFUyB0YWcgY2FuIGJlIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgbmFtZXMgb2YgTGFUZVgKKyMgcGFja2FnZXMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIExhVGVYIG91dHB1dC4KKworRVhUUkFfUEFDS0FHRVMgICAgICAgICA9CisKKyMgVGhlIExBVEVYX0hFQURFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHBlcnNvbmFsIExhVGVYIGhlYWRlciBmb3IKKyMgdGhlIGdlbmVyYXRlZCBsYXRleCBkb2N1bWVudC4gVGhlIGhlYWRlciBzaG91bGQgY29udGFpbiBldmVyeXRoaW5nIHVudGlsCisjIHRoZSBmaXJzdCBjaGFwdGVyLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIHN0YW5kYXJkIGhlYWRlci4gTm90aWNlOiBvbmx5IHVzZSB0aGlzIHRhZyBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmchCisKK0xBVEVYX0hFQURFUiAgICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9GT09URVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBmb290ZXIgZm9yCisjIHRoZSBnZW5lcmF0ZWQgbGF0ZXggZG9jdW1lbnQuIFRoZSBmb290ZXIgc2hvdWxkIGNvbnRhaW4gZXZlcnl0aGluZyBhZnRlcgorIyB0aGUgbGFzdCBjaGFwdGVyLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIHN0YW5kYXJkIGZvb3Rlci4gTm90aWNlOiBvbmx5IHVzZSB0aGlzIHRhZyBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmchCisKK0xBVEVYX0ZPT1RFUiAgICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9FWFRSQV9GSUxFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBleHRyYSBpbWFnZXMKKyMgb3Igb3RoZXIgc291cmNlIGZpbGVzIHdoaWNoIHNob3VsZCBiZSBjb3BpZWQgdG8gdGhlIExhVGVYIG91dHB1dCBkaXJlY3RvcnkuCisjIE5vdGUgdGhhdCB0aGUgZmlsZXMgd2lsbCBiZSBjb3BpZWQgYXMtaXM7IHRoZXJlIGFyZSBubyBjb21tYW5kcyBvciBtYXJrZXJzCisjIGF2YWlsYWJsZS4KKworTEFURVhfRVhUUkFfRklMRVMgICAgICA9CisKKyMgSWYgdGhlIFBERl9IWVBFUkxJTktTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgTGFUZVggdGhhdCBpcyBnZW5lcmF0ZWQKKyMgaXMgcHJlcGFyZWQgZm9yIGNvbnZlcnNpb24gdG8gcGRmICh1c2luZyBwczJwZGYpLiBUaGUgcGRmIGZpbGUgd2lsbAorIyBjb250YWluIGxpbmtzIChqdXN0IGxpa2UgdGhlIEhUTUwgb3V0cHV0KSBpbnN0ZWFkIG9mIHBhZ2UgcmVmZXJlbmNlcworIyBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBhIHBkZiB2aWV3ZXIuCisKK1BERl9IWVBFUkxJTktTICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgVVNFX1BERkxBVEVYIHRhZyBpcyBzZXQgdG8gWUVTLCBwZGZsYXRleCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZgorIyBwbGFpbiBsYXRleCBpbiB0aGUgZ2VuZXJhdGVkIE1ha2VmaWxlLiBTZXQgdGhpcyBvcHRpb24gdG8gWUVTIHRvIGdldCBhCisjIGhpZ2hlciBxdWFsaXR5IFBERiBkb2N1bWVudGF0aW9uLgorCitVU0VfUERGTEFURVggICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIExBVEVYX0JBVENITU9ERSB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGFkZCB0aGUgXFxiYXRjaG1vZGUuCisjIGNvbW1hbmQgdG8gdGhlIGdlbmVyYXRlZCBMYVRlWCBmaWxlcy4gVGhpcyB3aWxsIGluc3RydWN0IExhVGVYIHRvIGtlZXAKKyMgcnVubmluZyBpZiBlcnJvcnMgb2NjdXIsIGluc3RlYWQgb2YgYXNraW5nIHRoZSB1c2VyIGZvciBoZWxwLgorIyBUaGlzIG9wdGlvbiBpcyBhbHNvIHVzZWQgd2hlbiBnZW5lcmF0aW5nIGZvcm11bGFzIGluIEhUTUwuCisKK0xBVEVYX0JBVENITU9ERSAgICAgICAgPSBOTworCisjIElmIExBVEVYX0hJREVfSU5ESUNFUyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIG5vdAorIyBpbmNsdWRlIHRoZSBpbmRleCBjaGFwdGVycyAoc3VjaCBhcyBGaWxlIEluZGV4LCBDb21wb3VuZCBJbmRleCwgZXRjLikKKyMgaW4gdGhlIG91dHB1dC4KKworTEFURVhfSElERV9JTkRJQ0VTICAgICA9IE5PCisKKyMgSWYgTEFURVhfU09VUkNFX0NPREUgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbmNsdWRlCisjIHNvdXJjZSBjb2RlIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyBpbiB0aGUgTGFUZVggb3V0cHV0LgorIyBOb3RlIHRoYXQgd2hpY2ggc291cmNlcyBhcmUgc2hvd24gYWxzbyBkZXBlbmRzIG9uIG90aGVyIHNldHRpbmdzCisjIHN1Y2ggYXMgU09VUkNFX0JST1dTRVIuCisKK0xBVEVYX1NPVVJDRV9DT0RFICAgICAgPSBOTworCisjIFRoZSBMQVRFWF9CSUJfU1RZTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHN0eWxlIHRvIHVzZSBmb3IgdGhlCisjIGJpYmxpb2dyYXBoeSwgZS5nLiBwbGFpbm5hdCwgb3IgaWVlZXRyLiBUaGUgZGVmYXVsdCBzdHlsZSBpcyAicGxhaW4iLiBTZWUKKyMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaWJUZVggZm9yIG1vcmUgaW5mby4KKworTEFURVhfQklCX1NUWUxFICAgICAgICA9IHBsYWluCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFJURiBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfUlRGIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbCBnZW5lcmF0ZSBSVEYgb3V0cHV0CisjIFRoZSBSVEYgb3V0cHV0IGlzIG9wdGltaXplZCBmb3IgV29yZCA5NyBhbmQgbWF5IG5vdCBsb29rIHZlcnkgcHJldHR5IHdpdGgKKyMgb3RoZXIgUlRGIHJlYWRlcnMgb3IgZWRpdG9ycy4KKworR0VORVJBVEVfUlRGICAgICAgICAgICA9IE5PCisKKyMgVGhlIFJURl9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgUlRGIGRvY3Mgd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBydGYnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitSVEZfT1VUUFVUICAgICAgICAgICAgID0gcnRmCisKKyMgSWYgdGhlIENPTVBBQ1RfUlRGIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gZ2VuZXJhdGVzIG1vcmUgY29tcGFjdAorIyBSVEYgZG9jdW1lbnRzLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIHNtYWxsIHByb2plY3RzIGFuZCBtYXkgaGVscCB0bworIyBzYXZlIHNvbWUgdHJlZXMgaW4gZ2VuZXJhbC4KKworQ09NUEFDVF9SVEYgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFJURl9IWVBFUkxJTktTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgUlRGIHRoYXQgaXMgZ2VuZXJhdGVkCisjIHdpbGwgY29udGFpbiBoeXBlcmxpbmsgZmllbGRzLiBUaGUgUlRGIGZpbGUgd2lsbAorIyBjb250YWluIGxpbmtzIChqdXN0IGxpa2UgdGhlIEhUTUwgb3V0cHV0KSBpbnN0ZWFkIG9mIHBhZ2UgcmVmZXJlbmNlcy4KKyMgVGhpcyBtYWtlcyB0aGUgb3V0cHV0IHN1aXRhYmxlIGZvciBvbmxpbmUgYnJvd3NpbmcgdXNpbmcgV09SRCBvciBvdGhlcgorIyBwcm9ncmFtcyB3aGljaCBzdXBwb3J0IHRob3NlIGZpZWxkcy4KKyMgTm90ZTogd29yZHBhZCAod3JpdGUpIGFuZCBvdGhlcnMgZG8gbm90IHN1cHBvcnQgbGlua3MuCisKK1JURl9IWVBFUkxJTktTICAgICAgICAgPSBOTworCisjIExvYWQgc3R5bGUgc2hlZXQgZGVmaW5pdGlvbnMgZnJvbSBmaWxlLiBTeW50YXggaXMgc2ltaWxhciB0byBkb3h5Z2VuJ3MKKyMgY29uZmlnIGZpbGUsIGkuZS4gYSBzZXJpZXMgb2YgYXNzaWdubWVudHMuIFlvdSBvbmx5IGhhdmUgdG8gcHJvdmlkZQorIyByZXBsYWNlbWVudHMsIG1pc3NpbmcgZGVmaW5pdGlvbnMgYXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlLgorCitSVEZfU1RZTEVTSEVFVF9GSUxFICAgID0KKworIyBTZXQgb3B0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGdlbmVyYXRpb24gb2YgYW4gcnRmIGRvY3VtZW50LgorIyBTeW50YXggaXMgc2ltaWxhciB0byBkb3h5Z2VuJ3MgY29uZmlnIGZpbGUuCisKK1JURl9FWFRFTlNJT05TX0ZJTEUgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBtYW4gcGFnZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTUFOIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsCisjIGdlbmVyYXRlIG1hbiBwYWdlcworCitHRU5FUkFURV9NQU4gICAgICAgICAgID0gTk8KKworIyBUaGUgTUFOX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBtYW4gcGFnZXMgd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBtYW4nIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitNQU5fT1VUUFVUICAgICAgICAgICAgID0gbWFuCisKKyMgVGhlIE1BTl9FWFRFTlNJT04gdGFnIGRldGVybWluZXMgdGhlIGV4dGVuc2lvbiB0aGF0IGlzIGFkZGVkIHRvCisjIHRoZSBnZW5lcmF0ZWQgbWFuIHBhZ2VzIChkZWZhdWx0IGlzIHRoZSBzdWJyb3V0aW5lJ3Mgc2VjdGlvbiAuMykKKworTUFOX0VYVEVOU0lPTiAgICAgICAgICA9IC4zCisKKyMgSWYgdGhlIE1BTl9MSU5LUyB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgRG94eWdlbiBnZW5lcmF0ZXMgbWFuIG91dHB1dCwKKyMgdGhlbiBpdCB3aWxsIGdlbmVyYXRlIG9uZSBhZGRpdGlvbmFsIG1hbiBmaWxlIGZvciBlYWNoIGVudGl0eQorIyBkb2N1bWVudGVkIGluIHRoZSByZWFsIG1hbiBwYWdlKHMpLiBUaGVzZSBhZGRpdGlvbmFsIGZpbGVzCisjIG9ubHkgc291cmNlIHRoZSByZWFsIG1hbiBwYWdlLCBidXQgd2l0aG91dCB0aGVtIHRoZSBtYW4gY29tbWFuZAorIyB3b3VsZCBiZSB1bmFibGUgdG8gZmluZCB0aGUgY29ycmVjdCBwYWdlLiBUaGUgZGVmYXVsdCBpcyBOTy4KKworTUFOX0xJTktTICAgICAgICAgICAgICA9IE5PCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFhNTCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfWE1MIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBhbiBYTUwgZmlsZSB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YKKyMgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9YTUwgICAgICAgICAgID0gTk8KKworIyBUaGUgWE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBYTUwgcGFnZXMgd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGB4bWwnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitYTUxfT1VUUFVUICAgICAgICAgICAgID0geG1sCisKKyMgVGhlIFhNTF9TQ0hFTUEgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW4gWE1MIHNjaGVtYSwKKyMgd2hpY2ggY2FuIGJlIHVzZWQgYnkgYSB2YWxpZGF0aW5nIFhNTCBwYXJzZXIgdG8gY2hlY2sgdGhlCisjIHN5bnRheCBvZiB0aGUgWE1MIGZpbGVzLgorCisjWE1MX1NDSEVNQSAgICAgICAgICAgICA9CisKKyMgVGhlIFhNTF9EVEQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW4gWE1MIERURCwKKyMgd2hpY2ggY2FuIGJlIHVzZWQgYnkgYSB2YWxpZGF0aW5nIFhNTCBwYXJzZXIgdG8gY2hlY2sgdGhlCisjIHN5bnRheCBvZiB0aGUgWE1MIGZpbGVzLgorCisjWE1MX0RURCAgICAgICAgICAgICAgICA9CisKKyMgSWYgdGhlIFhNTF9QUk9HUkFNTElTVElORyB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwKKyMgZHVtcCB0aGUgcHJvZ3JhbSBsaXN0aW5ncyAoaW5jbHVkaW5nIHN5bnRheCBoaWdobGlnaHRpbmcKKyMgYW5kIGNyb3NzLXJlZmVyZW5jaW5nIGluZm9ybWF0aW9uKSB0byB0aGUgWE1MIG91dHB1dC4gTm90ZSB0aGF0CisjIGVuYWJsaW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBYTUwgb3V0cHV0LgorCitYTUxfUFJPR1JBTUxJU1RJTkcgICAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIERPQ0JPT0sgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX0RPQ0JPT0sgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGdlbmVyYXRlIERPQ0JPT0sgZmlsZXMKKyMgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBQREYuCisKK0dFTkVSQVRFX0RPQ0JPT0sgICAgICAgPSBOTworCisjIFRoZSBET0NCT09LX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBET0NCT09LIHBhZ2VzIHdpbGwgYmUgcHV0LgorIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIHB1dCBpbgorIyBmcm9udCBvZiBpdC4gSWYgbGVmdCBibGFuayBkb2Nib29rIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitET0NCT09LX09VVFBVVCAgICAgICAgID0gZG9jYm9vaworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEF1dG9HZW4gRGVmaW5pdGlvbnMgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX0FVVE9HRU5fREVGIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBhbiBBdXRvR2VuIERlZmluaXRpb25zIChzZWUgYXV0b2dlbi5zZi5uZXQpIGZpbGUKKyMgdGhhdCBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwKKyMgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcyBzdGlsbCBleHBlcmltZW50YWwKKyMgYW5kIGluY29tcGxldGUgYXQgdGhlIG1vbWVudC4KKworR0VORVJBVEVfQVVUT0dFTl9ERUYgICA9IE5PCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFBlcmwgbW9kdWxlIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9QRVJMTU9EIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBhIFBlcmwgbW9kdWxlIGZpbGUgdGhhdCBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mCisjIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMKKyMgZmVhdHVyZSBpcyBzdGlsbCBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUgYXQgdGhlCisjIG1vbWVudC4KKworR0VORVJBVEVfUEVSTE1PRCAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfTEFURVggdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGdlbmVyYXRlCisjIHRoZSBuZWNlc3NhcnkgTWFrZWZpbGUgcnVsZXMsIFBlcmwgc2NyaXB0cyBhbmQgTGFUZVggY29kZSB0byBiZSBhYmxlCisjIHRvIGdlbmVyYXRlIFBERiBhbmQgRFZJIG91dHB1dCBmcm9tIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQuCisKK1BFUkxNT0RfTEFURVggICAgICAgICAgPSBOTworCisjIElmIHRoZSBQRVJMTU9EX1BSRVRUWSB0YWcgaXMgc2V0IHRvIFlFUyB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUKKyMgbmljZWx5IGZvcm1hdHRlZCBzbyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGEgaHVtYW4gcmVhZGVyLgorIyBUaGlzIGlzIHVzZWZ1bAorIyBpZiB5b3Ugd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24uCisjIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGlzCisjIHRhZyBpcyBzZXQgdG8gTk8gdGhlIHNpemUgb2YgdGhlIFBlcmwgbW9kdWxlIG91dHB1dCB3aWxsIGJlIG11Y2ggc21hbGxlcgorIyBhbmQgUGVybCB3aWxsIHBhcnNlIGl0IGp1c3QgdGhlIHNhbWUuCisKK1BFUkxNT0RfUFJFVFRZICAgICAgICAgPSBZRVMKKworIyBUaGUgbmFtZXMgb2YgdGhlIG1ha2UgdmFyaWFibGVzIGluIHRoZSBnZW5lcmF0ZWQgZG94eXJ1bGVzLm1ha2UgZmlsZQorIyBhcmUgcHJlZml4ZWQgd2l0aCB0aGUgc3RyaW5nIGNvbnRhaW5lZCBpbiBQRVJMTU9EX01BS0VWQVJfUFJFRklYLgorIyBUaGlzIGlzIHVzZWZ1bCBzbyBkaWZmZXJlbnQgZG94eXJ1bGVzLm1ha2UgZmlsZXMgaW5jbHVkZWQgYnkgdGhlIHNhbWUKKyMgTWFrZWZpbGUgZG9uJ3Qgb3ZlcndyaXRlIGVhY2ggb3RoZXIncyB2YXJpYWJsZXMuCisKK1BFUkxNT0RfTUFLRVZBUl9QUkVGSVggPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBwcmVwcm9jZXNzb3IKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgRU5BQkxFX1BSRVBST0NFU1NJTkcgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwKKyMgZXZhbHVhdGUgYWxsIEMtcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgZm91bmQgaW4gdGhlIHNvdXJjZXMgYW5kIGluY2x1ZGUKKyMgZmlsZXMuCisKK0VOQUJMRV9QUkVQUk9DRVNTSU5HICAgPSBZRVMKKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbCBleHBhbmQgYWxsIG1hY3JvCisjIG5hbWVzIGluIHRoZSBzb3VyY2UgY29kZS4gSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgb25seSBjb25kaXRpb25hbAorIyBjb21waWxhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZC4gTWFjcm8gZXhwYW5zaW9uIGNhbiBiZSBkb25lIGluIGEgY29udHJvbGxlZAorIyB3YXkgYnkgc2V0dGluZyBFWFBBTkRfT05MWV9QUkVERUYgdG8gWUVTLgorCitNQUNST19FWFBBTlNJT04gICAgICAgID0gTk8KKworIyBJZiB0aGUgRVhQQU5EX09OTFlfUFJFREVGIGFuZCBNQUNST19FWFBBTlNJT04gdGFncyBhcmUgYm90aCBzZXQgdG8gWUVTCisjIHRoZW4gdGhlIG1hY3JvIGV4cGFuc2lvbiBpcyBsaW1pdGVkIHRvIHRoZSBtYWNyb3Mgc3BlY2lmaWVkIHdpdGggdGhlCisjIFBSRURFRklORUQgYW5kIEVYUEFORF9BU19ERUZJTkVEIHRhZ3MuCisKK0VYUEFORF9PTkxZX1BSRURFRiAgICAgPSBOTworCisjIElmIHRoZSBTRUFSQ0hfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGUgaW5jbHVkZXMgZmlsZXMKKyMgcG9pbnRlZCB0byBieSBJTkNMVURFX1BBVEggd2lsbCBiZSBzZWFyY2hlZCB3aGVuIGEgI2luY2x1ZGUgaXMgZm91bmQuCisKK1NFQVJDSF9JTkNMVURFUyAgICAgICAgPSBZRVMKKworIyBUaGUgSU5DTFVERV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBpbmNsdWRlIGZpbGVzIHRoYXQgYXJlIG5vdCBpbnB1dCBmaWxlcyBidXQgc2hvdWxkIGJlIHByb2Nlc3NlZCBieQorIyB0aGUgcHJlcHJvY2Vzc29yLgorCitJTkNMVURFX1BBVEggICAgICAgICAgID0KKworIyBZb3UgY2FuIHVzZSB0aGUgSU5DTFVERV9GSUxFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkCisjIHBhdHRlcm5zIChsaWtlICouaCBhbmQgKi5ocHApIHRvIGZpbHRlciBvdXQgdGhlIGhlYWRlci1maWxlcyBpbiB0aGUKKyMgZGlyZWN0b3JpZXMuIElmIGxlZnQgYmxhbmssIHRoZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCBGSUxFX1BBVFRFUk5TIHdpbGwKKyMgYmUgdXNlZC4KKworSU5DTFVERV9GSUxFX1BBVFRFUk5TICA9CisKKyMgVGhlIFBSRURFRklORUQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgbWFjcm8gbmFtZXMgdGhhdAorIyBhcmUgZGVmaW5lZCBiZWZvcmUgdGhlIHByZXByb2Nlc3NvciBpcyBzdGFydGVkIChzaW1pbGFyIHRvIHRoZSAtRCBvcHRpb24gb2YKKyMgZ2NjKS4gVGhlIGFyZ3VtZW50IG9mIHRoZSB0YWcgaXMgYSBsaXN0IG9mIG1hY3JvcyBvZiB0aGUgZm9ybTogbmFtZQorIyBvciBuYW1lPWRlZmluaXRpb24gKG5vIHNwYWNlcykuIElmIHRoZSBkZWZpbml0aW9uIGFuZCB0aGUgPSBhcmUKKyMgb21pdHRlZCA9MSBpcyBhc3N1bWVkLiBUbyBwcmV2ZW50IGEgbWFjcm8gZGVmaW5pdGlvbiBmcm9tIGJlaW5nCisjIHVuZGVmaW5lZCB2aWEgI3VuZGVmIG9yIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHVzZSB0aGUgOj0gb3BlcmF0b3IKKyMgaW5zdGVhZCBvZiB0aGUgPSBvcGVyYXRvci4KKworUFJFREVGSU5FRCAgICAgICAgICAgICA9IFdJTjMyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVExNIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVU0VfTFpPIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFTkFCTEVfRlJBR01FTlQgXAorICAgICAgICAgICAgICAgICAgICAgICAgIFAyTVAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIFAyTVBfU0VSVkVSIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVU0VfQ1JZUFRPIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVU0VfU1NMIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFTkFCTEVfUExVR0lOIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFTkFCTEVfTUFOQUdFTUVOVCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgRU5BQkxFX09DQyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgSEFWRV9HRVRUSU1FT0ZEQVkKKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIGFuZCBFWFBBTkRfT05MWV9QUkVERUYgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuCisjIHRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBsaXN0IG9mIG1hY3JvIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLgorIyBUaGUgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZSBzb3VyY2VzIHdpbGwgYmUgdXNlZC4KKyMgVXNlIHRoZSBQUkVERUZJTkVEIHRhZyBpZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgbWFjcm8gZGVmaW5pdGlvbiB0aGF0CisjIG92ZXJydWxlcyB0aGUgZGVmaW5pdGlvbiBmb3VuZCBpbiB0aGUgc291cmNlIGNvZGUuCisKK0VYUEFORF9BU19ERUZJTkVEICAgICAgPQorCisjIElmIHRoZSBTS0lQX0ZVTkNUSU9OX01BQ1JPUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4KKyMgZG94eWdlbidzIHByZXByb2Nlc3NvciB3aWxsIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBmdW5jdGlvbi1saWtlIG1hY3JvcworIyB0aGF0IGFyZSBhbG9uZSBvbiBhIGxpbmUsIGhhdmUgYW4gYWxsIHVwcGVyY2FzZSBuYW1lLCBhbmQgZG8gbm90IGVuZCB3aXRoIGEKKyMgc2VtaWNvbG9uLCBiZWNhdXNlIHRoZXNlIHdpbGwgY29uZnVzZSB0aGUgcGFyc2VyIGlmIG5vdCByZW1vdmVkLgorCitTS0lQX0ZVTkNUSU9OX01BQ1JPUyAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbjo6YWRkaXRpb25zIHJlbGF0ZWQgdG8gZXh0ZXJuYWwgcmVmZXJlbmNlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBUQUdGSUxFUyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB0YWdmaWxlcy4gRm9yIGVhY2gKKyMgdGFnIGZpbGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBkb2N1bWVudGF0aW9uIHNob3VsZCBiZSBhZGRlZC4gVGhlCisjIGZvcm1hdCBvZiBhIHRhZyBmaWxlIHdpdGhvdXQgdGhpcyBsb2NhdGlvbiBpcyBhcyBmb2xsb3dzOgorIworIyBUQUdGSUxFUyA9IGZpbGUxIGZpbGUyIC4uLgorIyBBZGRpbmcgbG9jYXRpb24gZm9yIHRoZSB0YWcgZmlsZXMgaXMgZG9uZSBhcyBmb2xsb3dzOgorIworIyBUQUdGSUxFUyA9IGZpbGUxPWxvYzEgImZpbGUyID0gbG9jMiIgLi4uCisjIHdoZXJlICJsb2MxIiBhbmQgImxvYzIiIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRocworIyBvciBVUkxzLiBOb3RlIHRoYXQgZWFjaCB0YWcgZmlsZSBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZSAod2hlcmUgdGhlIG5hbWUgZG9lcworIyBOT1QgaW5jbHVkZSB0aGUgcGF0aCkuIElmIGEgdGFnIGZpbGUgaXMgbm90IGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaAorIyBkb3h5Z2VuIGlzIHJ1biwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSB0YWdmaWxlIGhlcmUuCisKK1RBR0ZJTEVTICAgICAgICAgICAgICAgPQorCisjIFdoZW4gYSBmaWxlIG5hbWUgaXMgc3BlY2lmaWVkIGFmdGVyIEdFTkVSQVRFX1RBR0ZJTEUsIGRveHlnZW4gd2lsbCBjcmVhdGUKKyMgYSB0YWcgZmlsZSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBpbnB1dCBmaWxlcyBpdCByZWFkcy4KKworR0VORVJBVEVfVEFHRklMRSAgICAgICA9CisKKyMgSWYgdGhlIEFMTEVYVEVSTkFMUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgY2xhc3NlcyB3aWxsIGJlIGxpc3RlZAorIyBpbiB0aGUgY2xhc3MgaW5kZXguIElmIHNldCB0byBOTyBvbmx5IHRoZSBpbmhlcml0ZWQgZXh0ZXJuYWwgY2xhc3NlcworIyB3aWxsIGJlIGxpc3RlZC4KKworQUxMRVhURVJOQUxTICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVEVSTkFMX0dST1VQUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgZ3JvdXBzIHdpbGwgYmUgbGlzdGVkCisjIGluIHRoZSBtb2R1bGVzIGluZGV4LiBJZiBzZXQgdG8gTk8sIG9ubHkgdGhlIGN1cnJlbnQgcHJvamVjdCdzIGdyb3VwcyB3aWxsCisjIGJlIGxpc3RlZC4KKworRVhURVJOQUxfR1JPVVBTICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFRFUk5BTF9QQUdFUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgcGFnZXMgd2lsbCBiZSBsaXN0ZWQKKyMgaW4gdGhlIHJlbGF0ZWQgcGFnZXMgaW5kZXguIElmIHNldCB0byBOTywgb25seSB0aGUgY3VycmVudCBwcm9qZWN0J3MKKyMgcGFnZXMgd2lsbCBiZSBsaXN0ZWQuCisKK0VYVEVSTkFMX1BBR0VTICAgICAgICAgPSBZRVMKKworIyBUaGUgUEVSTF9QQVRIIHNob3VsZCBiZSB0aGUgYWJzb2x1dGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgcGVybCBzY3JpcHQKKyMgaW50ZXJwcmV0ZXIgKGkuZS4gdGhlIHJlc3VsdCBvZiBgd2hpY2ggcGVybCcpLgorCitQRVJMX1BBVEggICAgICAgICAgICAgID0gL3Vzci9iaW4vcGVybAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBkb3QgdG9vbAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBhIGluaGVyaXRhbmNlIGRpYWdyYW0gKGluIEhUTUwsIFJURiBhbmQgTGFUZVgpIGZvciBjbGFzc2VzIHdpdGggYmFzZQorIyBvciBzdXBlciBjbGFzc2VzLiBTZXR0aW5nIHRoZSB0YWcgdG8gTk8gdHVybnMgdGhlIGRpYWdyYW1zIG9mZi4gTm90ZSB0aGF0CisjIHRoaXMgb3B0aW9uIGFsc28gd29ya3Mgd2l0aCBIQVZFX0RPVCBkaXNhYmxlZCwgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRvCisjIGluc3RhbGwgYW5kIHVzZSBkb3QsIHNpbmNlIGl0IHlpZWxkcyBtb3JlIHBvd2VyZnVsIGdyYXBocy4KKworQ0xBU1NfRElBR1JBTVMgICAgICAgICA9IE5PCisKKyMgWW91IGNhbiBkZWZpbmUgbWVzc2FnZSBzZXF1ZW5jZSBjaGFydHMgd2l0aGluIGRveHlnZW4gY29tbWVudHMgdXNpbmcgdGhlIFxtc2MKKyMgY29tbWFuZC4gRG94eWdlbiB3aWxsIHRoZW4gcnVuIHRoZSBtc2NnZW4gdG9vbCAoc2VlCisjIGh0dHA6Ly93d3cubWN0ZXJuYW4ubWUudWsvbXNjZ2VuLykgdG8gcHJvZHVjZSB0aGUgY2hhcnQgYW5kIGluc2VydCBpdCBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbi4gVGhlIE1TQ0dFTl9QQVRIIHRhZyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZQorIyB0aGUgbXNjZ2VuIHRvb2wgcmVzaWRlcy4gSWYgbGVmdCBlbXB0eSB0aGUgdG9vbCBpcyBhc3N1bWVkIHRvIGJlIGZvdW5kIGluIHRoZQorIyBkZWZhdWx0IHNlYXJjaCBwYXRoLgorCitNU0NHRU5fUEFUSCAgICAgICAgICAgID0KKworIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgaGlkZQorIyBpbmhlcml0YW5jZSBhbmQgdXNhZ2UgcmVsYXRpb25zIGlmIHRoZSB0YXJnZXQgaXMgdW5kb2N1bWVudGVkCisjIG9yIGlzIG5vdCBhIGNsYXNzLgorCitISURFX1VORE9DX1JFTEFUSU9OUyAgID0gWUVTCisKKyMgSWYgeW91IHNldCB0aGUgSEFWRV9ET1QgdGFnIHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBhc3N1bWUgdGhlIGRvdCB0b29sIGlzCisjIGF2YWlsYWJsZSBmcm9tIHRoZSBwYXRoLiBUaGlzIHRvb2wgaXMgcGFydCBvZiBHcmFwaHZpeiwgYSBncmFwaCB2aXN1YWxpemF0aW9uCisjIHRvb2xraXQgZnJvbSBBVCZUIGFuZCBMdWNlbnQgQmVsbCBMYWJzLiBUaGUgb3RoZXIgb3B0aW9ucyBpbiB0aGlzIHNlY3Rpb24KKyMgaGF2ZSBubyBlZmZlY3QgaWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkKKworSEFWRV9ET1QgICAgICAgICAgICAgICA9IFlFUworCisjIFRoZSBET1RfTlVNX1RIUkVBRFMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZG90IGludm9jYXRpb25zIGRveHlnZW4gaXMKKyMgYWxsb3dlZCB0byBydW4gaW4gcGFyYWxsZWwuIFdoZW4gc2V0IHRvIDAgKHRoZSBkZWZhdWx0KSBkb3h5Z2VuIHdpbGwKKyMgYmFzZSB0aGlzIG9uIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29ycyBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbS4gWW91IGNhbiBzZXQgaXQKKyMgZXhwbGljaXRseSB0byBhIHZhbHVlIGxhcmdlciB0aGFuIDAgdG8gZ2V0IGNvbnRyb2wgb3ZlciB0aGUgYmFsYW5jZQorIyBiZXR3ZWVuIENQVSBsb2FkIGFuZCBwcm9jZXNzaW5nIHNwZWVkLgorCitET1RfTlVNX1RIUkVBRFMgICAgICAgID0gMAorCisjIEJ5IGRlZmF1bHQgZG94eWdlbiB3aWxsIHVzZSB0aGUgSGVsdmV0aWNhIGZvbnQgZm9yIGFsbCBkb3QgZmlsZXMgdGhhdAorIyBkb3h5Z2VuIGdlbmVyYXRlcy4gV2hlbiB5b3Ugd2FudCBhIGRpZmZlcmVudGx5IGxvb2tpbmcgZm9udCB5b3UgY2FuIHNwZWNpZnkKKyMgdGhlIGZvbnQgbmFtZSB1c2luZyBET1RfRk9OVE5BTUUuIFlvdSBuZWVkIHRvIG1ha2Ugc3VyZSBkb3QgaXMgYWJsZSB0byBmaW5kCisjIHRoZSBmb250LCB3aGljaCBjYW4gYmUgZG9uZSBieSBwdXR0aW5nIGl0IGluIGEgc3RhbmRhcmQgbG9jYXRpb24gb3IgYnkgc2V0dGluZworIyB0aGUgRE9URk9OVFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgYnkgc2V0dGluZyBET1RfRk9OVFBBVEggdG8gdGhlCisjIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBmb250LgorCitET1RfRk9OVE5BTUUgICAgICAgICAgID0gSGVsdmV0aWNhCisKKyMgVGhlIERPVF9GT05UU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBzaXplIG9mIHRoZSBmb250IG9mIGRvdCBncmFwaHMuCisjIFRoZSBkZWZhdWx0IHNpemUgaXMgMTBwdC4KKworRE9UX0ZPTlRTSVpFICAgICAgICAgICA9IDEwCisKKyMgQnkgZGVmYXVsdCBkb3h5Z2VuIHdpbGwgdGVsbCBkb3QgdG8gdXNlIHRoZSBIZWx2ZXRpY2EgZm9udC4KKyMgSWYgeW91IHNwZWNpZnkgYSBkaWZmZXJlbnQgZm9udCB1c2luZyBET1RfRk9OVE5BTUUgeW91IGNhbiB1c2UgRE9UX0ZPTlRQQVRIIHRvCisjIHNldCB0aGUgcGF0aCB3aGVyZSBkb3QgY2FuIGZpbmQgaXQuCisKK0RPVF9GT05UUEFUSCAgICAgICAgICAgPQorCisjIElmIHRoZSBDTEFTU19HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4KKyMgd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQgY2xhc3Mgc2hvd2luZyB0aGUgZGlyZWN0IGFuZAorIyBpbmRpcmVjdCBpbmhlcml0YW5jZSByZWxhdGlvbnMuIFNldHRpbmcgdGhpcyB0YWcgdG8gWUVTIHdpbGwgZm9yY2UgdGhlCisjIENMQVNTX0RJQUdSQU1TIHRhZyB0byBOTy4KKworQ0xBU1NfR1JBUEggICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBDT0xMQUJPUkFUSU9OX0dSQVBIIGFuZCBIQVZFX0RPVCB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbgorIyB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBjbGFzcyBzaG93aW5nIHRoZSBkaXJlY3QgYW5kCisjIGluZGlyZWN0IGltcGxlbWVudGF0aW9uIGRlcGVuZGVuY2llcyAoaW5oZXJpdGFuY2UsIGNvbnRhaW5tZW50LCBhbmQKKyMgY2xhc3MgcmVmZXJlbmNlcyB2YXJpYWJsZXMpIG9mIHRoZSBjbGFzcyB3aXRoIG90aGVyIGRvY3VtZW50ZWQgY2xhc3Nlcy4KKworQ09MTEFCT1JBVElPTl9HUkFQSCAgICA9IFlFUworCisjIElmIHRoZSBHUk9VUF9HUkFQSFMgYW5kIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuCisjIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZ3JvdXBzLCBzaG93aW5nIHRoZSBkaXJlY3QgZ3JvdXBzIGRlcGVuZGVuY2llcworCitHUk9VUF9HUkFQSFMgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFVNTF9MT09LIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBpbmhlcml0YW5jZSBhbmQKKyMgY29sbGFib3JhdGlvbiBkaWFncmFtcyBpbiBhIHN0eWxlIHNpbWlsYXIgdG8gdGhlIE9NRydzIFVuaWZpZWQgTW9kZWxpbmcKKyMgTGFuZ3VhZ2UuCisKK1VNTF9MT09LICAgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBVTUxfTE9PSyB0YWcgaXMgZW5hYmxlZCwgdGhlIGZpZWxkcyBhbmQgbWV0aG9kcyBhcmUgc2hvd24gaW5zaWRlCisjIHRoZSBjbGFzcyBub2RlLiBJZiB0aGVyZSBhcmUgbWFueSBmaWVsZHMgb3IgbWV0aG9kcyBhbmQgbWFueSBub2RlcyB0aGUKKyMgZ3JhcGggbWF5IGJlY29tZSB0b28gYmlnIHRvIGJlIHVzZWZ1bC4gVGhlIFVNTF9MSU1JVF9OVU1fRklFTERTCisjIHRocmVzaG9sZCBsaW1pdHMgdGhlIG51bWJlciBvZiBpdGVtcyBmb3IgZWFjaCB0eXBlIHRvIG1ha2UgdGhlIHNpemUgbW9yZQorIyBtYW5hZ2VhYmxlLiBTZXQgdGhpcyB0byAwIGZvciBubyBsaW1pdC4gTm90ZSB0aGF0IHRoZSB0aHJlc2hvbGQgbWF5IGJlCisjIGV4Y2VlZGVkIGJ5IDUwJSBiZWZvcmUgdGhlIGxpbWl0IGlzIGVuZm9yY2VkLgorCitVTUxfTElNSVRfTlVNX0ZJRUxEUyAgID0gMTAKKworIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgc2hvdyB0aGUKKyMgcmVsYXRpb25zIGJldHdlZW4gdGVtcGxhdGVzIGFuZCB0aGVpciBpbnN0YW5jZXMuCisKK1RFTVBMQVRFX1JFTEFUSU9OUyAgICAgPSBOTworCisjIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORywgU0VBUkNIX0lOQ0xVREVTLCBJTkNMVURFX0dSQVBILCBhbmQgSEFWRV9ET1QKKyMgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQKKyMgZmlsZSBzaG93aW5nIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IGluY2x1ZGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBmaWxlIHdpdGgKKyMgb3RoZXIgZG9jdW1lbnRlZCBmaWxlcy4KKworSU5DTFVERV9HUkFQSCAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORywgU0VBUkNIX0lOQ0xVREVTLCBJTkNMVURFRF9CWV9HUkFQSCwgYW5kCisjIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaAorIyBkb2N1bWVudGVkIGhlYWRlciBmaWxlIHNob3dpbmcgdGhlIGRvY3VtZW50ZWQgZmlsZXMgdGhhdCBkaXJlY3RseSBvcgorIyBpbmRpcmVjdGx5IGluY2x1ZGUgdGhpcyBmaWxlLgorCitJTkNMVURFRF9CWV9HUkFQSCAgICAgID0gWUVTCisKKyMgSWYgdGhlIENBTExfR1JBUEggYW5kIEhBVkVfRE9UIG9wdGlvbnMgYXJlIHNldCB0byBZRVMgdGhlbgorIyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBjYWxsIGRlcGVuZGVuY3kgZ3JhcGggZm9yIGV2ZXJ5IGdsb2JhbCBmdW5jdGlvbgorIyBvciBjbGFzcyBtZXRob2QuIE5vdGUgdGhhdCBlbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHNpZ25pZmljYW50bHkgaW5jcmVhc2UKKyMgdGhlIHRpbWUgb2YgYSBydW4uIFNvIGluIG1vc3QgY2FzZXMgaXQgd2lsbCBiZSBiZXR0ZXIgdG8gZW5hYmxlIGNhbGwgZ3JhcGhzCisjIGZvciBzZWxlY3RlZCBmdW5jdGlvbnMgb25seSB1c2luZyB0aGUgXGNhbGxncmFwaCBjb21tYW5kLgorCitDQUxMX0dSQVBIICAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgQ0FMTEVSX0dSQVBIIGFuZCBIQVZFX0RPVCB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4KKyMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgY2FsbGVyIGRlcGVuZGVuY3kgZ3JhcGggZm9yIGV2ZXJ5IGdsb2JhbCBmdW5jdGlvbgorIyBvciBjbGFzcyBtZXRob2QuIE5vdGUgdGhhdCBlbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHNpZ25pZmljYW50bHkgaW5jcmVhc2UKKyMgdGhlIHRpbWUgb2YgYSBydW4uIFNvIGluIG1vc3QgY2FzZXMgaXQgd2lsbCBiZSBiZXR0ZXIgdG8gZW5hYmxlIGNhbGxlcgorIyBncmFwaHMgZm9yIHNlbGVjdGVkIGZ1bmN0aW9ucyBvbmx5IHVzaW5nIHRoZSBcY2FsbGVyZ3JhcGggY29tbWFuZC4KKworQ0FMTEVSX0dSQVBIICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEdSQVBISUNBTF9ISUVSQVJDSFkgYW5kIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuCisjIHdpbGwgZ2VuZXJhdGUgYSBncmFwaGljYWwgaGllcmFyY2h5IG9mIGFsbCBjbGFzc2VzIGluc3RlYWQgb2YgYSB0ZXh0dWFsIG9uZS4KKworR1JBUEhJQ0FMX0hJRVJBUkNIWSAgICA9IFlFUworCisjIElmIHRoZSBESVJFQ1RPUllfR1JBUEggYW5kIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMKKyMgdGhlbiBkb3h5Z2VuIHdpbGwgc2hvdyB0aGUgZGVwZW5kZW5jaWVzIGEgZGlyZWN0b3J5IGhhcyBvbiBvdGhlciBkaXJlY3RvcmllcworIyBpbiBhIGdyYXBoaWNhbCB3YXkuIFRoZSBkZXBlbmRlbmN5IHJlbGF0aW9ucyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgI2luY2x1ZGUKKyMgcmVsYXRpb25zIGJldHdlZW4gdGhlIGZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4KKworRElSRUNUT1JZX0dSQVBIICAgICAgICA9IFlFUworCisjIFRoZSBET1RfSU1BR0VfRk9STUFUIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGltYWdlIGZvcm1hdCBvZiB0aGUgaW1hZ2VzCisjIGdlbmVyYXRlZCBieSBkb3QuIFBvc3NpYmxlIHZhbHVlcyBhcmUgc3ZnLCBwbmcsIGpwZywgb3IgZ2lmLgorIyBJZiBsZWZ0IGJsYW5rIHBuZyB3aWxsIGJlIHVzZWQuIElmIHlvdSBjaG9vc2Ugc3ZnIHlvdSBuZWVkIHRvIHNldAorIyBIVE1MX0ZJTEVfRVhURU5TSU9OIHRvIHhodG1sIGluIG9yZGVyIHRvIG1ha2UgdGhlIFNWRyBmaWxlcworIyB2aXNpYmxlIGluIElFIDkrIChvdGhlciBicm93c2VycyBkbyBub3QgaGF2ZSB0aGlzIHJlcXVpcmVtZW50KS4KKworRE9UX0lNQUdFX0ZPUk1BVCAgICAgICA9IHBuZworCisjIElmIERPVF9JTUFHRV9GT1JNQVQgaXMgc2V0IHRvIHN2ZywgdGhlbiB0aGlzIG9wdGlvbiBjYW4gYmUgc2V0IHRvIFlFUyB0bworIyBlbmFibGUgZ2VuZXJhdGlvbiBvZiBpbnRlcmFjdGl2ZSBTVkcgaW1hZ2VzIHRoYXQgYWxsb3cgem9vbWluZyBhbmQgcGFubmluZy4KKyMgTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgYSBtb2Rlcm4gYnJvd3NlciBvdGhlciB0aGFuIEludGVybmV0IEV4cGxvcmVyLgorIyBUZXN0ZWQgYW5kIHdvcmtpbmcgYXJlIEZpcmVmb3gsIENocm9tZSwgU2FmYXJpLCBhbmQgT3BlcmEuIEZvciBJRSA5KyB5b3UKKyMgbmVlZCB0byBzZXQgSFRNTF9GSUxFX0VYVEVOU0lPTiB0byB4aHRtbCBpbiBvcmRlciB0byBtYWtlIHRoZSBTVkcgZmlsZXMKKyMgdmlzaWJsZS4gT2xkZXIgdmVyc2lvbnMgb2YgSUUgZG8gbm90IGhhdmUgU1ZHIHN1cHBvcnQuCisKK0lOVEVSQUNUSVZFX1NWRyAgICAgICAgPSBOTworCisjIFRoZSB0YWcgRE9UX1BBVEggY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB3aGVyZSB0aGUgZG90IHRvb2wgY2FuIGJlCisjIGZvdW5kLiBJZiBsZWZ0IGJsYW5rLCBpdCBpcyBhc3N1bWVkIHRoZSBkb3QgdG9vbCBjYW4gYmUgZm91bmQgaW4gdGhlIHBhdGguCisKK0RPVF9QQVRIICAgICAgICAgICAgICAgPQorCisjIFRoZSBET1RGSUxFX0RJUlMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdAorIyBjb250YWluIGRvdCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZQorIyBcZG90ZmlsZSBjb21tYW5kKS4KKworRE9URklMRV9ESVJTICAgICAgICAgICA9CisKKyMgVGhlIE1TQ0ZJTEVfRElSUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB0aGF0CisjIGNvbnRhaW4gbXNjIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUgdGhlCisjIFxtc2NmaWxlIGNvbW1hbmQpLgorCitNU0NGSUxFX0RJUlMgICAgICAgICAgID0KKworIyBUaGUgRE9UX0dSQVBIX01BWF9OT0RFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZgorIyBub2RlcyB0aGF0IHdpbGwgYmUgc2hvd24gaW4gdGhlIGdyYXBoLiBJZiB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIGEgZ3JhcGgKKyMgYmVjb21lcyBsYXJnZXIgdGhhbiB0aGlzIHZhbHVlLCBkb3h5Z2VuIHdpbGwgdHJ1bmNhdGUgdGhlIGdyYXBoLCB3aGljaCBpcworIyB2aXN1YWxpemVkIGJ5IHJlcHJlc2VudGluZyBhIG5vZGUgYXMgYSByZWQgYm94LiBOb3RlIHRoYXQgZG94eWdlbiBpZiB0aGUKKyMgbnVtYmVyIG9mIGRpcmVjdCBjaGlsZHJlbiBvZiB0aGUgcm9vdCBub2RlIGluIGEgZ3JhcGggaXMgYWxyZWFkeSBsYXJnZXIgdGhhbgorIyBET1RfR1JBUEhfTUFYX05PREVTIHRoZW4gdGhlIGdyYXBoIHdpbGwgbm90IGJlIHNob3duIGF0IGFsbC4gQWxzbyBub3RlCisjIHRoYXQgdGhlIHNpemUgb2YgYSBncmFwaCBjYW4gYmUgZnVydGhlciByZXN0cmljdGVkIGJ5IE1BWF9ET1RfR1JBUEhfREVQVEguCisKK0RPVF9HUkFQSF9NQVhfTk9ERVMgICAgPSAyMDAKKworIyBUaGUgTUFYX0RPVF9HUkFQSF9ERVBUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZQorIyBncmFwaHMgZ2VuZXJhdGVkIGJ5IGRvdC4gQSBkZXB0aCB2YWx1ZSBvZiAzIG1lYW5zIHRoYXQgb25seSBub2RlcyByZWFjaGFibGUKKyMgZnJvbSB0aGUgcm9vdCBieSBmb2xsb3dpbmcgYSBwYXRoIHZpYSBhdCBtb3N0IDMgZWRnZXMgd2lsbCBiZSBzaG93bi4gTm9kZXMKKyMgdGhhdCBsYXkgZnVydGhlciBmcm9tIHRoZSByb290IG5vZGUgd2lsbCBiZSBvbWl0dGVkLiBOb3RlIHRoYXQgc2V0dGluZyB0aGlzCisjIG9wdGlvbiB0byAxIG9yIDIgbWF5IGdyZWF0bHkgcmVkdWNlIHRoZSBjb21wdXRhdGlvbiB0aW1lIG5lZWRlZCBmb3IgbGFyZ2UKKyMgY29kZSBiYXNlcy4gQWxzbyBub3RlIHRoYXQgdGhlIHNpemUgb2YgYSBncmFwaCBjYW4gYmUgZnVydGhlciByZXN0cmljdGVkIGJ5CisjIERPVF9HUkFQSF9NQVhfTk9ERVMuIFVzaW5nIGEgZGVwdGggb2YgMCBtZWFucyBubyBkZXB0aCByZXN0cmljdGlvbi4KKworTUFYX0RPVF9HUkFQSF9ERVBUSCAgICA9IDEwMDAKKworIyBTZXQgdGhlIERPVF9UUkFOU1BBUkVOVCB0YWcgdG8gWUVTIHRvIGdlbmVyYXRlIGltYWdlcyB3aXRoIGEgdHJhbnNwYXJlbnQKKyMgYmFja2dyb3VuZC4gVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBiZWNhdXNlIGRvdCBvbiBXaW5kb3dzIGRvZXMgbm90CisjIHNlZW0gdG8gc3VwcG9ydCB0aGlzIG91dCBvZiB0aGUgYm94LiBXYXJuaW5nOiBEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIHVzZWQsCisjIGVuYWJsaW5nIHRoaXMgb3B0aW9uIG1heSBsZWFkIHRvIGJhZGx5IGFudGktYWxpYXNlZCBsYWJlbHMgb24gdGhlIGVkZ2VzIG9mCisjIGEgZ3JhcGggKGkuZS4gdGhleSBiZWNvbWUgaGFyZCB0byByZWFkKS4KKworRE9UX1RSQU5TUEFSRU5UICAgICAgICA9IFlFUworCisjIFNldCB0aGUgRE9UX01VTFRJX1RBUkdFVFMgdGFnIHRvIFlFUyBhbGxvdyBkb3QgdG8gZ2VuZXJhdGUgbXVsdGlwbGUgb3V0cHV0CisjIGZpbGVzIGluIG9uZSBydW4gKGkuZS4gbXVsdGlwbGUgLW8gYW5kIC1UIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZSkuIFRoaXMKKyMgbWFrZXMgZG90IHJ1biBmYXN0ZXIsIGJ1dCBzaW5jZSBvbmx5IG5ld2VyIHZlcnNpb25zIG9mIGRvdCAoPjEuOC4xMCkKKyMgc3VwcG9ydCB0aGlzLCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKworRE9UX01VTFRJX1RBUkdFVFMgICAgICA9IE5PCisKKyMgSWYgdGhlIEdFTkVSQVRFX0xFR0VORCB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBhIGxlZ2VuZCBwYWdlIGV4cGxhaW5pbmcgdGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYm94ZXMgYW5kCisjIGFycm93cyBpbiB0aGUgZG90IGdlbmVyYXRlZCBncmFwaHMuCisKK0dFTkVSQVRFX0xFR0VORCAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRE9UX0NMRUFOVVAgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwKKyMgcmVtb3ZlIHRoZSBpbnRlcm1lZGlhdGUgZG90IGZpbGVzIHRoYXQgYXJlIHVzZWQgdG8gZ2VuZXJhdGUKKyMgdGhlIHZhcmlvdXMgZ3JhcGhzLgorCitET1RfQ0xFQU5VUCAgICAgICAgICAgID0gWUVTCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NWEzNTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDExIEBACitvcHRpb24oSU5TVEFMTF9NQkVEVExTX0hFQURFUlMgIkluc3RhbGwgbWJlZCBUTFMgaGVhZGVycy4iIE9OKQorCitpZihJTlNUQUxMX01CRURUTFNfSEVBREVSUykKKworICAgIGZpbGUoR0xPQiBoZWFkZXJzICJtYmVkdGxzLyouaCIpCisKKyAgICBpbnN0YWxsKEZJTEVTICR7aGVhZGVyc30KKyAgICAgICAgREVTVElOQVRJT04gaW5jbHVkZS9tYmVkdGxzCisgICAgICAgIFBFUk1JU1NJT05TIE9XTkVSX1JFQUQgT1dORVJfV1JJVEUgR1JPVVBfUkVBRCBXT1JMRF9SRUFEKQorCitlbmRpZihJTlNUQUxMX01CRURUTFNfSEVBREVSUykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYWVzLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Flcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNmU4MjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Flcy5oCkBAIC0wLDAgKzEsMjk3IEBACisvKioKKyAqIFxmaWxlIGFlcy5oCisgKgorICogXGJyaWVmIEFFUyBibG9jayBjaXBoZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19BRVNfSAorI2RlZmluZSBNQkVEVExTX0FFU19ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8qIHBhZGxvY2suYyBhbmQgYWVzbmkuYyByZWx5IG9uIHRoZXNlIHZhbHVlcyEgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfRU5DUllQVCAgICAgMQorI2RlZmluZSBNQkVEVExTX0FFU19ERUNSWVBUICAgICAwCisKKyNkZWZpbmUgTUJFRFRMU19FUlJfQUVTX0lOVkFMSURfS0VZX0xFTkdUSCAgICAgICAgICAgICAgICAtMHgwMDIwICAvKio8IEludmFsaWQga2V5IGxlbmd0aC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQUVTX0lOVkFMSURfSU5QVVRfTEVOR1RIICAgICAgICAgICAgICAtMHgwMDIyICAvKio8IEludmFsaWQgZGF0YSBpbnB1dCBsZW5ndGguICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0FFU19BTFQpCisvLyBSZWd1bGFyIGltcGxlbWVudGF0aW9uCisvLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEFFUyBjb250ZXh0IHN0cnVjdHVyZQorICoKKyAqIFxub3RlICAgICAgICAgICBidWYgaXMgYWJsZSB0byBob2xkIDMyIGV4dHJhIGJ5dGVzLCB3aGljaCBjYW4gYmUgdXNlZDoKKyAqICAgICAgICAgICAgICAgICAtIGZvciBhbGlnbm1lbnQgcHVycG9zZXMgaWYgVklBIHBhZGxvY2sgaXMgdXNlZCwgYW5kL29yCisgKiAgICAgICAgICAgICAgICAgLSB0byBzaW1wbGlmeSBrZXkgZXhwYW5zaW9uIGluIHRoZSAyNTYtYml0IGNhc2UgYnkKKyAqICAgICAgICAgICAgICAgICBnZW5lcmF0aW5nIGFuIGV4dHJhIHJvdW5kIGtleQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCBucjsgICAgICAgICAgICAgICAgICAgICAvKiE8ICBudW1iZXIgb2Ygcm91bmRzICAqLworICAgIHVpbnQzMl90ICpyazsgICAgICAgICAgICAgICAvKiE8ICBBRVMgcm91bmQga2V5cyAgICAqLworICAgIHVpbnQzMl90IGJ1Zls2OF07ICAgICAgICAgICAvKiE8ICB1bmFsaWduZWQgZGF0YSAgICAqLworfQorbWJlZHRsc19hZXNfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBBRVMgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfYWVzX2luaXQoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbGVhciBBRVMgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19hZXNfZnJlZSggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEFFUyBrZXkgc2NoZWR1bGUgKGVuY3J5cHRpb24pCisgKgorICogXHBhcmFtIGN0eCAgICAgIEFFUyBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0ga2V5ICAgICAgZW5jcnlwdGlvbiBrZXkKKyAqIFxwYXJhbSBrZXliaXRzICBtdXN0IGJlIDEyOCwgMTkyIG9yIDI1NgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0tFWV9MRU5HVEgKKyAqLworaW50IG1iZWR0bHNfYWVzX3NldGtleV9lbmMoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5Yml0cyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMga2V5IHNjaGVkdWxlIChkZWNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgIGRlY3J5cHRpb24ga2V5CisgKiBccGFyYW0ga2V5Yml0cyAgbXVzdCBiZSAxMjgsIDE5MiBvciAyNTYKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2Flc19zZXRrZXlfZGVjKCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQUVTLUVDQiBibG9jayBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQUVTIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX0FFU19FTkNSWVBUIG9yIE1CRURUTFNfQUVTX0RFQ1JZUFQKKyAqIFxwYXJhbSBpbnB1dCAgICAxNi1ieXRlIGlucHV0IGJsb2NrCisgKiBccGFyYW0gb3V0cHV0ICAgMTYtYnl0ZSBvdXRwdXQgYmxvY2sKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX2Flc19jcnlwdF9lY2IoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbMTZdLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMtQ0JDIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqICAgICAgICAgICAgICAgICBMZW5ndGggc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrCisgKiAgICAgICAgICAgICAgICAgc2l6ZSAoMTYgYnl0ZXMpCisgKgorICogXG5vdGUgICAgICAgICAgIFVwb24gZXhpdCwgdGhlIGNvbnRlbnQgb2YgdGhlIElWIGlzIHVwZGF0ZWQgc28gdGhhdCB5b3UgY2FuCisgKiAgICAgICAgICAgICAgICAgY2FsbCB0aGUgZnVuY3Rpb24gc2FtZSBmdW5jdGlvbiBhZ2FpbiBvbiB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgICAgICAgICAgYmxvY2socykgb2YgZGF0YSBhbmQgZ2V0IHRoZSBzYW1lIHJlc3VsdCBhcyBpZiBpdCB3YXMKKyAqICAgICAgICAgICAgICAgICBlbmNyeXB0ZWQgaW4gb25lIGNhbGwuIFRoaXMgYWxsb3dzIGEgInN0cmVhbWluZyIgdXNhZ2UuCisgKiAgICAgICAgICAgICAgICAgSWYgb24gdGhlIG90aGVyIGhhbmQgeW91IG5lZWQgdG8gcmV0YWluIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICBJViwgeW91IHNob3VsZCBlaXRoZXIgc2F2ZSBpdCBtYW51YWxseSBvciB1c2UgdGhlIGNpcGhlcgorICogICAgICAgICAgICAgICAgIG1vZHVsZSBpbnN0ZWFkLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQUVTX0VOQ1JZUFQgb3IgTUJFRFRMU19BRVNfREVDUllQVAorICogXHBhcmFtIGxlbmd0aCAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGl2ICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvciAodXBkYXRlZCBhZnRlciB1c2UpCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgaG9sZGluZyB0aGUgb3V0cHV0IGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2NiYyggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdlsxNl0sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKy8qKgorICogXGJyaWVmICAgICAgICAgIEFFUy1DRkIxMjggYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4KKyAqCisgKiBOb3RlOiBEdWUgdG8gdGhlIG5hdHVyZSBvZiBDRkIgeW91IHNob3VsZCB1c2UgdGhlIHNhbWUga2V5IHNjaGVkdWxlIGZvcgorICogYm90aCBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLiBTbyBhIGNvbnRleHQgaW5pdGlhbGl6ZWQgd2l0aAorICogbWJlZHRsc19hZXNfc2V0a2V5X2VuYygpIGZvciBib3RoIE1CRURUTFNfQUVTX0VOQ1JZUFQgYW5kIE1CRURUTFNfQUVTX0RFQ1JZUFQuCisgKgorICogXG5vdGUgICAgICAgICAgIFVwb24gZXhpdCwgdGhlIGNvbnRlbnQgb2YgdGhlIElWIGlzIHVwZGF0ZWQgc28gdGhhdCB5b3UgY2FuCisgKiAgICAgICAgICAgICAgICAgY2FsbCB0aGUgZnVuY3Rpb24gc2FtZSBmdW5jdGlvbiBhZ2FpbiBvbiB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgICAgICAgICAgYmxvY2socykgb2YgZGF0YSBhbmQgZ2V0IHRoZSBzYW1lIHJlc3VsdCBhcyBpZiBpdCB3YXMKKyAqICAgICAgICAgICAgICAgICBlbmNyeXB0ZWQgaW4gb25lIGNhbGwuIFRoaXMgYWxsb3dzIGEgInN0cmVhbWluZyIgdXNhZ2UuCisgKiAgICAgICAgICAgICAgICAgSWYgb24gdGhlIG90aGVyIGhhbmQgeW91IG5lZWQgdG8gcmV0YWluIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICBJViwgeW91IHNob3VsZCBlaXRoZXIgc2F2ZSBpdCBtYW51YWxseSBvciB1c2UgdGhlIGNpcGhlcgorICogICAgICAgICAgICAgICAgIG1vZHVsZSBpbnN0ZWFkLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQUVTX0VOQ1JZUFQgb3IgTUJFRFRMU19BRVNfREVDUllQVAorICogXHBhcmFtIGxlbmd0aCAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGl2X29mZiAgIG9mZnNldCBpbiBJViAodXBkYXRlZCBhZnRlciB1c2UpCisgKiBccGFyYW0gaXYgICAgICAgaW5pdGlhbGl6YXRpb24gdmVjdG9yICh1cGRhdGVkIGFmdGVyIHVzZSkKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIGJ1ZmZlciBob2xkaW5nIHRoZSBvdXRwdXQgZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2NmYjEyOCggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppdl9vZmYsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEFFUy1DRkI4IGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24uCisgKgorICogTm90ZTogRHVlIHRvIHRoZSBuYXR1cmUgb2YgQ0ZCIHlvdSBzaG91bGQgdXNlIHRoZSBzYW1lIGtleSBzY2hlZHVsZSBmb3IKKyAqIGJvdGggZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbi4gU28gYSBjb250ZXh0IGluaXRpYWxpemVkIHdpdGgKKyAqIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoKSBmb3IgYm90aCBNQkVEVExTX0FFU19FTkNSWVBUIGFuZCBNQkVEVExTX0FFU19ERUNSWVBULgorICoKKyAqIFxub3RlICAgICAgICAgICBVcG9uIGV4aXQsIHRoZSBjb250ZW50IG9mIHRoZSBJViBpcyB1cGRhdGVkIHNvIHRoYXQgeW91IGNhbgorICogICAgICAgICAgICAgICAgIGNhbGwgdGhlIGZ1bmN0aW9uIHNhbWUgZnVuY3Rpb24gYWdhaW4gb24gdGhlIGZvbGxvd2luZworICogICAgICAgICAgICAgICAgIGJsb2NrKHMpIG9mIGRhdGEgYW5kIGdldCB0aGUgc2FtZSByZXN1bHQgYXMgaWYgaXQgd2FzCisgKiAgICAgICAgICAgICAgICAgZW5jcnlwdGVkIGluIG9uZSBjYWxsLiBUaGlzIGFsbG93cyBhICJzdHJlYW1pbmciIHVzYWdlLgorICogICAgICAgICAgICAgICAgIElmIG9uIHRoZSBvdGhlciBoYW5kIHlvdSBuZWVkIHRvIHJldGFpbiB0aGUgY29udGVudHMgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgSVYsIHlvdSBzaG91bGQgZWl0aGVyIHNhdmUgaXQgbWFudWFsbHkgb3IgdXNlIHRoZSBjaXBoZXIKKyAqICAgICAgICAgICAgICAgICBtb2R1bGUgaW5zdGVhZC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQUVTIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX0FFU19FTkNSWVBUIG9yIE1CRURUTFNfQUVTX0RFQ1JZUFQKKyAqIFxwYXJhbSBsZW5ndGggICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpdiAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKHVwZGF0ZWQgYWZ0ZXIgdXNlKQorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19hZXNfY3J5cHRfY2ZiOCggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdlsxNl0sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZiAvKk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBBRVMtQ1RSIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqCisgKiBXYXJuaW5nOiBZb3UgaGF2ZSB0byBrZWVwIHRoZSBtYXhpbXVtIHVzZSBvZiB5b3VyIGNvdW50ZXIgaW4gbWluZCEKKyAqCisgKiBOb3RlOiBEdWUgdG8gdGhlIG5hdHVyZSBvZiBDVFIgeW91IHNob3VsZCB1c2UgdGhlIHNhbWUga2V5IHNjaGVkdWxlIGZvcgorICogYm90aCBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLiBTbyBhIGNvbnRleHQgaW5pdGlhbGl6ZWQgd2l0aAorICogbWJlZHRsc19hZXNfc2V0a2V5X2VuYygpIGZvciBib3RoIE1CRURUTFNfQUVTX0VOQ1JZUFQgYW5kIE1CRURUTFNfQUVTX0RFQ1JZUFQuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQUVTIGNvbnRleHQKKyAqIFxwYXJhbSBsZW5ndGggICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEKKyAqIFxwYXJhbSBuY19vZmYgICAgICAgIFRoZSBvZmZzZXQgaW4gdGhlIGN1cnJlbnQgc3RyZWFtX2Jsb2NrIChmb3IgcmVzdW1pbmcKKyAqICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBjdXJyZW50IGNpcGhlciBzdHJlYW0pLiBUaGUgb2Zmc2V0IHBvaW50ZXIgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSAwIGF0IHRoZSBzdGFydCBvZiBhIHN0cmVhbS4KKyAqIFxwYXJhbSBub25jZV9jb3VudGVyIFRoZSAxMjgtYml0IG5vbmNlIGFuZCBjb3VudGVyLgorICogXHBhcmFtIHN0cmVhbV9ibG9jayAgVGhlIHNhdmVkIHN0cmVhbS1ibG9jayBmb3IgcmVzdW1pbmcuIElzIG92ZXJ3cml0dGVuCisgKiAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgZnVuY3Rpb24uCisgKiBccGFyYW0gaW5wdXQgICAgICAgICBUaGUgaW5wdXQgZGF0YSBzdHJlYW0KKyAqIFxwYXJhbSBvdXRwdXQgICAgICAgIFRoZSBvdXRwdXQgZGF0YSBzdHJlYW0KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX2Flc19jcnlwdF9jdHIoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuY19vZmYsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbm9uY2VfY291bnRlclsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc3RyZWFtX2Jsb2NrWzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbnRlcm5hbCBBRVMgYmxvY2sgZW5jcnlwdGlvbiBmdW5jdGlvbgorICogICAgICAgICAgICAgICAgICAoT25seSBleHBvc2VkIHRvIGFsbG93IG92ZXJyaWRpbmcgaXQsCisgKiAgICAgICAgICAgICAgICAgIHNlZSBNQkVEVExTX0FFU19FTkNSWVBUX0FMVCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEFFUyBjb250ZXh0CisgKiBccGFyYW0gaW5wdXQgICAgIFBsYWludGV4dCBibG9jaworICogXHBhcmFtIG91dHB1dCAgICBPdXRwdXQgKGNpcGhlcnRleHQpIGJsb2NrCisgKi8KK3ZvaWQgbWJlZHRsc19hZXNfZW5jcnlwdCggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbnRlcm5hbCBBRVMgYmxvY2sgZGVjcnlwdGlvbiBmdW5jdGlvbgorICogICAgICAgICAgICAgICAgICAoT25seSBleHBvc2VkIHRvIGFsbG93IG92ZXJyaWRpbmcgaXQsCisgKiAgICAgICAgICAgICAgICAgIHNlZSBNQkVEVExTX0FFU19ERUNSWVBUX0FMVCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEFFUyBjb250ZXh0CisgKiBccGFyYW0gaW5wdXQgICAgIENpcGhlcnRleHQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICAgT3V0cHV0IChwbGFpbnRleHQpIGJsb2NrCisgKi8KK3ZvaWQgbWJlZHRsc19hZXNfZGVjcnlwdCggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX0FFU19BTFQgKi8KKyNpbmNsdWRlICJhZXNfYWx0LmgiCisjZW5kaWYgLyogTUJFRFRMU19BRVNfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfYWVzX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGFlcy5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Flc25pLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Flc25pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiN2YxYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYWVzbmkuaApAQCAtMCwwICsxLDExMSBAQAorLyoqCisgKiBcZmlsZSBhZXNuaS5oCisgKgorICogXGJyaWVmIEFFUy1OSSBmb3IgaGFyZHdhcmUgQUVTIGFjY2VsZXJhdGlvbiBvbiBzb21lIEludGVsIHByb2Nlc3NvcnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19BRVNOSV9ICisjZGVmaW5lIE1CRURUTFNfQUVTTklfSAorCisjaW5jbHVkZSAiYWVzLmgiCisKKyNkZWZpbmUgTUJFRFRMU19BRVNOSV9BRVMgICAgICAweDAyMDAwMDAwdQorI2RlZmluZSBNQkVEVExTX0FFU05JX0NMTVVMICAgIDB4MDAwMDAwMDJ1CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9BU00pICYmIGRlZmluZWQoX19HTlVDX18pICYmICBcCisgICAgKCBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSApICAgJiYgIFwKKyAgICAhIGRlZmluZWQoTUJFRFRMU19IQVZFX1g4Nl82NCkKKyNkZWZpbmUgTUJFRFRMU19IQVZFX1g4Nl82NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9YODZfNjQpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQUVTLU5JIGZlYXR1cmVzIGRldGVjdGlvbiByb3V0aW5lCisgKgorICogXHBhcmFtIHdoYXQgICAgIFRoZSBmZWF0dXJlIHRvIGRldGVjdAorICogICAgICAgICAgICAgICAgIChNQkVEVExTX0FFU05JX0FFUyBvciBNQkVEVExTX0FFU05JX0NMTVVMKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAxIGlmIENQVSBoYXMgc3VwcG9ydCBmb3IgdGhlIGZlYXR1cmUsIDAgb3RoZXJ3aXNlCisgKi8KK2ludCBtYmVkdGxzX2Flc25pX2hhc19zdXBwb3J0KCB1bnNpZ25lZCBpbnQgd2hhdCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMtTkkgQUVTLUVDQiBibG9jayBlbihkZSljcnlwdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQUVTX0VOQ1JZUFQgb3IgTUJFRFRMU19BRVNfREVDUllQVAorICogXHBhcmFtIGlucHV0ICAgIDE2LWJ5dGUgaW5wdXQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICAxNi1ieXRlIG91dHB1dCBibG9jaworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIG9uIHN1Y2Nlc3MgKGNhbm5vdCBmYWlsKQorICovCitpbnQgbWJlZHRsc19hZXNuaV9jcnlwdF9lY2IoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFsxNl0sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgR0NNIG11bHRpcGxpY2F0aW9uOiBjID0gYSAqIGIgaW4gR0YoMl4xMjgpCisgKgorICogXHBhcmFtIGMgICAgICAgIFJlc3VsdAorICogXHBhcmFtIGEgICAgICAgIEZpcnN0IG9wZXJhbmQKKyAqIFxwYXJhbSBiICAgICAgICBTZWNvbmQgb3BlcmFuZAorICoKKyAqIFxub3RlICAgICAgICAgICBCb3RoIG9wZXJhbmRzIGFuZCByZXN1bHQgYXJlIGJpdCBzdHJpbmdzIGludGVycHJldGVkIGFzCisgKiAgICAgICAgICAgICAgICAgZWxlbWVudHMgb2YgR0YoMl4xMjgpIGFzIHBlciB0aGUgR0NNIHNwZWMuCisgKi8KK3ZvaWQgbWJlZHRsc19hZXNuaV9nY21fbXVsdCggdW5zaWduZWQgY2hhciBjWzE2XSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYVsxNl0sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGJbMTZdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDb21wdXRlIGRlY3J5cHRpb24gcm91bmQga2V5cyBmcm9tIGVuY3J5cHRpb24gcm91bmQga2V5cworICoKKyAqIFxwYXJhbSBpbnZrZXkgICAgUm91bmQga2V5cyBmb3IgdGhlIGVxdWl2YWxlbnQgaW52ZXJzZSBjaXBoZXIKKyAqIFxwYXJhbSBmd2RrZXkgICAgT3JpZ2luYWwgcm91bmQga2V5cyAoZm9yIGVuY3J5cHRpb24pCisgKiBccGFyYW0gbnIgICAgICAgIE51bWJlciBvZiByb3VuZHMgKHRoYXQgaXMsIG51bWJlciBvZiByb3VuZCBrZXlzIG1pbnVzIG9uZSkKKyAqLwordm9pZCBtYmVkdGxzX2Flc25pX2ludmVyc2Vfa2V5KCB1bnNpZ25lZCBjaGFyICppbnZrZXksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmd2RrZXksIGludCBuciApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUGVyZm9ybSBrZXkgZXhwYW5zaW9uIChmb3IgZW5jcnlwdGlvbikKKyAqCisgKiBccGFyYW0gcmsgICAgICAgIERlc3RpbmF0aW9uIGJ1ZmZlciB3aGVyZSB0aGUgcm91bmQga2V5cyBhcmUgd3JpdHRlbgorICogXHBhcmFtIGtleSAgICAgICBFbmNyeXB0aW9uIGtleQorICogXHBhcmFtIGJpdHMgICAgICBLZXkgc2l6ZSBpbiBiaXRzIChtdXN0IGJlIDEyOCwgMTkyIG9yIDI1NikKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfQUVTX0lOVkFMSURfS0VZX0xFTkdUSAorICovCitpbnQgbWJlZHRsc19hZXNuaV9zZXRrZXlfZW5jKCB1bnNpZ25lZCBjaGFyICpyaywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJpdHMgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9YODZfNjQgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfQUVTTklfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9hcmM0LmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2FyYzQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmM1Mzk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9hcmM0LmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qKgorICogXGZpbGUgYXJjNC5oCisgKgorICogXGJyaWVmIFRoZSBBUkNGT1VSIHN0cmVhbSBjaXBoZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19BUkM0X0gKKyNkZWZpbmUgTUJFRFRMU19BUkM0X0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQVJDNF9BTFQpCisvLyBSZWd1bGFyIGltcGxlbWVudGF0aW9uCisvLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEFSQzQgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQgeDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBwZXJtdXRhdGlvbiBpbmRleCAqLworICAgIGludCB5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IHBlcm11dGF0aW9uIGluZGV4ICovCisgICAgdW5zaWduZWQgY2hhciBtWzI1Nl07ICAgICAgIC8qITwgcGVybXV0YXRpb24gdGFibGUgKi8KK30KK21iZWR0bHNfYXJjNF9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIEFSQzQgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBBUkM0IGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX2FyYzRfaW5pdCggbWJlZHRsc19hcmM0X2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbGVhciBBUkM0IGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQVJDNCBjb250ZXh0IHRvIGJlIGNsZWFyZWQKKyAqLwordm9pZCBtYmVkdGxzX2FyYzRfZnJlZSggbWJlZHRsc19hcmM0X2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBBUkM0IGtleSBzY2hlZHVsZQorICoKKyAqIFxwYXJhbSBjdHggICAgICBBUkM0IGNvbnRleHQgdG8gYmUgc2V0dXAKKyAqIFxwYXJhbSBrZXkgICAgICB0aGUgc2VjcmV0IGtleQorICogXHBhcmFtIGtleWxlbiAgIGxlbmd0aCBvZiB0aGUga2V5LCBpbiBieXRlcworICovCit2b2lkIG1iZWR0bHNfYXJjNF9zZXR1cCggbWJlZHRsc19hcmM0X2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEFSQzQgY2lwaGVyIGZ1bmN0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgIEFSQzQgY29udGV4dAorICogXHBhcmFtIGxlbmd0aCAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIGZvciB0aGUgb3V0cHV0IGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX2FyYzRfY3J5cHQoIG1iZWR0bHNfYXJjNF9jb250ZXh0ICpjdHgsIHNpemVfdCBsZW5ndGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZWxzZSAgLyogTUJFRFRMU19BUkM0X0FMVCAqLworI2luY2x1ZGUgImFyYzRfYWx0LmgiCisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0FMVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2FyYzRfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogYXJjNC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2FzbjEuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYXNuMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MjgzMmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2FzbjEuaApAQCAtMCwwICsxLDM0MiBAQAorLyoqCisgKiBcZmlsZSBhc24xLmgKKyAqCisgKiBcYnJpZWYgR2VuZXJpYyBBU04uMSBwYXJzaW5nCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfQVNOMV9ICisjZGVmaW5lIE1CRURUTFNfQVNOMV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisjaW5jbHVkZSAiYmlnbnVtLmgiCisjZW5kaWYKKworLyoqCisgKiBcYWRkdG9ncm91cCBhc24xX21vZHVsZQorICogXHsKKyAqLworCisvKioKKyAqIFxuYW1lIEFTTjEgRXJyb3IgY29kZXMKKyAqIFRoZXNlIGVycm9yIGNvZGVzIGFyZSBPUidlZCB0byBYNTA5IGVycm9yIGNvZGVzIGZvcgorICogaGlnaGVyIGVycm9yIGdyYW51bGFyaXR5LgorICogQVNOMSBpcyBhIHN0YW5kYXJkIHRvIHNwZWNpZnkgZGF0YSBzdHJ1Y3R1cmVzLgorICogXHsKKyAqLworI2RlZmluZSBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICAgICAgICAgICAgICAgICAgICAgIC0weDAwNjAgIC8qKjwgT3V0IG9mIGRhdGEgd2hlbiBwYXJzaW5nIGFuIEFTTjEgZGF0YSBzdHJ1Y3R1cmUuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgICAgICAgICAgICAgICAgICAgLTB4MDA2MiAgLyoqPCBBU04xIHRhZyB3YXMgb2YgYW4gdW5leHBlY3RlZCB2YWx1ZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSCAgICAgICAgICAgICAgICAgICAtMHgwMDY0ICAvKio8IEVycm9yIHdoZW4gdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9yIGludmFsaWQgbGVuZ3RoLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCAgICAgICAgICAgICAgICAgIC0weDAwNjYgIC8qKjwgQWN0dWFsIGxlbmd0aCBkaWZmZXJzIGZyb20gZXhwZWN0ZWQgbGVuZ3RoLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfREFUQSAgICAgICAgICAgICAgICAgICAgIC0weDAwNjggIC8qKjwgRGF0YSBpcyBpbnZhbGlkLiAobm90IHVzZWQpICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0FTTjFfQUxMT0NfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgLTB4MDA2QSAgLyoqPCBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICAgICAgICAgICAgICAgICAgICAtMHgwMDZDICAvKio8IEJ1ZmZlciB0b28gc21hbGwgd2hlbiB3cml0aW5nIEFTTi4xIGRhdGEgc3RydWN0dXJlLiAqLworCisvKiBcfSBuYW1lICovCisKKy8qKgorICogXG5hbWUgREVSIGNvbnN0YW50cworICogVGhlc2UgY29uc3RhbnRzIGNvbXBseSB3aXRoIERFUiBlbmNvZGVkIHRoZSBBTlMxIHR5cGUgdGFncy4KKyAqIERFUiBlbmNvZGluZyB1c2VzIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorICogQW4gZXhhbXBsZSBERVIgc2VxdWVuY2UgaXM6XG4KKyAqIC0gMHgwMiAtLSB0YWcgaW5kaWNhdGluZyBJTlRFR0VSCisgKiAtIDB4MDEgLS0gbGVuZ3RoIGluIG9jdGV0cworICogLSAweDA1IC0tIHZhbHVlCisgKiBTdWNoIHNlcXVlbmNlcyBhcmUgdHlwaWNhbGx5IHJlYWQgaW50byBcYyA6Om1iZWR0bHNfeDUwOV9idWYuCisgKiBceworICovCisjZGVmaW5lIE1CRURUTFNfQVNOMV9CT09MRUFOICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIE1CRURUTFNfQVNOMV9JTlRFR0VSICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIE1CRURUTFNfQVNOMV9CSVRfU1RSSU5HICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcgICAgICAgICAgICAweDA0CisjZGVmaW5lIE1CRURUTFNfQVNOMV9OVUxMICAgICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIE1CRURUTFNfQVNOMV9PSUQgICAgICAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIE1CRURUTFNfQVNOMV9VVEY4X1NUUklORyAgICAgICAgICAgICAweDBDCisjZGVmaW5lIE1CRURUTFNfQVNOMV9TRVFVRU5DRSAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIE1CRURUTFNfQVNOMV9TRVQgICAgICAgICAgICAgICAgICAgICAweDExCisjZGVmaW5lIE1CRURUTFNfQVNOMV9QUklOVEFCTEVfU1RSSU5HICAgICAgICAweDEzCisjZGVmaW5lIE1CRURUTFNfQVNOMV9UNjFfU1RSSU5HICAgICAgICAgICAgICAweDE0CisjZGVmaW5lIE1CRURUTFNfQVNOMV9JQTVfU1RSSU5HICAgICAgICAgICAgICAweDE2CisjZGVmaW5lIE1CRURUTFNfQVNOMV9VVENfVElNRSAgICAgICAgICAgICAgICAweDE3CisjZGVmaW5lIE1CRURUTFNfQVNOMV9HRU5FUkFMSVpFRF9USU1FICAgICAgICAweDE4CisjZGVmaW5lIE1CRURUTFNfQVNOMV9VTklWRVJTQUxfU1RSSU5HICAgICAgICAweDFDCisjZGVmaW5lIE1CRURUTFNfQVNOMV9CTVBfU1RSSU5HICAgICAgICAgICAgICAweDFFCisjZGVmaW5lIE1CRURUTFNfQVNOMV9QUklNSVRJVkUgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCAgICAgICAgICAgICAweDIwCisjZGVmaW5lIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDICAgICAgICAweDgwCisvKiBcfSBuYW1lICovCisvKiBcfSBhZGR0b2dyb3VwIGFzbjFfbW9kdWxlICovCisKKy8qKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBiaW5hcnkgc3RyaW5nLCB3aXRob3V0IHRoZSB0cmFpbGluZyBcXDAgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfU0laRSh4KSAoc2l6ZW9mKHgpIC0gMSkKKworLyoqCisgKiBDb21wYXJlcyBhbiBtYmVkdGxzX2FzbjFfYnVmIHN0cnVjdHVyZSB0byBhIHJlZmVyZW5jZSBPSUQuCisgKgorICogT25seSB3b3JrcyBmb3IgJ2RlZmluZWQnIG9pZF9zdHIgdmFsdWVzIChNQkVEVExTX09JRF9ITUFDX1NIQTEpLCB5b3UgY2Fubm90IHVzZSBhCisgKiAndW5zaWduZWQgY2hhciAqb2lkJyBoZXJlIQorICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0NNUChvaWRfc3RyLCBvaWRfYnVmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoICggTUJFRFRMU19PSURfU0laRShvaWRfc3RyKSAhPSAob2lkX2J1ZiktPmxlbiApIHx8ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBtZW1jbXAoIChvaWRfc3RyKSwgKG9pZF9idWYpLT5wLCAob2lkX2J1ZiktPmxlbikgIT0gMCApCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcbmFtZSBGdW5jdGlvbnMgdG8gcGFyc2UgQVNOLjEgZGF0YSBzdHJ1Y3R1cmVzCisgKiBceworICovCisKKy8qKgorICogVHlwZS1sZW5ndGgtdmFsdWUgc3RydWN0dXJlIHRoYXQgYWxsb3dzIGZvciBBU04xIHVzaW5nIERFUi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19hc24xX2J1ZgoreworICAgIGludCB0YWc7ICAgICAgICAgICAgICAgIC8qKjwgQVNOMSB0eXBlLCBlLmcuIE1CRURUTFNfQVNOMV9VVEY4X1NUUklORy4gKi8KKyAgICBzaXplX3QgbGVuOyAgICAgICAgICAgICAvKio8IEFTTjEgbGVuZ3RoLCBpbiBvY3RldHMuICovCisgICAgdW5zaWduZWQgY2hhciAqcDsgICAgICAgLyoqPCBBU04xIGRhdGEsIGUuZy4gaW4gQVNDSUkuICovCit9CittYmVkdGxzX2FzbjFfYnVmOworCisvKioKKyAqIENvbnRhaW5lciBmb3IgQVNOMSBiaXQgc3RyaW5ncy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19hc24xX2JpdHN0cmluZworeworICAgIHNpemVfdCBsZW47ICAgICAgICAgICAgICAgICAvKio8IEFTTjEgbGVuZ3RoLCBpbiBvY3RldHMuICovCisgICAgdW5zaWduZWQgY2hhciB1bnVzZWRfYml0czsgIC8qKjwgTnVtYmVyIG9mIHVudXNlZCBiaXRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyAqLworICAgIHVuc2lnbmVkIGNoYXIgKnA7ICAgICAgICAgICAvKio8IFJhdyBBU04xIGRhdGEgZm9yIHRoZSBiaXQgc3RyaW5nICovCit9CittYmVkdGxzX2FzbjFfYml0c3RyaW5nOworCisvKioKKyAqIENvbnRhaW5lciBmb3IgYSBzZXF1ZW5jZSBvZiBBU04uMSBpdGVtcworICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX2FzbjFfc2VxdWVuY2UKK3sKKyAgICBtYmVkdGxzX2FzbjFfYnVmIGJ1ZjsgICAgICAgICAgICAgICAgICAgLyoqPCBCdWZmZXIgY29udGFpbmluZyB0aGUgZ2l2ZW4gQVNOLjEgaXRlbS4gKi8KKyAgICBzdHJ1Y3QgbWJlZHRsc19hc24xX3NlcXVlbmNlICpuZXh0OyAgICAvKio8IFRoZSBuZXh0IGVudHJ5IGluIHRoZSBzZXF1ZW5jZS4gKi8KK30KK21iZWR0bHNfYXNuMV9zZXF1ZW5jZTsKKworLyoqCisgKiBDb250YWluZXIgZm9yIGEgc2VxdWVuY2Ugb3IgbGlzdCBvZiAnbmFtZWQnIEFTTi4xIGRhdGEgaXRlbXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19hc24xX25hbWVkX2RhdGEKK3sKKyAgICBtYmVkdGxzX2FzbjFfYnVmIG9pZDsgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgb2JqZWN0IGlkZW50aWZpZXIuICovCisgICAgbWJlZHRsc19hc24xX2J1ZiB2YWw7ICAgICAgICAgICAgICAgICAgIC8qKjwgVGhlIG5hbWVkIHZhbHVlLiAqLworICAgIHN0cnVjdCBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqbmV4dDsgIC8qKjwgVGhlIG5leHQgZW50cnkgaW4gdGhlIHNlcXVlbmNlLiAqLworICAgIHVuc2lnbmVkIGNoYXIgbmV4dF9tZXJnZWQ7ICAgICAgLyoqPCBNZXJnZSBuZXh0IGl0ZW0gaW50byB0aGUgY3VycmVudCBvbmU/ICovCit9CittYmVkdGxzX2FzbjFfbmFtZWRfZGF0YTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgR2V0IHRoZSBsZW5ndGggb2YgYW4gQVNOLjEgZWxlbWVudC4KKyAqICAgICAgICAgICAgICBVcGRhdGVzIHRoZSBwb2ludGVyIHRvIGltbWVkaWF0ZWx5IGJlaGluZCB0aGUgbGVuZ3RoLgorICoKKyAqIFxwYXJhbSBwICAgICBUaGUgcG9zaXRpb24gaW4gdGhlIEFTTi4xIGRhdGEKKyAqIFxwYXJhbSBlbmQgICBFbmQgb2YgZGF0YQorICogXHBhcmFtIGxlbiAgIFRoZSB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgdmFsdWUKKyAqCisgKiBccmV0dXJuICAgICAgMCBpZiBzdWNjZXNzZnVsLCBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBIG9uIHJlYWNoaW5nCisgKiAgICAgICAgICAgICAgZW5kIG9mIGRhdGEsIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9MRU5HVEggaWYgbGVuZ3RoIGlzCisgKiAgICAgICAgICAgICAgdW5wYXJzZWFibGUuCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfZ2V0X2xlbiggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICBzaXplX3QgKmxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICBHZXQgdGhlIHRhZyBhbmQgbGVuZ3RoIG9mIHRoZSB0YWcuIENoZWNrIGZvciB0aGUgcmVxdWVzdGVkIHRhZy4KKyAqICAgICAgICAgICAgICBVcGRhdGVzIHRoZSBwb2ludGVyIHRvIGltbWVkaWF0ZWx5IGJlaGluZCB0aGUgdGFnIGFuZCBsZW5ndGguCisgKgorICogXHBhcmFtIHAgICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgQVNOLjEgZGF0YQorICogXHBhcmFtIGVuZCAgIEVuZCBvZiBkYXRhCisgKiBccGFyYW0gbGVuICAgVGhlIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBsZW5ndGgKKyAqIFxwYXJhbSB0YWcgICBUaGUgZXhwZWN0ZWQgdGFnCisgKgorICogXHJldHVybiAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyBpZiB0YWcgZGlkCisgKiAgICAgICAgICAgICAgbm90IG1hdGNoIHJlcXVlc3RlZCB0YWcsIG9yIGFub3RoZXIgc3BlY2lmaWMgQVNOLjEgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgIHNpemVfdCAqbGVuLCBpbnQgdGFnICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIFJldHJpZXZlIGEgYm9vbGVhbiBBU04uMSB0YWcgYW5kIGl0cyB2YWx1ZS4KKyAqICAgICAgICAgICAgICBVcGRhdGVzIHRoZSBwb2ludGVyIHRvIGltbWVkaWF0ZWx5IGJlaGluZCB0aGUgZnVsbCB0YWcuCisgKgorICogXHBhcmFtIHAgICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgQVNOLjEgZGF0YQorICogXHBhcmFtIGVuZCAgIEVuZCBvZiBkYXRhCisgKiBccGFyYW0gdmFsICAgVGhlIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNlaXZlIHRoZSB2YWx1ZQorICoKKyAqIFxyZXR1cm4gICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgYSBzcGVjaWZpYyBBU04uMSBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19hc24xX2dldF9ib29sKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgaW50ICp2YWwgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgUmV0cmlldmUgYW4gaW50ZWdlciBBU04uMSB0YWcgYW5kIGl0cyB2YWx1ZS4KKyAqICAgICAgICAgICAgICBVcGRhdGVzIHRoZSBwb2ludGVyIHRvIGltbWVkaWF0ZWx5IGJlaGluZCB0aGUgZnVsbCB0YWcuCisgKgorICogXHBhcmFtIHAgICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgQVNOLjEgZGF0YQorICogXHBhcmFtIGVuZCAgIEVuZCBvZiBkYXRhCisgKiBccGFyYW0gdmFsICAgVGhlIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNlaXZlIHRoZSB2YWx1ZQorICoKKyAqIFxyZXR1cm4gICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgYSBzcGVjaWZpYyBBU04uMSBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19hc24xX2dldF9pbnQoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgaW50ICp2YWwgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgUmV0cmlldmUgYSBiaXRzdHJpbmcgQVNOLjEgdGFnIGFuZCBpdHMgdmFsdWUuCisgKiAgICAgICAgICAgICAgVXBkYXRlcyB0aGUgcG9pbnRlciB0byBpbW1lZGlhdGVseSBiZWhpbmQgdGhlIGZ1bGwgdGFnLgorICoKKyAqIFxwYXJhbSBwICAgICBUaGUgcG9zaXRpb24gaW4gdGhlIEFTTi4xIGRhdGEKKyAqIFxwYXJhbSBlbmQgICBFbmQgb2YgZGF0YQorICogXHBhcmFtIGJzICAgIFRoZSB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgdmFsdWUKKyAqCisgKiBccmV0dXJuICAgICAgMCBpZiBzdWNjZXNzZnVsIG9yIGEgc3BlY2lmaWMgQVNOLjEgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfYXNuMV9nZXRfYml0c3RyaW5nKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX2JpdHN0cmluZyAqYnMpOworCisvKioKKyAqIFxicmllZiAgICAgICBSZXRyaWV2ZSBhIGJpdHN0cmluZyBBU04uMSB0YWcgd2l0aG91dCB1bnVzZWQgYml0cyBhbmQgaXRzCisgKiAgICAgICAgICAgICAgdmFsdWUuCisgKiAgICAgICAgICAgICAgVXBkYXRlcyB0aGUgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBiaXQvb2N0ZXQgc3RyaW5nLgorICoKKyAqIFxwYXJhbSBwICAgICBUaGUgcG9zaXRpb24gaW4gdGhlIEFTTi4xIGRhdGEKKyAqIFxwYXJhbSBlbmQgICBFbmQgb2YgZGF0YQorICogXHBhcmFtIGxlbiAgIExlbmd0aCBvZiB0aGUgYWN0dWFsIGJpdC9vY3RlY3Qgc3RyaW5nIGluIGJ5dGVzCisgKgorICogXHJldHVybiAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBhIHNwZWNpZmljIEFTTi4xIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfZ2V0X2JpdHN0cmluZ19udWxsKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICBQYXJzZXMgYW5kIHNwbGl0cyBhbiBBU04uMSAiU0VRVUVOQ0UgT0YgPHRhZz4iCisgKiAgICAgICAgICAgICAgVXBkYXRlZCB0aGUgcG9pbnRlciB0byBpbW1lZGlhdGVseSBiZWhpbmQgdGhlIGZ1bGwgc2VxdWVuY2UgdGFnLgorICoKKyAqIFxwYXJhbSBwICAgICBUaGUgcG9zaXRpb24gaW4gdGhlIEFTTi4xIGRhdGEKKyAqIFxwYXJhbSBlbmQgICBFbmQgb2YgZGF0YQorICogXHBhcmFtIGN1ciAgIEZpcnN0IHZhcmlhYmxlIGluIHRoZSBjaGFpbiB0byBmaWxsCisgKiBccGFyYW0gdGFnICAgVHlwZSBvZiBzZXF1ZW5jZQorICoKKyAqIFxyZXR1cm4gICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgYSBzcGVjaWZpYyBBU04uMSBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19hc24xX2dldF9zZXF1ZW5jZV9vZiggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX3NlcXVlbmNlICpjdXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWcpOworCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgUmV0cmlldmUgYSBNUEkgdmFsdWUgZnJvbSBhbiBpbnRlZ2VyIEFTTi4xIHRhZy4KKyAqICAgICAgICAgICAgICBVcGRhdGVzIHRoZSBwb2ludGVyIHRvIGltbWVkaWF0ZWx5IGJlaGluZCB0aGUgZnVsbCB0YWcuCisgKgorICogXHBhcmFtIHAgICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgQVNOLjEgZGF0YQorICogXHBhcmFtIGVuZCAgIEVuZCBvZiBkYXRhCisgKiBccGFyYW0gWCAgICAgVGhlIE1QSSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgdmFsdWUKKyAqCisgKiBccmV0dXJuICAgICAgMCBpZiBzdWNjZXNzZnVsIG9yIGEgc3BlY2lmaWMgQVNOLjEgb3IgTVBJIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfZ2V0X21waSggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICBtYmVkdGxzX21waSAqWCApOworI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgUmV0cmlldmUgYW4gQWxnb3JpdGhtSWRlbnRpZmllciBBU04uMSBzZXF1ZW5jZS4KKyAqICAgICAgICAgICAgICBVcGRhdGVzIHRoZSBwb2ludGVyIHRvIGltbWVkaWF0ZWx5IGJlaGluZCB0aGUgZnVsbAorICogICAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIuCisgKgorICogXHBhcmFtIHAgICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgQVNOLjEgZGF0YQorICogXHBhcmFtIGVuZCAgIEVuZCBvZiBkYXRhCisgKiBccGFyYW0gYWxnICAgVGhlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBPSUQKKyAqIFxwYXJhbSBwYXJhbXMgVGhlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBwYXJhbXMgKGlmIGFueSkKKyAqCisgKiBccmV0dXJuICAgICAgMCBpZiBzdWNjZXNzZnVsIG9yIGEgc3BlY2lmaWMgQVNOLjEgb3IgTVBJIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfZ2V0X2FsZyggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICBtYmVkdGxzX2FzbjFfYnVmICphbGcsIG1iZWR0bHNfYXNuMV9idWYgKnBhcmFtcyApOworCisvKioKKyAqIFxicmllZiAgICAgICBSZXRyaWV2ZSBhbiBBbGdvcml0aG1JZGVudGlmaWVyIEFTTi4xIHNlcXVlbmNlIHdpdGggTlVMTCBvciBubworICogICAgICAgICAgICAgIHBhcmFtcy4KKyAqICAgICAgICAgICAgICBVcGRhdGVzIHRoZSBwb2ludGVyIHRvIGltbWVkaWF0ZWx5IGJlaGluZCB0aGUgZnVsbAorICogICAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIuCisgKgorICogXHBhcmFtIHAgICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgQVNOLjEgZGF0YQorICogXHBhcmFtIGVuZCAgIEVuZCBvZiBkYXRhCisgKiBccGFyYW0gYWxnICAgVGhlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBPSUQKKyAqCisgKiBccmV0dXJuICAgICAgMCBpZiBzdWNjZXNzZnVsIG9yIGEgc3BlY2lmaWMgQVNOLjEgb3IgTVBJIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfZ2V0X2FsZ19udWxsKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2FzbjFfYnVmICphbGcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRmluZCBhIHNwZWNpZmljIG5hbWVkX2RhdGEgZW50cnkgaW4gYSBzZXF1ZW5jZSBvciBsaXN0IGJhc2VkIG9uCisgKiAgICAgICAgICAgICAgdGhlIE9JRC4KKyAqCisgKiBccGFyYW0gbGlzdCAgVGhlIGxpc3QgdG8gc2VlayB0aHJvdWdoCisgKiBccGFyYW0gb2lkICAgVGhlIE9JRCB0byBsb29rIGZvcgorICogXHBhcmFtIGxlbiAgIFNpemUgb2YgdGhlIE9JRAorICoKKyAqIFxyZXR1cm4gICAgICBOVUxMIGlmIG5vdCBmb3VuZCwgb3IgYSBwb2ludGVyIHRvIHRoZSBleGlzdGluZyBlbnRyeS4KKyAqLworbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKm1iZWR0bHNfYXNuMV9maW5kX25hbWVkX2RhdGEoIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2lkLCBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIEZyZWUgYSBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSBlbnRyeQorICoKKyAqIFxwYXJhbSBlbnRyeSBUaGUgbmFtZWQgZGF0YSBlbnRyeSB0byBmcmVlCisgKi8KK3ZvaWQgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YSggbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmVudHJ5ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIEZyZWUgYWxsIGVudHJpZXMgaW4gYSBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSBsaXN0CisgKiAgICAgICAgICAgICAgSGVhZCB3aWxsIGJlIHNldCB0byBOVUxMCisgKgorICogXHBhcmFtIGhlYWQgIFBvaW50ZXIgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3Qgb2YgbmFtZWQgZGF0YSBlbnRyaWVzIHRvIGZyZWUKKyAqLwordm9pZCBtYmVkdGxzX2FzbjFfZnJlZV9uYW1lZF9kYXRhX2xpc3QoIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICoqaGVhZCApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogYXNuMS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2FzbjF3cml0ZS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9hc24xd3JpdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2ZmMzJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9hc24xd3JpdGUuaApAQCAtMCwwICsxLDIzOSBAQAorLyoqCisgKiBcZmlsZSBhc24xd3JpdGUuaAorICoKKyAqIFxicmllZiBBU04uMSBidWZmZXIgd3JpdGluZyBmdW5jdGlvbmFsaXR5CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfQVNOMV9XUklURV9ICisjZGVmaW5lIE1CRURUTFNfQVNOMV9XUklURV9ICisKKyNpbmNsdWRlICJhc24xLmgiCisKKyNkZWZpbmUgTUJFRFRMU19BU04xX0NIS19BREQoZywgZikgZG8geyBpZiggKCByZXQgPSBmICkgPCAwICkgcmV0dXJuKCByZXQgKTsgZWxzZSAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyArPSByZXQ7IH0gd2hpbGUoIDAgKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIGxlbmd0aCBmaWVsZCBpbiBBU04uMSBmb3JtYXQKKyAqICAgICAgICAgICAgICAgICAgTm90ZTogZnVuY3Rpb24gd29ya3MgYmFja3dhcmRzIGluIGRhdGEgYnVmZmVyCisgKgorICogXHBhcmFtIHAgICAgICAgICByZWZlcmVuY2UgdG8gY3VycmVudCBwb3NpdGlvbiBwb2ludGVyCisgKiBccGFyYW0gc3RhcnQgICAgIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGZvciBib3VuZHMtY2hlY2tpbmcpCisgKiBccGFyYW0gbGVuICAgICAgIHRoZSBsZW5ndGggdG8gd3JpdGUKKyAqCisgKiBccmV0dXJuICAgICAgICAgIHRoZSBsZW5ndGggd3JpdHRlbiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBBU04uMSB0YWcgaW4gQVNOLjEgZm9ybWF0CisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGZ1bmN0aW9uIHdvcmtzIGJhY2t3YXJkcyBpbiBkYXRhIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBwICAgICAgICAgcmVmZXJlbmNlIHRvIGN1cnJlbnQgcG9zaXRpb24gcG9pbnRlcgorICogXHBhcmFtIHN0YXJ0ICAgICBzdGFydCBvZiB0aGUgYnVmZmVyIChmb3IgYm91bmRzLWNoZWNraW5nKQorICogXHBhcmFtIHRhZyAgICAgICB0aGUgdGFnIHRvIHdyaXRlCisgKgorICogXHJldHVybiAgICAgICAgICB0aGUgbGVuZ3RoIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdGFnICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSByYXcgYnVmZmVyIGRhdGEKKyAqICAgICAgICAgICAgICAgICAgTm90ZTogZnVuY3Rpb24gd29ya3MgYmFja3dhcmRzIGluIGRhdGEgYnVmZmVyCisgKgorICogXHBhcmFtIHAgICAgICAgICByZWZlcmVuY2UgdG8gY3VycmVudCBwb3NpdGlvbiBwb2ludGVyCisgKiBccGFyYW0gc3RhcnQgICAgIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGZvciBib3VuZHMtY2hlY2tpbmcpCisgKiBccGFyYW0gYnVmICAgICAgIGRhdGEgYnVmZmVyIHRvIHdyaXRlCisgKiBccGFyYW0gc2l6ZSAgICAgIGxlbmd0aCBvZiB0aGUgZGF0YSBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIHRoZSBsZW5ndGggd3JpdHRlbiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9yYXdfYnVmZmVyKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBiaWcgbnVtYmVyIChNQkVEVExTX0FTTjFfSU5URUdFUikgaW4gQVNOLjEgZm9ybWF0CisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGZ1bmN0aW9uIHdvcmtzIGJhY2t3YXJkcyBpbiBkYXRhIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBwICAgICAgICAgcmVmZXJlbmNlIHRvIGN1cnJlbnQgcG9zaXRpb24gcG9pbnRlcgorICogXHBhcmFtIHN0YXJ0ICAgICBzdGFydCBvZiB0aGUgYnVmZmVyIChmb3IgYm91bmRzLWNoZWNraW5nKQorICogXHBhcmFtIFggICAgICAgICB0aGUgTVBJIHRvIHdyaXRlCisgKgorICogXHJldHVybiAgICAgICAgICB0aGUgbGVuZ3RoIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsIGNvbnN0IG1iZWR0bHNfbXBpICpYICk7CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBOVUxMIHRhZyAoTUJFRFRMU19BU04xX05VTEwpIHdpdGggemVybyBkYXRhIGluIEFTTi4xIGZvcm1hdAorICogICAgICAgICAgICAgICAgICBOb3RlOiBmdW5jdGlvbiB3b3JrcyBiYWNrd2FyZHMgaW4gZGF0YSBidWZmZXIKKyAqCisgKiBccGFyYW0gcCAgICAgICAgIHJlZmVyZW5jZSB0byBjdXJyZW50IHBvc2l0aW9uIHBvaW50ZXIKKyAqIFxwYXJhbSBzdGFydCAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoZm9yIGJvdW5kcy1jaGVja2luZykKKyAqCisgKiBccmV0dXJuICAgICAgICAgIHRoZSBsZW5ndGggd3JpdHRlbiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9udWxsKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGFuIE9JRCB0YWcgKE1CRURUTFNfQVNOMV9PSUQpIGFuZCBkYXRhIGluIEFTTi4xIGZvcm1hdAorICogICAgICAgICAgICAgICAgICBOb3RlOiBmdW5jdGlvbiB3b3JrcyBiYWNrd2FyZHMgaW4gZGF0YSBidWZmZXIKKyAqCisgKiBccGFyYW0gcCAgICAgICAgIHJlZmVyZW5jZSB0byBjdXJyZW50IHBvc2l0aW9uIHBvaW50ZXIKKyAqIFxwYXJhbSBzdGFydCAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoZm9yIGJvdW5kcy1jaGVja2luZykKKyAqIFxwYXJhbSBvaWQgICAgICAgdGhlIE9JRCB0byB3cml0ZQorICogXHBhcmFtIG9pZF9sZW4gICBsZW5ndGggb2YgdGhlIE9JRAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgdGhlIGxlbmd0aCB3cml0dGVuIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX29pZCggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBvaWRfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhbiBBbGdvcml0aG1JZGVudGlmaWVyIHNlcXVlbmNlIGluIEFTTi4xIGZvcm1hdAorICogICAgICAgICAgICAgICAgICBOb3RlOiBmdW5jdGlvbiB3b3JrcyBiYWNrd2FyZHMgaW4gZGF0YSBidWZmZXIKKyAqCisgKiBccGFyYW0gcCAgICAgICAgIHJlZmVyZW5jZSB0byBjdXJyZW50IHBvc2l0aW9uIHBvaW50ZXIKKyAqIFxwYXJhbSBzdGFydCAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoZm9yIGJvdW5kcy1jaGVja2luZykKKyAqIFxwYXJhbSBvaWQgICAgICAgdGhlIE9JRCBvZiB0aGUgYWxnb3JpdGhtCisgKiBccGFyYW0gb2lkX2xlbiAgIGxlbmd0aCBvZiB0aGUgT0lECisgKiBccGFyYW0gcGFyX2xlbiAgIGxlbmd0aCBvZiBwYXJhbWV0ZXJzLCB3aGljaCBtdXN0IGJlIGFscmVhZHkgd3JpdHRlbi4KKyAqICAgICAgICAgICAgICAgICAgSWYgMCwgTlVMTCBwYXJhbWV0ZXJzIGFyZSBhZGRlZAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgdGhlIGxlbmd0aCB3cml0dGVuIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX2FsZ29yaXRobV9pZGVudGlmaWVyKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2lkLCBzaXplX3Qgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGFyX2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBib29sZWFuIHRhZyAoTUJFRFRMU19BU04xX0JPT0xFQU4pIGFuZCB2YWx1ZSBpbiBBU04uMSBmb3JtYXQKKyAqICAgICAgICAgICAgICAgICAgTm90ZTogZnVuY3Rpb24gd29ya3MgYmFja3dhcmRzIGluIGRhdGEgYnVmZmVyCisgKgorICogXHBhcmFtIHAgICAgICAgICByZWZlcmVuY2UgdG8gY3VycmVudCBwb3NpdGlvbiBwb2ludGVyCisgKiBccGFyYW0gc3RhcnQgICAgIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGZvciBib3VuZHMtY2hlY2tpbmcpCisgKiBccGFyYW0gYm9vbGVhbiAgIDAgb3IgMQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgdGhlIGxlbmd0aCB3cml0dGVuIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX2Jvb2woIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwgaW50IGJvb2xlYW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGFuIGludCB0YWcgKE1CRURUTFNfQVNOMV9JTlRFR0VSKSBhbmQgdmFsdWUgaW4gQVNOLjEgZm9ybWF0CisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGZ1bmN0aW9uIHdvcmtzIGJhY2t3YXJkcyBpbiBkYXRhIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBwICAgICAgICAgcmVmZXJlbmNlIHRvIGN1cnJlbnQgcG9zaXRpb24gcG9pbnRlcgorICogXHBhcmFtIHN0YXJ0ICAgICBzdGFydCBvZiB0aGUgYnVmZmVyIChmb3IgYm91bmRzLWNoZWNraW5nKQorICogXHBhcmFtIHZhbCAgICAgICB0aGUgaW50ZWdlciB2YWx1ZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgdGhlIGxlbmd0aCB3cml0dGVuIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX2ludCggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LCBpbnQgdmFsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIHByaW50YWJsZSBzdHJpbmcgdGFnIChNQkVEVExTX0FTTjFfUFJJTlRBQkxFX1NUUklORykgYW5kCisgKiAgICAgICAgICAgICAgICAgIHZhbHVlIGluIEFTTi4xIGZvcm1hdAorICogICAgICAgICAgICAgICAgICBOb3RlOiBmdW5jdGlvbiB3b3JrcyBiYWNrd2FyZHMgaW4gZGF0YSBidWZmZXIKKyAqCisgKiBccGFyYW0gcCAgICAgICAgIHJlZmVyZW5jZSB0byBjdXJyZW50IHBvc2l0aW9uIHBvaW50ZXIKKyAqIFxwYXJhbSBzdGFydCAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoZm9yIGJvdW5kcy1jaGVja2luZykKKyAqIFxwYXJhbSB0ZXh0ICAgICAgdGhlIHRleHQgdG8gd3JpdGUKKyAqIFxwYXJhbSB0ZXh0X2xlbiAgbGVuZ3RoIG9mIHRoZSB0ZXh0CisgKgorICogXHJldHVybiAgICAgICAgICB0aGUgbGVuZ3RoIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfcHJpbnRhYmxlX3N0cmluZyggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhbiBJQTUgc3RyaW5nIHRhZyAoTUJFRFRMU19BU04xX0lBNV9TVFJJTkcpIGFuZAorICogICAgICAgICAgICAgICAgICB2YWx1ZSBpbiBBU04uMSBmb3JtYXQKKyAqICAgICAgICAgICAgICAgICAgTm90ZTogZnVuY3Rpb24gd29ya3MgYmFja3dhcmRzIGluIGRhdGEgYnVmZmVyCisgKgorICogXHBhcmFtIHAgICAgICAgICByZWZlcmVuY2UgdG8gY3VycmVudCBwb3NpdGlvbiBwb2ludGVyCisgKiBccGFyYW0gc3RhcnQgICAgIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGZvciBib3VuZHMtY2hlY2tpbmcpCisgKiBccGFyYW0gdGV4dCAgICAgIHRoZSB0ZXh0IHRvIHdyaXRlCisgKiBccGFyYW0gdGV4dF9sZW4gIGxlbmd0aCBvZiB0aGUgdGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgdGhlIGxlbmd0aCB3cml0dGVuIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX2lhNV9zdHJpbmcoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRleHQsIHNpemVfdCB0ZXh0X2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBiaXRzdHJpbmcgdGFnIChNQkVEVExTX0FTTjFfQklUX1NUUklORykgYW5kCisgKiAgICAgICAgICAgICAgICAgIHZhbHVlIGluIEFTTi4xIGZvcm1hdAorICogICAgICAgICAgICAgICAgICBOb3RlOiBmdW5jdGlvbiB3b3JrcyBiYWNrd2FyZHMgaW4gZGF0YSBidWZmZXIKKyAqCisgKiBccGFyYW0gcCAgICAgICAgIHJlZmVyZW5jZSB0byBjdXJyZW50IHBvc2l0aW9uIHBvaW50ZXIKKyAqIFxwYXJhbSBzdGFydCAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoZm9yIGJvdW5kcy1jaGVja2luZykKKyAqIFxwYXJhbSBidWYgICAgICAgdGhlIGJpdHN0cmluZworICogXHBhcmFtIGJpdHMgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGJpdHN0cmluZworICoKKyAqIFxyZXR1cm4gICAgICAgICAgdGhlIGxlbmd0aCB3cml0dGVuIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX2JpdHN0cmluZyggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBiaXRzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhbiBvY3RldCBzdHJpbmcgdGFnIChNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HKSBhbmQKKyAqICAgICAgICAgICAgICAgICAgdmFsdWUgaW4gQVNOLjEgZm9ybWF0CisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGZ1bmN0aW9uIHdvcmtzIGJhY2t3YXJkcyBpbiBkYXRhIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBwICAgICAgICAgcmVmZXJlbmNlIHRvIGN1cnJlbnQgcG9zaXRpb24gcG9pbnRlcgorICogXHBhcmFtIHN0YXJ0ICAgICBzdGFydCBvZiB0aGUgYnVmZmVyIChmb3IgYm91bmRzLWNoZWNraW5nKQorICogXHBhcmFtIGJ1ZiAgICAgICBkYXRhIGJ1ZmZlciB0byB3cml0ZQorICogXHBhcmFtIHNpemUgICAgICBsZW5ndGggb2YgdGhlIGRhdGEgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgICB0aGUgbGVuZ3RoIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENyZWF0ZSBvciBmaW5kIGEgc3BlY2lmaWMgbmFtZWRfZGF0YSBlbnRyeSBmb3Igd3JpdGluZyBpbiBhCisgKiAgICAgICAgICAgICAgICAgIHNlcXVlbmNlIG9yIGxpc3QgYmFzZWQgb24gdGhlIE9JRC4gSWYgbm90IGFscmVhZHkgaW4gdGhlcmUsCisgKiAgICAgICAgICAgICAgICAgIGEgbmV3IGVudHJ5IGlzIGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LgorICogICAgICAgICAgICAgICAgICBXYXJuaW5nOiBEZXN0cnVjdGl2ZSBiZWhhdmlvdXIgZm9yIHRoZSB2YWwgZGF0YSEKKyAqCisgKiBccGFyYW0gbGlzdCAgICAgIFBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBoZWFkIG9mIHRoZSBsaXN0IHRvIHNlZWsKKyAqICAgICAgICAgICAgICAgICAgdGhyb3VnaCAod2lsbCBiZSB1cGRhdGVkIGluIGNhc2Ugb2YgYSBuZXcgZW50cnkpCisgKiBccGFyYW0gb2lkICAgICAgIFRoZSBPSUQgdG8gbG9vayBmb3IKKyAqIFxwYXJhbSBvaWRfbGVuICAgU2l6ZSBvZiB0aGUgT0lECisgKiBccGFyYW0gdmFsICAgICAgIERhdGEgdG8gc3RvcmUgKGNhbiBiZSBOVUxMIGlmIHlvdSB3YW50IHRvIGZpbGwgaXQgYnkgaGFuZCkKKyAqIFxwYXJhbSB2YWxfbGVuICAgTWluaW11bSBsZW5ndGggb2YgdGhlIGRhdGEgYnVmZmVyIG5lZWRlZAorICoKKyAqIFxyZXR1cm4gICAgICBOVUxMIGlmIGlmIHRoZXJlIHdhcyBhIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLCBvciBhIHBvaW50ZXIKKyAqICAgICAgICAgICAgICB0byB0aGUgbmV3IC8gZXhpc3RpbmcgZW50cnkuCisgKi8KK21iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICptYmVkdGxzX2FzbjFfc3RvcmVfbmFtZWRfZGF0YSggbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKipsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9pZCwgc2l6ZV90IG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YWxfbGVuICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBNQkVEVExTX0FTTjFfV1JJVEVfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9iYXNlNjQuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYmFzZTY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyYzY1MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYmFzZTY0LmgKQEAgLTAsMCArMSw4OCBAQAorLyoqCisgKiBcZmlsZSBiYXNlNjQuaAorICoKKyAqIFxicmllZiBSRkMgMTUyMSBiYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19CQVNFNjRfSAorI2RlZmluZSBNQkVEVExTX0JBU0U2NF9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2RlZmluZSBNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTCAgICAgICAgICAgICAgIC0weDAwMkEgIC8qKjwgT3V0cHV0IGJ1ZmZlciB0b28gc21hbGwuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUiAgICAgICAgICAgICAgLTB4MDAyQyAgLyoqPCBJbnZhbGlkIGNoYXJhY3RlciBpbiBpbnB1dC4gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBFbmNvZGUgYSBidWZmZXIgaW50byBiYXNlNjQgZm9ybWF0CisgKgorICogXHBhcmFtIGRzdCAgICAgIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICogXHBhcmFtIGRsZW4gICAgIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICogXHBhcmFtIG9sZW4gICAgIG51bWJlciBvZiBieXRlcyB3cml0dGVuCisgKiBccGFyYW0gc3JjICAgICAgc291cmNlIGJ1ZmZlcgorICogXHBhcmFtIHNsZW4gICAgIGFtb3VudCBvZiBkYXRhIHRvIGJlIGVuY29kZWQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTC4KKyAqICAgICAgICAgICAgICAgICAqb2xlbiBpcyBhbHdheXMgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBhbW91bnQKKyAqICAgICAgICAgICAgICAgICBvZiBkYXRhIHRoYXQgaGFzIChvciB3b3VsZCBoYXZlKSBiZWVuIHdyaXR0ZW4uCisgKiAgICAgICAgICAgICAgICAgSWYgdGhhdCBsZW5ndGggY2Fubm90IGJlIHJlcHJlc2VudGVkLCB0aGVuIG5vIGRhdGEgaXMKKyAqICAgICAgICAgICAgICAgICB3cml0dGVuIHRvIHRoZSBidWZmZXIgYW5kICpvbGVuIGlzIHNldCB0byB0aGUgbWF4aW11bQorICogICAgICAgICAgICAgICAgIGxlbmd0aCByZXByZXNlbnRhYmxlIGFzIGEgc2l6ZV90LgorICoKKyAqIFxub3RlICAgICAgICAgICBDYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkbGVuID0gMCB0byBvYnRhaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgcmVxdWlyZWQgYnVmZmVyIHNpemUgaW4gKm9sZW4KKyAqLworaW50IG1iZWR0bHNfYmFzZTY0X2VuY29kZSggdW5zaWduZWQgY2hhciAqZHN0LCBzaXplX3QgZGxlbiwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgc2l6ZV90IHNsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRGVjb2RlIGEgYmFzZTY0LWZvcm1hdHRlZCBidWZmZXIKKyAqCisgKiBccGFyYW0gZHN0ICAgICAgZGVzdGluYXRpb24gYnVmZmVyIChjYW4gYmUgTlVMTCBmb3IgY2hlY2tpbmcgc2l6ZSkKKyAqIFxwYXJhbSBkbGVuICAgICBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAqIFxwYXJhbSBvbGVuICAgICBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbgorICogXHBhcmFtIHNyYyAgICAgIHNvdXJjZSBidWZmZXIKKyAqIFxwYXJhbSBzbGVuICAgICBhbW91bnQgb2YgZGF0YSB0byBiZSBkZWNvZGVkCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgTUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwsIG9yCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSIGlmIHRoZSBpbnB1dCBkYXRhIGlzCisgKiAgICAgICAgICAgICAgICAgbm90IGNvcnJlY3QuICpvbGVuIGlzIGFsd2F5cyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGFtb3VudAorICogICAgICAgICAgICAgICAgIG9mIGRhdGEgdGhhdCBoYXMgKG9yIHdvdWxkIGhhdmUpIGJlZW4gd3JpdHRlbi4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgQ2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggKmRzdCA9IE5VTEwgb3IgZGxlbiA9IDAgdG8gb2J0YWluCisgKiAgICAgICAgICAgICAgICAgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplIGluICpvbGVuCisgKi8KK2ludCBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUoIHVuc2lnbmVkIGNoYXIgKmRzdCwgc2l6ZV90IGRsZW4sIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHNpemVfdCBzbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2Jhc2U2NF9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBiYXNlNjQuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9iaWdudW0uaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYmlnbnVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1MTU1NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYmlnbnVtLmgKQEAgLTAsMCArMSw3MTcgQEAKKy8qKgorICogXGZpbGUgYmlnbnVtLmgKKyAqCisgKiBcYnJpZWYgIE11bHRpLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19CSUdOVU1fSAorI2RlZmluZSBNQkVEVExTX0JJR05VTV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisjZGVmaW5lIE1CRURUTFNfRVJSX01QSV9GSUxFX0lPX0VSUk9SICAgICAgICAgICAgICAgICAgICAgLTB4MDAwMiAgLyoqPCBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byBhIGZpbGUuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQSAgICAgICAgICAgICAgICAgICAgLTB4MDAwNCAgLyoqPCBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTVBJX0lOVkFMSURfQ0hBUkFDVEVSICAgICAgICAgICAgICAgICAtMHgwMDA2ICAvKio8IFRoZXJlIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIGluIHRoZSBkaWdpdCBzdHJpbmcuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX01QSV9CVUZGRVJfVE9PX1NNQUxMICAgICAgICAgICAgICAgICAgLTB4MDAwOCAgLyoqPCBUaGUgYnVmZmVyIGlzIHRvbyBzbWFsbCB0byB3cml0ZSB0by4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFICAgICAgICAgICAgICAgICAgICAtMHgwMDBBICAvKio8IFRoZSBpbnB1dCBhcmd1bWVudHMgYXJlIG5lZ2F0aXZlIG9yIHJlc3VsdCBpbiBpbGxlZ2FsIG91dHB1dC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8gICAgICAgICAgICAgICAgICAtMHgwMDBDICAvKio8IFRoZSBpbnB1dCBhcmd1bWVudCBmb3IgZGl2aXNpb24gaXMgemVybywgd2hpY2ggaXMgbm90IGFsbG93ZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRSAgICAgICAgICAgICAgICAgICAgLTB4MDAwRSAgLyoqPCBUaGUgaW5wdXQgYXJndW1lbnRzIGFyZSBub3QgYWNjZXB0YWJsZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAtMHgwMDEwICAvKio8IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gKi8KKworI2RlZmluZSBNQkVEVExTX01QSV9DSEsoZikgZG8geyBpZiggKCByZXQgPSBmICkgIT0gMCApIGdvdG8gY2xlYW51cDsgfSB3aGlsZSggMCApCisKKy8qCisgKiBNYXhpbXVtIHNpemUgTVBJcyBhcmUgYWxsb3dlZCB0byBncm93IHRvIGluIG51bWJlciBvZiBsaW1icy4KKyAqLworI2RlZmluZSBNQkVEVExTX01QSV9NQVhfTElNQlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01QSV9XSU5ET1dfU0laRSkKKy8qCisgKiBNYXhpbXVtIHdpbmRvdyBzaXplIHVzZWQgZm9yIG1vZHVsYXIgZXhwb25lbnRpYXRpb24uIERlZmF1bHQ6IDYKKyAqIE1pbmltdW0gdmFsdWU6IDEuIE1heGltdW0gdmFsdWU6IDYuCisgKgorICogUmVzdWx0IGlzIGFuIGFycmF5IG9mICggMiA8PCBNQkVEVExTX01QSV9XSU5ET1dfU0laRSApIE1QSXMgdXNlZAorICogZm9yIHRoZSBzbGlkaW5nIHdpbmRvdyBjYWxjdWxhdGlvbi4gKFNvIDY0IGJ5IGRlZmF1bHQpCisgKgorICogUmVkdWN0aW9uIGluIHNpemUsIHJlZHVjZXMgc3BlZWQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19NUElfV0lORE9XX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAgICAgICAvKio8IE1heGltdW0gd2luZG93cyBzaXplIHVzZWQuICovCisjZW5kaWYgLyogIU1CRURUTFNfTVBJX1dJTkRPV19TSVpFICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01QSV9NQVhfU0laRSkKKy8qCisgKiBNYXhpbXVtIHNpemUgb2YgTVBJcyBhbGxvd2VkIGluIGJpdHMgYW5kIGJ5dGVzIGZvciB1c2VyLU1QSXMuCisgKiAoIERlZmF1bHQ6IDUxMiBieXRlcyA9PiA0MDk2IGJpdHMsIE1heGltdW0gdGVzdGVkOiAyMDQ4IGJ5dGVzID0+IDE2Mzg0IGJpdHMgKQorICoKKyAqIE5vdGU6IENhbGN1bGF0aW9ucyBjYW4gcmVzdWx0cyB0ZW1wb3JhcmlseSBpbiBsYXJnZXIgTVBJcy4gU28gdGhlIG51bWJlcgorICogb2YgbGltYnMgcmVxdWlyZWQgKE1CRURUTFNfTVBJX01BWF9MSU1CUykgaXMgaGlnaGVyLgorICovCisjZGVmaW5lIE1CRURUTFNfTVBJX01BWF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCAgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBmb3IgdXNhYmxlIE1QSXMuICovCisjZW5kaWYgLyogIU1CRURUTFNfTVBJX01BWF9TSVpFICovCisKKyNkZWZpbmUgTUJFRFRMU19NUElfTUFYX0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDggKiBNQkVEVExTX01QSV9NQVhfU0laRSApICAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgYml0cyBmb3IgdXNhYmxlIE1QSXMuICovCisKKy8qCisgKiBXaGVuIHJlYWRpbmcgZnJvbSBmaWxlcyB3aXRoIG1iZWR0bHNfbXBpX3JlYWRfZmlsZSgpIGFuZCB3cml0aW5nIHRvIGZpbGVzIHdpdGgKKyAqIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoKSB0aGUgYnVmZmVyIHNob3VsZCBoYXZlIHNwYWNlCisgKiBmb3IgYSAoc2hvcnQpIGxhYmVsLCB0aGUgTVBJIChpbiB0aGUgcHJvdmlkZWQgcmFkaXgpLCB0aGUgbmV3bGluZQorICogY2hhcmFjdGVycyBhbmQgdGhlICdcMCcuCisgKgorICogQnkgZGVmYXVsdCB3ZSBhc3N1bWUgYXQgbGVhc3QgYSAxMCBjaGFyIGxhYmVsLCBhIG1pbmltdW0gcmFkaXggb2YgMTAKKyAqIChkZWNpbWFsKSBhbmQgYSBtYXhpbXVtIG9mIDQwOTYgYml0IG51bWJlcnMgKDEyMzQgZGVjaW1hbCBjaGFycykuCisgKiBBdXRvc2l6ZWQgYXQgY29tcGlsZSB0aW1lIGZvciBhdCBsZWFzdCBhIDEwIGNoYXIgbGFiZWwsIGEgbWluaW11bSByYWRpeAorICogb2YgMTAgKGRlY2ltYWwpIGZvciBhIG51bWJlciBvZiBNQkVEVExTX01QSV9NQVhfQklUUyBzaXplLgorICoKKyAqIFRoaXMgdXNlZCB0byBiZSBzdGF0aWNhbGx5IHNpemVkIHRvIDEyNTAgZm9yIGEgbWF4aW11bSBvZiA0MDk2IGJpdAorICogbnVtYmVycyAoMTIzNCBkZWNpbWFsIGNoYXJzKS4KKyAqCisgKiBDYWxjdWxhdGUgdXNpbmcgdGhlIGZvcm11bGE6CisgKiAgTUJFRFRMU19NUElfUldfQlVGRkVSX1NJWkUgPSBjZWlsKE1CRURUTFNfTVBJX01BWF9CSVRTIC8gbG4oMTApICogbG4oMikpICsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbFNpemUgKyA2CisgKi8KKyNkZWZpbmUgTUJFRFRMU19NUElfTUFYX0JJVFNfU0NBTEUxMDAgICAgICAgICAgKCAxMDAgKiBNQkVEVExTX01QSV9NQVhfQklUUyApCisjZGVmaW5lIE1CRURUTFNfTE5fMl9ESVZfTE5fMTBfU0NBTEUxMDAgICAgICAgICAgICAgICAgIDMzMgorI2RlZmluZSBNQkVEVExTX01QSV9SV19CVUZGRVJfU0laRSAgICAgICAgICAgICAoICgoTUJFRFRMU19NUElfTUFYX0JJVFNfU0NBTEUxMDAgKyBNQkVEVExTX0xOXzJfRElWX0xOXzEwX1NDQUxFMTAwIC0gMSkgLyBNQkVEVExTX0xOXzJfRElWX0xOXzEwX1NDQUxFMTAwKSArIDEwICsgNiApCisKKy8qCisgKiBEZWZpbmUgdGhlIGJhc2UgaW50ZWdlciB0eXBlLCBhcmNoaXRlY3R1cmUtd2lzZS4KKyAqCisgKiAzMi1iaXQgaW50ZWdlcnMgY2FuIGJlIGZvcmNlZCBvbiA2NC1iaXQgYXJjaGVzIChlZy4gZm9yIHRlc3RpbmcgcHVycG9zZXMpCisgKiBieSBkZWZpbmluZyBNQkVEVExTX0hBVkVfSU5UMzIgYW5kIHVuZGVmaW5pbmcgTUJFRFRMU19IQVZFX0FTTQorICovCisjaWYgKCAhIGRlZmluZWQoTUJFRFRMU19IQVZFX0lOVDMyKSAmJiBcCisgICAgICAgIGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoX01fQU1ENjQpICkKKyAgI2RlZmluZSBNQkVEVExTX0hBVkVfSU5UNjQKKyAgdHlwZWRlZiAgaW50NjRfdCBtYmVkdGxzX21waV9zaW50OworICB0eXBlZGVmIHVpbnQ2NF90IG1iZWR0bHNfbXBpX3VpbnQ7CisjZWxzZQorICAjaWYgKCAhIGRlZmluZWQoTUJFRFRMU19IQVZFX0lOVDMyKSAmJiAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGVmaW5lZChfX0dOVUNfXykgJiYgKCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAgICB8fCBcCisgICAgICAgIGRlZmluZWQoX19wcGM2NF9fKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IFwKKyAgICAgICAgZGVmaW5lZChfX2lhNjRfXykgIHx8IGRlZmluZWQoX19hbHBoYV9fKSAgICAgfHwgXAorICAgICAgICAoZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykpICB8fCBcCisgICAgICAgIGRlZmluZWQoX19zMzkweF9fKSB8fCBkZWZpbmVkKF9fbWlwczY0KSApICkKKyAgICAgI2RlZmluZSBNQkVEVExTX0hBVkVfSU5UNjQKKyAgICAgdHlwZWRlZiAgaW50NjRfdCBtYmVkdGxzX21waV9zaW50OworICAgICB0eXBlZGVmIHVpbnQ2NF90IG1iZWR0bHNfbXBpX3VpbnQ7CisgICAgIC8qIG1iZWR0bHNfdF91ZGJsIGRlZmluZWQgYXMgMTI4LWJpdCB1bnNpZ25lZCBpbnQgKi8KKyAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgbWJlZHRsc190X3VkYmwgX19hdHRyaWJ1dGVfXygobW9kZShUSSkpKTsKKyAgICAgI2RlZmluZSBNQkVEVExTX0hBVkVfVURCTAorICAjZWxzZQorICAgICAjZGVmaW5lIE1CRURUTFNfSEFWRV9JTlQzMgorICAgICB0eXBlZGVmICBpbnQzMl90IG1iZWR0bHNfbXBpX3NpbnQ7CisgICAgIHR5cGVkZWYgdWludDMyX3QgbWJlZHRsc19tcGlfdWludDsKKyAgICAgdHlwZWRlZiB1aW50NjRfdCBtYmVkdGxzX3RfdWRibDsKKyAgICAgI2RlZmluZSBNQkVEVExTX0hBVkVfVURCTAorICAjZW5kaWYgLyogIU1CRURUTFNfSEFWRV9JTlQzMiAmJiBfX0dOVUNfXyAmJiA2NC1iaXQgcGxhdGZvcm0gKi8KKyNlbmRpZiAvKiAhTUJFRFRMU19IQVZFX0lOVDMyICYmIF9NU0NfVkVSICYmIF9NX0FNRDY0ICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTVBJIHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCBzOyAgICAgICAgICAgICAgLyohPCAgaW50ZWdlciBzaWduICAgICAgKi8KKyAgICBzaXplX3QgbjsgICAgICAgICAgIC8qITwgIHRvdGFsICMgb2YgbGltYnMgICovCisgICAgbWJlZHRsc19tcGlfdWludCAqcDsgICAgICAgICAgLyohPCAgcG9pbnRlciB0byBsaW1icyAgKi8KK30KK21iZWR0bHNfbXBpOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBvbmUgTVBJIChtYWtlIGludGVybmFsIHJlZmVyZW5jZXMgdmFsaWQpCisgKiAgICAgICAgICAgICAgICAgIFRoaXMganVzdCBtYWtlcyBpdCByZWFkeSB0byBiZSBzZXQgb3IgZnJlZWQsCisgKiAgICAgICAgICAgICAgICAgIGJ1dCBkb2VzIG5vdCBkZWZpbmUgYSB2YWx1ZSBmb3IgdGhlIE1QSS4KKyAqCisgKiBccGFyYW0gWCAgICAgICAgIE9uZSBNUEkgdG8gaW5pdGlhbGl6ZS4KKyAqLwordm9pZCBtYmVkdGxzX21waV9pbml0KCBtYmVkdGxzX21waSAqWCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBVbmFsbG9jYXRlIG9uZSBNUEkKKyAqCisgKiBccGFyYW0gWCAgICAgICAgT25lIE1QSSB0byB1bmFsbG9jYXRlLgorICovCit2b2lkIG1iZWR0bHNfbXBpX2ZyZWUoIG1iZWR0bHNfbXBpICpYICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEVubGFyZ2UgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGltYnMKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTVBJIHRvIGdyb3cKKyAqIFxwYXJhbSBuYmxpbWJzICBUaGUgdGFyZ2V0IG51bWJlciBvZiBsaW1icworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX2dyb3coIG1iZWR0bHNfbXBpICpYLCBzaXplX3QgbmJsaW1icyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXNpemUgZG93biwga2VlcGluZyBhdCBsZWFzdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsaW1icworICoKKyAqIFxwYXJhbSBYICAgICAgICBNUEkgdG8gc2hyaW5rCisgKiBccGFyYW0gbmJsaW1icyAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIGxpbWJzIHRvIGtlZXAKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9zaHJpbmsoIG1iZWR0bHNfbXBpICpYLCBzaXplX3QgbmJsaW1icyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDb3B5IHRoZSBjb250ZW50cyBvZiBZIGludG8gWAorICoKKyAqIFxwYXJhbSBYICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSBZICAgICAgICBTb3VyY2UgTVBJCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tcGlfY29weSggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpZICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFN3YXAgdGhlIGNvbnRlbnRzIG9mIFggYW5kIFkKKyAqCisgKiBccGFyYW0gWCAgICAgICAgRmlyc3QgTVBJIHZhbHVlCisgKiBccGFyYW0gWSAgICAgICAgU2Vjb25kIE1QSSB2YWx1ZQorICovCit2b2lkIG1iZWR0bHNfbXBpX3N3YXAoIG1iZWR0bHNfbXBpICpYLCBtYmVkdGxzX21waSAqWSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTYWZlIGNvbmRpdGlvbmFsIGFzc2lnbmVtZW50IFggPSBZIGlmIGFzc2lnbiBpcyAxCisgKgorICogXHBhcmFtIFggICAgICAgIE1QSSB0byBjb25kaXRpb25hbGx5IGFzc2lnbiB0bworICogXHBhcmFtIFkgICAgICAgIFZhbHVlIHRvIGJlIGFzc2lnbmVkCisgKiBccGFyYW0gYXNzaWduICAgMTogcGVyZm9ybSB0aGUgYXNzaWdubWVudCwgMDoga2VlcCBYJ3Mgb3JpZ2luYWwgdmFsdWUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLAorICoKKyAqIFxub3RlICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIGlmKCBhc3NpZ24gKSBtYmVkdGxzX21waV9jb3B5KCBYLCBZICk7CisgKiAgICAgICAgICAgICAgICAgZXhjZXB0IHRoYXQgaXQgYXZvaWRzIGxlYWtpbmcgYW55IGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIKKyAqICAgICAgICAgICAgICAgICB0aGUgYXNzaWdubWVudCB3YXMgZG9uZSBvciBub3QgKHRoZSBhYm92ZSBjb2RlIG1heSBsZWFrCisgKiAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gdGhyb3VnaCBicmFuY2ggcHJlZGljdGlvbiBhbmQvb3IgbWVtb3J5IGFjY2VzcworICogICAgICAgICAgICAgICAgIHBhdHRlcm5zIGFuYWx5c2lzKS4KKyAqLworaW50IG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24oIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqWSwgdW5zaWduZWQgY2hhciBhc3NpZ24gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2FmZSBjb25kaXRpb25hbCBzd2FwIFggPC0+IFkgaWYgc3dhcCBpcyAxCisgKgorICogXHBhcmFtIFggICAgICAgIEZpcnN0IG1iZWR0bHNfbXBpIHZhbHVlCisgKiBccGFyYW0gWSAgICAgICAgU2Vjb25kIG1iZWR0bHNfbXBpIHZhbHVlCisgKiBccGFyYW0gYXNzaWduICAgMTogcGVyZm9ybSB0aGUgc3dhcCwgMDoga2VlcCBYIGFuZCBZJ3Mgb3JpZ2luYWwgdmFsdWVzCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCwKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBpZiggYXNzaWduICkgbWJlZHRsc19tcGlfc3dhcCggWCwgWSApOworICogICAgICAgICAgICAgICAgIGV4Y2VwdCB0aGF0IGl0IGF2b2lkcyBsZWFraW5nIGFueSBpbmZvcm1hdGlvbiBhYm91dCB3aGV0aGVyCisgKiAgICAgICAgICAgICAgICAgdGhlIGFzc2lnbm1lbnQgd2FzIGRvbmUgb3Igbm90ICh0aGUgYWJvdmUgY29kZSBtYXkgbGVhaworICogICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIHRocm91Z2ggYnJhbmNoIHByZWRpY3Rpb24gYW5kL29yIG1lbW9yeSBhY2Nlc3MKKyAqICAgICAgICAgICAgICAgICBwYXR0ZXJucyBhbmFseXNpcykuCisgKi8KK2ludCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcCggbWJlZHRsc19tcGkgKlgsIG1iZWR0bHNfbXBpICpZLCB1bnNpZ25lZCBjaGFyIGFzc2lnbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdmFsdWUgZnJvbSBpbnRlZ2VyCisgKgorICogXHBhcmFtIFggICAgICAgIE1QSSB0byBzZXQKKyAqIFxwYXJhbSB6ICAgICAgICBWYWx1ZSB0byB1c2UKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9sc2V0KCBtYmVkdGxzX21waSAqWCwgbWJlZHRsc19tcGlfc2ludCB6ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEdldCBhIHNwZWNpZmljIGJpdCBmcm9tIFgKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTVBJIHRvIHVzZQorICogXHBhcmFtIHBvcyAgICAgIFplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGJpdCBpbiBYCisgKgorICogXHJldHVybiAgICAgICAgIEVpdGhlciBhIDAgb3IgYSAxCisgKi8KK2ludCBtYmVkdGxzX21waV9nZXRfYml0KCBjb25zdCBtYmVkdGxzX21waSAqWCwgc2l6ZV90IHBvcyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgYSBiaXQgb2YgWCB0byBhIHNwZWNpZmljIHZhbHVlIG9mIDAgb3IgMQorICoKKyAqIFxub3RlICAgICAgICAgICBXaWxsIGdyb3cgWCBpZiBuZWNlc3NhcnkgdG8gc2V0IGEgYml0IHRvIDEgaW4gYSBub3QgeWV0CisgKiAgICAgICAgICAgICAgICAgZXhpc3RpbmcgbGltYi4gV2lsbCBub3QgZ3JvdyBpZiBiaXQgc2hvdWxkIGJlIHNldCB0byAwCisgKgorICogXHBhcmFtIFggICAgICAgIE1QSSB0byB1c2UKKyAqIFxwYXJhbSBwb3MgICAgICBaZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBiaXQgaW4gWAorICogXHBhcmFtIHZhbCAgICAgIFRoZSB2YWx1ZSB0byBzZXQgdGhlIGJpdCB0byAoMCBvciAxKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBIGlmIHZhbCBpcyBub3QgMCBvciAxCisgKi8KK2ludCBtYmVkdGxzX21waV9zZXRfYml0KCBtYmVkdGxzX21waSAqWCwgc2l6ZV90IHBvcywgdW5zaWduZWQgY2hhciB2YWwgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgemVyby1iaXRzIGJlZm9yZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKKyAqICAgICAgICAgICAgICAgICAnMScgYml0CisgKgorICogTm90ZTogVGh1cyBhbHNvIHRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCAnMScgYml0CisgKgorICogXHBhcmFtIFggICAgICAgIE1QSSB0byB1c2UKKyAqLworc2l6ZV90IG1iZWR0bHNfbXBpX2xzYiggY29uc3QgbWJlZHRsc19tcGkgKlggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBtb3N0CisgKiAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnQgJzEnIGJpdCcKKyAqCisgKiBOb3RlOiBUaHVzIGFsc28gdGhlIG9uZS1iYXNlZCBpbmRleCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCAnMScgYml0CisgKgorICogXHBhcmFtIFggICAgICAgIE1QSSB0byB1c2UKKyAqLworc2l6ZV90IG1iZWR0bHNfbXBpX2JpdGxlbiggY29uc3QgbWJlZHRsc19tcGkgKlggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmV0dXJuIHRoZSB0b3RhbCBzaXplIGluIGJ5dGVzCisgKgorICogXHBhcmFtIFggICAgICAgIE1QSSB0byB1c2UKKyAqLworc2l6ZV90IG1iZWR0bHNfbXBpX3NpemUoIGNvbnN0IG1iZWR0bHNfbXBpICpYICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEltcG9ydCBmcm9tIGFuIEFTQ0lJIHN0cmluZworICoKKyAqIFxwYXJhbSBYICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSByYWRpeCAgICBJbnB1dCBudW1lcmljIGJhc2UKKyAqIFxwYXJhbSBzICAgICAgICBOdWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgTUJFRFRMU19FUlJfTVBJX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggbWJlZHRsc19tcGkgKlgsIGludCByYWRpeCwgY29uc3QgY2hhciAqcyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBFeHBvcnQgaW50byBhbiBBU0NJSSBzdHJpbmcKKyAqCisgKiBccGFyYW0gWCAgICAgICAgU291cmNlIE1QSQorICogXHBhcmFtIHJhZGl4ICAgIE91dHB1dCBudW1lcmljIGJhc2UKKyAqIFxwYXJhbSBidWYgICAgICBCdWZmZXIgdG8gd3JpdGUgdGhlIHN0cmluZyB0bworICogXHBhcmFtIGJ1ZmxlbiAgIExlbmd0aCBvZiBidWYKKyAqIFxwYXJhbSBvbGVuICAgICBMZW5ndGggb2YgdGhlIHN0cmluZyB3cml0dGVuLCBpbmNsdWRpbmcgZmluYWwgTlVMIGJ5dGUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIE1CRURUTFNfRVJSX01QSV9YWFggZXJyb3IgY29kZS4KKyAqICAgICAgICAgICAgICAgICAqb2xlbiBpcyBhbHdheXMgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBhbW91bnQKKyAqICAgICAgICAgICAgICAgICBvZiBkYXRhIHRoYXQgaGFzIChvciB3b3VsZCBoYXZlKSBiZWVuIHdyaXR0ZW4uCisgKgorICogXG5vdGUgICAgICAgICAgIENhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGJ1ZmxlbiA9IDAgdG8gb2J0YWluIHRoZQorICogICAgICAgICAgICAgICAgIG1pbmltdW0gcmVxdWlyZWQgYnVmZmVyIHNpemUgaW4gKm9sZW4uCisgKi8KK2ludCBtYmVkdGxzX21waV93cml0ZV9zdHJpbmcoIGNvbnN0IG1iZWR0bHNfbXBpICpYLCBpbnQgcmFkaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIHNpemVfdCAqb2xlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmVhZCBYIGZyb20gYW4gb3BlbmVkIGZpbGUKKyAqCisgKiBccGFyYW0gWCAgICAgICAgRGVzdGluYXRpb24gTVBJCisgKiBccGFyYW0gcmFkaXggICAgSW5wdXQgbnVtZXJpYyBiYXNlCisgKiBccGFyYW0gZmluICAgICAgSW5wdXQgZmlsZSBoYW5kbGUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBNQkVEVExTX0VSUl9NUElfQlVGRkVSX1RPT19TTUFMTCBpZgorICogICAgICAgICAgICAgICAgIHRoZSBmaWxlIHJlYWQgYnVmZmVyIGlzIHRvbyBzbWFsbCBvciBhCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX21waV9yZWFkX2ZpbGUoIG1iZWR0bHNfbXBpICpYLCBpbnQgcmFkaXgsIEZJTEUgKmZpbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBXcml0ZSBYIGludG8gYW4gb3BlbmVkIGZpbGUsIG9yIHN0ZG91dCBpZiBmb3V0IGlzIE5VTEwKKyAqCisgKiBccGFyYW0gcCAgICAgICAgUHJlZml4LCBjYW4gYmUgTlVMTAorICogXHBhcmFtIFggICAgICAgIFNvdXJjZSBNUEkKKyAqIFxwYXJhbSByYWRpeCAgICBPdXRwdXQgbnVtZXJpYyBiYXNlCisgKiBccGFyYW0gZm91dCAgICAgT3V0cHV0IGZpbGUgaGFuZGxlIChjYW4gYmUgTlVMTCkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIE1CRURUTFNfRVJSX01QSV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBTZXQgZm91dCA9PSBOVUxMIHRvIHByaW50IFggb24gdGhlIGNvbnNvbGUuCisgKi8KK2ludCBtYmVkdGxzX21waV93cml0ZV9maWxlKCBjb25zdCBjaGFyICpwLCBjb25zdCBtYmVkdGxzX21waSAqWCwgaW50IHJhZGl4LCBGSUxFICpmb3V0ICk7CisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbXBvcnQgWCBmcm9tIHVuc2lnbmVkIGJpbmFyeSBkYXRhLCBiaWcgZW5kaWFuCisgKgorICogXHBhcmFtIFggICAgICAgIERlc3RpbmF0aW9uIE1QSQorICogXHBhcmFtIGJ1ZiAgICAgIElucHV0IGJ1ZmZlcgorICogXHBhcmFtIGJ1ZmxlbiAgIElucHV0IGJ1ZmZlciBzaXplCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoIG1iZWR0bHNfbXBpICpYLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRXhwb3J0IFggaW50byB1bnNpZ25lZCBiaW5hcnkgZGF0YSwgYmlnIGVuZGlhbi4KKyAqICAgICAgICAgICAgICAgICBBbHdheXMgZmlsbHMgdGhlIHdob2xlIGJ1ZmZlciwgd2hpY2ggd2lsbCBzdGFydCB3aXRoIHplcm9zCisgKiAgICAgICAgICAgICAgICAgaWYgdGhlIG51bWJlciBpcyBzbWFsbGVyLgorICoKKyAqIFxwYXJhbSBYICAgICAgICBTb3VyY2UgTVBJCisgKiBccGFyYW0gYnVmICAgICAgT3V0cHV0IGJ1ZmZlcgorICogXHBhcmFtIGJ1ZmxlbiAgIE91dHB1dCBidWZmZXIgc2l6ZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0JVRkZFUl9UT09fU01BTEwgaWYgYnVmIGlzbid0IGxhcmdlIGVub3VnaAorICovCitpbnQgbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCBjb25zdCBtYmVkdGxzX21waSAqWCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIExlZnQtc2hpZnQ6IFggPDw9IGNvdW50CisgKgorICogXHBhcmFtIFggICAgICAgIE1QSSB0byBzaGlmdAorICogXHBhcmFtIGNvdW50ICAgIEFtb3VudCB0byBzaGlmdAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX3NoaWZ0X2woIG1iZWR0bHNfbXBpICpYLCBzaXplX3QgY291bnQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmlnaHQtc2hpZnQ6IFggPj49IGNvdW50CisgKgorICogXHBhcmFtIFggICAgICAgIE1QSSB0byBzaGlmdAorICogXHBhcmFtIGNvdW50ICAgIEFtb3VudCB0byBzaGlmdAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX3NoaWZ0X3IoIG1iZWR0bHNfbXBpICpYLCBzaXplX3QgY291bnQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ29tcGFyZSB1bnNpZ25lZCB2YWx1ZXMKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTGVmdC1oYW5kIE1QSQorICogXHBhcmFtIFkgICAgICAgIFJpZ2h0LWhhbmQgTVBJCisgKgorICogXHJldHVybiAgICAgICAgIDEgaWYgfFh8IGlzIGdyZWF0ZXIgdGhhbiB8WXwsCisgKiAgICAgICAgICAgICAgICAtMSBpZiB8WHwgaXMgbGVzc2VyICB0aGFuIHxZfCBvcgorICogICAgICAgICAgICAgICAgIDAgaWYgfFh8IGlzIGVxdWFsIHRvIHxZfAorICovCitpbnQgbWJlZHRsc19tcGlfY21wX2FicyggY29uc3QgbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpZICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENvbXBhcmUgc2lnbmVkIHZhbHVlcworICoKKyAqIFxwYXJhbSBYICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gWSAgICAgICAgUmlnaHQtaGFuZCBNUEkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMSBpZiBYIGlzIGdyZWF0ZXIgdGhhbiBZLAorICogICAgICAgICAgICAgICAgLTEgaWYgWCBpcyBsZXNzZXIgIHRoYW4gWSBvcgorICogICAgICAgICAgICAgICAgIDAgaWYgWCBpcyBlcXVhbCB0byBZCisgKi8KK2ludCBtYmVkdGxzX21waV9jbXBfbXBpKCBjb25zdCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKlkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ29tcGFyZSBzaWduZWQgdmFsdWVzCisgKgorICogXHBhcmFtIFggICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSB6ICAgICAgICBUaGUgaW50ZWdlciB2YWx1ZSB0byBjb21wYXJlIHRvCisgKgorICogXHJldHVybiAgICAgICAgIDEgaWYgWCBpcyBncmVhdGVyIHRoYW4geiwKKyAqICAgICAgICAgICAgICAgIC0xIGlmIFggaXMgbGVzc2VyICB0aGFuIHogb3IKKyAqICAgICAgICAgICAgICAgICAwIGlmIFggaXMgZXF1YWwgdG8gegorICovCitpbnQgbWJlZHRsc19tcGlfY21wX2ludCggY29uc3QgbWJlZHRsc19tcGkgKlgsIG1iZWR0bHNfbXBpX3NpbnQgeiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBVbnNpZ25lZCBhZGRpdGlvbjogWCA9IHxBfCArIHxCfAorICoKKyAqIFxwYXJhbSBYICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSBBICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gQiAgICAgICAgUmlnaHQtaGFuZCBNUEkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9hZGRfYWJzKCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpCICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFVuc2lnbmVkIHN1YnRyYWN0aW9uOiBYID0gfEF8IC0gfEJ8CisgKgorICogXHBhcmFtIFggICAgICAgIERlc3RpbmF0aW9uIE1QSQorICogXHBhcmFtIEEgICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSBCICAgICAgICBSaWdodC1oYW5kIE1QSQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFIGlmIEIgaXMgZ3JlYXRlciB0aGFuIEEKKyAqLworaW50IG1iZWR0bHNfbXBpX3N1Yl9hYnMoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2lnbmVkIGFkZGl0aW9uOiBYID0gQSArIEIKKyAqCisgKiBccGFyYW0gWCAgICAgICAgRGVzdGluYXRpb24gTVBJCisgKiBccGFyYW0gQSAgICAgICAgTGVmdC1oYW5kIE1QSQorICogXHBhcmFtIEIgICAgICAgIFJpZ2h0LWhhbmQgTVBJCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tcGlfYWRkX21waSggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqQiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTaWduZWQgc3VidHJhY3Rpb246IFggPSBBIC0gQgorICoKKyAqIFxwYXJhbSBYICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSBBICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gQiAgICAgICAgUmlnaHQtaGFuZCBNUEkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9zdWJfbXBpKCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpCICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNpZ25lZCBhZGRpdGlvbjogWCA9IEEgKyBiCisgKgorICogXHBhcmFtIFggICAgICAgIERlc3RpbmF0aW9uIE1QSQorICogXHBhcmFtIEEgICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSBiICAgICAgICBUaGUgaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9hZGRfaW50KCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIG1iZWR0bHNfbXBpX3NpbnQgYiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTaWduZWQgc3VidHJhY3Rpb246IFggPSBBIC0gYgorICoKKyAqIFxwYXJhbSBYICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSBBICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gYiAgICAgICAgVGhlIGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9zdWJfaW50KCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIG1iZWR0bHNfbXBpX3NpbnQgYiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBCYXNlbGluZSBtdWx0aXBsaWNhdGlvbjogWCA9IEEgKiBCCisgKgorICogXHBhcmFtIFggICAgICAgIERlc3RpbmF0aW9uIE1QSQorICogXHBhcmFtIEEgICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSBCICAgICAgICBSaWdodC1oYW5kIE1QSQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX211bF9tcGkoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQmFzZWxpbmUgbXVsdGlwbGljYXRpb246IFggPSBBICogYgorICoKKyAqIFxwYXJhbSBYICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSBBICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gYiAgICAgICAgVGhlIHVuc2lnbmVkIGludGVnZXIgdmFsdWUgdG8gbXVsdGlwbHkgd2l0aAorICoKKyAqIFxub3RlICAgICAgICAgICBiIGlzIHVuc2lnbmVkCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tcGlfbXVsX2ludCggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBtYmVkdGxzX21waV91aW50IGIgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRGl2aXNpb24gYnkgbWJlZHRsc19tcGk6IEEgPSBRICogQiArIFIKKyAqCisgKiBccGFyYW0gUSAgICAgICAgRGVzdGluYXRpb24gTVBJIGZvciB0aGUgcXVvdGllbnQKKyAqIFxwYXJhbSBSICAgICAgICBEZXN0aW5hdGlvbiBNUEkgZm9yIHRoZSByZXN0IHZhbHVlCisgKiBccGFyYW0gQSAgICAgICAgTGVmdC1oYW5kIE1QSQorICogXHBhcmFtIEIgICAgICAgIFJpZ2h0LWhhbmQgTVBJCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfRElWSVNJT05fQllfWkVSTyBpZiBCID09IDAKKyAqCisgKiBcbm90ZSAgICAgICAgICAgRWl0aGVyIFEgb3IgUiBjYW4gYmUgTlVMTC4KKyAqLworaW50IG1iZWR0bHNfbXBpX2Rpdl9tcGkoIG1iZWR0bHNfbXBpICpRLCBtYmVkdGxzX21waSAqUiwgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpCICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIERpdmlzaW9uIGJ5IGludDogQSA9IFEgKiBiICsgUgorICoKKyAqIFxwYXJhbSBRICAgICAgICBEZXN0aW5hdGlvbiBNUEkgZm9yIHRoZSBxdW90aWVudAorICogXHBhcmFtIFIgICAgICAgIERlc3RpbmF0aW9uIE1QSSBmb3IgdGhlIHJlc3QgdmFsdWUKKyAqIFxwYXJhbSBBICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gYiAgICAgICAgSW50ZWdlciB0byBkaXZpZGUgYnkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9ESVZJU0lPTl9CWV9aRVJPIGlmIGIgPT0gMAorICoKKyAqIFxub3RlICAgICAgICAgICBFaXRoZXIgUSBvciBSIGNhbiBiZSBOVUxMLgorICovCitpbnQgbWJlZHRsc19tcGlfZGl2X2ludCggbWJlZHRsc19tcGkgKlEsIG1iZWR0bHNfbXBpICpSLCBjb25zdCBtYmVkdGxzX21waSAqQSwgbWJlZHRsc19tcGlfc2ludCBiICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1vZHVsbzogUiA9IEEgbW9kIEIKKyAqCisgKiBccGFyYW0gUiAgICAgICAgRGVzdGluYXRpb24gTVBJIGZvciB0aGUgcmVzdCB2YWx1ZQorICogXHBhcmFtIEEgICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSBCICAgICAgICBSaWdodC1oYW5kIE1QSQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8gaWYgQiA9PSAwLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRSBpZiBCIDwgMAorICovCitpbnQgbWJlZHRsc19tcGlfbW9kX21waSggbWJlZHRsc19tcGkgKlIsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqQiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBNb2R1bG86IHIgPSBBIG1vZCBiCisgKgorICogXHBhcmFtIHIgICAgICAgIERlc3RpbmF0aW9uIG1iZWR0bHNfbXBpX3VpbnQKKyAqIFxwYXJhbSBBICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gYiAgICAgICAgSW50ZWdlciB0byBkaXZpZGUgYnkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9ESVZJU0lPTl9CWV9aRVJPIGlmIGIgPT0gMCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfTkVHQVRJVkVfVkFMVUUgaWYgYiA8IDAKKyAqLworaW50IG1iZWR0bHNfbXBpX21vZF9pbnQoIG1iZWR0bHNfbXBpX3VpbnQgKnIsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBtYmVkdGxzX21waV9zaW50IGIgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2xpZGluZy13aW5kb3cgZXhwb25lbnRpYXRpb246IFggPSBBXkUgbW9kIE4KKyAqCisgKiBccGFyYW0gWCAgICAgICAgRGVzdGluYXRpb24gTVBJCisgKiBccGFyYW0gQSAgICAgICAgTGVmdC1oYW5kIE1QSQorICogXHBhcmFtIEUgICAgICAgIEV4cG9uZW50IE1QSQorICogXHBhcmFtIE4gICAgICAgIE1vZHVsYXIgTVBJCisgKiBccGFyYW0gX1JSICAgICAgU3BlZWQtdXAgTVBJIHVzZWQgZm9yIHJlY2FsY3VsYXRpb25zCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgaWYgTiBpcyBuZWdhdGl2ZSBvciBldmVuIG9yCisgKiAgICAgICAgICAgICAgICAgaWYgRSBpcyBuZWdhdGl2ZQorICoKKyAqIFxub3RlICAgICAgICAgICBfUlIgaXMgdXNlZCB0byBhdm9pZCByZS1jb21wdXRpbmcgUipSIG1vZCBOIGFjcm9zcworICogICAgICAgICAgICAgICAgIG11bHRpcGxlIGNhbGxzLCB3aGljaCBzcGVlZHMgdXAgdGhpbmdzIGEgYml0LiBJdCBjYW4KKyAqICAgICAgICAgICAgICAgICBiZSBzZXQgdG8gTlVMTCBpZiB0aGUgZXh0cmEgcGVyZm9ybWFuY2UgaXMgdW5uZWVkZWQuCisgKi8KK2ludCBtYmVkdGxzX21waV9leHBfbW9kKCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpFLCBjb25zdCBtYmVkdGxzX21waSAqTiwgbWJlZHRsc19tcGkgKl9SUiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBGaWxsIGFuIE1QSSBYIHdpdGggc2l6ZSBieXRlcyBvZiByYW5kb20KKyAqCisgKiBccGFyYW0gWCAgICAgICAgRGVzdGluYXRpb24gTVBJCisgKiBccGFyYW0gc2l6ZSAgICAgU2l6ZSBpbiBieXRlcworICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9maWxsX3JhbmRvbSggbWJlZHRsc19tcGkgKlgsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgR3JlYXRlc3QgY29tbW9uIGRpdmlzb3I6IEcgPSBnY2QoQSwgQikKKyAqCisgKiBccGFyYW0gRyAgICAgICAgRGVzdGluYXRpb24gTVBJCisgKiBccGFyYW0gQSAgICAgICAgTGVmdC1oYW5kIE1QSQorICogXHBhcmFtIEIgICAgICAgIFJpZ2h0LWhhbmQgTVBJCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tcGlfZ2NkKCBtYmVkdGxzX21waSAqRywgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpCICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1vZHVsYXIgaW52ZXJzZTogWCA9IEFeLTEgbW9kIE4KKyAqCisgKiBccGFyYW0gWCAgICAgICAgRGVzdGluYXRpb24gTVBJCisgKiBccGFyYW0gQSAgICAgICAgTGVmdC1oYW5kIE1QSQorICogXHBhcmFtIE4gICAgICAgIFJpZ2h0LWhhbmQgTVBJCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgaWYgTiBpcyBuZWdhdGl2ZSBvciBuaWwKKyAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUgaWYgQSBoYXMgbm8gaW52ZXJzZSBtb2QgTgorICovCitpbnQgbWJlZHRsc19tcGlfaW52X21vZCggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqTiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBNaWxsZXItUmFiaW4gcHJpbWFsaXR5IHRlc3QKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTVBJIHRvIGNoZWNrCisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwgKHByb2JhYmx5IHByaW1lKSwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUgaWYgWCBpcyBub3QgcHJpbWUKKyAqLworaW50IG1iZWR0bHNfbXBpX2lzX3ByaW1lKCBjb25zdCBtYmVkdGxzX21waSAqWCwKKyAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFByaW1lIG51bWJlciBnZW5lcmF0aW9uCisgKgorICogXHBhcmFtIFggICAgICAgIERlc3RpbmF0aW9uIE1QSQorICogXHBhcmFtIG5iaXRzICAgIFJlcXVpcmVkIHNpemUgb2YgWCBpbiBiaXRzCisgKiAgICAgICAgICAgICAgICAgKCAzIDw9IG5iaXRzIDw9IE1CRURUTFNfTVBJX01BWF9CSVRTICkKKyAqIFxwYXJhbSBkaF9mbGFnICBJZiAxLCB0aGVuIChYLTEpLzIgd2lsbCBiZSBwcmltZSB0b28KKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCAocHJvYmFibHkgcHJpbWUpLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQSBpZiBuYml0cyBpcyA8IDMKKyAqLworaW50IG1iZWR0bHNfbXBpX2dlbl9wcmltZSggbWJlZHRsc19tcGkgKlgsIHNpemVfdCBuYml0cywgaW50IGRoX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBiaWdudW0uaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9ibG93ZmlzaC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9ibG93ZmlzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NjI2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Jsb3dmaXNoLmgKQEAgLTAsMCArMSwyMDMgQEAKKy8qKgorICogXGZpbGUgYmxvd2Zpc2guaAorICoKKyAqIFxicmllZiBCbG93ZmlzaCBibG9jayBjaXBoZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19CTE9XRklTSF9ICisjZGVmaW5lIE1CRURUTFNfQkxPV0ZJU0hfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZGVmaW5lIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCAgICAgMQorI2RlZmluZSBNQkVEVExTX0JMT1dGSVNIX0RFQ1JZUFQgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19CTE9XRklTSF9NQVhfS0VZX0JJVFMgICAgIDQ0OAorI2RlZmluZSBNQkVEVExTX0JMT1dGSVNIX01JTl9LRVlfQklUUyAgICAgMzIKKyNkZWZpbmUgTUJFRFRMU19CTE9XRklTSF9ST1VORFMgICAgICAxNiAgICAgICAgIC8qKjwgUm91bmRzIHRvIHVzZS4gV2hlbiBpbmNyZWFzaW5nIHRoaXMgdmFsdWUsIG1ha2Ugc3VyZSB0byBleHRlbmQgdGhlIGluaXRpYWxpc2F0aW9uIHZlY3RvcnMgKi8KKyNkZWZpbmUgTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkUgICA4ICAgICAgICAgIC8qIEJsb3dmaXNoIHVzZXMgNjQgYml0IGJsb2NrcyAqLworCisjZGVmaW5lIE1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfS0VZX0xFTkdUSCAgICAgICAgICAgICAgICAtMHgwMDE2ICAvKio8IEludmFsaWQga2V5IGxlbmd0aC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9JTlBVVF9MRU5HVEggICAgICAgICAgICAgIC0weDAwMTggIC8qKjwgSW52YWxpZCBkYXRhIGlucHV0IGxlbmd0aC4gKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQkxPV0ZJU0hfQUxUKQorLy8gUmVndWxhciBpbXBsZW1lbnRhdGlvbgorLy8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBCbG93ZmlzaCBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQzMl90IFBbTUJFRFRMU19CTE9XRklTSF9ST1VORFMgKyAyXTsgICAgLyohPCAgQmxvd2Zpc2ggcm91bmQga2V5cyAgICAqLworICAgIHVpbnQzMl90IFNbNF1bMjU2XTsgICAgICAgICAgICAgICAgIC8qITwgIGtleSBkZXBlbmRlbnQgUy1ib3hlcyAgKi8KK30KK21iZWR0bHNfYmxvd2Zpc2hfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBCbG93ZmlzaCBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIEJsb3dmaXNoIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX2Jsb3dmaXNoX2luaXQoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsZWFyIEJsb3dmaXNoIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQmxvd2Zpc2ggY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBCbG93ZmlzaCBrZXkgc2NoZWR1bGUKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQmxvd2Zpc2ggY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgIGVuY3J5cHRpb24ga2V5CisgKiBccGFyYW0ga2V5Yml0cyAgbXVzdCBiZSBiZXR3ZWVuIDMyIGFuZCA0NDggYml0cworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfS0VZX0xFTkdUSAorICovCitpbnQgbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5Yml0cyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBCbG93ZmlzaC1FQ0IgYmxvY2sgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgIEJsb3dmaXNoIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX0JMT1dGSVNIX0VOQ1JZUFQgb3IgTUJFRFRMU19CTE9XRklTSF9ERUNSWVBUCisgKiBccGFyYW0gaW5wdXQgICAgOC1ieXRlIGlucHV0IGJsb2NrCisgKiBccGFyYW0gb3V0cHV0ICAgOC1ieXRlIG91dHB1dCBibG9jaworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFtNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFtNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRV0gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisvKioKKyAqIFxicmllZiAgICAgICAgICBCbG93ZmlzaC1DQkMgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICogICAgICAgICAgICAgICAgIExlbmd0aCBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYmxvY2sKKyAqICAgICAgICAgICAgICAgICBzaXplICg4IGJ5dGVzKQorICoKKyAqIFxub3RlICAgICAgICAgICBVcG9uIGV4aXQsIHRoZSBjb250ZW50IG9mIHRoZSBJViBpcyB1cGRhdGVkIHNvIHRoYXQgeW91IGNhbgorICogICAgICAgICAgICAgICAgIGNhbGwgdGhlIGZ1bmN0aW9uIHNhbWUgZnVuY3Rpb24gYWdhaW4gb24gdGhlIGZvbGxvd2luZworICogICAgICAgICAgICAgICAgIGJsb2NrKHMpIG9mIGRhdGEgYW5kIGdldCB0aGUgc2FtZSByZXN1bHQgYXMgaWYgaXQgd2FzCisgKiAgICAgICAgICAgICAgICAgZW5jcnlwdGVkIGluIG9uZSBjYWxsLiBUaGlzIGFsbG93cyBhICJzdHJlYW1pbmciIHVzYWdlLgorICogICAgICAgICAgICAgICAgIElmIG9uIHRoZSBvdGhlciBoYW5kIHlvdSBuZWVkIHRvIHJldGFpbiB0aGUgY29udGVudHMgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgSVYsIHlvdSBzaG91bGQgZWl0aGVyIHNhdmUgaXQgbWFudWFsbHkgb3IgdXNlIHRoZSBjaXBoZXIKKyAqICAgICAgICAgICAgICAgICBtb2R1bGUgaW5zdGVhZC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQmxvd2Zpc2ggY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCBvciBNQkVEVExTX0JMT1dGSVNIX0RFQ1JZUFQKKyAqIFxwYXJhbSBsZW5ndGggICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpdiAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKHVwZGF0ZWQgYWZ0ZXIgdXNlKQorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9CTE9XRklTSF9JTlZBTElEX0lOUFVUX0xFTkdUSAorICovCitpbnQgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jYmMoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdltNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQmxvd2Zpc2ggQ0ZCIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24uCisgKgorICogXG5vdGUgICAgICAgICAgIFVwb24gZXhpdCwgdGhlIGNvbnRlbnQgb2YgdGhlIElWIGlzIHVwZGF0ZWQgc28gdGhhdCB5b3UgY2FuCisgKiAgICAgICAgICAgICAgICAgY2FsbCB0aGUgZnVuY3Rpb24gc2FtZSBmdW5jdGlvbiBhZ2FpbiBvbiB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgICAgICAgICAgYmxvY2socykgb2YgZGF0YSBhbmQgZ2V0IHRoZSBzYW1lIHJlc3VsdCBhcyBpZiBpdCB3YXMKKyAqICAgICAgICAgICAgICAgICBlbmNyeXB0ZWQgaW4gb25lIGNhbGwuIFRoaXMgYWxsb3dzIGEgInN0cmVhbWluZyIgdXNhZ2UuCisgKiAgICAgICAgICAgICAgICAgSWYgb24gdGhlIG90aGVyIGhhbmQgeW91IG5lZWQgdG8gcmV0YWluIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICBJViwgeW91IHNob3VsZCBlaXRoZXIgc2F2ZSBpdCBtYW51YWxseSBvciB1c2UgdGhlIGNpcGhlcgorICogICAgICAgICAgICAgICAgIG1vZHVsZSBpbnN0ZWFkLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBCbG93ZmlzaCBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19CTE9XRklTSF9FTkNSWVBUIG9yIE1CRURUTFNfQkxPV0ZJU0hfREVDUllQVAorICogXHBhcmFtIGxlbmd0aCAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGl2X29mZiAgIG9mZnNldCBpbiBJViAodXBkYXRlZCBhZnRlciB1c2UpCisgKiBccGFyYW0gaXYgICAgICAgaW5pdGlhbGl6YXRpb24gdmVjdG9yICh1cGRhdGVkIGFmdGVyIHVzZSkKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIGJ1ZmZlciBob2xkaW5nIHRoZSBvdXRwdXQgZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2ZiNjQoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppdl9vZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisjZW5kaWYgLypNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgQmxvd2Zpc2gtQ1RSIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqCisgKiBXYXJuaW5nOiBZb3UgaGF2ZSB0byBrZWVwIHRoZSBtYXhpbXVtIHVzZSBvZiB5b3VyIGNvdW50ZXIgaW4gbWluZCEKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBCbG93ZmlzaCBjb250ZXh0CisgKiBccGFyYW0gbGVuZ3RoICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhCisgKiBccGFyYW0gbmNfb2ZmICAgICAgICBUaGUgb2Zmc2V0IGluIHRoZSBjdXJyZW50IHN0cmVhbV9ibG9jayAoZm9yIHJlc3VtaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICB3aXRoaW4gY3VycmVudCBjaXBoZXIgc3RyZWFtKS4gVGhlIG9mZnNldCBwb2ludGVyIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgMCBhdCB0aGUgc3RhcnQgb2YgYSBzdHJlYW0uCisgKiBccGFyYW0gbm9uY2VfY291bnRlciBUaGUgNjQtYml0IG5vbmNlIGFuZCBjb3VudGVyLgorICogXHBhcmFtIHN0cmVhbV9ibG9jayAgVGhlIHNhdmVkIHN0cmVhbS1ibG9jayBmb3IgcmVzdW1pbmcuIElzIG92ZXJ3cml0dGVuCisgKiAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgZnVuY3Rpb24uCisgKiBccGFyYW0gaW5wdXQgICAgICAgICBUaGUgaW5wdXQgZGF0YSBzdHJlYW0KKyAqIFxwYXJhbSBvdXRwdXQgICAgICAgIFRoZSBvdXRwdXQgZGF0YSBzdHJlYW0KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2N0ciggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuY19vZmYsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5vbmNlX2NvdW50ZXJbTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBzdHJlYW1fYmxvY2tbTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZWxzZSAgLyogTUJFRFRMU19CTE9XRklTSF9BTFQgKi8KKyNpbmNsdWRlICJibG93ZmlzaF9hbHQuaCIKKyNlbmRpZiAvKiBNQkVEVExTX0JMT1dGSVNIX0FMVCAqLworCisjZW5kaWYgLyogYmxvd2Zpc2guaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9ibl9tdWwuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYm5fbXVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FjM2YxNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYm5fbXVsLmgKQEAgLTAsMCArMSw4ODUgQEAKKy8qKgorICogXGZpbGUgYm5fbXVsLmgKKyAqCisgKiBcYnJpZWYgIE11bHRpLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgICAgIE11bHRpcGx5IHNvdXJjZSB2ZWN0b3IgW3NdIHdpdGggYiwgYWRkIHJlc3VsdAorICogICAgICAgdG8gZGVzdGluYXRpb24gdmVjdG9yIFtkXSBhbmQgc2V0IGNhcnJ5IGMuCisgKgorICogICAgICBDdXJyZW50bHkgc3VwcG9ydHM6CisgKgorICogICAgICAgICAuIElBLTMyICgzODYrKSAgICAgICAgIC4gQU1ENjQgLyBFTTY0VAorICogICAgICAgICAuIElBLTMyIChTU0UyKSAgICAgICAgIC4gTW90b3JvbGEgNjgwMDAKKyAqICAgICAgICAgLiBQb3dlclBDLCAzMi1iaXQgICAgICAuIE1pY3JvQmxhemUKKyAqICAgICAgICAgLiBQb3dlclBDLCA2NC1iaXQgICAgICAuIFRyaUNvcmUKKyAqICAgICAgICAgLiBTUEFSQyB2OCAgICAgICAgICAgICAuIEFSTSB2MysKKyAqICAgICAgICAgLiBBbHBoYSAgICAgICAgICAgICAgICAuIE1JUFMzMgorICogICAgICAgICAuIEMsIGxvbmdsb25nICAgICAgICAgIC4gQywgZ2VuZXJpYworICovCisjaWZuZGVmIE1CRURUTFNfQk5fTVVMX0gKKyNkZWZpbmUgTUJFRFRMU19CTl9NVUxfSAorCisjaW5jbHVkZSAiYmlnbnVtLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9BU00pCisKKyNpZm5kZWYgYXNtCisjZGVmaW5lIGFzbSBfX2FzbQorI2VuZGlmCisKKy8qIGFybWNjNSAtLWdudSBkZWZpbmVzIF9fR05VQ19fIGJ1dCBkb2Vzbid0IHN1cHBvcnQgR05VJ3MgZXh0ZW5kZWQgYXNtICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgXAorICAgICggIWRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSB8fCBfX0FSTUNDX1ZFUlNJT04gPj0gNjAwMDAwMCApCisjaWYgZGVmaW5lZChfX2kzODZfXykKKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIm1vdmwgICAlJWVieCwgJTAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92bCAgICU1LCAlJWVzaSAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJTYsICUlZWRpICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlNywgJSVlY3ggICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92bCAgICU4LCAlJWVieCAgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsb2RzbCAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bGwgICAlJWVieCAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkbCAgICUlZWN4LCAgICUlZWF4ICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGNsICAgJDAsICAgICAgJSVlZHggICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGwgICAoJSVlZGkpLCAlJWVheCAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRjbCAgICQwLCAgICAgICUlZWR4ICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJSVlZHgsICAgJSVlY3ggICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0b3NsICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9TU0UyKQorCisjZGVmaW5lIE1VTEFERENfSFVJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJtb3ZkICAgICAlJWVjeCwgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAlJWVieCwgICAgICUlbW0wICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAoJSVlZGkpLCAgICUlbW0zICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tMywgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAoJSVlc2kpLCAgICUlbW0yICAgICAgXG5cdCIgICBcCisgICAgICAgICJwbXVsdWRxICAlJW1tMCwgICAgICUlbW0yICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICA0KCUlZXNpKSwgICUlbW00ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwbXVsdWRxICAlJW1tMCwgICAgICUlbW00ICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICA4KCUlZXNpKSwgICUlbW02ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwbXVsdWRxICAlJW1tMCwgICAgICUlbW02ICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAxMiglJWVzaSksICUlbW03ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwbXVsdWRxICAlJW1tMCwgICAgICUlbW03ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tMiwgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICA0KCUlZWRpKSwgICUlbW0zICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tNCwgICAgICUlbW0zICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICA4KCUlZWRpKSwgICUlbW01ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tNiwgICAgICUlbW01ICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAxMiglJWVkaSksICUlbW00ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tNCwgICAgICUlbW03ICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAlJW1tMSwgICAgICglJWVkaSkgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAxNiglJWVzaSksICUlbW0yICAgICAgXG5cdCIgICBcCisgICAgICAgICJwbXVsdWRxICAlJW1tMCwgICAgICUlbW0yICAgICAgXG5cdCIgICBcCisgICAgICAgICJwc3JscSAgICAkMzIsICAgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAyMCglJWVzaSksICUlbW00ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwbXVsdWRxICAlJW1tMCwgICAgICUlbW00ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tMywgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAyNCglJWVzaSksICUlbW02ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwbXVsdWRxICAlJW1tMCwgICAgICUlbW02ICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAlJW1tMSwgICAgIDQoJSVlZGkpICAgXG5cdCIgICBcCisgICAgICAgICJwc3JscSAgICAkMzIsICAgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAyOCglJWVzaSksICUlbW0zICAgICAgXG5cdCIgICBcCisgICAgICAgICJwbXVsdWRxICAlJW1tMCwgICAgICUlbW0zICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tNSwgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAxNiglJWVkaSksICUlbW01ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tNSwgICAgICUlbW0yICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAlJW1tMSwgICAgIDgoJSVlZGkpICAgXG5cdCIgICBcCisgICAgICAgICJwc3JscSAgICAkMzIsICAgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tNywgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAyMCglJWVkaSksICUlbW01ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tNSwgICAgICUlbW00ICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAlJW1tMSwgICAgIDEyKCUlZWRpKSAgXG5cdCIgICBcCisgICAgICAgICJwc3JscSAgICAkMzIsICAgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tMiwgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAyNCglJWVkaSksICUlbW01ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tNSwgICAgICUlbW02ICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAlJW1tMSwgICAgIDE2KCUlZWRpKSAgXG5cdCIgICBcCisgICAgICAgICJwc3JscSAgICAkMzIsICAgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tNCwgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAyOCglJWVkaSksICUlbW01ICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tNSwgICAgICUlbW0zICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAlJW1tMSwgICAgIDIwKCUlZWRpKSAgXG5cdCIgICBcCisgICAgICAgICJwc3JscSAgICAkMzIsICAgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tNiwgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAlJW1tMSwgICAgIDI0KCUlZWRpKSAgXG5cdCIgICBcCisgICAgICAgICJwc3JscSAgICAkMzIsICAgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJwYWRkcSAgICAlJW1tMywgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAlJW1tMSwgICAgIDI4KCUlZWRpKSAgXG5cdCIgICBcCisgICAgICAgICJhZGRsICAgICAkMzIsICAgICAgICUlZWRpICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRsICAgICAkMzIsICAgICAgICUlZXNpICAgICAgXG5cdCIgICBcCisgICAgICAgICJwc3JscSAgICAkMzIsICAgICAgICUlbW0xICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZkICAgICAlJW1tMSwgICAgICUlZWN4ICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImVtbXMgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJTQsICUlZWJ4ICAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92bCAgICUlZWN4LCAlMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlJWVkaSwgJTIgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJSVlc2ksICUzICAgICAgIFxuXHQiICAgXAorICAgICAgICA6ICI9bSIgKHQpLCAiPW0iIChjKSwgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICBcCisgICAgICAgIDogIm0iICh0KSwgIm0iIChzKSwgIm0iIChkKSwgIm0iIChjKSwgIm0iIChiKSAgIFwKKyAgICAgICAgOiAiZWF4IiwgImVjeCIsICJlZHgiLCAiZXNpIiwgImVkaSIgICAgICAgICAgICAgXAorICAgICk7CisKKyNlbHNlCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJtb3ZsICAgJTQsICUlZWJ4ICAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92bCAgICUlZWN4LCAlMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlJWVkaSwgJTIgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJSVlc2ksICUzICAgICAgIFxuXHQiICAgXAorICAgICAgICA6ICI9bSIgKHQpLCAiPW0iIChjKSwgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICBcCisgICAgICAgIDogIm0iICh0KSwgIm0iIChzKSwgIm0iIChkKSwgIm0iIChjKSwgIm0iIChiKSAgIFwKKyAgICAgICAgOiAiZWF4IiwgImVjeCIsICJlZHgiLCAiZXNpIiwgImVkaSIgICAgICAgICAgICAgXAorICAgICk7CisjZW5kaWYgLyogU1NFMiAqLworI2VuZGlmIC8qIGkzODYgKi8KKworI2lmIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkIChfX3g4Nl82NF9fKQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAieG9ycSAgICUlcjgsICUlcjggICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJtb3ZxICAgKCUlcnNpKSwgJSVyYXggICAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bHEgICAlJXJieCAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkcSAgICQ4LCAgICAgICUlcnNpICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRxICAgJSVyY3gsICAgJSVyYXggICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdnEgICAlJXI4LCAgICAlJXJjeCAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRjcSAgICQwLCAgICAgICUlcmR4ICAgICAgXG5cdCIgICBcCisgICAgICAgICJub3AgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHEgICAlJXJheCwgICAoJSVyZGkpICAgIFxuXHQiICAgXAorICAgICAgICAiYWRjcSAgICUlcmR4LCAgICUlcmN4ICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRxICAgJDgsICAgICAgJSVyZGkgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAiK2MiIChjKSwgIitEIiAoZCksICIrUyIgKHMpICAgICAgXAorICAgICAgICA6ICJiIiAoYikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIDogInJheCIsICJyZHgiLCAicjgiICAgICAgICAgICAgICAgIFwKKyAgICApOworCisjZW5kaWYgLyogQU1ENjQgKi8KKworI2lmIGRlZmluZWQoX19tYzY4MDIwX18pIHx8IGRlZmluZWQoX19tY3B1MzJfXykKKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJtb3ZsICAgJTMsICUlYTIgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92bCAgICU0LCAlJWEzICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlNSwgJSVkMyAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJTYsICUlZDIgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92ZXEgICMwLCAlJWQwICAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfQ09SRSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibW92ZWwgICUlYTJAKywgJSVkMSAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bHVsICAlJWQyLCAlJWQ0OiUlZDEgXG5cdCIgICBcCisgICAgICAgICJhZGRsICAgJSVkMywgJSVkMSAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDAsICUlZDQgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmVxICAjMCwgICAlJWQzICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRsICAgJSVkMSwgJSVhM0ArICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDQsICUlZDMgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfU1RPUCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibW92bCAgICUlZDMsICUwICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlJWEzLCAlMSAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJSVhMiwgJTIgICAgICAgIFxuXHQiICAgXAorICAgICAgICA6ICI9bSIgKGMpLCAiPW0iIChkKSwgIj1tIiAocykgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAibSIgKHMpLCAibSIgKGQpLCAibSIgKGMpLCAibSIgKGIpICAgICAgICBcCisgICAgICAgIDogImQwIiwgImQxIiwgImQyIiwgImQzIiwgImQ0IiwgImEyIiwgImEzIiAgXAorICAgICk7CisKKyNkZWZpbmUgTVVMQUREQ19IVUlUICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibW92ZWwgICUlYTJAKywgICUlZDEgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWx1bCAgJSVkMiwgICAgJSVkNDolJWQxICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQzLCAgICAlJWQxICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDAsICAgICUlZDQgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRsICAgJSVkMSwgICAgJSVhM0ArICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmVsICAlJWEyQCssICAlJWQxICAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVsdWwgICUlZDIsICAgICUlZDM6JSVkMSAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkNCwgICAgJSVkMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQwLCAgICAlJWQzICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkbCAgICUlZDEsICAgICUlYTNAKyAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZlbCAgJSVhMkArLCAgJSVkMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bHVsICAlJWQyLCAgICAlJWQ0OiUlZDEgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDMsICAgICUlZDEgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkMCwgICAgJSVkNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGwgICAlJWQxLCAgICAlJWEzQCsgICAgIFxuXHQiICAgXAorICAgICAgICAibW92ZWwgICUlYTJAKywgICUlZDEgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWx1bCAgJSVkMiwgICAgJSVkMzolJWQxICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQ0LCAgICAlJWQxICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDAsICAgICUlZDMgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRsICAgJSVkMSwgICAgJSVhM0ArICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmVsICAlJWEyQCssICAlJWQxICAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVsdWwgICUlZDIsICAgICUlZDQ6JSVkMSAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkMywgICAgJSVkMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQwLCAgICAlJWQ0ICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkbCAgICUlZDEsICAgICUlYTNAKyAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZlbCAgJSVhMkArLCAgJSVkMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bHVsICAlJWQyLCAgICAlJWQzOiUlZDEgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDQsICAgICUlZDEgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkMCwgICAgJSVkMyAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGwgICAlJWQxLCAgICAlJWEzQCsgICAgIFxuXHQiICAgXAorICAgICAgICAibW92ZWwgICUlYTJAKywgICUlZDEgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWx1bCAgJSVkMiwgICAgJSVkNDolJWQxICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQzLCAgICAlJWQxICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDAsICAgICUlZDQgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRsICAgJSVkMSwgICAgJSVhM0ArICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmVsICAlJWEyQCssICAlJWQxICAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVsdWwgICUlZDIsICAgICUlZDM6JSVkMSAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkNCwgICAgJSVkMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQwLCAgICAlJWQzICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkbCAgICUlZDEsICAgICUlYTNAKyAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkMCwgICAgJSVkMyAgICAgICBcblx0IgorCisjZW5kaWYgLyogTUM2ODAwMCAqLworCisjaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSB8fCBkZWZpbmVkKF9fcHBjNjRfXykKKworI2lmIGRlZmluZWQoX19NQUNIX18pICYmIGRlZmluZWQoX19BUFBMRV9fKQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibGQgICAgIHIzLCAlMyAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsZCAgICAgcjQsICU0ICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImxkICAgICByNSwgJTUgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibGQgICAgIHI2LCAlNiAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgcjMsIHIzLCAtOCAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICByNCwgcjQsIC04ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaWMgIHI1LCByNSwgIDAgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsZHUgICAgcjcsIDgocjMpICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bGxkICByOCwgcjcsIHI2ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVsaGR1IHI5LCByNywgcjYgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRlICAgcjgsIHI4LCByNSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImxkICAgICByNywgOChyNCkgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkemUgIHI1LCByOSAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRjICAgcjgsIHI4LCByNyAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0ZHUgICByOCwgOChyNCkgICAgICAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiYWRkemUgIHI1LCByNSAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgcjQsIHI0LCA4ICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICByMywgcjMsIDggICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3RkICAgIHI1LCAlMCAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdGQgICAgcjQsICUxICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0ZCAgICByMywgJTIgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICA6ICI9bSIgKGMpLCAiPW0iIChkKSwgIj1tIiAocykgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAibSIgKHMpLCAibSIgKGQpLCAibSIgKGMpLCAibSIgKGIpICAgICAgICBcCisgICAgICAgIDogInIzIiwgInI0IiwgInI1IiwgInI2IiwgInI3IiwgInI4IiwgInI5IiAgXAorICAgICk7CisKKworI2Vsc2UgLyogX19NQUNIX18gJiYgX19BUFBMRV9fICovCisKKyNkZWZpbmUgTVVMQUREQ19JTklUICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsZCAgICAgJSVyMywgJTMgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImxkICAgICAlJXI0LCAlNCAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibGQgICAgICUlcjUsICU1ICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsZCAgICAgJSVyNiwgJTYgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICAlJXIzLCAlJXIzLCAtOCAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgICUlcjQsICUlcjQsIC04ICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpYyAgJSVyNSwgJSVyNSwgIDAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfQ09SRSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImxkdSAgICAlJXI3LCA4KCUlcjMpICAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVsbGQgICUlcjgsICUlcjcsICUlcjYgICAgXG5cdCIgICBcCisgICAgICAgICJtdWxoZHUgJSVyOSwgJSVyNywgJSVyNiAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGUgICAlJXI4LCAlJXI4LCAlJXI1ICAgIFxuXHQiICAgXAorICAgICAgICAibGQgICAgICUlcjcsIDgoJSVyNCkgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR6ZSAgJSVyNSwgJSVyOSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGMgICAlJXI4LCAlJXI4LCAlJXI3ICAgIFxuXHQiICAgXAorICAgICAgICAic3RkdSAgICUlcjgsIDgoJSVyNCkgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJhZGR6ZSAgJSVyNSwgJSVyNSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICAlJXI0LCAlJXI0LCA4ICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgICUlcjMsICUlcjMsIDggICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdGQgICAgJSVyNSwgJTAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0ZCAgICAlJXI0LCAlMSAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3RkICAgICUlcjMsICUyICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgIDogIj1tIiAoYyksICI9bSIgKGQpLCAiPW0iIChzKSAgICAgICAgICAgICAgXAorICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICAgICAgIFwKKyAgICAgICAgOiAicjMiLCAicjQiLCAicjUiLCAicjYiLCAicjciLCAicjgiLCAicjkiICBcCisgICAgKTsKKworI2VuZGlmIC8qIF9fTUFDSF9fICYmIF9fQVBQTEVfXyAqLworCisjZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fcHBjX18pIC8qIGVuZCBQUEM2NC9iZWdpbiBQUEMzMiAgKi8KKworI2lmIGRlZmluZWQoX19NQUNIX18pICYmIGRlZmluZWQoX19BUFBMRV9fKQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImx3eiAgICByMywgJTMgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsd3ogICAgcjQsICU0ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibHd6ICAgIHI1LCAlNSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImx3eiAgICByNiwgJTYgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgcjMsIHIzLCAtNCAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgIHI0LCByNCwgLTQgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGljICByNSwgcjUsICAwICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImx3enUgICByNywgNChyMykgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWxsdyAgcjgsIHI3LCByNiAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVsaHd1IHI5LCByNywgcjYgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGUgICByOCwgcjgsIHI1ICAgICAgXG5cdCIgICBcCisgICAgICAgICJsd3ogICAgcjcsIDQocjQpICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkemUgIHI1LCByOSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGMgICByOCwgcjgsIHI3ICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdHd1ICAgcjgsIDQocjQpICAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJhZGR6ZSAgcjUsIHI1ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgIHI0LCByNCwgNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICByMywgcjMsIDQgICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdHcgICAgcjUsICUwICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3R3ICAgIHI0LCAlMSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0dyAgICByMywgJTIgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgIDogIj1tIiAoYyksICI9bSIgKGQpLCAiPW0iIChzKSAgICAgICAgICAgICAgXAorICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICAgICAgIFwKKyAgICAgICAgOiAicjMiLCAicjQiLCAicjUiLCAicjYiLCAicjciLCAicjgiLCAicjkiICBcCisgICAgKTsKKworI2Vsc2UgLyogX19NQUNIX18gJiYgX19BUFBMRV9fICovCisKKyNkZWZpbmUgTVVMQUREQ19JTklUICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsd3ogICAgJSVyMywgJTMgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImx3eiAgICAlJXI0LCAlNCAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibHd6ICAgICUlcjUsICU1ICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsd3ogICAgJSVyNiwgJTYgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICAlJXIzLCAlJXIzLCAtNCAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgICUlcjQsICUlcjQsIC00ICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpYyAgJSVyNSwgJSVyNSwgIDAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfQ09SRSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImx3enUgICAlJXI3LCA0KCUlcjMpICAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVsbHcgICUlcjgsICUlcjcsICUlcjYgICAgXG5cdCIgICBcCisgICAgICAgICJtdWxod3UgJSVyOSwgJSVyNywgJSVyNiAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGUgICAlJXI4LCAlJXI4LCAlJXI1ICAgIFxuXHQiICAgXAorICAgICAgICAibHd6ICAgICUlcjcsIDQoJSVyNCkgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR6ZSAgJSVyNSwgJSVyOSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGMgICAlJXI4LCAlJXI4LCAlJXI3ICAgIFxuXHQiICAgXAorICAgICAgICAic3R3dSAgICUlcjgsIDQoJSVyNCkgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJhZGR6ZSAgJSVyNSwgJSVyNSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICAlJXI0LCAlJXI0LCA0ICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgICUlcjMsICUlcjMsIDQgICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdHcgICAgJSVyNSwgJTAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0dyAgICAlJXI0LCAlMSAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3R3ICAgICUlcjMsICUyICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgIDogIj1tIiAoYyksICI9bSIgKGQpLCAiPW0iIChzKSAgICAgICAgICAgICAgXAorICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICAgICAgIFwKKyAgICAgICAgOiAicjMiLCAicjQiLCAicjUiLCAicjYiLCAicjciLCAicjgiLCAicjkiICBcCisgICAgKTsKKworI2VuZGlmIC8qIF9fTUFDSF9fICYmIF9fQVBQTEVfXyAqLworCisjZW5kaWYgLyogUFBDMzIgKi8KKworLyoKKyAqIFRoZSBTcGFyYyg2NCkgYXNzZW1ibHkgaXMgcmVwb3J0ZWQgdG8gYmUgYnJva2VuLgorICogRGlzYWJsZSBpdCBmb3Igbm93LCB1bnRpbCB3ZSdyZSBhYmxlIHRvIGZpeCBpdC4KKyAqLworI2lmIDAgJiYgZGVmaW5lZChfX3NwYXJjX18pCisjaWYgZGVmaW5lZChfX3NwYXJjNjRfXykKKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAibGR4ICAgICAlMywgJSVvMCAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJsZHggICAgICU0LCAlJW8xICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImxkICAgICAgJTUsICUlbzIgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAibGQgICAgICAlNiwgJSVvMyAgICAgICAgICAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19DT1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJsZCAgICAgIFslJW8wXSwgJSVvNCAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImluYyAgICAgNCwgJSVvMCAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAibGQgICAgICBbJSVvMV0sICUlbzUgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJ1bXVsICAgICUlbzMsICUlbzQsICUlbzQgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImFkZGNjICAgJSVvNCwgJSVvMiwgJSVvNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAicmQgICAgICAlJXksICUlZzEgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJhZGR4ICAgICUlZzEsIDAsICUlZzEgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImFkZGNjICAgJSVvNCwgJSVvNSwgJSVvNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAic3QgICAgICAlJW80LCBbJSVvMV0gICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJhZGR4ICAgICUlZzEsIDAsICUlbzIgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImluYyAgICAgNCwgJSVvMSAgICAgICAgICAgICAgICBcblx0IgorCisgICAgICAgICNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAic3QgICAgICAlJW8yLCAlMCAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJzdHggICAgICUlbzEsICUxICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgInN0eCAgICAgJSVvMCwgJTIgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgOiAiPW0iIChjKSwgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICAgIFwKKyAgICAgICAgOiAibSIgKHMpLCAibSIgKGQpLCAibSIgKGMpLCAibSIgKGIpICAgIFwKKyAgICAgICAgOiAiZzEiLCAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAgIFwKKyAgICAgICAgICAibzUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKTsKKworI2Vsc2UgLyogX19zcGFyYzY0X18gKi8KKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAibGQgICAgICAlMywgJSVvMCAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJsZCAgICAgICU0LCAlJW8xICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImxkICAgICAgJTUsICUlbzIgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAibGQgICAgICAlNiwgJSVvMyAgICAgICAgICAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19DT1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJsZCAgICAgIFslJW8wXSwgJSVvNCAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImluYyAgICAgNCwgJSVvMCAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAibGQgICAgICBbJSVvMV0sICUlbzUgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJ1bXVsICAgICUlbzMsICUlbzQsICUlbzQgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImFkZGNjICAgJSVvNCwgJSVvMiwgJSVvNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAicmQgICAgICAlJXksICUlZzEgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJhZGR4ICAgICUlZzEsIDAsICUlZzEgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImFkZGNjICAgJSVvNCwgJSVvNSwgJSVvNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAic3QgICAgICAlJW80LCBbJSVvMV0gICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJhZGR4ICAgICUlZzEsIDAsICUlbzIgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImluYyAgICAgNCwgJSVvMSAgICAgICAgICAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAic3QgICAgICAlJW8yLCAlMCAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJzdCAgICAgICUlbzEsICUxICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgInN0ICAgICAgJSVvMCwgJTIgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgOiAiPW0iIChjKSwgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICAgIFwKKyAgICAgICAgOiAibSIgKHMpLCAibSIgKGQpLCAibSIgKGMpLCAibSIgKGIpICAgIFwKKyAgICAgICAgOiAiZzEiLCAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAgIFwKKyAgICAgICAgICAibzUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKTsKKworI2VuZGlmIC8qIF9fc3BhcmM2NF9fICovCisjZW5kaWYgLyogX19zcGFyY19fICovCisKKyNpZiBkZWZpbmVkKF9fbWljcm9ibGF6ZV9fKSB8fCBkZWZpbmVkKG1pY3JvYmxhemUpCisKKyNkZWZpbmUgTVVMQUREQ19JTklUICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibHdpICAgcjMsICAgJTMgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImx3aSAgIHI0LCAgICU0ICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsd2kgICByNSwgICAlNSAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibHdpICAgcjYsICAgJTYgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFuZGkgIHI3LCAgIHI2LCAweGZmZmYgXG5cdCIgICBcCisgICAgICAgICJic3JsaSByNiwgICByNiwgMTYgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19DT1JFICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsaHVpICByOCwgICByMywgICAwICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgcjMsICAgcjMsICAgMiAgICBcblx0IiAgIFwKKyAgICAgICAgImxodWkgIHI5LCAgIHIzLCAgIDAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICByMywgICByMywgICAyICAgIFxuXHQiICAgXAorICAgICAgICAibXVsICAgcjEwLCAgcjksICByNiAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bCAgIHIxMSwgIHI4LCAgcjcgICAgXG5cdCIgICBcCisgICAgICAgICJtdWwgICByMTIsICByOSwgIHI3ICAgIFxuXHQiICAgXAorICAgICAgICAibXVsICAgcjEzLCAgcjgsICByNiAgICBcblx0IiAgIFwKKyAgICAgICAgImJzcmxpICByOCwgcjEwLCAgMTYgICAgXG5cdCIgICBcCisgICAgICAgICJic3JsaSAgcjksIHIxMSwgIDE2ICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkICAgcjEzLCByMTMsICByOCAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZCAgIHIxMywgcjEzLCAgcjkgICAgXG5cdCIgICBcCisgICAgICAgICJic2xsaSByMTAsIHIxMCwgIDE2ICAgIFxuXHQiICAgXAorICAgICAgICAiYnNsbGkgcjExLCByMTEsICAxNiAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZCAgIHIxMiwgcjEyLCByMTAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRjICByMTMsIHIxMywgIHIwICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkICAgcjEyLCByMTIsIHIxMSAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGMgIHIxMywgcjEzLCAgcjAgICAgXG5cdCIgICBcCisgICAgICAgICJsd2kgICByMTAsICByNCwgICAwICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkICAgcjEyLCByMTIsIHIxMCAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGMgIHIxMywgcjEzLCAgcjAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGQgICByMTIsIHIxMiwgIHI1ICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkYyAgIHI1LCByMTMsICByMCAgICBcblx0IiAgIFwKKyAgICAgICAgInN3aSAgIHIxMiwgIHI0LCAgIDAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgcjQsICByNCwgICA0ICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJzd2kgICByNSwgICAlMCAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3dpICAgcjQsICAgJTEgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN3aSAgIHIzLCAgICUyICAgICAgICAgXG5cdCIgICBcCisgICAgICAgIDogIj1tIiAoYyksICI9bSIgKGQpLCAiPW0iIChzKSAgICAgICAgICAgICAgXAorICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICAgICAgIFwKKyAgICAgICAgOiAicjMiLCAicjQiICAicjUiLCAicjYiLCAicjciLCAicjgiLCAgICAgICBcCisgICAgICAgICAgInI5IiwgInIxMCIsICJyMTEiLCAicjEyIiwgInIxMyIgICAgICAgICAgXAorICAgICk7CisKKyNlbmRpZiAvKiBNaWNyb0JsYXplICovCisKKyNpZiBkZWZpbmVkKF9fdHJpY29yZV9fKQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsZC5hICAgJSVhMiwgJTMgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsZC5hICAgJSVhMywgJTQgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsZC53ICAgJSVkNCwgJTUgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsZC53ICAgJSVkMSwgJTYgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJ4b3IgICAgJSVkNSwgJSVkNSAgICAgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibGQudyAgICUlZDAsICAgWyUlYTIrXSAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibWFkZC51ICUlZTIsICUlZTQsICUlZDAsICUlZDEgIFxuXHQiICAgXAorICAgICAgICAibGQudyAgICUlZDAsICAgWyUlYTNdICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkeCAgICUlZDIsICAgICUlZDIsICAlJWQwICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkYyAgICUlZDMsICAgICUlZDMsICAgIDAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92ICAgICUlZDQsICAgICUlZDMgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3QudyAgWyUlYTMrXSwgICUlZDIgICAgICAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgInN0LncgICAlMCwgJSVkNCAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0LmEgICAlMSwgJSVhMyAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0LmEgICAlMiwgJSVhMiAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgOiAiPW0iIChjKSwgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICAgIFwKKyAgICAgICAgOiAibSIgKHMpLCAibSIgKGQpLCAibSIgKGMpLCAibSIgKGIpICAgIFwKKyAgICAgICAgOiAiZDAiLCAiZDEiLCAiZTIiLCAiZDQiLCAiYTIiLCAiYTMiICAgIFwKKyAgICApOworCisjZW5kaWYgLyogVHJpQ29yZSAqLworCisvKgorICogZ2NjIC1PMCBieSBkZWZhdWx0IHVzZXMgcjcgZm9yIHRoZSBmcmFtZSBwb2ludGVyLCBzbyBpdCBjb21wbGFpbnMgYWJvdXQgb3VyCisgKiB1c2Ugb2YgcjcgYmVsb3csIHVubGVzcyAtZm9taXQtZnJhbWUtcG9pbnRlciBpcyBwYXNzZWQuIFVuZm9ydHVuYXRlbHksCisgKiBwYXNzaW5nIHRoYXQgb3B0aW9uIGlzIG5vdCBlYXN5IHdoZW4gYnVpbGRpbmcgd2l0aCB5b3R0YS4KKyAqCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgLWZvbWl0LWZyYW1lLXBvaW50ZXIgaXMgaW1wbGllZCBieSBhbnkgLU94IG9wdGlvbnMgd2l0aAorICogeCAhPTAsIHdoaWNoIHdlIGNhbiBkZXRlY3QgdXNpbmcgX19PUFRJTUlaRV9fICh3aGljaCBpcyBhbHNvIGRlZmluZWQgYnkKKyAqIGNsYW5nIGFuZCBhcm1jYzUgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucykuCisgKgorICogU28sIG9ubHkgdXNlIHRoZSBvcHRpbWl6ZWQgYXNzZW1ibHkgYmVsb3cgZm9yIG9wdGltaXplZCBidWlsZCwgd2hpY2ggYXZvaWRzCisgKiB0aGUgYnVpbGQgZXJyb3IgYW5kIGlzIHByZXR0eSByZWFzb25hYmxlIGFueXdheS4KKyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fT1BUSU1JWkVfXykKKyNkZWZpbmUgTVVMQUREQ19DQU5OT1RfVVNFX1I3CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoTVVMQUREQ19DQU5OT1RfVVNFX1I3KQorCisjaWYgZGVmaW5lZChfX3RodW1iX18pICYmICFkZWZpbmVkKF9fdGh1bWIyX18pCisKKyNkZWZpbmUgTVVMQUREQ19JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAibGRyICAgIHIwLCAlMyAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsZHIgICAgcjEsICU0ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxkciAgICByMiwgJTUgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibGRyICAgIHIzLCAlNiAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsc3IgICAgcjcsIHIzLCAjMTYgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgIm1vdiAgICByOSwgcjcgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibHNsICAgIHI3LCByMywgIzE2ICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsc3IgICAgcjcsIHI3LCAjMTYgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgIm1vdiAgICByOCwgcjcgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAibGRtaWEgIHIwISwge3I2fSAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsc3IgICAgcjcsIHI2LCAjMTYgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxzbCAgICByNiwgcjYsICMxNiAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibHNyICAgIHI2LCByNiwgIzE2ICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJtb3YgICAgcjQsIHI4ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgIm11bCAgICByNCwgcjYgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibW92ICAgIHIzLCByOSAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJtdWwgICAgcjYsIHIzICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgIm1vdiAgICByNSwgcjkgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibXVsICAgIHI1LCByNyAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJtb3YgICAgcjMsIHI4ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgIm11bCAgICByNywgcjMgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibHNyICAgIHIzLCByNiwgIzE2ICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJhZGQgICAgcjUsIHI1LCByMyAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxzciAgICByMywgcjcsICMxNiAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAiYWRkICAgIHI1LCByNSwgcjMgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJhZGQgICAgcjQsIHI0LCByMiAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgIm1vdiAgICByMiwgIzAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAiYWRjICAgIHI1LCByMiAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsc2wgICAgcjMsIHI2LCAjMTYgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImFkZCAgICByNCwgcjQsIHIzICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAiYWRjICAgIHI1LCByMiAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsc2wgICAgcjMsIHI3LCAjMTYgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImFkZCAgICByNCwgcjQsIHIzICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAiYWRjICAgIHI1LCByMiAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsZHIgICAgcjMsIFtyMV0gICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImFkZCAgICByNCwgcjQsIHIzICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAiYWRjICAgIHIyLCByNSAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJzdG1pYSAgcjEhLCB7cjR9ICAgICAgICAgICAgICAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgInN0ciAgICByMiwgJTAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAic3RyICAgIHIxLCAlMSAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJzdHIgICAgcjAsICUyICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgOiAiPW0iIChjKSwgICI9bSIgKGQpLCAiPW0iIChzKSAgICAgICAgXAorICAgICAgICAgOiAibSIgKHMpLCAibSIgKGQpLCAibSIgKGMpLCAibSIgKGIpICAgXAorICAgICAgICAgOiAicjAiLCAicjEiLCAicjIiLCAicjMiLCAicjQiLCAicjUiLCAgXAorICAgICAgICAgICAicjYiLCAicjciLCAicjgiLCAicjkiLCAiY2MiICAgICAgICAgXAorICAgICAgICAgKTsKKworI2Vsc2UKKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICJsZHIgICAgcjAsICUzICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxkciAgICByMSwgJTQgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibGRyICAgIHIyLCAlNSAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsZHIgICAgcjMsICU2ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19DT1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgImxkciAgICByNCwgW3IwXSwgIzQgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibW92ICAgIHI1LCAjMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsZHIgICAgcjYsIFtyMV0gICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgInVtbGFsICByMiwgcjUsIHIzLCByNCAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAiYWRkcyAgIHI3LCByNiwgcjIgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJhZGMgICAgcjIsIHI1LCAjMCAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgInN0ciAgICByNywgW3IxXSwgIzQgICAgICAgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAic3RyICAgIHIyLCAlMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJzdHIgICAgcjEsICUxICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgInN0ciAgICByMCwgJTIgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICA6ICI9bSIgKGMpLCAgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICBcCisgICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICBcCisgICAgICAgICA6ICJyMCIsICJyMSIsICJyMiIsICJyMyIsICJyNCIsICJyNSIsICBcCisgICAgICAgICAgICJyNiIsICJyNyIsICJjYyIgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICApOworCisjZW5kaWYgLyogVGh1bWIgKi8KKworI2VuZGlmIC8qIEFSTXYzICovCisKKyNpZiBkZWZpbmVkKF9fYWxwaGFfXykKKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsZHEgICAgJDEsICUzICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibGRxICAgICQyLCAlNCAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImxkcSAgICAkMywgJTUgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsZHEgICAgJDQsICU2ICAgICAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19DT1JFICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsZHEgICAgJDYsICAwKCQxKSAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkcSAgICQxLCAgOCwgJDEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bHEgICAkNiwgJDQsICQ3ICAgICAgXG5cdCIgICBcCisgICAgICAgICJ1bXVsaCAgJDYsICQ0LCAkNiAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkcSAgICQ3LCAkMywgJDcgICAgICBcblx0IiAgIFwKKyAgICAgICAgImNtcHVsdCAkNywgJDMsICQzICAgICAgXG5cdCIgICBcCisgICAgICAgICJsZHEgICAgJDUsICAwKCQyKSAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkcSAgICQ3LCAkNSwgJDcgICAgICBcblx0IiAgIFwKKyAgICAgICAgImNtcHVsdCAkNywgJDUsICQ1ICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdHEgICAgJDcsICAwKCQyKSAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkcSAgICQyLCAgOCwgJDIgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHEgICAkNiwgJDMsICQzICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRxICAgJDUsICQzLCAkMyAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAic3RxICAgICQzLCAlMCAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0cSAgICAkMiwgJTEgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdHEgICAgJDEsICUyICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICA6ICI9bSIgKGMpLCAiPW0iIChkKSwgIj1tIiAocykgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAibSIgKHMpLCAibSIgKGQpLCAibSIgKGMpLCAibSIgKGIpICAgICAgICBcCisgICAgICAgIDogIiQxIiwgIiQyIiwgIiQzIiwgIiQ0IiwgIiQ1IiwgIiQ2IiwgIiQ3IiAgXAorICAgICk7CisjZW5kaWYgLyogQWxwaGEgKi8KKworI2lmIGRlZmluZWQoX19taXBzX18pICYmICFkZWZpbmVkKF9fbWlwczY0KQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImx3ICAgICAkMTAsICUzICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsdyAgICAgJDExLCAlNCAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibHcgICAgICQxMiwgJTUgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImx3ICAgICAkMTMsICU2ICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImx3ICAgICAkMTQsIDAoJDEwKSAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWx0dSAgJDEzLCAkMTQgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgICQxMCwgJDEwLCA0ICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1mbG8gICAkMTQgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtZmhpICAgJDkgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkdSAgICQxNCwgJDEyLCAkMTQgICBcblx0IiAgIFwKKyAgICAgICAgImx3ICAgICAkMTUsIDAoJDExKSAgICAgXG5cdCIgICBcCisgICAgICAgICJzbHR1ICAgJDEyLCAkMTQsICQxMiAgIFxuXHQiICAgXAorICAgICAgICAiYWRkdSAgICQxNSwgJDE0LCAkMTUgICBcblx0IiAgIFwKKyAgICAgICAgInNsdHUgICAkMTQsICQxNSwgJDE0ICAgXG5cdCIgICBcCisgICAgICAgICJhZGR1ICAgJDEyLCAkMTIsICQ5ICAgIFxuXHQiICAgXAorICAgICAgICAic3cgICAgICQxNSwgMCgkMTEpICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHUgICAkMTIsICQxMiwgJDE0ICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgJDExLCAkMTEsIDQgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJzdyAgICAgJDEyLCAlMCAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3cgICAgICQxMSwgJTEgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN3ICAgICAkMTAsICUyICAgICAgICAgXG5cdCIgICBcCisgICAgICAgIDogIj1tIiAoYyksICI9bSIgKGQpLCAiPW0iIChzKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIDogIm0iIChzKSwgIm0iIChkKSwgIm0iIChjKSwgIm0iIChiKSAgICAgICAgICAgICAgICBcCisgICAgICAgIDogIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiAgICBcCisgICAgKTsKKworI2VuZGlmIC8qIE1JUFMgKi8KKyNlbmRpZiAvKiBHTlVDICovCisKKyNpZiAoZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChfTV9JWDg2KSkgfHwgZGVmaW5lZChfX1dBVENPTUNfXykKKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgbW92ICAgICBlc2ksIHMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgbW92ICAgICBlZGksIGQgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgbW92ICAgICBlY3gsIGMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgbW92ICAgICBlYngsIGIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgbG9kc2QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgbXVsICAgICBlYnggICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgYWRkICAgICBlYXgsIGVjeCAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgYWRjICAgICBlZHgsIDAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgYWRkICAgICBlYXgsIFtlZGldICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgYWRjICAgICBlZHgsIDAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgbW92ICAgICBlY3gsIGVkeCAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgc3Rvc2QKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1NTRTIpCisKKyNkZWZpbmUgRU1JVCBfX2FzbSBfZW1pdAorCisjZGVmaW5lIE1VTEFERENfSFVJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHhDOSAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHhDMyAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHgxRiAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhDQiAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHgxNiAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RjQgIEVNSVQgMHhEMCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg2NiAgRU1JVCAweDA0ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RjQgIEVNSVQgMHhFMCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg3NiAgRU1JVCAweDA4ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RjQgIEVNSVQgMHhGMCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg3RSAgRU1JVCAweDBDICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RjQgIEVNSVQgMHhGOCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhDQSAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg1RiAgRU1JVCAweDA0ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhEQyAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg2RiAgRU1JVCAweDA4ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhFRSAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg2NyAgRU1JVCAweDBDICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhGQyAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4N0UgIEVNSVQgMHgwRiAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg1NiAgRU1JVCAweDEwICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RjQgIEVNSVQgMHhEMCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NzMgIEVNSVQgMHhEMSAgRU1JVCAweDIwICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg2NiAgRU1JVCAweDE0ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RjQgIEVNSVQgMHhFMCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhDQiAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg3NiAgRU1JVCAweDE4ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RjQgIEVNSVQgMHhGMCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4N0UgIEVNSVQgMHg0RiAgRU1JVCAweDA0ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NzMgIEVNSVQgMHhEMSAgRU1JVCAweDIwICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg1RSAgRU1JVCAweDFDICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RjQgIEVNSVQgMHhEOCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhDRCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg2RiAgRU1JVCAweDEwICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhENSAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4N0UgIEVNSVQgMHg0RiAgRU1JVCAweDA4ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NzMgIEVNSVQgMHhEMSAgRU1JVCAweDIwICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhDRiAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg2RiAgRU1JVCAweDE0ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhFNSAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4N0UgIEVNSVQgMHg0RiAgRU1JVCAweDBDICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NzMgIEVNSVQgMHhEMSAgRU1JVCAweDIwICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhDQSAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg2RiAgRU1JVCAweDE4ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhGNSAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4N0UgIEVNSVQgMHg0RiAgRU1JVCAweDEwICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NzMgIEVNSVQgMHhEMSAgRU1JVCAweDIwICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhDQyAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NkUgIEVNSVQgMHg2RiAgRU1JVCAweDFDICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhERCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4N0UgIEVNSVQgMHg0RiAgRU1JVCAweDE0ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NzMgIEVNSVQgMHhEMSAgRU1JVCAweDIwICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhDRSAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4N0UgIEVNSVQgMHg0RiAgRU1JVCAweDE4ICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NzMgIEVNSVQgMHhEMSAgRU1JVCAweDIwICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4RDQgIEVNSVQgMHhDQiAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4N0UgIEVNSVQgMHg0RiAgRU1JVCAweDFDICBcCisgICAgRU1JVCAweDgzICBFTUlUIDB4QzcgIEVNSVQgMHgyMCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDgzICBFTUlUIDB4QzYgIEVNSVQgMHgyMCAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NzMgIEVNSVQgMHhEMSAgRU1JVCAweDIwICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4N0UgIEVNSVQgMHhDOQorCisjZGVmaW5lIE1VTEFERENfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRU1JVCAweDBGICBFTUlUIDB4NzcgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBtb3YgICAgIGMsIGVjeCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBtb3YgICAgIGQsIGVkaSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBtb3YgICAgIHMsIGVzaSAgICAgICAgICAgICAgICAgICAgICBcCisKKyNlbHNlCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2FzbSAgIG1vdiAgICAgYywgZWN4ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2FzbSAgIG1vdiAgICAgZCwgZWRpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2FzbSAgIG1vdiAgICAgcywgZXNpICAgICAgICAgICAgICAgICAgICAgIFwKKworI2VuZGlmIC8qIFNTRTIgKi8KKyNlbmRpZiAvKiBNU1ZDICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVfQVNNICovCisKKyNpZiAhZGVmaW5lZChNVUxBRERDX0NPUkUpCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVURCTCkKKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc190X3VkYmwgcjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19tcGlfdWludCByMCwgcjE7CisKKyNkZWZpbmUgTVVMQUREQ19DT1JFICAgICAgICAgICAgICAgICAgICBcCisgICAgciAgID0gKihzKyspICogKG1iZWR0bHNfdF91ZGJsKSBiOyAgICAgICAgICBcCisgICAgcjAgID0gKG1iZWR0bHNfbXBpX3VpbnQpIHI7ICAgICAgICAgICAgICAgICAgIFwKKyAgICByMSAgPSAobWJlZHRsc19tcGlfdWludCkoIHIgPj4gYmlMICk7ICAgICAgICAgXAorICAgIHIwICs9IGM7ICByMSArPSAocjAgPCAgYyk7ICAgICAgICAgIFwKKyAgICByMCArPSAqZDsgcjEgKz0gKHIwIDwgKmQpOyAgICAgICAgICBcCisgICAgYyA9IHIxOyAqKGQrKykgPSByMDsKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2Vsc2UKKyNkZWZpbmUgTVVMQUREQ19JTklUICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfbXBpX3VpbnQgczAsIHMxLCBiMCwgYjE7ICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19tcGlfdWludCByMCwgcjEsIHJ4LCByeTsgICAgICAgICAgICAgIFwKKyAgICBiMCA9ICggYiA8PCBiaUggKSA+PiBiaUg7ICAgICAgICAgICBcCisgICAgYjEgPSAoIGIgPj4gYmlIICk7CisKKyNkZWZpbmUgTVVMQUREQ19DT1JFICAgICAgICAgICAgICAgICAgICBcCisgICAgczAgPSAoICpzIDw8IGJpSCApID4+IGJpSDsgICAgICAgICAgXAorICAgIHMxID0gKCAqcyA+PiBiaUggKTsgcysrOyAgICAgICAgICAgIFwKKyAgICByeCA9IHMwICogYjE7IHIwID0gczAgKiBiMDsgICAgICAgICBcCisgICAgcnkgPSBzMSAqIGIwOyByMSA9IHMxICogYjE7ICAgICAgICAgXAorICAgIHIxICs9ICggcnggPj4gYmlIICk7ICAgICAgICAgICAgICAgIFwKKyAgICByMSArPSAoIHJ5ID4+IGJpSCApOyAgICAgICAgICAgICAgICBcCisgICAgcnggPDw9IGJpSDsgcnkgPDw9IGJpSDsgICAgICAgICAgICAgXAorICAgIHIwICs9IHJ4OyByMSArPSAocjAgPCByeCk7ICAgICAgICAgIFwKKyAgICByMCArPSByeTsgcjEgKz0gKHIwIDwgcnkpOyAgICAgICAgICBcCisgICAgcjAgKz0gIGM7IHIxICs9IChyMCA8ICBjKTsgICAgICAgICAgXAorICAgIHIwICs9ICpkOyByMSArPSAocjAgPCAqZCk7ICAgICAgICAgIFwKKyAgICBjID0gcjE7ICooZCsrKSA9IHIwOworCisjZGVmaW5lIE1VTEFERENfU1RPUCAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZW5kaWYgLyogQyAoZ2VuZXJpYykgICovCisjZW5kaWYgLyogQyAobG9uZ2xvbmcpICovCisKKyNlbmRpZiAvKiBibl9tdWwuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jYW1lbGxpYS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jYW1lbGxpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjRkNjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NhbWVsbGlhLmgKQEAgLTAsMCArMSwyMzUgQEAKKy8qKgorICogXGZpbGUgY2FtZWxsaWEuaAorICoKKyAqIFxicmllZiBDYW1lbGxpYSBibG9jayBjaXBoZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19DQU1FTExJQV9ICisjZGVmaW5lIE1CRURUTFNfQ0FNRUxMSUFfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZGVmaW5lIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCAgICAgMQorI2RlZmluZSBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQgICAgIDAKKworI2RlZmluZSBNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0tFWV9MRU5HVEggICAgICAgICAgIC0weDAwMjQgIC8qKjwgSW52YWxpZCBrZXkgbGVuZ3RoLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0lOUFVUX0xFTkdUSCAgICAgICAgIC0weDAwMjYgIC8qKjwgSW52YWxpZCBkYXRhIGlucHV0IGxlbmd0aC4gKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQUxUKQorLy8gUmVndWxhciBpbXBsZW1lbnRhdGlvbgorLy8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBDQU1FTExJQSBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCBucjsgICAgICAgICAgICAgICAgICAgICAvKiE8ICBudW1iZXIgb2Ygcm91bmRzICAqLworICAgIHVpbnQzMl90IHJrWzY4XTsgICAgICAgICAgICAvKiE8ICBDQU1FTExJQSByb3VuZCBrZXlzICAgICovCit9CittYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgQ0FNRUxMSUEgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBDQU1FTExJQSBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19jYW1lbGxpYV9pbml0KCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbGVhciBDQU1FTExJQSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIENBTUVMTElBIGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfY2FtZWxsaWFfZnJlZSggbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ0FNRUxMSUEga2V5IHNjaGVkdWxlIChlbmNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBDQU1FTExJQSBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0ga2V5ICAgICAgZW5jcnlwdGlvbiBrZXkKKyAqIFxwYXJhbSBrZXliaXRzICBtdXN0IGJlIDEyOCwgMTkyIG9yIDI1NgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfS0VZX0xFTkdUSAorICovCitpbnQgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXliaXRzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENBTUVMTElBIGtleSBzY2hlZHVsZSAoZGVjcnlwdGlvbikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQ0FNRUxMSUEgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgIGRlY3J5cHRpb24ga2V5CisgKiBccGFyYW0ga2V5Yml0cyAgbXVzdCBiZSAxMjgsIDE5MiBvciAyNTYKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0tFWV9MRU5HVEgKKyAqLworaW50IG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2RlYyggbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5Yml0cyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDQU1FTExJQS1FQ0IgYmxvY2sgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgIENBTUVMTElBIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX0NBTUVMTElBX0VOQ1JZUFQgb3IgTUJFRFRMU19DQU1FTExJQV9ERUNSWVBUCisgKiBccGFyYW0gaW5wdXQgICAgMTYtYnl0ZSBpbnB1dCBibG9jaworICogXHBhcmFtIG91dHB1dCAgIDE2LWJ5dGUgb3V0cHV0IGJsb2NrCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9lY2IoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFsxNl0sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIENBTUVMTElBLUNCQyBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKiAgICAgICAgICAgICAgICAgTGVuZ3RoIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIHRoZSBibG9jaworICogICAgICAgICAgICAgICAgIHNpemUgKDE2IGJ5dGVzKQorICoKKyAqIFxub3RlICAgICAgICAgICBVcG9uIGV4aXQsIHRoZSBjb250ZW50IG9mIHRoZSBJViBpcyB1cGRhdGVkIHNvIHRoYXQgeW91IGNhbgorICogICAgICAgICAgICAgICAgIGNhbGwgdGhlIGZ1bmN0aW9uIHNhbWUgZnVuY3Rpb24gYWdhaW4gb24gdGhlIGZvbGxvd2luZworICogICAgICAgICAgICAgICAgIGJsb2NrKHMpIG9mIGRhdGEgYW5kIGdldCB0aGUgc2FtZSByZXN1bHQgYXMgaWYgaXQgd2FzCisgKiAgICAgICAgICAgICAgICAgZW5jcnlwdGVkIGluIG9uZSBjYWxsLiBUaGlzIGFsbG93cyBhICJzdHJlYW1pbmciIHVzYWdlLgorICogICAgICAgICAgICAgICAgIElmIG9uIHRoZSBvdGhlciBoYW5kIHlvdSBuZWVkIHRvIHJldGFpbiB0aGUgY29udGVudHMgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgSVYsIHlvdSBzaG91bGQgZWl0aGVyIHNhdmUgaXQgbWFudWFsbHkgb3IgdXNlIHRoZSBjaXBoZXIKKyAqICAgICAgICAgICAgICAgICBtb2R1bGUgaW5zdGVhZC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQ0FNRUxMSUEgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCBvciBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQKKyAqIFxwYXJhbSBsZW5ndGggICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpdiAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKHVwZGF0ZWQgYWZ0ZXIgdXNlKQorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0lOUFVUX0xFTkdUSAorICovCitpbnQgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jYmMoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdlsxNl0sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKy8qKgorICogXGJyaWVmICAgICAgICAgIENBTUVMTElBLUNGQjEyOCBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKgorICogTm90ZTogRHVlIHRvIHRoZSBuYXR1cmUgb2YgQ0ZCIHlvdSBzaG91bGQgdXNlIHRoZSBzYW1lIGtleSBzY2hlZHVsZSBmb3IKKyAqIGJvdGggZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbi4gU28gYSBjb250ZXh0IGluaXRpYWxpemVkIHdpdGgKKyAqIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2VuYygpIGZvciBib3RoIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCBhbmQgQ0FNRUxMSUVfREVDUllQVC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVXBvbiBleGl0LCB0aGUgY29udGVudCBvZiB0aGUgSVYgaXMgdXBkYXRlZCBzbyB0aGF0IHlvdSBjYW4KKyAqICAgICAgICAgICAgICAgICBjYWxsIHRoZSBmdW5jdGlvbiBzYW1lIGZ1bmN0aW9uIGFnYWluIG9uIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICAgICAgICAgICBibG9jayhzKSBvZiBkYXRhIGFuZCBnZXQgdGhlIHNhbWUgcmVzdWx0IGFzIGlmIGl0IHdhcworICogICAgICAgICAgICAgICAgIGVuY3J5cHRlZCBpbiBvbmUgY2FsbC4gVGhpcyBhbGxvd3MgYSAic3RyZWFtaW5nIiB1c2FnZS4KKyAqICAgICAgICAgICAgICAgICBJZiBvbiB0aGUgb3RoZXIgaGFuZCB5b3UgbmVlZCB0byByZXRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZQorICogICAgICAgICAgICAgICAgIElWLCB5b3Ugc2hvdWxkIGVpdGhlciBzYXZlIGl0IG1hbnVhbGx5IG9yIHVzZSB0aGUgY2lwaGVyCisgKiAgICAgICAgICAgICAgICAgbW9kdWxlIGluc3RlYWQuCisgKgorICogXHBhcmFtIGN0eCAgICAgIENBTUVMTElBIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX0NBTUVMTElBX0VOQ1JZUFQgb3IgTUJFRFRMU19DQU1FTExJQV9ERUNSWVBUCisgKiBccGFyYW0gbGVuZ3RoICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaXZfb2ZmICAgb2Zmc2V0IGluIElWICh1cGRhdGVkIGFmdGVyIHVzZSkKKyAqIFxwYXJhbSBpdiAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKHVwZGF0ZWQgYWZ0ZXIgdXNlKQorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0lOUFVUX0xFTkdUSAorICovCitpbnQgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jZmIxMjgoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppdl9vZmYsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIENBTUVMTElBLUNUUiBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKgorICogV2FybmluZzogWW91IGhhdmUgdG8ga2VlcCB0aGUgbWF4aW11bSB1c2Ugb2YgeW91ciBjb3VudGVyIGluIG1pbmQhCisgKgorICogTm90ZTogRHVlIHRvIHRoZSBuYXR1cmUgb2YgQ1RSIHlvdSBzaG91bGQgdXNlIHRoZSBzYW1lIGtleSBzY2hlZHVsZSBmb3IKKyAqIGJvdGggZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbi4gU28gYSBjb250ZXh0IGluaXRpYWxpemVkIHdpdGgKKyAqIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2VuYygpIGZvciBib3RoIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCBhbmQgTUJFRFRMU19DQU1FTExJQV9ERUNSWVBULgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENBTUVMTElBIGNvbnRleHQKKyAqIFxwYXJhbSBsZW5ndGggICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEKKyAqIFxwYXJhbSBuY19vZmYgICAgICAgIFRoZSBvZmZzZXQgaW4gdGhlIGN1cnJlbnQgc3RyZWFtX2Jsb2NrIChmb3IgcmVzdW1pbmcKKyAqICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBjdXJyZW50IGNpcGhlciBzdHJlYW0pLiBUaGUgb2Zmc2V0IHBvaW50ZXIgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSAwIGF0IHRoZSBzdGFydCBvZiBhIHN0cmVhbS4KKyAqIFxwYXJhbSBub25jZV9jb3VudGVyIFRoZSAxMjgtYml0IG5vbmNlIGFuZCBjb3VudGVyLgorICogXHBhcmFtIHN0cmVhbV9ibG9jayAgVGhlIHNhdmVkIHN0cmVhbS1ibG9jayBmb3IgcmVzdW1pbmcuIElzIG92ZXJ3cml0dGVuCisgKiAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgZnVuY3Rpb24uCisgKiBccGFyYW0gaW5wdXQgICAgICAgICBUaGUgaW5wdXQgZGF0YSBzdHJlYW0KKyAqIFxwYXJhbSBvdXRwdXQgICAgICAgIFRoZSBvdXRwdXQgZGF0YSBzdHJlYW0KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2N0ciggbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbmNfb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5vbmNlX2NvdW50ZXJbMTZdLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHN0cmVhbV9ibG9ja1sxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZWxzZSAgLyogTUJFRFRMU19DQU1FTExJQV9BTFQgKi8KKyNpbmNsdWRlICJjYW1lbGxpYV9hbHQuaCIKKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0FMVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2NhbWVsbGlhX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGNhbWVsbGlhLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY2NtLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNzU4MzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NjbS5oCkBAIC0wLDAgKzEsMTQxIEBACisvKioKKyAqIFxmaWxlIGNjbS5oCisgKgorICogXGJyaWVmIENvdW50ZXIgd2l0aCBDQkMtTUFDIChDQ00pIGZvciAxMjgtYml0IGJsb2NrIGNpcGhlcnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19DQ01fSAorI2RlZmluZSBNQkVEVExTX0NDTV9ICisKKyNpbmNsdWRlICJjaXBoZXIuaCIKKworI2RlZmluZSBNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUICAgICAgLTB4MDAwRCAvKio8IEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9DQ01fQVVUSF9GQUlMRUQgICAgLTB4MDAwRiAvKio8IEF1dGhlbnRpY2F0ZWQgZGVjcnlwdGlvbiBmYWlsZWQuICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ0NNIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY2lwaGVyX2N0eDsgICAgLyohPCBjaXBoZXIgY29udGV4dCB1c2VkICovCit9CittYmVkdGxzX2NjbV9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBDQ00gY29udGV4dCAoanVzdCBtYWtlcyByZWZlcmVuY2VzIHZhbGlkKQorICogICAgICAgICAgICAgICAgICBNYWtlcyB0aGUgY29udGV4dCByZWFkeSBmb3IgbWJlZHRsc19jY21fc2V0a2V5KCkgb3IKKyAqICAgICAgICAgICAgICAgICAgbWJlZHRsc19jY21fZnJlZSgpLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ0NNIGNvbnRleHQgdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfY2NtX2luaXQoIG1iZWR0bHNfY2NtX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ0NNIGluaXRpYWxpemF0aW9uIChlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ0NNIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBjaXBoZXIgICAgY2lwaGVyIHRvIHVzZSAoYSAxMjgtYml0IGJsb2NrIGNpcGhlcikKKyAqIFxwYXJhbSBrZXkgICAgICAgZW5jcnlwdGlvbiBrZXkKKyAqIFxwYXJhbSBrZXliaXRzICAga2V5IHNpemUgaW4gYml0cyAobXVzdCBiZSBhY2NlcHRhYmxlIGJ5IHRoZSBjaXBoZXIpCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgY2lwaGVyIHNwZWNpZmljIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfY2NtX3NldGtleSggbWJlZHRsc19jY21fY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfaWRfdCBjaXBoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5Yml0cyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRnJlZSBhIENDTSBjb250ZXh0IGFuZCB1bmRlcmx5aW5nIGNpcGhlciBzdWItY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ0NNIGNvbnRleHQgdG8gZnJlZQorICovCit2b2lkIG1iZWR0bHNfY2NtX2ZyZWUoIG1iZWR0bHNfY2NtX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ0NNIGJ1ZmZlciBlbmNyeXB0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDQ00gY29udGV4dAorICogXHBhcmFtIGxlbmd0aCAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEgaW4gYnl0ZXMKKyAqIFxwYXJhbSBpdiAgICAgICAgbm9uY2UgKGluaXRpYWxpemF0aW9uIHZlY3RvcikKKyAqIFxwYXJhbSBpdl9sZW4gICAgbGVuZ3RoIG9mIElWIGluIGJ5dGVzCisgKiAgICAgICAgICAgICAgICAgIG11c3QgYmUgMiwgMywgNCwgNSwgNiwgNyBvciA4CisgKiBccGFyYW0gYWRkICAgICAgIGFkZGl0aW9uYWwgZGF0YQorICogXHBhcmFtIGFkZF9sZW4gICBsZW5ndGggb2YgYWRkaXRpb25hbCBkYXRhIGluIGJ5dGVzCisgKiAgICAgICAgICAgICAgICAgIG11c3QgYmUgbGVzcyB0aGFuIDJeMTYgLSAyXjgKKyAqIFxwYXJhbSBpbnB1dCAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICAgYnVmZmVyIGZvciBob2xkaW5nIHRoZSBvdXRwdXQgZGF0YQorICogICAgICAgICAgICAgICAgICBtdXN0IGJlIGF0IGxlYXN0ICdsZW5ndGgnIGJ5dGVzIHdpZGUKKyAqIFxwYXJhbSB0YWcgICAgICAgYnVmZmVyIGZvciBob2xkaW5nIHRoZSB0YWcKKyAqIFxwYXJhbSB0YWdfbGVuICAgbGVuZ3RoIG9mIHRoZSB0YWcgdG8gZ2VuZXJhdGUgaW4gYnl0ZXMKKyAqICAgICAgICAgICAgICAgICAgbXVzdCBiZSA0LCA2LCA4LCAxMCwgMTQgb3IgMTYKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoZSB0YWcgaXMgd3JpdHRlbiB0byBhIHNlcGFyYXRlIGJ1ZmZlci4gVG8gZ2V0IHRoZSB0YWcKKyAqICAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGVkIHdpdGggdGhlIG91dHB1dCBhcyBpbiB0aGUgQ0NNIHNwZWMsIHVzZQorICogICAgICAgICAgICAgICAgICB0YWcgPSBvdXRwdXQgKyBsZW5ndGggYW5kIG1ha2Ugc3VyZSB0aGUgb3V0cHV0IGJ1ZmZlciBpcworICogICAgICAgICAgICAgICAgICBhdCBsZWFzdCBsZW5ndGggKyB0YWdfbGVuIHdpZGUuCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZyggbWJlZHRsc19jY21fY29udGV4dCAqY3R4LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZCwgc2l6ZV90IGFkZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCB0YWdfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDQ00gYnVmZmVyIGF1dGhlbnRpY2F0ZWQgZGVjcnlwdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ0NNIGNvbnRleHQKKyAqIFxwYXJhbSBsZW5ndGggICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaXYgICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvcgorICogXHBhcmFtIGl2X2xlbiAgICBsZW5ndGggb2YgSVYKKyAqIFxwYXJhbSBhZGQgICAgICAgYWRkaXRpb25hbCBkYXRhCisgKiBccGFyYW0gYWRkX2xlbiAgIGxlbmd0aCBvZiBhZGRpdGlvbmFsIGRhdGEKKyAqIFxwYXJhbSBpbnB1dCAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICAgYnVmZmVyIGZvciBob2xkaW5nIHRoZSBvdXRwdXQgZGF0YQorICogXHBhcmFtIHRhZyAgICAgICBidWZmZXIgaG9sZGluZyB0aGUgdGFnCisgKiBccGFyYW0gdGFnX2xlbiAgIGxlbmd0aCBvZiB0aGUgdGFnCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBhbmQgYXV0aGVudGljYXRlZCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DQ01fQVVUSF9GQUlMRUQgaWYgdGFnIGRvZXMgbm90IG1hdGNoCisgKi8KK2ludCBtYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQoIG1iZWR0bHNfY2NtX2NvbnRleHQgKmN0eCwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGQsIHNpemVfdCBhZGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGFnLCBzaXplX3QgdGFnX2xlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkgJiYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfY2NtX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAmJiBNQkVEVExTX0FFU19DICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBNQkVEVExTX0NDTV9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NlcnRzLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NlcnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0OTA4NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY2VydHMuaApAQCAtMCwwICsxLDk5IEBACisvKioKKyAqIFxmaWxlIGNlcnRzLmgKKyAqCisgKiBcYnJpZWYgU2FtcGxlIGNlcnRpZmljYXRlcyBhbmQgREhNIHBhcmFtZXRlcnMgZm9yIHRlc3RpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19DRVJUU19ICisjZGVmaW5lIE1CRURUTFNfQ0VSVFNfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKy8qIENvbmNhdGVuYXRpb24gb2YgYWxsIENBIGNlcnRpZmljYXRlcyBpbiBQRU0gZm9ybWF0IGlmIGF2YWlsYWJsZSAqLworZXh0ZXJuIGNvbnN0IGNoYXIgICBtYmVkdGxzX3Rlc3RfY2FzX3BlbVtdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FzX3BlbV9sZW47CisjZW5kaWYKKworLyogTGlzdCBvZiBhbGwgQ0EgY2VydGlmaWNhdGVzLCB0ZXJtaW5hdGVkIGJ5IE5VTEwgKi8KK2V4dGVybiBjb25zdCBjaGFyICogbWJlZHRsc190ZXN0X2Nhc1tdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FzX2xlbltdOworCisvKgorICogQ29udmVuaWVuY2UgZm9yIHVzZXJzIHdobyBqdXN0IHdhbnQgYSBjZXJ0aWZpY2F0ZToKKyAqIFJTQSBieSBkZWZhdWx0LCBvciBFQ0RTQSBpZiBSU0EgaXMgbm90IGF2YWlsYWJsZQorICovCitleHRlcm4gY29uc3QgY2hhciAqIG1iZWR0bHNfdGVzdF9jYV9jcnQ7CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9jcnRfbGVuOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBtYmVkdGxzX3Rlc3RfY2Ffa2V5OworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2Ffa2V5X2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICogbWJlZHRsc190ZXN0X2NhX3B3ZDsKK2V4dGVybiBjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NhX3B3ZF9sZW47CitleHRlcm4gY29uc3QgY2hhciAqIG1iZWR0bHNfdGVzdF9zcnZfY3J0OworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9sZW47CitleHRlcm4gY29uc3QgY2hhciAqIG1iZWR0bHNfdGVzdF9zcnZfa2V5OworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9sZW47CitleHRlcm4gY29uc3QgY2hhciAqIG1iZWR0bHNfdGVzdF9jbGlfY3J0OworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2xpX2NydF9sZW47CitleHRlcm4gY29uc3QgY2hhciAqIG1iZWR0bHNfdGVzdF9jbGlfa2V5OworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2xpX2tleV9sZW47CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKK2V4dGVybiBjb25zdCBjaGFyICAgbWJlZHRsc190ZXN0X2NhX2NydF9lY1tdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FfY3J0X2VjX2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICAgbWJlZHRsc190ZXN0X2NhX2tleV9lY1tdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2Ffa2V5X2VjX2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICAgbWJlZHRsc190ZXN0X2NhX3B3ZF9lY1tdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FfcHdkX2VjX2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICAgbWJlZHRsc190ZXN0X3Nydl9jcnRfZWNbXTsKK2V4dGVybiBjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X3Nydl9jcnRfZWNfbGVuOworZXh0ZXJuIGNvbnN0IGNoYXIgICBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9lY1tdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9lY19sZW47CitleHRlcm4gY29uc3QgY2hhciAgIG1iZWR0bHNfdGVzdF9jbGlfY3J0X2VjW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jbGlfY3J0X2VjX2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICAgbWJlZHRsc190ZXN0X2NsaV9rZXlfZWNbXTsKK2V4dGVybiBjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NsaV9rZXlfZWNfbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCitleHRlcm4gY29uc3QgY2hhciAgIG1iZWR0bHNfdGVzdF9jYV9jcnRfcnNhW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9jcnRfcnNhX2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICAgbWJlZHRsc190ZXN0X2NhX2tleV9yc2FbXTsKK2V4dGVybiBjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NhX2tleV9yc2FfbGVuOworZXh0ZXJuIGNvbnN0IGNoYXIgICBtYmVkdGxzX3Rlc3RfY2FfcHdkX3JzYVtdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FfcHdkX3JzYV9sZW47CitleHRlcm4gY29uc3QgY2hhciAgIG1iZWR0bHNfdGVzdF9zcnZfY3J0X3JzYVtdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9yc2FfbGVuOworZXh0ZXJuIGNvbnN0IGNoYXIgICBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9yc2FbXTsKK2V4dGVybiBjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X3Nydl9rZXlfcnNhX2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICAgbWJlZHRsc190ZXN0X2NsaV9jcnRfcnNhW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jbGlfY3J0X3JzYV9sZW47CitleHRlcm4gY29uc3QgY2hhciAgIG1iZWR0bHNfdGVzdF9jbGlfa2V5X3JzYVtdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2xpX2tleV9yc2FfbGVuOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBjZXJ0cy5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NoZWNrX2NvbmZpZy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jaGVja19jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTg2YzFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jaGVja19jb25maWcuaApAQCAtMCwwICsxLDYyOCBAQAorLyoqCisgKiBcZmlsZSBjaGVja19jb25maWcuaAorICoKKyAqIFxicmllZiBDb25zaXN0ZW5jeSBjaGVja3MgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKgorICogSXQgaXMgcmVjb21tZW5kZWQgdG8gaW5jbHVkZSB0aGlzIGZpbGUgZnJvbSB5b3VyIGNvbmZpZy5oCisgKiBpbiBvcmRlciB0byBjYXRjaCBkZXBlbmRlbmN5IGlzc3VlcyBlYXJseS4KKyAqLworCisjaWZuZGVmIE1CRURUTFNfQ0hFQ0tfQ09ORklHX0gKKyNkZWZpbmUgTUJFRFRMU19DSEVDS19DT05GSUdfSAorCisvKgorICogV2UgYXNzdW1lIENIQVJfQklUIGlzIDggaW4gbWFueSBwbGFjZXMuIEluIHByYWN0aWNlLCB0aGlzIGlzIHRydWUgb24gb3VyCisgKiB0YXJnZXQgcGxhdGZvcm1zLCBzbyBub3QgYW4gaXNzdWUsIGJ1dCBsZXQncyBqdXN0IGJlIGV4dHJhIHN1cmUuCisgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiBDSEFSX0JJVCAhPSA4CisjZXJyb3IgIm1iZWQgVExTIHJlcXVpcmVzIGEgcGxhdGZvcm0gd2l0aCA4LWJpdCBjaGFycyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX0MgaXMgcmVxdWlyZWQgb24gV2luZG93cyIKKyNlbmRpZgorCisvKiBGaXggdGhlIGNvbmZpZyBoZXJlLiBOb3QgY29udmVuaWVudCB0byBwdXQgYW4gI2lmZGVmIF9XSU4zMiBpbiBjb25maWcuaCBhcworICogaXQgd291bGQgY29uZnVzZSBjb25maWcucGwuICovCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQpICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPKQorI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVAorI2VuZGlmCisjZW5kaWYgLyogX1dJTjMyICovCisKKyNpZiBkZWZpbmVkKFRBUkdFVF9MSUtFX01CRUQpICYmIFwKKyAgICAoIGRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgZGVmaW5lZChNQkVEVExTX1RJTUlOR19DKSApCisjZXJyb3IgIlRoZSBORVQgYW5kIFRJTUlORyBtb2R1bGVzIGFyZSBub3QgYXZhaWxhYmxlIGZvciBtYmVkIE9TIC0gcGxlYXNlIHVzZSB0aGUgbmV0d29yayBhbmQgdGltaW5nIGZ1bmN0aW9ucyBwcm92aWRlZCBieSBtYmVkIE9TIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HKSAmJiBcCisgICAgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fY2xhbmdfXykKKyNlcnJvciAiTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcgb25seSB3b3JrcyB3aXRoIEdDQyBhbmQgQ2xhbmciCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUVfREFURSkgJiYgIWRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisjZXJyb3IgIk1CRURUTFNfSEFWRV9USU1FX0RBVEUgd2l0aG91dCBNQkVEVExTX0hBVkVfVElNRSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTTklfQykgJiYgIWRlZmluZWQoTUJFRFRMU19IQVZFX0FTTSkKKyNlcnJvciAiTUJFRFRMU19BRVNOSV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKSAmJiAhZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2Vycm9yICJNQkVEVExTX0NUUl9EUkJHX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQorI2Vycm9yICJNQkVEVExTX0RITV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DTUFDX0MpICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0FFU19DKSAmJiAhZGVmaW5lZChNQkVEVExTX0RFU19DKQorI2Vycm9yICJNQkVEVExTX0NNQUNfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSAmJiAhZGVmaW5lZChNQkVEVExTX0VDUF9DKQorI2Vycm9yICJNQkVEVExTX0VDREhfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgJiYgICAgICAgICAgICBcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX0VDUF9DKSB8fCAgICAgICAgICAgXAorICAgICAgIWRlZmluZWQoTUJFRFRMU19BU04xX1BBUlNFX0MpIHx8ICAgIFwKKyAgICAgICFkZWZpbmVkKE1CRURUTFNfQVNOMV9XUklURV9DKSApCisjZXJyb3IgIk1CRURUTFNfRUNEU0FfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNKUEFLRV9DKSAmJiAgICAgICAgICAgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19FQ1BfQykgfHwgIWRlZmluZWQoTUJFRFRMU19NRF9DKSApCisjZXJyb3IgIk1CRURUTFNfRUNKUEFLRV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDKSAmJiAhZGVmaW5lZChNQkVEVExTX0hNQUNfRFJCR19DKQorI2Vycm9yICJNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKSAmJiAoICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICggICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEKSAmJiAgICAgICAgICAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCkgJiYgICAgICAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEKSAmJiAgICAgICAgICAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQpICAgJiYgICAgICAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVEKSAgICYmICAgICAgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRCkgICAmJiAgICAgICAgICAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCkgJiYgICAgICAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEKSApICkKKyNlcnJvciAiTUJFRFRMU19FQ1BfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiAoIWRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykgJiYgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSkKKyNlcnJvciAiTUJFRFRMU19FTlRST1BZX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpICYmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykgJiYgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOKSAmJiAoTUJFRFRMU19DVFJfRFJCR19FTlRST1BZX0xFTiA+IDY0KQorI2Vycm9yICJNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOIHZhbHVlIHRvbyBoaWdoIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0ZPUkNFX1NIQTI1NikgKSBcCisgICAgJiYgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOKSAmJiAoTUJFRFRMU19DVFJfRFJCR19FTlRST1BZX0xFTiA+IDMyKQorI2Vycm9yICJNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOIHZhbHVlIHRvbyBoaWdoIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0ZPUkNFX1NIQTI1NikgJiYgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyNlcnJvciAiTUJFRFRMU19FTlRST1BZX0ZPUkNFX1NIQTI1NiBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkpICYmIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTKSApCisjZXJyb3IgIk1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSkgJiYgXAorICAgICAoIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpIHx8IGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVCkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykgKQorI2Vycm9yICJNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZIGRlZmluZWQsIGJ1dCBlbnRyb3B5IHNvdXJjZXMgdG9vIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpICYmICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAhZGVmaW5lZChNQkVEVExTX0FFU19DKSAmJiAhZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpICkKKyNlcnJvciAiTUJFRFRMU19HQ01fQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRUdFX0MpICYmICFkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisjZXJyb3IgIk1CRURUTFNfSEFWRUdFX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hNQUNfRFJCR19DKSAmJiAhZGVmaW5lZChNQkVEVExTX01EX0MpCisjZXJyb3IgIk1CRURUTFNfSE1BQ19EUkJHX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICBcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX0VDREhfQykgfHwgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSApCisjZXJyb3IgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICBcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX0VDREhfQykgfHwgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSApCisjZXJyb3IgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQpICYmICFkZWZpbmVkKE1CRURUTFNfREhNX0MpCisjZXJyb3IgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKSAmJiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VDREhfQykKKyNlcnJvciAiTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICAgIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfREhNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICAgICAgICAgICBcCisgICAgICAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KSApCisjZXJyb3IgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSAmJiAgICAgICAgICAgICAgICAgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICAgICAgICAgIFwKKyAgICAgICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpICkKKyNlcnJvciAiTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKSAmJiAgICAgICAgICAgICAgICAgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgfHwgICAgICAgICAgXAorICAgICAgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSApCisjZXJyb3IgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICAgIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykgfHwgXAorICAgICAgIWRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpICkKKyNlcnJvciAiTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpIHx8IFwKKyAgICAgICFkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KSApCisjZXJyb3IgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKSAmJiAgICAgICAgICAgICAgICAgICAgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19FQ0pQQUtFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpIHx8ICAgICAgXAorICAgICAgIWRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQpICkKKyNlcnJvciAiTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpICYmICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTUVNT1JZKSApCisjZXJyb3IgIk1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QQURMT0NLX0MpICYmICFkZWZpbmVkKE1CRURUTFNfSEFWRV9BU00pCisjZXJyb3IgIk1CRURUTFNfUEFETE9DS19DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykgJiYgIWRlZmluZWQoTUJFRFRMU19CQVNFNjRfQykKKyNlcnJvciAiTUJFRFRMU19QRU1fUEFSU0VfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpICYmICFkZWZpbmVkKE1CRURUTFNfQkFTRTY0X0MpCisjZXJyb3IgIk1CRURUTFNfUEVNX1dSSVRFX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX0MpICYmIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmICFkZWZpbmVkKE1CRURUTFNfRUNQX0MpICkKKyNlcnJvciAiTUJFRFRMU19QS19DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKSAmJiAhZGVmaW5lZChNQkVEVExTX1BLX0MpCisjZXJyb3IgIk1CRURUTFNfUEtfUEFSU0VfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfV1JJVEVfQykgJiYgIWRlZmluZWQoTUJFRFRMU19QS19DKQorI2Vycm9yICJNQkVEVExTX1BLX1dSSVRFX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxMV9DKSAmJiAhZGVmaW5lZChNQkVEVExTX1BLX0MpCisjZXJyb3IgIk1CRURUTFNfUEtDUzExX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUKSAmJiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0VYSVRfTUFDUk8pICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9FWElUX01BQ1JPIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9FWElUX01BQ1JPKSAmJlwKKyAgICAoIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfRVhJVCkgfHxcCisgICAgICAgIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9FWElUX0FMVCkgKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX0VYSVRfTUFDUk8gYW5kIE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVQvTUJFRFRMU19QTEFURk9STV9FWElUX0FMVCBjYW5ub3QgYmUgZGVmaW5lZCBzaW11bHRhbmVvdXNseSIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUKSAmJlwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykgfHxcCisgICAgICAgICFkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKSApCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1RJTUVfTUFDUk8pICYmXAorICAgICggIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKSB8fFwKKyAgICAgICAgIWRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpICkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9USU1FX01BQ1JPIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9USU1FX1RZUEVfTUFDUk8pICYmXAorICAgICggIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKSB8fFwKKyAgICAgICAgIWRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpICkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9USU1FX1RZUEVfTUFDUk8gZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1RJTUVfTUFDUk8pICYmXAorICAgICggZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FKSB8fFwKKyAgICAgICAgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUKSApCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fVElNRV9NQUNSTyBhbmQgTUJFRFRMU19QTEFURk9STV9TVERfVElNRS9NQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUIGNhbm5vdCBiZSBkZWZpbmVkIHNpbXVsdGFuZW91c2x5IgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fVElNRV9UWVBFX01BQ1JPKSAmJlwKKyAgICAoIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfVElNRSkgfHxcCisgICAgICAgIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9USU1FX0FMVCkgKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1RJTUVfVFlQRV9NQUNSTyBhbmQgTUJFRFRMU19QTEFURk9STV9TVERfVElNRS9NQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUIGNhbm5vdCBiZSBkZWZpbmVkIHNpbXVsdGFuZW91c2x5IgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQpICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX0FMVCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTykgJiYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfTUFDUk8gZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfTUFDUk8pICYmXAorICAgICggZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9GUFJJTlRGKSB8fFwKKyAgICAgICAgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUKSApCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTyBhbmQgTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URi9NQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUIGNhbm5vdCBiZSBkZWZpbmVkIHNpbXVsdGFuZW91c2x5IgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTykgJiZcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTUVNT1JZKSApCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTykgJiZcCisgICAgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9GUkVFKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX0ZSRUVfTUFDUk8gYW5kIE1CRURUTFNfUExBVEZPUk1fU1REX0ZSRUUgY2Fubm90IGJlIGRlZmluZWQgc2ltdWx0YW5lb3VzbHkiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9GUkVFX01BQ1JPKSAmJiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0NBTExPQ19NQUNSTykKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9DQUxMT0NfTUFDUk8gbXVzdCBiZSBkZWZpbmVkIGlmIE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTyBpcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0NBTExPQ19NQUNSTykgJiZcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTUVNT1JZKSApCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fQ0FMTE9DX01BQ1JPIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DQUxMT0NfTUFDUk8pICYmXAorICAgIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfQ0FMTE9DKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX0NBTExPQ19NQUNSTyBhbmQgTUJFRFRMU19QTEFURk9STV9TVERfQ0FMTE9DIGNhbm5vdCBiZSBkZWZpbmVkIHNpbXVsdGFuZW91c2x5IgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQ0FMTE9DX01BQ1JPKSAmJiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0ZSRUVfTUFDUk8pCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTyBtdXN0IGJlIGRlZmluZWQgaWYgTUJFRFRMU19QTEFURk9STV9DQUxMT0NfTUFDUk8gaXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9NRU1PUlkpICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9NRU1PUlkgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQpICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9QUklOVEZfTUFDUk8pICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9QUklOVEZfTUFDUk8gZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9NQUNSTykgJiZcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URikgfHxcCisgICAgICAgIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUKSApCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fUFJJTlRGX01BQ1JPIGFuZCBNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYvTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUIGNhbm5vdCBiZSBkZWZpbmVkIHNpbXVsdGFuZW91c2x5IgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUKSAmJiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9NQUNSTykgJiYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9NQUNSTykgJiZcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX1NOUFJJTlRGKSB8fFwKKyAgICAgICAgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCkgKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPIGFuZCBNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URi9NQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCBjYW5ub3QgYmUgZGVmaW5lZCBzaW11bHRhbmVvdXNseSIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9NRU1fSERSKSAmJlwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU1REX01FTV9IRFIgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MpICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTUVNT1JZKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MpICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTUVNT1JZKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9GUkVFKSAmJiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX01FTU9SWSkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9TVERfRlJFRSBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVQpICYmXAorICAgICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU1REX0VYSVQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FKSAmJlwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQpIHx8XAorICAgICAgICAhZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkgKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URikgJiZcCisgICAgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX0FMVCkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URiBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URikgJiZcCisgICAgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URikgJiZcCisgICAgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU1REX1NOUFJJTlRGIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpICYmXAorICAgICggIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgKQorI2Vycm9yICJNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQpICYmXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9SRUFEKSAmJlwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1JFQUQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1dSSVRFKSAmJlwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1dSSVRFIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX1JFQURfTUFDUk8pICYmXAorICAgICggZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1JFQUQpIHx8XAorICAgICAgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUKSApCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9SRUFEX01BQ1JPIGFuZCBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1JFQUQgY2Fubm90IGJlIGRlZmluZWQgc2ltdWx0YW5lb3VzbHkiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX1dSSVRFX01BQ1JPKSAmJlwKKyAgICAoIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9XUklURSkgfHxcCisgICAgICBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQpICkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX1dSSVRFX01BQ1JPIGFuZCBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1dSSVRFIGNhbm5vdCBiZSBkZWZpbmVkIHNpbXVsdGFuZW91c2x5IgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmICggIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19PSURfQykgKQorI2Vycm9yICJNQkVEVExTX1JTQV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykgJiYgKCAhZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkgJiYgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpICkKKyNlcnJvciAiTUJFRFRMU19SU0FfQyBkZWZpbmVkLCBidXQgbm9uZSBvZiB0aGUgUEtDUzEgdmVyc2lvbnMgZW5hYmxlZCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUKSAmJiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjIxKSApCisjZXJyb3IgIk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSAmJiAoICFkZWZpbmVkKE1CRURUTFNfTUQ1X0MpIHx8ICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TSEExX0MpICkKKyNlcnJvciAiTUJFRFRMU19TU0xfUFJPVE9fU1NMMyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpICYmICggIWRlZmluZWQoTUJFRFRMU19NRDVfQykgfHwgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NIQTFfQykgKQorI2Vycm9yICJNQkVEVExTX1NTTF9QUk9UT19UTFMxIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSAmJiAoICFkZWZpbmVkKE1CRURUTFNfTUQ1X0MpIHx8ICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TSEExX0MpICkKKyNlcnJvciAiTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKSAmJiAoICFkZWZpbmVkKE1CRURUTFNfU0hBMV9DKSAmJiAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpICYmICFkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpICkKKyNlcnJvciAiTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykgICAgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2Vycm9yICJNQkVEVExTX1NTTF9QUk9UT19EVExTIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpICYmICFkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKQorI2Vycm9yICJNQkVEVExTX1NTTF9DTElfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKSAmJiAoICFkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX0MpIHx8ICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19NRF9DKSApCisjZXJyb3IgIk1CRURUTFNfU1NMX1RMU19DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpICYmICFkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKQorI2Vycm9yICJNQkVEVExTX1NTTF9TUlZfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKSAmJiAoIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpICYmICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikpCisjZXJyb3IgIk1CRURUTFNfU1NMX1RMU19DIGRlZmluZWQsIGJ1dCBubyBwcm90b2NvbHMgYXJlIGFjdGl2ZSIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykgJiYgKGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSAmJiAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSkKKyNlcnJvciAiSWxsZWdhbCBwcm90b2NvbCBzZWxlY3Rpb24iCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpICYmIChkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikgJiYgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSkKKyNlcnJvciAiSWxsZWdhbCBwcm90b2NvbCBzZWxlY3Rpb24iCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpICYmIChkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikgJiYgKCFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpKSkKKyNlcnJvciAiSWxsZWdhbCBwcm90b2NvbCBzZWxlY3Rpb24iCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpICYmICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisjZXJyb3IgIk1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZICBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UpICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkKKyNlcnJvciAiTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRSAgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKSB8fCAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKSApCisjZXJyb3IgIk1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkgIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpICkKKyNlcnJvciAiTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQgIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykgJiYgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgICAmJiAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpICYmICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyNlcnJvciAiTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1c2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCkgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpICAgJiYgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgJiYgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyNlcnJvciAiTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1c2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVElDS0VUX0MpICYmICFkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX0MpCisjZXJyb3IgIk1CRURUTFNfU1NMX1RJQ0tFVF9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcpICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSAmJiAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKQorI2Vycm9yICJNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pICYmIFwKKyAgICAgICAgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorI2Vycm9yICJNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRCkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKSB8fCBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0lNUEwpCisjZXJyb3IgIk1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorI2RlZmluZSBNQkVEVExTX1RIUkVBRElOR19JTVBMCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQUxUKQorI2lmICFkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpIHx8IGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfSU1QTCkKKyNlcnJvciAiTUJFRFRMU19USFJFQURJTkdfQUxUIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKyNkZWZpbmUgTUJFRFRMU19USFJFQURJTkdfSU1QTAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpICYmICFkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0lNUEwpCisjZXJyb3IgIk1CRURUTFNfVEhSRUFESU5HX0MgZGVmaW5lZCwgc2luZ2xlIHRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlZCIKKyNlbmRpZgorI3VuZGVmIE1CRURUTFNfVEhSRUFESU5HX0lNUEwKKworI2lmIGRlZmluZWQoTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTKSAmJiAhZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fQykKKyNlcnJvciAiTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1VTRV9DKSAmJiAoICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19PSURfQykgfHwgIWRlZmluZWQoTUJFRFRMU19BU04xX1BBUlNFX0MpIHx8ICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykgKQorI2Vycm9yICJNQkVEVExTX1g1MDlfVVNFX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JFQVRFX0MpICYmICggIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX09JRF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0FTTjFfV1JJVEVfQykgfHwgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUEtfV1JJVEVfQykgKQorI2Vycm9yICJNQkVEVExTX1g1MDlfQ1JFQVRFX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpICYmICggIWRlZmluZWQoTUJFRFRMU19YNTA5X1VTRV9DKSApCisjZXJyb3IgIk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQykgJiYgKCAhZGVmaW5lZChNQkVEVExTX1g1MDlfVVNFX0MpICkKKyNlcnJvciAiTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DKSAmJiAoICFkZWZpbmVkKE1CRURUTFNfWDUwOV9VU0VfQykgKQorI2Vycm9yICJNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MpICYmICggIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSRUFURV9DKSApCisjZXJyb3IgIk1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQykgJiYgKCAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JFQVRFX0MpICkKKyNlcnJvciAiTUJFRFRMU19YNTA5X0NTUl9XUklURV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworLyoKKyAqIEF2b2lkIHdhcm5pbmcgZnJvbSAtcGVkYW50aWMuIFRoaXMgaXMgYSBjb252ZW5pZW50IHBsYWNlIGZvciB0aGlzCisgKiB3b3JrYXJvdW5kIHNpbmNlIHRoaXMgaXMgaW5jbHVkZWQgYnkgZXZlcnkgc2luZ2xlIGZpbGUgYmVmb3JlIHRoZQorICogI2lmIGRlZmluZWQoTUJFRFRMU194eHhfQykgdGhhdCByZXN1bHRzIGluIGVtdHB5IHRyYW5zbGF0aW9uIHVuaXRzLgorICovCit0eXBlZGVmIGludCBtYmVkdGxzX2lzb19jX2ZvcmJpZHNfZW1wdHlfdHJhbnNsYXRpb25fdW5pdHM7CisKKyNlbmRpZiAvKiBNQkVEVExTX0NIRUNLX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NpcGhlci5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jaXBoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTJlMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jaXBoZXIuaApAQCAtMCwwICsxLDcwOSBAQAorLyoqCisgKiBcZmlsZSBjaXBoZXIuaAorICoKKyAqIFxicmllZiBHZW5lcmljIGNpcGhlciB3cmFwcGVyLgorICoKKyAqIFxhdXRob3IgQWRyaWFhbiBkZSBKb25nIDxkZWpvbmdAZm94LWl0LmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmbmRlZiBNQkVEVExTX0NJUEhFUl9ICisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykgfHwgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX0FFQUQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfTU9ERV9TVFJFQU0KKyNlbmRpZgorCisjaWYgKCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgfHwgZGVmaW5lZChfTVNDX1ZFUikgKSAmJiBcCisgICAgIWRlZmluZWQoaW5saW5lKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUgaW5saW5lIF9faW5saW5lCisjZW5kaWYKKworI2RlZmluZSBNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRSAgICAgICAgICAgIC0weDYwODAgIC8qKjwgVGhlIHNlbGVjdGVkIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICAgICAgICAgICAgICAgICAtMHg2MTAwICAvKio8IEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9DSVBIRVJfQUxMT0NfRkFJTEVEICAgICAgICAgICAgICAgICAgIC0weDYxODAgIC8qKjwgRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORyAgICAgICAgICAgICAgICAtMHg2MjAwICAvKio8IElucHV0IGRhdGEgY29udGFpbnMgaW52YWxpZCBwYWRkaW5nIGFuZCBpcyByZWplY3RlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQgICAgICAgICAgICAtMHg2MjgwICAvKio8IERlY3J5cHRpb24gb2YgYmxvY2sgcmVxdWlyZXMgYSBmdWxsIGJsb2NrLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQgICAgICAgICAgICAgICAgICAgIC0weDYzMDAgIC8qKjwgQXV0aGVudGljYXRpb24gZmFpbGVkIChmb3IgQUVBRCBtb2RlcykuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX0NPTlRFWFQgICAgICAgICAgICAgIC0weDYzODAgIC8qKjwgVGhlIGNvbnRleHQgaXMgaW52YWxpZCwgZWcgYmVjYXVzZSBpdCB3YXMgZnJlZSgpZWQuICovCisKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOICAgICAweDAxICAgIC8qKjwgQ2lwaGVyIGFjY2VwdHMgSVZzIG9mIHZhcmlhYmxlIGxlbmd0aCAqLworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9LRVlfTEVOICAgIDB4MDIgICAgLyoqPCBDaXBoZXIgYWNjZXB0cyBrZXlzIG9mIHZhcmlhYmxlIGxlbmd0aCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgZW51bSB7CisgICAgTUJFRFRMU19DSVBIRVJfSURfTk9ORSA9IDAsCisgICAgTUJFRFRMU19DSVBIRVJfSURfTlVMTCwKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9BRVMsCisgICAgTUJFRFRMU19DSVBIRVJfSURfREVTLAorICAgIE1CRURUTFNfQ0lQSEVSX0lEXzNERVMsCisgICAgTUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUEsCisgICAgTUJFRFRMU19DSVBIRVJfSURfQkxPV0ZJU0gsCisgICAgTUJFRFRMU19DSVBIRVJfSURfQVJDNCwKK30gbWJlZHRsc19jaXBoZXJfaWRfdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBNQkVEVExTX0NJUEhFUl9OT05FID0gMCwKKyAgICBNQkVEVExTX0NJUEhFUl9OVUxMLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4LAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0ZCMTI4LAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0ZCMTI4LAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ1RSLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ1RSLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9FQ0IsCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0VDQiwKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfRUNCLAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQywKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDLAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjgsCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NGQjEyOCwKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0ZCMTI4LAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFIsCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NUUiwKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ1RSLAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00sCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTSwKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNLAorICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FQ0IsCisgICAgTUJFRFRMU19DSVBIRVJfREVTX0NCQywKKyAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFX0VDQiwKKyAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQywKKyAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19FQ0IsCisgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDLAorICAgIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQiwKKyAgICBNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkMsCisgICAgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQsCisgICAgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSLAorICAgIE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4LAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNLAorICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ00sCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NDTSwKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0NNLAorfSBtYmVkdGxzX2NpcGhlcl90eXBlX3Q7CisKK3R5cGVkZWYgZW51bSB7CisgICAgTUJFRFRMU19NT0RFX05PTkUgPSAwLAorICAgIE1CRURUTFNfTU9ERV9FQ0IsCisgICAgTUJFRFRMU19NT0RFX0NCQywKKyAgICBNQkVEVExTX01PREVfQ0ZCLAorICAgIE1CRURUTFNfTU9ERV9PRkIsIC8qIFVudXNlZCEgKi8KKyAgICBNQkVEVExTX01PREVfQ1RSLAorICAgIE1CRURUTFNfTU9ERV9HQ00sCisgICAgTUJFRFRMU19NT0RFX1NUUkVBTSwKKyAgICBNQkVEVExTX01PREVfQ0NNLAorfSBtYmVkdGxzX2NpcGhlcl9tb2RlX3Q7CisKK3R5cGVkZWYgZW51bSB7CisgICAgTUJFRFRMU19QQURESU5HX1BLQ1M3ID0gMCwgICAgIC8qKjwgUEtDUzcgcGFkZGluZyAoZGVmYXVsdCkgICAgICAgICovCisgICAgTUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MsIC8qKjwgSVNPL0lFQyA3ODE2LTQgcGFkZGluZyAgICAgICAgICovCisgICAgTUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4sIC8qKjwgQU5TSSBYLjkyMyBwYWRkaW5nICAgICAgICAgICAgICovCisgICAgTUJFRFRMU19QQURESU5HX1pFUk9TLCAgICAgICAgIC8qKjwgemVybyBwYWRkaW5nIChub3QgcmV2ZXJzaWJsZSEpICovCisgICAgTUJFRFRMU19QQURESU5HX05PTkUsICAgICAgICAgIC8qKjwgbmV2ZXIgcGFkIChmdWxsIGJsb2NrcyBvbmx5KSAgICovCit9IG1iZWR0bHNfY2lwaGVyX3BhZGRpbmdfdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBNQkVEVExTX09QRVJBVElPTl9OT05FID0gLTEsCisgICAgTUJFRFRMU19ERUNSWVBUID0gMCwKKyAgICBNQkVEVExTX0VOQ1JZUFQsCit9IG1iZWR0bHNfb3BlcmF0aW9uX3Q7CisKK2VudW0geworICAgIC8qKiBVbmRlZmluZWQga2V5IGxlbmd0aCAqLworICAgIE1CRURUTFNfS0VZX0xFTkdUSF9OT05FID0gMCwKKyAgICAvKiogS2V5IGxlbmd0aCwgaW4gYml0cyAoaW5jbHVkaW5nIHBhcml0eSksIGZvciBERVMga2V5cyAqLworICAgIE1CRURUTFNfS0VZX0xFTkdUSF9ERVMgID0gNjQsCisgICAgLyoqIEtleSBsZW5ndGgsIGluIGJpdHMgKGluY2x1ZGluZyBwYXJpdHkpLCBmb3IgREVTIGluIHR3byBrZXkgRURFICovCisgICAgTUJFRFRMU19LRVlfTEVOR1RIX0RFU19FREUgPSAxMjgsCisgICAgLyoqIEtleSBsZW5ndGgsIGluIGJpdHMgKGluY2x1ZGluZyBwYXJpdHkpLCBmb3IgREVTIGluIHRocmVlLWtleSBFREUgKi8KKyAgICBNQkVEVExTX0tFWV9MRU5HVEhfREVTX0VERTMgPSAxOTIsCit9OworCisvKiogTWF4aW11bSBsZW5ndGggb2YgYW55IElWLCBpbiBieXRlcyAqLworI2RlZmluZSBNQkVEVExTX01BWF9JVl9MRU5HVEggICAgICAxNgorLyoqIE1heGltdW0gYmxvY2sgc2l6ZSBvZiBhbnkgY2lwaGVyLCBpbiBieXRlcyAqLworI2RlZmluZSBNQkVEVExTX01BWF9CTE9DS19MRU5HVEggICAxNgorCisvKioKKyAqIEJhc2UgY2lwaGVyIGluZm9ybWF0aW9uIChvcGFxdWUgc3RydWN0KS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19jaXBoZXJfYmFzZV90IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdDsKKworLyoqCisgKiBDTUFDIGNvbnRleHQgKG9wYXF1ZSBzdHJ1Y3QpLgorICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX2NtYWNfY29udGV4dF90IG1iZWR0bHNfY21hY19jb250ZXh0X3Q7CisKKy8qKgorICogQ2lwaGVyIGluZm9ybWF0aW9uLiBBbGxvd3MgY2lwaGVyIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgaW4gYSBnZW5lcmljIHdheS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBGdWxsIGNpcGhlciBpZGVudGlmaWVyIChlLmcuIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDKSAqLworICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCB0eXBlOworCisgICAgLyoqIENpcGhlciBtb2RlIChlLmcuIE1CRURUTFNfTU9ERV9DQkMpICovCisgICAgbWJlZHRsc19jaXBoZXJfbW9kZV90IG1vZGU7CisKKyAgICAvKiogQ2lwaGVyIGtleSBsZW5ndGgsIGluIGJpdHMgKGRlZmF1bHQgbGVuZ3RoIGZvciB2YXJpYWJsZSBzaXplZCBjaXBoZXJzKQorICAgICAqICAoSW5jbHVkZXMgcGFyaXR5IGJpdHMgZm9yIGNpcGhlcnMgbGlrZSBERVMpICovCisgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW47CisKKyAgICAvKiogTmFtZSBvZiB0aGUgY2lwaGVyICovCisgICAgY29uc3QgY2hhciAqIG5hbWU7CisKKyAgICAvKiogSVYvTk9OQ0Ugc2l6ZSwgaW4gYnl0ZXMuCisgICAgICogIEZvciBjaXBoZXIgdGhhdCBhY2NlcHQgbWFueSBzaXplczogcmVjb21tZW5kZWQgc2l6ZSAqLworICAgIHVuc2lnbmVkIGludCBpdl9zaXplOworCisgICAgLyoqIEZsYWdzIGZvciB2YXJpYWJsZSBJViBzaXplLCB2YXJpYWJsZSBrZXkgc2l6ZSwgZXRjLiAqLworICAgIGludCBmbGFnczsKKworICAgIC8qKiBibG9jayBzaXplLCBpbiBieXRlcyAqLworICAgIHVuc2lnbmVkIGludCBibG9ja19zaXplOworCisgICAgLyoqIEJhc2UgY2lwaGVyIGluZm9ybWF0aW9uIGFuZCBmdW5jdGlvbnMgKi8KKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QgKmJhc2U7CisKK30gbWJlZHRsc19jaXBoZXJfaW5mb190OworCisvKioKKyAqIEdlbmVyaWMgY2lwaGVyIGNvbnRleHQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGFzc29jaWF0ZWQgY2lwaGVyICovCisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKworICAgIC8qKiBLZXkgbGVuZ3RoIHRvIHVzZSAqLworICAgIGludCBrZXlfYml0bGVuOworCisgICAgLyoqIE9wZXJhdGlvbiB0aGF0IHRoZSBjb250ZXh0J3Mga2V5IGhhcyBiZWVuIGluaXRpYWxpc2VkIGZvciAqLworICAgIG1iZWR0bHNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORykKKyAgICAvKiogUGFkZGluZyBmdW5jdGlvbnMgdG8gdXNlLCBpZiByZWxldmFudCBmb3IgY2lwaGVyIG1vZGUgKi8KKyAgICB2b2lkICgqYWRkX3BhZGRpbmcpKCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBvbGVuLCBzaXplX3QgZGF0YV9sZW4gKTsKKyAgICBpbnQgKCpnZXRfcGFkZGluZykoIHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwgc2l6ZV90ICpkYXRhX2xlbiApOworI2VuZGlmCisKKyAgICAvKiogQnVmZmVyIGZvciBkYXRhIHRoYXQgaGFzbid0IGJlZW4gZW5jcnlwdGVkIHlldCAqLworICAgIHVuc2lnbmVkIGNoYXIgdW5wcm9jZXNzZWRfZGF0YVtNQkVEVExTX01BWF9CTE9DS19MRU5HVEhdOworCisgICAgLyoqIE51bWJlciBvZiBieXRlcyB0aGF0IHN0aWxsIG5lZWQgcHJvY2Vzc2luZyAqLworICAgIHNpemVfdCB1bnByb2Nlc3NlZF9sZW47CisKKyAgICAvKiogQ3VycmVudCBJViBvciBOT05DRV9DT1VOVEVSIGZvciBDVFItbW9kZSAqLworICAgIHVuc2lnbmVkIGNoYXIgaXZbTUJFRFRMU19NQVhfSVZfTEVOR1RIXTsKKworICAgIC8qKiBJViBzaXplIGluIGJ5dGVzIChmb3IgY2lwaGVycyB3aXRoIHZhcmlhYmxlLWxlbmd0aCBJVnMpICovCisgICAgc2l6ZV90IGl2X3NpemU7CisKKyAgICAvKiogQ2lwaGVyLXNwZWNpZmljIGNvbnRleHQgKi8KKyAgICB2b2lkICpjaXBoZXJfY3R4OworCisjaWYgZGVmaW5lZChNQkVEVExTX0NNQUNfQykKKyAgICAvKiogQ01BQyBTcGVjaWZpYyBjb250ZXh0ICovCisgICAgbWJlZHRsc19jbWFjX2NvbnRleHRfdCAqY21hY19jdHg7CisjZW5kaWYKK30gbWJlZHRsc19jaXBoZXJfY29udGV4dF90OworCisvKioKKyAqIFxicmllZiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNpcGhlcnMgc3VwcG9ydGVkIGJ5IHRoZSBnZW5lcmljIGNpcGhlciBtb2R1bGUuCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhcnJheSBvZiBjaXBoZXJzLCB0aGUgbGFzdCBlbnRyeQorICogICAgICAgICAgICAgICAgICAgICAgaXMgMC4KKyAqLworY29uc3QgaW50ICptYmVkdGxzX2NpcGhlcl9saXN0KCB2b2lkICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2lwaGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBhc3NvY2lhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBjaXBoZXIgbmFtZS4KKyAqCisgKiBccGFyYW0gY2lwaGVyX25hbWUgICBOYW1lIG9mIHRoZSBjaXBoZXIgdG8gc2VhcmNoIGZvci4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICB0aGUgY2lwaGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBjaXBoZXJfbmFtZSwgb3IgTlVMTCBpZiBub3QgZm91bmQuCisgKi8KK2NvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3N0cmluZyggY29uc3QgY2hhciAqY2lwaGVyX25hbWUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjaXBoZXIgaW5mb3JtYXRpb24gc3RydWN0dXJlIGFzc29jaWF0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIGNpcGhlciB0eXBlLgorICoKKyAqIFxwYXJhbSBjaXBoZXJfdHlwZSAgIFR5cGUgb2YgdGhlIGNpcGhlciB0byBzZWFyY2ggZm9yLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIHRoZSBjaXBoZXIgaW5mb3JtYXRpb24gc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGNpcGhlcl90eXBlLCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICptYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY29uc3QgbWJlZHRsc19jaXBoZXJfdHlwZV90IGNpcGhlcl90eXBlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2lwaGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBhc3NvY2lhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBjaXBoZXIgaWQsIGtleSBzaXplIGFuZCBtb2RlLgorICoKKyAqIFxwYXJhbSBjaXBoZXJfaWQgICAgIElkIG9mIHRoZSBjaXBoZXIgdG8gc2VhcmNoIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgKGUuZy4gTUJFRFRMU19DSVBIRVJfSURfQUVTKQorICogXHBhcmFtIGtleV9iaXRsZW4gICAgTGVuZ3RoIG9mIHRoZSBrZXkgaW4gYml0cworICogXHBhcmFtIG1vZGUgICAgICAgICAgQ2lwaGVyIG1vZGUgKGUuZy4gTUJFRFRMU19NT0RFX0NCQykKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICB0aGUgY2lwaGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBjaXBoZXJfdHlwZSwgb3IgTlVMTCBpZiBub3QgZm91bmQuCisgKi8KK2NvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3ZhbHVlcyggY29uc3QgbWJlZHRsc19jaXBoZXJfaWRfdCBjaXBoZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV9iaXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfbW9kZV90IG1vZGUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBJbml0aWFsaXplIGEgY2lwaGVyX2NvbnRleHQgKGFzIE5PTkUpCisgKi8KK3ZvaWQgbWJlZHRsc19jaXBoZXJfaW5pdCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBGcmVlIGFuZCBjbGVhciB0aGUgY2lwaGVyLXNwZWNpZmljIGNvbnRleHQgb2YgY3R4LgorICogICAgICAgICAgICAgICAgICAgICAgRnJlZWluZyBjdHggaXRzZWxmIHJlbWFpbnMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgY2FsbGVyLgorICovCit2b2lkIG1iZWR0bHNfY2lwaGVyX2ZyZWUoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgSW5pdGlhbGlzZXMgYW5kIGZpbGxzIHRoZSBjaXBoZXIgY29udGV4dCBzdHJ1Y3R1cmUgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcHJvcHJpYXRlIHZhbHVlcy4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgICAgICBDdXJyZW50bHkgYWxzbyBjbGVhcnMgc3RydWN0dXJlLiBJbiBmdXR1cmUgdmVyc2lvbnMgeW91CisgKiAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHJlcXVpcmVkIHRvIGNhbGwgbWJlZHRsc19jaXBoZXJfaW5pdCgpIG9uIHRoZSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpcnN0LgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIGNvbnRleHQgdG8gaW5pdGlhbGlzZS4gTWF5IG5vdCBiZSBOVUxMLgorICogXHBhcmFtIGNpcGhlcl9pbmZvICAgY2lwaGVyIHRvIHVzZS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgb24gcGFyYW1ldGVyIGZhaWx1cmUsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQUxMT0NfRkFJTEVEIGlmIGFsbG9jYXRpb24gb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBjaXBoZXItc3BlY2lmaWMgY29udGV4dCBmYWlsZWQuCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9zZXR1cCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm8gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBibG9jayBzaXplIG9mIHRoZSBnaXZlbiBjaXBoZXIuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgY2lwaGVyJ3MgY29udGV4dC4gTXVzdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQuCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgc2l6ZSBvZiB0aGUgY2lwaGVyJ3MgYmxvY2tzLCBvciAwIGlmIGN0eCBoYXMgbm90IGJlZW4KKyAqICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpc2VkLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggY29uc3QgbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHggKQoreworICAgIGlmKCBOVUxMID09IGN0eCB8fCBOVUxMID09IGN0eC0+Y2lwaGVyX2luZm8gKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjdHgtPmNpcGhlcl9pbmZvLT5ibG9ja19zaXplOworfQorCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFJldHVybnMgdGhlIG1vZGUgb2Ygb3BlcmF0aW9uIGZvciB0aGUgY2lwaGVyLgorICogICAgICAgICAgICAgICAgICAgICAgKGUuZy4gTUJFRFRMU19NT0RFX0NCQykKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBjaXBoZXIncyBjb250ZXh0LiBNdXN0IGhhdmUgYmVlbiBpbml0aWFsaXNlZC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICBtb2RlIG9mIG9wZXJhdGlvbiwgb3IgTUJFRFRMU19NT0RFX05PTkUgaWYgY3R4CisgKiAgICAgICAgICAgICAgICAgICAgICBoYXMgbm90IGJlZW4gaW5pdGlhbGlzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgbWJlZHRsc19jaXBoZXJfbW9kZV90IG1iZWR0bHNfY2lwaGVyX2dldF9jaXBoZXJfbW9kZSggY29uc3QgbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHggKQoreworICAgIGlmKCBOVUxMID09IGN0eCB8fCBOVUxMID09IGN0eC0+Y2lwaGVyX2luZm8gKQorICAgICAgICByZXR1cm4gTUJFRFRMU19NT0RFX05PTkU7CisKKyAgICByZXR1cm4gY3R4LT5jaXBoZXJfaW5mby0+bW9kZTsKK30KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjaXBoZXIncyBJVi9OT05DRSBpbiBieXRlcy4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBjaXBoZXIncyBjb250ZXh0LiBNdXN0IGhhdmUgYmVlbiBpbml0aWFsaXNlZC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICBJZiBJViBoYXMgbm90IGJlZW4gc2V0IHlldDogKHJlY29tbWVuZGVkKSBJViBzaXplCisgKiAgICAgICAgICAgICAgICAgICAgICAoMCBmb3IgY2lwaGVycyBub3QgdXNpbmcgSVYvTk9OQ0UpLgorICogICAgICAgICAgICAgICAgICAgICAgSWYgSVYgaGFzIGFscmVhZHkgYmVlbiBzZXQ6IGFjdHVhbCBzaXplLgorICovCitzdGF0aWMgaW5saW5lIGludCBtYmVkdGxzX2NpcGhlcl9nZXRfaXZfc2l6ZSggY29uc3QgbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHggKQoreworICAgIGlmKCBOVUxMID09IGN0eCB8fCBOVUxMID09IGN0eC0+Y2lwaGVyX2luZm8gKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmKCBjdHgtPml2X3NpemUgIT0gMCApCisgICAgICAgIHJldHVybiAoaW50KSBjdHgtPml2X3NpemU7CisKKyAgICByZXR1cm4gKGludCkgY3R4LT5jaXBoZXJfaW5mby0+aXZfc2l6ZTsKK30KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBnaXZlbiBjaXBoZXIuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgY2lwaGVyJ3MgY29udGV4dC4gTXVzdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQuCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgdHlwZSBvZiB0aGUgY2lwaGVyLCBvciBNQkVEVExTX0NJUEhFUl9OT05FIGlmIGN0eCBoYXMKKyAqICAgICAgICAgICAgICAgICAgICAgIG5vdCBiZWVuIGluaXRpYWxpc2VkLgorICovCitzdGF0aWMgaW5saW5lIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCBtYmVkdGxzX2NpcGhlcl9nZXRfdHlwZSggY29uc3QgbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHggKQoreworICAgIGlmKCBOVUxMID09IGN0eCB8fCBOVUxMID09IGN0eC0+Y2lwaGVyX2luZm8gKQorICAgICAgICByZXR1cm4gTUJFRFRMU19DSVBIRVJfTk9ORTsKKworICAgIHJldHVybiBjdHgtPmNpcGhlcl9pbmZvLT50eXBlOworfQorCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGdpdmVuIGNpcGhlciwgYXMgYSBzdHJpbmcuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgY2lwaGVyJ3MgY29udGV4dC4gTXVzdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQuCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgbmFtZSBvZiB0aGUgY2lwaGVyLCBvciBOVUxMIGlmIGN0eCB3YXMgbm90IGluaXRpYWxpc2VkLgorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKm1iZWR0bHNfY2lwaGVyX2dldF9uYW1lKCBjb25zdCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCApCit7CisgICAgaWYoIE5VTEwgPT0gY3R4IHx8IE5VTEwgPT0gY3R4LT5jaXBoZXJfaW5mbyApCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGN0eC0+Y2lwaGVyX2luZm8tPm5hbWU7Cit9CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgUmV0dXJucyB0aGUga2V5IGxlbmd0aCBvZiB0aGUgY2lwaGVyLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIGNpcGhlcidzIGNvbnRleHQuIE11c3QgaGF2ZSBiZWVuIGluaXRpYWxpc2VkLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIGNpcGhlcidzIGtleSBsZW5ndGgsIGluIGJpdHMsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0tFWV9MRU5HVEhfTk9ORSBpZiBjdHggaGFzIG5vdCBiZWVuCisgKiAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXNlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbWJlZHRsc19jaXBoZXJfZ2V0X2tleV9iaXRsZW4oIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4ICkKK3sKKyAgICBpZiggTlVMTCA9PSBjdHggfHwgTlVMTCA9PSBjdHgtPmNpcGhlcl9pbmZvICkKKyAgICAgICAgcmV0dXJuIE1CRURUTFNfS0VZX0xFTkdUSF9OT05FOworCisgICAgcmV0dXJuIChpbnQpIGN0eC0+Y2lwaGVyX2luZm8tPmtleV9iaXRsZW47Cit9CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBnaXZlbiBjaXBoZXIuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgY2lwaGVyJ3MgY29udGV4dC4gTXVzdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQuCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgb3BlcmF0aW9uIChNQkVEVExTX0VOQ1JZUFQgb3IgTUJFRFRMU19ERUNSWVBUKSwKKyAqICAgICAgICAgICAgICAgICAgICAgIG9yIE1CRURUTFNfT1BFUkFUSU9OX05PTkUgaWYgY3R4IGhhcyBub3QgYmVlbgorICogICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGlzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgbWJlZHRsc19vcGVyYXRpb25fdCBtYmVkdGxzX2NpcGhlcl9nZXRfb3BlcmF0aW9uKCBjb25zdCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCApCit7CisgICAgaWYoIE5VTEwgPT0gY3R4IHx8IE5VTEwgPT0gY3R4LT5jaXBoZXJfaW5mbyApCisgICAgICAgIHJldHVybiBNQkVEVExTX09QRVJBVElPTl9OT05FOworCisgICAgcmV0dXJuIGN0eC0+b3BlcmF0aW9uOworfQorCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFNldCB0aGUga2V5IHRvIHVzZSB3aXRoIHRoZSBnaXZlbiBjb250ZXh0LgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIGdlbmVyaWMgY2lwaGVyIGNvbnRleHQuIE1heSBub3QgYmUgTlVMTC4gTXVzdCBoYXZlIGJlZW4KKyAqICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpc2VkIHVzaW5nIGNpcGhlcl9jb250ZXh0X2Zyb21fdHlwZSBvcgorICogICAgICAgICAgICAgICAgICAgICAgY2lwaGVyX2NvbnRleHRfZnJvbV9zdHJpbmcuCisgKiBccGFyYW0ga2V5ICAgICAgICAgICBUaGUga2V5IHRvIHVzZS4KKyAqIFxwYXJhbSBrZXlfYml0bGVuICAgIGtleSBsZW5ndGggdG8gdXNlLCBpbiBiaXRzLgorICogXHBhcmFtIG9wZXJhdGlvbiAgICAgT3BlcmF0aW9uIHRoYXQgdGhlIGtleSB3aWxsIGJlIHVzZWQgZm9yLCBlaXRoZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5DUllQVCBvciBNQkVEVExTX0RFQ1JZUFQuCisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgaWYKKyAqICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciB2ZXJpZmljYXRpb24gZmFpbHMgb3IgYSBjaXBoZXIgc3BlY2lmaWMKKyAqICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgaW50IGtleV9iaXRsZW4sIGNvbnN0IG1iZWR0bHNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBTZXQgcGFkZGluZyBtb2RlLCBmb3IgY2lwaGVyIG1vZGVzIHRoYXQgdXNlIHBhZGRpbmcuCisgKiAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogUEtDUzcgcGFkZGluZy4pCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgZ2VuZXJpYyBjaXBoZXIgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgICAgICAgcGFkZGluZyBtb2RlCisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRQorICogICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZWN0ZWQgcGFkZGluZyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgaWYgdGhlIGNpcGhlciBtb2RlCisgKiAgICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBzdXBwb3J0IHBhZGRpbmcuCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwgbWJlZHRsc19jaXBoZXJfcGFkZGluZ190IG1vZGUgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFNldCB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yIChJVikgb3Igbm9uY2UKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBnZW5lcmljIGNpcGhlciBjb250ZXh0CisgKiBccGFyYW0gaXYgICAgICAgICAgICBJViB0byB1c2UgKG9yIE5PTkNFX0NPVU5URVIgZm9yIENUUi1tb2RlIGNpcGhlcnMpCisgKiBccGFyYW0gaXZfbGVuICAgICAgICBJViBsZW5ndGggZm9yIGNpcGhlcnMgd2l0aCB2YXJpYWJsZS1zaXplIElWOworICogICAgICAgICAgICAgICAgICAgICAgZGlzY2FyZGVkIGJ5IGNpcGhlcnMgd2l0aCBmaXhlZC1zaXplIElWLgorICoKKyAqIFxyZXR1cm5zICAgICAgICAgICAgIDAgb24gc3VjY2Vzcywgb3IgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBCisgKgorICogXG5vdGUgICAgICAgICAgICAgICAgU29tZSBjaXBoZXJzIGRvbid0IHVzZSBJVnMgbm9yIE5PTkNFLiBGb3IgdGhlc2UKKyAqICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnMsIHRoaXMgZnVuY3Rpb24gaGFzIG5vIGVmZmVjdC4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX3NldF9pdiggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIHNpemVfdCBpdl9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBGaW5pc2ggcHJlcGFyYXRpb24gb2YgdGhlIGdpdmVuIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBnZW5lcmljIGNpcGhlciBjb250ZXh0CisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKyAqICAgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlciB2ZXJpZmljYXRpb24gZmFpbHMuCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9yZXNldCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHggKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgQWRkIGFkZGl0aW9uYWwgZGF0YSAoZm9yIEFFQUQgY2lwaGVycykuCisgKiAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgd2l0aCBHQ00uCisgKiAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UsIGFmdGVyIG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgZ2VuZXJpYyBjaXBoZXIgY29udGV4dAorICogXHBhcmFtIGFkICAgICAgICAgICAgQWRkaXRpb25hbCBkYXRhIHRvIHVzZS4KKyAqIFxwYXJhbSBhZF9sZW4gICAgICAgIExlbmd0aCBvZiBhZC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIG9yIGEgc3BlY2lmaWMgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWQsIHNpemVfdCBhZF9sZW4gKTsKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgR2VuZXJpYyBjaXBoZXIgdXBkYXRlIGZ1bmN0aW9uLiBFbmNyeXB0cy9kZWNyeXB0cworICogICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGdpdmVuIGNpcGhlciBjb250ZXh0LiBXcml0ZXMgYXMgbWFueSBibG9jaworICogICAgICAgICAgICAgICAgICAgICAgc2l6ZSdkIGJsb2NrcyBvZiBkYXRhIGFzIHBvc3NpYmxlIHRvIG91dHB1dC4gQW55IGRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2Fubm90IGJlIHdyaXR0ZW4gaW1tZWRpYXRlbHkgd2lsbCBlaXRoZXIgYmUgYWRkZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBuZXh0IGJsb2NrLCBvciBmbHVzaGVkIHdoZW4gY2lwaGVyX2ZpbmFsIGlzCisgKiAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb246IGZvciBNQkVEVExTX01PREVfRUNCLCBleHBlY3RzIHNpbmdsZSBibG9jaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBzaXplIChlLmcuIDE2IGJ5dGVzIGZvciBBRVMpCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgZ2VuZXJpYyBjaXBoZXIgY29udGV4dAorICogXHBhcmFtIGlucHV0ICAgICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICAgICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgICAgICAgYnVmZmVyIGZvciB0aGUgb3V0cHV0IGRhdGEuIFNob3VsZCBiZSBhYmxlIHRvIGhvbGQgYXQKKyAqICAgICAgICAgICAgICAgICAgICAgIGxlYXN0IGlsZW4gKyBibG9ja19zaXplLiBDYW5ub3QgYmUgdGhlIHNhbWUgYnVmZmVyIGFzCisgKiAgICAgICAgICAgICAgICAgICAgICBpbnB1dCEKKyAqIFxwYXJhbSBvbGVuICAgICAgICAgIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGRhdGEsIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgaWYKKyAqICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciB2ZXJpZmljYXRpb24gZmFpbHMsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRSBvbiBhbgorICogICAgICAgICAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQgbW9kZSBmb3IgYSBjaXBoZXIgb3IgYSBjaXBoZXIgc3BlY2lmaWMKKyAqICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGNvZGUuCisgKgorICogXG5vdGUgICAgICAgICAgICAgICAgSWYgdGhlIHVuZGVybHlpbmcgY2lwaGVyIGlzIEdDTSwgYWxsIGNhbGxzIHRvIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBleGNlcHQgdGhlIGxhc3Qgb25lIGJlZm9yZSBtYmVkdGxzX2NpcGhlcl9maW5pc2goKSwKKyAqICAgICAgICAgICAgICAgICAgICAgIG11c3QgaGF2ZSBpbGVuIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUuCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl91cGRhdGUoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgaWxlbiwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBHZW5lcmljIGNpcGhlciBmaW5hbGlzYXRpb24gZnVuY3Rpb24uIElmIGRhdGEgc3RpbGwKKyAqICAgICAgICAgICAgICAgICAgICAgIG5lZWRzIHRvIGJlIGZsdXNoZWQgZnJvbSBhbiBpbmNvbXBsZXRlIGJsb2NrLCBkYXRhCisgKiAgICAgICAgICAgICAgICAgICAgICBjb250YWluZWQgd2l0aGluIGl0IHdpbGwgYmUgcGFkZGVkIHdpdGggdGhlIHNpemUgb2YKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXN0IGJsb2NrLCBhbmQgd3JpdHRlbiB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBHZW5lcmljIGNpcGhlciBjb250ZXh0CisgKiBccGFyYW0gb3V0cHV0ICAgICAgICBidWZmZXIgdG8gd3JpdGUgZGF0YSB0by4gTmVlZHMgYmxvY2tfc2l6ZSBhdmFpbGFibGUuCisgKiBccGFyYW0gb2xlbiAgICAgICAgICBsZW5ndGggb2YgdGhlIGRhdGEgd3JpdHRlbiB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAqCisgKiBccmV0dXJucyAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSBpZgorICogICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBmYWlscywKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVEIGlmIGRlY3J5cHRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkIGEgZnVsbCBibG9jayBidXQgd2FzIG5vdCBwcm92aWRlZCBvbmUsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HIG9uIGludmFsaWQgcGFkZGluZworICogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgZGVjcnlwdGluZyBvciBhIGNpcGhlciBzcGVjaWZpYyBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19jaXBoZXJfZmluaXNoKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBXcml0ZSB0YWcgZm9yIEFFQUQgY2lwaGVycy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCB3aXRoIEdDTS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgY2FsbGVkIGFmdGVyIG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCgpLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEdlbmVyaWMgY2lwaGVyIGNvbnRleHQKKyAqIFxwYXJhbSB0YWcgICAgICAgICAgIGJ1ZmZlciB0byB3cml0ZSB0aGUgdGFnCisgKiBccGFyYW0gdGFnX2xlbiAgICAgICBMZW5ndGggb2YgdGhlIHRhZyB0byB3cml0ZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgb24gc3VjY2Vzcywgb3IgYSBzcGVjaWZpYyBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19jaXBoZXJfd3JpdGVfdGFnKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCB0YWdfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgQ2hlY2sgdGFnIGZvciBBRUFEIGNpcGhlcnMuCisgKiAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgd2l0aCBHQ00uCisgKiAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGNhbGxlZCBhZnRlciBtYmVkdGxzX2NpcGhlcl9maW5pc2goKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBHZW5lcmljIGNpcGhlciBjb250ZXh0CisgKiBccGFyYW0gdGFnICAgICAgICAgICBCdWZmZXIgaG9sZGluZyB0aGUgdGFnCisgKiBccGFyYW0gdGFnX2xlbiAgICAgICBMZW5ndGggb2YgdGhlIHRhZyB0byBjaGVjaworICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgb24gc3VjY2Vzcywgb3IgYSBzcGVjaWZpYyBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19jaXBoZXJfY2hlY2tfdGFnKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCB0YWdfbGVuICk7CisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEdlbmVyaWMgYWxsLWluLW9uZSBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIChmb3IgYWxsIGNpcGhlcnMgZXhjZXB0IEFFQUQgY29uc3RydWN0cykuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgZ2VuZXJpYyBjaXBoZXIgY29udGV4dAorICogXHBhcmFtIGl2ICAgICAgICAgICAgSVYgdG8gdXNlIChvciBOT05DRV9DT1VOVEVSIGZvciBDVFItbW9kZSBjaXBoZXJzKQorICogXHBhcmFtIGl2X2xlbiAgICAgICAgSVYgbGVuZ3RoIGZvciBjaXBoZXJzIHdpdGggdmFyaWFibGUtc2l6ZSBJVjsKKyAqICAgICAgICAgICAgICAgICAgICAgIGRpc2NhcmRlZCBieSBjaXBoZXJzIHdpdGggZml4ZWQtc2l6ZSBJVi4KKyAqIFxwYXJhbSBpbnB1dCAgICAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICAgICAgIGJ1ZmZlciBmb3IgdGhlIG91dHB1dCBkYXRhLiBTaG91bGQgYmUgYWJsZSB0byBob2xkIGF0CisgKiAgICAgICAgICAgICAgICAgICAgICBsZWFzdCBpbGVuICsgYmxvY2tfc2l6ZS4gQ2Fubm90IGJlIHRoZSBzYW1lIGJ1ZmZlciBhcworICogICAgICAgICAgICAgICAgICAgICAgaW5wdXQhCisgKiBccGFyYW0gb2xlbiAgICAgICAgICBsZW5ndGggb2YgdGhlIG91dHB1dCBkYXRhLCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgYWN0dWFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorICoKKyAqIFxub3RlICAgICAgICAgICAgICAgIFNvbWUgY2lwaGVycyBkb24ndCB1c2UgSVZzIG5vciBOT05DRS4gRm9yIHRoZXNlCisgKiAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzLCB1c2UgaXYgPSBOVUxMIGFuZCBpdl9sZW4gPSAwLgorICoKKyAqIFxyZXR1cm5zICAgICAgICAgICAgIDAgb24gc3VjY2Vzcywgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVEIGlmIGRlY3J5cHRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkIGEgZnVsbCBibG9jayBidXQgd2FzIG5vdCBwcm92aWRlZCBvbmUsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HIG9uIGludmFsaWQgcGFkZGluZworICogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgZGVjcnlwdGluZywgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIGEgY2lwaGVyIHNwZWNpZmljIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9jcnlwdCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQUVBRCkKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgR2VuZXJpYyBhdXRlbnRpY2F0ZWQgZW5jcnlwdGlvbiAoQUVBRCBjaXBoZXJzKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBnZW5lcmljIGNpcGhlciBjb250ZXh0CisgKiBccGFyYW0gaXYgICAgICAgICAgICBJViB0byB1c2UgKG9yIE5PTkNFX0NPVU5URVIgZm9yIENUUi1tb2RlIGNpcGhlcnMpCisgKiBccGFyYW0gaXZfbGVuICAgICAgICBJViBsZW5ndGggZm9yIGNpcGhlcnMgd2l0aCB2YXJpYWJsZS1zaXplIElWOworICogICAgICAgICAgICAgICAgICAgICAgZGlzY2FyZGVkIGJ5IGNpcGhlcnMgd2l0aCBmaXhlZC1zaXplIElWLgorICogXHBhcmFtIGFkICAgICAgICAgICAgQWRkaXRpb25hbCBkYXRhIHRvIGF1dGhlbnRpY2F0ZS4KKyAqIFxwYXJhbSBhZF9sZW4gICAgICAgIExlbmd0aCBvZiBhZC4KKyAqIFxwYXJhbSBpbnB1dCAgICAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICAgICAgIGJ1ZmZlciBmb3IgdGhlIG91dHB1dCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgU2hvdWxkIGJlIGFibGUgdG8gaG9sZCBhdCBsZWFzdCBpbGVuLgorICogXHBhcmFtIG9sZW4gICAgICAgICAgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgZGF0YSwgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KKyAqIFxwYXJhbSB0YWcgICAgICAgICAgIGJ1ZmZlciBmb3IgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICogXHBhcmFtIHRhZ19sZW4gICAgICAgZGVzaXJlZCB0YWcgbGVuZ3RoCisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgYSBjaXBoZXIgc3BlY2lmaWMgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX2F1dGhfZW5jcnlwdCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWQsIHNpemVfdCBhZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgc2l6ZV90IHRhZ19sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBHZW5lcmljIGF1dGVudGljYXRlZCBkZWNyeXB0aW9uIChBRUFEIGNpcGhlcnMpLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIGdlbmVyaWMgY2lwaGVyIGNvbnRleHQKKyAqIFxwYXJhbSBpdiAgICAgICAgICAgIElWIHRvIHVzZSAob3IgTk9OQ0VfQ09VTlRFUiBmb3IgQ1RSLW1vZGUgY2lwaGVycykKKyAqIFxwYXJhbSBpdl9sZW4gICAgICAgIElWIGxlbmd0aCBmb3IgY2lwaGVycyB3aXRoIHZhcmlhYmxlLXNpemUgSVY7CisgKiAgICAgICAgICAgICAgICAgICAgICBkaXNjYXJkZWQgYnkgY2lwaGVycyB3aXRoIGZpeGVkLXNpemUgSVYuCisgKiBccGFyYW0gYWQgICAgICAgICAgICBBZGRpdGlvbmFsIGRhdGEgdG8gYmUgYXV0aGVudGljYXRlZC4KKyAqIFxwYXJhbSBhZF9sZW4gICAgICAgIExlbmd0aCBvZiBhZC4KKyAqIFxwYXJhbSBpbnB1dCAgICAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICAgICAgIGJ1ZmZlciBmb3IgdGhlIG91dHB1dCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgU2hvdWxkIGJlIGFibGUgdG8gaG9sZCBhdCBsZWFzdCBpbGVuLgorICogXHBhcmFtIG9sZW4gICAgICAgICAgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgZGF0YSwgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KKyAqIFxwYXJhbSB0YWcgICAgICAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAqIFxwYXJhbSB0YWdfbGVuICAgICAgIGxlbmd0aCBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVEIGlmIGRhdGEgaXNuJ3QgYXV0aGVudGljLAorICogICAgICAgICAgICAgICAgICAgICAgb3IgYSBjaXBoZXIgc3BlY2lmaWMgZXJyb3IgY29kZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgICAgICBJZiB0aGUgZGF0YSBpcyBub3QgYXV0aGVudGljLCB0aGVuIHRoZSBvdXRwdXQgYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgICAgICBpcyB6ZXJvZWQgb3V0IHRvIHByZXZlbnQgdGhlIHVuYXV0aGVudGljIHBsYWludGV4dCB0bworICogICAgICAgICAgICAgICAgICAgICAgYmUgdXNlZCBieSBtaXN0YWtlLCBtYWtpbmcgdGhpcyBpbnRlcmZhY2Ugc2FmZXIuCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9hdXRoX2RlY3J5cHQoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkLCBzaXplX3QgYWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCB0YWdfbGVuICk7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9BRUFEICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NpcGhlcl9pbnRlcm5hbC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jaXBoZXJfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzU4YmNjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jaXBoZXJfaW50ZXJuYWwuaApAQCAtMCwwICsxLDEwOSBAQAorLyoqCisgKiBcZmlsZSBjaXBoZXJfaW50ZXJuYWwuaAorICoKKyAqIFxicmllZiBDaXBoZXIgd3JhcHBlcnMuCisgKgorICogXGF1dGhvciBBZHJpYWFuIGRlIEpvbmcgPGRlam9uZ0Bmb3gtaXQuY29tPgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0NJUEhFUl9XUkFQX0gKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfV1JBUF9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAiY2lwaGVyLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBCYXNlIGNpcGhlciBpbmZvcm1hdGlvbi4gVGhlIG5vbi1tb2RlIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgdmFsdWVzLgorICovCitzdHJ1Y3QgbWJlZHRsc19jaXBoZXJfYmFzZV90Cit7CisgICAgLyoqIEJhc2UgQ2lwaGVyIHR5cGUgKGUuZy4gTUJFRFRMU19DSVBIRVJfSURfQUVTKSAqLworICAgIG1iZWR0bHNfY2lwaGVyX2lkX3QgY2lwaGVyOworCisgICAgLyoqIEVuY3J5cHQgdXNpbmcgRUNCICovCisgICAgaW50ICgqZWNiX2Z1bmMpKCB2b2lkICpjdHgsIG1iZWR0bHNfb3BlcmF0aW9uX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgLyoqIEVuY3J5cHQgdXNpbmcgQ0JDICovCisgICAgaW50ICgqY2JjX2Z1bmMpKCB2b2lkICpjdHgsIG1iZWR0bHNfb3BlcmF0aW9uX3QgbW9kZSwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKml2LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIC8qKiBFbmNyeXB0IHVzaW5nIENGQiAoRnVsbCBsZW5ndGgpICovCisgICAgaW50ICgqY2ZiX2Z1bmMpKCB2b2lkICpjdHgsIG1iZWR0bHNfb3BlcmF0aW9uX3QgbW9kZSwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90ICppdl9vZmYsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICppdiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICAvKiogRW5jcnlwdCB1c2luZyBDVFIgKi8KKyAgICBpbnQgKCpjdHJfZnVuYykoIHZvaWQgKmN0eCwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90ICpuY19vZmYsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpub25jZV9jb3VudGVyLCB1bnNpZ25lZCBjaGFyICpzdHJlYW1fYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9TVFJFQU0pCisgICAgLyoqIEVuY3J5cHQgdXNpbmcgU1RSRUFNICovCisgICAgaW50ICgqc3RyZWFtX2Z1bmMpKCB2b2lkICpjdHgsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisjZW5kaWYKKworICAgIC8qKiBTZXQga2V5IGZvciBlbmNyeXB0aW9uIHB1cnBvc2VzICovCisgICAgaW50ICgqc2V0a2V5X2VuY19mdW5jKSggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4gKTsKKworICAgIC8qKiBTZXQga2V5IGZvciBkZWNyeXB0aW9uIHB1cnBvc2VzICovCisgICAgaW50ICgqc2V0a2V5X2RlY19mdW5jKSggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4pOworCisgICAgLyoqIEFsbG9jYXRlIGEgbmV3IGNvbnRleHQgKi8KKyAgICB2b2lkICogKCpjdHhfYWxsb2NfZnVuYykoIHZvaWQgKTsKKworICAgIC8qKiBGcmVlIHRoZSBnaXZlbiBjb250ZXh0ICovCisgICAgdm9pZCAoKmN0eF9mcmVlX2Z1bmMpKCB2b2lkICpjdHggKTsKKworfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgdHlwZTsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmluZm87Cit9IG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25fdDsKKworZXh0ZXJuIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25fdCBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9uc1tdOworCitleHRlcm4gaW50IG1iZWR0bHNfY2lwaGVyX3N1cHBvcnRlZFtdOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfV1JBUF9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NtYWMuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY21hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZTBiOTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NtYWMuaApAQCAtMCwwICsxLDE2NiBAQAorLyoqCisgKiBcZmlsZSBjbWFjLmgKKyAqCisgKiBcYnJpZWYgQ2lwaGVyLWJhc2VkIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSAoQ01BQykgTW9kZSBmb3IKKyAqICAgICAgICBBdXRoZW50aWNhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0NNQUNfSAorI2RlZmluZSBNQkVEVExTX0NNQUNfSAorCisjaW5jbHVkZSAibWJlZHRscy9jaXBoZXIuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIE1CRURUTFNfQUVTX0JMT0NLX1NJWkUgICAgICAgICAgMTYKKyNkZWZpbmUgTUJFRFRMU19ERVMzX0JMT0NLX1NJWkUgICAgICAgICA4CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYICAgICAgMTYgIC8qIGxvbmdlc3QgdXNlZCBieSBDTUFDIGlzIEFFUyAqLworI2Vsc2UKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVggICAgICA4ICAgLyogbG9uZ2VzdCB1c2VkIGJ5IENNQUMgaXMgM0RFUyAqLworI2VuZGlmCisKKy8qKgorICogQ01BQyBjb250ZXh0IHN0cnVjdHVyZSAtIENvbnRhaW5zIGludGVybmFsIHN0YXRlIGluZm9ybWF0aW9uIG9ubHkKKyAqLworc3RydWN0IG1iZWR0bHNfY21hY19jb250ZXh0X3QKK3sKKyAgICAvKiogSW50ZXJuYWwgc3RhdGUgb2YgdGhlIENNQUMgYWxnb3JpdGhtICAqLworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgc3RhdGVbTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVhdOworCisgICAgLyoqIFVucHJvY2Vzc2VkIGRhdGEgLSBlaXRoZXIgZGF0YSB0aGF0IHdhcyBub3QgYmxvY2sgYWxpZ25lZCBhbmQgaXMgc3RpbGwKKyAgICAgKiAgcGVuZGluZyB0byBiZSBwcm9jZXNzZWQsIG9yIHRoZSBmaW5hbCBibG9jayAqLworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgdW5wcm9jZXNzZWRfYmxvY2tbTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVhdOworCisgICAgLyoqIExlbmd0aCBvZiBkYXRhIHBlbmRpbmcgdG8gYmUgcHJvY2Vzc2VkICovCisgICAgc2l6ZV90ICAgICAgICAgICAgICB1bnByb2Nlc3NlZF9sZW47Cit9OworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFNldCB0aGUgQ01BQyBrZXkgYW5kIHByZXBhcmUgdG8gYXV0aGVudGljYXRlIHRoZSBpbnB1dAorICogICAgICAgICAgICAgICAgICAgICAgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFNob3VsZCBiZSBjYWxsZWQgd2l0aCBhbiBpbml0aWFsaXNlZCBjaXBoZXIgY29udGV4dC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDaXBoZXIgY29udGV4dAorICogXHBhcmFtIGtleSAgICAgICAgICAgQ01BQyBrZXkKKyAqIFxwYXJhbSBrZXliaXRzICAgICAgIGxlbmd0aCBvZiB0aGUgQ01BQyBrZXkgaW4gYml0cworICogICAgICAgICAgICAgICAgICAgICAgKG11c3QgYmUgYWNjZXB0YWJsZSBieSB0aGUgY2lwaGVyKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBjaXBoZXIgc3BlY2lmaWMgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19jaXBoZXJfY21hY19zdGFydHMoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCBrZXliaXRzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgR2VuZXJpYyBDTUFDIHByb2Nlc3MgYnVmZmVyLgorICogICAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIGJldHdlZW4gbWJlZHRsc19jaXBoZXJfY21hY19zdGFydHMoKSBvcgorICogICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfY21hY19yZXNldCgpIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfY21hY19maW5pc2goKS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1heSBiZSBjYWxsZWQgcmVwZWF0ZWRseS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDTUFDIGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgICAgICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgT3V0cHV0IENNQUMuCisgKiAgICAgICAgICAgICAgICAgICAgICBDYWxsZWQgYWZ0ZXIgbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoKS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFVzdWFsbHkgZm9sbG93ZWQgYnkgbWJlZHRsc19jaXBoZXJfY21hY19yZXNldCgpLCB0aGVuCisgKiAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9jbWFjX3N0YXJ0cygpLCBvciBtYmVkdGxzX2NpcGhlcl9mcmVlKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ01BQyBjb250ZXh0CisgKiBccGFyYW0gb3V0cHV0ICAgICAgICBHZW5lcmljIENNQUMgY2hlY2tzdW0gcmVzdWx0CisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX2NtYWNfZmluaXNoKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgUHJlcGFyZSB0byBhdXRoZW50aWNhdGUgYSBuZXcgbWVzc2FnZSB3aXRoIHRoZSBzYW1lIGtleS4KKyAqICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCBhZnRlciBtYmVkdGxzX2NpcGhlcl9jbWFjX2ZpbmlzaCgpIGFuZCBiZWZvcmUKKyAqICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ01BQyBjb250ZXh0IHRvIGJlIHJlc2V0CisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX2NtYWNfcmVzZXQoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgT3V0cHV0ID0gR2VuZXJpY19DTUFDKCBobWFjIGtleSwgaW5wdXQgYnVmZmVyICkKKyAqCisgKiBccGFyYW0gY2lwaGVyX2luZm8gICBtZXNzYWdlIGRpZ2VzdCBpbmZvCisgKiBccGFyYW0ga2V5ICAgICAgICAgICBDTUFDIGtleQorICogXHBhcmFtIGtleWxlbiAgICAgICAgbGVuZ3RoIG9mIHRoZSBDTUFDIGtleSBpbiBiaXRzCisgKiBccGFyYW0gaW5wdXQgICAgICAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICAgICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgICAgICAgR2VuZXJpYyBDTUFDLXJlc3VsdAorICoKKyAqIFxyZXR1cm5zICAgICAgICAgICAgIDAgb24gc3VjY2VzcywgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgaWYgcGFyYW1ldGVyCisgKiAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb24gZmFpbHMuCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9jbWFjKCBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQUVTLUNNQUMtMTI4LVBSRgorICogICAgICAgICAgICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiAoQUVTLUNNQUMtUFJGLTEyOCksIGFzIGRlZmluZWQgaW4gUkZDIDQ2MTUKKyAqCisgKiBccGFyYW0ga2V5ICAgICAgIFBSRiBrZXkKKyAqIFxwYXJhbSBrZXlfbGVuICAgUFJGIGtleSBsZW5ndGggaW4gYnl0ZXMKKyAqIFxwYXJhbSBpbnB1dCAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpbl9sZW4gICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhIGluIGJ5dGVzCisgKiBccGFyYW0gb3V0cHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBnZW5lcmF0ZWQgcHNldWRvcmFuZG9tIG91dHB1dCAoMTYgYnl0ZXMpCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYWVzX2NtYWNfcHJmXzEyOCggY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICk7CisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkgJiYgKCBkZWZpbmVkKE1CRURUTFNfQUVTX0MpIHx8IGRlZmluZWQoTUJFRFRMU19ERVNfQykgKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfY21hY19zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgJiYgKCBNQkVEVExTX0FFU19DIHx8IE1CRURUTFNfREVTX0MgKSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19DTUFDX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY29tcGF0LTEuMy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jb21wYXQtMS4zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhYmJkOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY29tcGF0LTEuMy5oCkBAIC0wLDAgKzEsMjYzNCBAQAorLyoqCisgKiBcZmlsZSBjb21wYXQtMS4zLmgKKyAqCisgKiBcYnJpZWYgQ29tcGF0aWJpbGl0eSBkZWZpbml0aW9ucyBmb3IgdXNpbmcgbWJlZCBUTFMgd2l0aCBjbGllbnQgY29kZSB3cml0dGVuCisgKiAgZm9yIHRoZSBQb2xhclNTTCBuYW1pbmcgY29udmVudGlvbnMuCisgKgorICogXGRlcHJlY2F0ZWQgVXNlIHRoZSBuZXcgbmFtZXMgZGlyZWN0bHkgaW5zdGVhZAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgISBkZWZpbmVkKE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVEKQorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORykKKyN3YXJuaW5nICJJbmNsdWRpbmcgY29tcGF0LTEuMy5oIGlzIGRlcHJlY2F0ZWQiCisjZW5kaWYKKworI2lmbmRlZiBNQkVEVExTX0NPTVBBVDEzX0gKKyNkZWZpbmUgTUJFRFRMU19DT01QQVQxM19ICisKKy8qCisgKiBjb25maWcuaCBvcHRpb25zCisgKi8KKyNpZiBkZWZpbmVkIE1CRURUTFNfQUVTTklfQworI2RlZmluZSBQT0xBUlNTTF9BRVNOSV9DIE1CRURUTFNfQUVTTklfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0FFU19BTFQKKyNkZWZpbmUgUE9MQVJTU0xfQUVTX0FMVCBNQkVEVExTX0FFU19BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19BRVNfQworI2RlZmluZSBQT0xBUlNTTF9BRVNfQyBNQkVEVExTX0FFU19DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQUVTX1JPTV9UQUJMRVMKKyNkZWZpbmUgUE9MQVJTU0xfQUVTX1JPTV9UQUJMRVMgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0FSQzRfQUxUCisjZGVmaW5lIFBPTEFSU1NMX0FSQzRfQUxUIE1CRURUTFNfQVJDNF9BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19BUkM0X0MKKyNkZWZpbmUgUE9MQVJTU0xfQVJDNF9DIE1CRURUTFNfQVJDNF9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQVNOMV9QQVJTRV9DCisjZGVmaW5lIFBPTEFSU1NMX0FTTjFfUEFSU0VfQyBNQkVEVExTX0FTTjFfUEFSU0VfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0FTTjFfV1JJVEVfQworI2RlZmluZSBQT0xBUlNTTF9BU04xX1dSSVRFX0MgTUJFRFRMU19BU04xX1dSSVRFX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19CQVNFNjRfQworI2RlZmluZSBQT0xBUlNTTF9CQVNFNjRfQyBNQkVEVExTX0JBU0U2NF9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQklHTlVNX0MKKyNkZWZpbmUgUE9MQVJTU0xfQklHTlVNX0MgTUJFRFRMU19CSUdOVU1fQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0JMT1dGSVNIX0FMVAorI2RlZmluZSBQT0xBUlNTTF9CTE9XRklTSF9BTFQgTUJFRFRMU19CTE9XRklTSF9BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19CTE9XRklTSF9DCisjZGVmaW5lIFBPTEFSU1NMX0JMT1dGSVNIX0MgTUJFRFRMU19CTE9XRklTSF9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQ0FNRUxMSUFfQUxUCisjZGVmaW5lIFBPTEFSU1NMX0NBTUVMTElBX0FMVCBNQkVEVExTX0NBTUVMTElBX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0NBTUVMTElBX0MKKyNkZWZpbmUgUE9MQVJTU0xfQ0FNRUxMSUFfQyBNQkVEVExTX0NBTUVMTElBX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkKKyNkZWZpbmUgUE9MQVJTU0xfQ0FNRUxMSUFfU01BTExfTUVNT1JZIE1CRURUTFNfQ0FNRUxMSUFfU01BTExfTUVNT1JZCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQ0NNX0MKKyNkZWZpbmUgUE9MQVJTU0xfQ0NNX0MgTUJFRFRMU19DQ01fQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0NFUlRTX0MKKyNkZWZpbmUgUE9MQVJTU0xfQ0VSVFNfQyBNQkVEVExTX0NFUlRTX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19DSVBIRVJfQworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQyBNQkVEVExTX0NJUEhFUl9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9NT0RFX0NCQyBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfTU9ERV9DRkIgTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX01PREVfQ1RSIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9OVUxMX0NJUEhFUiBNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUyBNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfUEFERElOR19QS0NTNyBNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX1BBRERJTkdfWkVST1MgTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTiBNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19DVFJfRFJCR19DCisjZGVmaW5lIFBPTEFSU1NMX0NUUl9EUkJHX0MgTUJFRFRMU19DVFJfRFJCR19DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfREVCVUdfQworI2RlZmluZSBQT0xBUlNTTF9ERUJVR19DIE1CRURUTFNfREVCVUdfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRAorI2RlZmluZSBQT0xBUlNTTF9ERVBSRUNBVEVEX1JFTU9WRUQgTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcKKyNkZWZpbmUgUE9MQVJTU0xfREVQUkVDQVRFRF9XQVJOSU5HIE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfREVTX0FMVAorI2RlZmluZSBQT0xBUlNTTF9ERVNfQUxUIE1CRURUTFNfREVTX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0RFU19DCisjZGVmaW5lIFBPTEFSU1NMX0RFU19DIE1CRURUTFNfREVTX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19ESE1fQworI2RlZmluZSBQT0xBUlNTTF9ESE1fQyBNQkVEVExTX0RITV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNESF9DCisjZGVmaW5lIFBPTEFSU1NMX0VDREhfQyBNQkVEVExTX0VDREhfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDRFNBX0MKKyNkZWZpbmUgUE9MQVJTU0xfRUNEU0FfQyBNQkVEVExTX0VDRFNBX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDCisjZGVmaW5lIFBPTEFSU1NMX0VDRFNBX0RFVEVSTUlOSVNUSUMgTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX0MKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0MgTUJFRFRMU19FQ1BfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfQlA1MTJSMV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX00yNTVfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDUF9GSVhFRF9QT0lOVF9PUFRJTQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRklYRURfUE9JTlRfT1BUSU0gTUJFRFRMU19FQ1BfRklYRURfUE9JTlRfT1BUSU0KKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ1BfTUFYX0JJVFMKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX01BWF9CSVRTIE1CRURUTFNfRUNQX01BWF9CSVRTCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX05JU1RfT1BUSU0KKyNkZWZpbmUgUE9MQVJTU0xfRUNQX05JU1RfT1BUSU0gTUJFRFRMU19FQ1BfTklTVF9PUFRJTQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDUF9XSU5ET1dfU0laRQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfV0lORE9XX1NJWkUgTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMKKyNkZWZpbmUgUE9MQVJTU0xfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTIE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRU5UUk9QWV9DCisjZGVmaW5lIFBPTEFSU1NMX0VOVFJPUFlfQyBNQkVEVExTX0VOVFJPUFlfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2CisjZGVmaW5lIFBPTEFSU1NMX0VOVFJPUFlfRk9SQ0VfU0hBMjU2IE1CRURUTFNfRU5UUk9QWV9GT1JDRV9TSEEyNTYKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FUlJPUl9DCisjZGVmaW5lIFBPTEFSU1NMX0VSUk9SX0MgTUJFRFRMU19FUlJPUl9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRVJST1JfU1RSRVJST1JfQkMKKyNkZWZpbmUgUE9MQVJTU0xfRVJST1JfU1RSRVJST1JfQkMgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9CQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZCisjZGVmaW5lIFBPTEFSU1NMX0VSUk9SX1NUUkVSUk9SX0RVTU1ZIE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19GU19JTworI2RlZmluZSBQT0xBUlNTTF9GU19JTyBNQkVEVExTX0ZTX0lPCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfR0NNX0MKKyNkZWZpbmUgUE9MQVJTU0xfR0NNX0MgTUJFRFRMU19HQ01fQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0dFTlBSSU1FCisjZGVmaW5lIFBPTEFSU1NMX0dFTlBSSU1FIE1CRURUTFNfR0VOUFJJTUUKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19IQVZFR0VfQworI2RlZmluZSBQT0xBUlNTTF9IQVZFR0VfQyBNQkVEVExTX0hBVkVHRV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfSEFWRV9BU00KKyNkZWZpbmUgUE9MQVJTU0xfSEFWRV9BU00gTUJFRFRMU19IQVZFX0FTTQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0hBVkVfU1NFMgorI2RlZmluZSBQT0xBUlNTTF9IQVZFX1NTRTIgTUJFRFRMU19IQVZFX1NTRTIKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19IQVZFX1RJTUUKKyNkZWZpbmUgUE9MQVJTU0xfSEFWRV9USU1FIE1CRURUTFNfSEFWRV9USU1FCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfSE1BQ19EUkJHX0MKKyNkZWZpbmUgUE9MQVJTU0xfSE1BQ19EUkJHX0MgTUJFRFRMU19ITUFDX0RSQkdfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0hNQUNfRFJCR19NQVhfSU5QVVQKKyNkZWZpbmUgUE9MQVJTU0xfSE1BQ19EUkJHX01BWF9JTlBVVCBNQkVEVExTX0hNQUNfRFJCR19NQVhfSU5QVVQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19ITUFDX0RSQkdfTUFYX1JFUVVFU1QKKyNkZWZpbmUgUE9MQVJTU0xfSE1BQ19EUkJHX01BWF9SRVFVRVNUIE1CRURUTFNfSE1BQ19EUkJHX01BWF9SRVFVRVNUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfSE1BQ19EUkJHX01BWF9TRUVEX0lOUFVUCisjZGVmaW5lIFBPTEFSU1NMX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVCBNQkVEVExTX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0hNQUNfRFJCR19SRVNFRURfSU5URVJWQUwKKyNkZWZpbmUgUE9MQVJTU0xfSE1BQ19EUkJHX1JFU0VFRF9JTlRFUlZBTCBNQkVEVExTX0hNQUNfRFJCR19SRVNFRURfSU5URVJWQUwKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTUQyX0FMVAorI2RlZmluZSBQT0xBUlNTTF9NRDJfQUxUIE1CRURUTFNfTUQyX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX01EMl9DCisjZGVmaW5lIFBPTEFSU1NMX01EMl9DIE1CRURUTFNfTUQyX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19NRDJfUFJPQ0VTU19BTFQKKyNkZWZpbmUgUE9MQVJTU0xfTUQyX1BST0NFU1NfQUxUIE1CRURUTFNfTUQyX1BST0NFU1NfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTUQ0X0FMVAorI2RlZmluZSBQT0xBUlNTTF9NRDRfQUxUIE1CRURUTFNfTUQ0X0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX01ENF9DCisjZGVmaW5lIFBPTEFSU1NMX01ENF9DIE1CRURUTFNfTUQ0X0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19NRDRfUFJPQ0VTU19BTFQKKyNkZWZpbmUgUE9MQVJTU0xfTUQ0X1BST0NFU1NfQUxUIE1CRURUTFNfTUQ0X1BST0NFU1NfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTUQ1X0FMVAorI2RlZmluZSBQT0xBUlNTTF9NRDVfQUxUIE1CRURUTFNfTUQ1X0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX01ENV9DCisjZGVmaW5lIFBPTEFSU1NMX01ENV9DIE1CRURUTFNfTUQ1X0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19NRDVfUFJPQ0VTU19BTFQKKyNkZWZpbmUgUE9MQVJTU0xfTUQ1X1BST0NFU1NfQUxUIE1CRURUTFNfTUQ1X1BST0NFU1NfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTURfQworI2RlZmluZSBQT0xBUlNTTF9NRF9DIE1CRURUTFNfTURfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRQorI2RlZmluZSBQT0xBUlNTTF9NRU1PUllfQUxJR05fTVVMVElQTEUgTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEUKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFCisjZGVmaW5lIFBPTEFSU1NMX01FTU9SWV9CQUNLVFJBQ0UgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisjZGVmaW5lIFBPTEFSU1NMX01FTU9SWV9CVUZGRVJfQUxMT0NfQyBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX01FTU9SWV9DCisjZGVmaW5lIFBPTEFSU1NMX01FTU9SWV9DIE1CRURUTFNfTUVNT1JZX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19NRU1PUllfREVCVUcKKyNkZWZpbmUgUE9MQVJTU0xfTUVNT1JZX0RFQlVHIE1CRURUTFNfTUVNT1JZX0RFQlVHCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTVBJX01BWF9TSVpFCisjZGVmaW5lIFBPTEFSU1NMX01QSV9NQVhfU0laRSBNQkVEVExTX01QSV9NQVhfU0laRQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX01QSV9XSU5ET1dfU0laRQorI2RlZmluZSBQT0xBUlNTTF9NUElfV0lORE9XX1NJWkUgTUJFRFRMU19NUElfV0lORE9XX1NJWkUKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19ORVRfQworI2RlZmluZSBQT0xBUlNTTF9ORVRfQyBNQkVEVExTX05FVF9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMKKyNkZWZpbmUgUE9MQVJTU0xfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMgTUJFRFRMU19OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkKKyNkZWZpbmUgUE9MQVJTU0xfTk9fUExBVEZPUk1fRU5UUk9QWSBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19PSURfQworI2RlZmluZSBQT0xBUlNTTF9PSURfQyBNQkVEVExTX09JRF9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUEFETE9DS19DCisjZGVmaW5lIFBPTEFSU1NMX1BBRExPQ0tfQyBNQkVEVExTX1BBRExPQ0tfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BCS0RGMl9DCisjZGVmaW5lIFBPTEFSU1NMX1BCS0RGMl9DIE1CRURUTFNfUEJLREYyX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QRU1fUEFSU0VfQworI2RlZmluZSBQT0xBUlNTTF9QRU1fUEFSU0VfQyBNQkVEVExTX1BFTV9QQVJTRV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUEVNX1dSSVRFX0MKKyNkZWZpbmUgUE9MQVJTU0xfUEVNX1dSSVRFX0MgTUJFRFRMU19QRU1fV1JJVEVfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BLQ1MxMV9DCisjZGVmaW5lIFBPTEFSU1NMX1BLQ1MxMV9DIE1CRURUTFNfUEtDUzExX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QS0NTMTJfQworI2RlZmluZSBQT0xBUlNTTF9QS0NTMTJfQyBNQkVEVExTX1BLQ1MxMl9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUEtDUzFfVjE1CisjZGVmaW5lIFBPTEFSU1NMX1BLQ1MxX1YxNSBNQkVEVExTX1BLQ1MxX1YxNQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BLQ1MxX1YyMQorI2RlZmluZSBQT0xBUlNTTF9QS0NTMV9WMjEgTUJFRFRMU19QS0NTMV9WMjEKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QS0NTNV9DCisjZGVmaW5lIFBPTEFSU1NMX1BLQ1M1X0MgTUJFRFRMU19QS0NTNV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUEtfQworI2RlZmluZSBQT0xBUlNTTF9QS19DIE1CRURUTFNfUEtfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BLX1BBUlNFX0MKKyNkZWZpbmUgUE9MQVJTU0xfUEtfUEFSU0VfQyBNQkVEVExTX1BLX1BBUlNFX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QS19QQVJTRV9FQ19FWFRFTkRFRAorI2RlZmluZSBQT0xBUlNTTF9QS19QQVJTRV9FQ19FWFRFTkRFRCBNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUCisjZGVmaW5lIFBPTEFSU1NMX1BLX1JTQV9BTFRfU1VQUE9SVCBNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BLX1dSSVRFX0MKKyNkZWZpbmUgUE9MQVJTU0xfUEtfV1JJVEVfQyBNQkVEVExTX1BLX1dSSVRFX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9DCisjZGVmaW5lIFBPTEFSU1NMX1BMQVRGT1JNX0MgTUJFRFRMU19QTEFURk9STV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fRVhJVF9BTFQgTUJFRFRMU19QTEFURk9STV9FWElUX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX0VYSVRfTUFDUk8KKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fRVhJVF9NQUNSTyBNQkVEVExTX1BMQVRGT1JNX0VYSVRfTUFDUk8KKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX0FMVAorI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9GUFJJTlRGX0FMVCBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTworI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9GUFJJTlRGX01BQ1JPIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX0ZSRUVfTUFDUk8KKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fRlJFRV9NQUNSTyBNQkVEVExTX1BMQVRGT1JNX0ZSRUVfTUFDUk8KKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9NRU1PUlkKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fTUVNT1JZIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUworI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9OT19TVERfRlVOQ1RJT05TIE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fUFJJTlRGX0FMVCBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9QUklOVEZfTUFDUk8KKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fUFJJTlRGX01BQ1JPIE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX01BQ1JPCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUCisjZGVmaW5lIFBPTEFSU1NMX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPCisjZGVmaW5lIFBPTEFSU1NMX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfTUFDUk8KKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVAorI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9TVERfRVhJVCBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fU1REX0ZQUklOVEYKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fU1REX0ZQUklOVEYgTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX1NURF9GUkVFCisjZGVmaW5lIFBPTEFSU1NMX1BMQVRGT1JNX1NURF9GUkVFIE1CRURUTFNfUExBVEZPUk1fU1REX0ZSRUUKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9TVERfTUFMTE9DCisjZGVmaW5lIFBPTEFSU1NMX1BMQVRGT1JNX1NURF9NQUxMT0MgTUJFRFRMU19QTEFURk9STV9TVERfTUFMTE9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fU1REX01FTV9IRFIKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fU1REX01FTV9IRFIgTUJFRFRMU19QTEFURk9STV9TVERfTUVNX0hEUgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fU1REX1BSSU5URiBNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fU1REX1NOUFJJTlRGIE1CRURUTFNfUExBVEZPUk1fU1REX1NOUFJJTlRGCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUFNLX01BWF9MRU4KKyNkZWZpbmUgUE9MQVJTU0xfUFNLX01BWF9MRU4gTUJFRFRMU19QU0tfTUFYX0xFTgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1JFTU9WRV9BUkM0X0NJUEhFUlNVSVRFUworI2RlZmluZSBQT0xBUlNTTF9SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMgTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19SSVBFTUQxNjBfQUxUCisjZGVmaW5lIFBPTEFSU1NMX1JJUEVNRDE2MF9BTFQgTUJFRFRMU19SSVBFTUQxNjBfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUklQRU1EMTYwX0MKKyNkZWZpbmUgUE9MQVJTU0xfUklQRU1EMTYwX0MgTUJFRFRMU19SSVBFTUQxNjBfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1JJUEVNRDE2MF9QUk9DRVNTX0FMVAorI2RlZmluZSBQT0xBUlNTTF9SSVBFTUQxNjBfUFJPQ0VTU19BTFQgTUJFRFRMU19SSVBFTUQxNjBfUFJPQ0VTU19BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19SU0FfQworI2RlZmluZSBQT0xBUlNTTF9SU0FfQyBNQkVEVExTX1JTQV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUlNBX05PX0NSVAorI2RlZmluZSBQT0xBUlNTTF9SU0FfTk9fQ1JUIE1CRURUTFNfUlNBX05PX0NSVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NFTEZfVEVTVAorI2RlZmluZSBQT0xBUlNTTF9TRUxGX1RFU1QgTUJFRFRMU19TRUxGX1RFU1QKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TSEExX0FMVAorI2RlZmluZSBQT0xBUlNTTF9TSEExX0FMVCBNQkVEVExTX1NIQTFfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU0hBMV9DCisjZGVmaW5lIFBPTEFSU1NMX1NIQTFfQyBNQkVEVExTX1NIQTFfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NIQTFfUFJPQ0VTU19BTFQKKyNkZWZpbmUgUE9MQVJTU0xfU0hBMV9QUk9DRVNTX0FMVCBNQkVEVExTX1NIQTFfUFJPQ0VTU19BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TSEEyNTZfQUxUCisjZGVmaW5lIFBPTEFSU1NMX1NIQTI1Nl9BTFQgTUJFRFRMU19TSEEyNTZfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU0hBMjU2X0MKKyNkZWZpbmUgUE9MQVJTU0xfU0hBMjU2X0MgTUJFRFRMU19TSEEyNTZfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NIQTI1Nl9QUk9DRVNTX0FMVAorI2RlZmluZSBQT0xBUlNTTF9TSEEyNTZfUFJPQ0VTU19BTFQgTUJFRFRMU19TSEEyNTZfUFJPQ0VTU19BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TSEE1MTJfQUxUCisjZGVmaW5lIFBPTEFSU1NMX1NIQTUxMl9BTFQgTUJFRFRMU19TSEE1MTJfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU0hBNTEyX0MKKyNkZWZpbmUgUE9MQVJTU0xfU0hBNTEyX0MgTUJFRFRMU19TSEE1MTJfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NIQTUxMl9QUk9DRVNTX0FMVAorI2RlZmluZSBQT0xBUlNTTF9TSEE1MTJfUFJPQ0VTU19BTFQgTUJFRFRMU19TSEE1MTJfUFJPQ0VTU19BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfQUVBRF9SQU5ET01fSVYKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0FFQURfUkFORE9NX0lWIE1CRURUTFNfU1NMX0FFQURfUkFORE9NX0lWCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0FMRVJUX01FU1NBR0VTCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9BTEVSVF9NRVNTQUdFUyBNQkVEVExTX1NTTF9BTEVSVF9NRVNTQUdFUworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9BTExfQUxFUlRfTUVTU0FHRVMKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUyBNQkVEVExTX1NTTF9BTExfQUxFUlRfTUVTU0FHRVMKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfQUxQTgorI2RlZmluZSBQT0xBUlNTTF9TU0xfQUxQTiBNQkVEVExTX1NTTF9BTFBOCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0NBQ0hFX0MKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0NBQ0hFX0MgTUJFRFRMU19TU0xfQ0FDSEVfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORworI2RlZmluZSBQT0xBUlNTTF9TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfQ0xJX0MKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0NMSV9DIE1CRURUTFNfU1NMX0NMSV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0NPT0tJRV9DCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9DT09LSUVfQyBNQkVEVExTX1NTTF9DT09LSUVfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9DT09LSUVfVElNRU9VVAorI2RlZmluZSBQT0xBUlNTTF9TU0xfQ09PS0lFX1RJTUVPVVQgTUJFRFRMU19TU0xfQ09PS0lFX1RJTUVPVVQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfREVCVUdfQUxMCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9ERUJVR19BTEwgTUJFRFRMU19TU0xfREVCVUdfQUxMCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0RJU0FCTEVfUkVORUdPVElBVElPTgorI2RlZmluZSBQT0xBUlNTTF9TU0xfRElTQUJMRV9SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX0RJU0FCTEVfUkVORUdPVElBVElPTgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9EVExTX0FOVElfUkVQTEFZIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0RUTFNfQkFETUFDX0xJTUlUIE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9EVExTX0hFTExPX1ZFUklGWSBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9FTkNSWVBUX1RIRU5fTUFDIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVAorI2RlZmluZSBQT0xBUlNTTF9TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCBNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0ZBTExCQUNLX1NDU1YgTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0hXX1JFQ09SRF9BQ0NFTCBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSAorI2RlZmluZSBQT0xBUlNTTF9TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RICisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX1BST1RPX0RUTFMgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9QUk9UT19TU0wzCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9QUk9UT19TU0wzIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfUFJPVE9fVExTMQorI2RlZmluZSBQT0xBUlNTTF9TU0xfUFJPVE9fVExTMSBNQkVEVExTX1NTTF9QUk9UT19UTFMxCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMQorI2RlZmluZSBQT0xBUlNTTF9TU0xfUFJPVE9fVExTMV8xIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX1BST1RPX1RMUzFfMiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTgorI2RlZmluZSBQT0xBUlNTTF9TU0xfUkVORUdPVElBVElPTiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04KKyNkZWZpbmUgUE9MQVJTU0xfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04gTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX1NFU1NJT05fVElDS0VUUyBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfU1JWX0MKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX1NSVl9DIE1CRURUTFNfU1NMX1NSVl9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRSBNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8KKyNkZWZpbmUgUE9MQVJTU0xfU1NMX1NSVl9TVVBQT1JUX1NTTFYyX0NMSUVOVF9IRUxMTyBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8KKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfVExTX0MKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX1RMU19DIE1CRURUTFNfU1NMX1RMU19DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9UUlVOQ0FURURfSE1BQyBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1RIUkVBRElOR19BTFQKKyNkZWZpbmUgUE9MQVJTU0xfVEhSRUFESU5HX0FMVCBNQkVEVExTX1RIUkVBRElOR19BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19USFJFQURJTkdfQworI2RlZmluZSBQT0xBUlNTTF9USFJFQURJTkdfQyBNQkVEVExTX1RIUkVBRElOR19DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQKKyNkZWZpbmUgUE9MQVJTU0xfVEhSRUFESU5HX1BUSFJFQUQgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1RJTUlOR19BTFQKKyNkZWZpbmUgUE9MQVJTU0xfVElNSU5HX0FMVCBNQkVEVExTX1RJTUlOR19BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19USU1JTkdfQworI2RlZmluZSBQT0xBUlNTTF9USU1JTkdfQyBNQkVEVExTX1RJTUlOR19DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfVkVSU0lPTl9DCisjZGVmaW5lIFBPTEFSU1NMX1ZFUlNJT05fQyBNQkVEVExTX1ZFUlNJT05fQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMKKyNkZWZpbmUgUE9MQVJTU0xfVkVSU0lPTl9GRUFUVVJFUyBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19YNTA5X0FMTE9XX0VYVEVOU0lPTlNfTk9OX1YzCisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMgTUJFRFRMU19YNTA5X0FMTE9XX0VYVEVOU0lPTlNfTk9OX1YzCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfWDUwOV9BTExPV19VTlNVUFBPUlRFRF9DUklUSUNBTF9FWFRFTlNJT04KKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9BTExPV19VTlNVUFBPUlRFRF9DUklUSUNBTF9FWFRFTlNJT04gTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFCisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFIE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRQorI2RlZmluZSBQT0xBUlNTTF9YNTA5X0NIRUNLX0tFWV9VU0FHRSBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfWDUwOV9DUkVBVEVfQworI2RlZmluZSBQT0xBUlNTTF9YNTA5X0NSRUFURV9DIE1CRURUTFNfWDUwOV9DUkVBVEVfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9DUkxfUEFSU0VfQyBNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfQ1JUX1BBUlNFX0MgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQworI2RlZmluZSBQT0xBUlNTTF9YNTA5X0NSVF9XUklURV9DIE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9DU1JfUEFSU0VfQyBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19YNTA5X0NTUl9XUklURV9DCisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfQ1NSX1dSSVRFX0MgTUJFRFRMU19YNTA5X0NTUl9XUklURV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfWDUwOV9NQVhfSU5URVJNRURJQVRFX0NBCisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQSBNQkVEVExTX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUCisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUIE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19YNTA5X1VTRV9DCisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfVVNFX0MgTUJFRFRMU19YNTA5X1VTRV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfWFRFQV9BTFQKKyNkZWZpbmUgUE9MQVJTU0xfWFRFQV9BTFQgTUJFRFRMU19YVEVBX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1hURUFfQworI2RlZmluZSBQT0xBUlNTTF9YVEVBX0MgTUJFRFRMU19YVEVBX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19aTElCX1NVUFBPUlQKKyNkZWZpbmUgUE9MQVJTU0xfWkxJQl9TVVBQT1JUIE1CRURUTFNfWkxJQl9TVVBQT1JUCisjZW5kaWYKKworLyoKKyAqIE1pc2MgbmFtZXMgKG1hY3JvcywgdHlwZXMsIGZ1bmN0aW9ucywgZW51bSBjb25zdGFudHMuLi4pCisgKi8KKyNkZWZpbmUgQUVTX0RFQ1JZUFQgTUJFRFRMU19BRVNfREVDUllQVAorI2RlZmluZSBBRVNfRU5DUllQVCBNQkVEVExTX0FFU19FTkNSWVBUCisjZGVmaW5lIEFTTjFfQklUX1NUUklORyBNQkVEVExTX0FTTjFfQklUX1NUUklORworI2RlZmluZSBBU04xX0JNUF9TVFJJTkcgTUJFRFRMU19BU04xX0JNUF9TVFJJTkcKKyNkZWZpbmUgQVNOMV9CT09MRUFOIE1CRURUTFNfQVNOMV9CT09MRUFOCisjZGVmaW5lIEFTTjFfQ0hLX0FERCBNQkVEVExTX0FTTjFfQ0hLX0FERAorI2RlZmluZSBBU04xX0NPTlNUUlVDVEVEIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRAorI2RlZmluZSBBU04xX0NPTlRFWFRfU1BFQ0lGSUMgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMKKyNkZWZpbmUgQVNOMV9HRU5FUkFMSVpFRF9USU1FIE1CRURUTFNfQVNOMV9HRU5FUkFMSVpFRF9USU1FCisjZGVmaW5lIEFTTjFfSUE1X1NUUklORyBNQkVEVExTX0FTTjFfSUE1X1NUUklORworI2RlZmluZSBBU04xX0lOVEVHRVIgTUJFRFRMU19BU04xX0lOVEVHRVIKKyNkZWZpbmUgQVNOMV9OVUxMIE1CRURUTFNfQVNOMV9OVUxMCisjZGVmaW5lIEFTTjFfT0NURVRfU1RSSU5HIE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcKKyNkZWZpbmUgQVNOMV9PSUQgTUJFRFRMU19BU04xX09JRAorI2RlZmluZSBBU04xX1BSSU1JVElWRSBNQkVEVExTX0FTTjFfUFJJTUlUSVZFCisjZGVmaW5lIEFTTjFfUFJJTlRBQkxFX1NUUklORyBNQkVEVExTX0FTTjFfUFJJTlRBQkxFX1NUUklORworI2RlZmluZSBBU04xX1NFUVVFTkNFIE1CRURUTFNfQVNOMV9TRVFVRU5DRQorI2RlZmluZSBBU04xX1NFVCBNQkVEVExTX0FTTjFfU0VUCisjZGVmaW5lIEFTTjFfVDYxX1NUUklORyBNQkVEVExTX0FTTjFfVDYxX1NUUklORworI2RlZmluZSBBU04xX1VOSVZFUlNBTF9TVFJJTkcgTUJFRFRMU19BU04xX1VOSVZFUlNBTF9TVFJJTkcKKyNkZWZpbmUgQVNOMV9VVENfVElNRSBNQkVEVExTX0FTTjFfVVRDX1RJTUUKKyNkZWZpbmUgQVNOMV9VVEY4X1NUUklORyBNQkVEVExTX0FTTjFfVVRGOF9TVFJJTkcKKyNkZWZpbmUgQkFEQ0VSVF9DTl9NSVNNQVRDSCBNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSAorI2RlZmluZSBCQURDRVJUX0VYUElSRUQgTUJFRFRMU19YNTA5X0JBRENFUlRfRVhQSVJFRAorI2RlZmluZSBCQURDRVJUX0ZVVFVSRSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9GVVRVUkUKKyNkZWZpbmUgQkFEQ0VSVF9NSVNTSU5HIE1CRURUTFNfWDUwOV9CQURDRVJUX01JU1NJTkcKKyNkZWZpbmUgQkFEQ0VSVF9OT1RfVFJVU1RFRCBNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRAorI2RlZmluZSBCQURDRVJUX09USEVSIE1CRURUTFNfWDUwOV9CQURDRVJUX09USEVSCisjZGVmaW5lIEJBRENFUlRfUkVWT0tFRCBNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VECisjZGVmaW5lIEJBRENFUlRfU0tJUF9WRVJJRlkgTUJFRFRMU19YNTA5X0JBRENFUlRfU0tJUF9WRVJJRlkKKyNkZWZpbmUgQkFEQ1JMX0VYUElSRUQgTUJFRFRMU19YNTA5X0JBRENSTF9FWFBJUkVECisjZGVmaW5lIEJBRENSTF9GVVRVUkUgTUJFRFRMU19YNTA5X0JBRENSTF9GVVRVUkUKKyNkZWZpbmUgQkFEQ1JMX05PVF9UUlVTVEVEIE1CRURUTFNfWDUwOV9CQURDUkxfTk9UX1RSVVNURUQKKyNkZWZpbmUgQkxPV0ZJU0hfQkxPQ0tTSVpFIE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFCisjZGVmaW5lIEJMT1dGSVNIX0RFQ1JZUFQgTUJFRFRMU19CTE9XRklTSF9ERUNSWVBUCisjZGVmaW5lIEJMT1dGSVNIX0VOQ1JZUFQgTUJFRFRMU19CTE9XRklTSF9FTkNSWVBUCisjZGVmaW5lIEJMT1dGSVNIX01BWF9LRVkgTUJFRFRMU19CTE9XRklTSF9NQVhfS0VZX0JJVFMKKyNkZWZpbmUgQkxPV0ZJU0hfTUlOX0tFWSBNQkVEVExTX0JMT1dGSVNIX01JTl9LRVlfQklUUworI2RlZmluZSBCTE9XRklTSF9ST1VORFMgTUJFRFRMU19CTE9XRklTSF9ST1VORFMKKyNkZWZpbmUgQ0FNRUxMSUFfREVDUllQVCBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQKKyNkZWZpbmUgQ0FNRUxMSUFfRU5DUllQVCBNQkVEVExTX0NBTUVMTElBX0VOQ1JZUFQKKyNkZWZpbmUgQ09MTEVDVF9TSVpFIE1CRURUTFNfSEFWRUdFX0NPTExFQ1RfU0laRQorI2RlZmluZSBDVFJfRFJCR19CTE9DS1NJWkUgTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUKKyNkZWZpbmUgQ1RSX0RSQkdfRU5UUk9QWV9MRU4gTUJFRFRMU19DVFJfRFJCR19FTlRST1BZX0xFTgorI2RlZmluZSBDVFJfRFJCR19LRVlCSVRTIE1CRURUTFNfQ1RSX0RSQkdfS0VZQklUUworI2RlZmluZSBDVFJfRFJCR19LRVlTSVpFIE1CRURUTFNfQ1RSX0RSQkdfS0VZU0laRQorI2RlZmluZSBDVFJfRFJCR19NQVhfSU5QVVQgTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQKKyNkZWZpbmUgQ1RSX0RSQkdfTUFYX1JFUVVFU1QgTUJFRFRMU19DVFJfRFJCR19NQVhfUkVRVUVTVAorI2RlZmluZSBDVFJfRFJCR19NQVhfU0VFRF9JTlBVVCBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUCisjZGVmaW5lIENUUl9EUkJHX1BSX09GRiBNQkVEVExTX0NUUl9EUkJHX1BSX09GRgorI2RlZmluZSBDVFJfRFJCR19QUl9PTiBNQkVEVExTX0NUUl9EUkJHX1BSX09OCisjZGVmaW5lIENUUl9EUkJHX1JFU0VFRF9JTlRFUlZBTCBNQkVEVExTX0NUUl9EUkJHX1JFU0VFRF9JTlRFUlZBTAorI2RlZmluZSBDVFJfRFJCR19TRUVETEVOIE1CRURUTFNfQ1RSX0RSQkdfU0VFRExFTgorI2RlZmluZSBERVBSRUNBVEVEIE1CRURUTFNfREVQUkVDQVRFRAorI2RlZmluZSBERVNfREVDUllQVCBNQkVEVExTX0RFU19ERUNSWVBUCisjZGVmaW5lIERFU19FTkNSWVBUIE1CRURUTFNfREVTX0VOQ1JZUFQKKyNkZWZpbmUgREVTX0tFWV9TSVpFIE1CRURUTFNfREVTX0tFWV9TSVpFCisjZGVmaW5lIEVOVFJPUFlfQkxPQ0tfU0laRSBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRQorI2RlZmluZSBFTlRST1BZX01BWF9HQVRIRVIgTUJFRFRMU19FTlRST1BZX01BWF9HQVRIRVIKKyNkZWZpbmUgRU5UUk9QWV9NQVhfU0VFRF9TSVpFIE1CRURUTFNfRU5UUk9QWV9NQVhfU0VFRF9TSVpFCisjZGVmaW5lIEVOVFJPUFlfTUFYX1NPVVJDRVMgTUJFRFRMU19FTlRST1BZX01BWF9TT1VSQ0VTCisjZGVmaW5lIEVOVFJPUFlfTUlOX0hBUkRDTE9DSyBNQkVEVExTX0VOVFJPUFlfTUlOX0hBUkRDTE9DSworI2RlZmluZSBFTlRST1BZX01JTl9IQVZFR0UgTUJFRFRMU19FTlRST1BZX01JTl9IQVZFR0UKKyNkZWZpbmUgRU5UUk9QWV9NSU5fUExBVEZPUk0gTUJFRFRMU19FTlRST1BZX01JTl9QTEFURk9STQorI2RlZmluZSBFTlRST1BZX1NPVVJDRV9NQU5VQUwgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9NQU5VQUwKKyNkZWZpbmUgRVhUX0FVVEhPUklUWV9LRVlfSURFTlRJRklFUiBNQkVEVExTX1g1MDlfRVhUX0FVVEhPUklUWV9LRVlfSURFTlRJRklFUgorI2RlZmluZSBFWFRfQkFTSUNfQ09OU1RSQUlOVFMgTUJFRFRMU19YNTA5X0VYVF9CQVNJQ19DT05TVFJBSU5UUworI2RlZmluZSBFWFRfQ0VSVElGSUNBVEVfUE9MSUNJRVMgTUJFRFRMU19YNTA5X0VYVF9DRVJUSUZJQ0FURV9QT0xJQ0lFUworI2RlZmluZSBFWFRfQ1JMX0RJU1RSSUJVVElPTl9QT0lOVFMgTUJFRFRMU19YNTA5X0VYVF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUworI2RlZmluZSBFWFRfRVhURU5ERURfS0VZX1VTQUdFIE1CRURUTFNfWDUwOV9FWFRfRVhURU5ERURfS0VZX1VTQUdFCisjZGVmaW5lIEVYVF9GUkVTSEVTVF9DUkwgTUJFRFRMU19YNTA5X0VYVF9GUkVTSEVTVF9DUkwKKyNkZWZpbmUgRVhUX0lOSUhJQklUX0FOWVBPTElDWSBNQkVEVExTX1g1MDlfRVhUX0lOSUhJQklUX0FOWVBPTElDWQorI2RlZmluZSBFWFRfSVNTVUVSX0FMVF9OQU1FIE1CRURUTFNfWDUwOV9FWFRfSVNTVUVSX0FMVF9OQU1FCisjZGVmaW5lIEVYVF9LRVlfVVNBR0UgTUJFRFRMU19YNTA5X0VYVF9LRVlfVVNBR0UKKyNkZWZpbmUgRVhUX05BTUVfQ09OU1RSQUlOVFMgTUJFRFRMU19YNTA5X0VYVF9OQU1FX0NPTlNUUkFJTlRTCisjZGVmaW5lIEVYVF9OU19DRVJUX1RZUEUgTUJFRFRMU19YNTA5X0VYVF9OU19DRVJUX1RZUEUKKyNkZWZpbmUgRVhUX1BPTElDWV9DT05TVFJBSU5UUyBNQkVEVExTX1g1MDlfRVhUX1BPTElDWV9DT05TVFJBSU5UUworI2RlZmluZSBFWFRfUE9MSUNZX01BUFBJTkdTIE1CRURUTFNfWDUwOV9FWFRfUE9MSUNZX01BUFBJTkdTCisjZGVmaW5lIEVYVF9TVUJKRUNUX0FMVF9OQU1FIE1CRURUTFNfWDUwOV9FWFRfU1VCSkVDVF9BTFRfTkFNRQorI2RlZmluZSBFWFRfU1VCSkVDVF9ESVJFQ1RPUllfQVRUUlMgTUJFRFRMU19YNTA5X0VYVF9TVUJKRUNUX0RJUkVDVE9SWV9BVFRSUworI2RlZmluZSBFWFRfU1VCSkVDVF9LRVlfSURFTlRJRklFUiBNQkVEVExTX1g1MDlfRVhUX1NVQkpFQ1RfS0VZX0lERU5USUZJRVIKKyNkZWZpbmUgR0NNX0RFQ1JZUFQgTUJFRFRMU19HQ01fREVDUllQVAorI2RlZmluZSBHQ01fRU5DUllQVCBNQkVEVExTX0dDTV9FTkNSWVBUCisjZGVmaW5lIEtVX0NSTF9TSUdOIE1CRURUTFNfWDUwOV9LVV9DUkxfU0lHTgorI2RlZmluZSBLVV9EQVRBX0VOQ0lQSEVSTUVOVCBNQkVEVExTX1g1MDlfS1VfREFUQV9FTkNJUEhFUk1FTlQKKyNkZWZpbmUgS1VfRElHSVRBTF9TSUdOQVRVUkUgTUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFCisjZGVmaW5lIEtVX0tFWV9BR1JFRU1FTlQgTUJFRFRMU19YNTA5X0tVX0tFWV9BR1JFRU1FTlQKKyNkZWZpbmUgS1VfS0VZX0NFUlRfU0lHTiBNQkVEVExTX1g1MDlfS1VfS0VZX0NFUlRfU0lHTgorI2RlZmluZSBLVV9LRVlfRU5DSVBIRVJNRU5UIE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UCisjZGVmaW5lIEtVX05PTl9SRVBVRElBVElPTiBNQkVEVExTX1g1MDlfS1VfTk9OX1JFUFVESUFUSU9OCisjZGVmaW5lIExOXzJfRElWX0xOXzEwX1NDQUxFMTAwIE1CRURUTFNfTE5fMl9ESVZfTE5fMTBfU0NBTEUxMDAKKyNkZWZpbmUgTURfQ09OVEVYVF9UX0lOSVQgTUJFRFRMU19NRF9DT05URVhUX1RfSU5JVAorI2RlZmluZSBNRU1PUllfVkVSSUZZX0FMTE9DIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9BTExPQworI2RlZmluZSBNRU1PUllfVkVSSUZZX0FMV0FZUyBNQkVEVExTX01FTU9SWV9WRVJJRllfQUxXQVlTCisjZGVmaW5lIE1FTU9SWV9WRVJJRllfRlJFRSBNQkVEVExTX01FTU9SWV9WRVJJRllfRlJFRQorI2RlZmluZSBNRU1PUllfVkVSSUZZX05PTkUgTUJFRFRMU19NRU1PUllfVkVSSUZZX05PTkUKKyNkZWZpbmUgTVBJX0NISyBNQkVEVExTX01QSV9DSEsKKyNkZWZpbmUgTkVUX1BST1RPX1RDUCBNQkVEVExTX05FVF9QUk9UT19UQ1AKKyNkZWZpbmUgTkVUX1BST1RPX1VEUCBNQkVEVExTX05FVF9QUk9UT19VRFAKKyNkZWZpbmUgTlNfQ0VSVF9UWVBFX0VNQUlMIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfRU1BSUwKKyNkZWZpbmUgTlNfQ0VSVF9UWVBFX0VNQUlMX0NBIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfRU1BSUxfQ0EKKyNkZWZpbmUgTlNfQ0VSVF9UWVBFX09CSkVDVF9TSUdOSU5HIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfT0JKRUNUX1NJR05JTkcKKyNkZWZpbmUgTlNfQ0VSVF9UWVBFX09CSkVDVF9TSUdOSU5HX0NBIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfT0JKRUNUX1NJR05JTkdfQ0EKKyNkZWZpbmUgTlNfQ0VSVF9UWVBFX1JFU0VSVkVEIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfUkVTRVJWRUQKKyNkZWZpbmUgTlNfQ0VSVF9UWVBFX1NTTF9DQSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9DQQorI2RlZmluZSBOU19DRVJUX1RZUEVfU1NMX0NMSUVOVCBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9DTElFTlQKKyNkZWZpbmUgTlNfQ0VSVF9UWVBFX1NTTF9TRVJWRVIgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfU0VSVkVSCisjZGVmaW5lIE9JRF9BTlNJX1g5XzYyIE1CRURUTFNfT0lEX0FOU0lfWDlfNjIKKyNkZWZpbmUgT0lEX0FOU0lfWDlfNjJfRklFTERfVFlQRSBNQkVEVExTX09JRF9BTlNJX1g5XzYyX0ZJRUxEX1RZUEUKKyNkZWZpbmUgT0lEX0FOU0lfWDlfNjJfUFJJTUVfRklFTEQgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9QUklNRV9GSUVMRAorI2RlZmluZSBPSURfQU5TSV9YOV82Ml9TSUcgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9TSUcKKyNkZWZpbmUgT0lEX0FOU0lfWDlfNjJfU0lHX1NIQTIgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9TSUdfU0hBMgorI2RlZmluZSBPSURfQU5ZX0VYVEVOREVEX0tFWV9VU0FHRSBNQkVEVExTX09JRF9BTllfRVhURU5ERURfS0VZX1VTQUdFCisjZGVmaW5lIE9JRF9BVCBNQkVEVExTX09JRF9BVAorI2RlZmluZSBPSURfQVRfQ04gTUJFRFRMU19PSURfQVRfQ04KKyNkZWZpbmUgT0lEX0FUX0NPVU5UUlkgTUJFRFRMU19PSURfQVRfQ09VTlRSWQorI2RlZmluZSBPSURfQVRfRE5fUVVBTElGSUVSIE1CRURUTFNfT0lEX0FUX0ROX1FVQUxJRklFUgorI2RlZmluZSBPSURfQVRfR0VORVJBVElPTl9RVUFMSUZJRVIgTUJFRFRMU19PSURfQVRfR0VORVJBVElPTl9RVUFMSUZJRVIKKyNkZWZpbmUgT0lEX0FUX0dJVkVOX05BTUUgTUJFRFRMU19PSURfQVRfR0lWRU5fTkFNRQorI2RlZmluZSBPSURfQVRfSU5JVElBTFMgTUJFRFRMU19PSURfQVRfSU5JVElBTFMKKyNkZWZpbmUgT0lEX0FUX0xPQ0FMSVRZIE1CRURUTFNfT0lEX0FUX0xPQ0FMSVRZCisjZGVmaW5lIE9JRF9BVF9PUkdBTklaQVRJT04gTUJFRFRMU19PSURfQVRfT1JHQU5JWkFUSU9OCisjZGVmaW5lIE9JRF9BVF9PUkdfVU5JVCBNQkVEVExTX09JRF9BVF9PUkdfVU5JVAorI2RlZmluZSBPSURfQVRfUE9TVEFMX0FERFJFU1MgTUJFRFRMU19PSURfQVRfUE9TVEFMX0FERFJFU1MKKyNkZWZpbmUgT0lEX0FUX1BPU1RBTF9DT0RFIE1CRURUTFNfT0lEX0FUX1BPU1RBTF9DT0RFCisjZGVmaW5lIE9JRF9BVF9QU0VVRE9OWU0gTUJFRFRMU19PSURfQVRfUFNFVURPTllNCisjZGVmaW5lIE9JRF9BVF9TRVJJQUxfTlVNQkVSIE1CRURUTFNfT0lEX0FUX1NFUklBTF9OVU1CRVIKKyNkZWZpbmUgT0lEX0FUX1NUQVRFIE1CRURUTFNfT0lEX0FUX1NUQVRFCisjZGVmaW5lIE9JRF9BVF9TVVJfTkFNRSBNQkVEVExTX09JRF9BVF9TVVJfTkFNRQorI2RlZmluZSBPSURfQVRfVElUTEUgTUJFRFRMU19PSURfQVRfVElUTEUKKyNkZWZpbmUgT0lEX0FUX1VOSVFVRV9JREVOVElGSUVSIE1CRURUTFNfT0lEX0FUX1VOSVFVRV9JREVOVElGSUVSCisjZGVmaW5lIE9JRF9BVVRIT1JJVFlfS0VZX0lERU5USUZJRVIgTUJFRFRMU19PSURfQVVUSE9SSVRZX0tFWV9JREVOVElGSUVSCisjZGVmaW5lIE9JRF9CQVNJQ19DT05TVFJBSU5UUyBNQkVEVExTX09JRF9CQVNJQ19DT05TVFJBSU5UUworI2RlZmluZSBPSURfQ0VSVElDT00gTUJFRFRMU19PSURfQ0VSVElDT00KKyNkZWZpbmUgT0lEX0NFUlRJRklDQVRFX1BPTElDSUVTIE1CRURUTFNfT0lEX0NFUlRJRklDQVRFX1BPTElDSUVTCisjZGVmaW5lIE9JRF9DTElFTlRfQVVUSCBNQkVEVExTX09JRF9DTElFTlRfQVVUSAorI2RlZmluZSBPSURfQ01QIE1CRURUTFNfT0lEX0NNUAorI2RlZmluZSBPSURfQ09ERV9TSUdOSU5HIE1CRURUTFNfT0lEX0NPREVfU0lHTklORworI2RlZmluZSBPSURfQ09VTlRSWV9VUyBNQkVEVExTX09JRF9DT1VOVFJZX1VTCisjZGVmaW5lIE9JRF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUyBNQkVEVExTX09JRF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUworI2RlZmluZSBPSURfQ1JMX05VTUJFUiBNQkVEVExTX09JRF9DUkxfTlVNQkVSCisjZGVmaW5lIE9JRF9ERVNfQ0JDIE1CRURUTFNfT0lEX0RFU19DQkMKKyNkZWZpbmUgT0lEX0RFU19FREUzX0NCQyBNQkVEVExTX09JRF9ERVNfRURFM19DQkMKKyNkZWZpbmUgT0lEX0RJR0VTVF9BTEdfTUQyIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfTUQyCisjZGVmaW5lIE9JRF9ESUdFU1RfQUxHX01ENCBNQkVEVExTX09JRF9ESUdFU1RfQUxHX01ENAorI2RlZmluZSBPSURfRElHRVNUX0FMR19NRDUgTUJFRFRMU19PSURfRElHRVNUX0FMR19NRDUKKyNkZWZpbmUgT0lEX0RJR0VTVF9BTEdfU0hBMSBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTEKKyNkZWZpbmUgT0lEX0RJR0VTVF9BTEdfU0hBMjI0IE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBMjI0CisjZGVmaW5lIE9JRF9ESUdFU1RfQUxHX1NIQTI1NiBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTI1NgorI2RlZmluZSBPSURfRElHRVNUX0FMR19TSEEzODQgTUJFRFRMU19PSURfRElHRVNUX0FMR19TSEEzODQKKyNkZWZpbmUgT0lEX0RJR0VTVF9BTEdfU0hBNTEyIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBNTEyCisjZGVmaW5lIE9JRF9ET01BSU5fQ09NUE9ORU5UIE1CRURUTFNfT0lEX0RPTUFJTl9DT01QT05FTlQKKyNkZWZpbmUgT0lEX0VDRFNBX1NIQTEgTUJFRFRMU19PSURfRUNEU0FfU0hBMQorI2RlZmluZSBPSURfRUNEU0FfU0hBMjI0IE1CRURUTFNfT0lEX0VDRFNBX1NIQTIyNAorI2RlZmluZSBPSURfRUNEU0FfU0hBMjU2IE1CRURUTFNfT0lEX0VDRFNBX1NIQTI1NgorI2RlZmluZSBPSURfRUNEU0FfU0hBMzg0IE1CRURUTFNfT0lEX0VDRFNBX1NIQTM4NAorI2RlZmluZSBPSURfRUNEU0FfU0hBNTEyIE1CRURUTFNfT0lEX0VDRFNBX1NIQTUxMgorI2RlZmluZSBPSURfRUNfQUxHX0VDREggTUJFRFRMU19PSURfRUNfQUxHX0VDREgKKyNkZWZpbmUgT0lEX0VDX0FMR19VTlJFU1RSSUNURUQgTUJFRFRMU19PSURfRUNfQUxHX1VOUkVTVFJJQ1RFRAorI2RlZmluZSBPSURfRUNfQlJBSU5QT09MX1YxIE1CRURUTFNfT0lEX0VDX0JSQUlOUE9PTF9WMQorI2RlZmluZSBPSURfRUNfR1JQX0JQMjU2UjEgTUJFRFRMU19PSURfRUNfR1JQX0JQMjU2UjEKKyNkZWZpbmUgT0lEX0VDX0dSUF9CUDM4NFIxIE1CRURUTFNfT0lEX0VDX0dSUF9CUDM4NFIxCisjZGVmaW5lIE9JRF9FQ19HUlBfQlA1MTJSMSBNQkVEVExTX09JRF9FQ19HUlBfQlA1MTJSMQorI2RlZmluZSBPSURfRUNfR1JQX1NFQ1AxOTJLMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDE5MksxCisjZGVmaW5lIE9JRF9FQ19HUlBfU0VDUDE5MlIxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMTkyUjEKKyNkZWZpbmUgT0lEX0VDX0dSUF9TRUNQMjI0SzEgTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AyMjRLMQorI2RlZmluZSBPSURfRUNfR1JQX1NFQ1AyMjRSMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDIyNFIxCisjZGVmaW5lIE9JRF9FQ19HUlBfU0VDUDI1NksxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjU2SzEKKyNkZWZpbmUgT0lEX0VDX0dSUF9TRUNQMjU2UjEgTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AyNTZSMQorI2RlZmluZSBPSURfRUNfR1JQX1NFQ1AzODRSMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDM4NFIxCisjZGVmaW5lIE9JRF9FQ19HUlBfU0VDUDUyMVIxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQNTIxUjEKKyNkZWZpbmUgT0lEX0VNQUlMX1BST1RFQ1RJT04gTUJFRFRMU19PSURfRU1BSUxfUFJPVEVDVElPTgorI2RlZmluZSBPSURfRVhURU5ERURfS0VZX1VTQUdFIE1CRURUTFNfT0lEX0VYVEVOREVEX0tFWV9VU0FHRQorI2RlZmluZSBPSURfRlJFU0hFU1RfQ1JMIE1CRURUTFNfT0lEX0ZSRVNIRVNUX0NSTAorI2RlZmluZSBPSURfR09WIE1CRURUTFNfT0lEX0dPVgorI2RlZmluZSBPSURfSE1BQ19TSEExIE1CRURUTFNfT0lEX0hNQUNfU0hBMQorI2RlZmluZSBPSURfSURfQ0UgTUJFRFRMU19PSURfSURfQ0UKKyNkZWZpbmUgT0lEX0lOSUhJQklUX0FOWVBPTElDWSBNQkVEVExTX09JRF9JTklISUJJVF9BTllQT0xJQ1kKKyNkZWZpbmUgT0lEX0lTT19DQ0lUVF9EUyBNQkVEVExTX09JRF9JU09fQ0NJVFRfRFMKKyNkZWZpbmUgT0lEX0lTT19JREVOVElGSUVEX09SRyBNQkVEVExTX09JRF9JU09fSURFTlRJRklFRF9PUkcKKyNkZWZpbmUgT0lEX0lTT19JVFVfQ09VTlRSWSBNQkVEVExTX09JRF9JU09fSVRVX0NPVU5UUlkKKyNkZWZpbmUgT0lEX0lTT19JVFVfVVNfT1JHIE1CRURUTFNfT0lEX0lTT19JVFVfVVNfT1JHCisjZGVmaW5lIE9JRF9JU09fTUVNQkVSX0JPRElFUyBNQkVEVExTX09JRF9JU09fTUVNQkVSX0JPRElFUworI2RlZmluZSBPSURfSVNTVUVSX0FMVF9OQU1FIE1CRURUTFNfT0lEX0lTU1VFUl9BTFRfTkFNRQorI2RlZmluZSBPSURfS0VZX1VTQUdFIE1CRURUTFNfT0lEX0tFWV9VU0FHRQorI2RlZmluZSBPSURfS1AgTUJFRFRMU19PSURfS1AKKyNkZWZpbmUgT0lEX01HRjEgTUJFRFRMU19PSURfTUdGMQorI2RlZmluZSBPSURfTkFNRV9DT05TVFJBSU5UUyBNQkVEVExTX09JRF9OQU1FX0NPTlNUUkFJTlRTCisjZGVmaW5lIE9JRF9ORVRTQ0FQRSBNQkVEVExTX09JRF9ORVRTQ0FQRQorI2RlZmluZSBPSURfTlNfQkFTRV9VUkwgTUJFRFRMU19PSURfTlNfQkFTRV9VUkwKKyNkZWZpbmUgT0lEX05TX0NBX1BPTElDWV9VUkwgTUJFRFRMU19PSURfTlNfQ0FfUE9MSUNZX1VSTAorI2RlZmluZSBPSURfTlNfQ0FfUkVWT0NBVElPTl9VUkwgTUJFRFRMU19PSURfTlNfQ0FfUkVWT0NBVElPTl9VUkwKKyNkZWZpbmUgT0lEX05TX0NFUlQgTUJFRFRMU19PSURfTlNfQ0VSVAorI2RlZmluZSBPSURfTlNfQ0VSVF9TRVFVRU5DRSBNQkVEVExTX09JRF9OU19DRVJUX1NFUVVFTkNFCisjZGVmaW5lIE9JRF9OU19DRVJUX1RZUEUgTUJFRFRMU19PSURfTlNfQ0VSVF9UWVBFCisjZGVmaW5lIE9JRF9OU19DT01NRU5UIE1CRURUTFNfT0lEX05TX0NPTU1FTlQKKyNkZWZpbmUgT0lEX05TX0RBVEFfVFlQRSBNQkVEVExTX09JRF9OU19EQVRBX1RZUEUKKyNkZWZpbmUgT0lEX05TX1JFTkVXQUxfVVJMIE1CRURUTFNfT0lEX05TX1JFTkVXQUxfVVJMCisjZGVmaW5lIE9JRF9OU19SRVZPQ0FUSU9OX1VSTCBNQkVEVExTX09JRF9OU19SRVZPQ0FUSU9OX1VSTAorI2RlZmluZSBPSURfTlNfU1NMX1NFUlZFUl9OQU1FIE1CRURUTFNfT0lEX05TX1NTTF9TRVJWRVJfTkFNRQorI2RlZmluZSBPSURfT0NTUF9TSUdOSU5HIE1CRURUTFNfT0lEX09DU1BfU0lHTklORworI2RlZmluZSBPSURfT0lXX1NFQ1NJRyBNQkVEVExTX09JRF9PSVdfU0VDU0lHCisjZGVmaW5lIE9JRF9PSVdfU0VDU0lHX0FMRyBNQkVEVExTX09JRF9PSVdfU0VDU0lHX0FMRworI2RlZmluZSBPSURfT0lXX1NFQ1NJR19TSEExIE1CRURUTFNfT0lEX09JV19TRUNTSUdfU0hBMQorI2RlZmluZSBPSURfT1JHQU5JWkFUSU9OIE1CRURUTFNfT0lEX09SR0FOSVpBVElPTgorI2RlZmluZSBPSURfT1JHX0FOU0lfWDlfNjIgTUJFRFRMU19PSURfT1JHX0FOU0lfWDlfNjIKKyNkZWZpbmUgT0lEX09SR19DRVJUSUNPTSBNQkVEVExTX09JRF9PUkdfQ0VSVElDT00KKyNkZWZpbmUgT0lEX09SR19ET0QgTUJFRFRMU19PSURfT1JHX0RPRAorI2RlZmluZSBPSURfT1JHX0dPViBNQkVEVExTX09JRF9PUkdfR09WCisjZGVmaW5lIE9JRF9PUkdfTkVUU0NBUEUgTUJFRFRMU19PSURfT1JHX05FVFNDQVBFCisjZGVmaW5lIE9JRF9PUkdfT0lXIE1CRURUTFNfT0lEX09SR19PSVcKKyNkZWZpbmUgT0lEX09SR19SU0FfREFUQV9TRUNVUklUWSBNQkVEVExTX09JRF9PUkdfUlNBX0RBVEFfU0VDVVJJVFkKKyNkZWZpbmUgT0lEX09SR19URUxFVFJVU1QgTUJFRFRMU19PSURfT1JHX1RFTEVUUlVTVAorI2RlZmluZSBPSURfUEtDUyBNQkVEVExTX09JRF9QS0NTCisjZGVmaW5lIE9JRF9QS0NTMSBNQkVEVExTX09JRF9QS0NTMQorI2RlZmluZSBPSURfUEtDUzEyIE1CRURUTFNfT0lEX1BLQ1MxMgorI2RlZmluZSBPSURfUEtDUzEyX1BCRSBNQkVEVExTX09JRF9QS0NTMTJfUEJFCisjZGVmaW5lIE9JRF9QS0NTMTJfUEJFX1NIQTFfREVTMl9FREVfQ0JDIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9ERVMyX0VERV9DQkMKKyNkZWZpbmUgT0lEX1BLQ1MxMl9QQkVfU0hBMV9ERVMzX0VERV9DQkMgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX0RFUzNfRURFX0NCQworI2RlZmluZSBPSURfUEtDUzEyX1BCRV9TSEExX1JDMl8xMjhfQ0JDIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzJfMTI4X0NCQworI2RlZmluZSBPSURfUEtDUzEyX1BCRV9TSEExX1JDMl80MF9DQkMgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX1JDMl80MF9DQkMKKyNkZWZpbmUgT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzRfMTI4IE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzRfMTI4CisjZGVmaW5lIE9JRF9QS0NTMTJfUEJFX1NIQTFfUkM0XzQwIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzRfNDAKKyNkZWZpbmUgT0lEX1BLQ1MxX01EMiBNQkVEVExTX09JRF9QS0NTMV9NRDIKKyNkZWZpbmUgT0lEX1BLQ1MxX01ENCBNQkVEVExTX09JRF9QS0NTMV9NRDQKKyNkZWZpbmUgT0lEX1BLQ1MxX01ENSBNQkVEVExTX09JRF9QS0NTMV9NRDUKKyNkZWZpbmUgT0lEX1BLQ1MxX1JTQSBNQkVEVExTX09JRF9QS0NTMV9SU0EKKyNkZWZpbmUgT0lEX1BLQ1MxX1NIQTEgTUJFRFRMU19PSURfUEtDUzFfU0hBMQorI2RlZmluZSBPSURfUEtDUzFfU0hBMjI0IE1CRURUTFNfT0lEX1BLQ1MxX1NIQTIyNAorI2RlZmluZSBPSURfUEtDUzFfU0hBMjU2IE1CRURUTFNfT0lEX1BLQ1MxX1NIQTI1NgorI2RlZmluZSBPSURfUEtDUzFfU0hBMzg0IE1CRURUTFNfT0lEX1BLQ1MxX1NIQTM4NAorI2RlZmluZSBPSURfUEtDUzFfU0hBNTEyIE1CRURUTFNfT0lEX1BLQ1MxX1NIQTUxMgorI2RlZmluZSBPSURfUEtDUzUgTUJFRFRMU19PSURfUEtDUzUKKyNkZWZpbmUgT0lEX1BLQ1M1X1BCRVMyIE1CRURUTFNfT0lEX1BLQ1M1X1BCRVMyCisjZGVmaW5lIE9JRF9QS0NTNV9QQkVfTUQyX0RFU19DQkMgTUJFRFRMU19PSURfUEtDUzVfUEJFX01EMl9ERVNfQ0JDCisjZGVmaW5lIE9JRF9QS0NTNV9QQkVfTUQyX1JDMl9DQkMgTUJFRFRMU19PSURfUEtDUzVfUEJFX01EMl9SQzJfQ0JDCisjZGVmaW5lIE9JRF9QS0NTNV9QQkVfTUQ1X0RFU19DQkMgTUJFRFRMU19PSURfUEtDUzVfUEJFX01ENV9ERVNfQ0JDCisjZGVmaW5lIE9JRF9QS0NTNV9QQkVfTUQ1X1JDMl9DQkMgTUJFRFRMU19PSURfUEtDUzVfUEJFX01ENV9SQzJfQ0JDCisjZGVmaW5lIE9JRF9QS0NTNV9QQkVfU0hBMV9ERVNfQ0JDIE1CRURUTFNfT0lEX1BLQ1M1X1BCRV9TSEExX0RFU19DQkMKKyNkZWZpbmUgT0lEX1BLQ1M1X1BCRV9TSEExX1JDMl9DQkMgTUJFRFRMU19PSURfUEtDUzVfUEJFX1NIQTFfUkMyX0NCQworI2RlZmluZSBPSURfUEtDUzVfUEJLREYyIE1CRURUTFNfT0lEX1BLQ1M1X1BCS0RGMgorI2RlZmluZSBPSURfUEtDUzVfUEJNQUMxIE1CRURUTFNfT0lEX1BLQ1M1X1BCTUFDMQorI2RlZmluZSBPSURfUEtDUzkgTUJFRFRMU19PSURfUEtDUzkKKyNkZWZpbmUgT0lEX1BLQ1M5X0NTUl9FWFRfUkVRIE1CRURUTFNfT0lEX1BLQ1M5X0NTUl9FWFRfUkVRCisjZGVmaW5lIE9JRF9QS0NTOV9FTUFJTCBNQkVEVExTX09JRF9QS0NTOV9FTUFJTAorI2RlZmluZSBPSURfUEtJWCBNQkVEVExTX09JRF9QS0lYCisjZGVmaW5lIE9JRF9QT0xJQ1lfQ09OU1RSQUlOVFMgTUJFRFRMU19PSURfUE9MSUNZX0NPTlNUUkFJTlRTCisjZGVmaW5lIE9JRF9QT0xJQ1lfTUFQUElOR1MgTUJFRFRMU19PSURfUE9MSUNZX01BUFBJTkdTCisjZGVmaW5lIE9JRF9QUklWQVRFX0tFWV9VU0FHRV9QRVJJT0QgTUJFRFRMU19PSURfUFJJVkFURV9LRVlfVVNBR0VfUEVSSU9ECisjZGVmaW5lIE9JRF9SU0FTU0FfUFNTIE1CRURUTFNfT0lEX1JTQVNTQV9QU1MKKyNkZWZpbmUgT0lEX1JTQV9DT01QQU5ZIE1CRURUTFNfT0lEX1JTQV9DT01QQU5ZCisjZGVmaW5lIE9JRF9SU0FfU0hBX09CUyBNQkVEVExTX09JRF9SU0FfU0hBX09CUworI2RlZmluZSBPSURfU0VSVkVSX0FVVEggTUJFRFRMU19PSURfU0VSVkVSX0FVVEgKKyNkZWZpbmUgT0lEX1NJWkUgTUJFRFRMU19PSURfU0laRQorI2RlZmluZSBPSURfU1VCSkVDVF9BTFRfTkFNRSBNQkVEVExTX09JRF9TVUJKRUNUX0FMVF9OQU1FCisjZGVmaW5lIE9JRF9TVUJKRUNUX0RJUkVDVE9SWV9BVFRSUyBNQkVEVExTX09JRF9TVUJKRUNUX0RJUkVDVE9SWV9BVFRSUworI2RlZmluZSBPSURfU1VCSkVDVF9LRVlfSURFTlRJRklFUiBNQkVEVExTX09JRF9TVUJKRUNUX0tFWV9JREVOVElGSUVSCisjZGVmaW5lIE9JRF9URUxFVFJVU1QgTUJFRFRMU19PSURfVEVMRVRSVVNUCisjZGVmaW5lIE9JRF9USU1FX1NUQU1QSU5HIE1CRURUTFNfT0lEX1RJTUVfU1RBTVBJTkcKKyNkZWZpbmUgUEFETE9DS19BQ0UgTUJFRFRMU19QQURMT0NLX0FDRQorI2RlZmluZSBQQURMT0NLX0FMSUdOMTYgTUJFRFRMU19QQURMT0NLX0FMSUdOMTYKKyNkZWZpbmUgUEFETE9DS19QSEUgTUJFRFRMU19QQURMT0NLX1BIRQorI2RlZmluZSBQQURMT0NLX1BNTSBNQkVEVExTX1BBRExPQ0tfUE1NCisjZGVmaW5lIFBBRExPQ0tfUk5HIE1CRURUTFNfUEFETE9DS19STkcKKyNkZWZpbmUgUEtDUzEyX0RFUklWRV9JViBNQkVEVExTX1BLQ1MxMl9ERVJJVkVfSVYKKyNkZWZpbmUgUEtDUzEyX0RFUklWRV9LRVkgTUJFRFRMU19QS0NTMTJfREVSSVZFX0tFWQorI2RlZmluZSBQS0NTMTJfREVSSVZFX01BQ19LRVkgTUJFRFRMU19QS0NTMTJfREVSSVZFX01BQ19LRVkKKyNkZWZpbmUgUEtDUzEyX1BCRV9ERUNSWVBUIE1CRURUTFNfUEtDUzEyX1BCRV9ERUNSWVBUCisjZGVmaW5lIFBLQ1MxMl9QQkVfRU5DUllQVCBNQkVEVExTX1BLQ1MxMl9QQkVfRU5DUllQVAorI2RlZmluZSBQS0NTNV9ERUNSWVBUIE1CRURUTFNfUEtDUzVfREVDUllQVAorI2RlZmluZSBQS0NTNV9FTkNSWVBUIE1CRURUTFNfUEtDUzVfRU5DUllQVAorI2RlZmluZSBQT0xBUlNTTF9BRVNOSV9BRVMgTUJFRFRMU19BRVNOSV9BRVMKKyNkZWZpbmUgUE9MQVJTU0xfQUVTTklfQ0xNVUwgTUJFRFRMU19BRVNOSV9DTE1VTAorI2RlZmluZSBQT0xBUlNTTF9BRVNOSV9IIE1CRURUTFNfQUVTTklfSAorI2RlZmluZSBQT0xBUlNTTF9BRVNfSCBNQkVEVExTX0FFU19ICisjZGVmaW5lIFBPTEFSU1NMX0FSQzRfSCBNQkVEVExTX0FSQzRfSAorI2RlZmluZSBQT0xBUlNTTF9BU04xX0ggTUJFRFRMU19BU04xX0gKKyNkZWZpbmUgUE9MQVJTU0xfQVNOMV9XUklURV9IIE1CRURUTFNfQVNOMV9XUklURV9ICisjZGVmaW5lIFBPTEFSU1NMX0JBU0U2NF9IIE1CRURUTFNfQkFTRTY0X0gKKyNkZWZpbmUgUE9MQVJTU0xfQklHTlVNX0ggTUJFRFRMU19CSUdOVU1fSAorI2RlZmluZSBQT0xBUlNTTF9CTE9XRklTSF9IIE1CRURUTFNfQkxPV0ZJU0hfSAorI2RlZmluZSBQT0xBUlNTTF9CTl9NVUxfSCBNQkVEVExTX0JOX01VTF9ICisjZGVmaW5lIFBPTEFSU1NMX0NBTUVMTElBX0ggTUJFRFRMU19DQU1FTExJQV9ICisjZGVmaW5lIFBPTEFSU1NMX0NDTV9IIE1CRURUTFNfQ0NNX0gKKyNkZWZpbmUgUE9MQVJTU0xfQ0VSVFNfSCBNQkVEVExTX0NFUlRTX0gKKyNkZWZpbmUgUE9MQVJTU0xfQ0hFQ0tfQ09ORklHX0ggTUJFRFRMU19DSEVDS19DT05GSUdfSAorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJTVUlURV9OT0RUTFMgTUJFRFRMU19DSVBIRVJTVUlURV9OT0RUTFMKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHIE1CRURUTFNfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUlNVSVRFX1dFQUsgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMTI4X0NCQyBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzEyOF9DQ00gTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4CisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMTI4X0NUUiBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzEyOF9FQ0IgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0IKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18xMjhfR0NNIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMTkyX0NCQyBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzE5Ml9DQ00gTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18xOTJfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0ZCMTI4CisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMTkyX0NUUiBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NUUgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzE5Ml9FQ0IgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0IKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18xOTJfR0NNIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMjU2X0NCQyBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzI1Nl9DQ00gTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18yNTZfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0ZCMTI4CisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMjU2X0NUUiBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NUUgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzI1Nl9FQ0IgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0IKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18yNTZfR0NNIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BUkM0XzEyOCBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOAorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQkxPV0ZJU0hfQ0JDIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0JMT1dGSVNIX0NUUiBNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFIKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0JMT1dGSVNIX0VDQiBNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9FQ0IKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTSBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjgKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFIgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMTI4X0VDQiBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfRUNCCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkMgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMTkyX0NDTSBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0NNCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DRkIxMjgKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DVFIgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NUUgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMTkyX0VDQiBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfRUNCCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMjU2X0NDTSBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0NNCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DRkIxMjgKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DVFIgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NUUgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMjU2X0VDQiBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfRUNCCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0RFU19DQkMgTUJFRFRMU19DSVBIRVJfREVTX0NCQworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfREVTX0VDQiBNQkVEVExTX0NJUEhFUl9ERVNfRUNCCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9ERVNfRURFM19DQkMgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9ERVNfRURFM19FQ0IgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfRUNCCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9ERVNfRURFX0NCQyBNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfREVTX0VERV9FQ0IgTUJFRFRMU19DSVBIRVJfREVTX0VERV9FQ0IKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0ggTUJFRFRMU19DSVBIRVJfSAorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfSURfM0RFUyBNQkVEVExTX0NJUEhFUl9JRF8zREVTCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9JRF9BRVMgTUJFRFRMU19DSVBIRVJfSURfQUVTCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9JRF9BUkM0IE1CRURUTFNfQ0lQSEVSX0lEX0FSQzQKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0lEX0JMT1dGSVNIIE1CRURUTFNfQ0lQSEVSX0lEX0JMT1dGSVNICisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9JRF9DQU1FTExJQSBNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQQorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfSURfREVTIE1CRURUTFNfQ0lQSEVSX0lEX0RFUworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfSURfTk9ORSBNQkVEVExTX0NJUEhFUl9JRF9OT05FCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9JRF9OVUxMIE1CRURUTFNfQ0lQSEVSX0lEX05VTEwKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX01PREVfQUVBRCBNQkVEVExTX0NJUEhFUl9NT0RFX0FFQUQKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX01PREVfU1RSRUFNIE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORyBNQkVEVExTX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfTk9ORSBNQkVEVExTX0NJUEhFUl9OT05FCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9OVUxMIE1CRURUTFNfQ0lQSEVSX05VTEwKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTiBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9JVl9MRU4KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX1ZBUklBQkxFX0tFWV9MRU4gTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfS0VZX0xFTgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfV1JBUF9IIE1CRURUTFNfQ0lQSEVSX1dSQVBfSAorI2RlZmluZSBQT0xBUlNTTF9DT05GSUdfSCBNQkVEVExTX0NPTkZJR19ICisjZGVmaW5lIFBPTEFSU1NMX0NUUl9EUkJHX0ggTUJFRFRMU19DVFJfRFJCR19ICisjZGVmaW5lIFBPTEFSU1NMX0RFQlVHX0ggTUJFRFRMU19ERUJVR19ICisjZGVmaW5lIFBPTEFSU1NMX0RFQlVHX0xPR19GVUxMIE1CRURUTFNfREVCVUdfTE9HX0ZVTEwKKyNkZWZpbmUgUE9MQVJTU0xfREVCVUdfTE9HX1JBVyBNQkVEVExTX0RFQlVHX0xPR19SQVcKKyNkZWZpbmUgUE9MQVJTU0xfREVDUllQVCBNQkVEVExTX0RFQ1JZUFQKKyNkZWZpbmUgUE9MQVJTU0xfREVTX0ggTUJFRFRMU19ERVNfSAorI2RlZmluZSBQT0xBUlNTTF9ESE1fSCBNQkVEVExTX0RITV9ICisjZGVmaW5lIFBPTEFSU1NMX0RITV9SRkMyNDA5X01PRFBfMTAyNF9HIE1CRURUTFNfREhNX1JGQzI0MDlfTU9EUF8xMDI0X0cKKyNkZWZpbmUgUE9MQVJTU0xfREhNX1JGQzI0MDlfTU9EUF8xMDI0X1AgTUJFRFRMU19ESE1fUkZDMjQwOV9NT0RQXzEwMjRfUAorI2RlZmluZSBQT0xBUlNTTF9ESE1fUkZDMzUyNl9NT0RQXzIwNDhfRyBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMjA0OF9HCisjZGVmaW5lIFBPTEFSU1NMX0RITV9SRkMzNTI2X01PRFBfMjA0OF9QIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8yMDQ4X1AKKyNkZWZpbmUgUE9MQVJTU0xfREhNX1JGQzM1MjZfTU9EUF8zMDcyX0cgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzMwNzJfRworI2RlZmluZSBQT0xBUlNTTF9ESE1fUkZDMzUyNl9NT0RQXzMwNzJfUCBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMzA3Ml9QCisjZGVmaW5lIFBPTEFSU1NMX0RITV9SRkM1MTE0X01PRFBfMTAyNF9HIE1CRURUTFNfREhNX1JGQzUxMTRfTU9EUF8xMDI0X0cKKyNkZWZpbmUgUE9MQVJTU0xfREhNX1JGQzUxMTRfTU9EUF8xMDI0X1AgTUJFRFRMU19ESE1fUkZDNTExNF9NT0RQXzEwMjRfUAorI2RlZmluZSBQT0xBUlNTTF9ESE1fUkZDNTExNF9NT0RQXzIwNDhfRyBNQkVEVExTX0RITV9SRkM1MTE0X01PRFBfMjA0OF9HCisjZGVmaW5lIFBPTEFSU1NMX0RITV9SRkM1MTE0X01PRFBfMjA0OF9QIE1CRURUTFNfREhNX1JGQzUxMTRfTU9EUF8yMDQ4X1AKKyNkZWZpbmUgUE9MQVJTU0xfRUNESF9IIE1CRURUTFNfRUNESF9ICisjZGVmaW5lIFBPTEFSU1NMX0VDREhfT1VSUyBNQkVEVExTX0VDREhfT1VSUworI2RlZmluZSBQT0xBUlNTTF9FQ0RIX1RIRUlSUyBNQkVEVExTX0VDREhfVEhFSVJTCisjZGVmaW5lIFBPTEFSU1NMX0VDRFNBX0ggTUJFRFRMU19FQ0RTQV9ICisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9CUDI1NlIxIE1CRURUTFNfRUNQX0RQX0JQMjU2UjEKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX0JQMzg0UjEgTUJFRFRMU19FQ1BfRFBfQlAzODRSMQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfQlA1MTJSMSBNQkVEVExTX0VDUF9EUF9CUDUxMlIxCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9NMjU1IE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTkKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX01BWCBNQkVEVExTX0VDUF9EUF9NQVgKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX05PTkUgTUJFRFRMU19FQ1BfRFBfTk9ORQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDE5MksxIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDE5MlIxIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDIyNEsxIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDIyNFIxIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDI1NksxIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDI1NlIxIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDM4NFIxIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDUyMVIxIE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfSCBNQkVEVExTX0VDUF9ICisjZGVmaW5lIFBPTEFSU1NMX0VDUF9NQVhfQllURVMgTUJFRFRMU19FQ1BfTUFYX0JZVEVTCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9NQVhfUFRfTEVOIE1CRURUTFNfRUNQX01BWF9QVF9MRU4KKyNkZWZpbmUgUE9MQVJTU0xfRUNQX1BGX0NPTVBSRVNTRUQgTUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRAorI2RlZmluZSBQT0xBUlNTTF9FQ1BfUEZfVU5DT01QUkVTU0VEIE1CRURUTFNfRUNQX1BGX1VOQ09NUFJFU1NFRAorI2RlZmluZSBQT0xBUlNTTF9FQ1BfVExTX05BTUVEX0NVUlZFIE1CRURUTFNfRUNQX1RMU19OQU1FRF9DVVJWRQorI2RlZmluZSBQT0xBUlNTTF9FTkNSWVBUIE1CRURUTFNfRU5DUllQVAorI2RlZmluZSBQT0xBUlNTTF9FTlRST1BZX0ggTUJFRFRMU19FTlRST1BZX0gKKyNkZWZpbmUgUE9MQVJTU0xfRU5UUk9QWV9QT0xMX0ggTUJFRFRMU19FTlRST1BZX1BPTExfSAorI2RlZmluZSBQT0xBUlNTTF9FTlRST1BZX1NIQTI1Nl9BQ0NVTVVMQVRPUiBNQkVEVExTX0VOVFJPUFlfU0hBMjU2X0FDQ1VNVUxBVE9SCisjZGVmaW5lIFBPTEFSU1NMX0VOVFJPUFlfU0hBNTEyX0FDQ1VNVUxBVE9SIE1CRURUTFNfRU5UUk9QWV9TSEE1MTJfQUNDVU1VTEFUT1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJST1JfSCBNQkVEVExTX0VSUk9SX0gKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0FFU19JTlZBTElEX0lOUFVUX0xFTkdUSCBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0FFU19JTlZBTElEX0tFWV9MRU5HVEggTUJFRFRMU19FUlJfQUVTX0lOVkFMSURfS0VZX0xFTkdUSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQVNOMV9CVUZfVE9PX1NNQUxMIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQVNOMV9JTlZBTElEX0RBVEEgTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0FTTjFfSU5WQUxJRF9MRU5HVEggTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0FTTjFfTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9BU04xX0FMTE9DX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQVNOMV9PVVRfT0ZfREFUQSBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9BU04xX1VORVhQRUNURURfVEFHIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMIE1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIgTUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9CTE9XRklTSF9JTlZBTElEX0lOUFVUX0xFTkdUSCBNQkVEVExTX0VSUl9CTE9XRklTSF9JTlZBTElEX0lOUFVUX0xFTkdUSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQkxPV0ZJU0hfSU5WQUxJRF9LRVlfTEVOR1RIIE1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfS0VZX0xFTkdUSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQ0FNRUxMSUFfSU5WQUxJRF9JTlBVVF9MRU5HVEggTUJFRFRMU19FUlJfQ0FNRUxMSUFfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0NBTUVMTElBX0lOVkFMSURfS0VZX0xFTkdUSCBNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0tFWV9MRU5HVEgKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0NDTV9BVVRIX0ZBSUxFRCBNQkVEVExTX0VSUl9DQ01fQVVUSF9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0NDTV9CQURfSU5QVVQgTUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQ0lQSEVSX0FMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9DSVBIRVJfQUxMT0NfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQgTUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQgTUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkcgTUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORworI2RlZmluZSBQT0xBUlNTTF9FUlJfQ1RSX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEIE1CRURUTFNfRVJSX0NUUl9EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQ1RSX0RSQkdfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9DVFJfRFJCR19GSUxFX0lPX0VSUk9SCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9DVFJfRFJCR19JTlBVVF9UT09fQklHIE1CRURUTFNfRVJSX0NUUl9EUkJHX0lOUFVUX1RPT19CSUcKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0NUUl9EUkJHX1JFUVVFU1RfVE9PX0JJRyBNQkVEVExTX0VSUl9DVFJfRFJCR19SRVFVRVNUX1RPT19CSUcKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0RFU19JTlZBTElEX0lOUFVUX0xFTkdUSCBNQkVEVExTX0VSUl9ERVNfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0RITV9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9ESE1fQkFEX0lOUFVUX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0RITV9DQUxDX1NFQ1JFVF9GQUlMRUQgTUJFRFRMU19FUlJfREhNX0NBTENfU0VDUkVUX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfREhNX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfREhNX0ZJTEVfSU9fRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0RITV9JTlZBTElEX0ZPUk1BVCBNQkVEVExTX0VSUl9ESE1fSU5WQUxJRF9GT1JNQVQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0RITV9NQUtFX1BBUkFNU19GQUlMRUQgTUJFRFRMU19FUlJfREhNX01BS0VfUEFSQU1TX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfREhNX01BS0VfUFVCTElDX0ZBSUxFRCBNQkVEVExTX0VSUl9ESE1fTUFLRV9QVUJMSUNfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ESE1fTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9ESE1fQUxMT0NfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ESE1fUkVBRF9QQVJBTVNfRkFJTEVEIE1CRURUTFNfRVJSX0RITV9SRUFEX1BBUkFNU19GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0RITV9SRUFEX1BVQkxJQ19GQUlMRUQgTUJFRFRMU19FUlJfREhNX1JFQURfUFVCTElDX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfRUNQX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorI2RlZmluZSBQT0xBUlNTTF9FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwgTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9FQ1BfSU5WQUxJRF9LRVkgTUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9FQ1BfTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9FQ1BfQUxMT0NfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9FQ1BfUkFORE9NX0ZBSUxFRCBNQkVEVExTX0VSUl9FQ1BfUkFORE9NX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfRUNQX1NJR19MRU5fTUlTTUFUQ0ggTUJFRFRMU19FUlJfRUNQX1NJR19MRU5fTUlTTUFUQ0gKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0VDUF9WRVJJRllfRkFJTEVEIE1CRURUTFNfRVJSX0VDUF9WRVJJRllfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9FTlRST1BZX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfRU5UUk9QWV9GSUxFX0lPX0VSUk9SCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9FTlRST1BZX01BWF9TT1VSQ0VTIE1CRURUTFNfRVJSX0VOVFJPUFlfTUFYX1NPVVJDRVMKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0VOVFJPUFlfTk9fU09VUkNFU19ERUZJTkVEIE1CRURUTFNfRVJSX0VOVFJPUFlfTk9fU09VUkNFU19ERUZJTkVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9HQ01fQVVUSF9GQUlMRUQgTUJFRFRMU19FUlJfR0NNX0FVVEhfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9HQ01fQkFEX0lOUFVUIE1CRURUTFNfRVJSX0dDTV9CQURfSU5QVVQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0hNQUNfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0hNQUNfRFJCR19JTlBVVF9UT09fQklHIE1CRURUTFNfRVJSX0hNQUNfRFJCR19JTlBVVF9UT09fQklHCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ITUFDX0RSQkdfUkVRVUVTVF9UT09fQklHIE1CRURUTFNfRVJSX0hNQUNfRFJCR19SRVFVRVNUX1RPT19CSUcKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX01EMl9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX01EMl9GSUxFX0lPX0VSUk9SCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9NRDRfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9NRDRfRklMRV9JT19FUlJPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfTUQ1X0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfTUQ1X0ZJTEVfSU9fRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX01EX0FMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9NRF9BTExPQ19GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX01EX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9NRF9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX01EX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX01EX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfTURfRklMRV9JT19FUlJPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfTVBJX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQQorI2RlZmluZSBQT0xBUlNTTF9FUlJfTVBJX0JVRkZFUl9UT09fU01BTEwgTUJFRFRMU19FUlJfTVBJX0JVRkZFUl9UT09fU01BTEwKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX01QSV9ESVZJU0lPTl9CWV9aRVJPIE1CRURUTFNfRVJSX01QSV9ESVZJU0lPTl9CWV9aRVJPCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9NUElfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9NUElfRklMRV9JT19FUlJPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfTVBJX0lOVkFMSURfQ0hBUkFDVEVSIE1CRURUTFNfRVJSX01QSV9JTlZBTElEX0NIQVJBQ1RFUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfTVBJX01BTExPQ19GQUlMRUQgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTVBJX05FR0FUSVZFX1ZBTFVFIE1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfTVBJX05PVF9BQ0NFUFRBQkxFIE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfTkVUX0FDQ0VQVF9GQUlMRUQgTUJFRFRMU19FUlJfTkVUX0FDQ0VQVF9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX05FVF9CSU5EX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfQklORF9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX05FVF9DT05ORUNUX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfQ09OTkVDVF9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX05FVF9DT05OX1JFU0VUIE1CRURUTFNfRVJSX05FVF9DT05OX1JFU0VUCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ORVRfTElTVEVOX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfTElTVEVOX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTkVUX1JFQ1ZfRkFJTEVEIE1CRURUTFNfRVJSX05FVF9SRUNWX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTkVUX1NFTkRfRkFJTEVEIE1CRURUTFNfRVJSX05FVF9TRU5EX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTkVUX1NPQ0tFVF9GQUlMRUQgTUJFRFRMU19FUlJfTkVUX1NPQ0tFVF9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX05FVF9USU1FT1VUIE1CRURUTFNfRVJSX1NTTF9USU1FT1VUCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ORVRfVU5LTk9XTl9IT1NUIE1CRURUTFNfRVJSX05FVF9VTktOT1dOX0hPU1QKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX05FVF9XQU5UX1JFQUQgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTkVUX1dBTlRfV1JJVEUgTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX09JRF9CVUZfVE9PX1NNQUxMIE1CRURUTFNfRVJSX09JRF9CVUZfVE9PX1NNQUxMCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9PSURfTk9UX0ZPVU5EIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BBRExPQ0tfREFUQV9NSVNBTElHTkVEIE1CRURUTFNfRVJSX1BBRExPQ0tfREFUQV9NSVNBTElHTkVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QQktERjJfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfUEJLREYyX0JBRF9JTlBVVF9EQVRBCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QRU1fQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfUEVNX0JBRF9JTlBVVF9EQVRBCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QRU1fRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9QRU1fRkVBVFVSRV9VTkFWQUlMQUJMRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEVNX0lOVkFMSURfREFUQSBNQkVEVExTX0VSUl9QRU1fSU5WQUxJRF9EQVRBCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QRU1fSU5WQUxJRF9FTkNfSVYgTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfRU5DX0lWCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QRU1fTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9QRU1fQUxMT0NfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UIE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BFTV9QQVNTV09SRF9NSVNNQVRDSCBNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfTUlTTUFUQ0gKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BFTV9QQVNTV09SRF9SRVFVSVJFRCBNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfUkVRVUlSRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BFTV9VTktOT1dOX0VOQ19BTEcgTUJFRFRMU19FUlJfUEVNX1VOS05PV05fRU5DX0FMRworI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtDUzEyX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1BLQ1MxMl9CQURfSU5QVVRfREFUQQorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtDUzEyX0ZFQVRVUkVfVU5BVkFJTEFCTEUgTUJFRFRMU19FUlJfUEtDUzEyX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLQ1MxMl9QQVNTV09SRF9NSVNNQVRDSCBNQkVEVExTX0VSUl9QS0NTMTJfUEFTU1dPUkRfTUlTTUFUQ0gKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLQ1MxMl9QQkVfSU5WQUxJRF9GT1JNQVQgTUJFRFRMU19FUlJfUEtDUzEyX1BCRV9JTlZBTElEX0ZPUk1BVAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtDUzVfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfUEtDUzVfQkFEX0lOUFVUX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLQ1M1X0ZFQVRVUkVfVU5BVkFJTEFCTEUgTUJFRFRMU19FUlJfUEtDUzVfRkVBVFVSRV9VTkFWQUlMQUJMRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgTUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLQ1M1X1BBU1NXT1JEX01JU01BVENIIE1CRURUTFNfRVJSX1BLQ1M1X1BBU1NXT1JEX01JU01BVENICisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS19CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQQorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9QS19GRUFUVVJFX1VOQVZBSUxBQkxFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS19GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX1BLX0ZJTEVfSU9fRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLX0lOVkFMSURfQUxHIE1CRURUTFNfRVJSX1BLX0lOVkFMSURfQUxHCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS19JTlZBTElEX1BVQktFWSBNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWQorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtfS0VZX0lOVkFMSURfVkVSU0lPTiBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9WRVJTSU9OCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS19NQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX1BLX0FMTE9DX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0ggTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0gKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLX1BBU1NXT1JEX1JFUVVJUkVEIE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX1JFUVVJUkVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS19TSUdfTEVOX01JU01BVENIIE1CRURUTFNfRVJSX1BLX1NJR19MRU5fTUlTTUFUQ0gKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLX1RZUEVfTUlTTUFUQ0ggTUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtfVU5LTk9XTl9OQU1FRF9DVVJWRSBNQkVEVExTX0VSUl9QS19VTktOT1dOX05BTUVEX0NVUlZFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS19VTktOT1dOX1BLX0FMRyBNQkVEVExTX0VSUl9QS19VTktOT1dOX1BLX0FMRworI2RlZmluZSBQT0xBUlNTTF9FUlJfUklQRU1EMTYwX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfUklQRU1EMTYwX0ZJTEVfSU9fRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1JTQV9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcgTUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworI2RlZmluZSBQT0xBUlNTTF9FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1JTQV9LRVlfR0VOX0ZBSUxFRCBNQkVEVExTX0VSUl9SU0FfS0VZX0dFTl9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1JTQV9PVVRQVVRfVE9PX0xBUkdFIE1CRURUTFNfRVJSX1JTQV9PVVRQVVRfVE9PX0xBUkdFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9SU0FfUFJJVkFURV9GQUlMRUQgTUJFRFRMU19FUlJfUlNBX1BSSVZBVEVfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9SU0FfUFVCTElDX0ZBSUxFRCBNQkVEVExTX0VSUl9SU0FfUFVCTElDX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUlNBX1JOR19GQUlMRUQgTUJFRFRMU19FUlJfUlNBX1JOR19GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1JTQV9WRVJJRllfRkFJTEVEIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TSEExX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfU0hBMV9GSUxFX0lPX0VSUk9SCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TSEEyNTZfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9TSEEyNTZfRklMRV9JT19FUlJPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfU0hBNTEyX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfU0hBNTEyX0ZJTEVfSU9fRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEUgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfUkVRVUVTVAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9WRVJJRlkgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9WRVJJRlkKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfQ0hBTkdFX0NJUEhFUl9TUEVDIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0hBTkdFX0NJUEhFUl9TUEVDCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTworI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX0NTIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRV9DUworI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX1JQIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRV9SUAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19GSU5JU0hFRCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0ZJTklTSEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX05FV19TRVNTSU9OX1RJQ0tFVCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX05FV19TRVNTSU9OX1RJQ0tFVAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19QUk9UT0NPTF9WRVJTSU9OIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfUFJPVE9DT0xfVkVSU0lPTgorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8KKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPX0RPTkUgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE9fRE9ORQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JVRkZFUl9UT09fU01BTEwgTUJFRFRMU19FUlJfU1NMX0JVRkZFUl9UT09fU01BTEwKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9DQV9DSEFJTl9SRVFVSVJFRCBNQkVEVExTX0VSUl9TU0xfQ0FfQ0hBSU5fUkVRVUlSRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRCBNQkVEVExTX0VSUl9TU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9DRVJUSUZJQ0FURV9UT09fTEFSR0UgTUJFRFRMU19FUlJfU1NMX0NFUlRJRklDQVRFX1RPT19MQVJHRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0NPTVBSRVNTSU9OX0ZBSUxFRCBNQkVEVExTX0VSUl9TU0xfQ09NUFJFU1NJT05fRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQ09OTl9FT0YgTUJFRFRMU19FUlJfU1NMX0NPTk5fRU9GCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQ09VTlRFUl9XUkFQUElORyBNQkVEVExTX0VSUl9TU0xfQ09VTlRFUl9XUkFQUElORworI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0ZBVEFMX0FMRVJUX01FU1NBR0UgTUJFRFRMU19FUlJfU1NMX0ZBVEFMX0FMRVJUX01FU1NBR0UKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfSEVMTE9fVkVSSUZZX1JFUVVJUkVEIE1CRURUTFNfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0hXX0FDQ0VMX0ZBTExUSFJPVUdIIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUxMVEhST1VHSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0lOVEVSTkFMX0VSUk9SIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0lOVkFMSURfTUFDIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQworI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0lOVkFMSURfUkVDT1JEIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX01BTExPQ19GQUlMRUQgTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX05PX0NJUEhFUl9DSE9TRU4gTUJFRFRMU19FUlJfU1NMX05PX0NJUEhFUl9DSE9TRU4KKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9OT19DTElFTlRfQ0VSVElGSUNBVEUgTUJFRFRMU19FUlJfU1NMX05PX0NMSUVOVF9DRVJUSUZJQ0FURQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX05PX1JORyBNQkVEVExTX0VSUl9TU0xfTk9fUk5HCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfTk9fVVNBQkxFX0NJUEhFUlNVSVRFIE1CRURUTFNfRVJSX1NTTF9OT19VU0FCTEVfQ0lQSEVSU1VJVEUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlkKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9QRUVSX1ZFUklGWV9GQUlMRUQgTUJFRFRMU19FUlJfU1NMX1BFRVJfVkVSSUZZX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX1BLX1RZUEVfTUlTTUFUQ0ggTUJFRFRMU19FUlJfU1NMX1BLX1RZUEVfTUlTTUFUQ0gKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9QUklWQVRFX0tFWV9SRVFVSVJFRCBNQkVEVExTX0VSUl9TU0xfUFJJVkFURV9LRVlfUkVRVUlSRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9TRVNTSU9OX1RJQ0tFVF9FWFBJUkVEIE1CRURUTFNfRVJSX1NTTF9TRVNTSU9OX1RJQ0tFVF9FWFBJUkVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9VTktOT1dOX0NJUEhFUiBNQkVEVExTX0VSUl9TU0xfVU5LTk9XTl9DSVBIRVIKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9VTktOT1dOX0lERU5USVRZIE1CRURUTFNfRVJSX1NTTF9VTktOT1dOX0lERU5USVRZCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfV0FJVElOR19TRVJWRVJfSEVMTE9fUkVORUdPIE1CRURUTFNfRVJSX1NTTF9XQUlUSU5HX1NFUlZFUl9IRUxMT19SRU5FR08KKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1RIUkVBRElOR19CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9USFJFQURJTkdfQkFEX0lOUFVUX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1RIUkVBRElOR19GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX1RIUkVBRElOR19GRUFUVVJFX1VOQVZBSUxBQkxFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfQ0VSVF9VTktOT1dOX0ZPUk1BVCBNQkVEVExTX0VSUl9YNTA5X0NFUlRfVU5LTk9XTl9GT1JNQVQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEIE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X0ZFQVRVUkVfVU5BVkFJTEFCTEUgTUJFRFRMU19FUlJfWDUwOV9GRUFUVVJFX1VOQVZBSUxBQkxFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfWDUwOV9GSUxFX0lPX0VSUk9SCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfQUxHIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9EQVRFIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUworI2RlZmluZSBQT0xBUlNTTF9FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfTkFNRSBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfWDUwOV9JTlZBTElEX1NFUklBTCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0VSSUFMCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfU0lHTkFUVVJFIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TSUdOQVRVUkUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X01BTExPQ19GQUlMRUQgTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfU0lHX01JU01BVENIIE1CRURUTFNfRVJSX1g1MDlfU0lHX01JU01BVENICisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X1VOS05PV05fT0lEIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9PSUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfVU5LTk9XTl9TSUdfQUxHIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9TSUdfQUxHCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X1VOS05PV05fVkVSU0lPTiBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fVkVSU0lPTgorI2RlZmluZSBQT0xBUlNTTF9FUlJfWFRFQV9JTlZBTElEX0lOUFVUX0xFTkdUSCBNQkVEVExTX0VSUl9YVEVBX0lOVkFMSURfSU5QVVRfTEVOR1RICisjZGVmaW5lIFBPTEFSU1NMX0dDTV9IIE1CRURUTFNfR0NNX0gKKyNkZWZpbmUgUE9MQVJTU0xfSEFWRUdFX0ggTUJFRFRMU19IQVZFR0VfSAorI2RlZmluZSBQT0xBUlNTTF9IQVZFX0lOVDMyIE1CRURUTFNfSEFWRV9JTlQzMgorI2RlZmluZSBQT0xBUlNTTF9IQVZFX0lOVDY0IE1CRURUTFNfSEFWRV9JTlQ2NAorI2RlZmluZSBQT0xBUlNTTF9IQVZFX1VEQkwgTUJFRFRMU19IQVZFX1VEQkwKKyNkZWZpbmUgUE9MQVJTU0xfSEFWRV9YODYgTUJFRFRMU19IQVZFX1g4NgorI2RlZmluZSBQT0xBUlNTTF9IQVZFX1g4Nl82NCBNQkVEVExTX0hBVkVfWDg2XzY0CisjZGVmaW5lIFBPTEFSU1NMX0hNQUNfRFJCR19IIE1CRURUTFNfSE1BQ19EUkJHX0gKKyNkZWZpbmUgUE9MQVJTU0xfSE1BQ19EUkJHX1BSX09GRiBNQkVEVExTX0hNQUNfRFJCR19QUl9PRkYKKyNkZWZpbmUgUE9MQVJTU0xfSE1BQ19EUkJHX1BSX09OIE1CRURUTFNfSE1BQ19EUkJHX1BSX09OCisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9ESEVfUFNLIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0RIRV9SU0EgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQQorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQQorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESF9SU0EgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX05PTkUgTUJFRFRMU19LRVlfRVhDSEFOR0VfTk9ORQorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfUFNLIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSworI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfUlNBIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQQorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfUlNBX1BTSyBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLCisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9fU09NRV9fRUNESEVfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fRUNESEVfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0tFWV9MRU5HVEhfREVTIE1CRURUTFNfS0VZX0xFTkdUSF9ERVMKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0xFTkdUSF9ERVNfRURFIE1CRURUTFNfS0VZX0xFTkdUSF9ERVNfRURFCisjZGVmaW5lIFBPTEFSU1NMX0tFWV9MRU5HVEhfREVTX0VERTMgTUJFRFRMU19LRVlfTEVOR1RIX0RFU19FREUzCisjZGVmaW5lIFBPTEFSU1NMX0tFWV9MRU5HVEhfTk9ORSBNQkVEVExTX0tFWV9MRU5HVEhfTk9ORQorI2RlZmluZSBQT0xBUlNTTF9NQVhfQkxPQ0tfTEVOR1RIIE1CRURUTFNfTUFYX0JMT0NLX0xFTkdUSAorI2RlZmluZSBQT0xBUlNTTF9NQVhfSVZfTEVOR1RIIE1CRURUTFNfTUFYX0lWX0xFTkdUSAorI2RlZmluZSBQT0xBUlNTTF9NRDJfSCBNQkVEVExTX01EMl9ICisjZGVmaW5lIFBPTEFSU1NMX01ENF9IIE1CRURUTFNfTUQ0X0gKKyNkZWZpbmUgUE9MQVJTU0xfTUQ1X0ggTUJFRFRMU19NRDVfSAorI2RlZmluZSBQT0xBUlNTTF9NRF9IIE1CRURUTFNfTURfSAorI2RlZmluZSBQT0xBUlNTTF9NRF9NQVhfU0laRSBNQkVEVExTX01EX01BWF9TSVpFCisjZGVmaW5lIFBPTEFSU1NMX01EX01EMiBNQkVEVExTX01EX01EMgorI2RlZmluZSBQT0xBUlNTTF9NRF9NRDQgTUJFRFRMU19NRF9NRDQKKyNkZWZpbmUgUE9MQVJTU0xfTURfTUQ1IE1CRURUTFNfTURfTUQ1CisjZGVmaW5lIFBPTEFSU1NMX01EX05PTkUgTUJFRFRMU19NRF9OT05FCisjZGVmaW5lIFBPTEFSU1NMX01EX1JJUEVNRDE2MCBNQkVEVExTX01EX1JJUEVNRDE2MAorI2RlZmluZSBQT0xBUlNTTF9NRF9TSEExIE1CRURUTFNfTURfU0hBMQorI2RlZmluZSBQT0xBUlNTTF9NRF9TSEEyMjQgTUJFRFRMU19NRF9TSEEyMjQKKyNkZWZpbmUgUE9MQVJTU0xfTURfU0hBMjU2IE1CRURUTFNfTURfU0hBMjU2CisjZGVmaW5lIFBPTEFSU1NMX01EX1NIQTM4NCBNQkVEVExTX01EX1NIQTM4NAorI2RlZmluZSBQT0xBUlNTTF9NRF9TSEE1MTIgTUJFRFRMU19NRF9TSEE1MTIKKyNkZWZpbmUgUE9MQVJTU0xfTURfV1JBUF9IIE1CRURUTFNfTURfV1JBUF9ICisjZGVmaW5lIFBPTEFSU1NMX01FTU9SWV9CVUZGRVJfQUxMT0NfSCBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfSAorI2RlZmluZSBQT0xBUlNTTF9NRU1PUllfSCBNQkVEVExTX01FTU9SWV9ICisjZGVmaW5lIFBPTEFSU1NMX01PREVfQ0JDIE1CRURUTFNfTU9ERV9DQkMKKyNkZWZpbmUgUE9MQVJTU0xfTU9ERV9DQ00gTUJFRFRMU19NT0RFX0NDTQorI2RlZmluZSBQT0xBUlNTTF9NT0RFX0NGQiBNQkVEVExTX01PREVfQ0ZCCisjZGVmaW5lIFBPTEFSU1NMX01PREVfQ1RSIE1CRURUTFNfTU9ERV9DVFIKKyNkZWZpbmUgUE9MQVJTU0xfTU9ERV9FQ0IgTUJFRFRMU19NT0RFX0VDQgorI2RlZmluZSBQT0xBUlNTTF9NT0RFX0dDTSBNQkVEVExTX01PREVfR0NNCisjZGVmaW5lIFBPTEFSU1NMX01PREVfTk9ORSBNQkVEVExTX01PREVfTk9ORQorI2RlZmluZSBQT0xBUlNTTF9NT0RFX09GQiBNQkVEVExTX01PREVfT0ZCCisjZGVmaW5lIFBPTEFSU1NMX01PREVfU1RSRUFNIE1CRURUTFNfTU9ERV9TVFJFQU0KKyNkZWZpbmUgUE9MQVJTU0xfTVBJX01BWF9CSVRTIE1CRURUTFNfTVBJX01BWF9CSVRTCisjZGVmaW5lIFBPTEFSU1NMX01QSV9NQVhfQklUU19TQ0FMRTEwMCBNQkVEVExTX01QSV9NQVhfQklUU19TQ0FMRTEwMAorI2RlZmluZSBQT0xBUlNTTF9NUElfTUFYX0xJTUJTIE1CRURUTFNfTVBJX01BWF9MSU1CUworI2RlZmluZSBQT0xBUlNTTF9NUElfUldfQlVGRkVSX1NJWkUgTUJFRFRMU19NUElfUldfQlVGRkVSX1NJWkUKKyNkZWZpbmUgUE9MQVJTU0xfTkVUX0ggTUJFRFRMU19ORVRfSAorI2RlZmluZSBQT0xBUlNTTF9ORVRfTElTVEVOX0JBQ0tMT0cgTUJFRFRMU19ORVRfTElTVEVOX0JBQ0tMT0cKKyNkZWZpbmUgUE9MQVJTU0xfT0lEX0ggTUJFRFRMU19PSURfSAorI2RlZmluZSBQT0xBUlNTTF9PUEVSQVRJT05fTk9ORSBNQkVEVExTX09QRVJBVElPTl9OT05FCisjZGVmaW5lIFBPTEFSU1NMX1BBRERJTkdfTk9ORSBNQkVEVExTX1BBRERJTkdfTk9ORQorI2RlZmluZSBQT0xBUlNTTF9QQURESU5HX09ORV9BTkRfWkVST1MgTUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKyNkZWZpbmUgUE9MQVJTU0xfUEFERElOR19QS0NTNyBNQkVEVExTX1BBRERJTkdfUEtDUzcKKyNkZWZpbmUgUE9MQVJTU0xfUEFERElOR19aRVJPUyBNQkVEVExTX1BBRERJTkdfWkVST1MKKyNkZWZpbmUgUE9MQVJTU0xfUEFERElOR19aRVJPU19BTkRfTEVOIE1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisjZGVmaW5lIFBPTEFSU1NMX1BBRExPQ0tfSCBNQkVEVExTX1BBRExPQ0tfSAorI2RlZmluZSBQT0xBUlNTTF9QQktERjJfSCBNQkVEVExTX1BCS0RGMl9ICisjZGVmaW5lIFBPTEFSU1NMX1BFTV9IIE1CRURUTFNfUEVNX0gKKyNkZWZpbmUgUE9MQVJTU0xfUEtDUzExX0ggTUJFRFRMU19QS0NTMTFfSAorI2RlZmluZSBQT0xBUlNTTF9QS0NTMTJfSCBNQkVEVExTX1BLQ1MxMl9ICisjZGVmaW5lIFBPTEFSU1NMX1BLQ1M1X0ggTUJFRFRMU19QS0NTNV9ICisjZGVmaW5lIFBPTEFSU1NMX1BLX0RFQlVHX0VDUCBNQkVEVExTX1BLX0RFQlVHX0VDUAorI2RlZmluZSBQT0xBUlNTTF9QS19ERUJVR19NQVhfSVRFTVMgTUJFRFRMU19QS19ERUJVR19NQVhfSVRFTVMKKyNkZWZpbmUgUE9MQVJTU0xfUEtfREVCVUdfTVBJIE1CRURUTFNfUEtfREVCVUdfTVBJCisjZGVmaW5lIFBPTEFSU1NMX1BLX0RFQlVHX05PTkUgTUJFRFRMU19QS19ERUJVR19OT05FCisjZGVmaW5lIFBPTEFSU1NMX1BLX0VDRFNBIE1CRURUTFNfUEtfRUNEU0EKKyNkZWZpbmUgUE9MQVJTU0xfUEtfRUNLRVkgTUJFRFRMU19QS19FQ0tFWQorI2RlZmluZSBQT0xBUlNTTF9QS19FQ0tFWV9ESCBNQkVEVExTX1BLX0VDS0VZX0RICisjZGVmaW5lIFBPTEFSU1NMX1BLX0ggTUJFRFRMU19QS19ICisjZGVmaW5lIFBPTEFSU1NMX1BLX05PTkUgTUJFRFRMU19QS19OT05FCisjZGVmaW5lIFBPTEFSU1NMX1BLX1JTQSBNQkVEVExTX1BLX1JTQQorI2RlZmluZSBQT0xBUlNTTF9QS19SU0FTU0FfUFNTIE1CRURUTFNfUEtfUlNBU1NBX1BTUworI2RlZmluZSBQT0xBUlNTTF9QS19SU0FfQUxUIE1CRURUTFNfUEtfUlNBX0FMVAorI2RlZmluZSBQT0xBUlNTTF9QS19XUkFQX0ggTUJFRFRMU19QS19XUkFQX0gKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fSCBNQkVEVExTX1BMQVRGT1JNX0gKKyNkZWZpbmUgUE9MQVJTU0xfUFJFTUFTVEVSX1NJWkUgTUJFRFRMU19QUkVNQVNURVJfU0laRQorI2RlZmluZSBQT0xBUlNTTF9SSVBFTUQxNjBfSCBNQkVEVExTX1JJUEVNRDE2MF9ICisjZGVmaW5lIFBPTEFSU1NMX1JTQV9IIE1CRURUTFNfUlNBX0gKKyNkZWZpbmUgUE9MQVJTU0xfU0hBMV9IIE1CRURUTFNfU0hBMV9ICisjZGVmaW5lIFBPTEFSU1NMX1NIQTI1Nl9IIE1CRURUTFNfU0hBMjU2X0gKKyNkZWZpbmUgUE9MQVJTU0xfU0hBNTEyX0ggTUJFRFRMU19TSEE1MTJfSAorI2RlZmluZSBQT0xBUlNTTF9TU0xfQ0FDSEVfSCBNQkVEVExTX1NTTF9DQUNIRV9ICisjZGVmaW5lIFBPTEFSU1NMX1NTTF9DSVBIRVJTVUlURVNfSCBNQkVEVExTX1NTTF9DSVBIRVJTVUlURVNfSAorI2RlZmluZSBQT0xBUlNTTF9TU0xfQ09PS0lFX0ggTUJFRFRMU19TU0xfQ09PS0lFX0gKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0ggTUJFRFRMU19TU0xfSAorI2RlZmluZSBQT0xBUlNTTF9USFJFQURJTkdfSCBNQkVEVExTX1RIUkVBRElOR19ICisjZGVmaW5lIFBPTEFSU1NMX1RIUkVBRElOR19JTVBMIE1CRURUTFNfVEhSRUFESU5HX0lNUEwKKyNkZWZpbmUgUE9MQVJTU0xfVElNSU5HX0ggTUJFRFRMU19USU1JTkdfSAorI2RlZmluZSBQT0xBUlNTTF9WRVJTSU9OX0ggTUJFRFRMU19WRVJTSU9OX0gKKyNkZWZpbmUgUE9MQVJTU0xfVkVSU0lPTl9NQUpPUiBNQkVEVExTX1ZFUlNJT05fTUFKT1IKKyNkZWZpbmUgUE9MQVJTU0xfVkVSU0lPTl9NSU5PUiBNQkVEVExTX1ZFUlNJT05fTUlOT1IKKyNkZWZpbmUgUE9MQVJTU0xfVkVSU0lPTl9OVU1CRVIgTUJFRFRMU19WRVJTSU9OX05VTUJFUgorI2RlZmluZSBQT0xBUlNTTF9WRVJTSU9OX1BBVENIIE1CRURUTFNfVkVSU0lPTl9QQVRDSAorI2RlZmluZSBQT0xBUlNTTF9WRVJTSU9OX1NUUklORyBNQkVEVExTX1ZFUlNJT05fU1RSSU5HCisjZGVmaW5lIFBPTEFSU1NMX1ZFUlNJT05fU1RSSU5HX0ZVTEwgTUJFRFRMU19WRVJTSU9OX1NUUklOR19GVUxMCisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfQ1JMX0ggTUJFRFRMU19YNTA5X0NSTF9ICisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfQ1JUX0ggTUJFRFRMU19YNTA5X0NSVF9ICisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfQ1NSX0ggTUJFRFRMU19YNTA5X0NTUl9ICisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfSCBNQkVEVExTX1g1MDlfSAorI2RlZmluZSBQT0xBUlNTTF9YVEVBX0ggTUJFRFRMU19YVEVBX0gKKyNkZWZpbmUgUlNBX0NSWVBUIE1CRURUTFNfUlNBX0NSWVBUCisjZGVmaW5lIFJTQV9QS0NTX1YxNSBNQkVEVExTX1JTQV9QS0NTX1YxNQorI2RlZmluZSBSU0FfUEtDU19WMjEgTUJFRFRMU19SU0FfUEtDU19WMjEKKyNkZWZpbmUgUlNBX1BSSVZBVEUgTUJFRFRMU19SU0FfUFJJVkFURQorI2RlZmluZSBSU0FfUFVCTElDIE1CRURUTFNfUlNBX1BVQkxJQworI2RlZmluZSBSU0FfU0FMVF9MRU5fQU5ZIE1CRURUTFNfUlNBX1NBTFRfTEVOX0FOWQorI2RlZmluZSBSU0FfU0lHTiBNQkVEVExTX1JTQV9TSUdOCisjZGVmaW5lIFNTTF9BTEVSVF9MRVZFTF9GQVRBTCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTAorI2RlZmluZSBTU0xfQUxFUlRfTEVWRUxfV0FSTklORyBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9XQVJOSU5HCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfQUNDRVNTX0RFTklFRCBNQkVEVExTX1NTTF9BTEVSVF9NU0dfQUNDRVNTX0RFTklFRAorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0JBRF9DRVJUIE1CRURUTFNfU1NMX0FMRVJUX01TR19CQURfQ0VSVAorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0JBRF9SRUNPUkRfTUFDIE1CRURUTFNfU1NMX0FMRVJUX01TR19CQURfUkVDT1JEX01BQworI2RlZmluZSBTU0xfQUxFUlRfTVNHX0NFUlRfRVhQSVJFRCBNQkVEVExTX1NTTF9BTEVSVF9NU0dfQ0VSVF9FWFBJUkVECisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfQ0VSVF9SRVZPS0VEIE1CRURUTFNfU1NMX0FMRVJUX01TR19DRVJUX1JFVk9LRUQKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19DRVJUX1VOS05PV04gTUJFRFRMU19TU0xfQUxFUlRfTVNHX0NFUlRfVU5LTk9XTgorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0NMT1NFX05PVElGWSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfQ0xPU0VfTk9USUZZCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfREVDT0RFX0VSUk9SIE1CRURUTFNfU1NMX0FMRVJUX01TR19ERUNPREVfRVJST1IKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19ERUNPTVBSRVNTSU9OX0ZBSUxVUkUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ09NUFJFU1NJT05fRkFJTFVSRQorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0RFQ1JZUFRJT05fRkFJTEVEIE1CRURUTFNfU1NMX0FMRVJUX01TR19ERUNSWVBUSU9OX0ZBSUxFRAorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0RFQ1JZUFRfRVJST1IgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ1JZUFRfRVJST1IKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19FWFBPUlRfUkVTVFJJQ1RJT04gTUJFRFRMU19TU0xfQUxFUlRfTVNHX0VYUE9SVF9SRVNUUklDVElPTgorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0hBTkRTSEFLRV9GQUlMVVJFIE1CRURUTFNfU1NMX0FMRVJUX01TR19IQU5EU0hBS0VfRkFJTFVSRQorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0lMTEVHQUxfUEFSQU1FVEVSIE1CRURUTFNfU1NMX0FMRVJUX01TR19JTExFR0FMX1BBUkFNRVRFUgorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0lOQVBST1BSSUFURV9GQUxMQkFDSyBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSU5BUFJPUFJJQVRFX0ZBTExCQUNLCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfSU5TVUZGSUNJRU5UX1NFQ1VSSVRZIE1CRURUTFNfU1NMX0FMRVJUX01TR19JTlNVRkZJQ0lFTlRfU0VDVVJJVFkKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19JTlRFUk5BTF9FUlJPUiBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSU5URVJOQUxfRVJST1IKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19OT19BUFBMSUNBVElPTl9QUk9UT0NPTCBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fQVBQTElDQVRJT05fUFJPVE9DT0wKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19OT19DRVJUIE1CRURUTFNfU1NMX0FMRVJUX01TR19OT19DRVJUCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfTk9fUkVORUdPVElBVElPTiBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fUkVORUdPVElBVElPTgorI2RlZmluZSBTU0xfQUxFUlRfTVNHX1BST1RPQ09MX1ZFUlNJT04gTUJFRFRMU19TU0xfQUxFUlRfTVNHX1BST1RPQ09MX1ZFUlNJT04KKyNkZWZpbmUgU1NMX0FMRVJUX01TR19SRUNPUkRfT1ZFUkZMT1cgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1JFQ09SRF9PVkVSRkxPVworI2RlZmluZSBTU0xfQUxFUlRfTVNHX1VORVhQRUNURURfTUVTU0FHRSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5FWFBFQ1RFRF9NRVNTQUdFCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfVU5LTk9XTl9DQSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5LTk9XTl9DQQorI2RlZmluZSBTU0xfQUxFUlRfTVNHX1VOS05PV05fUFNLX0lERU5USVRZIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTktOT1dOX1BTS19JREVOVElUWQorI2RlZmluZSBTU0xfQUxFUlRfTVNHX1VOUkVDT0dOSVpFRF9OQU1FIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTlJFQ09HTklaRURfTkFNRQorI2RlZmluZSBTU0xfQUxFUlRfTVNHX1VOU1VQUE9SVEVEX0NFUlQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOU1VQUE9SVEVEX0NFUlQKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19VTlNVUFBPUlRFRF9FWFQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOU1VQUE9SVEVEX0VYVAorI2RlZmluZSBTU0xfQUxFUlRfTVNHX1VTRVJfQ0FOQ0VMRUQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VTRVJfQ0FOQ0VMRUQKKyNkZWZpbmUgU1NMX0FOVElfUkVQTEFZX0RJU0FCTEVEIE1CRURUTFNfU1NMX0FOVElfUkVQTEFZX0RJU0FCTEVECisjZGVmaW5lIFNTTF9BTlRJX1JFUExBWV9FTkFCTEVEIE1CRURUTFNfU1NMX0FOVElfUkVQTEFZX0VOQUJMRUQKKyNkZWZpbmUgU1NMX0FSQzRfRElTQUJMRUQgTUJFRFRMU19TU0xfQVJDNF9ESVNBQkxFRAorI2RlZmluZSBTU0xfQVJDNF9FTkFCTEVEIE1CRURUTFNfU1NMX0FSQzRfRU5BQkxFRAorI2RlZmluZSBTU0xfQlVGRkVSX0xFTiBNQkVEVExTX1NTTF9CVUZGRVJfTEVOCisjZGVmaW5lIFNTTF9DQUNIRV9ERUZBVUxUX01BWF9FTlRSSUVTIE1CRURUTFNfU1NMX0NBQ0hFX0RFRkFVTFRfTUFYX0VOVFJJRVMKKyNkZWZpbmUgU1NMX0NBQ0hFX0RFRkFVTFRfVElNRU9VVCBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX1RJTUVPVVQKKyNkZWZpbmUgU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0RJU0FCTEVEIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0RJU0FCTEVECisjZGVmaW5lIFNTTF9DQkNfUkVDT1JEX1NQTElUVElOR19FTkFCTEVEIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0VOQUJMRUQKKyNkZWZpbmUgU1NMX0NFUlRJRklDQVRFX1JFUVVFU1QgTUJFRFRMU19TU0xfQ0VSVElGSUNBVEVfUkVRVUVTVAorI2RlZmluZSBTU0xfQ0VSVElGSUNBVEVfVkVSSUZZIE1CRURUTFNfU1NMX0NFUlRJRklDQVRFX1ZFUklGWQorI2RlZmluZSBTU0xfQ0VSVF9UWVBFX0VDRFNBX1NJR04gTUJFRFRMU19TU0xfQ0VSVF9UWVBFX0VDRFNBX1NJR04KKyNkZWZpbmUgU1NMX0NFUlRfVFlQRV9SU0FfU0lHTiBNQkVEVExTX1NTTF9DRVJUX1RZUEVfUlNBX1NJR04KKyNkZWZpbmUgU1NMX0NIQU5ORUxfSU5CT1VORCBNQkVEVExTX1NTTF9DSEFOTkVMX0lOQk9VTkQKKyNkZWZpbmUgU1NMX0NIQU5ORUxfT1VUQk9VTkQgTUJFRFRMU19TU0xfQ0hBTk5FTF9PVVRCT1VORAorI2RlZmluZSBTU0xfQ0lQSEVSU1VJVEVTIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUworI2RlZmluZSBTU0xfQ0xJRU5UX0NFUlRJRklDQVRFIE1CRURUTFNfU1NMX0NMSUVOVF9DRVJUSUZJQ0FURQorI2RlZmluZSBTU0xfQ0xJRU5UX0NIQU5HRV9DSVBIRVJfU1BFQyBNQkVEVExTX1NTTF9DTElFTlRfQ0hBTkdFX0NJUEhFUl9TUEVDCisjZGVmaW5lIFNTTF9DTElFTlRfRklOSVNIRUQgTUJFRFRMU19TU0xfQ0xJRU5UX0ZJTklTSEVECisjZGVmaW5lIFNTTF9DTElFTlRfSEVMTE8gTUJFRFRMU19TU0xfQ0xJRU5UX0hFTExPCisjZGVmaW5lIFNTTF9DTElFTlRfS0VZX0VYQ0hBTkdFIE1CRURUTFNfU1NMX0NMSUVOVF9LRVlfRVhDSEFOR0UKKyNkZWZpbmUgU1NMX0NPTVBSRVNTSU9OX0FERCBNQkVEVExTX1NTTF9DT01QUkVTU0lPTl9BREQKKyNkZWZpbmUgU1NMX0NPTVBSRVNTX0RFRkxBVEUgTUJFRFRMU19TU0xfQ09NUFJFU1NfREVGTEFURQorI2RlZmluZSBTU0xfQ09NUFJFU1NfTlVMTCBNQkVEVExTX1NTTF9DT01QUkVTU19OVUxMCisjZGVmaW5lIFNTTF9ERUJVR19CVUYgTUJFRFRMU19TU0xfREVCVUdfQlVGCisjZGVmaW5lIFNTTF9ERUJVR19DUlQgTUJFRFRMU19TU0xfREVCVUdfQ1JUCisjZGVmaW5lIFNTTF9ERUJVR19FQ1AgTUJFRFRMU19TU0xfREVCVUdfRUNQCisjZGVmaW5lIFNTTF9ERUJVR19NUEkgTUJFRFRMU19TU0xfREVCVUdfTVBJCisjZGVmaW5lIFNTTF9ERUJVR19NU0cgTUJFRFRMU19TU0xfREVCVUdfTVNHCisjZGVmaW5lIFNTTF9ERUJVR19SRVQgTUJFRFRMU19TU0xfREVCVUdfUkVUCisjZGVmaW5lIFNTTF9ERUZBVUxUX1RJQ0tFVF9MSUZFVElNRSBNQkVEVExTX1NTTF9ERUZBVUxUX1RJQ0tFVF9MSUZFVElNRQorI2RlZmluZSBTU0xfRFRMU19USU1FT1VUX0RGTF9NQVggTUJFRFRMU19TU0xfRFRMU19USU1FT1VUX0RGTF9NQVgKKyNkZWZpbmUgU1NMX0RUTFNfVElNRU9VVF9ERkxfTUlOIE1CRURUTFNfU1NMX0RUTFNfVElNRU9VVF9ERkxfTUlOCisjZGVmaW5lIFNTTF9FTVBUWV9SRU5FR09USUFUSU9OX0lORk8gTUJFRFRMU19TU0xfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPCisjZGVmaW5lIFNTTF9FVE1fRElTQUJMRUQgTUJFRFRMU19TU0xfRVRNX0RJU0FCTEVECisjZGVmaW5lIFNTTF9FVE1fRU5BQkxFRCBNQkVEVExTX1NTTF9FVE1fRU5BQkxFRAorI2RlZmluZSBTU0xfRVhURU5ERURfTVNfRElTQUJMRUQgTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRElTQUJMRUQKKyNkZWZpbmUgU1NMX0VYVEVOREVEX01TX0VOQUJMRUQgTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRU5BQkxFRAorI2RlZmluZSBTU0xfRkFMTEJBQ0tfU0NTViBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWCisjZGVmaW5lIFNTTF9GTFVTSF9CVUZGRVJTIE1CRURUTFNfU1NMX0ZMVVNIX0JVRkZFUlMKKyNkZWZpbmUgU1NMX0hBTkRTSEFLRV9PVkVSIE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSCisjZGVmaW5lIFNTTF9IQU5EU0hBS0VfV1JBUFVQIE1CRURUTFNfU1NMX0hBTkRTSEFLRV9XUkFQVVAKKyNkZWZpbmUgU1NMX0hBU0hfTUQ1IE1CRURUTFNfU1NMX0hBU0hfTUQ1CisjZGVmaW5lIFNTTF9IQVNIX05PTkUgTUJFRFRMU19TU0xfSEFTSF9OT05FCisjZGVmaW5lIFNTTF9IQVNIX1NIQTEgTUJFRFRMU19TU0xfSEFTSF9TSEExCisjZGVmaW5lIFNTTF9IQVNIX1NIQTIyNCBNQkVEVExTX1NTTF9IQVNIX1NIQTIyNAorI2RlZmluZSBTU0xfSEFTSF9TSEEyNTYgTUJFRFRMU19TU0xfSEFTSF9TSEEyNTYKKyNkZWZpbmUgU1NMX0hBU0hfU0hBMzg0IE1CRURUTFNfU1NMX0hBU0hfU0hBMzg0CisjZGVmaW5lIFNTTF9IQVNIX1NIQTUxMiBNQkVEVExTX1NTTF9IQVNIX1NIQTUxMgorI2RlZmluZSBTU0xfSEVMTE9fUkVRVUVTVCBNQkVEVExTX1NTTF9IRUxMT19SRVFVRVNUCisjZGVmaW5lIFNTTF9IU19DRVJUSUZJQ0FURSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURQorI2RlZmluZSBTU0xfSFNfQ0VSVElGSUNBVEVfUkVRVUVTVCBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUCisjZGVmaW5lIFNTTF9IU19DRVJUSUZJQ0FURV9WRVJJRlkgTUJFRFRMU19TU0xfSFNfQ0VSVElGSUNBVEVfVkVSSUZZCisjZGVmaW5lIFNTTF9IU19DTElFTlRfSEVMTE8gTUJFRFRMU19TU0xfSFNfQ0xJRU5UX0hFTExPCisjZGVmaW5lIFNTTF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFIE1CRURUTFNfU1NMX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UKKyNkZWZpbmUgU1NMX0hTX0ZJTklTSEVEIE1CRURUTFNfU1NMX0hTX0ZJTklTSEVECisjZGVmaW5lIFNTTF9IU19IRUxMT19SRVFVRVNUIE1CRURUTFNfU1NMX0hTX0hFTExPX1JFUVVFU1QKKyNkZWZpbmUgU1NMX0hTX0hFTExPX1ZFUklGWV9SRVFVRVNUIE1CRURUTFNfU1NMX0hTX0hFTExPX1ZFUklGWV9SRVFVRVNUCisjZGVmaW5lIFNTTF9IU19ORVdfU0VTU0lPTl9USUNLRVQgTUJFRFRMU19TU0xfSFNfTkVXX1NFU1NJT05fVElDS0VUCisjZGVmaW5lIFNTTF9IU19TRVJWRVJfSEVMTE8gTUJFRFRMU19TU0xfSFNfU0VSVkVSX0hFTExPCisjZGVmaW5lIFNTTF9IU19TRVJWRVJfSEVMTE9fRE9ORSBNQkVEVExTX1NTTF9IU19TRVJWRVJfSEVMTE9fRE9ORQorI2RlZmluZSBTU0xfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSBNQkVEVExTX1NTTF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFCisjZGVmaW5lIFNTTF9JTklUSUFMX0hBTkRTSEFLRSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRQorI2RlZmluZSBTU0xfSVNfQ0xJRU5UIE1CRURUTFNfU1NMX0lTX0NMSUVOVAorI2RlZmluZSBTU0xfSVNfRkFMTEJBQ0sgTUJFRFRMU19TU0xfSVNfRkFMTEJBQ0sKKyNkZWZpbmUgU1NMX0lTX05PVF9GQUxMQkFDSyBNQkVEVExTX1NTTF9JU19OT1RfRkFMTEJBQ0sKKyNkZWZpbmUgU1NMX0lTX1NFUlZFUiBNQkVEVExTX1NTTF9JU19TRVJWRVIKKyNkZWZpbmUgU1NMX0xFR0FDWV9BTExPV19SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX0xFR0FDWV9BTExPV19SRU5FR09USUFUSU9OCisjZGVmaW5lIFNTTF9MRUdBQ1lfQlJFQUtfSEFORFNIQUtFIE1CRURUTFNfU1NMX0xFR0FDWV9CUkVBS19IQU5EU0hBS0UKKyNkZWZpbmUgU1NMX0xFR0FDWV9OT19SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX0xFR0FDWV9OT19SRU5FR09USUFUSU9OCisjZGVmaW5lIFNTTF9MRUdBQ1lfUkVORUdPVElBVElPTiBNQkVEVExTX1NTTF9MRUdBQ1lfUkVORUdPVElBVElPTgorI2RlZmluZSBTU0xfTUFDX0FERCBNQkVEVExTX1NTTF9NQUNfQURECisjZGVmaW5lIFNTTF9NQUpPUl9WRVJTSU9OXzMgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zCisjZGVmaW5lIFNTTF9NQVhfQ09OVEVOVF9MRU4gTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOCisjZGVmaW5lIFNTTF9NQVhfRlJBR19MRU5fMTAyNCBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMTAyNAorI2RlZmluZSBTU0xfTUFYX0ZSQUdfTEVOXzIwNDggTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzIwNDgKKyNkZWZpbmUgU1NMX01BWF9GUkFHX0xFTl80MDk2IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl80MDk2CisjZGVmaW5lIFNTTF9NQVhfRlJBR19MRU5fNTEyIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl81MTIKKyNkZWZpbmUgU1NMX01BWF9GUkFHX0xFTl9JTlZBTElEIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9JTlZBTElECisjZGVmaW5lIFNTTF9NQVhfRlJBR19MRU5fTk9ORSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fTk9ORQorI2RlZmluZSBTU0xfTUFYX01BSk9SX1ZFUlNJT04gTUJFRFRMU19TU0xfTUFYX01BSk9SX1ZFUlNJT04KKyNkZWZpbmUgU1NMX01BWF9NSU5PUl9WRVJTSU9OIE1CRURUTFNfU1NMX01BWF9NSU5PUl9WRVJTSU9OCisjZGVmaW5lIFNTTF9NSU5PUl9WRVJTSU9OXzAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wCisjZGVmaW5lIFNTTF9NSU5PUl9WRVJTSU9OXzEgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xCisjZGVmaW5lIFNTTF9NSU5PUl9WRVJTSU9OXzIgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yCisjZGVmaW5lIFNTTF9NSU5PUl9WRVJTSU9OXzMgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zCisjZGVmaW5lIFNTTF9NSU5fTUFKT1JfVkVSU0lPTiBNQkVEVExTX1NTTF9NSU5fTUFKT1JfVkVSU0lPTgorI2RlZmluZSBTU0xfTUlOX01JTk9SX1ZFUlNJT04gTUJFRFRMU19TU0xfTUlOX01JTk9SX1ZFUlNJT04KKyNkZWZpbmUgU1NMX01TR19BTEVSVCBNQkVEVExTX1NTTF9NU0dfQUxFUlQKKyNkZWZpbmUgU1NMX01TR19BUFBMSUNBVElPTl9EQVRBIE1CRURUTFNfU1NMX01TR19BUFBMSUNBVElPTl9EQVRBCisjZGVmaW5lIFNTTF9NU0dfQ0hBTkdFX0NJUEhFUl9TUEVDIE1CRURUTFNfU1NMX01TR19DSEFOR0VfQ0lQSEVSX1NQRUMKKyNkZWZpbmUgU1NMX01TR19IQU5EU0hBS0UgTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRQorI2RlZmluZSBTU0xfUEFERElOR19BREQgTUJFRFRMU19TU0xfUEFERElOR19BREQKKyNkZWZpbmUgU1NMX1JFTkVHT1RJQVRJT04gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTgorI2RlZmluZSBTU0xfUkVORUdPVElBVElPTl9ESVNBQkxFRCBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RJU0FCTEVECisjZGVmaW5lIFNTTF9SRU5FR09USUFUSU9OX0RPTkUgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9ET05FCisjZGVmaW5lIFNTTF9SRU5FR09USUFUSU9OX0VOQUJMRUQgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9FTkFCTEVECisjZGVmaW5lIFNTTF9SRU5FR09USUFUSU9OX05PVF9FTkZPUkNFRCBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX05PVF9FTkZPUkNFRAorI2RlZmluZSBTU0xfUkVORUdPVElBVElPTl9QRU5ESU5HIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fUEVORElORworI2RlZmluZSBTU0xfUkVORUdPX01BWF9SRUNPUkRTX0RFRkFVTFQgTUJFRFRMU19TU0xfUkVORUdPX01BWF9SRUNPUkRTX0RFRkFVTFQKKyNkZWZpbmUgU1NMX1JFVFJBTlNfRklOSVNIRUQgTUJFRFRMU19TU0xfUkVUUkFOU19GSU5JU0hFRAorI2RlZmluZSBTU0xfUkVUUkFOU19QUkVQQVJJTkcgTUJFRFRMU19TU0xfUkVUUkFOU19QUkVQQVJJTkcKKyNkZWZpbmUgU1NMX1JFVFJBTlNfU0VORElORyBNQkVEVExTX1NTTF9SRVRSQU5TX1NFTkRJTkcKKyNkZWZpbmUgU1NMX1JFVFJBTlNfV0FJVElORyBNQkVEVExTX1NTTF9SRVRSQU5TX1dBSVRJTkcKKyNkZWZpbmUgU1NMX1NFQ1VSRV9SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX1NFQ1VSRV9SRU5FR09USUFUSU9OCisjZGVmaW5lIFNTTF9TRVJWRVJfQ0VSVElGSUNBVEUgTUJFRFRMU19TU0xfU0VSVkVSX0NFUlRJRklDQVRFCisjZGVmaW5lIFNTTF9TRVJWRVJfQ0hBTkdFX0NJUEhFUl9TUEVDIE1CRURUTFNfU1NMX1NFUlZFUl9DSEFOR0VfQ0lQSEVSX1NQRUMKKyNkZWZpbmUgU1NMX1NFUlZFUl9GSU5JU0hFRCBNQkVEVExTX1NTTF9TRVJWRVJfRklOSVNIRUQKKyNkZWZpbmUgU1NMX1NFUlZFUl9IRUxMTyBNQkVEVExTX1NTTF9TRVJWRVJfSEVMTE8KKyNkZWZpbmUgU1NMX1NFUlZFUl9IRUxMT19ET05FIE1CRURUTFNfU1NMX1NFUlZFUl9IRUxMT19ET05FCisjZGVmaW5lIFNTTF9TRVJWRVJfSEVMTE9fVkVSSUZZX1JFUVVFU1RfU0VOVCBNQkVEVExTX1NTTF9TRVJWRVJfSEVMTE9fVkVSSUZZX1JFUVVFU1RfU0VOVAorI2RlZmluZSBTU0xfU0VSVkVSX0tFWV9FWENIQU5HRSBNQkVEVExTX1NTTF9TRVJWRVJfS0VZX0VYQ0hBTkdFCisjZGVmaW5lIFNTTF9TRVJWRVJfTkVXX1NFU1NJT05fVElDS0VUIE1CRURUTFNfU1NMX1NFUlZFUl9ORVdfU0VTU0lPTl9USUNLRVQKKyNkZWZpbmUgU1NMX1NFU1NJT05fVElDS0VUU19ESVNBQkxFRCBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFNfRElTQUJMRUQKKyNkZWZpbmUgU1NMX1NFU1NJT05fVElDS0VUU19FTkFCTEVEIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19FTkFCTEVECisjZGVmaW5lIFNTTF9TSUdfQU5PTiBNQkVEVExTX1NTTF9TSUdfQU5PTgorI2RlZmluZSBTU0xfU0lHX0VDRFNBIE1CRURUTFNfU1NMX1NJR19FQ0RTQQorI2RlZmluZSBTU0xfU0lHX1JTQSBNQkVEVExTX1NTTF9TSUdfUlNBCisjZGVmaW5lIFNTTF9UUkFOU1BPUlRfREFUQUdSQU0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNCisjZGVmaW5lIFNTTF9UUkFOU1BPUlRfU1RSRUFNIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0KKyNkZWZpbmUgU1NMX1RSVU5DQVRFRF9ITUFDX0xFTiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQ19MRU4KKyNkZWZpbmUgU1NMX1RSVU5DX0hNQUNfRElTQUJMRUQgTUJFRFRMU19TU0xfVFJVTkNfSE1BQ19ESVNBQkxFRAorI2RlZmluZSBTU0xfVFJVTkNfSE1BQ19FTkFCTEVEIE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRU5BQkxFRAorI2RlZmluZSBTU0xfVkVSSUZZX0RBVEFfTUFYX0xFTiBNQkVEVExTX1NTTF9WRVJJRllfREFUQV9NQVhfTEVOCisjZGVmaW5lIFNTTF9WRVJJRllfTk9ORSBNQkVEVExTX1NTTF9WRVJJRllfTk9ORQorI2RlZmluZSBTU0xfVkVSSUZZX09QVElPTkFMIE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTAorI2RlZmluZSBTU0xfVkVSSUZZX1JFUVVJUkVEIE1CRURUTFNfU1NMX1ZFUklGWV9SRVFVSVJFRAorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyNkZWZpbmUgVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQ00gTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0NNCisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQ01fOCBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQ01fOAorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyNkZWZpbmUgVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0NNIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NDTQorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0NNXzggTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0NNXzgKKyNkZWZpbmUgVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQQorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX05VTExfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NgorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX05VTExfU0hBMzg0IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NAorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyNkZWZpbmUgVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQ00gTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0NNCisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQ01fOCBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQ01fOAorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyNkZWZpbmUgVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0NNIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NDTQorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0NNXzggTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0NNXzgKKyNkZWZpbmUgVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0RFU19DQkNfU0hBIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9ERVNfQ0JDX1NIQQorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyNkZWZpbmUgVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0NNIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQ00KKyNkZWZpbmUgVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQ01fOCBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0NNXzgKKyNkZWZpbmUgVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyNkZWZpbmUgVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQ00gTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NDTQorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NDTV84IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQ01fOAorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyNkZWZpbmUgVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyNkZWZpbmUgVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX05VTExfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyNkZWZpbmUgVExTX0VDREhFX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorI2RlZmluZSBUTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorI2RlZmluZSBUTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorI2RlZmluZSBUTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQQorI2RlZmluZSBUTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorI2RlZmluZSBUTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESEVfUlNBX1dJVEhfTlVMTF9TSEEgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfTlVMTF9TSEEKKyNkZWZpbmUgVExTX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisjZGVmaW5lIFRMU19FQ0RIX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorI2RlZmluZSBUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyNkZWZpbmUgVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESF9FQ0RTQV9XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9OVUxMX1NIQQorI2RlZmluZSBUTFNfRUNESF9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQQorI2RlZmluZSBUTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorI2RlZmluZSBUTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyNkZWZpbmUgVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyNkZWZpbmUgVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIX1JTQV9XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfTlVMTF9TSEEKKyNkZWZpbmUgVExTX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQQorI2RlZmluZSBUTFNfRVhUX0FMUE4gTUJFRFRMU19UTFNfRVhUX0FMUE4KKyNkZWZpbmUgVExTX0VYVF9FTkNSWVBUX1RIRU5fTUFDIE1CRURUTFNfVExTX0VYVF9FTkNSWVBUX1RIRU5fTUFDCisjZGVmaW5lIFRMU19FWFRfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCBNQkVEVExTX1RMU19FWFRfRVhURU5ERURfTUFTVEVSX1NFQ1JFVAorI2RlZmluZSBUTFNfRVhUX01BWF9GUkFHTUVOVF9MRU5HVEggTUJFRFRMU19UTFNfRVhUX01BWF9GUkFHTUVOVF9MRU5HVEgKKyNkZWZpbmUgVExTX0VYVF9SRU5FR09USUFUSU9OX0lORk8gTUJFRFRMU19UTFNfRVhUX1JFTkVHT1RJQVRJT05fSU5GTworI2RlZmluZSBUTFNfRVhUX1NFUlZFUk5BTUUgTUJFRFRMU19UTFNfRVhUX1NFUlZFUk5BTUUKKyNkZWZpbmUgVExTX0VYVF9TRVJWRVJOQU1FX0hPU1ROQU1FIE1CRURUTFNfVExTX0VYVF9TRVJWRVJOQU1FX0hPU1ROQU1FCisjZGVmaW5lIFRMU19FWFRfU0VTU0lPTl9USUNLRVQgTUJFRFRMU19UTFNfRVhUX1NFU1NJT05fVElDS0VUCisjZGVmaW5lIFRMU19FWFRfU0lHX0FMRyBNQkVEVExTX1RMU19FWFRfU0lHX0FMRworI2RlZmluZSBUTFNfRVhUX1NVUFBPUlRFRF9FTExJUFRJQ19DVVJWRVMgTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9FTExJUFRJQ19DVVJWRVMKKyNkZWZpbmUgVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUUyBNQkVEVExTX1RMU19FWFRfU1VQUE9SVEVEX1BPSU5UX0ZPUk1BVFMKKyNkZWZpbmUgVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUU19QUkVTRU5UIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUU19QUkVTRU5UCisjZGVmaW5lIFRMU19FWFRfVFJVTkNBVEVEX0hNQUMgTUJFRFRMU19UTFNfRVhUX1RSVU5DQVRFRF9ITUFDCisjZGVmaW5lIFRMU19QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBIE1CRURUTFNfVExTX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyNkZWZpbmUgVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyNkZWZpbmUgVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNCisjZGVmaW5lIFRMU19QU0tfV0lUSF9BRVNfMTI4X0NDTV84IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNXzgKKyNkZWZpbmUgVExTX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyNkZWZpbmUgVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyNkZWZpbmUgVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyNkZWZpbmUgVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNCisjZGVmaW5lIFRMU19QU0tfV0lUSF9BRVNfMjU2X0NDTV84IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNXzgKKyNkZWZpbmUgVExTX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyNkZWZpbmUgVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyNkZWZpbmUgVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19QU0tfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQQorI2RlZmluZSBUTFNfUFNLX1dJVEhfTlVMTF9TSEEyNTYgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyNkZWZpbmUgVExTX1BTS19XSVRIX05VTExfU0hBMzg0IE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMzg0CisjZGVmaW5lIFRMU19QU0tfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19QU0tfV0lUSF9SQzRfMTI4X1NIQQorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisjZGVmaW5lIFRMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTM4NCBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEzODQKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyNkZWZpbmUgVExTX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorI2RlZmluZSBUTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorI2RlZmluZSBUTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfUlNBX1dJVEhfQUVTXzEyOF9DQ00gTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQ00KKyNkZWZpbmUgVExTX1JTQV9XSVRIX0FFU18xMjhfQ0NNXzggTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQ01fOAorI2RlZmluZSBUTFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorI2RlZmluZSBUTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQ00gTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQ00KKyNkZWZpbmUgVExTX1JTQV9XSVRIX0FFU18yNTZfQ0NNXzggTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOAorI2RlZmluZSBUTFNfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEKKyNkZWZpbmUgVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKKyNkZWZpbmUgVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfUlNBX1dJVEhfREVTX0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1dJVEhfREVTX0NCQ19TSEEKKyNkZWZpbmUgVExTX1JTQV9XSVRIX05VTExfTUQ1IE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfTUQ1CisjZGVmaW5lIFRMU19SU0FfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX1NIQQorI2RlZmluZSBUTFNfUlNBX1dJVEhfTlVMTF9TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEyNTYKKyNkZWZpbmUgVExTX1JTQV9XSVRIX1JDNF8xMjhfTUQ1IE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfTUQ1CisjZGVmaW5lIFRMU19SU0FfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X1NIQQorI2RlZmluZSBVTDY0IE1CRURUTFNfVUw2NAorI2RlZmluZSBYNTA5X0NSVF9WRVJTSU9OXzEgTUJFRFRMU19YNTA5X0NSVF9WRVJTSU9OXzEKKyNkZWZpbmUgWDUwOV9DUlRfVkVSU0lPTl8yIE1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8yCisjZGVmaW5lIFg1MDlfQ1JUX1ZFUlNJT05fMyBNQkVEVExTX1g1MDlfQ1JUX1ZFUlNJT05fMworI2RlZmluZSBYNTA5X0ZPUk1BVF9ERVIgTUJFRFRMU19YNTA5X0ZPUk1BVF9ERVIKKyNkZWZpbmUgWDUwOV9GT1JNQVRfUEVNIE1CRURUTFNfWDUwOV9GT1JNQVRfUEVNCisjZGVmaW5lIFg1MDlfTUFYX0ROX05BTUVfU0laRSBNQkVEVExTX1g1MDlfTUFYX0ROX05BTUVfU0laRQorI2RlZmluZSBYNTA5X1JGQzUyODBfTUFYX1NFUklBTF9MRU4gTUJFRFRMU19YNTA5X1JGQzUyODBfTUFYX1NFUklBTF9MRU4KKyNkZWZpbmUgWDUwOV9SRkM1MjgwX1VUQ19USU1FX0xFTiBNQkVEVExTX1g1MDlfUkZDNTI4MF9VVENfVElNRV9MRU4KKyNkZWZpbmUgWFRFQV9ERUNSWVBUIE1CRURUTFNfWFRFQV9ERUNSWVBUCisjZGVmaW5lIFhURUFfRU5DUllQVCBNQkVEVExTX1hURUFfRU5DUllQVAorI2RlZmluZSBfYXNuMV9iaXRzdHJpbmcgbWJlZHRsc19hc24xX2JpdHN0cmluZworI2RlZmluZSBfYXNuMV9idWYgbWJlZHRsc19hc24xX2J1ZgorI2RlZmluZSBfYXNuMV9uYW1lZF9kYXRhIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhCisjZGVmaW5lIF9hc24xX3NlcXVlbmNlIG1iZWR0bHNfYXNuMV9zZXF1ZW5jZQorI2RlZmluZSBfc3NsX2NhY2hlX2NvbnRleHQgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dAorI2RlZmluZSBfc3NsX2NhY2hlX2VudHJ5IG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5CisjZGVmaW5lIF9zc2xfY2lwaGVyc3VpdGVfdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90CisjZGVmaW5lIF9zc2xfY29udGV4dCBtYmVkdGxzX3NzbF9jb250ZXh0CisjZGVmaW5lIF9zc2xfZmxpZ2h0X2l0ZW0gbWJlZHRsc19zc2xfZmxpZ2h0X2l0ZW0KKyNkZWZpbmUgX3NzbF9oYW5kc2hha2VfcGFyYW1zIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9wYXJhbXMKKyNkZWZpbmUgX3NzbF9rZXlfY2VydCBtYmVkdGxzX3NzbF9rZXlfY2VydAorI2RlZmluZSBfc3NsX3ByZW1hc3Rlcl9zZWNyZXQgbWJlZHRsc19zc2xfcHJlbWFzdGVyX3NlY3JldAorI2RlZmluZSBfc3NsX3Nlc3Npb24gbWJlZHRsc19zc2xfc2Vzc2lvbgorI2RlZmluZSBfc3NsX3RpY2tldF9rZXlzIG1iZWR0bHNfc3NsX3RpY2tldF9rZXlzCisjZGVmaW5lIF9zc2xfdHJhbnNmb3JtIG1iZWR0bHNfc3NsX3RyYW5zZm9ybQorI2RlZmluZSBfeDUwOV9jcmwgbWJlZHRsc194NTA5X2NybAorI2RlZmluZSBfeDUwOV9jcmxfZW50cnkgbWJlZHRsc194NTA5X2NybF9lbnRyeQorI2RlZmluZSBfeDUwOV9jcnQgbWJlZHRsc194NTA5X2NydAorI2RlZmluZSBfeDUwOV9jc3IgbWJlZHRsc194NTA5X2NzcgorI2RlZmluZSBfeDUwOV90aW1lIG1iZWR0bHNfeDUwOV90aW1lCisjZGVmaW5lIF94NTA5d3JpdGVfY2VydCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0CisjZGVmaW5lIF94NTA5d3JpdGVfY3NyIG1iZWR0bHNfeDUwOXdyaXRlX2NzcgorI2RlZmluZSBhZXNfY29udGV4dCBtYmVkdGxzX2Flc19jb250ZXh0CisjZGVmaW5lIGFlc19jcnlwdF9jYmMgbWJlZHRsc19hZXNfY3J5cHRfY2JjCisjZGVmaW5lIGFlc19jcnlwdF9jZmIxMjggbWJlZHRsc19hZXNfY3J5cHRfY2ZiMTI4CisjZGVmaW5lIGFlc19jcnlwdF9jZmI4IG1iZWR0bHNfYWVzX2NyeXB0X2NmYjgKKyNkZWZpbmUgYWVzX2NyeXB0X2N0ciBtYmVkdGxzX2Flc19jcnlwdF9jdHIKKyNkZWZpbmUgYWVzX2NyeXB0X2VjYiBtYmVkdGxzX2Flc19jcnlwdF9lY2IKKyNkZWZpbmUgYWVzX2ZyZWUgbWJlZHRsc19hZXNfZnJlZQorI2RlZmluZSBhZXNfaW5pdCBtYmVkdGxzX2Flc19pbml0CisjZGVmaW5lIGFlc19zZWxmX3Rlc3QgbWJlZHRsc19hZXNfc2VsZl90ZXN0CisjZGVmaW5lIGFlc19zZXRrZXlfZGVjIG1iZWR0bHNfYWVzX3NldGtleV9kZWMKKyNkZWZpbmUgYWVzX3NldGtleV9lbmMgbWJlZHRsc19hZXNfc2V0a2V5X2VuYworI2RlZmluZSBhZXNuaV9jcnlwdF9lY2IgbWJlZHRsc19hZXNuaV9jcnlwdF9lY2IKKyNkZWZpbmUgYWVzbmlfZ2NtX211bHQgbWJlZHRsc19hZXNuaV9nY21fbXVsdAorI2RlZmluZSBhZXNuaV9pbnZlcnNlX2tleSBtYmVkdGxzX2Flc25pX2ludmVyc2Vfa2V5CisjZGVmaW5lIGFlc25pX3NldGtleV9lbmMgbWJlZHRsc19hZXNuaV9zZXRrZXlfZW5jCisjZGVmaW5lIGFlc25pX3N1cHBvcnRzIG1iZWR0bHNfYWVzbmlfaGFzX3N1cHBvcnQKKyNkZWZpbmUgYWxhcm1lZCBtYmVkdGxzX3RpbWluZ19hbGFybWVkCisjZGVmaW5lIGFyYzRfY29udGV4dCBtYmVkdGxzX2FyYzRfY29udGV4dAorI2RlZmluZSBhcmM0X2NyeXB0IG1iZWR0bHNfYXJjNF9jcnlwdAorI2RlZmluZSBhcmM0X2ZyZWUgbWJlZHRsc19hcmM0X2ZyZWUKKyNkZWZpbmUgYXJjNF9pbml0IG1iZWR0bHNfYXJjNF9pbml0CisjZGVmaW5lIGFyYzRfc2VsZl90ZXN0IG1iZWR0bHNfYXJjNF9zZWxmX3Rlc3QKKyNkZWZpbmUgYXJjNF9zZXR1cCBtYmVkdGxzX2FyYzRfc2V0dXAKKyNkZWZpbmUgYXNuMV9iaXRzdHJpbmcgbWJlZHRsc19hc24xX2JpdHN0cmluZworI2RlZmluZSBhc24xX2J1ZiBtYmVkdGxzX2FzbjFfYnVmCisjZGVmaW5lIGFzbjFfZmluZF9uYW1lZF9kYXRhIG1iZWR0bHNfYXNuMV9maW5kX25hbWVkX2RhdGEKKyNkZWZpbmUgYXNuMV9mcmVlX25hbWVkX2RhdGEgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YQorI2RlZmluZSBhc24xX2ZyZWVfbmFtZWRfZGF0YV9saXN0IG1iZWR0bHNfYXNuMV9mcmVlX25hbWVkX2RhdGFfbGlzdAorI2RlZmluZSBhc24xX2dldF9hbGcgbWJlZHRsc19hc24xX2dldF9hbGcKKyNkZWZpbmUgYXNuMV9nZXRfYWxnX251bGwgbWJlZHRsc19hc24xX2dldF9hbGdfbnVsbAorI2RlZmluZSBhc24xX2dldF9iaXRzdHJpbmcgbWJlZHRsc19hc24xX2dldF9iaXRzdHJpbmcKKyNkZWZpbmUgYXNuMV9nZXRfYml0c3RyaW5nX251bGwgbWJlZHRsc19hc24xX2dldF9iaXRzdHJpbmdfbnVsbAorI2RlZmluZSBhc24xX2dldF9ib29sIG1iZWR0bHNfYXNuMV9nZXRfYm9vbAorI2RlZmluZSBhc24xX2dldF9pbnQgbWJlZHRsc19hc24xX2dldF9pbnQKKyNkZWZpbmUgYXNuMV9nZXRfbGVuIG1iZWR0bHNfYXNuMV9nZXRfbGVuCisjZGVmaW5lIGFzbjFfZ2V0X21waSBtYmVkdGxzX2FzbjFfZ2V0X21waQorI2RlZmluZSBhc24xX2dldF9zZXF1ZW5jZV9vZiBtYmVkdGxzX2FzbjFfZ2V0X3NlcXVlbmNlX29mCisjZGVmaW5lIGFzbjFfZ2V0X3RhZyBtYmVkdGxzX2FzbjFfZ2V0X3RhZworI2RlZmluZSBhc24xX25hbWVkX2RhdGEgbWJlZHRsc19hc24xX25hbWVkX2RhdGEKKyNkZWZpbmUgYXNuMV9zZXF1ZW5jZSBtYmVkdGxzX2FzbjFfc2VxdWVuY2UKKyNkZWZpbmUgYXNuMV9zdG9yZV9uYW1lZF9kYXRhIG1iZWR0bHNfYXNuMV9zdG9yZV9uYW1lZF9kYXRhCisjZGVmaW5lIGFzbjFfd3JpdGVfYWxnb3JpdGhtX2lkZW50aWZpZXIgbWJlZHRsc19hc24xX3dyaXRlX2FsZ29yaXRobV9pZGVudGlmaWVyCisjZGVmaW5lIGFzbjFfd3JpdGVfYml0c3RyaW5nIG1iZWR0bHNfYXNuMV93cml0ZV9iaXRzdHJpbmcKKyNkZWZpbmUgYXNuMV93cml0ZV9ib29sIG1iZWR0bHNfYXNuMV93cml0ZV9ib29sCisjZGVmaW5lIGFzbjFfd3JpdGVfaWE1X3N0cmluZyBtYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZworI2RlZmluZSBhc24xX3dyaXRlX2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfaW50CisjZGVmaW5lIGFzbjFfd3JpdGVfbGVuIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4KKyNkZWZpbmUgYXNuMV93cml0ZV9tcGkgbWJlZHRsc19hc24xX3dyaXRlX21waQorI2RlZmluZSBhc24xX3dyaXRlX251bGwgbWJlZHRsc19hc24xX3dyaXRlX251bGwKKyNkZWZpbmUgYXNuMV93cml0ZV9vY3RldF9zdHJpbmcgbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZworI2RlZmluZSBhc24xX3dyaXRlX29pZCBtYmVkdGxzX2FzbjFfd3JpdGVfb2lkCisjZGVmaW5lIGFzbjFfd3JpdGVfcHJpbnRhYmxlX3N0cmluZyBtYmVkdGxzX2FzbjFfd3JpdGVfcHJpbnRhYmxlX3N0cmluZworI2RlZmluZSBhc24xX3dyaXRlX3Jhd19idWZmZXIgbWJlZHRsc19hc24xX3dyaXRlX3Jhd19idWZmZXIKKyNkZWZpbmUgYXNuMV93cml0ZV90YWcgbWJlZHRsc19hc24xX3dyaXRlX3RhZworI2RlZmluZSBiYXNlNjRfZGVjb2RlIG1iZWR0bHNfYmFzZTY0X2RlY29kZQorI2RlZmluZSBiYXNlNjRfZW5jb2RlIG1iZWR0bHNfYmFzZTY0X2VuY29kZQorI2RlZmluZSBiYXNlNjRfc2VsZl90ZXN0IG1iZWR0bHNfYmFzZTY0X3NlbGZfdGVzdAorI2RlZmluZSBibG93ZmlzaF9jb250ZXh0IG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dAorI2RlZmluZSBibG93ZmlzaF9jcnlwdF9jYmMgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jYmMKKyNkZWZpbmUgYmxvd2Zpc2hfY3J5cHRfY2ZiNjQgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jZmI2NAorI2RlZmluZSBibG93ZmlzaF9jcnlwdF9jdHIgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jdHIKKyNkZWZpbmUgYmxvd2Zpc2hfY3J5cHRfZWNiIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiCisjZGVmaW5lIGJsb3dmaXNoX2ZyZWUgbWJlZHRsc19ibG93ZmlzaF9mcmVlCisjZGVmaW5lIGJsb3dmaXNoX2luaXQgbWJlZHRsc19ibG93ZmlzaF9pbml0CisjZGVmaW5lIGJsb3dmaXNoX3NldGtleSBtYmVkdGxzX2Jsb3dmaXNoX3NldGtleQorI2RlZmluZSBjYW1lbGxpYV9jb250ZXh0IG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dAorI2RlZmluZSBjYW1lbGxpYV9jcnlwdF9jYmMgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jYmMKKyNkZWZpbmUgY2FtZWxsaWFfY3J5cHRfY2ZiMTI4IG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2ZiMTI4CisjZGVmaW5lIGNhbWVsbGlhX2NyeXB0X2N0ciBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2N0cgorI2RlZmluZSBjYW1lbGxpYV9jcnlwdF9lY2IgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9lY2IKKyNkZWZpbmUgY2FtZWxsaWFfZnJlZSBtYmVkdGxzX2NhbWVsbGlhX2ZyZWUKKyNkZWZpbmUgY2FtZWxsaWFfaW5pdCBtYmVkdGxzX2NhbWVsbGlhX2luaXQKKyNkZWZpbmUgY2FtZWxsaWFfc2VsZl90ZXN0IG1iZWR0bHNfY2FtZWxsaWFfc2VsZl90ZXN0CisjZGVmaW5lIGNhbWVsbGlhX3NldGtleV9kZWMgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZGVjCisjZGVmaW5lIGNhbWVsbGlhX3NldGtleV9lbmMgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jCisjZGVmaW5lIGNjbV9hdXRoX2RlY3J5cHQgbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0CisjZGVmaW5lIGNjbV9jb250ZXh0IG1iZWR0bHNfY2NtX2NvbnRleHQKKyNkZWZpbmUgY2NtX2VuY3J5cHRfYW5kX3RhZyBtYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWcKKyNkZWZpbmUgY2NtX2ZyZWUgbWJlZHRsc19jY21fZnJlZQorI2RlZmluZSBjY21faW5pdCBtYmVkdGxzX2NjbV9pbml0CisjZGVmaW5lIGNjbV9zZWxmX3Rlc3QgbWJlZHRsc19jY21fc2VsZl90ZXN0CisjZGVmaW5lIGNpcGhlcl9hdXRoX2RlY3J5cHQgbWJlZHRsc19jaXBoZXJfYXV0aF9kZWNyeXB0CisjZGVmaW5lIGNpcGhlcl9hdXRoX2VuY3J5cHQgbWJlZHRsc19jaXBoZXJfYXV0aF9lbmNyeXB0CisjZGVmaW5lIGNpcGhlcl9iYXNlX3QgbWJlZHRsc19jaXBoZXJfYmFzZV90CisjZGVmaW5lIGNpcGhlcl9jaGVja190YWcgbWJlZHRsc19jaXBoZXJfY2hlY2tfdGFnCisjZGVmaW5lIGNpcGhlcl9jb250ZXh0X3QgbWJlZHRsc19jaXBoZXJfY29udGV4dF90CisjZGVmaW5lIGNpcGhlcl9jcnlwdCBtYmVkdGxzX2NpcGhlcl9jcnlwdAorI2RlZmluZSBjaXBoZXJfZGVmaW5pdGlvbl90IG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25fdAorI2RlZmluZSBjaXBoZXJfZGVmaW5pdGlvbnMgbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbnMKKyNkZWZpbmUgY2lwaGVyX2ZpbmlzaCBtYmVkdGxzX2NpcGhlcl9maW5pc2gKKyNkZWZpbmUgY2lwaGVyX2ZyZWUgbWJlZHRsc19jaXBoZXJfZnJlZQorI2RlZmluZSBjaXBoZXJfZnJlZV9jdHggbWJlZHRsc19jaXBoZXJfZnJlZV9jdHgKKyNkZWZpbmUgY2lwaGVyX2dldF9ibG9ja19zaXplIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplCisjZGVmaW5lIGNpcGhlcl9nZXRfY2lwaGVyX21vZGUgbWJlZHRsc19jaXBoZXJfZ2V0X2NpcGhlcl9tb2RlCisjZGVmaW5lIGNpcGhlcl9nZXRfaXZfc2l6ZSBtYmVkdGxzX2NpcGhlcl9nZXRfaXZfc2l6ZQorI2RlZmluZSBjaXBoZXJfZ2V0X2tleV9zaXplIG1iZWR0bHNfY2lwaGVyX2dldF9rZXlfYml0bGVuCisjZGVmaW5lIGNpcGhlcl9nZXRfbmFtZSBtYmVkdGxzX2NpcGhlcl9nZXRfbmFtZQorI2RlZmluZSBjaXBoZXJfZ2V0X29wZXJhdGlvbiBtYmVkdGxzX2NpcGhlcl9nZXRfb3BlcmF0aW9uCisjZGVmaW5lIGNpcGhlcl9nZXRfdHlwZSBtYmVkdGxzX2NpcGhlcl9nZXRfdHlwZQorI2RlZmluZSBjaXBoZXJfaWRfdCBtYmVkdGxzX2NpcGhlcl9pZF90CisjZGVmaW5lIGNpcGhlcl9pbmZvX2Zyb21fc3RyaW5nIG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV9zdHJpbmcKKyNkZWZpbmUgY2lwaGVyX2luZm9fZnJvbV90eXBlIG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlCisjZGVmaW5lIGNpcGhlcl9pbmZvX2Zyb21fdmFsdWVzIG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV92YWx1ZXMKKyNkZWZpbmUgY2lwaGVyX2luZm9fdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QKKyNkZWZpbmUgY2lwaGVyX2luaXQgbWJlZHRsc19jaXBoZXJfaW5pdAorI2RlZmluZSBjaXBoZXJfaW5pdF9jdHggbWJlZHRsc19jaXBoZXJfc2V0dXAKKyNkZWZpbmUgY2lwaGVyX2xpc3QgbWJlZHRsc19jaXBoZXJfbGlzdAorI2RlZmluZSBjaXBoZXJfbW9kZV90IG1iZWR0bHNfY2lwaGVyX21vZGVfdAorI2RlZmluZSBjaXBoZXJfcGFkZGluZ190IG1iZWR0bHNfY2lwaGVyX3BhZGRpbmdfdAorI2RlZmluZSBjaXBoZXJfcmVzZXQgbWJlZHRsc19jaXBoZXJfcmVzZXQKKyNkZWZpbmUgY2lwaGVyX3NlbGZfdGVzdCBtYmVkdGxzX2NpcGhlcl9zZWxmX3Rlc3QKKyNkZWZpbmUgY2lwaGVyX3NldF9pdiBtYmVkdGxzX2NpcGhlcl9zZXRfaXYKKyNkZWZpbmUgY2lwaGVyX3NldF9wYWRkaW5nX21vZGUgbWJlZHRsc19jaXBoZXJfc2V0X3BhZGRpbmdfbW9kZQorI2RlZmluZSBjaXBoZXJfc2V0a2V5IG1iZWR0bHNfY2lwaGVyX3NldGtleQorI2RlZmluZSBjaXBoZXJfdHlwZV90IG1iZWR0bHNfY2lwaGVyX3R5cGVfdAorI2RlZmluZSBjaXBoZXJfdXBkYXRlIG1iZWR0bHNfY2lwaGVyX3VwZGF0ZQorI2RlZmluZSBjaXBoZXJfdXBkYXRlX2FkIG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZAorI2RlZmluZSBjaXBoZXJfd3JpdGVfdGFnIG1iZWR0bHNfY2lwaGVyX3dyaXRlX3RhZworI2RlZmluZSBjdHJfZHJiZ19jb250ZXh0IG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dAorI2RlZmluZSBjdHJfZHJiZ19mcmVlIG1iZWR0bHNfY3RyX2RyYmdfZnJlZQorI2RlZmluZSBjdHJfZHJiZ19pbml0IG1iZWR0bHNfY3RyX2RyYmdfaW5pdAorI2RlZmluZSBjdHJfZHJiZ19pbml0X2VudHJvcHlfbGVuIG1iZWR0bHNfY3RyX2RyYmdfaW5pdF9lbnRyb3B5X2xlbgorI2RlZmluZSBjdHJfZHJiZ19yYW5kb20gbWJlZHRsc19jdHJfZHJiZ19yYW5kb20KKyNkZWZpbmUgY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkCisjZGVmaW5lIGN0cl9kcmJnX3Jlc2VlZCBtYmVkdGxzX2N0cl9kcmJnX3Jlc2VlZAorI2RlZmluZSBjdHJfZHJiZ19zZWxmX3Rlc3QgbWJlZHRsc19jdHJfZHJiZ19zZWxmX3Rlc3QKKyNkZWZpbmUgY3RyX2RyYmdfc2V0X2VudHJvcHlfbGVuIG1iZWR0bHNfY3RyX2RyYmdfc2V0X2VudHJvcHlfbGVuCisjZGVmaW5lIGN0cl9kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UgbWJlZHRsc19jdHJfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlCisjZGVmaW5lIGN0cl9kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwgbWJlZHRsc19jdHJfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsCisjZGVmaW5lIGN0cl9kcmJnX3VwZGF0ZSBtYmVkdGxzX2N0cl9kcmJnX3VwZGF0ZQorI2RlZmluZSBjdHJfZHJiZ191cGRhdGVfc2VlZF9maWxlIG1iZWR0bHNfY3RyX2RyYmdfdXBkYXRlX3NlZWRfZmlsZQorI2RlZmluZSBjdHJfZHJiZ193cml0ZV9zZWVkX2ZpbGUgbWJlZHRsc19jdHJfZHJiZ193cml0ZV9zZWVkX2ZpbGUKKyNkZWZpbmUgZGVidWdfZm10IG1iZWR0bHNfZGVidWdfZm10CisjZGVmaW5lIGRlYnVnX3ByaW50X2J1ZiBtYmVkdGxzX2RlYnVnX3ByaW50X2J1ZgorI2RlZmluZSBkZWJ1Z19wcmludF9jcnQgbWJlZHRsc19kZWJ1Z19wcmludF9jcnQKKyNkZWZpbmUgZGVidWdfcHJpbnRfZWNwIG1iZWR0bHNfZGVidWdfcHJpbnRfZWNwCisjZGVmaW5lIGRlYnVnX3ByaW50X21waSBtYmVkdGxzX2RlYnVnX3ByaW50X21waQorI2RlZmluZSBkZWJ1Z19wcmludF9tc2cgbWJlZHRsc19kZWJ1Z19wcmludF9tc2cKKyNkZWZpbmUgZGVidWdfcHJpbnRfcmV0IG1iZWR0bHNfZGVidWdfcHJpbnRfcmV0CisjZGVmaW5lIGRlYnVnX3NldF9sb2dfbW9kZSBtYmVkdGxzX2RlYnVnX3NldF9sb2dfbW9kZQorI2RlZmluZSBkZWJ1Z19zZXRfdGhyZXNob2xkIG1iZWR0bHNfZGVidWdfc2V0X3RocmVzaG9sZAorI2RlZmluZSBkZXMzX2NvbnRleHQgbWJlZHRsc19kZXMzX2NvbnRleHQKKyNkZWZpbmUgZGVzM19jcnlwdF9jYmMgbWJlZHRsc19kZXMzX2NyeXB0X2NiYworI2RlZmluZSBkZXMzX2NyeXB0X2VjYiBtYmVkdGxzX2RlczNfY3J5cHRfZWNiCisjZGVmaW5lIGRlczNfZnJlZSBtYmVkdGxzX2RlczNfZnJlZQorI2RlZmluZSBkZXMzX2luaXQgbWJlZHRsc19kZXMzX2luaXQKKyNkZWZpbmUgZGVzM19zZXQya2V5X2RlYyBtYmVkdGxzX2RlczNfc2V0MmtleV9kZWMKKyNkZWZpbmUgZGVzM19zZXQya2V5X2VuYyBtYmVkdGxzX2RlczNfc2V0MmtleV9lbmMKKyNkZWZpbmUgZGVzM19zZXQza2V5X2RlYyBtYmVkdGxzX2RlczNfc2V0M2tleV9kZWMKKyNkZWZpbmUgZGVzM19zZXQza2V5X2VuYyBtYmVkdGxzX2RlczNfc2V0M2tleV9lbmMKKyNkZWZpbmUgZGVzX2NvbnRleHQgbWJlZHRsc19kZXNfY29udGV4dAorI2RlZmluZSBkZXNfY3J5cHRfY2JjIG1iZWR0bHNfZGVzX2NyeXB0X2NiYworI2RlZmluZSBkZXNfY3J5cHRfZWNiIG1iZWR0bHNfZGVzX2NyeXB0X2VjYgorI2RlZmluZSBkZXNfZnJlZSBtYmVkdGxzX2Rlc19mcmVlCisjZGVmaW5lIGRlc19pbml0IG1iZWR0bHNfZGVzX2luaXQKKyNkZWZpbmUgZGVzX2tleV9jaGVja19rZXlfcGFyaXR5IG1iZWR0bHNfZGVzX2tleV9jaGVja19rZXlfcGFyaXR5CisjZGVmaW5lIGRlc19rZXlfY2hlY2tfd2VhayBtYmVkdGxzX2Rlc19rZXlfY2hlY2tfd2VhaworI2RlZmluZSBkZXNfa2V5X3NldF9wYXJpdHkgbWJlZHRsc19kZXNfa2V5X3NldF9wYXJpdHkKKyNkZWZpbmUgZGVzX3NlbGZfdGVzdCBtYmVkdGxzX2Rlc19zZWxmX3Rlc3QKKyNkZWZpbmUgZGVzX3NldGtleV9kZWMgbWJlZHRsc19kZXNfc2V0a2V5X2RlYworI2RlZmluZSBkZXNfc2V0a2V5X2VuYyBtYmVkdGxzX2Rlc19zZXRrZXlfZW5jCisjZGVmaW5lIGRobV9jYWxjX3NlY3JldCBtYmVkdGxzX2RobV9jYWxjX3NlY3JldAorI2RlZmluZSBkaG1fY29udGV4dCBtYmVkdGxzX2RobV9jb250ZXh0CisjZGVmaW5lIGRobV9mcmVlIG1iZWR0bHNfZGhtX2ZyZWUKKyNkZWZpbmUgZGhtX2luaXQgbWJlZHRsc19kaG1faW5pdAorI2RlZmluZSBkaG1fbWFrZV9wYXJhbXMgbWJlZHRsc19kaG1fbWFrZV9wYXJhbXMKKyNkZWZpbmUgZGhtX21ha2VfcHVibGljIG1iZWR0bHNfZGhtX21ha2VfcHVibGljCisjZGVmaW5lIGRobV9wYXJzZV9kaG0gbWJlZHRsc19kaG1fcGFyc2VfZGhtCisjZGVmaW5lIGRobV9wYXJzZV9kaG1maWxlIG1iZWR0bHNfZGhtX3BhcnNlX2RobWZpbGUKKyNkZWZpbmUgZGhtX3JlYWRfcGFyYW1zIG1iZWR0bHNfZGhtX3JlYWRfcGFyYW1zCisjZGVmaW5lIGRobV9yZWFkX3B1YmxpYyBtYmVkdGxzX2RobV9yZWFkX3B1YmxpYworI2RlZmluZSBkaG1fc2VsZl90ZXN0IG1iZWR0bHNfZGhtX3NlbGZfdGVzdAorI2RlZmluZSBlY2RoX2NhbGNfc2VjcmV0IG1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldAorI2RlZmluZSBlY2RoX2NvbXB1dGVfc2hhcmVkIG1iZWR0bHNfZWNkaF9jb21wdXRlX3NoYXJlZAorI2RlZmluZSBlY2RoX2NvbnRleHQgbWJlZHRsc19lY2RoX2NvbnRleHQKKyNkZWZpbmUgZWNkaF9mcmVlIG1iZWR0bHNfZWNkaF9mcmVlCisjZGVmaW5lIGVjZGhfZ2VuX3B1YmxpYyBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYworI2RlZmluZSBlY2RoX2dldF9wYXJhbXMgbWJlZHRsc19lY2RoX2dldF9wYXJhbXMKKyNkZWZpbmUgZWNkaF9pbml0IG1iZWR0bHNfZWNkaF9pbml0CisjZGVmaW5lIGVjZGhfbWFrZV9wYXJhbXMgbWJlZHRsc19lY2RoX21ha2VfcGFyYW1zCisjZGVmaW5lIGVjZGhfbWFrZV9wdWJsaWMgbWJlZHRsc19lY2RoX21ha2VfcHVibGljCisjZGVmaW5lIGVjZGhfcmVhZF9wYXJhbXMgbWJlZHRsc19lY2RoX3JlYWRfcGFyYW1zCisjZGVmaW5lIGVjZGhfcmVhZF9wdWJsaWMgbWJlZHRsc19lY2RoX3JlYWRfcHVibGljCisjZGVmaW5lIGVjZGhfc2VsZl90ZXN0IG1iZWR0bHNfZWNkaF9zZWxmX3Rlc3QKKyNkZWZpbmUgZWNkaF9zaWRlIG1iZWR0bHNfZWNkaF9zaWRlCisjZGVmaW5lIGVjZHNhX2NvbnRleHQgbWJlZHRsc19lY2RzYV9jb250ZXh0CisjZGVmaW5lIGVjZHNhX2ZyZWUgbWJlZHRsc19lY2RzYV9mcmVlCisjZGVmaW5lIGVjZHNhX2Zyb21fa2V5cGFpciBtYmVkdGxzX2VjZHNhX2Zyb21fa2V5cGFpcgorI2RlZmluZSBlY2RzYV9nZW5rZXkgbWJlZHRsc19lY2RzYV9nZW5rZXkKKyNkZWZpbmUgZWNkc2FfaW5mbyBtYmVkdGxzX2VjZHNhX2luZm8KKyNkZWZpbmUgZWNkc2FfaW5pdCBtYmVkdGxzX2VjZHNhX2luaXQKKyNkZWZpbmUgZWNkc2FfcmVhZF9zaWduYXR1cmUgbWJlZHRsc19lY2RzYV9yZWFkX3NpZ25hdHVyZQorI2RlZmluZSBlY2RzYV9zZWxmX3Rlc3QgbWJlZHRsc19lY2RzYV9zZWxmX3Rlc3QKKyNkZWZpbmUgZWNkc2Ffc2lnbiBtYmVkdGxzX2VjZHNhX3NpZ24KKyNkZWZpbmUgZWNkc2Ffc2lnbl9kZXQgbWJlZHRsc19lY2RzYV9zaWduX2RldAorI2RlZmluZSBlY2RzYV92ZXJpZnkgbWJlZHRsc19lY2RzYV92ZXJpZnkKKyNkZWZpbmUgZWNkc2Ffd3JpdGVfc2lnbmF0dXJlIG1iZWR0bHNfZWNkc2Ffd3JpdGVfc2lnbmF0dXJlCisjZGVmaW5lIGVjZHNhX3dyaXRlX3NpZ25hdHVyZV9kZXQgbWJlZHRsc19lY2RzYV93cml0ZV9zaWduYXR1cmVfZGV0CisjZGVmaW5lIGVja2V5X2luZm8gbWJlZHRsc19lY2tleV9pbmZvCisjZGVmaW5lIGVja2V5ZGhfaW5mbyBtYmVkdGxzX2Vja2V5ZGhfaW5mbworI2RlZmluZSBlY3BfYWRkIG1iZWR0bHNfZWNwX2FkZAorI2RlZmluZSBlY3BfY2hlY2tfcHJpdmtleSBtYmVkdGxzX2VjcF9jaGVja19wcml2a2V5CisjZGVmaW5lIGVjcF9jaGVja19wdWJfcHJpdiBtYmVkdGxzX2VjcF9jaGVja19wdWJfcHJpdgorI2RlZmluZSBlY3BfY2hlY2tfcHVia2V5IG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleQorI2RlZmluZSBlY3BfY29weSBtYmVkdGxzX2VjcF9jb3B5CisjZGVmaW5lIGVjcF9jdXJ2ZV9pbmZvIG1iZWR0bHNfZWNwX2N1cnZlX2luZm8KKyNkZWZpbmUgZWNwX2N1cnZlX2luZm9fZnJvbV9ncnBfaWQgbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX2dycF9pZAorI2RlZmluZSBlY3BfY3VydmVfaW5mb19mcm9tX25hbWUgbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX25hbWUKKyNkZWZpbmUgZWNwX2N1cnZlX2luZm9fZnJvbV90bHNfaWQgbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX3Rsc19pZAorI2RlZmluZSBlY3BfY3VydmVfbGlzdCBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0CisjZGVmaW5lIGVjcF9nZW5fa2V5IG1iZWR0bHNfZWNwX2dlbl9rZXkKKyNkZWZpbmUgZWNwX2dlbl9rZXlwYWlyIG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyCisjZGVmaW5lIGVjcF9ncm91cCBtYmVkdGxzX2VjcF9ncm91cAorI2RlZmluZSBlY3BfZ3JvdXBfY29weSBtYmVkdGxzX2VjcF9ncm91cF9jb3B5CisjZGVmaW5lIGVjcF9ncm91cF9mcmVlIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUKKyNkZWZpbmUgZWNwX2dyb3VwX2lkIG1iZWR0bHNfZWNwX2dyb3VwX2lkCisjZGVmaW5lIGVjcF9ncm91cF9pbml0IG1iZWR0bHNfZWNwX2dyb3VwX2luaXQKKyNkZWZpbmUgZWNwX2dyb3VwX3JlYWRfc3RyaW5nIG1iZWR0bHNfZWNwX2dyb3VwX3JlYWRfc3RyaW5nCisjZGVmaW5lIGVjcF9ncnBfaWRfbGlzdCBtYmVkdGxzX2VjcF9ncnBfaWRfbGlzdAorI2RlZmluZSBlY3BfaXNfemVybyBtYmVkdGxzX2VjcF9pc196ZXJvCisjZGVmaW5lIGVjcF9rZXlwYWlyIG1iZWR0bHNfZWNwX2tleXBhaXIKKyNkZWZpbmUgZWNwX2tleXBhaXJfZnJlZSBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUKKyNkZWZpbmUgZWNwX2tleXBhaXJfaW5pdCBtYmVkdGxzX2VjcF9rZXlwYWlyX2luaXQKKyNkZWZpbmUgZWNwX211bCBtYmVkdGxzX2VjcF9tdWwKKyNkZWZpbmUgZWNwX3BvaW50IG1iZWR0bHNfZWNwX3BvaW50CisjZGVmaW5lIGVjcF9wb2ludF9mcmVlIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUKKyNkZWZpbmUgZWNwX3BvaW50X2luaXQgbWJlZHRsc19lY3BfcG9pbnRfaW5pdAorI2RlZmluZSBlY3BfcG9pbnRfcmVhZF9iaW5hcnkgbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkKKyNkZWZpbmUgZWNwX3BvaW50X3JlYWRfc3RyaW5nIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfc3RyaW5nCisjZGVmaW5lIGVjcF9wb2ludF93cml0ZV9iaW5hcnkgbWJlZHRsc19lY3BfcG9pbnRfd3JpdGVfYmluYXJ5CisjZGVmaW5lIGVjcF9zZWxmX3Rlc3QgbWJlZHRsc19lY3Bfc2VsZl90ZXN0CisjZGVmaW5lIGVjcF9zZXRfemVybyBtYmVkdGxzX2VjcF9zZXRfemVybworI2RlZmluZSBlY3Bfc3ViIG1iZWR0bHNfZWNwX3N1YgorI2RlZmluZSBlY3BfdGxzX3JlYWRfZ3JvdXAgbWJlZHRsc19lY3BfdGxzX3JlYWRfZ3JvdXAKKyNkZWZpbmUgZWNwX3Rsc19yZWFkX3BvaW50IG1iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50CisjZGVmaW5lIGVjcF90bHNfd3JpdGVfZ3JvdXAgbWJlZHRsc19lY3BfdGxzX3dyaXRlX2dyb3VwCisjZGVmaW5lIGVjcF90bHNfd3JpdGVfcG9pbnQgbWJlZHRsc19lY3BfdGxzX3dyaXRlX3BvaW50CisjZGVmaW5lIGVjcF91c2Vfa25vd25fZHAgbWJlZHRsc19lY3BfZ3JvdXBfbG9hZAorI2RlZmluZSBlbnRyb3B5X2FkZF9zb3VyY2UgbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UKKyNkZWZpbmUgZW50cm9weV9jb250ZXh0IG1iZWR0bHNfZW50cm9weV9jb250ZXh0CisjZGVmaW5lIGVudHJvcHlfZnJlZSBtYmVkdGxzX2VudHJvcHlfZnJlZQorI2RlZmluZSBlbnRyb3B5X2Z1bmMgbWJlZHRsc19lbnRyb3B5X2Z1bmMKKyNkZWZpbmUgZW50cm9weV9nYXRoZXIgbWJlZHRsc19lbnRyb3B5X2dhdGhlcgorI2RlZmluZSBlbnRyb3B5X2luaXQgbWJlZHRsc19lbnRyb3B5X2luaXQKKyNkZWZpbmUgZW50cm9weV9zZWxmX3Rlc3QgbWJlZHRsc19lbnRyb3B5X3NlbGZfdGVzdAorI2RlZmluZSBlbnRyb3B5X3VwZGF0ZV9tYW51YWwgbWJlZHRsc19lbnRyb3B5X3VwZGF0ZV9tYW51YWwKKyNkZWZpbmUgZW50cm9weV91cGRhdGVfc2VlZF9maWxlIG1iZWR0bHNfZW50cm9weV91cGRhdGVfc2VlZF9maWxlCisjZGVmaW5lIGVudHJvcHlfd3JpdGVfc2VlZF9maWxlIG1iZWR0bHNfZW50cm9weV93cml0ZV9zZWVkX2ZpbGUKKyNkZWZpbmUgZXJyb3Jfc3RyZXJyb3IgbWJlZHRsc19zdHJlcnJvcgorI2RlZmluZSBmX3NvdXJjZV9wdHIgbWJlZHRsc19lbnRyb3B5X2Zfc291cmNlX3B0cgorI2RlZmluZSBnY21fYXV0aF9kZWNyeXB0IG1iZWR0bHNfZ2NtX2F1dGhfZGVjcnlwdAorI2RlZmluZSBnY21fY29udGV4dCBtYmVkdGxzX2djbV9jb250ZXh0CisjZGVmaW5lIGdjbV9jcnlwdF9hbmRfdGFnIG1iZWR0bHNfZ2NtX2NyeXB0X2FuZF90YWcKKyNkZWZpbmUgZ2NtX2ZpbmlzaCBtYmVkdGxzX2djbV9maW5pc2gKKyNkZWZpbmUgZ2NtX2ZyZWUgbWJlZHRsc19nY21fZnJlZQorI2RlZmluZSBnY21faW5pdCBtYmVkdGxzX2djbV9pbml0CisjZGVmaW5lIGdjbV9zZWxmX3Rlc3QgbWJlZHRsc19nY21fc2VsZl90ZXN0CisjZGVmaW5lIGdjbV9zdGFydHMgbWJlZHRsc19nY21fc3RhcnRzCisjZGVmaW5lIGdjbV91cGRhdGUgbWJlZHRsc19nY21fdXBkYXRlCisjZGVmaW5lIGdldF90aW1lciBtYmVkdGxzX3RpbWluZ19nZXRfdGltZXIKKyNkZWZpbmUgaGFyZGNsb2NrIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jaworI2RlZmluZSBoYXJkY2xvY2tfcG9sbCBtYmVkdGxzX2hhcmRjbG9ja19wb2xsCisjZGVmaW5lIGhhdmVnZV9mcmVlIG1iZWR0bHNfaGF2ZWdlX2ZyZWUKKyNkZWZpbmUgaGF2ZWdlX2luaXQgbWJlZHRsc19oYXZlZ2VfaW5pdAorI2RlZmluZSBoYXZlZ2VfcG9sbCBtYmVkdGxzX2hhdmVnZV9wb2xsCisjZGVmaW5lIGhhdmVnZV9yYW5kb20gbWJlZHRsc19oYXZlZ2VfcmFuZG9tCisjZGVmaW5lIGhhdmVnZV9zdGF0ZSBtYmVkdGxzX2hhdmVnZV9zdGF0ZQorI2RlZmluZSBobWFjX2RyYmdfY29udGV4dCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0CisjZGVmaW5lIGhtYWNfZHJiZ19mcmVlIG1iZWR0bHNfaG1hY19kcmJnX2ZyZWUKKyNkZWZpbmUgaG1hY19kcmJnX2luaXQgbWJlZHRsc19obWFjX2RyYmdfaW5pdAorI2RlZmluZSBobWFjX2RyYmdfaW5pdF9idWYgbWJlZHRsc19obWFjX2RyYmdfaW5pdF9idWYKKyNkZWZpbmUgaG1hY19kcmJnX3JhbmRvbSBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20KKyNkZWZpbmUgaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb21fd2l0aF9hZGQKKyNkZWZpbmUgaG1hY19kcmJnX3Jlc2VlZCBtYmVkdGxzX2htYWNfZHJiZ19yZXNlZWQKKyNkZWZpbmUgaG1hY19kcmJnX3NlbGZfdGVzdCBtYmVkdGxzX2htYWNfZHJiZ19zZWxmX3Rlc3QKKyNkZWZpbmUgaG1hY19kcmJnX3NldF9lbnRyb3B5X2xlbiBtYmVkdGxzX2htYWNfZHJiZ19zZXRfZW50cm9weV9sZW4KKyNkZWZpbmUgaG1hY19kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UgbWJlZHRsc19obWFjX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZQorI2RlZmluZSBobWFjX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbCBtYmVkdGxzX2htYWNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsCisjZGVmaW5lIGhtYWNfZHJiZ191cGRhdGUgbWJlZHRsc19obWFjX2RyYmdfdXBkYXRlCisjZGVmaW5lIGhtYWNfZHJiZ191cGRhdGVfc2VlZF9maWxlIG1iZWR0bHNfaG1hY19kcmJnX3VwZGF0ZV9zZWVkX2ZpbGUKKyNkZWZpbmUgaG1hY19kcmJnX3dyaXRlX3NlZWRfZmlsZSBtYmVkdGxzX2htYWNfZHJiZ193cml0ZV9zZWVkX2ZpbGUKKyNkZWZpbmUgaHJfdGltZSBtYmVkdGxzX3RpbWluZ19ocl90aW1lCisjZGVmaW5lIGtleV9leGNoYW5nZV90eXBlX3QgbWJlZHRsc19rZXlfZXhjaGFuZ2VfdHlwZV90CisjZGVmaW5lIG1kIG1iZWR0bHNfbWQKKyNkZWZpbmUgbWQyIG1iZWR0bHNfbWQyCisjZGVmaW5lIG1kMl9jb250ZXh0IG1iZWR0bHNfbWQyX2NvbnRleHQKKyNkZWZpbmUgbWQyX2ZpbGUgbWJlZHRsc19tZDJfZmlsZQorI2RlZmluZSBtZDJfZmluaXNoIG1iZWR0bHNfbWQyX2ZpbmlzaAorI2RlZmluZSBtZDJfZnJlZSBtYmVkdGxzX21kMl9mcmVlCisjZGVmaW5lIG1kMl9obWFjIG1iZWR0bHNfbWQyX2htYWMKKyNkZWZpbmUgbWQyX2htYWNfZmluaXNoIG1iZWR0bHNfbWQyX2htYWNfZmluaXNoCisjZGVmaW5lIG1kMl9obWFjX3Jlc2V0IG1iZWR0bHNfbWQyX2htYWNfcmVzZXQKKyNkZWZpbmUgbWQyX2htYWNfc3RhcnRzIG1iZWR0bHNfbWQyX2htYWNfc3RhcnRzCisjZGVmaW5lIG1kMl9obWFjX3VwZGF0ZSBtYmVkdGxzX21kMl9obWFjX3VwZGF0ZQorI2RlZmluZSBtZDJfaW5mbyBtYmVkdGxzX21kMl9pbmZvCisjZGVmaW5lIG1kMl9pbml0IG1iZWR0bHNfbWQyX2luaXQKKyNkZWZpbmUgbWQyX3Byb2Nlc3MgbWJlZHRsc19tZDJfcHJvY2VzcworI2RlZmluZSBtZDJfc2VsZl90ZXN0IG1iZWR0bHNfbWQyX3NlbGZfdGVzdAorI2RlZmluZSBtZDJfc3RhcnRzIG1iZWR0bHNfbWQyX3N0YXJ0cworI2RlZmluZSBtZDJfdXBkYXRlIG1iZWR0bHNfbWQyX3VwZGF0ZQorI2RlZmluZSBtZDQgbWJlZHRsc19tZDQKKyNkZWZpbmUgbWQ0X2NvbnRleHQgbWJlZHRsc19tZDRfY29udGV4dAorI2RlZmluZSBtZDRfZmlsZSBtYmVkdGxzX21kNF9maWxlCisjZGVmaW5lIG1kNF9maW5pc2ggbWJlZHRsc19tZDRfZmluaXNoCisjZGVmaW5lIG1kNF9mcmVlIG1iZWR0bHNfbWQ0X2ZyZWUKKyNkZWZpbmUgbWQ0X2htYWMgbWJlZHRsc19tZDRfaG1hYworI2RlZmluZSBtZDRfaG1hY19maW5pc2ggbWJlZHRsc19tZDRfaG1hY19maW5pc2gKKyNkZWZpbmUgbWQ0X2htYWNfcmVzZXQgbWJlZHRsc19tZDRfaG1hY19yZXNldAorI2RlZmluZSBtZDRfaG1hY19zdGFydHMgbWJlZHRsc19tZDRfaG1hY19zdGFydHMKKyNkZWZpbmUgbWQ0X2htYWNfdXBkYXRlIG1iZWR0bHNfbWQ0X2htYWNfdXBkYXRlCisjZGVmaW5lIG1kNF9pbmZvIG1iZWR0bHNfbWQ0X2luZm8KKyNkZWZpbmUgbWQ0X2luaXQgbWJlZHRsc19tZDRfaW5pdAorI2RlZmluZSBtZDRfcHJvY2VzcyBtYmVkdGxzX21kNF9wcm9jZXNzCisjZGVmaW5lIG1kNF9zZWxmX3Rlc3QgbWJlZHRsc19tZDRfc2VsZl90ZXN0CisjZGVmaW5lIG1kNF9zdGFydHMgbWJlZHRsc19tZDRfc3RhcnRzCisjZGVmaW5lIG1kNF91cGRhdGUgbWJlZHRsc19tZDRfdXBkYXRlCisjZGVmaW5lIG1kNSBtYmVkdGxzX21kNQorI2RlZmluZSBtZDVfY29udGV4dCBtYmVkdGxzX21kNV9jb250ZXh0CisjZGVmaW5lIG1kNV9maWxlIG1iZWR0bHNfbWQ1X2ZpbGUKKyNkZWZpbmUgbWQ1X2ZpbmlzaCBtYmVkdGxzX21kNV9maW5pc2gKKyNkZWZpbmUgbWQ1X2ZyZWUgbWJlZHRsc19tZDVfZnJlZQorI2RlZmluZSBtZDVfaG1hYyBtYmVkdGxzX21kNV9obWFjCisjZGVmaW5lIG1kNV9obWFjX2ZpbmlzaCBtYmVkdGxzX21kNV9obWFjX2ZpbmlzaAorI2RlZmluZSBtZDVfaG1hY19yZXNldCBtYmVkdGxzX21kNV9obWFjX3Jlc2V0CisjZGVmaW5lIG1kNV9obWFjX3N0YXJ0cyBtYmVkdGxzX21kNV9obWFjX3N0YXJ0cworI2RlZmluZSBtZDVfaG1hY191cGRhdGUgbWJlZHRsc19tZDVfaG1hY191cGRhdGUKKyNkZWZpbmUgbWQ1X2luZm8gbWJlZHRsc19tZDVfaW5mbworI2RlZmluZSBtZDVfaW5pdCBtYmVkdGxzX21kNV9pbml0CisjZGVmaW5lIG1kNV9wcm9jZXNzIG1iZWR0bHNfbWQ1X3Byb2Nlc3MKKyNkZWZpbmUgbWQ1X3NlbGZfdGVzdCBtYmVkdGxzX21kNV9zZWxmX3Rlc3QKKyNkZWZpbmUgbWQ1X3N0YXJ0cyBtYmVkdGxzX21kNV9zdGFydHMKKyNkZWZpbmUgbWQ1X3VwZGF0ZSBtYmVkdGxzX21kNV91cGRhdGUKKyNkZWZpbmUgbWRfY29udGV4dF90IG1iZWR0bHNfbWRfY29udGV4dF90CisjZGVmaW5lIG1kX2ZpbGUgbWJlZHRsc19tZF9maWxlCisjZGVmaW5lIG1kX2ZpbmlzaCBtYmVkdGxzX21kX2ZpbmlzaAorI2RlZmluZSBtZF9mcmVlIG1iZWR0bHNfbWRfZnJlZQorI2RlZmluZSBtZF9mcmVlX2N0eCBtYmVkdGxzX21kX2ZyZWVfY3R4CisjZGVmaW5lIG1kX2dldF9uYW1lIG1iZWR0bHNfbWRfZ2V0X25hbWUKKyNkZWZpbmUgbWRfZ2V0X3NpemUgbWJlZHRsc19tZF9nZXRfc2l6ZQorI2RlZmluZSBtZF9nZXRfdHlwZSBtYmVkdGxzX21kX2dldF90eXBlCisjZGVmaW5lIG1kX2htYWMgbWJlZHRsc19tZF9obWFjCisjZGVmaW5lIG1kX2htYWNfZmluaXNoIG1iZWR0bHNfbWRfaG1hY19maW5pc2gKKyNkZWZpbmUgbWRfaG1hY19yZXNldCBtYmVkdGxzX21kX2htYWNfcmVzZXQKKyNkZWZpbmUgbWRfaG1hY19zdGFydHMgbWJlZHRsc19tZF9obWFjX3N0YXJ0cworI2RlZmluZSBtZF9obWFjX3VwZGF0ZSBtYmVkdGxzX21kX2htYWNfdXBkYXRlCisjZGVmaW5lIG1kX2luZm9fZnJvbV9zdHJpbmcgbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nCisjZGVmaW5lIG1kX2luZm9fZnJvbV90eXBlIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUKKyNkZWZpbmUgbWRfaW5mb190IG1iZWR0bHNfbWRfaW5mb190CisjZGVmaW5lIG1kX2luaXQgbWJlZHRsc19tZF9pbml0CisjZGVmaW5lIG1kX2luaXRfY3R4IG1iZWR0bHNfbWRfaW5pdF9jdHgKKyNkZWZpbmUgbWRfbGlzdCBtYmVkdGxzX21kX2xpc3QKKyNkZWZpbmUgbWRfcHJvY2VzcyBtYmVkdGxzX21kX3Byb2Nlc3MKKyNkZWZpbmUgbWRfc3RhcnRzIG1iZWR0bHNfbWRfc3RhcnRzCisjZGVmaW5lIG1kX3R5cGVfdCBtYmVkdGxzX21kX3R5cGVfdAorI2RlZmluZSBtZF91cGRhdGUgbWJlZHRsc19tZF91cGRhdGUKKyNkZWZpbmUgbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0IG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0CisjZGVmaW5lIG1lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZQorI2RlZmluZSBtZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQKKyNkZWZpbmUgbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfZ2V0IG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfZ2V0CisjZGVmaW5lIG1lbW9yeV9idWZmZXJfYWxsb2NfbWF4X3Jlc2V0IG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfcmVzZXQKKyNkZWZpbmUgbWVtb3J5X2J1ZmZlcl9hbGxvY19zZWxmX3Rlc3QgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3NlbGZfdGVzdAorI2RlZmluZSBtZW1vcnlfYnVmZmVyX2FsbG9jX3N0YXR1cyBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc3RhdHVzCisjZGVmaW5lIG1lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5IG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkKKyNkZWZpbmUgbWVtb3J5X2J1ZmZlcl9zZXRfdmVyaWZ5IG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9zZXRfdmVyaWZ5CisjZGVmaW5lIG1lbW9yeV9zZXRfb3duIG1iZWR0bHNfbWVtb3J5X3NldF9vd24KKyNkZWZpbmUgbXBpIG1iZWR0bHNfbXBpCisjZGVmaW5lIG1waV9hZGRfYWJzIG1iZWR0bHNfbXBpX2FkZF9hYnMKKyNkZWZpbmUgbXBpX2FkZF9pbnQgbWJlZHRsc19tcGlfYWRkX2ludAorI2RlZmluZSBtcGlfYWRkX21waSBtYmVkdGxzX21waV9hZGRfbXBpCisjZGVmaW5lIG1waV9jbXBfYWJzIG1iZWR0bHNfbXBpX2NtcF9hYnMKKyNkZWZpbmUgbXBpX2NtcF9pbnQgbWJlZHRsc19tcGlfY21wX2ludAorI2RlZmluZSBtcGlfY21wX21waSBtYmVkdGxzX21waV9jbXBfbXBpCisjZGVmaW5lIG1waV9jb3B5IG1iZWR0bHNfbXBpX2NvcHkKKyNkZWZpbmUgbXBpX2Rpdl9pbnQgbWJlZHRsc19tcGlfZGl2X2ludAorI2RlZmluZSBtcGlfZGl2X21waSBtYmVkdGxzX21waV9kaXZfbXBpCisjZGVmaW5lIG1waV9leHBfbW9kIG1iZWR0bHNfbXBpX2V4cF9tb2QKKyNkZWZpbmUgbXBpX2ZpbGxfcmFuZG9tIG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tCisjZGVmaW5lIG1waV9mcmVlIG1iZWR0bHNfbXBpX2ZyZWUKKyNkZWZpbmUgbXBpX2djZCBtYmVkdGxzX21waV9nY2QKKyNkZWZpbmUgbXBpX2dlbl9wcmltZSBtYmVkdGxzX21waV9nZW5fcHJpbWUKKyNkZWZpbmUgbXBpX2dldF9iaXQgbWJlZHRsc19tcGlfZ2V0X2JpdAorI2RlZmluZSBtcGlfZ3JvdyBtYmVkdGxzX21waV9ncm93CisjZGVmaW5lIG1waV9pbml0IG1iZWR0bHNfbXBpX2luaXQKKyNkZWZpbmUgbXBpX2ludl9tb2QgbWJlZHRsc19tcGlfaW52X21vZAorI2RlZmluZSBtcGlfaXNfcHJpbWUgbWJlZHRsc19tcGlfaXNfcHJpbWUKKyNkZWZpbmUgbXBpX2xzYiBtYmVkdGxzX21waV9sc2IKKyNkZWZpbmUgbXBpX2xzZXQgbWJlZHRsc19tcGlfbHNldAorI2RlZmluZSBtcGlfbW9kX2ludCBtYmVkdGxzX21waV9tb2RfaW50CisjZGVmaW5lIG1waV9tb2RfbXBpIG1iZWR0bHNfbXBpX21vZF9tcGkKKyNkZWZpbmUgbXBpX21zYiBtYmVkdGxzX21waV9iaXRsZW4KKyNkZWZpbmUgbXBpX211bF9pbnQgbWJlZHRsc19tcGlfbXVsX2ludAorI2RlZmluZSBtcGlfbXVsX21waSBtYmVkdGxzX21waV9tdWxfbXBpCisjZGVmaW5lIG1waV9yZWFkX2JpbmFyeSBtYmVkdGxzX21waV9yZWFkX2JpbmFyeQorI2RlZmluZSBtcGlfcmVhZF9maWxlIG1iZWR0bHNfbXBpX3JlYWRfZmlsZQorI2RlZmluZSBtcGlfcmVhZF9zdHJpbmcgbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcKKyNkZWZpbmUgbXBpX3NhZmVfY29uZF9hc3NpZ24gbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbgorI2RlZmluZSBtcGlfc2FmZV9jb25kX3N3YXAgbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXAKKyNkZWZpbmUgbXBpX3NlbGZfdGVzdCBtYmVkdGxzX21waV9zZWxmX3Rlc3QKKyNkZWZpbmUgbXBpX3NldF9iaXQgbWJlZHRsc19tcGlfc2V0X2JpdAorI2RlZmluZSBtcGlfc2hpZnRfbCBtYmVkdGxzX21waV9zaGlmdF9sCisjZGVmaW5lIG1waV9zaGlmdF9yIG1iZWR0bHNfbXBpX3NoaWZ0X3IKKyNkZWZpbmUgbXBpX3NocmluayBtYmVkdGxzX21waV9zaHJpbmsKKyNkZWZpbmUgbXBpX3NpemUgbWJlZHRsc19tcGlfc2l6ZQorI2RlZmluZSBtcGlfc3ViX2FicyBtYmVkdGxzX21waV9zdWJfYWJzCisjZGVmaW5lIG1waV9zdWJfaW50IG1iZWR0bHNfbXBpX3N1Yl9pbnQKKyNkZWZpbmUgbXBpX3N1Yl9tcGkgbWJlZHRsc19tcGlfc3ViX21waQorI2RlZmluZSBtcGlfc3dhcCBtYmVkdGxzX21waV9zd2FwCisjZGVmaW5lIG1waV93cml0ZV9iaW5hcnkgbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5CisjZGVmaW5lIG1waV93cml0ZV9maWxlIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUKKyNkZWZpbmUgbXBpX3dyaXRlX3N0cmluZyBtYmVkdGxzX21waV93cml0ZV9zdHJpbmcKKyNkZWZpbmUgbmV0X2FjY2VwdCBtYmVkdGxzX25ldF9hY2NlcHQKKyNkZWZpbmUgbmV0X2JpbmQgbWJlZHRsc19uZXRfYmluZAorI2RlZmluZSBuZXRfY2xvc2UgbWJlZHRsc19uZXRfZnJlZQorI2RlZmluZSBuZXRfY29ubmVjdCBtYmVkdGxzX25ldF9jb25uZWN0CisjZGVmaW5lIG5ldF9yZWN2IG1iZWR0bHNfbmV0X3JlY3YKKyNkZWZpbmUgbmV0X3JlY3ZfdGltZW91dCBtYmVkdGxzX25ldF9yZWN2X3RpbWVvdXQKKyNkZWZpbmUgbmV0X3NlbmQgbWJlZHRsc19uZXRfc2VuZAorI2RlZmluZSBuZXRfc2V0X2Jsb2NrIG1iZWR0bHNfbmV0X3NldF9ibG9jaworI2RlZmluZSBuZXRfc2V0X25vbmJsb2NrIG1iZWR0bHNfbmV0X3NldF9ub25ibG9jaworI2RlZmluZSBuZXRfdXNsZWVwIG1iZWR0bHNfbmV0X3VzbGVlcAorI2RlZmluZSBvaWRfZGVzY3JpcHRvcl90IG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdAorI2RlZmluZSBvaWRfZ2V0X2F0dHJfc2hvcnRfbmFtZSBtYmVkdGxzX29pZF9nZXRfYXR0cl9zaG9ydF9uYW1lCisjZGVmaW5lIG9pZF9nZXRfY2lwaGVyX2FsZyBtYmVkdGxzX29pZF9nZXRfY2lwaGVyX2FsZworI2RlZmluZSBvaWRfZ2V0X2VjX2dycCBtYmVkdGxzX29pZF9nZXRfZWNfZ3JwCisjZGVmaW5lIG9pZF9nZXRfZXh0ZW5kZWRfa2V5X3VzYWdlIG1iZWR0bHNfb2lkX2dldF9leHRlbmRlZF9rZXlfdXNhZ2UKKyNkZWZpbmUgb2lkX2dldF9tZF9hbGcgbWJlZHRsc19vaWRfZ2V0X21kX2FsZworI2RlZmluZSBvaWRfZ2V0X251bWVyaWNfc3RyaW5nIG1iZWR0bHNfb2lkX2dldF9udW1lcmljX3N0cmluZworI2RlZmluZSBvaWRfZ2V0X29pZF9ieV9lY19ncnAgbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9lY19ncnAKKyNkZWZpbmUgb2lkX2dldF9vaWRfYnlfbWQgbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9tZAorI2RlZmluZSBvaWRfZ2V0X29pZF9ieV9wa19hbGcgbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9wa19hbGcKKyNkZWZpbmUgb2lkX2dldF9vaWRfYnlfc2lnX2FsZyBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X3NpZ19hbGcKKyNkZWZpbmUgb2lkX2dldF9wa19hbGcgbWJlZHRsc19vaWRfZ2V0X3BrX2FsZworI2RlZmluZSBvaWRfZ2V0X3BrY3MxMl9wYmVfYWxnIG1iZWR0bHNfb2lkX2dldF9wa2NzMTJfcGJlX2FsZworI2RlZmluZSBvaWRfZ2V0X3NpZ19hbGcgbWJlZHRsc19vaWRfZ2V0X3NpZ19hbGcKKyNkZWZpbmUgb2lkX2dldF9zaWdfYWxnX2Rlc2MgbWJlZHRsc19vaWRfZ2V0X3NpZ19hbGdfZGVzYworI2RlZmluZSBvaWRfZ2V0X3g1MDlfZXh0X3R5cGUgbWJlZHRsc19vaWRfZ2V0X3g1MDlfZXh0X3R5cGUKKyNkZWZpbmUgb3BlcmF0aW9uX3QgbWJlZHRsc19vcGVyYXRpb25fdAorI2RlZmluZSBwYWRsb2NrX3N1cHBvcnRzIG1iZWR0bHNfcGFkbG9ja19oYXNfc3VwcG9ydAorI2RlZmluZSBwYWRsb2NrX3hjcnlwdGNiYyBtYmVkdGxzX3BhZGxvY2tfeGNyeXB0Y2JjCisjZGVmaW5lIHBhZGxvY2tfeGNyeXB0ZWNiIG1iZWR0bHNfcGFkbG9ja194Y3J5cHRlY2IKKyNkZWZpbmUgcGJrZGYyX2htYWMgbWJlZHRsc19wYmtkZjJfaG1hYworI2RlZmluZSBwYmtkZjJfc2VsZl90ZXN0IG1iZWR0bHNfcGJrZGYyX3NlbGZfdGVzdAorI2RlZmluZSBwZW1fY29udGV4dCBtYmVkdGxzX3BlbV9jb250ZXh0CisjZGVmaW5lIHBlbV9mcmVlIG1iZWR0bHNfcGVtX2ZyZWUKKyNkZWZpbmUgcGVtX2luaXQgbWJlZHRsc19wZW1faW5pdAorI2RlZmluZSBwZW1fcmVhZF9idWZmZXIgbWJlZHRsc19wZW1fcmVhZF9idWZmZXIKKyNkZWZpbmUgcGVtX3dyaXRlX2J1ZmZlciBtYmVkdGxzX3BlbV93cml0ZV9idWZmZXIKKyNkZWZpbmUgcGtfY2FuX2RvIG1iZWR0bHNfcGtfY2FuX2RvCisjZGVmaW5lIHBrX2NoZWNrX3BhaXIgbWJlZHRsc19wa19jaGVja19wYWlyCisjZGVmaW5lIHBrX2NvbnRleHQgbWJlZHRsc19wa19jb250ZXh0CisjZGVmaW5lIHBrX2RlYnVnIG1iZWR0bHNfcGtfZGVidWcKKyNkZWZpbmUgcGtfZGVidWdfaXRlbSBtYmVkdGxzX3BrX2RlYnVnX2l0ZW0KKyNkZWZpbmUgcGtfZGVidWdfdHlwZSBtYmVkdGxzX3BrX2RlYnVnX3R5cGUKKyNkZWZpbmUgcGtfZGVjcnlwdCBtYmVkdGxzX3BrX2RlY3J5cHQKKyNkZWZpbmUgcGtfZWMgbWJlZHRsc19wa19lYworI2RlZmluZSBwa19lbmNyeXB0IG1iZWR0bHNfcGtfZW5jcnlwdAorI2RlZmluZSBwa19mcmVlIG1iZWR0bHNfcGtfZnJlZQorI2RlZmluZSBwa19nZXRfbGVuIG1iZWR0bHNfcGtfZ2V0X2xlbgorI2RlZmluZSBwa19nZXRfbmFtZSBtYmVkdGxzX3BrX2dldF9uYW1lCisjZGVmaW5lIHBrX2dldF9zaXplIG1iZWR0bHNfcGtfZ2V0X2JpdGxlbgorI2RlZmluZSBwa19nZXRfdHlwZSBtYmVkdGxzX3BrX2dldF90eXBlCisjZGVmaW5lIHBrX2luZm9fZnJvbV90eXBlIG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUKKyNkZWZpbmUgcGtfaW5mb190IG1iZWR0bHNfcGtfaW5mb190CisjZGVmaW5lIHBrX2luaXQgbWJlZHRsc19wa19pbml0CisjZGVmaW5lIHBrX2luaXRfY3R4IG1iZWR0bHNfcGtfc2V0dXAKKyNkZWZpbmUgcGtfaW5pdF9jdHhfcnNhX2FsdCBtYmVkdGxzX3BrX3NldHVwX3JzYV9hbHQKKyNkZWZpbmUgcGtfbG9hZF9maWxlIG1iZWR0bHNfcGtfbG9hZF9maWxlCisjZGVmaW5lIHBrX3BhcnNlX2tleSBtYmVkdGxzX3BrX3BhcnNlX2tleQorI2RlZmluZSBwa19wYXJzZV9rZXlmaWxlIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZQorI2RlZmluZSBwa19wYXJzZV9wdWJsaWNfa2V5IG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleQorI2RlZmluZSBwa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlCisjZGVmaW5lIHBrX3BhcnNlX3N1YnB1YmtleSBtYmVkdGxzX3BrX3BhcnNlX3N1YnB1YmtleQorI2RlZmluZSBwa19yc2EgbWJlZHRsc19wa19yc2EKKyNkZWZpbmUgcGtfcnNhX2FsdF9kZWNyeXB0X2Z1bmMgbWJlZHRsc19wa19yc2FfYWx0X2RlY3J5cHRfZnVuYworI2RlZmluZSBwa19yc2FfYWx0X2tleV9sZW5fZnVuYyBtYmVkdGxzX3BrX3JzYV9hbHRfa2V5X2xlbl9mdW5jCisjZGVmaW5lIHBrX3JzYV9hbHRfc2lnbl9mdW5jIG1iZWR0bHNfcGtfcnNhX2FsdF9zaWduX2Z1bmMKKyNkZWZpbmUgcGtfcnNhc3NhX3Bzc19vcHRpb25zIG1iZWR0bHNfcGtfcnNhc3NhX3Bzc19vcHRpb25zCisjZGVmaW5lIHBrX3NpZ24gbWJlZHRsc19wa19zaWduCisjZGVmaW5lIHBrX3R5cGVfdCBtYmVkdGxzX3BrX3R5cGVfdAorI2RlZmluZSBwa192ZXJpZnkgbWJlZHRsc19wa192ZXJpZnkKKyNkZWZpbmUgcGtfdmVyaWZ5X2V4dCBtYmVkdGxzX3BrX3ZlcmlmeV9leHQKKyNkZWZpbmUgcGtfd3JpdGVfa2V5X2RlciBtYmVkdGxzX3BrX3dyaXRlX2tleV9kZXIKKyNkZWZpbmUgcGtfd3JpdGVfa2V5X3BlbSBtYmVkdGxzX3BrX3dyaXRlX2tleV9wZW0KKyNkZWZpbmUgcGtfd3JpdGVfcHVia2V5IG1iZWR0bHNfcGtfd3JpdGVfcHVia2V5CisjZGVmaW5lIHBrX3dyaXRlX3B1YmtleV9kZXIgbWJlZHRsc19wa193cml0ZV9wdWJrZXlfZGVyCisjZGVmaW5lIHBrX3dyaXRlX3B1YmtleV9wZW0gbWJlZHRsc19wa193cml0ZV9wdWJrZXlfcGVtCisjZGVmaW5lIHBrY3MxMV9jb250ZXh0IG1iZWR0bHNfcGtjczExX2NvbnRleHQKKyNkZWZpbmUgcGtjczExX2RlY3J5cHQgbWJlZHRsc19wa2NzMTFfZGVjcnlwdAorI2RlZmluZSBwa2NzMTFfcHJpdl9rZXlfZnJlZSBtYmVkdGxzX3BrY3MxMV9wcml2X2tleV9mcmVlCisjZGVmaW5lIHBrY3MxMV9wcml2X2tleV9pbml0IG1iZWR0bHNfcGtjczExX3ByaXZfa2V5X2JpbmQKKyNkZWZpbmUgcGtjczExX3NpZ24gbWJlZHRsc19wa2NzMTFfc2lnbgorI2RlZmluZSBwa2NzMTFfeDUwOV9jZXJ0X2luaXQgbWJlZHRsc19wa2NzMTFfeDUwOV9jZXJ0X2JpbmQKKyNkZWZpbmUgcGtjczEyX2Rlcml2YXRpb24gbWJlZHRsc19wa2NzMTJfZGVyaXZhdGlvbgorI2RlZmluZSBwa2NzMTJfcGJlIG1iZWR0bHNfcGtjczEyX3BiZQorI2RlZmluZSBwa2NzMTJfcGJlX3NoYTFfcmM0XzEyOCBtYmVkdGxzX3BrY3MxMl9wYmVfc2hhMV9yYzRfMTI4CisjZGVmaW5lIHBrY3M1X3BiZXMyIG1iZWR0bHNfcGtjczVfcGJlczIKKyNkZWZpbmUgcGtjczVfcGJrZGYyX2htYWMgbWJlZHRsc19wa2NzNV9wYmtkZjJfaG1hYworI2RlZmluZSBwa2NzNV9zZWxmX3Rlc3QgbWJlZHRsc19wa2NzNV9zZWxmX3Rlc3QKKyNkZWZpbmUgcGxhdGZvcm1fZW50cm9weV9wb2xsIG1iZWR0bHNfcGxhdGZvcm1fZW50cm9weV9wb2xsCisjZGVmaW5lIHBsYXRmb3JtX3NldF9leGl0IG1iZWR0bHNfcGxhdGZvcm1fc2V0X2V4aXQKKyNkZWZpbmUgcGxhdGZvcm1fc2V0X2ZwcmludGYgbWJlZHRsc19wbGF0Zm9ybV9zZXRfZnByaW50ZgorI2RlZmluZSBwbGF0Zm9ybV9zZXRfbWFsbG9jX2ZyZWUgbWJlZHRsc19wbGF0Zm9ybV9zZXRfbWFsbG9jX2ZyZWUKKyNkZWZpbmUgcGxhdGZvcm1fc2V0X3ByaW50ZiBtYmVkdGxzX3BsYXRmb3JtX3NldF9wcmludGYKKyNkZWZpbmUgcGxhdGZvcm1fc2V0X3NucHJpbnRmIG1iZWR0bHNfcGxhdGZvcm1fc2V0X3NucHJpbnRmCisjZGVmaW5lIHBvbGFyc3NsX2V4aXQgbWJlZHRsc19leGl0CisjZGVmaW5lIHBvbGFyc3NsX2ZwcmludGYgbWJlZHRsc19mcHJpbnRmCisjZGVmaW5lIHBvbGFyc3NsX2ZyZWUgbWJlZHRsc19mcmVlCisjZGVmaW5lIHBvbGFyc3NsX21hbGxvYyBtYmVkdGxzX21hbGxvYworI2RlZmluZSBwb2xhcnNzbF9tdXRleF9mcmVlIG1iZWR0bHNfbXV0ZXhfZnJlZQorI2RlZmluZSBwb2xhcnNzbF9tdXRleF9pbml0IG1iZWR0bHNfbXV0ZXhfaW5pdAorI2RlZmluZSBwb2xhcnNzbF9tdXRleF9sb2NrIG1iZWR0bHNfbXV0ZXhfbG9jaworI2RlZmluZSBwb2xhcnNzbF9tdXRleF91bmxvY2sgbWJlZHRsc19tdXRleF91bmxvY2sKKyNkZWZpbmUgcG9sYXJzc2xfcHJpbnRmIG1iZWR0bHNfcHJpbnRmCisjZGVmaW5lIHBvbGFyc3NsX3NucHJpbnRmIG1iZWR0bHNfc25wcmludGYKKyNkZWZpbmUgcG9sYXJzc2xfc3RyZXJyb3IgbWJlZHRsc19zdHJlcnJvcgorI2RlZmluZSByaXBlbWQxNjAgbWJlZHRsc19yaXBlbWQxNjAKKyNkZWZpbmUgcmlwZW1kMTYwX2NvbnRleHQgbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dAorI2RlZmluZSByaXBlbWQxNjBfZmlsZSBtYmVkdGxzX3JpcGVtZDE2MF9maWxlCisjZGVmaW5lIHJpcGVtZDE2MF9maW5pc2ggbWJlZHRsc19yaXBlbWQxNjBfZmluaXNoCisjZGVmaW5lIHJpcGVtZDE2MF9mcmVlIG1iZWR0bHNfcmlwZW1kMTYwX2ZyZWUKKyNkZWZpbmUgcmlwZW1kMTYwX2htYWMgbWJlZHRsc19yaXBlbWQxNjBfaG1hYworI2RlZmluZSByaXBlbWQxNjBfaG1hY19maW5pc2ggbWJlZHRsc19yaXBlbWQxNjBfaG1hY19maW5pc2gKKyNkZWZpbmUgcmlwZW1kMTYwX2htYWNfcmVzZXQgbWJlZHRsc19yaXBlbWQxNjBfaG1hY19yZXNldAorI2RlZmluZSByaXBlbWQxNjBfaG1hY19zdGFydHMgbWJlZHRsc19yaXBlbWQxNjBfaG1hY19zdGFydHMKKyNkZWZpbmUgcmlwZW1kMTYwX2htYWNfdXBkYXRlIG1iZWR0bHNfcmlwZW1kMTYwX2htYWNfdXBkYXRlCisjZGVmaW5lIHJpcGVtZDE2MF9pbmZvIG1iZWR0bHNfcmlwZW1kMTYwX2luZm8KKyNkZWZpbmUgcmlwZW1kMTYwX2luaXQgbWJlZHRsc19yaXBlbWQxNjBfaW5pdAorI2RlZmluZSByaXBlbWQxNjBfcHJvY2VzcyBtYmVkdGxzX3JpcGVtZDE2MF9wcm9jZXNzCisjZGVmaW5lIHJpcGVtZDE2MF9zZWxmX3Rlc3QgbWJlZHRsc19yaXBlbWQxNjBfc2VsZl90ZXN0CisjZGVmaW5lIHJpcGVtZDE2MF9zdGFydHMgbWJlZHRsc19yaXBlbWQxNjBfc3RhcnRzCisjZGVmaW5lIHJpcGVtZDE2MF91cGRhdGUgbWJlZHRsc19yaXBlbWQxNjBfdXBkYXRlCisjZGVmaW5lIHJzYV9hbHRfY29udGV4dCBtYmVkdGxzX3JzYV9hbHRfY29udGV4dAorI2RlZmluZSByc2FfYWx0X2luZm8gbWJlZHRsc19yc2FfYWx0X2luZm8KKyNkZWZpbmUgcnNhX2NoZWNrX3ByaXZrZXkgbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleQorI2RlZmluZSByc2FfY2hlY2tfcHViX3ByaXYgbWJlZHRsc19yc2FfY2hlY2tfcHViX3ByaXYKKyNkZWZpbmUgcnNhX2NoZWNrX3B1YmtleSBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkKKyNkZWZpbmUgcnNhX2NvbnRleHQgbWJlZHRsc19yc2FfY29udGV4dAorI2RlZmluZSByc2FfY29weSBtYmVkdGxzX3JzYV9jb3B5CisjZGVmaW5lIHJzYV9kZWNyeXB0X2Z1bmMgbWJlZHRsc19yc2FfZGVjcnlwdF9mdW5jCisjZGVmaW5lIHJzYV9mcmVlIG1iZWR0bHNfcnNhX2ZyZWUKKyNkZWZpbmUgcnNhX2dlbl9rZXkgbWJlZHRsc19yc2FfZ2VuX2tleQorI2RlZmluZSByc2FfaW5mbyBtYmVkdGxzX3JzYV9pbmZvCisjZGVmaW5lIHJzYV9pbml0IG1iZWR0bHNfcnNhX2luaXQKKyNkZWZpbmUgcnNhX2tleV9sZW5fZnVuYyBtYmVkdGxzX3JzYV9rZXlfbGVuX2Z1bmMKKyNkZWZpbmUgcnNhX3BrY3MxX2RlY3J5cHQgbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdAorI2RlZmluZSByc2FfcGtjczFfZW5jcnlwdCBtYmVkdGxzX3JzYV9wa2NzMV9lbmNyeXB0CisjZGVmaW5lIHJzYV9wa2NzMV9zaWduIG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24KKyNkZWZpbmUgcnNhX3BrY3MxX3ZlcmlmeSBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkKKyNkZWZpbmUgcnNhX3ByaXZhdGUgbWJlZHRsc19yc2FfcHJpdmF0ZQorI2RlZmluZSByc2FfcHVibGljIG1iZWR0bHNfcnNhX3B1YmxpYworI2RlZmluZSByc2FfcnNhZXNfb2FlcF9kZWNyeXB0IG1iZWR0bHNfcnNhX3JzYWVzX29hZXBfZGVjcnlwdAorI2RlZmluZSByc2FfcnNhZXNfb2FlcF9lbmNyeXB0IG1iZWR0bHNfcnNhX3JzYWVzX29hZXBfZW5jcnlwdAorI2RlZmluZSByc2FfcnNhZXNfcGtjczFfdjE1X2RlY3J5cHQgbWJlZHRsc19yc2FfcnNhZXNfcGtjczFfdjE1X2RlY3J5cHQKKyNkZWZpbmUgcnNhX3JzYWVzX3BrY3MxX3YxNV9lbmNyeXB0IG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9lbmNyeXB0CisjZGVmaW5lIHJzYV9yc2Fzc2FfcGtjczFfdjE1X3NpZ24gbWJlZHRsc19yc2FfcnNhc3NhX3BrY3MxX3YxNV9zaWduCisjZGVmaW5lIHJzYV9yc2Fzc2FfcGtjczFfdjE1X3ZlcmlmeSBtYmVkdGxzX3JzYV9yc2Fzc2FfcGtjczFfdjE1X3ZlcmlmeQorI2RlZmluZSByc2FfcnNhc3NhX3Bzc19zaWduIG1iZWR0bHNfcnNhX3JzYXNzYV9wc3Nfc2lnbgorI2RlZmluZSByc2FfcnNhc3NhX3Bzc192ZXJpZnkgbWJlZHRsc19yc2FfcnNhc3NhX3Bzc192ZXJpZnkKKyNkZWZpbmUgcnNhX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dCBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQKKyNkZWZpbmUgcnNhX3NlbGZfdGVzdCBtYmVkdGxzX3JzYV9zZWxmX3Rlc3QKKyNkZWZpbmUgcnNhX3NldF9wYWRkaW5nIG1iZWR0bHNfcnNhX3NldF9wYWRkaW5nCisjZGVmaW5lIHJzYV9zaWduX2Z1bmMgbWJlZHRsc19yc2Ffc2lnbl9mdW5jCisjZGVmaW5lIHNhZmVyX21lbWNtcCBtYmVkdGxzX3NzbF9zYWZlcl9tZW1jbXAKKyNkZWZpbmUgc2V0X2FsYXJtIG1iZWR0bHNfc2V0X2FsYXJtCisjZGVmaW5lIHNoYTEgbWJlZHRsc19zaGExCisjZGVmaW5lIHNoYTFfY29udGV4dCBtYmVkdGxzX3NoYTFfY29udGV4dAorI2RlZmluZSBzaGExX2ZpbGUgbWJlZHRsc19zaGExX2ZpbGUKKyNkZWZpbmUgc2hhMV9maW5pc2ggbWJlZHRsc19zaGExX2ZpbmlzaAorI2RlZmluZSBzaGExX2ZyZWUgbWJlZHRsc19zaGExX2ZyZWUKKyNkZWZpbmUgc2hhMV9obWFjIG1iZWR0bHNfc2hhMV9obWFjCisjZGVmaW5lIHNoYTFfaG1hY19maW5pc2ggbWJlZHRsc19zaGExX2htYWNfZmluaXNoCisjZGVmaW5lIHNoYTFfaG1hY19yZXNldCBtYmVkdGxzX3NoYTFfaG1hY19yZXNldAorI2RlZmluZSBzaGExX2htYWNfc3RhcnRzIG1iZWR0bHNfc2hhMV9obWFjX3N0YXJ0cworI2RlZmluZSBzaGExX2htYWNfdXBkYXRlIG1iZWR0bHNfc2hhMV9obWFjX3VwZGF0ZQorI2RlZmluZSBzaGExX2luZm8gbWJlZHRsc19zaGExX2luZm8KKyNkZWZpbmUgc2hhMV9pbml0IG1iZWR0bHNfc2hhMV9pbml0CisjZGVmaW5lIHNoYTFfcHJvY2VzcyBtYmVkdGxzX3NoYTFfcHJvY2VzcworI2RlZmluZSBzaGExX3NlbGZfdGVzdCBtYmVkdGxzX3NoYTFfc2VsZl90ZXN0CisjZGVmaW5lIHNoYTFfc3RhcnRzIG1iZWR0bHNfc2hhMV9zdGFydHMKKyNkZWZpbmUgc2hhMV91cGRhdGUgbWJlZHRsc19zaGExX3VwZGF0ZQorI2RlZmluZSBzaGEyMjRfaW5mbyBtYmVkdGxzX3NoYTIyNF9pbmZvCisjZGVmaW5lIHNoYTI1NiBtYmVkdGxzX3NoYTI1NgorI2RlZmluZSBzaGEyNTZfY29udGV4dCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0CisjZGVmaW5lIHNoYTI1Nl9maWxlIG1iZWR0bHNfc2hhMjU2X2ZpbGUKKyNkZWZpbmUgc2hhMjU2X2ZpbmlzaCBtYmVkdGxzX3NoYTI1Nl9maW5pc2gKKyNkZWZpbmUgc2hhMjU2X2ZyZWUgbWJlZHRsc19zaGEyNTZfZnJlZQorI2RlZmluZSBzaGEyNTZfaG1hYyBtYmVkdGxzX3NoYTI1Nl9obWFjCisjZGVmaW5lIHNoYTI1Nl9obWFjX2ZpbmlzaCBtYmVkdGxzX3NoYTI1Nl9obWFjX2ZpbmlzaAorI2RlZmluZSBzaGEyNTZfaG1hY19yZXNldCBtYmVkdGxzX3NoYTI1Nl9obWFjX3Jlc2V0CisjZGVmaW5lIHNoYTI1Nl9obWFjX3N0YXJ0cyBtYmVkdGxzX3NoYTI1Nl9obWFjX3N0YXJ0cworI2RlZmluZSBzaGEyNTZfaG1hY191cGRhdGUgbWJlZHRsc19zaGEyNTZfaG1hY191cGRhdGUKKyNkZWZpbmUgc2hhMjU2X2luZm8gbWJlZHRsc19zaGEyNTZfaW5mbworI2RlZmluZSBzaGEyNTZfaW5pdCBtYmVkdGxzX3NoYTI1Nl9pbml0CisjZGVmaW5lIHNoYTI1Nl9wcm9jZXNzIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MKKyNkZWZpbmUgc2hhMjU2X3NlbGZfdGVzdCBtYmVkdGxzX3NoYTI1Nl9zZWxmX3Rlc3QKKyNkZWZpbmUgc2hhMjU2X3N0YXJ0cyBtYmVkdGxzX3NoYTI1Nl9zdGFydHMKKyNkZWZpbmUgc2hhMjU2X3VwZGF0ZSBtYmVkdGxzX3NoYTI1Nl91cGRhdGUKKyNkZWZpbmUgc2hhMzg0X2luZm8gbWJlZHRsc19zaGEzODRfaW5mbworI2RlZmluZSBzaGE1MTIgbWJlZHRsc19zaGE1MTIKKyNkZWZpbmUgc2hhNTEyX2NvbnRleHQgbWJlZHRsc19zaGE1MTJfY29udGV4dAorI2RlZmluZSBzaGE1MTJfZmlsZSBtYmVkdGxzX3NoYTUxMl9maWxlCisjZGVmaW5lIHNoYTUxMl9maW5pc2ggbWJlZHRsc19zaGE1MTJfZmluaXNoCisjZGVmaW5lIHNoYTUxMl9mcmVlIG1iZWR0bHNfc2hhNTEyX2ZyZWUKKyNkZWZpbmUgc2hhNTEyX2htYWMgbWJlZHRsc19zaGE1MTJfaG1hYworI2RlZmluZSBzaGE1MTJfaG1hY19maW5pc2ggbWJlZHRsc19zaGE1MTJfaG1hY19maW5pc2gKKyNkZWZpbmUgc2hhNTEyX2htYWNfcmVzZXQgbWJlZHRsc19zaGE1MTJfaG1hY19yZXNldAorI2RlZmluZSBzaGE1MTJfaG1hY19zdGFydHMgbWJlZHRsc19zaGE1MTJfaG1hY19zdGFydHMKKyNkZWZpbmUgc2hhNTEyX2htYWNfdXBkYXRlIG1iZWR0bHNfc2hhNTEyX2htYWNfdXBkYXRlCisjZGVmaW5lIHNoYTUxMl9pbmZvIG1iZWR0bHNfc2hhNTEyX2luZm8KKyNkZWZpbmUgc2hhNTEyX2luaXQgbWJlZHRsc19zaGE1MTJfaW5pdAorI2RlZmluZSBzaGE1MTJfcHJvY2VzcyBtYmVkdGxzX3NoYTUxMl9wcm9jZXNzCisjZGVmaW5lIHNoYTUxMl9zZWxmX3Rlc3QgbWJlZHRsc19zaGE1MTJfc2VsZl90ZXN0CisjZGVmaW5lIHNoYTUxMl9zdGFydHMgbWJlZHRsc19zaGE1MTJfc3RhcnRzCisjZGVmaW5lIHNoYTUxMl91cGRhdGUgbWJlZHRsc19zaGE1MTJfdXBkYXRlCisjZGVmaW5lIHNvdXJjZV9zdGF0ZSBtYmVkdGxzX2VudHJvcHlfc291cmNlX3N0YXRlCisjZGVmaW5lIHNzbF9jYWNoZV9jb250ZXh0IG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQKKyNkZWZpbmUgc3NsX2NhY2hlX2VudHJ5IG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5CisjZGVmaW5lIHNzbF9jYWNoZV9mcmVlIG1iZWR0bHNfc3NsX2NhY2hlX2ZyZWUKKyNkZWZpbmUgc3NsX2NhY2hlX2dldCBtYmVkdGxzX3NzbF9jYWNoZV9nZXQKKyNkZWZpbmUgc3NsX2NhY2hlX2luaXQgbWJlZHRsc19zc2xfY2FjaGVfaW5pdAorI2RlZmluZSBzc2xfY2FjaGVfc2V0IG1iZWR0bHNfc3NsX2NhY2hlX3NldAorI2RlZmluZSBzc2xfY2FjaGVfc2V0X21heF9lbnRyaWVzIG1iZWR0bHNfc3NsX2NhY2hlX3NldF9tYXhfZW50cmllcworI2RlZmluZSBzc2xfY2FjaGVfc2V0X3RpbWVvdXQgbWJlZHRsc19zc2xfY2FjaGVfc2V0X3RpbWVvdXQKKyNkZWZpbmUgc3NsX2NoZWNrX2NlcnRfdXNhZ2UgbWJlZHRsc19zc2xfY2hlY2tfY2VydF91c2FnZQorI2RlZmluZSBzc2xfY2lwaGVyc3VpdGVfZnJvbV9pZCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV9mcm9tX2lkCisjZGVmaW5lIHNzbF9jaXBoZXJzdWl0ZV9mcm9tX3N0cmluZyBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV9mcm9tX3N0cmluZworI2RlZmluZSBzc2xfY2lwaGVyc3VpdGVfdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90CisjZGVmaW5lIHNzbF9jaXBoZXJzdWl0ZV91c2VzX2VjIG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3VzZXNfZWMKKyNkZWZpbmUgc3NsX2NpcGhlcnN1aXRlX3VzZXNfcHNrIG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3VzZXNfcHNrCisjZGVmaW5lIHNzbF9jbG9zZV9ub3RpZnkgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5CisjZGVmaW5lIHNzbF9jb250ZXh0IG1iZWR0bHNfc3NsX2NvbnRleHQKKyNkZWZpbmUgc3NsX2Nvb2tpZV9jaGVjayBtYmVkdGxzX3NzbF9jb29raWVfY2hlY2sKKyNkZWZpbmUgc3NsX2Nvb2tpZV9jaGVja190IG1iZWR0bHNfc3NsX2Nvb2tpZV9jaGVja190CisjZGVmaW5lIHNzbF9jb29raWVfY3R4IG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHgKKyNkZWZpbmUgc3NsX2Nvb2tpZV9mcmVlIG1iZWR0bHNfc3NsX2Nvb2tpZV9mcmVlCisjZGVmaW5lIHNzbF9jb29raWVfaW5pdCBtYmVkdGxzX3NzbF9jb29raWVfaW5pdAorI2RlZmluZSBzc2xfY29va2llX3NldF90aW1lb3V0IG1iZWR0bHNfc3NsX2Nvb2tpZV9zZXRfdGltZW91dAorI2RlZmluZSBzc2xfY29va2llX3NldHVwIG1iZWR0bHNfc3NsX2Nvb2tpZV9zZXR1cAorI2RlZmluZSBzc2xfY29va2llX3dyaXRlIG1iZWR0bHNfc3NsX2Nvb2tpZV93cml0ZQorI2RlZmluZSBzc2xfY29va2llX3dyaXRlX3QgbWJlZHRsc19zc2xfY29va2llX3dyaXRlX3QKKyNkZWZpbmUgc3NsX2N1cnZlX2lzX2FjY2VwdGFibGUgbWJlZHRsc19zc2xfY3VydmVfaXNfYWNjZXB0YWJsZQorI2RlZmluZSBzc2xfZGVyaXZlX2tleXMgbWJlZHRsc19zc2xfZGVyaXZlX2tleXMKKyNkZWZpbmUgc3NsX2R0bHNfcmVwbGF5X2NoZWNrIG1iZWR0bHNfc3NsX2R0bHNfcmVwbGF5X2NoZWNrCisjZGVmaW5lIHNzbF9kdGxzX3JlcGxheV91cGRhdGUgbWJlZHRsc19zc2xfZHRsc19yZXBsYXlfdXBkYXRlCisjZGVmaW5lIHNzbF9mZXRjaF9pbnB1dCBtYmVkdGxzX3NzbF9mZXRjaF9pbnB1dAorI2RlZmluZSBzc2xfZmxpZ2h0X2l0ZW0gbWJlZHRsc19zc2xfZmxpZ2h0X2l0ZW0KKyNkZWZpbmUgc3NsX2ZsdXNoX291dHB1dCBtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQKKyNkZWZpbmUgc3NsX2ZyZWUgbWJlZHRsc19zc2xfZnJlZQorI2RlZmluZSBzc2xfZ2V0X2FscG5fcHJvdG9jb2wgbWJlZHRsc19zc2xfZ2V0X2FscG5fcHJvdG9jb2wKKyNkZWZpbmUgc3NsX2dldF9ieXRlc19hdmFpbCBtYmVkdGxzX3NzbF9nZXRfYnl0ZXNfYXZhaWwKKyNkZWZpbmUgc3NsX2dldF9jaXBoZXJzdWl0ZSBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGUKKyNkZWZpbmUgc3NsX2dldF9jaXBoZXJzdWl0ZV9pZCBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfaWQKKyNkZWZpbmUgc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lCisjZGVmaW5lIHNzbF9nZXRfY2lwaGVyc3VpdGVfc2lnX3BrX2FsZyBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfc2lnX3BrX2FsZworI2RlZmluZSBzc2xfZ2V0X3BlZXJfY2VydCBtYmVkdGxzX3NzbF9nZXRfcGVlcl9jZXJ0CisjZGVmaW5lIHNzbF9nZXRfcmVjb3JkX2V4cGFuc2lvbiBtYmVkdGxzX3NzbF9nZXRfcmVjb3JkX2V4cGFuc2lvbgorI2RlZmluZSBzc2xfZ2V0X3Nlc3Npb24gbWJlZHRsc19zc2xfZ2V0X3Nlc3Npb24KKyNkZWZpbmUgc3NsX2dldF92ZXJpZnlfcmVzdWx0IG1iZWR0bHNfc3NsX2dldF92ZXJpZnlfcmVzdWx0CisjZGVmaW5lIHNzbF9nZXRfdmVyc2lvbiBtYmVkdGxzX3NzbF9nZXRfdmVyc2lvbgorI2RlZmluZSBzc2xfaGFuZHNoYWtlIG1iZWR0bHNfc3NsX2hhbmRzaGFrZQorI2RlZmluZSBzc2xfaGFuZHNoYWtlX2NsaWVudF9zdGVwIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9jbGllbnRfc3RlcAorI2RlZmluZSBzc2xfaGFuZHNoYWtlX2ZyZWUgbWJlZHRsc19zc2xfaGFuZHNoYWtlX2ZyZWUKKyNkZWZpbmUgc3NsX2hhbmRzaGFrZV9wYXJhbXMgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3BhcmFtcworI2RlZmluZSBzc2xfaGFuZHNoYWtlX3NlcnZlcl9zdGVwIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9zZXJ2ZXJfc3RlcAorI2RlZmluZSBzc2xfaGFuZHNoYWtlX3N0ZXAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3N0ZXAKKyNkZWZpbmUgc3NsX2hhbmRzaGFrZV93cmFwdXAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3dyYXB1cAorI2RlZmluZSBzc2xfaGRyX2xlbiBtYmVkdGxzX3NzbF9oZHJfbGVuCisjZGVmaW5lIHNzbF9oc19oZHJfbGVuIG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4KKyNkZWZpbmUgc3NsX2h3X3JlY29yZF9hY3RpdmF0ZSBtYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUKKyNkZWZpbmUgc3NsX2h3X3JlY29yZF9maW5pc2ggbWJlZHRsc19zc2xfaHdfcmVjb3JkX2ZpbmlzaAorI2RlZmluZSBzc2xfaHdfcmVjb3JkX2luaXQgbWJlZHRsc19zc2xfaHdfcmVjb3JkX2luaXQKKyNkZWZpbmUgc3NsX2h3X3JlY29yZF9yZWFkIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZWFkCisjZGVmaW5lIHNzbF9od19yZWNvcmRfcmVzZXQgbWJlZHRsc19zc2xfaHdfcmVjb3JkX3Jlc2V0CisjZGVmaW5lIHNzbF9od19yZWNvcmRfd3JpdGUgbWJlZHRsc19zc2xfaHdfcmVjb3JkX3dyaXRlCisjZGVmaW5lIHNzbF9pbml0IG1iZWR0bHNfc3NsX2luaXQKKyNkZWZpbmUgc3NsX2tleV9jZXJ0IG1iZWR0bHNfc3NsX2tleV9jZXJ0CisjZGVmaW5lIHNzbF9sZWdhY3lfcmVuZWdvdGlhdGlvbiBtYmVkdGxzX3NzbF9jb25mX2xlZ2FjeV9yZW5lZ290aWF0aW9uCisjZGVmaW5lIHNzbF9saXN0X2NpcGhlcnN1aXRlcyBtYmVkdGxzX3NzbF9saXN0X2NpcGhlcnN1aXRlcworI2RlZmluZSBzc2xfbWRfYWxnX2Zyb21faGFzaCBtYmVkdGxzX3NzbF9tZF9hbGdfZnJvbV9oYXNoCisjZGVmaW5lIHNzbF9vcHRpbWl6ZV9jaGVja3N1bSBtYmVkdGxzX3NzbF9vcHRpbWl6ZV9jaGVja3N1bQorI2RlZmluZSBzc2xfb3duX2NlcnQgbWJlZHRsc19zc2xfb3duX2NlcnQKKyNkZWZpbmUgc3NsX293bl9rZXkgbWJlZHRsc19zc2xfb3duX2tleQorI2RlZmluZSBzc2xfcGFyc2VfY2VydGlmaWNhdGUgbWJlZHRsc19zc2xfcGFyc2VfY2VydGlmaWNhdGUKKyNkZWZpbmUgc3NsX3BhcnNlX2NoYW5nZV9jaXBoZXJfc3BlYyBtYmVkdGxzX3NzbF9wYXJzZV9jaGFuZ2VfY2lwaGVyX3NwZWMKKyNkZWZpbmUgc3NsX3BhcnNlX2ZpbmlzaGVkIG1iZWR0bHNfc3NsX3BhcnNlX2ZpbmlzaGVkCisjZGVmaW5lIHNzbF9wa19hbGdfZnJvbV9zaWcgbWJlZHRsc19zc2xfcGtfYWxnX2Zyb21fc2lnCisjZGVmaW5lIHNzbF9wa2NzMTFfZGVjcnlwdCBtYmVkdGxzX3NzbF9wa2NzMTFfZGVjcnlwdAorI2RlZmluZSBzc2xfcGtjczExX2tleV9sZW4gbWJlZHRsc19zc2xfcGtjczExX2tleV9sZW4KKyNkZWZpbmUgc3NsX3BrY3MxMV9zaWduIG1iZWR0bHNfc3NsX3BrY3MxMV9zaWduCisjZGVmaW5lIHNzbF9wc2tfZGVyaXZlX3ByZW1hc3RlciBtYmVkdGxzX3NzbF9wc2tfZGVyaXZlX3ByZW1hc3RlcgorI2RlZmluZSBzc2xfcmVhZCBtYmVkdGxzX3NzbF9yZWFkCisjZGVmaW5lIHNzbF9yZWFkX3JlY29yZCBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZAorI2RlZmluZSBzc2xfcmVhZF92ZXJzaW9uIG1iZWR0bHNfc3NsX3JlYWRfdmVyc2lvbgorI2RlZmluZSBzc2xfcmVjdl9mbGlnaHRfY29tcGxldGVkIG1iZWR0bHNfc3NsX3JlY3ZfZmxpZ2h0X2NvbXBsZXRlZAorI2RlZmluZSBzc2xfcmVuZWdvdGlhdGUgbWJlZHRsc19zc2xfcmVuZWdvdGlhdGUKKyNkZWZpbmUgc3NsX3Jlc2VuZCBtYmVkdGxzX3NzbF9yZXNlbmQKKyNkZWZpbmUgc3NsX3Jlc2V0X2NoZWNrc3VtIG1iZWR0bHNfc3NsX3Jlc2V0X2NoZWNrc3VtCisjZGVmaW5lIHNzbF9zZW5kX2FsZXJ0X21lc3NhZ2UgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlCisjZGVmaW5lIHNzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlIG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUKKyNkZWZpbmUgc3NsX3NlbmRfZmxpZ2h0X2NvbXBsZXRlZCBtYmVkdGxzX3NzbF9zZW5kX2ZsaWdodF9jb21wbGV0ZWQKKyNkZWZpbmUgc3NsX3Nlc3Npb24gbWJlZHRsc19zc2xfc2Vzc2lvbgorI2RlZmluZSBzc2xfc2Vzc2lvbl9mcmVlIG1iZWR0bHNfc3NsX3Nlc3Npb25fZnJlZQorI2RlZmluZSBzc2xfc2Vzc2lvbl9pbml0IG1iZWR0bHNfc3NsX3Nlc3Npb25faW5pdAorI2RlZmluZSBzc2xfc2Vzc2lvbl9yZXNldCBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0CisjZGVmaW5lIHNzbF9zZXRfYWxwbl9wcm90b2NvbHMgbWJlZHRsc19zc2xfY29uZl9hbHBuX3Byb3RvY29scworI2RlZmluZSBzc2xfc2V0X2FyYzRfc3VwcG9ydCBtYmVkdGxzX3NzbF9jb25mX2FyYzRfc3VwcG9ydAorI2RlZmluZSBzc2xfc2V0X2F1dGhtb2RlIG1iZWR0bHNfc3NsX2NvbmZfYXV0aG1vZGUKKyNkZWZpbmUgc3NsX3NldF9iaW8gbWJlZHRsc19zc2xfc2V0X2JpbworI2RlZmluZSBzc2xfc2V0X2JpbyBtYmVkdGxzX3NzbF9zZXRfYmlvX3RpbWVvdXQKKyNkZWZpbmUgc3NsX3NldF9jYV9jaGFpbiBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluCisjZGVmaW5lIHNzbF9zZXRfY2JjX3JlY29yZF9zcGxpdHRpbmcgbWJlZHRsc19zc2xfY29uZl9jYmNfcmVjb3JkX3NwbGl0dGluZworI2RlZmluZSBzc2xfc2V0X2NpcGhlcnN1aXRlcyBtYmVkdGxzX3NzbF9jb25mX2NpcGhlcnN1aXRlcworI2RlZmluZSBzc2xfc2V0X2NpcGhlcnN1aXRlc19mb3JfdmVyc2lvbiBtYmVkdGxzX3NzbF9jb25mX2NpcGhlcnN1aXRlc19mb3JfdmVyc2lvbgorI2RlZmluZSBzc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQgbWJlZHRsc19zc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQKKyNkZWZpbmUgc3NsX3NldF9jdXJ2ZXMgbWJlZHRsc19zc2xfY29uZl9jdXJ2ZXMKKyNkZWZpbmUgc3NsX3NldF9kYmcgbWJlZHRsc19zc2xfY29uZl9kYmcKKyNkZWZpbmUgc3NsX3NldF9kaF9wYXJhbSBtYmVkdGxzX3NzbF9jb25mX2RoX3BhcmFtCisjZGVmaW5lIHNzbF9zZXRfZGhfcGFyYW1fY3R4IG1iZWR0bHNfc3NsX2NvbmZfZGhfcGFyYW1fY3R4CisjZGVmaW5lIHNzbF9zZXRfZHRsc19hbnRpX3JlcGxheSBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYW50aV9yZXBsYXkKKyNkZWZpbmUgc3NsX3NldF9kdGxzX2JhZG1hY19saW1pdCBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYmFkbWFjX2xpbWl0CisjZGVmaW5lIHNzbF9zZXRfZHRsc19jb29raWVzIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19jb29raWVzCisjZGVmaW5lIHNzbF9zZXRfZW5jcnlwdF90aGVuX21hYyBtYmVkdGxzX3NzbF9jb25mX2VuY3J5cHRfdGhlbl9tYWMKKyNkZWZpbmUgc3NsX3NldF9lbmRwb2ludCBtYmVkdGxzX3NzbF9jb25mX2VuZHBvaW50CisjZGVmaW5lIHNzbF9zZXRfZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCBtYmVkdGxzX3NzbF9jb25mX2V4dGVuZGVkX21hc3Rlcl9zZWNyZXQKKyNkZWZpbmUgc3NsX3NldF9mYWxsYmFjayBtYmVkdGxzX3NzbF9jb25mX2ZhbGxiYWNrCisjZGVmaW5lIHNzbF9zZXRfaGFuZHNoYWtlX3RpbWVvdXQgbWJlZHRsc19zc2xfY29uZl9oYW5kc2hha2VfdGltZW91dAorI2RlZmluZSBzc2xfc2V0X2hvc3RuYW1lIG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZQorI2RlZmluZSBzc2xfc2V0X21heF9mcmFnX2xlbiBtYmVkdGxzX3NzbF9jb25mX21heF9mcmFnX2xlbgorI2RlZmluZSBzc2xfc2V0X21heF92ZXJzaW9uIG1iZWR0bHNfc3NsX2NvbmZfbWF4X3ZlcnNpb24KKyNkZWZpbmUgc3NsX3NldF9taW5fdmVyc2lvbiBtYmVkdGxzX3NzbF9jb25mX21pbl92ZXJzaW9uCisjZGVmaW5lIHNzbF9zZXRfb3duX2NlcnQgbWJlZHRsc19zc2xfY29uZl9vd25fY2VydAorI2RlZmluZSBzc2xfc2V0X293bl9jZXJ0X2FsdCBtYmVkdGxzX3NzbF9zZXRfb3duX2NlcnRfYWx0CisjZGVmaW5lIHNzbF9zZXRfb3duX2NlcnRfcnNhIG1iZWR0bHNfc3NsX3NldF9vd25fY2VydF9yc2EKKyNkZWZpbmUgc3NsX3NldF9wc2sgbWJlZHRsc19zc2xfY29uZl9wc2sKKyNkZWZpbmUgc3NsX3NldF9wc2tfY2IgbWJlZHRsc19zc2xfY29uZl9wc2tfY2IKKyNkZWZpbmUgc3NsX3NldF9yZW5lZ290aWF0aW9uIG1iZWR0bHNfc3NsX2NvbmZfcmVuZWdvdGlhdGlvbgorI2RlZmluZSBzc2xfc2V0X3JlbmVnb3RpYXRpb25fZW5mb3JjZWQgbWJlZHRsc19zc2xfY29uZl9yZW5lZ290aWF0aW9uX2VuZm9yY2VkCisjZGVmaW5lIHNzbF9zZXRfcmVuZWdvdGlhdGlvbl9wZXJpb2QgbWJlZHRsc19zc2xfY29uZl9yZW5lZ290aWF0aW9uX3BlcmlvZAorI2RlZmluZSBzc2xfc2V0X3JuZyBtYmVkdGxzX3NzbF9jb25mX3JuZworI2RlZmluZSBzc2xfc2V0X3Nlc3Npb24gbWJlZHRsc19zc2xfc2V0X3Nlc3Npb24KKyNkZWZpbmUgc3NsX3NldF9zZXNzaW9uX2NhY2hlIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl9jYWNoZQorI2RlZmluZSBzc2xfc2V0X3Nlc3Npb25fdGlja2V0X2xpZmV0aW1lIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl90aWNrZXRfbGlmZXRpbWUKKyNkZWZpbmUgc3NsX3NldF9zZXNzaW9uX3RpY2tldHMgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHMKKyNkZWZpbmUgc3NsX3NldF9zbmkgbWJlZHRsc19zc2xfY29uZl9zbmkKKyNkZWZpbmUgc3NsX3NldF90cmFuc3BvcnQgbWJlZHRsc19zc2xfY29uZl90cmFuc3BvcnQKKyNkZWZpbmUgc3NsX3NldF90cnVuY2F0ZWRfaG1hYyBtYmVkdGxzX3NzbF9jb25mX3RydW5jYXRlZF9obWFjCisjZGVmaW5lIHNzbF9zZXRfdmVyaWZ5IG1iZWR0bHNfc3NsX2NvbmZfdmVyaWZ5CisjZGVmaW5lIHNzbF9zaWdfZnJvbV9wayBtYmVkdGxzX3NzbF9zaWdfZnJvbV9waworI2RlZmluZSBzc2xfc3RhdGVzIG1iZWR0bHNfc3NsX3N0YXRlcworI2RlZmluZSBzc2xfdGlja2V0X2tleXMgbWJlZHRsc19zc2xfdGlja2V0X2tleXMKKyNkZWZpbmUgc3NsX3RyYW5zZm9ybSBtYmVkdGxzX3NzbF90cmFuc2Zvcm0KKyNkZWZpbmUgc3NsX3RyYW5zZm9ybV9mcmVlIG1iZWR0bHNfc3NsX3RyYW5zZm9ybV9mcmVlCisjZGVmaW5lIHNzbF93cml0ZSBtYmVkdGxzX3NzbF93cml0ZQorI2RlZmluZSBzc2xfd3JpdGVfY2VydGlmaWNhdGUgbWJlZHRsc19zc2xfd3JpdGVfY2VydGlmaWNhdGUKKyNkZWZpbmUgc3NsX3dyaXRlX2NoYW5nZV9jaXBoZXJfc3BlYyBtYmVkdGxzX3NzbF93cml0ZV9jaGFuZ2VfY2lwaGVyX3NwZWMKKyNkZWZpbmUgc3NsX3dyaXRlX2ZpbmlzaGVkIG1iZWR0bHNfc3NsX3dyaXRlX2ZpbmlzaGVkCisjZGVmaW5lIHNzbF93cml0ZV9yZWNvcmQgbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkCisjZGVmaW5lIHNzbF93cml0ZV92ZXJzaW9uIG1iZWR0bHNfc3NsX3dyaXRlX3ZlcnNpb24KKyNkZWZpbmUgc3VwcG9ydGVkX2NpcGhlcnMgbWJlZHRsc19jaXBoZXJfc3VwcG9ydGVkCisjZGVmaW5lIHRfc2ludCBtYmVkdGxzX21waV9zaW50CisjZGVmaW5lIHRfdWRibCBtYmVkdGxzX3RfdWRibAorI2RlZmluZSB0X3VpbnQgbWJlZHRsc19tcGlfdWludAorI2RlZmluZSB0ZXN0X2NhX2NydCBtYmVkdGxzX3Rlc3RfY2FfY3J0CisjZGVmaW5lIHRlc3RfY2FfY3J0X2VjIG1iZWR0bHNfdGVzdF9jYV9jcnRfZWMKKyNkZWZpbmUgdGVzdF9jYV9jcnRfcnNhIG1iZWR0bHNfdGVzdF9jYV9jcnRfcnNhCisjZGVmaW5lIHRlc3RfY2Ffa2V5IG1iZWR0bHNfdGVzdF9jYV9rZXkKKyNkZWZpbmUgdGVzdF9jYV9rZXlfZWMgbWJlZHRsc190ZXN0X2NhX2tleV9lYworI2RlZmluZSB0ZXN0X2NhX2tleV9yc2EgbWJlZHRsc190ZXN0X2NhX2tleV9yc2EKKyNkZWZpbmUgdGVzdF9jYV9saXN0IG1iZWR0bHNfdGVzdF9jYXNfcGVtCisjZGVmaW5lIHRlc3RfY2FfcHdkIG1iZWR0bHNfdGVzdF9jYV9wd2QKKyNkZWZpbmUgdGVzdF9jYV9wd2RfZWMgbWJlZHRsc190ZXN0X2NhX3B3ZF9lYworI2RlZmluZSB0ZXN0X2NhX3B3ZF9yc2EgbWJlZHRsc190ZXN0X2NhX3B3ZF9yc2EKKyNkZWZpbmUgdGVzdF9jbGlfY3J0IG1iZWR0bHNfdGVzdF9jbGlfY3J0CisjZGVmaW5lIHRlc3RfY2xpX2NydF9lYyBtYmVkdGxzX3Rlc3RfY2xpX2NydF9lYworI2RlZmluZSB0ZXN0X2NsaV9jcnRfcnNhIG1iZWR0bHNfdGVzdF9jbGlfY3J0X3JzYQorI2RlZmluZSB0ZXN0X2NsaV9rZXkgbWJlZHRsc190ZXN0X2NsaV9rZXkKKyNkZWZpbmUgdGVzdF9jbGlfa2V5X2VjIG1iZWR0bHNfdGVzdF9jbGlfa2V5X2VjCisjZGVmaW5lIHRlc3RfY2xpX2tleV9yc2EgbWJlZHRsc190ZXN0X2NsaV9rZXlfcnNhCisjZGVmaW5lIHRlc3RfZGhtX3BhcmFtcyBtYmVkdGxzX3Rlc3RfZGhtX3BhcmFtcworI2RlZmluZSB0ZXN0X3Nydl9jcnQgbWJlZHRsc190ZXN0X3Nydl9jcnQKKyNkZWZpbmUgdGVzdF9zcnZfY3J0X2VjIG1iZWR0bHNfdGVzdF9zcnZfY3J0X2VjCisjZGVmaW5lIHRlc3Rfc3J2X2NydF9yc2EgbWJlZHRsc190ZXN0X3Nydl9jcnRfcnNhCisjZGVmaW5lIHRlc3Rfc3J2X2tleSBtYmVkdGxzX3Rlc3Rfc3J2X2tleQorI2RlZmluZSB0ZXN0X3Nydl9rZXlfZWMgbWJlZHRsc190ZXN0X3Nydl9rZXlfZWMKKyNkZWZpbmUgdGVzdF9zcnZfa2V5X3JzYSBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9yc2EKKyNkZWZpbmUgdGhyZWFkaW5nX211dGV4X3QgbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdAorI2RlZmluZSB0aHJlYWRpbmdfc2V0X2FsdCBtYmVkdGxzX3RocmVhZGluZ19zZXRfYWx0CisjZGVmaW5lIHRpbWluZ19zZWxmX3Rlc3QgbWJlZHRsc190aW1pbmdfc2VsZl90ZXN0CisjZGVmaW5lIHZlcnNpb25fY2hlY2tfZmVhdHVyZSBtYmVkdGxzX3ZlcnNpb25fY2hlY2tfZmVhdHVyZQorI2RlZmluZSB2ZXJzaW9uX2dldF9udW1iZXIgbWJlZHRsc192ZXJzaW9uX2dldF9udW1iZXIKKyNkZWZpbmUgdmVyc2lvbl9nZXRfc3RyaW5nIG1iZWR0bHNfdmVyc2lvbl9nZXRfc3RyaW5nCisjZGVmaW5lIHZlcnNpb25fZ2V0X3N0cmluZ19mdWxsIG1iZWR0bHNfdmVyc2lvbl9nZXRfc3RyaW5nX2Z1bGwKKyNkZWZpbmUgeDUwOV9iaXRzdHJpbmcgbWJlZHRsc194NTA5X2JpdHN0cmluZworI2RlZmluZSB4NTA5X2J1ZiBtYmVkdGxzX3g1MDlfYnVmCisjZGVmaW5lIHg1MDlfY3JsIG1iZWR0bHNfeDUwOV9jcmwKKyNkZWZpbmUgeDUwOV9jcmxfZW50cnkgbWJlZHRsc194NTA5X2NybF9lbnRyeQorI2RlZmluZSB4NTA5X2NybF9mcmVlIG1iZWR0bHNfeDUwOV9jcmxfZnJlZQorI2RlZmluZSB4NTA5X2NybF9pbmZvIG1iZWR0bHNfeDUwOV9jcmxfaW5mbworI2RlZmluZSB4NTA5X2NybF9pbml0IG1iZWR0bHNfeDUwOV9jcmxfaW5pdAorI2RlZmluZSB4NTA5X2NybF9wYXJzZSBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlCisjZGVmaW5lIHg1MDlfY3JsX3BhcnNlX2RlciBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2RlcgorI2RlZmluZSB4NTA5X2NybF9wYXJzZV9maWxlIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZmlsZQorI2RlZmluZSB4NTA5X2NydCBtYmVkdGxzX3g1MDlfY3J0CisjZGVmaW5lIHg1MDlfY3J0X2NoZWNrX2V4dGVuZGVkX2tleV91c2FnZSBtYmVkdGxzX3g1MDlfY3J0X2NoZWNrX2V4dGVuZGVkX2tleV91c2FnZQorI2RlZmluZSB4NTA5X2NydF9jaGVja19rZXlfdXNhZ2UgbWJlZHRsc194NTA5X2NydF9jaGVja19rZXlfdXNhZ2UKKyNkZWZpbmUgeDUwOV9jcnRfZnJlZSBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUKKyNkZWZpbmUgeDUwOV9jcnRfaW5mbyBtYmVkdGxzX3g1MDlfY3J0X2luZm8KKyNkZWZpbmUgeDUwOV9jcnRfaW5pdCBtYmVkdGxzX3g1MDlfY3J0X2luaXQKKyNkZWZpbmUgeDUwOV9jcnRfcGFyc2UgbWJlZHRsc194NTA5X2NydF9wYXJzZQorI2RlZmluZSB4NTA5X2NydF9wYXJzZV9kZXIgbWJlZHRsc194NTA5X2NydF9wYXJzZV9kZXIKKyNkZWZpbmUgeDUwOV9jcnRfcGFyc2VfZmlsZSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUKKyNkZWZpbmUgeDUwOV9jcnRfcGFyc2VfcGF0aCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX3BhdGgKKyNkZWZpbmUgeDUwOV9jcnRfcmV2b2tlZCBtYmVkdGxzX3g1MDlfY3J0X2lzX3Jldm9rZWQKKyNkZWZpbmUgeDUwOV9jcnRfdmVyaWZ5IG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5CisjZGVmaW5lIHg1MDlfY3NyIG1iZWR0bHNfeDUwOV9jc3IKKyNkZWZpbmUgeDUwOV9jc3JfZnJlZSBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUKKyNkZWZpbmUgeDUwOV9jc3JfaW5mbyBtYmVkdGxzX3g1MDlfY3NyX2luZm8KKyNkZWZpbmUgeDUwOV9jc3JfaW5pdCBtYmVkdGxzX3g1MDlfY3NyX2luaXQKKyNkZWZpbmUgeDUwOV9jc3JfcGFyc2UgbWJlZHRsc194NTA5X2Nzcl9wYXJzZQorI2RlZmluZSB4NTA5X2Nzcl9wYXJzZV9kZXIgbWJlZHRsc194NTA5X2Nzcl9wYXJzZV9kZXIKKyNkZWZpbmUgeDUwOV9jc3JfcGFyc2VfZmlsZSBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlX2ZpbGUKKyNkZWZpbmUgeDUwOV9kbl9nZXRzIG1iZWR0bHNfeDUwOV9kbl9nZXRzCisjZGVmaW5lIHg1MDlfZ2V0X2FsZyBtYmVkdGxzX3g1MDlfZ2V0X2FsZworI2RlZmluZSB4NTA5X2dldF9hbGdfbnVsbCBtYmVkdGxzX3g1MDlfZ2V0X2FsZ19udWxsCisjZGVmaW5lIHg1MDlfZ2V0X2V4dCBtYmVkdGxzX3g1MDlfZ2V0X2V4dAorI2RlZmluZSB4NTA5X2dldF9uYW1lIG1iZWR0bHNfeDUwOV9nZXRfbmFtZQorI2RlZmluZSB4NTA5X2dldF9yc2Fzc2FfcHNzX3BhcmFtcyBtYmVkdGxzX3g1MDlfZ2V0X3JzYXNzYV9wc3NfcGFyYW1zCisjZGVmaW5lIHg1MDlfZ2V0X3NlcmlhbCBtYmVkdGxzX3g1MDlfZ2V0X3NlcmlhbAorI2RlZmluZSB4NTA5X2dldF9zaWcgbWJlZHRsc194NTA5X2dldF9zaWcKKyNkZWZpbmUgeDUwOV9nZXRfc2lnX2FsZyBtYmVkdGxzX3g1MDlfZ2V0X3NpZ19hbGcKKyNkZWZpbmUgeDUwOV9nZXRfdGltZSBtYmVkdGxzX3g1MDlfZ2V0X3RpbWUKKyNkZWZpbmUgeDUwOV9rZXlfc2l6ZV9oZWxwZXIgbWJlZHRsc194NTA5X2tleV9zaXplX2hlbHBlcgorI2RlZmluZSB4NTA5X25hbWUgbWJlZHRsc194NTA5X25hbWUKKyNkZWZpbmUgeDUwOV9vaWRfZ2V0X2Rlc2NyaXB0aW9uIG1iZWR0bHNfeDUwOV9vaWRfZ2V0X2Rlc2NyaXB0aW9uCisjZGVmaW5lIHg1MDlfb2lkX2dldF9udW1lcmljX3N0cmluZyBtYmVkdGxzX3g1MDlfb2lkX2dldF9udW1lcmljX3N0cmluZworI2RlZmluZSB4NTA5X3NlbGZfdGVzdCBtYmVkdGxzX3g1MDlfc2VsZl90ZXN0CisjZGVmaW5lIHg1MDlfc2VxdWVuY2UgbWJlZHRsc194NTA5X3NlcXVlbmNlCisjZGVmaW5lIHg1MDlfc2VyaWFsX2dldHMgbWJlZHRsc194NTA5X3NlcmlhbF9nZXRzCisjZGVmaW5lIHg1MDlfc2V0X2V4dGVuc2lvbiBtYmVkdGxzX3g1MDlfc2V0X2V4dGVuc2lvbgorI2RlZmluZSB4NTA5X3NpZ19hbGdfZ2V0cyBtYmVkdGxzX3g1MDlfc2lnX2FsZ19nZXRzCisjZGVmaW5lIHg1MDlfc3RyaW5nX3RvX25hbWVzIG1iZWR0bHNfeDUwOV9zdHJpbmdfdG9fbmFtZXMKKyNkZWZpbmUgeDUwOV90aW1lIG1iZWR0bHNfeDUwOV90aW1lCisjZGVmaW5lIHg1MDlfdGltZV9leHBpcmVkIG1iZWR0bHNfeDUwOV90aW1lX2lzX3Bhc3QKKyNkZWZpbmUgeDUwOV90aW1lX2Z1dHVyZSBtYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmUKKyNkZWZpbmUgeDUwOV93cml0ZV9leHRlbnNpb25zIG1iZWR0bHNfeDUwOV93cml0ZV9leHRlbnNpb25zCisjZGVmaW5lIHg1MDlfd3JpdGVfbmFtZXMgbWJlZHRsc194NTA5X3dyaXRlX25hbWVzCisjZGVmaW5lIHg1MDlfd3JpdGVfc2lnIG1iZWR0bHNfeDUwOV93cml0ZV9zaWcKKyNkZWZpbmUgeDUwOXdyaXRlX2NlcnQgbWJlZHRsc194NTA5d3JpdGVfY2VydAorI2RlZmluZSB4NTA5d3JpdGVfY3J0X2RlciBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfZGVyCisjZGVmaW5lIHg1MDl3cml0ZV9jcnRfZnJlZSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfZnJlZQorI2RlZmluZSB4NTA5d3JpdGVfY3J0X2luaXQgbWJlZHRsc194NTA5d3JpdGVfY3J0X2luaXQKKyNkZWZpbmUgeDUwOXdyaXRlX2NydF9wZW0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3BlbQorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF9hdXRob3JpdHlfa2V5X2lkZW50aWZpZXIgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9hdXRob3JpdHlfa2V5X2lkZW50aWZpZXIKKyNkZWZpbmUgeDUwOXdyaXRlX2NydF9zZXRfYmFzaWNfY29uc3RyYWludHMgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9iYXNpY19jb25zdHJhaW50cworI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF9leHRlbnNpb24gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9leHRlbnNpb24KKyNkZWZpbmUgeDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX2tleSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9rZXkKKyNkZWZpbmUgeDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX25hbWUgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9pc3N1ZXJfbmFtZQorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF9rZXlfdXNhZ2UgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9rZXlfdXNhZ2UKKyNkZWZpbmUgeDUwOXdyaXRlX2NydF9zZXRfbWRfYWxnIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfbWRfYWxnCisjZGVmaW5lIHg1MDl3cml0ZV9jcnRfc2V0X25zX2NlcnRfdHlwZSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X25zX2NlcnRfdHlwZQorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF9zZXJpYWwgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zZXJpYWwKKyNkZWZpbmUgeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXkgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X2tleQorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X2tleV9pZGVudGlmaWVyIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXlfaWRlbnRpZmllcgorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X25hbWUgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X25hbWUKKyNkZWZpbmUgeDUwOXdyaXRlX2NydF9zZXRfdmFsaWRpdHkgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF92YWxpZGl0eQorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF92ZXJzaW9uIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfdmVyc2lvbgorI2RlZmluZSB4NTA5d3JpdGVfY3NyIG1iZWR0bHNfeDUwOXdyaXRlX2NzcgorI2RlZmluZSB4NTA5d3JpdGVfY3NyX2RlciBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfZGVyCisjZGVmaW5lIHg1MDl3cml0ZV9jc3JfZnJlZSBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfZnJlZQorI2RlZmluZSB4NTA5d3JpdGVfY3NyX2luaXQgbWJlZHRsc194NTA5d3JpdGVfY3NyX2luaXQKKyNkZWZpbmUgeDUwOXdyaXRlX2Nzcl9wZW0gbWJlZHRsc194NTA5d3JpdGVfY3NyX3BlbQorI2RlZmluZSB4NTA5d3JpdGVfY3NyX3NldF9leHRlbnNpb24gbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9leHRlbnNpb24KKyNkZWZpbmUgeDUwOXdyaXRlX2Nzcl9zZXRfa2V5IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfa2V5CisjZGVmaW5lIHg1MDl3cml0ZV9jc3Jfc2V0X2tleV91c2FnZSBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2tleV91c2FnZQorI2RlZmluZSB4NTA5d3JpdGVfY3NyX3NldF9tZF9hbGcgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9tZF9hbGcKKyNkZWZpbmUgeDUwOXdyaXRlX2Nzcl9zZXRfbnNfY2VydF90eXBlIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfbnNfY2VydF90eXBlCisjZGVmaW5lIHg1MDl3cml0ZV9jc3Jfc2V0X3N1YmplY3RfbmFtZSBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X3N1YmplY3RfbmFtZQorI2RlZmluZSB4dGVhX2NvbnRleHQgbWJlZHRsc194dGVhX2NvbnRleHQKKyNkZWZpbmUgeHRlYV9jcnlwdF9jYmMgbWJlZHRsc194dGVhX2NyeXB0X2NiYworI2RlZmluZSB4dGVhX2NyeXB0X2VjYiBtYmVkdGxzX3h0ZWFfY3J5cHRfZWNiCisjZGVmaW5lIHh0ZWFfZnJlZSBtYmVkdGxzX3h0ZWFfZnJlZQorI2RlZmluZSB4dGVhX2luaXQgbWJlZHRsc194dGVhX2luaXQKKyNkZWZpbmUgeHRlYV9zZWxmX3Rlc3QgbWJlZHRsc194dGVhX3NlbGZfdGVzdAorI2RlZmluZSB4dGVhX3NldHVwIG1iZWR0bHNfeHRlYV9zZXR1cAorCisjZW5kaWYgLyogY29tcGF0LTEuMy5oICovCisjZW5kaWYgLyogTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY29uZmlnLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYzljNzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oCkBAIC0wLDAgKzEsMjYwMCBAQAorLyoqCisgKiBcZmlsZSBjb25maWcuaAorICoKKyAqIFxicmllZiBDb25maWd1cmF0aW9uIG9wdGlvbnMgKHNldCBvZiBkZWZpbmVzKQorICoKKyAqICBUaGlzIHNldCBvZiBjb21waWxlLXRpbWUgb3B0aW9ucyBtYXkgYmUgdXNlZCB0byBlbmFibGUKKyAqICBvciBkaXNhYmxlIGZlYXR1cmVzIHNlbGVjdGl2ZWx5LCBhbmQgcmVkdWNlIHRoZSBnbG9iYWwKKyAqICBtZW1vcnkgZm9vdHByaW50LgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWZuZGVmIE1CRURUTFNfQ09ORklHX0gKKyNkZWZpbmUgTUJFRFRMU19DT05GSUdfSAorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFKQorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUgMQorI2VuZGlmCisKKy8qKgorICogXG5hbWUgU0VDVElPTjogU3lzdGVtIHN1cHBvcnQKKyAqCisgKiBUaGlzIHNlY3Rpb24gc2V0cyBzeXN0ZW0gc3BlY2lmaWMgc2V0dGluZ3MuCisgKiBceworICovCisKKy8qKgorICogXGRlZiBNQkVEVExTX0hBVkVfQVNNCisgKgorICogVGhlIGNvbXBpbGVyIGhhcyBzdXBwb3J0IGZvciBhc20oKS4KKyAqCisgKiBSZXF1aXJlcyBzdXBwb3J0IGZvciBhc20oKSBpbiBjb21waWxlci4KKyAqCisgKiBVc2VkIGluOgorICogICAgICBsaWJyYXJ5L3RpbWluZy5jCisgKiAgICAgIGxpYnJhcnkvcGFkbG9jay5jCisgKiAgICAgIGluY2x1ZGUvbWJlZHRscy9ibl9tdWwuaAorICoKKyAqIENvbW1lbnQgdG8gZGlzYWJsZSB0aGUgdXNlIG9mIGFzc2VtYmx5IGNvZGUuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19IQVZFX0FTTQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19IQVZFX1NTRTIKKyAqCisgKiBDUFUgc3VwcG9ydHMgU1NFMiBpbnN0cnVjdGlvbiBzZXQuCisgKgorICogVW5jb21tZW50IGlmIHRoZSBDUFUgc3VwcG9ydHMgU1NFMiAoSUEtMzIgc3BlY2lmaWMpLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19IQVZFX1NTRTIKKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRV9USU1FCisgKgorICogU3lzdGVtIGhhcyB0aW1lLmggYW5kIHRpbWUoKS4KKyAqIFRoZSB0aW1lIGRvZXMgbm90IG5lZWQgdG8gYmUgY29ycmVjdCwgb25seSB0aW1lIGRpZmZlcmVuY2VzIGFyZSB1c2VkLAorICogYnkgY29udHJhc3Qgd2l0aCBNQkVEVExTX0hBVkVfVElNRV9EQVRFCisgKgorICogRGVmaW5pbmcgTUJFRFRMU19IQVZFX1RJTUUgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQsCisgKiBNQkVEVExTX1BMQVRGT1JNX1RJTUVfTUFDUk8sIE1CRURUTFNfUExBVEZPUk1fVElNRV9UWVBFX01BQ1JPIGFuZAorICogTUJFRFRMU19QTEFURk9STV9TVERfVElNRS4KKyAqCisgKiBDb21tZW50IGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgdGltZSBmdW5jdGlvbnMKKyAqLworI2RlZmluZSBNQkVEVExTX0hBVkVfVElNRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19IQVZFX1RJTUVfREFURQorICoKKyAqIFN5c3RlbSBoYXMgdGltZS5oIGFuZCB0aW1lKCksIGdtdGltZSgpIGFuZCB0aGUgY2xvY2sgaXMgY29ycmVjdC4KKyAqIFRoZSB0aW1lIG5lZWRzIHRvIGJlIGNvcnJlY3QgKG5vdCBuZWNlc2FyaWx5IHZlcnkgYWNjdXJhdGUsIGJ1dCBhdCBsZWFzdAorICogdGhlIGRhdGUgc2hvdWxkIGJlIGNvcnJlY3QpLiBUaGlzIGlzIHVzZWQgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBwZXJpb2Qgb2YKKyAqIFguNTA5IGNlcnRpZmljYXRlcy4KKyAqCisgKiBDb21tZW50IGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgYSBjb3JyZWN0IGNsb2NrLgorICovCisjZGVmaW5lIE1CRURUTFNfSEFWRV9USU1FX0RBVEUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZCisgKgorICogRW5hYmxlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBsYXllci4KKyAqCisgKiBCeSBkZWZhdWx0IG1iZWQgVExTIHVzZXMgdGhlIHN5c3RlbS1wcm92aWRlZCBjYWxsb2MoKSBhbmQgZnJlZSgpLgorICogVGhpcyBhbGxvd3MgZGlmZmVyZW50IGFsbG9jYXRvcnMgKHNlbGYtaW1wbGVtZW50ZWQgb3IgcHJvdmlkZWQpIHRvIGJlCisgKiBwcm92aWRlZCB0byB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIuCisgKgorICogRW5hYmxpbmcgTUJFRFRMU19QTEFURk9STV9NRU1PUlkgd2l0aG91dCB0aGUKKyAqIE1CRURUTFNfUExBVEZPUk1fe0ZSRUUsQ0FMTE9DfV9NQUNST3Mgd2lsbCBwcm92aWRlCisgKiAibWJlZHRsc19wbGF0Zm9ybV9zZXRfY2FsbG9jX2ZyZWUoKSIgYWxsb3dpbmcgeW91IHRvIHNldCBhbiBhbHRlcm5hdGl2ZSBjYWxsb2MoKSBhbmQKKyAqIGZyZWUoKSBmdW5jdGlvbiBwb2ludGVyIGF0IHJ1bnRpbWUuCisgKgorICogRW5hYmxpbmcgTUJFRFRMU19QTEFURk9STV9NRU1PUlkgYW5kIHNwZWNpZnlpbmcKKyAqIE1CRURUTFNfUExBVEZPUk1fe0NBTExPQyxGUkVFfV9NQUNST3Mgd2lsbCBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0aGUKKyAqIGFsdGVybmF0ZSBmdW5jdGlvbiBhdCBjb21waWxlIHRpbWUuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUExBVEZPUk1fQworICoKKyAqIEVuYWJsZSB0aGlzIGxheWVyIHRvIGFsbG93IHVzZSBvZiBhbHRlcm5hdGl2ZSBtZW1vcnkgYWxsb2NhdG9ycy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMKKyAqCisgKiBEbyBub3QgYXNzaWduIHN0YW5kYXJkIGZ1bmN0aW9ucyBpbiB0aGUgcGxhdGZvcm0gbGF5ZXIgKGUuZy4gY2FsbG9jKCkgdG8KKyAqIE1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQyBhbmQgcHJpbnRmKCkgdG8gTUJFRFRMU19QTEFURk9STV9TVERfUFJJTlRGKQorICoKKyAqIFRoaXMgbWFrZXMgc3VyZSB0aGVyZSBhcmUgbm8gbGlua2luZyBlcnJvcnMgb24gcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQKKyAqIHRoZXNlIGZ1bmN0aW9ucy4gWW91IHdpbGwgSEFWRSB0byBwcm92aWRlIGFsdGVybmF0aXZlcywgZWl0aGVyIGF0IHJ1bnRpbWUKKyAqIHZpYSB0aGUgcGxhdGZvcm1fc2V0X3h4eCgpIGZ1bmN0aW9ucyBvciBhdCBjb21waWxlIHRpbWUgYnkgc2V0dGluZworICogdGhlIE1CRURUTFNfUExBVEZPUk1fU1REX1hYWCBkZWZpbmVzLCBvciBlbmFibGluZyBhCisgKiBNQkVEVExTX1BMQVRGT1JNX1hYWF9NQUNSTy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19QTEFURk9STV9DCisgKgorICogVW5jb21tZW50IHRvIHByZXZlbnQgZGVmYXVsdCBhc3NpZ25tZW50IG9mIHN0YW5kYXJkIGZ1bmN0aW9ucyBpbiB0aGUKKyAqIHBsYXRmb3JtIGxheWVyLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUCisgKgorICogTUJFRFRMU19QTEFURk9STV9YWFhfQUxUOiBVbmNvbW1lbnQgYSBtYWNybyB0byBsZXQgbWJlZCBUTFMgc3VwcG9ydCB0aGUKKyAqIGZ1bmN0aW9uIGluIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBsYXllci4KKyAqCisgKiBFeGFtcGxlOiBJbiBjYXNlIHlvdSB1bmNvbW1lbnQgTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxULCBtYmVkIFRMUyB3aWxsCisgKiBwcm92aWRlIGEgZnVuY3Rpb24gIm1iZWR0bHNfcGxhdGZvcm1fc2V0X3ByaW50ZigpIiB0aGF0IGFsbG93cyB5b3UgdG8gc2V0IGFuCisgKiBhbHRlcm5hdGl2ZSBwcmludGYgZnVuY3Rpb24gcG9pbnRlci4KKyAqCisgKiBBbGwgdGhlc2UgZGVmaW5lIHJlcXVpcmUgTUJFRFRMU19QTEFURk9STV9DIHRvIGJlIGRlZmluZWQhCisgKgorICogXG5vdGUgTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQgaXMgcmVxdWlyZWQgb24gV2luZG93czsKKyAqIGl0IHdpbGwgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IGJ5IGNoZWNrX2NvbmZpZy5oCisgKgorICogXHdhcm5pbmcgTUJFRFRMU19QTEFURk9STV9YWFhfQUxUIGNhbm5vdCBiZSBkZWZpbmVkIGF0IHRoZSBzYW1lIHRpbWUgYXMKKyAqIE1CRURUTFNfUExBVEZPUk1fWFhYX01BQ1JPIQorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUIHJlcXVpcmVzIE1CRURUTFNfSEFWRV9USU1FCisgKgorICogVW5jb21tZW50IGEgbWFjcm8gdG8gZW5hYmxlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBzcGVjaWZpYyBiYXNlCisgKiBwbGF0Zm9ybSBmdW5jdGlvbgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9FWElUX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUCisKKy8qKgorICogXGRlZiBNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORworICoKKyAqIE1hcmsgZGVwcmVjYXRlZCBmdW5jdGlvbnMgc28gdGhhdCB0aGV5IGdlbmVyYXRlIGEgd2FybmluZyBpZiB1c2VkLgorICogRnVuY3Rpb25zIGRlcHJlY2F0ZWQgaW4gb25lIHZlcnNpb24gd2lsbCB1c3VhbGx5IGJlIHJlbW92ZWQgaW4gdGhlIG5leHQKKyAqIHZlcnNpb24uIFlvdSBjYW4gZW5hYmxlIHRoaXMgdG8gaGVscCB5b3UgcHJlcGFyZSB0aGUgdHJhbnNpdGlvbiB0byBhIG5ldworICogbWFqb3IgdmVyc2lvbiBieSBtYWtpbmcgc3VyZSB5b3VyIGNvZGUgaXMgbm90IHVzaW5nIHRoZXNlIGZ1bmN0aW9ucy4KKyAqCisgKiBUaGlzIG9ubHkgd29ya3Mgd2l0aCBHQ0MgYW5kIENsYW5nLiBXaXRoIG90aGVyIGNvbXBpbGVycywgeW91IG1heSB3YW50IHRvCisgKiB1c2UgTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKKyAqCisgKiBVbmNvbW1lbnQgdG8gZ2V0IHdhcm5pbmdzIG9uIHVzaW5nIGRlcHJlY2F0ZWQgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVECisgKgorICogUmVtb3ZlIGRlcHJlY2F0ZWQgZnVuY3Rpb25zIHNvIHRoYXQgdGhleSBnZW5lcmF0ZSBhbiBlcnJvciBpZiB1c2VkLgorICogRnVuY3Rpb25zIGRlcHJlY2F0ZWQgaW4gb25lIHZlcnNpb24gd2lsbCB1c3VhbGx5IGJlIHJlbW92ZWQgaW4gdGhlIG5leHQKKyAqIHZlcnNpb24uIFlvdSBjYW4gZW5hYmxlIHRoaXMgdG8gaGVscCB5b3UgcHJlcGFyZSB0aGUgdHJhbnNpdGlvbiB0byBhIG5ldworICogbWFqb3IgdmVyc2lvbiBieSBtYWtpbmcgc3VyZSB5b3VyIGNvZGUgaXMgbm90IHVzaW5nIHRoZXNlIGZ1bmN0aW9ucy4KKyAqCisgKiBVbmNvbW1lbnQgdG8gZ2V0IGVycm9ycyBvbiB1c2luZyBkZXByZWNhdGVkIGZ1bmN0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVECisKKy8qIFx9IG5hbWUgU0VDVElPTjogU3lzdGVtIHN1cHBvcnQgKi8KKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBtYmVkIFRMUyBmZWF0dXJlIHN1cHBvcnQKKyAqCisgKiBUaGlzIHNlY3Rpb24gc2V0cyBzdXBwb3J0IGZvciBmZWF0dXJlcyB0aGF0IGFyZSBvciBhcmUgbm90IG5lZWRlZAorICogd2l0aGluIHRoZSBtb2R1bGVzIHRoYXQgYXJlIGVuYWJsZWQuCisgKiBceworICovCisKKy8qKgorICogXGRlZiBNQkVEVExTX1RJTUlOR19BTFQKKyAqCisgKiBVbmNvbW1lbnQgdG8gcHJvdmlkZSB5b3VyIG93biBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gZm9yIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jaygpLAorICogbWJlZHRsc190aW1pbmdfZ2V0X3RpbWVyKCksIG1iZWR0bHNfc2V0X2FsYXJtKCksIG1iZWR0bHNfc2V0L2dldF9kZWxheSgpCisgKgorICogT25seSB3b3JrcyBpZiB5b3UgaGF2ZSBNQkVEVExTX1RJTUlOR19DIGVuYWJsZWQuCisgKgorICogWW91IHdpbGwgbmVlZCB0byBwcm92aWRlIGEgaGVhZGVyICJ0aW1pbmdfYWx0LmgiIGFuZCBhbiBpbXBsZW1lbnRhdGlvbiBhdAorICogY29tcGlsZSB0aW1lLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19USU1JTkdfQUxUCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FFU19BTFQKKyAqCisgKiBNQkVEVExTX19NT0RVTEVfTkFNRV9fQUxUOiBVbmNvbW1lbnQgYSBtYWNybyB0byBsZXQgbWJlZCBUTFMgdXNlIHlvdXIKKyAqIGFsdGVybmF0ZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIGEgc3ltbWV0cmljIGNyeXB0byBvciBoYXNoIG1vZHVsZSAoZS5nLgorICogcGxhdGZvcm0gc3BlY2lmaWMgYXNzZW1ibHkgb3B0aW1pemVkIGltcGxlbWVudGF0aW9ucykuIEtlZXAgaW4gbWluZCB0aGF0CisgKiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlcyBzaG91bGQgcmVtYWluIHRoZSBzYW1lLgorICoKKyAqIFRoaXMgcmVwbGFjZXMgdGhlIHdob2xlIG1vZHVsZS4gSWYgeW91IG9ubHkgd2FudCB0byByZXBsYWNlIG9uZSBvZiB0aGUKKyAqIGZ1bmN0aW9ucywgdXNlIG9uZSBvZiB0aGUgTUJFRFRMU19fRlVOQ1RJT05fTkFNRV9fQUxUIGZsYWdzLgorICoKKyAqIEV4YW1wbGU6IEluIGNhc2UgeW91IHVuY29tbWVudCBNQkVEVExTX0FFU19BTFQsIG1iZWQgVExTIHdpbGwgbm8gbG9uZ2VyCisgKiBwcm92aWRlIHRoZSAic3RydWN0IG1iZWR0bHNfYWVzX2NvbnRleHQiIGRlZmluaXRpb24gYW5kIG9taXQgdGhlIGJhc2UgZnVuY3Rpb24KKyAqIGRlY2xhcmF0aW9ucyBhbmQgaW1wbGVtZW50YXRpb25zLiAiYWVzX2FsdC5oIiB3aWxsIGJlIGluY2x1ZGVkIGZyb20KKyAqICJhZXMuaCIgdG8gaW5jbHVkZSB0aGUgbmV3IGZ1bmN0aW9uIGRlZmluaXRpb25zLgorICoKKyAqIFVuY29tbWVudCBhIG1hY3JvIHRvIGVuYWJsZSBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIG1vZHVsZS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQUVTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQVJDNF9BTFQKKy8vI2RlZmluZSBNQkVEVExTX0JMT1dGSVNIX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQ0FNRUxMSUFfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19ERVNfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19YVEVBX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQyX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQ0X0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQ1X0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUklQRU1EMTYwX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBMV9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1NIQTUxMl9BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUQyX1BST0NFU1NfQUxUCisgKgorICogTUJFRFRMU19fRlVOQ1RJT05fTkFNRV9fQUxUOiBVbmNvbW1lbnQgYSBtYWNybyB0byBsZXQgbWJlZCBUTFMgdXNlIHlvdQorICogYWx0ZXJuYXRlIGNvcmUgaW1wbGVtZW50YXRpb24gb2Ygc3ltbWV0cmljIGNyeXB0byBvciBoYXNoIGZ1bmN0aW9uLiBLZWVwIGluCisgKiBtaW5kIHRoYXQgZnVuY3Rpb24gcHJvdG90eXBlcyBzaG91bGQgcmVtYWluIHRoZSBzYW1lLgorICoKKyAqIFRoaXMgcmVwbGFjZXMgb25seSBvbmUgZnVuY3Rpb24uIFRoZSBoZWFkZXIgZmlsZSBmcm9tIG1iZWQgVExTIGlzIHN0aWxsCisgKiB1c2VkLCBpbiBjb250cmFzdCB0byB0aGUgTUJFRFRMU19fTU9EVUxFX05BTUVfX0FMVCBmbGFncy4KKyAqCisgKiBFeGFtcGxlOiBJbiBjYXNlIHlvdSB1bmNvbW1lbnQgTUJFRFRMU19TSEEyNTZfUFJPQ0VTU19BTFQsIG1iZWQgVExTIHdpbGwKKyAqIG5vIGxvbmdlciBwcm92aWRlIHRoZSBtYmVkdGxzX3NoYTFfcHJvY2VzcygpIGZ1bmN0aW9uLCBidXQgaXQgd2lsbCBzdGlsbCBwcm92aWRlCisgKiB0aGUgb3RoZXIgZnVuY3Rpb24gKHVzaW5nIHlvdXIgbWJlZHRsc19zaGExX3Byb2Nlc3MoKSBmdW5jdGlvbikgYW5kIHRoZSBkZWZpbml0aW9uCisgKiBvZiBtYmVkdGxzX3NoYTFfY29udGV4dCwgc28geW91ciBpbXBsZW1lbnRhdGlvbiBvZiBtYmVkdGxzX3NoYTFfcHJvY2VzcyBtdXN0IGJlIGNvbXBhdGlibGUKKyAqIHdpdGggdGhpcyBkZWZpbml0aW9uLgorICoKKyAqIE5vdGU6IGlmIHlvdSB1c2UgdGhlIEFFU194eHhfQUxUIG1hY3JvcywgdGhlbiBpcyBpcyByZWNvbW1lbmRlZCB0byBhbHNvIHNldAorICogTUJFRFRMU19BRVNfUk9NX1RBQkxFUyBpbiBvcmRlciB0byBoZWxwIHRoZSBsaW5rZXIgZ2FyYmFnZS1jb2xsZWN0IHRoZSBBRVMKKyAqIHRhYmxlcy4KKyAqCisgKiBVbmNvbW1lbnQgYSBtYWNybyB0byBlbmFibGUgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgKiBmdW5jdGlvbi4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUQyX1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19NRDRfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX01ENV9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUklQRU1EMTYwX1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19TSEExX1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19TSEEyNTZfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX1NIQTUxMl9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfREVTX1NFVEtFWV9BTFQKKy8vI2RlZmluZSBNQkVEVExTX0RFU19DUllQVF9FQ0JfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19ERVMzX0NSWVBUX0VDQl9BTFQKKy8vI2RlZmluZSBNQkVEVExTX0FFU19TRVRLRVlfRU5DX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQUVTX1NFVEtFWV9ERUNfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19BRVNfRU5DUllQVF9BTFQKKy8vI2RlZmluZSBNQkVEVExTX0FFU19ERUNSWVBUX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19URVNUX05VTExfRU5UUk9QWQorICoKKyAqIEVuYWJsZXMgdGVzdGluZyBhbmQgdXNlIG9mIG1iZWQgVExTIHdpdGhvdXQgYW55IGNvbmZpZ3VyZWQgZW50cm9weSBzb3VyY2VzLgorICogVGhpcyBwZXJtaXRzIHVzZSBvZiB0aGUgbGlicmFyeSBvbiBwbGF0Zm9ybXMgYmVmb3JlIGFuIGVudHJvcHkgc291cmNlIGhhcworICogYmVlbiBpbnRlZ3JhdGVkIChzZWUgZm9yIGV4YW1wbGUgdGhlIE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQgb3IgdGhlCisgKiBNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCBzd2l0Y2hlcykuCisgKgorICogV0FSTklORyEgVGhpcyBzd2l0Y2ggTVVTVCBiZSBkaXNhYmxlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcywgYW5kIGlzIHN1aXRhYmxlCisgKiBvbmx5IGZvciBkZXZlbG9wbWVudC4KKyAqIEVuYWJsaW5nIHRoZSBzd2l0Y2ggbmVnYXRlcyBhbnkgc2VjdXJpdHkgcHJvdmlkZWQgYnkgdGhlIGxpYnJhcnkuCisgKgorICogUmVxdWlyZXMgTUJFRFRMU19FTlRST1BZX0MsIE1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMKKyAqCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gbGV0IG1iZWQgVExTIHVzZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiBhCisgKiBoYXJkd2FyZSBlbnRyb3B5IGNvbGxlY3Rvci4KKyAqCisgKiBZb3VyIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIFxjIG1iZWR0bHNfaGFyZHdhcmVfcG9sbCgpLCBoYXZlIHRoZSBzYW1lCisgKiBwcm90b3R5cGUgYXMgZGVjbGFyZWQgaW4gZW50cm9weV9wb2xsLmgsIGFuZCBhY2NlcHQgTlVMTCBhcyBmaXJzdCBhcmd1bWVudC4KKyAqCisgKiBVbmNvbW1lbnQgdG8gdXNlIHlvdXIgb3duIGhhcmR3YXJlIGVudHJvcHkgY29sbGVjdG9yLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworICoKKyAqIFN0b3JlIHRoZSBBRVMgdGFibGVzIGluIFJPTS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBzdG9yZSB0aGUgQUVTIHRhYmxlcyBpbiBST00uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0FFU19ST01fVEFCTEVTCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NBTUVMTElBX1NNQUxMX01FTU9SWQorICoKKyAqIFVzZSBsZXNzIFJPTSBmb3IgdGhlIENhbWVsbGlhIGltcGxlbWVudGF0aW9uIChzYXZlcyBhYm91dCA3NjggYnl0ZXMpLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIHVzZSBsZXNzIG1lbW9yeSBmb3IgQ2FtZWxsaWEuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NBTUVMTElBX1NNQUxMX01FTU9SWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKKyAqCisgKiBFbmFibGUgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUgKENCQykgZm9yIHN5bW1ldHJpYyBjaXBoZXJzLgorICovCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorICoKKyAqIEVuYWJsZSBDaXBoZXIgRmVlZGJhY2sgbW9kZSAoQ0ZCKSBmb3Igc3ltbWV0cmljIGNpcGhlcnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCisgKgorICogRW5hYmxlIENvdW50ZXIgQmxvY2sgQ2lwaGVyIG1vZGUgKENUUikgZm9yIHN5bW1ldHJpYyBjaXBoZXJzLgorICovCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorICoKKyAqIEVuYWJsZSBOVUxMIGNpcGhlci4KKyAqIFdhcm5pbmc6IE9ubHkgZG8gc28gd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuIFRoaXMgYWxsb3dzIGZvcgorICogZW5jcnlwdGlvbiBvciBjaGFubmVscyB3aXRob3V0IGFueSBzZWN1cml0eSEKKyAqCisgKiBSZXF1aXJlcyBNQkVEVExTX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUyBhcyB3ZWxsIHRvIGVuYWJsZQorICogdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXM6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9OVUxMX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9NRDUKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBlbmFibGUgdGhlIE5VTEwgY2lwaGVyIGFuZCBjaXBoZXJzdWl0ZXMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CisgKgorICogTUJFRFRMU19DSVBIRVJfUEFERElOR19YWFg6IFVuY29tbWVudCBvciBjb21tZW50IG1hY3JvcyB0byBhZGQgc3VwcG9ydCBmb3IKKyAqIHNwZWNpZmljIHBhZGRpbmcgbW9kZXMgaW4gdGhlIGNpcGhlciBsYXllciB3aXRoIGNpcGhlciBtb2RlcyB0aGF0IHN1cHBvcnQKKyAqIHBhZGRpbmcgKGUuZy4gQ0JDKQorICoKKyAqIElmIHlvdSBkaXNhYmxlIGFsbCBwYWRkaW5nIG1vZGVzLCBvbmx5IGZ1bGwgYmxvY2tzIGNhbiBiZSB1c2VkIHdpdGggQ0JDLgorICoKKyAqIEVuYWJsZSBwYWRkaW5nIG1vZGVzIGluIHRoZSBjaXBoZXIgbGF5ZXIuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTCisgKgorICogRW5hYmxlIHdlYWsgY2lwaGVyc3VpdGVzIGluIFNTTCAvIFRMUy4KKyAqIFdhcm5pbmc6IE9ubHkgZG8gc28gd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuIFRoaXMgYWxsb3dzIGZvcgorICogY2hhbm5lbHMgd2l0aCB2aXJ0dWFsbHkgbm8gc2VjdXJpdHkgYXQgYWxsIQorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlczoKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfREVTX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0RFU19DQkNfU0hBCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZW5hYmxlIHdlYWsgY2lwaGVyc3VpdGVzCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMKKyAqCisgKiBSZW1vdmUgUkM0IGNpcGhlcnN1aXRlcyBieSBkZWZhdWx0IGluIFNTTCAvIFRMUy4KKyAqIFRoaXMgZmxhZyByZW1vdmVzIHRoZSBjaXBoZXJzdWl0ZXMgYmFzZWQgb24gUkM0IGZyb20gdGhlIGRlZmF1bHQgbGlzdCBhcworICogcmV0dXJuZWQgYnkgbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoKS4gSG93ZXZlciwgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8KKyAqIGVuYWJsZSAoc29tZSBvZikgdGhlbSB3aXRoIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCkgYnkgaW5jbHVkaW5nIHRoZW0KKyAqIGV4cGxpY2l0bHkuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcmVtb3ZlIFJDNCBjaXBoZXJzdWl0ZXMgYnkgZGVmYXVsdC4KKyAqLworI2RlZmluZSBNQkVEVExTX1JFTU9WRV9BUkM0X0NJUEhFUlNVSVRFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKKyAqCisgKiBNQkVEVExTX0VDUF9YWFhYX0VOQUJMRUQ6IEVuYWJsZXMgc3BlY2lmaWMgY3VydmVzIHdpdGhpbiB0aGUgRWxsaXB0aWMgQ3VydmUKKyAqIG1vZHVsZS4gIEJ5IGRlZmF1bHQgYWxsIHN1cHBvcnRlZCBjdXJ2ZXMgYXJlIGVuYWJsZWQuCisgKgorICogQ29tbWVudCBtYWNyb3MgdG8gZGlzYWJsZSB0aGUgY3VydmUgYW5kIGZ1bmN0aW9ucyBmb3IgaXQKKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNQX05JU1RfT1BUSU0KKyAqCisgKiBFbmFibGUgc3BlY2lmaWMgJ21vZHVsbyBwJyByb3V0aW5lcyBmb3IgZWFjaCBOSVNUIHByaW1lLgorICogRGVwZW5kaW5nIG9uIHRoZSBwcmltZSBhbmQgYXJjaGl0ZWN0dXJlLCBtYWtlcyBvcGVyYXRpb25zIDQgdG8gOCB0aW1lcworICogZmFzdGVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIGN1cnZlLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIE5JU1QgY3VydmVzIG9wdGltaXNhdGlvbi4KKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9OSVNUX09QVElNCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKKyAqCisgKiBFbmFibGUgZGV0ZXJtaW5pc3RpYyBFQ0RTQSAoUkZDIDY5NzkpLgorICogU3RhbmRhcmQgRUNEU0EgaXMgImZyYWdpbGUiIGluIHRoZSBzZW5zZSB0aGF0IGxhY2sgb2YgZW50cm9weSB3aGVuIHNpZ25pbmcKKyAqIG1heSByZXN1bHQgaW4gYSBjb21wcm9taXNlIG9mIHRoZSBsb25nLXRlcm0gc2lnbmluZyBrZXkuIFRoaXMgaXMgYXZvaWRlZCBieQorICogdGhlIGRldGVybWluaXN0aWMgdmFyaWFudC4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19ITUFDX0RSQkdfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIGRldGVybWluaXN0aWMgRUNEU0EuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDCisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgUFNLIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKi8KKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgREhFLVBTSyBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfREhNX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKi8KKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESEUtUFNLIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICovCisjZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIFJTQS1QU0sgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1JTQV9DLCBNQkVEVExTX1BLQ1MxX1YxNSwKKyAqICAgICAgICAgICBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKi8KKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgUlNBLW9ubHkgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1JTQV9DLCBNQkVEVExTX1BLQ1MxX1YxNSwKKyAqICAgICAgICAgICBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfTUQ1CisgKi8KKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgREhFLVJTQSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfREhNX0MsIE1CRURUTFNfUlNBX0MsIE1CRURUTFNfUEtDUzFfVjE1LAorICogICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKi8KKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESEUtUlNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MsIE1CRURUTFNfUlNBX0MsIE1CRURUTFNfUEtDUzFfVjE1LAorICogICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESEUtRUNEU0EgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDREhfQywgTUJFRFRMU19FQ0RTQV9DLCBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MsCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQQorICovCisjZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESC1FQ0RTQSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNESF9DLCBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKi8KKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0RILVJTQSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNESF9DLCBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKi8KKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0pQQUtFIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBcd2FybmluZyBUaGlzIGlzIGN1cnJlbnRseSBleHBlcmltZW50YWwuIEVDIEotUEFLRSBzdXBwb3J0IGlzIGJhc2VkIG9uIHRoZQorICogVGhyZWFkIHYxLjAuMCBzcGVjaWZpY2F0aW9uOyBpbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWNhdGlvbgorICogbWlnaHQgc3RpbGwgaGFwcGVuLiBGb3IgdGhpcyByZWFzb24sIHRoaXMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0pQQUtFX0MKKyAqICAgICAgICAgICBNQkVEVExTX1NIQTI1Nl9DCisgKiAgICAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0pQQUtFX1dJVEhfQUVTXzEyOF9DQ01fOAorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVECisgKgorICogRW5oYW5jZSBzdXBwb3J0IGZvciByZWFkaW5nIEVDIGtleXMgdXNpbmcgdmFyaWFudHMgb2YgU0VDMSBub3QgYWxsb3dlZCBieQorICogUkZDIDU5MTUgYW5kIFJGQyA1NDgwLgorICoKKyAqIEN1cnJlbnRseSB0aGlzIG1lYW5zIHBhcnNpbmcgdGhlIFNwZWNpZmllZEVDRG9tYWluIGNob2ljZSBvZiBFQworICogcGFyYW1ldGVycyAob25seSBrbm93biBncm91cHMgYXJlIHN1cHBvcnRlZCwgbm90IGFyYml0cmFyeSBkb21haW5zLCB0bworICogYXZvaWQgdmFsaWRhdGlvbiBpc3N1ZXMpLgorICoKKyAqIERpc2FibGUgaWYgeW91IG9ubHkgbmVlZCB0byBzdXBwb3J0IFJGQyA1OTE1ICsgNTQ4MCBrZXkgZm9ybWF0cy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZCisgKgorICogRW5hYmxlIGEgZHVtbXkgZXJyb3IgZnVuY3Rpb24gdG8gbWFrZSB1c2Ugb2YgbWJlZHRsc19zdHJlcnJvcigpIGluCisgKiB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMgZWFzaWVyIHdoZW4gTUJFRFRMU19FUlJPUl9DIGlzIGRpc2FibGVkCisgKiAobm8gZWZmZWN0IHdoZW4gTUJFRFRMU19FUlJPUl9DIGlzIGVuYWJsZWQpLgorICoKKyAqIFlvdSBjYW4gc2FmZWx5IGRpc2FibGUgdGhpcyBpZiBNQkVEVExTX0VSUk9SX0MgaXMgZW5hYmxlZCwgb3IgaWYgeW91J3JlCisgKiBub3QgdXNpbmcgbWJlZHRsc19zdHJlcnJvcigpIG9yIGVycm9yX3N0cmVycm9yKCkgaW4geW91ciBhcHBsaWNhdGlvbi4KKyAqCisgKiBEaXNhYmxlIGlmIHlvdSBydW4gaW50byBuYW1lIGNvbmZsaWN0cyBhbmQgd2FudCB0byByZWFsbHkgcmVtb3ZlIHRoZQorICogbWJlZHRsc19zdHJlcnJvcigpCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19HRU5QUklNRQorICoKKyAqIEVuYWJsZSB0aGUgcHJpbWUtbnVtYmVyIGdlbmVyYXRpb24gY29kZS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CSUdOVU1fQworICovCisjZGVmaW5lIE1CRURUTFNfR0VOUFJJTUUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRlNfSU8KKyAqCisgKiBFbmFibGUgZnVuY3Rpb25zIHRoYXQgdXNlIHRoZSBmaWxlc3lzdGVtLgorICovCisjZGVmaW5lIE1CRURUTFNfRlNfSU8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMKKyAqCisgKiBEbyBub3QgYWRkIGRlZmF1bHQgZW50cm9weSBzb3VyY2VzLiBUaGVzZSBhcmUgdGhlIHBsYXRmb3JtIHNwZWNpZmljLAorICogbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrIGFuZCBIQVZFR0UgYmFzZWQgcG9sbCBmdW5jdGlvbnMuCisgKgorICogVGhpcyBpcyB1c2VmdWwgdG8gaGF2ZSBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgYWRkZWQgZW50cm9weSBzb3VyY2VzIGluIGFuCisgKiBhcHBsaWNhdGlvbi4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBwcmV2ZW50IGxvYWRpbmcgb2YgZGVmYXVsdCBlbnRyb3B5IGZ1bmN0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorICoKKyAqIERvIG5vdCB1c2UgYnVpbHQtaW4gcGxhdGZvcm0gZW50cm9weSBmdW5jdGlvbnMuCisgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQKKyAqIHN0YW5kYXJkcyBsaWtlIHRoZSAvZGV2L3VyYW5kb20gb3IgV2luZG93cyBDcnlwdG9BUEkuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSB0aGUgYnVpbHQtaW4gcGxhdGZvcm0gZW50cm9weSBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5UUk9QWV9GT1JDRV9TSEEyNTYKKyAqCisgKiBGb3JjZSB0aGUgZW50cm9weSBhY2N1bXVsYXRvciB0byB1c2UgYSBTSEEtMjU2IGFjY3VtdWxhdG9yIGluc3RlYWQgb2YgdGhlCisgKiBkZWZhdWx0IFNIQS01MTIgYmFzZWQgb25lIChpZiBib3RoIGFyZSBhdmFpbGFibGUpLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NIQTI1Nl9DCisgKgorICogT24gMzItYml0IHN5c3RlbXMgU0hBLTI1NiBjYW4gYmUgbXVjaCBmYXN0ZXIgdGhhbiBTSEEtNTEyLiBVc2UgdGhpcyBvcHRpb24KKyAqIGlmIHlvdSBoYXZlIHBlcmZvcm1hbmNlIGNvbmNlcm5zLgorICoKKyAqIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIGlmIGJvdGggTUJFRFRMU19TSEEyNTZfQyBhbmQKKyAqIE1CRURUTFNfU0hBNTEyX0MgYXJlIGRlZmluZWQuIE90aGVyd2lzZSB0aGUgYXZhaWxhYmxlIGhhc2ggbW9kdWxlIGlzIHVzZWQuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2CisKKy8qKgorICogXGRlZiBNQkVEVExTX0VOVFJPUFlfTlZfU0VFRAorICoKKyAqIEVuYWJsZSB0aGUgbm9uLXZvbGF0aWxlIChOVikgc2VlZCBmaWxlLWJhc2VkIGVudHJvcHkgc291cmNlLgorICogKEFsc28gZW5hYmxlcyB0aGUgTlYgc2VlZCByZWFkL3dyaXRlIGZ1bmN0aW9ucyBpbiB0aGUgcGxhdGZvcm0gbGF5ZXIpCisgKgorICogVGhpcyBpcyBjcnVjaWFsIChpZiBub3QgcmVxdWlyZWQpIG9uIHN5c3RlbXMgdGhhdCBkbyBub3QgaGF2ZSBhCisgKiBjcnlwdG9ncmFwaGljIGVudHJvcHkgc291cmNlIChpbiBoYXJkd2FyZSBvciBrZXJuZWwpIGF2YWlsYWJsZS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FTlRST1BZX0MsIE1CRURUTFNfUExBVEZPUk1fQworICoKKyAqIFxub3RlIFRoZSByZWFkL3dyaXRlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBlbnRyb3B5IHNvdXJjZSBhcmUKKyAqICAgICAgIGRldGVybWluZWQgaW4gdGhlIHBsYXRmb3JtIGxheWVyLCBhbmQgY2FuIGJlIG1vZGlmaWVkIGF0IHJ1bnRpbWUgYW5kL29yCisgKiAgICAgICBjb21waWxlLXRpbWUgZGVwZW5kaW5nIG9uIHRoZSBmbGFncyAoTUJFRFRMU19QTEFURk9STV9OVl9TRUVEXyopIHVzZWQuCisgKgorICogXG5vdGUgSWYgeW91IHVzZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMgdGhhdCByZWFkIGEgc2VlZGZpbGUKKyAqICAgICAgIHdpdGggcmVndWxhciBmb3BlbigpLCBwbGVhc2UgbWFrZSBzdXJlIHlvdSBtYWtlIGEgc2VlZGZpbGUgd2l0aCB0aGUKKyAqICAgICAgIHByb3BlciBuYW1lIChkZWZpbmVkIGluIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfRklMRSkgYW5kIGF0CisgKiAgICAgICBsZWFzdCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSBieXRlcyBpbiBzaXplIHRoYXQgY2FuIGJlIHJlYWQgZnJvbQorICogICAgICAgYW5kIHdyaXR0ZW4gdG8gb3IgeW91IHdpbGwgZ2V0IGFuIGVudHJvcHkgc291cmNlIGVycm9yISBUaGUgZGVmYXVsdAorICogICAgICAgaW1wbGVtZW50YXRpb24gd2lsbCBvbmx5IHVzZSB0aGUgZmlyc3QgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUKKyAqICAgICAgIGJ5dGVzIGZyb20gdGhlIGZpbGUuCisgKgorICogXG5vdGUgVGhlIGVudHJvcHkgY29sbGVjdG9yIHdpbGwgd3JpdGUgdG8gdGhlIHNlZWQgZmlsZSBiZWZvcmUgZW50cm9weSBpcworICogICAgICAgZ2l2ZW4gdG8gYW4gZXh0ZXJuYWwgc291cmNlLCB0byB1cGRhdGUgaXQuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfTlZfU0VFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRU1PUllfREVCVUcKKyAqCisgKiBFbmFibGUgZGVidWdnaW5nIG9mIGJ1ZmZlciBhbGxvY2F0b3IgbWVtb3J5IGlzc3Vlcy4gQXV0b21hdGljYWxseSBwcmludHMKKyAqICh0byBzdGRlcnIpIGFsbCAoZmF0YWwpIG1lc3NhZ2VzIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3Vlcy4gRW5hYmxlcworICogZnVuY3Rpb24gZm9yICdkZWJ1ZyBvdXRwdXQnIG9mIGFsbG9jYXRlZCBtZW1vcnkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gbGV0IHRoZSBidWZmZXIgYWxsb2NhdG9yIHByaW50IG91dCBlcnJvciBtZXNzYWdlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUVNT1JZX0RFQlVHCisKKy8qKgorICogXGRlZiBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UKKyAqCisgKiBJbmNsdWRlIGJhY2t0cmFjZSBpbmZvcm1hdGlvbiB3aXRoIGVhY2ggYWxsb2NhdGVkIGJsb2NrLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworICogICAgICAgICAgIEdMSUJDLWNvbXBhdGlibGUgYmFja3RyYWNlKCkgYW4gYmFja3RyYWNlX3N5bWJvbHMoKSBzdXBwb3J0CisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gaW5jbHVkZSBiYWNrdHJhY2UgaW5mb3JtYXRpb24KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQKKyAqCisgKiBTdXBwb3J0IGV4dGVybmFsIHByaXZhdGUgUlNBIGtleXMgKGVnIGZyb20gYSBIU00pIGluIHRoZSBQSyBsYXllci4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBleHRlcm5hbCBwcml2YXRlIFJTQSBrZXlzLgorICovCisjZGVmaW5lIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLQ1MxX1YxNQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBQS0NTIzEgdjEuNSBlbmNvZGluZy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19SU0FfQworICoKKyAqIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBQS0NTIzEgdjEuNSBvcGVyYXRpb25zLgorICovCisjZGVmaW5lIE1CRURUTFNfUEtDUzFfVjE1CisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLQ1MxX1YyMQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBQS0NTIzEgdjIuMSBlbmNvZGluZy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRF9DLCBNQkVEVExTX1JTQV9DCisgKgorICogVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIFJTQUVTLU9BRVAgYW5kIFJTQVNTQS1QU1Mgb3BlcmF0aW9ucy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BLQ1MxX1YyMQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19SU0FfTk9fQ1JUCisgKgorICogRG8gbm90IHVzZSB0aGUgQ2hpbmVzZSBSZW1haW5kZXIgVGhlb3JlbSBmb3IgdGhlIFJTQSBwcml2YXRlIG9wZXJhdGlvbi4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgQ1JUIGluIFJTQS4KKyAqCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1JTQV9OT19DUlQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU0VMRl9URVNUCisgKgorICogRW5hYmxlIHRoZSBjaGVja3VwIGZ1bmN0aW9ucyAoKl9zZWxmX3Rlc3QpLgorICovCisjZGVmaW5lIE1CRURUTFNfU0VMRl9URVNUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NIQTI1Nl9TTUFMTEVSCisgKgorICogRW5hYmxlIGFuIGltcGxlbWVudGF0aW9uIG9mIFNIQS0yNTYgdGhhdCBoYXMgbG93ZXIgUk9NIGZvb3RwcmludCBidXQgYWxzbworICogbG93ZXIgcGVyZm9ybWFuY2UuCisgKgorICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgbWVhbnQgdG8gYmUgYSByZWFzb25uYWJsZSBjb21wcm9taXNlIGJldHdlZW4KKyAqIHBlcmZvcm1hbmNlIGFuZCBzaXplLiBUaGlzIHZlcnNpb24gb3B0aW1pemVzIG1vcmUgYWdncmVzc2l2ZWx5IGZvciBzaXplIGF0CisgKiB0aGUgZXhwZW5zZSBvZiBwZXJmb3JtYW5jZS4gRWcgb24gQ29ydGV4LU00IGl0IHJlZHVjZXMgdGhlIHNpemUgb2YKKyAqIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MoKSBmcm9tIH4yS0IgdG8gfjAuNUtCIGZvciBhIHBlcmZvcm1hbmNlIGhpdCBvZiBhYm91dAorICogMzAlLgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgdGhlIHNtYWxsZXIgaW1wbGVtZW50YXRpb24gb2YgU0hBMjU2LgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TSEEyNTZfU01BTExFUgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfQUxMX0FMRVJUX01FU1NBR0VTCisgKgorICogRW5hYmxlIHNlbmRpbmcgb2YgYWxlcnQgbWVzc2FnZXMgaW4gY2FzZSBvZiBlbmNvdW50ZXJlZCBlcnJvcnMgYXMgcGVyIFJGQy4KKyAqIElmIHlvdSBjaG9vc2Ugbm90IHRvIHNlbmQgdGhlIGFsZXJ0IG1lc3NhZ2VzLCBtYmVkIFRMUyBjYW4gc3RpbGwgY29tbXVuaWNhdGUKKyAqIHdpdGggb3RoZXIgc2VydmVycywgb25seSBkZWJ1Z2dpbmcgb2YgZmFpbHVyZXMgaXMgaGFyZGVyLgorICoKKyAqIFRoZSBhZHZhbnRhZ2Ugb2Ygbm90IHNlbmRpbmcgYWxlcnQgbWVzc2FnZXMsIGlzIHRoYXQgbm8gaW5mb3JtYXRpb24gaXMgZ2l2ZW4KKyAqIGFib3V0IHJlYXNvbnMgZm9yIGZhaWx1cmVzIHRodXMgcHJldmVudGluZyBhZHZlcnNhcmllcyBvZiBnYWluaW5nIGludGVsLgorICoKKyAqIEVuYWJsZSBzZW5kaW5nIG9mIGFsbCBhbGVydCBtZXNzYWdlcworICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfREVCVUdfQUxMCisgKgorICogRW5hYmxlIHRoZSBkZWJ1ZyBtZXNzYWdlcyBpbiBTU0wgbW9kdWxlIGZvciBhbGwgaXNzdWVzLgorICogRGVidWcgbWVzc2FnZXMgaGF2ZSBiZWVuIGRpc2FibGVkIGluIHNvbWUgcGxhY2VzIHRvIHByZXZlbnQgdGltaW5nCisgKiBhdHRhY2tzIGR1ZSB0byAodW5iYWxhbmNlZCkgZGVidWdnaW5nIGZ1bmN0aW9uIGNhbGxzLgorICoKKyAqIElmIHlvdSBuZWVkIGFsbCBlcnJvciByZXBvcnRpbmcgeW91IHNob3VsZCBlbmFibGUgdGhpcyBkdXJpbmcgZGVidWdnaW5nLAorICogYnV0IHJlbW92ZSB0aGlzIGZvciBwcm9kdWN0aW9uIHNlcnZlcnMgdGhhdCBzaG91bGQgbG9nIGFzIHdlbGwuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcmVwb3J0IGFsbCBkZWJ1ZyBtZXNzYWdlcyBvbiBlcnJvcnMgaW50cm9kdWNpbmcKKyAqIGEgdGltaW5nIHNpZGUtY2hhbm5lbC4KKyAqCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9ERUJVR19BTEwKKworLyoqIFxkZWYgTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBFbmNyeXB0LXRoZW4tTUFDLCBSRkMgNzM2Ni4KKyAqCisgKiBUaGlzIGFsbG93cyBwZWVycyB0aGF0IGJvdGggc3VwcG9ydCBpdCB0byB1c2UgYSBtb3JlIHJvYnVzdCBwcm90ZWN0aW9uIGZvcgorICogY2lwaGVyc3VpdGVzIHVzaW5nIENCQywgcHJvdmlkaW5nIGRlZXAgcmVzaXN0YW5jZSBhZ2FpbnN0IHRpbWluZyBhdHRhY2tzCisgKiBvbiB0aGUgcGFkZGluZyBvciB1bmRlcmx5aW5nIGNpcGhlci4KKyAqCisgKiBUaGlzIG9ubHkgYWZmZWN0cyBDQkMgY2lwaGVyc3VpdGVzLCBhbmQgaXMgdXNlbGVzcyBpZiBub25lIGlzIGRlZmluZWQuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX1RMUzEgICAgb3IKKyAqICAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgIG9yCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgRW5jcnlwdC10aGVuLU1BQworICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMKKworLyoqIFxkZWYgTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVAorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBFeHRlbmRlZCBNYXN0ZXIgU2VjcmV0LCBha2EgU2Vzc2lvbiBIYXNoCisgKiAoZHJhZnQtaWV0Zi10bHMtc2Vzc2lvbi1oYXNoLTAyKS4KKyAqCisgKiBUaGlzIHdhcyBpbnRyb2R1Y2VkIGFzICJ0aGUgcHJvcGVyIGZpeCIgdG8gdGhlIFRyaXBsZSBIYW5kc2hha2UgZmFtaWxpeSBvZgorICogYXR0YWNrcywgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRvIGFsd2F5cyB1c2UgaXQgKGV2ZW4gaWYgeW91IGRpc2FibGUKKyAqIHJlbmVnb3RpYXRpb24pLCBzaW5jZSBpdCBhY3R1YWxseSBmaXhlcyBhIG1vcmUgZnVuZGFtZW50YWwgaXNzdWUgaW4gdGhlCisgKiBvcmlnaW5hbCBTU0wvVExTIGRlc2lnbiwgYW5kIGhhcyBpbXBsaWNhdGlvbnMgYmV5b25kIFRyaXBsZSBIYW5kc2hha2UuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX1RMUzEgICAgb3IKKyAqICAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgIG9yCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgRXh0ZW5kZWQgTWFzdGVyIFNlY3JldC4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIEZBTExCQUNLX1NDU1YgKGRyYWZ0LWlldGYtdGxzLWRvd25ncmFkZS1zY3N2LTAwKS4KKyAqCisgKiBGb3Igc2VydmVycywgaXQgaXMgcmVjb21tZW5kZWQgdG8gYWx3YXlzIGVuYWJsZSB0aGlzLCB1bmxlc3MgeW91IHN1cHBvcnQKKyAqIG9ubHkgb25lIHZlcnNpb24gb2YgVExTLCBvciBrbm93IGZvciBzdXJlIHRoYXQgbm9uZSBvZiB5b3VyIGNsaWVudHMKKyAqIGltcGxlbWVudHMgYSBmYWxsYmFjayBzdHJhdGVneS4KKyAqCisgKiBGb3IgY2xpZW50cywgeW91IG9ubHkgbmVlZCB0aGlzIGlmIHlvdSdyZSB1c2luZyBhIGZhbGxiYWNrIHN0cmF0ZWd5LCB3aGljaAorICogaXMgbm90IHJlY29tbWVuZGVkIGluIHRoZSBmaXJzdCBwbGFjZSwgdW5sZXNzIHlvdSBhYnNvbHV0ZWx5IG5lZWQgaXQgdG8KKyAqIGludGVyb3BlcmF0ZSB3aXRoIGJ1Z2d5ICh2ZXJzaW9uLWludG9sZXJhbnQpIHNlcnZlcnMuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgRkFMTEJBQ0tfU0NTVgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTAorICoKKyAqIEVuYWJsZSBob29raW5nIGZ1bmN0aW9ucyBpbiBTU0wgbW9kdWxlIGZvciBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb2YKKyAqIGluZGl2aWR1YWwgcmVjb3Jkcy4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBlbmFibGUgaG9va2luZyBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HCisgKgorICogRW5hYmxlIDEvbi0xIHJlY29yZCBzcGxpdHRpbmcgZm9yIENCQyBtb2RlIGluIFNTTHYzIGFuZCBUTFMgMS4wLgorICoKKyAqIFRoaXMgaXMgYSBjb3VudGVybWVhc3VyZSB0byB0aGUgQkVBU1QgYXR0YWNrLCB3aGljaCBhbHNvIG1pbmltaXplcyB0aGUgcmlzaworICogb2YgaW50ZXJvcGVyYWJpbGl0eSBpc3N1ZXMgY29tcGFyZWQgdG8gc2VuZGluZyAwLWxlbmd0aCByZWNvcmRzLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIDEvbi0xIHJlY29yZCBzcGxpdHRpbmcuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04KKyAqCisgKiBEaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyByZW5lZ290aWF0aW9uLgorICoKKyAqIFRoZSB0d28gbWFpbiB1c2VzIG9mIHJlbmVnb3RpYXRpb24gYXJlICgxKSByZWZyZXNoIGtleXMgb24gbG9uZy1saXZlZAorICogY29ubmVjdGlvbnMgYW5kICgyKSBjbGllbnQgYXV0aGVudGljYXRpb24gYWZ0ZXIgdGhlIGluaXRpYWwgaGFuZHNoYWtlLgorICogSWYgeW91IGRvbid0IG5lZWQgcmVuZWdvdGlhdGlvbiwgaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gZGlzYWJsZSBpdCwgc2luY2UKKyAqIGl0IGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCBzZWN1cml0eSBpc3N1ZXMgaW4gdGhlIHBhc3QgYW5kIGlzIGVhc3kgdG8KKyAqIG1pc3VzZS9taXN1bmRlcnN0YW5kLgorICoKKyAqIENvbW1lbnQgdGhpcyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHJlbmVnb3RpYXRpb24uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIHJlY2VpdmluZyBhbmQgcGFyc2luZyBTU0x2MiBDbGllbnQgSGVsbG8gbWVzc2FnZXMgZm9yIHRoZQorICogU1NMIFNlcnZlciBtb2R1bGUgKE1CRURUTFNfU1NMX1NSVl9DKS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBlbmFibGUgc3VwcG9ydCBmb3IgU1NMdjIgQ2xpZW50IEhlbGxvIG1lc3NhZ2VzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRQorICoKKyAqIFBpY2sgdGhlIGNpcGhlcnN1aXRlIGFjY29yZGluZyB0byB0aGUgY2xpZW50J3MgcHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gb3VycworICogaW4gdGhlIFNTTCBTZXJ2ZXIgbW9kdWxlIChNQkVEVExTX1NTTF9TUlZfQykuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcmVzcGVjdCBjbGllbnQncyBjaXBoZXJzdWl0ZSBvcmRlcgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfU1JWX1JFU1BFQ1RfQ0xJRU5UX1BSRUZFUkVOQ0UKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUkZDIDYwNjYgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24gaW4gU1NMLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHRoZSBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgU1NMIDMuMC4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRDVfQworICogICAgICAgICAgIE1CRURUTFNfU0hBMV9DCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgU1NMIDMuMAorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fVExTMQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4wLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01ENV9DCisgKiAgICAgICAgICAgTUJFRFRMU19TSEExX0MKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4wCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fVExTMQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjEgKGFuZCBEVExTIDEuMCBpZiBEVExTIGlzIGVuYWJsZWQpLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01ENV9DCisgKiAgICAgICAgICAgTUJFRFRMU19TSEExX0MKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4xIC8gRFRMUyAxLjAKKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4yIChhbmQgRFRMUyAxLjIgaWYgRFRMUyBpcyBlbmFibGVkKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TSEExX0Mgb3IgTUJFRFRMU19TSEEyNTZfQyBvciBNQkVEVExTX1NIQTUxMl9DCisgKiAgICAgICAgICAgKERlcGVuZHMgb24gY2lwaGVyc3VpdGVzKQorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjIgLyBEVExTIDEuMgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBEVExTIChhbGwgYXZhaWxhYmxlIHZlcnNpb25zKS4KKyAqCisgKiBFbmFibGUgdGhpcyBhbmQgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xIHRvIGVuYWJsZSBEVExTIDEuMCwKKyAqIGFuZC9vciB0aGlzIGFuZCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgdG8gZW5hYmxlIERUTFMgMS4yLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKKyAqICAgICAgICBvciBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBEVExTCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfQUxQTgorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNzMwMSBBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBOZWdvdGlhdGlvbi4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBBTFBOLgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMUE4KKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIGFudGktcmVwbGF5IG1lY2hhbmlzbSBpbiBEVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9UTFNfQworICogICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKyAqCisgKiBcd2FybmluZyBEaXNhYmxpbmcgdGhpcyBpcyBvZnRlbiBhIHNlY3VyaXR5IHJpc2shCisgKiBTZWUgbWJlZHRsc19zc2xfY29uZl9kdGxzX2FudGlfcmVwbGF5KCkgZm9yIGRldGFpbHMuCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgYW50aS1yZXBsYXkgaW4gRFRMUy4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBIZWxsb1ZlcmlmeVJlcXVlc3Qgb24gRFRMUyBzZXJ2ZXJzLgorICoKKyAqIFRoaXMgZmVhdHVyZSBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gcHJldmVudCBEVExTIHNlcnZlcnMgYmVpbmcgdXNlZCBhcworICogYW1wbGlmaWVycyBpbiBEb1MgYXR0YWNrcyBhZ2FpbnN0IG90aGVyIGhvc3RzLiBJdCBzaG91bGQgYWx3YXlzIGJlIGVuYWJsZWQKKyAqIHVubGVzcyB5b3Uga25vdyBmb3Igc3VyZSBhbXBsaWZpY2F0aW9uIGNhbm5vdCBiZSBhIHByb2JsZW0gaW4gdGhlCisgKiBlbnZpcm9ubWVudCBpbiB3aGljaCB5b3VyIHNlcnZlciBvcGVyYXRlcy4KKyAqCisgKiBcd2FybmluZyBEaXNhYmxpbmcgdGhpcyBjYW4gYmEgYSBzZWN1cml0eSByaXNrISAoc2VlIGFib3ZlKQorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19EVExTCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgSGVsbG9WZXJpZnlSZXF1ZXN0LgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFCisgKgorICogRW5hYmxlIHNlcnZlci1zaWRlIHN1cHBvcnQgZm9yIGNsaWVudHMgdGhhdCByZWNvbm5lY3QgZnJvbSB0aGUgc2FtZSBwb3J0LgorICoKKyAqIFNvbWUgY2xpZW50cyB1bmV4cGVjdGVkbHkgY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHRyeSB0byByZWNvbm5lY3QgdXNpbmcgdGhlCisgKiBzYW1lIHNvdXJjZSBwb3J0LiBUaGlzIG5lZWRzIHNwZWNpYWwgc3VwcG9ydCBmcm9tIHRoZSBzZXJ2ZXIgdG8gaGFuZGxlIHRoZQorICogbmV3IGNvbm5lY3Rpb24gc2VjdXJlbHksIGFzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDQuMi44IG9mIFJGQyA2MzQ3LiBUaGlzCisgKiBmbGFnIGVuYWJsZXMgdGhhdCBzdXBwb3J0LgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWQorICoKKyAqIENvbW1lbnQgdGhpcyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIGNsaWVudHMgcmV1c2luZyB0aGUgc291cmNlIHBvcnQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgYSBsaW1pdCBvZiByZWNvcmRzIHdpdGggYmFkIE1BQy4KKyAqCisgKiBTZWUgbWJlZHRsc19zc2xfY29uZl9kdGxzX2JhZG1hY19saW1pdCgpLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19EVExTCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNTA3NyBzZXNzaW9uIHRpY2tldHMgaW4gU1NMLgorICogQ2xpZW50LXNpZGUsIHByb3ZpZGVzIGZ1bGwgc3VwcG9ydCBmb3Igc2Vzc2lvbiB0aWNrZXRzIChtYWludGFpbmFuY2Ugb2YgYQorICogc2Vzc2lvbiBzdG9yZSByZW1haW5zIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgYXBwbGljYXRpb24sIHRob3VnaCkuCisgKiBTZXJ2ZXItc2lkZSwgeW91IGFsc28gbmVlZCB0byBwcm92aWRlIGNhbGxiYWNrcyBmb3Igd3JpdGluZyBhbmQgcGFyc2luZworICogdGlja2V0cywgaW5jbHVkaW5nIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBhbmQga2V5IG1hbmFnZW1lbnQuIEV4YW1wbGUKKyAqIGNhbGxiYWNrcyBhcmUgcHJvdmlkZWQgYnkgTUJFRFRMU19TU0xfVElDS0VUX0MuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgU1NMIHNlc3Npb24gdGlja2V0cworICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgZXhwb3J0aW5nIGtleSBibG9jayBhbmQgbWFzdGVyIHNlY3JldC4KKyAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNlcnRhaW4gdXNlcnMgb2YgVExTLCBlLmcuIEVBUC1UTFMuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3Iga2V5IGV4cG9ydAorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFJGQyA2MDY2IHNlcnZlciBuYW1lIGluZGljYXRpb24gKFNOSSkgaW4gU1NMLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBzZXJ2ZXIgbmFtZSBpbmRpY2F0aW9uIGluIFNTTAorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04KKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFJGQyA2MDY2IHRydW5jYXRlZCBITUFDIGluIFNTTC4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciB0cnVuY2F0ZWQgSE1BQyBpbiBTU0wKKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19USFJFQURJTkdfQUxUCisgKgorICogUHJvdmlkZSB5b3VyIG93biBhbHRlcm5hdGUgdGhyZWFkaW5nIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1RIUkVBRElOR19DCisgKgorICogVW5jb21tZW50IHRoaXMgdG8gYWxsb3cgeW91ciBvd24gYWx0ZXJuYXRlIHRocmVhZGluZyBpbXBsZW1lbnRhdGlvbi4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEhSRUFESU5HX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRAorICoKKyAqIEVuYWJsZSB0aGUgcHRocmVhZCB3cmFwcGVyIGxheWVyIGZvciB0aGUgdGhyZWFkaW5nIGxheWVyLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1RIUkVBRElOR19DCisgKgorICogVW5jb21tZW50IHRoaXMgdG8gZW5hYmxlIHB0aHJlYWQgbXV0ZXhlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUworICoKKyAqIEFsbG93IHJ1bi10aW1lIGNoZWNraW5nIG9mIGNvbXBpbGUtdGltZSBlbmFibGVkIGZlYXR1cmVzLiBUaHVzIGFsbG93aW5nIHVzZXJzCisgKiB0byBjaGVjayBhdCBydW4tdGltZSBpZiB0aGUgbGlicmFyeSBpcyBmb3IgaW5zdGFuY2UgY29tcGlsZWQgd2l0aCB0aHJlYWRpbmcKKyAqIHN1cHBvcnQgdmlhIG1iZWR0bHNfdmVyc2lvbl9jaGVja19mZWF0dXJlKCkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfVkVSU0lPTl9DCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgcnVuLXRpbWUgY2hlY2tpbmcgYW5kIHNhdmUgUk9NIHNwYWNlCisgKi8KKyNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMKKyAqCisgKiBJZiBzZXQsIHRoZSBYNTA5IHBhcnNlciB3aWxsIG5vdCBicmVhay1vZmYgd2hlbiBwYXJzaW5nIGFuIFg1MDkgY2VydGlmaWNhdGUKKyAqIGFuZCBlbmNvdW50ZXJpbmcgYW4gZXh0ZW5zaW9uIGluIGEgdjEgb3IgdjIgY2VydGlmaWNhdGUuCisgKgorICogVW5jb21tZW50IHRvIHByZXZlbnQgYW4gZXJyb3IuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9BTExPV19VTlNVUFBPUlRFRF9DUklUSUNBTF9FWFRFTlNJT04KKyAqCisgKiBJZiBzZXQsIHRoZSBYNTA5IHBhcnNlciB3aWxsIG5vdCBicmVhay1vZmYgd2hlbiBwYXJzaW5nIGFuIFg1MDkgY2VydGlmaWNhdGUKKyAqIGFuZCBlbmNvdW50ZXJpbmcgYW4gdW5rbm93biBjcml0aWNhbCBleHRlbnNpb24uCisgKgorICogXHdhcm5pbmcgRGVwZW5kaW5nIG9uIHlvdXIgUEtJIHVzZSwgZW5hYmxpbmcgdGhpcyBjYW4gYmUgYSBzZWN1cml0eSByaXNrIQorICoKKyAqIFVuY29tbWVudCB0byBwcmV2ZW50IGFuIGVycm9yLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRQorICoKKyAqIEVuYWJsZSB2ZXJpZmljYXRpb24gb2YgdGhlIGtleVVzYWdlIGV4dGVuc2lvbiAoQ0EgYW5kIGxlYWYgY2VydGlmaWNhdGVzKS4KKyAqCisgKiBEaXNhYmxpbmcgdGhpcyBhdm9pZHMgcHJvYmxlbXMgd2l0aCBtaXMtaXNzdWVkIGFuZC9vciBtaXN1c2VkCisgKiAoaW50ZXJtZWRpYXRlKSBDQSBhbmQgbGVhZiBjZXJ0aWZpY2F0ZXMuCisgKgorICogXHdhcm5pbmcgRGVwZW5kaW5nIG9uIHlvdXIgUEtJIHVzZSwgZGlzYWJsaW5nIHRoaXMgY2FuIGJlIGEgc2VjdXJpdHkgcmlzayEKKyAqCisgKiBDb21tZW50IHRvIHNraXAga2V5VXNhZ2UgY2hlY2tpbmcgZm9yIGJvdGggQ0EgYW5kIGxlYWYgY2VydGlmaWNhdGVzLgorICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UKKyAqCisgKiBFbmFibGUgdmVyaWZpY2F0aW9uIG9mIHRoZSBleHRlbmRlZEtleVVzYWdlIGV4dGVuc2lvbiAobGVhZiBjZXJ0aWZpY2F0ZXMpLgorICoKKyAqIERpc2FibGluZyB0aGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoIG1pcy1pc3N1ZWQgYW5kL29yIG1pc3VzZWQgY2VydGlmaWNhdGVzLgorICoKKyAqIFx3YXJuaW5nIERlcGVuZGluZyBvbiB5b3VyIFBLSSB1c2UsIGRpc2FibGluZyB0aGlzIGNhbiBiZSBhIHNlY3VyaXR5IHJpc2shCisgKgorICogQ29tbWVudCB0byBza2lwIGV4dGVuZGVkS2V5VXNhZ2UgY2hlY2tpbmcgZm9yIGNlcnRpZmljYXRlcy4KKyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUCisgKgorICogRW5hYmxlIHBhcnNpbmcgYW5kIHZlcmlmaWNhdGlvbiBvZiBYLjUwOSBjZXJ0aWZpY2F0ZXMsIENSTHMgYW5kIENTUlMKKyAqIHNpZ25lZCB3aXRoIFJTQVNTQS1QU1MgKGFrYSBQS0NTIzEgdjIuMSkuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FsbG93IHVzaW5nIFJTQVNTQS1QU1MgaW4gY2VydGlmaWNhdGVzLgorICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWkxJQl9TVVBQT1JUCisgKgorICogSWYgc2V0LCB0aGUgU1NML1RMUyBtb2R1bGUgdXNlcyBaTElCIHRvIHN1cHBvcnQgY29tcHJlc3Npb24gYW5kCisgKiBkZWNvbXByZXNzaW9uIG9mIHBhY2tldCBkYXRhLgorICoKKyAqIFx3YXJuaW5nIFRMUy1sZXZlbCBjb21wcmVzc2lvbiBNQVkgUkVEVUNFIFNFQ1VSSVRZISBTZWUgZm9yIGV4YW1wbGUgdGhlCisgKiBDUklNRSBhdHRhY2suIEJlZm9yZSBlbmFibGluZyB0aGlzIG9wdGlvbiwgeW91IHNob3VsZCBleGFtaW5lIHdpdGggY2FyZSBpZgorICogQ1JJTUUgb3Igc2ltaWxhciBleHBsb2l0cyBtYXkgYmUgYSBhcHBsaWNhYmxlIHRvIHlvdXIgdXNlIGNhc2UuCisgKgorICogXG5vdGUgQ3VycmVudGx5IGNvbXByZXNzaW9uIGNhbid0IGJlIHVzZWQgd2l0aCBEVExTLgorICoKKyAqIFVzZWQgaW46IGxpYnJhcnkvc3NsX3Rscy5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBUaGlzIGZlYXR1cmUgcmVxdWlyZXMgemxpYiBsaWJyYXJ5IGFuZCBoZWFkZXJzIHRvIGJlIHByZXNlbnQuCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSB1c2Ugb2YgWkxJQgorICovCisvLyNkZWZpbmUgTUJFRFRMU19aTElCX1NVUFBPUlQKKy8qIFx9IG5hbWUgU0VDVElPTjogbWJlZCBUTFMgZmVhdHVyZSBzdXBwb3J0ICovCisKKy8qKgorICogXG5hbWUgU0VDVElPTjogbWJlZCBUTFMgbW9kdWxlcworICoKKyAqIFRoaXMgc2VjdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIGVudGlyZSBtb2R1bGVzIGluIG1iZWQgVExTCisgKiBceworICovCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FFU05JX0MKKyAqCisgKiBFbmFibGUgQUVTLU5JIHN1cHBvcnQgb24geDg2LTY0LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYWVzbmkuYworICogQ2FsbGVyOiAgbGlicmFyeS9hZXMuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0hBVkVfQVNNCisgKgorICogVGhpcyBtb2R1bGVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFFUy1OSSBpbnN0cnVjdGlvbnMgb24geDg2LTY0CisgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNOSV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FFU19DCisgKgorICogRW5hYmxlIHRoZSBBRVMgYmxvY2sgY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYWVzLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX3Rscy5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BlbS5jCisgKiAgICAgICAgICBsaWJyYXJ5L2N0cl9kcmJnLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKgorICogUEVNX1BBUlNFIHVzZXMgQUVTIGZvciBkZWNyeXB0aW5nIGVuY3J5cHRlZCBrZXlzLgorICovCisjZGVmaW5lIE1CRURUTFNfQUVTX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQVJDNF9DCisgKgorICogRW5hYmxlIHRoZSBBUkNGT1VSIHN0cmVhbSBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hcmM0LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX3Rscy5jCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfTUQ1CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9SQzRfMTI4X1NIQQorICovCisjZGVmaW5lIE1CRURUTFNfQVJDNF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FTTjFfUEFSU0VfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBBU04xIHBhcnNlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2FzbjEuYworICogQ2FsbGVyOiAgbGlicmFyeS94NTA5LmMKKyAqICAgICAgICAgIGxpYnJhcnkvZGhtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtjczEyLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtjczUuYworICogICAgICAgICAgbGlicmFyeS9wa3BhcnNlLmMKKyAqLworI2RlZmluZSBNQkVEVExTX0FTTjFfUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19BU04xX1dSSVRFX0MKKyAqCisgKiBFbmFibGUgdGhlIGdlbmVyaWMgQVNOMSB3cml0ZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hc24xd3JpdGUuYworICogQ2FsbGVyOiAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3Brd3JpdGUuYworICogICAgICAgICAgbGlicmFyeS94NTA5X2NyZWF0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDl3cml0ZV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDl3cml0ZV9jc3IuYworICovCisjZGVmaW5lIE1CRURUTFNfQVNOMV9XUklURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0JBU0U2NF9DCisgKgorICogRW5hYmxlIHRoZSBCYXNlNjQgbW9kdWxlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYmFzZTY0LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGVtLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgUEVNIHN1cHBvcnQgKHJlcXVpcmVkIGJ5IFguNTA5KS4KKyAqLworI2RlZmluZSBNQkVEVExTX0JBU0U2NF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0JJR05VTV9DCisgKgorICogRW5hYmxlIHRoZSBtdWx0aS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYmlnbnVtLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvZGhtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvZWNwLmMKKyAqICAgICAgICAgIGxpYnJhcnkvZWNkc2EuYworICogICAgICAgICAgbGlicmFyeS9yc2EuYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgUlNBLCBESE0gYW5kIEVDQyAoRUNESCwgRUNEU0EpIHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19CSUdOVU1fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19CTE9XRklTSF9DCisgKgorICogRW5hYmxlIHRoZSBCbG93ZmlzaCBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9ibG93ZmlzaC5jCisgKi8KKyNkZWZpbmUgTUJFRFRMU19CTE9XRklTSF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NBTUVMTElBX0MKKyAqCisgKiBFbmFibGUgdGhlIENhbWVsbGlhIGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2NhbWVsbGlhLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX3Rscy5jCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICovCisjZGVmaW5lIE1CRURUTFNfQ0FNRUxMSUFfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DQ01fQworICoKKyAqIEVuYWJsZSB0aGUgQ291bnRlciB3aXRoIENCQy1NQUMgKENDTSkgbW9kZSBmb3IgMTI4LWJpdCBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jY20uYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FFU19DIG9yIE1CRURUTFNfQ0FNRUxMSUFfQworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIEFFUy1DQ00gY2lwaGVyc3VpdGVzLCBpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsLgorICovCisjZGVmaW5lIE1CRURUTFNfQ0NNX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0VSVFNfQworICoKKyAqIEVuYWJsZSB0aGUgdGVzdCBjZXJ0aWZpY2F0ZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jZXJ0cy5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBmb3IgdGVzdGluZyAoc3NsX2NsaWVudC9zZXJ2ZXIpLgorICovCisjZGVmaW5lIE1CRURUTFNfQ0VSVFNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBjaXBoZXIgbGF5ZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jaXBoZXIuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGdlbmVyaWMgY2lwaGVyIHdyYXBwZXJzLgorICovCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ01BQ19DCisgKgorICogRW5hYmxlIHRoZSBDTUFDIChDaXBoZXItYmFzZWQgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlKSBtb2RlIGZvciBibG9jaworICogY2lwaGVycy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2NtYWMuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FFU19DIG9yIE1CRURUTFNfREVTX0MKKyAqCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NNQUNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DVFJfRFJCR19DCisgKgorICogRW5hYmxlIHRoZSBDVFJfRFJCRyBBRVMtMjU2LWJhc2VkIHJhbmRvbSBnZW5lcmF0b3IuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jdHJfZHJiZy5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQUVTX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgQ1RSX0RSQkcgQUVTLTI1NiByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqLworI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREVCVUdfQworICoKKyAqIEVuYWJsZSB0aGUgZGVidWcgZnVuY3Rpb25zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZGVidWcuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGRlYnVnZ2luZyBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19ERUJVR19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0RFU19DCisgKgorICogRW5hYmxlIHRoZSBERVMgYmxvY2sgY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZGVzLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGVtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Rscy5jCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICoKKyAqIFBFTV9QQVJTRSB1c2VzIERFUy8zREVTIGZvciBkZWNyeXB0aW5nIGVuY3J5cHRlZCBrZXlzLgorICovCisjZGVmaW5lIE1CRURUTFNfREVTX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREhNX0MKKyAqCisgKiBFbmFibGUgdGhlIERpZmZpZS1IZWxsbWFuLU1lcmtsZSBtb2R1bGUuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9kaG0uYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGtleSBleGNoYW5nZXM6CisgKiAgICAgIERIRS1SU0EsIERIRS1QU0sKKyAqLworI2RlZmluZSBNQkVEVExTX0RITV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDREhfQworICoKKyAqIEVuYWJsZSB0aGUgZWxsaXB0aWMgY3VydmUgRGlmZmllLUhlbGxtYW4gbGlicmFyeS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2VjZGguYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGtleSBleGNoYW5nZXM6CisgKiAgICAgIEVDREhFLUVDRFNBLCBFQ0RIRS1SU0EsIERIRS1QU0sKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ1BfQworICovCisjZGVmaW5lIE1CRURUTFNfRUNESF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDRFNBX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIERTQSBsaWJyYXJ5LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZWNkc2EuYworICogQ2FsbGVyOgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBrZXkgZXhjaGFuZ2VzOgorICogICAgICBFQ0RIRS1FQ0RTQQorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDUF9DLCBNQkVEVExTX0FTTjFfV1JJVEVfQywgTUJFRFRMU19BU04xX1BBUlNFX0MKKyAqLworI2RlZmluZSBNQkVEVExTX0VDRFNBX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNKUEFLRV9DCisgKgorICogRW5hYmxlIHRoZSBlbGxpcHRpYyBjdXJ2ZSBKLVBBS0UgbGlicmFyeS4KKyAqCisgKiBcd2FybmluZyBUaGlzIGlzIGN1cnJlbnRseSBleHBlcmltZW50YWwuIEVDIEotUEFLRSBzdXBwb3J0IGlzIGJhc2VkIG9uIHRoZQorICogVGhyZWFkIHYxLjAuMCBzcGVjaWZpY2F0aW9uOyBpbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWNhdGlvbgorICogbWlnaHQgc3RpbGwgaGFwcGVuLiBGb3IgdGhpcyByZWFzb24sIHRoaXMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2VjanBha2UuYworICogQ2FsbGVyOgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBrZXkgZXhjaGFuZ2VzOgorICogICAgICBFQ0pQQUtFCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNQX0MsIE1CRURUTFNfTURfQworICovCisvLyNkZWZpbmUgTUJFRFRMU19FQ0pQQUtFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNQX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIG92ZXIgR0YocCkgbGlicmFyeS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2VjcC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2VjZGguYworICogICAgICAgICAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L2VjanBha2UuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JJR05VTV9DIGFuZCBhdCBsZWFzdCBvbmUgTUJFRFRMU19FQ1BfRFBfWFhYX0VOQUJMRUQKKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VOVFJPUFlfQworICoKKyAqIEVuYWJsZSB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZW50cm9weSBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZW50cm9weS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU0hBNTEyX0Mgb3IgTUJFRFRMU19TSEEyNTZfQworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZ2VuZXJpYyBlbnRyb3B5IHBvb2wKKyAqLworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FUlJPUl9DCisgKgorICogRW5hYmxlIGVycm9yIGNvZGUgdG8gZXJyb3Igc3RyaW5nIGNvbnZlcnNpb24uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9lcnJvci5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBtYmVkdGxzX3N0cmVycm9yKCkuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJPUl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0dDTV9DCisgKgorICogRW5hYmxlIHRoZSBHYWxvaXMvQ291bnRlciBNb2RlIChHQ00pIGZvciBBRVMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9nY20uYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FFU19DIG9yIE1CRURUTFNfQ0FNRUxMSUFfQworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIEFFUy1HQ00gYW5kIENBTUVMTElBLUdDTSBjaXBoZXJzdWl0ZXMsIGlmIG90aGVyCisgKiByZXF1aXNpdGVzIGFyZSBlbmFibGVkIGFzIHdlbGwuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19HQ01fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19IQVZFR0VfQworICoKKyAqIEVuYWJsZSB0aGUgSEFWRUdFIHJhbmRvbSBnZW5lcmF0b3IuCisgKgorICogV2FybmluZzogdGhlIEhBVkVHRSByYW5kb20gZ2VuZXJhdG9yIGlzIG5vdCBzdWl0YWJsZSBmb3IgdmlydHVhbGl6ZWQKKyAqICAgICAgICAgIGVudmlyb25tZW50cworICoKKyAqIFdhcm5pbmc6IHRoZSBIQVZFR0UgcmFuZG9tIGdlbmVyYXRvciBpcyBkZXBlbmRlbnQgb24gdGltaW5nIGFuZCBzcGVjaWZpYworICogICAgICAgICAgcHJvY2Vzc29yIHRyYWl0cy4gSXQgaXMgdGhlcmVmb3JlIG5vdCBhZHZpc2VkIHRvIHVzZSBIQVZFR0UgYXMKKyAqICAgICAgICAgIHlvdXIgYXBwbGljYXRpb25zIHByaW1hcnkgcmFuZG9tIGdlbmVyYXRvciBvciBwcmltYXJ5IGVudHJvcHkgcG9vbAorICogICAgICAgICAgaW5wdXQuIEFzIGEgc2Vjb25kYXJ5IGlucHV0IHRvIHlvdXIgZW50cm9weSBwb29sLCBpdCBJUyBhYmxlIGFkZAorICogICAgICAgICAgdGhlIChsaW1pdGVkKSBleHRyYSBlbnRyb3B5IGl0IHByb3ZpZGVzLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvaGF2ZWdlLmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19USU1JTkdfQworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgdGhlIEhBVkVHRSByYW5kb20gZ2VuZXJhdG9yLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19IQVZFR0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ITUFDX0RSQkdfQworICoKKyAqIEVuYWJsZSB0aGUgSE1BQ19EUkJHIHJhbmRvbSBnZW5lcmF0b3IuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9obWFjX2RyYmcuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01EX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHRoZSBITUFDX0RSQkcgcmFuZG9tIG51bWJlciBnZWVyYXRvci4KKyAqLworI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX01EX0MKKyAqCisgKiBFbmFibGUgdGhlIGdlbmVyaWMgbWVzc2FnZSBkaWdlc3QgbGF5ZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX21kLmMKKyAqIENhbGxlcjoKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGdlbmVyaWMgbWVzc2FnZSBkaWdlc3Qgd3JhcHBlcnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19NRF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX01EMl9DCisgKgorICogRW5hYmxlIHRoZSBNRDIgaGFzaCBhbGdvcml0aG0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX21kMi5jCisgKiBDYWxsZXI6CisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciAocmFyZSkgTUQyLXNpZ25lZCBYLjUwOSBjZXJ0cy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUQyX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUQ0X0MKKyAqCisgKiBFbmFibGUgdGhlIE1ENCBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfbWQ0LmMKKyAqIENhbGxlcjoKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIChyYXJlKSBNRDQtc2lnbmVkIFguNTA5IGNlcnRzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19NRDRfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRDVfQworICoKKyAqIEVuYWJsZSB0aGUgTUQ1IGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19tZDUuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX21kLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGVtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Rscy5jCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFNTTC9UTFMgYW5kIFguNTA5LgorICogUEVNX1BBUlNFIHVzZXMgTUQ1IGZvciBkZWNyeXB0aW5nIGVuY3J5cHRlZCBrZXlzLgorICovCisjZGVmaW5lIE1CRURUTFNfTUQ1X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisgKgorICogRW5hYmxlIHRoZSBidWZmZXIgYWxsb2NhdG9yIGltcGxlbWVudGF0aW9uIHRoYXQgbWFrZXMgdXNlIG9mIGEgKHN0YWNrKQorICogYmFzZWQgYnVmZmVyIHRvICdhbGxvY2F0ZScgZHluYW1pYyBtZW1vcnkuIChyZXBsYWNlcyBjYWxsb2MoKSBhbmQgZnJlZSgpCisgKiBjYWxscykKKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21lbW9yeV9idWZmZXJfYWxsb2MuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BMQVRGT1JNX0MKKyAqICAgICAgICAgICBNQkVEVExTX1BMQVRGT1JNX01FTU9SWSAodG8gdXNlIGl0IHdpdGhpbiBtYmVkIFRMUykKKyAqCisgKiBFbmFibGUgdGhpcyBtb2R1bGUgdG8gZW5hYmxlIHRoZSBidWZmZXIgbWVtb3J5IGFsbG9jYXRvci4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX05FVF9DCisgKgorICogRW5hYmxlIHRoZSBUQ1AgYW5kIFVEUCBvdmVyIElQdjYvSVB2NCBuZXR3b3JraW5nIHJvdXRpbmVzLgorICoKKyAqIFxub3RlIFRoaXMgbW9kdWxlIG9ubHkgd29ya3Mgb24gUE9TSVgvVW5peCAoaW5jbHVkaW5nIExpbnV4LCBCU0QgYW5kIE9TIFgpCisgKiBhbmQgV2luZG93cy4gRm9yIG90aGVyIHBsYXRmb3JtcywgeW91J2xsIHdhbnQgdG8gZGlzYWJsZSBpdCwgYW5kIHdyaXRlIHlvdXIKKyAqIG93biBuZXR3b3JraW5nIGNhbGxiYWNrcyB0byBiZSBwYXNzZWQgdG8gXGMgbWJlZHRsc19zc2xfc2V0X2JpbygpLgorICoKKyAqIFxub3RlIFNlZSBhbHNvIG91ciBLbm93bGVkZ2UgQmFzZSBhcnRpY2xlIGFib3V0IHBvcnRpbmcgdG8gYSBuZXcKKyAqIGVudmlyb25tZW50OgorICogaHR0cHM6Ly90bHMubWJlZC5vcmcva2IvaG93LXRvL2hvdy1kby1pLXBvcnQtbWJlZC10bHMtdG8tYS1uZXctZW52aXJvbm1lbnQtT1MKKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L25ldF9zb2NrZXRzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBuZXR3b3JraW5nIHJvdXRpbmVzLgorICovCisjZGVmaW5lIE1CRURUTFNfTkVUX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfT0lEX0MKKyAqCisgKiBFbmFibGUgdGhlIE9JRCBkYXRhYmFzZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L29pZC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2FzbjF3cml0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BrY3M1LmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtwYXJzZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3Brd3JpdGUuYworICogICAgICAgICAgbGlicmFyeS9yc2EuYworICogICAgICAgICAgbGlicmFyeS94NTA5LmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOV9jcmVhdGUuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3JsLmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jc3IuYworICogICAgICAgICAgbGlicmFyeS94NTA5d3JpdGVfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5d3JpdGVfY3NyLmMKKyAqCisgKiBUaGlzIG1vZHVsZXMgdHJhbnNsYXRlcyBiZXR3ZWVuIE9JRHMgYW5kIGludGVybmFsIHZhbHVlcy4KKyAqLworI2RlZmluZSBNQkVEVExTX09JRF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BBRExPQ0tfQworICoKKyAqIEVuYWJsZSBWSUEgUGFkbG9jayBzdXBwb3J0IG9uIHg4Ni4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3BhZGxvY2suYworICogQ2FsbGVyOiAgbGlicmFyeS9hZXMuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0hBVkVfQVNNCisgKgorICogVGhpcyBtb2R1bGVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFZJQSBQYWRMb2NrIG9uIHg4Ni4KKyAqLworI2RlZmluZSBNQkVEVExTX1BBRExPQ0tfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QRU1fUEFSU0VfQworICoKKyAqIEVuYWJsZSBQRU0gZGVjb2RpbmcgLyBwYXJzaW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGVtLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvZGhtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtwYXJzZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcmwuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2Nzci5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQkFTRTY0X0MKKyAqCisgKiBUaGlzIG1vZHVsZXMgYWRkcyBzdXBwb3J0IGZvciBkZWNvZGluZyAvIHBhcnNpbmcgUEVNIGZpbGVzLgorICovCisjZGVmaW5lIE1CRURUTFNfUEVNX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEVNX1dSSVRFX0MKKyAqCisgKiBFbmFibGUgUEVNIGVuY29kaW5nIC8gd3JpdGluZy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3BlbS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3Brd3JpdGUuYworICogICAgICAgICAgbGlicmFyeS94NTA5d3JpdGVfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5d3JpdGVfY3NyLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CQVNFNjRfQworICoKKyAqIFRoaXMgbW9kdWxlcyBhZGRzIHN1cHBvcnQgZm9yIGVuY29kaW5nIC8gd3JpdGluZyBQRU0gZmlsZXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19QRU1fV1JJVEVfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS19DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIHB1YmxpYyAoYXN5bWV0cmljKSBrZXkgbGF5ZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9way5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUlNBX0Mgb3IgTUJFRFRMU19FQ1BfQworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBwdWJsaWMga2V5IHdyYXBwZXJzLgorICovCisjZGVmaW5lIE1CRURUTFNfUEtfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS19QQVJTRV9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIHB1YmxpYyAoYXN5bWV0cmljKSBrZXkgcGFyc2VyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGtwYXJzZS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19QS19DCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSBnZW5lcmljIHB1YmxpYyBrZXkgcGFyc2UgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIE1CRURUTFNfUEtfUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS19XUklURV9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIHB1YmxpYyAoYXN5bWV0cmljKSBrZXkgd3JpdGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGt3cml0ZS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3g1MDl3cml0ZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUEtfQworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBwdWJsaWMga2V5IHdyaXRlIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BLX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzVfQworICoKKyAqIEVuYWJsZSBQS0NTIzUgZnVuY3Rpb25zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGtjczUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01EX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQS0NTIzUgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIE1CRURUTFNfUEtDUzVfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS0NTMTFfQworICoKKyAqIEVuYWJsZSB3cmFwcGVyIGZvciBQS0NTIzExIHNtYXJ0Y2FyZCBzdXBwb3J0LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGtjczExLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGsuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BLX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIFNTTC9UTFMgUEtDUyAjMTEgc21hcnRjYXJkIHN1cHBvcnQuCisgKiBSZXF1aXJlcyB0aGUgcHJlc2VuY2Ugb2YgdGhlIFBLQ1MjMTEgaGVscGVyIGxpYnJhcnkgKGxpYnBrY3MxMS1oZWxwZXIpCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BLQ1MxMV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLQ1MxMl9DCisgKgorICogRW5hYmxlIFBLQ1MjMTIgUEJFIGZ1bmN0aW9ucy4KKyAqIEFkZHMgYWxnb3JpdGhtcyBmb3IgcGFyc2luZyBQS0NTIzggZW5jcnlwdGVkIHByaXZhdGUga2V5cworICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGtjczEyLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGtwYXJzZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQVNOMV9QQVJTRV9DLCBNQkVEVExTX0NJUEhFUl9DLCBNQkVEVExTX01EX0MKKyAqIENhbiB1c2U6ICBNQkVEVExTX0FSQzRfQworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgUEtDUyMxMiBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19QS0NTMTJfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QTEFURk9STV9DCisgKgorICogRW5hYmxlIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBsYXllciB0aGF0IGFsbG93cyB5b3UgdG8gcmUtYXNzaWduCisgKiBmdW5jdGlvbnMgbGlrZSBjYWxsb2MoKSwgZnJlZSgpLCBzbnByaW50ZigpLCBwcmludGYoKSwgZnByaW50ZigpLCBleGl0KCkuCisgKgorICogRW5hYmxpbmcgTUJFRFRMU19QTEFURk9STV9DIGVuYWJsZXMgdG8gdXNlIG9mIE1CRURUTFNfUExBVEZPUk1fWFhYX0FMVAorICogb3IgTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8gZGlyZWN0aXZlcywgYWxsb3dpbmcgdGhlIGZ1bmN0aW9ucyBtZW50aW9uZWQKKyAqIGFib3ZlIHRvIGJlIHNwZWNpZmllZCBhdCBydW50aW1lIG9yIGNvbXBpbGUgdGltZSByZXNwZWN0aXZlbHkuCisgKgorICogXG5vdGUgVGhpcyBhYnN0cmFjdGlvbiBsYXllciBtdXN0IGJlIGVuYWJsZWQgb24gV2luZG93cyAoaW5jbHVkaW5nIE1TWVMyKQorICogYXMgb3RoZXIgbW9kdWxlIHJlbHkgb24gaXQgZm9yIGEgZml4ZWQgc25wcmludGYgaW1wbGVtZW50YXRpb24uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wbGF0Zm9ybS5jCisgKiBDYWxsZXI6ICBNb3N0IG90aGVyIC5jIGZpbGVzCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBhYnN0cmFjdGlvbiBvZiBjb21tb24gKGxpYmMpIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUklQRU1EMTYwX0MKKyAqCisgKiBFbmFibGUgdGhlIFJJUEVNRC0xNjAgaGFzaCBhbGdvcml0aG0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3JpcGVtZDE2MC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICoKKyAqLworI2RlZmluZSBNQkVEVExTX1JJUEVNRDE2MF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1JTQV9DCisgKgorICogRW5hYmxlIHRoZSBSU0EgcHVibGljLWtleSBjcnlwdG9zeXN0ZW0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9yc2EuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS94NTA5LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcga2V5IGV4Y2hhbmdlczoKKyAqICAgICAgUlNBLCBESEUtUlNBLCBFQ0RIRS1SU0EsIFJTQS1QU0sKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CSUdOVU1fQywgTUJFRFRMU19PSURfQworICovCisjZGVmaW5lIE1CRURUTFNfUlNBX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU0hBMV9DCisgKgorICogRW5hYmxlIHRoZSBTSEExIGNyeXB0b2dyYXBoaWMgaGFzaCBhbGdvcml0aG0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3NoYTEuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX21kLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOXdyaXRlX2NydC5jCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFNTTC9UTFMgYW5kIFNIQTEtc2lnbmVkIGNlcnRpZmljYXRlcy4KKyAqLworI2RlZmluZSBNQkVEVExTX1NIQTFfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TSEEyNTZfQworICoKKyAqIEVuYWJsZSB0aGUgU0hBLTIyNCBhbmQgU0hBLTI1NiBjcnlwdG9ncmFwaGljIGhhc2ggYWxnb3JpdGhtcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfc2hhMjU2LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvZW50cm9weS5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogICAgICAgICAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgU0hBLTIyNCBhbmQgU0hBLTI1Ni4KKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciB0aGUgU1NML1RMUyAxLjIgUFJGIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU0hBNTEyX0MKKyAqCisgKiBFbmFibGUgdGhlIFNIQS0zODQgYW5kIFNIQS01MTIgY3J5cHRvZ3JhcGhpYyBoYXNoIGFsZ29yaXRobXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3NoYTUxMi5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2VudHJvcHkuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX21kLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgU0hBLTM4NCBhbmQgU0hBLTUxMi4KKyAqLworI2RlZmluZSBNQkVEVExTX1NIQTUxMl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DQUNIRV9DCisgKgorICogRW5hYmxlIHNpbXBsZSBTU0wgY2FjaGUgaW1wbGVtZW50YXRpb24uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfY2FjaGUuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9DQUNIRV9DCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0FDSEVfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfQ09PS0lFX0MKKyAqCisgKiBFbmFibGUgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgRFRMUyBjb29raWVzIGZvciBoZWxsbyB2ZXJpZmljYXRpb24uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfY29va2llLmMKKyAqIENhbGxlcjoKKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9DT09LSUVfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfVElDS0VUX0MKKyAqCisgKiBFbmFibGUgYW4gaW1wbGVtZW50YXRpb24gb2YgVExTIHNlcnZlci1zaWRlIGNhbGxiYWNrcyBmb3Igc2Vzc2lvbiB0aWNrZXRzLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvc3NsX3RpY2tldC5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQ0lQSEVSX0MKKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9USUNLRVRfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfQ0xJX0MKKyAqCisgKiBFbmFibGUgdGhlIFNTTC9UTFMgY2xpZW50IGNvZGUuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TU0xfVExTX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUyBjbGllbnQgc3VwcG9ydC4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9DTElfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfU1JWX0MKKyAqCisgKiBFbmFibGUgdGhlIFNTTC9UTFMgc2VydmVyIGNvZGUuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfc3J2LmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TU0xfVExTX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUyBzZXJ2ZXIgc3VwcG9ydC4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfVExTX0MKKyAqCisgKiBFbmFibGUgdGhlIGdlbmVyaWMgU1NML1RMUyBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvc3NsX3Rscy5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19DSVBIRVJfQywgTUJFRFRMU19NRF9DCisgKiAgICAgICAgICAgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUgTUJFRFRMU19TU0xfUFJPVE9fWFhYIGRlZmluZXMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUy4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9UTFNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19USFJFQURJTkdfQworICoKKyAqIEVuYWJsZSB0aGUgdGhyZWFkaW5nIGFic3RyYWN0aW9uIGxheWVyLgorICogQnkgZGVmYXVsdCBtYmVkIFRMUyBhc3N1bWVzIGl0IGlzIHVzZWQgaW4gYSBub24tdGhyZWFkZWQgZW52aXJvbm1lbnQgb3IgdGhhdAorICogY29udGV4dHMgYXJlIG5vdCBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLiBJZiB5b3UgZG8gaW50ZW5kIHRvIHVzZSBjb250ZXh0cworICogYmV0d2VlbiB0aHJlYWRzLCB5b3Ugd2lsbCBuZWVkIHRvIGVuYWJsZSB0aGlzIGxheWVyIHRvIHByZXZlbnQgcmFjZQorICogY29uZGl0aW9ucy4gU2VlIGFsc28gb3VyIEtub3dsZWRnZSBCYXNlIGFydGljbGUgYWJvdXQgdGhyZWFkaW5nOgorICogaHR0cHM6Ly90bHMubWJlZC5vcmcva2IvZGV2ZWxvcG1lbnQvdGhyZWFkLXNhZmV0eS1hbmQtbXVsdGktdGhyZWFkaW5nCisgKgorICogTW9kdWxlOiAgbGlicmFyeS90aHJlYWRpbmcuYworICoKKyAqIFRoaXMgYWxsb3dzIGRpZmZlcmVudCB0aHJlYWRpbmcgaW1wbGVtZW50YXRpb25zIChzZWxmLWltcGxlbWVudGVkIG9yCisgKiBwcm92aWRlZCkuCisgKgorICogWW91IHdpbGwgaGF2ZSB0byBlbmFibGUgZWl0aGVyIE1CRURUTFNfVEhSRUFESU5HX0FMVCBvcgorICogTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRC4KKyAqCisgKiBFbmFibGUgdGhpcyBsYXllciB0byBhbGxvdyB1c2Ugb2YgbXV0ZXhlcyB3aXRoaW4gbWJlZCBUTFMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEhSRUFESU5HX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVElNSU5HX0MKKyAqCisgKiBFbmFibGUgdGhlIHNlbWktcG9ydGFibGUgdGltaW5nIGludGVyZmFjZS4KKyAqCisgKiBcbm90ZSBUaGUgcHJvdmlkZWQgaW1wbGVtZW50YXRpb24gb25seSB3b3JrcyBvbiBQT1NJWC9Vbml4IChpbmNsdWRpbmcgTGludXgsCisgKiBCU0QgYW5kIE9TIFgpIGFuZCBXaW5kb3dzLiBPbiBvdGhlciBwbGF0Zm9ybXMsIHlvdSBjYW4gZWl0aGVyIGRpc2FibGUgdGhhdAorICogbW9kdWxlIGFuZCBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY2FsbGJhY2tzIG5lZWRlZCBieQorICogXGMgbWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCkgZm9yIERUTFMsIG9yIGxlYXZlIGl0IGVuYWJsZWQgYW5kIHByb3ZpZGUKKyAqIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIHRoZSB3aG9sZSBtb2R1bGUgYnkgc2V0dGluZworICogXGMgTUJFRFRMU19USU1JTkdfQUxUIGluIHRoZSBjdXJyZW50IGZpbGUuCisgKgorICogXG5vdGUgU2VlIGFsc28gb3VyIEtub3dsZWRnZSBCYXNlIGFydGljbGUgYWJvdXQgcG9ydGluZyB0byBhIG5ldworICogZW52aXJvbm1lbnQ6CisgKiBodHRwczovL3Rscy5tYmVkLm9yZy9rYi9ob3ctdG8vaG93LWRvLWktcG9ydC1tYmVkLXRscy10by1hLW5ldy1lbnZpcm9ubWVudC1PUworICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvdGltaW5nLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvaGF2ZWdlLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBIQVZFR0UgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19USU1JTkdfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19WRVJTSU9OX0MKKyAqCisgKiBFbmFibGUgcnVuLXRpbWUgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3ZlcnNpb24uYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHJ1bi10aW1lIHZlcnNpb24gaW5mb3JtYXRpb24uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9VU0VfQworICoKKyAqIEVuYWJsZSBYLjUwOSBjb3JlIGZvciB1c2luZyBjZXJ0aWZpY2F0ZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS94NTA5LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvbWJlZHRsc194NTA5X2NybC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19BU04xX1BBUlNFX0MsIE1CRURUTFNfQklHTlVNX0MsIE1CRURUTFNfT0lEX0MsCisgKiAgICAgICAgICAgTUJFRFRMU19QS19QQVJTRV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIHRoZSBYLjUwOSBwYXJzaW5nIG1vZHVsZXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X1VTRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBFbmFibGUgWC41MDkgY2VydGlmaWNhdGUgcGFyc2luZy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfVVNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgY2VydGlmaWNhdGUgcGFyc2luZy4KKyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQworICoKKyAqIEVuYWJsZSBYLjUwOSBDUkwgcGFyc2luZy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcmwuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFguNTA5IENSTCBwYXJzaW5nLgorICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DCisgKgorICogRW5hYmxlIFguNTA5IENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdCAoQ1NSKSBwYXJzaW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc194NTA5X2Nzci5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3g1MDlfY3J0X3dyaXRlLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBmb3IgcmVhZGluZyBYLjUwOSBjZXJ0aWZpY2F0ZSByZXF1ZXN0LgorICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NSRUFURV9DCisgKgorICogRW5hYmxlIFguNTA5IGNvcmUgZm9yIGNyZWF0aW5nIGNlcnRpZmljYXRlcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3g1MDlfY3JlYXRlLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CSUdOVU1fQywgTUJFRFRMU19PSURfQywgTUJFRFRMU19QS19XUklURV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgdGhlIGJhc2lzIGZvciBjcmVhdGluZyBYLjUwOSBjZXJ0aWZpY2F0ZXMgYW5kIENTUnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSRUFURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MKKyAqCisgKiBFbmFibGUgY3JlYXRpbmcgWC41MDkgY2VydGlmaWNhdGVzLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkveDUwOV9jcnRfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgY2VydGlmaWNhdGUgY3JlYXRpb24uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSVF9XUklURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MKKyAqCisgKiBFbmFibGUgY3JlYXRpbmcgWC41MDkgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0cyAoQ1NSKS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3g1MDlfY3NyX3dyaXRlLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19YNTA5X0NSRUFURV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFguNTA5IGNlcnRpZmljYXRlIHJlcXVlc3Qgd3JpdGluZy4KKyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWFRFQV9DCisgKgorICogRW5hYmxlIHRoZSBYVEVBIGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3h0ZWEuYworICogQ2FsbGVyOgorICovCisjZGVmaW5lIE1CRURUTFNfWFRFQV9DCisKKy8qIFx9IG5hbWUgU0VDVElPTjogbWJlZCBUTFMgbW9kdWxlcyAqLworCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyAqCisgKiBUaGlzIHNlY3Rpb24gYWxsb3dzIGZvciB0aGUgc2V0dGluZyBvZiBtb2R1bGUgc3BlY2lmaWMgc2l6ZXMgYW5kCisgKiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZQorICogcmVsZXZhbnQgaGVhZGVyIGZpbGVzIGFuZCBzaG91bGQgc3VmZmljZSBmb3IgdGhlIHJlZ3VsYXIgdXNlIGNhc2VzLgorICoKKyAqIE91ciBhZHZpY2UgaXMgdG8gZW5hYmxlIG9wdGlvbnMgYW5kIGNoYW5nZSB0aGVpciB2YWx1ZXMgaGVyZQorICogb25seSBpZiB5b3UgaGF2ZSBhIGdvb2QgcmVhc29uIGFuZCBrbm93IHRoZSBjb25zZXF1ZW5jZXMuCisgKgorICogUGxlYXNlIGNoZWNrIHRoZSByZXNwZWN0aXZlIGhlYWRlciBmaWxlIGZvciBkb2N1bWVudGF0aW9uIG9uIHRoZXNlCisgKiBwYXJhbWV0ZXJzICh0byBwcmV2ZW50IGR1cGxpY2F0ZSBkb2N1bWVudGF0aW9uKS4KKyAqIFx7CisgKi8KKworLyogTVBJIC8gQklHTlVNIG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX01QSV9XSU5ET1dfU0laRSAgICAgICAgICAgIDYgLyoqPCBNYXhpbXVtIHdpbmRvd3Mgc2l6ZSB1c2VkLiAqLworLy8jZGVmaW5lIE1CRURUTFNfTVBJX01BWF9TSVpFICAgICAgICAgICAgMTAyNCAvKio8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGZvciB1c2FibGUgTVBJcy4gKi8KKworLyogQ1RSX0RSQkcgb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4gICAgICAgICAgICAgICA0OCAvKio8IEFtb3VudCBvZiBlbnRyb3B5IHVzZWQgcGVyIHNlZWQgYnkgZGVmYXVsdCAoNDggd2l0aCBTSEEtNTEyLCAzMiB3aXRoIFNIQS0yNTYpICovCisvLyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19SRVNFRURfSU5URVJWQUwgICAgICAgIDEwMDAwIC8qKjwgSW50ZXJ2YWwgYmVmb3JlIHJlc2VlZCBpcyBwZXJmb3JtZWQgYnkgZGVmYXVsdCAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfTUFYX0lOUFVUICAgICAgICAgICAgICAgIDI1NiAvKio8IE1heGltdW0gbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW5wdXQgYnl0ZXMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX01BWF9SRVFVRVNUICAgICAgICAgICAgIDEwMjQgLyoqPCBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgcGVyIGNhbGwgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUICAgICAgICAgICAzODQgLyoqPCBNYXhpbXVtIHNpemUgb2YgKHJlKXNlZWQgYnVmZmVyICovCisKKy8qIEhNQUNfRFJCRyBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfUkVTRUVEX0lOVEVSVkFMICAgMTAwMDAgLyoqPCBJbnRlcnZhbCBiZWZvcmUgcmVzZWVkIGlzIHBlcmZvcm1lZCBieSBkZWZhdWx0ICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfTUFYX0lOUFVUICAgICAgICAgICAyNTYgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBhZGRpdGlvbmFsIGlucHV0IGJ5dGVzICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfTUFYX1JFUVVFU1QgICAgICAgIDEwMjQgLyoqPCBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgcGVyIGNhbGwgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVCAgICAgIDM4NCAvKio8IE1heGltdW0gc2l6ZSBvZiAocmUpc2VlZCBidWZmZXIgKi8KKworLyogRUNQIG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VDUF9NQVhfQklUUyAgICAgICAgICAgICA1MjEgLyoqPCBNYXhpbXVtIGJpdCBzaXplIG9mIGdyb3VwcyAqLworLy8jZGVmaW5lIE1CRURUTFNfRUNQX1dJTkRPV19TSVpFICAgICAgICAgICAgNiAvKio8IE1heGltdW0gd2luZG93IHNpemUgdXNlZCAqLworLy8jZGVmaW5lIE1CRURUTFNfRUNQX0ZJWEVEX1BPSU5UX09QVElNICAgICAgMSAvKio8IEVuYWJsZSBmaXhlZC1wb2ludCBzcGVlZC11cCAqLworCisvKiBFbnRyb3B5IG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfTUFYX1NPVVJDRVMgICAgICAgICAgICAgICAgMjAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBzb3VyY2VzIHN1cHBvcnRlZCAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NQVhfR0FUSEVSICAgICAgICAgICAgICAgIDEyOCAvKio8IE1heGltdW0gYW1vdW50IHJlcXVlc3RlZCBmcm9tIGVudHJvcHkgc291cmNlcyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NSU5fSEFSRFdBUkUgICAgICAgICAgICAgICAzMiAvKio8IERlZmF1bHQgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgZm9yIHRoZSBoYXJkd2FyZSBlbnRyb3B5IHNvdXJjZSBtYmVkdGxzX2hhcmR3YXJlX3BvbGwoKSBiZWZvcmUgZW50cm9weSBpcyByZWxlYXNlZCAqLworCisvKiBNZW1vcnkgYnVmZmVyIGFsbG9jYXRvciBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEUgICAgICA0IC8qKjwgQWxpZ24gb24gbXVsdGlwbGVzIG9mIHRoaXMgdmFsdWUgKi8KKworLyogUGxhdGZvcm0gb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX01FTV9IRFIgICA8c3RkbGliLmg+IC8qKjwgSGVhZGVyIHRvIGluY2x1ZGUgaWYgTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TIGlzIGRlZmluZWQuIERvbid0IGRlZmluZSBpZiBubyBoZWFkZXIgaXMgbmVlZGVkLiAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQyAgICAgICAgY2FsbG9jIC8qKjwgRGVmYXVsdCBhbGxvY2F0b3IgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRlJFRSAgICAgICAgICAgIGZyZWUgLyoqPCBEZWZhdWx0IGZyZWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVCAgICAgICAgICAgIGV4aXQgLyoqPCBEZWZhdWx0IGV4aXQgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfVElNRSAgICAgICAgICAgIHRpbWUgLyoqPCBEZWZhdWx0IHRpbWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkLiBNQkVEVExTX0hBVkVfVElNRSBtdXN0IGJlIGVuYWJsZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9GUFJJTlRGICAgICAgZnByaW50ZiAvKio8IERlZmF1bHQgZnByaW50ZiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYgICAgICAgIHByaW50ZiAvKio8IERlZmF1bHQgcHJpbnRmIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLyogTm90ZTogeW91ciBzbnByaW50ZiBtdXN0IGNvcnJlY2x0eSB6ZXJvLXRlcm1pbmF0ZSB0aGUgYnVmZmVyISAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX1NOUFJJTlRGICAgIHNucHJpbnRmIC8qKjwgRGVmYXVsdCBzbnByaW50ZiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUX1NVQ0NFU1MgICAgICAgMCAvKio8IERlZmF1bHQgZXhpdCB2YWx1ZSB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUX0ZBSUxVUkUgICAgICAgMSAvKio8IERlZmF1bHQgZXhpdCB2YWx1ZSB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1JFQUQgICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3JlYWQgLyoqPCBEZWZhdWx0IG52X3NlZWRfcmVhZCBmdW5jdGlvbiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1dSSVRFICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3dyaXRlIC8qKjwgRGVmYXVsdCBudl9zZWVkX3dyaXRlIGZ1bmN0aW9uIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfRklMRSAgInNlZWRmaWxlIiAvKio8IFNlZWQgZmlsZSB0byByZWFkL3dyaXRlIHdpdGggZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAqLworCisvKiBUbyBVc2UgRnVuY3Rpb24gTWFjcm9zIE1CRURUTFNfUExBVEZPUk1fQyBtdXN0IGJlIGVuYWJsZWQgKi8KKy8qIE1CRURUTFNfUExBVEZPUk1fWFhYX01BQ1JPIGFuZCBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQgY2Fubm90IGJvdGggYmUgZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fQ0FMTE9DX01BQ1JPICAgICAgICBjYWxsb2MgLyoqPCBEZWZhdWx0IGFsbG9jYXRvciBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0ZSRUVfTUFDUk8gICAgICAgICAgICBmcmVlIC8qKjwgRGVmYXVsdCBmcmVlIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fRVhJVF9NQUNSTyAgICAgICAgICAgIGV4aXQgLyoqPCBEZWZhdWx0IGV4aXQgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9USU1FX01BQ1JPICAgICAgICAgICAgdGltZSAvKio8IERlZmF1bHQgdGltZSBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQuIE1CRURUTFNfSEFWRV9USU1FIG11c3QgYmUgZW5hYmxlZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fVElNRV9UWVBFX01BQ1JPICAgICAgIHRpbWVfdCAvKio8IERlZmF1bHQgdGltZSBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQuIE1CRURUTFNfSEFWRV9USU1FIG11c3QgYmUgZW5hYmxlZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTyAgICAgIGZwcmludGYgLyoqPCBEZWZhdWx0IGZwcmludGYgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9QUklOVEZfTUFDUk8gICAgICAgIHByaW50ZiAvKio8IERlZmF1bHQgcHJpbnRmIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLyogTm90ZTogeW91ciBzbnByaW50ZiBtdXN0IGNvcnJlY2x0eSB6ZXJvLXRlcm1pbmF0ZSB0aGUgYnVmZmVyISAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfTUFDUk8gICAgc25wcmludGYgLyoqPCBEZWZhdWx0IHNucHJpbnRmIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9SRUFEX01BQ1JPICAgbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF9yZWFkIC8qKjwgRGVmYXVsdCBudl9zZWVkX3JlYWQgZnVuY3Rpb24gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX1dSSVRFX01BQ1JPICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3dyaXRlIC8qKjwgRGVmYXVsdCBudl9zZWVkX3dyaXRlIGZ1bmN0aW9uIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworCisvKiBTU0wgQ2FjaGUgb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0NBQ0hFX0RFRkFVTFRfVElNRU9VVCAgICAgICA4NjQwMCAvKio8IDEgZGF5ICAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0NBQ0hFX0RFRkFVTFRfTUFYX0VOVFJJRVMgICAgICA1MCAvKio8IE1heGltdW0gZW50cmllcyBpbiBjYWNoZSAqLworCisvKiBTU0wgb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiAgICAgICAgICAgICAxNjM4NCAvKio8IE1heGl1bSBmcmFnbWVudCBsZW5ndGggaW4gYnl0ZXMsIGRldGVybWluZXMgdGhlIHNpemUgb2YgZWFjaCBvZiB0aGUgdHdvIGludGVybmFsIEkvTyBidWZmZXJzICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfREVGQVVMVF9USUNLRVRfTElGRVRJTUUgICAgIDg2NDAwIC8qKjwgTGlmZXRpbWUgb2Ygc2Vzc2lvbiB0aWNrZXRzIChpZiBlbmFibGVkKSAqLworLy8jZGVmaW5lIE1CRURUTFNfUFNLX01BWF9MRU4gICAgICAgICAgICAgICAzMiAvKio8IE1heCBzaXplIG9mIFRMUyBwcmUtc2hhcmVkIGtleXMsIGluIGJ5dGVzIChkZWZhdWx0IDI1NiBiaXRzKSAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0NPT0tJRV9USU1FT1VUICAgICAgICA2MCAvKio8IERlZmF1bHQgZXhwaXJhdGlvbiBkZWxheSBvZiBEVExTIGNvb2tpZXMsIGluIHNlY29uZHMgaWYgSEFWRV9USU1FLCBvciBpbiBudW1iZXIgb2YgY29va2llcyBpc3N1ZWQgKi8KKworLyoqCisgKiBDb21wbGV0ZSBsaXN0IG9mIGNpcGhlcnN1aXRlcyB0byB1c2UsIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCisgKgorICogXHdhcm5pbmcgTm8gZGVwZW5kZW5jeSBjaGVja2luZyBpcyBkb25lIG9uIHRoYXQgZmllbGQhIFRoaXMgb3B0aW9uIGNhbiBvbmx5CisgKiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBzZXQgb2YgYXZhaWxhYmxlIGNpcGhlcnN1aXRlcy4gSXQgaXMgeW91cgorICogcmVzcG9uc2liaWxpdHkgdG8gbWFrZSBzdXJlIHRoZSBuZWVkZWQgbW9kdWxlcyBhcmUgYWN0aXZlLgorICoKKyAqIFVzZSB0aGlzIHRvIHNhdmUgYSBmZXcgaHVuZHJlZCBieXRlcyBvZiBST00gKGRlZmF1bHQgb3JkZXJpbmcgb2YgYWxsCisgKiBhdmFpbGFibGUgY2lwaGVyc3VpdGVzKSBhbmQgYSBmZXcgdG8gYSBmZXcgaHVuZHJlZCBieXRlcyBvZiBSQU0uCisgKgorICogVGhlIHZhbHVlIGJlbG93IGlzIG9ubHkgYW4gZXhhbXBsZSwgbm90IHRoZSBkZWZhdWx0LgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQ0lQSEVSU1VJVEVTIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisKKy8qIFg1MDkgb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9NQVhfSU5URVJNRURJQVRFX0NBICAgOCAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgaW50ZXJtZWRpYXRlIENBcyBpbiBhIHZlcmlmaWNhdGlvbiBjaGFpbi4gKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfTUFYX0ZJTEVfUEFUSF9MRU4gICAgIDUxMiAvKio8IE1heGltdW0gbGVuZ3RoIG9mIGEgcGF0aC9maWxlbmFtZSBzdHJpbmcgaW4gYnl0ZXMgaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0b3IgY2hhcmFjdGVyICgnXDAnKS4gKi8KKworLyogXH0gbmFtZSBTRUNUSU9OOiBDdXN0b21pc2F0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLworCisvKiBUYXJnZXQgYW5kIGFwcGxpY2F0aW9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zICovCisvLyNkZWZpbmUgWU9UVEFfQ0ZHX01CRURUTFNfVEFSR0VUX0NPTkZJR19GSUxFICJtYmVkdGxzL3RhcmdldF9jb25maWcuaCIKKworI2lmIGRlZmluZWQoVEFSR0VUX0xJS0VfTUJFRCkgJiYgZGVmaW5lZChZT1RUQV9DRkdfTUJFRFRMU19UQVJHRVRfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSBZT1RUQV9DRkdfTUJFRFRMU19UQVJHRVRfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisvKgorICogQWxsb3cgdXNlciB0byBvdmVycmlkZSBhbnkgcHJldmlvdXMgZGVmYXVsdC4KKyAqCisgKiBVc2UgdHdvIG1hY3JvIG5hbWVzIGZvciB0aGF0LCBhczoKKyAqIC0gd2l0aCB5b3R0YSB0aGUgcHJlZml4IFlPVFRBX0NGR18gaXMgZm9yY2VkCisgKiAtIHdpdGhvdXQgeW90dGEgaXMgbG9va3Mgd2VpcmQgdG8gaGF2ZSBhIFlPVFRBIHByZWZpeC4KKyAqLworI2lmIGRlZmluZWQoWU9UVEFfQ0ZHX01CRURUTFNfVVNFUl9DT05GSUdfRklMRSkKKyNpbmNsdWRlIFlPVFRBX0NGR19NQkVEVExTX1VTRVJfQ09ORklHX0ZJTEUKKyNlbGlmIGRlZmluZWQoTUJFRFRMU19VU0VSX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgTUJFRFRMU19VU0VSX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgImNoZWNrX2NvbmZpZy5oIgorCisjZW5kaWYgLyogTUJFRFRMU19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jdHJfZHJiZy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jdHJfZHJiZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OWQzYzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2N0cl9kcmJnLmgKQEAgLTAsMCArMSwyOTAgQEAKKy8qKgorICogXGZpbGUgY3RyX2RyYmcuaAorICoKKyAqIFxicmllZiBDVFJfRFJCRyBiYXNlZCBvbiBBRVMtMjU2IChOSVNUIFNQIDgwMC05MCkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19DVFJfRFJCR19ICisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfSAorCisjaW5jbHVkZSAiYWVzLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisjaW5jbHVkZSAibWJlZHRscy90aHJlYWRpbmcuaCIKKyNlbmRpZgorCisjZGVmaW5lIE1CRURUTFNfRVJSX0NUUl9EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCAgICAgICAgLTB4MDAzNCAgLyoqPCBUaGUgZW50cm9weSBzb3VyY2UgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9DVFJfRFJCR19SRVFVRVNUX1RPT19CSUcgICAgICAgICAgICAgIC0weDAwMzYgIC8qKjwgVG9vIG1hbnkgcmFuZG9tIHJlcXVlc3RlZCBpbiBzaW5nbGUgY2FsbC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQ1RSX0RSQkdfSU5QVVRfVE9PX0JJRyAgICAgICAgICAgICAgICAtMHgwMDM4ICAvKio8IElucHV0IHRvbyBsYXJnZSAoRW50cm9weSArIGFkZGl0aW9uYWwpLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9DVFJfRFJCR19GSUxFX0lPX0VSUk9SICAgICAgICAgICAgICAgIC0weDAwM0EgIC8qKjwgUmVhZC93cml0ZSBlcnJvciBpbiBmaWxlLiAqLworCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFICAgICAgICAgIDE2ICAgICAgLyoqPCBCbG9jayBzaXplIHVzZWQgYnkgdGhlIGNpcGhlciAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfS0VZU0laRSAgICAgICAgICAgIDMyICAgICAgLyoqPCBLZXkgc2l6ZSB1c2VkIGJ5IHRoZSBjaXBoZXIgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfS0VZQklUUyAgICAgICAgICAgICggTUJFRFRMU19DVFJfRFJCR19LRVlTSVpFICogOCApCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfU0VFRExFTiAgICAgICAgICAgICggTUJFRFRMU19DVFJfRFJCR19LRVlTSVpFICsgTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRoZSBzZWVkIGxlbmd0aCAoY291bnRlciArIEFFUyBrZXkpICAgICAgICAgICAgKi8KKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBNb2R1bGUgc2V0dGluZ3MKKyAqCisgKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSBjYW4gc2V0IGZvciB0aGlzIG1vZHVsZSBhcmUgaW4gdGhpcyBzZWN0aW9uLgorICogRWl0aGVyIGNoYW5nZSB0aGVtIGluIGNvbmZpZy5oIG9yIGRlZmluZSB0aGVtIG9uIHRoZSBjb21waWxlciBjb21tYW5kIGxpbmUuCisgKiBceworICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykgJiYgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0ZPUkNFX1NIQTI1NikKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19FTlRST1BZX0xFTiAgICAgICAgNDggICAgICAvKio8IEFtb3VudCBvZiBlbnRyb3B5IHVzZWQgcGVyIHNlZWQgYnkgZGVmYXVsdCAoNDggd2l0aCBTSEEtNTEyLCAzMiB3aXRoIFNIQS0yNTYpICovCisjZWxzZQorI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOICAgICAgICAzMiAgICAgIC8qKjwgQW1vdW50IG9mIGVudHJvcHkgdXNlZCBwZXIgc2VlZCBieSBkZWZhdWx0ICg0OCB3aXRoIFNIQS01MTIsIDMyIHdpdGggU0hBLTI1NikgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX1JFU0VFRF9JTlRFUlZBTCkKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19SRVNFRURfSU5URVJWQUwgICAgMTAwMDAgICAvKio8IEludGVydmFsIGJlZm9yZSByZXNlZWQgaXMgcGVyZm9ybWVkIGJ5IGRlZmF1bHQgKi8KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQpCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfTUFYX0lOUFVUICAgICAgICAgIDI1NiAgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBhZGRpdGlvbmFsIGlucHV0IGJ5dGVzICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfTUFYX1JFUVVFU1QpCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfTUFYX1JFUVVFU1QgICAgICAgIDEwMjQgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgcGVyIGNhbGwgKi8KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19NQVhfU0VFRF9JTlBVVCkKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19NQVhfU0VFRF9JTlBVVCAgICAgMzg0ICAgICAvKio8IE1heGltdW0gc2l6ZSBvZiAocmUpc2VlZCBidWZmZXIgKi8KKyNlbmRpZgorCisvKiBcfSBuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncyAqLworCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfUFJfT0ZGICAgICAgICAgICAgIDAgICAgICAgLyoqPCBObyBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgICAgICAgKi8KKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19QUl9PTiAgICAgICAgICAgICAgMSAgICAgICAvKio8IFByZWRpY3Rpb24gcmVzaXN0YW5jZSBlbmFibGVkICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENUUl9EUkJHIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdW5zaWduZWQgY2hhciBjb3VudGVyWzE2XTsgIC8qITwgIGNvdW50ZXIgKFYpICAgICAgICovCisgICAgaW50IHJlc2VlZF9jb3VudGVyOyAgICAgICAgIC8qITwgIHJlc2VlZCBjb3VudGVyICAgICovCisgICAgaW50IHByZWRpY3Rpb25fcmVzaXN0YW5jZTsgIC8qITwgIGVuYWJsZSBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgKEF1dG9tYXRpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlZWQgYmVmb3JlIGV2ZXJ5IHJhbmRvbSBnZW5lcmF0aW9uKSAgKi8KKyAgICBzaXplX3QgZW50cm9weV9sZW47ICAgICAgICAgLyohPCAgYW1vdW50IG9mIGVudHJvcHkgZ3JhYmJlZCBvbiBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZSlzZWVkICAgICAgICAgICovCisgICAgaW50IHJlc2VlZF9pbnRlcnZhbDsgICAgICAgIC8qITwgIHJlc2VlZCBpbnRlcnZhbCAgICovCisKKyAgICBtYmVkdGxzX2Flc19jb250ZXh0IGFlc19jdHg7ICAgICAgICAvKiE8ICBBRVMgY29udGV4dCAgICAgICAqLworCisgICAgLyoKKyAgICAgKiBDYWxsYmFja3MgKEVudHJvcHkpCisgICAgICovCisgICAgaW50ICgqZl9lbnRyb3B5KSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KTsKKworICAgIHZvaWQgKnBfZW50cm9weTsgICAgICAgICAgICAvKiE8ICBjb250ZXh0IGZvciB0aGUgZW50cm9weSBmdW5jdGlvbiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgbXV0ZXg7CisjZW5kaWYKK30KK21iZWR0bHNfY3RyX2RyYmdfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBDVFJfRFJCRyBjb250ZXh0IGluaXRpYWxpemF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICBNYWtlcyB0aGUgY29udGV4dCByZWFkeSBmb3IgbWJlZHRsc19jdHJfZHJiZ19zZWVkKCkgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSgpLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENUUl9EUkJHIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX2N0cl9kcmJnX2luaXQoIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgQ1RSX0RSQkcgaW5pdGlhbCBzZWVkaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICBTZWVkIGFuZCBzZXR1cCBlbnRyb3B5IHNvdXJjZSBmb3IgZnV0dXJlIHJlc2VlZHMuCisgKgorICogTm90ZTogUGVyc29uYWxpemF0aW9uIGRhdGEgY2FuIGJlIHByb3ZpZGVkIGluIGFkZGl0aW9uIHRvIHRoZSBtb3JlIGdlbmVyaWMKKyAqICAgICAgIGVudHJvcHkgc291cmNlIHRvIG1ha2UgdGhpcyBpbnN0YW50aWF0aW9uIGFzIHVuaXF1ZSBhcyBwb3NzaWJsZS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDVFJfRFJCRyBjb250ZXh0IHRvIGJlIHNlZWRlZAorICogXHBhcmFtIGZfZW50cm9weSAgICAgRW50cm9weSBjYWxsYmFjayAocF9lbnRyb3B5LCBidWZmZXIgdG8gZmlsbCwgYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpCisgKiBccGFyYW0gcF9lbnRyb3B5ICAgICBFbnRyb3B5IGNvbnRleHQKKyAqIFxwYXJhbSBjdXN0b20gICAgICAgIFBlcnNvbmFsaXphdGlvbiBkYXRhIChEZXZpY2Ugc3BlY2lmaWMgaWRlbnRpZmllcnMpCisgKiAgICAgICAgICAgICAgICAgICAgICAoQ2FuIGJlIE5VTEwpCisgKiBccGFyYW0gbGVuICAgICAgICAgICBMZW5ndGggb2YgcGVyc29uYWxpemF0aW9uIGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DVFJfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgaW50ICgqZl9lbnRyb3B5KSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpwX2VudHJvcHksCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3VzdG9tLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBDbGVhciBDVFJfQ1JCRyBjb250ZXh0IGRhdGEKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDVFJfRFJCRyBjb250ZXh0IHRvIGNsZWFyCisgKi8KK3ZvaWQgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEVuYWJsZSAvIGRpc2FibGUgcHJlZGljdGlvbiByZXNpc3RhbmNlIChEZWZhdWx0OiBPZmYpCisgKgorICogTm90ZTogSWYgZW5hYmxlZCwgZW50cm9weSBpcyB1c2VkIGZvciBjdHgtPmVudHJvcHlfbGVuIGJlZm9yZSBlYWNoIGNhbGwhCisgKiAgICAgICBPbmx5IHVzZSB0aGlzIGlmIHlvdSBoYXZlIGFtcGxlIHN1cHBseSBvZiBnb29kIGVudHJvcHkhCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ1RSX0RSQkcgY29udGV4dAorICogXHBhcmFtIHJlc2lzdGFuY2UgICAgTUJFRFRMU19DVFJfRFJCR19QUl9PTiBvciBNQkVEVExTX0NUUl9EUkJHX1BSX09GRgorICovCit2b2lkIG1iZWR0bHNfY3RyX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNpc3RhbmNlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgU2V0IHRoZSBhbW91bnQgb2YgZW50cm9weSBncmFiYmVkIG9uIGVhY2ggKHJlKXNlZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENUUl9EUkJHIGNvbnRleHQKKyAqIFxwYXJhbSBsZW4gICAgICAgICAgIEFtb3VudCBvZiBlbnRyb3B5IHRvIGdyYWIKKyAqLwordm9pZCBtYmVkdGxzX2N0cl9kcmJnX3NldF9lbnRyb3B5X2xlbiggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFNldCB0aGUgcmVzZWVkIGludGVydmFsCisgKiAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19DVFJfRFJCR19SRVNFRURfSU5URVJWQUwpCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ1RSX0RSQkcgY29udGV4dAorICogXHBhcmFtIGludGVydmFsICAgICAgUmVzZWVkIGludGVydmFsCisgKi8KK3ZvaWQgbWJlZHRsc19jdHJfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGludGVydmFsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgQ1RSX0RSQkcgcmVzZWVkaW5nIChleHRyYWN0cyBkYXRhIGZyb20gZW50cm9weSBzb3VyY2UpCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ1RSX0RSQkcgY29udGV4dAorICogXHBhcmFtIGFkZGl0aW9uYWwgICAgQWRkaXRpb25hbCBkYXRhIHRvIGFkZCB0byBzdGF0ZSAoQ2FuIGJlIE5VTEwpCisgKiBccGFyYW0gbGVuICAgICAgICAgICBMZW5ndGggb2YgYWRkaXRpb25hbCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ1RSX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX2N0cl9kcmJnX3Jlc2VlZCggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRpdGlvbmFsLCBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgQ1RSX0RSQkcgdXBkYXRlIHN0YXRlCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ1RSX0RSQkcgY29udGV4dAorICogXHBhcmFtIGFkZGl0aW9uYWwgICAgQWRkaXRpb25hbCBkYXRhIHRvIHVwZGF0ZSBzdGF0ZSB3aXRoCisgKiBccGFyYW0gYWRkX2xlbiAgICAgICBMZW5ndGggb2YgYWRkaXRpb25hbCBkYXRhCisgKgorICogXG5vdGUgICAgICAgICAgICAgICAgSWYgYWRkX2xlbiBpcyBncmVhdGVyIHRoYW4gTUJFRFRMU19DVFJfRFJCR19NQVhfU0VFRF9JTlBVVCwKKyAqICAgICAgICAgICAgICAgICAgICAgIG9ubHkgdGhlIGZpcnN0IE1CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQgYnl0ZXMgYXJlIHVzZWQsCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVtYWluaW5nIG9uZXMgYXJlIHNpbGVudGx5IGRpc2NhcmRlZC4KKyAqLwordm9pZCBtYmVkdGxzX2N0cl9kcmJnX3VwZGF0ZSggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkaXRpb25hbCwgc2l6ZV90IGFkZF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBDVFJfRFJCRyBnZW5lcmF0ZSByYW5kb20gd2l0aCBhZGRpdGlvbmFsIHVwZGF0ZSBpbnB1dAorICoKKyAqIE5vdGU6IEF1dG9tYXRpY2FsbHkgcmVzZWVkcyBpZiByZXNlZWRfY291bnRlciBpcyByZWFjaGVkLgorICoKKyAqIFxwYXJhbSBwX3JuZyAgICAgICAgIENUUl9EUkJHIGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICAgICAgIEJ1ZmZlciB0byBmaWxsCisgKiBccGFyYW0gb3V0cHV0X2xlbiAgICBMZW5ndGggb2YgdGhlIGJ1ZmZlcgorICogXHBhcmFtIGFkZGl0aW9uYWwgICAgQWRkaXRpb25hbCBkYXRhIHRvIHVwZGF0ZSB3aXRoIChDYW4gYmUgTlVMTCkKKyAqIFxwYXJhbSBhZGRfbGVuICAgICAgIExlbmd0aCBvZiBhZGRpdGlvbmFsIGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DVFJfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DVFJfRFJCR19SRVFVRVNUX1RPT19CSUcKKyAqLworaW50IG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG91dHB1dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRpdGlvbmFsLCBzaXplX3QgYWRkX2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIENUUl9EUkJHIGdlbmVyYXRlIHJhbmRvbQorICoKKyAqIE5vdGU6IEF1dG9tYXRpY2FsbHkgcmVzZWVkcyBpZiByZXNlZWRfY291bnRlciBpcyByZWFjaGVkLgorICoKKyAqIFxwYXJhbSBwX3JuZyAgICAgICAgIENUUl9EUkJHIGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICAgICAgIEJ1ZmZlciB0byBmaWxsCisgKiBccGFyYW0gb3V0cHV0X2xlbiAgICBMZW5ndGggb2YgdGhlIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NUUl9EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NUUl9EUkJHX1JFUVVFU1RfVE9PX0JJRworICovCitpbnQgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20oIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3Qgb3V0cHV0X2xlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBXcml0ZSBhIHNlZWQgZmlsZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENUUl9EUkJHIGNvbnRleHQKKyAqIFxwYXJhbSBwYXRoICAgICAgICAgIE5hbWUgb2YgdGhlIGZpbGUKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DVFJfRFJCR19GSUxFX0lPX0VSUk9SIG9uIGZpbGUgZXJyb3IsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DVFJfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfY3RyX2RyYmdfd3JpdGVfc2VlZF9maWxlKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFJlYWQgYW5kIHVwZGF0ZSBhIHNlZWQgZmlsZS4gU2VlZCBpcyBhZGRlZCB0byB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENUUl9EUkJHIGNvbnRleHQKKyAqIFxwYXJhbSBwYXRoICAgICAgICAgIE5hbWUgb2YgdGhlIGZpbGUKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DVFJfRFJCR19GSUxFX0lPX0VSUk9SIG9uIGZpbGUgZXJyb3IsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DVFJfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NUUl9EUkJHX0lOUFVUX1RPT19CSUcKKyAqLworaW50IG1iZWR0bHNfY3RyX2RyYmdfdXBkYXRlX3NlZWRfZmlsZSggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGggKTsKKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19jdHJfZHJiZ19zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKy8qIEludGVybmFsIGZ1bmN0aW9ucyAoZG8gbm90IGNhbGwgZGlyZWN0bHkpICovCitpbnQgbWJlZHRsc19jdHJfZHJiZ19zZWVkX2VudHJvcHlfbGVuKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCopKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QsIHNpemVfdCApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogY3RyX2RyYmcuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9kZWJ1Zy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NTc5OTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2RlYnVnLmgKQEAgLTAsMCArMSwyMjggQEAKKy8qKgorICogXGZpbGUgZGVidWcuaAorICoKKyAqIFxicmllZiBGdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIGFuZCBwcm92aWRpbmcgZGVidWcgb3V0cHV0IGZyb20gdGhlIGxpYnJhcnkuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfREVCVUdfSAorI2RlZmluZSBNQkVEVExTX0RFQlVHX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlICJzc2wuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyNpbmNsdWRlICJlY3AuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFQlVHX0MpCisKKyNkZWZpbmUgTUJFRFRMU19ERUJVR19TVFJJUF9QQVJFTlMoIC4uLiApICAgX19WQV9BUkdTX18KKworI2RlZmluZSBNQkVEVExTX1NTTF9ERUJVR19NU0coIGxldmVsLCBhcmdzICkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX2RlYnVnX3ByaW50X21zZyggc3NsLCBsZXZlbCwgX19GSUxFX18sIF9fTElORV9fLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfREVCVUdfU1RSSVBfUEFSRU5TIGFyZ3MgKQorCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggbGV2ZWwsIHRleHQsIHJldCApICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX2RlYnVnX3ByaW50X3JldCggc3NsLCBsZXZlbCwgX19GSUxFX18sIF9fTElORV9fLCB0ZXh0LCByZXQgKQorCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggbGV2ZWwsIHRleHQsIGJ1ZiwgbGVuICkgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX2RlYnVnX3ByaW50X2J1Ziggc3NsLCBsZXZlbCwgX19GSUxFX18sIF9fTElORV9fLCB0ZXh0LCBidWYsIGxlbiApCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX01QSSggbGV2ZWwsIHRleHQsIFggKSAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX2RlYnVnX3ByaW50X21waSggc3NsLCBsZXZlbCwgX19GSUxFX18sIF9fTElORV9fLCB0ZXh0LCBYICkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorI2RlZmluZSBNQkVEVExTX1NTTF9ERUJVR19FQ1AoIGxldmVsLCB0ZXh0LCBYICkgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19kZWJ1Z19wcmludF9lY3AoIHNzbCwgbGV2ZWwsIF9fRklMRV9fLCBfX0xJTkVfXywgdGV4dCwgWCApCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorI2RlZmluZSBNQkVEVExTX1NTTF9ERUJVR19DUlQoIGxldmVsLCB0ZXh0LCBjcnQgKSAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19kZWJ1Z19wcmludF9jcnQoIHNzbCwgbGV2ZWwsIF9fRklMRV9fLCBfX0xJTkVfXywgdGV4dCwgY3J0ICkKKyNlbmRpZgorCisjZWxzZSAvKiBNQkVEVExTX0RFQlVHX0MgKi8KKworI2RlZmluZSBNQkVEVExTX1NTTF9ERUJVR19NU0coIGxldmVsLCBhcmdzICkgICAgICAgICAgICBkbyB7IH0gd2hpbGUoIDAgKQorI2RlZmluZSBNQkVEVExTX1NTTF9ERUJVR19SRVQoIGxldmVsLCB0ZXh0LCByZXQgKSAgICAgICBkbyB7IH0gd2hpbGUoIDAgKQorI2RlZmluZSBNQkVEVExTX1NTTF9ERUJVR19CVUYoIGxldmVsLCB0ZXh0LCBidWYsIGxlbiApICBkbyB7IH0gd2hpbGUoIDAgKQorI2RlZmluZSBNQkVEVExTX1NTTF9ERUJVR19NUEkoIGxldmVsLCB0ZXh0LCBYICkgICAgICAgICBkbyB7IH0gd2hpbGUoIDAgKQorI2RlZmluZSBNQkVEVExTX1NTTF9ERUJVR19FQ1AoIGxldmVsLCB0ZXh0LCBYICkgICAgICAgICBkbyB7IH0gd2hpbGUoIDAgKQorI2RlZmluZSBNQkVEVExTX1NTTF9ERUJVR19DUlQoIGxldmVsLCB0ZXh0LCBjcnQgKSAgICAgICBkbyB7IH0gd2hpbGUoIDAgKQorCisjZW5kaWYgLyogTUJFRFRMU19ERUJVR19DICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICBTZXQgdGhlIHRocmVzaG9sZCBlcnJvciBsZXZlbCB0byBoYW5kbGUgZ2xvYmFsbHkgYWxsIGRlYnVnIG91dHB1dC4KKyAqICAgICAgICAgIERlYnVnIG1lc3NhZ2VzIHRoYXQgaGF2ZSBhIGxldmVsIG92ZXIgdGhlIHRocmVzaG9sZCB2YWx1ZSBhcmUKKyAqICAgICAgICAgIGRpc2NhcmRlZC4KKyAqICAgICAgICAgIChEZWZhdWx0IHZhbHVlOiAwID0gTm8gZGVidWcgKQorICoKKyAqIFxwYXJhbSB0aHJlc2hvbGQgICAgIHRoZXNob2xkIGxldmVsIG9mIG1lc3NhZ2VzIHRvIGZpbHRlciBvbi4gTWVzc2FnZXMgYXQgYQorICogICAgICAgICAgICAgICAgICAgICAgaGlnaGVyIGxldmVsIHdpbGwgYmUgZGlzY2FyZGVkLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gRGVidWcgbGV2ZWxzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCBObyBkZWJ1ZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEgRXJyb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAyIFN0YXRlIGNoYW5nZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDMgSW5mb3JtYXRpb25hbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDQgVmVyYm9zZQorICovCit2b2lkIG1iZWR0bHNfZGVidWdfc2V0X3RocmVzaG9sZCggaW50IHRocmVzaG9sZCApOworCisvKioKKyAqIFxicmllZiAgICBQcmludCBhIG1lc3NhZ2UgdG8gdGhlIGRlYnVnIG91dHB1dC4gVGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgdXNlZAorICogICAgICAgICAgdGhyb3VnaCB0aGUgTUJFRFRMU19TU0xfREVCVUdfTVNHKCkgbWFjcm8sIHdoaWNoIHN1cHBsaWVzIHRoZSBzc2wKKyAqICAgICAgICAgIGNvbnRleHQsIGZpbGUgYW5kIGxpbmUgbnVtYmVyIHBhcmFtZXRlcnMuCisgKgorICogXHBhcmFtIHNzbCAgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIGxldmVsICAgICBlcnJvciBsZXZlbCBvZiB0aGUgZGVidWcgbWVzc2FnZQorICogXHBhcmFtIGZpbGUgICAgICBmaWxlIHRoZSBtZXNzYWdlIGhhcyBvY2N1cnJlZCBpbgorICogXHBhcmFtIGxpbmUgICAgICBsaW5lIG51bWJlciB0aGUgbWVzc2FnZSBoYXMgb2NjdXJyZWQgYXQKKyAqIFxwYXJhbSBmb3JtYXQgICAgZm9ybWF0IHNwZWNpZmllciwgaW4gcHJpbnRmIGZvcm1hdAorICogXHBhcmFtIC4uLiAgICAgICB2YXJpYWJsZXMgdXNlZCBieSB0aGUgZm9ybWF0IHNwZWNpZmllcgorICoKKyAqIFxhdHRlbnRpb24gICAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgSU5URVJOQUwgdXNhZ2Ugd2l0aGluIHRoZQorICogICAgICAgICAgICAgICAgICBsaWJyYXJ5IG9ubHkuCisgKi8KK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9tc2coIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLiApOworCisvKioKKyAqIFxicmllZiAgIFByaW50IHRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiB0byB0aGUgZGVidWcgb3V0cHV0LiBUaGlzCisgKiAgICAgICAgICBmdW5jdGlvbiBpcyBhbHdheXMgdXNlZCB0aHJvdWdoIHRoZSBNQkVEVExTX1NTTF9ERUJVR19SRVQoKSBtYWNybywKKyAqICAgICAgICAgIHdoaWNoIHN1cHBsaWVzIHRoZSBzc2wgY29udGV4dCwgZmlsZSBhbmQgbGluZSBudW1iZXIgcGFyYW1ldGVycy4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gbGV2ZWwgICAgIGVycm9yIGxldmVsIG9mIHRoZSBkZWJ1ZyBtZXNzYWdlCisgKiBccGFyYW0gZmlsZSAgICAgIGZpbGUgdGhlIGVycm9yIGhhcyBvY2N1cnJlZCBpbgorICogXHBhcmFtIGxpbmUgICAgICBsaW5lIG51bWJlciB0aGUgZXJyb3IgaGFzIG9jY3VycmVkIGluCisgKiBccGFyYW0gdGV4dCAgICAgIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0aGF0IHJldHVybmVkIHRoZSBlcnJvcgorICogXHBhcmFtIHJldCAgICAgICB0aGUgcmV0dXJuIGNvZGUgdmFsdWUKKyAqCisgKiBcYXR0ZW50aW9uICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIElOVEVSTkFMIHVzYWdlIHdpdGhpbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgbGlicmFyeSBvbmx5LgorICovCit2b2lkIG1iZWR0bHNfZGVidWdfcHJpbnRfcmV0KCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0ZXh0LCBpbnQgcmV0ICk7CisKKy8qKgorICogXGJyaWVmICAgT3V0cHV0IGEgYnVmZmVyIG9mIHNpemUgbGVuIGJ5dGVzIHRvIHRoZSBkZWJ1ZyBvdXRwdXQuIFRoaXMgZnVuY3Rpb24KKyAqICAgICAgICAgIGlzIGFsd2F5cyB1c2VkIHRocm91Z2ggdGhlIE1CRURUTFNfU1NMX0RFQlVHX0JVRigpIG1hY3JvLAorICogICAgICAgICAgd2hpY2ggc3VwcGxpZXMgdGhlIHNzbCBjb250ZXh0LCBmaWxlIGFuZCBsaW5lIG51bWJlciBwYXJhbWV0ZXJzLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBsZXZlbCAgICAgZXJyb3IgbGV2ZWwgb2YgdGhlIGRlYnVnIG1lc3NhZ2UKKyAqIFxwYXJhbSBmaWxlICAgICAgZmlsZSB0aGUgZXJyb3IgaGFzIG9jY3VycmVkIGluCisgKiBccGFyYW0gbGluZSAgICAgIGxpbmUgbnVtYmVyIHRoZSBlcnJvciBoYXMgb2NjdXJyZWQgaW4KKyAqIFxwYXJhbSB0ZXh0ICAgICAgYSBuYW1lIG9yIGxhYmVsIGZvciB0aGUgYnVmZmVyIGJlaW5nIGR1bXBlZC4gTm9ybWFsbHkgdGhlCisgKiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG9yIGJ1ZmZlciBuYW1lCisgKiBccGFyYW0gYnVmICAgICAgIHRoZSBidWZmZXIgdG8gYmUgb3V0cHV0dGVkCisgKiBccGFyYW0gbGVuICAgICAgIGxlbmd0aCBvZiB0aGUgYnVmZmVyCisgKgorICogXGF0dGVudGlvbiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBJTlRFUk5BTCB1c2FnZSB3aXRoaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgIGxpYnJhcnkgb25seS4KKyAqLwordm9pZCBtYmVkdGxzX2RlYnVnX3ByaW50X2J1ZiggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisvKioKKyAqIFxicmllZiAgIFByaW50IGEgTVBJIHZhcmlhYmxlIHRvIHRoZSBkZWJ1ZyBvdXRwdXQuIFRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzCisgKiAgICAgICAgICB1c2VkIHRocm91Z2ggdGhlIE1CRURUTFNfU1NMX0RFQlVHX01QSSgpIG1hY3JvLCB3aGljaCBzdXBwbGllcyB0aGUKKyAqICAgICAgICAgIHNzbCBjb250ZXh0LCBmaWxlIGFuZCBsaW5lIG51bWJlciBwYXJhbWV0ZXJzLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBsZXZlbCAgICAgZXJyb3IgbGV2ZWwgb2YgdGhlIGRlYnVnIG1lc3NhZ2UKKyAqIFxwYXJhbSBmaWxlICAgICAgZmlsZSB0aGUgZXJyb3IgaGFzIG9jY3VycmVkIGluCisgKiBccGFyYW0gbGluZSAgICAgIGxpbmUgbnVtYmVyIHRoZSBlcnJvciBoYXMgb2NjdXJyZWQgaW4KKyAqIFxwYXJhbSB0ZXh0ICAgICAgYSBuYW1lIG9yIGxhYmVsIGZvciB0aGUgTVBJIGJlaW5nIG91dHB1dC4gTm9ybWFsbHkgdGhlCisgKiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUKKyAqIFxwYXJhbSBYICAgICAgICAgdGhlIE1QSSB2YXJpYWJsZQorICoKKyAqIFxhdHRlbnRpb24gICAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgSU5URVJOQUwgdXNhZ2Ugd2l0aGluIHRoZQorICogICAgICAgICAgICAgICAgICBsaWJyYXJ5IG9ubHkuCisgKi8KK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9tcGkoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IG1iZWR0bHNfbXBpICpYICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKy8qKgorICogXGJyaWVmICAgUHJpbnQgYW4gRUNQIHBvaW50IHRvIHRoZSBkZWJ1ZyBvdXRwdXQuIFRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzCisgKiAgICAgICAgICB1c2VkIHRocm91Z2ggdGhlIE1CRURUTFNfU1NMX0RFQlVHX0VDUCgpIG1hY3JvLCB3aGljaCBzdXBwbGllcyB0aGUKKyAqICAgICAgICAgIHNzbCBjb250ZXh0LCBmaWxlIGFuZCBsaW5lIG51bWJlciBwYXJhbWV0ZXJzLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBsZXZlbCAgICAgZXJyb3IgbGV2ZWwgb2YgdGhlIGRlYnVnIG1lc3NhZ2UKKyAqIFxwYXJhbSBmaWxlICAgICAgZmlsZSB0aGUgZXJyb3IgaGFzIG9jY3VycmVkIGluCisgKiBccGFyYW0gbGluZSAgICAgIGxpbmUgbnVtYmVyIHRoZSBlcnJvciBoYXMgb2NjdXJyZWQgaW4KKyAqIFxwYXJhbSB0ZXh0ICAgICAgYSBuYW1lIG9yIGxhYmVsIGZvciB0aGUgRUNQIHBvaW50IGJlaW5nIG91dHB1dC4gTm9ybWFsbHkgdGhlCisgKiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUKKyAqIFxwYXJhbSBYICAgICAgICAgdGhlIEVDUCBwb2ludAorICoKKyAqIFxhdHRlbnRpb24gICAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgSU5URVJOQUwgdXNhZ2Ugd2l0aGluIHRoZQorICogICAgICAgICAgICAgICAgICBsaWJyYXJ5IG9ubHkuCisgKi8KK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9lY3AoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpYICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorLyoqCisgKiBcYnJpZWYgICBQcmludCBhIFguNTA5IGNlcnRpZmljYXRlIHN0cnVjdHVyZSB0byB0aGUgZGVidWcgb3V0cHV0LiBUaGlzCisgKiAgICAgICAgICBmdW5jdGlvbiBpcyBhbHdheXMgdXNlZCB0aHJvdWdoIHRoZSBNQkVEVExTX1NTTF9ERUJVR19DUlQoKSBtYWNybywKKyAqICAgICAgICAgIHdoaWNoIHN1cHBsaWVzIHRoZSBzc2wgY29udGV4dCwgZmlsZSBhbmQgbGluZSBudW1iZXIgcGFyYW1ldGVycy4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gbGV2ZWwgICAgIGVycm9yIGxldmVsIG9mIHRoZSBkZWJ1ZyBtZXNzYWdlCisgKiBccGFyYW0gZmlsZSAgICAgIGZpbGUgdGhlIGVycm9yIGhhcyBvY2N1cnJlZCBpbgorICogXHBhcmFtIGxpbmUgICAgICBsaW5lIG51bWJlciB0aGUgZXJyb3IgaGFzIG9jY3VycmVkIGluCisgKiBccGFyYW0gdGV4dCAgICAgIGEgbmFtZSBvciBsYWJlbCBmb3IgdGhlIGNlcnRpZmljYXRlIGJlaW5nIG91dHB1dAorICogXHBhcmFtIGNydCAgICAgICBYLjUwOSBjZXJ0aWZpY2F0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBcYXR0ZW50aW9uICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIElOVEVSTkFMIHVzYWdlIHdpdGhpbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgbGlicmFyeSBvbmx5LgorICovCit2b2lkIG1iZWR0bHNfZGVidWdfcHJpbnRfY3J0KCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0ZXh0LCBjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQgKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZGVidWcuaCAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Rlcy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2EyZWNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9kZXMuaApAQCAtMCwwICsxLDMwNiBAQAorLyoqCisgKiBcZmlsZSBkZXMuaAorICoKKyAqIFxicmllZiBERVMgYmxvY2sgY2lwaGVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfREVTX0gKKyNkZWZpbmUgTUJFRFRMU19ERVNfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZGVmaW5lIE1CRURUTFNfREVTX0VOQ1JZUFQgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19ERVNfREVDUllQVCAgICAgMAorCisjZGVmaW5lIE1CRURUTFNfRVJSX0RFU19JTlZBTElEX0lOUFVUX0xFTkdUSCAgICAgICAgICAgICAgLTB4MDAzMiAgLyoqPCBUaGUgZGF0YSBpbnB1dCBoYXMgYW4gaW52YWxpZCBsZW5ndGguICovCisKKyNkZWZpbmUgTUJFRFRMU19ERVNfS0VZX1NJWkUgICAgOAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19ERVNfQUxUKQorLy8gUmVndWxhciBpbXBsZW1lbnRhdGlvbgorLy8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBERVMgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCBza1szMl07ICAgICAgICAgICAgLyohPCAgREVTIHN1YmtleXMgICAgICAgKi8KK30KK21iZWR0bHNfZGVzX2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyaXBsZS1ERVMgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCBza1s5Nl07ICAgICAgICAgICAgLyohPCAgM0RFUyBzdWJrZXlzICAgICAgKi8KK30KK21iZWR0bHNfZGVzM19jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIERFUyBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIERFUyBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19kZXNfaW5pdCggbWJlZHRsc19kZXNfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsZWFyIERFUyBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIERFUyBjb250ZXh0IHRvIGJlIGNsZWFyZWQKKyAqLwordm9pZCBtYmVkdGxzX2Rlc19mcmVlKCBtYmVkdGxzX2Rlc19jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBUcmlwbGUtREVTIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgREVTMyBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19kZXMzX2luaXQoIG1iZWR0bHNfZGVzM19jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgVHJpcGxlLURFUyBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIERFUzMgY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19kZXMzX2ZyZWUoIG1iZWR0bHNfZGVzM19jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IGtleSBwYXJpdHkgb24gdGhlIGdpdmVuIGtleSB0byBvZGQuCisgKgorICogICAgICAgICAgICAgICAgIERFUyBrZXlzIGFyZSA1NiBiaXRzIGxvbmcsIGJ1dCBlYWNoIGJ5dGUgaXMgcGFkZGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICBhIHBhcml0eSBiaXQgdG8gYWxsb3cgdmVyaWZpY2F0aW9uLgorICoKKyAqIFxwYXJhbSBrZXkgICAgICA4LWJ5dGUgc2VjcmV0IGtleQorICovCit2b2lkIG1iZWR0bHNfZGVzX2tleV9zZXRfcGFyaXR5KCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRV0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2sgdGhhdCBrZXkgcGFyaXR5IG9uIHRoZSBnaXZlbiBrZXkgaXMgb2RkLgorICoKKyAqICAgICAgICAgICAgICAgICBERVMga2V5cyBhcmUgNTYgYml0cyBsb25nLCBidXQgZWFjaCBieXRlIGlzIHBhZGRlZCB3aXRoCisgKiAgICAgICAgICAgICAgICAgYSBwYXJpdHkgYml0IHRvIGFsbG93IHZlcmlmaWNhdGlvbi4KKyAqCisgKiBccGFyYW0ga2V5ICAgICAgOC1ieXRlIHNlY3JldCBrZXkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpcyBwYXJpdHkgd2FzIG9rLCAxIGlmIHBhcml0eSB3YXMgbm90IGNvcnJlY3QuCisgKi8KK2ludCBtYmVkdGxzX2Rlc19rZXlfY2hlY2tfa2V5X3Bhcml0eSggY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkVdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrIHRoYXQga2V5IGlzIG5vdCBhIHdlYWsgb3Igc2VtaS13ZWFrIERFUyBrZXkKKyAqCisgKiBccGFyYW0ga2V5ICAgICAgOC1ieXRlIHNlY3JldCBrZXkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBubyB3ZWFrIGtleSB3YXMgZm91bmQsIDEgaWYgYSB3ZWFrIGtleSB3YXMgaWRlbnRpZmllZC4KKyAqLworaW50IG1iZWR0bHNfZGVzX2tleV9jaGVja193ZWFrKCBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRV0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgREVTIGtleSBzY2hlZHVsZSAoNTYtYml0LCBlbmNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBERVMgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgIDgtYnl0ZSBzZWNyZXQga2V5CisgKgorICogXHJldHVybiAgICAgICAgIDAKKyAqLworaW50IG1iZWR0bHNfZGVzX3NldGtleV9lbmMoIG1iZWR0bHNfZGVzX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkVdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIERFUyBrZXkgc2NoZWR1bGUgKDU2LWJpdCwgZGVjcnlwdGlvbikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgREVTIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBrZXkgICAgICA4LWJ5dGUgc2VjcmV0IGtleQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwCisgKi8KK2ludCBtYmVkdGxzX2Rlc19zZXRrZXlfZGVjKCBtYmVkdGxzX2Rlc19jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFXSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmlwbGUtREVTIGtleSBzY2hlZHVsZSAoMTEyLWJpdCwgZW5jcnlwdGlvbikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgM0RFUyBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0ga2V5ICAgICAgMTYtYnl0ZSBzZWNyZXQga2V5CisgKgorICogXHJldHVybiAgICAgICAgIDAKKyAqLworaW50IG1iZWR0bHNfZGVzM19zZXQya2V5X2VuYyggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRSAqIDJdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyaXBsZS1ERVMga2V5IHNjaGVkdWxlICgxMTItYml0LCBkZWNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAzREVTIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBrZXkgICAgICAxNi1ieXRlIHNlY3JldCBrZXkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMAorICovCitpbnQgbWJlZHRsc19kZXMzX3NldDJrZXlfZGVjKCBtYmVkdGxzX2RlczNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFICogMl0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJpcGxlLURFUyBrZXkgc2NoZWR1bGUgKDE2OC1iaXQsIGVuY3J5cHRpb24pCisgKgorICogXHBhcmFtIGN0eCAgICAgIDNERVMgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgIDI0LWJ5dGUgc2VjcmV0IGtleQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwCisgKi8KK2ludCBtYmVkdGxzX2RlczNfc2V0M2tleV9lbmMoIG1iZWR0bHNfZGVzM19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkUgKiAzXSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmlwbGUtREVTIGtleSBzY2hlZHVsZSAoMTY4LWJpdCwgZGVjcnlwdGlvbikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgM0RFUyBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0ga2V5ICAgICAgMjQtYnl0ZSBzZWNyZXQga2V5CisgKgorICogXHJldHVybiAgICAgICAgIDAKKyAqLworaW50IG1iZWR0bHNfZGVzM19zZXQza2V5X2RlYyggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRSAqIDNdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIERFUy1FQ0IgYmxvY2sgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgIERFUyBjb250ZXh0CisgKiBccGFyYW0gaW5wdXQgICAgNjQtYml0IGlucHV0IGJsb2NrCisgKiBccGFyYW0gb3V0cHV0ICAgNjQtYml0IG91dHB1dCBibG9jaworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfZGVzX2NyeXB0X2VjYiggbWJlZHRsc19kZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzhdLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs4XSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIERFUy1DQkMgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICoKKyAqIFxub3RlICAgICAgICAgICBVcG9uIGV4aXQsIHRoZSBjb250ZW50IG9mIHRoZSBJViBpcyB1cGRhdGVkIHNvIHRoYXQgeW91IGNhbgorICogICAgICAgICAgICAgICAgIGNhbGwgdGhlIGZ1bmN0aW9uIHNhbWUgZnVuY3Rpb24gYWdhaW4gb24gdGhlIGZvbGxvd2luZworICogICAgICAgICAgICAgICAgIGJsb2NrKHMpIG9mIGRhdGEgYW5kIGdldCB0aGUgc2FtZSByZXN1bHQgYXMgaWYgaXQgd2FzCisgKiAgICAgICAgICAgICAgICAgZW5jcnlwdGVkIGluIG9uZSBjYWxsLiBUaGlzIGFsbG93cyBhICJzdHJlYW1pbmciIHVzYWdlLgorICogICAgICAgICAgICAgICAgIElmIG9uIHRoZSBvdGhlciBoYW5kIHlvdSBuZWVkIHRvIHJldGFpbiB0aGUgY29udGVudHMgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgSVYsIHlvdSBzaG91bGQgZWl0aGVyIHNhdmUgaXQgbWFudWFsbHkgb3IgdXNlIHRoZSBjaXBoZXIKKyAqICAgICAgICAgICAgICAgICBtb2R1bGUgaW5zdGVhZC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgREVTIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX0RFU19FTkNSWVBUIG9yIE1CRURUTFNfREVTX0RFQ1JZUFQKKyAqIFxwYXJhbSBsZW5ndGggICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpdiAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKHVwZGF0ZWQgYWZ0ZXIgdXNlKQorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKi8KK2ludCBtYmVkdGxzX2Rlc19jcnlwdF9jYmMoIG1iZWR0bHNfZGVzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbOF0sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICAzREVTLUVDQiBibG9jayBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgM0RFUyBjb250ZXh0CisgKiBccGFyYW0gaW5wdXQgICAgNjQtYml0IGlucHV0IGJsb2NrCisgKiBccGFyYW0gb3V0cHV0ICAgNjQtYml0IG91dHB1dCBibG9jaworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfZGVzM19jcnlwdF9lY2IoIG1iZWR0bHNfZGVzM19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzhdLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbOF0gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisvKioKKyAqIFxicmllZiAgICAgICAgICAzREVTLUNCQyBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKgorICogXG5vdGUgICAgICAgICAgIFVwb24gZXhpdCwgdGhlIGNvbnRlbnQgb2YgdGhlIElWIGlzIHVwZGF0ZWQgc28gdGhhdCB5b3UgY2FuCisgKiAgICAgICAgICAgICAgICAgY2FsbCB0aGUgZnVuY3Rpb24gc2FtZSBmdW5jdGlvbiBhZ2FpbiBvbiB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgICAgICAgICAgYmxvY2socykgb2YgZGF0YSBhbmQgZ2V0IHRoZSBzYW1lIHJlc3VsdCBhcyBpZiBpdCB3YXMKKyAqICAgICAgICAgICAgICAgICBlbmNyeXB0ZWQgaW4gb25lIGNhbGwuIFRoaXMgYWxsb3dzIGEgInN0cmVhbWluZyIgdXNhZ2UuCisgKiAgICAgICAgICAgICAgICAgSWYgb24gdGhlIG90aGVyIGhhbmQgeW91IG5lZWQgdG8gcmV0YWluIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICBJViwgeW91IHNob3VsZCBlaXRoZXIgc2F2ZSBpdCBtYW51YWxseSBvciB1c2UgdGhlIGNpcGhlcgorICogICAgICAgICAgICAgICAgIG1vZHVsZSBpbnN0ZWFkLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAzREVTIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX0RFU19FTkNSWVBUIG9yIE1CRURUTFNfREVTX0RFQ1JZUFQKKyAqIFxwYXJhbSBsZW5ndGggICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpdiAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKHVwZGF0ZWQgYWZ0ZXIgdXNlKQorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfREVTX0lOVkFMSURfSU5QVVRfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2RlczNfY3J5cHRfY2JjKCBtYmVkdGxzX2RlczNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdls4XSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW50ZXJuYWwgZnVuY3Rpb24gZm9yIGtleSBleHBhbnNpb24uCisgKiAgICAgICAgICAgICAgICAgKE9ubHkgZXhwb3NlZCB0byBhbGxvdyBvdmVycmlkaW5nIGl0LAorICogICAgICAgICAgICAgICAgIHNlZSBNQkVEVExTX0RFU19TRVRLRVlfQUxUKQorICoKKyAqIFxwYXJhbSBTSyAgICAgICBSb3VuZCBrZXlzCisgKiBccGFyYW0ga2V5ICAgICAgQmFzZSBrZXkKKyAqLwordm9pZCBtYmVkdGxzX2Rlc19zZXRrZXkoIHVpbnQzMl90IFNLWzMyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRV0gKTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX0RFU19BTFQgKi8KKyNpbmNsdWRlICJkZXNfYWx0LmgiCisjZW5kaWYgLyogTUJFRFRMU19ERVNfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfZGVzX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGRlcy5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2RobS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9kaG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FiMTUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9kaG0uaApAQCAtMCwwICsxLDMwNSBAQAorLyoqCisgKiBcZmlsZSBkaG0uaAorICoKKyAqIFxicmllZiBEaWZmaWUtSGVsbG1hbi1NZXJrbGUga2V5IGV4Y2hhbmdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfREhNX0gKKyNkZWZpbmUgTUJFRFRMU19ESE1fSAorCisjaW5jbHVkZSAiYmlnbnVtLmgiCisKKy8qCisgKiBESE0gRXJyb3IgY29kZXMKKyAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ESE1fQkFEX0lOUFVUX0RBVEEgICAgICAgICAgICAgICAgICAgIC0weDMwODAgIC8qKjwgQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0RITV9SRUFEX1BBUkFNU19GQUlMRUQgICAgICAgICAgICAgICAgLTB4MzEwMCAgLyoqPCBSZWFkaW5nIG9mIHRoZSBESE0gcGFyYW1ldGVycyBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0RITV9NQUtFX1BBUkFNU19GQUlMRUQgICAgICAgICAgICAgICAgLTB4MzE4MCAgLyoqPCBNYWtpbmcgb2YgdGhlIERITSBwYXJhbWV0ZXJzIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfREhNX1JFQURfUFVCTElDX0ZBSUxFRCAgICAgICAgICAgICAgICAtMHgzMjAwICAvKio8IFJlYWRpbmcgb2YgdGhlIHB1YmxpYyB2YWx1ZXMgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ESE1fTUFLRV9QVUJMSUNfRkFJTEVEICAgICAgICAgICAgICAgIC0weDMyODAgIC8qKjwgTWFraW5nIG9mIHRoZSBwdWJsaWMgdmFsdWUgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ESE1fQ0FMQ19TRUNSRVRfRkFJTEVEICAgICAgICAgICAgICAgIC0weDMzMDAgIC8qKjwgQ2FsY3VsYXRpb24gb2YgdGhlIERITSBzZWNyZXQgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ESE1fSU5WQUxJRF9GT1JNQVQgICAgICAgICAgICAgICAgICAgIC0weDMzODAgIC8qKjwgVGhlIEFTTi4xIGRhdGEgaXMgbm90IGZvcm1hdHRlZCBjb3JyZWN0bHkuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0RITV9BTExPQ19GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgLTB4MzQwMCAgLyoqPCBBbGxvY2F0aW9uIG9mIG1lbW9yeSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0RITV9GSUxFX0lPX0VSUk9SICAgICAgICAgICAgICAgICAgICAgLTB4MzQ4MCAgLyoqPCBSZWFkL3dyaXRlIG9mIGZpbGUgZmFpbGVkLiAqLworCisvKioKKyAqIFJGQyAzNTI2IGRlZmluZXMgYSBudW1iZXIgb2Ygc3RhbmRhcmRpemVkIERpZmZpZS1IZWxsbWFuIGdyb3VwcworICogZm9yIElLRS4KKyAqIFJGQyA1MTE0IGRlZmluZXMgYSBudW1iZXIgb2Ygc3RhbmRhcmRpemVkIERpZmZpZS1IZWxsbWFuIGdyb3VwcworICogdGhhdCBjYW4gYmUgdXNlZC4KKyAqCisgKiBTb21lIGFyZSBpbmNsdWRlZCBoZXJlIGZvciBjb252ZW5pZW5jZS4KKyAqCisgKiBJbmNsdWRlZCBhcmU6CisgKiAgUkZDIDM1MjYgMy4gICAgMjA0OC1iaXQgTU9EUCBHcm91cAorICogIFJGQyAzNTI2IDQuICAgIDMwNzItYml0IE1PRFAgR3JvdXAKKyAqICBSRkMgMzUyNiA1LiAgICA0MDk2LWJpdCBNT0RQIEdyb3VwCisgKiAgUkZDIDUxMTQgMi4yLiAgMjA0OC1iaXQgTU9EUCBHcm91cCB3aXRoIDIyNC1iaXQgUHJpbWUgT3JkZXIgU3ViZ3JvdXAKKyAqLworI2RlZmluZSBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMjA0OF9QICAgICAgICAgICAgICAgXAorICAgICJGRkZGRkZGRkZGRkZGRkZGQzkwRkRBQTIyMTY4QzIzNEM0QzY2MjhCODBEQzFDRDEiIFwKKyAgICAiMjkwMjRFMDg4QTY3Q0M3NDAyMEJCRUE2M0IxMzlCMjI1MTRBMDg3OThFMzQwNEREIiBcCisgICAgIkVGOTUxOUIzQ0QzQTQzMUIzMDJCMEE2REYyNUYxNDM3NEZFMTM1NkQ2RDUxQzI0NSIgXAorICAgICJFNDg1QjU3NjYyNUU3RUM2RjQ0QzQyRTlBNjM3RUQ2QjBCRkY1Q0I2RjQwNkI3RUQiIFwKKyAgICAiRUUzODZCRkI1QTg5OUZBNUFFOUYyNDExN0M0QjFGRTY0OTI4NjY1MUVDRTQ1QjNEIiBcCisgICAgIkMyMDA3Q0I4QTE2M0JGMDU5OERBNDgzNjFDNTVEMzlBNjkxNjNGQThGRDI0Q0Y1RiIgXAorICAgICI4MzY1NUQyM0RDQTNBRDk2MUM2MkYzNTYyMDg1NTJCQjlFRDUyOTA3NzA5Njk2NkQiIFwKKyAgICAiNjcwQzM1NEU0QUJDOTgwNEYxNzQ2QzA4Q0ExODIxN0MzMjkwNUU0NjJFMzZDRTNCIiBcCisgICAgIkUzOUU3NzJDMTgwRTg2MDM5QjI3ODNBMkVDMDdBMjhGQjVDNTVERjA2RjRDNTJDOSIgXAorICAgICJERTJCQ0JGNjk1NTgxNzE4Mzk5NTQ5N0NFQTk1NkFFNTE1RDIyNjE4OThGQTA1MTAiIFwKKyAgICAiMTU3MjhFNUE4QUFDQUE2OEZGRkZGRkZGRkZGRkZGRkYiCisKKyNkZWZpbmUgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzIwNDhfRyAgICAgICAgICAiMDIiCisKKyNkZWZpbmUgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzMwNzJfUCAgICAgICAgICAgICAgIFwKKyAgICAiRkZGRkZGRkZGRkZGRkZGRkM5MEZEQUEyMjE2OEMyMzRDNEM2NjI4QjgwREMxQ0QxIiBcCisgICAgIjI5MDI0RTA4OEE2N0NDNzQwMjBCQkVBNjNCMTM5QjIyNTE0QTA4Nzk4RTM0MDRERCIgXAorICAgICJFRjk1MTlCM0NEM0E0MzFCMzAyQjBBNkRGMjVGMTQzNzRGRTEzNTZENkQ1MUMyNDUiIFwKKyAgICAiRTQ4NUI1NzY2MjVFN0VDNkY0NEM0MkU5QTYzN0VENkIwQkZGNUNCNkY0MDZCN0VEIiBcCisgICAgIkVFMzg2QkZCNUE4OTlGQTVBRTlGMjQxMTdDNEIxRkU2NDkyODY2NTFFQ0U0NUIzRCIgXAorICAgICJDMjAwN0NCOEExNjNCRjA1OThEQTQ4MzYxQzU1RDM5QTY5MTYzRkE4RkQyNENGNUYiIFwKKyAgICAiODM2NTVEMjNEQ0EzQUQ5NjFDNjJGMzU2MjA4NTUyQkI5RUQ1MjkwNzcwOTY5NjZEIiBcCisgICAgIjY3MEMzNTRFNEFCQzk4MDRGMTc0NkMwOENBMTgyMTdDMzI5MDVFNDYyRTM2Q0UzQiIgXAorICAgICJFMzlFNzcyQzE4MEU4NjAzOUIyNzgzQTJFQzA3QTI4RkI1QzU1REYwNkY0QzUyQzkiIFwKKyAgICAiREUyQkNCRjY5NTU4MTcxODM5OTU0OTdDRUE5NTZBRTUxNUQyMjYxODk4RkEwNTEwIiBcCisgICAgIjE1NzI4RTVBOEFBQUM0MkRBRDMzMTcwRDA0NTA3QTMzQTg1NTIxQUJERjFDQkE2NCIgXAorICAgICJFQ0ZCODUwNDU4REJFRjBBOEFFQTcxNTc1RDA2MEM3REIzOTcwRjg1QTZFMUU0QzciIFwKKyAgICAiQUJGNUFFOENEQjA5MzNENzFFOEM5NEUwNEEyNTYxOURDRUUzRDIyNjFBRDJFRTZCIiBcCisgICAgIkYxMkZGQTA2RDk4QTA4NjREODc2MDI3MzNFQzg2QTY0NTIxRjJCMTgxNzdCMjAwQyIgXAorICAgICJCQkUxMTc1NzdBNjE1RDZDNzcwOTg4QzBCQUQ5NDZFMjA4RTI0RkEwNzRFNUFCMzEiIFwKKyAgICAiNDNEQjVCRkNFMEZEMTA4RTRCODJEMTIwQTkzQUQyQ0FGRkZGRkZGRkZGRkZGRkZGIgorCisjZGVmaW5lIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8zMDcyX0cgICAgICAgICAgIjAyIgorCisjZGVmaW5lIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF80MDk2X1AgICAgICAgICAgICAgICAgXAorICAgICJGRkZGRkZGRkZGRkZGRkZGQzkwRkRBQTIyMTY4QzIzNEM0QzY2MjhCODBEQzFDRDEiIFwKKyAgICAiMjkwMjRFMDg4QTY3Q0M3NDAyMEJCRUE2M0IxMzlCMjI1MTRBMDg3OThFMzQwNEREIiBcCisgICAgIkVGOTUxOUIzQ0QzQTQzMUIzMDJCMEE2REYyNUYxNDM3NEZFMTM1NkQ2RDUxQzI0NSIgXAorICAgICJFNDg1QjU3NjYyNUU3RUM2RjQ0QzQyRTlBNjM3RUQ2QjBCRkY1Q0I2RjQwNkI3RUQiIFwKKyAgICAiRUUzODZCRkI1QTg5OUZBNUFFOUYyNDExN0M0QjFGRTY0OTI4NjY1MUVDRTQ1QjNEIiBcCisgICAgIkMyMDA3Q0I4QTE2M0JGMDU5OERBNDgzNjFDNTVEMzlBNjkxNjNGQThGRDI0Q0Y1RiIgXAorICAgICI4MzY1NUQyM0RDQTNBRDk2MUM2MkYzNTYyMDg1NTJCQjlFRDUyOTA3NzA5Njk2NkQiIFwKKyAgICAiNjcwQzM1NEU0QUJDOTgwNEYxNzQ2QzA4Q0ExODIxN0MzMjkwNUU0NjJFMzZDRTNCIiBcCisgICAgIkUzOUU3NzJDMTgwRTg2MDM5QjI3ODNBMkVDMDdBMjhGQjVDNTVERjA2RjRDNTJDOSIgXAorICAgICJERTJCQ0JGNjk1NTgxNzE4Mzk5NTQ5N0NFQTk1NkFFNTE1RDIyNjE4OThGQTA1MTAiIFwKKyAgICAiMTU3MjhFNUE4QUFBQzQyREFEMzMxNzBEMDQ1MDdBMzNBODU1MjFBQkRGMUNCQTY0IiBcCisgICAgIkVDRkI4NTA0NThEQkVGMEE4QUVBNzE1NzVEMDYwQzdEQjM5NzBGODVBNkUxRTRDNyIgXAorICAgICJBQkY1QUU4Q0RCMDkzM0Q3MUU4Qzk0RTA0QTI1NjE5RENFRTNEMjI2MUFEMkVFNkIiIFwKKyAgICAiRjEyRkZBMDZEOThBMDg2NEQ4NzYwMjczM0VDODZBNjQ1MjFGMkIxODE3N0IyMDBDIiBcCisgICAgIkJCRTExNzU3N0E2MTVENkM3NzA5ODhDMEJBRDk0NkUyMDhFMjRGQTA3NEU1QUIzMSIgXAorICAgICI0M0RCNUJGQ0UwRkQxMDhFNEI4MkQxMjBBOTIxMDgwMTFBNzIzQzEyQTc4N0U2RDciIFwKKyAgICAiODg3MTlBMTBCREJBNUIyNjk5QzMyNzE4NkFGNEUyM0MxQTk0NjgzNEI2MTUwQkRBIiBcCisgICAgIjI1ODNFOUNBMkFENDRDRThEQkJCQzJEQjA0REU4RUY5MkU4RUZDMTQxRkJFQ0FBNiIgXAorICAgICIyODdDNTk0NzRFNkJDMDVEOTlCMjk2NEZBMDkwQzNBMjIzM0JBMTg2NTE1QkU3RUQiIFwKKyAgICAiMUY2MTI5NzBDRUUyRDdBRkI4MUJERDc2MjE3MDQ4MUNEMDA2OTEyN0Q1QjA1QUE5IiBcCisgICAgIjkzQjRFQTk4OEQ4RkREQzE4NkZGQjdEQzkwQTZDMDhGNERGNDM1QzkzNDA2MzE5OSIgXAorICAgICJGRkZGRkZGRkZGRkZGRkZGIgorCisjZGVmaW5lIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF80MDk2X0cgICAgICAgICAgIjAyIgorCisjZGVmaW5lIE1CRURUTFNfREhNX1JGQzUxMTRfTU9EUF8yMDQ4X1AgICAgICAgICAgICAgICBcCisgICAgIkFEMTA3RTFFOTEyM0E5RDBENjYwRkFBNzk1NTlDNTFGQTIwRDY0RTU2ODNCOUZEMSIgXAorICAgICJCNTRCMTU5N0I2MUQwQTc1RTZGQTE0MURGOTVBNTZEQkFGOUEzQzQwN0JBMURGMTUiIFwKKyAgICAiRUIzRDY4OEEzMDlDMTgwRTFERTZCODVBMTI3NEEwQTY2RDNGODE1MkFENkFDMjEyIiBcCisgICAgIjkwMzdDOUVERUZEQTRERjhEOTFFOEZFRjU1QjczOTRCN0FENUI3RDBCNkMxMjIwNyIgXAorICAgICJDOUY5OEQxMUVEMzREQkY2QzZCQTBCMkM4QkJDMjdCRTZBMDBFMEEwQjlDNDk3MDgiIFwKKyAgICAiQjNCRjhBMzE3MDkxODgzNjgxMjg2MTMwQkM4OTg1REIxNjAyRTcxNDQxNUQ5MzMwIiBcCisgICAgIjI3ODI3M0M3REUzMUVGREM3MzEwRjcxMjFGRDVBMDc0MTU5ODdEOUFEQzBBNDg2RCIgXAorICAgICJDREY5M0FDQzQ0MzI4Mzg3MzE1RDc1RTE5OEM2NDFBNDgwQ0Q4NkExQjlFNTg3RTgiIFwKKyAgICAiQkU2MEU2OUNDOTI4QjJCOUM1MjE3MkU0MTMwNDJFOUIyM0YxMEIwRTE2RTc5NzYzIiBcCisgICAgIkM5QjUzRENGNEJBODBBMjlFM0ZCNzNDMTZCOEU3NUI5N0VGMzYzRTJGRkEzMUY3MSIgXAorICAgICJDRjlERTUzODRFNzFCODFDMEFDNERGRkUwQzEwRTY0RiIKKworI2RlZmluZSBNQkVEVExTX0RITV9SRkM1MTE0X01PRFBfMjA0OF9HICAgICAgICAgICAgICBcCisgICAgIkFDNDAzMkVGNEYyRDlBRTM5REYzMEI1QzhGRkRBQzUwNkNERUJFN0I4OTk5OENBRiJcCisgICAgIjc0ODY2QTA4Q0ZFNEZGRTNBNjgyNEE0RTEwQjlBNkYwREQ5MjFGMDFBNzBDNEFGQSJcCisgICAgIkFCNzM5RDc3MDBDMjlGNTJDNTdEQjE3QzYyMEE4NjUyQkU1RTkwMDFBOEQ2NkFENyJcCisgICAgIkMxNzY2OTEwMTk5OTAyNEFGNEQwMjcyNzVBQzEzNDhCQjhBNzYyRDA1MjFCQzk4QSJcCisgICAgIkUyNDcxNTA0MjJFQTFFRDQwOTkzOUQ1NERBNzQ2MENEQjVGNkM2QjI1MDcxN0NCRSJcCisgICAgIkYxODBFQjM0MTE4RTk4RDExOTUyOUE0NUQ2RjgzNDU2NkUzMDI1RTMxNkEzMzBFRiJcCisgICAgIkJCNzdBODZGMEMxQUIxNUIwNTFBRTNENDI4QzhGOEFDQjcwQTgxMzcxNTBCOEVFQiJcCisgICAgIjEwRTE4M0VERDE5OTYzREREOUUyNjNFNDc3MDU4OUVGNkFBMjFFN0Y1RjJGRjM4MSJcCisgICAgIkI1MzlDQ0UzNDA5RDEzQ0Q1NjZBRkJCNDhENkMwMTkxODFFMUJDRkU5NEIzMDI2OSJcCisgICAgIkVERkU3MkZFOUI2QUE0QkQ3QjVBMEYxQzcxQ0ZGRjRDMTlDNDE4RTFGNkVDMDE3OSJcCisgICAgIjgxQkMwODdGMkE3MDY1QjM4NEI4OTBEMzE5MUYyQkZBIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIERITSBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHNpemVfdCBsZW47IC8qITwgIHNpemUoUCkgaW4gY2hhcnMgICovCisgICAgbWJlZHRsc19tcGkgUDsgICAgICAvKiE8ICBwcmltZSBtb2R1bHVzICAgICAqLworICAgIG1iZWR0bHNfbXBpIEc7ICAgICAgLyohPCAgZ2VuZXJhdG9yICAgICAgICAgKi8KKyAgICBtYmVkdGxzX21waSBYOyAgICAgIC8qITwgIHNlY3JldCB2YWx1ZSAgICAgICovCisgICAgbWJlZHRsc19tcGkgR1g7ICAgICAvKiE8ICBzZWxmID0gR15YIG1vZCBQICAqLworICAgIG1iZWR0bHNfbXBpIEdZOyAgICAgLyohPCAgcGVlciA9IEdeWSBtb2QgUCAgKi8KKyAgICBtYmVkdGxzX21waSBLOyAgICAgIC8qITwgIGtleSA9IEdZXlggbW9kIFAgICovCisgICAgbWJlZHRsc19tcGkgUlA7ICAgICAvKiE8ICBjYWNoZWQgUl4yIG1vZCBQICAqLworICAgIG1iZWR0bHNfbXBpIFZpOyAgICAgLyohPCAgYmxpbmRpbmcgdmFsdWUgICAgKi8KKyAgICBtYmVkdGxzX21waSBWZjsgICAgIC8qITwgIHVuLWJsaW5kaW5nIHZhbHVlICovCisgICAgbWJlZHRsc19tcGkgcFg7ICAgICAvKiE8ICBwcmV2aW91cyBYICAgICAgICAqLworfQorbWJlZHRsc19kaG1fY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBESE0gY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBESE0gY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfZGhtX2luaXQoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQYXJzZSB0aGUgU2VydmVyS2V5RXhjaGFuZ2UgcGFyYW1ldGVycworICoKKyAqIFxwYXJhbSBjdHggICAgICBESE0gY29udGV4dAorICogXHBhcmFtIHAgICAgICAgICYoc3RhcnQgb2YgaW5wdXQgYnVmZmVyKQorICogXHBhcmFtIGVuZCAgICAgIGVuZCBvZiBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9ESE1fWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfZGhtX3JlYWRfcGFyYW1zKCBtYmVkdGxzX2RobV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXR1cCBhbmQgd3JpdGUgdGhlIFNlcnZlcktleUV4Y2hhbmdlIHBhcmFtZXRlcnMKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgREhNIGNvbnRleHQKKyAqIFxwYXJhbSB4X3NpemUgICBwcml2YXRlIHZhbHVlIHNpemUgaW4gYnl0ZXMKKyAqIFxwYXJhbSBvdXRwdXQgICBkZXN0aW5hdGlvbiBidWZmZXIKKyAqIFxwYXJhbSBvbGVuICAgICBudW1iZXIgb2YgY2hhcnMgd3JpdHRlbgorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgY3R4LT5QIGFuZCBjdHgtPkcKKyAqICAgICAgICAgICAgICAgICBoYXZlIGFscmVhZHkgYmVlbiBwcm9wZXJseSBzZXQgKGZvciBleGFtcGxlCisgKiAgICAgICAgICAgICAgICAgdXNpbmcgbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcgb3IgbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkpLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX0RITV9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19kaG1fbWFrZV9wYXJhbXMoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCwgaW50IHhfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW1wb3J0IHRoZSBwZWVyJ3MgcHVibGljIHZhbHVlIEdeWQorICoKKyAqIFxwYXJhbSBjdHggICAgICBESE0gY29udGV4dAorICogXHBhcmFtIGlucHV0ICAgIGlucHV0IGJ1ZmZlcgorICogXHBhcmFtIGlsZW4gICAgIHNpemUgb2YgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfREhNX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2RobV9yZWFkX3B1YmxpYyggbWJlZHRsc19kaG1fY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENyZWF0ZSBvd24gcHJpdmF0ZSB2YWx1ZSBYIGFuZCBleHBvcnQgR15YCisgKgorICogXHBhcmFtIGN0eCAgICAgIERITSBjb250ZXh0CisgKiBccGFyYW0geF9zaXplICAgcHJpdmF0ZSB2YWx1ZSBzaXplIGluIGJ5dGVzCisgKiBccGFyYW0gb3V0cHV0ICAgZGVzdGluYXRpb24gYnVmZmVyCisgKiBccGFyYW0gb2xlbiAgICAgbXVzdCBiZSBhdCBsZWFzdCBlcXVhbCB0byB0aGUgc2l6ZSBvZiBQLCBjdHgtPmxlbgorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9ESE1fWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfZGhtX21ha2VfcHVibGljKCBtYmVkdGxzX2RobV9jb250ZXh0ICpjdHgsIGludCB4X3NpemUsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBvbGVuLAorICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRGVyaXZlIGFuZCBleHBvcnQgdGhlIHNoYXJlZCBzZWNyZXQgKEdeWSleWCBtb2QgUAorICoKKyAqIFxwYXJhbSBjdHggICAgICBESE0gY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICogXHBhcmFtIG91dHB1dF9zaXplICAgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyCisgKiBccGFyYW0gb2xlbiAgICAgb24gZXhpdCwgaG9sZHMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbgorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbiwgZm9yIGJsaW5kaW5nIHB1cnBvc2VzCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX0RITV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBJZiBub24tTlVMTCwgZl9ybmcgaXMgdXNlZCB0byBibGluZCB0aGUgaW5wdXQgYXMKKyAqICAgICAgICAgICAgICAgICBjb3VudGVybWVhc3VyZSBhZ2FpbnN0IHRpbWluZyBhdHRhY2tzLiBCbGluZGluZyBpcworICogICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgdXNlZCBpZiBhbmQgb25seSBpZiBvdXIgc2VjcmV0IHZhbHVlIFggaXMKKyAqICAgICAgICAgICAgICAgICByZS11c2VkIGFuZCBjb3N0cyBub3RoaW5nIG90aGVyd2lzZSwgc28gaXQgaXMgcmVjb21tZW5kZWQKKyAqICAgICAgICAgICAgICAgICB0byBhbHdheXMgcGFzcyBhIG5vbi1OVUxMIGZfcm5nIGFyZ3VtZW50LgorICovCitpbnQgbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG91dHB1dF9zaXplLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBGcmVlIGFuZCBjbGVhciB0aGUgY29tcG9uZW50cyBvZiBhIERITSBrZXkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgREhNIGNvbnRleHQgdG8gZnJlZSBhbmQgY2xlYXIKKyAqLwordm9pZCBtYmVkdGxzX2RobV9mcmVlKCBtYmVkdGxzX2RobV9jb250ZXh0ICpjdHggKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19BU04xX1BBUlNFX0MpCisvKiogXGluZ3JvdXAgeDUwOV9tb2R1bGUgKi8KKy8qKgorICogXGJyaWVmICAgICAgICAgIFBhcnNlIERITSBwYXJhbWV0ZXJzIGluIFBFTSBvciBERVIgZm9ybWF0CisgKgorICogXHBhcmFtIGRobSAgICAgIERITSBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0gZGhtaW4gICAgaW5wdXQgYnVmZmVyCisgKiBccGFyYW0gZGhtaW5sZW4gc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgKGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlIGZvciBQRU0gZGF0YSkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIERITSBvciBQRU0gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19kaG1fcGFyc2VfZGhtKCBtYmVkdGxzX2RobV9jb250ZXh0ICpkaG0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRobWluLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBkaG1pbmxlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoqIFxpbmdyb3VwIHg1MDlfbW9kdWxlICovCisvKioKKyAqIFxicmllZiAgICAgICAgICBMb2FkIGFuZCBwYXJzZSBESE0gcGFyYW1ldGVycworICoKKyAqIFxwYXJhbSBkaG0gICAgICBESE0gY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIHBhdGggICAgIGZpbGVuYW1lIHRvIHJlYWQgdGhlIERITSBQYXJhbWV0ZXJzIGZyb20KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIERITSBvciBQRU0gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19kaG1fcGFyc2VfZGhtZmlsZSggbWJlZHRsc19kaG1fY29udGV4dCAqZGhtLCBjb25zdCBjaGFyICpwYXRoICk7CisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworI2VuZGlmIC8qIE1CRURUTFNfQVNOMV9QQVJTRV9DICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2RobV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBkaG0uaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lY2RoLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VjZGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjVhMjgxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lY2RoLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qKgorICogXGZpbGUgZWNkaC5oCisgKgorICogXGJyaWVmIEVsbGlwdGljIGN1cnZlIERpZmZpZS1IZWxsbWFuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfRUNESF9ICisjZGVmaW5lIE1CRURUTFNfRUNESF9ICisKKyNpbmNsdWRlICJlY3AuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFdoZW4gaW1wb3J0aW5nIGZyb20gYW4gRUMga2V5LCBzZWxlY3QgaWYgaXQgaXMgb3VyIGtleSBvciB0aGUgcGVlcidzIGtleQorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBNQkVEVExTX0VDREhfT1VSUywKKyAgICBNQkVEVExTX0VDREhfVEhFSVJTLAorfSBtYmVkdGxzX2VjZGhfc2lkZTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVDREggY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7ICAgICAgLyohPCAgZWxsaXB0aWMgY3VydmUgdXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgbWJlZHRsc19tcGkgZDsgICAgICAgICAgICAgIC8qITwgIG91ciBzZWNyZXQgdmFsdWUgKHByaXZhdGUga2V5KSAgICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfZWNwX3BvaW50IFE7ICAgICAgICAvKiE8ICBvdXIgcHVibGljIHZhbHVlIChwdWJsaWMga2V5KSAgICAgICAgICAgICAgICAgKi8KKyAgICBtYmVkdGxzX2VjcF9wb2ludCBRcDsgICAgICAgLyohPCAgcGVlcidzIHB1YmxpYyB2YWx1ZSAocHVibGljIGtleSkgICAgICAgICAgICAgICovCisgICAgbWJlZHRsc19tcGkgejsgICAgICAgICAgICAgIC8qITwgIHNoYXJlZCBzZWNyZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCBwb2ludF9mb3JtYXQ7ICAgLyohPCAgZm9ybWF0IGZvciBwb2ludCBleHBvcnQgaW4gVExTIG1lc3NhZ2VzICAgICAgICovCisgICAgbWJlZHRsc19lY3BfcG9pbnQgVmk7ICAgICAgIC8qITwgIGJsaW5kaW5nIHZhbHVlIChmb3IgbGF0ZXIpICAgICAgICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfZWNwX3BvaW50IFZmOyAgICAgICAvKiE8ICB1bi1ibGluZGluZyB2YWx1ZSAoZm9yIGxhdGVyKSAgICAgICAgICAgICAgICAgKi8KKyAgICBtYmVkdGxzX21waSBfZDsgICAgICAgICAgICAgLyohPCAgcHJldmlvdXMgZCAoZm9yIGxhdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICovCit9CittYmVkdGxzX2VjZGhfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdlbmVyYXRlIGEgcHVibGljIGtleS4KKyAqICAgICAgICAgICAgICAgICAgUmF3IGZ1bmN0aW9uIHRoYXQgb25seSBkb2VzIHRoZSBjb3JlIGNvbXB1dGF0aW9uLgorICoKKyAqIFxwYXJhbSBncnAgICAgICAgRUNQIGdyb3VwCisgKiBccGFyYW0gZCAgICAgICAgIERlc3RpbmF0aW9uIE1QSSAoc2VjcmV0IGV4cG9uZW50LCBha2EgcHJpdmF0ZSBrZXkpCisgKiBccGFyYW0gUSAgICAgICAgIERlc3RpbmF0aW9uIHBvaW50IChwdWJsaWMga2V5KQorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBvciBhIE1CRURUTFNfRVJSX0VDUF9YWFggb3IgTUJFRFRMU19NUElfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX21waSAqZCwgbWJlZHRsc19lY3BfcG9pbnQgKlEsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ29tcHV0ZSBzaGFyZWQgc2VjcmV0CisgKiAgICAgICAgICAgICAgICAgIFJhdyBmdW5jdGlvbiB0aGF0IG9ubHkgZG9lcyB0aGUgY29yZSBjb21wdXRhdGlvbi4KKyAqCisgKiBccGFyYW0gZ3JwICAgICAgIEVDUCBncm91cAorICogXHBhcmFtIHogICAgICAgICBEZXN0aW5hdGlvbiBNUEkgKHNoYXJlZCBzZWNyZXQpCisgKiBccGFyYW0gUSAgICAgICAgIFB1YmxpYyBrZXkgZnJvbSBvdGhlciBwYXJ0eQorICogXHBhcmFtIGQgICAgICAgICBPdXIgc2VjcmV0IGV4cG9uZW50IChwcml2YXRlIGtleSkKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uIChzZWUgbm90ZXMpCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgb3IgYSBNQkVEVExTX0VSUl9FQ1BfWFhYIG9yIE1CRURUTFNfTVBJX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgICBJZiBmX3JuZyBpcyBub3QgTlVMTCwgaXQgaXMgdXNlZCB0byBpbXBsZW1lbnQKKyAqICAgICAgICAgICAgICAgICAgY291bnRlcm1lYXN1cmVzIGFnYWluc3QgcG90ZW50aWFsIGVsYWJvcmF0ZSB0aW1pbmcKKyAqICAgICAgICAgICAgICAgICAgYXR0YWNrcywgc2VlIFxjIG1iZWR0bHNfZWNwX211bCgpIGZvciBkZXRhaWxzLgorICovCitpbnQgbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX21waSAqeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUSwgY29uc3QgbWJlZHRsc19tcGkgKmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfZWNkaF9pbml0KCBtYmVkdGxzX2VjZGhfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gZnJlZQorICovCit2b2lkIG1iZWR0bHNfZWNkaF9mcmVlKCBtYmVkdGxzX2VjZGhfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZW5lcmF0ZSBhIHB1YmxpYyBrZXkgYW5kIGEgVExTIFNlcnZlcktleUV4Y2hhbmdlIHBheWxvYWQuCisgKiAgICAgICAgICAgICAgICAgIChGaXJzdCBmdW5jdGlvbiB1c2VkIGJ5IGEgVExTIHNlcnZlciBmb3IgRUNESEUuKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgRUNESCBjb250ZXh0CisgKiBccGFyYW0gb2xlbiAgICAgIG51bWJlciBvZiBjaGFycyB3cml0dGVuCisgKiBccGFyYW0gYnVmICAgICAgIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICogXHBhcmFtIGJsZW4gICAgICBsZW5ndGggb2YgYnVmZmVyCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBjdHgtPmdycCBoYXMgYWxyZWFkeSBiZWVuCisgKiAgICAgICAgICAgICAgICAgIHByb3Blcmx5IHNldCAoZm9yIGV4YW1wbGUgdXNpbmcgbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCkuCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX0VDUF9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19lY2RoX21ha2VfcGFyYW1zKCBtYmVkdGxzX2VjZGhfY29udGV4dCAqY3R4LCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFBhcnNlIGFuZCBwcm9jcmVzcyBhIFRMUyBTZXJ2ZXJLZXlFeGhhbmdlIHBheWxvYWQuCisgKiAgICAgICAgICAgICAgICAgIChGaXJzdCBmdW5jdGlvbiB1c2VkIGJ5IGEgVExTIGNsaWVudCBmb3IgRUNESEUuKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgRUNESCBjb250ZXh0CisgKiBccGFyYW0gYnVmICAgICAgIHBvaW50ZXIgdG8gc3RhcnQgb2YgaW5wdXQgYnVmZmVyCisgKiBccGFyYW0gZW5kICAgICAgIG9uZSBwYXN0IGVuZCBvZiBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfRUNQX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjZGhfcmVhZF9wYXJhbXMoIG1iZWR0bHNfZWNkaF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXR1cCBhbiBFQ0RIIGNvbnRleHQgZnJvbSBhbiBFQyBrZXkuCisgKiAgICAgICAgICAgICAgICAgIChVc2VkIGJ5IGNsaWVudHMgYW5kIHNlcnZlcnMgaW4gcGxhY2Ugb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgIFNlcnZlcktleUVjaGFuZ2UgZm9yIHN0YXRpYyBFQ0RIOiBpbXBvcnQgRUNESCBwYXJhbWV0ZXJzCisgKiAgICAgICAgICAgICAgICAgIGZyb20gYSBjZXJ0aWZpY2F0ZSdzIEVDIGtleSBpbmZvcm1hdGlvbi4pCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFQ0RIIGNvbnN0ZXh0IHRvIHNldAorICogXHBhcmFtIGtleSAgICAgICBFQyBrZXkgdG8gdXNlCisgKiBccGFyYW0gc2lkZSAgICAgIElzIGl0IG91ciBrZXkgKDEpIG9yIHRoZSBwZWVyJ3Mga2V5ICgwKSA/CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX0VDUF9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19lY2RoX2dldF9wYXJhbXMoIG1iZWR0bHNfZWNkaF9jb250ZXh0ICpjdHgsIGNvbnN0IG1iZWR0bHNfZWNwX2tleXBhaXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9zaWRlIHNpZGUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdlbmVyYXRlIGEgcHVibGljIGtleSBhbmQgYSBUTFMgQ2xpZW50S2V5RXhjaGFuZ2UgcGF5bG9hZC4KKyAqICAgICAgICAgICAgICAgICAgKFNlY29uZCBmdW5jdGlvbiB1c2VkIGJ5IGEgVExTIGNsaWVudCBmb3IgRUNESChFKS4pCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFQ0RIIGNvbnRleHQKKyAqIFxwYXJhbSBvbGVuICAgICAgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4KKyAqIFxwYXJhbSBidWYgICAgICAgZGVzdGluYXRpb24gYnVmZmVyCisgKiBccGFyYW0gYmxlbiAgICAgIHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX0VDUF9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19lY2RoX21ha2VfcHVibGljKCBtYmVkdGxzX2VjZGhfY29udGV4dCAqY3R4LCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFBhcnNlIGFuZCBwcm9jZXNzIGEgVExTIENsaWVudEtleUV4Y2hhbmdlIHBheWxvYWQuCisgKiAgICAgICAgICAgICAgICAgIChTZWNvbmQgZnVuY3Rpb24gdXNlZCBieSBhIFRMUyBzZXJ2ZXIgZm9yIEVDREgoRSkuKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgRUNESCBjb250ZXh0CisgKiBccGFyYW0gYnVmICAgICAgIHN0YXJ0IG9mIGlucHV0IGJ1ZmZlcgorICogXHBhcmFtIGJsZW4gICAgICBsZW5ndGggb2YgaW5wdXQgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX0VDUF9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19lY2RoX3JlYWRfcHVibGljKCBtYmVkdGxzX2VjZGhfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIERlcml2ZSBhbmQgZXhwb3J0IHRoZSBzaGFyZWQgc2VjcmV0LgorICogICAgICAgICAgICAgICAgICAoTGFzdCBmdW5jdGlvbiB1c2VkIGJ5IGJvdGggVExTIGNsaWVudCBlbiBzZXJ2ZXJzLikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEVDREggY29udGV4dAorICogXHBhcmFtIG9sZW4gICAgICBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbgorICogXHBhcmFtIGJ1ZiAgICAgICBkZXN0aW5hdGlvbiBidWZmZXIKKyAqIFxwYXJhbSBibGVuICAgICAgYnVmZmVyIGxlbmd0aAorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24sIHNlZSBub3RlcyBmb3IgXGMgbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkKCkKKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9FQ1BfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldCggbWJlZHRsc19lY2RoX2NvbnRleHQgKmN0eCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBlY2RoLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZWNkc2EuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZWNkc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjgyN2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lY2RzYS5oCkBAIC0wLDAgKzEsMjQ4IEBACisvKioKKyAqIFxmaWxlIGVjZHNhLmgKKyAqCisgKiBcYnJpZWYgRWxsaXB0aWMgY3VydmUgRFNBCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfRUNEU0FfSAorI2RlZmluZSBNQkVEVExTX0VDRFNBX0gKKworI2luY2x1ZGUgImVjcC5oIgorI2luY2x1ZGUgIm1kLmgiCisKKy8qCisgKiBSRkMgNDQ5MiBwYWdlIDIwOgorICoKKyAqICAgICBFY2RzYS1TaWctVmFsdWUgOjo9IFNFUVVFTkNFIHsKKyAqICAgICAgICAgciAgICAgICBJTlRFR0VSLAorICogICAgICAgICBzICAgICAgIElOVEVHRVIKKyAqICAgICB9CisgKgorICogU2l6ZSBpcyBhdCBtb3N0CisgKiAgICAxICh0YWcpICsgMSAobGVuKSArIDEgKGluaXRpYWwgMCkgKyBFQ1BfTUFYX0JZVEVTIGZvciBlYWNoIG9mIHIgYW5kIHMsCisgKiAgICB0d2ljZSB0aGF0ICsgMSAodGFnKSArIDIgKGxlbikgZm9yIHRoZSBzZXF1ZW5jZQorICogKGFzc3VtaW5nIEVDUF9NQVhfQllURVMgaXMgbGVzcyB0aGFuIDEyNiBmb3IgciBhbmQgcywKKyAqIGFuZCBsZXNzIHRoYW4gMTI0ICh0b3RhbCBsZW4gPD0gMjU1KSBmb3IgdGhlIHNlcXVlbmNlKQorICovCisjaWYgTUJFRFRMU19FQ1BfTUFYX0JZVEVTID4gMTI0CisjZXJyb3IgIk1CRURUTFNfRUNQX01BWF9CWVRFUyBiaWdnZXIgdGhhbiBleHBlY3RlZCwgcGxlYXNlIGZpeCBNQkVEVExTX0VDRFNBX01BWF9MRU4iCisjZW5kaWYKKy8qKiBNYXhpbXVtIHNpemUgb2YgYW4gRUNEU0Egc2lnbmF0dXJlIGluIGJ5dGVzICovCisjZGVmaW5lIE1CRURUTFNfRUNEU0FfTUFYX0xFTiAgKCAzICsgMiAqICggMyArIE1CRURUTFNfRUNQX01BWF9CWVRFUyApICkKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVDRFNBIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgbWJlZHRsc19lY3Bfa2V5cGFpciBtYmVkdGxzX2VjZHNhX2NvbnRleHQ7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENvbXB1dGUgRUNEU0Egc2lnbmF0dXJlIG9mIGEgcHJldmlvdXNseSBoYXNoZWQgbWVzc2FnZQorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhlIGRldGVybWluaXN0aWMgdmVyc2lvbiBpcyB1c3VhbGx5IHByZWZlcmVkLgorICoKKyAqIFxwYXJhbSBncnAgICAgICAgRUNQIGdyb3VwCisgKiBccGFyYW0gciAgICAgICAgIEZpcnN0IG91dHB1dCBpbnRlZ2VyCisgKiBccGFyYW0gcyAgICAgICAgIFNlY29uZCBvdXRwdXQgaW50ZWdlcgorICogXHBhcmFtIGQgICAgICAgICBQcml2YXRlIHNpZ25pbmcga2V5CisgKiBccGFyYW0gYnVmICAgICAgIE1lc3NhZ2UgaGFzaAorICogXHBhcmFtIGJsZW4gICAgICBMZW5ndGggb2YgYnVmCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIG9yIGEgTUJFRFRMU19FUlJfRUNQX1hYWCBvciBNQkVEVExTX01QSV9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19lY2RzYV9zaWduKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX21waSAqciwgbWJlZHRsc19tcGkgKnMsCisgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sCisgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ29tcHV0ZSBFQ0RTQSBzaWduYXR1cmUgb2YgYSBwcmV2aW91c2x5IGhhc2hlZCBtZXNzYWdlLAorICogICAgICAgICAgICAgICAgICBkZXRlcm1pbmlzdGljIHZlcnNpb24gKFJGQyA2OTc5KS4KKyAqCisgKiBccGFyYW0gZ3JwICAgICAgIEVDUCBncm91cAorICogXHBhcmFtIHIgICAgICAgICBGaXJzdCBvdXRwdXQgaW50ZWdlcgorICogXHBhcmFtIHMgICAgICAgICBTZWNvbmQgb3V0cHV0IGludGVnZXIKKyAqIFxwYXJhbSBkICAgICAgICAgUHJpdmF0ZSBzaWduaW5nIGtleQorICogXHBhcmFtIGJ1ZiAgICAgICBNZXNzYWdlIGhhc2gKKyAqIFxwYXJhbSBibGVuICAgICAgTGVuZ3RoIG9mIGJ1ZgorICogXHBhcmFtIG1kX2FsZyAgICBNRCBhbGdvcml0aG0gdXNlZCB0byBoYXNoIHRoZSBtZXNzYWdlCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIG9yIGEgTUJFRFRMU19FUlJfRUNQX1hYWCBvciBNQkVEVExTX01QSV9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19lY2RzYV9zaWduX2RldCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19tcGkgKnIsIG1iZWR0bHNfbXBpICpzLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBWZXJpZnkgRUNEU0Egc2lnbmF0dXJlIG9mIGEgcHJldmlvdXNseSBoYXNoZWQgbWVzc2FnZQorICoKKyAqIFxwYXJhbSBncnAgICAgICAgRUNQIGdyb3VwCisgKiBccGFyYW0gYnVmICAgICAgIE1lc3NhZ2UgaGFzaAorICogXHBhcmFtIGJsZW4gICAgICBMZW5ndGggb2YgYnVmCisgKiBccGFyYW0gUSAgICAgICAgIFB1YmxpYyBrZXkgdG8gdXNlIGZvciB2ZXJpZmljYXRpb24KKyAqIFxwYXJhbSByICAgICAgICAgRmlyc3QgaW50ZWdlciBvZiB0aGUgc2lnbmF0dXJlCisgKiBccGFyYW0gcyAgICAgICAgIFNlY29uZCBpbnRlZ2VyIG9mIHRoZSBzaWduYXR1cmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBIGlmIHNpZ25hdHVyZSBpcyBpbnZhbGlkCisgKiAgICAgICAgICAgICAgICAgIG9yIGEgTUJFRFRMU19FUlJfRUNQX1hYWCBvciBNQkVEVExTX01QSV9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19lY2RzYV92ZXJpZnkoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBibGVuLAorICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlEsIGNvbnN0IG1iZWR0bHNfbXBpICpyLCBjb25zdCBtYmVkdGxzX21waSAqcyk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDb21wdXRlIEVDRFNBIHNpZ25hdHVyZSBhbmQgd3JpdGUgaXQgdG8gYnVmZmVyLAorICogICAgICAgICAgICAgICAgICBzZXJpYWxpemVkIGFzIGRlZmluZWQgaW4gUkZDIDQ0OTIgcGFnZSAyMC4KKyAqICAgICAgICAgICAgICAgICAgKE5vdCB0aHJlYWQtc2FmZSB0byB1c2Ugc2FtZSBjb250ZXh0IGluIG11bHRpcGxlIHRocmVhZHMpCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGUgZGV0ZXJtaW5pc3RpY2UgdmVyc2lvbiAoUkZDIDY5NzkpIGlzIHVzZWQgaWYKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDIGlzIGRlZmluZWQuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFQ0RTQSBjb250ZXh0CisgKiBccGFyYW0gbWRfYWxnICAgIEFsZ29yaXRobSB0aGF0IHdhcyB1c2VkIHRvIGhhc2ggdGhlIG1lc3NhZ2UKKyAqIFxwYXJhbSBoYXNoICAgICAgTWVzc2FnZSBoYXNoCisgKiBccGFyYW0gaGxlbiAgICAgIExlbmd0aCBvZiBoYXNoCisgKiBccGFyYW0gc2lnICAgICAgIEJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB0aGUgc2lnbmF0dXJlCisgKiBccGFyYW0gc2xlbiAgICAgIExlbmd0aCBvZiB0aGUgc2lnbmF0dXJlIHdyaXR0ZW4KKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoZSAic2lnIiBidWZmZXIgbXVzdCBiZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0d2ljZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgc2l6ZSBvZiB0aGUgY3VydmUgdXNlZCwgcGx1cyA5IChlZy4gNzMgYnl0ZXMgaWYgYSAyNTYtYml0CisgKiAgICAgICAgICAgICAgICAgIGN1cnZlIGlzIHVzZWQpLiBNQkVEVExTX0VDRFNBX01BWF9MRU4gaXMgYWx3YXlzIHNhZmUuCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIG9yIGEgTUJFRFRMU19FUlJfRUNQX1hYWCwgTUJFRFRMU19FUlJfTVBJX1hYWCBvcgorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZSggbWJlZHRsc19lY2RzYV9jb250ZXh0ICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpCisjaWYgISBkZWZpbmVkKE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcpCisjZGVmaW5lIE1CRURUTFNfREVQUkVDQVRFRCAgICBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkKKyNlbHNlCisjZGVmaW5lIE1CRURUTFNfREVQUkVDQVRFRAorI2VuZGlmCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ29tcHV0ZSBFQ0RTQSBzaWduYXR1cmUgYW5kIHdyaXRlIGl0IHRvIGJ1ZmZlciwKKyAqICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZCBhcyBkZWZpbmVkIGluIFJGQyA0NDkyIHBhZ2UgMjAuCisgKiAgICAgICAgICAgICAgICAgIERldGVybWluaXN0aWMgdmVyc2lvbiwgUkZDIDY5NzkuCisgKiAgICAgICAgICAgICAgICAgIChOb3QgdGhyZWFkLXNhZmUgdG8gdXNlIHNhbWUgY29udGV4dCBpbiBtdWx0aXBsZSB0aHJlYWRzKQorICoKKyAqIFxkZXByZWNhdGVkICAgICAgU3VwZXJzZWRlZCBieSBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZSgpIGluIDIuMC4wCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFQ0RTQSBjb250ZXh0CisgKiBccGFyYW0gaGFzaCAgICAgIE1lc3NhZ2UgaGFzaAorICogXHBhcmFtIGhsZW4gICAgICBMZW5ndGggb2YgaGFzaAorICogXHBhcmFtIHNpZyAgICAgICBCdWZmZXIgdGhhdCB3aWxsIGhvbGQgdGhlIHNpZ25hdHVyZQorICogXHBhcmFtIHNsZW4gICAgICBMZW5ndGggb2YgdGhlIHNpZ25hdHVyZSB3cml0dGVuCisgKiBccGFyYW0gbWRfYWxnICAgIE1EIGFsZ29yaXRobSB1c2VkIHRvIGhhc2ggdGhlIG1lc3NhZ2UKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoZSAic2lnIiBidWZmZXIgbXVzdCBiZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0d2ljZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgc2l6ZSBvZiB0aGUgY3VydmUgdXNlZCwgcGx1cyA5IChlZy4gNzMgYnl0ZXMgaWYgYSAyNTYtYml0CisgKiAgICAgICAgICAgICAgICAgIGN1cnZlIGlzIHVzZWQpLiBNQkVEVExTX0VDRFNBX01BWF9MRU4gaXMgYWx3YXlzIHNhZmUuCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIG9yIGEgTUJFRFRMU19FUlJfRUNQX1hYWCwgTUJFRFRMU19FUlJfTVBJX1hYWCBvcgorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZV9kZXQoIG1iZWR0bHNfZWNkc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZyApIE1CRURUTFNfREVQUkVDQVRFRDsKKyN1bmRlZiBNQkVEVExTX0RFUFJFQ0FURUQKKyNlbmRpZiAvKiBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRCAqLworI2VuZGlmIC8qIE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUmVhZCBhbmQgdmVyaWZ5IGFuIEVDRFNBIHNpZ25hdHVyZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgRUNEU0EgY29udGV4dAorICogXHBhcmFtIGhhc2ggICAgICBNZXNzYWdlIGhhc2gKKyAqIFxwYXJhbSBobGVuICAgICAgU2l6ZSBvZiBoYXNoCisgKiBccGFyYW0gc2lnICAgICAgIFNpZ25hdHVyZSB0byByZWFkIGFuZCB2ZXJpZnkKKyAqIFxwYXJhbSBzbGVuICAgICAgU2l6ZSBvZiBzaWcKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBIGlmIHNpZ25hdHVyZSBpcyBpbnZhbGlkLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfU0lHX0xFTl9NSVNNQVRDSCBpZiB0aGUgc2lnbmF0dXJlIGlzCisgKiAgICAgICAgICAgICAgICAgIHZhbGlkIGJ1dCBpdHMgYWN0dWFsIGxlbmd0aCBpcyBsZXNzIHRoYW4gc2lnbGVuLAorICogICAgICAgICAgICAgICAgICBvciBhIE1CRURUTFNfRVJSX0VDUF9YWFggb3IgTUJFRFRMU19FUlJfTVBJX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX3JlYWRfc2lnbmF0dXJlKCBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdlbmVyYXRlIGFuIEVDRFNBIGtleXBhaXIgb24gdGhlIGdpdmVuIGN1cnZlCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFQ0RTQSBjb250ZXh0IGluIHdoaWNoIHRoZSBrZXlwYWlyIHNob3VsZCBiZSBzdG9yZWQKKyAqIFxwYXJhbSBnaWQgICAgICAgR3JvdXAgKGVsbGlwdGljIGN1cnZlKSB0byB1c2UuIE9uZSBvZiB0aGUgdmFyaW91cworICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VDUF9EUF9YWFggbWFjcm9zIGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uLgorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBhIE1CRURUTFNfRVJSX0VDUF9YWFggY29kZS4KKyAqLworaW50IG1iZWR0bHNfZWNkc2FfZ2Vua2V5KCBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKmN0eCwgbWJlZHRsc19lY3BfZ3JvdXBfaWQgZ2lkLAorICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IGFuIEVDRFNBIGNvbnRleHQgZnJvbSBhbiBFQyBrZXkgcGFpcgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgRUNEU0EgY29udGV4dCB0byBzZXQKKyAqIFxwYXJhbSBrZXkgICAgICAgRUMga2V5IHRvIHVzZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBhIE1CRURUTFNfRVJSX0VDUF9YWFggY29kZS4KKyAqLworaW50IG1iZWR0bHNfZWNkc2FfZnJvbV9rZXlwYWlyKCBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKmN0eCwgY29uc3QgbWJlZHRsc19lY3Bfa2V5cGFpciAqa2V5ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfZWNkc2FfaW5pdCggbWJlZHRsc19lY2RzYV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEZyZWUgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBmcmVlCisgKi8KK3ZvaWQgbWJlZHRsc19lY2RzYV9mcmVlKCBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKmN0eCApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZWNkc2EuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lY2pwYWtlLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VjanBha2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2I2MTYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lY2pwYWtlLmgKQEAgLTAsMCArMSwyMzggQEAKKy8qKgorICogXGZpbGUgZWNqcGFrZS5oCisgKgorICogXGJyaWVmIEVsbGlwdGljIGN1cnZlIEotUEFLRQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0VDSlBBS0VfSAorI2RlZmluZSBNQkVEVExTX0VDSlBBS0VfSAorCisvKgorICogSi1QQUtFIGlzIGEgcGFzc3dvcmQtYXV0aGVudGljYXRlZCBrZXkgZXhjaGFuZ2UgdGhhdCBhbGxvd3MgZGVyaXZpbmcgYQorICogc3Ryb25nIHNoYXJlZCBzZWNyZXQgZnJvbSBhIChwb3RlbnRpYWxseSBsb3cgZW50cm9weSkgcHJlLXNoYXJlZAorICogcGFzc3BocmFzZSwgd2l0aCBmb3J3YXJkIHNlY3JlY3kgYW5kIG11dHVhbCBhdXRoZW50aWNhdGlvbi4KKyAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bhc3N3b3JkX0F1dGhlbnRpY2F0ZWRfS2V5X0V4Y2hhbmdlX2J5X0p1Z2dsaW5nCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIEVsbGlwdGljIEN1cnZlIHZhcmlhbnQgb2YgSi1QQUtFLAorICogYXMgZGVmaW5lZCBpbiBDaGFwdGVyIDcuNCBvZiB0aGUgVGhyZWFkIHYxLjAgU3BlY2lmaWNhdGlvbiwKKyAqIGF2YWlsYWJsZSB0byBtZW1iZXJzIG9mIHRoZSBUaHJlYWQgR3JvdXAgaHR0cDovL3RocmVhZGdyb3VwLm9yZy8KKyAqCisgKiBBcyB0aGUgSi1QQUtFIGFsZ29yaXRobSBpcyBpbmhlcmVudGx5IHN5bW1ldHJpYywgc28gaXMgb3VyIEFQSS4KKyAqIEVhY2ggcGFydHkgbmVlZHMgdG8gc2VuZCBpdHMgZmlyc3Qgcm91bmQgbWVzc2FnZSwgaW4gYW55IG9yZGVyLCB0byB0aGUKKyAqIG90aGVyIHBhcnR5LCB0aGVuIGVhY2ggc2VuZHMgaXRzIHNlY29uZCByb3VuZCBtZXNzYWdlLCBpbiBhbnkgb3JkZXIuCisgKiBUaGUgcGF5bG9hZHMgYXJlIHNlcmlhbGl6ZWQgaW4gYSB3YXkgc3VpdGFibGUgZm9yIHVzZSBpbiBUTFMsIGJ1dCBjb3VsZAorICogYWxzbyBiZSB1c2Ugb3V0c2lkZSBUTFMuCisgKi8KKworI2luY2x1ZGUgImVjcC5oIgorI2luY2x1ZGUgIm1kLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBSb2xlcyBpbiB0aGUgRUMgSi1QQUtFIGV4Y2hhbmdlCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgTUJFRFRMU19FQ0pQQUtFX0NMSUVOVCA9IDAsICAgICAgICAgLyoqPCBDbGllbnQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBNQkVEVExTX0VDSlBBS0VfU0VSVkVSLCAgICAgICAgICAgICAvKio8IFNlcnZlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBtYmVkdGxzX2VjanBha2Vfcm9sZTsKKworLyoqCisgKiBFQyBKLVBBS0UgY29udGV4dCBzdHJ1Y3R1cmUuCisgKgorICogSi1QQUtFIGlzIGEgc3ltbWV0cmljIHByb3RvY29sLCBleGNlcHQgZm9yIHRoZSBpZGVudGlmaWVycyB1c2VkIGluCisgKiBaZXJvLUtub3dsZWRnZSBQcm9vZnMsIGFuZCB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgc2Vjb25kIG1lc3NhZ2UKKyAqIChLZXlFeGNoYW5nZSkgYXMgZGVmaW5lZCBieSB0aGUgVGhyZWFkIHNwZWMuCisgKgorICogSW4gb3JkZXIgdG8gYmVuZWZpdCBmcm9tIHRoaXMgc3ltbWV0cnksIHdlIGNob29zZSBhIGRpZmZlcmVudCBuYW1pbmcKKyAqIGNvbnZldGlvbiBmcm9tIHRoZSBUaHJlYWQgdjEuMCBzcGVjLiBDb3JyZXNwb25kYW5jZSBpcyBpbmRpY2F0ZWQgaW4gdGhlCisgKiBkZXNjcmlwdGlvbiBhcyBhIHBhaXIgQzogY2xpZW50IG5hbWUsIFM6IHNlcnZlciBuYW1lCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87ICAgLyoqPCBIYXNoIHRvIHVzZSAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7ICAgICAgICAgICAgICAvKio8IEVsbGlwdGljIGN1cnZlICAgICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfZWNqcGFrZV9yb2xlIHJvbGU7ICAgICAgICAgIC8qKjwgQXJlIHdlIGNsaWVudCBvciBzZXJ2ZXI/ICAgICAgICovCisgICAgaW50IHBvaW50X2Zvcm1hdDsgICAgICAgICAgICAgICAgICAgLyoqPCBGb3JtYXQgZm9yIHBvaW50IGV4cG9ydCAgICAgICAgKi8KKworICAgIG1iZWR0bHNfZWNwX3BvaW50IFhtMTsgICAgICAgICAgICAgIC8qKjwgTXkgcHVibGljIGtleSAxICAgQzogWDEsIFM6IFgzICovCisgICAgbWJlZHRsc19lY3BfcG9pbnQgWG0yOyAgICAgICAgICAgICAgLyoqPCBNeSBwdWJsaWMga2V5IDIgICBDOiBYMiwgUzogWDQgKi8KKyAgICBtYmVkdGxzX2VjcF9wb2ludCBYcDE7ICAgICAgICAgICAgICAvKio8IFBlZXIgcHVibGljIGtleSAxIEM6IFgzLCBTOiBYMSAqLworICAgIG1iZWR0bHNfZWNwX3BvaW50IFhwMjsgICAgICAgICAgICAgIC8qKjwgUGVlciBwdWJsaWMga2V5IDIgQzogWDQsIFM6IFgyICovCisgICAgbWJlZHRsc19lY3BfcG9pbnQgWHA7ICAgICAgICAgICAgICAgLyoqPCBQZWVyIHB1YmxpYyBrZXkgICBDOiBYcywgUzogWGMgKi8KKworICAgIG1iZWR0bHNfbXBpIHhtMTsgICAgICAgICAgICAgICAgICAgIC8qKjwgTXkgcHJpdmF0ZSBrZXkgMSAgQzogeDEsIFM6IHgzICovCisgICAgbWJlZHRsc19tcGkgeG0yOyAgICAgICAgICAgICAgICAgICAgLyoqPCBNeSBwcml2YXRlIGtleSAyICBDOiB4MiwgUzogeDQgKi8KKworICAgIG1iZWR0bHNfbXBpIHM7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUHJlLXNoYXJlZCBzZWNyZXQgKHBhc3NwaHJhc2UpICovCit9IG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBhIGNvbnRleHQKKyAqICAgICAgICAgICAgICAgICAgKGp1c3QgbWFrZXMgaXQgcmVhZHkgZm9yIHNldHVwKCkgb3IgZnJlZSgpKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIGNvbnRleHQgdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfZWNqcGFrZV9pbml0KCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdXAgYSBjb250ZXh0IGZvciB1c2UKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIEN1cnJlbnRseSB0aGUgb25seSB2YWx1ZXMgZm9yIGhhc2gvY3VydmUgYWxsb3dlZCBieSB0aGUKKyAqICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgYXJlIE1CRURUTFNfTURfU0hBMjU2L01CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIGNvbnRleHQgdG8gc2V0IHVwCisgKiBccGFyYW0gcm9sZSAgICAgIE91ciByb2xlOiBjbGllbnQgb3Igc2VydmVyCisgKiBccGFyYW0gaGFzaCAgICAgIGhhc2ggZnVuY3Rpb24gdG8gdXNlIChNQkVEVExTX01EX1hYWCkKKyAqIFxwYXJhbSBjdXJ2ZSAgICAgZWxsaXB0aWMgY3VydmUgaWRlbnRpZmllciAoTUJFRFRMU19FQ1BfRFBfWFhYKQorICogXHBhcmFtIHNlY3JldCAgICBwcmUtc2hhcmVkIHNlY3JldCAocGFzc3BocmFzZSkKKyAqIFxwYXJhbSBsZW4gICAgICAgbGVuZ3RoIG9mIHRoZSBzaGFyZWQgc2VjcmV0CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWxsLAorICogICAgICAgICAgICAgICAgICBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK2ludCBtYmVkdGxzX2VjanBha2Vfc2V0dXAoIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjanBha2Vfcm9sZSByb2xlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGN1cnZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VjcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApOworCisvKgorICogXGJyaWVmICAgICAgICAgICBDaGVjayBpZiBhIGNvbnRleHQgaXMgcmVhZHkgZm9yIHVzZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBjaGVjaworICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiB0aGUgY29udGV4dCBpcyByZWFkeSBmb3IgdXNlLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgb3RoZXJ3aXNlCisgKi8KK2ludCBtYmVkdGxzX2VjanBha2VfY2hlY2soIGNvbnN0IG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdlbmVyYXRlIGFuZCB3cml0ZSB0aGUgZmlyc3Qgcm91bmQgbWVzc2FnZQorICogICAgICAgICAgICAgICAgICAoVExTOiBjb250ZW50cyBvZiB0aGUgQ2xpZW50L1NlcnZlckhlbGxvIGV4dGVuc2lvbiwKKyAqICAgICAgICAgICAgICAgICAgZXhjbHVkaW5nIGV4dGVuc2lvbiB0eXBlIGFuZCBsZW5ndGggYnl0ZXMpCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGJ1ZiAgICAgICBCdWZmZXIgdG8gd3JpdGUgdGhlIGNvbnRlbnRzIHRvCisgKiBccGFyYW0gbGVuICAgICAgIEJ1ZmZlciBzaXplCisgKiBccGFyYW0gb2xlbiAgICAgIFdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbgorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsbCwKKyAqICAgICAgICAgICAgICAgICAgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX3dyaXRlX3JvdW5kX29uZSggbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFJlYWQgYW5kIHByb2Nlc3MgdGhlIGZpcnN0IHJvdW5kIG1lc3NhZ2UKKyAqICAgICAgICAgICAgICAgICAgKFRMUzogY29udGVudHMgb2YgdGhlIENsaWVudC9TZXJ2ZXJIZWxsbyBleHRlbnNpb24sCisgKiAgICAgICAgICAgICAgICAgIGV4Y2x1ZGluZyBleHRlbnNpb24gdHlwZSBhbmQgbGVuZ3RoIGJ5dGVzKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBidWYgICAgICAgUG9pbnRlciB0byBleHRlbnNpb24gY29udGVudHMKKyAqIFxwYXJhbSBsZW4gICAgICAgRXh0ZW5zaW9uIGxlbmd0aAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsbCwKKyAqICAgICAgICAgICAgICAgICAgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfb25lKCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJhdGUgYW5kIHdyaXRlIHRoZSBzZWNvbmQgcm91bmQgbWVzc2FnZQorICogICAgICAgICAgICAgICAgICAoVExTOiBjb250ZW50cyBvZiB0aGUgQ2xpZW50L1NlcnZlcktleUV4Y2hhbmdlKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBidWYgICAgICAgQnVmZmVyIHRvIHdyaXRlIHRoZSBjb250ZW50cyB0bworICogXHBhcmFtIGxlbiAgICAgICBCdWZmZXIgc2l6ZQorICogXHBhcmFtIG9sZW4gICAgICBXaWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4KKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bGwsCisgKiAgICAgICAgICAgICAgICAgIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworaW50IG1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF90d28oIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBSZWFkIGFuZCBwcm9jZXNzIHRoZSBzZWNvbmQgcm91bmQgbWVzc2FnZQorICogICAgICAgICAgICAgICAgICAoVExTOiBjb250ZW50cyBvZiB0aGUgQ2xpZW50L1NlcnZlcktleUV4Y2hhbmdlKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBidWYgICAgICAgUG9pbnRlciB0byB0aGUgbWVzc2FnZQorICogXHBhcmFtIGxlbiAgICAgICBNZXNzYWdlIGxlbmd0aAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsbCwKKyAqICAgICAgICAgICAgICAgICAgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfdHdvKCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRGVyaXZlIHRoZSBzaGFyZWQgc2VjcmV0CisgKiAgICAgICAgICAgICAgICAgIChUTFM6IFByZS1NYXN0ZXIgU2VjcmV0KQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBidWYgICAgICAgQnVmZmVyIHRvIHdyaXRlIHRoZSBjb250ZW50cyB0bworICogXHBhcmFtIGxlbiAgICAgICBCdWZmZXIgc2l6ZQorICogXHBhcmFtIG9sZW4gICAgICBXaWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4KKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bGwsCisgKiAgICAgICAgICAgICAgICAgIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworaW50IG1iZWR0bHNfZWNqcGFrZV9kZXJpdmVfc2VjcmV0KCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRnJlZSBhIGNvbnRleHQncyBjb250ZW50CisgKgorICogXHBhcmFtIGN0eCAgICAgICBjb250ZXh0IHRvIGZyZWUKKyAqLwordm9pZCBtYmVkdGxzX2VjanBha2VfZnJlZSggbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgKmN0eCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgYSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZWNqcGFrZS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VjcC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjQ2Yzc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lY3AuaApAQCAtMCwwICsxLDY2OSBAQAorLyoqCisgKiBcZmlsZSBlY3AuaAorICoKKyAqIFxicmllZiBFbGxpcHRpYyBjdXJ2ZXMgb3ZlciBHRihwKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0VDUF9ICisjZGVmaW5lIE1CRURUTFNfRUNQX0gKKworI2luY2x1ZGUgImJpZ251bS5oIgorCisvKgorICogRUNQIGVycm9yIGNvZGVzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICAgICAgICAgICAgICAgICAgICAtMHg0RjgwICAvKio8IEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTCAgICAgICAgICAgICAgICAgIC0weDRGMDAgIC8qKjwgVGhlIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gd3JpdGUgdG8uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFICAgICAgICAgICAgICAgLTB4NEU4MCAgLyoqPCBSZXF1ZXN0ZWQgY3VydmUgbm90IGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAtMHg0RTAwICAvKio8IFRoZSBzaWduYXR1cmUgaXMgbm90IHZhbGlkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9FQ1BfQUxMT0NfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgIC0weDREODAgIC8qKjwgTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9FQ1BfUkFORE9NX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgIC0weDREMDAgIC8qKjwgR2VuZXJhdGlvbiBvZiByYW5kb20gdmFsdWUsIHN1Y2ggYXMgKGVwaGVtZXJhbCkga2V5LCBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWSAgICAgICAgICAgICAgICAgICAgICAgLTB4NEM4MCAgLyoqPCBJbnZhbGlkIHByaXZhdGUgb3IgcHVibGljIGtleS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfRUNQX1NJR19MRU5fTUlTTUFUQ0ggICAgICAgICAgICAgICAgICAtMHg0QzAwICAvKio8IFNpZ25hdHVyZSBpcyB2YWxpZCBidXQgc2hvcnRlciB0aGFuIHRoZSB1c2VyLXN1cHBsaWVkIGxlbmd0aC4gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIERvbWFpbiBwYXJhbWV0ZXJzIChjdXJ2ZSwgc3ViZ3JvdXAgYW5kIGdlbmVyYXRvcikgaWRlbnRpZmllcnMuCisgKgorICogT25seSBjdXJ2ZXMgb3ZlciBwcmltZSBmaWVsZHMgYXJlIHN1cHBvcnRlZC4KKyAqCisgKiBcd2FybmluZyBUaGlzIGxpYnJhcnkgZG9lcyBub3Qgc3VwcG9ydCB2YWxpZGF0aW9uIG9mIGFyYml0cmFyeSBkb21haW4KKyAqIHBhcmFtZXRlcnMuIFRoZXJlZm9yZSwgb25seSB3ZWxsLWtub3duIGRvbWFpbiBwYXJhbWV0ZXJzIGZyb20gdHJ1c3RlZAorICogc291cmNlcyBzaG91bGQgYmUgdXNlZC4gU2VlIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoKS4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgTUJFRFRMU19FQ1BfRFBfTk9ORSA9IDAsCisgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxLCAgICAgIC8qITwgMTkyLWJpdHMgTklTVCBjdXJ2ZSAgKi8KKyAgICBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjEsICAgICAgLyohPCAyMjQtYml0cyBOSVNUIGN1cnZlICAqLworICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMSwgICAgICAvKiE8IDI1Ni1iaXRzIE5JU1QgY3VydmUgICovCisgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxLCAgICAgIC8qITwgMzg0LWJpdHMgTklTVCBjdXJ2ZSAgKi8KKyAgICBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjEsICAgICAgLyohPCA1MjEtYml0cyBOSVNUIGN1cnZlICAqLworICAgIE1CRURUTFNfRUNQX0RQX0JQMjU2UjEsICAgICAgICAvKiE8IDI1Ni1iaXRzIEJyYWlucG9vbCBjdXJ2ZSAqLworICAgIE1CRURUTFNfRUNQX0RQX0JQMzg0UjEsICAgICAgICAvKiE8IDM4NC1iaXRzIEJyYWlucG9vbCBjdXJ2ZSAqLworICAgIE1CRURUTFNfRUNQX0RQX0JQNTEyUjEsICAgICAgICAvKiE8IDUxMi1iaXRzIEJyYWlucG9vbCBjdXJ2ZSAqLworICAgIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTksICAgICAgICAgICAvKiE8IEN1cnZlMjU1MTkgICAgICAgICAgICAgICAqLworICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMSwgICAgICAvKiE8IDE5Mi1iaXRzICJLb2JsaXR6IiBjdXJ2ZSAqLworICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMSwgICAgICAvKiE8IDIyNC1iaXRzICJLb2JsaXR6IiBjdXJ2ZSAqLworICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMSwgICAgICAvKiE8IDI1Ni1iaXRzICJLb2JsaXR6IiBjdXJ2ZSAqLworfSBtYmVkdGxzX2VjcF9ncm91cF9pZDsKKworLyoqCisgKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIGN1cnZlcyAocGx1cyBvbmUgZm9yIE5PTkUpLgorICoKKyAqIChNb250Z29tZXJ5IGN1cnZlcyBleGNsdWRlZCBmb3Igbm93LikKKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9EUF9NQVggICAgIDEyCisKKy8qKgorICogQ3VydmUgaW5mb3JtYXRpb24gZm9yIHVzZSBieSBvdGhlciBtb2R1bGVzCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaWQgZ3JwX2lkOyAgICAvKiE8IEludGVybmFsIGlkZW50aWZpZXIgICAgICAgICovCisgICAgdWludDE2X3QgdGxzX2lkOyAgICAgICAgICAgICAgICAvKiE8IFRMUyBOYW1lZEN1cnZlIGlkZW50aWZpZXIgICovCisgICAgdWludDE2X3QgYml0X3NpemU7ICAgICAgICAgICAgICAvKiE8IEN1cnZlIHNpemUgaW4gYml0cyAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAvKiE8IEh1bWFuLWZyaWVuZGx5IG5hbWUgICAgICAgICovCit9IG1iZWR0bHNfZWNwX2N1cnZlX2luZm87CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBFQ1AgcG9pbnQgc3RydWN0dXJlIChqYWNvYmlhbiBjb29yZGluYXRlcykKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIEFsbCBmdW5jdGlvbnMgZXhwZWN0IGFuZCByZXR1cm4gcG9pbnRzIHNhdGlzZnlpbmcKKyAqICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb246IFogPT0gMCBvciBaID09IDEuIChPdGhlcgorICogICAgICAgICAgICAgICAgICB2YWx1ZXMgb2YgWiBhcmUgdXNlZCBieSBpbnRlcm5hbCBmdW5jdGlvbnMgb25seS4pCisgKiAgICAgICAgICAgICAgICAgIFRoZSBwb2ludCBpcyB6ZXJvLCBvciAiYXQgaW5maW5pdHkiLCBpZiBaID09IDAuCisgKiAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSwgWCBhbmQgWSBhcmUgaXRzIHN0YW5kYXJkIChhZmZpbmUpIGNvb3JkaW5hdGVzLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIG1iZWR0bHNfbXBpIFg7ICAgICAgICAgIC8qITwgIHRoZSBwb2ludCdzIFggY29vcmRpbmF0ZSAgKi8KKyAgICBtYmVkdGxzX21waSBZOyAgICAgICAgICAvKiE8ICB0aGUgcG9pbnQncyBZIGNvb3JkaW5hdGUgICovCisgICAgbWJlZHRsc19tcGkgWjsgICAgICAgICAgLyohPCAgdGhlIHBvaW50J3MgWiBjb29yZGluYXRlICAqLworfQorbWJlZHRsc19lY3BfcG9pbnQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBFQ1AgZ3JvdXAgc3RydWN0dXJlCisgKgorICogV2UgY29uc2lkZXIgdHdvIHR5cGVzIG9mIGN1cnZlcyBlcXVhdGlvbnM6CisgKiAxLiBTaG9ydCBXZWllcnN0cmFzcyB5XjIgPSB4XjMgKyBBIHggKyBCICAgICBtb2QgUCAgIChTRUMxICsgUkZDIDQ0OTIpCisgKiAyLiBNb250Z29tZXJ5LCAgICAgICB5XjIgPSB4XjMgKyBBIHheMiArIHggICBtb2QgUCAgIChDdXJ2ZTI1NTE5ICsgZHJhZnQpCisgKiBJbiBib3RoIGNhc2VzLCBhIGdlbmVyYXRvciBHIGZvciBhIHByaW1lLW9yZGVyIHN1Ymdyb3VwIGlzIGZpeGVkLiBJbiB0aGUKKyAqIHNob3J0IHdlaWVyc3RyYXNzLCB0aGlzIHN1Ymdyb3VwIGlzIGFjdHVhbGx5IHRoZSB3aG9sZSBjdXJ2ZSwgYW5kIGl0cworICogY2FyZGluYWwgaXMgZGVub3RlZCBieSBOLgorICoKKyAqIEluIHRoZSBjYXNlIG9mIFNob3J0IFdlaWVyc3RyYXNzIGN1cnZlcywgb3VyIGNvZGUgcmVxdWlyZXMgdGhhdCBOIGlzIGFuIG9kZAorICogcHJpbWUuIChVc2Ugb2RkIGluIG1iZWR0bHNfZWNwX211bCgpIGFuZCBwcmltZSBpbiBtYmVkdGxzX2VjZHNhX3NpZ24oKSBmb3IgYmxpbmRpbmcuKQorICoKKyAqIEluIHRoZSBjYXNlIG9mIE1vbnRnb21lcnkgY3VydmVzLCB3ZSBkb24ndCBzdG9yZSBBIGJ1dCAoQSArIDIpIC8gNCB3aGljaCBpcworICogdGhlIHF1YW50aXR5IGFjdHVhbGx5IHVzZWQgaW4gdGhlIGZvcm11bGFzLiBBbHNvLCBuYml0cyBpcyBub3QgdGhlIHNpemUgb2YgTgorICogYnV0IHRoZSByZXF1aXJlZCBzaXplIGZvciBwcml2YXRlIGtleXMuCisgKgorICogSWYgbW9kcCBpcyBOVUxMLCByZWR1Y3Rpb24gbW9kdWxvIFAgaXMgZG9uZSB1c2luZyBhIGdlbmVyaWMgYWxnb3JpdGhtLgorICogT3RoZXJ3aXNlLCBpdCBtdXN0IHBvaW50IHRvIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBtYmVkdGxzX21waSBpbiB0aGUgcmFuZ2UKKyAqIDAuLjJeKDIqcGJpdHMpLTEgYW5kIHRyYW5zZm9ybXMgaXQgaW4tcGxhY2UgaW4gYW4gaW50ZWdlciBvZiBsaXR0bGUgbW9yZQorICogdGhhbiBwYml0cywgc28gdGhhdCB0aGUgaW50ZWdlciBtYXkgYmUgZWZmaWNpZW50bHkgYnJvdWdodCBpbiB0aGUgMC4uUC0xCisgKiByYW5nZSBieSBhIGZldyBhZGRpdGlvbnMgb3Igc3Vic3RyYWN0aW9ucy4gSXQgbXVzdCByZXR1cm4gMCBvbiBzdWNjZXNzIGFuZAorICogbm9uLXplcm8gb24gZmFpbHVyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pZCBpZDsgICAgLyohPCAgaW50ZXJuYWwgZ3JvdXAgaWRlbnRpZmllciAgICAgICAgICAgICAgICAgICAgICovCisgICAgbWJlZHRsc19tcGkgUDsgICAgICAgICAgICAgIC8qITwgIHByaW1lIG1vZHVsdXMgb2YgdGhlIGJhc2UgZmllbGQgICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfbXBpIEE7ICAgICAgICAgICAgICAvKiE8ICAxLiBBIGluIHRoZSBlcXVhdGlvbiwgb3IgMi4gKEEgKyAyKSAvIDQgICAgICAgKi8KKyAgICBtYmVkdGxzX21waSBCOyAgICAgICAgICAgICAgLyohPCAgMS4gQiBpbiB0aGUgZXF1YXRpb24sIG9yIDIuIHVudXNlZCAgICAgICAgICAgICovCisgICAgbWJlZHRsc19lY3BfcG9pbnQgRzsgICAgICAgIC8qITwgIGdlbmVyYXRvciBvZiB0aGUgKHN1Yilncm91cCB1c2VkICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfbXBpIE47ICAgICAgICAgICAgICAvKiE8ICAxLiB0aGUgb3JkZXIgb2YgRywgb3IgMi4gdW51c2VkICAgICAgICAgICAgICAgKi8KKyAgICBzaXplX3QgcGJpdHM7ICAgICAgIC8qITwgIG51bWJlciBvZiBiaXRzIGluIFAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNpemVfdCBuYml0czsgICAgICAgLyohPCAgbnVtYmVyIG9mIGJpdHMgaW4gMS4gUCwgb3IgMi4gcHJpdmF0ZSBrZXlzICAgICovCisgICAgdW5zaWduZWQgaW50IGg7ICAgICAvKiE8ICBpbnRlcm5hbDogMSBpZiB0aGUgY29uc3RhbnRzIGFyZSBzdGF0aWMgICAgICAgKi8KKyAgICBpbnQgKCptb2RwKShtYmVkdGxzX21waSAqKTsgLyohPCAgZnVuY3Rpb24gZm9yIGZhc3QgcmVkdWN0aW9uIG1vZCBQICAgICAgICAgICAgICovCisgICAgaW50ICgqdF9wcmUpKG1iZWR0bHNfZWNwX3BvaW50ICosIHZvaWQgKik7ICAvKiE8IHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCAoKnRfcG9zdCkobWJlZHRsc19lY3BfcG9pbnQgKiwgdm9pZCAqKTsgLyohPCB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB2b2lkICp0X2RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfZWNwX3BvaW50ICpUOyAgICAgICAvKiE8ICBwcmUtY29tcHV0ZWQgcG9pbnRzIGZvciBlY3BfbXVsX2NvbWIoKSAgICAgICAgKi8KKyAgICBzaXplX3QgVF9zaXplOyAgICAgIC8qITwgIG51bWJlciBmb3IgcHJlLWNvbXB1dGVkIHBvaW50cyAgICAgICAgICAgICAgICAqLworfQorbWJlZHRsc19lY3BfZ3JvdXA7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBFQ1Aga2V5IHBhaXIgc3RydWN0dXJlCisgKgorICogQSBnZW5lcmljIGtleSBwYWlyIHRoYXQgY291bGQgYmUgdXNlZCBmb3IgRUNEU0EsIGZpeGVkIEVDREgsIGV0Yy4KKyAqCisgKiBcbm90ZSBNZW1iZXJzIHB1cnBvc2VmdWxseSBpbiB0aGUgc2FtZSBvcmRlciBhcyBzdHJ1YyBtYmVkdGxzX2VjZHNhX2NvbnRleHQuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOyAgICAgIC8qITwgIEVsbGlwdGljIGN1cnZlIGFuZCBiYXNlIHBvaW50ICAgICAqLworICAgIG1iZWR0bHNfbXBpIGQ7ICAgICAgICAgICAgICAvKiE8ICBvdXIgc2VjcmV0IHZhbHVlICAgICAgICAgICAgICAgICAgKi8KKyAgICBtYmVkdGxzX2VjcF9wb2ludCBROyAgICAgICAgLyohPCAgb3VyIHB1YmxpYyB2YWx1ZSAgICAgICAgICAgICAgICAgICovCit9CittYmVkdGxzX2VjcF9rZXlwYWlyOworCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncworICoKKyAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGNhbiBzZXQgZm9yIHRoaXMgbW9kdWxlIGFyZSBpbiB0aGlzIHNlY3Rpb24uCisgKiBFaXRoZXIgY2hhbmdlIHRoZW0gaW4gY29uZmlnLmggb3IgZGVmaW5lIHRoZW0gb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZS4KKyAqIFx7CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfRUNQX01BWF9CSVRTKQorLyoqCisgKiBNYXhpbXVtIHNpemUgb2YgdGhlIGdyb3VwcyAodGhhdCBpcywgb2YgTiBhbmQgUCkKKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9NQVhfQklUUyAgICAgNTIxICAgLyoqPCBNYXhpbXVtIGJpdCBzaXplIG9mIGdyb3VwcyAqLworI2VuZGlmCisKKyNkZWZpbmUgTUJFRFRMU19FQ1BfTUFYX0JZVEVTICAgICggKCBNQkVEVExTX0VDUF9NQVhfQklUUyArIDcgKSAvIDggKQorI2RlZmluZSBNQkVEVExTX0VDUF9NQVhfUFRfTEVOICAgKCAyICogTUJFRFRMU19FQ1BfTUFYX0JZVEVTICsgMSApCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0VDUF9XSU5ET1dfU0laRSkKKy8qCisgKiBNYXhpbXVtICJ3aW5kb3ciIHNpemUgdXNlZCBmb3IgcG9pbnQgbXVsdGlwbGljYXRpb24uCisgKiBEZWZhdWx0OiA2LgorICogTWluaW11bSB2YWx1ZTogMi4gTWF4aW11bSB2YWx1ZTogNy4KKyAqCisgKiBSZXN1bHQgaXMgYW4gYXJyYXkgb2YgYXQgbW9zdCAoIDEgPDwgKCBNQkVEVExTX0VDUF9XSU5ET1dfU0laRSAtIDEgKSApCisgKiBwb2ludHMgdXNlZCBmb3IgcG9pbnQgbXVsdGlwbGljYXRpb24uIFRoaXMgdmFsdWUgaXMgZGlyZWN0bHkgdGllZCB0byBFQworICogcGVhayBtZW1vcnkgdXNhZ2UsIHNvIGRlY3JlYXNpbmcgaXQgYnkgb25lIHNob3VsZCByb3VnaGx5IGN1dCBtZW1vcnkgdXNhZ2UKKyAqIGJ5IHR3byAoaWYgbGFyZ2UgY3VydmVzIGFyZSBpbiB1c2UpLgorICoKKyAqIFJlZHVjdGlvbiBpbiBzaXplIG1heSByZWR1Y2Ugc3BlZWQsIGJ1dCBsYXJnZXIgY3VydmVzIGFyZSBpbXBhY3RlZCBmaXJzdC4KKyAqIFNhbXBsZSBwZXJmb3JtYW5jZXMgKGluIEVDREhFIGhhbmRzaGFrZXMvcywgd2l0aCBGSVhFRF9QT0lOVF9PUFRJTSA9IDEpOgorICogICAgICB3LXNpemU6ICAgICA2ICAgICAgIDUgICAgICAgNCAgICAgICAzICAgICAgIDIKKyAqICAgICAgNTIxICAgICAgIDE0NSAgICAgMTQxICAgICAxMzUgICAgIDEyMCAgICAgIDk3CisgKiAgICAgIDM4NCAgICAgICAyMTQgICAgIDIwOSAgICAgMTk4ICAgICAxNzcgICAgIDE0NgorICogICAgICAyNTYgICAgICAgMzIwICAgICAzMjAgICAgIDMwMyAgICAgMjYyICAgICAyMjYKKworICogICAgICAyMjQgICAgICAgNDc1ICAgICA0NzUgICAgIDQ1MyAgICAgMzk4ICAgICAzNDIKKyAqICAgICAgMTkyICAgICAgIDY0MCAgICAgNjQwICAgICA2MzMgICAgIDU4NyAgICAgNDc2CisgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUgICAgNiAgIC8qKjwgTWF4aW11bSB3aW5kb3cgc2l6ZSB1c2VkICovCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfRUNQX0ZJWEVEX1BPSU5UX09QVElNKQorLyoKKyAqIFRyYWRlIG1lbW9yeSBmb3Igc3BlZWQgb24gZml4ZWQtcG9pbnQgbXVsdGlwbGljYXRpb24uCisgKgorICogVGhpcyBzcGVlZHMgdXAgcmVwZWF0ZWQgbXVsdGlwbGljYXRpb24gb2YgdGhlIGdlbmVyYXRvciAodGhhdCBpcywgdGhlCisgKiBtdWx0aXBsaWNhdGlvbiBpbiBFQ0RTQSBzaWduYXR1cmVzLCBhbmQgaGFsZiBvZiB0aGUgbXVsdGlwbGljYXRpb25zIGluCisgKiBFQ0RTQSB2ZXJpZmljYXRpb24gYW5kIEVDREhFKSBieSBhIGZhY3RvciByb3VnaGx5IDMgdG8gNC4KKyAqCisgKiBUaGUgY29zdCBpcyBpbmNyZWFzaW5nIEVDIHBlYWsgbWVtb3J5IHVzYWdlIGJ5IGEgZmFjdG9yIHJvdWdobHkgMi4KKyAqCisgKiBDaGFuZ2UgdGhpcyB2YWx1ZSB0byAwIHRvIHJlZHVjZSBwZWFrIG1lbW9yeSB1c2FnZS4KKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9GSVhFRF9QT0lOVF9PUFRJTSAgMSAgIC8qKjwgRW5hYmxlIGZpeGVkLXBvaW50IHNwZWVkLXVwICovCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRklYRURfUE9JTlRfT1BUSU0gKi8KKworLyogXH0gbmFtZSBTRUNUSU9OOiBNb2R1bGUgc2V0dGluZ3MgKi8KKworLyoKKyAqIFBvaW50IGZvcm1hdHMsIGZyb20gUkZDIDQ0OTIncyBlbnVtIEVDUG9pbnRGb3JtYXQKKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQgICAgMCAgIC8qKjwgVW5jb21wcmVzc2VkIHBvaW50IGZvcm1hdCAqLworI2RlZmluZSBNQkVEVExTX0VDUF9QRl9DT01QUkVTU0VEICAgICAgMSAgIC8qKjwgQ29tcHJlc3NlZCBwb2ludCBmb3JtYXQgKi8KKworLyoKKyAqIFNvbWUgb3RoZXIgY29uc3RhbnRzIGZyb20gUkZDIDQ0OTIKKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9UTFNfTkFNRURfQ1VSVkUgICAgMyAgIC8qKjwgRUNDdXJ2ZVR5cGUncyBuYW1lZF9jdXJ2ZSAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2V0IHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBjdXJ2ZXMgaW4gb3JkZXIgb2YgcHJlZmVycmVuY2UKKyAqICAgICAgICAgICAgICAgICAgKGZ1bGwgaW5mb3JtYXRpb24pCisgKgorICogXHJldHVybiAgICAgICAgICBBIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5LCB0aGUgbGFzdCBlbnRyeSBpcyAwLgorICovCitjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICptYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCB2b2lkICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZXQgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGN1cnZlcyBpbiBvcmRlciBvZiBwcmVmZXJyZW5jZQorICogICAgICAgICAgICAgICAgICAoZ3JwX2lkIG9ubHkpCisgKgorICogXHJldHVybiAgICAgICAgICBBIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5LAorICogICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIHdpdGggTUJFRFRMU19FQ1BfRFBfTk9ORS4KKyAqLworY29uc3QgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKm1iZWR0bHNfZWNwX2dycF9pZF9saXN0KCB2b2lkICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZXQgY3VydmUgaW5mb3JtYXRpb24gZnJvbSBhbiBpbnRlcm5hbCBncm91cCBpZGVudGlmaWVyCisgKgorICogXHBhcmFtIGdycF9pZCAgICBBIE1CRURUTFNfRUNQX0RQX1hYWCB2YWx1ZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgVGhlIGFzc29jaWF0ZWQgY3VydmUgaW5mb3JtYXRpb24gb3IgTlVMTAorICovCitjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICptYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fZ3JwX2lkKCBtYmVkdGxzX2VjcF9ncm91cF9pZCBncnBfaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdldCBjdXJ2ZSBpbmZvcm1hdGlvbiBmcm9tIGEgVExTIE5hbWVkQ3VydmUgdmFsdWUKKyAqCisgKiBccGFyYW0gdGxzX2lkICAgIEEgTUJFRFRMU19FQ1BfRFBfWFhYIHZhbHVlCisgKgorICogXHJldHVybiAgICAgICAgICBUaGUgYXNzb2NpYXRlZCBjdXJ2ZSBpbmZvcm1hdGlvbiBvciBOVUxMCisgKi8KK2NvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKm1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV90bHNfaWQoIHVpbnQxNl90IHRsc19pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2V0IGN1cnZlIGluZm9ybWF0aW9uIGZyb20gYSBodW1hbi1yZWFkYWJsZSBuYW1lCisgKgorICogXHBhcmFtIG5hbWUgICAgICBUaGUgbmFtZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgVGhlIGFzc29jaWF0ZWQgY3VydmUgaW5mb3JtYXRpb24gb3IgTlVMTAorICovCitjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICptYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fbmFtZSggY29uc3QgY2hhciAqbmFtZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBhIHBvaW50IChhcyB6ZXJvKQorICovCit2b2lkIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoIG1iZWR0bHNfZWNwX3BvaW50ICpwdCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBhIGdyb3VwICh0byBzb21ldGhpbmcgbWVhbmluZ2xlc3MpCisgKi8KK3ZvaWQgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBhIGtleSBwYWlyIChhcyBhbiBpbnZhbGlkIG9uZSkKKyAqLwordm9pZCBtYmVkdGxzX2VjcF9rZXlwYWlyX2luaXQoIG1iZWR0bHNfZWNwX2tleXBhaXIgKmtleSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRnJlZSB0aGUgY29tcG9uZW50cyBvZiBhIHBvaW50CisgKi8KK3ZvaWQgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggbWJlZHRsc19lY3BfcG9pbnQgKnB0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIHRoZSBjb21wb25lbnRzIG9mIGFuIEVDUCBncm91cAorICovCit2b2lkIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEZyZWUgdGhlIGNvbXBvbmVudHMgb2YgYSBrZXkgcGFpcgorICovCit2b2lkIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggbWJlZHRsc19lY3Bfa2V5cGFpciAqa2V5ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDb3B5IHRoZSBjb250ZW50cyBvZiBwb2ludCBRIGludG8gUAorICoKKyAqIFxwYXJhbSBQICAgICAgICAgRGVzdGluYXRpb24gcG9pbnQKKyAqIFxwYXJhbSBRICAgICAgICAgU291cmNlIHBvaW50CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2VjcF9jb3B5KCBtYmVkdGxzX2VjcF9wb2ludCAqUCwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlEgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENvcHkgdGhlIGNvbnRlbnRzIG9mIGEgZ3JvdXAgb2JqZWN0CisgKgorICogXHBhcmFtIGRzdCAgICAgICBEZXN0aW5hdGlvbiBncm91cAorICogXHBhcmFtIHNyYyAgICAgICBTb3VyY2UgZ3JvdXAKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfZWNwX2dyb3VwX2NvcHkoIG1iZWR0bHNfZWNwX2dyb3VwICpkc3QsIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpzcmMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCBhIHBvaW50IHRvIHplcm8KKyAqCisgKiBccGFyYW0gcHQgICAgICAgIERlc3RpbmF0aW9uIHBvaW50CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2VjcF9zZXRfemVybyggbWJlZHRsc19lY3BfcG9pbnQgKnB0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBUZWxsIGlmIGEgcG9pbnQgaXMgemVybworICoKKyAqIFxwYXJhbSBwdCAgICAgICAgUG9pbnQgdG8gdGVzdAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMSBpZiBwb2ludCBpcyB6ZXJvLCAwIG90aGVyd2lzZQorICovCitpbnQgbWJlZHRsc19lY3BfaXNfemVybyggbWJlZHRsc19lY3BfcG9pbnQgKnB0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDb21wYXJlIHR3byBwb2ludHMKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoaXMgYXNzdW1lcyB0aGUgcG9pbnRzIGFyZSBub3JtYWxpemVkLiBPdGhlcndpc2UsCisgKiAgICAgICAgICAgICAgICAgIHRoZXkgbWF5IGNvbXBhcmUgYXMgIm5vdCBlcXVhbCIgZXZlbiBpZiB0aGV5IGFyZS4KKyAqCisgKiBccGFyYW0gUCAgICAgICAgIEZpcnN0IHBvaW50IHRvIGNvbXBhcmUKKyAqIFxwYXJhbSBRICAgICAgICAgU2Vjb25kIHBvaW50IHRvIGNvbXBhcmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgdGhlIHBvaW50cyBhcmUgZXF1YWwsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSBvdGhlcndpc2UKKyAqLworaW50IG1iZWR0bHNfZWNwX3BvaW50X2NtcCggY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW1wb3J0IGEgbm9uLXplcm8gcG9pbnQgZnJvbSB0d28gQVNDSUkgc3RyaW5ncworICoKKyAqIFxwYXJhbSBQICAgICAgICAgRGVzdGluYXRpb24gcG9pbnQKKyAqIFxwYXJhbSByYWRpeCAgICAgSW5wdXQgbnVtZXJpYyBiYXNlCisgKiBccGFyYW0geCAgICAgICAgIEZpcnN0IGFmZmluZSBjb29yZGluYXRlIGFzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZworICogXHBhcmFtIHkgICAgICAgICBTZWNvbmQgYWZmaW5lIGNvb3JkaW5hdGUgYXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgTUJFRFRMU19FUlJfTVBJX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX3N0cmluZyggbWJlZHRsc19lY3BfcG9pbnQgKlAsIGludCByYWRpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKngsIGNvbnN0IGNoYXIgKnkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEV4cG9ydCBhIHBvaW50IGludG8gdW5zaWduZWQgYmluYXJ5IGRhdGEKKyAqCisgKiBccGFyYW0gZ3JwICAgICAgIEdyb3VwIHRvIHdoaWNoIHRoZSBwb2ludCBzaG91bGQgYmVsb25nCisgKiBccGFyYW0gUCAgICAgICAgIFBvaW50IHRvIGV4cG9ydAorICogXHBhcmFtIGZvcm1hdCAgICBQb2ludCBmb3JtYXQsIHNob3VsZCBiZSBhIE1CRURUTFNfRUNQX1BGX1hYWCBtYWNybworICogXHBhcmFtIG9sZW4gICAgICBMZW5ndGggb2YgdGhlIGFjdHVhbCBvdXRwdXQKKyAqIFxwYXJhbSBidWYgICAgICAgT3V0cHV0IGJ1ZmZlcgorICogXHBhcmFtIGJ1ZmxlbiAgICBMZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgb3IgTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisgKiAgICAgICAgICAgICAgICAgIG9yIE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMCisgKi8KK2ludCBtYmVkdGxzX2VjcF9wb2ludF93cml0ZV9iaW5hcnkoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JtYXQsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEltcG9ydCBhIHBvaW50IGZyb20gdW5zaWduZWQgYmluYXJ5IGRhdGEKKyAqCisgKiBccGFyYW0gZ3JwICAgICAgIEdyb3VwIHRvIHdoaWNoIHRoZSBwb2ludCBzaG91bGQgYmVsb25nCisgKiBccGFyYW0gUCAgICAgICAgIFBvaW50IHRvIGltcG9ydAorICogXHBhcmFtIGJ1ZiAgICAgICBJbnB1dCBidWZmZXIKKyAqIFxwYXJhbSBpbGVuICAgICAgQWN0dWFsIGxlbmd0aCBvZiBpbnB1dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgaWYgaW5wdXQgaXMgaW52YWxpZCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFIGlmIHRoZSBwb2ludCBmb3JtYXQKKyAqICAgICAgICAgICAgICAgICAgaXMgbm90IGltcGxlbWVudGVkLgorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBjaGVjayB0aGF0IHRoZSBwb2ludCBhY3R1YWxseQorICogICAgICAgICAgICAgICAgICBiZWxvbmdzIHRvIHRoZSBnaXZlbiBncm91cCwgc2VlIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSgpIGZvcgorICogICAgICAgICAgICAgICAgICB0aGF0LgorICovCitpbnQgbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgaWxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW1wb3J0IGEgcG9pbnQgZnJvbSBhIFRMUyBFQ1BvaW50IHJlY29yZAorICoKKyAqIFxwYXJhbSBncnAgICAgICAgRUNQIGdyb3VwIHVzZWQKKyAqIFxwYXJhbSBwdCAgICAgICAgRGVzdGluYXRpb24gcG9pbnQKKyAqIFxwYXJhbSBidWYgICAgICAgJChTdGFydCBvZiBpbnB1dCBidWZmZXIpCisgKiBccGFyYW0gbGVuICAgICAgIEJ1ZmZlciBsZW5ndGgKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIGJ1ZiBpcyB1cGRhdGVkIHRvIHBvaW50IHJpZ2h0IGFmdGVyIHRoZSBFQ1BvaW50IG9uIGV4aXQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX1hYWCBpZiBpbml0aWFsaXphdGlvbiBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBIGlmIGlucHV0IGlzIGludmFsaWQKKyAqLworaW50IG1iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqcHQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqYnVmLCBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBFeHBvcnQgYSBwb2ludCBhcyBhIFRMUyBFQ1BvaW50IHJlY29yZAorICoKKyAqIFxwYXJhbSBncnAgICAgICAgRUNQIGdyb3VwIHVzZWQKKyAqIFxwYXJhbSBwdCAgICAgICAgUG9pbnQgdG8gZXhwb3J0CisgKiBccGFyYW0gZm9ybWF0ICAgIEV4cG9ydCBmb3JtYXQKKyAqIFxwYXJhbSBvbGVuICAgICAgbGVuZ3RoIG9mIGRhdGEgd3JpdHRlbgorICogXHBhcmFtIGJ1ZiAgICAgICBCdWZmZXIgdG8gd3JpdGUgdG8KKyAqIFxwYXJhbSBibGVuICAgICAgQnVmZmVyIGxlbmd0aAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBvciBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKyAqICAgICAgICAgICAgICAgICAgb3IgTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwKKyAqLworaW50IG1iZWR0bHNfZWNwX3Rsc193cml0ZV9wb2ludCggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKnB0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JtYXQsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBibGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgYSBncm91cCB1c2luZyB3ZWxsLWtub3duIGRvbWFpbiBwYXJhbWV0ZXJzCisgKgorICogXHBhcmFtIGdycCAgICAgICBEZXN0aW5hdGlvbiBncm91cAorICogXHBhcmFtIGluZGV4ICAgICBJbmRleCBpbiB0aGUgbGlzdCBvZiB3ZWxsLWtub3duIGRvbWFpbiBwYXJhbWV0ZXJzCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9YWFggaWYgaW5pdGlhbGl6YXRpb24gZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFIGZvciB1bmtvd25uIGdyb3VwcworICoKKyAqIFxub3RlICAgICAgICAgICAgSW5kZXggc2hvdWxkIGJlIGEgdmFsdWUgb2YgUkZDIDQ0OTIncyBlbnVtIE5hbWVkQ3VydmUsCisgKiAgICAgICAgICAgICAgICAgIHVzdWFsbHkgaW4gdGhlIGZvcm0gb2YgYSBNQkVEVExTX0VDUF9EUF9YWFggbWFjcm8uCisgKi8KK2ludCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9ncm91cF9pZCBpbmRleCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IGEgZ3JvdXAgZnJvbSBhIFRMUyBFQ1BhcmFtZXRlcnMgcmVjb3JkCisgKgorICogXHBhcmFtIGdycCAgICAgICBEZXN0aW5hdGlvbiBncm91cAorICogXHBhcmFtIGJ1ZiAgICAgICAmKFN0YXJ0IG9mIGlucHV0IGJ1ZmZlcikKKyAqIFxwYXJhbSBsZW4gICAgICAgQnVmZmVyIGxlbmd0aAorICoKKyAqIFxub3RlICAgICAgICAgICAgYnVmIGlzIHVwZGF0ZWQgdG8gcG9pbnQgcmlnaHQgYWZ0ZXIgRUNQYXJhbWV0ZXJzIG9uIGV4aXQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX1hYWCBpZiBpbml0aWFsaXphdGlvbiBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBIGlmIGlucHV0IGlzIGludmFsaWQKKyAqLworaW50IG1iZWR0bHNfZWNwX3Rsc19yZWFkX2dyb3VwKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqYnVmLCBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSB0aGUgVExTIEVDUGFyYW1ldGVycyByZWNvcmQgZm9yIGEgZ3JvdXAKKyAqCisgKiBccGFyYW0gZ3JwICAgICAgIEVDUCBncm91cCB1c2VkCisgKiBccGFyYW0gb2xlbiAgICAgIE51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuCisgKiBccGFyYW0gYnVmICAgICAgIEJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIGJsZW4gICAgICBCdWZmZXIgbGVuZ3RoCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIG9yIE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMCisgKi8KK2ludCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfZ3JvdXAoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBibGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBNdWx0aXBsaWNhdGlvbiBieSBhbiBpbnRlZ2VyOiBSID0gbSAqIFAKKyAqICAgICAgICAgICAgICAgICAgKE5vdCB0aHJlYWQtc2FmZSB0byB1c2Ugc2FtZSBncm91cCBpbiBtdWx0aXBsZSB0aHJlYWRzKQorICoKKyAqIFxub3RlICAgICAgICAgICAgSW4gb3JkZXIgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcywgdGhpcyBmdW5jdGlvbgorICogICAgICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgZXhhY3Qgc2FtZSBzZXF1ZW5jZSBvZiAoYmFzZSBmaWVsZCkKKyAqICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucyBmb3IgYW55IHZhbGlkIG0uIEl0IGF2b2lkcyBhbnkgaWYtYnJhbmNoIG9yCisgKiAgICAgICAgICAgICAgICAgIGFycmF5IGluZGV4IGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgbS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIElmIGZfcm5nIGlzIG5vdCBOVUxMLCBpdCBpcyB1c2VkIHRvIHJhbmRvbWl6ZSBpbnRlcm1lZGlhdGUKKyAqICAgICAgICAgICAgICAgICAgcmVzdWx0cyBpbiBvcmRlciB0byBwcmV2ZW50IHBvdGVudGlhbCB0aW1pbmcgYXR0YWNrcworICogICAgICAgICAgICAgICAgICB0YXJnZXRpbmcgdGhlc2UgcmVzdWx0cy4gSXQgaXMgcmVjb21tZW5kZWQgdG8gYWx3YXlzCisgKiAgICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBub24tTlVMTCBmX3JuZyAodGhlIG92ZXJoZWFkIGlzIG5lZ2xpZ2libGUpLgorICoKKyAqIFxwYXJhbSBncnAgICAgICAgRUNQIGdyb3VwCisgKiBccGFyYW0gUiAgICAgICAgIERlc3RpbmF0aW9uIHBvaW50CisgKiBccGFyYW0gbSAgICAgICAgIEludGVnZXIgYnkgd2hpY2ggdG8gbXVsdGlwbHkKKyAqIFxwYXJhbSBQICAgICAgICAgUG9pbnQgdG8gbXVsdGlwbHkKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uIChzZWUgbm90ZXMpCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZIGlmIG0gaXMgbm90IGEgdmFsaWQgcHJpdmtleQorICogICAgICAgICAgICAgICAgICBvciBQIGlzIG5vdCBhIHZhbGlkIHB1YmtleSwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfZWNwX211bCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKlIsCisgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKm0sIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQLAorICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIE11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiBvZiB0d28gcG9pbnRzIGJ5IGludGVnZXJzOgorICogICAgICAgICAgICAgICAgICBSID0gbSAqIFAgKyBuICogUQorICogICAgICAgICAgICAgICAgICAoTm90IHRocmVhZC1zYWZlIHRvIHVzZSBzYW1lIGdyb3VwIGluIG11bHRpcGxlIHRocmVhZHMpCisgKgorICogXG5vdGUgICAgICAgICAgICBJbiBjb250cmFzdCB0byBtYmVkdGxzX2VjcF9tdWwoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBndWFyYW50ZWUKKyAqICAgICAgICAgICAgICAgICAgYSBjb25zdGFudCBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nLgorICoKKyAqIFxwYXJhbSBncnAgICAgICAgRUNQIGdyb3VwCisgKiBccGFyYW0gUiAgICAgICAgIERlc3RpbmF0aW9uIHBvaW50CisgKiBccGFyYW0gbSAgICAgICAgIEludGVnZXIgYnkgd2hpY2ggdG8gbXVsdGlwbHkgUAorICogXHBhcmFtIFAgICAgICAgICBQb2ludCB0byBtdWx0aXBseSBieSBtCisgKiBccGFyYW0gbiAgICAgICAgIEludGVnZXIgYnkgd2hpY2ggdG8gbXVsdGlwbHkgUQorICogXHBhcmFtIFEgICAgICAgICBQb2ludCB0byBiZSBtdWx0aXBsaWVkIGJ5IG4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZIGlmIG0gb3IgbiBpcyBub3QgYSB2YWxpZCBwcml2a2V5CisgKiAgICAgICAgICAgICAgICAgIG9yIFAgb3IgUSBpcyBub3QgYSB2YWxpZCBwdWJrZXksCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2VjcF9tdWxhZGQoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpSLAorICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpICptLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCwKKyAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqbiwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlEgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENoZWNrIHRoYXQgYSBwb2ludCBpcyBhIHZhbGlkIHB1YmxpYyBrZXkgb24gdGhpcyBjdXJ2ZQorICoKKyAqIFxwYXJhbSBncnAgICAgICAgQ3VydmUvZ3JvdXAgdGhlIHBvaW50IHNob3VsZCBiZWxvbmcgdG8KKyAqIFxwYXJhbSBwdCAgICAgICAgUG9pbnQgdG8gY2hlY2sKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgcG9pbnQgaXMgYSB2YWxpZCBwdWJsaWMga2V5LAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkgb3RoZXJ3aXNlLgorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBvbmx5IGNoZWNrcyB0aGUgcG9pbnQgaXMgbm9uLXplcm8sIGhhcyB2YWxpZAorICogICAgICAgICAgICAgICAgICBjb29yZGluYXRlcyBhbmQgbGllcyBvbiB0aGUgY3VydmUsIGJ1dCBub3QgdGhhdCBpdCBpcworICogICAgICAgICAgICAgICAgICBpbmRlZWQgYSBtdWx0aXBsZSBvZiBHLiBUaGlzIGlzIGFkZGl0aW9uYWwgY2hlY2sgaXMgbW9yZQorICogICAgICAgICAgICAgICAgICBleHBlbnNpdmUsIGlzbid0IHJlcXVpcmVkIGJ5IHN0YW5kYXJkcywgYW5kIHNob3VsZG4ndCBiZQorICogICAgICAgICAgICAgICAgICBuZWNlc3NhcnkgaWYgdGhlIGdyb3VwIHVzZWQgaGFzIGEgc21hbGwgY29mYWN0b3IuIEluCisgKiAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIsIGl0IGlzIHVzZWxlc3MgZm9yIHRoZSBOSVNUIGdyb3VwcyB3aGljaCBhbGwKKyAqICAgICAgICAgICAgICAgICAgaGF2ZSBhIGNvZmFjdG9yIG9mIDEuCisgKgorICogXG5vdGUgICAgICAgICAgICBVc2VzIGJhcmUgY29tcG9uZW50cyByYXRoZXIgdGhhbiBhbiBtYmVkdGxzX2VjcF9rZXlwYWlyIHN0cnVjdHVyZQorICogICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBlYXNlIHVzZSB3aXRoIG90aGVyIHN0cnVjdHVyZXMgc3VjaCBhcworICogICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjZGhfY29udGV4dCBvZiBtYmVkdGxzX2VjZHNhX2NvbnRleHQuCisgKi8KK2ludCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpwdCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ2hlY2sgdGhhdCBhbiBtYmVkdGxzX21waSBpcyBhIHZhbGlkIHByaXZhdGUga2V5IGZvciB0aGlzIGN1cnZlCisgKgorICogXHBhcmFtIGdycCAgICAgICBHcm91cCB1c2VkCisgKiBccGFyYW0gZCAgICAgICAgIEludGVnZXIgdG8gY2hlY2sKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgcG9pbnQgaXMgYSB2YWxpZCBwcml2YXRlIGtleSwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZIG90aGVyd2lzZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFVzZXMgYmFyZSBjb21wb25lbnRzIHJhdGhlciB0aGFuIGFuIG1iZWR0bHNfZWNwX2tleXBhaXIgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGVhc2UgdXNlIHdpdGggb3RoZXIgc3RydWN0dXJlcyBzdWNoIGFzCisgKiAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9jb250ZXh0IG9mIG1iZWR0bHNfZWNkc2FfY29udGV4dC4KKyAqLworaW50IG1iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXkoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIGNvbnN0IG1iZWR0bHNfbXBpICpkICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZW5lcmF0ZSBhIGtleXBhaXIgd2l0aCBjb25maWd1cmFibGUgYmFzZSBwb2ludAorICoKKyAqIFxwYXJhbSBncnAgICAgICAgRUNQIGdyb3VwCisgKiBccGFyYW0gRyAgICAgICAgIENob3NlbiBiYXNlIHBvaW50CisgKiBccGFyYW0gZCAgICAgICAgIERlc3RpbmF0aW9uIE1QSSAoc2VjcmV0IHBhcnQpCisgKiBccGFyYW0gUSAgICAgICAgIERlc3RpbmF0aW9uIHBvaW50IChwdWJsaWMgcGFydCkKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgb3IgYSBNQkVEVExTX0VSUl9FQ1BfWFhYIG9yIE1CRURUTFNfTVBJX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgICBVc2VzIGJhcmUgY29tcG9uZW50cyByYXRoZXIgdGhhbiBhbiBtYmVkdGxzX2VjcF9rZXlwYWlyIHN0cnVjdHVyZQorICogICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBlYXNlIHVzZSB3aXRoIG90aGVyIHN0cnVjdHVyZXMgc3VjaCBhcworICogICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjZGhfY29udGV4dCBvZiBtYmVkdGxzX2VjZHNhX2NvbnRleHQuCisgKi8KK2ludCBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpcl9iYXNlKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKkcsCisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21waSAqZCwgbWJlZHRsc19lY3BfcG9pbnQgKlEsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJhdGUgYSBrZXlwYWlyCisgKgorICogXHBhcmFtIGdycCAgICAgICBFQ1AgZ3JvdXAKKyAqIFxwYXJhbSBkICAgICAgICAgRGVzdGluYXRpb24gTVBJIChzZWNyZXQgcGFydCkKKyAqIFxwYXJhbSBRICAgICAgICAgRGVzdGluYXRpb24gcG9pbnQgKHB1YmxpYyBwYXJ0KQorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBvciBhIE1CRURUTFNfRVJSX0VDUF9YWFggb3IgTUJFRFRMU19NUElfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFVzZXMgYmFyZSBjb21wb25lbnRzIHJhdGhlciB0aGFuIGFuIG1iZWR0bHNfZWNwX2tleXBhaXIgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGVhc2UgdXNlIHdpdGggb3RoZXIgc3RydWN0dXJlcyBzdWNoIGFzCisgKiAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9jb250ZXh0IG9mIG1iZWR0bHNfZWNkc2FfY29udGV4dC4KKyAqLworaW50IG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX21waSAqZCwgbWJlZHRsc19lY3BfcG9pbnQgKlEsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJhdGUgYSBrZXlwYWlyCisgKgorICogXHBhcmFtIGdycF9pZCAgICBFQ1AgZ3JvdXAgaWRlbnRpZmllcgorICogXHBhcmFtIGtleSAgICAgICBEZXN0aW5hdGlvbiBrZXlwYWlyCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIG9yIGEgTUJFRFRMU19FUlJfRUNQX1hYWCBvciBNQkVEVExTX01QSV9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19lY3BfZ2VuX2tleSggbWJlZHRsc19lY3BfZ3JvdXBfaWQgZ3JwX2lkLCBtYmVkdGxzX2VjcF9rZXlwYWlyICprZXksCisgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ2hlY2sgYSBwdWJsaWMtcHJpdmF0ZSBrZXkgcGFpcgorICoKKyAqIFxwYXJhbSBwdWIgICAgICAgS2V5cGFpciBzdHJ1Y3R1cmUgaG9sZGluZyBhIHB1YmxpYyBrZXkKKyAqIFxwYXJhbSBwcnYgICAgICAgS2V5cGFpciBzdHJ1Y3R1cmUgaG9sZGluZyBhIHByaXZhdGUgKHBsdXMgcHVibGljKSBrZXkKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCAoa2V5cyBhcmUgdmFsaWQgYW5kIG1hdGNoKSwgb3IKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBLCBvcgorICogICAgICAgICAgICAgICAgICBhIE1CRURUTFNfRVJSX0VDUF9YWFggb3IgTUJFRFRMU19FUlJfTVBJX1hYWCBjb2RlLgorICovCitpbnQgbWJlZHRsc19lY3BfY2hlY2tfcHViX3ByaXYoIGNvbnN0IG1iZWR0bHNfZWNwX2tleXBhaXIgKnB1YiwgY29uc3QgbWJlZHRsc19lY3Bfa2V5cGFpciAqcHJ2ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiBhIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2VjcF9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGVjcC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VudHJvcHkuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZW50cm9weS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0N2FjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VudHJvcHkuaApAQCAtMCwwICsxLDI4NyBAQAorLyoqCisgKiBcZmlsZSBlbnRyb3B5LmgKKyAqCisgKiBcYnJpZWYgRW50cm9weSBhY2N1bXVsYXRvciBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0VOVFJPUFlfSAorI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKSAmJiAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2KQorI2luY2x1ZGUgInNoYTUxMi5oIgorI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfU0hBNTEyX0FDQ1VNVUxBVE9SCisjZWxzZQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX1NIQTI1Nl9BQ0NVTVVMQVRPUgorI2luY2x1ZGUgInNoYTI1Ni5oIgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyNpbmNsdWRlICJ0aHJlYWRpbmcuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVHRV9DKQorI2luY2x1ZGUgImhhdmVnZS5oIgorI2VuZGlmCisKKyNkZWZpbmUgTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICAgICAgICAgICAgICAgICAtMHgwMDNDICAvKio8IENyaXRpY2FsIGVudHJvcHkgc291cmNlIGZhaWx1cmUuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0VOVFJPUFlfTUFYX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgLTB4MDAzRSAgLyoqPCBObyBtb3JlIHNvdXJjZXMgY2FuIGJlIGFkZGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9FTlRST1BZX05PX1NPVVJDRVNfREVGSU5FRCAgICAgICAgICAgIC0weDAwNDAgIC8qKjwgTm8gc291cmNlcyBoYXZlIGJlZW4gYWRkZWQgdG8gcG9sbC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfRU5UUk9QWV9OT19TVFJPTkdfU09VUkNFICAgICAgICAgICAgICAtMHgwMDNEICAvKio8IE5vIHN0cm9uZyBzb3VyY2VzIGhhdmUgYmVlbiBhZGRlZCB0byBwb2xsLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9FTlRST1BZX0ZJTEVfSU9fRVJST1IgICAgICAgICAgICAgICAgIC0weDAwM0YgIC8qKjwgUmVhZC93cml0ZSBlcnJvciBpbiBmaWxlLiAqLworCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncworICoKKyAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGNhbiBzZXQgZm9yIHRoaXMgbW9kdWxlIGFyZSBpbiB0aGlzIHNlY3Rpb24uCisgKiBFaXRoZXIgY2hhbmdlIHRoZW0gaW4gY29uZmlnLmggb3IgZGVmaW5lIHRoZW0gb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZS4KKyAqIFx7CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9NQVhfU09VUkNFUykKKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX01BWF9TT1VSQ0VTICAgICAyMCAgICAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2Ygc291cmNlcyBzdXBwb3J0ZWQgKi8KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX01BWF9HQVRIRVIpCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NQVhfR0FUSEVSICAgICAgMTI4ICAgICAvKio8IE1heGltdW0gYW1vdW50IHJlcXVlc3RlZCBmcm9tIGVudHJvcHkgc291cmNlcyAqLworI2VuZGlmCisKKy8qIFx9IG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9TSEE1MTJfQUNDVU1VTEFUT1IpCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICAgICAgNjQgICAgICAvKio8IEJsb2NrIHNpemUgb2YgZW50cm9weSBhY2N1bXVsYXRvciAoU0hBLTUxMikgKi8KKyNlbHNlCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICAgICAgMzIgICAgICAvKio8IEJsb2NrIHNpemUgb2YgZW50cm9weSBhY2N1bXVsYXRvciAoU0hBLTI1NikgKi8KKyNlbmRpZgorCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NQVhfU0VFRF9TSVpFICAgMTAyNCAgICAvKio8IE1heGltdW0gc2l6ZSBvZiBzZWVkIHdlIHJlYWQgZnJvbSBzZWVkIGZpbGUgKi8KKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9NQU5VQUwgICBNQkVEVExTX0VOVFJPUFlfTUFYX1NPVVJDRVMKKworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfU09VUkNFX1NUUk9ORyAgIDEgICAgICAgLyoqPCBFbnRyb3B5IHNvdXJjZSBpcyBzdHJvbmcgICAqLworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfU09VUkNFX1dFQUsgICAgIDAgICAgICAgLyoqPCBFbnRyb3B5IHNvdXJjZSBpcyB3ZWFrICAgICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBFbnRyb3B5IHBvbGwgY2FsbGJhY2sgcG9pbnRlcgorICoKKyAqIFxwYXJhbSBkYXRhICAgICAgQ2FsbGJhY2stc3BlY2lmaWMgZGF0YSBwb2ludGVyCisgKiBccGFyYW0gb3V0cHV0ICAgIERhdGEgdG8gZmlsbAorICogXHBhcmFtIGxlbiAgICAgICBNYXhpbXVtIHNpemUgdG8gcHJvdmlkZQorICogXHBhcmFtIG9sZW4gICAgICBUaGUgYWN0dWFsIGFtb3VudCBvZiBieXRlcyBwdXQgaW50byB0aGUgYnVmZmVyIChDYW4gYmUgMCkKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgbm8gY3JpdGljYWwgZmFpbHVyZXMgb2NjdXJyZWQsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCBvdGhlcndpc2UKKyAqLwordHlwZWRlZiBpbnQgKCptYmVkdGxzX2VudHJvcHlfZl9zb3VyY2VfcHRyKSh2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVudHJvcHkgc291cmNlIHN0YXRlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbWJlZHRsc19lbnRyb3B5X2Zfc291cmNlX3B0ciAgICBmX3NvdXJjZTsgICAvKio8IFRoZSBlbnRyb3B5IHNvdXJjZSBjYWxsYmFjayAqLworICAgIHZvaWQgKiAgICAgICAgICBwX3NvdXJjZTsgICAvKio8IFRoZSBjYWxsYmFjayBkYXRhIHBvaW50ZXIgKi8KKyAgICBzaXplX3QgICAgICAgICAgc2l6ZTsgICAgICAgLyoqPCBBbW91bnQgcmVjZWl2ZWQgaW4gYnl0ZXMgKi8KKyAgICBzaXplX3QgICAgICAgICAgdGhyZXNob2xkOyAgLyoqPCBNaW5pbXVtIGJ5dGVzIHJlcXVpcmVkIGJlZm9yZSByZWxlYXNlICovCisgICAgaW50ICAgICAgICAgICAgIHN0cm9uZzsgICAgIC8qKjwgSXMgdGhlIHNvdXJjZSBzdHJvbmc/ICovCit9CittYmVkdGxzX2VudHJvcHlfc291cmNlX3N0YXRlOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRW50cm9weSBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX1NIQTUxMl9BQ0NVTVVMQVRPUikKKyAgICBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICBhY2N1bXVsYXRvcjsKKyNlbHNlCisgICAgbWJlZHRsc19zaGEyNTZfY29udGV4dCAgYWNjdW11bGF0b3I7CisjZW5kaWYKKyAgICBpbnQgICAgICAgICAgICAgc291cmNlX2NvdW50OworICAgIG1iZWR0bHNfZW50cm9weV9zb3VyY2Vfc3RhdGUgICAgc291cmNlW01CRURUTFNfRU5UUk9QWV9NQVhfU09VUkNFU107CisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVHRV9DKQorICAgIG1iZWR0bHNfaGF2ZWdlX3N0YXRlICAgIGhhdmVnZV9kYXRhOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgbXV0ZXg7ICAgIC8qITwgbXV0ZXggICAgICAgICAgICAgICAgICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKKyAgICBpbnQgaW5pdGlhbF9lbnRyb3B5X3J1bjsKKyNlbmRpZgorfQorbWJlZHRsc19lbnRyb3B5X2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIHRoZSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgICBFbnRyb3B5IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfZW50cm9weV9pbml0KCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIHRoZSBkYXRhIGluIHRoZSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgICBFbnRyb3B5IGNvbnRleHQgdG8gZnJlZQorICovCit2b2lkIG1iZWR0bHNfZW50cm9weV9mcmVlKCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBBZGRzIGFuIGVudHJvcHkgc291cmNlIHRvIHBvbGwKKyAqICAgICAgICAgICAgICAgICAgKFRocmVhZC1zYWZlIGlmIE1CRURUTFNfVEhSRUFESU5HX0MgaXMgZW5hYmxlZCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEVudHJvcHkgY29udGV4dAorICogXHBhcmFtIGZfc291cmNlICBFbnRyb3B5IGZ1bmN0aW9uCisgKiBccGFyYW0gcF9zb3VyY2UgIEZ1bmN0aW9uIGRhdGEKKyAqIFxwYXJhbSB0aHJlc2hvbGQgTWluaW11bSByZXF1aXJlZCBmcm9tIHNvdXJjZSBiZWZvcmUgZW50cm9weSBpcyByZWxlYXNlZAorICogICAgICAgICAgICAgICAgICAoIHdpdGggbWJlZHRsc19lbnRyb3B5X2Z1bmMoKSApIChpbiBieXRlcykKKyAqIFxwYXJhbSBzdHJvbmcgICAgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9TVFJPTkcgb3IKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRTTF9FTlRST1BZX1NPVVJDRV9XRUFLLgorICogICAgICAgICAgICAgICAgICBBdCBsZWFzdCBvbmUgc3Ryb25nIHNvdXJjZSBuZWVkcyB0byBiZSBhZGRlZC4KKyAqICAgICAgICAgICAgICAgICAgV2Vha2VyIHNvdXJjZXMgKHN1Y2ggYXMgdGhlIGN5Y2xlIGNvdW50ZXIpIGNhbiBiZSB1c2VkIGFzCisgKiAgICAgICAgICAgICAgICAgIGEgY29tcGxlbWVudC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBNQkVEVExTX0VSUl9FTlRST1BZX01BWF9TT1VSQ0VTCisgKi8KK2ludCBtYmVkdGxzX2VudHJvcHlfYWRkX3NvdXJjZSggbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZW50cm9weV9mX3NvdXJjZV9wdHIgZl9zb3VyY2UsIHZvaWQgKnBfc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRocmVzaG9sZCwgaW50IHN0cm9uZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgVHJpZ2dlciBhbiBleHRyYSBnYXRoZXIgcG9sbCBmb3IgdGhlIGFjY3VtdWxhdG9yCisgKiAgICAgICAgICAgICAgICAgIChUaHJlYWQtc2FmZSBpZiBNQkVEVExTX1RIUkVBRElOR19DIGlzIGVuYWJsZWQpCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFbnRyb3B5IGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX2VudHJvcHlfZ2F0aGVyKCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBSZXRyaWV2ZSBlbnRyb3B5IGZyb20gdGhlIGFjY3VtdWxhdG9yCisgKiAgICAgICAgICAgICAgICAgIChNYXhpbXVtIGxlbmd0aDogTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUpCisgKiAgICAgICAgICAgICAgICAgIChUaHJlYWQtc2FmZSBpZiBNQkVEVExTX1RIUkVBRElOR19DIGlzIGVuYWJsZWQpCisgKgorICogXHBhcmFtIGRhdGEgICAgICBFbnRyb3B5IGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICAgQnVmZmVyIHRvIGZpbGwKKyAqIFxwYXJhbSBsZW4gICAgICAgTnVtYmVyIG9mIGJ5dGVzIGRlc2lyZWQsIG11c3QgYmUgYXQgbW9zdCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfZW50cm9weV9mdW5jKCB2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEFkZCBkYXRhIHRvIHRoZSBhY2N1bXVsYXRvciBtYW51YWxseQorICogICAgICAgICAgICAgICAgICAoVGhyZWFkLXNhZmUgaWYgTUJFRFRMU19USFJFQURJTkdfQyBpcyBlbmFibGVkKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgRW50cm9weSBjb250ZXh0CisgKiBccGFyYW0gZGF0YSAgICAgIERhdGEgdG8gYWRkCisgKiBccGFyYW0gbGVuICAgICAgIExlbmd0aCBvZiBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfZW50cm9weV91cGRhdGVfbWFudWFsKCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKKy8qKgorICogXGJyaWVmICAgICAgICAgICBUcmlnZ2VyIGFuIHVwZGF0ZSBvZiB0aGUgc2VlZCBmaWxlIGluIE5WIGJ5IHVzaW5nIHRoZQorICogICAgICAgICAgICAgICAgICBjdXJyZW50IGVudHJvcHkgcG9vbC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEVudHJvcHkgY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX252X3NlZWQoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHggKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBXcml0ZSBhIHNlZWQgZmlsZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEVudHJvcHkgY29udGV4dAorICogXHBhcmFtIHBhdGggICAgICAgICAgTmFtZSBvZiB0aGUgZmlsZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0VOVFJPUFlfRklMRV9JT19FUlJPUiBvbiBmaWxlIGVycm9yLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX2VudHJvcHlfd3JpdGVfc2VlZF9maWxlKCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgUmVhZCBhbmQgdXBkYXRlIGEgc2VlZCBmaWxlLiBTZWVkIGlzIGFkZGVkIHRvIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLiBObyBtb3JlIHRoYW4gTUJFRFRMU19FTlRST1BZX01BWF9TRUVEX1NJWkUgYnl0ZXMgYXJlCisgKiAgICAgICAgICAgICAgICAgICAgICByZWFkIGZyb20gdGhlIHNlZWQgZmlsZS4gVGhlIHJlc3QgaXMgaWdub3JlZC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBFbnRyb3B5IGNvbnRleHQKKyAqIFxwYXJhbSBwYXRoICAgICAgICAgIE5hbWUgb2YgdGhlIGZpbGUKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FTlRST1BZX0ZJTEVfSU9fRVJST1Igb24gZmlsZSBlcnJvciwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc19lbnRyb3B5X3VwZGF0ZV9zZWVkX2ZpbGUoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGggKTsKKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogICAgICAgICAgICAgICAgIFRoaXMgbW9kdWxlIHNlbGYtdGVzdCBhbHNvIGNhbGxzIHRoZSBlbnRyb3B5IHNlbGYtdGVzdCwKKyAqICAgICAgICAgICAgICAgICBtYmVkdGxzX2VudHJvcHlfc291cmNlX3NlbGZfdGVzdCgpOworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgYSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19lbnRyb3B5X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVCkKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqICAgICAgICAgICAgICAgICBWZXJpZmllcyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBoYXJkd2FyZSBlbnRyb3B5IHNvdXJjZQorICogICAgICAgICAgICAgICAgIHByb3ZpZGVkIGJ5IHRoZSBmdW5jdGlvbiAnbWJlZHRsc19oYXJkd2FyZV9wb2xsKCknLgorICoKKyAqICAgICAgICAgICAgICAgICBOb3RlIHRoaXMgaXMgdGhlIG9ubHkgaGFyZHdhcmUgZW50cm9weSBzb3VyY2UgdGhhdCBpcyBrbm93bgorICogICAgICAgICAgICAgICAgIGF0IGxpbmsgdGltZSwgYW5kIG90aGVyIGVudHJvcHkgc291cmNlcyBjb25maWd1cmVkCisgKiAgICAgICAgICAgICAgICAgZHluYW1pY2FsbHkgYXQgcnVudGltZSBieSB0aGUgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICAgICBtYmVkdGxzX2VudHJvcHlfYWRkX3NvdXJjZSgpIHdpbGwgbm90IGJlIHRlc3RlZC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIGEgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfZW50cm9weV9zb3VyY2Vfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZW50cm9weS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VudHJvcHlfcG9sbC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lbnRyb3B5X3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTI1OGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lbnRyb3B5X3BvbGwuaApAQCAtMCwwICsxLDEwOSBAQAorLyoqCisgKiBcZmlsZSBlbnRyb3B5X3BvbGwuaAorICoKKyAqIFxicmllZiBQbGF0Zm9ybS1zcGVjaWZpYyBhbmQgY3VzdG9tIGVudHJvcHkgcG9sbGluZyBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19FTlRST1BZX1BPTExfSAorI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfUE9MTF9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyAqIERlZmF1bHQgdGhyZXNob2xkcyBmb3IgYnVpbHQtaW4gc291cmNlcywgaW4gYnl0ZXMKKyAqLworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfTUlOX1BMQVRGT1JNICAgICAzMiAgICAgLyoqPCBNaW5pbXVtIGZvciBwbGF0Zm9ybSBzb3VyY2UgICAgKi8KKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX01JTl9IQVZFR0UgICAgICAgMzIgICAgIC8qKjwgTWluaW11bSBmb3IgSEFWRUdFICAgICAgICAgICAgICovCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NSU5fSEFSRENMT0NLICAgICA0ICAgICAvKio8IE1pbmltdW0gZm9yIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jaygpICAgICAgICAqLworI2lmICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9NSU5fSEFSRFdBUkUpCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NSU5fSEFSRFdBUkUgICAgIDMyICAgICAvKio8IE1pbmltdW0gZm9yIHRoZSBoYXJkd2FyZSBzb3VyY2UgKi8KKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRW50cm9weSBwb2xsIGNhbGxiYWNrIHRoYXQgcHJvdmlkZXMgMCBlbnRyb3B5LgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZKQorICAgIGludCBtYmVkdGxzX251bGxfZW50cm9weV9wb2xsKCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiApOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUGxhdGZvcm0tc3BlY2lmaWMgZW50cm9weSBwb2xsIGNhbGxiYWNrCisgKi8KK2ludCBtYmVkdGxzX3BsYXRmb3JtX2VudHJvcHlfcG9sbCggdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBIQVZFR0UgYmFzZWQgZW50cm9weSBwb2xsIGNhbGxiYWNrCisgKgorICogUmVxdWlyZXMgYW4gSEFWRUdFIHN0YXRlIGFzIGl0cyBkYXRhIHBvaW50ZXIuCisgKi8KK2ludCBtYmVkdGxzX2hhdmVnZV9wb2xsKCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrLWJhc2VkIGVudHJvcHkgcG9sbCBjYWxsYmFjaworICovCitpbnQgbWJlZHRsc19oYXJkY2xvY2tfcG9sbCggdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4gKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVudHJvcHkgcG9sbCBjYWxsYmFjayBmb3IgYSBoYXJkd2FyZSBzb3VyY2UKKyAqCisgKiBcd2FybmluZyAgICAgICAgIFRoaXMgaXMgbm90IHByb3ZpZGVkIGJ5IG1iZWQgVExTIQorICogICAgICAgICAgICAgICAgICBTZWUgXGMgTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVCBpbiBjb25maWcuaC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoaXMgbXVzdCBhY2NlcHQgTlVMTCBhcyBpdHMgZmlyc3QgYXJndW1lbnQuCisgKi8KK2ludCBtYmVkdGxzX2hhcmR3YXJlX3BvbGwoIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVudHJvcHkgcG9sbCBjYWxsYmFjayBmb3IgYSBub24tdm9sYXRpbGUgc2VlZCBmaWxlCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGlzIG11c3QgYWNjZXB0IE5VTEwgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LgorICovCitpbnQgbWJlZHRsc19udl9zZWVkX3BvbGwoIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuICk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGVudHJvcHlfcG9sbC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Vycm9yLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Vycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1NDlmNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZXJyb3IuaApAQCAtMCwwICsxLDEwNyBAQAorLyoqCisgKiBcZmlsZSBlcnJvci5oCisgKgorICogXGJyaWVmIEVycm9yIHRvIHN0cmluZyB0cmFuc2xhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0VSUk9SX0gKKyNkZWZpbmUgTUJFRFRMU19FUlJPUl9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyoqCisgKiBFcnJvciBjb2RlIGxheW91dC4KKyAqCisgKiBDdXJyZW50bHkgd2UgdHJ5IHRvIGtlZXAgYWxsIGVycm9yIGNvZGVzIHdpdGhpbiB0aGUgbmVnYXRpdmUgc3BhY2Ugb2YgMTYKKyAqIGJpdHMgc2lnbmVkIGludGVnZXJzIHRvIHN1cHBvcnQgYWxsIHBsYXRmb3JtcyAoLTB4MDAwMSAtIC0weDdGRkYpLiBJbgorICogYWRkaXRpb24gd2UnZCBsaWtlIHRvIGdpdmUgdHdvIGxheWVycyBvZiBpbmZvcm1hdGlvbiBvbiB0aGUgZXJyb3IgaWYKKyAqIHBvc3NpYmxlLgorICoKKyAqIEZvciB0aGF0IHB1cnBvc2UgdGhlIGVycm9yIGNvZGVzIGFyZSBzZWdtZW50ZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXI6CisgKgorICogMTYgYml0IGVycm9yIGNvZGUgYml0LXNlZ21lbnRhdGlvbgorICoKKyAqIDEgYml0ICAtIFVudXNlZCAoc2lnbiBiaXQpCisgKiAzIGJpdHMgLSBIaWdoIGxldmVsIG1vZHVsZSBJRAorICogNSBiaXRzIC0gTW9kdWxlLWRlcGVuZGVudCBlcnJvciBjb2RlCisgKiA3IGJpdHMgLSBMb3cgbGV2ZWwgbW9kdWxlIGVycm9ycworICoKKyAqIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGxvdy1sZXZlbCBlcnJvciBjb2RlcyBhcmUgZGl2aWRlZCBpbiBldmVuIGFuZCBvZGQsCisgKiBldmVuIGNvZGVzIHdlcmUgYXNzaWduZWQgZmlyc3QsIGFuZCAtMSBpcyByZXNlcnZlZCBmb3Igb3RoZXIgZXJyb3JzLgorICoKKyAqIExvdy1sZXZlbCBtb2R1bGUgZXJyb3JzICgweDAwMDItMHgwMDdFLCAweDAwMDMtMHgwMDdGKQorICoKKyAqIE1vZHVsZSAgIE5yICBDb2RlcyBhc3NpZ25lZAorICogTVBJICAgICAgIDcgIDB4MDAwMi0weDAwMTAKKyAqIEdDTSAgICAgICAyICAweDAwMTItMHgwMDE0CisgKiBCTE9XRklTSCAgMiAgMHgwMDE2LTB4MDAxOAorICogVEhSRUFESU5HIDMgIDB4MDAxQS0weDAwMUUKKyAqIEFFUyAgICAgICAyICAweDAwMjAtMHgwMDIyCisgKiBDQU1FTExJQSAgMiAgMHgwMDI0LTB4MDAyNgorICogWFRFQSAgICAgIDEgIDB4MDAyOC0weDAwMjgKKyAqIEJBU0U2NCAgICAyICAweDAwMkEtMHgwMDJDCisgKiBPSUQgICAgICAgMSAgMHgwMDJFLTB4MDAyRSAgIDB4MDAwQi0weDAwMEIKKyAqIFBBRExPQ0sgICAxICAweDAwMzAtMHgwMDMwCisgKiBERVMgICAgICAgMSAgMHgwMDMyLTB4MDAzMgorICogQ1RSX0RCUkcgIDQgIDB4MDAzNC0weDAwM0EKKyAqIEVOVFJPUFkgICAzICAweDAwM0MtMHgwMDQwICAgMHgwMDNELTB4MDAzRgorICogTkVUICAgICAgMTEgIDB4MDA0Mi0weDAwNTIgICAweDAwNDMtMHgwMDQ1CisgKiBBU04xICAgICAgNyAgMHgwMDYwLTB4MDA2QworICogUEJLREYyICAgIDEgIDB4MDA3Qy0weDAwN0MKKyAqIEhNQUNfRFJCRyA0ICAweDAwMDMtMHgwMDA5CisgKiBDQ00gICAgICAgMiAgICAgICAgICAgICAgICAgIDB4MDAwRC0weDAwMEYKKyAqCisgKiBIaWdoLWxldmVsIG1vZHVsZSBuciAoMyBiaXRzIC0gMHgwLi4uLTB4Ny4uLikKKyAqIE5hbWUgICAgICBJRCAgTnIgb2YgRXJyb3JzCisgKiBQRU0gICAgICAgMSAgIDkKKyAqIFBLQ1MjMTIgICAxICAgNCAoU3RhcnRlZCBmcm9tIHRvcCkKKyAqIFg1MDkgICAgICAyICAgMTkKKyAqIFBLQ1M1ICAgICAyICAgNCAoU3RhcnRlZCBmcm9tIHRvcCkKKyAqIERITSAgICAgICAzICAgOQorICogUEsgICAgICAgIDMgICAxNCAoU3RhcnRlZCBmcm9tIHRvcCkKKyAqIFJTQSAgICAgICA0ICAgOQorICogRUNQICAgICAgIDQgICA4IChTdGFydGVkIGZyb20gdG9wKQorICogTUQgICAgICAgIDUgICA0CisgKiBDSVBIRVIgICAgNiAgIDYKKyAqIFNTTCAgICAgICA2ICAgMTcgKFN0YXJ0ZWQgZnJvbSB0b3ApCisgKiBTU0wgICAgICAgNyAgIDMxCisgKgorICogTW9kdWxlIGRlcGVuZGVudCBlcnJvciBjb2RlICg1IGJpdHMgMHguMDAuLTB4LkY4LikKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFRyYW5zbGF0ZSBhIG1iZWQgVExTIGVycm9yIGNvZGUgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwKKyAqICAgICAgICBSZXN1bHQgaXMgdHJ1bmNhdGVkIGlmIG5lY2Vzc2FyeSBhbmQgYWx3YXlzIGluY2x1ZGVzIGEgdGVybWluYXRpbmcKKyAqICAgICAgICBudWxsIGJ5dGUuCisgKgorICogXHBhcmFtIGVycm51bSAgICBlcnJvciBjb2RlCisgKiBccGFyYW0gYnVmZmVyICAgIGJ1ZmZlciB0byBwbGFjZSByZXByZXNlbnRhdGlvbiBpbgorICogXHBhcmFtIGJ1ZmxlbiAgICBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICovCit2b2lkIG1iZWR0bHNfc3RyZXJyb3IoIGludCBlcnJudW0sIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbiApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZXJyb3IuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9nY20uaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZ2NtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI3N2FhZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZ2NtLmgKQEAgLTAsMCArMSwyMjAgQEAKKy8qKgorICogXGZpbGUgZ2NtLmgKKyAqCisgKiBcYnJpZWYgR2Fsb2lzL0NvdW50ZXIgbW9kZSBmb3IgMTI4LWJpdCBibG9jayBjaXBoZXJzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfR0NNX0gKKyNkZWZpbmUgTUJFRFRMU19HQ01fSAorCisjaW5jbHVkZSAiY2lwaGVyLmgiCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2RlZmluZSBNQkVEVExTX0dDTV9FTkNSWVBUICAgICAxCisjZGVmaW5lIE1CRURUTFNfR0NNX0RFQ1JZUFQgICAgIDAKKworI2RlZmluZSBNQkVEVExTX0VSUl9HQ01fQVVUSF9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgIC0weDAwMTIgIC8qKjwgQXV0aGVudGljYXRlZCBkZWNyeXB0aW9uIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfR0NNX0JBRF9JTlBVVCAgICAgICAgICAgICAgICAgICAgICAgICAtMHgwMDE0ICAvKio8IEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uLiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEdDTSBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGNpcGhlcl9jdHg7LyohPCBjaXBoZXIgY29udGV4dCB1c2VkICovCisgICAgdWludDY0X3QgSExbMTZdOyAgICAgICAgICAgIC8qITwgUHJlY2FsY3VsYXRlZCBIVGFibGUgKi8KKyAgICB1aW50NjRfdCBISFsxNl07ICAgICAgICAgICAgLyohPCBQcmVjYWxjdWxhdGVkIEhUYWJsZSAqLworICAgIHVpbnQ2NF90IGxlbjsgICAgICAgICAgICAgICAvKiE8IFRvdGFsIGRhdGEgbGVuZ3RoICovCisgICAgdWludDY0X3QgYWRkX2xlbjsgICAgICAgICAgIC8qITwgVG90YWwgYWRkIGxlbmd0aCAqLworICAgIHVuc2lnbmVkIGNoYXIgYmFzZV9lY3RyWzE2XTsvKiE8IEZpcnN0IEVDVFIgZm9yIHRhZyAqLworICAgIHVuc2lnbmVkIGNoYXIgeVsxNl07ICAgICAgICAvKiE8IFkgd29ya2luZyB2YWx1ZSAqLworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XTsgICAgICAvKiE8IGJ1ZiB3b3JraW5nIHZhbHVlICovCisgICAgaW50IG1vZGU7ICAgICAgICAgICAgICAgICAgIC8qITwgRW5jcnlwdCBvciBEZWNyeXB0ICovCit9CittYmVkdGxzX2djbV9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBHQ00gY29udGV4dCAoanVzdCBtYWtlcyByZWZlcmVuY2VzIHZhbGlkKQorICogICAgICAgICAgICAgICAgICBNYWtlcyB0aGUgY29udGV4dCByZWFkeSBmb3IgbWJlZHRsc19nY21fc2V0a2V5KCkgb3IKKyAqICAgICAgICAgICAgICAgICAgbWJlZHRsc19nY21fZnJlZSgpLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgR0NNIGNvbnRleHQgdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfZ2NtX2luaXQoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR0NNIGluaXRpYWxpemF0aW9uIChlbmNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgR0NNIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBjaXBoZXIgICAgY2lwaGVyIHRvIHVzZSAoYSAxMjgtYml0IGJsb2NrIGNpcGhlcikKKyAqIFxwYXJhbSBrZXkgICAgICAgZW5jcnlwdGlvbiBrZXkKKyAqIFxwYXJhbSBrZXliaXRzICAgbXVzdCBiZSAxMjgsIDE5MiBvciAyNTYKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBjaXBoZXIgc3BlY2lmaWMgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19nY21fc2V0a2V5KCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9pZF90IGNpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXliaXRzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHQ00gYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB1c2luZyBhIGJsb2NrIGNpcGhlcgorICoKKyAqIFxub3RlIE9uIGVuY3J5cHRpb24sIHRoZSBvdXRwdXQgYnVmZmVyIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgaW5wdXQgYnVmZmVyLgorICogICAgICAgT24gZGVjcnlwdGlvbiwgdGhlIG91dHB1dCBidWZmZXIgY2Fubm90IGJlIHRoZSBzYW1lIGFzIGlucHV0IGJ1ZmZlci4KKyAqICAgICAgIElmIGJ1ZmZlcnMgb3ZlcmxhcCwgdGhlIG91dHB1dCBidWZmZXIgbXVzdCB0cmFpbCBhdCBsZWFzdCA4IGJ5dGVzCisgKiAgICAgICBiZWhpbmQgdGhlIGlucHV0IGJ1ZmZlci4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEdDTSBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgIE1CRURUTFNfR0NNX0VOQ1JZUFQgb3IgTUJFRFRMU19HQ01fREVDUllQVAorICogXHBhcmFtIGxlbmd0aCAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpdiAgICAgICAgaW5pdGlhbGl6YXRpb24gdmVjdG9yCisgKiBccGFyYW0gaXZfbGVuICAgIGxlbmd0aCBvZiBJVgorICogXHBhcmFtIGFkZCAgICAgICBhZGRpdGlvbmFsIGRhdGEKKyAqIFxwYXJhbSBhZGRfbGVuICAgbGVuZ3RoIG9mIGFkZGl0aW9uYWwgZGF0YQorICogXHBhcmFtIGlucHV0ICAgICBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgICBidWZmZXIgZm9yIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKiBccGFyYW0gdGFnX2xlbiAgIGxlbmd0aCBvZiB0aGUgdGFnIHRvIGdlbmVyYXRlCisgKiBccGFyYW0gdGFnICAgICAgIGJ1ZmZlciBmb3IgaG9sZGluZyB0aGUgdGFnCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19nY21fY3J5cHRfYW5kX3RhZyggbWJlZHRsc19nY21fY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFkZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0YWdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdDTSBidWZmZXIgYXV0aGVudGljYXRlZCBkZWNyeXB0aW9uIHVzaW5nIGEgYmxvY2sgY2lwaGVyCisgKgorICogXG5vdGUgT24gZGVjcnlwdGlvbiwgdGhlIG91dHB1dCBidWZmZXIgY2Fubm90IGJlIHRoZSBzYW1lIGFzIGlucHV0IGJ1ZmZlci4KKyAqICAgICAgIElmIGJ1ZmZlcnMgb3ZlcmxhcCwgdGhlIG91dHB1dCBidWZmZXIgbXVzdCB0cmFpbCBhdCBsZWFzdCA4IGJ5dGVzCisgKiAgICAgICBiZWhpbmQgdGhlIGlucHV0IGJ1ZmZlci4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEdDTSBjb250ZXh0CisgKiBccGFyYW0gbGVuZ3RoICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGl2ICAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IKKyAqIFxwYXJhbSBpdl9sZW4gICAgbGVuZ3RoIG9mIElWCisgKiBccGFyYW0gYWRkICAgICAgIGFkZGl0aW9uYWwgZGF0YQorICogXHBhcmFtIGFkZF9sZW4gICBsZW5ndGggb2YgYWRkaXRpb25hbCBkYXRhCisgKiBccGFyYW0gdGFnICAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSB0YWcKKyAqIFxwYXJhbSB0YWdfbGVuICAgbGVuZ3RoIG9mIHRoZSB0YWcKKyAqIFxwYXJhbSBpbnB1dCAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICAgYnVmZmVyIGZvciBob2xkaW5nIHRoZSBvdXRwdXQgZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwgYW5kIGF1dGhlbnRpY2F0ZWQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfR0NNX0FVVEhfRkFJTEVEIGlmIHRhZyBkb2VzIG5vdCBtYXRjaAorICovCitpbnQgbWJlZHRsc19nY21fYXV0aF9kZWNyeXB0KCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZCwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWRkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRhZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZW5lcmljIEdDTSBzdHJlYW0gc3RhcnQgZnVuY3Rpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEdDTSBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgIE1CRURUTFNfR0NNX0VOQ1JZUFQgb3IgTUJFRFRMU19HQ01fREVDUllQVAorICogXHBhcmFtIGl2ICAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IKKyAqIFxwYXJhbSBpdl9sZW4gICAgbGVuZ3RoIG9mIElWCisgKiBccGFyYW0gYWRkICAgICAgIGFkZGl0aW9uYWwgZGF0YSAob3IgTlVMTCBpZiBsZW5ndGggaXMgMCkKKyAqIFxwYXJhbSBhZGRfbGVuICAgbGVuZ3RoIG9mIGFkZGl0aW9uYWwgZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfZ2NtX3N0YXJ0cyggbWJlZHRsc19nY21fY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkLAorICAgICAgICAgICAgICAgIHNpemVfdCBhZGRfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZW5lcmljIEdDTSB1cGRhdGUgZnVuY3Rpb24uIEVuY3J5cHRzL2RlY3J5cHRzIHVzaW5nIHRoZQorICogICAgICAgICAgICAgICAgICBnaXZlbiBHQ00gY29udGV4dC4gRXhwZWN0cyBpbnB1dCB0byBiZSBhIG11bHRpcGxlIG9mIDE2CisgKiAgICAgICAgICAgICAgICAgIGJ5dGVzISBPbmx5IHRoZSBsYXN0IGNhbGwgYmVmb3JlIG1iZWR0bHNfZ2NtX2ZpbmlzaCgpIGNhbiBiZSBsZXNzCisgKiAgICAgICAgICAgICAgICAgIHRoYW4gMTYgYnl0ZXMhCisgKgorICogXG5vdGUgT24gZGVjcnlwdGlvbiwgdGhlIG91dHB1dCBidWZmZXIgY2Fubm90IGJlIHRoZSBzYW1lIGFzIGlucHV0IGJ1ZmZlci4KKyAqICAgICAgIElmIGJ1ZmZlcnMgb3ZlcmxhcCwgdGhlIG91dHB1dCBidWZmZXIgbXVzdCB0cmFpbCBhdCBsZWFzdCA4IGJ5dGVzCisgKiAgICAgICBiZWhpbmQgdGhlIGlucHV0IGJ1ZmZlci4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEdDTSBjb250ZXh0CisgKiBccGFyYW0gbGVuZ3RoICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGlucHV0ICAgICBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgICBidWZmZXIgZm9yIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBNQkVEVExTX0VSUl9HQ01fQkFEX0lOUFVUCisgKi8KK2ludCBtYmVkdGxzX2djbV91cGRhdGUoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJpYyBHQ00gZmluYWxpc2F0aW9uIGZ1bmN0aW9uLiBXcmFwcyB1cCB0aGUgR0NNIHN0cmVhbQorICogICAgICAgICAgICAgICAgICBhbmQgZ2VuZXJhdGVzIHRoZSB0YWcuIFRoZSB0YWcgY2FuIGhhdmUgYSBtYXhpbXVtIGxlbmd0aCBvZgorICogICAgICAgICAgICAgICAgICAxNiBieXRlcy4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEdDTSBjb250ZXh0CisgKiBccGFyYW0gdGFnICAgICAgIGJ1ZmZlciBmb3IgaG9sZGluZyB0aGUgdGFnCisgKiBccGFyYW0gdGFnX2xlbiAgIGxlbmd0aCBvZiB0aGUgdGFnIHRvIGdlbmVyYXRlIChtdXN0IGJlIGF0IGxlYXN0IDQpCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgTUJFRFRMU19FUlJfR0NNX0JBRF9JTlBVVAorICovCitpbnQgbWJlZHRsc19nY21fZmluaXNoKCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLAorICAgICAgICAgICAgICAgIHNpemVfdCB0YWdfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIGEgR0NNIGNvbnRleHQgYW5kIHVuZGVybHlpbmcgY2lwaGVyIHN1Yi1jb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgICBHQ00gY29udGV4dCB0byBmcmVlCisgKi8KK3ZvaWQgbWJlZHRsc19nY21fZnJlZSggbWJlZHRsc19nY21fY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2djbV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBnY20uaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9oYXZlZ2UuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvaGF2ZWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjNWQzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvaGF2ZWdlLmgKQEAgLTAsMCArMSw3NCBAQAorLyoqCisgKiBcZmlsZSBoYXZlZ2UuaAorICoKKyAqIFxicmllZiBIQVZFR0U6IEhBcmR3YXJlIFZvbGF0aWxlIEVudHJvcHkgR2F0aGVyaW5nIGFuZCBFeHBhbnNpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19IQVZFR0VfSAorI2RlZmluZSBNQkVEVExTX0hBVkVHRV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2RlZmluZSBNQkVEVExTX0hBVkVHRV9DT0xMRUNUX1NJWkUgMTAyNAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEhBVkVHRSBzdGF0ZSBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQgUFQxLCBQVDIsIG9mZnNldFsyXTsKKyAgICBpbnQgcG9vbFtNQkVEVExTX0hBVkVHRV9DT0xMRUNUX1NJWkVdOworICAgIGludCBXQUxLWzgxOTJdOworfQorbWJlZHRsc19oYXZlZ2Vfc3RhdGU7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEhBVkVHRSBpbml0aWFsaXphdGlvbgorICoKKyAqIFxwYXJhbSBocyAgICAgICBIQVZFR0Ugc3RhdGUgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX2hhdmVnZV9pbml0KCBtYmVkdGxzX2hhdmVnZV9zdGF0ZSAqaHMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgSEFWRUdFIHN0YXRlCisgKgorICogXHBhcmFtIGhzICAgICAgIEhBVkVHRSBzdGF0ZSB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19oYXZlZ2VfZnJlZSggbWJlZHRsc19oYXZlZ2Vfc3RhdGUgKmhzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEhBVkVHRSByYW5kIGZ1bmN0aW9uCisgKgorICogXHBhcmFtIHBfcm5nICAgIEEgSEFWRUdFIHN0YXRlCisgKiBccGFyYW0gb3V0cHV0ICAgQnVmZmVyIHRvIGZpbGwKKyAqIFxwYXJhbSBsZW4gICAgICBMZW5ndGggb2YgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgIDAKKyAqLworaW50IG1iZWR0bHNfaGF2ZWdlX3JhbmRvbSggdm9pZCAqcF9ybmcsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogaGF2ZWdlLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvaG1hY19kcmJnLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2htYWNfZHJiZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMTA1NTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2htYWNfZHJiZy5oCkBAIC0wLDAgKzEsMjk5IEBACisvKioKKyAqIFxmaWxlIGhtYWNfZHJiZy5oCisgKgorICogXGJyaWVmIEhNQUNfRFJCRyAoTklTVCBTUCA4MDAtOTBBKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0hNQUNfRFJCR19ICisjZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX0gKKworI2luY2x1ZGUgIm1kLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisjaW5jbHVkZSAibWJlZHRscy90aHJlYWRpbmcuaCIKKyNlbmRpZgorCisvKgorICogRXJyb3IgY29kZXMKKyAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ITUFDX0RSQkdfUkVRVUVTVF9UT09fQklHICAgICAgICAgICAgICAtMHgwMDAzICAvKio8IFRvbyBtYW55IHJhbmRvbSByZXF1ZXN0ZWQgaW4gc2luZ2xlIGNhbGwuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0hNQUNfRFJCR19JTlBVVF9UT09fQklHICAgICAgICAgICAgICAgIC0weDAwMDUgIC8qKjwgSW5wdXQgdG9vIGxhcmdlIChFbnRyb3B5ICsgYWRkaXRpb25hbCkuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0hNQUNfRFJCR19GSUxFX0lPX0VSUk9SICAgICAgICAgICAgICAgIC0weDAwMDcgIC8qKjwgUmVhZC93cml0ZSBlcnJvciBpbiBmaWxlLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICAgICAgICAtMHgwMDA5ICAvKio8IFRoZSBlbnRyb3B5IHNvdXJjZSBmYWlsZWQuICovCisKKy8qKgorICogXG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3UgY2FuIHNldCBmb3IgdGhpcyBtb2R1bGUgYXJlIGluIHRoaXMgc2VjdGlvbi4KKyAqIEVpdGhlciBjaGFuZ2UgdGhlbSBpbiBjb25maWcuaCBvciBkZWZpbmUgdGhlbSBvbiB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lLgorICogXHsKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19ITUFDX0RSQkdfUkVTRUVEX0lOVEVSVkFMKQorI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19SRVNFRURfSU5URVJWQUwgICAxMDAwMCAgIC8qKjwgSW50ZXJ2YWwgYmVmb3JlIHJlc2VlZCBpcyBwZXJmb3JtZWQgYnkgZGVmYXVsdCAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0hNQUNfRFJCR19NQVhfSU5QVVQpCisjZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX01BWF9JTlBVVCAgICAgICAgIDI1NiAgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBhZGRpdGlvbmFsIGlucHV0IGJ5dGVzICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfSE1BQ19EUkJHX01BWF9SRVFVRVNUKQorI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19NQVhfUkVRVUVTVCAgICAgICAxMDI0ICAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdGVkIGJ5dGVzIHBlciBjYWxsICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfSE1BQ19EUkJHX01BWF9TRUVEX0lOUFVUKQorI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVCAgICAzODQgICAgIC8qKjwgTWF4aW11bSBzaXplIG9mIChyZSlzZWVkIGJ1ZmZlciAqLworI2VuZGlmCisKKy8qIFx9IG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzICovCisKKyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfUFJfT0ZGICAgMCAgIC8qKjwgTm8gcHJlZGljdGlvbiByZXNpc3RhbmNlICAgICAgICovCisjZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX1BSX09OICAgIDEgICAvKio8IFByZWRpY3Rpb24gcmVzaXN0YW5jZSBlbmFibGVkICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogSE1BQ19EUkJHIGNvbnRleHQuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogV29ya2luZyBzdGF0ZTogdGhlIGtleSBLIGlzIG5vdCBzdG9yZWQgZXhwbGljaXRlbHksCisgICAgICogYnV0IGlzIGltcGxpZWQgYnkgdGhlIEhNQUMgY29udGV4dCAqLworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IG1kX2N0eDsgICAgICAgICAgICAgICAgICAgIC8qITwgSE1BQyBjb250ZXh0IChpbmMuIEspICAqLworICAgIHVuc2lnbmVkIGNoYXIgVltNQkVEVExTX01EX01BWF9TSVpFXTsgIC8qITwgViBpbiB0aGUgc3BlYyAgICAgICAgICAqLworICAgIGludCByZXNlZWRfY291bnRlcjsgICAgICAgICAgICAgICAgICAgICAvKiE8IHJlc2VlZCBjb3VudGVyICAgICAgICAgKi8KKworICAgIC8qIEFkbWluaXN0cmF0aXZlIHN0YXRlICovCisgICAgc2l6ZV90IGVudHJvcHlfbGVuOyAgICAgICAgIC8qITwgZW50cm9weSBieXRlcyBncmFiYmVkIG9uIGVhY2ggKHJlKXNlZWQgKi8KKyAgICBpbnQgcHJlZGljdGlvbl9yZXNpc3RhbmNlOyAgLyohPCBlbmFibGUgcHJlZGljdGlvbiByZXNpc3RhbmNlIChBdXRvbWF0aWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlZWQgYmVmb3JlIGV2ZXJ5IHJhbmRvbSBnZW5lcmF0aW9uKSAqLworICAgIGludCByZXNlZWRfaW50ZXJ2YWw7ICAgICAgICAvKiE8IHJlc2VlZCBpbnRlcnZhbCAgICovCisKKyAgICAvKiBDYWxsYmFja3MgKi8KKyAgICBpbnQgKCpmX2VudHJvcHkpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOyAvKiE8IGVudHJvcHkgZnVuY3Rpb24gKi8KKyAgICB2b2lkICpwX2VudHJvcHk7ICAgICAgICAgICAgLyohPCBjb250ZXh0IGZvciB0aGUgZW50cm9weSBmdW5jdGlvbiAgICAgICAgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90IG11dGV4OworI2VuZGlmCit9IG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgSE1BQ19EUkJHIGNvbnRleHQgaW5pdGlhbGl6YXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIE1ha2VzIHRoZSBjb250ZXh0IHJlYWR5IGZvciBtYmVkdGxzX2htYWNfZHJiZ19zZWVkKCksCisgKiAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19zZWVkX2J1ZigpIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgSE1BQ19EUkJHIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX2htYWNfZHJiZ19pbml0KCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBITUFDX0RSQkcgaW5pdGlhbCBzZWVkaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICBTZWVkIGFuZCBzZXR1cCBlbnRyb3B5IHNvdXJjZSBmb3IgZnV0dXJlIHJlc2VlZHMuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgSE1BQ19EUkJHIGNvbnRleHQgdG8gYmUgc2VlZGVkCisgKiBccGFyYW0gbWRfaW5mbyAgICAgICBNRCBhbGdvcml0aG0gdG8gdXNlIGZvciBITUFDX0RSQkcKKyAqIFxwYXJhbSBmX2VudHJvcHkgICAgIEVudHJvcHkgY2FsbGJhY2sgKHBfZW50cm9weSwgYnVmZmVyIHRvIGZpbGwsIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKQorICogXHBhcmFtIHBfZW50cm9weSAgICAgRW50cm9weSBjb250ZXh0CisgKiBccGFyYW0gY3VzdG9tICAgICAgICBQZXJzb25hbGl6YXRpb24gZGF0YSAoRGV2aWNlIHNwZWNpZmljIGlkZW50aWZpZXJzKQorICogICAgICAgICAgICAgICAgICAgICAgKENhbiBiZSBOVUxMKQorICogXHBhcmFtIGxlbiAgICAgICAgICAgTGVuZ3RoIG9mIHBlcnNvbmFsaXphdGlvbiBkYXRhCisgKgorICogXG5vdGUgICAgICAgICAgICAgICAgVGhlICJzZWN1cml0eSBzdHJlbmd0aCIgYXMgZGVmaW5lZCBieSBOSVNUIGlzIHNldCB0bzoKKyAqICAgICAgICAgICAgICAgICAgICAgIDEyOCBiaXRzIGlmIG1kX2FsZyBpcyBTSEEtMSwKKyAqICAgICAgICAgICAgICAgICAgICAgIDE5MiBiaXRzIGlmIG1kX2FsZyBpcyBTSEEtMjI0LAorICogICAgICAgICAgICAgICAgICAgICAgMjU2IGJpdHMgaWYgbWRfYWxnIGlzIFNIQS0yNTYgb3IgaGlnaGVyLgorICogICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IFNIQS0yNTYgaXMganVzdCBhcyBlZmZpY2llbnQgYXMgU0hBLTIyNC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01EX0FMTE9DX0ZBSUxFRCwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0hNQUNfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQuCisgKi8KK2ludCBtYmVkdGxzX2htYWNfZHJiZ19zZWVkKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICogbWRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9lbnRyb3B5KSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9lbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdXN0b20sCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBJbml0aWxpc2F0aW9uIG9mIHNpbXBpZmllZCBITUFDX0RSQkcgKG5ldmVyIHJlc2VlZHMpLgorICogICAgICAgICAgICAgICAgICAgICAgKEZvciB1c2Ugd2l0aCBkZXRlcm1pbmlzdGljIEVDRFNBLikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBITUFDX0RSQkcgY29udGV4dCB0byBiZSBpbml0aWFsaXNlZAorICogXHBhcmFtIG1kX2luZm8gICAgICAgTUQgYWxnb3JpdGhtIHRvIHVzZSBmb3IgSE1BQ19EUkJHCisgKiBccGFyYW0gZGF0YSAgICAgICAgICBDb25jYXRlbmF0aW9uIG9mIGVudHJvcHkgc3RyaW5nIGFuZCBhZGRpdGlvbmFsIGRhdGEKKyAqIFxwYXJhbSBkYXRhX2xlbiAgICAgIExlbmd0aCBvZiBkYXRhIGluIGJ5dGVzCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NRF9BTExPQ19GQUlMRUQuCisgKi8KK2ludCBtYmVkdGxzX2htYWNfZHJiZ19zZWVkX2J1ZiggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKiBtZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgRW5hYmxlIC8gZGlzYWJsZSBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgKERlZmF1bHQ6IE9mZikKKyAqCisgKiBOb3RlOiBJZiBlbmFibGVkLCBlbnRyb3B5IGlzIHVzZWQgZm9yIGN0eC0+ZW50cm9weV9sZW4gYmVmb3JlIGVhY2ggY2FsbCEKKyAqICAgICAgIE9ubHkgdXNlIHRoaXMgaWYgeW91IGhhdmUgYW1wbGUgc3VwcGx5IG9mIGdvb2QgZW50cm9weSEKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBITUFDX0RSQkcgY29udGV4dAorICogXHBhcmFtIHJlc2lzdGFuY2UgICAgTUJFRFRMU19ITUFDX0RSQkdfUFJfT04gb3IgTUJFRFRMU19ITUFDX0RSQkdfUFJfT0ZGCisgKi8KK3ZvaWQgbWJlZHRsc19obWFjX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc2lzdGFuY2UgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBTZXQgdGhlIGFtb3VudCBvZiBlbnRyb3B5IGdyYWJiZWQgb24gZWFjaCByZXNlZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBnaXZlbiBieSB0aGUgc2VjdXJpdHkgc3RyZW5ndGgsIHdoaWNoCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSBoYXNoIHVzZWQsIHNlZSBcYyBtYmVkdGxzX2htYWNfZHJiZ19pbml0KCkgKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEhNQUNfRFJCRyBjb250ZXh0CisgKiBccGFyYW0gbGVuICAgICAgICAgICBBbW91bnQgb2YgZW50cm9weSB0byBncmFiLCBpbiBieXRlcworICovCit2b2lkIG1iZWR0bHNfaG1hY19kcmJnX3NldF9lbnRyb3B5X2xlbiggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgU2V0IHRoZSByZXNlZWQgaW50ZXJ2YWwKKyAqICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX0hNQUNfRFJCR19SRVNFRURfSU5URVJWQUwpCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgSE1BQ19EUkJHIGNvbnRleHQKKyAqIFxwYXJhbSBpbnRlcnZhbCAgICAgIFJlc2VlZCBpbnRlcnZhbAorICovCit2b2lkIG1iZWR0bHNfaG1hY19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnRlcnZhbCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEhNQUNfRFJCRyB1cGRhdGUgc3RhdGUKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBITUFDX0RSQkcgY29udGV4dAorICogXHBhcmFtIGFkZGl0aW9uYWwgICAgQWRkaXRpb25hbCBkYXRhIHRvIHVwZGF0ZSBzdGF0ZSB3aXRoLCBvciBOVUxMCisgKiBccGFyYW0gYWRkX2xlbiAgICAgICBMZW5ndGggb2YgYWRkaXRpb25hbCBkYXRhLCBvciAwCisgKgorICogXG5vdGUgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBkYXRhIGlzIG9wdGlvbmFsLCBwYXNzIE5VTEwgYW5kIDAgYXMgc2Vjb25kCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGlyZCBhcmd1bWVudCBpZiBubyBhZGRpdGlvbmFsIGRhdGEgaXMgYmVpbmcgdXNlZC4KKyAqLwordm9pZCBtYmVkdGxzX2htYWNfZHJiZ191cGRhdGUoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkaXRpb25hbCwgc2l6ZV90IGFkZF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBITUFDX0RSQkcgcmVzZWVkaW5nIChleHRyYWN0cyBkYXRhIGZyb20gZW50cm9weSBzb3VyY2UpCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgSE1BQ19EUkJHIGNvbnRleHQKKyAqIFxwYXJhbSBhZGRpdGlvbmFsICAgIEFkZGl0aW9uYWwgZGF0YSB0byBhZGQgdG8gc3RhdGUgKENhbiBiZSBOVUxMKQorICogXHBhcmFtIGxlbiAgICAgICAgICAgTGVuZ3RoIG9mIGFkZGl0aW9uYWwgZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0hNQUNfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfaG1hY19kcmJnX3Jlc2VlZCggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZGl0aW9uYWwsIHNpemVfdCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBITUFDX0RSQkcgZ2VuZXJhdGUgcmFuZG9tIHdpdGggYWRkaXRpb25hbCB1cGRhdGUgaW5wdXQKKyAqCisgKiBOb3RlOiBBdXRvbWF0aWNhbGx5IHJlc2VlZHMgaWYgcmVzZWVkX2NvdW50ZXIgaXMgcmVhY2hlZCBvciBQUiBpcyBlbmFibGVkLgorICoKKyAqIFxwYXJhbSBwX3JuZyAgICAgICAgIEhNQUNfRFJCRyBjb250ZXh0CisgKiBccGFyYW0gb3V0cHV0ICAgICAgICBCdWZmZXIgdG8gZmlsbAorICogXHBhcmFtIG91dHB1dF9sZW4gICAgTGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqIFxwYXJhbSBhZGRpdGlvbmFsICAgIEFkZGl0aW9uYWwgZGF0YSB0byB1cGRhdGUgd2l0aCAoY2FuIGJlIE5VTEwpCisgKiBccGFyYW0gYWRkX2xlbiAgICAgICBMZW5ndGggb2YgYWRkaXRpb25hbCBkYXRhIChjYW4gYmUgMCkKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVELCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfSE1BQ19EUkJHX1JFUVVFU1RfVE9PX0JJRywgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0hNQUNfRFJCR19JTlBVVF9UT09fQklHLgorICovCitpbnQgbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZGl0aW9uYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFkZF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBITUFDX0RSQkcgZ2VuZXJhdGUgcmFuZG9tCisgKgorICogTm90ZTogQXV0b21hdGljYWxseSByZXNlZWRzIGlmIHJlc2VlZF9jb3VudGVyIGlzIHJlYWNoZWQgb3IgUFIgaXMgZW5hYmxlZC4KKyAqCisgKiBccGFyYW0gcF9ybmcgICAgICAgICBITUFDX0RSQkcgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgICAgICAgQnVmZmVyIHRvIGZpbGwKKyAqIFxwYXJhbSBvdXRfbGVuICAgICAgIExlbmd0aCBvZiB0aGUgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0hNQUNfRFJCR19SRVFVRVNUX1RPT19CSUcKKyAqLworaW50IG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggdm9pZCAqcF9ybmcsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG91dF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBGcmVlIGFuIEhNQUNfRFJCRyBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgSE1BQ19EUkJHIGNvbnRleHQgdG8gZnJlZS4KKyAqLwordm9pZCBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHggKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgV3JpdGUgYSBzZWVkIGZpbGUKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBITUFDX0RSQkcgY29udGV4dAorICogXHBhcmFtIHBhdGggICAgICAgICAgTmFtZSBvZiB0aGUgZmlsZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgMSBvbiBmaWxlIGVycm9yLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc19obWFjX2RyYmdfd3JpdGVfc2VlZF9maWxlKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBSZWFkIGFuZCB1cGRhdGUgYSBzZWVkIGZpbGUuIFNlZWQgaXMgYWRkZWQgdG8gdGhpcworICogICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBITUFDX0RSQkcgY29udGV4dAorICogXHBhcmFtIHBhdGggICAgICAgICAgTmFtZSBvZiB0aGUgZmlsZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgMSBvbiBmaWxlIGVycm9yLAorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0lOUFVUX1RPT19CSUcKKyAqLworaW50IG1iZWR0bHNfaG1hY19kcmJnX3VwZGF0ZV9zZWVkX2ZpbGUoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApOworI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19obWFjX2RyYmdfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBobWFjX2RyYmcuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOTk2YTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kLmgKQEAgLTAsMCArMSwzNTQgQEAKKy8qKgorICogXGZpbGUgbWQuaAorICoKKyAqIFxicmllZiBHZW5lcmljIG1lc3NhZ2UgZGlnZXN0IHdyYXBwZXIKKyAqCisgKiBcYXV0aG9yIEFkcmlhYW4gZGUgSm9uZyA8ZGVqb25nQGZveC1pdC5jb20+CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfTURfSAorI2RlZmluZSBNQkVEVExTX01EX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjZGVmaW5lIE1CRURUTFNfRVJSX01EX0ZFQVRVUkVfVU5BVkFJTEFCTEUgICAgICAgICAgICAgICAgLTB4NTA4MCAgLyoqPCBUaGUgc2VsZWN0ZWQgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSAgICAgICAgICAgICAgICAgICAgIC0weDUxMDAgIC8qKjwgQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX01EX0FMTE9DX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgLTB4NTE4MCAgLyoqPCBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9NRF9GSUxFX0lPX0VSUk9SICAgICAgICAgICAgICAgICAgICAgIC0weDUyMDAgIC8qKjwgT3BlbmluZyBvciByZWFkaW5nIG9mIGZpbGUgZmFpbGVkLiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgZW51bSB7CisgICAgTUJFRFRMU19NRF9OT05FPTAsCisgICAgTUJFRFRMU19NRF9NRDIsCisgICAgTUJFRFRMU19NRF9NRDQsCisgICAgTUJFRFRMU19NRF9NRDUsCisgICAgTUJFRFRMU19NRF9TSEExLAorICAgIE1CRURUTFNfTURfU0hBMjI0LAorICAgIE1CRURUTFNfTURfU0hBMjU2LAorICAgIE1CRURUTFNfTURfU0hBMzg0LAorICAgIE1CRURUTFNfTURfU0hBNTEyLAorICAgIE1CRURUTFNfTURfUklQRU1EMTYwLAorfSBtYmVkdGxzX21kX3R5cGVfdDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyNkZWZpbmUgTUJFRFRMU19NRF9NQVhfU0laRSAgICAgICAgIDY0ICAvKiBsb25nZXN0IGtub3duIGlzIFNIQTUxMiAqLworI2Vsc2UKKyNkZWZpbmUgTUJFRFRMU19NRF9NQVhfU0laRSAgICAgICAgIDMyICAvKiBsb25nZXN0IGtub3duIGlzIFNIQTI1NiBvciBsZXNzICovCisjZW5kaWYKKworLyoqCisgKiBPcGFxdWUgc3RydWN0IGRlZmluZWQgaW4gbWRfaW50ZXJuYWwuaAorICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX21kX2luZm9fdDsKKworLyoqCisgKiBHZW5lcmljIG1lc3NhZ2UgZGlnZXN0IGNvbnRleHQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGFzc29jaWF0ZWQgbWVzc2FnZSBkaWdlc3QgKi8KKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKworICAgIC8qKiBEaWdlc3Qtc3BlY2lmaWMgY29udGV4dCAqLworICAgIHZvaWQgKm1kX2N0eDsKKworICAgIC8qKiBITUFDIHBhcnQgb2YgdGhlIGNvbnRleHQgKi8KKyAgICB2b2lkICpobWFjX2N0eDsKK30gbWJlZHRsc19tZF9jb250ZXh0X3Q7CisKKy8qKgorICogXGJyaWVmIFJldHVybnMgdGhlIGxpc3Qgb2YgZGlnZXN0cyBzdXBwb3J0ZWQgYnkgdGhlIGdlbmVyaWMgZGlnZXN0IG1vZHVsZS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgYXJyYXkgb2YgZGlnZXN0cywgdGhlIGxhc3QgZW50cnkKKyAqICAgICAgICAgICAgICAgICAgaXMgMC4KKyAqLworY29uc3QgaW50ICptYmVkdGxzX21kX2xpc3QoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFJldHVybnMgdGhlIG1lc3NhZ2UgZGlnZXN0IGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgZ2l2ZW4gZGlnZXN0IG5hbWUuCisgKgorICogXHBhcmFtIG1kX25hbWUgICBOYW1lIG9mIHRoZSBkaWdlc3QgdG8gc2VhcmNoIGZvci4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIFRoZSBtZXNzYWdlIGRpZ2VzdCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggbWRfbmFtZSBvcgorICogICAgICAgICAgICAgICAgICBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1iZWR0bHNfbWRfaW5mb19mcm9tX3N0cmluZyggY29uc3QgY2hhciAqbWRfbmFtZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUmV0dXJucyB0aGUgbWVzc2FnZSBkaWdlc3QgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgICBnaXZlbiBkaWdlc3QgdHlwZS4KKyAqCisgKiBccGFyYW0gbWRfdHlwZSAgIHR5cGUgb2YgZGlnZXN0IHRvIHNlYXJjaCBmb3IuCisgKgorICogXHJldHVybiAgICAgICAgICBUaGUgbWVzc2FnZSBkaWdlc3QgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIG1kX3R5cGUgb3IKKyAqICAgICAgICAgICAgICAgICAgTlVMTCBpZiBub3QgZm91bmQuCisgKi8KK2NvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtYmVkdGxzX21kX3R5cGVfdCBtZF90eXBlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIGEgbWRfY29udGV4dCAoYXMgTk9ORSkKKyAqICAgICAgICAgICAgICAgICAgVGhpcyBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCBmaXJzdC4KKyAqICAgICAgICAgICAgICAgICAgUHJlcGFyZXMgdGhlIGNvbnRleHQgZm9yIG1iZWR0bHNfbWRfc2V0dXAoKSBvciBtYmVkdGxzX21kX2ZyZWUoKS4KKyAqLwordm9pZCBtYmVkdGxzX21kX2luaXQoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEZyZWUgYW5kIGNsZWFyIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIG9mIGN0eC4KKyAqICAgICAgICAgICAgICAgICAgQ2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZSBhZnRlciBtYmVkdGxzX21kX2luaXQoKS4KKyAqICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5IG9uY2UgbWJlZHRsc19tZF9zZXR1cCgpIGhhcyBiZWVuIGNhbGxlZC4KKyAqLwordm9pZCBtYmVkdGxzX21kX2ZyZWUoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHggKTsKKworI2lmICEgZGVmaW5lZChNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HKQorI2RlZmluZSBNQkVEVExTX0RFUFJFQ0FURUQgICAgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCkpCisjZWxzZQorI2RlZmluZSBNQkVEVExTX0RFUFJFQ0FURUQKKyNlbmRpZgorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNlbGVjdCBNRCB0byB1c2UgYW5kIGFsbG9jYXRlIGludGVybmFsIHN0cnVjdHVyZXMuCisgKiAgICAgICAgICAgICAgICAgIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgbWJlZHRsc19tZF9pbml0KCkgb3IgbWJlZHRsc19tZF9mcmVlKCkuCisgKiAgICAgICAgICAgICAgICAgIE1ha2VzIGl0IG5lY2Vzc2FyeSB0byBjYWxsIG1iZWR0bHNfbWRfZnJlZSgpIGxhdGVyLgorICoKKyAqIFxkZXByZWNhdGVkICAgICAgU3VwZXJzZWRlZCBieSBtYmVkdGxzX21kX3NldHVwKCkgaW4gMi4wLjAKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gc2V0IHVwLgorICogXHBhcmFtIG1kX2luZm8gICBNZXNzYWdlIGRpZ2VzdCB0byB1c2UuCisgKgorICogXHJldHVybnMgICAgICAgICBcYyAwIG9uIHN1Y2Nlc3MsCisgKiAgICAgICAgICAgICAgICAgIFxjIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBIG9uIHBhcmFtZXRlciBmYWlsdXJlLAorICogICAgICAgICAgICAgICAgICBcYyBNQkVEVExTX0VSUl9NRF9BTExPQ19GQUlMRUQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KKyAqLworaW50IG1iZWR0bHNfbWRfaW5pdF9jdHgoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvICkgTUJFRFRMU19ERVBSRUNBVEVEOworI3VuZGVmIE1CRURUTFNfREVQUkVDQVRFRAorI2VuZGlmIC8qIE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVEICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZWxlY3QgTUQgdG8gdXNlIGFuZCBhbGxvY2F0ZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzLgorICogICAgICAgICAgICAgICAgICBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIG1iZWR0bHNfbWRfaW5pdCgpIG9yIG1iZWR0bHNfbWRfZnJlZSgpLgorICogICAgICAgICAgICAgICAgICBNYWtlcyBpdCBuZWNlc3NhcnkgdG8gY2FsbCBtYmVkdGxzX21kX2ZyZWUoKSBsYXRlci4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gc2V0IHVwLgorICogXHBhcmFtIG1kX2luZm8gICBNZXNzYWdlIGRpZ2VzdCB0byB1c2UuCisgKiBccGFyYW0gaG1hYyAgICAgIDAgdG8gc2F2ZSBzb21lIG1lbW9yeSBpZiBITUFDIHdpbGwgbm90IGJlIHVzZWQsCisgKiAgICAgICAgICAgICAgICAgIG5vbi16ZXJvIGlzIEhNQUMgaXMgZ29pbmcgdG8gYmUgdXNlZCB3aXRoIHRoaXMgY29udGV4dC4KKyAqCisgKiBccmV0dXJucyAgICAgICAgIFxjIDAgb24gc3VjY2VzcywKKyAqICAgICAgICAgICAgICAgICAgXGMgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgb24gcGFyYW1ldGVyIGZhaWx1cmUsCisgKiAgICAgICAgICAgICAgICAgIFxjIE1CRURUTFNfRVJSX01EX0FMTE9DX0ZBSUxFRCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgorICovCitpbnQgbWJlZHRsc19tZF9zZXR1cCggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sIGludCBobWFjICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDbG9uZSB0aGUgc3RhdGUgb2YgYW4gTUQgY29udGV4dAorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhlIHR3byBjb250ZXh0cyBtdXN0IGhhdmUgYmVlbiBzZXR1cCB0byB0aGUgc2FtZSB0eXBlCisgKiAgICAgICAgICAgICAgICAgIChjbG9uaW5nIGZyb20gU0hBLTI1NiB0byBTSEEtNTEyIG1ha2Ugbm8gc2Vuc2UpLgorICoKKyAqIFx3YXJuaW5nICAgICAgICAgT25seSBjbG9uZXMgdGhlIE1EIHN0YXRlLCBub3QgdGhlIEhNQUMgc3RhdGUhIChmb3Igbm93KQorICoKKyAqIFxwYXJhbSBkc3QgICAgICAgVGhlIGRlc3RpbmF0aW9uIGNvbnRleHQKKyAqIFxwYXJhbSBzcmMgICAgICAgVGhlIGNvbnRleHQgdG8gYmUgY2xvbmVkCisgKgorICogXHJldHVybiAgICAgICAgICBcYyAwIG9uIHN1Y2Nlc3MsCisgKiAgICAgICAgICAgICAgICAgIFxjIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBIG9uIHBhcmFtZXRlciBmYWlsdXJlLgorICovCitpbnQgbWJlZHRsc19tZF9jbG9uZSggbWJlZHRsc19tZF9jb250ZXh0X3QgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kX2NvbnRleHRfdCAqc3JjICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlIGRpZ2VzdCBvdXRwdXQuCisgKgorICogXHBhcmFtIG1kX2luZm8gICBtZXNzYWdlIGRpZ2VzdCBpbmZvCisgKgorICogXHJldHVybiAgICAgICAgICBzaXplIG9mIHRoZSBtZXNzYWdlIGRpZ2VzdCBvdXRwdXQgaW4gYnl0ZXMuCisgKi8KK3Vuc2lnbmVkIGNoYXIgbWJlZHRsc19tZF9nZXRfc2l6ZSggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UgZGlnZXN0IG91dHB1dC4KKyAqCisgKiBccGFyYW0gbWRfaW5mbyAgIG1lc3NhZ2UgZGlnZXN0IGluZm8KKyAqCisgKiBccmV0dXJuICAgICAgICAgIHR5cGUgb2YgdGhlIG1lc3NhZ2UgZGlnZXN0IG91dHB1dC4KKyAqLworbWJlZHRsc19tZF90eXBlX3QgbWJlZHRsc19tZF9nZXRfdHlwZSggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG1lc3NhZ2UgZGlnZXN0IG91dHB1dC4KKyAqCisgKiBccGFyYW0gbWRfaW5mbyAgIG1lc3NhZ2UgZGlnZXN0IGluZm8KKyAqCisgKiBccmV0dXJuICAgICAgICAgIG5hbWUgb2YgdGhlIG1lc3NhZ2UgZGlnZXN0IG91dHB1dC4KKyAqLworY29uc3QgY2hhciAqbWJlZHRsc19tZF9nZXRfbmFtZSggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFByZXBhcmUgdGhlIGNvbnRleHQgdG8gZGlnZXN0IGEgbmV3IG1lc3NhZ2UuCisgKiAgICAgICAgICAgICAgICAgIEdlbmVyYWxseSBjYWxsZWQgYWZ0ZXIgbWJlZHRsc19tZF9zZXR1cCgpIG9yIG1iZWR0bHNfbWRfZmluaXNoKCkuCisgKiAgICAgICAgICAgICAgICAgIEZvbGxvd2VkIGJ5IG1iZWR0bHNfbWRfdXBkYXRlKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBnZW5lcmljIG1lc3NhZ2UgZGlnZXN0IGNvbnRleHQuCisgKgorICogXHJldHVybnMgICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBIGlmIHBhcmFtZXRlcgorICogICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb24gZmFpbHMuCisgKi8KK2ludCBtYmVkdGxzX21kX3N0YXJ0cyggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJpYyBtZXNzYWdlIGRpZ2VzdCBwcm9jZXNzIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgICBDYWxsZWQgYmV0d2VlbiBtYmVkdGxzX21kX3N0YXJ0cygpIGFuZCBtYmVkdGxzX21kX2ZpbmlzaCgpLgorICogICAgICAgICAgICAgICAgICBNYXkgYmUgY2FsbGVkIHJlcGVhdGVkbHkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBHZW5lcmljIG1lc3NhZ2UgZGlnZXN0IGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICAgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhbAorICogXHBhcmFtIGlsZW4gICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqCisgKiBccmV0dXJucyAgICAgICAgIDAgb24gc3VjY2VzcywgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgaWYgcGFyYW1ldGVyCisgKiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfbWRfdXBkYXRlKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdlbmVyaWMgbWVzc2FnZSBkaWdlc3QgZmluYWwgZGlnZXN0CisgKiAgICAgICAgICAgICAgICAgIENhbGxlZCBhZnRlciBtYmVkdGxzX21kX3VwZGF0ZSgpLgorICogICAgICAgICAgICAgICAgICBVc3VhbGx5IGZvbGxvd2VkIGJ5IG1iZWR0bHNfbWRfZnJlZSgpIG9yIG1iZWR0bHNfbWRfc3RhcnRzKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBHZW5lcmljIG1lc3NhZ2UgZGlnZXN0IGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICAgR2VuZXJpYyBtZXNzYWdlIGRpZ2VzdCBjaGVja3N1bSByZXN1bHQKKyAqCisgKiBccmV0dXJucyAgICAgICAgIDAgb24gc3VjY2VzcywgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgaWYgcGFyYW1ldGVyCisgKiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfbWRfZmluaXNoKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgT3V0cHV0ID0gbWVzc2FnZV9kaWdlc3QoIGlucHV0IGJ1ZmZlciApCisgKgorICogXHBhcmFtIG1kX2luZm8gIG1lc3NhZ2UgZGlnZXN0IGluZm8KKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBHZW5lcmljIG1lc3NhZ2UgZGlnZXN0IGNoZWNrc3VtIHJlc3VsdAorICoKKyAqIFxyZXR1cm5zICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBIGlmIHBhcmFtZXRlcgorICogICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfbWQoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgT3V0cHV0ID0gbWVzc2FnZV9kaWdlc3QoIGZpbGUgY29udGVudHMgKQorICoKKyAqIFxwYXJhbSBtZF9pbmZvICBtZXNzYWdlIGRpZ2VzdCBpbmZvCisgKiBccGFyYW0gcGF0aCAgICAgaW5wdXQgZmlsZSBuYW1lCisgKiBccGFyYW0gb3V0cHV0ICAgZ2VuZXJpYyBtZXNzYWdlIGRpZ2VzdCBjaGVja3N1bSByZXN1bHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01EX0ZJTEVfSU9fRVJST1IgaWYgZmlsZSBpbnB1dCBmYWlsZWQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgaWYgbWRfaW5mbyB3YXMgTlVMTC4KKyAqLworaW50IG1iZWR0bHNfbWRfZmlsZSggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgSE1BQyBrZXkgYW5kIHByZXBhcmUgdG8gYXV0aGVudGljYXRlIGEgbmV3IG1lc3NhZ2UuCisgKiAgICAgICAgICAgICAgICAgIFVzdWFsbHkgY2FsbGVkIGFmdGVyIG1iZWR0bHNfbWRfc2V0dXAoKSBvciBtYmVkdGxzX21kX2htYWNfZmluaXNoKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBITUFDIGNvbnRleHQKKyAqIFxwYXJhbSBrZXkgICAgICAgSE1BQyBzZWNyZXQga2V5CisgKiBccGFyYW0ga2V5bGVuICAgIGxlbmd0aCBvZiB0aGUgSE1BQyBrZXkgaW4gYnl0ZXMKKyAqCisgKiBccmV0dXJucyAgICAgICAgIDAgb24gc3VjY2VzcywgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgaWYgcGFyYW1ldGVyCisgKiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfbWRfaG1hY19zdGFydHMoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleWxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJpYyBITUFDIHByb2Nlc3MgYnVmZmVyLgorICogICAgICAgICAgICAgICAgICBDYWxsZWQgYmV0d2VlbiBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCkgb3IgbWJlZHRsc19tZF9obWFjX3Jlc2V0KCkKKyAqICAgICAgICAgICAgICAgICAgYW5kIG1iZWR0bHNfbWRfaG1hY19maW5pc2goKS4KKyAqICAgICAgICAgICAgICAgICAgTWF5IGJlIGNhbGxlZCByZXBlYXRlZGx5LgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgSE1BQyBjb250ZXh0CisgKiBccGFyYW0gaW5wdXQgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqCisgKiBccmV0dXJucyAgICAgICAgIDAgb24gc3VjY2VzcywgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgaWYgcGFyYW1ldGVyCisgKiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfbWRfaG1hY191cGRhdGUoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgT3V0cHV0IEhNQUMuCisgKiAgICAgICAgICAgICAgICAgIENhbGxlZCBhZnRlciBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCkuCisgKiAgICAgICAgICAgICAgICAgIFVzdWFsbHkgZm9sbG93ZWQgYnkgbWJlZHRsc19tZF9obWFjX3Jlc2V0KCksCisgKiAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoKSwgb3IgbWJlZHRsc19tZF9mcmVlKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBITUFDIGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICAgR2VuZXJpYyBITUFDIGNoZWNrc3VtIHJlc3VsdAorICoKKyAqIFxyZXR1cm5zICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0cHV0KTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFByZXBhcmUgdG8gYXV0aGVudGljYXRlIGEgbmV3IG1lc3NhZ2Ugd2l0aCB0aGUgc2FtZSBrZXkuCisgKiAgICAgICAgICAgICAgICAgIENhbGxlZCBhZnRlciBtYmVkdGxzX21kX2htYWNfZmluaXNoKCkgYW5kIGJlZm9yZQorICogICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBITUFDIGNvbnRleHQgdG8gYmUgcmVzZXQKKyAqCisgKiBccmV0dXJucyAgICAgICAgIDAgb24gc3VjY2VzcywgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgaWYgcGFyYW1ldGVyCisgKiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfbWRfaG1hY19yZXNldCggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBPdXRwdXQgPSBHZW5lcmljX0hNQUMoIGhtYWMga2V5LCBpbnB1dCBidWZmZXIgKQorICoKKyAqIFxwYXJhbSBtZF9pbmZvICBtZXNzYWdlIGRpZ2VzdCBpbmZvCisgKiBccGFyYW0ga2V5ICAgICAgSE1BQyBzZWNyZXQga2V5CisgKiBccGFyYW0ga2V5bGVuICAgbGVuZ3RoIG9mIHRoZSBITUFDIGtleSBpbiBieXRlcworICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIEdlbmVyaWMgSE1BQy1yZXN1bHQKKyAqCisgKiBccmV0dXJucyAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb24gZmFpbHMuCisgKi8KK2ludCBtYmVkdGxzX21kX2htYWMoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCBrZXlsZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisvKiBJbnRlcm5hbCB1c2UgKi8KK2ludCBtYmVkdGxzX21kX3Byb2Nlc3MoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfTURfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZDIuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbWQyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5M2ZiZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbWQyLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qKgorICogXGZpbGUgbWQyLmgKKyAqCisgKiBcYnJpZWYgTUQyIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobSAoaGFzaCBmdW5jdGlvbikKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19NRDJfSAorI2RlZmluZSBNQkVEVExTX01EMl9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01EMl9BTFQpCisvLyBSZWd1bGFyIGltcGxlbWVudGF0aW9uCisvLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1EMiBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVuc2lnbmVkIGNoYXIgY2tzdW1bMTZdOyAgICAvKiE8IGNoZWNrc3VtIG9mIHRoZSBkYXRhIGJsb2NrICovCisgICAgdW5zaWduZWQgY2hhciBzdGF0ZVs0OF07ICAgIC8qITwgaW50ZXJtZWRpYXRlIGRpZ2VzdCBzdGF0ZSAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxNl07ICAgLyohPCBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZCAqLworICAgIHNpemVfdCBsZWZ0OyAgICAgICAgICAgICAgICAvKiE8IGFtb3VudCBvZiBkYXRhIGluIGJ1ZmZlciAgICovCit9CittYmVkdGxzX21kMl9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIE1EMiBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIE1EMiBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19tZDJfaW5pdCggbWJlZHRsc19tZDJfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsZWFyIE1EMiBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIE1EMiBjb250ZXh0IHRvIGJlIGNsZWFyZWQKKyAqLwordm9pZCBtYmVkdGxzX21kMl9mcmVlKCBtYmVkdGxzX21kMl9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xvbmUgKHRoZSBzdGF0ZSBvZikgYW4gTUQyIGNvbnRleHQKKyAqCisgKiBccGFyYW0gZHN0ICAgICAgVGhlIGRlc3RpbmF0aW9uIGNvbnRleHQKKyAqIFxwYXJhbSBzcmMgICAgICBUaGUgY29udGV4dCB0byBiZSBjbG9uZWQKKyAqLwordm9pZCBtYmVkdGxzX21kMl9jbG9uZSggbWJlZHRsc19tZDJfY29udGV4dCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tZDJfY29udGV4dCAqc3JjICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1EMiBjb250ZXh0IHNldHVwCisgKgorICogXHBhcmFtIGN0eCAgICAgIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX21kMl9zdGFydHMoIG1iZWR0bHNfbWQyX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBNRDIgcHJvY2VzcyBidWZmZXIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQyIGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqLwordm9pZCBtYmVkdGxzX21kMl91cGRhdGUoIG1iZWR0bHNfbWQyX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1EMiBmaW5hbCBkaWdlc3QKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQyIGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICBNRDIgY2hlY2tzdW0gcmVzdWx0CisgKi8KK3ZvaWQgbWJlZHRsc19tZDJfZmluaXNoKCBtYmVkdGxzX21kMl9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZWxzZSAgLyogTUJFRFRMU19NRDJfQUxUICovCisjaW5jbHVkZSAibWQyX2FsdC5oIgorI2VuZGlmIC8qIE1CRURUTFNfTUQyX0FMVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE91dHB1dCA9IE1EMiggaW5wdXQgYnVmZmVyICkKKyAqCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgTUQyIGNoZWNrc3VtIHJlc3VsdAorICovCit2b2lkIG1iZWR0bHNfbWQyKCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tZDJfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworCisvKiBJbnRlcm5hbCB1c2UgKi8KK3ZvaWQgbWJlZHRsc19tZDJfcHJvY2VzcyggbWJlZHRsc19tZDJfY29udGV4dCAqY3R4ICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBtYmVkdGxzX21kMi5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kNC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTIxNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZDQuaApAQCAtMCwwICsxLDEzNiBAQAorLyoqCisgKiBcZmlsZSBtZDQuaAorICoKKyAqIFxicmllZiBNRDQgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtIChoYXNoIGZ1bmN0aW9uKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX01ENF9ICisjZGVmaW5lIE1CRURUTFNfTUQ0X0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUQ0X0FMVCkKKy8vIFJlZ3VsYXIgaW1wbGVtZW50YXRpb24KKy8vCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTUQ0IGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgdG90YWxbMl07ICAgICAgICAgIC8qITwgbnVtYmVyIG9mIGJ5dGVzIHByb2Nlc3NlZCAgKi8KKyAgICB1aW50MzJfdCBzdGF0ZVs0XTsgICAgICAgICAgLyohPCBpbnRlcm1lZGlhdGUgZGlnZXN0IHN0YXRlICAqLworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XTsgICAvKiE8IGRhdGEgYmxvY2sgYmVpbmcgcHJvY2Vzc2VkICovCit9CittYmVkdGxzX21kNF9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIE1ENCBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIE1ENCBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19tZDRfaW5pdCggbWJlZHRsc19tZDRfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsZWFyIE1ENCBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIE1ENCBjb250ZXh0IHRvIGJlIGNsZWFyZWQKKyAqLwordm9pZCBtYmVkdGxzX21kNF9mcmVlKCBtYmVkdGxzX21kNF9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xvbmUgKHRoZSBzdGF0ZSBvZikgYW4gTUQ0IGNvbnRleHQKKyAqCisgKiBccGFyYW0gZHN0ICAgICAgVGhlIGRlc3RpbmF0aW9uIGNvbnRleHQKKyAqIFxwYXJhbSBzcmMgICAgICBUaGUgY29udGV4dCB0byBiZSBjbG9uZWQKKyAqLwordm9pZCBtYmVkdGxzX21kNF9jbG9uZSggbWJlZHRsc19tZDRfY29udGV4dCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tZDRfY29udGV4dCAqc3JjICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1ENCBjb250ZXh0IHNldHVwCisgKgorICogXHBhcmFtIGN0eCAgICAgIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX21kNF9zdGFydHMoIG1iZWR0bHNfbWQ0X2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBNRDQgcHJvY2VzcyBidWZmZXIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQ0IGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqLwordm9pZCBtYmVkdGxzX21kNF91cGRhdGUoIG1iZWR0bHNfbWQ0X2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1ENCBmaW5hbCBkaWdlc3QKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQ0IGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICBNRDQgY2hlY2tzdW0gcmVzdWx0CisgKi8KK3ZvaWQgbWJlZHRsc19tZDRfZmluaXNoKCBtYmVkdGxzX21kNF9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZWxzZSAgLyogTUJFRFRMU19NRDRfQUxUICovCisjaW5jbHVkZSAibWQ0X2FsdC5oIgorI2VuZGlmIC8qIE1CRURUTFNfTUQ0X0FMVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE91dHB1dCA9IE1ENCggaW5wdXQgYnVmZmVyICkKKyAqCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgTUQ0IGNoZWNrc3VtIHJlc3VsdAorICovCit2b2lkIG1iZWR0bHNfbWQ0KCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tZDRfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworCisvKiBJbnRlcm5hbCB1c2UgKi8KK3ZvaWQgbWJlZHRsc19tZDRfcHJvY2VzcyggbWJlZHRsc19tZDRfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBtYmVkdGxzX21kNC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kNS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTY0MDYxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZDUuaApAQCAtMCwwICsxLDEzNiBAQAorLyoqCisgKiBcZmlsZSBtZDUuaAorICoKKyAqIFxicmllZiBNRDUgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtIChoYXNoIGZ1bmN0aW9uKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX01ENV9ICisjZGVmaW5lIE1CRURUTFNfTUQ1X0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUQ1X0FMVCkKKy8vIFJlZ3VsYXIgaW1wbGVtZW50YXRpb24KKy8vCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTUQ1IGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgdG90YWxbMl07ICAgICAgICAgIC8qITwgbnVtYmVyIG9mIGJ5dGVzIHByb2Nlc3NlZCAgKi8KKyAgICB1aW50MzJfdCBzdGF0ZVs0XTsgICAgICAgICAgLyohPCBpbnRlcm1lZGlhdGUgZGlnZXN0IHN0YXRlICAqLworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XTsgICAvKiE8IGRhdGEgYmxvY2sgYmVpbmcgcHJvY2Vzc2VkICovCit9CittYmVkdGxzX21kNV9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIE1ENSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIE1ENSBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19tZDVfaW5pdCggbWJlZHRsc19tZDVfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsZWFyIE1ENSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIE1ENSBjb250ZXh0IHRvIGJlIGNsZWFyZWQKKyAqLwordm9pZCBtYmVkdGxzX21kNV9mcmVlKCBtYmVkdGxzX21kNV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xvbmUgKHRoZSBzdGF0ZSBvZikgYW4gTUQ1IGNvbnRleHQKKyAqCisgKiBccGFyYW0gZHN0ICAgICAgVGhlIGRlc3RpbmF0aW9uIGNvbnRleHQKKyAqIFxwYXJhbSBzcmMgICAgICBUaGUgY29udGV4dCB0byBiZSBjbG9uZWQKKyAqLwordm9pZCBtYmVkdGxzX21kNV9jbG9uZSggbWJlZHRsc19tZDVfY29udGV4dCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tZDVfY29udGV4dCAqc3JjICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1ENSBjb250ZXh0IHNldHVwCisgKgorICogXHBhcmFtIGN0eCAgICAgIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX21kNV9zdGFydHMoIG1iZWR0bHNfbWQ1X2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBNRDUgcHJvY2VzcyBidWZmZXIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQ1IGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqLwordm9pZCBtYmVkdGxzX21kNV91cGRhdGUoIG1iZWR0bHNfbWQ1X2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1ENSBmaW5hbCBkaWdlc3QKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQ1IGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICBNRDUgY2hlY2tzdW0gcmVzdWx0CisgKi8KK3ZvaWQgbWJlZHRsc19tZDVfZmluaXNoKCBtYmVkdGxzX21kNV9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApOworCisvKiBJbnRlcm5hbCB1c2UgKi8KK3ZvaWQgbWJlZHRsc19tZDVfcHJvY2VzcyggbWJlZHRsc19tZDVfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX01ENV9BTFQgKi8KKyNpbmNsdWRlICJtZDVfYWx0LmgiCisjZW5kaWYgLyogTUJFRFRMU19NRDVfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgT3V0cHV0ID0gTUQ1KCBpbnB1dCBidWZmZXIgKQorICoKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBNRDUgY2hlY2tzdW0gcmVzdWx0CisgKi8KK3ZvaWQgbWJlZHRsc19tZDUoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21kNV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBtYmVkdGxzX21kNS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kX2ludGVybmFsLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kX2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI0NDFiYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbWRfaW50ZXJuYWwuaApAQCAtMCwwICsxLDExNCBAQAorLyoqCisgKiBcZmlsZSBtZF9pbnRlcm5hbC5oCisgKgorICogXGJyaWVmIE1lc3NhZ2UgZGlnZXN0IHdyYXBwZXJzLgorICoKKyAqIFx3YXJuaW5nIFRoaXMgaW4gYW4gaW50ZXJuYWwgaGVhZGVyLiBEbyBub3QgaW5jbHVkZSBkaXJlY3RseS4KKyAqCisgKiBcYXV0aG9yIEFkcmlhYW4gZGUgSm9uZyA8ZGVqb25nQGZveC1pdC5jb20+CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfTURfV1JBUF9ICisjZGVmaW5lIE1CRURUTFNfTURfV1JBUF9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAibWQuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIE1lc3NhZ2UgZGlnZXN0IGluZm9ybWF0aW9uLgorICogQWxsb3dzIG1lc3NhZ2UgZGlnZXN0IGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgaW4gYSBnZW5lcmljIHdheS4KKyAqLworc3RydWN0IG1iZWR0bHNfbWRfaW5mb190Cit7CisgICAgLyoqIERpZ2VzdCBpZGVudGlmaWVyICovCisgICAgbWJlZHRsc19tZF90eXBlX3QgdHlwZTsKKworICAgIC8qKiBOYW1lIG9mIHRoZSBtZXNzYWdlIGRpZ2VzdCAqLworICAgIGNvbnN0IGNoYXIgKiBuYW1lOworCisgICAgLyoqIE91dHB1dCBsZW5ndGggb2YgdGhlIGRpZ2VzdCBmdW5jdGlvbiBpbiBieXRlcyAqLworICAgIGludCBzaXplOworCisgICAgLyoqIEJsb2NrIGxlbmd0aCBvZiB0aGUgZGlnZXN0IGZ1bmN0aW9uIGluIGJ5dGVzICovCisgICAgaW50IGJsb2NrX3NpemU7CisKKyAgICAvKiogRGlnZXN0IGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9uICovCisgICAgdm9pZCAoKnN0YXJ0c19mdW5jKSggdm9pZCAqY3R4ICk7CisKKyAgICAvKiogRGlnZXN0IHVwZGF0ZSBmdW5jdGlvbiAqLworICAgIHZvaWQgKCp1cGRhdGVfZnVuYykoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICk7CisKKyAgICAvKiogRGlnZXN0IGZpbmFsaXNhdGlvbiBmdW5jdGlvbiAqLworICAgIHZvaWQgKCpmaW5pc2hfZnVuYykoIHZvaWQgKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKyAgICAvKiogR2VuZXJpYyBkaWdlc3QgZnVuY3Rpb24gKi8KKyAgICB2b2lkICgqZGlnZXN0X2Z1bmMpKCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKyAgICAvKiogQWxsb2NhdGUgYSBuZXcgY29udGV4dCAqLworICAgIHZvaWQgKiAoKmN0eF9hbGxvY19mdW5jKSggdm9pZCApOworCisgICAgLyoqIEZyZWUgdGhlIGdpdmVuIGNvbnRleHQgKi8KKyAgICB2b2lkICgqY3R4X2ZyZWVfZnVuYykoIHZvaWQgKmN0eCApOworCisgICAgLyoqIENsb25lIHN0YXRlIGZyb20gYSBjb250ZXh0ICovCisgICAgdm9pZCAoKmNsb25lX2Z1bmMpKCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyApOworCisgICAgLyoqIEludGVybmFsIHVzZSBvbmx5ICovCisgICAgdm9pZCAoKnByb2Nlc3NfZnVuYykoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQgKTsKK307CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQyX0MpCitleHRlcm4gY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19tZDJfaW5mbzsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19NRDRfQykKK2V4dGVybiBjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX21kNF9pbmZvOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorZXh0ZXJuIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfbWQ1X2luZm87CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCitleHRlcm4gY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19yaXBlbWQxNjBfaW5mbzsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCitleHRlcm4gY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19zaGExX2luZm87CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCitleHRlcm4gY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19zaGEyMjRfaW5mbzsKK2V4dGVybiBjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX3NoYTI1Nl9pbmZvOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorZXh0ZXJuIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfc2hhMzg0X2luZm87CitleHRlcm4gY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19zaGE1MTJfaW5mbzsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19NRF9XUkFQX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbWVtb3J5X2J1ZmZlcl9hbGxvYy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZW1vcnlfYnVmZmVyX2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVkZjMxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbWVtb3J5X2J1ZmZlcl9hbGxvYy5oCkBAIC0wLDAgKzEsMTUwIEBACisvKioKKyAqIFxmaWxlIG1lbW9yeV9idWZmZXJfYWxsb2MuaAorICoKKyAqIFxicmllZiBCdWZmZXItYmFzZWQgbWVtb3J5IGFsbG9jYXRvcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfSAorI2RlZmluZSBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncworICoKKyAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGNhbiBzZXQgZm9yIHRoaXMgbW9kdWxlIGFyZSBpbiB0aGlzIHNlY3Rpb24uCisgKiBFaXRoZXIgY2hhbmdlIHRoZW0gaW4gY29uZmlnLmggb3IgZGVmaW5lIHRoZW0gb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZS4KKyAqIFx7CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0FMSUdOX01VTFRJUExFKQorI2RlZmluZSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRSAgICAgICA0IC8qKjwgQWxpZ24gb24gbXVsdGlwbGVzIG9mIHRoaXMgdmFsdWUgKi8KKyNlbmRpZgorCisvKiBcfSBuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncyAqLworCisjZGVmaW5lIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9OT05FICAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX01FTU9SWV9WRVJJRllfQUxMT0MgICAgICAgICgxIDw8IDApCisjZGVmaW5lIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9GUkVFICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgTUJFRFRMU19NRU1PUllfVkVSSUZZX0FMV0FZUyAgICAgICAoTUJFRFRMU19NRU1PUllfVkVSSUZZX0FMTE9DIHwgTUJFRFRMU19NRU1PUllfVkVSSUZZX0ZSRUUpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICBJbml0aWFsaXplIHVzZSBvZiBzdGFjay1iYXNlZCBtZW1vcnkgYWxsb2NhdG9yLgorICogICAgICAgICAgVGhlIHN0YWNrLWJhc2VkIGFsbG9jYXRvciBkb2VzIG1lbW9yeSBtYW5hZ2VtZW50IGluc2lkZSB0aGUKKyAqICAgICAgICAgIHByZXNlbnRlZCBidWZmZXIgYW5kIGRvZXMgbm90IGNhbGwgY2FsbG9jKCkgYW5kIGZyZWUoKS4KKyAqICAgICAgICAgIEl0IHNldHMgdGhlIGdsb2JhbCBtYmVkdGxzX2NhbGxvYygpIGFuZCBtYmVkdGxzX2ZyZWUoKSBwb2ludGVycworICogICAgICAgICAgdG8gaXRzIG93biBmdW5jdGlvbnMuCisgKiAgICAgICAgICAoUHJvdmlkZWQgbWJlZHRsc19jYWxsb2MoKSBhbmQgbWJlZHRsc19mcmVlKCkgYXJlIHRocmVhZC1zYWZlIGlmCisgKiAgICAgICAgICAgTUJFRFRMU19USFJFQURJTkdfQyBpcyBkZWZpbmVkKQorICoKKyAqIFxub3RlICAgIFRoaXMgY29kZSBpcyBub3Qgb3B0aW1pemVkIGFuZCBwcm92aWRlcyBhIHN0cmFpZ2h0LWZvcndhcmQKKyAqICAgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIGEgc3RhY2stYmFzZWQgbWVtb3J5IGFsbG9jYXRvci4KKyAqCisgKiBccGFyYW0gYnVmICAgYnVmZmVyIHRvIHVzZSBhcyBoZWFwCisgKiBccGFyYW0gbGVuICAgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKi8KK3ZvaWQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgIEZyZWUgdGhlIG11dGV4IGZvciB0aHJlYWQtc2FmZXR5IGFuZCBjbGVhciByZW1haW5pbmcgbWVtb3J5CisgKi8KK3ZvaWQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWUoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICBEZXRlcm1pbmUgd2hlbiB0aGUgYWxsb2NhdG9yIHNob3VsZCBhdXRvbWF0aWNhbGx5IHZlcmlmeSB0aGUgc3RhdGUKKyAqICAgICAgICAgIG9mIHRoZSBlbnRpcmUgY2hhaW4gb2YgaGVhZGVycyAvIG1ldGEtZGF0YS4KKyAqICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX01FTU9SWV9WRVJJRllfTk9ORSkKKyAqCisgKiBccGFyYW0gdmVyaWZ5ICAgIE9uZSBvZiBNQkVEVExTX01FTU9SWV9WRVJJRllfTk9ORSwgTUJFRFRMU19NRU1PUllfVkVSSUZZX0FMTE9DLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX01FTU9SWV9WRVJJRllfRlJFRSBvciBNQkVEVExTX01FTU9SWV9WRVJJRllfQUxXQVlTCisgKi8KK3ZvaWQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX3NldF92ZXJpZnkoIGludCB2ZXJpZnkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisvKioKKyAqIFxicmllZiAgIFByaW50IG91dCB0aGUgc3RhdHVzIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IChwcmltYXJpbHkgZm9yIHVzZQorICogICAgICAgICAgYWZ0ZXIgYSBwcm9ncmFtIHNob3VsZCBoYXZlIGRlLWFsbG9jYXRlZCBhbGwgbWVtb3J5KQorICogICAgICAgICAgUHJpbnRzIG91dCBhIGxpc3Qgb2YgJ3N0aWxsIGFsbG9jYXRlZCcgYmxvY2tzIGFuZCB0aGVpciBzdGFjaworICogICAgICAgICAgdHJhY2UgaWYgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFIGlzIGRlZmluZWQuCisgKi8KK3ZvaWQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3N0YXR1cyggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgIEdldCB0aGUgcGVhayBoZWFwIHVzYWdlIHNvIGZhcgorICoKKyAqIFxwYXJhbSBtYXhfdXNlZCAgICAgIFBlYWsgbnVtYmVyIG9mIGJ5dGVzIGluIHVzZSBvciBjb21taXR0ZWQuIFRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIGJ5dGVzIGluIGFsbG9jYXRlZCBibG9ja3MgdG9vIHNtYWxsIHRvIHNwbGl0CisgKiAgICAgICAgICAgICAgICAgICAgICBpbnRvIHNtYWxsZXIgYmxvY2tzIGJ1dCBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUuCisgKiBccGFyYW0gbWF4X2Jsb2NrcyAgICBQZWFrIG51bWJlciBvZiBibG9ja3MgaW4gdXNlLCBpbmNsdWRpbmcgZnJlZSBhbmQgdXNlZAorICovCit2b2lkIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfZ2V0KCBzaXplX3QgKm1heF91c2VkLCBzaXplX3QgKm1heF9ibG9ja3MgKTsKKworLyoqCisgKiBcYnJpZWYgICBSZXNldCBwZWFrIHN0YXRpc3RpY3MKKyAqLwordm9pZCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfbWF4X3Jlc2V0KCB2b2lkICk7CisKKy8qKgorICogXGJyaWVmICAgR2V0IHRoZSBjdXJyZW50IGhlYXAgdXNhZ2UKKyAqCisgKiBccGFyYW0gY3VyX3VzZWQgICAgICBDdXJyZW50IG51bWJlciBvZiBieXRlcyBpbiB1c2Ugb3IgY29tbWl0dGVkLiBUaGlzCisgKiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyBieXRlcyBpbiBhbGxvY2F0ZWQgYmxvY2tzIHRvbyBzbWFsbCB0byBzcGxpdAorICogICAgICAgICAgICAgICAgICAgICAgaW50byBzbWFsbGVyIGJsb2NrcyBidXQgbGFyZ2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLgorICogXHBhcmFtIGN1cl9ibG9ja3MgICAgQ3VycmVudCBudW1iZXIgb2YgYmxvY2tzIGluIHVzZSwgaW5jbHVkaW5nIGZyZWUgYW5kIHVzZWQKKyAqLwordm9pZCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfY3VyX2dldCggc2l6ZV90ICpjdXJfdXNlZCwgc2l6ZV90ICpjdXJfYmxvY2tzICk7CisjZW5kaWYgLyogTUJFRFRMU19NRU1PUllfREVCVUcgKi8KKworLyoqCisgKiBcYnJpZWYgICBWZXJpZmllcyB0aGF0IGFsbCBoZWFkZXJzIGluIHRoZSBtZW1vcnkgYnVmZmVyIGFyZSBjb3JyZWN0CisgKiAgICAgICAgICBhbmQgY29udGFpbiBzYW5lIHZhbHVlcy4gSGVscHMgZGVidWcgYnVmZmVyLW92ZXJmbG93IGVycm9ycy4KKyAqCisgKiAgICAgICAgICBQcmludHMgb3V0IGZpcnN0IGZhaWx1cmUgaWYgTUJFRFRMU19NRU1PUllfREVCVUcgaXMgZGVmaW5lZC4KKyAqICAgICAgICAgIFByaW50cyBvdXQgZnVsbCBoZWFkZXIgaW5mb3JtYXRpb24gaWYgTUJFRFRMU19NRU1PUllfREVCVUcKKyAqICAgICAgICAgIGlzIGRlZmluZWQuIChJbmNsdWRlcyBzdGFjayB0cmFjZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBibG9jayBpZgorICogICAgICAgICAgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFIGlzIGRlZmluZWQgYXMgd2VsbCkuCisgKgorICogXHJldHVybiAgICAgICAgICAgICAwIGlmIHZlcmlmaWVkLCAxIG90aGVyd2lzZQorICovCitpbnQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3ZlcmlmeSggdm9pZCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgYSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogbWVtb3J5X2J1ZmZlcl9hbGxvYy5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL25ldC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9uZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQ1NTliCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9uZXQuaApAQCAtMCwwICsxLDMxIEBACisvKioKKyAqIFxmaWxlIG5ldC5oCisgKgorICogXGJyaWVmIERlcHJlY2F0ZWQgaGVhZGVyIGZpbGUgdGhhdCBpbmNsdWRlcyBtYmVkdGxzL25ldF9zb2NrZXRzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKgorICogXGRlcHJlY2F0ZWQgU3VwZXJzZWRlZCBieSBtYmVkdGxzL25ldF9zb2NrZXRzLmgKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQpCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2lmIGRlZmluZWQoTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcpCisjd2FybmluZyAiRGVwcmVjYXRlZCBoZWFkZXIgZmlsZTogU3VwZXJzZWRlZCBieSBtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjZW5kaWYgLyogTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcgKi8KKyNlbmRpZiAvKiAhTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbmV0X3NvY2tldHMuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbmV0X3NvY2tldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTMzNTUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9uZXRfc29ja2V0cy5oCkBAIC0wLDAgKzEsMjI1IEBACisvKioKKyAqIFxmaWxlIG5ldF9zb2NrZXRzLmgKKyAqCisgKiBcYnJpZWYgTmV0d29yayBjb21tdW5pY2F0aW9uIGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX05FVF9TT0NLRVRTX0gKKyNkZWZpbmUgTUJFRFRMU19ORVRfU09DS0VUU19ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAic3NsLmgiCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2RlZmluZSBNQkVEVExTX0VSUl9ORVRfU09DS0VUX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgIC0weDAwNDIgIC8qKjwgRmFpbGVkIHRvIG9wZW4gYSBzb2NrZXQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX05FVF9DT05ORUNUX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgLTB4MDA0NCAgLyoqPCBUaGUgY29ubmVjdGlvbiB0byB0aGUgZ2l2ZW4gc2VydmVyIC8gcG9ydCBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX05FVF9CSU5EX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgLTB4MDA0NiAgLyoqPCBCaW5kaW5nIG9mIHRoZSBzb2NrZXQgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ORVRfTElTVEVOX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgIC0weDAwNDggIC8qKjwgQ291bGQgbm90IGxpc3RlbiBvbiB0aGUgc29ja2V0LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ORVRfQUNDRVBUX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgIC0weDAwNEEgIC8qKjwgQ291bGQgbm90IGFjY2VwdCB0aGUgaW5jb21pbmcgY29ubmVjdGlvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTkVUX1JFQ1ZfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAtMHgwMDRDICAvKio8IFJlYWRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgc29ja2V0IGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTkVUX1NFTkRfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAtMHgwMDRFICAvKio8IFNlbmRpbmcgaW5mb3JtYXRpb24gdGhyb3VnaCB0aGUgc29ja2V0IGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTkVUX0NPTk5fUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAtMHgwMDUwICAvKio8IENvbm5lY3Rpb24gd2FzIHJlc2V0IGJ5IHBlZXIuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX05FVF9VTktOT1dOX0hPU1QgICAgICAgICAgICAgICAgICAgICAgLTB4MDA1MiAgLyoqPCBGYWlsZWQgdG8gZ2V0IGFuIElQIGFkZHJlc3MgZm9yIHRoZSBnaXZlbiBob3N0bmFtZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTkVUX0JVRkZFUl9UT09fU01BTEwgICAgICAgICAgICAgICAgICAtMHgwMDQzICAvKio8IEJ1ZmZlciBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgZGF0YS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTkVUX0lOVkFMSURfQ09OVEVYVCAgICAgICAgICAgICAgICAgICAtMHgwMDQ1ICAvKio8IFRoZSBjb250ZXh0IGlzIGludmFsaWQsIGVnIGJlY2F1c2UgaXQgd2FzIGZyZWUoKWVkLiAqLworCisjZGVmaW5lIE1CRURUTFNfTkVUX0xJU1RFTl9CQUNLTE9HICAgICAgICAgMTAgLyoqPCBUaGUgYmFja2xvZyB0aGF0IGxpc3RlbigpIHNob3VsZCB1c2UuICovCisKKyNkZWZpbmUgTUJFRFRMU19ORVRfUFJPVE9fVENQIDAgLyoqPCBUaGUgVENQIHRyYW5zcG9ydCBwcm90b2NvbCAqLworI2RlZmluZSBNQkVEVExTX05FVF9QUk9UT19VRFAgMSAvKio8IFRoZSBVRFAgdHJhbnNwb3J0IHByb3RvY29sICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBXcmFwcGVyIHR5cGUgZm9yIHNvY2tldHMuCisgKgorICogQ3VycmVudGx5IGJhY2tlZCBieSBqdXN0IGEgZmlsZSBkZXNjcmlwdG9yLCBidXQgbWlnaHQgYmUgbW9yZSBpbiB0aGUgZnV0dXJlCisgKiAoZWcgdHdvIGZpbGUgZGVzY3JpcHRvcnMgZm9yIGNvbWJpbmVkIElQdjQgKyBJUHY2IHN1cHBvcnQsIG9yIGFkZGl0aW9uYWwKKyAqIHN0cnVjdHVyZXMgZm9yIGhhbmQtbWFkZSBVRFAgZGVtdWx0aXBsZXhpbmcpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCBmZDsgICAgICAgICAgICAgLyoqPCBUaGUgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgICAgICAgICAgICAgICAgICovCit9CittYmVkdGxzX25ldF9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIGEgY29udGV4dAorICogICAgICAgICAgICAgICAgIEp1c3QgbWFrZXMgdGhlIGNvbnRleHQgcmVhZHkgdG8gYmUgdXNlZCBvciBmcmVlZCBzYWZlbHkuCisgKgorICogXHBhcmFtIGN0eCAgICAgIENvbnRleHQgdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfbmV0X2luaXQoIG1iZWR0bHNfbmV0X2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWF0ZSBhIGNvbm5lY3Rpb24gd2l0aCBob3N0OnBvcnQgaW4gdGhlIGdpdmVuIHByb3RvY29sCisgKgorICogXHBhcmFtIGN0eCAgICAgIFNvY2tldCB0byB1c2UKKyAqIFxwYXJhbSBob3N0ICAgICBIb3N0IHRvIGNvbm5lY3QgdG8KKyAqIFxwYXJhbSBwb3J0ICAgICBQb3J0IHRvIGNvbm5lY3QgdG8KKyAqIFxwYXJhbSBwcm90byAgICBQcm90b2NvbDogTUJFRFRMU19ORVRfUFJPVE9fVENQIG9yIE1CRURUTFNfTkVUX1BST1RPX1VEUAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIG9uZSBvZjoKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX05FVF9TT0NLRVRfRkFJTEVELAorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTkVUX1VOS05PV05fSE9TVCwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX05FVF9DT05ORUNUX0ZBSUxFRAorICoKKyAqIFxub3RlICAgICAgICAgICBTZXRzIHRoZSBzb2NrZXQgaW4gY29ubmVjdGVkIG1vZGUgZXZlbiB3aXRoIFVEUC4KKyAqLworaW50IG1iZWR0bHNfbmV0X2Nvbm5lY3QoIG1iZWR0bHNfbmV0X2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqcG9ydCwgaW50IHByb3RvICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENyZWF0ZSBhIHJlY2VpdmluZyBzb2NrZXQgb24gYmluZF9pcDpwb3J0IGluIHRoZSBjaG9zZW4KKyAqICAgICAgICAgICAgICAgICBwcm90b2NvbC4gSWYgYmluZF9pcCA9PSBOVUxMLCBhbGwgaW50ZXJmYWNlcyBhcmUgYm91bmQuCisgKgorICogXHBhcmFtIGN0eCAgICAgIFNvY2tldCB0byB1c2UKKyAqIFxwYXJhbSBiaW5kX2lwICBJUCB0byBiaW5kIHRvLCBjYW4gYmUgTlVMTAorICogXHBhcmFtIHBvcnQgICAgIFBvcnQgbnVtYmVyIHRvIHVzZQorICogXHBhcmFtIHByb3RvICAgIFByb3RvY29sOiBNQkVEVExTX05FVF9QUk9UT19UQ1Agb3IgTUJFRFRMU19ORVRfUFJPVE9fVURQCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3Igb25lIG9mOgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTkVUX1NPQ0tFVF9GQUlMRUQsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9ORVRfQklORF9GQUlMRUQsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9ORVRfTElTVEVOX0ZBSUxFRAorICoKKyAqIFxub3RlICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBwcm90b2NvbCwgb3BlbnMgdGhlIHNvY2tldHMgYW5kIGJpbmRzIGl0LgorICogICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uLCBtYWtlIHRoZSBzb2NrZXQgbGlzdGVuaW5nIGlmIHByb3RvY29sIGlzIFRDUC4KKyAqLworaW50IG1iZWR0bHNfbmV0X2JpbmQoIG1iZWR0bHNfbmV0X2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqYmluZF9pcCwgY29uc3QgY2hhciAqcG9ydCwgaW50IHByb3RvICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBBY2NlcHQgYSBjb25uZWN0aW9uIGZyb20gYSByZW1vdGUgY2xpZW50CisgKgorICogXHBhcmFtIGJpbmRfY3R4ICBSZWxldmFudCBzb2NrZXQKKyAqIFxwYXJhbSBjbGllbnRfY3R4IFdpbGwgY29udGFpbiB0aGUgY29ubmVjdGVkIGNsaWVudCBzb2NrZXQKKyAqIFxwYXJhbSBjbGllbnRfaXAgV2lsbCBjb250YWluIHRoZSBjbGllbnQgSVAgYWRkcmVzcworICogXHBhcmFtIGJ1Zl9zaXplICBTaXplIG9mIHRoZSBjbGllbnRfaXAgYnVmZmVyCisgKiBccGFyYW0gaXBfbGVuICAgIFdpbGwgcmVjZWl2ZSB0aGUgc2l6ZSBvZiB0aGUgY2xpZW50IElQIHdyaXR0ZW4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTkVUX0FDQ0VQVF9GQUlMRUQsIG9yCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX05FVF9CVUZGRVJfVE9PX1NNQUxMIGlmIGJ1Zl9zaXplIGlzIHRvbyBzbWFsbCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCBpZiBiaW5kX2ZkIHdhcyBzZXQgdG8KKyAqICAgICAgICAgICAgICAgICAgbm9uLWJsb2NraW5nIGFuZCBhY2NlcHQoKSB3b3VsZCBibG9jay4KKyAqLworaW50IG1iZWR0bHNfbmV0X2FjY2VwdCggbWJlZHRsc19uZXRfY29udGV4dCAqYmluZF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX25ldF9jb250ZXh0ICpjbGllbnRfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50X2lwLCBzaXplX3QgYnVmX3NpemUsIHNpemVfdCAqaXBfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgc29ja2V0IGJsb2NraW5nCisgKgorICogXHBhcmFtIGN0eCAgICAgIFNvY2tldCB0byBzZXQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5vbi16ZXJvIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfbmV0X3NldF9ibG9jayggbWJlZHRsc19uZXRfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgc29ja2V0IG5vbi1ibG9ja2luZworICoKKyAqIFxwYXJhbSBjdHggICAgICBTb2NrZXQgdG8gc2V0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBub24temVybyBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX25ldF9zZXRfbm9uYmxvY2soIG1iZWR0bHNfbmV0X2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQb3J0YWJsZSB1c2xlZXAgaGVscGVyCisgKgorICogXHBhcmFtIHVzZWMgICAgIEFtb3VudCBvZiBtaWNyb3NlY29uZHMgdG8gc2xlZXAKKyAqCisgKiBcbm90ZSAgICAgICAgICAgUmVhbCBhbW91bnQgb2YgdGltZSBzbGVwdCB3aWxsIG5vdCBiZSBsZXNzIHRoYW4KKyAqICAgICAgICAgICAgICAgICBzZWxlY3QoKSdzIHRpbWVvdXQgZ3JhbnVsYXJpdHkgKHR5cGljYWxseSwgMTBtcykuCisgKi8KK3ZvaWQgbWJlZHRsc19uZXRfdXNsZWVwKCB1bnNpZ25lZCBsb25nIHVzZWMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmVhZCBhdCBtb3N0ICdsZW4nIGNoYXJhY3RlcnMuIElmIG5vIGVycm9yIG9jY3VycywKKyAqICAgICAgICAgICAgICAgICB0aGUgYWN0dWFsIGFtb3VudCByZWFkIGlzIHJldHVybmVkLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBTb2NrZXQKKyAqIFxwYXJhbSBidWYgICAgICBUaGUgYnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gbGVuICAgICAgTWF4aW11bSBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLAorICogICAgICAgICAgICAgICAgIG9yIGEgbm9uLXplcm8gZXJyb3IgY29kZTsgd2l0aCBhIG5vbi1ibG9ja2luZyBzb2NrZXQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCBpbmRpY2F0ZXMgcmVhZCgpIHdvdWxkIGJsb2NrLgorICovCitpbnQgbWJlZHRsc19uZXRfcmVjdiggdm9pZCAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgV3JpdGUgYXQgbW9zdCAnbGVuJyBjaGFyYWN0ZXJzLiBJZiBubyBlcnJvciBvY2N1cnMsCisgKiAgICAgICAgICAgICAgICAgdGhlIGFjdHVhbCBhbW91bnQgcmVhZCBpcyByZXR1cm5lZC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgU29ja2V0CisgKiBccGFyYW0gYnVmICAgICAgVGhlIGJ1ZmZlciB0byByZWFkIGZyb20KKyAqIFxwYXJhbSBsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgdGhlIG51bWJlciBvZiBieXRlcyBzZW50LAorICogICAgICAgICAgICAgICAgIG9yIGEgbm9uLXplcm8gZXJyb3IgY29kZTsgd2l0aCBhIG5vbi1ibG9ja2luZyBzb2NrZXQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgaW5kaWNhdGVzIHdyaXRlKCkgd291bGQgYmxvY2suCisgKi8KK2ludCBtYmVkdGxzX25ldF9zZW5kKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZWFkIGF0IG1vc3QgJ2xlbicgY2hhcmFjdGVycywgYmxvY2tpbmcgZm9yIGF0IG1vc3QKKyAqICAgICAgICAgICAgICAgICAndGltZW91dCcgc2Vjb25kcy4gSWYgbm8gZXJyb3Igb2NjdXJzLCB0aGUgYWN0dWFsIGFtb3VudAorICogICAgICAgICAgICAgICAgIHJlYWQgaXMgcmV0dXJuZWQuCisgKgorICogXHBhcmFtIGN0eCAgICAgIFNvY2tldAorICogXHBhcmFtIGJ1ZiAgICAgIFRoZSBidWZmZXIgdG8gd3JpdGUgdG8KKyAqIFxwYXJhbSBsZW4gICAgICBNYXhpbXVtIGxlbmd0aCBvZiB0aGUgYnVmZmVyCisgKiBccGFyYW0gdGltZW91dCAgTWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGRhdGEKKyAqICAgICAgICAgICAgICAgICAwIG1lYW5zIG5vIHRpbWVvdXQgKHdhaXQgZm9yZXZlcikKKyAqCisgKiBccmV0dXJuICAgICAgICAgdGhlIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCwKKyAqICAgICAgICAgICAgICAgICBvciBhIG5vbi16ZXJvIGVycm9yIGNvZGU6CisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX1RJTUVPVVQgaWYgdGhlIG9wZXJhdGlvbiB0aW1lZCBvdXQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCBpZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrICh1bnRpbCBkYXRhIGJlY29tZXMgYXZhaWxhYmxlIG9yCisgKiAgICAgICAgICAgICAgICAgdGltZW91dCBpcyByZWFjaGVkKSBldmVuIGlmIHRoZSBzb2NrZXQgaXMgc2V0IHRvCisgKiAgICAgICAgICAgICAgICAgbm9uLWJsb2NraW5nLiBIYW5kbGluZyB0aW1lb3V0cyB3aXRoIG5vbi1ibG9ja2luZyByZWFkcworICogICAgICAgICAgICAgICAgIHJlcXVpcmVzIGEgZGlmZmVyZW50IHN0cmF0ZWd5LgorICovCitpbnQgbWJlZHRsc19uZXRfcmVjdl90aW1lb3V0KCB2b2lkICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0aW1lb3V0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEdyYWNlZnVsbHkgc2h1dGRvd24gdGhlIGNvbm5lY3Rpb24gYW5kIGZyZWUgYXNzb2NpYXRlZCBkYXRhCisgKgorICogXHBhcmFtIGN0eCAgICAgIFRoZSBjb250ZXh0IHRvIGZyZWUKKyAqLwordm9pZCBtYmVkdGxzX25ldF9mcmVlKCBtYmVkdGxzX25ldF9jb250ZXh0ICpjdHggKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIG5ldF9zb2NrZXRzLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvb2lkLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL29pZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZWNkYWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL29pZC5oCkBAIC0wLDAgKzEsNTcwIEBACisvKioKKyAqIFxmaWxlIG9pZC5oCisgKgorICogXGJyaWVmIE9iamVjdCBJZGVudGlmaWVyIChPSUQpIGRhdGFiYXNlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfT0lEX0gKKyNkZWZpbmUgTUJFRFRMU19PSURfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgImFzbjEuaCIKKyNpbmNsdWRlICJway5oIgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX0MpCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRF9DKQorI2luY2x1ZGUgIm1kLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1VTRV9DKSB8fCBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkVBVEVfQykKKyNpbmNsdWRlICJ4NTA5LmgiCisjZW5kaWYKKworI2RlZmluZSBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAgICAgICAgIC0weDAwMkUgIC8qKjwgT0lEIGlzIG5vdCBmb3VuZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfT0lEX0JVRl9UT09fU01BTEwgICAgICAgICAgICAgICAgICAgICAtMHgwMDBCICAvKio8IG91dHB1dCBidWZmZXIgaXMgdG9vIHNtYWxsICovCisKKy8qCisgKiBUb3AgbGV2ZWwgT0lEIHR1cGxlcworICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0lTT19NRU1CRVJfQk9ESUVTICAgICAgICAgICAiXHgyYSIgICAgICAgICAgLyoge2lzbygxKSBtZW1iZXItYm9keSgyKX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfSVNPX0lERU5USUZJRURfT1JHICAgICAgICAgICJceDJiIiAgICAgICAgICAvKiB7aXNvKDEpIGlkZW50aWZpZWQtb3JnYW5pemF0aW9uKDMpfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9JU09fQ0NJVFRfRFMgICAgICAgICAgICAgICAgIlx4NTUiICAgICAgICAgIC8qIHtqb2ludC1pc28tY2NpdHQoMikgZHMoNSl9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0lTT19JVFVfQ09VTlRSWSAgICAgICAgICAgICAiXHg2MCIgICAgICAgICAgLyoge2pvaW50LWlzby1pdHUtdCgyKSBjb3VudHJ5KDE2KX0gKi8KKworLyoKKyAqIElTTyBNZW1iZXIgYm9kaWVzIE9JRCBwYXJ0cworICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0NPVU5UUllfVVMgICAgICAgICAgICAgICAgICAiXHg4Nlx4NDgiICAgICAgLyoge3VzKDg0MCl9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX09SR19SU0FfREFUQV9TRUNVUklUWSAgICAgICAiXHg4Nlx4ZjdceDBkIiAgLyoge3JzYWRzaSgxMTM1NDkpfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9SU0FfQ09NUEFOWSAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfSVNPX01FTUJFUl9CT0RJRVMgTUJFRFRMU19PSURfQ09VTlRSWV9VUyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfT1JHX1JTQV9EQVRBX1NFQ1VSSVRZIC8qIHtpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSByc2Fkc2koMTEzNTQ5KX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfT1JHX0FOU0lfWDlfNjIgICAgICAgICAgICAgICJceGNlXHgzZCIgLyogYW5zaS1YOS02MigxMDA0NSkgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQU5TSV9YOV82MiAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0lTT19NRU1CRVJfQk9ESUVTIE1CRURUTFNfT0lEX0NPVU5UUllfVVMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX09SR19BTlNJX1g5XzYyCisKKy8qCisgKiBJU08gSWRlbnRpZmllZCBvcmdhbml6YXRpb24gT0lEIHBhcnRzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfT1JHX0RPRCAgICAgICAgICAgICAgICAgICAgICJceDA2IiAgICAgICAgICAvKiB7ZG9kKDYpfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9PUkdfT0lXICAgICAgICAgICAgICAgICAgICAgIlx4MGUiCisjZGVmaW5lIE1CRURUTFNfT0lEX09JV19TRUNTSUcgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9PUkdfT0lXICJceDAzIgorI2RlZmluZSBNQkVEVExTX09JRF9PSVdfU0VDU0lHX0FMRyAgICAgICAgICAgICAgTUJFRFRMU19PSURfT0lXX1NFQ1NJRyAiXHgwMiIKKyNkZWZpbmUgTUJFRFRMU19PSURfT0lXX1NFQ1NJR19TSEExICAgICAgICAgICAgIE1CRURUTFNfT0lEX09JV19TRUNTSUdfQUxHICJceDFhIgorI2RlZmluZSBNQkVEVExTX09JRF9PUkdfQ0VSVElDT00gICAgICAgICAgICAgICAgIlx4ODFceDA0IiAgLyogY2VydGljb20oMTMyKSAqLworI2RlZmluZSBNQkVEVExTX09JRF9DRVJUSUNPTSAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfSVNPX0lERU5USUZJRURfT1JHIE1CRURUTFNfT0lEX09SR19DRVJUSUNPTQorI2RlZmluZSBNQkVEVExTX09JRF9PUkdfVEVMRVRSVVNUICAgICAgICAgICAgICAgIlx4MjQiIC8qIHRlbGV0cnVzdCgzNikgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfVEVMRVRSVVNUICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0lTT19JREVOVElGSUVEX09SRyBNQkVEVExTX09JRF9PUkdfVEVMRVRSVVNUCisKKy8qCisgKiBJU08gSVRVIE9JRCBwYXJ0cworICovCisjZGVmaW5lIE1CRURUTFNfT0lEX09SR0FOSVpBVElPTiAgICAgICAgICAgICAgICAiXHgwMSIgICAgICAgICAgLyoge29yZ2FuaXphdGlvbigxKX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfSVNPX0lUVV9VU19PUkcgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0lTT19JVFVfQ09VTlRSWSBNQkVEVExTX09JRF9DT1VOVFJZX1VTIE1CRURUTFNfT0lEX09SR0FOSVpBVElPTiAvKiB7am9pbnQtaXNvLWl0dS10KDIpIGNvdW50cnkoMTYpIHVzKDg0MCkgb3JnYW5pemF0aW9uKDEpfSAqLworCisjZGVmaW5lIE1CRURUTFNfT0lEX09SR19HT1YgICAgICAgICAgICAgICAgICAgICAiXHg2NSIgICAgICAgICAgLyoge2dvdigxMDEpfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9HT1YgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfSVNPX0lUVV9VU19PUkcgTUJFRFRMU19PSURfT1JHX0dPViAvKiB7am9pbnQtaXNvLWl0dS10KDIpIGNvdW50cnkoMTYpIHVzKDg0MCkgb3JnYW5pemF0aW9uKDEpIGdvdigxMDEpfSAqLworCisjZGVmaW5lIE1CRURUTFNfT0lEX09SR19ORVRTQ0FQRSAgICAgICAgICAgICAgICAiXHg4Nlx4RjhceDQyIiAgLyoge25ldHNjYXBlKDExMzczMCl9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX05FVFNDQVBFICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9JU09fSVRVX1VTX09SRyBNQkVEVExTX09JRF9PUkdfTkVUU0NBUEUgLyogTmV0c2NhcGUgT0lEIHtqb2ludC1pc28taXR1LXQoMikgY291bnRyeSgxNikgdXMoODQwKSBvcmdhbml6YXRpb24oMSkgbmV0c2NhcGUoMTEzNzMwKX0gKi8KKworLyogSVNPIGFyYyBmb3Igc3RhbmRhcmQgY2VydGlmaWNhdGUgYW5kIENSTCBleHRlbnNpb25zICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0lEX0NFICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9JU09fQ0NJVFRfRFMgIlx4MUQiIC8qKjwgaWQtY2UgT0JKRUNUIElERU5USUZJRVIgIDo6PSAge2pvaW50LWlzby1jY2l0dCgyKSBkcyg1KSAyOX0gKi8KKworLyoqCisgKiBQcml2YXRlIEludGVybmV0IEV4dGVuc2lvbnMKKyAqIHsgaXNvKDEpIGlkZW50aWZpZWQtb3JnYW5pemF0aW9uKDMpIGRvZCg2KSBpbnRlcm5ldCgxKQorICogICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHkoNSkgbWVjaGFuaXNtcyg1KSBwa2l4KDcpIH0KKyAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0lYICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfSVNPX0lERU5USUZJRURfT1JHIE1CRURUTFNfT0lEX09SR19ET0QgIlx4MDFceDA1XHgwNVx4MDciCisKKy8qCisgKiBBcmMgZm9yIHN0YW5kYXJkIG5hbWluZyBhdHRyaWJ1dGVzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVQgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0lTT19DQ0lUVF9EUyAiXHgwNCIgLyoqPCBpZC1hdCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge2pvaW50LWlzby1jY2l0dCgyKSBkcyg1KSA0fSAqLworI2RlZmluZSBNQkVEVExTX09JRF9BVF9DTiAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVQgIlx4MDMiIC8qKjwgaWQtYXQtY29tbW9uTmFtZSBBdHRyaWJ1dGVUeXBlOj0ge2lkLWF0IDN9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX1NVUl9OQU1FICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgwNCIgLyoqPCBpZC1hdC1zdXJOYW1lIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgNH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVRfU0VSSUFMX05VTUJFUiAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUICJceDA1IiAvKio8IGlkLWF0LXNlcmlhbE51bWJlciBBdHRyaWJ1dGVUeXBlOj0ge2lkLWF0IDV9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX0NPVU5UUlkgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgwNiIgLyoqPCBpZC1hdC1jb3VudHJ5TmFtZSBBdHRyaWJ1dGVUeXBlOj0ge2lkLWF0IDZ9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX0xPQ0FMSVRZICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgwNyIgLyoqPCBpZC1hdC1sb2NhbGl0eSBBdHRyaWJ1dGVUeXBlOj0ge2lkLWF0IDd9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX1NUQVRFICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgwOCIgLyoqPCBpZC1hdC1zdGF0ZSBBdHRyaWJ1dGVUeXBlOj0ge2lkLWF0IDh9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX09SR0FOSVpBVElPTiAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgwQSIgLyoqPCBpZC1hdC1vcmdhbml6YXRpb25OYW1lIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgMTB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX09SR19VTklUICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgwQiIgLyoqPCBpZC1hdC1vcmdhbml6YXRpb25hbFVuaXROYW1lIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgMTF9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX1RJVExFICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgwQyIgLyoqPCBpZC1hdC10aXRsZSBBdHRyaWJ1dGVUeXBlOj0ge2lkLWF0IDEyfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9BVF9QT1NUQUxfQUREUkVTUyAgICAgICAgICAgTUJFRFRMU19PSURfQVQgIlx4MTAiIC8qKjwgaWQtYXQtcG9zdGFsQWRkcmVzcyBBdHRyaWJ1dGVUeXBlOj0ge2lkLWF0IDE2fSAqLworI2RlZmluZSBNQkVEVExTX09JRF9BVF9QT1NUQUxfQ09ERSAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVQgIlx4MTEiIC8qKjwgaWQtYXQtcG9zdGFsQ29kZSBBdHRyaWJ1dGVUeXBlOj0ge2lkLWF0IDE3fSAqLworI2RlZmluZSBNQkVEVExTX09JRF9BVF9HSVZFTl9OQU1FICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVQgIlx4MkEiIC8qKjwgaWQtYXQtZ2l2ZW5OYW1lIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgNDJ9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX0lOSVRJQUxTICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgyQiIgLyoqPCBpZC1hdC1pbml0aWFscyBBdHRyaWJ1dGVUeXBlOj0ge2lkLWF0IDQzfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9BVF9HRU5FUkFUSU9OX1FVQUxJRklFUiAgICAgTUJFRFRMU19PSURfQVQgIlx4MkMiIC8qKjwgaWQtYXQtZ2VuZXJhdGlvblF1YWxpZmllciBBdHRyaWJ1dGVUeXBlOj0ge2lkLWF0IDQ0fSAqLworI2RlZmluZSBNQkVEVExTX09JRF9BVF9VTklRVUVfSURFTlRJRklFUiAgICAgICAgTUJFRFRMU19PSURfQVQgIlx4MkQiIC8qKjwgaWQtYXQtdW5pcXVlSWRlbnRpZmllciBBdHRyaWJ1dFR5cGU6PSB7aWQtYXQgNDV9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX0ROX1FVQUxJRklFUiAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgyRSIgLyoqPCBpZC1hdC1kblF1YWxpZmllciBBdHRyaWJ1dGVUeXBlOj0ge2lkLWF0IDQ2fSAqLworI2RlZmluZSBNQkVEVExTX09JRF9BVF9QU0VVRE9OWU0gICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVQgIlx4NDEiIC8qKjwgaWQtYXQtcHNldWRvbnltIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgNjV9ICovCisKKyNkZWZpbmUgTUJFRFRMU19PSURfRE9NQUlOX0NPTVBPTkVOVCAgICAgICAgICAgICJceDA5XHg5Mlx4MjZceDg5XHg5M1x4RjJceDJDXHg2NFx4MDFceDE5IiAvKiogaWQtZG9tYWluQ29tcG9uZW50IEF0dHJpYnV0ZVR5cGU6PSB7aXR1LXQoMCkgZGF0YSg5KSBwc3MoMjM0MikgdWNsKDE5MjAwMzAwKSBwaWxvdCgxMDApIHBpbG90QXR0cmlidXRlVHlwZSgxKSBkb21haW5Db21wb25lbnQoMjUpfSAqLworCisvKgorICogT0lEcyBmb3Igc3RhbmRhcmQgY2VydGlmaWNhdGUgZXh0ZW5zaW9ucworICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FVVEhPUklUWV9LRVlfSURFTlRJRklFUiAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgyMyIgLyoqPCBpZC1jZS1hdXRob3JpdHlLZXlJZGVudGlmaWVyIE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSAzNSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1NVQkpFQ1RfS0VZX0lERU5USUZJRVIgICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgwRSIgLyoqPCBpZC1jZS1zdWJqZWN0S2V5SWRlbnRpZmllciBPQkpFQ1QgSURFTlRJRklFUiA6Oj0gIHsgaWQtY2UgMTQgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9LRVlfVVNBR0UgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfSURfQ0UgIlx4MEYiIC8qKjwgaWQtY2Uta2V5VXNhZ2UgT0JKRUNUIElERU5USUZJRVIgOjo9ICB7IGlkLWNlIDE1IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQ0VSVElGSUNBVEVfUE9MSUNJRVMgICAgICAgIE1CRURUTFNfT0lEX0lEX0NFICJceDIwIiAvKio8IGlkLWNlLWNlcnRpZmljYXRlUG9saWNpZXMgT0JKRUNUIElERU5USUZJRVIgOjo9ICB7IGlkLWNlIDMyIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUE9MSUNZX01BUFBJTkdTICAgICAgICAgICAgIE1CRURUTFNfT0lEX0lEX0NFICJceDIxIiAvKio8IGlkLWNlLXBvbGljeU1hcHBpbmdzIE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSAzMyB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1NVQkpFQ1RfQUxUX05BTUUgICAgICAgICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgxMSIgLyoqPCBpZC1jZS1zdWJqZWN0QWx0TmFtZSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0gIHsgaWQtY2UgMTcgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9JU1NVRVJfQUxUX05BTUUgICAgICAgICAgICAgTUJFRFRMU19PSURfSURfQ0UgIlx4MTIiIC8qKjwgaWQtY2UtaXNzdWVyQWx0TmFtZSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0gIHsgaWQtY2UgMTggfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9TVUJKRUNUX0RJUkVDVE9SWV9BVFRSUyAgICAgTUJFRFRMU19PSURfSURfQ0UgIlx4MDkiIC8qKjwgaWQtY2Utc3ViamVjdERpcmVjdG9yeUF0dHJpYnV0ZXMgT0JKRUNUIElERU5USUZJRVIgOjo9ICB7IGlkLWNlIDkgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9CQVNJQ19DT05TVFJBSU5UUyAgICAgICAgICAgTUJFRFRMU19PSURfSURfQ0UgIlx4MTMiIC8qKjwgaWQtY2UtYmFzaWNDb25zdHJhaW50cyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0gIHsgaWQtY2UgMTkgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9OQU1FX0NPTlNUUkFJTlRTICAgICAgICAgICAgTUJFRFRMU19PSURfSURfQ0UgIlx4MUUiIC8qKjwgaWQtY2UtbmFtZUNvbnN0cmFpbnRzIE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSAzMCB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BPTElDWV9DT05TVFJBSU5UUyAgICAgICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgyNCIgLyoqPCBpZC1jZS1wb2xpY3lDb25zdHJhaW50cyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0gIHsgaWQtY2UgMzYgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FWFRFTkRFRF9LRVlfVVNBR0UgICAgICAgICAgTUJFRFRMU19PSURfSURfQ0UgIlx4MjUiIC8qKjwgaWQtY2UtZXh0S2V5VXNhZ2UgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaWQtY2UgMzcgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUyAgICAgTUJFRFRMU19PSURfSURfQ0UgIlx4MUYiIC8qKjwgaWQtY2UtY1JMRGlzdHJpYnV0aW9uUG9pbnRzIE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSAzMSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0lOSUhJQklUX0FOWVBPTElDWSAgICAgICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgzNiIgLyoqPCBpZC1jZS1pbmhpYml0QW55UG9saWN5IE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSA1NCB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0ZSRVNIRVNUX0NSTCAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgyRSIgLyoqPCBpZC1jZS1mcmVzaGVzdENSTCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0gIHsgaWQtY2UgNDYgfSAqLworCisvKgorICogTmV0c2NhcGUgY2VydGlmaWNhdGUgZXh0ZW5zaW9ucworICovCisjZGVmaW5lIE1CRURUTFNfT0lEX05TX0NFUlQgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX05FVFNDQVBFICJceDAxIgorI2RlZmluZSBNQkVEVExTX09JRF9OU19DRVJUX1RZUEUgICAgICAgICAgICBNQkVEVExTX09JRF9OU19DRVJUICAiXHgwMSIKKyNkZWZpbmUgTUJFRFRMU19PSURfTlNfQkFTRV9VUkwgICAgICAgICAgICAgTUJFRFRMU19PSURfTlNfQ0VSVCAgIlx4MDIiCisjZGVmaW5lIE1CRURUTFNfT0lEX05TX1JFVk9DQVRJT05fVVJMICAgICAgIE1CRURUTFNfT0lEX05TX0NFUlQgICJceDAzIgorI2RlZmluZSBNQkVEVExTX09JRF9OU19DQV9SRVZPQ0FUSU9OX1VSTCAgICBNQkVEVExTX09JRF9OU19DRVJUICAiXHgwNCIKKyNkZWZpbmUgTUJFRFRMU19PSURfTlNfUkVORVdBTF9VUkwgICAgICAgICAgTUJFRFRMU19PSURfTlNfQ0VSVCAgIlx4MDciCisjZGVmaW5lIE1CRURUTFNfT0lEX05TX0NBX1BPTElDWV9VUkwgICAgICAgIE1CRURUTFNfT0lEX05TX0NFUlQgICJceDA4IgorI2RlZmluZSBNQkVEVExTX09JRF9OU19TU0xfU0VSVkVSX05BTUUgICAgICBNQkVEVExTX09JRF9OU19DRVJUICAiXHgwQyIKKyNkZWZpbmUgTUJFRFRMU19PSURfTlNfQ09NTUVOVCAgICAgICAgICAgICAgTUJFRFRMU19PSURfTlNfQ0VSVCAgIlx4MEQiCisjZGVmaW5lIE1CRURUTFNfT0lEX05TX0RBVEFfVFlQRSAgICAgICAgICAgIE1CRURUTFNfT0lEX05FVFNDQVBFICJceDAyIgorI2RlZmluZSBNQkVEVExTX09JRF9OU19DRVJUX1NFUVVFTkNFICAgICAgICBNQkVEVExTX09JRF9OU19EQVRBX1RZUEUgIlx4MDUiCisKKy8qCisgKiBPSURzIGZvciBDUkwgZXh0ZW5zaW9ucworICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BSSVZBVEVfS0VZX1VTQUdFX1BFUklPRCAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgxMCIKKyNkZWZpbmUgTUJFRFRMU19PSURfQ1JMX05VTUJFUiAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0lEX0NFICJceDE0IiAvKio8IGlkLWNlLWNSTE51bWJlciBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpZC1jZSAyMCB9ICovCisKKy8qCisgKiBYLjUwOSB2MyBFeHRlbmRlZCBrZXkgdXNhZ2UgT0lEcworICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FOWV9FWFRFTkRFRF9LRVlfVVNBR0UgICAgICBNQkVEVExTX09JRF9FWFRFTkRFRF9LRVlfVVNBR0UgIlx4MDAiIC8qKjwgYW55RXh0ZW5kZWRLZXlVc2FnZSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpZC1jZS1leHRLZXlVc2FnZSAwIH0gKi8KKworI2RlZmluZSBNQkVEVExTX09JRF9LUCAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfUEtJWCAiXHgwMyIgLyoqPCBpZC1rcCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpZC1wa2l4IDMgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9TRVJWRVJfQVVUSCAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfS1AgIlx4MDEiIC8qKjwgaWQta3Atc2VydmVyQXV0aCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpZC1rcCAxIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQ0xJRU5UX0FVVEggICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0tQICJceDAyIiAvKio8IGlkLWtwLWNsaWVudEF1dGggT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaWQta3AgMiB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0NPREVfU0lHTklORyAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9LUCAiXHgwMyIgLyoqPCBpZC1rcC1jb2RlU2lnbmluZyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpZC1rcCAzIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRU1BSUxfUFJPVEVDVElPTiAgICAgICAgICAgIE1CRURUTFNfT0lEX0tQICJceDA0IiAvKio8IGlkLWtwLWVtYWlsUHJvdGVjdGlvbiBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpZC1rcCA0IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfVElNRV9TVEFNUElORyAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0tQICJceDA4IiAvKio8IGlkLWtwLXRpbWVTdGFtcGluZyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpZC1rcCA4IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfT0NTUF9TSUdOSU5HICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0tQICJceDA5IiAvKio8IGlkLWtwLU9DU1BTaWduaW5nIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlkLWtwIDkgfSAqLworCisvKgorICogUEtDUyBkZWZpbml0aW9uIE9JRHMKKyAqLworCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfUlNBX0NPTVBBTlkgIlx4MDEiIC8qKjwgcGtjcyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSByc2Fkc2koMTEzNTQ5KSAxIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzEgICAgICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTICJceDAxIiAvKio8IHBrY3MtMSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSByc2Fkc2koMTEzNTQ5KSBwa2NzKDEpIDEgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTNSAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1MgIlx4MDUiIC8qKjwgcGtjcy01IE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIHJzYWRzaSgxMTM1NDkpIHBrY3MoMSkgNSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1M5ICAgICAgICAgICAgICAgTUJFRFRMU19PSURfUEtDUyAiXHgwOSIgLyoqPCBwa2NzLTkgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaXNvKDEpIG1lbWJlci1ib2R5KDIpIHVzKDg0MCkgcnNhZHNpKDExMzU0OSkgcGtjcygxKSA5IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzEyICAgICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTICJceDBjIiAvKio8IHBrY3MtMTIgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaXNvKDEpIG1lbWJlci1ib2R5KDIpIHVzKDg0MCkgcnNhZHNpKDExMzU0OSkgcGtjcygxKSAxMiB9ICovCisKKy8qCisgKiBQS0NTIzEgT0lEcworICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MxX1JTQSAgICAgICAgICAgTUJFRFRMU19PSURfUEtDUzEgIlx4MDEiIC8qKjwgcnNhRW5jcnlwdGlvbiBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBwa2NzLTEgMSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MxX01EMiAgICAgICAgICAgTUJFRFRMU19PSURfUEtDUzEgIlx4MDIiIC8qKjwgbWQyV2l0aFJTQUVuY3J5cHRpb24gOjo9IHsgcGtjcy0xIDIgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTMV9NRDQgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1MxICJceDAzIiAvKio8IG1kNFdpdGhSU0FFbmNyeXB0aW9uIDo6PSB7IHBrY3MtMSAzIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzFfTUQ1ICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTMSAiXHgwNCIgLyoqPCBtZDVXaXRoUlNBRW5jcnlwdGlvbiA6Oj0geyBwa2NzLTEgNCB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MxX1NIQTEgICAgICAgICAgTUJFRFRMU19PSURfUEtDUzEgIlx4MDUiIC8qKjwgc2hhMVdpdGhSU0FFbmNyeXB0aW9uIDo6PSB7IHBrY3MtMSA1IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzFfU0hBMjI0ICAgICAgICBNQkVEVExTX09JRF9QS0NTMSAiXHgwZSIgLyoqPCBzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiA6Oj0geyBwa2NzLTEgMTQgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTMV9TSEEyNTYgICAgICAgIE1CRURUTFNfT0lEX1BLQ1MxICJceDBiIiAvKio8IHNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIDo6PSB7IHBrY3MtMSAxMSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MxX1NIQTM4NCAgICAgICAgTUJFRFRMU19PSURfUEtDUzEgIlx4MGMiIC8qKjwgc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24gOjo9IHsgcGtjcy0xIDEyIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzFfU0hBNTEyICAgICAgICBNQkVEVExTX09JRF9QS0NTMSAiXHgwZCIgLyoqPCBzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiA6Oj0geyBwa2NzLTEgMTMgfSAqLworCisjZGVmaW5lIE1CRURUTFNfT0lEX1JTQV9TSEFfT0JTICAgICAgICAgIlx4MkJceDBFXHgwM1x4MDJceDFEIgorCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1M5X0VNQUlMICAgICAgICAgTUJFRFRMU19PSURfUEtDUzkgIlx4MDEiIC8qKjwgZW1haWxBZGRyZXNzIEF0dHJpYnV0ZVR5cGUgOjo9IHsgcGtjcy05IDEgfSAqLworCisvKiBSRkMgNDA1NSAqLworI2RlZmluZSBNQkVEVExTX09JRF9SU0FTU0FfUFNTICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1MxICJceDBhIiAvKio8IGlkLVJTQVNTQS1QU1MgOjo9IHsgcGtjcy0xIDEwIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfTUdGMSAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTMSAiXHgwOCIgLyoqPCBpZC1tZ2YxIDo6PSB7IHBrY3MtMSA4IH0gKi8KKworLyoKKyAqIERpZ2VzdCBhbGdvcml0aG1zCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRElHRVNUX0FMR19NRDIgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1JTQV9DT01QQU5ZICJceDAyXHgwMiIgLyoqPCBpZC1tYmVkdGxzX21kMiBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSByc2Fkc2koMTEzNTQ5KSBkaWdlc3RBbGdvcml0aG0oMikgMiB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfTUQ0ICAgICAgICAgICAgICBNQkVEVExTX09JRF9SU0FfQ09NUEFOWSAiXHgwMlx4MDQiIC8qKjwgaWQtbWJlZHRsc19tZDQgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaXNvKDEpIG1lbWJlci1ib2R5KDIpIHVzKDg0MCkgcnNhZHNpKDExMzU0OSkgZGlnZXN0QWxnb3JpdGhtKDIpIDQgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9ESUdFU1RfQUxHX01ENSAgICAgICAgICAgICAgTUJFRFRMU19PSURfUlNBX0NPTVBBTlkgIlx4MDJceDA1IiAvKio8IGlkLW1iZWR0bHNfbWQ1IE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIHJzYWRzaSgxMTM1NDkpIGRpZ2VzdEFsZ29yaXRobSgyKSA1IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRElHRVNUX0FMR19TSEExICAgICAgICAgICAgIE1CRURUTFNfT0lEX0lTT19JREVOVElGSUVEX09SRyBNQkVEVExTX09JRF9PSVdfU0VDU0lHX1NIQTEgLyoqPCBpZC1tYmVkdGxzX3NoYTEgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaXNvKDEpIGlkZW50aWZpZWQtb3JnYW5pemF0aW9uKDMpIG9pdygxNCkgc2Vjc2lnKDMpIGFsZ29yaXRobXMoMikgMjYgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTIyNCAgICAgICAgICAgTUJFRFRMU19PSURfR09WICJceDAzXHgwNFx4MDJceDA0IiAvKio8IGlkLXNoYTIyNCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBqb2ludC1pc28taXR1LXQoMikgY291bnRyeSgxNikgdXMoODQwKSBvcmdhbml6YXRpb24oMSkgZ292KDEwMSkgY3NvcigzKSBuaXN0YWxnb3JpdGhtKDQpIGhhc2hhbGdzKDIpIDQgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTI1NiAgICAgICAgICAgTUJFRFRMU19PSURfR09WICJceDAzXHgwNFx4MDJceDAxIiAvKio8IGlkLW1iZWR0bHNfc2hhMjU2IE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGpvaW50LWlzby1pdHUtdCgyKSBjb3VudHJ5KDE2KSB1cyg4NDApIG9yZ2FuaXphdGlvbigxKSBnb3YoMTAxKSBjc29yKDMpIG5pc3RhbGdvcml0aG0oNCkgaGFzaGFsZ3MoMikgMSB9ICovCisKKyNkZWZpbmUgTUJFRFRMU19PSURfRElHRVNUX0FMR19TSEEzODQgICAgICAgICAgIE1CRURUTFNfT0lEX0dPViAiXHgwM1x4MDRceDAyXHgwMiIgLyoqPCBpZC1zaGEzODQgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgam9pbnQtaXNvLWl0dS10KDIpIGNvdW50cnkoMTYpIHVzKDg0MCkgb3JnYW5pemF0aW9uKDEpIGdvdigxMDEpIGNzb3IoMykgbmlzdGFsZ29yaXRobSg0KSBoYXNoYWxncygyKSAyIH0gKi8KKworI2RlZmluZSBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTUxMiAgICAgICAgICAgTUJFRFRMU19PSURfR09WICJceDAzXHgwNFx4MDJceDAzIiAvKio8IGlkLW1iZWR0bHNfc2hhNTEyIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGpvaW50LWlzby1pdHUtdCgyKSBjb3VudHJ5KDE2KSB1cyg4NDApIG9yZ2FuaXphdGlvbigxKSBnb3YoMTAxKSBjc29yKDMpIG5pc3RhbGdvcml0aG0oNCkgaGFzaGFsZ3MoMikgMyB9ICovCisKKyNkZWZpbmUgTUJFRFRMU19PSURfSE1BQ19TSEExICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1JTQV9DT01QQU5ZICJceDAyXHgwNyIgLyoqPCBpZC1obWFjV2l0aFNIQTEgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaXNvKDEpIG1lbWJlci1ib2R5KDIpIHVzKDg0MCkgcnNhZHNpKDExMzU0OSkgZGlnZXN0QWxnb3JpdGhtKDIpIDcgfSAqLworCisvKgorICogRW5jcnlwdGlvbiBhbGdvcml0aG1zCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfREVTX0NCQyAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0lTT19JREVOVElGSUVEX09SRyBNQkVEVExTX09JRF9PSVdfU0VDU0lHX0FMRyAiXHgwNyIgLyoqPCBkZXNDQkMgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaXNvKDEpIGlkZW50aWZpZWQtb3JnYW5pemF0aW9uKDMpIG9pdygxNCkgc2Vjc2lnKDMpIGFsZ29yaXRobXMoMikgNyB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0RFU19FREUzX0NCQyAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9SU0FfQ09NUEFOWSAiXHgwM1x4MDciIC8qKjwgZGVzLWVkZTMtY2JjIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlzbygxKSBtZW1iZXItYm9keSgyKSAtLSB1cyg4NDApIHJzYWRzaSgxMTM1NDkpIGVuY3J5cHRpb25BbGdvcml0aG0oMykgNyB9ICovCisKKy8qCisgKiBQS0NTIzUgT0lEcworICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1M1X1BCS0RGMiAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTNSAiXHgwYyIgLyoqPCBpZC1QQktERjIgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTUgMTJ9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1M1X1BCRVMyICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTNSAiXHgwZCIgLyoqPCBpZC1QQkVTMiBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtNSAxM30gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzVfUEJNQUMxICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1M1ICJceDBlIiAvKio8IGlkLVBCTUFDMSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtNSAxNH0gKi8KKworLyoKKyAqIFBLQ1MjNSBQQkVTMSBhbGdvcml0aG1zCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzVfUEJFX01EMl9ERVNfQ0JDICAgICAgIE1CRURUTFNfT0lEX1BLQ1M1ICJceDAxIiAvKio8IHBiZVdpdGhNRDJBbmRERVMtQ0JDIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7cGtjcy01IDF9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1M1X1BCRV9NRDJfUkMyX0NCQyAgICAgICBNQkVEVExTX09JRF9QS0NTNSAiXHgwNCIgLyoqPCBwYmVXaXRoTUQyQW5kUkMyLUNCQyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtNSA0fSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTNV9QQkVfTUQ1X0RFU19DQkMgICAgICAgTUJFRFRMU19PSURfUEtDUzUgIlx4MDMiIC8qKjwgcGJlV2l0aE1ENUFuZERFUy1DQkMgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTUgM30gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzVfUEJFX01ENV9SQzJfQ0JDICAgICAgIE1CRURUTFNfT0lEX1BLQ1M1ICJceDA2IiAvKio8IHBiZVdpdGhNRDVBbmRSQzItQ0JDIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7cGtjcy01IDZ9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1M1X1BCRV9TSEExX0RFU19DQkMgICAgICBNQkVEVExTX09JRF9QS0NTNSAiXHgwYSIgLyoqPCBwYmVXaXRoU0hBMUFuZERFUy1DQkMgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTUgMTB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1M1X1BCRV9TSEExX1JDMl9DQkMgICAgICBNQkVEVExTX09JRF9QS0NTNSAiXHgwYiIgLyoqPCBwYmVXaXRoU0hBMUFuZFJDMi1DQkMgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTUgMTF9ICovCisKKy8qCisgKiBQS0NTIzggT0lEcworICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1M5X0NTUl9FWFRfUkVRICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTOSAiXHgwZSIgLyoqPCBleHRlbnNpb25SZXF1ZXN0IE9CSkVDVCBJREVOVElGSUVSIDo6PSB7cGtjcy05IDE0fSAqLworCisvKgorICogUEtDUyMxMiBQQkUgT0lEcworICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkUgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfUEtDUzEyICJceDAxIiAvKio8IHBrY3MtMTJQYmVJZHMgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTEyIDF9ICovCisKKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX1JDNF8xMjggICAgICAgICBNQkVEVExTX09JRF9QS0NTMTJfUEJFICJceDAxIiAvKio8IHBiZVdpdGhTSEFBbmQxMjhCaXRSQzQgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTEyUGJlSWRzIDF9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzRfNDAgICAgICAgICAgTUJFRFRMU19PSURfUEtDUzEyX1BCRSAiXHgwMiIgLyoqPCBwYmVXaXRoU0hBQW5kNDBCaXRSQzQgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTEyUGJlSWRzIDJ9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9ERVMzX0VERV9DQkMgICAgTUJFRFRMU19PSURfUEtDUzEyX1BCRSAiXHgwMyIgLyoqPCBwYmVXaXRoU0hBQW5kMy1LZXlUcmlwbGVERVMtQ0JDIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7cGtjcy0xMlBiZUlkcyAzfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTMTJfUEJFX1NIQTFfREVTMl9FREVfQ0JDICAgIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkUgIlx4MDQiIC8qKjwgcGJlV2l0aFNIQUFuZDItS2V5VHJpcGxlREVTLUNCQyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtMTJQYmVJZHMgNH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX1JDMl8xMjhfQ0JDICAgICBNQkVEVExTX09JRF9QS0NTMTJfUEJFICJceDA1IiAvKio8IHBiZVdpdGhTSEFBbmQxMjhCaXRSQzItQ0JDIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7cGtjcy0xMlBiZUlkcyA1fSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTMTJfUEJFX1NIQTFfUkMyXzQwX0NCQyAgICAgIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkUgIlx4MDYiIC8qKjwgcGJlV2l0aFNIQUFuZDQwQml0UkMyLUNCQyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtMTJQYmVJZHMgNn0gKi8KKworLyoKKyAqIEVDIGtleSBhbGdvcml0aG1zIGZyb20gUkZDIDU0ODAKKyAqLworCisvKiBpZC1lY1B1YmxpY0tleSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geworICogICAgICAgaXNvKDEpIG1lbWJlci1ib2R5KDIpIHVzKDg0MCkgYW5zaS1YOS02MigxMDA0NSkga2V5VHlwZSgyKSAxIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNfQUxHX1VOUkVTVFJJQ1RFRCAgICAgICAgIE1CRURUTFNfT0lEX0FOU0lfWDlfNjIgIlx4MDJcMDEiCisKKy8qICAgaWQtZWNESCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geworICogICAgIGlzbygxKSBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbigzKSBjZXJ0aWNvbSgxMzIpCisgKiAgICAgc2NoZW1lcygxKSBlY2RoKDEyKSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDX0FMR19FQ0RIICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9DRVJUSUNPTSAiXHgwMVx4MGMiCisKKy8qCisgKiBFQ1BhcmFtZXRlcnMgbmFtZWRDdXJ2ZSBpZGVudGlmaWVycywgZnJvbSBSRkMgNTQ4MCwgUkZDIDU2MzksIGFuZCBTRUMyCisgKi8KKworLyogc2VjcDE5MnIxIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7CisgKiAgIGlzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIGFuc2ktWDktNjIoMTAwNDUpIGN1cnZlcygzKSBwcmltZSgxKSAxIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AxOTJSMSAgICAgICAgTUJFRFRMU19PSURfQU5TSV9YOV82MiAiXHgwM1x4MDFceDAxIgorCisvKiBzZWNwMjI0cjEgT0JKRUNUIElERU5USUZJRVIgOjo9IHsKKyAqICAgaXNvKDEpIGlkZW50aWZpZWQtb3JnYW5pemF0aW9uKDMpIGNlcnRpY29tKDEzMikgY3VydmUoMCkgMzMgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDIyNFIxICAgICAgICBNQkVEVExTX09JRF9DRVJUSUNPTSAiXHgwMFx4MjEiCisKKy8qIHNlY3AyNTZyMSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geworICogICBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSBhbnNpLVg5LTYyKDEwMDQ1KSBjdXJ2ZXMoMykgcHJpbWUoMSkgNyB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjU2UjEgICAgICAgIE1CRURUTFNfT0lEX0FOU0lfWDlfNjIgIlx4MDNceDAxXHgwNyIKKworLyogc2VjcDM4NHIxIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7CisgKiAgIGlzbygxKSBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbigzKSBjZXJ0aWNvbSgxMzIpIGN1cnZlKDApIDM0IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AzODRSMSAgICAgICAgTUJFRFRMU19PSURfQ0VSVElDT00gIlx4MDBceDIyIgorCisvKiBzZWNwNTIxcjEgT0JKRUNUIElERU5USUZJRVIgOjo9IHsKKyAqICAgaXNvKDEpIGlkZW50aWZpZWQtb3JnYW5pemF0aW9uKDMpIGNlcnRpY29tKDEzMikgY3VydmUoMCkgMzUgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDUyMVIxICAgICAgICBNQkVEVExTX09JRF9DRVJUSUNPTSAiXHgwMFx4MjMiCisKKy8qIHNlY3AxOTJrMSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geworICogICBpc28oMSkgaWRlbnRpZmllZC1vcmdhbml6YXRpb24oMykgY2VydGljb20oMTMyKSBjdXJ2ZSgwKSAzMSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMTkySzEgICAgICAgIE1CRURUTFNfT0lEX0NFUlRJQ09NICJceDAwXHgxZiIKKworLyogc2VjcDIyNGsxIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7CisgKiAgIGlzbygxKSBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbigzKSBjZXJ0aWNvbSgxMzIpIGN1cnZlKDApIDMyIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AyMjRLMSAgICAgICAgTUJFRFRMU19PSURfQ0VSVElDT00gIlx4MDBceDIwIgorCisvKiBzZWNwMjU2azEgT0JKRUNUIElERU5USUZJRVIgOjo9IHsKKyAqICAgaXNvKDEpIGlkZW50aWZpZWQtb3JnYW5pemF0aW9uKDMpIGNlcnRpY29tKDEzMikgY3VydmUoMCkgMTAgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDI1NksxICAgICAgICBNQkVEVExTX09JRF9DRVJUSUNPTSAiXHgwMFx4MGEiCisKKy8qIFJGQyA1NjM5IDQuMQorICogZWNTdGRDdXJ2ZXNBbmRHZW5lcmF0aW9uIE9CSkVDVCBJREVOVElGSUVSOjo9IHtpc28oMSkKKyAqIGlkZW50aWZpZWQtb3JnYW5pemF0aW9uKDMpIHRlbGV0cnVzdCgzNikgYWxnb3JpdGhtKDMpIHNpZ25hdHVyZS0KKyAqIGFsZ29yaXRobSgzKSBlY1NpZ24oMikgOH0KKyAqIGVsbGlwdGljQ3VydmUgT0JKRUNUIElERU5USUZJRVIgOjo9IHtlY1N0ZEN1cnZlc0FuZEdlbmVyYXRpb24gMX0KKyAqIHZlcnNpb25PbmUgT0JKRUNUIElERU5USUZJRVIgOjo9IHtlbGxpcHRpY0N1cnZlIDF9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDX0JSQUlOUE9PTF9WMSAgICAgICAgIE1CRURUTFNfT0lEX1RFTEVUUlVTVCAiXHgwM1x4MDNceDAyXHgwOFx4MDFceDAxIgorCisvKiBicmFpbnBvb2xQMjU2cjEgT0JKRUNUIElERU5USUZJRVIgOjo9IHt2ZXJzaW9uT25lIDd9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDX0dSUF9CUDI1NlIxICAgICAgICAgIE1CRURUTFNfT0lEX0VDX0JSQUlOUE9PTF9WMSAiXHgwNyIKKworLyogYnJhaW5wb29sUDM4NHIxIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7dmVyc2lvbk9uZSAxMX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNfR1JQX0JQMzg0UjEgICAgICAgICAgTUJFRFRMU19PSURfRUNfQlJBSU5QT09MX1YxICJceDBCIgorCisvKiBicmFpbnBvb2xQNTEycjEgT0JKRUNUIElERU5USUZJRVIgOjo9IHt2ZXJzaW9uT25lIDEzfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ19HUlBfQlA1MTJSMSAgICAgICAgICBNQkVEVExTX09JRF9FQ19CUkFJTlBPT0xfVjEgIlx4MEQiCisKKy8qCisgKiBTRUMxIEMuMQorICoKKyAqIHByaW1lLWZpZWxkIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlkLWZpZWxkVHlwZSAxIH0KKyAqIGlkLWZpZWxkVHlwZSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBhbnNpLVg5LTYyIGZpZWxkVHlwZSgxKX0KKyAqLworI2RlZmluZSBNQkVEVExTX09JRF9BTlNJX1g5XzYyX0ZJRUxEX1RZUEUgICBNQkVEVExTX09JRF9BTlNJX1g5XzYyICJceDAxIgorI2RlZmluZSBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1BSSU1FX0ZJRUxEICBNQkVEVExTX09JRF9BTlNJX1g5XzYyX0ZJRUxEX1RZUEUgIlx4MDEiCisKKy8qCisgKiBFQ0RTQSBzaWduYXR1cmUgaWRlbnRpZmllcnMsIGZyb20gUkZDIDU0ODAKKyAqLworI2RlZmluZSBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1NJRyAgICAgICAgICBNQkVEVExTX09JRF9BTlNJX1g5XzYyICJceDA0IiAvKiBzaWduYXR1cmVzKDQpICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfU0lHX1NIQTIgICAgIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfU0lHICJceDAzIiAvKiBlY2RzYS13aXRoLVNIQTIoMykgKi8KKworLyogZWNkc2Etd2l0aC1TSEExIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7CisgKiAgIGlzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIGFuc2ktWDktNjIoMTAwNDUpIHNpZ25hdHVyZXMoNCkgMSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDRFNBX1NIQTEgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfU0lHICJceDAxIgorCisvKiBlY2RzYS13aXRoLVNIQTIyNCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geworICogICBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSBhbnNpLVg5LTYyKDEwMDQ1KSBzaWduYXR1cmVzKDQpCisgKiAgIGVjZHNhLXdpdGgtU0hBMigzKSAxIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNEU0FfU0hBMjI0ICAgICAgICAgICAgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9TSUdfU0hBMiAiXHgwMSIKKworLyogZWNkc2Etd2l0aC1TSEEyNTYgT0JKRUNUIElERU5USUZJRVIgOjo9IHsKKyAqICAgaXNvKDEpIG1lbWJlci1ib2R5KDIpIHVzKDg0MCkgYW5zaS1YOS02MigxMDA0NSkgc2lnbmF0dXJlcyg0KQorICogICBlY2RzYS13aXRoLVNIQTIoMykgMiB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDRFNBX1NIQTI1NiAgICAgICAgICAgIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfU0lHX1NIQTIgIlx4MDIiCisKKy8qIGVjZHNhLXdpdGgtU0hBMzg0IE9CSkVDVCBJREVOVElGSUVSIDo6PSB7CisgKiAgIGlzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIGFuc2ktWDktNjIoMTAwNDUpIHNpZ25hdHVyZXMoNCkKKyAqICAgZWNkc2Etd2l0aC1TSEEyKDMpIDMgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ0RTQV9TSEEzODQgICAgICAgICAgICBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1NJR19TSEEyICJceDAzIgorCisvKiBlY2RzYS13aXRoLVNIQTUxMiBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geworICogICBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSBhbnNpLVg5LTYyKDEwMDQ1KSBzaWduYXR1cmVzKDQpCisgKiAgIGVjZHNhLXdpdGgtU0hBMigzKSA0IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNEU0FfU0hBNTEyICAgICAgICAgICAgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9TSUdfU0hBMiAiXHgwNCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBCYXNlIE9JRCBkZXNjcmlwdG9yIHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqYXNuMTsgICAgICAgICAgICAgICAvKiE8IE9JRCBBU04uMSByZXByZXNlbnRhdGlvbiAgICAgICAqLworICAgIHNpemVfdCBhc24xX2xlbjsgICAgICAgICAgICAgICAgLyohPCBsZW5ndGggb2YgYXNuMSAgICAgICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgICAgIC8qITwgb2ZmaWNpYWwgbmFtZSAoZS5nLiBmcm9tIFJGQykgICovCisgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb247ICAgICAgICAvKiE8IGh1bWFuIGZyaWVuZGx5IGRlc2NyaXB0aW9uICAgICAqLworfSBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3Q7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBUcmFuc2xhdGUgYW4gQVNOLjEgT0lEIGludG8gaXRzIG51bWVyaWMgcmVwcmVzZW50YXRpb24KKyAqICAgICAgICAgICAgICAgICAgKGUuZy4gIlx4MkFceDg2XHg0OFx4ODZceEY3XHgwRCIgaW50byAiMS4yLjg0MC4xMTM1NDkiKQorICoKKyAqIFxwYXJhbSBidWYgICAgICAgYnVmZmVyIHRvIHB1dCByZXByZXNlbnRhdGlvbiBpbgorICogXHBhcmFtIHNpemUgICAgICBzaXplIG9mIHRoZSBidWZmZXIKKyAqIFxwYXJhbSBvaWQgICAgICAgT0lEIHRvIHRyYW5zbGF0ZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgTGVuZ3RoIG9mIHRoZSBzdHJpbmcgd3JpdHRlbiAoZXhjbHVkaW5nIGZpbmFsIE5VTEwpIG9yCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX09JRF9CVUZfVE9PX1NNQUxMIGluIGNhc2Ugb2YgZXJyb3IKKyAqLworaW50IG1iZWR0bHNfb2lkX2dldF9udW1lcmljX3N0cmluZyggY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqb2lkICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9VU0VfQykgfHwgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JFQVRFX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmFuc2xhdGUgYW4gWC41MDkgZXh0ZW5zaW9uIE9JRCBpbnRvIGxvY2FsIHZhbHVlcworICoKKyAqIFxwYXJhbSBvaWQgICAgICBPSUQgdG8gdXNlCisgKiBccGFyYW0gZXh0X3R5cGUgcGxhY2UgdG8gc3RvcmUgdGhlIGV4dGVuc2lvbiB0eXBlCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorICovCitpbnQgbWJlZHRsc19vaWRfZ2V0X3g1MDlfZXh0X3R5cGUoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwgaW50ICpleHRfdHlwZSApOworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyYW5zbGF0ZSBhbiBYLjUwOSBhdHRyaWJ1dGUgdHlwZSBPSUQgaW50byB0aGUgc2hvcnQgbmFtZQorICogICAgICAgICAgICAgICAgIChlLmcuIHRoZSBPSUQgZm9yIGFuIFg1MjAgQ29tbW9uIE5hbWUgaW50byAiQ04iKQorICoKKyAqIFxwYXJhbSBvaWQgICAgICBPSUQgdG8gdXNlCisgKiBccGFyYW0gc2hvcnRfbmFtZSAgICBwbGFjZSB0byBzdG9yZSB0aGUgc3RyaW5nIHBvaW50ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisgKi8KK2ludCBtYmVkdGxzX29pZF9nZXRfYXR0cl9zaG9ydF9uYW1lKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpvaWQsIGNvbnN0IGNoYXIgKipzaG9ydF9uYW1lICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyYW5zbGF0ZSBQdWJsaWNLZXlBbGdvcml0aG0gT0lEIGludG8gcGtfdHlwZQorICoKKyAqIFxwYXJhbSBvaWQgICAgICBPSUQgdG8gdXNlCisgKiBccGFyYW0gcGtfYWxnICAgcGxhY2UgdG8gc3RvcmUgcHVibGljIGtleSBhbGdvcml0aG0KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisgKi8KK2ludCBtYmVkdGxzX29pZF9nZXRfcGtfYWxnKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpvaWQsIG1iZWR0bHNfcGtfdHlwZV90ICpwa19hbGcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJhbnNsYXRlIHBrX3R5cGUgaW50byBQdWJsaWNLZXlBbGdvcml0aG0gT0lECisgKgorICogXHBhcmFtIHBrX2FsZyAgIFB1YmxpYyBrZXkgdHlwZSB0byBsb29rIGZvcgorICogXHBhcmFtIG9pZCAgICAgIHBsYWNlIHRvIHN0b3JlIEFTTi4xIE9JRCBzdHJpbmcgcG9pbnRlcgorICogXHBhcmFtIG9sZW4gICAgIGxlbmd0aCBvZiB0aGUgT0lECisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorICovCitpbnQgbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9wa19hbGcoIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipvaWQsIHNpemVfdCAqb2xlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJhbnNsYXRlIE5hbWVkQ3VydmUgT0lEIGludG8gYW4gRUMgZ3JvdXAgaWRlbnRpZmllcgorICoKKyAqIFxwYXJhbSBvaWQgICAgICBPSUQgdG8gdXNlCisgKiBccGFyYW0gZ3JwX2lkICAgcGxhY2UgdG8gc3RvcmUgZ3JvdXAgaWQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisgKi8KK2ludCBtYmVkdGxzX29pZF9nZXRfZWNfZ3JwKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpvaWQsIG1iZWR0bHNfZWNwX2dyb3VwX2lkICpncnBfaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJhbnNsYXRlIEVDIGdyb3VwIGlkZW50aWZpZXIgaW50byBOYW1lZEN1cnZlIE9JRAorICoKKyAqIFxwYXJhbSBncnBfaWQgICBFQyBncm91cCBpZGVudGlmaWVyCisgKiBccGFyYW0gb2lkICAgICAgcGxhY2UgdG8gc3RvcmUgQVNOLjEgT0lEIHN0cmluZyBwb2ludGVyCisgKiBccGFyYW0gb2xlbiAgICAgbGVuZ3RoIG9mIHRoZSBPSUQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisgKi8KK2ludCBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X2VjX2dycCggbWJlZHRsc19lY3BfZ3JvdXBfaWQgZ3JwX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm9pZCwgc2l6ZV90ICpvbGVuICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmFuc2xhdGUgU2lnbmF0dXJlQWxnb3JpdGhtIE9JRCBpbnRvIG1kX3R5cGUgYW5kIHBrX3R5cGUKKyAqCisgKiBccGFyYW0gb2lkICAgICAgT0lEIHRvIHVzZQorICogXHBhcmFtIG1kX2FsZyAgIHBsYWNlIHRvIHN0b3JlIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobQorICogXHBhcmFtIHBrX2FsZyAgIHBsYWNlIHRvIHN0b3JlIHB1YmxpYyBrZXkgYWxnb3JpdGhtCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorICovCitpbnQgbWJlZHRsc19vaWRfZ2V0X3NpZ19hbGcoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90ICptZF9hbGcsIG1iZWR0bHNfcGtfdHlwZV90ICpwa19hbGcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJhbnNsYXRlIFNpZ25hdHVyZUFsZ29yaXRobSBPSUQgaW50byBkZXNjcmlwdGlvbgorICoKKyAqIFxwYXJhbSBvaWQgICAgICBPSUQgdG8gdXNlCisgKiBccGFyYW0gZGVzYyAgICAgcGxhY2UgdG8gc3RvcmUgc3RyaW5nIHBvaW50ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisgKi8KK2ludCBtYmVkdGxzX29pZF9nZXRfc2lnX2FsZ19kZXNjKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpvaWQsIGNvbnN0IGNoYXIgKipkZXNjICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyYW5zbGF0ZSBtZF90eXBlIGFuZCBwa190eXBlIGludG8gU2lnbmF0dXJlQWxnb3JpdGhtIE9JRAorICoKKyAqIFxwYXJhbSBtZF9hbGcgICBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0KKyAqIFxwYXJhbSBwa19hbGcgICBwdWJsaWMga2V5IGFsZ29yaXRobQorICogXHBhcmFtIG9pZCAgICAgIHBsYWNlIHRvIHN0b3JlIEFTTi4xIE9JRCBzdHJpbmcgcG9pbnRlcgorICogXHBhcmFtIG9sZW4gICAgIGxlbmd0aCBvZiB0aGUgT0lECisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorICovCitpbnQgbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9zaWdfYWxnKCBtYmVkdGxzX3BrX3R5cGVfdCBwa19hbGcsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqb2lkLCBzaXplX3QgKm9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJhbnNsYXRlIGhhc2ggYWxnb3JpdGhtIE9JRCBpbnRvIG1kX3R5cGUKKyAqCisgKiBccGFyYW0gb2lkICAgICAgT0lEIHRvIHVzZQorICogXHBhcmFtIG1kX2FsZyAgIHBsYWNlIHRvIHN0b3JlIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKyAqLworaW50IG1iZWR0bHNfb2lkX2dldF9tZF9hbGcoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwgbWJlZHRsc19tZF90eXBlX3QgKm1kX2FsZyApOworI2VuZGlmIC8qIE1CRURUTFNfTURfQyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmFuc2xhdGUgRXh0ZW5kZWQgS2V5IFVzYWdlIE9JRCBpbnRvIGRlc2NyaXB0aW9uCisgKgorICogXHBhcmFtIG9pZCAgICAgIE9JRCB0byB1c2UKKyAqIFxwYXJhbSBkZXNjICAgICBwbGFjZSB0byBzdG9yZSBzdHJpbmcgcG9pbnRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKyAqLworaW50IG1iZWR0bHNfb2lkX2dldF9leHRlbmRlZF9rZXlfdXNhZ2UoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwgY29uc3QgY2hhciAqKmRlc2MgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJhbnNsYXRlIG1kX3R5cGUgaW50byBoYXNoIGFsZ29yaXRobSBPSUQKKyAqCisgKiBccGFyYW0gbWRfYWxnICAgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtCisgKiBccGFyYW0gb2lkICAgICAgcGxhY2UgdG8gc3RvcmUgQVNOLjEgT0lEIHN0cmluZyBwb2ludGVyCisgKiBccGFyYW0gb2xlbiAgICAgbGVuZ3RoIG9mIHRoZSBPSUQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisgKi8KK2ludCBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X21kKCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsIGNvbnN0IGNoYXIgKipvaWQsIHNpemVfdCAqb2xlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJhbnNsYXRlIGVuY3J5cHRpb24gYWxnb3JpdGhtIE9JRCBpbnRvIGNpcGhlcl90eXBlCisgKgorICogXHBhcmFtIG9pZCAgICAgICAgICAgT0lEIHRvIHVzZQorICogXHBhcmFtIGNpcGhlcl9hbGcgICAgcGxhY2UgdG8gc3RvcmUgY2lwaGVyIGFsZ29yaXRobQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKyAqLworaW50IG1iZWR0bHNfb2lkX2dldF9jaXBoZXJfYWxnKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpvaWQsIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCAqY2lwaGVyX2FsZyApOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMTJfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyYW5zbGF0ZSBQS0NTIzEyIFBCRSBhbGdvcml0aG0gT0lEIGludG8gbWRfdHlwZSBhbmQKKyAqICAgICAgICAgICAgICAgICBjaXBoZXJfdHlwZQorICoKKyAqIFxwYXJhbSBvaWQgICAgICAgICAgIE9JRCB0byB1c2UKKyAqIFxwYXJhbSBtZF9hbGcgICAgICAgIHBsYWNlIHRvIHN0b3JlIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobQorICogXHBhcmFtIGNpcGhlcl9hbGcgICAgcGxhY2UgdG8gc3RvcmUgY2lwaGVyIGFsZ29yaXRobQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKyAqLworaW50IG1iZWR0bHNfb2lkX2dldF9wa2NzMTJfcGJlX2FsZyggY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqb2lkLCBtYmVkdGxzX21kX3R5cGVfdCAqbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCAqY2lwaGVyX2FsZyApOworI2VuZGlmIC8qIE1CRURUTFNfUEtDUzEyX0MgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIG9pZC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BhZGxvY2suaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGFkbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNDVhNWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BhZGxvY2suaApAQCAtMCwwICsxLDEwNyBAQAorLyoqCisgKiBcZmlsZSBwYWRsb2NrLmgKKyAqCisgKiBcYnJpZWYgVklBIFBhZExvY2sgQUNFIGZvciBIVyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gc3VwcG9ydGVkIGJ5IHNvbWUKKyAqICAgICAgICBwcm9jZXNzb3JzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfUEFETE9DS19ICisjZGVmaW5lIE1CRURUTFNfUEFETE9DS19ICisKKyNpbmNsdWRlICJhZXMuaCIKKworI2RlZmluZSBNQkVEVExTX0VSUl9QQURMT0NLX0RBVEFfTUlTQUxJR05FRCAgICAgICAgICAgICAgIC0weDAwMzAgIC8qKjwgSW5wdXQgZGF0YSBzaG91bGQgYmUgYWxpZ25lZC4gKi8KKworI2lmIGRlZmluZWQoX19oYXNfZmVhdHVyZSkKKyNpZiBfX2hhc19mZWF0dXJlKGFkZHJlc3Nfc2FuaXRpemVyKQorI2RlZmluZSBNQkVEVExTX0hBVkVfQVNBTgorI2VuZGlmCisjZW5kaWYKKworLyogU29tZSB2ZXJzaW9ucyBvZiBBU2FuIHJlc3VsdCBpbiBlcnJvcnMgYWJvdXQgbm90IGVub3VnaCByZWdpc3RlcnMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9BU00pICYmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19pMzg2X18pICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0hBVkVfQVNBTikKKworI2lmbmRlZiBNQkVEVExTX0hBVkVfWDg2CisjZGVmaW5lIE1CRURUTFNfSEFWRV9YODYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgTUJFRFRMU19QQURMT0NLX1JORyAweDAwMEMKKyNkZWZpbmUgTUJFRFRMU19QQURMT0NLX0FDRSAweDAwQzAKKyNkZWZpbmUgTUJFRFRMU19QQURMT0NLX1BIRSAweDBDMDAKKyNkZWZpbmUgTUJFRFRMU19QQURMT0NLX1BNTSAweDMwMDAKKworI2RlZmluZSBNQkVEVExTX1BBRExPQ0tfQUxJR04xNih4KSAodWludDMyX3QgKikgKDE2ICsgKChpbnQzMl90KSB4ICYgfjE1KSkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBQYWRMb2NrIGRldGVjdGlvbiByb3V0aW5lCisgKgorICogXHBhcmFtIGZlYXR1cmUgIFRoZSBmZWF0dXJlIHRvIGRldGVjdAorICoKKyAqIFxyZXR1cm4gICAgICAgICAxIGlmIENQVSBoYXMgc3VwcG9ydCBmb3IgdGhlIGZlYXR1cmUsIDAgb3RoZXJ3aXNlCisgKi8KK2ludCBtYmVkdGxzX3BhZGxvY2tfaGFzX3N1cHBvcnQoIGludCBmZWF0dXJlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBhZExvY2sgQUVTLUVDQiBibG9jayBlbihkZSljcnlwdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQUVTX0VOQ1JZUFQgb3IgTUJFRFRMU19BRVNfREVDUllQVAorICogXHBhcmFtIGlucHV0ICAgIDE2LWJ5dGUgaW5wdXQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICAxNi1ieXRlIG91dHB1dCBibG9jaworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3MsIDEgaWYgb3BlcmF0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19wYWRsb2NrX3hjcnlwdGVjYiggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQYWRMb2NrIEFFUy1DQkMgYnVmZmVyIGVuKGRlKWNyeXB0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgIEFFUyBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19BRVNfRU5DUllQVCBvciBNQkVEVExTX0FFU19ERUNSWVBUCisgKiBccGFyYW0gbGVuZ3RoICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaXYgICAgICAgaW5pdGlhbGl6YXRpb24gdmVjdG9yICh1cGRhdGVkIGFmdGVyIHVzZSkKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIGJ1ZmZlciBob2xkaW5nIHRoZSBvdXRwdXQgZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3MsIDEgaWYgb3BlcmF0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19wYWRsb2NrX3hjcnlwdGNiYyggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdlsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIEhBVkVfWDg2ICAqLworCisjZW5kaWYgLyogcGFkbG9jay5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BlbS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGRjMDJkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wZW0uaApAQCAtMCwwICsxLDEyOSBAQAorLyoqCisgKiBcZmlsZSBwZW0uaAorICoKKyAqIFxicmllZiBQcml2YWN5IEVuaGFuY2VkIE1haWwgKFBFTSkgZGVjb2RpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19QRU1fSAorI2RlZmluZSBNQkVEVExTX1BFTV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyoqCisgKiBcbmFtZSBQRU0gRXJyb3IgY29kZXMKKyAqIFRoZXNlIGVycm9yIGNvZGVzIGFyZSByZXR1cm5lZCBpbiBjYXNlIG9mIGVycm9ycyByZWFkaW5nIHRoZQorICogUEVNIGRhdGEuCisgKiBceworICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgICAgICAgICAgLTB4MTA4MCAgLyoqPCBObyBQRU0gaGVhZGVyIG9yIGZvb3RlciBmb3VuZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfREFUQSAgICAgICAgICAgICAgICAgICAgICAtMHgxMTAwICAvKio8IFBFTSBzdHJpbmcgaXMgbm90IGFzIGV4cGVjdGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QRU1fQUxMT0NfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgIC0weDExODAgIC8qKjwgRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfRU5DX0lWICAgICAgICAgICAgICAgICAgICAtMHgxMjAwICAvKio8IFJTQSBJViBpcyBub3QgaW4gaGV4LWZvcm1hdC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEVNX1VOS05PV05fRU5DX0FMRyAgICAgICAgICAgICAgICAgICAtMHgxMjgwICAvKio8IFVuc3VwcG9ydGVkIGtleSBlbmNyeXB0aW9uIGFsZ29yaXRobS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEVNX1BBU1NXT1JEX1JFUVVJUkVEICAgICAgICAgICAgICAgICAtMHgxMzAwICAvKio8IFByaXZhdGUga2V5IHBhc3N3b3JkIGNhbid0IGJlIGVtcHR5LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfTUlTTUFUQ0ggICAgICAgICAgICAgICAgIC0weDEzODAgIC8qKjwgR2l2ZW4gcHJpdmF0ZSBrZXkgcGFzc3dvcmQgZG9lcyBub3QgYWxsb3cgZm9yIGNvcnJlY3QgZGVjcnlwdGlvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEVNX0ZFQVRVUkVfVU5BVkFJTEFCTEUgICAgICAgICAgICAgICAtMHgxNDAwICAvKio8IFVuYXZhaWxhYmxlIGZlYXR1cmUsIGUuZy4gaGFzaGluZy9lbmNyeXB0aW9uIGNvbWJpbmF0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QRU1fQkFEX0lOUFVUX0RBVEEgICAgICAgICAgICAgICAgICAgIC0weDE0ODAgIC8qKjwgQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24uICovCisvKiBcfSBuYW1lICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKy8qKgorICogXGJyaWVmICAgICAgIFBFTSBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsgICAgIC8qITwgYnVmZmVyIGZvciBkZWNvZGVkIGRhdGEgICAgICAgICAgICAgKi8KKyAgICBzaXplX3QgYnVmbGVuOyAgICAgICAgICAvKiE8IGxlbmd0aCBvZiB0aGUgYnVmZmVyICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciAqaW5mbzsgICAgLyohPCBidWZmZXIgZm9yIGV4dHJhIGhlYWRlciBpbmZvcm1hdGlvbiAqLworfQorbWJlZHRsc19wZW1fY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgUEVNIGNvbnRleHQgc2V0dXAKKyAqCisgKiBccGFyYW0gY3R4ICAgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfcGVtX2luaXQoIG1iZWR0bHNfcGVtX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICBSZWFkIGEgYnVmZmVyIGZvciBQRU0gaW5mb3JtYXRpb24gYW5kIHN0b3JlIHRoZSByZXN1bHRpbmcKKyAqICAgICAgICAgICAgICBkYXRhIGludG8gdGhlIHNwZWNpZmllZCBjb250ZXh0IGJ1ZmZlcnMuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGhlYWRlciAgICBoZWFkZXIgc3RyaW5nIHRvIHNlZWsgYW5kIGV4cGVjdAorICogXHBhcmFtIGZvb3RlciAgICBmb290ZXIgc3RyaW5nIHRvIHNlZWsgYW5kIGV4cGVjdAorICogXHBhcmFtIGRhdGEgICAgICBzb3VyY2UgZGF0YSB0byBsb29rIGluIChtdXN0IGJlIG51bC10ZXJtaW5hdGVkKQorICogXHBhcmFtIHB3ZCAgICAgICBwYXNzd29yZCBmb3IgZGVjcnlwdGlvbiAoY2FuIGJlIE5VTEwpCisgKiBccGFyYW0gcHdkbGVuICAgIGxlbmd0aCBvZiBwYXNzd29yZAorICogXHBhcmFtIHVzZV9sZW4gICBkZXN0aW5hdGlvbiBmb3IgdG90YWwgbGVuZ3RoIHVzZWQgKHNldCBhZnRlciBoZWFkZXIgaXMKKyAqICAgICAgICAgICAgICAgICAgY29ycmVjdGx5IHJlYWQsIHNvIHVubGVzcyB5b3UgZ2V0CisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1BFTV9CQURfSU5QVVRfREFUQSBvcgorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5ULCB1c2VfbGVuIGlzCisgKiAgICAgICAgICAgICAgICAgIHRoZSBsZW5ndGggdG8gc2tpcCkKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIEF0dGVtcHRzIHRvIGNoZWNrIHBhc3N3b3JkIGNvcnJlY3RuZXNzIGJ5IHZlcmlmeWluZyBpZgorICogICAgICAgICAgICAgICAgICB0aGUgZGVjcnlwdGVkIHRleHQgc3RhcnRzIHdpdGggYW4gQVNOLjEgc2VxdWVuY2Ugb2YKKyAqICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgbGVuZ3RoCisgKgorICogXHJldHVybiAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIG9yIGEgc3BlY2lmaWMgUEVNIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCBtYmVkdGxzX3BlbV9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmhlYWRlciwgY29uc3QgY2hhciAqZm9vdGVyLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwd2RsZW4sIHNpemVfdCAqdXNlX2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICBQRU0gY29udGV4dCBtZW1vcnkgZnJlZWluZworICoKKyAqIFxwYXJhbSBjdHggICBjb250ZXh0IHRvIGJlIGZyZWVkCisgKi8KK3ZvaWQgbWJlZHRsc19wZW1fZnJlZSggbWJlZHRsc19wZW1fY29udGV4dCAqY3R4ICk7CisjZW5kaWYgLyogTUJFRFRMU19QRU1fUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGEgYnVmZmVyIG9mIFBFTSBpbmZvcm1hdGlvbiBmcm9tIGEgREVSIGVuY29kZWQKKyAqICAgICAgICAgICAgICAgICAgYnVmZmVyLgorICoKKyAqIFxwYXJhbSBoZWFkZXIgICAgaGVhZGVyIHN0cmluZyB0byB3cml0ZQorICogXHBhcmFtIGZvb3RlciAgICBmb290ZXIgc3RyaW5nIHRvIHdyaXRlCisgKiBccGFyYW0gZGVyX2RhdGEgIERFUiBkYXRhIHRvIHdyaXRlCisgKiBccGFyYW0gZGVyX2xlbiAgIGxlbmd0aCBvZiB0aGUgREVSIGRhdGEKKyAqIFxwYXJhbSBidWYgICAgICAgYnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gYnVmX2xlbiAgIGxlbmd0aCBvZiBvdXRwdXQgYnVmZmVyCisgKiBccGFyYW0gb2xlbiAgICAgIHRvdGFsIGxlbmd0aCB3cml0dGVuIC8gcmVxdWlyZWQgKGlmIGJ1Zl9sZW4gaXMgbm90IGVub3VnaCkKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgb24gc3VjY2Vzcywgb3IgYSBzcGVjaWZpYyBQRU0gb3IgQkFTRTY0IGVycm9yIGNvZGUuIE9uCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMIG9sZW4gaXMgdGhlIHJlcXVpcmVkCisgKiAgICAgICAgICAgICAgICAgIHNpemUuCisgKi8KK2ludCBtYmVkdGxzX3BlbV93cml0ZV9idWZmZXIoIGNvbnN0IGNoYXIgKmhlYWRlciwgY29uc3QgY2hhciAqZm9vdGVyLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlcl9kYXRhLCBzaXplX3QgZGVyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBzaXplX3QgKm9sZW4gKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9XUklURV9DICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBwZW0uaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9way5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9way5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZjliOWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BrLmgKQEAgLTAsMCArMSw2MTYgQEAKKy8qKgorICogXGZpbGUgcGsuaAorICoKKyAqIFxicmllZiBQdWJsaWMgS2V5IGFic3RyYWN0aW9uIGxheWVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZm5kZWYgTUJFRFRMU19QS19ICisjZGVmaW5lIE1CRURUTFNfUEtfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgIm1kLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisjaW5jbHVkZSAicnNhLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyNpbmNsdWRlICJlY3AuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisjaW5jbHVkZSAiZWNkc2EuaCIKKyNlbmRpZgorCisjaWYgKCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgfHwgZGVmaW5lZChfTVNDX1ZFUikgKSAmJiBcCisgICAgIWRlZmluZWQoaW5saW5lKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUgaW5saW5lIF9faW5saW5lCisjZW5kaWYKKworI2RlZmluZSBNQkVEVExTX0VSUl9QS19BTExPQ19GQUlMRUQgICAgICAgIC0weDNGODAgIC8qKjwgTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENIICAgICAgIC0weDNGMDAgIC8qKjwgVHlwZSBtaXNtYXRjaCwgZWcgYXR0ZW1wdCB0byBlbmNyeXB0IHdpdGggYW4gRUNEU0Ega2V5ICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBICAgICAgLTB4M0U4MCAgLyoqPCBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtfRklMRV9JT19FUlJPUiAgICAgICAtMHgzRTAwICAvKio8IFJlYWQvd3JpdGUgb2YgZmlsZSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX1ZFUlNJT04gLTB4M0Q4MCAgLyoqPCBVbnN1cHBvcnRlZCBrZXkgdmVyc2lvbiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgIC0weDNEMDAgIC8qKjwgSW52YWxpZCBrZXkgdGFnIG9yIHZhbHVlLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QS19VTktOT1dOX1BLX0FMRyAgICAgIC0weDNDODAgIC8qKjwgS2V5IGFsZ29yaXRobSBpcyB1bnN1cHBvcnRlZCAob25seSBSU0EgYW5kIEVDIGFyZSBzdXBwb3J0ZWQpLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QS19QQVNTV09SRF9SRVFVSVJFRCAgIC0weDNDMDAgIC8qKjwgUHJpdmF0ZSBrZXkgcGFzc3dvcmQgY2FuJ3QgYmUgZW1wdHkuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENIICAgLTB4M0I4MCAgLyoqPCBHaXZlbiBwcml2YXRlIGtleSBwYXNzd29yZCBkb2VzIG5vdCBhbGxvdyBmb3IgY29ycmVjdCBkZWNyeXB0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSAgICAgIC0weDNCMDAgIC8qKjwgVGhlIHB1YmtleSB0YWcgb3IgdmFsdWUgaXMgaW52YWxpZCAob25seSBSU0EgYW5kIEVDIGFyZSBzdXBwb3J0ZWQpLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QS19JTlZBTElEX0FMRyAgICAgICAgIC0weDNBODAgIC8qKjwgVGhlIGFsZ29yaXRobSB0YWcgb3IgdmFsdWUgaXMgaW52YWxpZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtfVU5LTk9XTl9OQU1FRF9DVVJWRSAtMHgzQTAwICAvKio8IEVsbGlwdGljIGN1cnZlIGlzIHVuc3VwcG9ydGVkIChvbmx5IE5JU1QgY3VydmVzIGFyZSBzdXBwb3J0ZWQpLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QS19GRUFUVVJFX1VOQVZBSUxBQkxFIC0weDM5ODAgIC8qKjwgVW5hdmFpbGFibGUgZmVhdHVyZSwgZS5nLiBSU0EgZGlzYWJsZWQgZm9yIFJTQSBrZXkuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX1NJR19MRU5fTUlTTUFUQ0ggICAgLTB4MzkwMCAgLyoqPCBUaGUgc2lnbmF0dXJlIGlzIHZhbGlkIGJ1dCBpdHMgbGVuZ3RoIGlzIGxlc3MgdGhhbiBleHBlY3RlZC4gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBQdWJsaWMga2V5IHR5cGVzCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgTUJFRFRMU19QS19OT05FPTAsCisgICAgTUJFRFRMU19QS19SU0EsCisgICAgTUJFRFRMU19QS19FQ0tFWSwKKyAgICBNQkVEVExTX1BLX0VDS0VZX0RILAorICAgIE1CRURUTFNfUEtfRUNEU0EsCisgICAgTUJFRFRMU19QS19SU0FfQUxULAorICAgIE1CRURUTFNfUEtfUlNBU1NBX1BTUywKK30gbWJlZHRsc19wa190eXBlX3Q7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBPcHRpb25zIGZvciBSU0FTU0EtUFNTIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uCisgKiAgICAgICAgICAgICAgICAgIFNlZSBcYyBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQoKQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIG1iZWR0bHNfbWRfdHlwZV90IG1nZjFfaGFzaF9pZDsKKyAgICBpbnQgZXhwZWN0ZWRfc2FsdF9sZW47CisKK30gbWJlZHRsc19wa19yc2Fzc2FfcHNzX29wdGlvbnM7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBUeXBlcyBmb3IgaW50ZXJmYWNpbmcgd2l0aCB0aGUgZGVidWcgbW9kdWxlCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIE1CRURUTFNfUEtfREVCVUdfTk9ORSA9IDAsCisgICAgTUJFRFRMU19QS19ERUJVR19NUEksCisgICAgTUJFRFRMU19QS19ERUJVR19FQ1AsCit9IG1iZWR0bHNfcGtfZGVidWdfdHlwZTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEl0ZW0gdG8gc2VuZCB0byB0aGUgZGVidWcgbW9kdWxlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbWJlZHRsc19wa19kZWJ1Z190eXBlIHR5cGU7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICB2b2lkICp2YWx1ZTsKK30gbWJlZHRsc19wa19kZWJ1Z19pdGVtOworCisvKiogTWF4aW11bSBudW1iZXIgb2YgaXRlbSBzZW5kIGZvciBkZWJ1Z2dpbmcsIHBsdXMgMSAqLworI2RlZmluZSBNQkVEVExTX1BLX0RFQlVHX01BWF9JVEVNUyAzCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBQdWJsaWMga2V5IGluZm9ybWF0aW9uIGFuZCBvcGVyYXRpb25zCisgKi8KK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfcGtfaW5mb190IG1iZWR0bHNfcGtfaW5mb190OworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUHVibGljIGtleSBjb250YWluZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBjb25zdCBtYmVkdGxzX3BrX2luZm9fdCAqICAgcGtfaW5mbzsgLyoqPCBQdWJsaWMga2V5IGluZm9ybWF0aW9ucyAgICAgICAgKi8KKyAgICB2b2lkICogICAgICAgICAgICAgICAgICAgICAgcGtfY3R4OyAgLyoqPCBVbmRlcmx5aW5nIHB1YmxpYyBrZXkgY29udGV4dCAgKi8KK30gbWJlZHRsc19wa19jb250ZXh0OworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorLyoqCisgKiBRdWljayBhY2Nlc3MgdG8gYW4gUlNBIGNvbnRleHQgaW5zaWRlIGEgUEsgY29udGV4dC4KKyAqCisgKiBcd2FybmluZyBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIFBLIGNvbnRleHQgYWN0dWFsbHkgaG9sZHMgYW4gUlNBIGNvbnRleHQKKyAqIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uIQorICovCitzdGF0aWMgaW5saW5lIG1iZWR0bHNfcnNhX2NvbnRleHQgKm1iZWR0bHNfcGtfcnNhKCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgcGsgKQoreworICAgIHJldHVybiggKG1iZWR0bHNfcnNhX2NvbnRleHQgKikgKHBrKS5wa19jdHggKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisvKioKKyAqIFF1aWNrIGFjY2VzcyB0byBhbiBFQyBjb250ZXh0IGluc2lkZSBhIFBLIGNvbnRleHQuCisgKgorICogXHdhcm5pbmcgWW91IG11c3QgbWFrZSBzdXJlIHRoZSBQSyBjb250ZXh0IGFjdHVhbGx5IGhvbGRzIGFuIEVDIGNvbnRleHQKKyAqIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uIQorICovCitzdGF0aWMgaW5saW5lIG1iZWR0bHNfZWNwX2tleXBhaXIgKm1iZWR0bHNfcGtfZWMoIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCBwayApCit7CisgICAgcmV0dXJuKCAobWJlZHRsc19lY3Bfa2V5cGFpciAqKSAocGspLnBrX2N0eCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgVHlwZXMgZm9yIFJTQS1hbHQgYWJzdHJhY3Rpb24KKyAqLwordHlwZWRlZiBpbnQgKCptYmVkdGxzX3BrX3JzYV9hbHRfZGVjcnlwdF9mdW5jKSggdm9pZCAqY3R4LCBpbnQgbW9kZSwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X21heF9sZW4gKTsKK3R5cGVkZWYgaW50ICgqbWJlZHRsc19wa19yc2FfYWx0X3NpZ25fZnVuYykoIHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHVuc2lnbmVkIGNoYXIgKnNpZyApOwordHlwZWRlZiBzaXplX3QgKCptYmVkdGxzX3BrX3JzYV9hbHRfa2V5X2xlbl9mdW5jKSggdm9pZCAqY3R4ICk7CisjZW5kaWYgLyogTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFJldHVybiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIFBLIHR5cGUKKyAqCisgKiBccGFyYW0gcGtfdHlwZSAgIFBLIHR5cGUgdG8gc2VhcmNoIGZvci4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIFRoZSBQSyBpbmZvIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHlwZSBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworY29uc3QgbWJlZHRsc19wa19pbmZvX3QgKm1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUoIG1iZWR0bHNfcGtfdHlwZV90IHBrX3R5cGUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEluaXRpYWxpemUgYSBtYmVkdGxzX3BrX2NvbnRleHQgKGFzIE5PTkUpCisgKi8KK3ZvaWQgbWJlZHRsc19wa19pbml0KCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRnJlZSBhIG1iZWR0bHNfcGtfY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfcGtfZnJlZSggbWJlZHRsc19wa19jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEluaXRpYWxpemUgYSBQSyBjb250ZXh0IHdpdGggdGhlIGluZm9ybWF0aW9uIGdpdmVuCisgKiAgICAgICAgICAgICAgICAgIGFuZCBhbGxvY2F0ZXMgdGhlIHR5cGUtc3BlY2lmaWMgUEsgc3ViY29udGV4dC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gaW5pdGlhbGl6ZS4gTXVzdCBiZSBlbXB0eSAodHlwZSBOT05FKS4KKyAqIFxwYXJhbSBpbmZvICAgICAgSW5mb3JtYXRpb24gdG8gdXNlCisgKgorICogXHJldHVybiAgICAgICAgICAwIG9uIHN1Y2Nlc3MsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBIG9uIGludmFsaWQgaW5wdXQsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1BLX0FMTE9DX0ZBSUxFRCBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCisgKgorICogXG5vdGUgICAgICAgICAgICBGb3IgY29udGV4dHMgaG9sZGluZyBhbiBSU0EtYWx0IGtleSwgdXNlCisgKiAgICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfcGtfc2V0dXBfcnNhX2FsdCgpIGluc3RlYWQuCisgKi8KK2ludCBtYmVkdGxzX3BrX3NldHVwKCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgY29uc3QgbWJlZHRsc19wa19pbmZvX3QgKmluZm8gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBhbiBSU0EtYWx0IGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gaW5pdGlhbGl6ZS4gTXVzdCBiZSBlbXB0eSAodHlwZSBOT05FKS4KKyAqIFxwYXJhbSBrZXkgICAgICAgUlNBIGtleSBwb2ludGVyCisgKiBccGFyYW0gZGVjcnlwdF9mdW5jICBEZWNyeXB0aW9uIGZ1bmN0aW9uCisgKiBccGFyYW0gc2lnbl9mdW5jICAgICBTaWduaW5nIGZ1bmN0aW9uCisgKiBccGFyYW0ga2V5X2xlbl9mdW5jICBGdW5jdGlvbiByZXR1cm5pbmcga2V5IGxlbmd0aCBpbiBieXRlcworICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSBpZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgY29udGV4dCB3YXNuJ3QgYWxyZWFkeSBpbml0aWFsaXplZCBhcyBSU0FfQUxULgorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiByZXBsYWNlcyBcYyBtYmVkdGxzX3BrX3NldHVwKCkgZm9yIFJTQS1hbHQuCisgKi8KK2ludCBtYmVkdGxzX3BrX3NldHVwX3JzYV9hbHQoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCB2b2lkICoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfcnNhX2FsdF9kZWNyeXB0X2Z1bmMgZGVjcnlwdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfcnNhX2FsdF9zaWduX2Z1bmMgc2lnbl9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfcnNhX2FsdF9rZXlfbGVuX2Z1bmMga2V5X2xlbl9mdW5jICk7CisjZW5kaWYgLyogTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdldCB0aGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB1bmRlcmx5aW5nIGtleQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byB1c2UKKyAqCisgKiBccmV0dXJuICAgICAgICAgIEtleSBzaXplIGluIGJpdHMsIG9yIDAgb24gZXJyb3IKKyAqLworc2l6ZV90IG1iZWR0bHNfcGtfZ2V0X2JpdGxlbiggY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdldCB0aGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSB1bmRlcmx5aW5nIGtleQorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIHVzZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgS2V5IGxlbmd0aCBpbiBieXRlcywgb3IgMCBvbiBlcnJvcgorICovCitzdGF0aWMgaW5saW5lIHNpemVfdCBtYmVkdGxzX3BrX2dldF9sZW4oIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqY3R4ICkKK3sKKyAgICByZXR1cm4oICggbWJlZHRsc19wa19nZXRfYml0bGVuKCBjdHggKSArIDcgKSAvIDggKTsKK30KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFRlbGwgaWYgYSBjb250ZXh0IGNhbiBkbyB0aGUgb3BlcmF0aW9uIGdpdmVuIGJ5IHR5cGUKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gdGVzdAorICogXHBhcmFtIHR5cGUgICAgICBUYXJnZXQgdHlwZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBjb250ZXh0IGNhbid0IGRvIHRoZSBvcGVyYXRpb25zLAorICogICAgICAgICAgICAgICAgICAxIG90aGVyd2lzZS4KKyAqLworaW50IG1iZWR0bHNfcGtfY2FuX2RvKCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgbWJlZHRsc19wa190eXBlX3QgdHlwZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgVmVyaWZ5IHNpZ25hdHVyZSAoaW5jbHVkaW5nIHBhZGRpbmcgaWYgcmVsZXZhbnQpLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgUEsgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBtZF9hbGcgICAgSGFzaCBhbGdvcml0aG0gdXNlZCAoc2VlIG5vdGVzKQorICogXHBhcmFtIGhhc2ggICAgICBIYXNoIG9mIHRoZSBtZXNzYWdlIHRvIHNpZ24KKyAqIFxwYXJhbSBoYXNoX2xlbiAgSGFzaCBsZW5ndGggb3IgMCAoc2VlIG5vdGVzKQorICogXHBhcmFtIHNpZyAgICAgICBTaWduYXR1cmUgdG8gdmVyaWZ5CisgKiBccGFyYW0gc2lnX2xlbiAgIFNpZ25hdHVyZSBsZW5ndGgKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgb24gc3VjY2VzcyAoc2lnbmF0dXJlIGlzIHZhbGlkKSwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfUEtfU0lHX0xFTl9NSVNNQVRDSCBpZiB0aGUgc2lnbmF0dXJlIGlzCisgKiAgICAgICAgICAgICAgICAgIHZhbGlkIGJ1dCBpdHMgYWN0dWFsIGxlbmd0aCBpcyBsZXNzIHRoYW4gc2lnX2xlbiwKKyAqICAgICAgICAgICAgICAgICAgb3IgYSBzcGVjaWZpYyBlcnJvciBjb2RlLgorICoKKyAqIFxub3RlICAgICAgICAgICAgRm9yIFJTQSBrZXlzLCB0aGUgZGVmYXVsdCBwYWRkaW5nIHR5cGUgaXMgUEtDUyMxIHYxLjUuCisgKiAgICAgICAgICAgICAgICAgIFVzZSBcYyBtYmVkdGxzX3BrX3ZlcmlmeV9leHQoIE1CRURUTFNfUEtfUlNBU1NBX1BTUywgLi4uICkKKyAqICAgICAgICAgICAgICAgICAgdG8gdmVyaWZ5IFJTQVNTQV9QU1Mgc2lnbmF0dXJlcy4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIElmIGhhc2hfbGVuIGlzIDAsIHRoZW4gdGhlIGxlbmd0aCBhc3NvY2lhdGVkIHdpdGggbWRfYWxnCisgKiAgICAgICAgICAgICAgICAgIGlzIHVzZWQgaW5zdGVhZCwgb3IgYW4gZXJyb3IgcmV0dXJuZWQgaWYgaXQgaXMgaW52YWxpZC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIG1kX2FsZyBtYXkgYmUgTUJFRFRMU19NRF9OT05FLCBvbmx5IGlmIGhhc2hfbGVuICE9IDAKKyAqLworaW50IG1iZWR0bHNfcGtfdmVyaWZ5KCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnX2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgVmVyaWZ5IHNpZ25hdHVyZSwgd2l0aCBvcHRpb25zLgorICogICAgICAgICAgICAgICAgICAoSW5jbHVkZXMgdmVyaWZpY2F0aW9uIG9mIHRoZSBwYWRkaW5nIGRlcGVuZGluZyBvbiB0eXBlLikKKyAqCisgKiBccGFyYW0gdHlwZSAgICAgIFNpZ25hdHVyZSB0eXBlIChpbmMuIHBvc3NpYmxlIHBhZGRpbmcgdHlwZSkgdG8gdmVyaWZ5CisgKiBccGFyYW0gb3B0aW9ucyAgIFBvaW50ZXIgdG8gdHlwZS1zcGVjaWZpYyBvcHRpb25zLCBvciBOVUxMCisgKiBccGFyYW0gY3R4ICAgICAgIFBLIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gbWRfYWxnICAgIEhhc2ggYWxnb3JpdGhtIHVzZWQgKHNlZSBub3RlcykKKyAqIFxwYXJhbSBoYXNoICAgICAgSGFzaCBvZiB0aGUgbWVzc2FnZSB0byBzaWduCisgKiBccGFyYW0gaGFzaF9sZW4gIEhhc2ggbGVuZ3RoIG9yIDAgKHNlZSBub3RlcykKKyAqIFxwYXJhbSBzaWcgICAgICAgU2lnbmF0dXJlIHRvIHZlcmlmeQorICogXHBhcmFtIHNpZ19sZW4gICBTaWduYXR1cmUgbGVuZ3RoCisgKgorICogXHJldHVybiAgICAgICAgICAwIG9uIHN1Y2Nlc3MgKHNpZ25hdHVyZSBpcyB2YWxpZCksCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0ggaWYgdGhlIFBLIGNvbnRleHQgY2FuJ3QgYmUKKyAqICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgdGhpcyB0eXBlIG9mIHNpZ25hdHVyZXMsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1BLX1NJR19MRU5fTUlTTUFUQ0ggaWYgdGhlIHNpZ25hdHVyZSBpcworICogICAgICAgICAgICAgICAgICB2YWxpZCBidXQgaXRzIGFjdHVhbCBsZW5ndGggaXMgbGVzcyB0aGFuIHNpZ19sZW4sCisgKiAgICAgICAgICAgICAgICAgIG9yIGEgc3BlY2lmaWMgZXJyb3IgY29kZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIElmIGhhc2hfbGVuIGlzIDAsIHRoZW4gdGhlIGxlbmd0aCBhc3NvY2lhdGVkIHdpdGggbWRfYWxnCisgKiAgICAgICAgICAgICAgICAgIGlzIHVzZWQgaW5zdGVhZCwgb3IgYW4gZXJyb3IgcmV0dXJuZWQgaWYgaXQgaXMgaW52YWxpZC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIG1kX2FsZyBtYXkgYmUgTUJFRFRMU19NRF9OT05FLCBvbmx5IGlmIGhhc2hfbGVuICE9IDAKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIElmIHR5cGUgaXMgTUJFRFRMU19QS19SU0FTU0FfUFNTLCB0aGVuIG9wdGlvbnMgbXVzdCBwb2ludAorICogICAgICAgICAgICAgICAgICB0byBhIG1iZWR0bHNfcGtfcnNhc3NhX3Bzc19vcHRpb25zIHN0cnVjdHVyZSwKKyAqICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGl0IG11c3QgYmUgTlVMTC4KKyAqLworaW50IG1iZWR0bHNfcGtfdmVyaWZ5X2V4dCggbWJlZHRsc19wa190eXBlX3QgdHlwZSwgY29uc3Qgdm9pZCAqb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBoYXNoX2xlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBNYWtlIHNpZ25hdHVyZSwgaW5jbHVkaW5nIHBhZGRpbmcgaWYgcmVsZXZhbnQuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBQSyBjb250ZXh0IHRvIHVzZSAtIG11c3QgaG9sZCBhIHByaXZhdGUga2V5CisgKiBccGFyYW0gbWRfYWxnICAgIEhhc2ggYWxnb3JpdGhtIHVzZWQgKHNlZSBub3RlcykKKyAqIFxwYXJhbSBoYXNoICAgICAgSGFzaCBvZiB0aGUgbWVzc2FnZSB0byBzaWduCisgKiBccGFyYW0gaGFzaF9sZW4gIEhhc2ggbGVuZ3RoIG9yIDAgKHNlZSBub3RlcykKKyAqIFxwYXJhbSBzaWcgICAgICAgUGxhY2UgdG8gd3JpdGUgdGhlIHNpZ25hdHVyZQorICogXHBhcmFtIHNpZ19sZW4gICBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbgorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBhIHNwZWNpZmljIGVycm9yIGNvZGUuCisgKgorICogXG5vdGUgICAgICAgICAgICBGb3IgUlNBIGtleXMsIHRoZSBkZWZhdWx0IHBhZGRpbmcgdHlwZSBpcyBQS0NTIzEgdjEuNS4KKyAqICAgICAgICAgICAgICAgICAgVGhlcmUgaXMgbm8gaW50ZXJmYWNlIGluIHRoZSBQSyBtb2R1bGUgdG8gbWFrZSBSU0FTU0EtUFNTCisgKiAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZXMgeWV0LgorICoKKyAqIFxub3RlICAgICAgICAgICAgSWYgaGFzaF9sZW4gaXMgMCwgdGhlbiB0aGUgbGVuZ3RoIGFzc29jaWF0ZWQgd2l0aCBtZF9hbGcKKyAqICAgICAgICAgICAgICAgICAgaXMgdXNlZCBpbnN0ZWFkLCBvciBhbiBlcnJvciByZXR1cm5lZCBpZiBpdCBpcyBpbnZhbGlkLgorICoKKyAqIFxub3RlICAgICAgICAgICAgRm9yIFJTQSwgbWRfYWxnIG1heSBiZSBNQkVEVExTX01EX05PTkUgaWYgaGFzaF9sZW4gIT0gMC4KKyAqICAgICAgICAgICAgICAgICAgRm9yIEVDRFNBLCBtZF9hbGcgbWF5IG5ldmVyIGJlIE1CRURUTFNfTURfTk9ORS4KKyAqLworaW50IG1iZWR0bHNfcGtfc2lnbiggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ19sZW4sCisgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRGVjcnlwdCBtZXNzYWdlIChpbmNsdWRpbmcgcGFkZGluZyBpZiByZWxldmFudCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBQSyBjb250ZXh0IHRvIHVzZSAtIG11c3QgaG9sZCBhIHByaXZhdGUga2V5CisgKiBccGFyYW0gaW5wdXQgICAgIElucHV0IHRvIGRlY3J5cHQKKyAqIFxwYXJhbSBpbGVuICAgICAgSW5wdXQgc2l6ZQorICogXHBhcmFtIG91dHB1dCAgICBEZWNyeXB0ZWQgb3V0cHV0CisgKiBccGFyYW0gb2xlbiAgICAgIERlY3J5cHRlZCBtZXNzYWdlIGxlbmd0aAorICogXHBhcmFtIG9zaXplICAgICBTaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXG5vdGUgICAgICAgICAgICBGb3IgUlNBIGtleXMsIHRoZSBkZWZhdWx0IHBhZGRpbmcgdHlwZSBpcyBQS0NTIzEgdjEuNS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgb24gc3VjY2Vzcywgb3IgYSBzcGVjaWZpYyBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19wa19kZWNyeXB0KCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4sIHNpemVfdCBvc2l6ZSwKKyAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBFbmNyeXB0IG1lc3NhZ2UgKGluY2x1ZGluZyBwYWRkaW5nIGlmIHJlbGV2YW50KS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIFBLIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gaW5wdXQgICAgIE1lc3NhZ2UgdG8gZW5jcnlwdAorICogXHBhcmFtIGlsZW4gICAgICBNZXNzYWdlIHNpemUKKyAqIFxwYXJhbSBvdXRwdXQgICAgRW5jcnlwdGVkIG91dHB1dAorICogXHBhcmFtIG9sZW4gICAgICBFbmNyeXB0ZWQgb3V0cHV0IGxlbmd0aAorICogXHBhcmFtIG9zaXplICAgICBTaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXG5vdGUgICAgICAgICAgICBGb3IgUlNBIGtleXMsIHRoZSBkZWZhdWx0IHBhZGRpbmcgdHlwZSBpcyBQS0NTIzEgdjEuNS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgb24gc3VjY2Vzcywgb3IgYSBzcGVjaWZpYyBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19wa19lbmNyeXB0KCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4sIHNpemVfdCBvc2l6ZSwKKyAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDaGVjayBpZiBhIHB1YmxpYy1wcml2YXRlIHBhaXIgb2Yga2V5cyBtYXRjaGVzLgorICoKKyAqIFxwYXJhbSBwdWIgICAgICAgQ29udGV4dCBob2xkaW5nIGEgcHVibGljIGtleS4KKyAqIFxwYXJhbSBwcnYgICAgICAgQ29udGV4dCBob2xkaW5nIGEgcHJpdmF0ZSAoYW5kIHB1YmxpYykga2V5LgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBvbiBzdWNjZXNzIG9yIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBCisgKi8KK2ludCBtYmVkdGxzX3BrX2NoZWNrX3BhaXIoIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqcHViLCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKnBydiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRXhwb3J0IGRlYnVnIGluZm9ybWF0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGl0ZW1zICAgICBQbGFjZSB0byB3cml0ZSBkZWJ1ZyBpdGVtcworICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBvbiBzdWNjZXNzIG9yIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBCisgKi8KK2ludCBtYmVkdGxzX3BrX2RlYnVnKCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgbWJlZHRsc19wa19kZWJ1Z19pdGVtICppdGVtcyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQWNjZXNzIHRoZSB0eXBlIG5hbWUKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gdXNlCisgKgorICogXHJldHVybiAgICAgICAgICBUeXBlIG5hbWUgb24gc3VjY2Vzcywgb3IgImludmFsaWQgUEsiCisgKi8KK2NvbnN0IGNoYXIgKiBtYmVkdGxzX3BrX2dldF9uYW1lKCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2V0IHRoZSBrZXkgdHlwZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byB1c2UKKyAqCisgKiBccmV0dXJuICAgICAgICAgIFR5cGUgb24gc3VjY2Vzcywgb3IgTUJFRFRMU19QS19OT05FCisgKi8KK21iZWR0bHNfcGtfdHlwZV90IG1iZWR0bHNfcGtfZ2V0X3R5cGUoIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqY3R4ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykKKy8qKiBcaW5ncm91cCBwa19tb2R1bGUgKi8KKy8qKgorICogXGJyaWVmICAgICAgICAgICBQYXJzZSBhIHByaXZhdGUga2V5IGluIFBFTSBvciBERVIgZm9ybWF0CisgKgorICogXHBhcmFtIGN0eCAgICAgICBrZXkgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBrZXkgICAgICAgaW5wdXQgYnVmZmVyCisgKiBccGFyYW0ga2V5bGVuICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgICAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgZm9yIFBFTSBkYXRhKQorICogXHBhcmFtIHB3ZCAgICAgICBwYXNzd29yZCBmb3IgZGVjcnlwdGlvbiAob3B0aW9uYWwpCisgKiBccGFyYW0gcHdkbGVuICAgIHNpemUgb2YgdGhlIHBhc3N3b3JkCisgKgorICogXG5vdGUgICAgICAgICAgICBPbiBlbnRyeSwgY3R4IG11c3QgYmUgZW1wdHksIGVpdGhlciBmcmVzaGx5IGluaXRpYWxpc2VkCisgKiAgICAgICAgICAgICAgICAgIHdpdGggbWJlZHRsc19wa19pbml0KCkgb3IgcmVzZXQgd2l0aCBtYmVkdGxzX3BrX2ZyZWUoKS4gSWYgeW91IG5lZWQgYQorICogICAgICAgICAgICAgICAgICBzcGVjaWZpYyBrZXkgdHlwZSwgY2hlY2sgdGhlIHJlc3VsdCB3aXRoIG1iZWR0bHNfcGtfY2FuX2RvKCkuCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGUga2V5IGlzIGFsc28gY2hlY2tlZCBmb3IgY29ycmVjdG5lc3MuCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgUEsgb3IgUEVNIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcGtfcGFyc2Vfa2V5KCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgc2l6ZV90IHB3ZGxlbiApOworCisvKiogXGluZ3JvdXAgcGtfbW9kdWxlICovCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUGFyc2UgYSBwdWJsaWMga2V5IGluIFBFTSBvciBERVIgZm9ybWF0CisgKgorICogXHBhcmFtIGN0eCAgICAgICBrZXkgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBrZXkgICAgICAgaW5wdXQgYnVmZmVyCisgKiBccGFyYW0ga2V5bGVuICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgICAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgZm9yIFBFTSBkYXRhKQorICoKKyAqIFxub3RlICAgICAgICAgICAgT24gZW50cnksIGN0eCBtdXN0IGJlIGVtcHR5LCBlaXRoZXIgZnJlc2hseSBpbml0aWFsaXNlZAorICogICAgICAgICAgICAgICAgICB3aXRoIG1iZWR0bHNfcGtfaW5pdCgpIG9yIHJlc2V0IHdpdGggbWJlZHRsc19wa19mcmVlKCkuIElmIHlvdSBuZWVkIGEKKyAqICAgICAgICAgICAgICAgICAgc3BlY2lmaWMga2V5IHR5cGUsIGNoZWNrIHRoZSByZXN1bHQgd2l0aCBtYmVkdGxzX3BrX2Nhbl9kbygpLgorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhlIGtleSBpcyBhbHNvIGNoZWNrZWQgZm9yIGNvcnJlY3RuZXNzLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIFBLIG9yIFBFTSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXkoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWxlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoqIFxpbmdyb3VwIHBrX21vZHVsZSAqLworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIExvYWQgYW5kIHBhcnNlIGEgcHJpdmF0ZSBrZXkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIGtleSB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIHBhdGggICAgICBmaWxlbmFtZSB0byByZWFkIHRoZSBwcml2YXRlIGtleSBmcm9tCisgKiBccGFyYW0gcGFzc3dvcmQgIHBhc3N3b3JkIHRvIGRlY3J5cHQgdGhlIGZpbGUgKGNhbiBiZSBOVUxMKQorICoKKyAqIFxub3RlICAgICAgICAgICAgT24gZW50cnksIGN0eCBtdXN0IGJlIGVtcHR5LCBlaXRoZXIgZnJlc2hseSBpbml0aWFsaXNlZAorICogICAgICAgICAgICAgICAgICB3aXRoIG1iZWR0bHNfcGtfaW5pdCgpIG9yIHJlc2V0IHdpdGggbWJlZHRsc19wa19mcmVlKCkuIElmIHlvdSBuZWVkIGEKKyAqICAgICAgICAgICAgICAgICAgc3BlY2lmaWMga2V5IHR5cGUsIGNoZWNrIHRoZSByZXN1bHQgd2l0aCBtYmVkdGxzX3BrX2Nhbl9kbygpLgorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhlIGtleSBpcyBhbHNvIGNoZWNrZWQgZm9yIGNvcnJlY3RuZXNzLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIFBLIG9yIFBFTSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnBhc3N3b3JkICk7CisKKy8qKiBcaW5ncm91cCBwa19tb2R1bGUgKi8KKy8qKgorICogXGJyaWVmICAgICAgICAgICBMb2FkIGFuZCBwYXJzZSBhIHB1YmxpYyBrZXkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIGtleSB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIHBhdGggICAgICBmaWxlbmFtZSB0byByZWFkIHRoZSBwdWJsaWMga2V5IGZyb20KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIE9uIGVudHJ5LCBjdHggbXVzdCBiZSBlbXB0eSwgZWl0aGVyIGZyZXNobHkgaW5pdGlhbGlzZWQKKyAqICAgICAgICAgICAgICAgICAgd2l0aCBtYmVkdGxzX3BrX2luaXQoKSBvciByZXNldCB3aXRoIG1iZWR0bHNfcGtfZnJlZSgpLiBJZgorICogICAgICAgICAgICAgICAgICB5b3UgbmVlZCBhIHNwZWNpZmljIGtleSB0eXBlLCBjaGVjayB0aGUgcmVzdWx0IHdpdGgKKyAqICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19jYW5fZG8oKS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoZSBrZXkgaXMgYWxzbyBjaGVja2VkIGZvciBjb3JyZWN0bmVzcy4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBQSyBvciBQRU0gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGggKTsKKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisjZW5kaWYgLyogTUJFRFRMU19QS19QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfV1JJVEVfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIHByaXZhdGUga2V5IHRvIGEgUEtDUyMxIG9yIFNFQzEgREVSIHN0cnVjdHVyZQorICogICAgICAgICAgICAgICAgICBOb3RlOiBkYXRhIGlzIHdyaXR0ZW4gYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyISBVc2UgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSB0byBkZXRlcm1pbmUgd2hlcmUgeW91IHNob3VsZCBzdGFydAorICogICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgYnVmZmVyCisgKgorICogXHBhcmFtIGN0eCAgICAgICBwcml2YXRlIHRvIHdyaXRlIGF3YXkKKyAqIFxwYXJhbSBidWYgICAgICAgYnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgbGVuZ3RoIG9mIGRhdGEgd3JpdHRlbiBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljCisgKiAgICAgICAgICAgICAgICAgIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcGtfd3JpdGVfa2V5X2RlciggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGEgcHVibGljIGtleSB0byBhIFN1YmplY3RQdWJsaWNLZXlJbmZvIERFUiBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgTm90ZTogZGF0YSBpcyB3cml0dGVuIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciEgVXNlIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgdG8gZGV0ZXJtaW5lIHdoZXJlIHlvdSBzaG91bGQgc3RhcnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgcHVibGljIGtleSB0byB3cml0ZSBhd2F5CisgKiBccGFyYW0gYnVmICAgICAgIGJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIHNpemUgICAgICBzaXplIG9mIHRoZSBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIGxlbmd0aCBvZiBkYXRhIHdyaXR0ZW4gaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYworICogICAgICAgICAgICAgICAgICBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleV9kZXIoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBwdWJsaWMga2V5IHRvIGEgUEVNIHN0cmluZworICoKKyAqIFxwYXJhbSBjdHggICAgICAgcHVibGljIGtleSB0byB3cml0ZSBhd2F5CisgKiBccGFyYW0gYnVmICAgICAgIGJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIHNpemUgICAgICBzaXplIG9mIHRoZSBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleV9wZW0oIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIHByaXZhdGUga2V5IHRvIGEgUEtDUyMxIG9yIFNFQzEgUEVNIHN0cmluZworICoKKyAqIFxwYXJhbSBjdHggICAgICAgcHJpdmF0ZSB0byB3cml0ZSBhd2F5CisgKiBccGFyYW0gYnVmICAgICAgIGJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIHNpemUgICAgICBzaXplIG9mIHRoZSBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3BrX3dyaXRlX2tleV9wZW0oIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplICk7CisjZW5kaWYgLyogTUJFRFRMU19QRU1fV1JJVEVfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfUEtfV1JJVEVfQyAqLworCisvKgorICogV0FSTklORzogTG93LWxldmVsIGZ1bmN0aW9ucy4gWW91IHByb2JhYmx5IGRvIG5vdCB3YW50IHRvIHVzZSB0aGVzZSB1bmxlc3MKKyAqICAgICAgICAgIHlvdSBhcmUgY2VydGFpbiB5b3UgZG8gOykKKyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUGFyc2UgYSBTdWJqZWN0UHVibGljS2V5SW5mbyBERVIgc3RydWN0dXJlCisgKgorICogXHBhcmFtIHAgICAgICAgICB0aGUgcG9zaXRpb24gaW4gdGhlIEFTTi4xIGRhdGEKKyAqIFxwYXJhbSBlbmQgICAgICAgZW5kIG9mIHRoZSBidWZmZXIKKyAqIFxwYXJhbSBwayAgICAgICAgdGhlIGtleSB0byBmaWxsCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgUEsgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19wa19wYXJzZV9zdWJwdWJrZXkoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2NvbnRleHQgKnBrICk7CisjZW5kaWYgLyogTUJFRFRMU19QS19QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfV1JJVEVfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIHN1YmplY3RQdWJsaWNLZXkgdG8gQVNOLjEgZGF0YQorICogICAgICAgICAgICAgICAgICBOb3RlOiBmdW5jdGlvbiB3b3JrcyBiYWNrd2FyZHMgaW4gZGF0YSBidWZmZXIKKyAqCisgKiBccGFyYW0gcCAgICAgICAgIHJlZmVyZW5jZSB0byBjdXJyZW50IHBvc2l0aW9uIHBvaW50ZXIKKyAqIFxwYXJhbSBzdGFydCAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoZm9yIGJvdW5kcy1jaGVja2luZykKKyAqIFxwYXJhbSBrZXkgICAgICAgcHVibGljIGtleSB0byB3cml0ZSBhd2F5CisgKgorICogXHJldHVybiAgICAgICAgICB0aGUgbGVuZ3RoIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleSggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICprZXkgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BLX1dSSVRFX0MgKi8KKworLyoKKyAqIEludGVybmFsIG1vZHVsZSBmdW5jdGlvbnMuIFlvdSBwcm9iYWJseSBkbyBub3Qgd2FudCB0byB1c2UgdGhlc2UgdW5sZXNzIHlvdQorICoga25vdyB5b3UgZG8uCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCitpbnQgbWJlZHRsc19wa19sb2FkX2ZpbGUoIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgKipidWYsIHNpemVfdCAqbiApOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBNQkVEVExTX1BLX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGtfaW50ZXJuYWwuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGtfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQwZjIxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wa19pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioKKyAqIFxmaWxlIHBrLmgKKyAqCisgKiBcYnJpZWYgUHVibGljIEtleSBhYnN0cmFjdGlvbiBsYXllcjogd3JhcHBlciBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmbmRlZiBNQkVEVExTX1BLX1dSQVBfSAorI2RlZmluZSBNQkVEVExTX1BLX1dSQVBfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgInBrLmgiCisKK3N0cnVjdCBtYmVkdGxzX3BrX2luZm9fdAoreworICAgIC8qKiBQdWJsaWMga2V5IHR5cGUgKi8KKyAgICBtYmVkdGxzX3BrX3R5cGVfdCB0eXBlOworCisgICAgLyoqIFR5cGUgbmFtZSAqLworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgICAvKiogR2V0IGtleSBzaXplIGluIGJpdHMgKi8KKyAgICBzaXplX3QgKCpnZXRfYml0bGVuKSggY29uc3Qgdm9pZCAqICk7CisKKyAgICAvKiogVGVsbCBpZiB0aGUgY29udGV4dCBpbXBsZW1lbnRzIHRoaXMgdHlwZSAoZS5nLiBFQ0tFWSBjYW4gZG8gRUNEU0EpICovCisgICAgaW50ICgqY2FuX2RvKSggbWJlZHRsc19wa190eXBlX3QgdHlwZSApOworCisgICAgLyoqIFZlcmlmeSBzaWduYXR1cmUgKi8KKyAgICBpbnQgKCp2ZXJpZnlfZnVuYykoIHZvaWQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnX2xlbiApOworCisgICAgLyoqIE1ha2Ugc2lnbmF0dXJlICovCisgICAgaW50ICgqc2lnbl9mdW5jKSggdm9pZCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzaWdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisgICAgLyoqIERlY3J5cHQgbWVzc2FnZSAqLworICAgIGludCAoKmRlY3J5cHRfZnVuYykoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuLCBzaXplX3Qgb3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKyAgICAvKiogRW5jcnlwdCBtZXNzYWdlICovCisgICAgaW50ICgqZW5jcnlwdF9mdW5jKSggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4sIHNpemVfdCBvc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworICAgIC8qKiBDaGVjayBwdWJsaWMtcHJpdmF0ZSBrZXkgcGFpciAqLworICAgIGludCAoKmNoZWNrX3BhaXJfZnVuYykoIGNvbnN0IHZvaWQgKnB1YiwgY29uc3Qgdm9pZCAqcHJ2ICk7CisKKyAgICAvKiogQWxsb2NhdGUgYSBuZXcgY29udGV4dCAqLworICAgIHZvaWQgKiAoKmN0eF9hbGxvY19mdW5jKSggdm9pZCApOworCisgICAgLyoqIEZyZWUgdGhlIGdpdmVuIGNvbnRleHQgKi8KKyAgICB2b2lkICgqY3R4X2ZyZWVfZnVuYykoIHZvaWQgKmN0eCApOworCisgICAgLyoqIEludGVyZmFjZSB3aXRoIHRoZSBkZWJ1ZyBtb2R1bGUgKi8KKyAgICB2b2lkICgqZGVidWdfZnVuYykoIGNvbnN0IHZvaWQgKmN0eCwgbWJlZHRsc19wa19kZWJ1Z19pdGVtICppdGVtcyApOworCit9OworI2lmIGRlZmluZWQoTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQpCisvKiBDb250YWluZXIgZm9yIFJTQS1hbHQgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdm9pZCAqa2V5OworICAgIG1iZWR0bHNfcGtfcnNhX2FsdF9kZWNyeXB0X2Z1bmMgZGVjcnlwdF9mdW5jOworICAgIG1iZWR0bHNfcGtfcnNhX2FsdF9zaWduX2Z1bmMgc2lnbl9mdW5jOworICAgIG1iZWR0bHNfcGtfcnNhX2FsdF9rZXlfbGVuX2Z1bmMga2V5X2xlbl9mdW5jOworfSBtYmVkdGxzX3JzYV9hbHRfY29udGV4dDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorZXh0ZXJuIGNvbnN0IG1iZWR0bHNfcGtfaW5mb190IG1iZWR0bHNfcnNhX2luZm87CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKK2V4dGVybiBjb25zdCBtYmVkdGxzX3BrX2luZm9fdCBtYmVkdGxzX2Vja2V5X2luZm87CitleHRlcm4gY29uc3QgbWJlZHRsc19wa19pbmZvX3QgbWJlZHRsc19lY2tleWRoX2luZm87CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorZXh0ZXJuIGNvbnN0IG1iZWR0bHNfcGtfaW5mb190IG1iZWR0bHNfZWNkc2FfaW5mbzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCkKK2V4dGVybiBjb25zdCBtYmVkdGxzX3BrX2luZm9fdCBtYmVkdGxzX3JzYV9hbHRfaW5mbzsKKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19QS19XUkFQX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGtjczExLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BrY3MxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlODg5MjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BrY3MxMS5oCkBAIC0wLDAgKzEsMTczIEBACisvKioKKyAqIFxmaWxlIHBrY3MxMS5oCisgKgorICogXGJyaWVmIFdyYXBwZXIgZm9yIFBLQ1MjMTEgbGlicmFyeSBsaWJwa2NzMTEtaGVscGVyCisgKgorICogXGF1dGhvciBBZHJpYWFuIGRlIEpvbmcgPGRlam9uZ0Bmb3gtaXQuY29tPgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1BLQ1MxMV9ICisjZGVmaW5lIE1CRURUTFNfUEtDUzExX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzExX0MpCisKKyNpbmNsdWRlICJ4NTA5X2NydC5oIgorCisjaW5jbHVkZSA8cGtjczExLWhlbHBlci0xLjAvcGtjczExaC1jZXJ0aWZpY2F0ZS5oPgorCisjaWYgKCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgfHwgZGVmaW5lZChfTVNDX1ZFUikgKSAmJiBcCisgICAgIWRlZmluZWQoaW5saW5lKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUgaW5saW5lIF9faW5saW5lCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIENvbnRleHQgZm9yIFBLQ1MgIzExIHByaXZhdGUga2V5cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBwa2NzMTFoX2NlcnRpZmljYXRlX3QgcGtjczExaF9jZXJ0OworICAgICAgICBpbnQgbGVuOworfSBtYmVkdGxzX3BrY3MxMV9jb250ZXh0OworCisvKioKKyAqIEluaXRpYWxpemUgYSBtYmVkdGxzX3BrY3MxMV9jb250ZXh0LgorICogKEp1c3QgbWFraW5nIG1lbW9yeSByZWZlcmVuY2VzIHZhbGlkLikKKyAqLwordm9pZCBtYmVkdGxzX3BrY3MxMV9pbml0KCBtYmVkdGxzX3BrY3MxMV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBGaWxsIGluIGEgbWJlZCBUTFMgY2VydGlmaWNhdGUsIGJhc2VkIG9uIHRoZSBnaXZlbiBQS0NTMTEgaGVscGVyIGNlcnRpZmljYXRlLgorICoKKyAqIFxwYXJhbSBjZXJ0ICAgICAgICAgIFguNTA5IGNlcnRpZmljYXRlIHRvIGZpbGwKKyAqIFxwYXJhbSBwa2NzMTFoX2NlcnQgIFBLQ1MgIzExIGhlbHBlciBjZXJ0aWZpY2F0ZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IG1iZWR0bHNfcGtjczExX3g1MDlfY2VydF9iaW5kKCBtYmVkdGxzX3g1MDlfY3J0ICpjZXJ0LCBwa2NzMTFoX2NlcnRpZmljYXRlX3QgcGtjczExaF9jZXJ0ICk7CisKKy8qKgorICogU2V0IHVwIGEgbWJlZHRsc19wa2NzMTFfY29udGV4dCBzdG9yaW5nIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZS4gTm90ZSB0aGF0IHRoZQorICogbWJlZHRsc19wa2NzMTFfY29udGV4dCB3aWxsIHRha2Ugb3ZlciBjb250cm9sIG9mIHRoZSBjZXJ0aWZpY2F0ZSwgZnJlZWluZyBpdCB3aGVuCisgKiBkb25lLgorICoKKyAqIFxwYXJhbSBwcml2X2tleSAgICAgIFByaXZhdGUga2V5IHN0cnVjdHVyZSB0byBmaWxsLgorICogXHBhcmFtIHBrY3MxMV9jZXJ0ICAgUEtDUyAjMTEgaGVscGVyIGNlcnRpZmljYXRlCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBvbiBzdWNjZXNzCisgKi8KK2ludCBtYmVkdGxzX3BrY3MxMV9wcml2X2tleV9iaW5kKCBtYmVkdGxzX3BrY3MxMV9jb250ZXh0ICpwcml2X2tleSwKKyAgICAgICAgcGtjczExaF9jZXJ0aWZpY2F0ZV90IHBrY3MxMV9jZXJ0ICk7CisKKy8qKgorICogRnJlZSB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIHByaXZhdGUga2V5IGNvbnRleHQuIE5vdGUgdGhhdCB0aGUgc3RydWN0dXJlCisgKiBpdHNlbGYgaXMgbm90IGZyZWVkLgorICoKKyAqIFxwYXJhbSBwcml2X2tleSAgICAgIFByaXZhdGUga2V5IHN0cnVjdHVyZSB0byBjbGVhbnVwCisgKi8KK3ZvaWQgbWJlZHRsc19wa2NzMTFfcHJpdl9rZXlfZnJlZSggbWJlZHRsc19wa2NzMTFfY29udGV4dCAqcHJpdl9rZXkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRG8gYW4gUlNBIHByaXZhdGUga2V5IGRlY3J5cHQsIHRoZW4gcmVtb3ZlIHRoZSBtZXNzYWdlCisgKiAgICAgICAgICAgICAgICAgcGFkZGluZworICoKKyAqIFxwYXJhbSBjdHggICAgICBQS0NTICMxMSBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgbXVzdCBiZSBNQkVEVExTX1JTQV9QUklWQVRFLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHJzYS5jJ3Mgc2lnbmF0dXJlCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGVuY3J5cHRlZCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIHRoYXQgd2lsbCBob2xkIHRoZSBwbGFpbnRleHQKKyAqIFxwYXJhbSBvbGVuICAgICB3aWxsIGNvbnRhaW4gdGhlIHBsYWludGV4dCBsZW5ndGgKKyAqIFxwYXJhbSBvdXRwdXRfbWF4X2xlbiAgICBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgb3V0cHV0IGJ1ZmZlciBtdXN0IGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplCisgKiAgICAgICAgICAgICAgICAgb2YgY3R4LT5OIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpIG90aGVyd2lzZQorICogICAgICAgICAgICAgICAgIGFuIGVycm9yIGlzIHRocm93bi4KKyAqLworaW50IG1iZWR0bHNfcGtjczExX2RlY3J5cHQoIG1iZWR0bHNfcGtjczExX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG91dHB1dF9tYXhfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIERvIGEgcHJpdmF0ZSBSU0EgdG8gc2lnbiBhIG1lc3NhZ2UgZGlnZXN0CisgKgorICogXHBhcmFtIGN0eCAgICAgIFBLQ1MgIzExIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBtdXN0IGJlIE1CRURUTFNfUlNBX1BSSVZBVEUsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggcnNhLmMncyBzaWduYXR1cmUKKyAqIFxwYXJhbSBtZF9hbGcgICBhIE1CRURUTFNfTURfWFhYICh1c2UgTUJFRFRMU19NRF9OT05FIGZvciBzaWduaW5nIHJhdyBkYXRhKQorICogXHBhcmFtIGhhc2hsZW4gIG1lc3NhZ2UgZGlnZXN0IGxlbmd0aCAoZm9yIE1CRURUTFNfTURfTk9ORSBvbmx5KQorICogXHBhcmFtIGhhc2ggICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBtZXNzYWdlIGRpZ2VzdAorICogXHBhcmFtIHNpZyAgICAgIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB0aGUgY2lwaGVydGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHRoZSBzaWduaW5nIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlICJzaWciIGJ1ZmZlciBtdXN0IGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplCisgKiAgICAgICAgICAgICAgICAgb2YgY3R4LT5OIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpLgorICovCitpbnQgbWJlZHRsc19wa2NzMTFfc2lnbiggbWJlZHRsc19wa2NzMTFfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnICk7CisKKy8qKgorICogU1NML1RMUyB3cmFwcGVycyBmb3IgUEtDUyMxMSBmdW5jdGlvbnMKKyAqLworc3RhdGljIGlubGluZSBpbnQgbWJlZHRsc19zc2xfcGtjczExX2RlY3J5cHQoIHZvaWQgKmN0eCwgaW50IG1vZGUsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X21heF9sZW4gKQoreworICAgIHJldHVybiBtYmVkdGxzX3BrY3MxMV9kZWNyeXB0KCAobWJlZHRsc19wa2NzMTFfY29udGV4dCAqKSBjdHgsIG1vZGUsIG9sZW4sIGlucHV0LCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbWF4X2xlbiApOworfQorCitzdGF0aWMgaW5saW5lIGludCBtYmVkdGxzX3NzbF9wa2NzMTFfc2lnbiggdm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgdW5zaWduZWQgY2hhciAqc2lnICkKK3sKKyAgICAoKHZvaWQpIGZfcm5nKTsKKyAgICAoKHZvaWQpIHBfcm5nKTsKKyAgICByZXR1cm4gbWJlZHRsc19wa2NzMTFfc2lnbiggKG1iZWR0bHNfcGtjczExX2NvbnRleHQgKikgY3R4LCBtb2RlLCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICBoYXNobGVuLCBoYXNoLCBzaWcgKTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QgbWJlZHRsc19zc2xfcGtjczExX2tleV9sZW4oIHZvaWQgKmN0eCApCit7CisgICAgcmV0dXJuICggKG1iZWR0bHNfcGtjczExX2NvbnRleHQgKikgY3R4ICktPmxlbjsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfUEtDUzExX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfUEtDUzExX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGtjczEyLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BrY3MxMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmQ5MDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BrY3MxMi5oCkBAIC0wLDAgKzEsMTE5IEBACisvKioKKyAqIFxmaWxlIHBrY3MxMi5oCisgKgorICogXGJyaWVmIFBLQ1MjMTIgUGVyc29uYWwgSW5mb3JtYXRpb24gRXhjaGFuZ2UgU3ludGF4CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfUEtDUzEyX0gKKyNkZWZpbmUgTUJFRFRMU19QS0NTMTJfSAorCisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJhc24xLmgiCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2RlZmluZSBNQkVEVExTX0VSUl9QS0NTMTJfQkFEX0lOUFVUX0RBVEEgICAgICAgICAgICAgICAgIC0weDFGODAgIC8qKjwgQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLQ1MxMl9GRUFUVVJFX1VOQVZBSUxBQkxFICAgICAgICAgICAgLTB4MUYwMCAgLyoqPCBGZWF0dXJlIG5vdCBhdmFpbGFibGUsIGUuZy4gdW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBzY2hlbWUuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLQ1MxMl9QQkVfSU5WQUxJRF9GT1JNQVQgICAgICAgICAgICAgLTB4MUU4MCAgLyoqPCBQQkUgQVNOLjEgZGF0YSBub3QgYXMgZXhwZWN0ZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLQ1MxMl9QQVNTV09SRF9NSVNNQVRDSCAgICAgICAgICAgICAgLTB4MUUwMCAgLyoqPCBHaXZlbiBwcml2YXRlIGtleSBwYXNzd29yZCBkb2VzIG5vdCBhbGxvdyBmb3IgY29ycmVjdCBkZWNyeXB0aW9uLiAqLworCisjZGVmaW5lIE1CRURUTFNfUEtDUzEyX0RFUklWRV9LRVkgICAgICAgMSAgIC8qKjwgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGtleSAqLworI2RlZmluZSBNQkVEVExTX1BLQ1MxMl9ERVJJVkVfSVYgICAgICAgIDIgICAvKio8IGluaXRpYWxpemF0aW9uIHZlY3RvciAgICAgKi8KKyNkZWZpbmUgTUJFRFRMU19QS0NTMTJfREVSSVZFX01BQ19LRVkgICAzICAgLyoqPCBpbnRlZ3JpdHkgLyBNQUMga2V5ICAgICAgICovCisKKyNkZWZpbmUgTUJFRFRMU19QS0NTMTJfUEJFX0RFQ1JZUFQgICAgICAwCisjZGVmaW5lIE1CRURUTFNfUEtDUzEyX1BCRV9FTkNSWVBUICAgICAgMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgUEtDUzEyIFBhc3N3b3JkIEJhc2VkIGZ1bmN0aW9uIChlbmNyeXB0aW9uIC8gZGVjcnlwdGlvbikKKyAqICAgICAgICAgICAgICAgICAgIGZvciBwYmVXaXRoU0hBQW5kMTI4Qml0UkM0CisgKgorICogXHBhcmFtIHBiZV9wYXJhbXMgYW4gQVNOMSBidWZmZXIgY29udGFpbmluZyB0aGUgcGtjcy0xMlBiZVBhcmFtcyBzdHJ1Y3R1cmUKKyAqIFxwYXJhbSBtb2RlICAgICAgIGVpdGhlciBNQkVEVExTX1BLQ1MxMl9QQkVfRU5DUllQVCBvciBNQkVEVExTX1BLQ1MxMl9QQkVfREVDUllQVAorICogXHBhcmFtIHB3ZCAgICAgICAgdGhlIHBhc3N3b3JkIHVzZWQgKG1heSBiZSBOVUxMIGlmIG5vIHBhc3N3b3JkIGlzIHVzZWQpCisgKiBccGFyYW0gcHdkbGVuICAgICBsZW5ndGggb2YgdGhlIHBhc3N3b3JkIChtYXkgYmUgMCkKKyAqIFxwYXJhbSBpbnB1dCAgICAgIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gbGVuICAgICAgICBkYXRhIGxlbmd0aAorICogXHBhcmFtIG91dHB1dCAgICAgdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgTUJFRFRMU19FUlJfWFhYIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcGtjczEyX3BiZV9zaGExX3JjNF8xMjgoIG1iZWR0bHNfYXNuMV9idWYgKnBiZV9wYXJhbXMsIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsICBzaXplX3QgcHdkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgUEtDUzEyIFBhc3N3b3JkIEJhc2VkIGZ1bmN0aW9uIChlbmNyeXB0aW9uIC8gZGVjcnlwdGlvbikKKyAqICAgICAgICAgICAgICAgICAgIGZvciBjaXBoZXItYmFzZWQgYW5kIG1iZWR0bHNfbWQtYmFzZWQgUEJFJ3MKKyAqCisgKiBccGFyYW0gcGJlX3BhcmFtcyBhbiBBU04xIGJ1ZmZlciBjb250YWluaW5nIHRoZSBwa2NzLTEyUGJlUGFyYW1zIHN0cnVjdHVyZQorICogXHBhcmFtIG1vZGUgICAgICAgZWl0aGVyIE1CRURUTFNfUEtDUzEyX1BCRV9FTkNSWVBUIG9yIE1CRURUTFNfUEtDUzEyX1BCRV9ERUNSWVBUCisgKiBccGFyYW0gY2lwaGVyX3R5cGUgdGhlIGNpcGhlciB1c2VkCisgKiBccGFyYW0gbWRfdHlwZSAgICAgdGhlIG1iZWR0bHNfbWQgdXNlZAorICogXHBhcmFtIHB3ZCAgICAgICAgdGhlIHBhc3N3b3JkIHVzZWQgKG1heSBiZSBOVUxMIGlmIG5vIHBhc3N3b3JkIGlzIHVzZWQpCisgKiBccGFyYW0gcHdkbGVuICAgICBsZW5ndGggb2YgdGhlIHBhc3N3b3JkIChtYXkgYmUgMCkKKyAqIFxwYXJhbSBpbnB1dCAgICAgIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gbGVuICAgICAgICBkYXRhIGxlbmd0aAorICogXHBhcmFtIG91dHB1dCAgICAgdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgTUJFRFRMU19FUlJfWFhYIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcGtjczEyX3BiZSggbWJlZHRsc19hc24xX2J1ZiAqcGJlX3BhcmFtcywgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfdHlwZV90IGNpcGhlcl90eXBlLCBtYmVkdGxzX21kX3R5cGVfdCBtZF90eXBlLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgIHNpemVfdCBwd2RsZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgVGhlIFBLQ1MjMTIgZGVyaXZhdGlvbiBmdW5jdGlvbiB1c2VzIGEgcGFzc3dvcmQgYW5kIGEgc2FsdAorICogICAgICAgICAgICAgICAgICAgdG8gcHJvZHVjZSBwc2V1ZG8tcmFuZG9tIGJpdHMgZm9yIGEgcGFydGljdWxhciAicHVycG9zZSIuCisgKgorICogICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBnaXZlbiBpZCwgdGhpcyBmdW5jdGlvbiBjYW4gcHJvZHVjZSBhbgorICogICAgICAgICAgICAgICAgICAgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGtleSwgYW4gbml0aWFsaXphdGlvbiB2ZWN0b3Igb3IgYW4KKyAqICAgICAgICAgICAgICAgICAgIGludGVncml0eSBrZXkuCisgKgorICogXHBhcmFtIGRhdGEgICAgICAgYnVmZmVyIHRvIHN0b3JlIHRoZSBkZXJpdmVkIGRhdGEgaW4KKyAqIFxwYXJhbSBkYXRhbGVuICAgIGxlbmd0aCB0byBmaWxsCisgKiBccGFyYW0gcHdkICAgICAgICBwYXNzd29yZCB0byB1c2UgKG1heSBiZSBOVUxMIGlmIG5vIHBhc3N3b3JkIGlzIHVzZWQpCisgKiBccGFyYW0gcHdkbGVuICAgICBsZW5ndGggb2YgdGhlIHBhc3N3b3JkIChtYXkgYmUgMCkKKyAqIFxwYXJhbSBzYWx0ICAgICAgIHNhbHQgYnVmZmVyIHRvIHVzZQorICogXHBhcmFtIHNhbHRsZW4gICAgbGVuZ3RoIG9mIHRoZSBzYWx0CisgKiBccGFyYW0gbWJlZHRsc19tZCAgICAgICAgIG1iZWR0bHNfbWQgdHlwZSB0byB1c2UgZHVyaW5nIHRoZSBkZXJpdmF0aW9uCisgKiBccGFyYW0gaWQgICAgICAgICBpZCB0aGF0IGRlc2NyaWJlcyB0aGUgcHVycG9zZSAoY2FuIGJlIE1CRURUTFNfUEtDUzEyX0RFUklWRV9LRVksCisgKiAgICAgICAgICAgICAgICAgICBNQkVEVExTX1BLQ1MxMl9ERVJJVkVfSVYgb3IgTUJFRFRMU19QS0NTMTJfREVSSVZFX01BQ19LRVkpCisgKiBccGFyYW0gaXRlcmF0aW9ucyBudW1iZXIgb2YgaXRlcmF0aW9ucworICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIE1ELCBCSUdOVU0gdHlwZSBlcnJvci4KKyAqLworaW50IG1iZWR0bHNfcGtjczEyX2Rlcml2YXRpb24oIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsIHNpemVfdCBwd2RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIHNpemVfdCBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtYmVkdGxzX21kLCBpbnQgaWQsIGludCBpdGVyYXRpb25zICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBwa2NzMTIuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wa2NzNS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wa2NzNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNWNiOWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BrY3M1LmgKQEAgLTAsMCArMSw5NCBAQAorLyoqCisgKiBcZmlsZSBwa2NzNS5oCisgKgorICogXGJyaWVmIFBLQ1MjNSBmdW5jdGlvbnMKKyAqCisgKiBcYXV0aG9yIE1hdGhpYXMgT2xzc29uIDxtYXRoaWFzQGtvbXBldGVuc3VtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19QS0NTNV9ICisjZGVmaW5lIE1CRURUTFNfUEtDUzVfSAorCisjaW5jbHVkZSAiYXNuMS5oIgorI2luY2x1ZGUgIm1kLmgiCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2RlZmluZSBNQkVEVExTX0VSUl9QS0NTNV9CQURfSU5QVVRfREFUQSAgICAgICAgICAgICAgICAgIC0weDJmODAgIC8qKjwgQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICAgICAgICAgICAgICAgICAgLTB4MmYwMCAgLyoqPCBVbmV4cGVjdGVkIEFTTi4xIGRhdGEuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLQ1M1X0ZFQVRVUkVfVU5BVkFJTEFCTEUgICAgICAgICAgICAgLTB4MmU4MCAgLyoqPCBSZXF1ZXN0ZWQgZW5jcnlwdGlvbiBvciBkaWdlc3QgYWxnIG5vdCBhdmFpbGFibGUuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLQ1M1X1BBU1NXT1JEX01JU01BVENIICAgICAgICAgICAgICAgLTB4MmUwMCAgLyoqPCBHaXZlbiBwcml2YXRlIGtleSBwYXNzd29yZCBkb2VzIG5vdCBhbGxvdyBmb3IgY29ycmVjdCBkZWNyeXB0aW9uLiAqLworCisjZGVmaW5lIE1CRURUTFNfUEtDUzVfREVDUllQVCAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19QS0NTNV9FTkNSWVBUICAgICAgMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBLQ1MjNSBQQkVTMiBmdW5jdGlvbgorICoKKyAqIFxwYXJhbSBwYmVfcGFyYW1zIHRoZSBBU04uMSBhbGdvcml0aG0gcGFyYW1ldGVycworICogXHBhcmFtIG1vZGUgICAgICAgZWl0aGVyIE1CRURUTFNfUEtDUzVfREVDUllQVCBvciBNQkVEVExTX1BLQ1M1X0VOQ1JZUFQKKyAqIFxwYXJhbSBwd2QgICAgICAgIHBhc3N3b3JkIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcga2V5CisgKiBccGFyYW0gcHdkbGVuICAgICBsZW5ndGggb2YgcGFzc3dvcmQKKyAqIFxwYXJhbSBkYXRhICAgICAgIGRhdGEgdG8gcHJvY2VzcworICogXHBhcmFtIGRhdGFsZW4gICAgbGVuZ3RoIG9mIGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICAgIG91dHB1dCBidWZmZXIKKyAqCisgKiBccmV0dXJucyAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBhIE1CRURUTFNfRVJSX1hYWCBjb2RlIGlmIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfcGtjczVfcGJlczIoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKnBiZV9wYXJhbXMsIGludCBtb2RlLAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsICBzaXplX3QgcHdkbGVuLAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBLQ1MjNSBQQktERjIgdXNpbmcgSE1BQworICoKKyAqIFxwYXJhbSBjdHggICAgICBHZW5lcmljIEhNQUMgY29udGV4dAorICogXHBhcmFtIHBhc3N3b3JkIFBhc3N3b3JkIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcga2V5CisgKiBccGFyYW0gcGxlbiAgICAgTGVuZ3RoIG9mIHBhc3N3b3JkCisgKiBccGFyYW0gc2FsdCAgICAgU2FsdCB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIGtleQorICogXHBhcmFtIHNsZW4gICAgIExlbmd0aCBvZiBzYWx0CisgKiBccGFyYW0gaXRlcmF0aW9uX2NvdW50ICAgICAgIEl0ZXJhdGlvbiBjb3VudAorICogXHBhcmFtIGtleV9sZW5ndGggICAgICAgICAgICBMZW5ndGggb2YgZ2VuZXJhdGVkIGtleSBpbiBieXRlcworICogXHBhcmFtIG91dHB1dCAgIEdlbmVyYXRlZCBrZXkuIE11c3QgYmUgYXQgbGVhc3QgYXMgYmlnIGFzIGtleV9sZW5ndGgKKyAqCisgKiBccmV0dXJucyAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBhIE1CRURUTFNfRVJSX1hYWCBjb2RlIGlmIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfcGtjczVfcGJrZGYyX2htYWMoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgc2l6ZV90IHNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpdGVyYXRpb25fY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleV9sZW5ndGgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19wa2NzNV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBwa2NzNS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BsYXRmb3JtLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiMDE5ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGxhdGZvcm0uaApAQCAtMCwwICsxLDI5NSBAQAorLyoqCisgKiBcZmlsZSBwbGF0Zm9ybS5oCisgKgorICogXGJyaWVmIG1iZWQgVExTIFBsYXRmb3JtIGFic3RyYWN0aW9uIGxheWVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfUExBVEZPUk1fSAorI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm1fdGltZS5oIgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBNb2R1bGUgc2V0dGluZ3MKKyAqCisgKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSBjYW4gc2V0IGZvciB0aGlzIG1vZHVsZSBhcmUgaW4gdGhpcyBzZWN0aW9uLgorICogRWl0aGVyIGNoYW5nZSB0aGVtIGluIGNvbmZpZy5oIG9yIGRlZmluZSB0aGVtIG9uIHRoZSBjb21waWxlciBjb21tYW5kIGxpbmUuCisgKiBceworICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMpCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYpCisjaWYgZGVmaW5lZChfV0lOMzIpCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX1NOUFJJTlRGICAgbWJlZHRsc19wbGF0Zm9ybV93aW4zMl9zbnByaW50ZiAvKio8IERlZmF1bHQgc25wcmludGYgdG8gdXNlICAqLworI2Vsc2UKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYgICBzbnByaW50ZiAvKio8IERlZmF1bHQgc25wcmludGYgdG8gdXNlICAqLworI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYpCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URiAgIHByaW50ZiAvKio8IERlZmF1bHQgcHJpbnRmIHRvIHVzZSAgKi8KKyNlbmRpZgorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0ZQUklOVEYpCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0ZQUklOVEYgZnByaW50ZiAvKio8IERlZmF1bHQgZnByaW50ZiB0byB1c2UgKi8KKyNlbmRpZgorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQykKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfQ0FMTE9DICAgY2FsbG9jIC8qKjwgRGVmYXVsdCBhbGxvY2F0b3IgdG8gdXNlICovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9GUkVFKQorI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9GUkVFICAgICAgIGZyZWUgLyoqPCBEZWZhdWx0IGZyZWUgdG8gdXNlICovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUKQorI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUICAgICAgZXhpdCAvKio8IERlZmF1bHQgZXhpdCB0byB1c2UgKi8KKyNlbmRpZgorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX1RJTUUpCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX1RJTUUgICAgICAgdGltZSAgICAvKio8IERlZmF1bHQgdGltZSB0byB1c2UgKi8KKyNlbmRpZgorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVRfU1VDQ0VTUykKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVF9TVUNDRVNTICBFWElUX1NVQ0NFU1MgLyoqPCBEZWZhdWx0IGV4aXQgdmFsdWUgdG8gdXNlICovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUX0ZBSUxVUkUpCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVRfRkFJTFVSRSAgRVhJVF9GQUlMVVJFIC8qKjwgRGVmYXVsdCBleGl0IHZhbHVlIHRvIHVzZSAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfUkVBRCkKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9SRUFEICAgbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF9yZWFkCisjZW5kaWYKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1dSSVRFKQorI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1dSSVRFICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3dyaXRlCisjZW5kaWYKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX0ZJTEUpCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfRklMRSAgICJzZWVkZmlsZSIKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKyNlbHNlIC8qIE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfTUVNX0hEUikKKyNpbmNsdWRlIE1CRURUTFNfUExBVEZPUk1fU1REX01FTV9IRFIKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUyAqLworCisKKy8qIFx9IG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzICovCisKKy8qCisgKiBUaGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGNhbGxvYyBhbmQgZnJlZQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX01FTU9SWSkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DQUxMT0NfTUFDUk8pCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBNQkVEVExTX1BMQVRGT1JNX0ZSRUVfTUFDUk8KKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgIE1CRURUTFNfUExBVEZPUk1fQ0FMTE9DX01BQ1JPCisjZWxzZQorLyogRm9yIHNpemVfdCAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorZXh0ZXJuIHZvaWQgKiAoKm1iZWR0bHNfY2FsbG9jKSggc2l6ZV90IG4sIHNpemVfdCBzaXplICk7CitleHRlcm4gdm9pZCAoKm1iZWR0bHNfZnJlZSkoIHZvaWQgKnB0ciApOworCisvKioKKyAqIFxicmllZiAgIFNldCB5b3VyIG93biBtZW1vcnkgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24gcG9pbnRlcnMKKyAqCisgKiBccGFyYW0gY2FsbG9jX2Z1bmMgICB0aGUgY2FsbG9jIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCisgKiBccGFyYW0gZnJlZV9mdW5jICAgICB0aGUgZnJlZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9zZXRfY2FsbG9jX2ZyZWUoIHZvaWQgKiAoKmNhbGxvY19mdW5jKSggc2l6ZV90LCBzaXplX3QgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmcmVlX2Z1bmMpKCB2b2lkICogKSApOworI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTyAmJiBNQkVEVExTX1BMQVRGT1JNX0NBTExPQ19NQUNSTyAqLworI2Vsc2UgLyogIU1CRURUTFNfUExBVEZPUk1fTUVNT1JZICovCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgICBjYWxsb2MKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX01FTU9SWSAmJiAhTUJFRFRMU19QTEFURk9STV97RlJFRSxDQUxMT0N9X01BQ1JPICovCisKKy8qCisgKiBUaGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGZwcmludGYKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX0FMVCkKKy8qIFdlIG5lZWQgRklMRSAqICovCisjaW5jbHVkZSA8c3RkaW8uaD4KK2V4dGVybiBpbnQgKCptYmVkdGxzX2ZwcmludGYpKCBGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uICk7CisKKy8qKgorICogXGJyaWVmICAgU2V0IHlvdXIgb3duIGZwcmludGYgZnVuY3Rpb24gcG9pbnRlcgorICoKKyAqIFxwYXJhbSBmcHJpbnRmX2Z1bmMgICB0aGUgZnByaW50ZiBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAKKyAqLworaW50IG1iZWR0bHNfcGxhdGZvcm1fc2V0X2ZwcmludGYoIGludCAoKmZwcmludGZfZnVuYykoIEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gKSApOworI2Vsc2UKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTykKKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTworI2Vsc2UKKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfTUFDUk8gKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUICovCisKKy8qCisgKiBUaGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHByaW50ZgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQpCitleHRlcm4gaW50ICgqbWJlZHRsc19wcmludGYpKCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLiApOworCisvKioKKyAqIFxicmllZiAgIFNldCB5b3VyIG93biBwcmludGYgZnVuY3Rpb24gcG9pbnRlcgorICoKKyAqIFxwYXJhbSBwcmludGZfZnVuYyAgIHRoZSBwcmludGYgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwCisgKi8KK2ludCBtYmVkdGxzX3BsYXRmb3JtX3NldF9wcmludGYoIGludCAoKnByaW50Zl9mdW5jKSggY29uc3QgY2hhciAqLCAuLi4gKSApOworI2Vsc2UgLyogIU1CRURUTFNfUExBVEZPUk1fUFJJTlRGX0FMVCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9QUklOVEZfTUFDUk8pCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9NQUNSTworI2Vsc2UKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX01BQ1JPICovCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUICovCisKKy8qCisgKiBUaGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHNucHJpbnRmCisgKgorICogVGhlIHNucHJpbnRmIGltcGxlbWVudGF0aW9uIHNob3VsZCBjb25mb3JtIHRvIEM5OToKKyAqIC0gaXQgKm11c3QqIGFsd2F5cyBjb3JyZWN0bHkgemVyby10ZXJtaW5hdGUgdGhlIGJ1ZmZlcgorICogICAoZXhjZXB0IHdoZW4gbiA9PSAwLCB0aGVuIGl0IG11c3QgbGVhdmUgdGhlIGJ1ZmZlciB1bnRvdWNoZWQpCisgKiAtIGhvd2V2ZXIgaXQgaXMgYWNjZXB0YWJsZSB0byByZXR1cm4gLTEgaW5zdGVhZCBvZiB0aGUgcmVxdWlyZWQgbGVuZ3RoIHdoZW4KKyAqICAgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBpcyB0b28gc2hvcnQuCisgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikKKy8qIEZvciBXaW5kb3dzIChpbmMuIE1TWVMyKSwgd2UgcHJvdmlkZSBvdXIgb3duIGZpeGVkIGltcGxlbWVudGF0aW9uICovCitpbnQgbWJlZHRsc19wbGF0Zm9ybV93aW4zMl9zbnByaW50ZiggY2hhciAqcywgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQpCitleHRlcm4gaW50ICgqbWJlZHRsc19zbnByaW50ZikoIGNoYXIgKiBzLCBzaXplX3QgbiwgY29uc3QgY2hhciAqIGZvcm1hdCwgLi4uICk7CisKKy8qKgorICogXGJyaWVmICAgU2V0IHlvdXIgb3duIHNucHJpbnRmIGZ1bmN0aW9uIHBvaW50ZXIKKyAqCisgKiBccGFyYW0gc25wcmludGZfZnVuYyAgIHRoZSBzbnByaW50ZiBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAKKyAqLworaW50IG1iZWR0bHNfcGxhdGZvcm1fc2V0X3NucHJpbnRmKCBpbnQgKCpzbnByaW50Zl9mdW5jKSggY2hhciAqIHMsIHNpemVfdCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBmb3JtYXQsIC4uLiApICk7CisjZWxzZSAvKiBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9NQUNSTykKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfTUFDUk8KKyNlbHNlCisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICBzbnByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfTUFDUk8gKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCAqLworCisvKgorICogVGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBleGl0CisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQpCitleHRlcm4gdm9pZCAoKm1iZWR0bHNfZXhpdCkoIGludCBzdGF0dXMgKTsKKworLyoqCisgKiBcYnJpZWYgICBTZXQgeW91ciBvd24gZXhpdCBmdW5jdGlvbiBwb2ludGVyCisgKgorICogXHBhcmFtIGV4aXRfZnVuYyAgIHRoZSBleGl0IGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMAorICovCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9zZXRfZXhpdCggdm9pZCAoKmV4aXRfZnVuYykoIGludCBzdGF0dXMgKSApOworI2Vsc2UKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRVhJVF9NQUNSTykKKyNkZWZpbmUgbWJlZHRsc19leGl0ICAgTUJFRFRMU19QTEFURk9STV9FWElUX01BQ1JPCisjZWxzZQorI2RlZmluZSBtYmVkdGxzX2V4aXQgICBleGl0CisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9FWElUX01BQ1JPICovCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9FWElUX0FMVCAqLworCisvKgorICogVGhlIGRlZmF1bHQgZXhpdCB2YWx1ZXMKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfRVhJVF9TVUNDRVNTKQorI2RlZmluZSBNQkVEVExTX0VYSVRfU1VDQ0VTUyBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUX1NVQ0NFU1MKKyNlbHNlCisjZGVmaW5lIE1CRURUTFNfRVhJVF9TVUNDRVNTIDAKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfRVhJVF9GQUlMVVJFKQorI2RlZmluZSBNQkVEVExTX0VYSVRfRkFJTFVSRSBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUX0ZBSUxVUkUKKyNlbHNlCisjZGVmaW5lIE1CRURUTFNfRVhJVF9GQUlMVVJFIDEKKyNlbmRpZgorCisvKgorICogVGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciByZWFkaW5nIGZyb20gYW5kIHdyaXRpbmcgYSBzZWVkIGZpbGUgdG8KKyAqIE5vbi1Wb2xhdGlsZSBzdG9yYWdlIChOVikgaW4gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB3YXkKKyAqCisgKiBPbmx5IGVuYWJsZWQgd2hlbiB0aGUgTlYgc2VlZCBlbnRyb3B5IHNvdXJjZSBpcyBlbmFibGVkCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUykgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyogSW50ZXJuYWwgc3RhbmRhcmQgcGxhdGZvcm0gZGVmaW5pdGlvbnMgKi8KK2ludCBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3JlYWQoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKTsKK2ludCBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3dyaXRlKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX0FMVCkKK2V4dGVybiBpbnQgKCptYmVkdGxzX252X3NlZWRfcmVhZCkoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKTsKK2V4dGVybiBpbnQgKCptYmVkdGxzX252X3NlZWRfd3JpdGUpKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgU2V0IHlvdXIgb3duIHNlZWQgZmlsZSB3cml0aW5nL3JlYWRpbmcgZnVuY3Rpb25zCisgKgorICogXHBhcmFtICAgbnZfc2VlZF9yZWFkX2Z1bmMgICB0aGUgc2VlZCByZWFkaW5nIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCisgKiBccGFyYW0gICBudl9zZWVkX3dyaXRlX2Z1bmMgIHRoZSBzZWVkIHdyaXRpbmcgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwCisgKi8KK2ludCBtYmVkdGxzX3BsYXRmb3JtX3NldF9udl9zZWVkKAorICAgICAgICAgICAgaW50ICgqbnZfc2VlZF9yZWFkX2Z1bmMpKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICksCisgICAgICAgICAgICBpbnQgKCpudl9zZWVkX3dyaXRlX2Z1bmMpKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICkKKyAgICAgICAgICAgICk7CisjZWxzZQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX1JFQURfTUFDUk8pICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9XUklURV9NQUNSTykKKyNkZWZpbmUgbWJlZHRsc19udl9zZWVkX3JlYWQgICAgTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX1JFQURfTUFDUk8KKyNkZWZpbmUgbWJlZHRsc19udl9zZWVkX3dyaXRlICAgTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX1dSSVRFX01BQ1JPCisjZWxzZQorI2RlZmluZSBtYmVkdGxzX252X3NlZWRfcmVhZCAgICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3JlYWQKKyNkZWZpbmUgbWJlZHRsc19udl9zZWVkX3dyaXRlICAgbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF93cml0ZQorI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX0FMVCAqLworI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBwbGF0Zm9ybS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BsYXRmb3JtX3RpbWUuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGxhdGZvcm1fdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYjM0MzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BsYXRmb3JtX3RpbWUuaApAQCAtMCwwICsxLDgxIEBACisvKioKKyAqIFxmaWxlIHBsYXRmb3JtX3RpbWUuaAorICoKKyAqIFxicmllZiBtYmVkIFRMUyBQbGF0Zm9ybSB0aW1lIGFic3RyYWN0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfUExBVEZPUk1fVElNRV9ICisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fVElNRV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3UgY2FuIHNldCBmb3IgdGhpcyBtb2R1bGUgYXJlIGluIHRoaXMgc2VjdGlvbi4KKyAqIEVpdGhlciBjaGFuZ2UgdGhlbSBpbiBjb25maWcuaCBvciBkZWZpbmUgdGhlbSBvbiB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lLgorICogXHsKKyAqLworCisvKgorICogVGhlIHRpbWVfdCBkYXRhdHlwZQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1RJTUVfVFlQRV9NQUNSTykKK3R5cGVkZWYgTUJFRFRMU19QTEFURk9STV9USU1FX1RZUEVfTUFDUk8gbWJlZHRsc190aW1lX3Q7CisjZWxzZQorLyogRm9yIHRpbWVfdCAqLworI2luY2x1ZGUgPHRpbWUuaD4KK3R5cGVkZWYgdGltZV90IG1iZWR0bHNfdGltZV90OworI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fVElNRV9UWVBFX01BQ1JPICovCisKKy8qCisgKiBUaGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRpbWUKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9USU1FX0FMVCkKK2V4dGVybiBtYmVkdGxzX3RpbWVfdCAoKm1iZWR0bHNfdGltZSkoIG1iZWR0bHNfdGltZV90KiB0aW1lICk7CisKKy8qKgorICogXGJyaWVmICAgU2V0IHlvdXIgb3duIHRpbWUgZnVuY3Rpb24gcG9pbnRlcgorICoKKyAqIFxwYXJhbSAgIHRpbWVfZnVuYyAgIHRoZSB0aW1lIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMAorICovCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9zZXRfdGltZSggbWJlZHRsc190aW1lX3QgKCp0aW1lX2Z1bmMpKCBtYmVkdGxzX3RpbWVfdCogdGltZSApICk7CisjZWxzZQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9USU1FX01BQ1JPKQorI2RlZmluZSBtYmVkdGxzX3RpbWUgICAgTUJFRFRMU19QTEFURk9STV9USU1FX01BQ1JPCisjZWxzZQorI2RlZmluZSBtYmVkdGxzX3RpbWUgICB0aW1lCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9USU1FX01BQ1JPICovCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9USU1FX0FMVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogcGxhdGZvcm1fdGltZS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3JpcGVtZDE2MC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9yaXBlbWQxNjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDgzZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9yaXBlbWQxNjAuaApAQCAtMCwwICsxLDEzOCBAQAorLyoqCisgKiBcZmlsZSByaXBlbWQxNjAuaAorICoKKyAqIFxicmllZiBSSVBFIE1ELTE2MCBtZXNzYWdlIGRpZ2VzdAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1JJUEVNRDE2MF9ICisjZGVmaW5lIE1CRURUTFNfUklQRU1EMTYwX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmICFkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0FMVCkKKy8vIFJlZ3VsYXIgaW1wbGVtZW50YXRpb24KKy8vCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUklQRU1ELTE2MCBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQzMl90IHRvdGFsWzJdOyAgICAgICAgICAvKiE8IG51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQgICovCisgICAgdWludDMyX3Qgc3RhdGVbNV07ICAgICAgICAgIC8qITwgaW50ZXJtZWRpYXRlIGRpZ2VzdCBzdGF0ZSAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07ICAgLyohPCBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZCAqLworfQorbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBSSVBFTUQtMTYwIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUklQRU1ELTE2MCBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjBfaW5pdCggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsZWFyIFJJUEVNRC0xNjAgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBSSVBFTUQtMTYwIGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfcmlwZW1kMTYwX2ZyZWUoIG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbG9uZSAodGhlIHN0YXRlIG9mKSBhbiBSSVBFTUQtMTYwIGNvbnRleHQKKyAqCisgKiBccGFyYW0gZHN0ICAgICAgVGhlIGRlc3RpbmF0aW9uIGNvbnRleHQKKyAqIFxwYXJhbSBzcmMgICAgICBUaGUgY29udGV4dCB0byBiZSBjbG9uZWQKKyAqLwordm9pZCBtYmVkdGxzX3JpcGVtZDE2MF9jbG9uZSggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqc3JjICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJJUEVNRC0xNjAgY29udGV4dCBzZXR1cAorICoKKyAqIFxwYXJhbSBjdHggICAgICBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjBfc3RhcnRzKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUklQRU1ELTE2MCBwcm9jZXNzIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBjdHggICAgICBSSVBFTUQtMTYwIGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqLwordm9pZCBtYmVkdGxzX3JpcGVtZDE2MF91cGRhdGUoIG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJJUEVNRC0xNjAgZmluYWwgZGlnZXN0CisgKgorICogXHBhcmFtIGN0eCAgICAgIFJJUEVNRC0xNjAgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgIFJJUEVNRC0xNjAgY2hlY2tzdW0gcmVzdWx0CisgKi8KK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjBfZmluaXNoKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzIwXSApOworCisvKiBJbnRlcm5hbCB1c2UgKi8KK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjBfcHJvY2VzcyggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX1JJUEVNRDE2MF9BTFQgKi8KKyNpbmNsdWRlICJyaXBlbWQxNjAuaCIKKyNlbmRpZiAvKiBNQkVEVExTX1JJUEVNRDE2MF9BTFQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBPdXRwdXQgPSBSSVBFTUQtMTYwKCBpbnB1dCBidWZmZXIgKQorICoKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBSSVBFTUQtMTYwIGNoZWNrc3VtIHJlc3VsdAorICovCit2b2lkIG1iZWR0bHNfcmlwZW1kMTYwKCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjBdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX3JpcGVtZDE2MF9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBtYmVkdGxzX3JpcGVtZDE2MC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3JzYS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9yc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTE4NWRmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9yc2EuaApAQCAtMCwwICsxLDY1MiBAQAorLyoqCisgKiBcZmlsZSByc2EuaAorICoKKyAqIFxicmllZiBUaGUgUlNBIHB1YmxpYy1rZXkgY3J5cHRvc3lzdGVtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfUlNBX0gKKyNkZWZpbmUgTUJFRFRMU19SU0FfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgIm1kLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisjaW5jbHVkZSAidGhyZWFkaW5nLmgiCisjZW5kaWYKKworLyoKKyAqIFJTQSBFcnJvciBjb2RlcworICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSAgICAgICAgICAgICAgICAgICAgLTB4NDA4MCAgLyoqPCBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORyAgICAgICAgICAgICAgICAgICAtMHg0MTAwICAvKio8IElucHV0IGRhdGEgY29udGFpbnMgaW52YWxpZCBwYWRkaW5nIGFuZCBpcyByZWplY3RlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUlNBX0tFWV9HRU5fRkFJTEVEICAgICAgICAgICAgICAgICAgICAtMHg0MTgwICAvKio8IFNvbWV0aGluZyBmYWlsZWQgZHVyaW5nIGdlbmVyYXRpb24gb2YgYSBrZXkuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEICAgICAgICAgICAgICAgICAgLTB4NDIwMCAgLyoqPCBLZXkgZmFpbGVkIHRvIHBhc3MgdGhlIGxpYnJhcnkncyB2YWxpZGl0eSBjaGVjay4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUlNBX1BVQkxJQ19GQUlMRUQgICAgICAgICAgICAgICAgICAgICAtMHg0MjgwICAvKio8IFRoZSBwdWJsaWMga2V5IG9wZXJhdGlvbiBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1JTQV9QUklWQVRFX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgLTB4NDMwMCAgLyoqPCBUaGUgcHJpdmF0ZSBrZXkgb3BlcmF0aW9uIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAtMHg0MzgwICAvKio8IFRoZSBQS0NTIzEgdmVyaWZpY2F0aW9uIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUlNBX09VVFBVVF9UT09fTEFSR0UgICAgICAgICAgICAgICAgICAtMHg0NDAwICAvKio8IFRoZSBvdXRwdXQgYnVmZmVyIGZvciBkZWNyeXB0aW9uIGlzIG5vdCBsYXJnZSBlbm91Z2guICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1JTQV9STkdfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAgLTB4NDQ4MCAgLyoqPCBUaGUgcmFuZG9tIGdlbmVyYXRvciBmYWlsZWQgdG8gZ2VuZXJhdGUgbm9uLXplcm9zLiAqLworCisvKgorICogUlNBIGNvbnN0YW50cworICovCisjZGVmaW5lIE1CRURUTFNfUlNBX1BVQkxJQyAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19SU0FfUFJJVkFURSAgICAgMQorCisjZGVmaW5lIE1CRURUTFNfUlNBX1BLQ1NfVjE1ICAgIDAKKyNkZWZpbmUgTUJFRFRMU19SU0FfUEtDU19WMjEgICAgMQorCisjZGVmaW5lIE1CRURUTFNfUlNBX1NJR04gICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19SU0FfQ1JZUFQgICAgICAgMgorCisjZGVmaW5lIE1CRURUTFNfUlNBX1NBTFRfTEVOX0FOWSAgICAtMQorCisvKgorICogVGhlIGFib3ZlIGNvbnN0YW50cyBtYXkgYmUgdXNlZCBldmVuIGlmIHRoZSBSU0EgbW9kdWxlIGlzIGNvbXBpbGUgb3V0LAorICogZWcgZm9yIGFsdGVybmF0aXZlIChQS0NTIzExKSBSU0EgaW1wbGVtZW5hdGlvbnMgaW4gdGhlIFBLIGxheWVycy4KKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBSU0EgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQgdmVyOyAgICAgICAgICAgICAgICAgICAgLyohPCAgYWx3YXlzIDAgICAgICAgICAgKi8KKyAgICBzaXplX3QgbGVuOyAgICAgICAgICAgICAgICAgLyohPCAgc2l6ZShOKSBpbiBjaGFycyAgKi8KKworICAgIG1iZWR0bHNfbXBpIE47ICAgICAgICAgICAgICAgICAgICAgIC8qITwgIHB1YmxpYyBtb2R1bHVzICAgICovCisgICAgbWJlZHRsc19tcGkgRTsgICAgICAgICAgICAgICAgICAgICAgLyohPCAgcHVibGljIGV4cG9uZW50ICAgKi8KKworICAgIG1iZWR0bHNfbXBpIEQ7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgIHByaXZhdGUgZXhwb25lbnQgICovCisgICAgbWJlZHRsc19tcGkgUDsgICAgICAgICAgICAgICAgICAgICAgLyohPCAgMXN0IHByaW1lIGZhY3RvciAgKi8KKyAgICBtYmVkdGxzX21waSBROyAgICAgICAgICAgICAgICAgICAgICAvKiE8ICAybmQgcHJpbWUgZmFjdG9yICAqLworICAgIG1iZWR0bHNfbXBpIERQOyAgICAgICAgICAgICAgICAgICAgIC8qITwgIEQgJSAoUCAtIDEpICAgICAgICovCisgICAgbWJlZHRsc19tcGkgRFE7ICAgICAgICAgICAgICAgICAgICAgLyohPCAgRCAlIChRIC0gMSkgICAgICAgKi8KKyAgICBtYmVkdGxzX21waSBRUDsgICAgICAgICAgICAgICAgICAgICAvKiE8ICAxIC8gKFEgJSBQKSAgICAgICAqLworCisgICAgbWJlZHRsc19tcGkgUk47ICAgICAgICAgICAgICAgICAgICAgLyohPCAgY2FjaGVkIFJeMiBtb2QgTiAgKi8KKyAgICBtYmVkdGxzX21waSBSUDsgICAgICAgICAgICAgICAgICAgICAvKiE8ICBjYWNoZWQgUl4yIG1vZCBQICAqLworICAgIG1iZWR0bHNfbXBpIFJROyAgICAgICAgICAgICAgICAgICAgIC8qITwgIGNhY2hlZCBSXjIgbW9kIFEgICovCisKKyAgICBtYmVkdGxzX21waSBWaTsgICAgICAgICAgICAgICAgICAgICAvKiE8ICBjYWNoZWQgYmxpbmRpbmcgdmFsdWUgICAgICovCisgICAgbWJlZHRsc19tcGkgVmY7ICAgICAgICAgICAgICAgICAgICAgLyohPCAgY2FjaGVkIHVuLWJsaW5kaW5nIHZhbHVlICAqLworCisgICAgaW50IHBhZGRpbmc7ICAgICAgICAgICAgICAgIC8qITwgIE1CRURUTFNfUlNBX1BLQ1NfVjE1IGZvciAxLjUgcGFkZGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19SU0FfUEtDU192MjEgZm9yIE9BRVAvUFNTICAgICAgICAgKi8KKyAgICBpbnQgaGFzaF9pZDsgICAgICAgICAgICAgICAgLyohPCAgSGFzaCBpZGVudGlmaWVyIG9mIG1iZWR0bHNfbWRfdHlwZV90IGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgbWJlZHRsc19tZC5oIGhlYWRlciBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgRU1FLU9BRVAgYW5kIEVNU0EtUFNTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90IG11dGV4OyAgICAvKiE8ICBUaHJlYWQtc2FmZXR5IG11dGV4ICAgICAgICovCisjZW5kaWYKK30KK21iZWR0bHNfcnNhX2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgYW4gUlNBIGNvbnRleHQKKyAqCisgKiAgICAgICAgICAgICAgICAgTm90ZTogU2V0IHBhZGRpbmcgdG8gTUJFRFRMU19SU0FfUEtDU19WMjEgZm9yIHRoZSBSU0FFUy1PQUVQCisgKiAgICAgICAgICAgICAgICAgZW5jcnlwdGlvbiBzY2hlbWUgYW5kIHRoZSBSU0FTU0EtUFNTIHNpZ25hdHVyZSBzY2hlbWUuCisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0gcGFkZGluZyAgTUJFRFRMU19SU0FfUEtDU19WMTUgb3IgTUJFRFRMU19SU0FfUEtDU19WMjEKKyAqIFxwYXJhbSBoYXNoX2lkICBNQkVEVExTX1JTQV9QS0NTX1YyMSBoYXNoIGlkZW50aWZpZXIKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIGhhc2hfaWQgcGFyYW1ldGVyIGlzIGFjdHVhbGx5IGlnbm9yZWQKKyAqICAgICAgICAgICAgICAgICB3aGVuIHVzaW5nIE1CRURUTFNfUlNBX1BLQ1NfVjE1IHBhZGRpbmcuCisgKgorICogXG5vdGUgICAgICAgICAgIENob2ljZSBvZiBwYWRkaW5nIG1vZGUgaXMgc3RyaWN0bHkgZW5mb3JjZWQgZm9yIHByaXZhdGUga2V5CisgKiAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucywgc2luY2UgdGhlcmUgbWlnaHQgYmUgc2VjdXJpdHkgY29uY2VybnMgaW4KKyAqICAgICAgICAgICAgICAgICBtaXhpbmcgcGFkZGluZyBtb2Rlcy4gRm9yIHB1YmxpYyBrZXkgb3BlcmF0aW9ucyBpdCdzIG1lcmVseQorICogICAgICAgICAgICAgICAgIGEgZGVmYXVsdCB2YWx1ZSwgd2hpY2ggY2FuIGJlIG92ZXJyaWRlbiBieSBjYWxsaW5nIHNwZWNpZmljCisgKiAgICAgICAgICAgICAgICAgcnNhX3JzYWVzX3h4eCBvciByc2FfcnNhc3NhX3h4eCBmdW5jdGlvbnMuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSBjaG9zZW4gaGFzaCBpcyBhbHdheXMgdXNlZCBmb3IgT0VBUCBlbmNyeXB0aW9uLgorICogICAgICAgICAgICAgICAgIEZvciBQU1Mgc2lnbmF0dXJlcywgaXQncyBhbHdheXMgdXNlZCBmb3IgbWFraW5nIHNpZ25hdHVyZXMsCisgKiAgICAgICAgICAgICAgICAgYnV0IGNhbiBiZSBvdmVycmlkZW4gKGFuZCBhbHdheXMgaXMsIGlmIHNldCB0bworICogICAgICAgICAgICAgICAgIE1CRURUTFNfTURfTk9ORSkgZm9yIHZlcmlmeWluZyB0aGVtLgorICovCit2b2lkIG1iZWR0bHNfcnNhX2luaXQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgIGludCBwYWRkaW5nLAorICAgICAgICAgICAgICAgaW50IGhhc2hfaWQpOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgcGFkZGluZyBmb3IgYW4gYWxyZWFkeSBpbml0aWFsaXplZCBSU0EgY29udGV4dAorICogICAgICAgICAgICAgICAgIFNlZSBcYyBtYmVkdGxzX3JzYV9pbml0KCkgZm9yIGRldGFpbHMuCisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBjb250ZXh0IHRvIGJlIHNldAorICogXHBhcmFtIHBhZGRpbmcgIE1CRURUTFNfUlNBX1BLQ1NfVjE1IG9yIE1CRURUTFNfUlNBX1BLQ1NfVjIxCisgKiBccGFyYW0gaGFzaF9pZCAgTUJFRFRMU19SU0FfUEtDU19WMjEgaGFzaCBpZGVudGlmaWVyCisgKi8KK3ZvaWQgbWJlZHRsc19yc2Ffc2V0X3BhZGRpbmcoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwgaW50IHBhZGRpbmcsIGludCBoYXNoX2lkKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgR2VuZXJhdGUgYW4gUlNBIGtleXBhaXIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQgdGhhdCB3aWxsIGhvbGQgdGhlIGtleQorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqIFxwYXJhbSBuYml0cyAgICBzaXplIG9mIHRoZSBwdWJsaWMga2V5IGluIGJpdHMKKyAqIFxwYXJhbSBleHBvbmVudCBwdWJsaWMgZXhwb25lbnQgKGUuZy4sIDY1NTM3KQorICoKKyAqIFxub3RlICAgICAgICAgICBtYmVkdGxzX3JzYV9pbml0KCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlaGFuZCB0byBzZXR1cAorICogICAgICAgICAgICAgICAgIHRoZSBSU0EgY29udGV4dC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcnNhX2dlbl9rZXkoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5iaXRzLCBpbnQgZXhwb25lbnQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2sgYSBwdWJsaWMgUlNBIGtleQorICoKKyAqIFxwYXJhbSBjdHggICAgICBSU0EgY29udGV4dCB0byBiZSBjaGVja2VkCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoIGNvbnN0IG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVjayBhIHByaXZhdGUgUlNBIGtleQorICoKKyAqIFxwYXJhbSBjdHggICAgICBSU0EgY29udGV4dCB0byBiZSBjaGVja2VkCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCBjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2sgYSBwdWJsaWMtcHJpdmF0ZSBSU0Ega2V5IHBhaXIuCisgKiAgICAgICAgICAgICAgICAgQ2hlY2sgZWFjaCBvZiB0aGUgY29udGV4dHMsIGFuZCBtYWtlIHN1cmUgdGhleSBtYXRjaC4KKyAqCisgKiBccGFyYW0gcHViICAgICAgUlNBIGNvbnRleHQgaG9sZGluZyB0aGUgcHVibGljIGtleQorICogXHBhcmFtIHBydiAgICAgIFJTQSBjb250ZXh0IGhvbGRpbmcgdGhlIHByaXZhdGUga2V5CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3JzYV9jaGVja19wdWJfcHJpdiggY29uc3QgbWJlZHRsc19yc2FfY29udGV4dCAqcHViLCBjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICpwcnYgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRG8gYW4gUlNBIHB1YmxpYyBrZXkgb3BlcmF0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBjb250ZXh0CisgKiBccGFyYW0gaW5wdXQgICAgaW5wdXQgYnVmZmVyCisgKiBccGFyYW0gb3V0cHV0ICAgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIHRha2UgY2FyZSBvZiBtZXNzYWdlCisgKiAgICAgICAgICAgICAgICAgcGFkZGluZy4gQWxzbywgYmUgc3VyZSB0byBzZXQgaW5wdXRbMF0gPSAwIG9yIGFzc3VyZSB0aGF0CisgKiAgICAgICAgICAgICAgICAgaW5wdXQgaXMgc21hbGxlciB0aGFuIE4uCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgbXVzdCBiZSBsYXJnZQorICogICAgICAgICAgICAgICAgIGVub3VnaCAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKS4KKyAqLworaW50IG1iZWR0bHNfcnNhX3B1YmxpYyggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBEbyBhbiBSU0EgcHJpdmF0ZSBrZXkgb3BlcmF0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBjb250ZXh0CisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uIChOZWVkZWQgZm9yIGJsaW5kaW5nKQorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqIFxwYXJhbSBpbnB1dCAgICBpbnB1dCBidWZmZXIKKyAqIFxwYXJhbSBvdXRwdXQgICBvdXRwdXQgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgbXVzdCBiZSBsYXJnZQorICogICAgICAgICAgICAgICAgIGVub3VnaCAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKS4KKyAqLworaW50IG1iZWR0bHNfcnNhX3ByaXZhdGUoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBHZW5lcmljIHdyYXBwZXIgdG8gcGVyZm9ybSBhIFBLQ1MjMSBlbmNyeXB0aW9uIHVzaW5nIHRoZQorICogICAgICAgICAgICAgICAgIG1vZGUgZnJvbSB0aGUgY29udGV4dC4gQWRkIHRoZSBtZXNzYWdlIHBhZGRpbmcsIHRoZW4gZG8gYW4KKyAqICAgICAgICAgICAgICAgICBSU0Egb3BlcmF0aW9uLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBSU0EgY29udGV4dAorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbiAoTmVlZGVkIGZvciBwYWRkaW5nIGFuZCBQS0NTIzEgdjIuMSBlbmNvZGluZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIE1CRURUTFNfUlNBX1BSSVZBVEUpCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfUlNBX1BVQkxJQyBvciBNQkVEVExTX1JTQV9QUklWQVRFCisgKiBccGFyYW0gaWxlbiAgICAgY29udGFpbnMgdGhlIHBsYWludGV4dCBsZW5ndGgKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgZGF0YSB0byBiZSBlbmNyeXB0ZWQKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgdGhhdCB3aWxsIGhvbGQgdGhlIGNpcGhlcnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIG91dHB1dCBidWZmZXIgbXVzdCBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZQorICogICAgICAgICAgICAgICAgIG9mIGN0eC0+TiAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKS4KKyAqLworaW50IG1iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBlcmZvcm0gYSBQS0NTIzEgdjEuNSBlbmNyeXB0aW9uIChSU0FFUy1QS0NTMS12MV81LUVOQ1JZUFQpCisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBjb250ZXh0CisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uIChOZWVkZWQgZm9yIHBhZGRpbmcgYW5kIE1CRURUTFNfUlNBX1BSSVZBVEUpCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfUlNBX1BVQkxJQyBvciBNQkVEVExTX1JTQV9QUklWQVRFCisgKiBccGFyYW0gaWxlbiAgICAgY29udGFpbnMgdGhlIHBsYWludGV4dCBsZW5ndGgKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgZGF0YSB0byBiZSBlbmNyeXB0ZWQKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgdGhhdCB3aWxsIGhvbGQgdGhlIGNpcGhlcnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIG91dHB1dCBidWZmZXIgbXVzdCBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZQorICogICAgICAgICAgICAgICAgIG9mIGN0eC0+TiAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKS4KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9lbmNyeXB0KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBlcmZvcm0gYSBQS0NTIzEgdjIuMSBPQUVQIGVuY3J5cHRpb24gKFJTQUVTLU9BRVAtRU5DUllQVCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQKKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24gKE5lZWRlZCBmb3IgcGFkZGluZyBhbmQgUEtDUyMxIHYyLjEgZW5jb2RpbmcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBNQkVEVExTX1JTQV9QUklWQVRFKQorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX1JTQV9QVUJMSUMgb3IgTUJFRFRMU19SU0FfUFJJVkFURQorICogXHBhcmFtIGxhYmVsICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBjdXN0b20gbGFiZWwgdG8gdXNlCisgKiBccGFyYW0gbGFiZWxfbGVuIGNvbnRhaW5zIHRoZSBsYWJlbCBsZW5ndGgKKyAqIFxwYXJhbSBpbGVuICAgICBjb250YWlucyB0aGUgcGxhaW50ZXh0IGxlbmd0aAorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBkYXRhIHRvIGJlIGVuY3J5cHRlZAorICogXHBhcmFtIG91dHB1dCAgIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB0aGUgY2lwaGVydGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgb3V0cHV0IGJ1ZmZlciBtdXN0IGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplCisgKiAgICAgICAgICAgICAgICAgb2YgY3R4LT5OIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpLgorICovCitpbnQgbWJlZHRsc19yc2FfcnNhZXNfb2FlcF9lbmNyeXB0KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhYmVsLCBzaXplX3QgbGFiZWxfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBHZW5lcmljIHdyYXBwZXIgdG8gcGVyZm9ybSBhIFBLQ1MjMSBkZWNyeXB0aW9uIHVzaW5nIHRoZQorICogICAgICAgICAgICAgICAgIG1vZGUgZnJvbSB0aGUgY29udGV4dC4gRG8gYW4gUlNBIG9wZXJhdGlvbiwgdGhlbiByZW1vdmUKKyAqICAgICAgICAgICAgICAgICB0aGUgbWVzc2FnZSBwYWRkaW5nCisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBjb250ZXh0CisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uIChPbmx5IG5lZWRlZCBmb3IgTUJFRFRMU19SU0FfUFJJVkFURSkKKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19SU0FfUFVCTElDIG9yIE1CRURUTFNfUlNBX1BSSVZBVEUKKyAqIFxwYXJhbSBvbGVuICAgICB3aWxsIGNvbnRhaW4gdGhlIHBsYWludGV4dCBsZW5ndGgKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgZW5jcnlwdGVkIGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgdGhhdCB3aWxsIGhvbGQgdGhlIHBsYWludGV4dAorICogXHBhcmFtIG91dHB1dF9tYXhfbGVuICAgIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSBvdXRwdXQgYnVmZmVyIG11c3QgYmUgYXMgbGFyZ2UgYXMgdGhlIHNpemUKKyAqICAgICAgICAgICAgICAgICBvZiBjdHgtPk4gKGVnLiAxMjggYnl0ZXMgaWYgUlNBLTEwMjQgaXMgdXNlZCkgb3RoZXJ3aXNlCisgKiAgICAgICAgICAgICAgICAgYW4gZXJyb3IgaXMgdGhyb3duLgorICovCitpbnQgbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X21heF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUGVyZm9ybSBhIFBLQ1MjMSB2MS41IGRlY3J5cHRpb24gKFJTQUVTLVBLQ1MxLXYxXzUtREVDUllQVCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQKKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24gKE9ubHkgbmVlZGVkIGZvciBNQkVEVExTX1JTQV9QUklWQVRFKQorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX1JTQV9QVUJMSUMgb3IgTUJFRFRMU19SU0FfUFJJVkFURQorICogXHBhcmFtIG9sZW4gICAgIHdpbGwgY29udGFpbiB0aGUgcGxhaW50ZXh0IGxlbmd0aAorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBlbmNyeXB0ZWQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB0aGUgcGxhaW50ZXh0CisgKiBccGFyYW0gb3V0cHV0X21heF9sZW4gICAgbWF4aW11bSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIG91dHB1dCBidWZmZXIgbXVzdCBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZQorICogICAgICAgICAgICAgICAgIG9mIGN0eC0+TiAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKSBvdGhlcndpc2UKKyAqICAgICAgICAgICAgICAgICBhbiBlcnJvciBpcyB0aHJvd24uCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Flc19wa2NzMV92MTVfZGVjcnlwdCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X21heF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUGVyZm9ybSBhIFBLQ1MjMSB2Mi4xIE9BRVAgZGVjcnlwdGlvbiAoUlNBRVMtT0FFUC1ERUNSWVBUKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBSU0EgY29udGV4dAorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbiAoT25seSBuZWVkZWQgZm9yIE1CRURUTFNfUlNBX1BSSVZBVEUpCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfUlNBX1BVQkxJQyBvciBNQkVEVExTX1JTQV9QUklWQVRFCisgKiBccGFyYW0gbGFiZWwgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGN1c3RvbSBsYWJlbCB0byB1c2UKKyAqIFxwYXJhbSBsYWJlbF9sZW4gY29udGFpbnMgdGhlIGxhYmVsIGxlbmd0aAorICogXHBhcmFtIG9sZW4gICAgIHdpbGwgY29udGFpbiB0aGUgcGxhaW50ZXh0IGxlbmd0aAorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBlbmNyeXB0ZWQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB0aGUgcGxhaW50ZXh0CisgKiBccGFyYW0gb3V0cHV0X21heF9sZW4gICAgbWF4aW11bSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIG91dHB1dCBidWZmZXIgbXVzdCBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZQorICogICAgICAgICAgICAgICAgIG9mIGN0eC0+TiAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKSBvdGhlcndpc2UKKyAqICAgICAgICAgICAgICAgICBhbiBlcnJvciBpcyB0aHJvd24uCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Flc19vYWVwX2RlY3J5cHQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFiZWwsIHNpemVfdCBsYWJlbF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X21heF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgR2VuZXJpYyB3cmFwcGVyIHRvIHBlcmZvcm0gYSBQS0NTIzEgc2lnbmF0dXJlIHVzaW5nIHRoZQorICogICAgICAgICAgICAgICAgIG1vZGUgZnJvbSB0aGUgY29udGV4dC4gRG8gYSBwcml2YXRlIFJTQSBvcGVyYXRpb24gdG8gc2lnbgorICogICAgICAgICAgICAgICAgIGEgbWVzc2FnZSBkaWdlc3QKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQKKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24gKE5lZWRlZCBmb3IgUEtDUyMxIHYyLjEgZW5jb2RpbmcgYW5kIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19SU0FfUFJJVkFURSkKKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19SU0FfUFVCTElDIG9yIE1CRURUTFNfUlNBX1BSSVZBVEUKKyAqIFxwYXJhbSBtZF9hbGcgICBhIE1CRURUTFNfTURfWFhYICh1c2UgTUJFRFRMU19NRF9OT05FIGZvciBzaWduaW5nIHJhdyBkYXRhKQorICogXHBhcmFtIGhhc2hsZW4gIG1lc3NhZ2UgZGlnZXN0IGxlbmd0aCAoZm9yIE1CRURUTFNfTURfTk9ORSBvbmx5KQorICogXHBhcmFtIGhhc2ggICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBtZXNzYWdlIGRpZ2VzdAorICogXHBhcmFtIHNpZyAgICAgIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB0aGUgY2lwaGVydGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHRoZSBzaWduaW5nIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlICJzaWciIGJ1ZmZlciBtdXN0IGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplCisgKiAgICAgICAgICAgICAgICAgb2YgY3R4LT5OIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpLgorICoKKyAqIFxub3RlICAgICAgICAgICBJbiBjYXNlIG9mIFBLQ1MjMSB2Mi4xIGVuY29kaW5nLCBzZWUgY29tbWVudHMgb24KKyAqIFxub3RlICAgICAgICAgICBcYyBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3NpZ24oKSBmb3IgZGV0YWlscyBvbiBtZF9hbGcgYW5kIGhhc2hfaWQuCisgKi8KK2ludCBtYmVkdGxzX3JzYV9wa2NzMV9zaWduKCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUGVyZm9ybSBhIFBLQ1MjMSB2MS41IHNpZ25hdHVyZSAoUlNBU1NBLVBLQ1MxLXYxXzUtU0lHTikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQKKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24gKE9ubHkgbmVlZGVkIGZvciBNQkVEVExTX1JTQV9QUklWQVRFKQorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX1JTQV9QVUJMSUMgb3IgTUJFRFRMU19SU0FfUFJJVkFURQorICogXHBhcmFtIG1kX2FsZyAgIGEgTUJFRFRMU19NRF9YWFggKHVzZSBNQkVEVExTX01EX05PTkUgZm9yIHNpZ25pbmcgcmF3IGRhdGEpCisgKiBccGFyYW0gaGFzaGxlbiAgbWVzc2FnZSBkaWdlc3QgbGVuZ3RoIChmb3IgTUJFRFRMU19NRF9OT05FIG9ubHkpCisgKiBccGFyYW0gaGFzaCAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIG1lc3NhZ2UgZGlnZXN0CisgKiBccGFyYW0gc2lnICAgICAgYnVmZmVyIHRoYXQgd2lsbCBob2xkIHRoZSBjaXBoZXJ0ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgdGhlIHNpZ25pbmcgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgInNpZyIgYnVmZmVyIG11c3QgYmUgYXMgbGFyZ2UgYXMgdGhlIHNpemUKKyAqICAgICAgICAgICAgICAgICBvZiBjdHgtPk4gKGVnLiAxMjggYnl0ZXMgaWYgUlNBLTEwMjQgaXMgdXNlZCkuCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Fzc2FfcGtjczFfdjE1X3NpZ24oIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBlcmZvcm0gYSBQS0NTIzEgdjIuMSBQU1Mgc2lnbmF0dXJlIChSU0FTU0EtUFNTLVNJR04pCisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBjb250ZXh0CisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uIChOZWVkZWQgZm9yIFBLQ1MjMSB2Mi4xIGVuY29kaW5nIGFuZCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfUlNBX1BSSVZBVEUpCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfUlNBX1BVQkxJQyBvciBNQkVEVExTX1JTQV9QUklWQVRFCisgKiBccGFyYW0gbWRfYWxnICAgYSBNQkVEVExTX01EX1hYWCAodXNlIE1CRURUTFNfTURfTk9ORSBmb3Igc2lnbmluZyByYXcgZGF0YSkKKyAqIFxwYXJhbSBoYXNobGVuICBtZXNzYWdlIGRpZ2VzdCBsZW5ndGggKGZvciBNQkVEVExTX01EX05PTkUgb25seSkKKyAqIFxwYXJhbSBoYXNoICAgICBidWZmZXIgaG9sZGluZyB0aGUgbWVzc2FnZSBkaWdlc3QKKyAqIFxwYXJhbSBzaWcgICAgICBidWZmZXIgdGhhdCB3aWxsIGhvbGQgdGhlIGNpcGhlcnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiB0aGUgc2lnbmluZyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSAic2lnIiBidWZmZXIgbXVzdCBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZQorICogICAgICAgICAgICAgICAgIG9mIGN0eC0+TiAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIGhhc2hfaWQgaW4gdGhlIFJTQSBjb250ZXh0IGlzIHRoZSBvbmUgdXNlZCBmb3IgdGhlCisgKiAgICAgICAgICAgICAgICAgZW5jb2RpbmcuIG1kX2FsZyBpbiB0aGUgZnVuY3Rpb24gY2FsbCBpcyB0aGUgdHlwZSBvZiBoYXNoCisgKiAgICAgICAgICAgICAgICAgdGhhdCBpcyBlbmNvZGVkLiBBY2NvcmRpbmcgdG8gUkZDIDM0NDcgaXQgaXMgYWR2aXNlZCB0bworICogICAgICAgICAgICAgICAgIGtlZXAgYm90aCBoYXNoZXMgdGhlIHNhbWUuCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3NpZ24oIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEdlbmVyaWMgd3JhcHBlciB0byBwZXJmb3JtIGEgUEtDUyMxIHZlcmlmaWNhdGlvbiB1c2luZyB0aGUKKyAqICAgICAgICAgICAgICAgICBtb2RlIGZyb20gdGhlIGNvbnRleHQuIERvIGEgcHVibGljIFJTQSBvcGVyYXRpb24gYW5kIGNoZWNrCisgKiAgICAgICAgICAgICAgICAgdGhlIG1lc3NhZ2UgZGlnZXN0CisgKgorICogXHBhcmFtIGN0eCAgICAgIHBvaW50cyB0byBhbiBSU0EgcHVibGljIGtleQorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbiAoT25seSBuZWVkZWQgZm9yIE1CRURUTFNfUlNBX1BSSVZBVEUpCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfUlNBX1BVQkxJQyBvciBNQkVEVExTX1JTQV9QUklWQVRFCisgKiBccGFyYW0gbWRfYWxnICAgYSBNQkVEVExTX01EX1hYWCAodXNlIE1CRURUTFNfTURfTk9ORSBmb3Igc2lnbmluZyByYXcgZGF0YSkKKyAqIFxwYXJhbSBoYXNobGVuICBtZXNzYWdlIGRpZ2VzdCBsZW5ndGggKGZvciBNQkVEVExTX01EX05PTkUgb25seSkKKyAqIFxwYXJhbSBoYXNoICAgICBidWZmZXIgaG9sZGluZyB0aGUgbWVzc2FnZSBkaWdlc3QKKyAqIFxwYXJhbSBzaWcgICAgICBidWZmZXIgaG9sZGluZyB0aGUgY2lwaGVydGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHRoZSB2ZXJpZnkgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgInNpZyIgYnVmZmVyIG11c3QgYmUgYXMgbGFyZ2UgYXMgdGhlIHNpemUKKyAqICAgICAgICAgICAgICAgICBvZiBjdHgtPk4gKGVnLiAxMjggYnl0ZXMgaWYgUlNBLTEwMjQgaXMgdXNlZCkuCisgKgorICogXG5vdGUgICAgICAgICAgIEluIGNhc2Ugb2YgUEtDUyMxIHYyLjEgZW5jb2RpbmcsIHNlZSBjb21tZW50cyBvbgorICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5KCkgYWJvdXQgbWRfYWxnIGFuZCBoYXNoX2lkLgorICovCitpbnQgbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQZXJmb3JtIGEgUEtDUyMxIHYxLjUgdmVyaWZpY2F0aW9uIChSU0FTU0EtUEtDUzEtdjFfNS1WRVJJRlkpCisgKgorICogXHBhcmFtIGN0eCAgICAgIHBvaW50cyB0byBhbiBSU0EgcHVibGljIGtleQorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbiAoT25seSBuZWVkZWQgZm9yIE1CRURUTFNfUlNBX1BSSVZBVEUpCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfUlNBX1BVQkxJQyBvciBNQkVEVExTX1JTQV9QUklWQVRFCisgKiBccGFyYW0gbWRfYWxnICAgYSBNQkVEVExTX01EX1hYWCAodXNlIE1CRURUTFNfTURfTk9ORSBmb3Igc2lnbmluZyByYXcgZGF0YSkKKyAqIFxwYXJhbSBoYXNobGVuICBtZXNzYWdlIGRpZ2VzdCBsZW5ndGggKGZvciBNQkVEVExTX01EX05PTkUgb25seSkKKyAqIFxwYXJhbSBoYXNoICAgICBidWZmZXIgaG9sZGluZyB0aGUgbWVzc2FnZSBkaWdlc3QKKyAqIFxwYXJhbSBzaWcgICAgICBidWZmZXIgaG9sZGluZyB0aGUgY2lwaGVydGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHRoZSB2ZXJpZnkgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgInNpZyIgYnVmZmVyIG11c3QgYmUgYXMgbGFyZ2UgYXMgdGhlIHNpemUKKyAqICAgICAgICAgICAgICAgICBvZiBjdHgtPk4gKGVnLiAxMjggYnl0ZXMgaWYgUlNBLTEwMjQgaXMgdXNlZCkuCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Fzc2FfcGtjczFfdjE1X3ZlcmlmeSggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQZXJmb3JtIGEgUEtDUyMxIHYyLjEgUFNTIHZlcmlmaWNhdGlvbiAoUlNBU1NBLVBTUy1WRVJJRlkpCisgKiAgICAgICAgICAgICAgICAgKFRoaXMgaXMgdGhlICJzaW1wbGUiIHZlcnNpb24uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBwb2ludHMgdG8gYW4gUlNBIHB1YmxpYyBrZXkKKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24gKE9ubHkgbmVlZGVkIGZvciBNQkVEVExTX1JTQV9QUklWQVRFKQorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX1JTQV9QVUJMSUMgb3IgTUJFRFRMU19SU0FfUFJJVkFURQorICogXHBhcmFtIG1kX2FsZyAgIGEgTUJFRFRMU19NRF9YWFggKHVzZSBNQkVEVExTX01EX05PTkUgZm9yIHNpZ25pbmcgcmF3IGRhdGEpCisgKiBccGFyYW0gaGFzaGxlbiAgbWVzc2FnZSBkaWdlc3QgbGVuZ3RoIChmb3IgTUJFRFRMU19NRF9OT05FIG9ubHkpCisgKiBccGFyYW0gaGFzaCAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIG1lc3NhZ2UgZGlnZXN0CisgKiBccGFyYW0gc2lnICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGNpcGhlcnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiB0aGUgdmVyaWZ5IG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlICJzaWciIGJ1ZmZlciBtdXN0IGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplCisgKiAgICAgICAgICAgICAgICAgb2YgY3R4LT5OIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgaGFzaF9pZCBpbiB0aGUgUlNBIGNvbnRleHQgaXMgdGhlIG9uZSB1c2VkIGZvciB0aGUKKyAqICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb24uIG1kX2FsZyBpbiB0aGUgZnVuY3Rpb24gY2FsbCBpcyB0aGUgdHlwZSBvZgorICogICAgICAgICAgICAgICAgIGhhc2ggdGhhdCBpcyB2ZXJpZmllZC4gQWNjb3JkaW5nIHRvIFJGQyAzNDQ3IGl0IGlzIGFkdmlzZWQgdG8KKyAqICAgICAgICAgICAgICAgICBrZWVwIGJvdGggaGFzaGVzIHRoZSBzYW1lLiBJZiBoYXNoX2lkIGluIHRoZSBSU0EgY29udGV4dCBpcworICogICAgICAgICAgICAgICAgIHVuc2V0LCB0aGUgbWRfYWxnIGZyb20gdGhlIGZ1bmN0aW9uIGNhbGwgaXMgdXNlZC4KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBlcmZvcm0gYSBQS0NTIzEgdjIuMSBQU1MgdmVyaWZpY2F0aW9uIChSU0FTU0EtUFNTLVZFUklGWSkKKyAqICAgICAgICAgICAgICAgICAoVGhpcyBpcyB0aGUgdmVyc2lvbiB3aXRoICJmdWxsIiBvcHRpb25zLikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgcG9pbnRzIHRvIGFuIFJTQSBwdWJsaWMga2V5CisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uIChPbmx5IG5lZWRlZCBmb3IgTUJFRFRMU19SU0FfUFJJVkFURSkKKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19SU0FfUFVCTElDIG9yIE1CRURUTFNfUlNBX1BSSVZBVEUKKyAqIFxwYXJhbSBtZF9hbGcgICBhIE1CRURUTFNfTURfWFhYICh1c2UgTUJFRFRMU19NRF9OT05FIGZvciBzaWduaW5nIHJhdyBkYXRhKQorICogXHBhcmFtIGhhc2hsZW4gIG1lc3NhZ2UgZGlnZXN0IGxlbmd0aCAoZm9yIE1CRURUTFNfTURfTk9ORSBvbmx5KQorICogXHBhcmFtIGhhc2ggICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBtZXNzYWdlIGRpZ2VzdAorICogXHBhcmFtIG1nZjFfaGFzaF9pZCBtZXNzYWdlIGRpZ2VzdCB1c2VkIGZvciBtYXNrIGdlbmVyYXRpb24KKyAqIFxwYXJhbSBleHBlY3RlZF9zYWx0X2xlbiBMZW5ndGggb2YgdGhlIHNhbHQgdXNlZCBpbiBwYWRkaW5nLCB1c2UKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlkgdG8gYWNjZXB0IGFueSBzYWx0IGxlbmd0aAorICogXHBhcmFtIHNpZyAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBjaXBoZXJ0ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgdGhlIHZlcmlmeSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSAic2lnIiBidWZmZXIgbXVzdCBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZQorICogICAgICAgICAgICAgICAgIG9mIGN0eC0+TiAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIGhhc2hfaWQgaW4gdGhlIFJTQSBjb250ZXh0IGlzIGlnbm9yZWQuCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWdmMV9oYXNoX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9zYWx0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ29weSB0aGUgY29tcG9uZW50cyBvZiBhbiBSU0EgY29udGV4dAorICoKKyAqIFxwYXJhbSBkc3QgICAgICBEZXN0aW5hdGlvbiBjb250ZXh0CisgKiBccGFyYW0gc3JjICAgICAgU291cmNlIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBvbiBzdWNjZXNzLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQorICovCitpbnQgbWJlZHRsc19yc2FfY29weSggbWJlZHRsc19yc2FfY29udGV4dCAqZHN0LCBjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICpzcmMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRnJlZSB0aGUgY29tcG9uZW50cyBvZiBhbiBSU0Ega2V5CisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBDb250ZXh0IHRvIGZyZWUKKyAqLwordm9pZCBtYmVkdGxzX3JzYV9mcmVlKCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfcnNhX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKworI2VuZGlmIC8qIHJzYS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NoYTEuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc2hhMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNjdjNmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NoYTEuaApAQCAtMCwwICsxLDEzNiBAQAorLyoqCisgKiBcZmlsZSBzaGExLmgKKyAqCisgKiBcYnJpZWYgU0hBLTEgY3J5cHRvZ3JhcGhpYyBoYXNoIGZ1bmN0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfU0hBMV9ICisjZGVmaW5lIE1CRURUTFNfU0hBMV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTFfQUxUKQorLy8gUmVndWxhciBpbXBsZW1lbnRhdGlvbgorLy8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBTSEEtMSBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQzMl90IHRvdGFsWzJdOyAgICAgICAgICAvKiE8IG51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQgICovCisgICAgdWludDMyX3Qgc3RhdGVbNV07ICAgICAgICAgIC8qITwgaW50ZXJtZWRpYXRlIGRpZ2VzdCBzdGF0ZSAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07ICAgLyohPCBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZCAqLworfQorbWJlZHRsc19zaGExX2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgU0hBLTEgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBTSEEtMSBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGExX2luaXQoIG1iZWR0bHNfc2hhMV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgU0hBLTEgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBTSEEtMSBjb250ZXh0IHRvIGJlIGNsZWFyZWQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTFfZnJlZSggbWJlZHRsc19zaGExX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbG9uZSAodGhlIHN0YXRlIG9mKSBhIFNIQS0xIGNvbnRleHQKKyAqCisgKiBccGFyYW0gZHN0ICAgICAgVGhlIGRlc3RpbmF0aW9uIGNvbnRleHQKKyAqIFxwYXJhbSBzcmMgICAgICBUaGUgY29udGV4dCB0byBiZSBjbG9uZWQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTFfY2xvbmUoIG1iZWR0bHNfc2hhMV9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19zaGExX2NvbnRleHQgKnNyYyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTSEEtMSBjb250ZXh0IHNldHVwCisgKgorICogXHBhcmFtIGN0eCAgICAgIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTFfc3RhcnRzKCBtYmVkdGxzX3NoYTFfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNIQS0xIHByb2Nlc3MgYnVmZmVyCisgKgorICogXHBhcmFtIGN0eCAgICAgIFNIQS0xIGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqLwordm9pZCBtYmVkdGxzX3NoYTFfdXBkYXRlKCBtYmVkdGxzX3NoYTFfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU0hBLTEgZmluYWwgZGlnZXN0CisgKgorICogXHBhcmFtIGN0eCAgICAgIFNIQS0xIGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICBTSEEtMSBjaGVja3N1bSByZXN1bHQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTFfZmluaXNoKCBtYmVkdGxzX3NoYTFfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIG91dHB1dFsyMF0gKTsKKworLyogSW50ZXJuYWwgdXNlICovCit2b2lkIG1iZWR0bHNfc2hhMV9wcm9jZXNzKCBtYmVkdGxzX3NoYTFfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX1NIQTFfQUxUICovCisjaW5jbHVkZSAic2hhMV9hbHQuaCIKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgT3V0cHV0ID0gU0hBLTEoIGlucHV0IGJ1ZmZlciApCisgKgorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIFNIQS0xIGNoZWNrc3VtIHJlc3VsdAorICovCit2b2lkIG1iZWR0bHNfc2hhMSggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLCB1bnNpZ25lZCBjaGFyIG91dHB1dFsyMF0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfc2hhMV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBtYmVkdGxzX3NoYTEuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zaGEyNTYuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc2hhMjU2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwNDFhZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc2hhMjU2LmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qKgorICogXGZpbGUgc2hhMjU2LmgKKyAqCisgKiBcYnJpZWYgU0hBLTIyNCBhbmQgU0hBLTI1NiBjcnlwdG9ncmFwaGljIGhhc2ggZnVuY3Rpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19TSEEyNTZfSAorI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9BTFQpCisvLyBSZWd1bGFyIGltcGxlbWVudGF0aW9uCisvLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNIQS0yNTYgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCB0b3RhbFsyXTsgICAgICAgICAgLyohPCBudW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkICAqLworICAgIHVpbnQzMl90IHN0YXRlWzhdOyAgICAgICAgICAvKiE8IGludGVybWVkaWF0ZSBkaWdlc3Qgc3RhdGUgICovCisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNjRdOyAgIC8qITwgZGF0YSBibG9jayBiZWluZyBwcm9jZXNzZWQgKi8KKyAgICBpbnQgaXMyMjQ7ICAgICAgICAgICAgICAgICAgLyohPCAwID0+IFNIQS0yNTYsIGVsc2UgU0hBLTIyNCAqLworfQorbWJlZHRsc19zaGEyNTZfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBTSEEtMjU2IGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgU0hBLTI1NiBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfaW5pdCggbWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsZWFyIFNIQS0yNTYgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBTSEEtMjU2IGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2ZyZWUoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbG9uZSAodGhlIHN0YXRlIG9mKSBhIFNIQS0yNTYgY29udGV4dAorICoKKyAqIFxwYXJhbSBkc3QgICAgICBUaGUgZGVzdGluYXRpb24gY29udGV4dAorICogXHBhcmFtIHNyYyAgICAgIFRoZSBjb250ZXh0IHRvIGJlIGNsb25lZAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2Nsb25lKCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpzcmMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU0hBLTI1NiBjb250ZXh0IHNldHVwCisgKgorICogXHBhcmFtIGN0eCAgICAgIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBpczIyNCAgICAwID0gdXNlIFNIQTI1NiwgMSA9IHVzZSBTSEEyMjQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgaW50IGlzMjI0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNIQS0yNTYgcHJvY2VzcyBidWZmZXIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgU0hBLTI1NiBjb250ZXh0CisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTSEEtMjU2IGZpbmFsIGRpZ2VzdAorICoKKyAqIFxwYXJhbSBjdHggICAgICBTSEEtMjU2IGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICBTSEEtMjI0LzI1NiBjaGVja3N1bSByZXN1bHQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl9maW5pc2goIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbMzJdICk7CisKKy8qIEludGVybmFsIHVzZSAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl9wcm9jZXNzKCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVs2NF0gKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vsc2UgIC8qIE1CRURUTFNfU0hBMjU2X0FMVCAqLworI2luY2x1ZGUgInNoYTI1Nl9hbHQuaCIKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9BTFQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBPdXRwdXQgPSBTSEEtMjU2KCBpbnB1dCBidWZmZXIgKQorICoKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBTSEEtMjI0LzI1NiBjaGVja3N1bSByZXN1bHQKKyAqIFxwYXJhbSBpczIyNCAgICAwID0gdXNlIFNIQTI1NiwgMSA9IHVzZSBTSEEyMjQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1NiggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFszMl0sIGludCBpczIyNCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19zaGEyNTZfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogbWJlZHRsc19zaGEyNTYuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zaGE1MTIuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc2hhNTEyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3Njk0ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc2hhNTEyLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qKgorICogXGZpbGUgc2hhNTEyLmgKKyAqCisgKiBcYnJpZWYgU0hBLTM4NCBhbmQgU0hBLTUxMiBjcnlwdG9ncmFwaGljIGhhc2ggZnVuY3Rpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19TSEE1MTJfSAorI2RlZmluZSBNQkVEVExTX1NIQTUxMl9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTUxMl9BTFQpCisvLyBSZWd1bGFyIGltcGxlbWVudGF0aW9uCisvLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNIQS01MTIgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50NjRfdCB0b3RhbFsyXTsgICAgICAgICAgLyohPCBudW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkICAqLworICAgIHVpbnQ2NF90IHN0YXRlWzhdOyAgICAgICAgICAvKiE8IGludGVybWVkaWF0ZSBkaWdlc3Qgc3RhdGUgICovCisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMTI4XTsgIC8qITwgZGF0YSBibG9jayBiZWluZyBwcm9jZXNzZWQgKi8KKyAgICBpbnQgaXMzODQ7ICAgICAgICAgICAgICAgICAgLyohPCAwID0+IFNIQS01MTIsIGVsc2UgU0hBLTM4NCAqLworfQorbWJlZHRsc19zaGE1MTJfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBTSEEtNTEyIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgU0hBLTUxMiBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGE1MTJfaW5pdCggbWJlZHRsc19zaGE1MTJfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsZWFyIFNIQS01MTIgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBTSEEtNTEyIGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfc2hhNTEyX2ZyZWUoIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbG9uZSAodGhlIHN0YXRlIG9mKSBhIFNIQS01MTIgY29udGV4dAorICoKKyAqIFxwYXJhbSBkc3QgICAgICBUaGUgZGVzdGluYXRpb24gY29udGV4dAorICogXHBhcmFtIHNyYyAgICAgIFRoZSBjb250ZXh0IHRvIGJlIGNsb25lZAorICovCit2b2lkIG1iZWR0bHNfc2hhNTEyX2Nsb25lKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICpzcmMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU0hBLTUxMiBjb250ZXh0IHNldHVwCisgKgorICogXHBhcmFtIGN0eCAgICAgIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBpczM4NCAgICAwID0gdXNlIFNIQTUxMiwgMSA9IHVzZSBTSEEzODQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTUxMl9zdGFydHMoIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKmN0eCwgaW50IGlzMzg0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNIQS01MTIgcHJvY2VzcyBidWZmZXIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgU0hBLTUxMiBjb250ZXh0CisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKi8KK3ZvaWQgbWJlZHRsc19zaGE1MTJfdXBkYXRlKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTSEEtNTEyIGZpbmFsIGRpZ2VzdAorICoKKyAqIFxwYXJhbSBjdHggICAgICBTSEEtNTEyIGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICBTSEEtMzg0LzUxMiBjaGVja3N1bSByZXN1bHQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTUxMl9maW5pc2goIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbNjRdICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX1NIQTUxMl9BTFQgKi8KKyNpbmNsdWRlICJzaGE1MTJfYWx0LmgiCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgT3V0cHV0ID0gU0hBLTUxMiggaW5wdXQgYnVmZmVyICkKKyAqCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgU0hBLTM4NC81MTIgY2hlY2tzdW0gcmVzdWx0CisgKiBccGFyYW0gaXMzODQgICAgMCA9IHVzZSBTSEE1MTIsIDEgPSB1c2UgU0hBMzg0CisgKi8KK3ZvaWQgbWJlZHRsc19zaGE1MTIoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs2NF0sIGludCBpczM4NCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19zaGE1MTJfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworCisvKiBJbnRlcm5hbCB1c2UgKi8KK3ZvaWQgbWJlZHRsc19zaGE1MTJfcHJvY2VzcyggbWJlZHRsc19zaGE1MTJfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbMTI4XSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogbWJlZHRsc19zaGE1MTIuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2wuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE0OTlkMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsLmgKQEAgLTAsMCArMSwyNTUyIEBACisvKioKKyAqIFxmaWxlIHNzbC5oCisgKgorICogXGJyaWVmIFNTTC9UTFMgZnVuY3Rpb25zLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1NTTF9ICisjZGVmaW5lIE1CRURUTFNfU1NMX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJlY3AuaCIKKworI2luY2x1ZGUgInNzbF9jaXBoZXJzdWl0ZXMuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorI2luY2x1ZGUgIng1MDlfY3J0LmgiCisjaW5jbHVkZSAieDUwOV9jcmwuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorI2luY2x1ZGUgImRobS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKQorI2luY2x1ZGUgImVjZGguaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1pMSUJfU1VQUE9SVCkKKyNpbmNsdWRlICJ6bGliLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybV90aW1lLmgiCisjZW5kaWYKKworLyoKKyAqIFNTTCBFcnJvciBjb2RlcworICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFICAgICAgICAgICAgICAgLTB4NzA4MCAgLyoqPCBUaGUgcmVxdWVzdGVkIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICAgICAgICAgICAgICAgICAgICAtMHg3MTAwICAvKio8IEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUMgICAgICAgICAgICAgICAgICAgICAgIC0weDcxODAgIC8qKjwgVmVyaWZpY2F0aW9uIG9mIHRoZSBtZXNzYWdlIE1BQyBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRCAgICAgICAgICAgICAgICAgICAgLTB4NzIwMCAgLyoqPCBBbiBpbnZhbGlkIFNTTCByZWNvcmQgd2FzIHJlY2VpdmVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQ09OTl9FT0YgICAgICAgICAgICAgICAgICAgICAgICAgIC0weDcyODAgIC8qKjwgVGhlIGNvbm5lY3Rpb24gaW5kaWNhdGVkIGFuIEVPRi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX1VOS05PV05fQ0lQSEVSICAgICAgICAgICAgICAgICAgICAtMHg3MzAwICAvKio8IEFuIHVua25vd24gY2lwaGVyIHdhcyByZWNlaXZlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX05PX0NJUEhFUl9DSE9TRU4gICAgICAgICAgICAgICAgICAtMHg3MzgwICAvKio8IFRoZSBzZXJ2ZXIgaGFzIG5vIGNpcGhlcnN1aXRlcyBpbiBjb21tb24gd2l0aCB0aGUgY2xpZW50LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfTk9fUk5HICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0weDc0MDAgIC8qKjwgTm8gUk5HIHdhcyBwcm92aWRlZCB0byB0aGUgU1NMIG1vZHVsZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX05PX0NMSUVOVF9DRVJUSUZJQ0FURSAgICAgICAgICAgICAtMHg3NDgwICAvKio8IE5vIGNsaWVudCBjZXJ0aWZpY2F0aW9uIHJlY2VpdmVkIGZyb20gdGhlIGNsaWVudCwgYnV0IHJlcXVpcmVkIGJ5IHRoZSBhdXRoZW50aWNhdGlvbiBtb2RlLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQ0VSVElGSUNBVEVfVE9PX0xBUkdFICAgICAgICAgICAgIC0weDc1MDAgIC8qKjwgT3VyIG93biBjZXJ0aWZpY2F0ZShzKSBpcy9hcmUgdG9vIGxhcmdlIHRvIHNlbmQgaW4gYW4gU1NMIG1lc3NhZ2UuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRCAgICAgICAgICAgICAgLTB4NzU4MCAgLyoqPCBUaGUgb3duIGNlcnRpZmljYXRlIGlzIG5vdCBzZXQsIGJ1dCBuZWVkZWQgYnkgdGhlIHNlcnZlci4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX1BSSVZBVEVfS0VZX1JFUVVJUkVEICAgICAgICAgICAgICAtMHg3NjAwICAvKio8IFRoZSBvd24gcHJpdmF0ZSBrZXkgb3IgcHJlLXNoYXJlZCBrZXkgaXMgbm90IHNldCwgYnV0IG5lZWRlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0NBX0NIQUlOX1JFUVVJUkVEICAgICAgICAgICAgICAgICAtMHg3NjgwICAvKio8IE5vIENBIENoYWluIGlzIHNldCwgYnV0IHJlcXVpcmVkIHRvIG9wZXJhdGUuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgICAgICAgICAgICAgICAgLTB4NzcwMCAgLyoqPCBBbiB1bmV4cGVjdGVkIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gb3VyIHBlZXIuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9GQVRBTF9BTEVSVF9NRVNTQUdFICAgICAgICAgICAgICAgLTB4Nzc4MCAgLyoqPCBBIGZhdGFsIGFsZXJ0IG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gb3VyIHBlZXIuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9QRUVSX1ZFUklGWV9GQUlMRUQgICAgICAgICAgICAgICAgLTB4NzgwMCAgLyoqPCBWZXJpZmljYXRpb24gb2Ygb3VyIHBlZXIgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlkgICAgICAgICAgICAgICAgIC0weDc4ODAgIC8qKjwgVGhlIHBlZXIgbm90aWZpZWQgdXMgdGhhdCB0aGUgY29ubmVjdGlvbiBpcyBnb2luZyB0byBiZSBjbG9zZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICAgICAgICAgICAgICAgLTB4NzkwMCAgLyoqPCBQcm9jZXNzaW5nIG9mIHRoZSBDbGllbnRIZWxsbyBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICAgICAgICAgICAgICAgLTB4Nzk4MCAgLyoqPCBQcm9jZXNzaW5nIG9mIHRoZSBTZXJ2ZXJIZWxsbyBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEUgICAgICAgICAgICAgICAgLTB4N0EwMCAgLyoqPCBQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfUkVRVUVTVCAgICAgICAgLTB4N0E4MCAgLyoqPCBQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZVJlcXVlc3QgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgICAgICAgIC0weDdCMDAgIC8qKjwgUHJvY2Vzc2luZyBvZiB0aGUgU2VydmVyS2V5RXhjaGFuZ2UgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMT19ET05FICAgICAgICAgIC0weDdCODAgIC8qKjwgUHJvY2Vzc2luZyBvZiB0aGUgU2VydmVySGVsbG9Eb25lIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFICAgICAgICAtMHg3QzAwICAvKio8IFByb2Nlc3Npbmcgb2YgdGhlIENsaWVudEtleUV4Y2hhbmdlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX1JQICAgICAtMHg3QzgwICAvKio8IFByb2Nlc3Npbmcgb2YgdGhlIENsaWVudEtleUV4Y2hhbmdlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCBpbiBESE0gLyBFQ0RIIFJlYWQgUHVibGljLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfQ1MgICAgIC0weDdEMDAgIC8qKjwgUHJvY2Vzc2luZyBvZiB0aGUgQ2xpZW50S2V5RXhjaGFuZ2UgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIGluIERITSAvIEVDREggQ2FsY3VsYXRlIFNlY3JldC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9WRVJJRlkgICAgICAgICAtMHg3RDgwICAvKio8IFByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlVmVyaWZ5IGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DSEFOR0VfQ0lQSEVSX1NQRUMgICAgICAgICAtMHg3RTAwICAvKio8IFByb2Nlc3Npbmcgb2YgdGhlIENoYW5nZUNpcGhlclNwZWMgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0ZJTklTSEVEICAgICAgICAgICAgICAgICAgIC0weDdFODAgIC8qKjwgUHJvY2Vzc2luZyBvZiB0aGUgRmluaXNoZWQgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgIC0weDdGMDAgIC8qKjwgTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgICAgICAgICAgICAgICAgICAgLTB4N0Y4MCAgLyoqPCBIYXJkd2FyZSBhY2NlbGVyYXRpb24gZnVuY3Rpb24gcmV0dXJuZWQgd2l0aCBlcnJvciAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFMTFRIUk9VR0ggICAgICAgICAgICAgIC0weDZGODAgIC8qKjwgSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZ1bmN0aW9uIHNraXBwZWQgLyBsZWZ0IGFsb25lIGRhdGEgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0NPTVBSRVNTSU9OX0ZBSUxFRCAgICAgICAgICAgICAgICAtMHg2RjAwICAvKio8IFByb2Nlc3Npbmcgb2YgdGhlIGNvbXByZXNzaW9uIC8gZGVjb21wcmVzc2lvbiBmYWlsZWQgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19QUk9UT0NPTF9WRVJTSU9OICAgICAgICAgICAtMHg2RTgwICAvKio8IEhhbmRzaGFrZSBwcm90b2NvbCBub3Qgd2l0aGluIG1pbi9tYXggYm91bmRhcmllcyAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX05FV19TRVNTSU9OX1RJQ0tFVCAgICAgICAgIC0weDZFMDAgIC8qKjwgUHJvY2Vzc2luZyBvZiB0aGUgTmV3U2Vzc2lvblRpY2tldCBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9TRVNTSU9OX1RJQ0tFVF9FWFBJUkVEICAgICAgICAgICAgLTB4NkQ4MCAgLyoqPCBTZXNzaW9uIHRpY2tldCBoYXMgZXhwaXJlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX1BLX1RZUEVfTUlTTUFUQ0ggICAgICAgICAgICAgICAgICAtMHg2RDAwICAvKio8IFB1YmxpYyBrZXkgdHlwZSBtaXNtYXRjaCAoZWcsIGFza2VkIGZvciBSU0Ega2V5IGV4Y2hhbmdlIGFuZCBwcmVzZW50ZWQgRUMga2V5KSAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfVU5LTk9XTl9JREVOVElUWSAgICAgICAgICAgICAgICAgIC0weDZDODAgIC8qKjwgVW5rbm93biBpZGVudGl0eSByZWNlaXZlZCAoZWcsIFBTSyBpZGVudGl0eSkgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICAgICAgICAgICAgICAgICAgICAtMHg2QzAwICAvKio8IEludGVybmFsIGVycm9yIChlZywgdW5leHBlY3RlZCBmYWlsdXJlIGluIGxvd2VyLWxldmVsIG1vZHVsZSkgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0NPVU5URVJfV1JBUFBJTkcgICAgICAgICAgICAgICAgICAtMHg2QjgwICAvKio8IEEgY291bnRlciB3b3VsZCB3cmFwIChlZywgdG9vIG1hbnkgbWVzc2FnZXMgZXhjaGFuZ2VkKS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX1dBSVRJTkdfU0VSVkVSX0hFTExPX1JFTkVHTyAgICAgICAtMHg2QjAwICAvKio8IFVuZXhwZWN0ZWQgbWVzc2FnZSBhdCBTZXJ2ZXJIZWxsbyBpbiByZW5lZ290aWF0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfSEVMTE9fVkVSSUZZX1JFUVVJUkVEICAgICAgICAgICAgIC0weDZBODAgIC8qKjwgRFRMUyBjbGllbnQgbXVzdCByZXRyeSBmb3IgaGVsbG8gdmVyaWZpY2F0aW9uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9CVUZGRVJfVE9PX1NNQUxMICAgICAgICAgICAgICAgICAgLTB4NkEwMCAgLyoqPCBBIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gcmVjZWl2ZSBvciB3cml0ZSBhIG1lc3NhZ2UgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX05PX1VTQUJMRV9DSVBIRVJTVUlURSAgICAgICAgICAgICAtMHg2OTgwICAvKio8IE5vbmUgb2YgdGhlIGNvbW1vbiBjaXBoZXJzdWl0ZXMgaXMgdXNhYmxlIChlZywgbm8gc3VpdGFibGUgY2VydGlmaWNhdGUsIHNlZSBkZWJ1ZyBtZXNzYWdlcykuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgLTB4NjkwMCAgLyoqPCBDb25uZWN0aW9uIHJlcXVpcmVzIGEgcmVhZCBjYWxsLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgIC0weDY4ODAgIC8qKjwgQ29ubmVjdGlvbiByZXF1aXJlcyBhIHdyaXRlIGNhbGwuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4NjgwMCAgLyoqPCBUaGUgb3BlcmF0aW9uIHRpbWVkIG91dC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0NMSUVOVF9SRUNPTk5FQ1QgICAgICAgICAgICAgICAgICAtMHg2NzgwICAvKio8IFRoZSBjbGllbnQgaW5pdGlhdGVkIGEgcmVjb25uZWN0IGZyb20gdGhlIHNhbWUgcG9ydC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfUkVDT1JEICAgICAgICAgICAgICAgICAtMHg2NzAwICAvKio8IFJlY29yZCBoZWFkZXIgbG9va3MgdmFsaWQgYnV0IGlzIG5vdCBleHBlY3RlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX05PTl9GQVRBTCAgICAgICAgICAgICAgICAgICAgICAgICAtMHg2NjgwICAvKio8IFRoZSBhbGVydCBtZXNzYWdlIHJlY2VpdmVkIGluZGljYXRlcyBhIG5vbi1mYXRhbCBlcnJvci4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfVkVSSUZZX0hBU0ggICAgICAgICAgICAgICAtMHg2NjAwICAvKio8IENvdWxkbid0IHNldCB0aGUgaGFzaCBmb3IgdmVyaWZ5aW5nIENlcnRpZmljYXRlVmVyaWZ5ICovCisKKy8qCisgKiBWYXJpb3VzIGNvbnN0YW50cworICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMyAgICAgICAgICAgICAzCisjZGVmaW5lIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCAgICAgICAgICAgICAwICAgLyohPCBTU0wgdjMuMCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEgICAgICAgICAgICAgMSAgIC8qITwgVExTIHYxLjAgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICAgICAgICAgICAgIDIgICAvKiE8IFRMUyB2MS4xICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyAgICAgICAgICAgICAzICAgLyohPCBUTFMgdjEuMiAqLworCisjZGVmaW5lIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0gICAgICAgICAgICAwICAgLyohPCBUTFMgICAgICAqLworI2RlZmluZSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gICAgICAgICAgMSAgIC8qITwgRFRMUyAgICAgKi8KKworI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfSE9TVF9OQU1FX0xFTiAgICAgICAgICAgMjU1IC8qITwgTWF4aW11bSBob3N0IG5hbWUgZGVmaW5lZCBpbiBSRkMgMTAzNSAqLworCisvKiBSRkMgNjA2NiBzZWN0aW9uIDQsIHNlZSBhbHNvIG1mbF9jb2RlX3RvX2xlbmd0aCBpbiBzc2xfdGxzLmMKKyAqIE5PTkUgbXVzdCBiZSB6ZXJvIHNvIHRoYXQgbWVtc2V0KClpbmcgc3RydWN0dXJlIHRvIHplcm8gd29ya3MgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOX05PTkUgICAgICAgICAgIDAgICAvKiE8IGRvbid0IHVzZSB0aGlzIGV4dGVuc2lvbiAgICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl81MTIgICAgICAgICAgICAxICAgLyohPCBNYXhGcmFnbWVudExlbmd0aCAyXjkgICAgICAqLworI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMTAyNCAgICAgICAgICAgMiAgIC8qITwgTWF4RnJhZ21lbnRMZW5ndGggMl4xMCAgICAgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzIwNDggICAgICAgICAgIDMgICAvKiE8IE1heEZyYWdtZW50TGVuZ3RoIDJeMTEgICAgICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl80MDk2ICAgICAgICAgICA0ICAgLyohPCBNYXhGcmFnbWVudExlbmd0aCAyXjEyICAgICAqLworI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fSU5WQUxJRCAgICAgICAgNSAgIC8qITwgZmlyc3QgaW52YWxpZCB2YWx1ZSAgICAgICAgKi8KKworI2RlZmluZSBNQkVEVExTX1NTTF9JU19DTElFTlQgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9JU19TRVJWRVIgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIE1CRURUTFNfU1NMX0lTX05PVF9GQUxMQkFDSyAgICAgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX0lTX0ZBTExCQUNLICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRElTQUJMRUQgICAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRU5BQkxFRCAgICAgICAgIDEKKworI2RlZmluZSBNQkVEVExTX1NTTF9FVE1fRElTQUJMRUQgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9FVE1fRU5BQkxFRCAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIE1CRURUTFNfU1NMX0NPTVBSRVNTX05VTEwgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX0NPTVBSRVNTX0RFRkxBVEUgICAgICAgICAgICAxCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfVkVSSUZZX05PTkUgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19TU0xfVkVSSUZZX1JFUVVJUkVEICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUJFRFRMU19TU0xfVkVSSUZZX1VOU0VUICAgICAgICAgICAgICAgIDMgLyogVXNlZCBvbmx5IGZvciBzbmlfYXV0aG1vZGUgKi8KKworI2RlZmluZSBNQkVEVExTX1NTTF9MRUdBQ1lfUkVORUdPVElBVElPTiAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9TRUNVUkVfUkVORUdPVElBVElPTiAgICAgICAgMQorCisjZGVmaW5lIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRElTQUJMRUQgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRU5BQkxFRCAgICAgICAxCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfQU5USV9SRVBMQVlfRElTQUJMRUQgICAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfQU5USV9SRVBMQVlfRU5BQkxFRCAgICAgICAgIDEKKworI2RlZmluZSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX05PVF9FTkZPUkNFRCAgLTEKKyNkZWZpbmUgTUJFRFRMU19TU0xfUkVORUdPX01BWF9SRUNPUkRTX0RFRkFVTFQgIDE2CisKKyNkZWZpbmUgTUJFRFRMU19TU0xfTEVHQUNZX05PX1JFTkVHT1RJQVRJT04gICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfTEVHQUNZX0FMTE9XX1JFTkVHT1RJQVRJT04gIDEKKyNkZWZpbmUgTUJFRFRMU19TU0xfTEVHQUNZX0JSRUFLX0hBTkRTSEFLRSAgICAgIDIKKworI2RlZmluZSBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0RJU0FCTEVEICAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0VOQUJMRUQgICAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQ19MRU4gICAgICAgICAgMTAgIC8qIDgwIGJpdHMsIHJmYyA2MDY2IHNlY3Rpb24gNyAqLworCisjZGVmaW5lIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19ESVNBQkxFRCAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFNfRU5BQkxFRCAgICAgIDEKKworI2RlZmluZSBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElOR19ESVNBQkxFRCAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0VOQUJMRUQgICAgIDEKKworI2RlZmluZSBNQkVEVExTX1NTTF9BUkM0X0VOQUJMRUQgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9BUkM0X0RJU0FCTEVEICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIE1CRURUTFNfU1NMX1BSRVNFVF9ERUZBVUxUICAgICAgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX1BSRVNFVF9TVUlURUIgICAgICAgICAgICAgICAyCisKKy8qCisgKiBEZWZhdWx0IHJhbmdlIGZvciBEVExTIHJldHJhbnNtaXNzaW9uIHRpbWVyIHZhbHVlLCBpbiBtaWxsaXNlY29uZHMuCisgKiBSRkMgNjM0NyA0LjIuNC4xIHNheXMgZnJvbSAxIHNlY29uZCB0byA2MCBzZWNvbmRzLgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfVElNRU9VVF9ERkxfTUlOICAgIDEwMDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19USU1FT1VUX0RGTF9NQVggICA2MDAwMAorCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncworICoKKyAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGNhbiBzZXQgZm9yIHRoaXMgbW9kdWxlIGFyZSBpbiB0aGlzIHNlY3Rpb24uCisgKiBFaXRoZXIgY2hhbmdlIHRoZW0gaW4gY29uZmlnLmggb3IgZGVmaW5lIHRoZW0gb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZS4KKyAqIFx7CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfU1NMX0RFRkFVTFRfVElDS0VUX0xJRkVUSU1FKQorI2RlZmluZSBNQkVEVExTX1NTTF9ERUZBVUxUX1RJQ0tFVF9MSUZFVElNRSAgICAgODY0MDAgLyoqPCBMaWZldGltZSBvZiBzZXNzaW9uIHRpY2tldHMgKGlmIGVuYWJsZWQpICovCisjZW5kaWYKKworLyoKKyAqIE1heGl1bSBmcmFnbWVudCBsZW5ndGggaW4gYnl0ZXMsCisgKiBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIGVhY2ggb2YgdGhlIHR3byBpbnRlcm5hbCBJL08gYnVmZmVycy4KKyAqCisgKiBOb3RlOiB0aGUgUkZDIGRlZmluZXMgdGhlIGRlZmF1bHQgc2l6ZSBvZiBTU0wgLyBUTFMgbWVzc2FnZXMuIElmIHlvdQorICogY2hhbmdlIHRoZSB2YWx1ZSBoZXJlLCBvdGhlciBjbGllbnRzIC8gc2VydmVycyBtYXkgbm90IGJlIGFibGUgdG8KKyAqIGNvbW11bmljYXRlIHdpdGggeW91IGFueW1vcmUuIE9ubHkgY2hhbmdlIHRoaXMgdmFsdWUgaWYgeW91IGNvbnRyb2wKKyAqIGJvdGggc2lkZXMgb2YgdGhlIGNvbm5lY3Rpb24gYW5kIGhhdmUgaXQgcmVkdWNlZCBhdCBib3RoIHNpZGVzLCBvcgorICogaWYgeW91J3JlIHVzaW5nIHRoZSBNYXggRnJhZ21lbnQgTGVuZ3RoIGV4dGVuc2lvbiBhbmQgeW91IGtub3cgYWxsIHlvdXIKKyAqIHBlZXJzIGFyZSB1c2luZyBpdCB0b28hCisgKi8KKyNpZiAhZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4pCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiAgICAgICAgIDE2Mzg0ICAgLyoqPCBTaXplIG9mIHRoZSBpbnB1dCAvIG91dHB1dCBidWZmZXIgKi8KKyNlbmRpZgorCisvKiBcfSBuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncyAqLworCisvKgorICogTGVuZ3RoIG9mIHRoZSB2ZXJpZnkgZGF0YSBmb3Igc2VjdXJlIHJlbmVnb3RpYXRpb24KKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyNkZWZpbmUgTUJFRFRMU19TU0xfVkVSSUZZX0RBVEFfTUFYX0xFTiAzNgorI2Vsc2UKKyNkZWZpbmUgTUJFRFRMU19TU0xfVkVSSUZZX0RBVEFfTUFYX0xFTiAxMgorI2VuZGlmCisKKy8qCisgKiBTaWduYWxpbmcgY2lwaGVyc3VpdGUgdmFsdWVzIChTQ1NWKQorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyAgICAweEZGICAgLyoqPCByZW5lZ290aWF0aW9uIGluZm8gZXh0ICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1ZfVkFMVUUgICAgICAgICAweDU2MDAgLyoqPCBSRkMgNzUwNyBzZWN0aW9uIDIgKi8KKworLyoKKyAqIFN1cHBvcnRlZCBTaWduYXR1cmUgYW5kIEhhc2ggYWxnb3JpdGhtcyAoRm9yIFRMUyAxLjIpCisgKiBSRkMgNTI0NiBzZWN0aW9uIDcuNC4xLjQuMQorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0hBU0hfTk9ORSAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX0hBU0hfTUQ1ICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1CRURUTFNfU1NMX0hBU0hfU0hBMSAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1CRURUTFNfU1NMX0hBU0hfU0hBMjI0ICAgICAgICAgICAgICAzCisjZGVmaW5lIE1CRURUTFNfU1NMX0hBU0hfU0hBMjU2ICAgICAgICAgICAgICA0CisjZGVmaW5lIE1CRURUTFNfU1NMX0hBU0hfU0hBMzg0ICAgICAgICAgICAgICA1CisjZGVmaW5lIE1CRURUTFNfU1NMX0hBU0hfU0hBNTEyICAgICAgICAgICAgICA2CisKKyNkZWZpbmUgTUJFRFRMU19TU0xfU0lHX0FOT04gICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfU0lHX1JTQSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19TU0xfU0lHX0VDRFNBICAgICAgICAgICAgICAgIDMKKworLyoKKyAqIENsaWVudCBDZXJ0aWZpY2F0ZSBUeXBlcworICogUkZDIDUyNDYgc2VjdGlvbiA3LjQuNCBwbHVzIFJGQyA0NDkyIHNlY3Rpb24gNS41CisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0VSVF9UWVBFX1JTQV9TSUdOICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0VSVF9UWVBFX0VDRFNBX1NJR04gICAgNjQKKworLyoKKyAqIE1lc3NhZ2UsIGFsZXJ0IGFuZCBoYW5kc2hha2UgdHlwZXMKKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9NU0dfQ0hBTkdFX0NJUEhFUl9TUEVDICAgICAyMAorI2RlZmluZSBNQkVEVExTX1NTTF9NU0dfQUxFUlQgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICAgICAgICAgICAgICAyMgorI2RlZmluZSBNQkVEVExTX1NTTF9NU0dfQVBQTElDQVRJT05fREFUQSAgICAgICAyMworCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX1dBUk5JTkcgICAgICAgICAxCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMICAgICAgICAgICAyCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0NMT1NFX05PVElGWSAgICAgICAgICAgMCAgLyogMHgwMCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5FWFBFQ1RFRF9NRVNTQUdFICAgIDEwICAvKiAweDBBICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19CQURfUkVDT1JEX01BQyAgICAgICAgMjAgIC8qIDB4MTQgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ1JZUFRJT05fRkFJTEVEICAgICAyMSAgLyogMHgxNSAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfUkVDT1JEX09WRVJGTE9XICAgICAgIDIyICAvKiAweDE2ICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19ERUNPTVBSRVNTSU9OX0ZBSUxVUkUgMzAgIC8qIDB4MUUgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0hBTkRTSEFLRV9GQUlMVVJFICAgICA0MCAgLyogMHgyOCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fQ0VSVCAgICAgICAgICAgICAgIDQxICAvKiAweDI5ICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19CQURfQ0VSVCAgICAgICAgICAgICAgNDIgIC8qIDB4MkEgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOU1VQUE9SVEVEX0NFUlQgICAgICA0MyAgLyogMHgyQiAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfQ0VSVF9SRVZPS0VEICAgICAgICAgIDQ0ICAvKiAweDJDICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19DRVJUX0VYUElSRUQgICAgICAgICAgNDUgIC8qIDB4MkQgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0NFUlRfVU5LTk9XTiAgICAgICAgICA0NiAgLyogMHgyRSAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSUxMRUdBTF9QQVJBTUVURVIgICAgIDQ3ICAvKiAweDJGICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTktOT1dOX0NBICAgICAgICAgICAgNDggIC8qIDB4MzAgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0FDQ0VTU19ERU5JRUQgICAgICAgICA0OSAgLyogMHgzMSAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfREVDT0RFX0VSUk9SICAgICAgICAgIDUwICAvKiAweDMyICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19ERUNSWVBUX0VSUk9SICAgICAgICAgNTEgIC8qIDB4MzMgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0VYUE9SVF9SRVNUUklDVElPTiAgICA2MCAgLyogMHgzQyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfUFJPVE9DT0xfVkVSU0lPTiAgICAgIDcwICAvKiAweDQ2ICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19JTlNVRkZJQ0lFTlRfU0VDVVJJVFkgNzEgIC8qIDB4NDcgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0lOVEVSTkFMX0VSUk9SICAgICAgICA4MCAgLyogMHg1MCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSU5BUFJPUFJJQVRFX0ZBTExCQUNLIDg2ICAvKiAweDU2ICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19VU0VSX0NBTkNFTEVEICAgICAgICAgOTAgIC8qIDB4NUEgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX05PX1JFTkVHT1RJQVRJT04gICAgIDEwMCAgLyogMHg2NCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5TVVBQT1JURURfRVhUICAgICAgMTEwICAvKiAweDZFICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTlJFQ09HTklaRURfTkFNRSAgICAxMTIgIC8qIDB4NzAgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOS05PV05fUFNLX0lERU5USVRZIDExNSAgLyogMHg3MyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fQVBQTElDQVRJT05fUFJPVE9DT0wgMTIwIC8qIDB4NzggKi8KKworI2RlZmluZSBNQkVEVExTX1NTTF9IU19IRUxMT19SRVFVRVNUICAgICAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9IU19DTElFTlRfSEVMTE8gICAgICAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1NTTF9IU19TRVJWRVJfSEVMTE8gICAgICAgICAgICAgMgorI2RlZmluZSBNQkVEVExTX1NTTF9IU19IRUxMT19WRVJJRllfUkVRVUVTVCAgICAgMworI2RlZmluZSBNQkVEVExTX1NTTF9IU19ORVdfU0VTU0lPTl9USUNLRVQgICAgICAgNAorI2RlZmluZSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURSAgICAgICAgICAgICAxMQorI2RlZmluZSBNQkVEVExTX1NTTF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFICAgICAxMgorI2RlZmluZSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUICAgICAxMworI2RlZmluZSBNQkVEVExTX1NTTF9IU19TRVJWRVJfSEVMTE9fRE9ORSAgICAgICAxNAorI2RlZmluZSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURV9WRVJJRlkgICAgICAxNQorI2RlZmluZSBNQkVEVExTX1NTTF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFICAgICAxNgorI2RlZmluZSBNQkVEVExTX1NTTF9IU19GSU5JU0hFRCAgICAgICAgICAgICAgICAyMAorCisvKgorICogVExTIGV4dGVuc2lvbnMKKyAqLworI2RlZmluZSBNQkVEVExTX1RMU19FWFRfU0VSVkVSTkFNRSAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfVExTX0VYVF9TRVJWRVJOQU1FX0hPU1ROQU1FICAgICAgICAgIDAKKworI2RlZmluZSBNQkVEVExTX1RMU19FWFRfTUFYX0ZSQUdNRU5UX0xFTkdUSCAgICAgICAgICAxCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX1RSVU5DQVRFRF9ITUFDICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfRUxMSVBUSUNfQ1VSVkVTICAgMTAKKyNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTICAgICAxMQorCisjZGVmaW5lIE1CRURUTFNfVExTX0VYVF9TSUdfQUxHICAgICAgICAgICAgICAgICAgICAgMTMKKworI2RlZmluZSBNQkVEVExTX1RMU19FWFRfQUxQTiAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKyNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX0VOQ1JZUFRfVEhFTl9NQUMgICAgICAgICAgICAyMiAvKiAweDE2ICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VYVF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUICAweDAwMTcgLyogMjMgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19FWFRfU0VTU0lPTl9USUNLRVQgICAgICAgICAgICAgIDM1CisKKyNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX0VDSlBBS0VfS0tQUCAgICAgICAgICAgICAgIDI1NiAvKiBleHBlcmltZW50YWwgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19FWFRfUkVORUdPVElBVElPTl9JTkZPICAgICAgMHhGRjAxCisKKy8qCisgKiBTaXplIGRlZmluZXMKKyAqLworI2lmICFkZWZpbmVkKE1CRURUTFNfUFNLX01BWF9MRU4pCisjZGVmaW5lIE1CRURUTFNfUFNLX01BWF9MRU4gICAgICAgICAgICAzMiAvKiAyNTYgYml0cyAqLworI2VuZGlmCisKKy8qIER1bW15IHR5cGUgdXNlZCBvbmx5IGZvciBpdHMgc2l6ZSAqLwordW5pb24gbWJlZHRsc19zc2xfcHJlbWFzdGVyX3NlY3JldAoreworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQpCisgICAgdW5zaWduZWQgY2hhciBfcG1zX3JzYVs0OF07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJGQyA1MjQ2IDguMS4xICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkKKyAgICB1bnNpZ25lZCBjaGFyIF9wbXNfZGhtW01CRURUTFNfTVBJX01BWF9TSVpFXTsgICAgICAvKiBSRkMgNTI0NiA4LjEuMiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkgICAgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCkgIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpICAgICB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpCisgICAgdW5zaWduZWQgY2hhciBfcG1zX2VjZGhbTUJFRFRMU19FQ1BfTUFYX0JZVEVTXTsgICAgLyogUkZDIDQ0OTIgNS4xMCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCkKKyAgICB1bnNpZ25lZCBjaGFyIF9wbXNfcHNrWzQgKyAyICogTUJFRFRMU19QU0tfTUFYX0xFTl07ICAgICAgIC8qIFJGQyA0Mjc5IDIgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEKQorICAgIHVuc2lnbmVkIGNoYXIgX3Btc19kaGVfcHNrWzQgKyBNQkVEVExTX01QSV9NQVhfU0laRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBNQkVEVExTX1BTS19NQVhfTEVOXTsgICAgICAgLyogUkZDIDQyNzkgMyAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQpCisgICAgdW5zaWduZWQgY2hhciBfcG1zX3JzYV9wc2tbNTIgKyBNQkVEVExTX1BTS19NQVhfTEVOXTsgICAgICAvKiBSRkMgNDI3OSA0ICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKQorICAgIHVuc2lnbmVkIGNoYXIgX3Btc19lY2RoZV9wc2tbNCArIE1CRURUTFNfRUNQX01BWF9CWVRFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIE1CRURUTFNfUFNLX01BWF9MRU5dOyAgICAgLyogUkZDIDU0ODkgMiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgdW5zaWduZWQgY2hhciBfcG1zX2VjanBha2VbMzJdOyAgICAgLyogVGhyZWFkIHNwZWM6IFNIQS0yNTYgb3V0cHV0ICovCisjZW5kaWYKK307CisKKyNkZWZpbmUgTUJFRFRMU19QUkVNQVNURVJfU0laRSAgICAgc2l6ZW9mKCB1bmlvbiBtYmVkdGxzX3NzbF9wcmVtYXN0ZXJfc2VjcmV0ICkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogU1NMIHN0YXRlIG1hY2hpbmUKKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgTUJFRFRMU19TU0xfSEVMTE9fUkVRVUVTVCwKKyAgICBNQkVEVExTX1NTTF9DTElFTlRfSEVMTE8sCisgICAgTUJFRFRMU19TU0xfU0VSVkVSX0hFTExPLAorICAgIE1CRURUTFNfU1NMX1NFUlZFUl9DRVJUSUZJQ0FURSwKKyAgICBNQkVEVExTX1NTTF9TRVJWRVJfS0VZX0VYQ0hBTkdFLAorICAgIE1CRURUTFNfU1NMX0NFUlRJRklDQVRFX1JFUVVFU1QsCisgICAgTUJFRFRMU19TU0xfU0VSVkVSX0hFTExPX0RPTkUsCisgICAgTUJFRFRMU19TU0xfQ0xJRU5UX0NFUlRJRklDQVRFLAorICAgIE1CRURUTFNfU1NMX0NMSUVOVF9LRVlfRVhDSEFOR0UsCisgICAgTUJFRFRMU19TU0xfQ0VSVElGSUNBVEVfVkVSSUZZLAorICAgIE1CRURUTFNfU1NMX0NMSUVOVF9DSEFOR0VfQ0lQSEVSX1NQRUMsCisgICAgTUJFRFRMU19TU0xfQ0xJRU5UX0ZJTklTSEVELAorICAgIE1CRURUTFNfU1NMX1NFUlZFUl9DSEFOR0VfQ0lQSEVSX1NQRUMsCisgICAgTUJFRFRMU19TU0xfU0VSVkVSX0ZJTklTSEVELAorICAgIE1CRURUTFNfU1NMX0ZMVVNIX0JVRkZFUlMsCisgICAgTUJFRFRMU19TU0xfSEFORFNIQUtFX1dSQVBVUCwKKyAgICBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiwKKyAgICBNQkVEVExTX1NTTF9TRVJWRVJfTkVXX1NFU1NJT05fVElDS0VULAorICAgIE1CRURUTFNfU1NMX1NFUlZFUl9IRUxMT19WRVJJRllfUkVRVUVTVF9TRU5ULAorfQorbWJlZHRsc19zc2xfc3RhdGVzOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDYWxsYmFjayB0eXBlOiBzZW5kIGRhdGEgb24gdGhlIG5ldHdvcmsuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoYXQgY2FsbGJhY2sgbWF5IGJlIGVpdGhlciBibG9ja2luZyBvciBub24tYmxvY2tpbmcuCisgKgorICogXHBhcmFtIGN0eCAgICAgIENvbnRleHQgZm9yIHRoZSBzZW5kIGNhbGxiYWNrICh0eXBpY2FsbHkgYSBmaWxlIGRlc2NyaXB0b3IpCisgKiBccGFyYW0gYnVmICAgICAgQnVmZmVyIGhvbGRpbmcgdGhlIGRhdGEgdG8gc2VuZAorICogXHBhcmFtIGxlbiAgICAgIExlbmd0aCBvZiB0aGUgZGF0YSB0byBzZW5kCisgKgorICogXHJldHVybiAgICAgICAgIFRoZSBjYWxsYmFjayBtdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgaWYgYW55LAorICogICAgICAgICAgICAgICAgIG9yIGEgbm9uLXplcm8gZXJyb3IgY29kZS4KKyAqICAgICAgICAgICAgICAgICBJZiBwZXJmb3JtaW5nIG5vbi1ibG9ja2luZyBJL08sIFxjIE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFCisgKiAgICAgICAgICAgICAgICAgbXVzdCBiZSByZXR1cm5lZCB3aGVuIHRoZSBvcGVyYXRpb24gd291bGQgYmxvY2suCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSBjYWxsYmFjayBpcyBhbGxvd2VkIHRvIHNlbmQgZmV3ZXIgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCisgKiAgICAgICAgICAgICAgICAgSXQgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgc2VudC4KKyAqLwordHlwZWRlZiBpbnQgbWJlZHRsc19zc2xfc2VuZF90KCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDYWxsYmFjayB0eXBlOiByZWNlaXZlIGRhdGEgZnJvbSB0aGUgbmV0d29yay4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhhdCBjYWxsYmFjayBtYXkgYmUgZWl0aGVyIGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZy4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQ29udGV4dCBmb3IgdGhlIHJlY2VpdmUgY2FsbGJhY2sgKHR5cGljYWxseSBhIGZpbGUKKyAqICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yKQorICogXHBhcmFtIGJ1ZiAgICAgIEJ1ZmZlciB0byB3cml0ZSB0aGUgcmVjZWl2ZWQgZGF0YSB0bworICogXHBhcmFtIGxlbiAgICAgIExlbmd0aCBvZiB0aGUgcmVjZWl2ZSBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgVGhlIGNhbGxiYWNrIG11c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQsCisgKiAgICAgICAgICAgICAgICAgb3IgYSBub24temVybyBlcnJvciBjb2RlLgorICogICAgICAgICAgICAgICAgIElmIHBlcmZvcm1pbmcgbm9uLWJsb2NraW5nIEkvTywgXGMgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRAorICogICAgICAgICAgICAgICAgIG11c3QgYmUgcmV0dXJuZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHdvdWxkIGJsb2NrLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgY2FsbGJhY2sgbWF5IHJlY2VpdmUgZmV3ZXIgYnl0ZXMgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZQorICogICAgICAgICAgICAgICAgIGJ1ZmZlci4gSXQgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkKKyAqICAgICAgICAgICAgICAgICByZWNlaXZlZCBhbmQgd3JpdHRlbiB0byB0aGUgYnVmZmVyLgorICovCit0eXBlZGVmIGludCBtYmVkdGxzX3NzbF9yZWN2X3QoIHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENhbGxiYWNrIHR5cGU6IHJlY2VpdmUgZGF0YSBmcm9tIHRoZSBuZXR3b3JrLCB3aXRoIHRpbWVvdXQKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhhdCBjYWxsYmFjayBtdXN0IGJsb2NrIHVudGlsIGRhdGEgaXMgcmVjZWl2ZWQsIG9yIHRoZQorICogICAgICAgICAgICAgICAgIHRpbWVvdXQgZGVsYXkgZXhwaXJlcywgb3IgdGhlIG9wZXJhdGlvbiBpcyBpbnRlcnJ1cHRlZCBieSBhCisgKiAgICAgICAgICAgICAgICAgc2lnbmFsLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBDb250ZXh0IGZvciB0aGUgcmVjZWl2ZSBjYWxsYmFjayAodHlwaWNhbGx5IGEgZmlsZSBkZXNjcmlwdG9yKQorICogXHBhcmFtIGJ1ZiAgICAgIEJ1ZmZlciB0byB3cml0ZSB0aGUgcmVjZWl2ZWQgZGF0YSB0bworICogXHBhcmFtIGxlbiAgICAgIExlbmd0aCBvZiB0aGUgcmVjZWl2ZSBidWZmZXIKKyAqIFxwYXJhbSB0aW1lb3V0ICBNYXhpbXVtIG5vbWJlciBvZiBtaWxsaXNlY29uZGVzIHRvIHdhaXQgZm9yIGRhdGEKKyAqICAgICAgICAgICAgICAgICAwIG1lYW5zIG5vIHRpbWVvdXQgKHBvdGVudGlhbGx5IHdhaXRpbmcgZm9yZXZlcikKKyAqCisgKiBccmV0dXJuICAgICAgICAgVGhlIGNhbGxiYWNrIG11c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQsCisgKiAgICAgICAgICAgICAgICAgb3IgYSBub24temVybyBlcnJvciBjb2RlOgorICogICAgICAgICAgICAgICAgIFxjIE1CRURUTFNfRVJSX1NTTF9USU1FT1VUIGlmIHRoZSBvcGVyYXRpb24gdGltZWQgb3V0LAorICogICAgICAgICAgICAgICAgIFxjIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgaWYgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSBjYWxsYmFjayBtYXkgcmVjZWl2ZSBmZXdlciBieXRlcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgYnVmZmVyLiBJdCBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseQorICogICAgICAgICAgICAgICAgIHJlY2VpdmVkIGFuZCB3cml0dGVuIHRvIHRoZSBidWZmZXIuCisgKi8KK3R5cGVkZWYgaW50IG1iZWR0bHNfc3NsX3JlY3ZfdGltZW91dF90KCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGltZW91dCApOworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2FsbGJhY2sgdHlwZTogc2V0IGEgcGFpciBvZiB0aW1lcnMvZGVsYXlzIHRvIHdhdGNoCisgKgorICogXHBhcmFtIGN0eCAgICAgIENvbnRleHQgcG9pbnRlcgorICogXHBhcmFtIGludF9tcyAgIEludGVybWVkaWF0ZSBkZWxheSBpbiBtaWxsaXNlY29uZHMKKyAqIFxwYXJhbSBmaW5fbXMgICBGaW5hbCBkZWxheSBpbiBtaWxsaXNlY29uZHMKKyAqICAgICAgICAgICAgICAgICAwIGNhbmNlbHMgdGhlIGN1cnJlbnQgdGltZXIuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoaXMgY2FsbGJhY2sgbXVzdCBhdCBsZWFzdCBzdG9yZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uCisgKiAgICAgICAgICAgICAgICAgZm9yIHRoZSBhc3NvY2lhdGVkIFxjIG1iZWR0bHNfc3NsX2dldF90aW1lcl90IGNhbGxiYWNrIHRvCisgKiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcnJlY3QgaW5mb3JtYXRpb24uCisgKgorICogXG5vdGUgICAgICAgICAgIElmIHVzaW5nIGEgZXZlbnQtZHJpdmVuIHN0eWxlIG9mIHByb2dyYW1taW5nLCBhbiBldmVudCBtdXN0CisgKiAgICAgICAgICAgICAgICAgYmUgZ2VuZXJhdGVkIHdoZW4gdGhlIGZpbmFsIGRlbGF5IGlzIHBhc3NlZC4gVGhlIGV2ZW50IG11c3QKKyAqICAgICAgICAgICAgICAgICBjYXVzZSBhIGNhbGwgdG8gXGMgbWJlZHRsc19zc2xfaGFuZHNoYWtlKCkgd2l0aCB0aGUgcHJvcGVyCisgKiAgICAgICAgICAgICAgICAgU1NMIGNvbnRleHQgdG8gYmUgc2NoZWR1bGVkLiBDYXJlIG11c3QgYmUgdGFrZW4gdG8gZW5zdXJlCisgKiAgICAgICAgICAgICAgICAgdGhhdCBhdCBtb3N0IG9uZSBzdWNoIGNhbGwgaGFwcGVucyBhdCBhIHRpbWUuCisgKgorICogXG5vdGUgICAgICAgICAgIE9ubHkgb25lIHRpbWVyIGF0IGEgdGltZSBtdXN0IGJlIHJ1bm5pbmcuIENhbGxpbmcgdGhpcworICogICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdoaWxlIGEgdGltZXIgaXMgcnVubmluZyBtdXN0IGNhbmNlbCBpdC4gQ2FuY2VsbGVkCisgKiAgICAgICAgICAgICAgICAgdGltZXJzIG11c3Qgbm90IGdlbmVyYXRlIGFueSBldmVudC4KKyAqLwordHlwZWRlZiB2b2lkIG1iZWR0bHNfc3NsX3NldF90aW1lcl90KCB2b2lkICogY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnRfbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZpbl9tcyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDYWxsYmFjayB0eXBlOiBnZXQgc3RhdHVzIG9mIHRpbWVycy9kZWxheXMKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQ29udGV4dCBwb2ludGVyCisgKgorICogXHJldHVybiAgICAgICAgIFRoaXMgY2FsbGJhY2sgbXVzdCByZXR1cm46CisgKiAgICAgICAgICAgICAgICAgLTEgaWYgY2FuY2VsbGVkIChmaW5fbXMgPT0gMCksCisgKiAgICAgICAgICAgICAgICAgIDAgaWYgbm9uZSBvZiB0aGUgZGVsYXlzIGhhdmUgcGFzc2VkLAorICogICAgICAgICAgICAgICAgICAxIGlmIG9ubHkgdGhlIGludGVybWVkaWF0ZSBkZWxheSBoYXMgcGFzc2VkLAorICogICAgICAgICAgICAgICAgICAyIGlmIHRoZSBmaW5hbCBkZWxheSBoYXMgcGFzc2VkLgorICovCit0eXBlZGVmIGludCBtYmVkdGxzX3NzbF9nZXRfdGltZXJfdCggdm9pZCAqIGN0eCApOworCisKKy8qIERlZmluZWQgYmVsb3cgKi8KK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfc3NsX3Nlc3Npb24gbWJlZHRsc19zc2xfc2Vzc2lvbjsKK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfc3NsX2NvbnRleHQgbWJlZHRsc19zc2xfY29udGV4dDsKK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfc3NsX2NvbmZpZyAgbWJlZHRsc19zc2xfY29uZmlnOworCisvKiBEZWZpbmVkIGluIHNzbF9pbnRlcm5hbC5oICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3NzbF90cmFuc2Zvcm0gbWJlZHRsc19zc2xfdHJhbnNmb3JtOwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3BhcmFtcyBtYmVkdGxzX3NzbF9oYW5kc2hha2VfcGFyYW1zOworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19zc2xfa2V5X2NlcnQgbWJlZHRsc19zc2xfa2V5X2NlcnQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbSBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbTsKKyNlbmRpZgorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3Igc3RvcmluZyBjdXJyZW50IHNlc3Npb24gZGF0YS4KKyAqLworc3RydWN0IG1iZWR0bHNfc3NsX3Nlc3Npb24KK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgIG1iZWR0bHNfdGltZV90IHN0YXJ0OyAgICAgICAvKiE8IHN0YXJ0aW5nIHRpbWUgICAgICAqLworI2VuZGlmCisgICAgaW50IGNpcGhlcnN1aXRlOyAgICAgICAgICAgIC8qITwgY2hvc2VuIGNpcGhlcnN1aXRlICovCisgICAgaW50IGNvbXByZXNzaW9uOyAgICAgICAgICAgIC8qITwgY2hvc2VuIGNvbXByZXNzaW9uICovCisgICAgc2l6ZV90IGlkX2xlbjsgICAgICAgICAgICAgIC8qITwgc2Vzc2lvbiBpZCBsZW5ndGggICovCisgICAgdW5zaWduZWQgY2hhciBpZFszMl07ICAgICAgIC8qITwgc2Vzc2lvbiBpZGVudGlmaWVyICovCisgICAgdW5zaWduZWQgY2hhciBtYXN0ZXJbNDhdOyAgIC8qITwgdGhlIG1hc3RlciBzZWNyZXQgICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBtYmVkdGxzX3g1MDlfY3J0ICpwZWVyX2NlcnQ7ICAgICAgICAvKiE8IHBlZXIgWC41MDkgY2VydCBjaGFpbiAqLworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworICAgIHVpbnQzMl90IHZlcmlmeV9yZXN1bHQ7ICAgICAgICAgIC8qITwgIHZlcmlmaWNhdGlvbiByZXN1bHQgICAgICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKyAgICB1bnNpZ25lZCBjaGFyICp0aWNrZXQ7ICAgICAgLyohPCBSRkMgNTA3NyBzZXNzaW9uIHRpY2tldCAqLworICAgIHNpemVfdCB0aWNrZXRfbGVuOyAgICAgICAgICAvKiE8IHNlc3Npb24gdGlja2V0IGxlbmd0aCAgICovCisgICAgdWludDMyX3QgdGlja2V0X2xpZmV0aW1lOyAgIC8qITwgdGlja2V0IGxpZmV0aW1lIGhpbnQgICAgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgJiYgTUJFRFRMU19TU0xfQ0xJX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKKyAgICB1bnNpZ25lZCBjaGFyIG1mbF9jb2RlOyAgICAgLyohPCBNYXhGcmFnbWVudExlbmd0aCBuZWdvdGlhdGVkIGJ5IHBlZXIgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorICAgIGludCB0cnVuY19obWFjOyAgICAgICAgICAgICAvKiE8IGZsYWcgZm9yIHRydW5jYXRlZCBobWFjIGFjdGl2YXRpb24gICAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgaW50IGVuY3J5cHRfdGhlbl9tYWM7ICAgICAgIC8qITwgZmxhZyBmb3IgRXRNIGFjdGl2YXRpb24gICAgICAgICAgICAgICAgKi8KKyNlbmRpZgorfTsKKworLyoqCisgKiBTU0wvVExTIGNvbmZpZ3VyYXRpb24gdG8gYmUgc2hhcmVkIGJldHdlZW4gbWJlZHRsc19zc2xfY29udGV4dCBzdHJ1Y3R1cmVzLgorICovCitzdHJ1Y3QgbWJlZHRsc19zc2xfY29uZmlnCit7CisgICAgLyogR3JvdXAgaXRlbXMgYnkgc2l6ZSAobGFyZ2VzdCBmaXJzdCkgdG8gbWluaW1pemUgcGFkZGluZyBvdmVyaGVhZCAqLworCisgICAgLyoKKyAgICAgKiBQb2ludGVycworICAgICAqLworCisgICAgY29uc3QgaW50ICpjaXBoZXJzdWl0ZV9saXN0WzRdOyAvKiE8IGFsbG93ZWQgY2lwaGVyc3VpdGVzIHBlciB2ZXJzaW9uICAgKi8KKworICAgIC8qKiBDYWxsYmFjayBmb3IgcHJpbnRpbmcgZGVidWcgb3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdm9pZCAoKmZfZGJnKSh2b2lkICosIGludCwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CisgICAgdm9pZCAqcF9kYmc7ICAgICAgICAgICAgICAgICAgICAvKiE8IGNvbnRleHQgZm9yIHRoZSBkZWJ1ZyBmdW5jdGlvbiAgICAgKi8KKworICAgIC8qKiBDYWxsYmFjayBmb3IgZ2V0dGluZyAocHNldWRvLSlyYW5kb20gbnVtYmVycyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50ICAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KTsKKyAgICB2b2lkICpwX3JuZzsgICAgICAgICAgICAgICAgICAgIC8qITwgY29udGV4dCBmb3IgdGhlIFJORyBmdW5jdGlvbiAgICAgICAqLworCisgICAgLyoqIENhbGxiYWNrIHRvIHJldHJpZXZlIGEgc2Vzc2lvbiBmcm9tIHRoZSBjYWNoZSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgKCpmX2dldF9jYWNoZSkodm9pZCAqLCBtYmVkdGxzX3NzbF9zZXNzaW9uICopOworICAgIC8qKiBDYWxsYmFjayB0byBzdG9yZSBhIHNlc3Npb24gaW50byB0aGUgY2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50ICgqZl9zZXRfY2FjaGUpKHZvaWQgKiwgY29uc3QgbWJlZHRsc19zc2xfc2Vzc2lvbiAqKTsKKyAgICB2b2lkICpwX2NhY2hlOyAgICAgICAgICAgICAgICAgIC8qITwgY29udGV4dCBmb3IgY2FjaGUgY2FsbGJhY2tzICAgICAgICAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQorICAgIC8qKiBDYWxsYmFjayBmb3Igc2V0dGluZyBjZXJ0IGFjY29yZGluZyB0byBTTkkgZXh0ZW5zaW9uICAgICAgICAgICAgICAgICovCisgICAgaW50ICgqZl9zbmkpKHZvaWQgKiwgbWJlZHRsc19zc2xfY29udGV4dCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7CisgICAgdm9pZCAqcF9zbmk7ICAgICAgICAgICAgICAgICAgICAvKiE8IGNvbnRleHQgZm9yIFNOSSBjYWxsYmFjayAgICAgICAgICAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgLyoqIENhbGxiYWNrIHRvIGN1c3RvbWl6ZSBYLjUwOSBjZXJ0aWZpY2F0ZSBjaGFpbiB2ZXJpZmljYXRpb24gICAgICAgICAgKi8KKyAgICBpbnQgKCpmX3ZyZnkpKHZvaWQgKiwgbWJlZHRsc194NTA5X2NydCAqLCBpbnQsIHVpbnQzMl90ICopOworICAgIHZvaWQgKnBfdnJmeTsgICAgICAgICAgICAgICAgICAgLyohPCBjb250ZXh0IGZvciBYLjUwOSB2ZXJpZnkgY2FsbGxiYWNrICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorICAgIC8qKiBDYWxsYmFjayB0byByZXRyaWV2ZSBQU0sga2V5IGZyb20gaWRlbnRpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50ICgqZl9wc2spKHZvaWQgKiwgbWJlZHRsc19zc2xfY29udGV4dCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7CisgICAgdm9pZCAqcF9wc2s7ICAgICAgICAgICAgICAgICAgICAvKiE8IGNvbnRleHQgZm9yIFBTSyBjYWxsYmFjayAgICAgICAgICAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICAvKiogQ2FsbGJhY2sgdG8gY3JlYXRlICYgd3JpdGUgYSBjb29raWUgZm9yIENsaWVudEhlbGxvIHZlaXJpZmNhdGlvbiAgICAqLworICAgIGludCAoKmZfY29va2llX3dyaXRlKSggdm9pZCAqLCB1bnNpZ25lZCBjaGFyICoqLCB1bnNpZ25lZCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCApOworICAgIC8qKiBDYWxsYmFjayB0byB2ZXJpZnkgdmFsaWRpdHkgb2YgYSBDbGllbnRIZWxsbyBjb29raWUgICAgICAgICAgICAgICAgICovCisgICAgaW50ICgqZl9jb29raWVfY2hlY2spKCB2b2lkICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QgKTsKKyAgICB2b2lkICpwX2Nvb2tpZTsgICAgICAgICAgICAgICAgIC8qITwgY29udGV4dCBmb3IgdGhlIGNvb2tpZSBjYWxsYmFja3MgICAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICAvKiogQ2FsbGJhY2sgdG8gY3JlYXRlICYgd3JpdGUgYSBzZXNzaW9uIHRpY2tldCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCAoKmZfdGlja2V0X3dyaXRlKSggdm9pZCAqLCBjb25zdCBtYmVkdGxzX3NzbF9zZXNzaW9uICosCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90ICosIHVpbnQzMl90ICogKTsKKyAgICAvKiogQ2FsbGJhY2sgdG8gcGFyc2UgYSBzZXNzaW9uIHRpY2tldCBpbnRvIGEgc2Vzc2lvbiBzdHJ1Y3R1cmUgICAgICAgICAqLworICAgIGludCAoKmZfdGlja2V0X3BhcnNlKSggdm9pZCAqLCBtYmVkdGxzX3NzbF9zZXNzaW9uICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KTsKKyAgICB2b2lkICpwX3RpY2tldDsgICAgICAgICAgICAgICAgIC8qITwgY29udGV4dCBmb3IgdGhlIHRpY2tldCBjYWxsYmFja3MgICAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAmJiBNQkVEVExTX1NTTF9TUlZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFBPUlRfS0VZUykKKyAgICAvKiogQ2FsbGJhY2sgdG8gZXhwb3J0IGtleSBibG9jayBhbmQgbWFzdGVyIHNlY3JldCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCAoKmZfZXhwb3J0X2tleXMpKCB2b2lkICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsIHNpemVfdCApOworICAgIHZvaWQgKnBfZXhwb3J0X2tleXM7ICAgICAgICAgICAgLyohPCBjb250ZXh0IGZvciBrZXkgZXhwb3J0IGNhbGxiYWNrICAgICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZSAqY2VydF9wcm9maWxlOyAvKiE8IHZlcmlmaWNhdGlvbiBwcm9maWxlICovCisgICAgbWJlZHRsc19zc2xfa2V5X2NlcnQgKmtleV9jZXJ0OyAvKiE8IG93biBjZXJ0aWZpY2F0ZS9rZXkgcGFpcihzKSAgICAgICAgKi8KKyAgICBtYmVkdGxzX3g1MDlfY3J0ICpjYV9jaGFpbjsgICAgIC8qITwgdHJ1c3RlZCBDQXMgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNhX2NybDsgICAgICAgLyohPCB0cnVzdGVkIENBcyBDUkxzICAgICAgICAgICAgICAgICAgICovCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQpCisgICAgY29uc3QgaW50ICpzaWdfaGFzaGVzOyAgICAgICAgICAvKiE8IGFsbG93ZWQgc2lnbmF0dXJlIGhhc2hlcyAgICAgICAgICAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwX2lkICpjdXJ2ZV9saXN0OyAvKiE8IGFsbG93ZWQgY3VydmVzICAgICAgICAgICAgICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykKKyAgICBtYmVkdGxzX21waSBkaG1fUDsgICAgICAgICAgICAgIC8qITwgcHJpbWUgbW9kdWx1cyBmb3IgREhNICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfbXBpIGRobV9HOyAgICAgICAgICAgICAgLyohPCBnZW5lcmF0b3IgZm9yIERITSAgICAgICAgICAgICAgICAgICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorICAgIHVuc2lnbmVkIGNoYXIgKnBzazsgICAgICAgICAgICAgLyohPCBwcmUtc2hhcmVkIGtleSAgICAgICAgICAgICAgICAgICAgICovCisgICAgc2l6ZV90ICAgICAgICAgcHNrX2xlbjsgICAgICAgICAvKiE8IGxlbmd0aCBvZiB0aGUgcHJlLXNoYXJlZCBrZXkgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpwc2tfaWRlbnRpdHk7ICAgIC8qITwgaWRlbnRpdHkgZm9yIFBTSyBuZWdvdGlhdGlvbiAgICAgICAqLworICAgIHNpemVfdCAgICAgICAgIHBza19pZGVudGl0eV9sZW47LyohPCBsZW5ndGggb2YgaWRlbnRpdHkgICAgICAgICAgICAgICAgICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICBjb25zdCBjaGFyICoqYWxwbl9saXN0OyAgICAgICAgIC8qITwgb3JkZXJlZCBsaXN0IG9mIHByb3RvY29scyAgICAgICAgICAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE51bWVyaWNhbCBzZXR0aW5ncyAoaW50IHRoZW4gY2hhcikKKyAgICAgKi8KKworICAgIHVpbnQzMl90IHJlYWRfdGltZW91dDsgICAgICAgICAgLyohPCB0aW1lb3V0IGZvciBtYmVkdGxzX3NzbF9yZWFkIChtcykgICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgdWludDMyX3QgaHNfdGltZW91dF9taW47ICAgICAgICAvKiE8IGluaXRpYWwgdmFsdWUgb2YgdGhlIGhhbmRzaGFrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IChtcykgICAgICAgICovCisgICAgdWludDMyX3QgaHNfdGltZW91dF9tYXg7ICAgICAgICAvKiE8IG1heGltdW0gdmFsdWUgb2YgdGhlIGhhbmRzaGFrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IChtcykgICAgICAgICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBpbnQgcmVuZWdvX21heF9yZWNvcmRzOyAgICAgICAgIC8qITwgZ3JhY2UgcGVyaW9kIGZvciByZW5lZ290aWF0aW9uICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgcmVuZWdvX3BlcmlvZFs4XTsgLyohPCB2YWx1ZSBvZiB0aGUgcmVjb3JkIGNvdW50ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdHJpZ2dlcnMgcmVuZWdvdGlhdGlvbiAgICAgICAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVCkKKyAgICB1bnNpZ25lZCBpbnQgYmFkbWFjX2xpbWl0OyAgICAgIC8qITwgbGltaXQgb2YgcmVjb3JkcyB3aXRoIGEgYmFkIE1BQyAgICAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgdW5zaWduZWQgaW50IGRobV9taW5fYml0bGVuOyAgICAvKiE8IG1pbi4gYml0IGxlbmd0aCBvZiB0aGUgREhNIHByaW1lICAgKi8KKyNlbmRpZgorCisgICAgdW5zaWduZWQgY2hhciBtYXhfbWFqb3JfdmVyOyAgICAvKiE8IG1heC4gbWFqb3IgdmVyc2lvbiB1c2VkICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG1heF9taW5vcl92ZXI7ICAgIC8qITwgbWF4LiBtaW5vciB2ZXJzaW9uIHVzZWQgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgbWluX21ham9yX3ZlcjsgICAgLyohPCBtaW4uIG1ham9yIHZlcnNpb24gdXNlZCAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBtaW5fbWlub3JfdmVyOyAgICAvKiE8IG1pbi4gbWlub3IgdmVyc2lvbiB1c2VkICAgICAgICAgICAgKi8KKworICAgIC8qCisgICAgICogRmxhZ3MgKGJpdGZpZWxkcykKKyAgICAgKi8KKworICAgIHVuc2lnbmVkIGludCBlbmRwb2ludCA6IDE7ICAgICAgLyohPCAwOiBjbGllbnQsIDE6IHNlcnZlciAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgaW50IHRyYW5zcG9ydCA6IDE7ICAgICAvKiE8IHN0cmVhbSAoVExTKSBvciBkYXRhZ3JhbSAoRFRMUykgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgYXV0aG1vZGUgOiAyOyAgICAgIC8qITwgTUJFRFRMU19TU0xfVkVSSUZZX1hYWCAgICAgICAgICAgICAqLworICAgIC8qIG5lZWRlZCBldmVuIHdpdGggcmVuZWdvIGRpc2FibGVkIGZvciBMRUdBQ1lfQlJFQUtfSEFORFNIQUtFICAgICAgICAgICovCisgICAgdW5zaWduZWQgaW50IGFsbG93X2xlZ2FjeV9yZW5lZ290aWF0aW9uIDogMiA7IC8qITwgTUJFRFRMU19MRUdBQ1lfWFhYICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorICAgIHVuc2lnbmVkIGludCBhcmM0X2Rpc2FibGVkIDogMTsgLyohPCBibGFja2xpc3QgUkM0IGNpcGhlcnN1aXRlcz8gICAgICAgICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisgICAgdW5zaWduZWQgaW50IG1mbF9jb2RlIDogMzsgICAgICAvKiE8IGRlc2lyZWQgZnJhZ21lbnQgbGVuZ3RoICAgICAgICAgICAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKKyAgICB1bnNpZ25lZCBpbnQgZW5jcnlwdF90aGVuX21hYyA6IDEgOyAvKiE8IG5lZ290aWF0ZSBlbmNyeXB0LXRoZW4tbWFjPyAgICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorICAgIHVuc2lnbmVkIGludCBleHRlbmRlZF9tcyA6IDE7ICAgLyohPCBuZWdvdGlhdGUgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldD8gICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCisgICAgdW5zaWduZWQgaW50IGFudGlfcmVwbGF5IDogMTsgICAvKiE8IGRldGVjdCBhbmQgcHJldmVudCByZXBsYXk/ICAgICAgICAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcpCisgICAgdW5zaWduZWQgaW50IGNiY19yZWNvcmRfc3BsaXR0aW5nIDogMTsgIC8qITwgZG8gY2JjIHJlY29yZCBzcGxpdHRpbmcgICAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICB1bnNpZ25lZCBpbnQgZGlzYWJsZV9yZW5lZ290aWF0aW9uIDogMTsgLyohPCBkaXNhYmxlIHJlbmVnb3RpYXRpb24/ICAgICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKKyAgICB1bnNpZ25lZCBpbnQgdHJ1bmNfaG1hYyA6IDE7ICAgIC8qITwgbmVnb3RpYXRlIHRydW5jYXRlZCBobWFjPyAgICAgICAgICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgdW5zaWduZWQgaW50IHNlc3Npb25fdGlja2V0cyA6IDE7ICAgLyohPCB1c2Ugc2Vzc2lvbiB0aWNrZXRzPyAgICAgICAgICAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVikgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKyAgICB1bnNpZ25lZCBpbnQgZmFsbGJhY2sgOiAxOyAgICAgIC8qITwgaXMgdGhpcyBhIGZhbGxiYWNrPyAgICAgICAgICAgICAgICAqLworI2VuZGlmCit9OworCisKK3N0cnVjdCBtYmVkdGxzX3NzbF9jb250ZXh0Cit7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY29uZmlnICpjb25mOyAvKiE8IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gICAgICAgICAgKi8KKworICAgIC8qCisgICAgICogTWlzY2VsbGFuZW91cworICAgICAqLworICAgIGludCBzdGF0ZTsgICAgICAgICAgICAgICAgICAvKiE8IFNTTCBoYW5kc2hha2U6IGN1cnJlbnQgc3RhdGUgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGludCByZW5lZ29fc3RhdHVzOyAgICAgICAgICAvKiE8IEluaXRpYWwsIGluIHByb2dyZXNzLCBwZW5kaW5nPyAgICovCisgICAgaW50IHJlbmVnb19yZWNvcmRzX3NlZW47ICAgIC8qITwgUmVjb3JkcyBzaW5jZSByZW5lZ28gcmVxdWVzdCwgb3Igd2l0aCBEVExTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgb2YgcmVxdWVzdCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmVnb19tYXhfcmVjb3JkcyBpcyA8IDAgICAgICAgICAgICovCisjZW5kaWYKKworICAgIGludCBtYWpvcl92ZXI7ICAgICAgICAgICAgICAvKiE8IGVxdWFsIHRvICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMgICAgKi8KKyAgICBpbnQgbWlub3JfdmVyOyAgICAgICAgICAgICAgLyohPCBlaXRoZXIgMCAoU1NMMykgb3IgMSAoVExTMS4wKSAgICAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVCkKKyAgICB1bnNpZ25lZCBiYWRtYWNfc2VlbjsgICAgICAgLyohPCByZWNvcmRzIHdpdGggYSBiYWQgTUFDIHJlY2VpdmVkICAgICovCisjZW5kaWYKKworICAgIG1iZWR0bHNfc3NsX3NlbmRfdCAqZl9zZW5kOyAvKiE8IENhbGxiYWNrIGZvciBuZXR3b3JrIHNlbmQgKi8KKyAgICBtYmVkdGxzX3NzbF9yZWN2X3QgKmZfcmVjdjsgLyohPCBDYWxsYmFjayBmb3IgbmV0d29yayByZWNlaXZlICovCisgICAgbWJlZHRsc19zc2xfcmVjdl90aW1lb3V0X3QgKmZfcmVjdl90aW1lb3V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENhbGxiYWNrIGZvciBuZXR3b3JrIHJlY2VpdmUgd2l0aCB0aW1lb3V0ICovCisKKyAgICB2b2lkICpwX2JpbzsgICAgICAgICAgICAgICAgLyohPCBjb250ZXh0IGZvciBJL08gb3BlcmF0aW9ucyAgICovCisKKyAgICAvKgorICAgICAqIFNlc3Npb24gbGF5ZXIKKyAgICAgKi8KKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uX2luOyAgICAgICAgICAgIC8qITwgIGN1cnJlbnQgc2Vzc2lvbiBkYXRhIChpbikgICAqLworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb25fb3V0OyAgICAgICAgICAgLyohPCAgY3VycmVudCBzZXNzaW9uIGRhdGEgKG91dCkgICovCisgICAgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbjsgICAgICAgICAgICAgICAvKiE8ICBuZWdvdGlhdGVkIHNlc3Npb24gZGF0YSAgICAgKi8KKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uX25lZ290aWF0ZTsgICAgIC8qITwgIHNlc3Npb24gZGF0YSBpbiBuZWdvdGlhdGlvbiAqLworCisgICAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3BhcmFtcyAqaGFuZHNoYWtlOyAgICAvKiE8ICBwYXJhbXMgcmVxdWlyZWQgb25seSBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaGFuZHNoYWtlIHByb2Nlc3MgICAgICAgICovCisKKyAgICAvKgorICAgICAqIFJlY29yZCBsYXllciB0cmFuc2Zvcm1hdGlvbnMKKyAgICAgKi8KKyAgICBtYmVkdGxzX3NzbF90cmFuc2Zvcm0gKnRyYW5zZm9ybV9pbjsgICAgICAgIC8qITwgIGN1cnJlbnQgdHJhbnNmb3JtIHBhcmFtcyAoaW4pICAgKi8KKyAgICBtYmVkdGxzX3NzbF90cmFuc2Zvcm0gKnRyYW5zZm9ybV9vdXQ7ICAgICAgIC8qITwgIGN1cnJlbnQgdHJhbnNmb3JtIHBhcmFtcyAoaW4pICAgKi8KKyAgICBtYmVkdGxzX3NzbF90cmFuc2Zvcm0gKnRyYW5zZm9ybTsgICAgICAgICAgIC8qITwgIG5lZ290aWF0ZWQgdHJhbnNmb3JtIHBhcmFtcyAgICAgKi8KKyAgICBtYmVkdGxzX3NzbF90cmFuc2Zvcm0gKnRyYW5zZm9ybV9uZWdvdGlhdGU7IC8qITwgIHRyYW5zZm9ybSBwYXJhbXMgaW4gbmVnb3RpYXRpb24gKi8KKworICAgIC8qCisgICAgICogVGltZXJzCisgICAgICovCisgICAgdm9pZCAqcF90aW1lcjsgICAgICAgICAgICAgIC8qITwgY29udGV4dCBmb3IgdGhlIHRpbWVyIGNhbGxiYWNrcyAqLworCisgICAgbWJlZHRsc19zc2xfc2V0X3RpbWVyX3QgKmZfc2V0X3RpbWVyOyAgICAgICAvKiE8IHNldCB0aW1lciBjYWxsYmFjayAqLworICAgIG1iZWR0bHNfc3NsX2dldF90aW1lcl90ICpmX2dldF90aW1lcjsgICAgICAgLyohPCBnZXQgdGltZXIgY2FsbGJhY2sgKi8KKworICAgIC8qCisgICAgICogUmVjb3JkIGxheWVyIChpbmNvbWluZyBkYXRhKQorICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgKmluX2J1ZjsgICAgICAvKiE8IGlucHV0IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciAqaW5fY3RyOyAgICAgIC8qITwgNjQtYml0IGluY29taW5nIG1lc3NhZ2UgY291bnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMUzogbWFpbnRhaW5lZCBieSB1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERUTFM6IHJlYWQgZnJvbSBwZWVyICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciAqaW5faGRyOyAgICAgIC8qITwgc3RhcnQgb2YgcmVjb3JkIGhlYWRlciAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICppbl9sZW47ICAgICAgLyohPCB0d28tYnl0ZXMgbWVzc2FnZSBsZW5ndGggZmllbGQgICAqLworICAgIHVuc2lnbmVkIGNoYXIgKmluX2l2OyAgICAgICAvKiE8IGl2bGVuLWJ5dGUgSVYgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciAqaW5fbXNnOyAgICAgIC8qITwgbWVzc2FnZSBjb250ZW50cyAoaW5faXYraXZsZW4pICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICppbl9vZmZ0OyAgICAgLyohPCByZWFkIG9mZnNldCBpbiBhcHBsaWNhdGlvbiBkYXRhICAqLworCisgICAgaW50IGluX21zZ3R5cGU7ICAgICAgICAgICAgIC8qITwgcmVjb3JkIGhlYWRlcjogbWVzc2FnZSB0eXBlICAgICAgKi8KKyAgICBzaXplX3QgaW5fbXNnbGVuOyAgICAgICAgICAgLyohPCByZWNvcmQgaGVhZGVyOiBtZXNzYWdlIGxlbmd0aCAgICAqLworICAgIHNpemVfdCBpbl9sZWZ0OyAgICAgICAgICAgICAvKiE8IGFtb3VudCBvZiBkYXRhIHJlYWQgc28gZmFyICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIHVpbnQxNl90IGluX2Vwb2NoOyAgICAgICAgICAvKiE8IERUTFMgZXBvY2ggZm9yIGluY29taW5nIHJlY29yZHMgICovCisgICAgc2l6ZV90IG5leHRfcmVjb3JkX29mZnNldDsgIC8qITwgb2Zmc2V0IG9mIHRoZSBuZXh0IHJlY29yZCBpbiBkYXRhZ3JhbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbCB0byBpbl9sZWZ0IGlmIG5vbmUpICAgICAgICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCisgICAgdWludDY0X3QgaW5fd2luZG93X3RvcDsgICAgIC8qITwgbGFzdCB2YWxpZGF0ZWQgcmVjb3JkIHNlcV9udW0gICAgKi8KKyAgICB1aW50NjRfdCBpbl93aW5kb3c7ICAgICAgICAgLyohPCBiaXRtYXNrIGZvciByZXBsYXkgZGV0ZWN0aW9uICAgICAqLworI2VuZGlmCisKKyAgICBzaXplX3QgaW5faHNsZW47ICAgICAgICAgICAgLyohPCBjdXJyZW50IGhhbmRzaGFrZSBtZXNzYWdlIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIGhhbmRzaGFrZSBoZWFkZXIgICAqLworICAgIGludCBuYl96ZXJvOyAgICAgICAgICAgICAgICAvKiE8ICMgb2YgMC1sZW5ndGggZW5jcnlwdGVkIG1lc3NhZ2VzICovCisgICAgaW50IHJlY29yZF9yZWFkOyAgICAgICAgICAgIC8qITwgcmVjb3JkIGlzIGFscmVhZHkgcHJlc2VudCAgICAgICAgKi8KKworICAgIC8qCisgICAgICogUmVjb3JkIGxheWVyIChvdXRnb2luZyBkYXRhKQorICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgKm91dF9idWY7ICAgICAvKiE8IG91dHB1dCBidWZmZXIgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciAqb3V0X2N0cjsgICAgIC8qITwgNjQtYml0IG91dGdvaW5nIG1lc3NhZ2UgY291bnRlciAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpvdXRfaGRyOyAgICAgLyohPCBzdGFydCBvZiByZWNvcmQgaGVhZGVyICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgKm91dF9sZW47ICAgICAvKiE8IHR3by1ieXRlcyBtZXNzYWdlIGxlbmd0aCBmaWVsZCAgICovCisgICAgdW5zaWduZWQgY2hhciAqb3V0X2l2OyAgICAgIC8qITwgaXZsZW4tYnl0ZSBJViAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpvdXRfbXNnOyAgICAgLyohPCBtZXNzYWdlIGNvbnRlbnRzIChvdXRfaXYraXZsZW4pICAqLworCisgICAgaW50IG91dF9tc2d0eXBlOyAgICAgICAgICAgIC8qITwgcmVjb3JkIGhlYWRlcjogbWVzc2FnZSB0eXBlICAgICAgKi8KKyAgICBzaXplX3Qgb3V0X21zZ2xlbjsgICAgICAgICAgLyohPCByZWNvcmQgaGVhZGVyOiBtZXNzYWdlIGxlbmd0aCAgICAqLworICAgIHNpemVfdCBvdXRfbGVmdDsgICAgICAgICAgICAvKiE8IGFtb3VudCBvZiBkYXRhIG5vdCB5ZXQgd3JpdHRlbiAgICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgIHVuc2lnbmVkIGNoYXIgKmNvbXByZXNzX2J1ZjsgICAgICAgIC8qITwgIHpsaWIgZGF0YSBidWZmZXIgICAgICAgICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HKQorICAgIHNpZ25lZCBjaGFyIHNwbGl0X2RvbmU7ICAgICAvKiE8IGN1cnJlbnQgcmVjb3JkIGFscmVhZHkgc3BsaXR0ZWQ/ICovCisjZW5kaWYKKworICAgIC8qCisgICAgICogUEtJIGxheWVyCisgICAgICovCisgICAgaW50IGNsaWVudF9hdXRoOyAgICAgICAgICAgICAgICAgICAgLyohPCAgZmxhZyBmb3IgY2xpZW50IGF1dGguICAgKi8KKworICAgIC8qCisgICAgICogVXNlciBzZXR0aW5ncworICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIGNoYXIgKmhvc3RuYW1lOyAgICAgICAgICAgICAvKiE8IGV4cGVjdGVkIHBlZXIgQ04gZm9yIHZlcmlmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgU05JIGlmIGF2YWlsYWJsZSkgICAgICAgICAgICAgICAgICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICBjb25zdCBjaGFyICphbHBuX2Nob3NlbjsgICAgLyohPCAgbmVnb3RpYXRlZCBwcm90b2NvbCAgICAgICAgICAgICAgICAgICAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEluZm9ybWF0aW9uIGZvciBEVExTIGhlbGxvIHZlcmlmeQorICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgdW5zaWduZWQgY2hhciAgKmNsaV9pZDsgICAgICAgICAvKiE8ICB0cmFuc3BvcnQtbGV2ZWwgSUQgb2YgdGhlIGNsaWVudCAgKi8KKyAgICBzaXplX3QgICAgICAgICAgY2xpX2lkX2xlbjsgICAgIC8qITwgIGxlbmd0aCBvZiBjbGlfaWQgICAgICAgICAgICAgICAgICAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFNlY3VyZSByZW5lZ290aWF0aW9uCisgICAgICovCisgICAgLyogbmVlZGVkIHRvIGtub3cgd2hlbiB0byBzZW5kIGV4dGVuc2lvbiBvbiBzZXJ2ZXIgKi8KKyAgICBpbnQgc2VjdXJlX3JlbmVnb3RpYXRpb247ICAgICAgICAgICAvKiE8ICBkb2VzIHBlZXIgc3VwcG9ydCBsZWdhY3kgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cmUgcmVuZWdvdGlhdGlvbiAgICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgc2l6ZV90IHZlcmlmeV9kYXRhX2xlbjsgICAgICAgICAgICAgLyohPCAgbGVuZ3RoIG9mIHZlcmlmeSBkYXRhIHN0b3JlZCAgICovCisgICAgY2hhciBvd25fdmVyaWZ5X2RhdGFbTUJFRFRMU19TU0xfVkVSSUZZX0RBVEFfTUFYX0xFTl07IC8qITwgIHByZXZpb3VzIGhhbmRzaGFrZSB2ZXJpZnkgZGF0YSAqLworICAgIGNoYXIgcGVlcl92ZXJpZnlfZGF0YVtNQkVEVExTX1NTTF9WRVJJRllfREFUQV9NQVhfTEVOXTsgLyohPCAgcHJldmlvdXMgaGFuZHNoYWtlIHZlcmlmeSBkYXRhICovCisjZW5kaWYKK307CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCkKKworI2RlZmluZSBNQkVEVExTX1NTTF9DSEFOTkVMX09VVEJPVU5EICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0hBTk5FTF9JTkJPVU5EICAgICAxCisKK2V4dGVybiBpbnQgKCptYmVkdGxzX3NzbF9od19yZWNvcmRfaW5pdCkobWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV9lbmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV9kZWMsCisgICAgICAgICAgICAgICAgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdl9lbmMsICBjb25zdCB1bnNpZ25lZCBjaGFyICppdl9kZWMsCisgICAgICAgICAgICAgICAgc2l6ZV90IGl2bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1hY19lbmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1hY19kZWMsCisgICAgICAgICAgICAgICAgc2l6ZV90IG1hY2xlbik7CitleHRlcm4gaW50ICgqbWJlZHRsc19zc2xfaHdfcmVjb3JkX2FjdGl2YXRlKShtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBkaXJlY3Rpb24pOworZXh0ZXJuIGludCAoKm1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZXNldCkobWJlZHRsc19zc2xfY29udGV4dCAqc3NsKTsKK2V4dGVybiBpbnQgKCptYmVkdGxzX3NzbF9od19yZWNvcmRfd3JpdGUpKG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCk7CitleHRlcm4gaW50ICgqbWJlZHRsc19zc2xfaHdfcmVjb3JkX3JlYWQpKG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCk7CitleHRlcm4gaW50ICgqbWJlZHRsc19zc2xfaHdfcmVjb3JkX2ZpbmlzaCkobWJlZHRsc19zc2xfY29udGV4dCAqc3NsKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwgKi8KKworLyoqCisgKiBcYnJpZWYgUmV0dXJucyB0aGUgbGlzdCBvZiBjaXBoZXJzdWl0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBTU0wvVExTIG1vZHVsZS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5IG9mIGNpcGhlcnN1aXRlcywgdGhlIGxhc3QKKyAqICAgICAgICAgICAgICAgICAgICAgIGVudHJ5IGlzIDAuCisgKi8KK2NvbnN0IGludCAqbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGNpcGhlcnN1aXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIElECisgKgorICogXHBhcmFtIGNpcGhlcnN1aXRlX2lkIFNTTCBjaXBoZXJzdWl0ZSBJRAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNpcGhlcnN1aXRlIG5hbWUKKyAqLworY29uc3QgY2hhciAqbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUoIGNvbnN0IGludCBjaXBoZXJzdWl0ZV9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFJldHVybiB0aGUgSUQgb2YgdGhlIGNpcGhlcnN1aXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIG5hbWUKKyAqCisgKiBccGFyYW0gY2lwaGVyc3VpdGVfbmFtZSBTU0wgY2lwaGVyc3VpdGUgbmFtZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIHRoZSBJRCB3aXRoIHRoZSBjaXBoZXJzdWl0ZSBvciAwIGlmIG5vdCBmb3VuZAorICovCitpbnQgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX2lkKCBjb25zdCBjaGFyICpjaXBoZXJzdWl0ZV9uYW1lICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgYW4gU1NMIGNvbnRleHQKKyAqICAgICAgICAgICAgICAgICBKdXN0IG1ha2VzIHRoZSBjb250ZXh0IHJlYWR5IGZvciBtYmVkdGxzX3NzbF9zZXR1cCgpIG9yCisgKiAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfZnJlZSgpCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfaW5pdCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB1cCBhbiBTU0wgY29udGV4dCBmb3IgdXNlCisgKgorICogXG5vdGUgICAgICAgICAgIE5vIGNvcHkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyBtYWRlLCBpdCBjYW4gYmUKKyAqICAgICAgICAgICAgICAgICBzaGFyZWQgYnkgbWFueSBtYmVkdGxzX3NzbF9jb250ZXh0IHN0cnVjdHVyZXMuCisgKgorICogXHdhcm5pbmcgICAgICAgIE1vZGlmeWluZyB0aGUgY29uZiBzdHJ1Y3R1cmUgYWZ0ZXIgaXQgaGFzIGJlZW4gdXNlZCBpbiB0aGlzCisgKiAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXMgdW5zdXBwb3J0ZWQhCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24gdG8gdXNlCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCBpZgorICogICAgICAgICAgICAgICAgIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19zc2xfc2V0dXAoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19zc2xfY29uZmlnICpjb25mICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJlc2V0IGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgU1NMIGNvbnRleHQgZm9yIHJlLXVzZQorICogICAgICAgICAgICAgICAgIHdoaWxlIHJldGFpbmluZyBhcHBsaWNhdGlvbi1zZXQgdmFyaWFibGVzLCBmdW5jdGlvbgorICogICAgICAgICAgICAgICAgIHBvaW50ZXJzIGFuZCBkYXRhLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFJTEVEIG9yCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX0NPTVBSRVNTSU9OX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgY3VycmVudCBlbmRwb2ludCB0eXBlCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gZW5kcG9pbnQgbXVzdCBiZSBNQkVEVExTX1NTTF9JU19DTElFTlQgb3IgTUJFRFRMU19TU0xfSVNfU0VSVkVSCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9lbmRwb2ludCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgZW5kcG9pbnQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgdHJhbnNwb3J0IHR5cGUgKFRMUyBvciBEVExTKS4KKyAqICAgICAgICAgICAgICAgICAgRGVmYXVsdDogVExTCisgKgorICogXG5vdGUgICAgICAgICAgICBGb3IgRFRMUywgeW91IG11c3QgZWl0aGVyIHByb3ZpZGUgYSByZWN2IGNhbGxiYWNrIHRoYXQKKyAqICAgICAgICAgICAgICAgICAgZG9lc24ndCBibG9jaywgb3Igb25lIHRoYXQgaGFuZGxlcyB0aW1lb3V0cywgc2VlCisgKiAgICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX3NldF9iaW8oKS4gWW91IGFsc28gbmVlZCB0byBwcm92aWRlIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcyB3aXRoIFxjIG1iZWR0bHNfc3NsX3NldF90aW1lcl9jYigpLgorICoKKyAqIFxwYXJhbSBjb25mICAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSB0cmFuc3BvcnQgdHJhbnNwb3J0IHR5cGU6CisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0gZm9yIFRMUywKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNIGZvciBEVExTLgorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfdHJhbnNwb3J0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGludCB0cmFuc3BvcnQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gbW9kZQorICogICAgICAgICAgICAgICAgIERlZmF1bHQ6IE5PTkUgb24gc2VydmVyLCBSRVFVSVJFRCBvbiBjbGllbnQKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBhdXRobW9kZSBjYW4gYmU6CisgKgorICogIE1CRURUTFNfU1NMX1ZFUklGWV9OT05FOiAgICAgIHBlZXIgY2VydGlmaWNhdGUgaXMgbm90IGNoZWNrZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgb24gc2VydmVyKQorICogICAgICAgICAgICAgICAgICAgICAgICAoaW5zZWN1cmUgb24gY2xpZW50KQorICoKKyAqICBNQkVEVExTX1NTTF9WRVJJRllfT1BUSU9OQUw6ICBwZWVyIGNlcnRpZmljYXRlIGlzIGNoZWNrZWQsIGhvd2V2ZXIgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZSBjb250aW51ZXMgZXZlbiBpZiB2ZXJpZmljYXRpb24gZmFpbGVkOworICogICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIGNhbiBiZSBjYWxsZWQgYWZ0ZXIgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZSBpcyBjb21wbGV0ZS4KKyAqCisgKiAgTUJFRFRMU19TU0xfVkVSSUZZX1JFUVVJUkVEOiAgcGVlciAqbXVzdCogcHJlc2VudCBhIHZhbGlkIGNlcnRpZmljYXRlLAorICogICAgICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2UgaXMgYWJvcnRlZCBpZiB2ZXJpZmljYXRpb24gZmFpbGVkLgorICogICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCBvbiBjbGllbnQpCisgKgorICogXG5vdGUgT24gY2xpZW50LCBNQkVEVExTX1NTTF9WRVJJRllfUkVRVUlSRUQgaXMgdGhlIHJlY29tbWVuZGVkIG1vZGUuCisgKiBXaXRoIE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTCwgdGhlIHVzZXIgbmVlZHMgdG8gY2FsbCBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIGF0CisgKiB0aGUgcmlnaHQgdGltZShzKSwgd2hpY2ggbWF5IG5vdCBiZSBvYnZpb3VzLCB3aGlsZSBSRVFVSVJFRCBhbHdheXMgcGVyZm9ybQorICogdGhlIHZlcmlmaWNhdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLiBGb3IgZXhhbXBsZSwgUkVRVUlSRUQgd2FzIHByb3RlY3RpbmcKKyAqIGFnYWluc3QgdGhlICJ0cmlwbGUgaGFuZHNoYWtlIiBhdHRhY2sgZXZlbiBiZWZvcmUgaXQgd2FzIGZvdW5kLgorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfYXV0aG1vZGUoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IGF1dGhtb2RlICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrIChPcHRpb25hbCkuCisgKgorICogICAgICAgICAgICAgICAgIElmIHNldCwgdGhlIHZlcmlmeSBjYWxsYmFjayBpcyBjYWxsZWQgZm9yIGVhY2gKKyAqICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSBpbiB0aGUgY2hhaW4uIEZvciBpbXBsZW1lbnRhdGlvbgorICogICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIFxjIHg1MDlwYXJzZV92ZXJpZnkoKQorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIGZfdnJmeSAgIHZlcmlmaWNhdGlvbiBmdW5jdGlvbgorICogXHBhcmFtIHBfdnJmeSAgIHZlcmlmaWNhdGlvbiBwYXJhbWV0ZXIKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX3ZlcmlmeSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl92cmZ5KSh2b2lkICosIG1iZWR0bHNfeDUwOV9jcnQgKiwgaW50LCB1aW50MzJfdCAqKSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfdnJmeSApOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGNhbGxiYWNrCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIGRlYnVnIGNhbGxiYWNrCisgKgorICogICAgICAgICAgICAgICAgIFRoZSBjYWxsYmFjayBoYXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudDoKKyAqICAgICAgICAgICAgICAgICB2b2lkICogICAgICAgICAgIG9wYXF1ZSBjb250ZXh0IGZvciB0aGUgY2FsbGJhY2sKKyAqICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgIGRlYnVnIGxldmVsCisgKiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqICAgICBmaWxlIG5hbWUKKyAqICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgIGxpbmUgbnVtYmVyCisgKiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqICAgICBtZXNzYWdlCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gZl9kYmcgICAgZGVidWcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX2RiZyAgICBkZWJ1ZyBwYXJhbWV0ZXIKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2RiZyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgdm9pZCAoKmZfZGJnKSh2b2lkICosIGludCwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKiksCisgICAgICAgICAgICAgICAgICB2b2lkICAqcF9kYmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSB1bmRlcmx5aW5nIEJJTyBjYWxsYmFja3MgZm9yIHdyaXRlLCByZWFkIGFuZAorICogICAgICAgICAgICAgICAgIHJlYWQtd2l0aC10aW1lb3V0LgorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIHBfYmlvICAgIHBhcmFtZXRlciAoY29udGV4dCkgc2hhcmVkIGJ5IEJJTyBjYWxsYmFja3MKKyAqIFxwYXJhbSBmX3NlbmQgICB3cml0ZSBjYWxsYmFjaworICogXHBhcmFtIGZfcmVjdiAgIHJlYWQgY2FsbGJhY2sKKyAqIFxwYXJhbSBmX3JlY3ZfdGltZW91dCBibG9ja2luZyByZWFkIGNhbGxiYWNrIHdpdGggdGltZW91dC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgT25lIG9mIGZfcmVjdiBvciBmX3JlY3ZfdGltZW91dCBjYW4gYmUgTlVMTCwgaW4gd2hpY2ggY2FzZQorICogICAgICAgICAgICAgICAgIHRoZSBvdGhlciBpcyB1c2VkLiBJZiBib3RoIGFyZSBub24tTlVMTCwgZl9yZWN2X3RpbWVvdXQgaXMKKyAqICAgICAgICAgICAgICAgICB1c2VkIGFuZCBmX3JlY3YgaXMgaWdub3JlZCAoYXMgaWYgaXQgd2VyZSBOVUxMKS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIHR3byBtb3N0IGNvbW1vbiB1c2UgY2FzZXMgYXJlOgorICogICAgICAgICAgICAgICAgIC0gbm9uLWJsb2NraW5nIEkvTywgZl9yZWN2ICE9IE5VTEwsIGZfcmVjdl90aW1lb3V0ID09IE5VTEwKKyAqICAgICAgICAgICAgICAgICAtIGJsb2NraW5nIEkvTywgZl9yZWN2ID09IE5VTEwsIGZfcmVjdl90aW1vdXQgIT0gTlVMTAorICoKKyAqIFxub3RlICAgICAgICAgICBGb3IgRFRMUywgeW91IG5lZWQgdG8gcHJvdmlkZSBlaXRoZXIgYSBub24tTlVMTAorICogICAgICAgICAgICAgICAgIGZfcmVjdl90aW1lb3V0IGNhbGxiYWNrLCBvciBhIGZfcmVjdiB0aGF0IGRvZXNuJ3QgYmxvY2suCisgKgorICogXG5vdGUgICAgICAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbnMgb2YgXGMgbWJlZHRsc19zc2xfc2VudF90LAorICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX3JlY3ZfdCBhbmQgXGMgbWJlZHRsc19zc2xfcmVjdl90aW1lb3V0X3QgZm9yCisgKiAgICAgICAgICAgICAgICAgdGhlIGNvbnZlbnRpb25zIHRob3NlIGNhbGxiYWNrcyBtdXN0IGZvbGxvdy4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgT24gc29tZSBwbGF0Zm9ybXMsIG5ldF9zb2NrZXRzLmMgcHJvdmlkZXMKKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX25ldF9zZW5kKCksIFxjIG1iZWR0bHNfbmV0X3JlY3YoKSBhbmQKKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX25ldF9yZWN2X3RpbWVvdXQoKSB0aGF0IGFyZSBzdWl0YWJsZSB0byBiZSB1c2VkCisgKiAgICAgICAgICAgICAgICAgaGVyZS4KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9zZXRfYmlvKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfYmlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX3QgKmZfc2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfcmVjdl90ICpmX3JlY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3JlY3ZfdGltZW91dF90ICpmX3JlY3ZfdGltZW91dCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIHRpbWVvdXQgcGVyaW9kIGZvciBtYmVkdGxzX3NzbF9yZWFkKCkKKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogbm8gdGltZW91dC4pCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uIGNvbnRleHQKKyAqIFxwYXJhbSB0aW1lb3V0ICBUaW1lb3V0IHZhbHVlIGluIG1pbGxpc2Vjb25kcy4KKyAqICAgICAgICAgICAgICAgICBVc2UgMCBmb3Igbm8gdGltZW91dCAoZGVmYXVsdCkuCisgKgorICogXG5vdGUgICAgICAgICAgIFdpdGggYmxvY2tpbmcgSS9PLCB0aGlzIHdpbGwgb25seSB3b3JrIGlmIGEgbm9uLU5VTEwKKyAqICAgICAgICAgICAgICAgICBcYyBmX3JlY3ZfdGltZW91dCB3YXMgc2V0IHdpdGggXGMgbWJlZHRsc19zc2xfc2V0X2JpbygpLgorICogICAgICAgICAgICAgICAgIFdpdGggbm9uLWJsb2NraW5nIEkvTywgdGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aW1lcgorICogICAgICAgICAgICAgICAgIGNhbGxiYWNrcyB3ZXJlIHNldCB3aXRoIFxjIG1iZWR0bHNfc3NsX3NldF90aW1lcl9jYigpLgorICoKKyAqIFxub3RlICAgICAgICAgICBXaXRoIG5vbi1ibG9ja2luZyBJL08sIHlvdSBtYXkgYWxzbyBza2lwIHRoaXMgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICAgICBhbHRvZ2V0aGVyIGFuZCBoYW5kbGUgdGltZW91dHMgYXQgdGhlIGFwcGxpY2F0aW9uIGxheWVyLgorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfcmVhZF90aW1lb3V0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIHVpbnQzMl90IHRpbWVvdXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSB0aW1lciBjYWxsYmFja3MgKE1hbmRhdG9yeSBmb3IgRFRMUy4pCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gcF90aW1lciAgcGFyYW1ldGVyIChjb250ZXh0KSBzaGFyZWQgYnkgdGltZXIgY2FsbGJhY2tzCisgKiBccGFyYW0gZl9zZXRfdGltZXIgICBzZXQgdGltZXIgY2FsbGJhY2sKKyAqIFxwYXJhbSBmX2dldF90aW1lciAgIGdldCB0aW1lciBjYWxsYmFjay4gTXVzdCByZXR1cm46CisgKgorICogXG5vdGUgICAgICAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBcYyBtYmVkdGxzX3NzbF9zZXRfdGltZXJfdCBhbmQKKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX3NzbF9nZXRfdGltZXJfdCBmb3IgdGhlIGNvbnZlbnRpb25zIHRoaXMgcGFpciBvZgorICogICAgICAgICAgICAgICAgIGNhbGxiYWNrcyBtdXN0IGZhbGxvdy4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgT24gc29tZSBwbGF0Zm9ybXMsIHRpbWluZy5jIHByb3ZpZGVzCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc190aW1pbmdfc2V0X2RlbGF5KCkgYW5kCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc190aW1pbmdfZ2V0X2RlbGF5KCkgdGhhdCBhcmUgc3VpdGFibGUgZm9yIHVzaW5nCisgKiAgICAgICAgICAgICAgICAgaGVyZSwgZXhjZXB0IGlmIHVzaW5nIGFuIGV2ZW50LWRyaXZlbiBzdHlsZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2VlIGFsc28gdGhlICJEVExTIHR1dG9yaWFsIiBhcnRpY2xlIGluIG91ciBrbm93bGVkZ2UgYmFzZS4KKyAqICAgICAgICAgICAgICAgICBodHRwczovL3Rscy5tYmVkLm9yZy9rYi9ob3ctdG8vZHRscy10dXRvcmlhbAorICovCit2b2lkIG1iZWR0bHNfc3NsX3NldF90aW1lcl9jYiggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfdGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfc2V0X3RpbWVyX3QgKmZfc2V0X3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF90aW1lcl90ICpmX2dldF90aW1lciApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ2FsbGJhY2sgdHlwZTogZ2VuZXJhdGUgYW5kIHdyaXRlIHNlc3Npb24gdGlja2V0CisgKgorICogXG5vdGUgICAgICAgICAgICBUaGlzIGRlc2NyaWJlcyB3aGF0IGEgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24gc2hvdWxkIGRvLgorICogICAgICAgICAgICAgICAgICBUaGlzIGNhbGxiYWNrIHNob3VsZCBnZW5lcmF0ZSBhbiBlbmNyeXB0ZWQgYW5kCisgKiAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQgdGlja2V0IGZvciB0aGUgc2Vzc2lvbiBhbmQgd3JpdGUgaXQgdG8gdGhlCisgKiAgICAgICAgICAgICAgICAgIG91dHB1dCBidWZmZXIuIEhlcmUsIHRpY2tldCBtZWFucyB0aGUgb3BhcXVlIHRpY2tldCBwYXJ0CisgKiAgICAgICAgICAgICAgICAgIG9mIHRoZSBOZXdTZXNzaW9uVGlja2V0IHN0cnVjdHVyZSBvZiBSRkMgNTA3Ny4KKyAqCisgKiBccGFyYW0gcF90aWNrZXQgIENvbnRleHQgZm9yIHRoZSBjYWxsYmFjaworICogXHBhcmFtIHNlc3Npb24gICBTU0wgc2Vzc2lvbiB0byBiZSB3cml0dGVuIGluIHRoZSB0aWNrZXQKKyAqIFxwYXJhbSBzdGFydCAgICAgU3RhcnQgb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqIFxwYXJhbSBlbmQgICAgICAgRW5kIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisgKiBccGFyYW0gdGxlbiAgICAgIE9uIGV4aXQsIGhvbGRzIHRoZSBsZW5ndGggd3JpdHRlbgorICogXHBhcmFtIGxpZmV0aW1lICBPbiBleGl0LCBob2xkcyB0aGUgbGlmZXRpbWUgb2YgdGhlIHRpY2tldCBpbiBzZWNvbmRzCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yCisgKiAgICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgTUJFRFRMU19FUlJfWFhYIGNvZGUuCisgKi8KK3R5cGVkZWYgaW50IG1iZWR0bHNfc3NsX3RpY2tldF93cml0ZV90KCB2b2lkICpwX3RpY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmxpZmV0aW1lICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENhbGxiYWNrIHR5cGU6IEV4cG9ydCBrZXkgYmxvY2sgYW5kIG1hc3RlciBzZWNyZXQKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNlcnRhaW4gdXNlcyBvZiBUTFMsIGUuZy4gRUFQLVRMUworICogICAgICAgICAgICAgICAgICAoUkZDIDUyMTYpIGFuZCBUaHJlYWQuIFRoZSBrZXkgcG9pbnRlcnMgYXJlIGVwaGVtZXJhbCBhbmQKKyAqICAgICAgICAgICAgICAgICAgdGhlcmVmb3JlIG11c3Qgbm90IGJlIHN0b3JlZC4gVGhlIG1hc3RlciBzZWNyZXQgYW5kIGtleXMKKyAqICAgICAgICAgICAgICAgICAgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5IGV4Y2VwdCBhcyBhbiBpbnB1dCB0byBhIGtleQorICogICAgICAgICAgICAgICAgICBkZXJpdmF0aW9uIGZ1bmN0aW9uLgorICoKKyAqIFxwYXJhbSBwX2V4cGtleSAgQ29udGV4dCBmb3IgdGhlIGNhbGxiYWNrCisgKiBccGFyYW0gbXMgICAgICAgIFBvaW50ZXIgdG8gbWFzdGVyIHNlY3JldCAoZml4ZWQgbGVuZ3RoOiA0OCBieXRlcykKKyAqIFxwYXJhbSBrYiAgICAgICAgUG9pbnRlciB0byBrZXkgYmxvY2ssIHNlZSBSRkMgNTI0NiBzZWN0aW9uIDYuMworICogICAgICAgICAgICAgICAgICAodmFyaWFibGUgbGVuZ3RoOiAyICogbWFjbGVuICsgMiAqIGtleWxlbiArIDIgKiBpdmxlbikuCisgKiBccGFyYW0gbWFjbGVuICAgIE1BQyBsZW5ndGgKKyAqIFxwYXJhbSBrZXlsZW4gICAgS2V5IGxlbmd0aAorICogXHBhcmFtIGl2bGVuICAgICBJViBsZW5ndGgKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBNQkVEVExTX0VSUl9YWFggY29kZS4KKyAqLwordHlwZWRlZiBpbnQgbWJlZHRsc19zc2xfZXhwb3J0X2tleXNfdCggdm9pZCAqcF9leHBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1hY2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGl2bGVuICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENhbGxiYWNrIHR5cGU6IHBhcnNlIGFuZCBsb2FkIHNlc3Npb24gdGlja2V0CisgKgorICogXG5vdGUgICAgICAgICAgICBUaGlzIGRlc2NyaWJlcyB3aGF0IGEgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24gc2hvdWxkIGRvLgorICogICAgICAgICAgICAgICAgICBUaGlzIGNhbGxiYWNrIHNob3VsZCBwYXJzZSBhIHNlc3Npb24gdGlja2V0IGFzIGdlbmVyYXRlZAorICogICAgICAgICAgICAgICAgICBieSB0aGUgY29ycmVzcG9uZGluZyBtYmVkdGxzX3NzbF90aWNrZXRfd3JpdGVfdCBmdW5jdGlvbiwKKyAqICAgICAgICAgICAgICAgICAgYW5kLCBpZiB0aGUgdGlja2V0IGlzIGF1dGhlbnRpYyBhbmQgdmFsaWQsIGxvYWQgdGhlCisgKiAgICAgICAgICAgICAgICAgIHNlc3Npb24uCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGUgaW1wbGVtZW50YXRpb24gaXMgYWxsb3dlZCB0byBtb2RpZnkgdGhlIGZpcnN0IGxlbgorICogICAgICAgICAgICAgICAgICBieXRlcyBvZiB0aGUgaW5wdXQgYnVmZmVyLCBlZyB0byB1c2UgaXQgYXMgYSB0ZW1wb3JhcnkKKyAqICAgICAgICAgICAgICAgICAgYXJlYSBmb3IgdGhlIGRlY3J5cHRlZCB0aWNrZXQgY29udGVudHMuCisgKgorICogXHBhcmFtIHBfdGlja2V0ICBDb250ZXh0IGZvciB0aGUgY2FsbGJhY2sKKyAqIFxwYXJhbSBzZXNzaW9uICAgU1NMIHNlc3Npb24gdG8gYmUgbG9hZGVkCisgKiBccGFyYW0gYnVmICAgICAgIFN0YXJ0IG9mIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgdGlja2V0CisgKiBccGFyYW0gbGVuICAgICAgIExlbmd0aCBvZiB0aGUgdGlja2V0LgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUMgaWYgbm90IGF1dGhlbnRpYywgb3IKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX1NFU1NJT05fVElDS0VUX0VYUElSRUQgaWYgZXhwaXJlZCwgb3IKKyAqICAgICAgICAgICAgICAgICAgYW55IG90aGVyIG5vbi16ZXJvIGNvZGUgZm9yIG90aGVyIGZhaWx1cmVzLgorICovCit0eXBlZGVmIGludCBtYmVkdGxzX3NzbF90aWNrZXRfcGFyc2VfdCggdm9pZCAqcF90aWNrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ29uZmlndXJlIFNTTCBzZXNzaW9uIHRpY2tldCBjYWxsYmFja3MgKHNlcnZlciBvbmx5KS4KKyAqICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IG5vbmUuKQorICoKKyAqIFxub3RlICAgICAgICAgICAgT24gc2VydmVyLCBzZXNzaW9uIHRpY2tldHMgYXJlIGVuYWJsZWQgYnkgcHJvdmlkaW5nCisgKiAgICAgICAgICAgICAgICAgIG5vbi1OVUxMIGNhbGxiYWNrcy4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIE9uIGNsaWVudCwgdXNlIFxjIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl90aWNrZXRzKCkuCisgKgorICogXHBhcmFtIGNvbmYgICAgICBTU0wgY29uZmlndXJhdGlvbiBjb250ZXh0CisgKiBccGFyYW0gZl90aWNrZXRfd3JpdGUgICAgQ2FsbGJhY2sgZm9yIHdyaXRpbmcgYSB0aWNrZXQKKyAqIFxwYXJhbSBmX3RpY2tldF9wYXJzZSAgICBDYWxsYmFjayBmb3IgcGFyc2luZyBhIHRpY2tldAorICogXHBhcmFtIHBfdGlja2V0ICAgICAgICAgIENvbnRleHQgc2hhcmVkIGJ5IHRoZSB0d28gY2FsbGJhY2tzCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHNfY2IoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgbWJlZHRsc19zc2xfdGlja2V0X3dyaXRlX3QgKmZfdGlja2V0X3dyaXRlLAorICAgICAgICBtYmVkdGxzX3NzbF90aWNrZXRfcGFyc2VfdCAqZl90aWNrZXRfcGFyc2UsCisgICAgICAgIHZvaWQgKnBfdGlja2V0ICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICYmIE1CRURUTFNfU1NMX1NSVl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENvbmZpZ3VyZSBrZXkgZXhwb3J0IGNhbGxiYWNrLgorICogICAgICAgICAgICAgICAgICAoRGVmYXVsdDogbm9uZS4pCisgKgorICogXG5vdGUgICAgICAgICAgICBTZWUgXGMgbWJlZHRsc19zc2xfZXhwb3J0X2tleXNfdC4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgIFNTTCBjb25maWd1cmF0aW9uIGNvbnRleHQKKyAqIFxwYXJhbSBmX2V4cG9ydF9rZXlzICAgICBDYWxsYmFjayBmb3IgZXhwb3J0aW5nIGtleXMKKyAqIFxwYXJhbSBwX2V4cG9ydF9rZXlzICAgICBDb250ZXh0IGZvciB0aGUgY2FsbGJhY2sKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2V4cG9ydF9rZXlzX2NiKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgIG1iZWR0bHNfc3NsX2V4cG9ydF9rZXlzX3QgKmZfZXhwb3J0X2tleXMsCisgICAgICAgIHZvaWQgKnBfZXhwb3J0X2tleXMgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDYWxsYmFjayB0eXBlOiBnZW5lcmF0ZSBhIGNvb2tpZQorICoKKyAqIFxwYXJhbSBjdHggICAgICBDb250ZXh0IGZvciB0aGUgY2FsbGJhY2sKKyAqIFxwYXJhbSBwICAgICAgICBCdWZmZXIgdG8gd3JpdGUgdG8sCisgKiAgICAgICAgICAgICAgICAgbXVzdCBiZSB1cGRhdGVkIHRvIHBvaW50IHJpZ2h0IGFmdGVyIHRoZSBjb29raWUKKyAqIFxwYXJhbSBlbmQgICAgICBQb2ludGVyIHRvIG9uZSBwYXN0IHRoZSBlbmQgb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqIFxwYXJhbSBpbmZvICAgICBDbGllbnQgSUQgaW5mbyB0aGF0IHdhcyBwYXNzZWQgdG8KKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX3NzbF9zZXRfY2xpZW50X3RyYW5zcG9ydF9pZCgpCisgKiBccGFyYW0gaWxlbiAgICAgTGVuZ3RoIG9mIGluZm8gaW4gYnl0ZXMKKyAqCisgKiBccmV0dXJuICAgICAgICAgVGhlIGNhbGxiYWNrIG11c3QgcmV0dXJuIDAgb24gc3VjY2VzcywKKyAqICAgICAgICAgICAgICAgICBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK3R5cGVkZWYgaW50IG1iZWR0bHNfc3NsX2Nvb2tpZV93cml0ZV90KCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZm8sIHNpemVfdCBpbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENhbGxiYWNrIHR5cGU6IHZlcmlmeSBhIGNvb2tpZQorICoKKyAqIFxwYXJhbSBjdHggICAgICBDb250ZXh0IGZvciB0aGUgY2FsbGJhY2sKKyAqIFxwYXJhbSBjb29raWUgICBDb29raWUgdG8gdmVyaWZ5CisgKiBccGFyYW0gY2xlbiAgICAgTGVuZ3RoIG9mIGNvb2tpZQorICogXHBhcmFtIGluZm8gICAgIENsaWVudCBJRCBpbmZvIHRoYXQgd2FzIHBhc3NlZCB0bworICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX3NldF9jbGllbnRfdHJhbnNwb3J0X2lkKCkKKyAqIFxwYXJhbSBpbGVuICAgICBMZW5ndGggb2YgaW5mbyBpbiBieXRlcworICoKKyAqIFxyZXR1cm4gICAgICAgICBUaGUgY2FsbGJhY2sgbXVzdCByZXR1cm4gMCBpZiBjb29raWUgaXMgdmFsaWQsCisgKiAgICAgICAgICAgICAgICAgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCit0eXBlZGVmIGludCBtYmVkdGxzX3NzbF9jb29raWVfY2hlY2tfdCggdm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb29raWUsIHNpemVfdCBjbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmZvLCBzaXplX3QgaWxlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBSZWdpc3RlciBjYWxsYmFja3MgZm9yIERUTFMgY29va2llcworICogICAgICAgICAgICAgICAgICAoU2VydmVyIG9ubHkuIERUTFMgb25seS4pCisgKgorICogICAgICAgICAgICAgICAgICBEZWZhdWx0OiBkdW1teSBjYWxsYmFja3MgdGhhdCBmYWlsLCBpbiBvcmRlciB0byBmb3JjZSB5b3UgdG8KKyAqICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgd29ya2luZyBjYWxsYmFja3MgKGFuZCBpbml0aWFsaXplIHRoZWlyIGNvbnRleHQpLgorICoKKyAqICAgICAgICAgICAgICAgICAgVG8gZGlzYWJsZSBIZWxsb1ZlcmlmeVJlcXVlc3QsIHJlZ2lzdGVyIE5VTEwgY2FsbGJhY2tzLgorICoKKyAqIFx3YXJuaW5nICAgICAgICAgRGlzYWJsaW5nIGhlbGxvIHZlcmlmaWNhdGlvbiBhbGxvd3MgeW91ciBzZXJ2ZXIgdG8gYmUgdXNlZAorICogICAgICAgICAgICAgICAgICBmb3IgYW1wbGlmaWNhdGlvbiBpbiBEb1MgYXR0YWNrcyBhZ2FpbnN0IG90aGVyIGhvc3RzLgorICogICAgICAgICAgICAgICAgICBPbmx5IGRpc2FibGUgaWYgeW91IGtub3duIHRoaXMgY2FuJ3QgaGFwcGVuIGluIHlvdXIKKyAqICAgICAgICAgICAgICAgICAgcGFydGljdWxhciBlbnZpcm9ubWVudC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFNlZSBjb21tZW50cyBvbiBcYyBtYmVkdGxzX3NzbF9oYW5kc2hha2UoKSBhYm91dCBoYW5kbGluZworICogICAgICAgICAgICAgICAgICB0aGUgTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRCB0aGF0IGlzIGV4cGVjdGVkCisgKiAgICAgICAgICAgICAgICAgIG9uIHRoZSBmaXJzdCBoYW5kc2hha2UgYXR0ZW1wdCB3aGVuIHRoaXMgaXMgZW5hYmxlZC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoaXMgaXMgYWxzbyBuZWNlc3NhcnkgdG8gaGFuZGxlIGNsaWVudCByZWNvbm5lY3Rpb24gZnJvbQorICogICAgICAgICAgICAgICAgICB0aGUgc2FtZSBwb3J0IGFzIGRlc2NyaWJlZCBpbiBSRkMgNjM0NyBzZWN0aW9uIDQuMi44IChvbmx5CisgKiAgICAgICAgICAgICAgICAgIHRoZSB2YXJpYW50IHdpdGggY29va2llcyBpcyBzdXBwb3J0ZWQgY3VycmVudGx5KS4gU2VlCisgKiAgICAgICAgICAgICAgICAgIGNvbW1lbnRzIG9uIFxjIG1iZWR0bHNfc3NsX3JlYWQoKSBmb3IgZGV0YWlscy4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgICAgICAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBmX2Nvb2tpZV93cml0ZSAgICBDb29raWUgd3JpdGUgY2FsbGJhY2sKKyAqIFxwYXJhbSBmX2Nvb2tpZV9jaGVjayAgICBDb29raWUgY2hlY2sgY2FsbGJhY2sKKyAqIFxwYXJhbSBwX2Nvb2tpZSAgICAgICAgICBDb250ZXh0IGZvciBib3RoIGNhbGxiYWNrcworICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19jb29raWVzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGVfdCAqZl9jb29raWVfd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb29raWVfY2hlY2tfdCAqZl9jb29raWVfY2hlY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX2Nvb2tpZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgY2xpZW50J3MgdHJhbnNwb3J0LWxldmVsIGlkZW50aWZpY2F0aW9uIGluZm8uCisgKiAgICAgICAgICAgICAgICAgKFNlcnZlciBvbmx5LiBEVExTIG9ubHkuKQorICoKKyAqICAgICAgICAgICAgICAgICBUaGlzIGlzIHVzdWFsbHkgdGhlIElQIGFkZHJlc3MgKGFuZCBwb3J0KSwgYnV0IGNvdWxkIGJlCisgKiAgICAgICAgICAgICAgICAgYW55dGhpbmcgaWRlbnRpZnkgdGhlIGNsaWVudCBkZXBlbmRpbmcgb24gdGhlIHVuZGVybHlpbmcKKyAqICAgICAgICAgICAgICAgICBuZXR3b3JrIHN0YWNrLiBVc2VkIGZvciBIZWxsb1ZlcmlmeVJlcXVlc3Qgd2l0aCBEVExTLgorICogICAgICAgICAgICAgICAgIFRoaXMgaXMgKm5vdCogdXNlZCB0byByb3V0ZSB0aGUgYWN0dWFsIHBhY2tldHMuCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gaW5mbyAgICAgVHJhbnNwb3J0LWxldmVsIGluZm8gaWRlbnRpZnlpbmcgdGhlIGNsaWVudCAoZWcgSVAgKyBwb3J0KQorICogXHBhcmFtIGlsZW4gICAgIExlbmd0aCBvZiBpbmZvIGluIGJ5dGVzCisgKgorICogXG5vdGUgICAgICAgICAgIEFuIGludGVybmFsIGNvcHkgaXMgbWFkZSwgc28gdGhlIGluZm8gYnVmZmVyIGNhbiBiZSByZXVzZWQuCisgKgorICogXHJldHVybiAgICAgICAgIDAgb24gc3VjY2VzcywKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgaWYgdXNlZCBvbiBjbGllbnQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCBpZiBvdXQgb2YgbWVtb3J5LgorICovCitpbnQgbWJlZHRsc19zc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWxlbiApOworCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkgJiYgTUJFRFRMU19TU0xfU1JWX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWSkKKy8qKgorICogXGJyaWVmICAgICAgICAgIEVuYWJsZSBvciBkaXNhYmxlIGFudGktcmVwbGF5IHByb3RlY3Rpb24gZm9yIERUTFMuCisgKiAgICAgICAgICAgICAgICAgKERUTFMgb25seSwgbm8gZWZmZWN0IG9uIFRMUy4pCisgKiAgICAgICAgICAgICAgICAgRGVmYXVsdDogZW5hYmxlZC4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX1NTTF9BTlRJX1JFUExBWV9FTkFCTEVEIG9yIE1CRURUTFNfU1NMX0FOVElfUkVQTEFZX0RJU0FCTEVELgorICoKKyAqIFx3YXJuaW5nICAgICAgICBEaXNhYmxpbmcgdGhpcyBpcyBhIHNlY3VyaXR5IHJpc2sgdW5sZXNzIHRoZSBhcHBsaWNhdGlvbgorICogICAgICAgICAgICAgICAgIHByb3RvY29sIGhhbmRsZXMgZHVwbGljYXRlZCBwYWNrZXRzIGluIGEgc2FmZSB3YXkuIFlvdQorICogICAgICAgICAgICAgICAgIHNob3VsZCBub3QgZGlzYWJsZSB0aGlzIHdpdGhvdXQgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLgorICogICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdXIgYXBwbGljYXRpb24gYWxyZWFkeSBkZXRlY3RzIGR1cGxpY2F0ZWQKKyAqICAgICAgICAgICAgICAgICBwYWNrZXRzIGFuZCBuZWVkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGVtIHRvIGFkanVzdCBpdHMKKyAqICAgICAgICAgICAgICAgICB0cmFuc21pc3Npb24gc3RyYXRlZ3ksIHRoZW4geW91J2xsIHdhbnQgdG8gZGlzYWJsZSB0aGlzLgorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19hbnRpX3JlcGxheSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjaGFyIG1vZGUgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IGEgbGltaXQgb24gdGhlIG51bWJlciBvZiByZWNvcmRzIHdpdGggYSBiYWQgTUFDCisgKiAgICAgICAgICAgICAgICAgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSBjb25uZWN0aW9uLgorICogICAgICAgICAgICAgICAgIChEVExTIG9ubHksIG5vIGVmZmVjdCBvbiBUTFMuKQorICogICAgICAgICAgICAgICAgIERlZmF1bHQ6IDAgKGRpc2FibGVkKS4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBsaW1pdCAgICBMaW1pdCwgb3IgMCB0byBkaXNhYmxlLgorICoKKyAqIFxub3RlICAgICAgICAgICBJZiB0aGUgbGltaXQgaXMgTiwgdGhlbiB0aGUgY29ubmVjdGlvbiBpcyB0ZXJtaW5hdGVkIHdoZW4KKyAqICAgICAgICAgICAgICAgICB0aGUgTnRoIG5vbi1hdXRoZW50aWMgcmVjb3JkIGlzIHNlZW4uCisgKgorICogXG5vdGUgICAgICAgICAgIFJlY29yZHMgd2l0aCBhbiBpbnZhbGlkIGhlYWRlciBhcmUgbm90IGNvdW50ZWQsIG9ubHkgdGhlCisgKiAgICAgICAgICAgICAgICAgb25lcyBnb2luZyB0aHJvdWdoIHRoZSBhdXRoZW50aWNhdGlvbi1kZWNyeXB0aW9uIHBoYXNlLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGlzIGlzIGEgc2VjdXJpdHkgdHJhZGUtb2ZmIHJlbGF0ZWQgdG8gdGhlIGZhY3QgdGhhdCBpdCdzCisgKiAgICAgICAgICAgICAgICAgb2Z0ZW4gcmVsYXRpdmVseSBlYXN5IGZvciBhbiBhY3RpdmUgYXR0YWNrZXIgb3QgaW5qZWN0IFVEUAorICogICAgICAgICAgICAgICAgIGRhdGFncmFtcy4gT24gb25lIGhhbmQsIHNldHRpbmcgYSBsb3cgbGltaXQgaGVyZSBtYWtlcyBpdAorICogICAgICAgICAgICAgICAgIGVhc2llciBmb3Igc3VjaCBhbiBhdHRhY2tlciB0byBmb3JjaWJseSB0ZXJtaW5hdGVkIGEKKyAqICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLiBPbiB0aGUgb3RoZXIgaGFuZCwgYSBoaWdoIGxpbWl0IG9yIG5vIGxpbWl0CisgKiAgICAgICAgICAgICAgICAgbWlnaHQgbWFrZSB1cyB3YXN0ZSByZXNvdXJjZXMgY2hlY2tpbmcgYXV0aGVudGljYXRpb24gb24KKyAqICAgICAgICAgICAgICAgICBtYW55IGJvZ3VzIHBhY2tldHMuCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9kdGxzX2JhZG1hY19saW1pdCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCB1bnNpZ25lZCBsaW1pdCApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgcmV0cmFuc21pdCB0aW1lb3V0IHZhbHVlcyBmb3IgdGhlIERUTFMgaGFuZHNoYWtlLgorICogICAgICAgICAgICAgICAgIChEVExTIG9ubHksIG5vIGVmZmVjdCBvbiBUTFMuKQorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIG1pbiAgICAgIEluaXRpYWwgdGltZW91dCB2YWx1ZSBpbiBtaWxsaXNlY29uZHMuCisgKiAgICAgICAgICAgICAgICAgRGVmYXVsdDogMTAwMCAoMSBzZWNvbmQpLgorICogXHBhcmFtIG1heCAgICAgIE1heGltdW0gdGltZW91dCB2YWx1ZSBpbiBtaWxsaXNlY29uZHMuCisgKiAgICAgICAgICAgICAgICAgRGVmYXVsdDogNjAwMDAgKDYwIHNlY29uZHMpLgorICoKKyAqIFxub3RlICAgICAgICAgICBEZWZhdWx0IHZhbHVlcyBhcmUgZnJvbSBSRkMgNjM0NyBzZWN0aW9uIDQuMi40LjEuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSAnbWluJyB2YWx1ZSBzaG91bGQgdHlwaWNhbGx5IGJlIHNsaWdodGx5IGFib3ZlIHRoZQorICogICAgICAgICAgICAgICAgIGV4cGVjdGVkIHJvdW5kLXRyaXAgdGltZSB0byB5b3VyIHBlZXIsIHBsdXMgd2hhdGV2ZXIgdGltZQorICogICAgICAgICAgICAgICAgIGl0IHRha2VzIGZvciB0aGUgcGVlciB0byBwcm9jZXNzIHRoZSBtZXNzYWdlLiBGb3IgZXhhbXBsZSwKKyAqICAgICAgICAgICAgICAgICBpZiB5b3VyIFJUVCBpcyBhYm91dCA2MDBtcyBhbmQgeW91IHBlZXIgbmVlZHMgdXAgdG8gMXMgdG8KKyAqICAgICAgICAgICAgICAgICBkbyB0aGUgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIGluIHRoZSBoYW5kc2hha2UsIHRoZW4geW91CisgKiAgICAgICAgICAgICAgICAgc2hvdWxkIHNldCAnbWluJyBzbGlnaHRseSBhYm92ZSAxNjAwLiBMb3dlciB2YWx1ZXMgb2YgJ21pbicKKyAqICAgICAgICAgICAgICAgICBtaWdodCBjYXVzZSBzcHVyaW91cyByZXNlbmRzIHdoaWNoIHdhc3RlIG5ldHdvcmsgcmVzb3VyY2VzLAorICogICAgICAgICAgICAgICAgIHdoaWxlIGxhcmdlciB2YWx1ZSBvZiAnbWluJyB3aWxsIGluY3JlYXNlIG92ZXJhbGwgbGF0ZW5jeQorICogICAgICAgICAgICAgICAgIG9uIHVucmVsaWFibGUgbmV0d29yayBsaW5rcy4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIG1vcmUgdW5yZWxpYWJsZSB5b3VyIG5ldHdvcmsgY29ubmVjdGlvbiBpcywgdGhlIGxhcmdlcgorICogICAgICAgICAgICAgICAgIHlvdXIgbWF4IC8gbWluIHJhdGlvIG5lZWRzIHRvIGJlIGluIG9yZGVyIHRvIGFjaGlldmUKKyAqICAgICAgICAgICAgICAgICByZWxpYWJsZSBoYW5kc2hha2VzLgorICoKKyAqIFxub3RlICAgICAgICAgICBNZXNzYWdlcyBhcmUgcmV0cmFuc21pdHRlZCB1cCB0byBsb2cyKGNlaWwobWF4L21pbikpIHRpbWVzLgorICogICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBtaW4gPSAxcyBhbmQgbWF4ID0gNXMsIHRoZSByZXRyYW5zbWl0IHBsYW4KKyAqICAgICAgICAgICAgICAgICBnb2VzOiBzZW5kIC4uLiAxcyAtPiByZXNlbmQgLi4uIDJzIC0+IHJlc2VuZCAuLi4gNHMgLT4KKyAqICAgICAgICAgICAgICAgICByZXNlbmQgLi4uIDVzIC0+IGdpdmUgdXAgYW5kIHJldHVybiBhIHRpbWVvdXQgZXJyb3IuCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9oYW5kc2hha2VfdGltZW91dCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCB1aW50MzJfdCBtaW4sIHVpbnQzMl90IG1heCApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIHNlc3Npb24gY2FjaGUgY2FsbGJhY2tzIChzZXJ2ZXItc2lkZSBvbmx5KQorICogICAgICAgICAgICAgICAgIElmIG5vdCBzZXQsIG5vIHNlc3Npb24gcmVzdW1pbmcgaXMgZG9uZSAoZXhjZXB0IGlmIHNlc3Npb24KKyAqICAgICAgICAgICAgICAgICB0aWNrZXRzIGFyZSBlbmFibGVkIHRvbykuCisgKgorICogICAgICAgICAgICAgICAgIFRoZSBzZXNzaW9uIGNhY2hlIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgdG8gY2hlY2sgZm9yIHN0YWxlCisgKiAgICAgICAgICAgICAgICAgZW50cmllcyBiYXNlZCBvbiB0aW1lb3V0LiBTZWUgUkZDIDUyNDYgZm9yIHJlY29tbWVuZGF0aW9ucy4KKyAqCisgKiAgICAgICAgICAgICAgICAgV2FybmluZzogc2Vzc2lvbi5wZWVyX2NlcnQgaXMgY2xlYXJlZCBieSB0aGUgU1NML1RMUyBsYXllciBvbgorICogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gc2h1dGRvd24sIHNvIGRvIG5vdCBjYWNoZSB0aGUgcG9pbnRlciEgRWl0aGVyIHNldAorICogICAgICAgICAgICAgICAgIGl0IHRvIE5VTEwgb3IgbWFrZSBhIGZ1bGwgY29weSBvZiB0aGUgY2VydGlmaWNhdGUuCisgKgorICogICAgICAgICAgICAgICAgIFRoZSBnZXQgY2FsbGJhY2sgaXMgY2FsbGVkIG9uY2UgZHVyaW5nIHRoZSBpbml0aWFsIGhhbmRzaGFrZQorICogICAgICAgICAgICAgICAgIHRvIGVuYWJsZSBzZXNzaW9uIHJlc3VtaW5nLiBUaGUgZ2V0IGZ1bmN0aW9uIGhhcyB0aGUKKyAqICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgcGFyYW1ldGVyczogKHZvaWQgKnBhcmFtZXRlciwgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbikKKyAqICAgICAgICAgICAgICAgICBJZiBhIHZhbGlkIGVudHJ5IGlzIGZvdW5kLCBpdCBzaG91bGQgZmlsbCB0aGUgbWFzdGVyIG9mCisgKiAgICAgICAgICAgICAgICAgdGhlIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIGNhY2hlZCB2YWx1ZXMgYW5kIHJldHVybiAwLAorICogICAgICAgICAgICAgICAgIHJldHVybiAxIG90aGVyd2lzZS4gT3B0aW9uYWxseSBwZWVyX2NlcnQgY2FuIGJlIHNldCBhcyB3ZWxsCisgKiAgICAgICAgICAgICAgICAgaWYgaXQgaXMgcHJvcGVybHkgcHJlc2VudCBpbiBjYWNoZSBlbnRyeS4KKyAqCisgKiAgICAgICAgICAgICAgICAgVGhlIHNldCBjYWxsYmFjayBpcyBjYWxsZWQgb25jZSBkdXJpbmcgdGhlIGluaXRpYWwgaGFuZHNoYWtlCisgKiAgICAgICAgICAgICAgICAgdG8gZW5hYmxlIHNlc3Npb24gcmVzdW1pbmcgYWZ0ZXIgdGhlIGVudGlyZSBoYW5kc2hha2UgaGFzCisgKiAgICAgICAgICAgICAgICAgYmVlbiBmaW5pc2hlZC4gVGhlIHNldCBmdW5jdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorICogICAgICAgICAgICAgICAgICh2b2lkICpwYXJhbWV0ZXIsIGNvbnN0IG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24pLiBUaGUgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICAgICBzaG91bGQgY3JlYXRlIGEgY2FjaGUgZW50cnkgZm9yIGZ1dHVyZSByZXRyaWV2YWwgYmFzZWQgb24KKyAqICAgICAgICAgICAgICAgICB0aGUgZGF0YSBpbiB0aGUgc2Vzc2lvbiBzdHJ1Y3R1cmUgYW5kIHNob3VsZCBrZWVwIGluIG1pbmQKKyAqICAgICAgICAgICAgICAgICB0aGF0IHRoZSBtYmVkdGxzX3NzbF9zZXNzaW9uIG9iamVjdCBwcmVzZW50ZWQgKGFuZCBhbGwgaXRzIHJlZmVyZW5jZWQKKyAqICAgICAgICAgICAgICAgICBkYXRhKSBpcyBjbGVhcmVkIGJ5IHRoZSBTU0wvVExTIGxheWVyIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMKKyAqICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byBhZGQgbWV0YWRhdGEgdG8gZGV0ZXJtaW5lIGlmCisgKiAgICAgICAgICAgICAgICAgYW4gZW50cnkgaXMgc3RpbGwgdmFsaWQgaW4gdGhlIGZ1dHVyZS4gUmV0dXJuIDAgaWYKKyAqICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgY2FjaGVkLCByZXR1cm4gMSBvdGhlcndpc2UuCisgKgorICogXHBhcmFtIGNvbmYgICAgICAgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gcF9jYWNoZSAgICAgICAgcGFybWF0ZXIgKGNvbnRleHQpIGZvciBib3RoIGNhbGxiYWNrcworICogXHBhcmFtIGZfZ2V0X2NhY2hlICAgIHNlc3Npb24gZ2V0IGNhbGxiYWNrCisgKiBccGFyYW0gZl9zZXRfY2FjaGUgICAgc2Vzc2lvbiBzZXQgY2FsbGJhY2sKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fY2FjaGUoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgdm9pZCAqcF9jYWNoZSwKKyAgICAgICAgaW50ICgqZl9nZXRfY2FjaGUpKHZvaWQgKiwgbWJlZHRsc19zc2xfc2Vzc2lvbiAqKSwKKyAgICAgICAgaW50ICgqZl9zZXRfY2FjaGUpKHZvaWQgKiwgY29uc3QgbWJlZHRsc19zc2xfc2Vzc2lvbiAqKSApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NSVl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmVxdWVzdCByZXN1bXB0aW9uIG9mIHNlc3Npb24gKGNsaWVudC1zaWRlIG9ubHkpCisgKiAgICAgICAgICAgICAgICAgU2Vzc2lvbiBkYXRhIGlzIGNvcGllZCBmcm9tIHByZXNlbnRlZCBzZXNzaW9uIHN0cnVjdHVyZS4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBzZXNzaW9uICBzZXNzaW9uIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSBpZiB1c2VkIHNlcnZlci1zaWRlIG9yCisgKiAgICAgICAgICAgICAgICAgYXJndW1lbnRzIGFyZSBvdGhlcndpc2UgaW52YWxpZAorICoKKyAqIFxzYSAgICAgICAgICAgICBtYmVkdGxzX3NzbF9nZXRfc2Vzc2lvbigpCisgKi8KK2ludCBtYmVkdGxzX3NzbF9zZXRfc2Vzc2lvbiggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBjb25zdCBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ0xJX0MgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBTZXQgdGhlIGxpc3Qgb2YgYWxsb3dlZCBjaXBoZXJzdWl0ZXMgYW5kIHRoZSBwcmVmZXJlbmNlCisgKiAgICAgICAgICAgICAgICAgICAgICBvcmRlci4gRmlyc3QgaW4gdGhlIGxpc3QgaGFzIHRoZSBoaWdoZXN0IHByZWZlcmVuY2UuCisgKiAgICAgICAgICAgICAgICAgICAgICAoT3ZlcnJpZGVzIGFsbCB2ZXJzaW9uLXNwZWNpZmljIGxpc3RzKQorICoKKyAqICAgICAgICAgICAgICAgICAgICAgIFRoZSBjaXBoZXJzdWl0ZXMgYXJyYXkgaXMgbm90IGNvcGllZCwgYW5kIG11c3QgcmVtYWluCisgKiAgICAgICAgICAgICAgICAgICAgICB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBzc2xfY29uZmlnLgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgIE5vdGU6IFRoZSBzZXJ2ZXIgdXNlcyBpdHMgb3duIHByZWZlcmVuY2VzCisgKiAgICAgICAgICAgICAgICAgICAgICBvdmVyIHRoZSBwcmVmZXJlbmNlIG9mIHRoZSBjbGllbnQgdW5sZXNzCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRSBpcyBkZWZpbmVkIQorICoKKyAqIFxwYXJhbSBjb25mICAgICAgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gY2lwaGVyc3VpdGVzICAwLXRlcm1pbmF0ZWQgbGlzdCBvZiBhbGxvd2VkIGNpcGhlcnN1aXRlcworICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqY2lwaGVyc3VpdGVzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgU2V0IHRoZSBsaXN0IG9mIGFsbG93ZWQgY2lwaGVyc3VpdGVzIGFuZCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIHByZWZlcmVuY2Ugb3JkZXIgZm9yIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wuCisgKiAgICAgICAgICAgICAgICAgICAgICAoT25seSB1c2VmdWwgb24gdGhlIHNlcnZlciBzaWRlKQorICoKKyAqICAgICAgICAgICAgICAgICAgICAgIFRoZSBjaXBoZXJzdWl0ZXMgYXJyYXkgaXMgbm90IGNvcGllZCwgYW5kIG11c3QgcmVtYWluCisgKiAgICAgICAgICAgICAgICAgICAgICB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBzc2xfY29uZmlnLgorICoKKyAqIFxwYXJhbSBjb25mICAgICAgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gY2lwaGVyc3VpdGVzICAwLXRlcm1pbmF0ZWQgbGlzdCBvZiBhbGxvd2VkIGNpcGhlcnN1aXRlcworICogXHBhcmFtIG1ham9yICAgICAgICAgTWFqb3IgdmVyc2lvbiBudW1iZXIgKG9ubHkgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zCisgKiAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQpCisgKiBccGFyYW0gbWlub3IgICAgICAgICBNaW5vciB2ZXJzaW9uIG51bWJlciAoTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xIGFuZCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgc3VwcG9ydGVkKQorICoKKyAqIFxub3RlICAgICAgICAgICAgICAgIFdpdGggRFRMUywgdXNlIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiBmb3IgRFRMUyAxLjAKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgZm9yIERUTFMgMS4yCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXNfZm9yX3ZlcnNpb24oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqY2lwaGVyc3VpdGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1ham9yLCBpbnQgbWlub3IgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBYLjUwOSBzZWN1cml0eSBwcm9maWxlIHVzZWQgZm9yIHZlcmlmaWNhdGlvbgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgcmVzdHJpY3Rpb25zIGFyZSBlbmZvcmNlZCBmb3IgYWxsIGNlcnRpZmljYXRlcyBpbiB0aGUKKyAqICAgICAgICAgICAgICAgICBjaGFpbi4gSG93ZXZlciwgc2lnbmF0dXJlcyBpbiB0aGUgaGFuZHNoYWtlIGFyZSBub3QgY292ZXJlZAorICogICAgICAgICAgICAgICAgIGJ5IHRoaXMgc2V0dGluZyBidXQgYnkgXGIgbWJlZHRsc19zc2xfY29uZl9zaWdfaGFzaGVzKCkuCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gcHJvZmlsZSAgUHJvZmlsZSB0byB1c2UKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2NlcnRfcHJvZmlsZSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlICpwcm9maWxlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgZGF0YSByZXF1aXJlZCB0byB2ZXJpZnkgcGVlciBjZXJ0aWZpY2F0ZQorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIGNhX2NoYWluIHRydXN0ZWQgQ0EgY2hhaW4gKG1lYW5pbmcgYWxsIGZ1bGx5IHRydXN0ZWQgdG9wLWxldmVsIENBcykKKyAqIFxwYXJhbSBjYV9jcmwgICB0cnVzdGVkIENBIENSTHMKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydCAqY2FfY2hhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NybCAqY2FfY3JsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCBvd24gY2VydGlmaWNhdGUgY2hhaW4gYW5kIHByaXZhdGUga2V5CisgKgorICogXG5vdGUgICAgICAgICAgIG93bl9jZXJ0IHNob3VsZCBjb250YWluIGluIG9yZGVyIGZyb20gdGhlIGJvdHRvbSB1cCB5b3VyCisgKiAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUgY2hhaW4uIFRoZSB0b3AgY2VydGlmaWNhdGUgKHNlbGYtc2lnbmVkKQorICogICAgICAgICAgICAgICAgIGNhbiBiZSBvbWl0dGVkLgorICoKKyAqIFxub3RlICAgICAgICAgICBPbiBzZXJ2ZXIsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0bworICogICAgICAgICAgICAgICAgIHByb3Zpc2lvbiBtb3JlIHRoYW4gb25lIGNlcnQva2V5IHBhaXIgKGVnIG9uZSBFQ0RTQSwgb25lCisgKiAgICAgICAgICAgICAgICAgUlNBIHdpdGggU0hBLTI1Niwgb25lIFJTQSB3aXRoIFNIQS0xKS4gQW4gYWRlcXVhdGUKKyAqICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHNlbGVjdGVkIGFjY29yZGluZyB0byB0aGUgY2xpZW50J3MKKyAqICAgICAgICAgICAgICAgICBhZHZlcnRpc2VkIGNhcGFiaWxpdGllcy4gSW4gY2FzZSBtdXRsaXBsZSBjZXJ0aWZpY2F0ZXMgYXJlCisgKiAgICAgICAgICAgICAgICAgYWRlcXVhdGUsIHByZWZlcmVuY2UgaXMgZ2l2ZW4gdG8gdGhlIG9uZSBzZXQgYnkgdGhlIGZpcnN0CisgKiAgICAgICAgICAgICAgICAgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLCB0aGVuIHNlY29uZCwgZXRjLgorICoKKyAqIFxub3RlICAgICAgICAgICBPbiBjbGllbnQsIG9ubHkgdGhlIGZpcnN0IGNhbGwgaGFzIGFueSBlZmZlY3QuIFRoYXQgaXMsCisgKiAgICAgICAgICAgICAgICAgb25seSBvbmUgY2xpZW50IGNlcnRpZmljYXRlIGNhbiBiZSBwcm92aXNpb25lZC4gVGhlCisgKiAgICAgICAgICAgICAgICAgc2VydmVyJ3MgcHJlZmVyZW5jZXMgaW4gaXRzIENlcnRmaWNhdGVSZXF1ZXN0IG1lc3NhZ2Ugd2lsbAorICogICAgICAgICAgICAgICAgIGJlIGlnbm9yZWQgYW5kIG91ciBvbmx5IGNlcnQgd2lsbCBiZSBzZW50IHJlZ2FyZGxlc3Mgb2YKKyAqICAgICAgICAgICAgICAgICB3aGV0aGVyIGl0IG1hdGNoZXMgdGhvc2UgcHJlZmVyZW5jZXMgLSB0aGUgc2VydmVyIGNhbiB0aGVuCisgKiAgICAgICAgICAgICAgICAgZGVjaWRlIHdoYXQgaXQgd2FudHMgdG8gZG8gd2l0aCBpdC4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBvd25fY2VydCBvd24gcHVibGljIGNlcnRpZmljYXRlIGNoYWluCisgKiBccGFyYW0gcGtfa2V5ICAgb3duIHByaXZhdGUga2V5CisgKgorICogXHJldHVybiAgICAgICAgIDAgb24gc3VjY2VzcyBvciBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICpvd25fY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfY29udGV4dCAqcGtfa2V5ICk7CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgUHJlIFNoYXJlZCBLZXkgKFBTSykgYW5kIHRoZSBleHBlY3RlZCBpZGVudGl0eSBuYW1lCisgKgorICogXG5vdGUgICAgICAgICAgIFRoaXMgaXMgbWFpbmx5IHVzZWZ1bCBmb3IgY2xpZW50cy4gU2VydmVycyB3aWxsIHVzdWFsbHkKKyAqICAgICAgICAgICAgICAgICB3YW50IHRvIHVzZSBcYyBtYmVkdGxzX3NzbF9jb25mX3Bza19jYigpIGluc3RlYWQuCisgKgorICogXG5vdGUgICAgICAgICAgIEN1cnJlbnRseSBjbGllbnRzIGNhbiBvbmx5IHJlZ2lzdGVyIG9uZSBwcmUtc2hhcmVkIGtleS4KKyAqICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIHNlcnZlcnMnIGlkZW50aXR5IGhpbnQgaXMgaWdub3JlZC4KKyAqICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciBzZXR0aW5nIG11bHRpcGxlIFBTS3Mgb24gY2xpZW50cyBhbmQgc2VsZWN0aW5nCisgKiAgICAgICAgICAgICAgICAgb25lIGJhc2VkIG9uIHRoZSBpZGVudGl0eSBoaW50IGlzIG5vdCBhIHBsYW5uZWQgZmVhdHVyZSBidXQKKyAqICAgICAgICAgICAgICAgICBmZWVkYmFjayBpcyB3ZWxjb21lZC4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBwc2sgICAgICBwb2ludGVyIHRvIHRoZSBwcmUtc2hhcmVkIGtleQorICogXHBhcmFtIHBza19sZW4gIHByZS1zaGFyZWQga2V5IGxlbmd0aAorICogXHBhcmFtIHBza19pZGVudGl0eSAgICAgIHBvaW50ZXIgdG8gdGhlIHByZS1zaGFyZWQga2V5IGlkZW50aXR5CisgKiBccGFyYW0gcHNrX2lkZW50aXR5X2xlbiAgaWRlbnRpdHkga2V5IGxlbmd0aAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc19zc2xfY29uZl9wc2soIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwc2ssIHNpemVfdCBwc2tfbGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBza19pZGVudGl0eSwgc2l6ZV90IHBza19pZGVudGl0eV9sZW4gKTsKKworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIFByZSBTaGFyZWQgS2V5IChQU0spIGZvciB0aGUgY3VycmVudCBoYW5kc2hha2UKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaW5zaWRlIHRoZSBQU0sgY2FsbGJhY2ssCisgKiAgICAgICAgICAgICAgICAgaWUgdGhlIGZ1bmN0aW9uIHBhc3NlZCB0byBcYyBtYmVkdGxzX3NzbF9jb25mX3Bza19jYigpLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIHBzayAgICAgIHBvaW50ZXIgdG8gdGhlIHByZS1zaGFyZWQga2V5CisgKiBccGFyYW0gcHNrX2xlbiAgcHJlLXNoYXJlZCBrZXkgbGVuZ3RoCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3NzbF9zZXRfaHNfcHNrKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHNrLCBzaXplX3QgcHNrX2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIFBTSyBjYWxsYmFjayAoc2VydmVyLXNpZGUgb25seSkuCisgKgorICogICAgICAgICAgICAgICAgIElmIHNldCwgdGhlIFBTSyBjYWxsYmFjayBpcyBjYWxsZWQgZm9yIGVhY2gKKyAqICAgICAgICAgICAgICAgICBoYW5kc2hha2Ugd2hlcmUgYSBQU0sgY2lwaGVyc3VpdGUgd2FzIG5lZ290aWF0ZWQuCisgKiAgICAgICAgICAgICAgICAgVGhlIGNhbGxlciBwcm92aWRlcyB0aGUgaWRlbnRpdHkgcmVjZWl2ZWQgYW5kIHdhbnRzIHRvCisgKiAgICAgICAgICAgICAgICAgcmVjZWl2ZSB0aGUgYWN0dWFsIFBTSyBkYXRhIGFuZCBsZW5ndGguCisgKgorICogICAgICAgICAgICAgICAgIFRoZSBjYWxsYmFjayBoYXMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOiAodm9pZCAqcGFyYW1ldGVyLAorICogICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgY29uc3QgdW5zaWduZWQgY2hhciAqcHNrX2lkZW50aXR5LAorICogICAgICAgICAgICAgICAgIHNpemVfdCBpZGVudGl0eV9sZW4pCisgKiAgICAgICAgICAgICAgICAgSWYgYSB2YWxpZCBQU0sgaWRlbnRpdHkgaXMgZm91bmQsIHRoZSBjYWxsYmFjayBzaG91bGQgdXNlCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfc2V0X2hzX3BzaygpIG9uIHRoZSBzc2wgY29udGV4dCB0byBzZXQgdGhlCisgKiAgICAgICAgICAgICAgICAgY29ycmVjdCBQU0sgYW5kIHJldHVybiAwLgorICogICAgICAgICAgICAgICAgIEFueSBvdGhlciByZXR1cm4gdmFsdWUgd2lsbCByZXN1bHQgaW4gYSBkZW5pZWQgUFNLIGlkZW50aXR5LgorICoKKyAqIFxub3RlICAgICAgICAgICBJZiB5b3Ugc2V0IGEgUFNLIGNhbGxiYWNrIHVzaW5nIHRoaXMgZnVuY3Rpb24sIHRoZW4geW91CisgKiAgICAgICAgICAgICAgICAgZG9uJ3QgbmVlZCB0byBzZXQgYSBQU0sga2V5IGFuZCBpZGVudGl0eSB1c2luZworICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX2NvbmZfcHNrKCkuCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gZl9wc2sgICAgUFNLIGlkZW50aXR5IGZ1bmN0aW9uCisgKiBccGFyYW0gcF9wc2sgICAgUFNLIGlkZW50aXR5IHBhcmFtZXRlcgorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfcHNrX2NiKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3Bzaykodm9pZCAqLCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9wc2sgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgRGlmZmllLUhlbGxtYW4gcHVibGljIFAgYW5kIEcgdmFsdWVzLAorICogICAgICAgICAgICAgICAgIHJlYWQgYXMgaGV4YWRlY2ltYWwgc3RyaW5ncyAoc2VydmVyLXNpZGUgb25seSkKKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19ESE1fUkZDNTExNF9NT0RQXzIwNDhfW1BHXSkKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBkaG1fUCAgICBEaWZmaWUtSGVsbG1hbi1NZXJrbGUgbW9kdWx1cworICogXHBhcmFtIGRobV9HICAgIERpZmZpZS1IZWxsbWFuLU1lcmtsZSBnZW5lcmF0b3IKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX3NzbF9jb25mX2RoX3BhcmFtKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNvbnN0IGNoYXIgKmRobV9QLCBjb25zdCBjaGFyICpkaG1fRyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIERpZmZpZS1IZWxsbWFuIHB1YmxpYyBQIGFuZCBHIHZhbHVlcywKKyAqICAgICAgICAgICAgICAgICByZWFkIGZyb20gZXhpc3RpbmcgY29udGV4dCAoc2VydmVyLXNpZGUgb25seSkKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBkaG1fY3R4ICBEaWZmaWUtSGVsbG1hbi1NZXJrbGUgY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfc3NsX2NvbmZfZGhfcGFyYW1fY3R4KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIG1iZWR0bHNfZGhtX2NvbnRleHQgKmRobV9jdHggKTsKKyNlbmRpZiAvKiBNQkVEVExTX0RITV9DICYmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIG1pbmltdW0gbGVuZ3RoIGZvciBEaWZmaWUtSGVsbG1hbiBwYXJhbWV0ZXJzLgorICogICAgICAgICAgICAgICAgIChDbGllbnQtc2lkZSBvbmx5LikKKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogMTAyNCBiaXRzLikKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBiaXRsZW4gICBNaW5pbXVtIGJpdCBsZW5ndGggb2YgdGhlIERITSBwcmltZQorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZGhtX21pbl9iaXRsZW4oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJpdGxlbiApOworI2VuZGlmIC8qIE1CRURUTFNfREhNX0MgJiYgTUJFRFRMU19TU0xfQ0xJX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgYWxsb3dlZCBjdXJ2ZXMgaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4KKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogYWxsIGRlZmluZWQgY3VydmVzLikKKyAqCisgKiAgICAgICAgICAgICAgICAgT24gc2VydmVyOiB0aGlzIG9ubHkgYWZmZWN0cyBzZWxlY3Rpb24gb2YgdGhlIEVDREhFIGN1cnZlOworICogICAgICAgICAgICAgICAgIHRoZSBjdXJ2ZXMgdXNlZCBmb3IgRUNESCBhbmQgRUNEU0EgYXJlIGRldGVybWluZWQgYnkgdGhlCisgKiAgICAgICAgICAgICAgICAgbGlzdCBvZiBhdmFpbGFibGUgY2VydGlmaWNhdGVzIGluc3RlYWQuCisgKgorICogICAgICAgICAgICAgICAgIE9uIGNsaWVudDogdGhpcyBhZmZlY3RzIHRoZSBsaXN0IG9mIGN1cnZlcyBvZmZlcmVkIGZvciBhbnkKKyAqICAgICAgICAgICAgICAgICB1c2UuIFRoZSBzZXJ2ZXIgY2FuIG92ZXJyaWRlIG91ciBwcmVmZXJlbmNlIG9yZGVyLgorICoKKyAqICAgICAgICAgICAgICAgICBCb3RoIHNpZGVzOiBsaW1pdHMgdGhlIHNldCBvZiBjdXJ2ZXMgYWNjZXB0ZWQgZm9yIHVzZSBpbgorICogICAgICAgICAgICAgICAgIEVDREhFIGFuZCBpbiB0aGUgcGVlcidzIGVuZC1lbnRpdHkgY2VydGlmaWNhdGUuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoaXMgaGFzIG5vIGluZmx1ZW5jZSBvbiB3aGljaCBjdXJ2ZXMgYXJlIGFsbG93ZWQgaW5zaWRlIHRoZQorICogICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlIGNoYWlucywgc2VlIFxjIG1iZWR0bHNfc3NsX2NvbmZfY2VydF9wcm9maWxlKCkKKyAqICAgICAgICAgICAgICAgICBmb3IgdGhhdC4gRm9yIHRoZSBlbmQtZW50aXR5IGNlcnRpZmljYXRlIGhvd2V2ZXIsIHRoZSBrZXkKKyAqICAgICAgICAgICAgICAgICB3aWxsIGJlIGFjY2VwdGVkIG9ubHkgaWYgaXQgaXMgYWxsb3dlZCBib3RoIGJ5IHRoaXMgbGlzdAorICogICAgICAgICAgICAgICAgIGFuZCBieSB0aGUgY2VydCBwcm9maWxlLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGlzIGxpc3Qgc2hvdWxkIGJlIG9yZGVyZWQgYnkgZGVjcmVhc2luZyBwcmVmZXJlbmNlCisgKiAgICAgICAgICAgICAgICAgKHByZWZlcnJlZCBjdXJ2ZSBmaXJzdCkuCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gY3VydmVzICAgT3JkZXJlZCBsaXN0IG9mIGFsbG93ZWQgY3VydmVzLAorICogICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgYnkgTUJFRFRMU19FQ1BfRFBfTk9ORS4KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2N1cnZlcyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKmN1cnZlcyApOworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCkKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgYWxsb3dlZCBoYXNoZXMgZm9yIHNpZ25hdHVyZXMgZHVyaW5nIHRoZSBoYW5kc2hha2UuCisgKiAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IGFsbCBhdmFpbGFibGUgaGFzaGVzIGV4Y2VwdCBNRDUuKQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGlzIG9ubHkgYWZmZWN0cyB3aGljaCBoYXNoZXMgYXJlIG9mZmVyZWQgYW5kIGNhbiBiZSB1c2VkCisgKiAgICAgICAgICAgICAgICAgZm9yIHNpZ25hdHVyZXMgZHVyaW5nIHRoZSBoYW5kc2hha2UuIEhhc2hlcyBmb3IgbWVzc2FnZQorICogICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIGFuZCB0aGUgVExTIFBSRiBhcmUgY29udHJvbGxlZCBieSB0aGUKKyAqICAgICAgICAgICAgICAgICBjaXBoZXJzdWl0ZSwgc2VlIFxjIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCkuIEhhc2hlcworICogICAgICAgICAgICAgICAgIHVzZWQgZm9yIGNlcnRpZmljYXRlIHNpZ25hdHVyZSBhcmUgY29udHJvbGxlZCBieSB0aGUKKyAqICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb24gcHJvZmlsZSwgc2VlIFxjIG1iZWR0bHNfc3NsX2NvbmZfY2VydF9wcm9maWxlKCkuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoaXMgbGlzdCBzaG91bGQgYmUgb3JkZXJlZCBieSBkZWNyZWFzaW5nIHByZWZlcmVuY2UKKyAqICAgICAgICAgICAgICAgICAocHJlZmVycmVkIGhhc2ggZmlyc3QpLgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIGhhc2hlcyAgIE9yZGVyZWQgbGlzdCBvZiBhbGxvd2VkIHNpZ25hdHVyZSBoYXNoZXMsCisgKiAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBieSBcYyBNQkVEVExTX01EX05PTkUuCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9zaWdfaGFzaGVzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpoYXNoZXMgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgaG9zdG5hbWUgdG8gY2hlY2sgYWdhaW5zdCB0aGUgcmVjZWl2ZWQgc2VydmVyCisgKiAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUuIEl0IHNldHMgdGhlIFNlcnZlck5hbWUgVExTIGV4dGVuc2lvbiB0b28sCisgKiAgICAgICAgICAgICAgICAgaWYgdGhlIGV4dGVuc2lvbiBpcyBlbmFibGVkLgorICogICAgICAgICAgICAgICAgIChjbGllbnQtc2lkZSBvbmx5KQorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIGhvc3RuYW1lIHRoZSBzZXJ2ZXIgaG9zdG5hbWUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsIG9yIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBjb25zdCBjaGFyICpob3N0bmFtZSApOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IG93biBjZXJ0aWZpY2F0ZSBhbmQga2V5IGZvciB0aGUgY3VycmVudCBoYW5kc2hha2UKKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2FtZSBhcyBcYyBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0KCkgYnV0IGZvciB1c2Ugd2l0aGluCisgKiAgICAgICAgICAgICAgICAgdGhlIFNOSSBjYWxsYmFjay4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBvd25fY2VydCBvd24gcHVibGljIGNlcnRpZmljYXRlIGNoYWluCisgKiBccGFyYW0gcGtfa2V5ICAgb3duIHByaXZhdGUga2V5CisgKgorICogXHJldHVybiAgICAgICAgIDAgb24gc3VjY2VzcyBvciBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3NzbF9zZXRfaHNfb3duX2NlcnQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKm93bl9jZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19jb250ZXh0ICpwa19rZXkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBkYXRhIHJlcXVpcmVkIHRvIHZlcmlmeSBwZWVyIGNlcnRpZmljYXRlIGZvciB0aGUKKyAqICAgICAgICAgICAgICAgICBjdXJyZW50IGhhbmRzaGFrZQorICoKKyAqIFxub3RlICAgICAgICAgICBTYW1lIGFzIFxjIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4oKSBidXQgZm9yIHVzZSB3aXRoaW4KKyAqICAgICAgICAgICAgICAgICB0aGUgU05JIGNhbGxiYWNrLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIGNhX2NoYWluIHRydXN0ZWQgQ0EgY2hhaW4gKG1lYW5pbmcgYWxsIGZ1bGx5IHRydXN0ZWQgdG9wLWxldmVsIENBcykKKyAqIFxwYXJhbSBjYV9jcmwgICB0cnVzdGVkIENBIENSTHMKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9zZXRfaHNfY2FfY2hhaW4oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICpjYV9jaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3JsICpjYV9jcmwgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IGF1dGhtb2RlIGZvciB0aGUgY3VycmVudCBoYW5kc2hha2UuCisgKgorICogXG5vdGUgICAgICAgICAgIFNhbWUgYXMgXGMgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZSgpIGJ1dCBmb3IgdXNlIHdpdGhpbgorICogICAgICAgICAgICAgICAgIHRoZSBTTkkgY2FsbGJhY2suCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gYXV0aG1vZGUgTUJFRFRMU19TU0xfVkVSSUZZX05PTkUsIE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1ZFUklGWV9SRVFVSVJFRAorICovCit2b2lkIG1iZWR0bHNfc3NsX3NldF9oc19hdXRobW9kZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhdXRobW9kZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgc2VydmVyIHNpZGUgU2VydmVyTmFtZSBUTFMgZXh0ZW5zaW9uIGNhbGxiYWNrCisgKiAgICAgICAgICAgICAgICAgKG9wdGlvbmFsLCBzZXJ2ZXItc2lkZSBvbmx5KS4KKyAqCisgKiAgICAgICAgICAgICAgICAgSWYgc2V0LCB0aGUgU2VydmVyTmFtZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlCisgKiAgICAgICAgICAgICAgICAgc2VydmVyIHJlY2VpdmVzIGEgU2VydmVyTmFtZSBUTFMgZXh0ZW5zaW9uIGZyb20gdGhlIGNsaWVudAorICogICAgICAgICAgICAgICAgIGR1cmluZyBhIGhhbmRzaGFrZS4gVGhlIFNlcnZlck5hbWUgY2FsbGJhY2sgaGFzIHRoZQorICogICAgICAgICAgICAgICAgIGZvbGxvd2luZyBwYXJhbWV0ZXJzOiAodm9pZCAqcGFyYW1ldGVyLCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgKiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaG9zdG5hbWUsIHNpemVfdCBsZW4pLiBJZiBhIHN1aXRhYmxlCisgKiAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUgaXMgZm91bmQsIHRoZSBjYWxsYmFjayBtdXN0IHNldCB0aGUKKyAqICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZShzKSBhbmQga2V5KHMpIHRvIHVzZSB3aXRoIFxjCisgKiAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfc2V0X2hzX293bl9jZXJ0KCkgKGNhbiBiZSBjYWxsZWQgcmVwZWF0ZWRseSksCisgKiAgICAgICAgICAgICAgICAgYW5kIG1heSBvcHRpb25hbGx5IGFkanVzdCB0aGUgQ0EgYW5kIGFzc29jaWF0ZWQgQ1JMIHdpdGggXGMKKyAqICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZXRfaHNfY2FfY2hhaW4oKSBhcyB3ZWxsIGFzIHRoZSBjbGllbnQKKyAqICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBtb2RlIHdpdGggXGMgbWJlZHRsc19zc2xfc2V0X2hzX2F1dGhtb2RlKCksCisgKiAgICAgICAgICAgICAgICAgdGhlbiBtdXN0IHJldHVybiAwLiBJZiBubyBtYXRjaGluZyBuYW1lIGlzIGZvdW5kLCB0aGUKKyAqICAgICAgICAgICAgICAgICBjYWxsYmFjayBtdXN0IGVpdGhlciBzZXQgYSBkZWZhdWx0IGNlcnQsIG9yCisgKiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vbi16ZXJvIHRvIGFib3J0IHRoZSBoYW5kc2hha2UgYXQgdGhpcyBwb2ludC4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBmX3NuaSAgICB2ZXJpZmljYXRpb24gZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3NuaSAgICB2ZXJpZmljYXRpb24gcGFyYW1ldGVyCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9zbmkoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgIGludCAoKmZfc25pKSh2b2lkICosIG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCksCisgICAgICAgICAgICAgICAgICB2b2lkICpwX3NuaSApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBFQyBKLVBBS0UgcGFzc3dvcmQgZm9yIGN1cnJlbnQgaGFuZHNoYWtlLgorICoKKyAqIFxub3RlICAgICAgICAgICBBbiBpbnRlcm5hbCBjb3B5IGlzIG1hZGUsIGFuZCBkZXN0cm95ZWQgYXMgc29vbiBhcyB0aGUKKyAqICAgICAgICAgICAgICAgICBoYW5kc2hha2UgaXMgY29tcGxldGVkLCBvciB3aGVuIHRoZSBTU0wgY29udGV4dCBpcyByZXNldCBvcgorICogICAgICAgICAgICAgICAgIGZyZWVkLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgU1NMIGNvbnRleHQgbmVlZHMgdG8gYmUgYWxyZWFkeSBzZXQgdXAuIFRoZSByaWdodCBwbGFjZQorICogICAgICAgICAgICAgICAgIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpcyBiZXR3ZWVuIFxjIG1iZWR0bHNfc3NsX3NldHVwKCkgb3IKKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX3NzbF9yZXNldCgpIGFuZCBcYyBtYmVkdGxzX3NzbF9oYW5kc2hha2UoKS4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBwdyAgICAgICBFQyBKLVBBS0UgcGFzc3dvcmQgKHByZS1zaGFyZWQgc2VjcmV0KQorICogXHBhcmFtIHB3X2xlbiAgIGxlbmd0aCBvZiBwdyBpbiBieXRlcworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfc3NsX3NldF9oc19lY2pwYWtlX3Bhc3N3b3JkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcHdfbGVuICk7CisjZW5kaWYgLypNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgc3VwcG9ydGVkIEFwcGxpY2F0aW9uIExheWVyIFByb3RvY29scy4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBwcm90b3MgICBQb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb3RvY29scywKKyAqICAgICAgICAgICAgICAgICBpbiBkZWNyZWFzaW5nIHByZWZlcmVuY2Ugb3JkZXIuIFRoZSBwb2ludGVyIHRvIHRoZSBsaXN0IGlzCisgKiAgICAgICAgICAgICAgICAgcmVjb3JkZWQgYnkgdGhlIGxpYnJhcnkgZm9yIGxhdGVyIHJlZmVyZW5jZSBhcyByZXF1aXJlZCwgc28KKyAqICAgICAgICAgICAgICAgICB0aGUgbGlmZXRpbWUgb2YgdGhlIHRhYmxlIG11c3QgYmUgYXRsZWFzdCBhcyBsb25nIGFzIHRoZQorICogICAgICAgICAgICAgICAgIGxpZmV0aW1lIG9mIHRoZSBTU0wgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKgorICogXHJldHVybiAgICAgICAgIDAgb24gc3VjY2Vzcywgb3IgTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBLgorICovCitpbnQgbWJlZHRsc19zc2xfY29uZl9hbHBuX3Byb3RvY29scyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjb25zdCBjaGFyICoqcHJvdG9zICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEdldCB0aGUgbmFtZSBvZiB0aGUgbmVnb3RpYXRlZCBBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbC4KKyAqICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGhhbmRzaGFrZSBpcworICogICAgICAgICAgICAgICAgIGNvbXBsZXRlZC4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgUHJvdGNvbCBuYW1lLCBvciBOVUxMIGlmIG5vIHByb3RvY29sIHdhcyBuZWdvdGlhdGVkLgorICovCitjb25zdCBjaGFyICptYmVkdGxzX3NzbF9nZXRfYWxwbl9wcm90b2NvbCggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQUxQTiAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIG1heGltdW0gc3VwcG9ydGVkIHZlcnNpb24gc2VudCBmcm9tIHRoZSBjbGllbnQgc2lkZQorICogICAgICAgICAgICAgICAgIGFuZC9vciBhY2NlcHRlZCBhdCB0aGUgc2VydmVyIHNpZGUKKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19TU0xfTUFYX01BSk9SX1ZFUlNJT04sIE1CRURUTFNfU1NMX01BWF9NSU5PUl9WRVJTSU9OKQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGlzIGlnbm9yZXMgY2lwaGVyc3VpdGVzIGZyb20gaGlnaGVyIHZlcnNpb25zLgorICoKKyAqIFxub3RlICAgICAgICAgICBXaXRoIERUTFMsIHVzZSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIgZm9yIERUTFMgMS4wIGFuZAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyBmb3IgRFRMUyAxLjIKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBtYWpvciAgICBNYWpvciB2ZXJzaW9uIG51bWJlciAob25seSBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMgc3VwcG9ydGVkKQorICogXHBhcmFtIG1pbm9yICAgIE1pbm9yIHZlcnNpb24gbnVtYmVyIChNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xIGFuZCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zIHN1cHBvcnRlZCkKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX21heF92ZXJzaW9uKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGludCBtYWpvciwgaW50IG1pbm9yICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgbWluaW11bSBhY2NlcHRlZCBTU0wvVExTIHByb3RvY29sIHZlcnNpb24KKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogVExTIDEuMCkKKyAqCisgKiBcbm90ZSAgICAgICAgICAgSW5wdXQgb3V0c2lkZSBvZiB0aGUgU1NMX01BWF9YWFhYWF9WRVJTSU9OIGFuZAorICogICAgICAgICAgICAgICAgIFNTTF9NSU5fWFhYWFhfVkVSU0lPTiByYW5nZSBpcyBpZ25vcmVkLgorICoKKyAqIFxub3RlICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKFNTTCB2Mykgc2hvdWxkIGJlIGF2b2lkZWQuCisgKgorICogXG5vdGUgICAgICAgICAgIFdpdGggRFRMUywgdXNlIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiBmb3IgRFRMUyAxLjAgYW5kCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zIGZvciBEVExTIDEuMgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIG1ham9yICAgIE1ham9yIHZlcnNpb24gbnVtYmVyIChvbmx5IE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMyBzdXBwb3J0ZWQpCisgKiBccGFyYW0gbWlub3IgICAgTWlub3IgdmVyc2lvbiBudW1iZXIgKE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEgYW5kIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgc3VwcG9ydGVkKQorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfbWluX3ZlcnNpb24oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IG1ham9yLCBpbnQgbWlub3IgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVikgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgZmFsbGJhY2sgZmxhZyAoY2xpZW50LXNpZGUgb25seSkuCisgKiAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IE1CRURUTFNfU1NMX0lTX05PVF9GQUxMQkFDSykuCisgKgorICogXG5vdGUgICAgICAgICAgIFNldCB0byBNQkVEVExTX1NTTF9JU19GQUxMQkFDSyB3aGVuIHByZXBhcmluZyBhIGZhbGxiYWNrCisgKiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiwgdGhhdCBpcyBhIGNvbm5lY3Rpb24gd2l0aCBtYXhfdmVyc2lvbiBzZXQgdG8gYQorICogICAgICAgICAgICAgICAgIGxvd2VyIHZhbHVlIHRoYW4gdGhlIHZhbHVlIHlvdSdyZSB3aWxsaW5nIHRvIHVzZS4gU3VjaAorICogICAgICAgICAgICAgICAgIGZhbGxiYWNrIGNvbm5lY3Rpb25zIGFyZSBub3QgcmVjb21tZW5kZWQgYnV0IGFyZSBzb21ldGltZXMKKyAqICAgICAgICAgICAgICAgICBuZWNlc3NhcnkgdG8gaW50ZXJvcGVyYXRlIHdpdGggYnVnZ3kgKHZlcnNpb24taW50b2xlcmFudCkKKyAqICAgICAgICAgICAgICAgICBzZXJ2ZXJzLgorICoKKyAqIFx3YXJuaW5nICAgICAgICBZb3Ugc2hvdWxkIE5PVCBzZXQgdGhpcyB0byBNQkVEVExTX1NTTF9JU19GQUxMQkFDSyBmb3IKKyAqICAgICAgICAgICAgICAgICBub24tZmFsbGJhY2sgY29ubmVjdGlvbnMhIFRoaXMgd291bGQgYXBwZWFyIHRvIHdvcmsgZm9yIGEKKyAqICAgICAgICAgICAgICAgICB3aGlsZSwgdGhlbiBjYXVzZSBmYWlsdXJlcyB3aGVuIHRoZSBzZXJ2ZXIgaXMgdXBncmFkZWQgdG8KKyAqICAgICAgICAgICAgICAgICBzdXBwb3J0IGEgbmV3ZXIgVExTIHZlcnNpb24uCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gZmFsbGJhY2sgTUJFRFRMU19TU0xfSVNfTk9UX0ZBTExCQUNLIG9yIE1CRURUTFNfU1NMX0lTX0ZBTExCQUNLCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9mYWxsYmFjayggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjaGFyIGZhbGxiYWNrICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTViAmJiBNQkVEVExTX1NTTF9DTElfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVuYWJsZSBvciBkaXNhYmxlIEVuY3J5cHQtdGhlbi1NQUMKKyAqICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IE1CRURUTFNfU1NMX0VUTV9FTkFCTEVEKQorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhpcyBzaG91bGQgYWx3YXlzIGJlIGVuYWJsZWQsIGl0IGlzIGEgc2VjdXJpdHkKKyAqICAgICAgICAgICAgICAgICAgaW1wcm92ZW1lbnQsIGFuZCBzaG91bGQgbm90IGNhdXNlIGFueSBpbnRlcm9wZXJhYmlsaXR5CisgKiAgICAgICAgICAgICAgICAgIGlzc3VlICh1c2VkIG9ubHkgaWYgdGhlIHBlZXIgc3VwcG9ydHMgaXQgdG9vKS4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gZXRtICAgICAgIE1CRURUTFNfU1NMX0VUTV9FTkFCTEVEIG9yIE1CRURUTFNfU1NMX0VUTV9ESVNBQkxFRAorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZW5jcnlwdF90aGVuX21hYyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjaGFyIGV0bSApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCkKKy8qKgorICogXGJyaWVmICAgICAgICAgICBFbmFibGUgb3IgZGlzYWJsZSBFeHRlbmRlZCBNYXN0ZXIgU2VjcmV0IG5lZ290aWF0aW9uLgorICogICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRU5BQkxFRCkKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBlbmFibGVkLCBpdCBpcyBhIHNlY3VyaXR5IGZpeCB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgcHJvdG9jb2wsIGFuZCBzaG91bGQgbm90IGNhdXNlIGFueSBpbnRlcm9wZXJhYmlsaXR5IGlzc3VlCisgKiAgICAgICAgICAgICAgICAgICh1c2VkIG9ubHkgaWYgdGhlIHBlZXIgc3VwcG9ydHMgaXQgdG9vKS4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gZW1zICAgICAgIE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0VOQUJMRUQgb3IgTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRElTQUJMRUQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2V4dGVuZGVkX21hc3Rlcl9zZWNyZXQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgY2hhciBlbXMgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgRGlzYWJsZSBvciBlbmFibGUgc3VwcG9ydCBmb3IgUkM0CisgKiAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IE1CRURUTFNfU1NMX0FSQzRfRElTQUJMRUQpCisgKgorICogXHdhcm5pbmcgICAgICAgIFVzZSBvZiBSQzQgaW4gRFRMUy9UTFMgaGFzIGJlZW4gcHJvaGliaXRlZCBieSBSRkMgNzQ2NQorICogICAgICAgICAgICAgICAgIGZvciBzZWN1cml0eSByZWFzb25zLiBVc2UgYXQgeW91ciBvd24gcmlzay4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkIGluCisgKiAgICAgICAgICAgICAgICAgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4KKyAqICAgICAgICAgICAgICAgICBSQzQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhdCBjb21waWxlIHRpbWUgYW5kIG5lZWRzIHRvIGJlCisgKiAgICAgICAgICAgICAgICAgYWN0aXZlbHkgZW5hYmxlZCBmb3IgdXNlIHdpdGggbGVnYWN5IHN5c3RlbXMuCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gYXJjNCAgICAgTUJFRFRMU19TU0xfQVJDNF9FTkFCTEVEIG9yIE1CRURUTFNfU1NMX0FSQzRfRElTQUJMRUQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2FyYzRfc3VwcG9ydCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjaGFyIGFyYzQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0FSQzRfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBtYXhpbXVtIGZyYWdtZW50IGxlbmd0aCB0byBlbWl0IGFuZC9vciBuZWdvdGlhdGUKKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOLCB1c3VhbGx5IDJeMTQgYnl0ZXMpCisgKiAgICAgICAgICAgICAgICAgKFNlcnZlcjogc2V0IG1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIHRvIGVtaXQsCisgKiAgICAgICAgICAgICAgICAgdXN1YWxseSBuZWdvdGlhdGVkIGJ5IHRoZSBjbGllbnQgZHVyaW5nIGhhbmRzaGFrZQorICogICAgICAgICAgICAgICAgIChDbGllbnQ6IHNldCBtYXhpbXVtIGZyYWdtZW50IGxlbmd0aCB0byBlbWl0ICphbmQqCisgKiAgICAgICAgICAgICAgICAgbmVnb3RpYXRlIHdpdGggdGhlIHNlcnZlciBkdXJpbmcgaGFuZHNoYWtlKQorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIG1mbF9jb2RlIENvZGUgZm9yIG1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIChhbGxvd2VkIHZhbHVlczoKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fNTEyLCAgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzEwMjQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzIwNDgsIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl80MDk2KQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBCisgKi8KK2ludCBtYmVkdGxzX3NzbF9jb25mX21heF9mcmFnX2xlbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCB1bnNpZ25lZCBjaGFyIG1mbF9jb2RlICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIEFjdGl2YXRlIG5lZ290aWF0aW9uIG9mIHRydW5jYXRlZCBITUFDCisgKiAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRElTQUJMRUQpCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gdHJ1bmNhdGUgRW5hYmxlIG9yIGRpc2FibGUgKE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRU5BQkxFRCBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0RJU0FCTEVEKQorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfdHJ1bmNhdGVkX2htYWMoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IHRydW5jYXRlICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcpCisvKioKKyAqIFxicmllZiAgICAgICAgICBFbmFibGUgLyBEaXNhYmxlIDEvbi0xIHJlY29yZCBzcGxpdHRpbmcKKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRU5BQkxFRCkKKyAqCisgKiBcbm90ZSAgICAgICAgICAgT25seSBhZmZlY3RzIFNTTHYzIGFuZCBUTFMgMS4wLCBub3QgaGlnaGVyIHZlcnNpb25zLgorICogICAgICAgICAgICAgICAgIERvZXMgbm90IGFmZmVjdCBub24tQ0JDIGNpcGhlcnN1aXRlcyBpbiBhbnkgdmVyc2lvbi4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBzcGxpdCAgICBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElOR19FTkFCTEVEIG9yCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRElTQUJMRUQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2NiY19yZWNvcmRfc3BsaXR0aW5nKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNoYXIgc3BsaXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBFbmFibGUgLyBEaXNhYmxlIHNlc3Npb24gdGlja2V0cyAoY2xpZW50IG9ubHkpLgorICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFNfRU5BQkxFRC4pCisgKgorICogXG5vdGUgICAgICAgICAgIE9uIHNlcnZlciwgdXNlIFxjIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl90aWNrZXRzX2NiKCkuCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gdXNlX3RpY2tldHMgICBFbmFibGUgb3IgZGlzYWJsZSAoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTX0VOQUJMRUQgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFNfRElTQUJMRUQpCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHMoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IHVzZV90aWNrZXRzICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICYmIE1CRURUTFNfU1NMX0NMSV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisvKioKKyAqIFxicmllZiAgICAgICAgICBFbmFibGUgLyBEaXNhYmxlIHJlbmVnb3RpYXRpb24gc3VwcG9ydCBmb3IgY29ubmVjdGlvbiB3aGVuCisgKiAgICAgICAgICAgICAgICAgaW5pdGlhdGVkIGJ5IHBlZXIKKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9ESVNBQkxFRCkKKyAqCisgKiBcd2FybmluZyAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdG8gYWx3YXlzIGRpc2FibGUgcmVuZWdvdGF0aW9uIHVubGVzcyB5b3UKKyAqICAgICAgICAgICAgICAgICBrbm93IHlvdSBuZWVkIGl0IGFuZCB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gSW4gdGhlCisgKiAgICAgICAgICAgICAgICAgcGFzdCwgdGhlcmUgaGF2ZSBiZWVuIHNldmVyYWwgaXNzdWVzIGFzc29jaWF0ZWQgd2l0aAorICogICAgICAgICAgICAgICAgIHJlbmVnb3RpYXRpb24gb3IgYSBwb29yIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHByb3BlcnRpZXMuCisgKgorICogXG5vdGUgICAgICAgICAgIFNlcnZlci1zaWRlLCBlbmFibGluZyByZW5lZ290aWF0aW9uIGFsc28gbWFrZXMgdGhlIHNlcnZlcgorICogICAgICAgICAgICAgICAgIHN1c2NlcHRpYmxlIHRvIGEgcmVzb3VyY2UgRG9TIGJ5IGEgbWFsaWNpb3VzIGNsaWVudC4KKyAqCisgKiBccGFyYW0gY29uZiAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIHJlbmVnb3RpYXRpb24gICAgIEVuYWJsZSBvciBkaXNhYmxlIChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0VOQUJMRUQgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9ESVNBQkxFRCkKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb24oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IHJlbmVnb3RpYXRpb24gKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFByZXZlbnQgb3IgYWxsb3cgbGVnYWN5IHJlbmVnb3RpYXRpb24uCisgKiAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IE1CRURUTFNfU1NMX0xFR0FDWV9OT19SRU5FR09USUFUSU9OKQorICoKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9MRUdBQ1lfTk9fUkVORUdPVElBVElPTiBhbGxvd3MgY29ubmVjdGlvbnMgdG8KKyAqICAgICAgICAgICAgICAgICBiZSBlc3RhYmxpc2hlZCBldmVuIGlmIHRoZSBwZWVyIGRvZXMgbm90IHN1cHBvcnQKKyAqICAgICAgICAgICAgICAgICBzZWN1cmUgcmVuZWdvdGlhdGlvbiwgYnV0IGRvZXMgbm90IGFsbG93IHJlbmVnb3RpYXRpb24KKyAqICAgICAgICAgICAgICAgICB0byB0YWtlIHBsYWNlIGlmIG5vdCBzZWN1cmUuCisgKiAgICAgICAgICAgICAgICAgKEludGVyb3BlcmFibGUgYW5kIHNlY3VyZSBvcHRpb24pCisgKgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0xFR0FDWV9BTExPV19SRU5FR09USUFUSU9OIGFsbG93cyByZW5lZ290aWF0aW9ucworICogICAgICAgICAgICAgICAgIHdpdGggbm9uLXVwZ3JhZGVkIHBlZXJzLiBBbGxvd2luZyBsZWdhY3kgcmVuZWdvdGlhdGlvbgorICogICAgICAgICAgICAgICAgIG1ha2VzIHRoZSBjb25uZWN0aW9uIHZ1bG5lcmFibGUgdG8gc3BlY2lmaWMgbWFuIGluIHRoZQorICogICAgICAgICAgICAgICAgIG1pZGRsZSBhdHRhY2tzLiAoU2VlIFJGQyA1NzQ2KQorICogICAgICAgICAgICAgICAgIChNb3N0IGludGVyb3BlcmFibGUgYW5kIGxlYXN0IHNlY3VyZSBvcHRpb24pCisgKgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0xFR0FDWV9CUkVBS19IQU5EU0hBS0UgYnJlYWtzIG9mZiBjb25uZWN0aW9ucworICogICAgICAgICAgICAgICAgIGlmIHBlZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWN1cmUgcmVuZWdvdGlhdGlvbi4gUmVzdWx0cworICogICAgICAgICAgICAgICAgIGluIGludGVyb3BlcmFiaWxpdHkgaXNzdWVzIHdpdGggbm9uLXVwZ3JhZGVkIHBlZXJzCisgKiAgICAgICAgICAgICAgICAgdGhhdCBkbyBub3Qgc3VwcG9ydCByZW5lZ290aWF0aW9uIGFsdG9nZXRoZXIuCisgKiAgICAgICAgICAgICAgICAgKE1vc3Qgc2VjdXJlIG9wdGlvbiwgaW50ZXJvcGVyYWJpbGl0eSBpc3N1ZXMpCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gYWxsb3dfbGVnYWN5ICBQcmV2ZW50IG9yIGFsbG93IChTU0xfTk9fTEVHQUNZX1JFTkVHT1RJQVRJT04sCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQUxMT1dfTEVHQUNZX1JFTkVHT1RJQVRJT04gb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0xFR0FDWV9CUkVBS19IQU5EU0hBS0UpCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9sZWdhY3lfcmVuZWdvdGlhdGlvbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgYWxsb3dfbGVnYWN5ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisvKioKKyAqIFxicmllZiAgICAgICAgICBFbmZvcmNlIHJlbmVnb3RpYXRpb24gcmVxdWVzdHMuCisgKiAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IGVuZm9yY2VkLCBtYXhfcmVjb3JkcyA9IDE2KQorICoKKyAqICAgICAgICAgICAgICAgICBXaGVuIHdlIHJlcXVlc3QgYSByZW5lZ290aWF0aW9uLCB0aGUgcGVlciBjYW4gY29tcGx5IG9yCisgKiAgICAgICAgICAgICAgICAgaWdub3JlIHRoZSByZXF1ZXN0LiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB1cyB0byBkZWNpZGUKKyAqICAgICAgICAgICAgICAgICB3aGV0aGVyIHRvIGVuZm9yY2Ugb3VyIHJlbmVnb3RpYXRpb24gcmVxdWVzdHMgYnkgY2xvc2luZworICogICAgICAgICAgICAgICAgIHRoZSBjb25uZWN0aW9uIGlmIHRoZSBwZWVyIGRvZXNuJ3QgY29tcGx5LgorICoKKyAqICAgICAgICAgICAgICAgICBIb3dldmVyLCByZWNvcmRzIGNvdWxkIGFscmVhZHkgYmUgaW4gdHJhbnNpdCBmcm9tIHRoZSBwZWVyCisgKiAgICAgICAgICAgICAgICAgd2hlbiB0aGUgcmVxdWVzdCBpcyBlbWl0dGVkLiBJbiBvcmRlciB0byBpbmNyZWFzZQorICogICAgICAgICAgICAgICAgIHJlbGlhYmlsaXR5LCB3ZSBjYW4gYWNjZXB0IGEgbnVtYmVyIG9mIHJlY29yZHMgYmVmb3JlIHRoZQorICogICAgICAgICAgICAgICAgIGV4cGVjdGVkIGhhbmRzaGFrZSByZWNvcmRzLgorICoKKyAqICAgICAgICAgICAgICAgICBUaGUgb3B0aW1hbCB2YWx1ZSBpcyBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBzcGVjaWZpYyB1c2FnZQorICogICAgICAgICAgICAgICAgIHNjZW5hcmlvLgorICoKKyAqIFxub3RlICAgICAgICAgICBXaXRoIERUTFMgYW5kIHNlcnZlci1pbml0aWF0ZWQgcmVuZWdvdGlhdGlvbiwgdGhlCisgKiAgICAgICAgICAgICAgICAgSGVsbG9SZXF1ZXN0IGlzIHJldHJhbnNtaXRlZCBldmVyeSB0aW1lIG1iZWR0bHNfc3NsX3JlYWQoKSB0aW1lcworICogICAgICAgICAgICAgICAgIG91dCBvciByZWNlaXZlcyBBcHBsaWNhdGlvbiBEYXRhLCB1bnRpbDoKKyAqICAgICAgICAgICAgICAgICAtIG1heF9yZWNvcmRzIHJlY29yZHMgaGF2ZSBiZWVucyBzZWVuLCBpZiBpdCBpcyA+PSAwLCBvcgorICogICAgICAgICAgICAgICAgIC0gdGhlIG51bWJlciBvZiByZXRyYW5zbWl0cyB0aGF0IHdvdWxkIGhhcHBlbiBkdXJpbmcgYW4KKyAqICAgICAgICAgICAgICAgICBhY3R1YWwgaGFuZHNoYWtlIGhhcyBiZWVuIHJlYWNoZWQuCisgKiAgICAgICAgICAgICAgICAgUGxlYXNlIHJlbWVtYmVyIHRoZSByZXF1ZXN0IG1pZ2h0IGJlIGxvc3QgYSBmZXcgdGltZXMKKyAqICAgICAgICAgICAgICAgICBpZiB5b3UgY29uc2lkZXIgc2V0dGluZyBtYXhfcmVjb3JkcyB0byBhIHJlYWxseSBsb3cgdmFsdWUuCisgKgorICogXHdhcm5pbmcgICAgICAgIE9uIGNsaWVudCwgdGhlIGdyYWNlIHBlcmlvZCBjYW4gb25seSBoYXBwZW4gZHVyaW5nCisgKiAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfcmVhZCgpLCBhcyBvcHBvc2VkIHRvIG1iZWR0bHNfc3NsX3dyaXRlKCkgYW5kIG1iZWR0bHNfc3NsX3JlbmVnb3RpYXRlKCkKKyAqICAgICAgICAgICAgICAgICB3aGljaCBhbHdheXMgYmVoYXZlIGFzIGlmIG1heF9yZWNvcmQgd2FzIDAuIFRoZSByZWFzb24gaXMsCisgKiAgICAgICAgICAgICAgICAgaWYgd2UgcmVjZWl2ZSBhcHBsaWNhdGlvbiBkYXRhIGZyb20gdGhlIHNlcnZlciwgd2UgbmVlZCBhCisgKiAgICAgICAgICAgICAgICAgcGxhY2UgdG8gd3JpdGUgaXQsIHdoaWNoIG9ubHkgaGFwcGVucyBkdXJpbmcgbWJlZHRsc19zc2xfcmVhZCgpLgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIG1heF9yZWNvcmRzIFVzZSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX05PVF9FTkZPUkNFRCBpZiB5b3UgZG9uJ3Qgd2FudCB0bworICogICAgICAgICAgICAgICAgIGVuZm9yY2UgcmVuZWdvdGlhdGlvbiwgb3IgYSBub24tbmVnYXRpdmUgdmFsdWUgdG8gZW5mb3JjZQorICogICAgICAgICAgICAgICAgIGl0IGJ1dCBhbGxvdyBmb3IgYSBncmFjZSBwZXJpb2Qgb2YgbWF4X3JlY29yZHMgcmVjb3Jkcy4KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb25fZW5mb3JjZWQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IG1heF9yZWNvcmRzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCByZWNvcmQgY291bnRlciB0aHJlc2hvbGQgZm9yIHBlcmlvZGljIHJlbmVnb3RpYXRpb24uCisgKiAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IDJeNjQgLSAyNTYuKQorICoKKyAqICAgICAgICAgICAgICAgICBSZW5lZ290aWF0aW9uIGlzIGF1dG9tYXRpY2FsbHkgdHJpZ2dlcmVkIHdoZW4gYSByZWNvcmQKKyAqICAgICAgICAgICAgICAgICBjb3VudGVyIChvdXRnb2luZyBvciBpbmdvaW5nKSBjcm9zc2VzIHRoZSBkZWZpbmVkCisgKiAgICAgICAgICAgICAgICAgdGhyZXNob2xkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBtZWFudCB0byBwcmV2ZW50IHRoZQorICogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gZnJvbSBiZWluZyBjbG9zZWQgd2hlbiB0aGUgY291bnRlciBpcyBhYm91dCB0bworICogICAgICAgICAgICAgICAgIHJlYWNoZWQgaXRzIG1heGltYWwgdmFsdWUgKGl0IGlzIG5vdCBhbGxvd2VkIHRvIHdyYXApLgorICoKKyAqICAgICAgICAgICAgICAgICBMb3dlciB2YWx1ZXMgY2FuIGJlIHVzZWQgdG8gZW5mb3JjZSBwb2xpY2llcyBzdWNoIGFzICJrZXlzCisgKiAgICAgICAgICAgICAgICAgbXVzdCBiZSByZWZyZXNoZWQgZXZlcnkgTiBwYWNrZXRzIHdpdGggY2lwaGVyIFgiLgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIHBlcmlvZCAgIFRoZSB0aHJlc2hvbGQgdmFsdWU6IGEgYmlnLWVuZGlhbiA2NC1iaXQgbnVtYmVyLgorICogICAgICAgICAgICAgICAgIFNldCB0byAyXjY0IC0gMSB0byBkaXNhYmxlIHBlcmlvZGljIHJlbmVnb3RpYXRpb24KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb25fcGVyaW9kKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGVyaW9kWzhdICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBkYXRhIGJ5dGVzIGF2YWlsYWJsZSB0byByZWFkCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIGhvdyBtYW55IGJ5dGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHJlYWQgYnVmZmVyCisgKi8KK3NpemVfdCBtYmVkdGxzX3NzbF9nZXRfYnl0ZXNfYXZhaWwoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAtMSBpZiByZXN1bHQgaXMgbm90IGF2YWlsYWJsZSAoZWcgYmVjYXVzZSB0aGUgaGFuZHNoYWtlIHdhcworICogICAgICAgICAgICAgICAgIGFib3J0ZWQgdG9vIGVhcmx5KSwgb3IKKyAqICAgICAgICAgICAgICAgICBhIGNvbWJpbmF0aW9uIG9mIEJBRENFUlRfeHh4IGFuZCBCQURDUkxfeHh4IGZsYWdzLCBzZWUKKyAqICAgICAgICAgICAgICAgICB4NTA5LmgKKyAqLwordWludDMyX3QgbWJlZHRsc19zc2xfZ2V0X3ZlcmlmeV9yZXN1bHQoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgY2lwaGVyc3VpdGUKKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2lwaGVyc3VpdGUgbmFtZQorICovCitjb25zdCBjaGFyICptYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGUoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm4gdGhlIGN1cnJlbnQgU1NMIHZlcnNpb24gKFNTTHYzL1RMU3YxL2V0YykKKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgU1NMIHZlcnNpb24KKyAqLworY29uc3QgY2hhciAqbWJlZHRsc19zc2xfZ2V0X3ZlcnNpb24oIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm4gdGhlIChtYXhpbXVtKSBudW1iZXIgb2YgYnl0ZXMgYWRkZWQgYnkgdGhlIHJlY29yZAorICogICAgICAgICAgICAgICAgIGxheWVyOiBoZWFkZXIgKyBlbmNyeXB0aW9uL01BQyBvdmVyaGVhZCAoaW5jLiBwYWRkaW5nKQorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICBDdXJyZW50IG1heGltdW0gcmVjb3JkIGV4cGFuc2lvbiBpbiBieXRlcywgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRSBpZiBjb21wcmVzc2lvbiBpcworICogICAgICAgICAgICAgICAgIGVuYWJsZWQsIHdoaWNoIG1ha2VzIGV4cGFuc2lvbiBtdWNoIGxlc3MgcHJlZGljdGFibGUKKyAqLworaW50IG1iZWR0bHNfc3NsX2dldF9yZWNvcmRfZXhwYW5zaW9uKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJldHVybiB0aGUgbWF4aW11bSBmcmFnbWVudCBsZW5ndGggKHBheWxvYWQsIGluIGJ5dGVzKS4KKyAqICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSB2YWx1ZSBuZWdvdGlhdGVkIHdpdGggcGVlciBpZiBhbnksCisgKiAgICAgICAgICAgICAgICAgb3IgdGhlIGxvY2FsbHkgY29uZmlndXJlZCB2YWx1ZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgV2l0aCBEVExTLCBcYyBtYmVkdGxzX3NzbF93cml0ZSgpIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmCisgKiAgICAgICAgICAgICAgICAgY2FsbGVkIHdpdGggYSBsYXJnZXIgbGVuZ3RoIHZhbHVlLgorICogICAgICAgICAgICAgICAgIFdpdGggVExTLCBcYyBtYmVkdGxzX3NzbF93cml0ZSgpIHdpbGwgZnJhZ21lbnQgdGhlIGlucHV0IGlmCisgKiAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuOyBpdCBpcyB1cAorICogICAgICAgICAgICAgICAgIHRvIHRoZSBjYWxsZXIgdG8gY2FsbCBcYyBtYmVkdGxzX3NzbF93cml0ZSgpIGFnYWluIGluCisgKiAgICAgICAgICAgICAgICAgb3JkZXIgdG8gc2VuZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGlmIGFueS4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgQ3VycmVudCBtYXhpbXVtIGZyYWdtZW50IGxlbmd0aC4KKyAqLworc2l6ZV90IG1iZWR0bHNfc3NsX2dldF9tYXhfZnJhZ19sZW4oIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEggKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmV0dXJuIHRoZSBwZWVyIGNlcnRpZmljYXRlIGZyb20gdGhlIGN1cnJlbnQgY29ubmVjdGlvbgorICoKKyAqICAgICAgICAgICAgICAgICBOb3RlOiBDYW4gYmUgTlVMTCBpbiBjYXNlIG5vIGNlcnRpZmljYXRlIHdhcyBzZW50IGR1cmluZworICogICAgICAgICAgICAgICAgIHRoZSBoYW5kc2hha2UuIERpZmZlcmVudCBjYWxscyBmb3IgdGhlIHNhbWUgY29ubmVjdGlvbiBjYW4KKyAqICAgICAgICAgICAgICAgICByZXR1cm4gdGhlIHNhbWUgb3IgZGlmZmVyZW50IHBvaW50ZXJzIGZvciB0aGUgc2FtZQorICogICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlIGFuZCBldmVuIGEgZGlmZmVyZW50IGNlcnRpZmljYXRlIGFsdG9nZXRoZXIuCisgKiAgICAgICAgICAgICAgICAgVGhlIHBlZXIgY2VydCBDQU4gY2hhbmdlIGluIGEgc2luZ2xlIGNvbm5lY3Rpb24gaWYKKyAqICAgICAgICAgICAgICAgICByZW5lZ290aWF0aW9uIGlzIHBlcmZvcm1lZC4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgdGhlIGN1cnJlbnQgcGVlciBjZXJ0aWZpY2F0ZQorICovCitjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICptYmVkdGxzX3NzbF9nZXRfcGVlcl9jZXJ0KCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBTYXZlIHNlc3Npb24gaW4gb3JkZXIgdG8gcmVzdW1lIGl0IGxhdGVyIChjbGllbnQtc2lkZSBvbmx5KQorICogICAgICAgICAgICAgICAgIFNlc3Npb24gZGF0YSBpcyBjb3BpZWQgdG8gcHJlc2VudGVkIHNlc3Npb24gc3RydWN0dXJlLgorICoKKyAqIFx3YXJuaW5nICAgICAgICBDdXJyZW50bHksIHBlZXIgY2VydGlmaWNhdGUgaXMgbG9zdCBpbiB0aGUgb3BlcmF0aW9uLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIHNlc3Npb24gIHNlc3Npb24gY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBIGlmIHVzZWQgc2VydmVyLXNpZGUgb3IKKyAqICAgICAgICAgICAgICAgICBhcmd1bWVudHMgYXJlIG90aGVyd2lzZSBpbnZhbGlkCisgKgorICogXHNhICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NldF9zZXNzaW9uKCkKKyAqLworaW50IG1iZWR0bHNfc3NsX2dldF9zZXNzaW9uKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DTElfQyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQZXJmb3JtIHRoZSBTU0wgaGFuZHNoYWtlCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIG9yIE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFLCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQgKHNlZSBiZWxvdyksIG9yCisgKiAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBTU0wgZXJyb3IgY29kZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIDAgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEL1dSSVRFLCB0aGVuIHRoZSBzc2wgY29udGV4dAorICogICAgICAgICAgICAgICAgIGJlY29tZXMgdW51c2FibGUsIGFuZCB5b3Ugc2hvdWxkIGVpdGhlciBmcmVlIGl0IG9yIGNhbGwKKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0KCkgb24gaXQgYmVmb3JlIHJlLXVzaW5nIGl0IGZvcgorICogICAgICAgICAgICAgICAgIGEgbmV3IGNvbm5lY3Rpb247IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gbXVzdCBiZSBjbG9zZWQuCisgKgorICogXG5vdGUgICAgICAgICAgIElmIERUTFMgaXMgaW4gdXNlLCB0aGVuIHlvdSBtYXkgY2hvb3NlIHRvIGhhbmRsZQorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQgc3BlY2lhbGx5IGZvciBsb2dnaW5nCisgKiAgICAgICAgICAgICAgICAgcHVycG9zZXMsIGFzIGl0IGlzIGFuIGV4cGVjdGVkIHJldHVybiB2YWx1ZSByYXRoZXIgdGhhbiBhbgorICogICAgICAgICAgICAgICAgIGFjdHVhbCBlcnJvciwgYnV0IHlvdSBzdGlsbCBuZWVkIHRvIHJlc2V0L2ZyZWUgdGhlIGNvbnRleHQuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9oYW5kc2hha2UoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQZXJmb3JtIGEgc2luZ2xlIHN0ZXAgb2YgdGhlIFNTTCBoYW5kc2hha2UKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIHN0YXRlIG9mIHRoZSBjb250ZXh0IChzc2wtPnN0YXRlKSB3aWxsIGJlIGF0CisgKiAgICAgICAgICAgICAgICAgdGhlIG5leHQgc3RhdGUgYWZ0ZXIgZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIERvIG5vdAorICogICAgICAgICAgICAgICAgIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiBzdGF0ZSBpcyBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUi4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIDAgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEL1dSSVRFLCB0aGVuIHRoZSBzc2wgY29udGV4dAorICogICAgICAgICAgICAgICAgIGJlY29tZXMgdW51c2FibGUsIGFuZCB5b3Ugc2hvdWxkIGVpdGhlciBmcmVlIGl0IG9yIGNhbGwKKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0KCkgb24gaXQgYmVmb3JlIHJlLXVzaW5nIGl0IGZvcgorICogICAgICAgICAgICAgICAgIGEgbmV3IGNvbm5lY3Rpb247IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gbXVzdCBiZSBjbG9zZWQuCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIG9yIE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFLCBvcgorICogICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgU1NMIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfc3RlcCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWF0ZSBhbiBTU0wgcmVuZWdvdGlhdGlvbiBvbiB0aGUgcnVubmluZyBjb25uZWN0aW9uLgorICogICAgICAgICAgICAgICAgIENsaWVudDogcGVyZm9ybSB0aGUgcmVuZWdvdGlhdGlvbiByaWdodCBub3cuCisgKiAgICAgICAgICAgICAgICAgU2VydmVyOiByZXF1ZXN0IHJlbmVnb3RpYXRpb24sIHdoaWNoIHdpbGwgYmUgcGVyZm9ybWVkCisgKiAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZSBuZXh0IGNhbGwgdG8gbWJlZHRsc19zc2xfcmVhZCgpIGlmIGhvbm9yZWQgYnkKKyAqICAgICAgICAgICAgICAgICBjbGllbnQuCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW55IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSgpIHJldHVybgorICogICAgICAgICAgICAgICAgIHZhbHVlLgorICoKKyAqIFxub3RlICAgICAgICAgICBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4gMCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQvV1JJVEUsIHRoZW4gdGhlIHNzbCBjb250ZXh0CisgKiAgICAgICAgICAgICAgICAgYmVjb21lcyB1bnVzYWJsZSwgYW5kIHlvdSBzaG91bGQgZWl0aGVyIGZyZWUgaXQgb3IgY2FsbAorICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQoKSBvbiBpdCBiZWZvcmUgcmUtdXNpbmcgaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgYSBuZXcgY29ubmVjdGlvbjsgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBtdXN0IGJlIGNsb3NlZC4KKyAqLworaW50IG1iZWR0bHNfc3NsX3JlbmVnb3RpYXRlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJlYWQgYXQgbW9zdCAnbGVuJyBhcHBsaWNhdGlvbiBkYXRhIGJ5dGVzCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gYnVmICAgICAgYnVmZmVyIHRoYXQgd2lsbCBob2xkIHRoZSBkYXRhCisgKiBccGFyYW0gbGVuICAgICAgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICoKKyAqIFxyZXR1cm4gICAgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQsIG9yCisgKiAgICAgICAgICAgICAgICAgMCBmb3IgRU9GLCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgb3IgTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUsIG9yCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX0NMSUVOVF9SRUNPTk5FQ1QgKHNlZSBiZWxvdyksIG9yCisgKiAgICAgICAgICAgICAgICAgYW5vdGhlciBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICoKKyAqIFxub3RlICAgICAgICAgICBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBwb3NpdGl2ZQorICogICAgICAgICAgICAgICAgIHZhbHVlIG9yIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQvV1JJVEUgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfQ0xJRU5UX1JFQ09OTkVDVCwgdGhlbiB0aGUgc3NsIGNvbnRleHQKKyAqICAgICAgICAgICAgICAgICBiZWNvbWVzIHVudXNhYmxlLCBhbmQgeW91IHNob3VsZCBlaXRoZXIgZnJlZSBpdCBvciBjYWxsCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCgpIG9uIGl0IGJlZm9yZSByZS11c2luZyBpdCBmb3IKKyAqICAgICAgICAgICAgICAgICBhIG5ldyBjb25uZWN0aW9uOyB0aGUgY3VycmVudCBjb25uZWN0aW9uIG11c3QgYmUgY2xvc2VkLgorICoKKyAqIFxub3RlICAgICAgICAgICBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJuIE1CRURUTFNfRVJSX1NTTF9DTElFTlRfUkVDT05ORUNUCisgKiAgICAgICAgICAgICAgICAgKHdoaWNoIGNhbiBvbmx5IGhhcHBlbiBzZXJ2ZXItc2lkZSksIGl0IG1lYW5zIHRoYXQgYSBjbGllbnQKKyAqICAgICAgICAgICAgICAgICBpcyBpbml0aWF0aW5nIGEgbmV3IGNvbm5lY3Rpb24gdXNpbmcgdGhlIHNhbWUgc291cmNlIHBvcnQuCisgKiAgICAgICAgICAgICAgICAgWW91IGNhbiBlaXRoZXIgdHJlYXQgdGhhdCBhcyBhIGNvbm5lY3Rpb24gY2xvc2UgYW5kIHdhaXQKKyAqICAgICAgICAgICAgICAgICBmb3IgdGhlIGNsaWVudCB0byByZXNlbmQgYSBDbGllbnRIZWxsbywgb3IgZGlyZWN0bHkKKyAqICAgICAgICAgICAgICAgICBjb250aW51ZSB3aXRoIFxjIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSgpIHdpdGggdGhlIHNhbWUKKyAqICAgICAgICAgICAgICAgICBjb250ZXh0IChhcyBpdCBoYXMgYmVlZW4gcmVzZXQgaW50ZXJuYWxseSkuIEVpdGhlciB3YXksIHlvdQorICogICAgICAgICAgICAgICAgIHNob3VsZCBtYWtlIHN1cmUgdGhpcyBpcyBzZWVuIGJ5IHRoZSBhcHBsaWNhdGlvbiBhcyBhIG5ldworICogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IGFwcGxpY2F0aW9uIHN0YXRlLCBpZiBhbnksIHNob3VsZCBiZSByZXNldCwgYW5kCisgKiAgICAgICAgICAgICAgICAgbW9zdCBpbXBvcnRhbnRseSB0aGUgaWRlbnRpdHkgb2YgdGhlIGNsaWVudCBtdXN0IGJlIGNoZWNrZWQKKyAqICAgICAgICAgICAgICAgICBhZ2Fpbi4gV0FSTklORzogbm90IHZhbGlkYXRpbmcgdGhlIGlkZW50aXR5IG9mIHRoZSBjbGllbnQKKyAqICAgICAgICAgICAgICAgICBhZ2Fpbiwgb3Igbm90IHRyYW5zbWl0dGluZyB0aGUgbmV3IGlkZW50aXR5IHRvIHRoZQorICogICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGxheWVyLCB3b3VsZCBhbGxvdyBhdXRoZW50aWNhdGlvbiBieXBhc3MhCisgKi8KK2ludCBtYmVkdGxzX3NzbF9yZWFkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcnkgdG8gd3JpdGUgZXhhY3RseSAnbGVuJyBhcHBsaWNhdGlvbiBkYXRhIGJ5dGVzCisgKgorICogXHdhcm5pbmcgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBkbyBwYXJ0aWFsIHdyaXRlcyBpbiBzb21lIGNhc2VzLiBJZiB0aGUKKyAqICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgaXMgbm9uLW5lZ2F0aXZlIGJ1dCBsZXNzIHRoYW4gbGVuZ3RoLCB0aGUKKyAqICAgICAgICAgICAgICAgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZ2FpbiB3aXRoIHVwZGF0ZWQgYXJndW1lbnRzOgorICogICAgICAgICAgICAgICAgIGJ1ZiArIHJldCwgbGVuIC0gcmV0IChpZiByZXQgaXMgdGhlIHJldHVybiB2YWx1ZSkgdW50aWwKKyAqICAgICAgICAgICAgICAgICBpdCByZXR1cm5zIGEgdmFsdWUgZXF1YWwgdG8gdGhlIGxhc3QgJ2xlbicgYXJndW1lbnQuCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gYnVmICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGRhdGEKKyAqIFxwYXJhbSBsZW4gICAgICBob3cgbWFueSBieXRlcyBtdXN0IGJlIHdyaXR0ZW4KKyAqCisgKiBccmV0dXJuICAgICAgICAgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuIChtYXkgYmUgbGVzcyB0aGFuIGxlbiksCisgKiAgICAgICAgICAgICAgICAgb3IgTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgb2YgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCwKKyAqICAgICAgICAgICAgICAgICBvciBhbm90aGVyIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKgorICogXG5vdGUgICAgICAgICAgIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIHBvc2l0aXZlCisgKiAgICAgICAgICAgICAgICAgdmFsdWUgb3IgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRC9XUklURSwgdGhlIHNzbCBjb250ZXh0CisgKiAgICAgICAgICAgICAgICAgYmVjb21lcyB1bnVzYWJsZSwgYW5kIHlvdSBzaG91bGQgZWl0aGVyIGZyZWUgaXQgb3IgY2FsbAorICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQoKSBvbiBpdCBiZWZvcmUgcmUtdXNpbmcgaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgYSBuZXcgY29ubmVjdGlvbjsgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBtdXN0IGJlIGNsb3NlZC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUvUkVBRCwKKyAqICAgICAgICAgICAgICAgICBpdCBtdXN0IGJlIGNhbGxlZCBsYXRlciB3aXRoIHRoZSAqc2FtZSogYXJndW1lbnRzLAorICogICAgICAgICAgICAgICAgIHVudGlsIGl0IHJldHVybnMgYSBwb3NpdGl2ZSB2YWx1ZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgSWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtCisgKiAgICAgICAgICAgICAgICAgZnJhZ21lbnQgbGVuZ3RoIChlaXRoZXIgdGhlIGJ1aWx0LWluIGxpbWl0IG9yIHRoZSBvbmUgc2V0CisgKiAgICAgICAgICAgICAgICAgb3IgbmVnb3RpYXRlZCB3aXRoIHRoZSBwZWVyKSwgdGhlbjoKKyAqICAgICAgICAgICAgICAgICAtIHdpdGggVExTLCBsZXNzIGJ5dGVzIHRoYW4gcmVxdWVzdGVkIGFyZSB3cml0dGVuLgorICogICAgICAgICAgICAgICAgIC0gd2l0aCBEVExTLCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgaXMgcmV0dXJuZWQuCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfZ2V0X21heF9mcmFnX2xlbigpIG1heSBiZSB1c2VkIHRvIHF1ZXJ5IHRoZQorICogICAgICAgICAgICAgICAgIGFjdGl2ZSBtYXhpbXVtIGZyYWdtZW50IGxlbmd0aC4KKyAqLworaW50IG1iZWR0bHNfc3NsX3dyaXRlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2VuZCBhbiBhbGVydCBtZXNzYWdlCisgKgorICogXHBhcmFtIHNzbCAgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIGxldmVsICAgICBUaGUgYWxlcnQgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UKKyAqICAgICAgICAgICAgICAgICAgKE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX1dBUk5JTkcgb3IgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwpCisgKiBccGFyYW0gbWVzc2FnZSAgIFRoZSBhbGVydCBtZXNzYWdlIChTU0xfQUxFUlRfTVNHXyopCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgU1NMIGVycm9yIGNvZGUuCisgKgorICogXG5vdGUgICAgICAgICAgIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiAwIG9yCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRC9XUklURSwgdGhlbiB0aGUgc3NsIGNvbnRleHQKKyAqICAgICAgICAgICAgICAgICBiZWNvbWVzIHVudXNhYmxlLCBhbmQgeW91IHNob3VsZCBlaXRoZXIgZnJlZSBpdCBvciBjYWxsCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCgpIG9uIGl0IGJlZm9yZSByZS11c2luZyBpdCBmb3IKKyAqICAgICAgICAgICAgICAgICBhIG5ldyBjb25uZWN0aW9uOyB0aGUgY3VycmVudCBjb25uZWN0aW9uIG11c3QgYmUgY2xvc2VkLgorICovCitpbnQgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2UgKTsKKy8qKgorICogXGJyaWVmICAgICAgICAgIE5vdGlmeSB0aGUgcGVlciB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIGJlaW5nIGNsb3NlZAorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIFNTTCBlcnJvciBjb2RlLgorICoKKyAqIFxub3RlICAgICAgICAgICBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4gMCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQvV1JJVEUsIHRoZW4gdGhlIHNzbCBjb250ZXh0CisgKiAgICAgICAgICAgICAgICAgYmVjb21lcyB1bnVzYWJsZSwgYW5kIHlvdSBzaG91bGQgZWl0aGVyIGZyZWUgaXQgb3IgY2FsbAorICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQoKSBvbiBpdCBiZWZvcmUgcmUtdXNpbmcgaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgYSBuZXcgY29ubmVjdGlvbjsgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBtdXN0IGJlIGNsb3NlZC4KKyAqLworaW50IG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEZyZWUgcmVmZXJlbmNlZCBpdGVtcyBpbiBhbiBTU0wgY29udGV4dCBhbmQgY2xlYXIgbWVtb3J5CisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfZnJlZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgYW4gU1NMIGNvbmZpZ3VyYXRpb24gY29udGV4dAorICogICAgICAgICAgICAgICAgIEp1c3QgbWFrZXMgdGhlIGNvbnRleHQgcmVhZHkgZm9yCisgKiAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCkgb3IgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoKS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgWW91IG5lZWQgdG8gY2FsbCBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoKSB1bmxlc3MgeW91CisgKiAgICAgICAgICAgICAgICAgbWFudWFsbHkgc2V0IGFsbCBvZiB0aGUgcmVsZXZlbnQgZmllbGRzIHlvdXJzZWxmLgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbiBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBMb2FkIHJlYXNvbm5hYmxlIGRlZmF1bHQgU1NMIGNvbmZpZ3VyYXRpb24gdmFsdWVzLgorICogICAgICAgICAgICAgICAgIChZb3UgbmVlZCB0byBjYWxsIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCkgZmlyc3QuKQorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbiBjb250ZXh0CisgKiBccGFyYW0gZW5kcG9pbnQgTUJFRFRMU19TU0xfSVNfQ0xJRU5UIG9yIE1CRURUTFNfU1NMX0lTX1NFUlZFUgorICogXHBhcmFtIHRyYW5zcG9ydCBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNIGZvciBUTFMsIG9yCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSBmb3IgRFRMUworICogXHBhcmFtIHByZXNldCAgIGEgTUJFRFRMU19TU0xfUFJFU0VUX1hYWCB2YWx1ZQorICogICAgICAgICAgICAgICAgIChjdXJyZW50bHkgdW51c2VkKS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2VlIFxjIG1iZWR0bHNfc3NsX2NvbmZfdHJhbnNwb3J0KCkgZm9yIG5vdGVzIG9uIERUTFMuCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9YWFhfQUxMT0NfRkFJTEVEIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLgorICovCitpbnQgbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5kcG9pbnQsIGludCB0cmFuc3BvcnQsIGludCBwcmVzZXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRnJlZSBhbiBTU0wgY29uZmlndXJhdGlvbiBjb250ZXh0CisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgU1NMIHNlc3Npb24gc3RydWN0dXJlCisgKgorICogXHBhcmFtIHNlc3Npb24gIFNTTCBzZXNzaW9uCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfc2Vzc2lvbl9pbml0KCBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEZyZWUgcmVmZXJlbmNlZCBpdGVtcyBpbiBhbiBTU0wgc2Vzc2lvbiBpbmNsdWRpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgcGVlciBjZXJ0aWZpY2F0ZSBhbmQgY2xlYXIgbWVtb3J5CisgKgorICogXHBhcmFtIHNlc3Npb24gIFNTTCBzZXNzaW9uCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfc2Vzc2lvbl9mcmVlKCBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBzc2wuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2xfY2FjaGUuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsX2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczNGJiNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsX2NhY2hlLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qKgorICogXGZpbGUgc3NsX2NhY2hlLmgKKyAqCisgKiBcYnJpZWYgU1NMIHNlc3Npb24gY2FjaGUgaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19TU0xfQ0FDSEVfSAorI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9ICisKKyNpbmNsdWRlICJzc2wuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyNpbmNsdWRlICJ0aHJlYWRpbmcuaCIKKyNlbmRpZgorCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncworICoKKyAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGNhbiBzZXQgZm9yIHRoaXMgbW9kdWxlIGFyZSBpbiB0aGlzIHNlY3Rpb24uCisgKiBFaXRoZXIgY2hhbmdlIHRoZW0gaW4gY29uZmlnLmggb3IgZGVmaW5lIHRoZW0gb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZS4KKyAqIFx7CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0RFRkFVTFRfVElNRU9VVCkKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0FDSEVfREVGQVVMVF9USU1FT1VUICAgICAgIDg2NDAwICAgLyohPCAxIGRheSAgKi8KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfREVGQVVMVF9NQVhfRU5UUklFUykKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0FDSEVfREVGQVVMVF9NQVhfRU5UUklFUyAgICAgIDUwICAgLyohPCBNYXhpbXVtIGVudHJpZXMgaW4gY2FjaGUgKi8KKyNlbmRpZgorCisvKiBcfSBuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dDsKK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5IG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5OworCisvKioKKyAqIFxicmllZiAgIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIHN0b3JpbmcgY2FjaGUgZW50cmllcworICovCitzdHJ1Y3QgbWJlZHRsc19zc2xfY2FjaGVfZW50cnkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgIG1iZWR0bHNfdGltZV90IHRpbWVzdGFtcDsgICAgICAgICAgIC8qITwgZW50cnkgdGltZXN0YW1wICAgICovCisjZW5kaWYKKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uIHNlc3Npb247ICAgICAgICAvKiE8IGVudHJ5IHNlc3Npb24gICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIG1iZWR0bHNfeDUwOV9idWYgcGVlcl9jZXJ0OyAgICAgICAgIC8qITwgZW50cnkgcGVlcl9jZXJ0ICAgICovCisjZW5kaWYKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9lbnRyeSAqbmV4dDsgICAgICAvKiE8IGNoYWluIHBvaW50ZXIgICAgICAqLworfTsKKworLyoqCisgKiBcYnJpZWYgQ2FjaGUgY29udGV4dAorICovCitzdHJ1Y3QgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dAoreworICAgIG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5ICpjaGFpbjsgICAgIC8qITwgc3RhcnQgb2YgdGhlIGNoYWluICAgICAqLworICAgIGludCB0aW1lb3V0OyAgICAgICAgICAgICAgICAvKiE8IGNhY2hlIGVudHJ5IHRpbWVvdXQgICAgKi8KKyAgICBpbnQgbWF4X2VudHJpZXM7ICAgICAgICAgICAgLyohPCBtYXhpbXVtIGVudHJpZXMgICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgbXV0ZXg7ICAgIC8qITwgbXV0ZXggICAgICAgICAgICAgICAgICAqLworI2VuZGlmCit9OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIGFuIFNTTCBjYWNoZSBjb250ZXh0CisgKgorICogXHBhcmFtIGNhY2hlICAgIFNTTCBjYWNoZSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY2FjaGVfaW5pdCggbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCAqY2FjaGUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2FjaGUgZ2V0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKiAgICAgICAgICAgICAgICAgKFRocmVhZC1zYWZlIGlmIE1CRURUTFNfVEhSRUFESU5HX0MgaXMgZW5hYmxlZCkKKyAqCisgKiBccGFyYW0gZGF0YSAgICAgU1NMIGNhY2hlIGNvbnRleHQKKyAqIFxwYXJhbSBzZXNzaW9uICBzZXNzaW9uIHRvIHJldHJpZXZlIGVudHJ5IGZvcgorICovCitpbnQgbWJlZHRsc19zc2xfY2FjaGVfZ2V0KCB2b2lkICpkYXRhLCBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENhY2hlIHNldCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICogICAgICAgICAgICAgICAgIChUaHJlYWQtc2FmZSBpZiBNQkVEVExTX1RIUkVBRElOR19DIGlzIGVuYWJsZWQpCisgKgorICogXHBhcmFtIGRhdGEgICAgIFNTTCBjYWNoZSBjb250ZXh0CisgKiBccGFyYW0gc2Vzc2lvbiAgc2Vzc2lvbiB0byBzdG9yZSBlbnRyeSBmb3IKKyAqLworaW50IG1iZWR0bHNfc3NsX2NhY2hlX3NldCggdm9pZCAqZGF0YSwgY29uc3QgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgY2FjaGUgdGltZW91dAorICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX1RJTUVPVVQgKDEgZGF5KSkKKyAqCisgKiAgICAgICAgICAgICAgICAgQSB0aW1lb3V0IG9mIDAgaW5kaWNhdGVzIG5vIHRpbWVvdXQuCisgKgorICogXHBhcmFtIGNhY2hlICAgIFNTTCBjYWNoZSBjb250ZXh0CisgKiBccGFyYW0gdGltZW91dCAgY2FjaGUgZW50cnkgdGltZW91dCBpbiBzZWNvbmRzCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY2FjaGVfc2V0X3RpbWVvdXQoIG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgKmNhY2hlLCBpbnQgdGltZW91dCApOworI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9USU1FICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2FjaGUgZW50cmllcworICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX01BWF9FTlRSSUVTICg1MCkpCisgKgorICogXHBhcmFtIGNhY2hlICAgIFNTTCBjYWNoZSBjb250ZXh0CisgKiBccGFyYW0gbWF4ICAgICAgY2FjaGUgZW50cnkgbWF4aW11bQorICovCit2b2lkIG1iZWR0bHNfc3NsX2NhY2hlX3NldF9tYXhfZW50cmllcyggbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCAqY2FjaGUsIGludCBtYXggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRnJlZSByZWZlcmVuY2VkIGl0ZW1zIGluIGEgY2FjaGUgY29udGV4dCBhbmQgY2xlYXIgbWVtb3J5CisgKgorICogXHBhcmFtIGNhY2hlICAgIFNTTCBjYWNoZSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY2FjaGVfZnJlZSggbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCAqY2FjaGUgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHNzbF9jYWNoZS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbF9jaXBoZXJzdWl0ZXMuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsX2NpcGhlcnN1aXRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYWFhMzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbF9jaXBoZXJzdWl0ZXMuaApAQCAtMCwwICsxLDMyMSBAQAorLyoqCisgKiBcZmlsZSBzc2xfY2lwaGVyc3VpdGVzLmgKKyAqCisgKiBcYnJpZWYgU1NMIENpcGhlcnN1aXRlcyBmb3IgbWJlZCBUTFMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19TU0xfQ0lQSEVSU1VJVEVTX0gKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0lQSEVSU1VJVEVTX0gKKworI2luY2x1ZGUgInBrLmgiCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAibWQuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogU3VwcG9ydGVkIGNpcGhlcnN1aXRlcyAoT2ZmaWNpYWwgSUFOQSBuYW1lcykKKyAqLworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX01ENSAgICAgICAgICAgICAgICAgICAgMHgwMSAgIC8qKjwgV2VhayEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEgICAgICAgICAgICAgICAgICAgIDB4MDIgICAvKio8IFdlYWshICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9NRDUgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9TSEEgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfREVTX0NCQ19TSEEgICAgICAgICAgICAgICAgIDB4MDkgICAvKio8IFdlYWshIE5vdCBpbiBUTFMgMS4yICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSAgICAgICAgICAgIDB4MEEKKworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfREVTX0NCQ19TSEEgICAgICAgICAgICAgMHgxNSAgIC8qKjwgV2VhayEgTm90IGluIFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgICAgICAgIDB4MTYKKworI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQSAgICAgICAgICAgICAgICAgICAgMHgyQyAgIC8qKjwgV2VhayEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBICAgICAgICAgICAgICAgIDB4MkQgICAvKio8IFdlYWshICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQSAgICAgICAgICAgICAgICAweDJFICAgLyoqPCBXZWFrISAqLworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgICAgICAgICAgICAgMHgyRgorCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgICAgICAgICAweDMzCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSAgICAgICAgICAgICAweDM1CisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgICAgICAweDM5CisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEyNTYgICAgICAgICAgICAgICAgIDB4M0IgICAvKio8IFdlYWshICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiAgICAgICAgICAweDNDICAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NiAgICAgICAgICAweDNEICAgLyoqPCBUTFMgMS4yICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEgICAgICAgIDB4NDEKKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBICAgIDB4NDUKKworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2ICAgICAgMHg2NyAgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2ICAgICAgMHg2QiAgIC8qKjwgVExTIDEuMiAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBICAgICAgICAweDg0CisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQSAgICAweDg4CisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUFNLX1dJVEhfUkM0XzEyOF9TSEEgICAgICAgICAgICAgICAgIDB4OEEKKyNkZWZpbmUgTUJFRFRMU19UTFNfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSAgICAgICAgICAgIDB4OEIKKyNkZWZpbmUgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBICAgICAgICAgICAgIDB4OEMKKyNkZWZpbmUgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBICAgICAgICAgICAgIDB4OEQKKworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEgICAgICAgICAgICAgMHg4RQorI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSAgICAgICAgMHg4RgorI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBICAgICAgICAgMHg5MAorI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBICAgICAgICAgMHg5MQorCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9SQzRfMTI4X1NIQSAgICAgICAgICAgICAweDkyCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBICAgICAgICAweDkzCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEgICAgICAgICAweDk0CisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgICAgICAweDk1CisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2ICAgICAgICAgIDB4OUMgICAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgICAgICAgIDB4OUQgICAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgICAgIDB4OUUgICAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCAgICAgIDB4OUYgICAvKio8IFRMUyAxLjIgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAgICAgMHhBOCAgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgICAgICAgICAgMHhBOSAgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2ICAgICAgMHhBQSAgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgICAgMHhBQiAgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2ICAgICAgMHhBQyAgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgICAgMHhBRCAgIC8qKjwgVExTIDEuMiAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiAgICAgICAgICAweEFFCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCAgICAgICAgICAweEFGCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMjU2ICAgICAgICAgICAgICAgICAweEIwICAgLyoqPCBXZWFrISAqLworI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQTM4NCAgICAgICAgICAgICAgICAgMHhCMSAgIC8qKjwgV2VhayEgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2ICAgICAgMHhCMgorI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0ICAgICAgMHhCMworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYgICAgICAgICAgICAgMHhCNCAgIC8qKjwgV2VhayEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBMzg0ICAgICAgICAgICAgIDB4QjUgICAvKio8IFdlYWshICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiAgICAgIDB4QjYKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCAgICAgIDB4QjcKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMjU2ICAgICAgICAgICAgIDB4QjggICAvKio8IFdlYWshICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTM4NCAgICAgICAgICAgICAweEI5ICAgLyoqPCBXZWFrISAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2ICAgICAweEJBICAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiAweEJFICAgLyoqPCBUTFMgMS4yICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYgICAgIDB4QzAgICAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2IDB4QzQgICAvKio8IFRMUyAxLjIgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEgICAgICAgICAgICAgMHhDMDAxIC8qKjwgV2VhayEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBICAgICAgICAgIDB4QzAwMiAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSAgICAgMHhDMDAzIC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgICAgICAweEMwMDQgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSAgICAgIDB4QzAwNSAvKio8IE5vdCBpbiBTU0wzISAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfTlVMTF9TSEEgICAgICAgICAgICAweEMwMDYgLyoqPCBXZWFrISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBICAgICAgICAgMHhDMDA3IC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSAgICAweEMwMDggLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgICAgIDB4QzAwOSAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSAgICAgMHhDMDBBIC8qKjwgTm90IGluIFNTTDMhICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9OVUxMX1NIQSAgICAgICAgICAgICAgIDB4QzAwQiAvKio8IFdlYWshICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEgICAgICAgICAgICAweEMwMEMgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBICAgICAgIDB4QzAwRCAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSAgICAgICAgMHhDMDBFIC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBICAgICAgICAweEMwMEYgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9OVUxMX1NIQSAgICAgICAgICAgICAgMHhDMDEwIC8qKjwgV2VhayEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfUkM0XzEyOF9TSEEgICAgICAgICAgIDB4QzAxMSAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBICAgICAgMHhDMDEyIC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSAgICAgICAweEMwMTMgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBICAgICAgIDB4QzAxNCAvKio8IE5vdCBpbiBTU0wzISAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2ICAweEMwMjMgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0ICAweEMwMjQgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgICAweEMwMjUgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgICAweEMwMjYgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiAgICAweEMwMjcgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCAgICAweEMwMjggLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2ICAgICAweEMwMjkgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0ICAgICAweEMwMkEgLyoqPCBUTFMgMS4yICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgIDB4QzAyQiAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgIDB4QzAyQyAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgIDB4QzAyRCAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCAgIDB4QzAyRSAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2ICAgIDB4QzAyRiAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgIDB4QzAzMCAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgIDB4QzAzMSAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgICAgIDB4QzAzMiAvKio8IFRMUyAxLjIgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQSAgICAgICAgICAgMHhDMDMzIC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEgICAgICAweEMwMzQgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBICAgICAgIDB4QzAzNSAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgICAgMHhDMDM2IC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiAgICAweEMwMzcgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0ICAgIDB4QzAzOCAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQSAgICAgICAgICAgICAgMHhDMDM5IC8qKjwgV2VhayEgTm8gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYgICAgICAgICAgIDB4QzAzQSAvKio8IFdlYWshIE5vIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMzg0ICAgICAgICAgICAweEMwM0IgLyoqPCBXZWFrISBObyBTU0wzISAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgMHhDMDcyIC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgMHhDMDczIC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiAgMHhDMDc0IC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCAgMHhDMDc1IC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2ICAgMHhDMDc2IC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0ICAgMHhDMDc3IC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgICAgMHhDMDc4IC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgICAgMHhDMDc5IC8qKjwgTm90IGluIFNTTDMhICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgICAgICAgICAweEMwN0EgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0ICAgICAgICAgMHhDMDdCIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgICAgIDB4QzA3QyAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0ICAgICAweEMwN0QgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgMHhDMDg2IC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IDB4QzA4NyAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2ICAweEMwODggLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCAgMHhDMDg5IC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiAgIDB4QzA4QSAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgICAweEMwOEIgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgICAgMHhDMDhDIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0ICAgIDB4QzA4RCAvKio8IFRMUyAxLjIgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiAgICAgICAweEMwOEUgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0ICAgICAgIDB4QzA4RiAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2ICAgMHhDMDkwIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgICAweEMwOTEgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiAgIDB4QzA5MiAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0ICAgMHhDMDkzIC8qKjwgVExTIDEuMiAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2ICAgICAgIDB4QzA5NAorI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCAgICAgICAweEMwOTUKKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2ICAgMHhDMDk2CisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCAgIDB4QzA5NworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgICAweEMwOTgKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0ICAgMHhDMDk5CisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IDB4QzA5QSAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCAweEMwOUIgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NDTSAgICAgICAgICAgICAgICAweEMwOUMgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NDTSAgICAgICAgICAgICAgICAweEMwOUQgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQ00gICAgICAgICAgICAweEMwOUUgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ00gICAgICAgICAgICAweEMwOUYgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NDTV84ICAgICAgICAgICAgICAweEMwQTAgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NDTV84ICAgICAgICAgICAgICAweEMwQTEgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQ01fOCAgICAgICAgICAweEMwQTIgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOCAgICAgICAgICAweEMwQTMgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NDTSAgICAgICAgICAgICAgICAweEMwQTQgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NDTSAgICAgICAgICAgICAgICAweEMwQTUgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQ00gICAgICAgICAgICAweEMwQTYgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ00gICAgICAgICAgICAweEMwQTcgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NDTV84ICAgICAgICAgICAgICAweEMwQTggIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NDTV84ICAgICAgICAgICAgICAweEMwQTkgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQ01fOCAgICAgICAgICAweEMwQUEgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOCAgICAgICAgICAweEMwQUIgIC8qKjwgVExTIDEuMiAqLworLyogVGhlIGxhc3QgdHdvIGFyZSBuYW1lZCB3aXRoIFBTS19ESEUgaW4gdGhlIFJGQywgd2hpY2ggbG9va3MgbGlrZSBhIHR5cG8gKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0NNICAgICAgICAweEMwQUMgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0NNICAgICAgICAweEMwQUQgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0NNXzggICAgICAweEMwQUUgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0NNXzggICAgICAweEMwQUYgIC8qKjwgVExTIDEuMiAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX0VDSlBBS0VfV0lUSF9BRVNfMTI4X0NDTV84ICAgICAgICAgIDB4QzBGRiAgLyoqPCBleHBlcmltZW50YWwgKi8KKworLyogUmVtaW5kZXI6IHVwZGF0ZSBtYmVkdGxzX3NzbF9wcmVtYXN0ZXJfc2VjcmV0IHdoZW4gYWRkaW5nIGEgbmV3IGtleSBleGNoYW5nZS4KKyAqIFJlbWluZGVyOiB1cGRhdGUgTUJFRFRMU19LRVlfRVhDSEFOR0VfX3h4eCBiZWxvdworICovCit0eXBlZGVmIGVudW0geworICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX05PTkUgPSAwLAorICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSwKKyAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLLAorICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSywKKyAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSwKKyAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBLAorICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UsCit9IG1iZWR0bHNfa2V5X2V4Y2hhbmdlX3R5cGVfdDsKKworLyogS2V5IGV4Y2hhbmdlcyB1c2luZyBhIGNlcnRpZmljYXRlICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkgICAgICAgICAgIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkgICAgICAgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpICAgICB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKSAgIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCkgICAgICAgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCkgICAgICB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpCisjZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQKKyNlbmRpZgorCisvKiBLZXkgZXhjaGFuZ2VzIHVzaW5nIGEgUFNLICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCkgICAgICAgICAgIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCkgICAgICAgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEKSAgICAgICB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCkKKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVECisjZW5kaWYKKworLyogS2V5IGV4Y2hhbmdlcyB1c2luZyBhIEVDREhFICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkgICAgIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpICAgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQpCisjZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19FQ0RIRV9FTkFCTEVECisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90OworCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyAgICAgICAweDAxICAgIC8qKjwgV2VhayBjaXBoZXJzdWl0ZSBmbGFnICAqLworI2RlZmluZSBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyAgMHgwMiAgICAvKio8IFNob3J0IGF1dGhlbnRpY2F0aW9uIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWcgZm9yIENDTV84ICovCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSU1VJVEVfTk9EVExTICAgICAweDA0ICAgIC8qKjwgQ2FuJ3QgYmUgdXNlZCB3aXRoIERUTFMgKi8KKworLyoqCisgKiBcYnJpZWYgICBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBzdG9yaW5nIGNpcGhlcnN1aXRlIGluZm9ybWF0aW9uCisgKi8KK3N0cnVjdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90Cit7CisgICAgaW50IGlkOworICAgIGNvbnN0IGNoYXIgKiBuYW1lOworCisgICAgbWJlZHRsc19jaXBoZXJfdHlwZV90IGNpcGhlcjsKKyAgICBtYmVkdGxzX21kX3R5cGVfdCBtYWM7CisgICAgbWJlZHRsc19rZXlfZXhjaGFuZ2VfdHlwZV90IGtleV9leGNoYW5nZTsKKworICAgIGludCBtaW5fbWFqb3JfdmVyOworICAgIGludCBtaW5fbWlub3JfdmVyOworICAgIGludCBtYXhfbWFqb3JfdmVyOworICAgIGludCBtYXhfbWlub3JfdmVyOworCisgICAgdW5zaWduZWQgY2hhciBmbGFnczsKK307CisKK2NvbnN0IGludCAqbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoIHZvaWQgKTsKKworY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9zdHJpbmcoIGNvbnN0IGNoYXIgKmNpcGhlcnN1aXRlX25hbWUgKTsKK2NvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKm1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQoIGludCBjaXBoZXJzdWl0ZV9pZCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX0MpCittYmVkdGxzX3BrX3R5cGVfdCBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfc2lnX3BrX2FsZyggY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqaW5mbyApOworI2VuZGlmCisKK2ludCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV91c2VzX2VjKCBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICppbmZvICk7CitpbnQgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdXNlc19wc2soIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmluZm8gKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHNzbF9jaXBoZXJzdWl0ZXMuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2xfY29va2llLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbF9jb29raWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzdlMWMzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2xfY29va2llLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qKgorICogXGZpbGUgc3NsX2Nvb2tpZS5oCisgKgorICogXGJyaWVmIERUTFMgY29va2llIGNhbGxiYWNrcyBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1NTTF9DT09LSUVfSAorI2RlZmluZSBNQkVEVExTX1NTTF9DT09LSUVfSAorCisjaW5jbHVkZSAic3NsLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisjaW5jbHVkZSAidGhyZWFkaW5nLmgiCisjZW5kaWYKKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBNb2R1bGUgc2V0dGluZ3MKKyAqCisgKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSBjYW4gc2V0IGZvciB0aGlzIG1vZHVsZSBhcmUgaW4gdGhpcyBzZWN0aW9uLgorICogRWl0aGVyIGNoYW5nZSB0aGVtIGluIGNvbmZpZy5oIG9yIGRlZmluZSB0aGVtIG9uIHRoZSBjb21waWxlciBjb21tYW5kIGxpbmUuCisgKiBceworICovCisjaWZuZGVmIE1CRURUTFNfU1NMX0NPT0tJRV9USU1FT1VUCisjZGVmaW5lIE1CRURUTFNfU1NMX0NPT0tJRV9USU1FT1VUICAgICA2MCAvKio8IERlZmF1bHQgZXhwaXJhdGlvbiBkZWxheSBvZiBEVExTIGNvb2tpZXMsIGluIHNlY29uZHMgaWYgSEFWRV9USU1FLCBvciBpbiBudW1iZXIgb2YgY29va2llcyBpc3N1ZWQgKi8KKyNlbmRpZgorCisvKiBcfSBuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENvbnRleHQgZm9yIHRoZSBkZWZhdWx0IGNvb2tpZSBmdW5jdGlvbnMuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgICAgaG1hY19jdHg7ICAgLyohPCBjb250ZXh0IGZvciB0aGUgSE1BQyBwb3J0aW9uICAgKi8KKyNpZiAhZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICB1bnNpZ25lZCBsb25nICAgc2VyaWFsOyAgICAgLyohPCBzZXJpYWwgbnVtYmVyIGZvciBleHBpcmF0aW9uICAgKi8KKyNlbmRpZgorICAgIHVuc2lnbmVkIGxvbmcgICB0aW1lb3V0OyAgICAvKiE8IHRpbWVvdXQgZGVsYXksIGluIHNlY29uZHMgaWYgSEFWRV9USU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGluIG51bWJlciBvZiB0aWNrZXRzIGlzc3VlZCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgbXV0ZXg7CisjZW5kaWYKK30gbWJlZHRsc19zc2xfY29va2llX2N0eDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBjb29raWUgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfc3NsX2Nvb2tpZV9pbml0KCBtYmVkdGxzX3NzbF9jb29raWVfY3R4ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0dXAgY29va2llIGNvbnRleHQgKGdlbmVyYXRlIGtleXMpCisgKi8KK2ludCBtYmVkdGxzX3NzbF9jb29raWVfc2V0dXAoIG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IGV4cGlyYXRpb24gZGVsYXkgZm9yIGNvb2tpZXMKKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdCBNQkVEVExTX1NTTF9DT09LSUVfVElNRU9VVCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQ29va2llIGNvbnRleAorICogXHBhcmFtIGRlbGF5ICAgIERlbGF5LCBpbiBzZWNvbmRzIGlmIEhBVkVfVElNRSwgb3IgaW4gbnVtYmVyIG9mIGNvb2tpZXMKKyAqICAgICAgICAgICAgICAgICBpc3N1ZWQgaW4gdGhlIG1lYW50aW1lLgorICogICAgICAgICAgICAgICAgIDAgdG8gZGlzYWJsZSBleHBpcmF0aW9uIChOT1QgcmVjb21tZW5kZWQpCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29va2llX3NldF90aW1lb3V0KCBtYmVkdGxzX3NzbF9jb29raWVfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZGVsYXkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRnJlZSBjb29raWUgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfc3NsX2Nvb2tpZV9mcmVlKCBtYmVkdGxzX3NzbF9jb29raWVfY3R4ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgR2VuZXJhdGUgY29va2llLCBzZWUgXGMgbWJlZHRsc19zc2xfY29va2llX3dyaXRlX3QKKyAqLworbWJlZHRsc19zc2xfY29va2llX3dyaXRlX3QgbWJlZHRsc19zc2xfY29va2llX3dyaXRlOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBWZXJpZnkgY29va2llLCBzZWUgXGMgbWJlZHRsc19zc2xfY29va2llX3dyaXRlX3QKKyAqLworbWJlZHRsc19zc2xfY29va2llX2NoZWNrX3QgbWJlZHRsc19zc2xfY29va2llX2NoZWNrOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogc3NsX2Nvb2tpZS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbF9pbnRlcm5hbC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2xfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjhjMGY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2xfaW50ZXJuYWwuaApAQCAtMCwwICsxLDUwMCBAQAorLyoqCisgKiBcZmlsZSBzc2xfdGlja2V0LmgKKyAqCisgKiBcYnJpZWYgSW50ZXJuYWwgZnVuY3Rpb25zIHNoYXJlZCBieSB0aGUgU1NMIG1vZHVsZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19TU0xfSU5URVJOQUxfSAorI2RlZmluZSBNQkVEVExTX1NTTF9JTlRFUk5BTF9ICisKKyNpbmNsdWRlICJzc2wuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyNpbmNsdWRlICJtZDUuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyNpbmNsdWRlICJzaGExLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyNpbmNsdWRlICJzaGEyNTYuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorI2luY2x1ZGUgInNoYTUxMi5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyNpbmNsdWRlICJlY2pwYWtlLmgiCisjZW5kaWYKKworI2lmICggZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pIHx8IGRlZmluZWQoX01TQ19WRVIpICkgJiYgXAorICAgICFkZWZpbmVkKGlubGluZSkgJiYgIWRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lIGlubGluZSBfX2lubGluZQorI2VuZGlmCisKKy8qIERldGVybWluZSBtaW5pbXVtIHN1cHBvcnRlZCB2ZXJzaW9uICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01JTl9NQUpPUl9WRVJTSU9OICAgICAgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyNkZWZpbmUgTUJFRFRMU19TU0xfTUlOX01JTk9SX1ZFUlNJT04gICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMAorI2Vsc2UKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpCisjZGVmaW5lIE1CRURUTFNfU1NMX01JTl9NSU5PUl9WRVJTSU9OICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEKKyNlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisjZGVmaW5lIE1CRURUTFNfU1NMX01JTl9NSU5PUl9WRVJTSU9OICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIKKyNlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjZGVmaW5lIE1CRURUTFNfU1NMX01JTl9NSU5PUl9WRVJTSU9OICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxICAgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzICAgKi8KKworLyogRGV0ZXJtaW5lIG1heGltdW0gc3VwcG9ydGVkIHZlcnNpb24gKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX01BSk9SX1ZFUlNJT04gICAgICAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9NSU5PUl9WRVJTSU9OICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMKKyNlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9NSU5PUl9WRVJTSU9OICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIKKyNlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKQorI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfTUlOT1JfVkVSU0lPTiAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xCisjZWxzZQorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX01JTk9SX1ZFUlNJT04gICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgICAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzEgICAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworCisjZGVmaW5lIE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFICAgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgICAxICAgLyogSW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9ET05FICAgICAgICAgIDIgICAvKiBEb25lIG9yIGFib3J0ZWQgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9QRU5ESU5HICAgICAgIDMgICAvKiBSZXF1ZXN0ZWQgKHNlcnZlciBvbmx5KSAqLworCisvKgorICogRFRMUyByZXRyYW5zbWlzc2lvbiBzdGF0ZXMsIHNlZSBSRkMgNjM0NyA0LjIuNAorICoKKyAqIFRoZSBTRU5ESU5HIHN0YXRlIGlzIG1lcmdlZCBpbiBQUkVQQVJJTkcgZm9yIGluaXRpYWwgc2VuZHMsCisgKiBidXQgaXMgZGlzdGluY3QgZm9yIHJlc2VuZHMuCisgKgorICogTm90ZTogaW5pdGlhbCBzdGF0ZSBpcyB3cm9uZyBmb3Igc2VydmVyLCBidXQgaXMgbm90IHVzZWQgYW55d2F5LgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1JFVFJBTlNfUFJFUEFSSU5HICAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfUkVUUkFOU19TRU5ESU5HICAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1NTTF9SRVRSQU5TX1dBSVRJTkcgICAgICAgICAyCisjZGVmaW5lIE1CRURUTFNfU1NMX1JFVFJBTlNfRklOSVNIRUQgICAgICAgIDMKKworLyoKKyAqIEFsbG93IGV4dHJhIGJ5dGVzIGZvciByZWNvcmQsIGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uIG92ZXJoZWFkOgorICogY291bnRlciAoOCkgKyBoZWFkZXIgKDUpICsgSVYoMTYpICsgTUFDICgxNi00OCkgKyBwYWRkaW5nICgwLTI1NikKKyAqIGFuZCBhbGxvdyBmb3IgYSBtYXhpbXVtIG9mIDEwMjQgb2YgY29tcHJlc3Npb24gZXhwYW5zaW9uIGlmCisgKiBlbmFibGVkLgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1pMSUJfU1VQUE9SVCkKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ09NUFJFU1NJT05fQUREICAgICAgICAgIDEwMjQKKyNlbHNlCisjZGVmaW5lIE1CRURUTFNfU1NMX0NPTVBSRVNTSU9OX0FERCAgICAgICAgICAgICAwCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpIHx8IGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisvKiBDaXBoZXJzdWl0ZXMgdXNpbmcgSE1BQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFDX0FERCAgICAgICAgICAgICAgICAgNDggIC8qIFNIQS0zODQgdXNlZCBmb3IgSE1BQyAqLworI2VsaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorI2RlZmluZSBNQkVEVExTX1NTTF9NQUNfQUREICAgICAgICAgICAgICAgICAzMiAgLyogU0hBLTI1NiB1c2VkIGZvciBITUFDICovCisjZWxzZQorI2RlZmluZSBNQkVEVExTX1NTTF9NQUNfQUREICAgICAgICAgICAgICAgICAyMCAgLyogU0hBLTEgICB1c2VkIGZvciBITUFDICovCisjZW5kaWYKKyNlbHNlCisvKiBBRUFEIGNpcGhlcnN1aXRlczogR0NNIGFuZCBDQ00gdXNlIGEgMTI4IGJpdHMgdGFnICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01BQ19BREQgICAgICAgICAgICAgICAgIDE2CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjZGVmaW5lIE1CRURUTFNfU1NMX1BBRERJTkdfQUREICAgICAgICAgICAgMjU2CisjZWxzZQorI2RlZmluZSBNQkVEVExTX1NTTF9QQURESU5HX0FERCAgICAgICAgICAgICAgMAorI2VuZGlmCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfQlVGRkVSX0xFTiAgKCBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICArIE1CRURUTFNfU1NMX0NPTVBSRVNTSU9OX0FERCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICsgMjkgLyogY291bnRlciArIGhlYWRlciArIElWICovICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICsgTUJFRFRMU19TU0xfTUFDX0FERCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKyBNQkVEVExTX1NTTF9QQURESU5HX0FERCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICApCisKKy8qCisgKiBUTFMgZXh0ZW5zaW9uIGZsYWdzIChmb3IgZXh0ZW5zaW9ucyB3aXRoIG91dGdvaW5nIFNlcnZlckhlbGxvIGNvbnRlbnQKKyAqIHRoYXQgbmVlZCBpdCAoZS5nLiBmb3IgUkVORUdPVElBVElPTl9JTkZPIHRoZSBzZXJ2ZXIgYWxyZWFkeSBrbm93cyBiZWNhdXNlCisgKiBvZiBzdGF0ZSBvZiB0aGUgcmVuZWdvdGlhdGlvbiBmbGFnLCBzbyBubyBpbmRpY2F0b3IgaXMgcmVxdWlyZWQpCisgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTX1BSRVNFTlQgKDEgPDwgMCkKKyNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX0VDSlBBS0VfS0tQUF9PSyAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHBhcmFtZXRlcnMgb25seSBuZWVkZWQgZHVyaW5nIGhhbmRzaGFrZS4KKyAqLworc3RydWN0IG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9wYXJhbXMKK3sKKyAgICAvKgorICAgICAqIEhhbmRzaGFrZSBzcGVjaWZpYyBjcnlwdG8gdmFyaWFibGVzCisgICAgICovCisgICAgaW50IHNpZ19hbGc7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAgSGFzaCBhbGdvcml0aG0gZm9yIHNpZ25hdHVyZSAgICovCisgICAgaW50IHZlcmlmeV9zaWdfYWxnOyAgICAgICAgICAgICAgICAgLyohPCAgU2lnbmF0dXJlIGFsZ29yaXRobSBmb3IgdmVyaWZ5ICovCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorICAgIG1iZWR0bHNfZGhtX2NvbnRleHQgZGhtX2N0eDsgICAgICAgICAgICAgICAgLyohPCAgREhNIGtleSBleGNoYW5nZSAgICAgICAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpCisgICAgbWJlZHRsc19lY2RoX2NvbnRleHQgZWNkaF9jdHg7ICAgICAgICAgICAgICAvKiE8ICBFQ0RIIGtleSBleGNoYW5nZSAgICAgICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgZWNqcGFrZV9jdHg7ICAgICAgICAvKiE8IEVDIEotUEFLRSBrZXkgZXhjaGFuZ2UgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgIHVuc2lnbmVkIGNoYXIgKmVjanBha2VfY2FjaGU7ICAgICAgICAgICAgICAgLyohPCBDYWNoZSBmb3IgQ2xpZW50SGVsbG8gZXh0ICovCisgICAgc2l6ZV90IGVjanBha2VfY2FjaGVfbGVuOyAgICAgICAgICAgICAgICAgICAvKiE8IExlbmd0aCBvZiBjYWNoZWQgZGF0YSAqLworI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKipjdXJ2ZXM7ICAgICAgLyohPCAgU3VwcG9ydGVkIGVsbGlwdGljIGN1cnZlcyAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgdW5zaWduZWQgY2hhciAqcHNrOyAgICAgICAgICAgICAgICAgLyohPCAgUFNLIGZyb20gdGhlIGNhbGxiYWNrICAgICAgICAgKi8KKyAgICBzaXplX3QgcHNrX2xlbjsgICAgICAgICAgICAgICAgICAgICAvKiE8ICBMZW5ndGggb2YgUFNLIGZyb20gY2FsbGJhY2sgICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgbWJlZHRsc19zc2xfa2V5X2NlcnQgKmtleV9jZXJ0OyAgICAgLyohPCBjaG9zZW4ga2V5L2NlcnQgcGFpciAoc2VydmVyKSAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCisgICAgaW50IHNuaV9hdXRobW9kZTsgICAgICAgICAgICAgICAgICAgLyohPCBhdXRobW9kZSBmcm9tIFNOSSBjYWxsYmFjayAgICAgKi8KKyAgICBtYmVkdGxzX3NzbF9rZXlfY2VydCAqc25pX2tleV9jZXJ0OyAvKiE8IGtleS9jZXJ0IGxpc3QgZnJvbSBTTkkgICAgICAgICAqLworICAgIG1iZWR0bHNfeDUwOV9jcnQgKnNuaV9jYV9jaGFpbjsgICAgIC8qITwgdHJ1c3RlZCBDQXMgZnJvbSBTTkkgY2FsbGJhY2sgICovCisgICAgbWJlZHRsc194NTA5X2NybCAqc25pX2NhX2NybDsgICAgICAgLyohPCB0cnVzdGVkIENBcyBDUkxzIGZyb20gU05JICAgICAgKi8KKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICB1bnNpZ25lZCBpbnQgb3V0X21zZ19zZXE7ICAgICAgICAgICAvKiE8ICBPdXRnb2luZyBoYW5kc2hha2Ugc2VxdWVuY2UgbnVtYmVyICovCisgICAgdW5zaWduZWQgaW50IGluX21zZ19zZXE7ICAgICAgICAgICAgLyohPCAgSW5jb21pbmcgaGFuZHNoYWtlIHNlcXVlbmNlIG51bWJlciAqLworCisgICAgdW5zaWduZWQgY2hhciAqdmVyaWZ5X2Nvb2tpZTsgICAgICAgLyohPCAgQ2xpOiBIZWxsb1ZlcmlmeVJlcXVlc3QgY29va2llCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3J2OiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciB2ZXJpZnlfY29va2llX2xlbjsgICAgLyohPCAgQ2xpOiBjb29raWUgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3J2OiBmbGFnIGZvciBzZW5kaW5nIGEgY29va2llICovCisKKyAgICB1bnNpZ25lZCBjaGFyICpoc19tc2c7ICAgICAgICAgICAgICAvKiE8ICBSZWFzc2VtYmxlZCBoYW5kc2hha2UgbWVzc2FnZSAgKi8KKworICAgIHVpbnQzMl90IHJldHJhbnNtaXRfdGltZW91dDsgICAgICAgIC8qITwgIEN1cnJlbnQgdmFsdWUgb2YgdGltZW91dCAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgcmV0cmFuc21pdF9zdGF0ZTsgICAgIC8qITwgIFJldHJhbnNtaXNzaW9uIHN0YXRlICAgICAgICAgICAqLworICAgIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtICpmbGlnaHQ7ICAgICAgICAgICAgLyohPCAgQ3VycmVudCBvdXRnb2luZyBmbGlnaHQgICAgICAgICovCisgICAgbWJlZHRsc19zc2xfZmxpZ2h0X2l0ZW0gKmN1cl9tc2c7ICAgICAgICAgICAvKiE8ICBDdXJyZW50IG1lc3NhZ2UgaW4gZmxpZ2h0ICAgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgaW5fZmxpZ2h0X3N0YXJ0X3NlcTsgICAvKiE8ICBNaW5pbXVtIG1lc3NhZ2Ugc2VxdWVuY2UgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpZ2h0IGJlaW5nIHJlY2VpdmVkICAgICAgICAgICovCisgICAgbWJlZHRsc19zc2xfdHJhbnNmb3JtICphbHRfdHJhbnNmb3JtX291dDsgICAvKiE8ICBBbHRlcm5hdGl2ZSB0cmFuc2Zvcm0gZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZW5kaW5nIG1lc3NhZ2VzICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBhbHRfb3V0X2N0cls4XTsgICAgICAgLyohPCAgQWx0ZXJuYXRpdmUgcmVjb3JkIGVwb2NoL2NvdW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcmVzZW5kaW5nIG1lc3NhZ2VzICAgICAgICAgKi8KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBDaGVja3N1bSBjb250ZXh0cworICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisgICAgICAgbWJlZHRsc19tZDVfY29udGV4dCBmaW5fbWQ1OworICAgICAgbWJlZHRsc19zaGExX2NvbnRleHQgZmluX3NoYTE7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgbWJlZHRsc19zaGEyNTZfY29udGV4dCBmaW5fc2hhMjU2OworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgZmluX3NoYTUxMjsKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworCisgICAgdm9pZCAoKnVwZGF0ZV9jaGVja3N1bSkobWJlZHRsc19zc2xfY29udGV4dCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7CisgICAgdm9pZCAoKmNhbGNfdmVyaWZ5KShtYmVkdGxzX3NzbF9jb250ZXh0ICosIHVuc2lnbmVkIGNoYXIgKik7CisgICAgdm9pZCAoKmNhbGNfZmluaXNoZWQpKG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOworICAgIGludCAgKCp0bHNfcHJmKShjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOworCisgICAgc2l6ZV90IHBtc2xlbjsgICAgICAgICAgICAgICAgICAgICAgLyohPCAgcHJlbWFzdGVyIGxlbmd0aCAgICAgICAgKi8KKworICAgIHVuc2lnbmVkIGNoYXIgcmFuZGJ5dGVzWzY0XTsgICAgICAgIC8qITwgIHJhbmRvbSBieXRlcyAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBwcmVtYXN0ZXJbTUJFRFRMU19QUkVNQVNURVJfU0laRV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAgcHJlbWFzdGVyIHNlY3JldCAgICAgICAgKi8KKworICAgIGludCByZXN1bWU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgIHNlc3Npb24gcmVzdW1lIGluZGljYXRvciovCisgICAgaW50IG1heF9tYWpvcl92ZXI7ICAgICAgICAgICAgICAgICAgLyohPCBtYXguIG1ham9yIHZlcnNpb24gY2xpZW50Ki8KKyAgICBpbnQgbWF4X21pbm9yX3ZlcjsgICAgICAgICAgICAgICAgICAvKiE8IG1heC4gbWlub3IgdmVyc2lvbiBjbGllbnQqLworICAgIGludCBjbGlfZXh0czsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgY2xpZW50IGV4dGVuc2lvbiBwcmVzZW5jZSovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICBpbnQgbmV3X3Nlc3Npb25fdGlja2V0OyAgICAgICAgICAgICAvKiE8IHVzZSBOZXdTZXNzaW9uVGlja2V0PyAgICAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCkKKyAgICBpbnQgZXh0ZW5kZWRfbXM7ICAgICAgICAgICAgICAgICAgICAvKiE8IHVzZSBFeHRlbmRlZCBNYXN0ZXIgU2VjcmV0PyAqLworI2VuZGlmCit9OworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgYSBmdWxsIHNldCBvZiBydW50aW1lIHRyYW5zZm9ybSBwYXJhbWV0ZXJzCisgKiBlaXRoZXIgaW4gbmVnb3RpYXRpb24gb3IgYWN0aXZlLgorICovCitzdHJ1Y3QgbWJlZHRsc19zc2xfdHJhbnNmb3JtCit7CisgICAgLyoKKyAgICAgKiBTZXNzaW9uIHNwZWNpZmljIGNyeXB0byBsYXllcgorICAgICAqLworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAgQ2hvc2VuIGNpcGVyc3VpdGVfaW5mbyAgKi8KKyAgICB1bnNpZ25lZCBpbnQga2V5bGVuOyAgICAgICAgICAgICAgICAvKiE8ICBzeW1tZXRyaWMga2V5IGxlbmd0aCAoYnl0ZXMpICAqLworICAgIHNpemVfdCBtaW5sZW47ICAgICAgICAgICAgICAgICAgICAgIC8qITwgIG1pbi4gY2lwaGVydGV4dCBsZW5ndGggICovCisgICAgc2l6ZV90IGl2bGVuOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAgSVYgbGVuZ3RoICAgICAgICAgICAgICAgKi8KKyAgICBzaXplX3QgZml4ZWRfaXZsZW47ICAgICAgICAgICAgICAgICAvKiE8ICBGaXhlZCBwYXJ0IG9mIElWIChBRUFEKSAqLworICAgIHNpemVfdCBtYWNsZW47ICAgICAgICAgICAgICAgICAgICAgIC8qITwgIE1BQyBsZW5ndGggICAgICAgICAgICAgICovCisKKyAgICB1bnNpZ25lZCBjaGFyIGl2X2VuY1sxNl07ICAgICAgICAgICAvKiE8ICBJViAoZW5jcnlwdGlvbikgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgaXZfZGVjWzE2XTsgICAgICAgICAgIC8qITwgIElWIChkZWNyeXB0aW9uKSAgICAgICAgICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisgICAgLyogTmVlZGVkIG9ubHkgZm9yIFNTTCB2My4wIHNlY3JldCAqLworICAgIHVuc2lnbmVkIGNoYXIgbWFjX2VuY1syMF07ICAgICAgICAgIC8qITwgIFNTTCB2My4wIHNlY3JldCAoZW5jKSAgICovCisgICAgdW5zaWduZWQgY2hhciBtYWNfZGVjWzIwXTsgICAgICAgICAgLyohPCAgU1NMIHYzLjAgc2VjcmV0IChkZWMpICAgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzICovCisKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBtZF9jdHhfZW5jOyAgICAgICAgICAgIC8qITwgIE1BQyAoZW5jcnlwdGlvbikgICAgICAgICovCisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgbWRfY3R4X2RlYzsgICAgICAgICAgICAvKiE8ICBNQUMgKGRlY3J5cHRpb24pICAgICAgICAqLworCisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGNpcGhlcl9jdHhfZW5jOyAgICAvKiE8ICBlbmNyeXB0aW9uIGNvbnRleHQgICAgICAqLworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjaXBoZXJfY3R4X2RlYzsgICAgLyohPCAgZGVjcnlwdGlvbiBjb250ZXh0ICAgICAgKi8KKworICAgIC8qCisgICAgICogU2Vzc2lvbiBzcGVjaWZpYyBjb21wcmVzc2lvbiBsYXllcgorICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19aTElCX1NVUFBPUlQpCisgICAgel9zdHJlYW0gY3R4X2RlZmxhdGU7ICAgICAgICAgICAgICAgLyohPCAgY29tcHJlc3Npb24gY29udGV4dCAgICAgKi8KKyAgICB6X3N0cmVhbSBjdHhfaW5mbGF0ZTsgICAgICAgICAgICAgICAvKiE8ICBkZWNvbXByZXNzaW9uIGNvbnRleHQgICAqLworI2VuZGlmCit9OworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisvKgorICogTGlzdCBvZiBjZXJ0aWZpY2F0ZSArIHByaXZhdGUga2V5IHBhaXJzCisgKi8KK3N0cnVjdCBtYmVkdGxzX3NzbF9rZXlfY2VydAoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNlcnQ7ICAgICAgICAgICAgICAgICAvKiE8IGNlcnQgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgbWJlZHRsc19wa19jb250ZXh0ICprZXk7ICAgICAgICAgICAgICAgIC8qITwgcHJpdmF0ZSBrZXkgICAgICAgICAgICAgICAgKi8KKyAgICBtYmVkdGxzX3NzbF9rZXlfY2VydCAqbmV4dDsgICAgICAgICAgICAgLyohPCBuZXh0IGtleS9jZXJ0IHBhaXIgICAgICAgICAqLworfTsKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKy8qCisgKiBMaXN0IG9mIGhhbmRzaGFrZSBtZXNzYWdlcyBrZXB0IGFyb3VuZCBmb3IgcmVzZW5kaW5nCisgKi8KK3N0cnVjdCBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbQoreworICAgIHVuc2lnbmVkIGNoYXIgKnA7ICAgICAgIC8qITwgbWVzc2FnZSwgaW5jbHVkaW5nIGhhbmRzaGFrZSBoZWFkZXJzICAgKi8KKyAgICBzaXplX3QgbGVuOyAgICAgICAgICAgICAvKiE8IGxlbmd0aCBvZiBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciB0eXBlOyAgICAgLyohPCB0eXBlIG9mIHRoZSBtZXNzYWdlOiBoYW5kc2hha2Ugb3IgQ0NTICAqLworICAgIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtICpuZXh0OyAgLyohPCBuZXh0IGhhbmRzaGFrZSBtZXNzYWdlKHMpICAgICAgICAgICAgICAqLworfTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19EVExTICovCisKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEZyZWUgcmVmZXJlbmNlZCBpdGVtcyBpbiBhbiBTU0wgdHJhbnNmb3JtIGNvbnRleHQgYW5kIGNsZWFyCisgKiAgICAgICAgICAgICAgICAgIG1lbW9yeQorICoKKyAqIFxwYXJhbSB0cmFuc2Zvcm0gU1NMIHRyYW5zZm9ybSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfdHJhbnNmb3JtX2ZyZWUoIG1iZWR0bHNfc3NsX3RyYW5zZm9ybSAqdHJhbnNmb3JtICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIHJlZmVyZW5jZWQgaXRlbXMgaW4gYW4gU1NMIGhhbmRzaGFrZSBjb250ZXh0IGFuZCBjbGVhcgorICogICAgICAgICAgICAgICAgICBtZW1vcnkKKyAqCisgKiBccGFyYW0gaGFuZHNoYWtlIFNTTCBoYW5kc2hha2UgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9mcmVlKCBtYmVkdGxzX3NzbF9oYW5kc2hha2VfcGFyYW1zICpoYW5kc2hha2UgKTsKKworaW50IG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9jbGllbnRfc3RlcCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CitpbnQgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3NlcnZlcl9zdGVwKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKK3ZvaWQgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3dyYXB1cCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKK2ludCBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKwordm9pZCBtYmVkdGxzX3NzbF9yZXNldF9jaGVja3N1bSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CitpbnQgbWJlZHRsc19zc2xfZGVyaXZlX2tleXMoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCitpbnQgbWJlZHRsc19zc2xfcmVhZF9yZWNvcmRfbGF5ZXIoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworaW50IG1iZWR0bHNfc3NsX2hhbmRsZV9tZXNzYWdlX3R5cGUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworaW50IG1iZWR0bHNfc3NsX3ByZXBhcmVfaGFuZHNoYWtlX3JlY29yZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7Cit2b2lkIG1iZWR0bHNfc3NsX3VwZGF0ZV9oYW5kc2hha2Vfc3RhdHVzKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworaW50IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKK2ludCBtYmVkdGxzX3NzbF9mZXRjaF9pbnB1dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBzaXplX3QgbmJfd2FudCApOworCitpbnQgbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKK2ludCBtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCitpbnQgbWJlZHRsc19zc2xfcGFyc2VfY2VydGlmaWNhdGUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworaW50IG1iZWR0bHNfc3NsX3dyaXRlX2NlcnRpZmljYXRlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworaW50IG1iZWR0bHNfc3NsX3BhcnNlX2NoYW5nZV9jaXBoZXJfc3BlYyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CitpbnQgbWJlZHRsc19zc2xfd3JpdGVfY2hhbmdlX2NpcGhlcl9zcGVjKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworaW50IG1iZWR0bHNfc3NsX3BhcnNlX2ZpbmlzaGVkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKK2ludCBtYmVkdGxzX3NzbF93cml0ZV9maW5pc2hlZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKK3ZvaWQgbWJlZHRsc19zc2xfb3B0aW1pemVfY2hlY2tzdW0oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKK2ludCBtYmVkdGxzX3NzbF9wc2tfZGVyaXZlX3ByZW1hc3RlciggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBtYmVkdGxzX2tleV9leGNoYW5nZV90eXBlX3Qga2V5X2V4ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19DKQordW5zaWduZWQgY2hhciBtYmVkdGxzX3NzbF9zaWdfZnJvbV9wayggbWJlZHRsc19wa19jb250ZXh0ICpwayApOworbWJlZHRsc19wa190eXBlX3QgbWJlZHRsc19zc2xfcGtfYWxnX2Zyb21fc2lnKCB1bnNpZ25lZCBjaGFyIHNpZyApOworI2VuZGlmCisKK21iZWR0bHNfbWRfdHlwZV90IG1iZWR0bHNfc3NsX21kX2FsZ19mcm9tX2hhc2goIHVuc2lnbmVkIGNoYXIgaGFzaCApOwordW5zaWduZWQgY2hhciBtYmVkdGxzX3NzbF9oYXNoX2Zyb21fbWRfYWxnKCBpbnQgbWQgKTsKK2ludCBtYmVkdGxzX3NzbF9zZXRfY2FsY192ZXJpZnlfbWQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IG1kICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCitpbnQgbWJlZHRsc19zc2xfY2hlY2tfY3VydmUoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgbWJlZHRsc19lY3BfZ3JvdXBfaWQgZ3JwX2lkICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCkKK2ludCBtYmVkdGxzX3NzbF9jaGVja19zaWdfaGFzaCggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKK3N0YXRpYyBpbmxpbmUgbWJlZHRsc19wa19jb250ZXh0ICptYmVkdGxzX3NzbF9vd25fa2V5KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIG1iZWR0bHNfc3NsX2tleV9jZXJ0ICprZXlfY2VydDsKKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZSAhPSBOVUxMICYmIHNzbC0+aGFuZHNoYWtlLT5rZXlfY2VydCAhPSBOVUxMICkKKyAgICAgICAga2V5X2NlcnQgPSBzc2wtPmhhbmRzaGFrZS0+a2V5X2NlcnQ7CisgICAgZWxzZQorICAgICAgICBrZXlfY2VydCA9IHNzbC0+Y29uZi0+a2V5X2NlcnQ7CisKKyAgICByZXR1cm4oIGtleV9jZXJ0ID09IE5VTEwgPyBOVUxMIDoga2V5X2NlcnQtPmtleSApOworfQorCitzdGF0aWMgaW5saW5lIG1iZWR0bHNfeDUwOV9jcnQgKm1iZWR0bHNfc3NsX293bl9jZXJ0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIG1iZWR0bHNfc3NsX2tleV9jZXJ0ICprZXlfY2VydDsKKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZSAhPSBOVUxMICYmIHNzbC0+aGFuZHNoYWtlLT5rZXlfY2VydCAhPSBOVUxMICkKKyAgICAgICAga2V5X2NlcnQgPSBzc2wtPmhhbmRzaGFrZS0+a2V5X2NlcnQ7CisgICAgZWxzZQorICAgICAgICBrZXlfY2VydCA9IHNzbC0+Y29uZi0+a2V5X2NlcnQ7CisKKyAgICByZXR1cm4oIGtleV9jZXJ0ID09IE5VTEwgPyBOVUxMIDoga2V5X2NlcnQtPmNlcnQgKTsKK30KKworLyoKKyAqIENoZWNrIHVzYWdlIG9mIGEgY2VydGlmaWNhdGUgd3J0IGV4dGVuc2lvbnM6CisgKiBrZXlVc2FnZSwgZXh0ZW5kZWRLZXlVc2FnZSAobGF0ZXIpLCBhbmQgblNDZXJ0VHlwZSAobGF0ZXIpLgorICoKKyAqIFdhcm5pbmc6IGNlcnRfZW5kcG9pbnQgaXMgdGhlIGVuZHBvaW50IG9mIHRoZSBjZXJ0IChpZSwgb2Ygb3VyIHBlZXIgd2hlbiB3ZQorICogY2hlY2sgYSBjZXJ0IHdlIHJlY2VpdmVkIGZyb20gdGhlbSkhCisgKgorICogUmV0dXJuIDAgaWYgZXZlcnl0aGluZyBpcyBPSywgLTEgaWYgbm90LgorICovCitpbnQgbWJlZHRsc19zc2xfY2hlY2tfY2VydF91c2FnZSggY29uc3QgbWJlZHRsc194NTA5X2NydCAqY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjZXJ0X2VuZHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqZmxhZ3MgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKwordm9pZCBtYmVkdGxzX3NzbF93cml0ZV92ZXJzaW9uKCBpbnQgbWFqb3IsIGludCBtaW5vciwgaW50IHRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdmVyWzJdICk7Cit2b2lkIG1iZWR0bHNfc3NsX3JlYWRfdmVyc2lvbiggaW50ICptYWpvciwgaW50ICptaW5vciwgaW50IHRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciB2ZXJbMl0gKTsKKworc3RhdGljIGlubGluZSBzaXplX3QgbWJlZHRsc19zc2xfaGRyX2xlbiggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgIHJldHVybiggMTMgKTsKKyNlbHNlCisgICAgKCh2b2lkKSBzc2wpOworI2VuZGlmCisgICAgcmV0dXJuKCA1ICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICByZXR1cm4oIDEyICk7CisjZWxzZQorICAgICgodm9pZCkgc3NsKTsKKyNlbmRpZgorICAgIHJldHVybiggNCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQordm9pZCBtYmVkdGxzX3NzbF9zZW5kX2ZsaWdodF9jb21wbGV0ZWQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOwordm9pZCBtYmVkdGxzX3NzbF9yZWN2X2ZsaWdodF9jb21wbGV0ZWQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworaW50IG1iZWR0bHNfc3NsX3Jlc2VuZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisjZW5kaWYKKworLyogVmlzaWJsZSBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5ICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQoraW50IG1iZWR0bHNfc3NsX2R0bHNfcmVwbGF5X2NoZWNrKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKK3ZvaWQgbWJlZHRsc19zc2xfZHRsc19yZXBsYXlfdXBkYXRlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKyNlbmRpZgorCisvKiBjb25zdGFudC10aW1lIGJ1ZmZlciBjb21wYXJpc29uICovCitzdGF0aWMgaW5saW5lIGludCBtYmVkdGxzX3NzbF9zYWZlcl9tZW1jbXAoIGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHNpemVfdCBuICkKK3sKKyAgICBzaXplX3QgaTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpBID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpCID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYjsKKyAgICB1bnNpZ25lZCBjaGFyIGRpZmYgPSAwOworCisgICAgZm9yKCBpID0gMDsgaSA8IG47IGkrKyApCisgICAgICAgIGRpZmYgfD0gQVtpXSBeIEJbaV07CisKKyAgICByZXR1cm4oIGRpZmYgKTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHNzbF9pbnRlcm5hbC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbF90aWNrZXQuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsX3RpY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNmJjNjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbF90aWNrZXQuaApAQCAtMCwwICsxLDEzNSBAQAorLyoqCisgKiBcZmlsZSBzc2xfdGlja2V0LmgKKyAqCisgKiBcYnJpZWYgVExTIHNlcnZlciB0aWNrZXQgY2FsbGJhY2tzIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfU1NMX1RJQ0tFVF9ICisjZGVmaW5lIE1CRURUTFNfU1NMX1RJQ0tFVF9ICisKKy8qCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzZXNzaW9uIHRpY2tldCBjYWxsYmFja3MgaW5jbHVkZXMga2V5CisgKiBtYW5hZ2VtZW50LCByb3RhdGluZyB0aGUga2V5cyBwZXJpb2RpY2FsbHkgaW4gb3JkZXIgdG8gcHJlc2VydmUgZm9yd2FyZAorICogc2VjcmVjeSwgd2hlbiBNQkVEVExTX0hBVkVfVElNRSBpcyBkZWZpbmVkLgorICovCisKKyNpbmNsdWRlICJzc2wuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyNpbmNsdWRlICJ0aHJlYWRpbmcuaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgSW5mb3JtYXRpb24gZm9yIHNlc3Npb24gdGlja2V0IHByb3RlY3Rpb24KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG5hbWVbNF07ICAgICAgICAgIC8qITwgcmFuZG9tIGtleSBpZGVudGlmaWVyICAgICAgICAgICAgICAqLworICAgIHVpbnQzMl90IGdlbmVyYXRpb25fdGltZTsgICAgICAgLyohPCBrZXkgZ2VuZXJhdGlvbiB0aW1lc3RhbXAgKHNlY29uZHMpICovCisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eDsgICAvKiE8IGNvbnRleHQgZm9yIGF1dGggZW5jL2RlY3J5cHRpb24gICAgKi8KK30KK21iZWR0bHNfc3NsX3RpY2tldF9rZXk7CisKKy8qKgorICogXGJyaWVmICAgQ29udGV4dCBmb3Igc2Vzc2lvbiB0aWNrZXQgaGFuZGxpbmcgZnVuY3Rpb25zCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbWJlZHRsc19zc2xfdGlja2V0X2tleSBrZXlzWzJdOyAvKiE8IHRpY2tldCBwcm90ZWN0aW9uIGtleXMgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGFjdGl2ZTsgICAgICAgICAgIC8qITwgaW5kZXggb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUga2V5ICAqLworCisgICAgdWludDMyX3QgdGlja2V0X2xpZmV0aW1lOyAgICAgICAvKiE8IGxpZmV0aW1lIG9mIHRpY2tldHMgaW4gc2Vjb25kcyAgICAgKi8KKworICAgIC8qKiBDYWxsYmFjayBmb3IgZ2V0dGluZyAocHNldWRvLSlyYW5kb20gbnVtYmVycyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50ICAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KTsKKyAgICB2b2lkICpwX3JuZzsgICAgICAgICAgICAgICAgICAgIC8qITwgY29udGV4dCBmb3IgdGhlIFJORyBmdW5jdGlvbiAgICAgICAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgbXV0ZXg7CisjZW5kaWYKK30KK21iZWR0bHNfc3NsX3RpY2tldF9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBhIHRpY2tldCBjb250ZXh0LgorICogICAgICAgICAgICAgICAgICAoSnVzdCBtYWtlIGl0IHJlYWR5IGZvciBtYmVkdGxzX3NzbF90aWNrZXRfc2V0dXAoKQorICogICAgICAgICAgICAgICAgICBvciBtYmVkdGxzX3NzbF90aWNrZXRfZnJlZSgpLikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF90aWNrZXRfaW5pdCggbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUHJlcGFyZSBjb250ZXh0IHRvIGJlIGFjdHVhbGx5IHVzZWQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gYmUgc2V0IHVwCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBjYWxsYmFjayBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgY2FsbGJhY2sgY29udGV4dAorICogXHBhcmFtIGNpcGhlciAgICBBRUFEIGNpcGhlciB0byB1c2UgZm9yIHRpY2tldCBwcm90ZWN0aW9uLgorICogICAgICAgICAgICAgICAgICBSZWNvbW1lbmRlZCB2YWx1ZTogTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ00uCisgKiBccGFyYW0gbGlmZXRpbWUgIFRpY2tldHMgbGlmZXRpbWUgaW4gc2Vjb25kcworICogICAgICAgICAgICAgICAgICBSZWNvbW1lbmRlZCB2YWx1ZTogODY0MDAgKG9uZSBkYXkpLgorICoKKyAqIFxub3RlICAgICAgICAgICAgSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHNlbGVjdCBhIGNpcGhlciB0aGF0IGlzIGF0CisgKiAgICAgICAgICAgICAgICAgIGxlYXN0IGFzIHN0cm9uZyBhcyB0aGUgdGhlIHN0cm9uZ2VzdCBjaXBoZXJzdWl0ZQorICogICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQuIFVzdWFsbHkgdGhhdCBtZWFucyBhIDI1Ni1iaXQga2V5LgorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhlIGxpZmV0aW1lIG9mIHRoZSBrZXlzIGlzIHR3aWNlIHRoZSBsaWZldGltZSBvZiB0aWNrZXRzLgorICogICAgICAgICAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0byBwaWNrIGEgcmVhc29ubmFibGUgbGlmZXRpbWUgc28gYXMgbm90CisgKiAgICAgICAgICAgICAgICAgIHRvIG5lZ2F0ZSB0aGUgYmVuZWZpdHMgb2YgZm9yd2FyZCBzZWNyZWN5LgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBvciBhIHNwZWNpZmljIE1CRURUTFNfRVJSX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3NzbF90aWNrZXRfc2V0dXAoIG1iZWR0bHNfc3NsX3RpY2tldF9jb250ZXh0ICpjdHgsCisgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZywKKyAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgY2lwaGVyLAorICAgIHVpbnQzMl90IGxpZmV0aW1lICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgdGlja2V0IHdyaXRlIGNhbGxiYWNrCisgKgorICogXG5vdGUgICAgICAgICAgICBTZWUgXGMgbWJlZGx0c19zc2xfdGlja2V0X3dyaXRlX3QgZm9yIGRlc2NyaXB0aW9uCisgKi8KK21iZWR0bHNfc3NsX3RpY2tldF93cml0ZV90IG1iZWR0bHNfc3NsX3RpY2tldF93cml0ZTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHRoZSB0aWNrZXQgcGFyc2UgY2FsbGJhY2sKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFNlZSBcYyBtYmVkbHRzX3NzbF90aWNrZXRfcGFyc2VfdCBmb3IgZGVzY3JpcHRpb24KKyAqLworbWJlZHRsc19zc2xfdGlja2V0X3BhcnNlX3QgbWJlZHRsc19zc2xfdGlja2V0X3BhcnNlOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRnJlZSBhIGNvbnRleHQncyBjb250ZW50IGFuZCB6ZXJvaXplIGl0LgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBiZSBjbGVhbmVkIHVwCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfdGlja2V0X2ZyZWUoIG1iZWR0bHNfc3NsX3RpY2tldF9jb250ZXh0ICpjdHggKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHNzbF90aWNrZXQuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy90aHJlYWRpbmcuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvdGhyZWFkaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjMzRlYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvdGhyZWFkaW5nLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qKgorICogXGZpbGUgdGhyZWFkaW5nLmgKKyAqCisgKiBcYnJpZWYgVGhyZWFkaW5nIGFic3RyYWN0aW9uIGxheWVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfVEhSRUFESU5HX0gKKyNkZWZpbmUgTUJFRFRMU19USFJFQURJTkdfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgTUJFRFRMU19FUlJfVEhSRUFESU5HX0ZFQVRVUkVfVU5BVkFJTEFCTEUgICAgICAgICAtMHgwMDFBICAvKio8IFRoZSBzZWxlY3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1RIUkVBRElOR19CQURfSU5QVVRfREFUQSAgICAgICAgICAgICAgLTB4MDAxQyAgLyoqPCBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SICAgICAgICAgICAgICAgICAtMHgwMDFFICAvKio8IExvY2tpbmcgLyB1bmxvY2tpbmcgLyBmcmVlIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUuICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQpCisjaW5jbHVkZSA8cHRocmVhZC5oPgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7CisgICAgY2hhciBpc192YWxpZDsKK30gbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19BTFQpCisvKiBZb3Ugc2hvdWxkIGRlZmluZSB0aGUgbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCB0eXBlIGluIHlvdXIgaGVhZGVyICovCisjaW5jbHVkZSAidGhyZWFkaW5nX2FsdC5oIgorCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHlvdXIgYWx0ZXJuYXRlIHRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbgorICogICAgICAgICAgICAgICAgICBwb2ludGVycyBhbmQgaW5pdGlhbGl6ZSBnbG9iYWwgbXV0ZXhlcy4gSWYgdXNlZCwgdGhpcworICogICAgICAgICAgICAgICAgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBvbmNlIGluIHRoZSBtYWluIHRocmVhZCBiZWZvcmUgYW55CisgKiAgICAgICAgICAgICAgICAgIG90aGVyIG1iZWQgVExTIGZ1bmN0aW9uIGlzIGNhbGxlZCwgYW5kCisgKiAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGhyZWFkaW5nX2ZyZWVfYWx0KCkgbXVzdCBiZSBjYWxsZWQgb25jZSBpbiB0aGUgbWFpbgorICogICAgICAgICAgICAgICAgICB0aHJlYWQgYWZ0ZXIgYWxsIG90aGVyIG1iZWQgVExTIGZ1bmN0aW9ucy4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIG11dGV4X2luaXQoKSBhbmQgbXV0ZXhfZnJlZSgpIGRvbid0IHJldHVybiBhIHN0YXR1cyBjb2RlLgorICogICAgICAgICAgICAgICAgICBJZiBtdXRleF9pbml0KCkgZmFpbHMsIGl0IHNob3VsZCBsZWF2ZSBpdHMgYXJndW1lbnQgKHRoZQorICogICAgICAgICAgICAgICAgICBtdXRleCkgaW4gYSBzdGF0ZSBzdWNoIHRoYXQgbXV0ZXhfbG9jaygpIHdpbGwgZmFpbCB3aGVuCisgKiAgICAgICAgICAgICAgICAgIGNhbGxlZCB3aXRoIHRoaXMgYXJndW1lbnQuCisgKgorICogXHBhcmFtIG11dGV4X2luaXQgICAgdGhlIGluaXQgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24KKyAqIFxwYXJhbSBtdXRleF9mcmVlICAgIHRoZSBmcmVlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCisgKiBccGFyYW0gbXV0ZXhfbG9jayAgICB0aGUgbG9jayBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgorICogXHBhcmFtIG11dGV4X3VubG9jayAgdGhlIHVubG9jayBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgorICovCit2b2lkIG1iZWR0bHNfdGhyZWFkaW5nX3NldF9hbHQoIHZvaWQgKCptdXRleF9pbml0KSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqICksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCptdXRleF9mcmVlKSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqICksCisgICAgICAgICAgICAgICAgICAgICAgIGludCAoKm11dGV4X2xvY2spKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqbXV0ZXhfdW5sb2NrKSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqICkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBGcmVlIGdsb2JhbCBtdXRleGVzLgorICovCit2b2lkIG1iZWR0bHNfdGhyZWFkaW5nX2ZyZWVfYWx0KCB2b2lkICk7CisjZW5kaWYgLyogTUJFRFRMU19USFJFQURJTkdfQUxUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisvKgorICogVGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBtdXRleF9pbml0LCBtdXRleF9mcmVlLCBtdXRleF8gYW5kIG11dGV4X3VubG9jaworICoKKyAqIEFsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIHdvcmsgb3IgdGhlIHJlc3VsdCB3aWxsIGJlIHVuZGVmaW5lZC4KKyAqLworZXh0ZXJuIHZvaWQgKCptYmVkdGxzX211dGV4X2luaXQpKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICptdXRleCApOworZXh0ZXJuIHZvaWQgKCptYmVkdGxzX211dGV4X2ZyZWUpKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICptdXRleCApOworZXh0ZXJuIGludCAoKm1iZWR0bHNfbXV0ZXhfbG9jaykoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKm11dGV4ICk7CitleHRlcm4gaW50ICgqbWJlZHRsc19tdXRleF91bmxvY2spKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICptdXRleCApOworCisvKgorICogR2xvYmFsIG11dGV4ZXMKKyAqLworZXh0ZXJuIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgbWJlZHRsc190aHJlYWRpbmdfcmVhZGRpcl9tdXRleDsKK2V4dGVybiBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90IG1iZWR0bHNfdGhyZWFkaW5nX2dtdGltZV9tdXRleDsKKyNlbmRpZiAvKiBNQkVEVExTX1RIUkVBRElOR19DICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiB0aHJlYWRpbmcuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy90aW1pbmcuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvdGltaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3YTcxMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvdGltaW5nLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qKgorICogXGZpbGUgdGltaW5nLmgKKyAqCisgKiBcYnJpZWYgUG9ydGFibGUgaW50ZXJmYWNlIHRvIHRoZSBDUFUgY3ljbGUgY291bnRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1RJTUlOR19ICisjZGVmaW5lIE1CRURUTFNfVElNSU5HX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1RJTUlOR19BTFQpCisvLyBSZWd1bGFyIGltcGxlbWVudGF0aW9uCisvLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgdGltZXIgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBtYmVkdGxzX3RpbWluZ19ocl90aW1lCit7CisgICAgdW5zaWduZWQgY2hhciBvcGFxdWVbMzJdOworfTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ29udGV4dCBmb3IgbWJlZHRsc190aW1pbmdfc2V0L2dldF9kZWxheSgpCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgc3RydWN0IG1iZWR0bHNfdGltaW5nX2hyX3RpbWUgICB0aW1lcjsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgIGludF9tczsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgIGZpbl9tczsKK30gbWJlZHRsc190aW1pbmdfZGVsYXlfY29udGV4dDsKKworZXh0ZXJuIHZvbGF0aWxlIGludCBtYmVkdGxzX3RpbWluZ19hbGFybWVkOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm4gdGhlIENQVSBjeWNsZSBjb3VudGVyIHZhbHVlCisgKgorICogXHdhcm5pbmcgICAgICAgIFRoaXMgaXMgb25seSBhIGJlc3QgZWZmb3J0ISBEbyBub3QgcmVseSBvbiB0aGlzIQorICogICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIGl0IGlzIGtub3duIHRvIGJlIHVucmVsaWFibGUgb24gdmlydHVhbAorICogICAgICAgICAgICAgICAgIG1hY2hpbmVzLgorICovCit1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm4gdGhlIGVsYXBzZWQgdGltZSBpbiBtaWxsaXNlY29uZHMKKyAqCisgKiBccGFyYW0gdmFsICAgICAgcG9pbnRzIHRvIGEgdGltZXIgc3RydWN0dXJlCisgKiBccGFyYW0gcmVzZXQgICAgaWYgc2V0IHRvIDEsIHRoZSB0aW1lciBpcyByZXN0YXJ0ZWQKKyAqLwordW5zaWduZWQgbG9uZyBtYmVkdGxzX3RpbWluZ19nZXRfdGltZXIoIHN0cnVjdCBtYmVkdGxzX3RpbWluZ19ocl90aW1lICp2YWwsIGludCByZXNldCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXR1cCBhbiBhbGFybSBjbG9jaworICoKKyAqIFxwYXJhbSBzZWNvbmRzICBkZWxheSBiZWZvcmUgdGhlICJtYmVkdGxzX3RpbWluZ19hbGFybWVkIiBmbGFnIGlzIHNldAorICoKKyAqIFx3YXJuaW5nICAgICAgICBPbmx5IG9uZSBhbGFybSBhdCBhIHRpbWUgIGlzIHN1cHBvcnRlZC4gSW4gYSB0aHJlYWRlZAorICogICAgICAgICAgICAgICAgIGNvbnRleHQsIHRoaXMgbWVhbnMgb25lIGZvciB0aGUgd2hvbGUgcHJvY2Vzcywgbm90IG9uZSBwZXIKKyAqICAgICAgICAgICAgICAgICB0aHJlYWQuCisgKi8KK3ZvaWQgbWJlZHRsc19zZXRfYWxhcm0oIGludCBzZWNvbmRzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCBhIHBhaXIgb2YgZGVsYXlzIHRvIHdhdGNoCisgKiAgICAgICAgICAgICAgICAgKFNlZSBcYyBtYmVkdGxzX3RpbWluZ19nZXRfZGVsYXkoKS4pCisgKgorICogXHBhcmFtIGRhdGEgICAgIFBvaW50ZXIgdG8gdGltaW5nIGRhdGEKKyAqICAgICAgICAgICAgICAgICBNdXN0IHBvaW50IHRvIGEgdmFsaWQgXGMgbWJlZHRsc190aW1pbmdfZGVsYXlfY29udGV4dCBzdHJ1Y3QuCisgKiBccGFyYW0gaW50X21zICAgRmlyc3QgKGludGVybWVkaWF0ZSkgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLgorICogXHBhcmFtIGZpbl9tcyAgIFNlY29uZCAoZmluYWwpIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4KKyAqICAgICAgICAgICAgICAgICBQYXNzIDAgdG8gY2FuY2VsIHRoZSBjdXJyZW50IGRlbGF5LgorICovCit2b2lkIG1iZWR0bHNfdGltaW5nX3NldF9kZWxheSggdm9pZCAqZGF0YSwgdWludDMyX3QgaW50X21zLCB1aW50MzJfdCBmaW5fbXMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgR2V0IHRoZSBzdGF0dXMgb2YgZGVsYXlzCisgKiAgICAgICAgICAgICAgICAgKE1lbW9yeSBoZWxwZXI6IG51bWJlciBvZiBkZWxheXMgcGFzc2VkLikKKyAqCisgKiBccGFyYW0gZGF0YSAgICAgUG9pbnRlciB0byB0aW1pbmcgZGF0YQorICogICAgICAgICAgICAgICAgIE11c3QgcG9pbnQgdG8gYSB2YWxpZCBcYyBtYmVkdGxzX3RpbWluZ19kZWxheV9jb250ZXh0IHN0cnVjdC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgLTEgaWYgY2FuY2VsbGVkIChmaW5fbXMgPSAwKQorICogICAgICAgICAgICAgICAgICAwIGlmIG5vbmUgb2YgdGhlIGRlbGF5cyBhcmUgcGFzc2VkLAorICogICAgICAgICAgICAgICAgICAxIGlmIG9ubHkgdGhlIGludGVybWVkaWF0ZSBkZWxheSBpcyBwYXNzZWQsCisgKiAgICAgICAgICAgICAgICAgIDIgaWYgdGhlIGZpbmFsIGRlbGF5IGlzIHBhc3NlZC4KKyAqLworaW50IG1iZWR0bHNfdGltaW5nX2dldF9kZWxheSggdm9pZCAqZGF0YSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZWxzZSAgLyogTUJFRFRMU19USU1JTkdfQUxUICovCisjaW5jbHVkZSAidGltaW5nX2FsdC5oIgorI2VuZGlmIC8qIE1CRURUTFNfVElNSU5HX0FMVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiBhIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX3RpbWluZ19zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHRpbWluZy5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3ZlcnNpb24uaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzAzNDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3ZlcnNpb24uaApAQCAtMCwwICsxLDExMSBAQAorLyoqCisgKiBcZmlsZSB2ZXJzaW9uLmgKKyAqCisgKiBcYnJpZWYgUnVuLXRpbWUgdmVyc2lvbiBpbmZvcm1hdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqIFRoaXMgc2V0IG9mIGNvbXBpbGUtdGltZSBkZWZpbmVzIGFuZCBydW4tdGltZSB2YXJpYWJsZXMgY2FuIGJlIHVzZWQgdG8KKyAqIGRldGVybWluZSB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIG1iZWQgVExTIGxpYnJhcnkgdXNlZC4KKyAqLworI2lmbmRlZiBNQkVEVExTX1ZFUlNJT05fSAorI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworLyoqCisgKiBUaGUgdmVyc2lvbiBudW1iZXIgeC55LnogaXMgc3BsaXQgaW50byB0aHJlZSBwYXJ0cy4KKyAqIE1ham9yLCBNaW5vciwgUGF0Y2hsZXZlbAorICovCisjZGVmaW5lIE1CRURUTFNfVkVSU0lPTl9NQUpPUiAgMgorI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fTUlOT1IgIDQKKyNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX1BBVENIICAxCisKKy8qKgorICogVGhlIHNpbmdsZSB2ZXJzaW9uIG51bWJlciBoYXMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisgKiAgICBNTU5OUFAwMAorICogICAgTWFqb3IgdmVyc2lvbiB8IE1pbm9yIHZlcnNpb24gfCBQYXRjaCB2ZXJzaW9uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX05VTUJFUiAgICAgICAgIDB4MDIwNDAxMDAKKyNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX1NUUklORyAgICAgICAgICIyLjQuMSIKKyNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX1NUUklOR19GVUxMICAgICJtYmVkIFRMUyAyLjQuMSIKKworI2lmIGRlZmluZWQoTUJFRFRMU19WRVJTSU9OX0MpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBHZXQgdGhlIHZlcnNpb24gbnVtYmVyLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgVGhlIGNvbnN0cnVjdGVkIHZlcnNpb24gbnVtYmVyIGluIHRoZSBmb3JtYXQKKyAqICAgICAgICAgICAgICAgICAgTU1OTlBQMDAgKE1ham9yLCBNaW5vciwgUGF0Y2gpLgorICovCit1bnNpZ25lZCBpbnQgbWJlZHRsc192ZXJzaW9uX2dldF9udW1iZXIoIHZvaWQgKTsKKworLyoqCisgKiBHZXQgdGhlIHZlcnNpb24gc3RyaW5nICgieC55LnoiKS4KKyAqCisgKiBccGFyYW0gc3RyaW5nICAgIFRoZSBzdHJpbmcgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIHZhbHVlLgorICogICAgICAgICAgICAgICAgICAoU2hvdWxkIGJlIGF0IGxlYXN0IDkgYnl0ZXMgaW4gc2l6ZSkKKyAqLwordm9pZCBtYmVkdGxzX3ZlcnNpb25fZ2V0X3N0cmluZyggY2hhciAqc3RyaW5nICk7CisKKy8qKgorICogR2V0IHRoZSBmdWxsIHZlcnNpb24gc3RyaW5nICgibWJlZCBUTFMgeC55LnoiKS4KKyAqCisgKiBccGFyYW0gc3RyaW5nICAgIFRoZSBzdHJpbmcgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIHZhbHVlLiBUaGUgbWJlZCBUTFMgdmVyc2lvbgorICogICAgICAgICAgICAgICAgICBzdHJpbmcgd2lsbCB1c2UgMTggYnl0ZXMgQVQgTU9TVCBpbmNsdWRpbmcgYSB0ZXJtaW5hdGluZworICogICAgICAgICAgICAgICAgICBudWxsIGJ5dGUuCisgKiAgICAgICAgICAgICAgICAgIChTbyB0aGUgYnVmZmVyIHNob3VsZCBiZSBhdCBsZWFzdCAxOCBieXRlcyB0byByZWNlaXZlIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgdmVyc2lvbiBzdHJpbmcpLgorICovCit2b2lkIG1iZWR0bHNfdmVyc2lvbl9nZXRfc3RyaW5nX2Z1bGwoIGNoYXIgKnN0cmluZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ2hlY2sgaWYgc3VwcG9ydCBmb3IgYSBmZWF0dXJlIHdhcyBjb21waWxlZCBpbnRvIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgbWJlZCBUTFMgYmluYXJ5LiBUaGlzIGFsbG93cyB5b3UgdG8gc2VlIGF0IHJ1bnRpbWUgaWYgdGhlCisgKiAgICAgICAgICAgICAgICAgIGxpYnJhcnkgd2FzIGZvciBpbnN0YW5jZSBjb21waWxlZCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgICAgICAgICAgICAgICAgTXVsdGktdGhyZWFkaW5nIHN1cHBvcnQuCisgKgorICogXG5vdGUgICAgICAgICAgICBvbmx5IGNoZWNrcyBhZ2FpbnN0IGRlZmluZXMgaW4gdGhlIHNlY3Rpb25zICJTeXN0ZW0KKyAqICAgICAgICAgICAgICAgICAgc3VwcG9ydCIsICJtYmVkIFRMUyBtb2R1bGVzIiBhbmQgIm1iZWQgVExTIGZlYXR1cmUKKyAqICAgICAgICAgICAgICAgICAgc3VwcG9ydCIgaW4gY29uZmlnLmgKKyAqCisgKiBccGFyYW0gZmVhdHVyZSAgIFRoZSBzdHJpbmcgZm9yIHRoZSBkZWZpbmUgdG8gY2hlY2sgKGUuZy4gIk1CRURUTFNfQUVTX0MiKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiB0aGUgZmVhdHVyZSBpcyBwcmVzZW50LAorICogICAgICAgICAgICAgICAgICAtMSBpZiB0aGUgZmVhdHVyZSBpcyBub3QgcHJlc2VudCBhbmQKKyAqICAgICAgICAgICAgICAgICAgLTIgaWYgc3VwcG9ydCBmb3IgZmVhdHVyZSBjaGVja2luZyBhcyBhIHdob2xlIHdhcyBub3QKKyAqICAgICAgICAgICAgICAgICAgY29tcGlsZWQgaW4uCisgKi8KK2ludCBtYmVkdGxzX3ZlcnNpb25fY2hlY2tfZmVhdHVyZSggY29uc3QgY2hhciAqZmVhdHVyZSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19WRVJTSU9OX0MgKi8KKworI2VuZGlmIC8qIHZlcnNpb24uaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy94NTA5LmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3g1MDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGRhYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy94NTA5LmgKQEAgLTAsMCArMSwzMzEgQEAKKy8qKgorICogXGZpbGUgeDUwOS5oCisgKgorICogXGJyaWVmIFguNTA5IGdlbmVyaWMgZGVmaW5lcyBhbmQgc3RydWN0dXJlcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1g1MDlfSAorI2RlZmluZSBNQkVEVExTX1g1MDlfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgImFzbjEuaCIKKyNpbmNsdWRlICJway5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorI2luY2x1ZGUgInJzYS5oIgorI2VuZGlmCisKKy8qKgorICogXGFkZHRvZ3JvdXAgeDUwOV9tb2R1bGUKKyAqIFx7CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfWDUwOV9NQVhfSU5URVJNRURJQVRFX0NBKQorLyoqCisgKiBNYXhpbXVtIG51bWJlciBvZiBpbnRlcm1lZGlhdGUgQ0FzIGluIGEgdmVyaWZpY2F0aW9uIGNoYWluLgorICogVGhhdCBpcywgbWF4aW11bSBsZW5ndGggb2YgdGhlIGNoYWluLCBleGNsdWRpbmcgdGhlIGVuZC1lbnRpdHkgY2VydGlmaWNhdGUKKyAqIGFuZCB0aGUgdHJ1c3RlZCByb290IGNlcnRpZmljYXRlLgorICoKKyAqIFNldCB0aGlzIHRvIGEgbG93IHZhbHVlIHRvIHByZXZlbnQgYW4gYWR2ZXJzYXJ5IGZyb20gbWFraW5nIHlvdSB3YXN0ZQorICogcmVzb3VyY2VzIHZlcmlmeWluZyBhbiBvdmVybG9uZyBjZXJ0aWZpY2F0ZSBjaGFpbi4KKyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQSAgIDgKKyNlbmRpZgorCisvKioKKyAqIFxuYW1lIFg1MDkgRXJyb3IgY29kZXMKKyAqIFx7CisgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9GRUFUVVJFX1VOQVZBSUxBQkxFICAgICAgICAgICAgICAtMHgyMDgwICAvKio8IFVuYXZhaWxhYmxlIGZlYXR1cmUsIGUuZy4gUlNBIGhhc2hpbmcvZW5jcnlwdGlvbiBjb21iaW5hdGlvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX09JRCAgICAgICAgICAgICAgICAgICAgICAtMHgyMTAwICAvKio8IFJlcXVlc3RlZCBPSUQgaXMgdW5rbm93bi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAtMHgyMTgwICAvKio8IFRoZSBDUlQvQ1JML0NTUiBmb3JtYXQgaXMgaW52YWxpZCwgZS5nLiBkaWZmZXJlbnQgdHlwZSBleHBlY3RlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04gICAgICAgICAgICAgICAgICAtMHgyMjAwICAvKio8IFRoZSBDUlQvQ1JML0NTUiB2ZXJzaW9uIGVsZW1lbnQgaXMgaW52YWxpZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NFUklBTCAgICAgICAgICAgICAgICAgICAtMHgyMjgwICAvKio8IFRoZSBzZXJpYWwgdGFnIG9yIHZhbHVlIGlzIGludmFsaWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgICAgICAgICAgICAgICAgICAgICAgLTB4MjMwMCAgLyoqPCBUaGUgYWxnb3JpdGhtIHRhZyBvciB2YWx1ZSBpcyBpbnZhbGlkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSAgICAgICAgICAgICAgICAgICAgIC0weDIzODAgIC8qKjwgVGhlIG5hbWUgdGFnIG9yIHZhbHVlIGlzIGludmFsaWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFICAgICAgICAgICAgICAgICAgICAgLTB4MjQwMCAgLyoqPCBUaGUgZGF0ZSB0YWcgb3IgdmFsdWUgaXMgaW52YWxpZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NJR05BVFVSRSAgICAgICAgICAgICAgICAtMHgyNDgwICAvKio8IFRoZSBzaWduYXR1cmUgdGFnIG9yIHZhbHVlIGludmFsaWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICAgICAgICAgICAgICAgLTB4MjUwMCAgLyoqPCBUaGUgZXh0ZW5zaW9uIHRhZyBvciB2YWx1ZSBpcyBpbnZhbGlkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fVkVSU0lPTiAgICAgICAgICAgICAgICAgIC0weDI1ODAgIC8qKjwgQ1JUL0NSTC9DU1IgaGFzIGFuIHVuc3VwcG9ydGVkIHZlcnNpb24gbnVtYmVyLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRyAgICAgICAgICAgICAgICAgIC0weDI2MDAgIC8qKjwgU2lnbmF0dXJlIGFsZ29yaXRobSAob2lkKSBpcyB1bnN1cHBvcnRlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9TSUdfTUlTTUFUQ0ggICAgICAgICAgICAgICAgICAgICAtMHgyNjgwICAvKio8IFNpZ25hdHVyZSBhbGdvcml0aG1zIGRvIG5vdCBtYXRjaC4gKHNlZSBcYyA6Om1iZWR0bHNfeDUwOV9jcnQgc2lnX29pZCkgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQgICAgICAgICAgICAgICAtMHgyNzAwICAvKio8IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsZWQsIGUuZy4gQ1JMLCBDQSBvciBzaWduYXR1cmUgY2hlY2sgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X0NFUlRfVU5LTk9XTl9GT1JNQVQgICAgICAgICAgICAgIC0weDI3ODAgIC8qKjwgRm9ybWF0IG5vdCByZWNvZ25pemVkIGFzIERFUiBvciBQRU0uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgICAgICAgICAgICAgICAgICAgLTB4MjgwMCAgLyoqPCBJbnB1dCBpbnZhbGlkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgIC0weDI4ODAgIC8qKjwgQWxsb2NhdGlvbiBvZiBtZW1vcnkgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X0ZJTEVfSU9fRVJST1IgICAgICAgICAgICAgICAgICAgIC0weDI5MDAgIC8qKjwgUmVhZC93cml0ZSBvZiBmaWxlIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9CVUZGRVJfVE9PX1NNQUxMICAgICAgICAgICAgICAgICAtMHgyOTgwICAvKio8IERlc3RpbmF0aW9uIGJ1ZmZlciBpcyB0b28gc21hbGwuICovCisvKiBcfSBuYW1lICovCisKKy8qKgorICogXG5hbWUgWDUwOSBWZXJpZnkgY29kZXMKKyAqIFx7CisgKi8KKy8qIFJlbWluZGVyOiB1cGRhdGUgeDUwOV9jcnRfdmVyaWZ5X3N0cmluZ3NbXSBpbiBsaWJyYXJ5L3g1MDlfY3J0LmMgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfRVhQSVJFRCAgICAgICAgICAgICAweDAxICAvKio8IFRoZSBjZXJ0aWZpY2F0ZSB2YWxpZGl0eSBoYXMgZXhwaXJlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRCAgICAgICAgICAgICAweDAyICAvKio8IFRoZSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiByZXZva2VkIChpcyBvbiBhIENSTCkuICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9CQURDRVJUX0NOX01JU01BVENIICAgICAgICAgMHgwNCAgLyoqPCBUaGUgY2VydGlmaWNhdGUgQ29tbW9uIE5hbWUgKENOKSBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBleHBlY3RlZCBDTi4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQgICAgICAgICAweDA4ICAvKio8IFRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgY29ycmVjdGx5IHNpZ25lZCBieSB0aGUgdHJ1c3RlZCBDQS4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENSTF9OT1RfVFJVU1RFRCAgICAgICAgICAweDEwICAvKio8IFRoZSBDUkwgaXMgbm90IGNvcnJlY3RseSBzaWduZWQgYnkgdGhlIHRydXN0ZWQgQ0EuICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9CQURDUkxfRVhQSVJFRCAgICAgICAgICAgICAgMHgyMCAgLyoqPCBUaGUgQ1JMIGlzIGV4cGlyZWQuICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9CQURDRVJUX01JU1NJTkcgICAgICAgICAgICAgMHg0MCAgLyoqPCBDZXJ0aWZpY2F0ZSB3YXMgbWlzc2luZy4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfU0tJUF9WRVJJRlkgICAgICAgICAweDgwICAvKio8IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiB3YXMgc2tpcHBlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfT1RIRVIgICAgICAgICAgICAgMHgwMTAwICAvKio8IE90aGVyIHJlYXNvbiAoY2FuIGJlIHVzZWQgYnkgdmVyaWZ5IGNhbGxiYWNrKSAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9GVVRVUkUgICAgICAgICAgICAweDAyMDAgIC8qKjwgVGhlIGNlcnRpZmljYXRlIHZhbGlkaXR5IHN0YXJ0cyBpbiB0aGUgZnV0dXJlLiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ1JMX0ZVVFVSRSAgICAgICAgICAgICAweDA0MDAgIC8qKjwgVGhlIENSTCBpcyBmcm9tIHRoZSBmdXR1cmUgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfS0VZX1VTQUdFICAgICAgICAgMHgwODAwICAvKio8IFVzYWdlIGRvZXMgbm90IG1hdGNoIHRoZSBrZXlVc2FnZSBleHRlbnNpb24uICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9CQURDRVJUX0VYVF9LRVlfVVNBR0UgICAgIDB4MTAwMCAgLyoqPCBVc2FnZSBkb2VzIG5vdCBtYXRjaCB0aGUgZXh0ZW5kZWRLZXlVc2FnZSBleHRlbnNpb24uICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9CQURDRVJUX05TX0NFUlRfVFlQRSAgICAgIDB4MjAwMCAgLyoqPCBVc2FnZSBkb2VzIG5vdCBtYXRjaCB0aGUgbnNDZXJ0VHlwZSBleHRlbnNpb24uICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9CQURDRVJUX0JBRF9NRCAgICAgICAgICAgIDB4NDAwMCAgLyoqPCBUaGUgY2VydGlmaWNhdGUgaXMgc2lnbmVkIHdpdGggYW4gdW5hY2NlcHRhYmxlIGhhc2guICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9CQURDRVJUX0JBRF9QSyAgICAgICAgICAgIDB4ODAwMCAgLyoqPCBUaGUgY2VydGlmaWNhdGUgaXMgc2lnbmVkIHdpdGggYW4gdW5hY2NlcHRhYmxlIFBLIGFsZyAoZWcgUlNBIHZzIEVDRFNBKS4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX0tFWSAgICAgICAgIDB4MDEwMDAwICAvKio8IFRoZSBjZXJ0aWZpY2F0ZSBpcyBzaWduZWQgd2l0aCBhbiB1bmFjY2VwdGFibGUga2V5IChlZyBiYWQgY3VydmUsIFJTQSB0b28gc2hvcnQpLiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ1JMX0JBRF9NRCAgICAgICAgICAgMHgwMjAwMDAgIC8qKjwgVGhlIENSTCBpcyBzaWduZWQgd2l0aCBhbiB1bmFjY2VwdGFibGUgaGFzaC4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENSTF9CQURfUEsgICAgICAgICAgIDB4MDQwMDAwICAvKio8IFRoZSBDUkwgaXMgc2lnbmVkIHdpdGggYW4gdW5hY2NlcHRhYmxlIFBLIGFsZyAoZWcgUlNBIHZzIEVDRFNBKS4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENSTF9CQURfS0VZICAgICAgICAgIDB4MDgwMDAwICAvKio8IFRoZSBDUkwgaXMgc2lnbmVkIHdpdGggYW4gdW5hY2NlcHRhYmxlIGtleSAoZWcgYmFkIGN1cnZlLCBSU0EgdG9vIHNob3J0KS4gKi8KKworLyogXH0gbmFtZSAqLworLyogXH0gYWRkdG9ncm91cCB4NTA5X21vZHVsZSAqLworCisvKgorICogWC41MDkgdjMgS2V5IFVzYWdlIEV4dGVuc2lvbiBmbGFncworICogUmVtaW5kZXI6IHVwZGF0ZSB4NTA5X2luZm9fa2V5X3VzYWdlKCkgd2hlbiBhZGRpbmcgbmV3IGZsYWdzLgorICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRSAgICAgICAgICAgICgweDgwKSAgLyogYml0IDAgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0tVX05PTl9SRVBVRElBVElPTiAgICAgICAgICAgICAgKDB4NDApICAvKiBiaXQgMSAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVCAgICAgICAgICAgICAoMHgyMCkgIC8qIGJpdCAyICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9LVV9EQVRBX0VOQ0lQSEVSTUVOVCAgICAgICAgICAgICgweDEwKSAgLyogYml0IDMgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0tVX0tFWV9BR1JFRU1FTlQgICAgICAgICAgICAgICAgKDB4MDgpICAvKiBiaXQgNCAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfS1VfS0VZX0NFUlRfU0lHTiAgICAgICAgICAgICAgICAoMHgwNCkgIC8qIGJpdCA1ICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9LVV9DUkxfU0lHTiAgICAgICAgICAgICAgICAgICAgICgweDAyKSAgLyogYml0IDYgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0tVX0VOQ0lQSEVSX09OTFkgICAgICAgICAgICAgICAgKDB4MDEpICAvKiBiaXQgNyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfS1VfREVDSVBIRVJfT05MWSAgICAgICAgICAgICAgKDB4ODAwMCkgIC8qIGJpdCA4ICovCisKKy8qCisgKiBOZXRzY2FwZSBjZXJ0aWZpY2F0ZSB0eXBlcworICogKGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvc2VjdXJpdHkvcGtpL25zcy90ZWNoLW5vdGVzL3RuMy5odG1sKQorICovCisKKyNkZWZpbmUgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfQ0xJRU5UICAgICAgICAgKDB4ODApICAvKiBiaXQgMCAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9TRVJWRVIgICAgICAgICAoMHg0MCkgIC8qIGJpdCAxICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfRU1BSUwgICAgICAgICAgICAgICgweDIwKSAgLyogYml0IDIgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9PQkpFQ1RfU0lHTklORyAgICAgKDB4MTApICAvKiBiaXQgMyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1JFU0VSVkVEICAgICAgICAgICAoMHgwOCkgIC8qIGJpdCA0ICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX0NBICAgICAgICAgICAgICgweDA0KSAgLyogYml0IDUgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTF9DQSAgICAgICAgICAgKDB4MDIpICAvKiBiaXQgNiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX09CSkVDVF9TSUdOSU5HX0NBICAoMHgwMSkgIC8qIGJpdCA3ICovCisKKy8qCisgKiBYLjUwOSBleHRlbnNpb24gdHlwZXMKKyAqCisgKiBDb21tZW50cyByZWZlciB0byB0aGUgc3RhdHVzIGZvciB1c2luZyBjZXJ0aWZpY2F0ZXMuIFN0YXR1cyBjYW4gYmUKKyAqIGRpZmZlcmVudCBmb3Igd3JpdGluZyBjZXJ0aWZpY2F0ZXMgb3IgcmVhZGluZyBDUkxzIG9yIENTUnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9BVVRIT1JJVFlfS0VZX0lERU5USUZJRVIgICAgKDEgPDwgMCkKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9TVUJKRUNUX0tFWV9JREVOVElGSUVSICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9LRVlfVVNBR0UgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9DRVJUSUZJQ0FURV9QT0xJQ0lFUyAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9QT0xJQ1lfTUFQUElOR1MgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9TVUJKRUNUX0FMVF9OQU1FICAgICAgICAgICAgKDEgPDwgNSkgICAgLyogU3VwcG9ydGVkIChETlMpICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9FWFRfSVNTVUVSX0FMVF9OQU1FICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIE1CRURUTFNfWDUwOV9FWFRfU1VCSkVDVF9ESVJFQ1RPUllfQVRUUlMgICAgICgxIDw8IDcpCisjZGVmaW5lIE1CRURUTFNfWDUwOV9FWFRfQkFTSUNfQ09OU1RSQUlOVFMgICAgICAgICAgICgxIDw8IDgpICAgIC8qIFN1cHBvcnRlZCAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX05BTUVfQ09OU1RSQUlOVFMgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX1BPTElDWV9DT05TVFJBSU5UUyAgICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9FWFRFTkRFRF9LRVlfVVNBR0UgICAgICAgICAgKDEgPDwgMTEpCisjZGVmaW5lIE1CRURUTFNfWDUwOV9FWFRfQ1JMX0RJU1RSSUJVVElPTl9QT0lOVFMgICAgICgxIDw8IDEyKQorI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX0lOSUhJQklUX0FOWVBPTElDWSAgICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9GUkVTSEVTVF9DUkwgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9OU19DRVJUX1RZUEUgICAgICAgICAgICAgICAgKDEgPDwgMTYpICAgLyogUGFyc2VkIChhbmQgdGhlbiA/KSAqLworCisvKgorICogU3RvcmFnZSBmb3JtYXQgaWRlbnRpZmllcnMKKyAqIFJlY29nbml6ZWQgZm9ybWF0czogUEVNIGFuZCBERVIKKyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfRk9STUFUX0RFUiAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1g1MDlfRk9STUFUX1BFTSAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIE1CRURUTFNfWDUwOV9NQVhfRE5fTkFNRV9TSVpFICAgICAgICAgMjU2IC8qKjwgTWF4aW11bSB2YWx1ZSBzaXplIG9mIGEgRE4gZW50cnkgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxhZGR0b2dyb3VwIHg1MDlfbW9kdWxlCisgKiBceyAqLworCisvKioKKyAqIFxuYW1lIFN0cnVjdHVyZXMgZm9yIHBhcnNpbmcgWC41MDkgY2VydGlmaWNhdGVzLCBDUkxzIGFuZCBDU1JzCisgKiBceworICovCisKKy8qKgorICogVHlwZS1sZW5ndGgtdmFsdWUgc3RydWN0dXJlIHRoYXQgYWxsb3dzIGZvciBBU04xIHVzaW5nIERFUi4KKyAqLwordHlwZWRlZiBtYmVkdGxzX2FzbjFfYnVmIG1iZWR0bHNfeDUwOV9idWY7CisKKy8qKgorICogQ29udGFpbmVyIGZvciBBU04xIGJpdCBzdHJpbmdzLgorICovCit0eXBlZGVmIG1iZWR0bHNfYXNuMV9iaXRzdHJpbmcgbWJlZHRsc194NTA5X2JpdHN0cmluZzsKKworLyoqCisgKiBDb250YWluZXIgZm9yIEFTTjEgbmFtZWQgaW5mb3JtYXRpb24gb2JqZWN0cy4KKyAqIEl0IGFsbG93cyBmb3IgUmVsYXRpdmUgRGlzdGluZ3Vpc2hlZCBOYW1lcyAoZS5nLiBjbj1sb2NhbGhvc3Qsb3U9Y29kZSxldGMuKS4KKyAqLwordHlwZWRlZiBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSBtYmVkdGxzX3g1MDlfbmFtZTsKKworLyoqCisgKiBDb250YWluZXIgZm9yIGEgc2VxdWVuY2Ugb2YgQVNOLjEgaXRlbXMKKyAqLwordHlwZWRlZiBtYmVkdGxzX2FzbjFfc2VxdWVuY2UgbWJlZHRsc194NTA5X3NlcXVlbmNlOworCisvKiogQ29udGFpbmVyIGZvciBkYXRlIGFuZCB0aW1lIChwcmVjaXNpb24gaW4gc2Vjb25kcykuICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3g1MDlfdGltZQoreworICAgIGludCB5ZWFyLCBtb24sIGRheTsgICAgICAgICAvKio8IERhdGUuICovCisgICAgaW50IGhvdXIsIG1pbiwgc2VjOyAgICAgICAgIC8qKjwgVGltZS4gKi8KK30KK21iZWR0bHNfeDUwOV90aW1lOworCisvKiogXH0gbmFtZSBTdHJ1Y3R1cmVzIGZvciBwYXJzaW5nIFguNTA5IGNlcnRpZmljYXRlcywgQ1JMcyBhbmQgQ1NScyAqLworLyoqIFx9IGFkZHRvZ3JvdXAgeDUwOV9tb2R1bGUgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU3RvcmUgdGhlIGNlcnRpZmljYXRlIEROIGluIHByaW50YWJsZSBmb3JtIGludG8gYnVmOworICogICAgICAgICAgICAgICAgIG5vIG1vcmUgdGhhbiBzaXplIGNoYXJhY3RlcnMgd2lsbCBiZSB3cml0dGVuLgorICoKKyAqIFxwYXJhbSBidWYgICAgICBCdWZmZXIgdG8gd3JpdGUgdG8KKyAqIFxwYXJhbSBzaXplICAgICBNYXhpbXVtIHNpemUgb2YgYnVmZmVyCisgKiBccGFyYW0gZG4gICAgICAgVGhlIFg1MDkgbmFtZSB0byByZXByZXNlbnQKKyAqCisgKiBccmV0dXJuICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHdyaXR0ZW4gKG5vdCBpbmNsdWRpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBudWwgYnl0ZSksIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfeDUwOV9kbl9nZXRzKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBtYmVkdGxzX3g1MDlfbmFtZSAqZG4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU3RvcmUgdGhlIGNlcnRpZmljYXRlIHNlcmlhbCBpbiBwcmludGFibGUgZm9ybSBpbnRvIGJ1ZjsKKyAqICAgICAgICAgICAgICAgICBubyBtb3JlIHRoYW4gc2l6ZSBjaGFyYWN0ZXJzIHdpbGwgYmUgd3JpdHRlbi4KKyAqCisgKiBccGFyYW0gYnVmICAgICAgQnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgTWF4aW11bSBzaXplIG9mIGJ1ZmZlcgorICogXHBhcmFtIHNlcmlhbCAgIFRoZSBYNTA5IHNlcmlhbCB0byByZXByZXNlbnQKKyAqCisgKiBccmV0dXJuICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHdyaXR0ZW4gKG5vdCBpbmNsdWRpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBudWwgYnl0ZSksIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfeDUwOV9zZXJpYWxfZ2V0cyggY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqc2VyaWFsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrIGEgZ2l2ZW4gbWJlZHRsc194NTA5X3RpbWUgYWdhaW5zdCB0aGUgc3lzdGVtIHRpbWUKKyAqICAgICAgICAgICAgICAgICBhbmQgdGVsbCBpZiBpdCdzIGluIHRoZSBwYXN0LgorICoKKyAqIFxub3RlICAgICAgICAgICBJbnRlbmRlZCB1c2FnZSBpcyAiaWYoIGlzX3Bhc3QoIHZhbGlkX3RvICkgKSBFUlJPUiIuCisgKiAgICAgICAgICAgICAgICAgSGVuY2UgdGhlIHJldHVybiB2YWx1ZSBvZiAxIGlmIG9uIGludGVybmFsIGVycm9ycy4KKyAqCisgKiBccGFyYW0gdGltZSAgICAgbWJlZHRsc194NTA5X3RpbWUgdG8gY2hlY2sKKyAqCisgKiBccmV0dXJuICAgICAgICAgMSBpZiB0aGUgZ2l2ZW4gdGltZSBpcyBpbiB0aGUgcGFzdCBvciBhbiBlcnJvciBvY2N1cmVkLAorICogICAgICAgICAgICAgICAgIDAgb3RoZXJ3aXNlLgorICovCitpbnQgbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdCggY29uc3QgbWJlZHRsc194NTA5X3RpbWUgKnRpbWUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2sgYSBnaXZlbiBtYmVkdGxzX3g1MDlfdGltZSBhZ2FpbnN0IHRoZSBzeXN0ZW0gdGltZQorICogICAgICAgICAgICAgICAgIGFuZCB0ZWxsIGlmIGl0J3MgaW4gdGhlIGZ1dHVyZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgSW50ZW5kZWQgdXNhZ2UgaXMgImlmKCBpc19mdXR1cmUoIHZhbGlkX2Zyb20gKSApIEVSUk9SIi4KKyAqICAgICAgICAgICAgICAgICBIZW5jZSB0aGUgcmV0dXJuIHZhbHVlIG9mIDEgaWYgb24gaW50ZXJuYWwgZXJyb3JzLgorICoKKyAqIFxwYXJhbSB0aW1lICAgICBtYmVkdGxzX3g1MDlfdGltZSB0byBjaGVjaworICoKKyAqIFxyZXR1cm4gICAgICAgICAxIGlmIHRoZSBnaXZlbiB0aW1lIGlzIGluIHRoZSBmdXR1cmUgb3IgYW4gZXJyb3Igb2NjdXJlZCwKKyAqICAgICAgICAgICAgICAgICAwIG90aGVyd2lzZS4KKyAqLworaW50IG1iZWR0bHNfeDUwOV90aW1lX2lzX2Z1dHVyZSggY29uc3QgbWJlZHRsc194NTA5X3RpbWUgKnRpbWUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfeDUwOV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKy8qCisgKiBJbnRlcm5hbCBtb2R1bGUgZnVuY3Rpb25zLiBZb3UgcHJvYmFibHkgZG8gbm90IHdhbnQgdG8gdXNlIHRoZXNlIHVubGVzcyB5b3UKKyAqIGtub3cgeW91IGRvLgorICovCitpbnQgbWJlZHRsc194NTA5X2dldF9uYW1lKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9uYW1lICpjdXIgKTsKK2ludCBtYmVkdGxzX3g1MDlfZ2V0X2FsZ19udWxsKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfYnVmICphbGcgKTsKK2ludCBtYmVkdGxzX3g1MDlfZ2V0X2FsZyggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9idWYgKmFsZywgbWJlZHRsc194NTA5X2J1ZiAqcGFyYW1zICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUKQoraW50IG1iZWR0bHNfeDUwOV9nZXRfcnNhc3NhX3Bzc19wYXJhbXMoIGNvbnN0IG1iZWR0bHNfeDUwOV9idWYgKnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgKm1kX2FsZywgbWJlZHRsc19tZF90eXBlX3QgKm1nZl9tZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzYWx0X2xlbiApOworI2VuZGlmCitpbnQgbWJlZHRsc194NTA5X2dldF9zaWcoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsIG1iZWR0bHNfeDUwOV9idWYgKnNpZyApOworaW50IG1iZWR0bHNfeDUwOV9nZXRfc2lnX2FsZyggY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqc2lnX29pZCwgY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqc2lnX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCAqbWRfYWxnLCBtYmVkdGxzX3BrX3R5cGVfdCAqcGtfYWxnLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipzaWdfb3B0cyApOworaW50IG1iZWR0bHNfeDUwOV9nZXRfdGltZSggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfdGltZSAqdGltZSApOworaW50IG1iZWR0bHNfeDUwOV9nZXRfc2VyaWFsKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2J1ZiAqc2VyaWFsICk7CitpbnQgbWJlZHRsc194NTA5X2dldF9leHQoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfYnVmICpleHQsIGludCB0YWcgKTsKK2ludCBtYmVkdGxzX3g1MDlfc2lnX2FsZ19nZXRzKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBtYmVkdGxzX3g1MDlfYnVmICpzaWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX3R5cGVfdCBwa19hbGcsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc2lnX29wdHMgKTsKK2ludCBtYmVkdGxzX3g1MDlfa2V5X3NpemVfaGVscGVyKCBjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSApOworaW50IG1iZWR0bHNfeDUwOV9zdHJpbmdfdG9fbmFtZXMoIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICoqaGVhZCwgY29uc3QgY2hhciAqbmFtZSApOworaW50IG1iZWR0bHNfeDUwOV9zZXRfZXh0ZW5zaW9uKCBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqKmhlYWQsIGNvbnN0IGNoYXIgKm9pZCwgc2l6ZV90IG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3JpdGljYWwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YWxfbGVuICk7CitpbnQgbWJlZHRsc194NTA5X3dyaXRlX2V4dGVuc2lvbnMoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpmaXJzdCApOworaW50IG1iZWR0bHNfeDUwOV93cml0ZV9uYW1lcyggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpmaXJzdCApOworaW50IG1iZWR0bHNfeDUwOV93cml0ZV9zaWcoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2lkLCBzaXplX3Qgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2l6ZSApOworCisjZGVmaW5lIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKCByZXQgPCAwIHx8IChzaXplX3QpIHJldCA+PSBuICkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQlVGRkVSX1RPT19TTUFMTCApOyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG4gLT0gKHNpemVfdCkgcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHAgKz0gKHNpemVfdCkgcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSggMCApCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiB4NTA5LmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMveDUwOV9jcmwuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMveDUwOV9jcmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTg4NDM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy94NTA5X2NybC5oCkBAIC0wLDAgKzEsMTczIEBACisvKioKKyAqIFxmaWxlIHg1MDlfY3JsLmgKKyAqCisgKiBcYnJpZWYgWC41MDkgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0IHBhcnNpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19YNTA5X0NSTF9ICisjZGVmaW5lIE1CRURUTFNfWDUwOV9DUkxfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgIng1MDkuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxhZGR0b2dyb3VwIHg1MDlfbW9kdWxlCisgKiBceyAqLworCisvKioKKyAqIFxuYW1lIFN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBmb3IgcGFyc2luZyBDUkxzCisgKiBceworICovCisKKy8qKgorICogQ2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0IGVudHJ5LgorICogQ29udGFpbnMgdGhlIENBLXNwZWNpZmljIHNlcmlhbCBudW1iZXJzIGFuZCByZXZvY2F0aW9uIGRhdGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3g1MDlfY3JsX2VudHJ5Cit7CisgICAgbWJlZHRsc194NTA5X2J1ZiByYXc7CisKKyAgICBtYmVkdGxzX3g1MDlfYnVmIHNlcmlhbDsKKworICAgIG1iZWR0bHNfeDUwOV90aW1lIHJldm9jYXRpb25fZGF0ZTsKKworICAgIG1iZWR0bHNfeDUwOV9idWYgZW50cnlfZXh0OworCisgICAgc3RydWN0IG1iZWR0bHNfeDUwOV9jcmxfZW50cnkgKm5leHQ7Cit9CittYmVkdGxzX3g1MDlfY3JsX2VudHJ5OworCisvKioKKyAqIENlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdCBzdHJ1Y3R1cmUuCisgKiBFdmVyeSBDUkwgbWF5IGhhdmUgbXVsdGlwbGUgZW50cmllcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc194NTA5X2NybAoreworICAgIG1iZWR0bHNfeDUwOV9idWYgcmF3OyAgICAgICAgICAgLyoqPCBUaGUgcmF3IGNlcnRpZmljYXRlIGRhdGEgKERFUikuICovCisgICAgbWJlZHRsc194NTA5X2J1ZiB0YnM7ICAgICAgICAgICAvKio8IFRoZSByYXcgY2VydGlmaWNhdGUgYm9keSAoREVSKS4gVGhlIHBhcnQgdGhhdCBpcyBUbyBCZSBTaWduZWQuICovCisKKyAgICBpbnQgdmVyc2lvbjsgICAgICAgICAgICAvKio8IENSTCB2ZXJzaW9uICgxPXYxLCAyPXYyKSAqLworICAgIG1iZWR0bHNfeDUwOV9idWYgc2lnX29pZDsgICAgICAgLyoqPCBDUkwgc2lnbmF0dXJlIHR5cGUgaWRlbnRpZmllciAqLworCisgICAgbWJlZHRsc194NTA5X2J1ZiBpc3N1ZXJfcmF3OyAgICAvKio8IFRoZSByYXcgaXNzdWVyIGRhdGEgKERFUikuICovCisKKyAgICBtYmVkdGxzX3g1MDlfbmFtZSBpc3N1ZXI7ICAgICAgIC8qKjwgVGhlIHBhcnNlZCBpc3N1ZXIgZGF0YSAobmFtZWQgaW5mb3JtYXRpb24gb2JqZWN0KS4gKi8KKworICAgIG1iZWR0bHNfeDUwOV90aW1lIHRoaXNfdXBkYXRlOworICAgIG1iZWR0bHNfeDUwOV90aW1lIG5leHRfdXBkYXRlOworCisgICAgbWJlZHRsc194NTA5X2NybF9lbnRyeSBlbnRyeTsgICAvKio8IFRoZSBDUkwgZW50cmllcyBjb250YWluaW5nIHRoZSBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIHRpbWVzIGZvciB0aGlzIENBLiAqLworCisgICAgbWJlZHRsc194NTA5X2J1ZiBjcmxfZXh0OworCisgICAgbWJlZHRsc194NTA5X2J1ZiBzaWdfb2lkMjsKKyAgICBtYmVkdGxzX3g1MDlfYnVmIHNpZzsKKyAgICBtYmVkdGxzX21kX3R5cGVfdCBzaWdfbWQ7ICAgICAgICAgICAvKio8IEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBNRCBhbGdvcml0aG0gb2YgdGhlIHNpZ25hdHVyZSBhbGdvcml0aG0sIGUuZy4gTUJFRFRMU19NRF9TSEEyNTYgKi8KKyAgICBtYmVkdGxzX3BrX3R5cGVfdCBzaWdfcGs7ICAgICAgICAgICAvKio8IEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBQdWJsaWMgS2V5IGFsZ29yaXRobSBvZiB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobSwgZS5nLiBNQkVEVExTX1BLX1JTQSAqLworICAgIHZvaWQgKnNpZ19vcHRzOyAgICAgICAgICAgICAvKio8IFNpZ25hdHVyZSBvcHRpb25zIHRvIGJlIHBhc3NlZCB0byBtYmVkdGxzX3BrX3ZlcmlmeV9leHQoKSwgZS5nLiBmb3IgUlNBU1NBLVBTUyAqLworCisgICAgc3RydWN0IG1iZWR0bHNfeDUwOV9jcmwgKm5leHQ7Cit9CittYmVkdGxzX3g1MDlfY3JsOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQYXJzZSBhIERFUi1lbmNvZGVkIENSTCBhbmQgYXBwZW5kIGl0IHRvIHRoZSBjaGFpbmVkIGxpc3QKKyAqCisgKiBccGFyYW0gY2hhaW4gICAgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgY2hhaW4KKyAqIFxwYXJhbSBidWYgICAgICBidWZmZXIgaG9sZGluZyB0aGUgQ1JMIGRhdGEgaW4gREVSIGZvcm1hdAorICogXHBhcmFtIGJ1ZmxlbiAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgIChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSBmb3IgUEVNIGRhdGEpCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBYNTA5IG9yIFBFTSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2RlciggbWJlZHRsc194NTA5X2NybCAqY2hhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKTsKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBhcnNlIG9uZSBvciBtb3JlIENSTHMgYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBjaGFpbmVkIGxpc3QKKyAqCisgKiBcbm90ZSAgICAgICAgICAgTXV0bGlwbGUgQ1JMcyBhcmUgYWNjZXB0ZWQgb25seSBpZiB1c2luZyBQRU0gZm9ybWF0CisgKgorICogXHBhcmFtIGNoYWluICAgIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGNoYWluCisgKiBccGFyYW0gYnVmICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIENSTCBkYXRhIGluIFBFTSBvciBERVIgZm9ybWF0CisgKiBccGFyYW0gYnVmbGVuICAgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgKGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlIGZvciBQRU0gZGF0YSkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIFg1MDkgb3IgUEVNIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcmxfcGFyc2UoIG1iZWR0bHNfeDUwOV9jcmwgKmNoYWluLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKy8qKgorICogXGJyaWVmICAgICAgICAgIExvYWQgb25lIG9yIG1vcmUgQ1JMcyBhbmQgYXBwZW5kIHRoZW0gdG8gdGhlIGNoYWluZWQgbGlzdAorICoKKyAqIFxub3RlICAgICAgICAgICBNdXRsaXBsZSBDUkxzIGFyZSBhY2NlcHRlZCBvbmx5IGlmIHVzaW5nIFBFTSBmb3JtYXQKKyAqCisgKiBccGFyYW0gY2hhaW4gICAgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgY2hhaW4KKyAqIFxwYXJhbSBwYXRoICAgICBmaWxlbmFtZSB0byByZWFkIHRoZSBDUkxzIGZyb20gKGluIFBFTSBvciBERVIgZW5jb2RpbmcpCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBYNTA5IG9yIFBFTSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2ZpbGUoIG1iZWR0bHNfeDUwOV9jcmwgKmNoYWluLCBjb25zdCBjaGFyICpwYXRoICk7CisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm5zIGFuIGluZm9ybWF0aW9uYWwgc3RyaW5nIGFib3V0IHRoZSBDUkwuCisgKgorICogXHBhcmFtIGJ1ZiAgICAgIEJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIHNpemUgICAgIE1heGltdW0gc2l6ZSBvZiBidWZmZXIKKyAqIFxwYXJhbSBwcmVmaXggICBBIGxpbmUgcHJlZml4CisgKiBccGFyYW0gY3JsICAgICAgVGhlIFg1MDkgQ1JMIHRvIHJlcHJlc2VudAorICoKKyAqIFxyZXR1cm4gICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgd3JpdHRlbiAobm90IGluY2x1ZGluZyB0aGUKKyAqICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIG51bCBieXRlKSwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc194NTA5X2NybF9pbmZvKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X2NybCAqY3JsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgYSBDUkwgKGNoYWluKQorICoKKyAqIFxwYXJhbSBjcmwgICAgICBDUkwgY2hhaW4gdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfeDUwOV9jcmxfaW5pdCggbWJlZHRsc194NTA5X2NybCAqY3JsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFVuYWxsb2NhdGUgYWxsIENSTCBkYXRhCisgKgorICogXHBhcmFtIGNybCAgICAgIENSTCBjaGFpbiB0byBmcmVlCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5X2NybF9mcmVlKCBtYmVkdGxzX3g1MDlfY3JsICpjcmwgKTsKKworLyogXH0gbmFtZSAqLworLyogXH0gYWRkdG9ncm91cCB4NTA5X21vZHVsZSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogbWJlZHRsc194NTA5X2NybC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3g1MDlfY3J0LmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3g1MDlfY3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzZTQ4NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMveDUwOV9jcnQuaApAQCAtMCwwICsxLDY1NCBAQAorLyoqCisgKiBcZmlsZSB4NTA5X2NydC5oCisgKgorICogXGJyaWVmIFguNTA5IGNlcnRpZmljYXRlIHBhcnNpbmcgYW5kIHdyaXRpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19YNTA5X0NSVF9ICisjZGVmaW5lIE1CRURUTFNfWDUwOV9DUlRfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgIng1MDkuaCIKKyNpbmNsdWRlICJ4NTA5X2NybC5oIgorCisvKioKKyAqIFxhZGR0b2dyb3VwIHg1MDlfbW9kdWxlCisgKiBceworICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcbmFtZSBTdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgZm9yIHBhcnNpbmcgYW5kIHdyaXRpbmcgWC41MDkgY2VydGlmaWNhdGVzCisgKiBceworICovCisKKy8qKgorICogQ29udGFpbmVyIGZvciBhbiBYLjUwOSBjZXJ0aWZpY2F0ZS4gVGhlIGNlcnRpZmljYXRlIG1heSBiZSBjaGFpbmVkLgorICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3g1MDlfY3J0Cit7CisgICAgbWJlZHRsc194NTA5X2J1ZiByYXc7ICAgICAgICAgICAgICAgLyoqPCBUaGUgcmF3IGNlcnRpZmljYXRlIGRhdGEgKERFUikuICovCisgICAgbWJlZHRsc194NTA5X2J1ZiB0YnM7ICAgICAgICAgICAgICAgLyoqPCBUaGUgcmF3IGNlcnRpZmljYXRlIGJvZHkgKERFUikuIFRoZSBwYXJ0IHRoYXQgaXMgVG8gQmUgU2lnbmVkLiAqLworCisgICAgaW50IHZlcnNpb247ICAgICAgICAgICAgICAgIC8qKjwgVGhlIFguNTA5IHZlcnNpb24uICgxPXYxLCAyPXYyLCAzPXYzKSAqLworICAgIG1iZWR0bHNfeDUwOV9idWYgc2VyaWFsOyAgICAgICAgICAgIC8qKjwgVW5pcXVlIGlkIGZvciBjZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgYSBzcGVjaWZpYyBDQS4gKi8KKyAgICBtYmVkdGxzX3g1MDlfYnVmIHNpZ19vaWQ7ICAgICAgICAgICAvKio8IFNpZ25hdHVyZSBhbGdvcml0aG0sIGUuZy4gc2hhMVJTQSAqLworCisgICAgbWJlZHRsc194NTA5X2J1ZiBpc3N1ZXJfcmF3OyAgICAgICAgLyoqPCBUaGUgcmF3IGlzc3VlciBkYXRhIChERVIpLiBVc2VkIGZvciBxdWljayBjb21wYXJpc29uLiAqLworICAgIG1iZWR0bHNfeDUwOV9idWYgc3ViamVjdF9yYXc7ICAgICAgIC8qKjwgVGhlIHJhdyBzdWJqZWN0IGRhdGEgKERFUikuIFVzZWQgZm9yIHF1aWNrIGNvbXBhcmlzb24uICovCisKKyAgICBtYmVkdGxzX3g1MDlfbmFtZSBpc3N1ZXI7ICAgICAgICAgICAvKio8IFRoZSBwYXJzZWQgaXNzdWVyIGRhdGEgKG5hbWVkIGluZm9ybWF0aW9uIG9iamVjdCkuICovCisgICAgbWJlZHRsc194NTA5X25hbWUgc3ViamVjdDsgICAgICAgICAgLyoqPCBUaGUgcGFyc2VkIHN1YmplY3QgZGF0YSAobmFtZWQgaW5mb3JtYXRpb24gb2JqZWN0KS4gKi8KKworICAgIG1iZWR0bHNfeDUwOV90aW1lIHZhbGlkX2Zyb207ICAgICAgIC8qKjwgU3RhcnQgdGltZSBvZiBjZXJ0aWZpY2F0ZSB2YWxpZGl0eS4gKi8KKyAgICBtYmVkdGxzX3g1MDlfdGltZSB2YWxpZF90bzsgICAgICAgICAvKio8IEVuZCB0aW1lIG9mIGNlcnRpZmljYXRlIHZhbGlkaXR5LiAqLworCisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOyAgICAgICAgICAgICAgLyoqPCBDb250YWluZXIgZm9yIHRoZSBwdWJsaWMga2V5IGNvbnRleHQuICovCisKKyAgICBtYmVkdGxzX3g1MDlfYnVmIGlzc3Vlcl9pZDsgICAgICAgICAvKio8IE9wdGlvbmFsIFguNTA5IHYyL3YzIGlzc3VlciB1bmlxdWUgaWRlbnRpZmllci4gKi8KKyAgICBtYmVkdGxzX3g1MDlfYnVmIHN1YmplY3RfaWQ7ICAgICAgICAvKio8IE9wdGlvbmFsIFguNTA5IHYyL3YzIHN1YmplY3QgdW5pcXVlIGlkZW50aWZpZXIuICovCisgICAgbWJlZHRsc194NTA5X2J1ZiB2M19leHQ7ICAgICAgICAgICAgLyoqPCBPcHRpb25hbCBYLjUwOSB2MyBleHRlbnNpb25zLiAgKi8KKyAgICBtYmVkdGxzX3g1MDlfc2VxdWVuY2Ugc3ViamVjdF9hbHRfbmFtZXM7ICAgIC8qKjwgT3B0aW9uYWwgbGlzdCBvZiBTdWJqZWN0IEFsdGVybmF0aXZlIE5hbWVzIChPbmx5IGROU05hbWUgc3VwcG9ydGVkKS4gKi8KKworICAgIGludCBleHRfdHlwZXM7ICAgICAgICAgICAgICAvKio8IEJpdCBzdHJpbmcgY29udGFpbmluZyBkZXRlY3RlZCBhbmQgcGFyc2VkIGV4dGVuc2lvbnMgKi8KKyAgICBpbnQgY2FfaXN0cnVlOyAgICAgICAgICAgICAgLyoqPCBPcHRpb25hbCBCYXNpYyBDb25zdHJhaW50IGV4dGVuc2lvbiB2YWx1ZTogMSBpZiB0aGlzIGNlcnRpZmljYXRlIGJlbG9uZ3MgdG8gYSBDQSwgMCBvdGhlcndpc2UuICovCisgICAgaW50IG1heF9wYXRobGVuOyAgICAgICAgICAgIC8qKjwgT3B0aW9uYWwgQmFzaWMgQ29uc3RyYWludCBleHRlbnNpb24gdmFsdWU6IFRoZSBtYXhpbXVtIHBhdGggbGVuZ3RoIHRvIHRoZSByb290IGNlcnRpZmljYXRlLiBQYXRoIGxlbmd0aCBpcyAxIGhpZ2hlciB0aGFuIFJGQyA1MjgwICdtZWFuaW5nJywgc28gMSsgKi8KKworICAgIHVuc2lnbmVkIGludCBrZXlfdXNhZ2U7ICAgICAvKio8IE9wdGlvbmFsIGtleSB1c2FnZSBleHRlbnNpb24gdmFsdWU6IFNlZSB0aGUgdmFsdWVzIGluIHg1MDkuaCAqLworCisgICAgbWJlZHRsc194NTA5X3NlcXVlbmNlIGV4dF9rZXlfdXNhZ2U7IC8qKjwgT3B0aW9uYWwgbGlzdCBvZiBleHRlbmRlZCBrZXkgdXNhZ2UgT0lEcy4gKi8KKworICAgIHVuc2lnbmVkIGNoYXIgbnNfY2VydF90eXBlOyAvKio8IE9wdGlvbmFsIE5ldHNjYXBlIGNlcnRpZmljYXRlIHR5cGUgZXh0ZW5zaW9uIHZhbHVlOiBTZWUgdGhlIHZhbHVlcyBpbiB4NTA5LmggKi8KKworICAgIG1iZWR0bHNfeDUwOV9idWYgc2lnOyAgICAgICAgICAgICAgIC8qKjwgU2lnbmF0dXJlOiBoYXNoIG9mIHRoZSB0YnMgcGFydCBzaWduZWQgd2l0aCB0aGUgcHJpdmF0ZSBrZXkuICovCisgICAgbWJlZHRsc19tZF90eXBlX3Qgc2lnX21kOyAgICAgICAgICAgLyoqPCBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgTUQgYWxnb3JpdGhtIG9mIHRoZSBzaWduYXR1cmUgYWxnb3JpdGhtLCBlLmcuIE1CRURUTFNfTURfU0hBMjU2ICovCisgICAgbWJlZHRsc19wa190eXBlX3Qgc2lnX3BrOyAgICAgICAgICAgLyoqPCBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgUHVibGljIEtleSBhbGdvcml0aG0gb2YgdGhlIHNpZ25hdHVyZSBhbGdvcml0aG0sIGUuZy4gTUJFRFRMU19QS19SU0EgKi8KKyAgICB2b2lkICpzaWdfb3B0czsgICAgICAgICAgICAgLyoqPCBTaWduYXR1cmUgb3B0aW9ucyB0byBiZSBwYXNzZWQgdG8gbWJlZHRsc19wa192ZXJpZnlfZXh0KCksIGUuZy4gZm9yIFJTQVNTQS1QU1MgKi8KKworICAgIHN0cnVjdCBtYmVkdGxzX3g1MDlfY3J0ICpuZXh0OyAgICAgLyoqPCBOZXh0IGNlcnRpZmljYXRlIGluIHRoZSBDQS1jaGFpbi4gKi8KK30KK21iZWR0bHNfeDUwOV9jcnQ7CisKKy8qKgorICogQnVpbGQgZmxhZyBmcm9tIGFuIGFsZ29yaXRobS9jdXJ2ZSBpZGVudGlmaWVyIChwaywgbWQsIGVjcCkKKyAqIFNpbmNlIDAgaXMgYWx3YXlzIFhYWF9OT05FLCBpZ25vcmUgaXQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIGlkICkgICAoIDEgPDwgKCBpZCAtIDEgKSApCisKKy8qKgorICogU2VjdXJpdHkgcHJvZmlsZSBmb3IgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uLgorICoKKyAqIEFsbCBsaXN0cyBhcmUgYml0ZmllbGRzLCBidWlsdCBieSBPUmluZyBmbGFncyBmcm9tIE1CRURUTFNfWDUwOV9JRF9GTEFHKCkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgYWxsb3dlZF9tZHM7ICAgICAgIC8qKjwgTURzIGZvciBzaWduYXR1cmVzICAgICAgICAgKi8KKyAgICB1aW50MzJfdCBhbGxvd2VkX3BrczsgICAgICAgLyoqPCBQSyBhbGdzIGZvciBzaWduYXR1cmVzICAgICAqLworICAgIHVpbnQzMl90IGFsbG93ZWRfY3VydmVzOyAgICAvKio8IEVsbGlwdGljIGN1cnZlcyBmb3IgRUNEU0EgICovCisgICAgdWludDMyX3QgcnNhX21pbl9iaXRsZW47ICAgIC8qKjwgTWluaW11bSBzaXplIGZvciBSU0Ega2V5cyAgKi8KK30KK21iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZTsKKworI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1ZFUlNJT05fMSAgICAgICAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1ZFUlNJT05fMiAgICAgICAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1ZFUlNJT05fMyAgICAgICAgICAgICAgMgorCisjZGVmaW5lIE1CRURUTFNfWDUwOV9SRkM1MjgwX01BWF9TRVJJQUxfTEVOIDMyCisjZGVmaW5lIE1CRURUTFNfWDUwOV9SRkM1MjgwX1VUQ19USU1FX0xFTiAgIDE1CisKKyNpZiAhZGVmaW5lZCggTUJFRFRMU19YNTA5X01BWF9GSUxFX1BBVEhfTEVOICkKKyNkZWZpbmUgTUJFRFRMU19YNTA5X01BWF9GSUxFX1BBVEhfTEVOIDUxMgorI2VuZGlmCisKKy8qKgorICogQ29udGFpbmVyIGZvciB3cml0aW5nIGEgY2VydGlmaWNhdGUgKENSVCkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc194NTA5d3JpdGVfY2VydAoreworICAgIGludCB2ZXJzaW9uOworICAgIG1iZWR0bHNfbXBpIHNlcmlhbDsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgKnN1YmplY3Rfa2V5OworICAgIG1iZWR0bHNfcGtfY29udGV4dCAqaXNzdWVyX2tleTsKKyAgICBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqc3ViamVjdDsKKyAgICBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqaXNzdWVyOworICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZzsKKyAgICBjaGFyIG5vdF9iZWZvcmVbTUJFRFRMU19YNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOICsgMV07CisgICAgY2hhciBub3RfYWZ0ZXJbTUJFRFRMU19YNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOICsgMV07CisgICAgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmV4dGVuc2lvbnM7Cit9CittYmVkdGxzX3g1MDl3cml0ZV9jZXJ0OworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisvKioKKyAqIERlZmF1bHQgc2VjdXJpdHkgcHJvZmlsZS4gU2hvdWxkIHByb3ZpZGUgYSBnb29kIGJhbGFuY2UgYmV0d2VlbiBzZWN1cml0eQorICogYW5kIGNvbXBhdGliaWxpdHkgd2l0aCBjdXJyZW50IGRlcGxveW1lbnRzLgorICovCitleHRlcm4gY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlIG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZV9kZWZhdWx0OworCisvKioKKyAqIEV4cGVjdGVkIG5leHQgZGVmYXVsdCBwcm9maWxlLiBSZWNvbW1lbmRlZCBmb3IgbmV3IGRlcGxveW1lbnRzLgorICogQ3VycmVudGx5IHRhcmdldHMgYSAxMjgtYml0IHNlY3VyaXR5IGxldmVsLCBleGNlcHQgZm9yIFJTQS0yMDQ4LgorICovCitleHRlcm4gY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlIG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZV9uZXh0OworCisvKioKKyAqIE5TQSBTdWl0ZSBCIHByb2ZpbGUuCisgKi8KK2V4dGVybiBjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgbWJlZHRsc194NTA5X2NydF9wcm9maWxlX3N1aXRlYjsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUGFyc2UgYSBzaW5nbGUgREVSIGZvcm1hdHRlZCBjZXJ0aWZpY2F0ZSBhbmQgYWRkIGl0CisgKiAgICAgICAgICAgICAgICAgdG8gdGhlIGNoYWluZWQgbGlzdC4KKyAqCisgKiBccGFyYW0gY2hhaW4gICAgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgY2hhaW4KKyAqIFxwYXJhbSBidWYgICAgICBidWZmZXIgaG9sZGluZyB0aGUgY2VydGlmaWNhdGUgREVSIGRhdGEKKyAqIFxwYXJhbSBidWZsZW4gICBzaXplIG9mIHRoZSBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIFg1MDkgb3IgUEVNIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZGVyKCBtYmVkdGxzX3g1MDlfY3J0ICpjaGFpbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQYXJzZSBvbmUgb3IgbW9yZSBjZXJ0aWZpY2F0ZXMgYW5kIGFkZCB0aGVtCisgKiAgICAgICAgICAgICAgICAgdG8gdGhlIGNoYWluZWQgbGlzdC4gUGFyc2VzIHBlcm1pc3NpdmVseS4gSWYgc29tZQorICogICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlcyBjYW4gYmUgcGFyc2VkLCB0aGUgcmVzdWx0IGlzIHRoZSBudW1iZXIKKyAqICAgICAgICAgICAgICAgICBvZiBmYWlsZWQgY2VydGlmaWNhdGVzIGl0IGVuY291bnRlcmVkLiBJZiBub25lIGNvbXBsZXRlCisgKiAgICAgICAgICAgICAgICAgY29ycmVjdGx5LCB0aGUgZmlyc3QgZXJyb3IgaXMgcmV0dXJuZWQuCisgKgorICogXHBhcmFtIGNoYWluICAgIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGNoYWluCisgKiBccGFyYW0gYnVmICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGNlcnRpZmljYXRlIGRhdGEgaW4gUEVNIG9yIERFUiBmb3JtYXQKKyAqIFxwYXJhbSBidWZsZW4gICBzaXplIG9mIHRoZSBidWZmZXIKKyAqICAgICAgICAgICAgICAgICAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgZm9yIFBFTSBkYXRhKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIGFsbCBjZXJ0aWZpY2F0ZXMgcGFyc2VkIHN1Y2Nlc3NmdWxseSwgYSBwb3NpdGl2ZSBudW1iZXIKKyAqICAgICAgICAgICAgICAgICBpZiBwYXJ0bHkgc3VjY2Vzc2Z1bCBvciBhIHNwZWNpZmljIFg1MDkgb3IgUEVNIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoIG1iZWR0bHNfeDUwOV9jcnQgKmNoYWluLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKy8qKgorICogXGJyaWVmICAgICAgICAgIExvYWQgb25lIG9yIG1vcmUgY2VydGlmaWNhdGVzIGFuZCBhZGQgdGhlbQorICogICAgICAgICAgICAgICAgIHRvIHRoZSBjaGFpbmVkIGxpc3QuIFBhcnNlcyBwZXJtaXNzaXZlbHkuIElmIHNvbWUKKyAqICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMgY2FuIGJlIHBhcnNlZCwgdGhlIHJlc3VsdCBpcyB0aGUgbnVtYmVyCisgKiAgICAgICAgICAgICAgICAgb2YgZmFpbGVkIGNlcnRpZmljYXRlcyBpdCBlbmNvdW50ZXJlZC4gSWYgbm9uZSBjb21wbGV0ZQorICogICAgICAgICAgICAgICAgIGNvcnJlY3RseSwgdGhlIGZpcnN0IGVycm9yIGlzIHJldHVybmVkLgorICoKKyAqIFxwYXJhbSBjaGFpbiAgICBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjaGFpbgorICogXHBhcmFtIHBhdGggICAgIGZpbGVuYW1lIHRvIHJlYWQgdGhlIGNlcnRpZmljYXRlcyBmcm9tCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgYWxsIGNlcnRpZmljYXRlcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5LCBhIHBvc2l0aXZlIG51bWJlcgorICogICAgICAgICAgICAgICAgIGlmIHBhcnRseSBzdWNjZXNzZnVsIG9yIGEgc3BlY2lmaWMgWDUwOSBvciBQRU0gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCBtYmVkdGxzX3g1MDlfY3J0ICpjaGFpbiwgY29uc3QgY2hhciAqcGF0aCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBMb2FkIG9uZSBvciBtb3JlIGNlcnRpZmljYXRlIGZpbGVzIGZyb20gYSBwYXRoIGFuZCBhZGQgdGhlbQorICogICAgICAgICAgICAgICAgIHRvIHRoZSBjaGFpbmVkIGxpc3QuIFBhcnNlcyBwZXJtaXNzaXZlbHkuIElmIHNvbWUKKyAqICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMgY2FuIGJlIHBhcnNlZCwgdGhlIHJlc3VsdCBpcyB0aGUgbnVtYmVyCisgKiAgICAgICAgICAgICAgICAgb2YgZmFpbGVkIGNlcnRpZmljYXRlcyBpdCBlbmNvdW50ZXJlZC4gSWYgbm9uZSBjb21wbGV0ZQorICogICAgICAgICAgICAgICAgIGNvcnJlY3RseSwgdGhlIGZpcnN0IGVycm9yIGlzIHJldHVybmVkLgorICoKKyAqIFxwYXJhbSBjaGFpbiAgICBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjaGFpbgorICogXHBhcmFtIHBhdGggICAgIGRpcmVjdG9yeSAvIGZvbGRlciB0byByZWFkIHRoZSBjZXJ0aWZpY2F0ZSBmaWxlcyBmcm9tCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgYWxsIGNlcnRpZmljYXRlcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5LCBhIHBvc2l0aXZlIG51bWJlcgorICogICAgICAgICAgICAgICAgIGlmIHBhcnRseSBzdWNjZXNzZnVsIG9yIGEgc3BlY2lmaWMgWDUwOSBvciBQRU0gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoKCBtYmVkdGxzX3g1MDlfY3J0ICpjaGFpbiwgY29uc3QgY2hhciAqcGF0aCApOworI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmV0dXJucyBhbiBpbmZvcm1hdGlvbmFsIHN0cmluZyBhYm91dCB0aGUKKyAqICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZS4KKyAqCisgKiBccGFyYW0gYnVmICAgICAgQnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgTWF4aW11bSBzaXplIG9mIGJ1ZmZlcgorICogXHBhcmFtIHByZWZpeCAgIEEgbGluZSBwcmVmaXgKKyAqIFxwYXJhbSBjcnQgICAgICBUaGUgWDUwOSBjZXJ0aWZpY2F0ZSB0byByZXByZXNlbnQKKyAqCisgKiBccmV0dXJuICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHdyaXR0ZW4gKG5vdCBpbmNsdWRpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBudWwgYnl0ZSksIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcnRfaW5mbyggY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqcHJlZml4LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKmNydCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm5zIGFuIGluZm9ybWF0aW9uYWwgc3RyaW5nIGFib3V0IHRoZQorICogICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBzdGF0dXMgb2YgYSBjZXJ0aWZpY2F0ZS4KKyAqCisgKiBccGFyYW0gYnVmICAgICAgQnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgTWF4aW11bSBzaXplIG9mIGJ1ZmZlcgorICogXHBhcmFtIHByZWZpeCAgIEEgbGluZSBwcmVmaXgKKyAqIFxwYXJhbSBmbGFncyAgICBWZXJpZmljYXRpb24gZmxhZ3MgY3JlYXRlZCBieSBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeSgpCisgKgorICogXHJldHVybiAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB3cml0dGVuIChub3QgaW5jbHVkaW5nIHRoZQorICogICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgbnVsIGJ5dGUpLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9pbmZvKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFZlcmlmeSB0aGUgY2VydGlmaWNhdGUgc2lnbmF0dXJlCisgKgorICogICAgICAgICAgICAgICAgIFRoZSB2ZXJpZnkgY2FsbGJhY2sgaXMgYSB1c2VyLXN1cHBsaWVkIGNhbGxiYWNrIHRoYXQKKyAqICAgICAgICAgICAgICAgICBjYW4gY2xlYXIgLyBtb2RpZnkgLyBhZGQgZmxhZ3MgZm9yIGEgY2VydGlmaWNhdGUuIElmIHNldCwKKyAqICAgICAgICAgICAgICAgICB0aGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCBmb3IgZWFjaAorICogICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlIGluIHRoZSBjaGFpbiAoZnJvbSB0aGUgdHJ1c3QtY2EgZG93biB0byB0aGUKKyAqICAgICAgICAgICAgICAgICBwcmVzZW50ZWQgY3J0KS4gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjYWxsYmFjayBhcmU6CisgKiAgICAgICAgICAgICAgICAgKHZvaWQgKnBhcmFtZXRlciwgbWJlZHRsc194NTA5X2NydCAqY3J0LCBpbnQgY2VydGlmaWNhdGVfZGVwdGgsCisgKiAgICAgICAgICAgICAgICAgaW50ICpmbGFncykuIFdpdGggdGhlIGZsYWdzIHJlcHJlc2VudGluZyBjdXJyZW50IGZsYWdzIGZvcgorICogICAgICAgICAgICAgICAgIHRoYXQgc3BlY2lmaWMgY2VydGlmaWNhdGUgYW5kIHRoZSBjZXJ0aWZpY2F0ZSBkZXB0aCBmcm9tCisgKiAgICAgICAgICAgICAgICAgdGhlIGJvdHRvbSAoUGVlciBjZXJ0IGRlcHRoID0gMCkuCisgKgorICogICAgICAgICAgICAgICAgIEFsbCBmbGFncyBsZWZ0IGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSBjYWxsYmFjaworICogICAgICAgICAgICAgICAgIGFyZSBhbHNvIHJldHVybmVkIHRvIHRoZSBhcHBsaWNhdGlvbi4gVGhlIGZ1bmN0aW9uIHNob3VsZAorICogICAgICAgICAgICAgICAgIHJldHVybiAwIGZvciBhbnl0aGluZyBidXQgYSBmYXRhbCBlcnJvci4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgSW4gY2FzZSB2ZXJpZmljYXRpb24gZmFpbGVkLCB0aGUgcmVzdWx0cyBjYW4gYmUgZGlzcGxheWVkCisgKiAgICAgICAgICAgICAgICAgdXNpbmcgXGMgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfaW5mbygpCisgKgorICogXG5vdGUgICAgICAgICAgIFNhbWUgYXMgXGMgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfd2l0aF9wcm9maWxlKCkgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICBkZWZhdWx0IHNlY3VyaXR5IHByb2ZpbGUuCisgKgorICogXG5vdGUgICAgICAgICAgIEl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gcHJvdmlkZSB1cC10by1kYXRlIENSTHMgZm9yCisgKiAgICAgICAgICAgICAgICAgYWxsIHRydXN0ZWQgQ0FzLiBJZiBubyBDUkwgaXMgcHJvdmlkZWQgZm9yIHRoZSBDQSB0aGF0IHdhcworICogICAgICAgICAgICAgICAgIHVzZWQgdG8gc2lnbiB0aGUgY2VydGlmaWNhdGUsIENSTCB2ZXJpZmljYXRpb24gaXMgc2tpcHBlZAorICogICAgICAgICAgICAgICAgIHNpbGVudGx5LCB0aGF0IGlzICp3aXRob3V0KiBzZXR0aW5nIGFueSBmbGFnLgorICoKKyAqIFxwYXJhbSBjcnQgICAgICBhIGNlcnRpZmljYXRlIChjaGFpbikgdG8gYmUgdmVyaWZpZWQKKyAqIFxwYXJhbSB0cnVzdF9jYSB0aGUgbGlzdCBvZiB0cnVzdGVkIENBcworICogXHBhcmFtIGNhX2NybCAgIHRoZSBsaXN0IG9mIENSTHMgZm9yIHRydXN0ZWQgQ0FzIChzZWUgbm90ZSBhYm92ZSkKKyAqIFxwYXJhbSBjbiAgICAgICBleHBlY3RlZCBDb21tb24gTmFtZSAoY2FuIGJlIHNldCB0bworICogICAgICAgICAgICAgICAgIE5VTEwgaWYgdGhlIENOIG11c3Qgbm90IGJlIHZlcmlmaWVkKQorICogXHBhcmFtIGZsYWdzICAgIHJlc3VsdCBvZiB0aGUgdmVyaWZpY2F0aW9uCisgKiBccGFyYW0gZl92cmZ5ICAgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uCisgKiBccGFyYW0gcF92cmZ5ICAgdmVyaWZpY2F0aW9uIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgTUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQKKyAqICAgICAgICAgICAgICAgICBpbiB3aGljaCBjYXNlICpmbGFncyB3aWxsIGhhdmUgb25lIG9yIG1vcmUKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1g1MDlfQkFEQ0VSVF9YWFggb3IgTUJFRFRMU19YNTA5X0JBRENSTF9YWFggZmxhZ3MKKyAqICAgICAgICAgICAgICAgICBzZXQsCisgKiAgICAgICAgICAgICAgICAgb3IgYW5vdGhlciBlcnJvciBpbiBjYXNlIG9mIGEgZmF0YWwgZXJyb3IgZW5jb3VudGVyZWQKKyAqICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLgorICovCitpbnQgbWJlZHRsc194NTA5X2NydF92ZXJpZnkoIG1iZWR0bHNfeDUwOV9jcnQgKmNydCwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKnRydXN0X2NhLAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NybCAqY2FfY3JsLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY24sIHVpbnQzMl90ICpmbGFncywKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfdnJmeSkodm9pZCAqLCBtYmVkdGxzX3g1MDlfY3J0ICosIGludCwgdWludDMyX3QgKiksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3ZyZnkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSBzaWduYXR1cmUgYWNjb3JkaW5nIHRvIHByb2ZpbGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2FtZSBhcyBcYyBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeSgpLCBidXQgd2l0aCBleHBsaWNpdAorICogICAgICAgICAgICAgICAgIHNlY3VyaXR5IHByb2ZpbGUuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSByZXN0cmljdGlvbnMgb24ga2V5cyAoUlNBIG1pbmltdW0gc2l6ZSwgYWxsb3dlZCBjdXJ2ZXMKKyAqICAgICAgICAgICAgICAgICBmb3IgRUNEU0EpIGFwcGx5IHRvIGFsbCBjZXJ0aWZpY2F0ZXM6IHRydXN0ZWQgcm9vdCwKKyAqICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUgQ0FzIGlmIGFueSwgYW5kIGVuZCBlbnRpdHkgY2VydGlmaWNhdGUuCisgKgorICogXHBhcmFtIGNydCAgICAgIGEgY2VydGlmaWNhdGUgKGNoYWluKSB0byBiZSB2ZXJpZmllZAorICogXHBhcmFtIHRydXN0X2NhIHRoZSBsaXN0IG9mIHRydXN0ZWQgQ0FzCisgKiBccGFyYW0gY2FfY3JsICAgdGhlIGxpc3Qgb2YgQ1JMcyBmb3IgdHJ1c3RlZCBDQXMKKyAqIFxwYXJhbSBwcm9maWxlICBzZWN1cml0eSBwcm9maWxlIGZvciB2ZXJpZmljYXRpb24KKyAqIFxwYXJhbSBjbiAgICAgICBleHBlY3RlZCBDb21tb24gTmFtZSAoY2FuIGJlIHNldCB0bworICogICAgICAgICAgICAgICAgIE5VTEwgaWYgdGhlIENOIG11c3Qgbm90IGJlIHZlcmlmaWVkKQorICogXHBhcmFtIGZsYWdzICAgIHJlc3VsdCBvZiB0aGUgdmVyaWZpY2F0aW9uCisgKiBccGFyYW0gZl92cmZ5ICAgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uCisgKiBccGFyYW0gcF92cmZ5ICAgdmVyaWZpY2F0aW9uIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgTUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQKKyAqICAgICAgICAgICAgICAgICBpbiB3aGljaCBjYXNlICpmbGFncyB3aWxsIGhhdmUgb25lIG9yIG1vcmUKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1g1MDlfQkFEQ0VSVF9YWFggb3IgTUJFRFRMU19YNTA5X0JBRENSTF9YWFggZmxhZ3MKKyAqICAgICAgICAgICAgICAgICBzZXQsCisgKiAgICAgICAgICAgICAgICAgb3IgYW5vdGhlciBlcnJvciBpbiBjYXNlIG9mIGEgZmF0YWwgZXJyb3IgZW5jb3VudGVyZWQKKyAqICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLgorICovCitpbnQgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfd2l0aF9wcm9maWxlKCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQsCisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICp0cnVzdF9jYSwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNhX2NybCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZSAqcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNuLCB1aW50MzJfdCAqZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3ZyZnkpKHZvaWQgKiwgbWJlZHRsc194NTA5X2NydCAqLCBpbnQsIHVpbnQzMl90ICopLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF92cmZ5ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UpCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVjayB1c2FnZSBvZiBjZXJ0aWZpY2F0ZSBhZ2FpbnN0IGtleVVzYWdlIGV4dGVuc2lvbi4KKyAqCisgKiBccGFyYW0gY3J0ICAgICAgTGVhZiBjZXJ0aWZpY2F0ZSB1c2VkLgorICogXHBhcmFtIHVzYWdlICAgIEludGVuZGVkIHVzYWdlKHMpIChlZyBNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVAorICogICAgICAgICAgICAgICAgIGJlZm9yZSB1c2luZyB0aGUgY2VydGlmaWNhdGUgdG8gcGVyZm9ybSBhbiBSU0Ega2V5CisgKiAgICAgICAgICAgICAgICAgZXhjaGFuZ2UpLgorICoKKyAqIFxub3RlICAgICAgICAgICBFeGNlcHQgZm9yIGRlY2lwaGVyT25seSBhbmQgZW5jaXBoZXJPbmx5LCBhIGJpdCBzZXQgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgdXNhZ2UgYXJndW1lbnQgbWVhbnMgdGhpcyBiaXQgTVVTVCBiZSBzZXQgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUuIEZvciBkZWNpcGhlck9ubHkgYW5kIGVuY2lwaGVyT25seSwgaXQgbWVhbnMKKyAqICAgICAgICAgICAgICAgICB0aGF0IGJpdCBNQVkgYmUgc2V0LgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlzIHRoZXNlIHVzZXMgb2YgdGhlIGNlcnRpZmljYXRlIGFyZSBhbGxvd2VkLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgaWYgdGhlIGtleVVzYWdlIGV4dGVuc2lvbgorICogICAgICAgICAgICAgICAgIGlzIHByZXNlbnQgYnV0IGRvZXMgbm90IG1hdGNoIHRoZSB1c2FnZSBhcmd1bWVudC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgWW91IHNob3VsZCBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBvbiBsZWFmIGNlcnRpZmljYXRlcywgb24KKyAqICAgICAgICAgICAgICAgICAoaW50ZXJtZWRpYXRlKSBDQXMgdGhlIGtleVVzYWdlIGV4dGVuc2lvbiBpcyBhdXRvbWF0aWNhbGx5CisgKiAgICAgICAgICAgICAgICAgY2hlY2tlZCBieSBcYyBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeSgpLgorICovCitpbnQgbWJlZHRsc194NTA5X2NydF9jaGVja19rZXlfdXNhZ2UoIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKmNydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVzYWdlICk7CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRSkgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRSkKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrIHVzYWdlIG9mIGNlcnRpZmljYXRlIGFnYWluc3QgZXh0ZW50ZWRKZXlVc2FnZS4KKyAqCisgKiBccGFyYW0gY3J0ICAgICAgTGVhZiBjZXJ0aWZpY2F0ZSB1c2VkLgorICogXHBhcmFtIHVzYWdlX29pZCBJbnRlbmRlZCB1c2FnZSAoZWcgTUJFRFRMU19PSURfU0VSVkVSX0FVVEggb3IgTUJFRFRMU19PSURfQ0xJRU5UX0FVVEgpLgorICogXHBhcmFtIHVzYWdlX2xlbiBMZW5ndGggb2YgdXNhZ2Vfb2lkIChlZyBnaXZlbiBieSBNQkVEVExTX09JRF9TSVpFKCkpLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHRoaXMgdXNlIG9mIHRoZSBjZXJ0aWZpY2F0ZSBpcyBhbGxvd2VkLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgaWYgbm90LgorICoKKyAqIFxub3RlICAgICAgICAgICBVc3VhbGx5IG9ubHkgbWFrZXMgc2Vuc2Ugb24gbGVhZiBjZXJ0aWZpY2F0ZXMuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X2NoZWNrX2V4dGVuZGVkX2tleV91c2FnZSggY29uc3QgbWJlZHRsc194NTA5X2NydCAqY3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNhZ2Vfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzYWdlX2xlbiApOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UpICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFZlcmlmeSB0aGUgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBzdGF0dXMKKyAqCisgKiBccGFyYW0gY3J0ICAgICAgYSBjZXJ0aWZpY2F0ZSB0byBiZSB2ZXJpZmllZAorICogXHBhcmFtIGNybCAgICAgIHRoZSBDUkwgdG8gdmVyaWZ5IGFnYWluc3QKKyAqCisgKiBccmV0dXJuICAgICAgICAgMSBpZiB0aGUgY2VydGlmaWNhdGUgaXMgcmV2b2tlZCwgMCBvdGhlcndpc2UKKyAqCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X2lzX3Jldm9rZWQoIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKmNydCwgY29uc3QgbWJlZHRsc194NTA5X2NybCAqY3JsICk7CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgYSBjZXJ0aWZpY2F0ZSAoY2hhaW4pCisgKgorICogXHBhcmFtIGNydCAgICAgIENlcnRpZmljYXRlIGNoYWluIHRvIGluaXRpYWxpemUKKyAqLwordm9pZCBtYmVkdGxzX3g1MDlfY3J0X2luaXQoIG1iZWR0bHNfeDUwOV9jcnQgKmNydCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBVbmFsbG9jYXRlIGFsbCBjZXJ0aWZpY2F0ZSBkYXRhCisgKgorICogXHBhcmFtIGNydCAgICAgIENlcnRpZmljYXRlIGNoYWluIHRvIGZyZWUKKyAqLwordm9pZCBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIG1iZWR0bHNfeDUwOV9jcnQgKmNydCApOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisvKiBcfSBuYW1lICovCisvKiBcfSBhZGR0b2dyb3VwIHg1MDlfbW9kdWxlICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIGEgQ1JUIHdyaXRpbmcgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1JUIGNvbnRleHQgdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9pbml0KCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgdmVyaW9uIGZvciBhIENlcnRpZmljYXRlCisgKiAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IE1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8zCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDUlQgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSB2ZXJzaW9uICAgdmVyc2lvbiB0byBzZXQgKE1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8xLCBNQkVEVExTX1g1MDlfQ1JUX1ZFUlNJT05fMiBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9WRVJTSU9OXzMpCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF92ZXJzaW9uKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsIGludCB2ZXJzaW9uICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIHNlcmlhbCBudW1iZXIgZm9yIGEgQ2VydGlmaWNhdGUuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDUlQgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBzZXJpYWwgICAgc2VyaWFsIG51bWJlciB0byBzZXQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zZXJpYWwoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwgY29uc3QgbWJlZHRsc19tcGkgKnNlcmlhbCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHRoZSB2YWxpZGl0eSBwZXJpb2QgZm9yIGEgQ2VydGlmaWNhdGUKKyAqICAgICAgICAgICAgICAgICAgVGltZXN0YW1wcyBzaG91bGQgYmUgaW4gc3RyaW5nIGZvcm1hdCBmb3IgVVRDIHRpbWV6b25lCisgKiAgICAgICAgICAgICAgICAgIGkuZS4gIllZWVlNTUREaGhtbXNzIgorICogICAgICAgICAgICAgICAgICBlLmcuICIyMDEzMTIzMTIzNTk1OSIgZm9yIERlY2VtYmVyIDMxc3QgMjAxMworICogICAgICAgICAgICAgICAgICAgICAgIGF0IDIzOjU5OjU5CisgKgorICogXHBhcmFtIGN0eCAgICAgICBDUlQgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBub3RfYmVmb3JlICAgIG5vdF9iZWZvcmUgdGltZXN0YW1wCisgKiBccGFyYW0gbm90X2FmdGVyICAgICBub3RfYWZ0ZXIgdGltZXN0YW1wCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHRpbWVzdGFtcCB3YXMgcGFyc2VkIHN1Y2Nlc3NmdWxseSwgb3IKKyAqICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3ZhbGlkaXR5KCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsIGNvbnN0IGNoYXIgKm5vdF9iZWZvcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5vdF9hZnRlciApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHRoZSBpc3N1ZXIgbmFtZSBmb3IgYSBDZXJ0aWZpY2F0ZQorICogICAgICAgICAgICAgICAgICBJc3N1ZXIgbmFtZXMgc2hvdWxkIGNvbnRhaW4gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdAorICogICAgICAgICAgICAgICAgICBvZiBPSUQgdHlwZXMgYW5kIHZhbHVlczoKKyAqICAgICAgICAgICAgICAgICAgZS5nLiAiQz1VSyxPPUFSTSxDTj1tYmVkIFRMUyBDQSIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDUlQgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBpc3N1ZXJfbmFtZSAgIGlzc3VlciBuYW1lIHRvIHNldAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBpc3N1ZXIgbmFtZSB3YXMgcGFyc2VkIHN1Y2Nlc3NmdWxseSwgb3IKKyAqICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9uYW1lKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlzc3Vlcl9uYW1lICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIHN1YmplY3QgbmFtZSBmb3IgYSBDZXJ0aWZpY2F0ZQorICogICAgICAgICAgICAgICAgICBTdWJqZWN0IG5hbWVzIHNob3VsZCBjb250YWluIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QKKyAqICAgICAgICAgICAgICAgICAgb2YgT0lEIHR5cGVzIGFuZCB2YWx1ZXM6CisgKiAgICAgICAgICAgICAgICAgIGUuZy4gIkM9VUssTz1BUk0sQ049bWJlZCBUTFMgU2VydmVyIDEiCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ1JUIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gc3ViamVjdF9uYW1lICBzdWJqZWN0IG5hbWUgdG8gc2V0CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1YmplY3QgbmFtZSB3YXMgcGFyc2VkIHN1Y2Nlc3NmdWxseSwgb3IKKyAqICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3RfbmFtZSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3ViamVjdF9uYW1lICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIHN1YmplY3QgcHVibGljIGtleSBmb3IgdGhlIGNlcnRpZmljYXRlCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDUlQgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBrZXkgICAgICAgcHVibGljIGtleSB0byBpbmNsdWRlCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X2tleSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LCBtYmVkdGxzX3BrX2NvbnRleHQgKmtleSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHRoZSBpc3N1ZXIga2V5IHVzZWQgZm9yIHNpZ25pbmcgdGhlIGNlcnRpZmljYXRlCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDUlQgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBrZXkgICAgICAgcHJpdmF0ZSBrZXkgdG8gc2lnbiB3aXRoCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9pc3N1ZXJfa2V5KCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsIG1iZWR0bHNfcGtfY29udGV4dCAqa2V5ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIE1EIGFsZ29yaXRobSB0byB1c2UgZm9yIHRoZSBzaWduYXR1cmUKKyAqICAgICAgICAgICAgICAgICAgKGUuZy4gTUJFRFRMU19NRF9TSEExKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1JUIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gbWRfYWxnICAgIE1EIGFsZ29yaXRobSB0byB1c2UKKyAqLwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X21kX2FsZyggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdlbmVyaWMgZnVuY3Rpb24gdG8gYWRkIHRvIG9yIHJlcGxhY2UgYW4gZXh0ZW5zaW9uIGluIHRoZQorICogICAgICAgICAgICAgICAgICBDUlQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENSVCBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIG9pZCAgICAgICBPSUQgb2YgdGhlIGV4dGVuc2lvbgorICogXHBhcmFtIG9pZF9sZW4gICBsZW5ndGggb2YgdGhlIE9JRAorICogXHBhcmFtIGNyaXRpY2FsICBpZiB0aGUgZXh0ZW5zaW9uIGlzIGNyaXRpY2FsIChwZXIgdGhlIFJGQydzIGRlZmluaXRpb24pCisgKiBccGFyYW0gdmFsICAgICAgIHZhbHVlIG9mIHRoZSBleHRlbnNpb24gT0NURVQgU1RSSU5HCisgKiBccGFyYW0gdmFsX2xlbiAgIGxlbmd0aCBvZiB0aGUgdmFsdWUgZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2V4dGVuc2lvbiggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2lkLCBzaXplX3Qgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjcml0aWNhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCwgc2l6ZV90IHZhbF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgYmFzaWNDb25zdHJhaW50cyBleHRlbnNpb24gZm9yIGEgQ1JUCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDUlQgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBpc19jYSAgICAgaXMgdGhpcyBhIENBIGNlcnRpZmljYXRlCisgKiBccGFyYW0gbWF4X3BhdGhsZW4gICBtYXhpbXVtIGxlbmd0aCBvZiBjZXJ0aWZpY2F0ZSBjaGFpbnMgYmVsb3cgdGhpcworICogICAgICAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUgKG9ubHkgZm9yIENBIGNlcnRpZmljYXRlcywgLTEgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGlubGltaXRlZCkKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9iYXNpY19jb25zdHJhaW50cyggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfY2EsIGludCBtYXhfcGF0aGxlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIHN1YmplY3RLZXlJZGVudGlmaWVyIGV4dGVuc2lvbiBmb3IgYSBDUlQKKyAqICAgICAgICAgICAgICAgICAgUmVxdWlyZXMgdGhhdCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5KCkgaGFzIGJlZW4KKyAqICAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1JUIGNvbnRleHQgdG8gdXNlCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXlfaWRlbnRpZmllciggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIGF1dGhvcml0eUtleUlkZW50aWZpZXIgZXh0ZW5zaW9uIGZvciBhIENSVAorICogICAgICAgICAgICAgICAgICBSZXF1aXJlcyB0aGF0IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX2tleSgpIGhhcyBiZWVuCisgKiAgICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENSVCBjb250ZXh0IHRvIHVzZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2F1dGhvcml0eV9rZXlfaWRlbnRpZmllciggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4ICk7CisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgS2V5IFVzYWdlIEV4dGVuc2lvbiBmbGFncworICogICAgICAgICAgICAgICAgICAoZS5nLiBNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkUgfCBNQkVEVExTX1g1MDlfS1VfS0VZX0NFUlRfU0lHTikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENSVCBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGtleV91c2FnZSBrZXkgdXNhZ2UgZmxhZ3MgdG8gc2V0CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2tleV91c2FnZSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X3VzYWdlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIE5ldHNjYXBlIENlcnQgVHlwZSBmbGFncworICogICAgICAgICAgICAgICAgICAoZS5nLiBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9DTElFTlQgfCBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX0VNQUlMKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENSVCBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIG5zX2NlcnRfdHlwZSAgTmV0c2NhcGUgQ2VydCBUeXBlIGZsYWdzIHRvIHNldAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9uc19jZXJ0X3R5cGUoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbnNfY2VydF90eXBlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIHRoZSBjb250ZW50cyBvZiBhIENSVCB3cml0ZSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgICBDUlQgY29udGV4dCB0byBmcmVlCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3J0X2ZyZWUoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBidWlsdCB1cCBjZXJ0aWZpY2F0ZSB0byBhIFg1MDkgREVSIHN0cnVjdHVyZQorICogICAgICAgICAgICAgICAgICBOb3RlOiBkYXRhIGlzIHdyaXR0ZW4gYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyISBVc2UgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSB0byBkZXRlcm1pbmUgd2hlcmUgeW91IHNob3VsZCBzdGFydAorICogICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgYnVmZmVyCisgKgorICogXHBhcmFtIGN0eCAgICAgICBjZXJ0aWZpY2F0ZSB0byB3cml0ZSBhd2F5CisgKiBccGFyYW0gYnVmICAgICAgIGJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIHNpemUgICAgICBzaXplIG9mIHRoZSBidWZmZXIKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uIChmb3Igc2lnbmF0dXJlLCBzZWUgbm90ZSkKKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgbGVuZ3RoIG9mIGRhdGEgd3JpdHRlbiBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljCisgKiAgICAgICAgICAgICAgICAgIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIGZfcm5nIG1heSBiZSBOVUxMIGlmIFJTQSBpcyB1c2VkIGZvciBzaWduYXR1cmUgYW5kIHRoZQorICogICAgICAgICAgICAgICAgICBzaWduYXR1cmUgaXMgbWFkZSBvZmZsaW5lIChvdGhlcndpc2UgZl9ybmcgaXMgZGVzaXJhYmxlCisgKiAgICAgICAgICAgICAgICAgIGZvciBjb3VudGVybWVhc3VyZXMgYWdhaW5zdCB0aW1pbmcgYXR0YWNrcykuCisgKiAgICAgICAgICAgICAgICAgIEVDRFNBIHNpZ25hdHVyZXMgYWx3YXlzIHJlcXVpcmUgYSBub24tTlVMTCBmX3JuZy4KKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9kZXIoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGEgYnVpbHQgdXAgY2VydGlmaWNhdGUgdG8gYSBYNTA5IFBFTSBzdHJpbmcKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIGNlcnRpZmljYXRlIHRvIHdyaXRlIGF3YXkKKyAqIFxwYXJhbSBidWYgICAgICAgYnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24gKGZvciBzaWduYXR1cmUsIHNlZSBub3RlKQorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICAgZl9ybmcgbWF5IGJlIE5VTEwgaWYgUlNBIGlzIHVzZWQgZm9yIHNpZ25hdHVyZSBhbmQgdGhlCisgKiAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBpcyBtYWRlIG9mZmxpbmUgKG90aGVyd2lzZSBmX3JuZyBpcyBkZXNpcmFibGUKKyAqICAgICAgICAgICAgICAgICAgZm9yIGNvdW50ZXJtZWFzdXJlcyBhZ2FpbnN0IHRpbWluZyBhdHRhY2tzKS4KKyAqICAgICAgICAgICAgICAgICAgRUNEU0Egc2lnbmF0dXJlcyBhbHdheXMgcmVxdWlyZSBhIG5vbi1OVUxMIGZfcm5nLgorICovCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3BlbSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisjZW5kaWYgLyogTUJFRFRMU19QRU1fV1JJVEVfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogbWJlZHRsc194NTA5X2NydC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3g1MDlfY3NyLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3g1MDlfY3NyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5ODQzYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMveDUwOV9jc3IuaApAQCAtMCwwICsxLDI5OCBAQAorLyoqCisgKiBcZmlsZSB4NTA5X2Nzci5oCisgKgorICogXGJyaWVmIFguNTA5IGNlcnRpZmljYXRlIHNpZ25pbmcgcmVxdWVzdCBwYXJzaW5nIGFuZCB3cml0aW5nCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfWDUwOV9DU1JfSAorI2RlZmluZSBNQkVEVExTX1g1MDlfQ1NSX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlICJ4NTA5LmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYWRkdG9ncm91cCB4NTA5X21vZHVsZQorICogXHsgKi8KKworLyoqCisgKiBcbmFtZSBTdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgZm9yIFguNTA5IENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdHMgKENTUikKKyAqIFx7CisgKi8KKworLyoqCisgKiBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3QgKENTUikgc3RydWN0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3g1MDlfY3NyCit7CisgICAgbWJlZHRsc194NTA5X2J1ZiByYXc7ICAgICAgICAgICAvKio8IFRoZSByYXcgQ1NSIGRhdGEgKERFUikuICovCisgICAgbWJlZHRsc194NTA5X2J1ZiBjcmk7ICAgICAgICAgICAvKio8IFRoZSByYXcgQ2VydGlmaWNhdGVSZXF1ZXN0SW5mbyBib2R5IChERVIpLiAqLworCisgICAgaW50IHZlcnNpb247ICAgICAgICAgICAgLyoqPCBDU1IgdmVyc2lvbiAoMT12MSkuICovCisKKyAgICBtYmVkdGxzX3g1MDlfYnVmICBzdWJqZWN0X3JhdzsgIC8qKjwgVGhlIHJhdyBzdWJqZWN0IGRhdGEgKERFUikuICovCisgICAgbWJlZHRsc194NTA5X25hbWUgc3ViamVjdDsgICAgICAvKio8IFRoZSBwYXJzZWQgc3ViamVjdCBkYXRhIChuYW1lZCBpbmZvcm1hdGlvbiBvYmplY3QpLiAqLworCisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOyAgICAgICAgICAvKio8IENvbnRhaW5lciBmb3IgdGhlIHB1YmxpYyBrZXkgY29udGV4dC4gKi8KKworICAgIG1iZWR0bHNfeDUwOV9idWYgc2lnX29pZDsKKyAgICBtYmVkdGxzX3g1MDlfYnVmIHNpZzsKKyAgICBtYmVkdGxzX21kX3R5cGVfdCBzaWdfbWQ7ICAgICAgIC8qKjwgSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIE1EIGFsZ29yaXRobSBvZiB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobSwgZS5nLiBNQkVEVExTX01EX1NIQTI1NiAqLworICAgIG1iZWR0bHNfcGtfdHlwZV90IHNpZ19wazsgICAgICAgLyoqPCBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgUHVibGljIEtleSBhbGdvcml0aG0gb2YgdGhlIHNpZ25hdHVyZSBhbGdvcml0aG0sIGUuZy4gTUJFRFRMU19QS19SU0EgKi8KKyAgICB2b2lkICpzaWdfb3B0czsgICAgICAgICAvKio8IFNpZ25hdHVyZSBvcHRpb25zIHRvIGJlIHBhc3NlZCB0byBtYmVkdGxzX3BrX3ZlcmlmeV9leHQoKSwgZS5nLiBmb3IgUlNBU1NBLVBTUyAqLworfQorbWJlZHRsc194NTA5X2NzcjsKKworLyoqCisgKiBDb250YWluZXIgZm9yIHdyaXRpbmcgYSBDU1IKKyAqLwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc194NTA5d3JpdGVfY3NyCit7CisgICAgbWJlZHRsc19wa19jb250ZXh0ICprZXk7CisgICAgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKnN1YmplY3Q7CisgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnOworICAgIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpleHRlbnNpb25zOworfQorbWJlZHRsc194NTA5d3JpdGVfY3NyOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBMb2FkIGEgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0IChDU1IpIGluIERFUiBmb3JtYXQKKyAqCisgKiBcbm90ZSAgICAgICAgICAgQ1NSIGF0dHJpYnV0ZXMgKGlmIGFueSkgYXJlIGN1cnJlbnRseSBzaWxlbnRseSBpZ25vcmVkLgorICoKKyAqIFxwYXJhbSBjc3IgICAgICBDU1IgY29udGV4dCB0byBmaWxsCisgKiBccGFyYW0gYnVmICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIENSTCBkYXRhCisgKiBccGFyYW0gYnVmbGVuICAgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBYNTA5IGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZGVyKCBtYmVkdGxzX3g1MDlfY3NyICpjc3IsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTG9hZCBhIENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdCAoQ1NSKSwgREVSIG9yIFBFTSBmb3JtYXQKKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2VlIG5vdGVzIGZvciBcYyBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlX2RlcigpCisgKgorICogXHBhcmFtIGNzciAgICAgIENTUiBjb250ZXh0IHRvIGZpbGwKKyAqIFxwYXJhbSBidWYgICAgICBidWZmZXIgaG9sZGluZyB0aGUgQ1JMIGRhdGEKKyAqIFxwYXJhbSBidWZsZW4gICBzaXplIG9mIHRoZSBidWZmZXIKKyAqICAgICAgICAgICAgICAgICAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgZm9yIFBFTSBkYXRhKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgWDUwOSBvciBQRU0gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc194NTA5X2Nzcl9wYXJzZSggbWJlZHRsc194NTA5X2NzciAqY3NyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKy8qKgorICogXGJyaWVmICAgICAgICAgIExvYWQgYSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3QgKENTUikKKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2VlIG5vdGVzIGZvciBcYyBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlKCkKKyAqCisgKiBccGFyYW0gY3NyICAgICAgQ1NSIGNvbnRleHQgdG8gZmlsbAorICogXHBhcmFtIHBhdGggICAgIGZpbGVuYW1lIHRvIHJlYWQgdGhlIENTUiBmcm9tCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBYNTA5IG9yIFBFTSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlX2ZpbGUoIG1iZWR0bHNfeDUwOV9jc3IgKmNzciwgY29uc3QgY2hhciAqcGF0aCApOworI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmV0dXJucyBhbiBpbmZvcm1hdGlvbmFsIHN0cmluZyBhYm91dCB0aGUKKyAqICAgICAgICAgICAgICAgICBDU1IuCisgKgorICogXHBhcmFtIGJ1ZiAgICAgIEJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIHNpemUgICAgIE1heGltdW0gc2l6ZSBvZiBidWZmZXIKKyAqIFxwYXJhbSBwcmVmaXggICBBIGxpbmUgcHJlZml4CisgKiBccGFyYW0gY3NyICAgICAgVGhlIFg1MDkgQ1NSIHRvIHJlcHJlc2VudAorICoKKyAqIFxyZXR1cm4gICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgd3JpdHRlbiAobm90IGluY2x1ZGluZyB0aGUKKyAqICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIG51bCBieXRlKSwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc194NTA5X2Nzcl9pbmZvKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X2NzciAqY3NyICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgYSBDU1IKKyAqCisgKiBccGFyYW0gY3NyICAgICAgQ1NSIHRvIGluaXRpYWxpemUKKyAqLwordm9pZCBtYmVkdGxzX3g1MDlfY3NyX2luaXQoIG1iZWR0bHNfeDUwOV9jc3IgKmNzciApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBVbmFsbG9jYXRlIGFsbCBDU1IgZGF0YQorICoKKyAqIFxwYXJhbSBjc3IgICAgICBDU1IgdG8gZnJlZQorICovCit2b2lkIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggbWJlZHRsc194NTA5X2NzciAqY3NyICk7CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DICovCisKKy8qIFx9IG5hbWUgKi8KKy8qIFx9IGFkZHRvZ3JvdXAgeDUwOV9tb2R1bGUgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NTUl9XUklURV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEluaXRpYWxpemUgYSBDU1IgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1NSIGNvbnRleHQgdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9pbml0KCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHRoZSBzdWJqZWN0IG5hbWUgZm9yIGEgQ1NSCisgKiAgICAgICAgICAgICAgICAgIFN1YmplY3QgbmFtZXMgc2hvdWxkIGNvbnRhaW4gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdAorICogICAgICAgICAgICAgICAgICBvZiBPSUQgdHlwZXMgYW5kIHZhbHVlczoKKyAqICAgICAgICAgICAgICAgICAgZS5nLiAiQz1VSyxPPUFSTSxDTj1tYmVkIFRMUyBTZXJ2ZXIgMSIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDU1IgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBzdWJqZWN0X25hbWUgIHN1YmplY3QgbmFtZSB0byBzZXQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3ViamVjdCBuYW1lIHdhcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5LCBvcgorICogICAgICAgICAgICAgICAgICBhIHNwZWNpZmljIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfc3ViamVjdF9uYW1lKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN1YmplY3RfbmFtZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHRoZSBrZXkgZm9yIGEgQ1NSIChwdWJsaWMga2V5IHdpbGwgYmUgaW5jbHVkZWQsCisgKiAgICAgICAgICAgICAgICAgIHByaXZhdGUga2V5IHVzZWQgdG8gc2lnbiB0aGUgQ1NSIHdoZW4gd3JpdGluZyBpdCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENTUiBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGtleSAgICAgICBBc3ltZXRyaWMga2V5IHRvIGluY2x1ZGUKKyAqLwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2tleSggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsIG1iZWR0bHNfcGtfY29udGV4dCAqa2V5ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIE1EIGFsZ29yaXRobSB0byB1c2UgZm9yIHRoZSBzaWduYXR1cmUKKyAqICAgICAgICAgICAgICAgICAgKGUuZy4gTUJFRFRMU19NRF9TSEExKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1NSIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gbWRfYWxnICAgIE1EIGFsZ29yaXRobSB0byB1c2UKKyAqLwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X21kX2FsZyggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHRoZSBLZXkgVXNhZ2UgRXh0ZW5zaW9uIGZsYWdzCisgKiAgICAgICAgICAgICAgICAgIChlLmcuIE1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRSB8IE1CRURUTFNfWDUwOV9LVV9LRVlfQ0VSVF9TSUdOKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1NSIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0ga2V5X3VzYWdlIGtleSB1c2FnZSBmbGFncyB0byBzZXQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfa2V5X3VzYWdlKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwgdW5zaWduZWQgY2hhciBrZXlfdXNhZ2UgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgTmV0c2NhcGUgQ2VydCBUeXBlIGZsYWdzCisgKiAgICAgICAgICAgICAgICAgIChlLmcuIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX0NMSUVOVCB8IE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfRU1BSUwpCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ1NSIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gbnNfY2VydF90eXBlICBOZXRzY2FwZSBDZXJ0IFR5cGUgZmxhZ3MgdG8gc2V0CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X25zX2NlcnRfdHlwZSggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5zX2NlcnRfdHlwZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJpYyBmdW5jdGlvbiB0byBhZGQgdG8gb3IgcmVwbGFjZSBhbiBleHRlbnNpb24gaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgIENTUgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1NSIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gb2lkICAgICAgIE9JRCBvZiB0aGUgZXh0ZW5zaW9uCisgKiBccGFyYW0gb2lkX2xlbiAgIGxlbmd0aCBvZiB0aGUgT0lECisgKiBccGFyYW0gdmFsICAgICAgIHZhbHVlIG9mIHRoZSBleHRlbnNpb24gT0NURVQgU1RSSU5HCisgKiBccGFyYW0gdmFsX2xlbiAgIGxlbmd0aCBvZiB0aGUgdmFsdWUgZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2V4dGVuc2lvbiggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLCBzaXplX3QgdmFsX2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRnJlZSB0aGUgY29udGVudHMgb2YgYSBDU1IgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1NSIGNvbnRleHQgdG8gZnJlZQorICovCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9mcmVlKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBDU1IgKENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdCkgdG8gYQorICogICAgICAgICAgICAgICAgICBERVIgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGRhdGEgaXMgd3JpdHRlbiBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIhIFVzZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIHRvIGRldGVybWluZSB3aGVyZSB5b3Ugc2hvdWxkIHN0YXJ0CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBidWZmZXIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENTUiB0byB3cml0ZSBhd2F5CisgKiBccGFyYW0gYnVmICAgICAgIGJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIHNpemUgICAgICBzaXplIG9mIHRoZSBidWZmZXIKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uIChmb3Igc2lnbmF0dXJlLCBzZWUgbm90ZSkKKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgbGVuZ3RoIG9mIGRhdGEgd3JpdHRlbiBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljCisgKiAgICAgICAgICAgICAgICAgIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIGZfcm5nIG1heSBiZSBOVUxMIGlmIFJTQSBpcyB1c2VkIGZvciBzaWduYXR1cmUgYW5kIHRoZQorICogICAgICAgICAgICAgICAgICBzaWduYXR1cmUgaXMgbWFkZSBvZmZsaW5lIChvdGhlcndpc2UgZl9ybmcgaXMgZGVzaXJhYmxlCisgKiAgICAgICAgICAgICAgICAgIGZvciBjb3VudGVybWVhc3VyZXMgYWdhaW5zdCB0aW1pbmcgYXR0YWNrcykuCisgKiAgICAgICAgICAgICAgICAgIEVDRFNBIHNpZ25hdHVyZXMgYWx3YXlzIHJlcXVpcmUgYSBub24tTlVMTCBmX3JuZy4KKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9kZXIoIG1iZWR0bHNfeDUwOXdyaXRlX2NzciAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBDU1IgKENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdCkgdG8gYQorICogICAgICAgICAgICAgICAgICBQRU0gc3RyaW5nCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDU1IgdG8gd3JpdGUgYXdheQorICogXHBhcmFtIGJ1ZiAgICAgICBidWZmZXIgdG8gd3JpdGUgdG8KKyAqIFxwYXJhbSBzaXplICAgICAgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbiAoZm9yIHNpZ25hdHVyZSwgc2VlIG5vdGUpCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgICBmX3JuZyBtYXkgYmUgTlVMTCBpZiBSU0EgaXMgdXNlZCBmb3Igc2lnbmF0dXJlIGFuZCB0aGUKKyAqICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIGlzIG1hZGUgb2ZmbGluZSAob3RoZXJ3aXNlIGZfcm5nIGlzIGRlc2lyYWJsZQorICogICAgICAgICAgICAgICAgICBmb3IgY291bnRlcm1lYXN1cmVzIGFnYWluc3QgdGltaW5nIGF0dGFja3MpLgorICogICAgICAgICAgICAgICAgICBFQ0RTQSBzaWduYXR1cmVzIGFsd2F5cyByZXF1aXJlIGEgbm9uLU5VTEwgZl9ybmcuCisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfcGVtKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworI2VuZGlmIC8qIE1CRURUTFNfUEVNX1dSSVRFX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIG1iZWR0bHNfeDUwOV9jc3IuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy94dGVhLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3h0ZWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDczZjg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy94dGVhLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qKgorICogXGZpbGUgeHRlYS5oCisgKgorICogXGJyaWVmIFhURUEgYmxvY2sgY2lwaGVyICgzMi1iaXQpCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfWFRFQV9ICisjZGVmaW5lIE1CRURUTFNfWFRFQV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgTUJFRFRMU19YVEVBX0VOQ1JZUFQgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19YVEVBX0RFQ1JZUFQgICAgIDAKKworI2RlZmluZSBNQkVEVExTX0VSUl9YVEVBX0lOVkFMSURfSU5QVVRfTEVOR1RIICAgICAgICAgICAgIC0weDAwMjggIC8qKjwgVGhlIGRhdGEgaW5wdXQgaGFzIGFuIGludmFsaWQgbGVuZ3RoLiAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19YVEVBX0FMVCkKKy8vIFJlZ3VsYXIgaW1wbGVtZW50YXRpb24KKy8vCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgWFRFQSBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQzMl90IGtbNF07ICAgICAgIC8qITwga2V5ICovCit9CittYmVkdGxzX3h0ZWFfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBYVEVBIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgWFRFQSBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc194dGVhX2luaXQoIG1iZWR0bHNfeHRlYV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgWFRFQSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIFhURUEgY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc194dGVhX2ZyZWUoIG1iZWR0bHNfeHRlYV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgWFRFQSBrZXkgc2NoZWR1bGUKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgWFRFQSBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0ga2V5ICAgICAgdGhlIHNlY3JldCBrZXkKKyAqLwordm9pZCBtYmVkdGxzX3h0ZWFfc2V0dXAoIG1iZWR0bHNfeHRlYV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzE2XSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBYVEVBIGNpcGhlciBmdW5jdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICBYVEVBIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX1hURUFfRU5DUllQVCBvciBNQkVEVExTX1hURUFfREVDUllQVAorICogXHBhcmFtIGlucHV0ICAgIDgtYnl0ZSBpbnB1dCBibG9jaworICogXHBhcmFtIG91dHB1dCAgIDgtYnl0ZSBvdXRwdXQgYmxvY2sKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX3h0ZWFfY3J5cHRfZWNiKCBtYmVkdGxzX3h0ZWFfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFs4XSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbOF0gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisvKioKKyAqIFxicmllZiAgICAgICAgICBYVEVBIENCQyBjaXBoZXIgZnVuY3Rpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgWFRFQSBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19YVEVBX0VOQ1JZUFQgb3IgTUJFRFRMU19YVEVBX0RFQ1JZUFQKKyAqIFxwYXJhbSBsZW5ndGggICB0aGUgbGVuZ3RoIG9mIGlucHV0LCBtdWx0aXBsZSBvZiA4CisgKiBccGFyYW0gaXYgICAgICAgaW5pdGlhbGl6YXRpb24gdmVjdG9yIGZvciBDQkMgbW9kZQorICogXHBhcmFtIGlucHV0ICAgIGlucHV0IGJsb2NrCisgKiBccGFyYW0gb3V0cHV0ICAgb3V0cHV0IGJsb2NrCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9YVEVBX0lOVkFMSURfSU5QVVRfTEVOR1RIIGlmIHRoZSBsZW5ndGggJSA4ICE9IDAKKyAqLworaW50IG1iZWR0bHNfeHRlYV9jcnlwdF9jYmMoIG1iZWR0bHNfeHRlYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzhdLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0KTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZWxzZSAgLyogTUJFRFRMU19YVEVBX0FMVCAqLworI2luY2x1ZGUgInh0ZWFfYWx0LmgiCisjZW5kaWYgLyogTUJFRFRMU19YVEVBX0FMVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX3h0ZWFfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogeHRlYS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ODJkZGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE2MiBAQAorb3B0aW9uKFVTRV9TVEFUSUNfTUJFRFRMU19MSUJSQVJZICJCdWlsZCBtYmVkIFRMUyBzdGF0aWMgbGlicmFyeS4iIE9OKQorb3B0aW9uKFVTRV9TSEFSRURfTUJFRFRMU19MSUJSQVJZICJCdWlsZCBtYmVkIFRMUyBzaGFyZWQgbGlicmFyeS4iIE9GRikKK29wdGlvbihMSU5LX1dJVEhfUFRIUkVBRCAiRXhwbGljaXRseSBsaW5rIG1iZWQgVExTIGxpYnJhcnkgdG8gcHRocmVhZC4iIE9GRikKKworc2V0KHNyY19jcnlwdG8KKyAgICBhZXMuYworICAgIGFlc25pLmMKKyAgICBhcmM0LmMKKyAgICBhc24xcGFyc2UuYworICAgIGFzbjF3cml0ZS5jCisgICAgYmFzZTY0LmMKKyAgICBiaWdudW0uYworICAgIGJsb3dmaXNoLmMKKyAgICBjYW1lbGxpYS5jCisgICAgY2NtLmMKKyAgICBjaXBoZXIuYworICAgIGNpcGhlcl93cmFwLmMKKyAgICBjbWFjLmMKKyAgICBjdHJfZHJiZy5jCisgICAgZGVzLmMKKyAgICBkaG0uYworICAgIGVjZGguYworICAgIGVjZHNhLmMKKyAgICBlY2pwYWtlLmMKKyAgICBlY3AuYworICAgIGVjcF9jdXJ2ZXMuYworICAgIGVudHJvcHkuYworICAgIGVudHJvcHlfcG9sbC5jCisgICAgZXJyb3IuYworICAgIGdjbS5jCisgICAgaGF2ZWdlLmMKKyAgICBobWFjX2RyYmcuYworICAgIG1kLmMKKyAgICBtZDIuYworICAgIG1kNC5jCisgICAgbWQ1LmMKKyAgICBtZF93cmFwLmMKKyAgICBtZW1vcnlfYnVmZmVyX2FsbG9jLmMKKyAgICBvaWQuYworICAgIHBhZGxvY2suYworICAgIHBlbS5jCisgICAgcGsuYworICAgIHBrX3dyYXAuYworICAgIHBrY3MxMi5jCisgICAgcGtjczUuYworICAgIHBrcGFyc2UuYworICAgIHBrd3JpdGUuYworICAgIHBsYXRmb3JtLmMKKyAgICByaXBlbWQxNjAuYworICAgIHJzYS5jCisgICAgc2hhMS5jCisgICAgc2hhMjU2LmMKKyAgICBzaGE1MTIuYworICAgIHRocmVhZGluZy5jCisgICAgdGltaW5nLmMKKyAgICB2ZXJzaW9uLmMKKyAgICB2ZXJzaW9uX2ZlYXR1cmVzLmMKKyAgICB4dGVhLmMKKykKKworc2V0KHNyY194NTA5CisgICAgY2VydHMuYworICAgIHBrY3MxMS5jCisgICAgeDUwOS5jCisgICAgeDUwOV9jcmVhdGUuYworICAgIHg1MDlfY3JsLmMKKyAgICB4NTA5X2NydC5jCisgICAgeDUwOV9jc3IuYworICAgIHg1MDl3cml0ZV9jcnQuYworICAgIHg1MDl3cml0ZV9jc3IuYworKQorCitzZXQoc3JjX3RscworICAgIGRlYnVnLmMKKyAgICBuZXRfc29ja2V0cy5jCisgICAgc3NsX2NhY2hlLmMKKyAgICBzc2xfY2lwaGVyc3VpdGVzLmMKKyAgICBzc2xfY2xpLmMKKyAgICBzc2xfY29va2llLmMKKyAgICBzc2xfc3J2LmMKKyAgICBzc2xfdGlja2V0LmMKKyAgICBzc2xfdGxzLmMKKykKKworaWYoQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MpCisgICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyIpCitlbmRpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQykKKworaWYoQ01BS0VfQ09NUElMRVJfSVNfQ0xBTkcpCisgICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyAtV2RvY3VtZW50YXRpb24gLVduby1kb2N1bWVudGF0aW9uLWRlcHJlY2F0ZWQtc3luYyAtV3VucmVhY2hhYmxlLWNvZGUiKQorZW5kaWYoQ01BS0VfQ09NUElMRVJfSVNfQ0xBTkcpCisKK2lmKFdJTjMyKQorICAgIHNldChsaWJzICR7bGlic30gd3MyXzMyKQorZW5kaWYoV0lOMzIpCisKK2lmKFVTRV9QS0NTMTFfSEVMUEVSX0xJQlJBUlkpCisgICAgc2V0KGxpYnMgJHtsaWJzfSBwa2NzMTEtaGVscGVyKQorZW5kaWYoVVNFX1BLQ1MxMV9IRUxQRVJfTElCUkFSWSkKKworaWYoRU5BQkxFX1pMSUJfU1VQUE9SVCkKKyAgICBzZXQobGlicyAke2xpYnN9ICR7WkxJQl9MSUJSQVJJRVN9KQorZW5kaWYoRU5BQkxFX1pMSUJfU1VQUE9SVCkKKworaWYoTElOS19XSVRIX1BUSFJFQUQpCisgICAgc2V0KGxpYnMgJHtsaWJzfSBwdGhyZWFkKQorZW5kaWYoKQorCitpZiAoTk9UIFVTRV9TVEFUSUNfTUJFRFRMU19MSUJSQVJZIEFORCBOT1QgVVNFX1NIQVJFRF9NQkVEVExTX0xJQlJBUlkpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTmVlZCB0byBjaG9vc2Ugc3RhdGljIG9yIHNoYXJlZCBtYmVkdGxzIGJ1aWxkISIpCitlbmRpZihOT1QgVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkgQU5EIE5PVCBVU0VfU0hBUkVEX01CRURUTFNfTElCUkFSWSkKKworaWYoVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkgQU5EIFVTRV9TSEFSRURfTUJFRFRMU19MSUJSQVJZKQorICAgIHNldChtYmVkdGxzX3N0YXRpY190YXJnZXQgIm1iZWR0bHNfc3RhdGljIikKKyAgICBzZXQobWJlZHg1MDlfc3RhdGljX3RhcmdldCAibWJlZHg1MDlfc3RhdGljIikKKyAgICBzZXQobWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0ICJtYmVkY3J5cHRvX3N0YXRpYyIpCitlbHNlaWYoVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkpCisgICAgc2V0KG1iZWR0bHNfc3RhdGljX3RhcmdldCAibWJlZHRscyIpCisgICAgc2V0KG1iZWR4NTA5X3N0YXRpY190YXJnZXQgIm1iZWR4NTA5IikKKyAgICBzZXQobWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0ICJtYmVkY3J5cHRvIikKK2VuZGlmKCkKKworaWYoVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkpCisgICAgYWRkX2xpYnJhcnkoJHttYmVkY3J5cHRvX3N0YXRpY190YXJnZXR9IFNUQVRJQyAke3NyY19jcnlwdG99KQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke21iZWRjcnlwdG9fc3RhdGljX3RhcmdldH0gUFJPUEVSVElFUyBPVVRQVVRfTkFNRSBtYmVkY3J5cHRvKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke21iZWRjcnlwdG9fc3RhdGljX3RhcmdldH0gJHtsaWJzfSkKKworICAgIGFkZF9saWJyYXJ5KCR7bWJlZHg1MDlfc3RhdGljX3RhcmdldH0gU1RBVElDICR7c3JjX3g1MDl9KQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke21iZWR4NTA5X3N0YXRpY190YXJnZXR9IFBST1BFUlRJRVMgT1VUUFVUX05BTUUgbWJlZHg1MDkpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7bWJlZHg1MDlfc3RhdGljX3RhcmdldH0gJHtsaWJzfSAke21iZWRjcnlwdG9fc3RhdGljX3RhcmdldH0pCisKKyAgICBhZGRfbGlicmFyeSgke21iZWR0bHNfc3RhdGljX3RhcmdldH0gU1RBVElDICR7c3JjX3Rsc30pCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7bWJlZHRsc19zdGF0aWNfdGFyZ2V0fSBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIG1iZWR0bHMpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7bWJlZHRsc19zdGF0aWNfdGFyZ2V0fSAke2xpYnN9ICR7bWJlZHg1MDlfc3RhdGljX3RhcmdldH0pCisKKyAgICBpbnN0YWxsKFRBUkdFVFMgJHttYmVkdGxzX3N0YXRpY190YXJnZXR9ICR7bWJlZHg1MDlfc3RhdGljX3RhcmdldH0gJHttYmVkY3J5cHRvX3N0YXRpY190YXJnZXR9CisgICAgICAgICAgICBERVNUSU5BVElPTiAke0xJQl9JTlNUQUxMX0RJUn0KKyAgICAgICAgICAgIFBFUk1JU1NJT05TIE9XTkVSX1JFQUQgT1dORVJfV1JJVEUgT1dORVJfRVhFQ1VURSBHUk9VUF9SRUFEIEdST1VQX0VYRUNVVEUgV09STERfUkVBRCBXT1JMRF9FWEVDVVRFKQorZW5kaWYoVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkpCisKK2lmKFVTRV9TSEFSRURfTUJFRFRMU19MSUJSQVJZKQorICAgIGFkZF9saWJyYXJ5KG1iZWRjcnlwdG8gU0hBUkVEICR7c3JjX2NyeXB0b30pCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKG1iZWRjcnlwdG8gUFJPUEVSVElFUyBWRVJTSU9OIDIuNC4xIFNPVkVSU0lPTiAwKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhtYmVkY3J5cHRvICR7bGlic30pCisKKyAgICBhZGRfbGlicmFyeShtYmVkeDUwOSBTSEFSRUQgJHtzcmNfeDUwOX0pCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKG1iZWR4NTA5IFBST1BFUlRJRVMgVkVSU0lPTiAyLjQuMSBTT1ZFUlNJT04gMCkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMobWJlZHg1MDkgJHtsaWJzfSBtYmVkY3J5cHRvKQorCisgICAgYWRkX2xpYnJhcnkobWJlZHRscyBTSEFSRUQgJHtzcmNfdGxzfSkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMobWJlZHRscyBQUk9QRVJUSUVTIFZFUlNJT04gMi40LjEgU09WRVJTSU9OIDEwKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhtYmVkdGxzICR7bGlic30gbWJlZHg1MDkpCisKKyAgICBpbnN0YWxsKFRBUkdFVFMgbWJlZHRscyBtYmVkeDUwOSBtYmVkY3J5cHRvCisgICAgICAgICAgICBERVNUSU5BVElPTiAke0xJQl9JTlNUQUxMX0RJUn0KKyAgICAgICAgICAgIFBFUk1JU1NJT05TIE9XTkVSX1JFQUQgT1dORVJfV1JJVEUgT1dORVJfRVhFQ1VURSBHUk9VUF9SRUFEIEdST1VQX0VYRUNVVEUgV09STERfUkVBRCBXT1JMRF9FWEVDVVRFKQorZW5kaWYoVVNFX1NIQVJFRF9NQkVEVExTX0xJQlJBUlkpCisKK2FkZF9jdXN0b21fdGFyZ2V0KGxpYiBERVBFTkRTIG1iZWRjcnlwdG8gbWJlZHg1MDkgbWJlZHRscykKK2lmKFVTRV9TVEFUSUNfTUJFRFRMU19MSUJSQVJZIEFORCBVU0VfU0hBUkVEX01CRURUTFNfTElCUkFSWSkKKyAgICBhZGRfZGVwZW5kZW5jaWVzKGxpYiBtYmVkY3J5cHRvX3N0YXRpYyBtYmVkeDUwOV9zdGF0aWMgbWJlZHRsc19zdGF0aWMpCitlbmRpZigpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9NYWtlZmlsZSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZjkyMzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9NYWtlZmlsZQpAQCAtMCwwICsxLDE2OSBAQAorCisjIEFsc28gc2VlICJpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgiCisKK0NGTEFHUwk/PSAtTzIKK1dBUk5JTkdfQ0ZMQUdTID89ICAtV2FsbCAtVyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudAorTERGTEFHUyA/PQorCitMT0NBTF9DRkxBR1MgPSAkKFdBUk5JTkdfQ0ZMQUdTKSAtSS4uL2luY2x1ZGUgLURfRklMRV9PRkZTRVRfQklUUz02NAorTE9DQUxfTERGTEFHUyA9CisKK2lmZGVmIERFQlVHCitMT0NBTF9DRkxBR1MgKz0gLWczCitlbmRpZgorCisjIE1pY3JvQmxhemUgc3BlY2lmaWMgb3B0aW9uczoKKyMgQ0ZMQUdTICs9IC1tbm8teGwtc29mdC1tdWwgLW14bC1iYXJyZWwtc2hpZnQKKworIyBUbyBjb21waWxlIG9uIFBsYW45OgorIyBDRkxBR1MgKz0gLURfQlNEX0VYVEVOU0lPTgorCisjIGlmIHdlcmUgcnVubmluZyBvbiBXaW5kb3dzIGJ1aWxkIGZvciBXaW5kb3dzCitpZmRlZiBXSU5ET1dTCitXSU5ET1dTX0JVSUxEPTEKK2VuZGlmCisKKyMgVG8gY29tcGlsZSBhcyBhIHNoYXJlZCBsaWJyYXJ5OgoraWZkZWYgU0hBUkVECisjIGFsbCBjb2RlIGlzIHBvc2l0aW9uLWluZGVwIHdpdGggbWluZ3csIGF2b2lkIHdhcm5pbmcgYWJvdXQgdXNlbGVzcyBmbGFnCitpZm5kZWYgV0lORE9XU19CVUlMRAorTE9DQUxfQ0ZMQUdTICs9IC1mUElDIC1mcGljCitlbmRpZgorZW5kaWYKKworU09FWFRfVExTPXNvLjEwCitTT0VYVF9YNTA5PXNvLjAKK1NPRVhUX0NSWVBUTz1zby4wCisKK0RMRVhUPXNvCisjIE9TWCBzaGFyZWQgbGlicmFyeSBleHRlbnNpb246CisjIERMRVhUPWR5bGliCisKKyMgV2luZG93cyBzaGFyZWQgbGlicmFyeSBleHRlbnNpb246CitpZmRlZiBXSU5ET1dTX0JVSUxECitETEVYVD1kbGwKK2VuZGlmCisKK09CSlNfQ1JZUFRPPQlhZXMubwkJYWVzbmkubwkJYXJjNC5vCQlcCisJCWFzbjFwYXJzZS5vCWFzbjF3cml0ZS5vCWJhc2U2NC5vCVwKKwkJYmlnbnVtLm8JYmxvd2Zpc2gubwljYW1lbGxpYS5vCVwKKwkJY2NtLm8JCWNpcGhlci5vCWNpcGhlcl93cmFwLm8JXAorCQljbWFjLm8JCWN0cl9kcmJnLm8JZGVzLm8JCVwKKwkJZGhtLm8JCWVjZGgubwkJZWNkc2EubwkJXAorCQllY2pwYWtlLm8JZWNwLm8JCQkJXAorCQllY3BfY3VydmVzLm8JZW50cm9weS5vCWVudHJvcHlfcG9sbC5vCVwKKwkJZXJyb3IubwkJZ2NtLm8JCWhhdmVnZS5vCVwKKwkJaG1hY19kcmJnLm8JbWQubwkJbWQyLm8JCVwKKwkJbWQ0Lm8JCW1kNS5vCQltZF93cmFwLm8JXAorCQltZW1vcnlfYnVmZmVyX2FsbG9jLm8JCW9pZC5vCQlcCisJCXBhZGxvY2subwlwZW0ubwkJcGsubwkJXAorCQlwa193cmFwLm8JcGtjczEyLm8JcGtjczUubwkJXAorCQlwa3BhcnNlLm8JcGt3cml0ZS5vCXBsYXRmb3JtLm8JXAorCQlyaXBlbWQxNjAubwlyc2EubwkJc2hhMS5vCQlcCisJCXNoYTI1Ni5vCXNoYTUxMi5vCXRocmVhZGluZy5vCVwKKwkJdGltaW5nLm8JdmVyc2lvbi5vCQkJXAorCQl2ZXJzaW9uX2ZlYXR1cmVzLm8JCXh0ZWEubworCitPQkpTX1g1MDk9CWNlcnRzLm8JCXBrY3MxMS5vCXg1MDkubwkJXAorCQl4NTA5X2NyZWF0ZS5vCXg1MDlfY3JsLm8JeDUwOV9jcnQubwlcCisJCXg1MDlfY3NyLm8JeDUwOXdyaXRlX2NydC5vCXg1MDl3cml0ZV9jc3IubworCitPQkpTX1RMUz0JZGVidWcubwkJbmV0X3NvY2tldHMubwkJXAorCQlzc2xfY2FjaGUubwlzc2xfY2lwaGVyc3VpdGVzLm8JXAorCQlzc2xfY2xpLm8Jc3NsX2Nvb2tpZS5vCQlcCisJCXNzbF9zcnYubwlzc2xfdGlja2V0Lm8JCVwKKwkJc3NsX3Rscy5vCisKKy5TSUxFTlQ6CisKKy5QSE9OWTogYWxsIHN0YXRpYyBzaGFyZWQgY2xlYW4KKworaWZuZGVmIFNIQVJFRAorYWxsOiBzdGF0aWMKK2Vsc2UKK2FsbDogc2hhcmVkIHN0YXRpYworZW5kaWYKKworc3RhdGljOiBsaWJtYmVkY3J5cHRvLmEgbGlibWJlZHg1MDkuYSBsaWJtYmVkdGxzLmEKKworc2hhcmVkOiBsaWJtYmVkY3J5cHRvLiQoRExFWFQpIGxpYm1iZWR4NTA5LiQoRExFWFQpIGxpYm1iZWR0bHMuJChETEVYVCkKKworIyB0bHMKK2xpYm1iZWR0bHMuYTogJChPQkpTX1RMUykKKwllY2hvICIgIEFSICAgICRAIgorCSQoQVIpIC1yYyAkQCAkKE9CSlNfVExTKQorCWVjaG8gIiAgUkwgICAgJEAiCisJJChBUikgLXMgJEAKKworbGlibWJlZHRscy4kKFNPRVhUX1RMUyk6ICQoT0JKU19UTFMpIGxpYm1iZWR4NTA5LnNvCisJZWNobyAiICBMRCAgICAkQCIKKwkkKENDKSAtc2hhcmVkIC1XbCwtc29uYW1lLCRAIC1MLiAtbG1iZWRjcnlwdG8gLWxtYmVkeDUwOSAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChPQkpTX1RMUykKKworbGlibWJlZHRscy5zbzogbGlibWJlZHRscy4kKFNPRVhUX1RMUykKKwllY2hvICIgIExOICAgICRAIC0+ICQ8IgorCWxuIC1zZiAkPCAkQAorCitsaWJtYmVkdGxzLmR5bGliOiAkKE9CSlNfVExTKQorCWVjaG8gIiAgTEQgICAgJEAiCisJJChDQykgLWR5bmFtaWNsaWIgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRAICQoT0JKU19UTFMpCisKK2xpYm1iZWR0bHMuZGxsOiAkKE9CSlNfVExTKSBsaWJtYmVkeDUwOS5kbGwKKwllY2hvICIgIExEICAgICRAIgorCSQoQ0MpIC1zaGFyZWQgLVdsLC1zb25hbWUsJEAgLVdsLC0tb3V0LWltcGxpYiwkQC5hIC1vICRAICQoT0JKU19UTFMpIC1sd3MyXzMyIC1sd2lubW0gLWxnZGkzMiAtTC4gLWxtYmVkY3J5cHRvIC1sbWJlZHg1MDkgLXN0YXRpYy1saWJnY2MgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpCisKKyMgeDUwOQorbGlibWJlZHg1MDkuYTogJChPQkpTX1g1MDkpCisJZWNobyAiICBBUiAgICAkQCIKKwkkKEFSKSAtcmMgJEAgJChPQkpTX1g1MDkpCisJZWNobyAiICBSTCAgICAkQCIKKwkkKEFSKSAtcyAkQAorCitsaWJtYmVkeDUwOS4kKFNPRVhUX1g1MDkpOiAkKE9CSlNfWDUwOSkgbGlibWJlZGNyeXB0by5zbworCWVjaG8gIiAgTEQgICAgJEAiCisJJChDQykgLXNoYXJlZCAtV2wsLXNvbmFtZSwkQCAtTC4gLWxtYmVkY3J5cHRvICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKE9CSlNfWDUwOSkKKworbGlibWJlZHg1MDkuc286IGxpYm1iZWR4NTA5LiQoU09FWFRfWDUwOSkKKwllY2hvICIgIExOICAgICRAIC0+ICQ8IgorCWxuIC1zZiAkPCAkQAorCitsaWJtYmVkeDUwOS5keWxpYjogJChPQkpTX1g1MDkpCisJZWNobyAiICBMRCAgICAkQCIKKwkkKENDKSAtZHluYW1pY2xpYiAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChPQkpTX1g1MDkpCisKK2xpYm1iZWR4NTA5LmRsbDogJChPQkpTX1g1MDkpIGxpYm1iZWRjcnlwdG8uZGxsCisJZWNobyAiICBMRCAgICAkQCIKKwkkKENDKSAtc2hhcmVkIC1XbCwtc29uYW1lLCRAIC1XbCwtLW91dC1pbXBsaWIsJEAuYSAtbyAkQCAkKE9CSlNfWDUwOSkgLWx3czJfMzIgLWx3aW5tbSAtbGdkaTMyIC1MLiAtbG1iZWRjcnlwdG8gLXN0YXRpYy1saWJnY2MgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpCisKKyMgY3J5cHRvCitsaWJtYmVkY3J5cHRvLmE6ICQoT0JKU19DUllQVE8pCisJZWNobyAiICBBUiAgICAkQCIKKwkkKEFSKSAtcmMgJEAgJChPQkpTX0NSWVBUTykKKwllY2hvICIgIFJMICAgICRAIgorCSQoQVIpIC1zICRACisKK2xpYm1iZWRjcnlwdG8uJChTT0VYVF9DUllQVE8pOiAkKE9CSlNfQ1JZUFRPKQorCWVjaG8gIiAgTEQgICAgJEAiCisJJChDQykgLXNoYXJlZCAtV2wsLXNvbmFtZSwkQCAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChPQkpTX0NSWVBUTykKKworbGlibWJlZGNyeXB0by5zbzogbGlibWJlZGNyeXB0by4kKFNPRVhUX0NSWVBUTykKKwllY2hvICIgIExOICAgICRAIC0+ICQ8IgorCWxuIC1zZiAkPCAkQAorCitsaWJtYmVkY3J5cHRvLmR5bGliOiAkKE9CSlNfQ1JZUFRPKQorCWVjaG8gIiAgTEQgICAgJEAiCisJJChDQykgLWR5bmFtaWNsaWIgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRAICQoT0JKU19DUllQVE8pCisKK2xpYm1iZWRjcnlwdG8uZGxsOiAkKE9CSlNfQ1JZUFRPKQorCWVjaG8gIiAgTEQgICAgJEAiCisJJChDQykgLXNoYXJlZCAtV2wsLXNvbmFtZSwkQCAtV2wsLS1vdXQtaW1wbGliLCRALmEgLW8gJEAgJChPQkpTX0NSWVBUTykgLWx3czJfMzIgLWx3aW5tbSAtbGdkaTMyIC1zdGF0aWMtbGliZ2NjICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKQorCisuYy5vOgorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAkPAorCitjbGVhbjoKK2lmbmRlZiBXSU5ET1dTCisJcm0gLWYgKi5vIGxpYm1iZWQqCitlbHNlCisJZGVsIC9RIC9GICoubyBsaWJtYmVkKgorZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2Flcy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4NmRlZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2Flcy5jCkBAIC0wLDAgKzEsMTQ5MiBAQAorLyoKKyAqICBGSVBTLTE5NyBjb21wbGlhbnQgQUVTIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBBRVMgYmxvY2sgY2lwaGVyIHdhcyBkZXNpZ25lZCBieSBWaW5jZW50IFJpam1lbiBhbmQgSm9hbiBEYWVtZW4uCisgKgorICogIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2VuY3J5cHRpb24vYWVzL3Jpam5kYWVsL1Jpam5kYWVsLnBkZgorICogIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9maXBzL2ZpcHMxOTcvZmlwcy0xOTcucGRmCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibWJlZHRscy9hZXMuaCIKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEFETE9DS19DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGFkbG9jay5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU05JX0MpCisjaW5jbHVkZSAibWJlZHRscy9hZXNuaS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQUVTX0FMVCkKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyKil2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiAzMi1iaXQgaW50ZWdlciBtYW5pcHVsYXRpb24gbWFjcm9zIChsaXR0bGUgZW5kaWFuKQorICovCisjaWZuZGVmIEdFVF9VSU5UMzJfTEUKKyNkZWZpbmUgR0VUX1VJTlQzMl9MRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKG4pID0gKCAodWludDMyX3QpIChiKVsoaSkgICAgXSAgICAgICApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDFdIDw8ICA4ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMl0gPDwgMTYgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAzXSA8PCAyNCApOyAgICAgICAgICAgIFwKK30KKyNlbmRpZgorCisjaWZuZGVmIFBVVF9VSU5UMzJfTEUKKyNkZWZpbmUgUFVUX1VJTlQzMl9MRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChiKVsoaSkgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pICAgICAgICkgJiAweEZGICk7ICAgIFwKKyAgICAoYilbKGkpICsgMV0gPSAodW5zaWduZWQgY2hhcikgKCAoIChuKSA+PiAgOCApICYgMHhGRiApOyAgICBcCisgICAgKGIpWyhpKSArIDJdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgPj4gMTYgKSAmIDB4RkYgKTsgICAgXAorICAgIChiKVsoaSkgKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pID4+IDI0ICkgJiAweEZGICk7ICAgIFwKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BBRExPQ0tfQykgJiYgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggZGVmaW5lZChNQkVEVExTX0hBVkVfWDg2KSB8fCBkZWZpbmVkKE1CRURUTFNfUEFETE9DS19BTElHTjE2KSApCitzdGF0aWMgaW50IGFlc19wYWRsb2NrX2FjZSA9IC0xOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX1JPTV9UQUJMRVMpCisvKgorICogRm9yd2FyZCBTLWJveAorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBGU2JbMjU2XSA9Cit7CisgICAgMHg2MywgMHg3QywgMHg3NywgMHg3QiwgMHhGMiwgMHg2QiwgMHg2RiwgMHhDNSwKKyAgICAweDMwLCAweDAxLCAweDY3LCAweDJCLCAweEZFLCAweEQ3LCAweEFCLCAweDc2LAorICAgIDB4Q0EsIDB4ODIsIDB4QzksIDB4N0QsIDB4RkEsIDB4NTksIDB4NDcsIDB4RjAsCisgICAgMHhBRCwgMHhENCwgMHhBMiwgMHhBRiwgMHg5QywgMHhBNCwgMHg3MiwgMHhDMCwKKyAgICAweEI3LCAweEZELCAweDkzLCAweDI2LCAweDM2LCAweDNGLCAweEY3LCAweENDLAorICAgIDB4MzQsIDB4QTUsIDB4RTUsIDB4RjEsIDB4NzEsIDB4RDgsIDB4MzEsIDB4MTUsCisgICAgMHgwNCwgMHhDNywgMHgyMywgMHhDMywgMHgxOCwgMHg5NiwgMHgwNSwgMHg5QSwKKyAgICAweDA3LCAweDEyLCAweDgwLCAweEUyLCAweEVCLCAweDI3LCAweEIyLCAweDc1LAorICAgIDB4MDksIDB4ODMsIDB4MkMsIDB4MUEsIDB4MUIsIDB4NkUsIDB4NUEsIDB4QTAsCisgICAgMHg1MiwgMHgzQiwgMHhENiwgMHhCMywgMHgyOSwgMHhFMywgMHgyRiwgMHg4NCwKKyAgICAweDUzLCAweEQxLCAweDAwLCAweEVELCAweDIwLCAweEZDLCAweEIxLCAweDVCLAorICAgIDB4NkEsIDB4Q0IsIDB4QkUsIDB4MzksIDB4NEEsIDB4NEMsIDB4NTgsIDB4Q0YsCisgICAgMHhEMCwgMHhFRiwgMHhBQSwgMHhGQiwgMHg0MywgMHg0RCwgMHgzMywgMHg4NSwKKyAgICAweDQ1LCAweEY5LCAweDAyLCAweDdGLCAweDUwLCAweDNDLCAweDlGLCAweEE4LAorICAgIDB4NTEsIDB4QTMsIDB4NDAsIDB4OEYsIDB4OTIsIDB4OUQsIDB4MzgsIDB4RjUsCisgICAgMHhCQywgMHhCNiwgMHhEQSwgMHgyMSwgMHgxMCwgMHhGRiwgMHhGMywgMHhEMiwKKyAgICAweENELCAweDBDLCAweDEzLCAweEVDLCAweDVGLCAweDk3LCAweDQ0LCAweDE3LAorICAgIDB4QzQsIDB4QTcsIDB4N0UsIDB4M0QsIDB4NjQsIDB4NUQsIDB4MTksIDB4NzMsCisgICAgMHg2MCwgMHg4MSwgMHg0RiwgMHhEQywgMHgyMiwgMHgyQSwgMHg5MCwgMHg4OCwKKyAgICAweDQ2LCAweEVFLCAweEI4LCAweDE0LCAweERFLCAweDVFLCAweDBCLCAweERCLAorICAgIDB4RTAsIDB4MzIsIDB4M0EsIDB4MEEsIDB4NDksIDB4MDYsIDB4MjQsIDB4NUMsCisgICAgMHhDMiwgMHhEMywgMHhBQywgMHg2MiwgMHg5MSwgMHg5NSwgMHhFNCwgMHg3OSwKKyAgICAweEU3LCAweEM4LCAweDM3LCAweDZELCAweDhELCAweEQ1LCAweDRFLCAweEE5LAorICAgIDB4NkMsIDB4NTYsIDB4RjQsIDB4RUEsIDB4NjUsIDB4N0EsIDB4QUUsIDB4MDgsCisgICAgMHhCQSwgMHg3OCwgMHgyNSwgMHgyRSwgMHgxQywgMHhBNiwgMHhCNCwgMHhDNiwKKyAgICAweEU4LCAweERELCAweDc0LCAweDFGLCAweDRCLCAweEJELCAweDhCLCAweDhBLAorICAgIDB4NzAsIDB4M0UsIDB4QjUsIDB4NjYsIDB4NDgsIDB4MDMsIDB4RjYsIDB4MEUsCisgICAgMHg2MSwgMHgzNSwgMHg1NywgMHhCOSwgMHg4NiwgMHhDMSwgMHgxRCwgMHg5RSwKKyAgICAweEUxLCAweEY4LCAweDk4LCAweDExLCAweDY5LCAweEQ5LCAweDhFLCAweDk0LAorICAgIDB4OUIsIDB4MUUsIDB4ODcsIDB4RTksIDB4Q0UsIDB4NTUsIDB4MjgsIDB4REYsCisgICAgMHg4QywgMHhBMSwgMHg4OSwgMHgwRCwgMHhCRiwgMHhFNiwgMHg0MiwgMHg2OCwKKyAgICAweDQxLCAweDk5LCAweDJELCAweDBGLCAweEIwLCAweDU0LCAweEJCLCAweDE2Cit9OworCisvKgorICogRm9yd2FyZCB0YWJsZXMKKyAqLworI2RlZmluZSBGVCBcCitcCisgICAgVihBNSw2Myw2MyxDNiksIFYoODQsN0MsN0MsRjgpLCBWKDk5LDc3LDc3LEVFKSwgVig4RCw3Qiw3QixGNiksIFwKKyAgICBWKDBELEYyLEYyLEZGKSwgVihCRCw2Qiw2QixENiksIFYoQjEsNkYsNkYsREUpLCBWKDU0LEM1LEM1LDkxKSwgXAorICAgIFYoNTAsMzAsMzAsNjApLCBWKDAzLDAxLDAxLDAyKSwgVihBOSw2Nyw2NyxDRSksIFYoN0QsMkIsMkIsNTYpLCBcCisgICAgVigxOSxGRSxGRSxFNyksIFYoNjIsRDcsRDcsQjUpLCBWKEU2LEFCLEFCLDREKSwgVig5QSw3Niw3NixFQyksIFwKKyAgICBWKDQ1LENBLENBLDhGKSwgVig5RCw4Miw4MiwxRiksIFYoNDAsQzksQzksODkpLCBWKDg3LDdELDdELEZBKSwgXAorICAgIFYoMTUsRkEsRkEsRUYpLCBWKEVCLDU5LDU5LEIyKSwgVihDOSw0Nyw0Nyw4RSksIFYoMEIsRjAsRjAsRkIpLCBcCisgICAgVihFQyxBRCxBRCw0MSksIFYoNjcsRDQsRDQsQjMpLCBWKEZELEEyLEEyLDVGKSwgVihFQSxBRixBRiw0NSksIFwKKyAgICBWKEJGLDlDLDlDLDIzKSwgVihGNyxBNCxBNCw1MyksIFYoOTYsNzIsNzIsRTQpLCBWKDVCLEMwLEMwLDlCKSwgXAorICAgIFYoQzIsQjcsQjcsNzUpLCBWKDFDLEZELEZELEUxKSwgVihBRSw5Myw5MywzRCksIFYoNkEsMjYsMjYsNEMpLCBcCisgICAgVig1QSwzNiwzNiw2QyksIFYoNDEsM0YsM0YsN0UpLCBWKDAyLEY3LEY3LEY1KSwgVig0RixDQyxDQyw4MyksIFwKKyAgICBWKDVDLDM0LDM0LDY4KSwgVihGNCxBNSxBNSw1MSksIFYoMzQsRTUsRTUsRDEpLCBWKDA4LEYxLEYxLEY5KSwgXAorICAgIFYoOTMsNzEsNzEsRTIpLCBWKDczLEQ4LEQ4LEFCKSwgVig1MywzMSwzMSw2MiksIFYoM0YsMTUsMTUsMkEpLCBcCisgICAgVigwQywwNCwwNCwwOCksIFYoNTIsQzcsQzcsOTUpLCBWKDY1LDIzLDIzLDQ2KSwgVig1RSxDMyxDMyw5RCksIFwKKyAgICBWKDI4LDE4LDE4LDMwKSwgVihBMSw5Niw5NiwzNyksIFYoMEYsMDUsMDUsMEEpLCBWKEI1LDlBLDlBLDJGKSwgXAorICAgIFYoMDksMDcsMDcsMEUpLCBWKDM2LDEyLDEyLDI0KSwgVig5Qiw4MCw4MCwxQiksIFYoM0QsRTIsRTIsREYpLCBcCisgICAgVigyNixFQixFQixDRCksIFYoNjksMjcsMjcsNEUpLCBWKENELEIyLEIyLDdGKSwgVig5Riw3NSw3NSxFQSksIFwKKyAgICBWKDFCLDA5LDA5LDEyKSwgVig5RSw4Myw4MywxRCksIFYoNzQsMkMsMkMsNTgpLCBWKDJFLDFBLDFBLDM0KSwgXAorICAgIFYoMkQsMUIsMUIsMzYpLCBWKEIyLDZFLDZFLERDKSwgVihFRSw1QSw1QSxCNCksIFYoRkIsQTAsQTAsNUIpLCBcCisgICAgVihGNiw1Miw1MixBNCksIFYoNEQsM0IsM0IsNzYpLCBWKDYxLEQ2LEQ2LEI3KSwgVihDRSxCMyxCMyw3RCksIFwKKyAgICBWKDdCLDI5LDI5LDUyKSwgVigzRSxFMyxFMyxERCksIFYoNzEsMkYsMkYsNUUpLCBWKDk3LDg0LDg0LDEzKSwgXAorICAgIFYoRjUsNTMsNTMsQTYpLCBWKDY4LEQxLEQxLEI5KSwgVigwMCwwMCwwMCwwMCksIFYoMkMsRUQsRUQsQzEpLCBcCisgICAgVig2MCwyMCwyMCw0MCksIFYoMUYsRkMsRkMsRTMpLCBWKEM4LEIxLEIxLDc5KSwgVihFRCw1Qiw1QixCNiksIFwKKyAgICBWKEJFLDZBLDZBLEQ0KSwgVig0NixDQixDQiw4RCksIFYoRDksQkUsQkUsNjcpLCBWKDRCLDM5LDM5LDcyKSwgXAorICAgIFYoREUsNEEsNEEsOTQpLCBWKEQ0LDRDLDRDLDk4KSwgVihFOCw1OCw1OCxCMCksIFYoNEEsQ0YsQ0YsODUpLCBcCisgICAgVig2QixEMCxEMCxCQiksIFYoMkEsRUYsRUYsQzUpLCBWKEU1LEFBLEFBLDRGKSwgVigxNixGQixGQixFRCksIFwKKyAgICBWKEM1LDQzLDQzLDg2KSwgVihENyw0RCw0RCw5QSksIFYoNTUsMzMsMzMsNjYpLCBWKDk0LDg1LDg1LDExKSwgXAorICAgIFYoQ0YsNDUsNDUsOEEpLCBWKDEwLEY5LEY5LEU5KSwgVigwNiwwMiwwMiwwNCksIFYoODEsN0YsN0YsRkUpLCBcCisgICAgVihGMCw1MCw1MCxBMCksIFYoNDQsM0MsM0MsNzgpLCBWKEJBLDlGLDlGLDI1KSwgVihFMyxBOCxBOCw0QiksIFwKKyAgICBWKEYzLDUxLDUxLEEyKSwgVihGRSxBMyxBMyw1RCksIFYoQzAsNDAsNDAsODApLCBWKDhBLDhGLDhGLDA1KSwgXAorICAgIFYoQUQsOTIsOTIsM0YpLCBWKEJDLDlELDlELDIxKSwgVig0OCwzOCwzOCw3MCksIFYoMDQsRjUsRjUsRjEpLCBcCisgICAgVihERixCQyxCQyw2MyksIFYoQzEsQjYsQjYsNzcpLCBWKDc1LERBLERBLEFGKSwgVig2MywyMSwyMSw0MiksIFwKKyAgICBWKDMwLDEwLDEwLDIwKSwgVigxQSxGRixGRixFNSksIFYoMEUsRjMsRjMsRkQpLCBWKDZELEQyLEQyLEJGKSwgXAorICAgIFYoNEMsQ0QsQ0QsODEpLCBWKDE0LDBDLDBDLDE4KSwgVigzNSwxMywxMywyNiksIFYoMkYsRUMsRUMsQzMpLCBcCisgICAgVihFMSw1Riw1RixCRSksIFYoQTIsOTcsOTcsMzUpLCBWKENDLDQ0LDQ0LDg4KSwgVigzOSwxNywxNywyRSksIFwKKyAgICBWKDU3LEM0LEM0LDkzKSwgVihGMixBNyxBNyw1NSksIFYoODIsN0UsN0UsRkMpLCBWKDQ3LDNELDNELDdBKSwgXAorICAgIFYoQUMsNjQsNjQsQzgpLCBWKEU3LDVELDVELEJBKSwgVigyQiwxOSwxOSwzMiksIFYoOTUsNzMsNzMsRTYpLCBcCisgICAgVihBMCw2MCw2MCxDMCksIFYoOTgsODEsODEsMTkpLCBWKEQxLDRGLDRGLDlFKSwgVig3RixEQyxEQyxBMyksIFwKKyAgICBWKDY2LDIyLDIyLDQ0KSwgVig3RSwyQSwyQSw1NCksIFYoQUIsOTAsOTAsM0IpLCBWKDgzLDg4LDg4LDBCKSwgXAorICAgIFYoQ0EsNDYsNDYsOEMpLCBWKDI5LEVFLEVFLEM3KSwgVihEMyxCOCxCOCw2QiksIFYoM0MsMTQsMTQsMjgpLCBcCisgICAgVig3OSxERSxERSxBNyksIFYoRTIsNUUsNUUsQkMpLCBWKDFELDBCLDBCLDE2KSwgVig3NixEQixEQixBRCksIFwKKyAgICBWKDNCLEUwLEUwLERCKSwgVig1NiwzMiwzMiw2NCksIFYoNEUsM0EsM0EsNzQpLCBWKDFFLDBBLDBBLDE0KSwgXAorICAgIFYoREIsNDksNDksOTIpLCBWKDBBLDA2LDA2LDBDKSwgVig2QywyNCwyNCw0OCksIFYoRTQsNUMsNUMsQjgpLCBcCisgICAgVig1RCxDMixDMiw5RiksIFYoNkUsRDMsRDMsQkQpLCBWKEVGLEFDLEFDLDQzKSwgVihBNiw2Miw2MixDNCksIFwKKyAgICBWKEE4LDkxLDkxLDM5KSwgVihBNCw5NSw5NSwzMSksIFYoMzcsRTQsRTQsRDMpLCBWKDhCLDc5LDc5LEYyKSwgXAorICAgIFYoMzIsRTcsRTcsRDUpLCBWKDQzLEM4LEM4LDhCKSwgVig1OSwzNywzNyw2RSksIFYoQjcsNkQsNkQsREEpLCBcCisgICAgVig4Qyw4RCw4RCwwMSksIFYoNjQsRDUsRDUsQjEpLCBWKEQyLDRFLDRFLDlDKSwgVihFMCxBOSxBOSw0OSksIFwKKyAgICBWKEI0LDZDLDZDLEQ4KSwgVihGQSw1Niw1NixBQyksIFYoMDcsRjQsRjQsRjMpLCBWKDI1LEVBLEVBLENGKSwgXAorICAgIFYoQUYsNjUsNjUsQ0EpLCBWKDhFLDdBLDdBLEY0KSwgVihFOSxBRSxBRSw0NyksIFYoMTgsMDgsMDgsMTApLCBcCisgICAgVihENSxCQSxCQSw2RiksIFYoODgsNzgsNzgsRjApLCBWKDZGLDI1LDI1LDRBKSwgVig3MiwyRSwyRSw1QyksIFwKKyAgICBWKDI0LDFDLDFDLDM4KSwgVihGMSxBNixBNiw1NyksIFYoQzcsQjQsQjQsNzMpLCBWKDUxLEM2LEM2LDk3KSwgXAorICAgIFYoMjMsRTgsRTgsQ0IpLCBWKDdDLERELERELEExKSwgVig5Qyw3NCw3NCxFOCksIFYoMjEsMUYsMUYsM0UpLCBcCisgICAgVihERCw0Qiw0Qiw5NiksIFYoREMsQkQsQkQsNjEpLCBWKDg2LDhCLDhCLDBEKSwgVig4NSw4QSw4QSwwRiksIFwKKyAgICBWKDkwLDcwLDcwLEUwKSwgVig0MiwzRSwzRSw3QyksIFYoQzQsQjUsQjUsNzEpLCBWKEFBLDY2LDY2LENDKSwgXAorICAgIFYoRDgsNDgsNDgsOTApLCBWKDA1LDAzLDAzLDA2KSwgVigwMSxGNixGNixGNyksIFYoMTIsMEUsMEUsMUMpLCBcCisgICAgVihBMyw2MSw2MSxDMiksIFYoNUYsMzUsMzUsNkEpLCBWKEY5LDU3LDU3LEFFKSwgVihEMCxCOSxCOSw2OSksIFwKKyAgICBWKDkxLDg2LDg2LDE3KSwgVig1OCxDMSxDMSw5OSksIFYoMjcsMUQsMUQsM0EpLCBWKEI5LDlFLDlFLDI3KSwgXAorICAgIFYoMzgsRTEsRTEsRDkpLCBWKDEzLEY4LEY4LEVCKSwgVihCMyw5OCw5OCwyQiksIFYoMzMsMTEsMTEsMjIpLCBcCisgICAgVihCQiw2OSw2OSxEMiksIFYoNzAsRDksRDksQTkpLCBWKDg5LDhFLDhFLDA3KSwgVihBNyw5NCw5NCwzMyksIFwKKyAgICBWKEI2LDlCLDlCLDJEKSwgVigyMiwxRSwxRSwzQyksIFYoOTIsODcsODcsMTUpLCBWKDIwLEU5LEU5LEM5KSwgXAorICAgIFYoNDksQ0UsQ0UsODcpLCBWKEZGLDU1LDU1LEFBKSwgVig3OCwyOCwyOCw1MCksIFYoN0EsREYsREYsQTUpLCBcCisgICAgVig4Riw4Qyw4QywwMyksIFYoRjgsQTEsQTEsNTkpLCBWKDgwLDg5LDg5LDA5KSwgVigxNywwRCwwRCwxQSksIFwKKyAgICBWKERBLEJGLEJGLDY1KSwgVigzMSxFNixFNixENyksIFYoQzYsNDIsNDIsODQpLCBWKEI4LDY4LDY4LEQwKSwgXAorICAgIFYoQzMsNDEsNDEsODIpLCBWKEIwLDk5LDk5LDI5KSwgVig3NywyRCwyRCw1QSksIFYoMTEsMEYsMEYsMUUpLCBcCisgICAgVihDQixCMCxCMCw3QiksIFYoRkMsNTQsNTQsQTgpLCBWKEQ2LEJCLEJCLDZEKSwgVigzQSwxNiwxNiwyQykKKworI2RlZmluZSBWKGEsYixjLGQpIDB4IyNhIyNiIyNjIyNkCitzdGF0aWMgY29uc3QgdWludDMyX3QgRlQwWzI1Nl0gPSB7IEZUIH07CisjdW5kZWYgVgorCisjZGVmaW5lIFYoYSxiLGMsZCkgMHgjI2IjI2MjI2QjI2EKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBGVDFbMjU2XSA9IHsgRlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUgVihhLGIsYyxkKSAweCMjYyMjZCMjYSMjYgorc3RhdGljIGNvbnN0IHVpbnQzMl90IEZUMlsyNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI2RlZmluZSBWKGEsYixjLGQpIDB4IyNkIyNhIyNiIyNjCitzdGF0aWMgY29uc3QgdWludDMyX3QgRlQzWzI1Nl0gPSB7IEZUIH07CisjdW5kZWYgVgorCisjdW5kZWYgRlQKKworLyoKKyAqIFJldmVyc2UgUy1ib3gKKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgUlNiWzI1Nl0gPQoreworICAgIDB4NTIsIDB4MDksIDB4NkEsIDB4RDUsIDB4MzAsIDB4MzYsIDB4QTUsIDB4MzgsCisgICAgMHhCRiwgMHg0MCwgMHhBMywgMHg5RSwgMHg4MSwgMHhGMywgMHhENywgMHhGQiwKKyAgICAweDdDLCAweEUzLCAweDM5LCAweDgyLCAweDlCLCAweDJGLCAweEZGLCAweDg3LAorICAgIDB4MzQsIDB4OEUsIDB4NDMsIDB4NDQsIDB4QzQsIDB4REUsIDB4RTksIDB4Q0IsCisgICAgMHg1NCwgMHg3QiwgMHg5NCwgMHgzMiwgMHhBNiwgMHhDMiwgMHgyMywgMHgzRCwKKyAgICAweEVFLCAweDRDLCAweDk1LCAweDBCLCAweDQyLCAweEZBLCAweEMzLCAweDRFLAorICAgIDB4MDgsIDB4MkUsIDB4QTEsIDB4NjYsIDB4MjgsIDB4RDksIDB4MjQsIDB4QjIsCisgICAgMHg3NiwgMHg1QiwgMHhBMiwgMHg0OSwgMHg2RCwgMHg4QiwgMHhEMSwgMHgyNSwKKyAgICAweDcyLCAweEY4LCAweEY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2LAorICAgIDB4RDQsIDB4QTQsIDB4NUMsIDB4Q0MsIDB4NUQsIDB4NjUsIDB4QjYsIDB4OTIsCisgICAgMHg2QywgMHg3MCwgMHg0OCwgMHg1MCwgMHhGRCwgMHhFRCwgMHhCOSwgMHhEQSwKKyAgICAweDVFLCAweDE1LCAweDQ2LCAweDU3LCAweEE3LCAweDhELCAweDlELCAweDg0LAorICAgIDB4OTAsIDB4RDgsIDB4QUIsIDB4MDAsIDB4OEMsIDB4QkMsIDB4RDMsIDB4MEEsCisgICAgMHhGNywgMHhFNCwgMHg1OCwgMHgwNSwgMHhCOCwgMHhCMywgMHg0NSwgMHgwNiwKKyAgICAweEQwLCAweDJDLCAweDFFLCAweDhGLCAweENBLCAweDNGLCAweDBGLCAweDAyLAorICAgIDB4QzEsIDB4QUYsIDB4QkQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OEEsIDB4NkIsCisgICAgMHgzQSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0RiwgMHg2NywgMHhEQywgMHhFQSwKKyAgICAweDk3LCAweEYyLCAweENGLCAweENFLCAweEYwLCAweEI0LCAweEU2LCAweDczLAorICAgIDB4OTYsIDB4QUMsIDB4NzQsIDB4MjIsIDB4RTcsIDB4QUQsIDB4MzUsIDB4ODUsCisgICAgMHhFMiwgMHhGOSwgMHgzNywgMHhFOCwgMHgxQywgMHg3NSwgMHhERiwgMHg2RSwKKyAgICAweDQ3LCAweEYxLCAweDFBLCAweDcxLCAweDFELCAweDI5LCAweEM1LCAweDg5LAorICAgIDB4NkYsIDB4QjcsIDB4NjIsIDB4MEUsIDB4QUEsIDB4MTgsIDB4QkUsIDB4MUIsCisgICAgMHhGQywgMHg1NiwgMHgzRSwgMHg0QiwgMHhDNiwgMHhEMiwgMHg3OSwgMHgyMCwKKyAgICAweDlBLCAweERCLCAweEMwLCAweEZFLCAweDc4LCAweENELCAweDVBLCAweEY0LAorICAgIDB4MUYsIDB4REQsIDB4QTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4QzcsIDB4MzEsCisgICAgMHhCMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhFQywgMHg1RiwKKyAgICAweDYwLCAweDUxLCAweDdGLCAweEE5LCAweDE5LCAweEI1LCAweDRBLCAweDBELAorICAgIDB4MkQsIDB4RTUsIDB4N0EsIDB4OUYsIDB4OTMsIDB4QzksIDB4OUMsIDB4RUYsCisgICAgMHhBMCwgMHhFMCwgMHgzQiwgMHg0RCwgMHhBRSwgMHgyQSwgMHhGNSwgMHhCMCwKKyAgICAweEM4LCAweEVCLCAweEJCLCAweDNDLCAweDgzLCAweDUzLCAweDk5LCAweDYxLAorICAgIDB4MTcsIDB4MkIsIDB4MDQsIDB4N0UsIDB4QkEsIDB4NzcsIDB4RDYsIDB4MjYsCisgICAgMHhFMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwQywgMHg3RAorfTsKKworLyoKKyAqIFJldmVyc2UgdGFibGVzCisgKi8KKyNkZWZpbmUgUlQgXAorXAorICAgIFYoNTAsQTcsRjQsNTEpLCBWKDUzLDY1LDQxLDdFKSwgVihDMyxBNCwxNywxQSksIFYoOTYsNUUsMjcsM0EpLCBcCisgICAgVihDQiw2QixBQiwzQiksIFYoRjEsNDUsOUQsMUYpLCBWKEFCLDU4LEZBLEFDKSwgVig5MywwMyxFMyw0QiksIFwKKyAgICBWKDU1LEZBLDMwLDIwKSwgVihGNiw2RCw3NixBRCksIFYoOTEsNzYsQ0MsODgpLCBWKDI1LDRDLDAyLEY1KSwgXAorICAgIFYoRkMsRDcsRTUsNEYpLCBWKEQ3LENCLDJBLEM1KSwgVig4MCw0NCwzNSwyNiksIFYoOEYsQTMsNjIsQjUpLCBcCisgICAgVig0OSw1QSxCMSxERSksIFYoNjcsMUIsQkEsMjUpLCBWKDk4LDBFLEVBLDQ1KSwgVihFMSxDMCxGRSw1RCksIFwKKyAgICBWKDAyLDc1LDJGLEMzKSwgVigxMixGMCw0Qyw4MSksIFYoQTMsOTcsNDYsOEQpLCBWKEM2LEY5LEQzLDZCKSwgXAorICAgIFYoRTcsNUYsOEYsMDMpLCBWKDk1LDlDLDkyLDE1KSwgVihFQiw3QSw2RCxCRiksIFYoREEsNTksNTIsOTUpLCBcCisgICAgVigyRCw4MyxCRSxENCksIFYoRDMsMjEsNzQsNTgpLCBWKDI5LDY5LEUwLDQ5KSwgVig0NCxDOCxDOSw4RSksIFwKKyAgICBWKDZBLDg5LEMyLDc1KSwgVig3OCw3OSw4RSxGNCksIFYoNkIsM0UsNTgsOTkpLCBWKERELDcxLEI5LDI3KSwgXAorICAgIFYoQjYsNEYsRTEsQkUpLCBWKDE3LEFELDg4LEYwKSwgVig2NixBQywyMCxDOSksIFYoQjQsM0EsQ0UsN0QpLCBcCisgICAgVigxOCw0QSxERiw2MyksIFYoODIsMzEsMUEsRTUpLCBWKDYwLDMzLDUxLDk3KSwgVig0NSw3Riw1Myw2MiksIFwKKyAgICBWKEUwLDc3LDY0LEIxKSwgVig4NCxBRSw2QixCQiksIFYoMUMsQTAsODEsRkUpLCBWKDk0LDJCLDA4LEY5KSwgXAorICAgIFYoNTgsNjgsNDgsNzApLCBWKDE5LEZELDQ1LDhGKSwgVig4Nyw2QyxERSw5NCksIFYoQjcsRjgsN0IsNTIpLCBcCisgICAgVigyMyxEMyw3MyxBQiksIFYoRTIsMDIsNEIsNzIpLCBWKDU3LDhGLDFGLEUzKSwgVigyQSxBQiw1NSw2NiksIFwKKyAgICBWKDA3LDI4LEVCLEIyKSwgVigwMyxDMixCNSwyRiksIFYoOUEsN0IsQzUsODYpLCBWKEE1LDA4LDM3LEQzKSwgXAorICAgIFYoRjIsODcsMjgsMzApLCBWKEIyLEE1LEJGLDIzKSwgVihCQSw2QSwwMywwMiksIFYoNUMsODIsMTYsRUQpLCBcCisgICAgVigyQiwxQyxDRiw4QSksIFYoOTIsQjQsNzksQTcpLCBWKEYwLEYyLDA3LEYzKSwgVihBMSxFMiw2OSw0RSksIFwKKyAgICBWKENELEY0LERBLDY1KSwgVihENSxCRSwwNSwwNiksIFYoMUYsNjIsMzQsRDEpLCBWKDhBLEZFLEE2LEM0KSwgXAorICAgIFYoOUQsNTMsMkUsMzQpLCBWKEEwLDU1LEYzLEEyKSwgVigzMixFMSw4QSwwNSksIFYoNzUsRUIsRjYsQTQpLCBcCisgICAgVigzOSxFQyw4MywwQiksIFYoQUEsRUYsNjAsNDApLCBWKDA2LDlGLDcxLDVFKSwgVig1MSwxMCw2RSxCRCksIFwKKyAgICBWKEY5LDhBLDIxLDNFKSwgVigzRCwwNixERCw5NiksIFYoQUUsMDUsM0UsREQpLCBWKDQ2LEJELEU2LDREKSwgXAorICAgIFYoQjUsOEQsNTQsOTEpLCBWKDA1LDVELEM0LDcxKSwgVig2RixENCwwNiwwNCksIFYoRkYsMTUsNTAsNjApLCBcCisgICAgVigyNCxGQiw5OCwxOSksIFYoOTcsRTksQkQsRDYpLCBWKENDLDQzLDQwLDg5KSwgVig3Nyw5RSxEOSw2NyksIFwKKyAgICBWKEJELDQyLEU4LEIwKSwgVig4OCw4Qiw4OSwwNyksIFYoMzgsNUIsMTksRTcpLCBWKERCLEVFLEM4LDc5KSwgXAorICAgIFYoNDcsMEEsN0MsQTEpLCBWKEU5LDBGLDQyLDdDKSwgVihDOSwxRSw4NCxGOCksIFYoMDAsMDAsMDAsMDApLCBcCisgICAgVig4Myw4Niw4MCwwOSksIFYoNDgsRUQsMkIsMzIpLCBWKEFDLDcwLDExLDFFKSwgVig0RSw3Miw1QSw2QyksIFwKKyAgICBWKEZCLEZGLDBFLEZEKSwgVig1NiwzOCw4NSwwRiksIFYoMUUsRDUsQUUsM0QpLCBWKDI3LDM5LDJELDM2KSwgXAorICAgIFYoNjQsRDksMEYsMEEpLCBWKDIxLEE2LDVDLDY4KSwgVihEMSw1NCw1Qiw5QiksIFYoM0EsMkUsMzYsMjQpLCBcCisgICAgVihCMSw2NywwQSwwQyksIFYoMEYsRTcsNTcsOTMpLCBWKEQyLDk2LEVFLEI0KSwgVig5RSw5MSw5QiwxQiksIFwKKyAgICBWKDRGLEM1LEMwLDgwKSwgVihBMiwyMCxEQyw2MSksIFYoNjksNEIsNzcsNUEpLCBWKDE2LDFBLDEyLDFDKSwgXAorICAgIFYoMEEsQkEsOTMsRTIpLCBWKEU1LDJBLEEwLEMwKSwgVig0MyxFMCwyMiwzQyksIFYoMUQsMTcsMUIsMTIpLCBcCisgICAgVigwQiwwRCwwOSwwRSksIFYoQUQsQzcsOEIsRjIpLCBWKEI5LEE4LEI2LDJEKSwgVihDOCxBOSwxRSwxNCksIFwKKyAgICBWKDg1LDE5LEYxLDU3KSwgVig0QywwNyw3NSxBRiksIFYoQkIsREQsOTksRUUpLCBWKEZELDYwLDdGLEEzKSwgXAorICAgIFYoOUYsMjYsMDEsRjcpLCBWKEJDLEY1LDcyLDVDKSwgVihDNSwzQiw2Niw0NCksIFYoMzQsN0UsRkIsNUIpLCBcCisgICAgVig3NiwyOSw0Myw4QiksIFYoREMsQzYsMjMsQ0IpLCBWKDY4LEZDLEVELEI2KSwgVig2MyxGMSxFNCxCOCksIFwKKyAgICBWKENBLERDLDMxLEQ3KSwgVigxMCw4NSw2Myw0MiksIFYoNDAsMjIsOTcsMTMpLCBWKDIwLDExLEM2LDg0KSwgXAorICAgIFYoN0QsMjQsNEEsODUpLCBWKEY4LDNELEJCLEQyKSwgVigxMSwzMixGOSxBRSksIFYoNkQsQTEsMjksQzcpLCBcCisgICAgVig0QiwyRiw5RSwxRCksIFYoRjMsMzAsQjIsREMpLCBWKEVDLDUyLDg2LDBEKSwgVihEMCxFMyxDMSw3NyksIFwKKyAgICBWKDZDLDE2LEIzLDJCKSwgVig5OSxCOSw3MCxBOSksIFYoRkEsNDgsOTQsMTEpLCBWKDIyLDY0LEU5LDQ3KSwgXAorICAgIFYoQzQsOEMsRkMsQTgpLCBWKDFBLDNGLEYwLEEwKSwgVihEOCwyQyw3RCw1NiksIFYoRUYsOTAsMzMsMjIpLCBcCisgICAgVihDNyw0RSw0OSw4NyksIFYoQzEsRDEsMzgsRDkpLCBWKEZFLEEyLENBLDhDKSwgVigzNiwwQixENCw5OCksIFwKKyAgICBWKENGLDgxLEY1LEE2KSwgVigyOCxERSw3QSxBNSksIFYoMjYsOEUsQjcsREEpLCBWKEE0LEJGLEFELDNGKSwgXAorICAgIFYoRTQsOUQsM0EsMkMpLCBWKDBELDkyLDc4LDUwKSwgVig5QixDQyw1Riw2QSksIFYoNjIsNDYsN0UsNTQpLCBcCisgICAgVihDMiwxMyw4RCxGNiksIFYoRTgsQjgsRDgsOTApLCBWKDVFLEY3LDM5LDJFKSwgVihGNSxBRixDMyw4MiksIFwKKyAgICBWKEJFLDgwLDVELDlGKSwgVig3Qyw5MyxEMCw2OSksIFYoQTksMkQsRDUsNkYpLCBWKEIzLDEyLDI1LENGKSwgXAorICAgIFYoM0IsOTksQUMsQzgpLCBWKEE3LDdELDE4LDEwKSwgVig2RSw2Myw5QyxFOCksIFYoN0IsQkIsM0IsREIpLCBcCisgICAgVigwOSw3OCwyNixDRCksIFYoRjQsMTgsNTksNkUpLCBWKDAxLEI3LDlBLEVDKSwgVihBOCw5QSw0Riw4MyksIFwKKyAgICBWKDY1LDZFLDk1LEU2KSwgVig3RSxFNixGRixBQSksIFYoMDgsQ0YsQkMsMjEpLCBWKEU2LEU4LDE1LEVGKSwgXAorICAgIFYoRDksOUIsRTcsQkEpLCBWKENFLDM2LDZGLDRBKSwgVihENCwwOSw5RixFQSksIFYoRDYsN0MsQjAsMjkpLCBcCisgICAgVihBRixCMixBNCwzMSksIFYoMzEsMjMsM0YsMkEpLCBWKDMwLDk0LEE1LEM2KSwgVihDMCw2NixBMiwzNSksIFwKKyAgICBWKDM3LEJDLDRFLDc0KSwgVihBNixDQSw4MixGQyksIFYoQjAsRDAsOTAsRTApLCBWKDE1LEQ4LEE3LDMzKSwgXAorICAgIFYoNEEsOTgsMDQsRjEpLCBWKEY3LERBLEVDLDQxKSwgVigwRSw1MCxDRCw3RiksIFYoMkYsRjYsOTEsMTcpLCBcCisgICAgVig4RCxENiw0RCw3NiksIFYoNEQsQjAsRUYsNDMpLCBWKDU0LDRELEFBLENDKSwgVihERiwwNCw5NixFNCksIFwKKyAgICBWKEUzLEI1LEQxLDlFKSwgVigxQiw4OCw2QSw0QyksIFYoQjgsMUYsMkMsQzEpLCBWKDdGLDUxLDY1LDQ2KSwgXAorICAgIFYoMDQsRUEsNUUsOUQpLCBWKDVELDM1LDhDLDAxKSwgVig3Myw3NCw4NyxGQSksIFYoMkUsNDEsMEIsRkIpLCBcCisgICAgVig1QSwxRCw2NyxCMyksIFYoNTIsRDIsREIsOTIpLCBWKDMzLDU2LDEwLEU5KSwgVigxMyw0NyxENiw2RCksIFwKKyAgICBWKDhDLDYxLEQ3LDlBKSwgVig3QSwwQyxBMSwzNyksIFYoOEUsMTQsRjgsNTkpLCBWKDg5LDNDLDEzLEVCKSwgXAorICAgIFYoRUUsMjcsQTksQ0UpLCBWKDM1LEM5LDYxLEI3KSwgVihFRCxFNSwxQyxFMSksIFYoM0MsQjEsNDcsN0EpLCBcCisgICAgVig1OSxERixEMiw5QyksIFYoM0YsNzMsRjIsNTUpLCBWKDc5LENFLDE0LDE4KSwgVihCRiwzNyxDNyw3MyksIFwKKyAgICBWKEVBLENELEY3LDUzKSwgVig1QixBQSxGRCw1RiksIFYoMTQsNkYsM0QsREYpLCBWKDg2LERCLDQ0LDc4KSwgXAorICAgIFYoODEsRjMsQUYsQ0EpLCBWKDNFLEM0LDY4LEI5KSwgVigyQywzNCwyNCwzOCksIFYoNUYsNDAsQTMsQzIpLCBcCisgICAgVig3MixDMywxRCwxNiksIFYoMEMsMjUsRTIsQkMpLCBWKDhCLDQ5LDNDLDI4KSwgVig0MSw5NSwwRCxGRiksIFwKKyAgICBWKDcxLDAxLEE4LDM5KSwgVihERSxCMywwQywwOCksIFYoOUMsRTQsQjQsRDgpLCBWKDkwLEMxLDU2LDY0KSwgXAorICAgIFYoNjEsODQsQ0IsN0IpLCBWKDcwLEI2LDMyLEQ1KSwgVig3NCw1Qyw2Qyw0OCksIFYoNDIsNTcsQjgsRDApCisKKyNkZWZpbmUgVihhLGIsYyxkKSAweCMjYSMjYiMjYyMjZAorc3RhdGljIGNvbnN0IHVpbnQzMl90IFJUMFsyNTZdID0geyBSVCB9OworI3VuZGVmIFYKKworI2RlZmluZSBWKGEsYixjLGQpIDB4IyNiIyNjIyNkIyNhCitzdGF0aWMgY29uc3QgdWludDMyX3QgUlQxWzI1Nl0gPSB7IFJUIH07CisjdW5kZWYgVgorCisjZGVmaW5lIFYoYSxiLGMsZCkgMHgjI2MjI2QjI2EjI2IKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSVDJbMjU2XSA9IHsgUlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUgVihhLGIsYyxkKSAweCMjZCMjYSMjYiMjYworc3RhdGljIGNvbnN0IHVpbnQzMl90IFJUM1syNTZdID0geyBSVCB9OworI3VuZGVmIFYKKworI3VuZGVmIFJUCisKKy8qCisgKiBSb3VuZCBjb25zdGFudHMKKyAqLworc3RhdGljIGNvbnN0IHVpbnQzMl90IFJDT05bMTBdID0KK3sKKyAgICAweDAwMDAwMDAxLCAweDAwMDAwMDAyLCAweDAwMDAwMDA0LCAweDAwMDAwMDA4LAorICAgIDB4MDAwMDAwMTAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwNDAsIDB4MDAwMDAwODAsCisgICAgMHgwMDAwMDAxQiwgMHgwMDAwMDAzNgorfTsKKworI2Vsc2UgLyogTUJFRFRMU19BRVNfUk9NX1RBQkxFUyAqLworCisvKgorICogRm9yd2FyZCBTLWJveCAmIHRhYmxlcworICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBGU2JbMjU2XTsKK3N0YXRpYyB1aW50MzJfdCBGVDBbMjU2XTsKK3N0YXRpYyB1aW50MzJfdCBGVDFbMjU2XTsKK3N0YXRpYyB1aW50MzJfdCBGVDJbMjU2XTsKK3N0YXRpYyB1aW50MzJfdCBGVDNbMjU2XTsKKworLyoKKyAqIFJldmVyc2UgUy1ib3ggJiB0YWJsZXMKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgUlNiWzI1Nl07CitzdGF0aWMgdWludDMyX3QgUlQwWzI1Nl07CitzdGF0aWMgdWludDMyX3QgUlQxWzI1Nl07CitzdGF0aWMgdWludDMyX3QgUlQyWzI1Nl07CitzdGF0aWMgdWludDMyX3QgUlQzWzI1Nl07CisKKy8qCisgKiBSb3VuZCBjb25zdGFudHMKKyAqLworc3RhdGljIHVpbnQzMl90IFJDT05bMTBdOworCisvKgorICogVGFibGVzIGdlbmVyYXRpb24gY29kZQorICovCisjZGVmaW5lIFJPVEw4KHgpICggKCB4IDw8IDggKSAmIDB4RkZGRkZGRkYgKSB8ICggeCA+PiAyNCApCisjZGVmaW5lIFhUSU1FKHgpICggKCB4IDw8IDEgKSBeICggKCB4ICYgMHg4MCApID8gMHgxQiA6IDB4MDAgKSApCisjZGVmaW5lIE1VTCh4LHkpICggKCB4ICYmIHkgKSA/IHBvd1sobG9nW3hdK2xvZ1t5XSkgJSAyNTVdIDogMCApCisKK3N0YXRpYyBpbnQgYWVzX2luaXRfZG9uZSA9IDA7CisKK3N0YXRpYyB2b2lkIGFlc19nZW5fdGFibGVzKCB2b2lkICkKK3sKKyAgICBpbnQgaSwgeCwgeSwgejsKKyAgICBpbnQgcG93WzI1Nl07CisgICAgaW50IGxvZ1syNTZdOworCisgICAgLyoKKyAgICAgKiBjb21wdXRlIHBvdyBhbmQgbG9nIHRhYmxlcyBvdmVyIEdGKDJeOCkKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwLCB4ID0gMTsgaSA8IDI1NjsgaSsrICkKKyAgICB7CisgICAgICAgIHBvd1tpXSA9IHg7CisgICAgICAgIGxvZ1t4XSA9IGk7CisgICAgICAgIHggPSAoIHggXiBYVElNRSggeCApICkgJiAweEZGOworICAgIH0KKworICAgIC8qCisgICAgICogY2FsY3VsYXRlIHRoZSByb3VuZCBjb25zdGFudHMKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwLCB4ID0gMTsgaSA8IDEwOyBpKysgKQorICAgIHsKKyAgICAgICAgUkNPTltpXSA9ICh1aW50MzJfdCkgeDsKKyAgICAgICAgeCA9IFhUSU1FKCB4ICkgJiAweEZGOworICAgIH0KKworICAgIC8qCisgICAgICogZ2VuZXJhdGUgdGhlIGZvcndhcmQgYW5kIHJldmVyc2UgUy1ib3hlcworICAgICAqLworICAgIEZTYlsweDAwXSA9IDB4NjM7CisgICAgUlNiWzB4NjNdID0gMHgwMDsKKworICAgIGZvciggaSA9IDE7IGkgPCAyNTY7IGkrKyApCisgICAgeworICAgICAgICB4ID0gcG93WzI1NSAtIGxvZ1tpXV07CisKKyAgICAgICAgeSAgPSB4OyB5ID0gKCAoIHkgPDwgMSApIHwgKCB5ID4+IDcgKSApICYgMHhGRjsKKyAgICAgICAgeCBePSB5OyB5ID0gKCAoIHkgPDwgMSApIHwgKCB5ID4+IDcgKSApICYgMHhGRjsKKyAgICAgICAgeCBePSB5OyB5ID0gKCAoIHkgPDwgMSApIHwgKCB5ID4+IDcgKSApICYgMHhGRjsKKyAgICAgICAgeCBePSB5OyB5ID0gKCAoIHkgPDwgMSApIHwgKCB5ID4+IDcgKSApICYgMHhGRjsKKyAgICAgICAgeCBePSB5IF4gMHg2MzsKKworICAgICAgICBGU2JbaV0gPSAodW5zaWduZWQgY2hhcikgeDsKKyAgICAgICAgUlNiW3hdID0gKHVuc2lnbmVkIGNoYXIpIGk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBnZW5lcmF0ZSB0aGUgZm9yd2FyZCBhbmQgcmV2ZXJzZSB0YWJsZXMKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgMjU2OyBpKysgKQorICAgIHsKKyAgICAgICAgeCA9IEZTYltpXTsKKyAgICAgICAgeSA9IFhUSU1FKCB4ICkgJiAweEZGOworICAgICAgICB6ID0gICggeSBeIHggKSAmIDB4RkY7CisKKyAgICAgICAgRlQwW2ldID0gKCAodWludDMyX3QpIHkgICAgICAgKSBeCisgICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSB4IDw8ICA4ICkgXgorICAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgeCA8PCAxNiApIF4KKyAgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIHogPDwgMjQgKTsKKworICAgICAgICBGVDFbaV0gPSBST1RMOCggRlQwW2ldICk7CisgICAgICAgIEZUMltpXSA9IFJPVEw4KCBGVDFbaV0gKTsKKyAgICAgICAgRlQzW2ldID0gUk9UTDgoIEZUMltpXSApOworCisgICAgICAgIHggPSBSU2JbaV07CisKKyAgICAgICAgUlQwW2ldID0gKCAodWludDMyX3QpIE1VTCggMHgwRSwgeCApICAgICAgICkgXgorICAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgTVVMKCAweDA5LCB4ICkgPDwgIDggKSBeCisgICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBNVUwoIDB4MEQsIHggKSA8PCAxNiApIF4KKyAgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIE1VTCggMHgwQiwgeCApIDw8IDI0ICk7CisKKyAgICAgICAgUlQxW2ldID0gUk9UTDgoIFJUMFtpXSApOworICAgICAgICBSVDJbaV0gPSBST1RMOCggUlQxW2ldICk7CisgICAgICAgIFJUM1tpXSA9IFJPVEw4KCBSVDJbaV0gKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19ST01fVEFCTEVTICovCisKK3ZvaWQgbWJlZHRsc19hZXNfaW5pdCggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX2Flc19jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX2Flc19mcmVlKCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfYWVzX2NvbnRleHQgKSApOworfQorCisvKgorICogQUVTIGtleSBzY2hlZHVsZSAoZW5jcnlwdGlvbikKKyAqLworI2lmICFkZWZpbmVkKE1CRURUTFNfQUVTX1NFVEtFWV9FTkNfQUxUKQoraW50IG1iZWR0bHNfYWVzX3NldGtleV9lbmMoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5Yml0cyApCit7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdWludDMyX3QgKlJLOworCisjaWYgIWRlZmluZWQoTUJFRFRMU19BRVNfUk9NX1RBQkxFUykKKyAgICBpZiggYWVzX2luaXRfZG9uZSA9PSAwICkKKyAgICB7CisgICAgICAgIGFlc19nZW5fdGFibGVzKCk7CisgICAgICAgIGFlc19pbml0X2RvbmUgPSAxOworCisgICAgfQorI2VuZGlmCisKKyAgICBzd2l0Y2goIGtleWJpdHMgKQorICAgIHsKKyAgICAgICAgY2FzZSAxMjg6IGN0eC0+bnIgPSAxMDsgYnJlYWs7CisgICAgICAgIGNhc2UgMTkyOiBjdHgtPm5yID0gMTI7IGJyZWFrOworICAgICAgICBjYXNlIDI1NjogY3R4LT5uciA9IDE0OyBicmVhazsKKyAgICAgICAgZGVmYXVsdCA6IHJldHVybiggTUJFRFRMU19FUlJfQUVTX0lOVkFMSURfS0VZX0xFTkdUSCApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19QQURMT0NLX0MpICYmIGRlZmluZWQoTUJFRFRMU19QQURMT0NLX0FMSUdOMTYpCisgICAgaWYoIGFlc19wYWRsb2NrX2FjZSA9PSAtMSApCisgICAgICAgIGFlc19wYWRsb2NrX2FjZSA9IG1iZWR0bHNfcGFkbG9ja19oYXNfc3VwcG9ydCggTUJFRFRMU19QQURMT0NLX0FDRSApOworCisgICAgaWYoIGFlc19wYWRsb2NrX2FjZSApCisgICAgICAgIGN0eC0+cmsgPSBSSyA9IE1CRURUTFNfUEFETE9DS19BTElHTjE2KCBjdHgtPmJ1ZiApOworICAgIGVsc2UKKyNlbmRpZgorICAgIGN0eC0+cmsgPSBSSyA9IGN0eC0+YnVmOworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU05JX0MpICYmIGRlZmluZWQoTUJFRFRMU19IQVZFX1g4Nl82NCkKKyAgICBpZiggbWJlZHRsc19hZXNuaV9oYXNfc3VwcG9ydCggTUJFRFRMU19BRVNOSV9BRVMgKSApCisgICAgICAgIHJldHVybiggbWJlZHRsc19hZXNuaV9zZXRrZXlfZW5jKCAodW5zaWduZWQgY2hhciAqKSBjdHgtPnJrLCBrZXksIGtleWJpdHMgKSApOworI2VuZGlmCisKKyAgICBmb3IoIGkgPSAwOyBpIDwgKCBrZXliaXRzID4+IDUgKTsgaSsrICkKKyAgICB7CisgICAgICAgIEdFVF9VSU5UMzJfTEUoIFJLW2ldLCBrZXksIGkgPDwgMiApOworICAgIH0KKworICAgIHN3aXRjaCggY3R4LT5uciApCisgICAgeworICAgICAgICBjYXNlIDEwOgorCisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgMTA7IGkrKywgUksgKz0gNCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUktbNF0gID0gUktbMF0gXiBSQ09OW2ldIF4KKyAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFJLWzNdID4+ICA4ICkgJiAweEZGIF0gICAgICAgKSBeCisgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBSS1szXSA+PiAxNiApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbM10gPj4gMjQgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFJLWzNdICAgICAgICkgJiAweEZGIF0gPDwgMjQgKTsKKworICAgICAgICAgICAgICAgIFJLWzVdICA9IFJLWzFdIF4gUktbNF07CisgICAgICAgICAgICAgICAgUktbNl0gID0gUktbMl0gXiBSS1s1XTsKKyAgICAgICAgICAgICAgICBSS1s3XSAgPSBSS1szXSBeIFJLWzZdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAxMjoKKworICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IDg7IGkrKywgUksgKz0gNiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUktbNl0gID0gUktbMF0gXiBSQ09OW2ldIF4KKyAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFJLWzVdID4+ICA4ICkgJiAweEZGIF0gICAgICAgKSBeCisgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBSS1s1XSA+PiAxNiApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbNV0gPj4gMjQgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFJLWzVdICAgICAgICkgJiAweEZGIF0gPDwgMjQgKTsKKworICAgICAgICAgICAgICAgIFJLWzddICA9IFJLWzFdIF4gUktbNl07CisgICAgICAgICAgICAgICAgUktbOF0gID0gUktbMl0gXiBSS1s3XTsKKyAgICAgICAgICAgICAgICBSS1s5XSAgPSBSS1szXSBeIFJLWzhdOworICAgICAgICAgICAgICAgIFJLWzEwXSA9IFJLWzRdIF4gUktbOV07CisgICAgICAgICAgICAgICAgUktbMTFdID0gUktbNV0gXiBSS1sxMF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDE0OgorCisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgNzsgaSsrLCBSSyArPSA4ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSS1s4XSAgPSBSS1swXSBeIFJDT05baV0gXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbN10gPj4gIDggKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFJLWzddID4+IDE2ICkgJiAweEZGIF0gPDwgIDggKSBeCisgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBSS1s3XSA+PiAyNCApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbN10gICAgICAgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgICAgICAgICAgICAgUktbOV0gID0gUktbMV0gXiBSS1s4XTsKKyAgICAgICAgICAgICAgICBSS1sxMF0gPSBSS1syXSBeIFJLWzldOworICAgICAgICAgICAgICAgIFJLWzExXSA9IFJLWzNdIF4gUktbMTBdOworCisgICAgICAgICAgICAgICAgUktbMTJdID0gUktbNF0gXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbMTFdICAgICAgICkgJiAweEZGIF0gICAgICAgKSBeCisgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBSS1sxMV0gPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFJLWzExXSA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbMTFdID4+IDI0ICkgJiAweEZGIF0gPDwgMjQgKTsKKworICAgICAgICAgICAgICAgIFJLWzEzXSA9IFJLWzVdIF4gUktbMTJdOworICAgICAgICAgICAgICAgIFJLWzE0XSA9IFJLWzZdIF4gUktbMTNdOworICAgICAgICAgICAgICAgIFJLWzE1XSA9IFJLWzddIF4gUktbMTRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogIU1CRURUTFNfQUVTX1NFVEtFWV9FTkNfQUxUICovCisKKy8qCisgKiBBRVMga2V5IHNjaGVkdWxlIChkZWNyeXB0aW9uKQorICovCisjaWYgIWRlZmluZWQoTUJFRFRMU19BRVNfU0VUS0VZX0RFQ19BTFQpCitpbnQgbWJlZHRsc19hZXNfc2V0a2V5X2RlYyggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXliaXRzICkKK3sKKyAgICBpbnQgaSwgaiwgcmV0OworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R5OworICAgIHVpbnQzMl90ICpSSzsKKyAgICB1aW50MzJfdCAqU0s7CisKKyAgICBtYmVkdGxzX2Flc19pbml0KCAmY3R5ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEFETE9DS19DKSAmJiBkZWZpbmVkKE1CRURUTFNfUEFETE9DS19BTElHTjE2KQorICAgIGlmKCBhZXNfcGFkbG9ja19hY2UgPT0gLTEgKQorICAgICAgICBhZXNfcGFkbG9ja19hY2UgPSBtYmVkdGxzX3BhZGxvY2tfaGFzX3N1cHBvcnQoIE1CRURUTFNfUEFETE9DS19BQ0UgKTsKKworICAgIGlmKCBhZXNfcGFkbG9ja19hY2UgKQorICAgICAgICBjdHgtPnJrID0gUksgPSBNQkVEVExTX1BBRExPQ0tfQUxJR04xNiggY3R4LT5idWYgKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICBjdHgtPnJrID0gUksgPSBjdHgtPmJ1ZjsKKworICAgIC8qIEFsc28gY2hlY2tzIGtleWJpdHMgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmY3R5LCBrZXksIGtleWJpdHMgKSApICE9IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBjdHgtPm5yID0gY3R5Lm5yOworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU05JX0MpICYmIGRlZmluZWQoTUJFRFRMU19IQVZFX1g4Nl82NCkKKyAgICBpZiggbWJlZHRsc19hZXNuaV9oYXNfc3VwcG9ydCggTUJFRFRMU19BRVNOSV9BRVMgKSApCisgICAgeworICAgICAgICBtYmVkdGxzX2Flc25pX2ludmVyc2Vfa2V5KCAodW5zaWduZWQgY2hhciAqKSBjdHgtPnJrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgY3R5LnJrLCBjdHgtPm5yICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKworICAgIFNLID0gY3R5LnJrICsgY3R5Lm5yICogNDsKKworICAgICpSSysrID0gKlNLKys7CisgICAgKlJLKysgPSAqU0srKzsKKyAgICAqUksrKyA9ICpTSysrOworICAgICpSSysrID0gKlNLKys7CisKKyAgICBmb3IoIGkgPSBjdHgtPm5yIC0gMSwgU0sgLT0gODsgaSA+IDA7IGktLSwgU0sgLT0gOCApCisgICAgeworICAgICAgICBmb3IoIGogPSAwOyBqIDwgNDsgaisrLCBTSysrICkKKyAgICAgICAgeworICAgICAgICAgICAgKlJLKysgPSBSVDBbIEZTYlsgKCAqU0sgICAgICAgKSAmIDB4RkYgXSBdIF4KKyAgICAgICAgICAgICAgICAgICAgUlQxWyBGU2JbICggKlNLID4+ICA4ICkgJiAweEZGIF0gXSBeCisgICAgICAgICAgICAgICAgICAgIFJUMlsgRlNiWyAoICpTSyA+PiAxNiApICYgMHhGRiBdIF0gXgorICAgICAgICAgICAgICAgICAgICBSVDNbIEZTYlsgKCAqU0sgPj4gMjQgKSAmIDB4RkYgXSBdOworICAgICAgICB9CisgICAgfQorCisgICAgKlJLKysgPSAqU0srKzsKKyAgICAqUksrKyA9ICpTSysrOworICAgICpSSysrID0gKlNLKys7CisgICAgKlJLKysgPSAqU0srKzsKKworZXhpdDoKKyAgICBtYmVkdGxzX2Flc19mcmVlKCAmY3R5ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qICFNQkVEVExTX0FFU19TRVRLRVlfREVDX0FMVCAqLworCisjZGVmaW5lIEFFU19GUk9VTkQoWDAsWDEsWDIsWDMsWTAsWTEsWTIsWTMpICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgWDAgPSAqUksrKyBeIEZUMFsgKCBZMCAgICAgICApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUMVsgKCBZMSA+PiAgOCApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUMlsgKCBZMiA+PiAxNiApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUM1sgKCBZMyA+PiAyNCApICYgMHhGRiBdOyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgWDEgPSAqUksrKyBeIEZUMFsgKCBZMSAgICAgICApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUMVsgKCBZMiA+PiAgOCApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUMlsgKCBZMyA+PiAxNiApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUM1sgKCBZMCA+PiAyNCApICYgMHhGRiBdOyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgWDIgPSAqUksrKyBeIEZUMFsgKCBZMiAgICAgICApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUMVsgKCBZMyA+PiAgOCApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUMlsgKCBZMCA+PiAxNiApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUM1sgKCBZMSA+PiAyNCApICYgMHhGRiBdOyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgWDMgPSAqUksrKyBeIEZUMFsgKCBZMyAgICAgICApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUMVsgKCBZMCA+PiAgOCApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUMlsgKCBZMSA+PiAxNiApICYgMHhGRiBdIF4gICBcCisgICAgICAgICAgICAgICAgIEZUM1sgKCBZMiA+PiAyNCApICYgMHhGRiBdOyAgICBcCit9CisKKyNkZWZpbmUgQUVTX1JST1VORChYMCxYMSxYMixYMyxZMCxZMSxZMixZMykgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBYMCA9ICpSSysrIF4gUlQwWyAoIFkwICAgICAgICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQxWyAoIFkzID4+ICA4ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQyWyAoIFkyID4+IDE2ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQzWyAoIFkxID4+IDI0ICkgJiAweEZGIF07ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBYMSA9ICpSSysrIF4gUlQwWyAoIFkxICAgICAgICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQxWyAoIFkwID4+ICA4ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQyWyAoIFkzID4+IDE2ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQzWyAoIFkyID4+IDI0ICkgJiAweEZGIF07ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBYMiA9ICpSSysrIF4gUlQwWyAoIFkyICAgICAgICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQxWyAoIFkxID4+ICA4ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQyWyAoIFkwID4+IDE2ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQzWyAoIFkzID4+IDI0ICkgJiAweEZGIF07ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBYMyA9ICpSSysrIF4gUlQwWyAoIFkzICAgICAgICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQxWyAoIFkyID4+ICA4ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQyWyAoIFkxID4+IDE2ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgUlQzWyAoIFkwID4+IDI0ICkgJiAweEZGIF07ICAgIFwKK30KKworLyoKKyAqIEFFUy1FQ0IgYmxvY2sgZW5jcnlwdGlvbgorICovCisjaWYgIWRlZmluZWQoTUJFRFRMU19BRVNfRU5DUllQVF9BTFQpCit2b2lkIG1iZWR0bHNfYWVzX2VuY3J5cHQoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCit7CisgICAgaW50IGk7CisgICAgdWludDMyX3QgKlJLLCBYMCwgWDEsIFgyLCBYMywgWTAsIFkxLCBZMiwgWTM7CisKKyAgICBSSyA9IGN0eC0+cms7CisKKyAgICBHRVRfVUlOVDMyX0xFKCBYMCwgaW5wdXQsICAwICk7IFgwIF49ICpSSysrOworICAgIEdFVF9VSU5UMzJfTEUoIFgxLCBpbnB1dCwgIDQgKTsgWDEgXj0gKlJLKys7CisgICAgR0VUX1VJTlQzMl9MRSggWDIsIGlucHV0LCAgOCApOyBYMiBePSAqUksrKzsKKyAgICBHRVRfVUlOVDMyX0xFKCBYMywgaW5wdXQsIDEyICk7IFgzIF49ICpSSysrOworCisgICAgZm9yKCBpID0gKCBjdHgtPm5yID4+IDEgKSAtIDE7IGkgPiAwOyBpLS0gKQorICAgIHsKKyAgICAgICAgQUVTX0ZST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7CisgICAgICAgIEFFU19GUk9VTkQoIFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMyApOworICAgIH0KKworICAgIEFFU19GUk9VTkQoIFkwLCBZMSwgWTIsIFkzLCBYMCwgWDEsIFgyLCBYMyApOworCisgICAgWDAgPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTAgICAgICAgKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTEgPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTIgPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTMgPj4gMjQgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgWDEgPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTEgICAgICAgKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTIgPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTMgPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTAgPj4gMjQgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgWDIgPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTIgICAgICAgKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTMgPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTAgPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTEgPj4gMjQgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgWDMgPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTMgICAgICAgKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTAgPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTEgPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggWTIgPj4gMjQgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgUFVUX1VJTlQzMl9MRSggWDAsIG91dHB1dCwgIDAgKTsKKyAgICBQVVRfVUlOVDMyX0xFKCBYMSwgb3V0cHV0LCAgNCApOworICAgIFBVVF9VSU5UMzJfTEUoIFgyLCBvdXRwdXQsICA4ICk7CisgICAgUFVUX1VJTlQzMl9MRSggWDMsIG91dHB1dCwgMTIgKTsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19BRVNfRU5DUllQVF9BTFQgKi8KKworLyoKKyAqIEFFUy1FQ0IgYmxvY2sgZGVjcnlwdGlvbgorICovCisjaWYgIWRlZmluZWQoTUJFRFRMU19BRVNfREVDUllQVF9BTFQpCit2b2lkIG1iZWR0bHNfYWVzX2RlY3J5cHQoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCit7CisgICAgaW50IGk7CisgICAgdWludDMyX3QgKlJLLCBYMCwgWDEsIFgyLCBYMywgWTAsIFkxLCBZMiwgWTM7CisKKyAgICBSSyA9IGN0eC0+cms7CisKKyAgICBHRVRfVUlOVDMyX0xFKCBYMCwgaW5wdXQsICAwICk7IFgwIF49ICpSSysrOworICAgIEdFVF9VSU5UMzJfTEUoIFgxLCBpbnB1dCwgIDQgKTsgWDEgXj0gKlJLKys7CisgICAgR0VUX1VJTlQzMl9MRSggWDIsIGlucHV0LCAgOCApOyBYMiBePSAqUksrKzsKKyAgICBHRVRfVUlOVDMyX0xFKCBYMywgaW5wdXQsIDEyICk7IFgzIF49ICpSSysrOworCisgICAgZm9yKCBpID0gKCBjdHgtPm5yID4+IDEgKSAtIDE7IGkgPiAwOyBpLS0gKQorICAgIHsKKyAgICAgICAgQUVTX1JST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7CisgICAgICAgIEFFU19SUk9VTkQoIFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMyApOworICAgIH0KKworICAgIEFFU19SUk9VTkQoIFkwLCBZMSwgWTIsIFkzLCBYMCwgWDEsIFgyLCBYMyApOworCisgICAgWDAgPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTAgICAgICAgKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTMgPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTIgPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTEgPj4gMjQgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgWDEgPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTEgICAgICAgKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTAgPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTMgPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTIgPj4gMjQgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgWDIgPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTIgICAgICAgKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTEgPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTAgPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTMgPj4gMjQgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgWDMgPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTMgICAgICAgKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTIgPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTEgPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggWTAgPj4gMjQgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgUFVUX1VJTlQzMl9MRSggWDAsIG91dHB1dCwgIDAgKTsKKyAgICBQVVRfVUlOVDMyX0xFKCBYMSwgb3V0cHV0LCAgNCApOworICAgIFBVVF9VSU5UMzJfTEUoIFgyLCBvdXRwdXQsICA4ICk7CisgICAgUFVUX1VJTlQzMl9MRSggWDMsIG91dHB1dCwgMTIgKTsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19BRVNfREVDUllQVF9BTFQgKi8KKworLyoKKyAqIEFFUy1FQ0IgYmxvY2sgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX2Flc19jcnlwdF9lY2IoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbMTZdLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNOSV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfSEFWRV9YODZfNjQpCisgICAgaWYoIG1iZWR0bHNfYWVzbmlfaGFzX3N1cHBvcnQoIE1CRURUTFNfQUVTTklfQUVTICkgKQorICAgICAgICByZXR1cm4oIG1iZWR0bHNfYWVzbmlfY3J5cHRfZWNiKCBjdHgsIG1vZGUsIGlucHV0LCBvdXRwdXQgKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEFETE9DS19DKSAmJiBkZWZpbmVkKE1CRURUTFNfSEFWRV9YODYpCisgICAgaWYoIGFlc19wYWRsb2NrX2FjZSApCisgICAgeworICAgICAgICBpZiggbWJlZHRsc19wYWRsb2NrX3hjcnlwdGVjYiggY3R4LCBtb2RlLCBpbnB1dCwgb3V0cHV0ICkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKworICAgICAgICAvLyBJZiBwYWRsb2NrIGRhdGEgbWlzYWxpZ25lZCwgd2UganVzdCBmYWxsIGJhY2sgdG8KKyAgICAgICAgLy8gdW5hY2NlbGVyYXRlZCBtb2RlCisgICAgICAgIC8vCisgICAgfQorI2VuZGlmCisKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX0FFU19FTkNSWVBUICkKKyAgICAgICAgbWJlZHRsc19hZXNfZW5jcnlwdCggY3R4LCBpbnB1dCwgb3V0cHV0ICk7CisgICAgZWxzZQorICAgICAgICBtYmVkdGxzX2Flc19kZWNyeXB0KCBjdHgsIGlucHV0LCBvdXRwdXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKy8qCisgKiBBRVMtQ0JDIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2NiYyggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdlsxNl0sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCBpOworICAgIHVuc2lnbmVkIGNoYXIgdGVtcFsxNl07CisKKyAgICBpZiggbGVuZ3RoICUgMTYgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0lOUFVUX0xFTkdUSCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1BBRExPQ0tfQykgJiYgZGVmaW5lZChNQkVEVExTX0hBVkVfWDg2KQorICAgIGlmKCBhZXNfcGFkbG9ja19hY2UgKQorICAgIHsKKyAgICAgICAgaWYoIG1iZWR0bHNfcGFkbG9ja194Y3J5cHRjYmMoIGN0eCwgbW9kZSwgbGVuZ3RoLCBpdiwgaW5wdXQsIG91dHB1dCApID09IDAgKQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAgICAgLy8gSWYgcGFkbG9jayBkYXRhIG1pc2FsaWduZWQsIHdlIGp1c3QgZmFsbCBiYWNrIHRvCisgICAgICAgIC8vIHVuYWNjZWxlcmF0ZWQgbW9kZQorICAgICAgICAvLworICAgIH0KKyNlbmRpZgorCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19BRVNfREVDUllQVCApCisgICAgeworICAgICAgICB3aGlsZSggbGVuZ3RoID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSggdGVtcCwgaW5wdXQsIDE2ICk7CisgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9lY2IoIGN0eCwgbW9kZSwgaW5wdXQsIG91dHB1dCApOworCisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgICAgICAgICAgICAgb3V0cHV0W2ldID0gKHVuc2lnbmVkIGNoYXIpKCBvdXRwdXRbaV0gXiBpdltpXSApOworCisgICAgICAgICAgICBtZW1jcHkoIGl2LCB0ZW1wLCAxNiApOworCisgICAgICAgICAgICBpbnB1dCAgKz0gMTY7CisgICAgICAgICAgICBvdXRwdXQgKz0gMTY7CisgICAgICAgICAgICBsZW5ndGggLT0gMTY7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgICAgICAgICAgICAgb3V0cHV0W2ldID0gKHVuc2lnbmVkIGNoYXIpKCBpbnB1dFtpXSBeIGl2W2ldICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggY3R4LCBtb2RlLCBvdXRwdXQsIG91dHB1dCApOworICAgICAgICAgICAgbWVtY3B5KCBpdiwgb3V0cHV0LCAxNiApOworCisgICAgICAgICAgICBpbnB1dCAgKz0gMTY7CisgICAgICAgICAgICBvdXRwdXQgKz0gMTY7CisgICAgICAgICAgICBsZW5ndGggLT0gMTY7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKy8qCisgKiBBRVMtQ0ZCMTI4IGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2NmYjEyOCggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppdl9vZmYsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgYzsKKyAgICBzaXplX3QgbiA9ICppdl9vZmY7CisKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX0FFU19ERUNSWVBUICkKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGgtLSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBuID09IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBpdiwgaXYgKTsKKworICAgICAgICAgICAgYyA9ICppbnB1dCsrOworICAgICAgICAgICAgKm91dHB1dCsrID0gKHVuc2lnbmVkIGNoYXIpKCBjIF4gaXZbbl0gKTsKKyAgICAgICAgICAgIGl2W25dID0gKHVuc2lnbmVkIGNoYXIpIGM7CisKKyAgICAgICAgICAgIG4gPSAoIG4gKyAxICkgJiAweDBGOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGgtLSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBuID09IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBpdiwgaXYgKTsKKworICAgICAgICAgICAgaXZbbl0gPSAqb3V0cHV0KysgPSAodW5zaWduZWQgY2hhcikoIGl2W25dIF4gKmlucHV0KysgKTsKKworICAgICAgICAgICAgbiA9ICggbiArIDEgKSAmIDB4MEY7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqaXZfb2ZmID0gbjsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQUVTLUNGQjggYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19hZXNfY3J5cHRfY2ZiOCggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdlsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgYzsKKyAgICB1bnNpZ25lZCBjaGFyIG92WzE3XTsKKworICAgIHdoaWxlKCBsZW5ndGgtLSApCisgICAgeworICAgICAgICBtZW1jcHkoIG92LCBpdiwgMTYgKTsKKyAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfZWNiKCBjdHgsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIGl2LCBpdiApOworCisgICAgICAgIGlmKCBtb2RlID09IE1CRURUTFNfQUVTX0RFQ1JZUFQgKQorICAgICAgICAgICAgb3ZbMTZdID0gKmlucHV0OworCisgICAgICAgIGMgPSAqb3V0cHV0KysgPSAodW5zaWduZWQgY2hhcikoIGl2WzBdIF4gKmlucHV0KysgKTsKKworICAgICAgICBpZiggbW9kZSA9PSBNQkVEVExTX0FFU19FTkNSWVBUICkKKyAgICAgICAgICAgIG92WzE2XSA9IGM7CisKKyAgICAgICAgbWVtY3B5KCBpdiwgb3YgKyAxLCAxNiApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisvKgorICogQUVTLUNUUiBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX2Flc19jcnlwdF9jdHIoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuY19vZmYsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbm9uY2VfY291bnRlclsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc3RyZWFtX2Jsb2NrWzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IGMsIGk7CisgICAgc2l6ZV90IG4gPSAqbmNfb2ZmOworCisgICAgd2hpbGUoIGxlbmd0aC0tICkKKyAgICB7CisgICAgICAgIGlmKCBuID09IDAgKSB7CisgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9lY2IoIGN0eCwgTUJFRFRMU19BRVNfRU5DUllQVCwgbm9uY2VfY291bnRlciwgc3RyZWFtX2Jsb2NrICk7CisKKyAgICAgICAgICAgIGZvciggaSA9IDE2OyBpID4gMDsgaS0tICkKKyAgICAgICAgICAgICAgICBpZiggKytub25jZV9jb3VudGVyW2kgLSAxXSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYyA9ICppbnB1dCsrOworICAgICAgICAqb3V0cHV0KysgPSAodW5zaWduZWQgY2hhcikoIGMgXiBzdHJlYW1fYmxvY2tbbl0gKTsKKworICAgICAgICBuID0gKCBuICsgMSApICYgMHgwRjsKKyAgICB9CisKKyAgICAqbmNfb2ZmID0gbjsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKKyNlbmRpZiAvKiAhTUJFRFRMU19BRVNfQUxUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoKKyAqIEFFUyB0ZXN0IHZlY3RvcnMgZnJvbToKKyAqCisgKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9hcmNoaXZlL2Flcy9yaWpuZGFlbC9yaWpuZGFlbC12YWxzLnppcAorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfdGVzdF9lY2JfZGVjWzNdWzE2XSA9Cit7CisgICAgeyAweDQ0LCAweDQxLCAweDZBLCAweEMyLCAweEQxLCAweEY1LCAweDNDLCAweDU4LAorICAgICAgMHgzMywgMHgwMywgMHg5MSwgMHg3RSwgMHg2QiwgMHhFOSwgMHhFQiwgMHhFMCB9LAorICAgIHsgMHg0OCwgMHhFMywgMHgxRSwgMHg5RSwgMHgyNSwgMHg2NywgMHgxOCwgMHhGMiwKKyAgICAgIDB4OTIsIDB4MjksIDB4MzEsIDB4OUMsIDB4MTksIDB4RjEsIDB4NUIsIDB4QTQgfSwKKyAgICB7IDB4MDUsIDB4OEMsIDB4Q0YsIDB4RkQsIDB4QkIsIDB4Q0IsIDB4MzgsIDB4MkQsCisgICAgICAweDFGLCAweDZGLCAweDU2LCAweDU4LCAweDVELCAweDhBLCAweDRBLCAweERFIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc190ZXN0X2VjYl9lbmNbM11bMTZdID0KK3sKKyAgICB7IDB4QzMsIDB4NEMsIDB4MDUsIDB4MkMsIDB4QzAsIDB4REEsIDB4OEQsIDB4NzMsCisgICAgICAweDQ1LCAweDFBLCAweEZFLCAweDVGLCAweDAzLCAweEJFLCAweDI5LCAweDdGIH0sCisgICAgeyAweEYzLCAweEY2LCAweDc1LCAweDJBLCAweEU4LCAweEQ3LCAweDgzLCAweDExLAorICAgICAgMHgzOCwgMHhGMCwgMHg0MSwgMHg1NiwgMHgwNiwgMHgzMSwgMHhCMSwgMHgxNCB9LAorICAgIHsgMHg4QiwgMHg3OSwgMHhFRSwgMHhDQywgMHg5MywgMHhBMCwgMHhFRSwgMHg1RCwKKyAgICAgIDB4RkYsIDB4MzAsIDB4QjQsIDB4RUEsIDB4MjEsIDB4NjMsIDB4NkQsIDB4QTQgfQorfTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfdGVzdF9jYmNfZGVjWzNdWzE2XSA9Cit7CisgICAgeyAweEZBLCAweENBLCAweDM3LCAweEUwLCAweEIwLCAweEM4LCAweDUzLCAweDczLAorICAgICAgMHhERiwgMHg3MCwgMHg2RSwgMHg3MywgMHhGNywgMHhDOSwgMHhBRiwgMHg4NiB9LAorICAgIHsgMHg1RCwgMHhGNiwgMHg3OCwgMHhERCwgMHgxNywgMHhCQSwgMHg0RSwgMHg3NSwKKyAgICAgIDB4QjYsIDB4MTcsIDB4NjgsIDB4QzYsIDB4QUQsIDB4RUYsIDB4N0MsIDB4N0IgfSwKKyAgICB7IDB4NDgsIDB4MDQsIDB4RTEsIDB4ODEsIDB4OEYsIDB4RTYsIDB4MjksIDB4NzUsCisgICAgICAweDE5LCAweEEzLCAweEU4LCAweDhDLCAweDU3LCAweDMxLCAweDA0LCAweDEzIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc190ZXN0X2NiY19lbmNbM11bMTZdID0KK3sKKyAgICB7IDB4OEEsIDB4MDUsIDB4RkMsIDB4NUUsIDB4MDksIDB4NUEsIDB4RjQsIDB4ODQsCisgICAgICAweDhBLCAweDA4LCAweEQzLCAweDI4LCAweEQzLCAweDY4LCAweDhFLCAweDNEIH0sCisgICAgeyAweDdCLCAweEQ5LCAweDY2LCAweEQ1LCAweDNBLCAweEQ4LCAweEMxLCAweEJCLAorICAgICAgMHg4NSwgMHhEMiwgMHhBRCwgMHhGQSwgMHhFOCwgMHg3QiwgMHhCMSwgMHgwNCB9LAorICAgIHsgMHhGRSwgMHgzQywgMHg1MywgMHg2NSwgMHgzRSwgMHgyRiwgMHg0NSwgMHhCNSwKKyAgICAgIDB4NkYsIDB4Q0QsIDB4ODgsIDB4QjIsIDB4Q0MsIDB4ODksIDB4OEYsIDB4RjAgfQorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKy8qCisgKiBBRVMtQ0ZCMTI4IHRlc3QgdmVjdG9ycyBmcm9tOgorICoKKyAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9uaXN0cHVicy84MDAtMzhhL3NwODAwLTM4YS5wZGYKKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzX3Rlc3RfY2ZiMTI4X2tleVszXVszMl0gPQoreworICAgIHsgMHgyQiwgMHg3RSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhBRSwgMHhEMiwgMHhBNiwKKyAgICAgIDB4QUIsIDB4RjcsIDB4MTUsIDB4ODgsIDB4MDksIDB4Q0YsIDB4NEYsIDB4M0MgfSwKKyAgICB7IDB4OEUsIDB4NzMsIDB4QjAsIDB4RjcsIDB4REEsIDB4MEUsIDB4NjQsIDB4NTIsCisgICAgICAweEM4LCAweDEwLCAweEYzLCAweDJCLCAweDgwLCAweDkwLCAweDc5LCAweEU1LAorICAgICAgMHg2MiwgMHhGOCwgMHhFQSwgMHhEMiwgMHg1MiwgMHgyQywgMHg2QiwgMHg3QiB9LAorICAgIHsgMHg2MCwgMHgzRCwgMHhFQiwgMHgxMCwgMHgxNSwgMHhDQSwgMHg3MSwgMHhCRSwKKyAgICAgIDB4MkIsIDB4NzMsIDB4QUUsIDB4RjAsIDB4ODUsIDB4N0QsIDB4NzcsIDB4ODEsCisgICAgICAweDFGLCAweDM1LCAweDJDLCAweDA3LCAweDNCLCAweDYxLCAweDA4LCAweEQ3LAorICAgICAgMHgyRCwgMHg5OCwgMHgxMCwgMHhBMywgMHgwOSwgMHgxNCwgMHhERiwgMHhGNCB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfdGVzdF9jZmIxMjhfaXZbMTZdID0KK3sKKyAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc190ZXN0X2NmYjEyOF9wdFs2NF0gPQoreworICAgIDB4NkIsIDB4QzEsIDB4QkUsIDB4RTIsIDB4MkUsIDB4NDAsIDB4OUYsIDB4OTYsCisgICAgMHhFOSwgMHgzRCwgMHg3RSwgMHgxMSwgMHg3MywgMHg5MywgMHgxNywgMHgyQSwKKyAgICAweEFFLCAweDJELCAweDhBLCAweDU3LCAweDFFLCAweDAzLCAweEFDLCAweDlDLAorICAgIDB4OUUsIDB4QjcsIDB4NkYsIDB4QUMsIDB4NDUsIDB4QUYsIDB4OEUsIDB4NTEsCisgICAgMHgzMCwgMHhDOCwgMHgxQywgMHg0NiwgMHhBMywgMHg1QywgMHhFNCwgMHgxMSwKKyAgICAweEU1LCAweEZCLCAweEMxLCAweDE5LCAweDFBLCAweDBBLCAweDUyLCAweEVGLAorICAgIDB4RjYsIDB4OUYsIDB4MjQsIDB4NDUsIDB4REYsIDB4NEYsIDB4OUIsIDB4MTcsCisgICAgMHhBRCwgMHgyQiwgMHg0MSwgMHg3QiwgMHhFNiwgMHg2QywgMHgzNywgMHgxMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzX3Rlc3RfY2ZiMTI4X2N0WzNdWzY0XSA9Cit7CisgICAgeyAweDNCLCAweDNGLCAweEQ5LCAweDJFLCAweEI3LCAweDJELCAweEFELCAweDIwLAorICAgICAgMHgzMywgMHgzNCwgMHg0OSwgMHhGOCwgMHhFOCwgMHgzQywgMHhGQiwgMHg0QSwKKyAgICAgIDB4QzgsIDB4QTYsIDB4NDUsIDB4MzcsIDB4QTAsIDB4QjMsIDB4QTksIDB4M0YsCisgICAgICAweENELCAweEUzLCAweENELCAweEFELCAweDlGLCAweDFDLCAweEU1LCAweDhCLAorICAgICAgMHgyNiwgMHg3NSwgMHgxRiwgMHg2NywgMHhBMywgMHhDQiwgMHhCMSwgMHg0MCwKKyAgICAgIDB4QjEsIDB4ODAsIDB4OEMsIDB4RjEsIDB4ODcsIDB4QTQsIDB4RjQsIDB4REYsCisgICAgICAweEMwLCAweDRCLCAweDA1LCAweDM1LCAweDdDLCAweDVELCAweDFDLCAweDBFLAorICAgICAgMHhFQSwgMHhDNCwgMHhDNiwgMHg2RiwgMHg5RiwgMHhGNywgMHhGMiwgMHhFNiB9LAorICAgIHsgMHhDRCwgMHhDOCwgMHgwRCwgMHg2RiwgMHhERCwgMHhGMSwgMHg4QywgMHhBQiwKKyAgICAgIDB4MzQsIDB4QzIsIDB4NTksIDB4MDksIDB4QzksIDB4OUEsIDB4NDEsIDB4NzQsCisgICAgICAweDY3LCAweENFLCAweDdGLCAweDdGLCAweDgxLCAweDE3LCAweDM2LCAweDIxLAorICAgICAgMHg5NiwgMHgxQSwgMHgyQiwgMHg3MCwgMHgxNywgMHgxRCwgMHgzRCwgMHg3QSwKKyAgICAgIDB4MkUsIDB4MUUsIDB4OEEsIDB4MUQsIDB4RDUsIDB4OUIsIDB4ODgsIDB4QjEsCisgICAgICAweEM4LCAweEU2LCAweDBGLCAweEVELCAweDFFLCAweEZBLCAweEM0LCAweEM5LAorICAgICAgMHhDMCwgMHg1RiwgMHg5RiwgMHg5QywgMHhBOSwgMHg4MywgMHg0RiwgMHhBMCwKKyAgICAgIDB4NDIsIDB4QUUsIDB4OEYsIDB4QkEsIDB4NTgsIDB4NEIsIDB4MDksIDB4RkYgfSwKKyAgICB7IDB4REMsIDB4N0UsIDB4ODQsIDB4QkYsIDB4REEsIDB4NzksIDB4MTYsIDB4NEIsCisgICAgICAweDdFLCAweENELCAweDg0LCAweDg2LCAweDk4LCAweDVELCAweDM4LCAweDYwLAorICAgICAgMHgzOSwgMHhGRiwgMHhFRCwgMHgxNCwgMHgzQiwgMHgyOCwgMHhCMSwgMHhDOCwKKyAgICAgIDB4MzIsIDB4MTEsIDB4M0MsIDB4NjMsIDB4MzEsIDB4RTUsIDB4NDAsIDB4N0IsCisgICAgICAweERGLCAweDEwLCAweDEzLCAweDI0LCAweDE1LCAweEU1LCAweDRCLCAweDkyLAorICAgICAgMHhBMSwgMHgzRSwgMHhEMCwgMHhBOCwgMHgyNiwgMHg3QSwgMHhFMiwgMHhGOSwKKyAgICAgIDB4NzUsIDB4QTMsIDB4ODUsIDB4NzQsIDB4MUEsIDB4QjksIDB4Q0UsIDB4RjgsCisgICAgICAweDIwLCAweDMxLCAweDYyLCAweDNELCAweDU1LCAweEIxLCAweEU0LCAweDcxIH0KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisvKgorICogQUVTLUNUUiB0ZXN0IHZlY3RvcnMgZnJvbToKKyAqCisgKiBodHRwOi8vd3d3LmZhcXMub3JnL3JmY3MvcmZjMzY4Ni5odG1sCisgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzX3Rlc3RfY3RyX2tleVszXVsxNl0gPQoreworICAgIHsgMHhBRSwgMHg2OCwgMHg1MiwgMHhGOCwgMHgxMiwgMHgxMCwgMHg2NywgMHhDQywKKyAgICAgIDB4NEIsIDB4RjcsIDB4QTUsIDB4NzYsIDB4NTUsIDB4NzcsIDB4RjMsIDB4OUUgfSwKKyAgICB7IDB4N0UsIDB4MjQsIDB4MDYsIDB4NzgsIDB4MTcsIDB4RkEsIDB4RTAsIDB4RDcsCisgICAgICAweDQzLCAweEQ2LCAweENFLCAweDFGLCAweDMyLCAweDUzLCAweDkxLCAweDYzIH0sCisgICAgeyAweDc2LCAweDkxLCAweEJFLCAweDAzLCAweDVFLCAweDUwLCAweDIwLCAweEE4LAorICAgICAgMHhBQywgMHg2RSwgMHg2MSwgMHg4NSwgMHgyOSwgMHhGOSwgMHhBMCwgMHhEQyB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfdGVzdF9jdHJfbm9uY2VfY291bnRlclszXVsxNl0gPQoreworICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSwKKyAgICB7IDB4MDAsIDB4NkMsIDB4QjYsIDB4REIsIDB4QzAsIDB4NTQsIDB4M0IsIDB4NTksCisgICAgICAweERBLCAweDQ4LCAweEQ5LCAweDBCLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0sCisgICAgeyAweDAwLCAweEUwLCAweDAxLCAweDdCLCAweDI3LCAweDc3LCAweDdGLCAweDNGLAorICAgICAgMHg0QSwgMHgxNywgMHg4NiwgMHhGMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfdGVzdF9jdHJfcHRbM11bNDhdID0KK3sKKyAgICB7IDB4NTMsIDB4NjksIDB4NkUsIDB4NjcsIDB4NkMsIDB4NjUsIDB4MjAsIDB4NjIsCisgICAgICAweDZDLCAweDZGLCAweDYzLCAweDZCLCAweDIwLCAweDZELCAweDczLCAweDY3IH0sCisKKyAgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKyAgICAgIDB4MTgsIDB4MTksIDB4MUEsIDB4MUIsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYgfSwKKworICAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQiwgMHgxQywgMHgxRCwgMHgxRSwgMHgxRiwKKyAgICAgIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzX3Rlc3RfY3RyX2N0WzNdWzQ4XSA9Cit7CisgICAgeyAweEU0LCAweDA5LCAweDVELCAweDRGLCAweEI3LCAweEE3LCAweEIzLCAweDc5LAorICAgICAgMHgyRCwgMHg2MSwgMHg3NSwgMHhBMywgMHgyNiwgMHgxMywgMHgxMSwgMHhCOCB9LAorICAgIHsgMHg1MSwgMHgwNCwgMHhBMSwgMHgwNiwgMHgxNiwgMHg4QSwgMHg3MiwgMHhEOSwKKyAgICAgIDB4NzksIDB4MEQsIDB4NDEsIDB4RUUsIDB4OEUsIDB4REEsIDB4RDMsIDB4ODgsCisgICAgICAweEVCLCAweDJFLCAweDFFLCAweEZDLCAweDQ2LCAweERBLCAweDU3LCAweEM4LAorICAgICAgMHhGQywgMHhFNiwgMHgzMCwgMHhERiwgMHg5MSwgMHg0MSwgMHhCRSwgMHgyOCB9LAorICAgIHsgMHhDMSwgMHhDRiwgMHg0OCwgMHhBOCwgMHg5RiwgMHgyRiwgMHhGRCwgMHhEOSwKKyAgICAgIDB4Q0YsIDB4NDYsIDB4NTIsIDB4RTksIDB4RUYsIDB4REIsIDB4NzIsIDB4RDcsCisgICAgICAweDQ1LCAweDQwLCAweEE0LCAweDJCLCAweERFLCAweDZELCAweDc4LCAweDM2LAorICAgICAgMHhENSwgMHg5QSwgMHg1QywgMHhFQSwgMHhBRSwgMHhGMywgMHgxMCwgMHg1MywKKyAgICAgIDB4MjUsIDB4QjIsIDB4MDcsIDB4MkYgfQorfTsKKworc3RhdGljIGNvbnN0IGludCBhZXNfdGVzdF9jdHJfbGVuWzNdID0KKyAgICB7IDE2LCAzMiwgMzYgfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCisvKgorICogQ2hlY2t1cCByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX2Flc19zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgcmV0ID0gMCwgaSwgaiwgdSwgdjsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVszMl07CisgICAgdW5zaWduZWQgY2hhciBidWZbNjRdOworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpIHx8IGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisgICAgdW5zaWduZWQgY2hhciBpdlsxNl07CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHVuc2lnbmVkIGNoYXIgcHJ2WzE2XTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpIHx8IGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisgICAgc2l6ZV90IG9mZnNldDsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisgICAgaW50IGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIG5vbmNlX2NvdW50ZXJbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgc3RyZWFtX2Jsb2NrWzE2XTsKKyNlbmRpZgorICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OworCisgICAgbWVtc2V0KCBrZXksIDAsIDMyICk7CisgICAgbWJlZHRsc19hZXNfaW5pdCggJmN0eCApOworCisgICAgLyoKKyAgICAgKiBFQ0IgbW9kZQorICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCA2OyBpKysgKQorICAgIHsKKyAgICAgICAgdSA9IGkgPj4gMTsKKyAgICAgICAgdiA9IGkgICYgMTsKKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBBRVMtRUNCLSUzZCAoJXMpOiAiLCAxMjggKyB1ICogNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdiA9PSBNQkVEVExTX0FFU19ERUNSWVBUICkgPyAiZGVjIiA6ICJlbmMiICk7CisKKyAgICAgICAgbWVtc2V0KCBidWYsIDAsIDE2ICk7CisKKyAgICAgICAgaWYoIHYgPT0gTUJFRFRMU19BRVNfREVDUllQVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfYWVzX3NldGtleV9kZWMoICZjdHgsIGtleSwgMTI4ICsgdSAqIDY0ICk7CisKKyAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCAxMDAwMDsgaisrICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9lY2IoICZjdHgsIHYsIGJ1ZiwgYnVmICk7CisKKyAgICAgICAgICAgIGlmKCBtZW1jbXAoIGJ1ZiwgYWVzX3Rlc3RfZWNiX2RlY1t1XSwgMTYgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmN0eCwga2V5LCAxMjggKyB1ICogNjQgKTsKKworICAgICAgICAgICAgZm9yKCBqID0gMDsgaiA8IDEwMDAwOyBqKysgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggJmN0eCwgdiwgYnVmLCBidWYgKTsKKworICAgICAgICAgICAgaWYoIG1lbWNtcCggYnVmLCBhZXNfdGVzdF9lY2JfZW5jW3VdLCAxNiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIC8qCisgICAgICogQ0JDIG1vZGUKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgNjsgaSsrICkKKyAgICB7CisgICAgICAgIHUgPSBpID4+IDE7CisgICAgICAgIHYgPSBpICAmIDE7CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgQUVTLUNCQy0lM2QgKCVzKTogIiwgMTI4ICsgdSAqIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHYgPT0gTUJFRFRMU19BRVNfREVDUllQVCApID8gImRlYyIgOiAiZW5jIiApOworCisgICAgICAgIG1lbXNldCggaXYgLCAwLCAxNiApOworICAgICAgICBtZW1zZXQoIHBydiwgMCwgMTYgKTsKKyAgICAgICAgbWVtc2V0KCBidWYsIDAsIDE2ICk7CisKKyAgICAgICAgaWYoIHYgPT0gTUJFRFRMU19BRVNfREVDUllQVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfYWVzX3NldGtleV9kZWMoICZjdHgsIGtleSwgMTI4ICsgdSAqIDY0ICk7CisKKyAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCAxMDAwMDsgaisrICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9jYmMoICZjdHgsIHYsIDE2LCBpdiwgYnVmLCBidWYgKTsKKworICAgICAgICAgICAgaWYoIG1lbWNtcCggYnVmLCBhZXNfdGVzdF9jYmNfZGVjW3VdLCAxNiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmY3R4LCBrZXksIDEyOCArIHUgKiA2NCApOworCisgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgMTAwMDA7IGorKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0bXBbMTZdOworCisgICAgICAgICAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfY2JjKCAmY3R4LCB2LCAxNiwgaXYsIGJ1ZiwgYnVmICk7CisKKyAgICAgICAgICAgICAgICBtZW1jcHkoIHRtcCwgcHJ2LCAxNiApOworICAgICAgICAgICAgICAgIG1lbWNweSggcHJ2LCBidWYsIDE2ICk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCBidWYsIHRtcCwgMTYgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIG1lbWNtcCggcHJ2LCBhZXNfdGVzdF9jYmNfZW5jW3VdLCAxNiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisgICAgLyoKKyAgICAgKiBDRkIxMjggbW9kZQorICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCA2OyBpKysgKQorICAgIHsKKyAgICAgICAgdSA9IGkgPj4gMTsKKyAgICAgICAgdiA9IGkgICYgMTsKKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBBRVMtQ0ZCMTI4LSUzZCAoJXMpOiAiLCAxMjggKyB1ICogNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdiA9PSBNQkVEVExTX0FFU19ERUNSWVBUICkgPyAiZGVjIiA6ICJlbmMiICk7CisKKyAgICAgICAgbWVtY3B5KCBpdiwgIGFlc190ZXN0X2NmYjEyOF9pdiwgMTYgKTsKKyAgICAgICAgbWVtY3B5KCBrZXksIGFlc190ZXN0X2NmYjEyOF9rZXlbdV0sIDE2ICsgdSAqIDggKTsKKworICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmY3R4LCBrZXksIDEyOCArIHUgKiA2NCApOworCisgICAgICAgIGlmKCB2ID09IE1CRURUTFNfQUVTX0RFQ1JZUFQgKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoIGJ1ZiwgYWVzX3Rlc3RfY2ZiMTI4X2N0W3VdLCA2NCApOworICAgICAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfY2ZiMTI4KCAmY3R4LCB2LCA2NCwgJm9mZnNldCwgaXYsIGJ1ZiwgYnVmICk7CisKKyAgICAgICAgICAgIGlmKCBtZW1jbXAoIGJ1ZiwgYWVzX3Rlc3RfY2ZiMTI4X3B0LCA2NCApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoIGJ1ZiwgYWVzX3Rlc3RfY2ZiMTI4X3B0LCA2NCApOworICAgICAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfY2ZiMTI4KCAmY3R4LCB2LCA2NCwgJm9mZnNldCwgaXYsIGJ1ZiwgYnVmICk7CisKKyAgICAgICAgICAgIGlmKCBtZW1jbXAoIGJ1ZiwgYWVzX3Rlc3RfY2ZiMTI4X2N0W3VdLCA2NCApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisgICAgLyoKKyAgICAgKiBDVFIgbW9kZQorICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCA2OyBpKysgKQorICAgIHsKKyAgICAgICAgdSA9IGkgPj4gMTsKKyAgICAgICAgdiA9IGkgICYgMTsKKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBBRVMtQ1RSLTEyOCAoJXMpOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHYgPT0gTUJFRFRMU19BRVNfREVDUllQVCApID8gImRlYyIgOiAiZW5jIiApOworCisgICAgICAgIG1lbWNweSggbm9uY2VfY291bnRlciwgYWVzX3Rlc3RfY3RyX25vbmNlX2NvdW50ZXJbdV0sIDE2ICk7CisgICAgICAgIG1lbWNweSgga2V5LCBhZXNfdGVzdF9jdHJfa2V5W3VdLCAxNiApOworCisgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgsIGtleSwgMTI4ICk7CisKKyAgICAgICAgaWYoIHYgPT0gTUJFRFRMU19BRVNfREVDUllQVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbiA9IGFlc190ZXN0X2N0cl9sZW5bdV07CisgICAgICAgICAgICBtZW1jcHkoIGJ1ZiwgYWVzX3Rlc3RfY3RyX2N0W3VdLCBsZW4gKTsKKworICAgICAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfY3RyKCAmY3R4LCBsZW4sICZvZmZzZXQsIG5vbmNlX2NvdW50ZXIsIHN0cmVhbV9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgYnVmICk7CisKKyAgICAgICAgICAgIGlmKCBtZW1jbXAoIGJ1ZiwgYWVzX3Rlc3RfY3RyX3B0W3VdLCBsZW4gKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbGVuID0gYWVzX3Rlc3RfY3RyX2xlblt1XTsKKyAgICAgICAgICAgIG1lbWNweSggYnVmLCBhZXNfdGVzdF9jdHJfcHRbdV0sIGxlbiApOworCisgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9jdHIoICZjdHgsIGxlbiwgJm9mZnNldCwgbm9uY2VfY291bnRlciwgc3RyZWFtX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBidWYgKTsKKworICAgICAgICAgICAgaWYoIG1lbWNtcCggYnVmLCBhZXNfdGVzdF9jdHJfY3RbdV0sIGxlbiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIgKi8KKworICAgIHJldCA9IDA7CisKK2V4aXQ6CisgICAgbWJlZHRsc19hZXNfZnJlZSggJmN0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9hZXNuaS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYWVzbmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2EzYzNlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYWVzbmkuYwpAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqICBBRVMtTkkgc3VwcG9ydCBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoKKyAqIFtBRVMtV1BdIGh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vZW4tdXMvYXJ0aWNsZXMvaW50ZWwtYWR2YW5jZWQtZW5jcnlwdGlvbi1zdGFuZGFyZC1hZXMtaW5zdHJ1Y3Rpb25zLXNldAorICogW0NMTVVMLVdQXSBodHRwOi8vc29mdHdhcmUuaW50ZWwuY29tL2VuLXVzL2FydGljbGVzL2ludGVsLWNhcnJ5LWxlc3MtbXVsdGlwbGljYXRpb24taW5zdHJ1Y3Rpb24tYW5kLWl0cy11c2FnZS1mb3ItY29tcHV0aW5nLXRoZS1nY20tbW9kZS8KKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU05JX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2Flc25pLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBhc20KKyNkZWZpbmUgYXNtIF9fYXNtCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1g4Nl82NCkKKworLyoKKyAqIEFFUy1OSSBzdXBwb3J0IGRldGVjdGlvbiByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX2Flc25pX2hhc19zdXBwb3J0KCB1bnNpZ25lZCBpbnQgd2hhdCApCit7CisgICAgc3RhdGljIGludCBkb25lID0gMDsKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGMgPSAwOworCisgICAgaWYoICEgZG9uZSApCisgICAgeworICAgICAgICBhc20oICJtb3ZsICAkMSwgJSVlYXggICBcblx0IgorICAgICAgICAgICAgICJjcHVpZCAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgIDogIj1jIiAoYykKKyAgICAgICAgICAgICA6CisgICAgICAgICAgICAgOiAiZWF4IiwgImVieCIsICJlZHgiICk7CisgICAgICAgIGRvbmUgPSAxOworICAgIH0KKworICAgIHJldHVybiggKCBjICYgd2hhdCApICE9IDAgKTsKK30KKworLyoKKyAqIEJpbnV0aWxzIG5lZWRzIHRvIGJlIGF0IGxlYXN0IDIuMTkgdG8gc3VwcG9ydCBBRVMtTkkgaW5zdHJ1Y3Rpb25zLgorICogVW5mb3J0dW5hdGVseSwgYSBsb3Qgb2YgdXNlcnMgaGF2ZSBhIGxvd2VyIHZlcnNpb24gbm93ICgyMDE0LTA0KS4KKyAqIEVtaXQgYnl0ZWNvZGUgZGlyZWN0bHkgaW4gb3JkZXIgdG8gc3VwcG9ydCAib2xkIiB2ZXJzaW9uIG9mIGdhcy4KKyAqCisgKiBPcGNvZGVzIGZyb20gdGhlIEludGVsIGFyY2hpdGVjdHVyZSByZWZlcmVuY2UgbWFudWFsLCB2b2wuIDMuCisgKiBXZSBhbHdheXMgdXNlIHJlZ2lzdGVycywgc28gd2UgZG9uJ3QgbmVlZCBwcmVmaXhlcyBmb3IgbWVtb3J5IG9wZXJhbmRzLgorICogT3BlcmFuZCBtYWNyb3MgYXJlIGluIGdhcyBvcmRlciAoc3JjLCBkc3QpIGFzIG9wcG9zZWQgdG8gSW50ZWwgb3JkZXIKKyAqIChkc3QsIHNyYykgaW4gb3JkZXIgdG8gYmxlbmQgYmV0dGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGFzc2VtYmx5IGNvZGUuCisgKi8KKyNkZWZpbmUgQUVTREVDICAgICAgIi5ieXRlIDB4NjYsMHgwRiwweDM4LDB4REUsIgorI2RlZmluZSBBRVNERUNMQVNUICAiLmJ5dGUgMHg2NiwweDBGLDB4MzgsMHhERiwiCisjZGVmaW5lIEFFU0VOQyAgICAgICIuYnl0ZSAweDY2LDB4MEYsMHgzOCwweERDLCIKKyNkZWZpbmUgQUVTRU5DTEFTVCAgIi5ieXRlIDB4NjYsMHgwRiwweDM4LDB4REQsIgorI2RlZmluZSBBRVNJTUMgICAgICAiLmJ5dGUgMHg2NiwweDBGLDB4MzgsMHhEQiwiCisjZGVmaW5lIEFFU0tFWUdFTkEgICIuYnl0ZSAweDY2LDB4MEYsMHgzQSwweERGLCIKKyNkZWZpbmUgUENMTVVMUURRICAgIi5ieXRlIDB4NjYsMHgwRiwweDNBLDB4NDQsIgorCisjZGVmaW5lIHhtbTBfeG1tMCAgICIweEMwIgorI2RlZmluZSB4bW0wX3htbTEgICAiMHhDOCIKKyNkZWZpbmUgeG1tMF94bW0yICAgIjB4RDAiCisjZGVmaW5lIHhtbTBfeG1tMyAgICIweEQ4IgorI2RlZmluZSB4bW0wX3htbTQgICAiMHhFMCIKKyNkZWZpbmUgeG1tMV94bW0wICAgIjB4QzEiCisjZGVmaW5lIHhtbTFfeG1tMiAgICIweEQxIgorCisvKgorICogQUVTLU5JIEFFUy1FQ0IgYmxvY2sgZW4oZGUpY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfYWVzbmlfY3J5cHRfZWNiKCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbMTZdLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICkKK3sKKyAgICBhc20oICJtb3ZkcXUgICAgKCUzKSwgJSV4bW0wICAgIFxuXHQiIC8vIGxvYWQgaW5wdXQKKyAgICAgICAgICJtb3ZkcXUgICAgKCUxKSwgJSV4bW0xICAgIFxuXHQiIC8vIGxvYWQgcm91bmQga2V5IDAKKyAgICAgICAgICJweG9yICAgICAgJSV4bW0xLCAlJXhtbTAgIFxuXHQiIC8vIHJvdW5kIDAKKyAgICAgICAgICJhZGQgICAgICAgJDE2LCAlMSAgICAgICAgIFxuXHQiIC8vIHBvaW50IHRvIG5leHQgcm91bmQga2V5CisgICAgICAgICAic3VibCAgICAgICQxLCAlMCAgICAgICAgICBcblx0IiAvLyBub3JtYWwgcm91bmRzID0gbnIgLSAxCisgICAgICAgICAidGVzdCAgICAgICUyLCAlMiAgICAgICAgICBcblx0IiAvLyBtb2RlPworICAgICAgICAgImp6ICAgICAgICAyZiAgICAgICAgICAgICAgXG5cdCIgLy8gMCA9IGRlY3J5cHQKKworICAgICAgICAgIjE6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZW5jcnlwdGlvbiBsb29wCisgICAgICAgICAibW92ZHF1ICAgICglMSksICUleG1tMSAgICBcblx0IiAvLyBsb2FkIHJvdW5kIGtleQorICAgICAgICAgQUVTRU5DICAgICB4bW0xX3htbTAgICAgICAiXG5cdCIgLy8gZG8gcm91bmQKKyAgICAgICAgICJhZGQgICAgICAgJDE2LCAlMSAgICAgICAgIFxuXHQiIC8vIHBvaW50IHRvIG5leHQgcm91bmQga2V5CisgICAgICAgICAic3VibCAgICAgICQxLCAlMCAgICAgICAgICBcblx0IiAvLyBsb29wCisgICAgICAgICAiam56ICAgICAgIDFiICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmRxdSAgICAoJTEpLCAlJXhtbTEgICAgXG5cdCIgLy8gbG9hZCByb3VuZCBrZXkKKyAgICAgICAgIEFFU0VOQ0xBU1QgeG1tMV94bW0wICAgICAgIlxuXHQiIC8vIGxhc3Qgcm91bmQKKyAgICAgICAgICJqbXAgICAgICAgM2YgICAgICAgICAgICAgIFxuXHQiCisKKyAgICAgICAgICIyOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGRlY3J5cHRpb24gbG9vcAorICAgICAgICAgIm1vdmRxdSAgICAoJTEpLCAlJXhtbTEgICAgXG5cdCIKKyAgICAgICAgIEFFU0RFQyAgICAgeG1tMV94bW0wICAgICAgIlxuXHQiIC8vIGRvIHJvdW5kCisgICAgICAgICAiYWRkICAgICAgICQxNiwgJTEgICAgICAgICBcblx0IgorICAgICAgICAgInN1YmwgICAgICAkMSwgJTAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJqbnogICAgICAgMmIgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92ZHF1ICAgICglMSksICUleG1tMSAgICBcblx0IiAvLyBsb2FkIHJvdW5kIGtleQorICAgICAgICAgQUVTREVDTEFTVCB4bW0xX3htbTAgICAgICAiXG5cdCIgLy8gbGFzdCByb3VuZAorCisgICAgICAgICAiMzogICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmRxdSAgICAlJXhtbTAsICglNCkgICAgXG5cdCIgLy8gZXhwb3J0IG91dHB1dAorICAgICAgICAgOgorICAgICAgICAgOiAiciIgKGN0eC0+bnIpLCAiciIgKGN0eC0+cmspLCAiciIgKG1vZGUpLCAiciIgKGlucHV0KSwgInIiIChvdXRwdXQpCisgICAgICAgICA6ICJtZW1vcnkiLCAiY2MiLCAieG1tMCIsICJ4bW0xIiApOworCisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEdDTSBtdWx0aXBsaWNhdGlvbjogYyA9IGEgdGltZXMgYiBpbiBHRigyXjEyOCkKKyAqIEJhc2VkIG9uIFtDTE1VTC1XUF0gYWxnb3JpdGhtcyAxICh3aXRoIGVxdWF0aW9uIDI3KSBhbmQgNS4KKyAqLwordm9pZCBtYmVkdGxzX2Flc25pX2djbV9tdWx0KCB1bnNpZ25lZCBjaGFyIGNbMTZdLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBhWzE2XSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYlsxNl0gKQoreworICAgIHVuc2lnbmVkIGNoYXIgYWFbMTZdLCBiYlsxNl0sIGNjWzE2XTsKKyAgICBzaXplX3QgaTsKKworICAgIC8qIFRoZSBpbnB1dHMgYXJlIGluIGJpZy1lbmRpYW4gb3JkZXIsIHNvIGJ5dGUtcmV2ZXJzZSB0aGVtICovCisgICAgZm9yKCBpID0gMDsgaSA8IDE2OyBpKysgKQorICAgIHsKKyAgICAgICAgYWFbaV0gPSBhWzE1IC0gaV07CisgICAgICAgIGJiW2ldID0gYlsxNSAtIGldOworICAgIH0KKworICAgIGFzbSggIm1vdmRxdSAoJTApLCAlJXhtbTAgICAgICAgICAgICAgICBcblx0IiAvLyBhMTphMAorICAgICAgICAgIm1vdmRxdSAoJTEpLCAlJXhtbTEgICAgICAgICAgICAgICBcblx0IiAvLyBiMTpiMAorCisgICAgICAgICAvKgorICAgICAgICAgICogQ2FyeWxlc3MgbXVsdGlwbGljYXRpb24geG1tMjp4bW0xID0geG1tMCAqIHhtbTEKKyAgICAgICAgICAqIHVzaW5nIFtDTE1VTC1XUF0gYWxnb3JpdGhtIDEgKHAuIDEzKS4KKyAgICAgICAgICAqLworICAgICAgICAgIm1vdmRxYSAlJXhtbTEsICUleG1tMiAgICAgICAgICAgICBcblx0IiAvLyBjb3B5IG9mIGIxOmIwCisgICAgICAgICAibW92ZHFhICUleG1tMSwgJSV4bW0zICAgICAgICAgICAgIFxuXHQiIC8vIHNhbWUKKyAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAlJXhtbTQgICAgICAgICAgICAgXG5cdCIgLy8gc2FtZQorICAgICAgICAgUENMTVVMUURRIHhtbTBfeG1tMSAiLDB4MDAgICAgICAgICBcblx0IiAvLyBhMCpiMCA9IGMxOmMwCisgICAgICAgICBQQ0xNVUxRRFEgeG1tMF94bW0yICIsMHgxMSAgICAgICAgIFxuXHQiIC8vIGExKmIxID0gZDE6ZDAKKyAgICAgICAgIFBDTE1VTFFEUSB4bW0wX3htbTMgIiwweDEwICAgICAgICAgXG5cdCIgLy8gYTAqYjEgPSBlMTplMAorICAgICAgICAgUENMTVVMUURRIHhtbTBfeG1tNCAiLDB4MDEgICAgICAgICBcblx0IiAvLyBhMSpiMCA9IGYxOmYwCisgICAgICAgICAicHhvciAlJXhtbTMsICUleG1tNCAgICAgICAgICAgICAgIFxuXHQiIC8vIGUxK2YxOmUwK2YwCisgICAgICAgICAibW92ZHFhICUleG1tNCwgJSV4bW0zICAgICAgICAgICAgIFxuXHQiIC8vIHNhbWUKKyAgICAgICAgICJwc3JsZHEgJDgsICUleG1tNCAgICAgICAgICAgICAgICAgXG5cdCIgLy8gMDplMStmMQorICAgICAgICAgInBzbGxkcSAkOCwgJSV4bW0zICAgICAgICAgICAgICAgICBcblx0IiAvLyBlMCtmMDowCisgICAgICAgICAicHhvciAlJXhtbTQsICUleG1tMiAgICAgICAgICAgICAgIFxuXHQiIC8vIGQxOmQwK2UxK2YxCisgICAgICAgICAicHhvciAlJXhtbTMsICUleG1tMSAgICAgICAgICAgICAgIFxuXHQiIC8vIGMxK2UwK2YxOmMwCisKKyAgICAgICAgIC8qCisgICAgICAgICAgKiBOb3cgc2hpZnQgdGhlIHJlc3VsdCBvbmUgYml0IHRvIHRoZSBsZWZ0LAorICAgICAgICAgICogdGFraW5nIGFkdmFudGFnZSBvZiBbQ0xNVUwtV1BdIGVxIDI3IChwLiAyMCkKKyAgICAgICAgICAqLworICAgICAgICAgIm1vdmRxYSAlJXhtbTEsICUleG1tMyAgICAgICAgICAgICBcblx0IiAvLyByMTpyMAorICAgICAgICAgIm1vdmRxYSAlJXhtbTIsICUleG1tNCAgICAgICAgICAgICBcblx0IiAvLyByMzpyMgorICAgICAgICAgInBzbGxxICQxLCAlJXhtbTEgICAgICAgICAgICAgICAgICBcblx0IiAvLyByMTw8MTpyMDw8MQorICAgICAgICAgInBzbGxxICQxLCAlJXhtbTIgICAgICAgICAgICAgICAgICBcblx0IiAvLyByMzw8MTpyMjw8MQorICAgICAgICAgInBzcmxxICQ2MywgJSV4bW0zICAgICAgICAgICAgICAgICBcblx0IiAvLyByMT4+NjM6cjA+PjYzCisgICAgICAgICAicHNybHEgJDYzLCAlJXhtbTQgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHIzPj42MzpyMj4+NjMKKyAgICAgICAgICJtb3ZkcWEgJSV4bW0zLCAlJXhtbTUgICAgICAgICAgICAgXG5cdCIgLy8gcjE+PjYzOnIwPj42MworICAgICAgICAgInBzbGxkcSAkOCwgJSV4bW0zICAgICAgICAgICAgICAgICBcblx0IiAvLyByMD4+NjM6MAorICAgICAgICAgInBzbGxkcSAkOCwgJSV4bW00ICAgICAgICAgICAgICAgICBcblx0IiAvLyByMj4+NjM6MAorICAgICAgICAgInBzcmxkcSAkOCwgJSV4bW01ICAgICAgICAgICAgICAgICBcblx0IiAvLyAwOnIxPj42MworICAgICAgICAgInBvciAlJXhtbTMsICUleG1tMSAgICAgICAgICAgICAgICBcblx0IiAvLyByMTw8MXxyMD4+NjM6cjA8PDEKKyAgICAgICAgICJwb3IgJSV4bW00LCAlJXhtbTIgICAgICAgICAgICAgICAgXG5cdCIgLy8gcjM8PDF8cjI+PjYyOnIyPDwxCisgICAgICAgICAicG9yICUleG1tNSwgJSV4bW0yICAgICAgICAgICAgICAgIFxuXHQiIC8vIHIzPDwxfHIyPj42MjpyMjw8MXxyMT4+NjMKKworICAgICAgICAgLyoKKyAgICAgICAgICAqIE5vdyByZWR1Y2UgbW9kdWxvIHRoZSBHQ00gcG9seW5vbWlhbCB4XjEyOCArIHheNyArIHheMiArIHggKyAxCisgICAgICAgICAgKiB1c2luZyBbQ0xNVUwtV1BdIGFsZ29yaXRobSA1IChwLiAyMCkuCisgICAgICAgICAgKiBDdXJyZW50bHkgeG1tMjp4bW0xIGhvbGRzIHgzOngyOngxOngwIChhbHJlYWR5IHNoaWZ0ZWQpLgorICAgICAgICAgICovCisgICAgICAgICAvKiBTdGVwIDIgKDEpICovCisgICAgICAgICAibW92ZHFhICUleG1tMSwgJSV4bW0zICAgICAgICAgICAgIFxuXHQiIC8vIHgxOngwCisgICAgICAgICAibW92ZHFhICUleG1tMSwgJSV4bW00ICAgICAgICAgICAgIFxuXHQiIC8vIHNhbWUKKyAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAlJXhtbTUgICAgICAgICAgICAgXG5cdCIgLy8gc2FtZQorICAgICAgICAgInBzbGxxICQ2MywgJSV4bW0zICAgICAgICAgICAgICAgICBcblx0IiAvLyB4MTw8NjM6eDA8PDYzID0gc3R1ZmY6YQorICAgICAgICAgInBzbGxxICQ2MiwgJSV4bW00ICAgICAgICAgICAgICAgICBcblx0IiAvLyB4MTw8NjI6eDA8PDYyID0gc3R1ZmY6YgorICAgICAgICAgInBzbGxxICQ1NywgJSV4bW01ICAgICAgICAgICAgICAgICBcblx0IiAvLyB4MTw8NTc6eDA8PDU3ID0gc3R1ZmY6YworCisgICAgICAgICAvKiBTdGVwIDIgKDIpICovCisgICAgICAgICAicHhvciAlJXhtbTQsICUleG1tMyAgICAgICAgICAgICAgIFxuXHQiIC8vIHN0dWZmOmErYgorICAgICAgICAgInB4b3IgJSV4bW01LCAlJXhtbTMgICAgICAgICAgICAgICBcblx0IiAvLyBzdHVmZjphK2IrYworICAgICAgICAgInBzbGxkcSAkOCwgJSV4bW0zICAgICAgICAgICAgICAgICBcblx0IiAvLyBhK2IrYzowCisgICAgICAgICAicHhvciAlJXhtbTMsICUleG1tMSAgICAgICAgICAgICAgIFxuXHQiIC8vIHgxK2ErYitjOngwID0gZDp4MAorCisgICAgICAgICAvKiBTdGVwcyAzIGFuZCA0ICovCisgICAgICAgICAibW92ZHFhICUleG1tMSwlJXhtbTAgICAgICAgICAgICAgIFxuXHQiIC8vIGQ6eDAKKyAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCUleG1tNCAgICAgICAgICAgICAgXG5cdCIgLy8gc2FtZQorICAgICAgICAgIm1vdmRxYSAlJXhtbTEsJSV4bW01ICAgICAgICAgICAgICBcblx0IiAvLyBzYW1lCisgICAgICAgICAicHNybHEgJDEsICUleG1tMCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGUxOngwPj4xID0gZTE6ZTAnCisgICAgICAgICAicHNybHEgJDIsICUleG1tNCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGYxOngwPj4yID0gZjE6ZjAnCisgICAgICAgICAicHNybHEgJDcsICUleG1tNSAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGcxOngwPj43ID0gZzE6ZzAnCisgICAgICAgICAicHhvciAlJXhtbTQsICUleG1tMCAgICAgICAgICAgICAgIFxuXHQiIC8vIGUxK2YxOmUwJytmMCcKKyAgICAgICAgICJweG9yICUleG1tNSwgJSV4bW0wICAgICAgICAgICAgICAgXG5cdCIgLy8gZTErZjErZzE6ZTAnK2YwJytnMCcKKyAgICAgICAgIC8vIGUwJytmMCcrZzAnIGlzIGFsbW9zdCBlMCtmMCtnMCwgZXhcdGNlcHQgZm9yIHNvbWUgbWlzc2luZworICAgICAgICAgLy8gYml0cyBjYXJyaWVkIGZyb20gZC4gTm93IGdldCB0aG9zZVx0IGJpdHMgYmFjayBpbi4KKyAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCUleG1tMyAgICAgICAgICAgICAgXG5cdCIgLy8gZDp4MAorICAgICAgICAgIm1vdmRxYSAlJXhtbTEsJSV4bW00ICAgICAgICAgICAgICBcblx0IiAvLyBzYW1lCisgICAgICAgICAibW92ZHFhICUleG1tMSwlJXhtbTUgICAgICAgICAgICAgIFxuXHQiIC8vIHNhbWUKKyAgICAgICAgICJwc2xscSAkNjMsICUleG1tMyAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZDw8NjM6c3R1ZmYKKyAgICAgICAgICJwc2xscSAkNjIsICUleG1tNCAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZDw8NjI6c3R1ZmYKKyAgICAgICAgICJwc2xscSAkNTcsICUleG1tNSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZDw8NTc6c3R1ZmYKKyAgICAgICAgICJweG9yICUleG1tNCwgJSV4bW0zICAgICAgICAgICAgICAgXG5cdCIgLy8gZDw8NjMrZDw8NjI6c3R1ZmYKKyAgICAgICAgICJweG9yICUleG1tNSwgJSV4bW0zICAgICAgICAgICAgICAgXG5cdCIgLy8gbWlzc2luZyBiaXRzIG9mIGQ6c3R1ZmYKKyAgICAgICAgICJwc3JsZHEgJDgsICUleG1tMyAgICAgICAgICAgICAgICAgXG5cdCIgLy8gMDptaXNzaW5nIGJpdHMgb2YgZAorICAgICAgICAgInB4b3IgJSV4bW0zLCAlJXhtbTAgICAgICAgICAgICAgICBcblx0IiAvLyBlMStmMStnMTplMCtmMCtnMAorICAgICAgICAgInB4b3IgJSV4bW0xLCAlJXhtbTAgICAgICAgICAgICAgICBcblx0IiAvLyBoMTpoMAorICAgICAgICAgInB4b3IgJSV4bW0yLCAlJXhtbTAgICAgICAgICAgICAgICBcblx0IiAvLyB4MytoMTp4MitoMAorCisgICAgICAgICAibW92ZHF1ICUleG1tMCwgKCUyKSAgICAgICAgICAgICAgIFxuXHQiIC8vIGRvbmUKKyAgICAgICAgIDoKKyAgICAgICAgIDogInIiIChhYSksICJyIiAoYmIpLCAiciIgKGNjKQorICAgICAgICAgOiAibWVtb3J5IiwgImNjIiwgInhtbTAiLCAieG1tMSIsICJ4bW0yIiwgInhtbTMiLCAieG1tNCIsICJ4bW01IiApOworCisgICAgLyogTm93IGJ5dGUtcmV2ZXJzZSB0aGUgb3V0cHV0cyAqLworICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICAgICAgY1tpXSA9IGNjWzE1IC0gaV07CisKKyAgICByZXR1cm47Cit9CisKKy8qCisgKiBDb21wdXRlIGRlY3J5cHRpb24gcm91bmQga2V5cyBmcm9tIGVuY3J5cHRpb24gcm91bmQga2V5cworICovCit2b2lkIG1iZWR0bHNfYWVzbmlfaW52ZXJzZV9rZXkoIHVuc2lnbmVkIGNoYXIgKmludmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZ3ZGtleSwgaW50IG5yICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICppayA9IGludmtleTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmayA9IGZ3ZGtleSArIDE2ICogbnI7CisKKyAgICBtZW1jcHkoIGlrLCBmaywgMTYgKTsKKworICAgIGZvciggZmsgLT0gMTYsIGlrICs9IDE2OyBmayA+IGZ3ZGtleTsgZmsgLT0gMTYsIGlrICs9IDE2ICkKKyAgICAgICAgYXNtKCAibW92ZHF1ICglMCksICUleG1tMCAgICAgICBcblx0IgorICAgICAgICAgICAgIEFFU0lNQyAgeG1tMF94bW0wICAgICAgICAgIlxuXHQiCisgICAgICAgICAgICAgIm1vdmRxdSAlJXhtbTAsICglMSkgICAgICAgXG5cdCIKKyAgICAgICAgICAgICA6CisgICAgICAgICAgICAgOiAiciIgKGZrKSwgInIiIChpaykKKyAgICAgICAgICAgICA6ICJtZW1vcnkiLCAieG1tMCIgKTsKKworICAgIG1lbWNweSggaWssIGZrLCAxNiApOworfQorCisvKgorICogS2V5IGV4cGFuc2lvbiwgMTI4LWJpdCBjYXNlCisgKi8KK3N0YXRpYyB2b2lkIGFlc25pX3NldGtleV9lbmNfMTI4KCB1bnNpZ25lZCBjaGFyICpyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXkgKQoreworICAgIGFzbSggIm1vdmRxdSAoJTEpLCAlJXhtbTAgICAgICAgICAgICAgICBcblx0IiAvLyBjb3B5IHRoZSBvcmlnaW5hbCBrZXkKKyAgICAgICAgICJtb3ZkcXUgJSV4bW0wLCAoJTApICAgICAgICAgICAgICAgXG5cdCIgLy8gYXMgcm91bmQga2V5IDAKKyAgICAgICAgICJqbXAgMmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gc2tpcCBhdXhpbGlhcnkgcm91dGluZQorCisgICAgICAgICAvKgorICAgICAgICAgICogRmluaXNoIGdlbmVyYXRpbmcgdGhlIG5leHQgcm91bmQga2V5LgorICAgICAgICAgICoKKyAgICAgICAgICAqIE9uIGVudHJ5IHhtbTAgaXMgcjM6cjI6cjE6cjAgYW5kIHhtbTEgaXMgWDpzdHVmZjpzdHVmZjpzdHVmZgorICAgICAgICAgICogd2l0aCBYID0gcm90KCBzdWIoIHIzICkgKSBeIFJDT04uCisgICAgICAgICAgKgorICAgICAgICAgICogT24gZXhpdCwgeG1tMCBpcyByNzpyNjpyNTpyNAorICAgICAgICAgICogd2l0aCByNCA9IFggKyByMCwgcjUgPSByNCArIHIxLCByNiA9IHI1ICsgcjIsIHI3ID0gcjYgKyByMworICAgICAgICAgICogYW5kIHRob3NlIGFyZSB3cml0dGVuIHRvIHRoZSByb3VuZCBrZXkgYnVmZmVyLgorICAgICAgICAgICovCisgICAgICAgICAiMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHNodWZkICQweGZmLCAlJXhtbTEsICUleG1tMSAgICAgIFxuXHQiIC8vIFg6WDpYOlgKKyAgICAgICAgICJweG9yICUleG1tMCwgJSV4bW0xICAgICAgICAgICAgICAgXG5cdCIgLy8gWCtyMzpYK3IyOlgrcjE6cjQKKyAgICAgICAgICJwc2xsZHEgJDQsICUleG1tMCAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcjI6cjE6cjA6MAorICAgICAgICAgInB4b3IgJSV4bW0wLCAlJXhtbTEgICAgICAgICAgICAgICBcblx0IiAvLyBYK3IzK3IyOlgrcjIrcjE6cjU6cjQKKyAgICAgICAgICJwc2xsZHEgJDQsICUleG1tMCAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZXRjCisgICAgICAgICAicHhvciAlJXhtbTAsICUleG1tMSAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHNsbGRxICQ0LCAlJXhtbTAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHhvciAlJXhtbTEsICUleG1tMCAgICAgICAgICAgICAgIFxuXHQiIC8vIHVwZGF0ZSB4bW0wIGZvciBuZXh0IHRpbWUhCisgICAgICAgICAiYWRkICQxNiwgJTAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHBvaW50IHRvIG5leHQgcm91bmQga2V5CisgICAgICAgICAibW92ZHF1ICUleG1tMCwgKCUwKSAgICAgICAgICAgICAgIFxuXHQiIC8vIHdyaXRlIGl0CisgICAgICAgICAicmV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisKKyAgICAgICAgIC8qIE1haW4gImxvb3AiICovCisgICAgICAgICAiMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTBfeG1tMSAiLDB4MDEgICAgICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTBfeG1tMSAiLDB4MDIgICAgICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTBfeG1tMSAiLDB4MDQgICAgICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTBfeG1tMSAiLDB4MDggICAgICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTBfeG1tMSAiLDB4MTAgICAgICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTBfeG1tMSAiLDB4MjAgICAgICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTBfeG1tMSAiLDB4NDAgICAgICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTBfeG1tMSAiLDB4ODAgICAgICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTBfeG1tMSAiLDB4MUIgICAgICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTBfeG1tMSAiLDB4MzYgICAgICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICA6CisgICAgICAgICA6ICJyIiAocmspLCAiciIgKGtleSkKKyAgICAgICAgIDogIm1lbW9yeSIsICJjYyIsICIwIiApOworfQorCisvKgorICogS2V5IGV4cGFuc2lvbiwgMTkyLWJpdCBjYXNlCisgKi8KK3N0YXRpYyB2b2lkIGFlc25pX3NldGtleV9lbmNfMTkyKCB1bnNpZ25lZCBjaGFyICpyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXkgKQoreworICAgIGFzbSggIm1vdmRxdSAoJTEpLCAlJXhtbTAgICBcblx0IiAvLyBjb3B5IG9yaWdpbmFsIHJvdW5kIGtleQorICAgICAgICAgIm1vdmRxdSAlJXhtbTAsICglMCkgICBcblx0IgorICAgICAgICAgImFkZCAkMTYsICUwICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdnEgMTYoJTEpLCAlJXhtbTEgICBcblx0IgorICAgICAgICAgIm1vdnEgJSV4bW0xLCAoJTApICAgICBcblx0IgorICAgICAgICAgImFkZCAkOCwgJTAgICAgICAgICAgICBcblx0IgorICAgICAgICAgImptcCAyZiAgICAgICAgICAgICAgICBcblx0IiAvLyBza2lwIGF1eGlsaWFyeSByb3V0aW5lCisKKyAgICAgICAgIC8qCisgICAgICAgICAgKiBGaW5pc2ggZ2VuZXJhdGluZyB0aGUgbmV4dCA2IHF1YXJ0ZXIta2V5cy4KKyAgICAgICAgICAqCisgICAgICAgICAgKiBPbiBlbnRyeSB4bW0wIGlzIHIzOnIyOnIxOnIwLCB4bW0xIGlzIHN0dWZmOnN0dWZmOnI1OnI0CisgICAgICAgICAgKiBhbmQgeG1tMiBpcyBzdHVmZjpzdHVmZjpYOnN0dWZmIHdpdGggWCA9IHJvdCggc3ViKCByMyApICkgXiBSQ09OLgorICAgICAgICAgICoKKyAgICAgICAgICAqIE9uIGV4aXQsIHhtbTAgaXMgcjk6cjg6cjc6cjYgYW5kIHhtbTEgaXMgc3R1ZmY6c3R1ZmY6cjExOnIxMAorICAgICAgICAgICogYW5kIHRob3NlIGFyZSB3cml0dGVuIHRvIHRoZSByb3VuZCBrZXkgYnVmZmVyLgorICAgICAgICAgICovCisgICAgICAgICAiMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJwc2h1ZmQgJDB4NTUsICUleG1tMiwgJSV4bW0yICBcblx0IiAvLyBYOlg6WDpYCisgICAgICAgICAicHhvciAlJXhtbTAsICUleG1tMiAgICAgICAgICAgXG5cdCIgLy8gWCtyMzpYK3IyOlgrcjE6cjQKKyAgICAgICAgICJwc2xsZHEgJDQsICUleG1tMCAgICAgICAgICAgICBcblx0IiAvLyBldGMKKyAgICAgICAgICJweG9yICUleG1tMCwgJSV4bW0yICAgICAgICAgICBcblx0IgorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0wICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHhvciAlJXhtbTAsICUleG1tMiAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJwc2xsZHEgJDQsICUleG1tMCAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInB4b3IgJSV4bW0yLCAlJXhtbTAgICAgICAgICAgIFxuXHQiIC8vIHVwZGF0ZSB4bW0wID0gcjk6cjg6cjc6cjYKKyAgICAgICAgICJtb3ZkcXUgJSV4bW0wLCAoJTApICAgICAgICAgICBcblx0IgorICAgICAgICAgImFkZCAkMTYsICUwICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHNodWZkICQweGZmLCAlJXhtbTAsICUleG1tMiAgXG5cdCIgLy8gcjk6cjk6cjk6cjkKKyAgICAgICAgICJweG9yICUleG1tMSwgJSV4bW0yICAgICAgICAgICBcblx0IiAvLyBzdHVmZjpzdHVmZjpyOStyNTpyMTAKKyAgICAgICAgICJwc2xsZHEgJDQsICUleG1tMSAgICAgICAgICAgICBcblx0IiAvLyByMjpyMTpyMDowCisgICAgICAgICAicHhvciAlJXhtbTIsICUleG1tMSAgICAgICAgICAgXG5cdCIgLy8geG1tMSA9IHN0dWZmOnN0dWZmOnIxMTpyMTAKKyAgICAgICAgICJtb3ZxICUleG1tMSwgKCUwKSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgImFkZCAkOCwgJTAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicmV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgIjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTFfeG1tMiAiLDB4MDEgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHgwMiAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDA0ICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTFfeG1tMiAiLDB4MDggICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHgxMCAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDIwICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTFfeG1tMiAiLDB4NDAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHg4MCAgICBcblx0Y2FsbCAxYiBcblx0IgorCisgICAgICAgICA6CisgICAgICAgICA6ICJyIiAocmspLCAiciIgKGtleSkKKyAgICAgICAgIDogIm1lbW9yeSIsICJjYyIsICIwIiApOworfQorCisvKgorICogS2V5IGV4cGFuc2lvbiwgMjU2LWJpdCBjYXNlCisgKi8KK3N0YXRpYyB2b2lkIGFlc25pX3NldGtleV9lbmNfMjU2KCB1bnNpZ25lZCBjaGFyICpyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXkgKQoreworICAgIGFzbSggIm1vdmRxdSAoJTEpLCAlJXhtbTAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92ZHF1ICUleG1tMCwgKCUwKSAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJhZGQgJDE2LCAlMCAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmRxdSAxNiglMSksICUleG1tMSAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92ZHF1ICUleG1tMSwgKCUwKSAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJqbXAgMmYgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBza2lwIGF1eGlsaWFyeSByb3V0aW5lCisKKyAgICAgICAgIC8qCisgICAgICAgICAgKiBGaW5pc2ggZ2VuZXJhdGluZyB0aGUgbmV4dCB0d28gcm91bmQga2V5cy4KKyAgICAgICAgICAqCisgICAgICAgICAgKiBPbiBlbnRyeSB4bW0wIGlzIHIzOnIyOnIxOnIwLCB4bW0xIGlzIHI3OnI2OnI1OnI0IGFuZAorICAgICAgICAgICogeG1tMiBpcyBYOnN0dWZmOnN0dWZmOnN0dWZmIHdpdGggWCA9IHJvdCggc3ViKCByNyApKSBeIFJDT04KKyAgICAgICAgICAqCisgICAgICAgICAgKiBPbiBleGl0LCB4bW0wIGlzIHIxMTpyMTA6cjk6cjggYW5kIHhtbTEgaXMgcjE1OnIxNDpyMTM6cjEyCisgICAgICAgICAgKiBhbmQgdGhvc2UgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBidWZmZXIuCisgICAgICAgICAgKi8KKyAgICAgICAgICIxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJwc2h1ZmQgJDB4ZmYsICUleG1tMiwgJSV4bW0yICAgICAgXG5cdCIKKyAgICAgICAgICJweG9yICUleG1tMCwgJSV4bW0yICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJwc2xsZHEgJDQsICUleG1tMCAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJweG9yICUleG1tMCwgJSV4bW0yICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJwc2xsZHEgJDQsICUleG1tMCAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJweG9yICUleG1tMCwgJSV4bW0yICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJwc2xsZHEgJDQsICUleG1tMCAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJweG9yICUleG1tMiwgJSV4bW0wICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJhZGQgJDE2LCAlMCAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZkcXUgJSV4bW0wLCAoJTApICAgICAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgLyogU2V0IHhtbTIgdG8gc3R1ZmY6WTpzdHVmZjpzdHVmZiB3aXRoIFkgPSBzdWJ3b3JkKCByMTEgKQorICAgICAgICAgICogYW5kIHByb2NlZWQgdG8gZ2VuZXJhdGUgbmV4dCByb3VuZCBrZXkgZnJvbSB0aGVyZSAqLworICAgICAgICAgQUVTS0VZR0VOQSB4bW0wX3htbTIgIiwweDAwICAgICAgICBcblx0IgorICAgICAgICAgInBzaHVmZCAkMHhhYSwgJSV4bW0yLCAlJXhtbTIgICAgICBcblx0IgorICAgICAgICAgInB4b3IgJSV4bW0xLCAlJXhtbTIgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0xICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInB4b3IgJSV4bW0xLCAlJXhtbTIgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0xICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInB4b3IgJSV4bW0xLCAlJXhtbTIgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0xICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInB4b3IgJSV4bW0yLCAlJXhtbTEgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgImFkZCAkMTYsICUwICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmRxdSAlJXhtbTEsICglMCkgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInJldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCisgICAgICAgICAvKgorICAgICAgICAgICogTWFpbiAibG9vcCIgLSBHZW5lcmF0aW5nIG9uZSBtb3JlIGtleSB0aGFuIG5lY2Vzc2FyeSwKKyAgICAgICAgICAqIHNlZSBkZWZpbml0aW9uIG9mIG1iZWR0bHNfYWVzX2NvbnRleHQuYnVmCisgICAgICAgICAgKi8KKyAgICAgICAgICIyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHgwMSAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHgwMiAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHgwNCAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHgwOCAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHgxMCAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHgyMCAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHg0MCAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIDoKKyAgICAgICAgIDogInIiIChyayksICJyIiAoa2V5KQorICAgICAgICAgOiAibWVtb3J5IiwgImNjIiwgIjAiICk7Cit9CisKKy8qCisgKiBLZXkgZXhwYW5zaW9uLCB3cmFwcGVyCisgKi8KK2ludCBtYmVkdGxzX2Flc25pX3NldGtleV9lbmMoIHVuc2lnbmVkIGNoYXIgKnJrLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYml0cyApCit7CisgICAgc3dpdGNoKCBiaXRzICkKKyAgICB7CisgICAgICAgIGNhc2UgMTI4OiBhZXNuaV9zZXRrZXlfZW5jXzEyOCggcmssIGtleSApOyBicmVhazsKKyAgICAgICAgY2FzZSAxOTI6IGFlc25pX3NldGtleV9lbmNfMTkyKCByaywga2V5ICk7IGJyZWFrOworICAgICAgICBjYXNlIDI1NjogYWVzbmlfc2V0a2V5X2VuY18yNTYoIHJrLCBrZXkgKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQgOiByZXR1cm4oIE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0tFWV9MRU5HVEggKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9YODZfNjQgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfQUVTTklfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYXJjNC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYXJjNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YjMzZDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9hcmM0LmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEFSQ0ZPVVIgYWxnb3JpdGhtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBBUkNGT1VSIGFsZ29yaXRobSB3YXMgcHVibGljbHkgZGlzY2xvc2VkIG9uIDk0LzA5LgorICoKKyAqICBodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvc2NpLmNyeXB0L21zZy8xMGEzMDBjOWQyMWFmY2EwCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2FyYzQuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0FSQzRfQUxUKQorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIqKXY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKwordm9pZCBtYmVkdGxzX2FyYzRfaW5pdCggbWJlZHRsc19hcmM0X2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19hcmM0X2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfYXJjNF9mcmVlKCBtYmVkdGxzX2FyYzRfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX2FyYzRfY29udGV4dCApICk7Cit9CisKKy8qCisgKiBBUkM0IGtleSBzY2hlZHVsZQorICovCit2b2lkIG1iZWR0bHNfYXJjNF9zZXR1cCggbWJlZHRsc19hcmM0X2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuICkKK3sKKyAgICBpbnQgaSwgaiwgYTsKKyAgICB1bnNpZ25lZCBpbnQgazsKKyAgICB1bnNpZ25lZCBjaGFyICptOworCisgICAgY3R4LT54ID0gMDsKKyAgICBjdHgtPnkgPSAwOworICAgIG0gPSBjdHgtPm07CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMjU2OyBpKysgKQorICAgICAgICBtW2ldID0gKHVuc2lnbmVkIGNoYXIpIGk7CisKKyAgICBqID0gayA9IDA7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMjU2OyBpKyssIGsrKyApCisgICAgeworICAgICAgICBpZiggayA+PSBrZXlsZW4gKSBrID0gMDsKKworICAgICAgICBhID0gbVtpXTsKKyAgICAgICAgaiA9ICggaiArIGEgKyBrZXlba10gKSAmIDB4RkY7CisgICAgICAgIG1baV0gPSBtW2pdOworICAgICAgICBtW2pdID0gKHVuc2lnbmVkIGNoYXIpIGE7CisgICAgfQorfQorCisvKgorICogQVJDNCBjaXBoZXIgZnVuY3Rpb24KKyAqLworaW50IG1iZWR0bHNfYXJjNF9jcnlwdCggbWJlZHRsc19hcmM0X2NvbnRleHQgKmN0eCwgc2l6ZV90IGxlbmd0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgeCwgeSwgYSwgYjsKKyAgICBzaXplX3QgaTsKKyAgICB1bnNpZ25lZCBjaGFyICptOworCisgICAgeCA9IGN0eC0+eDsKKyAgICB5ID0gY3R4LT55OworICAgIG0gPSBjdHgtPm07CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKQorICAgIHsKKyAgICAgICAgeCA9ICggeCArIDEgKSAmIDB4RkY7IGEgPSBtW3hdOworICAgICAgICB5ID0gKCB5ICsgYSApICYgMHhGRjsgYiA9IG1beV07CisKKyAgICAgICAgbVt4XSA9ICh1bnNpZ25lZCBjaGFyKSBiOworICAgICAgICBtW3ldID0gKHVuc2lnbmVkIGNoYXIpIGE7CisKKyAgICAgICAgb3V0cHV0W2ldID0gKHVuc2lnbmVkIGNoYXIpCisgICAgICAgICAgICAoIGlucHV0W2ldIF4gbVsodW5zaWduZWQgY2hhcikoIGEgKyBiICldICk7CisgICAgfQorCisgICAgY3R4LT54ID0geDsKKyAgICBjdHgtPnkgPSB5OworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiAhTUJFRFRMU19BUkM0X0FMVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKy8qCisgKiBBUkM0IHRlc3RzIHZlY3RvcnMgYXMgcG9zdGVkIGJ5IEVyaWMgUmVzY29ybGEgaW4gc2VwLiAxOTk0OgorICoKKyAqIGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb21wLnNlY3VyaXR5Lm1pc2MvbXNnLzEwYTMwMGM5ZDIxYWZjYTAKKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYXJjNF90ZXN0X2tleVszXVs4XSA9Cit7CisgICAgeyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGIH0sCisgICAgeyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGIH0sCisgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFyYzRfdGVzdF9wdFszXVs4XSA9Cit7CisgICAgeyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGIH0sCisgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFyYzRfdGVzdF9jdFszXVs4XSA9Cit7CisgICAgeyAweDc1LCAweEI3LCAweDg3LCAweDgwLCAweDk5LCAweEUwLCAweEM1LCAweDk2IH0sCisgICAgeyAweDc0LCAweDk0LCAweEMyLCAweEU3LCAweDEwLCAweDRCLCAweDA4LCAweDc5IH0sCisgICAgeyAweERFLCAweDE4LCAweDg5LCAweDQxLCAweEEzLCAweDM3LCAweDVELCAweDNBIH0KK307CisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfYXJjNF9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgaSwgcmV0ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGlidWZbOF07CisgICAgdW5zaWduZWQgY2hhciBvYnVmWzhdOworICAgIG1iZWR0bHNfYXJjNF9jb250ZXh0IGN0eDsKKworICAgIG1iZWR0bHNfYXJjNF9pbml0KCAmY3R4ICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMzsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEFSQzQgdGVzdCAjJWQ6ICIsIGkgKyAxICk7CisKKyAgICAgICAgbWVtY3B5KCBpYnVmLCBhcmM0X3Rlc3RfcHRbaV0sIDggKTsKKworICAgICAgICBtYmVkdGxzX2FyYzRfc2V0dXAoICZjdHgsIGFyYzRfdGVzdF9rZXlbaV0sIDggKTsKKyAgICAgICAgbWJlZHRsc19hcmM0X2NyeXB0KCAmY3R4LCA4LCBpYnVmLCBvYnVmICk7CisKKyAgICAgICAgaWYoIG1lbWNtcCggb2J1ZiwgYXJjNF90ZXN0X2N0W2ldLCA4ICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19hcmM0X2ZyZWUoICZjdHggKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2FzbjFwYXJzZS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYXNuMXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkNjVjMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2FzbjFwYXJzZS5jCkBAIC0wLDAgKzEsMzkzIEBACisvKgorICogIEdlbmVyaWMgQVNOLjEgcGFyc2luZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FTTjFfUEFSU0VfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvYXNuMS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisjaW5jbHVkZSAibWJlZHRscy9iaWdudW0uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZW5kaWYKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyKil2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiBBU04uMSBERVIgZGVjb2Rpbmcgcm91dGluZXMKKyAqLworaW50IG1iZWR0bHNfYXNuMV9nZXRfbGVuKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgIHNpemVfdCAqbGVuICkKK3sKKyAgICBpZiggKCBlbmQgLSAqcCApIDwgMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworCisgICAgaWYoICggKipwICYgMHg4MCApID09IDAgKQorICAgICAgICAqbGVuID0gKigqcCkrKzsKKyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2goICoqcCAmIDB4N0YgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmKCAoIGVuZCAtICpwICkgPCAyICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgICAgICAgICAgKmxlbiA9ICgqcClbMV07CisgICAgICAgICAgICAoKnApICs9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpZiggKCBlbmQgLSAqcCApIDwgMyApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisKKyAgICAgICAgICAgICpsZW4gPSAoIChzaXplX3QpKCpwKVsxXSA8PCA4ICkgfCAoKnApWzJdOworICAgICAgICAgICAgKCpwKSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgaWYoICggZW5kIC0gKnAgKSA8IDQgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworCisgICAgICAgICAgICAqbGVuID0gKCAoc2l6ZV90KSgqcClbMV0gPDwgMTYgKSB8CisgICAgICAgICAgICAgICAgICAgKCAoc2l6ZV90KSgqcClbMl0gPDwgOCAgKSB8ICgqcClbM107CisgICAgICAgICAgICAoKnApICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBpZiggKCBlbmQgLSAqcCApIDwgNSApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisKKyAgICAgICAgICAgICpsZW4gPSAoIChzaXplX3QpKCpwKVsxXSA8PCAyNCApIHwgKCAoc2l6ZV90KSgqcClbMl0gPDwgMTYgKSB8CisgICAgICAgICAgICAgICAgICAgKCAoc2l6ZV90KSgqcClbM10gPDwgOCAgKSB8ICAgICAgICAgICAoKnApWzRdOworICAgICAgICAgICAgKCpwKSArPSA1OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSCApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoICpsZW4gPiAoc2l6ZV90KSAoIGVuZCAtICpwICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19hc24xX2dldF90YWcoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgc2l6ZV90ICpsZW4sIGludCB0YWcgKQoreworICAgIGlmKCAoIGVuZCAtICpwICkgPCAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisKKyAgICBpZiggKipwICE9IHRhZyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApOworCisgICAgKCpwKSsrOworCisgICAgcmV0dXJuKCBtYmVkdGxzX2FzbjFfZ2V0X2xlbiggcCwgZW5kLCBsZW4gKSApOworfQorCitpbnQgbWJlZHRsc19hc24xX2dldF9ib29sKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgaW50ICp2YWwgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sIE1CRURUTFNfQVNOMV9CT09MRUFOICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCBsZW4gIT0gMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSCApOworCisgICAgKnZhbCA9ICggKipwICE9IDAgKSA/IDEgOiAwOworICAgICgqcCkrKzsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19hc24xX2dldF9pbnQoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgaW50ICp2YWwgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sIE1CRURUTFNfQVNOMV9JTlRFR0VSICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCBsZW4gPT0gMCB8fCBsZW4gPiBzaXplb2YoIGludCApIHx8ICggKipwICYgMHg4MCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9MRU5HVEggKTsKKworICAgICp2YWwgPSAwOworCisgICAgd2hpbGUoIGxlbi0tID4gMCApCisgICAgeworICAgICAgICAqdmFsID0gKCAqdmFsIDw8IDggKSB8ICoqcDsKKyAgICAgICAgKCpwKSsrOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQoraW50IG1iZWR0bHNfYXNuMV9nZXRfbXBpKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpICpYICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmbGVuLCBNQkVEVExTX0FTTjFfSU5URUdFUiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggWCwgKnAsIGxlbiApOworCisgICAgKnAgKz0gbGVuOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICovCisKK2ludCBtYmVkdGxzX2FzbjFfZ2V0X2JpdHN0cmluZyggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYXNuMV9iaXRzdHJpbmcgKmJzKQoreworICAgIGludCByZXQ7CisKKyAgICAvKiBDZXJ0aWZpY2F0ZSB0eXBlIGlzIGEgc2luZ2xlIGJ5dGUgYml0c3RyaW5nICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmJzLT5sZW4sIE1CRURUTFNfQVNOMV9CSVRfU1RSSU5HICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIC8qIENoZWNrIGxlbmd0aCwgc3VidHJhY3Qgb25lIGZvciBhY3R1YWwgYml0IHN0cmluZyBsZW5ndGggKi8KKyAgICBpZiggYnMtPmxlbiA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKyAgICBicy0+bGVuIC09IDE7CisKKyAgICAvKiBHZXQgbnVtYmVyIG9mIHVudXNlZCBiaXRzLCBlbnN1cmUgdW51c2VkIGJpdHMgPD0gNyAqLworICAgIGJzLT51bnVzZWRfYml0cyA9ICoqcDsKKyAgICBpZiggYnMtPnVudXNlZF9iaXRzID4gNyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSCApOworICAgICgqcCkrKzsKKworICAgIC8qIEdldCBhY3R1YWwgYml0c3RyaW5nICovCisgICAgYnMtPnAgPSAqcDsKKyAgICAqcCArPSBicy0+bGVuOworCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogR2V0IGEgYml0IHN0cmluZyB3aXRob3V0IHVudXNlZCBiaXRzCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfZ2V0X2JpdHN0cmluZ19udWxsKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmxlbiApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsIGxlbiwgTUJFRFRMU19BU04xX0JJVF9TVFJJTkcgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICgqbGVuKS0tIDwgMiB8fCAqKCpwKSsrICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9EQVRBICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworCisKKy8qCisgKiAgUGFyc2VzIGFuZCBzcGxpdHMgYW4gQVNOLjEgIlNFUVVFTkNFIE9GIDx0YWc+IgorICovCitpbnQgbWJlZHRsc19hc24xX2dldF9zZXF1ZW5jZV9vZiggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX3NlcXVlbmNlICpjdXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWcpCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworICAgIG1iZWR0bHNfYXNuMV9idWYgKmJ1ZjsKKworICAgIC8qIEdldCBtYWluIHNlcXVlbmNlIHRhZyAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICpwICsgbGVuICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIHdoaWxlKCAqcCA8IGVuZCApCisgICAgeworICAgICAgICBidWYgPSAmKGN1ci0+YnVmKTsKKyAgICAgICAgYnVmLT50YWcgPSAqKnA7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmJ1Zi0+bGVuLCB0YWcgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBidWYtPnAgPSAqcDsKKyAgICAgICAgKnAgKz0gYnVmLT5sZW47CisKKyAgICAgICAgLyogQWxsb2NhdGUgYW5kIGFzc2lnbiBuZXh0IHBvaW50ZXIgKi8KKyAgICAgICAgaWYoICpwIDwgZW5kICkKKyAgICAgICAgeworICAgICAgICAgICAgY3VyLT5uZXh0ID0gKG1iZWR0bHNfYXNuMV9zZXF1ZW5jZSopbWJlZHRsc19jYWxsb2MoIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggbWJlZHRsc19hc24xX3NlcXVlbmNlICkgKTsKKworICAgICAgICAgICAgaWYoIGN1ci0+bmV4dCA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQUxMT0NfRkFJTEVEICk7CisKKyAgICAgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFNldCBmaW5hbCBzZXF1ZW5jZSBlbnRyeSdzIG5leHQgcG9pbnRlciB0byBOVUxMICovCisgICAgY3VyLT5uZXh0ID0gTlVMTDsKKworICAgIGlmKCAqcCAhPSBlbmQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfYXNuMV9nZXRfYWxnKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYXNuMV9idWYgKmFsZywgbWJlZHRsc19hc24xX2J1ZiAqcGFyYW1zICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIGVuZCAtICpwICkgPCAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisKKyAgICBhbGctPnRhZyA9ICoqcDsKKyAgICBlbmQgPSAqcCArIGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZhbGctPmxlbiwgTUJFRFRMU19BU04xX09JRCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBhbGctPnAgPSAqcDsKKyAgICAqcCArPSBhbGctPmxlbjsKKworICAgIGlmKCAqcCA9PSBlbmQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBwYXJhbXMsIHNpemVvZihtYmVkdGxzX2FzbjFfYnVmKSApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBwYXJhbXMtPnRhZyA9ICoqcDsKKyAgICAoKnApKys7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2xlbiggcCwgZW5kLCAmcGFyYW1zLT5sZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcGFyYW1zLT5wID0gKnA7CisgICAgKnAgKz0gcGFyYW1zLT5sZW47CisKKyAgICBpZiggKnAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfZ2V0X2FsZ19udWxsKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2FzbjFfYnVmICphbGcgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19hc24xX2J1ZiBwYXJhbXM7CisKKyAgICBtZW1zZXQoICZwYXJhbXMsIDAsIHNpemVvZihtYmVkdGxzX2FzbjFfYnVmKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9hbGcoIHAsIGVuZCwgYWxnLCAmcGFyYW1zICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIHBhcmFtcy50YWcgIT0gTUJFRFRMU19BU04xX05VTEwgJiYgcGFyYW1zLnRhZyAhPSAwICkgfHwgcGFyYW1zLmxlbiAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfREFUQSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3ZvaWQgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YSggbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmN1ciApCit7CisgICAgaWYoIGN1ciA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc19mcmVlKCBjdXItPm9pZC5wICk7CisgICAgbWJlZHRsc19mcmVlKCBjdXItPnZhbC5wICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGN1ciwgc2l6ZW9mKCBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YV9saXN0KCBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqKmhlYWQgKQoreworICAgIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpjdXI7CisKKyAgICB3aGlsZSggKCBjdXIgPSAqaGVhZCApICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgKmhlYWQgPSBjdXItPm5leHQ7CisgICAgICAgIG1iZWR0bHNfYXNuMV9mcmVlX25hbWVkX2RhdGEoIGN1ciApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGN1ciApOworICAgIH0KK30KKworbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKm1iZWR0bHNfYXNuMV9maW5kX25hbWVkX2RhdGEoIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2lkLCBzaXplX3QgbGVuICkKK3sKKyAgICB3aGlsZSggbGlzdCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCBsaXN0LT5vaWQubGVuID09IGxlbiAmJgorICAgICAgICAgICAgbWVtY21wKCBsaXN0LT5vaWQucCwgb2lkLCBsZW4gKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBsaXN0ID0gbGlzdC0+bmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4oIGxpc3QgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfQVNOMV9QQVJTRV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9hc24xd3JpdGUuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2FzbjF3cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YjYxYjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9hc24xd3JpdGUuYwpAQCAtMCwwICsxLDM5MCBAQAorLyoKKyAqIEFTTi4xIGJ1ZmZlciB3cml0aW5nIGZ1bmN0aW9uYWxpdHkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BU04xX1dSSVRFX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2FzbjF3cml0ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZgorCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LCBzaXplX3QgbGVuICkKK3sKKyAgICBpZiggbGVuIDwgMHg4MCApCisgICAgeworICAgICAgICBpZiggKnAgLSBzdGFydCA8IDEgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgICAgICAqLS0oKnApID0gKHVuc2lnbmVkIGNoYXIpIGxlbjsKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoIGxlbiA8PSAweEZGICkKKyAgICB7CisgICAgICAgIGlmKCAqcCAtIHN0YXJ0IDwgMiApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCisgICAgICAgICotLSgqcCkgPSAodW5zaWduZWQgY2hhcikgbGVuOworICAgICAgICAqLS0oKnApID0gMHg4MTsKKyAgICAgICAgcmV0dXJuKCAyICk7CisgICAgfQorCisgICAgaWYoIGxlbiA8PSAweEZGRkYgKQorICAgIHsKKyAgICAgICAgaWYoICpwIC0gc3RhcnQgPCAzICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAgICAgKi0tKCpwKSA9ICggbGVuICAgICAgICkgJiAweEZGOworICAgICAgICAqLS0oKnApID0gKCBsZW4gPj4gIDggKSAmIDB4RkY7CisgICAgICAgICotLSgqcCkgPSAweDgyOworICAgICAgICByZXR1cm4oIDMgKTsKKyAgICB9CisKKyAgICBpZiggbGVuIDw9IDB4RkZGRkZGICkKKyAgICB7CisgICAgICAgIGlmKCAqcCAtIHN0YXJ0IDwgNCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCisgICAgICAgICotLSgqcCkgPSAoIGxlbiAgICAgICApICYgMHhGRjsKKyAgICAgICAgKi0tKCpwKSA9ICggbGVuID4+ICA4ICkgJiAweEZGOworICAgICAgICAqLS0oKnApID0gKCBsZW4gPj4gMTYgKSAmIDB4RkY7CisgICAgICAgICotLSgqcCkgPSAweDgzOworICAgICAgICByZXR1cm4oIDQgKTsKKyAgICB9CisKKyAgICBpZiggbGVuIDw9IDB4RkZGRkZGRkYgKQorICAgIHsKKyAgICAgICAgaWYoICpwIC0gc3RhcnQgPCA1ICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAgICAgKi0tKCpwKSA9ICggbGVuICAgICAgICkgJiAweEZGOworICAgICAgICAqLS0oKnApID0gKCBsZW4gPj4gIDggKSAmIDB4RkY7CisgICAgICAgICotLSgqcCkgPSAoIGxlbiA+PiAxNiApICYgMHhGRjsKKyAgICAgICAgKi0tKCpwKSA9ICggbGVuID4+IDI0ICkgJiAweEZGOworICAgICAgICAqLS0oKnApID0gMHg4NDsKKyAgICAgICAgcmV0dXJuKCA1ICk7CisgICAgfQorCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RIICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsIHVuc2lnbmVkIGNoYXIgdGFnICkKK3sKKyAgICBpZiggKnAgLSBzdGFydCA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCisgICAgKi0tKCpwKSA9IHRhZzsKKworICAgIHJldHVybiggMSApOworfQorCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX3Jhd19idWZmZXIoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUgKQoreworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgaWYoICpwIDwgc3RhcnQgfHwgKHNpemVfdCkoICpwIC0gc3RhcnQgKSA8IHNpemUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCisgICAgbGVuID0gc2l6ZTsKKyAgICAoKnApIC09IGxlbjsKKyAgICBtZW1jcHkoICpwLCBidWYsIGxlbiApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsIGNvbnN0IG1iZWR0bHNfbXBpICpYICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgLy8gV3JpdGUgdGhlIE1QSQorICAgIC8vCisgICAgbGVuID0gbWJlZHRsc19tcGlfc2l6ZSggWCApOworCisgICAgaWYoICpwIDwgc3RhcnQgfHwgKHNpemVfdCkoICpwIC0gc3RhcnQgKSA8IGxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAoKnApIC09IGxlbjsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggWCwgKnAsIGxlbiApICk7CisKKyAgICAvLyBERVIgZm9ybWF0IGFzc3VtZXMgMnMgY29tcGxlbWVudCBmb3IgbnVtYmVycywgc28gdGhlIGxlZnRtb3N0IGJpdAorICAgIC8vIHNob3VsZCBiZSAwIGZvciBwb3NpdGl2ZSBudW1iZXJzIGFuZCAxIGZvciBuZWdhdGl2ZSBudW1iZXJzLgorICAgIC8vCisgICAgaWYoIFgtPnMgPT0xICYmICoqcCAmIDB4ODAgKQorICAgIHsKKyAgICAgICAgaWYoICpwIC0gc3RhcnQgPCAxICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAgICAgKi0tKCpwKSA9IDB4MDA7CisgICAgICAgIGxlbiArPSAxOworICAgIH0KKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHAsIHN0YXJ0LCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfSU5URUdFUiApICk7CisKKyAgICByZXQgPSAoaW50KSBsZW47CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICovCisKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfbnVsbCggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgLy8gV3JpdGUgTlVMTAorICAgIC8vCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIDApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9OVUxMICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfb2lkKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9pZCwgc2l6ZV90IG9pZF9sZW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfcmF3X2J1ZmZlciggcCwgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgb2lkLCBvaWRfbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuICwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiAsIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfT0lEICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfYWxnb3JpdGhtX2lkZW50aWZpZXIoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXJfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgaWYoIHBhcl9sZW4gPT0gMCApCisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9udWxsKCBwLCBzdGFydCApICk7CisgICAgZWxzZQorICAgICAgICBsZW4gKz0gcGFyX2xlbjsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9vaWQoIHAsIHN0YXJ0LCBvaWQsIG9pZF9sZW4gKSApOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9ib29sKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsIGludCBib29sZWFuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgaWYoICpwIC0gc3RhcnQgPCAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgICotLSgqcCkgPSAoYm9vbGVhbikgPyAyNTUgOiAwOworICAgIGxlbisrOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9CT09MRUFOICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfaW50KCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsIGludCB2YWwgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICAvLyBUT0RPIG5lZ2F0aXZlIHZhbHVlcyBhbmQgdmFsdWVzIGxhcmdlciB0aGFuIDEyOAorICAgIC8vIERFUiBmb3JtYXQgYXNzdW1lcyAycyBjb21wbGVtZW50IGZvciBudW1iZXJzLCBzbyB0aGUgbGVmdG1vc3QgYml0CisgICAgLy8gc2hvdWxkIGJlIDAgZm9yIHBvc2l0aXZlIG51bWJlcnMgYW5kIDEgZm9yIG5lZ2F0aXZlIG51bWJlcnMuCisgICAgLy8KKyAgICBpZiggKnAgLSBzdGFydCA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCisgICAgbGVuICs9IDE7CisgICAgKi0tKCpwKSA9IHZhbDsKKworICAgIGlmKCB2YWwgPiAwICYmICoqcCAmIDB4ODAgKQorICAgIHsKKyAgICAgICAgaWYoICpwIC0gc3RhcnQgPCAxICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAgICAgKi0tKCpwKSA9IDB4MDA7CisgICAgICAgIGxlbiArPSAxOworICAgIH0KKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHAsIHN0YXJ0LCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfSU5URUdFUiApICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX3ByaW50YWJsZV9zdHJpbmcoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRleHQsIHNpemVfdCB0ZXh0X2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9yYXdfYnVmZmVyKCBwLCBzdGFydCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHRleHQsIHRleHRfbGVuICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHAsIHN0YXJ0LCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfUFJJTlRBQkxFX1NUUklORyApICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX2lhNV9zdHJpbmcoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRleHQsIHNpemVfdCB0ZXh0X2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9yYXdfYnVmZmVyKCBwLCBzdGFydCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHRleHQsIHRleHRfbGVuICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHAsIHN0YXJ0LCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfSUE1X1NUUklORyApICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX2JpdHN0cmluZyggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBiaXRzICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwLCBzaXplOworCisgICAgc2l6ZSA9ICggYml0cyAvIDggKSArICggKCBiaXRzICUgOCApID8gMSA6IDAgKTsKKworICAgIC8vIENhbGN1bGF0ZSBieXRlIGxlbmd0aAorICAgIC8vCisgICAgaWYoICpwIDwgc3RhcnQgfHwgKHNpemVfdCkoICpwIC0gc3RhcnQgKSA8IHNpemUgKyAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgIGxlbiA9IHNpemUgKyAxOworICAgICgqcCkgLT0gc2l6ZTsKKyAgICBtZW1jcHkoICpwLCBidWYsIHNpemUgKTsKKworICAgIC8vIFdyaXRlIHVudXNlZCBiaXRzCisgICAgLy8KKyAgICAqLS0oKnApID0gKHVuc2lnbmVkIGNoYXIpIChzaXplICogOCAtIGJpdHMpOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9CSVRfU1RSSU5HICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfcmF3X2J1ZmZlciggcCwgc3RhcnQsIGJ1Ziwgc2l6ZSApICk7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCBwLCBzdGFydCwgTUJFRFRMU19BU04xX09DVEVUX1NUUklORyApICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCittYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqbWJlZHRsc19hc24xX3N0b3JlX25hbWVkX2RhdGEoIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICoqaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFsX2xlbiApCit7CisgICAgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmN1cjsKKworICAgIGlmKCAoIGN1ciA9IG1iZWR0bHNfYXNuMV9maW5kX25hbWVkX2RhdGEoICpoZWFkLCBvaWQsIG9pZF9sZW4gKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgLy8gQWRkIG5ldyBlbnRyeSBpZiBub3QgcHJlc2VudCB5ZXQgYmFzZWQgb24gT0lECisgICAgICAgIC8vCisgICAgICAgIGN1ciA9IChtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSopbWJlZHRsc19jYWxsb2MoIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSkgKTsKKyAgICAgICAgaWYoIGN1ciA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgICAgIGN1ci0+b2lkLmxlbiA9IG9pZF9sZW47CisgICAgICAgIGN1ci0+b2lkLnAgPSBtYmVkdGxzX2NhbGxvYyggMSwgb2lkX2xlbiApOworICAgICAgICBpZiggY3VyLT5vaWQucCA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBjdXIgKTsKKyAgICAgICAgICAgIHJldHVybiggTlVMTCApOworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KCBjdXItPm9pZC5wLCBvaWQsIG9pZF9sZW4gKTsKKworICAgICAgICBjdXItPnZhbC5sZW4gPSB2YWxfbGVuOworICAgICAgICBjdXItPnZhbC5wID0gbWJlZHRsc19jYWxsb2MoIDEsIHZhbF9sZW4gKTsKKyAgICAgICAgaWYoIGN1ci0+dmFsLnAgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggY3VyLT5vaWQucCApOworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBjdXIgKTsKKyAgICAgICAgICAgIHJldHVybiggTlVMTCApOworICAgICAgICB9CisKKyAgICAgICAgY3VyLT5uZXh0ID0gKmhlYWQ7CisgICAgICAgICpoZWFkID0gY3VyOworICAgIH0KKyAgICBlbHNlIGlmKCBjdXItPnZhbC5sZW4gPCB2YWxfbGVuICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEVubGFyZ2UgZXhpc3RpbmcgdmFsdWUgYnVmZmVyIGlmIG5lZWRlZAorICAgICAgICAgKiBQcmVzZXJ2ZSBvbGQgZGF0YSB1bnRpbCB0aGUgYWxsb2NhdGlvbiBzdWNjZWVkZWQsIHRvIGxlYXZlIGxpc3QgaW4KKyAgICAgICAgICogYSBjb25zaXN0ZW50IHN0YXRlIGluIGNhc2UgYWxsb2NhdGlvbiBmYWlscy4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgKnAgPSBtYmVkdGxzX2NhbGxvYyggMSwgdmFsX2xlbiApOworICAgICAgICBpZiggcCA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgICAgIG1iZWR0bHNfZnJlZSggY3VyLT52YWwucCApOworICAgICAgICBjdXItPnZhbC5wID0gcDsKKyAgICAgICAgY3VyLT52YWwubGVuID0gdmFsX2xlbjsKKyAgICB9CisKKyAgICBpZiggdmFsICE9IE5VTEwgKQorICAgICAgICBtZW1jcHkoIGN1ci0+dmFsLnAsIHZhbCwgdmFsX2xlbiApOworCisgICAgcmV0dXJuKCBjdXIgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0FTTjFfV1JJVEVfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYmFzZTY0LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9iYXNlNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2IxMmNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYmFzZTY0LmMKQEAgLTAsMCArMSwyODkgQEAKKy8qCisgKiAgUkZDIDE1MjEgYmFzZTY0IGVuY29kaW5nL2RlY29kaW5nCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQkFTRTY0X0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2Jhc2U2NC5oIgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYmFzZTY0X2VuY19tYXBbNjRdID0KK3sKKyAgICAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnSicsCisgICAgJ0snLCAnTCcsICdNJywgJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLAorICAgICdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWicsICdhJywgJ2InLCAnYycsICdkJywKKyAgICAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsCisgICAgJ28nLCAncCcsICdxJywgJ3InLCAncycsICd0JywgJ3UnLCAndicsICd3JywgJ3gnLAorICAgICd5JywgJ3onLCAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywKKyAgICAnOCcsICc5JywgJysnLCAnLycKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJhc2U2NF9kZWNfbWFwWzEyOF0gPQoreworICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywKKyAgICAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsCisgICAgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LAorICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywKKyAgICAxMjcsIDEyNywgMTI3LCAgNjIsIDEyNywgMTI3LCAxMjcsICA2MywgIDUyLCAgNTMsCisgICAgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsIDEyNywgMTI3LAorICAgIDEyNywgIDY0LCAxMjcsIDEyNywgMTI3LCAgIDAsICAgMSwgICAyLCAgIDMsICAgNCwKKyAgICAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsCisgICAgIDE1LCAgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LAorICAgICAyNSwgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgIDI2LCAgMjcsICAyOCwKKyAgICAgMjksICAzMCwgIDMxLCAgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsCisgICAgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywgIDQ4LAorICAgICA0OSwgIDUwLCAgNTEsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3Cit9OworCisjZGVmaW5lIEJBU0U2NF9TSVpFX1RfTUFYICAgKCAoc2l6ZV90KSAtMSApIC8qIFNJWkVfVF9NQVggaXMgbm90IHN0YW5kYXJkICovCisKKy8qCisgKiBFbmNvZGUgYSBidWZmZXIgaW50byBiYXNlNjQgZm9ybWF0CisgKi8KK2ludCBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUoIHVuc2lnbmVkIGNoYXIgKmRzdCwgc2l6ZV90IGRsZW4sIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHNpemVfdCBzbGVuICkKK3sKKyAgICBzaXplX3QgaSwgbjsKKyAgICBpbnQgQzEsIEMyLCBDMzsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworCisgICAgaWYoIHNsZW4gPT0gMCApCisgICAgeworICAgICAgICAqb2xlbiA9IDA7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIG4gPSBzbGVuIC8gMyArICggc2xlbiAlIDMgIT0gMCApOworCisgICAgaWYoIG4gPiAoIEJBU0U2NF9TSVpFX1RfTUFYIC0gMSApIC8gNCApCisgICAgeworICAgICAgICAqb2xlbiA9IEJBU0U2NF9TSVpFX1RfTUFYOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMICk7CisgICAgfQorCisgICAgbiAqPSA0OworCisgICAgaWYoICggZGxlbiA8IG4gKyAxICkgfHwgKCBOVUxMID09IGRzdCApICkKKyAgICB7CisgICAgICAgICpvbGVuID0gbiArIDE7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwgKTsKKyAgICB9CisKKyAgICBuID0gKCBzbGVuIC8gMyApICogMzsKKworICAgIGZvciggaSA9IDAsIHAgPSBkc3Q7IGkgPCBuOyBpICs9IDMgKQorICAgIHsKKyAgICAgICAgQzEgPSAqc3JjKys7CisgICAgICAgIEMyID0gKnNyYysrOworICAgICAgICBDMyA9ICpzcmMrKzsKKworICAgICAgICAqcCsrID0gYmFzZTY0X2VuY19tYXBbKEMxID4+IDIpICYgMHgzRl07CisgICAgICAgICpwKysgPSBiYXNlNjRfZW5jX21hcFsoKChDMSAmICAzKSA8PCA0KSArIChDMiA+PiA0KSkgJiAweDNGXTsKKyAgICAgICAgKnArKyA9IGJhc2U2NF9lbmNfbWFwWygoKEMyICYgMTUpIDw8IDIpICsgKEMzID4+IDYpKSAmIDB4M0ZdOworICAgICAgICAqcCsrID0gYmFzZTY0X2VuY19tYXBbQzMgJiAweDNGXTsKKyAgICB9CisKKyAgICBpZiggaSA8IHNsZW4gKQorICAgIHsKKyAgICAgICAgQzEgPSAqc3JjKys7CisgICAgICAgIEMyID0gKCAoIGkgKyAxICkgPCBzbGVuICkgPyAqc3JjKysgOiAwOworCisgICAgICAgICpwKysgPSBiYXNlNjRfZW5jX21hcFsoQzEgPj4gMikgJiAweDNGXTsKKyAgICAgICAgKnArKyA9IGJhc2U2NF9lbmNfbWFwWygoKEMxICYgMykgPDwgNCkgKyAoQzIgPj4gNCkpICYgMHgzRl07CisKKyAgICAgICAgaWYoICggaSArIDEgKSA8IHNsZW4gKQorICAgICAgICAgICAgICpwKysgPSBiYXNlNjRfZW5jX21hcFsoKEMyICYgMTUpIDw8IDIpICYgMHgzRl07CisgICAgICAgIGVsc2UgKnArKyA9ICc9JzsKKworICAgICAgICAqcCsrID0gJz0nOworICAgIH0KKworICAgICpvbGVuID0gcCAtIGRzdDsKKyAgICAqcCA9IDA7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIERlY29kZSBhIGJhc2U2NC1mb3JtYXR0ZWQgYnVmZmVyCisgKi8KK2ludCBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUoIHVuc2lnbmVkIGNoYXIgKmRzdCwgc2l6ZV90IGRsZW4sIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHNpemVfdCBzbGVuICkKK3sKKyAgICBzaXplX3QgaSwgbjsKKyAgICB1aW50MzJfdCBqLCB4OworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgICAvKiBGaXJzdCBwYXNzOiBjaGVjayBmb3IgdmFsaWRpdHkgYW5kIGdldCBvdXRwdXQgbGVuZ3RoICovCisgICAgZm9yKCBpID0gbiA9IGogPSAwOyBpIDwgc2xlbjsgaSsrICkKKyAgICB7CisgICAgICAgIC8qIFNraXAgc3BhY2VzIGJlZm9yZSBjaGVja2luZyBmb3IgRU9MICovCisgICAgICAgIHggPSAwOworICAgICAgICB3aGlsZSggaSA8IHNsZW4gJiYgc3JjW2ldID09ICcgJyApCisgICAgICAgIHsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICsreDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNwYWNlcyBhdCBlbmQgb2YgYnVmZmVyIGFyZSBPSyAqLworICAgICAgICBpZiggaSA9PSBzbGVuICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmKCAoIHNsZW4gLSBpICkgPj0gMiAmJgorICAgICAgICAgICAgc3JjW2ldID09ICdccicgJiYgc3JjW2kgKyAxXSA9PSAnXG4nICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmKCBzcmNbaV0gPT0gJ1xuJyApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBTcGFjZSBpbnNpZGUgYSBsaW5lIGlzIGFuIGVycm9yICovCisgICAgICAgIGlmKCB4ICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIgKTsKKworICAgICAgICBpZiggc3JjW2ldID09ICc9JyAmJiArK2ogPiAyICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSICk7CisKKyAgICAgICAgaWYoIHNyY1tpXSA+IDEyNyB8fCBiYXNlNjRfZGVjX21hcFtzcmNbaV1dID09IDEyNyApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUiApOworCisgICAgICAgIGlmKCBiYXNlNjRfZGVjX21hcFtzcmNbaV1dIDwgNjQgJiYgaiAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSICk7CisKKyAgICAgICAgbisrOworICAgIH0KKworICAgIGlmKCBuID09IDAgKQorICAgIHsKKyAgICAgICAgKm9sZW4gPSAwOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBuID0gKCAoIG4gKiA2ICkgKyA3ICkgPj4gMzsKKyAgICBuIC09IGo7CisKKyAgICBpZiggZHN0ID09IE5VTEwgfHwgZGxlbiA8IG4gKQorICAgIHsKKyAgICAgICAgKm9sZW4gPSBuOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMICk7CisgICAgfQorCisgICBmb3IoIGogPSAzLCBuID0geCA9IDAsIHAgPSBkc3Q7IGkgPiAwOyBpLS0sIHNyYysrICkKKyAgIHsKKyAgICAgICAgaWYoICpzcmMgPT0gJ1xyJyB8fCAqc3JjID09ICdcbicgfHwgKnNyYyA9PSAnICcgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaiAtPSAoIGJhc2U2NF9kZWNfbWFwWypzcmNdID09IDY0ICk7CisgICAgICAgIHggID0gKCB4IDw8IDYgKSB8ICggYmFzZTY0X2RlY19tYXBbKnNyY10gJiAweDNGICk7CisKKyAgICAgICAgaWYoICsrbiA9PSA0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbiA9IDA7CisgICAgICAgICAgICBpZiggaiA+IDAgKSAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCB4ID4+IDE2ICk7CisgICAgICAgICAgICBpZiggaiA+IDEgKSAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCB4ID4+ICA4ICk7CisgICAgICAgICAgICBpZiggaiA+IDIgKSAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCB4ICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqb2xlbiA9IHAgLSBkc3Q7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJhc2U2NF90ZXN0X2RlY1s2NF0gPQoreworICAgIDB4MjQsIDB4NDgsIDB4NkUsIDB4NTYsIDB4ODcsIDB4NjIsIDB4NUEsIDB4QkQsCisgICAgMHhCRiwgMHgxNywgMHhEOSwgMHhBMiwgMHhDNCwgMHgxNywgMHgxQSwgMHgwMSwKKyAgICAweDk0LCAweEVELCAweDhGLCAweDFFLCAweDExLCAweEIzLCAweEQ3LCAweDA5LAorICAgIDB4MEMsIDB4QjYsIDB4RTksIDB4MTAsIDB4NkYsIDB4MjIsIDB4RUUsIDB4MTMsCisgICAgMHhDQSwgMHhCMywgMHgwNywgMHgwNSwgMHg3NiwgMHhDOSwgMHhGQSwgMHgzMSwKKyAgICAweDZDLCAweDA4LCAweDM0LCAweEZGLCAweDhELCAweEMyLCAweDZDLCAweDM4LAorICAgIDB4MDAsIDB4NDMsIDB4RTksIDB4NTQsIDB4OTcsIDB4QUYsIDB4NTAsIDB4NEIsCisgICAgMHhEMSwgMHg0MSwgMHhCQSwgMHg5NSwgMHgzMSwgMHg1QSwgMHgwQiwgMHg5NworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYmFzZTY0X3Rlc3RfZW5jW10gPQorICAgICJKRWh1Vm9kaVdyMi9GOW1peEJjYUFaVHRqeDRSczljSkRMYnBFRzhpN2hQSyIKKyAgICAic3djRmRzbjZNV3dJTlArTndtdzRBRVBwVkpldlVFdlJRYnFWTVZvTGx3PT0iOworCisvKgorICogQ2hlY2t1cCByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX2Jhc2U2NF9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBzaXplX3QgbGVuOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxMjhdOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBCYXNlNjQgZW5jb2RpbmcgdGVzdDogIiApOworCisgICAgc3JjID0gYmFzZTY0X3Rlc3RfZGVjOworCisgICAgaWYoIG1iZWR0bHNfYmFzZTY0X2VuY29kZSggYnVmZmVyLCBzaXplb2YoIGJ1ZmZlciApLCAmbGVuLCBzcmMsIDY0ICkgIT0gMCB8fAorICAgICAgICAgbWVtY21wKCBiYXNlNjRfdGVzdF9lbmMsIGJ1ZmZlciwgODggKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiAgQmFzZTY0IGRlY29kaW5nIHRlc3Q6ICIgKTsKKworICAgIHNyYyA9IGJhc2U2NF90ZXN0X2VuYzsKKworICAgIGlmKCBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUoIGJ1ZmZlciwgc2l6ZW9mKCBidWZmZXIgKSwgJmxlbiwgc3JjLCA4OCApICE9IDAgfHwKKyAgICAgICAgIG1lbWNtcCggYmFzZTY0X3Rlc3RfZGVjLCBidWZmZXIsIDY0ICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG5cbiIgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfQkFTRTY0X0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2JpZ251bS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYmlnbnVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5OWUwNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2JpZ251bS5jCkBAIC0wLDAgKzEsMjQ0MiBAQAorLyoKKyAqICBNdWx0aS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBzb3VyY2VzIHdlcmUgcmVmZXJlbmNlZCBpbiB0aGUgZGVzaWduIG9mIHRoaXMgTXVsdGktcHJlY2lzaW9uCisgKiAgSW50ZWdlciBsaWJyYXJ5OgorICoKKyAqICBbMV0gSGFuZGJvb2sgb2YgQXBwbGllZCBDcnlwdG9ncmFwaHkgLSAxOTk3CisgKiAgICAgIE1lbmV6ZXMsIHZhbiBPb3JzY2hvdCBhbmQgVmFuc3RvbmUKKyAqCisgKiAgWzJdIE11bHRpLVByZWNpc2lvbiBNYXRoCisgKiAgICAgIFRvbSBTdCBEZW5pcworICogICAgICBodHRwczovL2dpdGh1Yi5jb20vbGlidG9tL2xpYnRvbW1hdGgvYmxvYi9kZXZlbG9wL3RvbW1hdGgucGRmCisgKgorICogIFszXSBHTlUgTXVsdGktUHJlY2lzaW9uIEFyaXRobWV0aWMgTGlicmFyeQorICogICAgICBodHRwczovL2dtcGxpYi5vcmcvbWFudWFsL2luZGV4Lmh0bWwKKyAqCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykKKworI2luY2x1ZGUgIm1iZWR0bHMvYmlnbnVtLmgiCisjaW5jbHVkZSAibWJlZHRscy9ibl9tdWwuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX21waV96ZXJvaXplKCBtYmVkdGxzX21waV91aW50ICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSBtYmVkdGxzX21waV91aW50ICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisjZGVmaW5lIGNpTCAgICAoc2l6ZW9mKG1iZWR0bHNfbXBpX3VpbnQpKSAgICAgICAgIC8qIGNoYXJzIGluIGxpbWIgICovCisjZGVmaW5lIGJpTCAgICAoY2lMIDw8IDMpICAgICAgICAgICAgICAgLyogYml0cyAgaW4gbGltYiAgKi8KKyNkZWZpbmUgYmlIICAgIChjaUwgPDwgMikgICAgICAgICAgICAgICAvKiBoYWxmIGxpbWIgc2l6ZSAqLworCisjZGVmaW5lIE1QSV9TSVpFX1RfTUFYICAoIChzaXplX3QpIC0xICkgLyogU0laRV9UX01BWCBpcyBub3Qgc3RhbmRhcmQgKi8KKworLyoKKyAqIENvbnZlcnQgYmV0d2VlbiBiaXRzL2NoYXJzIGFuZCBudW1iZXIgb2YgbGltYnMKKyAqIERpdmlkZSBmaXJzdCBpbiBvcmRlciB0byBhdm9pZCBwb3RlbnRpYWwgb3ZlcmZsb3dzCisgKi8KKyNkZWZpbmUgQklUU19UT19MSU1CUyhpKSAgKCAoaSkgLyBiaUwgKyAoIChpKSAlIGJpTCAhPSAwICkgKQorI2RlZmluZSBDSEFSU19UT19MSU1CUyhpKSAoIChpKSAvIGNpTCArICggKGkpICUgY2lMICE9IDAgKSApCisKKy8qCisgKiBJbml0aWFsaXplIG9uZSBNUEkKKyAqLwordm9pZCBtYmVkdGxzX21waV9pbml0KCBtYmVkdGxzX21waSAqWCApCit7CisgICAgaWYoIFggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIFgtPnMgPSAxOworICAgIFgtPm4gPSAwOworICAgIFgtPnAgPSBOVUxMOworfQorCisvKgorICogVW5hbGxvY2F0ZSBvbmUgTVBJCisgKi8KK3ZvaWQgbWJlZHRsc19tcGlfZnJlZSggbWJlZHRsc19tcGkgKlggKQoreworICAgIGlmKCBYID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiggWC0+cCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbXBpX3plcm9pemUoIFgtPnAsIFgtPm4gKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBYLT5wICk7CisgICAgfQorCisgICAgWC0+cyA9IDE7CisgICAgWC0+biA9IDA7CisgICAgWC0+cCA9IE5VTEw7Cit9CisKKy8qCisgKiBFbmxhcmdlIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGxpbWJzCisgKi8KK2ludCBtYmVkdGxzX21waV9ncm93KCBtYmVkdGxzX21waSAqWCwgc2l6ZV90IG5ibGltYnMgKQoreworICAgIG1iZWR0bHNfbXBpX3VpbnQgKnA7CisKKyAgICBpZiggbmJsaW1icyA+IE1CRURUTFNfTVBJX01BWF9MSU1CUyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCApOworCisgICAgaWYoIFgtPm4gPCBuYmxpbWJzICkKKyAgICB7CisgICAgICAgIGlmKCAoIHAgPSAobWJlZHRsc19tcGlfdWludCopbWJlZHRsc19jYWxsb2MoIG5ibGltYnMsIGNpTCApICkgPT0gTlVMTCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgKTsKKworICAgICAgICBpZiggWC0+cCAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KCBwLCBYLT5wLCBYLT5uICogY2lMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV96ZXJvaXplKCBYLT5wLCBYLT5uICk7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIFgtPnAgKTsKKyAgICAgICAgfQorCisgICAgICAgIFgtPm4gPSBuYmxpbWJzOworICAgICAgICBYLT5wID0gcDsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFJlc2l6ZSBkb3duIGFzIG11Y2ggYXMgcG9zc2libGUsCisgKiB3aGlsZSBrZWVwaW5nIGF0IGxlYXN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGxpbWJzCisgKi8KK2ludCBtYmVkdGxzX21waV9zaHJpbmsoIG1iZWR0bHNfbXBpICpYLCBzaXplX3QgbmJsaW1icyApCit7CisgICAgbWJlZHRsc19tcGlfdWludCAqcDsKKyAgICBzaXplX3QgaTsKKworICAgIC8qIEFjdHVhbGx5IHJlc2l6ZSB1cCBpbiB0aGlzIGNhc2UgKi8KKyAgICBpZiggWC0+biA8PSBuYmxpbWJzICkKKyAgICAgICAgcmV0dXJuKCBtYmVkdGxzX21waV9ncm93KCBYLCBuYmxpbWJzICkgKTsKKworICAgIGZvciggaSA9IFgtPm4gLSAxOyBpID4gMDsgaS0tICkKKyAgICAgICAgaWYoIFgtPnBbaV0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKyAgICBpKys7CisKKyAgICBpZiggaSA8IG5ibGltYnMgKQorICAgICAgICBpID0gbmJsaW1iczsKKworICAgIGlmKCAoIHAgPSAobWJlZHRsc19tcGlfdWludCopbWJlZHRsc19jYWxsb2MoIGksIGNpTCApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCApOworCisgICAgaWYoIFgtPnAgIT0gTlVMTCApCisgICAgeworICAgICAgICBtZW1jcHkoIHAsIFgtPnAsIGkgKiBjaUwgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfemVyb2l6ZSggWC0+cCwgWC0+biApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIFgtPnAgKTsKKyAgICB9CisKKyAgICBYLT5uID0gaTsKKyAgICBYLT5wID0gcDsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQ29weSB0aGUgY29udGVudHMgb2YgWSBpbnRvIFgKKyAqLworaW50IG1iZWR0bHNfbXBpX2NvcHkoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqWSApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaTsKKworICAgIGlmKCBYID09IFkgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGlmKCBZLT5wID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tcGlfZnJlZSggWCApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBmb3IoIGkgPSBZLT5uIC0gMTsgaSA+IDA7IGktLSApCisgICAgICAgIGlmKCBZLT5wW2ldICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgaSsrOworCisgICAgWC0+cyA9IFktPnM7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIFgsIGkgKSApOworCisgICAgbWVtc2V0KCBYLT5wLCAwLCBYLT5uICogY2lMICk7CisgICAgbWVtY3B5KCBYLT5wLCBZLT5wLCBpICogY2lMICk7CisKK2NsZWFudXA6CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogU3dhcCB0aGUgY29udGVudHMgb2YgWCBhbmQgWQorICovCit2b2lkIG1iZWR0bHNfbXBpX3N3YXAoIG1iZWR0bHNfbXBpICpYLCBtYmVkdGxzX21waSAqWSApCit7CisgICAgbWJlZHRsc19tcGkgVDsKKworICAgIG1lbWNweSggJlQsICBYLCBzaXplb2YoIG1iZWR0bHNfbXBpICkgKTsKKyAgICBtZW1jcHkoICBYLCAgWSwgc2l6ZW9mKCBtYmVkdGxzX21waSApICk7CisgICAgbWVtY3B5KCAgWSwgJlQsIHNpemVvZiggbWJlZHRsc19tcGkgKSApOworfQorCisvKgorICogQ29uZGl0aW9uYWxseSBhc3NpZ24gWCA9IFksIHdpdGhvdXQgbGVha2luZyBpbmZvcm1hdGlvbgorICogYWJvdXQgd2hldGhlciB0aGUgYXNzaWdubWVudCB3YXMgbWFkZSBvciBub3QuCisgKiAoTGVha2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVzcGVjdGl2ZSBzaXplcyBvZiBYIGFuZCBZIGlzIG9rIGhvd2V2ZXIuKQorICovCitpbnQgbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbiggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpZLCB1bnNpZ25lZCBjaGFyIGFzc2lnbiApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgc2l6ZV90IGk7CisKKyAgICAvKiBtYWtlIHN1cmUgYXNzaWduIGlzIDAgb3IgMSBpbiBhIHRpbWUtY29uc3RhbnQgbWFubmVyICovCisgICAgYXNzaWduID0gKGFzc2lnbiB8ICh1bnNpZ25lZCBjaGFyKS1hc3NpZ24pID4+IDc7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIFgsIFktPm4gKSApOworCisgICAgWC0+cyA9IFgtPnMgKiAoIDEgLSBhc3NpZ24gKSArIFktPnMgKiBhc3NpZ247CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgWS0+bjsgaSsrICkKKyAgICAgICAgWC0+cFtpXSA9IFgtPnBbaV0gKiAoIDEgLSBhc3NpZ24gKSArIFktPnBbaV0gKiBhc3NpZ247CisKKyAgICBmb3IoIDsgaSA8IFgtPm47IGkrKyApCisgICAgICAgIFgtPnBbaV0gKj0gKCAxIC0gYXNzaWduICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIENvbmRpdGlvbmFsbHkgc3dhcCBYIGFuZCBZLCB3aXRob3V0IGxlYWtpbmcgaW5mb3JtYXRpb24KKyAqIGFib3V0IHdoZXRoZXIgdGhlIHN3YXAgd2FzIG1hZGUgb3Igbm90LgorICogSGVyZSBpdCBpcyBub3Qgb2sgdG8gc2ltcGx5IHN3YXAgdGhlIHBvaW50ZXJzLCB3aGljaCB3aG91bGQgbGVhZCB0bworICogZGlmZmVyZW50IG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgd2hlbiBYIGFuZCBZIGFyZSB1c2VkIGFmdGVyd2FyZHMuCisgKi8KK2ludCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcCggbWJlZHRsc19tcGkgKlgsIG1iZWR0bHNfbXBpICpZLCB1bnNpZ25lZCBjaGFyIHN3YXAgKQoreworICAgIGludCByZXQsIHM7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19tcGlfdWludCB0bXA7CisKKyAgICBpZiggWCA9PSBZICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAvKiBtYWtlIHN1cmUgc3dhcCBpcyAwIG9yIDEgaW4gYSB0aW1lLWNvbnN0YW50IG1hbm5lciAqLworICAgIHN3YXAgPSAoc3dhcCB8ICh1bnNpZ25lZCBjaGFyKS1zd2FwKSA+PiA3OworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCBYLCBZLT5uICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIFksIFgtPm4gKSApOworCisgICAgcyA9IFgtPnM7CisgICAgWC0+cyA9IFgtPnMgKiAoIDEgLSBzd2FwICkgKyBZLT5zICogc3dhcDsKKyAgICBZLT5zID0gWS0+cyAqICggMSAtIHN3YXAgKSArICAgIHMgKiBzd2FwOworCisKKyAgICBmb3IoIGkgPSAwOyBpIDwgWC0+bjsgaSsrICkKKyAgICB7CisgICAgICAgIHRtcCA9IFgtPnBbaV07CisgICAgICAgIFgtPnBbaV0gPSBYLT5wW2ldICogKCAxIC0gc3dhcCApICsgWS0+cFtpXSAqIHN3YXA7CisgICAgICAgIFktPnBbaV0gPSBZLT5wW2ldICogKCAxIC0gc3dhcCApICsgICAgIHRtcCAqIHN3YXA7CisgICAgfQorCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBTZXQgdmFsdWUgZnJvbSBpbnRlZ2VyCisgKi8KK2ludCBtYmVkdGxzX21waV9sc2V0KCBtYmVkdGxzX21waSAqWCwgbWJlZHRsc19tcGlfc2ludCB6ICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCBYLCAxICkgKTsKKyAgICBtZW1zZXQoIFgtPnAsIDAsIFgtPm4gKiBjaUwgKTsKKworICAgIFgtPnBbMF0gPSAoIHogPCAwICkgPyAteiA6IHo7CisgICAgWC0+cyAgICA9ICggeiA8IDAgKSA/IC0xIDogMTsKKworY2xlYW51cDoKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBHZXQgYSBzcGVjaWZpYyBiaXQKKyAqLworaW50IG1iZWR0bHNfbXBpX2dldF9iaXQoIGNvbnN0IG1iZWR0bHNfbXBpICpYLCBzaXplX3QgcG9zICkKK3sKKyAgICBpZiggWC0+biAqIGJpTCA8PSBwb3MgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIHJldHVybiggKCBYLT5wW3BvcyAvIGJpTF0gPj4gKCBwb3MgJSBiaUwgKSApICYgMHgwMSApOworfQorCisvKgorICogU2V0IGEgYml0IHRvIGEgc3BlY2lmaWMgdmFsdWUgb2YgMCBvciAxCisgKi8KK2ludCBtYmVkdGxzX21waV9zZXRfYml0KCBtYmVkdGxzX21waSAqWCwgc2l6ZV90IHBvcywgdW5zaWduZWQgY2hhciB2YWwgKQoreworICAgIGludCByZXQgPSAwOworICAgIHNpemVfdCBvZmYgPSBwb3MgLyBiaUw7CisgICAgc2l6ZV90IGlkeCA9IHBvcyAlIGJpTDsKKworICAgIGlmKCB2YWwgIT0gMCAmJiB2YWwgIT0gMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggWC0+biAqIGJpTCA8PSBwb3MgKQorICAgIHsKKyAgICAgICAgaWYoIHZhbCA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggWCwgb2ZmICsgMSApICk7CisgICAgfQorCisgICAgWC0+cFtvZmZdICY9IH4oIChtYmVkdGxzX21waV91aW50KSAweDAxIDw8IGlkeCApOworICAgIFgtPnBbb2ZmXSB8PSAobWJlZHRsc19tcGlfdWludCkgdmFsIDw8IGlkeDsKKworY2xlYW51cDoKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsZXNzIHNpZ25pZmljYW50IHplcm8tYml0cworICovCitzaXplX3QgbWJlZHRsc19tcGlfbHNiKCBjb25zdCBtYmVkdGxzX21waSAqWCApCit7CisgICAgc2l6ZV90IGksIGosIGNvdW50ID0gMDsKKworICAgIGZvciggaSA9IDA7IGkgPCBYLT5uOyBpKysgKQorICAgICAgICBmb3IoIGogPSAwOyBqIDwgYmlMOyBqKyssIGNvdW50KysgKQorICAgICAgICAgICAgaWYoICggKCBYLT5wW2ldID4+IGogKSAmIDEgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIGNvdW50ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENvdW50IGxlYWRpbmcgemVybyBiaXRzIGluIGEgZ2l2ZW4gaW50ZWdlcgorICovCitzdGF0aWMgc2l6ZV90IG1iZWR0bHNfY2x6KCBjb25zdCBtYmVkdGxzX21waV91aW50IHggKQoreworICAgIHNpemVfdCBqOworICAgIG1iZWR0bHNfbXBpX3VpbnQgbWFzayA9IChtYmVkdGxzX21waV91aW50KSAxIDw8IChiaUwgLSAxKTsKKworICAgIGZvciggaiA9IDA7IGogPCBiaUw7IGorKyApCisgICAgeworICAgICAgICBpZiggeCAmIG1hc2sgKSBicmVhazsKKworICAgICAgICBtYXNrID4+PSAxOworICAgIH0KKworICAgIHJldHVybiBqOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cworICovCitzaXplX3QgbWJlZHRsc19tcGlfYml0bGVuKCBjb25zdCBtYmVkdGxzX21waSAqWCApCit7CisgICAgc2l6ZV90IGksIGo7CisKKyAgICBpZiggWC0+biA9PSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBmb3IoIGkgPSBYLT5uIC0gMTsgaSA+IDA7IGktLSApCisgICAgICAgIGlmKCBYLT5wW2ldICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBqID0gYmlMIC0gbWJlZHRsc19jbHooIFgtPnBbaV0gKTsKKworICAgIHJldHVybiggKCBpICogYmlMICkgKyBqICk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHRvdGFsIHNpemUgaW4gYnl0ZXMKKyAqLworc2l6ZV90IG1iZWR0bHNfbXBpX3NpemUoIGNvbnN0IG1iZWR0bHNfbXBpICpYICkKK3sKKyAgICByZXR1cm4oICggbWJlZHRsc19tcGlfYml0bGVuKCBYICkgKyA3ICkgPj4gMyApOworfQorCisvKgorICogQ29udmVydCBhbiBBU0NJSSBjaGFyYWN0ZXIgdG8gZGlnaXQgdmFsdWUKKyAqLworc3RhdGljIGludCBtcGlfZ2V0X2RpZ2l0KCBtYmVkdGxzX21waV91aW50ICpkLCBpbnQgcmFkaXgsIGNoYXIgYyApCit7CisgICAgKmQgPSAyNTU7CisKKyAgICBpZiggYyA+PSAweDMwICYmIGMgPD0gMHgzOSApICpkID0gYyAtIDB4MzA7CisgICAgaWYoIGMgPj0gMHg0MSAmJiBjIDw9IDB4NDYgKSAqZCA9IGMgLSAweDM3OworICAgIGlmKCBjID49IDB4NjEgJiYgYyA8PSAweDY2ICkgKmQgPSBjIC0gMHg1NzsKKworICAgIGlmKCAqZCA+PSAobWJlZHRsc19tcGlfdWludCkgcmFkaXggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9JTlZBTElEX0NIQVJBQ1RFUiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBJbXBvcnQgZnJvbSBhbiBBU0NJSSBzdHJpbmcKKyAqLworaW50IG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCBtYmVkdGxzX21waSAqWCwgaW50IHJhZGl4LCBjb25zdCBjaGFyICpzICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBpLCBqLCBzbGVuLCBuOworICAgIG1iZWR0bHNfbXBpX3VpbnQgZDsKKyAgICBtYmVkdGxzX21waSBUOworCisgICAgaWYoIHJhZGl4IDwgMiB8fCByYWRpeCA+IDE2ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZUICk7CisKKyAgICBzbGVuID0gc3RybGVuKCBzICk7CisKKyAgICBpZiggcmFkaXggPT0gMTYgKQorICAgIHsKKyAgICAgICAgaWYoIHNsZW4gPiBNUElfU0laRV9UX01BWCA+PiAyICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAgICAgbiA9IEJJVFNfVE9fTElNQlMoIHNsZW4gPDwgMiApOworCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggWCwgbiApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggWCwgMCApICk7CisKKyAgICAgICAgZm9yKCBpID0gc2xlbiwgaiA9IDA7IGkgPiAwOyBpLS0sIGorKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBpID09IDEgJiYgc1tpIC0gMV0gPT0gJy0nICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBYLT5zID0gLTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbXBpX2dldF9kaWdpdCggJmQsIHJhZGl4LCBzW2kgLSAxXSApICk7CisgICAgICAgICAgICBYLT5wW2ogLyAoIDIgKiBjaUwgKV0gfD0gZCA8PCAoICggaiAlICggMiAqIGNpTCApICkgPDwgMiApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggWCwgMCApICk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IHNsZW47IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBpID09IDAgJiYgc1tpXSA9PSAnLScgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFgtPnMgPSAtMTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtcGlfZ2V0X2RpZ2l0KCAmZCwgcmFkaXgsIHNbaV0gKSApOworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfaW50KCAmVCwgWCwgcmFkaXggKSApOworCisgICAgICAgICAgICBpZiggWC0+cyA9PSAxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9pbnQoIFgsICZULCBkICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoIFgsICZULCBkICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworY2xlYW51cDoKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZUICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogSGVscGVyIHRvIHdyaXRlIHRoZSBkaWdpdHMgaGlnaC1vcmRlciBmaXJzdAorICovCitzdGF0aWMgaW50IG1waV93cml0ZV9obHAoIG1iZWR0bHNfbXBpICpYLCBpbnQgcmFkaXgsIGNoYXIgKipwICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpX3VpbnQgcjsKKworICAgIGlmKCByYWRpeCA8IDIgfHwgcmFkaXggPiAxNiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9pbnQoICZyLCBYLCByYWRpeCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9kaXZfaW50KCBYLCBOVUxMLCBYLCByYWRpeCApICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggWCwgMCApICE9IDAgKQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1waV93cml0ZV9obHAoIFgsIHJhZGl4LCBwICkgKTsKKworICAgIGlmKCByIDwgMTAgKQorICAgICAgICAqKCpwKSsrID0gKGNoYXIpKCByICsgMHgzMCApOworICAgIGVsc2UKKyAgICAgICAgKigqcCkrKyA9IChjaGFyKSggciArIDB4MzcgKTsKKworY2xlYW51cDoKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBFeHBvcnQgaW50byBhbiBBU0NJSSBzdHJpbmcKKyAqLworaW50IG1iZWR0bHNfbXBpX3dyaXRlX3N0cmluZyggY29uc3QgbWJlZHRsc19tcGkgKlgsIGludCByYWRpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbiwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBzaXplX3QgbjsKKyAgICBjaGFyICpwOworICAgIG1iZWR0bHNfbXBpIFQ7CisKKyAgICBpZiggcmFkaXggPCAyIHx8IHJhZGl4ID4gMTYgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQSApOworCisgICAgbiA9IG1iZWR0bHNfbXBpX2JpdGxlbiggWCApOworICAgIGlmKCByYWRpeCA+PSAgNCApIG4gPj49IDE7CisgICAgaWYoIHJhZGl4ID49IDE2ICkgbiA+Pj0gMTsKKyAgICBuICs9IDM7CisKKyAgICBpZiggYnVmbGVuIDwgbiApCisgICAgeworICAgICAgICAqb2xlbiA9IG47CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0JVRkZFUl9UT09fU01BTEwgKTsKKyAgICB9CisKKyAgICBwID0gYnVmOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZUICk7CisKKyAgICBpZiggWC0+cyA9PSAtMSApCisgICAgICAgICpwKysgPSAnLSc7CisKKyAgICBpZiggcmFkaXggPT0gMTYgKQorICAgIHsKKyAgICAgICAgaW50IGM7CisgICAgICAgIHNpemVfdCBpLCBqLCBrOworCisgICAgICAgIGZvciggaSA9IFgtPm4sIGsgPSAwOyBpID4gMDsgaS0tICkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yKCBqID0gY2lMOyBqID4gMDsgai0tICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjID0gKCBYLT5wW2kgLSAxXSA+PiAoICggaiAtIDEgKSA8PCAzKSApICYgMHhGRjsKKworICAgICAgICAgICAgICAgIGlmKCBjID09IDAgJiYgayA9PSAwICYmICggaSArIGogKSAhPSAyICkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAqKHArKykgPSAiMDEyMzQ1Njc4OUFCQ0RFRiIgW2MgLyAxNl07CisgICAgICAgICAgICAgICAgKihwKyspID0gIjAxMjM0NTY3ODlBQkNERUYiIFtjICUgMTZdOworICAgICAgICAgICAgICAgIGsgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlQsIFggKSApOworCisgICAgICAgIGlmKCBULnMgPT0gLTEgKQorICAgICAgICAgICAgVC5zID0gMTsKKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1waV93cml0ZV9obHAoICZULCByYWRpeCwgJnAgKSApOworICAgIH0KKworICAgICpwKysgPSAnXDAnOworICAgICpvbGVuID0gcCAtIGJ1ZjsKKworY2xlYW51cDoKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZUICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoKKyAqIFJlYWQgWCBmcm9tIGFuIG9wZW5lZCBmaWxlCisgKi8KK2ludCBtYmVkdGxzX21waV9yZWFkX2ZpbGUoIG1iZWR0bHNfbXBpICpYLCBpbnQgcmFkaXgsIEZJTEUgKmZpbiApCit7CisgICAgbWJlZHRsc19tcGlfdWludCBkOworICAgIHNpemVfdCBzbGVuOworICAgIGNoYXIgKnA7CisgICAgLyoKKyAgICAgKiBCdWZmZXIgc2hvdWxkIGhhdmUgc3BhY2UgZm9yIChzaG9ydCkgbGFiZWwgYW5kIGRlY2ltYWwgZm9ybWF0dGVkIE1QSSwKKyAgICAgKiBuZXdsaW5lIGNoYXJhY3RlcnMgYW5kICdcMCcKKyAgICAgKi8KKyAgICBjaGFyIHNbIE1CRURUTFNfTVBJX1JXX0JVRkZFUl9TSVpFIF07CisKKyAgICBtZW1zZXQoIHMsIDAsIHNpemVvZiggcyApICk7CisgICAgaWYoIGZnZXRzKCBzLCBzaXplb2YoIHMgKSAtIDEsIGZpbiApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9GSUxFX0lPX0VSUk9SICk7CisKKyAgICBzbGVuID0gc3RybGVuKCBzICk7CisgICAgaWYoIHNsZW4gPT0gc2l6ZW9mKCBzICkgLSAyICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgaWYoIHNbc2xlbiAtIDFdID09ICdcbicgKSB7IHNsZW4tLTsgc1tzbGVuXSA9ICdcMCc7IH0KKyAgICBpZiggc1tzbGVuIC0gMV0gPT0gJ1xyJyApIHsgc2xlbi0tOyBzW3NsZW5dID0gJ1wwJzsgfQorCisgICAgcCA9IHMgKyBzbGVuOworICAgIHdoaWxlKCAtLXAgPj0gcyApCisgICAgICAgIGlmKCBtcGlfZ2V0X2RpZ2l0KCAmZCwgcmFkaXgsICpwICkgIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIHJldHVybiggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoIFgsIHJhZGl4LCBwICsgMSApICk7Cit9CisKKy8qCisgKiBXcml0ZSBYIGludG8gYW4gb3BlbmVkIGZpbGUgKG9yIHN0ZG91dCBpZiBmb3V0ID09IE5VTEwpCisgKi8KK2ludCBtYmVkdGxzX21waV93cml0ZV9maWxlKCBjb25zdCBjaGFyICpwLCBjb25zdCBtYmVkdGxzX21waSAqWCwgaW50IHJhZGl4LCBGSUxFICpmb3V0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuLCBzbGVuLCBwbGVuOworICAgIC8qCisgICAgICogQnVmZmVyIHNob3VsZCBoYXZlIHNwYWNlIGZvciAoc2hvcnQpIGxhYmVsIGFuZCBkZWNpbWFsIGZvcm1hdHRlZCBNUEksCisgICAgICogbmV3bGluZSBjaGFyYWN0ZXJzIGFuZCAnXDAnCisgICAgICovCisgICAgY2hhciBzWyBNQkVEVExTX01QSV9SV19CVUZGRVJfU0laRSBdOworCisgICAgbWVtc2V0KCBzLCAwLCBzaXplb2YoIHMgKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV93cml0ZV9zdHJpbmcoIFgsIHJhZGl4LCBzLCBzaXplb2YoIHMgKSAtIDIsICZuICkgKTsKKworICAgIGlmKCBwID09IE5VTEwgKSBwID0gIiI7CisKKyAgICBwbGVuID0gc3RybGVuKCBwICk7CisgICAgc2xlbiA9IHN0cmxlbiggcyApOworICAgIHNbc2xlbisrXSA9ICdccic7CisgICAgc1tzbGVuKytdID0gJ1xuJzsKKworICAgIGlmKCBmb3V0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIGZ3cml0ZSggcCwgMSwgcGxlbiwgZm91dCApICE9IHBsZW4gfHwKKyAgICAgICAgICAgIGZ3cml0ZSggcywgMSwgc2xlbiwgZm91dCApICE9IHNsZW4gKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfRklMRV9JT19FUlJPUiApOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJXMlcyIsIHAsIHMgKTsKKworY2xlYW51cDoKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworCisvKgorICogSW1wb3J0IFggZnJvbSB1bnNpZ25lZCBiaW5hcnkgZGF0YSwgYmlnIGVuZGlhbgorICovCitpbnQgbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoIG1iZWR0bHNfbXBpICpYLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGksIGosIG47CisKKyAgICBmb3IoIG4gPSAwOyBuIDwgYnVmbGVuOyBuKysgKQorICAgICAgICBpZiggYnVmW25dICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIFgsIENIQVJTX1RPX0xJTUJTKCBidWZsZW4gLSBuICkgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggWCwgMCApICk7CisKKyAgICBmb3IoIGkgPSBidWZsZW4sIGogPSAwOyBpID4gbjsgaS0tLCBqKysgKQorICAgICAgICBYLT5wW2ogLyBjaUxdIHw9ICgobWJlZHRsc19tcGlfdWludCkgYnVmW2kgLSAxXSkgPDwgKChqICUgY2lMKSA8PCAzKTsKKworY2xlYW51cDoKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBFeHBvcnQgWCBpbnRvIHVuc2lnbmVkIGJpbmFyeSBkYXRhLCBiaWcgZW5kaWFuCisgKi8KK2ludCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoIGNvbnN0IG1iZWR0bHNfbXBpICpYLCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKQoreworICAgIHNpemVfdCBpLCBqLCBuOworCisgICAgbiA9IG1iZWR0bHNfbXBpX3NpemUoIFggKTsKKworICAgIGlmKCBidWZsZW4gPCBuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgbWVtc2V0KCBidWYsIDAsIGJ1ZmxlbiApOworCisgICAgZm9yKCBpID0gYnVmbGVuIC0gMSwgaiA9IDA7IG4gPiAwOyBpLS0sIGorKywgbi0tICkKKyAgICAgICAgYnVmW2ldID0gKHVuc2lnbmVkIGNoYXIpKCBYLT5wW2ogLyBjaUxdID4+ICgoaiAlIGNpTCkgPDwgMykgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogTGVmdC1zaGlmdDogWCA8PD0gY291bnQKKyAqLworaW50IG1iZWR0bHNfbXBpX3NoaWZ0X2woIG1iZWR0bHNfbXBpICpYLCBzaXplX3QgY291bnQgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGksIHYwLCB0MTsKKyAgICBtYmVkdGxzX21waV91aW50IHIwID0gMCwgcjE7CisKKyAgICB2MCA9IGNvdW50IC8gKGJpTCAgICApOworICAgIHQxID0gY291bnQgJiAoYmlMIC0gMSk7CisKKyAgICBpID0gbWJlZHRsc19tcGlfYml0bGVuKCBYICkgKyBjb3VudDsKKworICAgIGlmKCBYLT5uICogYmlMIDwgaSApCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggWCwgQklUU19UT19MSU1CUyggaSApICkgKTsKKworICAgIHJldCA9IDA7CisKKyAgICAvKgorICAgICAqIHNoaWZ0IGJ5IGNvdW50IC8gbGltYl9zaXplCisgICAgICovCisgICAgaWYoIHYwID4gMCApCisgICAgeworICAgICAgICBmb3IoIGkgPSBYLT5uOyBpID4gdjA7IGktLSApCisgICAgICAgICAgICBYLT5wW2kgLSAxXSA9IFgtPnBbaSAtIHYwIC0gMV07CisKKyAgICAgICAgZm9yKCA7IGkgPiAwOyBpLS0gKQorICAgICAgICAgICAgWC0+cFtpIC0gMV0gPSAwOworICAgIH0KKworICAgIC8qCisgICAgICogc2hpZnQgYnkgY291bnQgJSBsaW1iX3NpemUKKyAgICAgKi8KKyAgICBpZiggdDEgPiAwICkKKyAgICB7CisgICAgICAgIGZvciggaSA9IHYwOyBpIDwgWC0+bjsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgcjEgPSBYLT5wW2ldID4+IChiaUwgLSB0MSk7CisgICAgICAgICAgICBYLT5wW2ldIDw8PSB0MTsKKyAgICAgICAgICAgIFgtPnBbaV0gfD0gcjA7CisgICAgICAgICAgICByMCA9IHIxOworICAgICAgICB9CisgICAgfQorCitjbGVhbnVwOgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFJpZ2h0LXNoaWZ0OiBYID4+PSBjb3VudAorICovCitpbnQgbWJlZHRsc19tcGlfc2hpZnRfciggbWJlZHRsc19tcGkgKlgsIHNpemVfdCBjb3VudCApCit7CisgICAgc2l6ZV90IGksIHYwLCB2MTsKKyAgICBtYmVkdGxzX21waV91aW50IHIwID0gMCwgcjE7CisKKyAgICB2MCA9IGNvdW50IC8gIGJpTDsKKyAgICB2MSA9IGNvdW50ICYgKGJpTCAtIDEpOworCisgICAgaWYoIHYwID4gWC0+biB8fCAoIHYwID09IFgtPm4gJiYgdjEgPiAwICkgKQorICAgICAgICByZXR1cm4gbWJlZHRsc19tcGlfbHNldCggWCwgMCApOworCisgICAgLyoKKyAgICAgKiBzaGlmdCBieSBjb3VudCAvIGxpbWJfc2l6ZQorICAgICAqLworICAgIGlmKCB2MCA+IDAgKQorICAgIHsKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IFgtPm4gLSB2MDsgaSsrICkKKyAgICAgICAgICAgIFgtPnBbaV0gPSBYLT5wW2kgKyB2MF07CisKKyAgICAgICAgZm9yKCA7IGkgPCBYLT5uOyBpKysgKQorICAgICAgICAgICAgWC0+cFtpXSA9IDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBzaGlmdCBieSBjb3VudCAlIGxpbWJfc2l6ZQorICAgICAqLworICAgIGlmKCB2MSA+IDAgKQorICAgIHsKKyAgICAgICAgZm9yKCBpID0gWC0+bjsgaSA+IDA7IGktLSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHIxID0gWC0+cFtpIC0gMV0gPDwgKGJpTCAtIHYxKTsKKyAgICAgICAgICAgIFgtPnBbaSAtIDFdID4+PSB2MTsKKyAgICAgICAgICAgIFgtPnBbaSAtIDFdIHw9IHIwOworICAgICAgICAgICAgcjAgPSByMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQ29tcGFyZSB1bnNpZ25lZCB2YWx1ZXMKKyAqLworaW50IG1iZWR0bHNfbXBpX2NtcF9hYnMoIGNvbnN0IG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqWSApCit7CisgICAgc2l6ZV90IGksIGo7CisKKyAgICBmb3IoIGkgPSBYLT5uOyBpID4gMDsgaS0tICkKKyAgICAgICAgaWYoIFgtPnBbaSAtIDFdICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBmb3IoIGogPSBZLT5uOyBqID4gMDsgai0tICkKKyAgICAgICAgaWYoIFktPnBbaiAtIDFdICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiggaSA9PSAwICYmIGogPT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoIGkgPiBqICkgcmV0dXJuKCAgMSApOworICAgIGlmKCBqID4gaSApIHJldHVybiggLTEgKTsKKworICAgIGZvciggOyBpID4gMDsgaS0tICkKKyAgICB7CisgICAgICAgIGlmKCBYLT5wW2kgLSAxXSA+IFktPnBbaSAtIDFdICkgcmV0dXJuKCAgMSApOworICAgICAgICBpZiggWC0+cFtpIC0gMV0gPCBZLT5wW2kgLSAxXSApIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENvbXBhcmUgc2lnbmVkIHZhbHVlcworICovCitpbnQgbWJlZHRsc19tcGlfY21wX21waSggY29uc3QgbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpZICkKK3sKKyAgICBzaXplX3QgaSwgajsKKworICAgIGZvciggaSA9IFgtPm47IGkgPiAwOyBpLS0gKQorICAgICAgICBpZiggWC0+cFtpIC0gMV0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIGZvciggaiA9IFktPm47IGogPiAwOyBqLS0gKQorICAgICAgICBpZiggWS0+cFtqIC0gMV0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIGlmKCBpID09IDAgJiYgaiA9PSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBpZiggaSA+IGogKSByZXR1cm4oICBYLT5zICk7CisgICAgaWYoIGogPiBpICkgcmV0dXJuKCAtWS0+cyApOworCisgICAgaWYoIFgtPnMgPiAwICYmIFktPnMgPCAwICkgcmV0dXJuKCAgMSApOworICAgIGlmKCBZLT5zID4gMCAmJiBYLT5zIDwgMCApIHJldHVybiggLTEgKTsKKworICAgIGZvciggOyBpID4gMDsgaS0tICkKKyAgICB7CisgICAgICAgIGlmKCBYLT5wW2kgLSAxXSA+IFktPnBbaSAtIDFdICkgcmV0dXJuKCAgWC0+cyApOworICAgICAgICBpZiggWC0+cFtpIC0gMV0gPCBZLT5wW2kgLSAxXSApIHJldHVybiggLVgtPnMgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENvbXBhcmUgc2lnbmVkIHZhbHVlcworICovCitpbnQgbWJlZHRsc19tcGlfY21wX2ludCggY29uc3QgbWJlZHRsc19tcGkgKlgsIG1iZWR0bHNfbXBpX3NpbnQgeiApCit7CisgICAgbWJlZHRsc19tcGkgWTsKKyAgICBtYmVkdGxzX21waV91aW50IHBbMV07CisKKyAgICAqcCAgPSAoIHogPCAwICkgPyAteiA6IHo7CisgICAgWS5zID0gKCB6IDwgMCApID8gLTEgOiAxOworICAgIFkubiA9IDE7CisgICAgWS5wID0gcDsKKworICAgIHJldHVybiggbWJlZHRsc19tcGlfY21wX21waSggWCwgJlkgKSApOworfQorCisvKgorICogVW5zaWduZWQgYWRkaXRpb246IFggPSB8QXwgKyB8QnwgIChIQUMgMTQuNykKKyAqLworaW50IG1iZWR0bHNfbXBpX2FkZF9hYnMoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGksIGo7CisgICAgbWJlZHRsc19tcGlfdWludCAqbywgKnAsIGMsIHRtcDsKKworICAgIGlmKCBYID09IEIgKQorICAgIHsKKyAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKlQgPSBBOyBBID0gWDsgQiA9IFQ7CisgICAgfQorCisgICAgaWYoIFggIT0gQSApCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggWCwgQSApICk7CisKKyAgICAvKgorICAgICAqIFggc2hvdWxkIGFsd2F5cyBiZSBwb3NpdGl2ZSBhcyBhIHJlc3VsdCBvZiB1bnNpZ25lZCBhZGRpdGlvbnMuCisgICAgICovCisgICAgWC0+cyA9IDE7CisKKyAgICBmb3IoIGogPSBCLT5uOyBqID4gMDsgai0tICkKKyAgICAgICAgaWYoIEItPnBbaiAtIDFdICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIFgsIGogKSApOworCisgICAgbyA9IEItPnA7IHAgPSBYLT5wOyBjID0gMDsKKworICAgIC8qCisgICAgICogdG1wIGlzIHVzZWQgYmVjYXVzZSBpdCBtaWdodCBoYXBwZW4gdGhhdCBwID09IG8KKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgajsgaSsrLCBvKyssIHArKyApCisgICAgeworICAgICAgICB0bXA9ICpvOworICAgICAgICAqcCArPSAgYzsgYyAgPSAoICpwIDwgIGMgKTsKKyAgICAgICAgKnAgKz0gdG1wOyBjICs9ICggKnAgPCB0bXAgKTsKKyAgICB9CisKKyAgICB3aGlsZSggYyAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCBpID49IFgtPm4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIFgsIGkgKyAxICkgKTsKKyAgICAgICAgICAgIHAgPSBYLT5wICsgaTsKKyAgICAgICAgfQorCisgICAgICAgICpwICs9IGM7IGMgPSAoICpwIDwgYyApOyBpKys7IHArKzsKKyAgICB9CisKK2NsZWFudXA6CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogSGVscGVyIGZvciBtYmVkdGxzX21waSBzdWJ0cmFjdGlvbgorICovCitzdGF0aWMgdm9pZCBtcGlfc3ViX2hscCggc2l6ZV90IG4sIG1iZWR0bHNfbXBpX3VpbnQgKnMsIG1iZWR0bHNfbXBpX3VpbnQgKmQgKQoreworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfbXBpX3VpbnQgYywgejsKKworICAgIGZvciggaSA9IGMgPSAwOyBpIDwgbjsgaSsrLCBzKyssIGQrKyApCisgICAgeworICAgICAgICB6ID0gKCAqZCA8ICBjICk7ICAgICAqZCAtPSAgYzsKKyAgICAgICAgYyA9ICggKmQgPCAqcyApICsgejsgKmQgLT0gKnM7CisgICAgfQorCisgICAgd2hpbGUoIGMgIT0gMCApCisgICAgeworICAgICAgICB6ID0gKCAqZCA8IGMgKTsgKmQgLT0gYzsKKyAgICAgICAgYyA9IHo7IGkrKzsgZCsrOworICAgIH0KK30KKworLyoKKyAqIFVuc2lnbmVkIHN1YnRyYWN0aW9uOiBYID0gfEF8IC0gfEJ8ICAoSEFDIDE0LjkpCisgKi8KK2ludCBtYmVkdGxzX21waV9zdWJfYWJzKCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpCICkKK3sKKyAgICBtYmVkdGxzX21waSBUQjsKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9hYnMoIEEsIEIgKSA8IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRSApOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlRCICk7CisKKyAgICBpZiggWCA9PSBCICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlRCLCBCICkgKTsKKyAgICAgICAgQiA9ICZUQjsKKyAgICB9CisKKyAgICBpZiggWCAhPSBBICkKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCBYLCBBICkgKTsKKworICAgIC8qCisgICAgICogWCBzaG91bGQgYWx3YXlzIGJlIHBvc2l0aXZlIGFzIGEgcmVzdWx0IG9mIHVuc2lnbmVkIHN1YnRyYWN0aW9ucy4KKyAgICAgKi8KKyAgICBYLT5zID0gMTsKKworICAgIHJldCA9IDA7CisKKyAgICBmb3IoIG4gPSBCLT5uOyBuID4gMDsgbi0tICkKKyAgICAgICAgaWYoIEItPnBbbiAtIDFdICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBtcGlfc3ViX2hscCggbiwgQi0+cCwgWC0+cCApOworCitjbGVhbnVwOgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJlRCICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogU2lnbmVkIGFkZGl0aW9uOiBYID0gQSArIEIKKyAqLworaW50IG1iZWR0bHNfbXBpX2FkZF9tcGkoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKQoreworICAgIGludCByZXQsIHMgPSBBLT5zOworCisgICAgaWYoIEEtPnMgKiBCLT5zIDwgMCApCisgICAgeworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX2FicyggQSwgQiApID49IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9hYnMoIFgsIEEsIEIgKSApOworICAgICAgICAgICAgWC0+cyA9ICBzOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfYWJzKCBYLCBCLCBBICkgKTsKKyAgICAgICAgICAgIFgtPnMgPSAtczsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9hYnMoIFgsIEEsIEIgKSApOworICAgICAgICBYLT5zID0gczsKKyAgICB9CisKK2NsZWFudXA6CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogU2lnbmVkIHN1YnRyYWN0aW9uOiBYID0gQSAtIEIKKyAqLworaW50IG1iZWR0bHNfbXBpX3N1Yl9tcGkoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKQoreworICAgIGludCByZXQsIHMgPSBBLT5zOworCisgICAgaWYoIEEtPnMgKiBCLT5zID4gMCApCisgICAgeworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX2FicyggQSwgQiApID49IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9hYnMoIFgsIEEsIEIgKSApOworICAgICAgICAgICAgWC0+cyA9ICBzOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfYWJzKCBYLCBCLCBBICkgKTsKKyAgICAgICAgICAgIFgtPnMgPSAtczsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9hYnMoIFgsIEEsIEIgKSApOworICAgICAgICBYLT5zID0gczsKKyAgICB9CisKK2NsZWFudXA6CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogU2lnbmVkIGFkZGl0aW9uOiBYID0gQSArIGIKKyAqLworaW50IG1iZWR0bHNfbXBpX2FkZF9pbnQoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgbWJlZHRsc19tcGlfc2ludCBiICkKK3sKKyAgICBtYmVkdGxzX21waSBfQjsKKyAgICBtYmVkdGxzX21waV91aW50IHBbMV07CisKKyAgICBwWzBdID0gKCBiIDwgMCApID8gLWIgOiBiOworICAgIF9CLnMgPSAoIGIgPCAwICkgPyAtMSA6IDE7CisgICAgX0IubiA9IDE7CisgICAgX0IucCA9IHA7CisKKyAgICByZXR1cm4oIG1iZWR0bHNfbXBpX2FkZF9tcGkoIFgsIEEsICZfQiApICk7Cit9CisKKy8qCisgKiBTaWduZWQgc3VidHJhY3Rpb246IFggPSBBIC0gYgorICovCitpbnQgbWJlZHRsc19tcGlfc3ViX2ludCggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBtYmVkdGxzX21waV9zaW50IGIgKQoreworICAgIG1iZWR0bHNfbXBpIF9COworICAgIG1iZWR0bHNfbXBpX3VpbnQgcFsxXTsKKworICAgIHBbMF0gPSAoIGIgPCAwICkgPyAtYiA6IGI7CisgICAgX0IucyA9ICggYiA8IDAgKSA/IC0xIDogMTsKKyAgICBfQi5uID0gMTsKKyAgICBfQi5wID0gcDsKKworICAgIHJldHVybiggbWJlZHRsc19tcGlfc3ViX21waSggWCwgQSwgJl9CICkgKTsKK30KKworLyoKKyAqIEhlbHBlciBmb3IgbWJlZHRsc19tcGkgbXVsdGlwbGljYXRpb24KKyAqLworc3RhdGljCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19hcm1fXykKKy8qCisgKiBBcHBsZSBMTFZNIHZlcnNpb24gNC4yIChjbGFuZy00MjUuMC4yNCkgKGJhc2VkIG9uIExMVk0gMy4yc3ZuKQorICogYXBwZWFycyB0byBuZWVkIHRoaXMgdG8gcHJldmVudCBiYWQgQVJNIGNvZGUgZ2VuZXJhdGlvbiBhdCAtTzMuCisgKi8KK19fYXR0cmlidXRlX18gKChub2lubGluZSkpCisjZW5kaWYKK3ZvaWQgbXBpX211bF9obHAoIHNpemVfdCBpLCBtYmVkdGxzX21waV91aW50ICpzLCBtYmVkdGxzX21waV91aW50ICpkLCBtYmVkdGxzX21waV91aW50IGIgKQoreworICAgIG1iZWR0bHNfbXBpX3VpbnQgYyA9IDAsIHQgPSAwOworCisjaWYgZGVmaW5lZChNVUxBRERDX0hVSVQpCisgICAgZm9yKCA7IGkgPj0gODsgaSAtPSA4ICkKKyAgICB7CisgICAgICAgIE1VTEFERENfSU5JVAorICAgICAgICBNVUxBRERDX0hVSVQKKyAgICAgICAgTVVMQUREQ19TVE9QCisgICAgfQorCisgICAgZm9yKCA7IGkgPiAwOyBpLS0gKQorICAgIHsKKyAgICAgICAgTVVMQUREQ19JTklUCisgICAgICAgIE1VTEFERENfQ09SRQorICAgICAgICBNVUxBRERDX1NUT1AKKyAgICB9CisjZWxzZSAvKiBNVUxBRERDX0hVSVQgKi8KKyAgICBmb3IoIDsgaSA+PSAxNjsgaSAtPSAxNiApCisgICAgeworICAgICAgICBNVUxBRERDX0lOSVQKKyAgICAgICAgTVVMQUREQ19DT1JFICAgTVVMQUREQ19DT1JFCisgICAgICAgIE1VTEFERENfQ09SRSAgIE1VTEFERENfQ09SRQorICAgICAgICBNVUxBRERDX0NPUkUgICBNVUxBRERDX0NPUkUKKyAgICAgICAgTVVMQUREQ19DT1JFICAgTVVMQUREQ19DT1JFCisKKyAgICAgICAgTVVMQUREQ19DT1JFICAgTVVMQUREQ19DT1JFCisgICAgICAgIE1VTEFERENfQ09SRSAgIE1VTEFERENfQ09SRQorICAgICAgICBNVUxBRERDX0NPUkUgICBNVUxBRERDX0NPUkUKKyAgICAgICAgTVVMQUREQ19DT1JFICAgTVVMQUREQ19DT1JFCisgICAgICAgIE1VTEFERENfU1RPUAorICAgIH0KKworICAgIGZvciggOyBpID49IDg7IGkgLT0gOCApCisgICAgeworICAgICAgICBNVUxBRERDX0lOSVQKKyAgICAgICAgTVVMQUREQ19DT1JFICAgTVVMQUREQ19DT1JFCisgICAgICAgIE1VTEFERENfQ09SRSAgIE1VTEFERENfQ09SRQorCisgICAgICAgIE1VTEFERENfQ09SRSAgIE1VTEFERENfQ09SRQorICAgICAgICBNVUxBRERDX0NPUkUgICBNVUxBRERDX0NPUkUKKyAgICAgICAgTVVMQUREQ19TVE9QCisgICAgfQorCisgICAgZm9yKCA7IGkgPiAwOyBpLS0gKQorICAgIHsKKyAgICAgICAgTVVMQUREQ19JTklUCisgICAgICAgIE1VTEFERENfQ09SRQorICAgICAgICBNVUxBRERDX1NUT1AKKyAgICB9CisjZW5kaWYgLyogTVVMQUREQ19IVUlUICovCisKKyAgICB0Kys7CisKKyAgICBkbyB7CisgICAgICAgICpkICs9IGM7IGMgPSAoICpkIDwgYyApOyBkKys7CisgICAgfQorICAgIHdoaWxlKCBjICE9IDAgKTsKK30KKworLyoKKyAqIEJhc2VsaW5lIG11bHRpcGxpY2F0aW9uOiBYID0gQSAqIEIgIChIQUMgMTQuMTIpCisgKi8KK2ludCBtYmVkdGxzX21waV9tdWxfbXBpKCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpCICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBpLCBqOworICAgIG1iZWR0bHNfbXBpIFRBLCBUQjsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZUQSApOyBtYmVkdGxzX21waV9pbml0KCAmVEIgKTsKKworICAgIGlmKCBYID09IEEgKSB7IE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlRBLCBBICkgKTsgQSA9ICZUQTsgfQorICAgIGlmKCBYID09IEIgKSB7IE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlRCLCBCICkgKTsgQiA9ICZUQjsgfQorCisgICAgZm9yKCBpID0gQS0+bjsgaSA+IDA7IGktLSApCisgICAgICAgIGlmKCBBLT5wW2kgLSAxXSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgZm9yKCBqID0gQi0+bjsgaiA+IDA7IGotLSApCisgICAgICAgIGlmKCBCLT5wW2ogLSAxXSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCBYLCBpICsgaiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCBYLCAwICkgKTsKKworICAgIGZvciggaSsrOyBqID4gMDsgai0tICkKKyAgICAgICAgbXBpX211bF9obHAoIGkgLSAxLCBBLT5wLCBYLT5wICsgaiAtIDEsIEItPnBbaiAtIDFdICk7CisKKyAgICBYLT5zID0gQS0+cyAqIEItPnM7CisKK2NsZWFudXA6CisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmVEIgKTsgbWJlZHRsc19tcGlfZnJlZSggJlRBICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQmFzZWxpbmUgbXVsdGlwbGljYXRpb246IFggPSBBICogYgorICovCitpbnQgbWJlZHRsc19tcGlfbXVsX2ludCggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBtYmVkdGxzX21waV91aW50IGIgKQoreworICAgIG1iZWR0bHNfbXBpIF9COworICAgIG1iZWR0bHNfbXBpX3VpbnQgcFsxXTsKKworICAgIF9CLnMgPSAxOworICAgIF9CLm4gPSAxOworICAgIF9CLnAgPSBwOworICAgIHBbMF0gPSBiOworCisgICAgcmV0dXJuKCBtYmVkdGxzX21waV9tdWxfbXBpKCBYLCBBLCAmX0IgKSApOworfQorCisvKgorICogVW5zaWduZWQgaW50ZWdlciBkaXZpZGUgLSBkb3VibGUgbWJlZHRsc19tcGlfdWludCBkaXZpZGVuZCwgdTEvdTAsIGFuZAorICogbWJlZHRsc19tcGlfdWludCBkaXZpc29yLCBkCisgKi8KK3N0YXRpYyBtYmVkdGxzX21waV91aW50IG1iZWR0bHNfaW50X2Rpdl9pbnQoIG1iZWR0bHNfbXBpX3VpbnQgdTEsCisgICAgICAgICAgICBtYmVkdGxzX21waV91aW50IHUwLCBtYmVkdGxzX21waV91aW50IGQsIG1iZWR0bHNfbXBpX3VpbnQgKnIgKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1VEQkwpCisgICAgbWJlZHRsc190X3VkYmwgZGl2aWRlbmQsIHF1b3RpZW50OworI2Vsc2UKKyAgICBjb25zdCBtYmVkdGxzX21waV91aW50IHJhZGl4ID0gKG1iZWR0bHNfbXBpX3VpbnQpIDEgPDwgYmlIOworICAgIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgdWludF9oYWxmd29yZF9tYXNrID0gKCAobWJlZHRsc19tcGlfdWludCkgMSA8PCBiaUggKSAtIDE7CisgICAgbWJlZHRsc19tcGlfdWludCBkMCwgZDEsIHEwLCBxMSwgckFYLCByMCwgcXVvdGllbnQ7CisgICAgbWJlZHRsc19tcGlfdWludCB1MF9tc3csIHUwX2xzdzsKKyAgICBzaXplX3QgczsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3Igb3ZlcmZsb3cKKyAgICAgKi8KKyAgICBpZiggMCA9PSBkIHx8IHUxID49IGQgKQorICAgIHsKKyAgICAgICAgaWYgKHIgIT0gTlVMTCkgKnIgPSB+MDsKKworICAgICAgICByZXR1cm4gKCB+MCApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1VEQkwpCisgICAgZGl2aWRlbmQgID0gKG1iZWR0bHNfdF91ZGJsKSB1MSA8PCBiaUw7CisgICAgZGl2aWRlbmQgfD0gKG1iZWR0bHNfdF91ZGJsKSB1MDsKKyAgICBxdW90aWVudCA9IGRpdmlkZW5kIC8gZDsKKyAgICBpZiggcXVvdGllbnQgPiAoIChtYmVkdGxzX3RfdWRibCkgMSA8PCBiaUwgKSAtIDEgKQorICAgICAgICBxdW90aWVudCA9ICggKG1iZWR0bHNfdF91ZGJsKSAxIDw8IGJpTCApIC0gMTsKKworICAgIGlmKCByICE9IE5VTEwgKQorICAgICAgICAqciA9IChtYmVkdGxzX21waV91aW50KSggZGl2aWRlbmQgLSAocXVvdGllbnQgKiBkICkgKTsKKworICAgIHJldHVybiAobWJlZHRsc19tcGlfdWludCkgcXVvdGllbnQ7CisjZWxzZQorCisgICAgLyoKKyAgICAgKiBBbGdvcml0aG0gRCwgU2VjdGlvbiA0LjMuMSAtIFRoZSBBcnQgb2YgQ29tcHV0ZXIgUHJvZ3JhbW1pbmcKKyAgICAgKiAgIFZvbC4gMiAtIFNlbWludW1lcmljYWwgQWxnb3JpdGhtcywgS251dGgKKyAgICAgKi8KKworICAgIC8qCisgICAgICogTm9ybWFsaXplIHRoZSBkaXZpc29yLCBkLCBhbmQgZGl2aWRlbmQsIHUwLCB1MQorICAgICAqLworICAgIHMgPSBtYmVkdGxzX2NseiggZCApOworICAgIGQgPSBkIDw8IHM7CisKKyAgICB1MSA9IHUxIDw8IHM7CisgICAgdTEgfD0gKCB1MCA+PiAoIGJpTCAtIHMgKSApICYgKCAtKG1iZWR0bHNfbXBpX3NpbnQpcyA+PiAoIGJpTCAtIDEgKSApOworICAgIHUwID0gIHUwIDw8IHM7CisKKyAgICBkMSA9IGQgPj4gYmlIOworICAgIGQwID0gZCAmIHVpbnRfaGFsZndvcmRfbWFzazsKKworICAgIHUwX21zdyA9IHUwID4+IGJpSDsKKyAgICB1MF9sc3cgPSB1MCAmIHVpbnRfaGFsZndvcmRfbWFzazsKKworICAgIC8qCisgICAgICogRmluZCB0aGUgZmlyc3QgcXVvdGllbnQgYW5kIHJlbWFpbmRlcgorICAgICAqLworICAgIHExID0gdTEgLyBkMTsKKyAgICByMCA9IHUxIC0gZDEgKiBxMTsKKworICAgIHdoaWxlKCBxMSA+PSByYWRpeCB8fCAoIHExICogZDAgPiByYWRpeCAqIHIwICsgdTBfbXN3ICkgKQorICAgIHsKKyAgICAgICAgcTEgLT0gMTsKKyAgICAgICAgcjAgKz0gZDE7CisKKyAgICAgICAgaWYgKCByMCA+PSByYWRpeCApIGJyZWFrOworICAgIH0KKworICAgIHJBWCA9ICggdTEgKiByYWRpeCApICsgKCB1MF9tc3cgLSBxMSAqIGQgKTsKKyAgICBxMCA9IHJBWCAvIGQxOworICAgIHIwID0gckFYIC0gcTAgKiBkMTsKKworICAgIHdoaWxlKCBxMCA+PSByYWRpeCB8fCAoIHEwICogZDAgPiByYWRpeCAqIHIwICsgdTBfbHN3ICkgKQorICAgIHsKKyAgICAgICAgcTAgLT0gMTsKKyAgICAgICAgcjAgKz0gZDE7CisKKyAgICAgICAgaWYgKCByMCA+PSByYWRpeCApIGJyZWFrOworICAgIH0KKworICAgIGlmIChyICE9IE5VTEwpCisgICAgICAgICpyID0gKCByQVggKiByYWRpeCArIHUwX2xzdyAtIHEwICogZCApID4+IHM7CisKKyAgICBxdW90aWVudCA9IHExICogcmFkaXggKyBxMDsKKworICAgIHJldHVybiBxdW90aWVudDsKKyNlbmRpZgorfQorCisvKgorICogRGl2aXNpb24gYnkgbWJlZHRsc19tcGk6IEEgPSBRICogQiArIFIgIChIQUMgMTQuMjApCisgKi8KK2ludCBtYmVkdGxzX21waV9kaXZfbXBpKCBtYmVkdGxzX21waSAqUSwgbWJlZHRsc19tcGkgKlIsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqQiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaSwgbiwgdCwgazsKKyAgICBtYmVkdGxzX21waSBYLCBZLCBaLCBUMSwgVDI7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggQiwgMCApID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9ESVZJU0lPTl9CWV9aRVJPICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZUMSApOyBtYmVkdGxzX21waV9pbml0KCAmVDIgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfYWJzKCBBLCBCICkgPCAwICkKKyAgICB7CisgICAgICAgIGlmKCBRICE9IE5VTEwgKSBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoIFEsIDAgKSApOworICAgICAgICBpZiggUiAhPSBOVUxMICkgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCBSLCBBICkgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmWCwgQSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmWSwgQiApICk7CisgICAgWC5zID0gWS5zID0gMTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggJlosIEEtPm4gKyAyICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZaLCAgMCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCAmVDEsIDIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggJlQyLCAzICkgKTsKKworICAgIGsgPSBtYmVkdGxzX21waV9iaXRsZW4oICZZICkgJSBiaUw7CisgICAgaWYoIGsgPCBiaUwgLSAxICkKKyAgICB7CisgICAgICAgIGsgPSBiaUwgLSAxIC0gazsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9sKCAmWCwgayApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfbCggJlksIGsgKSApOworICAgIH0KKyAgICBlbHNlIGsgPSAwOworCisgICAgbiA9IFgubiAtIDE7CisgICAgdCA9IFkubiAtIDE7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9sKCAmWSwgYmlMICogKCBuIC0gdCApICkgKTsKKworICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJlkgKSA+PSAwICkKKyAgICB7CisgICAgICAgIFoucFtuIC0gdF0rKzsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmWCwgJlgsICZZICkgKTsKKyAgICB9CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmWSwgYmlMICogKCBuIC0gdCApICkgKTsKKworICAgIGZvciggaSA9IG47IGkgPiB0IDsgaS0tICkKKyAgICB7CisgICAgICAgIGlmKCBYLnBbaV0gPj0gWS5wW3RdICkKKyAgICAgICAgICAgIFoucFtpIC0gdCAtIDFdID0gfjA7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgWi5wW2kgLSB0IC0gMV0gPSBtYmVkdGxzX2ludF9kaXZfaW50KCBYLnBbaV0sIFgucFtpIC0gMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZLnBbdF0sIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgWi5wW2kgLSB0IC0gMV0rKzsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgWi5wW2kgLSB0IC0gMV0tLTsKKworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmVDEsIDAgKSApOworICAgICAgICAgICAgVDEucFswXSA9ICggdCA8IDEgKSA/IDAgOiBZLnBbdCAtIDFdOworICAgICAgICAgICAgVDEucFsxXSA9IFkucFt0XTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX2ludCggJlQxLCAmVDEsIFoucFtpIC0gdCAtIDFdICkgKTsKKworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmVDIsIDAgKSApOworICAgICAgICAgICAgVDIucFswXSA9ICggaSA8IDIgKSA/IDAgOiBYLnBbaSAtIDJdOworICAgICAgICAgICAgVDIucFsxXSA9ICggaSA8IDEgKSA/IDAgOiBYLnBbaSAtIDFdOworICAgICAgICAgICAgVDIucFsyXSA9IFgucFtpXTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX21waSggJlQxLCAmVDIgKSA+IDAgKTsKKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9pbnQoICZUMSwgJlksIFoucFtpIC0gdCAtIDFdICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9sKCAmVDEsICBiaUwgKiAoIGkgLSB0IC0gMSApICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmWCwgJlgsICZUMSApICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZYLCAwICkgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmVDEsICZZICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfbCggJlQxLCBiaUwgKiAoIGkgLSB0IC0gMSApICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX21waSggJlgsICZYLCAmVDEgKSApOworICAgICAgICAgICAgWi5wW2kgLSB0IC0gMV0tLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBRICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCBRLCAmWiApICk7CisgICAgICAgIFEtPnMgPSBBLT5zICogQi0+czsKKyAgICB9CisKKyAgICBpZiggUiAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlgsIGsgKSApOworICAgICAgICBYLnMgPSBBLT5zOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoIFIsICZYICkgKTsKKworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggUiwgMCApID09IDAgKQorICAgICAgICAgICAgUi0+cyA9IDE7CisgICAgfQorCitjbGVhbnVwOgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsgbWJlZHRsc19tcGlfZnJlZSggJlogKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmVDEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlQyICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogRGl2aXNpb24gYnkgaW50OiBBID0gUSAqIGIgKyBSCisgKi8KK2ludCBtYmVkdGxzX21waV9kaXZfaW50KCBtYmVkdGxzX21waSAqUSwgbWJlZHRsc19tcGkgKlIsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBtYmVkdGxzX21waV9zaW50IGIgKQoreworICAgIG1iZWR0bHNfbXBpIF9COworICAgIG1iZWR0bHNfbXBpX3VpbnQgcFsxXTsKKworICAgIHBbMF0gPSAoIGIgPCAwICkgPyAtYiA6IGI7CisgICAgX0IucyA9ICggYiA8IDAgKSA/IC0xIDogMTsKKyAgICBfQi5uID0gMTsKKyAgICBfQi5wID0gcDsKKworICAgIHJldHVybiggbWJlZHRsc19tcGlfZGl2X21waSggUSwgUiwgQSwgJl9CICkgKTsKK30KKworLyoKKyAqIE1vZHVsbzogUiA9IEEgbW9kIEIKKyAqLworaW50IG1iZWR0bHNfbXBpX21vZF9tcGkoIG1iZWR0bHNfbXBpICpSLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggQiwgMCApIDwgMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2Rpdl9tcGkoIE5VTEwsIFIsIEEsIEIgKSApOworCisgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9pbnQoIFIsIDAgKSA8IDAgKQorICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCBSLCBSLCBCICkgKTsKKworICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfbXBpKCBSLCBCICkgPj0gMCApCisgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoIFIsIFIsIEIgKSApOworCitjbGVhbnVwOgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIE1vZHVsbzogciA9IEEgbW9kIGIKKyAqLworaW50IG1iZWR0bHNfbXBpX21vZF9pbnQoIG1iZWR0bHNfbXBpX3VpbnQgKnIsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBtYmVkdGxzX21waV9zaW50IGIgKQoreworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfbXBpX3VpbnQgeCwgeSwgejsKKworICAgIGlmKCBiID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9ESVZJU0lPTl9CWV9aRVJPICk7CisKKyAgICBpZiggYiA8IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRSApOworCisgICAgLyoKKyAgICAgKiBoYW5kbGUgdHJpdmlhbCBjYXNlcworICAgICAqLworICAgIGlmKCBiID09IDEgKQorICAgIHsKKyAgICAgICAgKnIgPSAwOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBpZiggYiA9PSAyICkKKyAgICB7CisgICAgICAgICpyID0gQS0+cFswXSAmIDE7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIC8qCisgICAgICogZ2VuZXJhbCBjYXNlCisgICAgICovCisgICAgZm9yKCBpID0gQS0+biwgeSA9IDA7IGkgPiAwOyBpLS0gKQorICAgIHsKKyAgICAgICAgeCAgPSBBLT5wW2kgLSAxXTsKKyAgICAgICAgeSAgPSAoIHkgPDwgYmlIICkgfCAoIHggPj4gYmlIICk7CisgICAgICAgIHogID0geSAvIGI7CisgICAgICAgIHkgLT0geiAqIGI7CisKKyAgICAgICAgeCA8PD0gYmlIOworICAgICAgICB5ICA9ICggeSA8PCBiaUggKSB8ICggeCA+PiBiaUggKTsKKyAgICAgICAgeiAgPSB5IC8gYjsKKyAgICAgICAgeSAtPSB6ICogYjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIEEgaXMgbmVnYXRpdmUsIHRoZW4gdGhlIGN1cnJlbnQgeSByZXByZXNlbnRzIGEgbmVnYXRpdmUgdmFsdWUuCisgICAgICogRmxpcHBpbmcgaXQgdG8gdGhlIHBvc2l0aXZlIHNpZGUuCisgICAgICovCisgICAgaWYoIEEtPnMgPCAwICYmIHkgIT0gMCApCisgICAgICAgIHkgPSBiIC0geTsKKworICAgICpyID0geTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogRmFzdCBNb250Z29tZXJ5IGluaXRpYWxpemF0aW9uICh0aGFua3MgdG8gVG9tIFN0IERlbmlzKQorICovCitzdGF0aWMgdm9pZCBtcGlfbW9udGdfaW5pdCggbWJlZHRsc19tcGlfdWludCAqbW0sIGNvbnN0IG1iZWR0bHNfbXBpICpOICkKK3sKKyAgICBtYmVkdGxzX21waV91aW50IHgsIG0wID0gTi0+cFswXTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHggID0gbTA7CisgICAgeCArPSAoICggbTAgKyAyICkgJiA0ICkgPDwgMTsKKworICAgIGZvciggaSA9IGJpTDsgaSA+PSA4OyBpIC89IDIgKQorICAgICAgICB4ICo9ICggMiAtICggbTAgKiB4ICkgKTsKKworICAgICptbSA9IH54ICsgMTsKK30KKworLyoKKyAqIE1vbnRnb21lcnkgbXVsdGlwbGljYXRpb246IEEgPSBBICogQiAqIFJeLTEgbW9kIE4gIChIQUMgMTQuMzYpCisgKi8KK3N0YXRpYyBpbnQgbXBpX21vbnRtdWwoIG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqQiwgY29uc3QgbWJlZHRsc19tcGkgKk4sIG1iZWR0bHNfbXBpX3VpbnQgbW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKlQgKQoreworICAgIHNpemVfdCBpLCBuLCBtOworICAgIG1iZWR0bHNfbXBpX3VpbnQgdTAsIHUxLCAqZDsKKworICAgIGlmKCBULT5uIDwgTi0+biArIDEgfHwgVC0+cCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1lbXNldCggVC0+cCwgMCwgVC0+biAqIGNpTCApOworCisgICAgZCA9IFQtPnA7CisgICAgbiA9IE4tPm47CisgICAgbSA9ICggQi0+biA8IG4gKSA/IEItPm4gOiBuOworCisgICAgZm9yKCBpID0gMDsgaSA8IG47IGkrKyApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBUID0gKFQgKyB1MCpCICsgdTEqTikgLyAyXmJpTAorICAgICAgICAgKi8KKyAgICAgICAgdTAgPSBBLT5wW2ldOworICAgICAgICB1MSA9ICggZFswXSArIHUwICogQi0+cFswXSApICogbW07CisKKyAgICAgICAgbXBpX211bF9obHAoIG0sIEItPnAsIGQsIHUwICk7CisgICAgICAgIG1waV9tdWxfaGxwKCBuLCBOLT5wLCBkLCB1MSApOworCisgICAgICAgICpkKysgPSB1MDsgZFtuICsgMV0gPSAwOworICAgIH0KKworICAgIG1lbWNweSggQS0+cCwgZCwgKCBuICsgMSApICogY2lMICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2FicyggQSwgTiApID49IDAgKQorICAgICAgICBtcGlfc3ViX2hscCggbiwgTi0+cCwgQS0+cCApOworICAgIGVsc2UKKyAgICAgICAgLyogcHJldmVudCB0aW1pbmcgYXR0YWNrcyAqLworICAgICAgICBtcGlfc3ViX2hscCggbiwgQS0+cCwgVC0+cCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBNb250Z29tZXJ5IHJlZHVjdGlvbjogQSA9IEEgKiBSXi0xIG1vZCBOCisgKi8KK3N0YXRpYyBpbnQgbXBpX21vbnRyZWQoIG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqTiwgbWJlZHRsc19tcGlfdWludCBtbSwgY29uc3QgbWJlZHRsc19tcGkgKlQgKQoreworICAgIG1iZWR0bHNfbXBpX3VpbnQgeiA9IDE7CisgICAgbWJlZHRsc19tcGkgVTsKKworICAgIFUubiA9IFUucyA9IChpbnQpIHo7CisgICAgVS5wID0gJno7CisKKyAgICByZXR1cm4oIG1waV9tb250bXVsKCBBLCAmVSwgTiwgbW0sIFQgKSApOworfQorCisvKgorICogU2xpZGluZy13aW5kb3cgZXhwb25lbnRpYXRpb246IFggPSBBXkUgbW9kIE4gIChIQUMgMTQuODUpCisgKi8KK2ludCBtYmVkdGxzX21waV9leHBfbW9kKCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpFLCBjb25zdCBtYmVkdGxzX21waSAqTiwgbWJlZHRsc19tcGkgKl9SUiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3Qgd2JpdHMsIHdzaXplLCBvbmUgPSAxOworICAgIHNpemVfdCBpLCBqLCBuYmxpbWJzOworICAgIHNpemVfdCBidWZzaXplLCBuYml0czsKKyAgICBtYmVkdGxzX21waV91aW50IGVpLCBtbSwgc3RhdGU7CisgICAgbWJlZHRsc19tcGkgUlIsIFQsIFdbIDIgPDwgTUJFRFRMU19NUElfV0lORE9XX1NJWkUgXSwgQXBvczsKKyAgICBpbnQgbmVnOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoIE4sIDAgKSA8IDAgfHwgKCBOLT5wWzBdICYgMSApID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoIEUsIDAgKSA8IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQSApOworCisgICAgLyoKKyAgICAgKiBJbml0IHRlbXBzIGFuZCB3aW5kb3cgc2l6ZQorICAgICAqLworICAgIG1waV9tb250Z19pbml0KCAmbW0sIE4gKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUlIgKTsgbWJlZHRsc19tcGlfaW5pdCggJlQgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmQXBvcyApOworICAgIG1lbXNldCggVywgMCwgc2l6ZW9mKCBXICkgKTsKKworICAgIGkgPSBtYmVkdGxzX21waV9iaXRsZW4oIEUgKTsKKworICAgIHdzaXplID0gKCBpID4gNjcxICkgPyA2IDogKCBpID4gMjM5ICkgPyA1IDoKKyAgICAgICAgICAgICggaSA+ICA3OSApID8gNCA6ICggaSA+ICAyMyApID8gMyA6IDE7CisKKyAgICBpZiggd3NpemUgPiBNQkVEVExTX01QSV9XSU5ET1dfU0laRSApCisgICAgICAgIHdzaXplID0gTUJFRFRMU19NUElfV0lORE9XX1NJWkU7CisKKyAgICBqID0gTi0+biArIDE7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCBYLCBqICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coICZXWzFdLCAgaiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCAmVCwgaiAqIDIgKSApOworCisgICAgLyoKKyAgICAgKiBDb21wZW5zYXRlIGZvciBuZWdhdGl2ZSBBIChhbmQgY29ycmVjdCBhdCB0aGUgZW5kKQorICAgICAqLworICAgIG5lZyA9ICggQS0+cyA9PSAtMSApOworICAgIGlmKCBuZWcgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmQXBvcywgQSApICk7CisgICAgICAgIEFwb3MucyA9IDE7CisgICAgICAgIEEgPSAmQXBvczsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIDFzdCBjYWxsLCBwcmUtY29tcHV0ZSBSXjIgbW9kIE4KKyAgICAgKi8KKyAgICBpZiggX1JSID09IE5VTEwgfHwgX1JSLT5wID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmUlIsIDEgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X2woICZSUiwgTi0+biAqIDIgKiBiaUwgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZSUiwgJlJSLCBOICkgKTsKKworICAgICAgICBpZiggX1JSICE9IE5VTEwgKQorICAgICAgICAgICAgbWVtY3B5KCBfUlIsICZSUiwgc2l6ZW9mKCBtYmVkdGxzX21waSApICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbWVtY3B5KCAmUlIsIF9SUiwgc2l6ZW9mKCBtYmVkdGxzX21waSApICk7CisKKyAgICAvKgorICAgICAqIFdbMV0gPSBBICogUl4yICogUl4tMSBtb2QgTiA9IEEgKiBSIG1vZCBOCisgICAgICovCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9tcGkoIEEsIE4gKSA+PSAwICkKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmV1sxXSwgQSwgTiApICk7CisgICAgZWxzZQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZXWzFdLCBBICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbXBpX21vbnRtdWwoICZXWzFdLCAmUlIsIE4sIG1tLCAmVCApICk7CisKKyAgICAvKgorICAgICAqIFggPSBSXjIgKiBSXi0xIG1vZCBOID0gUiBtb2QgTgorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggWCwgJlJSICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1waV9tb250cmVkKCBYLCBOLCBtbSwgJlQgKSApOworCisgICAgaWYoIHdzaXplID4gMSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBXWzEgPDwgKHdzaXplIC0gMSldID0gV1sxXSBeICh3c2l6ZSAtIDEpCisgICAgICAgICAqLworICAgICAgICBqID0gIG9uZSA8PCAoIHdzaXplIC0gMSApOworCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggJldbal0sIE4tPm4gKyAxICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmV1tqXSwgJldbMV0gICAgKSApOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCB3c2l6ZSAtIDE7IGkrKyApCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1waV9tb250bXVsKCAmV1tqXSwgJldbal0sIE4sIG1tLCAmVCApICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogV1tpXSA9IFdbaSAtIDFdICogV1sxXQorICAgICAgICAgKi8KKyAgICAgICAgZm9yKCBpID0gaiArIDE7IGkgPCAoIG9uZSA8PCB3c2l6ZSApOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coICZXW2ldLCBOLT5uICsgMSApICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZXW2ldLCAmV1tpIC0gMV0gKSApOworCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1waV9tb250bXVsKCAmV1tpXSwgJldbMV0sIE4sIG1tLCAmVCApICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBuYmxpbWJzID0gRS0+bjsKKyAgICBidWZzaXplID0gMDsKKyAgICBuYml0cyAgID0gMDsKKyAgICB3Yml0cyAgID0gMDsKKyAgICBzdGF0ZSAgID0gMDsKKworICAgIHdoaWxlKCAxICkKKyAgICB7CisgICAgICAgIGlmKCBidWZzaXplID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggbmJsaW1icyA9PSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgbmJsaW1icy0tOworCisgICAgICAgICAgICBidWZzaXplID0gc2l6ZW9mKCBtYmVkdGxzX21waV91aW50ICkgPDwgMzsKKyAgICAgICAgfQorCisgICAgICAgIGJ1ZnNpemUtLTsKKworICAgICAgICBlaSA9IChFLT5wW25ibGltYnNdID4+IGJ1ZnNpemUpICYgMTsKKworICAgICAgICAvKgorICAgICAgICAgKiBza2lwIGxlYWRpbmcgMHMKKyAgICAgICAgICovCisgICAgICAgIGlmKCBlaSA9PSAwICYmIHN0YXRlID09IDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYoIGVpID09IDAgJiYgc3RhdGUgPT0gMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBvdXQgb2Ygd2luZG93LCBzcXVhcmUgWAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1waV9tb250bXVsKCBYLCBYLCBOLCBtbSwgJlQgKSApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBhZGQgZWkgdG8gY3VycmVudCB3aW5kb3cKKyAgICAgICAgICovCisgICAgICAgIHN0YXRlID0gMjsKKworICAgICAgICBuYml0cysrOworICAgICAgICB3Yml0cyB8PSAoIGVpIDw8ICggd3NpemUgLSBuYml0cyApICk7CisKKyAgICAgICAgaWYoIG5iaXRzID09IHdzaXplICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFggPSBYXndzaXplIFJeLTEgbW9kIE4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IHdzaXplOyBpKysgKQorICAgICAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbXBpX21vbnRtdWwoIFgsIFgsIE4sIG1tLCAmVCApICk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBYID0gWCAqIFdbd2JpdHNdIFJeLTEgbW9kIE4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtcGlfbW9udG11bCggWCwgJldbd2JpdHNdLCBOLCBtbSwgJlQgKSApOworCisgICAgICAgICAgICBzdGF0ZS0tOworICAgICAgICAgICAgbmJpdHMgPSAwOworICAgICAgICAgICAgd2JpdHMgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBwcm9jZXNzIHRoZSByZW1haW5pbmcgYml0cworICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCBuYml0czsgaSsrICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbXBpX21vbnRtdWwoIFgsIFgsIE4sIG1tLCAmVCApICk7CisKKyAgICAgICAgd2JpdHMgPDw9IDE7CisKKyAgICAgICAgaWYoICggd2JpdHMgJiAoIG9uZSA8PCB3c2l6ZSApICkgIT0gMCApCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1waV9tb250bXVsKCBYLCAmV1sxXSwgTiwgbW0sICZUICkgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFggPSBBXkUgKiBSICogUl4tMSBtb2QgTiA9IEFeRSBtb2QgTgorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbXBpX21vbnRyZWQoIFgsIE4sIG1tLCAmVCApICk7CisKKyAgICBpZiggbmVnICkKKyAgICB7CisgICAgICAgIFgtPnMgPSAtMTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCBYLCBOLCBYICkgKTsKKyAgICB9CisKK2NsZWFudXA6CisKKyAgICBmb3IoIGkgPSAoIG9uZSA8PCAoIHdzaXplIC0gMSApICk7IGkgPCAoIG9uZSA8PCB3c2l6ZSApOyBpKysgKQorICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmV1tpXSApOworCisgICAgbWJlZHRsc19tcGlfZnJlZSggJldbMV0gKTsgbWJlZHRsc19tcGlfZnJlZSggJlQgKTsgbWJlZHRsc19tcGlfZnJlZSggJkFwb3MgKTsKKworICAgIGlmKCBfUlIgPT0gTlVMTCB8fCBfUlItPnAgPT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZSUiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yOiBHID0gZ2NkKEEsIEIpICAoSEFDIDE0LjU0KQorICovCitpbnQgbWJlZHRsc19tcGlfZ2NkKCBtYmVkdGxzX21waSAqRywgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpCICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBseiwgbHp0OworICAgIG1iZWR0bHNfbXBpIFRHLCBUQSwgVEI7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmVEcgKTsgbWJlZHRsc19tcGlfaW5pdCggJlRBICk7IG1iZWR0bHNfbXBpX2luaXQoICZUQiApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmVEEsIEEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlRCLCBCICkgKTsKKworICAgIGx6ID0gbWJlZHRsc19tcGlfbHNiKCAmVEEgKTsKKyAgICBsenQgPSBtYmVkdGxzX21waV9sc2IoICZUQiApOworCisgICAgaWYoIGx6dCA8IGx6ICkKKyAgICAgICAgbHogPSBsenQ7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZUQSwgbHogKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlRCLCBseiApICk7CisKKyAgICBUQS5zID0gVEIucyA9IDE7CisKKyAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX2ludCggJlRBLCAwICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZUQSwgbWJlZHRsc19tcGlfbHNiKCAmVEEgKSApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlRCLCBtYmVkdGxzX21waV9sc2IoICZUQiApICkgKTsKKworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJlRBLCAmVEIgKSA+PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfYWJzKCAmVEEsICZUQSwgJlRCICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlRBLCAxICkgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2FicyggJlRCLCAmVEIsICZUQSApICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZUQiwgMSApICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X2woICZUQiwgbHogKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggRywgJlRCICkgKTsKKworY2xlYW51cDoKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZURyApOyBtYmVkdGxzX21waV9mcmVlKCAmVEEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlRCICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogRmlsbCBYIHdpdGggc2l6ZSBieXRlcyBvZiByYW5kb20uCisgKgorICogVXNlIGEgdGVtcG9yYXJ5IGJ5dGVzIHJlcHJlc2VudGF0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lCisgKiByZWdhcmRsZXNzIG9mIHRoZSBwbGF0Zm9ybSBlbmRpYW5uZXNzICh1c2VmdWwgd2hlbiBmX3JuZyBpcyBhY3R1YWxseQorICogZGV0ZXJtaW5pc3RpYywgZWcgZm9yIHRlc3RzKS4KKyAqLworaW50IG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tKCBtYmVkdGxzX21waSAqWCwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRV07CisKKyAgICBpZiggc2l6ZSA+IE1CRURUTFNfTVBJX01BWF9TSVpFICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggZl9ybmcoIHBfcm5nLCBidWYsIHNpemUgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoIFgsIGJ1Ziwgc2l6ZSApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIE1vZHVsYXIgaW52ZXJzZTogWCA9IEFeLTEgbW9kIE4gIChIQUMgMTQuNjEgLyAxNC42NCkKKyAqLworaW50IG1iZWR0bHNfbXBpX2ludl9tb2QoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKk4gKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgRywgVEEsIFRVLCBVMSwgVTIsIFRCLCBUViwgVjEsIFYyOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoIE4sIDAgKSA8PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZUQSApOyBtYmVkdGxzX21waV9pbml0KCAmVFUgKTsgbWJlZHRsc19tcGlfaW5pdCggJlUxICk7IG1iZWR0bHNfbXBpX2luaXQoICZVMiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZHICk7IG1iZWR0bHNfbXBpX2luaXQoICZUQiApOyBtYmVkdGxzX21waV9pbml0KCAmVFYgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmVjEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlYyICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2djZCggJkcsIEEsIE4gKSApOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZHLCAxICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEU7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZUQSwgQSwgTiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmVFUsICZUQSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmVEIsIE4gKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlRWLCBOICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJlUxLCAxICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZVMiwgMCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmVjEsIDAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJlYyLCAxICkgKTsKKworICAgIGRvCisgICAgeworICAgICAgICB3aGlsZSggKCBUVS5wWzBdICYgMSApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZUVSwgMSApICk7CisKKyAgICAgICAgICAgIGlmKCAoIFUxLnBbMF0gJiAxICkgIT0gMCB8fCAoIFUyLnBbMF0gJiAxICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmVTEsICZVMSwgJlRCICkgKTsKKyAgICAgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZVMiwgJlUyLCAmVEEgKSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZVMSwgMSApICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZVMiwgMSApICk7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSggKCBUVi5wWzBdICYgMSApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZUViwgMSApICk7CisKKyAgICAgICAgICAgIGlmKCAoIFYxLnBbMF0gJiAxICkgIT0gMCB8fCAoIFYyLnBbMF0gJiAxICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmVjEsICZWMSwgJlRCICkgKTsKKyAgICAgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZWMiwgJlYyLCAmVEEgKSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZWMSwgMSApICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZWMiwgMSApICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJlRVLCAmVFYgKSA+PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmVFUsICZUVSwgJlRWICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlUxLCAmVTEsICZWMSApICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZVMiwgJlUyLCAmVjIgKSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmVFYsICZUViwgJlRVICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlYxLCAmVjEsICZVMSApICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZWMiwgJlYyLCAmVTIgKSApOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfaW50KCAmVFUsIDAgKSAhPSAwICk7CisKKyAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX2ludCggJlYxLCAwICkgPCAwICkKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmVjEsICZWMSwgTiApICk7CisKKyAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX21waSggJlYxLCBOICkgPj0gMCApCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlYxLCAmVjEsIE4gKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCBYLCAmVjEgKSApOworCitjbGVhbnVwOgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJlRBICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZUVSApOyBtYmVkdGxzX21waV9mcmVlKCAmVTEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlUyICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJkcgKTsgbWJlZHRsc19tcGlfZnJlZSggJlRCICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZUViApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZWMSApOyBtYmVkdGxzX21waV9mcmVlKCAmVjIgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0VOUFJJTUUpCisKK3N0YXRpYyBjb25zdCBpbnQgc21hbGxfcHJpbWVbXSA9Cit7CisgICAgICAgIDMsICAgIDUsICAgIDcsICAgMTEsICAgMTMsICAgMTcsICAgMTksICAgMjMsCisgICAgICAgMjksICAgMzEsICAgMzcsICAgNDEsICAgNDMsICAgNDcsICAgNTMsICAgNTksCisgICAgICAgNjEsICAgNjcsICAgNzEsICAgNzMsICAgNzksICAgODMsICAgODksICAgOTcsCisgICAgICAxMDEsICAxMDMsICAxMDcsICAxMDksICAxMTMsICAxMjcsICAxMzEsICAxMzcsCisgICAgICAxMzksICAxNDksICAxNTEsICAxNTcsICAxNjMsICAxNjcsICAxNzMsICAxNzksCisgICAgICAxODEsICAxOTEsICAxOTMsICAxOTcsICAxOTksICAyMTEsICAyMjMsICAyMjcsCisgICAgICAyMjksICAyMzMsICAyMzksICAyNDEsICAyNTEsICAyNTcsICAyNjMsICAyNjksCisgICAgICAyNzEsICAyNzcsICAyODEsICAyODMsICAyOTMsICAzMDcsICAzMTEsICAzMTMsCisgICAgICAzMTcsICAzMzEsICAzMzcsICAzNDcsICAzNDksICAzNTMsICAzNTksICAzNjcsCisgICAgICAzNzMsICAzNzksICAzODMsICAzODksICAzOTcsICA0MDEsICA0MDksICA0MTksCisgICAgICA0MjEsICA0MzEsICA0MzMsICA0MzksICA0NDMsICA0NDksICA0NTcsICA0NjEsCisgICAgICA0NjMsICA0NjcsICA0NzksICA0ODcsICA0OTEsICA0OTksICA1MDMsICA1MDksCisgICAgICA1MjEsICA1MjMsICA1NDEsICA1NDcsICA1NTcsICA1NjMsICA1NjksICA1NzEsCisgICAgICA1NzcsICA1ODcsICA1OTMsICA1OTksICA2MDEsICA2MDcsICA2MTMsICA2MTcsCisgICAgICA2MTksICA2MzEsICA2NDEsICA2NDMsICA2NDcsICA2NTMsICA2NTksICA2NjEsCisgICAgICA2NzMsICA2NzcsICA2ODMsICA2OTEsICA3MDEsICA3MDksICA3MTksICA3MjcsCisgICAgICA3MzMsICA3MzksICA3NDMsICA3NTEsICA3NTcsICA3NjEsICA3NjksICA3NzMsCisgICAgICA3ODcsICA3OTcsICA4MDksICA4MTEsICA4MjEsICA4MjMsICA4MjcsICA4MjksCisgICAgICA4MzksICA4NTMsICA4NTcsICA4NTksICA4NjMsICA4NzcsICA4ODEsICA4ODMsCisgICAgICA4ODcsICA5MDcsICA5MTEsICA5MTksICA5MjksICA5MzcsICA5NDEsICA5NDcsCisgICAgICA5NTMsICA5NjcsICA5NzEsICA5NzcsICA5ODMsICA5OTEsICA5OTcsIC0xMDMKK307CisKKy8qCisgKiBTbWFsbCBkaXZpc29ycyB0ZXN0IChYIG11c3QgYmUgcG9zaXRpdmUpCisgKgorICogUmV0dXJuIHZhbHVlczoKKyAqIDA6IG5vIHNtYWxsIGZhY3RvciAocG9zc2libGUgcHJpbWUsIG1vcmUgdGVzdHMgbmVlZGVkKQorICogMTogY2VydGFpbiBwcmltZQorICogTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFOiBjZXJ0YWluIG5vbi1wcmltZQorICogb3RoZXIgbmVnYXRpdmU6IGVycm9yCisgKi8KK3N0YXRpYyBpbnQgbXBpX2NoZWNrX3NtYWxsX2ZhY3RvcnMoIGNvbnN0IG1iZWR0bHNfbXBpICpYICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX21waV91aW50IHI7CisKKyAgICBpZiggKCBYLT5wWzBdICYgMSApID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRSApOworCisgICAgZm9yKCBpID0gMDsgc21hbGxfcHJpbWVbaV0gPiAwOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoIFgsIHNtYWxsX3ByaW1lW2ldICkgPD0gMCApCisgICAgICAgICAgICByZXR1cm4oIDEgKTsKKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9pbnQoICZyLCBYLCBzbWFsbF9wcmltZVtpXSApICk7CisKKyAgICAgICAgaWYoIHIgPT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRSApOworICAgIH0KKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogTWlsbGVyLVJhYmluIHBzZXVkby1wcmltYWxpdHkgdGVzdCAgKEhBQyA0LjI0KQorICovCitzdGF0aWMgaW50IG1waV9taWxsZXJfcmFiaW4oIGNvbnN0IG1iZWR0bHNfbXBpICpYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0LCBjb3VudDsKKyAgICBzaXplX3QgaSwgaiwgaywgbiwgczsKKyAgICBtYmVkdGxzX21waSBXLCBSLCBULCBBLCBSUjsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZXICk7IG1iZWR0bHNfbXBpX2luaXQoICZSICk7IG1iZWR0bHNfbXBpX2luaXQoICZUICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlJSICk7CisKKyAgICAvKgorICAgICAqIFcgPSB8WHwgLSAxCisgICAgICogUiA9IFcgPj4gbHNiKCBXICkKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZXLCBYLCAxICkgKTsKKyAgICBzID0gbWJlZHRsc19tcGlfbHNiKCAmVyApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlIsICZXICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZSLCBzICkgKTsKKworICAgIGkgPSBtYmVkdGxzX21waV9iaXRsZW4oIFggKTsKKyAgICAvKgorICAgICAqIEhBQywgdGFibGUgNC40CisgICAgICovCisgICAgbiA9ICggKCBpID49IDEzMDAgKSA/ICAyIDogKCBpID49ICA4NTAgKSA/ICAzIDoKKyAgICAgICAgICAoIGkgPj0gIDY1MCApID8gIDQgOiAoIGkgPj0gIDM1MCApID8gIDggOgorICAgICAgICAgICggaSA+PSAgMjUwICkgPyAxMiA6ICggaSA+PSAgMTUwICkgPyAxOCA6IDI3ICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgbjsgaSsrICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIHBpY2sgYSByYW5kb20gQSwgMSA8IEEgPCB8WHwgLSAxCisgICAgICAgICAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tKCAmQSwgWC0+biAqIGNpTCwgZl9ybmcsIHBfcm5nICkgKTsKKworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJkEsICZXICkgPj0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGogPSBtYmVkdGxzX21waV9iaXRsZW4oICZBICkgLSBtYmVkdGxzX21waV9iaXRsZW4oICZXICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZBLCBqICsgMSApICk7CisgICAgICAgIH0KKyAgICAgICAgQS5wWzBdIHw9IDM7CisKKyAgICAgICAgY291bnQgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tKCAmQSwgWC0+biAqIGNpTCwgZl9ybmcsIHBfcm5nICkgKTsKKworICAgICAgICAgICAgaiA9IG1iZWR0bHNfbXBpX2JpdGxlbiggJkEgKTsKKyAgICAgICAgICAgIGsgPSBtYmVkdGxzX21waV9iaXRsZW4oICZXICk7CisgICAgICAgICAgICBpZiAoaiA+IGspIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZBLCBqIC0gayApICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb3VudCsrID4gMzApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gd2hpbGUgKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmQSwgJlcgKSA+PSAwIHx8CisgICAgICAgICAgICAgICAgICBtYmVkdGxzX21waV9jbXBfaW50KCAmQSwgMSApICA8PSAwICAgICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQSA9IEFeUiBtb2QgfFh8CisgICAgICAgICAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2V4cF9tb2QoICZBLCAmQSwgJlIsIFgsICZSUiApICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZBLCAmVyApID09IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZBLCAgMSApID09IDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaiA9IDE7CisgICAgICAgIHdoaWxlKCBqIDwgcyAmJiBtYmVkdGxzX21waV9jbXBfbXBpKCAmQSwgJlcgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEEgPSBBICogQSBtb2QgfFh8CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlQsICZBLCAmQSApICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZBLCAmVCwgWCAgKSApOworCisgICAgICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJkEsIDEgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaisrOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90IHByaW1lIGlmIEEgIT0gfFh8IC0gMSBvciBBID09IDEKKyAgICAgICAgICovCisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmQSwgJlcgKSAhPSAwIHx8CisgICAgICAgICAgICBtYmVkdGxzX21waV9jbXBfaW50KCAmQSwgIDEgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlcgKTsgbWJlZHRsc19tcGlfZnJlZSggJlIgKTsgbWJlZHRsc19tcGlfZnJlZSggJlQgKTsgbWJlZHRsc19tcGlfZnJlZSggJkEgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUlIgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBQc2V1ZG8tcHJpbWFsaXR5IHRlc3Q6IHNtYWxsIGZhY3RvcnMsIHRoZW4gTWlsbGVyLVJhYmluCisgKi8KK2ludCBtYmVkdGxzX21waV9pc19wcmltZSggY29uc3QgbWJlZHRsc19tcGkgKlgsCisgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waSBYWDsKKworICAgIFhYLnMgPSAxOworICAgIFhYLm4gPSBYLT5uOworICAgIFhYLnAgPSBYLT5wOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZYWCwgMCApID09IDAgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX2ludCggJlhYLCAxICkgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJlhYLCAyICkgPT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoICggcmV0ID0gbXBpX2NoZWNrX3NtYWxsX2ZhY3RvcnMoICZYWCApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ID09IDEgKQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIG1waV9taWxsZXJfcmFiaW4oICZYWCwgZl9ybmcsIHBfcm5nICkgKTsKK30KKworLyoKKyAqIFByaW1lIG51bWJlciBnZW5lcmF0aW9uCisgKi8KK2ludCBtYmVkdGxzX21waV9nZW5fcHJpbWUoIG1iZWR0bHNfbXBpICpYLCBzaXplX3QgbmJpdHMsIGludCBkaF9mbGFnLAorICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaywgbjsKKyAgICBtYmVkdGxzX21waV91aW50IHI7CisgICAgbWJlZHRsc19tcGkgWTsKKworICAgIGlmKCBuYml0cyA8IDMgfHwgbmJpdHMgPiBNQkVEVExTX01QSV9NQVhfQklUUyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWSApOworCisgICAgbiA9IEJJVFNfVE9fTElNQlMoIG5iaXRzICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tKCBYLCBuICogY2lMLCBmX3JuZywgcF9ybmcgKSApOworCisgICAgayA9IG1iZWR0bHNfbXBpX2JpdGxlbiggWCApOworICAgIGlmKCBrID4gbmJpdHMgKSBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoIFgsIGsgLSBuYml0cyArIDEgKSApOworCisgICAgbWJlZHRsc19tcGlfc2V0X2JpdCggWCwgbmJpdHMtMSwgMSApOworCisgICAgWC0+cFswXSB8PSAxOworCisgICAgaWYoIGRoX2ZsYWcgPT0gMCApCisgICAgeworICAgICAgICB3aGlsZSggKCByZXQgPSBtYmVkdGxzX21waV9pc19wcmltZSggWCwgZl9ybmcsIHBfcm5nICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUgKQorICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfaW50KCBYLCBYLCAyICkgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBBbiBuZWNlc3NhcnkgY29uZGl0aW9uIGZvciBZIGFuZCBYID0gMlkgKyAxIHRvIGJlIHByaW1lCisgICAgICAgICAqIGlzIFggPSAyIG1vZCAzICh3aGljaCBpcyBlcXVpdmFsZW50IHRvIFkgPSAyIG1vZCAzKS4KKyAgICAgICAgICogTWFrZSBzdXJlIGl0IGlzIHNhdGlzZmllZCwgd2hpbGUga2VlcGluZyBYID0gMyBtb2QgNAorICAgICAgICAgKi8KKworICAgICAgICBYLT5wWzBdIHw9IDI7CisKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfaW50KCAmciwgWCwgMyApICk7CisgICAgICAgIGlmKCByID09IDAgKQorICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfaW50KCBYLCBYLCA4ICkgKTsKKyAgICAgICAgZWxzZSBpZiggciA9PSAxICkKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX2ludCggWCwgWCwgNCApICk7CisKKyAgICAgICAgLyogU2V0IFkgPSAoWC0xKSAvIDIsIHdoaWNoIGlzIFggLyAyIGJlY2F1c2UgWCBpcyBvZGQgKi8KKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmWSwgWCApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlksIDEgKSApOworCisgICAgICAgIHdoaWxlKCAxICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEZpcnN0LCBjaGVjayBzbWFsbCBmYWN0b3JzIGZvciBYIGFuZCBZCisgICAgICAgICAgICAgKiBiZWZvcmUgZG9pbmcgTWlsbGVyLVJhYmluIG9uIGFueSBvZiB0aGVtCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1waV9jaGVja19zbWFsbF9mYWN0b3JzKCAgWCAgICAgICAgICkgKSA9PSAwICYmCisgICAgICAgICAgICAgICAgKCByZXQgPSBtcGlfY2hlY2tfc21hbGxfZmFjdG9ycyggJlkgICAgICAgICApICkgPT0gMCAmJgorICAgICAgICAgICAgICAgICggcmV0ID0gbXBpX21pbGxlcl9yYWJpbiggIFgsIGZfcm5nLCBwX3JuZyAgKSApID09IDAgJiYKKyAgICAgICAgICAgICAgICAoIHJldCA9IG1waV9taWxsZXJfcmFiaW4oICZZLCBmX3JuZywgcF9ybmcgICkgKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUgKQorICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIE5leHQgY2FuZGlkYXRlcy4gV2Ugd2FudCB0byBwcmVzZXJ2ZSBZID0gKFgtMSkgLyAyIGFuZAorICAgICAgICAgICAgICogWSA9IDEgbW9kIDIgYW5kIFkgPSAyIG1vZCAzIChlcSBYID0gMyBtb2QgNCBhbmQgWCA9IDIgbW9kIDMpCisgICAgICAgICAgICAgKiBzbyB1cCBZIGJ5IDYgYW5kIFggYnkgMTIuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX2ludCggIFgsICBYLCAxMiApICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9pbnQoICZZLCAmWSwgNiAgKSApOworICAgICAgICB9CisgICAgfQorCitjbGVhbnVwOgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX0dFTlBSSU1FICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorCisjZGVmaW5lIEdDRF9QQUlSX0NPVU5UICAzCisKK3N0YXRpYyBjb25zdCBpbnQgZ2NkX3BhaXJzW0dDRF9QQUlSX0NPVU5UXVszXSA9Cit7CisgICAgeyA2OTMsIDYwOSwgMjEgfSwKKyAgICB7IDE3NjQsIDg2OCwgMjggfSwKKyAgICB7IDc2ODQ1NDkyMywgNTQyMTY3ODE0LCAxIH0KK307CisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfbXBpX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCByZXQsIGk7CisgICAgbWJlZHRsc19tcGkgQSwgRSwgTiwgWCwgWSwgVSwgVjsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZBICk7IG1iZWR0bHNfbXBpX2luaXQoICZFICk7IG1iZWR0bHNfbXBpX2luaXQoICZOICk7IG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsgbWJlZHRsc19tcGlfaW5pdCggJlUgKTsgbWJlZHRsc19tcGlfaW5pdCggJlYgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCAxNiwKKyAgICAgICAgIkVGRTAyMUMyNjQ1RkQxREM1ODZFNjkxODRBRjRBMzFFIiBcCisgICAgICAgICJENUY1M0U5M0I1RjEyM0ZBNDE2ODA4NjdCQTExMDEzMSIgXAorICAgICAgICAiOTQ0RkU3OTUyRTI1MTczMzc3ODBDQjBEQjgwRTYxQUEiIFwKKyAgICAgICAgIkU3QzhEREM2QzVDNkFBREVCMzRFQjM4QTJGNDBENUU2IiApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmRSwgMTYsCisgICAgICAgICJCMkU3RUZEMzcwNzVCOUYwM0ZGOTg5QzdDNTA1MUMyMCIgXAorICAgICAgICAiMzREMkEzMjM4MTAyNTExMjdFN0JGODYyNUE0RjQ5QTUiIFwKKyAgICAgICAgIkYzRTI3RjREQThCRDU5QzQ3RDZEQUFCQTRDODEyN0JEIiBcCisgICAgICAgICI1QjVDMjU3NjMyMjJGRUZDQ0ZDMzhCODMyMzY2QzI5RSIgKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJk4sIDE2LAorICAgICAgICAiMDA2NkExOTgxODZDMThDMTBCMkY1RUQ5QjUyMjc1MkEiIFwKKyAgICAgICAgIjk4MzBCNjk5MTZFNTM1QzhGMDQ3NTE4QTg4OUE0M0E1IiBcCisgICAgICAgICI5NEI2QkVEMjdBMTY4RDMxRDRBNTJGODg5MjVBQThGNSIgKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmWCwgJkEsICZOICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZVLCAxNiwKKyAgICAgICAgIjYwMkFCN0VDQTU5N0EzRDZCNTZGRjk4MjlBNUU4Qjg1IiBcCisgICAgICAgICI5RTg1N0VBOTVBMDM1MTJFMkJBRTczOTE2ODhEMjY0QSIgXAorICAgICAgICAiQTU2NjNCMDM0MURCOUNDRkQyQzRDNUY0MjFGRUM4MTQiIFwKKyAgICAgICAgIjgwMDFCNzJFODQ4QTM4Q0FFMUM2NUY3OEU1NkFCREVGIiBcCisgICAgICAgICJFMTJEM0MwMzlCOEEwMkQ2QkU1OTNGMEJCQkRBNTZGMSIgXAorICAgICAgICAiRUNGNjc3MTUyRUY4MDQzNzBDMUEzMDVDQUYzQjVCRjEiIFwKKyAgICAgICAgIjMwODc5QjU2QzYxREU1ODRBMEY1M0EyNDQ3QTUxRSIgKSApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBNUEkgdGVzdCAjMSAobXVsX21waSk6ICIgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJlUgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICByZXQgPSAxOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2Rpdl9tcGkoICZYLCAmWSwgJkEsICZOICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZVLCAxNiwKKyAgICAgICAgIjI1NjU2NzMzNjA1OUU1MkNBRTIyOTI1NDc0NzA1RjM5QTk0IiApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmViwgMTYsCisgICAgICAgICI2NjEzRjI2MTYyMjIzREY0ODhFOUNENDhDQzEzMkM3QSIgXAorICAgICAgICAiMEFDOTNDNzAxQjAwMUIwOTJFNEU1QjlGNzNCQ0QyN0IiIFwKKyAgICAgICAgIjlFRTUwRDA2NTdDNzdGMzc0RTkwM0NERkE0QzY0MiIgKSApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBNUEkgdGVzdCAjMiAoZGl2X21waSk6ICIgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJlUgKSAhPSAwIHx8CisgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZZLCAmViApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldCA9IDE7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJlgsICZBLCAmRSwgJk4sIE5VTEwgKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlUsIDE2LAorICAgICAgICAiMzZFMTM5QUVBNTUyMTU2MDlEMjgxNjk5OEVEMDIwQkIiIFwKKyAgICAgICAgIkJEOTZDMzc4OTBGNjUxNzFEOTQ4RTlCQzdDQkFBNEQ5IiBcCisgICAgICAgICIzMjVEMjRENkEzQzEyNzEwRjEwQTA5RkEwOEFCODciICkgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgTVBJIHRlc3QgIzMgKGV4cF9tb2QpOiAiICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZVICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmWCwgJkEsICZOICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZVLCAxNiwKKyAgICAgICAgIjAwM0EwQUFFREQ3RTc4NEZDMDdEOEY5RUM2RTNCRkQ1IiBcCisgICAgICAgICJDM0RCQTc2NDU2MzYzQTEwODY5NjIyRUFDMkREODRFQyIgXAorICAgICAgICAiQzVCOEE3NERBQzREMDlFMDNCNUUwQkU3NzlGMkRGNjEiICkgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgTVBJIHRlc3QgIzQgKGludl9tb2QpOiAiICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZVICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBNUEkgdGVzdCAjNSAoc2ltcGxlIGdjZCk6ICIgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBHQ0RfUEFJUl9DT1VOVDsgaSsrICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJlgsIGdjZF9wYWlyc1tpXVswXSApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJlksIGdjZF9wYWlyc1tpXVsxXSApICk7CisKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9nY2QoICZBLCAmWCwgJlkgKSApOworCisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmQSwgZ2NkX3BhaXJzW2ldWzJdICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkIGF0ICVkXG4iLCBpICk7CisKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworY2xlYW51cDoKKworICAgIGlmKCByZXQgIT0gMCAmJiB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlVuZXhwZWN0ZWQgZXJyb3IsIHJldHVybiBjb2RlID0gJTA4WFxuIiwgcmV0ICk7CisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmQSApOyBtYmVkdGxzX21waV9mcmVlKCAmRSApOyBtYmVkdGxzX21waV9mcmVlKCAmTiApOyBtYmVkdGxzX21waV9mcmVlKCAmWCApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZVICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZWICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYmxvd2Zpc2guYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2Jsb3dmaXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAwM2YwZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2Jsb3dmaXNoLmMKQEAgLTAsMCArMSw2NTYgQEAKKy8qCisgKiAgQmxvd2Zpc2ggaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIEJsb3dmaXNoIGJsb2NrIGNpcGhlciB3YXMgZGVzaWduZWQgYnkgQnJ1Y2UgU2NobmVpZXIgaW4gMTk5My4KKyAqICBodHRwOi8vd3d3LnNjaG5laWVyLmNvbS9ibG93ZmlzaC5odG1sCisgKiAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CbG93ZmlzaF8lMjhjaXBoZXIlMjkKKyAqCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CTE9XRklTSF9DKQorCisjaW5jbHVkZSAibWJlZHRscy9ibG93ZmlzaC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JMT1dGSVNIX0FMVCkKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyKil2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiAzMi1iaXQgaW50ZWdlciBtYW5pcHVsYXRpb24gbWFjcm9zIChiaWcgZW5kaWFuKQorICovCisjaWZuZGVmIEdFVF9VSU5UMzJfQkUKKyNkZWZpbmUgR0VUX1VJTlQzMl9CRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKG4pID0gKCAodWludDMyX3QpIChiKVsoaSkgICAgXSA8PCAyNCApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDFdIDw8IDE2ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMl0gPDwgIDggKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAzXSAgICAgICApOyAgICAgICAgICAgIFwKK30KKyNlbmRpZgorCisjaWZuZGVmIFBVVF9VSU5UMzJfQkUKKyNkZWZpbmUgUFVUX1VJTlQzMl9CRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGIpWyhpKSAgICBdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDI0ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgMV0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMTYgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAgOCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDNdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pICAgICAgICk7ICAgICAgIFwKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3QgdWludDMyX3QgUFtNQkVEVExTX0JMT1dGSVNIX1JPVU5EUyArIDJdID0geworICAgICAgICAweDI0M0Y2QTg4TCwgMHg4NUEzMDhEM0wsIDB4MTMxOThBMkVMLCAweDAzNzA3MzQ0TCwKKyAgICAgICAgMHhBNDA5MzgyMkwsIDB4Mjk5RjMxRDBMLCAweDA4MkVGQTk4TCwgMHhFQzRFNkM4OUwsCisgICAgICAgIDB4NDUyODIxRTZMLCAweDM4RDAxMzc3TCwgMHhCRTU0NjZDRkwsIDB4MzRFOTBDNkNMLAorICAgICAgICAweEMwQUMyOUI3TCwgMHhDOTdDNTBEREwsIDB4M0Y4NEQ1QjVMLCAweEI1NDcwOTE3TCwKKyAgICAgICAgMHg5MjE2RDVEOUwsIDB4ODk3OUZCMUJMCit9OworCisvKiBkZWNsYXJhdGlvbnMgb2YgZGF0YSBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSAqLworc3RhdGljIGNvbnN0IHVpbnQzMl90IFNbNF1bMjU2XTsKKworc3RhdGljIHVpbnQzMl90IEYoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4LCB1aW50MzJfdCB4ICkKK3sKKyAgIHVuc2lnbmVkIHNob3J0IGEsIGIsIGMsIGQ7CisgICB1aW50MzJfdCAgeTsKKworICAgZCA9ICh1bnNpZ25lZCBzaG9ydCkoeCAmIDB4RkYpOworICAgeCA+Pj0gODsKKyAgIGMgPSAodW5zaWduZWQgc2hvcnQpKHggJiAweEZGKTsKKyAgIHggPj49IDg7CisgICBiID0gKHVuc2lnbmVkIHNob3J0KSh4ICYgMHhGRik7CisgICB4ID4+PSA4OworICAgYSA9ICh1bnNpZ25lZCBzaG9ydCkoeCAmIDB4RkYpOworICAgeSA9IGN0eC0+U1swXVthXSArIGN0eC0+U1sxXVtiXTsKKyAgIHkgPSB5IF4gY3R4LT5TWzJdW2NdOworICAgeSA9IHkgKyBjdHgtPlNbM11bZF07CisKKyAgIHJldHVybiggeSApOworfQorCitzdGF0aWMgdm9pZCBibG93ZmlzaF9lbmMoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4LCB1aW50MzJfdCAqeGwsIHVpbnQzMl90ICp4ciApCit7CisgICAgdWludDMyX3QgIFhsLCBYciwgdGVtcDsKKyAgICBzaG9ydCBpOworCisgICAgWGwgPSAqeGw7CisgICAgWHIgPSAqeHI7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgTUJFRFRMU19CTE9XRklTSF9ST1VORFM7ICsraSApCisgICAgeworICAgICAgICBYbCA9IFhsIF4gY3R4LT5QW2ldOworICAgICAgICBYciA9IEYoIGN0eCwgWGwgKSBeIFhyOworCisgICAgICAgIHRlbXAgPSBYbDsKKyAgICAgICAgWGwgPSBYcjsKKyAgICAgICAgWHIgPSB0ZW1wOworICAgIH0KKworICAgIHRlbXAgPSBYbDsKKyAgICBYbCA9IFhyOworICAgIFhyID0gdGVtcDsKKworICAgIFhyID0gWHIgXiBjdHgtPlBbTUJFRFRMU19CTE9XRklTSF9ST1VORFNdOworICAgIFhsID0gWGwgXiBjdHgtPlBbTUJFRFRMU19CTE9XRklTSF9ST1VORFMgKyAxXTsKKworICAgICp4bCA9IFhsOworICAgICp4ciA9IFhyOworfQorCitzdGF0aWMgdm9pZCBibG93ZmlzaF9kZWMoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4LCB1aW50MzJfdCAqeGwsIHVpbnQzMl90ICp4ciApCit7CisgICAgdWludDMyX3QgIFhsLCBYciwgdGVtcDsKKyAgICBzaG9ydCBpOworCisgICAgWGwgPSAqeGw7CisgICAgWHIgPSAqeHI7CisKKyAgICBmb3IoIGkgPSBNQkVEVExTX0JMT1dGSVNIX1JPVU5EUyArIDE7IGkgPiAxOyAtLWkgKQorICAgIHsKKyAgICAgICAgWGwgPSBYbCBeIGN0eC0+UFtpXTsKKyAgICAgICAgWHIgPSBGKCBjdHgsIFhsICkgXiBYcjsKKworICAgICAgICB0ZW1wID0gWGw7CisgICAgICAgIFhsID0gWHI7CisgICAgICAgIFhyID0gdGVtcDsKKyAgICB9CisKKyAgICB0ZW1wID0gWGw7CisgICAgWGwgPSBYcjsKKyAgICBYciA9IHRlbXA7CisKKyAgICBYciA9IFhyIF4gY3R4LT5QWzFdOworICAgIFhsID0gWGwgXiBjdHgtPlBbMF07CisKKyAgICAqeGwgPSBYbDsKKyAgICAqeHIgPSBYcjsKK30KKwordm9pZCBtYmVkdGxzX2Jsb3dmaXNoX2luaXQoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfYmxvd2Zpc2hfZnJlZSggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCApICk7Cit9CisKKy8qCisgKiBCbG93ZmlzaCBrZXkgc2NoZWR1bGUKKyAqLworaW50IG1iZWR0bHNfYmxvd2Zpc2hfc2V0a2V5KCBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMgKQoreworICAgIHVuc2lnbmVkIGludCBpLCBqLCBrOworICAgIHVpbnQzMl90IGRhdGEsIGRhdGFsLCBkYXRhcjsKKworICAgIGlmKCBrZXliaXRzIDwgTUJFRFRMU19CTE9XRklTSF9NSU5fS0VZX0JJVFMgfHwga2V5Yml0cyA+IE1CRURUTFNfQkxPV0ZJU0hfTUFYX0tFWV9CSVRTIHx8CisgICAgICAgICgga2V5Yml0cyAlIDggKSApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfS0VZX0xFTkdUSCApOworICAgIH0KKworICAgIGtleWJpdHMgPj49IDM7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgNDsgaSsrICkKKyAgICB7CisgICAgICAgIGZvciggaiA9IDA7IGogPCAyNTY7IGorKyApCisgICAgICAgICAgICBjdHgtPlNbaV1bal0gPSBTW2ldW2pdOworICAgIH0KKworICAgIGogPSAwOworICAgIGZvciggaSA9IDA7IGkgPCBNQkVEVExTX0JMT1dGSVNIX1JPVU5EUyArIDI7ICsraSApCisgICAgeworICAgICAgICBkYXRhID0gMHgwMDAwMDAwMDsKKyAgICAgICAgZm9yKCBrID0gMDsgayA8IDQ7ICsrayApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGEgPSAoIGRhdGEgPDwgOCApIHwga2V5W2orK107CisgICAgICAgICAgICBpZiggaiA+PSBrZXliaXRzICkKKyAgICAgICAgICAgICAgICBqID0gMDsKKyAgICAgICAgfQorICAgICAgICBjdHgtPlBbaV0gPSBQW2ldIF4gZGF0YTsKKyAgICB9CisKKyAgICBkYXRhbCA9IDB4MDAwMDAwMDA7CisgICAgZGF0YXIgPSAweDAwMDAwMDAwOworCisgICAgZm9yKCBpID0gMDsgaSA8IE1CRURUTFNfQkxPV0ZJU0hfUk9VTkRTICsgMjsgaSArPSAyICkKKyAgICB7CisgICAgICAgIGJsb3dmaXNoX2VuYyggY3R4LCAmZGF0YWwsICZkYXRhciApOworICAgICAgICBjdHgtPlBbaV0gPSBkYXRhbDsKKyAgICAgICAgY3R4LT5QW2kgKyAxXSA9IGRhdGFyOworICAgIH0KKworICAgIGZvciggaSA9IDA7IGkgPCA0OyBpKysgKQorICAgIHsKKyAgICAgICBmb3IoIGogPSAwOyBqIDwgMjU2OyBqICs9IDIgKQorICAgICAgIHsKKyAgICAgICAgICAgIGJsb3dmaXNoX2VuYyggY3R4LCAmZGF0YWwsICZkYXRhciApOworICAgICAgICAgICAgY3R4LT5TW2ldW2pdID0gZGF0YWw7CisgICAgICAgICAgICBjdHgtPlNbaV1baiArIDFdID0gZGF0YXI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBCbG93ZmlzaC1FQ0IgYmxvY2sgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2VjYiggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0W01CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkVdICkKK3sKKyAgICB1aW50MzJfdCBYMCwgWDE7CisKKyAgICBHRVRfVUlOVDMyX0JFKCBYMCwgaW5wdXQsICAwICk7CisgICAgR0VUX1VJTlQzMl9CRSggWDEsIGlucHV0LCAgNCApOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19CTE9XRklTSF9ERUNSWVBUICkKKyAgICB7CisgICAgICAgIGJsb3dmaXNoX2RlYyggY3R4LCAmWDAsICZYMSApOworICAgIH0KKyAgICBlbHNlIC8qIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCAqLworICAgIHsKKyAgICAgICAgYmxvd2Zpc2hfZW5jKCBjdHgsICZYMCwgJlgxICk7CisgICAgfQorCisgICAgUFVUX1VJTlQzMl9CRSggWDAsIG91dHB1dCwgIDAgKTsKKyAgICBQVVRfVUlOVDMyX0JFKCBYMSwgb3V0cHV0LCAgNCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorLyoKKyAqIEJsb3dmaXNoLUNCQyBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NiYyggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2W01CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciB0ZW1wW01CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFXTsKKworICAgIGlmKCBsZW5ndGggJSBNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9JTlBVVF9MRU5HVEggKTsKKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfQkxPV0ZJU0hfREVDUllQVCApCisgICAgeworICAgICAgICB3aGlsZSggbGVuZ3RoID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSggdGVtcCwgaW5wdXQsIE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFICk7CisgICAgICAgICAgICBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2VjYiggY3R4LCBtb2RlLCBpbnB1dCwgb3V0cHV0ICk7CisKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCBNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRTtpKysgKQorICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSggb3V0cHV0W2ldIF4gaXZbaV0gKTsKKworICAgICAgICAgICAgbWVtY3B5KCBpdiwgdGVtcCwgTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkUgKTsKKworICAgICAgICAgICAgaW5wdXQgICs9IE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgICAgICAgb3V0cHV0ICs9IE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgICAgICAgbGVuZ3RoIC09IE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGggPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFOyBpKysgKQorICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSggaW5wdXRbaV0gXiBpdltpXSApOworCisgICAgICAgICAgICBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2VjYiggY3R4LCBtb2RlLCBvdXRwdXQsIG91dHB1dCApOworICAgICAgICAgICAgbWVtY3B5KCBpdiwgb3V0cHV0LCBNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRSApOworCisgICAgICAgICAgICBpbnB1dCAgKz0gTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkU7CisgICAgICAgICAgICBvdXRwdXQgKz0gTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkU7CisgICAgICAgICAgICBsZW5ndGggLT0gTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKy8qCisgKiBCbG93ZmlzaCBDRkIgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jZmI2NCggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKml2X29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdltNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCBjOworICAgIHNpemVfdCBuID0gKml2X29mZjsKKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfQkxPV0ZJU0hfREVDUllQVCApCisgICAgeworICAgICAgICB3aGlsZSggbGVuZ3RoLS0gKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggbiA9PSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2VjYiggY3R4LCBNQkVEVExTX0JMT1dGSVNIX0VOQ1JZUFQsIGl2LCBpdiApOworCisgICAgICAgICAgICBjID0gKmlucHV0Kys7CisgICAgICAgICAgICAqb3V0cHV0KysgPSAodW5zaWduZWQgY2hhcikoIGMgXiBpdltuXSApOworICAgICAgICAgICAgaXZbbl0gPSAodW5zaWduZWQgY2hhcikgYzsKKworICAgICAgICAgICAgbiA9ICggbiArIDEgKSAlIE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGgtLSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBuID09IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCBjdHgsIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCwgaXYsIGl2ICk7CisKKyAgICAgICAgICAgIGl2W25dID0gKm91dHB1dCsrID0gKHVuc2lnbmVkIGNoYXIpKCBpdltuXSBeICppbnB1dCsrICk7CisKKyAgICAgICAgICAgIG4gPSAoIG4gKyAxICkgJSBNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRTsKKyAgICAgICAgfQorICAgIH0KKworICAgICppdl9vZmYgPSBuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLypNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKy8qCisgKiBCbG93ZmlzaCBDVFIgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jdHIoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5jX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBub25jZV9jb3VudGVyW01CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBzdHJlYW1fYmxvY2tbTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgYywgaTsKKyAgICBzaXplX3QgbiA9ICpuY19vZmY7CisKKyAgICB3aGlsZSggbGVuZ3RoLS0gKQorICAgIHsKKyAgICAgICAgaWYoIG4gPT0gMCApIHsKKyAgICAgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCBjdHgsIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCwgbm9uY2VfY291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtX2Jsb2NrICk7CisKKyAgICAgICAgICAgIGZvciggaSA9IE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFOyBpID4gMDsgaS0tICkKKyAgICAgICAgICAgICAgICBpZiggKytub25jZV9jb3VudGVyW2kgLSAxXSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYyA9ICppbnB1dCsrOworICAgICAgICAqb3V0cHV0KysgPSAodW5zaWduZWQgY2hhcikoIGMgXiBzdHJlYW1fYmxvY2tbbl0gKTsKKworICAgICAgICBuID0gKCBuICsgMSApICUgTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkU7CisgICAgfQorCisgICAgKm5jX29mZiA9IG47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCitzdGF0aWMgY29uc3QgdWludDMyX3QgU1s0XVsyNTZdID0geworICAgIHsgICAweEQxMzEwQkE2TCwgMHg5OERGQjVBQ0wsIDB4MkZGRDcyREJMLCAweEQwMUFERkI3TCwKKyAgICAgICAgMHhCOEUxQUZFREwsIDB4NkEyNjdFOTZMLCAweEJBN0M5MDQ1TCwgMHhGMTJDN0Y5OUwsCisgICAgICAgIDB4MjRBMTk5NDdMLCAweEIzOTE2Q0Y3TCwgMHgwODAxRjJFMkwsIDB4ODU4RUZDMTZMLAorICAgICAgICAweDYzNjkyMEQ4TCwgMHg3MTU3NEU2OUwsIDB4QTQ1OEZFQTNMLCAweEY0OTMzRDdFTCwKKyAgICAgICAgMHgwRDk1NzQ4RkwsIDB4NzI4RUI2NThMLCAweDcxOEJDRDU4TCwgMHg4MjE1NEFFRUwsCisgICAgICAgIDB4N0I1NEE0MURMLCAweEMyNUE1OUI1TCwgMHg5QzMwRDUzOUwsIDB4MkFGMjYwMTNMLAorICAgICAgICAweEM1RDFCMDIzTCwgMHgyODYwODVGMEwsIDB4Q0E0MTc5MThMLCAweEI4REIzOEVGTCwKKyAgICAgICAgMHg4RTc5RENCMEwsIDB4NjAzQTE4MEVMLCAweDZDOUUwRThCTCwgMHhCMDFFOEEzRUwsCisgICAgICAgIDB4RDcxNTc3QzFMLCAweEJEMzE0QjI3TCwgMHg3OEFGMkZEQUwsIDB4NTU2MDVDNjBMLAorICAgICAgICAweEU2NTUyNUYzTCwgMHhBQTU1QUI5NEwsIDB4NTc0ODk4NjJMLCAweDYzRTgxNDQwTCwKKyAgICAgICAgMHg1NUNBMzk2QUwsIDB4MkFBQjEwQjZMLCAweEI0Q0M1QzM0TCwgMHgxMTQxRThDRUwsCisgICAgICAgIDB4QTE1NDg2QUZMLCAweDdDNzJFOTkzTCwgMHhCM0VFMTQxMUwsIDB4NjM2RkJDMkFMLAorICAgICAgICAweDJCQTlDNTVETCwgMHg3NDE4MzFGNkwsIDB4Q0U1QzNFMTZMLCAweDlCODc5MzFFTCwKKyAgICAgICAgMHhBRkQ2QkEzM0wsIDB4NkMyNENGNUNMLCAweDdBMzI1MzgxTCwgMHgyODk1ODY3N0wsCisgICAgICAgIDB4M0I4RjQ4OThMLCAweDZCNEJCOUFGTCwgMHhDNEJGRTgxQkwsIDB4NjYyODIxOTNMLAorICAgICAgICAweDYxRDgwOUNDTCwgMHhGQjIxQTk5MUwsIDB4NDg3Q0FDNjBMLCAweDVERUM4MDMyTCwKKyAgICAgICAgMHhFRjg0NUQ1REwsIDB4RTk4NTc1QjFMLCAweERDMjYyMzAyTCwgMHhFQjY1MUI4OEwsCisgICAgICAgIDB4MjM4OTNFODFMLCAweEQzOTZBQ0M1TCwgMHgwRjZENkZGM0wsIDB4ODNGNDQyMzlMLAorICAgICAgICAweDJFMEI0NDgyTCwgMHhBNDg0MjAwNEwsIDB4NjlDOEYwNEFMLCAweDlFMUY5QjVFTCwKKyAgICAgICAgMHgyMUM2Njg0MkwsIDB4RjZFOTZDOUFMLCAweDY3MEM5QzYxTCwgMHhBQkQzODhGMEwsCisgICAgICAgIDB4NkE1MUEwRDJMLCAweEQ4NTQyRjY4TCwgMHg5NjBGQTcyOEwsIDB4QUI1MTMzQTNMLAorICAgICAgICAweDZFRUYwQjZDTCwgMHgxMzdBM0JFNEwsIDB4QkEzQkYwNTBMLCAweDdFRkIyQTk4TCwKKyAgICAgICAgMHhBMUYxNjUxREwsIDB4MzlBRjAxNzZMLCAweDY2Q0E1OTNFTCwgMHg4MjQzMEU4OEwsCisgICAgICAgIDB4OENFRTg2MTlMLCAweDQ1NkY5RkI0TCwgMHg3RDg0QTVDM0wsIDB4M0I4QjVFQkVMLAorICAgICAgICAweEUwNkY3NUQ4TCwgMHg4NUMxMjA3M0wsIDB4NDAxQTQ0OUZMLCAweDU2QzE2QUE2TCwKKyAgICAgICAgMHg0RUQzQUE2MkwsIDB4MzYzRjc3MDZMLCAweDFCRkVERjcyTCwgMHg0MjlCMDIzREwsCisgICAgICAgIDB4MzdEMEQ3MjRMLCAweEQwMEExMjQ4TCwgMHhEQjBGRUFEM0wsIDB4NDlGMUMwOUJMLAorICAgICAgICAweDA3NTM3MkM5TCwgMHg4MDk5MUI3QkwsIDB4MjVENDc5RDhMLCAweEY2RThERUY3TCwKKyAgICAgICAgMHhFM0ZFNTAxQUwsIDB4QjY3OTRDM0JMLCAweDk3NkNFMEJETCwgMHgwNEMwMDZCQUwsCisgICAgICAgIDB4QzFBOTRGQjZMLCAweDQwOUY2MEM0TCwgMHg1RTVDOUVDMkwsIDB4MTk2QTI0NjNMLAorICAgICAgICAweDY4RkI2RkFGTCwgMHgzRTZDNTNCNUwsIDB4MTMzOUIyRUJMLCAweDNCNTJFQzZGTCwKKyAgICAgICAgMHg2REZDNTExRkwsIDB4OUIzMDk1MkNMLCAweENDODE0NTQ0TCwgMHhBRjVFQkQwOUwsCisgICAgICAgIDB4QkVFM0QwMDRMLCAweERFMzM0QUZETCwgMHg2NjBGMjgwN0wsIDB4MTkyRTRCQjNMLAorICAgICAgICAweEMwQ0JBODU3TCwgMHg0NUM4NzQwRkwsIDB4RDIwQjVGMzlMLCAweEI5RDNGQkRCTCwKKyAgICAgICAgMHg1NTc5QzBCREwsIDB4MUE2MDMyMEFMLCAweEQ2QTEwMEM2TCwgMHg0MDJDNzI3OUwsCisgICAgICAgIDB4Njc5RjI1RkVMLCAweEZCMUZBM0NDTCwgMHg4RUE1RTlGOEwsIDB4REIzMjIyRjhMLAorICAgICAgICAweDNDNzUxNkRGTCwgMHhGRDYxNkIxNUwsIDB4MkY1MDFFQzhMLCAweEFEMDU1MkFCTCwKKyAgICAgICAgMHgzMjNEQjVGQUwsIDB4RkQyMzg3NjBMLCAweDUzMzE3QjQ4TCwgMHgzRTAwREY4MkwsCisgICAgICAgIDB4OUU1QzU3QkJMLCAweENBNkY4Q0EwTCwgMHgxQTg3NTYyRUwsIDB4REYxNzY5REJMLAorICAgICAgICAweEQ1NDJBOEY2TCwgMHgyODdFRkZDM0wsIDB4QUM2NzMyQzZMLCAweDhDNEY1NTczTCwKKyAgICAgICAgMHg2OTVCMjdCMEwsIDB4QkJDQTU4QzhMLCAweEUxRkZBMzVETCwgMHhCOEYwMTFBMEwsCisgICAgICAgIDB4MTBGQTNEOThMLCAweEZEMjE4M0I4TCwgMHg0QUZDQjU2Q0wsIDB4MkREMUQzNUJMLAorICAgICAgICAweDlBNTNFNDc5TCwgMHhCNkY4NDU2NUwsIDB4RDI4RTQ5QkNMLCAweDRCRkI5NzkwTCwKKyAgICAgICAgMHhFMURERjJEQUwsIDB4QTRDQjdFMzNMLCAweDYyRkIxMzQxTCwgMHhDRUU0QzZFOEwsCisgICAgICAgIDB4RUYyMENBREFMLCAweDM2Nzc0QzAxTCwgMHhEMDdFOUVGRUwsIDB4MkJGMTFGQjRMLAorICAgICAgICAweDk1REJEQTRETCwgMHhBRTkwOTE5OEwsIDB4RUFBRDhFNzFMLCAweDZCOTNENUEwTCwKKyAgICAgICAgMHhEMDhFRDFEMEwsIDB4QUZDNzI1RTBMLCAweDhFM0M1QjJGTCwgMHg4RTc1OTRCN0wsCisgICAgICAgIDB4OEZGNkUyRkJMLCAweEYyMTIyQjY0TCwgMHg4ODg4QjgxMkwsIDB4OTAwREYwMUNMLAorICAgICAgICAweDRGQUQ1RUEwTCwgMHg2ODhGQzMxQ0wsIDB4RDFDRkYxOTFMLCAweEIzQThDMUFETCwKKyAgICAgICAgMHgyRjJGMjIxOEwsIDB4QkUwRTE3NzdMLCAweEVBNzUyREZFTCwgMHg4QjAyMUZBMUwsCisgICAgICAgIDB4RTVBMENDMEZMLCAweEI1NkY3NEU4TCwgMHgxOEFDRjNENkwsIDB4Q0U4OUUyOTlMLAorICAgICAgICAweEI0QTg0RkUwTCwgMHhGRDEzRTBCN0wsIDB4N0NDNDNCODFMLCAweEQyQURBOEQ5TCwKKyAgICAgICAgMHgxNjVGQTI2NkwsIDB4ODA5NTc3MDVMLCAweDkzQ0M3MzE0TCwgMHgyMTFBMTQ3N0wsCisgICAgICAgIDB4RTZBRDIwNjVMLCAweDc3QjVGQTg2TCwgMHhDNzU0NDJGNUwsIDB4RkI5RDM1Q0ZMLAorICAgICAgICAweEVCQ0RBRjBDTCwgMHg3QjNFODlBMEwsIDB4RDY0MTFCRDNMLCAweEFFMUU3RTQ5TCwKKyAgICAgICAgMHgwMDI1MEUyREwsIDB4MjA3MUIzNUVMLCAweDIyNjgwMEJCTCwgMHg1N0I4RTBBRkwsCisgICAgICAgIDB4MjQ2NDM2OUJMLCAweEYwMDlCOTFFTCwgMHg1NTYzOTExREwsIDB4NTlERkE2QUFMLAorICAgICAgICAweDc4QzE0Mzg5TCwgMHhEOTVBNTM3RkwsIDB4MjA3RDVCQTJMLCAweDAyRTVCOUM1TCwKKyAgICAgICAgMHg4MzI2MDM3NkwsIDB4NjI5NUNGQTlMLCAweDExQzgxOTY4TCwgMHg0RTczNEE0MUwsCisgICAgICAgIDB4QjM0NzJEQ0FMLCAweDdCMTRBOTRBTCwgMHgxQjUxMDA1MkwsIDB4OUE1MzI5MTVMLAorICAgICAgICAweEQ2MEY1NzNGTCwgMHhCQzlCQzZFNEwsIDB4MkI2MEE0NzZMLCAweDgxRTY3NDAwTCwKKyAgICAgICAgMHgwOEJBNkZCNUwsIDB4NTcxQkU5MUZMLCAweEYyOTZFQzZCTCwgMHgyQTBERDkxNUwsCisgICAgICAgIDB4QjY2MzY1MjFMLCAweEU3QjlGOUI2TCwgMHhGRjM0MDUyRUwsIDB4QzU4NTU2NjRMLAorICAgICAgICAweDUzQjAyRDVETCwgMHhBOTlGOEZBMUwsIDB4MDhCQTQ3OTlMLCAweDZFODUwNzZBTCAgIH0sCisgICAgeyAgIDB4NEI3QTcwRTlMLCAweEI1QjMyOTQ0TCwgMHhEQjc1MDkyRUwsIDB4QzQxOTI2MjNMLAorICAgICAgICAweEFENkVBNkIwTCwgMHg0OUE3REY3REwsIDB4OUNFRTYwQjhMLCAweDhGRURCMjY2TCwKKyAgICAgICAgMHhFQ0FBOEM3MUwsIDB4Njk5QTE3RkZMLCAweDU2NjQ1MjZDTCwgMHhDMkIxOUVFMUwsCisgICAgICAgIDB4MTkzNjAyQTVMLCAweDc1MDk0QzI5TCwgMHhBMDU5MTM0MEwsIDB4RTQxODNBM0VMLAorICAgICAgICAweDNGNTQ5ODlBTCwgMHg1QjQyOUQ2NUwsIDB4NkI4RkU0RDZMLCAweDk5RjczRkQ2TCwKKyAgICAgICAgMHhBMUQyOUMwN0wsIDB4RUZFODMwRjVMLCAweDREMkQzOEU2TCwgMHhGMDI1NURDMUwsCisgICAgICAgIDB4NENERDIwODZMLCAweDg0NzBFQjI2TCwgMHg2MzgyRTlDNkwsIDB4MDIxRUNDNUVMLAorICAgICAgICAweDA5Njg2QjNGTCwgMHgzRUJBRUZDOUwsIDB4M0M5NzE4MTRMLCAweDZCNkE3MEExTCwKKyAgICAgICAgMHg2ODdGMzU4NEwsIDB4NTJBMEUyODZMLCAweEI3OUM1MzA1TCwgMHhBQTUwMDczN0wsCisgICAgICAgIDB4M0UwNzg0MUNMLCAweDdGREVBRTVDTCwgMHg4RTdENDRFQ0wsIDB4NTcxNkYyQjhMLAorICAgICAgICAweEIwM0FEQTM3TCwgMHhGMDUwMEMwREwsIDB4RjAxQzFGMDRMLCAweDAyMDBCM0ZGTCwKKyAgICAgICAgMHhBRTBDRjUxQUwsIDB4M0NCNTc0QjJMLCAweDI1ODM3QTU4TCwgMHhEQzA5MjFCREwsCisgICAgICAgIDB4RDE5MTEzRjlMLCAweDdDQTkyRkY2TCwgMHg5NDMyNDc3M0wsIDB4MjJGNTQ3MDFMLAorICAgICAgICAweDNBRTVFNTgxTCwgMHgzN0MyREFEQ0wsIDB4QzhCNTc2MzRMLCAweDlBRjNEREE3TCwKKyAgICAgICAgMHhBOTQ0NjE0NkwsIDB4MEZEMDAzMEVMLCAweEVDQzhDNzNFTCwgMHhBNDc1MUU0MUwsCisgICAgICAgIDB4RTIzOENEOTlMLCAweDNCRUEwRTJGTCwgMHgzMjgwQkJBMUwsIDB4MTgzRUIzMzFMLAorICAgICAgICAweDRFNTQ4QjM4TCwgMHg0RjZEQjkwOEwsIDB4NkY0MjBEMDNMLCAweEY2MEEwNEJGTCwKKyAgICAgICAgMHgyQ0I4MTI5MEwsIDB4MjQ5NzdDNzlMLCAweDU2NzlCMDcyTCwgMHhCQ0FGODlBRkwsCisgICAgICAgIDB4REU5QTc3MUZMLCAweEQ5OTMwODEwTCwgMHhCMzhCQUUxMkwsIDB4RENDRjNGMkVMLAorICAgICAgICAweDU1MTI3MjFGTCwgMHgyRTZCNzEyNEwsIDB4NTAxQURERTZMLCAweDlGODRDRDg3TCwKKyAgICAgICAgMHg3QTU4NDcxOEwsIDB4NzQwOERBMTdMLCAweEJDOUY5QUJDTCwgMHhFOTRCN0Q4Q0wsCisgICAgICAgIDB4RUM3QUVDM0FMLCAweERCODUxREZBTCwgMHg2MzA5NDM2NkwsIDB4QzQ2NEMzRDJMLAorICAgICAgICAweEVGMUMxODQ3TCwgMHgzMjE1RDkwOEwsIDB4REQ0MzNCMzdMLCAweDI0QzJCQTE2TCwKKyAgICAgICAgMHgxMkExNEQ0M0wsIDB4MkE2NUM0NTFMLCAweDUwOTQwMDAyTCwgMHgxMzNBRTREREwsCisgICAgICAgIDB4NzFERkY4OUVMLCAweDEwMzE0RTU1TCwgMHg4MUFDNzdENkwsIDB4NUYxMTE5OUJMLAorICAgICAgICAweDA0MzU1NkYxTCwgMHhEN0EzQzc2QkwsIDB4M0MxMTE4M0JMLCAweDU5MjRBNTA5TCwKKyAgICAgICAgMHhGMjhGRTZFREwsIDB4OTdGMUZCRkFMLCAweDlFQkFCRjJDTCwgMHgxRTE1M0M2RUwsCisgICAgICAgIDB4ODZFMzQ1NzBMLCAweEVBRTk2RkIxTCwgMHg4NjBFNUUwQUwsIDB4NUEzRTJBQjNMLAorICAgICAgICAweDc3MUZFNzFDTCwgMHg0RTNEMDZGQUwsIDB4Mjk2NURDQjlMLCAweDk5RTcxRDBGTCwKKyAgICAgICAgMHg4MDNFODlENkwsIDB4NTI2NkM4MjVMLCAweDJFNENDOTc4TCwgMHg5QzEwQjM2QUwsCisgICAgICAgIDB4QzYxNTBFQkFMLCAweDk0RTJFQTc4TCwgMHhBNUZDM0M1M0wsIDB4MUUwQTJERjRMLAorICAgICAgICAweEYyRjc0RUE3TCwgMHgzNjFEMkIzREwsIDB4MTkzOTI2MEZMLCAweDE5QzI3OTYwTCwKKyAgICAgICAgMHg1MjIzQTcwOEwsIDB4RjcxMzEyQjZMLCAweEVCQURGRTZFTCwgMHhFQUMzMUY2NkwsCisgICAgICAgIDB4RTNCQzQ1OTVMLCAweEE2N0JDODgzTCwgMHhCMTdGMzdEMUwsIDB4MDE4Q0ZGMjhMLAorICAgICAgICAweEMzMzJEREVGTCwgMHhCRTZDNUFBNUwsIDB4NjU1ODIxODVMLCAweDY4QUI5ODAyTCwKKyAgICAgICAgMHhFRUNFQTUwRkwsIDB4REIyRjk1M0JMLCAweDJBRUY3REFETCwgMHg1QjZFMkY4NEwsCisgICAgICAgIDB4MTUyMUI2MjhMLCAweDI5MDc2MTcwTCwgMHhFQ0RENDc3NUwsIDB4NjE5RjE1MTBMLAorICAgICAgICAweDEzQ0NBODMwTCwgMHhFQjYxQkQ5NkwsIDB4MDMzNEZFMUVMLCAweEFBMDM2M0NGTCwKKyAgICAgICAgMHhCNTczNUM5MEwsIDB4NEM3MEEyMzlMLCAweEQ1OUU5RTBCTCwgMHhDQkFBREUxNEwsCisgICAgICAgIDB4RUVDQzg2QkNMLCAweDYwNjIyQ0E3TCwgMHg5Q0FCNUNBQkwsIDB4QjJGMzg0NkVMLAorICAgICAgICAweDY0OEIxRUFGTCwgMHgxOUJERjBDQUwsIDB4QTAyMzY5QjlMLCAweDY1NUFCQjUwTCwKKyAgICAgICAgMHg0MDY4NUEzMkwsIDB4M0MyQUI0QjNMLCAweDMxOUVFOUQ1TCwgMHhDMDIxQjhGN0wsCisgICAgICAgIDB4OUI1NDBCMTlMLCAweDg3NUZBMDk5TCwgMHg5NUY3OTk3RUwsIDB4NjIzRDdEQThMLAorICAgICAgICAweEY4Mzc4ODlBTCwgMHg5N0UzMkQ3N0wsIDB4MTFFRDkzNUZMLCAweDE2NjgxMjgxTCwKKyAgICAgICAgMHgwRTM1ODgyOUwsIDB4QzdFNjFGRDZMLCAweDk2REVERkExTCwgMHg3ODU4QkE5OUwsCisgICAgICAgIDB4NTdGNTg0QTVMLCAweDFCMjI3MjYzTCwgMHg5QjgzQzNGRkwsIDB4MUFDMjQ2OTZMLAorICAgICAgICAweENEQjMwQUVCTCwgMHg1MzJFMzA1NEwsIDB4OEZEOTQ4RTRMLCAweDZEQkMzMTI4TCwKKyAgICAgICAgMHg1OEVCRjJFRkwsIDB4MzRDNkZGRUFMLCAweEZFMjhFRDYxTCwgMHhFRTdDM0M3M0wsCisgICAgICAgIDB4NUQ0QTE0RDlMLCAweEU4NjRCN0UzTCwgMHg0MjEwNUQxNEwsIDB4MjAzRTEzRTBMLAorICAgICAgICAweDQ1RUVFMkI2TCwgMHhBM0FBQUJFQUwsIDB4REI2QzRGMTVMLCAweEZBQ0I0RkQwTCwKKyAgICAgICAgMHhDNzQyRjQ0MkwsIDB4RUY2QUJCQjVMLCAweDY1NEYzQjFETCwgMHg0MUNEMjEwNUwsCisgICAgICAgIDB4RDgxRTc5OUVMLCAweDg2ODU0REM3TCwgMHhFNDRCNDc2QUwsIDB4M0Q4MTYyNTBMLAorICAgICAgICAweENGNjJBMUYyTCwgMHg1QjhEMjY0NkwsIDB4RkM4ODgzQTBMLCAweEMxQzdCNkEzTCwKKyAgICAgICAgMHg3RjE1MjRDM0wsIDB4NjlDQjc0OTJMLCAweDQ3ODQ4QTBCTCwgMHg1NjkyQjI4NUwsCisgICAgICAgIDB4MDk1QkJGMDBMLCAweEFEMTk0ODlETCwgMHgxNDYyQjE3NEwsIDB4MjM4MjBFMDBMLAorICAgICAgICAweDU4NDI4RDJBTCwgMHgwQzU1RjVFQUwsIDB4MURBREY0M0VMLCAweDIzM0Y3MDYxTCwKKyAgICAgICAgMHgzMzcyRjA5MkwsIDB4OEQ5MzdFNDFMLCAweEQ2NUZFQ0YxTCwgMHg2QzIyM0JEQkwsCisgICAgICAgIDB4N0NERTM3NTlMLCAweENCRUU3NDYwTCwgMHg0MDg1RjJBN0wsIDB4Q0U3NzMyNkVMLAorICAgICAgICAweEE2MDc4MDg0TCwgMHgxOUY4NTA5RUwsIDB4RThFRkQ4NTVMLCAweDYxRDk5NzM1TCwKKyAgICAgICAgMHhBOTY5QTdBQUwsIDB4QzUwQzA2QzJMLCAweDVBMDRBQkZDTCwgMHg4MDBCQ0FEQ0wsCisgICAgICAgIDB4OUU0NDdBMkVMLCAweEMzNDUzNDg0TCwgMHhGREQ1NjcwNUwsIDB4MEUxRTlFQzlMLAorICAgICAgICAweERCNzNEQkQzTCwgMHgxMDU1ODhDREwsIDB4Njc1RkRBNzlMLCAweEUzNjc0MzQwTCwKKyAgICAgICAgMHhDNUM0MzQ2NUwsIDB4NzEzRTM4RDhMLCAweDNEMjhGODlFTCwgMHhGMTZERkYyMEwsCisgICAgICAgIDB4MTUzRTIxRTdMLCAweDhGQjAzRDRBTCwgMHhFNkUzOUYyQkwsIDB4REI4M0FERjdMICAgfSwKKyAgICB7ICAgMHhFOTNENUE2OEwsIDB4OTQ4MTQwRjdMLCAweEY2NEMyNjFDTCwgMHg5NDY5MjkzNEwsCisgICAgICAgIDB4NDExNTIwRjdMLCAweDc2MDJENEY3TCwgMHhCQ0Y0NkIyRUwsIDB4RDRBMjAwNjhMLAorICAgICAgICAweEQ0MDgyNDcxTCwgMHgzMzIwRjQ2QUwsIDB4NDNCN0Q0QjdMLCAweDUwMDA2MUFGTCwKKyAgICAgICAgMHgxRTM5RjYyRUwsIDB4OTcyNDQ1NDZMLCAweDE0MjE0Rjc0TCwgMHhCRjhCODg0MEwsCisgICAgICAgIDB4NEQ5NUZDMURMLCAweDk2QjU5MUFGTCwgMHg3MEY0REREM0wsIDB4NjZBMDJGNDVMLAorICAgICAgICAweEJGQkMwOUVDTCwgMHgwM0JEOTc4NUwsIDB4N0ZBQzZERDBMLCAweDMxQ0I4NTA0TCwKKyAgICAgICAgMHg5NkVCMjdCM0wsIDB4NTVGRDM5NDFMLCAweERBMjU0N0U2TCwgMHhBQkNBMEE5QUwsCisgICAgICAgIDB4Mjg1MDc4MjVMLCAweDUzMDQyOUY0TCwgMHgwQTJDODZEQUwsIDB4RTlCNjZERkJMLAorICAgICAgICAweDY4REMxNDYyTCwgMHhENzQ4NjkwMEwsIDB4NjgwRUMwQTRMLCAweDI3QTE4REVFTCwKKyAgICAgICAgMHg0RjNGRkVBMkwsIDB4RTg4N0FEOENMLCAweEI1OENFMDA2TCwgMHg3QUY0RDZCNkwsCisgICAgICAgIDB4QUFDRTFFN0NMLCAweEQzMzc1RkVDTCwgMHhDRTc4QTM5OUwsIDB4NDA2QjJBNDJMLAorICAgICAgICAweDIwRkU5RTM1TCwgMHhEOUYzODVCOUwsIDB4RUUzOUQ3QUJMLCAweDNCMTI0RThCTCwKKyAgICAgICAgMHgxREM5RkFGN0wsIDB4NEI2RDE4NTZMLCAweDI2QTM2NjMxTCwgMHhFQUUzOTdCMkwsCisgICAgICAgIDB4M0E2RUZBNzRMLCAweERENUI0MzMyTCwgMHg2ODQxRTdGN0wsIDB4Q0E3ODIwRkJMLAorICAgICAgICAweEZCMEFGNTRFTCwgMHhEOEZFQjM5N0wsIDB4NDU0MDU2QUNMLCAweEJBNDg5NTI3TCwKKyAgICAgICAgMHg1NTUzM0EzQUwsIDB4MjA4MzhEODdMLCAweEZFNkJBOUI3TCwgMHhEMDk2OTU0QkwsCisgICAgICAgIDB4NTVBODY3QkNMLCAweEExMTU5QTU4TCwgMHhDQ0E5Mjk2M0wsIDB4OTlFMURCMzNMLAorICAgICAgICAweEE2MkE0QTU2TCwgMHgzRjMxMjVGOUwsIDB4NUVGNDdFMUNMLCAweDkwMjkzMTdDTCwKKyAgICAgICAgMHhGREY4RTgwMkwsIDB4MDQyNzJGNzBMLCAweDgwQkIxNTVDTCwgMHgwNTI4MkNFM0wsCisgICAgICAgIDB4OTVDMTE1NDhMLCAweEU0QzY2RDIyTCwgMHg0OEMxMTMzRkwsIDB4QzcwRjg2RENMLAorICAgICAgICAweDA3RjlDOUVFTCwgMHg0MTA0MUYwRkwsIDB4NDA0Nzc5QTRMLCAweDVEODg2RTE3TCwKKyAgICAgICAgMHgzMjVGNTFFQkwsIDB4RDU5QkMwRDFMLCAweEYyQkNDMThGTCwgMHg0MTExMzU2NEwsCisgICAgICAgIDB4MjU3Qjc4MzRMLCAweDYwMkE5QzYwTCwgMHhERkY4RThBM0wsIDB4MUY2MzZDMUJMLAorICAgICAgICAweDBFMTJCNEMyTCwgMHgwMkUxMzI5RUwsIDB4QUY2NjRGRDFMLCAweENBRDE4MTE1TCwKKyAgICAgICAgMHg2QjIzOTVFMEwsIDB4MzMzRTkyRTFMLCAweDNCMjQwQjYyTCwgMHhFRUJFQjkyMkwsCisgICAgICAgIDB4ODVCMkEyMEVMLCAweEU2QkEwRDk5TCwgMHhERTcyMEM4Q0wsIDB4MkRBMkY3MjhMLAorICAgICAgICAweEQwMTI3ODQ1TCwgMHg5NUI3OTRGREwsIDB4NjQ3RDA4NjJMLCAweEU3Q0NGNUYwTCwKKyAgICAgICAgMHg1NDQ5QTM2RkwsIDB4ODc3RDQ4RkFMLCAweEMzOURGRDI3TCwgMHhGMzNFOEQxRUwsCisgICAgICAgIDB4MEE0NzYzNDFMLCAweDk5MkVGRjc0TCwgMHgzQTZGNkVBQkwsIDB4RjRGOEZEMzdMLAorICAgICAgICAweEE4MTJEQzYwTCwgMHhBMUVCRERGOEwsIDB4OTkxQkUxNENMLCAweERCNkU2QjBETCwKKyAgICAgICAgMHhDNjdCNTUxMEwsIDB4NkQ2NzJDMzdMLCAweDI3NjVENDNCTCwgMHhEQ0QwRTgwNEwsCisgICAgICAgIDB4RjEyOTBEQzdMLCAweENDMDBGRkEzTCwgMHhCNTM5MEY5MkwsIDB4NjkwRkVEMEJMLAorICAgICAgICAweDY2N0I5RkZCTCwgMHhDRURCN0Q5Q0wsIDB4QTA5MUNGMEJMLCAweEQ5MTU1RUEzTCwKKyAgICAgICAgMHhCQjEzMkY4OEwsIDB4NTE1QkFEMjRMLCAweDdCOTQ3OUJGTCwgMHg3NjNCRDZFQkwsCisgICAgICAgIDB4MzczOTJFQjNMLCAweENDMTE1OTc5TCwgMHg4MDI2RTI5N0wsIDB4RjQyRTMxMkRMLAorICAgICAgICAweDY4NDJBREE3TCwgMHhDNjZBMkIzQkwsIDB4MTI3NTRDQ0NMLCAweDc4MkVGMTFDTCwKKyAgICAgICAgMHg2QTEyNDIzN0wsIDB4Qjc5MjUxRTdMLCAweDA2QTFCQkU2TCwgMHg0QkZCNjM1MEwsCisgICAgICAgIDB4MUE2QjEwMThMLCAweDExQ0FFREZBTCwgMHgzRDI1QkREOEwsIDB4RTJFMUMzQzlMLAorICAgICAgICAweDQ0NDIxNjU5TCwgMHgwQTEyMTM4NkwsIDB4RDkwQ0VDNkVMLCAweEQ1QUJFQTJBTCwKKyAgICAgICAgMHg2NEFGNjc0RUwsIDB4REE4NkE4NUZMLCAweEJFQkZFOTg4TCwgMHg2NEU0QzNGRUwsCisgICAgICAgIDB4OURCQzgwNTdMLCAweEYwRjdDMDg2TCwgMHg2MDc4N0JGOEwsIDB4NjAwMzYwNERMLAorICAgICAgICAweEQxRkQ4MzQ2TCwgMHhGNjM4MUZCMEwsIDB4Nzc0NUFFMDRMLCAweEQ3MzZGQ0NDTCwKKyAgICAgICAgMHg4MzQyNkIzM0wsIDB4RjAxRUFCNzFMLCAweEIwODA0MTg3TCwgMHgzQzAwNUU1RkwsCisgICAgICAgIDB4NzdBMDU3QkVMLCAweEJERThBRTI0TCwgMHg1NTQ2NDI5OUwsIDB4QkY1ODJFNjFMLAorICAgICAgICAweDRFNThGNDhGTCwgMHhGMkRERkRBMkwsIDB4RjQ3NEVGMzhMLCAweDg3ODlCREMyTCwKKyAgICAgICAgMHg1MzY2RjlDM0wsIDB4QzhCMzhFNzRMLCAweEI0NzVGMjU1TCwgMHg0NkZDRDlCOUwsCisgICAgICAgIDB4N0FFQjI2NjFMLCAweDhCMURERjg0TCwgMHg4NDZBMEU3OUwsIDB4OTE1Rjk1RTJMLAorICAgICAgICAweDQ2NkU1OThFTCwgMHgyMEI0NTc3MEwsIDB4OENENTU1OTFMLCAweEM5MDJERTRDTCwKKyAgICAgICAgMHhCOTBCQUNFMUwsIDB4QkI4MjA1RDBMLCAweDExQTg2MjQ4TCwgMHg3NTc0QTk5RUwsCisgICAgICAgIDB4Qjc3RjE5QjZMLCAweEUwQTlEQzA5TCwgMHg2NjJEMDlBMUwsIDB4QzQzMjQ2MzNMLAorICAgICAgICAweEU4NUExRjAyTCwgMHgwOUYwQkU4Q0wsIDB4NEE5OUEwMjVMLCAweDFENkVGRTEwTCwKKyAgICAgICAgMHgxQUI5M0QxREwsIDB4MEJBNUE0REZMLCAweEExODZGMjBGTCwgMHgyODY4RjE2OUwsCisgICAgICAgIDB4RENCN0RBODNMLCAweDU3MzkwNkZFTCwgMHhBMUUyQ0U5QkwsIDB4NEZDRDdGNTJMLAorICAgICAgICAweDUwMTE1RTAxTCwgMHhBNzA2ODNGQUwsIDB4QTAwMkI1QzRMLCAweDBERTZEMDI3TCwKKyAgICAgICAgMHg5QUY4OEMyN0wsIDB4NzczRjg2NDFMLCAweEMzNjA0QzA2TCwgMHg2MUE4MDZCNUwsCisgICAgICAgIDB4RjAxNzdBMjhMLCAweEMwRjU4NkUwTCwgMHgwMDYwNThBQUwsIDB4MzBEQzdENjJMLAorICAgICAgICAweDExRTY5RUQ3TCwgMHgyMzM4RUE2M0wsIDB4NTNDMkREOTRMLCAweEMyQzIxNjM0TCwKKyAgICAgICAgMHhCQkNCRUU1NkwsIDB4OTBCQ0I2REVMLCAweEVCRkM3REExTCwgMHhDRTU5MUQ3NkwsCisgICAgICAgIDB4NkYwNUU0MDlMLCAweDRCN0MwMTg4TCwgMHgzOTcyMEEzREwsIDB4N0M5MjdDMjRMLAorICAgICAgICAweDg2RTM3MjVGTCwgMHg3MjREOURCOUwsIDB4MUFDMTVCQjRMLCAweEQzOUVCOEZDTCwKKyAgICAgICAgMHhFRDU0NTU3OEwsIDB4MDhGQ0E1QjVMLCAweEQ4M0Q3Q0QzTCwgMHg0REFEMEZDNEwsCisgICAgICAgIDB4MUU1MEVGNUVMLCAweEIxNjFFNkY4TCwgMHhBMjg1MTREOUwsIDB4NkM1MTEzM0NMLAorICAgICAgICAweDZGRDVDN0U3TCwgMHg1NkUxNEVDNEwsIDB4MzYyQUJGQ0VMLCAweEREQzZDODM3TCwKKyAgICAgICAgMHhENzlBMzIzNEwsIDB4OTI2MzgyMTJMLCAweDY3MEVGQThFTCwgMHg0MDYwMDBFMEwgIH0sCisgICAgeyAgIDB4M0EzOUNFMzdMLCAweEQzRkFGNUNGTCwgMHhBQkMyNzczN0wsIDB4NUFDNTJEMUJMLAorICAgICAgICAweDVDQjA2NzlFTCwgMHg0RkEzMzc0MkwsIDB4RDM4MjI3NDBMLCAweDk5QkM5QkJFTCwKKyAgICAgICAgMHhENTExOEU5REwsIDB4QkYwRjczMTVMLCAweEQ2MkQxQzdFTCwgMHhDNzAwQzQ3QkwsCisgICAgICAgIDB4Qjc4QzFCNkJMLCAweDIxQTE5MDQ1TCwgMHhCMjZFQjFCRUwsIDB4NkEzNjZFQjRMLAorICAgICAgICAweDU3NDhBQjJGTCwgMHhCQzk0NkU3OUwsIDB4QzZBMzc2RDJMLCAweDY1NDlDMkM4TCwKKyAgICAgICAgMHg1MzBGRjhFRUwsIDB4NDY4RERFN0RMLCAweEQ1NzMwQTFETCwgMHg0Q0QwNERDNkwsCisgICAgICAgIDB4MjkzOUJCREJMLCAweEE5QkE0NjUwTCwgMHhBQzk1MjZFOEwsIDB4QkU1RUUzMDRMLAorICAgICAgICAweEExRkFENUYwTCwgMHg2QTJENTE5QUwsIDB4NjNFRjhDRTJMLCAweDlBODZFRTIyTCwKKyAgICAgICAgMHhDMDg5QzJCOEwsIDB4NDMyNDJFRjZMLCAweEE1MUUwM0FBTCwgMHg5Q0YyRDBBNEwsCisgICAgICAgIDB4ODNDMDYxQkFMLCAweDlCRTk2QTRETCwgMHg4RkU1MTU1MEwsIDB4QkE2NDVCRDZMLAorICAgICAgICAweDI4MjZBMkY5TCwgMHhBNzNBM0FFMUwsIDB4NEJBOTk1ODZMLCAweEVGNTU2MkU5TCwKKyAgICAgICAgMHhDNzJGRUZEM0wsIDB4Rjc1MkY3REFMLCAweDNGMDQ2RjY5TCwgMHg3N0ZBMEE1OUwsCisgICAgICAgIDB4ODBFNEE5MTVMLCAweDg3QjA4NjAxTCwgMHg5QjA5RTZBREwsIDB4M0IzRUU1OTNMLAorICAgICAgICAweEU5OTBGRDVBTCwgMHg5RTM0RDc5N0wsIDB4MkNGMEI3RDlMLCAweDAyMkI4QjUxTCwKKyAgICAgICAgMHg5NkQ1QUMzQUwsIDB4MDE3REE2N0RMLCAweEQxQ0YzRUQ2TCwgMHg3QzdEMkQyOEwsCisgICAgICAgIDB4MUY5RjI1Q0ZMLCAweEFERjJCODlCTCwgMHg1QUQ2QjQ3MkwsIDB4NUE4OEY1NENMLAorICAgICAgICAweEUwMjlBQzcxTCwgMHhFMDE5QTVFNkwsIDB4NDdCMEFDRkRMLCAweEVEOTNGQTlCTCwKKyAgICAgICAgMHhFOEQzQzQ4REwsIDB4MjgzQjU3Q0NMLCAweEY4RDU2NjI5TCwgMHg3OTEzMkUyOEwsCisgICAgICAgIDB4Nzg1RjAxOTFMLCAweEVENzU2MDU1TCwgMHhGNzk2MEU0NEwsIDB4RTNEMzVFOENMLAorICAgICAgICAweDE1MDU2REQ0TCwgMHg4OEY0NkRCQUwsIDB4MDNBMTYxMjVMLCAweDA1NjRGMEJETCwKKyAgICAgICAgMHhDM0VCOUUxNUwsIDB4M0M5MDU3QTJMLCAweDk3MjcxQUVDTCwgMHhBOTNBMDcyQUwsCisgICAgICAgIDB4MUIzRjZEOUJMLCAweDFFNjMyMUY1TCwgMHhGNTlDNjZGQkwsIDB4MjZEQ0YzMTlMLAorICAgICAgICAweDc1MzNEOTI4TCwgMHhCMTU1RkRGNUwsIDB4MDM1NjM0ODJMLCAweDhBQkEzQ0JCTCwKKyAgICAgICAgMHgyODUxNzcxMUwsIDB4QzIwQUQ5RjhMLCAweEFCQ0M1MTY3TCwgMHhDQ0FEOTI1RkwsCisgICAgICAgIDB4NERFODE3NTFMLCAweDM4MzBEQzhFTCwgMHgzNzlENTg2MkwsIDB4OTMyMEY5OTFMLAorICAgICAgICAweEVBN0E5MEMyTCwgMHhGQjNFN0JDRUwsIDB4NTEyMUNFNjRMLCAweDc3NEZCRTMyTCwKKyAgICAgICAgMHhBOEI2RTM3RUwsIDB4QzMyOTNENDZMLCAweDQ4REU1MzY5TCwgMHg2NDEzRTY4MEwsCisgICAgICAgIDB4QTJBRTA4MTBMLCAweERENkRCMjI0TCwgMHg2OTg1MkRGREwsIDB4MDkwNzIxNjZMLAorICAgICAgICAweEIzOUE0NjBBTCwgMHg2NDQ1QzBEREwsIDB4NTg2Q0RFQ0ZMLCAweDFDMjBDOEFFTCwKKyAgICAgICAgMHg1QkJFRjdEREwsIDB4MUI1ODhENDBMLCAweENDRDIwMTdGTCwgMHg2QkI0RTNCQkwsCisgICAgICAgIDB4RERBMjZBN0VMLCAweDNBNTlGRjQ1TCwgMHgzRTM1MEE0NEwsIDB4QkNCNENERDVMLAorICAgICAgICAweDcyRUFDRUE4TCwgMHhGQTY0ODRCQkwsIDB4OEQ2NjEyQUVMLCAweEJGM0M2RjQ3TCwKKyAgICAgICAgMHhEMjlCRTQ2M0wsIDB4NTQyRjVEOUVMLCAweEFFQzI3NzFCTCwgMHhGNjRFNjM3MEwsCisgICAgICAgIDB4NzQwRTBEOERMLCAweEU3NUIxMzU3TCwgMHhGODcyMTY3MUwsIDB4QUY1MzdENURMLAorICAgICAgICAweDQwNDBDQjA4TCwgMHg0RUI0RTJDQ0wsIDB4MzREMjQ2NkFMLCAweDAxMTVBRjg0TCwKKyAgICAgICAgMHhFMUIwMDQyOEwsIDB4OTU5ODNBMURMLCAweDA2Qjg5RkI0TCwgMHhDRTZFQTA0OEwsCisgICAgICAgIDB4NkYzRjNCODJMLCAweDM1MjBBQjgyTCwgMHgwMTFBMUQ0QkwsIDB4Mjc3MjI3RjhMLAorICAgICAgICAweDYxMTU2MEIxTCwgMHhFNzkzM0ZEQ0wsIDB4QkIzQTc5MkJMLCAweDM0NDUyNUJETCwKKyAgICAgICAgMHhBMDg4MzlFMUwsIDB4NTFDRTc5NEJMLCAweDJGMzJDOUI3TCwgMHhBMDFGQkFDOUwsCisgICAgICAgIDB4RTAxQ0M4N0VMLCAweEJDQzdEMUY2TCwgMHhDRjAxMTFDM0wsIDB4QTFFOEFBQzdMLAorICAgICAgICAweDFBOTA4NzQ5TCwgMHhENDRGQkQ5QUwsIDB4RDBEQURFQ0JMLCAweEQ1MEFEQTM4TCwKKyAgICAgICAgMHgwMzM5QzMyQUwsIDB4QzY5MTM2NjdMLCAweDhERjkzMTdDTCwgMHhFMEIxMkI0RkwsCisgICAgICAgIDB4Rjc5RTU5QjdMLCAweDQzRjVCQjNBTCwgMHhGMkQ1MTlGRkwsIDB4MjdEOTQ1OUNMLAorICAgICAgICAweEJGOTcyMjJDTCwgMHgxNUU2RkMyQUwsIDB4MEY5MUZDNzFMLCAweDlCOTQxNTI1TCwKKyAgICAgICAgMHhGQUU1OTM2MUwsIDB4Q0VCNjlDRUJMLCAweEMyQTg2NDU5TCwgMHgxMkJBQThEMUwsCisgICAgICAgIDB4QjZDMTA3NUVMLCAweEUzMDU2QTBDTCwgMHgxMEQyNTA2NUwsIDB4Q0IwM0E0NDJMLAorICAgICAgICAweEUwRUM2RTBFTCwgMHgxNjk4REIzQkwsIDB4NEM5OEEwQkVMLCAweDMyNzhFOTY0TCwKKyAgICAgICAgMHg5RjFGOTUzMkwsIDB4RTBEMzkyREZMLCAweEQzQTAzNDJCTCwgMHg4OTcxRjIxRUwsCisgICAgICAgIDB4MUIwQTc0NDFMLCAweDRCQTMzNDhDTCwgMHhDNUJFNzEyMEwsIDB4QzM3NjMyRDhMLAorICAgICAgICAweERGMzU5RjhETCwgMHg5Qjk5MkYyRUwsIDB4RTYwQjZGNDdMLCAweDBGRTNGMTFETCwKKyAgICAgICAgMHhFNTRDREE1NEwsIDB4MUVEQUQ4OTFMLCAweENFNjI3OUNGTCwgMHhDRDNFN0U2RkwsCisgICAgICAgIDB4MTYxOEIxNjZMLCAweEZEMkMxRDA1TCwgMHg4NDhGRDJDNUwsIDB4RjZGQjIyOTlMLAorICAgICAgICAweEY1MjNGMzU3TCwgMHhBNjMyNzYyM0wsIDB4OTNBODM1MzFMLCAweDU2Q0NDRDAyTCwKKyAgICAgICAgMHhBQ0YwODE2MkwsIDB4NUE3NUVCQjVMLCAweDZFMTYzNjk3TCwgMHg4OEQyNzNDQ0wsCisgICAgICAgIDB4REU5NjYyOTJMLCAweDgxQjk0OUQwTCwgMHg0QzUwOTAxQkwsIDB4NzFDNjU2MTRMLAorICAgICAgICAweEU2QzZDN0JETCwgMHgzMjdBMTQwQUwsIDB4NDVFMUQwMDZMLCAweEMzRjI3QjlBTCwKKyAgICAgICAgMHhDOUFBNTNGREwsIDB4NjJBODBGMDBMLCAweEJCMjVCRkUyTCwgMHgzNUJERDJGNkwsCisgICAgICAgIDB4NzExMjY5MDVMLCAweEIyMDQwMjIyTCwgMHhCNkNCQ0Y3Q0wsIDB4Q0Q3NjlDMkJMLAorICAgICAgICAweDUzMTEzRUMwTCwgMHgxNjQwRTNEM0wsIDB4MzhBQkJENjBMLCAweDI1NDdBREYwTCwKKyAgICAgICAgMHhCQTM4MjA5Q0wsIDB4Rjc0NkNFNzZMLCAweDc3QUZBMUM1TCwgMHgyMDc1NjA2MEwsCisgICAgICAgIDB4ODVDQkZFNEVMLCAweDhBRTg4REQ4TCwgMHg3QUFBRjlCMEwsIDB4NENGOUFBN0VMLAorICAgICAgICAweDE5NDhDMjVDTCwgMHgwMkZCOEE4Q0wsIDB4MDFDMzZBRTRMLCAweEQ2RUJFMUY5TCwKKyAgICAgICAgMHg5MEQ0Rjg2OUwsIDB4QTY1Q0RFQTBMLCAweDNGMDkyNTJETCwgMHhDMjA4RTY5RkwsCisgICAgICAgIDB4Qjc0RTYxMzJMLCAweENFNzdFMjVCTCwgMHg1NzhGREZFM0wsIDB4M0FDMzcyRTZMICB9Cit9OworCisjZW5kaWYgLyogIU1CRURUTFNfQkxPV0ZJU0hfQUxUICovCisjZW5kaWYgLyogTUJFRFRMU19CTE9XRklTSF9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jYW1lbGxpYS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY2FtZWxsaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzZmOTZhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY2FtZWxsaWEuYwpAQCAtMCwwICsxLDEwNzIgQEAKKy8qCisgKiAgQ2FtZWxsaWEgaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIENhbWVsbGlhIGJsb2NrIGNpcGhlciB3YXMgZGVzaWduZWQgYnkgTlRUIGFuZCBNaXRzdWJpc2hpIEVsZWN0cmljCisgKiAgQ29ycG9yYXRpb24uCisgKgorICogIGh0dHA6Ly9pbmZvLmlzbC5udHQuY28uanAvY3J5cHQvZW5nL2NhbWVsbGlhL2RsLzAxZXNwZWMucGRmCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9jYW1lbGxpYS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQUxUKQorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIqKXY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIDMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbiBtYWNyb3MgKGJpZyBlbmRpYW4pCisgKi8KKyNpZm5kZWYgR0VUX1VJTlQzMl9CRQorI2RlZmluZSBHRVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobikgPSAoICh1aW50MzJfdCkgKGIpWyhpKSAgICBdIDw8IDI0ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMV0gPDwgMTYgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAyXSA8PCAgOCApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDNdICAgICAgICk7ICAgICAgICAgICAgXAorfQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQzMl9CRQorI2RlZmluZSBQVVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoYilbKGkpICAgIF0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMjQgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAxNiApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDJdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+ICA4ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgM10gPSAodW5zaWduZWQgY2hhcikgKCAobikgICAgICAgKTsgICAgICAgXAorfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFNJR01BX0NIQVJTWzZdWzhdID0KK3sKKyAgICB7IDB4YTAsIDB4OWUsIDB4NjYsIDB4N2YsIDB4M2IsIDB4Y2MsIDB4OTAsIDB4OGIgfSwKKyAgICB7IDB4YjYsIDB4N2EsIDB4ZTgsIDB4NTgsIDB4NGMsIDB4YWEsIDB4NzMsIDB4YjIgfSwKKyAgICB7IDB4YzYsIDB4ZWYsIDB4MzcsIDB4MmYsIDB4ZTksIDB4NGYsIDB4ODIsIDB4YmUgfSwKKyAgICB7IDB4NTQsIDB4ZmYsIDB4NTMsIDB4YTUsIDB4ZjEsIDB4ZDMsIDB4NmYsIDB4MWMgfSwKKyAgICB7IDB4MTAsIDB4ZTUsIDB4MjcsIDB4ZmEsIDB4ZGUsIDB4NjgsIDB4MmQsIDB4MWQgfSwKKyAgICB7IDB4YjAsIDB4NTYsIDB4ODgsIDB4YzIsIDB4YjMsIDB4ZTYsIDB4YzEsIDB4ZmQgfQorfTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkpCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIEZTYlsyNTZdID0KK3sKKyAgICAxMTIsMTMwLCA0NCwyMzYsMTc5LCAzOSwxOTIsMjI5LDIyOCwxMzMsIDg3LCA1MywyMzQsIDEyLDE3NCwgNjUsCisgICAgIDM1LDIzOSwxMDcsMTQ3LCA2OSwgMjUsMTY1LCAzMywyMzcsIDE0LCA3OSwgNzgsIDI5LDEwMSwxNDYsMTg5LAorICAgIDEzNCwxODQsMTc1LDE0MywxMjQsMjM1LCAzMSwyMDYsIDYyLCA0OCwyMjAsIDk1LCA5NCwxOTcsIDExLCAyNiwKKyAgICAxNjYsMjI1LCA1NywyMDIsMjEzLCA3MSwgOTMsIDYxLDIxNywgIDEsIDkwLDIxNCwgODEsIDg2LDEwOCwgNzcsCisgICAgMTM5LCAxMywxNTQsMTAyLDI1MSwyMDQsMTc2LCA0NSwxMTYsIDE4LCA0MywgMzIsMjQwLDE3NywxMzIsMTUzLAorICAgIDIyMywgNzYsMjAzLDE5NCwgNTIsMTI2LDExOCwgIDUsMTA5LDE4MywxNjksIDQ5LDIwOSwgMjMsICA0LDIxNSwKKyAgICAgMjAsIDg4LCA1OCwgOTcsMjIyLCAyNywgMTcsIDI4LCA1MCwgMTUsMTU2LCAyMiwgODMsIDI0LDI0MiwgMzQsCisgICAgMjU0LCA2OCwyMDcsMTc4LDE5NSwxODEsMTIyLDE0NSwgMzYsICA4LDIzMiwxNjgsIDk2LDI1MiwxMDUsIDgwLAorICAgIDE3MCwyMDgsMTYwLDEyNSwxNjEsMTM3LCA5OCwxNTEsIDg0LCA5MSwgMzAsMTQ5LDIyNCwyNTUsMTAwLDIxMCwKKyAgICAgMTYsMTk2LCAgMCwgNzIsMTYzLDI0NywxMTcsMjE5LDEzOCwgIDMsMjMwLDIxOCwgIDksIDYzLDIyMSwxNDgsCisgICAgMTM1LCA5MiwxMzEsICAyLDIwNSwgNzQsMTQ0LCA1MSwxMTUsMTAzLDI0NiwyNDMsMTU3LDEyNywxOTEsMjI2LAorICAgICA4MiwxNTUsMjE2LCAzOCwyMDAsIDU1LDE5OCwgNTksMTI5LDE1MCwxMTEsIDc1LCAxOSwxOTAsIDk5LCA0NiwKKyAgICAyMzMsMTIxLDE2NywxNDAsMTU5LDExMCwxODgsMTQyLCA0MSwyNDUsMjQ5LDE4MiwgNDcsMjUzLDE4MCwgODksCisgICAgMTIwLDE1MiwgIDYsMTA2LDIzMSwgNzAsMTEzLDE4NiwyMTIsIDM3LDE3MSwgNjYsMTM2LDE2MiwxNDEsMjUwLAorICAgIDExNCwgIDcsMTg1LCA4NSwyNDgsMjM4LDE3MiwgMTAsIDU0LCA3MywgNDIsMTA0LCA2MCwgNTYsMjQxLDE2NCwKKyAgICAgNjQsIDQwLDIxMSwxMjMsMTg3LDIwMSwgNjcsMTkzLCAyMSwyMjcsMTczLDI0NCwxMTksMTk5LDEyOCwxNTgKK307CisKKyNkZWZpbmUgU0JPWDEobikgRlNiWyhuKV0KKyNkZWZpbmUgU0JPWDIobikgKHVuc2lnbmVkIGNoYXIpKChGU2JbKG4pXSA+PiA3IF4gRlNiWyhuKV0gPDwgMSkgJiAweGZmKQorI2RlZmluZSBTQk9YMyhuKSAodW5zaWduZWQgY2hhcikoKEZTYlsobildID4+IDEgXiBGU2JbKG4pXSA8PCA3KSAmIDB4ZmYpCisjZGVmaW5lIFNCT1g0KG4pIEZTYlsoKG4pIDw8IDEgXiAobikgPj4gNykgJjB4ZmZdCisKKyNlbHNlIC8qIE1CRURUTFNfQ0FNRUxMSUFfU01BTExfTUVNT1JZICovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIEZTYlsyNTZdID0KK3sKKyAxMTIsIDEzMCwgIDQ0LCAyMzYsIDE3OSwgIDM5LCAxOTIsIDIyOSwgMjI4LCAxMzMsICA4NywgIDUzLCAyMzQsICAxMiwgMTc0LCAgNjUsCisgIDM1LCAyMzksIDEwNywgMTQ3LCAgNjksICAyNSwgMTY1LCAgMzMsIDIzNywgIDE0LCAgNzksICA3OCwgIDI5LCAxMDEsIDE0NiwgMTg5LAorIDEzNCwgMTg0LCAxNzUsIDE0MywgMTI0LCAyMzUsICAzMSwgMjA2LCAgNjIsICA0OCwgMjIwLCAgOTUsICA5NCwgMTk3LCAgMTEsICAyNiwKKyAxNjYsIDIyNSwgIDU3LCAyMDIsIDIxMywgIDcxLCAgOTMsICA2MSwgMjE3LCAgIDEsICA5MCwgMjE0LCAgODEsICA4NiwgMTA4LCAgNzcsCisgMTM5LCAgMTMsIDE1NCwgMTAyLCAyNTEsIDIwNCwgMTc2LCAgNDUsIDExNiwgIDE4LCAgNDMsICAzMiwgMjQwLCAxNzcsIDEzMiwgMTUzLAorIDIyMywgIDc2LCAyMDMsIDE5NCwgIDUyLCAxMjYsIDExOCwgICA1LCAxMDksIDE4MywgMTY5LCAgNDksIDIwOSwgIDIzLCAgIDQsIDIxNSwKKyAgMjAsICA4OCwgIDU4LCAgOTcsIDIyMiwgIDI3LCAgMTcsICAyOCwgIDUwLCAgMTUsIDE1NiwgIDIyLCAgODMsICAyNCwgMjQyLCAgMzQsCisgMjU0LCAgNjgsIDIwNywgMTc4LCAxOTUsIDE4MSwgMTIyLCAxNDUsICAzNiwgICA4LCAyMzIsIDE2OCwgIDk2LCAyNTIsIDEwNSwgIDgwLAorIDE3MCwgMjA4LCAxNjAsIDEyNSwgMTYxLCAxMzcsICA5OCwgMTUxLCAgODQsICA5MSwgIDMwLCAxNDksIDIyNCwgMjU1LCAxMDAsIDIxMCwKKyAgMTYsIDE5NiwgICAwLCAgNzIsIDE2MywgMjQ3LCAxMTcsIDIxOSwgMTM4LCAgIDMsIDIzMCwgMjE4LCAgIDksICA2MywgMjIxLCAxNDgsCisgMTM1LCAgOTIsIDEzMSwgICAyLCAyMDUsICA3NCwgMTQ0LCAgNTEsIDExNSwgMTAzLCAyNDYsIDI0MywgMTU3LCAxMjcsIDE5MSwgMjI2LAorICA4MiwgMTU1LCAyMTYsICAzOCwgMjAwLCAgNTUsIDE5OCwgIDU5LCAxMjksIDE1MCwgMTExLCAgNzUsICAxOSwgMTkwLCAgOTksICA0NiwKKyAyMzMsIDEyMSwgMTY3LCAxNDAsIDE1OSwgMTEwLCAxODgsIDE0MiwgIDQxLCAyNDUsIDI0OSwgMTgyLCAgNDcsIDI1MywgMTgwLCAgODksCisgMTIwLCAxNTIsICAgNiwgMTA2LCAyMzEsICA3MCwgMTEzLCAxODYsIDIxMiwgIDM3LCAxNzEsICA2NiwgMTM2LCAxNjIsIDE0MSwgMjUwLAorIDExNCwgICA3LCAxODUsICA4NSwgMjQ4LCAyMzgsIDE3MiwgIDEwLCAgNTQsICA3MywgIDQyLCAxMDQsICA2MCwgIDU2LCAyNDEsIDE2NCwKKyA2NCwgIDQwLCAyMTEsIDEyMywgMTg3LCAyMDEsICA2NywgMTkzLCAgMjEsIDIyNywgMTczLCAyNDQsIDExOSwgMTk5LCAxMjgsIDE1OAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgRlNiMlsyNTZdID0KK3sKKyAyMjQsICAgNSwgIDg4LCAyMTcsIDEwMywgIDc4LCAxMjksIDIwMywgMjAxLCAgMTEsIDE3NCwgMTA2LCAyMTMsICAyNCwgIDkzLCAxMzAsCisgIDcwLCAyMjMsIDIxNCwgIDM5LCAxMzgsICA1MCwgIDc1LCAgNjYsIDIxOSwgIDI4LCAxNTgsIDE1NiwgIDU4LCAyMDIsICAzNywgMTIzLAorICAxMywgMTEzLCAgOTUsICAzMSwgMjQ4LCAyMTUsICA2MiwgMTU3LCAxMjQsICA5NiwgMTg1LCAxOTAsIDE4OCwgMTM5LCAgMjIsICA1MiwKKyAgNzcsIDE5NSwgMTE0LCAxNDksIDE3MSwgMTQyLCAxODYsIDEyMiwgMTc5LCAgIDIsIDE4MCwgMTczLCAxNjIsIDE3MiwgMjE2LCAxNTQsCisgIDIzLCAgMjYsICA1MywgMjA0LCAyNDcsIDE1MywgIDk3LCAgOTAsIDIzMiwgIDM2LCAgODYsICA2NCwgMjI1LCAgOTksICAgOSwgIDUxLAorIDE5MSwgMTUyLCAxNTEsIDEzMywgMTA0LCAyNTIsIDIzNiwgIDEwLCAyMTgsIDExMSwgIDgzLCAgOTgsIDE2MywgIDQ2LCAgIDgsIDE3NSwKKyAgNDAsIDE3NiwgMTE2LCAxOTQsIDE4OSwgIDU0LCAgMzQsICA1NiwgMTAwLCAgMzAsICA1NywgIDQ0LCAxNjYsICA0OCwgMjI5LCAgNjgsCisgMjUzLCAxMzYsIDE1OSwgMTAxLCAxMzUsIDEwNywgMjQ0LCAgMzUsICA3MiwgIDE2LCAyMDksICA4MSwgMTkyLCAyNDksIDIxMCwgMTYwLAorICA4NSwgMTYxLCAgNjUsIDI1MCwgIDY3LCAgMTksIDE5NiwgIDQ3LCAxNjgsIDE4MiwgIDYwLCAgNDMsIDE5MywgMjU1LCAyMDAsIDE2NSwKKyAgMzIsIDEzNywgICAwLCAxNDQsICA3MSwgMjM5LCAyMzQsIDE4MywgIDIxLCAgIDYsIDIwNSwgMTgxLCAgMTgsIDEyNiwgMTg3LCAgNDEsCisgIDE1LCAxODQsICAgNywgICA0LCAxNTUsIDE0OCwgIDMzLCAxMDIsIDIzMCwgMjA2LCAyMzcsIDIzMSwgIDU5LCAyNTQsIDEyNywgMTk3LAorIDE2NCwgIDU1LCAxNzcsICA3NiwgMTQ1LCAxMTAsIDE0MSwgMTE4LCAgIDMsICA0NSwgMjIyLCAxNTAsICAzOCwgMTI1LCAxOTgsICA5MiwKKyAyMTEsIDI0MiwgIDc5LCAgMjUsICA2MywgMjIwLCAxMjEsICAyOSwgIDgyLCAyMzUsIDI0MywgMTA5LCAgOTQsIDI1MSwgMTA1LCAxNzgsCisgMjQwLCAgNDksICAxMiwgMjEyLCAyMDcsIDE0MCwgMjI2LCAxMTcsIDE2OSwgIDc0LCAgODcsIDEzMiwgIDE3LCAgNjksICAyNywgMjQ1LAorIDIyOCwgIDE0LCAxMTUsIDE3MCwgMjQxLCAyMjEsICA4OSwgIDIwLCAxMDgsIDE0NiwgIDg0LCAyMDgsIDEyMCwgMTEyLCAyMjcsICA3MywKKyAxMjgsICA4MCwgMTY3LCAyNDYsIDExOSwgMTQ3LCAxMzQsIDEzMSwgIDQyLCAxOTksICA5MSwgMjMzLCAyMzgsIDE0MywgICAxLCAgNjEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIEZTYjNbMjU2XSA9Cit7CisgIDU2LCAgNjUsICAyMiwgMTE4LCAyMTcsIDE0NywgIDk2LCAyNDIsIDExNCwgMTk0LCAxNzEsIDE1NCwgMTE3LCAgIDYsICA4NywgMTYwLAorIDE0NSwgMjQ3LCAxODEsIDIwMSwgMTYyLCAxNDAsIDIxMCwgMTQ0LCAyNDYsICAgNywgMTY3LCAgMzksIDE0MiwgMTc4LCAgNzMsIDIyMiwKKyAgNjcsICA5MiwgMjE1LCAxOTksICA2MiwgMjQ1LCAxNDMsIDEwMywgIDMxLCAgMjQsIDExMCwgMTc1LCAgNDcsIDIyNiwgMTMzLCAgMTMsCisgIDgzLCAyNDAsIDE1NiwgMTAxLCAyMzQsIDE2MywgMTc0LCAxNTgsIDIzNiwgMTI4LCAgNDUsIDEwNywgMTY4LCAgNDMsICA1NCwgMTY2LAorIDE5NywgMTM0LCAgNzcsICA1MSwgMjUzLCAxMDIsICA4OCwgMTUwLCAgNTgsICAgOSwgMTQ5LCAgMTYsIDEyMCwgMjE2LCAgNjYsIDIwNCwKKyAyMzksICAzOCwgMjI5LCAgOTcsICAyNiwgIDYzLCAgNTksIDEzMCwgMTgyLCAyMTksIDIxMiwgMTUyLCAyMzIsIDEzOSwgICAyLCAyMzUsCisgIDEwLCAgNDQsICAyOSwgMTc2LCAxMTEsIDE0MSwgMTM2LCAgMTQsICAyNSwgMTM1LCAgNzgsICAxMSwgMTY5LCAgMTIsIDEyMSwgIDE3LAorIDEyNywgIDM0LCAyMzEsICA4OSwgMjI1LCAyMTgsICA2MSwgMjAwLCAgMTgsICAgNCwgMTE2LCAgODQsICA0OCwgMTI2LCAxODAsICA0MCwKKyAgODUsIDEwNCwgIDgwLCAxOTAsIDIwOCwgMTk2LCAgNDksIDIwMywgIDQyLCAxNzMsICAxNSwgMjAyLCAxMTIsIDI1NSwgIDUwLCAxMDUsCisgICA4LCAgOTgsICAgMCwgIDM2LCAyMDksIDI1MSwgMTg2LCAyMzcsICA2OSwgMTI5LCAxMTUsIDEwOSwgMTMyLCAxNTksIDIzOCwgIDc0LAorIDE5NSwgIDQ2LCAxOTMsICAgMSwgMjMwLCAgMzcsICA3MiwgMTUzLCAxODUsIDE3OSwgMTIzLCAyNDksIDIwNiwgMTkxLCAyMjMsIDExMywKKyAgNDEsIDIwNSwgMTA4LCAgMTksIDEwMCwgMTU1LCAgOTksIDE1NywgMTkyLCAgNzUsIDE4MywgMTY1LCAxMzcsICA5NSwgMTc3LCAgMjMsCisgMjQ0LCAxODgsIDIxMSwgIDcwLCAyMDcsICA1NSwgIDk0LCAgNzEsIDE0OCwgMjUwLCAyNTIsICA5MSwgMTUxLCAyNTQsICA5MCwgMTcyLAorICA2MCwgIDc2LCAgIDMsICA1MywgMjQzLCAgMzUsIDE4NCwgIDkzLCAxMDYsIDE0NiwgMjEzLCAgMzMsICA2OCwgIDgxLCAxOTgsIDEyNSwKKyAgNTcsIDEzMSwgMjIwLCAxNzAsIDEyNCwgMTE5LCAgODYsICAgNSwgIDI3LCAxNjQsICAyMSwgIDUyLCAgMzAsICAyOCwgMjQ4LCAgODIsCisgIDMyLCAgMjAsIDIzMywgMTg5LCAyMjEsIDIyOCwgMTYxLCAyMjQsIDEzOCwgMjQxLCAyMTQsIDEyMiwgMTg3LCAyMjcsICA2NCwgIDc5Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBGU2I0WzI1Nl0gPQoreworIDExMiwgIDQ0LCAxNzksIDE5MiwgMjI4LCAgODcsIDIzNCwgMTc0LCAgMzUsIDEwNywgIDY5LCAxNjUsIDIzNywgIDc5LCAgMjksIDE0NiwKKyAxMzQsIDE3NSwgMTI0LCAgMzEsICA2MiwgMjIwLCAgOTQsICAxMSwgMTY2LCAgNTcsIDIxMywgIDkzLCAyMTcsICA5MCwgIDgxLCAxMDgsCisgMTM5LCAxNTQsIDI1MSwgMTc2LCAxMTYsICA0MywgMjQwLCAxMzIsIDIyMywgMjAzLCAgNTIsIDExOCwgMTA5LCAxNjksIDIwOSwgICA0LAorICAyMCwgIDU4LCAyMjIsICAxNywgIDUwLCAxNTYsICA4MywgMjQyLCAyNTQsIDIwNywgMTk1LCAxMjIsICAzNiwgMjMyLCAgOTYsIDEwNSwKKyAxNzAsIDE2MCwgMTYxLCAgOTgsICA4NCwgIDMwLCAyMjQsIDEwMCwgIDE2LCAgIDAsIDE2MywgMTE3LCAxMzgsIDIzMCwgICA5LCAyMjEsCisgMTM1LCAxMzEsIDIwNSwgMTQ0LCAxMTUsIDI0NiwgMTU3LCAxOTEsICA4MiwgMjE2LCAyMDAsIDE5OCwgMTI5LCAxMTEsICAxOSwgIDk5LAorIDIzMywgMTY3LCAxNTksIDE4OCwgIDQxLCAyNDksICA0NywgMTgwLCAxMjAsICAgNiwgMjMxLCAxMTMsIDIxMiwgMTcxLCAxMzYsIDE0MSwKKyAxMTQsIDE4NSwgMjQ4LCAxNzIsICA1NCwgIDQyLCAgNjAsIDI0MSwgIDY0LCAyMTEsIDE4NywgIDY3LCAgMjEsIDE3MywgMTE5LCAxMjgsCisgMTMwLCAyMzYsICAzOSwgMjI5LCAxMzMsICA1MywgIDEyLCAgNjUsIDIzOSwgMTQ3LCAgMjUsICAzMywgIDE0LCAgNzgsIDEwMSwgMTg5LAorIDE4NCwgMTQzLCAyMzUsIDIwNiwgIDQ4LCAgOTUsIDE5NywgIDI2LCAyMjUsIDIwMiwgIDcxLCAgNjEsICAgMSwgMjE0LCAgODYsICA3NywKKyAgMTMsIDEwMiwgMjA0LCAgNDUsICAxOCwgIDMyLCAxNzcsIDE1MywgIDc2LCAxOTQsIDEyNiwgICA1LCAxODMsICA0OSwgIDIzLCAyMTUsCisgIDg4LCAgOTcsICAyNywgIDI4LCAgMTUsICAyMiwgIDI0LCAgMzQsICA2OCwgMTc4LCAxODEsIDE0NSwgICA4LCAxNjgsIDI1MiwgIDgwLAorIDIwOCwgMTI1LCAxMzcsIDE1MSwgIDkxLCAxNDksIDI1NSwgMjEwLCAxOTYsICA3MiwgMjQ3LCAyMTksICAgMywgMjE4LCAgNjMsIDE0OCwKKyAgOTIsICAgMiwgIDc0LCAgNTEsIDEwMywgMjQzLCAxMjcsIDIyNiwgMTU1LCAgMzgsICA1NSwgIDU5LCAxNTAsICA3NSwgMTkwLCAgNDYsCisgMTIxLCAxNDAsIDExMCwgMTQyLCAyNDUsIDE4MiwgMjUzLCAgODksIDE1MiwgMTA2LCAgNzAsIDE4NiwgIDM3LCAgNjYsIDE2MiwgMjUwLAorICA3LCAgODUsIDIzOCwgIDEwLCAgNzMsIDEwNCwgIDU2LCAxNjQsICA0MCwgMTIzLCAyMDEsIDE5MywgMjI3LCAyNDQsIDE5OSwgMTU4Cit9OworCisjZGVmaW5lIFNCT1gxKG4pIEZTYlsobildCisjZGVmaW5lIFNCT1gyKG4pIEZTYjJbKG4pXQorI2RlZmluZSBTQk9YMyhuKSBGU2IzWyhuKV0KKyNkZWZpbmUgU0JPWDQobikgRlNiNFsobildCisKKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX1NNQUxMX01FTU9SWSAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGlmdHNbMl1bNF1bNF0gPQoreworICAgIHsKKyAgICAgICAgeyAxLCAxLCAxLCAxIH0sIC8qIEtMICovCisgICAgICAgIHsgMCwgMCwgMCwgMCB9LCAvKiBLUiAqLworICAgICAgICB7IDEsIDEsIDEsIDEgfSwgLyogS0EgKi8KKyAgICAgICAgeyAwLCAwLCAwLCAwIH0gIC8qIEtCICovCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgMSwgMCwgMSwgMSB9LCAvKiBLTCAqLworICAgICAgICB7IDEsIDEsIDAsIDEgfSwgLyogS1IgKi8KKyAgICAgICAgeyAxLCAxLCAxLCAwIH0sIC8qIEtBICovCisgICAgICAgIHsgMSwgMSwgMCwgMSB9ICAvKiBLQiAqLworICAgIH0KK307CisKK3N0YXRpYyBjb25zdCBzaWduZWQgY2hhciBpbmRleGVzWzJdWzRdWzIwXSA9Cit7CisgICAgeworICAgICAgICB7ICAwLCAgMSwgIDIsICAzLCAgOCwgIDksIDEwLCAxMSwgMzgsIDM5LAorICAgICAgICAgIDM2LCAzNywgMjMsIDIwLCAyMSwgMjIsIDI3LCAtMSwgLTEsIDI2IH0sIC8qIEtMIC0+IFJLICovCisgICAgICAgIHsgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEgfSwgLyogS1IgLT4gUksgKi8KKyAgICAgICAgeyAgNCwgIDUsICA2LCAgNywgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywKKyAgICAgICAgICAxOCwgMTksIC0xLCAyNCwgMjUsIC0xLCAzMSwgMjgsIDI5LCAzMCB9LCAvKiBLQSAtPiBSSyAqLworICAgICAgICB7IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xIH0gIC8qIEtCIC0+IFJLICovCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgIDAsICAxLCAgMiwgIDMsIDYxLCA2MiwgNjMsIDYwLCAtMSwgLTEsCisgICAgICAgICAgLTEsIC0xLCAyNywgMjQsIDI1LCAyNiwgMzUsIDMyLCAzMywgMzQgfSwgLyogS0wgLT4gUksgKi8KKyAgICAgICAgeyAtMSwgLTEsIC0xLCAtMSwgIDgsICA5LCAxMCwgMTEsIDE2LCAxNywKKyAgICAgICAgICAxOCwgMTksIC0xLCAtMSwgLTEsIC0xLCAzOSwgMzYsIDM3LCAzOCB9LCAvKiBLUiAtPiBSSyAqLworICAgICAgICB7IC0xLCAtMSwgLTEsIC0xLCAxMiwgMTMsIDE0LCAxNSwgNTgsIDU5LAorICAgICAgICAgIDU2LCA1NywgMzEsIDI4LCAyOSwgMzAsIC0xLCAtMSwgLTEsIC0xIH0sIC8qIEtBIC0+IFJLICovCisgICAgICAgIHsgIDQsICA1LCAgNiwgIDcsIDY1LCA2NiwgNjcsIDY0LCAyMCwgMjEsCisgICAgICAgICAgMjIsIDIzLCAtMSwgLTEsIC0xLCAtMSwgNDMsIDQwLCA0MSwgNDIgfSAgLyogS0IgLT4gUksgKi8KKyAgICB9Cit9OworCitzdGF0aWMgY29uc3Qgc2lnbmVkIGNoYXIgdHJhbnNwb3Nlc1syXVsyMF0gPQoreworICAgIHsKKyAgICAgICAgMjEsIDIyLCAyMywgMjAsCisgICAgICAgIC0xLCAtMSwgLTEsIC0xLAorICAgICAgICAxOCwgMTksIDE2LCAxNywKKyAgICAgICAgMTEsICA4LCAgOSwgMTAsCisgICAgICAgIDE1LCAxMiwgMTMsIDE0CisgICAgfSwKKyAgICB7CisgICAgICAgIDI1LCAyNiwgMjcsIDI0LAorICAgICAgICAyOSwgMzAsIDMxLCAyOCwKKyAgICAgICAgMTgsIDE5LCAxNiwgMTcsCisgICAgICAgIC0xLCAtMSwgLTEsIC0xLAorICAgICAgICAtMSwgLTEsIC0xLCAtMQorICAgIH0KK307CisKKy8qIFNoaWZ0IG1hY3JvIGZvciAxMjggYml0IHN0cmluZ3Mgd2l0aCByb3RhdGlvbiBzbWFsbGVyIHRoYW4gMzIgYml0cyAoISkgKi8KKyNkZWZpbmUgUk9UTChERVNULCBTUkMsIFNISUZUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKERFU1QpWzBdID0gKFNSQylbMF0gPDwgKFNISUZUKSBeIChTUkMpWzFdID4+ICgzMiAtIChTSElGVCkpOyAgIFwKKyAgICAoREVTVClbMV0gPSAoU1JDKVsxXSA8PCAoU0hJRlQpIF4gKFNSQylbMl0gPj4gKDMyIC0gKFNISUZUKSk7ICAgXAorICAgIChERVNUKVsyXSA9IChTUkMpWzJdIDw8IChTSElGVCkgXiAoU1JDKVszXSA+PiAoMzIgLSAoU0hJRlQpKTsgICBcCisgICAgKERFU1QpWzNdID0gKFNSQylbM10gPDwgKFNISUZUKSBeIChTUkMpWzBdID4+ICgzMiAtIChTSElGVCkpOyAgIFwKK30KKworI2RlZmluZSBGTChYTCwgWFIsIEtMLCBLUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoWFIpID0gKCgoKFhMKSAmIChLTCkpIDw8IDEpIHwgKCgoWEwpICYgKEtMKSkgPj4gMzEpKSBeIChYUik7ICAgXAorICAgIChYTCkgPSAoKFhSKSB8IChLUikpIF4gKFhMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgRkxJbnYoWUwsIFlSLCBLTCwgS1IpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFlMKSA9ICgoWVIpIHwgKEtSKSkgXiAoWUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoWVIpID0gKCgoKFlMKSAmIChLTCkpIDw8IDEpIHwgKCgoWUwpICYgKEtMKSkgPj4gMzEpKSBeIChZUik7ICAgXAorfQorCisjZGVmaW5lIFNISUZUX0FORF9QTEFDRShJTkRFWCwgT0ZGU0VUKSAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVEtbMF0gPSBLQ1soT0ZGU0VUKSAqIDQgKyAwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVEtbMV0gPSBLQ1soT0ZGU0VUKSAqIDQgKyAxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVEtbMl0gPSBLQ1soT0ZGU0VUKSAqIDQgKyAyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVEtbM10gPSBLQ1soT0ZGU0VUKSAqIDQgKyAzXTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yKCBpID0gMTsgaSA8PSA0OyBpKysgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKCBzaGlmdHNbKElOREVYKV1bKE9GRlNFVCldW2kgLTFdICkgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBST1RMKFRLICsgaSAqIDQsIFRLLCAoIDE1ICogaSApICUgMzIpOyAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yKCBpID0gMDsgaSA8IDIwOyBpKysgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKCBpbmRleGVzWyhJTkRFWCldWyhPRkZTRVQpXVtpXSAhPSAtMSApIHsgICAgICAgICBcCisgICAgICAgICAgICBSS1tpbmRleGVzWyhJTkRFWCldWyhPRkZTRVQpXVtpXV0gPSBUS1sgaSBdOyAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKK3N0YXRpYyB2b2lkIGNhbWVsbGlhX2ZlaXN0ZWwoIGNvbnN0IHVpbnQzMl90IHhbMl0sIGNvbnN0IHVpbnQzMl90IGtbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB6WzJdKQoreworICAgIHVpbnQzMl90IEkwLCBJMTsKKyAgICBJMCA9IHhbMF0gXiBrWzBdOworICAgIEkxID0geFsxXSBeIGtbMV07CisKKyAgICBJMCA9ICgodWludDMyX3QpIFNCT1gxKChJMCA+PiAyNCkgJiAweEZGKSA8PCAyNCkgfAorICAgICAgICAgKCh1aW50MzJfdCkgU0JPWDIoKEkwID4+IDE2KSAmIDB4RkYpIDw8IDE2KSB8CisgICAgICAgICAoKHVpbnQzMl90KSBTQk9YMygoSTAgPj4gIDgpICYgMHhGRikgPDwgIDgpIHwKKyAgICAgICAgICgodWludDMyX3QpIFNCT1g0KChJMCAgICAgICkgJiAweEZGKSAgICAgICk7CisgICAgSTEgPSAoKHVpbnQzMl90KSBTQk9YMigoSTEgPj4gMjQpICYgMHhGRikgPDwgMjQpIHwKKyAgICAgICAgICgodWludDMyX3QpIFNCT1gzKChJMSA+PiAxNikgJiAweEZGKSA8PCAxNikgfAorICAgICAgICAgKCh1aW50MzJfdCkgU0JPWDQoKEkxID4+ICA4KSAmIDB4RkYpIDw8ICA4KSB8CisgICAgICAgICAoKHVpbnQzMl90KSBTQk9YMSgoSTEgICAgICApICYgMHhGRikgICAgICApOworCisgICAgSTAgXj0gKEkxIDw8IDgpIHwgKEkxID4+IDI0KTsKKyAgICBJMSBePSAoSTAgPDwgMTYpIHwgKEkwID4+IDE2KTsKKyAgICBJMCBePSAoSTEgPj4gOCkgfCAoSTEgPDwgMjQpOworICAgIEkxIF49IChJMCA+PiA4KSB8IChJMCA8PCAyNCk7CisKKyAgICB6WzBdIF49IEkxOworICAgIHpbMV0gXj0gSTA7Cit9CisKK3ZvaWQgbWJlZHRsc19jYW1lbGxpYV9pbml0KCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX2NhbWVsbGlhX2ZyZWUoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKSApOworfQorCisvKgorICogQ2FtZWxsaWEga2V5IHNjaGVkdWxlIChlbmNyeXB0aW9uKQorICovCitpbnQgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXliaXRzICkKK3sKKyAgICBpbnQgaWR4OworICAgIHNpemVfdCBpOworICAgIHVpbnQzMl90ICpSSzsKKyAgICB1bnNpZ25lZCBjaGFyIHRbNjRdOworICAgIHVpbnQzMl90IFNJR01BWzZdWzJdOworICAgIHVpbnQzMl90IEtDWzE2XTsKKyAgICB1aW50MzJfdCBUS1syMF07CisKKyAgICBSSyA9IGN0eC0+cms7CisKKyAgICBtZW1zZXQoIHQsIDAsIDY0ICk7CisgICAgbWVtc2V0KCBSSywgMCwgc2l6ZW9mKGN0eC0+cmspICk7CisKKyAgICBzd2l0Y2goIGtleWJpdHMgKQorICAgIHsKKyAgICAgICAgY2FzZSAxMjg6IGN0eC0+bnIgPSAzOyBpZHggPSAwOyBicmVhazsKKyAgICAgICAgY2FzZSAxOTI6CisgICAgICAgIGNhc2UgMjU2OiBjdHgtPm5yID0gNDsgaWR4ID0gMTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQgOiByZXR1cm4oIE1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfS0VZX0xFTkdUSCApOworICAgIH0KKworICAgIGZvciggaSA9IDA7IGkgPCBrZXliaXRzIC8gODsgKytpICkKKyAgICAgICAgdFtpXSA9IGtleVtpXTsKKworICAgIGlmKCBrZXliaXRzID09IDE5MiApIHsKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDg7IGkrKyApCisgICAgICAgICAgICB0WzI0ICsgaV0gPSB+dFsxNiArIGldOworICAgIH0KKworICAgIC8qCisgICAgICogUHJlcGFyZSBTSUdNQSB2YWx1ZXMKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgNjsgaSsrICkgeworICAgICAgICBHRVRfVUlOVDMyX0JFKCBTSUdNQVtpXVswXSwgU0lHTUFfQ0hBUlNbaV0sIDAgKTsKKyAgICAgICAgR0VUX1VJTlQzMl9CRSggU0lHTUFbaV1bMV0sIFNJR01BX0NIQVJTW2ldLCA0ICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBLZXkgc3RvcmFnZSBpbiBLQworICAgICAqIE9yZGVyOiBLTCwgS1IsIEtBLCBLQgorICAgICAqLworICAgIG1lbXNldCggS0MsIDAsIHNpemVvZihLQykgKTsKKworICAgIC8qIFN0b3JlIEtMLCBLUiAqLworICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgICAgICBHRVRfVUlOVDMyX0JFKCBLQ1tpXSwgdCwgaSAqIDQgKTsKKworICAgIC8qIEdlbmVyYXRlIEtBICovCisgICAgZm9yKCBpID0gMDsgaSA8IDQ7ICsraSApCisgICAgICAgIEtDWzggKyBpXSA9IEtDW2ldIF4gS0NbNCArIGldOworCisgICAgY2FtZWxsaWFfZmVpc3RlbCggS0MgKyA4LCBTSUdNQVswXSwgS0MgKyAxMCApOworICAgIGNhbWVsbGlhX2ZlaXN0ZWwoIEtDICsgMTAsIFNJR01BWzFdLCBLQyArIDggKTsKKworICAgIGZvciggaSA9IDA7IGkgPCA0OyArK2kgKQorICAgICAgICBLQ1s4ICsgaV0gXj0gS0NbaV07CisKKyAgICBjYW1lbGxpYV9mZWlzdGVsKCBLQyArIDgsIFNJR01BWzJdLCBLQyArIDEwICk7CisgICAgY2FtZWxsaWFfZmVpc3RlbCggS0MgKyAxMCwgU0lHTUFbM10sIEtDICsgOCApOworCisgICAgaWYoIGtleWJpdHMgPiAxMjggKSB7CisgICAgICAgIC8qIEdlbmVyYXRlIEtCICovCisgICAgICAgIGZvciggaSA9IDA7IGkgPCA0OyArK2kgKQorICAgICAgICAgICAgS0NbMTIgKyBpXSA9IEtDWzQgKyBpXSBeIEtDWzggKyBpXTsKKworICAgICAgICBjYW1lbGxpYV9mZWlzdGVsKCBLQyArIDEyLCBTSUdNQVs0XSwgS0MgKyAxNCApOworICAgICAgICBjYW1lbGxpYV9mZWlzdGVsKCBLQyArIDE0LCBTSUdNQVs1XSwgS0MgKyAxMiApOworICAgIH0KKworICAgIC8qCisgICAgICogR2VuZXJhdGluZyBzdWJrZXlzCisgICAgICovCisKKyAgICAvKiBNYW5pcHVsYXRpbmcgS0wgKi8KKyAgICBTSElGVF9BTkRfUExBQ0UoIGlkeCwgMCApOworCisgICAgLyogTWFuaXB1bGF0aW5nIEtSICovCisgICAgaWYoIGtleWJpdHMgPiAxMjggKSB7CisgICAgICAgIFNISUZUX0FORF9QTEFDRSggaWR4LCAxICk7CisgICAgfQorCisgICAgLyogTWFuaXB1bGF0aW5nIEtBICovCisgICAgU0hJRlRfQU5EX1BMQUNFKCBpZHgsIDIgKTsKKworICAgIC8qIE1hbmlwdWxhdGluZyBLQiAqLworICAgIGlmKCBrZXliaXRzID4gMTI4ICkgeworICAgICAgICBTSElGVF9BTkRfUExBQ0UoIGlkeCwgMyApOworICAgIH0KKworICAgIC8qIERvIHRyYW5zcG9zaXRpb25zICovCisgICAgZm9yKCBpID0gMDsgaSA8IDIwOyBpKysgKSB7CisgICAgICAgIGlmKCB0cmFuc3Bvc2VzW2lkeF1baV0gIT0gLTEgKSB7CisgICAgICAgICAgICBSS1szMiArIDEyICogaWR4ICsgaV0gPSBSS1t0cmFuc3Bvc2VzW2lkeF1baV1dOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBDYW1lbGxpYSBrZXkgc2NoZWR1bGUgKGRlY3J5cHRpb24pCisgKi8KK2ludCBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9kZWMoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMgKQoreworICAgIGludCBpZHgsIHJldDsKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY3R5OworICAgIHVpbnQzMl90ICpSSzsKKyAgICB1aW50MzJfdCAqU0s7CisKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2luaXQoICZjdHkgKTsKKworICAgIC8qIEFsc28gY2hlY2tzIGtleWJpdHMgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoICZjdHksIGtleSwga2V5Yml0cyApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGN0eC0+bnIgPSBjdHkubnI7CisgICAgaWR4ID0gKCBjdHgtPm5yID09IDQgKTsKKworICAgIFJLID0gY3R4LT5yazsKKyAgICBTSyA9IGN0eS5yayArIDI0ICogMiArIDggKiBpZHggKiAyOworCisgICAgKlJLKysgPSAqU0srKzsKKyAgICAqUksrKyA9ICpTSysrOworICAgICpSSysrID0gKlNLKys7CisgICAgKlJLKysgPSAqU0srKzsKKworICAgIGZvciggaSA9IDIyICsgOCAqIGlkeCwgU0sgLT0gNjsgaSA+IDA7IGktLSwgU0sgLT0gNCApCisgICAgeworICAgICAgICAqUksrKyA9ICpTSysrOworICAgICAgICAqUksrKyA9ICpTSysrOworICAgIH0KKworICAgIFNLIC09IDI7CisKKyAgICAqUksrKyA9ICpTSysrOworICAgICpSSysrID0gKlNLKys7CisgICAgKlJLKysgPSAqU0srKzsKKyAgICAqUksrKyA9ICpTSysrOworCitleGl0OgorICAgIG1iZWR0bHNfY2FtZWxsaWFfZnJlZSggJmN0eSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIENhbWVsbGlhLUVDQiBibG9jayBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiKCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbMTZdLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKQoreworICAgIGludCBOUjsKKyAgICB1aW50MzJfdCAqUkssIFhbNF07CisKKyAgICAoICh2b2lkKSBtb2RlICk7CisKKyAgICBOUiA9IGN0eC0+bnI7CisgICAgUksgPSBjdHgtPnJrOworCisgICAgR0VUX1VJTlQzMl9CRSggWFswXSwgaW5wdXQsICAwICk7CisgICAgR0VUX1VJTlQzMl9CRSggWFsxXSwgaW5wdXQsICA0ICk7CisgICAgR0VUX1VJTlQzMl9CRSggWFsyXSwgaW5wdXQsICA4ICk7CisgICAgR0VUX1VJTlQzMl9CRSggWFszXSwgaW5wdXQsIDEyICk7CisKKyAgICBYWzBdIF49ICpSSysrOworICAgIFhbMV0gXj0gKlJLKys7CisgICAgWFsyXSBePSAqUksrKzsKKyAgICBYWzNdIF49ICpSSysrOworCisgICAgd2hpbGUoIE5SICkgeworICAgICAgICAtLU5SOworICAgICAgICBjYW1lbGxpYV9mZWlzdGVsKCBYLCBSSywgWCArIDIgKTsKKyAgICAgICAgUksgKz0gMjsKKyAgICAgICAgY2FtZWxsaWFfZmVpc3RlbCggWCArIDIsIFJLLCBYICk7CisgICAgICAgIFJLICs9IDI7CisgICAgICAgIGNhbWVsbGlhX2ZlaXN0ZWwoIFgsIFJLLCBYICsgMiApOworICAgICAgICBSSyArPSAyOworICAgICAgICBjYW1lbGxpYV9mZWlzdGVsKCBYICsgMiwgUkssIFggKTsKKyAgICAgICAgUksgKz0gMjsKKyAgICAgICAgY2FtZWxsaWFfZmVpc3RlbCggWCwgUkssIFggKyAyICk7CisgICAgICAgIFJLICs9IDI7CisgICAgICAgIGNhbWVsbGlhX2ZlaXN0ZWwoIFggKyAyLCBSSywgWCApOworICAgICAgICBSSyArPSAyOworCisgICAgICAgIGlmKCBOUiApIHsKKyAgICAgICAgICAgIEZMKFhbMF0sIFhbMV0sIFJLWzBdLCBSS1sxXSk7CisgICAgICAgICAgICBSSyArPSAyOworICAgICAgICAgICAgRkxJbnYoWFsyXSwgWFszXSwgUktbMF0sIFJLWzFdKTsKKyAgICAgICAgICAgIFJLICs9IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBYWzJdIF49ICpSSysrOworICAgIFhbM10gXj0gKlJLKys7CisgICAgWFswXSBePSAqUksrKzsKKyAgICBYWzFdIF49ICpSSysrOworCisgICAgUFVUX1VJTlQzMl9CRSggWFsyXSwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJfQkUoIFhbM10sIG91dHB1dCwgIDQgKTsKKyAgICBQVVRfVUlOVDMyX0JFKCBYWzBdLCBvdXRwdXQsICA4ICk7CisgICAgUFVUX1VJTlQzMl9CRSggWFsxXSwgb3V0cHV0LCAxMiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorLyoKKyAqIENhbWVsbGlhLUNCQyBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2NiYyggbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciB0ZW1wWzE2XTsKKworICAgIGlmKCBsZW5ndGggJSAxNiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0FNRUxMSUFfSU5WQUxJRF9JTlBVVF9MRU5HVEggKTsKKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCApCisgICAgeworICAgICAgICB3aGlsZSggbGVuZ3RoID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSggdGVtcCwgaW5wdXQsIDE2ICk7CisgICAgICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2VjYiggY3R4LCBtb2RlLCBpbnB1dCwgb3V0cHV0ICk7CisKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICAgICAgICAgICAgICBvdXRwdXRbaV0gPSAodW5zaWduZWQgY2hhcikoIG91dHB1dFtpXSBeIGl2W2ldICk7CisKKyAgICAgICAgICAgIG1lbWNweSggaXYsIHRlbXAsIDE2ICk7CisKKyAgICAgICAgICAgIGlucHV0ICArPSAxNjsKKyAgICAgICAgICAgIG91dHB1dCArPSAxNjsKKyAgICAgICAgICAgIGxlbmd0aCAtPSAxNjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3aGlsZSggbGVuZ3RoID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICAgICAgICAgICAgICBvdXRwdXRbaV0gPSAodW5zaWduZWQgY2hhcikoIGlucHV0W2ldIF4gaXZbaV0gKTsKKworICAgICAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9lY2IoIGN0eCwgbW9kZSwgb3V0cHV0LCBvdXRwdXQgKTsKKyAgICAgICAgICAgIG1lbWNweSggaXYsIG91dHB1dCwgMTYgKTsKKworICAgICAgICAgICAgaW5wdXQgICs9IDE2OworICAgICAgICAgICAgb3V0cHV0ICs9IDE2OworICAgICAgICAgICAgbGVuZ3RoIC09IDE2OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisvKgorICogQ2FtZWxsaWEtQ0ZCMTI4IGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2ZiMTI4KCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaXZfb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IGM7CisgICAgc2l6ZV90IG4gPSAqaXZfb2ZmOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19DQU1FTExJQV9ERUNSWVBUICkKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGgtLSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBuID09IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiKCBjdHgsIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCwgaXYsIGl2ICk7CisKKyAgICAgICAgICAgIGMgPSAqaW5wdXQrKzsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9ICh1bnNpZ25lZCBjaGFyKSggYyBeIGl2W25dICk7CisgICAgICAgICAgICBpdltuXSA9ICh1bnNpZ25lZCBjaGFyKSBjOworCisgICAgICAgICAgICBuID0gKCBuICsgMSApICYgMHgwRjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3aGlsZSggbGVuZ3RoLS0gKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggbiA9PSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2VjYiggY3R4LCBNQkVEVExTX0NBTUVMTElBX0VOQ1JZUFQsIGl2LCBpdiApOworCisgICAgICAgICAgICBpdltuXSA9ICpvdXRwdXQrKyA9ICh1bnNpZ25lZCBjaGFyKSggaXZbbl0gXiAqaW5wdXQrKyApOworCisgICAgICAgICAgICBuID0gKCBuICsgMSApICYgMHgwRjsKKyAgICAgICAgfQorICAgIH0KKworICAgICppdl9vZmYgPSBuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisvKgorICogQ2FtZWxsaWEtQ1RSIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY3RyKCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuY19vZmYsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbm9uY2VfY291bnRlclsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc3RyZWFtX2Jsb2NrWzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IGMsIGk7CisgICAgc2l6ZV90IG4gPSAqbmNfb2ZmOworCisgICAgd2hpbGUoIGxlbmd0aC0tICkKKyAgICB7CisgICAgICAgIGlmKCBuID09IDAgKSB7CisgICAgICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2VjYiggY3R4LCBNQkVEVExTX0NBTUVMTElBX0VOQ1JZUFQsIG5vbmNlX2NvdW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9ibG9jayApOworCisgICAgICAgICAgICBmb3IoIGkgPSAxNjsgaSA+IDA7IGktLSApCisgICAgICAgICAgICAgICAgaWYoICsrbm9uY2VfY291bnRlcltpIC0gMV0gIT0gMCApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGMgPSAqaW5wdXQrKzsKKyAgICAgICAgKm91dHB1dCsrID0gKHVuc2lnbmVkIGNoYXIpKCBjIF4gc3RyZWFtX2Jsb2NrW25dICk7CisKKyAgICAgICAgbiA9ICggbiArIDEgKSAmIDB4MEY7CisgICAgfQorCisgICAgKm5jX29mZiA9IG47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworI2VuZGlmIC8qICFNQkVEVExTX0NBTUVMTElBX0FMVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworLyoKKyAqIENhbWVsbGlhIHRlc3QgdmVjdG9ycyBmcm9tOgorICoKKyAqIGh0dHA6Ly9pbmZvLmlzbC5udHQuY28uanAvY3J5cHQvZW5nL2NhbWVsbGlhL3RlY2hub2xvZ3kuaHRtbDoKKyAqICAgaHR0cDovL2luZm8uaXNsLm50dC5jby5qcC9jcnlwdC9lbmcvY2FtZWxsaWEvZGwvY3J5cHRyZWMvaW50ZXJtZWRpYXRlLnR4dAorICogICBodHRwOi8vaW5mby5pc2wubnR0LmNvLmpwL2NyeXB0L2VuZy9jYW1lbGxpYS9kbC9jcnlwdHJlYy90X2NhbWVsbGlhLnR4dAorICogICAgICAgICAgICAgICAgICAgICAgKEZvciBlYWNoIGJpdGxlbmd0aDogS2V5IDAsIE5yIDM5KQorICovCisjZGVmaW5lIENBTUVMTElBX1RFU1RTX0VDQiAgMgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYW1lbGxpYV90ZXN0X2VjYl9rZXlbM11bQ0FNRUxMSUFfVEVTVFNfRUNCXVszMl0gPQoreworICAgIHsKKyAgICAgICAgeyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAorICAgICAgICAgIDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAgfSwKKyAgICAgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorICAgIH0sCisgICAgeworICAgICAgICB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCisgICAgICAgICAgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCwKKyAgICAgICAgICAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3IH0sCisgICAgICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorICAgIH0sCisgICAgeworICAgICAgICB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCisgICAgICAgICAgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCwKKyAgICAgICAgICAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAorICAgICAgICAgIDB4ODgsIDB4OTksIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4ZWUsIDB4ZmYgfSwKKyAgICAgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KKyAgICB9LAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2FtZWxsaWFfdGVzdF9lY2JfcGxhaW5bQ0FNRUxMSUFfVEVTVFNfRUNCXVsxNl0gPQoreworICAgIHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKKyAgICAgIDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAgfSwKKyAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNhbWVsbGlhX3Rlc3RfZWNiX2NpcGhlclszXVtDQU1FTExJQV9URVNUU19FQ0JdWzE2XSA9Cit7CisgICAgeworICAgICAgICB7IDB4NjcsIDB4NjcsIDB4MzEsIDB4MzgsIDB4NTQsIDB4OTYsIDB4NjksIDB4NzMsCisgICAgICAgICAgMHgwOCwgMHg1NywgMHgwNiwgMHg1NiwgMHg0OCwgMHhlYSwgMHhiZSwgMHg0MyB9LAorICAgICAgICB7IDB4MzgsIDB4M0MsIDB4NkMsIDB4MkEsIDB4QUIsIDB4RUYsIDB4N0YsIDB4REUsCisgICAgICAgICAgMHgyNSwgMHhDRCwgMHg0NywgMHgwQiwgMHhGNywgMHg3NCwgMHhBMywgMHgzMSB9CisgICAgfSwKKyAgICB7CisgICAgICAgIHsgMHhiNCwgMHg5OSwgMHgzNCwgMHgwMSwgMHhiMywgMHhlOSwgMHg5NiwgMHhmOCwKKyAgICAgICAgICAweDRlLCAweGU1LCAweGNlLCAweGU3LCAweGQ3LCAweDliLCAweDA5LCAweGI5IH0sCisgICAgICAgIHsgMHhEMSwgMHg3NiwgMHgzRiwgMHhDMCwgMHgxOSwgMHhENywgMHg3QywgMHhDOSwKKyAgICAgICAgICAweDMwLCAweEJGLCAweEYyLCAweEE1LCAweDZGLCAweDdDLCAweDkzLCAweDY0IH0KKyAgICB9LAorICAgIHsKKyAgICAgICAgeyAweDlhLCAweGNjLCAweDIzLCAweDdkLCAweGZmLCAweDE2LCAweGQ3LCAweDZjLAorICAgICAgICAgIDB4MjAsIDB4ZWYsIDB4N2MsIDB4OTEsIDB4OWUsIDB4M2EsIDB4NzUsIDB4MDkgfSwKKyAgICAgICAgeyAweDA1LCAweDAzLCAweEZCLCAweDEwLCAweEFCLCAweDI0LCAweDFFLCAweDdDLAorICAgICAgICAgIDB4RjQsIDB4NUQsIDB4OEMsIDB4REUsIDB4RUUsIDB4NDcsIDB4NDMsIDB4MzUgfQorICAgIH0KK307CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2RlZmluZSBDQU1FTExJQV9URVNUU19DQkMgIDMKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2FtZWxsaWFfdGVzdF9jYmNfa2V5WzNdWzMyXSA9Cit7CisgICAgICAgIHsgMHgyQiwgMHg3RSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhBRSwgMHhEMiwgMHhBNiwKKyAgICAgICAgICAweEFCLCAweEY3LCAweDE1LCAweDg4LCAweDA5LCAweENGLCAweDRGLCAweDNDIH0KKyAgICAsCisgICAgICAgIHsgMHg4RSwgMHg3MywgMHhCMCwgMHhGNywgMHhEQSwgMHgwRSwgMHg2NCwgMHg1MiwKKyAgICAgICAgICAweEM4LCAweDEwLCAweEYzLCAweDJCLCAweDgwLCAweDkwLCAweDc5LCAweEU1LAorICAgICAgICAgIDB4NjIsIDB4RjgsIDB4RUEsIDB4RDIsIDB4NTIsIDB4MkMsIDB4NkIsIDB4N0IgfQorICAgICwKKyAgICAgICAgeyAweDYwLCAweDNELCAweEVCLCAweDEwLCAweDE1LCAweENBLCAweDcxLCAweEJFLAorICAgICAgICAgIDB4MkIsIDB4NzMsIDB4QUUsIDB4RjAsIDB4ODUsIDB4N0QsIDB4NzcsIDB4ODEsCisgICAgICAgICAgMHgxRiwgMHgzNSwgMHgyQywgMHgwNywgMHgzQiwgMHg2MSwgMHgwOCwgMHhENywKKyAgICAgICAgICAweDJELCAweDk4LCAweDEwLCAweEEzLCAweDA5LCAweDE0LCAweERGLCAweEY0IH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNhbWVsbGlhX3Rlc3RfY2JjX2l2WzE2XSA9CisKKyAgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGIH0KKzsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2FtZWxsaWFfdGVzdF9jYmNfcGxhaW5bQ0FNRUxMSUFfVEVTVFNfQ0JDXVsxNl0gPQoreworICAgIHsgMHg2QiwgMHhDMSwgMHhCRSwgMHhFMiwgMHgyRSwgMHg0MCwgMHg5RiwgMHg5NiwKKyAgICAgIDB4RTksIDB4M0QsIDB4N0UsIDB4MTEsIDB4NzMsIDB4OTMsIDB4MTcsIDB4MkEgfSwKKyAgICB7IDB4QUUsIDB4MkQsIDB4OEEsIDB4NTcsIDB4MUUsIDB4MDMsIDB4QUMsIDB4OUMsCisgICAgICAweDlFLCAweEI3LCAweDZGLCAweEFDLCAweDQ1LCAweEFGLCAweDhFLCAweDUxIH0sCisgICAgeyAweDMwLCAweEM4LCAweDFDLCAweDQ2LCAweEEzLCAweDVDLCAweEU0LCAweDExLAorICAgICAgMHhFNSwgMHhGQiwgMHhDMSwgMHgxOSwgMHgxQSwgMHgwQSwgMHg1MiwgMHhFRiB9CisKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNhbWVsbGlhX3Rlc3RfY2JjX2NpcGhlclszXVtDQU1FTExJQV9URVNUU19DQkNdWzE2XSA9Cit7CisgICAgeworICAgICAgICB7IDB4MTYsIDB4MDcsIDB4Q0YsIDB4NDksIDB4NEIsIDB4MzYsIDB4QkIsIDB4RjAsCisgICAgICAgICAgMHgwRCwgMHhBRSwgMHhCMCwgMHhCNSwgMHgwMywgMHhDOCwgMHgzMSwgMHhBQiB9LAorICAgICAgICB7IDB4QTIsIDB4RjIsIDB4Q0YsIDB4NjcsIDB4MTYsIDB4MjksIDB4RUYsIDB4NzgsCisgICAgICAgICAgMHg0MCwgMHhDNSwgMHhBNSwgMHhERiwgMHhCNSwgMHgwNywgMHg0OCwgMHg4NyB9LAorICAgICAgICB7IDB4MEYsIDB4MDYsIDB4MTYsIDB4NTAsIDB4MDgsIDB4Q0YsIDB4OEIsIDB4OEIsCisgICAgICAgICAgMHg1QSwgMHg2MywgMHg1OCwgMHg2MywgMHg2MiwgMHg1NCwgMHgzRSwgMHg1NCB9CisgICAgfSwKKyAgICB7CisgICAgICAgIHsgMHgyQSwgMHg0OCwgMHgzMCwgMHhBQiwgMHg1QSwgMHhDNCwgMHhBMSwgMHhBMiwKKyAgICAgICAgICAweDQwLCAweDU5LCAweDU1LCAweEZELCAweDIxLCAweDk1LCAweENGLCAweDkzIH0sCisgICAgICAgIHsgMHg1RCwgMHg1QSwgMHg4NiwgMHg5QiwgMHhEMSwgMHg0QywgMHhFNSwgMHg0MiwKKyAgICAgICAgICAweDY0LCAweEY4LCAweDkyLCAweEE2LCAweERELCAweDJFLCAweEMzLCAweEQ1IH0sCisgICAgICAgIHsgMHgzNywgMHhEMywgMHg1OSwgMHhDMywgMHgzNCwgMHg5OCwgMHgzNiwgMHhEOCwKKyAgICAgICAgICAweDg0LCAweEUzLCAweDEwLCAweEFELCAweERGLCAweDY4LCAweEM0LCAweDQ5IH0KKyAgICB9LAorICAgIHsKKyAgICAgICAgeyAweEU2LCAweENGLCAweEEzLCAweDVGLCAweEMwLCAweDJCLCAweDEzLCAweDRBLAorICAgICAgICAgIDB4NEQsIDB4MkMsIDB4MEIsIDB4NjcsIDB4MzcsIDB4QUMsIDB4M0UsIDB4REEgfSwKKyAgICAgICAgeyAweDM2LCAweENCLCAweEVCLCAweDczLCAweEJELCAweDUwLCAweDRCLCAweDQwLAorICAgICAgICAgIDB4NzAsIDB4QjEsIDB4QjcsIDB4REUsIDB4MkIsIDB4MjEsIDB4RUIsIDB4NTAgfSwKKyAgICAgICAgeyAweEUzLCAweDFBLCAweDYwLCAweDU1LCAweDI5LCAweDdELCAweDk2LCAweENBLAorICAgICAgICAgIDB4MzMsIDB4MzAsIDB4Q0QsIDB4RjEsIDB4QjEsIDB4ODYsIDB4MEEsIDB4ODMgfQorICAgIH0KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisvKgorICogQ2FtZWxsaWEtQ1RSIHRlc3QgdmVjdG9ycyBmcm9tOgorICoKKyAqIGh0dHA6Ly93d3cuZmFxcy5vcmcvcmZjcy9yZmM1NTI4Lmh0bWwKKyAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYW1lbGxpYV90ZXN0X2N0cl9rZXlbM11bMTZdID0KK3sKKyAgICB7IDB4QUUsIDB4NjgsIDB4NTIsIDB4RjgsIDB4MTIsIDB4MTAsIDB4NjcsIDB4Q0MsCisgICAgICAweDRCLCAweEY3LCAweEE1LCAweDc2LCAweDU1LCAweDc3LCAweEYzLCAweDlFIH0sCisgICAgeyAweDdFLCAweDI0LCAweDA2LCAweDc4LCAweDE3LCAweEZBLCAweEUwLCAweEQ3LAorICAgICAgMHg0MywgMHhENiwgMHhDRSwgMHgxRiwgMHgzMiwgMHg1MywgMHg5MSwgMHg2MyB9LAorICAgIHsgMHg3NiwgMHg5MSwgMHhCRSwgMHgwMywgMHg1RSwgMHg1MCwgMHgyMCwgMHhBOCwKKyAgICAgIDB4QUMsIDB4NkUsIDB4NjEsIDB4ODUsIDB4MjksIDB4RjksIDB4QTAsIDB4REMgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2FtZWxsaWFfdGVzdF9jdHJfbm9uY2VfY291bnRlclszXVsxNl0gPQoreworICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSwKKyAgICB7IDB4MDAsIDB4NkMsIDB4QjYsIDB4REIsIDB4QzAsIDB4NTQsIDB4M0IsIDB4NTksCisgICAgICAweERBLCAweDQ4LCAweEQ5LCAweDBCLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0sCisgICAgeyAweDAwLCAweEUwLCAweDAxLCAweDdCLCAweDI3LCAweDc3LCAweDdGLCAweDNGLAorICAgICAgMHg0QSwgMHgxNywgMHg4NiwgMHhGMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYW1lbGxpYV90ZXN0X2N0cl9wdFszXVs0OF0gPQoreworICAgIHsgMHg1MywgMHg2OSwgMHg2RSwgMHg2NywgMHg2QywgMHg2NSwgMHgyMCwgMHg2MiwKKyAgICAgIDB4NkMsIDB4NkYsIDB4NjMsIDB4NkIsIDB4MjAsIDB4NkQsIDB4NzMsIDB4NjcgfSwKKworICAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQiwgMHgxQywgMHgxRCwgMHgxRSwgMHgxRiB9LAorCisgICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisgICAgICAweDE4LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDFGLAorICAgICAgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMyB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYW1lbGxpYV90ZXN0X2N0cl9jdFszXVs0OF0gPQoreworICAgIHsgMHhEMCwgMHg5RCwgMHhDMiwgMHg5QSwgMHg4MiwgMHgxNCwgMHg2MSwgMHg5QSwKKyAgICAgIDB4MjAsIDB4ODcsIDB4N0MsIDB4NzYsIDB4REIsIDB4MUYsIDB4MEIsIDB4M0YgfSwKKyAgICB7IDB4REIsIDB4RjMsIDB4QzcsIDB4OEQsIDB4QzAsIDB4ODMsIDB4OTYsIDB4RDQsCisgICAgICAweERBLCAweDdDLCAweDkwLCAweDc3LCAweDY1LCAweEJCLCAweENCLCAweDQ0LAorICAgICAgMHgyQiwgMHg4RSwgMHg4RSwgMHgwRiwgMHgzMSwgMHhGMCwgMHhEQywgMHhBNywKKyAgICAgIDB4MkMsIDB4NzQsIDB4MTcsIDB4RTMsIDB4NTMsIDB4NjAsIDB4RTAsIDB4NDggfSwKKyAgICB7IDB4QjEsIDB4OUQsIDB4MUYsIDB4Q0QsIDB4Q0IsIDB4NzUsIDB4RUIsIDB4ODgsCisgICAgICAweDJGLCAweDg0LCAweDlDLCAweEUyLCAweDRELCAweDg1LCAweENGLCAweDczLAorICAgICAgMHg5QywgMHhFNiwgMHg0QiwgMHgyQiwgMHg1QywgMHg5RCwgMHg3MywgMHhGMSwKKyAgICAgIDB4NEYsIDB4MkQsIDB4NUQsIDB4OUQsIDB4Q0UsIDB4OTgsIDB4ODksIDB4Q0QsCisgICAgICAweERGLCAweDUwLCAweDg2LCAweDk2IH0KK307CisKK3N0YXRpYyBjb25zdCBpbnQgY2FtZWxsaWFfdGVzdF9jdHJfbGVuWzNdID0KKyAgICB7IDE2LCAzMiwgMzYgfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCisvKgorICogQ2hlY2t1cCByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX2NhbWVsbGlhX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCBpLCBqLCB1LCB2OworICAgIHVuc2lnbmVkIGNoYXIga2V5WzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisgICAgdW5zaWduZWQgY2hhciBzcmNbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0WzE2XTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBzaXplX3Qgb2Zmc2V0LCBsZW47CisgICAgdW5zaWduZWQgY2hhciBub25jZV9jb3VudGVyWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIHN0cmVhbV9ibG9ja1sxNl07CisjZW5kaWYKKworICAgIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCBjdHg7CisKKyAgICBtZW1zZXQoIGtleSwgMCwgMzIgKTsKKworICAgIGZvciggaiA9IDA7IGogPCA2OyBqKysgKSB7CisgICAgICAgIHUgPSBqID4+IDE7CisgICAgdiA9IGogJiAxOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBDQU1FTExJQS1FQ0ItJTNkICglcyk6ICIsIDEyOCArIHUgKiA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodiA9PSBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQpID8gImRlYyIgOiAiZW5jIik7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgQ0FNRUxMSUFfVEVTVFNfRUNCOyBpKysgKSB7CisgICAgICAgIG1lbWNweSgga2V5LCBjYW1lbGxpYV90ZXN0X2VjYl9rZXlbdV1baV0sIDE2ICsgOCAqIHUgKTsKKworICAgICAgICBpZiggdiA9PSBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQgKSB7CisgICAgICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9kZWMoICZjdHgsIGtleSwgMTI4ICsgdSAqIDY0ICk7CisgICAgICAgICAgICBtZW1jcHkoIHNyYywgY2FtZWxsaWFfdGVzdF9lY2JfY2lwaGVyW3VdW2ldLCAxNiApOworICAgICAgICAgICAgbWVtY3B5KCBkc3QsIGNhbWVsbGlhX3Rlc3RfZWNiX3BsYWluW2ldLCAxNiApOworICAgICAgICB9IGVsc2UgeyAvKiBNQkVEVExTX0NBTUVMTElBX0VOQ1JZUFQgKi8KKyAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2VuYyggJmN0eCwga2V5LCAxMjggKyB1ICogNjQgKTsKKyAgICAgICAgICAgIG1lbWNweSggc3JjLCBjYW1lbGxpYV90ZXN0X2VjYl9wbGFpbltpXSwgMTYgKTsKKyAgICAgICAgICAgIG1lbWNweSggZHN0LCBjYW1lbGxpYV90ZXN0X2VjYl9jaXBoZXJbdV1baV0sIDE2ICk7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2VjYiggJmN0eCwgdiwgc3JjLCBidWYgKTsKKworICAgICAgICBpZiggbWVtY21wKCBidWYsIGRzdCwgMTYgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgLyoKKyAgICAgKiBDQkMgbW9kZQorICAgICAqLworICAgIGZvciggaiA9IDA7IGogPCA2OyBqKysgKQorICAgIHsKKyAgICAgICAgdSA9IGogPj4gMTsKKyAgICAgICAgdiA9IGogICYgMTsKKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBDQU1FTExJQS1DQkMtJTNkICglcyk6ICIsIDEyOCArIHUgKiA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB2ID09IE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCApID8gImRlYyIgOiAiZW5jIiApOworCisgICAgICAgIG1lbWNweSggc3JjLCBjYW1lbGxpYV90ZXN0X2NiY19pdiwgMTYgKTsKKyAgICAgICAgbWVtY3B5KCBkc3QsIGNhbWVsbGlhX3Rlc3RfY2JjX2l2LCAxNiApOworICAgICAgICBtZW1jcHkoIGtleSwgY2FtZWxsaWFfdGVzdF9jYmNfa2V5W3VdLCAxNiArIDggKiB1ICk7CisKKyAgICAgICAgaWYoIHYgPT0gTUJFRFRMU19DQU1FTExJQV9ERUNSWVBUICkgeworICAgICAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZGVjKCAmY3R4LCBrZXksIDEyOCArIHUgKiA2NCApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCAmY3R4LCBrZXksIDEyOCArIHUgKiA2NCApOworICAgICAgICB9CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IENBTUVMTElBX1RFU1RTX0NCQzsgaSsrICkgeworCisgICAgICAgICAgICBpZiggdiA9PSBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQgKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KCBpdiAsIHNyYywgMTYgKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoIHNyYywgY2FtZWxsaWFfdGVzdF9jYmNfY2lwaGVyW3VdW2ldLCAxNiApOworICAgICAgICAgICAgICAgIG1lbWNweSggZHN0LCBjYW1lbGxpYV90ZXN0X2NiY19wbGFpbltpXSwgMTYgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7IC8qIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCAqLworICAgICAgICAgICAgICAgIG1lbWNweSggaXYgLCBkc3QsIDE2ICk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCBzcmMsIGNhbWVsbGlhX3Rlc3RfY2JjX3BsYWluW2ldLCAxNiApOworICAgICAgICAgICAgICAgIG1lbWNweSggZHN0LCBjYW1lbGxpYV90ZXN0X2NiY19jaXBoZXJbdV1baV0sIDE2ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2JjKCAmY3R4LCB2LCAxNiwgaXYsIHNyYywgYnVmICk7CisKKyAgICAgICAgICAgIGlmKCBtZW1jbXAoIGJ1ZiwgZHN0LCAxNiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisgICAgLyoKKyAgICAgKiBDVFIgbW9kZQorICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCA2OyBpKysgKQorICAgIHsKKyAgICAgICAgdSA9IGkgPj4gMTsKKyAgICAgICAgdiA9IGkgICYgMTsKKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBDQU1FTExJQS1DVFItMTI4ICglcyk6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdiA9PSBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQgKSA/ICJkZWMiIDogImVuYyIgKTsKKworICAgICAgICBtZW1jcHkoIG5vbmNlX2NvdW50ZXIsIGNhbWVsbGlhX3Rlc3RfY3RyX25vbmNlX2NvdW50ZXJbdV0sIDE2ICk7CisgICAgICAgIG1lbWNweSgga2V5LCBjYW1lbGxpYV90ZXN0X2N0cl9rZXlbdV0sIDE2ICk7CisKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCAmY3R4LCBrZXksIDEyOCApOworCisgICAgICAgIGlmKCB2ID09IE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbiA9IGNhbWVsbGlhX3Rlc3RfY3RyX2xlblt1XTsKKyAgICAgICAgICAgIG1lbWNweSggYnVmLCBjYW1lbGxpYV90ZXN0X2N0cl9jdFt1XSwgbGVuICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY3RyKCAmY3R4LCBsZW4sICZvZmZzZXQsIG5vbmNlX2NvdW50ZXIsIHN0cmVhbV9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBidWYgKTsKKworICAgICAgICAgICAgaWYoIG1lbWNtcCggYnVmLCBjYW1lbGxpYV90ZXN0X2N0cl9wdFt1XSwgbGVuICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbiA9IGNhbWVsbGlhX3Rlc3RfY3RyX2xlblt1XTsKKyAgICAgICAgICAgIG1lbWNweSggYnVmLCBjYW1lbGxpYV90ZXN0X2N0cl9wdFt1XSwgbGVuICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY3RyKCAmY3R4LCBsZW4sICZvZmZzZXQsIG5vbmNlX2NvdW50ZXIsIHN0cmVhbV9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBidWYgKTsKKworICAgICAgICAgICAgaWYoIG1lbWNtcCggYnVmLCBjYW1lbGxpYV90ZXN0X2N0cl9jdFt1XSwgbGVuICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jY20uYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYThmZDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jY20uYwpAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqICBOSVNUIFNQODAwLTM4QyBjb21wbGlhbnQgQ0NNIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qCisgKiBEZWZpbml0aW9uIG9mIENDTToKKyAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9uaXN0cHVicy84MDAtMzhDL1NQODAwLTM4Q191cGRhdGVkLUp1bHkyMF8yMDA3LnBkZgorICogUkZDIDM2MTAgIkNvdW50ZXIgd2l0aCBDQkMtTUFDIChDQ00pIgorICoKKyAqIFJlbGF0ZWQ6CisgKiBSRkMgNTExNiAiQW4gSW50ZXJmYWNlIGFuZCBBbGdvcml0aG1zIGZvciBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24iCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKworI2luY2x1ZGUgIm1iZWR0bHMvY2NtLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpICYmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICYmIE1CRURUTFNfQUVTX0MgKi8KKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyKil2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKyNkZWZpbmUgQ0NNX0VOQ1JZUFQgMAorI2RlZmluZSBDQ01fREVDUllQVCAxCisKKy8qCisgKiBJbml0aWFsaXplIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX2NjbV9pbml0KCBtYmVkdGxzX2NjbV9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfY2NtX2NvbnRleHQgKSApOworfQorCitpbnQgbWJlZHRsc19jY21fc2V0a2V5KCBtYmVkdGxzX2NjbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9pZF90IGNpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXliaXRzICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm87CisKKyAgICBjaXBoZXJfaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV92YWx1ZXMoIGNpcGhlciwga2V5Yml0cywgTUJFRFRMU19NT0RFX0VDQiApOworICAgIGlmKCBjaXBoZXJfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUICk7CisKKyAgICBpZiggY2lwaGVyX2luZm8tPmJsb2NrX3NpemUgIT0gMTYgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQgKTsKKworICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHgtPmNpcGhlcl9jdHggKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LT5jaXBoZXJfY3R4LCBjaXBoZXJfaW5mbyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoICZjdHgtPmNpcGhlcl9jdHgsIGtleSwga2V5Yml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOQ1JZUFQgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEZyZWUgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfY2NtX2ZyZWUoIG1iZWR0bHNfY2NtX2NvbnRleHQgKmN0eCApCit7CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eC0+Y2lwaGVyX2N0eCApOworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfY2NtX2NvbnRleHQgKSApOworfQorCisvKgorICogTWFjcm9zIGZvciBjb21tb24gb3BlcmF0aW9ucy4KKyAqIFJlc3VsdHMgaW4gc21hbGxlciBjb21waWxlZCBjb2RlIHRoYW4gc3RhdGljIGlubGluZSBmdW5jdGlvbnMuCisgKi8KKworLyoKKyAqIFVwZGF0ZSB0aGUgQ0JDLU1BQyBzdGF0ZSBpbiB5IHVzaW5nIGEgYmxvY2sgaW4gYgorICogKEFsd2F5cyB1c2luZyBiIGFzIHRoZSBzb3VyY2UgaGVscHMgdGhlIGNvbXBpbGVyIG9wdGltaXNlIGEgYml0IGJldHRlci4pCisgKi8KKyNkZWZpbmUgVVBEQVRFX0NCQ19NQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yKCBpID0gMDsgaSA8IDE2OyBpKysgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5W2ldIF49IGJbaV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY3R4LT5jaXBoZXJfY3R4LCB5LCAxNiwgeSwgJm9sZW4gKSApICE9IDAgKSBcCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKy8qCisgKiBFbmNyeXB0IG9yIGRlY3J5cHQgYSBwYXJ0aWFsIGJsb2NrIHdpdGggQ1RSCisgKiBXYXJuaW5nOiB1c2luZyBiIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSEgc3JjIGFuZCBkc3QgbXVzdCBub3QgYmUgYiEKKyAqIFRoaXMgYXZvaWRzIGFsbG9jYXRpbmcgb25lIG1vcmUgMTYgYnl0ZXMgYnVmZmVyIHdoaWxlIGFsbG93aW5nIHNyYyA9PSBkc3QuCisgKi8KKyNkZWZpbmUgQ1RSX0NSWVBUKCBkc3QsIHNyYywgbGVuICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY3R4LT5jaXBoZXJfY3R4LCBjdHIsIDE2LCBiLCAmb2xlbiApICkgIT0gMCApICBcCisgICAgICAgIHJldHVybiggcmV0ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRzdFtpXSA9IHNyY1tpXSBeIGJbaV07CisKKy8qCisgKiBBdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbgorICovCitzdGF0aWMgaW50IGNjbV9hdXRoX2NyeXB0KCBtYmVkdGxzX2NjbV9jb250ZXh0ICpjdHgsIGludCBtb2RlLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGQsIHNpemVfdCBhZGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgc2l6ZV90IHRhZ19sZW4gKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBpOworICAgIHVuc2lnbmVkIGNoYXIgcTsKKyAgICBzaXplX3QgbGVuX2xlZnQsIG9sZW47CisgICAgdW5zaWduZWQgY2hhciBiWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIHlbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgY3RyWzE2XTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmM7CisgICAgdW5zaWduZWQgY2hhciAqZHN0OworCisgICAgLyoKKyAgICAgKiBDaGVjayBsZW5ndGggcmVxdWlyZW1lbnRzOiBTUDgwMC0zOEMgQS4xCisgICAgICogQWRkaXRpb25hbCByZXF1aXJlbWVudDogYSA8IDJeMTYgLSAyXjggdG8gc2ltcGxpZnkgdGhlIGNvZGUuCisgICAgICogJ2xlbmd0aCcgY2hlY2tlZCBsYXRlciAod2hlbiB3cml0aW5nIGl0IHRvIHRoZSBmaXJzdCBibG9jaykKKyAgICAgKi8KKyAgICBpZiggdGFnX2xlbiA8IDQgfHwgdGFnX2xlbiA+IDE2IHx8IHRhZ19sZW4gJSAyICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQgKTsKKworICAgIC8qIEFsc28gaW1wbGllcyBxIGlzIHdpdGhpbiBib3VuZHMgKi8KKyAgICBpZiggaXZfbGVuIDwgNyB8fCBpdl9sZW4gPiAxMyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVCApOworCisgICAgaWYoIGFkZF9sZW4gPiAweEZGMDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQgKTsKKworICAgIHEgPSAxNiAtIDEgLSAodW5zaWduZWQgY2hhcikgaXZfbGVuOworCisgICAgLyoKKyAgICAgKiBGaXJzdCBibG9jayBCXzA6CisgICAgICogMCAgICAgICAgLi4gMCAgICAgICAgZmxhZ3MKKyAgICAgKiAxICAgICAgICAuLiBpdl9sZW4gICBub25jZSAoYWthIGl2KQorICAgICAqIGl2X2xlbisxIC4uIDE1ICAgICAgIGxlbmd0aAorICAgICAqCisgICAgICogV2l0aCBmbGFncyBhcyAoYml0cyk6CisgICAgICogNyAgICAgICAgMAorICAgICAqIDYgICAgICAgIGFkZCBwcmVzZW50PworICAgICAqIDUgLi4gMyAgICh0IC0gMikgLyAyCisgICAgICogMiAuLiAwICAgcSAtIDEKKyAgICAgKi8KKyAgICBiWzBdID0gMDsKKyAgICBiWzBdIHw9ICggYWRkX2xlbiA+IDAgKSA8PCA2OworICAgIGJbMF0gfD0gKCAoIHRhZ19sZW4gLSAyICkgLyAyICkgPDwgMzsKKyAgICBiWzBdIHw9IHEgLSAxOworCisgICAgbWVtY3B5KCBiICsgMSwgaXYsIGl2X2xlbiApOworCisgICAgZm9yKCBpID0gMCwgbGVuX2xlZnQgPSBsZW5ndGg7IGkgPCBxOyBpKyssIGxlbl9sZWZ0ID4+PSA4ICkKKyAgICAgICAgYlsxNS1pXSA9ICh1bnNpZ25lZCBjaGFyKSggbGVuX2xlZnQgJiAweEZGICk7CisKKyAgICBpZiggbGVuX2xlZnQgPiAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUICk7CisKKworICAgIC8qIFN0YXJ0IENCQy1NQUMgd2l0aCBmaXJzdCBibG9jayAqLworICAgIG1lbXNldCggeSwgMCwgMTYgKTsKKyAgICBVUERBVEVfQ0JDX01BQzsKKworICAgIC8qCisgICAgICogSWYgdGhlcmUgaXMgYWRkaXRpb25hbCBkYXRhLCB1cGRhdGUgQ0JDLU1BQyB3aXRoCisgICAgICogYWRkX2xlbiwgYWRkLCAwIChwYWRkaW5nIHRvIGEgYmxvY2sgYm91bmRhcnkpCisgICAgICovCisgICAgaWYoIGFkZF9sZW4gPiAwICkKKyAgICB7CisgICAgICAgIHNpemVfdCB1c2VfbGVuOworICAgICAgICBsZW5fbGVmdCA9IGFkZF9sZW47CisgICAgICAgIHNyYyA9IGFkZDsKKworICAgICAgICBtZW1zZXQoIGIsIDAsIDE2ICk7CisgICAgICAgIGJbMF0gPSAodW5zaWduZWQgY2hhcikoICggYWRkX2xlbiA+PiA4ICkgJiAweEZGICk7CisgICAgICAgIGJbMV0gPSAodW5zaWduZWQgY2hhcikoICggYWRkX2xlbiAgICAgICkgJiAweEZGICk7CisKKyAgICAgICAgdXNlX2xlbiA9IGxlbl9sZWZ0IDwgMTYgLSAyID8gbGVuX2xlZnQgOiAxNiAtIDI7CisgICAgICAgIG1lbWNweSggYiArIDIsIHNyYywgdXNlX2xlbiApOworICAgICAgICBsZW5fbGVmdCAtPSB1c2VfbGVuOworICAgICAgICBzcmMgKz0gdXNlX2xlbjsKKworICAgICAgICBVUERBVEVfQ0JDX01BQzsKKworICAgICAgICB3aGlsZSggbGVuX2xlZnQgPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgdXNlX2xlbiA9IGxlbl9sZWZ0ID4gMTYgPyAxNiA6IGxlbl9sZWZ0OworCisgICAgICAgICAgICBtZW1zZXQoIGIsIDAsIDE2ICk7CisgICAgICAgICAgICBtZW1jcHkoIGIsIHNyYywgdXNlX2xlbiApOworICAgICAgICAgICAgVVBEQVRFX0NCQ19NQUM7CisKKyAgICAgICAgICAgIGxlbl9sZWZ0IC09IHVzZV9sZW47CisgICAgICAgICAgICBzcmMgKz0gdXNlX2xlbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogUHJlcGFyZSBjb3VudGVyIGJsb2NrIGZvciBlbmNyeXB0aW9uOgorICAgICAqIDAgICAgICAgIC4uIDAgICAgICAgIGZsYWdzCisgICAgICogMSAgICAgICAgLi4gaXZfbGVuICAgbm9uY2UgKGFrYSBpdikKKyAgICAgKiBpdl9sZW4rMSAuLiAxNSAgICAgICBjb3VudGVyIChpbml0aWFsbHkgMSkKKyAgICAgKgorICAgICAqIFdpdGggZmxhZ3MgYXMgKGJpdHMpOgorICAgICAqIDcgLi4gMyAgIDAKKyAgICAgKiAyIC4uIDAgICBxIC0gMQorICAgICAqLworICAgIGN0clswXSA9IHEgLSAxOworICAgIG1lbWNweSggY3RyICsgMSwgaXYsIGl2X2xlbiApOworICAgIG1lbXNldCggY3RyICsgMSArIGl2X2xlbiwgMCwgcSApOworICAgIGN0clsxNV0gPSAxOworCisgICAgLyoKKyAgICAgKiBBdXRoZW50aWNhdGUgYW5kIHtlbixkZX1jcnlwdCB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIGlzCisgICAgICogdGhlIHJlc3BlY3RpdmUgb3JkZXIgb2YgYXV0aGVudGljYXRpb24gYW5kIHtlbixkZX1jcnlwdGlvbi4KKyAgICAgKi8KKyAgICBsZW5fbGVmdCA9IGxlbmd0aDsKKyAgICBzcmMgPSBpbnB1dDsKKyAgICBkc3QgPSBvdXRwdXQ7CisKKyAgICB3aGlsZSggbGVuX2xlZnQgPiAwICkKKyAgICB7CisgICAgICAgIHNpemVfdCB1c2VfbGVuID0gbGVuX2xlZnQgPiAxNiA/IDE2IDogbGVuX2xlZnQ7CisKKyAgICAgICAgaWYoIG1vZGUgPT0gQ0NNX0VOQ1JZUFQgKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1zZXQoIGIsIDAsIDE2ICk7CisgICAgICAgICAgICBtZW1jcHkoIGIsIHNyYywgdXNlX2xlbiApOworICAgICAgICAgICAgVVBEQVRFX0NCQ19NQUM7CisgICAgICAgIH0KKworICAgICAgICBDVFJfQ1JZUFQoIGRzdCwgc3JjLCB1c2VfbGVuICk7CisKKyAgICAgICAgaWYoIG1vZGUgPT0gQ0NNX0RFQ1JZUFQgKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1zZXQoIGIsIDAsIDE2ICk7CisgICAgICAgICAgICBtZW1jcHkoIGIsIGRzdCwgdXNlX2xlbiApOworICAgICAgICAgICAgVVBEQVRFX0NCQ19NQUM7CisgICAgICAgIH0KKworICAgICAgICBkc3QgKz0gdXNlX2xlbjsKKyAgICAgICAgc3JjICs9IHVzZV9sZW47CisgICAgICAgIGxlbl9sZWZ0IC09IHVzZV9sZW47CisKKyAgICAgICAgLyoKKyAgICAgICAgICogSW5jcmVtZW50IGNvdW50ZXIuCisgICAgICAgICAqIE5vIG5lZWQgdG8gY2hlY2sgZm9yIG92ZXJmbG93IHRoYW5rcyB0byB0aGUgbGVuZ3RoIGNoZWNrIGFib3ZlLgorICAgICAgICAgKi8KKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IHE7IGkrKyApCisgICAgICAgICAgICBpZiggKytjdHJbMTUtaV0gIT0gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBBdXRoZW50aWNhdGlvbjogcmVzZXQgY291bnRlciBhbmQgY3J5cHQvbWFzayBpbnRlcm5hbCB0YWcKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgcTsgaSsrICkKKyAgICAgICAgY3RyWzE1LWldID0gMDsKKworICAgIENUUl9DUllQVCggeSwgeSwgMTYgKTsKKyAgICBtZW1jcHkoIHRhZywgeSwgdGFnX2xlbiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBBdXRoZW50aWNhdGVkIGVuY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZyggbWJlZHRsc19jY21fY29udGV4dCAqY3R4LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZCwgc2l6ZV90IGFkZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCB0YWdfbGVuICkKK3sKKyAgICByZXR1cm4oIGNjbV9hdXRoX2NyeXB0KCBjdHgsIENDTV9FTkNSWVBULCBsZW5ndGgsIGl2LCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkLCBhZGRfbGVuLCBpbnB1dCwgb3V0cHV0LCB0YWcsIHRhZ19sZW4gKSApOworfQorCisvKgorICogQXV0aGVudGljYXRlZCBkZWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQoIG1iZWR0bHNfY2NtX2NvbnRleHQgKmN0eCwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGQsIHNpemVfdCBhZGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGFnLCBzaXplX3QgdGFnX2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGNoZWNrX3RhZ1sxNl07CisgICAgdW5zaWduZWQgY2hhciBpOworICAgIGludCBkaWZmOworCisgICAgaWYoICggcmV0ID0gY2NtX2F1dGhfY3J5cHQoIGN0eCwgQ0NNX0RFQ1JZUFQsIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXYsIGl2X2xlbiwgYWRkLCBhZGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgb3V0cHV0LCBjaGVja190YWcsIHRhZ19sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKiBDaGVjayB0YWcgaW4gImNvbnN0YW50LXRpbWUiICovCisgICAgZm9yKCBkaWZmID0gMCwgaSA9IDA7IGkgPCB0YWdfbGVuOyBpKysgKQorICAgICAgICBkaWZmIHw9IHRhZ1tpXSBeIGNoZWNrX3RhZ1tpXTsKKworICAgIGlmKCBkaWZmICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBvdXRwdXQsIGxlbmd0aCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NDTV9BVVRIX0ZBSUxFRCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKSAmJiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisvKgorICogRXhhbXBsZXMgMSB0byAzIGZyb20gU1A4MDAtMzhDIEFwcGVuZGl4IEMKKyAqLworCisjZGVmaW5lIE5CX1RFU1RTIDMKKworLyoKKyAqIFRoZSBkYXRhIGlzIHRoZSBzYW1lIGZvciBhbGwgdGVzdHMsIG9ubHkgdGhlIHVzZWQgbGVuZ3RoIGNoYW5nZXMKKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W10gPSB7CisgICAgMHg0MCwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywKKyAgICAweDQ4LCAweDQ5LCAweDRhLCAweDRiLCAweDRjLCAweDRkLCAweDRlLCAweDRmCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpdltdID0geworICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYgorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWRbXSA9IHsKKyAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnW10gPSB7CisgICAgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwgMHgyNywKKyAgICAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLAorICAgIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCit9OworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGl2X2xlbiBbTkJfVEVTVFNdID0geyA3LCA4LCAgMTIgfTsKK3N0YXRpYyBjb25zdCBzaXplX3QgYWRkX2xlbltOQl9URVNUU10gPSB7IDgsIDE2LCAyMCB9Oworc3RhdGljIGNvbnN0IHNpemVfdCBtc2dfbGVuW05CX1RFU1RTXSA9IHsgNCwgMTYsIDI0IH07CitzdGF0aWMgY29uc3Qgc2l6ZV90IHRhZ19sZW5bTkJfVEVTVFNdID0geyA0LCA2LCAgOCAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVzW05CX1RFU1RTXVszMl0gPSB7CisgICAgeyAgIDB4NzEsIDB4NjIsIDB4MDEsIDB4NWIsIDB4NGQsIDB4YWMsIDB4MjUsIDB4NWQgfSwKKyAgICB7ICAgMHhkMiwgMHhhMSwgMHhmMCwgMHhlMCwgMHg1MSwgMHhlYSwgMHg1ZiwgMHg2MiwKKyAgICAgICAgMHgwOCwgMHgxYSwgMHg3NywgMHg5MiwgMHgwNywgMHgzZCwgMHg1OSwgMHgzZCwKKyAgICAgICAgMHgxZiwgMHhjNiwgMHg0ZiwgMHhiZiwgMHhhYywgMHhjZCB9LAorICAgIHsgICAweGUzLCAweGIyLCAweDAxLCAweGE5LCAweGY1LCAweGI3LCAweDFhLCAweDdhLAorICAgICAgICAweDliLCAweDFjLCAweGVhLCAweGVjLCAweGNkLCAweDk3LCAweGU3LCAweDBiLAorICAgICAgICAweDYxLCAweDc2LCAweGFhLCAweGQ5LCAweGE0LCAweDQyLCAweDhhLCAweGE1LAorICAgICAgICAweDQ4LCAweDQzLCAweDkyLCAweGZiLCAweGMxLCAweGIwLCAweDk5LCAweDUxIH0KK307CisKK2ludCBtYmVkdGxzX2NjbV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBtYmVkdGxzX2NjbV9jb250ZXh0IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIG91dFszMl07CisgICAgc2l6ZV90IGk7CisgICAgaW50IHJldDsKKworICAgIG1iZWR0bHNfY2NtX2luaXQoICZjdHggKTsKKworICAgIGlmKCBtYmVkdGxzX2NjbV9zZXRrZXkoICZjdHgsIE1CRURUTFNfQ0lQSEVSX0lEX0FFUywga2V5LCA4ICogc2l6ZW9mIGtleSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgQ0NNOiBzZXR1cCBmYWlsZWQiICk7CisKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgZm9yKCBpID0gMDsgaSA8IE5CX1RFU1RTOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgQ0NNLUFFUyAjJXU6ICIsICh1bnNpZ25lZCBpbnQpIGkgKyAxICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnKCAmY3R4LCBtc2dfbGVuW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuW2ldLCBhZCwgYWRkX2xlbltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLCBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCArIG1zZ19sZW5baV0sIHRhZ19sZW5baV0gKTsKKworICAgICAgICBpZiggcmV0ICE9IDAgfHwKKyAgICAgICAgICAgIG1lbWNtcCggb3V0LCByZXNbaV0sIG1zZ19sZW5baV0gKyB0YWdfbGVuW2ldICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0KCAmY3R4LCBtc2dfbGVuW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuW2ldLCBhZCwgYWRkX2xlbltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2ldLCBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1tpXSArIG1zZ19sZW5baV0sIHRhZ19sZW5baV0gKTsKKworICAgICAgICBpZiggcmV0ICE9IDAgfHwKKyAgICAgICAgICAgIG1lbWNtcCggb3V0LCBtc2csIG1zZ19sZW5baV0gKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgbWJlZHRsc19jY21fZnJlZSggJmN0eCApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICYmIE1CRURUTFNfQUVTX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NlcnRzLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jZXJ0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZTZiYzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jZXJ0cy5jCkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogIFguNTA5IHRlc3QgY2VydGlmaWNhdGVzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzL2NlcnRzLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0VSVFNfQykKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorI2RlZmluZSBURVNUX0NBX0NSVF9FQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxyXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIk1JSUNVakNDQWRlZ0F3SUJBZ0lKQU1GRDRuNWlROHpvTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVRcclxuIiAgXAorIkFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZcclxuIiAgXAorIlF5QkRRVEFlRncweE16QTVNalF4TlRRNU5EaGFGdzB5TXpBNU1qSXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVRcclxuIiAgXAorIkFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZcclxuIiAgXAorIlF5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnVcclxuIiAgXAorInd3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXlcclxuIiAgXAorImFZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxT0JvRENCblRBZEJnTlZIUTRFRmdRVW5XMGdcclxuIiAgXAorIkpFa0JQeXZMZUxVWnZINGt5ZHY3Tm53d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjdcclxuIiAgXAorIk5ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVcclxuIiAgXAorIkF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHdcclxuIiAgXAorIkNnWUlLb1pJemowRUF3SURhUUF3WmdJeEFNTzBZbk5XS0pVQWZYZ1NKdEp4ZXhuNGlwZytrdjR6bnVSNTB2NTZcclxuIiAgXAorInQ0ZDBQQ3U0MTJtVUM2Tm5kN2l6dnRFMk1nSXhBUDFubkpRalo4Qld1a3N6RlFERzQ4d3hDQ3ljaTlxcGRTTXZcclxuIiAgXAorInVDam44cHdVT2tBQlhLOE1zczkwZnpDZkNFT3RJQT09XHJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cclxuIgorY29uc3QgY2hhciBtYmVkdGxzX3Rlc3RfY2FfY3J0X2VjW10gPSBURVNUX0NBX0NSVF9FQzsKKworY29uc3QgY2hhciBtYmVkdGxzX3Rlc3RfY2Ffa2V5X2VjW10gPQorIi0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLVxyXG4iCisiUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFxyXG4iCisiREVLLUluZm86IERFUy1FREUzLUNCQywzMDdFQUI0Njk5MzNENjRFXHJcbiIKKyJcclxuIgorIkl4YnJSbUtjQXpjdEpxUGRUUUxBNFNXeUJZWUdZSlZrWUVuYStGN1BhNXQ1WWcvZ0tBRHJGS2NtNkI3MmU3REdcclxuIgorImloRXh0Wkk2NDhzMHpkWXc2cVNKNzR2clBTdVdEZTVxbTkzQnFzZlZIOXN2dEN6V0hXMHBtMXAwS1RCQ0ZmVXFcclxuIgorIlVzdVdUSVR3SkltY25sQXMxZ2FSWjNzQVdtN2NPVWlkTDBmbzJHMGZZVUZOY1lvQ1NMZmZDRlRFSEJ1UG5hZ2JcclxuIgorImE3N3gvc1kxQnZpaThTOS9YaERUYjZwVE14MDZ3enJtXHJcbiIKKyItLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tXHJcbiI7CisKK2NvbnN0IGNoYXIgbWJlZHRsc190ZXN0X2NhX3B3ZF9lY1tdID0gIlBvbGFyU1NMVGVzdCI7CisKK2NvbnN0IGNoYXIgbWJlZHRsc190ZXN0X3Nydl9jcnRfZWNbXSA9CisiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXHJcbiIKKyJNSUlDSHpDQ0FhV2dBd0lCQWdJQkNUQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHXHJcbiIKKyJBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOXHJcbiIKKyJNVE13T1RJME1UVTFNakEwV2hjTk1qTXdPVEl5TVRVMU1qQTBXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHXHJcbiIKKyJBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHXHJcbiIKKyJDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDJDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBXHJcbiIKKyIyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY05WYzJLS2c3NkFjaTA3ZitqZ1owd2dab3dDUVlEVlIwVEJBSXdBREFkXHJcbiIKKyJCZ05WSFE0RUZnUVVVR0dsajlRSDJkZUNBUXpsWlgrTVkwYW5FNzR3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCXHJcbiIKKyJQeXZMZUxVWnZINGt5ZHY3Tm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoXHJcbiIKKyJjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQW9HXHJcbiIKKyJDQ3FHU000OUJBTUNBMmdBTUdVQ01RQ2FMRnpYcHR1aTVXUU44TGxPM2RkaDFoTXh4NnR6Z0x2VDAzTVRWSzJTXHJcbiIKKyJDMTJyMEx6M3JpL21vU0VwTlpXcVBqa0NNQ0UyZjUzR1hjWUxxeWZ5SlIwNzhjL3hOU1VVNStYeGw3Vlo0MTRWXHJcbiIKKyJmR2E1a0h2SEFSQlBjOFlBSVZJcUR2SEgxUT09XHJcbiIKKyItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXHJcbiI7CisKK2NvbnN0IGNoYXIgbWJlZHRsc190ZXN0X3Nydl9rZXlfZWNbXSA9CisiLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tXHJcbiIKKyJNSGNDQVFFRUlQRXFFeUIyQW5Db1BMLzlVL1lESHZkcVhZYklvZ1R5d3d5cDYvVWZEdzZub0FvR0NDcUdTTTQ5XHJcbiIKKyJBd0VIb1VRRFFnQUVOOHhXMlhZSkhscHlQc2RaTGY4Z2J1NTgrUWFSZE5DdEZMWDNhQ0paWXBKTzVRRFlJeEgvXHJcbiIKKyI2aS9TTkYxZEZyMktpTUpyZHcxVnpZb3FEdm9CeUxUdC93PT1cclxuIgorIi0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS1cclxuIjsKKworY29uc3QgY2hhciBtYmVkdGxzX3Rlc3RfY2xpX2NydF9lY1tdID0KKyItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cclxuIgorIk1JSUNMRENDQWJLZ0F3SUJBZ0lCRFRBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdcclxuIgorIkExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY05cclxuIgorIk1UTXdPVEkwTVRVMU1qQTBXaGNOTWpNd09USXlNVFUxTWpBMFdqQkJNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdcclxuIgorIkExVUVDaE1JVUc5c1lYSlRVMHd4SHpBZEJnTlZCQU1URmxCdmJHRnlVMU5NSUZSbGMzUWdRMnhwWlc1MElESXdcclxuIgorIldUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSWDVhNnhjOS9Uckx1VHVJSC9FcTd1NWxPc3psVlRcclxuIgorIjlqUU96QzdqWXlVTDM1amk4MXhnTnBiQTFSZ1VjT1YvbjlWTFJSamxzR3pWWFBpV2o0ZHdvK1RIbzRHZE1JR2FcclxuIgorIk1Ba0dBMVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVGSG9BWDRaay9PQmQ1UkVRTzdMbU84UW1QOC9pTUc0R0ExVWRcclxuIgorIkl3Um5NR1dBRkoxdElDUkpBVDhyeTNpMUdieCtKTW5iK3paOG9VS2tRREErTVFzd0NRWURWUVFHRXdKT1RERVJcclxuIgorIk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwR0NcclxuIgorIkNRREJRK0orWWtQTTZEQUtCZ2dxaGtqT1BRUURBZ05vQURCbEFqQktaUTE3SUlPaW1ibW9EL3lON284OXUzQk1cclxuIgorImxnT3Nqbmh3M2ZJT29MSVd5MldPR3NrL0xHRisrRHp2clJ6dU5pQUNNUUNkOGllbTFYUzRKSzdoYWo4eG9jcFVcclxuIgorIkx3alFqZTVQREdIZmQzaDl0UDM4UWtudTViSnF3czBtZDJLT0tIeWVWMFU9XHJcbiIKKyItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXHJcbiI7CisKK2NvbnN0IGNoYXIgbWJlZHRsc190ZXN0X2NsaV9rZXlfZWNbXSA9CisiLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tXHJcbiIKKyJNSGNDQVFFRUlQYjNobVR4WjMvbVpJM3Z5azdwM1Uzd0JmK1dJb3A2aERoa0Z6SmhtTGNxb0FvR0NDcUdTTTQ5XHJcbiIKKyJBd0VIb1VRRFFnQUVWK1d1c1hQZjA2eTdrN2lCL3hLdTd1WlRyTTVWVS9ZMERzd3U0Mk1sQzkrWTR2TmNZRGFXXHJcbiIKKyJ3TlVZRkhEbGY1L1ZTMFVZNWJCczFWejRsbytIY0tQa3h3PT1cclxuIgorIi0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS1cclxuIjsKKworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9jcnRfZWNfbGVuICA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NhX2NydF9lYyApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9rZXlfZWNfbGVuICA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NhX2tleV9lYyApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9wd2RfZWNfbGVuICA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NhX3B3ZF9lYyApIC0gMTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9lY19sZW4gPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9zcnZfY3J0X2VjICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X3Nydl9rZXlfZWNfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9lYyApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jbGlfY3J0X2VjX2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NsaV9jcnRfZWMgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2xpX2tleV9lY19sZW4gPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jbGlfa2V5X2VjICk7CisjZWxzZQorI2RlZmluZSBURVNUX0NBX0NSVF9FQworI2VuZGlmIC8qIE1CRURUTFNfRUNEU0FfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorI2RlZmluZSBURVNUX0NBX0NSVF9SU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxyXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIk1JSURoekNDQW0rZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJcclxuIiAgXAorIk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY05cclxuIiAgXAorIk1URXdNakV5TVRRME5EQXdXaGNOTWpFd01qRXlNVFEwTkRBd1dqQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdcclxuIiAgXAorIkExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3Z2dFaU1BMEdcclxuIiAgXAorIkNTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEQTN6ZjhGN3ZnbHAwL2h0NldNbjFFcFJhZ3pTSHhcclxuIiAgXAorIm1kVHM2c3Q4R0ZnSWxLWHNtOFdMM3hvZW1UaVpoeDU3d0kwNTN6aGRjSGdIMDU3WmsraTVjbEhGenFNd1VxbnlcclxuIiAgXAorIjUwQndGTXRFb25JTHd1VkErVDdscGc2eitleEtZOEM0S1FCMG5GYzdxS1VFa0hIeHZZUFpQOWFsNGp3cWorOG5cclxuIiAgXAorIllNUEduOHU2N0dCOXQrYUVNcjVQKzFnbUlnTmIxTFRWKy9YamxpNXd3T1F1dmZ3dTd1SkJWY0EwTG4wa2NtbkxcclxuIiAgXAorIlI3RVVRSU45Wi9TRzlqR3I4WG1rc3JVdUV2bUVGL0JpYnljK0UxaXhWQTBobW5NM29URFBiNUxjOXVuOHJOc3VcclxuIiAgXAorIktORitBa3Nqb0JYeU9HVmtDZW9NYm80YkY2Qnh5TE9ieWF2cHcvTFBoNWFQZ0FJeW5wbFliNkxWQWdNQkFBR2pcclxuIiAgXAorImdaVXdnWkl3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RUZnUVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekhcclxuIiAgXAorIi9mOHdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlZcclxuIiAgXAorIkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnpcclxuIiAgXAorImRDQkRRWUlCQURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXVQMVUyQUJVa0lzbHNDZmRsYzJpOTRRSEhZZUpcclxuIiAgXAorIlNzUjRFZGdIdGRjaVVJNUk2Mko2TW9tK1kwZFQvN2ErOFM2TVZNQ1pQNkM1TnlOeVh3MUdXWS9ZUjgyWFRKOEhcclxuIiAgXAorIkRCSmlDVG9rNURiWjZTemFPTkJ6ZFdIWHdXd21pNXZnMWR4bjdZeHJNOWQwSWp4TTI3V05LczRzRFFoWkJRa0ZcclxuIiAgXAorInBqbWZzMmNiNG9QbDRZOVQ5bWVUeC9sdmRrUllFdWc2MUpmbjZjQStxSHB5UFlkVEgrVXNoSVRubXA1L1p0a2ZcclxuIiAgXAorIm0vVVRTTEJORk5IZXNpVFplSDMxTmN4WUdkSFNtZTlOYy9nZmlkUmEwRkxPQ2ZXeFJsRnFBSTQ3ekc5akFRQ1pcclxuIiAgXAorIjdaMm1DR0ROTWhqUWMrQlljZG5sMGxQWGpkREs2VjBxQ2cxZFZld2hVQmNXNWdaS3pWN2U5K0RwVkE9PVxyXG4iICAgICAgXAorIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cclxuIgorY29uc3QgY2hhciBtYmVkdGxzX3Rlc3RfY2FfY3J0X3JzYVtdID0gVEVTVF9DQV9DUlRfUlNBOworCitjb25zdCBjaGFyIG1iZWR0bHNfdGVzdF9jYV9rZXlfcnNhW10gPQorIi0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS1cclxuIgorIlByb2MtVHlwZTogNCxFTkNSWVBURURcclxuIgorIkRFSy1JbmZvOiBERVMtRURFMy1DQkMsQThBOTVCMDVENUI3MjA2QlxyXG4iCisiXHJcbiIKKyI5UWQ5R2VBcmVqbDFHRFZoMmxMVjFiSHQwY1B0ZmJoNWgvNXpWcEFWYUZwcXRTUE1yRWxwNTBSbnRuOWV0K0pBXHJcbiIKKyI3Vk95Ym9SK0l5MnQvSFU0V3ZBNjg3azNCcHBlOUd3S0hqSGh0bC8vOHhGS3dacjNYYjV5TzVKVVA4QVVjdFFxXHJcbiIKKyJOYjhDTGxaeXVVQys1MlJFQUF0aGRXZ3NYKzdkSk80eWFielVjUTIyVHA5SlNEMGhpTDQzQmxrV1lVTkszZEFvXHJcbiIKKyJQWmxtaXB0am56VlRqZzFNeHNCU3lkWmluV09MQlY4L0pRZ3hTUG8yeUQ0dUVmaWcyOHFidlEyd05JbjBwbkFiXHJcbiIKKyJHeG5TQU9hemtvbmdFR2Z2Y2pJSXMrTFpOOWdYRmh4Y09oNmtjNFEvYzk5QjdRV0VUd0xMa1lnWit6MWE5Vlk5XHJcbiIKKyJnRVU3Q3dDeFlDRCtoOWhZNkZQbXNLMC9sQzRPN2FlUktwWXEwMHJQUHhzNmk3cGhpZXhnNmF4NnlUTW1BclFxXHJcbiIKKyJRbUszVEFzSm04Vi9KNUFXcExFVjZqQUZnUkd5bUdHSG5vZjBEWHpWV1ppZHJjWkpXVE51R0VYOTBuQjNlZTJ3XHJcbiIKKyJQWEpFRldLb0QzSzNhRmNTTGRIWXIzbUxHeFA3SDlUaFFhaTlWc3ljeFpLUzVrd3ZCS1EvL1lNcm1GZndQazh4XHJcbiIKKyJ2VGVZNEtaTWFVcnZlRWVsNXRXWkM5NFJTTUtneFI2Y3lFMW5CWHlUUW5ET0diZnBOTmdCS3h5S2JJTldvT0pVXHJcbiIKKyJXSlpBd2xzUW4rUXpDRHdwcmk3K3NWMW1TM2dCRTZVWTdhUW1ubWlpYUMyVjNIYnBoeGN0L2VuNVFzZkRPdDFYXHJcbiIKKyJKY3pTZnBSV0xsYlB6blpnOE9RaC9WZ0NNQTU4TjVEak96VElLN3NKSjVyKzk0WkJUQ3BnQU1iRjU4OGYwTlRSXHJcbiIKKyJLQ2U0eXJ4R0pSN1gwMk00bnZENEl3T2xwc1E4eFF4WnRPU2dYdjRMa3h2ZFU5WEpKS1daL1hOS0plV3p0eFNlXHJcbiIKKyJaMXZkVGMyWWZzREJBMlNFdjMzdnhIeDJnMXZxdHc4U2pEUlQyUmFRU1MwUXVTYU1KaW1kT1g2bVRPQ0JLazFKXHJcbiIKKyI5UTVtWFRyRVIrL0xuSzBqRW1Yc0JYV0E1YnFxVlpJeWFoWFN4NFZZWjdsN3cvUEhpVUR0RGd5UmhNTUtpNG4yXHJcbiIKKyJpUXZRY1dTUVRqcnBubEpiY2ExL0RrcFJ0M1l3cnZKd2RxYjhhc1pVMlZyTkVUaDV4MFFWZWZEUkxGaVZwaWYvXHJcbiIKKyJ0VWFlQWUvUDFGOE9rUzdPSVpEczFTVWJ2L3NEMnZNYmhOa1VvQ21zMy9Qdk50ZG52Z0w0RjB6aGFEcEtDbWxUXHJcbiIKKyJQOHZ4NDlFN3Y1Q3lSTm1FRDl6Wmc0bzN3bU1xclFPOTNQdFR1ZzNFdTlvVngxelBRTTFOVk15QmEyK2YyOURMXHJcbiIKKyIxbnVUQ2VYZG85K25pNDV4eCtqQUk0REN3clJkaEo5dXpaeUM2OTYySDM3SDZEKzVuYU52Q2xGUjFzNmxpMUdiXHJcbiIKKyJucVBvaXkvT0JzRXg5Q2FER2NxUUJwNVdtZS8zWFcrNnoxSVNPeCtpZ3dOVFZDVDE0bUhkQk1ieWEwZUlLZnQ1XHJcbiIKKyJYK0dud3RnRU15Q1l5eVd1VWN0OGc0UnpFcmNZOSt5VzlPbTVIenB4NHpPdVc0TlBaZ1BEVGdLK3QyUlNML1lxXHJcbiIKKyJyRTFuanJnZUdZY1ZlRzNmK09mdEg0czZmUGJxN3QxQTVaZ1VzY2JMTUJxcjl0SytPcXlnUjRFZ0tCUHNINkN6XHJcbiIKKyJMNnpsdi8yUlYwcUFIdlZ1REpjSURJZ3dZNXJKdElORW0zMnJoT2VGTkp3WlM1TU5JQzFjelhaeDUvL3VnWDdsXHJcbiIKKyJJNHN5NW5iVmh3U2p0QWs4WGc1ZFpiZFRaNm1JcmI3eHFIK2ZkYWtab3Ixa2hHN2JDMnVJd2liRDNjU2wyWGtSXHJcbiIKKyJ3TjQ4bHNsYkhucXFhZ3I2WG0xbk5PU1ZsOEMvNmtiSkVzTXBMaEFlemZSdEd3dk91Y29hRStXYmVVTm9sR2RlXHJcbiIKKyJQL2VRaWRkU2YwYnJucGlMSlJoN3Facmw5WHVxWWRwVXFub0VkTUFmb3RET0lEOE90VjdndDhhNDhhZDhWUFcyXHJcbiIKKyItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVxyXG4iOworCitjb25zdCBjaGFyIG1iZWR0bHNfdGVzdF9jYV9wd2RfcnNhW10gPSAiUG9sYXJTU0xUZXN0IjsKKworY29uc3QgY2hhciBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9yc2FbXSA9CisiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXHJcbiIKKyJNSUlETnpDQ0FoK2dBd0lCQWdJQkFqQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSXHJcbiIKKyJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOXHJcbiIKKyJNVEV3TWpFeU1UUTBOREEyV2hjTk1qRXdNakV5TVRRME5EQTJXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHXHJcbiIKKyJBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0NBU0l3RFFZSktvWklodmNOXHJcbiIKKyJBUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTUZObzkzbnpSM1JCTmRKY3JpWnJBNTQ1RG84U3M4NkV4YlFXdVROXHJcbiIKKyJvd0NJcCs0ZWE1YW5VclNRN3kxeWVqNGttdnkyTkt3azlYZmdKbVNNbkxBb2ZhSGE2b3pteVJ5V3ZQN0JCRkt6XHJcbiIKKyJOdFNqK3VHeGR0aVF3V0cwWmxJMm9pWlRxcXQwWGdkOUdZTGJLdGdmb05rTkhDMUpadmRiSlhORzZBdUtUMmtNXHJcbiIKKyJ0UUNRNGRxQ0VHWjlybFFyaTJWNWthSGlZY1BOUUVrSTdtZ004WXVHMGthLzBMaXFFUU1lZjFhb0doNUVHQThQXHJcbiIKKyJoWXZhaTBSZTRoakdZaS9IWm8zNlhkaDk4eWVKS1FIRmtBNC9KL0V3eUVvTzc5YmV4OGNuYThjRlBYckVBanlhXHJcbiIKKyJIVDRQNkRTWVc4dHpTMUtXMkJHaUxJQ0lhVGxhMHcrdzNsa3ZFY2YzNmhJQk1KY0NBd0VBQWFOTk1Fc3dDUVlEXHJcbiIKKyJWUjBUQkFJd0FEQWRCZ05WSFE0RUZnUVVwUVhvWkxqYzMyQVBVQkpOWUtoa3IwMkxRNU13SHdZRFZSMGpCQmd3XHJcbiIKKyJGb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2Y4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFKeG5YQ2xZXHJcbiIKKyJvSGticDcwY3FCcnNHWEx5YkE3NGN6Yk81UmRMRWdGczdySFZTOXIrYzI5M2x1Uy9LZGxpTFNjWnFBellWeWx3XHJcbiIKKyJVZlJXdktNb1doSFlLcDNkRUlTNHhUWGs2LzV6WHhodjlSdzhTR2M4cW42dklUSGsxUzFtUGV2dGVrZ2FzWTVZXHJcbiIKKyJpV1F1TTNoNFlWbFJIM0hIRU1BRDFUbkFleGZYSEhERlFHZStCZDFpQWJ6MS9zSDlIOGw0U3R3WDZlZ3ZUSzNNXHJcbiIKKyJ3WFJ3a0trdmpLYUVEQTlBVGJaeDBtSThMR3N4U3VDcWU5cjlkeWptdHRkNDdKMXAxUnVsejNDTHphUmNWSXVTXHJcbiIKKyJSUlFmYUQ4bmVNOWMxUy9pSi9hbVRWcUp4QTFLT2RPUzU3ODBXaFBmU0FyQStnNHFBbVNqZWxjM3A0d1dwaGE4XHJcbiIKKyJ6aHVZd2pWdVg2SkhHMGM9XHJcbiIKKyItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXHJcbiI7CisKK2NvbnN0IGNoYXIgbWJlZHRsc190ZXN0X3Nydl9rZXlfcnNhW10gPQorIi0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS1cclxuIgorIk1JSUVwQUlCQUFLQ0FRRUF3VTJqM2VmTkhkRUUxMGx5dUptc0RuamtPanhLenpvVEZ0QmE1TTJqQUlpbjdoNXJcclxuIgorImxxZFN0SkR2TFhKNlBpU2EvTFkwckNUMWQrQW1aSXljc0NoOW9kcnFqT2JKSEphOC9zRUVVck0yMUtQNjRiRjJcclxuIgorIjJKREJZYlJtVWphaUpsT3FxM1JlQjMwWmd0c3EyQitnMlEwY0xVbG05MXNsYzBib0M0cFBhUXkxQUpEaDJvSVFcclxuIgorIlpuMnVWQ3VMWlhtUm9lSmh3ODFBU1FqdWFBenhpNGJTUnIvUXVLb1JBeDUvVnFnYUhrUVlEdytGaTlxTFJGN2lcclxuIgorIkdNWmlMOGRtamZwZDJIM3pKNGtwQWNXUURqOG44VERJU2c3djF0N0h4eWRyeHdVOWVzUUNQSm9kUGcvb05KaGJcclxuIgorInkzTkxVcGJZRWFJc2dJaHBPVnJURDdEZVdTOFJ4L2ZxRWdFd2x3SURBUUFCQW9JQkFRQ1hSMFM4RUlIRkdPUlpcclxuIgorIisrQXRPZzZlRU54RCt4VnMwZjFJZUd6NTdUam8zUW5YWDdWQlpOZGorcDFFQ3ZoQ0UvRzdYbmtnVTVoTFpYK0dcclxuIgorIlowamt6L3RxSk9JMHZSU2RMQmJpcEhuV291eUJRNGUvQTF5SUpkbEJ0cVh4SjFLRS9pdHVIUmJOYzRqNGtMOFpcclxuIgorIi9yNnB2d25USTBQU3gyRXFzMDQ4WWRTOTJMVDZxQXY0ZmxiTkR4TW4ydVk3czR5Y1M0UTh3MUpYbkNlYUFuWW1cclxuIgorIldZSTV3eE8rYnZSRUxSMk1jejVEbVZuTDhqUnltbDZsNjU4MmJTdjVvdWZSZUZJYnlQWmJRV2xYZ1lucHU2SGVcclxuIgorIkdUYzdFMXpLWVFHRy85K0RRVWwvMXZRdUNQcVF3bnkwdFFvWDJ3NXRkWXBkTWRWbSt6a0x0YmFqemRUdmlKSmFcclxuIgorIlRXekw2bHQ1QW9HQkFOODYrU1ZlSkRjbVFKY3Y0RXE2VWh0UnI0UUdNaVFNejBTb2Q2ZXR0WXhZek1neHR3MjhcclxuIgorIkNJcmdwb3pDYytVYVpKTG83VXh2QzZhbjg1cjFiMm5LUENMUUZhZ2dKMEg0UTBKL3NaT2hCSVhhb0J6V3h2ZUtcclxuIgorIm51cGNlS2RWeEdzRmk4Q0R5ODZEQmZpeUZpdmZCais0N0JiYVF6UEJqN0M0cks3VWxMamFiMnJEQW9HQkFOMnVcclxuIgorIkFNMmdjaG9GaXU0djFIRkw4RDdsd2VFcGk2Wm5NSmpuRXUvZEVnR1FKRmp3ZHBMblBic2o0Yzc1b2RRNEd6OGdcclxuIgorInN3OWxhbzlWVnpidXNvUkUvSkdJNGFUZE8wcEFUWHlHN2VHMVF1KzVZYzFZR1hjQ3JsaUEyeE05eHgrZDdmK3NcclxuIgorIm1Qek4rV0lFZzVHSkRZWkRqQXpIRzVCTnZpL0ZmTTFDOWRPdGp2MmRBb0dBRjB0NUttd2JqV0hCaGNWcU80SWNcclxuIgorIkJWdk4zQklsYzF1ZTJZUlhFRGx4WTViMHI4TjRYY2VNZ0ttVzE4T0hBcFp4Zmw4dVBEYXVXWkxYT2dsNHVlcHZcclxuIgorIndoWkMzRXVXclN5eUlDTmhMWTIxQWg3aGJJRUJQRjNMM1pzT3dDK1VFckwrZFhXTGRCNTZKZ3kzZ1phQmVXN2JcclxuIgorInZEckVub2NKYnFDbTdJdWtoWEhPQks4Q2dZRUF3cWRIQjBocXlOU3pJT0dZN3Y5YWJ6QjZwVWRBM0JaaVF2RXNcclxuIgorIjNMakhWZDRIUEoyeDBOOENnckJJV09FMHE4KzBoU01tZUU5NldXLzdqRDNmUFd3Q1I1emxYa254QlFzZnYwZ1BcclxuIgorIjNCQzVQUjBRZHlweitkKzl6Zk1mNjI1a3lpdDRUL2h6d2hEdmVaVXpIbmsxQ2YrSUc3UStUT0VuTG5XQVdCRURcclxuIgorIklTT1dtclVDZ1lBRkVtUnhnd0FjL3UrRDZ0MHN5Q3dBWWg2UE90c2NxOVkwaTlHeVdrODlOemdDNE5kd3diQkhcclxuIgorIjRBZ2FoT3hJeFh4Mmd4Sm5xM3lma0pmSWp3ZjBzMkR5UDBrWTJ5NlVhMU9lb21QZVk5bXJJUzR0Q3VEUTZMckVcclxuIgorIlRCNmw5VkdveEpMNGZ5SG5aYjhMNWdHdm5CMWJiRDhjTDZZUGFEaU9oY1JzZUM5dkJpRXVWZz09XHJcbiIKKyItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVxyXG4iOworCitjb25zdCBjaGFyIG1iZWR0bHNfdGVzdF9jbGlfY3J0X3JzYVtdID0KKyItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cclxuIgorIk1JSURQekNDQWllZ0F3SUJBZ0lCQkRBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJcclxuIgorIk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY05cclxuIgorIk1URXdNakV5TVRRME5EQTNXaGNOTWpFd01qRXlNVFEwTkRBM1dqQThNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdcclxuIgorIkExVUVDaE1JVUc5c1lYSlRVMHd4R2pBWUJnTlZCQU1URVZCdmJHRnlVMU5NSUVOc2FXVnVkQ0F5TUlJQklqQU5cclxuIgorIkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXlIVEV6TG41dFhucFJka1VZTEI5dTVQeWF4NmZcclxuIgorIk02ME5qNG84Vm1YbDNFVFp6R2FGQjlYNEo3QktOZEJqbmdwdUc3ZmE4SDZyN2d3UWs0WkpHRFR6cUNyU1YvVXVcclxuIgorIjFDOTNLWVJoVFlKUWo2ZVZTSEQxYmsyeTFSUEQwaHJ0NWtQcVFoVHJkT3JBN1IvVVYwNnA4Nmp0MHVEQk1IRXdcclxuIgorIk1qRFYwL1lJMEZaUFJvN3lYL2s5WjVHSU1DNUNzdDk5KytVTWQvL3NNY0I0ajcvQ2Y4cXRiQ0hXamRtTGFvNXZcclxuIgorIjRKdjRFRmJNczQ0VEZlWTBCR2JIN3ZrMkRtcVY5Z21hQm1mMFpYSDR5cVN4SmVEK1BJczFCR2U2NEU5MmhmeC9cclxuIgorIi9EWnJ0ZW5OTFFOaVRyTTlBTSt2ZHFCcFZvTnEwcWpVNTFCeDVyVTJCWGNGYlh2STVNVDlUTlVoWHdJREFRQUJcclxuIgorIm8wMHdTekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJSeG9RQnpja0F2VkhaZU0veFNqN3p4M1d0R0lUQWZcclxuIgorIkJnTlZIU01FR0RBV2dCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvekFOQmdrcWhraUc5dzBCQVFVRkFBT0NcclxuIgorIkFRRUFBbjg2aXNBTThYK21Wd0pxZUl0dDZFOXNsaEVRYkFvZnlrK2RpSDFMaDhZOWlMbFdRU0tidy9VWFlqeDVcclxuIgorIkxMUFpjbmlvdnhJY0FSQy9CanlaUjlnM1V3VEhOR05tK3J3cnFhMTV2aXVOT0ZCY2h5a1gvT3JzazAyRUg3TlJcclxuIgorIkFsdzVXTFBvcllqRUQ2Y2RWUWdCbDlvdDkzSGRKb2dSaVhDeEVyTTdOQzgvZVA1MTFtanErdUxEakxLSDhaUFFcclxuIgorIjhJNGVrSEpucm9Mc0RrSXdYS0dJc3ZJQkhReTJhYy9Od0hMQ1FPSzZtZnVtMXBSeDUyVjRVdHU1ZExMakQ1Yk1cclxuIgorInhPQkM3S1U0eFpLdU1YWFpNNi85M1liNTFLL0o0YWhmMVR4SmxUV1h0bnpEcjlzYUVZZE55MlNLWS82WmlETkhcclxuIgorIkQrc3RwQUtpUUxBV2FBdXNJV0tZRXl3OU1RPT1cclxuIgorIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cclxuIjsKKworY29uc3QgY2hhciBtYmVkdGxzX3Rlc3RfY2xpX2tleV9yc2FbXSA9CisiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVxyXG4iCisiTUlJRXBBSUJBQUtDQVFFQXlIVEV6TG41dFhucFJka1VZTEI5dTVQeWF4NmZNNjBOajRvOFZtWGwzRVRaekdhRlxyXG4iCisiQjlYNEo3QktOZEJqbmdwdUc3ZmE4SDZyN2d3UWs0WkpHRFR6cUNyU1YvVXUxQzkzS1lSaFRZSlFqNmVWU0hEMVxyXG4iCisiYmsyeTFSUEQwaHJ0NWtQcVFoVHJkT3JBN1IvVVYwNnA4Nmp0MHVEQk1IRXdNakRWMC9ZSTBGWlBSbzd5WC9rOVxyXG4iCisiWjVHSU1DNUNzdDk5KytVTWQvL3NNY0I0ajcvQ2Y4cXRiQ0hXamRtTGFvNXY0SnY0RUZiTXM0NFRGZVkwQkdiSFxyXG4iCisiN3ZrMkRtcVY5Z21hQm1mMFpYSDR5cVN4SmVEK1BJczFCR2U2NEU5MmhmeC8vRFpydGVuTkxRTmlUck05QU0rdlxyXG4iCisiZHFCcFZvTnEwcWpVNTFCeDVyVTJCWGNGYlh2STVNVDlUTlVoWHdJREFRQUJBb0lCQUdkTnRmWURpYXA2YnpzdFxyXG4iCisieWhDaUk4bTlUdHJoWnc0TWlzYUVhTi9sbDNYU2phT0cyZHZWNnhNWkNNVis1VGVYREhPQVpuWTE4WWkxOHZ6elxyXG4iCisiNFV0MlRuTkZ6aXpDRUNZTmFBMmZTVDNXZ0lubnhVa1YzWVhBeVA2Q054SmFDbXYyYUEweUZyMmtGVlNlYUtHdFxyXG4iCisieW12bGpOcDJOVmt2bTdUaDhmQlFCTzdJN0FYaHo0M2swbVI3WG1QZ2V3ZThBcFpPRzNoc3RrT2FNdmJXQXZXQVxyXG4iCisiekNadXBkRGpaWWpPSnFsQTRlRUE0SDgvdzdGODNyNUN1Z2VCRThMZ0VSRWpMUGl5ZWpyVTVIMWZ1YkVZK2gwZFxyXG4iCisibDVIWkJKNjh5YlRYZlE1VTlvL1FLQTNkZDB0b0JFaGhkUlVER3pXdGp2d2tFUWZxRjFyZUdXai90b2QvZ0NwZlxyXG4iCisiREZpNlgwRUNnWUVBNHdPdi9walNDM3R5NlR1T3ZLWDJyT1VpQnJMWFh2MkpTeFpuTW9NaVdJNWlwTFF0K1JZVFxyXG4iCisiVlBhZkwvbTdEbjZNYndqYXlPa2NaaEJ3azVDTno1QTZRNGxKNjRNcS9scUh6blJDUVEyTWMxRzhleURGL2ZZTFxyXG4iCisiWmUycEx2d1A5VkQ1alRjMm1pRGZ3K01udkpoeXdSUkxjZW1ERlA4azRoUVZ0bThQTXAzWm1ORUNnWUVBNGd6N1xyXG4iCisid3pPYlI0Z244aWJlNjE3dVFQWmpXelVqOWRVSFlkK2luMWd3QkNJcnRObmFSbjlJOVUvUTZ0ZWdSWXBpaTR5c1xyXG4iCisiYzE3Nk5tVSt1bXk2WG11U0tWNXFEOWJTcFpXRzJuTEZuc2xyTjE1TG0zZmhaeG9lTU5oQmFFRFRuTFQyNnlvaVxyXG4iCisiMzNncDBtU1NXeTk0WkVxaXBtcytVTEY2c1kxWnRGVzZ0cEdGb3k4Q2dZQVFIaG5udkpmbElzMmt5NHExMEI2MFxyXG4iCisiWmN4RnAzcnREcGtwMEp4aEZMaGlpekZydWpNdFpTallObTVVN0trZ1BWSGhMRUxFVXZDbU9uS1R0NGFwL3ZaMFxyXG4iCisiQnhKTmUxR1pIM3BXNlNBdkdEUXBsOXNHN3V1L3ZURlArbEN4dWttenhCMERyckRjdm9yRWtLTW9tN1pDQ1J2V1xyXG4iCisiS1pzWjZZZUgyWjgxQmF1UmoyMThrUUtCZ1FDVVYvRGdLUDI5ODV4RFRUNzlOMDhqVW8zaFRQNU1WWUNDdWovK1xyXG4iCisiVWVFdzFUdlpjeDNMSmJ5N1A2WGFkNmExL0JxdmVhR3lGS0lmRUZJYUJVQkl0azgwMXNERHBEYVljNGdMMDBYY1xyXG4iCisiN2xGdUJIT1preEpZbHNzNVFyR3B1T0VsOVp3VXQ1SXJGTEJkWWFLcU5Iek5WQzFwQ1BmYi9KeUg2RHIySFV4cVxyXG4iCisiZ3hVd0FRS0JnUUNjVTZHMkw4QUc5ZDljMFVwT3lMMXRNdkZlNVR0dzBLamxRVmRzaDFNUDZ5aWdZbzlEWXV3dVxyXG4iCisiYkhGVlcycjBkQlRxZWdQMi9LVE94S3phSGZDMXFmMFJHRHNVb0pDTkpyZDFjd29DTEc4UDJFRjR3M09CcktxdlxyXG4iCisiOHU0eXRZMEYrVmxhbmo1bG0zVGFvSFNWRjErTldQeU9UaXdldklFQ0dLd1N4dmxraTRmREFBPT1cclxuIgorIi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tXHJcbiI7CisKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FfY3J0X3JzYV9sZW4gID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2FfY3J0X3JzYSApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9rZXlfcnNhX2xlbiAgPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jYV9rZXlfcnNhICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NhX3B3ZF9yc2FfbGVuICA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NhX3B3ZF9yc2EgKSAtIDE7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X3Nydl9jcnRfcnNhX2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X3Nydl9jcnRfcnNhICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X3Nydl9rZXlfcnNhX2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X3Nydl9rZXlfcnNhICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NsaV9jcnRfcnNhX2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NsaV9jcnRfcnNhICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NsaV9rZXlfcnNhX2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NsaV9rZXlfcnNhICk7CisjZWxzZQorI2RlZmluZSBURVNUX0NBX0NSVF9SU0EKKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisvKiBDb25jYXRlbmF0aW9uIG9mIGFsbCBhdmFpbGFibGUgQ0EgY2VydGlmaWNhdGVzICovCitjb25zdCBjaGFyIG1iZWR0bHNfdGVzdF9jYXNfcGVtW10gPSBURVNUX0NBX0NSVF9SU0EgVEVTVF9DQV9DUlRfRUM7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2Nhc19wZW1fbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2FzX3BlbSApOworI2VuZGlmCisKKy8qIExpc3Qgb2YgYWxsIGF2YWlsYWJsZSBDQSBjZXJ0aWZpY2F0ZXMgKi8KK2NvbnN0IGNoYXIgKiBtYmVkdGxzX3Rlc3RfY2FzW10gPSB7CisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgIG1iZWR0bHNfdGVzdF9jYV9jcnRfcnNhLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgbWJlZHRsc190ZXN0X2NhX2NydF9lYywKKyNlbmRpZgorICAgIE5VTEwKK307Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2Nhc19sZW5bXSA9IHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2FfY3J0X3JzYSApLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2FfY3J0X2VjICksCisjZW5kaWYKKyAgICAwCit9OworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorY29uc3QgY2hhciAqbWJlZHRsc190ZXN0X2NhX2NydCAgPSBtYmVkdGxzX3Rlc3RfY2FfY3J0X3JzYTsKK2NvbnN0IGNoYXIgKm1iZWR0bHNfdGVzdF9jYV9rZXkgID0gbWJlZHRsc190ZXN0X2NhX2tleV9yc2E7Citjb25zdCBjaGFyICptYmVkdGxzX3Rlc3RfY2FfcHdkICA9IG1iZWR0bHNfdGVzdF9jYV9wd2RfcnNhOworY29uc3QgY2hhciAqbWJlZHRsc190ZXN0X3Nydl9jcnQgPSBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9yc2E7Citjb25zdCBjaGFyICptYmVkdGxzX3Rlc3Rfc3J2X2tleSA9IG1iZWR0bHNfdGVzdF9zcnZfa2V5X3JzYTsKK2NvbnN0IGNoYXIgKm1iZWR0bHNfdGVzdF9jbGlfY3J0ID0gbWJlZHRsc190ZXN0X2NsaV9jcnRfcnNhOworY29uc3QgY2hhciAqbWJlZHRsc190ZXN0X2NsaV9rZXkgPSBtYmVkdGxzX3Rlc3RfY2xpX2tleV9yc2E7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NhX2NydF9sZW4gID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2FfY3J0X3JzYSApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9rZXlfbGVuICA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NhX2tleV9yc2EgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FfcHdkX2xlbiAgPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jYV9wd2RfcnNhICkgLSAxOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9zcnZfY3J0X2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X3Nydl9jcnRfcnNhICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X3Nydl9rZXlfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9yc2EgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2xpX2NydF9sZW4gPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jbGlfY3J0X3JzYSApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jbGlfa2V5X2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NsaV9rZXlfcnNhICk7CisjZWxzZSAvKiAhIE1CRURUTFNfUlNBX0MsIHNvIE1CRURUTFNfRUNEU0FfQyAqLworY29uc3QgY2hhciAqbWJlZHRsc190ZXN0X2NhX2NydCAgPSBtYmVkdGxzX3Rlc3RfY2FfY3J0X2VjOworY29uc3QgY2hhciAqbWJlZHRsc190ZXN0X2NhX2tleSAgPSBtYmVkdGxzX3Rlc3RfY2Ffa2V5X2VjOworY29uc3QgY2hhciAqbWJlZHRsc190ZXN0X2NhX3B3ZCAgPSBtYmVkdGxzX3Rlc3RfY2FfcHdkX2VjOworY29uc3QgY2hhciAqbWJlZHRsc190ZXN0X3Nydl9jcnQgPSBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9lYzsKK2NvbnN0IGNoYXIgKm1iZWR0bHNfdGVzdF9zcnZfa2V5ID0gbWJlZHRsc190ZXN0X3Nydl9rZXlfZWM7Citjb25zdCBjaGFyICptYmVkdGxzX3Rlc3RfY2xpX2NydCA9IG1iZWR0bHNfdGVzdF9jbGlfY3J0X2VjOworY29uc3QgY2hhciAqbWJlZHRsc190ZXN0X2NsaV9rZXkgPSBtYmVkdGxzX3Rlc3RfY2xpX2tleV9lYzsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FfY3J0X2xlbiAgPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jYV9jcnRfZWMgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2Ffa2V5X2xlbiAgPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jYV9rZXlfZWMgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FfcHdkX2xlbiAgPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jYV9wd2RfZWMgKSAtIDE7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X3Nydl9jcnRfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9lYyApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9zcnZfa2V5X2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X3Nydl9rZXlfZWMgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2xpX2NydF9sZW4gPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jbGlfY3J0X2VjICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NsaV9rZXlfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2xpX2tleV9lYyApOworI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfQ0VSVFNfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY2lwaGVyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jaXBoZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODgzNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY2lwaGVyLmMKQEAgLTAsMCArMSw5MTcgQEAKKy8qKgorICogXGZpbGUgY2lwaGVyLmMKKyAqCisgKiBcYnJpZWYgR2VuZXJpYyBjaXBoZXIgd3JhcHBlciBmb3IgbWJlZCBUTFMKKyAqCisgKiBcYXV0aG9yIEFkcmlhYW4gZGUgSm9uZyA8ZGVqb25nQGZveC1pdC5jb20+CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2NpcGhlci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2lwaGVyX2ludGVybmFsLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyNpbmNsdWRlICJtYmVkdGxzL2djbS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisjaW5jbHVkZSAibWJlZHRscy9jY20uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NNQUNfQykKKyNpbmNsdWRlICJtYmVkdGxzL2NtYWMuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgIGZyZWUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykgfHwgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUikKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfTU9ERV9TVFJFQU0KKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIqKXY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworc3RhdGljIGludCBzdXBwb3J0ZWRfaW5pdCA9IDA7CisKK2NvbnN0IGludCAqbWJlZHRsc19jaXBoZXJfbGlzdCggdm9pZCApCit7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbl90ICpkZWY7CisgICAgaW50ICp0eXBlOworCisgICAgaWYoICEgc3VwcG9ydGVkX2luaXQgKQorICAgIHsKKyAgICAgICAgZGVmID0gbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbnM7CisgICAgICAgIHR5cGUgPSBtYmVkdGxzX2NpcGhlcl9zdXBwb3J0ZWQ7CisKKyAgICAgICAgd2hpbGUoIGRlZi0+dHlwZSAhPSAwICkKKyAgICAgICAgICAgICp0eXBlKysgPSAoKmRlZisrKS50eXBlOworCisgICAgICAgICp0eXBlID0gMDsKKworICAgICAgICBzdXBwb3J0ZWRfaW5pdCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuKCBtYmVkdGxzX2NpcGhlcl9zdXBwb3J0ZWQgKTsKK30KKworY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICptYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY29uc3QgbWJlZHRsc19jaXBoZXJfdHlwZV90IGNpcGhlcl90eXBlICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9uX3QgKmRlZjsKKworICAgIGZvciggZGVmID0gbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbnM7IGRlZi0+aW5mbyAhPSBOVUxMOyBkZWYrKyApCisgICAgICAgIGlmKCBkZWYtPnR5cGUgPT0gY2lwaGVyX3R5cGUgKQorICAgICAgICAgICAgcmV0dXJuKCBkZWYtPmluZm8gKTsKKworICAgIHJldHVybiggTlVMTCApOworfQorCitjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKm1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV9zdHJpbmcoIGNvbnN0IGNoYXIgKmNpcGhlcl9uYW1lICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9uX3QgKmRlZjsKKworICAgIGlmKCBOVUxMID09IGNpcGhlcl9uYW1lICkKKyAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICBmb3IoIGRlZiA9IG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25zOyBkZWYtPmluZm8gIT0gTlVMTDsgZGVmKysgKQorICAgICAgICBpZiggISAgc3RyY21wKCBkZWYtPmluZm8tPm5hbWUsIGNpcGhlcl9uYW1lICkgKQorICAgICAgICAgICAgcmV0dXJuKCBkZWYtPmluZm8gKTsKKworICAgIHJldHVybiggTlVMTCApOworfQorCitjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKm1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV92YWx1ZXMoIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2lkX3QgY2lwaGVyX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfYml0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX21vZGVfdCBtb2RlICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9uX3QgKmRlZjsKKworICAgIGZvciggZGVmID0gbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbnM7IGRlZi0+aW5mbyAhPSBOVUxMOyBkZWYrKyApCisgICAgICAgIGlmKCBkZWYtPmluZm8tPmJhc2UtPmNpcGhlciA9PSBjaXBoZXJfaWQgJiYKKyAgICAgICAgICAgIGRlZi0+aW5mby0+a2V5X2JpdGxlbiA9PSAodW5zaWduZWQpIGtleV9iaXRsZW4gJiYKKyAgICAgICAgICAgIGRlZi0+aW5mby0+bW9kZSA9PSBtb2RlICkKKyAgICAgICAgICAgIHJldHVybiggZGVmLT5pbmZvICk7CisKKyAgICByZXR1cm4oIE5VTEwgKTsKK30KKwordm9pZCBtYmVkdGxzX2NpcGhlcl9pbml0KCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX2NpcGhlcl9mcmVlKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NNQUNfQykKKyAgICBpZiggY3R4LT5jbWFjX2N0eCApCisgICAgeworICAgICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LT5jbWFjX2N0eCwgc2l6ZW9mKCBtYmVkdGxzX2NtYWNfY29udGV4dF90ICkgKTsKKyAgICAgICBtYmVkdGxzX2ZyZWUoIGN0eC0+Y21hY19jdHggKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmKCBjdHgtPmNpcGhlcl9jdHggKQorICAgICAgICBjdHgtPmNpcGhlcl9pbmZvLT5iYXNlLT5jdHhfZnJlZV9mdW5jKCBjdHgtPmNpcGhlcl9jdHggKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YobWJlZHRsc19jaXBoZXJfY29udGV4dF90KSApOworfQorCitpbnQgbWJlZHRsc19jaXBoZXJfc2V0dXAoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LCBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvICkKK3sKKyAgICBpZiggTlVMTCA9PSBjaXBoZXJfaW5mbyB8fCBOVUxMID09IGN0eCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKSApOworCisgICAgaWYoIE5VTEwgPT0gKCBjdHgtPmNpcGhlcl9jdHggPSBjaXBoZXJfaW5mby0+YmFzZS0+Y3R4X2FsbG9jX2Z1bmMoKSApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQUxMT0NfRkFJTEVEICk7CisKKyAgICBjdHgtPmNpcGhlcl9pbmZvID0gY2lwaGVyX2luZm87CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HKQorICAgIC8qCisgICAgICogSWdub3JlIHBvc3NpYmxlIGVycm9ycyBjYXVzZWQgYnkgYSBjaXBoZXIgbW9kZSB0aGF0IGRvZXNuJ3QgdXNlIHBhZGRpbmcKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcpCisgICAgKHZvaWQpIG1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUoIGN0eCwgTUJFRFRMU19QQURESU5HX1BLQ1M3ICk7CisjZWxzZQorICAgICh2b2lkKSBtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlKCBjdHgsIE1CRURUTFNfUEFERElOR19OT05FICk7CisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORyAqLworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgIGludCBrZXlfYml0bGVuLCBjb25zdCBtYmVkdGxzX29wZXJhdGlvbl90IG9wZXJhdGlvbiApCit7CisgICAgaWYoIE5VTEwgPT0gY3R4IHx8IE5VTEwgPT0gY3R4LT5jaXBoZXJfaW5mbyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggKCBjdHgtPmNpcGhlcl9pbmZvLT5mbGFncyAmIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0tFWV9MRU4gKSA9PSAwICYmCisgICAgICAgIChpbnQpIGN0eC0+Y2lwaGVyX2luZm8tPmtleV9iaXRsZW4gIT0ga2V5X2JpdGxlbiApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGN0eC0+a2V5X2JpdGxlbiA9IGtleV9iaXRsZW47CisgICAgY3R4LT5vcGVyYXRpb24gPSBvcGVyYXRpb247CisKKyAgICAvKgorICAgICAqIEZvciBDRkIgYW5kIENUUiBtb2RlIGFsd2F5cyB1c2UgdGhlIGVuY3J5cHRpb24ga2V5IHNjaGVkdWxlCisgICAgICovCisgICAgaWYoIE1CRURUTFNfRU5DUllQVCA9PSBvcGVyYXRpb24gfHwKKyAgICAgICAgTUJFRFRMU19NT0RFX0NGQiA9PSBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlIHx8CisgICAgICAgIE1CRURUTFNfTU9ERV9DVFIgPT0gY3R4LT5jaXBoZXJfaW5mby0+bW9kZSApCisgICAgeworICAgICAgICByZXR1cm4gY3R4LT5jaXBoZXJfaW5mby0+YmFzZS0+c2V0a2V5X2VuY19mdW5jKCBjdHgtPmNpcGhlcl9jdHgsIGtleSwKKyAgICAgICAgICAgICAgICBjdHgtPmtleV9iaXRsZW4gKTsKKyAgICB9CisKKyAgICBpZiggTUJFRFRMU19ERUNSWVBUID09IG9wZXJhdGlvbiApCisgICAgICAgIHJldHVybiBjdHgtPmNpcGhlcl9pbmZvLT5iYXNlLT5zZXRrZXlfZGVjX2Z1bmMoIGN0eC0+Y2lwaGVyX2N0eCwga2V5LAorICAgICAgICAgICAgICAgIGN0eC0+a2V5X2JpdGxlbiApOworCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKK30KKworaW50IG1iZWR0bHNfY2lwaGVyX3NldF9pdiggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIHNpemVfdCBpdl9sZW4gKQoreworICAgIHNpemVfdCBhY3R1YWxfaXZfc2l6ZTsKKworICAgIGlmKCBOVUxMID09IGN0eCB8fCBOVUxMID09IGN0eC0+Y2lwaGVyX2luZm8gfHwgTlVMTCA9PSBpdiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cgaW4gY3R4LT5pdiAqLworICAgIGlmKCBpdl9sZW4gPiBNQkVEVExTX01BWF9JVl9MRU5HVEggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICBpZiggKCBjdHgtPmNpcGhlcl9pbmZvLT5mbGFncyAmIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTiApICE9IDAgKQorICAgICAgICBhY3R1YWxfaXZfc2l6ZSA9IGl2X2xlbjsKKyAgICBlbHNlCisgICAgeworICAgICAgICBhY3R1YWxfaXZfc2l6ZSA9IGN0eC0+Y2lwaGVyX2luZm8tPml2X3NpemU7CisKKyAgICAgICAgLyogYXZvaWQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQgYnVmZmVyICovCisgICAgICAgIGlmKCBhY3R1YWxfaXZfc2l6ZSA+IGl2X2xlbiApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIG1lbWNweSggY3R4LT5pdiwgaXYsIGFjdHVhbF9pdl9zaXplICk7CisgICAgY3R4LT5pdl9zaXplID0gYWN0dWFsX2l2X3NpemU7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCApCit7CisgICAgaWYoIE5VTEwgPT0gY3R4IHx8IE5VTEwgPT0gY3R4LT5jaXBoZXJfaW5mbyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBjdHgtPnVucHJvY2Vzc2VkX2xlbiA9IDA7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKK2ludCBtYmVkdGxzX2NpcGhlcl91cGRhdGVfYWQoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkLCBzaXplX3QgYWRfbGVuICkKK3sKKyAgICBpZiggTlVMTCA9PSBjdHggfHwgTlVMTCA9PSBjdHgtPmNpcGhlcl9pbmZvICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBNQkVEVExTX01PREVfR0NNID09IGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1iZWR0bHNfZ2NtX3N0YXJ0cyggKG1iZWR0bHNfZ2NtX2NvbnRleHQgKikgY3R4LT5jaXBoZXJfY3R4LCBjdHgtPm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+aXYsIGN0eC0+aXZfc2l6ZSwgYWQsIGFkX2xlbiApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKworaW50IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgYmxvY2tfc2l6ZSA9IDA7CisKKyAgICBpZiggTlVMTCA9PSBjdHggfHwgTlVMTCA9PSBjdHgtPmNpcGhlcl9pbmZvIHx8IE5VTEwgPT0gb2xlbiApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgICpvbGVuID0gMDsKKyAgICBibG9ja19zaXplID0gbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoIGN0eCApOworCisgICAgaWYoIGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgPT0gTUJFRFRMU19NT0RFX0VDQiApCisgICAgeworICAgICAgICBpZiggaWxlbiAhPSBibG9ja19zaXplICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQgKTsKKworICAgICAgICAqb2xlbiA9IGlsZW47CisKKyAgICAgICAgaWYoIDAgIT0gKCByZXQgPSBjdHgtPmNpcGhlcl9pbmZvLT5iYXNlLT5lY2JfZnVuYyggY3R4LT5jaXBoZXJfY3R4LAorICAgICAgICAgICAgICAgICAgICBjdHgtPm9wZXJhdGlvbiwgaW5wdXQsIG91dHB1dCApICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIGlmKCBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlID09IE1CRURUTFNfTU9ERV9HQ00gKQorICAgIHsKKyAgICAgICAgKm9sZW4gPSBpbGVuOworICAgICAgICByZXR1cm4gbWJlZHRsc19nY21fdXBkYXRlKCAobWJlZHRsc19nY21fY29udGV4dCAqKSBjdHgtPmNpcGhlcl9jdHgsIGlsZW4sIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoIDAgPT0gYmxvY2tfc2l6ZSApCisgICAgeworICAgICAgICByZXR1cm4gTUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfQ09OVEVYVDsKKyAgICB9CisKKyAgICBpZiggaW5wdXQgPT0gb3V0cHV0ICYmCisgICAgICAgKCBjdHgtPnVucHJvY2Vzc2VkX2xlbiAhPSAwIHx8IGlsZW4gJSBibG9ja19zaXplICkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGlmKCBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlID09IE1CRURUTFNfTU9ERV9DQkMgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGNvcHlfbGVuID0gMDsKKworICAgICAgICAvKgorICAgICAgICAgKiBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEgZm9yIGEgZnVsbCBibG9jaywgY2FjaGUgaXQuCisgICAgICAgICAqLworICAgICAgICBpZiggKCBjdHgtPm9wZXJhdGlvbiA9PSBNQkVEVExTX0RFQ1JZUFQgJiYKKyAgICAgICAgICAgICAgICBpbGVuICsgY3R4LT51bnByb2Nlc3NlZF9sZW4gPD0gYmxvY2tfc2l6ZSApIHx8CisgICAgICAgICAgICAgKCBjdHgtPm9wZXJhdGlvbiA9PSBNQkVEVExTX0VOQ1JZUFQgJiYKKyAgICAgICAgICAgICAgICBpbGVuICsgY3R4LT51bnByb2Nlc3NlZF9sZW4gPCBibG9ja19zaXplICkgKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoICYoIGN0eC0+dW5wcm9jZXNzZWRfZGF0YVtjdHgtPnVucHJvY2Vzc2VkX2xlbl0gKSwgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIGlsZW4gKTsKKworICAgICAgICAgICAgY3R4LT51bnByb2Nlc3NlZF9sZW4gKz0gaWxlbjsKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogUHJvY2VzcyBjYWNoZWQgZGF0YSBmaXJzdAorICAgICAgICAgKi8KKyAgICAgICAgaWYoIDAgIT0gY3R4LT51bnByb2Nlc3NlZF9sZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBjb3B5X2xlbiA9IGJsb2NrX3NpemUgLSBjdHgtPnVucHJvY2Vzc2VkX2xlbjsKKworICAgICAgICAgICAgbWVtY3B5KCAmKCBjdHgtPnVucHJvY2Vzc2VkX2RhdGFbY3R4LT51bnByb2Nlc3NlZF9sZW5dICksIGlucHV0LAorICAgICAgICAgICAgICAgICAgICBjb3B5X2xlbiApOworCisgICAgICAgICAgICBpZiggMCAhPSAoIHJldCA9IGN0eC0+Y2lwaGVyX2luZm8tPmJhc2UtPmNiY19mdW5jKCBjdHgtPmNpcGhlcl9jdHgsCisgICAgICAgICAgICAgICAgICAgIGN0eC0+b3BlcmF0aW9uLCBibG9ja19zaXplLCBjdHgtPml2LAorICAgICAgICAgICAgICAgICAgICBjdHgtPnVucHJvY2Vzc2VkX2RhdGEsIG91dHB1dCApICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpvbGVuICs9IGJsb2NrX3NpemU7CisgICAgICAgICAgICBvdXRwdXQgKz0gYmxvY2tfc2l6ZTsKKyAgICAgICAgICAgIGN0eC0+dW5wcm9jZXNzZWRfbGVuID0gMDsKKworICAgICAgICAgICAgaW5wdXQgKz0gY29weV9sZW47CisgICAgICAgICAgICBpbGVuIC09IGNvcHlfbGVuOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2FjaGUgZmluYWwsIGluY29tcGxldGUgYmxvY2sKKyAgICAgICAgICovCisgICAgICAgIGlmKCAwICE9IGlsZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggMCA9PSBibG9ja19zaXplICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfQ09OVEVYVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29weV9sZW4gPSBpbGVuICUgYmxvY2tfc2l6ZTsKKyAgICAgICAgICAgIGlmKCBjb3B5X2xlbiA9PSAwICYmIGN0eC0+b3BlcmF0aW9uID09IE1CRURUTFNfREVDUllQVCApCisgICAgICAgICAgICAgICAgY29weV9sZW4gPSBibG9ja19zaXplOworCisgICAgICAgICAgICBtZW1jcHkoIGN0eC0+dW5wcm9jZXNzZWRfZGF0YSwgJiggaW5wdXRbaWxlbiAtIGNvcHlfbGVuXSApLAorICAgICAgICAgICAgICAgICAgICBjb3B5X2xlbiApOworCisgICAgICAgICAgICBjdHgtPnVucHJvY2Vzc2VkX2xlbiArPSBjb3B5X2xlbjsKKyAgICAgICAgICAgIGlsZW4gLT0gY29weV9sZW47CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBQcm9jZXNzIHJlbWFpbmluZyBmdWxsIGJsb2NrcworICAgICAgICAgKi8KKyAgICAgICAgaWYoIGlsZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggMCAhPSAoIHJldCA9IGN0eC0+Y2lwaGVyX2luZm8tPmJhc2UtPmNiY19mdW5jKCBjdHgtPmNpcGhlcl9jdHgsCisgICAgICAgICAgICAgICAgICAgIGN0eC0+b3BlcmF0aW9uLCBpbGVuLCBjdHgtPml2LCBpbnB1dCwgb3V0cHV0ICkgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKm9sZW4gKz0gaWxlbjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICBpZiggY3R4LT5jaXBoZXJfaW5mby0+bW9kZSA9PSBNQkVEVExTX01PREVfQ0ZCICkKKyAgICB7CisgICAgICAgIGlmKCAwICE9ICggcmV0ID0gY3R4LT5jaXBoZXJfaW5mby0+YmFzZS0+Y2ZiX2Z1bmMoIGN0eC0+Y2lwaGVyX2N0eCwKKyAgICAgICAgICAgICAgICBjdHgtPm9wZXJhdGlvbiwgaWxlbiwgJmN0eC0+dW5wcm9jZXNzZWRfbGVuLCBjdHgtPml2LAorICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQgKSApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgICpvbGVuID0gaWxlbjsKKworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisgICAgaWYoIGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgPT0gTUJFRFRMU19NT0RFX0NUUiApCisgICAgeworICAgICAgICBpZiggMCAhPSAoIHJldCA9IGN0eC0+Y2lwaGVyX2luZm8tPmJhc2UtPmN0cl9mdW5jKCBjdHgtPmNpcGhlcl9jdHgsCisgICAgICAgICAgICAgICAgaWxlbiwgJmN0eC0+dW5wcm9jZXNzZWRfbGVuLCBjdHgtPml2LAorICAgICAgICAgICAgICAgIGN0eC0+dW5wcm9jZXNzZWRfZGF0YSwgaW5wdXQsIG91dHB1dCApICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgKm9sZW4gPSBpbGVuOworCisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTSkKKyAgICBpZiggY3R4LT5jaXBoZXJfaW5mby0+bW9kZSA9PSBNQkVEVExTX01PREVfU1RSRUFNICkKKyAgICB7CisgICAgICAgIGlmKCAwICE9ICggcmV0ID0gY3R4LT5jaXBoZXJfaW5mby0+YmFzZS0+c3RyZWFtX2Z1bmMoIGN0eC0+Y2lwaGVyX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbGVuLCBpbnB1dCwgb3V0cHV0ICkgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICAqb2xlbiA9IGlsZW47CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNICovCisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNykKKy8qCisgKiBQS0NTNyAoYW5kIFBLQ1M1KSBwYWRkaW5nOiBmaWxsIHdpdGggbGwgYnl0ZXMsIHdpdGggbGwgPSBwYWRkaW5nX2xlbgorICovCitzdGF0aWMgdm9pZCBhZGRfcGtjc19wYWRkaW5nKCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfbGVuLAorICAgICAgICBzaXplX3QgZGF0YV9sZW4gKQoreworICAgIHNpemVfdCBwYWRkaW5nX2xlbiA9IG91dHB1dF9sZW4gLSBkYXRhX2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgcGFkZGluZ19sZW47IGkrKyApCisgICAgICAgIG91dHB1dFtkYXRhX2xlbiArIGldID0gKHVuc2lnbmVkIGNoYXIpIHBhZGRpbmdfbGVuOworfQorCitzdGF0aWMgaW50IGdldF9wa2NzX3BhZGRpbmcoIHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaW5wdXRfbGVuLAorICAgICAgICBzaXplX3QgKmRhdGFfbGVuICkKK3sKKyAgICBzaXplX3QgaSwgcGFkX2lkeDsKKyAgICB1bnNpZ25lZCBjaGFyIHBhZGRpbmdfbGVuLCBiYWQgPSAwOworCisgICAgaWYoIE5VTEwgPT0gaW5wdXQgfHwgTlVMTCA9PSBkYXRhX2xlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBwYWRkaW5nX2xlbiA9IGlucHV0W2lucHV0X2xlbiAtIDFdOworICAgICpkYXRhX2xlbiA9IGlucHV0X2xlbiAtIHBhZGRpbmdfbGVuOworCisgICAgLyogQXZvaWQgbG9naWNhbCB8fCBzaW5jZSBpdCByZXN1bHRzIGluIGEgYnJhbmNoICovCisgICAgYmFkIHw9IHBhZGRpbmdfbGVuID4gaW5wdXRfbGVuOworICAgIGJhZCB8PSBwYWRkaW5nX2xlbiA9PSAwOworCisgICAgLyogVGhlIG51bWJlciBvZiBieXRlcyBjaGVja2VkIG11c3QgYmUgaW5kZXBlbmRlbnQgb2YgcGFkZGluZ19sZW4sCisgICAgICogc28gcGljayBpbnB1dF9sZW4sIHdoaWNoIGlzIHVzdWFsbHkgOCBvciAxNiAob25lIGJsb2NrKSAqLworICAgIHBhZF9pZHggPSBpbnB1dF9sZW4gLSBwYWRkaW5nX2xlbjsKKyAgICBmb3IoIGkgPSAwOyBpIDwgaW5wdXRfbGVuOyBpKysgKQorICAgICAgICBiYWQgfD0gKCBpbnB1dFtpXSBeIHBhZGRpbmdfbGVuICkgKiAoIGkgPj0gcGFkX2lkeCApOworCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HICogKCBiYWQgIT0gMCApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MpCisvKgorICogT25lIGFuZCB6ZXJvcyBwYWRkaW5nOiBmaWxsIHdpdGggODAgMDAgLi4uIDAwCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9vbmVfYW5kX3plcm9zX3BhZGRpbmcoIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfbGVuLCBzaXplX3QgZGF0YV9sZW4gKQoreworICAgIHNpemVfdCBwYWRkaW5nX2xlbiA9IG91dHB1dF9sZW4gLSBkYXRhX2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGkgPSAwOworCisgICAgb3V0cHV0W2RhdGFfbGVuXSA9IDB4ODA7CisgICAgZm9yKCBpID0gMTsgaSA8IHBhZGRpbmdfbGVuOyBpKysgKQorICAgICAgICBvdXRwdXRbZGF0YV9sZW4gKyBpXSA9IDB4MDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29uZV9hbmRfemVyb3NfcGFkZGluZyggdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbnB1dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZGF0YV9sZW4gKQoreworICAgIHNpemVfdCBpOworICAgIHVuc2lnbmVkIGNoYXIgZG9uZSA9IDAsIHByZXZfZG9uZSwgYmFkOworCisgICAgaWYoIE5VTEwgPT0gaW5wdXQgfHwgTlVMTCA9PSBkYXRhX2xlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBiYWQgPSAweEZGOworICAgICpkYXRhX2xlbiA9IDA7CisgICAgZm9yKCBpID0gaW5wdXRfbGVuOyBpID4gMDsgaS0tICkKKyAgICB7CisgICAgICAgIHByZXZfZG9uZSA9IGRvbmU7CisgICAgICAgIGRvbmUgfD0gKCBpbnB1dFtpLTFdICE9IDAgKTsKKyAgICAgICAgKmRhdGFfbGVuIHw9ICggaSAtIDEgKSAqICggZG9uZSAhPSBwcmV2X2RvbmUgKTsKKyAgICAgICAgYmFkICY9ICggaW5wdXRbaS0xXSBeIDB4ODAgKSB8ICggZG9uZSA9PSBwcmV2X2RvbmUgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkcgKiAoIGJhZCAhPSAwICkgKTsKKworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4pCisvKgorICogWmVyb3MgYW5kIGxlbiBwYWRkaW5nOiBmaWxsIHdpdGggMDAgLi4uIDAwIGxsLCB3aGVyZSBsbCBpcyBwYWRkaW5nIGxlbmd0aAorICovCitzdGF0aWMgdm9pZCBhZGRfemVyb3NfYW5kX2xlbl9wYWRkaW5nKCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X2xlbiwgc2l6ZV90IGRhdGFfbGVuICkKK3sKKyAgICBzaXplX3QgcGFkZGluZ19sZW4gPSBvdXRwdXRfbGVuIC0gZGF0YV9sZW47CisgICAgdW5zaWduZWQgY2hhciBpID0gMDsKKworICAgIGZvciggaSA9IDE7IGkgPCBwYWRkaW5nX2xlbjsgaSsrICkKKyAgICAgICAgb3V0cHV0W2RhdGFfbGVuICsgaSAtIDFdID0gMHgwMDsKKyAgICBvdXRwdXRbb3V0cHV0X2xlbiAtIDFdID0gKHVuc2lnbmVkIGNoYXIpIHBhZGRpbmdfbGVuOworfQorCitzdGF0aWMgaW50IGdldF96ZXJvc19hbmRfbGVuX3BhZGRpbmcoIHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaW5wdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmRhdGFfbGVuICkKK3sKKyAgICBzaXplX3QgaSwgcGFkX2lkeDsKKyAgICB1bnNpZ25lZCBjaGFyIHBhZGRpbmdfbGVuLCBiYWQgPSAwOworCisgICAgaWYoIE5VTEwgPT0gaW5wdXQgfHwgTlVMTCA9PSBkYXRhX2xlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBwYWRkaW5nX2xlbiA9IGlucHV0W2lucHV0X2xlbiAtIDFdOworICAgICpkYXRhX2xlbiA9IGlucHV0X2xlbiAtIHBhZGRpbmdfbGVuOworCisgICAgLyogQXZvaWQgbG9naWNhbCB8fCBzaW5jZSBpdCByZXN1bHRzIGluIGEgYnJhbmNoICovCisgICAgYmFkIHw9IHBhZGRpbmdfbGVuID4gaW5wdXRfbGVuOworICAgIGJhZCB8PSBwYWRkaW5nX2xlbiA9PSAwOworCisgICAgLyogVGhlIG51bWJlciBvZiBieXRlcyBjaGVja2VkIG11c3QgYmUgaW5kZXBlbmRlbnQgb2YgcGFkZGluZ19sZW4gKi8KKyAgICBwYWRfaWR4ID0gaW5wdXRfbGVuIC0gcGFkZGluZ19sZW47CisgICAgZm9yKCBpID0gMDsgaSA8IGlucHV0X2xlbiAtIDE7IGkrKyApCisgICAgICAgIGJhZCB8PSBpbnB1dFtpXSAqICggaSA+PSBwYWRfaWR4ICk7CisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkcgKiAoIGJhZCAhPSAwICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUykKKy8qCisgKiBaZXJvIHBhZGRpbmc6IGZpbGwgd2l0aCAwMCAuLi4gMDAKKyAqLworc3RhdGljIHZvaWQgYWRkX3plcm9zX3BhZGRpbmcoIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X2xlbiwgc2l6ZV90IGRhdGFfbGVuICkKK3sKKyAgICBzaXplX3QgaTsKKworICAgIGZvciggaSA9IGRhdGFfbGVuOyBpIDwgb3V0cHV0X2xlbjsgaSsrICkKKyAgICAgICAgb3V0cHV0W2ldID0gMHgwMDsKK30KKworc3RhdGljIGludCBnZXRfemVyb3NfcGFkZGluZyggdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbnB1dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmRhdGFfbGVuICkKK3sKKyAgICBzaXplX3QgaTsKKyAgICB1bnNpZ25lZCBjaGFyIGRvbmUgPSAwLCBwcmV2X2RvbmU7CisKKyAgICBpZiggTlVMTCA9PSBpbnB1dCB8fCBOVUxMID09IGRhdGFfbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICpkYXRhX2xlbiA9IDA7CisgICAgZm9yKCBpID0gaW5wdXRfbGVuOyBpID4gMDsgaS0tICkKKyAgICB7CisgICAgICAgIHByZXZfZG9uZSA9IGRvbmU7CisgICAgICAgIGRvbmUgfD0gKCBpbnB1dFtpLTFdICE9IDAgKTsKKyAgICAgICAgKmRhdGFfbGVuIHw9IGkgKiAoIGRvbmUgIT0gcHJldl9kb25lICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUyAqLworCisvKgorICogTm8gcGFkZGluZzogZG9uJ3QgcGFkIDopCisgKgorICogVGhlcmUgaXMgbm8gYWRkX3BhZGRpbmcgZnVuY3Rpb24gKGNoZWNrIGZvciBOVUxMIGluIG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCkKKyAqIGJ1dCBhIHRyaXZpYWwgZ2V0X3BhZGRpbmcgZnVuY3Rpb24KKyAqLworc3RhdGljIGludCBnZXRfbm9fcGFkZGluZyggdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbnB1dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmRhdGFfbGVuICkKK3sKKyAgICBpZiggTlVMTCA9PSBpbnB1dCB8fCBOVUxMID09IGRhdGFfbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICpkYXRhX2xlbiA9IGlucHV0X2xlbjsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HICovCisKK2ludCBtYmVkdGxzX2NpcGhlcl9maW5pc2goIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBpZiggTlVMTCA9PSBjdHggfHwgTlVMTCA9PSBjdHgtPmNpcGhlcl9pbmZvIHx8IE5VTEwgPT0gb2xlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBpZiggTUJFRFRMU19NT0RFX0NGQiA9PSBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlIHx8CisgICAgICAgIE1CRURUTFNfTU9ERV9DVFIgPT0gY3R4LT5jaXBoZXJfaW5mby0+bW9kZSB8fAorICAgICAgICBNQkVEVExTX01PREVfR0NNID09IGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgfHwKKyAgICAgICAgTUJFRFRMU19NT0RFX1NUUkVBTSA9PSBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlICkKKyAgICB7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIGlmKCBNQkVEVExTX01PREVfRUNCID09IGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgKQorICAgIHsKKyAgICAgICAgaWYoIGN0eC0+dW5wcm9jZXNzZWRfbGVuICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRCApOworCisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgaWYoIE1CRURUTFNfTU9ERV9DQkMgPT0gY3R4LT5jaXBoZXJfaW5mby0+bW9kZSApCisgICAgeworICAgICAgICBpbnQgcmV0ID0gMDsKKworICAgICAgICBpZiggTUJFRFRMU19FTkNSWVBUID09IGN0eC0+b3BlcmF0aW9uICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogY2hlY2sgZm9yICdubyBwYWRkaW5nJyBtb2RlICovCisgICAgICAgICAgICBpZiggTlVMTCA9PSBjdHgtPmFkZF9wYWRkaW5nICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggMCAhPSBjdHgtPnVucHJvY2Vzc2VkX2xlbiApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdHgtPmFkZF9wYWRkaW5nKCBjdHgtPnVucHJvY2Vzc2VkX2RhdGEsIG1iZWR0bHNfY2lwaGVyX2dldF9pdl9zaXplKCBjdHggKSwKKyAgICAgICAgICAgICAgICAgICAgY3R4LT51bnByb2Nlc3NlZF9sZW4gKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggY3R4ICkgIT0gY3R4LT51bnByb2Nlc3NlZF9sZW4gKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRm9yIGRlY3J5cHQgb3BlcmF0aW9ucywgZXhwZWN0IGEgZnVsbCBibG9jaywKKyAgICAgICAgICAgICAqIG9yIGFuIGVtcHR5IGJsb2NrIGlmIG5vIHBhZGRpbmcKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYoIE5VTEwgPT0gY3R4LT5hZGRfcGFkZGluZyAmJiAwID09IGN0eC0+dW5wcm9jZXNzZWRfbGVuICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIDAgKTsKKworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRCApOworICAgICAgICB9CisKKyAgICAgICAgLyogY2lwaGVyIGJsb2NrICovCisgICAgICAgIGlmKCAwICE9ICggcmV0ID0gY3R4LT5jaXBoZXJfaW5mby0+YmFzZS0+Y2JjX2Z1bmMoIGN0eC0+Y2lwaGVyX2N0eCwKKyAgICAgICAgICAgICAgICBjdHgtPm9wZXJhdGlvbiwgbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoIGN0eCApLCBjdHgtPml2LAorICAgICAgICAgICAgICAgIGN0eC0+dW5wcm9jZXNzZWRfZGF0YSwgb3V0cHV0ICkgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZXQgb3V0cHV0IHNpemUgZm9yIGRlY3J5cHRpb24gKi8KKyAgICAgICAgaWYoIE1CRURUTFNfREVDUllQVCA9PSBjdHgtPm9wZXJhdGlvbiApCisgICAgICAgICAgICByZXR1cm4gY3R4LT5nZXRfcGFkZGluZyggb3V0cHV0LCBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggY3R4ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xlbiApOworCisgICAgICAgIC8qIFNldCBvdXRwdXQgc2l6ZSBmb3IgZW5jcnlwdGlvbiAqLworICAgICAgICAqb2xlbiA9IG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCBjdHggKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2Vsc2UKKyAgICAoKHZvaWQpIG91dHB1dCk7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcpCitpbnQgbWJlZHRsc19jaXBoZXJfc2V0X3BhZGRpbmdfbW9kZSggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsIG1iZWR0bHNfY2lwaGVyX3BhZGRpbmdfdCBtb2RlICkKK3sKKyAgICBpZiggTlVMTCA9PSBjdHggfHwKKyAgICAgICAgTUJFRFRMU19NT0RFX0NCQyAhPSBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgc3dpdGNoKCBtb2RlICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3KQorICAgIGNhc2UgTUJFRFRMU19QQURESU5HX1BLQ1M3OgorICAgICAgICBjdHgtPmFkZF9wYWRkaW5nID0gYWRkX3BrY3NfcGFkZGluZzsKKyAgICAgICAgY3R4LT5nZXRfcGFkZGluZyA9IGdldF9wa2NzX3BhZGRpbmc7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MpCisgICAgY2FzZSBNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUzoKKyAgICAgICAgY3R4LT5hZGRfcGFkZGluZyA9IGFkZF9vbmVfYW5kX3plcm9zX3BhZGRpbmc7CisgICAgICAgIGN0eC0+Z2V0X3BhZGRpbmcgPSBnZXRfb25lX2FuZF96ZXJvc19wYWRkaW5nOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOKQorICAgIGNhc2UgTUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU46CisgICAgICAgIGN0eC0+YWRkX3BhZGRpbmcgPSBhZGRfemVyb3NfYW5kX2xlbl9wYWRkaW5nOworICAgICAgICBjdHgtPmdldF9wYWRkaW5nID0gZ2V0X3plcm9zX2FuZF9sZW5fcGFkZGluZzsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MpCisgICAgY2FzZSBNQkVEVExTX1BBRERJTkdfWkVST1M6CisgICAgICAgIGN0eC0+YWRkX3BhZGRpbmcgPSBhZGRfemVyb3NfcGFkZGluZzsKKyAgICAgICAgY3R4LT5nZXRfcGFkZGluZyA9IGdldF96ZXJvc19wYWRkaW5nOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgTUJFRFRMU19QQURESU5HX05PTkU6CisgICAgICAgIGN0eC0+YWRkX3BhZGRpbmcgPSBOVUxMOworICAgICAgICBjdHgtPmdldF9wYWRkaW5nID0gZ2V0X25vX3BhZGRpbmc7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCitpbnQgbWJlZHRsc19jaXBoZXJfd3JpdGVfdGFnKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCB0YWdfbGVuICkKK3sKKyAgICBpZiggTlVMTCA9PSBjdHggfHwgTlVMTCA9PSBjdHgtPmNpcGhlcl9pbmZvIHx8IE5VTEwgPT0gdGFnICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBNQkVEVExTX0VOQ1JZUFQgIT0gY3R4LT5vcGVyYXRpb24gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIE1CRURUTFNfTU9ERV9HQ00gPT0gY3R4LT5jaXBoZXJfaW5mby0+bW9kZSApCisgICAgICAgIHJldHVybiBtYmVkdGxzX2djbV9maW5pc2goIChtYmVkdGxzX2djbV9jb250ZXh0ICopIGN0eC0+Y2lwaGVyX2N0eCwgdGFnLCB0YWdfbGVuICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfY2lwaGVyX2NoZWNrX3RhZyggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGFnLCBzaXplX3QgdGFnX2xlbiApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCBOVUxMID09IGN0eCB8fCBOVUxMID09IGN0eC0+Y2lwaGVyX2luZm8gfHwKKyAgICAgICAgTUJFRFRMU19ERUNSWVBUICE9IGN0eC0+b3BlcmF0aW9uICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgaWYoIE1CRURUTFNfTU9ERV9HQ00gPT0gY3R4LT5jaXBoZXJfaW5mby0+bW9kZSApCisgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGNoZWNrX3RhZ1sxNl07CisgICAgICAgIHNpemVfdCBpOworICAgICAgICBpbnQgZGlmZjsKKworICAgICAgICBpZiggdGFnX2xlbiA+IHNpemVvZiggY2hlY2tfdGFnICkgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICAgICBpZiggMCAhPSAoIHJldCA9IG1iZWR0bHNfZ2NtX2ZpbmlzaCggKG1iZWR0bHNfZ2NtX2NvbnRleHQgKikgY3R4LT5jaXBoZXJfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3RhZywgdGFnX2xlbiApICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgLyogQ2hlY2sgdGhlIHRhZyBpbiAiY29uc3RhbnQtdGltZSIgKi8KKyAgICAgICAgZm9yKCBkaWZmID0gMCwgaSA9IDA7IGkgPCB0YWdfbGVuOyBpKysgKQorICAgICAgICAgICAgZGlmZiB8PSB0YWdbaV0gXiBjaGVja190YWdbaV07CisKKyAgICAgICAgaWYoIGRpZmYgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRCApOworCisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKworLyoKKyAqIFBhY2tldC1vcmllbnRlZCB3cmFwcGVyIGZvciBub24tQUVBRCBtb2RlcworICovCitpbnQgbWJlZHRsc19jaXBoZXJfY3J5cHQoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgZmluaXNoX29sZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoIGN0eCwgaXYsIGl2X2xlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9yZXNldCggY3R4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggY3R4LCBpbnB1dCwgaWxlbiwgb3V0cHV0LCBvbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggY3R4LCBvdXRwdXQgKyAqb2xlbiwgJmZpbmlzaF9vbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICpvbGVuICs9IGZpbmlzaF9vbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQUVBRCkKKy8qCisgKiBQYWNrZXQtb3JpZW50ZWQgZW5jcnlwdGlvbiBmb3IgQUVBRCBtb2RlcworICovCitpbnQgbWJlZHRsc19jaXBoZXJfYXV0aF9lbmNyeXB0KCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZCwgc2l6ZV90IGFkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCBzaXplX3QgdGFnX2xlbiApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIGlmKCBNQkVEVExTX01PREVfR0NNID09IGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgKQorICAgIHsKKyAgICAgICAgKm9sZW4gPSBpbGVuOworICAgICAgICByZXR1cm4oIG1iZWR0bHNfZ2NtX2NyeXB0X2FuZF90YWcoIGN0eC0+Y2lwaGVyX2N0eCwgTUJFRFRMU19HQ01fRU5DUllQVCwgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXYsIGl2X2xlbiwgYWQsIGFkX2xlbiwgaW5wdXQsIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnX2xlbiwgdGFnICkgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyAgICBpZiggTUJFRFRMU19NT0RFX0NDTSA9PSBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlICkKKyAgICB7CisgICAgICAgICpvbGVuID0gaWxlbjsKKyAgICAgICAgcmV0dXJuKCBtYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWcoIGN0eC0+Y2lwaGVyX2N0eCwgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuLCBhZCwgYWRfbGVuLCBpbnB1dCwgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZywgdGFnX2xlbiApICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KKworICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKK30KKworLyoKKyAqIFBhY2tldC1vcmllbnRlZCBkZWNyeXB0aW9uIGZvciBBRUFEIG1vZGVzCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9hdXRoX2RlY3J5cHQoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkLCBzaXplX3QgYWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCB0YWdfbGVuICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgaWYoIE1CRURUTFNfTU9ERV9HQ00gPT0gY3R4LT5jaXBoZXJfaW5mby0+bW9kZSApCisgICAgeworICAgICAgICBpbnQgcmV0OworCisgICAgICAgICpvbGVuID0gaWxlbjsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19nY21fYXV0aF9kZWNyeXB0KCBjdHgtPmNpcGhlcl9jdHgsIGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW4sIGFkLCBhZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZywgdGFnX2xlbiwgaW5wdXQsIG91dHB1dCApOworCisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfR0NNX0FVVEhfRkFJTEVEICkKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRDsKKworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorICAgIGlmKCBNQkVEVExTX01PREVfQ0NNID09IGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgKQorICAgIHsKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICAqb2xlbiA9IGlsZW47CisgICAgICAgIHJldCA9IG1iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdCggY3R4LT5jaXBoZXJfY3R4LCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuLCBhZCwgYWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgb3V0cHV0LCB0YWcsIHRhZ19sZW4gKTsKKworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0NDTV9BVVRIX0ZBSUxFRCApCisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQ7CisKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19DQ01fQyAqLworCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQUVBRCAqLworCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY2lwaGVyX3dyYXAuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NpcGhlcl93cmFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM3NmFmOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NpcGhlcl93cmFwLmMKQEAgLTAsMCArMSwxNDUxIEBACisvKioKKyAqIFxmaWxlIGNpcGhlcl93cmFwLmMKKyAqCisgKiBcYnJpZWYgR2VuZXJpYyBjaXBoZXIgd3JhcHBlciBmb3IgbWJlZCBUTFMKKyAqCisgKiBcYXV0aG9yIEFkcmlhYW4gZGUgSm9uZyA8ZGVqb25nQGZveC1pdC5jb20+CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2NpcGhlcl9pbnRlcm5hbC5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2luY2x1ZGUgIm1iZWR0bHMvYWVzLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisjaW5jbHVkZSAibWJlZHRscy9hcmM0LmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvY2FtZWxsaWEuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorI2luY2x1ZGUgIm1iZWR0bHMvZGVzLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CTE9XRklTSF9DKQorI2luY2x1ZGUgIm1iZWR0bHMvYmxvd2Zpc2guaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvZ2NtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyNpbmNsdWRlICJtYmVkdGxzL2NjbS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorLyogc2hhcmVkIGJ5IGFsbCBHQ00gY2lwaGVycyAqLworc3RhdGljIHZvaWQgKmdjbV9jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIHZvaWQgKmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKSApOworCisgICAgaWYoIGN0eCAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19nY21faW5pdCggKG1iZWR0bHNfZ2NtX2NvbnRleHQgKikgY3R4ICk7CisKKyAgICByZXR1cm4oIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBnY21fY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19nY21fZnJlZSggY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisvKiBzaGFyZWQgYnkgYWxsIENDTSBjaXBoZXJzICovCitzdGF0aWMgdm9pZCAqY2NtX2N0eF9hbGxvYyggdm9pZCApCit7CisgICAgdm9pZCAqY3R4ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19jY21fY29udGV4dCApICk7CisKKyAgICBpZiggY3R4ICE9IE5VTEwgKQorICAgICAgICBtYmVkdGxzX2NjbV9pbml0KCAobWJlZHRsc19jY21fY29udGV4dCAqKSBjdHggKTsKKworICAgIHJldHVybiggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIGNjbV9jdHhfZnJlZSggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2NjbV9mcmVlKCBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKworc3RhdGljIGludCBhZXNfY3J5cHRfZWNiX3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb24sCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIHJldHVybiBtYmVkdGxzX2Flc19jcnlwdF9lY2IoIChtYmVkdGxzX2Flc19jb250ZXh0ICopIGN0eCwgb3BlcmF0aW9uLCBpbnB1dCwgb3V0cHV0ICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorc3RhdGljIGludCBhZXNfY3J5cHRfY2JjX3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb24sIHNpemVfdCBsZW5ndGgsCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKml2LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19hZXNfY3J5cHRfY2JjKCAobWJlZHRsc19hZXNfY29udGV4dCAqKSBjdHgsIG9wZXJhdGlvbiwgbGVuZ3RoLCBpdiwgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorc3RhdGljIGludCBhZXNfY3J5cHRfY2ZiMTI4X3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb24sCisgICAgICAgIHNpemVfdCBsZW5ndGgsIHNpemVfdCAqaXZfb2ZmLCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfYWVzX2NyeXB0X2NmYjEyOCggKG1iZWR0bHNfYWVzX2NvbnRleHQgKikgY3R4LCBvcGVyYXRpb24sIGxlbmd0aCwgaXZfb2ZmLCBpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIG91dHB1dCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorc3RhdGljIGludCBhZXNfY3J5cHRfY3RyX3dyYXAoIHZvaWQgKmN0eCwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90ICpuY19vZmYsCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKm5vbmNlX2NvdW50ZXIsIHVuc2lnbmVkIGNoYXIgKnN0cmVhbV9ibG9jaywKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfYWVzX2NyeXB0X2N0ciggKG1iZWR0bHNfYWVzX2NvbnRleHQgKikgY3R4LCBsZW5ndGgsIG5jX29mZiwgbm9uY2VfY291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtX2Jsb2NrLCBpbnB1dCwgb3V0cHV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIgKi8KKworc3RhdGljIGludCBhZXNfc2V0a2V5X2RlY193cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4gKQoreworICAgIHJldHVybiBtYmVkdGxzX2Flc19zZXRrZXlfZGVjKCAobWJlZHRsc19hZXNfY29udGV4dCAqKSBjdHgsIGtleSwga2V5X2JpdGxlbiApOworfQorCitzdGF0aWMgaW50IGFlc19zZXRrZXlfZW5jX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbiApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoIChtYmVkdGxzX2Flc19jb250ZXh0ICopIGN0eCwga2V5LCBrZXlfYml0bGVuICk7Cit9CisKK3N0YXRpYyB2b2lkICogYWVzX2N0eF9hbGxvYyggdm9pZCApCit7CisgICAgbWJlZHRsc19hZXNfY29udGV4dCAqYWVzID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19hZXNfY29udGV4dCApICk7CisKKyAgICBpZiggYWVzID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE5VTEwgKTsKKworICAgIG1iZWR0bHNfYWVzX2luaXQoIGFlcyApOworCisgICAgcmV0dXJuKCBhZXMgKTsKK30KKworc3RhdGljIHZvaWQgYWVzX2N0eF9mcmVlKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfYWVzX2ZyZWUoIChtYmVkdGxzX2Flc19jb250ZXh0ICopIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QgYWVzX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfSURfQUVTLAorICAgIGFlc19jcnlwdF9lY2Jfd3JhcCwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGFlc19jcnlwdF9jYmNfd3JhcCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisgICAgYWVzX2NyeXB0X2NmYjEyOF93cmFwLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBhZXNfY3J5cHRfY3RyX3dyYXAsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIE5VTEwsCisjZW5kaWYKKyAgICBhZXNfc2V0a2V5X2VuY193cmFwLAorICAgIGFlc19zZXRrZXlfZGVjX3dyYXAsCisgICAgYWVzX2N0eF9hbGxvYywKKyAgICBhZXNfY3R4X2ZyZWUKK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzEyOF9lY2JfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQiwKKyAgICBNQkVEVExTX01PREVfRUNCLAorICAgIDEyOCwKKyAgICAiQUVTLTEyOC1FQ0IiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmFlc19pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18xOTJfZWNiX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0IsCisgICAgTUJFRFRMU19NT0RFX0VDQiwKKyAgICAxOTIsCisgICAgIkFFUy0xOTItRUNCIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZhZXNfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMjU2X2VjYl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCLAorICAgIE1CRURUTFNfTU9ERV9FQ0IsCisgICAgMjU2LAorICAgICJBRVMtMjU2LUVDQiIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmYWVzX2luZm8KK307CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMTI4X2NiY19pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLAorICAgIE1CRURUTFNfTU9ERV9DQkMsCisgICAgMTI4LAorICAgICJBRVMtMTI4LUNCQyIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmYWVzX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzE5Ml9jYmNfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQywKKyAgICBNQkVEVExTX01PREVfQ0JDLAorICAgIDE5MiwKKyAgICAiQUVTLTE5Mi1DQkMiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmFlc19pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18yNTZfY2JjX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsCisgICAgTUJFRFRMU19NT0RFX0NCQywKKyAgICAyNTYsCisgICAgIkFFUy0yNTYtQ0JDIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZhZXNfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzEyOF9jZmIxMjhfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyOCwKKyAgICBNQkVEVExTX01PREVfQ0ZCLAorICAgIDEyOCwKKyAgICAiQUVTLTEyOC1DRkIxMjgiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmFlc19pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18xOTJfY2ZiMTI4X2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DRkIxMjgsCisgICAgTUJFRFRMU19NT0RFX0NGQiwKKyAgICAxOTIsCisgICAgIkFFUy0xOTItQ0ZCMTI4IiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZhZXNfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMjU2X2NmYjEyOF9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0ZCMTI4LAorICAgIE1CRURUTFNfTU9ERV9DRkIsCisgICAgMjU2LAorICAgICJBRVMtMjU2LUNGQjEyOCIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmYWVzX2luZm8KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18xMjhfY3RyX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFIsCisgICAgTUJFRFRMU19NT0RFX0NUUiwKKyAgICAxMjgsCisgICAgIkFFUy0xMjgtQ1RSIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZhZXNfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMTkyX2N0cl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ1RSLAorICAgIE1CRURUTFNfTU9ERV9DVFIsCisgICAgMTkyLAorICAgICJBRVMtMTkyLUNUUiIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmYWVzX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzI1Nl9jdHJfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NUUiwKKyAgICBNQkVEVExTX01PREVfQ1RSLAorICAgIDI1NiwKKyAgICAiQUVTLTI1Ni1DVFIiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmFlc19pbmZvCit9OworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCitzdGF0aWMgaW50IGdjbV9hZXNfc2V0a2V5X3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbiApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfZ2NtX3NldGtleSggKG1iZWR0bHNfZ2NtX2NvbnRleHQgKikgY3R4LCBNQkVEVExTX0NJUEhFUl9JRF9BRVMsCisgICAgICAgICAgICAgICAgICAgICBrZXksIGtleV9iaXRsZW4gKTsKK30KKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCBnY21fYWVzX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfSURfQUVTLAorICAgIE5VTEwsCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTSkKKyAgICBOVUxMLAorI2VuZGlmCisgICAgZ2NtX2Flc19zZXRrZXlfd3JhcCwKKyAgICBnY21fYWVzX3NldGtleV93cmFwLAorICAgIGdjbV9jdHhfYWxsb2MsCisgICAgZ2NtX2N0eF9mcmVlLAorfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMTI4X2djbV9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLAorICAgIE1CRURUTFNfTU9ERV9HQ00sCisgICAgMTI4LAorICAgICJBRVMtMTI4LUdDTSIsCisgICAgMTIsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOLAorICAgIDE2LAorICAgICZnY21fYWVzX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzE5Ml9nY21faW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTSwKKyAgICBNQkVEVExTX01PREVfR0NNLAorICAgIDE5MiwKKyAgICAiQUVTLTE5Mi1HQ00iLAorICAgIDEyLAorICAgIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTiwKKyAgICAxNiwKKyAgICAmZ2NtX2Flc19pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18yNTZfZ2NtX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ00sCisgICAgTUJFRFRMU19NT0RFX0dDTSwKKyAgICAyNTYsCisgICAgIkFFUy0yNTYtR0NNIiwKKyAgICAxMiwKKyAgICBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9JVl9MRU4sCisgICAgMTYsCisgICAgJmdjbV9hZXNfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCitzdGF0aWMgaW50IGNjbV9hZXNfc2V0a2V5X3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbiApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfY2NtX3NldGtleSggKG1iZWR0bHNfY2NtX2NvbnRleHQgKikgY3R4LCBNQkVEVExTX0NJUEhFUl9JRF9BRVMsCisgICAgICAgICAgICAgICAgICAgICBrZXksIGtleV9iaXRsZW4gKTsKK30KKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCBjY21fYWVzX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfSURfQUVTLAorICAgIE5VTEwsCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTSkKKyAgICBOVUxMLAorI2VuZGlmCisgICAgY2NtX2Flc19zZXRrZXlfd3JhcCwKKyAgICBjY21fYWVzX3NldGtleV93cmFwLAorICAgIGNjbV9jdHhfYWxsb2MsCisgICAgY2NtX2N0eF9mcmVlLAorfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMTI4X2NjbV9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNLAorICAgIE1CRURUTFNfTU9ERV9DQ00sCisgICAgMTI4LAorICAgICJBRVMtMTI4LUNDTSIsCisgICAgMTIsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOLAorICAgIDE2LAorICAgICZjY21fYWVzX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzE5Ml9jY21faW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTSwKKyAgICBNQkVEVExTX01PREVfQ0NNLAorICAgIDE5MiwKKyAgICAiQUVTLTE5Mi1DQ00iLAorICAgIDEyLAorICAgIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTiwKKyAgICAxNiwKKyAgICAmY2NtX2Flc19pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18yNTZfY2NtX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ00sCisgICAgTUJFRFRMU19NT0RFX0NDTSwKKyAgICAyNTYsCisgICAgIkFFUy0yNTYtQ0NNIiwKKyAgICAxMiwKKyAgICBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9JVl9MRU4sCisgICAgMTYsCisgICAgJmNjbV9hZXNfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NDTV9DICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKworc3RhdGljIGludCBjYW1lbGxpYV9jcnlwdF9lY2Jfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX29wZXJhdGlvbl90IG9wZXJhdGlvbiwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiKCAobWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICopIGN0eCwgb3BlcmF0aW9uLCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCitzdGF0aWMgaW50IGNhbWVsbGlhX2NyeXB0X2NiY193cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uLAorICAgICAgICBzaXplX3QgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2JjKCAobWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICopIGN0eCwgb3BlcmF0aW9uLCBsZW5ndGgsIGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKK3N0YXRpYyBpbnQgY2FtZWxsaWFfY3J5cHRfY2ZiMTI4X3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb24sCisgICAgICAgIHNpemVfdCBsZW5ndGgsIHNpemVfdCAqaXZfb2ZmLCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2ZiMTI4KCAobWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICopIGN0eCwgb3BlcmF0aW9uLCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfb2ZmLCBpdiwgaW5wdXQsIG91dHB1dCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorc3RhdGljIGludCBjYW1lbGxpYV9jcnlwdF9jdHJfd3JhcCggdm9pZCAqY3R4LCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgKm5jX29mZiwKKyAgICAgICAgdW5zaWduZWQgY2hhciAqbm9uY2VfY291bnRlciwgdW5zaWduZWQgY2hhciAqc3RyZWFtX2Jsb2NrLAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jdHIoIChtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKikgY3R4LCBsZW5ndGgsIG5jX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25jZV9jb3VudGVyLCBzdHJlYW1fYmxvY2ssIGlucHV0LCBvdXRwdXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCitzdGF0aWMgaW50IGNhbWVsbGlhX3NldGtleV9kZWNfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4gKQoreworICAgIHJldHVybiBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9kZWMoIChtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKikgY3R4LCBrZXksIGtleV9iaXRsZW4gKTsKK30KKworc3RhdGljIGludCBjYW1lbGxpYV9zZXRrZXlfZW5jX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCAobWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICopIGN0eCwga2V5LCBrZXlfYml0bGVuICk7Cit9CisKK3N0YXRpYyB2b2lkICogY2FtZWxsaWFfY3R4X2FsbG9jKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eDsKKyAgICBjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKSApOworCisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2luaXQoIGN0eCApOworCisgICAgcmV0dXJuKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgY2FtZWxsaWFfY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19jYW1lbGxpYV9mcmVlKCAobWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICopIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QgY2FtZWxsaWFfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQSwKKyAgICBjYW1lbGxpYV9jcnlwdF9lY2Jfd3JhcCwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGNhbWVsbGlhX2NyeXB0X2NiY193cmFwLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICBjYW1lbGxpYV9jcnlwdF9jZmIxMjhfd3JhcCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisgICAgY2FtZWxsaWFfY3J5cHRfY3RyX3dyYXAsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIE5VTEwsCisjZW5kaWYKKyAgICBjYW1lbGxpYV9zZXRrZXlfZW5jX3dyYXAsCisgICAgY2FtZWxsaWFfc2V0a2V5X2RlY193cmFwLAorICAgIGNhbWVsbGlhX2N0eF9hbGxvYywKKyAgICBjYW1lbGxpYV9jdHhfZnJlZQorfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8xMjhfZWNiX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0VDQiwKKyAgICBNQkVEVExTX01PREVfRUNCLAorICAgIDEyOCwKKyAgICAiQ0FNRUxMSUEtMTI4LUVDQiIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmY2FtZWxsaWFfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8xOTJfZWNiX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0VDQiwKKyAgICBNQkVEVExTX01PREVfRUNCLAorICAgIDE5MiwKKyAgICAiQ0FNRUxMSUEtMTkyLUVDQiIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmY2FtZWxsaWFfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8yNTZfZWNiX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0VDQiwKKyAgICBNQkVEVExTX01PREVfRUNCLAorICAgIDI1NiwKKyAgICAiQ0FNRUxMSUEtMjU2LUVDQiIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmY2FtZWxsaWFfaW5mbworfTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzEyOF9jYmNfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDLAorICAgIE1CRURUTFNfTU9ERV9DQkMsCisgICAgMTI4LAorICAgICJDQU1FTExJQS0xMjgtQ0JDIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZjYW1lbGxpYV9pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzE5Ml9jYmNfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDLAorICAgIE1CRURUTFNfTU9ERV9DQkMsCisgICAgMTkyLAorICAgICJDQU1FTExJQS0xOTItQ0JDIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZjYW1lbGxpYV9pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzI1Nl9jYmNfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDLAorICAgIE1CRURUTFNfTU9ERV9DQkMsCisgICAgMjU2LAorICAgICJDQU1FTExJQS0yNTYtQ0JDIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZjYW1lbGxpYV9pbmZvCit9OworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8xMjhfY2ZiMTI4X2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyOCwKKyAgICBNQkVEVExTX01PREVfQ0ZCLAorICAgIDEyOCwKKyAgICAiQ0FNRUxMSUEtMTI4LUNGQjEyOCIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmY2FtZWxsaWFfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8xOTJfY2ZiMTI4X2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NGQjEyOCwKKyAgICBNQkVEVExTX01PREVfQ0ZCLAorICAgIDE5MiwKKyAgICAiQ0FNRUxMSUEtMTkyLUNGQjEyOCIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmY2FtZWxsaWFfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8yNTZfY2ZiMTI4X2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NGQjEyOCwKKyAgICBNQkVEVExTX01PREVfQ0ZCLAorICAgIDI1NiwKKyAgICAiQ0FNRUxMSUEtMjU2LUNGQjEyOCIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmY2FtZWxsaWFfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgY2FtZWxsaWFfMTI4X2N0cl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFIsCisgICAgTUJFRFRMU19NT0RFX0NUUiwKKyAgICAxMjgsCisgICAgIkNBTUVMTElBLTEyOC1DVFIiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmNhbWVsbGlhX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgY2FtZWxsaWFfMTkyX2N0cl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DVFIsCisgICAgTUJFRFRMU19NT0RFX0NUUiwKKyAgICAxOTIsCisgICAgIkNBTUVMTElBLTE5Mi1DVFIiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmNhbWVsbGlhX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgY2FtZWxsaWFfMjU2X2N0cl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DVFIsCisgICAgTUJFRFRMU19NT0RFX0NUUiwKKyAgICAyNTYsCisgICAgIkNBTUVMTElBLTI1Ni1DVFIiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmNhbWVsbGlhX2luZm8KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKK3N0YXRpYyBpbnQgZ2NtX2NhbWVsbGlhX3NldGtleV93cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbiApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfZ2NtX3NldGtleSggKG1iZWR0bHNfZ2NtX2NvbnRleHQgKikgY3R4LCBNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQSwKKyAgICAgICAgICAgICAgICAgICAgIGtleSwga2V5X2JpdGxlbiApOworfQorCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfYmFzZV90IGdjbV9jYW1lbGxpYV9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBLAorICAgIE5VTEwsCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTSkKKyAgICBOVUxMLAorI2VuZGlmCisgICAgZ2NtX2NhbWVsbGlhX3NldGtleV93cmFwLAorICAgIGdjbV9jYW1lbGxpYV9zZXRrZXlfd3JhcCwKKyAgICBnY21fY3R4X2FsbG9jLAorICAgIGdjbV9jdHhfZnJlZSwKK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgY2FtZWxsaWFfMTI4X2djbV9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00sCisgICAgTUJFRFRMU19NT0RFX0dDTSwKKyAgICAxMjgsCisgICAgIkNBTUVMTElBLTEyOC1HQ00iLAorICAgIDEyLAorICAgIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTiwKKyAgICAxNiwKKyAgICAmZ2NtX2NhbWVsbGlhX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgY2FtZWxsaWFfMTkyX2djbV9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ00sCisgICAgTUJFRFRMU19NT0RFX0dDTSwKKyAgICAxOTIsCisgICAgIkNBTUVMTElBLTE5Mi1HQ00iLAorICAgIDEyLAorICAgIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTiwKKyAgICAxNiwKKyAgICAmZ2NtX2NhbWVsbGlhX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgY2FtZWxsaWFfMjU2X2djbV9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00sCisgICAgTUJFRFRMU19NT0RFX0dDTSwKKyAgICAyNTYsCisgICAgIkNBTUVMTElBLTI1Ni1HQ00iLAorICAgIDEyLAorICAgIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTiwKKyAgICAxNiwKKyAgICAmZ2NtX2NhbWVsbGlhX2luZm8KK307CisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorc3RhdGljIGludCBjY21fY2FtZWxsaWFfc2V0a2V5X3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19jY21fc2V0a2V5KCAobWJlZHRsc19jY21fY29udGV4dCAqKSBjdHgsIE1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBLAorICAgICAgICAgICAgICAgICAgICAga2V5LCBrZXlfYml0bGVuICk7Cit9CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QgY2NtX2NhbWVsbGlhX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUEsCisgICAgTlVMTCwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIE5VTEwsCisjZW5kaWYKKyAgICBjY21fY2FtZWxsaWFfc2V0a2V5X3dyYXAsCisgICAgY2NtX2NhbWVsbGlhX3NldGtleV93cmFwLAorICAgIGNjbV9jdHhfYWxsb2MsCisgICAgY2NtX2N0eF9mcmVlLAorfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8xMjhfY2NtX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTSwKKyAgICBNQkVEVExTX01PREVfQ0NNLAorICAgIDEyOCwKKyAgICAiQ0FNRUxMSUEtMTI4LUNDTSIsCisgICAgMTIsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOLAorICAgIDE2LAorICAgICZjY21fY2FtZWxsaWFfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8xOTJfY2NtX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NDTSwKKyAgICBNQkVEVExTX01PREVfQ0NNLAorICAgIDE5MiwKKyAgICAiQ0FNRUxMSUEtMTkyLUNDTSIsCisgICAgMTIsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOLAorICAgIDE2LAorICAgICZjY21fY2FtZWxsaWFfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8yNTZfY2NtX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NDTSwKKyAgICBNQkVEVExTX01PREVfQ0NNLAorICAgIDI1NiwKKyAgICAiQ0FNRUxMSUEtMjU2LUNDTSIsCisgICAgMTIsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOLAorICAgIDE2LAorICAgICZjY21fY2FtZWxsaWFfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NDTV9DICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKworc3RhdGljIGludCBkZXNfY3J5cHRfZWNiX3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb24sCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgICgodm9pZCkgb3BlcmF0aW9uKTsKKyAgICByZXR1cm4gbWJlZHRsc19kZXNfY3J5cHRfZWNiKCAobWJlZHRsc19kZXNfY29udGV4dCAqKSBjdHgsIGlucHV0LCBvdXRwdXQgKTsKK30KKworc3RhdGljIGludCBkZXMzX2NyeXB0X2VjYl93cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uLAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICAoKHZvaWQpIG9wZXJhdGlvbik7CisgICAgcmV0dXJuIG1iZWR0bHNfZGVzM19jcnlwdF9lY2IoIChtYmVkdGxzX2RlczNfY29udGV4dCAqKSBjdHgsIGlucHV0LCBvdXRwdXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCitzdGF0aWMgaW50IGRlc19jcnlwdF9jYmNfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX29wZXJhdGlvbl90IG9wZXJhdGlvbiwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgdW5zaWduZWQgY2hhciAqaXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIHJldHVybiBtYmVkdGxzX2Rlc19jcnlwdF9jYmMoIChtYmVkdGxzX2Rlc19jb250ZXh0ICopIGN0eCwgb3BlcmF0aW9uLCBsZW5ndGgsIGl2LCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCitzdGF0aWMgaW50IGRlczNfY3J5cHRfY2JjX3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb24sIHNpemVfdCBsZW5ndGgsCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKml2LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19kZXMzX2NyeXB0X2NiYyggKG1iZWR0bHNfZGVzM19jb250ZXh0ICopIGN0eCwgb3BlcmF0aW9uLCBsZW5ndGgsIGl2LCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKK3N0YXRpYyBpbnQgZGVzX3NldGtleV9kZWNfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICAoKHZvaWQpIGtleV9iaXRsZW4pOworCisgICAgcmV0dXJuIG1iZWR0bHNfZGVzX3NldGtleV9kZWMoIChtYmVkdGxzX2Rlc19jb250ZXh0ICopIGN0eCwga2V5ICk7Cit9CisKK3N0YXRpYyBpbnQgZGVzX3NldGtleV9lbmNfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICAoKHZvaWQpIGtleV9iaXRsZW4pOworCisgICAgcmV0dXJuIG1iZWR0bHNfZGVzX3NldGtleV9lbmMoIChtYmVkdGxzX2Rlc19jb250ZXh0ICopIGN0eCwga2V5ICk7Cit9CisKK3N0YXRpYyBpbnQgZGVzM19zZXQya2V5X2RlY193cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbiApCit7CisgICAgKCh2b2lkKSBrZXlfYml0bGVuKTsKKworICAgIHJldHVybiBtYmVkdGxzX2RlczNfc2V0MmtleV9kZWMoIChtYmVkdGxzX2RlczNfY29udGV4dCAqKSBjdHgsIGtleSApOworfQorCitzdGF0aWMgaW50IGRlczNfc2V0MmtleV9lbmNfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4gKQoreworICAgICgodm9pZCkga2V5X2JpdGxlbik7CisKKyAgICByZXR1cm4gbWJlZHRsc19kZXMzX3NldDJrZXlfZW5jKCAobWJlZHRsc19kZXMzX2NvbnRleHQgKikgY3R4LCBrZXkgKTsKK30KKworc3RhdGljIGludCBkZXMzX3NldDNrZXlfZGVjX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICAoKHZvaWQpIGtleV9iaXRsZW4pOworCisgICAgcmV0dXJuIG1iZWR0bHNfZGVzM19zZXQza2V5X2RlYyggKG1iZWR0bHNfZGVzM19jb250ZXh0ICopIGN0eCwga2V5ICk7Cit9CisKK3N0YXRpYyBpbnQgZGVzM19zZXQza2V5X2VuY193cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbiApCit7CisgICAgKCh2b2lkKSBrZXlfYml0bGVuKTsKKworICAgIHJldHVybiBtYmVkdGxzX2RlczNfc2V0M2tleV9lbmMoIChtYmVkdGxzX2RlczNfY29udGV4dCAqKSBjdHgsIGtleSApOworfQorCitzdGF0aWMgdm9pZCAqIGRlc19jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIG1iZWR0bHNfZGVzX2NvbnRleHQgKmRlcyA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfZGVzX2NvbnRleHQgKSApOworCisgICAgaWYoIGRlcyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICBtYmVkdGxzX2Rlc19pbml0KCBkZXMgKTsKKworICAgIHJldHVybiggZGVzICk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc19jdHhfZnJlZSggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2Rlc19mcmVlKCAobWJlZHRsc19kZXNfY29udGV4dCAqKSBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorCitzdGF0aWMgdm9pZCAqIGRlczNfY3R4X2FsbG9jKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX2RlczNfY29udGV4dCAqZGVzMzsKKyAgICBkZXMzID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19kZXMzX2NvbnRleHQgKSApOworCisgICAgaWYoIGRlczMgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgbWJlZHRsc19kZXMzX2luaXQoIGRlczMgKTsKKworICAgIHJldHVybiggZGVzMyApOworfQorCitzdGF0aWMgdm9pZCBkZXMzX2N0eF9mcmVlKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfZGVzM19mcmVlKCAobWJlZHRsc19kZXMzX2NvbnRleHQgKikgY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCBkZXNfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9ERVMsCisgICAgZGVzX2NyeXB0X2VjYl93cmFwLAorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgZGVzX2NyeXB0X2NiY193cmFwLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTSkKKyAgICBOVUxMLAorI2VuZGlmCisgICAgZGVzX3NldGtleV9lbmNfd3JhcCwKKyAgICBkZXNfc2V0a2V5X2RlY193cmFwLAorICAgIGRlc19jdHhfYWxsb2MsCisgICAgZGVzX2N0eF9mcmVlCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGRlc19lY2JfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9ERVNfRUNCLAorICAgIE1CRURUTFNfTU9ERV9FQ0IsCisgICAgTUJFRFRMU19LRVlfTEVOR1RIX0RFUywKKyAgICAiREVTLUVDQiIsCisgICAgOCwKKyAgICAwLAorICAgIDgsCisgICAgJmRlc19pbmZvCit9OworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgZGVzX2NiY19pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0RFU19DQkMsCisgICAgTUJFRFRMU19NT0RFX0NCQywKKyAgICBNQkVEVExTX0tFWV9MRU5HVEhfREVTLAorICAgICJERVMtQ0JDIiwKKyAgICA4LAorICAgIDAsCisgICAgOCwKKyAgICAmZGVzX2luZm8KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCBkZXNfZWRlX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfSURfREVTLAorICAgIGRlczNfY3J5cHRfZWNiX3dyYXAsCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBkZXMzX2NyeXB0X2NiY193cmFwLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTSkKKyAgICBOVUxMLAorI2VuZGlmCisgICAgZGVzM19zZXQya2V5X2VuY193cmFwLAorICAgIGRlczNfc2V0MmtleV9kZWNfd3JhcCwKKyAgICBkZXMzX2N0eF9hbGxvYywKKyAgICBkZXMzX2N0eF9mcmVlCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGRlc19lZGVfZWNiX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERV9FQ0IsCisgICAgTUJFRFRMU19NT0RFX0VDQiwKKyAgICBNQkVEVExTX0tFWV9MRU5HVEhfREVTX0VERSwKKyAgICAiREVTLUVERS1FQ0IiLAorICAgIDgsCisgICAgMCwKKyAgICA4LAorICAgICZkZXNfZWRlX2luZm8KK307CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBkZXNfZWRlX2NiY19pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDLAorICAgIE1CRURUTFNfTU9ERV9DQkMsCisgICAgTUJFRFRMU19LRVlfTEVOR1RIX0RFU19FREUsCisgICAgIkRFUy1FREUtQ0JDIiwKKyAgICA4LAorICAgIDAsCisgICAgOCwKKyAgICAmZGVzX2VkZV9pbmZvCit9OworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QgZGVzX2VkZTNfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9JRF8zREVTLAorICAgIGRlczNfY3J5cHRfZWNiX3dyYXAsCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBkZXMzX2NyeXB0X2NiY193cmFwLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTSkKKyAgICBOVUxMLAorI2VuZGlmCisgICAgZGVzM19zZXQza2V5X2VuY193cmFwLAorICAgIGRlczNfc2V0M2tleV9kZWNfd3JhcCwKKyAgICBkZXMzX2N0eF9hbGxvYywKKyAgICBkZXMzX2N0eF9mcmVlCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGRlc19lZGUzX2VjYl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0VDQiwKKyAgICBNQkVEVExTX01PREVfRUNCLAorICAgIE1CRURUTFNfS0VZX0xFTkdUSF9ERVNfRURFMywKKyAgICAiREVTLUVERTMtRUNCIiwKKyAgICA4LAorICAgIDAsCisgICAgOCwKKyAgICAmZGVzX2VkZTNfaW5mbworfTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBkZXNfZWRlM19jYmNfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMsCisgICAgTUJFRFRMU19NT0RFX0NCQywKKyAgICBNQkVEVExTX0tFWV9MRU5HVEhfREVTX0VERTMsCisgICAgIkRFUy1FREUzLUNCQyIsCisgICAgOCwKKyAgICAwLAorICAgIDgsCisgICAgJmRlc19lZGUzX2luZm8KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQkxPV0ZJU0hfQykKKworc3RhdGljIGludCBibG93ZmlzaF9jcnlwdF9lY2Jfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX29wZXJhdGlvbl90IG9wZXJhdGlvbiwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCAobWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICopIGN0eCwgb3BlcmF0aW9uLCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCitzdGF0aWMgaW50IGJsb3dmaXNoX2NyeXB0X2NiY193cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uLAorICAgICAgICBzaXplX3QgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyICppdiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2JjKCAobWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICopIGN0eCwgb3BlcmF0aW9uLCBsZW5ndGgsIGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKK3N0YXRpYyBpbnQgYmxvd2Zpc2hfY3J5cHRfY2ZiNjRfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX29wZXJhdGlvbl90IG9wZXJhdGlvbiwKKyAgICAgICAgc2l6ZV90IGxlbmd0aCwgc2l6ZV90ICppdl9vZmYsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jZmI2NCggKG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqKSBjdHgsIG9wZXJhdGlvbiwgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfb2ZmLCBpdiwgaW5wdXQsIG91dHB1dCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorc3RhdGljIGludCBibG93ZmlzaF9jcnlwdF9jdHJfd3JhcCggdm9pZCAqY3R4LCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgKm5jX29mZiwKKyAgICAgICAgdW5zaWduZWQgY2hhciAqbm9uY2VfY291bnRlciwgdW5zaWduZWQgY2hhciAqc3RyZWFtX2Jsb2NrLAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jdHIoIChtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKikgY3R4LCBsZW5ndGgsIG5jX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25jZV9jb3VudGVyLCBzdHJlYW1fYmxvY2ssIGlucHV0LCBvdXRwdXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCitzdGF0aWMgaW50IGJsb3dmaXNoX3NldGtleV93cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoIChtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKikgY3R4LCBrZXksIGtleV9iaXRsZW4gKTsKK30KKworc3RhdGljIHZvaWQgKiBibG93ZmlzaF9jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4OworICAgIGN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCApICk7CisKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE5VTEwgKTsKKworICAgIG1iZWR0bHNfYmxvd2Zpc2hfaW5pdCggY3R4ICk7CisKKyAgICByZXR1cm4oIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBibG93ZmlzaF9jdHhfZnJlZSggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2ZyZWUoIChtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKikgY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCBibG93ZmlzaF9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0lEX0JMT1dGSVNILAorICAgIGJsb3dmaXNoX2NyeXB0X2VjYl93cmFwLAorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgYmxvd2Zpc2hfY3J5cHRfY2JjX3dyYXAsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIGJsb3dmaXNoX2NyeXB0X2NmYjY0X3dyYXAsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIGJsb3dmaXNoX2NyeXB0X2N0cl93cmFwLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTSkKKyAgICBOVUxMLAorI2VuZGlmCisgICAgYmxvd2Zpc2hfc2V0a2V5X3dyYXAsCisgICAgYmxvd2Zpc2hfc2V0a2V5X3dyYXAsCisgICAgYmxvd2Zpc2hfY3R4X2FsbG9jLAorICAgIGJsb3dmaXNoX2N0eF9mcmVlCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGJsb3dmaXNoX2VjYl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQiwKKyAgICBNQkVEVExTX01PREVfRUNCLAorICAgIDEyOCwKKyAgICAiQkxPV0ZJU0gtRUNCIiwKKyAgICA4LAorICAgIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0tFWV9MRU4sCisgICAgOCwKKyAgICAmYmxvd2Zpc2hfaW5mbworfTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGJsb3dmaXNoX2NiY19pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQywKKyAgICBNQkVEVExTX01PREVfQ0JDLAorICAgIDEyOCwKKyAgICAiQkxPV0ZJU0gtQ0JDIiwKKyAgICA4LAorICAgIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0tFWV9MRU4sCisgICAgOCwKKyAgICAmYmxvd2Zpc2hfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYmxvd2Zpc2hfY2ZiNjRfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NCwKKyAgICBNQkVEVExTX01PREVfQ0ZCLAorICAgIDEyOCwKKyAgICAiQkxPV0ZJU0gtQ0ZCNjQiLAorICAgIDgsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfS0VZX0xFTiwKKyAgICA4LAorICAgICZibG93ZmlzaF9pbmZvCit9OworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBibG93ZmlzaF9jdHJfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFIsCisgICAgTUJFRFRMU19NT0RFX0NUUiwKKyAgICAxMjgsCisgICAgIkJMT1dGSVNILUNUUiIsCisgICAgOCwKKyAgICBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9LRVlfTEVOLAorICAgIDgsCisgICAgJmJsb3dmaXNoX2luZm8KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0JMT1dGSVNIX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCitzdGF0aWMgaW50IGFyYzRfY3J5cHRfc3RyZWFtX3dyYXAoIHZvaWQgKmN0eCwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgcmV0dXJuKCBtYmVkdGxzX2FyYzRfY3J5cHQoIChtYmVkdGxzX2FyYzRfY29udGV4dCAqKSBjdHgsIGxlbmd0aCwgaW5wdXQsIG91dHB1dCApICk7Cit9CisKK3N0YXRpYyBpbnQgYXJjNF9zZXRrZXlfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICAvKiB3ZSBnZXQga2V5X2JpdGxlbiBpbiBiaXRzLCBhcmM0IGV4cGVjdHMgaXQgaW4gYnl0ZXMgKi8KKyAgICBpZigga2V5X2JpdGxlbiAlIDggIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtYmVkdGxzX2FyYzRfc2V0dXAoIChtYmVkdGxzX2FyYzRfY29udGV4dCAqKSBjdHgsIGtleSwga2V5X2JpdGxlbiAvIDggKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIHZvaWQgKiBhcmM0X2N0eF9hbGxvYyggdm9pZCApCit7CisgICAgbWJlZHRsc19hcmM0X2NvbnRleHQgKmN0eDsKKyAgICBjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX2FyYzRfY29udGV4dCApICk7CisKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE5VTEwgKTsKKworICAgIG1iZWR0bHNfYXJjNF9pbml0KCBjdHggKTsKKworICAgIHJldHVybiggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIGFyYzRfY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19hcmM0X2ZyZWUoIChtYmVkdGxzX2FyYzRfY29udGV4dCAqKSBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfYmFzZV90IGFyYzRfYmFzZV9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0lEX0FSQzQsCisgICAgTlVMTCwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIGFyYzRfY3J5cHRfc3RyZWFtX3dyYXAsCisjZW5kaWYKKyAgICBhcmM0X3NldGtleV93cmFwLAorICAgIGFyYzRfc2V0a2V5X3dyYXAsCisgICAgYXJjNF9jdHhfYWxsb2MsCisgICAgYXJjNF9jdHhfZnJlZQorfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhcmM0XzEyOF9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4LAorICAgIE1CRURUTFNfTU9ERV9TVFJFQU0sCisgICAgMTI4LAorICAgICJBUkM0LTEyOCIsCisgICAgMCwKKyAgICAwLAorICAgIDEsCisgICAgJmFyYzRfYmFzZV9pbmZvCit9OworI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSKQorc3RhdGljIGludCBudWxsX2NyeXB0X3N0cmVhbSggdm9pZCAqY3R4LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgICgodm9pZCkgY3R4KTsKKyAgICBtZW1tb3ZlKCBvdXRwdXQsIGlucHV0LCBsZW5ndGggKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCBudWxsX3NldGtleSggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbiApCit7CisgICAgKCh2b2lkKSBjdHgpOworICAgICgodm9pZCkga2V5KTsKKyAgICAoKHZvaWQpIGtleV9iaXRsZW4pOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyB2b2lkICogbnVsbF9jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIHJldHVybiggKHZvaWQgKikgMSApOworfQorCitzdGF0aWMgdm9pZCBudWxsX2N0eF9mcmVlKCB2b2lkICpjdHggKQoreworICAgICgodm9pZCkgY3R4KTsKK30KKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCBudWxsX2Jhc2VfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9OVUxMLAorICAgIE5VTEwsCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBOVUxMLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTSkKKyAgICBudWxsX2NyeXB0X3N0cmVhbSwKKyNlbmRpZgorICAgIG51bGxfc2V0a2V5LAorICAgIG51bGxfc2V0a2V5LAorICAgIG51bGxfY3R4X2FsbG9jLAorICAgIG51bGxfY3R4X2ZyZWUKK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgbnVsbF9jaXBoZXJfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9OVUxMLAorICAgIE1CRURUTFNfTU9ERV9TVFJFQU0sCisgICAgMCwKKyAgICAiTlVMTCIsCisgICAgMCwKKyAgICAwLAorICAgIDEsCisgICAgJm51bGxfYmFzZV9pbmZvCit9OworI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIpICovCisKK2NvbnN0IG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25fdCBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9uc1tdID0KK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQiwgICAgICAgICAgJmFlc18xMjhfZWNiX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCLCAgICAgICAgICAmYWVzXzE5Ml9lY2JfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0IsICAgICAgICAgICZhZXNfMjU2X2VjYl9pbmZvIH0sCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCAgICAgICAgICAmYWVzXzEyOF9jYmNfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkMsICAgICAgICAgICZhZXNfMTkyX2NiY19pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgICAgICAgICAgJmFlc18yNTZfY2JjX2luZm8gfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyOCwgICAgICAgJmFlc18xMjhfY2ZiMTI4X2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0ZCMTI4LCAgICAgICAmYWVzXzE5Ml9jZmIxMjhfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DRkIxMjgsICAgICAgICZhZXNfMjU2X2NmYjEyOF9pbmZvIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFIsICAgICAgICAgICZhZXNfMTI4X2N0cl9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NUUiwgICAgICAgICAgJmFlc18xOTJfY3RyX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ1RSLCAgICAgICAgICAmYWVzXzI1Nl9jdHJfaW5mbyB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ00sICAgICAgICAgICZhZXNfMTI4X2djbV9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTSwgICAgICAgICAgJmFlc18xOTJfZ2NtX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLCAgICAgICAgICAmYWVzXzI1Nl9nY21faW5mbyB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sICAgICAgICAgICZhZXNfMTI4X2NjbV9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTSwgICAgICAgICAgJmFlc18xOTJfY2NtX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLCAgICAgICAgICAmYWVzXzI1Nl9jY21faW5mbyB9LAorI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4LCAgICAgICAgICAgICAmYXJjNF8xMjhfaW5mbyB9LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQkxPV0ZJU0hfQykKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQiwgICAgICAgICAmYmxvd2Zpc2hfZWNiX2luZm8gfSwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDLCAgICAgICAgICZibG93ZmlzaF9jYmNfaW5mbyB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0LCAgICAgICAmYmxvd2Zpc2hfY2ZiNjRfaW5mbyB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUiwgICAgICAgICAmYmxvd2Zpc2hfY3RyX2luZm8gfSwKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfQkxPV0ZJU0hfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfRUNCLCAgICAgJmNhbWVsbGlhXzEyOF9lY2JfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0VDQiwgICAgICZjYW1lbGxpYV8xOTJfZWNiX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9FQ0IsICAgICAmY2FtZWxsaWFfMjU2X2VjYl9pbmZvIH0sCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsICAgICAmY2FtZWxsaWFfMTI4X2NiY19pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDLCAgICAgJmNhbWVsbGlhXzE5Ml9jYmNfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQywgICAgICZjYW1lbGxpYV8yNTZfY2JjX2luZm8gfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4LCAgJmNhbWVsbGlhXzEyOF9jZmIxMjhfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NGQjEyOCwgICZjYW1lbGxpYV8xOTJfY2ZiMTI4X2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DRkIxMjgsICAmY2FtZWxsaWFfMjU2X2NmYjEyOF9pbmZvIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUiwgICAgICZjYW1lbGxpYV8xMjhfY3RyX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DVFIsICAgICAmY2FtZWxsaWFfMTkyX2N0cl9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ1RSLCAgICAgJmNhbWVsbGlhXzI1Nl9jdHJfaW5mbyB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTSwgICAgICZjYW1lbGxpYV8xMjhfZ2NtX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ00sICAgICAmY2FtZWxsaWFfMTkyX2djbV9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNLCAgICAgJmNhbWVsbGlhXzI1Nl9nY21faW5mbyB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTSwgICAgICZjYW1lbGxpYV8xMjhfY2NtX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQ00sICAgICAmY2FtZWxsaWFfMTkyX2NjbV9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0NNLCAgICAgJmNhbWVsbGlhXzI1Nl9jY21faW5mbyB9LAorI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisgICAgeyBNQkVEVExTX0NJUEhFUl9ERVNfRUNCLCAgICAgICAgICAgICAgJmRlc19lY2JfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfREVTX0VERV9FQ0IsICAgICAgICAgICZkZXNfZWRlX2VjYl9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19FQ0IsICAgICAgICAgJmRlc19lZGUzX2VjYl9pbmZvIH0sCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0RFU19DQkMsICAgICAgICAgICAgICAmZGVzX2NiY19pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQywgICAgICAgICAgJmRlc19lZGVfY2JjX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQywgICAgICAgICAmZGVzX2VkZTNfY2JjX2luZm8gfSwKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIpCisgICAgeyBNQkVEVExTX0NJUEhFUl9OVUxMLCAgICAgICAgICAgICAgICAgJm51bGxfY2lwaGVyX2luZm8gfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUiAqLworCisgICAgeyBNQkVEVExTX0NJUEhFUl9OT05FLCBOVUxMIH0KK307CisKKyNkZWZpbmUgTlVNX0NJUEhFUlMgc2l6ZW9mIG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25zIC8gc2l6ZW9mIG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25zWzBdCitpbnQgbWJlZHRsc19jaXBoZXJfc3VwcG9ydGVkW05VTV9DSVBIRVJTXTsKKworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NtYWMuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NtYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTlkM2JjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY21hYy5jCkBAIC0wLDAgKzEsMTA3MyBAQAorLyoKKyAqIFxmaWxlIGNtYWMuYworICoKKyAqIFxicmllZiBOSVNUIFNQODAwLTM4QiBjb21wbGlhbnQgQ01BQyBpbXBsZW1lbnRhdGlvbiBmb3IgQUVTIGFuZCAzREVTCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qCisgKiBSZWZlcmVuY2VzOgorICoKKyAqIC0gTklTVCBTUCA4MDAtMzhCIFJlY29tbWVuZGF0aW9uIGZvciBCbG9jayBDaXBoZXIgTW9kZXMgb2YgT3BlcmF0aW9uOiBUaGUKKyAqICAgICAgQ01BQyBNb2RlIGZvciBBdXRoZW50aWNhdGlvbgorICogICBodHRwOi8vbnZscHVicy5uaXN0Lmdvdi9uaXN0cHVicy9TcGVjaWFsUHVibGljYXRpb25zL05JU1QuU1AuODAwLTM4Yi5wZGYKKyAqCisgKiAtIFJGQyA0NDkzIC0gVGhlIEFFUy1DTUFDIEFsZ29yaXRobQorICogICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDQ5MworICoKKyAqIC0gUkZDIDQ2MTUgLSBUaGUgQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZC1DaXBoZXItYmFzZWQgTWVzc2FnZQorICogICAgICBBdXRoZW50aWNhdGlvbiBDb2RlLVBzZXVkby1SYW5kb20gRnVuY3Rpb24tMTI4IChBRVMtQ01BQy1QUkYtMTI4KQorICogICAgICBBbGdvcml0aG0gZm9yIHRoZSBJbnRlcm5ldCBLZXkgRXhjaGFuZ2UgUHJvdG9jb2wgKElLRSkKKyAqICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2MTUKKyAqCisgKiAgIEFkZGl0aW9uYWwgdGVzdCB2ZWN0b3JzOiBJU08vSUVDIDk3OTctMQorICoKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NNQUNfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvY21hYy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAmJiBNQkVEVExTX0FFU19DIHx8IE1CRURUTFNfREVTX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyKil2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiBNdWx0aXBsaWNhdGlvbiBieSB1IGluIHRoZSBHYWxvaXMgZmllbGQgb2YgR0YoMl5uKQorICoKKyAqIEFzIGV4cGxhaW5lZCBpbiBOSVNUIFNQIDgwMC0zOEIsIHRoaXMgY2FuIGJlIGNvbXB1dGVkOgorICoKKyAqICAgSWYgTVNCKHApID0gMCwgdGhlbiBwID0gKHAgPDwgMSkKKyAqICAgSWYgTVNCKHApID0gMSwgdGhlbiBwID0gKHAgPDwgMSkgXiBSX24KKyAqICAgd2l0aCBSXzY0ID0gMHgxQiBhbmQgIFJfMTI4ID0gMHg4NworICoKKyAqIElucHV0IGFuZCBvdXRwdXQgTVVTVCBOT1QgcG9pbnQgdG8gdGhlIHNhbWUgYnVmZmVyCisgKiBCbG9jayBzaXplIG11c3QgYmUgOCBieWVzIG9yIDE2IGJ5dGVzIC0gdGhlIGJsb2NrIHNpemVzIGZvciBERVMgYW5kIEFFUy4KKyAqLworc3RhdGljIGludCBjbWFjX211bHRpcGx5X2J5X3UoIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYmxvY2tzaXplICkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIFJfMTI4ID0gMHg4NzsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIFJfNjQgPSAweDFCOworICAgIHVuc2lnbmVkIGNoYXIgUl9uLCBtYXNrOworICAgIHVuc2lnbmVkIGNoYXIgb3ZlcmZsb3cgPSAweDAwOworICAgIGludCBpOworCisgICAgaWYoIGJsb2Nrc2l6ZSA9PSBNQkVEVExTX0FFU19CTE9DS19TSVpFICkKKyAgICB7CisgICAgICAgIFJfbiA9IFJfMTI4OworICAgIH0KKyAgICBlbHNlIGlmKCBibG9ja3NpemUgPT0gTUJFRFRMU19ERVMzX0JMT0NLX1NJWkUgKQorICAgIHsKKyAgICAgICAgUl9uID0gUl82NDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBmb3IoIGkgPSBibG9ja3NpemUgLSAxOyBpID49IDA7IGktLSApCisgICAgeworICAgICAgICBvdXRwdXRbaV0gPSBpbnB1dFtpXSA8PCAxIHwgb3ZlcmZsb3c7CisgICAgICAgIG92ZXJmbG93ID0gaW5wdXRbaV0gPj4gNzsKKyAgICB9CisKKyAgICAvKiBtYXNrID0gKCBpbnB1dFswXSA+PiA3ICkgPyAweGZmIDogMHgwMAorICAgICAqIHVzaW5nIGJpdCBvcGVyYXRpb25zIHRvIGF2b2lkIGJyYW5jaGVzICovCisKKyAgICAvKiBNU1ZDIGhhcyBhIHdhcm5pbmcgYWJvdXQgdW5hcnkgbWludXMgb24gdW5zaWduZWQsIGJ1dCB0aGlzIGlzCisgICAgICogd2VsbC1kZWZpbmVkIGFuZCBwcmVjaXNlbHkgd2hhdCB3ZSB3YW50IHRvIGRvIGhlcmUgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKCBwdXNoICkKKyNwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQxNDYgKQorI2VuZGlmCisgICAgbWFzayA9IC0gKCBpbnB1dFswXSA+PiA3ICk7CisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyggcG9wICkKKyNlbmRpZgorCisgICAgb3V0cHV0WyBibG9ja3NpemUgLSAxIF0gXj0gUl9uICYgbWFzazsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogR2VuZXJhdGUgc3Via2V5cworICoKKyAqIC0gYXMgc3BlY2lmaWVkIGJ5IFJGQyA0NDkzLCBzZWN0aW9uIDIuMyBTdWJrZXkgR2VuZXJhdGlvbiBBbGdvcml0aG0KKyAqLworc3RhdGljIGludCBjbWFjX2dlbmVyYXRlX3N1YmtleXMoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIEsxLCB1bnNpZ25lZCBjaGFyKiBLMiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIExbTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVhdOworICAgIHNpemVfdCBvbGVuLCBibG9ja19zaXplOworCisgICAgbWJlZHRsc196ZXJvaXplKCBMLCBzaXplb2YoIEwgKSApOworCisgICAgYmxvY2tfc2l6ZSA9IGN0eC0+Y2lwaGVyX2luZm8tPmJsb2NrX3NpemU7CisKKyAgICAvKiBDYWxjdWxhdGUgRWsoMCkgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoIGN0eCwgTCwgYmxvY2tfc2l6ZSwgTCwgJm9sZW4gKSApICE9IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAvKgorICAgICAqIEdlbmVyYXRlIEsxIGFuZCBLMgorICAgICAqLworICAgIGlmKCAoIHJldCA9IGNtYWNfbXVsdGlwbHlfYnlfdSggSzEsIEwgLCBibG9ja19zaXplICkgKSAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaWYoICggcmV0ID0gY21hY19tdWx0aXBseV9ieV91KCBLMiwgSzEgLCBibG9ja19zaXplICkgKSAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCitleGl0OgorICAgIG1iZWR0bHNfemVyb2l6ZSggTCwgc2l6ZW9mKCBMICkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKK3N0YXRpYyB2b2lkIGNtYWNfeG9yX2Jsb2NrKCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGJsb2NrX3NpemUgKQoreworICAgIHNpemVfdCBpbmRleDsKKworICAgIGZvciggaW5kZXggPSAwOyBpbmRleCA8IGJsb2NrX3NpemU7IGluZGV4KysgKQorICAgICAgICBvdXRwdXRbIGluZGV4IF0gPSBpbnB1dDFbIGluZGV4IF0gXiBpbnB1dDJbIGluZGV4IF07Cit9CisKKy8qCisgKiBDcmVhdGUgcGFkZGVkIGxhc3QgYmxvY2sgZnJvbSAocGFydGlhbCkgbGFzdCBibG9jay4KKyAqCisgKiBXZSBjYW4ndCB1c2UgdGhlIHBhZGRpbmcgb3B0aW9uIGZyb20gdGhlIGNpcGhlciBsYXllciwgYXMgaXQgb25seSB3b3JrcyBmb3IKKyAqIENCQyBhbmQgd2UgdXNlIEVDQiBtb2RlLCBhbmQgYW55d2F5IHdlIG5lZWQgdG8gWE9SIEsxIG9yIEsyIGluIGFkZGl0aW9uLgorICovCitzdGF0aWMgdm9pZCBjbWFjX3BhZCggdW5zaWduZWQgY2hhciBwYWRkZWRfYmxvY2tbTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVhdLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYWRkZWRfYmxvY2tfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhc3RfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxhc3RfYmxvY2tfbGVuICkKK3sKKyAgICBzaXplX3QgajsKKworICAgIGZvciggaiA9IDA7IGogPCBwYWRkZWRfYmxvY2tfbGVuOyBqKysgKQorICAgIHsKKyAgICAgICAgaWYoIGogPCBsYXN0X2Jsb2NrX2xlbiApCisgICAgICAgICAgICBwYWRkZWRfYmxvY2tbal0gPSBsYXN0X2Jsb2NrW2pdOworICAgICAgICBlbHNlIGlmKCBqID09IGxhc3RfYmxvY2tfbGVuICkKKyAgICAgICAgICAgIHBhZGRlZF9ibG9ja1tqXSA9IDB4ODA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhZGRlZF9ibG9ja1tqXSA9IDB4MDA7CisgICAgfQorfQorCitpbnQgbWJlZHRsc19jaXBoZXJfY21hY19zdGFydHMoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCBrZXliaXRzICkKK3sKKyAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgdHlwZTsKKyAgICBtYmVkdGxzX2NtYWNfY29udGV4dF90ICpjbWFjX2N0eDsKKyAgICBpbnQgcmV0dmFsOworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+Y2lwaGVyX2luZm8gPT0gTlVMTCB8fCBrZXkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggKCByZXR2YWwgPSBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoIGN0eCwga2V5LCBrZXliaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTkNSWVBUICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXR2YWwgKTsKKworICAgIHR5cGUgPSBjdHgtPmNpcGhlcl9pbmZvLT50eXBlOworCisgICAgc3dpdGNoKCB0eXBlICkKKyAgICB7CisgICAgICAgIGNhc2UgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6CisgICAgICAgIGNhc2UgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6CisgICAgICAgIGNhc2UgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6CisgICAgICAgIGNhc2UgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfRUNCOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIC8qIEFsbG9jYXRlZCBhbmQgaW5pdGlhbGlzZSBpbiB0aGUgY2lwaGVyIGNvbnRleHQgbWVtb3J5IGZvciB0aGUgQ01BQworICAgICAqIGNvbnRleHQgKi8KKyAgICBjbWFjX2N0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfY21hY19jb250ZXh0X3QgKSApOworICAgIGlmKCBjbWFjX2N0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQUxMT0NfRkFJTEVEICk7CisKKyAgICBjdHgtPmNtYWNfY3R4ID0gY21hY19jdHg7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGNtYWNfY3R4LT5zdGF0ZSwgc2l6ZW9mKCBjbWFjX2N0eC0+c3RhdGUgKSApOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBtYmVkdGxzX2NpcGhlcl9jbWFjX3VwZGF0ZSggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiApCit7CisgICAgbWJlZHRsc19jbWFjX2NvbnRleHRfdCogY21hY19jdHg7CisgICAgdW5zaWduZWQgY2hhciAqc3RhdGU7CisgICAgaW50IG4sIGosIHJldCA9IDA7CisgICAgc2l6ZV90IG9sZW4sIGJsb2NrX3NpemU7CisKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5jaXBoZXJfaW5mbyA9PSBOVUxMIHx8IGlucHV0ID09IE5VTEwgfHwKKyAgICAgICAgY3R4LT5jbWFjX2N0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGNtYWNfY3R4ID0gY3R4LT5jbWFjX2N0eDsKKyAgICBibG9ja19zaXplID0gY3R4LT5jaXBoZXJfaW5mby0+YmxvY2tfc2l6ZTsKKyAgICBzdGF0ZSA9IGN0eC0+Y21hY19jdHgtPnN0YXRlOworCisgICAgLyogSXMgdGhlcmUgZGF0YSBzdGlsbCB0byBwcm9jZXNzIGZyb20gdGhlIGxhc3QgY2FsbCwgdGhhdCdzIGdyZWF0ZXIgaW4KKyAgICAgKiBzaXplIHRoYW4gYSBibG9jaz8gKi8KKyAgICBpZiggY21hY19jdHgtPnVucHJvY2Vzc2VkX2xlbiA+IDAgJiYKKyAgICAgICAgaWxlbiA+IGJsb2NrX3NpemUgLSBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfbGVuICkKKyAgICB7CisgICAgICAgIG1lbWNweSggJmNtYWNfY3R4LT51bnByb2Nlc3NlZF9ibG9ja1tjbWFjX2N0eC0+dW5wcm9jZXNzZWRfbGVuXSwKKyAgICAgICAgICAgICAgICBpbnB1dCwKKyAgICAgICAgICAgICAgICBibG9ja19zaXplIC0gY21hY19jdHgtPnVucHJvY2Vzc2VkX2xlbiApOworCisgICAgICAgIGNtYWNfeG9yX2Jsb2NrKCBzdGF0ZSwgY21hY19jdHgtPnVucHJvY2Vzc2VkX2Jsb2NrLCBzdGF0ZSwgYmxvY2tfc2l6ZSApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggY3R4LCBzdGF0ZSwgYmxvY2tfc2l6ZSwgc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9sZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlucHV0ICs9IGJsb2NrX3NpemUgLSBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfbGVuOworICAgICAgICBpbGVuIC09IGJsb2NrX3NpemUgLSBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfbGVuOworICAgICAgICBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfbGVuID0gMDsKKyAgICB9CisKKyAgICAvKiBuIGlzIHRoZSBudW1iZXIgb2YgYmxvY2tzIGluY2x1ZGluZyBhbnkgZmluYWwgcGFydGlhbCBibG9jayAqLworICAgIG4gPSAoIGlsZW4gKyBibG9ja19zaXplIC0gMSApIC8gYmxvY2tfc2l6ZTsKKworICAgLyogSXRlcmF0ZSBhY3Jvc3MgdGhlIGlucHV0IGRhdGEgaW4gYmxvY2sgc2l6ZWQgY2h1bmtzICovCisgICAgZm9yKCBqID0gMDsgaiA8IG4gLSAxOyBqKysgKQorICAgIHsKKyAgICAgICAgY21hY194b3JfYmxvY2soIHN0YXRlLCBpbnB1dCwgc3RhdGUsIGJsb2NrX3NpemUgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoIGN0eCwgc3RhdGUsIGJsb2NrX3NpemUsIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGVuICkgKSAhPSAwICkKKyAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIGlsZW4gLT0gYmxvY2tfc2l6ZTsKKyAgICAgICAgaW5wdXQgKz0gYmxvY2tfc2l6ZTsKKyAgICB9CisKKyAgICAvKiBJZiB0aGVyZSBpcyBkYXRhIGxlZnQgb3ZlciB0aGF0IHdhc24ndCBhbGlnbmVkIHRvIGEgYmxvY2sgKi8KKyAgICBpZiggaWxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCAmY21hY19jdHgtPnVucHJvY2Vzc2VkX2Jsb2NrW2NtYWNfY3R4LT51bnByb2Nlc3NlZF9sZW5dLAorICAgICAgICAgICAgICAgIGlucHV0LAorICAgICAgICAgICAgICAgIGlsZW4gKTsKKyAgICAgICAgY21hY19jdHgtPnVucHJvY2Vzc2VkX2xlbiArPSBpbGVuOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4oIHJldCApOworfQorCitpbnQgbWJlZHRsc19jaXBoZXJfY21hY19maW5pc2goIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIG1iZWR0bHNfY21hY19jb250ZXh0X3QqIGNtYWNfY3R4OworICAgIHVuc2lnbmVkIGNoYXIgKnN0YXRlLCAqbGFzdF9ibG9jazsKKyAgICB1bnNpZ25lZCBjaGFyIEsxW01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKyAgICB1bnNpZ25lZCBjaGFyIEsyW01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKyAgICB1bnNpZ25lZCBjaGFyIE1fbGFzdFtNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWF07CisgICAgaW50IHJldDsKKyAgICBzaXplX3Qgb2xlbiwgYmxvY2tfc2l6ZTsKKworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPmNpcGhlcl9pbmZvID09IE5VTEwgfHwgY3R4LT5jbWFjX2N0eCA9PSBOVUxMIHx8CisgICAgICAgIG91dHB1dCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGNtYWNfY3R4ID0gY3R4LT5jbWFjX2N0eDsKKyAgICBibG9ja19zaXplID0gY3R4LT5jaXBoZXJfaW5mby0+YmxvY2tfc2l6ZTsKKyAgICBzdGF0ZSA9IGNtYWNfY3R4LT5zdGF0ZTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggSzEsIHNpemVvZiggSzEgKSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggSzIsIHNpemVvZiggSzIgKSApOworICAgIGNtYWNfZ2VuZXJhdGVfc3Via2V5cyggY3R4LCBLMSwgSzIgKTsKKworICAgIGxhc3RfYmxvY2sgPSBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfYmxvY2s7CisKKyAgICAvKiBDYWxjdWxhdGUgbGFzdCBibG9jayAqLworICAgIGlmKCBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfbGVuIDwgYmxvY2tfc2l6ZSApCisgICAgeworICAgICAgICBjbWFjX3BhZCggTV9sYXN0LCBibG9ja19zaXplLCBsYXN0X2Jsb2NrLCBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfbGVuICk7CisgICAgICAgIGNtYWNfeG9yX2Jsb2NrKCBNX2xhc3QsIE1fbGFzdCwgSzIsIGJsb2NrX3NpemUgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogTGFzdCBibG9jayBpcyBjb21wbGV0ZSBibG9jayAqLworICAgICAgICBjbWFjX3hvcl9ibG9jayggTV9sYXN0LCBsYXN0X2Jsb2NrLCBLMSwgYmxvY2tfc2l6ZSApOworICAgIH0KKworCisgICAgY21hY194b3JfYmxvY2soIHN0YXRlLCBNX2xhc3QsIHN0YXRlLCBibG9ja19zaXplICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCBjdHgsIHN0YXRlLCBibG9ja19zaXplLCBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtZW1jcHkoIG91dHB1dCwgc3RhdGUsIGJsb2NrX3NpemUgKTsKKworZXhpdDoKKyAgICAvKiBXaXBlIHRoZSBnZW5lcmF0ZWQga2V5cyBvbiB0aGUgc3RhY2ssIGFuZCBhbnkgb3RoZXIgdHJhbnNpZW50cyB0byBhdm9pZAorICAgICAqIHNpZGUgY2hhbm5lbCBsZWFrYWdlICovCisgICAgbWJlZHRsc196ZXJvaXplKCBLMSwgc2l6ZW9mKCBLMSApICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBLMiwgc2l6ZW9mKCBLMiApICk7CisKKyAgICBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfbGVuID0gMDsKKyAgICBtYmVkdGxzX3plcm9pemUoIGNtYWNfY3R4LT51bnByb2Nlc3NlZF9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggY21hY19jdHgtPnVucHJvY2Vzc2VkX2Jsb2NrICkgKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggc3RhdGUsIE1CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYICk7CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworaW50IG1iZWR0bHNfY2lwaGVyX2NtYWNfcmVzZXQoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2NtYWNfY29udGV4dF90KiBjbWFjX2N0eDsKKworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPmNpcGhlcl9pbmZvID09IE5VTEwgfHwgY3R4LT5jbWFjX2N0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGNtYWNfY3R4ID0gY3R4LT5jbWFjX2N0eDsKKworICAgIC8qIFJlc2V0IHRoZSBpbnRlcm5hbCBzdGF0ZSAqLworICAgIGNtYWNfY3R4LT51bnByb2Nlc3NlZF9sZW4gPSAwOworICAgIG1iZWR0bHNfemVyb2l6ZSggY21hY19jdHgtPnVucHJvY2Vzc2VkX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfYmxvY2sgKSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggY21hY19jdHgtPnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBjbWFjX2N0eC0+c3RhdGUgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2NpcGhlcl9jbWFjKCBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4OworICAgIGludCByZXQ7CisKKyAgICBpZiggY2lwaGVyX2luZm8gPT0gTlVMTCB8fCBrZXkgPT0gTlVMTCB8fCBpbnB1dCA9PSBOVUxMIHx8IG91dHB1dCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjdHggKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LCBjaXBoZXJfaW5mbyApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX2NtYWNfc3RhcnRzKCAmY3R4LCBrZXksIGtleWxlbiApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCAmY3R4LCBpbnB1dCwgaWxlbiApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX2NtYWNfZmluaXNoKCAmY3R4LCBvdXRwdXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIEFFUy1DTUFDLVBSRi0xMjggZGVmaW5lZCBpbiBSRkMgNDYxNQorICovCitpbnQgbWJlZHRsc19hZXNfY21hY19wcmZfMTI4KCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCByZXQ7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICB1bnNpZ25lZCBjaGFyIHplcm9fa2V5W01CRURUTFNfQUVTX0JMT0NLX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgaW50X2tleVtNQkVEVExTX0FFU19CTE9DS19TSVpFXTsKKworICAgIGlmKCBrZXkgPT0gTlVMTCB8fCBpbnB1dCA9PSBOVUxMIHx8IG91dHB1dCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCICk7CisgICAgaWYoIGNpcGhlcl9pbmZvID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgLyogRmFpbGluZyBhdCB0aGlzIHBvaW50IG11c3QgYmUgZHVlIHRvIGEgYnVpbGQgaXNzdWUgKi8KKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfQ0lQSEVSX0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZigga2V5X2xlbmd0aCA9PSBNQkVEVExTX0FFU19CTE9DS19TSVpFICkKKyAgICB7CisgICAgICAgIC8qIFVzZSBrZXkgYXMgaXMgKi8KKyAgICAgICAgbWVtY3B5KCBpbnRfa2V5LCBrZXksIE1CRURUTFNfQUVTX0JMT0NLX1NJWkUgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWVtc2V0KCB6ZXJvX2tleSwgMCwgTUJFRFRMU19BRVNfQkxPQ0tfU0laRSApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX2NtYWMoIGNpcGhlcl9pbmZvLCB6ZXJvX2tleSwgMTI4LCBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9sZW5ndGgsIGludF9rZXkgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX2NpcGhlcl9jbWFjKCBjaXBoZXJfaW5mbywgaW50X2tleSwgMTI4LCBpbnB1dCwgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCApOworCitleGl0OgorICAgIG1iZWR0bHNfemVyb2l6ZSggaW50X2tleSwgc2l6ZW9mKCBpbnRfa2V5ICkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKy8qCisgKiBDTUFDIHRlc3QgZGF0YSBmb3IgU1A4MDAtMzhCCisgKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9ncm91cHMvU1QvdG9vbGtpdC9kb2N1bWVudHMvRXhhbXBsZXMvQUVTX0NNQUMucGRmCisgKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9ncm91cHMvU1QvdG9vbGtpdC9kb2N1bWVudHMvRXhhbXBsZXMvVERFU19DTUFDLnBkZgorICoKKyAqIEFFUy1DTUFDLVBSRi0xMjggdGVzdCBkYXRhIGZyb20gUkZDIDQ2MTUKKyAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjE1I3BhZ2UtNAorICovCisKKyNkZWZpbmUgTkJfQ01BQ19URVNUU19QRVJfS0VZIDQKKyNkZWZpbmUgTkJfUFJGX1RFU1RTIDMKKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykgfHwgZGVmaW5lZChNQkVEVExTX0RFU19DKQorLyogQWxsIENNQUMgdGVzdCBpbnB1dHMgYXJlIHRydW5jYXRlZCBmcm9tIHRoZSBzYW1lIDY0IGJ5dGUgYnVmZmVyLiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdGVzdF9tZXNzYWdlW10gPSB7CisgICAgLyogUFQgKi8KKyAgICAweDZiLCAweGMxLCAweGJlLCAweGUyLCAgICAgMHgyZSwgMHg0MCwgMHg5ZiwgMHg5NiwKKyAgICAweGU5LCAweDNkLCAweDdlLCAweDExLCAgICAgMHg3MywgMHg5MywgMHgxNywgMHgyYSwKKyAgICAweGFlLCAweDJkLCAweDhhLCAweDU3LCAgICAgMHgxZSwgMHgwMywgMHhhYywgMHg5YywKKyAgICAweDllLCAweGI3LCAweDZmLCAweGFjLCAgICAgMHg0NSwgMHhhZiwgMHg4ZSwgMHg1MSwKKyAgICAweDMwLCAweGM4LCAweDFjLCAweDQ2LCAgICAgMHhhMywgMHg1YywgMHhlNCwgMHgxMSwKKyAgICAweGU1LCAweGZiLCAweGMxLCAweDE5LCAgICAgMHgxYSwgMHgwYSwgMHg1MiwgMHhlZiwKKyAgICAweGY2LCAweDlmLCAweDI0LCAweDQ1LCAgICAgMHhkZiwgMHg0ZiwgMHg5YiwgMHgxNywKKyAgICAweGFkLCAweDJiLCAweDQxLCAweDdiLCAgICAgMHhlNiwgMHg2YywgMHgzNywgMHgxMAorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DIHx8IE1CRURUTFNfREVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKy8qIFRydW5jYXRpb24gcG9pbnQgb2YgbWVzc2FnZSBmb3IgQUVTIENNQUMgdGVzdHMgICovCitzdGF0aWMgY29uc3QgIHVuc2lnbmVkIGludCAgYWVzX21lc3NhZ2VfbGVuZ3Roc1tOQl9DTUFDX1RFU1RTX1BFUl9LRVldID0geworICAgIC8qIE1sZW4gKi8KKyAgICAwLAorICAgIDE2LAorICAgIDIwLAorICAgIDY0Cit9OworCisvKiBDTUFDLUFFUzEyOCBUZXN0IERhdGEgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfa2V5WzE2XSA9IHsKKyAgICAweDJiLCAweDdlLCAweDE1LCAweDE2LCAgICAgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwKKyAgICAweGFiLCAweGY3LCAweDE1LCAweDg4LCAgICAgMHgwOSwgMHhjZiwgMHg0ZiwgMHgzYworfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfc3Via2V5c1syXVtNQkVEVExTX0FFU19CTE9DS19TSVpFXSA9IHsKKyAgICB7CisgICAgICAgIC8qIEsxICovCisgICAgICAgIDB4ZmIsIDB4ZWUsIDB4ZDYsIDB4MTgsICAgICAweDM1LCAweDcxLCAweDMzLCAweDY2LAorICAgICAgICAweDdjLCAweDg1LCAweGUwLCAweDhmLCAgICAgMHg3MiwgMHgzNiwgMHhhOCwgMHhkZQorICAgIH0sCisgICAgeworICAgICAgICAvKiBLMiAqLworICAgICAgICAweGY3LCAweGRkLCAweGFjLCAweDMwLCAgICAgMHg2YSwgMHhlMiwgMHg2NiwgMHhjYywKKyAgICAgICAgMHhmOSwgMHgwYiwgMHhjMSwgMHgxZSwgICAgIDB4ZTQsIDB4NmQsIDB4NTEsIDB4M2IKKyAgICB9Cit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9leHBlY3RlZF9yZXN1bHRbTkJfQ01BQ19URVNUU19QRVJfS0VZXVtNQkVEVExTX0FFU19CTE9DS19TSVpFXSA9IHsKKyAgICB7CisgICAgICAgIC8qIEV4YW1wbGUgIzEgKi8KKyAgICAgICAgMHhiYiwgMHgxZCwgMHg2OSwgMHgyOSwgICAgIDB4ZTksIDB4NTksIDB4MzcsIDB4MjgsCisgICAgICAgIDB4N2YsIDB4YTMsIDB4N2QsIDB4MTIsICAgICAweDliLCAweDc1LCAweDY3LCAweDQ2CisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIEV4YW1wbGUgIzIgKi8KKyAgICAgICAgMHgwNywgMHgwYSwgMHgxNiwgMHhiNCwgICAgIDB4NmIsIDB4NGQsIDB4NDEsIDB4NDQsCisgICAgICAgIDB4ZjcsIDB4OWIsIDB4ZGQsIDB4OWQsICAgICAweGQwLCAweDRhLCAweDI4LCAweDdjCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIEV4YW1wbGUgIzMgKi8KKyAgICAgICAgMHg3ZCwgMHg4NSwgMHg0NCwgMHg5ZSwgICAgIDB4YTYsIDB4ZWEsIDB4MTksIDB4YzgsCisgICAgICAgIDB4MjMsIDB4YTcsIDB4YmYsIDB4NzgsICAgICAweDgzLCAweDdkLCAweGZhLCAweGRlCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIEV4YW1wbGUgIzQgKi8KKyAgICAgICAgMHg1MSwgMHhmMCwgMHhiZSwgMHhiZiwgICAgIDB4N2UsIDB4M2IsIDB4OWQsIDB4OTIsCisgICAgICAgIDB4ZmMsIDB4NDksIDB4NzQsIDB4MTcsICAgICAweDc5LCAweDM2LCAweDNjLCAweGZlCisgICAgfQorfTsKKworLyogQ01BQy1BRVMxOTIgVGVzdCBEYXRhICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX2tleVsyNF0gPSB7CisgICAgMHg4ZSwgMHg3MywgMHhiMCwgMHhmNywgICAgIDB4ZGEsIDB4MGUsIDB4NjQsIDB4NTIsCisgICAgMHhjOCwgMHgxMCwgMHhmMywgMHgyYiwgICAgIDB4ODAsIDB4OTAsIDB4NzksIDB4ZTUsCisgICAgMHg2MiwgMHhmOCwgMHhlYSwgMHhkMiwgICAgIDB4NTIsIDB4MmMsIDB4NmIsIDB4N2IKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3N1YmtleXNbMl1bTUJFRFRMU19BRVNfQkxPQ0tfU0laRV0gPSB7CisgICAgeworICAgICAgICAvKiBLMSAqLworICAgICAgICAweDQ0LCAweDhhLCAweDViLCAweDFjLCAgICAgMHg5MywgMHg1MSwgMHg0YiwgMHgyNywKKyAgICAgICAgMHgzZSwgMHhlNiwgMHg0MywgMHg5ZCwgICAgIDB4ZDQsIDB4ZGEsIDB4YTIsIDB4OTYKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogSzIgKi8KKyAgICAgICAgMHg4OSwgMHgxNCwgMHhiNiwgMHgzOSwgICAgIDB4MjYsIDB4YTIsIDB4OTYsIDB4NGUsCisgICAgICAgIDB4N2QsIDB4Y2MsIDB4ODcsIDB4M2IsICAgICAweGE5LCAweGI1LCAweDQ1LCAweDJjCisgICAgfQorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfZXhwZWN0ZWRfcmVzdWx0W05CX0NNQUNfVEVTVFNfUEVSX0tFWV1bTUJFRFRMU19BRVNfQkxPQ0tfU0laRV0gPSB7CisgICAgeworICAgICAgICAvKiBFeGFtcGxlICMxICovCisgICAgICAgIDB4ZDEsIDB4N2QsIDB4ZGYsIDB4NDYsICAgICAweGFkLCAweGFhLCAweGNkLCAweGU1LAorICAgICAgICAweDMxLCAweGNhLCAweGM0LCAweDgzLCAgICAgMHhkZSwgMHg3YSwgMHg5MywgMHg2NworICAgIH0sCisgICAgeworICAgICAgICAvKiBFeGFtcGxlICMyICovCisgICAgICAgIDB4OWUsIDB4OTksIDB4YTcsIDB4YmYsICAgICAweDMxLCAweGU3LCAweDEwLCAweDkwLAorICAgICAgICAweDA2LCAweDYyLCAweGY2LCAweDVlLCAgICAgMHg2MSwgMHg3YywgMHg1MSwgMHg4NAorICAgIH0sCisgICAgeworICAgICAgICAvKiBFeGFtcGxlICMzICovCisgICAgICAgIDB4M2QsIDB4NzUsIDB4YzEsIDB4OTQsICAgICAweGVkLCAweDk2LCAweDA3LCAweDA0LAorICAgICAgICAweDQ0LCAweGE5LCAweGZhLCAweDdlLCAgICAgMHhjNywgMHg0MCwgMHhlYywgMHhmOAorICAgIH0sCisgICAgeworICAgICAgICAvKiBFeGFtcGxlICM0ICovCisgICAgICAgIDB4YTEsIDB4ZDUsIDB4ZGYsIDB4MGUsICAgICAweGVkLCAweDc5LCAweDBmLCAweDc5LAorICAgICAgICAweDRkLCAweDc3LCAweDU4LCAweDk2LCAgICAgMHg1OSwgMHhmMywgMHg5YSwgMHgxMQorICAgIH0KK307CisKKy8qIENNQUMtQUVTMjU2IFRlc3QgRGF0YSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9rZXlbMzJdID0geworICAgIDB4NjAsIDB4M2QsIDB4ZWIsIDB4MTAsICAgICAweDE1LCAweGNhLCAweDcxLCAweGJlLAorICAgIDB4MmIsIDB4NzMsIDB4YWUsIDB4ZjAsICAgICAweDg1LCAweDdkLCAweDc3LCAweDgxLAorICAgIDB4MWYsIDB4MzUsIDB4MmMsIDB4MDcsICAgICAweDNiLCAweDYxLCAweDA4LCAweGQ3LAorICAgIDB4MmQsIDB4OTgsIDB4MTAsIDB4YTMsICAgICAweDA5LCAweDE0LCAweGRmLCAweGY0Cit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9zdWJrZXlzWzJdW01CRURUTFNfQUVTX0JMT0NLX1NJWkVdID0geworICAgIHsKKyAgICAgICAgLyogSzEgKi8KKyAgICAgICAgMHhjYSwgMHhkMSwgMHhlZCwgMHgwMywgICAgIDB4MjksIDB4OWUsIDB4ZWQsIDB4YWMsCisgICAgICAgIDB4MmUsIDB4OWEsIDB4OTksIDB4ODAsICAgICAweDg2LCAweDIxLCAweDUwLCAweDJmCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIEsyICovCisgICAgICAgIDB4OTUsIDB4YTMsIDB4ZGEsIDB4MDYsICAgICAweDUzLCAweDNkLCAweGRiLCAweDU4LAorICAgICAgICAweDVkLCAweDM1LCAweDMzLCAweDAxLCAgICAgMHgwYywgMHg0MiwgMHhhMCwgMHhkOQorICAgIH0KK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X2V4cGVjdGVkX3Jlc3VsdFtOQl9DTUFDX1RFU1RTX1BFUl9LRVldW01CRURUTFNfQUVTX0JMT0NLX1NJWkVdID0geworICAgIHsKKyAgICAgICAgLyogRXhhbXBsZSAjMSAqLworICAgICAgICAweDAyLCAweDg5LCAweDYyLCAweGY2LCAgICAgMHgxYiwgMHg3YiwgMHhmOCwgMHg5ZSwKKyAgICAgICAgMHhmYywgMHg2YiwgMHg1NSwgMHgxZiwgICAgIDB4NDYsIDB4NjcsIDB4ZDksIDB4ODMKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogRXhhbXBsZSAjMiAqLworICAgICAgICAweDI4LCAweGE3LCAweDAyLCAweDNmLCAgICAgMHg0NSwgMHgyZSwgMHg4ZiwgMHg4MiwKKyAgICAgICAgMHhiZCwgMHg0YiwgMHhmMiwgMHg4ZCwgICAgIDB4OGMsIDB4MzcsIDB4YzMsIDB4NWMKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogRXhhbXBsZSAjMyAqLworICAgICAgICAweDE1LCAweDY3LCAweDI3LCAweGRjLCAgICAgMHgwOCwgMHg3OCwgMHg5NCwgMHg0YSwKKyAgICAgICAgMHgwMiwgMHgzYywgMHgxZiwgMHhlMCwgICAgIDB4M2IsIDB4YWQsIDB4NmQsIDB4OTMKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogRXhhbXBsZSAjNCAqLworICAgICAgICAweGUxLCAweDk5LCAweDIxLCAweDkwLCAgICAgMHg1NCwgMHg5ZiwgMHg2ZSwgMHhkNSwKKyAgICAgICAgMHg2OSwgMHg2YSwgMHgyYywgMHgwNSwgICAgIDB4NmMsIDB4MzEsIDB4NTQsIDB4MTAKKyAgICB9Cit9OworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKy8qIFRydW5jYXRpb24gcG9pbnQgb2YgbWVzc2FnZSBmb3IgM0RFUyBDTUFDIHRlc3RzICAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkZXMzX21lc3NhZ2VfbGVuZ3Roc1tOQl9DTUFDX1RFU1RTX1BFUl9LRVldID0geworICAgIDAsCisgICAgMTYsCisgICAgMjAsCisgICAgMzIKK307CisKKy8qIENNQUMtVERFUyAoR2VuZXJhdGlvbikgLSAyIEtleSBUZXN0IERhdGEgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRlczNfMmtleV9rZXlbMjRdID0geworICAgIC8qIEtleTEgKi8KKyAgICAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAgICAgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKKyAgICAvKiBLZXkyICovCisgICAgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgICAgIDB4YWIsIDB4Y2QsIDB4RUYsIDB4MDEsCisgICAgLyogS2V5MyAqLworICAgIDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsICAgICAweDg5LCAweGFiLCAweGNkLCAweGVmCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzM18ya2V5X3N1YmtleXNbMl1bOF0gPSB7CisgICAgeworICAgICAgICAvKiBLMSAqLworICAgICAgICAweDBkLCAweGQyLCAweGNiLCAweDdhLCAgICAgMHgzZCwgMHg4OCwgMHg4OCwgMHhkOQorICAgIH0sCisgICAgeworICAgICAgICAvKiBLMiAqLworICAgICAgICAweDFiLCAweGE1LCAweDk2LCAweGY0LCAgICAgMHg3YiwgMHgxMSwgMHgxMSwgMHhiMgorICAgIH0KK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZXMzXzJrZXlfZXhwZWN0ZWRfcmVzdWx0W05CX0NNQUNfVEVTVFNfUEVSX0tFWV1bTUJFRFRMU19ERVMzX0JMT0NLX1NJWkVdID0geworICAgIHsKKyAgICAgICAgLyogU2FtcGxlICMxICovCisgICAgICAgIDB4NzksIDB4Y2UsIDB4NTIsIDB4YTcsICAgICAweGY3LCAweDg2LCAweGE5LCAweDYwCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIFNhbXBsZSAjMiAqLworICAgICAgICAweGNjLCAweDE4LCAweGEwLCAweGI3LCAgICAgMHg5YSwgMHhmMiwgMHg0MSwgMHgzYgorICAgIH0sCisgICAgeworICAgICAgICAvKiBTYW1wbGUgIzMgKi8KKyAgICAgICAgMHhjMCwgMHg2ZCwgMHgzNywgMHg3ZSwgICAgIDB4Y2QsIDB4MTAsIDB4MTksIDB4NjkKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogU2FtcGxlICM0ICovCisgICAgICAgIDB4OWMsIDB4ZDMsIDB4MzUsIDB4ODAsICAgICAweGY5LCAweGI2LCAweDRkLCAweGZiCisgICAgfQorfTsKKworLyogQ01BQy1UREVTIChHZW5lcmF0aW9uKSAtIDMgS2V5IFRlc3QgRGF0YSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzM18za2V5X2tleVsyNF0gPSB7CisgICAgLyogS2V5MSAqLworICAgIDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsICAgICAweDg5LCAweGFhLCAweGNkLCAweGVmLAorICAgIC8qIEtleTIgKi8KKyAgICAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAgICAgMHhhYiwgMHhjZCwgMHhlZiwgMHgwMSwKKyAgICAvKiBLZXkzICovCisgICAgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgICAgIDB4Y2QsIDB4ZWYsIDB4MDEsIDB4MjMKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZXMzXzNrZXlfc3Via2V5c1syXVs4XSA9IHsKKyAgICB7CisgICAgICAgIC8qIEsxICovCisgICAgICAgIDB4OWQsIDB4NzQsIDB4ZTcsIDB4MzksICAgICAweDMzLCAweDE3LCAweDk2LCAweGMwCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIEsyICovCisgICAgICAgIDB4M2EsIDB4ZTksIDB4Y2UsIDB4NzIsICAgICAweDY2LCAweDJmLCAweDJkLCAweDliCisgICAgfQorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRlczNfM2tleV9leHBlY3RlZF9yZXN1bHRbTkJfQ01BQ19URVNUU19QRVJfS0VZXVtNQkVEVExTX0RFUzNfQkxPQ0tfU0laRV0gPSB7CisgICAgeworICAgICAgICAvKiBTYW1wbGUgIzEgKi8KKyAgICAgICAgMHg3ZCwgMHhiMCwgMHhkMywgMHg3ZCwgICAgIDB4ZjksIDB4MzYsIDB4YzUsIDB4NTAKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogU2FtcGxlICMyICovCisgICAgICAgIDB4MzAsIDB4MjMsIDB4OWMsIDB4ZjEsICAgICAweGY1LCAweDJlLCAweDY2LCAweDA5CisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIFNhbXBsZSAjMyAqLworICAgICAgICAweDZjLCAweDlmLCAweDNlLCAweGU0LCAgICAgMHg5MiwgMHgzZiwgMHg2YiwgMHhlMgorICAgIH0sCisgICAgeworICAgICAgICAvKiBTYW1wbGUgIzQgKi8KKyAgICAgICAgMHg5OSwgMHg0MiwgMHg5YiwgMHhkMCwgICAgIDB4YkYsIDB4NzksIDB4MDQsIDB4ZTUKKyAgICB9Cit9OworCisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorLyogQUVTIEFFUy1DTUFDLVBSRi0xMjggVGVzdCBEYXRhICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBQUkZLW10gPSB7CisgICAgLyogS2V5ICovCisgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgICAgIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgICAgIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisgICAgMHhlZCwgMHhjYgorfTsKKworLyogU2l6ZXMgaW4gYnl0ZXMgKi8KK3N0YXRpYyBjb25zdCBzaXplX3QgUFJGS2xlbltOQl9QUkZfVEVTVFNdID0geworICAgIDE4LAorICAgIDE2LAorICAgIDEwCit9OworCisvKiBNZXNzYWdlICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBQUkZNW10gPSB7CisgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgICAgIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgICAgIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgUFJGVFtOQl9QUkZfVEVTVFNdWzE2XSA9IHsKKyAgICB7CisgICAgICAgIDB4ODQsIDB4YTMsIDB4NDgsIDB4YTQsICAgICAweGE0LCAweDVkLCAweDIzLCAweDViLAorICAgICAgICAweGFiLCAweGZmLCAweGZjLCAweDBkLCAgICAgMHgyYiwgMHg0ZCwgMHhhMCwgMHg5YQorICAgIH0sCisgICAgeworICAgICAgICAweDk4LCAweDBhLCAweGU4LCAweDdiLCAgICAgMHg1ZiwgMHg0YywgMHg5YywgMHg1MiwKKyAgICAgICAgMHgxNCwgMHhmNSwgMHhiNiwgMHhhOCwgICAgIDB4NDUsIDB4NWUsIDB4NGMsIDB4MmQKKyAgICB9LAorICAgIHsKKyAgICAgICAgMHgyOSwgMHgwZCwgMHg5ZSwgMHgxMSwgICAgIDB4MmUsIDB4ZGIsIDB4MDksIDB4ZWUsCisgICAgICAgIDB4MTQsIDB4MWYsIDB4Y2YsIDB4NjQsICAgICAweGMwLCAweGI3LCAweDJmLCAweDNkCisgICAgfQorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKK3N0YXRpYyBpbnQgY21hY190ZXN0X3N1YmtleXMoIGludCB2ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGVzdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5Yml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHN1YmtleXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgY2lwaGVyX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fdGVzdHMgKQoreworICAgIGludCBpLCByZXQ7CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eDsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgIHVuc2lnbmVkIGNoYXIgSzFbTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVhdOworICAgIHVuc2lnbmVkIGNoYXIgSzJbTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVhdOworCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyX3R5cGUgKTsKKyAgICBpZiggY2lwaGVyX2luZm8gPT0gTlVMTCApCisgICAgeworICAgICAgICAvKiBGYWlsaW5nIGF0IHRoaXMgcG9pbnQgbXVzdCBiZSBkdWUgdG8gYSBidWlsZCBpc3N1ZSAqLworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisgICAgfQorCisgICAgZm9yKCBpID0gMDsgaSA8IG51bV90ZXN0czsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICVzIENNQUMgc3Via2V5ICMldTogIiwgdGVzdG5hbWUsIGkgKyAxICk7CisKKyAgICAgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eCApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LCBjaXBoZXJfaW5mbyApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAidGVzdCBleGVjdXRpb24gZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eCwga2V5LCBrZXliaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTkNSWVBUICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJ0ZXN0IGV4ZWN1dGlvbiBmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gY21hY19nZW5lcmF0ZV9zdWJrZXlzKCAmY3R4LCBLMSwgSzIgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtZW1jbXAoIEsxLCBzdWJrZXlzLCBibG9ja19zaXplICkgKSAhPSAwICB8fAorICAgICAgICAgICAgKCByZXQgPSBtZW1jbXAoIEsyLCAmc3Via2V5c1tibG9ja19zaXplXSwgYmxvY2tfc2l6ZSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgICAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4ICk7CisgICAgfQorCisgICAgZ290byBleGl0OworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHggKTsKKworZXhpdDoKKyAgICByZXR1cm4oIHJldCApOworfQorCitzdGF0aWMgaW50IGNtYWNfdGVzdF93dGhfY2lwaGVyKCBpbnQgdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRlc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcioga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleWJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtZXNzYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtZXNzYWdlX2xlbmd0aHNbNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBleHBlY3RlZF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgY2lwaGVyX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fdGVzdHMgKQoreworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm87CisgICAgaW50IGksIHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFtNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWF07CisKKyAgICBjaXBoZXJfaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCBjaXBoZXJfdHlwZSApOworICAgIGlmKCBjaXBoZXJfaW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIC8qIEZhaWxpbmcgYXQgdGhpcyBwb2ludCBtdXN0IGJlIGR1ZSB0byBhIGJ1aWxkIGlzc3VlICovCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZm9yKCBpID0gMDsgaSA8IG51bV90ZXN0czsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICVzIENNQUMgIyV1OiAiLCB0ZXN0bmFtZSwgaSArIDEgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9jbWFjKCBjaXBoZXJfaW5mbywga2V5LCBrZXliaXRzLCBtZXNzYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9sZW5ndGhzW2ldLCBvdXRwdXQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWVtY21wKCBvdXRwdXQsICZleHBlY3RlZF9yZXN1bHRbaSAqIGJsb2NrX3NpemVdLCBibG9ja19zaXplICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKK3N0YXRpYyBpbnQgdGVzdF9hZXMxMjhfY21hY19wcmYoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0W01CRURUTFNfQUVTX0JMT0NLX1NJWkVdOworCisgICAgZm9yKCBpID0gMDsgaSA8IE5CX1BSRl9URVNUUzsgaSsrICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBBRVMgQ01BQyAxMjggUFJGICMldTogIiwgaSApOworICAgICAgICByZXQgPSBtYmVkdGxzX2Flc19jbWFjX3ByZl8xMjgoIFBSRkssIFBSRktsZW5baV0sIFBSRk0sIDIwLCBvdXRwdXQgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwIHx8CisgICAgICAgICAgICBtZW1jbXAoIG91dHB1dCwgUFJGVFtpXSwgTUJFRFRMU19BRVNfQkxPQ0tfU0laRSApICE9IDAgKQorICAgICAgICB7CisKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworaW50IG1iZWR0bHNfY21hY19zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgcmV0OworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorICAgIC8qIEFFUy0xMjggKi8KKyAgICBpZiggKCByZXQgPSBjbWFjX3Rlc3Rfc3Via2V5cyggdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFFUyAxMjgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXNfMTI4X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopYWVzXzEyOF9zdWJrZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BRVNfQkxPQ0tfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfQ01BQ19URVNUU19QRVJfS0VZICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gY21hY190ZXN0X3d0aF9jaXBoZXIoIHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBRVMgMTI4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWVzXzEyOF9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXNfbWVzc2FnZV9sZW5ndGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopYWVzXzEyOF9leHBlY3RlZF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FFU19CTE9DS19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9DTUFDX1RFU1RTX1BFUl9LRVkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKiBBRVMtMTkyICovCisgICAgaWYoICggcmV0ID0gY21hY190ZXN0X3N1YmtleXMoIHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBRVMgMTkyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWVzXzE5Ml9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWFlc18xOTJfc3Via2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQUVTX0JMT0NLX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX0NNQUNfVEVTVFNfUEVSX0tFWSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IGNtYWNfdGVzdF93dGhfY2lwaGVyKCB2ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQUVTIDE5MiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFlc18xOTJfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWVzX21lc3NhZ2VfbGVuZ3RocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWFlc18xOTJfZXhwZWN0ZWRfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BRVNfQkxPQ0tfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfQ01BQ19URVNUU19QRVJfS0VZICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgLyogQUVTLTI1NiAqLworICAgIGlmKCAoIHJldCA9IGNtYWNfdGVzdF9zdWJrZXlzKCB2ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQUVTIDI1NiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFlc18yNTZfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyKilhZXNfMjU2X3N1YmtleXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FFU19CTE9DS19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9DTUFDX1RFU1RTX1BFUl9LRVkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBjbWFjX3Rlc3Rfd3RoX2NpcGhlciAoIHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQUVTIDI1NiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXNfMjU2X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFlc19tZXNzYWdlX2xlbmd0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopYWVzXzI1Nl9leHBlY3RlZF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQUVTX0JMT0NLX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9DTUFDX1RFU1RTX1BFUl9LRVkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorICAgIC8qIDNERVMgMiBrZXkgKi8KKyAgICBpZiggKCByZXQgPSBjbWFjX3Rlc3Rfc3Via2V5cyggdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjNERVMgMiBrZXkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXMzXzJrZXlfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyKilkZXMzXzJrZXlfc3Via2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfRUNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0RFUzNfQkxPQ0tfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfQ01BQ19URVNUU19QRVJfS0VZICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gY21hY190ZXN0X3d0aF9jaXBoZXIoIHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzREVTIDIga2V5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzM18ya2V5X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X21lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlczNfbWVzc2FnZV9sZW5ndGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopZGVzM18ya2V5X2V4cGVjdGVkX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfRUNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0RFUzNfQkxPQ0tfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfQ01BQ19URVNUU19QRVJfS0VZICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgLyogM0RFUyAzIGtleSAqLworICAgIGlmKCAoIHJldCA9IGNtYWNfdGVzdF9zdWJrZXlzKCB2ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiM0RFUyAzIGtleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlczNfM2tleV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRlczNfM2tleV9zdWJrZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19FQ0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfREVTM19CTE9DS19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9DTUFDX1RFU1RTX1BFUl9LRVkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBjbWFjX3Rlc3Rfd3RoX2NpcGhlciggdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjNERVMgMyBrZXkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXMzXzNrZXlfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzM19tZXNzYWdlX2xlbmd0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyKilkZXMzXzNrZXlfZXhwZWN0ZWRfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19FQ0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfREVTM19CTE9DS19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9DTUFDX1RFU1RTX1BFUl9LRVkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorICAgIGlmKCAoIHJldCA9IHRlc3RfYWVzMTI4X2NtYWNfcHJmKCB2ZXJib3NlICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfQ01BQ19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jdHJfZHJiZy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY3RyX2RyYmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODZmOGFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY3RyX2RyYmcuYwpAQCAtMCwwICsxLDU5MyBAQAorLyoKKyAqICBDVFJfRFJCRyBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBBRVMtMjU2IChOSVNUIFNQIDgwMC05MCkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIE5JU1QgU1AgODAwLTkwIERSQkdzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBwdWJsdWNhdGlvbi4KKyAqCisgKiAgaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL25pc3RwdWJzLzgwMC05MC9TUDgwMC05MHJldmlzZWRfTWFyY2gyMDA3LnBkZgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBwcmludGYKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogQ1RSX0RSQkcgY29udGV4dCBpbml0aWFsaXphdGlvbgorICovCit2b2lkIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc19tdXRleF9pbml0KCAmY3R4LT5tdXRleCApOworI2VuZGlmCit9CisKKy8qCisgKiBOb24tcHVibGljIGZ1bmN0aW9uIHdyYXBwZWQgYnkgbWJlZHRsc19jdHJfZHJiZ19zZWVkKCkuIE5lY2Vzc2FyeSB0byBhbGxvdworICogTklTVCB0ZXN0cyB0byBzdWNjZWVkICh3aGljaCByZXF1aXJlIGtub3duIGxlbmd0aCBmaXhlZCBlbnRyb3B5KQorICovCitpbnQgbWJlZHRsc19jdHJfZHJiZ19zZWVkX2VudHJvcHlfbGVuKAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgIGludCAoKmZfZW50cm9weSkodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9lbnRyb3B5LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1c3RvbSwKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbnRyb3B5X2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0NUUl9EUkJHX0tFWVNJWkVdOworCisgICAgbWVtc2V0KCBrZXksIDAsIE1CRURUTFNfQ1RSX0RSQkdfS0VZU0laRSApOworCisgICAgbWJlZHRsc19hZXNfaW5pdCggJmN0eC0+YWVzX2N0eCApOworCisgICAgY3R4LT5mX2VudHJvcHkgPSBmX2VudHJvcHk7CisgICAgY3R4LT5wX2VudHJvcHkgPSBwX2VudHJvcHk7CisKKyAgICBjdHgtPmVudHJvcHlfbGVuID0gZW50cm9weV9sZW47CisgICAgY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSBNQkVEVExTX0NUUl9EUkJHX1JFU0VFRF9JTlRFUlZBTDsKKworICAgIC8qCisgICAgICogSW5pdGlhbGl6ZSB3aXRoIGFuIGVtcHR5IGtleQorICAgICAqLworICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgtPmFlc19jdHgsIGtleSwgTUJFRFRMU19DVFJfRFJCR19LRVlCSVRTICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3Jlc2VlZCggY3R4LCBjdXN0b20sIGxlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgaW50ICgqZl9lbnRyb3B5KSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpwX2VudHJvcHksCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3VzdG9tLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIHJldHVybiggbWJlZHRsc19jdHJfZHJiZ19zZWVkX2VudHJvcHlfbGVuKCBjdHgsIGZfZW50cm9weSwgcF9lbnRyb3B5LCBjdXN0b20sIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4gKSApOworfQorCit2b2lkIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX211dGV4X2ZyZWUoICZjdHgtPm11dGV4ICk7CisjZW5kaWYKKyAgICBtYmVkdGxzX2Flc19mcmVlKCAmY3R4LT5hZXNfY3R4ICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX2N0cl9kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UoIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqY3R4LCBpbnQgcmVzaXN0YW5jZSApCit7CisgICAgY3R4LT5wcmVkaWN0aW9uX3Jlc2lzdGFuY2UgPSByZXNpc3RhbmNlOworfQorCit2b2lkIG1iZWR0bHNfY3RyX2RyYmdfc2V0X2VudHJvcHlfbGVuKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwgc2l6ZV90IGxlbiApCit7CisgICAgY3R4LT5lbnRyb3B5X2xlbiA9IGxlbjsKK30KKwordm9pZCBtYmVkdGxzX2N0cl9kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqY3R4LCBpbnQgaW50ZXJ2YWwgKQoreworICAgIGN0eC0+cmVzZWVkX2ludGVydmFsID0gaW50ZXJ2YWw7Cit9CisKK3N0YXRpYyBpbnQgYmxvY2tfY2lwaGVyX2RmKCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUICsgTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgKyAxNl07CisgICAgdW5zaWduZWQgY2hhciB0bXBbTUJFRFRMU19DVFJfRFJCR19TRUVETEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0NUUl9EUkJHX0tFWVNJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgY2hhaW5bTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgKnAsICppdjsKKyAgICBtYmVkdGxzX2Flc19jb250ZXh0IGFlc19jdHg7CisKKyAgICBpbnQgaSwgajsKKyAgICBzaXplX3QgYnVmX2xlbiwgdXNlX2xlbjsKKworICAgIGlmKCBkYXRhX2xlbiA+IE1CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NUUl9EUkJHX0lOUFVUX1RPT19CSUcgKTsKKworICAgIG1lbXNldCggYnVmLCAwLCBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUICsgTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgKyAxNiApOworICAgIG1iZWR0bHNfYWVzX2luaXQoICZhZXNfY3R4ICk7CisKKyAgICAvKgorICAgICAqIENvbnN0cnVjdCBJViAoMTYgYnl0ZXMpIGFuZCBTIGluIGJ1ZmZlcgorICAgICAqIElWID0gQ291bnRlciAoaW4gMzItYml0cykgcGFkZGVkIHRvIDE2IHdpdGggemVyb2VzCisgICAgICogUyA9IExlbmd0aCBpbnB1dCBzdHJpbmcgKGluIDMyLWJpdHMpIHx8IExlbmd0aCBvZiBvdXRwdXQgKGluIDMyLWJpdHMpIHx8CisgICAgICogICAgIGRhdGEgfHwgMHg4MAorICAgICAqICAgICAoVG90YWwgaXMgcGFkZGVkIHRvIGEgbXVsdGlwbGUgb2YgMTYtYnl0ZXMgd2l0aCB6ZXJvZXMpCisgICAgICovCisgICAgcCA9IGJ1ZiArIE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFOworICAgICpwKysgPSAoIGRhdGFfbGVuID4+IDI0ICkgJiAweGZmOworICAgICpwKysgPSAoIGRhdGFfbGVuID4+IDE2ICkgJiAweGZmOworICAgICpwKysgPSAoIGRhdGFfbGVuID4+IDggICkgJiAweGZmOworICAgICpwKysgPSAoIGRhdGFfbGVuICAgICAgICkgJiAweGZmOworICAgIHAgKz0gMzsKKyAgICAqcCsrID0gTUJFRFRMU19DVFJfRFJCR19TRUVETEVOOworICAgIG1lbWNweSggcCwgZGF0YSwgZGF0YV9sZW4gKTsKKyAgICBwW2RhdGFfbGVuXSA9IDB4ODA7CisKKyAgICBidWZfbGVuID0gTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgKyA4ICsgZGF0YV9sZW4gKyAxOworCisgICAgZm9yKCBpID0gMDsgaSA8IE1CRURUTFNfQ1RSX0RSQkdfS0VZU0laRTsgaSsrICkKKyAgICAgICAga2V5W2ldID0gaTsKKworICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZhZXNfY3R4LCBrZXksIE1CRURUTFNfQ1RSX0RSQkdfS0VZQklUUyApOworCisgICAgLyoKKyAgICAgKiBSZWR1Y2UgZGF0YSB0byBNQkVEVExTX0NUUl9EUkJHX1NFRURMRU4gYnl0ZXMgb2YgZGF0YQorICAgICAqLworICAgIGZvciggaiA9IDA7IGogPCBNQkVEVExTX0NUUl9EUkJHX1NFRURMRU47IGogKz0gTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgKQorICAgIHsKKyAgICAgICAgcCA9IGJ1ZjsKKyAgICAgICAgbWVtc2V0KCBjaGFpbiwgMCwgTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgKTsKKyAgICAgICAgdXNlX2xlbiA9IGJ1Zl9sZW47CisKKyAgICAgICAgd2hpbGUoIHVzZV9sZW4gPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFOyBpKysgKQorICAgICAgICAgICAgICAgIGNoYWluW2ldIF49IHBbaV07CisgICAgICAgICAgICBwICs9IE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFOworICAgICAgICAgICAgdXNlX2xlbiAtPSAoIHVzZV9sZW4gPj0gTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgKSA/CisgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFIDogdXNlX2xlbjsKKworICAgICAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfZWNiKCAmYWVzX2N0eCwgTUJFRFRMU19BRVNfRU5DUllQVCwgY2hhaW4sIGNoYWluICk7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoIHRtcCArIGosIGNoYWluLCBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApOworCisgICAgICAgIC8qCisgICAgICAgICAqIFVwZGF0ZSBJVgorICAgICAgICAgKi8KKyAgICAgICAgYnVmWzNdKys7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBEbyBmaW5hbCBlbmNyeXB0aW9uIHdpdGggcmVkdWNlZCBkYXRhCisgICAgICovCisgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmFlc19jdHgsIHRtcCwgTUJFRFRMU19DVFJfRFJCR19LRVlCSVRTICk7CisgICAgaXYgPSB0bXAgKyBNQkVEVExTX0NUUl9EUkJHX0tFWVNJWkU7CisgICAgcCA9IG91dHB1dDsKKworICAgIGZvciggaiA9IDA7IGogPCBNQkVEVExTX0NUUl9EUkJHX1NFRURMRU47IGogKz0gTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfZWNiKCAmYWVzX2N0eCwgTUJFRFRMU19BRVNfRU5DUllQVCwgaXYsIGl2ICk7CisgICAgICAgIG1lbWNweSggcCwgaXYsIE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFICk7CisgICAgICAgIHAgKz0gTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkU7CisgICAgfQorCisgICAgbWJlZHRsc19hZXNfZnJlZSggJmFlc19jdHggKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IGN0cl9kcmJnX3VwZGF0ZV9pbnRlcm5hbCggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbTUJFRFRMU19DVFJfRFJCR19TRUVETEVOXSApCit7CisgICAgdW5zaWduZWQgY2hhciB0bXBbTUJFRFRMU19DVFJfRFJCR19TRUVETEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gdG1wOworICAgIGludCBpLCBqOworCisgICAgbWVtc2V0KCB0bXAsIDAsIE1CRURUTFNfQ1RSX0RSQkdfU0VFRExFTiApOworCisgICAgZm9yKCBqID0gMDsgaiA8IE1CRURUTFNfQ1RSX0RSQkdfU0VFRExFTjsgaiArPSBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBJbmNyZWFzZSBjb3VudGVyCisgICAgICAgICAqLworICAgICAgICBmb3IoIGkgPSBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRTsgaSA+IDA7IGktLSApCisgICAgICAgICAgICBpZiggKytjdHgtPmNvdW50ZXJbaSAtIDFdICE9IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIENyeXB0IGNvdW50ZXIgYmxvY2sKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggJmN0eC0+YWVzX2N0eCwgTUJFRFRMU19BRVNfRU5DUllQVCwgY3R4LT5jb3VudGVyLCBwICk7CisKKyAgICAgICAgcCArPSBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRTsKKyAgICB9CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgTUJFRFRMU19DVFJfRFJCR19TRUVETEVOOyBpKysgKQorICAgICAgICB0bXBbaV0gXj0gZGF0YVtpXTsKKworICAgIC8qCisgICAgICogVXBkYXRlIGtleSBhbmQgY291bnRlcgorICAgICAqLworICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgtPmFlc19jdHgsIHRtcCwgTUJFRFRMU19DVFJfRFJCR19LRVlCSVRTICk7CisgICAgbWVtY3B5KCBjdHgtPmNvdW50ZXIsIHRtcCArIE1CRURUTFNfQ1RSX0RSQkdfS0VZU0laRSwgTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgKTsKKworICAgIHJldHVybiggMCApOworfQorCit2b2lkIG1iZWR0bHNfY3RyX2RyYmdfdXBkYXRlKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRpdGlvbmFsLCBzaXplX3QgYWRkX2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciBhZGRfaW5wdXRbTUJFRFRMU19DVFJfRFJCR19TRUVETEVOXTsKKworICAgIGlmKCBhZGRfbGVuID4gMCApCisgICAgeworICAgICAgICAvKiBNQVhfSU5QVVQgd291bGQgYmUgbW9yZSBsb2dpY2FsIGhlcmUsIGJ1dCB3ZSBoYXZlIHRvIG1hdGNoCisgICAgICAgICAqIGJsb2NrX2NpcGhlcl9kZigpJ3MgbGltaXRzIHNpbmNlIHdlIGNhbid0IHByb3BhZ2F0ZSBlcnJvcnMgKi8KKyAgICAgICAgaWYoIGFkZF9sZW4gPiBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUICkKKyAgICAgICAgICAgIGFkZF9sZW4gPSBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUOworCisgICAgICAgIGJsb2NrX2NpcGhlcl9kZiggYWRkX2lucHV0LCBhZGRpdGlvbmFsLCBhZGRfbGVuICk7CisgICAgICAgIGN0cl9kcmJnX3VwZGF0ZV9pbnRlcm5hbCggY3R4LCBhZGRfaW5wdXQgKTsKKyAgICB9Cit9CisKK2ludCBtYmVkdGxzX2N0cl9kcmJnX3Jlc2VlZCggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRpdGlvbmFsLCBzaXplX3QgbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHNlZWRbTUJFRFRMU19DVFJfRFJCR19NQVhfU0VFRF9JTlBVVF07CisgICAgc2l6ZV90IHNlZWRsZW4gPSAwOworCisgICAgaWYoIGN0eC0+ZW50cm9weV9sZW4gKyBsZW4gPiBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DVFJfRFJCR19JTlBVVF9UT09fQklHICk7CisKKyAgICBtZW1zZXQoIHNlZWQsIDAsIE1CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQgKTsKKworICAgIC8qCisgICAgICogR2F0aGVyIGVudHJvcHlfbGVuIGJ5dGVzIG9mIGVudHJvcHkgdG8gc2VlZCBzdGF0ZQorICAgICAqLworICAgIGlmKCAwICE9IGN0eC0+Zl9lbnRyb3B5KCBjdHgtPnBfZW50cm9weSwgc2VlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5lbnRyb3B5X2xlbiApICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ1RSX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICk7CisgICAgfQorCisgICAgc2VlZGxlbiArPSBjdHgtPmVudHJvcHlfbGVuOworCisgICAgLyoKKyAgICAgKiBBZGQgYWRkaXRpb25hbCBkYXRhCisgICAgICovCisgICAgaWYoIGFkZGl0aW9uYWwgJiYgbGVuICkKKyAgICB7CisgICAgICAgIG1lbWNweSggc2VlZCArIHNlZWRsZW4sIGFkZGl0aW9uYWwsIGxlbiApOworICAgICAgICBzZWVkbGVuICs9IGxlbjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlZHVjZSB0byAzODQgYml0cworICAgICAqLworICAgIGJsb2NrX2NpcGhlcl9kZiggc2VlZCwgc2VlZCwgc2VlZGxlbiApOworCisgICAgLyoKKyAgICAgKiBVcGRhdGUgc3RhdGUKKyAgICAgKi8KKyAgICBjdHJfZHJiZ191cGRhdGVfaW50ZXJuYWwoIGN0eCwgc2VlZCApOworICAgIGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAxOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbV93aXRoX2FkZCggdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkaXRpb25hbCwgc2l6ZV90IGFkZF9sZW4gKQoreworICAgIGludCByZXQgPSAwOworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqY3R4ID0gKG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqKSBwX3JuZzsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZF9pbnB1dFtNQkVEVExTX0NUUl9EUkJHX1NFRURMRU5dOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBvdXRwdXQ7CisgICAgdW5zaWduZWQgY2hhciB0bXBbTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkVdOworICAgIGludCBpOworICAgIHNpemVfdCB1c2VfbGVuOworCisgICAgaWYoIG91dHB1dF9sZW4gPiBNQkVEVExTX0NUUl9EUkJHX01BWF9SRVFVRVNUICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DVFJfRFJCR19SRVFVRVNUX1RPT19CSUcgKTsKKworICAgIGlmKCBhZGRfbGVuID4gTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NUUl9EUkJHX0lOUFVUX1RPT19CSUcgKTsKKworICAgIG1lbXNldCggYWRkX2lucHV0LCAwLCBNQkVEVExTX0NUUl9EUkJHX1NFRURMRU4gKTsKKworICAgIGlmKCBjdHgtPnJlc2VlZF9jb3VudGVyID4gY3R4LT5yZXNlZWRfaW50ZXJ2YWwgfHwKKyAgICAgICAgY3R4LT5wcmVkaWN0aW9uX3Jlc2lzdGFuY2UgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19yZXNlZWQoIGN0eCwgYWRkaXRpb25hbCwgYWRkX2xlbiApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGFkZF9sZW4gPSAwOworICAgIH0KKworICAgIGlmKCBhZGRfbGVuID4gMCApCisgICAgeworICAgICAgICBibG9ja19jaXBoZXJfZGYoIGFkZF9pbnB1dCwgYWRkaXRpb25hbCwgYWRkX2xlbiApOworICAgICAgICBjdHJfZHJiZ191cGRhdGVfaW50ZXJuYWwoIGN0eCwgYWRkX2lucHV0ICk7CisgICAgfQorCisgICAgd2hpbGUoIG91dHB1dF9sZW4gPiAwICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEluY3JlYXNlIGNvdW50ZXIKKyAgICAgICAgICovCisgICAgICAgIGZvciggaSA9IE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFOyBpID4gMDsgaS0tICkKKyAgICAgICAgICAgIGlmKCArK2N0eC0+Y291bnRlcltpIC0gMV0gIT0gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ3J5cHQgY291bnRlciBibG9jaworICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfZWNiKCAmY3R4LT5hZXNfY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBjdHgtPmNvdW50ZXIsIHRtcCApOworCisgICAgICAgIHVzZV9sZW4gPSAoIG91dHB1dF9sZW4gPiBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApID8gTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9sZW47CisgICAgICAgIC8qCisgICAgICAgICAqIENvcHkgcmFuZG9tIGJsb2NrIHRvIGRlc3RpbmF0aW9uCisgICAgICAgICAqLworICAgICAgICBtZW1jcHkoIHAsIHRtcCwgdXNlX2xlbiApOworICAgICAgICBwICs9IHVzZV9sZW47CisgICAgICAgIG91dHB1dF9sZW4gLT0gdXNlX2xlbjsKKyAgICB9CisKKyAgICBjdHJfZHJiZ191cGRhdGVfaW50ZXJuYWwoIGN0eCwgYWRkX2lucHV0ICk7CisKKyAgICBjdHgtPnJlc2VlZF9jb3VudGVyKys7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCB2b2lkICpwX3JuZywgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3Qgb3V0cHV0X2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCA9IChtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKikgcF9ybmc7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tdXRleF9sb2NrKCAmY3R4LT5tdXRleCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworICAgIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCBjdHgsIG91dHB1dCwgb3V0cHV0X2xlbiwgTlVMTCwgMCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCBtYmVkdGxzX211dGV4X3VubG9jayggJmN0eC0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYmVkdGxzX2N0cl9kcmJnX3dyaXRlX3NlZWRfZmlsZSggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGggKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9DVFJfRFJCR19GSUxFX0lPX0VSUk9SOworICAgIEZJTEUgKmY7CisgICAgdW5zaWduZWQgY2hhciBidWZbIE1CRURUTFNfQ1RSX0RSQkdfTUFYX0lOUFVUIF07CisKKyAgICBpZiggKCBmID0gZm9wZW4oIHBhdGgsICJ3YiIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1IgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCBjdHgsIGJ1ZiwgTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQgKSApICE9IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBpZiggZndyaXRlKCBidWYsIDEsIE1CRURUTFNfQ1RSX0RSQkdfTUFYX0lOUFVULCBmICkgIT0gTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfQ1RSX0RSQkdfRklMRV9JT19FUlJPUjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IDA7CisKK2V4aXQ6CisgICAgZmNsb3NlKCBmICk7CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworaW50IG1iZWR0bHNfY3RyX2RyYmdfdXBkYXRlX3NlZWRfZmlsZSggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGggKQoreworICAgIEZJTEUgKmY7CisgICAgc2l6ZV90IG47CisgICAgdW5zaWduZWQgY2hhciBidWZbIE1CRURUTFNfQ1RSX0RSQkdfTUFYX0lOUFVUIF07CisKKyAgICBpZiggKCBmID0gZm9wZW4oIHBhdGgsICJyYiIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1IgKTsKKworICAgIGZzZWVrKCBmLCAwLCBTRUVLX0VORCApOworICAgIG4gPSAoc2l6ZV90KSBmdGVsbCggZiApOworICAgIGZzZWVrKCBmLCAwLCBTRUVLX1NFVCApOworCisgICAgaWYoIG4gPiBNQkVEVExTX0NUUl9EUkJHX01BWF9JTlBVVCApCisgICAgeworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DVFJfRFJCR19JTlBVVF9UT09fQklHICk7CisgICAgfQorCisgICAgaWYoIGZyZWFkKCBidWYsIDEsIG4sIGYgKSAhPSBuICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1IgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIG1iZWR0bHNfY3RyX2RyYmdfdXBkYXRlKCBjdHgsIGJ1ZiwgbiApOworCisgICAgcmV0dXJuKCBtYmVkdGxzX2N0cl9kcmJnX3dyaXRlX3NlZWRfZmlsZSggY3R4LCBwYXRoICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlbnRyb3B5X3NvdXJjZV9wcls5Nl0gPQorICAgIHsgMHhjMSwgMHg4MCwgMHg4MSwgMHhhNiwgMHg1ZCwgMHg0NCwgMHgwMiwgMHgxNiwKKyAgICAgIDB4MTksIDB4YjMsIDB4ZjEsIDB4ODAsIDB4YjEsIDB4YzksIDB4MjAsIDB4MDIsCisgICAgICAweDZhLCAweDU0LCAweDZmLCAweDBjLCAweDcwLCAweDgxLCAweDQ5LCAweDhiLAorICAgICAgMHg2ZSwgMHhhNiwgMHg2MiwgMHg1MiwgMHg2ZCwgMHg1MSwgMHhiMSwgMHhjYiwKKyAgICAgIDB4NTgsIDB4M2IsIDB4ZmEsIDB4ZDUsIDB4MzcsIDB4NWYsIDB4ZmIsIDB4YzksCisgICAgICAweGZmLCAweDQ2LCAweGQyLCAweDE5LCAweGM3LCAweDIyLCAweDNlLCAweDk1LAorICAgICAgMHg0NSwgMHg5ZCwgMHg4MiwgMHhlMSwgMHhlNywgMHgyMiwgMHg5ZiwgMHg2MywKKyAgICAgIDB4MzEsIDB4NjksIDB4ZDIsIDB4NmIsIDB4NTcsIDB4NDcsIDB4NGYsIDB4YTMsCisgICAgICAweDM3LCAweGM5LCAweDk4LCAweDFjLCAweDBiLCAweGZiLCAweDkxLCAweDMxLAorICAgICAgMHg0ZCwgMHg1NSwgMHhiOSwgMHhlOSwgMHgxYywgMHg1YSwgMHg1ZSwgMHhlNCwKKyAgICAgIDB4OTMsIDB4OTIsIDB4Y2YsIDB4YzUsIDB4MjMsIDB4MTIsIDB4ZDUsIDB4NTYsCisgICAgICAweDJjLCAweDRhLCAweDZlLCAweGZmLCAweGRjLCAweDEwLCAweGQwLCAweDY4IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVudHJvcHlfc291cmNlX25vcHJbNjRdID0KKyAgICB7IDB4NWEsIDB4MTksIDB4NGQsIDB4NWUsIDB4MmIsIDB4MzEsIDB4NTgsIDB4MTQsCisgICAgICAweDU0LCAweGRlLCAweGY2LCAweDc1LCAweGZiLCAweDc5LCAweDU4LCAweGZlLAorICAgICAgMHhjNywgMHhkYiwgMHg4NywgMHgzZSwgMHg1NiwgMHg4OSwgMHhmYywgMHg5ZCwKKyAgICAgIDB4MDMsIDB4MjEsIDB4N2MsIDB4NjgsIDB4ZDgsIDB4MDMsIDB4MzgsIDB4MjAsCisgICAgICAweGY5LCAweGU2LCAweDVlLCAweDA0LCAweGQ4LCAweDU2LCAweGYzLCAweGE5LAorICAgICAgMHhjNCwgMHg0YSwgMHg0YywgMHhiZCwgMHhjMSwgMHhkMCwgMHgwOCwgMHg0NiwKKyAgICAgIDB4ZjUsIDB4OTgsIDB4M2QsIDB4NzcsIDB4MWMsIDB4MWIsIDB4MTMsIDB4N2UsCisgICAgICAweDRlLCAweDBmLCAweDlkLCAweDhlLCAweGY0LCAweDA5LCAweGY5LCAweDJlIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG5vbmNlX3BlcnNfcHJbMTZdID0KKyAgICB7IDB4ZDIsIDB4NTQsIDB4ZmMsIDB4ZmYsIDB4MDIsIDB4MWUsIDB4NjksIDB4ZDIsCisgICAgICAweDI5LCAweGM5LCAweGNmLCAweGFkLCAweDg1LCAweGZhLCAweDQ4LCAweDZjIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG5vbmNlX3BlcnNfbm9wclsxNl0gPQorICAgIHsgMHgxYiwgMHg1NCwgMHhiOCwgMHhmZiwgMHgwNiwgMHg0MiwgMHhiZiwgMHhmNSwKKyAgICAgIDB4MjEsIDB4ZjEsIDB4NWMsIDB4MWMsIDB4MGIsIDB4NjYsIDB4NWYsIDB4M2YgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVzdWx0X3ByWzE2XSA9CisgICAgeyAweDM0LCAweDAxLCAweDE2LCAweDU2LCAweGI0LCAweDI5LCAweDAwLCAweDhmLAorICAgICAgMHgzNSwgMHg2MywgMHhlYywgMHhiNSwgMHhmMiwgMHg1OSwgMHgwNywgMHgyMyB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXN1bHRfbm9wclsxNl0gPQorICAgIHsgMHhhMCwgMHg1NCwgMHgzMCwgMHgzZCwgMHg4YSwgMHg3ZSwgMHhhOSwgMHg4OCwKKyAgICAgIDB4OWQsIDB4OTAsIDB4M2UsIDB4MDcsIDB4N2MsIDB4NmYsIDB4MjEsIDB4OGYgfTsKKworc3RhdGljIHNpemVfdCB0ZXN0X29mZnNldDsKK3N0YXRpYyBpbnQgY3RyX2RyYmdfc2VsZl90ZXN0X2VudHJvcHkoIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBkYXRhOworICAgIG1lbWNweSggYnVmLCBwICsgdGVzdF9vZmZzZXQsIGxlbiApOworICAgIHRlc3Rfb2Zmc2V0ICs9IGxlbjsKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2RlZmluZSBDSEsoIGMgKSAgICBpZiggKGMpICE9IDAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIH0KKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc19jdHJfZHJiZ19zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XTsKKworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0eCApOworCisgICAgLyoKKyAgICAgKiBCYXNlZCBvbiBhIE5JU1QgQ1RSX0RSQkcgdGVzdCB2ZWN0b3IgKFBSID0gVHJ1ZSkKKyAgICAgKi8KKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIENUUl9EUkJHIChQUiA9IFRSVUUpIDogIiApOworCisgICAgdGVzdF9vZmZzZXQgPSAwOworICAgIENISyggbWJlZHRsc19jdHJfZHJiZ19zZWVkX2VudHJvcHlfbGVuKCAmY3R4LCBjdHJfZHJiZ19zZWxmX3Rlc3RfZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgZW50cm9weV9zb3VyY2VfcHIsIG5vbmNlX3BlcnNfcHIsIDE2LCAzMiApICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmY3R4LCBNQkVEVExTX0NUUl9EUkJHX1BSX09OICk7CisgICAgQ0hLKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0eCwgYnVmLCBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApICk7CisgICAgQ0hLKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0eCwgYnVmLCBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApICk7CisgICAgQ0hLKCBtZW1jbXAoIGJ1ZiwgcmVzdWx0X3ByLCBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApICk7CisKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHggKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgLyoKKyAgICAgKiBCYXNlZCBvbiBhIE5JU1QgQ1RSX0RSQkcgdGVzdCB2ZWN0b3IgKFBSID0gRkFMU0UpCisgICAgICovCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBDVFJfRFJCRyAoUFIgPSBGQUxTRSk6ICIgKTsKKworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0eCApOworCisgICAgdGVzdF9vZmZzZXQgPSAwOworICAgIENISyggbWJlZHRsc19jdHJfZHJiZ19zZWVkX2VudHJvcHlfbGVuKCAmY3R4LCBjdHJfZHJiZ19zZWxmX3Rlc3RfZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBlbnRyb3B5X3NvdXJjZV9ub3ByLCBub25jZV9wZXJzX25vcHIsIDE2LCAzMiApICk7CisgICAgQ0hLKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0eCwgYnVmLCAxNiApICk7CisgICAgQ0hLKCBtYmVkdGxzX2N0cl9kcmJnX3Jlc2VlZCggJmN0eCwgTlVMTCwgMCApICk7CisgICAgQ0hLKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0eCwgYnVmLCAxNiApICk7CisgICAgQ0hLKCBtZW1jbXAoIGJ1ZiwgcmVzdWx0X25vcHIsIDE2ICkgKTsKKworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0eCApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19DVFJfRFJCR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9kZWJ1Zy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWNkODE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZGVidWcuYwpAQCAtMCwwICsxLDM2OCBAQAorLyoKKyAqICBEZWJ1Z2dpbmcgcm91dGluZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ERUJVR19DKQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgICBmcmVlCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgICAgdGltZV90CisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICAgc25wcmludGYKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9kZWJ1Zy5oIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmICggZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pIHx8IGRlZmluZWQoX01TQ19WRVIpICkgJiYgXAorICAgICFkZWZpbmVkKGlubGluZSkgJiYgIWRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lIGlubGluZSBfX2lubGluZQorI2VuZGlmCisKKyNkZWZpbmUgREVCVUdfQlVGX1NJWkUgICAgICA1MTIKKworc3RhdGljIGludCBkZWJ1Z190aHJlc2hvbGQgPSAwOworCit2b2lkIG1iZWR0bHNfZGVidWdfc2V0X3RocmVzaG9sZCggaW50IHRocmVzaG9sZCApCit7CisgICAgZGVidWdfdGhyZXNob2xkID0gdGhyZXNob2xkOworfQorCisvKgorICogQWxsIGNhbGxzIHRvIGZfZGJnIG11c3QgYmUgbWFkZSB2aWEgdGhpcyBmdW5jdGlvbgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfc2VuZF9saW5lKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyICkKK3sKKyAgICAvKgorICAgICAqIElmIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQsIHdlIG5lZWQgYSB0aHJlYWQgaWRlbnRpZmllci4KKyAgICAgKiBTaW5jZSB0aGVyZSBpcyBubyBwb3J0YWJsZSB3YXkgdG8gZ2V0IG9uZSwgdXNlIHRoZSBhZGRyZXNzIG9mIHRoZSBzc2wKKyAgICAgKiBjb250ZXh0IGluc3RlYWQsIGFzIGl0IHNob3VsZG4ndCBiZSBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLgorICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBjaGFyIGlkc3RyWzIwICsgREVCVUdfQlVGX1NJWkVdOyAvKiAweCArIDE2IG5pYmJsZXMgKyAnOiAnICovCisgICAgbWJlZHRsc19zbnByaW50ZiggaWRzdHIsIHNpemVvZiggaWRzdHIgKSwgIiVwOiAlcyIsIHNzbCwgc3RyICk7CisgICAgc3NsLT5jb25mLT5mX2RiZyggc3NsLT5jb25mLT5wX2RiZywgbGV2ZWwsIGZpbGUsIGxpbmUsIGlkc3RyICk7CisjZWxzZQorICAgIHNzbC0+Y29uZi0+Zl9kYmcoIHNzbC0+Y29uZi0+cF9kYmcsIGxldmVsLCBmaWxlLCBsaW5lLCBzdHIgKTsKKyNlbmRpZgorfQorCit2b2lkIG1iZWR0bHNfZGVidWdfcHJpbnRfbXNnKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4gKQoreworICAgIHZhX2xpc3QgYXJncDsKKyAgICBjaGFyIHN0cltERUJVR19CVUZfU0laRV07CisgICAgaW50IHJldDsKKworICAgIGlmKCBOVUxMID09IHNzbCB8fCBOVUxMID09IHNzbC0+Y29uZiB8fCBOVUxMID09IHNzbC0+Y29uZi0+Zl9kYmcgfHwgbGV2ZWwgPiBkZWJ1Z190aHJlc2hvbGQgKQorICAgICAgICByZXR1cm47CisKKyAgICB2YV9zdGFydCggYXJncCwgZm9ybWF0ICk7CisjaWYgZGVmaW5lZChfV0lOMzIpCisjaWYgZGVmaW5lZChfVFJVTkNBVEUpCisgICAgcmV0ID0gX3ZzbnByaW50Zl9zKCBzdHIsIERFQlVHX0JVRl9TSVpFLCBfVFJVTkNBVEUsIGZvcm1hdCwgYXJncCApOworI2Vsc2UKKyAgICByZXQgPSBfdnNucHJpbnRmKCBzdHIsIERFQlVHX0JVRl9TSVpFLCBmb3JtYXQsIGFyZ3AgKTsKKyAgICBpZiggcmV0IDwgMCB8fCAoc2l6ZV90KSByZXQgPT0gREVCVUdfQlVGX1NJWkUgKQorICAgIHsKKyAgICAgICAgc3RyW0RFQlVHX0JVRl9TSVpFLTFdID0gJ1wwJzsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorI2VuZGlmCisjZWxzZQorICAgIHJldCA9IHZzbnByaW50Ziggc3RyLCBERUJVR19CVUZfU0laRSwgZm9ybWF0LCBhcmdwICk7CisjZW5kaWYKKyAgICB2YV9lbmQoIGFyZ3AgKTsKKworICAgIGlmKCByZXQgPj0gMCAmJiByZXQgPCBERUJVR19CVUZfU0laRSAtIDEgKQorICAgIHsKKyAgICAgICAgc3RyW3JldF0gICAgID0gJ1xuJzsKKyAgICAgICAgc3RyW3JldCArIDFdID0gJ1wwJzsKKyAgICB9CisKKyAgICBkZWJ1Z19zZW5kX2xpbmUoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsIHN0ciApOworfQorCit2b2lkIG1iZWR0bHNfZGVidWdfcHJpbnRfcmV0KCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0ZXh0LCBpbnQgcmV0ICkKK3sKKyAgICBjaGFyIHN0cltERUJVR19CVUZfU0laRV07CisKKyAgICBpZiggc3NsLT5jb25mID09IE5VTEwgfHwgc3NsLT5jb25mLT5mX2RiZyA9PSBOVUxMIHx8IGxldmVsID4gZGVidWdfdGhyZXNob2xkICkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBXaXRoIG5vbi1ibG9ja2luZyBJL08gYW5kIGV4YW1wbGVzIHRoYXQganVzdCByZXRyeSBpbW1lZGlhdGVseSwKKyAgICAgKiB0aGUgbG9ncyB3b3VsZCBiZSBxdWlja2x5IGZsb29kZWQgd2l0aCBXQU5UX1JFQUQsIHNvIGlnbm9yZSB0aGF0LgorICAgICAqIERvbid0IGlnbm9yZSBXQU5UX1dSSVRFIGhvd2V2ZXIsIHNpbmNlIGlzIGlzIHVzdWFsbHkgcmFyZS4KKyAgICAgKi8KKyAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3NucHJpbnRmKCBzdHIsIHNpemVvZiggc3RyICksICIlcygpIHJldHVybmVkICVkICgtMHglMDR4KVxuIiwKKyAgICAgICAgICAgICAgdGV4dCwgcmV0LCAtcmV0ICk7CisKKyAgICBkZWJ1Z19zZW5kX2xpbmUoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsIHN0ciApOworfQorCit2b2lkIG1iZWR0bHNfZGVidWdfcHJpbnRfYnVmKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIGNoYXIgc3RyW0RFQlVHX0JVRl9TSVpFXTsKKyAgICBjaGFyIHR4dFsxN107CisgICAgc2l6ZV90IGksIGlkeCA9IDA7CisKKyAgICBpZiggc3NsLT5jb25mID09IE5VTEwgfHwgc3NsLT5jb25mLT5mX2RiZyA9PSBOVUxMIHx8IGxldmVsID4gZGVidWdfdGhyZXNob2xkICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc19zbnByaW50Ziggc3RyICsgaWR4LCBzaXplb2YoIHN0ciApIC0gaWR4LCAiZHVtcGluZyAnJXMnICgldSBieXRlcylcbiIsCisgICAgICAgICAgICAgIHRleHQsICh1bnNpZ25lZCBpbnQpIGxlbiApOworCisgICAgZGVidWdfc2VuZF9saW5lKCBzc2wsIGxldmVsLCBmaWxlLCBsaW5lLCBzdHIgKTsKKworICAgIGlkeCA9IDA7CisgICAgbWVtc2V0KCB0eHQsIDAsIHNpemVvZiggdHh0ICkgKTsKKyAgICBmb3IoIGkgPSAwOyBpIDwgbGVuOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIGkgPj0gNDA5NiApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiggaSAlIDE2ID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggaSA+IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHN0ciArIGlkeCwgc2l6ZW9mKCBzdHIgKSAtIGlkeCwgIiAgJXNcbiIsIHR4dCApOworICAgICAgICAgICAgICAgIGRlYnVnX3NlbmRfbGluZSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgc3RyICk7CisKKyAgICAgICAgICAgICAgICBpZHggPSAwOworICAgICAgICAgICAgICAgIG1lbXNldCggdHh0LCAwLCBzaXplb2YoIHR4dCApICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlkeCArPSBtYmVkdGxzX3NucHJpbnRmKCBzdHIgKyBpZHgsIHNpemVvZiggc3RyICkgLSBpZHgsICIlMDR4OiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBpICk7CisKKyAgICAgICAgfQorCisgICAgICAgIGlkeCArPSBtYmVkdGxzX3NucHJpbnRmKCBzdHIgKyBpZHgsIHNpemVvZiggc3RyICkgLSBpZHgsICIgJTAyeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgYnVmW2ldICk7CisgICAgICAgIHR4dFtpICUgMTZdID0gKCBidWZbaV0gPiAzMSAmJiBidWZbaV0gPCAxMjcgKSA/IGJ1ZltpXSA6ICcuJyA7CisgICAgfQorCisgICAgaWYoIGxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgZm9yKCAvKiBpID0gaSAqLzsgaSAlIDE2ICE9IDA7IGkrKyApCisgICAgICAgICAgICBpZHggKz0gbWJlZHRsc19zbnByaW50Ziggc3RyICsgaWR4LCBzaXplb2YoIHN0ciApIC0gaWR4LCAiICAgIiApOworCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHN0ciArIGlkeCwgc2l6ZW9mKCBzdHIgKSAtIGlkeCwgIiAgJXNcbiIsIHR4dCApOworICAgICAgICBkZWJ1Z19zZW5kX2xpbmUoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsIHN0ciApOworICAgIH0KK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9lY3AoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpYICkKK3sKKyAgICBjaGFyIHN0cltERUJVR19CVUZfU0laRV07CisKKyAgICBpZiggc3NsLT5jb25mID09IE5VTEwgfHwgc3NsLT5jb25mLT5mX2RiZyA9PSBOVUxMIHx8IGxldmVsID4gZGVidWdfdGhyZXNob2xkICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc19zbnByaW50Ziggc3RyLCBzaXplb2YoIHN0ciApLCAiJXMoWCkiLCB0ZXh0ICk7CisgICAgbWJlZHRsc19kZWJ1Z19wcmludF9tcGkoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsIHN0ciwgJlgtPlggKTsKKworICAgIG1iZWR0bHNfc25wcmludGYoIHN0ciwgc2l6ZW9mKCBzdHIgKSwgIiVzKFkpIiwgdGV4dCApOworICAgIG1iZWR0bHNfZGVidWdfcHJpbnRfbXBpKCBzc2wsIGxldmVsLCBmaWxlLCBsaW5lLCBzdHIsICZYLT5ZICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQordm9pZCBtYmVkdGxzX2RlYnVnX3ByaW50X21waSggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGV4dCwgY29uc3QgbWJlZHRsc19tcGkgKlggKQoreworICAgIGNoYXIgc3RyW0RFQlVHX0JVRl9TSVpFXTsKKyAgICBpbnQgaiwgaywgemVyb3MgPSAxOworICAgIHNpemVfdCBpLCBuLCBpZHggPSAwOworCisgICAgaWYoIHNzbC0+Y29uZiA9PSBOVUxMIHx8IHNzbC0+Y29uZi0+Zl9kYmcgPT0gTlVMTCB8fCBYID09IE5VTEwgfHwgbGV2ZWwgPiBkZWJ1Z190aHJlc2hvbGQgKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IoIG4gPSBYLT5uIC0gMTsgbiA+IDA7IG4tLSApCisgICAgICAgIGlmKCBYLT5wW25dICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBmb3IoIGogPSAoIHNpemVvZihtYmVkdGxzX21waV91aW50KSA8PCAzICkgLSAxOyBqID49IDA7IGotLSApCisgICAgICAgIGlmKCAoICggWC0+cFtuXSA+PiBqICkgJiAxICkgIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIG1iZWR0bHNfc25wcmludGYoIHN0ciArIGlkeCwgc2l6ZW9mKCBzdHIgKSAtIGlkeCwgInZhbHVlIG9mICclcycgKCVkIGJpdHMpIGlzOlxuIiwKKyAgICAgICAgICAgICAgdGV4dCwgKGludCkgKCAoIG4gKiAoIHNpemVvZihtYmVkdGxzX21waV91aW50KSA8PCAzICkgKSArIGogKyAxICkgKTsKKworICAgIGRlYnVnX3NlbmRfbGluZSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgc3RyICk7CisKKyAgICBpZHggPSAwOworICAgIGZvciggaSA9IG4gKyAxLCBqID0gMDsgaSA+IDA7IGktLSApCisgICAgeworICAgICAgICBpZiggemVyb3MgJiYgWC0+cFtpIC0gMV0gPT0gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3IoIGsgPSBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSAtIDE7IGsgPj0gMDsgay0tICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHplcm9zICYmICggKCBYLT5wW2kgLSAxXSA+PiAoIGsgPDwgMyApICkgJiAweEZGICkgPT0gMCApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgemVyb3MgPSAwOworCisgICAgICAgICAgICBpZiggaiAlIDE2ID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCBqID4gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBzdHIgKyBpZHgsIHNpemVvZiggc3RyICkgLSBpZHgsICJcbiIgKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWdfc2VuZF9saW5lKCBzc2wsIGxldmVsLCBmaWxlLCBsaW5lLCBzdHIgKTsKKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlkeCArPSBtYmVkdGxzX3NucHJpbnRmKCBzdHIgKyBpZHgsIHNpemVvZiggc3RyICkgLSBpZHgsICIgJTAyeCIsICh1bnNpZ25lZCBpbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggWC0+cFtpIC0gMV0gPj4gKCBrIDw8IDMgKSApICYgMHhGRiApOworCisgICAgICAgICAgICBqKys7CisgICAgICAgIH0KKworICAgIH0KKworICAgIGlmKCB6ZXJvcyA9PSAxICkKKyAgICAgICAgaWR4ICs9IG1iZWR0bHNfc25wcmludGYoIHN0ciArIGlkeCwgc2l6ZW9mKCBzdHIgKSAtIGlkeCwgIiAwMCIgKTsKKworICAgIG1iZWR0bHNfc25wcmludGYoIHN0ciArIGlkeCwgc2l6ZW9mKCBzdHIgKSAtIGlkeCwgIlxuIiApOworICAgIGRlYnVnX3NlbmRfbGluZSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgc3RyICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCitzdGF0aWMgdm9pZCBkZWJ1Z19wcmludF9wayggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGV4dCwgY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICpwayApCit7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19wa19kZWJ1Z19pdGVtIGl0ZW1zW01CRURUTFNfUEtfREVCVUdfTUFYX0lURU1TXTsKKyAgICBjaGFyIG5hbWVbMTZdOworCisgICAgbWVtc2V0KCBpdGVtcywgMCwgc2l6ZW9mKCBpdGVtcyApICk7CisKKyAgICBpZiggbWJlZHRsc19wa19kZWJ1ZyggcGssIGl0ZW1zICkgIT0gMCApCisgICAgeworICAgICAgICBkZWJ1Z19zZW5kX2xpbmUoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIFBLIGNvbnRleHRcbiIgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciggaSA9IDA7IGkgPCBNQkVEVExTX1BLX0RFQlVHX01BWF9JVEVNUzsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCBpdGVtc1tpXS50eXBlID09IE1CRURUTFNfUEtfREVCVUdfTk9ORSApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggbmFtZSwgc2l6ZW9mKCBuYW1lICksICIlcyVzIiwgdGV4dCwgaXRlbXNbaV0ubmFtZSApOworICAgICAgICBuYW1lW3NpemVvZiggbmFtZSApIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmKCBpdGVtc1tpXS50eXBlID09IE1CRURUTFNfUEtfREVCVUdfTVBJICkKKyAgICAgICAgICAgIG1iZWR0bHNfZGVidWdfcHJpbnRfbXBpKCBzc2wsIGxldmVsLCBmaWxlLCBsaW5lLCBuYW1lLCBpdGVtc1tpXS52YWx1ZSApOworICAgICAgICBlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgICAgICBpZiggaXRlbXNbaV0udHlwZSA9PSBNQkVEVExTX1BLX0RFQlVHX0VDUCApCisgICAgICAgICAgICBtYmVkdGxzX2RlYnVnX3ByaW50X2VjcCggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgbmFtZSwgaXRlbXNbaV0udmFsdWUgKTsKKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICBkZWJ1Z19zZW5kX2xpbmUoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIG5vdCBoYXBwZW5cbiIgKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3ByaW50X2xpbmVfYnlfbGluZSggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICp0ZXh0ICkKK3sKKyAgICBjaGFyIHN0cltERUJVR19CVUZfU0laRV07CisgICAgY29uc3QgY2hhciAqc3RhcnQsICpjdXI7CisKKyAgICBzdGFydCA9IHRleHQ7CisgICAgZm9yKCBjdXIgPSB0ZXh0OyAqY3VyICE9ICdcMCc7IGN1cisrICkKKyAgICB7CisgICAgICAgIGlmKCAqY3VyID09ICdcbicgKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgbGVuID0gY3VyIC0gc3RhcnQgKyAxOworICAgICAgICAgICAgaWYoIGxlbiA+IERFQlVHX0JVRl9TSVpFIC0gMSApCisgICAgICAgICAgICAgICAgbGVuID0gREVCVUdfQlVGX1NJWkUgLSAxOworCisgICAgICAgICAgICBtZW1jcHkoIHN0ciwgc3RhcnQsIGxlbiApOworICAgICAgICAgICAgc3RyW2xlbl0gPSAnXDAnOworCisgICAgICAgICAgICBkZWJ1Z19zZW5kX2xpbmUoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsIHN0ciApOworCisgICAgICAgICAgICBzdGFydCA9IGN1ciArIDE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9jcnQoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKmNydCApCit7CisgICAgY2hhciBzdHJbREVCVUdfQlVGX1NJWkVdOworICAgIGludCBpID0gMDsKKworICAgIGlmKCBzc2wtPmNvbmYgPT0gTlVMTCB8fCBzc2wtPmNvbmYtPmZfZGJnID09IE5VTEwgfHwgY3J0ID09IE5VTEwgfHwgbGV2ZWwgPiBkZWJ1Z190aHJlc2hvbGQgKQorICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSggY3J0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgY2hhciBidWZbMTAyNF07CisKKyAgICAgICAgbWJlZHRsc19zbnByaW50Ziggc3RyLCBzaXplb2YoIHN0ciApLCAiJXMgIyVkOlxuIiwgdGV4dCwgKytpICk7CisgICAgICAgIGRlYnVnX3NlbmRfbGluZSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgc3RyICk7CisKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9pbmZvKCBidWYsIHNpemVvZiggYnVmICkgLSAxLCAiIiwgY3J0ICk7CisgICAgICAgIGRlYnVnX3ByaW50X2xpbmVfYnlfbGluZSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgYnVmICk7CisKKyAgICAgICAgZGVidWdfcHJpbnRfcGsoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsICJjcnQtPiIsICZjcnQtPnBrICk7CisKKyAgICAgICAgY3J0ID0gY3J0LT5uZXh0OworICAgIH0KK30KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfREVCVUdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZGVzLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9kZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY5NWNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZGVzLmMKQEAgLTAsMCArMSwxMDYxIEBACisvKgorICogIEZJUFMtNDYtMyBjb21wbGlhbnQgVHJpcGxlLURFUyBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBERVMsIG9uIHdoaWNoIFRERVMgaXMgYmFzZWQsIHdhcyBvcmlnaW5hbGx5IGRlc2lnbmVkIGJ5IEhvcnN0IEZlaXN0ZWwKKyAqICBhdCBJQk0gaW4gMTk3NCwgYW5kIHdhcyBhZG9wdGVkIGFzIGEgc3RhbmRhcmQgYnkgTklTVCAoZm9ybWVybHkgTkJTKS4KKyAqCisgKiAgaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczQ2LTMvZmlwczQ2LTMucGRmCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvZGVzLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBwcmludGYKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19ERVNfQUxUKQorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIqKXY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIDMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbiBtYWNyb3MgKGJpZyBlbmRpYW4pCisgKi8KKyNpZm5kZWYgR0VUX1VJTlQzMl9CRQorI2RlZmluZSBHRVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobikgPSAoICh1aW50MzJfdCkgKGIpWyhpKSAgICBdIDw8IDI0ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMV0gPDwgMTYgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAyXSA8PCAgOCApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDNdICAgICAgICk7ICAgICAgICAgICAgXAorfQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQzMl9CRQorI2RlZmluZSBQVVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoYilbKGkpICAgIF0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMjQgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAxNiApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDJdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+ICA4ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgM10gPSAodW5zaWduZWQgY2hhcikgKCAobikgICAgICAgKTsgICAgICAgXAorfQorI2VuZGlmCisKKy8qCisgKiBFeHBhbmRlZCBERVMgUy1ib3hlcworICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgU0IxWzY0XSA9Cit7CisgICAgMHgwMTAxMDQwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMCwgMHgwMTAxMDQwNCwKKyAgICAweDAxMDEwMDA0LCAweDAwMDEwNDA0LCAweDAwMDAwMDA0LCAweDAwMDEwMDAwLAorICAgIDB4MDAwMDA0MDAsIDB4MDEwMTA0MDAsIDB4MDEwMTA0MDQsIDB4MDAwMDA0MDAsCisgICAgMHgwMTAwMDQwNCwgMHgwMTAxMDAwNCwgMHgwMTAwMDAwMCwgMHgwMDAwMDAwNCwKKyAgICAweDAwMDAwNDA0LCAweDAxMDAwNDAwLCAweDAxMDAwNDAwLCAweDAwMDEwNDAwLAorICAgIDB4MDAwMTA0MDAsIDB4MDEwMTAwMDAsIDB4MDEwMTAwMDAsIDB4MDEwMDA0MDQsCisgICAgMHgwMDAxMDAwNCwgMHgwMTAwMDAwNCwgMHgwMTAwMDAwNCwgMHgwMDAxMDAwNCwKKyAgICAweDAwMDAwMDAwLCAweDAwMDAwNDA0LCAweDAwMDEwNDA0LCAweDAxMDAwMDAwLAorICAgIDB4MDAwMTAwMDAsIDB4MDEwMTA0MDQsIDB4MDAwMDAwMDQsIDB4MDEwMTAwMDAsCisgICAgMHgwMTAxMDQwMCwgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMDAwMDQwMCwKKyAgICAweDAxMDEwMDA0LCAweDAwMDEwMDAwLCAweDAwMDEwNDAwLCAweDAxMDAwMDA0LAorICAgIDB4MDAwMDA0MDAsIDB4MDAwMDAwMDQsIDB4MDEwMDA0MDQsIDB4MDAwMTA0MDQsCisgICAgMHgwMTAxMDQwNCwgMHgwMDAxMDAwNCwgMHgwMTAxMDAwMCwgMHgwMTAwMDQwNCwKKyAgICAweDAxMDAwMDA0LCAweDAwMDAwNDA0LCAweDAwMDEwNDA0LCAweDAxMDEwNDAwLAorICAgIDB4MDAwMDA0MDQsIDB4MDEwMDA0MDAsIDB4MDEwMDA0MDAsIDB4MDAwMDAwMDAsCisgICAgMHgwMDAxMDAwNCwgMHgwMDAxMDQwMCwgMHgwMDAwMDAwMCwgMHgwMTAxMDAwNAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IFNCMls2NF0gPQoreworICAgIDB4ODAxMDgwMjAsIDB4ODAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAxMDgwMjAsCisgICAgMHgwMDEwMDAwMCwgMHgwMDAwMDAyMCwgMHg4MDEwMDAyMCwgMHg4MDAwODAyMCwKKyAgICAweDgwMDAwMDIwLCAweDgwMTA4MDIwLCAweDgwMTA4MDAwLCAweDgwMDAwMDAwLAorICAgIDB4ODAwMDgwMDAsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMjAsIDB4ODAxMDAwMjAsCisgICAgMHgwMDEwODAwMCwgMHgwMDEwMDAyMCwgMHg4MDAwODAyMCwgMHgwMDAwMDAwMCwKKyAgICAweDgwMDAwMDAwLCAweDAwMDA4MDAwLCAweDAwMTA4MDIwLCAweDgwMTAwMDAwLAorICAgIDB4MDAxMDAwMjAsIDB4ODAwMDAwMjAsIDB4MDAwMDAwMDAsIDB4MDAxMDgwMDAsCisgICAgMHgwMDAwODAyMCwgMHg4MDEwODAwMCwgMHg4MDEwMDAwMCwgMHgwMDAwODAyMCwKKyAgICAweDAwMDAwMDAwLCAweDAwMTA4MDIwLCAweDgwMTAwMDIwLCAweDAwMTAwMDAwLAorICAgIDB4ODAwMDgwMjAsIDB4ODAxMDAwMDAsIDB4ODAxMDgwMDAsIDB4MDAwMDgwMDAsCisgICAgMHg4MDEwMDAwMCwgMHg4MDAwODAwMCwgMHgwMDAwMDAyMCwgMHg4MDEwODAyMCwKKyAgICAweDAwMTA4MDIwLCAweDAwMDAwMDIwLCAweDAwMDA4MDAwLCAweDgwMDAwMDAwLAorICAgIDB4MDAwMDgwMjAsIDB4ODAxMDgwMDAsIDB4MDAxMDAwMDAsIDB4ODAwMDAwMjAsCisgICAgMHgwMDEwMDAyMCwgMHg4MDAwODAyMCwgMHg4MDAwMDAyMCwgMHgwMDEwMDAyMCwKKyAgICAweDAwMTA4MDAwLCAweDAwMDAwMDAwLCAweDgwMDA4MDAwLCAweDAwMDA4MDIwLAorICAgIDB4ODAwMDAwMDAsIDB4ODAxMDAwMjAsIDB4ODAxMDgwMjAsIDB4MDAxMDgwMDAKK307CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBTQjNbNjRdID0KK3sKKyAgICAweDAwMDAwMjA4LCAweDA4MDIwMjAwLCAweDAwMDAwMDAwLCAweDA4MDIwMDA4LAorICAgIDB4MDgwMDAyMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjAyMDgsIDB4MDgwMDAyMDAsCisgICAgMHgwMDAyMDAwOCwgMHgwODAwMDAwOCwgMHgwODAwMDAwOCwgMHgwMDAyMDAwMCwKKyAgICAweDA4MDIwMjA4LCAweDAwMDIwMDA4LCAweDA4MDIwMDAwLCAweDAwMDAwMjA4LAorICAgIDB4MDgwMDAwMDAsIDB4MDAwMDAwMDgsIDB4MDgwMjAyMDAsIDB4MDAwMDAyMDAsCisgICAgMHgwMDAyMDIwMCwgMHgwODAyMDAwMCwgMHgwODAyMDAwOCwgMHgwMDAyMDIwOCwKKyAgICAweDA4MDAwMjA4LCAweDAwMDIwMjAwLCAweDAwMDIwMDAwLCAweDA4MDAwMjA4LAorICAgIDB4MDAwMDAwMDgsIDB4MDgwMjAyMDgsIDB4MDAwMDAyMDAsIDB4MDgwMDAwMDAsCisgICAgMHgwODAyMDIwMCwgMHgwODAwMDAwMCwgMHgwMDAyMDAwOCwgMHgwMDAwMDIwOCwKKyAgICAweDAwMDIwMDAwLCAweDA4MDIwMjAwLCAweDA4MDAwMjAwLCAweDAwMDAwMDAwLAorICAgIDB4MDAwMDAyMDAsIDB4MDAwMjAwMDgsIDB4MDgwMjAyMDgsIDB4MDgwMDAyMDAsCisgICAgMHgwODAwMDAwOCwgMHgwMDAwMDIwMCwgMHgwMDAwMDAwMCwgMHgwODAyMDAwOCwKKyAgICAweDA4MDAwMjA4LCAweDAwMDIwMDAwLCAweDA4MDAwMDAwLCAweDA4MDIwMjA4LAorICAgIDB4MDAwMDAwMDgsIDB4MDAwMjAyMDgsIDB4MDAwMjAyMDAsIDB4MDgwMDAwMDgsCisgICAgMHgwODAyMDAwMCwgMHgwODAwMDIwOCwgMHgwMDAwMDIwOCwgMHgwODAyMDAwMCwKKyAgICAweDAwMDIwMjA4LCAweDAwMDAwMDA4LCAweDA4MDIwMDA4LCAweDAwMDIwMjAwCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3QgU0I0WzY0XSA9Cit7CisgICAgMHgwMDgwMjAwMSwgMHgwMDAwMjA4MSwgMHgwMDAwMjA4MSwgMHgwMDAwMDA4MCwKKyAgICAweDAwODAyMDgwLCAweDAwODAwMDgxLCAweDAwODAwMDAxLCAweDAwMDAyMDAxLAorICAgIDB4MDAwMDAwMDAsIDB4MDA4MDIwMDAsIDB4MDA4MDIwMDAsIDB4MDA4MDIwODEsCisgICAgMHgwMDAwMDA4MSwgMHgwMDAwMDAwMCwgMHgwMDgwMDA4MCwgMHgwMDgwMDAwMSwKKyAgICAweDAwMDAwMDAxLCAweDAwMDAyMDAwLCAweDAwODAwMDAwLCAweDAwODAyMDAxLAorICAgIDB4MDAwMDAwODAsIDB4MDA4MDAwMDAsIDB4MDAwMDIwMDEsIDB4MDAwMDIwODAsCisgICAgMHgwMDgwMDA4MSwgMHgwMDAwMDAwMSwgMHgwMDAwMjA4MCwgMHgwMDgwMDA4MCwKKyAgICAweDAwMDAyMDAwLCAweDAwODAyMDgwLCAweDAwODAyMDgxLCAweDAwMDAwMDgxLAorICAgIDB4MDA4MDAwODAsIDB4MDA4MDAwMDEsIDB4MDA4MDIwMDAsIDB4MDA4MDIwODEsCisgICAgMHgwMDAwMDA4MSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDgwMjAwMCwKKyAgICAweDAwMDAyMDgwLCAweDAwODAwMDgwLCAweDAwODAwMDgxLCAweDAwMDAwMDAxLAorICAgIDB4MDA4MDIwMDEsIDB4MDAwMDIwODEsIDB4MDAwMDIwODEsIDB4MDAwMDAwODAsCisgICAgMHgwMDgwMjA4MSwgMHgwMDAwMDA4MSwgMHgwMDAwMDAwMSwgMHgwMDAwMjAwMCwKKyAgICAweDAwODAwMDAxLCAweDAwMDAyMDAxLCAweDAwODAyMDgwLCAweDAwODAwMDgxLAorICAgIDB4MDAwMDIwMDEsIDB4MDAwMDIwODAsIDB4MDA4MDAwMDAsIDB4MDA4MDIwMDEsCisgICAgMHgwMDAwMDA4MCwgMHgwMDgwMDAwMCwgMHgwMDAwMjAwMCwgMHgwMDgwMjA4MAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IFNCNVs2NF0gPQoreworICAgIDB4MDAwMDAxMDAsIDB4MDIwODAxMDAsIDB4MDIwODAwMDAsIDB4NDIwMDAxMDAsCisgICAgMHgwMDA4MDAwMCwgMHgwMDAwMDEwMCwgMHg0MDAwMDAwMCwgMHgwMjA4MDAwMCwKKyAgICAweDQwMDgwMTAwLCAweDAwMDgwMDAwLCAweDAyMDAwMTAwLCAweDQwMDgwMTAwLAorICAgIDB4NDIwMDAxMDAsIDB4NDIwODAwMDAsIDB4MDAwODAxMDAsIDB4NDAwMDAwMDAsCisgICAgMHgwMjAwMDAwMCwgMHg0MDA4MDAwMCwgMHg0MDA4MDAwMCwgMHgwMDAwMDAwMCwKKyAgICAweDQwMDAwMTAwLCAweDQyMDgwMTAwLCAweDQyMDgwMTAwLCAweDAyMDAwMTAwLAorICAgIDB4NDIwODAwMDAsIDB4NDAwMDAxMDAsIDB4MDAwMDAwMDAsIDB4NDIwMDAwMDAsCisgICAgMHgwMjA4MDEwMCwgMHgwMjAwMDAwMCwgMHg0MjAwMDAwMCwgMHgwMDA4MDEwMCwKKyAgICAweDAwMDgwMDAwLCAweDQyMDAwMTAwLCAweDAwMDAwMTAwLCAweDAyMDAwMDAwLAorICAgIDB4NDAwMDAwMDAsIDB4MDIwODAwMDAsIDB4NDIwMDAxMDAsIDB4NDAwODAxMDAsCisgICAgMHgwMjAwMDEwMCwgMHg0MDAwMDAwMCwgMHg0MjA4MDAwMCwgMHgwMjA4MDEwMCwKKyAgICAweDQwMDgwMTAwLCAweDAwMDAwMTAwLCAweDAyMDAwMDAwLCAweDQyMDgwMDAwLAorICAgIDB4NDIwODAxMDAsIDB4MDAwODAxMDAsIDB4NDIwMDAwMDAsIDB4NDIwODAxMDAsCisgICAgMHgwMjA4MDAwMCwgMHgwMDAwMDAwMCwgMHg0MDA4MDAwMCwgMHg0MjAwMDAwMCwKKyAgICAweDAwMDgwMTAwLCAweDAyMDAwMTAwLCAweDQwMDAwMTAwLCAweDAwMDgwMDAwLAorICAgIDB4MDAwMDAwMDAsIDB4NDAwODAwMDAsIDB4MDIwODAxMDAsIDB4NDAwMDAxMDAKK307CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBTQjZbNjRdID0KK3sKKyAgICAweDIwMDAwMDEwLCAweDIwNDAwMDAwLCAweDAwMDA0MDAwLCAweDIwNDA0MDEwLAorICAgIDB4MjA0MDAwMDAsIDB4MDAwMDAwMTAsIDB4MjA0MDQwMTAsIDB4MDA0MDAwMDAsCisgICAgMHgyMDAwNDAwMCwgMHgwMDQwNDAxMCwgMHgwMDQwMDAwMCwgMHgyMDAwMDAxMCwKKyAgICAweDAwNDAwMDEwLCAweDIwMDA0MDAwLCAweDIwMDAwMDAwLCAweDAwMDA0MDEwLAorICAgIDB4MDAwMDAwMDAsIDB4MDA0MDAwMTAsIDB4MjAwMDQwMTAsIDB4MDAwMDQwMDAsCisgICAgMHgwMDQwNDAwMCwgMHgyMDAwNDAxMCwgMHgwMDAwMDAxMCwgMHgyMDQwMDAxMCwKKyAgICAweDIwNDAwMDEwLCAweDAwMDAwMDAwLCAweDAwNDA0MDEwLCAweDIwNDA0MDAwLAorICAgIDB4MDAwMDQwMTAsIDB4MDA0MDQwMDAsIDB4MjA0MDQwMDAsIDB4MjAwMDAwMDAsCisgICAgMHgyMDAwNDAwMCwgMHgwMDAwMDAxMCwgMHgyMDQwMDAxMCwgMHgwMDQwNDAwMCwKKyAgICAweDIwNDA0MDEwLCAweDAwNDAwMDAwLCAweDAwMDA0MDEwLCAweDIwMDAwMDEwLAorICAgIDB4MDA0MDAwMDAsIDB4MjAwMDQwMDAsIDB4MjAwMDAwMDAsIDB4MDAwMDQwMTAsCisgICAgMHgyMDAwMDAxMCwgMHgyMDQwNDAxMCwgMHgwMDQwNDAwMCwgMHgyMDQwMDAwMCwKKyAgICAweDAwNDA0MDEwLCAweDIwNDA0MDAwLCAweDAwMDAwMDAwLCAweDIwNDAwMDEwLAorICAgIDB4MDAwMDAwMTAsIDB4MDAwMDQwMDAsIDB4MjA0MDAwMDAsIDB4MDA0MDQwMTAsCisgICAgMHgwMDAwNDAwMCwgMHgwMDQwMDAxMCwgMHgyMDAwNDAxMCwgMHgwMDAwMDAwMCwKKyAgICAweDIwNDA0MDAwLCAweDIwMDAwMDAwLCAweDAwNDAwMDEwLCAweDIwMDA0MDEwCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3QgU0I3WzY0XSA9Cit7CisgICAgMHgwMDIwMDAwMCwgMHgwNDIwMDAwMiwgMHgwNDAwMDgwMiwgMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwODAwLCAweDA0MDAwODAyLCAweDAwMjAwODAyLCAweDA0MjAwODAwLAorICAgIDB4MDQyMDA4MDIsIDB4MDAyMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMDIsCisgICAgMHgwMDAwMDAwMiwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMiwgMHgwMDAwMDgwMiwKKyAgICAweDA0MDAwODAwLCAweDAwMjAwODAyLCAweDAwMjAwMDAyLCAweDA0MDAwODAwLAorICAgIDB4MDQwMDAwMDIsIDB4MDQyMDAwMDAsIDB4MDQyMDA4MDAsIDB4MDAyMDAwMDIsCisgICAgMHgwNDIwMDAwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMiwgMHgwNDIwMDgwMiwKKyAgICAweDAwMjAwODAwLCAweDAwMDAwMDAyLCAweDA0MDAwMDAwLCAweDAwMjAwODAwLAorICAgIDB4MDQwMDAwMDAsIDB4MDAyMDA4MDAsIDB4MDAyMDAwMDAsIDB4MDQwMDA4MDIsCisgICAgMHgwNDAwMDgwMiwgMHgwNDIwMDAwMiwgMHgwNDIwMDAwMiwgMHgwMDAwMDAwMiwKKyAgICAweDAwMjAwMDAyLCAweDA0MDAwMDAwLCAweDA0MDAwODAwLCAweDAwMjAwMDAwLAorICAgIDB4MDQyMDA4MDAsIDB4MDAwMDA4MDIsIDB4MDAyMDA4MDIsIDB4MDQyMDA4MDAsCisgICAgMHgwMDAwMDgwMiwgMHgwNDAwMDAwMiwgMHgwNDIwMDgwMiwgMHgwNDIwMDAwMCwKKyAgICAweDAwMjAwODAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAyLCAweDA0MjAwODAyLAorICAgIDB4MDAwMDAwMDAsIDB4MDAyMDA4MDIsIDB4MDQyMDAwMDAsIDB4MDAwMDA4MDAsCisgICAgMHgwNDAwMDAwMiwgMHgwNDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDIwMDAwMgorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IFNCOFs2NF0gPQoreworICAgIDB4MTAwMDEwNDAsIDB4MDAwMDEwMDAsIDB4MDAwNDAwMDAsIDB4MTAwNDEwNDAsCisgICAgMHgxMDAwMDAwMCwgMHgxMDAwMTA0MCwgMHgwMDAwMDA0MCwgMHgxMDAwMDAwMCwKKyAgICAweDAwMDQwMDQwLCAweDEwMDQwMDAwLCAweDEwMDQxMDQwLCAweDAwMDQxMDAwLAorICAgIDB4MTAwNDEwMDAsIDB4MDAwNDEwNDAsIDB4MDAwMDEwMDAsIDB4MDAwMDAwNDAsCisgICAgMHgxMDA0MDAwMCwgMHgxMDAwMDA0MCwgMHgxMDAwMTAwMCwgMHgwMDAwMTA0MCwKKyAgICAweDAwMDQxMDAwLCAweDAwMDQwMDQwLCAweDEwMDQwMDQwLCAweDEwMDQxMDAwLAorICAgIDB4MDAwMDEwNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MTAwNDAwNDAsCisgICAgMHgxMDAwMDA0MCwgMHgxMDAwMTAwMCwgMHgwMDA0MTA0MCwgMHgwMDA0MDAwMCwKKyAgICAweDAwMDQxMDQwLCAweDAwMDQwMDAwLCAweDEwMDQxMDAwLCAweDAwMDAxMDAwLAorICAgIDB4MDAwMDAwNDAsIDB4MTAwNDAwNDAsIDB4MDAwMDEwMDAsIDB4MDAwNDEwNDAsCisgICAgMHgxMDAwMTAwMCwgMHgwMDAwMDA0MCwgMHgxMDAwMDA0MCwgMHgxMDA0MDAwMCwKKyAgICAweDEwMDQwMDQwLCAweDEwMDAwMDAwLCAweDAwMDQwMDAwLCAweDEwMDAxMDQwLAorICAgIDB4MDAwMDAwMDAsIDB4MTAwNDEwNDAsIDB4MDAwNDAwNDAsIDB4MTAwMDAwNDAsCisgICAgMHgxMDA0MDAwMCwgMHgxMDAwMTAwMCwgMHgxMDAwMTA0MCwgMHgwMDAwMDAwMCwKKyAgICAweDEwMDQxMDQwLCAweDAwMDQxMDAwLCAweDAwMDQxMDAwLCAweDAwMDAxMDQwLAorICAgIDB4MDAwMDEwNDAsIDB4MDAwNDAwNDAsIDB4MTAwMDAwMDAsIDB4MTAwNDEwMDAKK307CisKKy8qCisgKiBQQzE6IGxlZnQgYW5kIHJpZ2h0IGhhbHZlcyBiaXQtc3dhcAorICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgTEhzWzE2XSA9Cit7CisgICAgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMDAwMDEwMCwgMHgwMDAwMDEwMSwKKyAgICAweDAwMDEwMDAwLCAweDAwMDEwMDAxLCAweDAwMDEwMTAwLCAweDAwMDEwMTAxLAorICAgIDB4MDEwMDAwMDAsIDB4MDEwMDAwMDEsIDB4MDEwMDAxMDAsIDB4MDEwMDAxMDEsCisgICAgMHgwMTAxMDAwMCwgMHgwMTAxMDAwMSwgMHgwMTAxMDEwMCwgMHgwMTAxMDEwMQorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IFJIc1sxNl0gPQoreworICAgIDB4MDAwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDAwMTAwMDAsIDB4MDEwMTAwMDAsCisgICAgMHgwMDAwMDEwMCwgMHgwMTAwMDEwMCwgMHgwMDAxMDEwMCwgMHgwMTAxMDEwMCwKKyAgICAweDAwMDAwMDAxLCAweDAxMDAwMDAxLCAweDAwMDEwMDAxLCAweDAxMDEwMDAxLAorICAgIDB4MDAwMDAxMDEsIDB4MDEwMDAxMDEsIDB4MDAwMTAxMDEsIDB4MDEwMTAxMDEsCit9OworCisvKgorICogSW5pdGlhbCBQZXJtdXRhdGlvbiBtYWNybworICovCisjZGVmaW5lIERFU19JUChYLFkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUID0gKChYID4+ICA0KSBeIFkpICYgMHgwRjBGMEYwRjsgWSBePSBUOyBYIF49IChUIDw8ICA0KTsgICBcCisgICAgVCA9ICgoWCA+PiAxNikgXiBZKSAmIDB4MDAwMEZGRkY7IFkgXj0gVDsgWCBePSAoVCA8PCAxNik7ICAgXAorICAgIFQgPSAoKFkgPj4gIDIpIF4gWCkgJiAweDMzMzMzMzMzOyBYIF49IFQ7IFkgXj0gKFQgPDwgIDIpOyAgIFwKKyAgICBUID0gKChZID4+ICA4KSBeIFgpICYgMHgwMEZGMDBGRjsgWCBePSBUOyBZIF49IChUIDw8ICA4KTsgICBcCisgICAgWSA9ICgoWSA8PCAxKSB8IChZID4+IDMxKSkgJiAweEZGRkZGRkZGOyAgICAgICAgICAgICAgICAgICAgXAorICAgIFQgPSAoWCBeIFkpICYgMHhBQUFBQUFBQTsgWSBePSBUOyBYIF49IFQ7ICAgICAgICAgICAgICAgICAgIFwKKyAgICBYID0gKChYIDw8IDEpIHwgKFggPj4gMzEpKSAmIDB4RkZGRkZGRkY7ICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8qCisgKiBGaW5hbCBQZXJtdXRhdGlvbiBtYWNybworICovCisjZGVmaW5lIERFU19GUChYLFkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBYID0gKChYIDw8IDMxKSB8IChYID4+IDEpKSAmIDB4RkZGRkZGRkY7ICAgICAgICAgICAgICAgICAgICBcCisgICAgVCA9IChYIF4gWSkgJiAweEFBQUFBQUFBOyBYIF49IFQ7IFkgXj0gVDsgICAgICAgICAgICAgICAgICAgXAorICAgIFkgPSAoKFkgPDwgMzEpIHwgKFkgPj4gMSkpICYgMHhGRkZGRkZGRjsgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUID0gKChZID4+ICA4KSBeIFgpICYgMHgwMEZGMDBGRjsgWCBePSBUOyBZIF49IChUIDw8ICA4KTsgICBcCisgICAgVCA9ICgoWSA+PiAgMikgXiBYKSAmIDB4MzMzMzMzMzM7IFggXj0gVDsgWSBePSAoVCA8PCAgMik7ICAgXAorICAgIFQgPSAoKFggPj4gMTYpIF4gWSkgJiAweDAwMDBGRkZGOyBZIF49IFQ7IFggXj0gKFQgPDwgMTYpOyAgIFwKKyAgICBUID0gKChYID4+ICA0KSBeIFkpICYgMHgwRjBGMEYwRjsgWSBePSBUOyBYIF49IChUIDw8ICA0KTsgICBcCit9CisKKy8qCisgKiBERVMgcm91bmQgbWFjcm8KKyAqLworI2RlZmluZSBERVNfUk9VTkQoWCxZKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFQgPSAqU0srKyBeIFg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFkgXj0gU0I4WyAoVCAgICAgICkgJiAweDNGIF0gXiAgICAgICAgICAgICAgXAorICAgICAgICAgU0I2WyAoVCA+PiAgOCkgJiAweDNGIF0gXiAgICAgICAgICAgICAgXAorICAgICAgICAgU0I0WyAoVCA+PiAxNikgJiAweDNGIF0gXiAgICAgICAgICAgICAgXAorICAgICAgICAgU0IyWyAoVCA+PiAyNCkgJiAweDNGIF07ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFQgPSAqU0srKyBeICgoWCA8PCAyOCkgfCAoWCA+PiA0KSk7ICAgICAgICAgXAorICAgIFkgXj0gU0I3WyAoVCAgICAgICkgJiAweDNGIF0gXiAgICAgICAgICAgICAgXAorICAgICAgICAgU0I1WyAoVCA+PiAgOCkgJiAweDNGIF0gXiAgICAgICAgICAgICAgXAorICAgICAgICAgU0IzWyAoVCA+PiAxNikgJiAweDNGIF0gXiAgICAgICAgICAgICAgXAorICAgICAgICAgU0IxWyAoVCA+PiAyNCkgJiAweDNGIF07ICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFNXQVAoYSxiKSB7IHVpbnQzMl90IHQgPSBhOyBhID0gYjsgYiA9IHQ7IHQgPSAwOyB9CisKK3ZvaWQgbWJlZHRsc19kZXNfaW5pdCggbWJlZHRsc19kZXNfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX2Rlc19jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX2Rlc19mcmVlKCBtYmVkdGxzX2Rlc19jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfZGVzX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfZGVzM19pbml0KCBtYmVkdGxzX2RlczNfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX2RlczNfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19kZXMzX2ZyZWUoIG1iZWR0bHNfZGVzM19jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfZGVzM19jb250ZXh0ICkgKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb2RkX3Bhcml0eV90YWJsZVsxMjhdID0geyAxLCAgMiwgIDQsICA3LCAgOCwKKyAgICAgICAgMTEsIDEzLCAxNCwgMTYsIDE5LCAyMSwgMjIsIDI1LCAyNiwgMjgsIDMxLCAzMiwgMzUsIDM3LCAzOCwgNDEsIDQyLCA0NCwKKyAgICAgICAgNDcsIDQ5LCA1MCwgNTIsIDU1LCA1NiwgNTksIDYxLCA2MiwgNjQsIDY3LCA2OSwgNzAsIDczLCA3NCwgNzYsIDc5LCA4MSwKKyAgICAgICAgODIsIDg0LCA4NywgODgsIDkxLCA5MywgOTQsIDk3LCA5OCwgMTAwLCAxMDMsIDEwNCwgMTA3LCAxMDksIDExMCwgMTEyLAorICAgICAgICAxMTUsIDExNywgMTE4LCAxMjEsIDEyMiwgMTI0LCAxMjcsIDEyOCwgMTMxLCAxMzMsIDEzNCwgMTM3LCAxMzgsIDE0MCwKKyAgICAgICAgMTQzLCAxNDUsIDE0NiwgMTQ4LCAxNTEsIDE1MiwgMTU1LCAxNTcsIDE1OCwgMTYxLCAxNjIsIDE2NCwgMTY3LCAxNjgsCisgICAgICAgIDE3MSwgMTczLCAxNzQsIDE3NiwgMTc5LCAxODEsIDE4MiwgMTg1LCAxODYsIDE4OCwgMTkxLCAxOTMsIDE5NCwgMTk2LAorICAgICAgICAxOTksIDIwMCwgMjAzLCAyMDUsIDIwNiwgMjA4LCAyMTEsIDIxMywgMjE0LCAyMTcsIDIxOCwgMjIwLCAyMjMsIDIyNCwKKyAgICAgICAgMjI3LCAyMjksIDIzMCwgMjMzLCAyMzQsIDIzNiwgMjM5LCAyNDEsIDI0MiwgMjQ0LCAyNDcsIDI0OCwgMjUxLCAyNTMsCisgICAgICAgIDI1NCB9OworCit2b2lkIG1iZWR0bHNfZGVzX2tleV9zZXRfcGFyaXR5KCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRV0gKQoreworICAgIGludCBpOworCisgICAgZm9yKCBpID0gMDsgaSA8IE1CRURUTFNfREVTX0tFWV9TSVpFOyBpKysgKQorICAgICAgICBrZXlbaV0gPSBvZGRfcGFyaXR5X3RhYmxlW2tleVtpXSAvIDJdOworfQorCisvKgorICogQ2hlY2sgdGhlIGdpdmVuIGtleSdzIHBhcml0eSwgcmV0dXJucyAxIG9uIGZhaWx1cmUsIDAgb24gU1VDQ0VTUworICovCitpbnQgbWJlZHRsc19kZXNfa2V5X2NoZWNrX2tleV9wYXJpdHkoIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFXSApCit7CisgICAgaW50IGk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgTUJFRFRMU19ERVNfS0VZX1NJWkU7IGkrKyApCisgICAgICAgIGlmKCBrZXlbaV0gIT0gb2RkX3Bhcml0eV90YWJsZVtrZXlbaV0gLyAyXSApCisgICAgICAgICAgICByZXR1cm4oIDEgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogVGFibGUgb2Ygd2VhayBhbmQgc2VtaS13ZWFrIGtleXMKKyAqCisgKiBTb3VyY2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2Vha19rZXkKKyAqCisgKiBXZWFrOgorICogQWx0ZXJuYXRpbmcgb25lcyArIHplcm9zICgweDAxMDEwMTAxMDEwMTAxMDEpCisgKiBBbHRlcm5hdGluZyAnRicgKyAnRScgKDB4RkVGRUZFRkVGRUZFRkVGRSkKKyAqICcweEUwRTBFMEUwRjFGMUYxRjEnCisgKiAnMHgxRjFGMUYxRjBFMEUwRTBFJworICoKKyAqIFNlbWktd2VhazoKKyAqIDB4MDExRjAxMUYwMTBFMDEwRSBhbmQgMHgxRjAxMUYwMTBFMDEwRTAxCisgKiAweDAxRTAwMUUwMDFGMTAxRjEgYW5kIDB4RTAwMUUwMDFGMTAxRjEwMQorICogMHgwMUZFMDFGRTAxRkUwMUZFIGFuZCAweEZFMDFGRTAxRkUwMUZFMDEKKyAqIDB4MUZFMDFGRTAwRUYxMEVGMSBhbmQgMHhFMDFGRTAxRkYxMEVGMTBFCisgKiAweDFGRkUxRkZFMEVGRTBFRkUgYW5kIDB4RkUxRkZFMUZGRTBFRkUwRQorICogMHhFMEZFRTBGRUYxRkVGMUZFIGFuZCAweEZFRTBGRUUwRkVGMUZFRjEKKyAqCisgKi8KKworI2RlZmluZSBXRUFLX0tFWV9DT1VOVCAxNgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB3ZWFrX2tleV90YWJsZVtXRUFLX0tFWV9DT1VOVF1bTUJFRFRMU19ERVNfS0VZX1NJWkVdID0KK3sKKyAgICB7IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEgfSwKKyAgICB7IDB4RkUsIDB4RkUsIDB4RkUsIDB4RkUsIDB4RkUsIDB4RkUsIDB4RkUsIDB4RkUgfSwKKyAgICB7IDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MEUsIDB4MEUsIDB4MEUsIDB4MEUgfSwKKyAgICB7IDB4RTAsIDB4RTAsIDB4RTAsIDB4RTAsIDB4RjEsIDB4RjEsIDB4RjEsIDB4RjEgfSwKKworICAgIHsgMHgwMSwgMHgxRiwgMHgwMSwgMHgxRiwgMHgwMSwgMHgwRSwgMHgwMSwgMHgwRSB9LAorICAgIHsgMHgxRiwgMHgwMSwgMHgxRiwgMHgwMSwgMHgwRSwgMHgwMSwgMHgwRSwgMHgwMSB9LAorICAgIHsgMHgwMSwgMHhFMCwgMHgwMSwgMHhFMCwgMHgwMSwgMHhGMSwgMHgwMSwgMHhGMSB9LAorICAgIHsgMHhFMCwgMHgwMSwgMHhFMCwgMHgwMSwgMHhGMSwgMHgwMSwgMHhGMSwgMHgwMSB9LAorICAgIHsgMHgwMSwgMHhGRSwgMHgwMSwgMHhGRSwgMHgwMSwgMHhGRSwgMHgwMSwgMHhGRSB9LAorICAgIHsgMHhGRSwgMHgwMSwgMHhGRSwgMHgwMSwgMHhGRSwgMHgwMSwgMHhGRSwgMHgwMSB9LAorICAgIHsgMHgxRiwgMHhFMCwgMHgxRiwgMHhFMCwgMHgwRSwgMHhGMSwgMHgwRSwgMHhGMSB9LAorICAgIHsgMHhFMCwgMHgxRiwgMHhFMCwgMHgxRiwgMHhGMSwgMHgwRSwgMHhGMSwgMHgwRSB9LAorICAgIHsgMHgxRiwgMHhGRSwgMHgxRiwgMHhGRSwgMHgwRSwgMHhGRSwgMHgwRSwgMHhGRSB9LAorICAgIHsgMHhGRSwgMHgxRiwgMHhGRSwgMHgxRiwgMHhGRSwgMHgwRSwgMHhGRSwgMHgwRSB9LAorICAgIHsgMHhFMCwgMHhGRSwgMHhFMCwgMHhGRSwgMHhGMSwgMHhGRSwgMHhGMSwgMHhGRSB9LAorICAgIHsgMHhGRSwgMHhFMCwgMHhGRSwgMHhFMCwgMHhGRSwgMHhGMSwgMHhGRSwgMHhGMSB9Cit9OworCitpbnQgbWJlZHRsc19kZXNfa2V5X2NoZWNrX3dlYWsoIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFXSApCit7CisgICAgaW50IGk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgV0VBS19LRVlfQ09VTlQ7IGkrKyApCisgICAgICAgIGlmKCBtZW1jbXAoIHdlYWtfa2V5X3RhYmxlW2ldLCBrZXksIE1CRURUTFNfREVTX0tFWV9TSVpFKSA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiggMSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0RFU19TRVRLRVlfQUxUKQordm9pZCBtYmVkdGxzX2Rlc19zZXRrZXkoIHVpbnQzMl90IFNLWzMyXSwgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkVdICkKK3sKKyAgICBpbnQgaTsKKyAgICB1aW50MzJfdCBYLCBZLCBUOworCisgICAgR0VUX1VJTlQzMl9CRSggWCwga2V5LCAwICk7CisgICAgR0VUX1VJTlQzMl9CRSggWSwga2V5LCA0ICk7CisKKyAgICAvKgorICAgICAqIFBlcm11dGVkIENob2ljZSAxCisgICAgICovCisgICAgVCA9ICAoKFkgPj4gIDQpIF4gWCkgJiAweDBGMEYwRjBGOyAgWCBePSBUOyBZIF49IChUIDw8ICA0KTsKKyAgICBUID0gICgoWSAgICAgICkgXiBYKSAmIDB4MTAxMDEwMTA7ICBYIF49IFQ7IFkgXj0gKFQgICAgICApOworCisgICAgWCA9ICAgKExIc1sgKFggICAgICApICYgMHhGXSA8PCAzKSB8IChMSHNbIChYID4+ICA4KSAmIDB4RiBdIDw8IDIpCisgICAgICAgIHwgKExIc1sgKFggPj4gMTYpICYgMHhGXSA8PCAxKSB8IChMSHNbIChYID4+IDI0KSAmIDB4RiBdICAgICApCisgICAgICAgIHwgKExIc1sgKFggPj4gIDUpICYgMHhGXSA8PCA3KSB8IChMSHNbIChYID4+IDEzKSAmIDB4RiBdIDw8IDYpCisgICAgICAgIHwgKExIc1sgKFggPj4gMjEpICYgMHhGXSA8PCA1KSB8IChMSHNbIChYID4+IDI5KSAmIDB4RiBdIDw8IDQpOworCisgICAgWSA9ICAgKFJIc1sgKFkgPj4gIDEpICYgMHhGXSA8PCAzKSB8IChSSHNbIChZID4+ICA5KSAmIDB4RiBdIDw8IDIpCisgICAgICAgIHwgKFJIc1sgKFkgPj4gMTcpICYgMHhGXSA8PCAxKSB8IChSSHNbIChZID4+IDI1KSAmIDB4RiBdICAgICApCisgICAgICAgIHwgKFJIc1sgKFkgPj4gIDQpICYgMHhGXSA8PCA3KSB8IChSSHNbIChZID4+IDEyKSAmIDB4RiBdIDw8IDYpCisgICAgICAgIHwgKFJIc1sgKFkgPj4gMjApICYgMHhGXSA8PCA1KSB8IChSSHNbIChZID4+IDI4KSAmIDB4RiBdIDw8IDQpOworCisgICAgWCAmPSAweDBGRkZGRkZGOworICAgIFkgJj0gMHgwRkZGRkZGRjsKKworICAgIC8qCisgICAgICogY2FsY3VsYXRlIHN1YmtleXMKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgeworICAgICAgICBpZiggaSA8IDIgfHwgaSA9PSA4IHx8IGkgPT0gMTUgKQorICAgICAgICB7CisgICAgICAgICAgICBYID0gKChYIDw8ICAxKSB8IChYID4+IDI3KSkgJiAweDBGRkZGRkZGOworICAgICAgICAgICAgWSA9ICgoWSA8PCAgMSkgfCAoWSA+PiAyNykpICYgMHgwRkZGRkZGRjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFggPSAoKFggPDwgIDIpIHwgKFggPj4gMjYpKSAmIDB4MEZGRkZGRkY7CisgICAgICAgICAgICBZID0gKChZIDw8ICAyKSB8IChZID4+IDI2KSkgJiAweDBGRkZGRkZGOworICAgICAgICB9CisKKyAgICAgICAgKlNLKysgPSAgICgoWCA8PCAgNCkgJiAweDI0MDAwMDAwKSB8ICgoWCA8PCAyOCkgJiAweDEwMDAwMDAwKQorICAgICAgICAgICAgICAgIHwgKChYIDw8IDE0KSAmIDB4MDgwMDAwMDApIHwgKChYIDw8IDE4KSAmIDB4MDIwODAwMDApCisgICAgICAgICAgICAgICAgfCAoKFggPDwgIDYpICYgMHgwMTAwMDAwMCkgfCAoKFggPDwgIDkpICYgMHgwMDIwMDAwMCkKKyAgICAgICAgICAgICAgICB8ICgoWCA+PiAgMSkgJiAweDAwMTAwMDAwKSB8ICgoWCA8PCAxMCkgJiAweDAwMDQwMDAwKQorICAgICAgICAgICAgICAgIHwgKChYIDw8ICAyKSAmIDB4MDAwMjAwMDApIHwgKChYID4+IDEwKSAmIDB4MDAwMTAwMDApCisgICAgICAgICAgICAgICAgfCAoKFkgPj4gMTMpICYgMHgwMDAwMjAwMCkgfCAoKFkgPj4gIDQpICYgMHgwMDAwMTAwMCkKKyAgICAgICAgICAgICAgICB8ICgoWSA8PCAgNikgJiAweDAwMDAwODAwKSB8ICgoWSA+PiAgMSkgJiAweDAwMDAwNDAwKQorICAgICAgICAgICAgICAgIHwgKChZID4+IDE0KSAmIDB4MDAwMDAyMDApIHwgKChZICAgICAgKSAmIDB4MDAwMDAxMDApCisgICAgICAgICAgICAgICAgfCAoKFkgPj4gIDUpICYgMHgwMDAwMDAyMCkgfCAoKFkgPj4gMTApICYgMHgwMDAwMDAxMCkKKyAgICAgICAgICAgICAgICB8ICgoWSA+PiAgMykgJiAweDAwMDAwMDA4KSB8ICgoWSA+PiAxOCkgJiAweDAwMDAwMDA0KQorICAgICAgICAgICAgICAgIHwgKChZID4+IDI2KSAmIDB4MDAwMDAwMDIpIHwgKChZID4+IDI0KSAmIDB4MDAwMDAwMDEpOworCisgICAgICAgICpTSysrID0gICAoKFggPDwgMTUpICYgMHgyMDAwMDAwMCkgfCAoKFggPDwgMTcpICYgMHgxMDAwMDAwMCkKKyAgICAgICAgICAgICAgICB8ICgoWCA8PCAxMCkgJiAweDA4MDAwMDAwKSB8ICgoWCA8PCAyMikgJiAweDA0MDAwMDAwKQorICAgICAgICAgICAgICAgIHwgKChYID4+ICAyKSAmIDB4MDIwMDAwMDApIHwgKChYIDw8ICAxKSAmIDB4MDEwMDAwMDApCisgICAgICAgICAgICAgICAgfCAoKFggPDwgMTYpICYgMHgwMDIwMDAwMCkgfCAoKFggPDwgMTEpICYgMHgwMDEwMDAwMCkKKyAgICAgICAgICAgICAgICB8ICgoWCA8PCAgMykgJiAweDAwMDgwMDAwKSB8ICgoWCA+PiAgNikgJiAweDAwMDQwMDAwKQorICAgICAgICAgICAgICAgIHwgKChYIDw8IDE1KSAmIDB4MDAwMjAwMDApIHwgKChYID4+ICA0KSAmIDB4MDAwMTAwMDApCisgICAgICAgICAgICAgICAgfCAoKFkgPj4gIDIpICYgMHgwMDAwMjAwMCkgfCAoKFkgPDwgIDgpICYgMHgwMDAwMTAwMCkKKyAgICAgICAgICAgICAgICB8ICgoWSA+PiAxNCkgJiAweDAwMDAwODA4KSB8ICgoWSA+PiAgOSkgJiAweDAwMDAwNDAwKQorICAgICAgICAgICAgICAgIHwgKChZICAgICAgKSAmIDB4MDAwMDAyMDApIHwgKChZIDw8ICA3KSAmIDB4MDAwMDAxMDApCisgICAgICAgICAgICAgICAgfCAoKFkgPj4gIDcpICYgMHgwMDAwMDAyMCkgfCAoKFkgPj4gIDMpICYgMHgwMDAwMDAxMSkKKyAgICAgICAgICAgICAgICB8ICgoWSA8PCAgMikgJiAweDAwMDAwMDA0KSB8ICgoWSA+PiAyMSkgJiAweDAwMDAwMDAyKTsKKyAgICB9Cit9CisjZW5kaWYgLyogIU1CRURUTFNfREVTX1NFVEtFWV9BTFQgKi8KKworLyoKKyAqIERFUyBrZXkgc2NoZWR1bGUgKDU2LWJpdCwgZW5jcnlwdGlvbikKKyAqLworaW50IG1iZWR0bHNfZGVzX3NldGtleV9lbmMoIG1iZWR0bHNfZGVzX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkVdICkKK3sKKyAgICBtYmVkdGxzX2Rlc19zZXRrZXkoIGN0eC0+c2ssIGtleSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBERVMga2V5IHNjaGVkdWxlICg1Ni1iaXQsIGRlY3J5cHRpb24pCisgKi8KK2ludCBtYmVkdGxzX2Rlc19zZXRrZXlfZGVjKCBtYmVkdGxzX2Rlc19jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFXSApCit7CisgICAgaW50IGk7CisKKyAgICBtYmVkdGxzX2Rlc19zZXRrZXkoIGN0eC0+c2ssIGtleSApOworCisgICAgZm9yKCBpID0gMDsgaSA8IDE2OyBpICs9IDIgKQorICAgIHsKKyAgICAgICAgU1dBUCggY3R4LT5za1tpICAgIF0sIGN0eC0+c2tbMzAgLSBpXSApOworICAgICAgICBTV0FQKCBjdHgtPnNrW2kgKyAxXSwgY3R4LT5za1szMSAtIGldICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyB2b2lkIGRlczNfc2V0MmtleSggdWludDMyX3QgZXNrWzk2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHNrWzk2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkUqMl0gKQoreworICAgIGludCBpOworCisgICAgbWJlZHRsc19kZXNfc2V0a2V5KCBlc2ssIGtleSApOworICAgIG1iZWR0bHNfZGVzX3NldGtleSggZHNrICsgMzIsIGtleSArIDggKTsKKworICAgIGZvciggaSA9IDA7IGkgPCAzMjsgaSArPSAyICkKKyAgICB7CisgICAgICAgIGRza1tpICAgICBdID0gZXNrWzMwIC0gaV07CisgICAgICAgIGRza1tpICsgIDFdID0gZXNrWzMxIC0gaV07CisKKyAgICAgICAgZXNrW2kgKyAzMl0gPSBkc2tbNjIgLSBpXTsKKyAgICAgICAgZXNrW2kgKyAzM10gPSBkc2tbNjMgLSBpXTsKKworICAgICAgICBlc2tbaSArIDY0XSA9IGVza1tpICAgIF07CisgICAgICAgIGVza1tpICsgNjVdID0gZXNrW2kgKyAxXTsKKworICAgICAgICBkc2tbaSArIDY0XSA9IGRza1tpICAgIF07CisgICAgICAgIGRza1tpICsgNjVdID0gZHNrW2kgKyAxXTsKKyAgICB9Cit9CisKKy8qCisgKiBUcmlwbGUtREVTIGtleSBzY2hlZHVsZSAoMTEyLWJpdCwgZW5jcnlwdGlvbikKKyAqLworaW50IG1iZWR0bHNfZGVzM19zZXQya2V5X2VuYyggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRSAqIDJdICkKK3sKKyAgICB1aW50MzJfdCBza1s5Nl07CisKKyAgICBkZXMzX3NldDJrZXkoIGN0eC0+c2ssIHNrLCBrZXkgKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIHNrLCAgc2l6ZW9mKCBzayApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFRyaXBsZS1ERVMga2V5IHNjaGVkdWxlICgxMTItYml0LCBkZWNyeXB0aW9uKQorICovCitpbnQgbWJlZHRsc19kZXMzX3NldDJrZXlfZGVjKCBtYmVkdGxzX2RlczNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFICogMl0gKQoreworICAgIHVpbnQzMl90IHNrWzk2XTsKKworICAgIGRlczNfc2V0MmtleSggc2ssIGN0eC0+c2ssIGtleSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggc2ssICBzaXplb2YoIHNrICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgdm9pZCBkZXMzX3NldDNrZXkoIHVpbnQzMl90IGVza1s5Nl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRza1s5Nl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzI0XSApCit7CisgICAgaW50IGk7CisKKyAgICBtYmVkdGxzX2Rlc19zZXRrZXkoIGVzaywga2V5ICk7CisgICAgbWJlZHRsc19kZXNfc2V0a2V5KCBkc2sgKyAzMiwga2V5ICsgIDggKTsKKyAgICBtYmVkdGxzX2Rlc19zZXRrZXkoIGVzayArIDY0LCBrZXkgKyAxNiApOworCisgICAgZm9yKCBpID0gMDsgaSA8IDMyOyBpICs9IDIgKQorICAgIHsKKyAgICAgICAgZHNrW2kgICAgIF0gPSBlc2tbOTQgLSBpXTsKKyAgICAgICAgZHNrW2kgKyAgMV0gPSBlc2tbOTUgLSBpXTsKKworICAgICAgICBlc2tbaSArIDMyXSA9IGRza1s2MiAtIGldOworICAgICAgICBlc2tbaSArIDMzXSA9IGRza1s2MyAtIGldOworCisgICAgICAgIGRza1tpICsgNjRdID0gZXNrWzMwIC0gaV07CisgICAgICAgIGRza1tpICsgNjVdID0gZXNrWzMxIC0gaV07CisgICAgfQorfQorCisvKgorICogVHJpcGxlLURFUyBrZXkgc2NoZWR1bGUgKDE2OC1iaXQsIGVuY3J5cHRpb24pCisgKi8KK2ludCBtYmVkdGxzX2RlczNfc2V0M2tleV9lbmMoIG1iZWR0bHNfZGVzM19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkUgKiAzXSApCit7CisgICAgdWludDMyX3Qgc2tbOTZdOworCisgICAgZGVzM19zZXQza2V5KCBjdHgtPnNrLCBzaywga2V5ICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBzaywgIHNpemVvZiggc2sgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBUcmlwbGUtREVTIGtleSBzY2hlZHVsZSAoMTY4LWJpdCwgZGVjcnlwdGlvbikKKyAqLworaW50IG1iZWR0bHNfZGVzM19zZXQza2V5X2RlYyggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRSAqIDNdICkKK3sKKyAgICB1aW50MzJfdCBza1s5Nl07CisKKyAgICBkZXMzX3NldDNrZXkoIHNrLCBjdHgtPnNrLCBrZXkgKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIHNrLCAgc2l6ZW9mKCBzayApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIERFUy1FQ0IgYmxvY2sgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KKyNpZiAhZGVmaW5lZChNQkVEVExTX0RFU19DUllQVF9FQ0JfQUxUKQoraW50IG1iZWR0bHNfZGVzX2NyeXB0X2VjYiggbWJlZHRsc19kZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzhdLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs4XSApCit7CisgICAgaW50IGk7CisgICAgdWludDMyX3QgWCwgWSwgVCwgKlNLOworCisgICAgU0sgPSBjdHgtPnNrOworCisgICAgR0VUX1VJTlQzMl9CRSggWCwgaW5wdXQsIDAgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBZLCBpbnB1dCwgNCApOworCisgICAgREVTX0lQKCBYLCBZICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICB7CisgICAgICAgIERFU19ST1VORCggWSwgWCApOworICAgICAgICBERVNfUk9VTkQoIFgsIFkgKTsKKyAgICB9CisKKyAgICBERVNfRlAoIFksIFggKTsKKworICAgIFBVVF9VSU5UMzJfQkUoIFksIG91dHB1dCwgMCApOworICAgIFBVVF9VSU5UMzJfQkUoIFgsIG91dHB1dCwgNCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogIU1CRURUTFNfREVTX0NSWVBUX0VDQl9BTFQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisvKgorICogREVTLUNCQyBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX2Rlc19jcnlwdF9jYmMoIG1iZWR0bHNfZGVzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbOF0sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCBpOworICAgIHVuc2lnbmVkIGNoYXIgdGVtcFs4XTsKKworICAgIGlmKCBsZW5ndGggJSA4ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ERVNfSU5WQUxJRF9JTlBVVF9MRU5HVEggKTsKKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfREVTX0VOQ1JZUFQgKQorICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICAgICAgICAgICAgICBvdXRwdXRbaV0gPSAodW5zaWduZWQgY2hhcikoIGlucHV0W2ldIF4gaXZbaV0gKTsKKworICAgICAgICAgICAgbWJlZHRsc19kZXNfY3J5cHRfZWNiKCBjdHgsIG91dHB1dCwgb3V0cHV0ICk7CisgICAgICAgICAgICBtZW1jcHkoIGl2LCBvdXRwdXQsIDggKTsKKworICAgICAgICAgICAgaW5wdXQgICs9IDg7CisgICAgICAgICAgICBvdXRwdXQgKz0gODsKKyAgICAgICAgICAgIGxlbmd0aCAtPSA4OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgLyogTUJFRFRMU19ERVNfREVDUllQVCAqLworICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoIHRlbXAsIGlucHV0LCA4ICk7CisgICAgICAgICAgICBtYmVkdGxzX2Rlc19jcnlwdF9lY2IoIGN0eCwgaW5wdXQsIG91dHB1dCApOworCisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICAgICAgICAgICAgICBvdXRwdXRbaV0gPSAodW5zaWduZWQgY2hhcikoIG91dHB1dFtpXSBeIGl2W2ldICk7CisKKyAgICAgICAgICAgIG1lbWNweSggaXYsIHRlbXAsIDggKTsKKworICAgICAgICAgICAgaW5wdXQgICs9IDg7CisgICAgICAgICAgICBvdXRwdXQgKz0gODsKKyAgICAgICAgICAgIGxlbmd0aCAtPSA4OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworLyoKKyAqIDNERVMtRUNCIGJsb2NrIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICovCisjaWYgIWRlZmluZWQoTUJFRFRMU19ERVMzX0NSWVBUX0VDQl9BTFQpCitpbnQgbWJlZHRsc19kZXMzX2NyeXB0X2VjYiggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbOF0sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs4XSApCit7CisgICAgaW50IGk7CisgICAgdWludDMyX3QgWCwgWSwgVCwgKlNLOworCisgICAgU0sgPSBjdHgtPnNrOworCisgICAgR0VUX1VJTlQzMl9CRSggWCwgaW5wdXQsIDAgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBZLCBpbnB1dCwgNCApOworCisgICAgREVTX0lQKCBYLCBZICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICB7CisgICAgICAgIERFU19ST1VORCggWSwgWCApOworICAgICAgICBERVNfUk9VTkQoIFgsIFkgKTsKKyAgICB9CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICB7CisgICAgICAgIERFU19ST1VORCggWCwgWSApOworICAgICAgICBERVNfUk9VTkQoIFksIFggKTsKKyAgICB9CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICB7CisgICAgICAgIERFU19ST1VORCggWSwgWCApOworICAgICAgICBERVNfUk9VTkQoIFgsIFkgKTsKKyAgICB9CisKKyAgICBERVNfRlAoIFksIFggKTsKKworICAgIFBVVF9VSU5UMzJfQkUoIFksIG91dHB1dCwgMCApOworICAgIFBVVF9VSU5UMzJfQkUoIFgsIG91dHB1dCwgNCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogIU1CRURUTFNfREVTM19DUllQVF9FQ0JfQUxUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorLyoKKyAqIDNERVMtQ0JDIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfZGVzM19jcnlwdF9jYmMoIG1iZWR0bHNfZGVzM19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzhdLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCBpOworICAgIHVuc2lnbmVkIGNoYXIgdGVtcFs4XTsKKworICAgIGlmKCBsZW5ndGggJSA4ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ERVNfSU5WQUxJRF9JTlBVVF9MRU5HVEggKTsKKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfREVTX0VOQ1JZUFQgKQorICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICAgICAgICAgICAgICBvdXRwdXRbaV0gPSAodW5zaWduZWQgY2hhcikoIGlucHV0W2ldIF4gaXZbaV0gKTsKKworICAgICAgICAgICAgbWJlZHRsc19kZXMzX2NyeXB0X2VjYiggY3R4LCBvdXRwdXQsIG91dHB1dCApOworICAgICAgICAgICAgbWVtY3B5KCBpdiwgb3V0cHV0LCA4ICk7CisKKyAgICAgICAgICAgIGlucHV0ICArPSA4OworICAgICAgICAgICAgb3V0cHV0ICs9IDg7CisgICAgICAgICAgICBsZW5ndGggLT0gODsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIC8qIE1CRURUTFNfREVTX0RFQ1JZUFQgKi8KKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGggPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KCB0ZW1wLCBpbnB1dCwgOCApOworICAgICAgICAgICAgbWJlZHRsc19kZXMzX2NyeXB0X2VjYiggY3R4LCBpbnB1dCwgb3V0cHV0ICk7CisKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSggb3V0cHV0W2ldIF4gaXZbaV0gKTsKKworICAgICAgICAgICAgbWVtY3B5KCBpdiwgdGVtcCwgOCApOworCisgICAgICAgICAgICBpbnB1dCAgKz0gODsKKyAgICAgICAgICAgIG91dHB1dCArPSA4OworICAgICAgICAgICAgbGVuZ3RoIC09IDg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjZW5kaWYgLyogIU1CRURUTFNfREVTX0FMVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKy8qCisgKiBERVMgYW5kIDNERVMgdGVzdCB2ZWN0b3JzIGZyb206CisgKgorICogaHR0cDovL2NzcmMubmlzdC5nb3YvZ3JvdXBzL1NUTS9jYXZwL2RvY3VtZW50cy9kZXMvdHJpcGxlZGVzLXZlY3RvcnMuemlwCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRlczNfdGVzdF9rZXlzWzI0XSA9Cit7CisgICAgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhBQiwgMHhDRCwgMHhFRiwKKyAgICAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGLCAweDAxLAorICAgIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYsIDB4MDEsIDB4MjMKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRlczNfdGVzdF9idWZbOF0gPQoreworICAgIDB4NEUsIDB4NkYsIDB4NzcsIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsIDB4NzQKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRlczNfdGVzdF9lY2JfZGVjWzNdWzhdID0KK3sKKyAgICB7IDB4Q0QsIDB4RDYsIDB4NEYsIDB4MkYsIDB4OTQsIDB4MjcsIDB4QzEsIDB4NUQgfSwKKyAgICB7IDB4NjksIDB4OTYsIDB4QzgsIDB4RkEsIDB4NDcsIDB4QTIsIDB4QUIsIDB4RUIgfSwKKyAgICB7IDB4ODMsIDB4MjUsIDB4MzksIDB4NzYsIDB4NDQsIDB4MDksIDB4MUEsIDB4MEEgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzM190ZXN0X2VjYl9lbmNbM11bOF0gPQoreworICAgIHsgMHg2QSwgMHgyQSwgMHgxOSwgMHhGNCwgMHgxRSwgMHhDQSwgMHg4NSwgMHg0QiB9LAorICAgIHsgMHgwMywgMHhFNiwgMHg5RiwgMHg1QiwgMHhGQSwgMHg1OCwgMHhFQiwgMHg0MiB9LAorICAgIHsgMHhERCwgMHgxNywgMHhFOCwgMHhCOCwgMHhCNCwgMHgzNywgMHhEMiwgMHgzMiB9Cit9OworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRlczNfdGVzdF9pdls4XSA9Cit7CisgICAgMHgxMiwgMHgzNCwgMHg1NiwgMHg3OCwgMHg5MCwgMHhBQiwgMHhDRCwgMHhFRiwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRlczNfdGVzdF9jYmNfZGVjWzNdWzhdID0KK3sKKyAgICB7IDB4MTIsIDB4OUYsIDB4NDAsIDB4QjksIDB4RDIsIDB4MDAsIDB4NTYsIDB4QjMgfSwKKyAgICB7IDB4NDcsIDB4MEUsIDB4RkMsIDB4OUEsIDB4NkIsIDB4OEUsIDB4RTMsIDB4OTMgfSwKKyAgICB7IDB4QzUsIDB4Q0UsIDB4Q0YsIDB4NjMsIDB4RUMsIDB4RUMsIDB4NTEsIDB4NEMgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzM190ZXN0X2NiY19lbmNbM11bOF0gPQoreworICAgIHsgMHg1NCwgMHhGMSwgMHg1QSwgMHhGNiwgMHhFQiwgMHhFMywgMHhBNCwgMHhCNCB9LAorICAgIHsgMHgzNSwgMHg3NiwgMHgxMSwgMHg1NiwgMHg1RiwgMHhBMSwgMHg4RSwgMHg0RCB9LAorICAgIHsgMHhDQiwgMHgxOSwgMHgxRiwgMHg4NSwgMHhEMSwgMHhFRCwgMHg4NCwgMHgzOSB9Cit9OworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfZGVzX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCBpLCBqLCB1LCB2LCByZXQgPSAwOworICAgIG1iZWR0bHNfZGVzX2NvbnRleHQgY3R4OworICAgIG1iZWR0bHNfZGVzM19jb250ZXh0IGN0eDM7CisgICAgdW5zaWduZWQgY2hhciBidWZbOF07CisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB1bnNpZ25lZCBjaGFyIHBydls4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2WzhdOworI2VuZGlmCisKKyAgICBtYmVkdGxzX2Rlc19pbml0KCAmY3R4ICk7CisgICAgbWJlZHRsc19kZXMzX2luaXQoICZjdHgzICk7CisgICAgLyoKKyAgICAgKiBFQ0IgbW9kZQorICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCA2OyBpKysgKQorICAgIHsKKyAgICAgICAgdSA9IGkgPj4gMTsKKyAgICAgICAgdiA9IGkgICYgMTsKKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBERVMlYy1FQ0ItJTNkICglcyk6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdSA9PSAwICkgPyAnICcgOiAnMycsIDU2ICsgdSAqIDU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHYgPT0gTUJFRFRMU19ERVNfREVDUllQVCApID8gImRlYyIgOiAiZW5jIiApOworCisgICAgICAgIG1lbWNweSggYnVmLCBkZXMzX3Rlc3RfYnVmLCA4ICk7CisKKyAgICAgICAgc3dpdGNoKCBpICkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBtYmVkdGxzX2Rlc19zZXRrZXlfZGVjKCAmY3R4LCBkZXMzX3Rlc3Rfa2V5cyApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbWJlZHRsc19kZXNfc2V0a2V5X2VuYyggJmN0eCwgZGVzM190ZXN0X2tleXMgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1iZWR0bHNfZGVzM19zZXQya2V5X2RlYyggJmN0eDMsIGRlczNfdGVzdF9rZXlzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBtYmVkdGxzX2RlczNfc2V0MmtleV9lbmMoICZjdHgzLCBkZXMzX3Rlc3Rfa2V5cyApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgbWJlZHRsc19kZXMzX3NldDNrZXlfZGVjKCAmY3R4MywgZGVzM190ZXN0X2tleXMgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIG1iZWR0bHNfZGVzM19zZXQza2V5X2VuYyggJmN0eDMsIGRlczNfdGVzdF9rZXlzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKworICAgICAgICBmb3IoIGogPSAwOyBqIDwgMTAwMDA7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB1ID09IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZGVzX2NyeXB0X2VjYiggJmN0eCwgYnVmLCBidWYgKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2RlczNfY3J5cHRfZWNiKCAmY3R4MywgYnVmLCBidWYgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHYgPT0gTUJFRFRMU19ERVNfREVDUllQVCAmJgorICAgICAgICAgICAgICAgIG1lbWNtcCggYnVmLCBkZXMzX3Rlc3RfZWNiX2RlY1t1XSwgOCApICE9IDAgKSB8fAorICAgICAgICAgICAgKCB2ICE9IE1CRURUTFNfREVTX0RFQ1JZUFQgJiYKKyAgICAgICAgICAgICAgICBtZW1jbXAoIGJ1ZiwgZGVzM190ZXN0X2VjYl9lbmNbdV0sIDggKSAhPSAwICkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICAvKgorICAgICAqIENCQyBtb2RlCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IDY7IGkrKyApCisgICAgeworICAgICAgICB1ID0gaSA+PiAxOworICAgICAgICB2ID0gaSAgJiAxOworCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIERFUyVjLUNCQy0lM2QgKCVzKTogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB1ID09IDAgKSA/ICcgJyA6ICczJywgNTYgKyB1ICogNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdiA9PSBNQkVEVExTX0RFU19ERUNSWVBUICkgPyAiZGVjIiA6ICJlbmMiICk7CisKKyAgICAgICAgbWVtY3B5KCBpdiwgIGRlczNfdGVzdF9pdiwgIDggKTsKKyAgICAgICAgbWVtY3B5KCBwcnYsIGRlczNfdGVzdF9pdiwgIDggKTsKKyAgICAgICAgbWVtY3B5KCBidWYsIGRlczNfdGVzdF9idWYsIDggKTsKKworICAgICAgICBzd2l0Y2goIGkgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIG1iZWR0bHNfZGVzX3NldGtleV9kZWMoICZjdHgsIGRlczNfdGVzdF9rZXlzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBtYmVkdGxzX2Rlc19zZXRrZXlfZW5jKCAmY3R4LCBkZXMzX3Rlc3Rfa2V5cyApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbWJlZHRsc19kZXMzX3NldDJrZXlfZGVjKCAmY3R4MywgZGVzM190ZXN0X2tleXMgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1iZWR0bHNfZGVzM19zZXQya2V5X2VuYyggJmN0eDMsIGRlczNfdGVzdF9rZXlzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtYmVkdGxzX2RlczNfc2V0M2tleV9kZWMoICZjdHgzLCBkZXMzX3Rlc3Rfa2V5cyApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgbWJlZHRsc19kZXMzX3NldDNrZXlfZW5jKCAmY3R4MywgZGVzM190ZXN0X2tleXMgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ID09IE1CRURUTFNfREVTX0RFQ1JZUFQgKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgMTAwMDA7IGorKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHUgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZGVzX2NyeXB0X2NiYyggJmN0eCwgdiwgOCwgaXYsIGJ1ZiwgYnVmICk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2RlczNfY3J5cHRfY2JjKCAmY3R4MywgdiwgOCwgaXYsIGJ1ZiwgYnVmICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgMTAwMDA7IGorKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0bXBbOF07CisKKyAgICAgICAgICAgICAgICBpZiggdSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19kZXNfY3J5cHRfY2JjKCAmY3R4LCB2LCA4LCBpdiwgYnVmLCBidWYgKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZGVzM19jcnlwdF9jYmMoICZjdHgzLCB2LCA4LCBpdiwgYnVmLCBidWYgKTsKKworICAgICAgICAgICAgICAgIG1lbWNweSggdG1wLCBwcnYsIDggKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoIHBydiwgYnVmLCA4ICk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCBidWYsIHRtcCwgOCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtZW1jcHkoIGJ1ZiwgcHJ2LCA4ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCB2ID09IE1CRURUTFNfREVTX0RFQ1JZUFQgJiYKKyAgICAgICAgICAgICAgICBtZW1jbXAoIGJ1ZiwgZGVzM190ZXN0X2NiY19kZWNbdV0sIDggKSAhPSAwICkgfHwKKyAgICAgICAgICAgICggdiAhPSBNQkVEVExTX0RFU19ERUNSWVBUICYmCisgICAgICAgICAgICAgICAgbWVtY21wKCBidWYsIGRlczNfdGVzdF9jYmNfZW5jW3VdLCA4ICkgIT0gMCApICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCitleGl0OgorICAgIG1iZWR0bHNfZGVzX2ZyZWUoICZjdHggKTsKKyAgICBtYmVkdGxzX2RlczNfZnJlZSggJmN0eDMgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZGhtLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9kaG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDcxNWQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZGhtLmMKQEAgLTAsMCArMSw2MjcgQEAKKy8qCisgKiAgRGlmZmllLUhlbGxtYW4tTWVya2xlIGtleSBleGNoYW5nZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgZm9sbG93aW5nIHNvdXJjZXMgd2VyZSByZWZlcmVuY2VkIGluIHRoZSBkZXNpZ24gb2YgdGhpcyBpbXBsZW1lbnRhdGlvbgorICogIG9mIHRoZSBEaWZmaWUtSGVsbG1hbi1NZXJrbGUgYWxnb3JpdGhtOgorICoKKyAqICBbMV0gSGFuZGJvb2sgb2YgQXBwbGllZCBDcnlwdG9ncmFwaHkgLSAxOTk3LCBDaGFwdGVyIDEyCisgKiAgICAgIE1lbmV6ZXMsIHZhbiBPb3JzY2hvdCBhbmQgVmFuc3RvbmUKKyAqCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykKKworI2luY2x1ZGUgIm1iZWR0bHMvZGhtLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVNOMV9QQVJTRV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvYXNuMS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZW5kaWYKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIGhlbHBlciB0byB2YWxpZGF0ZSB0aGUgbWJlZHRsc19tcGkgc2l6ZSBhbmQgaW1wb3J0IGl0CisgKi8KK3N0YXRpYyBpbnQgZGhtX3JlYWRfYmlnbnVtKCBtYmVkdGxzX21waSAqWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgKQoreworICAgIGludCByZXQsIG47CisKKyAgICBpZiggZW5kIC0gKnAgPCAyICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG4gPSAoICgqcClbMF0gPDwgOCApIHwgKCpwKVsxXTsKKyAgICAoKnApICs9IDI7CisKKyAgICBpZiggKGludCkoIGVuZCAtICpwICkgPCBuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCBYLCAqcCwgbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX1JFQURfUEFSQU1TX0ZBSUxFRCArIHJldCApOworCisgICAgKCpwKSArPSBuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBWZXJpZnkgc2FuaXR5IG9mIHBhcmFtZXRlciB3aXRoIHJlZ2FyZHMgdG8gUAorICoKKyAqIFBhcmFtZXRlciBzaG91bGQgYmU6IDIgPD0gcHVibGljX3BhcmFtIDw9IFAgLSAyCisgKgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGF0dGFjaywgc2VlOgorICogIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35yamExNC9QYXBlcnMvcHNhbmRxcy5wZGYKKyAqICBodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAwNS0yNjQzCisgKi8KK3N0YXRpYyBpbnQgZGhtX2NoZWNrX3JhbmdlKCBjb25zdCBtYmVkdGxzX21waSAqcGFyYW0sIGNvbnN0IG1iZWR0bHNfbXBpICpQICkKK3sKKyAgICBtYmVkdGxzX21waSBMLCBVOworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9ESE1fQkFEX0lOUFVUX0RBVEE7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmTCApOyBtYmVkdGxzX21waV9pbml0KCAmVSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmTCwgMiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfaW50KCAmVSwgUCwgMiApICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggcGFyYW0sICZMICkgPj0gMCAmJgorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCBwYXJhbSwgJlUgKSA8PSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IDA7CisgICAgfQorCitjbGVhbnVwOgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZMICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZVICk7CisgICAgcmV0dXJuKCByZXQgKTsKK30KKwordm9pZCBtYmVkdGxzX2RobV9pbml0KCBtYmVkdGxzX2RobV9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfZGhtX2NvbnRleHQgKSApOworfQorCisvKgorICogUGFyc2UgdGhlIFNlcnZlcktleUV4Y2hhbmdlIHBhcmFtZXRlcnMKKyAqLworaW50IG1iZWR0bHNfZGhtX3JlYWRfcGFyYW1zKCBtYmVkdGxzX2RobV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IGRobV9yZWFkX2JpZ251bSggJmN0eC0+UCwgIHAsIGVuZCApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IGRobV9yZWFkX2JpZ251bSggJmN0eC0+RywgIHAsIGVuZCApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IGRobV9yZWFkX2JpZ251bSggJmN0eC0+R1ksIHAsIGVuZCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBkaG1fY2hlY2tfcmFuZ2UoICZjdHgtPkdZLCAmY3R4LT5QICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGN0eC0+bGVuID0gbWJlZHRsc19tcGlfc2l6ZSggJmN0eC0+UCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBTZXR1cCBhbmQgd3JpdGUgdGhlIFNlcnZlcktleUV4Y2hhbmdlIHBhcmFtZXRlcnMKKyAqLworaW50IG1iZWR0bHNfZGhtX21ha2VfcGFyYW1zKCBtYmVkdGxzX2RobV9jb250ZXh0ICpjdHgsIGludCB4X3NpemUsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0LCBjb3VudCA9IDA7CisgICAgc2l6ZV90IG4xLCBuMiwgbjM7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmY3R4LT5QLCAwICkgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKgorICAgICAqIEdlbmVyYXRlIFggYXMgbGFyZ2UgYXMgcG9zc2libGUgKCA8IFAgKQorICAgICAqLworICAgIGRvCisgICAgeworICAgICAgICBtYmVkdGxzX21waV9maWxsX3JhbmRvbSggJmN0eC0+WCwgeF9zaXplLCBmX3JuZywgcF9ybmcgKTsKKworICAgICAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX21waSggJmN0eC0+WCwgJmN0eC0+UCApID49IDAgKQorICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmY3R4LT5YLCAxICkgKTsKKworICAgICAgICBpZiggY291bnQrKyA+IDEwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX01BS0VfUEFSQU1TX0ZBSUxFRCApOworICAgIH0KKyAgICB3aGlsZSggZGhtX2NoZWNrX3JhbmdlKCAmY3R4LT5YLCAmY3R4LT5QICkgIT0gMCApOworCisgICAgLyoKKyAgICAgKiBDYWxjdWxhdGUgR1ggPSBHXlggbW9kIFAKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2V4cF9tb2QoICZjdHgtPkdYLCAmY3R4LT5HLCAmY3R4LT5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5QICwgJmN0eC0+UlAgKSApOworCisgICAgaWYoICggcmV0ID0gZGhtX2NoZWNrX3JhbmdlKCAmY3R4LT5HWCwgJmN0eC0+UCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAvKgorICAgICAqIGV4cG9ydCBQLCBHLCBHWAorICAgICAqLworI2RlZmluZSBESE1fTVBJX0VYUE9SVChYLG4pICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCBYLCBwICsgMiwgbiApICk7IFwKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBuID4+IDggKTsgICAgICAgICAgIFwKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBuICAgICAgKTsgcCArPSBuOworCisgICAgbjEgPSBtYmVkdGxzX21waV9zaXplKCAmY3R4LT5QICApOworICAgIG4yID0gbWJlZHRsc19tcGlfc2l6ZSggJmN0eC0+RyAgKTsKKyAgICBuMyA9IG1iZWR0bHNfbXBpX3NpemUoICZjdHgtPkdYICk7CisKKyAgICBwID0gb3V0cHV0OworICAgIERITV9NUElfRVhQT1JUKCAmY3R4LT5QICwgbjEgKTsKKyAgICBESE1fTVBJX0VYUE9SVCggJmN0eC0+RyAsIG4yICk7CisgICAgREhNX01QSV9FWFBPUlQoICZjdHgtPkdYLCBuMyApOworCisgICAgKm9sZW4gID0gcCAtIG91dHB1dDsKKworICAgIGN0eC0+bGVuID0gbjE7CisKK2NsZWFudXA6CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9NQUtFX1BBUkFNU19GQUlMRUQgKyByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogSW1wb3J0IHRoZSBwZWVyJ3MgcHVibGljIHZhbHVlIEdeWQorICovCitpbnQgbWJlZHRsc19kaG1fcmVhZF9wdWJsaWMoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBpbGVuIDwgMSB8fCBpbGVuID4gY3R4LT5sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoICZjdHgtPkdZLCBpbnB1dCwgaWxlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX1JFQURfUFVCTElDX0ZBSUxFRCArIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBDcmVhdGUgb3duIHByaXZhdGUgdmFsdWUgWCBhbmQgZXhwb3J0IEdeWAorICovCitpbnQgbWJlZHRsc19kaG1fbWFrZV9wdWJsaWMoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCwgaW50IHhfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG9sZW4sCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldCwgY291bnQgPSAwOworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IG9sZW4gPCAxIHx8IG9sZW4gPiBjdHgtPmxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJmN0eC0+UCwgMCApID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9CQURfSU5QVVRfREFUQSApOworCisgICAgLyoKKyAgICAgKiBnZW5lcmF0ZSBYIGFuZCBjYWxjdWxhdGUgR1ggPSBHXlggbW9kIFAKKyAgICAgKi8KKyAgICBkbworICAgIHsKKyAgICAgICAgbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oICZjdHgtPlgsIHhfc2l6ZSwgZl9ybmcsIHBfcm5nICk7CisKKyAgICAgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZjdHgtPlgsICZjdHgtPlAgKSA+PSAwICkKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJmN0eC0+WCwgMSApICk7CisKKyAgICAgICAgaWYoIGNvdW50KysgPiAxMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9NQUtFX1BVQkxJQ19GQUlMRUQgKTsKKyAgICB9CisgICAgd2hpbGUoIGRobV9jaGVja19yYW5nZSggJmN0eC0+WCwgJmN0eC0+UCApICE9IDAgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJmN0eC0+R1gsICZjdHgtPkcsICZjdHgtPlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPlAgLCAmY3R4LT5SUCApICk7CisKKyAgICBpZiggKCByZXQgPSBkaG1fY2hlY2tfcmFuZ2UoICZjdHgtPkdYLCAmY3R4LT5QICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmY3R4LT5HWCwgb3V0cHV0LCBvbGVuICkgKTsKKworY2xlYW51cDoKKworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX01BS0VfUFVCTElDX0ZBSUxFRCArIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBVc2UgdGhlIGJsaW5kaW5nIG1ldGhvZCBhbmQgb3B0aW1pc2F0aW9uIHN1Z2dlc3RlZCBpbiBzZWN0aW9uIDEwIG9mOgorICogIEtPQ0hFUiwgUGF1bCBDLiBUaW1pbmcgYXR0YWNrcyBvbiBpbXBsZW1lbnRhdGlvbnMgb2YgRGlmZmllLUhlbGxtYW4sIFJTQSwKKyAqICBEU1MsIGFuZCBvdGhlciBzeXN0ZW1zLiBJbiA6IEFkdmFuY2VzIGluIENyeXB0b2xvZ3ktQ1JZUFRPJzk2LiBTcHJpbmdlcgorICogIEJlcmxpbiBIZWlkZWxiZXJnLCAxOTk2LiBwLiAxMDQtMTEzLgorICovCitzdGF0aWMgaW50IGRobV91cGRhdGVfYmxpbmRpbmcoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldCwgY291bnQ7CisKKyAgICAvKgorICAgICAqIERvbid0IHVzZSBhbnkgYmxpbmRpbmcgdGhlIGZpcnN0IHRpbWUgYSBwYXJ0aWN1bGFyIFggaXMgdXNlZCwKKyAgICAgKiBidXQgcmVtZW1iZXIgaXQgdG8gdXNlIGJsaW5kaW5nIG5leHQgdGltZS4KKyAgICAgKi8KKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJmN0eC0+WCwgJmN0eC0+cFggKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJmN0eC0+cFgsICZjdHgtPlggKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZjdHgtPlZpLCAxICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmY3R4LT5WZiwgMSApICk7CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBPaywgd2UgbmVlZCBibGluZGluZy4gQ2FuIHdlIHJlLXVzZSBleGlzdGluZyB2YWx1ZXM/CisgICAgICogSWYgeWVzLCBqdXN0IHVwZGF0ZSB0aGVtIGJ5IHNxdWFyaW5nIHRoZW0uCisgICAgICovCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZjdHgtPlZpLCAxICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZjdHgtPlZpLCAmY3R4LT5WaSwgJmN0eC0+VmkgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHgtPlZpLCAmY3R4LT5WaSwgJmN0eC0+UCApICk7CisKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmY3R4LT5WZiwgJmN0eC0+VmYsICZjdHgtPlZmICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LT5WZiwgJmN0eC0+VmYsICZjdHgtPlAgKSApOworCisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIC8qCisgICAgICogV2UgbmVlZCB0byBnZW5lcmF0ZSBibGluZGluZyB2YWx1ZXMgZnJvbSBzY3JhdGNoCisgICAgICovCisKKyAgICAvKiBWaSA9IHJhbmRvbSggMiwgUC0xICkgKi8KKyAgICBjb3VudCA9IDA7CisgICAgZG8KKyAgICB7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tKCAmY3R4LT5WaSwgbWJlZHRsc19tcGlfc2l6ZSggJmN0eC0+UCApLCBmX3JuZywgcF9ybmcgKTsKKworICAgICAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX21waSggJmN0eC0+VmksICZjdHgtPlAgKSA+PSAwICkKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJmN0eC0+VmksIDEgKSApOworCisgICAgICAgIGlmKCBjb3VudCsrID4gMTAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUgKTsKKyAgICB9CisgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZjdHgtPlZpLCAxICkgPD0gMCApOworCisgICAgLyogVmYgPSBWaV4tWCBtb2QgUCAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC0+VmYsICZjdHgtPlZpLCAmY3R4LT5QICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2V4cF9tb2QoICZjdHgtPlZmLCAmY3R4LT5WZiwgJmN0eC0+WCwgJmN0eC0+UCwgJmN0eC0+UlAgKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBEZXJpdmUgYW5kIGV4cG9ydCB0aGUgc2hhcmVkIHNlY3JldCAoR15ZKV5YIG1vZCBQCisgKi8KK2ludCBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggbWJlZHRsc19kaG1fY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3Qgb3V0cHV0X3NpemUsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIEdZYjsKKworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBvdXRwdXRfc2l6ZSA8IGN0eC0+bGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIHJldCA9IGRobV9jaGVja19yYW5nZSggJmN0eC0+R1ksICZjdHgtPlAgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJkdZYiApOworCisgICAgLyogQmxpbmQgcGVlcidzIHZhbHVlICovCisgICAgaWYoIGZfcm5nICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBkaG1fdXBkYXRlX2JsaW5kaW5nKCBjdHgsIGZfcm5nLCBwX3JuZyApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJkdZYiwgJmN0eC0+R1ksICZjdHgtPlZpICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmR1liLCAmR1liLCAmY3R4LT5QICkgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZHWWIsICZjdHgtPkdZICkgKTsKKworICAgIC8qIERvIG1vZHVsYXIgZXhwb25lbnRpYXRpb24gKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2V4cF9tb2QoICZjdHgtPkssICZHWWIsICZjdHgtPlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPlAsICZjdHgtPlJQICkgKTsKKworICAgIC8qIFVuYmxpbmQgc2VjcmV0IHZhbHVlICovCisgICAgaWYoIGZfcm5nICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmY3R4LT5LLCAmY3R4LT5LLCAmY3R4LT5WZiApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC0+SywgJmN0eC0+SywgJmN0eC0+UCApICk7CisgICAgfQorCisgICAgKm9sZW4gPSBtYmVkdGxzX21waV9zaXplKCAmY3R4LT5LICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggJmN0eC0+Sywgb3V0cHV0LCAqb2xlbiApICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJkdZYiApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fQ0FMQ19TRUNSRVRfRkFJTEVEICsgcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEZyZWUgdGhlIGNvbXBvbmVudHMgb2YgYSBESE0ga2V5CisgKi8KK3ZvaWQgbWJlZHRsc19kaG1fZnJlZSggbWJlZHRsc19kaG1fY29udGV4dCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5wWCk7IG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPlZmICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPlZpICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+UlAgKTsgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+SyApOyBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5HWSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPkdYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPlggKTsgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+RyApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPlAgKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfZGhtX2NvbnRleHQgKSApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0FTTjFfUEFSU0VfQykKKy8qCisgKiBQYXJzZSBESE0gcGFyYW1ldGVycworICovCitpbnQgbWJlZHRsc19kaG1fcGFyc2VfZGhtKCBtYmVkdGxzX2RobV9jb250ZXh0ICpkaG0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRobWluLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBkaG1pbmxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnAsICplbmQ7CisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorICAgIG1iZWR0bHNfcGVtX2NvbnRleHQgcGVtOworCisgICAgbWJlZHRsc19wZW1faW5pdCggJnBlbSApOworCisgICAgLyogQXZvaWQgY2FsbGluZyBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlcigpIG9uIG5vbi1udWxsLXRlcm1pbmF0ZWQgc3RyaW5nICovCisgICAgaWYoIGRobWlubGVuID09IDAgfHwgZGhtaW5bZGhtaW5sZW4gLSAxXSAhPSAnXDAnICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVDsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCAmcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLUJFR0lOIERIIFBBUkFNRVRFUlMtLS0tLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tRU5EIERIIFBBUkFNRVRFUlMtLS0tLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhtaW4sIE5VTEwsIDAsICZkaG1pbmxlbiApOworCisgICAgaWYoIHJldCA9PSAwICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFdhcyBQRU0gZW5jb2RlZAorICAgICAgICAgKi8KKyAgICAgICAgZGhtaW5sZW4gPSBwZW0uYnVmbGVuOworICAgIH0KKyAgICBlbHNlIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIHAgPSAoIHJldCA9PSAwICkgPyBwZW0uYnVmIDogKHVuc2lnbmVkIGNoYXIgKikgZGhtaW47CisjZWxzZQorICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSBkaG1pbjsKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9QQVJTRV9DICovCisgICAgZW5kID0gcCArIGRobWlubGVuOworCisgICAgLyoKKyAgICAgKiAgREhQYXJhbXMgOjo9IFNFUVVFTkNFIHsKKyAgICAgKiAgICAgIHByaW1lICAgICAgICAgICAgICBJTlRFR0VSLCAgLS0gUAorICAgICAqICAgICAgZ2VuZXJhdG9yICAgICAgICAgIElOVEVHRVIsICAtLSBnCisgICAgICogICAgICBwcml2YXRlVmFsdWVMZW5ndGggSU5URUdFUiBPUFRJT05BTAorICAgICAqICB9CisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfREhNX0lOVkFMSURfRk9STUFUICsgcmV0OworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZW5kID0gcCArIGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfbXBpKCAmcCwgZW5kLCAmZGhtLT5QICApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfbXBpKCAmcCwgZW5kLCAmZGhtLT5HICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0RITV9JTlZBTElEX0ZPUk1BVCArIHJldDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBwICE9IGVuZCApCisgICAgeworICAgICAgICAvKiBUaGlzIG1pZ2h0IGJlIHRoZSBvcHRpb25hbCBwcml2YXRlVmFsdWVMZW5ndGguCisgICAgICAgICAqIElmIHNvLCB3ZSBjYW4gY2xlYW5seSBkaXNjYXJkIGl0ICovCisgICAgICAgIG1iZWR0bHNfbXBpIHJlYzsKKyAgICAgICAgbWJlZHRsc19tcGlfaW5pdCggJnJlYyApOworICAgICAgICByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJnJlYyApOworICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmcmVjICk7CisgICAgICAgIGlmICggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9ESE1fSU5WQUxJRF9GT1JNQVQgKyByZXQ7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBwICE9IGVuZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0RITV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0g7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXQgPSAwOworCisgICAgZGhtLT5sZW4gPSBtYmVkdGxzX21waV9zaXplKCAmZGhtLT5QICk7CisKK2V4aXQ6CisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorICAgIG1iZWR0bHNfcGVtX2ZyZWUoICZwZW0gKTsKKyNlbmRpZgorICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIG1iZWR0bHNfZGhtX2ZyZWUoIGRobSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKy8qCisgKiBMb2FkIGFsbCBkYXRhIGZyb20gYSBmaWxlIGludG8gYSBnaXZlbiBidWZmZXIuCisgKgorICogVGhlIGZpbGUgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBlaXRoZXIgUEVNIG9yIERFUiBlbmNvZGVkIGRhdGEuCisgKiBBIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSBpcyBhbHdheXMgYXBwZW5kZWQuIEl0IGlzIGluY2x1ZGVkIGluIHRoZSBhbm5vdW5jZWQKKyAqIGxlbmd0aCBvbmx5IGlmIHRoZSBkYXRhIGxvb2tzIGxpa2UgaXQgaXMgUEVNIGVuY29kZWQuCisgKi8KK3N0YXRpYyBpbnQgbG9hZF9maWxlKCBjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICoqYnVmLCBzaXplX3QgKm4gKQoreworICAgIEZJTEUgKmY7CisgICAgbG9uZyBzaXplOworCisgICAgaWYoICggZiA9IGZvcGVuKCBwYXRoLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fRklMRV9JT19FUlJPUiApOworCisgICAgZnNlZWsoIGYsIDAsIFNFRUtfRU5EICk7CisgICAgaWYoICggc2l6ZSA9IGZ0ZWxsKCBmICkgKSA9PSAtMSApCisgICAgeworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fRklMRV9JT19FUlJPUiApOworICAgIH0KKyAgICBmc2VlayggZiwgMCwgU0VFS19TRVQgKTsKKworICAgICpuID0gKHNpemVfdCkgc2l6ZTsKKworICAgIGlmKCAqbiArIDEgPT0gMCB8fAorICAgICAgICAoICpidWYgPSBtYmVkdGxzX2NhbGxvYyggMSwgKm4gKyAxICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9BTExPQ19GQUlMRUQgKTsKKyAgICB9CisKKyAgICBpZiggZnJlYWQoICpidWYsIDEsICpuLCBmICkgIT0gKm4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggKmJ1ZiApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9GSUxFX0lPX0VSUk9SICk7CisgICAgfQorCisgICAgZmNsb3NlKCBmICk7CisKKyAgICAoKmJ1ZilbKm5dID0gJ1wwJzsKKworICAgIGlmKCBzdHJzdHIoIChjb25zdCBjaGFyICopICpidWYsICItLS0tLUJFR0lOICIgKSAhPSBOVUxMICkKKyAgICAgICAgKysqbjsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogTG9hZCBhbmQgcGFyc2UgREhNIHBhcmFtZXRlcnMKKyAqLworaW50IG1iZWR0bHNfZGhtX3BhcnNlX2RobWZpbGUoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmRobSwgY29uc3QgY2hhciAqcGF0aCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbjsKKyAgICB1bnNpZ25lZCBjaGFyICpidWY7CisKKyAgICBpZiggKCByZXQgPSBsb2FkX2ZpbGUoIHBhdGgsICZidWYsICZuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfZGhtX3BhcnNlX2RobSggZGhtLCBidWYsIG4gKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggYnVmLCBuICk7CisgICAgbWJlZHRsc19mcmVlKCBidWYgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworI2VuZGlmIC8qIE1CRURUTFNfQVNOMV9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorCitzdGF0aWMgY29uc3QgY2hhciBtYmVkdGxzX3Rlc3RfZGhtX3BhcmFtc1tdID0KKyItLS0tLUJFR0lOIERIIFBBUkFNRVRFUlMtLS0tLVxyXG4iCisiTUlHSEFvR0JBSjQxOURCRU9nbVFUem81cVhsNWZRY045VE40NTV3a09MNzA1Mkh6eHhSVk15aFltd1FjZ0p2aFxyXG4iCisiMXNhMThmeWZSOU9pVkVNWWdsT3BrcVZvR0xON3FkNWFRTk5pNVc3L0MrVkJkSFRCSmNHWkp5eVA1QjNxY3ozMlxyXG4iCisiOW1MSkt1ZGxWdWRWMFF4azVxVUphUFoveHVwejBOeW9WcHZpdWlCT0kxZ05pOG92U1hXekFnRUNcclxuIgorIi0tLS0tRU5EIERIIFBBUkFNRVRFUlMtLS0tLVxyXG4iOworCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9kaG1fcGFyYW1zX2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X2RobV9wYXJhbXMgKTsKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc19kaG1fc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2RobV9jb250ZXh0IGRobTsKKworICAgIG1iZWR0bHNfZGhtX2luaXQoICZkaG0gKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgREhNIHBhcmFtZXRlciBsb2FkOiAiICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2RobV9wYXJzZV9kaG0oICZkaG0sCisgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9kaG1fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfZGhtX3BhcmFtc19sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldCA9IDE7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcblxuIiApOworCitleGl0OgorICAgIG1iZWR0bHNfZGhtX2ZyZWUoICZkaG0gKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19ESE1fQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZWNkaC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZWNkaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYTgxNDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lY2RoLmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiAgRWxsaXB0aWMgY3VydmUgRGlmZmllLUhlbGxtYW4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoKKyAqIFJlZmVyZW5jZXM6CisgKgorICogU0VDMSBodHRwOi8vd3d3LnNlY2cub3JnL2luZGV4LnBocD9hY3Rpb249c2VjZyxkb2NzX3NlY2cKKyAqIFJGQyA0NDkyCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2VjZGguaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogR2VuZXJhdGUgcHVibGljIGtleTogc2ltcGxlIHdyYXBwZXIgYXJvdW5kIG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyCisgKi8KK2ludCBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19tcGkgKmQsIG1iZWR0bHNfZWNwX3BvaW50ICpRLAorICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIHJldHVybiBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpciggZ3JwLCBkLCBRLCBmX3JuZywgcF9ybmcgKTsKK30KKworLyoKKyAqIENvbXB1dGUgc2hhcmVkIHNlY3JldCAoU0VDMSAzLjMuMSkKKyAqLworaW50IG1iZWR0bHNfZWNkaF9jb21wdXRlX3NoYXJlZCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19tcGkgKnosCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlEsIGNvbnN0IG1iZWR0bHNfbXBpICpkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBQOworCisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlAgKTsKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIFEgaXMgYSB2YWxpZCBwdWJrZXkgYmVmb3JlIHVzaW5nIGl0CisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoIGdycCwgUSApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bCggZ3JwLCAmUCwgZCwgUSwgZl9ybmcsIHBfcm5nICkgKTsKKworICAgIGlmKCBtYmVkdGxzX2VjcF9pc196ZXJvKCAmUCApICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggeiwgJlAuWCApICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlAgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX2VjZGhfaW5pdCggbWJlZHRsc19lY2RoX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19lY2RoX2NvbnRleHQgKSApOworfQorCisvKgorICogRnJlZSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19lY2RoX2ZyZWUoIG1iZWR0bHNfZWNkaF9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZjdHgtPmdycCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZjdHgtPlEgICApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZjdHgtPlFwICApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZjdHgtPlZpICApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZjdHgtPlZmICApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPmQgICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+eiAgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5fZCApOworfQorCisvKgorICogU2V0dXAgYW5kIHdyaXRlIHRoZSBTZXJ2ZXJLZXlFeGhhbmdlIHBhcmFtZXRlcnMgKFJGQyA0NDkyKQorICogICAgICBzdHJ1Y3QgeworICogICAgICAgICAgRUNQYXJhbWV0ZXJzICAgIGN1cnZlX3BhcmFtczsKKyAqICAgICAgICAgIEVDUG9pbnQgICAgICAgICBwdWJsaWM7CisgKiAgICAgIH0gU2VydmVyRUNESFBhcmFtczsKKyAqLworaW50IG1iZWR0bHNfZWNkaF9tYWtlX3BhcmFtcyggbWJlZHRsc19lY2RoX2NvbnRleHQgKmN0eCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBncnBfbGVuLCBwdF9sZW47CisKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5ncnAucGJpdHMgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyggJmN0eC0+Z3JwLCAmY3R4LT5kLCAmY3R4LT5RLCBmX3JuZywgcF9ybmcgKSApCisgICAgICAgICAgICAgICAgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF90bHNfd3JpdGVfZ3JvdXAoICZjdHgtPmdycCwgJmdycF9sZW4sIGJ1ZiwgYmxlbiApICkKKyAgICAgICAgICAgICAgICAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGJ1ZiArPSBncnBfbGVuOworICAgIGJsZW4gLT0gZ3JwX2xlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX3Rsc193cml0ZV9wb2ludCggJmN0eC0+Z3JwLCAmY3R4LT5RLCBjdHgtPnBvaW50X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHRfbGVuLCBidWYsIGJsZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgKm9sZW4gPSBncnBfbGVuICsgcHRfbGVuOworICAgIHJldHVybiggMCApOworfQorCisvKgorICogUmVhZCB0aGUgU2VydmVyS2V5RXhoYW5nZSBwYXJhbWV0ZXJzIChSRkMgNDQ5MikKKyAqICAgICAgc3RydWN0IHsKKyAqICAgICAgICAgIEVDUGFyYW1ldGVycyAgICBjdXJ2ZV9wYXJhbXM7CisgKiAgICAgICAgICBFQ1BvaW50ICAgICAgICAgcHVibGljOworICogICAgICB9IFNlcnZlckVDREhQYXJhbXM7CisgKi8KK2ludCBtYmVkdGxzX2VjZGhfcmVhZF9wYXJhbXMoIG1iZWR0bHNfZWNkaF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfdGxzX3JlYWRfZ3JvdXAoICZjdHgtPmdycCwgYnVmLCBlbmQgLSAqYnVmICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50KCAmY3R4LT5ncnAsICZjdHgtPlFwLCBidWYsIGVuZCAtICpidWYgKSApCisgICAgICAgICAgICAgICAgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEdldCBwYXJhbWV0ZXJzIGZyb20gYSBrZXlwYWlyCisgKi8KK2ludCBtYmVkdGxzX2VjZGhfZ2V0X3BhcmFtcyggbWJlZHRsc19lY2RoX2NvbnRleHQgKmN0eCwgY29uc3QgbWJlZHRsc19lY3Bfa2V5cGFpciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY2RoX3NpZGUgc2lkZSApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX2dyb3VwX2NvcHkoICZjdHgtPmdycCwgJmtleS0+Z3JwICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIC8qIElmIGl0J3Mgbm90IG91ciBrZXksIGp1c3QgaW1wb3J0IHRoZSBwdWJsaWMgcGFydCBhcyBRcCAqLworICAgIGlmKCBzaWRlID09IE1CRURUTFNfRUNESF9USEVJUlMgKQorICAgICAgICByZXR1cm4oIG1iZWR0bHNfZWNwX2NvcHkoICZjdHgtPlFwLCAma2V5LT5RICkgKTsKKworICAgIC8qIE91ciBrZXk6IGltcG9ydCBwdWJsaWMgKGFzIFEpIGFuZCBwcml2YXRlIHBhcnRzICovCisgICAgaWYoIHNpZGUgIT0gTUJFRFRMU19FQ0RIX09VUlMgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfY29weSggJmN0eC0+USwgJmtleS0+USApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX2NvcHkoICZjdHgtPmQsICZrZXktPmQgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBTZXR1cCBhbmQgZXhwb3J0IHRoZSBjbGllbnQgcHVibGljIHZhbHVlCisgKi8KK2ludCBtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMoIG1iZWR0bHNfZWNkaF9jb250ZXh0ICpjdHgsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBibGVuLAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPmdycC5wYml0cyA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCAmY3R4LT5ncnAsICZjdHgtPmQsICZjdHgtPlEsIGZfcm5nLCBwX3JuZyApICkKKyAgICAgICAgICAgICAgICAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiBtYmVkdGxzX2VjcF90bHNfd3JpdGVfcG9pbnQoICZjdHgtPmdycCwgJmN0eC0+USwgY3R4LT5wb2ludF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZW4sIGJ1ZiwgYmxlbiApOworfQorCisvKgorICogUGFyc2UgYW5kIGltcG9ydCB0aGUgY2xpZW50J3MgcHVibGljIHZhbHVlCisgKi8KK2ludCBtYmVkdGxzX2VjZGhfcmVhZF9wdWJsaWMoIG1iZWR0bHNfZWNkaF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworCisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50KCAmY3R4LT5ncnAsICZjdHgtPlFwLCAmcCwgYmxlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKHNpemVfdCkoIHAgLSBidWYgKSAhPSBibGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogRGVyaXZlIGFuZCBleHBvcnQgdGhlIHNoYXJlZCBzZWNyZXQKKyAqLworaW50IG1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldCggbWJlZHRsc19lY2RoX2NvbnRleHQgKmN0eCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkaF9jb21wdXRlX3NoYXJlZCggJmN0eC0+Z3JwLCAmY3R4LT56LCAmY3R4LT5RcCwgJmN0eC0+ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3JuZywgcF9ybmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggbWJlZHRsc19tcGlfc2l6ZSggJmN0eC0+eiApID4gYmxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAqb2xlbiA9IGN0eC0+Z3JwLnBiaXRzIC8gOCArICggKCBjdHgtPmdycC5wYml0cyAlIDggKSAhPSAwICk7CisgICAgcmV0dXJuIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggJmN0eC0+eiwgYnVmLCAqb2xlbiApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19FQ0RIX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VjZHNhLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lY2RzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNTZmM2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lY2RzYS5jCkBAIC0wLDAgKzEsNDQ4IEBACisvKgorICogIEVsbGlwdGljIGN1cnZlIERTQQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKgorICogUmVmZXJlbmNlczoKKyAqCisgKiBTRUMxIGh0dHA6Ly93d3cuc2VjZy5vcmcvaW5kZXgucGhwP2FjdGlvbj1zZWNnLGRvY3Nfc2VjZworICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvZWNkc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2FzbjF3cml0ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQykKKyNpbmNsdWRlICJtYmVkdGxzL2htYWNfZHJiZy5oIgorI2VuZGlmCisKKy8qCisgKiBEZXJpdmUgYSBzdWl0YWJsZSBpbnRlZ2VyIGZvciBncm91cCBncnAgZnJvbSBhIGJ1ZmZlciBvZiBsZW5ndGggbGVuCisgKiBTRUMxIDQuMS4zIHN0ZXAgNSBha2EgU0VDMSA0LjEuNCBzdGVwIDMKKyAqLworc3RhdGljIGludCBkZXJpdmVfbXBpKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX21waSAqeCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3Qgbl9zaXplID0gKCBncnAtPm5iaXRzICsgNyApIC8gODsKKyAgICBzaXplX3QgdXNlX3NpemUgPSBibGVuID4gbl9zaXplID8gbl9zaXplIDogYmxlbjsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoIHgsIGJ1ZiwgdXNlX3NpemUgKSApOworICAgIGlmKCB1c2Vfc2l6ZSAqIDggPiBncnAtPm5iaXRzICkKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCB4LCB1c2Vfc2l6ZSAqIDggLSBncnAtPm5iaXRzICkgKTsKKworICAgIC8qIFdoaWxlIGF0IGl0LCByZWR1Y2UgbW9kdWxvIE4gKi8KKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggeCwgJmdycC0+TiApID49IDAgKQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoIHgsIHgsICZncnAtPk4gKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBDb21wdXRlIEVDRFNBIHNpZ25hdHVyZSBvZiBhIGhhc2hlZCBtZXNzYWdlIChTRUMxIDQuMS4zKQorICogT2J2aW91c2x5LCBjb21wYXJlZCB0byBTRUMxIDQuMS4zLCB3ZSBza2lwIHN0ZXAgNCAoaGFzaCBtZXNzYWdlKQorICovCitpbnQgbWJlZHRsc19lY2RzYV9zaWduKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX21waSAqciwgbWJlZHRsc19tcGkgKnMsCisgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sCisgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldCwga2V5X3RyaWVzLCBzaWduX3RyaWVzLCBibGluZF90cmllczsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBSOworICAgIG1iZWR0bHNfbXBpIGssIGUsIHQ7CisKKyAgICAvKiBGYWlsIGNsZWFubHkgb24gY3VydmVzIHN1Y2ggYXMgQ3VydmUyNTUxOSB0aGF0IGNhbid0IGJlIHVzZWQgZm9yIEVDRFNBICovCisgICAgaWYoIGdycC0+Ti5wID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmayApOyBtYmVkdGxzX21waV9pbml0KCAmZSApOyBtYmVkdGxzX21waV9pbml0KCAmdCApOworCisgICAgc2lnbl90cmllcyA9IDA7CisgICAgZG8KKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFN0ZXBzIDEtMzogZ2VuZXJhdGUgYSBzdWl0YWJsZSBlcGhlbWVyYWwga2V5cGFpcgorICAgICAgICAgKiBhbmQgc2V0IHIgPSB4UiBtb2QgbgorICAgICAgICAgKi8KKyAgICAgICAga2V5X3RyaWVzID0gMDsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpciggZ3JwLCAmaywgJlIsIGZfcm5nLCBwX3JuZyApICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoIHIsICZSLlgsICZncnAtPk4gKSApOworCisgICAgICAgICAgICBpZigga2V5X3RyaWVzKysgPiAxMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX1JBTkRPTV9GQUlMRUQ7CisgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfaW50KCByLCAwICkgPT0gMCApOworCisgICAgICAgIC8qCisgICAgICAgICAqIFN0ZXAgNTogZGVyaXZlIE1QSSBmcm9tIGhhc2hlZCBtZXNzYWdlCisgICAgICAgICAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIGRlcml2ZV9tcGkoIGdycCwgJmUsIGJ1ZiwgYmxlbiApICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogR2VuZXJhdGUgYSByYW5kb20gdmFsdWUgdG8gYmxpbmQgaW52X21vZCBpbiBuZXh0IHN0ZXAsCisgICAgICAgICAqIGF2b2lkaW5nIGEgcG90ZW50aWFsIHRpbWluZyBsZWFrLgorICAgICAgICAgKi8KKyAgICAgICAgYmxpbmRfdHJpZXMgPSAwOworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBzaXplX3Qgbl9zaXplID0gKCBncnAtPm5iaXRzICsgNyApIC8gODsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oICZ0LCBuX3NpemUsIGZfcm5nLCBwX3JuZyApICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZ0LCA4ICogbl9zaXplIC0gZ3JwLT5uYml0cyApICk7CisKKyAgICAgICAgICAgIC8qIFNlZSBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpcigpICovCisgICAgICAgICAgICBpZiggKytibGluZF90cmllcyA+IDMwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9SQU5ET01fRkFJTEVEICk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZ0LCAxICkgPCAwIHx8CisgICAgICAgICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmdCwgJmdycC0+TiApID49IDAgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBTdGVwIDY6IGNvbXB1dGUgcyA9IChlICsgciAqIGQpIC8gayA9IHQgKGUgKyByZCkgLyAoa3QpIG1vZCBuCisgICAgICAgICAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoIHMsIHIsIGQgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoICZlLCAmZSwgcyApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmUsICZlLCAmdCApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmssICZrLCAmdCApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfaW52X21vZCggcywgJmssICZncnAtPk4gKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoIHMsIHMsICZlICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCBzLCBzLCAmZ3JwLT5OICkgKTsKKworICAgICAgICBpZiggc2lnbl90cmllcysrID4gMTAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfUkFORE9NX0ZBSUxFRDsKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX2ludCggcywgMCApID09IDAgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmUiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZrICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZlICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZ0ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpCisvKgorICogRGV0ZXJtaW5pc3RpYyBzaWduYXR1cmUgd3JhcHBlcgorICovCitpbnQgbWJlZHRsc19lY2RzYV9zaWduX2RldCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19tcGkgKnIsIG1iZWR0bHNfbXBpICpzLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgcm5nX2N0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGFbMiAqIE1CRURUTFNfRUNQX01BWF9CWVRFU107CisgICAgc2l6ZV90IGdycF9sZW4gPSAoIGdycC0+bmJpdHMgKyA3ICkgLyA4OworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfbXBpIGg7CisKKyAgICBpZiggKCBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZoICk7CisgICAgbWJlZHRsc19obWFjX2RyYmdfaW5pdCggJnJuZ19jdHggKTsKKworICAgIC8qIFVzZSBwcml2YXRlIGtleSBhbmQgbWVzc2FnZSBoYXNoIChyZWR1Y2VkKSB0byBpbml0aWFsaXplIEhNQUNfRFJCRyAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCBkLCBkYXRhLCBncnBfbGVuICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIGRlcml2ZV9tcGkoIGdycCwgJmgsIGJ1ZiwgYmxlbiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoICZoLCBkYXRhICsgZ3JwX2xlbiwgZ3JwX2xlbiApICk7CisgICAgbWJlZHRsc19obWFjX2RyYmdfc2VlZF9idWYoICZybmdfY3R4LCBtZF9pbmZvLCBkYXRhLCAyICogZ3JwX2xlbiApOworCisgICAgcmV0ID0gbWJlZHRsc19lY2RzYV9zaWduKCBncnAsIHIsIHMsIGQsIGJ1ZiwgYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20sICZybmdfY3R4ICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJnJuZ19jdHggKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmaCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMgKi8KKworLyoKKyAqIFZlcmlmeSBFQ0RTQSBzaWduYXR1cmUgb2YgaGFzaGVkIG1lc3NhZ2UgKFNFQzEgNC4xLjQpCisgKiBPYnZpb3VzbHksIGNvbXBhcmVkIHRvIFNFQzEgNC4xLjMsIHdlIHNraXAgc3RlcCAyIChoYXNoIG1lc3NhZ2UpCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX3ZlcmlmeSggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sCisgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUSwgY29uc3QgbWJlZHRsc19tcGkgKnIsIGNvbnN0IG1iZWR0bHNfbXBpICpzKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgZSwgc19pbnYsIHUxLCB1MjsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBSOworCisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmZSApOyBtYmVkdGxzX21waV9pbml0KCAmc19pbnYgKTsgbWJlZHRsc19tcGlfaW5pdCggJnUxICk7IG1iZWR0bHNfbXBpX2luaXQoICZ1MiApOworCisgICAgLyogRmFpbCBjbGVhbmx5IG9uIGN1cnZlcyBzdWNoIGFzIEN1cnZlMjU1MTkgdGhhdCBjYW4ndCBiZSB1c2VkIGZvciBFQ0RTQSAqLworICAgIGlmKCBncnAtPk4ucCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qCisgICAgICogU3RlcCAxOiBtYWtlIHN1cmUgciBhbmQgcyBhcmUgaW4gcmFuZ2UgMS4ubi0xCisgICAgICovCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoIHIsIDEgKSA8IDAgfHwgbWJlZHRsc19tcGlfY21wX21waSggciwgJmdycC0+TiApID49IDAgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX2ludCggcywgMSApIDwgMCB8fCBtYmVkdGxzX21waV9jbXBfbXBpKCBzLCAmZ3JwLT5OICkgPj0gMCApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfVkVSSUZZX0ZBSUxFRDsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIC8qCisgICAgICogQWRkaXRpb25hbCBwcmVjYXV0aW9uOiBtYWtlIHN1cmUgUSBpcyB2YWxpZAorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCBncnAsIFEgKSApOworCisgICAgLyoKKyAgICAgKiBTdGVwIDM6IGRlcml2ZSBNUEkgZnJvbSBoYXNoZWQgbWVzc2FnZQorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggZGVyaXZlX21waSggZ3JwLCAmZSwgYnVmLCBibGVuICkgKTsKKworICAgIC8qCisgICAgICogU3RlcCA0OiB1MSA9IGUgLyBzIG1vZCBuLCB1MiA9IHIgLyBzIG1vZCBuCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmc19pbnYsIHMsICZncnAtPk4gKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmdTEsICZlLCAmc19pbnYgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJnUxLCAmdTEsICZncnAtPk4gKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmdTIsIHIsICZzX2ludiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmdTIsICZ1MiwgJmdycC0+TiApICk7CisKKyAgICAvKgorICAgICAqIFN0ZXAgNTogUiA9IHUxIEcgKyB1MiBRCisgICAgICoKKyAgICAgKiBTaW5jZSB3ZSdyZSBub3QgdXNpbmcgYW55IHNlY3JldCBkYXRhLCBubyBuZWVkIHRvIHBhc3MgYSBSTkcgdG8KKyAgICAgKiBtYmVkdGxzX2VjcF9tdWwoKSBmb3IgY291bnRlcm1lc3VyZXMuCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWxhZGQoIGdycCwgJlIsICZ1MSwgJmdycC0+RywgJnUyLCBRICkgKTsKKworICAgIGlmKCBtYmVkdGxzX2VjcF9pc196ZXJvKCAmUiApICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9WRVJJRllfRkFJTEVEOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTdGVwIDY6IGNvbnZlcnQgeFIgdG8gYW4gaW50ZWdlciAobm8tb3ApCisgICAgICogU3RlcCA3OiByZWR1Y2UgeFIgbW9kIG4gKGdpdmVzIHYpCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmUi5YLCAmUi5YLCAmZ3JwLT5OICkgKTsKKworICAgIC8qCisgICAgICogU3RlcCA4OiBjaGVjayBpZiB2ICh0aGF0IGlzLCBSLlgpIGlzIGVxdWFsIHRvIHIKKyAgICAgKi8KKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJlIuWCwgciApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQ7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmZSApOyBtYmVkdGxzX21waV9mcmVlKCAmc19pbnYgKTsgbWJlZHRsc19tcGlfZnJlZSggJnUxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZ1MiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIENvbnZlcnQgYSBzaWduYXR1cmUgKGdpdmVuIGJ5IGNvbnRleHQpIHRvIEFTTi4xCisgKi8KK3N0YXRpYyBpbnQgZWNkc2Ffc2lnbmF0dXJlX3RvX2FzbjEoIGNvbnN0IG1iZWR0bHNfbXBpICpyLCBjb25zdCBtYmVkdGxzX21waSAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfRUNEU0FfTUFYX0xFTl07CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZiArIHNpemVvZiggYnVmICk7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCAmcCwgYnVmLCBzICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCAmcCwgYnVmLCByICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZwLCBidWYsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJnAsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisKKyAgICBtZW1jcHkoIHNpZywgcCwgbGVuICk7CisgICAgKnNsZW4gPSBsZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENvbXB1dGUgYW5kIHdyaXRlIHNpZ25hdHVyZQorICovCitpbnQgbWJlZHRsc19lY2RzYV93cml0ZV9zaWduYXR1cmUoIG1iZWR0bHNfZWNkc2FfY29udGV4dCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgciwgczsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZyICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnMgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDKQorICAgICh2b2lkKSBmX3JuZzsKKyAgICAodm9pZCkgcF9ybmc7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNkc2Ffc2lnbl9kZXQoICZjdHgtPmdycCwgJnIsICZzLCAmY3R4LT5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBobGVuLCBtZF9hbGcgKSApOworI2Vsc2UKKyAgICAodm9pZCkgbWRfYWxnOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjZHNhX3NpZ24oICZjdHgtPmdycCwgJnIsICZzLCAmY3R4LT5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsIGhsZW4sIGZfcm5nLCBwX3JuZyApICk7CisjZW5kaWYKKworICAgIE1CRURUTFNfTVBJX0NISyggZWNkc2Ffc2lnbmF0dXJlX3RvX2FzbjEoICZyLCAmcywgc2lnLCBzbGVuICkgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmciApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZzICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgISBkZWZpbmVkKE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVEKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpCitpbnQgbWJlZHRsc19lY2RzYV93cml0ZV9zaWduYXR1cmVfZGV0KCBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcgKQoreworICAgIHJldHVybiggbWJlZHRsc19lY2RzYV93cml0ZV9zaWduYXR1cmUoIGN0eCwgbWRfYWxnLCBoYXNoLCBobGVuLCBzaWcsIHNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwgKSApOworfQorI2VuZGlmCisKKy8qCisgKiBSZWFkIGFuZCBjaGVjayBzaWduYXR1cmUKKyAqLworaW50IG1iZWR0bHNfZWNkc2FfcmVhZF9zaWduYXR1cmUoIG1iZWR0bHNfZWNkc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikgc2lnOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNpZyArIHNsZW47CisgICAgc2l6ZV90IGxlbjsKKyAgICBtYmVkdGxzX21waSByLCBzOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJnIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmcyApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgKz0gTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgaWYoIHAgKyBsZW4gIT0gZW5kICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSArCisgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZyICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZzICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCArPSBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEE7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZHNhX3ZlcmlmeSggJmN0eC0+Z3JwLCBoYXNoLCBobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+USwgJnIsICZzICkgKSAhPSAwICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX1NJR19MRU5fTUlTTUFUQ0g7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJnIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmcyApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIGtleSBwYWlyCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX2dlbmtleSggbWJlZHRsc19lY2RzYV9jb250ZXh0ICpjdHgsIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGdpZCwKKyAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgIHJldHVybiggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmN0eC0+Z3JwLCBnaWQgKSB8fAorICAgICAgICAgICAgbWJlZHRsc19lY3BfZ2VuX2tleXBhaXIoICZjdHgtPmdycCwgJmN0eC0+ZCwgJmN0eC0+USwgZl9ybmcsIHBfcm5nICkgKTsKK30KKworLyoKKyAqIFNldCBjb250ZXh0IGZyb20gYW4gbWJlZHRsc19lY3Bfa2V5cGFpcgorICovCitpbnQgbWJlZHRsc19lY2RzYV9mcm9tX2tleXBhaXIoIG1iZWR0bHNfZWNkc2FfY29udGV4dCAqY3R4LCBjb25zdCBtYmVkdGxzX2VjcF9rZXlwYWlyICprZXkgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF9ncm91cF9jb3B5KCAmY3R4LT5ncnAsICZrZXktPmdycCApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX2NvcHkoICZjdHgtPmQsICZrZXktPmQgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2VjcF9jb3B5KCAmY3R4LT5RLCAma2V5LT5RICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZWNkc2FfZnJlZSggY3R4ICk7CisgICAgfQorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfZWNkc2FfaW5pdCggbWJlZHRsc19lY2RzYV9jb250ZXh0ICpjdHggKQoreworICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfaW5pdCggY3R4ICk7Cit9CisKKy8qCisgKiBGcmVlIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX2VjZHNhX2ZyZWUoIG1iZWR0bHNfZWNkc2FfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoIGN0eCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lY2pwYWtlLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lY2pwYWtlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhMWMyZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VjanBha2UuYwpAQCAtMCwwICsxLDExMDMgQEAKKy8qCisgKiAgRWxsaXB0aWMgY3VydmUgSi1QQUtFCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qCisgKiBSZWZlcmVuY2VzIGluIHRoZSBjb2RlIGFyZSB0byB0aGUgVGhyZWFkIHYxLjAgU3BlY2lmaWNhdGlvbiwKKyAqIGF2YWlsYWJsZSB0byBtZW1iZXJzIG9mIHRoZSBUaHJlYWQgR3JvdXAgaHR0cDovL3RocmVhZGdyb3VwLm9yZy8KKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDSlBBS0VfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvZWNqcGFrZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qCisgKiBDb252ZXJ0IGEgbWJlZHRsc19lY2pwYWtlX3JvbGUgdG8gaWRlbnRpZmllciBzdHJpbmcKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBlY2pwYWtlX2lkW10gPSB7CisgICAgImNsaWVudCIsCisgICAgInNlcnZlciIKK307CisKKyNkZWZpbmUgSURfTUlORSAgICAgKCBlY2pwYWtlX2lkWyBjdHgtPnJvbGUgXSApCisjZGVmaW5lIElEX1BFRVIgICAgICggZWNqcGFrZV9pZFsgMSAtIGN0eC0+cm9sZSBdICkKKworLyoKKyAqIEluaXRpYWxpemUgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfZWNqcGFrZV9pbml0KCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBjdHgtPm1kX2luZm8gPSBOVUxMOworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZjdHgtPmdycCApOworICAgIGN0eC0+cG9pbnRfZm9ybWF0ID0gTUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VEOworCisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJmN0eC0+WG0xICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJmN0eC0+WG0yICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJmN0eC0+WHAxICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJmN0eC0+WHAyICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJmN0eC0+WHAgICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmY3R4LT54bTEgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmY3R4LT54bTIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmY3R4LT5zICAgKTsKK30KKworLyoKKyAqIEZyZWUgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfZWNqcGFrZV9mcmVlKCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBjdHgtPm1kX2luZm8gPSBOVUxMOworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZjdHgtPmdycCApOworCisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmN0eC0+WG0xICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmN0eC0+WG0yICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmN0eC0+WHAxICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmN0eC0+WHAyICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmN0eC0+WHAgICk7CisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT54bTEgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT54bTIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5zICAgKTsKK30KKworLyoKKyAqIFNldHVwIGNvbnRleHQKKyAqLworaW50IG1iZWR0bHNfZWNqcGFrZV9zZXR1cCggbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNqcGFrZV9yb2xlIHJvbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfZ3JvdXBfaWQgY3VydmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgY3R4LT5yb2xlID0gcm9sZTsKKworICAgIGlmKCAoIGN0eC0+bWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGhhc2ggKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmN0eC0+Z3JwLCBjdXJ2ZSApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmY3R4LT5zLCBzZWNyZXQsIGxlbiApICk7CisKK2NsZWFudXA6CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgbWJlZHRsc19lY2pwYWtlX2ZyZWUoIGN0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIENoZWNrIGlmIGNvbnRleHQgaXMgcmVhZHkgZm9yIHVzZQorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX2NoZWNrKCBjb25zdCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4LT5tZF9pbmZvID09IE5VTEwgfHwKKyAgICAgICAgY3R4LT5ncnAuaWQgPT0gTUJFRFRMU19FQ1BfRFBfTk9ORSB8fAorICAgICAgICBjdHgtPnMucCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBXcml0ZSBhIHBvaW50IHBsdXMgaXRzIGxlbmd0aCB0byBhIGJ1ZmZlcgorICovCitzdGF0aWMgaW50IGVjanBha2Vfd3JpdGVfbGVuX3BvaW50KCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworCisgICAgLyogTmVlZCBhdCBsZWFzdCA0IGZvciBsZW5ndGggcGx1cyAxIGZvciBwb2ludCAqLworICAgIGlmKCBlbmQgPCAqcCB8fCBlbmQgLSAqcCA8IDUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICByZXQgPSBtYmVkdGxzX2VjcF9wb2ludF93cml0ZV9iaW5hcnkoIGdycCwgUCwgcGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuLCAqcCArIDQsIGVuZCAtICggKnAgKyA0ICkgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgKCpwKVswXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBsZW4gPj4gMjQgKSAmIDB4RkYgKTsKKyAgICAoKnApWzFdID0gKHVuc2lnbmVkIGNoYXIpKCAoIGxlbiA+PiAxNiApICYgMHhGRiApOworICAgICgqcClbMl0gPSAodW5zaWduZWQgY2hhcikoICggbGVuID4+ICA4ICkgJiAweEZGICk7CisgICAgKCpwKVszXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBsZW4gICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwICs9IDQgKyBsZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFNpemUgb2YgdGhlIHRlbXBvcmFyeSBidWZmZXIgZm9yIGVjanBha2VfaGFzaDoKKyAqIDMgRUMgcG9pbnRzIHBsdXMgdGhlaXIgbGVuZ3RoLCBwbHVzIElEIGFuZCBpdHMgbGVuZ3RoICg0ICsgNiBieXRlcykKKyAqLworI2RlZmluZSBFQ0pQQUtFX0hBU0hfQlVGX0xFTiAgICAoIDMgKiAoIDQgKyBNQkVEVExTX0VDUF9NQVhfUFRfTEVOICkgKyA0ICsgNiApCisKKy8qCisgKiBDb21wdXRlIGhhc2ggZm9yIFpLUCAoNy40LjIuMi4yLjEpCisgKi8KK3N0YXRpYyBpbnQgZWNqcGFrZV9oYXNoKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqRywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqViwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21waSAqaCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltFQ0pQQUtFX0hBU0hfQlVGX0xFTl07CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBidWYgKyBzaXplb2YoIGJ1ZiApOworICAgIGNvbnN0IHNpemVfdCBpZF9sZW4gPSBzdHJsZW4oIGlkICk7CisgICAgdW5zaWduZWQgY2hhciBoYXNoW01CRURUTFNfTURfTUFYX1NJWkVdOworCisgICAgLyogV3JpdGUgdGhpbmdzIHRvIHRlbXBvcmFyeSBidWZmZXIgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIGVjanBha2Vfd3JpdGVfbGVuX3BvaW50KCAmcCwgZW5kLCBncnAsIHBmLCBHICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjanBha2Vfd3JpdGVfbGVuX3BvaW50KCAmcCwgZW5kLCBncnAsIHBmLCBWICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjanBha2Vfd3JpdGVfbGVuX3BvaW50KCAmcCwgZW5kLCBncnAsIHBmLCBYICkgKTsKKworICAgIGlmKCBlbmQgLSBwIDwgNCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggaWRfbGVuID4+IDI0ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBpZF9sZW4gPj4gMTYgKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIGlkX2xlbiA+PiAgOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggaWRfbGVuICAgICAgICkgJiAweEZGICk7CisKKyAgICBpZiggZW5kIDwgcCB8fCAoc2l6ZV90KSggZW5kIC0gcCApIDwgaWRfbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgbWVtY3B5KCBwLCBpZCwgaWRfbGVuICk7CisgICAgcCArPSBpZF9sZW47CisKKyAgICAvKiBDb21wdXRlIGhhc2ggKi8KKyAgICBtYmVkdGxzX21kKCBtZF9pbmZvLCBidWYsIHAgLSBidWYsIGhhc2ggKTsKKworICAgIC8qIFR1cm4gaXQgaW50byBhbiBpbnRlZ2VyIG1vZCBuICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggaCwgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggaCwgaCwgJmdycC0+TiApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFBhcnNlIGEgRUNTaG5vcnJaS1AgKDcuNC4yLjIuMikgYW5kIHZlcmlmeSBpdCAoNy40LjIuMy4zKQorICovCitzdGF0aWMgaW50IGVjanBha2VfemtwX3JlYWQoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgViwgVlY7CisgICAgbWJlZHRsc19tcGkgciwgaDsKKyAgICBzaXplX3Qgcl9sZW47CisKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmViApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZWViApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZyICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJmggKTsKKworICAgIC8qCisgICAgICogc3RydWN0IHsKKyAgICAgKiAgICAgRUNQb2ludCBWOworICAgICAqICAgICBvcGFxdWUgcjwxLi4yXjgtMT47CisgICAgICogfSBFQ1NjaG5vcnJaS1A7CisgICAgICovCisgICAgaWYoIGVuZCA8ICpwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfdGxzX3JlYWRfcG9pbnQoIGdycCwgJlYsIHAsIGVuZCAtICpwICkgKTsKKworICAgIGlmKCBlbmQgPCAqcCB8fCAoc2l6ZV90KSggZW5kIC0gKnAgKSA8IDEgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgcl9sZW4gPSAqKCpwKSsrOworCisgICAgaWYoIGVuZCA8ICpwIHx8IChzaXplX3QpKCBlbmQgLSAqcCApIDwgcl9sZW4gKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJnIsICpwLCByX2xlbiApICk7CisgICAgKnAgKz0gcl9sZW47CisKKyAgICAvKgorICAgICAqIFZlcmlmaWNhdGlvbgorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV9oYXNoKCBtZF9pbmZvLCBncnAsIHBmLCBHLCAmViwgWCwgaWQsICZoICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bGFkZCggKG1iZWR0bHNfZWNwX2dyb3VwICopIGdycCwKKyAgICAgICAgICAgICAgICAgICAgICZWViwgJmgsIFgsICZyLCBHICkgKTsKKworICAgIGlmKCBtYmVkdGxzX2VjcF9wb2ludF9jbXAoICZWViwgJlYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9WRVJJRllfRkFJTEVEOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCitjbGVhbnVwOgorICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZWICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlZWICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJnIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmaCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIFpLUCAoNy40LjIuMy4yKSBhbmQgd3JpdGUgaXQgYXMgRUNTY2hub3JyWktQICg3LjQuMi4yLjIpCisgKi8KK3N0YXRpYyBpbnQgZWNqcGFrZV96a3Bfd3JpdGUoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBwZiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpICp4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgVjsKKyAgICBtYmVkdGxzX21waSB2OworICAgIG1iZWR0bHNfbXBpIGg7IC8qIGxhdGVyIHJlY3ljbGVkIHRvIGhvbGQgciAqLworICAgIHNpemVfdCBsZW47CisKKyAgICBpZiggZW5kIDwgKnAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmViApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZ2ICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJmggKTsKKworICAgIC8qIENvbXB1dGUgc2lnbmF0dXJlICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpcl9iYXNlKCAobWJlZHRsc19lY3BfZ3JvdXAgKikgZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRywgJnYsICZWLCBmX3JuZywgcF9ybmcgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV9oYXNoKCBtZF9pbmZvLCBncnAsIHBmLCBHLCAmViwgWCwgaWQsICZoICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZoLCAmaCwgeCApICk7IC8qIHgqaCAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJmgsICZ2LCAmaCApICk7IC8qIHYgLSB4KmggKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZoLCAmaCwgJmdycC0+TiApICk7IC8qIHIgKi8KKworICAgIC8qIFdyaXRlIGl0IG91dCAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfdGxzX3dyaXRlX3BvaW50KCBncnAsICZWLAorICAgICAgICAgICAgICAgIHBmLCAmbGVuLCAqcCwgZW5kIC0gKnAgKSApOworICAgICpwICs9IGxlbjsKKworICAgIGxlbiA9IG1iZWR0bHNfbXBpX3NpemUoICZoICk7IC8qIGFjdHVhbGx5IHIgKi8KKyAgICBpZiggZW5kIDwgKnAgfHwgKHNpemVfdCkoIGVuZCAtICpwICkgPCAxICsgbGVuIHx8IGxlbiA+IDI1NSApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTDsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgICooKnApKysgPSAodW5zaWduZWQgY2hhcikoIGxlbiAmIDB4RkYgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggJmgsICpwLCBsZW4gKSApOyAvKiByICovCisgICAgKnAgKz0gbGVuOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZWICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJnYgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmaCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFBhcnNlIGEgRUNKUEFLRUtleUtQICg3LjQuMi4yLjEpIGFuZCBjaGVjayBwcm9vZgorICogT3V0cHV0OiB2ZXJpZmllZCBwdWJsaWMga2V5IFgKKyAqLworc3RhdGljIGludCBlY2pwYWtlX2trcF9yZWFkKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnQgKlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIGVuZCA8ICpwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qCisgICAgICogc3RydWN0IHsKKyAgICAgKiAgICAgRUNQb2ludCBYOworICAgICAqICAgICBFQ1NjaG5vcnJaS1AgemtwOworICAgICAqIH0gRUNKUEFLRUtleUtQOworICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfdGxzX3JlYWRfcG9pbnQoIGdycCwgWCwgcCwgZW5kIC0gKnAgKSApOworICAgIGlmKCBtYmVkdGxzX2VjcF9pc196ZXJvKCBYICkgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX3prcF9yZWFkKCBtZF9pbmZvLCBncnAsIHBmLCBHLCBYLCBpZCwgcCwgZW5kICkgKTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogR2VuZXJhdGUgYW4gRUNKUEFLRUtleUtQCisgKiBPdXRwdXQ6IHRoZSBzZXJpYWxpemVkIHN0cnVjdHVyZSwgcGx1cyBwcml2YXRlL3B1YmxpYyBrZXkgcGFpcgorICovCitzdGF0aWMgaW50IGVjanBha2Vfa2twX3dyaXRlKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpICp4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnQgKlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKworICAgIGlmKCBlbmQgPCAqcCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgIC8qIEdlbmVyYXRlIGtleSAoNy40LjIuMy4xKSBhbmQgd3JpdGUgaXQgb3V0ICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpcl9iYXNlKCAobWJlZHRsc19lY3BfZ3JvdXAgKikgZ3JwLCBHLCB4LCBYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl9ybmcsIHBfcm5nICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX3Rsc193cml0ZV9wb2ludCggZ3JwLCBYLAorICAgICAgICAgICAgICAgIHBmLCAmbGVuLCAqcCwgZW5kIC0gKnAgKSApOworICAgICpwICs9IGxlbjsKKworICAgIC8qIEdlbmVyYXRlIGFuZCB3cml0ZSBwcm9vZiAqLworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV96a3Bfd3JpdGUoIG1kX2luZm8sIGdycCwgcGYsIEcsIHgsIFgsIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIGVuZCwgZl9ybmcsIHBfcm5nICkgKTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUmVhZCBhIEVDSlBBS0VLZXlLUFBhaXJMaXN0ICg3LjQuMi4zKSBhbmQgY2hlY2sgcHJvb2ZzCisgKiBPdXB1dHM6IHZlcmlmaWVkIHBlZXIgcHVibGljIGtleXMgWGEsIFhiCisgKi8KK3N0YXRpYyBpbnQgZWNqcGFrZV9ra3BwX3JlYWQoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnQgKlhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnQgKlhiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gYnVmICsgbGVuOworCisgICAgLyoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICBFQ0pQQUtFS2V5S1AgZWNqcGFrZV9rZXlfa3BfcGFpcl9saXN0WzJdOworICAgICAqIH0gRUNKUEFLRUtleUtQUGFpckxpc3Q7CisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX2trcF9yZWFkKCBtZF9pbmZvLCBncnAsIHBmLCBHLCBYYSwgaWQsICZwLCBlbmQgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV9ra3BfcmVhZCggbWRfaW5mbywgZ3JwLCBwZiwgRywgWGIsIGlkLCAmcCwgZW5kICkgKTsKKworICAgIGlmKCBwICE9IGVuZCApCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogR2VuZXJhdGUgYSBFQ0pQQUtFS2V5S1BQYWlyTGlzdAorICogT3V0cHV0czogdGhlIHNlcmlhbGl6ZWQgc3RydWN0dXJlLCBwbHVzIHR3byBwcml2YXRlL3B1YmxpYyBrZXkgcGFpcnMKKyAqLworc3RhdGljIGludCBlY2pwYWtlX2trcHBfd3JpdGUoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpICp4bTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnQgKlhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpICp4bTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnQgKlhiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBidWYgKyBsZW47CisKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjanBha2Vfa2twX3dyaXRlKCBtZF9pbmZvLCBncnAsIHBmLCBHLCB4bTEsIFhhLCBpZCwKKyAgICAgICAgICAgICAgICAmcCwgZW5kLCBmX3JuZywgcF9ybmcgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV9ra3Bfd3JpdGUoIG1kX2luZm8sIGdycCwgcGYsIEcsIHhtMiwgWGIsIGlkLAorICAgICAgICAgICAgICAgICZwLCBlbmQsIGZfcm5nLCBwX3JuZyApICk7CisKKyAgICAqb2xlbiA9IHAgLSBidWY7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFJlYWQgYW5kIHByb2Nlc3MgdGhlIGZpcnN0IHJvdW5kIG1lc3NhZ2UKKyAqLworaW50IG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX29uZSggbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIHJldHVybiggZWNqcGFrZV9ra3BwX3JlYWQoIGN0eC0+bWRfaW5mbywgJmN0eC0+Z3JwLCBjdHgtPnBvaW50X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5ncnAuRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5YcDEsICZjdHgtPlhwMiwgSURfUEVFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGxlbiApICk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBhbmQgd3JpdGUgdGhlIGZpcnN0IHJvdW5kIG1lc3NhZ2UKKyAqLworaW50IG1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF9vbmUoIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICByZXR1cm4oIGVjanBha2Vfa2twcF93cml0ZSggY3R4LT5tZF9pbmZvLCAmY3R4LT5ncnAsIGN0eC0+cG9pbnRfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5ncnAuRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+eG0xLCAmY3R4LT5YbTEsICZjdHgtPnhtMiwgJmN0eC0+WG0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRF9NSU5FLCBidWYsIGxlbiwgb2xlbiwgZl9ybmcsIHBfcm5nICkgKTsKK30KKworLyoKKyAqIENvbXB1dGUgdGhlIHN1bSBvZiB0aHJlZSBwb2ludHMgUiA9IEEgKyBCICsgQworICovCitzdGF0aWMgaW50IGVjanBha2VfZWNwX2FkZDMoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpDICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIG9uZTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZvbmUgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJm9uZSwgMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWxhZGQoIGdycCwgUiwgJm9uZSwgQSwgJm9uZSwgQiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWxhZGQoIGdycCwgUiwgJm9uZSwgUiwgJm9uZSwgQyApICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJm9uZSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFJlYWQgYW5kIHByb2Nlc3Mgc2Vjb25kIHJvdW5kIG1lc3NhZ2UgKEM6IDcuNC4yLjUsIFM6IDcuNC4yLjYpCisgKi8KK2ludCBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF90d28oIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IGJ1ZiArIGxlbjsKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgRzsgICAgLyogQzogR0IsIFM6IEdBICovCisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJkcgKTsKKworICAgIC8qCisgICAgICogU2VydmVyOiBHQSA9IFgzICArIFg0ICArIFgxICAgICAgKDcuNC4yLjYuMSkKKyAgICAgKiBDbGllbnQ6IEdCID0gWDEgICsgWDIgICsgWDMgICAgICAoNy40LjIuNS4xKQorICAgICAqIFVuaWZpZWQ6IEcgPSBYbTEgKyBYbTIgKyBYcDEKKyAgICAgKiBXZSBuZWVkIHRoYXQgYmVmb3JlIHBhcnNpbmcgaW4gb3JkZXIgdG8gY2hlY2sgWHAgYXMgd2UgcmVhZCBpdAorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV9lY3BfYWRkMyggJmN0eC0+Z3JwLCAmRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPlhtMSwgJmN0eC0+WG0yLCAmY3R4LT5YcDEgKSApOworCisgICAgLyoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICBFQ1BhcmFtZXRlcnMgY3VydmVfcGFyYW1zOyAgIC8vIG9ubHkgY2xpZW50IHJlYWRpbmcgc2VydmVyIG1zZworICAgICAqICAgICBFQ0pQQUtFS2V5S1AgZWNqcGFrZV9rZXlfa3A7CisgICAgICogfSBDbGllbnQvU2VydmVyRUNKUEFLRVBhcmFtczsKKyAgICAgKi8KKyAgICBpZiggY3R4LT5yb2xlID09IE1CRURUTFNfRUNKUEFLRV9DTElFTlQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF90bHNfcmVhZF9ncm91cCggJmdycCwgJnAsIGxlbiApICk7CisgICAgICAgIGlmKCBncnAuaWQgIT0gY3R4LT5ncnAuaWQgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRTsKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV9ra3BfcmVhZCggY3R4LT5tZF9pbmZvLCAmY3R4LT5ncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wb2ludF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkcsICZjdHgtPlhwLCBJRF9QRUVSLCAmcCwgZW5kICkgKTsKKworICAgIGlmKCBwICE9IGVuZCApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEE7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZHICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQ29tcHV0ZSBSID0gKy8tIFggKiBTIG1vZCBOLCB0YWtpbmcgY2FyZSBub3QgdG8gbGVhayBTCisgKi8KK3N0YXRpYyBpbnQgZWNqcGFrZV9tdWxfc2VjcmV0KCBtYmVkdGxzX21waSAqUiwgaW50IHNpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIGI7IC8qIEJsaW5kaW5nIHZhbHVlLCB0aGVuIHMgKyBOICogYmxpbmRpbmcgKi8KKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZiICk7CisKKyAgICAvKiBiID0gcyArIHJuZC0xMjgtYml0ICogTiAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oICZiLCAxNiwgZl9ybmcsIHBfcm5nICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZiLCAmYiwgTiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmYiwgJmIsIFMgKSApOworCisgICAgLyogUiA9IHNpZ24gKiBYICogYiBtb2QgTiAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggUiwgWCwgJmIgKSApOworICAgIFItPnMgKj0gc2lnbjsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoIFIsIFIsIE4gKSApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZiICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogR2VuZXJhdGUgYW5kIHdyaXRlIHRoZSBzZWNvbmQgcm91bmQgbWVzc2FnZSAoUzogNy40LjIuNSwgQzogNy40LjIuNikKKyAqLworaW50IG1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF90d28oIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfZWNwX3BvaW50IEc7ICAgIC8qIEM6IEdBLCBTOiBHQiAqLworICAgIG1iZWR0bHNfZWNwX3BvaW50IFhtOyAgIC8qIEM6IFhjLCBTOiBYcyAqLworICAgIG1iZWR0bHNfbXBpIHhtOyAgICAgICAgIC8qIEM6IHhjLCBTOiB4cyAqLworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gYnVmICsgbGVuOworICAgIHNpemVfdCBlY19sZW47CisKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmRyApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZYbSApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZ4bSApOworCisgICAgLyoKKyAgICAgKiBGaXJzdCBnZW5lcmF0ZSBwcml2YXRlL3B1YmxpYyBrZXkgcGFpciAoUzogNy40LjIuNS4xLCBDOiA3LjQuMi42LjEpCisgICAgICoKKyAgICAgKiBDbGllbnQ6ICBHQSA9IFgxICArIFgzICArIFg0ICB8IHhzID0geDIgICogcyB8IFhjID0geGMgKiBHQQorICAgICAqIFNlcnZlcjogIEdCID0gWDMgICsgWDEgICsgWDIgIHwgeHMgPSB4NCAgKiBzIHwgWHMgPSB4cyAqIEdCCisgICAgICogVW5pZmllZDogRyAgPSBYbTEgKyBYcDEgKyBYcDIgfCB4bSA9IHhtMiAqIHMgfCBYbSA9IHhtICogRworICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV9lY3BfYWRkMyggJmN0eC0+Z3JwLCAmRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPlhwMSwgJmN0eC0+WHAyLCAmY3R4LT5YbTEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV9tdWxfc2VjcmV0KCAmeG0sIDEsICZjdHgtPnhtMiwgJmN0eC0+cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+Z3JwLk4sIGZfcm5nLCBwX3JuZyApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWwoICZjdHgtPmdycCwgJlhtLCAmeG0sICZHLCBmX3JuZywgcF9ybmcgKSApOworCisgICAgLyoKKyAgICAgKiBOb3cgd3JpdGUgdGhpbmdzIG91dAorICAgICAqCisgICAgICogc3RydWN0IHsKKyAgICAgKiAgICAgRUNQYXJhbWV0ZXJzIGN1cnZlX3BhcmFtczsgICAvLyBvbmx5IHNlcnZlciB3cml0aW5nIGl0cyBtZXNzYWdlCisgICAgICogICAgIEVDSlBBS0VLZXlLUCBlY2pwYWtlX2tleV9rcDsKKyAgICAgKiB9IENsaWVudC9TZXJ2ZXJFQ0pQQUtFUGFyYW1zOworICAgICAqLworICAgIGlmKCBjdHgtPnJvbGUgPT0gTUJFRFRMU19FQ0pQQUtFX1NFUlZFUiApCisgICAgeworICAgICAgICBpZiggZW5kIDwgcCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfdGxzX3dyaXRlX2dyb3VwKCAmY3R4LT5ncnAsICZlY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBlbmQgLSBwICkgKTsKKyAgICAgICAgcCArPSBlY19sZW47CisgICAgfQorCisgICAgaWYoIGVuZCA8IHAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfcG9pbnQoICZjdHgtPmdycCwgJlhtLAorICAgICAgICAgICAgICAgICAgICAgY3R4LT5wb2ludF9mb3JtYXQsICZlY19sZW4sIHAsIGVuZCAtIHAgKSApOworICAgIHAgKz0gZWNfbGVuOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX3prcF93cml0ZSggY3R4LT5tZF9pbmZvLCAmY3R4LT5ncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wb2ludF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkcsICZ4bSwgJlhtLCBJRF9NSU5FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwLCBlbmQsIGZfcm5nLCBwX3JuZyApICk7CisKKyAgICAqb2xlbiA9IHAgLSBidWY7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJkcgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmWG0gKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmeG0gKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBEZXJpdmUgUE1TICg3LjQuMi43IC8gNy40LjIuOCkKKyAqLworaW50IG1iZWR0bHNfZWNqcGFrZV9kZXJpdmVfc2VjcmV0KCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBLOworICAgIG1iZWR0bHNfbXBpIG1feG0yX3MsIG9uZTsKKyAgICB1bnNpZ25lZCBjaGFyIGt4W01CRURUTFNfRUNQX01BWF9CWVRFU107CisgICAgc2l6ZV90IHhfYnl0ZXM7CisKKyAgICAqb2xlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIGN0eC0+bWRfaW5mbyApOworICAgIGlmKCBsZW4gPCAqb2xlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZLICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJm1feG0yX3MgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmb25lICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZvbmUsIDEgKSApOworCisgICAgLyoKKyAgICAgKiBDbGllbnQ6ICBLID0gKCBYcyAtIFg0ICAqIHgyICAqIHMgKSAqIHgyCisgICAgICogU2VydmVyOiAgSyA9ICggWGMgLSBYMiAgKiB4NCAgKiBzICkgKiB4NAorICAgICAqIFVuaWZpZWQ6IEsgPSAoIFhwIC0gWHAyICogeG0yICogcyApICogeG0yCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX211bF9zZWNyZXQoICZtX3htMl9zLCAtMSwgJmN0eC0+eG0yLCAmY3R4LT5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5ncnAuTiwgZl9ybmcsIHBfcm5nICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bGFkZCggJmN0eC0+Z3JwLCAmSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9uZSwgJmN0eC0+WHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtX3htMl9zLCAmY3R4LT5YcDIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfbXVsKCAmY3R4LT5ncnAsICZLLCAmY3R4LT54bTIsICZLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3JuZywgcF9ybmcgKSApOworCisgICAgLyogUE1TID0gU0hBLTI1NiggSy5YICkgKi8KKyAgICB4X2J5dGVzID0gKCBjdHgtPmdycC5wYml0cyArIDcgKSAvIDg7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoICZLLlgsIGt4LCB4X2J5dGVzICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbWQoIGN0eC0+bWRfaW5mbywga3gsIHhfYnl0ZXMsIGJ1ZiApICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJksgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmbV94bTJfcyApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZvbmUgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyN1bmRlZiBJRF9NSU5FCisjdW5kZWYgSURfUEVFUgorCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKK2ludCBtYmVkdGxzX2VjanBha2Vfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgKHZvaWQpIHZlcmJvc2U7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3RfcGFzc3dvcmRbXSA9IHsKKyAgICAweDc0LCAweDY4LCAweDcyLCAweDY1LCAweDYxLCAweDY0LCAweDZhLCAweDcwLCAweDYxLCAweDZiLCAweDY1LCAweDc0LAorICAgIDB4NjUsIDB4NzMsIDB4NzQKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF94MVtdID0geworICAgIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsCisgICAgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwKKyAgICAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLCAweDIxCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3RfeDJbXSA9IHsKKyAgICAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLAorICAgIDB4NmQsIDB4NmUsIDB4NmYsIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCisgICAgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwgMHg4MQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWNqcGFrZV90ZXN0X3gzW10gPSB7CisgICAgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywKKyAgICAweDZkLCAweDZlLCAweDZmLCAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAorICAgIDB4NzksIDB4N2EsIDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4N2YsIDB4ODEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF94NFtdID0geworICAgIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsCisgICAgMHhjZCwgMHhjZSwgMHhjZiwgMHhkMCwgMHhkMSwgMHhkMiwgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwKKyAgICAweGQ5LCAweGRhLCAweGRiLCAweGRjLCAweGRkLCAweGRlLCAweGRmLCAweGUxCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3RfY2xpX29uZVtdID0geworICAgIDB4NDEsIDB4MDQsIDB4YWMsIDB4Y2YsIDB4MDEsIDB4MDYsIDB4ZWYsIDB4ODUsIDB4OGYsIDB4YTIsIDB4ZDksIDB4MTksCisgICAgMHgzMywgMHgxMywgMHg0NiwgMHg4MCwgMHg1YSwgMHg3OCwgMHhiNSwgMHg4YiwgMHhiYSwgMHhkMCwgMHhiOCwgMHg0NCwKKyAgICAweGU1LCAweGM3LCAweDg5LCAweDI4LCAweDc5LCAweDE0LCAweDYxLCAweDg3LCAweGRkLCAweDI2LCAweDY2LCAweGFkLAorICAgIDB4YTcsIDB4ODEsIDB4YmIsIDB4N2YsIDB4MTEsIDB4MTMsIDB4NzIsIDB4MjUsIDB4MWEsIDB4ODksIDB4MTAsIDB4NjIsCisgICAgMHgxZiwgMHg2MywgMHg0ZCwgMHhmMSwgMHgyOCwgMHhhYywgMHg0OCwgMHhlMywgMHg4MSwgMHhmZCwgMHg2ZSwgMHhmOSwKKyAgICAweDA2LCAweDA3LCAweDMxLCAweGY2LCAweDk0LCAweGE0LCAweDQxLCAweDA0LCAweDFkLCAweGQwLCAweGJkLCAweDVkLAorICAgIDB4NDUsIDB4NjYsIDB4YzksIDB4YmUsIDB4ZDksIDB4Y2UsIDB4N2QsIDB4ZTcsIDB4MDEsIDB4YjUsIDB4ZTgsIDB4MmUsCisgICAgMHgwOCwgMHhlOCwgMHg0YiwgMHg3MywgMHgwNCwgMHg2NiwgMHgwMSwgMHg4YSwgMHhiOSwgMHgwMywgMHhjNywgMHg5ZSwKKyAgICAweGI5LCAweDgyLCAweDE3LCAweDIyLCAweDM2LCAweGMwLCAweGMxLCAweDcyLCAweDhhLCAweGU0LCAweGJmLCAweDczLAorICAgIDB4NjEsIDB4MGQsIDB4MzQsIDB4ZGUsIDB4NDQsIDB4MjQsIDB4NmUsIDB4ZjMsIDB4ZDksIDB4YzAsIDB4NWEsIDB4MjIsCisgICAgMHgzNiwgMHhmYiwgMHg2NiwgMHhhNiwgMHg1OCwgMHgzZCwgMHg3NCwgMHg0OSwgMHgzMCwgMHg4YiwgMHhhYiwgMHhjZSwKKyAgICAweDIwLCAweDcyLCAweGZlLCAweDE2LCAweDY2LCAweDI5LCAweDkyLCAweGU5LCAweDIzLCAweDVjLCAweDI1LCAweDAwLAorICAgIDB4MmYsIDB4MTEsIDB4YjEsIDB4NTAsIDB4ODcsIDB4YjgsIDB4MjcsIDB4MzgsIDB4ZTAsIDB4M2MsIDB4OTQsIDB4NWIsCisgICAgMHhmNywgMHhhMiwgMHg5OSwgMHg1ZCwgMHhkYSwgMHgxZSwgMHg5OCwgMHgzNCwgMHg1OCwgMHg0MSwgMHgwNCwgMHg3ZSwKKyAgICAweGE2LCAweGUzLCAweGE0LCAweDQ4LCAweDcwLCAweDM3LCAweGE5LCAweGUwLCAweGRiLCAweGQ3LCAweDkyLCAweDYyLAorICAgIDB4YjIsIDB4Y2MsIDB4MjcsIDB4M2UsIDB4NzcsIDB4OTksIDB4MzAsIDB4ZmMsIDB4MTgsIDB4NDAsIDB4OWEsIDB4YzUsCisgICAgMHgzNiwgMHgxYywgMHg1ZiwgMHhlNiwgMHg2OSwgMHhkNywgMHgwMiwgMHhlMSwgMHg0NywgMHg3OSwgMHgwYSwgMHhlYiwKKyAgICAweDRjLCAweGU3LCAweGZkLCAweDY1LCAweDc1LCAweGFiLCAweDBmLCAweDZjLCAweDdmLCAweGQxLCAweGMzLCAweDM1LAorICAgIDB4OTMsIDB4OWEsIDB4YTgsIDB4NjMsIDB4YmEsIDB4MzcsIDB4ZWMsIDB4OTEsIDB4YjcsIDB4ZTMsIDB4MmIsIDB4YjAsCisgICAgMHgxMywgMHhiYiwgMHgyYiwgMHg0MSwgMHgwNCwgMHhhNCwgMHg5NSwgMHg1OCwgMHhkMywgMHgyZSwgMHhkMSwgMHhlYiwKKyAgICAweGZjLCAweDE4LCAweDE2LCAweGFmLCAweDRmLCAweGYwLCAweDliLCAweDU1LCAweGZjLCAweGI0LCAweGNhLCAweDQ3LAorICAgIDB4YjIsIDB4YTAsIDB4MmQsIDB4MWUsIDB4N2MsIDB4YWYsIDB4MTEsIDB4NzksIDB4ZWEsIDB4M2YsIDB4ZTEsIDB4MzksCisgICAgMHg1YiwgMHgyMiwgMHhiOCwgMHg2MSwgMHg5NiwgMHg0MCwgMHgxNiwgMHhmYSwgMHhiYSwgMHhmNywgMHgyYywgMHg5NywKKyAgICAweDU2LCAweDk1LCAweGQ5LCAweDNkLCAweDRkLCAweGYwLCAweGU1LCAweDE5LCAweDdmLCAweGU5LCAweGYwLCAweDQwLAorICAgIDB4NjMsIDB4NGUsIDB4ZDUsIDB4OTcsIDB4NjQsIDB4OTMsIDB4NzcsIDB4ODcsIDB4YmUsIDB4MjAsIDB4YmMsIDB4NGQsCisgICAgMHhlZSwgMHhiYiwgMHhmOSwgMHhiOCwgMHhkNiwgMHgwYSwgMHgzMywgMHg1ZiwgMHgwNCwgMHg2YywgMHhhMywgMHhhYSwKKyAgICAweDk0LCAweDFlLCAweDQ1LCAweDg2LCAweDRjLCAweDdjLCAweGFkLCAweGVmLCAweDljLCAweGY3LCAweDViLCAweDNkLAorICAgIDB4OGIsIDB4MDEsIDB4MGUsIDB4NDQsIDB4M2UsIDB4ZjAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF9zcnZfb25lW10gPSB7CisgICAgMHg0MSwgMHgwNCwgMHg3ZSwgMHhhNiwgMHhlMywgMHhhNCwgMHg0OCwgMHg3MCwgMHgzNywgMHhhOSwgMHhlMCwgMHhkYiwKKyAgICAweGQ3LCAweDkyLCAweDYyLCAweGIyLCAweGNjLCAweDI3LCAweDNlLCAweDc3LCAweDk5LCAweDMwLCAweGZjLCAweDE4LAorICAgIDB4NDAsIDB4OWEsIDB4YzUsIDB4MzYsIDB4MWMsIDB4NWYsIDB4ZTYsIDB4NjksIDB4ZDcsIDB4MDIsIDB4ZTEsIDB4NDcsCisgICAgMHg3OSwgMHgwYSwgMHhlYiwgMHg0YywgMHhlNywgMHhmZCwgMHg2NSwgMHg3NSwgMHhhYiwgMHgwZiwgMHg2YywgMHg3ZiwKKyAgICAweGQxLCAweGMzLCAweDM1LCAweDkzLCAweDlhLCAweGE4LCAweDYzLCAweGJhLCAweDM3LCAweGVjLCAweDkxLCAweGI3LAorICAgIDB4ZTMsIDB4MmIsIDB4YjAsIDB4MTMsIDB4YmIsIDB4MmIsIDB4NDEsIDB4MDQsIDB4MDksIDB4ZjgsIDB4NWIsIDB4M2QsCisgICAgMHgyMCwgMHhlYiwgMHhkNywgMHg4OCwgMHg1YywgMHhlNCwgMHg2NCwgMHhjMCwgMHg4ZCwgMHgwNSwgMHg2ZCwgMHg2NCwKKyAgICAweDI4LCAweGZlLCAweDRkLCAweGQ5LCAweDI4LCAweDdhLCAweGEzLCAweDY1LCAweGYxLCAweDMxLCAweGY0LCAweDM2LAorICAgIDB4MGYsIDB4ZjMsIDB4ODYsIDB4ZDgsIDB4NDYsIDB4ODksIDB4OGIsIDB4YzQsIDB4YjQsIDB4MTUsIDB4ODMsIDB4YzIsCisgICAgMHhhNSwgMHgxOSwgMHg3ZiwgMHg2NSwgMHhkNywgMHg4NywgMHg0MiwgMHg3NCwgMHg2YywgMHgxMiwgMHhhNSwgMHhlYywKKyAgICAweDBhLCAweDRmLCAweGZlLCAweDJmLCAweDI3LCAweDBhLCAweDc1LCAweDBhLCAweDFkLCAweDhmLCAweGI1LCAweDE2LAorICAgIDB4MjAsIDB4OTMsIDB4NGQsIDB4NzQsIDB4ZWIsIDB4NDMsIDB4ZTUsIDB4NGQsIDB4ZjQsIDB4MjQsIDB4ZmQsIDB4OTYsCisgICAgMHgzMCwgMHg2YywgMHgwMSwgMHgxNywgMHhiZiwgMHgxMywgMHgxYSwgMHhmYSwgMHhiZiwgMHg5MCwgMHhhOSwgMHhkMywKKyAgICAweDNkLCAweDExLCAweDk4LCAweGQ5LCAweDA1LCAweDE5LCAweDM3LCAweDM1LCAweDE0LCAweDQxLCAweDA0LCAweDE5LAorICAgIDB4MGEsIDB4MDcsIDB4NzAsIDB4MGYsIDB4ZmEsIDB4NGIsIDB4ZTYsIDB4YWUsIDB4MWQsIDB4NzksIDB4ZWUsIDB4MGYsCisgICAgMHgwNiwgMHhhZSwgMHhiNSwgMHg0NCwgMHhjZCwgMHg1YSwgMHhkZCwgMHhhYSwgMHhiZSwgMHhkZiwgMHg3MCwgMHhmOCwKKyAgICAweDYyLCAweDMzLCAweDIxLCAweDMzLCAweDJjLCAweDU0LCAweGYzLCAweDU1LCAweGYwLCAweGZiLCAweGZlLCAweGM3LAorICAgIDB4ODMsIDB4ZWQsIDB4MzUsIDB4OWUsIDB4NWQsIDB4MGIsIDB4ZjcsIDB4MzcsIDB4N2EsIDB4MGYsIDB4YzQsIDB4ZWEsCisgICAgMHg3YSwgMHhjZSwgMHg0NywgMHgzYywgMHg5YywgMHgxMSwgMHgyYiwgMHg0MSwgMHhjYywgMHhkNCwgMHgxYSwgMHhjNSwKKyAgICAweDZhLCAweDU2LCAweDEyLCAweDQxLCAweDA0LCAweDM2LCAweDBhLCAweDFjLCAweGVhLCAweDMzLCAweGZjLCAweGU2LAorICAgIDB4NDEsIDB4MTUsIDB4NjQsIDB4NTgsIDB4ZTAsIDB4YTQsIDB4ZWEsIDB4YzIsIDB4MTksIDB4ZTksIDB4NjgsIDB4MzEsCisgICAgMHhlNiwgMHhhZSwgMHhiYywgMHg4OCwgMHhiMywgMHhmMywgMHg3NSwgMHgyZiwgMHg5MywgMHhhMCwgMHgyOCwgMHgxZCwKKyAgICAweDFiLCAweGYxLCAweGZiLCAweDEwLCAweDYwLCAweDUxLCAweGRiLCAweDk2LCAweDk0LCAweGE4LCAweGQ2LCAweGU4LAorICAgIDB4NjIsIDB4YTUsIDB4ZWYsIDB4MTMsIDB4MjQsIDB4YTMsIDB4ZDksIDB4ZTIsIDB4NzgsIDB4OTQsIDB4ZjEsIDB4ZWUsCisgICAgMHg0ZiwgMHg3YywgMHg1OSwgMHgxOSwgMHg5OSwgMHg2NSwgMHhhOCwgMHhkZCwgMHg0YSwgMHgyMCwgMHg5MSwgMHg4NCwKKyAgICAweDdkLCAweDJkLCAweDIyLCAweGRmLCAweDNlLCAweGU1LCAweDVmLCAweGFhLCAweDJhLCAweDNmLCAweGIzLCAweDNmLAorICAgIDB4ZDIsIDB4ZDEsIDB4ZTAsIDB4NTUsIDB4YTAsIDB4N2EsIDB4N2MsIDB4NjEsIDB4ZWMsIDB4ZmIsIDB4OGQsIDB4ODAsCisgICAgMHhlYywgMHgwMCwgMHhjMiwgMHhjOSwgMHhlYiwgMHgxMgorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWNqcGFrZV90ZXN0X3Nydl90d29bXSA9IHsKKyAgICAweDAzLCAweDAwLCAweDE3LCAweDQxLCAweDA0LCAweDBmLCAweGIyLCAweDJiLCAweDFkLCAweDVkLCAweDExLCAweDIzLAorICAgIDB4ZTAsIDB4ZWYsIDB4OWYsIDB4ZWIsIDB4OWQsIDB4OGEsIDB4MmUsIDB4NTksIDB4MGEsIDB4MWYsIDB4NGQsIDB4N2MsCisgICAgMHhlZCwgMHgyYywgMHgyYiwgMHgwNiwgMHg1OCwgMHg2ZSwgMHg4ZiwgMHgyYSwgMHgxNiwgMHhkNCwgMHhlYiwgMHgyZiwKKyAgICAweGRhLCAweDQzLCAweDI4LCAweGEyLCAweDBiLCAweDA3LCAweGQ4LCAweGZkLCAweDY2LCAweDc2LCAweDU0LCAweGNhLAorICAgIDB4MTgsIDB4YzUsIDB4NGUsIDB4MzIsIDB4YTMsIDB4MzMsIDB4YTAsIDB4ODQsIDB4NTQsIDB4NTEsIDB4ZTksIDB4MjYsCisgICAgMHhlZSwgMHg4OCwgMHgwNCwgMHhmZCwgMHg3YSwgMHhmMCwgMHhhYSwgMHhhNywgMHhhNiwgMHg0MSwgMHgwNCwgMHg1NSwKKyAgICAweDE2LCAweGVhLCAweDNlLCAweDU0LCAweGEwLCAweGQ1LCAweGQ4LCAweGIyLCAweGNlLCAweDc4LCAweDZiLCAweDM4LAorICAgIDB4ZDMsIDB4ODMsIDB4MzcsIDB4MDAsIDB4MjksIDB4YTUsIDB4ZGIsIDB4ZTQsIDB4NDUsIDB4OWMsIDB4OWQsIDB4ZDYsCisgICAgMHgwMSwgMHhiNCwgMHgwOCwgMHhhMiwgMHg0YSwgMHhlNiwgMHg0NiwgMHg1YywgMHg4YSwgMHhjOSwgMHgwNSwgMHhiOSwKKyAgICAweGViLCAweDAzLCAweGI1LCAweGQzLCAweDY5LCAweDFjLCAweDEzLCAweDllLCAweGY4LCAweDNmLCAweDFjLCAweGQ0LAorICAgIDB4MjAsIDB4MGYsIDB4NmMsIDB4OWMsIDB4ZDQsIDB4ZWMsIDB4MzksIDB4MjIsIDB4MTgsIDB4YTUsIDB4OWUsIDB4ZDIsCisgICAgMHg0MywgMHhkMywgMHhjOCwgMHgyMCwgMHhmZiwgMHg3MiwgMHg0YSwgMHg5YSwgMHg3MCwgMHhiOCwgMHg4YywgMHhiOCwKKyAgICAweDZmLCAweDIwLCAweGI0LCAweDM0LCAweGM2LCAweDg2LCAweDVhLCAweGExLCAweGNkLCAweDc5LCAweDA2LCAweGRkLAorICAgIDB4N2MsIDB4OWIsIDB4Y2UsIDB4MzUsIDB4MjUsIDB4ZjUsIDB4MDgsIDB4MjcsIDB4NmYsIDB4MjYsIDB4ODMsIDB4NmMKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF9jbGlfdHdvW10gPSB7CisgICAgMHg0MSwgMHgwNCwgMHg2OSwgMHhkNSwgMHg0ZSwgMHhlOCwgMHg1ZSwgMHg5MCwgMHhjZSwgMHgzZiwgMHgxMiwgMHg0NiwKKyAgICAweDc0LCAweDJkLCAweGU1LCAweDA3LCAweGU5LCAweDM5LCAweGU4LCAweDFkLCAweDFkLCAweGMxLCAweGM1LCAweGNiLAorICAgIDB4OTgsIDB4OGIsIDB4NTgsIDB4YzMsIDB4MTAsIDB4YzksIDB4ZmQsIDB4ZDksIDB4NTIsIDB4NGQsIDB4OTMsIDB4NzIsCisgICAgMHgwYiwgMHg0NSwgMHg1NCwgMHgxYywgMHg4MywgMHhlZSwgMHg4OCwgMHg0MSwgMHgxOSwgMHgxZCwgMHhhNywgMHhjZSwKKyAgICAweGQ4LCAweDZlLCAweDMzLCAweDEyLCAweGQ0LCAweDM2LCAweDIzLCAweGMxLCAweGQ2LCAweDNlLCAweDc0LCAweDk4LAorICAgIDB4OWEsIDB4YmEsIDB4NGEsIDB4ZmYsIDB4ZDEsIDB4ZWUsIDB4NDEsIDB4MDQsIDB4MDcsIDB4N2UsIDB4OGMsIDB4MzEsCisgICAgMHhlMiwgMHgwZSwgMHg2YiwgMHhlZCwgMHhiNywgMHg2MCwgMHhjMSwgMHgzNSwgMHg5MywgMHhlNiwgMHg5ZiwgMHgxNSwKKyAgICAweGJlLCAweDg1LCAweGMyLCAweDdkLCAweDY4LCAweGNkLCAweDA5LCAweGNjLCAweGI4LCAweGM0LCAweDE4LCAweDM2LAorICAgIDB4MDgsIDB4OTEsIDB4N2MsIDB4NWMsIDB4M2QsIDB4NDAsIDB4OWYsIDB4YWMsIDB4MzksIDB4ZmUsIDB4ZmUsIDB4ZTgsCisgICAgMHgyZiwgMHg3MiwgMHg5MiwgMHhkMywgMHg2ZiwgMHgwZCwgMHgyMywgMHhlMCwgMHg1NSwgMHg5MSwgMHgzZiwgMHg0NSwKKyAgICAweGE1LCAweDJiLCAweDg1LCAweGRkLCAweDhhLCAweDIwLCAweDUyLCAweGU5LCAweGUxLCAweDI5LCAweGJiLCAweDRkLAorICAgIDB4MjAsIDB4MGYsIDB4MDEsIDB4MWYsIDB4MTksIDB4NDgsIDB4MzUsIDB4MzUsIDB4YTYsIDB4ZTgsIDB4OWEsIDB4NTgsCisgICAgMHgwYywgMHg5YiwgMHgwMCwgMHgwMywgMHhiYSwgMHhmMiwgMHgxNCwgMHg2MiwgMHhlYywgMHhlOSwgMHgxYSwgMHg4MiwKKyAgICAweGNjLCAweDM4LCAweGRiLCAweGRjLCAweGFlLCAweDYwLCAweGQ5LCAweGM1LCAweDRjCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3RfcG1zW10gPSB7CisgICAgMHhmMywgMHhkNCwgMHg3ZiwgMHg1OSwgMHg5OCwgMHg0NCwgMHhkYiwgMHg5MiwgMHhhNSwgMHg2OSwgMHhiYiwgMHhlNywKKyAgICAweDk4LCAweDFlLCAweDM5LCAweGQ5LCAweDMxLCAweGZkLCAweDc0LCAweDNiLCAweGYyLCAweDJlLCAweDk4LCAweGY5LAorICAgIDB4YjQsIDB4MzgsIDB4ZjcsIDB4MTksIDB4ZDMsIDB4YzQsIDB4ZjMsIDB4NTEKK307CisKKy8qIExvYWQgbXkgcHJpdmF0ZSBrZXlzIGFuZCBnZW5lcmF0ZSB0aGUgY29ycmVwb25kaW5nIHB1YmxpYyBrZXlzICovCitzdGF0aWMgaW50IGVjanBha2VfdGVzdF9sb2FkKCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqeG0xLCBzaXplX3QgbGVuMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnhtMiwgc2l6ZV90IGxlbjIgKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmY3R4LT54bTEsIHhtMSwgbGVuMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJmN0eC0+eG0yLCB4bTIsIGxlbjIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfbXVsKCAmY3R4LT5ncnAsICZjdHgtPlhtMSwgJmN0eC0+eG0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5ncnAuRywgTlVMTCwgTlVMTCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWwoICZjdHgtPmdycCwgJmN0eC0+WG0yLCAmY3R4LT54bTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPmdycC5HLCBOVUxMLCBOVUxMICkgKTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKiBGb3IgdGVzdHMgd2UgZG9uJ3QgbmVlZCBhIHNlY3VyZSBSTkc7CisgKiB1c2UgdGhlIExHQyBmcm9tIE51bWVyaWNhbCBSZWNpcGVzIGZvciBzaW1wbGljaXR5ICovCitzdGF0aWMgaW50IGVjanBha2VfbGdjKCB2b2lkICpwLCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBsZW4gKQoreworICAgIHN0YXRpYyB1aW50MzJfdCB4ID0gNDI7CisgICAgKHZvaWQpIHA7CisKKyAgICB3aGlsZSggbGVuID4gMCApCisgICAgeworICAgICAgICBzaXplX3QgdXNlX2xlbiA9IGxlbiA+IDQgPyA0IDogbGVuOworICAgICAgICB4ID0gMTY2NDUyNSAqIHggKyAxMDEzOTA0MjIzOworICAgICAgICBtZW1jcHkoIG91dCwgJngsIHVzZV9sZW4gKTsKKyAgICAgICAgb3V0ICs9IHVzZV9sZW47CisgICAgICAgIGxlbiAtPSB1c2VfbGVuOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisjZGVmaW5lIFRFU1RfQVNTRVJUKCB4ICkgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoIHggKSAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXQgPSAwOyAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXQgPSAxOyAgICAgICAgXAorICAgICAgICAgICAgZ290byBjbGVhbnVwOyAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSggMCApCisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfZWNqcGFrZV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0IGNsaTsKKyAgICBtYmVkdGxzX2VjanBha2VfY29udGV4dCBzcnY7CisgICAgdW5zaWduZWQgY2hhciBidWZbNTEyXSwgcG1zWzMyXTsKKyAgICBzaXplX3QgbGVuLCBwbXNsZW47CisKKyAgICBtYmVkdGxzX2VjanBha2VfaW5pdCggJmNsaSApOworICAgIG1iZWR0bHNfZWNqcGFrZV9pbml0KCAmc3J2ICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEVDSlBBS0UgdGVzdCAjMCAoc2V0dXApOiAiICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3NldHVwKCAmY2xpLCBNQkVEVExTX0VDSlBBS0VfQ0xJRU5ULAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxLAorICAgICAgICAgICAgICAgICAgICBlY2pwYWtlX3Rlc3RfcGFzc3dvcmQsCisgICAgICAgICAgICBzaXplb2YoIGVjanBha2VfdGVzdF9wYXNzd29yZCApICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9zZXR1cCggJnNydiwgTUJFRFRMU19FQ0pQQUtFX1NFUlZFUiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMSwKKyAgICAgICAgICAgICAgICAgICAgZWNqcGFrZV90ZXN0X3Bhc3N3b3JkLAorICAgICAgICAgICAgc2l6ZW9mKCBlY2pwYWtlX3Rlc3RfcGFzc3dvcmQgKSApID09IDAgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBFQ0pQQUtFIHRlc3QgIzEgKHJhbmRvbSBoYW5kc2hha2UpOiAiICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3dyaXRlX3JvdW5kX29uZSggJmNsaSwKKyAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoIGJ1ZiApLCAmbGVuLCBlY2pwYWtlX2xnYywgTlVMTCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF9vbmUoICZzcnYsIGJ1ZiwgbGVuICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF9vbmUoICZzcnYsCisgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKCBidWYgKSwgJmxlbiwgZWNqcGFrZV9sZ2MsIE5VTEwgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfb25lKCAmY2xpLCBidWYsIGxlbiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2Vfd3JpdGVfcm91bmRfdHdvKCAmc3J2LAorICAgICAgICAgICAgICAgICBidWYsIHNpemVvZiggYnVmICksICZsZW4sIGVjanBha2VfbGdjLCBOVUxMICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX3R3byggJmNsaSwgYnVmLCBsZW4gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX2Rlcml2ZV9zZWNyZXQoICZjbGksCisgICAgICAgICAgICAgICAgIHBtcywgc2l6ZW9mKCBwbXMgKSwgJnBtc2xlbiwgZWNqcGFrZV9sZ2MsIE5VTEwgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3dyaXRlX3JvdW5kX3R3byggJmNsaSwKKyAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoIGJ1ZiApLCAmbGVuLCBlY2pwYWtlX2xnYywgTlVMTCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF90d28oICZzcnYsIGJ1ZiwgbGVuICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9kZXJpdmVfc2VjcmV0KCAmc3J2LAorICAgICAgICAgICAgICAgICBidWYsIHNpemVvZiggYnVmICksICZsZW4sIGVjanBha2VfbGdjLCBOVUxMICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIGxlbiA9PSBwbXNsZW4gKTsKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBidWYsIHBtcywgbGVuICkgPT0gMCApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEVDSlBBS0UgdGVzdCAjMiAocmVmZXJlbmNlIGhhbmRzaGFrZSk6ICIgKTsKKworICAgIC8qIFNpbXVsYXRlIGdlbmVyYXRpb24gb2Ygcm91bmQgb25lICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX3Rlc3RfbG9hZCggJmNsaSwKKyAgICAgICAgICAgICAgICBlY2pwYWtlX3Rlc3RfeDEsIHNpemVvZiggZWNqcGFrZV90ZXN0X3gxICksCisgICAgICAgICAgICAgICAgZWNqcGFrZV90ZXN0X3gyLCBzaXplb2YoIGVjanBha2VfdGVzdF94MiApICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV90ZXN0X2xvYWQoICZzcnYsCisgICAgICAgICAgICAgICAgZWNqcGFrZV90ZXN0X3gzLCBzaXplb2YoIGVjanBha2VfdGVzdF94MyApLAorICAgICAgICAgICAgICAgIGVjanBha2VfdGVzdF94NCwgc2l6ZW9mKCBlY2pwYWtlX3Rlc3RfeDQgKSApICk7CisKKyAgICAvKiBSZWFkIHJvdW5kIG9uZSAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF9vbmUoICZzcnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2pwYWtlX3Rlc3RfY2xpX29uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGVjanBha2VfdGVzdF9jbGlfb25lICkgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfb25lKCAmY2xpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNqcGFrZV90ZXN0X3Nydl9vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBlY2pwYWtlX3Rlc3Rfc3J2X29uZSApICkgPT0gMCApOworCisgICAgLyogU2tpcCBnZW5lcmF0aW9uIG9mIHJvdW5kIHR3bywgcmVhZCByb3VuZCB0d28gKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfdHdvKCAmY2xpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNqcGFrZV90ZXN0X3Nydl90d28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBlY2pwYWtlX3Rlc3Rfc3J2X3R3byApICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX3R3byggJnNydiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjanBha2VfdGVzdF9jbGlfdHdvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggZWNqcGFrZV90ZXN0X2NsaV90d28gKSApID09IDAgKTsKKworICAgIC8qIFNlcnZlciBkZXJpdmVzIFBNUyAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2VfZGVyaXZlX3NlY3JldCggJnNydiwKKyAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoIGJ1ZiApLCAmbGVuLCBlY2pwYWtlX2xnYywgTlVMTCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBsZW4gPT0gc2l6ZW9mKCBlY2pwYWtlX3Rlc3RfcG1zICkgKTsKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBidWYsIGVjanBha2VfdGVzdF9wbXMsIGxlbiApID09IDAgKTsKKworICAgIG1lbXNldCggYnVmLCAwLCBsZW4gKTsgLyogQXZvaWQgaW50ZXJmZXJlbmNlcyB3aXRoIG5leHQgc3RlcCAqLworCisgICAgLyogQ2xpZW50IGRlcml2ZXMgUE1TICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9kZXJpdmVfc2VjcmV0KCAmY2xpLAorICAgICAgICAgICAgICAgICBidWYsIHNpemVvZiggYnVmICksICZsZW4sIGVjanBha2VfbGdjLCBOVUxMICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIGxlbiA9PSBzaXplb2YoIGVjanBha2VfdGVzdF9wbXMgKSApOworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIGJ1ZiwgZWNqcGFrZV90ZXN0X3BtcywgbGVuICkgPT0gMCApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY2pwYWtlX2ZyZWUoICZjbGkgKTsKKyAgICBtYmVkdGxzX2VjanBha2VfZnJlZSggJnNydiApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICByZXQgPSAxOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI3VuZGVmIFRFU1RfQVNTRVJUCisKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCAmJiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19FQ0pQQUtFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VjcC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZWNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUxZjIyNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VjcC5jCkBAIC0wLDAgKzEsMjA5MiBAQAorLyoKKyAqICBFbGxpcHRpYyBjdXJ2ZXMgb3ZlciBHRihwKTogZ2VuZXJpYyBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoKKyAqIFJlZmVyZW5jZXM6CisgKgorICogU0VDMSBodHRwOi8vd3d3LnNlY2cub3JnL2luZGV4LnBocD9hY3Rpb249c2VjZyxkb2NzX3NlY2cKKyAqIEdFQ0MgPSBHdWlkZSB0byBFbGxpcHRpYyBDdXJ2ZSBDcnlwdG9ncmFwaHkgLSBIYW5rZXJzb24sIE1lbmV6ZXMsIFZhbnN0b25lCisgKiBGSVBTIDE4Ni0zIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9maXBzL2ZpcHMxODYtMy9maXBzXzE4Ni0zLnBkZgorICogUkZDIDQ0OTIgZm9yIHRoZSByZWxhdGVkIFRMUyBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMKKyAqCisgKiBbQ3VydmUyNTUxOV0gaHR0cDovL2NyLnlwLnRvL2VjZGgvY3VydmUyNTUxOS0yMDA2MDIwOS5wZGYKKyAqCisgKiBbMl0gQ09ST04sIEplYW4tUydlYmFzdGllbi4gUmVzaXN0YW5jZSBhZ2FpbnN0IGRpZmZlcmVudGlhbCBwb3dlciBhbmFseXNpcworICogICAgIGZvciBlbGxpcHRpYyBjdXJ2ZSBjcnlwdG9zeXN0ZW1zLiBJbiA6IENyeXB0b2dyYXBoaWMgSGFyZHdhcmUgYW5kCisgKiAgICAgRW1iZWRkZWQgU3lzdGVtcy4gU3ByaW5nZXIgQmVybGluIEhlaWRlbGJlcmcsIDE5OTkuIHAuIDI5Mi0zMDIuCisgKiAgICAgPGh0dHA6Ly9saW5rLnNwcmluZ2VyLmNvbS9jaGFwdGVyLzEwLjEwMDcvMy01NDAtNDgwNTktNV8yNT4KKyAqCisgKiBbM10gSEVEQUJPVSwgTXVzdGFwaGEsIFBJTkVMLCBQaWVycmUsIGV0IEInRU4nRVRFQVUsIEx1Y2llbi4gQSBjb21iIG1ldGhvZCB0bworICogICAgIHJlbmRlciBFQ0MgcmVzaXN0YW50IGFnYWluc3QgU2lkZSBDaGFubmVsIEF0dGFja3MuIElBQ1IgQ3J5cHRvbG9neQorICogICAgIGVQcmludCBBcmNoaXZlLCAyMDA0LCB2b2wuIDIwMDQsIHAuIDM0Mi4KKyAqICAgICA8aHR0cDovL2VwcmludC5pYWNyLm9yZy8yMDA0LzM0Mi5wZGY+CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvZWNwLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZgorCisjaWYgKCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgfHwgZGVmaW5lZChfTVNDX1ZFUikgKSAmJiBcCisgICAgIWRlZmluZWQoaW5saW5lKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUgaW5saW5lIF9faW5saW5lCisjZW5kaWYKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisvKgorICogQ291bnRzIG9mIHBvaW50IGFkZGl0aW9uIGFuZCBkb3VibGluZywgYW5kIGZpZWxkIG11bHRpcGxpY2F0aW9ucy4KKyAqIFVzZWQgdG8gdGVzdCByZXNpc3RhbmNlIG9mIHBvaW50IG11bHRpcGxpY2F0aW9uIHRvIHNpbXBsZSB0aW1pbmcgYXR0YWNrcy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgYWRkX2NvdW50LCBkYmxfY291bnQsIG11bF9jb3VudDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCkgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRCkgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCkgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCkgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCkgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQpICAgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQpICAgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQpICAgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCkgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCkgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCkKKyNkZWZpbmUgRUNQX1NIT1JUV0VJRVJTVFJBU1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQpCisjZGVmaW5lIEVDUF9NT05UR09NRVJZCisjZW5kaWYKKworLyoKKyAqIEN1cnZlIHR5cGVzOiBpbnRlcm5hbCBmb3Igbm93LCBtaWdodCBiZSBleHBvc2VkIGxhdGVyCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIEVDUF9UWVBFX05PTkUgPSAwLAorICAgIEVDUF9UWVBFX1NIT1JUX1dFSUVSU1RSQVNTLCAgICAvKiB5XjIgPSB4XjMgKyBhIHggKyBiICAgICAgKi8KKyAgICBFQ1BfVFlQRV9NT05UR09NRVJZLCAgICAgICAgICAgLyogeV4yID0geF4zICsgYSB4XjIgKyB4ICAgICovCit9IGVjcF9jdXJ2ZV90eXBlOworCisvKgorICogTGlzdCBvZiBzdXBwb3J0ZWQgY3VydmVzOgorICogIC0gaW50ZXJuYWwgSUQKKyAqICAtIFRMUyBOYW1lZEN1cnZlIElEIChSRkMgNDQ5MiBzZWMuIDUuMS4xLCBSRkMgNzA3MSBzZWMuIDIpCisgKiAgLSBzaXplIGluIGJpdHMKKyAqICAtIHJlYWRhYmxlIG5hbWUKKyAqCisgKiBDdXJ2ZXMgYXJlIGxpc3RlZCBpbiBvcmRlcjogbGFyZ2VzdCBjdXJ2ZXMgZmlyc3QsIGFuZCBmb3IgYSBnaXZlbiBzaXplLAorICogZmFzdGVzdCBjdXJ2ZXMgZmlyc3QuIFRoaXMgcHJvdmlkZXMgdGhlIGRlZmF1bHQgb3JkZXIgZm9yIHRoZSBTU0wgbW9kdWxlLgorICoKKyAqIFJlbWluZGVyOiB1cGRhdGUgcHJvZmlsZXMgaW4geDUwOV9jcnQuYyB3aGVuIGFkZGluZyBhIG5ldyBjdXJ2ZXMhCisgKi8KK3N0YXRpYyBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvIGVjcF9zdXBwb3J0ZWRfY3VydmVzW10gPQoreworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQpCisgICAgeyBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjEsICAgIDI1LCAgICAgNTIxLCAgICAic2VjcDUyMXIxIiAgICAgICAgIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRCkKKyAgICB7IE1CRURUTFNfRUNQX0RQX0JQNTEyUjEsICAgICAgMjgsICAgICA1MTIsICAgICJicmFpbnBvb2xQNTEycjEiICAgfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQpCisgICAgeyBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjEsICAgIDI0LCAgICAgMzg0LCAgICAic2VjcDM4NHIxIiAgICAgICAgIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRCkKKyAgICB7IE1CRURUTFNfRUNQX0RQX0JQMzg0UjEsICAgICAgMjcsICAgICAzODQsICAgICJicmFpbnBvb2xQMzg0cjEiICAgfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQpCisgICAgeyBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEsICAgIDIzLCAgICAgMjU2LCAgICAic2VjcDI1NnIxIiAgICAgICAgIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEKQorICAgIHsgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxLCAgICAyMiwgICAgIDI1NiwgICAgInNlY3AyNTZrMSIgICAgICAgICB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQpCisgICAgeyBNQkVEVExTX0VDUF9EUF9CUDI1NlIxLCAgICAgIDI2LCAgICAgMjU2LCAgICAiYnJhaW5wb29sUDI1NnIxIiAgIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEKQorICAgIHsgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxLCAgICAyMSwgICAgIDIyNCwgICAgInNlY3AyMjRyMSIgICAgICAgICB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCkKKyAgICB7IE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMSwgICAgMjAsICAgICAyMjQsICAgICJzZWNwMjI0azEiICAgICAgICAgfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQpCisgICAgeyBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjEsICAgIDE5LCAgICAgMTkyLCAgICAic2VjcDE5MnIxIiAgICAgICAgIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEKQorICAgIHsgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxLCAgICAxOCwgICAgIDE5MiwgICAgInNlY3AxOTJrMSIgICAgICAgICB9LAorI2VuZGlmCisgICAgeyBNQkVEVExTX0VDUF9EUF9OT05FLCAgICAgICAgICAwLCAgICAgMCwgICAgICBOVUxMICAgICAgICAgICAgICAgIH0sCit9OworCisjZGVmaW5lIEVDUF9OQl9DVVJWRVMgICBzaXplb2YoIGVjcF9zdXBwb3J0ZWRfY3VydmVzICkgLyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGVjcF9zdXBwb3J0ZWRfY3VydmVzWzBdICkKKworc3RhdGljIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGVjcF9zdXBwb3J0ZWRfZ3JwX2lkW0VDUF9OQl9DVVJWRVNdOworCisvKgorICogTGlzdCBvZiBzdXBwb3J0ZWQgY3VydmVzIGFuZCBhc3NvY2lhdGVkIGluZm8KKyAqLworY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqbWJlZHRsc19lY3BfY3VydmVfbGlzdCggdm9pZCApCit7CisgICAgcmV0dXJuKCBlY3Bfc3VwcG9ydGVkX2N1cnZlcyApOworfQorCisvKgorICogTGlzdCBvZiBzdXBwb3J0ZWQgY3VydmVzLCBncm91cCBJRCBvbmx5CisgKi8KK2NvbnN0IG1iZWR0bHNfZWNwX2dyb3VwX2lkICptYmVkdGxzX2VjcF9ncnBfaWRfbGlzdCggdm9pZCApCit7CisgICAgc3RhdGljIGludCBpbml0X2RvbmUgPSAwOworCisgICAgaWYoICEgaW5pdF9kb25lICkKKyAgICB7CisgICAgICAgIHNpemVfdCBpID0gMDsKKyAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqY3VydmVfaW5mbzsKKworICAgICAgICBmb3IoIGN1cnZlX2luZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCk7CisgICAgICAgICAgICAgY3VydmVfaW5mby0+Z3JwX2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7CisgICAgICAgICAgICAgY3VydmVfaW5mbysrICkKKyAgICAgICAgeworICAgICAgICAgICAgZWNwX3N1cHBvcnRlZF9ncnBfaWRbaSsrXSA9IGN1cnZlX2luZm8tPmdycF9pZDsKKyAgICAgICAgfQorICAgICAgICBlY3Bfc3VwcG9ydGVkX2dycF9pZFtpXSA9IE1CRURUTFNfRUNQX0RQX05PTkU7CisKKyAgICAgICAgaW5pdF9kb25lID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4oIGVjcF9zdXBwb3J0ZWRfZ3JwX2lkICk7Cit9CisKKy8qCisgKiBHZXQgdGhlIGN1cnZlIGluZm8gZm9yIHRoZSBpbnRlcm5hbCBpZGVudGlmaWVyCisgKi8KK2NvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKm1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV9ncnBfaWQoIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGdycF9pZCApCit7CisgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqY3VydmVfaW5mbzsKKworICAgIGZvciggY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKTsKKyAgICAgICAgIGN1cnZlX2luZm8tPmdycF9pZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOworICAgICAgICAgY3VydmVfaW5mbysrICkKKyAgICB7CisgICAgICAgIGlmKCBjdXJ2ZV9pbmZvLT5ncnBfaWQgPT0gZ3JwX2lkICkKKyAgICAgICAgICAgIHJldHVybiggY3VydmVfaW5mbyApOworICAgIH0KKworICAgIHJldHVybiggTlVMTCApOworfQorCisvKgorICogR2V0IHRoZSBjdXJ2ZSBpbmZvIGZyb20gdGhlIFRMUyBpZGVudGlmaWVyCisgKi8KK2NvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKm1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV90bHNfaWQoIHVpbnQxNl90IHRsc19pZCApCit7CisgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqY3VydmVfaW5mbzsKKworICAgIGZvciggY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKTsKKyAgICAgICAgIGN1cnZlX2luZm8tPmdycF9pZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOworICAgICAgICAgY3VydmVfaW5mbysrICkKKyAgICB7CisgICAgICAgIGlmKCBjdXJ2ZV9pbmZvLT50bHNfaWQgPT0gdGxzX2lkICkKKyAgICAgICAgICAgIHJldHVybiggY3VydmVfaW5mbyApOworICAgIH0KKworICAgIHJldHVybiggTlVMTCApOworfQorCisvKgorICogR2V0IHRoZSBjdXJ2ZSBpbmZvIGZyb20gdGhlIG5hbWUKKyAqLworY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX25hbWUoIGNvbnN0IGNoYXIgKm5hbWUgKQoreworICAgIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKmN1cnZlX2luZm87CisKKyAgICBmb3IoIGN1cnZlX2luZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCk7CisgICAgICAgICBjdXJ2ZV9pbmZvLT5ncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsKKyAgICAgICAgIGN1cnZlX2luZm8rKyApCisgICAgeworICAgICAgICBpZiggc3RyY21wKCBjdXJ2ZV9pbmZvLT5uYW1lLCBuYW1lICkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4oIGN1cnZlX2luZm8gKTsKKyAgICB9CisKKyAgICByZXR1cm4oIE5VTEwgKTsKK30KKworLyoKKyAqIEdldCB0aGUgdHlwZSBvZiBhIGN1cnZlCisgKi8KK3N0YXRpYyBpbmxpbmUgZWNwX2N1cnZlX3R5cGUgZWNwX2dldF90eXBlKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwICkKK3sKKyAgICBpZiggZ3JwLT5HLlgucCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBFQ1BfVFlQRV9OT05FICk7CisKKyAgICBpZiggZ3JwLT5HLlkucCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBFQ1BfVFlQRV9NT05UR09NRVJZICk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4oIEVDUF9UWVBFX1NIT1JUX1dFSUVSU1RSQVNTICk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplICh0aGUgY29tcG9uZW50cyBvZikgYSBwb2ludAorICovCit2b2lkIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoIG1iZWR0bHNfZWNwX3BvaW50ICpwdCApCit7CisgICAgaWYoIHB0ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmcHQtPlggKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmcHQtPlkgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmcHQtPlogKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgKHRoZSBjb21wb25lbnRzIG9mKSBhIGdyb3VwCisgKi8KK3ZvaWQgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCApCit7CisgICAgaWYoIGdycCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVtc2V0KCBncnAsIDAsIHNpemVvZiggbWJlZHRsc19lY3BfZ3JvdXAgKSApOworfQorCisvKgorICogSW5pdGlhbGl6ZSAodGhlIGNvbXBvbmVudHMgb2YpIGEga2V5IHBhaXIKKyAqLwordm9pZCBtYmVkdGxzX2VjcF9rZXlwYWlyX2luaXQoIG1iZWR0bHNfZWNwX2tleXBhaXIgKmtleSApCit7CisgICAgaWYoIGtleSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmtleS0+Z3JwICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJmtleS0+ZCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZrZXktPlEgKTsKK30KKworLyoKKyAqIFVuYWxsb2NhdGUgKHRoZSBjb21wb25lbnRzIG9mKSBhIHBvaW50CisgKi8KK3ZvaWQgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggbWJlZHRsc19lY3BfcG9pbnQgKnB0ICkKK3sKKyAgICBpZiggcHQgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICYoIHB0LT5YICkgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmKCBwdC0+WSApICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJiggcHQtPlogKSApOworfQorCisvKgorICogVW5hbGxvY2F0ZSAodGhlIGNvbXBvbmVudHMgb2YpIGEgZ3JvdXAKKyAqLwordm9pZCBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwICkKK3sKKyAgICBzaXplX3QgaTsKKworICAgIGlmKCBncnAgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIGlmKCBncnAtPmggIT0gMSApCisgICAgeworICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmZ3JwLT5QICk7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZncnAtPkEgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfZnJlZSggJmdycC0+QiApOworICAgICAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmZ3JwLT5HICk7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZncnAtPk4gKTsKKyAgICB9CisKKyAgICBpZiggZ3JwLT5UICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IGdycC0+VF9zaXplOyBpKysgKQorICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmdycC0+VFtpXSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGdycC0+VCApOworICAgIH0KKworICAgIG1iZWR0bHNfemVyb2l6ZSggZ3JwLCBzaXplb2YoIG1iZWR0bHNfZWNwX2dyb3VwICkgKTsKK30KKworLyoKKyAqIFVuYWxsb2NhdGUgKHRoZSBjb21wb25lbnRzIG9mKSBhIGtleSBwYWlyCisgKi8KK3ZvaWQgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCBtYmVkdGxzX2VjcF9rZXlwYWlyICprZXkgKQoreworICAgIGlmKCBrZXkgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZrZXktPmdycCApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZrZXktPmQgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAma2V5LT5RICk7Cit9CisKKy8qCisgKiBDb3B5IHRoZSBjb250ZW50cyBvZiBhIHBvaW50CisgKi8KK2ludCBtYmVkdGxzX2VjcF9jb3B5KCBtYmVkdGxzX2VjcF9wb2ludCAqUCwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlEgKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZQLT5YLCAmUS0+WCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmUC0+WSwgJlEtPlkgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlAtPlosICZRLT5aICkgKTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQ29weSB0aGUgY29udGVudHMgb2YgYSBncm91cCBvYmplY3QKKyAqLworaW50IG1iZWR0bHNfZWNwX2dyb3VwX2NvcHkoIG1iZWR0bHNfZWNwX2dyb3VwICpkc3QsIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpzcmMgKQoreworICAgIHJldHVybiBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCBkc3QsIHNyYy0+aWQgKTsKK30KKworLyoKKyAqIFNldCBwb2ludCB0byB6ZXJvCisgKi8KK2ludCBtYmVkdGxzX2VjcF9zZXRfemVybyggbWJlZHRsc19lY3BfcG9pbnQgKnB0ICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmcHQtPlggLCAxICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZwdC0+WSAsIDEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJnB0LT5aICwgMCApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFRlbGwgaWYgYSBwb2ludCBpcyB6ZXJvCisgKi8KK2ludCBtYmVkdGxzX2VjcF9pc196ZXJvKCBtYmVkdGxzX2VjcF9wb2ludCAqcHQgKQoreworICAgIHJldHVybiggbWJlZHRsc19tcGlfY21wX2ludCggJnB0LT5aLCAwICkgPT0gMCApOworfQorCisvKgorICogQ29tcGFyZSB0d28gcG9pbnRzIGxhenlseQorICovCitpbnQgbWJlZHRsc19lY3BfcG9pbnRfY21wKCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpRICkKK3sKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJlAtPlgsICZRLT5YICkgPT0gMCAmJgorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmUC0+WSwgJlEtPlkgKSA9PSAwICYmCisgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZQLT5aLCAmUS0+WiApID09IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKK30KKworLyoKKyAqIEltcG9ydCBhIG5vbi16ZXJvIHBvaW50IGZyb20gQVNDSUkgc3RyaW5ncworICovCitpbnQgbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9zdHJpbmcoIG1iZWR0bHNfZWNwX3BvaW50ICpQLCBpbnQgcmFkaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp4LCBjb25zdCBjaGFyICp5ICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlAtPlgsIHJhZGl4LCB4ICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmUC0+WSwgcmFkaXgsIHkgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJlAtPlosIDEgKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBFeHBvcnQgYSBwb2ludCBpbnRvIHVuc2lnbmVkIGJpbmFyeSBkYXRhIChTRUMxIDIuMy4zKQorICovCitpbnQgbWJlZHRsc19lY3BfcG9pbnRfd3JpdGVfYmluYXJ5KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9ybWF0LCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBzaXplX3QgcGxlbjsKKworICAgIGlmKCBmb3JtYXQgIT0gTUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VEICYmCisgICAgICAgIGZvcm1hdCAhPSBNQkVEVExTX0VDUF9QRl9DT01QUkVTU0VEICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qCisgICAgICogQ29tbW9uIGNhc2U6IFAgPT0gMAorICAgICAqLworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmUC0+WiwgMCApID09IDAgKQorICAgIHsKKyAgICAgICAgaWYoIGJ1ZmxlbiA8IDEgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgICAgIGJ1ZlswXSA9IDB4MDA7CisgICAgICAgICpvbGVuID0gMTsKKworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBwbGVuID0gbWJlZHRsc19tcGlfc2l6ZSggJmdycC0+UCApOworCisgICAgaWYoIGZvcm1hdCA9PSBNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQgKQorICAgIHsKKyAgICAgICAgKm9sZW4gPSAyICogcGxlbiArIDE7CisKKyAgICAgICAgaWYoIGJ1ZmxlbiA8ICpvbGVuICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgICAgICBidWZbMF0gPSAweDA0OworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggJlAtPlgsIGJ1ZiArIDEsIHBsZW4gKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggJlAtPlksIGJ1ZiArIDEgKyBwbGVuLCBwbGVuICkgKTsKKyAgICB9CisgICAgZWxzZSBpZiggZm9ybWF0ID09IE1CRURUTFNfRUNQX1BGX0NPTVBSRVNTRUQgKQorICAgIHsKKyAgICAgICAgKm9sZW4gPSBwbGVuICsgMTsKKworICAgICAgICBpZiggYnVmbGVuIDwgKm9sZW4gKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgICAgIGJ1ZlswXSA9IDB4MDIgKyBtYmVkdGxzX21waV9nZXRfYml0KCAmUC0+WSwgMCApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggJlAtPlgsIGJ1ZiArIDEsIHBsZW4gKSApOworICAgIH0KKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogSW1wb3J0IGEgcG9pbnQgZnJvbSB1bnNpZ25lZCBiaW5hcnkgZGF0YSAoU0VDMSAyLjMuNCkKKyAqLworaW50IG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfYmluYXJ5KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBpbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBwbGVuOworCisgICAgaWYoIGlsZW4gPCAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBidWZbMF0gPT0gMHgwMCApCisgICAgeworICAgICAgICBpZiggaWxlbiA9PSAxICkKKyAgICAgICAgICAgIHJldHVybiggbWJlZHRsc19lY3Bfc2V0X3plcm8oIHB0ICkgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBwbGVuID0gbWJlZHRsc19tcGlfc2l6ZSggJmdycC0+UCApOworCisgICAgaWYoIGJ1ZlswXSAhPSAweDA0ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgaWYoIGlsZW4gIT0gMiAqIHBsZW4gKyAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoICZwdC0+WCwgYnVmICsgMSwgcGxlbiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJnB0LT5ZLCBidWYgKyAxICsgcGxlbiwgcGxlbiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmcHQtPlosIDEgKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBJbXBvcnQgYSBwb2ludCBmcm9tIGEgVExTIEVDUG9pbnQgcmVjb3JkIChSRkMgNDQ5MikKKyAqICAgICAgc3RydWN0IHsKKyAqICAgICAgICAgIG9wYXF1ZSBwb2ludCA8MS4uMl44LTE+OworICogICAgICB9IEVDUG9pbnQ7CisgKi8KK2ludCBtYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludCggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKnB0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgZGF0YV9sZW47CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmX3N0YXJ0OworCisgICAgLyoKKyAgICAgKiBXZSBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIGJ5dGVzICgxIGZvciBsZW5ndGgsIGF0IGxlYXN0IG9uZSBmb3IgZGF0YSkKKyAgICAgKi8KKyAgICBpZiggYnVmX2xlbiA8IDIgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgZGF0YV9sZW4gPSAqKCpidWYpKys7CisgICAgaWYoIGRhdGFfbGVuIDwgMSB8fCBkYXRhX2xlbiA+IGJ1Zl9sZW4gLSAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qCisgICAgICogU2F2ZSBidWZmZXIgc3RhcnQgZm9yIHJlYWRfYmluYXJ5IGFuZCB1cGRhdGUgYnVmCisgICAgICovCisgICAgYnVmX3N0YXJ0ID0gKmJ1ZjsKKyAgICAqYnVmICs9IGRhdGFfbGVuOworCisgICAgcmV0dXJuIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfYmluYXJ5KCBncnAsIHB0LCBidWZfc3RhcnQsIGRhdGFfbGVuICk7Cit9CisKKy8qCisgKiBFeHBvcnQgYSBwb2ludCBhcyBhIFRMUyBFQ1BvaW50IHJlY29yZCAoUkZDIDQ0OTIpCisgKiAgICAgIHN0cnVjdCB7CisgKiAgICAgICAgICBvcGFxdWUgcG9pbnQgPDEuLjJeOC0xPjsKKyAqICAgICAgfSBFQ1BvaW50OworICovCitpbnQgbWJlZHRsc19lY3BfdGxzX3dyaXRlX3BvaW50KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZvcm1hdCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4gKQoreworICAgIGludCByZXQ7CisKKyAgICAvKgorICAgICAqIGJ1ZmZlciBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCBvbmUsIGZvciBvdXIgbGVuZ3RoIGJ5dGUKKyAgICAgKi8KKyAgICBpZiggYmxlbiA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfcG9pbnRfd3JpdGVfYmluYXJ5KCBncnAsIHB0LCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIG9sZW4sIGJ1ZiArIDEsIGJsZW4gLSAxKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgLyoKKyAgICAgKiB3cml0ZSBsZW5ndGggdG8gdGhlIGZpcnN0IGJ5dGUgYW5kIHVwZGF0ZSB0b3RhbCBsZW5ndGgKKyAgICAgKi8KKyAgICBidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKm9sZW47CisgICAgKysqb2xlbjsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogU2V0IGEgZ3JvdXAgZnJvbSBhbiBFQ1BhcmFtZXRlcnMgcmVjb3JkIChSRkMgNDQ5MikKKyAqLworaW50IG1iZWR0bHNfZWNwX3Rsc19yZWFkX2dyb3VwKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICB1aW50MTZfdCB0bHNfaWQ7CisgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqY3VydmVfaW5mbzsKKworICAgIC8qCisgICAgICogV2UgZXhwZWN0IGF0IGxlYXN0IHRocmVlIGJ5dGVzIChzZWUgYmVsb3cpCisgICAgICovCisgICAgaWYoIGxlbiA8IDMgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgLyoKKyAgICAgKiBGaXJzdCBieXRlIGlzIGN1cnZlX3R5cGU7IG9ubHkgbmFtZWRfY3VydmUgaXMgaGFuZGxlZAorICAgICAqLworICAgIGlmKCAqKCpidWYpKysgIT0gTUJFRFRMU19FQ1BfVExTX05BTUVEX0NVUlZFICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qCisgICAgICogTmV4dCB0d28gYnl0ZXMgYXJlIHRoZSBuYW1lZGN1cnZlIHZhbHVlCisgICAgICovCisgICAgdGxzX2lkID0gKigqYnVmKSsrOworICAgIHRsc19pZCA8PD0gODsKKyAgICB0bHNfaWQgfD0gKigqYnVmKSsrOworCisgICAgaWYoICggY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV90bHNfaWQoIHRsc19pZCApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKworICAgIHJldHVybiBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCBncnAsIGN1cnZlX2luZm8tPmdycF9pZCApOworfQorCisvKgorICogV3JpdGUgdGhlIEVDUGFyYW1ldGVycyByZWNvcmQgY29ycmVzcG9uZGluZyB0byBhIGdyb3VwIChSRkMgNDQ5MikKKyAqLworaW50IG1iZWR0bHNfZWNwX3Rsc193cml0ZV9ncm91cCggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4gKQoreworICAgIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKmN1cnZlX2luZm87CisKKyAgICBpZiggKCBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX2dycF9pZCggZ3JwLT5pZCApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKgorICAgICAqIFdlIGFyZSBnb2luZyB0byB3cml0ZSAzIGJ5dGVzIChzZWUgYmVsb3cpCisgICAgICovCisgICAgKm9sZW4gPSAzOworICAgIGlmKCBibGVuIDwgKm9sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICAvKgorICAgICAqIEZpcnN0IGJ5dGUgaXMgY3VydmVfdHlwZSwgYWx3YXlzIG5hbWVkX2N1cnZlCisgICAgICovCisgICAgKmJ1ZisrID0gTUJFRFRMU19FQ1BfVExTX05BTUVEX0NVUlZFOworCisgICAgLyoKKyAgICAgKiBOZXh0IHR3byBieXRlcyBhcmUgdGhlIG5hbWVkY3VydmUgdmFsdWUKKyAgICAgKi8KKyAgICBidWZbMF0gPSBjdXJ2ZV9pbmZvLT50bHNfaWQgPj4gODsKKyAgICBidWZbMV0gPSBjdXJ2ZV9pbmZvLT50bHNfaWQgJiAweEZGOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBXcmFwcGVyIGFyb3VuZCBmYXN0IHF1YXNpLW1vZHAgZnVuY3Rpb25zLCB3aXRoIGZhbGwtYmFjayB0byBtYmVkdGxzX21waV9tb2RfbXBpLgorICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHN0cnVjdCBtYmVkdGxzX2VjcF9ncm91cC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGluIHRoZSBjcml0aWFsIGxvb3AgZm9yIG1iZWR0bHNfZWNwX211bCwgc28gcGF5IGF0dGVudGlvbiB0byBwZXJmLgorICovCitzdGF0aWMgaW50IGVjcF9tb2RwKCBtYmVkdGxzX21waSAqTiwgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCBncnAtPm1vZHAgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggbWJlZHRsc19tcGlfbW9kX21waSggTiwgTiwgJmdycC0+UCApICk7CisKKyAgICAvKiBOLT5zIDwgMCBpcyBhIG11Y2ggZmFzdGVyIHRlc3QsIHdoaWNoIGZhaWxzIG9ubHkgaWYgTiBpcyAwICovCisgICAgaWYoICggTi0+cyA8IDAgJiYgbWJlZHRsc19tcGlfY21wX2ludCggTiwgMCApICE9IDAgKSB8fAorICAgICAgICBtYmVkdGxzX21waV9iaXRsZW4oIE4gKSA+IDIgKiBncnAtPnBiaXRzICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgTUJFRFRMU19NUElfQ0hLKCBncnAtPm1vZHAoIE4gKSApOworCisgICAgLyogTi0+cyA8IDAgaXMgYSBtdWNoIGZhc3RlciB0ZXN0LCB3aGljaCBmYWlscyBvbmx5IGlmIE4gaXMgMCAqLworICAgIHdoaWxlKCBOLT5zIDwgMCAmJiBtYmVkdGxzX21waV9jbXBfaW50KCBOLCAwICkgIT0gMCApCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX21waSggTiwgTiwgJmdycC0+UCApICk7CisKKyAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX21waSggTiwgJmdycC0+UCApID49IDAgKQorICAgICAgICAvKiB3ZSBrbm93biBQLCBOIGFuZCB0aGUgcmVzdWx0IGFyZSBwb3NpdGl2ZSAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9hYnMoIE4sIE4sICZncnAtPlAgKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBGYXN0IG1vZC1wIGZ1bmN0aW9ucyBleHBlY3QgdGhlaXIgYXJndW1lbnQgdG8gYmUgaW4gdGhlIDAuLnBeMiByYW5nZS4KKyAqCisgKiBJbiBvcmRlciB0byBndWFyYW50ZWUgdGhhdCwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBvcGVyYW5kcyBvZgorICogbWJlZHRsc19tcGlfbXVsX21waSBhcmUgaW4gdGhlIDAuLnAgcmFuZ2UuIFNvLCBhZnRlciBlYWNoIG9wZXJhdGlvbiB3ZSB3aWxsCisgKiBicmluZyB0aGUgcmVzdWx0IGJhY2sgdG8gdGhpcyByYW5nZS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgc2hvcnRjdXRzIGZvciBkb2luZyB0aGF0LgorICovCisKKy8qCisgKiBSZWR1Y2UgYSBtYmVkdGxzX21waSBtb2QgcCBpbi1wbGFjZSwgZ2VuZXJhbCBjYXNlLCB0byB1c2UgYWZ0ZXIgbWJlZHRsc19tcGlfbXVsX21waQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNkZWZpbmUgSU5DX01VTF9DT1VOVCAgIG11bF9jb3VudCsrOworI2Vsc2UKKyNkZWZpbmUgSU5DX01VTF9DT1VOVAorI2VuZGlmCisKKyNkZWZpbmUgTU9EX01VTCggTiApICAgIGRvIHsgTUJFRFRMU19NUElfQ0hLKCBlY3BfbW9kcCggJk4sIGdycCApICk7IElOQ19NVUxfQ09VTlQgfSBcCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggMCApCisKKy8qCisgKiBSZWR1Y2UgYSBtYmVkdGxzX21waSBtb2QgcCBpbi1wbGFjZSwgdG8gdXNlIGFmdGVyIG1iZWR0bHNfbXBpX3N1Yl9tcGkKKyAqIE4tPnMgPCAwIGlzIGEgdmVyeSBmYXN0IHRlc3QsIHdoaWNoIGZhaWxzIG9ubHkgaWYgTiBpcyAwCisgKi8KKyNkZWZpbmUgTU9EX1NVQiggTiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgd2hpbGUoIE4ucyA8IDAgJiYgbWJlZHRsc19tcGlfY21wX2ludCggJk4sIDAgKSAhPSAwICkgICBcCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX21waSggJk4sICZOLCAmZ3JwLT5QICkgKQorCisvKgorICogUmVkdWNlIGEgbWJlZHRsc19tcGkgbW9kIHAgaW4tcGxhY2UsIHRvIHVzZSBhZnRlciBtYmVkdGxzX21waV9hZGRfbXBpIGFuZCBtYmVkdGxzX21waV9tdWxfaW50LgorICogV2Uga25vd24gUCwgTiBhbmQgdGhlIHJlc3VsdCBhcmUgcG9zaXRpdmUsIHNvIHN1Yl9hYnMgaXMgY29ycmVjdCwgYW5kCisgKiBhIGJpdCBmYXN0ZXIuCisgKi8KKyNkZWZpbmUgTU9EX0FERCggTiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZOLCAmZ3JwLT5QICkgPj0gMCApICAgICAgICBcCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2FicyggJk4sICZOLCAmZ3JwLT5QICkgKQorCisjaWYgZGVmaW5lZChFQ1BfU0hPUlRXRUlFUlNUUkFTUykKKy8qCisgKiBGb3IgY3VydmVzIGluIHNob3J0IFdlaWVyc3RyYXNzIGZvcm0sIHdlIGRvIGFsbCB0aGUgaW50ZXJuYWwgb3BlcmF0aW9ucyBpbgorICogSmFjb2JpYW4gY29vcmRpbmF0ZXMuCisgKgorICogRm9yIG11bHRpcGxpY2F0aW9uLCB3ZSdsbCB1c2UgYSBjb21iIG1ldGhvZCB3aXRoIGNvdXRlcm1lYXN1ZXJlcyBhZ2FpbnN0CisgKiBTUEEsIGhlbmNlIHRpbWluZyBhdHRhY2tzLgorICovCisKKy8qCisgKiBOb3JtYWxpemUgamFjb2JpYW4gY29vcmRpbmF0ZXMgc28gdGhhdCBaID09IDAgfHwgWiA9PSAxICAoR0VDQyAzLjIuMSkKKyAqIENvc3Q6IDFOIDo9IDFJICsgM00gKyAxUworICovCitzdGF0aWMgaW50IGVjcF9ub3JtYWxpemVfamFjKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqcHQgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgWmksIFpaaTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmcHQtPlosIDAgKSA9PSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWmkgKTsgbWJlZHRsc19tcGlfaW5pdCggJlpaaSApOworCisgICAgLyoKKyAgICAgKiBYID0gWCAvIFpeMiAgbW9kIHAKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZaaSwgICAgICAmcHQtPlosICAgICAmZ3JwLT5QICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZaWmksICAgICAmWmksICAgICAgICAmWmkgICAgICkgKTsgTU9EX01VTCggWlppICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmcHQtPlgsICAgJnB0LT5YLCAgICAgJlpaaSAgICApICk7IE1PRF9NVUwoIHB0LT5YICk7CisKKyAgICAvKgorICAgICAqIFkgPSBZIC8gWl4zICBtb2QgcAorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJnB0LT5ZLCAgICZwdC0+WSwgICAgICZaWmkgICAgKSApOyBNT0RfTVVMKCBwdC0+WSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJnB0LT5ZLCAgICZwdC0+WSwgICAgICZaaSAgICAgKSApOyBNT0RfTVVMKCBwdC0+WSApOworCisgICAgLyoKKyAgICAgKiBaID0gMQorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJnB0LT5aLCAxICkgKTsKKworY2xlYW51cDoKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZaaSApOyBtYmVkdGxzX21waV9mcmVlKCAmWlppICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogTm9ybWFsaXplIGphY29iaWFuIGNvb3JkaW5hdGVzIG9mIGFuIGFycmF5IG9mIChwb2ludGVycyB0bykgcG9pbnRzLAorICogdXNpbmcgTW9udGdvbWVyeSdzIHRyaWNrIHRvIHBlcmZvcm0gb25seSBvbmUgaW52ZXJzaW9uIG1vZCBQLgorICogKFNlZSBmb3IgZXhhbXBsZSBDb2hlbidzICJBIENvdXJzZSBpbiBDb21wdXRhdGlvbmFsIEFsZ2VicmFpYyBOdW1iZXIKKyAqIFRoZW9yeSIsIEFsZ29yaXRobSAxMC4zLjQuKQorICoKKyAqIFdhcm5pbmc6IGZhaWxzIChyZXR1cm5pbmcgYW4gZXJyb3IpIGlmIG9uZSBvZiB0aGUgcG9pbnRzIGlzIHplcm8hCisgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIHNlZSBjaG9pY2Ugb2YgdyBpbiBlY3BfbXVsX2NvbWIoKS4KKyAqCisgKiBDb3N0OiAxTih0KSA6PSAxSSArICg2dCAtIDMpTSArIDFTCisgKi8KK3N0YXRpYyBpbnQgZWNwX25vcm1hbGl6ZV9qYWNfbWFueSggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnQgKlRbXSwgc2l6ZV90IHRfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfbXBpICpjLCB1LCBaaSwgWlppOworCisgICAgaWYoIHRfbGVuIDwgMiApCisgICAgICAgIHJldHVybiggZWNwX25vcm1hbGl6ZV9qYWMoIGdycCwgKlQgKSApOworCisgICAgaWYoICggYyA9IG1iZWR0bHNfY2FsbG9jKCB0X2xlbiwgc2l6ZW9mKCBtYmVkdGxzX21waSApICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQUxMT0NfRkFJTEVEICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmdSApOyBtYmVkdGxzX21waV9pbml0KCAmWmkgKTsgbWJlZHRsc19tcGlfaW5pdCggJlpaaSApOworCisgICAgLyoKKyAgICAgKiBjW2ldID0gWl8wICogLi4uICogWl9pCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmY1swXSwgJlRbMF0tPlogKSApOworICAgIGZvciggaSA9IDE7IGkgPCB0X2xlbjsgaSsrICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmNbaV0sICZjW2ktMV0sICZUW2ldLT5aICkgKTsKKyAgICAgICAgTU9EX01VTCggY1tpXSApOworICAgIH0KKworICAgIC8qCisgICAgICogdSA9IDEgLyAoWl8wICogLi4uICogWl9uKSBtb2QgUAorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfaW52X21vZCggJnUsICZjW3RfbGVuLTFdLCAmZ3JwLT5QICkgKTsKKworICAgIGZvciggaSA9IHRfbGVuIC0gMTsgOyBpLS0gKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogWmkgPSAxIC8gWl9pIG1vZCBwCisgICAgICAgICAqIHUgPSAxIC8gKFpfMCAqIC4uLiAqIFpfaSkgbW9kIFAKKyAgICAgICAgICovCisgICAgICAgIGlmKCBpID09IDAgKSB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZaaSwgJnUgKSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmWmksICZ1LCAmY1tpLTFdICApICk7IE1PRF9NVUwoIFppICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZ1LCAgJnUsICZUW2ldLT5aICkgKTsgTU9EX01VTCggdSApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogcHJvY2VlZCBhcyBpbiBub3JtYWxpemUoKQorICAgICAgICAgKi8KKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmWlppLCAgICAgJlppLCAgICAgICZaaSAgKSApOyBNT0RfTVVMKCBaWmkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVFtpXS0+WCwgJlRbaV0tPlgsICZaWmkgKSApOyBNT0RfTVVMKCBUW2ldLT5YICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlRbaV0tPlksICZUW2ldLT5ZLCAmWlppICkgKTsgTU9EX01VTCggVFtpXS0+WSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUW2ldLT5ZLCAmVFtpXS0+WSwgJlppICApICk7IE1PRF9NVUwoIFRbaV0tPlkgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBQb3N0LXByZWNlc3Npbmc6IHJlY2xhaW0gc29tZSBtZW1vcnkgYnkgc2hyaW5raW5nIGNvb3JkaW5hdGVzCisgICAgICAgICAqIC0gbm90IHN0b3JpbmcgWiAoYWx3YXlzIDEpCisgICAgICAgICAqIC0gc2hyaW5raW5nIG90aGVyIGNvb3JkaW5hdGVzLCBidXQgc3RpbGwga2VlcGluZyB0aGUgc2FtZSBudW1iZXIgb2YKKyAgICAgICAgICogICBsaW1icyBhcyBQLCBhcyBvdGhlcndpc2UgaXQgd2lsbCB0b28gbGlrZWx5IGJlIHJlZ3Jvd24gdG9vIGZhc3QuCisgICAgICAgICAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NocmluayggJlRbaV0tPlgsIGdycC0+UC5uICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaHJpbmsoICZUW2ldLT5ZLCBncnAtPlAubiApICk7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZUW2ldLT5aICk7CisKKyAgICAgICAgaWYoIGkgPT0gMCApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKK2NsZWFudXA6CisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmdSApOyBtYmVkdGxzX21waV9mcmVlKCAmWmkgKTsgbWJlZHRsc19tcGlfZnJlZSggJlpaaSApOworICAgIGZvciggaSA9IDA7IGkgPCB0X2xlbjsgaSsrICkKKyAgICAgICAgbWJlZHRsc19tcGlfZnJlZSggJmNbaV0gKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGMgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBDb25kaXRpb25hbCBwb2ludCBpbnZlcnNpb246IFEgLT4gLVEgPSAoUS5YLCAtUS5ZLCBRLlopIHdpdGhvdXQgbGVhay4KKyAqICJpbnYiIG11c3QgYmUgMCAoZG9uJ3QgaW52ZXJ0KSBvciAxIChpbnZlcnQpIG9yIHRoZSByZXN1bHQgd2lsbCBiZSBpbnZhbGlkCisgKi8KK3N0YXRpYyBpbnQgZWNwX3NhZmVfaW52ZXJ0X2phYyggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludCAqUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGludiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIG5vbnplcm87CisgICAgbWJlZHRsc19tcGkgbVFZOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJm1RWSApOworCisgICAgLyogVXNlIHRoZSBmYWN0IHRoYXQgLVEuWSBtb2QgUCA9IFAgLSBRLlkgdW5sZXNzIFEuWSA9PSAwICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmbVFZLCAmZ3JwLT5QLCAmUS0+WSApICk7CisgICAgbm9uemVybyA9IG1iZWR0bHNfbXBpX2NtcF9pbnQoICZRLT5ZLCAwICkgIT0gMDsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24oICZRLT5ZLCAmbVFZLCBpbnYgJiBub256ZXJvICkgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmbVFZICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUG9pbnQgZG91YmxpbmcgUiA9IDIgUCwgSmFjb2JpYW4gY29vcmRpbmF0ZXMKKyAqCisgKiBCYXNlZCBvbiBodHRwOi8vd3d3Lmh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4uaHRtbCNkb3VibGluZy1kYmwtMTk5OC1jbW8tMiAuCisgKgorICogV2UgZm9sbG93IHRoZSB2YXJpYWJsZSBuYW1pbmcgZmFpcmx5IGNsb3NlbHkuIFRoZSBmb3JtdWxhIHZhcmlhdGlvbnMgdGhhdCB0cmFkZSBhIE1VTCBmb3IgYSBTUVIKKyAqIChwbHVzIGEgZmV3IEFERHMpIGFyZW4ndCB1c2VmdWwgYXMgb3VyIGJpZ251bSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGRpc3Rpbmd1aXNoIHNxdWFyaW5nLgorICoKKyAqIFN0YW5kYXJkIG9wdGltaXphdGlvbnMgYXJlIGFwcGxpZWQgd2hlbiBjdXJ2ZSBwYXJhbWV0ZXIgQSBpcyBvbmUgb2YgeyAwLCAtMyB9LgorICoKKyAqIENvc3Q6IDFEIDo9IDNNICsgNFMgICAgICAgICAgKEEgPT0gIDApCisgKiAgICAgICAgICAgICA0TSArIDRTICAgICAgICAgIChBID09IC0zKQorICogICAgICAgICAgICAgM00gKyA2UyArIDFhICAgICBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBlY3BfZG91YmxlX2phYyggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waSBNLCBTLCBULCBVOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyAgICBkYmxfY291bnQrKzsKKyNlbmRpZgorCisgICAgbWJlZHRsc19tcGlfaW5pdCggJk0gKTsgbWJlZHRsc19tcGlfaW5pdCggJlMgKTsgbWJlZHRsc19tcGlfaW5pdCggJlQgKTsgbWJlZHRsc19tcGlfaW5pdCggJlUgKTsKKworICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgQSA9IC0zICovCisgICAgaWYoIGdycC0+QS5wID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgLyogTSA9IDMoWCArIFpeMikoWCAtIFpeMikgKi8KKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUywgICZQLT5aLCAgJlAtPlogICApICk7IE1PRF9NVUwoIFMgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmVCwgICZQLT5YLCAgJlMgICAgICApICk7IE1PRF9BREQoIFQgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmVSwgICZQLT5YLCAgJlMgICAgICApICk7IE1PRF9TVUIoIFUgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUywgICZULCAgICAgJlUgICAgICApICk7IE1PRF9NVUwoIFMgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfaW50KCAmTSwgICZTLCAgICAgMyAgICAgICApICk7IE1PRF9BREQoIE0gKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogTSA9IDMuWF4yICovCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlMsICAmUC0+WCwgICZQLT5YICAgKSApOyBNT0RfTVVMKCBTICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX2ludCggJk0sICAmUywgICAgIDMgICAgICAgKSApOyBNT0RfQUREKCBNICk7CisKKyAgICAgICAgLyogT3B0aW1pemUgYXdheSBmb3IgImtvYmxpdHoiIGN1cnZlcyB3aXRoIEEgPSAwICovCisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmZ3JwLT5BLCAwICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE0gKz0gQS5aXjQgKi8KKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlMsICAmUC0+WiwgICZQLT5aICAgKSApOyBNT0RfTVVMKCBTICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZULCAgJlMsICAgICAmUyAgICAgICkgKTsgTU9EX01VTCggVCApOworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUywgICZULCAgICAgJmdycC0+QSApICk7IE1PRF9NVUwoIFMgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX21waSggJk0sICAmTSwgICAgICZTICAgICAgKSApOyBNT0RfQUREKCBNICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTID0gNC5YLlleMiAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlQsICAmUC0+WSwgICZQLT5ZICAgKSApOyBNT0RfTVVMKCBUICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9sKCAmVCwgIDEgICAgICAgICAgICAgICApICk7IE1PRF9BREQoIFQgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZTLCAgJlAtPlgsICAmVCAgICAgICkgKTsgTU9EX01VTCggUyApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfbCggJlMsICAxICAgICAgICAgICAgICAgKSApOyBNT0RfQUREKCBTICk7CisKKyAgICAvKiBVID0gOC5ZXjQgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZVLCAgJlQsICAgICAmVCAgICAgICkgKTsgTU9EX01VTCggVSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfbCggJlUsICAxICAgICAgICAgICAgICAgKSApOyBNT0RfQUREKCBVICk7CisKKyAgICAvKiBUID0gTV4yIC0gMi5TICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVCwgICZNLCAgICAgJk0gICAgICApICk7IE1PRF9NVUwoIFQgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZULCAgJlQsICAgICAmUyAgICAgICkgKTsgTU9EX1NVQiggVCApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlQsICAmVCwgICAgICZTICAgICAgKSApOyBNT0RfU1VCKCBUICk7CisKKyAgICAvKiBTID0gTShTIC0gVCkgLSBVICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmUywgICZTLCAgICAgJlQgICAgICApICk7IE1PRF9TVUIoIFMgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZTLCAgJlMsICAgICAmTSAgICAgICkgKTsgTU9EX01VTCggUyApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlMsICAmUywgICAgICZVICAgICAgKSApOyBNT0RfU1VCKCBTICk7CisKKyAgICAvKiBVID0gMi5ZLlogKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZVLCAgJlAtPlksICAmUC0+WiAgICkgKTsgTU9EX01VTCggVSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfbCggJlUsICAxICAgICAgICAgICAgICAgKSApOyBNT0RfQUREKCBVICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZSLT5YLCAmVCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmUi0+WSwgJlMgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlItPlosICZVICkgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmTSApOyBtYmVkdGxzX21waV9mcmVlKCAmUyApOyBtYmVkdGxzX21waV9mcmVlKCAmVCApOyBtYmVkdGxzX21waV9mcmVlKCAmVSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEFkZGl0aW9uOiBSID0gUCArIFEsIG1peGVkIGFmZmluZS1KYWNvYmlhbiBjb29yZGluYXRlcyAoR0VDQyAzLjIyKQorICoKKyAqIFRoZSBjb29yZGluYXRlcyBvZiBRIG11c3QgYmUgbm9ybWFsaXplZCAoPSBhZmZpbmUpLAorICogYnV0IHRob3NlIG9mIFAgZG9uJ3QgbmVlZCB0by4gUiBpcyBub3Qgbm9ybWFsaXplZC4KKyAqCisgKiBTcGVjaWFsIGNhc2VzOiAoMSkgUCBvciBRIGlzIHplcm8sICgyKSBSIGlzIHplcm8sICgzKSBQID09IFEuCisgKiBOb25lIG9mIHRoZXNlIGNhc2VzIGNhbiBoYXBwZW4gYXMgaW50ZXJtZWRpYXRlIHN0ZXAgaW4gZWNwX211bF9jb21iKCk6CisgKiAtIGF0IGVhY2ggc3RlcCwgUCwgUSBhbmQgUiBhcmUgbXVsdGlwbGVzIG9mIHRoZSBiYXNlIHBvaW50LCB0aGUgZmFjdG9yCisgKiAgIGJlaW5nIGxlc3MgdGhhbiBpdHMgb3JkZXIsIHNvIG5vbmUgb2YgdGhlbSBpcyB6ZXJvOworICogLSBRIGlzIGFuIG9kZCBtdWx0aXBsZSBvZiB0aGUgYmFzZSBwb2ludCwgUCBhbiBldmVuIG11bHRpcGxlLAorICogICBkdWUgdG8gdGhlIGNob2ljZSBvZiBwcmVjb21wdXRlZCBwb2ludHMgaW4gdGhlIG1vZGlmaWVkIGNvbWIgbWV0aG9kLgorICogU28gYnJhbmNoZXMgZm9yIHRoZXNlIGNhc2VzIGRvIG5vdCBsZWFrIHNlY3JldCBpbmZvcm1hdGlvbi4KKyAqCisgKiBXZSBhY2NlcHQgUS0+WiBiZWluZyB1bnNldCAoc2F2aW5nIG1lbW9yeSBpbiB0YWJsZXMpIGFzIG1lYW5pbmcgMS4KKyAqCisgKiBDb3N0OiAxQSA6PSA4TSArIDNTCisgKi8KK3N0YXRpYyBpbnQgZWNwX2FkZF9taXhlZCggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUSApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waSBUMSwgVDIsIFQzLCBUNCwgWCwgWSwgWjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisgICAgYWRkX2NvdW50Kys7CisjZW5kaWYKKworICAgIC8qCisgICAgICogVHJpdmlhbCBjYXNlczogUCA9PSAwIG9yIFEgPT0gMCAoY2FzZSAxKQorICAgICAqLworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmUC0+WiwgMCApID09IDAgKQorICAgICAgICByZXR1cm4oIG1iZWR0bHNfZWNwX2NvcHkoIFIsIFEgKSApOworCisgICAgaWYoIFEtPloucCAhPSBOVUxMICYmIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZRLT5aLCAwICkgPT0gMCApCisgICAgICAgIHJldHVybiggbWJlZHRsc19lY3BfY29weSggUiwgUCApICk7CisKKyAgICAvKgorICAgICAqIE1ha2Ugc3VyZSBRIGNvb3JkaW5hdGVzIGFyZSBub3JtYWxpemVkCisgICAgICovCisgICAgaWYoIFEtPloucCAhPSBOVUxMICYmIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZRLT5aLCAxICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmVDEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlQyICk7IG1iZWR0bHNfbXBpX2luaXQoICZUMyApOyBtYmVkdGxzX21waV9pbml0KCAmVDQgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVDEsICAmUC0+WiwgICZQLT5aICkgKTsgIE1PRF9NVUwoIFQxICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVDIsICAmVDEsICAgICZQLT5aICkgKTsgIE1PRF9NVUwoIFQyICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVDEsICAmVDEsICAgICZRLT5YICkgKTsgIE1PRF9NVUwoIFQxICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVDIsICAmVDIsICAgICZRLT5ZICkgKTsgIE1PRF9NVUwoIFQyICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmVDEsICAmVDEsICAgICZQLT5YICkgKTsgIE1PRF9TVUIoIFQxICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmVDIsICAmVDIsICAgICZQLT5ZICkgKTsgIE1PRF9TVUIoIFQyICk7CisKKyAgICAvKiBTcGVjaWFsIGNhc2VzICgyKSBhbmQgKDMpICovCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZUMSwgMCApID09IDAgKQorICAgIHsKKyAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZUMiwgMCApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBlY3BfZG91YmxlX2phYyggZ3JwLCBSLCBQICk7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2VjcF9zZXRfemVybyggUiApOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisgICAgfQorCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmWiwgICAmUC0+WiwgICZUMSAgICkgKTsgIE1PRF9NVUwoIFogICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVDMsICAmVDEsICAgICZUMSAgICkgKTsgIE1PRF9NVUwoIFQzICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVDQsICAmVDMsICAgICZUMSAgICkgKTsgIE1PRF9NVUwoIFQ0ICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVDMsICAmVDMsICAgICZQLT5YICkgKTsgIE1PRF9NVUwoIFQzICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfaW50KCAmVDEsICAmVDMsICAgIDIgICAgICkgKTsgIE1PRF9BREQoIFQxICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmWCwgICAmVDIsICAgICZUMiAgICkgKTsgIE1PRF9NVUwoIFggICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmWCwgICAmWCwgICAgICZUMSAgICkgKTsgIE1PRF9TVUIoIFggICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmWCwgICAmWCwgICAgICZUNCAgICkgKTsgIE1PRF9TVUIoIFggICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmVDMsICAmVDMsICAgICZYICAgICkgKTsgIE1PRF9TVUIoIFQzICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVDMsICAmVDMsICAgICZUMiAgICkgKTsgIE1PRF9NVUwoIFQzICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVDQsICAmVDQsICAgICZQLT5ZICkgKTsgIE1PRF9NVUwoIFQ0ICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmWSwgICAmVDMsICAgICZUNCAgICkgKTsgIE1PRF9TVUIoIFkgICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZSLT5YLCAmWCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmUi0+WSwgJlkgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlItPlosICZaICkgKTsKKworY2xlYW51cDoKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZUMSApOyBtYmVkdGxzX21waV9mcmVlKCAmVDIgKTsgbWJlZHRsc19tcGlfZnJlZSggJlQzICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZUNCApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZaICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUmFuZG9taXplIGphY29iaWFuIGNvb3JkaW5hdGVzOgorICogKFgsIFksIFopIC0+IChsXjIgWCwgbF4zIFksIGwgWikgZm9yIHJhbmRvbSBsCisgKiBUaGlzIGlzIHNvcnQgb2YgdGhlIHJldmVyc2Ugb3BlcmF0aW9uIG9mIGVjcF9ub3JtYWxpemVfamFjKCkuCisgKgorICogVGhpcyBjb3VudGVybWVhc3VyZSB3YXMgZmlyc3Qgc3VnZ2VzdGVkIGluIFsyXS4KKyAqLworc3RhdGljIGludCBlY3BfcmFuZG9taXplX2phYyggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKnB0LAorICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgbCwgbGw7CisgICAgc2l6ZV90IHBfc2l6ZSA9ICggZ3JwLT5wYml0cyArIDcgKSAvIDg7CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZsICk7IG1iZWR0bHNfbXBpX2luaXQoICZsbCApOworCisgICAgLyogR2VuZXJhdGUgbCBzdWNoIHRoYXQgMSA8IGwgPCBwICovCisgICAgZG8KKyAgICB7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tKCAmbCwgcF9zaXplLCBmX3JuZywgcF9ybmcgKTsKKworICAgICAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX21waSggJmwsICZncnAtPlAgKSA+PSAwICkKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJmwsIDEgKSApOworCisgICAgICAgIGlmKCBjb3VudCsrID4gMTAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfUkFORE9NX0ZBSUxFRCApOworICAgIH0KKyAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX2ludCggJmwsIDEgKSA8PSAwICk7CisKKyAgICAvKiBaID0gbCAqIFogKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZwdC0+WiwgICAmcHQtPlosICAgICAmbCAgKSApOyBNT0RfTVVMKCBwdC0+WiApOworCisgICAgLyogWCA9IGxeMiAqIFggKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZsbCwgICAgICAmbCwgICAgICAgICAmbCAgKSApOyBNT0RfTVVMKCBsbCApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJnB0LT5YLCAgICZwdC0+WCwgICAgICZsbCApICk7IE1PRF9NVUwoIHB0LT5YICk7CisKKyAgICAvKiBZID0gbF4zICogWSAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmxsLCAgICAgICZsbCwgICAgICAgICZsICApICk7IE1PRF9NVUwoIGxsICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmcHQtPlksICAgJnB0LT5ZLCAgICAgJmxsICkgKTsgTU9EX01VTCggcHQtPlkgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmbCApOyBtYmVkdGxzX21waV9mcmVlKCAmbGwgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBDaGVjayBhbmQgZGVmaW5lIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUgY29tYiBtZXRob2QgKHNlZSBiZWxvdyBmb3IgZGV0YWlscykKKyAqLworI2lmIE1CRURUTFNfRUNQX1dJTkRPV19TSVpFIDwgMiB8fCBNQkVEVExTX0VDUF9XSU5ET1dfU0laRSA+IDcKKyNlcnJvciAiTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUgb3V0IG9mIGJvdW5kcyIKKyNlbmRpZgorCisvKiBkID0gY2VpbCggbiAvIHcgKSAqLworI2RlZmluZSBDT01CX01BWF9EICAgICAgKCBNQkVEVExTX0VDUF9NQVhfQklUUyArIDEgKSAvIDIKKworLyogbnVtYmVyIG9mIHByZWNvbXB1dGVkIHBvaW50cyAqLworI2RlZmluZSBDT01CX01BWF9QUkUgICAgKCAxIDw8ICggTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUgLSAxICkgKQorCisvKgorICogQ29tcHV0ZSB0aGUgcmVwcmVzZW50YXRpb24gb2YgbSB0aGF0IHdpbGwgYmUgdXNlZCB3aXRoIG91ciBjb21iIG1ldGhvZC4KKyAqCisgKiBUaGUgYmFzaWMgY29tYiBtZXRob2QgaXMgZGVzY3JpYmVkIGluIEdFQ0MgMy40NCBmb3IgZXhhbXBsZS4gV2UgdXNlIGEKKyAqIG1vZGlmaWVkIHZlcnNpb24gdGhhdCBwcm92aWRlcyByZXNpc3RhbmNlIHRvIFNQQSBieSBhdm9pZGluZyB6ZXJvCisgKiBkaWdpdHMgaW4gdGhlIHJlcHJlc2VudGF0aW9uIGFzIGluIFszXS4gV2UgbW9kaWZ5IHRoZSBtZXRob2QgZnVydGhlciBieQorICogcmVxdWlyaW5nIHRoYXQgYWxsIEtfaSBiZSBvZGQsIHdoaWNoIGhhcyB0aGUgc21hbGwgY29zdCB0aGF0IG91cgorICogcmVwcmVzZW50YXRpb24gdXNlcyBvbmUgbW9yZSBLX2ksIGR1ZSB0byBjYXJyaWVzLgorICoKKyAqIEFsc28sIGZvciB0aGUgc2FrZSBvZiBjb21wYWN0bmVzcywgb25seSB0aGUgc2V2ZW4gbG93LW9yZGVyIGJpdHMgb2YgeFtpXQorICogYXJlIHVzZWQgdG8gcmVwcmVzZW50IEtfaSwgYW5kIHRoZSBtc2Igb2YgeFtpXSBlbmNvZGVzIHRoZSB0aGUgc2lnbiAoc19pIGluCisgKiB0aGUgcGFwZXIpOiBpdCBpcyBzZXQgaWYgYW5kIG9ubHkgaWYgaWYgc19pID09IC0xOworICoKKyAqIENhbGxpbmcgY29udmVudGlvbnM6CisgKiAtIHggaXMgYW4gYXJyYXkgb2Ygc2l6ZSBkICsgMQorICogLSB3IGlzIHRoZSBzaXplLCBpZSBudW1iZXIgb2YgdGVldGgsIG9mIHRoZSBjb21iLCBhbmQgbXVzdCBiZSBiZXR3ZWVuCisgKiAgIDIgYW5kIDcgKGluIHByYWN0aWNlLCBiZXR3ZWVuIDIgYW5kIE1CRURUTFNfRUNQX1dJTkRPV19TSVpFKQorICogLSBtIGlzIHRoZSBNUEksIGV4cGVjdGVkIHRvIGJlIG9kZCBhbmQgc3VjaCB0aGF0IGJpdGxlbmd0aChtKSA8PSB3ICogZAorICogICAodGhlIHJlc3VsdCB3aWxsIGJlIGluY29ycmVjdCBpZiB0aGVzZSBhc3N1bXB0aW9ucyBhcmUgbm90IHNhdGlzZmllZCkKKyAqLworc3RhdGljIHZvaWQgZWNwX2NvbWJfZml4ZWQoIHVuc2lnbmVkIGNoYXIgeFtdLCBzaXplX3QgZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHcsIGNvbnN0IG1iZWR0bHNfbXBpICptICkKK3sKKyAgICBzaXplX3QgaSwgajsKKyAgICB1bnNpZ25lZCBjaGFyIGMsIGNjLCBhZGp1c3Q7CisKKyAgICBtZW1zZXQoIHgsIDAsIGQrMSApOworCisgICAgLyogRmlyc3QgZ2V0IHRoZSBjbGFzc2ljYWwgY29tYiB2YWx1ZXMgKGV4Y2VwdCBmb3IgeF9kID0gMCkgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgZDsgaSsrICkKKyAgICAgICAgZm9yKCBqID0gMDsgaiA8IHc7IGorKyApCisgICAgICAgICAgICB4W2ldIHw9IG1iZWR0bHNfbXBpX2dldF9iaXQoIG0sIGkgKyBkICogaiApIDw8IGo7CisKKyAgICAvKiBOb3cgbWFrZSBzdXJlIHhfMSAuLiB4X2QgYXJlIG9kZCAqLworICAgIGMgPSAwOworICAgIGZvciggaSA9IDE7IGkgPD0gZDsgaSsrICkKKyAgICB7CisgICAgICAgIC8qIEFkZCBjYXJyeSBhbmQgdXBkYXRlIGl0ICovCisgICAgICAgIGNjICAgPSB4W2ldICYgYzsKKyAgICAgICAgeFtpXSA9IHhbaV0gXiBjOworICAgICAgICBjID0gY2M7CisKKyAgICAgICAgLyogQWRqdXN0IGlmIG5lZWRlZCwgYXZvaWRpbmcgYnJhbmNoZXMgKi8KKyAgICAgICAgYWRqdXN0ID0gMSAtICggeFtpXSAmIDB4MDEgKTsKKyAgICAgICAgYyAgIHw9IHhbaV0gJiAoIHhbaS0xXSAqIGFkanVzdCApOworICAgICAgICB4W2ldID0geFtpXSBeICggeFtpLTFdICogYWRqdXN0ICk7CisgICAgICAgIHhbaS0xXSB8PSBhZGp1c3QgPDwgNzsKKyAgICB9Cit9CisKKy8qCisgKiBQcmVjb21wdXRlIHBvaW50cyBmb3IgdGhlIGNvbWIgbWV0aG9kCisgKgorICogSWYgaSA9IGlfe3ctMX0gLi4uIGlfMSBpcyB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGksIHRoZW4KKyAqIFRbaV0gPSBpX3t3LTF9IDJeeyh3LTEpZH0gUCArIC4uLiArIGlfMSAyXmQgUCArIFAKKyAqCisgKiBUIG11c3QgYmUgYWJsZSB0byBob2xkIDJee3cgLSAxfSBlbGVtZW50cworICoKKyAqIENvc3Q6IGQody0xKSBEICsgKDJee3ctMX0gLSAxKSBBICsgMSBOKHctMSkgKyAxIE4oMl57dy0xfSAtIDEpCisgKi8KK3N0YXRpYyBpbnQgZWNwX3ByZWNvbXB1dGVfY29tYiggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnQgVFtdLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB3LCBzaXplX3QgZCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGksIGs7CisgICAgc2l6ZV90IGo7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgKmN1ciwgKlRUW0NPTUJfTUFYX1BSRSAtIDFdOworCisgICAgLyoKKyAgICAgKiBTZXQgVFswXSA9IFAgYW5kCisgICAgICogVFsyXntsLTF9XSA9IDJee2RsfSBQIGZvciBsID0gMSAuLiB3LTEgKHRoaXMgaXMgbm90IHRoZSBmaW5hbCB2YWx1ZSkKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX2NvcHkoICZUWzBdLCBQICkgKTsKKworICAgIGsgPSAwOworICAgIGZvciggaSA9IDE7IGkgPCAoIDFVIDw8ICggdyAtIDEgKSApOyBpIDw8PSAxICkKKyAgICB7CisgICAgICAgIGN1ciA9IFQgKyBpOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX2NvcHkoIGN1ciwgVCArICggaSA+PiAxICkgKSApOworICAgICAgICBmb3IoIGogPSAwOyBqIDwgZDsgaisrICkKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggZWNwX2RvdWJsZV9qYWMoIGdycCwgY3VyLCBjdXIgKSApOworCisgICAgICAgIFRUW2srK10gPSBjdXI7CisgICAgfQorCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY3Bfbm9ybWFsaXplX2phY19tYW55KCBncnAsIFRULCBrICkgKTsKKworICAgIC8qCisgICAgICogQ29tcHV0ZSB0aGUgcmVtYWluaW5nIG9uZXMgdXNpbmcgdGhlIG1pbmltYWwgbnVtYmVyIG9mIGFkZGl0aW9ucworICAgICAqIEJlIGNhcmVmdWwgdG8gdXBkYXRlIFRbMl5sXSBvbmx5IGFmdGVyIHVzaW5nIGl0IQorICAgICAqLworICAgIGsgPSAwOworICAgIGZvciggaSA9IDE7IGkgPCAoIDFVIDw8ICggdyAtIDEgKSApOyBpIDw8PSAxICkKKyAgICB7CisgICAgICAgIGogPSBpOworICAgICAgICB3aGlsZSggai0tICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBlY3BfYWRkX21peGVkKCBncnAsICZUW2kgKyBqXSwgJlRbal0sICZUW2ldICkgKTsKKyAgICAgICAgICAgIFRUW2srK10gPSAmVFtpICsgal07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9ub3JtYWxpemVfamFjX21hbnkoIGdycCwgVFQsIGsgKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBTZWxlY3QgcHJlY29tcHV0ZWQgcG9pbnQ6IFIgPSBzaWduKGkpICogVFsgYWJzKGkpIC8gMiBdCisgKi8KK3N0YXRpYyBpbnQgZWNwX3NlbGVjdF9jb21iKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCBUW10sIHVuc2lnbmVkIGNoYXIgdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgaWksIGo7CisKKyAgICAvKiBJZ25vcmUgdGhlICJzaWduIiBiaXQgYW5kIHNjYWxlIGRvd24gKi8KKyAgICBpaSA9ICAoIGkgJiAweDdGdSApID4+IDE7CisKKyAgICAvKiBSZWFkIHRoZSB3aG9sZSB0YWJsZSB0byB0aHdhcnQgY2FjaGUtYmFzZWQgdGltaW5nIGF0dGFja3MgKi8KKyAgICBmb3IoIGogPSAwOyBqIDwgdF9sZW47IGorKyApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24oICZSLT5YLCAmVFtqXS5YLCBqID09IGlpICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduKCAmUi0+WSwgJlRbal0uWSwgaiA9PSBpaSApICk7CisgICAgfQorCisgICAgLyogU2FmZWx5IGludmVydCByZXN1bHQgaWYgaSBpcyAibmVnYXRpdmUiICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY3Bfc2FmZV9pbnZlcnRfamFjKCBncnAsIFIsIGkgPj4gNyApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIENvcmUgbXVsdGlwbGljYXRpb24gYWxnb3JpdGhtIGZvciB0aGUgKG1vZGlmaWVkKSBjb21iIG1ldGhvZC4KKyAqIFRoaXMgcGFydCBpcyBhY3R1YWxseSBjb21tb24gd2l0aCB0aGUgYmFzaWMgY29tYiBtZXRob2QgKEdFQ0MgMy40NCkKKyAqCisgKiBDb3N0OiBkIEEgKyBkIEQgKyAxIFIKKyAqLworc3RhdGljIGludCBlY3BfbXVsX2NvbWJfY29yZSggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCBUW10sIHVuc2lnbmVkIGNoYXIgdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHhbXSwgc2l6ZV90IGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBUeGk7CisgICAgc2l6ZV90IGk7CisKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmVHhpICk7CisKKyAgICAvKiBTdGFydCB3aXRoIGEgbm9uLXplcm8gcG9pbnQgYW5kIHJhbmRvbWl6ZSBpdHMgY29vcmRpbmF0ZXMgKi8KKyAgICBpID0gZDsKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9zZWxlY3RfY29tYiggZ3JwLCBSLCBULCB0X2xlbiwgeFtpXSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmUi0+WiwgMSApICk7CisgICAgaWYoIGZfcm5nICE9IDAgKQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9yYW5kb21pemVfamFjKCBncnAsIFIsIGZfcm5nLCBwX3JuZyApICk7CisKKyAgICB3aGlsZSggaS0tICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBlY3BfZG91YmxlX2phYyggZ3JwLCBSLCBSICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBlY3Bfc2VsZWN0X2NvbWIoIGdycCwgJlR4aSwgVCwgdF9sZW4sIHhbaV0gKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9hZGRfbWl4ZWQoIGdycCwgUiwgUiwgJlR4aSApICk7CisgICAgfQorCitjbGVhbnVwOgorICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZUeGkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBNdWx0aXBsaWNhdGlvbiB1c2luZyB0aGUgY29tYiBtZXRob2QsCisgKiBmb3IgY3VydmVzIGluIHNob3J0IFdlaWVyc3RyYXNzIGZvcm0KKyAqLworc3RhdGljIGludCBlY3BfbXVsX2NvbWIoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpSLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpICptLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciB3LCBtX2lzX29kZCwgcF9lcV9nLCBwcmVfbGVuLCBpOworICAgIHNpemVfdCBkOworICAgIHVuc2lnbmVkIGNoYXIga1tDT01CX01BWF9EICsgMV07CisgICAgbWJlZHRsc19lY3BfcG9pbnQgKlQ7CisgICAgbWJlZHRsc19tcGkgTSwgbW07CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmTSApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZtbSApOworCisgICAgLyogd2UgbmVlZCBOIHRvIGJlIG9kZCB0byB0cm5hZm9ybSBtIGluIGFuIG9kZCBudW1iZXIsIGNoZWNrIG5vdyAqLworICAgIGlmKCBtYmVkdGxzX21waV9nZXRfYml0KCAmZ3JwLT5OLCAwICkgIT0gMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKgorICAgICAqIE1pbmltaXplIHRoZSBudW1iZXIgb2YgbXVsdGlwbGljYXRpb25zLCB0aGF0IGlzIG1pbmltaXplCisgICAgICogMTAgKiBkICogdyArIDE4ICogMl4ody0xKSArIDExICogZCArIDcgKiB3LCB3aXRoIGQgPSBjZWlsKCBuYml0cyAvIHcgKQorICAgICAqIChzZWUgY29zdHMgb2YgdGhlIHZhcmlvdXMgcGFydHMsIHdpdGggMVMgPSAxTSkKKyAgICAgKi8KKyAgICB3ID0gZ3JwLT5uYml0cyA+PSAzODQgPyA1IDogNDsKKworICAgIC8qCisgICAgICogSWYgUCA9PSBHLCBwcmUtY29tcHV0ZSBhIGJpdCBtb3JlLCBzaW5jZSB0aGlzIG1heSBiZSByZS11c2VkIGxhdGVyLgorICAgICAqIEp1c3QgYWRkaW5nIG9uZSBhdm9pZHMgdXBwaW5nIHRoZSBjb3N0IG9mIHRoZSBmaXJzdCBtdWwgdG9vIG11Y2gsCisgICAgICogYW5kIHRoZSBtZW1vcnkgY29zdCB0b28uCisgICAgICovCisjaWYgTUJFRFRMU19FQ1BfRklYRURfUE9JTlRfT1BUSU0gPT0gMQorICAgIHBfZXFfZyA9ICggbWJlZHRsc19tcGlfY21wX21waSggJlAtPlksICZncnAtPkcuWSApID09IDAgJiYKKyAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZQLT5YLCAmZ3JwLT5HLlggKSA9PSAwICk7CisgICAgaWYoIHBfZXFfZyApCisgICAgICAgIHcrKzsKKyNlbHNlCisgICAgcF9lcV9nID0gMDsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBNYWtlIHN1cmUgdyBpcyB3aXRoaW4gYm91bmRzLgorICAgICAqIChUaGUgbGFzdCB0ZXN0IGlzIHVzZWZ1bCBvbmx5IGZvciB2ZXJ5IHNtYWxsIGN1cnZlcyBpbiB0aGUgdGVzdCBzdWl0ZS4pCisgICAgICovCisgICAgaWYoIHcgPiBNQkVEVExTX0VDUF9XSU5ET1dfU0laRSApCisgICAgICAgIHcgPSBNQkVEVExTX0VDUF9XSU5ET1dfU0laRTsKKyAgICBpZiggdyA+PSBncnAtPm5iaXRzICkKKyAgICAgICAgdyA9IDI7CisKKyAgICAvKiBPdGhlciBzaXplcyB0aGF0IGRlcGVuZCBvbiB3ICovCisgICAgcHJlX2xlbiA9IDFVIDw8ICggdyAtIDEgKTsKKyAgICBkID0gKCBncnAtPm5iaXRzICsgdyAtIDEgKSAvIHc7CisKKyAgICAvKgorICAgICAqIFByZXBhcmUgcHJlY29tcHV0ZWQgcG9pbnRzOiBpZiBQID09IEcgd2Ugd2FudCB0bworICAgICAqIHVzZSBncnAtPlQgaWYgYWxyZWFkeSBpbml0aWFsaXplZCwgb3IgaW5pdGlhbGl6ZSBpdC4KKyAgICAgKi8KKyAgICBUID0gcF9lcV9nID8gZ3JwLT5UIDogTlVMTDsKKworICAgIGlmKCBUID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgVCA9IG1iZWR0bHNfY2FsbG9jKCBwcmVfbGVuLCBzaXplb2YoIG1iZWR0bHNfZWNwX3BvaW50ICkgKTsKKyAgICAgICAgaWYoIFQgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9BTExPQ19GQUlMRUQ7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9wcmVjb21wdXRlX2NvbWIoIGdycCwgVCwgUCwgdywgZCApICk7CisKKyAgICAgICAgaWYoIHBfZXFfZyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdycC0+VCA9IFQ7CisgICAgICAgICAgICBncnAtPlRfc2l6ZSA9IHByZV9sZW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIE1ha2Ugc3VyZSBNIGlzIG9kZCAoTSA9IG0gb3IgTSA9IE4gLSBtLCBzaW5jZSBOIGlzIG9kZCkKKyAgICAgKiB1c2luZyB0aGUgZmFjdCB0aGF0IG0gKiBQID0gLSAoTiAtIG0pICogUAorICAgICAqLworICAgIG1faXNfb2RkID0gKCBtYmVkdGxzX21waV9nZXRfYml0KCBtLCAwICkgPT0gMSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJk0sIG0gKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJm1tLCAmZ3JwLT5OLCBtICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24oICZNLCAmbW0sICEgbV9pc19vZGQgKSApOworCisgICAgLyoKKyAgICAgKiBHbyBmb3IgY29tYiBtdWx0aXBsaWNhdGlvbiwgUiA9IE0gKiBQCisgICAgICovCisgICAgZWNwX2NvbWJfZml4ZWQoIGssIGQsIHcsICZNICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBlY3BfbXVsX2NvbWJfY29yZSggZ3JwLCBSLCBULCBwcmVfbGVuLCBrLCBkLCBmX3JuZywgcF9ybmcgKSApOworCisgICAgLyoKKyAgICAgKiBOb3cgZ2V0IG0gKiBQIGZyb20gTSAqIFAgYW5kIG5vcm1hbGl6ZSBpdAorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggZWNwX3NhZmVfaW52ZXJ0X2phYyggZ3JwLCBSLCAhIG1faXNfb2RkICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9ub3JtYWxpemVfamFjKCBncnAsIFIgKSApOworCitjbGVhbnVwOgorCisgICAgaWYoIFQgIT0gTlVMTCAmJiAhIHBfZXFfZyApCisgICAgeworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgcHJlX2xlbjsgaSsrICkKKyAgICAgICAgICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZUW2ldICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggVCApOworICAgIH0KKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZNICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJm1tICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCBSICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjZW5kaWYgLyogRUNQX1NIT1JUV0VJRVJTVFJBU1MgKi8KKworI2lmIGRlZmluZWQoRUNQX01PTlRHT01FUlkpCisvKgorICogRm9yIE1vbnRnb21lcnkgY3VydmVzLCB3ZSBkbyBhbGwgdGhlIGludGVybmFsIGFyaXRobWV0aWMgaW4gcHJvamVjdGl2ZQorICogY29vcmRpbmF0ZXMuIEltcG9ydC9leHBvcnQgb2YgcG9pbnRzIHVzZXMgb25seSB0aGUgeCBjb29yZGluYXRlcywgd2hpY2ggaXMKKyAqIGludGVybmFseSByZXByZXNlbnRlZCBhcyBYIC8gWi4KKyAqCisgKiBGb3Igc2NhbGFyIG11bHRpcGxpY2F0aW9uLCB3ZSdsbCB1c2UgYSBNb250Z29tZXJ5IGxhZGRlci4KKyAqLworCisvKgorICogTm9ybWFsaXplIE1vbnRnb21lcnkgeC96IGNvb3JkaW5hdGVzOiBYID0gWC9aLCBaID0gMQorICogQ29zdDogMU0gKyAxSQorICovCitzdGF0aWMgaW50IGVjcF9ub3JtYWxpemVfbXh6KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqUCApCit7CisgICAgaW50IHJldDsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfaW52X21vZCggJlAtPlosICZQLT5aLCAmZ3JwLT5QICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZQLT5YLCAmUC0+WCwgJlAtPlogKSApOyBNT0RfTVVMKCBQLT5YICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmUC0+WiwgMSApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFJhbmRvbWl6ZSBwcm9qZWN0aXZlIHgveiBjb29yZGluYXRlczoKKyAqIChYLCBaKSAtPiAobCBYLCBsIFopIGZvciByYW5kb20gbAorICogVGhpcyBpcyBzb3J0IG9mIHRoZSByZXZlcnNlIG9wZXJhdGlvbiBvZiBlY3Bfbm9ybWFsaXplX214eigpLgorICoKKyAqIFRoaXMgY291bnRlcm1lYXN1cmUgd2FzIGZpcnN0IHN1Z2dlc3RlZCBpbiBbMl0uCisgKiBDb3N0OiAyTQorICovCitzdGF0aWMgaW50IGVjcF9yYW5kb21pemVfbXh6KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqUCwKKyAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIGw7CisgICAgc2l6ZV90IHBfc2l6ZSA9ICggZ3JwLT5wYml0cyArIDcgKSAvIDg7CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZsICk7CisKKyAgICAvKiBHZW5lcmF0ZSBsIHN1Y2ggdGhhdCAxIDwgbCA8IHAgKi8KKyAgICBkbworICAgIHsKKyAgICAgICAgbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oICZsLCBwX3NpemUsIGZfcm5nLCBwX3JuZyApOworCisgICAgICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmbCwgJmdycC0+UCApID49IDAgKQorICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmbCwgMSApICk7CisKKyAgICAgICAgaWYoIGNvdW50KysgPiAxMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9SQU5ET01fRkFJTEVEICk7CisgICAgfQorICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfaW50KCAmbCwgMSApIDw9IDAgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlAtPlgsICZQLT5YLCAmbCApICk7IE1PRF9NVUwoIFAtPlggKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZQLT5aLCAmUC0+WiwgJmwgKSApOyBNT0RfTVVMKCBQLT5aICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmwgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBEb3VibGUtYW5kLWFkZDogUiA9IDJQLCBTID0gUCArIFEsIHdpdGggZCA9IFgoUCAtIFEpLAorICogZm9yIE1vbnRnb21lcnkgY3VydmVzIGluIHgveiBjb29yZGluYXRlcy4KKyAqCisgKiBodHRwOi8vd3d3Lmh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1jb2RlL21vbnRnb20veHovbGFkZGVyL21sYWRkLTE5ODctbS5vcDMKKyAqIHdpdGgKKyAqIGQgPSAgWDEKKyAqIFAgPSAoWDIsIFoyKQorICogUSA9IChYMywgWjMpCisgKiBSID0gKFg0LCBaNCkKKyAqIFMgPSAoWDUsIFo1KQorICogYW5kIGVsaW1pbmF0aW5nIHRlbXBvcmFyeSB2YXJpYWJsZXMgdE8sIC4uLiwgdDQuCisgKgorICogQ29zdDogNU0gKyA0UworICovCitzdGF0aWMgaW50IGVjcF9kb3VibGVfYWRkX214eiggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludCAqUiwgbWJlZHRsc19lY3BfcG9pbnQgKlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlAsIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpRLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpICpkICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIEEsIEFBLCBCLCBCQiwgRSwgQywgRCwgREEsIENCOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkFBICk7IG1iZWR0bHNfbXBpX2luaXQoICZCICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJkJCICk7IG1iZWR0bHNfbXBpX2luaXQoICZFICk7IG1iZWR0bHNfbXBpX2luaXQoICZDICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJkQgKTsgbWJlZHRsc19tcGlfaW5pdCggJkRBICk7IG1iZWR0bHNfbXBpX2luaXQoICZDQiApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmQSwgICAgJlAtPlgsICAgJlAtPlogKSApOyBNT0RfQUREKCBBICAgICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmQUEsICAgJkEsICAgICAgJkEgICAgKSApOyBNT0RfTVVMKCBBQSAgICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmQiwgICAgJlAtPlgsICAgJlAtPlogKSApOyBNT0RfU1VCKCBCICAgICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmQkIsICAgJkIsICAgICAgJkIgICAgKSApOyBNT0RfTVVMKCBCQiAgICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmRSwgICAgJkFBLCAgICAgJkJCICAgKSApOyBNT0RfU1VCKCBFICAgICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmQywgICAgJlEtPlgsICAgJlEtPlogKSApOyBNT0RfQUREKCBDICAgICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmRCwgICAgJlEtPlgsICAgJlEtPlogKSApOyBNT0RfU1VCKCBEICAgICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmREEsICAgJkQsICAgICAgJkEgICAgKSApOyBNT0RfTVVMKCBEQSAgICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmQ0IsICAgJkMsICAgICAgJkIgICAgKSApOyBNT0RfTVVMKCBDQiAgICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmUy0+WCwgJkRBLCAgICAgJkNCICAgKSApOyBNT0RfTVVMKCBTLT5YICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUy0+WCwgJlMtPlgsICAgJlMtPlggKSApOyBNT0RfTVVMKCBTLT5YICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmUy0+WiwgJkRBLCAgICAgJkNCICAgKSApOyBNT0RfU1VCKCBTLT5aICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUy0+WiwgJlMtPlosICAgJlMtPlogKSApOyBNT0RfTVVMKCBTLT5aICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUy0+WiwgZCwgICAgICAgJlMtPlogKSApOyBNT0RfTVVMKCBTLT5aICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUi0+WCwgJkFBLCAgICAgJkJCICAgKSApOyBNT0RfTVVMKCBSLT5YICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUi0+WiwgJmdycC0+QSwgJkUgICAgKSApOyBNT0RfTVVMKCBSLT5aICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmUi0+WiwgJkJCLCAgICAgJlItPlogKSApOyBNT0RfQUREKCBSLT5aICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUi0+WiwgJkUsICAgICAgJlItPlogKSApOyBNT0RfTVVMKCBSLT5aICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJkEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkFBICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZCICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJkJCICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZFICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZDICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJkQgKTsgbWJlZHRsc19tcGlfZnJlZSggJkRBICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZDQiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIE11bHRpcGxpY2F0aW9uIHdpdGggTW9udGdvbWVyeSBsYWRkZXIgaW4geC96IGNvb3JkaW5hdGVzLAorICogZm9yIGN1cnZlcyBpbiBNb250Z29tZXJ5IGZvcm0KKyAqLworc3RhdGljIGludCBlY3BfbXVsX214eiggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKlIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqbSwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlAsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaTsKKyAgICB1bnNpZ25lZCBjaGFyIGI7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgUlA7CisgICAgbWJlZHRsc19tcGkgUFg7CisKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUlAgKTsgbWJlZHRsc19tcGlfaW5pdCggJlBYICk7CisKKyAgICAvKiBTYXZlIFBYIGFuZCByZWFkIGZyb20gUCBiZWZvcmUgd3JpdGluZyB0byBSLCBpbiBjYXNlIFAgPT0gUiAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlBYLCAmUC0+WCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9jb3B5KCAmUlAsIFAgKSApOworCisgICAgLyogU2V0IFIgdG8gemVybyBpbiBtb2RpZmllZCB4L3ogY29vcmRpbmF0ZXMgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZSLT5YLCAxICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZSLT5aLCAwICkgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUi0+WSApOworCisgICAgLyogUlAuWCBtaWdodCBiZSBzbGlndGx5IGxhcmdlciB0aGFuIFAsIHNvIHJlZHVjZSBpdCAqLworICAgIE1PRF9BREQoIFJQLlggKTsKKworICAgIC8qIFJhbmRvbWl6ZSBjb29yZGluYXRlcyBvZiB0aGUgc3RhcnRpbmcgcG9pbnQgKi8KKyAgICBpZiggZl9ybmcgIT0gTlVMTCApCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggZWNwX3JhbmRvbWl6ZV9teHooIGdycCwgJlJQLCBmX3JuZywgcF9ybmcgKSApOworCisgICAgLyogTG9vcCBpbnZhcmlhbnQ6IFIgPSByZXN1bHQgc28gZmFyLCBSUCA9IFIgKyBQICovCisgICAgaSA9IG1iZWR0bHNfbXBpX2JpdGxlbiggbSApOyAvKiBvbmUgcGFzdCB0aGUgKHplcm8tYmFzZWQpIG1vc3Qgc2lnbmlmaWNhbnQgYml0ICovCisgICAgd2hpbGUoIGktLSA+IDAgKQorICAgIHsKKyAgICAgICAgYiA9IG1iZWR0bHNfbXBpX2dldF9iaXQoIG0sIGkgKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogIGlmIChiKSBSID0gMlIgKyBQIGVsc2UgUiA9IDJSLAorICAgICAgICAgKiB3aGljaCBpczoKKyAgICAgICAgICogIGlmIChiKSBkb3VibGVfYWRkKCBSUCwgUiwgUlAsIFIgKQorICAgICAgICAgKiAgZWxzZSAgIGRvdWJsZV9hZGQoIFIsIFJQLCBSLCBSUCApCisgICAgICAgICAqIGJ1dCB1c2luZyBzYWZlIGNvbmRpdGlvbmFsIHN3YXBzIHRvIGF2b2lkIGxlYWtzCisgICAgICAgICAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwKCAmUi0+WCwgJlJQLlgsIGIgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwKCAmUi0+WiwgJlJQLlosIGIgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9kb3VibGVfYWRkX214eiggZ3JwLCBSLCAmUlAsIFIsICZSUCwgJlBYICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcCggJlItPlgsICZSUC5YLCBiICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcCggJlItPlosICZSUC5aLCBiICkgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9ub3JtYWxpemVfbXh6KCBncnAsIFIgKSApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZSUCApOyBtYmVkdGxzX21waV9mcmVlKCAmUFggKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBFQ1BfTU9OVEdPTUVSWSAqLworCisvKgorICogTXVsdGlwbGljYXRpb24gUiA9IG0gKiBQCisgKi8KK2ludCBtYmVkdGxzX2VjcF9tdWwoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpSLAorICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpICptLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCwKKyAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgLyogQ29tbW9uIHNhbml0eSBjaGVja3MgKi8KKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJlAtPlosIDEgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXkoIGdycCwgbSApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggZ3JwLCBQICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworI2lmIGRlZmluZWQoRUNQX01PTlRHT01FUlkpCisgICAgaWYoIGVjcF9nZXRfdHlwZSggZ3JwICkgPT0gRUNQX1RZUEVfTU9OVEdPTUVSWSApCisgICAgICAgIHJldHVybiggZWNwX211bF9teHooIGdycCwgUiwgbSwgUCwgZl9ybmcsIHBfcm5nICkgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRUNQX1NIT1JUV0VJRVJTVFJBU1MpCisgICAgaWYoIGVjcF9nZXRfdHlwZSggZ3JwICkgPT0gRUNQX1RZUEVfU0hPUlRfV0VJRVJTVFJBU1MgKQorICAgICAgICByZXR1cm4oIGVjcF9tdWxfY29tYiggZ3JwLCBSLCBtLCBQLCBmX3JuZywgcF9ybmcgKSApOworI2VuZGlmCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKK30KKworI2lmIGRlZmluZWQoRUNQX1NIT1JUV0VJRVJTVFJBU1MpCisvKgorICogQ2hlY2sgdGhhdCBhbiBhZmZpbmUgcG9pbnQgaXMgdmFsaWQgYXMgYSBwdWJsaWMga2V5LAorICogc2hvcnQgd2VpZXJzdHJhc3MgY3VydmVzIChTRUMxIDMuMi4zLjEpCisgKi8KK3N0YXRpYyBpbnQgZWNwX2NoZWNrX3B1YmtleV9zdyggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKnB0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIFlZLCBSSFM7CisKKyAgICAvKiBwdCBjb29yZGluYXRlcyBtdXN0IGJlIG5vcm1hbGl6ZWQgZm9yIG91ciBjaGVja3MgKi8KKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJnB0LT5YLCAwICkgPCAwIHx8CisgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZwdC0+WSwgMCApIDwgMCB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmcHQtPlgsICZncnAtPlAgKSA+PSAwIHx8CisgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZwdC0+WSwgJmdycC0+UCApID49IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWSApOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJllZICk7IG1iZWR0bHNfbXBpX2luaXQoICZSSFMgKTsKKworICAgIC8qCisgICAgICogWVkgPSBZXjIKKyAgICAgKiBSSFMgPSBYIChYXjIgKyBBKSArIEIgPSBYXjMgKyBBIFggKyBCCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmWVksICAmcHQtPlksICAgJnB0LT5ZICApICk7ICBNT0RfTVVMKCBZWSAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZSSFMsICZwdC0+WCwgICAmcHQtPlggICkgKTsgIE1PRF9NVUwoIFJIUyApOworCisgICAgLyogU3BlY2lhbCBjYXNlIGZvciBBID0gLTMgKi8KKyAgICBpZiggZ3JwLT5BLnAgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZSSFMsICZSSFMsIDMgICAgICAgKSApOyAgTU9EX1NVQiggUkhTICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX21waSggJlJIUywgJlJIUywgJmdycC0+QSApICk7ICBNT0RfQUREKCBSSFMgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZSSFMsICZSSFMsICAgICAmcHQtPlggICkgKTsgIE1PRF9NVUwoIFJIUyApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX21waSggJlJIUywgJlJIUywgICAgICZncnAtPkIgKSApOyAgTU9EX0FERCggUkhTICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJllZLCAmUkhTICkgIT0gMCApCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWTsKKworY2xlYW51cDoKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZZWSApOyBtYmVkdGxzX21waV9mcmVlKCAmUkhTICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIEVDUF9TSE9SVFdFSUVSU1RSQVNTICovCisKKy8qCisgKiBSID0gbSAqIFAgd2l0aCBzaG9ydGN1dHMgZm9yIG0gPT0gMSBhbmQgbSA9PSAtMQorICogTk9UIGNvbnN0YW50LXRpbWUgLSBPTkxZIGZvciBzaG9ydCBXZWllcnN0cmFzcyEKKyAqLworc3RhdGljIGludCBtYmVkdGxzX2VjcF9tdWxfc2hvcnRjdXRzKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludCAqUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoIG0sIDEgKSA9PSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfY29weSggUiwgUCApICk7CisgICAgfQorICAgIGVsc2UgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoIG0sIC0xICkgPT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX2NvcHkoIFIsIFAgKSApOworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJlItPlksIDAgKSAhPSAwICkKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlItPlksICZncnAtPlAsICZSLT5ZICkgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWwoIGdycCwgUiwgbSwgUCwgTlVMTCwgTlVMTCApICk7CisgICAgfQorCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBMaW5lYXIgY29tYmluYXRpb24KKyAqIE5PVCBjb25zdGFudC10aW1lCisgKi8KK2ludCBtYmVkdGxzX2VjcF9tdWxhZGQoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpSLAorICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpICptLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCwKKyAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqbiwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlEgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgbVA7CisKKyAgICBpZiggZWNwX2dldF90eXBlKCBncnAgKSAhPSBFQ1BfVFlQRV9TSE9SVF9XRUlFUlNUUkFTUyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZtUCApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWxfc2hvcnRjdXRzKCBncnAsICZtUCwgbSwgUCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWxfc2hvcnRjdXRzKCBncnAsIFIsICAgbiwgUSApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9hZGRfbWl4ZWQoIGdycCwgUiwgJm1QLCBSICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9ub3JtYWxpemVfamFjKCBncnAsIFIgKSApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZtUCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworCisjaWYgZGVmaW5lZChFQ1BfTU9OVEdPTUVSWSkKKy8qCisgKiBDaGVjayB2YWxpZGl0eSBvZiBhIHB1YmxpYyBrZXkgZm9yIE1vbnRnb21lcnkgY3VydmVzIHdpdGggeC1vbmx5IHNjaGVtZXMKKyAqLworc3RhdGljIGludCBlY3BfY2hlY2tfcHVia2V5X214KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqcHQgKQoreworICAgIC8qIFtDdXJ2ZTI1NTE5IHAuIDVdIEp1c3QgY2hlY2sgWCBpcyB0aGUgY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMgKi8KKyAgICBpZiggbWJlZHRsc19tcGlfc2l6ZSggJnB0LT5YICkgPiAoIGdycC0+bmJpdHMgKyA3ICkgLyA4ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIEVDUF9NT05UR09NRVJZICovCisKKy8qCisgKiBDaGVjayB0aGF0IGEgcG9pbnQgaXMgdmFsaWQgYXMgYSBwdWJsaWMga2V5CisgKi8KK2ludCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpwdCApCit7CisgICAgLyogTXVzdCB1c2UgYWZmaW5lIGNvb3JkaW5hdGVzICovCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZwdC0+WiwgMSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWSApOworCisjaWYgZGVmaW5lZChFQ1BfTU9OVEdPTUVSWSkKKyAgICBpZiggZWNwX2dldF90eXBlKCBncnAgKSA9PSBFQ1BfVFlQRV9NT05UR09NRVJZICkKKyAgICAgICAgcmV0dXJuKCBlY3BfY2hlY2tfcHVia2V5X214KCBncnAsIHB0ICkgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRUNQX1NIT1JUV0VJRVJTVFJBU1MpCisgICAgaWYoIGVjcF9nZXRfdHlwZSggZ3JwICkgPT0gRUNQX1RZUEVfU0hPUlRfV0VJRVJTVFJBU1MgKQorICAgICAgICByZXR1cm4oIGVjcF9jaGVja19wdWJrZXlfc3coIGdycCwgcHQgKSApOworI2VuZGlmCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgYW4gbWJlZHRsc19tcGkgaXMgdmFsaWQgYXMgYSBwcml2YXRlIGtleQorICovCitpbnQgbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleSggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgY29uc3QgbWJlZHRsc19tcGkgKmQgKQoreworI2lmIGRlZmluZWQoRUNQX01PTlRHT01FUlkpCisgICAgaWYoIGVjcF9nZXRfdHlwZSggZ3JwICkgPT0gRUNQX1RZUEVfTU9OVEdPTUVSWSApCisgICAgeworICAgICAgICAvKiBzZWUgW0N1cnZlMjU1MTldIHBhZ2UgNSAqLworICAgICAgICBpZiggbWJlZHRsc19tcGlfZ2V0X2JpdCggZCwgMCApICE9IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX2dldF9iaXQoIGQsIDEgKSAhPSAwIHx8CisgICAgICAgICAgICBtYmVkdGxzX21waV9nZXRfYml0KCBkLCAyICkgIT0gMCB8fAorICAgICAgICAgICAgbWJlZHRsc19tcGlfYml0bGVuKCBkICkgLSAxICE9IGdycC0+bmJpdHMgKSAvKiBtYmVkdGxzX21waV9iaXRsZW4gaXMgb25lLWJhc2VkISAqLworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmIC8qIEVDUF9NT05UR09NRVJZICovCisjaWYgZGVmaW5lZChFQ1BfU0hPUlRXRUlFUlNUUkFTUykKKyAgICBpZiggZWNwX2dldF90eXBlKCBncnAgKSA9PSBFQ1BfVFlQRV9TSE9SVF9XRUlFUlNUUkFTUyApCisgICAgeworICAgICAgICAvKiBzZWUgU0VDMSAzLjIgKi8KKyAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoIGQsIDEgKSA8IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoIGQsICZncnAtPk4gKSA+PSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZiAvKiBFQ1BfU0hPUlRXRUlFUlNUUkFTUyAqLworCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIGEga2V5cGFpciB3aXRoIGNvbmZpZ3VyYWJsZSBiYXNlIHBvaW50CisgKi8KK2ludCBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpcl9iYXNlKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKkcsCisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21waSAqZCwgbWJlZHRsc19lY3BfcG9pbnQgKlEsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3Qgbl9zaXplID0gKCBncnAtPm5iaXRzICsgNyApIC8gODsKKworI2lmIGRlZmluZWQoRUNQX01PTlRHT01FUlkpCisgICAgaWYoIGVjcF9nZXRfdHlwZSggZ3JwICkgPT0gRUNQX1RZUEVfTU9OVEdPTUVSWSApCisgICAgeworICAgICAgICAvKiBbTTIyNV0gcGFnZSA1ICovCisgICAgICAgIHNpemVfdCBiOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oIGQsIG5fc2l6ZSwgZl9ybmcsIHBfcm5nICkgKTsKKyAgICAgICAgfSB3aGlsZSggbWJlZHRsc19tcGlfYml0bGVuKCBkICkgPT0gMCk7CisKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyBuYml0cyAqLworICAgICAgICBiID0gbWJlZHRsc19tcGlfYml0bGVuKCBkICkgLSAxOyAvKiBtYmVkdGxzX21waV9iaXRsZW4gaXMgb25lLWJhc2VkICovCisgICAgICAgIGlmKCBiID4gZ3JwLT5uYml0cyApCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoIGQsIGIgLSBncnAtPm5iaXRzICkgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zZXRfYml0KCBkLCBncnAtPm5iaXRzLCAxICkgKTsKKworICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGxhc3QgdGhyZWUgYml0cyBhcmUgdW5zZXQgKi8KKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zZXRfYml0KCBkLCAwLCAwICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zZXRfYml0KCBkLCAxLCAwICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zZXRfYml0KCBkLCAyLCAwICkgKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEVDUF9NT05UR09NRVJZICovCisjaWYgZGVmaW5lZChFQ1BfU0hPUlRXRUlFUlNUUkFTUykKKyAgICBpZiggZWNwX2dldF90eXBlKCBncnAgKSA9PSBFQ1BfVFlQRV9TSE9SVF9XRUlFUlNUUkFTUyApCisgICAgeworICAgICAgICAvKiBTRUMxIDMuMi4xOiBHZW5lcmF0ZSBkIHN1Y2ggdGhhdCAxIDw9IG4gPCBOICovCisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcm5kW01CRURUTFNfRUNQX01BWF9CWVRFU107CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTWF0Y2ggdGhlIHByb2NlZHVyZSBnaXZlbiBpbiBSRkMgNjk3OSAoZGV0ZXJtaW5pc3RpYyBFQ0RTQSk6CisgICAgICAgICAqIC0gdXNlIHRoZSBzYW1lIGJ5dGUgb3JkZXJpbmc7CisgICAgICAgICAqIC0ga2VlcCB0aGUgbGVmdG1vc3QgbmJpdHMgYml0cyBvZiB0aGUgZ2VuZXJhdGVkIG9jdGV0IHN0cmluZzsKKyAgICAgICAgICogLSB0cnkgdW50aWwgcmVzdWx0IGlzIGluIHRoZSBkZXNpcmVkIHJhbmdlLgorICAgICAgICAgKiBUaGlzIGFsc28gYXZvaWRzIGFueSBiaWFpcywgd2hpY2ggaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIEVDRFNBLgorICAgICAgICAgKi8KKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBmX3JuZyggcF9ybmcsIHJuZCwgbl9zaXplICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoIGQsIHJuZCwgbl9zaXplICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggZCwgOCAqIG5fc2l6ZSAtIGdycC0+bmJpdHMgKSApOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRWFjaCB0cnkgaGFzIGF0IHdvcnN0IGEgcHJvYmFiaWxpdHkgMS8yIG9mIGZhaWxpbmcgKHRoZSBtc2IgaGFzCisgICAgICAgICAgICAgKiBhIHByb2JhYmlsaXR5IDEvMiBvZiBiZWluZyAwLCBhbmQgdGhlbiB0aGUgcmVzdWx0IHdpbGwgYmUgPCBOKSwKKyAgICAgICAgICAgICAqIHNvIGFmdGVyIDMwIHRyaWVzIGZhaWx1cmUgcHJvYmFiaWxpdHkgaXMgYSBtb3N0IDIqKigtMzApLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEZvciBtb3N0IGN1cnZlcywgMSB0cnkgaXMgZW5vdWdoIHdpdGggb3ZlcndoZWxtaW5nIHByb2JhYmlsaXR5LAorICAgICAgICAgICAgICogc2luY2UgTiBzdGFydHMgd2l0aCBhIGxvdCBvZiAxcyBpbiBiaW5hcnksIGJ1dCBzb21lIGN1cnZlcworICAgICAgICAgICAgICogc3VjaCBhcyBzZWNwMjI0azEgYXJlIGFjdHVhbGx5IHZlcnkgY2xvc2UgdG8gdGhlIHdvcnN0IGNhc2UuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmKCArK2NvdW50ID4gMzAgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX1JBTkRPTV9GQUlMRUQgKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX2ludCggZCwgMSApIDwgMCB8fAorICAgICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggZCwgJmdycC0+TiApID49IDAgKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEVDUF9TSE9SVFdFSUVSU1RSQVNTICovCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisKK2NsZWFudXA6CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiggbWJlZHRsc19lY3BfbXVsKCBncnAsIFEsIGQsIEcsIGZfcm5nLCBwX3JuZyApICk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBrZXkgcGFpciwgd3JhcHBlciBmb3IgY29udmVudGlvbmFsIGJhc2UgcG9pbnQKKyAqLworaW50IG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21waSAqZCwgbWJlZHRsc19lY3BfcG9pbnQgKlEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIHJldHVybiggbWJlZHRsc19lY3BfZ2VuX2tleXBhaXJfYmFzZSggZ3JwLCAmZ3JwLT5HLCBkLCBRLCBmX3JuZywgcF9ybmcgKSApOworfQorCisvKgorICogR2VuZXJhdGUgYSBrZXlwYWlyLCBwcmV0dGllciB3cmFwcGVyCisgKi8KK2ludCBtYmVkdGxzX2VjcF9nZW5fa2V5KCBtYmVkdGxzX2VjcF9ncm91cF9pZCBncnBfaWQsIG1iZWR0bHNfZWNwX2tleXBhaXIgKmtleSwKKyAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmtleS0+Z3JwLCBncnBfaWQgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0dXJuKCBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpciggJmtleS0+Z3JwLCAma2V5LT5kLCAma2V5LT5RLCBmX3JuZywgcF9ybmcgKSApOworfQorCisvKgorICogQ2hlY2sgYSBwdWJsaWMtcHJpdmF0ZSBrZXkgcGFpcgorICovCitpbnQgbWJlZHRsc19lY3BfY2hlY2tfcHViX3ByaXYoIGNvbnN0IG1iZWR0bHNfZWNwX2tleXBhaXIgKnB1YiwgY29uc3QgbWJlZHRsc19lY3Bfa2V5cGFpciAqcHJ2ICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfZWNwX3BvaW50IFE7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworCisgICAgaWYoIHB1Yi0+Z3JwLmlkID09IE1CRURUTFNfRUNQX0RQX05PTkUgfHwKKyAgICAgICAgcHViLT5ncnAuaWQgIT0gcHJ2LT5ncnAuaWQgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJnB1Yi0+US5YLCAmcHJ2LT5RLlggKSB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmcHViLT5RLlksICZwcnYtPlEuWSApIHx8CisgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZwdWItPlEuWiwgJnBydi0+US5aICkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUSApOworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsKKworICAgIC8qIG1iZWR0bHNfZWNwX211bCgpIG5lZWRzIGEgbm9uLWNvbnN0IGdyb3VwLi4uICovCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfY29weSggJmdycCwgJnBydi0+Z3JwICk7CisKKyAgICAvKiBBbHNvIGNoZWNrcyBkIGlzIHZhbGlkICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWwoICZncnAsICZRLCAmcHJ2LT5kLCAmcHJ2LT5ncnAuRywgTlVMTCwgTlVMTCApICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJlEuWCwgJnBydi0+US5YICkgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJlEuWSwgJnBydi0+US5ZICkgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJlEuWiwgJnBydi0+US5aICkgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCitjbGVhbnVwOgorICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZRICk7CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfZWNwX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFIsIFA7CisgICAgbWJlZHRsc19tcGkgbTsKKyAgICB1bnNpZ25lZCBsb25nIGFkZF9jX3ByZXYsIGRibF9jX3ByZXYsIG11bF9jX3ByZXY7CisgICAgLyogZXhwb25lbnRzIGVzcGVjaWFsbHkgYWRhcHRlZCBmb3Igc2VjcDE5MnIxICovCisgICAgY29uc3QgY2hhciAqZXhwb25lbnRzW10gPQorICAgIHsKKyAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsIC8qIG9uZSAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGOTlERUY4MzYxNDZCQzlCMUI0RDIyODMwIiwgLyogTiAtIDEgKi8KKyAgICAgICAgIjVFQTZGMzg5QTM4QjhCQzgxRTc2Nzc1M0IxNUFBNTU2OUUxNzgyRTMwQUJFN0QyNSIsIC8qIHJhbmRvbSAqLworICAgICAgICAiNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwgLyogb25lIGFuZCB6ZXJvcyAqLworICAgICAgICAiN0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwgLyogYWxsIG9uZXMgKi8KKyAgICAgICAgIjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NSIsIC8qIDEwMTAxMC4uLiAqLworICAgIH07CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlIgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUCApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZtICk7CisKKyAgICAvKiBVc2Ugc2VjcDE5MnIxIGlmIGF2YWlsYWJsZSwgb3IgYW55IGF2YWlsYWJsZSBjdXJ2ZSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQpCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjEgKSApOworI2Vsc2UKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZncnAsIG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKS0+Z3JwX2lkICkgKTsKKyNlbmRpZgorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBFQ1AgdGVzdCAjMSAoY29uc3RhbnQgb3BfY291bnQsIGJhc2UgcG9pbnQgRyk6ICIgKTsKKworICAgIC8qIERvIGEgZHVtbXkgbXVsdGlwbGljYXRpb24gZmlyc3QgdG8gdHJpZ2dlciBwcmVjb21wdXRhdGlvbiAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJm0sIDIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfbXVsKCAmZ3JwLCAmUCwgJm0sICZncnAuRywgTlVMTCwgTlVMTCApICk7CisKKyAgICBhZGRfY291bnQgPSAwOworICAgIGRibF9jb3VudCA9IDA7CisgICAgbXVsX2NvdW50ID0gMDsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmbSwgMTYsIGV4cG9uZW50c1swXSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWwoICZncnAsICZSLCAmbSwgJmdycC5HLCBOVUxMLCBOVUxMICkgKTsKKworICAgIGZvciggaSA9IDE7IGkgPCBzaXplb2YoIGV4cG9uZW50cyApIC8gc2l6ZW9mKCBleHBvbmVudHNbMF0gKTsgaSsrICkKKyAgICB7CisgICAgICAgIGFkZF9jX3ByZXYgPSBhZGRfY291bnQ7CisgICAgICAgIGRibF9jX3ByZXYgPSBkYmxfY291bnQ7CisgICAgICAgIG11bF9jX3ByZXYgPSBtdWxfY291bnQ7CisgICAgICAgIGFkZF9jb3VudCA9IDA7CisgICAgICAgIGRibF9jb3VudCA9IDA7CisgICAgICAgIG11bF9jb3VudCA9IDA7CisKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJm0sIDE2LCBleHBvbmVudHNbaV0gKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bCggJmdycCwgJlIsICZtLCAmZ3JwLkcsIE5VTEwsIE5VTEwgKSApOworCisgICAgICAgIGlmKCBhZGRfY291bnQgIT0gYWRkX2NfcHJldiB8fAorICAgICAgICAgICAgZGJsX2NvdW50ICE9IGRibF9jX3ByZXYgfHwKKyAgICAgICAgICAgIG11bF9jb3VudCAhPSBtdWxfY19wcmV2ICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWQgKCV1KVxuIiwgKHVuc2lnbmVkIGludCkgaSApOworCisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEVDUCB0ZXN0ICMyIChjb25zdGFudCBvcF9jb3VudCwgb3RoZXIgcG9pbnQpOiAiICk7CisgICAgLyogV2UgY29tcHV0ZWQgUCA9IDJHIGxhc3QgdGltZSwgdXNlIGl0ICovCisKKyAgICBhZGRfY291bnQgPSAwOworICAgIGRibF9jb3VudCA9IDA7CisgICAgbXVsX2NvdW50ID0gMDsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmbSwgMTYsIGV4cG9uZW50c1swXSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWwoICZncnAsICZSLCAmbSwgJlAsIE5VTEwsIE5VTEwgKSApOworCisgICAgZm9yKCBpID0gMTsgaSA8IHNpemVvZiggZXhwb25lbnRzICkgLyBzaXplb2YoIGV4cG9uZW50c1swXSApOyBpKysgKQorICAgIHsKKyAgICAgICAgYWRkX2NfcHJldiA9IGFkZF9jb3VudDsKKyAgICAgICAgZGJsX2NfcHJldiA9IGRibF9jb3VudDsKKyAgICAgICAgbXVsX2NfcHJldiA9IG11bF9jb3VudDsKKyAgICAgICAgYWRkX2NvdW50ID0gMDsKKyAgICAgICAgZGJsX2NvdW50ID0gMDsKKyAgICAgICAgbXVsX2NvdW50ID0gMDsKKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmbSwgMTYsIGV4cG9uZW50c1tpXSApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfbXVsKCAmZ3JwLCAmUiwgJm0sICZQLCBOVUxMLCBOVUxMICkgKTsKKworICAgICAgICBpZiggYWRkX2NvdW50ICE9IGFkZF9jX3ByZXYgfHwKKyAgICAgICAgICAgIGRibF9jb3VudCAhPSBkYmxfY19wcmV2IHx8CisgICAgICAgICAgICBtdWxfY291bnQgIT0gbXVsX2NfcHJldiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkICgldSlcbiIsICh1bnNpZ25lZCBpbnQpIGkgKTsKKworICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCitjbGVhbnVwOgorCisgICAgaWYoIHJldCA8IDAgJiYgdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJVbmV4cGVjdGVkIGVycm9yLCByZXR1cm4gY29kZSA9ICUwOFhcbiIsIHJldCApOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZSICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlAgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmbSApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VjcF9jdXJ2ZXMuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VjcF9jdXJ2ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTZlOGViCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZWNwX2N1cnZlcy5jCkBAIC0wLDAgKzEsMTMyNSBAQAorLyoKKyAqICBFbGxpcHRpYyBjdXJ2ZXMgb3ZlciBHRihwKTogY3VydmUtc3BlY2lmaWMgZGF0YSBhbmQgZnVuY3Rpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2VjcC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiAoIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSB8fCBkZWZpbmVkKF9NU0NfVkVSKSApICYmIFwKKyAgICAhZGVmaW5lZChpbmxpbmUpICYmICFkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKKyNlbmRpZgorCisvKgorICogQ29udmVyc2lvbiBtYWNyb3MgZm9yIGVtYmVkZGVkIGNvbnN0YW50czoKKyAqIGJ1aWxkIGxpc3RzIG9mIG1iZWR0bHNfbXBpX3VpbnQncyBmcm9tIGxpc3RzIG9mIHVuc2lnbmVkIGNoYXIncyBncm91cGVkIGJ5IDgsIDQgb3IgMgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfSU5UMzIpCisKKyNkZWZpbmUgQllURVNfVE9fVF9VSU5UXzQoIGEsIGIsIGMsIGQgKSAgICAgICAgICAgICBcCisgICAgKCAobWJlZHRsc19tcGlfdWludCkgYSA8PCAgMCApIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoIChtYmVkdGxzX21waV91aW50KSBiIDw8ICA4ICkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggKG1iZWR0bHNfbXBpX3VpbnQpIGMgPDwgMTYgKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAobWJlZHRsc19tcGlfdWludCkgZCA8PCAyNCApCisKKyNkZWZpbmUgQllURVNfVE9fVF9VSU5UXzIoIGEsIGIgKSAgICAgICAgICAgICAgICAgICBcCisgICAgQllURVNfVE9fVF9VSU5UXzQoIGEsIGIsIDAsIDAgKQorCisjZGVmaW5lIEJZVEVTX1RPX1RfVUlOVF84KCBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoICkgXAorICAgIEJZVEVTX1RPX1RfVUlOVF80KCBhLCBiLCBjLCBkICksICAgICAgICAgICAgICAgIFwKKyAgICBCWVRFU19UT19UX1VJTlRfNCggZSwgZiwgZywgaCApCisKKyNlbHNlIC8qIDY0LWJpdHMgKi8KKworI2RlZmluZSBCWVRFU19UT19UX1VJTlRfOCggYSwgYiwgYywgZCwgZSwgZiwgZywgaCApIFwKKyAgICAoIChtYmVkdGxzX21waV91aW50KSBhIDw8ICAwICkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggKG1iZWR0bHNfbXBpX3VpbnQpIGIgPDwgIDggKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAobWJlZHRsc19tcGlfdWludCkgYyA8PCAxNiApIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoIChtYmVkdGxzX21waV91aW50KSBkIDw8IDI0ICkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggKG1iZWR0bHNfbXBpX3VpbnQpIGUgPDwgMzIgKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAobWJlZHRsc19tcGlfdWludCkgZiA8PCA0MCApIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoIChtYmVkdGxzX21waV91aW50KSBnIDw8IDQ4ICkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggKG1iZWR0bHNfbXBpX3VpbnQpIGggPDwgNTYgKQorCisjZGVmaW5lIEJZVEVTX1RPX1RfVUlOVF80KCBhLCBiLCBjLCBkICkgICAgICAgICAgICAgXAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCBhLCBiLCBjLCBkLCAwLCAwLCAwLCAwICkKKworI2RlZmluZSBCWVRFU19UT19UX1VJTlRfMiggYSwgYiApICAgICAgICAgICAgICAgICAgIFwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggYSwgYiwgMCwgMCwgMCwgMCwgMCwgMCApCisKKyNlbmRpZiAvKiBiaXRzIGluIG1iZWR0bHNfbXBpX3VpbnQgKi8KKworLyoKKyAqIE5vdGU6IHRoZSBjb25zdGFudHMgYXJlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIKKyAqIHRvIGJlIGRpcmVjdGx5IHVzYWJsZSBpbiBNUElzCisgKi8KKworLyoKKyAqIERvbWFpbiBwYXJhbWV0ZXJzIGZvciBzZWNwMTkycjEKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQpCitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMTkycjFfcFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AxOTJyMV9iW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QjEsIDB4QjksIDB4NDYsIDB4QzEsIDB4RUMsIDB4REUsIDB4QjgsIDB4RkUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg0OSwgMHgzMCwgMHgyNCwgMHg3MiwgMHhBQiwgMHhFOSwgMHhBNywgMHgwRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEU3LCAweDgwLCAweDlDLCAweEU1LCAweDE5LCAweDA1LCAweDIxLCAweDY0ICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDE5MnIxX2d4W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MTIsIDB4MTAsIDB4RkYsIDB4ODIsIDB4RkQsIDB4MEEsIDB4RkYsIDB4RjQgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwMCwgMHg4OCwgMHhBMSwgMHg0MywgMHhFQiwgMHgyMCwgMHhCRiwgMHg3QyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEY2LCAweDkwLCAweDMwLCAweEIwLCAweDBFLCAweEE4LCAweDhELCAweDE4ICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDE5MnIxX2d5W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MTEsIDB4NDgsIDB4NzksIDB4MUUsIDB4QTEsIDB4NzcsIDB4RjksIDB4NzMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhENSwgMHhDRCwgMHgyNCwgMHg2QiwgMHhFRCwgMHgxMSwgMHgxMCwgMHg2MyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDc4LCAweERBLCAweEM4LCAweEZGLCAweDk1LCAweDJCLCAweDE5LCAweDA3ICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDE5MnIxX25bXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgzMSwgMHgyOCwgMHhEMiwgMHhCNCwgMHhCMSwgMHhDOSwgMHg2QiwgMHgxNCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDM2LCAweEY4LCAweERFLCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKK307CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQgKi8KKworLyoKKyAqIERvbWFpbiBwYXJhbWV0ZXJzIGZvciBzZWNwMjI0cjEKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQpCitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjI0cjFfcFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDAwLCAweDAwLCAweDAwLCAweDAwICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDIyNHIxX2JbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCNCwgMHhGRiwgMHg1NSwgMHgyMywgMHg0MywgMHgzOSwgMHgwQiwgMHgyNyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEJBLCAweEQ4LCAweEJGLCAweEQ3LCAweEI3LCAweEIwLCAweDQ0LCAweDUwICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NTYsIDB4MzIsIDB4NDEsIDB4RjUsIDB4QUIsIDB4QjMsIDB4MDQsIDB4MEMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfNCggMHg4NSwgMHgwQSwgMHgwNSwgMHhCNCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyMjRyMV9neFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDIxLCAweDFELCAweDVDLCAweDExLCAweEQ2LCAweDgwLCAweDMyLCAweDM0ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MjIsIDB4MTEsIDB4QzIsIDB4NTYsIDB4RDMsIDB4QzEsIDB4MDMsIDB4NEEgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCOSwgMHg5MCwgMHgxMywgMHgzMiwgMHg3RiwgMHhCRiwgMHhCNCwgMHg2QiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF80KCAweEJELCAweDBDLCAweDBFLCAweEI3ICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDIyNHIxX2d5W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MzQsIDB4N0UsIDB4MDAsIDB4ODUsIDB4OTksIDB4ODEsIDB4RDUsIDB4NDQgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2NCwgMHg0NywgMHgwNywgMHg1QSwgMHhBMCwgMHg3NSwgMHg0MywgMHhDRCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEU2LCAweERGLCAweDIyLCAweDRDLCAweEZCLCAweDIzLCAweEY3LCAweEI1ICksCisgICAgQllURVNfVE9fVF9VSU5UXzQoIDB4ODgsIDB4NjMsIDB4MzcsIDB4QkQgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjI0cjFfbltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDNELCAweDJBLCAweDVDLCAweDVDLCAweDQ1LCAweDI5LCAweERELCAweDEzICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4M0UsIDB4RjAsIDB4QjgsIDB4RTAsIDB4QTIsIDB4MTYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF80KCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCit9OworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEICovCisKKy8qCisgKiBEb21haW4gcGFyYW1ldGVycyBmb3Igc2VjcDI1NnIxCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDI1NnIxX3BbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDAwLCAweDAwLCAweDAwLCAweDAwICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyNTZyMV9iW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NEIsIDB4NjAsIDB4RDIsIDB4MjcsIDB4M0UsIDB4M0MsIDB4Q0UsIDB4M0IgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGNiwgMHhCMCwgMHg1MywgMHhDQywgMHhCMCwgMHgwNiwgMHgxRCwgMHg2NSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEJDLCAweDg2LCAweDk4LCAweDc2LCAweDU1LCAweEJELCAweEVCLCAweEIzICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RTcsIDB4OTMsIDB4M0EsIDB4QUEsIDB4RDgsIDB4MzUsIDB4QzYsIDB4NUEgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjU2cjFfZ3hbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg5NiwgMHhDMiwgMHg5OCwgMHhEOCwgMHg0NSwgMHgzOSwgMHhBMSwgMHhGNCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEEwLCAweDMzLCAweEVCLCAweDJELCAweDgxLCAweDdELCAweDAzLCAweDc3ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RjIsIDB4NDAsIDB4QTQsIDB4NjMsIDB4RTUsIDB4RTYsIDB4QkMsIDB4RjggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg0NywgMHg0MiwgMHgyQywgMHhFMSwgMHhGMiwgMHhEMSwgMHgxNywgMHg2QiApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyNTZyMV9neVtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEY1LCAweDUxLCAweEJGLCAweDM3LCAweDY4LCAweDQwLCAweEI2LCAweENCICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4Q0UsIDB4NUUsIDB4MzEsIDB4NkIsIDB4NTcsIDB4MzMsIDB4Q0UsIDB4MkIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgxNiwgMHg5RSwgMHgwRiwgMHg3QywgMHg0QSwgMHhFQiwgMHhFNywgMHg4RSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDlCLCAweDdGLCAweDFBLCAweEZFLCAweEUyLCAweDQyLCAweEUzLCAweDRGICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDI1NnIxX25bXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg1MSwgMHgyNSwgMHg2MywgMHhGQywgMHhDMiwgMHhDQSwgMHhCOSwgMHhGMyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDg0LCAweDlFLCAweDE3LCAweEE3LCAweEFELCAweEZBLCAweEU2LCAweEJDICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCAqLworCisvKgorICogRG9tYWluIHBhcmFtZXRlcnMgZm9yIHNlY3AzODRyMQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCkKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AzODRyMV9wW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDM4NHIxX2JbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhFRiwgMHgyQSwgMHhFQywgMHhEMywgMHhFRCwgMHhDOCwgMHg4NSwgMHgyQSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDlELCAweEQxLCAweDJFLCAweDhBLCAweDhELCAweDM5LCAweDU2LCAweEM2ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NUEsIDB4ODcsIDB4MTMsIDB4NTAsIDB4OEYsIDB4MDgsIDB4MTQsIDB4MDMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgxMiwgMHg0MSwgMHg4MSwgMHhGRSwgMHg2RSwgMHg5QywgMHgxRCwgMHgxOCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDE5LCAweDJELCAweEY4LCAweEUzLCAweDZCLCAweDA1LCAweDhFLCAweDk4ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RTQsIDB4RTcsIDB4M0UsIDB4RTIsIDB4QTcsIDB4MkYsIDB4MzEsIDB4QjMgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMzg0cjFfZ3hbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCNywgMHgwQSwgMHg3NiwgMHg3MiwgMHgzOCwgMHg1RSwgMHg1NCwgMHgzQSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDZDLCAweDI5LCAweDU1LCAweEJGLCAweDVELCAweEYyLCAweDAyLCAweDU1ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MzgsIDB4MkEsIDB4NTQsIDB4ODIsIDB4RTAsIDB4NDEsIDB4RjcsIDB4NTkgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg5OCwgMHg5QiwgMHhBNywgMHg4QiwgMHg2MiwgMHgzQiwgMHgxRCwgMHg2RSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDc0LCAweEFELCAweDIwLCAweEYzLCAweDFFLCAweEM3LCAweEIxLCAweDhFICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MzcsIDB4MDUsIDB4OEIsIDB4QkUsIDB4MjIsIDB4Q0EsIDB4ODcsIDB4QUEgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMzg0cjFfZ3lbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg1RiwgMHgwRSwgMHhFQSwgMHg5MCwgMHg3QywgMHgxRCwgMHg0MywgMHg3QSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDlELCAweDgxLCAweDdFLCAweDFELCAweENFLCAweEIxLCAweDYwLCAweDBBICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QzAsIDB4QjgsIDB4RjAsIDB4QjUsIDB4MTMsIDB4MzEsIDB4REEsIDB4RTkgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg3QywgMHgxNCwgMHg5QSwgMHgyOCwgMHhCRCwgMHgxRCwgMHhGNCwgMHhGOCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDI5LCAweERDLCAweDkyLCAweDkyLCAweEJGLCAweDk4LCAweDlFLCAweDVEICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NkYsIDB4MkMsIDB4MjYsIDB4OTYsIDB4NEEsIDB4REUsIDB4MTcsIDB4MzYgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMzg0cjFfbltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDczLCAweDI5LCAweEM1LCAweENDLCAweDZBLCAweDE5LCAweEVDLCAweEVDICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4N0EsIDB4QTcsIDB4QjAsIDB4NDgsIDB4QjIsIDB4MEQsIDB4MUEsIDB4NTggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhERiwgMHgyRCwgMHgzNywgMHhGNCwgMHg4MSwgMHg0RCwgMHg2MywgMHhDNyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCAqLworCisvKgorICogRG9tYWluIHBhcmFtZXRlcnMgZm9yIHNlY3A1MjFyMQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCkKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3A1MjFyMV9wW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF8yKCAweEZGLCAweDAxICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDUyMXIxX2JbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwMCwgMHgzRiwgMHg1MCwgMHg2QiwgMHhENCwgMHgxRiwgMHg0NSwgMHhFRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEYxLCAweDM0LCAweDJDLCAweDNELCAweDg4LCAweERGLCAweDczLCAweDM1ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MDcsIDB4QkYsIDB4QjEsIDB4M0IsIDB4QkQsIDB4QzAsIDB4NTIsIDB4MTYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg3QiwgMHg5MywgMHg3RSwgMHhFQywgMHg1MSwgMHgzOSwgMHgxOSwgMHg1NiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEUxLCAweDA5LCAweEYxLCAweDhFLCAweDkxLCAweDg5LCAweEI0LCAweEI4ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RjMsIDB4MTUsIDB4QjMsIDB4OTksIDB4NUIsIDB4NzIsIDB4REEsIDB4QTIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhFRSwgMHg0MCwgMHg4NSwgMHhCNiwgMHhBMCwgMHgyMSwgMHg5QSwgMHg5MiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDFGLCAweDlBLCAweDFDLCAweDhFLCAweDYxLCAweEI5LCAweDNFLCAweDk1ICksCisgICAgQllURVNfVE9fVF9VSU5UXzIoIDB4NTEsIDB4MDAgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwNTIxcjFfZ3hbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2NiwgMHhCRCwgMHhFNSwgMHhDMiwgMHgzMSwgMHg3RSwgMHg3RSwgMHhGOSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDlCLCAweDQyLCAweDZBLCAweDg1LCAweEMxLCAweEIzLCAweDQ4LCAweDMzICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4REUsIDB4QTgsIDB4RkYsIDB4QTIsIDB4MjcsIDB4QzEsIDB4MUQsIDB4RkUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgyOCwgMHg1OSwgMHhFNywgMHhFRiwgMHg3NywgMHg1RSwgMHg0QiwgMHhBMSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEJBLCAweDNELCAweDRELCAweDZCLCAweDYwLCAweEFGLCAweDI4LCAweEY4ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MjEsIDB4QjUsIDB4M0YsIDB4MDUsIDB4MzksIDB4ODEsIDB4NjQsIDB4OUMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg0MiwgMHhCNCwgMHg5NSwgMHgyMywgMHg2NiwgMHhDQiwgMHgzRSwgMHg5RSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweENELCAweEU5LCAweDA0LCAweDA0LCAweEI3LCAweDA2LCAweDhFLCAweDg1ICksCisgICAgQllURVNfVE9fVF9VSU5UXzIoIDB4QzYsIDB4MDAgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwNTIxcjFfZ3lbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg1MCwgMHg2NiwgMHhEMSwgMHg5RiwgMHg3NiwgMHg5NCwgMHhCRSwgMHg4OCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDQwLCAweEMyLCAweDcyLCAweEEyLCAweDg2LCAweDcwLCAweDNDLCAweDM1ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NjEsIDB4MDcsIDB4QUQsIDB4M0YsIDB4MDEsIDB4QjksIDB4NTAsIDB4QzUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg0MCwgMHgyNiwgMHhGNCwgMHg1RSwgMHg5OSwgMHg3MiwgMHhFRSwgMHg5NyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDJDLCAweDY2LCAweDNFLCAweDI3LCAweDE3LCAweEJELCAweEFGLCAweDE3ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NjgsIDB4NDQsIDB4OUIsIDB4NTcsIDB4NDksIDB4NDQsIDB4RjUsIDB4OTggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhEOSwgMHgxQiwgMHg3RCwgMHgyQywgMHhCNCwgMHg1RiwgMHg4QSwgMHg1QyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDA0LCAweEMwLCAweDNCLCAweDlBLCAweDc4LCAweDZBLCAweDI5LCAweDM5ICksCisgICAgQllURVNfVE9fVF9VSU5UXzIoIDB4MTgsIDB4MDEgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwNTIxcjFfbltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDA5LCAweDY0LCAweDM4LCAweDkxLCAweDFFLCAweEI3LCAweDZGLCAweEJCICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QUUsIDB4NDcsIDB4OUMsIDB4ODksIDB4QjgsIDB4QzksIDB4QjUsIDB4M0IgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhEMCwgMHhBNSwgMHgwOSwgMHhGNywgMHg0OCwgMHgwMSwgMHhDQywgMHg3RiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDZCLCAweDk2LCAweDJGLCAweEJGLCAweDgzLCAweDg3LCAweDg2LCAweDUxICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkEsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfMiggMHhGRiwgMHgwMSApLAorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCkKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AxOTJrMV9wW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MzcsIDB4RUUsIDB4RkYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDE5MmsxX2FbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfMiggMHgwMCwgMHgwMCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AxOTJrMV9iW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzIoIDB4MDMsIDB4MDAgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMTkyazFfZ3hbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg3RCwgMHg2QywgMHhFMCwgMHhFQSwgMHhCMSwgMHhEMSwgMHhBNSwgMHgxRCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDM0LCAweEY0LCAweEI3LCAweDgwLCAweDAyLCAweDdELCAweEIwLCAweDI2ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QUUsIDB4RTksIDB4NTcsIDB4QzAsIDB4MEUsIDB4RjEsIDB4NEYsIDB4REIgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMTkyazFfZ3lbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg5RCwgMHgyRiwgMHg1RSwgMHhEOSwgMHg4OCwgMHhBQSwgMHg4MiwgMHg0MCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDM0LCAweDg2LCAweEJFLCAweDE1LCAweEQwLCAweDYzLCAweDQxLCAweDg0ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QTcsIDB4MjgsIDB4NTYsIDB4OUMsIDB4NkQsIDB4MkYsIDB4MkYsIDB4OUIgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMTkyazFfbltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDhELCAweEZELCAweERFLCAweDc0LCAweDZBLCAweDQ2LCAweDY5LCAweDBGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MTcsIDB4RkMsIDB4RjIsIDB4MjYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCkKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyMjRrMV9wW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NkQsIDB4RTUsIDB4RkYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzQoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjI0azFfYVtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF8yKCAweDAwLCAweDAwICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDIyNGsxX2JbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfMiggMHgwNSwgMHgwMCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyMjRrMV9neFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDVDLCAweEE0LCAweEI3LCAweEI2LCAweDBFLCAweDY1LCAweDdFLCAweDBGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QTksIDB4NzUsIDB4NzAsIDB4RTQsIDB4RTksIDB4NjcsIDB4QTQsIDB4NjkgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBMSwgMHgyOCwgMHhGQywgMHgzMCwgMHhERiwgMHg5OSwgMHhGMCwgMHg0RCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF80KCAweDMzLCAweDVCLCAweDQ1LCAweEExICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDIyNGsxX2d5W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QTUsIDB4NjEsIDB4NkQsIDB4NTUsIDB4REIsIDB4NEIsIDB4Q0EsIDB4RTIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg1OSwgMHhCRCwgMHhCMCwgMHhDMCwgMHhGNywgMHgxOSwgMHhFMywgMHhGNyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEQ2LCAweEZCLCAweENBLCAweDgyLCAweDQyLCAweDM0LCAweEJBLCAweDdGICksCisgICAgQllURVNfVE9fVF9VSU5UXzQoIDB4RUQsIDB4OUYsIDB4MDgsIDB4N0UgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjI0azFfbltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEY3LCAweEIxLCAweDlGLCAweDc2LCAweDcxLCAweEE5LCAweEYwLCAweENBICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4ODQsIDB4NjEsIDB4RUMsIDB4RDIsIDB4RTgsIDB4REMsIDB4MDEsIDB4MDAgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwICksCit9OworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDI1NmsxX3BbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgyRiwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyNTZrMV9hW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzIoIDB4MDAsIDB4MDAgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjU2azFfYltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF8yKCAweDA3LCAweDAwICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDI1NmsxX2d4W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4OTgsIDB4MTcsIDB4RjgsIDB4MTYsIDB4NUIsIDB4ODEsIDB4RjIsIDB4NTkgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhEOSwgMHgyOCwgMHhDRSwgMHgyRCwgMHhEQiwgMHhGQywgMHg5QiwgMHgwMiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDA3LCAweDBCLCAweDg3LCAweENFLCAweDk1LCAweDYyLCAweEEwLCAweDU1ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QUMsIDB4QkIsIDB4REMsIDB4RjksIDB4N0UsIDB4NjYsIDB4QkUsIDB4NzkgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjU2azFfZ3lbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCOCwgMHhENCwgMHgxMCwgMHhGQiwgMHg4RiwgMHhEMCwgMHg0NywgMHg5QyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDE5LCAweDU0LCAweDg1LCAweEE2LCAweDQ4LCAweEI0LCAweDE3LCAweEZEICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QTgsIDB4MDgsIDB4MTEsIDB4MEUsIDB4RkMsIDB4RkIsIDB4QTQsIDB4NUQgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2NSwgMHhDNCwgMHhBMywgMHgyNiwgMHg3NywgMHhEQSwgMHgzQSwgMHg0OCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyNTZrMV9uW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NDEsIDB4NDEsIDB4MzYsIDB4RDAsIDB4OEMsIDB4NUUsIDB4RDIsIDB4QkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgzQiwgMHhBMCwgMHg0OCwgMHhBRiwgMHhFNiwgMHhEQywgMHhBRSwgMHhCQSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKK307CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQgKi8KKworLyoKKyAqIERvbWFpbiBwYXJhbWV0ZXJzIGZvciBicmFpbnBvb2xQMjU2cjEgKFJGQyA1NjM5IDMuNCkKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlAyNTZSMV9FTkFCTEVEKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgYnJhaW5wb29sUDI1NnIxX3BbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg3NywgMHg1MywgMHg2RSwgMHgxRiwgMHgxRCwgMHg0OCwgMHgxMywgMHgyMCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDI4LCAweDIwLCAweDI2LCAweEQ1LCAweDIzLCAweEY2LCAweDNCLCAweDZFICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NzIsIDB4OEQsIDB4ODMsIDB4OUQsIDB4OTAsIDB4MEEsIDB4NjYsIDB4M0UgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCQywgMHhBOSwgMHhFRSwgMHhBMSwgMHhEQiwgMHg1NywgMHhGQiwgMHhBOSApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFAyNTZyMV9hW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RDksIDB4QjUsIDB4MzAsIDB4RjMsIDB4NDQsIDB4NEIsIDB4NEEsIDB4RTkgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2QywgMHg1QywgMHhEQywgMHgyNiwgMHhDMSwgMHg1NSwgMHg4MCwgMHhGQiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEU3LCAweEZGLCAweDdBLCAweDQxLCAweDMwLCAweDc1LCAweEY2LCAweEVFICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NTcsIDB4MzAsIDB4MkMsIDB4RkMsIDB4NzUsIDB4MDksIDB4NUEsIDB4N0QgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBicmFpbnBvb2xQMjU2cjFfYltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEI2LCAweDA3LCAweDhDLCAweEZGLCAweDE4LCAweERDLCAweENDLCAweDZCICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4Q0UsIDB4RTEsIDB4RjcsIDB4NUMsIDB4MjksIDB4MTYsIDB4ODQsIDB4OTUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCRiwgMHg3QywgMHhENywgMHhCQiwgMHhEOSwgMHhCNSwgMHgzMCwgMHhGMyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDQ0LCAweDRCLCAweDRBLCAweEU5LCAweDZDLCAweDVDLCAweERDLCAweDI2ICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgYnJhaW5wb29sUDI1NnIxX2d4W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NjIsIDB4MzIsIDB4Q0UsIDB4OUEsIDB4QkQsIDB4NTMsIDB4NDQsIDB4M0EgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhDMiwgMHgyMywgMHhCRCwgMHhFMywgMHhFMSwgMHgyNywgMHhERSwgMHhCOSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEFGLCAweEI3LCAweDgxLCAweEZDLCAweDJGLCAweDQ4LCAweDRCLCAweDJDICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4Q0IsIDB4NTcsIDB4N0UsIDB4Q0IsIDB4QjksIDB4QUUsIDB4RDIsIDB4OEIgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBicmFpbnBvb2xQMjU2cjFfZ3lbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg5NywgMHg2OSwgMHgwNCwgMHgyRiwgMHhDNywgMHg1NCwgMHgxRCwgMHg1QyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDU0LCAweDhFLCAweEVELCAweDJELCAweDEzLCAweDQ1LCAweDc3LCAweEMyICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QzksIDB4MUQsIDB4NjEsIDB4MTQsIDB4MUEsIDB4NDYsIDB4RjgsIDB4OTcgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRCwgMHhDNCwgMHhEQSwgMHhDMywgMHgzNSwgMHhGOCwgMHg3RSwgMHg1NCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFAyNTZyMV9uW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QTcsIDB4NTYsIDB4NDgsIDB4OTcsIDB4ODIsIDB4MEUsIDB4MUUsIDB4OTAgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGNywgMHhBNiwgMHg2MSwgMHhCNSwgMHhBMywgMHg3QSwgMHgzOSwgMHg4QyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDcxLCAweDhELCAweDgzLCAweDlELCAweDkwLCAweDBBLCAweDY2LCAweDNFICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QkMsIDB4QTksIDB4RUUsIDB4QTEsIDB4REIsIDB4NTcsIDB4RkIsIDB4QTkgKSwKK307CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQlAyNTZSMV9FTkFCTEVEICovCisKKy8qCisgKiBEb21haW4gcGFyYW1ldGVycyBmb3IgYnJhaW5wb29sUDM4NHIxIChSRkMgNTYzOSAzLjYpCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRCkKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFAzODRyMV9wW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NTMsIDB4RUMsIDB4MDcsIDB4MzEsIDB4MTMsIDB4MDAsIDB4NDcsIDB4ODcgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg3MSwgMHgxQSwgMHgxRCwgMHg5MCwgMHgyOSwgMHhBNywgMHhEMywgMHhBQyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDIzLCAweDExLCAweEI3LCAweDdGLCAweDE5LCAweERBLCAweEIxLCAweDEyICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QjQsIDB4NTYsIDB4NTQsIDB4RUQsIDB4MDksIDB4NzEsIDB4MkYsIDB4MTUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhERiwgMHg0MSwgMHhFNiwgMHg1MCwgMHg3RSwgMHg2RiwgMHg1RCwgMHgwRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDI4LCAweDZELCAweDM4LCAweEEzLCAweDgyLCAweDFFLCAweEI5LCAweDhDICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgYnJhaW5wb29sUDM4NHIxX2FbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgyNiwgMHgyOCwgMHhDRSwgMHgyMiwgMHhERCwgMHhDNywgMHhBOCwgMHgwNCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEVCLCAweEQ0LCAweDNBLCAweDUwLCAweDRBLCAweDgxLCAweEE1LCAweDhBICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MEYsIDB4RjksIDB4OTEsIDB4QkEsIDB4RUYsIDB4NjUsIDB4OTEsIDB4MTMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg4NywgMHgyNywgMHhCMiwgMHg0RiwgMHg4RSwgMHhBMiwgMHhCRSwgMHhDMiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEEwLCAweEFGLCAweDA1LCAweENFLCAweDBBLCAweDA4LCAweDcyLCAweDNDICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MEMsIDB4MTUsIDB4OEMsIDB4M0QsIDB4QzYsIDB4ODIsIDB4QzMsIDB4N0IgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBicmFpbnBvb2xQMzg0cjFfYltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDExLCAweDRDLCAweDUwLCAweEZBLCAweDk2LCAweDg2LCAweEI3LCAweDNBICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4OTQsIDB4QzksIDB4REIsIDB4OTUsIDB4MDIsIDB4MzksIDB4QjQsIDB4N0MgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhENSwgMHg2MiwgMHhFQiwgMHgzRSwgMHhBNSwgMHgwRSwgMHg4OCwgMHgyRSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEE2LCAweEQyLCAweERDLCAweDA3LCAweEUxLCAweDdELCAweEI3LCAweDJGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4N0MsIDB4NDQsIDB4RjAsIDB4MTYsIDB4NTQsIDB4QjUsIDB4MzksIDB4OEIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgyNiwgMHgyOCwgMHhDRSwgMHgyMiwgMHhERCwgMHhDNywgMHhBOCwgMHgwNCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFAzODRyMV9neFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDFFLCAweEFGLCAweEQ0LCAweDQ3LCAweEUyLCAweEIyLCAweDg3LCAweEVGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QUEsIDB4NDYsIDB4RDYsIDB4MzYsIDB4MzQsIDB4RTAsIDB4MjYsIDB4RTggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhFOCwgMHgxMCwgMHhCRCwgMHgwQywgMHhGRSwgMHhDQSwgMHg3RiwgMHhEQiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEUzLCAweDRGLCAweEYxLCAweDdFLCAweEU3LCAweEEzLCAweDQ3LCAweDg4ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NkIsIDB4M0YsIDB4QzEsIDB4QjcsIDB4ODEsIDB4M0EsIDB4QTYsIDB4QTIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHg0NSwgMHhDRiwgMHg2OCwgMHhGMCwgMHg2NCwgMHgxQywgMHgxRCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFAzODRyMV9neVtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDE1LCAweDUzLCAweDNDLCAweDI2LCAweDQxLCAweDAzLCAweDgyLCAweDQyICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MTEsIDB4ODEsIDB4OTEsIDB4NzcsIDB4MjEsIDB4NDYsIDB4NDYsIDB4MEUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgyOCwgMHgyOSwgMHg5MSwgMHhGOSwgMHg0RiwgMHgwNSwgMHg5QywgMHhFMSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDY0LCAweDU4LCAweEVDLCAweEZFLCAweDI5LCAweDBCLCAweEI3LCAweDYyICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NTIsIDB4RDUsIDB4Q0YsIDB4OTUsIDB4OEUsIDB4RUIsIDB4QjEsIDB4NUMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBNCwgMHhDMiwgMHhGOSwgMHgyMCwgMHg3NSwgMHgxRCwgMHhCRSwgMHg4QSApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFAzODRyMV9uW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NjUsIDB4NjUsIDB4MDQsIDB4RTksIDB4MDIsIDB4MzIsIDB4ODgsIDB4M0IgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgxMCwgMHhDMywgMHg3RiwgMHg2QiwgMHhBRiwgMHhCNiwgMHgzQSwgMHhDRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEE3LCAweDI1LCAweDA0LCAweEFDLCAweDZDLCAweDZFLCAweDE2LCAweDFGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QjMsIDB4NTYsIDB4NTQsIDB4RUQsIDB4MDksIDB4NzEsIDB4MkYsIDB4MTUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhERiwgMHg0MSwgMHhFNiwgMHg1MCwgMHg3RSwgMHg2RiwgMHg1RCwgMHgwRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDI4LCAweDZELCAweDM4LCAweEEzLCAweDgyLCAweDFFLCAweEI5LCAweDhDICksCit9OworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRCAqLworCisvKgorICogRG9tYWluIHBhcmFtZXRlcnMgZm9yIGJyYWlucG9vbFA1MTJyMSAoUkZDIDU2MzkgMy43KQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQpCitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBicmFpbnBvb2xQNTEycjFfcFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEYzLCAweDQ4LCAweDNBLCAweDU4LCAweDU2LCAweDYwLCAweEFBLCAweDI4ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4ODUsIDB4QzYsIDB4ODIsIDB4MkQsIDB4MkYsIDB4RkYsIDB4ODEsIDB4MjggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhFNiwgMHg4MCwgMHhBMywgMHhFNiwgMHgyQSwgMHhBMSwgMHhDRCwgMHhBRSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDQyLCAweDY4LCAweEM2LCAweDlCLCAweDAwLCAweDlCLCAweDRELCAweDdEICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NzEsIDB4MDgsIDB4MzMsIDB4NzAsIDB4Q0EsIDB4OUMsIDB4NjMsIDB4RDYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwRSwgMHhEMiwgMHhDOSwgMHhCMywgMHhCMywgMHg4RCwgMHgzMCwgMHhDQiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDA3LCAweEZDLCAweEM5LCAweDMzLCAweEFFLCAweEU2LCAweEQ0LCAweDNGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4OEIsIDB4QzQsIDB4RTksIDB4REIsIDB4QjgsIDB4OUQsIDB4REQsIDB4QUEgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBicmFpbnBvb2xQNTEycjFfYVtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweENBLCAweDk0LCAweEZDLCAweDc3LCAweDRELCAweEFDLCAweEMxLCAweEU3ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QjksIDB4QzcsIDB4RjIsIDB4MkIsIDB4QTcsIDB4MTcsIDB4MTEsIDB4N0YgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCNSwgMHhDOCwgMHg5QSwgMHg4QiwgMHhDOSwgMHhGMSwgMHgyRSwgMHgwQSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEExLCAweDNBLCAweDI1LCAweEE4LCAweDVBLCAweDVELCAweEVELCAweDJEICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QkMsIDB4NjMsIDB4OTgsIDB4RUEsIDB4Q0EsIDB4NDEsIDB4MzQsIDB4QTggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgxMCwgMHgxNiwgMHhGOSwgMHgzRCwgMHg4RCwgMHhERCwgMHhDQiwgMHg5NCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEM1LCAweDRDLCAweDIzLCAweEFDLCAweDQ1LCAweDcxLCAweDMyLCAweEUyICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4ODksIDB4M0IsIDB4NjAsIDB4OEIsIDB4MzEsIDB4QTMsIDB4MzAsIDB4NzggKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBicmFpbnBvb2xQNTEycjFfYltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDIzLCAweEY3LCAweDE2LCAweDgwLCAweDYzLCAweEJELCAweDA5LCAweDI4ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4REQsIDB4RTUsIDB4QkEsIDB4NUUsIDB4QjcsIDB4NTAsIDB4NDAsIDB4OTggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2NywgMHgzRSwgMHgwOCwgMHhEQywgMHhDQSwgMHg5NCwgMHhGQywgMHg3NyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDRELCAweEFDLCAweEMxLCAweEU3LCAweEI5LCAweEM3LCAweEYyLCAweDJCICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QTcsIDB4MTcsIDB4MTEsIDB4N0YsIDB4QjUsIDB4QzgsIDB4OUEsIDB4OEIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhDOSwgMHhGMSwgMHgyRSwgMHgwQSwgMHhBMSwgMHgzQSwgMHgyNSwgMHhBOCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDVBLCAweDVELCAweEVELCAweDJELCAweEJDLCAweDYzLCAweDk4LCAweEVBICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4Q0EsIDB4NDEsIDB4MzQsIDB4QTgsIDB4MTAsIDB4MTYsIDB4RjksIDB4M0QgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBicmFpbnBvb2xQNTEycjFfZ3hbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgyMiwgMHhGOCwgMHhCOSwgMHhCQywgMHgwOSwgMHgyMiwgMHgzNSwgMHg4QiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDY4LCAweDVFLCAweDZBLCAweDQwLCAweDQ3LCAweDUwLCAweDZELCAweDdDICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NUYsIDB4N0QsIDB4QjksIDB4OTMsIDB4N0IsIDB4NjgsIDB4RDEsIDB4NTAgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg4RCwgMHhENCwgMHhEMCwgMHhFMiwgMHg3OCwgMHgxRiwgMHgzQiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDhFLCAweDA5LCAweEQwLCAweEY0LCAweEVFLCAweDYyLCAweDNCLCAweEI0ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QzEsIDB4MTYsIDB4RDksIDB4QjUsIDB4NzAsIDB4OUYsIDB4RUQsIDB4ODUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg5MywgMHg2QSwgMHg0QywgMHg5QywgMHgyRSwgMHgzMiwgMHgyMSwgMHg1QSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDY0LCAweEQ5LCAweDJFLCAweEQ4LCAweEJELCAweEU0LCAweEFFLCAweDgxICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgYnJhaW5wb29sUDUxMnIxX2d5W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4OTIsIDB4MDgsIDB4RDgsIDB4M0EsIDB4MEYsIDB4MUUsIDB4Q0QsIDB4NzggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwNiwgMHg1NCwgMHhGMCwgMHhBOCwgMHgyRiwgMHgyQiwgMHhDQSwgMHhEMSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEFFLCAweDYzLCAweDI3LCAweDhBLCAweEQ4LCAweDRCLCAweENBLCAweDVCICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NUUsIDB4NDgsIDB4NUYsIDB4NEEsIDB4NDksIDB4REUsIDB4REMsIDB4QjIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgxMSwgMHg4MSwgMHgxRiwgMHg4OCwgMHg1QiwgMHhDNSwgMHgwMCwgMHhBMCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDFBLCAweDdCLCAweEE1LCAweDI0LCAweDAwLCAweEY3LCAweDA5LCAweEYyICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkQsIDB4MjIsIDB4NzgsIDB4Q0YsIDB4QTksIDB4QkYsIDB4RUEsIDB4QzAgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhFQywgMHgzMiwgMHg2MywgMHg1NiwgMHg1RCwgMHgzOCwgMHhERSwgMHg3RCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFA1MTJyMV9uW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NjksIDB4MDAsIDB4QTksIDB4OUMsIDB4ODIsIDB4OTYsIDB4ODcsIDB4QjUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhERCwgMHhEQSwgMHg1RCwgMHgwOCwgMHg4MSwgMHhEMywgMHhCMSwgMHgxRCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDQ3LCAweDEwLCAweEFDLCAweDdGLCAweDE5LCAweDYxLCAweDg2LCAweDQxICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MTksIDB4MjYsIDB4QTksIDB4NEMsIDB4NDEsIDB4NUMsIDB4M0UsIDB4NTUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg3MCwgMHgwOCwgMHgzMywgMHg3MCwgMHhDQSwgMHg5QywgMHg2MywgMHhENiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDBFLCAweEQyLCAweEM5LCAweEIzLCAweEIzLCAweDhELCAweDMwLCAweENCICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MDcsIDB4RkMsIDB4QzksIDB4MzMsIDB4QUUsIDB4RTYsIDB4RDQsIDB4M0YgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg4QiwgMHhDNCwgMHhFOSwgMHhEQiwgMHhCOCwgMHg5RCwgMHhERCwgMHhBQSApLAorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQgKi8KKworLyoKKyAqIENyZWF0ZSBhbiBNUEkgZnJvbSBlbWJlZGRlZCBjb25zdGFudHMKKyAqIChhc3N1bWVzIGxlbiBpcyBhbiBleGFjdCBtdWx0aXBsZSBvZiBzaXplb2YgbWJlZHRsc19tcGlfdWludCkKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGVjcF9tcGlfbG9hZCggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgKnAsIHNpemVfdCBsZW4gKQoreworICAgIFgtPnMgPSAxOworICAgIFgtPm4gPSBsZW4gLyBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKTsKKyAgICBYLT5wID0gKG1iZWR0bHNfbXBpX3VpbnQgKikgcDsKK30KKworLyoKKyAqIFNldCBhbiBNUEkgdG8gc3RhdGljIHZhbHVlIDEKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGVjcF9tcGlfc2V0MSggbWJlZHRsc19tcGkgKlggKQoreworICAgIHN0YXRpYyBtYmVkdGxzX21waV91aW50IG9uZVtdID0geyAxIH07CisgICAgWC0+cyA9IDE7CisgICAgWC0+biA9IDE7CisgICAgWC0+cCA9IG9uZTsKK30KKworLyoKKyAqIE1ha2UgZ3JvdXAgYXZhaWxhYmxlIGZyb20gZW1iZWRkZWQgY29uc3RhbnRzCisgKi8KK3N0YXRpYyBpbnQgZWNwX2dyb3VwX2xvYWQoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waV91aW50ICpwLCAgc2l6ZV90IHBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waV91aW50ICphLCAgc2l6ZV90IGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waV91aW50ICpiLCAgc2l6ZV90IGJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waV91aW50ICpneCwgc2l6ZV90IGd4bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGlfdWludCAqZ3ksIHNpemVfdCBneWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgKm4sICBzaXplX3QgbmxlbikKK3sKKyAgICBlY3BfbXBpX2xvYWQoICZncnAtPlAsIHAsIHBsZW4gKTsKKyAgICBpZiggYSAhPSBOVUxMICkKKyAgICAgICAgZWNwX21waV9sb2FkKCAmZ3JwLT5BLCBhLCBhbGVuICk7CisgICAgZWNwX21waV9sb2FkKCAmZ3JwLT5CLCBiLCBibGVuICk7CisgICAgZWNwX21waV9sb2FkKCAmZ3JwLT5OLCBuLCBubGVuICk7CisKKyAgICBlY3BfbXBpX2xvYWQoICZncnAtPkcuWCwgZ3gsIGd4bGVuICk7CisgICAgZWNwX21waV9sb2FkKCAmZ3JwLT5HLlksIGd5LCBneWxlbiApOworICAgIGVjcF9tcGlfc2V0MSggJmdycC0+Ry5aICk7CisKKyAgICBncnAtPnBiaXRzID0gbWJlZHRsc19tcGlfYml0bGVuKCAmZ3JwLT5QICk7CisgICAgZ3JwLT5uYml0cyA9IG1iZWR0bHNfbXBpX2JpdGxlbiggJmdycC0+TiApOworCisgICAgZ3JwLT5oID0gMTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9OSVNUX09QVElNKQorLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEKQorc3RhdGljIGludCBlY3BfbW9kX3AxOTIoIG1iZWR0bHNfbXBpICogKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQpCitzdGF0aWMgaW50IGVjcF9tb2RfcDIyNCggbWJlZHRsc19tcGkgKiApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCkKK3N0YXRpYyBpbnQgZWNwX21vZF9wMjU2KCBtYmVkdGxzX21waSAqICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEKQorc3RhdGljIGludCBlY3BfbW9kX3AzODQoIG1iZWR0bHNfbXBpICogKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQpCitzdGF0aWMgaW50IGVjcF9tb2RfcDUyMSggbWJlZHRsc19tcGkgKiApOworI2VuZGlmCisKKyNkZWZpbmUgTklTVF9NT0RQKCBQICkgICAgICBncnAtPm1vZHAgPSBlY3BfbW9kXyAjIyBQOworI2Vsc2UKKyNkZWZpbmUgTklTVF9NT0RQKCBQICkKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9OSVNUX09QVElNICovCisKKy8qIEFkZGl0aW9uYWwgZm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCkKK3N0YXRpYyBpbnQgZWNwX21vZF9wMjU1KCBtYmVkdGxzX21waSAqICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEKQorc3RhdGljIGludCBlY3BfbW9kX3AxOTJrMSggbWJlZHRsc19tcGkgKiApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCkKK3N0YXRpYyBpbnQgZWNwX21vZF9wMjI0azEoIG1iZWR0bHNfbXBpICogKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQpCitzdGF0aWMgaW50IGVjcF9tb2RfcDI1NmsxKCBtYmVkdGxzX21waSAqICk7CisjZW5kaWYKKworI2RlZmluZSBMT0FEX0dST1VQX0EoIEcgKSAgIGVjcF9ncm91cF9sb2FkKCBncnAsICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcgIyMgX3AsICBzaXplb2YoIEcgIyMgX3AgICksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcgIyMgX2EsICBzaXplb2YoIEcgIyMgX2EgICksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcgIyMgX2IsICBzaXplb2YoIEcgIyMgX2IgICksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcgIyMgX2d4LCBzaXplb2YoIEcgIyMgX2d4ICksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcgIyMgX2d5LCBzaXplb2YoIEcgIyMgX2d5ICksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcgIyMgX24sICBzaXplb2YoIEcgIyMgX24gICkgKQorCisjZGVmaW5lIExPQURfR1JPVVAoIEcgKSAgICAgZWNwX2dyb3VwX2xvYWQoIGdycCwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAjIyBfcCwgIHNpemVvZiggRyAjIyBfcCAgKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgIDAsICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAjIyBfYiwgIHNpemVvZiggRyAjIyBfYiAgKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAjIyBfZ3gsIHNpemVvZiggRyAjIyBfZ3ggKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAjIyBfZ3ksIHNpemVvZiggRyAjIyBfZ3kgKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAjIyBfbiwgIHNpemVvZiggRyAjIyBfbiAgKSApCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCkKKy8qCisgKiBTcGVjaWFsaXplZCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgdGhlIEN1cnZlMjU1MTkgZ3JvdXAKKyAqLworc3RhdGljIGludCBlY3BfdXNlX2N1cnZlMjU1MTkoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAgKQoreworICAgIGludCByZXQ7CisKKyAgICAvKiBBY3R1YWxseSAoIEEgKyAyICkgLyA0ICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmdycC0+QSwgMTYsICIwMURCNDIiICkgKTsKKworICAgIC8qIFAgPSAyXjI1NSAtIDE5ICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmZ3JwLT5QLCAxICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X2woICZncnAtPlAsIDI1NSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfaW50KCAmZ3JwLT5QLCAmZ3JwLT5QLCAxOSApICk7CisgICAgZ3JwLT5wYml0cyA9IG1iZWR0bHNfbXBpX2JpdGxlbiggJmdycC0+UCApOworCisgICAgLyogWSBpbnRlbnRpb25hbHkgbm90IHNldCwgc2luY2Ugd2UgdXNlIHgveiBjb29yZGluYXRlcy4KKyAgICAgKiBUaGlzIGlzIHVzZWQgYXMgYSBtYXJrZXIgdG8gaWRlbnRpZnkgTW9udGdvbWVyeSBjdXJ2ZXMhICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmZ3JwLT5HLlgsIDkgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJmdycC0+Ry5aLCAxICkgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmZ3JwLT5HLlkgKTsKKworICAgIC8qIEFjdHVhbGx5LCB0aGUgcmVxdWlyZWQgbXNiIGZvciBwcml2YXRlIGtleXMgKi8KKyAgICBncnAtPm5iaXRzID0gMjU0OworCitjbGVhbnVwOgorICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoIGdycCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQgKi8KKworLyoKKyAqIFNldCBhIGdyb3VwIHVzaW5nIHdlbGwta25vd24gZG9tYWluIHBhcmFtZXRlcnMKKyAqLworaW50IG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGlkICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCBncnAgKTsKKworICAgIGdycC0+aWQgPSBpZDsKKworICAgIHN3aXRjaCggaWQgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToKKyAgICAgICAgICAgIE5JU1RfTU9EUCggcDE5MiApOworICAgICAgICAgICAgcmV0dXJuKCBMT0FEX0dST1VQKCBzZWNwMTkycjEgKSApOworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToKKyAgICAgICAgICAgIE5JU1RfTU9EUCggcDIyNCApOworICAgICAgICAgICAgcmV0dXJuKCBMT0FEX0dST1VQKCBzZWNwMjI0cjEgKSApOworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToKKyAgICAgICAgICAgIE5JU1RfTU9EUCggcDI1NiApOworICAgICAgICAgICAgcmV0dXJuKCBMT0FEX0dST1VQKCBzZWNwMjU2cjEgKSApOworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMToKKyAgICAgICAgICAgIE5JU1RfTU9EUCggcDM4NCApOworICAgICAgICAgICAgcmV0dXJuKCBMT0FEX0dST1VQKCBzZWNwMzg0cjEgKSApOworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToKKyAgICAgICAgICAgIE5JU1RfTU9EUCggcDUyMSApOworICAgICAgICAgICAgcmV0dXJuKCBMT0FEX0dST1VQKCBzZWNwNTIxcjEgKSApOworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMToKKyAgICAgICAgICAgIGdycC0+bW9kcCA9IGVjcF9tb2RfcDE5MmsxOworICAgICAgICAgICAgcmV0dXJuKCBMT0FEX0dST1VQX0EoIHNlY3AxOTJrMSApICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQpCisgICAgICAgIGNhc2UgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxOgorICAgICAgICAgICAgZ3JwLT5tb2RwID0gZWNwX21vZF9wMjI0azE7CisgICAgICAgICAgICByZXR1cm4oIExPQURfR1JPVVBfQSggc2VjcDIyNGsxICkgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCkKKyAgICAgICAgY2FzZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzE6CisgICAgICAgICAgICBncnAtPm1vZHAgPSBlY3BfbW9kX3AyNTZrMTsKKyAgICAgICAgICAgIHJldHVybiggTE9BRF9HUk9VUF9BKCBzZWNwMjU2azEgKSApOworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRCkKKyAgICAgICAgY2FzZSBNQkVEVExTX0VDUF9EUF9CUDI1NlIxOgorICAgICAgICAgICAgcmV0dXJuKCBMT0FEX0dST1VQX0EoIGJyYWlucG9vbFAyNTZyMSApICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQlAyNTZSMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRCkKKyAgICAgICAgY2FzZSBNQkVEVExTX0VDUF9EUF9CUDM4NFIxOgorICAgICAgICAgICAgcmV0dXJuKCBMT0FEX0dST1VQX0EoIGJyYWlucG9vbFAzODRyMSApICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRCkKKyAgICAgICAgY2FzZSBNQkVEVExTX0VDUF9EUF9CUDUxMlIxOgorICAgICAgICAgICAgcmV0dXJuKCBMT0FEX0dST1VQX0EoIGJyYWlucG9vbFA1MTJyMSApICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCkKKyAgICAgICAgY2FzZSBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5OgorICAgICAgICAgICAgZ3JwLT5tb2RwID0gZWNwX21vZF9wMjU1OworICAgICAgICAgICAgcmV0dXJuKCBlY3BfdXNlX2N1cnZlMjU1MTkoIGdycCApICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEICovCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoIGdycCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworICAgIH0KK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfTklTVF9PUFRJTSkKKy8qCisgKiBGYXN0IHJlZHVjdGlvbiBtb2R1bG8gdGhlIHByaW1lcyB1c2VkIGJ5IHRoZSBOSVNUIGN1cnZlcy4KKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIGZvciBzcGVlZCwgYnV0IG5vdCBuZWVkZWQgZm9yIGNvcnJlY3QKKyAqIG9wZXJhdGlvbnMuIFNvLCB3ZSBtYWtlIHRoZSBjaG9pY2UgdG8gaGVhdmlseSByZWx5IG9uIHRoZSBpbnRlcm5hbHMgb2Ygb3VyCisgKiBiaWdudW0gbGlicmFyeSwgd2hpY2ggY3JlYXRlcyBhIHRpZ2h0IGNvdXBsaW5nIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIGFuZAorICogb3VyIE1QSSBpbXBsZW1lbnRhdGlvbi4gIEhvd2V2ZXIsIHRoZSBjb3VwbGluZyBiZXR3ZWVuIHRoZSBFQ1AgbW9kdWxlIGFuZAorICogTVBJIHJlbWFpbnMgbG9vc2UsIHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgZGVhY3RpdmF0ZWQgYXQgd2lsbC4KKyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCkKKy8qCisgKiBDb21wYXJlZCB0byB0aGUgd2F5IHRoaW5ncyBhcmUgcHJlc2VudGVkIGluIEZJUFMgMTg2LTMgRC4yLAorICogd2UgcHJvY2VlZCBpbiBjb2x1bW5zLCBmcm9tIHJpZ2h0IChsZWFzdCBzaWduaWZpY2FudCBjaHVuaykgdG8gbGVmdCwKKyAqIGFkZGluZyBjaHVua3MgdG8gTiBpbiBwbGFjZSwgYW5kIGtlZXBpbmcgYSBjYXJyeSBmb3IgdGhlIG5leHQgY2h1bmsuCisgKiBUaGlzIGF2b2lkcyBtb3ZpbmcgdGhpbmdzIGFyb3VuZCBpbiBtZW1vcnksIGFuZCB1c2VsZXNzbHkgYWRkaW5nIHplcm9zLAorICogY29tcGFyZWQgdG8gdGhlIG1vcmUgc3RyYWlnaHRmb3J3YXJkLCBsaW5lLW9yaWVudGVkIGFwcHJvYWNoLgorICoKKyAqIEZvciB0aGlzIHByaW1lIHdlIG5lZWQgdG8gaGFuZGxlIGRhdGEgaW4gY2h1bmtzIG9mIDY0IGJpdHMuCisgKiBTaW5jZSB0aGlzIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIG91ciBiYXNpYyBtYmVkdGxzX21waV91aW50LCB3ZSBjYW4KKyAqIHVzZSBhIG1iZWR0bHNfbXBpX3VpbnQgKiB0byBkZXNpZ25hdGUgc3VjaCBhIGNodW5rLCBhbmQgc21hbGwgbG9vcHMgdG8gaGFuZGxlIGl0LgorICovCisKKy8qIEFkZCA2NC1iaXQgY2h1bmtzIChkc3QgKz0gc3JjKSBhbmQgdXBkYXRlIGNhcnJ5ICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkNjQoIG1iZWR0bHNfbXBpX3VpbnQgKmRzdCwgbWJlZHRsc19tcGlfdWludCAqc3JjLCBtYmVkdGxzX21waV91aW50ICpjYXJyeSApCit7CisgICAgdW5zaWduZWQgY2hhciBpOworICAgIG1iZWR0bHNfbXBpX3VpbnQgYyA9IDA7CisgICAgZm9yKCBpID0gMDsgaSA8IDggLyBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKTsgaSsrLCBkc3QrKywgc3JjKysgKQorICAgIHsKKyAgICAgICAgKmRzdCArPSBjOyAgICAgIGMgID0gKCAqZHN0IDwgYyApOworICAgICAgICAqZHN0ICs9ICpzcmM7ICAgYyArPSAoICpkc3QgPCAqc3JjICk7CisgICAgfQorICAgICpjYXJyeSArPSBjOworfQorCisvKiBBZGQgY2FycnkgdG8gYSA2NC1iaXQgY2h1bmsgYW5kIHVwZGF0ZSBjYXJyeSAqLworc3RhdGljIGlubGluZSB2b2lkIGNhcnJ5NjQoIG1iZWR0bHNfbXBpX3VpbnQgKmRzdCwgbWJlZHRsc19tcGlfdWludCAqY2FycnkgKQoreworICAgIHVuc2lnbmVkIGNoYXIgaTsKKyAgICBmb3IoIGkgPSAwOyBpIDwgOCAvIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApOyBpKyssIGRzdCsrICkKKyAgICB7CisgICAgICAgICpkc3QgKz0gKmNhcnJ5OworICAgICAgICAqY2FycnkgID0gKCAqZHN0IDwgKmNhcnJ5ICk7CisgICAgfQorfQorCisjZGVmaW5lIFdJRFRIICAgICAgIDggLyBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKQorI2RlZmluZSBBKCBpICkgICAgICBOLT5wICsgaSAqIFdJRFRICisjZGVmaW5lIEFERCggaSApICAgIGFkZDY0KCBwLCBBKCBpICksICZjICkKKyNkZWZpbmUgTkVYVCAgICAgICAgcCArPSBXSURUSDsgY2Fycnk2NCggcCwgJmMgKQorI2RlZmluZSBMQVNUICAgICAgICBwICs9IFdJRFRIOyAqcCA9IGM7IHdoaWxlKCArK3AgPCBlbmQgKSAqcCA9IDAKKworLyoKKyAqIEZhc3QgcXVhc2ktcmVkdWN0aW9uIG1vZHVsbyBwMTkyIChGSVBTIDE4Ni0zIEQuMi4xKQorICovCitzdGF0aWMgaW50IGVjcF9tb2RfcDE5MiggbWJlZHRsc19tcGkgKk4gKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGlfdWludCBjID0gMDsKKyAgICBtYmVkdGxzX21waV91aW50ICpwLCAqZW5kOworCisgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIGJsb2NrcyBzbyB0aGF0IEEoNSkgaXMgbGVnYWwgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIE4sIDYgKiBXSURUSCApICk7CisKKyAgICBwID0gTi0+cDsKKyAgICBlbmQgPSBwICsgTi0+bjsKKworICAgIEFERCggMyApOyBBREQoIDUgKTsgICAgICAgICAgICAgTkVYVDsgLy8gQTAgKz0gQTMgKyBBNQorICAgIEFERCggMyApOyBBREQoIDQgKTsgQUREKCA1ICk7ICAgTkVYVDsgLy8gQTEgKz0gQTMgKyBBNCArIEE1CisgICAgQUREKCA0ICk7IEFERCggNSApOyAgICAgICAgICAgICBMQVNUOyAvLyBBMiArPSBBNCArIEE1CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI3VuZGVmIFdJRFRICisjdW5kZWYgQQorI3VuZGVmIEFERAorI3VuZGVmIE5FWFQKKyN1bmRlZiBMQVNUCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQpIHx8ICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQpIHx8ICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQpCisvKgorICogVGhlIHJlYWRlciBpcyBhZHZpc2VkIHRvIGZpcnN0IHVuZGVyc3RhbmQgZWNwX21vZF9wMTkyKCkgc2luY2UgdGhlIHNhbWUKKyAqIGdlbmVyYWwgc3RydWN0dXJlIGlzIHVzZWQgaGVyZSwgYnV0IHdpdGggYWRkaXRpb25hbCBjb21wbGljYXRpb25zOgorICogKDEpIGNodW5rcyBvZiAzMiBiaXRzLCBhbmQgKDIpIHN1YnRyYWN0aW9ucy4KKyAqLworCisvKgorICogRm9yIHRoZXNlIHByaW1lcywgd2UgbmVlZCB0byBoYW5kbGUgZGF0YSBpbiBjaHVua3Mgb2YgMzIgYml0cy4KKyAqIFRoaXMgbWFrZXMgaXQgbW9yZSBjb21wbGljYXRlZCBpZiB3ZSB1c2UgNjQgYml0cyBsaW1icyBpbiBNUEksCisgKiB3aGljaCBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIGEgdW5pZm9ybSBhY2Nlc3MgbWV0aG9kIGFzIGZvciBwMTkyLgorICoKKyAqIFNvLCB3ZSBkZWZpbmUgYSBtaW5pIGFic3RyYWN0aW9uIGxheWVyIHRvIGFjY2VzcyAzMiBiaXQgY2h1bmtzLAorICogbG9hZCB0aGVtIGluICdjdXInIGZvciB3b3JrLCBhbmQgc3RvcmUgdGhlbSBiYWNrIGZyb20gJ2N1cicgd2hlbiBkb25lLgorICoKKyAqIFdoaWxlIGF0IGl0LCBhbHNvIGRlZmluZSB0aGUgc2l6ZSBvZiBOIGluIHRlcm1zIG9mIDMyLWJpdCBjaHVua3MuCisgKi8KKyNkZWZpbmUgTE9BRDMyICAgICAgY3VyID0gQSggaSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfSU5UMzIpICAvKiAzMiBiaXQgKi8KKworI2RlZmluZSBNQVgzMiAgICAgICBOLT5uCisjZGVmaW5lIEEoIGogKSAgICAgIE4tPnBbal0KKyNkZWZpbmUgU1RPUkUzMiAgICAgTi0+cFtpXSA9IGN1cjsKKworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjQtYml0ICovCisKKyNkZWZpbmUgTUFYMzIgICAgICAgTi0+biAqIDIKKyNkZWZpbmUgQSggaiApIGogJSAyID8gKHVpbnQzMl90KSggTi0+cFtqLzJdID4+IDMyICkgOiAodWludDMyX3QpKCBOLT5wW2ovMl0gKQorI2RlZmluZSBTVE9SRTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYoIGkgJSAyICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTi0+cFtpLzJdICY9IDB4MDAwMDAwMDBGRkZGRkZGRjsgICAgICAgICAgXAorICAgICAgICBOLT5wW2kvMl0gfD0gKChtYmVkdGxzX21waV91aW50KSBjdXIpIDw8IDMyOyAgICAgICAgXAorICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE4tPnBbaS8yXSAmPSAweEZGRkZGRkZGMDAwMDAwMDA7ICAgICAgICAgIFwKKyAgICAgICAgTi0+cFtpLzJdIHw9IChtYmVkdGxzX21waV91aW50KSBjdXI7ICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNlbmRpZiAvKiBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSAqLworCisvKgorICogSGVscGVycyBmb3IgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIG9mIGNodW5rcywgd2l0aCBzaWduZWQgY2FycnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGQzMiggdWludDMyX3QgKmRzdCwgdWludDMyX3Qgc3JjLCBzaWduZWQgY2hhciAqY2FycnkgKQoreworICAgICpkc3QgKz0gc3JjOworICAgICpjYXJyeSArPSAoICpkc3QgPCBzcmMgKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN1YjMyKCB1aW50MzJfdCAqZHN0LCB1aW50MzJfdCBzcmMsIHNpZ25lZCBjaGFyICpjYXJyeSApCit7CisgICAgKmNhcnJ5IC09ICggKmRzdCA8IHNyYyApOworICAgICpkc3QgLT0gc3JjOworfQorCisjZGVmaW5lIEFERCggaiApICAgIGFkZDMyKCAmY3VyLCBBKCBqICksICZjICk7CisjZGVmaW5lIFNVQiggaiApICAgIHN1YjMyKCAmY3VyLCBBKCBqICksICZjICk7CisKKy8qCisgKiBIZWxwZXJzIGZvciB0aGUgbWFpbiAnbG9vcCcKKyAqIChzZWUgZml4X25lZ2F0aXZlIGZvciB0aGUgbW90aXZhdGlvbiBvZiBDKQorICovCisjZGVmaW5lIElOSVQoIGIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW50IHJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc2lnbmVkIGNoYXIgYyA9IDAsIGNjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdWludDMyX3QgY3VyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc2l6ZV90IGkgPSAwLCBiaXRzID0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19tcGkgQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX21waV91aW50IENwWyBiIC8gOCAvIHNpemVvZiggbWJlZHRsc19tcGlfdWludCkgKyAxIF07ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEMucyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEMubiA9IGIgLyA4IC8gc2l6ZW9mKCBtYmVkdGxzX21waV91aW50KSArIDE7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDLnAgPSBDcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtZW1zZXQoIENwLCAwLCBDLm4gKiBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSApOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCBOLCBiICogMiAvIDggLyBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSApICk7IFwKKyAgICBMT0FEMzI7CisKKyNkZWZpbmUgTkVYVCAgICAgICAgICAgICAgICAgICAgXAorICAgIFNUT1JFMzI7IGkrKzsgTE9BRDMyOyAgICAgICBcCisgICAgY2MgPSBjOyBjID0gMDsgICAgICAgICAgICAgIFwKKyAgICBpZiggY2MgPCAwICkgICAgICAgICAgICAgICAgXAorICAgICAgICBzdWIzMiggJmN1ciwgLWNjLCAmYyApOyBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYWRkMzIoICZjdXIsIGNjLCAmYyApOyAgXAorCisjZGVmaW5lIExBU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgU1RPUkUzMjsgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY3VyID0gYyA+IDAgPyBjIDogMDsgU1RPUkUzMjsgICAgICAgICAgICAgICBcCisgICAgY3VyID0gMDsgd2hpbGUoICsraSA8IE1BWDMyICkgeyBTVE9SRTMyOyB9ICBcCisgICAgaWYoIGMgPCAwICkgZml4X25lZ2F0aXZlKCBOLCBjLCAmQywgYml0cyApOworCisvKgorICogSWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgd2UgZ2V0IGl0IGluIHRoZSBmb3JtCisgKiBjICogMl4oYml0cyArIDMyKSArIE4sIHdpdGggYyBuZWdhdGl2ZSBhbmQgTiBwb3NpdGl2ZSBzaG9ydGVyIHRoYW4gJ2JpdHMnCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGZpeF9uZWdhdGl2ZSggbWJlZHRsc19tcGkgKk4sIHNpZ25lZCBjaGFyIGMsIG1iZWR0bHNfbXBpICpDLCBzaXplX3QgYml0cyApCit7CisgICAgaW50IHJldDsKKworICAgIC8qIEMgPSAtIGMgKiAyXihiaXRzICsgMzIpICovCisjaWYgIWRlZmluZWQoTUJFRFRMU19IQVZFX0lOVDY0KQorICAgICgodm9pZCkgYml0cyk7CisjZWxzZQorICAgIGlmKCBiaXRzID09IDIyNCApCisgICAgICAgIEMtPnBbIEMtPm4gLSAxIF0gPSAoKG1iZWR0bHNfbXBpX3VpbnQpIC1jKSA8PCAzMjsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgQy0+cFsgQy0+biAtIDEgXSA9IChtYmVkdGxzX21waV91aW50KSAtYzsKKworICAgIC8qIE4gPSAtICggQyAtIE4gKSAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2FicyggTiwgQywgTiApICk7CisgICAgTi0+cyA9IC0xOworCitjbGVhbnVwOgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQpCisvKgorICogRmFzdCBxdWFzaS1yZWR1Y3Rpb24gbW9kdWxvIHAyMjQgKEZJUFMgMTg2LTMgRC4yLjIpCisgKi8KK3N0YXRpYyBpbnQgZWNwX21vZF9wMjI0KCBtYmVkdGxzX21waSAqTiApCit7CisgICAgSU5JVCggMjI0ICk7CisKKyAgICBTVUIoICA3ICk7IFNVQiggMTEgKTsgICAgICAgICAgICAgICBORVhUOyAvLyBBMCArPSAtQTcgLSBBMTEKKyAgICBTVUIoICA4ICk7IFNVQiggMTIgKTsgICAgICAgICAgICAgICBORVhUOyAvLyBBMSArPSAtQTggLSBBMTIKKyAgICBTVUIoICA5ICk7IFNVQiggMTMgKTsgICAgICAgICAgICAgICBORVhUOyAvLyBBMiArPSAtQTkgLSBBMTMKKyAgICBTVUIoIDEwICk7IEFERCggIDcgKTsgQUREKCAxMSApOyAgICBORVhUOyAvLyBBMyArPSAtQTEwICsgQTcgKyBBMTEKKyAgICBTVUIoIDExICk7IEFERCggIDggKTsgQUREKCAxMiApOyAgICBORVhUOyAvLyBBNCArPSAtQTExICsgQTggKyBBMTIKKyAgICBTVUIoIDEyICk7IEFERCggIDkgKTsgQUREKCAxMyApOyAgICBORVhUOyAvLyBBNSArPSAtQTEyICsgQTkgKyBBMTMKKyAgICBTVUIoIDEzICk7IEFERCggMTAgKTsgICAgICAgICAgICAgICBMQVNUOyAvLyBBNiArPSAtQTEzICsgQTEwCisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCkKKy8qCisgKiBGYXN0IHF1YXNpLXJlZHVjdGlvbiBtb2R1bG8gcDI1NiAoRklQUyAxODYtMyBELjIuMykKKyAqLworc3RhdGljIGludCBlY3BfbW9kX3AyNTYoIG1iZWR0bHNfbXBpICpOICkKK3sKKyAgICBJTklUKCAyNTYgKTsKKworICAgIEFERCggIDggKTsgQUREKCAgOSApOworICAgIFNVQiggMTEgKTsgU1VCKCAxMiApOyBTVUIoIDEzICk7IFNVQiggMTQgKTsgICAgICAgICAgICAgTkVYVDsgLy8gQTAKKworICAgIEFERCggIDkgKTsgQUREKCAxMCApOworICAgIFNVQiggMTIgKTsgU1VCKCAxMyApOyBTVUIoIDE0ICk7IFNVQiggMTUgKTsgICAgICAgICAgICAgTkVYVDsgLy8gQTEKKworICAgIEFERCggMTAgKTsgQUREKCAxMSApOworICAgIFNVQiggMTMgKTsgU1VCKCAxNCApOyBTVUIoIDE1ICk7ICAgICAgICAgICAgICAgICAgICAgICAgTkVYVDsgLy8gQTIKKworICAgIEFERCggMTEgKTsgQUREKCAxMSApOyBBREQoIDEyICk7IEFERCggMTIgKTsgQUREKCAxMyApOworICAgIFNVQiggMTUgKTsgU1VCKCAgOCApOyBTVUIoICA5ICk7ICAgICAgICAgICAgICAgICAgICAgICAgTkVYVDsgLy8gQTMKKworICAgIEFERCggMTIgKTsgQUREKCAxMiApOyBBREQoIDEzICk7IEFERCggMTMgKTsgQUREKCAxNCApOworICAgIFNVQiggIDkgKTsgU1VCKCAxMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVDsgLy8gQTQKKworICAgIEFERCggMTMgKTsgQUREKCAxMyApOyBBREQoIDE0ICk7IEFERCggMTQgKTsgQUREKCAxNSApOworICAgIFNVQiggMTAgKTsgU1VCKCAxMSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVDsgLy8gQTUKKworICAgIEFERCggMTQgKTsgQUREKCAxNCApOyBBREQoIDE1ICk7IEFERCggMTUgKTsgQUREKCAxNCApOyBBREQoIDEzICk7CisgICAgU1VCKCAgOCApOyBTVUIoICA5ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBNgorCisgICAgQUREKCAxNSApOyBBREQoIDE1ICk7IEFERCggMTUgKTsgQUREKCA4ICk7CisgICAgU1VCKCAxMCApOyBTVUIoIDExICk7IFNVQiggMTIgKTsgU1VCKCAxMyApOyAgICAgICAgICAgICBMQVNUOyAvLyBBNworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQpCisvKgorICogRmFzdCBxdWFzaS1yZWR1Y3Rpb24gbW9kdWxvIHAzODQgKEZJUFMgMTg2LTMgRC4yLjQpCisgKi8KK3N0YXRpYyBpbnQgZWNwX21vZF9wMzg0KCBtYmVkdGxzX21waSAqTiApCit7CisgICAgSU5JVCggMzg0ICk7CisKKyAgICBBREQoIDEyICk7IEFERCggMjEgKTsgQUREKCAyMCApOworICAgIFNVQiggMjMgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVDsgLy8gQTAKKworICAgIEFERCggMTMgKTsgQUREKCAyMiApOyBBREQoIDIzICk7CisgICAgU1VCKCAxMiApOyBTVUIoIDIwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBMgorCisgICAgQUREKCAxNCApOyBBREQoIDIzICk7CisgICAgU1VCKCAxMyApOyBTVUIoIDIxICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBMgorCisgICAgQUREKCAxNSApOyBBREQoIDEyICk7IEFERCggMjAgKTsgQUREKCAyMSApOworICAgIFNVQiggMTQgKTsgU1VCKCAyMiApOyBTVUIoIDIzICk7ICAgICAgICAgICAgICAgICAgICAgICAgTkVYVDsgLy8gQTMKKworICAgIEFERCggMjEgKTsgQUREKCAyMSApOyBBREQoIDE2ICk7IEFERCggMTMgKTsgQUREKCAxMiApOyBBREQoIDIwICk7IEFERCggMjIgKTsKKyAgICBTVUIoIDE1ICk7IFNVQiggMjMgKTsgU1VCKCAyMyApOyAgICAgICAgICAgICAgICAgICAgICAgIE5FWFQ7IC8vIEE0CisKKyAgICBBREQoIDIyICk7IEFERCggMjIgKTsgQUREKCAxNyApOyBBREQoIDE0ICk7IEFERCggMTMgKTsgQUREKCAyMSApOyBBREQoIDIzICk7CisgICAgU1VCKCAxNiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBNQorCisgICAgQUREKCAyMyApOyBBREQoIDIzICk7IEFERCggMTggKTsgQUREKCAxNSApOyBBREQoIDE0ICk7IEFERCggMjIgKTsKKyAgICBTVUIoIDE3ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFQ7IC8vIEE2CisKKyAgICBBREQoIDE5ICk7IEFERCggMTYgKTsgQUREKCAxNSApOyBBREQoIDIzICk7CisgICAgU1VCKCAxOCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBNworCisgICAgQUREKCAyMCApOyBBREQoIDE3ICk7IEFERCggMTYgKTsKKyAgICBTVUIoIDE5ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFQ7IC8vIEE4CisKKyAgICBBREQoIDIxICk7IEFERCggMTggKTsgQUREKCAxNyApOworICAgIFNVQiggMjAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVDsgLy8gQTkKKworICAgIEFERCggMjIgKTsgQUREKCAxOSApOyBBREQoIDE4ICk7CisgICAgU1VCKCAyMSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBMTAKKworICAgIEFERCggMjMgKTsgQUREKCAyMCApOyBBREQoIDE5ICk7CisgICAgU1VCKCAyMiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQVNUOyAvLyBBMTEKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEICovCisKKyN1bmRlZiBBCisjdW5kZWYgTE9BRDMyCisjdW5kZWYgU1RPUkUzMgorI3VuZGVmIE1BWDMyCisjdW5kZWYgSU5JVAorI3VuZGVmIE5FWFQKKyN1bmRlZiBMQVNUCisKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQpCisvKgorICogSGVyZSB3ZSBoYXZlIGFuIGFjdHVhbCBNZXJzZW5uZSBwcmltZSwgc28gdGhpbmdzIGFyZSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4KKyAqIEhvd2V2ZXIsIGNodW5rcyBhcmUgYWxpZ25lZCBvbiBhICd3ZWlyZCcgYm91bmRhcnkgKDUyMSBiaXRzKS4KKyAqLworCisvKiBTaXplIG9mIHA1MjEgaW4gdGVybXMgb2YgbWJlZHRsc19tcGlfdWludCAqLworI2RlZmluZSBQNTIxX1dJRFRIICAgICAgKCA1MjEgLyA4IC8gc2l6ZW9mKCBtYmVkdGxzX21waV91aW50ICkgKyAxICkKKworLyogQml0cyB0byBrZWVwIGluIHRoZSBtb3N0IHNpZ25pZmljYW50IG1iZWR0bHNfbXBpX3VpbnQgKi8KKyNkZWZpbmUgUDUyMV9NQVNLICAgICAgIDB4MDFGRgorCisvKgorICogRmFzdCBxdWFzaS1yZWR1Y3Rpb24gbW9kdWxvIHA1MjEgKEZJUFMgMTg2LTMgRC4yLjUpCisgKiBXcml0ZSBOIGFzIEExICsgMl41MjEgQTAsIHJldHVybiBBMCArIEExCisgKi8KK3N0YXRpYyBpbnQgZWNwX21vZF9wNTIxKCBtYmVkdGxzX21waSAqTiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX21waSBNOworICAgIG1iZWR0bHNfbXBpX3VpbnQgTXBbUDUyMV9XSURUSCArIDFdOworICAgIC8qIFdvcnN0IGNhc2UgZm9yIHRoZSBzaXplIG9mIE0gaXMgd2hlbiBtYmVkdGxzX21waV91aW50IGlzIDE2IGJpdHM6CisgICAgICogd2UgbmVlZCB0byBob2xkIGJpdHMgNTEzIHRvIDEwNTYsIHdoaWNoIGlzIDM0IGxpbWJzLCB0aGF0IGlzCisgICAgICogUDUyMV9XSURUSCArIDEuIE90aGVyd2lzZSBQNTIxX1dJRFRIIGlzIGVub3VnaC4gKi8KKworICAgIGlmKCBOLT5uIDwgUDUyMV9XSURUSCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgLyogTSA9IEExICovCisgICAgTS5zID0gMTsKKyAgICBNLm4gPSBOLT5uIC0gKCBQNTIxX1dJRFRIIC0gMSApOworICAgIGlmKCBNLm4gPiBQNTIxX1dJRFRIICsgMSApCisgICAgICAgIE0ubiA9IFA1MjFfV0lEVEggKyAxOworICAgIE0ucCA9IE1wOworICAgIG1lbWNweSggTXAsIE4tPnAgKyBQNTIxX1dJRFRIIC0gMSwgTS5uICogc2l6ZW9mKCBtYmVkdGxzX21waV91aW50ICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZNLCA1MjEgJSAoIDggKiBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSApICkgKTsKKworICAgIC8qIE4gPSBBMCAqLworICAgIE4tPnBbUDUyMV9XSURUSCAtIDFdICY9IFA1MjFfTUFTSzsKKyAgICBmb3IoIGkgPSBQNTIxX1dJRFRIOyBpIDwgTi0+bjsgaSsrICkKKyAgICAgICAgTi0+cFtpXSA9IDA7CisKKyAgICAvKiBOID0gQTAgKyBBMSAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX2FicyggTiwgTiwgJk0gKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKyN1bmRlZiBQNTIxX1dJRFRICisjdW5kZWYgUDUyMV9NQVNLCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfRUNQX05JU1RfT1BUSU0gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEKQorCisvKiBTaXplIG9mIHAyNTUgaW4gdGVybXMgb2YgbWJlZHRsc19tcGlfdWludCAqLworI2RlZmluZSBQMjU1X1dJRFRIICAgICAgKCAyNTUgLyA4IC8gc2l6ZW9mKCBtYmVkdGxzX21waV91aW50ICkgKyAxICkKKworLyoKKyAqIEZhc3QgcXVhc2ktcmVkdWN0aW9uIG1vZHVsbyBwMjU1ID0gMl4yNTUgLSAxOQorICogV3JpdGUgTiBhcyBBMCArIDJeMjU1IEExLCByZXR1cm4gQTAgKyAxOSAqIEExCisgKi8KK3N0YXRpYyBpbnQgZWNwX21vZF9wMjU1KCBtYmVkdGxzX21waSAqTiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX21waSBNOworICAgIG1iZWR0bHNfbXBpX3VpbnQgTXBbUDI1NV9XSURUSCArIDJdOworCisgICAgaWYoIE4tPm4gPCBQMjU1X1dJRFRIICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAvKiBNID0gQTEgKi8KKyAgICBNLnMgPSAxOworICAgIE0ubiA9IE4tPm4gLSAoIFAyNTVfV0lEVEggLSAxICk7CisgICAgaWYoIE0ubiA+IFAyNTVfV0lEVEggKyAxICkKKyAgICAgICAgTS5uID0gUDI1NV9XSURUSCArIDE7CisgICAgTS5wID0gTXA7CisgICAgbWVtc2V0KCBNcCwgMCwgc2l6ZW9mIE1wICk7CisgICAgbWVtY3B5KCBNcCwgTi0+cCArIFAyNTVfV0lEVEggLSAxLCBNLm4gKiBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJk0sIDI1NSAlICggOCAqIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApICkgKSApOworICAgIE0ubisrOyAvKiBNYWtlIHJvb20gZm9yIG11bHRpcGxpY2F0aW9uIGJ5IDE5ICovCisKKyAgICAvKiBOID0gQTAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NldF9iaXQoIE4sIDI1NSwgMCApICk7CisgICAgZm9yKCBpID0gUDI1NV9XSURUSDsgaSA8IE4tPm47IGkrKyApCisgICAgICAgIE4tPnBbaV0gPSAwOworCisgICAgLyogTiA9IEEwICsgMTkgKiBBMSAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX2ludCggJk0sICZNLCAxOSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfYWJzKCBOLCBOLCAmTSApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQpIHx8ICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQpIHx8ICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQpCisvKgorICogRmFzdCBxdWFzaS1yZWR1Y3Rpb24gbW9kdWxvIFAgPSAyXnMgLSBSLAorICogd2l0aCBSIGFib3V0IDMzIGJpdHMsIHVzZWQgYnkgdGhlIEtvYmxpdHogY3VydmVzLgorICoKKyAqIFdyaXRlIE4gYXMgQTAgKyAyXjIyNCBBMSwgcmV0dXJuIEEwICsgUiAqIEExLgorICogQWN0dWFsbHkgZG8gdHdvIHBhc3Nlcywgc2luY2UgUiBpcyBiaWcuCisgKi8KKyNkZWZpbmUgUF9LT0JMSVRaX01BWCAgICggMjU2IC8gOCAvIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApICkgIC8vIE1heCBsaW1icyBpbiBQCisjZGVmaW5lIFBfS09CTElUWl9SICAgICAoIDggLyBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSApICAgICAgICAvLyBMaW1icyBpbiBSCitzdGF0aWMgaW5saW5lIGludCBlY3BfbW9kX2tvYmxpdHooIG1iZWR0bHNfbXBpICpOLCBtYmVkdGxzX21waV91aW50ICpScCwgc2l6ZV90IHBfbGltYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhZGp1c3QsIHNpemVfdCBzaGlmdCwgbWJlZHRsc19tcGlfdWludCBtYXNrICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfbXBpIE0sIFI7CisgICAgbWJlZHRsc19tcGlfdWludCBNcFtQX0tPQkxJVFpfTUFYICsgUF9LT0JMSVRaX1JdOworCisgICAgaWYoIE4tPm4gPCBwX2xpbWJzICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAvKiBJbml0IFIgKi8KKyAgICBSLnMgPSAxOworICAgIFIucCA9IFJwOworICAgIFIubiA9IFBfS09CTElUWl9SOworCisgICAgLyogQ29tbW9uIHNldHVwIGZvciBNICovCisgICAgTS5zID0gMTsKKyAgICBNLnAgPSBNcDsKKworICAgIC8qIE0gPSBBMSAqLworICAgIE0ubiA9IE4tPm4gLSAoIHBfbGltYnMgLSBhZGp1c3QgKTsKKyAgICBpZiggTS5uID4gcF9saW1icyArIGFkanVzdCApCisgICAgICAgIE0ubiA9IHBfbGltYnMgKyBhZGp1c3Q7CisgICAgbWVtc2V0KCBNcCwgMCwgc2l6ZW9mIE1wICk7CisgICAgbWVtY3B5KCBNcCwgTi0+cCArIHBfbGltYnMgLSBhZGp1c3QsIE0ubiAqIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApICk7CisgICAgaWYoIHNoaWZ0ICE9IDAgKQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZNLCBzaGlmdCApICk7CisgICAgTS5uICs9IFIubiAtIGFkanVzdDsgLyogTWFrZSByb29tIGZvciBtdWx0aXBsaWNhdGlvbiBieSBSICovCisKKyAgICAvKiBOID0gQTAgKi8KKyAgICBpZiggbWFzayAhPSAwICkKKyAgICAgICAgTi0+cFtwX2xpbWJzIC0gMV0gJj0gbWFzazsKKyAgICBmb3IoIGkgPSBwX2xpbWJzOyBpIDwgTi0+bjsgaSsrICkKKyAgICAgICAgTi0+cFtpXSA9IDA7CisKKyAgICAvKiBOID0gQTAgKyBSICogQTEgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZNLCAmTSwgJlIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX2FicyggTiwgTiwgJk0gKSApOworCisgICAgLyogU2Vjb25kIHBhc3MgKi8KKworICAgIC8qIE0gPSBBMSAqLworICAgIE0ubiA9IE4tPm4gLSAoIHBfbGltYnMgLSBhZGp1c3QgKTsKKyAgICBpZiggTS5uID4gcF9saW1icyArIGFkanVzdCApCisgICAgICAgIE0ubiA9IHBfbGltYnMgKyBhZGp1c3Q7CisgICAgbWVtc2V0KCBNcCwgMCwgc2l6ZW9mIE1wICk7CisgICAgbWVtY3B5KCBNcCwgTi0+cCArIHBfbGltYnMgLSBhZGp1c3QsIE0ubiAqIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApICk7CisgICAgaWYoIHNoaWZ0ICE9IDAgKQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZNLCBzaGlmdCApICk7CisgICAgTS5uICs9IFIubiAtIGFkanVzdDsgLyogTWFrZSByb29tIGZvciBtdWx0aXBsaWNhdGlvbiBieSBSICovCisKKyAgICAvKiBOID0gQTAgKi8KKyAgICBpZiggbWFzayAhPSAwICkKKyAgICAgICAgTi0+cFtwX2xpbWJzIC0gMV0gJj0gbWFzazsKKyAgICBmb3IoIGkgPSBwX2xpbWJzOyBpIDwgTi0+bjsgaSsrICkKKyAgICAgICAgTi0+cFtpXSA9IDA7CisKKyAgICAvKiBOID0gQTAgKyBSICogQTEgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZNLCAmTSwgJlIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX2FicyggTiwgTiwgJk0gKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQpIHx8CisgICAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQpIHx8CisgICAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQpICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEKQorLyoKKyAqIEZhc3QgcXVhc2ktcmVkdWN0aW9uIG1vZHVsbyBwMTkyazEgPSAyXjE5MiAtIFIsCisgKiB3aXRoIFIgPSAyXjMyICsgMl4xMiArIDJeOCArIDJeNyArIDJeNiArIDJeMyArIDEgPSAweDAxMDAwMDExMTkKKyAqLworc3RhdGljIGludCBlY3BfbW9kX3AxOTJrMSggbWJlZHRsc19tcGkgKk4gKQoreworICAgIHN0YXRpYyBtYmVkdGxzX21waV91aW50IFJwW10gPSB7CisgICAgICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEM5LCAweDExLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwICkgfTsKKworICAgIHJldHVybiggZWNwX21vZF9rb2JsaXR6KCBOLCBScCwgMTkyIC8gOCAvIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApLCAwLCAwLCAwICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCkKKy8qCisgKiBGYXN0IHF1YXNpLXJlZHVjdGlvbiBtb2R1bG8gcDIyNGsxID0gMl4yMjQgLSBSLAorICogd2l0aCBSID0gMl4zMiArIDJeMTIgKyAyXjExICsgMl45ICsgMl43ICsgMl40ICsgMiArIDEgPSAweDAxMDAwMDFBOTMKKyAqLworc3RhdGljIGludCBlY3BfbW9kX3AyMjRrMSggbWJlZHRsc19tcGkgKk4gKQoreworICAgIHN0YXRpYyBtYmVkdGxzX21waV91aW50IFJwW10gPSB7CisgICAgICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDkzLCAweDFBLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwICkgfTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX0lOVDY0KQorICAgIHJldHVybiggZWNwX21vZF9rb2JsaXR6KCBOLCBScCwgNCwgMSwgMzIsIDB4RkZGRkZGRkYgKSApOworI2Vsc2UKKyAgICByZXR1cm4oIGVjcF9tb2Rfa29ibGl0eiggTiwgUnAsIDIyNCAvIDggLyBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSwgMCwgMCwgMCApICk7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEKQorLyoKKyAqIEZhc3QgcXVhc2ktcmVkdWN0aW9uIG1vZHVsbyBwMjU2azEgPSAyXjI1NiAtIFIsCisgKiB3aXRoIFIgPSAyXjMyICsgMl45ICsgMl44ICsgMl43ICsgMl42ICsgMl40ICsgMSA9IDB4MDEwMDAwMDNEMQorICovCitzdGF0aWMgaW50IGVjcF9tb2RfcDI1NmsxKCBtYmVkdGxzX21waSAqTiApCit7CisgICAgc3RhdGljIG1iZWR0bHNfbXBpX3VpbnQgUnBbXSA9IHsKKyAgICAgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RDEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAgKSB9OworICAgIHJldHVybiggZWNwX21vZF9rb2JsaXR6KCBOLCBScCwgMjU2IC8gOCAvIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApLCAwLCAwLCAwICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCAqLworCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZW50cm9weS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZW50cm9weS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZDFiMjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lbnRyb3B5LmMKQEAgLTAsMCArMSw2NTUgQEAKKy8qCisgKiAgRW50cm9weSBhY2N1bXVsYXRvciBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykKKworI2lmIGRlZmluZWQoTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSkKKyN3YXJuaW5nICIqKioqIFdBUk5JTkchICBNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZIGRlZmluZWQhICIKKyN3YXJuaW5nICIqKioqIFRISVMgQlVJTEQgSEFTIE5PIERFRklORUQgRU5UUk9QWSBTT1VSQ0VTICIKKyN3YXJuaW5nICIqKioqIFRISVMgQlVJTEQgSVMgKk5PVCogU1VJVEFCTEUgRk9SIFBST0RVQ1RJT04gVVNFICIKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5X3BvbGwuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRUdFX0MpCisjaW5jbHVkZSAibWJlZHRscy9oYXZlZ2UuaCIKKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisjZGVmaW5lIEVOVFJPUFlfTUFYX0xPT1AgICAgMjU2ICAgICAvKio8IE1heGltdW0gYW1vdW50IHRvIGxvb3AgYmVmb3JlIGVycm9yICovCisKK3ZvaWQgbWJlZHRsc19lbnRyb3B5X2luaXQoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YobWJlZHRsc19lbnRyb3B5X2NvbnRleHQpICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc19tdXRleF9pbml0KCAmY3R4LT5tdXRleCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9TSEE1MTJfQUNDVU1VTEFUT1IpCisgICAgbWJlZHRsc19zaGE1MTJfc3RhcnRzKCAmY3R4LT5hY2N1bXVsYXRvciwgMCApOworI2Vsc2UKKyAgICBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoICZjdHgtPmFjY3VtdWxhdG9yLCAwICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRUdFX0MpCisgICAgbWJlZHRsc19oYXZlZ2VfaW5pdCggJmN0eC0+aGF2ZWdlX2RhdGEgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZKQorICAgIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCBjdHgsIG1iZWR0bHNfbnVsbF9lbnRyb3B5X3BvbGwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfU1RST05HICk7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMpCisjaWYgIWRlZmluZWQoTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZKQorICAgIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCBjdHgsIG1iZWR0bHNfcGxhdGZvcm1fZW50cm9weV9wb2xsLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfTUlOX1BMQVRGT1JNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfU09VUkNFX1NUUk9ORyApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1RJTUlOR19DKQorICAgIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCBjdHgsIG1iZWR0bHNfaGFyZGNsb2NrX3BvbGwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9NSU5fSEFSRENMT0NLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfU09VUkNFX1dFQUsgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykKKyAgICBtYmVkdGxzX2VudHJvcHlfYWRkX3NvdXJjZSggY3R4LCBtYmVkdGxzX2hhdmVnZV9wb2xsLCAmY3R4LT5oYXZlZ2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX01JTl9IQVZFR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfU1RST05HICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQpCisgICAgbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UoIGN0eCwgbWJlZHRsc19oYXJkd2FyZV9wb2xsLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfTUlOX0hBUkRXQVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfU09VUkNFX1NUUk9ORyApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKKyAgICBtYmVkdGxzX2VudHJvcHlfYWRkX3NvdXJjZSggY3R4LCBtYmVkdGxzX252X3NlZWRfcG9sbCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfU1RST05HICk7CisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTICovCit9CisKK3ZvaWQgbWJlZHRsc19lbnRyb3B5X2ZyZWUoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHggKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykKKyAgICBtYmVkdGxzX2hhdmVnZV9mcmVlKCAmY3R4LT5oYXZlZ2VfZGF0YSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfbXV0ZXhfZnJlZSggJmN0eC0+bXV0ZXggKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICkgKTsKK30KKworaW50IG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lbnRyb3B5X2Zfc291cmNlX3B0ciBmX3NvdXJjZSwgdm9pZCAqcF9zb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGhyZXNob2xkLCBpbnQgc3Ryb25nICkKK3sKKyAgICBpbnQgaW5kZXgsIHJldCA9IDA7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tdXRleF9sb2NrKCAmY3R4LT5tdXRleCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworICAgIGluZGV4ID0gY3R4LT5zb3VyY2VfY291bnQ7CisgICAgaWYoIGluZGV4ID49IE1CRURUTFNfRU5UUk9QWV9NQVhfU09VUkNFUyApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FTlRST1BZX01BWF9TT1VSQ0VTOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgY3R4LT5zb3VyY2VbaW5kZXhdLmZfc291cmNlICA9IGZfc291cmNlOworICAgIGN0eC0+c291cmNlW2luZGV4XS5wX3NvdXJjZSAgPSBwX3NvdXJjZTsKKyAgICBjdHgtPnNvdXJjZVtpbmRleF0udGhyZXNob2xkID0gdGhyZXNob2xkOworICAgIGN0eC0+c291cmNlW2luZGV4XS5zdHJvbmcgICAgPSBzdHJvbmc7CisKKyAgICBjdHgtPnNvdXJjZV9jb3VudCsrOworCitleGl0OgorI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZjdHgtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SICk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBFbnRyb3B5IGFjY3VtdWxhdG9yIHVwZGF0ZQorICovCitzdGF0aWMgaW50IGVudHJvcHlfdXBkYXRlKCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIHNvdXJjZV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgaGVhZGVyWzJdOworICAgIHVuc2lnbmVkIGNoYXIgdG1wW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXTsKKyAgICBzaXplX3QgdXNlX2xlbiA9IGxlbjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gZGF0YTsKKworICAgIGlmKCB1c2VfbGVuID4gTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9TSEE1MTJfQUNDVU1VTEFUT1IpCisgICAgICAgIG1iZWR0bHNfc2hhNTEyKCBkYXRhLCBsZW4sIHRtcCwgMCApOworI2Vsc2UKKyAgICAgICAgbWJlZHRsc19zaGEyNTYoIGRhdGEsIGxlbiwgdG1wLCAwICk7CisjZW5kaWYKKyAgICAgICAgcCA9IHRtcDsKKyAgICAgICAgdXNlX2xlbiA9IE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFOworICAgIH0KKworICAgIGhlYWRlclswXSA9IHNvdXJjZV9pZDsKKyAgICBoZWFkZXJbMV0gPSB1c2VfbGVuICYgMHhGRjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX1NIQTUxMl9BQ0NVTVVMQVRPUikKKyAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoICZjdHgtPmFjY3VtdWxhdG9yLCBoZWFkZXIsIDIgKTsKKyAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoICZjdHgtPmFjY3VtdWxhdG9yLCBwLCB1c2VfbGVuICk7CisjZWxzZQorICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSggJmN0eC0+YWNjdW11bGF0b3IsIGhlYWRlciwgMiApOworICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSggJmN0eC0+YWNjdW11bGF0b3IsIHAsIHVzZV9sZW4gKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX21hbnVhbCggbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tdXRleF9sb2NrKCAmY3R4LT5tdXRleCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworICAgIHJldCA9IGVudHJvcHlfdXBkYXRlKCBjdHgsIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfTUFOVUFMLCBkYXRhLCBsZW4gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZjdHgtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SICk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBSdW4gdGhyb3VnaCB0aGUgZGlmZmVyZW50IHNvdXJjZXMgdG8gYWRkIGVudHJvcHkgdG8gb3VyIGFjY3VtdWxhdG9yCisgKi8KK3N0YXRpYyBpbnQgZW50cm9weV9nYXRoZXJfaW50ZXJuYWwoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHggKQoreworICAgIGludCByZXQsIGksIGhhdmVfb25lX3N0cm9uZyA9IDA7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19FTlRST1BZX01BWF9HQVRIRVJdOworICAgIHNpemVfdCBvbGVuOworCisgICAgaWYoIGN0eC0+c291cmNlX2NvdW50ID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VOVFJPUFlfTk9fU09VUkNFU19ERUZJTkVEICk7CisKKyAgICAvKgorICAgICAqIFJ1biB0aHJvdWdoIG91ciBlbnRyb3B5IHNvdXJjZXMKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgY3R4LT5zb3VyY2VfY291bnQ7IGkrKyApCisgICAgeworICAgICAgICBpZiggY3R4LT5zb3VyY2VbaV0uc3Ryb25nID09IE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfU1RST05HICkKKyAgICAgICAgICAgIGhhdmVfb25lX3N0cm9uZyA9IDE7CisKKyAgICAgICAgb2xlbiA9IDA7CisgICAgICAgIGlmKCAoIHJldCA9IGN0eC0+c291cmNlW2ldLmZfc291cmNlKCBjdHgtPnNvdXJjZVtpXS5wX3NvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgTUJFRFRMU19FTlRST1BZX01BWF9HQVRIRVIsICZvbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEFkZCBpZiB3ZSBhY3R1YWxseSBnYXRoZXJlZCBzb21ldGhpbmcKKyAgICAgICAgICovCisgICAgICAgIGlmKCBvbGVuID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVudHJvcHlfdXBkYXRlKCBjdHgsICh1bnNpZ25lZCBjaGFyKSBpLCBidWYsIG9sZW4gKTsKKyAgICAgICAgICAgIGN0eC0+c291cmNlW2ldLnNpemUgKz0gb2xlbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBoYXZlX29uZV9zdHJvbmcgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9OT19TVFJPTkdfU09VUkNFICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFRocmVhZC1zYWZlIHdyYXBwZXIgZm9yIGVudHJvcHlfZ2F0aGVyX2ludGVybmFsKCkKKyAqLworaW50IG1iZWR0bHNfZW50cm9weV9nYXRoZXIoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHggKQoreworICAgIGludCByZXQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tdXRleF9sb2NrKCAmY3R4LT5tdXRleCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworICAgIHJldCA9IGVudHJvcHlfZ2F0aGVyX2ludGVybmFsKCBjdHggKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZjdHgtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SICk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKK2ludCBtYmVkdGxzX2VudHJvcHlfZnVuYyggdm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0LCBjb3VudCA9IDAsIGksIGRvbmU7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKmN0eCA9IChtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqKSBkYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXTsKKworICAgIGlmKCBsZW4gPiBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQorICAgIC8qIFVwZGF0ZSB0aGUgTlYgZW50cm9weSBzZWVkIGJlZm9yZSBnZW5lcmF0aW5nIGFueSBlbnRyb3B5IGZvciBvdXRzaWRlCisgICAgICogdXNlLgorICAgICAqLworICAgIGlmKCBjdHgtPmluaXRpYWxfZW50cm9weV9ydW4gPT0gMCApCisgICAgeworICAgICAgICBjdHgtPmluaXRpYWxfZW50cm9weV9ydW4gPSAxOworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX252X3NlZWQoIGN0eCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXV0ZXhfbG9jayggJmN0eC0+bXV0ZXggKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEFsd2F5cyBnYXRoZXIgZXh0cmEgZW50cm9weSBiZWZvcmUgYSBjYWxsCisgICAgICovCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmKCBjb3VudCsrID4gRU5UUk9QWV9NQVhfTE9PUCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRDsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHJldCA9IGVudHJvcHlfZ2F0aGVyX2ludGVybmFsKCBjdHggKSApICE9IDAgKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIGRvbmUgPSAxOworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgY3R4LT5zb3VyY2VfY291bnQ7IGkrKyApCisgICAgICAgICAgICBpZiggY3R4LT5zb3VyY2VbaV0uc2l6ZSA8IGN0eC0+c291cmNlW2ldLnRocmVzaG9sZCApCisgICAgICAgICAgICAgICAgZG9uZSA9IDA7CisgICAgfQorICAgIHdoaWxlKCAhIGRvbmUgKTsKKworICAgIG1lbXNldCggYnVmLCAwLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfU0hBNTEyX0FDQ1VNVUxBVE9SKQorICAgIG1iZWR0bHNfc2hhNTEyX2ZpbmlzaCggJmN0eC0+YWNjdW11bGF0b3IsIGJ1ZiApOworCisgICAgLyoKKyAgICAgKiBSZXNldCBhY2N1bXVsYXRvciBhbmQgY291bnRlcnMgYW5kIHJlY3ljbGUgZXhpc3RpbmcgZW50cm9weQorICAgICAqLworICAgIG1lbXNldCggJmN0eC0+YWNjdW11bGF0b3IsIDAsIHNpemVvZiggbWJlZHRsc19zaGE1MTJfY29udGV4dCApICk7CisgICAgbWJlZHRsc19zaGE1MTJfc3RhcnRzKCAmY3R4LT5hY2N1bXVsYXRvciwgMCApOworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJmN0eC0+YWNjdW11bGF0b3IsIGJ1ZiwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIC8qCisgICAgICogUGVyZm9ybSBzZWNvbmQgU0hBLTUxMiBvbiBlbnRyb3B5CisgICAgICovCisgICAgbWJlZHRsc19zaGE1MTIoIGJ1ZiwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUsIGJ1ZiwgMCApOworI2Vsc2UgLyogTUJFRFRMU19FTlRST1BZX1NIQTUxMl9BQ0NVTVVMQVRPUiAqLworICAgIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaCggJmN0eC0+YWNjdW11bGF0b3IsIGJ1ZiApOworCisgICAgLyoKKyAgICAgKiBSZXNldCBhY2N1bXVsYXRvciBhbmQgY291bnRlcnMgYW5kIHJlY3ljbGUgZXhpc3RpbmcgZW50cm9weQorICAgICAqLworICAgIG1lbXNldCggJmN0eC0+YWNjdW11bGF0b3IsIDAsIHNpemVvZiggbWJlZHRsc19zaGEyNTZfY29udGV4dCApICk7CisgICAgbWJlZHRsc19zaGEyNTZfc3RhcnRzKCAmY3R4LT5hY2N1bXVsYXRvciwgMCApOworICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSggJmN0eC0+YWNjdW11bGF0b3IsIGJ1ZiwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIC8qCisgICAgICogUGVyZm9ybSBzZWNvbmQgU0hBLTI1NiBvbiBlbnRyb3B5CisgICAgICovCisgICAgbWJlZHRsc19zaGEyNTYoIGJ1ZiwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUsIGJ1ZiwgMCApOworI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9TSEE1MTJfQUNDVU1VTEFUT1IgKi8KKworICAgIGZvciggaSA9IDA7IGkgPCBjdHgtPnNvdXJjZV9jb3VudDsgaSsrICkKKyAgICAgICAgY3R4LT5zb3VyY2VbaV0uc2l6ZSA9IDA7CisKKyAgICBtZW1jcHkoIG91dHB1dCwgYnVmLCBsZW4gKTsKKworICAgIHJldCA9IDA7CisKK2V4aXQ6CisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCBtYmVkdGxzX211dGV4X3VubG9jayggJmN0eC0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpCitpbnQgbWJlZHRsc19lbnRyb3B5X3VwZGF0ZV9udl9zZWVkKCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfRU5UUk9QWV9GSUxFX0lPX0VSUk9SOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWyBNQkVEVExTX0VOVFJPUFlfTUFYX1NFRURfU0laRSBdOworCisgICAgLyogUmVhZCBuZXcgc2VlZCAgYW5kIHdyaXRlIGl0IHRvIE5WICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lbnRyb3B5X2Z1bmMoIGN0eCwgYnVmLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggbWJlZHRsc19udl9zZWVkX3dyaXRlKCBidWYsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkgPCAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FTlRST1BZX0ZJTEVfSU9fRVJST1IgKTsKKworICAgIC8qIE1hbnVhbGx5IHVwZGF0ZSB0aGUgcmVtYWluaW5nIHN0cmVhbSB3aXRoIGEgc2VwYXJhdG9yIHZhbHVlIHRvIGRpdmVyZ2UgKi8KKyAgICBtZW1zZXQoIGJ1ZiwgMCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX21hbnVhbCggY3R4LCBidWYsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1iZWR0bHNfZW50cm9weV93cml0ZV9zZWVkX2ZpbGUoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGggKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9FTlRST1BZX0ZJTEVfSU9fRVJST1I7CisgICAgRklMRSAqZjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRV07CisKKyAgICBpZiggKCBmID0gZm9wZW4oIHBhdGgsICJ3YiIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VOVFJPUFlfRklMRV9JT19FUlJPUiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lbnRyb3B5X2Z1bmMoIGN0eCwgYnVmLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmKCBmd3JpdGUoIGJ1ZiwgMSwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUsIGYgKSAhPSBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FTlRST1BZX0ZJTEVfSU9fRVJST1I7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSAwOworCitleGl0OgorICAgIGZjbG9zZSggZiApOworICAgIHJldHVybiggcmV0ICk7Cit9CisKK2ludCBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX3NlZWRfZmlsZSggbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApCit7CisgICAgRklMRSAqZjsKKyAgICBzaXplX3QgbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsgTUJFRFRMU19FTlRST1BZX01BWF9TRUVEX1NJWkUgXTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggcGF0aCwgInJiIiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9GSUxFX0lPX0VSUk9SICk7CisKKyAgICBmc2VlayggZiwgMCwgU0VFS19FTkQgKTsKKyAgICBuID0gKHNpemVfdCkgZnRlbGwoIGYgKTsKKyAgICBmc2VlayggZiwgMCwgU0VFS19TRVQgKTsKKworICAgIGlmKCBuID4gTUJFRFRMU19FTlRST1BZX01BWF9TRUVEX1NJWkUgKQorICAgICAgICBuID0gTUJFRFRMU19FTlRST1BZX01BWF9TRUVEX1NJWkU7CisKKyAgICBpZiggZnJlYWQoIGJ1ZiwgMSwgbiwgZiApICE9IG4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9GSUxFX0lPX0VSUk9SICk7CisgICAgfQorCisgICAgZmNsb3NlKCBmICk7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX21hbnVhbCggY3R4LCBidWYsIG4gKTsKKworICAgIHJldHVybiggbWJlZHRsc19lbnRyb3B5X3dyaXRlX3NlZWRfZmlsZSggY3R4LCBwYXRoICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmICFkZWZpbmVkKE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkpCisvKgorICogRHVtbXkgc291cmNlIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQgZW50cm9weV9kdW1teV9zb3VyY2UoIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiApCit7CisgICAgKCh2b2lkKSBkYXRhKTsKKworICAgIG1lbXNldCggb3V0cHV0LCAweDJhLCBsZW4gKTsKKyAgICAqb2xlbiA9IGxlbjsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qICFNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQpCisKK3N0YXRpYyBpbnQgbWJlZHRsc19lbnRyb3B5X3NvdXJjZV9zZWxmX3Rlc3RfZ2F0aGVyKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBzaXplX3QgZW50cm9weV9sZW4gPSAwOworICAgIHNpemVfdCBvbGVuID0gMDsKKyAgICBzaXplX3QgYXR0ZW1wdHMgPSBidWZfbGVuOworCisgICAgd2hpbGUoIGF0dGVtcHRzID4gMCAmJiBlbnRyb3B5X2xlbiA8IGJ1Zl9sZW4gKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19oYXJkd2FyZV9wb2xsKCBOVUxMLCBidWYgKyBlbnRyb3B5X2xlbiwKKyAgICAgICAgICAgIGJ1Zl9sZW4gLSBlbnRyb3B5X2xlbiwgJm9sZW4gKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBlbnRyb3B5X2xlbiArPSBvbGVuOworICAgICAgICBhdHRlbXB0cy0tOworICAgIH0KKworICAgIGlmKCBlbnRyb3B5X2xlbiA8IGJ1Zl9sZW4gKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisKK3N0YXRpYyBpbnQgbWJlZHRsc19lbnRyb3B5X3NvdXJjZV9zZWxmX3Rlc3RfY2hlY2tfYml0cyggY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmX2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciBzZXQ9IDB4RkY7CisgICAgdW5zaWduZWQgY2hhciB1bnNldCA9IDB4MDA7CisgICAgc2l6ZV90IGk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgYnVmX2xlbjsgaSsrICkKKyAgICB7CisgICAgICAgIHNldCAmPSBidWZbaV07CisgICAgICAgIHVuc2V0IHw9IGJ1ZltpXTsKKyAgICB9CisKKyAgICByZXR1cm4oIHNldCA9PSAweEZGIHx8IHVuc2V0ID09IDB4MDAgKTsKK30KKworLyoKKyAqIEEgdGVzdCB0byBlbnN1cmUgaGF0IHRoZSBlbnRyb3B5IHNvdXJjZXMgYXJlIGZ1bmN0aW9uaW5nIGNvcnJlY3RseQorICogYW5kIHRoZXJlIGlzIG5vIG9idmlvdXMgZmFpbHVyZS4gVGhlIHRlc3QgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBjaGVja3M6CisgKiAgLSBUaGUgZW50cm9weSBzb3VyY2UgaXMgbm90IHByb3ZpZGluZyBvbmx5IDBzIChhbGwgYml0cyB1bnNldCkgb3IgMXMgKGFsbAorICogICAgYml0cyBzZXQpLgorICogIC0gVGhlIGVudHJvcHkgc291cmNlIGlzIG5vdCBwcm92aWRpbmcgdmFsdWVzIGluIGEgcGF0dGVybi4gQmVjYXVzZSB0aGUKKyAqICAgIGhhcmR3YXJlIGNvdWxkIGJlIHByb3ZpZGluZyBkYXRhIGluIGFuIGFyYml0cmFyeSBsZW5ndGgsIHRoaXMgY2hlY2sgcG9sbHMKKyAqICAgIHRoZSBoYXJkd2FyZSBlbnRyb3B5IHNvdXJjZSB0d2ljZSBhbmQgY29tcGFyZXMgdGhlIHJlc3VsdCB0byBlbnN1cmUgdGhleQorICogICAgYXJlIG5vdCBlcXVhbC4KKyAqICAtIFRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IHRoZSBlbnRyb3B5IHNvdXJjZSBpcyBub3QgYW4gZXJyb3IuCisgKi8KK2ludCBtYmVkdGxzX2VudHJvcHlfc291cmNlX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCByZXQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnVmMFsyICogc2l6ZW9mKCB1bnNpZ25lZCBsb25nIGxvbmcgaW50ICldOworICAgIHVuc2lnbmVkIGNoYXIgYnVmMVsyICogc2l6ZW9mKCB1bnNpZ25lZCBsb25nIGxvbmcgaW50ICldOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBFTlRST1BZX0JJQVMgdGVzdDogIiApOworCisgICAgbWVtc2V0KCBidWYwLCAweDAwLCBzaXplb2YoIGJ1ZjAgKSApOworICAgIG1lbXNldCggYnVmMSwgMHgwMCwgc2l6ZW9mKCBidWYxICkgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZW50cm9weV9zb3VyY2Vfc2VsZl90ZXN0X2dhdGhlciggYnVmMCwgc2l6ZW9mKCBidWYwICkgKSApICE9IDAgKQorICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lbnRyb3B5X3NvdXJjZV9zZWxmX3Rlc3RfZ2F0aGVyKCBidWYxLCBzaXplb2YoIGJ1ZjEgKSApICkgIT0gMCApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXR1cm5lZCB2YWx1ZXMgYXJlIG5vdCBhbGwgMCBvciAxICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lbnRyb3B5X3NvdXJjZV9zZWxmX3Rlc3RfY2hlY2tfYml0cyggYnVmMCwgc2l6ZW9mKCBidWYwICkgKSApICE9IDAgKQorICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lbnRyb3B5X3NvdXJjZV9zZWxmX3Rlc3RfY2hlY2tfYml0cyggYnVmMSwgc2l6ZW9mKCBidWYxICkgKSApICE9IDAgKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgZW50cm9weSBzb3VyY2UgaXMgbm90IHJldHVybmluZyB2YWx1ZXMgaW4gYQorICAgICAqIHBhdHRlcm4gKi8KKyAgICByZXQgPSBtZW1jbXAoIGJ1ZjAsIGJ1ZjEsIHNpemVvZiggYnVmMCApICkgPT0gMDsKKworY2xlYW51cDoKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisgICAgfQorCisgICAgcmV0dXJuKCByZXQgIT0gMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVCAqLworCisvKgorICogVGhlIGFjdHVhbCBlbnRyb3B5IHF1YWxpdHkgaXMgaGFyZCB0byB0ZXN0LCBidXQgd2UgY2FuIGF0IGxlYXN0CisgKiB0ZXN0IHRoYXQgdGhlIGZ1bmN0aW9ucyBkb24ndCBjYXVzZSBlcnJvcnMgYW5kIHdyaXRlIHRoZSBjb3JyZWN0CisgKiBhbW91bnQgb2YgZGF0YSB0byBidWZmZXJzLgorICovCitpbnQgbWJlZHRsc19lbnRyb3B5X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCByZXQgPSAxOworI2lmICFkZWZpbmVkKE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkpCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXSA9IHsgMCB9OworICAgIHVuc2lnbmVkIGNoYXIgYWNjW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXSA9IHsgMCB9OworICAgIHNpemVfdCBpLCBqOworI2VuZGlmIC8qICFNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZICovCisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEVOVFJPUFkgdGVzdDogIiApOworCisjaWYgIWRlZmluZWQoTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSkKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmN0eCApOworCisgICAgLyogRmlyc3QgZG8gYSBnYXRoZXIgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZGVmYXVsdCBzb3VyY2VzICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lbnRyb3B5X2dhdGhlciggJmN0eCApICkgIT0gMCApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIHJldCA9IG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCAmY3R4LCBlbnRyb3B5X2R1bW15X3NvdXJjZSwgTlVMTCwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfV0VBSyApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZW50cm9weV91cGRhdGVfbWFudWFsKCAmY3R4LCBidWYsIHNpemVvZiBidWYgKSApICE9IDAgKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICAvKgorICAgICAqIFRvIHRlc3QgdGhhdCBtYmVkdGxzX2VudHJvcHlfZnVuYyB3cml0ZXMgY29ycmVjdCBudW1iZXIgb2YgYnl0ZXM6CisgICAgICogLSB1c2UgdGhlIHdob2xlIGJ1ZmZlciBhbmQgcmVseSBvbiBBU2FuIHRvIGRldGVjdCBvdmVycnVucworICAgICAqIC0gY29sbGVjdCBlbnRyb3B5IDggdGltZXMgYW5kIE9SIHRoZSByZXN1bHQgaW4gYW4gYWNjdW11bGF0b3I6CisgICAgICogICBhbnkgYnl0ZSBzaG91bGQgdGhlbiBiZSAwIHdpdGggcHJvYmFibHkgMl4oLTY0KSwgc28gcmVxdWlyaW5nCisgICAgICogICBlYWNoIG9mIHRoZSAzMiBvciA2NCBieXRlcyB0byBiZSBub24temVybyBoYXMgYSBmYWxzZSBmYWlsdXJlIHJhdGUKKyAgICAgKiAgIG9mIGF0IG1vc3QgMl4oLTU4KSB3aGljaCBpcyBhY2NlcHRhYmxlLgorICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19lbnRyb3B5X2Z1bmMoICZjdHgsIGJ1Ziwgc2l6ZW9mKCBidWYgKSApICkgIT0gMCApCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICAgICAgZm9yKCBqID0gMDsgaiA8IHNpemVvZiggYnVmICk7IGorKyApCisgICAgICAgICAgICBhY2Nbal0gfD0gYnVmW2pdOworICAgIH0KKworICAgIGZvciggaiA9IDA7IGogPCBzaXplb2YoIGJ1ZiApOyBqKysgKQorICAgIHsKKyAgICAgICAgaWYoIGFjY1tqXSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVCkKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VudHJvcHlfc291cmNlX3NlbGZfdGVzdCggMCApICkgIT0gMCApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKyNlbmRpZgorCitjbGVhbnVwOgorICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmY3R4ICk7CisjZW5kaWYgLyogIU1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgKi8KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIHJldCAhPSAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lbnRyb3B5X3BvbGwuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VudHJvcHlfcG9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMTZlNjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lbnRyb3B5X3BvbGwuYwpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqICBQbGF0Zm9ybS1zcGVjaWZpYyBhbmQgY3VzdG9tIGVudHJvcHkgcG9sbGluZyBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHlfcG9sbC5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RJTUlOR19DKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIm1iZWR0bHMvdGltaW5nLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRUdFX0MpCisjaW5jbHVkZSAibWJlZHRscy9oYXZlZ2UuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkpCisKKyNpZiAhZGVmaW5lZCh1bml4KSAmJiAhZGVmaW5lZChfX3VuaXhfXykgJiYgIWRlZmluZWQoX191bml4KSAmJiBcCisgICAgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfV0lOMzIpCisjZXJyb3IgIlBsYXRmb3JtIGVudHJvcHkgc291cmNlcyBvbmx5IHdvcmsgb24gVW5peCBhbmQgV2luZG93cywgc2VlIE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWSBpbiBjb25maWcuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgIWRlZmluZWQoRUZJMzIpCisKKyNpZiAhZGVmaW5lZChfV0lOMzJfV0lOTlQpCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA0MDAKKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5jcnlwdC5oPgorCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9lbnRyb3B5X3BvbGwoIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgSENSWVBUUFJPViBwcm92aWRlcjsKKyAgICAoKHZvaWQpIGRhdGEpOworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBDcnlwdEFjcXVpcmVDb250ZXh0KCAmcHJvdmlkZXIsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WX1JTQV9GVUxMLCBDUllQVF9WRVJJRllDT05URVhUICkgPT0gRkFMU0UgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKyAgICB9CisKKyAgICBpZiggQ3J5cHRHZW5SYW5kb20oIHByb3ZpZGVyLCAoRFdPUkQpIGxlbiwgb3V0cHV0ICkgPT0gRkFMU0UgKQorICAgIHsKKyAgICAgICAgQ3J5cHRSZWxlYXNlQ29udGV4dCggcHJvdmlkZXIsIDAgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKyAgICB9CisKKyAgICBDcnlwdFJlbGVhc2VDb250ZXh0KCBwcm92aWRlciwgMCApOworICAgICpvbGVuID0gbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZSAvKiBfV0lOMzIgJiYgIUVGSVg2NCAmJiAhRUZJMzIgKi8KKworLyoKKyAqIFRlc3QgZm9yIExpbnV4IGdldHJhbmRvbSgpIHN1cHBvcnQuCisgKiBTaW5jZSB0aGVyZSBpcyBubyB3cmFwcGVyIGluIHRoZSBsaWJjIHlldCwgdXNlIHRoZSBnZW5lcmljIHN5c2NhbGwgd3JhcHBlcgorICogYXZhaWxhYmxlIGluIEdOVSBsaWJjIGFuZCBjb21wYXRpYmxlIGxpYmMncyAoZWcgdUNsaWJjKS4KKyAqLworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9fR0xJQkNfXykKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2lmIGRlZmluZWQoU1lTX2dldHJhbmRvbSkKKyNkZWZpbmUgSEFWRV9HRVRSQU5ET00KKworc3RhdGljIGludCBnZXRyYW5kb21fd3JhcHBlciggdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MgKQoreworICAgIC8qIE1lbVNhbiBjYW5ub3QgdW5kZXJzdGFuZCB0aGF0IHRoZSBzeXNjYWxsIHdyaXRlcyB0byB0aGUgYnVmZmVyICovCisjaWYgZGVmaW5lZChfX2hhc19mZWF0dXJlKQorI2lmIF9faGFzX2ZlYXR1cmUobWVtb3J5X3Nhbml0aXplcikKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgYnVmbGVuICk7CisjZW5kaWYKKyNlbmRpZgorCisgICAgcmV0dXJuKCBzeXNjYWxsKCBTWVNfZ2V0cmFuZG9tLCBidWYsIGJ1ZmxlbiwgZmxhZ3MgKSApOworfQorCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKy8qIENoZWNrIGlmIHZlcnNpb24gaXMgYXQgbGVhc3QgMy4xNy4wICovCitzdGF0aWMgaW50IGNoZWNrX3ZlcnNpb25fM18xN19wbHVzKCB2b2lkICkKK3sKKyAgICBpbnQgbWlub3I7CisgICAgc3RydWN0IHV0c25hbWUgdW47CisgICAgY29uc3QgY2hhciAqdmVyOworCisgICAgLyogR2V0IHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICB1bmFtZSgmdW4pOworICAgIHZlciA9IHVuLnJlbGVhc2U7CisKKyAgICAvKiBDaGVjayBtYWpvciB2ZXJzaW9uOyBhc3N1bWUgYSBzaW5nbGUgZGlnaXQgKi8KKyAgICBpZiggdmVyWzBdIDwgJzMnIHx8IHZlclswXSA+ICc5JyB8fCB2ZXIgWzFdICE9ICcuJyApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGlmKCB2ZXJbMF0gLSAnMCcgPiAzICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAvKiBPaywgc28gbm93IHdlIGtub3cgbWFqb3IgPT0gMywgY2hlY2sgbWlub3IuCisgICAgICogQXNzdW1lIDEgb3IgMiBkaWdpdHMuICovCisgICAgaWYoIHZlclsyXSA8ICcwJyB8fCB2ZXJbMl0gPiAnOScgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBtaW5vciA9IHZlclsyXSAtICcwJzsKKworICAgIGlmKCB2ZXJbM10gPj0gJzAnICYmIHZlclszXSA8PSAnOScgKQorICAgICAgICBtaW5vciA9IDEwICogbWlub3IgKyB2ZXJbM10gLSAnMCc7CisgICAgZWxzZSBpZiggdmVyIFszXSAhPSAnLicgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggbWlub3IgPCAxNyApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIHJldHVybiggMCApOworfQorc3RhdGljIGludCBoYXNfZ2V0cmFuZG9tID0gLTE7CisjZW5kaWYgLyogU1lTX2dldHJhbmRvbSAqLworI2VuZGlmIC8qIF9fbGludXhfXyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IG1iZWR0bHNfcGxhdGZvcm1fZW50cm9weV9wb2xsKCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4gKQoreworICAgIEZJTEUgKmZpbGU7CisgICAgc2l6ZV90IHJlYWRfbGVuOworICAgICgodm9pZCkgZGF0YSk7CisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUUkFORE9NKQorICAgIGlmKCBoYXNfZ2V0cmFuZG9tID09IC0xICkKKyAgICAgICAgaGFzX2dldHJhbmRvbSA9ICggY2hlY2tfdmVyc2lvbl8zXzE3X3BsdXMoKSA9PSAwICk7CisKKyAgICBpZiggaGFzX2dldHJhbmRvbSApCisgICAgeworICAgICAgICBpbnQgcmV0OworCisgICAgICAgIGlmKCAoIHJldCA9IGdldHJhbmRvbV93cmFwcGVyKCBvdXRwdXQsIGxlbiwgMCApICkgPCAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICk7CisKKyAgICAgICAgKm9sZW4gPSByZXQ7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZiAvKiBIQVZFX0dFVFJBTkRPTSAqLworCisgICAgKm9sZW4gPSAwOworCisgICAgZmlsZSA9IGZvcGVuKCAiL2Rldi91cmFuZG9tIiwgInJiIiApOworICAgIGlmKCBmaWxlID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCApOworCisgICAgcmVhZF9sZW4gPSBmcmVhZCggb3V0cHV0LCAxLCBsZW4sIGZpbGUgKTsKKyAgICBpZiggcmVhZF9sZW4gIT0gbGVuICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZmlsZSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCApOworICAgIH0KKworICAgIGZjbG9zZSggZmlsZSApOworICAgICpvbGVuID0gbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogX1dJTjMyICYmICFFRklYNjQgJiYgIUVGSTMyICovCisjZW5kaWYgLyogIU1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZKQoraW50IG1iZWR0bHNfbnVsbF9lbnRyb3B5X3BvbGwoIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICAoKHZvaWQpIGRhdGEpOworICAgICgodm9pZCkgb3V0cHV0KTsKKyAgICAqb2xlbiA9IDA7CisKKyAgICBpZiggbGVuIDwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAqb2xlbiA9IHNpemVvZih1bnNpZ25lZCBjaGFyKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCitpbnQgbWJlZHRsc19oYXJkY2xvY2tfcG9sbCggdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGxvbmcgdGltZXIgPSBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soKTsKKyAgICAoKHZvaWQpIGRhdGEpOworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBsZW4gPCBzaXplb2YodW5zaWduZWQgbG9uZykgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIG1lbWNweSggb3V0cHV0LCAmdGltZXIsIHNpemVvZih1bnNpZ25lZCBsb25nKSApOworICAgICpvbGVuID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19USU1JTkdfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVHRV9DKQoraW50IG1iZWR0bHNfaGF2ZWdlX3BvbGwoIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBtYmVkdGxzX2hhdmVnZV9zdGF0ZSAqaHMgPSAobWJlZHRsc19oYXZlZ2Vfc3RhdGUgKikgZGF0YTsKKyAgICAqb2xlbiA9IDA7CisKKyAgICBpZiggbWJlZHRsc19oYXZlZ2VfcmFuZG9tKCBocywgb3V0cHV0LCBsZW4gKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKworICAgICpvbGVuID0gbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19IQVZFR0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKK2ludCBtYmVkdGxzX252X3NlZWRfcG9sbCggdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXTsKKyAgICBzaXplX3QgdXNlX2xlbiA9IE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFOworICAgICgodm9pZCkgZGF0YSk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIGlmKCBtYmVkdGxzX252X3NlZWRfcmVhZCggYnVmLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApIDwgMCApCisgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCApOworCisgICAgaWYoIGxlbiA8IHVzZV9sZW4gKQorICAgICAgdXNlX2xlbiA9IGxlbjsKKworICAgIG1lbWNweSggb3V0cHV0LCBidWYsIHVzZV9sZW4gKTsKKyAgICAqb2xlbiA9IHVzZV9sZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCAqLworCisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2Vycm9yLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMmRiMGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lcnJvci5jCkBAIC0wLDAgKzEsNzA3IEBACisvKgorICogIEVycm9yIG1lc3NhZ2UgaW5mb3JtYXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkpCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmIHNucHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgdGltZV90CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyNpbmNsdWRlICJtYmVkdGxzL2Flcy5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQkFTRTY0X0MpCisjaW5jbHVkZSAibWJlZHRscy9iYXNlNjQuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvYmlnbnVtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CTE9XRklTSF9DKQorI2luY2x1ZGUgIm1iZWR0bHMvYmxvd2Zpc2guaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisjaW5jbHVkZSAibWJlZHRscy9jYW1lbGxpYS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisjaW5jbHVkZSAibWJlZHRscy9jY20uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9DKQorI2luY2x1ZGUgIm1iZWR0bHMvY2lwaGVyLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorI2luY2x1ZGUgIm1iZWR0bHMvZGVzLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykKKyNpbmNsdWRlICJtYmVkdGxzL2RobS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisjaW5jbHVkZSAibWJlZHRscy9lY3AuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvZ2NtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ITUFDX0RSQkdfQykKKyNpbmNsdWRlICJtYmVkdGxzL2htYWNfZHJiZy5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ORVRfQykKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19PSURfQykKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEFETE9DS19DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGFkbG9jay5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpIHx8IGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BrLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMTJfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BrY3MxMi5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzVfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BrY3M1LmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKQorI2luY2x1ZGUgIm1iZWR0bHMvc3NsLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyNpbmNsdWRlICJtYmVkdGxzL3RocmVhZGluZy5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9VU0VfQykgfHwgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JFQVRFX0MpCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YVEVBX0MpCisjaW5jbHVkZSAibWJlZHRscy94dGVhLmgiCisjZW5kaWYKKworCit2b2lkIG1iZWR0bHNfc3RyZXJyb3IoIGludCByZXQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApCit7CisgICAgc2l6ZV90IGxlbjsKKyAgICBpbnQgdXNlX3JldDsKKworICAgIGlmKCBidWZsZW4gPT0gMCApCisgICAgICAgIHJldHVybjsKKworICAgIG1lbXNldCggYnVmLCAweDAwLCBidWZsZW4gKTsKKworICAgIGlmKCByZXQgPCAwICkKKyAgICAgICAgcmV0ID0gLXJldDsKKworICAgIGlmKCByZXQgJiAweEZGODAgKQorICAgIHsKKyAgICAgICAgdXNlX3JldCA9IHJldCAmIDB4RkY4MDsKKworICAgICAgICAvLyBIaWdoIGxldmVsIGVycm9yIGNvZGVzCisgICAgICAgIC8vCisgICAgICAgIC8vIEJFR0lOIGdlbmVyYXRlZCBjb2RlCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9DKQorICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkNJUEhFUiAtIFRoZSBzZWxlY3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkNJUEhFUiAtIEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0NJUEhFUl9BTExPQ19GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQ0lQSEVSIC0gRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkNJUEhFUiAtIElucHV0IGRhdGEgY29udGFpbnMgaW52YWxpZCBwYWRkaW5nIGFuZCBpcyByZWplY3RlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJDSVBIRVIgLSBEZWNyeXB0aW9uIG9mIGJsb2NrIHJlcXVpcmVzIGEgZnVsbCBibG9jayIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQ0lQSEVSIC0gQXV0aGVudGljYXRpb24gZmFpbGVkIChmb3IgQUVBRCBtb2RlcykiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfQ09OVEVYVCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJDSVBIRVIgLSBUaGUgY29udGV4dCBpcyBpbnZhbGlkLCBlZyBiZWNhdXNlIGl0IHdhcyBmcmVlKCllZCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpCisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfREhNX0JBRF9JTlBVVF9EQVRBKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkRITSAtIEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0RITV9SRUFEX1BBUkFNU19GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiREhNIC0gUmVhZGluZyBvZiB0aGUgREhNIHBhcmFtZXRlcnMgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0RITV9NQUtFX1BBUkFNU19GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiREhNIC0gTWFraW5nIG9mIHRoZSBESE0gcGFyYW1ldGVycyBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfREhNX1JFQURfUFVCTElDX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJESE0gLSBSZWFkaW5nIG9mIHRoZSBwdWJsaWMgdmFsdWVzIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ESE1fTUFLRV9QVUJMSUNfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkRITSAtIE1ha2luZyBvZiB0aGUgcHVibGljIHZhbHVlIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ESE1fQ0FMQ19TRUNSRVRfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkRITSAtIENhbGN1bGF0aW9uIG9mIHRoZSBESE0gc2VjcmV0IGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ESE1fSU5WQUxJRF9GT1JNQVQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiREhNIC0gVGhlIEFTTi4xIGRhdGEgaXMgbm90IGZvcm1hdHRlZCBjb3JyZWN0bHkiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfREhNX0FMTE9DX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJESE0gLSBBbGxvY2F0aW9uIG9mIG1lbW9yeSBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfREhNX0ZJTEVfSU9fRVJST1IpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiREhNIC0gUmVhZC93cml0ZSBvZiBmaWxlIGZhaWxlZCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0RITV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVDUCAtIEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVDUCAtIFRoZSBidWZmZXIgaXMgdG9vIHNtYWxsIHRvIHdyaXRlIHRvIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVDUCAtIFJlcXVlc3RlZCBjdXJ2ZSBub3QgYXZhaWxhYmxlIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0VDUF9WRVJJRllfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVDUCAtIFRoZSBzaWduYXR1cmUgaXMgbm90IHZhbGlkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0VDUF9BTExPQ19GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiRUNQIC0gTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0VDUF9SQU5ET01fRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVDUCAtIEdlbmVyYXRpb24gb2YgcmFuZG9tIHZhbHVlLCBzdWNoIGFzIChlcGhlbWVyYWwpIGtleSwgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJFQ1AgLSBJbnZhbGlkIHByaXZhdGUgb3IgcHVibGljIGtleSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9FQ1BfU0lHX0xFTl9NSVNNQVRDSCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJFQ1AgLSBTaWduYXR1cmUgaXMgdmFsaWQgYnV0IHNob3J0ZXIgdGhhbiB0aGUgdXNlci1zdXBwbGllZCBsZW5ndGgiICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTURfRkVBVFVSRV9VTkFWQUlMQUJMRSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJNRCAtIFRoZSBzZWxlY3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiTUQgLSBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbiIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9NRF9BTExPQ19GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiTUQgLSBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX01EX0ZJTEVfSU9fRVJST1IpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiTUQgLSBPcGVuaW5nIG9yIHJlYWRpbmcgb2YgZmlsZSBmYWlsZWQiICk7CisjZW5kaWYgLyogTUJFRFRMU19NRF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpIHx8IGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBFTSAtIE5vIFBFTSBoZWFkZXIgb3IgZm9vdGVyIGZvdW5kIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BFTV9JTlZBTElEX0RBVEEpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEVNIC0gUEVNIHN0cmluZyBpcyBub3QgYXMgZXhwZWN0ZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEVNX0FMTE9DX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQRU0gLSBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BFTV9JTlZBTElEX0VOQ19JVikgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQRU0gLSBSU0EgSVYgaXMgbm90IGluIGhleC1mb3JtYXQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEVNX1VOS05PV05fRU5DX0FMRykgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQRU0gLSBVbnN1cHBvcnRlZCBrZXkgZW5jcnlwdGlvbiBhbGdvcml0aG0iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEVNX1BBU1NXT1JEX1JFUVVJUkVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBFTSAtIFByaXZhdGUga2V5IHBhc3N3b3JkIGNhbid0IGJlIGVtcHR5IiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BFTV9QQVNTV09SRF9NSVNNQVRDSCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQRU0gLSBHaXZlbiBwcml2YXRlIGtleSBwYXNzd29yZCBkb2VzIG5vdCBhbGxvdyBmb3IgY29ycmVjdCBkZWNyeXB0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BFTV9GRUFUVVJFX1VOQVZBSUxBQkxFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBFTSAtIFVuYXZhaWxhYmxlIGZlYXR1cmUsIGUuZy4gaGFzaGluZy9lbmNyeXB0aW9uIGNvbWJpbmF0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BFTV9CQURfSU5QVVRfREFUQSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQRU0gLSBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbiIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9QQVJTRV9DIHx8IE1CRURUTFNfUEVNX1dSSVRFX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19DKQorICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLX0FMTE9DX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQSyAtIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENIKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gVHlwZSBtaXNtYXRjaCwgZWcgYXR0ZW1wdCB0byBlbmNyeXB0IHdpdGggYW4gRUNEU0Ega2V5IiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtfRklMRV9JT19FUlJPUikgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQSyAtIFJlYWQvd3JpdGUgb2YgZmlsZSBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfVkVSU0lPTikgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQSyAtIFVuc3VwcG9ydGVkIGtleSB2ZXJzaW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQSyAtIEludmFsaWQga2V5IHRhZyBvciB2YWx1ZSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS19VTktOT1dOX1BLX0FMRykgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQSyAtIEtleSBhbGdvcml0aG0gaXMgdW5zdXBwb3J0ZWQgKG9ubHkgUlNBIGFuZCBFQyBhcmUgc3VwcG9ydGVkKSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS19QQVNTV09SRF9SRVFVSVJFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQSyAtIFByaXZhdGUga2V5IHBhc3N3b3JkIGNhbid0IGJlIGVtcHR5IiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENIKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gR2l2ZW4gcHJpdmF0ZSBrZXkgcGFzc3dvcmQgZG9lcyBub3QgYWxsb3cgZm9yIGNvcnJlY3QgZGVjcnlwdGlvbiIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQSyAtIFRoZSBwdWJrZXkgdGFnIG9yIHZhbHVlIGlzIGludmFsaWQgKG9ubHkgUlNBIGFuZCBFQyBhcmUgc3VwcG9ydGVkKSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS19JTlZBTElEX0FMRykgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQSyAtIFRoZSBhbGdvcml0aG0gdGFnIG9yIHZhbHVlIGlzIGludmFsaWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtfVU5LTk9XTl9OQU1FRF9DVVJWRSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQSyAtIEVsbGlwdGljIGN1cnZlIGlzIHVuc3VwcG9ydGVkIChvbmx5IE5JU1QgY3VydmVzIGFyZSBzdXBwb3J0ZWQpIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLX0ZFQVRVUkVfVU5BVkFJTEFCTEUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEsgLSBVbmF2YWlsYWJsZSBmZWF0dXJlLCBlLmcuIFJTQSBkaXNhYmxlZCBmb3IgUlNBIGtleSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS19TSUdfTEVOX01JU01BVENIKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gVGhlIHNpZ25hdHVyZSBpcyB2YWxpZCBidXQgaXRzIGxlbmd0aCBpcyBsZXNzIHRoYW4gZXhwZWN0ZWQiICk7CisjZW5kaWYgLyogTUJFRFRMU19QS19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzEyX0MpCisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtDUzEyX0JBRF9JTlBVVF9EQVRBKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLQ1MxMiAtIEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLQ1MxMl9GRUFUVVJFX1VOQVZBSUxBQkxFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLQ1MxMiAtIEZlYXR1cmUgbm90IGF2YWlsYWJsZSwgZS5nLiB1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIHNjaGVtZSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS0NTMTJfUEJFX0lOVkFMSURfRk9STUFUKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLQ1MxMiAtIFBCRSBBU04uMSBkYXRhIG5vdCBhcyBleHBlY3RlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS0NTMTJfUEFTU1dPUkRfTUlTTUFUQ0gpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEtDUzEyIC0gR2l2ZW4gcHJpdmF0ZSBrZXkgcGFzc3dvcmQgZG9lcyBub3QgYWxsb3cgZm9yIGNvcnJlY3QgZGVjcnlwdGlvbiIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxMl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzVfQykKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS0NTNV9CQURfSU5QVVRfREFUQSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQS0NTNSAtIEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLQ1M1IC0gVW5leHBlY3RlZCBBU04uMSBkYXRhIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLQ1M1X0ZFQVRVUkVfVU5BVkFJTEFCTEUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEtDUzUgLSBSZXF1ZXN0ZWQgZW5jcnlwdGlvbiBvciBkaWdlc3QgYWxnIG5vdCBhdmFpbGFibGUiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtDUzVfUEFTU1dPUkRfTUlTTUFUQ0gpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEtDUzUgLSBHaXZlbiBwcml2YXRlIGtleSBwYXNzd29yZCBkb2VzIG5vdCBhbGxvdyBmb3IgY29ycmVjdCBkZWNyeXB0aW9uIiApOworI2VuZGlmIC8qIE1CRURUTFNfUEtDUzVfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJSU0EgLSBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbiIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlJTQSAtIElucHV0IGRhdGEgY29udGFpbnMgaW52YWxpZCBwYWRkaW5nIGFuZCBpcyByZWplY3RlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9SU0FfS0VZX0dFTl9GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUlNBIC0gU29tZXRoaW5nIGZhaWxlZCBkdXJpbmcgZ2VuZXJhdGlvbiBvZiBhIGtleSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJSU0EgLSBLZXkgZmFpbGVkIHRvIHBhc3MgdGhlIGxpYnJhcnkncyB2YWxpZGl0eSBjaGVjayIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9SU0FfUFVCTElDX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJSU0EgLSBUaGUgcHVibGljIGtleSBvcGVyYXRpb24gZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1JTQV9QUklWQVRFX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJSU0EgLSBUaGUgcHJpdmF0ZSBrZXkgb3BlcmF0aW9uIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJSU0EgLSBUaGUgUEtDUyMxIHZlcmlmaWNhdGlvbiBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUlNBX09VVFBVVF9UT09fTEFSR0UpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUlNBIC0gVGhlIG91dHB1dCBidWZmZXIgZm9yIGRlY3J5cHRpb24gaXMgbm90IGxhcmdlIGVub3VnaCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9SU0FfUk5HX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJSU0EgLSBUaGUgcmFuZG9tIGdlbmVyYXRvciBmYWlsZWQgdG8gZ2VuZXJhdGUgbm9uLXplcm9zIiApOworI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpCisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gVGhlIHJlcXVlc3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQykgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gQW4gaW52YWxpZCBTU0wgcmVjb3JkIHdhcyByZWNlaXZlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQ09OTl9FT0YpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gVGhlIGNvbm5lY3Rpb24gaW5kaWNhdGVkIGFuIEVPRiIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfVU5LTk9XTl9DSVBIRVIpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gQW4gdW5rbm93biBjaXBoZXIgd2FzIHJlY2VpdmVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9OT19DSVBIRVJfQ0hPU0VOKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFRoZSBzZXJ2ZXIgaGFzIG5vIGNpcGhlcnN1aXRlcyBpbiBjb21tb24gd2l0aCB0aGUgY2xpZW50IiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9OT19STkcpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gTm8gUk5HIHdhcyBwcm92aWRlZCB0byB0aGUgU1NMIG1vZHVsZSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfTk9fQ0xJRU5UX0NFUlRJRklDQVRFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIE5vIGNsaWVudCBjZXJ0aWZpY2F0aW9uIHJlY2VpdmVkIGZyb20gdGhlIGNsaWVudCwgYnV0IHJlcXVpcmVkIGJ5IHRoZSBhdXRoZW50aWNhdGlvbiBtb2RlIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9DRVJUSUZJQ0FURV9UT09fTEFSR0UpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gT3VyIG93biBjZXJ0aWZpY2F0ZShzKSBpcy9hcmUgdG9vIGxhcmdlIHRvIHNlbmQgaW4gYW4gU1NMIG1lc3NhZ2UiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFRoZSBvd24gY2VydGlmaWNhdGUgaXMgbm90IHNldCwgYnV0IG5lZWRlZCBieSB0aGUgc2VydmVyIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9QUklWQVRFX0tFWV9SRVFVSVJFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBUaGUgb3duIHByaXZhdGUga2V5IG9yIHByZS1zaGFyZWQga2V5IGlzIG5vdCBzZXQsIGJ1dCBuZWVkZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0NBX0NIQUlOX1JFUVVJUkVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIE5vIENBIENoYWluIGlzIHNldCwgYnV0IHJlcXVpcmVkIHRvIG9wZXJhdGUiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBBbiB1bmV4cGVjdGVkIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gb3VyIHBlZXIiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0ZBVEFMX0FMRVJUX01FU1NBR0UpICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBBIGZhdGFsIGFsZXJ0IG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gb3VyIHBlZXIiICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfUEVFUl9WRVJJRllfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiBvdXIgcGVlciBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX1BFRVJfQ0xPU0VfTk9USUZZKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFRoZSBwZWVyIG5vdGlmaWVkIHVzIHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgZ29pbmcgdG8gYmUgY2xvc2VkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFByb2Nlc3Npbmcgb2YgdGhlIENsaWVudEhlbGxvIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTykgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBQcm9jZXNzaW5nIG9mIHRoZSBTZXJ2ZXJIZWxsbyBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlUmVxdWVzdCBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFByb2Nlc3Npbmcgb2YgdGhlIFNlcnZlcktleUV4Y2hhbmdlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMT19ET05FKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFByb2Nlc3Npbmcgb2YgdGhlIFNlcnZlckhlbGxvRG9uZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFByb2Nlc3Npbmcgb2YgdGhlIENsaWVudEtleUV4Y2hhbmdlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfUlApICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgQ2xpZW50S2V5RXhjaGFuZ2UgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIGluIERITSAvIEVDREggUmVhZCBQdWJsaWMiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX0NTKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFByb2Nlc3Npbmcgb2YgdGhlIENsaWVudEtleUV4Y2hhbmdlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCBpbiBESE0gLyBFQ0RIIENhbGN1bGF0ZSBTZWNyZXQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9WRVJJRlkpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGVWZXJpZnkgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0hBTkdFX0NJUEhFUl9TUEVDKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFByb2Nlc3Npbmcgb2YgdGhlIENoYW5nZUNpcGhlclNwZWMgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9CQURfSFNfRklOSVNIRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgRmluaXNoZWQgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZ1bmN0aW9uIHJldHVybmVkIHdpdGggZXJyb3IiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBTExUSFJPVUdIKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIEhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmdW5jdGlvbiBza2lwcGVkIC8gbGVmdCBhbG9uZSBkYXRhIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9DT01QUkVTU0lPTl9GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgY29tcHJlc3Npb24gLyBkZWNvbXByZXNzaW9uIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1BST1RPQ09MX1ZFUlNJT04pICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gSGFuZHNoYWtlIHByb3RvY29sIG5vdCB3aXRoaW4gbWluL21heCBib3VuZGFyaWVzIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9CQURfSFNfTkVXX1NFU1NJT05fVElDS0VUKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFByb2Nlc3Npbmcgb2YgdGhlIE5ld1Nlc3Npb25UaWNrZXQgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9TRVNTSU9OX1RJQ0tFVF9FWFBJUkVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFNlc3Npb24gdGlja2V0IGhhcyBleHBpcmVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9QS19UWVBFX01JU01BVENIKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFB1YmxpYyBrZXkgdHlwZSBtaXNtYXRjaCAoZWcsIGFza2VkIGZvciBSU0Ega2V5IGV4Y2hhbmdlIGFuZCBwcmVzZW50ZWQgRUMga2V5KSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfVU5LTk9XTl9JREVOVElUWSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBVbmtub3duIGlkZW50aXR5IHJlY2VpdmVkIChlZywgUFNLIGlkZW50aXR5KSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gSW50ZXJuYWwgZXJyb3IgKGVnLCB1bmV4cGVjdGVkIGZhaWx1cmUgaW4gbG93ZXItbGV2ZWwgbW9kdWxlKSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQ09VTlRFUl9XUkFQUElORykgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBBIGNvdW50ZXIgd291bGQgd3JhcCAoZWcsIHRvbyBtYW55IG1lc3NhZ2VzIGV4Y2hhbmdlZCkiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX1dBSVRJTkdfU0VSVkVSX0hFTExPX1JFTkVHTykgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBVbmV4cGVjdGVkIG1lc3NhZ2UgYXQgU2VydmVySGVsbG8gaW4gcmVuZWdvdGlhdGlvbiIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfSEVMTE9fVkVSSUZZX1JFUVVJUkVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIERUTFMgY2xpZW50IG11c3QgcmV0cnkgZm9yIGhlbGxvIHZlcmlmaWNhdGlvbiIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBBIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gcmVjZWl2ZSBvciB3cml0ZSBhIG1lc3NhZ2UiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX05PX1VTQUJMRV9DSVBIRVJTVUlURSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBOb25lIG9mIHRoZSBjb21tb24gY2lwaGVyc3VpdGVzIGlzIHVzYWJsZSAoZWcsIG5vIHN1aXRhYmxlIGNlcnRpZmljYXRlLCBzZWUgZGVidWcgbWVzc2FnZXMpIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gQ29ubmVjdGlvbiByZXF1aXJlcyBhIHJlYWQgY2FsbCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBDb25uZWN0aW9uIHJlcXVpcmVzIGEgd3JpdGUgY2FsbCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfVElNRU9VVCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBUaGUgb3BlcmF0aW9uIHRpbWVkIG91dCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQ0xJRU5UX1JFQ09OTkVDVCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBUaGUgY2xpZW50IGluaXRpYXRlZCBhIHJlY29ubmVjdCBmcm9tIHRoZSBzYW1lIHBvcnQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfUkVDT1JEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFJlY29yZCBoZWFkZXIgbG9va3MgdmFsaWQgYnV0IGlzIG5vdCBleHBlY3RlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfTk9OX0ZBVEFMKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFRoZSBhbGVydCBtZXNzYWdlIHJlY2VpdmVkIGluZGljYXRlcyBhIG5vbi1mYXRhbCBlcnJvciIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9WRVJJRllfSEFTSCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBDb3VsZG4ndCBzZXQgdGhlIGhhc2ggZm9yIHZlcmlmeWluZyBDZXJ0aWZpY2F0ZVZlcmlmeSIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9UTFNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfVVNFX0MpIHx8IGRlZmluZWQoTUJFRFRMU19YNTA5X0NSRUFURV9DKQorICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfRkVBVFVSRV9VTkFWQUlMQUJMRSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYNTA5IC0gVW5hdmFpbGFibGUgZmVhdHVyZSwgZS5nLiBSU0EgaGFzaGluZy9lbmNyeXB0aW9uIGNvbWJpbmF0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9PSUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFJlcXVlc3RlZCBPSUQgaXMgdW5rbm93biIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlg1MDkgLSBUaGUgQ1JUL0NSTC9DU1IgZm9ybWF0IGlzIGludmFsaWQsIGUuZy4gZGlmZmVyZW50IHR5cGUgZXhwZWN0ZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04pICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFRoZSBDUlQvQ1JML0NTUiB2ZXJzaW9uIGVsZW1lbnQgaXMgaW52YWxpZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0VSSUFMKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlg1MDkgLSBUaGUgc2VyaWFsIHRhZyBvciB2YWx1ZSBpcyBpbnZhbGlkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFRoZSBhbGdvcml0aG0gdGFnIG9yIHZhbHVlIGlzIGludmFsaWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFRoZSBuYW1lIHRhZyBvciB2YWx1ZSBpcyBpbnZhbGlkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlg1MDkgLSBUaGUgZGF0ZSB0YWcgb3IgdmFsdWUgaXMgaW52YWxpZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0lHTkFUVVJFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlg1MDkgLSBUaGUgc2lnbmF0dXJlIHRhZyBvciB2YWx1ZSBpbnZhbGlkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlg1MDkgLSBUaGUgZXh0ZW5zaW9uIHRhZyBvciB2YWx1ZSBpcyBpbnZhbGlkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlg1MDkgLSBDUlQvQ1JML0NTUiBoYXMgYW4gdW5zdXBwb3J0ZWQgdmVyc2lvbiBudW1iZXIiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1NJR19BTEcpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFNpZ25hdHVyZSBhbGdvcml0aG0gKG9pZCkgaXMgdW5zdXBwb3J0ZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9TSUdfTUlTTUFUQ0gpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFNpZ25hdHVyZSBhbGdvcml0aG1zIGRvIG5vdCBtYXRjaC4gKHNlZSBcXGMgOjptYmVkdGxzX3g1MDlfY3J0IHNpZ19vaWQpIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlg1MDkgLSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZmFpbGVkLCBlLmcuIENSTCwgQ0Egb3Igc2lnbmF0dXJlIGNoZWNrIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9YNTA5X0NFUlRfVU5LTk9XTl9GT1JNQVQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIEZvcm1hdCBub3QgcmVjb2duaXplZCBhcyBERVIgb3IgUEVNIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIElucHV0IGludmFsaWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIEFsbG9jYXRpb24gb2YgbWVtb3J5IGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9YNTA5X0ZJTEVfSU9fRVJST1IpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFJlYWQvd3JpdGUgb2YgZmlsZSBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9CVUZGRVJfVE9PX1NNQUxMKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlg1MDkgLSBEZXN0aW5hdGlvbiBidWZmZXIgaXMgdG9vIHNtYWxsIiApOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9VU0VfQyB8fCBNQkVEVExTX1g1MDlfQ1JFQVRFX0MgKi8KKyAgICAgICAgLy8gRU5EIGdlbmVyYXRlZCBjb2RlCisKKyAgICAgICAgaWYoIHN0cmxlbiggYnVmICkgPT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlVOS05PV04gRVJST1IgQ09ERSAoJTA0WCkiLCB1c2VfcmV0ICk7CisgICAgfQorCisgICAgdXNlX3JldCA9IHJldCAmIH4weEZGODA7CisKKyAgICBpZiggdXNlX3JldCA9PSAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgaGlnaCBsZXZlbCBjb2RlIGlzIHByZXNlbnQsIG1ha2UgYSBjb25jYXRlbmF0aW9uIGJldHdlZW4gYm90aAorICAgIC8vIGVycm9yIHN0cmluZ3MuCisgICAgLy8KKyAgICBsZW4gPSBzdHJsZW4oIGJ1ZiApOworCisgICAgaWYoIGxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgaWYoIGJ1ZmxlbiAtIGxlbiA8IDUgKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiArIGxlbiwgYnVmbGVuIC0gbGVuLCAiIDogIiApOworCisgICAgICAgIGJ1ZiArPSBsZW4gKyAzOworICAgICAgICBidWZsZW4gLT0gbGVuICsgMzsKKyAgICB9CisKKyAgICAvLyBMb3cgbGV2ZWwgZXJyb3IgY29kZXMKKyAgICAvLworICAgIC8vIEJFR0lOIGdlbmVyYXRlZCBjb2RlCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQUVTX0lOVkFMSURfS0VZX0xFTkdUSCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkFFUyAtIEludmFsaWQga2V5IGxlbmd0aCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0lOUFVUX0xFTkdUSCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkFFUyAtIEludmFsaWQgZGF0YSBpbnB1dCBsZW5ndGgiICk7CisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FTTjFfUEFSU0VfQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJBU04xIC0gT3V0IG9mIGRhdGEgd2hlbiBwYXJzaW5nIGFuIEFTTjEgZGF0YSBzdHJ1Y3R1cmUiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQVNOMSAtIEFTTjEgdGFnIHdhcyBvZiBhbiB1bmV4cGVjdGVkIHZhbHVlIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkFTTjEgLSBFcnJvciB3aGVuIHRyeWluZyB0byBkZXRlcm1pbmUgdGhlIGxlbmd0aCBvciBpbnZhbGlkIGxlbmd0aCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQVNOMSAtIEFjdHVhbCBsZW5ndGggZGlmZmVycyBmcm9tIGV4cGVjdGVkIGxlbmd0aCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9EQVRBKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQVNOMSAtIERhdGEgaXMgaW52YWxpZC4gKG5vdCB1c2VkKSIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0FTTjFfQUxMT0NfRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQVNOMSAtIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkFTTjEgLSBCdWZmZXIgdG9vIHNtYWxsIHdoZW4gd3JpdGluZyBBU04uMSBkYXRhIHN0cnVjdHVyZSIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0FTTjFfUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0JBU0U2NF9DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJCQVNFNjQgLSBPdXRwdXQgYnVmZmVyIHRvbyBzbWFsbCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUikgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkJBU0U2NCAtIEludmFsaWQgY2hhcmFjdGVyIGluIGlucHV0IiApOworI2VuZGlmIC8qIE1CRURUTFNfQkFTRTY0X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX01QSV9GSUxFX0lPX0VSUk9SKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQklHTlVNIC0gQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gYSBmaWxlIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQklHTlVNIC0gQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24iICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9NUElfSU5WQUxJRF9DSEFSQUNURVIpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJCSUdOVU0gLSBUaGVyZSBpcyBhbiBpbnZhbGlkIGNoYXJhY3RlciBpbiB0aGUgZGlnaXQgc3RyaW5nIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTVBJX0JVRkZFUl9UT09fU01BTEwpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJCSUdOVU0gLSBUaGUgYnVmZmVyIGlzIHRvbyBzbWFsbCB0byB3cml0ZSB0byIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRSkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkJJR05VTSAtIFRoZSBpbnB1dCBhcmd1bWVudHMgYXJlIG5lZ2F0aXZlIG9yIHJlc3VsdCBpbiBpbGxlZ2FsIG91dHB1dCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX01QSV9ESVZJU0lPTl9CWV9aRVJPKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQklHTlVNIC0gVGhlIGlucHV0IGFyZ3VtZW50IGZvciBkaXZpc2lvbiBpcyB6ZXJvLCB3aGljaCBpcyBub3QgYWxsb3dlZCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRSkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkJJR05VTSAtIFRoZSBpbnB1dCBhcmd1bWVudHMgYXJlIG5vdCBhY2NlcHRhYmxlIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkJJR05VTSAtIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQkxPV0ZJU0hfQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfS0VZX0xFTkdUSCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkJMT1dGSVNIIC0gSW52YWxpZCBrZXkgbGVuZ3RoIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9JTlBVVF9MRU5HVEgpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJCTE9XRklTSCAtIEludmFsaWQgZGF0YSBpbnB1dCBsZW5ndGgiICk7CisjZW5kaWYgLyogTUJFRFRMU19CTE9XRklTSF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfS0VZX0xFTkdUSCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkNBTUVMTElBIC0gSW52YWxpZCBrZXkgbGVuZ3RoIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQ0FNRUxMSUFfSU5WQUxJRF9JTlBVVF9MRU5HVEgpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJDQU1FTExJQSAtIEludmFsaWQgZGF0YSBpbnB1dCBsZW5ndGgiICk7CisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQ0NNIC0gQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24iICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DQ01fQVVUSF9GQUlMRUQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJDQ00gLSBBdXRoZW50aWNhdGVkIGRlY3J5cHRpb24gZmFpbGVkIiApOworI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQ1RSX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQ1RSX0RSQkcgLSBUaGUgZW50cm9weSBzb3VyY2UgZmFpbGVkIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQ1RSX0RSQkdfUkVRVUVTVF9UT09fQklHKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQ1RSX0RSQkcgLSBUb28gbWFueSByYW5kb20gcmVxdWVzdGVkIGluIHNpbmdsZSBjYWxsIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQ1RSX0RSQkdfSU5QVVRfVE9PX0JJRykgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkNUUl9EUkJHIC0gSW5wdXQgdG9vIGxhcmdlIChFbnRyb3B5ICsgYWRkaXRpb25hbCkiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DVFJfRFJCR19GSUxFX0lPX0VSUk9SKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQ1RSX0RSQkcgLSBSZWFkL3dyaXRlIGVycm9yIGluIGZpbGUiICk7CisjZW5kaWYgLyogTUJFRFRMU19DVFJfRFJCR19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ERVNfSU5WQUxJRF9JTlBVVF9MRU5HVEgpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJERVMgLSBUaGUgZGF0YSBpbnB1dCBoYXMgYW4gaW52YWxpZCBsZW5ndGgiICk7CisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVOVFJPUFkgLSBDcml0aWNhbCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRU5UUk9QWV9NQVhfU09VUkNFUykgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVOVFJPUFkgLSBObyBtb3JlIHNvdXJjZXMgY2FuIGJlIGFkZGVkIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRU5UUk9QWV9OT19TT1VSQ0VTX0RFRklORUQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJFTlRST1BZIC0gTm8gc291cmNlcyBoYXZlIGJlZW4gYWRkZWQgdG8gcG9sbCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0VOVFJPUFlfTk9fU1RST05HX1NPVVJDRSkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVOVFJPUFkgLSBObyBzdHJvbmcgc291cmNlcyBoYXZlIGJlZW4gYWRkZWQgdG8gcG9sbCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0VOVFJPUFlfRklMRV9JT19FUlJPUikgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVOVFJPUFkgLSBSZWFkL3dyaXRlIGVycm9yIGluIGZpbGUiICk7CisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0dDTV9BVVRIX0ZBSUxFRCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkdDTSAtIEF1dGhlbnRpY2F0ZWQgZGVjcnlwdGlvbiBmYWlsZWQiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9HQ01fQkFEX0lOUFVUKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiR0NNIC0gQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24iICk7CisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0hNQUNfRFJCR19DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfSE1BQ19EUkJHX1JFUVVFU1RfVE9PX0JJRykgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkhNQUNfRFJCRyAtIFRvbyBtYW55IHJhbmRvbSByZXF1ZXN0ZWQgaW4gc2luZ2xlIGNhbGwiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ITUFDX0RSQkdfSU5QVVRfVE9PX0JJRykgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkhNQUNfRFJCRyAtIElucHV0IHRvbyBsYXJnZSAoRW50cm9weSArIGFkZGl0aW9uYWwpIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJITUFDX0RSQkcgLSBSZWFkL3dyaXRlIGVycm9yIGluIGZpbGUiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ITUFDX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiSE1BQ19EUkJHIC0gVGhlIGVudHJvcHkgc291cmNlIGZhaWxlZCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0hNQUNfRFJCR19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTkVUX0MpCisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ORVRfU09DS0VUX0ZBSUxFRCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIk5FVCAtIEZhaWxlZCB0byBvcGVuIGEgc29ja2V0IiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTkVUX0NPTk5FQ1RfRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiTkVUIC0gVGhlIGNvbm5lY3Rpb24gdG8gdGhlIGdpdmVuIHNlcnZlciAvIHBvcnQgZmFpbGVkIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTkVUX0JJTkRfRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiTkVUIC0gQmluZGluZyBvZiB0aGUgc29ja2V0IGZhaWxlZCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX05FVF9MSVNURU5fRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiTkVUIC0gQ291bGQgbm90IGxpc3RlbiBvbiB0aGUgc29ja2V0IiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTkVUX0FDQ0VQVF9GQUlMRUQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJORVQgLSBDb3VsZCBub3QgYWNjZXB0IHRoZSBpbmNvbWluZyBjb25uZWN0aW9uIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTkVUX1JFQ1ZfRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiTkVUIC0gUmVhZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzb2NrZXQgZmFpbGVkIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTkVUX1NFTkRfRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiTkVUIC0gU2VuZGluZyBpbmZvcm1hdGlvbiB0aHJvdWdoIHRoZSBzb2NrZXQgZmFpbGVkIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTkVUX0NPTk5fUkVTRVQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJORVQgLSBDb25uZWN0aW9uIHdhcyByZXNldCBieSBwZWVyIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTkVUX1VOS05PV05fSE9TVCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIk5FVCAtIEZhaWxlZCB0byBnZXQgYW4gSVAgYWRkcmVzcyBmb3IgdGhlIGdpdmVuIGhvc3RuYW1lIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTkVUX0JVRkZFUl9UT09fU01BTEwpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJORVQgLSBCdWZmZXIgaXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIGRhdGEiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ORVRfSU5WQUxJRF9DT05URVhUKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiTkVUIC0gVGhlIGNvbnRleHQgaXMgaW52YWxpZCwgZWcgYmVjYXVzZSBpdCB3YXMgZnJlZSgpZWQiICk7CisjZW5kaWYgLyogTUJFRFRMU19ORVRfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX09JRF9DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIk9JRCAtIE9JRCBpcyBub3QgZm91bmQiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9PSURfQlVGX1RPT19TTUFMTCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIk9JRCAtIG91dHB1dCBidWZmZXIgaXMgdG9vIHNtYWxsIiApOworI2VuZGlmIC8qIE1CRURUTFNfT0lEX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QQURMT0NLX0MpCisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QQURMT0NLX0RBVEFfTUlTQUxJR05FRCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBBRExPQ0sgLSBJbnB1dCBkYXRhIHNob3VsZCBiZSBhbGlnbmVkIiApOworI2VuZGlmIC8qIE1CRURUTFNfUEFETE9DS19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9USFJFQURJTkdfRkVBVFVSRV9VTkFWQUlMQUJMRSkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlRIUkVBRElORyAtIFRoZSBzZWxlY3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9USFJFQURJTkdfQkFEX0lOUFVUX0RBVEEpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJUSFJFQURJTkcgLSBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbiIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUikgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlRIUkVBRElORyAtIExvY2tpbmcgLyB1bmxvY2tpbmcgLyBmcmVlIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUiICk7CisjZW5kaWYgLyogTUJFRFRMU19USFJFQURJTkdfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1hURUFfQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1hURUFfSU5WQUxJRF9JTlBVVF9MRU5HVEgpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYVEVBIC0gVGhlIGRhdGEgaW5wdXQgaGFzIGFuIGludmFsaWQgbGVuZ3RoIiApOworI2VuZGlmIC8qIE1CRURUTFNfWFRFQV9DICovCisgICAgLy8gRU5EIGdlbmVyYXRlZCBjb2RlCisKKyAgICBpZiggc3RybGVuKCBidWYgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJVTktOT1dOIEVSUk9SIENPREUgKCUwNFgpIiwgdXNlX3JldCApOworfQorCisjZWxzZSAvKiBNQkVEVExTX0VSUk9SX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWSkKKworLyoKKyAqIFByb3ZpZGUgYW4gbm9uLWZ1bmN0aW9uIGluIGNhc2UgTUJFRFRMU19FUlJPUl9DIGlzIG5vdCBkZWZpbmVkCisgKi8KK3ZvaWQgbWJlZHRsc19zdHJlcnJvciggaW50IHJldCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuICkKK3sKKyAgICAoKHZvaWQpIHJldCk7CisKKyAgICBpZiggYnVmbGVuID4gMCApCisgICAgICAgIGJ1ZlswXSA9ICdcMCc7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0VSUk9SX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2djbS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZ2NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyMTBjNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2djbS5jCkBAIC0wLDAgKzEsOTUyIEBACisvKgorICogIE5JU1QgU1A4MDAtMzhEIGNvbXBsaWFudCBHQ00gaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoKKyAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9uaXN0cHVicy84MDAtMzhEL1NQLTgwMC0zOEQucGRmCisgKgorICogU2VlIGFsc286CisgKiBbTUdWXSBodHRwOi8vY3NyYy5uaXN0Lmdvdi9ncm91cHMvU1QvdG9vbGtpdC9CQ00vZG9jdW1lbnRzL3Byb3Bvc2VkbW9kZXMvZ2NtL2djbS1yZXZpc2VkLXNwZWMucGRmCisgKgorICogV2UgdXNlIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGFzIFNob3VwJ3MgbWV0aG9kIHdpdGggNC1iaXQgdGFibGVzIGluCisgKiBbTUdWXSA0LjEsIHBwLiAxMi0xMywgdG8gZW5oYW5jZSBzcGVlZCB3aXRob3V0IHVzaW5nIHRvbyBtdWNoIG1lbW9yeS4KKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9nY20uaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU05JX0MpCisjaW5jbHVkZSAibWJlZHRscy9hZXNuaS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKSAmJiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBwcmludGYKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAmJiBNQkVEVExTX0FFU19DICovCisKKy8qCisgKiAzMi1iaXQgaW50ZWdlciBtYW5pcHVsYXRpb24gbWFjcm9zIChiaWcgZW5kaWFuKQorICovCisjaWZuZGVmIEdFVF9VSU5UMzJfQkUKKyNkZWZpbmUgR0VUX1VJTlQzMl9CRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKG4pID0gKCAodWludDMyX3QpIChiKVsoaSkgICAgXSA8PCAyNCApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDFdIDw8IDE2ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMl0gPDwgIDggKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAzXSAgICAgICApOyAgICAgICAgICAgIFwKK30KKyNlbmRpZgorCisjaWZuZGVmIFBVVF9VSU5UMzJfQkUKKyNkZWZpbmUgUFVUX1VJTlQzMl9CRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGIpWyhpKSAgICBdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDI0ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgMV0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMTYgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAgOCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDNdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pICAgICAgICk7ICAgICAgIFwKK30KKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogSW5pdGlhbGl6ZSBhIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX2djbV9pbml0KCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKSApOworfQorCisvKgorICogUHJlY29tcHV0ZSBzbWFsbCBtdWx0aXBsZXMgb2YgSCwgdGhhdCBpcyBzZXQKKyAqICAgICAgSEhbaV0gfHwgSExbaV0gPSBIIHRpbWVzIGksCisgKiB3aGVyZSBpIGlzIHNlZW4gYXMgYSBmaWVsZCBlbGVtZW50IGFzIGluIFtNR1ZdLCBpZSBoaWdoLW9yZGVyIGJpdHMKKyAqIGNvcnJlc3BvbmQgdG8gbG93IHBvd2VycyBvZiBQLiBUaGUgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGUgc2FtZSB3YXksIHRoYXQKKyAqIGlzIHRoZSBoaWdoLW9yZGVyIGJpdCBvZiBISCBjb3JyZXNwb25kcyB0byBQXjAgYW5kIHRoZSBsb3ctb3JkZXIgYml0IG9mIEhMCisgKiBjb3JyZXNwb25kcyB0byBQXjEyNy4KKyAqLworc3RhdGljIGludCBnY21fZ2VuX3RhYmxlKCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHggKQoreworICAgIGludCByZXQsIGksIGo7CisgICAgdWludDY0X3QgaGksIGxvOworICAgIHVpbnQ2NF90IHZsLCB2aDsKKyAgICB1bnNpZ25lZCBjaGFyIGhbMTZdOworICAgIHNpemVfdCBvbGVuID0gMDsKKworICAgIG1lbXNldCggaCwgMCwgMTYgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjdHgtPmNpcGhlcl9jdHgsIGgsIDE2LCBoLCAmb2xlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAvKiBwYWNrIGggYXMgdHdvIDY0LWJpdHMgaW50cywgYmlnLWVuZGlhbiAqLworICAgIEdFVF9VSU5UMzJfQkUoIGhpLCBoLCAgMCAgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBsbywgaCwgIDQgICk7CisgICAgdmggPSAodWludDY0X3QpIGhpIDw8IDMyIHwgbG87CisKKyAgICBHRVRfVUlOVDMyX0JFKCBoaSwgaCwgIDggICk7CisgICAgR0VUX1VJTlQzMl9CRSggbG8sIGgsICAxMiApOworICAgIHZsID0gKHVpbnQ2NF90KSBoaSA8PCAzMiB8IGxvOworCisgICAgLyogOCA9IDEwMDAgY29ycmVzcG9uZHMgdG8gMSBpbiBHRigyXjEyOCkgKi8KKyAgICBjdHgtPkhMWzhdID0gdmw7CisgICAgY3R4LT5ISFs4XSA9IHZoOworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU05JX0MpICYmIGRlZmluZWQoTUJFRFRMU19IQVZFX1g4Nl82NCkKKyAgICAvKiBXaXRoIENMTVVMIHN1cHBvcnQsIHdlIG5lZWQgb25seSBoLCBub3QgdGhlIHJlc3Qgb2YgdGhlIHRhYmxlICovCisgICAgaWYoIG1iZWR0bHNfYWVzbmlfaGFzX3N1cHBvcnQoIE1CRURUTFNfQUVTTklfQ0xNVUwgKSApCisgICAgICAgIHJldHVybiggMCApOworI2VuZGlmCisKKyAgICAvKiAwIGNvcnJlc3BvbmRzIHRvIDAgaW4gR0YoMl4xMjgpICovCisgICAgY3R4LT5ISFswXSA9IDA7CisgICAgY3R4LT5ITFswXSA9IDA7CisKKyAgICBmb3IoIGkgPSA0OyBpID4gMDsgaSA+Pj0gMSApCisgICAgeworICAgICAgICB1aW50MzJfdCBUID0gKCB2bCAmIDEgKSAqIDB4ZTEwMDAwMDBVOworICAgICAgICB2bCAgPSAoIHZoIDw8IDYzICkgfCAoIHZsID4+IDEgKTsKKyAgICAgICAgdmggID0gKCB2aCA+PiAxICkgXiAoICh1aW50NjRfdCkgVCA8PCAzMik7CisKKyAgICAgICAgY3R4LT5ITFtpXSA9IHZsOworICAgICAgICBjdHgtPkhIW2ldID0gdmg7CisgICAgfQorCisgICAgZm9yKCBpID0gMjsgaSA8PSA4OyBpICo9IDIgKQorICAgIHsKKyAgICAgICAgdWludDY0X3QgKkhpTCA9IGN0eC0+SEwgKyBpLCAqSGlIID0gY3R4LT5ISCArIGk7CisgICAgICAgIHZoID0gKkhpSDsKKyAgICAgICAgdmwgPSAqSGlMOworICAgICAgICBmb3IoIGogPSAxOyBqIDwgaTsgaisrICkKKyAgICAgICAgeworICAgICAgICAgICAgSGlIW2pdID0gdmggXiBjdHgtPkhIW2pdOworICAgICAgICAgICAgSGlMW2pdID0gdmwgXiBjdHgtPkhMW2pdOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2djbV9zZXRrZXkoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2lkX3QgY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMgKQoreworICAgIGludCByZXQ7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3ZhbHVlcyggY2lwaGVyLCBrZXliaXRzLCBNQkVEVExTX01PREVfRUNCICk7CisgICAgaWYoIGNpcGhlcl9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0dDTV9CQURfSU5QVVQgKTsKKworICAgIGlmKCBjaXBoZXJfaW5mby0+YmxvY2tfc2l6ZSAhPSAxNiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfR0NNX0JBRF9JTlBVVCApOworCisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eC0+Y2lwaGVyX2N0eCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgtPmNpcGhlcl9jdHgsIGNpcGhlcl9pbmZvICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eC0+Y2lwaGVyX2N0eCwga2V5LCBrZXliaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5DUllQVCApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IGdjbV9nZW5fdGFibGUoIGN0eCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFNob3VwJ3MgbWV0aG9kIGZvciBtdWx0aXBsaWNhdGlvbiB1c2UgdGhpcyB0YWJsZSB3aXRoCisgKiAgICAgIGxhc3Q0W3hdID0geCB0aW1lcyBQXjEyOAorICogd2hlcmUgeCBhbmQgbGFzdDRbeF0gYXJlIHNlZW4gYXMgZWxlbWVudHMgb2YgR0YoMl4xMjgpIGFzIGluIFtNR1ZdCisgKi8KK3N0YXRpYyBjb25zdCB1aW50NjRfdCBsYXN0NFsxNl0gPQoreworICAgIDB4MDAwMCwgMHgxYzIwLCAweDM4NDAsIDB4MjQ2MCwKKyAgICAweDcwODAsIDB4NmNhMCwgMHg0OGMwLCAweDU0ZTAsCisgICAgMHhlMTAwLCAweGZkMjAsIDB4ZDk0MCwgMHhjNTYwLAorICAgIDB4OTE4MCwgMHg4ZGEwLCAweGE5YzAsIDB4YjVlMAorfTsKKworLyoKKyAqIFNldHMgb3V0cHV0IHRvIHggdGltZXMgSCB1c2luZyB0aGUgcHJlY29tcHV0ZWQgdGFibGVzLgorICogeCBhbmQgb3V0cHV0IGFyZSBzZWVuIGFzIGVsZW1lbnRzIG9mIEdGKDJeMTI4KSBhcyBpbiBbTUdWXS4KKyAqLworc3RhdGljIHZvaWQgZ2NtX211bHQoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciB4WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKQoreworICAgIGludCBpID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGxvLCBoaSwgcmVtOworICAgIHVpbnQ2NF90IHpoLCB6bDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNOSV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfSEFWRV9YODZfNjQpCisgICAgaWYoIG1iZWR0bHNfYWVzbmlfaGFzX3N1cHBvcnQoIE1CRURUTFNfQUVTTklfQ0xNVUwgKSApIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBoWzE2XTsKKworICAgICAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPkhIWzhdID4+IDMyLCBoLCAgMCApOworICAgICAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPkhIWzhdLCAgICAgICBoLCAgNCApOworICAgICAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPkhMWzhdID4+IDMyLCBoLCAgOCApOworICAgICAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPkhMWzhdLCAgICAgICBoLCAxMiApOworCisgICAgICAgIG1iZWR0bHNfYWVzbmlfZ2NtX211bHQoIG91dHB1dCwgeCwgaCApOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfQUVTTklfQyAmJiBNQkVEVExTX0hBVkVfWDg2XzY0ICovCisKKyAgICBsbyA9IHhbMTVdICYgMHhmOworCisgICAgemggPSBjdHgtPkhIW2xvXTsKKyAgICB6bCA9IGN0eC0+SExbbG9dOworCisgICAgZm9yKCBpID0gMTU7IGkgPj0gMDsgaS0tICkKKyAgICB7CisgICAgICAgIGxvID0geFtpXSAmIDB4ZjsKKyAgICAgICAgaGkgPSB4W2ldID4+IDQ7CisKKyAgICAgICAgaWYoIGkgIT0gMTUgKQorICAgICAgICB7CisgICAgICAgICAgICByZW0gPSAodW5zaWduZWQgY2hhcikgemwgJiAweGY7CisgICAgICAgICAgICB6bCA9ICggemggPDwgNjAgKSB8ICggemwgPj4gNCApOworICAgICAgICAgICAgemggPSAoIHpoID4+IDQgKTsKKyAgICAgICAgICAgIHpoIF49ICh1aW50NjRfdCkgbGFzdDRbcmVtXSA8PCA0ODsKKyAgICAgICAgICAgIHpoIF49IGN0eC0+SEhbbG9dOworICAgICAgICAgICAgemwgXj0gY3R4LT5ITFtsb107CisKKyAgICAgICAgfQorCisgICAgICAgIHJlbSA9ICh1bnNpZ25lZCBjaGFyKSB6bCAmIDB4ZjsKKyAgICAgICAgemwgPSAoIHpoIDw8IDYwICkgfCAoIHpsID4+IDQgKTsKKyAgICAgICAgemggPSAoIHpoID4+IDQgKTsKKyAgICAgICAgemggXj0gKHVpbnQ2NF90KSBsYXN0NFtyZW1dIDw8IDQ4OworICAgICAgICB6aCBePSBjdHgtPkhIW2hpXTsKKyAgICAgICAgemwgXj0gY3R4LT5ITFtoaV07CisgICAgfQorCisgICAgUFVUX1VJTlQzMl9CRSggemggPj4gMzIsIG91dHB1dCwgMCApOworICAgIFBVVF9VSU5UMzJfQkUoIHpoLCBvdXRwdXQsIDQgKTsKKyAgICBQVVRfVUlOVDMyX0JFKCB6bCA+PiAzMiwgb3V0cHV0LCA4ICk7CisgICAgUFVUX1VJTlQzMl9CRSggemwsIG91dHB1dCwgMTIgKTsKK30KKworaW50IG1iZWR0bHNfZ2NtX3N0YXJ0cyggbWJlZHRsc19nY21fY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkLAorICAgICAgICAgICAgICAgIHNpemVfdCBhZGRfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgd29ya19idWZbMTZdOworICAgIHNpemVfdCBpOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisgICAgc2l6ZV90IHVzZV9sZW4sIG9sZW4gPSAwOworCisgICAgLyogSVYgYW5kIEFEIGFyZSBsaW1pdGVkIHRvIDJeNjQgYml0cywgc28gMl42MSBieXRlcyAqLworICAgIGlmKCAoICh1aW50NjRfdCkgaXZfbGVuICApID4+IDYxICE9IDAgfHwKKyAgICAgICAgKCAodWludDY0X3QpIGFkZF9sZW4gKSA+PiA2MSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfR0NNX0JBRF9JTlBVVCApOworICAgIH0KKworICAgIG1lbXNldCggY3R4LT55LCAweDAwLCBzaXplb2YoY3R4LT55KSApOworICAgIG1lbXNldCggY3R4LT5idWYsIDB4MDAsIHNpemVvZihjdHgtPmJ1ZikgKTsKKworICAgIGN0eC0+bW9kZSA9IG1vZGU7CisgICAgY3R4LT5sZW4gPSAwOworICAgIGN0eC0+YWRkX2xlbiA9IDA7CisKKyAgICBpZiggaXZfbGVuID09IDEyICkKKyAgICB7CisgICAgICAgIG1lbWNweSggY3R4LT55LCBpdiwgaXZfbGVuICk7CisgICAgICAgIGN0eC0+eVsxNV0gPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtZW1zZXQoIHdvcmtfYnVmLCAweDAwLCAxNiApOworICAgICAgICBQVVRfVUlOVDMyX0JFKCBpdl9sZW4gKiA4LCB3b3JrX2J1ZiwgMTIgKTsKKworICAgICAgICBwID0gaXY7CisgICAgICAgIHdoaWxlKCBpdl9sZW4gPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgdXNlX2xlbiA9ICggaXZfbGVuIDwgMTYgKSA/IGl2X2xlbiA6IDE2OworCisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgdXNlX2xlbjsgaSsrICkKKyAgICAgICAgICAgICAgICBjdHgtPnlbaV0gXj0gcFtpXTsKKworICAgICAgICAgICAgZ2NtX211bHQoIGN0eCwgY3R4LT55LCBjdHgtPnkgKTsKKworICAgICAgICAgICAgaXZfbGVuIC09IHVzZV9sZW47CisgICAgICAgICAgICBwICs9IHVzZV9sZW47CisgICAgICAgIH0KKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgICAgICAgICBjdHgtPnlbaV0gXj0gd29ya19idWZbaV07CisKKyAgICAgICAgZ2NtX211bHQoIGN0eCwgY3R4LT55LCBjdHgtPnkgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjdHgtPmNpcGhlcl9jdHgsIGN0eC0+eSwgMTYsIGN0eC0+YmFzZV9lY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGN0eC0+YWRkX2xlbiA9IGFkZF9sZW47CisgICAgcCA9IGFkZDsKKyAgICB3aGlsZSggYWRkX2xlbiA+IDAgKQorICAgIHsKKyAgICAgICAgdXNlX2xlbiA9ICggYWRkX2xlbiA8IDE2ICkgPyBhZGRfbGVuIDogMTY7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IHVzZV9sZW47IGkrKyApCisgICAgICAgICAgICBjdHgtPmJ1ZltpXSBePSBwW2ldOworCisgICAgICAgIGdjbV9tdWx0KCBjdHgsIGN0eC0+YnVmLCBjdHgtPmJ1ZiApOworCisgICAgICAgIGFkZF9sZW4gLT0gdXNlX2xlbjsKKyAgICAgICAgcCArPSB1c2VfbGVuOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19nY21fdXBkYXRlKCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBlY3RyWzE2XTsKKyAgICBzaXplX3QgaTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOworICAgIHVuc2lnbmVkIGNoYXIgKm91dF9wID0gb3V0cHV0OworICAgIHNpemVfdCB1c2VfbGVuLCBvbGVuID0gMDsKKworICAgIGlmKCBvdXRwdXQgPiBpbnB1dCAmJiAoc2l6ZV90KSAoIG91dHB1dCAtIGlucHV0ICkgPCBsZW5ndGggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0dDTV9CQURfSU5QVVQgKTsKKworICAgIC8qIFRvdGFsIGxlbmd0aCBpcyByZXN0cmljdGVkIHRvIDJeMzkgLSAyNTYgYml0cywgaWUgMl4zNiAtIDJeNSBieXRlcworICAgICAqIEFsc28gY2hlY2sgZm9yIHBvc3NpYmxlIG92ZXJmbG93ICovCisgICAgaWYoIGN0eC0+bGVuICsgbGVuZ3RoIDwgY3R4LT5sZW4gfHwKKyAgICAgICAgKHVpbnQ2NF90KSBjdHgtPmxlbiArIGxlbmd0aCA+IDB4RkZGRkZGRkUwdWxsICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfR0NNX0JBRF9JTlBVVCApOworICAgIH0KKworICAgIGN0eC0+bGVuICs9IGxlbmd0aDsKKworICAgIHAgPSBpbnB1dDsKKyAgICB3aGlsZSggbGVuZ3RoID4gMCApCisgICAgeworICAgICAgICB1c2VfbGVuID0gKCBsZW5ndGggPCAxNiApID8gbGVuZ3RoIDogMTY7CisKKyAgICAgICAgZm9yKCBpID0gMTY7IGkgPiAxMjsgaS0tICkKKyAgICAgICAgICAgIGlmKCArK2N0eC0+eVtpIC0gMV0gIT0gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY3R4LT5jaXBoZXJfY3R4LCBjdHgtPnksIDE2LCBlY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgdXNlX2xlbjsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIGN0eC0+bW9kZSA9PSBNQkVEVExTX0dDTV9ERUNSWVBUICkKKyAgICAgICAgICAgICAgICBjdHgtPmJ1ZltpXSBePSBwW2ldOworICAgICAgICAgICAgb3V0X3BbaV0gPSBlY3RyW2ldIF4gcFtpXTsKKyAgICAgICAgICAgIGlmKCBjdHgtPm1vZGUgPT0gTUJFRFRMU19HQ01fRU5DUllQVCApCisgICAgICAgICAgICAgICAgY3R4LT5idWZbaV0gXj0gb3V0X3BbaV07CisgICAgICAgIH0KKworICAgICAgICBnY21fbXVsdCggY3R4LCBjdHgtPmJ1ZiwgY3R4LT5idWYgKTsKKworICAgICAgICBsZW5ndGggLT0gdXNlX2xlbjsKKyAgICAgICAgcCArPSB1c2VfbGVuOworICAgICAgICBvdXRfcCArPSB1c2VfbGVuOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19nY21fZmluaXNoKCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLAorICAgICAgICAgICAgICAgIHNpemVfdCB0YWdfbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHdvcmtfYnVmWzE2XTsKKyAgICBzaXplX3QgaTsKKyAgICB1aW50NjRfdCBvcmlnX2xlbiA9IGN0eC0+bGVuICogODsKKyAgICB1aW50NjRfdCBvcmlnX2FkZF9sZW4gPSBjdHgtPmFkZF9sZW4gKiA4OworCisgICAgaWYoIHRhZ19sZW4gPiAxNiB8fCB0YWdfbGVuIDwgNCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfR0NNX0JBRF9JTlBVVCApOworCisgICAgbWVtY3B5KCB0YWcsIGN0eC0+YmFzZV9lY3RyLCB0YWdfbGVuICk7CisKKyAgICBpZiggb3JpZ19sZW4gfHwgb3JpZ19hZGRfbGVuICkKKyAgICB7CisgICAgICAgIG1lbXNldCggd29ya19idWYsIDB4MDAsIDE2ICk7CisKKyAgICAgICAgUFVUX1VJTlQzMl9CRSggKCBvcmlnX2FkZF9sZW4gPj4gMzIgKSwgd29ya19idWYsIDAgICk7CisgICAgICAgIFBVVF9VSU5UMzJfQkUoICggb3JpZ19hZGRfbGVuICAgICAgICksIHdvcmtfYnVmLCA0ICApOworICAgICAgICBQVVRfVUlOVDMyX0JFKCAoIG9yaWdfbGVuICAgICA+PiAzMiApLCB3b3JrX2J1ZiwgOCAgKTsKKyAgICAgICAgUFVUX1VJTlQzMl9CRSggKCBvcmlnX2xlbiAgICAgICAgICAgKSwgd29ya19idWYsIDEyICk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDE2OyBpKysgKQorICAgICAgICAgICAgY3R4LT5idWZbaV0gXj0gd29ya19idWZbaV07CisKKyAgICAgICAgZ2NtX211bHQoIGN0eCwgY3R4LT5idWYsIGN0eC0+YnVmICk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IHRhZ19sZW47IGkrKyApCisgICAgICAgICAgICB0YWdbaV0gXj0gY3R4LT5idWZbaV07CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2djbV9jcnlwdF9hbmRfdGFnKCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWRkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRhZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZyApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZ2NtX3N0YXJ0cyggY3R4LCBtb2RlLCBpdiwgaXZfbGVuLCBhZGQsIGFkZF9sZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19nY21fdXBkYXRlKCBjdHgsIGxlbmd0aCwgaW5wdXQsIG91dHB1dCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2djbV9maW5pc2goIGN0eCwgdGFnLCB0YWdfbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19nY21fYXV0aF9kZWNyeXB0KCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZCwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWRkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRhZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tfdGFnWzE2XTsKKyAgICBzaXplX3QgaTsKKyAgICBpbnQgZGlmZjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZ2NtX2NyeXB0X2FuZF90YWcoIGN0eCwgTUJFRFRMU19HQ01fREVDUllQVCwgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuLCBhZGQsIGFkZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQsIHRhZ19sZW4sIGNoZWNrX3RhZyApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qIENoZWNrIHRhZyBpbiAiY29uc3RhbnQtdGltZSIgKi8KKyAgICBmb3IoIGRpZmYgPSAwLCBpID0gMDsgaSA8IHRhZ19sZW47IGkrKyApCisgICAgICAgIGRpZmYgfD0gdGFnW2ldIF4gY2hlY2tfdGFnW2ldOworCisgICAgaWYoIGRpZmYgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3plcm9pemUoIG91dHB1dCwgbGVuZ3RoICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfR0NNX0FVVEhfRkFJTEVEICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3ZvaWQgbWJlZHRsc19nY21fZnJlZSggbWJlZHRsc19nY21fY29udGV4dCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4LT5jaXBoZXJfY3R4ICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19nY21fY29udGV4dCApICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKSAmJiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisvKgorICogQUVTLUdDTSB0ZXN0IHZlY3RvcnMgZnJvbToKKyAqCisgKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9ncm91cHMvU1RNL2NhdnAvZG9jdW1lbnRzL21hYy9nY210ZXN0dmVjdG9ycy56aXAKKyAqLworI2RlZmluZSBNQVhfVEVTVFMgICA2CisKK3N0YXRpYyBjb25zdCBpbnQga2V5X2luZGV4W01BWF9URVNUU10gPQorICAgIHsgMCwgMCwgMSwgMSwgMSwgMSB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUFYX1RFU1RTXVszMl0gPQoreworICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgIHsgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywKKyAgICAgIDB4NmQsIDB4NmEsIDB4OGYsIDB4OTQsIDB4NjcsIDB4MzAsIDB4ODMsIDB4MDgsCisgICAgICAweGZlLCAweGZmLCAweGU5LCAweDkyLCAweDg2LCAweDY1LCAweDczLCAweDFjLAorICAgICAgMHg2ZCwgMHg2YSwgMHg4ZiwgMHg5NCwgMHg2NywgMHgzMCwgMHg4MywgMHgwOCB9LAorfTsKKworc3RhdGljIGNvbnN0IHNpemVfdCBpdl9sZW5bTUFYX1RFU1RTXSA9CisgICAgeyAxMiwgMTIsIDEyLCAxMiwgOCwgNjAgfTsKKworc3RhdGljIGNvbnN0IGludCBpdl9pbmRleFtNQVhfVEVTVFNdID0KKyAgICB7IDAsIDAsIDEsIDEsIDEsIDIgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXZbTUFYX1RFU1RTXVs2NF0gPQoreworICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgICB7IDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4ZmEsIDB4Y2UsIDB4ZGIsIDB4YWQsCisgICAgICAweGRlLCAweGNhLCAweGY4LCAweDg4IH0sCisgICAgeyAweDkzLCAweDEzLCAweDIyLCAweDVkLCAweGY4LCAweDg0LCAweDA2LCAweGU1LAorICAgICAgMHg1NSwgMHg5MCwgMHg5YywgMHg1YSwgMHhmZiwgMHg1MiwgMHg2OSwgMHhhYSwKKyAgICAgIDB4NmEsIDB4N2EsIDB4OTUsIDB4MzgsIDB4NTMsIDB4NGYsIDB4N2QsIDB4YTEsCisgICAgICAweGU0LCAweGMzLCAweDAzLCAweGQyLCAweGEzLCAweDE4LCAweGE3LCAweDI4LAorICAgICAgMHhjMywgMHhjMCwgMHhjOSwgMHg1MSwgMHg1NiwgMHg4MCwgMHg5NSwgMHgzOSwKKyAgICAgIDB4ZmMsIDB4ZjAsIDB4ZTIsIDB4NDIsIDB4OWEsIDB4NmIsIDB4NTIsIDB4NTQsCisgICAgICAweDE2LCAweGFlLCAweGRiLCAweGY1LCAweGEwLCAweGRlLCAweDZhLCAweDU3LAorICAgICAgMHhhNiwgMHgzNywgMHhiMywgMHg5YiB9LAorfTsKKworc3RhdGljIGNvbnN0IHNpemVfdCBhZGRfbGVuW01BWF9URVNUU10gPQorICAgIHsgMCwgMCwgMCwgMjAsIDIwLCAyMCB9OworCitzdGF0aWMgY29uc3QgaW50IGFkZF9pbmRleFtNQVhfVEVTVFNdID0KKyAgICB7IDAsIDAsIDAsIDEsIDEsIDEgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWRkaXRpb25hbFtNQVhfVEVTVFNdWzY0XSA9Cit7CisgICAgeyAweDAwIH0sCisgICAgeyAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAorICAgICAgMHhmZSwgMHhlZCwgMHhmYSwgMHhjZSwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwKKyAgICAgIDB4YWIsIDB4YWQsIDB4ZGEsIDB4ZDIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzaXplX3QgcHRfbGVuW01BWF9URVNUU10gPQorICAgIHsgMCwgMTYsIDY0LCA2MCwgNjAsIDYwIH07CisKK3N0YXRpYyBjb25zdCBpbnQgcHRfaW5kZXhbTUFYX1RFU1RTXSA9CisgICAgeyAwLCAwLCAxLCAxLCAxLCAxIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHB0W01BWF9URVNUU11bNjRdID0KK3sKKyAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICAgeyAweGQ5LCAweDMxLCAweDMyLCAweDI1LCAweGY4LCAweDg0LCAweDA2LCAweGU1LAorICAgICAgMHhhNSwgMHg1OSwgMHgwOSwgMHhjNSwgMHhhZiwgMHhmNSwgMHgyNiwgMHg5YSwKKyAgICAgIDB4ODYsIDB4YTcsIDB4YTksIDB4NTMsIDB4MTUsIDB4MzQsIDB4ZjcsIDB4ZGEsCisgICAgICAweDJlLCAweDRjLCAweDMwLCAweDNkLCAweDhhLCAweDMxLCAweDhhLCAweDcyLAorICAgICAgMHgxYywgMHgzYywgMHgwYywgMHg5NSwgMHg5NSwgMHg2OCwgMHgwOSwgMHg1MywKKyAgICAgIDB4MmYsIDB4Y2YsIDB4MGUsIDB4MjQsIDB4NDksIDB4YTYsIDB4YjUsIDB4MjUsCisgICAgICAweGIxLCAweDZhLCAweGVkLCAweGY1LCAweGFhLCAweDBkLCAweGU2LCAweDU3LAorICAgICAgMHhiYSwgMHg2MywgMHg3YiwgMHgzOSwgMHgxYSwgMHhhZiwgMHhkMiwgMHg1NSB9LAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY3RbTUFYX1RFU1RTICogM11bNjRdID0KK3sKKyAgICB7IDB4MDAgfSwKKyAgICB7IDB4MDMsIDB4ODgsIDB4ZGEsIDB4Y2UsIDB4NjAsIDB4YjYsIDB4YTMsIDB4OTIsCisgICAgICAweGYzLCAweDI4LCAweGMyLCAweGI5LCAweDcxLCAweGIyLCAweGZlLCAweDc4IH0sCisgICAgeyAweDQyLCAweDgzLCAweDFlLCAweGMyLCAweDIxLCAweDc3LCAweDc0LCAweDI0LAorICAgICAgMHg0YiwgMHg3MiwgMHgyMSwgMHhiNywgMHg4NCwgMHhkMCwgMHhkNCwgMHg5YywKKyAgICAgIDB4ZTMsIDB4YWEsIDB4MjEsIDB4MmYsIDB4MmMsIDB4MDIsIDB4YTQsIDB4ZTAsCisgICAgICAweDM1LCAweGMxLCAweDdlLCAweDIzLCAweDI5LCAweGFjLCAweGExLCAweDJlLAorICAgICAgMHgyMSwgMHhkNSwgMHgxNCwgMHhiMiwgMHg1NCwgMHg2NiwgMHg5MywgMHgxYywKKyAgICAgIDB4N2QsIDB4OGYsIDB4NmEsIDB4NWEsIDB4YWMsIDB4ODQsIDB4YWEsIDB4MDUsCisgICAgICAweDFiLCAweGEzLCAweDBiLCAweDM5LCAweDZhLCAweDBhLCAweGFjLCAweDk3LAorICAgICAgMHgzZCwgMHg1OCwgMHhlMCwgMHg5MSwgMHg0NywgMHgzZiwgMHg1OSwgMHg4NSB9LAorICAgIHsgMHg0MiwgMHg4MywgMHgxZSwgMHhjMiwgMHgyMSwgMHg3NywgMHg3NCwgMHgyNCwKKyAgICAgIDB4NGIsIDB4NzIsIDB4MjEsIDB4YjcsIDB4ODQsIDB4ZDAsIDB4ZDQsIDB4OWMsCisgICAgICAweGUzLCAweGFhLCAweDIxLCAweDJmLCAweDJjLCAweDAyLCAweGE0LCAweGUwLAorICAgICAgMHgzNSwgMHhjMSwgMHg3ZSwgMHgyMywgMHgyOSwgMHhhYywgMHhhMSwgMHgyZSwKKyAgICAgIDB4MjEsIDB4ZDUsIDB4MTQsIDB4YjIsIDB4NTQsIDB4NjYsIDB4OTMsIDB4MWMsCisgICAgICAweDdkLCAweDhmLCAweDZhLCAweDVhLCAweGFjLCAweDg0LCAweGFhLCAweDA1LAorICAgICAgMHgxYiwgMHhhMywgMHgwYiwgMHgzOSwgMHg2YSwgMHgwYSwgMHhhYywgMHg5NywKKyAgICAgIDB4M2QsIDB4NTgsIDB4ZTAsIDB4OTEgfSwKKyAgICB7IDB4NjEsIDB4MzUsIDB4M2IsIDB4NGMsIDB4MjgsIDB4MDYsIDB4OTMsIDB4NGEsCisgICAgICAweDc3LCAweDdmLCAweGY1LCAweDFmLCAweGEyLCAweDJhLCAweDQ3LCAweDU1LAorICAgICAgMHg2OSwgMHg5YiwgMHgyYSwgMHg3MSwgMHg0ZiwgMHhjZCwgMHhjNiwgMHhmOCwKKyAgICAgIDB4MzcsIDB4NjYsIDB4ZTUsIDB4ZjksIDB4N2IsIDB4NmMsIDB4NzQsIDB4MjMsCisgICAgICAweDczLCAweDgwLCAweDY5LCAweDAwLCAweGU0LCAweDlmLCAweDI0LCAweGIyLAorICAgICAgMHgyYiwgMHgwOSwgMHg3NSwgMHg0NCwgMHhkNCwgMHg4OSwgMHg2YiwgMHg0MiwKKyAgICAgIDB4NDksIDB4ODksIDB4YjUsIDB4ZTEsIDB4ZWIsIDB4YWMsIDB4MGYsIDB4MDcsCisgICAgICAweGMyLCAweDNmLCAweDQ1LCAweDk4IH0sCisgICAgeyAweDhjLCAweGUyLCAweDQ5LCAweDk4LCAweDYyLCAweDU2LCAweDE1LCAweGI2LAorICAgICAgMHgwMywgMHhhMCwgMHgzMywgMHhhYywgMHhhMSwgMHgzZiwgMHhiOCwgMHg5NCwKKyAgICAgIDB4YmUsIDB4OTEsIDB4MTIsIDB4YTUsIDB4YzMsIDB4YTIsIDB4MTEsIDB4YTgsCisgICAgICAweGJhLCAweDI2LCAweDJhLCAweDNjLCAweGNhLCAweDdlLCAweDJjLCAweGE3LAorICAgICAgMHgwMSwgMHhlNCwgMHhhOSwgMHhhNCwgMHhmYiwgMHhhNCwgMHgzYywgMHg5MCwKKyAgICAgIDB4Y2MsIDB4ZGMsIDB4YjIsIDB4ODEsIDB4ZDQsIDB4OGMsIDB4N2MsIDB4NmYsCisgICAgICAweGQ2LCAweDI4LCAweDc1LCAweGQyLCAweGFjLCAweGE0LCAweDE3LCAweDAzLAorICAgICAgMHg0YywgMHgzNCwgMHhhZSwgMHhlNSB9LAorICAgIHsgMHgwMCB9LAorICAgIHsgMHg5OCwgMHhlNywgMHgyNCwgMHg3YywgMHgwNywgMHhmMCwgMHhmZSwgMHg0MSwKKyAgICAgIDB4MWMsIDB4MjYsIDB4N2UsIDB4NDMsIDB4ODQsIDB4YjAsIDB4ZjYsIDB4MDAgfSwKKyAgICB7IDB4MzksIDB4ODAsIDB4Y2EsIDB4MGIsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4NDEsCisgICAgICAweGViLCAweDA2LCAweGZhLCAweGM0LCAweDg3LCAweDJhLCAweDI3LCAweDU3LAorICAgICAgMHg4NSwgMHg5ZSwgMHgxYywgMHhlYSwgMHhhNiwgMHhlZiwgMHhkOSwgMHg4NCwKKyAgICAgIDB4NjIsIDB4ODUsIDB4OTMsIDB4YjQsIDB4MGMsIDB4YTEsIDB4ZTEsIDB4OWMsCisgICAgICAweDdkLCAweDc3LCAweDNkLCAweDAwLCAweGMxLCAweDQ0LCAweGM1LCAweDI1LAorICAgICAgMHhhYywgMHg2MSwgMHg5ZCwgMHgxOCwgMHhjOCwgMHg0YSwgMHgzZiwgMHg0NywKKyAgICAgIDB4MTgsIDB4ZTIsIDB4NDQsIDB4OGIsIDB4MmYsIDB4ZTMsIDB4MjQsIDB4ZDksCisgICAgICAweGNjLCAweGRhLCAweDI3LCAweDEwLCAweGFjLCAweGFkLCAweGUyLCAweDU2IH0sCisgICAgeyAweDM5LCAweDgwLCAweGNhLCAweDBiLCAweDNjLCAweDAwLCAweGU4LCAweDQxLAorICAgICAgMHhlYiwgMHgwNiwgMHhmYSwgMHhjNCwgMHg4NywgMHgyYSwgMHgyNywgMHg1NywKKyAgICAgIDB4ODUsIDB4OWUsIDB4MWMsIDB4ZWEsIDB4YTYsIDB4ZWYsIDB4ZDksIDB4ODQsCisgICAgICAweDYyLCAweDg1LCAweDkzLCAweGI0LCAweDBjLCAweGExLCAweGUxLCAweDljLAorICAgICAgMHg3ZCwgMHg3NywgMHgzZCwgMHgwMCwgMHhjMSwgMHg0NCwgMHhjNSwgMHgyNSwKKyAgICAgIDB4YWMsIDB4NjEsIDB4OWQsIDB4MTgsIDB4YzgsIDB4NGEsIDB4M2YsIDB4NDcsCisgICAgICAweDE4LCAweGUyLCAweDQ0LCAweDhiLCAweDJmLCAweGUzLCAweDI0LCAweGQ5LAorICAgICAgMHhjYywgMHhkYSwgMHgyNywgMHgxMCB9LAorICAgIHsgMHgwZiwgMHgxMCwgMHhmNSwgMHg5OSwgMHhhZSwgMHgxNCwgMHhhMSwgMHg1NCwKKyAgICAgIDB4ZWQsIDB4MjQsIDB4YjMsIDB4NmUsIDB4MjUsIDB4MzIsIDB4NGQsIDB4YjgsCisgICAgICAweGM1LCAweDY2LCAweDYzLCAweDJlLCAweGYyLCAweGJiLCAweGIzLCAweDRmLAorICAgICAgMHg4MywgMHg0NywgMHgyOCwgMHgwZiwgMHhjNCwgMHg1MCwgMHg3MCwgMHg1NywKKyAgICAgIDB4ZmQsIDB4ZGMsIDB4MjksIDB4ZGYsIDB4OWEsIDB4NDcsIDB4MWYsIDB4NzUsCisgICAgICAweGM2LCAweDY1LCAweDQxLCAweGQ0LCAweGQ0LCAweGRhLCAweGQxLCAweGM5LAorICAgICAgMHhlOSwgMHgzYSwgMHgxOSwgMHhhNSwgMHg4ZSwgMHg4YiwgMHg0NywgMHgzZiwKKyAgICAgIDB4YTAsIDB4ZjAsIDB4NjIsIDB4ZjcgfSwKKyAgICB7IDB4ZDIsIDB4N2UsIDB4ODgsIDB4NjgsIDB4MWMsIDB4ZTMsIDB4MjQsIDB4M2MsCisgICAgICAweDQ4LCAweDMwLCAweDE2LCAweDVhLCAweDhmLCAweGRjLCAweGY5LCAweGZmLAorICAgICAgMHgxZCwgMHhlOSwgMHhhMSwgMHhkOCwgMHhlNiwgMHhiNCwgMHg0NywgMHhlZiwKKyAgICAgIDB4NmUsIDB4ZjcsIDB4YjcsIDB4OTgsIDB4MjgsIDB4NjYsIDB4NmUsIDB4NDUsCisgICAgICAweDgxLCAweGU3LCAweDkwLCAweDEyLCAweGFmLCAweDM0LCAweGRkLCAweGQ5LAorICAgICAgMHhlMiwgMHhmMCwgMHgzNywgMHg1OCwgMHg5YiwgMHgyOSwgMHgyZCwgMHhiMywKKyAgICAgIDB4ZTYsIDB4N2MsIDB4MDMsIDB4NjcsIDB4NDUsIDB4ZmEsIDB4MjIsIDB4ZTcsCisgICAgICAweGU5LCAweGI3LCAweDM3LCAweDNiIH0sCisgICAgeyAweDAwIH0sCisgICAgeyAweGNlLCAweGE3LCAweDQwLCAweDNkLCAweDRkLCAweDYwLCAweDZiLCAweDZlLAorICAgICAgMHgwNywgMHg0ZSwgMHhjNSwgMHhkMywgMHhiYSwgMHhmMywgMHg5ZCwgMHgxOCB9LAorICAgIHsgMHg1MiwgMHgyZCwgMHhjMSwgMHhmMCwgMHg5OSwgMHg1NiwgMHg3ZCwgMHgwNywKKyAgICAgIDB4ZjQsIDB4N2YsIDB4MzcsIDB4YTMsIDB4MmEsIDB4ODQsIDB4NDIsIDB4N2QsCisgICAgICAweDY0LCAweDNhLCAweDhjLCAweGRjLCAweGJmLCAweGU1LCAweGMwLCAweGM5LAorICAgICAgMHg3NSwgMHg5OCwgMHhhMiwgMHhiZCwgMHgyNSwgMHg1NSwgMHhkMSwgMHhhYSwKKyAgICAgIDB4OGMsIDB4YjAsIDB4OGUsIDB4NDgsIDB4NTksIDB4MGQsIDB4YmIsIDB4M2QsCisgICAgICAweGE3LCAweGIwLCAweDhiLCAweDEwLCAweDU2LCAweDgyLCAweDg4LCAweDM4LAorICAgICAgMHhjNSwgMHhmNiwgMHgxZSwgMHg2MywgMHg5MywgMHhiYSwgMHg3YSwgMHgwYSwKKyAgICAgIDB4YmMsIDB4YzksIDB4ZjYsIDB4NjIsIDB4ODksIDB4ODAsIDB4MTUsIDB4YWQgfSwKKyAgICB7IDB4NTIsIDB4MmQsIDB4YzEsIDB4ZjAsIDB4OTksIDB4NTYsIDB4N2QsIDB4MDcsCisgICAgICAweGY0LCAweDdmLCAweDM3LCAweGEzLCAweDJhLCAweDg0LCAweDQyLCAweDdkLAorICAgICAgMHg2NCwgMHgzYSwgMHg4YywgMHhkYywgMHhiZiwgMHhlNSwgMHhjMCwgMHhjOSwKKyAgICAgIDB4NzUsIDB4OTgsIDB4YTIsIDB4YmQsIDB4MjUsIDB4NTUsIDB4ZDEsIDB4YWEsCisgICAgICAweDhjLCAweGIwLCAweDhlLCAweDQ4LCAweDU5LCAweDBkLCAweGJiLCAweDNkLAorICAgICAgMHhhNywgMHhiMCwgMHg4YiwgMHgxMCwgMHg1NiwgMHg4MiwgMHg4OCwgMHgzOCwKKyAgICAgIDB4YzUsIDB4ZjYsIDB4MWUsIDB4NjMsIDB4OTMsIDB4YmEsIDB4N2EsIDB4MGEsCisgICAgICAweGJjLCAweGM5LCAweGY2LCAweDYyIH0sCisgICAgeyAweGMzLCAweDc2LCAweDJkLCAweGYxLCAweGNhLCAweDc4LCAweDdkLCAweDMyLAorICAgICAgMHhhZSwgMHg0NywgMHhjMSwgMHgzYiwgMHhmMSwgMHg5OCwgMHg0NCwgMHhjYiwKKyAgICAgIDB4YWYsIDB4MWEsIDB4ZTEsIDB4NGQsIDB4MGIsIDB4OTcsIDB4NmEsIDB4ZmEsCisgICAgICAweGM1LCAweDJmLCAweGY3LCAweGQ3LCAweDliLCAweGJhLCAweDlkLCAweGUwLAorICAgICAgMHhmZSwgMHhiNSwgMHg4MiwgMHhkMywgMHgzOSwgMHgzNCwgMHhhNCwgMHhmMCwKKyAgICAgIDB4OTUsIDB4NGMsIDB4YzIsIDB4MzYsIDB4M2IsIDB4YzcsIDB4M2YsIDB4NzgsCisgICAgICAweDYyLCAweGFjLCAweDQzLCAweDBlLCAweDY0LCAweGFiLCAweGU0LCAweDk5LAorICAgICAgMHhmNCwgMHg3YywgMHg5YiwgMHgxZiB9LAorICAgIHsgMHg1YSwgMHg4ZCwgMHhlZiwgMHgyZiwgMHgwYywgMHg5ZSwgMHg1MywgMHhmMSwKKyAgICAgIDB4ZjcsIDB4NWQsIDB4NzgsIDB4NTMsIDB4NjUsIDB4OWUsIDB4MmEsIDB4MjAsCisgICAgICAweGVlLCAweGIyLCAweGIyLCAweDJhLCAweGFmLCAweGRlLCAweDY0LCAweDE5LAorICAgICAgMHhhMCwgMHg1OCwgMHhhYiwgMHg0ZiwgMHg2ZiwgMHg3NCwgMHg2YiwgMHhmNCwKKyAgICAgIDB4MGYsIDB4YzAsIDB4YzMsIDB4YjcsIDB4ODAsIDB4ZjIsIDB4NDQsIDB4NDUsCisgICAgICAweDJkLCAweGEzLCAweGViLCAweGYxLCAweGM1LCAweGQ4LCAweDJjLCAweGRlLAorICAgICAgMHhhMiwgMHg0MSwgMHg4OSwgMHg5NywgMHgyMCwgMHgwZSwgMHhmOCwgMHgyZSwKKyAgICAgIDB4NDQsIDB4YWUsIDB4N2UsIDB4M2YgfSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHRhZ1tNQVhfVEVTVFMgKiAzXVsxNl0gPQoreworICAgIHsgMHg1OCwgMHhlMiwgMHhmYywgMHhjZSwgMHhmYSwgMHg3ZSwgMHgzMCwgMHg2MSwKKyAgICAgIDB4MzYsIDB4N2YsIDB4MWQsIDB4NTcsIDB4YTQsIDB4ZTcsIDB4NDUsIDB4NWEgfSwKKyAgICB7IDB4YWIsIDB4NmUsIDB4NDcsIDB4ZDQsIDB4MmMsIDB4ZWMsIDB4MTMsIDB4YmQsCisgICAgICAweGY1LCAweDNhLCAweDY3LCAweGIyLCAweDEyLCAweDU3LCAweGJkLCAweGRmIH0sCisgICAgeyAweDRkLCAweDVjLCAweDJhLCAweGYzLCAweDI3LCAweGNkLCAweDY0LCAweGE2LAorICAgICAgMHgyYywgMHhmMywgMHg1YSwgMHhiZCwgMHgyYiwgMHhhNiwgMHhmYSwgMHhiNCB9LAorICAgIHsgMHg1YiwgMHhjOSwgMHg0ZiwgMHhiYywgMHgzMiwgMHgyMSwgMHhhNSwgMHhkYiwKKyAgICAgIDB4OTQsIDB4ZmEsIDB4ZTksIDB4NWEsIDB4ZTcsIDB4MTIsIDB4MWEsIDB4NDcgfSwKKyAgICB7IDB4MzYsIDB4MTIsIDB4ZDIsIDB4ZTcsIDB4OWUsIDB4M2IsIDB4MDcsIDB4ODUsCisgICAgICAweDU2LCAweDFiLCAweGUxLCAweDRhLCAweGFjLCAweGEyLCAweGZjLCAweGNiIH0sCisgICAgeyAweDYxLCAweDljLCAweGM1LCAweGFlLCAweGZmLCAweGZlLCAweDBiLCAweGZhLAorICAgICAgMHg0NiwgMHgyYSwgMHhmNCwgMHgzYywgMHgxNiwgMHg5OSwgMHhkMCwgMHg1MCB9LAorICAgIHsgMHhjZCwgMHgzMywgMHhiMiwgMHg4YSwgMHhjNywgMHg3MywgMHhmNywgMHg0YiwKKyAgICAgIDB4YTAsIDB4MGUsIDB4ZDEsIDB4ZjMsIDB4MTIsIDB4NTcsIDB4MjQsIDB4MzUgfSwKKyAgICB7IDB4MmYsIDB4ZjUsIDB4OGQsIDB4ODAsIDB4MDMsIDB4MzksIDB4MjcsIDB4YWIsCisgICAgICAweDhlLCAweGY0LCAweGQ0LCAweDU4LCAweDc1LCAweDE0LCAweGYwLCAweGZiIH0sCisgICAgeyAweDk5LCAweDI0LCAweGE3LCAweGM4LCAweDU4LCAweDczLCAweDM2LCAweGJmLAorICAgICAgMHhiMSwgMHgxOCwgMHgwMiwgMHg0ZCwgMHhiOCwgMHg2NywgMHg0YSwgMHgxNCB9LAorICAgIHsgMHgyNSwgMHgxOSwgMHg0OSwgMHg4ZSwgMHg4MCwgMHhmMSwgMHg0NywgMHg4ZiwKKyAgICAgIDB4MzcsIDB4YmEsIDB4NTUsIDB4YmQsIDB4NmQsIDB4MjcsIDB4NjEsIDB4OGMgfSwKKyAgICB7IDB4NjUsIDB4ZGMsIDB4YzUsIDB4N2YsIDB4Y2YsIDB4NjIsIDB4M2EsIDB4MjQsCisgICAgICAweDA5LCAweDRmLCAweGNjLCAweGE0LCAweDBkLCAweDM1LCAweDMzLCAweGY4IH0sCisgICAgeyAweGRjLCAweGY1LCAweDY2LCAweGZmLCAweDI5LCAweDFjLCAweDI1LCAweGJiLAorICAgICAgMHhiOCwgMHg1NiwgMHg4ZiwgMHhjMywgMHhkMywgMHg3NiwgMHhhNiwgMHhkOSB9LAorICAgIHsgMHg1MywgMHgwZiwgMHg4YSwgMHhmYiwgMHhjNywgMHg0NSwgMHgzNiwgMHhiOSwKKyAgICAgIDB4YTksIDB4NjMsIDB4YjQsIDB4ZjEsIDB4YzQsIDB4Y2IsIDB4NzMsIDB4OGIgfSwKKyAgICB7IDB4ZDAsIDB4ZDEsIDB4YzgsIDB4YTcsIDB4OTksIDB4OTksIDB4NmIsIDB4ZjAsCisgICAgICAweDI2LCAweDViLCAweDk4LCAweGI1LCAweGQ0LCAweDhhLCAweGI5LCAweDE5IH0sCisgICAgeyAweGIwLCAweDk0LCAweGRhLCAweGM1LCAweGQ5LCAweDM0LCAweDcxLCAweGJkLAorICAgICAgMHhlYywgMHgxYSwgMHg1MCwgMHgyMiwgMHg3MCwgMHhlMywgMHhjYywgMHg2YyB9LAorICAgIHsgMHg3NiwgMHhmYywgMHg2ZSwgMHhjZSwgMHgwZiwgMHg0ZSwgMHgxNywgMHg2OCwKKyAgICAgIDB4Y2QsIDB4ZGYsIDB4ODgsIDB4NTMsIDB4YmIsIDB4MmQsIDB4NTUsIDB4MWIgfSwKKyAgICB7IDB4M2EsIDB4MzMsIDB4N2QsIDB4YmYsIDB4NDYsIDB4YTcsIDB4OTIsIDB4YzQsCisgICAgICAweDVlLCAweDQ1LCAweDQ5LCAweDEzLCAweGZlLCAweDJlLCAweGE4LCAweGYyIH0sCisgICAgeyAweGE0LCAweDRhLCAweDgyLCAweDY2LCAweGVlLCAweDFjLCAweDhlLCAweGIwLAorICAgICAgMHhjOCwgMHhiNSwgMHhkNCwgMHhjZiwgMHg1YSwgMHhlOSwgMHhmMSwgMHg5YSB9LAorfTsKKworaW50IG1iZWR0bHNfZ2NtX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIG1iZWR0bHNfZ2NtX2NvbnRleHQgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKKyAgICB1bnNpZ25lZCBjaGFyIHRhZ19idWZbMTZdOworICAgIGludCBpLCBqLCByZXQ7CisgICAgbWJlZHRsc19jaXBoZXJfaWRfdCBjaXBoZXIgPSBNQkVEVExTX0NJUEhFUl9JRF9BRVM7CisKKyAgICBtYmVkdGxzX2djbV9pbml0KCAmY3R4ICk7CisKKyAgICBmb3IoIGogPSAwOyBqIDwgMzsgaisrICkKKyAgICB7CisgICAgICAgIGludCBrZXlfbGVuID0gMTI4ICsgNjQgKiBqOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCBNQVhfVEVTVFM7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBBRVMtR0NNLSUzZCAjJWQgKCVzKTogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9sZW4sIGksICJlbmMiICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfZ2NtX3NldGtleSggJmN0eCwgY2lwaGVyLCBrZXlba2V5X2luZGV4W2ldXSwga2V5X2xlbiApOworCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2djbV9jcnlwdF9hbmRfdGFnKCAmY3R4LCBNQkVEVExTX0dDTV9FTkNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0X2xlbltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdltpdl9pbmRleFtpXV0sIGl2X2xlbltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsW2FkZF9pbmRleFtpXV0sIGFkZF9sZW5baV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRbcHRfaW5kZXhbaV1dLCBidWYsIDE2LCB0YWdfYnVmICk7CisKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1lbWNtcCggYnVmLCBjdFtqICogNiArIGldLCBwdF9sZW5baV0gKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWVtY21wKCB0YWdfYnVmLCB0YWdbaiAqIDYgKyBpXSwgMTYgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYmVkdGxzX2djbV9mcmVlKCAmY3R4ICk7CisKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBBRVMtR0NNLSUzZCAjJWQgKCVzKTogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9sZW4sIGksICJkZWMiICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfZ2NtX3NldGtleSggJmN0eCwgY2lwaGVyLCBrZXlba2V5X2luZGV4W2ldXSwga2V5X2xlbiApOworCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2djbV9jcnlwdF9hbmRfdGFnKCAmY3R4LCBNQkVEVExTX0dDTV9ERUNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0X2xlbltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdltpdl9pbmRleFtpXV0sIGl2X2xlbltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsW2FkZF9pbmRleFtpXV0sIGFkZF9sZW5baV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RbaiAqIDYgKyBpXSwgYnVmLCAxNiwgdGFnX2J1ZiApOworCisgICAgICAgICAgICBpZiggcmV0ICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtZW1jbXAoIGJ1ZiwgcHRbcHRfaW5kZXhbaV1dLCBwdF9sZW5baV0gKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWVtY21wKCB0YWdfYnVmLCB0YWdbaiAqIDYgKyBpXSwgMTYgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYmVkdGxzX2djbV9mcmVlKCAmY3R4ICk7CisKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBBRVMtR0NNLSUzZCAjJWQgc3BsaXQgKCVzKTogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9sZW4sIGksICJlbmMiICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfZ2NtX3NldGtleSggJmN0eCwgY2lwaGVyLCBrZXlba2V5X2luZGV4W2ldXSwga2V5X2xlbiApOworCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2djbV9zdGFydHMoICZjdHgsIE1CRURUTFNfR0NNX0VOQ1JZUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdltpdl9pbmRleFtpXV0sIGl2X2xlbltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxbYWRkX2luZGV4W2ldXSwgYWRkX2xlbltpXSApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiggcHRfbGVuW2ldID4gMzIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNpemVfdCByZXN0X2xlbiA9IHB0X2xlbltpXSAtIDMyOworICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZ2NtX3VwZGF0ZSggJmN0eCwgMzIsIHB0W3B0X2luZGV4W2ldXSwgYnVmICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2djbV91cGRhdGUoICZjdHgsIHJlc3RfbGVuLCBwdFtwdF9pbmRleFtpXV0gKyAzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyAzMiApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZ2NtX3VwZGF0ZSggJmN0eCwgcHRfbGVuW2ldLCBwdFtwdF9pbmRleFtpXV0sIGJ1ZiApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2djbV9maW5pc2goICZjdHgsIHRhZ19idWYsIDE2ICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtZW1jbXAoIGJ1ZiwgY3RbaiAqIDYgKyBpXSwgcHRfbGVuW2ldICkgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1lbWNtcCggdGFnX2J1ZiwgdGFnW2ogKiA2ICsgaV0sIDE2ICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19nY21fZnJlZSggJmN0eCApOworCisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgQUVTLUdDTS0lM2QgIyVkIHNwbGl0ICglcyk6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbGVuLCBpLCAiZGVjIiApOworCisgICAgICAgICAgICBtYmVkdGxzX2djbV9zZXRrZXkoICZjdHgsIGNpcGhlciwga2V5W2tleV9pbmRleFtpXV0sIGtleV9sZW4gKTsKKworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19nY21fc3RhcnRzKCAmY3R4LCBNQkVEVExTX0dDTV9ERUNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZbaXZfaW5kZXhbaV1dLCBpdl9sZW5baV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsW2FkZF9pbmRleFtpXV0sIGFkZF9sZW5baV0gKTsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIHB0X2xlbltpXSA+IDMyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgcmVzdF9sZW4gPSBwdF9sZW5baV0gLSAzMjsKKyAgICAgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2djbV91cGRhdGUoICZjdHgsIDMyLCBjdFtqICogNiArIGldLCBidWYgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZ2NtX3VwZGF0ZSggJmN0eCwgcmVzdF9sZW4sIGN0W2ogKiA2ICsgaV0gKyAzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyAzMiApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZ2NtX3VwZGF0ZSggJmN0eCwgcHRfbGVuW2ldLCBjdFtqICogNiArIGldLCBidWYgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19nY21fZmluaXNoKCAmY3R4LCB0YWdfYnVmLCAxNiApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWVtY21wKCBidWYsIHB0W3B0X2luZGV4W2ldXSwgcHRfbGVuW2ldICkgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1lbWNtcCggdGFnX2J1ZiwgdGFnW2ogKiA2ICsgaV0sIDE2ICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19nY21fZnJlZSggJmN0eCApOworCisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgJiYgTUJFRFRMU19BRVNfQyAqLworCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvaGF2ZWdlLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9oYXZlZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjc1ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvaGF2ZWdlLmMKQEAgLTAsMCArMSwyNDUgQEAKKy8qKgorICogIFxicmllZiBIQVZFR0U6IEhBcmR3YXJlIFZvbGF0aWxlIEVudHJvcHkgR2F0aGVyaW5nIGFuZCBFeHBhbnNpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIEhBVkVHRSBSTkcgd2FzIGRlc2lnbmVkIGJ5IEFuZHJlIFNlem5lYyBpbiAyMDAyLgorICoKKyAqICBodHRwOi8vd3d3LmlyaXNhLmZyL2NhcHMvcHJvamVjdHMvaGlwc29yL3B1YmxpLnBocAorICoKKyAqICBDb250YWN0OiBzZXpuZWMoYXQpaXJpc2FfZG90X2ZyIC0gb3JvY2hlY28oYXQpaXJpc2FfZG90X2ZyCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvaGF2ZWdlLmgiCisjaW5jbHVkZSAibWJlZHRscy90aW1pbmcuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9uIGF2ZXJhZ2UsIG9uZSBpdGVyYXRpb24gYWNjZXNzZXMgdHdvIDgtd29yZCBibG9ja3MgaW4gdGhlIGhhdmVnZSBXQUxLCisgKiB0YWJsZSwgYW5kIGdlbmVyYXRlcyAxNiB3b3JkcyBpbiB0aGUgUkVTIGFycmF5LgorICoKKyAqIFRoZSBkYXRhIHJlYWQgaW4gdGhlIFdBTEsgdGFibGUgaXMgdXBkYXRlZCBhbmQgcGVybXV0ZWQgYWZ0ZXIgZWFjaCB1c2UuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBoYXJkd2FyZSBjbG9jayBjb3VudGVyIHJlYWQgaXMgdXNlZCAgZm9yIHRoaXMgdXBkYXRlLgorICoKKyAqIDI1IGNvbmRpdGlvbmFsIHRlc3RzIGFyZSBwcmVzZW50LiAgVGhlIGNvbmRpdGlvbmFsIHRlc3RzIGFyZSBncm91cGVkIGluCisgKiB0d28gbmVzdGVkICBncm91cHMgb2YgMTIgY29uZGl0aW9uYWwgdGVzdHMgYW5kIDEgdGVzdCB0aGF0IGNvbnRyb2xzIHRoZQorICogcGVybXV0YXRpb247IG9uIGF2ZXJhZ2UsIHRoZXJlIHNob3VsZCBiZSA2IHRlc3RzIGV4ZWN1dGVkIGFuZCAzIG9mIHRoZW0KKyAqIHNob3VsZCBiZSBtaXNwcmVkaWN0ZWQuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjZGVmaW5lIFNXQVAoWCxZKSB7IGludCAqVCA9IFg7IFggPSBZOyBZID0gVDsgfQorCisjZGVmaW5lIFRTVDFfRU5URVIgaWYoIFBURVNUICYgMSApIHsgUFRFU1QgXj0gMzsgUFRFU1QgPj49IDE7CisjZGVmaW5lIFRTVDJfRU5URVIgaWYoIFBURVNUICYgMSApIHsgUFRFU1QgXj0gMzsgUFRFU1QgPj49IDE7CisKKyNkZWZpbmUgVFNUMV9MRUFWRSBVMSsrOyB9CisjZGVmaW5lIFRTVDJfTEVBVkUgVTIrKzsgfQorCisjZGVmaW5lIE9ORV9JVEVSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFBURVNUID0gUFQxID4+IDIwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUU1QxX0VOVEVSICBUU1QxX0VOVEVSICBUU1QxX0VOVEVSICBUU1QxX0VOVEVSICAgICAgXAorICAgIFRTVDFfRU5URVIgIFRTVDFfRU5URVIgIFRTVDFfRU5URVIgIFRTVDFfRU5URVIgICAgICBcCisgICAgVFNUMV9FTlRFUiAgVFNUMV9FTlRFUiAgVFNUMV9FTlRFUiAgVFNUMV9FTlRFUiAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFRTVDFfTEVBVkUgIFRTVDFfTEVBVkUgIFRTVDFfTEVBVkUgIFRTVDFfTEVBVkUgICAgICBcCisgICAgVFNUMV9MRUFWRSAgVFNUMV9MRUFWRSAgVFNUMV9MRUFWRSAgVFNUMV9MRUFWRSAgICAgIFwKKyAgICBUU1QxX0xFQVZFICBUU1QxX0xFQVZFICBUU1QxX0xFQVZFICBUU1QxX0xFQVZFICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUFRYID0gKFBUMSA+PiAxOCkgJiA3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQVDEgJj0gMHgxRkZGOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFBUMiAmPSAweDFGRkY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ0xLID0gKGludCkgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQSA9ICZXQUxLW1BUMSAgICBdOyBSRVNbaSsrXSBePSAqQTsgICAgICAgICAgICAgICAgIFwKKyAgICBCID0gJldBTEtbUFQyICAgIF07IFJFU1tpKytdIF49ICpCOyAgICAgICAgICAgICAgICAgXAorICAgIEMgPSAmV0FMS1tQVDEgXiAxXTsgUkVTW2krK10gXj0gKkM7ICAgICAgICAgICAgICAgICBcCisgICAgRCA9ICZXQUxLW1BUMiBeIDRdOyBSRVNbaSsrXSBePSAqRDsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIElOID0gKCpBID4+ICgxKSkgXiAoKkEgPDwgKDMxKSkgXiBDTEs7ICAgICAgICAgICAgICBcCisgICAgKkEgPSAoKkIgPj4gKDIpKSBeICgqQiA8PCAoMzApKSBeIENMSzsgICAgICAgICAgICAgIFwKKyAgICAqQiA9IElOIF4gVTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpDID0gKCpDID4+ICgzKSkgXiAoKkMgPDwgKDI5KSkgXiBDTEs7ICAgICAgICAgICAgICBcCisgICAgKkQgPSAoKkQgPj4gKDQpKSBeICgqRCA8PCAoMjgpKSBeIENMSzsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEEgPSAmV0FMS1tQVDEgXiAyXTsgUkVTW2krK10gXj0gKkE7ICAgICAgICAgICAgICAgICBcCisgICAgQiA9ICZXQUxLW1BUMiBeIDJdOyBSRVNbaSsrXSBePSAqQjsgICAgICAgICAgICAgICAgIFwKKyAgICBDID0gJldBTEtbUFQxIF4gM107IFJFU1tpKytdIF49ICpDOyAgICAgICAgICAgICAgICAgXAorICAgIEQgPSAmV0FMS1tQVDIgXiA2XTsgUkVTW2krK10gXj0gKkQ7ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiggUFRFU1QgJiAxICkgU1dBUCggQSwgQyApOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU4gPSAoKkEgPj4gKDUpKSBeICgqQSA8PCAoMjcpKSBeIENMSzsgICAgICAgICAgICAgIFwKKyAgICAqQSA9ICgqQiA+PiAoNikpIF4gKCpCIDw8ICgyNikpIF4gQ0xLOyAgICAgICAgICAgICAgXAorICAgICpCID0gSU47IENMSyA9IChpbnQpIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jaygpOyAgICAgICAgICAgICAgICAgICBcCisgICAgKkMgPSAoKkMgPj4gKDcpKSBeICgqQyA8PCAoMjUpKSBeIENMSzsgICAgICAgICAgICAgIFwKKyAgICAqRCA9ICgqRCA+PiAoOCkpIF4gKCpEIDw8ICgyNCkpIF4gQ0xLOyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQSA9ICZXQUxLW1BUMSBeIDRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBCID0gJldBTEtbUFQyIF4gMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUFRFU1QgPSBQVDIgPj4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFBUMiA9IChSRVNbKGkgLSA4KSBeIFBUWV0gXiBXQUxLW1BUMiBeIFBUWSBeIDddKTsgICBcCisgICAgUFQyID0gKChQVDIgJiAweDFGRkYpICYgKH44KSkgXiAoKFBUMSBeIDgpICYgMHg4KTsgIFwKKyAgICBQVFkgPSAoUFQyID4+IDEwKSAmIDc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVFNUMl9FTlRFUiAgVFNUMl9FTlRFUiAgVFNUMl9FTlRFUiAgVFNUMl9FTlRFUiAgICAgIFwKKyAgICBUU1QyX0VOVEVSICBUU1QyX0VOVEVSICBUU1QyX0VOVEVSICBUU1QyX0VOVEVSICAgICAgXAorICAgIFRTVDJfRU5URVIgIFRTVDJfRU5URVIgIFRTVDJfRU5URVIgIFRTVDJfRU5URVIgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUU1QyX0xFQVZFICBUU1QyX0xFQVZFICBUU1QyX0xFQVZFICBUU1QyX0xFQVZFICAgICAgXAorICAgIFRTVDJfTEVBVkUgIFRTVDJfTEVBVkUgIFRTVDJfTEVBVkUgIFRTVDJfTEVBVkUgICAgICBcCisgICAgVFNUMl9MRUFWRSAgVFNUMl9MRUFWRSAgVFNUMl9MRUFWRSAgVFNUMl9MRUFWRSAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEMgPSAmV0FMS1tQVDEgXiA1XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRCA9ICZXQUxLW1BUMiBeIDVdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJFU1tpKytdIF49ICpBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUkVTW2krK10gXj0gKkI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBSRVNbaSsrXSBePSAqQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJFU1tpKytdIF49ICpEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBJTiA9ICgqQSA+PiAoIDkpKSBeICgqQSA8PCAoMjMpKSBeIENMSzsgICAgICAgICAgICAgXAorICAgICpBID0gKCpCID4+ICgxMCkpIF4gKCpCIDw8ICgyMikpIF4gQ0xLOyAgICAgICAgICAgICBcCisgICAgKkIgPSBJTiBeIFUyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqQyA9ICgqQyA+PiAoMTEpKSBeICgqQyA8PCAoMjEpKSBeIENMSzsgICAgICAgICAgICAgXAorICAgICpEID0gKCpEID4+ICgxMikpIF4gKCpEIDw8ICgyMCkpIF4gQ0xLOyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBID0gJldBTEtbUFQxIF4gNl07IFJFU1tpKytdIF49ICpBOyAgICAgICAgICAgICAgICAgXAorICAgIEIgPSAmV0FMS1tQVDIgXiAzXTsgUkVTW2krK10gXj0gKkI7ICAgICAgICAgICAgICAgICBcCisgICAgQyA9ICZXQUxLW1BUMSBeIDddOyBSRVNbaSsrXSBePSAqQzsgICAgICAgICAgICAgICAgIFwKKyAgICBEID0gJldBTEtbUFQyIF4gN107IFJFU1tpKytdIF49ICpEOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU4gPSAoKkEgPj4gKDEzKSkgXiAoKkEgPDwgKDE5KSkgXiBDTEs7ICAgICAgICAgICAgIFwKKyAgICAqQSA9ICgqQiA+PiAoMTQpKSBeICgqQiA8PCAoMTgpKSBeIENMSzsgICAgICAgICAgICAgXAorICAgICpCID0gSU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKkMgPSAoKkMgPj4gKDE1KSkgXiAoKkMgPDwgKDE3KSkgXiBDTEs7ICAgICAgICAgICAgIFwKKyAgICAqRCA9ICgqRCA+PiAoMTYpKSBeICgqRCA8PCAoMTYpKSBeIENMSzsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUFQxID0gKCBSRVNbKCBpIC0gOCApIF4gUFRYXSBeICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdBTEtbUFQxIF4gUFRYIF4gN10gKSAmICh+MSk7ICAgICAgICAgICAgICAgXAorICAgIFBUMSBePSAoUFQyIF4gMHgxMCkgJiAweDEwOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IoIG4rKywgaSA9IDA7IGkgPCAxNjsgaSsrICkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBocy0+cG9vbFtuICUgTUJFRFRMU19IQVZFR0VfQ09MTEVDVF9TSVpFXSBePSBSRVNbaV07CisKKy8qCisgKiBFbnRyb3B5IGdhdGhlcmluZyBmdW5jdGlvbgorICovCitzdGF0aWMgdm9pZCBoYXZlZ2VfZmlsbCggbWJlZHRsc19oYXZlZ2Vfc3RhdGUgKmhzICkKK3sKKyAgICBpbnQgaSwgbiA9IDA7CisgICAgaW50ICBVMSwgIFUyLCAqQSwgKkIsICpDLCAqRDsKKyAgICBpbnQgUFQxLCBQVDIsICpXQUxLLCBSRVNbMTZdOworICAgIGludCBQVFgsIFBUWSwgQ0xLLCBQVEVTVCwgSU47CisKKyAgICBXQUxLID0gaHMtPldBTEs7CisgICAgUFQxICA9IGhzLT5QVDE7CisgICAgUFQyICA9IGhzLT5QVDI7CisKKyAgICBQVFggID0gVTEgPSAwOworICAgIFBUWSAgPSBVMiA9IDA7CisKKyAgICAodm9pZClQVFg7CisKKyAgICBtZW1zZXQoIFJFUywgMCwgc2l6ZW9mKCBSRVMgKSApOworCisgICAgd2hpbGUoIG4gPCBNQkVEVExTX0hBVkVHRV9DT0xMRUNUX1NJWkUgKiA0ICkKKyAgICB7CisgICAgICAgIE9ORV9JVEVSQVRJT04KKyAgICAgICAgT05FX0lURVJBVElPTgorICAgICAgICBPTkVfSVRFUkFUSU9OCisgICAgICAgIE9ORV9JVEVSQVRJT04KKyAgICB9CisKKyAgICBocy0+UFQxID0gUFQxOworICAgIGhzLT5QVDIgPSBQVDI7CisKKyAgICBocy0+b2Zmc2V0WzBdID0gMDsKKyAgICBocy0+b2Zmc2V0WzFdID0gTUJFRFRMU19IQVZFR0VfQ09MTEVDVF9TSVpFIC8gMjsKK30KKworLyoKKyAqIEhBVkVHRSBpbml0aWFsaXphdGlvbgorICovCit2b2lkIG1iZWR0bHNfaGF2ZWdlX2luaXQoIG1iZWR0bHNfaGF2ZWdlX3N0YXRlICpocyApCit7CisgICAgbWVtc2V0KCBocywgMCwgc2l6ZW9mKCBtYmVkdGxzX2hhdmVnZV9zdGF0ZSApICk7CisKKyAgICBoYXZlZ2VfZmlsbCggaHMgKTsKK30KKwordm9pZCBtYmVkdGxzX2hhdmVnZV9mcmVlKCBtYmVkdGxzX2hhdmVnZV9zdGF0ZSAqaHMgKQoreworICAgIGlmKCBocyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc196ZXJvaXplKCBocywgc2l6ZW9mKCBtYmVkdGxzX2hhdmVnZV9zdGF0ZSApICk7Cit9CisKKy8qCisgKiBIQVZFR0UgcmFuZCBmdW5jdGlvbgorICovCitpbnQgbWJlZHRsc19oYXZlZ2VfcmFuZG9tKCB2b2lkICpwX3JuZywgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgdmFsOworICAgIHNpemVfdCB1c2VfbGVuOworICAgIG1iZWR0bHNfaGF2ZWdlX3N0YXRlICpocyA9IChtYmVkdGxzX2hhdmVnZV9zdGF0ZSAqKSBwX3JuZzsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworCisgICAgd2hpbGUoIGxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgdXNlX2xlbiA9IGxlbjsKKyAgICAgICAgaWYoIHVzZV9sZW4gPiBzaXplb2YoaW50KSApCisgICAgICAgICAgICB1c2VfbGVuID0gc2l6ZW9mKGludCk7CisKKyAgICAgICAgaWYoIGhzLT5vZmZzZXRbMV0gPj0gTUJFRFRMU19IQVZFR0VfQ09MTEVDVF9TSVpFICkKKyAgICAgICAgICAgIGhhdmVnZV9maWxsKCBocyApOworCisgICAgICAgIHZhbCAgPSBocy0+cG9vbFtocy0+b2Zmc2V0WzBdKytdOworICAgICAgICB2YWwgXj0gaHMtPnBvb2xbaHMtPm9mZnNldFsxXSsrXTsKKworICAgICAgICBtZW1jcHkoIHAsICZ2YWwsIHVzZV9sZW4gKTsKKworICAgICAgICBsZW4gLT0gdXNlX2xlbjsKKyAgICAgICAgcCArPSB1c2VfbGVuOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19IQVZFR0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvaG1hY19kcmJnLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9obWFjX2RyYmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjVmOWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvaG1hY19kcmJnLmMKQEAgLTAsMCArMSw1MjkgQEAKKy8qCisgKiAgSE1BQ19EUkJHIGltcGxlbWVudGF0aW9uIChOSVNUIFNQIDgwMC05MCkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoKKyAqICBUaGUgTklTVCBTUCA4MDAtOTBBIERSQkdzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBwdWJsaWNhdGlvbi4KKyAqICBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvbmlzdHB1YnMvODAwLTkwQS9TUDgwMC05MEEucGRmCisgKiAgUmVmZXJlbmNlcyBiZWxvdyBhcmUgYmFzZWQgb24gcmV2LiAxIChKYW51YXJ5IDIwMTIpLgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSE1BQ19EUkJHX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2htYWNfZHJiZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiBITUFDX0RSQkcgY29udGV4dCBpbml0aWFsaXphdGlvbgorICovCit2b2lkIG1iZWR0bHNfaG1hY19kcmJnX2luaXQoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc19tdXRleF9pbml0KCAmY3R4LT5tdXRleCApOworI2VuZGlmCit9CisKKy8qCisgKiBITUFDX0RSQkcgdXBkYXRlLCB1c2luZyBvcHRpb25hbCBhZGRpdGlvbmFsIGRhdGEgKDEwLjEuMi4yKQorICovCit2b2lkIG1iZWR0bHNfaG1hY19kcmJnX3VwZGF0ZSggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRpdGlvbmFsLCBzaXplX3QgYWRkX2xlbiApCit7CisgICAgc2l6ZV90IG1kX2xlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIGN0eC0+bWRfY3R4Lm1kX2luZm8gKTsKKyAgICB1bnNpZ25lZCBjaGFyIHJvdW5kcyA9ICggYWRkaXRpb25hbCAhPSBOVUxMICYmIGFkZF9sZW4gIT0gMCApID8gMiA6IDE7CisgICAgdW5zaWduZWQgY2hhciBzZXBbMV07CisgICAgdW5zaWduZWQgY2hhciBLW01CRURUTFNfTURfTUFYX1NJWkVdOworCisgICAgZm9yKCBzZXBbMF0gPSAwOyBzZXBbMF0gPCByb3VuZHM7IHNlcFswXSsrICkKKyAgICB7CisgICAgICAgIC8qIFN0ZXAgMSBvciA0ICovCisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19yZXNldCggJmN0eC0+bWRfY3R4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZjdHgtPm1kX2N0eCwgY3R4LT5WLCBtZF9sZW4gKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJmN0eC0+bWRfY3R4LCBzZXAsIDEgKTsKKyAgICAgICAgaWYoIHJvdW5kcyA9PSAyICkKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZjdHgtPm1kX2N0eCwgYWRkaXRpb25hbCwgYWRkX2xlbiApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmY3R4LT5tZF9jdHgsIEsgKTsKKworICAgICAgICAvKiBTdGVwIDIgb3IgNSAqLworICAgICAgICBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmY3R4LT5tZF9jdHgsIEssIG1kX2xlbiApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmY3R4LT5tZF9jdHgsIGN0eC0+ViwgbWRfbGVuICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZjdHgtPm1kX2N0eCwgY3R4LT5WICk7CisgICAgfQorfQorCisvKgorICogU2ltcGxpZmllZCBITUFDX0RSQkcgaW5pdGlhbGlzYXRpb24gKGZvciB1c2Ugd2l0aCBkZXRlcm1pbmlzdGljIEVDRFNBKQorICovCitpbnQgbWJlZHRsc19obWFjX2RyYmdfc2VlZF9idWYoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICogbWRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBkYXRhX2xlbiApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZjdHgtPm1kX2N0eCwgbWRfaW5mbywgMSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAvKgorICAgICAqIFNldCBpbml0aWFsIHdvcmtpbmcgc3RhdGUuCisgICAgICogVXNlIHRoZSBWIG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggaXMgY3VycmVudGx5IGFsbCAwLCB0byBpbml0aWFsaXplIHRoZQorICAgICAqIE1EIGNvbnRleHQgd2l0aCBhbiBhbGwtemVybyBrZXkuIFRoZW4gc2V0IFYgdG8gaXRzIGluaXRpYWwgdmFsdWUuCisgICAgICovCisgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggJmN0eC0+bWRfY3R4LCBjdHgtPlYsIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApOworICAgIG1lbXNldCggY3R4LT5WLCAweDAxLCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKTsKKworICAgIG1iZWR0bHNfaG1hY19kcmJnX3VwZGF0ZSggY3R4LCBkYXRhLCBkYXRhX2xlbiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBITUFDX0RSQkcgcmVzZWVkaW5nOiAxMC4xLjIuNCAoYXJhYmljKSArIDkuMiAoUm9tYW4pCisgKi8KK2ludCBtYmVkdGxzX2htYWNfZHJiZ19yZXNlZWQoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRpdGlvbmFsLCBzaXplX3QgbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHNlZWRbTUJFRFRMU19ITUFDX0RSQkdfTUFYX1NFRURfSU5QVVRdOworICAgIHNpemVfdCBzZWVkbGVuOworCisgICAgLyogSUlJLiBDaGVjayBpbnB1dCBsZW5ndGggKi8KKyAgICBpZiggbGVuID4gTUJFRFRMU19ITUFDX0RSQkdfTUFYX0lOUFVUIHx8CisgICAgICAgIGN0eC0+ZW50cm9weV9sZW4gKyBsZW4gPiBNQkVEVExTX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0hNQUNfRFJCR19JTlBVVF9UT09fQklHICk7CisgICAgfQorCisgICAgbWVtc2V0KCBzZWVkLCAwLCBNQkVEVExTX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVCApOworCisgICAgLyogSVYuIEdhdGhlciBlbnRyb3B5X2xlbiBieXRlcyBvZiBlbnRyb3B5IGZvciB0aGUgc2VlZCAqLworICAgIGlmKCBjdHgtPmZfZW50cm9weSggY3R4LT5wX2VudHJvcHksIHNlZWQsIGN0eC0+ZW50cm9weV9sZW4gKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICk7CisKKyAgICBzZWVkbGVuID0gY3R4LT5lbnRyb3B5X2xlbjsKKworICAgIC8qIDEuIENvbmNhdGVuYXRlIGVudHJvcHkgYW5kIGFkZGl0aW9uYWwgZGF0YSBpZiBhbnkgKi8KKyAgICBpZiggYWRkaXRpb25hbCAhPSBOVUxMICYmIGxlbiAhPSAwICkKKyAgICB7CisgICAgICAgIG1lbWNweSggc2VlZCArIHNlZWRsZW4sIGFkZGl0aW9uYWwsIGxlbiApOworICAgICAgICBzZWVkbGVuICs9IGxlbjsKKyAgICB9CisKKyAgICAvKiAyLiBVcGRhdGUgc3RhdGUgKi8KKyAgICBtYmVkdGxzX2htYWNfZHJiZ191cGRhdGUoIGN0eCwgc2VlZCwgc2VlZGxlbiApOworCisgICAgLyogMy4gUmVzZXQgcmVzZWVkX2NvdW50ZXIgKi8KKyAgICBjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKKworICAgIC8qIDQuIERvbmUgKi8KKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEhNQUNfRFJCRyBpbml0aWFsaXNhdGlvbiAoMTAuMS4yLjMgKyA5LjEpCisgKi8KK2ludCBtYmVkdGxzX2htYWNfZHJiZ19zZWVkKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICogbWRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9lbnRyb3B5KSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9lbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdXN0b20sCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGVudHJvcHlfbGVuLCBtZF9zaXplOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJmN0eC0+bWRfY3R4LCBtZF9pbmZvLCAxICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIG1kX3NpemUgPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7CisKKyAgICAvKgorICAgICAqIFNldCBpbml0aWFsIHdvcmtpbmcgc3RhdGUuCisgICAgICogVXNlIHRoZSBWIG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggaXMgY3VycmVudGx5IGFsbCAwLCB0byBpbml0aWFsaXplIHRoZQorICAgICAqIE1EIGNvbnRleHQgd2l0aCBhbiBhbGwtemVybyBrZXkuIFRoZW4gc2V0IFYgdG8gaXRzIGluaXRpYWwgdmFsdWUuCisgICAgICovCisgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggJmN0eC0+bWRfY3R4LCBjdHgtPlYsIG1kX3NpemUgKTsKKyAgICBtZW1zZXQoIGN0eC0+ViwgMHgwMSwgbWRfc2l6ZSApOworCisgICAgY3R4LT5mX2VudHJvcHkgPSBmX2VudHJvcHk7CisgICAgY3R4LT5wX2VudHJvcHkgPSBwX2VudHJvcHk7CisKKyAgICBjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IE1CRURUTFNfSE1BQ19EUkJHX1JFU0VFRF9JTlRFUlZBTDsKKworICAgIC8qCisgICAgICogU2VlIFNQODAwLTU3IDUuNi4xIChwLiA2NS02NikgZm9yIHRoZSBzZWN1cml0eSBzdHJlbmd0aCBwcm92aWRlZCBieQorICAgICAqIGVhY2ggaGFzaCBmdW5jdGlvbiwgdGhlbiBhY2NvcmRpbmcgdG8gU1A4MDAtOTBBIHJldjEgMTAuMSB0YWJsZSAyLAorICAgICAqIG1pbl9lbnRyb3B5X2xlbiAoaW4gYml0cykgaXMgc2VjdXJpdHlfc3RyZW5ndGguCisgICAgICoKKyAgICAgKiAoVGhpcyBhbHNvIG1hdGNoZXMgdGhlIHNpemVzIHVzZWQgaW4gdGhlIE5JU1QgdGVzdCB2ZWN0b3JzLikKKyAgICAgKi8KKyAgICBlbnRyb3B5X2xlbiA9IG1kX3NpemUgPD0gMjAgPyAxNiA6IC8qIDE2MC1iaXRzIGhhc2ggLT4gMTI4IGJpdHMgKi8KKyAgICAgICAgICAgICAgICAgIG1kX3NpemUgPD0gMjggPyAyNCA6IC8qIDIyNC1iaXRzIGhhc2ggLT4gMTkyIGJpdHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjsgIC8qIGJldHRlciAoMjU2KykgLT4gMjU2IGJpdHMgKi8KKworICAgIC8qCisgICAgICogRm9yIGluaXRpYWxpc2F0aW9uLCB1c2UgbW9yZSBlbnRyb3B5IHRvIGVtdWxhdGUgYSBub25jZQorICAgICAqIChBZ2FpbiwgbWF0Y2hlcyB0ZXN0IHZlY3RvcnMuKQorICAgICAqLworICAgIGN0eC0+ZW50cm9weV9sZW4gPSBlbnRyb3B5X2xlbiAqIDMgLyAyOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19obWFjX2RyYmdfcmVzZWVkKCBjdHgsIGN1c3RvbSwgbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGN0eC0+ZW50cm9weV9sZW4gPSBlbnRyb3B5X2xlbjsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogU2V0IHByZWRpY3Rpb24gcmVzaXN0YW5jZQorICovCit2b2lkIG1iZWR0bHNfaG1hY19kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNpc3RhbmNlICkKK3sKKyAgICBjdHgtPnByZWRpY3Rpb25fcmVzaXN0YW5jZSA9IHJlc2lzdGFuY2U7Cit9CisKKy8qCisgKiBTZXQgZW50cm9weSBsZW5ndGggZ3JhYmJlZCBmb3IgcmVzZWVkcworICovCit2b2lkIG1iZWR0bHNfaG1hY19kcmJnX3NldF9lbnRyb3B5X2xlbiggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LCBzaXplX3QgbGVuICkKK3sKKyAgICBjdHgtPmVudHJvcHlfbGVuID0gbGVuOworfQorCisvKgorICogU2V0IHJlc2VlZCBpbnRlcnZhbAorICovCit2b2lkIG1iZWR0bHNfaG1hY19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCwgaW50IGludGVydmFsICkKK3sKKyAgICBjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IGludGVydmFsOworfQorCisvKgorICogSE1BQ19EUkJHIHJhbmRvbSBmdW5jdGlvbiB3aXRoIG9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YToKKyAqIDEwLjEuMi41IChhcmFiaWMpICsgOS4zIChSb21hbikKKyAqLworaW50IG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCggdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3Qgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRpdGlvbmFsLCBzaXplX3QgYWRkX2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHggPSAobWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqKSBwX3JuZzsKKyAgICBzaXplX3QgbWRfbGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggY3R4LT5tZF9jdHgubWRfaW5mbyApOworICAgIHNpemVfdCBsZWZ0ID0gb3V0X2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpvdXQgPSBvdXRwdXQ7CisKKyAgICAvKiBJSS4gQ2hlY2sgcmVxdWVzdCBsZW5ndGggKi8KKyAgICBpZiggb3V0X2xlbiA+IE1CRURUTFNfSE1BQ19EUkJHX01BWF9SRVFVRVNUICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ITUFDX0RSQkdfUkVRVUVTVF9UT09fQklHICk7CisKKyAgICAvKiBJSUkuIENoZWNrIGlucHV0IGxlbmd0aCAqLworICAgIGlmKCBhZGRfbGVuID4gTUJFRFRMU19ITUFDX0RSQkdfTUFYX0lOUFVUICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ITUFDX0RSQkdfSU5QVVRfVE9PX0JJRyApOworCisgICAgLyogMS4gKGFrYSBWSUkgYW5kIElYKSBDaGVjayByZXNlZWQgY291bnRlciBhbmQgUFIgKi8KKyAgICBpZiggY3R4LT5mX2VudHJvcHkgIT0gTlVMTCAmJiAvKiBGb3Igbm8tcmVzZWVkaW5nIGluc3RhbmNlcyAqLworICAgICAgICAoIGN0eC0+cHJlZGljdGlvbl9yZXNpc3RhbmNlID09IE1CRURUTFNfSE1BQ19EUkJHX1BSX09OIHx8CisgICAgICAgICAgY3R4LT5yZXNlZWRfY291bnRlciA+IGN0eC0+cmVzZWVkX2ludGVydmFsICkgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19obWFjX2RyYmdfcmVzZWVkKCBjdHgsIGFkZGl0aW9uYWwsIGFkZF9sZW4gKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBhZGRfbGVuID0gMDsgLyogVklJLjQgKi8KKyAgICB9CisKKyAgICAvKiAyLiBVc2UgYWRkaXRpb25hbCBkYXRhIGlmIGFueSAqLworICAgIGlmKCBhZGRpdGlvbmFsICE9IE5VTEwgJiYgYWRkX2xlbiAhPSAwICkKKyAgICAgICAgbWJlZHRsc19obWFjX2RyYmdfdXBkYXRlKCBjdHgsIGFkZGl0aW9uYWwsIGFkZF9sZW4gKTsKKworICAgIC8qIDMsIDQsIDUuIEdlbmVyYXRlIGJ5dGVzICovCisgICAgd2hpbGUoIGxlZnQgIT0gMCApCisgICAgeworICAgICAgICBzaXplX3QgdXNlX2xlbiA9IGxlZnQgPiBtZF9sZW4gPyBtZF9sZW4gOiBsZWZ0OworCisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19yZXNldCggJmN0eC0+bWRfY3R4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZjdHgtPm1kX2N0eCwgY3R4LT5WLCBtZF9sZW4gKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJmN0eC0+bWRfY3R4LCBjdHgtPlYgKTsKKworICAgICAgICBtZW1jcHkoIG91dCwgY3R4LT5WLCB1c2VfbGVuICk7CisgICAgICAgIG91dCArPSB1c2VfbGVuOworICAgICAgICBsZWZ0IC09IHVzZV9sZW47CisgICAgfQorCisgICAgLyogNi4gVXBkYXRlICovCisgICAgbWJlZHRsc19obWFjX2RyYmdfdXBkYXRlKCBjdHgsIGFkZGl0aW9uYWwsIGFkZF9sZW4gKTsKKworICAgIC8qIDcuIFVwZGF0ZSByZXNlZWQgY291bnRlciAqLworICAgIGN0eC0+cmVzZWVkX2NvdW50ZXIrKzsKKworICAgIC8qIDguIERvbmUgKi8KKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEhNQUNfRFJCRyByYW5kb20gZnVuY3Rpb24KKyAqLworaW50IG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggdm9pZCAqcF9ybmcsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG91dF9sZW4gKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4ID0gKG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKikgcF9ybmc7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tdXRleF9sb2NrKCAmY3R4LT5tdXRleCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworICAgIHJldCA9IG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCggY3R4LCBvdXRwdXQsIG91dF9sZW4sIE5VTEwsIDAgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZjdHgtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SICk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBGcmVlIGFuIEhNQUNfRFJCRyBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc19tdXRleF9mcmVlKCAmY3R4LT5tdXRleCApOworI2VuZGlmCisgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4LT5tZF9jdHggKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICkgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYmVkdGxzX2htYWNfZHJiZ193cml0ZV9zZWVkX2ZpbGUoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApCit7CisgICAgaW50IHJldDsKKyAgICBGSUxFICpmOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWyBNQkVEVExTX0hNQUNfRFJCR19NQVhfSU5QVVQgXTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggcGF0aCwgIndiIiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggY3R4LCBidWYsIHNpemVvZiggYnVmICkgKSApICE9IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBpZiggZndyaXRlKCBidWYsIDEsIHNpemVvZiggYnVmICksIGYgKSAhPSBzaXplb2YoIGJ1ZiApICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0hNQUNfRFJCR19GSUxFX0lPX0VSUk9SOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gMDsKKworZXhpdDoKKyAgICBmY2xvc2UoIGYgKTsKKyAgICByZXR1cm4oIHJldCApOworfQorCitpbnQgbWJlZHRsc19obWFjX2RyYmdfdXBkYXRlX3NlZWRfZmlsZSggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoICkKK3sKKyAgICBGSUxFICpmOworICAgIHNpemVfdCBuOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWyBNQkVEVExTX0hNQUNfRFJCR19NQVhfSU5QVVQgXTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggcGF0aCwgInJiIiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IgKTsKKworICAgIGZzZWVrKCBmLCAwLCBTRUVLX0VORCApOworICAgIG4gPSAoc2l6ZV90KSBmdGVsbCggZiApOworICAgIGZzZWVrKCBmLCAwLCBTRUVLX1NFVCApOworCisgICAgaWYoIG4gPiBNQkVEVExTX0hNQUNfRFJCR19NQVhfSU5QVVQgKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfSE1BQ19EUkJHX0lOUFVUX1RPT19CSUcgKTsKKyAgICB9CisKKyAgICBpZiggZnJlYWQoIGJ1ZiwgMSwgbiwgZiApICE9IG4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIG1iZWR0bHNfaG1hY19kcmJnX3VwZGF0ZSggY3R4LCBidWYsIG4gKTsKKworICAgIHJldHVybiggbWJlZHRsc19obWFjX2RyYmdfd3JpdGVfc2VlZF9maWxlKCBjdHgsIHBhdGggKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworI2lmICFkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorLyogRHVtbXkgY2hlY2t1cCByb3V0aW5lICovCitpbnQgbWJlZHRsc19obWFjX2RyYmdfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgKHZvaWQpIHZlcmJvc2U7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjZGVmaW5lIE9VVFBVVF9MRU4gIDgwCisKKy8qIEZyb20gYSBOSVNUIFBSPXRydWUgdGVzdCB2ZWN0b3IgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVudHJvcHlfcHJbXSA9IHsKKyAgICAweGEwLCAweGM5LCAweGFiLCAweDU4LCAweGYxLCAweGUyLCAweGU1LCAweGE0LCAweGRlLCAweDNlLCAweGJkLCAweDRmLAorICAgIDB4ZjcsIDB4M2UsIDB4OWMsIDB4NWIsIDB4NjQsIDB4ZWYsIDB4ZDgsIDB4Y2EsIDB4MDIsIDB4OGMsIDB4ZjgsIDB4MTEsCisgICAgMHg0OCwgMHhhNSwgMHg4NCwgMHhmZSwgMHg2OSwgMHhhYiwgMHg1YSwgMHhlZSwgMHg0MiwgMHhhYSwgMHg0ZCwgMHg0MiwKKyAgICAweDE3LCAweDYwLCAweDk5LCAweGQ0LCAweDVlLCAweDEzLCAweDk3LCAweGRjLCAweDQwLCAweDRkLCAweDg2LCAweGEzLAorICAgIDB4N2IsIDB4ZjUsIDB4NTksIDB4NTQsIDB4NzUsIDB4NjksIDB4NTEsIDB4ZTQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlc3VsdF9wcltPVVRQVVRfTEVOXSA9IHsKKyAgICAweDlhLCAweDAwLCAweGEyLCAweGQwLCAweDBlLCAweGQ1LCAweDliLCAweGZlLCAweDMxLCAweGVjLCAweGIxLCAweDM5LAorICAgIDB4OWIsIDB4NjAsIDB4ODEsIDB4NDgsIDB4ZDEsIDB4OTYsIDB4OWQsIDB4MjUsIDB4MGQsIDB4M2MsIDB4MWUsIDB4OTQsCisgICAgMHgxMCwgMHgxMCwgMHg5OCwgMHgxMiwgMHg5MywgMHgyNSwgMHhjYSwgMHhiOCwgMHhmYywgMHhjYywgMHgyZCwgMHg1NCwKKyAgICAweDczLCAweDE5LCAweDcwLCAweGMwLCAweDEwLCAweDdhLCAweGE0LCAweDg5LCAweDI1LCAweDE5LCAweDk1LCAweDVlLAorICAgIDB4NGIsIDB4YzYsIDB4MDAsIDB4MWQsIDB4N2YsIDB4NGUsIDB4NmEsIDB4MmIsIDB4ZjgsIDB4YTMsIDB4MDEsIDB4YWIsCisgICAgMHg0NiwgMHgwNSwgMHg1YywgMHgwOSwgMHhhNiwgMHg3MSwgMHg4OCwgMHhmMSwgMHhhNywgMHg0MCwgMHhlZSwgMHhmMywKKyAgICAweGUxLCAweDVjLCAweDAyLCAweDliLCAweDQ0LCAweGFmLCAweDAzLCAweDQ0IH07CisKKy8qIEZyb20gYSBOSVNUIFBSPWZhbHNlIHRlc3QgdmVjdG9yICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlbnRyb3B5X25vcHJbXSA9IHsKKyAgICAweDc5LCAweDM0LCAweDliLCAweGJmLCAweDdjLCAweGRkLCAweGE1LCAweDc5LCAweDk1LCAweDU3LCAweDg2LCAweDY2LAorICAgIDB4MjEsIDB4YzksIDB4MTMsIDB4ODMsIDB4MTEsIDB4NDYsIDB4NzMsIDB4M2EsIDB4YmYsIDB4OGMsIDB4MzUsIDB4YzgsCisgICAgMHhjNywgMHgyMSwgMHg1YiwgMHg1YiwgMHg5NiwgMHhjNCwgMHg4ZSwgMHg5YiwgMHgzMywgMHg4YywgMHg3NCwgMHhlMywKKyAgICAweGU5LCAweDlkLCAweGZlLCAweGRmIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXN1bHRfbm9wcltPVVRQVVRfTEVOXSA9IHsKKyAgICAweGM2LCAweGExLCAweDZhLCAweGI4LCAweGQ0LCAweDIwLCAweDcwLCAweDZmLCAweDBmLCAweDM0LCAweGFiLCAweDdmLAorICAgIDB4ZWMsIDB4NWEsIDB4ZGMsIDB4YTksIDB4ZDgsIDB4Y2EsIDB4M2EsIDB4MTMsIDB4M2UsIDB4MTUsIDB4OWMsIDB4YTYsCisgICAgMHhhYywgMHg0MywgMHhjNiwgMHhmOCwgMHhhMiwgMHhiZSwgMHgyMiwgMHg4MywgMHg0YSwgMHg0YywgMHgwYSwgMHgwYSwKKyAgICAweGZmLCAweGIxLCAweDBkLCAweDcxLCAweDk0LCAweGYxLCAweGMxLCAweGE1LCAweGNmLCAweDczLCAweDIyLCAweGVjLAorICAgIDB4MWEsIDB4ZTAsIDB4OTYsIDB4NGUsIDB4ZDQsIDB4YmYsIDB4MTIsIDB4MjcsIDB4NDYsIDB4ZTAsIDB4ODcsIDB4ZmQsCisgICAgMHhiNSwgMHhiMywgMHhlOSwgMHgxYiwgMHgzNCwgMHg5MywgMHhkNSwgMHhiYiwgMHg5OCwgMHhmYSwgMHhlZCwgMHg0OSwKKyAgICAweGU4LCAweDVmLCAweDEzLCAweDBmLCAweGM4LCAweGE0LCAweDU5LCAweGI3IH07CisKKy8qICJFbnRyb3B5IiBmcm9tIGJ1ZmZlciAqLworc3RhdGljIHNpemVfdCB0ZXN0X29mZnNldDsKK3N0YXRpYyBpbnQgaG1hY19kcmJnX3NlbGZfdGVzdF9lbnRyb3B5KCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IGRhdGE7CisgICAgbWVtY3B5KCBidWYsIHAgKyB0ZXN0X29mZnNldCwgbGVuICk7CisgICAgdGVzdF9vZmZzZXQgKz0gbGVuOworICAgIHJldHVybiggMCApOworfQorCisjZGVmaW5lIENISyggYyApICAgIGlmKCAoYykgIT0gMCApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiggMSApOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgfQorCisvKgorICogQ2hlY2t1cCByb3V0aW5lIGZvciBITUFDX0RSQkcgd2l0aCBTSEEtMQorICovCitpbnQgbWJlZHRsc19obWFjX2RyYmdfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBidWZbT1VUUFVUX0xFTl07CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTEgKTsKKworICAgIG1iZWR0bHNfaG1hY19kcmJnX2luaXQoICZjdHggKTsKKworICAgIC8qCisgICAgICogUFIgPSBUcnVlCisgICAgICovCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBITUFDX0RSQkcgKFBSID0gVHJ1ZSkgOiAiICk7CisKKyAgICB0ZXN0X29mZnNldCA9IDA7CisgICAgQ0hLKCBtYmVkdGxzX2htYWNfZHJiZ19zZWVkKCAmY3R4LCBtZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhtYWNfZHJiZ19zZWxmX3Rlc3RfZW50cm9weSwgKHZvaWQgKikgZW50cm9weV9wciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwICkgKTsKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmY3R4LCBNQkVEVExTX0hNQUNfRFJCR19QUl9PTiApOworICAgIENISyggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmY3R4LCBidWYsIE9VVFBVVF9MRU4gKSApOworICAgIENISyggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmY3R4LCBidWYsIE9VVFBVVF9MRU4gKSApOworICAgIENISyggbWVtY21wKCBidWYsIHJlc3VsdF9wciwgT1VUUFVUX0xFTiApICk7CisgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmN0eCApOworCisgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmN0eCApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICAvKgorICAgICAqIFBSID0gRmFsc2UKKyAgICAgKi8KKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEhNQUNfRFJCRyAoUFIgPSBGYWxzZSkgOiAiICk7CisKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19pbml0KCAmY3R4ICk7CisKKyAgICB0ZXN0X29mZnNldCA9IDA7CisgICAgQ0hLKCBtYmVkdGxzX2htYWNfZHJiZ19zZWVkKCAmY3R4LCBtZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhtYWNfZHJiZ19zZWxmX3Rlc3RfZW50cm9weSwgKHZvaWQgKikgZW50cm9weV9ub3ByLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAgKSApOworICAgIENISyggbWJlZHRsc19obWFjX2RyYmdfcmVzZWVkKCAmY3R4LCBOVUxMLCAwICkgKTsKKyAgICBDSEsoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggJmN0eCwgYnVmLCBPVVRQVVRfTEVOICkgKTsKKyAgICBDSEsoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggJmN0eCwgYnVmLCBPVVRQVVRfTEVOICkgKTsKKyAgICBDSEsoIG1lbWNtcCggYnVmLCByZXN1bHRfbm9wciwgT1VUUFVUX0xFTiApICk7CisgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmN0eCApOworCisgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmN0eCApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfSE1BQ19EUkJHX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L21kLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTk4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZC5jCkBAIC0wLDAgKzEsNDcxIEBACisvKioKKyAqIFxmaWxlIG1iZWR0bHNfbWQuYworICoKKyAqIFxicmllZiBHZW5lcmljIG1lc3NhZ2UgZGlnZXN0IHdyYXBwZXIgZm9yIG1iZWQgVExTCisgKgorICogXGF1dGhvciBBZHJpYWFuIGRlIEpvbmcgPGRlam9uZ0Bmb3gtaXQuY29tPgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZF9pbnRlcm5hbC5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIFJlbWluZGVyOiB1cGRhdGUgcHJvZmlsZXMgaW4geDUwOV9jcnQuYyB3aGVuIGFkZGluZyBhIG5ldyBoYXNoIQorICovCitzdGF0aWMgY29uc3QgaW50IHN1cHBvcnRlZF9kaWdlc3RzW10gPSB7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgICAgIE1CRURUTFNfTURfU0hBNTEyLAorICAgICAgICBNQkVEVExTX01EX1NIQTM4NCwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgICAgICBNQkVEVExTX01EX1NIQTI1NiwKKyAgICAgICAgTUJFRFRMU19NRF9TSEEyMjQsCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgICAgIE1CRURUTFNfTURfU0hBMSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JJUEVNRDE2MF9DKQorICAgICAgICBNQkVEVExTX01EX1JJUEVNRDE2MCwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorICAgICAgICBNQkVEVExTX01EX01ENSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorICAgICAgICBNQkVEVExTX01EX01ENCwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01EMl9DKQorICAgICAgICBNQkVEVExTX01EX01EMiwKKyNlbmRpZgorCisgICAgICAgIE1CRURUTFNfTURfTk9ORQorfTsKKworY29uc3QgaW50ICptYmVkdGxzX21kX2xpc3QoIHZvaWQgKQoreworICAgIHJldHVybiggc3VwcG9ydGVkX2RpZ2VzdHMgKTsKK30KKworY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1iZWR0bHNfbWRfaW5mb19mcm9tX3N0cmluZyggY29uc3QgY2hhciAqbWRfbmFtZSApCit7CisgICAgaWYoIE5VTEwgPT0gbWRfbmFtZSApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgLyogR2V0IHRoZSBhcHByb3ByaWF0ZSBkaWdlc3QgaW5mb3JtYXRpb24gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQyX0MpCisgICAgaWYoICFzdHJjbXAoICJNRDIiLCBtZF9uYW1lICkgKQorICAgICAgICByZXR1cm4gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9NRDIgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19NRDRfQykKKyAgICBpZiggIXN0cmNtcCggIk1ENCIsIG1kX25hbWUgKSApCisgICAgICAgIHJldHVybiBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX01ENCApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorICAgIGlmKCAhc3RyY21wKCAiTUQ1IiwgbWRfbmFtZSApICkKKyAgICAgICAgcmV0dXJuIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfTUQ1ICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCisgICAgaWYoICFzdHJjbXAoICJSSVBFTUQxNjAiLCBtZF9uYW1lICkgKQorICAgICAgICByZXR1cm4gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9SSVBFTUQxNjAgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgaWYoICFzdHJjbXAoICJTSEExIiwgbWRfbmFtZSApIHx8ICFzdHJjbXAoICJTSEEiLCBtZF9uYW1lICkgKQorICAgICAgICByZXR1cm4gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEExICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgaWYoICFzdHJjbXAoICJTSEEyMjQiLCBtZF9uYW1lICkgKQorICAgICAgICByZXR1cm4gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEEyMjQgKTsKKyAgICBpZiggIXN0cmNtcCggIlNIQTI1NiIsIG1kX25hbWUgKSApCisgICAgICAgIHJldHVybiBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTI1NiApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIGlmKCAhc3RyY21wKCAiU0hBMzg0IiwgbWRfbmFtZSApICkKKyAgICAgICAgcmV0dXJuIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMzg0ICk7CisgICAgaWYoICFzdHJjbXAoICJTSEE1MTIiLCBtZF9uYW1lICkgKQorICAgICAgICByZXR1cm4gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEE1MTIgKTsKKyNlbmRpZgorICAgIHJldHVybiggTlVMTCApOworfQorCitjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWJlZHRsc19tZF90eXBlX3QgbWRfdHlwZSApCit7CisgICAgc3dpdGNoKCBtZF90eXBlICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01EMl9DKQorICAgICAgICBjYXNlIE1CRURUTFNfTURfTUQyOgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19tZDJfaW5mbyApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorICAgICAgICBjYXNlIE1CRURUTFNfTURfTUQ0OgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19tZDRfaW5mbyApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorICAgICAgICBjYXNlIE1CRURUTFNfTURfTUQ1OgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19tZDVfaW5mbyApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1JJUEVNRDE2MF9DKQorICAgICAgICBjYXNlIE1CRURUTFNfTURfUklQRU1EMTYwOgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19yaXBlbWQxNjBfaW5mbyApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX01EX1NIQTE6CisgICAgICAgICAgICByZXR1cm4oICZtYmVkdGxzX3NoYTFfaW5mbyApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBMjI0OgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19zaGEyMjRfaW5mbyApOworICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBMjU2OgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19zaGEyNTZfaW5mbyApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBMzg0OgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19zaGEzODRfaW5mbyApOworICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBNTEyOgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19zaGE1MTJfaW5mbyApOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIE5VTEwgKTsKKyAgICB9Cit9CisKK3ZvaWQgbWJlZHRsc19tZF9pbml0KCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX21kX2NvbnRleHRfdCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19tZF9mcmVlKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5tZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiggY3R4LT5tZF9jdHggIT0gTlVMTCApCisgICAgICAgIGN0eC0+bWRfaW5mby0+Y3R4X2ZyZWVfZnVuYyggY3R4LT5tZF9jdHggKTsKKworICAgIGlmKCBjdHgtPmhtYWNfY3R4ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBjdHgtPmhtYWNfY3R4LCAyICogY3R4LT5tZF9pbmZvLT5ibG9ja19zaXplICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggY3R4LT5obWFjX2N0eCApOworICAgIH0KKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfbWRfY29udGV4dF90ICkgKTsKK30KKworaW50IG1iZWR0bHNfbWRfY2xvbmUoIG1iZWR0bHNfbWRfY29udGV4dF90ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tZF9jb250ZXh0X3QgKnNyYyApCit7CisgICAgaWYoIGRzdCA9PSBOVUxMIHx8IGRzdC0+bWRfaW5mbyA9PSBOVUxMIHx8CisgICAgICAgIHNyYyA9PSBOVUxMIHx8IHNyYy0+bWRfaW5mbyA9PSBOVUxMIHx8CisgICAgICAgIGRzdC0+bWRfaW5mbyAhPSBzcmMtPm1kX2luZm8gKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGRzdC0+bWRfaW5mby0+Y2xvbmVfZnVuYyggZHN0LT5tZF9jdHgsIHNyYy0+bWRfY3R4ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmICEgZGVmaW5lZChNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRCkKK2ludCBtYmVkdGxzX21kX2luaXRfY3R4KCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfbWRfc2V0dXAoIGN0eCwgbWRfaW5mbywgMSApOworfQorI2VuZGlmCisKK2ludCBtYmVkdGxzX21kX3NldHVwKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbywgaW50IGhtYWMgKQoreworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgfHwgY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggKCBjdHgtPm1kX2N0eCA9IG1kX2luZm8tPmN0eF9hbGxvY19mdW5jKCkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NRF9BTExPQ19GQUlMRUQgKTsKKworICAgIGlmKCBobWFjICE9IDAgKQorICAgIHsKKyAgICAgICAgY3R4LT5obWFjX2N0eCA9IG1iZWR0bHNfY2FsbG9jKCAyLCBtZF9pbmZvLT5ibG9ja19zaXplICk7CisgICAgICAgIGlmKCBjdHgtPmhtYWNfY3R4ID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBtZF9pbmZvLT5jdHhfZnJlZV9mdW5jKCBjdHgtPm1kX2N0eCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NRF9BTExPQ19GQUlMRUQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGN0eC0+bWRfaW5mbyA9IG1kX2luZm87CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfbWRfc3RhcnRzKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5tZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBjdHgtPm1kX2luZm8tPnN0YXJ0c19mdW5jKCBjdHgtPm1kX2N0eCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX21kX3VwZGF0ZSggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5tZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBjdHgtPm1kX2luZm8tPnVwZGF0ZV9mdW5jKCBjdHgtPm1kX2N0eCwgaW5wdXQsIGlsZW4gKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19tZF9maW5pc2goIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+bWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworCisgICAgY3R4LT5tZF9pbmZvLT5maW5pc2hfZnVuYyggY3R4LT5tZF9jdHgsIG91dHB1dCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX21kKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbywgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworCisgICAgbWRfaW5mby0+ZGlnZXN0X2Z1bmMoIGlucHV0LCBpbGVuLCBvdXRwdXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1iZWR0bHNfbWRfZmlsZSggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IHJldDsKKyAgICBGSUxFICpmOworICAgIHNpemVfdCBuOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIHBhdGgsICJyYiIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0ZJTEVfSU9fRVJST1IgKTsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJmN0eCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJmN0eCwgbWRfaW5mbywgMCApICkgIT0gMCApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIG1kX2luZm8tPnN0YXJ0c19mdW5jKCBjdHgubWRfY3R4ICk7CisKKyAgICB3aGlsZSggKCBuID0gZnJlYWQoIGJ1ZiwgMSwgc2l6ZW9mKCBidWYgKSwgZiApICkgPiAwICkKKyAgICAgICAgbWRfaW5mby0+dXBkYXRlX2Z1bmMoIGN0eC5tZF9jdHgsIGJ1ZiwgbiApOworCisgICAgaWYoIGZlcnJvciggZiApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfTURfRklMRV9JT19FUlJPUjsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIG1kX2luZm8tPmZpbmlzaF9mdW5jKCBjdHgubWRfY3R4LCBvdXRwdXQgKTsKKworY2xlYW51cDoKKyAgICBmY2xvc2UoIGYgKTsKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHggKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworCitpbnQgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHN1bVtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyICppcGFkLCAqb3BhZDsKKyAgICBzaXplX3QgaTsKKworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPm1kX2luZm8gPT0gTlVMTCB8fCBjdHgtPmhtYWNfY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZigga2V5bGVuID4gKHNpemVfdCkgY3R4LT5tZF9pbmZvLT5ibG9ja19zaXplICkKKyAgICB7CisgICAgICAgIGN0eC0+bWRfaW5mby0+c3RhcnRzX2Z1bmMoIGN0eC0+bWRfY3R4ICk7CisgICAgICAgIGN0eC0+bWRfaW5mby0+dXBkYXRlX2Z1bmMoIGN0eC0+bWRfY3R4LCBrZXksIGtleWxlbiApOworICAgICAgICBjdHgtPm1kX2luZm8tPmZpbmlzaF9mdW5jKCBjdHgtPm1kX2N0eCwgc3VtICk7CisKKyAgICAgICAga2V5bGVuID0gY3R4LT5tZF9pbmZvLT5zaXplOworICAgICAgICBrZXkgPSBzdW07CisgICAgfQorCisgICAgaXBhZCA9ICh1bnNpZ25lZCBjaGFyICopIGN0eC0+aG1hY19jdHg7CisgICAgb3BhZCA9ICh1bnNpZ25lZCBjaGFyICopIGN0eC0+aG1hY19jdHggKyBjdHgtPm1kX2luZm8tPmJsb2NrX3NpemU7CisKKyAgICBtZW1zZXQoIGlwYWQsIDB4MzYsIGN0eC0+bWRfaW5mby0+YmxvY2tfc2l6ZSApOworICAgIG1lbXNldCggb3BhZCwgMHg1QywgY3R4LT5tZF9pbmZvLT5ibG9ja19zaXplICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwga2V5bGVuOyBpKysgKQorICAgIHsKKyAgICAgICAgaXBhZFtpXSA9ICh1bnNpZ25lZCBjaGFyKSggaXBhZFtpXSBeIGtleVtpXSApOworICAgICAgICBvcGFkW2ldID0gKHVuc2lnbmVkIGNoYXIpKCBvcGFkW2ldIF4ga2V5W2ldICk7CisgICAgfQorCisgICAgbWJlZHRsc196ZXJvaXplKCBzdW0sIHNpemVvZiggc3VtICkgKTsKKworICAgIGN0eC0+bWRfaW5mby0+c3RhcnRzX2Z1bmMoIGN0eC0+bWRfY3R4ICk7CisgICAgY3R4LT5tZF9pbmZvLT51cGRhdGVfZnVuYyggY3R4LT5tZF9jdHgsIGlwYWQsIGN0eC0+bWRfaW5mby0+YmxvY2tfc2l6ZSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPm1kX2luZm8gPT0gTlVMTCB8fCBjdHgtPmhtYWNfY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBjdHgtPm1kX2luZm8tPnVwZGF0ZV9mdW5jKCBjdHgtPm1kX2N0eCwgaW5wdXQsIGlsZW4gKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHRtcFtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyICpvcGFkOworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+bWRfaW5mbyA9PSBOVUxMIHx8IGN0eC0+aG1hY19jdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG9wYWQgPSAodW5zaWduZWQgY2hhciAqKSBjdHgtPmhtYWNfY3R4ICsgY3R4LT5tZF9pbmZvLT5ibG9ja19zaXplOworCisgICAgY3R4LT5tZF9pbmZvLT5maW5pc2hfZnVuYyggY3R4LT5tZF9jdHgsIHRtcCApOworICAgIGN0eC0+bWRfaW5mby0+c3RhcnRzX2Z1bmMoIGN0eC0+bWRfY3R4ICk7CisgICAgY3R4LT5tZF9pbmZvLT51cGRhdGVfZnVuYyggY3R4LT5tZF9jdHgsIG9wYWQsIGN0eC0+bWRfaW5mby0+YmxvY2tfc2l6ZSApOworICAgIGN0eC0+bWRfaW5mby0+dXBkYXRlX2Z1bmMoIGN0eC0+bWRfY3R4LCB0bXAsIGN0eC0+bWRfaW5mby0+c2l6ZSApOworICAgIGN0eC0+bWRfaW5mby0+ZmluaXNoX2Z1bmMoIGN0eC0+bWRfY3R4LCBvdXRwdXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19tZF9obWFjX3Jlc2V0KCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICppcGFkOworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+bWRfaW5mbyA9PSBOVUxMIHx8IGN0eC0+aG1hY19jdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlwYWQgPSAodW5zaWduZWQgY2hhciAqKSBjdHgtPmhtYWNfY3R4OworCisgICAgY3R4LT5tZF9pbmZvLT5zdGFydHNfZnVuYyggY3R4LT5tZF9jdHggKTsKKyAgICBjdHgtPm1kX2luZm8tPnVwZGF0ZV9mdW5jKCBjdHgtPm1kX2N0eCwgaXBhZCwgY3R4LT5tZF9pbmZvLT5ibG9ja19zaXplICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfbWRfaG1hYyggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBjdHg7CisgICAgaW50IHJldDsKKworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZjdHggKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZjdHgsIG1kX2luZm8sIDEgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggJmN0eCwga2V5LCBrZXlsZW4gKTsKKyAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmY3R4LCBpbnB1dCwgaWxlbiApOworICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZjdHgsIG91dHB1dCApOworCisgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfbWRfcHJvY2VzcyggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+bWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworCisgICAgY3R4LT5tZF9pbmZvLT5wcm9jZXNzX2Z1bmMoIGN0eC0+bWRfY3R4LCBkYXRhICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKwordW5zaWduZWQgY2hhciBtYmVkdGxzX21kX2dldF9zaXplKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyApCit7CisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgcmV0dXJuIG1kX2luZm8tPnNpemU7Cit9CisKK21iZWR0bHNfbWRfdHlwZV90IG1iZWR0bHNfbWRfZ2V0X3R5cGUoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvICkKK3sKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX01EX05PTkUgKTsKKworICAgIHJldHVybiBtZF9pbmZvLT50eXBlOworfQorCitjb25zdCBjaGFyICptYmVkdGxzX21kX2dldF9uYW1lKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyApCit7CisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgcmV0dXJuIG1kX2luZm8tPm5hbWU7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX01EX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L21kMi5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbWQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3NjcwMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L21kMi5jCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogIFJGQyAxMTE1LzEzMTkgY29tcGxpYW50IE1EMiBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgTUQyIGFsZ29yaXRobSB3YXMgZGVzaWduZWQgYnkgUm9uIFJpdmVzdCBpbiAxOTg5LgorICoKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxMTE1LnR4dAorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzEzMTkudHh0CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDJfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvbWQyLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBwcmludGYKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19NRDJfQUxUKQorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBQSV9TVUJTVFsyNTZdID0KK3sKKyAgICAweDI5LCAweDJFLCAweDQzLCAweEM5LCAweEEyLCAweEQ4LCAweDdDLCAweDAxLCAweDNELCAweDM2LAorICAgIDB4NTQsIDB4QTEsIDB4RUMsIDB4RjAsIDB4MDYsIDB4MTMsIDB4NjIsIDB4QTcsIDB4MDUsIDB4RjMsCisgICAgMHhDMCwgMHhDNywgMHg3MywgMHg4QywgMHg5OCwgMHg5MywgMHgyQiwgMHhEOSwgMHhCQywgMHg0QywKKyAgICAweDgyLCAweENBLCAweDFFLCAweDlCLCAweDU3LCAweDNDLCAweEZELCAweEQ0LCAweEUwLCAweDE2LAorICAgIDB4NjcsIDB4NDIsIDB4NkYsIDB4MTgsIDB4OEEsIDB4MTcsIDB4RTUsIDB4MTIsIDB4QkUsIDB4NEUsCisgICAgMHhDNCwgMHhENiwgMHhEQSwgMHg5RSwgMHhERSwgMHg0OSwgMHhBMCwgMHhGQiwgMHhGNSwgMHg4RSwKKyAgICAweEJCLCAweDJGLCAweEVFLCAweDdBLCAweEE5LCAweDY4LCAweDc5LCAweDkxLCAweDE1LCAweEIyLAorICAgIDB4MDcsIDB4M0YsIDB4OTQsIDB4QzIsIDB4MTAsIDB4ODksIDB4MEIsIDB4MjIsIDB4NUYsIDB4MjEsCisgICAgMHg4MCwgMHg3RiwgMHg1RCwgMHg5QSwgMHg1QSwgMHg5MCwgMHgzMiwgMHgyNywgMHgzNSwgMHgzRSwKKyAgICAweENDLCAweEU3LCAweEJGLCAweEY3LCAweDk3LCAweDAzLCAweEZGLCAweDE5LCAweDMwLCAweEIzLAorICAgIDB4NDgsIDB4QTUsIDB4QjUsIDB4RDEsIDB4RDcsIDB4NUUsIDB4OTIsIDB4MkEsIDB4QUMsIDB4NTYsCisgICAgMHhBQSwgMHhDNiwgMHg0RiwgMHhCOCwgMHgzOCwgMHhEMiwgMHg5NiwgMHhBNCwgMHg3RCwgMHhCNiwKKyAgICAweDc2LCAweEZDLCAweDZCLCAweEUyLCAweDlDLCAweDc0LCAweDA0LCAweEYxLCAweDQ1LCAweDlELAorICAgIDB4NzAsIDB4NTksIDB4NjQsIDB4NzEsIDB4ODcsIDB4MjAsIDB4ODYsIDB4NUIsIDB4Q0YsIDB4NjUsCisgICAgMHhFNiwgMHgyRCwgMHhBOCwgMHgwMiwgMHgxQiwgMHg2MCwgMHgyNSwgMHhBRCwgMHhBRSwgMHhCMCwKKyAgICAweEI5LCAweEY2LCAweDFDLCAweDQ2LCAweDYxLCAweDY5LCAweDM0LCAweDQwLCAweDdFLCAweDBGLAorICAgIDB4NTUsIDB4NDcsIDB4QTMsIDB4MjMsIDB4REQsIDB4NTEsIDB4QUYsIDB4M0EsIDB4QzMsIDB4NUMsCisgICAgMHhGOSwgMHhDRSwgMHhCQSwgMHhDNSwgMHhFQSwgMHgyNiwgMHgyQywgMHg1MywgMHgwRCwgMHg2RSwKKyAgICAweDg1LCAweDI4LCAweDg0LCAweDA5LCAweEQzLCAweERGLCAweENELCAweEY0LCAweDQxLCAweDgxLAorICAgIDB4NEQsIDB4NTIsIDB4NkEsIDB4REMsIDB4MzcsIDB4QzgsIDB4NkMsIDB4QzEsIDB4QUIsIDB4RkEsCisgICAgMHgyNCwgMHhFMSwgMHg3QiwgMHgwOCwgMHgwQywgMHhCRCwgMHhCMSwgMHg0QSwgMHg3OCwgMHg4OCwKKyAgICAweDk1LCAweDhCLCAweEUzLCAweDYzLCAweEU4LCAweDZELCAweEU5LCAweENCLCAweEQ1LCAweEZFLAorICAgIDB4M0IsIDB4MDAsIDB4MUQsIDB4MzksIDB4RjIsIDB4RUYsIDB4QjcsIDB4MEUsIDB4NjYsIDB4NTgsCisgICAgMHhEMCwgMHhFNCwgMHhBNiwgMHg3NywgMHg3MiwgMHhGOCwgMHhFQiwgMHg3NSwgMHg0QiwgMHgwQSwKKyAgICAweDMxLCAweDQ0LCAweDUwLCAweEI0LCAweDhGLCAweEVELCAweDFGLCAweDFBLCAweERCLCAweDk5LAorICAgIDB4OEQsIDB4MzMsIDB4OUYsIDB4MTEsIDB4ODMsIDB4MTQKK307CisKK3ZvaWQgbWJlZHRsc19tZDJfaW5pdCggbWJlZHRsc19tZDJfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX21kMl9jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX21kMl9mcmVlKCBtYmVkdGxzX21kMl9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfbWQyX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfbWQyX2Nsb25lKCBtYmVkdGxzX21kMl9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kMl9jb250ZXh0ICpzcmMgKQoreworICAgICpkc3QgPSAqc3JjOworfQorCisvKgorICogTUQyIGNvbnRleHQgc2V0dXAKKyAqLwordm9pZCBtYmVkdGxzX21kMl9zdGFydHMoIG1iZWR0bHNfbWQyX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgtPmNrc3VtLCAwLCAxNiApOworICAgIG1lbXNldCggY3R4LT5zdGF0ZSwgMCwgNDYgKTsKKyAgICBtZW1zZXQoIGN0eC0+YnVmZmVyLCAwLCAxNiApOworICAgIGN0eC0+bGVmdCA9IDA7Cit9CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01EMl9QUk9DRVNTX0FMVCkKK3ZvaWQgbWJlZHRsc19tZDJfcHJvY2VzcyggbWJlZHRsc19tZDJfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpbnQgaSwgajsKKyAgICB1bnNpZ25lZCBjaGFyIHQgPSAwOworCisgICAgZm9yKCBpID0gMDsgaSA8IDE2OyBpKysgKQorICAgIHsKKyAgICAgICAgY3R4LT5zdGF0ZVtpICsgMTZdID0gY3R4LT5idWZmZXJbaV07CisgICAgICAgIGN0eC0+c3RhdGVbaSArIDMyXSA9CisgICAgICAgICAgICAodW5zaWduZWQgY2hhcikoIGN0eC0+YnVmZmVyW2ldIF4gY3R4LT5zdGF0ZVtpXSk7CisgICAgfQorCisgICAgZm9yKCBpID0gMDsgaSA8IDE4OyBpKysgKQorICAgIHsKKyAgICAgICAgZm9yKCBqID0gMDsgaiA8IDQ4OyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgICBjdHgtPnN0YXRlW2pdID0gKHVuc2lnbmVkIGNoYXIpCisgICAgICAgICAgICAgICAoIGN0eC0+c3RhdGVbal0gXiBQSV9TVUJTVFt0XSApOworICAgICAgICAgICAgdCAgPSBjdHgtPnN0YXRlW2pdOworICAgICAgICB9CisKKyAgICAgICAgdCA9ICh1bnNpZ25lZCBjaGFyKSggdCArIGkgKTsKKyAgICB9CisKKyAgICB0ID0gY3R4LT5ja3N1bVsxNV07CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgeworICAgICAgICBjdHgtPmNrc3VtW2ldID0gKHVuc2lnbmVkIGNoYXIpCisgICAgICAgICAgICggY3R4LT5ja3N1bVtpXSBeIFBJX1NVQlNUW2N0eC0+YnVmZmVyW2ldIF4gdF0gKTsKKyAgICAgICAgdCAgPSBjdHgtPmNrc3VtW2ldOworICAgIH0KK30KKyNlbmRpZiAvKiAhTUJFRFRMU19NRDJfUFJPQ0VTU19BTFQgKi8KKworLyoKKyAqIE1EMiBwcm9jZXNzIGJ1ZmZlcgorICovCit2b2lkIG1iZWR0bHNfbWQyX3VwZGF0ZSggbWJlZHRsc19tZDJfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKQoreworICAgIHNpemVfdCBmaWxsOworCisgICAgd2hpbGUoIGlsZW4gPiAwICkKKyAgICB7CisgICAgICAgIGlmKCBjdHgtPmxlZnQgKyBpbGVuID4gMTYgKQorICAgICAgICAgICAgZmlsbCA9IDE2IC0gY3R4LT5sZWZ0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBmaWxsID0gaWxlbjsKKworICAgICAgICBtZW1jcHkoIGN0eC0+YnVmZmVyICsgY3R4LT5sZWZ0LCBpbnB1dCwgZmlsbCApOworCisgICAgICAgIGN0eC0+bGVmdCArPSBmaWxsOworICAgICAgICBpbnB1dCArPSBmaWxsOworICAgICAgICBpbGVuICAtPSBmaWxsOworCisgICAgICAgIGlmKCBjdHgtPmxlZnQgPT0gMTYgKQorICAgICAgICB7CisgICAgICAgICAgICBjdHgtPmxlZnQgPSAwOworICAgICAgICAgICAgbWJlZHRsc19tZDJfcHJvY2VzcyggY3R4ICk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qCisgKiBNRDIgZmluYWwgZGlnZXN0CisgKi8KK3ZvaWQgbWJlZHRsc19tZDJfZmluaXNoKCBtYmVkdGxzX21kMl9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCit7CisgICAgc2l6ZV90IGk7CisgICAgdW5zaWduZWQgY2hhciB4OworCisgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSggMTYgLSBjdHgtPmxlZnQgKTsKKworICAgIGZvciggaSA9IGN0eC0+bGVmdDsgaSA8IDE2OyBpKysgKQorICAgICAgICBjdHgtPmJ1ZmZlcltpXSA9IHg7CisKKyAgICBtYmVkdGxzX21kMl9wcm9jZXNzKCBjdHggKTsKKworICAgIG1lbWNweSggY3R4LT5idWZmZXIsIGN0eC0+Y2tzdW0sIDE2ICk7CisgICAgbWJlZHRsc19tZDJfcHJvY2VzcyggY3R4ICk7CisKKyAgICBtZW1jcHkoIG91dHB1dCwgY3R4LT5zdGF0ZSwgMTYgKTsKK30KKworI2VuZGlmIC8qICFNQkVEVExTX01EMl9BTFQgKi8KKworLyoKKyAqIG91dHB1dCA9IE1EMiggaW5wdXQgYnVmZmVyICkKKyAqLwordm9pZCBtYmVkdGxzX21kMiggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLCB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKQoreworICAgIG1iZWR0bHNfbWQyX2NvbnRleHQgY3R4OworCisgICAgbWJlZHRsc19tZDJfaW5pdCggJmN0eCApOworICAgIG1iZWR0bHNfbWQyX3N0YXJ0cyggJmN0eCApOworICAgIG1iZWR0bHNfbWQyX3VwZGF0ZSggJmN0eCwgaW5wdXQsIGlsZW4gKTsKKyAgICBtYmVkdGxzX21kMl9maW5pc2goICZjdHgsIG91dHB1dCApOworICAgIG1iZWR0bHNfbWQyX2ZyZWUoICZjdHggKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKKy8qCisgKiBSRkMgMTMxOSB0ZXN0IHZlY3RvcnMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgbWQyX3Rlc3Rfc3RyWzddWzgxXSA9Cit7CisgICAgeyAiIiB9LAorICAgIHsgImEiIH0sCisgICAgeyAiYWJjIiB9LAorICAgIHsgIm1lc3NhZ2UgZGlnZXN0IiB9LAorICAgIHsgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiB9LAorICAgIHsgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IiB9LAorICAgIHsgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyIiBcCisgICAgICAiMzQ1Njc4OTAxMjM0NTY3ODkwIiB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtZDJfdGVzdF9zdW1bN11bMTZdID0KK3sKKyAgICB7IDB4ODMsIDB4NTAsIDB4RTUsIDB4QTMsIDB4RTIsIDB4NEMsIDB4MTUsIDB4M0QsCisgICAgICAweEYyLCAweDI3LCAweDVDLCAweDlGLCAweDgwLCAweDY5LCAweDI3LCAweDczIH0sCisgICAgeyAweDMyLCAweEVDLCAweDAxLCAweEVDLCAweDRBLCAweDZELCAweEFDLCAweDcyLAorICAgICAgMHhDMCwgMHhBQiwgMHg5NiwgMHhGQiwgMHgzNCwgMHhDMCwgMHhCNSwgMHhEMSB9LAorICAgIHsgMHhEQSwgMHg4NSwgMHgzQiwgMHgwRCwgMHgzRiwgMHg4OCwgMHhEOSwgMHg5QiwKKyAgICAgIDB4MzAsIDB4MjgsIDB4M0EsIDB4NjksIDB4RTYsIDB4REUsIDB4RDYsIDB4QkIgfSwKKyAgICB7IDB4QUIsIDB4NEYsIDB4NDksIDB4NkIsIDB4RkIsIDB4MkEsIDB4NTMsIDB4MEIsCisgICAgICAweDIxLCAweDlGLCAweEYzLCAweDMwLCAweDMxLCAweEZFLCAweDA2LCAweEIwIH0sCisgICAgeyAweDRFLCAweDhELCAweERGLCAweEYzLCAweDY1LCAweDAyLCAweDkyLCAweEFCLAorICAgICAgMHg1QSwgMHg0MSwgMHgwOCwgMHhDMywgMHhBQSwgMHg0NywgMHg5NCwgMHgwQiB9LAorICAgIHsgMHhEQSwgMHgzMywgMHhERSwgMHhGMiwgMHhBNCwgMHgyRCwgMHhGMSwgMHgzOSwKKyAgICAgIDB4NzUsIDB4MzUsIDB4MjgsIDB4NDYsIDB4QzMsIDB4MDMsIDB4MzgsIDB4Q0QgfSwKKyAgICB7IDB4RDUsIDB4OTcsIDB4NkYsIDB4NzksIDB4RDgsIDB4M0QsIDB4M0EsIDB4MEQsCisgICAgICAweEM5LCAweDgwLCAweDZDLCAweDNDLCAweDY2LCAweEYzLCAweEVGLCAweEQ4IH0KK307CisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfbWQyX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCBpOworICAgIHVuc2lnbmVkIGNoYXIgbWQyc3VtWzE2XTsKKworICAgIGZvciggaSA9IDA7IGkgPCA3OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgTUQyIHRlc3QgIyVkOiAiLCBpICsgMSApOworCisgICAgICAgIG1iZWR0bHNfbWQyKCAodW5zaWduZWQgY2hhciAqKSBtZDJfdGVzdF9zdHJbaV0sCisgICAgICAgICAgICAgc3RybGVuKCBtZDJfdGVzdF9zdHJbaV0gKSwgbWQyc3VtICk7CisKKyAgICAgICAgaWYoIG1lbWNtcCggbWQyc3VtLCBtZDJfdGVzdF9zdW1baV0sIDE2ICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19NRDJfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbWQ0LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWE3N2UzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbWQ0LmMKQEAgLTAsMCArMSwzODQgQEAKKy8qCisgKiAgUkZDIDExODYvMTMyMCBjb21wbGlhbnQgTUQ0IGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBNRDQgYWxnb3JpdGhtIHdhcyBkZXNpZ25lZCBieSBSb24gUml2ZXN0IGluIDE5OTAuCisgKgorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzExODYudHh0CisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTMyMC50eHQKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorCisjaW5jbHVkZSAibWJlZHRscy9tZDQuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01ENF9BTFQpCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiAzMi1iaXQgaW50ZWdlciBtYW5pcHVsYXRpb24gbWFjcm9zIChsaXR0bGUgZW5kaWFuKQorICovCisjaWZuZGVmIEdFVF9VSU5UMzJfTEUKKyNkZWZpbmUgR0VUX1VJTlQzMl9MRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKG4pID0gKCAodWludDMyX3QpIChiKVsoaSkgICAgXSAgICAgICApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDFdIDw8ICA4ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMl0gPDwgMTYgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAzXSA8PCAyNCApOyAgICAgICAgICAgIFwKK30KKyNlbmRpZgorCisjaWZuZGVmIFBVVF9VSU5UMzJfTEUKKyNkZWZpbmUgUFVUX1VJTlQzMl9MRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChiKVsoaSkgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pICAgICAgICkgJiAweEZGICk7ICAgIFwKKyAgICAoYilbKGkpICsgMV0gPSAodW5zaWduZWQgY2hhcikgKCAoIChuKSA+PiAgOCApICYgMHhGRiApOyAgICBcCisgICAgKGIpWyhpKSArIDJdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgPj4gMTYgKSAmIDB4RkYgKTsgICAgXAorICAgIChiKVsoaSkgKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pID4+IDI0ICkgJiAweEZGICk7ICAgIFwKK30KKyNlbmRpZgorCit2b2lkIG1iZWR0bHNfbWQ0X2luaXQoIG1iZWR0bHNfbWQ0X2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19tZDRfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19tZDRfZnJlZSggbWJlZHRsc19tZDRfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX21kNF9jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX21kNF9jbG9uZSggbWJlZHRsc19tZDRfY29udGV4dCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tZDRfY29udGV4dCAqc3JjICkKK3sKKyAgICAqZHN0ID0gKnNyYzsKK30KKworLyoKKyAqIE1ENCBjb250ZXh0IHNldHVwCisgKi8KK3ZvaWQgbWJlZHRsc19tZDRfc3RhcnRzKCBtYmVkdGxzX21kNF9jb250ZXh0ICpjdHggKQoreworICAgIGN0eC0+dG90YWxbMF0gPSAwOworICAgIGN0eC0+dG90YWxbMV0gPSAwOworCisgICAgY3R4LT5zdGF0ZVswXSA9IDB4Njc0NTIzMDE7CisgICAgY3R4LT5zdGF0ZVsxXSA9IDB4RUZDREFCODk7CisgICAgY3R4LT5zdGF0ZVsyXSA9IDB4OThCQURDRkU7CisgICAgY3R4LT5zdGF0ZVszXSA9IDB4MTAzMjU0NzY7Cit9CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01ENF9QUk9DRVNTX0FMVCkKK3ZvaWQgbWJlZHRsc19tZDRfcHJvY2VzcyggbWJlZHRsc19tZDRfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdICkKK3sKKyAgICB1aW50MzJfdCBYWzE2XSwgQSwgQiwgQywgRDsKKworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDBdLCBkYXRhLCAgMCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDFdLCBkYXRhLCAgNCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDJdLCBkYXRhLCAgOCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDNdLCBkYXRhLCAxMiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDRdLCBkYXRhLCAxNiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDVdLCBkYXRhLCAyMCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDZdLCBkYXRhLCAyNCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDddLCBkYXRhLCAyOCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDhdLCBkYXRhLCAzMiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDldLCBkYXRhLCAzNiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTBdLCBkYXRhLCA0MCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTFdLCBkYXRhLCA0NCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTJdLCBkYXRhLCA0OCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTNdLCBkYXRhLCA1MiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTRdLCBkYXRhLCA1NiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTVdLCBkYXRhLCA2MCApOworCisjZGVmaW5lIFMoeCxuKSAoKHggPDwgbikgfCAoKHggJiAweEZGRkZGRkZGKSA+PiAoMzIgLSBuKSkpCisKKyAgICBBID0gY3R4LT5zdGF0ZVswXTsKKyAgICBCID0gY3R4LT5zdGF0ZVsxXTsKKyAgICBDID0gY3R4LT5zdGF0ZVsyXTsKKyAgICBEID0gY3R4LT5zdGF0ZVszXTsKKworI2RlZmluZSBGKHgsIHksIHopICgoeCAmIHkpIHwgKCh+eCkgJiB6KSkKKyNkZWZpbmUgUChhLGIsYyxkLHgscykgeyBhICs9IEYoYixjLGQpICsgeDsgYSA9IFMoYSxzKTsgfQorCisgICAgUCggQSwgQiwgQywgRCwgWFsgMF0sICAzICk7CisgICAgUCggRCwgQSwgQiwgQywgWFsgMV0sICA3ICk7CisgICAgUCggQywgRCwgQSwgQiwgWFsgMl0sIDExICk7CisgICAgUCggQiwgQywgRCwgQSwgWFsgM10sIDE5ICk7CisgICAgUCggQSwgQiwgQywgRCwgWFsgNF0sICAzICk7CisgICAgUCggRCwgQSwgQiwgQywgWFsgNV0sICA3ICk7CisgICAgUCggQywgRCwgQSwgQiwgWFsgNl0sIDExICk7CisgICAgUCggQiwgQywgRCwgQSwgWFsgN10sIDE5ICk7CisgICAgUCggQSwgQiwgQywgRCwgWFsgOF0sICAzICk7CisgICAgUCggRCwgQSwgQiwgQywgWFsgOV0sICA3ICk7CisgICAgUCggQywgRCwgQSwgQiwgWFsxMF0sIDExICk7CisgICAgUCggQiwgQywgRCwgQSwgWFsxMV0sIDE5ICk7CisgICAgUCggQSwgQiwgQywgRCwgWFsxMl0sICAzICk7CisgICAgUCggRCwgQSwgQiwgQywgWFsxM10sICA3ICk7CisgICAgUCggQywgRCwgQSwgQiwgWFsxNF0sIDExICk7CisgICAgUCggQiwgQywgRCwgQSwgWFsxNV0sIDE5ICk7CisKKyN1bmRlZiBQCisjdW5kZWYgRgorCisjZGVmaW5lIEYoeCx5LHopICgoeCAmIHkpIHwgKHggJiB6KSB8ICh5ICYgeikpCisjZGVmaW5lIFAoYSxiLGMsZCx4LHMpIHsgYSArPSBGKGIsYyxkKSArIHggKyAweDVBODI3OTk5OyBhID0gUyhhLHMpOyB9CisKKyAgICBQKCBBLCBCLCBDLCBELCBYWyAwXSwgIDMgKTsKKyAgICBQKCBELCBBLCBCLCBDLCBYWyA0XSwgIDUgKTsKKyAgICBQKCBDLCBELCBBLCBCLCBYWyA4XSwgIDkgKTsKKyAgICBQKCBCLCBDLCBELCBBLCBYWzEyXSwgMTMgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBYWyAxXSwgIDMgKTsKKyAgICBQKCBELCBBLCBCLCBDLCBYWyA1XSwgIDUgKTsKKyAgICBQKCBDLCBELCBBLCBCLCBYWyA5XSwgIDkgKTsKKyAgICBQKCBCLCBDLCBELCBBLCBYWzEzXSwgMTMgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBYWyAyXSwgIDMgKTsKKyAgICBQKCBELCBBLCBCLCBDLCBYWyA2XSwgIDUgKTsKKyAgICBQKCBDLCBELCBBLCBCLCBYWzEwXSwgIDkgKTsKKyAgICBQKCBCLCBDLCBELCBBLCBYWzE0XSwgMTMgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBYWyAzXSwgIDMgKTsKKyAgICBQKCBELCBBLCBCLCBDLCBYWyA3XSwgIDUgKTsKKyAgICBQKCBDLCBELCBBLCBCLCBYWzExXSwgIDkgKTsKKyAgICBQKCBCLCBDLCBELCBBLCBYWzE1XSwgMTMgKTsKKworI3VuZGVmIFAKKyN1bmRlZiBGCisKKyNkZWZpbmUgRih4LHkseikgKHggXiB5IF4geikKKyNkZWZpbmUgUChhLGIsYyxkLHgscykgeyBhICs9IEYoYixjLGQpICsgeCArIDB4NkVEOUVCQTE7IGEgPSBTKGEscyk7IH0KKworICAgIFAoIEEsIEIsIEMsIEQsIFhbIDBdLCAgMyApOworICAgIFAoIEQsIEEsIEIsIEMsIFhbIDhdLCAgOSApOworICAgIFAoIEMsIEQsIEEsIEIsIFhbIDRdLCAxMSApOworICAgIFAoIEIsIEMsIEQsIEEsIFhbMTJdLCAxNSApOworICAgIFAoIEEsIEIsIEMsIEQsIFhbIDJdLCAgMyApOworICAgIFAoIEQsIEEsIEIsIEMsIFhbMTBdLCAgOSApOworICAgIFAoIEMsIEQsIEEsIEIsIFhbIDZdLCAxMSApOworICAgIFAoIEIsIEMsIEQsIEEsIFhbMTRdLCAxNSApOworICAgIFAoIEEsIEIsIEMsIEQsIFhbIDFdLCAgMyApOworICAgIFAoIEQsIEEsIEIsIEMsIFhbIDldLCAgOSApOworICAgIFAoIEMsIEQsIEEsIEIsIFhbIDVdLCAxMSApOworICAgIFAoIEIsIEMsIEQsIEEsIFhbMTNdLCAxNSApOworICAgIFAoIEEsIEIsIEMsIEQsIFhbIDNdLCAgMyApOworICAgIFAoIEQsIEEsIEIsIEMsIFhbMTFdLCAgOSApOworICAgIFAoIEMsIEQsIEEsIEIsIFhbIDddLCAxMSApOworICAgIFAoIEIsIEMsIEQsIEEsIFhbMTVdLCAxNSApOworCisjdW5kZWYgRgorI3VuZGVmIFAKKworICAgIGN0eC0+c3RhdGVbMF0gKz0gQTsKKyAgICBjdHgtPnN0YXRlWzFdICs9IEI7CisgICAgY3R4LT5zdGF0ZVsyXSArPSBDOworICAgIGN0eC0+c3RhdGVbM10gKz0gRDsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19NRDRfUFJPQ0VTU19BTFQgKi8KKworLyoKKyAqIE1ENCBwcm9jZXNzIGJ1ZmZlcgorICovCit2b2lkIG1iZWR0bHNfbWQ0X3VwZGF0ZSggbWJlZHRsc19tZDRfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKQoreworICAgIHNpemVfdCBmaWxsOworICAgIHVpbnQzMl90IGxlZnQ7CisKKyAgICBpZiggaWxlbiA9PSAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGVmdCA9IGN0eC0+dG90YWxbMF0gJiAweDNGOworICAgIGZpbGwgPSA2NCAtIGxlZnQ7CisKKyAgICBjdHgtPnRvdGFsWzBdICs9ICh1aW50MzJfdCkgaWxlbjsKKyAgICBjdHgtPnRvdGFsWzBdICY9IDB4RkZGRkZGRkY7CisKKyAgICBpZiggY3R4LT50b3RhbFswXSA8ICh1aW50MzJfdCkgaWxlbiApCisgICAgICAgIGN0eC0+dG90YWxbMV0rKzsKKworICAgIGlmKCBsZWZ0ICYmIGlsZW4gPj0gZmlsbCApCisgICAgeworICAgICAgICBtZW1jcHkoICh2b2lkICopIChjdHgtPmJ1ZmZlciArIGxlZnQpLAorICAgICAgICAgICAgICAgICh2b2lkICopIGlucHV0LCBmaWxsICk7CisgICAgICAgIG1iZWR0bHNfbWQ0X3Byb2Nlc3MoIGN0eCwgY3R4LT5idWZmZXIgKTsKKyAgICAgICAgaW5wdXQgKz0gZmlsbDsKKyAgICAgICAgaWxlbiAgLT0gZmlsbDsKKyAgICAgICAgbGVmdCA9IDA7CisgICAgfQorCisgICAgd2hpbGUoIGlsZW4gPj0gNjQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tZDRfcHJvY2VzcyggY3R4LCBpbnB1dCApOworICAgICAgICBpbnB1dCArPSA2NDsKKyAgICAgICAgaWxlbiAgLT0gNjQ7CisgICAgfQorCisgICAgaWYoIGlsZW4gPiAwICkKKyAgICB7CisgICAgICAgIG1lbWNweSggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksCisgICAgICAgICAgICAgICAgKHZvaWQgKikgaW5wdXQsIGlsZW4gKTsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1kNF9wYWRkaW5nWzY0XSA9Cit7CisgMHg4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorfTsKKworLyoKKyAqIE1ENCBmaW5hbCBkaWdlc3QKKyAqLwordm9pZCBtYmVkdGxzX21kNF9maW5pc2goIG1iZWR0bHNfbWQ0X2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICkKK3sKKyAgICB1aW50MzJfdCBsYXN0LCBwYWRuOworICAgIHVpbnQzMl90IGhpZ2gsIGxvdzsKKyAgICB1bnNpZ25lZCBjaGFyIG1zZ2xlbls4XTsKKworICAgIGhpZ2ggPSAoIGN0eC0+dG90YWxbMF0gPj4gMjkgKQorICAgICAgICAgfCAoIGN0eC0+dG90YWxbMV0gPDwgIDMgKTsKKyAgICBsb3cgID0gKCBjdHgtPnRvdGFsWzBdIDw8ICAzICk7CisKKyAgICBQVVRfVUlOVDMyX0xFKCBsb3csICBtc2dsZW4sIDAgKTsKKyAgICBQVVRfVUlOVDMyX0xFKCBoaWdoLCBtc2dsZW4sIDQgKTsKKworICAgIGxhc3QgPSBjdHgtPnRvdGFsWzBdICYgMHgzRjsKKyAgICBwYWRuID0gKCBsYXN0IDwgNTYgKSA/ICggNTYgLSBsYXN0ICkgOiAoIDEyMCAtIGxhc3QgKTsKKworICAgIG1iZWR0bHNfbWQ0X3VwZGF0ZSggY3R4LCAodW5zaWduZWQgY2hhciAqKSBtZDRfcGFkZGluZywgcGFkbiApOworICAgIG1iZWR0bHNfbWQ0X3VwZGF0ZSggY3R4LCBtc2dsZW4sIDggKTsKKworICAgIFBVVF9VSU5UMzJfTEUoIGN0eC0+c3RhdGVbMF0sIG91dHB1dCwgIDAgKTsKKyAgICBQVVRfVUlOVDMyX0xFKCBjdHgtPnN0YXRlWzFdLCBvdXRwdXQsICA0ICk7CisgICAgUFVUX1VJTlQzMl9MRSggY3R4LT5zdGF0ZVsyXSwgb3V0cHV0LCAgOCApOworICAgIFBVVF9VSU5UMzJfTEUoIGN0eC0+c3RhdGVbM10sIG91dHB1dCwgMTIgKTsKK30KKworI2VuZGlmIC8qICFNQkVEVExTX01ENF9BTFQgKi8KKworLyoKKyAqIG91dHB1dCA9IE1ENCggaW5wdXQgYnVmZmVyICkKKyAqLwordm9pZCBtYmVkdGxzX21kNCggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLCB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKQoreworICAgIG1iZWR0bHNfbWQ0X2NvbnRleHQgY3R4OworCisgICAgbWJlZHRsc19tZDRfaW5pdCggJmN0eCApOworICAgIG1iZWR0bHNfbWQ0X3N0YXJ0cyggJmN0eCApOworICAgIG1iZWR0bHNfbWQ0X3VwZGF0ZSggJmN0eCwgaW5wdXQsIGlsZW4gKTsKKyAgICBtYmVkdGxzX21kNF9maW5pc2goICZjdHgsIG91dHB1dCApOworICAgIG1iZWR0bHNfbWQ0X2ZyZWUoICZjdHggKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKKy8qCisgKiBSRkMgMTMyMCB0ZXN0IHZlY3RvcnMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgbWQ0X3Rlc3Rfc3RyWzddWzgxXSA9Cit7CisgICAgeyAiIiB9LAorICAgIHsgImEiIH0sCisgICAgeyAiYWJjIiB9LAorICAgIHsgIm1lc3NhZ2UgZGlnZXN0IiB9LAorICAgIHsgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiB9LAorICAgIHsgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IiB9LAorICAgIHsgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyIiBcCisgICAgICAiMzQ1Njc4OTAxMjM0NTY3ODkwIiB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtZDRfdGVzdF9zdW1bN11bMTZdID0KK3sKKyAgICB7IDB4MzEsIDB4RDYsIDB4Q0YsIDB4RTAsIDB4RDEsIDB4NkEsIDB4RTksIDB4MzEsCisgICAgICAweEI3LCAweDNDLCAweDU5LCAweEQ3LCAweEUwLCAweEMwLCAweDg5LCAweEMwIH0sCisgICAgeyAweEJELCAweEU1LCAweDJDLCAweEIzLCAweDFELCAweEUzLCAweDNFLCAweDQ2LAorICAgICAgMHgyNCwgMHg1RSwgMHgwNSwgMHhGQiwgMHhEQiwgMHhENiwgMHhGQiwgMHgyNCB9LAorICAgIHsgMHhBNCwgMHg0OCwgMHgwMSwgMHg3QSwgMHhBRiwgMHgyMSwgMHhEOCwgMHg1MiwKKyAgICAgIDB4NUYsIDB4QzEsIDB4MEEsIDB4RTgsIDB4N0EsIDB4QTYsIDB4NzIsIDB4OUQgfSwKKyAgICB7IDB4RDksIDB4MTMsIDB4MEEsIDB4ODEsIDB4NjQsIDB4NTQsIDB4OUYsIDB4RTgsCisgICAgICAweDE4LCAweDg3LCAweDQ4LCAweDA2LCAweEUxLCAweEM3LCAweDAxLCAweDRCIH0sCisgICAgeyAweEQ3LCAweDlFLCAweDFDLCAweDMwLCAweDhBLCAweEE1LCAweEJCLCAweENELAorICAgICAgMHhFRSwgMHhBOCwgMHhFRCwgMHg2MywgMHhERiwgMHg0MSwgMHgyRCwgMHhBOSB9LAorICAgIHsgMHgwNCwgMHgzRiwgMHg4NSwgMHg4MiwgMHhGMiwgMHg0MSwgMHhEQiwgMHgzNSwKKyAgICAgIDB4MUMsIDB4RTYsIDB4MjcsIDB4RTEsIDB4NTMsIDB4RTcsIDB4RjAsIDB4RTQgfSwKKyAgICB7IDB4RTMsIDB4M0IsIDB4NEQsIDB4REMsIDB4OUMsIDB4MzgsIDB4RjIsIDB4MTksCisgICAgICAweDlDLCAweDNFLCAweDdCLCAweDE2LCAweDRGLCAweENDLCAweDA1LCAweDM2IH0KK307CisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfbWQ0X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCBpOworICAgIHVuc2lnbmVkIGNoYXIgbWQ0c3VtWzE2XTsKKworICAgIGZvciggaSA9IDA7IGkgPCA3OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgTUQ0IHRlc3QgIyVkOiAiLCBpICsgMSApOworCisgICAgICAgIG1iZWR0bHNfbWQ0KCAodW5zaWduZWQgY2hhciAqKSBtZDRfdGVzdF9zdHJbaV0sCisgICAgICAgICAgICAgc3RybGVuKCBtZDRfdGVzdF9zdHJbaV0gKSwgbWQ0c3VtICk7CisKKyAgICAgICAgaWYoIG1lbWNtcCggbWQ0c3VtLCBtZDRfdGVzdF9zdW1baV0sIDE2ICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19NRDRfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbWQ1LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDk3MmRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbWQ1LmMKQEAgLTAsMCArMSw0MDQgQEAKKy8qCisgKiAgUkZDIDEzMjEgY29tcGxpYW50IE1ENSBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgTUQ1IGFsZ29yaXRobSB3YXMgZGVzaWduZWQgYnkgUm9uIFJpdmVzdCBpbiAxOTkxLgorICoKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxMzIxLnR4dAorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL21kNS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUQ1X0FMVCkKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIDMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbiBtYWNyb3MgKGxpdHRsZSBlbmRpYW4pCisgKi8KKyNpZm5kZWYgR0VUX1VJTlQzMl9MRQorI2RlZmluZSBHRVRfVUlOVDMyX0xFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobikgPSAoICh1aW50MzJfdCkgKGIpWyhpKSAgICBdICAgICAgICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMV0gPDwgIDggKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAyXSA8PCAxNiApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDNdIDw8IDI0ICk7ICAgICAgICAgICAgXAorfQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQzMl9MRQorI2RlZmluZSBQVVRfVUlOVDMyX0xFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGIpWyhpKSAgICBdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgICAgICAgKSAmIDB4RkYgKTsgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pID4+ICA4ICkgJiAweEZGICk7ICAgIFwKKyAgICAoYilbKGkpICsgMl0gPSAodW5zaWduZWQgY2hhcikgKCAoIChuKSA+PiAxNiApICYgMHhGRiApOyAgICBcCisgICAgKGIpWyhpKSArIDNdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgPj4gMjQgKSAmIDB4RkYgKTsgICAgXAorfQorI2VuZGlmCisKK3ZvaWQgbWJlZHRsc19tZDVfaW5pdCggbWJlZHRsc19tZDVfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX21kNV9jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX21kNV9mcmVlKCBtYmVkdGxzX21kNV9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfbWQ1X2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfbWQ1X2Nsb25lKCBtYmVkdGxzX21kNV9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kNV9jb250ZXh0ICpzcmMgKQoreworICAgICpkc3QgPSAqc3JjOworfQorCisvKgorICogTUQ1IGNvbnRleHQgc2V0dXAKKyAqLwordm9pZCBtYmVkdGxzX21kNV9zdGFydHMoIG1iZWR0bHNfbWQ1X2NvbnRleHQgKmN0eCApCit7CisgICAgY3R4LT50b3RhbFswXSA9IDA7CisgICAgY3R4LT50b3RhbFsxXSA9IDA7CisKKyAgICBjdHgtPnN0YXRlWzBdID0gMHg2NzQ1MjMwMTsKKyAgICBjdHgtPnN0YXRlWzFdID0gMHhFRkNEQUI4OTsKKyAgICBjdHgtPnN0YXRlWzJdID0gMHg5OEJBRENGRTsKKyAgICBjdHgtPnN0YXRlWzNdID0gMHgxMDMyNTQ3NjsKK30KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUQ1X1BST0NFU1NfQUxUKQordm9pZCBtYmVkdGxzX21kNV9wcm9jZXNzKCBtYmVkdGxzX21kNV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVs2NF0gKQoreworICAgIHVpbnQzMl90IFhbMTZdLCBBLCBCLCBDLCBEOworCisgICAgR0VUX1VJTlQzMl9MRSggWFsgMF0sIGRhdGEsICAwICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgMV0sIGRhdGEsICA0ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgMl0sIGRhdGEsICA4ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgM10sIGRhdGEsIDEyICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgNF0sIGRhdGEsIDE2ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgNV0sIGRhdGEsIDIwICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgNl0sIGRhdGEsIDI0ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgN10sIGRhdGEsIDI4ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgOF0sIGRhdGEsIDMyICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgOV0sIGRhdGEsIDM2ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxMF0sIGRhdGEsIDQwICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxMV0sIGRhdGEsIDQ0ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxMl0sIGRhdGEsIDQ4ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxM10sIGRhdGEsIDUyICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxNF0sIGRhdGEsIDU2ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxNV0sIGRhdGEsIDYwICk7CisKKyNkZWZpbmUgUyh4LG4pICgoeCA8PCBuKSB8ICgoeCAmIDB4RkZGRkZGRkYpID4+ICgzMiAtIG4pKSkKKworI2RlZmluZSBQKGEsYixjLGQsayxzLHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhICs9IEYoYixjLGQpICsgWFtrXSArIHQ7IGEgPSBTKGEscykgKyBiOyAgICAgICAgICAgXAorfQorCisgICAgQSA9IGN0eC0+c3RhdGVbMF07CisgICAgQiA9IGN0eC0+c3RhdGVbMV07CisgICAgQyA9IGN0eC0+c3RhdGVbMl07CisgICAgRCA9IGN0eC0+c3RhdGVbM107CisKKyNkZWZpbmUgRih4LHkseikgKHogXiAoeCAmICh5IF4geikpKQorCisgICAgUCggQSwgQiwgQywgRCwgIDAsICA3LCAweEQ3NkFBNDc4ICk7CisgICAgUCggRCwgQSwgQiwgQywgIDEsIDEyLCAweEU4QzdCNzU2ICk7CisgICAgUCggQywgRCwgQSwgQiwgIDIsIDE3LCAweDI0MjA3MERCICk7CisgICAgUCggQiwgQywgRCwgQSwgIDMsIDIyLCAweEMxQkRDRUVFICk7CisgICAgUCggQSwgQiwgQywgRCwgIDQsICA3LCAweEY1N0MwRkFGICk7CisgICAgUCggRCwgQSwgQiwgQywgIDUsIDEyLCAweDQ3ODdDNjJBICk7CisgICAgUCggQywgRCwgQSwgQiwgIDYsIDE3LCAweEE4MzA0NjEzICk7CisgICAgUCggQiwgQywgRCwgQSwgIDcsIDIyLCAweEZENDY5NTAxICk7CisgICAgUCggQSwgQiwgQywgRCwgIDgsICA3LCAweDY5ODA5OEQ4ICk7CisgICAgUCggRCwgQSwgQiwgQywgIDksIDEyLCAweDhCNDRGN0FGICk7CisgICAgUCggQywgRCwgQSwgQiwgMTAsIDE3LCAweEZGRkY1QkIxICk7CisgICAgUCggQiwgQywgRCwgQSwgMTEsIDIyLCAweDg5NUNEN0JFICk7CisgICAgUCggQSwgQiwgQywgRCwgMTIsICA3LCAweDZCOTAxMTIyICk7CisgICAgUCggRCwgQSwgQiwgQywgMTMsIDEyLCAweEZEOTg3MTkzICk7CisgICAgUCggQywgRCwgQSwgQiwgMTQsIDE3LCAweEE2Nzk0MzhFICk7CisgICAgUCggQiwgQywgRCwgQSwgMTUsIDIyLCAweDQ5QjQwODIxICk7CisKKyN1bmRlZiBGCisKKyNkZWZpbmUgRih4LHkseikgKHkgXiAoeiAmICh4IF4geSkpKQorCisgICAgUCggQSwgQiwgQywgRCwgIDEsICA1LCAweEY2MUUyNTYyICk7CisgICAgUCggRCwgQSwgQiwgQywgIDYsICA5LCAweEMwNDBCMzQwICk7CisgICAgUCggQywgRCwgQSwgQiwgMTEsIDE0LCAweDI2NUU1QTUxICk7CisgICAgUCggQiwgQywgRCwgQSwgIDAsIDIwLCAweEU5QjZDN0FBICk7CisgICAgUCggQSwgQiwgQywgRCwgIDUsICA1LCAweEQ2MkYxMDVEICk7CisgICAgUCggRCwgQSwgQiwgQywgMTAsICA5LCAweDAyNDQxNDUzICk7CisgICAgUCggQywgRCwgQSwgQiwgMTUsIDE0LCAweEQ4QTFFNjgxICk7CisgICAgUCggQiwgQywgRCwgQSwgIDQsIDIwLCAweEU3RDNGQkM4ICk7CisgICAgUCggQSwgQiwgQywgRCwgIDksICA1LCAweDIxRTFDREU2ICk7CisgICAgUCggRCwgQSwgQiwgQywgMTQsICA5LCAweEMzMzcwN0Q2ICk7CisgICAgUCggQywgRCwgQSwgQiwgIDMsIDE0LCAweEY0RDUwRDg3ICk7CisgICAgUCggQiwgQywgRCwgQSwgIDgsIDIwLCAweDQ1NUExNEVEICk7CisgICAgUCggQSwgQiwgQywgRCwgMTMsICA1LCAweEE5RTNFOTA1ICk7CisgICAgUCggRCwgQSwgQiwgQywgIDIsICA5LCAweEZDRUZBM0Y4ICk7CisgICAgUCggQywgRCwgQSwgQiwgIDcsIDE0LCAweDY3NkYwMkQ5ICk7CisgICAgUCggQiwgQywgRCwgQSwgMTIsIDIwLCAweDhEMkE0QzhBICk7CisKKyN1bmRlZiBGCisKKyNkZWZpbmUgRih4LHkseikgKHggXiB5IF4geikKKworICAgIFAoIEEsIEIsIEMsIEQsICA1LCAgNCwgMHhGRkZBMzk0MiApOworICAgIFAoIEQsIEEsIEIsIEMsICA4LCAxMSwgMHg4NzcxRjY4MSApOworICAgIFAoIEMsIEQsIEEsIEIsIDExLCAxNiwgMHg2RDlENjEyMiApOworICAgIFAoIEIsIEMsIEQsIEEsIDE0LCAyMywgMHhGREU1MzgwQyApOworICAgIFAoIEEsIEIsIEMsIEQsICAxLCAgNCwgMHhBNEJFRUE0NCApOworICAgIFAoIEQsIEEsIEIsIEMsICA0LCAxMSwgMHg0QkRFQ0ZBOSApOworICAgIFAoIEMsIEQsIEEsIEIsICA3LCAxNiwgMHhGNkJCNEI2MCApOworICAgIFAoIEIsIEMsIEQsIEEsIDEwLCAyMywgMHhCRUJGQkM3MCApOworICAgIFAoIEEsIEIsIEMsIEQsIDEzLCAgNCwgMHgyODlCN0VDNiApOworICAgIFAoIEQsIEEsIEIsIEMsICAwLCAxMSwgMHhFQUExMjdGQSApOworICAgIFAoIEMsIEQsIEEsIEIsICAzLCAxNiwgMHhENEVGMzA4NSApOworICAgIFAoIEIsIEMsIEQsIEEsICA2LCAyMywgMHgwNDg4MUQwNSApOworICAgIFAoIEEsIEIsIEMsIEQsICA5LCAgNCwgMHhEOUQ0RDAzOSApOworICAgIFAoIEQsIEEsIEIsIEMsIDEyLCAxMSwgMHhFNkRCOTlFNSApOworICAgIFAoIEMsIEQsIEEsIEIsIDE1LCAxNiwgMHgxRkEyN0NGOCApOworICAgIFAoIEIsIEMsIEQsIEEsICAyLCAyMywgMHhDNEFDNTY2NSApOworCisjdW5kZWYgRgorCisjZGVmaW5lIEYoeCx5LHopICh5IF4gKHggfCB+eikpCisKKyAgICBQKCBBLCBCLCBDLCBELCAgMCwgIDYsIDB4RjQyOTIyNDQgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgNywgMTAsIDB4NDMyQUZGOTcgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAxNCwgMTUsIDB4QUI5NDIzQTcgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgNSwgMjEsIDB4RkM5M0EwMzkgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAxMiwgIDYsIDB4NjU1QjU5QzMgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgMywgMTAsIDB4OEYwQ0NDOTIgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAxMCwgMTUsIDB4RkZFRkY0N0QgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgMSwgMjEsIDB4ODU4NDVERDEgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAgOCwgIDYsIDB4NkZBODdFNEYgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAxNSwgMTAsIDB4RkUyQ0U2RTAgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAgNiwgMTUsIDB4QTMwMTQzMTQgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAxMywgMjEsIDB4NEUwODExQTEgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAgNCwgIDYsIDB4Rjc1MzdFODIgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAxMSwgMTAsIDB4QkQzQUYyMzUgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAgMiwgMTUsIDB4MkFEN0QyQkIgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgOSwgMjEsIDB4RUI4NkQzOTEgKTsKKworI3VuZGVmIEYKKworICAgIGN0eC0+c3RhdGVbMF0gKz0gQTsKKyAgICBjdHgtPnN0YXRlWzFdICs9IEI7CisgICAgY3R4LT5zdGF0ZVsyXSArPSBDOworICAgIGN0eC0+c3RhdGVbM10gKz0gRDsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19NRDVfUFJPQ0VTU19BTFQgKi8KKworLyoKKyAqIE1ENSBwcm9jZXNzIGJ1ZmZlcgorICovCit2b2lkIG1iZWR0bHNfbWQ1X3VwZGF0ZSggbWJlZHRsc19tZDVfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKQoreworICAgIHNpemVfdCBmaWxsOworICAgIHVpbnQzMl90IGxlZnQ7CisKKyAgICBpZiggaWxlbiA9PSAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGVmdCA9IGN0eC0+dG90YWxbMF0gJiAweDNGOworICAgIGZpbGwgPSA2NCAtIGxlZnQ7CisKKyAgICBjdHgtPnRvdGFsWzBdICs9ICh1aW50MzJfdCkgaWxlbjsKKyAgICBjdHgtPnRvdGFsWzBdICY9IDB4RkZGRkZGRkY7CisKKyAgICBpZiggY3R4LT50b3RhbFswXSA8ICh1aW50MzJfdCkgaWxlbiApCisgICAgICAgIGN0eC0+dG90YWxbMV0rKzsKKworICAgIGlmKCBsZWZ0ICYmIGlsZW4gPj0gZmlsbCApCisgICAgeworICAgICAgICBtZW1jcHkoICh2b2lkICopIChjdHgtPmJ1ZmZlciArIGxlZnQpLCBpbnB1dCwgZmlsbCApOworICAgICAgICBtYmVkdGxzX21kNV9wcm9jZXNzKCBjdHgsIGN0eC0+YnVmZmVyICk7CisgICAgICAgIGlucHV0ICs9IGZpbGw7CisgICAgICAgIGlsZW4gIC09IGZpbGw7CisgICAgICAgIGxlZnQgPSAwOworICAgIH0KKworICAgIHdoaWxlKCBpbGVuID49IDY0ICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbWQ1X3Byb2Nlc3MoIGN0eCwgaW5wdXQgKTsKKyAgICAgICAgaW5wdXQgKz0gNjQ7CisgICAgICAgIGlsZW4gIC09IDY0OworICAgIH0KKworICAgIGlmKCBpbGVuID4gMCApCisgICAgeworICAgICAgICBtZW1jcHkoICh2b2lkICopIChjdHgtPmJ1ZmZlciArIGxlZnQpLCBpbnB1dCwgaWxlbiApOworICAgIH0KK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWQ1X3BhZGRpbmdbNjRdID0KK3sKKyAweDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCisvKgorICogTUQ1IGZpbmFsIGRpZ2VzdAorICovCit2b2lkIG1iZWR0bHNfbWQ1X2ZpbmlzaCggbWJlZHRsc19tZDVfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKQoreworICAgIHVpbnQzMl90IGxhc3QsIHBhZG47CisgICAgdWludDMyX3QgaGlnaCwgbG93OworICAgIHVuc2lnbmVkIGNoYXIgbXNnbGVuWzhdOworCisgICAgaGlnaCA9ICggY3R4LT50b3RhbFswXSA+PiAyOSApCisgICAgICAgICB8ICggY3R4LT50b3RhbFsxXSA8PCAgMyApOworICAgIGxvdyAgPSAoIGN0eC0+dG90YWxbMF0gPDwgIDMgKTsKKworICAgIFBVVF9VSU5UMzJfTEUoIGxvdywgIG1zZ2xlbiwgMCApOworICAgIFBVVF9VSU5UMzJfTEUoIGhpZ2gsIG1zZ2xlbiwgNCApOworCisgICAgbGFzdCA9IGN0eC0+dG90YWxbMF0gJiAweDNGOworICAgIHBhZG4gPSAoIGxhc3QgPCA1NiApID8gKCA1NiAtIGxhc3QgKSA6ICggMTIwIC0gbGFzdCApOworCisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCBjdHgsIG1kNV9wYWRkaW5nLCBwYWRuICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCBjdHgsIG1zZ2xlbiwgOCApOworCisgICAgUFVUX1VJTlQzMl9MRSggY3R4LT5zdGF0ZVswXSwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJfTEUoIGN0eC0+c3RhdGVbMV0sIG91dHB1dCwgIDQgKTsKKyAgICBQVVRfVUlOVDMyX0xFKCBjdHgtPnN0YXRlWzJdLCBvdXRwdXQsICA4ICk7CisgICAgUFVUX1VJTlQzMl9MRSggY3R4LT5zdGF0ZVszXSwgb3V0cHV0LCAxMiApOworfQorCisjZW5kaWYgLyogIU1CRURUTFNfTUQ1X0FMVCAqLworCisvKgorICogb3V0cHV0ID0gTUQ1KCBpbnB1dCBidWZmZXIgKQorICovCit2b2lkIG1iZWR0bHNfbWQ1KCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCit7CisgICAgbWJlZHRsc19tZDVfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX21kNV9pbml0KCAmY3R4ICk7CisgICAgbWJlZHRsc19tZDVfc3RhcnRzKCAmY3R4ICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmY3R4LCBpbnB1dCwgaWxlbiApOworICAgIG1iZWR0bHNfbWQ1X2ZpbmlzaCggJmN0eCwgb3V0cHV0ICk7CisgICAgbWJlZHRsc19tZDVfZnJlZSggJmN0eCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKy8qCisgKiBSRkMgMTMyMSB0ZXN0IHZlY3RvcnMKKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWQ1X3Rlc3RfYnVmWzddWzgxXSA9Cit7CisgICAgeyAiIiB9LAorICAgIHsgImEiIH0sCisgICAgeyAiYWJjIiB9LAorICAgIHsgIm1lc3NhZ2UgZGlnZXN0IiB9LAorICAgIHsgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiB9LAorICAgIHsgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IiB9LAorICAgIHsgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyIiBcCisgICAgICAiMzQ1Njc4OTAxMjM0NTY3ODkwIiB9Cit9OworCitzdGF0aWMgY29uc3QgaW50IG1kNV90ZXN0X2J1Zmxlbls3XSA9Cit7CisgICAgMCwgMSwgMywgMTQsIDI2LCA2MiwgODAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1kNV90ZXN0X3N1bVs3XVsxNl0gPQoreworICAgIHsgMHhENCwgMHgxRCwgMHg4QywgMHhEOSwgMHg4RiwgMHgwMCwgMHhCMiwgMHgwNCwKKyAgICAgIDB4RTksIDB4ODAsIDB4MDksIDB4OTgsIDB4RUMsIDB4RjgsIDB4NDIsIDB4N0UgfSwKKyAgICB7IDB4MEMsIDB4QzEsIDB4NzUsIDB4QjksIDB4QzAsIDB4RjEsIDB4QjYsIDB4QTgsCisgICAgICAweDMxLCAweEMzLCAweDk5LCAweEUyLCAweDY5LCAweDc3LCAweDI2LCAweDYxIH0sCisgICAgeyAweDkwLCAweDAxLCAweDUwLCAweDk4LCAweDNDLCAweEQyLCAweDRGLCAweEIwLAorICAgICAgMHhENiwgMHg5NiwgMHgzRiwgMHg3RCwgMHgyOCwgMHhFMSwgMHg3RiwgMHg3MiB9LAorICAgIHsgMHhGOSwgMHg2QiwgMHg2OSwgMHg3RCwgMHg3QywgMHhCNywgMHg5MywgMHg4RCwKKyAgICAgIDB4NTIsIDB4NUEsIDB4MkYsIDB4MzEsIDB4QUEsIDB4RjEsIDB4NjEsIDB4RDAgfSwKKyAgICB7IDB4QzMsIDB4RkMsIDB4RDMsIDB4RDcsIDB4NjEsIDB4OTIsIDB4RTQsIDB4MDAsCisgICAgICAweDdELCAweEZCLCAweDQ5LCAweDZDLCAweENBLCAweDY3LCAweEUxLCAweDNCIH0sCisgICAgeyAweEQxLCAweDc0LCAweEFCLCAweDk4LCAweEQyLCAweDc3LCAweEQ5LCAweEY1LAorICAgICAgMHhBNSwgMHg2MSwgMHgxQywgMHgyQywgMHg5RiwgMHg0MSwgMHg5RCwgMHg5RiB9LAorICAgIHsgMHg1NywgMHhFRCwgMHhGNCwgMHhBMiwgMHgyQiwgMHhFMywgMHhDOSwgMHg1NSwKKyAgICAgIDB4QUMsIDB4NDksIDB4REEsIDB4MkUsIDB4MjEsIDB4MDcsIDB4QjYsIDB4N0EgfQorfTsKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc19tZDVfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciBtZDVzdW1bMTZdOworCisgICAgZm9yKCBpID0gMDsgaSA8IDc7IGkrKyApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBNRDUgdGVzdCAjJWQ6ICIsIGkgKyAxICk7CisKKyAgICAgICAgbWJlZHRsc19tZDUoIG1kNV90ZXN0X2J1ZltpXSwgbWQ1X3Rlc3RfYnVmbGVuW2ldLCBtZDVzdW0gKTsKKworICAgICAgICBpZiggbWVtY21wKCBtZDVzdW0sIG1kNV90ZXN0X3N1bVtpXSwgMTYgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX01ENV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZF93cmFwLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZF93cmFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmY2FlMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L21kX3dyYXAuYwpAQCAtMCwwICsxLDU3NSBAQAorLyoqCisgKiBcZmlsZSBtZF93cmFwLmMKKyAqCisgKiBcYnJpZWYgR2VuZXJpYyBtZXNzYWdlIGRpZ2VzdCB3cmFwcGVyIGZvciBtYmVkIFRMUworICoKKyAqIFxhdXRob3IgQWRyaWFhbiBkZSBKb25nIDxkZWpvbmdAZm94LWl0LmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRF9DKQorCisjaW5jbHVkZSAibWJlZHRscy9tZF9pbnRlcm5hbC5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX01EMl9DKQorI2luY2x1ZGUgIm1iZWR0bHMvbWQyLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDRfQykKKyNpbmNsdWRlICJtYmVkdGxzL21kNC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisjaW5jbHVkZSAibWJlZHRscy9tZDUuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JJUEVNRDE2MF9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcmlwZW1kMTYwLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisjaW5jbHVkZSAibWJlZHRscy9zaGExLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTI1Ni5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisjaW5jbHVkZSAibWJlZHRscy9zaGE1MTIuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDJfQykKKworc3RhdGljIHZvaWQgbWQyX3N0YXJ0c193cmFwKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfbWQyX3N0YXJ0cyggKG1iZWR0bHNfbWQyX2NvbnRleHQgKikgY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIG1kMl91cGRhdGVfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlsZW4gKQoreworICAgIG1iZWR0bHNfbWQyX3VwZGF0ZSggKG1iZWR0bHNfbWQyX2NvbnRleHQgKikgY3R4LCBpbnB1dCwgaWxlbiApOworfQorCitzdGF0aWMgdm9pZCBtZDJfZmluaXNoX3dyYXAoIHZvaWQgKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBtYmVkdGxzX21kMl9maW5pc2goIChtYmVkdGxzX21kMl9jb250ZXh0ICopIGN0eCwgb3V0cHV0ICk7Cit9CisKK3N0YXRpYyB2b2lkICptZDJfY3R4X2FsbG9jKCB2b2lkICkKK3sKKyAgICB2b2lkICpjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX21kMl9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggIT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfbWQyX2luaXQoIChtYmVkdGxzX21kMl9jb250ZXh0ICopIGN0eCApOworCisgICAgcmV0dXJuKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgbWQyX2N0eF9mcmVlKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfbWQyX2ZyZWUoIChtYmVkdGxzX21kMl9jb250ZXh0ICopIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIG1kMl9jbG9uZV93cmFwKCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyApCit7CisgICAgbWJlZHRsc19tZDJfY2xvbmUoIChtYmVkdGxzX21kMl9jb250ZXh0ICopIGRzdCwKKyAgICAgICAgICAgICAgICAgKGNvbnN0IG1iZWR0bHNfbWQyX2NvbnRleHQgKikgc3JjICk7Cit9CisKK3N0YXRpYyB2b2lkIG1kMl9wcm9jZXNzX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSApCit7CisgICAgKCh2b2lkKSBkYXRhKTsKKworICAgIG1iZWR0bHNfbWQyX3Byb2Nlc3MoIChtYmVkdGxzX21kMl9jb250ZXh0ICopIGN0eCApOworfQorCitjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX21kMl9pbmZvID0geworICAgIE1CRURUTFNfTURfTUQyLAorICAgICJNRDIiLAorICAgIDE2LAorICAgIDE2LAorICAgIG1kMl9zdGFydHNfd3JhcCwKKyAgICBtZDJfdXBkYXRlX3dyYXAsCisgICAgbWQyX2ZpbmlzaF93cmFwLAorICAgIG1iZWR0bHNfbWQyLAorICAgIG1kMl9jdHhfYWxsb2MsCisgICAgbWQyX2N0eF9mcmVlLAorICAgIG1kMl9jbG9uZV93cmFwLAorICAgIG1kMl9wcm9jZXNzX3dyYXAsCit9OworCisjZW5kaWYgLyogTUJFRFRMU19NRDJfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorCitzdGF0aWMgdm9pZCBtZDRfc3RhcnRzX3dyYXAoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19tZDRfc3RhcnRzKCAobWJlZHRsc19tZDRfY29udGV4dCAqKSBjdHggKTsKK30KKworc3RhdGljIHZvaWQgbWQ0X3VwZGF0ZV93cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWxlbiApCit7CisgICAgbWJlZHRsc19tZDRfdXBkYXRlKCAobWJlZHRsc19tZDRfY29udGV4dCAqKSBjdHgsIGlucHV0LCBpbGVuICk7Cit9CisKK3N0YXRpYyB2b2lkIG1kNF9maW5pc2hfd3JhcCggdm9pZCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIG1iZWR0bHNfbWQ0X2ZpbmlzaCggKG1iZWR0bHNfbWQ0X2NvbnRleHQgKikgY3R4LCBvdXRwdXQgKTsKK30KKworc3RhdGljIHZvaWQgKm1kNF9jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIHZvaWQgKmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfbWQ0X2NvbnRleHQgKSApOworCisgICAgaWYoIGN0eCAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19tZDRfaW5pdCggKG1iZWR0bHNfbWQ0X2NvbnRleHQgKikgY3R4ICk7CisKKyAgICByZXR1cm4oIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBtZDRfY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19tZDRfZnJlZSggKG1iZWR0bHNfbWQ0X2NvbnRleHQgKikgY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgbWQ0X2Nsb25lX3dyYXAoIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjICkKK3sKKyAgICBtYmVkdGxzX21kNF9jbG9uZSggKG1iZWR0bHNfbWQ0X2NvbnRleHQgKikgZHN0LAorICAgICAgICAgICAgICAgICAoY29uc3QgbWJlZHRsc19tZDRfY29udGV4dCAqKSBzcmMgKTsKK30KKworc3RhdGljIHZvaWQgbWQ0X3Byb2Nlc3Nfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhICkKK3sKKyAgICBtYmVkdGxzX21kNF9wcm9jZXNzKCAobWJlZHRsc19tZDRfY29udGV4dCAqKSBjdHgsIGRhdGEgKTsKK30KKworY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19tZDRfaW5mbyA9IHsKKyAgICBNQkVEVExTX01EX01ENCwKKyAgICAiTUQ0IiwKKyAgICAxNiwKKyAgICA2NCwKKyAgICBtZDRfc3RhcnRzX3dyYXAsCisgICAgbWQ0X3VwZGF0ZV93cmFwLAorICAgIG1kNF9maW5pc2hfd3JhcCwKKyAgICBtYmVkdGxzX21kNCwKKyAgICBtZDRfY3R4X2FsbG9jLAorICAgIG1kNF9jdHhfZnJlZSwKKyAgICBtZDRfY2xvbmVfd3JhcCwKKyAgICBtZDRfcHJvY2Vzc193cmFwLAorfTsKKworI2VuZGlmIC8qIE1CRURUTFNfTUQ0X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKworc3RhdGljIHZvaWQgbWQ1X3N0YXJ0c193cmFwKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfbWQ1X3N0YXJ0cyggKG1iZWR0bHNfbWQ1X2NvbnRleHQgKikgY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIG1kNV91cGRhdGVfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlsZW4gKQoreworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggKG1iZWR0bHNfbWQ1X2NvbnRleHQgKikgY3R4LCBpbnB1dCwgaWxlbiApOworfQorCitzdGF0aWMgdm9pZCBtZDVfZmluaXNoX3dyYXAoIHZvaWQgKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBtYmVkdGxzX21kNV9maW5pc2goIChtYmVkdGxzX21kNV9jb250ZXh0ICopIGN0eCwgb3V0cHV0ICk7Cit9CisKK3N0YXRpYyB2b2lkICptZDVfY3R4X2FsbG9jKCB2b2lkICkKK3sKKyAgICB2b2lkICpjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX21kNV9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggIT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfbWQ1X2luaXQoIChtYmVkdGxzX21kNV9jb250ZXh0ICopIGN0eCApOworCisgICAgcmV0dXJuKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgbWQ1X2N0eF9mcmVlKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfbWQ1X2ZyZWUoIChtYmVkdGxzX21kNV9jb250ZXh0ICopIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIG1kNV9jbG9uZV93cmFwKCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyApCit7CisgICAgbWJlZHRsc19tZDVfY2xvbmUoIChtYmVkdGxzX21kNV9jb250ZXh0ICopIGRzdCwKKyAgICAgICAgICAgICAgICAgKGNvbnN0IG1iZWR0bHNfbWQ1X2NvbnRleHQgKikgc3JjICk7Cit9CisKK3N0YXRpYyB2b2lkIG1kNV9wcm9jZXNzX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSApCit7CisgICAgbWJlZHRsc19tZDVfcHJvY2VzcyggKG1iZWR0bHNfbWQ1X2NvbnRleHQgKikgY3R4LCBkYXRhICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfbWQ1X2luZm8gPSB7CisgICAgTUJFRFRMU19NRF9NRDUsCisgICAgIk1ENSIsCisgICAgMTYsCisgICAgNjQsCisgICAgbWQ1X3N0YXJ0c193cmFwLAorICAgIG1kNV91cGRhdGVfd3JhcCwKKyAgICBtZDVfZmluaXNoX3dyYXAsCisgICAgbWJlZHRsc19tZDUsCisgICAgbWQ1X2N0eF9hbGxvYywKKyAgICBtZDVfY3R4X2ZyZWUsCisgICAgbWQ1X2Nsb25lX3dyYXAsCisgICAgbWQ1X3Byb2Nlc3Nfd3JhcCwKK307CisKKyNlbmRpZiAvKiBNQkVEVExTX01ENV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCisKK3N0YXRpYyB2b2lkIHJpcGVtZDE2MF9zdGFydHNfd3JhcCggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF9zdGFydHMoIChtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICopIGN0eCApOworfQorCitzdGF0aWMgdm9pZCByaXBlbWQxNjBfdXBkYXRlX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuICkKK3sKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF91cGRhdGUoIChtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICopIGN0eCwgaW5wdXQsIGlsZW4gKTsKK30KKworc3RhdGljIHZvaWQgcmlwZW1kMTYwX2ZpbmlzaF93cmFwKCB2b2lkICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgbWJlZHRsc19yaXBlbWQxNjBfZmluaXNoKCAobWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqKSBjdHgsIG91dHB1dCApOworfQorCitzdGF0aWMgdm9pZCAqcmlwZW1kMTYwX2N0eF9hbGxvYyggdm9pZCApCit7CisgICAgdm9pZCAqY3R4ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCApICk7CisKKyAgICBpZiggY3R4ICE9IE5VTEwgKQorICAgICAgICBtYmVkdGxzX3JpcGVtZDE2MF9pbml0KCAobWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqKSBjdHggKTsKKworICAgIHJldHVybiggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIHJpcGVtZDE2MF9jdHhfZnJlZSggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF9mcmVlKCAobWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqKSBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorCitzdGF0aWMgdm9pZCByaXBlbWQxNjBfY2xvbmVfd3JhcCggdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMgKQoreworICAgIG1iZWR0bHNfcmlwZW1kMTYwX2Nsb25lKCAobWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqKSBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICopIHNyYyApOworfQorCitzdGF0aWMgdm9pZCByaXBlbWQxNjBfcHJvY2Vzc193cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgKQoreworICAgIG1iZWR0bHNfcmlwZW1kMTYwX3Byb2Nlc3MoIChtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICopIGN0eCwgZGF0YSApOworfQorCitjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX3JpcGVtZDE2MF9pbmZvID0geworICAgIE1CRURUTFNfTURfUklQRU1EMTYwLAorICAgICJSSVBFTUQxNjAiLAorICAgIDIwLAorICAgIDY0LAorICAgIHJpcGVtZDE2MF9zdGFydHNfd3JhcCwKKyAgICByaXBlbWQxNjBfdXBkYXRlX3dyYXAsCisgICAgcmlwZW1kMTYwX2ZpbmlzaF93cmFwLAorICAgIG1iZWR0bHNfcmlwZW1kMTYwLAorICAgIHJpcGVtZDE2MF9jdHhfYWxsb2MsCisgICAgcmlwZW1kMTYwX2N0eF9mcmVlLAorICAgIHJpcGVtZDE2MF9jbG9uZV93cmFwLAorICAgIHJpcGVtZDE2MF9wcm9jZXNzX3dyYXAsCit9OworCisjZW5kaWYgLyogTUJFRFRMU19SSVBFTUQxNjBfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKworc3RhdGljIHZvaWQgc2hhMV9zdGFydHNfd3JhcCggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX3NoYTFfc3RhcnRzKCAobWJlZHRsc19zaGExX2NvbnRleHQgKikgY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTFfdXBkYXRlX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWxlbiApCit7CisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggKG1iZWR0bHNfc2hhMV9jb250ZXh0ICopIGN0eCwgaW5wdXQsIGlsZW4gKTsKK30KKworc3RhdGljIHZvaWQgc2hhMV9maW5pc2hfd3JhcCggdm9pZCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIG1iZWR0bHNfc2hhMV9maW5pc2goIChtYmVkdGxzX3NoYTFfY29udGV4dCAqKSBjdHgsIG91dHB1dCApOworfQorCitzdGF0aWMgdm9pZCAqc2hhMV9jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIHZvaWQgKmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfc2hhMV9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggIT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfc2hhMV9pbml0KCAobWJlZHRsc19zaGExX2NvbnRleHQgKikgY3R4ICk7CisKKyAgICByZXR1cm4oIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBzaGExX2Nsb25lX3dyYXAoIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjICkKK3sKKyAgICBtYmVkdGxzX3NoYTFfY2xvbmUoIChtYmVkdGxzX3NoYTFfY29udGV4dCAqKSBkc3QsCisgICAgICAgICAgICAgICAgICAoY29uc3QgbWJlZHRsc19zaGExX2NvbnRleHQgKikgc3JjICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTFfY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19zaGExX2ZyZWUoIChtYmVkdGxzX3NoYTFfY29udGV4dCAqKSBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBzaGExX3Byb2Nlc3Nfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhICkKK3sKKyAgICBtYmVkdGxzX3NoYTFfcHJvY2VzcyggKG1iZWR0bHNfc2hhMV9jb250ZXh0ICopIGN0eCwgZGF0YSApOworfQorCitjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX3NoYTFfaW5mbyA9IHsKKyAgICBNQkVEVExTX01EX1NIQTEsCisgICAgIlNIQTEiLAorICAgIDIwLAorICAgIDY0LAorICAgIHNoYTFfc3RhcnRzX3dyYXAsCisgICAgc2hhMV91cGRhdGVfd3JhcCwKKyAgICBzaGExX2ZpbmlzaF93cmFwLAorICAgIG1iZWR0bHNfc2hhMSwKKyAgICBzaGExX2N0eF9hbGxvYywKKyAgICBzaGExX2N0eF9mcmVlLAorICAgIHNoYTFfY2xvbmVfd3JhcCwKKyAgICBzaGExX3Byb2Nlc3Nfd3JhcCwKK307CisKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworCisvKgorICogV3JhcHBlcnMgZm9yIGdlbmVyaWMgbWVzc2FnZSBkaWdlc3RzCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisKK3N0YXRpYyB2b2lkIHNoYTIyNF9zdGFydHNfd3JhcCggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoIChtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICopIGN0eCwgMSApOworfQorCitzdGF0aWMgdm9pZCBzaGEyMjRfdXBkYXRlX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuICkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl91cGRhdGUoIChtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICopIGN0eCwgaW5wdXQsIGlsZW4gKTsKK30KKworc3RhdGljIHZvaWQgc2hhMjI0X2ZpbmlzaF93cmFwKCB2b2lkICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgbWJlZHRsc19zaGEyNTZfZmluaXNoKCAobWJlZHRsc19zaGEyNTZfY29udGV4dCAqKSBjdHgsIG91dHB1dCApOworfQorCitzdGF0aWMgdm9pZCBzaGEyMjRfd3JhcCggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIG1iZWR0bHNfc2hhMjU2KCBpbnB1dCwgaWxlbiwgb3V0cHV0LCAxICk7Cit9CisKK3N0YXRpYyB2b2lkICpzaGEyMjRfY3R4X2FsbG9jKCB2b2lkICkKK3sKKyAgICB2b2lkICpjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggIT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfc2hhMjU2X2luaXQoIChtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICopIGN0eCApOworCisgICAgcmV0dXJuKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgc2hhMjI0X2N0eF9mcmVlKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfc2hhMjU2X2ZyZWUoIChtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICopIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTIyNF9jbG9uZV93cmFwKCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyApCit7CisgICAgbWJlZHRsc19zaGEyNTZfY2xvbmUoIChtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICopIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgKGNvbnN0IG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKikgc3JjICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTIyNF9wcm9jZXNzX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSApCit7CisgICAgbWJlZHRsc19zaGEyNTZfcHJvY2VzcyggKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKikgY3R4LCBkYXRhICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfc2hhMjI0X2luZm8gPSB7CisgICAgTUJFRFRMU19NRF9TSEEyMjQsCisgICAgIlNIQTIyNCIsCisgICAgMjgsCisgICAgNjQsCisgICAgc2hhMjI0X3N0YXJ0c193cmFwLAorICAgIHNoYTIyNF91cGRhdGVfd3JhcCwKKyAgICBzaGEyMjRfZmluaXNoX3dyYXAsCisgICAgc2hhMjI0X3dyYXAsCisgICAgc2hhMjI0X2N0eF9hbGxvYywKKyAgICBzaGEyMjRfY3R4X2ZyZWUsCisgICAgc2hhMjI0X2Nsb25lX3dyYXAsCisgICAgc2hhMjI0X3Byb2Nlc3Nfd3JhcCwKK307CisKK3N0YXRpYyB2b2lkIHNoYTI1Nl9zdGFydHNfd3JhcCggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoIChtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICopIGN0eCwgMCApOworfQorCitzdGF0aWMgdm9pZCBzaGEyNTZfd3JhcCggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIG1iZWR0bHNfc2hhMjU2KCBpbnB1dCwgaWxlbiwgb3V0cHV0LCAwICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfc2hhMjU2X2luZm8gPSB7CisgICAgTUJFRFRMU19NRF9TSEEyNTYsCisgICAgIlNIQTI1NiIsCisgICAgMzIsCisgICAgNjQsCisgICAgc2hhMjU2X3N0YXJ0c193cmFwLAorICAgIHNoYTIyNF91cGRhdGVfd3JhcCwKKyAgICBzaGEyMjRfZmluaXNoX3dyYXAsCisgICAgc2hhMjU2X3dyYXAsCisgICAgc2hhMjI0X2N0eF9hbGxvYywKKyAgICBzaGEyMjRfY3R4X2ZyZWUsCisgICAgc2hhMjI0X2Nsb25lX3dyYXAsCisgICAgc2hhMjI0X3Byb2Nlc3Nfd3JhcCwKK307CisKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisKK3N0YXRpYyB2b2lkIHNoYTM4NF9zdGFydHNfd3JhcCggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX3NoYTUxMl9zdGFydHMoIChtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICopIGN0eCwgMSApOworfQorCitzdGF0aWMgdm9pZCBzaGEzODRfdXBkYXRlX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuICkKK3sKKyAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoIChtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICopIGN0eCwgaW5wdXQsIGlsZW4gKTsKK30KKworc3RhdGljIHZvaWQgc2hhMzg0X2ZpbmlzaF93cmFwKCB2b2lkICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgbWJlZHRsc19zaGE1MTJfZmluaXNoKCAobWJlZHRsc19zaGE1MTJfY29udGV4dCAqKSBjdHgsIG91dHB1dCApOworfQorCitzdGF0aWMgdm9pZCBzaGEzODRfd3JhcCggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIG1iZWR0bHNfc2hhNTEyKCBpbnB1dCwgaWxlbiwgb3V0cHV0LCAxICk7Cit9CisKK3N0YXRpYyB2b2lkICpzaGEzODRfY3R4X2FsbG9jKCB2b2lkICkKK3sKKyAgICB2b2lkICpjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggIT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfc2hhNTEyX2luaXQoIChtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICopIGN0eCApOworCisgICAgcmV0dXJuKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgc2hhMzg0X2N0eF9mcmVlKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfc2hhNTEyX2ZyZWUoIChtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICopIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTM4NF9jbG9uZV93cmFwKCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyApCit7CisgICAgbWJlZHRsc19zaGE1MTJfY2xvbmUoIChtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICopIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgKGNvbnN0IG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKikgc3JjICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTM4NF9wcm9jZXNzX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSApCit7CisgICAgbWJlZHRsc19zaGE1MTJfcHJvY2VzcyggKG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKikgY3R4LCBkYXRhICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfc2hhMzg0X2luZm8gPSB7CisgICAgTUJFRFRMU19NRF9TSEEzODQsCisgICAgIlNIQTM4NCIsCisgICAgNDgsCisgICAgMTI4LAorICAgIHNoYTM4NF9zdGFydHNfd3JhcCwKKyAgICBzaGEzODRfdXBkYXRlX3dyYXAsCisgICAgc2hhMzg0X2ZpbmlzaF93cmFwLAorICAgIHNoYTM4NF93cmFwLAorICAgIHNoYTM4NF9jdHhfYWxsb2MsCisgICAgc2hhMzg0X2N0eF9mcmVlLAorICAgIHNoYTM4NF9jbG9uZV93cmFwLAorICAgIHNoYTM4NF9wcm9jZXNzX3dyYXAsCit9OworCitzdGF0aWMgdm9pZCBzaGE1MTJfc3RhcnRzX3dyYXAoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19zaGE1MTJfc3RhcnRzKCAobWJlZHRsc19zaGE1MTJfY29udGV4dCAqKSBjdHgsIDAgKTsKK30KKworc3RhdGljIHZvaWQgc2hhNTEyX3dyYXAoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBtYmVkdGxzX3NoYTUxMiggaW5wdXQsIGlsZW4sIG91dHB1dCwgMCApOworfQorCitjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX3NoYTUxMl9pbmZvID0geworICAgIE1CRURUTFNfTURfU0hBNTEyLAorICAgICJTSEE1MTIiLAorICAgIDY0LAorICAgIDEyOCwKKyAgICBzaGE1MTJfc3RhcnRzX3dyYXAsCisgICAgc2hhMzg0X3VwZGF0ZV93cmFwLAorICAgIHNoYTM4NF9maW5pc2hfd3JhcCwKKyAgICBzaGE1MTJfd3JhcCwKKyAgICBzaGEzODRfY3R4X2FsbG9jLAorICAgIHNoYTM4NF9jdHhfZnJlZSwKKyAgICBzaGEzODRfY2xvbmVfd3JhcCwKKyAgICBzaGEzODRfcHJvY2Vzc193cmFwLAorfTsKKworI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfTURfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbWVtb3J5X2J1ZmZlcl9hbGxvYy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbWVtb3J5X2J1ZmZlcl9hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWQ1YTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZW1vcnlfYnVmZmVyX2FsbG9jLmMKQEAgLTAsMCArMSw3NDUgQEAKKy8qCisgKiAgQnVmZmVyLWJhc2VkIG1lbW9yeSBhbGxvY2F0b3IKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisjaW5jbHVkZSAibWJlZHRscy9tZW1vcnlfYnVmZmVyX2FsbG9jLmgiCisKKy8qIE5vIG5lZWQgZm9yIHRoZSBoZWFkZXIgZ3VhcmQgYXMgTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MKKyAgIGlzIGRlcGVuZGVudCB1cG9uIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UpCisjaW5jbHVkZSA8ZXhlY2luZm8uaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorI2luY2x1ZGUgIm1iZWR0bHMvdGhyZWFkaW5nLmgiCisjZW5kaWYKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworI2RlZmluZSBNQUdJQzEgICAgICAgMHhGRjAwQUE1NQorI2RlZmluZSBNQUdJQzIgICAgICAgMHhFRTExOTk2NgorI2RlZmluZSBNQVhfQlQgMjAKKwordHlwZWRlZiBzdHJ1Y3QgX21lbW9yeV9oZWFkZXIgbWVtb3J5X2hlYWRlcjsKK3N0cnVjdCBfbWVtb3J5X2hlYWRlcgoreworICAgIHNpemVfdCAgICAgICAgICBtYWdpYzE7CisgICAgc2l6ZV90ICAgICAgICAgIHNpemU7CisgICAgc2l6ZV90ICAgICAgICAgIGFsbG9jOworICAgIG1lbW9yeV9oZWFkZXIgICAqcHJldjsKKyAgICBtZW1vcnlfaGVhZGVyICAgKm5leHQ7CisgICAgbWVtb3J5X2hlYWRlciAgICpwcmV2X2ZyZWU7CisgICAgbWVtb3J5X2hlYWRlciAgICpuZXh0X2ZyZWU7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UpCisgICAgY2hhciAgICAgICAgICAgICoqdHJhY2U7CisgICAgc2l6ZV90ICAgICAgICAgIHRyYWNlX2NvdW50OworI2VuZGlmCisgICAgc2l6ZV90ICAgICAgICAgIG1hZ2ljMjsKK307CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdW5zaWduZWQgY2hhciAgICpidWY7CisgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKKyAgICBtZW1vcnlfaGVhZGVyICAgKmZpcnN0OworICAgIG1lbW9yeV9oZWFkZXIgICAqZmlyc3RfZnJlZTsKKyAgICBpbnQgICAgICAgICAgICAgdmVyaWZ5OworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgc2l6ZV90ICAgICAgICAgIGFsbG9jX2NvdW50OworICAgIHNpemVfdCAgICAgICAgICBmcmVlX2NvdW50OworICAgIHNpemVfdCAgICAgICAgICB0b3RhbF91c2VkOworICAgIHNpemVfdCAgICAgICAgICBtYXhpbXVtX3VzZWQ7CisgICAgc2l6ZV90ICAgICAgICAgIGhlYWRlcl9jb3VudDsKKyAgICBzaXplX3QgICAgICAgICAgbWF4aW11bV9oZWFkZXJfY291bnQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAgIG11dGV4OworI2VuZGlmCit9CitidWZmZXJfYWxsb2NfY3R4OworCitzdGF0aWMgYnVmZmVyX2FsbG9jX2N0eCBoZWFwOworCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKK3N0YXRpYyB2b2lkIGRlYnVnX2hlYWRlciggbWVtb3J5X2hlYWRlciAqaGRyICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRSkKKyAgICBzaXplX3QgaTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJIRFI6ICBQVFIoJTEwenUpLCBQUkVWKCUxMHp1KSwgTkVYVCglMTB6dSksICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBTExPQyglenUpLCBTSVpFKCUxMHp1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBoZHIsIChzaXplX3QpIGhkci0+cHJldiwgKHNpemVfdCkgaGRyLT5uZXh0LAorICAgICAgICAgICAgICAgICAgICAgIGhkci0+YWxsb2MsIGhkci0+c2l6ZSApOworICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiICAgICAgRlBSRVYoJTEwenUpLCBGTkVYVCglMTB6dSlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkgaGRyLT5wcmV2X2ZyZWUsIChzaXplX3QpIGhkci0+bmV4dF9mcmVlICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRSkKKyAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIlRSQUNFOiBcbiIgKTsKKyAgICBmb3IoIGkgPSAwOyBpIDwgaGRyLT50cmFjZV9jb3VudDsgaSsrICkKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgaGRyLT50cmFjZVtpXSApOworICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiXG4iICk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgZGVidWdfY2hhaW4oKQoreworICAgIG1lbW9yeV9oZWFkZXIgKmN1ciA9IGhlYXAuZmlyc3Q7CisKKyAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIlxuQmxvY2sgbGlzdFxuIiApOworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBkZWJ1Z19oZWFkZXIoIGN1ciApOworICAgICAgICBjdXIgPSBjdXItPm5leHQ7CisgICAgfQorCisgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGcmVlIGxpc3RcbiIgKTsKKyAgICBjdXIgPSBoZWFwLmZpcnN0X2ZyZWU7CisKKyAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgZGVidWdfaGVhZGVyKCBjdXIgKTsKKyAgICAgICAgY3VyID0gY3VyLT5uZXh0X2ZyZWU7CisgICAgfQorfQorI2VuZGlmIC8qIE1CRURUTFNfTUVNT1JZX0RFQlVHICovCisKK3N0YXRpYyBpbnQgdmVyaWZ5X2hlYWRlciggbWVtb3J5X2hlYWRlciAqaGRyICkKK3sKKyAgICBpZiggaGRyLT5tYWdpYzEgIT0gTUFHSUMxICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGQVRBTDogTUFHSUMxIG1pc21hdGNoXG4iICk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoIGhkci0+bWFnaWMyICE9IE1BR0lDMiApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRkFUQUw6IE1BR0lDMiBtaXNtYXRjaFxuIiApOworI2VuZGlmCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCBoZHItPmFsbG9jID4gMSApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRkFUQUw6IGFsbG9jIGhhcyBpbGxlZ2FsIHZhbHVlXG4iICk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoIGhkci0+cHJldiAhPSBOVUxMICYmIGhkci0+cHJldiA9PSBoZHItPm5leHQgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZBVEFMOiBwcmV2ID09IG5leHRcbiIgKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBpZiggaGRyLT5wcmV2X2ZyZWUgIT0gTlVMTCAmJiBoZHItPnByZXZfZnJlZSA9PSBoZHItPm5leHRfZnJlZSApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRkFUQUw6IHByZXZfZnJlZSA9PSBuZXh0X2ZyZWVcbiIgKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfY2hhaW4oKQoreworICAgIG1lbW9yeV9oZWFkZXIgKnBydiA9IGhlYXAuZmlyc3QsICpjdXIgPSBoZWFwLmZpcnN0LT5uZXh0OworCisgICAgaWYoIHZlcmlmeV9oZWFkZXIoIGhlYXAuZmlyc3QgKSAhPSAwICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGQVRBTDogdmVyaWZpY2F0aW9uIG9mIGZpcnN0IGhlYWRlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZFxuIiApOworI2VuZGlmCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCBoZWFwLmZpcnN0LT5wcmV2ICE9IE5VTEwgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZBVEFMOiB2ZXJpZmljYXRpb24gZmFpbGVkOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0LT5wcmV2ICE9IE5VTExcbiIgKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmlmeV9oZWFkZXIoIGN1ciApICE9IDAgKQorICAgICAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRkFUQUw6IHZlcmlmaWNhdGlvbiBvZiBoZWFkZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkXG4iICk7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIGN1ci0+cHJldiAhPSBwcnYgKQorICAgICAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRkFUQUw6IHZlcmlmaWNhdGlvbiBmYWlsZWQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1ci0+cHJldiAhPSBwcnZcbiIgKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKworICAgICAgICBwcnYgPSBjdXI7CisgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIHZvaWQgKmJ1ZmZlcl9hbGxvY19jYWxsb2MoIHNpemVfdCBuLCBzaXplX3Qgc2l6ZSApCit7CisgICAgbWVtb3J5X2hlYWRlciAqbmV3LCAqY3VyID0gaGVhcC5maXJzdF9mcmVlOworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisgICAgdm9pZCAqcmV0OworICAgIHNpemVfdCBvcmlnaW5hbF9sZW4sIGxlbjsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRSkKKyAgICB2b2lkICp0cmFjZV9idWZmZXJbTUFYX0JUXTsKKyAgICBzaXplX3QgdHJhY2VfY250OworI2VuZGlmCisKKyAgICBpZiggaGVhcC5idWYgPT0gTlVMTCB8fCBoZWFwLmZpcnN0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE5VTEwgKTsKKworICAgIG9yaWdpbmFsX2xlbiA9IGxlbiA9IG4gKiBzaXplOworCisgICAgaWYoIG4gIT0gMCAmJiBsZW4gLyBuICE9IHNpemUgKQorICAgICAgICByZXR1cm4oIE5VTEwgKTsKKworICAgIGlmKCBsZW4gJSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRSApCisgICAgeworICAgICAgICBsZW4gLT0gbGVuICUgTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEU7CisgICAgICAgIGxlbiArPSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRTsKKyAgICB9CisKKyAgICAvLyBGaW5kIGJsb2NrIHRoYXQgZml0cworICAgIC8vCisgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCBjdXItPnNpemUgPj0gbGVuICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGN1ciA9IGN1ci0+bmV4dF9mcmVlOworICAgIH0KKworICAgIGlmKCBjdXIgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgaWYoIGN1ci0+YWxsb2MgIT0gMCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRkFUQUw6IGJsb2NrIGluIGZyZWVfbGlzdCBidXQgYWxsb2NhdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVxuIiApOworI2VuZGlmCisgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgaGVhcC5hbGxvY19jb3VudCsrOworI2VuZGlmCisKKyAgICAvLyBGb3VuZCBsb2NhdGlvbiwgc3BsaXQgYmxvY2sgaWYgPiBtZW1vcnlfaGVhZGVyICsgNCByb29tIGxlZnQKKyAgICAvLworICAgIGlmKCBjdXItPnNpemUgLSBsZW4gPCBzaXplb2YobWVtb3J5X2hlYWRlcikgKworICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRSApCisgICAgeworICAgICAgICBjdXItPmFsbG9jID0gMTsKKworICAgICAgICAvLyBSZW1vdmUgZnJvbSBmcmVlX2xpc3QKKyAgICAgICAgLy8KKyAgICAgICAgaWYoIGN1ci0+cHJldl9mcmVlICE9IE5VTEwgKQorICAgICAgICAgICAgY3VyLT5wcmV2X2ZyZWUtPm5leHRfZnJlZSA9IGN1ci0+bmV4dF9mcmVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoZWFwLmZpcnN0X2ZyZWUgPSBjdXItPm5leHRfZnJlZTsKKworICAgICAgICBpZiggY3VyLT5uZXh0X2ZyZWUgIT0gTlVMTCApCisgICAgICAgICAgICBjdXItPm5leHRfZnJlZS0+cHJldl9mcmVlID0gY3VyLT5wcmV2X2ZyZWU7CisKKyAgICAgICAgY3VyLT5wcmV2X2ZyZWUgPSBOVUxMOworICAgICAgICBjdXItPm5leHRfZnJlZSA9IE5VTEw7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICBoZWFwLnRvdGFsX3VzZWQgKz0gY3VyLT5zaXplOworICAgICAgICBpZiggaGVhcC50b3RhbF91c2VkID4gaGVhcC5tYXhpbXVtX3VzZWQgKQorICAgICAgICAgICAgaGVhcC5tYXhpbXVtX3VzZWQgPSBoZWFwLnRvdGFsX3VzZWQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRSkKKyAgICAgICAgdHJhY2VfY250ID0gYmFja3RyYWNlKCB0cmFjZV9idWZmZXIsIE1BWF9CVCApOworICAgICAgICBjdXItPnRyYWNlID0gYmFja3RyYWNlX3N5bWJvbHMoIHRyYWNlX2J1ZmZlciwgdHJhY2VfY250ICk7CisgICAgICAgIGN1ci0+dHJhY2VfY291bnQgPSB0cmFjZV9jbnQ7CisjZW5kaWYKKworICAgICAgICBpZiggKCBoZWFwLnZlcmlmeSAmIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9BTExPQyApICYmIHZlcmlmeV9jaGFpbigpICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisKKyAgICAgICAgcmV0ID0gKHVuc2lnbmVkIGNoYXIgKikgY3VyICsgc2l6ZW9mKCBtZW1vcnlfaGVhZGVyICk7CisgICAgICAgIG1lbXNldCggcmV0LCAwLCBvcmlnaW5hbF9sZW4gKTsKKworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHAgPSAoICh1bnNpZ25lZCBjaGFyICopIGN1ciApICsgc2l6ZW9mKG1lbW9yeV9oZWFkZXIpICsgbGVuOworICAgIG5ldyA9IChtZW1vcnlfaGVhZGVyICopIHA7CisKKyAgICBuZXctPnNpemUgPSBjdXItPnNpemUgLSBsZW4gLSBzaXplb2YobWVtb3J5X2hlYWRlcik7CisgICAgbmV3LT5hbGxvYyA9IDA7CisgICAgbmV3LT5wcmV2ID0gY3VyOworICAgIG5ldy0+bmV4dCA9IGN1ci0+bmV4dDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRSkKKyAgICBuZXctPnRyYWNlID0gTlVMTDsKKyAgICBuZXctPnRyYWNlX2NvdW50ID0gMDsKKyNlbmRpZgorICAgIG5ldy0+bWFnaWMxID0gTUFHSUMxOworICAgIG5ldy0+bWFnaWMyID0gTUFHSUMyOworCisgICAgaWYoIG5ldy0+bmV4dCAhPSBOVUxMICkKKyAgICAgICAgbmV3LT5uZXh0LT5wcmV2ID0gbmV3OworCisgICAgLy8gUmVwbGFjZSBjdXIgd2l0aCBuZXcgaW4gZnJlZV9saXN0CisgICAgLy8KKyAgICBuZXctPnByZXZfZnJlZSA9IGN1ci0+cHJldl9mcmVlOworICAgIG5ldy0+bmV4dF9mcmVlID0gY3VyLT5uZXh0X2ZyZWU7CisgICAgaWYoIG5ldy0+cHJldl9mcmVlICE9IE5VTEwgKQorICAgICAgICBuZXctPnByZXZfZnJlZS0+bmV4dF9mcmVlID0gbmV3OworICAgIGVsc2UKKyAgICAgICAgaGVhcC5maXJzdF9mcmVlID0gbmV3OworCisgICAgaWYoIG5ldy0+bmV4dF9mcmVlICE9IE5VTEwgKQorICAgICAgICBuZXctPm5leHRfZnJlZS0+cHJldl9mcmVlID0gbmV3OworCisgICAgY3VyLT5hbGxvYyA9IDE7CisgICAgY3VyLT5zaXplID0gbGVuOworICAgIGN1ci0+bmV4dCA9IG5ldzsKKyAgICBjdXItPnByZXZfZnJlZSA9IE5VTEw7CisgICAgY3VyLT5uZXh0X2ZyZWUgPSBOVUxMOworCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICBoZWFwLmhlYWRlcl9jb3VudCsrOworICAgIGlmKCBoZWFwLmhlYWRlcl9jb3VudCA+IGhlYXAubWF4aW11bV9oZWFkZXJfY291bnQgKQorICAgICAgICBoZWFwLm1heGltdW1faGVhZGVyX2NvdW50ID0gaGVhcC5oZWFkZXJfY291bnQ7CisgICAgaGVhcC50b3RhbF91c2VkICs9IGN1ci0+c2l6ZTsKKyAgICBpZiggaGVhcC50b3RhbF91c2VkID4gaGVhcC5tYXhpbXVtX3VzZWQgKQorICAgICAgICBoZWFwLm1heGltdW1fdXNlZCA9IGhlYXAudG90YWxfdXNlZDsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFKQorICAgIHRyYWNlX2NudCA9IGJhY2t0cmFjZSggdHJhY2VfYnVmZmVyLCBNQVhfQlQgKTsKKyAgICBjdXItPnRyYWNlID0gYmFja3RyYWNlX3N5bWJvbHMoIHRyYWNlX2J1ZmZlciwgdHJhY2VfY250ICk7CisgICAgY3VyLT50cmFjZV9jb3VudCA9IHRyYWNlX2NudDsKKyNlbmRpZgorCisgICAgaWYoICggaGVhcC52ZXJpZnkgJiBNQkVEVExTX01FTU9SWV9WRVJJRllfQUxMT0MgKSAmJiB2ZXJpZnlfY2hhaW4oKSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisKKyAgICByZXQgPSAodW5zaWduZWQgY2hhciAqKSBjdXIgKyBzaXplb2YoIG1lbW9yeV9oZWFkZXIgKTsKKyAgICBtZW1zZXQoIHJldCwgMCwgb3JpZ2luYWxfbGVuICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfYWxsb2NfZnJlZSggdm9pZCAqcHRyICkKK3sKKyAgICBtZW1vcnlfaGVhZGVyICpoZHIsICpvbGQgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSBwdHI7CisKKyAgICBpZiggcHRyID09IE5VTEwgfHwgaGVhcC5idWYgPT0gTlVMTCB8fCBoZWFwLmZpcnN0ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiggcCA8IGhlYXAuYnVmIHx8IHAgPiBoZWFwLmJ1ZiArIGhlYXAubGVuICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGQVRBTDogbWJlZHRsc19mcmVlKCkgb3V0c2lkZSBvZiBtYW5hZ2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhY2VcbiIgKTsKKyNlbmRpZgorICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICB9CisKKyAgICBwIC09IHNpemVvZihtZW1vcnlfaGVhZGVyKTsKKyAgICBoZHIgPSAobWVtb3J5X2hlYWRlciAqKSBwOworCisgICAgaWYoIHZlcmlmeV9oZWFkZXIoIGhkciApICE9IDAgKQorICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKworICAgIGlmKCBoZHItPmFsbG9jICE9IDEgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZBVEFMOiBtYmVkdGxzX2ZyZWUoKSBvbiB1bmFsbG9jYXRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFcbiIgKTsKKyNlbmRpZgorICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICB9CisKKyAgICBoZHItPmFsbG9jID0gMDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgaGVhcC5mcmVlX2NvdW50Kys7CisgICAgaGVhcC50b3RhbF91c2VkIC09IGhkci0+c2l6ZTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UpCisgICAgZnJlZSggaGRyLT50cmFjZSApOworICAgIGhkci0+dHJhY2UgPSBOVUxMOworICAgIGhkci0+dHJhY2VfY291bnQgPSAwOworI2VuZGlmCisKKyAgICAvLyBSZWdyb3VwIHdpdGggYmxvY2sgYmVmb3JlCisgICAgLy8KKyAgICBpZiggaGRyLT5wcmV2ICE9IE5VTEwgJiYgaGRyLT5wcmV2LT5hbGxvYyA9PSAwICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgaGVhcC5oZWFkZXJfY291bnQtLTsKKyNlbmRpZgorICAgICAgICBoZHItPnByZXYtPnNpemUgKz0gc2l6ZW9mKG1lbW9yeV9oZWFkZXIpICsgaGRyLT5zaXplOworICAgICAgICBoZHItPnByZXYtPm5leHQgPSBoZHItPm5leHQ7CisgICAgICAgIG9sZCA9IGhkcjsKKyAgICAgICAgaGRyID0gaGRyLT5wcmV2OworCisgICAgICAgIGlmKCBoZHItPm5leHQgIT0gTlVMTCApCisgICAgICAgICAgICBoZHItPm5leHQtPnByZXYgPSBoZHI7CisKKyAgICAgICAgbWVtc2V0KCBvbGQsIDAsIHNpemVvZihtZW1vcnlfaGVhZGVyKSApOworICAgIH0KKworICAgIC8vIFJlZ3JvdXAgd2l0aCBibG9jayBhZnRlcgorICAgIC8vCisgICAgaWYoIGhkci0+bmV4dCAhPSBOVUxMICYmIGhkci0+bmV4dC0+YWxsb2MgPT0gMCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgICAgIGhlYXAuaGVhZGVyX2NvdW50LS07CisjZW5kaWYKKyAgICAgICAgaGRyLT5zaXplICs9IHNpemVvZihtZW1vcnlfaGVhZGVyKSArIGhkci0+bmV4dC0+c2l6ZTsKKyAgICAgICAgb2xkID0gaGRyLT5uZXh0OworICAgICAgICBoZHItPm5leHQgPSBoZHItPm5leHQtPm5leHQ7CisKKyAgICAgICAgaWYoIGhkci0+cHJldl9mcmVlICE9IE5VTEwgfHwgaGRyLT5uZXh0X2ZyZWUgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBoZHItPnByZXZfZnJlZSAhPSBOVUxMICkKKyAgICAgICAgICAgICAgICBoZHItPnByZXZfZnJlZS0+bmV4dF9mcmVlID0gaGRyLT5uZXh0X2ZyZWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaGVhcC5maXJzdF9mcmVlID0gaGRyLT5uZXh0X2ZyZWU7CisKKyAgICAgICAgICAgIGlmKCBoZHItPm5leHRfZnJlZSAhPSBOVUxMICkKKyAgICAgICAgICAgICAgICBoZHItPm5leHRfZnJlZS0+cHJldl9mcmVlID0gaGRyLT5wcmV2X2ZyZWU7CisgICAgICAgIH0KKworICAgICAgICBoZHItPnByZXZfZnJlZSA9IG9sZC0+cHJldl9mcmVlOworICAgICAgICBoZHItPm5leHRfZnJlZSA9IG9sZC0+bmV4dF9mcmVlOworCisgICAgICAgIGlmKCBoZHItPnByZXZfZnJlZSAhPSBOVUxMICkKKyAgICAgICAgICAgIGhkci0+cHJldl9mcmVlLT5uZXh0X2ZyZWUgPSBoZHI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhlYXAuZmlyc3RfZnJlZSA9IGhkcjsKKworICAgICAgICBpZiggaGRyLT5uZXh0X2ZyZWUgIT0gTlVMTCApCisgICAgICAgICAgICBoZHItPm5leHRfZnJlZS0+cHJldl9mcmVlID0gaGRyOworCisgICAgICAgIGlmKCBoZHItPm5leHQgIT0gTlVMTCApCisgICAgICAgICAgICBoZHItPm5leHQtPnByZXYgPSBoZHI7CisKKyAgICAgICAgbWVtc2V0KCBvbGQsIDAsIHNpemVvZihtZW1vcnlfaGVhZGVyKSApOworICAgIH0KKworICAgIC8vIFByZXBlbmQgdG8gZnJlZV9saXN0IGlmIHdlIGhhdmUgbm90IG1lcmdlZAorICAgIC8vIChEb2VzIG5vdCBoYXZlIHRvIHN0YXkgaW4gc2FtZSBvcmRlciBhcyBwcmV2IC8gbmV4dCBsaXN0KQorICAgIC8vCisgICAgaWYoIG9sZCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIGhkci0+bmV4dF9mcmVlID0gaGVhcC5maXJzdF9mcmVlOworICAgICAgICBpZiggaGVhcC5maXJzdF9mcmVlICE9IE5VTEwgKQorICAgICAgICAgICAgaGVhcC5maXJzdF9mcmVlLT5wcmV2X2ZyZWUgPSBoZHI7CisgICAgICAgIGhlYXAuZmlyc3RfZnJlZSA9IGhkcjsKKyAgICB9CisKKyAgICBpZiggKCBoZWFwLnZlcmlmeSAmIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9GUkVFICkgJiYgdmVyaWZ5X2NoYWluKCkgIT0gMCApCisgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworfQorCit2b2lkIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9zZXRfdmVyaWZ5KCBpbnQgdmVyaWZ5ICkKK3sKKyAgICBoZWFwLnZlcmlmeSA9IHZlcmlmeTsKK30KKworaW50IG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkoKQoreworICAgIHJldHVybiB2ZXJpZnlfY2hhaW4oKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCit2b2lkIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19zdGF0dXMoKQoreworICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICJDdXJyZW50IHVzZTogJXp1IGJsb2NrcyAvICV6dSBieXRlcywgbWF4OiAlenUgYmxvY2tzIC8gIgorICAgICAgICAgICAgICAgICAgICAgICIlenUgYnl0ZXMgKHRvdGFsICV6dSBieXRlcyksIGFsbG9jIC8gZnJlZTogJXp1IC8gJXp1XG4iLAorICAgICAgICAgICAgICAgICAgICAgIGhlYXAuaGVhZGVyX2NvdW50LCBoZWFwLnRvdGFsX3VzZWQsCisgICAgICAgICAgICAgICAgICAgICAgaGVhcC5tYXhpbXVtX2hlYWRlcl9jb3VudCwgaGVhcC5tYXhpbXVtX3VzZWQsCisgICAgICAgICAgICAgICAgICAgICAgaGVhcC5tYXhpbXVtX2hlYWRlcl9jb3VudCAqIHNpemVvZiggbWVtb3J5X2hlYWRlciApCisgICAgICAgICAgICAgICAgICAgICAgKyBoZWFwLm1heGltdW1fdXNlZCwKKyAgICAgICAgICAgICAgICAgICAgICBoZWFwLmFsbG9jX2NvdW50LCBoZWFwLmZyZWVfY291bnQgKTsKKworICAgIGlmKCBoZWFwLmZpcnN0LT5uZXh0ID09IE5VTEwgKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkFsbCBtZW1vcnkgZGUtYWxsb2NhdGVkIGluIHN0YWNrIGJ1ZmZlclxuIiApOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiTWVtb3J5IGN1cnJlbnRseSBhbGxvY2F0ZWQ6XG4iICk7CisgICAgICAgIGRlYnVnX2NoYWluKCk7CisgICAgfQorfQorCit2b2lkIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfZ2V0KCBzaXplX3QgKm1heF91c2VkLCBzaXplX3QgKm1heF9ibG9ja3MgKQoreworICAgICptYXhfdXNlZCAgID0gaGVhcC5tYXhpbXVtX3VzZWQ7CisgICAgKm1heF9ibG9ja3MgPSBoZWFwLm1heGltdW1faGVhZGVyX2NvdW50OworfQorCit2b2lkIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfcmVzZXQoIHZvaWQgKQoreworICAgIGhlYXAubWF4aW11bV91c2VkID0gMDsKKyAgICBoZWFwLm1heGltdW1faGVhZGVyX2NvdW50ID0gMDsKK30KKwordm9pZCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfY3VyX2dldCggc2l6ZV90ICpjdXJfdXNlZCwgc2l6ZV90ICpjdXJfYmxvY2tzICkKK3sKKyAgICAqY3VyX3VzZWQgICA9IGhlYXAudG90YWxfdXNlZDsKKyAgICAqY3VyX2Jsb2NrcyA9IGhlYXAuaGVhZGVyX2NvdW50OworfQorI2VuZGlmIC8qIE1CRURUTFNfTUVNT1JZX0RFQlVHICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCitzdGF0aWMgdm9pZCAqYnVmZmVyX2FsbG9jX2NhbGxvY19tdXRleGVkKCBzaXplX3Qgbiwgc2l6ZV90IHNpemUgKQoreworICAgIHZvaWQgKmJ1ZjsKKyAgICBpZiggbWJlZHRsc19tdXRleF9sb2NrKCAmaGVhcC5tdXRleCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE5VTEwgKTsKKyAgICBidWYgPSBidWZmZXJfYWxsb2NfY2FsbG9jKCBuLCBzaXplICk7CisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfdW5sb2NrKCAmaGVhcC5tdXRleCApICkKKyAgICAgICAgcmV0dXJuKCBOVUxMICk7CisgICAgcmV0dXJuKCBidWYgKTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX2FsbG9jX2ZyZWVfbXV0ZXhlZCggdm9pZCAqcHRyICkKK3sKKyAgICAvKiBXZSBoYXZlIHRvIGdvb2Qgb3B0aW9uIGhlcmUsIGJ1dCBjb3JydXB0aW5nIHRoZSBoZWFwIHNlZW1zCisgICAgICogd29yc2UgdGhhbiBsb29zaW5nIG1lbW9yeS4gKi8KKyAgICBpZiggbWJlZHRsc19tdXRleF9sb2NrKCAmaGVhcC5tdXRleCApICkKKyAgICAgICAgcmV0dXJuOworICAgIGJ1ZmZlcl9hbGxvY19mcmVlKCBwdHIgKTsKKyAgICAodm9pZCkgbWJlZHRsc19tdXRleF91bmxvY2soICZoZWFwLm11dGV4ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19USFJFQURJTkdfQyAqLworCit2b2lkIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19pbml0KCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIG1lbXNldCggJmhlYXAsIDAsIHNpemVvZihidWZmZXJfYWxsb2NfY3R4KSApOworICAgIG1lbXNldCggYnVmLCAwLCBsZW4gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX211dGV4X2luaXQoICZoZWFwLm11dGV4ICk7CisgICAgbWJlZHRsc19wbGF0Zm9ybV9zZXRfY2FsbG9jX2ZyZWUoIGJ1ZmZlcl9hbGxvY19jYWxsb2NfbXV0ZXhlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9hbGxvY19mcmVlX211dGV4ZWQgKTsKKyNlbHNlCisgICAgbWJlZHRsc19wbGF0Zm9ybV9zZXRfY2FsbG9jX2ZyZWUoIGJ1ZmZlcl9hbGxvY19jYWxsb2MsIGJ1ZmZlcl9hbGxvY19mcmVlICk7CisjZW5kaWYKKworICAgIGlmKCAoc2l6ZV90KSBidWYgJSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRSApCisgICAgeworICAgICAgICAvKiBBZGp1c3QgbGVuIGZpcnN0IHNpbmNlIGJ1ZiBpcyB1c2VkIGluIHRoZSBjb21wdXRhdGlvbiAqLworICAgICAgICBsZW4gLT0gTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEUKKyAgICAgICAgICAgICAtIChzaXplX3QpIGJ1ZiAlIE1CRURUTFNfTUVNT1JZX0FMSUdOX01VTFRJUExFOworICAgICAgICBidWYgKz0gTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEUKKyAgICAgICAgICAgICAtIChzaXplX3QpIGJ1ZiAlIE1CRURUTFNfTUVNT1JZX0FMSUdOX01VTFRJUExFOworICAgIH0KKworICAgIGhlYXAuYnVmID0gYnVmOworICAgIGhlYXAubGVuID0gbGVuOworCisgICAgaGVhcC5maXJzdCA9IChtZW1vcnlfaGVhZGVyICopIGJ1ZjsKKyAgICBoZWFwLmZpcnN0LT5zaXplID0gbGVuIC0gc2l6ZW9mKG1lbW9yeV9oZWFkZXIpOworICAgIGhlYXAuZmlyc3QtPm1hZ2ljMSA9IE1BR0lDMTsKKyAgICBoZWFwLmZpcnN0LT5tYWdpYzIgPSBNQUdJQzI7CisgICAgaGVhcC5maXJzdF9mcmVlID0gaGVhcC5maXJzdDsKK30KKwordm9pZCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSgpCit7CisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfbXV0ZXhfZnJlZSggJmhlYXAubXV0ZXggKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfemVyb2l6ZSggJmhlYXAsIHNpemVvZihidWZmZXJfYWxsb2NfY3R4KSApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKK3N0YXRpYyBpbnQgY2hlY2tfcG9pbnRlciggdm9pZCAqcCApCit7CisgICAgaWYoIHAgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGlmKCAoc2l6ZV90KSBwICUgTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEUgIT0gMCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IGNoZWNrX2FsbF9mcmVlKCApCit7CisgICAgaWYoCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgaGVhcC50b3RhbF91c2VkICE9IDAgfHwKKyNlbmRpZgorICAgICAgICBoZWFwLmZpcnN0ICE9IGhlYXAuZmlyc3RfZnJlZSB8fAorICAgICAgICAodm9pZCAqKSBoZWFwLmZpcnN0ICE9ICh2b2lkICopIGhlYXAuYnVmICkKKyAgICB7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2RlZmluZSBURVNUX0FTU0VSVCggY29uZGl0aW9uICkgICAgICAgICAgICBcCisgICAgaWYoICEgKGNvbmRpdGlvbikgKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZ290byBjbGVhbnVwOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworaW50IG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKyAgICB1bnNpZ25lZCBjaGFyICpwLCAqcSwgKnIsICplbmQ7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIE1CQSB0ZXN0ICMxIChiYXNpYyBhbGxvYy1mcmVlIGN5Y2xlKTogIiApOworCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQoIGJ1Ziwgc2l6ZW9mKCBidWYgKSApOworCisgICAgcCA9IG1iZWR0bHNfY2FsbG9jKCAxLCAxICk7CisgICAgcSA9IG1iZWR0bHNfY2FsbG9jKCAxLCAxMjggKTsKKyAgICByID0gbWJlZHRsc19jYWxsb2MoIDEsIDE2ICk7CisKKyAgICBURVNUX0FTU0VSVCggY2hlY2tfcG9pbnRlciggcCApID09IDAgJiYKKyAgICAgICAgICAgICAgICAgY2hlY2tfcG9pbnRlciggcSApID09IDAgJiYKKyAgICAgICAgICAgICAgICAgY2hlY2tfcG9pbnRlciggciApID09IDAgKTsKKworICAgIG1iZWR0bHNfZnJlZSggciApOworICAgIG1iZWR0bHNfZnJlZSggcSApOworICAgIG1iZWR0bHNfZnJlZSggcCApOworCisgICAgVEVTVF9BU1NFUlQoIGNoZWNrX2FsbF9mcmVlKCApID09IDAgKTsKKworICAgIC8qIE1lbW9yaXplIGVuZCB0byBjb21wYXJlIHdpdGggdGhlIG5leHQgdGVzdCAqLworICAgIGVuZCA9IGhlYXAuYnVmICsgaGVhcC5sZW47CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSggKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBNQkEgdGVzdCAjMiAoYnVmIG5vdCBhbGlnbmVkKTogIiApOworCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQoIGJ1ZiArIDEsIHNpemVvZiggYnVmICkgLSAxICk7CisKKyAgICBURVNUX0FTU0VSVCggaGVhcC5idWYgKyBoZWFwLmxlbiA9PSBlbmQgKTsKKworICAgIHAgPSBtYmVkdGxzX2NhbGxvYyggMSwgMSApOworICAgIHEgPSBtYmVkdGxzX2NhbGxvYyggMSwgMTI4ICk7CisgICAgciA9IG1iZWR0bHNfY2FsbG9jKCAxLCAxNiApOworCisgICAgVEVTVF9BU1NFUlQoIGNoZWNrX3BvaW50ZXIoIHAgKSA9PSAwICYmCisgICAgICAgICAgICAgICAgIGNoZWNrX3BvaW50ZXIoIHEgKSA9PSAwICYmCisgICAgICAgICAgICAgICAgIGNoZWNrX3BvaW50ZXIoIHIgKSA9PSAwICk7CisKKyAgICBtYmVkdGxzX2ZyZWUoIHIgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIHEgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIHAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBjaGVja19hbGxfZnJlZSggKSA9PSAwICk7CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSggKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBNQkEgdGVzdCAjMyAoZnVsbCk6ICIgKTsKKworICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19pbml0KCBidWYsIHNpemVvZiggYnVmICkgKTsKKworICAgIHAgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBidWYgKSAtIHNpemVvZiggbWVtb3J5X2hlYWRlciApICk7CisKKyAgICBURVNUX0FTU0VSVCggY2hlY2tfcG9pbnRlciggcCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYWxsb2MoIDEsIDEgKSA9PSBOVUxMICk7CisKKyAgICBtYmVkdGxzX2ZyZWUoIHAgKTsKKworICAgIHAgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBidWYgKSAtIDIgKiBzaXplb2YoIG1lbW9yeV9oZWFkZXIgKSAtIDE2ICk7CisgICAgcSA9IG1iZWR0bHNfY2FsbG9jKCAxLCAxNiApOworCisgICAgVEVTVF9BU1NFUlQoIGNoZWNrX3BvaW50ZXIoIHAgKSA9PSAwICYmIGNoZWNrX3BvaW50ZXIoIHEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2FsbG9jKCAxLCAxICkgPT0gTlVMTCApOworCisgICAgbWJlZHRsc19mcmVlKCBxICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYWxsb2MoIDEsIDE3ICkgPT0gTlVMTCApOworCisgICAgbWJlZHRsc19mcmVlKCBwICk7CisKKyAgICBURVNUX0FTU0VSVCggY2hlY2tfYWxsX2ZyZWUoICkgPT0gMCApOworCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWUoICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSggKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9uZXRfc29ja2V0cy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbmV0X3NvY2tldHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzA2Y2JmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbmV0X3NvY2tldHMuYwpAQCAtMCwwICsxLDU4NSBAQAorLyoKKyAqICBUQ1AvSVAgb3IgVURQL0lQIG5ldHdvcmtpbmcgZnVuY3Rpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTkVUX0MpCisKKyNpZiAhZGVmaW5lZCh1bml4KSAmJiAhZGVmaW5lZChfX3VuaXhfXykgJiYgIWRlZmluZWQoX191bml4KSAmJiBcCisgICAgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfV0lOMzIpCisjZXJyb3IgIlRoaXMgbW9kdWxlIG9ubHkgd29ya3Mgb24gVW5peCBhbmQgV2luZG93cywgc2VlIE1CRURUTFNfTkVUX0MgaW4gY29uZmlnLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvbmV0X3NvY2tldHMuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpKSAmJiAhZGVmaW5lZChFRklYNjQpICYmIFwKKyAgICAhZGVmaW5lZChFRkkzMikKKworI2lmZGVmIF9XSU4zMl9XSU5OVAorI3VuZGVmIF9XSU4zMl9XSU5OVAorI2VuZGlmCisvKiBFbmFibGVzIGdldGFkZHJpbmZvKCkgJiBDbyAqLworI2RlZmluZSBfV0lOMzJfV0lOTlQgMHgwNTAxCisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCisjcHJhZ21hIGNvbW1lbnQoIGxpYiwgIndzMi5saWIiICkKKyNlbHNlCisjcHJhZ21hIGNvbW1lbnQoIGxpYiwgIndzMl8zMi5saWIiICkKKyNlbmRpZgorI2VuZGlmIC8qIF9NU0NfVkVSICovCisKKyNkZWZpbmUgcmVhZChmZCxidWYsbGVuKSAgICAgICAgcmVjdihmZCwoY2hhciopYnVmLChpbnQpIGxlbiwwKQorI2RlZmluZSB3cml0ZShmZCxidWYsbGVuKSAgICAgICBzZW5kKGZkLChjaGFyKilidWYsKGludCkgbGVuLDApCisjZGVmaW5lIGNsb3NlKGZkKSAgICAgICAgICAgICAgIGNsb3Nlc29ja2V0KGZkKQorCitzdGF0aWMgaW50IHdzYV9pbml0X2RvbmUgPSAwOworCisjZWxzZSAvKiAoIF9XSU4zMiB8fCBfV0lOMzJfV0NFICkgJiYgIUVGSVg2NCAmJiAhRUZJMzIgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2VuZGlmIC8qICggX1dJTjMyIHx8IF9XSU4zMl9XQ0UgKSAmJiAhRUZJWDY0ICYmICFFRkkzMiAqLworCisvKiBTb21lIE1TIGZ1bmN0aW9ucyB3YW50IGludCBhbmQgTVNWQyB3YXJucyBpZiB3ZSBwYXNzIHNpemVfdCwKKyAqIGJ1dCB0aGUgc3RhbmRhcmQgZnVjbnRpb25zIHVzZSBzb2NrbGVuX3QsIHNvIGNhc3Qgb25seSBmb3IgTVNWQyAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIE1TVkNfSU5UX0NBU1QgICAoaW50KQorI2Vsc2UKKyNkZWZpbmUgTVNWQ19JTlRfQ0FTVAorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8qCisgKiBQcmVwYXJlIGZvciB1c2luZyB0aGUgc29ja2V0cyBpbnRlcmZhY2UKKyAqLworc3RhdGljIGludCBuZXRfcHJlcGFyZSggdm9pZCApCit7CisjaWYgKCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKSApICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgXAorICAgICFkZWZpbmVkKEVGSTMyKQorICAgIFdTQURBVEEgd3NhRGF0YTsKKworICAgIGlmKCB3c2FfaW5pdF9kb25lID09IDAgKQorICAgIHsKKyAgICAgICAgaWYoIFdTQVN0YXJ0dXAoIE1BS0VXT1JEKDIsMCksICZ3c2FEYXRhICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9TT0NLRVRfRkFJTEVEICk7CisKKyAgICAgICAgd3NhX2luaXRfZG9uZSA9IDE7CisgICAgfQorI2Vsc2UKKyNpZiAhZGVmaW5lZChFRklYNjQpICYmICFkZWZpbmVkKEVGSTMyKQorICAgIHNpZ25hbCggU0lHUElQRSwgU0lHX0lHTiApOworI2VuZGlmCisjZW5kaWYKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19uZXRfaW5pdCggbWJlZHRsc19uZXRfY29udGV4dCAqY3R4ICkKK3sKKyAgICBjdHgtPmZkID0gLTE7Cit9CisKKy8qCisgKiBJbml0aWF0ZSBhIFRDUCBjb25uZWN0aW9uIHdpdGggaG9zdDpwb3J0IGFuZCB0aGUgZ2l2ZW4gcHJvdG9jb2wKKyAqLworaW50IG1iZWR0bHNfbmV0X2Nvbm5lY3QoIG1iZWR0bHNfbmV0X2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqcG9ydCwgaW50IHByb3RvICkKK3sKKyAgICBpbnQgcmV0OworICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFkZHJfbGlzdCwgKmN1cjsKKworICAgIGlmKCAoIHJldCA9IG5ldF9wcmVwYXJlKCkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIC8qIERvIG5hbWUgcmVzb2x1dGlvbiB3aXRoIGJvdGggSVB2NiBhbmQgSVB2NCAqLworICAgIG1lbXNldCggJmhpbnRzLCAwLCBzaXplb2YoIGhpbnRzICkgKTsKKyAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9VTlNQRUM7CisgICAgaGludHMuYWlfc29ja3R5cGUgPSBwcm90byA9PSBNQkVEVExTX05FVF9QUk9UT19VRFAgPyBTT0NLX0RHUkFNIDogU09DS19TVFJFQU07CisgICAgaGludHMuYWlfcHJvdG9jb2wgPSBwcm90byA9PSBNQkVEVExTX05FVF9QUk9UT19VRFAgPyBJUFBST1RPX1VEUCA6IElQUFJPVE9fVENQOworCisgICAgaWYoIGdldGFkZHJpbmZvKCBob3N0LCBwb3J0LCAmaGludHMsICZhZGRyX2xpc3QgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfVU5LTk9XTl9IT1NUICk7CisKKyAgICAvKiBUcnkgdGhlIHNvY2thZGRycyB1bnRpbCBhIGNvbm5lY3Rpb24gc3VjY2VlZHMgKi8KKyAgICByZXQgPSBNQkVEVExTX0VSUl9ORVRfVU5LTk9XTl9IT1NUOworICAgIGZvciggY3VyID0gYWRkcl9saXN0OyBjdXIgIT0gTlVMTDsgY3VyID0gY3VyLT5haV9uZXh0ICkKKyAgICB7CisgICAgICAgIGN0eC0+ZmQgPSAoaW50KSBzb2NrZXQoIGN1ci0+YWlfZmFtaWx5LCBjdXItPmFpX3NvY2t0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ci0+YWlfcHJvdG9jb2wgKTsKKyAgICAgICAgaWYoIGN0eC0+ZmQgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfTkVUX1NPQ0tFVF9GQUlMRUQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBjb25uZWN0KCBjdHgtPmZkLCBjdXItPmFpX2FkZHIsIE1TVkNfSU5UX0NBU1QgY3VyLT5haV9hZGRybGVuICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNsb3NlKCBjdHgtPmZkICk7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX05FVF9DT05ORUNUX0ZBSUxFRDsKKyAgICB9CisKKyAgICBmcmVlYWRkcmluZm8oIGFkZHJfbGlzdCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIGxpc3RlbmluZyBzb2NrZXQgb24gYmluZF9pcDpwb3J0CisgKi8KK2ludCBtYmVkdGxzX25ldF9iaW5kKCBtYmVkdGxzX25ldF9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmJpbmRfaXAsIGNvbnN0IGNoYXIgKnBvcnQsIGludCBwcm90byApCit7CisgICAgaW50IG4sIHJldDsKKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphZGRyX2xpc3QsICpjdXI7CisKKyAgICBpZiggKCByZXQgPSBuZXRfcHJlcGFyZSgpICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAvKiBCaW5kIHRvIElQdjYgYW5kL29yIElQdjQsIGJ1dCBvbmx5IGluIHRoZSBkZXNpcmVkIHByb3RvY29sICovCisgICAgbWVtc2V0KCAmaGludHMsIDAsIHNpemVvZiggaGludHMgKSApOworICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IHByb3RvID09IE1CRURUTFNfTkVUX1BST1RPX1VEUCA/IFNPQ0tfREdSQU0gOiBTT0NLX1NUUkVBTTsKKyAgICBoaW50cy5haV9wcm90b2NvbCA9IHByb3RvID09IE1CRURUTFNfTkVUX1BST1RPX1VEUCA/IElQUFJPVE9fVURQIDogSVBQUk9UT19UQ1A7CisgICAgaWYoIGJpbmRfaXAgPT0gTlVMTCApCisgICAgICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRTsKKworICAgIGlmKCBnZXRhZGRyaW5mbyggYmluZF9pcCwgcG9ydCwgJmhpbnRzLCAmYWRkcl9saXN0ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTkVUX1VOS05PV05fSE9TVCApOworCisgICAgLyogVHJ5IHRoZSBzb2NrYWRkcnMgdW50aWwgYSBiaW5kaW5nIHN1Y2NlZWRzICovCisgICAgcmV0ID0gTUJFRFRMU19FUlJfTkVUX1VOS05PV05fSE9TVDsKKyAgICBmb3IoIGN1ciA9IGFkZHJfbGlzdDsgY3VyICE9IE5VTEw7IGN1ciA9IGN1ci0+YWlfbmV4dCApCisgICAgeworICAgICAgICBjdHgtPmZkID0gKGludCkgc29ja2V0KCBjdXItPmFpX2ZhbWlseSwgY3VyLT5haV9zb2NrdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXItPmFpX3Byb3RvY29sICk7CisgICAgICAgIGlmKCBjdHgtPmZkIDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX05FVF9TT0NLRVRfRkFJTEVEOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBuID0gMTsKKyAgICAgICAgaWYoIHNldHNvY2tvcHQoIGN0eC0+ZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopICZuLCBzaXplb2YoIG4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBjbG9zZSggY3R4LT5mZCApOworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfTkVUX1NPQ0tFVF9GQUlMRUQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBiaW5kKCBjdHgtPmZkLCBjdXItPmFpX2FkZHIsIE1TVkNfSU5UX0NBU1QgY3VyLT5haV9hZGRybGVuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsb3NlKCBjdHgtPmZkICk7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9ORVRfQklORF9GQUlMRUQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIExpc3RlbiBvbmx5IG1ha2VzIHNlbnNlIGZvciBUQ1AgKi8KKyAgICAgICAgaWYoIHByb3RvID09IE1CRURUTFNfTkVUX1BST1RPX1RDUCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBsaXN0ZW4oIGN0eC0+ZmQsIE1CRURUTFNfTkVUX0xJU1RFTl9CQUNLTE9HICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2xvc2UoIGN0eC0+ZmQgKTsKKyAgICAgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9ORVRfTElTVEVOX0ZBSUxFRDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIEkgd2UgZXZlciBnZXQgdGhlcmUsIGl0J3MgYSBzdWNjZXNzICovCisgICAgICAgIHJldCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZyZWVhZGRyaW5mbyggYWRkcl9saXN0ICk7CisKKyAgICByZXR1cm4oIHJldCApOworCit9CisKKyNpZiAoIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpICkgJiYgIWRlZmluZWQoRUZJWDY0KSAmJiBcCisgICAgIWRlZmluZWQoRUZJMzIpCisvKgorICogQ2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gd291bGQgYmUgYmxvY2tpbmcgb24gYSBub24tYmxvY2tpbmcgc29ja2V0CisgKiBhbmQgdGh1cyAnZmFpbGVkJyB3aXRoIGEgbmVnYXRpdmUgcmV0dXJuIHZhbHVlLgorICovCitzdGF0aWMgaW50IG5ldF93b3VsZF9ibG9jayggY29uc3QgbWJlZHRsc19uZXRfY29udGV4dCAqY3R4ICkKK3sKKyAgICAoKHZvaWQpIGN0eCk7CisgICAgcmV0dXJuKCBXU0FHZXRMYXN0RXJyb3IoKSA9PSBXU0FFV09VTERCTE9DSyApOworfQorI2Vsc2UKKy8qCisgKiBDaGVjayBpZiB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiB3b3VsZCBiZSBibG9ja2luZyBvbiBhIG5vbi1ibG9ja2luZyBzb2NrZXQKKyAqIGFuZCB0aHVzICdmYWlsZWQnIHdpdGggYSBuZWdhdGl2ZSByZXR1cm4gdmFsdWUuCisgKgorICogTm90ZTogb24gYSBibG9ja2luZyBzb2NrZXQgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyAwIQorICovCitzdGF0aWMgaW50IG5ldF93b3VsZF9ibG9jayggY29uc3QgbWJlZHRsc19uZXRfY29udGV4dCAqY3R4ICkKK3sKKyAgICAvKgorICAgICAqIE5ldmVyIHJldHVybiAnV09VTEQgQkxPQ0snIG9uIGEgbm9uLWJsb2NraW5nIHNvY2tldAorICAgICAqLworICAgIGlmKCAoIGZjbnRsKCBjdHgtPmZkLCBGX0dFVEZMICkgJiBPX05PTkJMT0NLICkgIT0gT19OT05CTE9DSyApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgc3dpdGNoKCBlcnJubyApCisgICAgeworI2lmIGRlZmluZWQgRUFHQUlOCisgICAgICAgIGNhc2UgRUFHQUlOOgorI2VuZGlmCisjaWYgZGVmaW5lZCBFV09VTERCTE9DSyAmJiBFV09VTERCTE9DSyAhPSBFQUdBSU4KKyAgICAgICAgY2FzZSBFV09VTERCTE9DSzoKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qICggX1dJTjMyIHx8IF9XSU4zMl9XQ0UgKSAmJiAhRUZJWDY0ICYmICFFRkkzMiAqLworCisvKgorICogQWNjZXB0IGEgY29ubmVjdGlvbiBmcm9tIGEgcmVtb3RlIGNsaWVudAorICovCitpbnQgbWJlZHRsc19uZXRfYWNjZXB0KCBtYmVkdGxzX25ldF9jb250ZXh0ICpiaW5kX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgKmNsaWVudF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRfaXAsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90ICppcF9sZW4gKQoreworICAgIGludCByZXQ7CisgICAgaW50IHR5cGU7CisKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBjbGllbnRfYWRkcjsKKworI2lmIGRlZmluZWQoX19zb2NrbGVuX3RfZGVmaW5lZCkgfHwgZGVmaW5lZChfU09DS0xFTl9UKSB8fCAgXAorICAgIGRlZmluZWQoX1NPQ0tMRU5fVF9ERUNMQVJFRCkgfHwgZGVmaW5lZChfX0RFRklORURfc29ja2xlbl90KQorICAgIHNvY2tsZW5fdCBuID0gKHNvY2tsZW5fdCkgc2l6ZW9mKCBjbGllbnRfYWRkciApOworICAgIHNvY2tsZW5fdCB0eXBlX2xlbiA9IChzb2NrbGVuX3QpIHNpemVvZiggdHlwZSApOworI2Vsc2UKKyAgICBpbnQgbiA9IChpbnQpIHNpemVvZiggY2xpZW50X2FkZHIgKTsKKyAgICBpbnQgdHlwZV9sZW4gPSAoaW50KSBzaXplb2YoIHR5cGUgKTsKKyNlbmRpZgorCisgICAgLyogSXMgdGhpcyBhIFRDUCBvciBVRFAgc29ja2V0PyAqLworICAgIGlmKCBnZXRzb2Nrb3B0KCBiaW5kX2N0eC0+ZmQsIFNPTF9TT0NLRVQsIFNPX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICh2b2lkICopICZ0eXBlLCAmdHlwZV9sZW4gKSAhPSAwIHx8CisgICAgICAgICggdHlwZSAhPSBTT0NLX1NUUkVBTSAmJiB0eXBlICE9IFNPQ0tfREdSQU0gKSApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9BQ0NFUFRfRkFJTEVEICk7CisgICAgfQorCisgICAgaWYoIHR5cGUgPT0gU09DS19TVFJFQU0gKQorICAgIHsKKyAgICAgICAgLyogVENQOiBhY3R1YWwgYWNjZXB0KCkgKi8KKyAgICAgICAgcmV0ID0gY2xpZW50X2N0eC0+ZmQgPSAoaW50KSBhY2NlcHQoIGJpbmRfY3R4LT5mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAmY2xpZW50X2FkZHIsICZuICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFVEUDogd2FpdCBmb3IgYSBtZXNzYWdlLCBidXQga2VlcCBpdCBpbiB0aGUgcXVldWUgKi8KKyAgICAgICAgY2hhciBidWZbMV0gPSB7IDAgfTsKKworICAgICAgICByZXQgPSAoaW50KSByZWN2ZnJvbSggYmluZF9jdHgtPmZkLCBidWYsIHNpemVvZiggYnVmICksIE1TR19QRUVLLAorICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAmY2xpZW50X2FkZHIsICZuICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgaWYoIHJldCA9PSBTT0NLRVRfRVJST1IgJiYKKyAgICAgICAgICAgIFdTQUdldExhc3RFcnJvcigpID09IFdTQUVNU0dTSVpFICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogV2Uga25vdyBidWYgaXMgdG9vIHNtYWxsLCB0aGFua3MsIGp1c3QgcGVla2luZyBoZXJlICovCisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiggcmV0IDwgMCApCisgICAgeworICAgICAgICBpZiggbmV0X3dvdWxkX2Jsb2NrKCBiaW5kX2N0eCApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICk7CisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfQUNDRVBUX0ZBSUxFRCApOworICAgIH0KKworICAgIC8qIFVEUDogaGlqYWNrIHRoZSBsaXN0ZW5pbmcgc29ja2V0IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGNsaWVudCwKKyAgICAgKiB0aGVuIGJpbmQgYSBuZXcgc29ja2V0IHRvIGFjY2VwdCBuZXcgY29ubmVjdGlvbnMgKi8KKyAgICBpZiggdHlwZSAhPSBTT0NLX1NUUkVBTSApCisgICAgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbF9hZGRyOworICAgICAgICBpbnQgb25lID0gMTsKKworICAgICAgICBpZiggY29ubmVjdCggYmluZF9jdHgtPmZkLCAoc3RydWN0IHNvY2thZGRyICopICZjbGllbnRfYWRkciwgbiApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfQUNDRVBUX0ZBSUxFRCApOworCisgICAgICAgIGNsaWVudF9jdHgtPmZkID0gYmluZF9jdHgtPmZkOworICAgICAgICBiaW5kX2N0eC0+ZmQgICA9IC0xOyAvKiBJbiBjYXNlIHdlIGV4aXQgZWFybHkgKi8KKworICAgICAgICBuID0gc2l6ZW9mKCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSApOworICAgICAgICBpZiggZ2V0c29ja25hbWUoIGNsaWVudF9jdHgtPmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmxvY2FsX2FkZHIsICZuICkgIT0gMCB8fAorICAgICAgICAgICAgKCBiaW5kX2N0eC0+ZmQgPSAoaW50KSBzb2NrZXQoIGxvY2FsX2FkZHIuc3NfZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQICkgKSA8IDAgfHwKKyAgICAgICAgICAgIHNldHNvY2tvcHQoIGJpbmRfY3R4LT5mZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgJm9uZSwgc2l6ZW9mKCBvbmUgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9TT0NLRVRfRkFJTEVEICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggYmluZCggYmluZF9jdHgtPmZkLCAoc3RydWN0IHNvY2thZGRyICopICZsb2NhbF9hZGRyLCBuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTkVUX0JJTkRfRkFJTEVEICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggY2xpZW50X2lwICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIGNsaWVudF9hZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUICkKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICphZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmNsaWVudF9hZGRyOworICAgICAgICAgICAgKmlwX2xlbiA9IHNpemVvZiggYWRkcjQtPnNpbl9hZGRyLnNfYWRkciApOworCisgICAgICAgICAgICBpZiggYnVmX3NpemUgPCAqaXBfbGVuICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICAgICAgICAgIG1lbWNweSggY2xpZW50X2lwLCAmYWRkcjQtPnNpbl9hZGRyLnNfYWRkciwgKmlwX2xlbiApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSAmY2xpZW50X2FkZHI7CisgICAgICAgICAgICAqaXBfbGVuID0gc2l6ZW9mKCBhZGRyNi0+c2luNl9hZGRyLnM2X2FkZHIgKTsKKworICAgICAgICAgICAgaWYoIGJ1Zl9zaXplIDwgKmlwX2xlbiApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgICAgICAgICBtZW1jcHkoIGNsaWVudF9pcCwgJmFkZHI2LT5zaW42X2FkZHIuczZfYWRkciwgKmlwX2xlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFNldCB0aGUgc29ja2V0IGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZworICovCitpbnQgbWJlZHRsc19uZXRfc2V0X2Jsb2NrKCBtYmVkdGxzX25ldF9jb250ZXh0ICpjdHggKQoreworI2lmICggZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkgKSAmJiAhZGVmaW5lZChFRklYNjQpICYmIFwKKyAgICAhZGVmaW5lZChFRkkzMikKKyAgICB1X2xvbmcgbiA9IDA7CisgICAgcmV0dXJuKCBpb2N0bHNvY2tldCggY3R4LT5mZCwgRklPTkJJTywgJm4gKSApOworI2Vsc2UKKyAgICByZXR1cm4oIGZjbnRsKCBjdHgtPmZkLCBGX1NFVEZMLCBmY250bCggY3R4LT5mZCwgRl9HRVRGTCApICYgfk9fTk9OQkxPQ0sgKSApOworI2VuZGlmCit9CisKK2ludCBtYmVkdGxzX25ldF9zZXRfbm9uYmxvY2soIG1iZWR0bHNfbmV0X2NvbnRleHQgKmN0eCApCit7CisjaWYgKCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKSApICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgXAorICAgICFkZWZpbmVkKEVGSTMyKQorICAgIHVfbG9uZyBuID0gMTsKKyAgICByZXR1cm4oIGlvY3Rsc29ja2V0KCBjdHgtPmZkLCBGSU9OQklPLCAmbiApICk7CisjZWxzZQorICAgIHJldHVybiggZmNudGwoIGN0eC0+ZmQsIEZfU0VURkwsIGZjbnRsKCBjdHgtPmZkLCBGX0dFVEZMICkgfCBPX05PTkJMT0NLICkgKTsKKyNlbmRpZgorfQorCisvKgorICogUG9ydGFibGUgdXNsZWVwIGhlbHBlcgorICovCit2b2lkIG1iZWR0bHNfbmV0X3VzbGVlcCggdW5zaWduZWQgbG9uZyB1c2VjICkKK3sKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBTbGVlcCggKCB1c2VjICsgOTk5ICkgLyAxMDAwICk7CisjZWxzZQorICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgIHR2LnR2X3NlYyAgPSB1c2VjIC8gMTAwMDAwMDsKKyNpZiBkZWZpbmVkKF9fdW5peF9fKSB8fCBkZWZpbmVkKF9fdW5peCkgfHwgXAorICAgICggZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19NQUNIX18pICkKKyAgICB0di50dl91c2VjID0gKHN1c2Vjb25kc190KSB1c2VjICUgMTAwMDAwMDsKKyNlbHNlCisgICAgdHYudHZfdXNlYyA9IHVzZWMgJSAxMDAwMDAwOworI2VuZGlmCisgICAgc2VsZWN0KCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAmdHYgKTsKKyNlbmRpZgorfQorCisvKgorICogUmVhZCBhdCBtb3N0ICdsZW4nIGNoYXJhY3RlcnMKKyAqLworaW50IG1iZWR0bHNfbmV0X3JlY3YoIHZvaWQgKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIGludCBmZCA9ICgobWJlZHRsc19uZXRfY29udGV4dCAqKSBjdHgpLT5mZDsKKworICAgIGlmKCBmZCA8IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9JTlZBTElEX0NPTlRFWFQgKTsKKworICAgIHJldCA9IChpbnQpIHJlYWQoIGZkLCBidWYsIGxlbiApOworCisgICAgaWYoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgaWYoIG5ldF93b3VsZF9ibG9jayggY3R4ICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKTsKKworI2lmICggZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkgKSAmJiAhZGVmaW5lZChFRklYNjQpICYmIFwKKyAgICAhZGVmaW5lZChFRkkzMikKKyAgICAgICAgaWYoIFdTQUdldExhc3RFcnJvcigpID09IFdTQUVDT05OUkVTRVQgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVCApOworI2Vsc2UKKyAgICAgICAgaWYoIGVycm5vID09IEVQSVBFIHx8IGVycm5vID09IEVDT05OUkVTRVQgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVCApOworCisgICAgICAgIGlmKCBlcnJubyA9PSBFSU5UUiApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKTsKKyNlbmRpZgorCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTkVUX1JFQ1ZfRkFJTEVEICk7CisgICAgfQorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFJlYWQgYXQgbW9zdCAnbGVuJyBjaGFyYWN0ZXJzLCBibG9ja2luZyBmb3IgYXQgbW9zdCAndGltZW91dCcgbXMKKyAqLworaW50IG1iZWR0bHNfbmV0X3JlY3ZfdGltZW91dCggdm9pZCAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGltZW91dCApCit7CisgICAgaW50IHJldDsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICBmZF9zZXQgcmVhZF9mZHM7CisgICAgaW50IGZkID0gKChtYmVkdGxzX25ldF9jb250ZXh0ICopIGN0eCktPmZkOworCisgICAgaWYoIGZkIDwgMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTkVUX0lOVkFMSURfQ09OVEVYVCApOworCisgICAgRkRfWkVSTyggJnJlYWRfZmRzICk7CisgICAgRkRfU0VUKCBmZCwgJnJlYWRfZmRzICk7CisKKyAgICB0di50dl9zZWMgID0gdGltZW91dCAvIDEwMDA7CisgICAgdHYudHZfdXNlYyA9ICggdGltZW91dCAlIDEwMDAgKSAqIDEwMDA7CisKKyAgICByZXQgPSBzZWxlY3QoIGZkICsgMSwgJnJlYWRfZmRzLCBOVUxMLCBOVUxMLCB0aW1lb3V0ID09IDAgPyBOVUxMIDogJnR2ICk7CisKKyAgICAvKiBaZXJvIGZkcyByZWFkeSBtZWFucyB3ZSB0aW1lZCBvdXQgKi8KKyAgICBpZiggcmV0ID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9USU1FT1VUICk7CisKKyAgICBpZiggcmV0IDwgMCApCisgICAgeworI2lmICggZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkgKSAmJiAhZGVmaW5lZChFRklYNjQpICYmIFwKKyAgICAhZGVmaW5lZChFRkkzMikKKyAgICAgICAgaWYoIFdTQUdldExhc3RFcnJvcigpID09IFdTQUVJTlRSICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApOworI2Vsc2UKKyAgICAgICAgaWYoIGVycm5vID09IEVJTlRSICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApOworI2VuZGlmCisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfUkVDVl9GQUlMRUQgKTsKKyAgICB9CisKKyAgICAvKiBUaGlzIGNhbGwgd2lsbCBub3QgYmxvY2sgKi8KKyAgICByZXR1cm4oIG1iZWR0bHNfbmV0X3JlY3YoIGN0eCwgYnVmLCBsZW4gKSApOworfQorCisvKgorICogV3JpdGUgYXQgbW9zdCAnbGVuJyBjaGFyYWN0ZXJzCisgKi8KK2ludCBtYmVkdGxzX25ldF9zZW5kKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBpbnQgZmQgPSAoKG1iZWR0bHNfbmV0X2NvbnRleHQgKikgY3R4KS0+ZmQ7CisKKyAgICBpZiggZmQgPCAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfSU5WQUxJRF9DT05URVhUICk7CisKKyAgICByZXQgPSAoaW50KSB3cml0ZSggZmQsIGJ1ZiwgbGVuICk7CisKKyAgICBpZiggcmV0IDwgMCApCisgICAgeworICAgICAgICBpZiggbmV0X3dvdWxkX2Jsb2NrKCBjdHggKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKworI2lmICggZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkgKSAmJiAhZGVmaW5lZChFRklYNjQpICYmIFwKKyAgICAhZGVmaW5lZChFRkkzMikKKyAgICAgICAgaWYoIFdTQUdldExhc3RFcnJvcigpID09IFdTQUVDT05OUkVTRVQgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVCApOworI2Vsc2UKKyAgICAgICAgaWYoIGVycm5vID09IEVQSVBFIHx8IGVycm5vID09IEVDT05OUkVTRVQgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVCApOworCisgICAgICAgIGlmKCBlcnJubyA9PSBFSU5UUiApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisjZW5kaWYKKworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9TRU5EX0ZBSUxFRCApOworICAgIH0KKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBHcmFjZWZ1bGx5IGNsb3NlIHRoZSBjb25uZWN0aW9uCisgKi8KK3ZvaWQgbWJlZHRsc19uZXRfZnJlZSggbWJlZHRsc19uZXRfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4LT5mZCA9PSAtMSApCisgICAgICAgIHJldHVybjsKKworICAgIHNodXRkb3duKCBjdHgtPmZkLCAyICk7CisgICAgY2xvc2UoIGN0eC0+ZmQgKTsKKworICAgIGN0eC0+ZmQgPSAtMTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfTkVUX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L29pZC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvb2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzODI2ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L29pZC5jCkBAIC0wLDAgKzEsNzEwIEBACisvKioKKyAqIFxmaWxlIG9pZC5jCisgKgorICogXGJyaWVmIE9iamVjdCBJZGVudGlmaWVyIChPSUQpIGRhdGFiYXNlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfT0lEX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiBzbnByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9VU0VfQykgfHwgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JFQVRFX0MpCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisjZW5kaWYKKworLyoKKyAqIE1hY3JvIHRvIGF1dG9tYXRpY2FsbHkgYWRkIHRoZSBzaXplIG9mICNkZWZpbmUnZCBPSURzCisgKi8KKyNkZWZpbmUgQUREX0xFTihzKSAgICAgIHMsIE1CRURUTFNfT0lEX1NJWkUocykKKworLyoKKyAqIE1hY3JvIHRvIGdlbmVyYXRlIGFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBvaWRfWFhYX2Zyb21fYXNuMSgpICh1c2VkIGJ5CisgKiB0aGUgb3RoZXIgZnVuY3Rpb25zKQorICovCisjZGVmaW5lIEZOX09JRF9UWVBFRF9GUk9NX0FTTjEoIFRZUEVfVCwgTkFNRSwgTElTVCApICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGNvbnN0IFRZUEVfVCAqIG9pZF8gIyMgTkFNRSAjIyBfZnJvbV9hc24xKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpvaWQgKSAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb25zdCBUWVBFX1QgKnAgPSBMSVNUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29uc3QgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90ICpjdXIgPSAoY29uc3QgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90ICopIHA7ICAgICAgICAgICAgIFwKKyAgICBpZiggcCA9PSBOVUxMIHx8IG9pZCA9PSBOVUxMICkgcmV0dXJuKCBOVUxMICk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgd2hpbGUoIGN1ci0+YXNuMSAhPSBOVUxMICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiggY3VyLT5hc24xX2xlbiA9PSBvaWQtPmxlbiAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG1lbWNtcCggY3VyLT5hc24xLCBvaWQtPnAsIG9pZC0+bGVuICkgPT0gMCApIHsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4oIHAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGN1ciA9IChjb25zdCBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3QgKikgcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiggTlVMTCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyoKKyAqIE1hY3JvIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgYSBzaW5nbGUgYXR0cmlidXRlIGZyb20gdGhlCisgKiBkZXNjcmlwdG9yIG9mIGFuIG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCB3cmFwcGVyLgorICovCisjZGVmaW5lIEZOX09JRF9HRVRfREVTQ1JJUFRPUl9BVFRSMShGTl9OQU1FLCBUWVBFX1QsIFRZUEVfTkFNRSwgQVRUUjFfVFlQRSwgQVRUUjEpIFwKK2ludCBGTl9OQU1FKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpvaWQsIEFUVFIxX1RZUEUgKiBBVFRSMSApICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvbnN0IFRZUEVfVCAqZGF0YSA9IG9pZF8gIyMgVFlQRV9OQU1FICMjIF9mcm9tX2FzbjEoIG9pZCApOyAgICAgICAgXAorICAgIGlmKCBkYXRhID09IE5VTEwgKSByZXR1cm4oIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQgKTsgICAgICAgICAgICBcCisgICAgKkFUVFIxID0gZGF0YS0+ZGVzY3JpcHRvci5BVFRSMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuKCAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8qCisgKiBNYWNybyB0byBnZW5lcmF0ZSBhIGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIGEgc2luZ2xlIGF0dHJpYnV0ZSBmcm9tIGFuCisgKiBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3Qgd3JhcHBlci4KKyAqLworI2RlZmluZSBGTl9PSURfR0VUX0FUVFIxKEZOX05BTUUsIFRZUEVfVCwgVFlQRV9OQU1FLCBBVFRSMV9UWVBFLCBBVFRSMSkgXAoraW50IEZOX05BTUUoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwgQVRUUjFfVFlQRSAqIEFUVFIxICkgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29uc3QgVFlQRV9UICpkYXRhID0gb2lkXyAjIyBUWVBFX05BTUUgIyMgX2Zyb21fYXNuMSggb2lkICk7ICAgICAgICBcCisgICAgaWYoIGRhdGEgPT0gTlVMTCApIHJldHVybiggTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORCApOyAgICAgICAgICAgIFwKKyAgICAqQVRUUjEgPSBkYXRhLT5BVFRSMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4oIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyoKKyAqIE1hY3JvIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdHdvIGF0dHJpYnV0ZXMgZnJvbSBhbgorICogbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90IHdyYXBwZXIuCisgKi8KKyNkZWZpbmUgRk5fT0lEX0dFVF9BVFRSMihGTl9OQU1FLCBUWVBFX1QsIFRZUEVfTkFNRSwgQVRUUjFfVFlQRSwgQVRUUjEsICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgQVRUUjJfVFlQRSwgQVRUUjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoraW50IEZOX05BTUUoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwgQVRUUjFfVFlQRSAqIEFUVFIxLCBBVFRSMl9UWVBFICogQVRUUjIgKSAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb25zdCBUWVBFX1QgKmRhdGEgPSBvaWRfICMjIFRZUEVfTkFNRSAjIyBfZnJvbV9hc24xKCBvaWQgKTsgICAgICAgICAgICBcCisgICAgaWYoIGRhdGEgPT0gTlVMTCApIHJldHVybiggTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORCApOyAgICAgICAgICAgICAgICBcCisgICAgKkFUVFIxID0gZGF0YS0+QVRUUjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpBVFRSMiA9IGRhdGEtPkFUVFIyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4oIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8qCisgKiBNYWNybyB0byBnZW5lcmF0ZSBhIGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSBPSUQgYmFzZWQgb24gYSBzaW5nbGUKKyAqIGF0dHJpYnV0ZSBmcm9tIGEgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90IHdyYXBwZXIuCisgKi8KKyNkZWZpbmUgRk5fT0lEX0dFVF9PSURfQllfQVRUUjEoRk5fTkFNRSwgVFlQRV9ULCBMSVNULCBBVFRSMV9UWVBFLCBBVFRSMSkgICBcCitpbnQgRk5fTkFNRSggQVRUUjFfVFlQRSBBVFRSMSwgY29uc3QgY2hhciAqKm9pZCwgc2l6ZV90ICpvbGVuICkgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb25zdCBUWVBFX1QgKmN1ciA9IExJU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgd2hpbGUoIGN1ci0+ZGVzY3JpcHRvci5hc24xICE9IE5VTEwgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiggY3VyLT5BVFRSMSA9PSBBVFRSMSApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICpvaWQgPSBjdXItPmRlc2NyaXB0b3IuYXNuMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAqb2xlbiA9IGN1ci0+ZGVzY3JpcHRvci5hc24xX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuKCAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGN1cisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyoKKyAqIE1hY3JvIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIE9JRCBiYXNlZCBvbiB0d28KKyAqIGF0dHJpYnV0ZXMgZnJvbSBhIG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCB3cmFwcGVyLgorICovCisjZGVmaW5lIEZOX09JRF9HRVRfT0lEX0JZX0FUVFIyKEZOX05BTUUsIFRZUEVfVCwgTElTVCwgQVRUUjFfVFlQRSwgQVRUUjEsICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVFRSMl9UWVBFLCBBVFRSMikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2ludCBGTl9OQU1FKCBBVFRSMV9UWVBFIEFUVFIxLCBBVFRSMl9UWVBFIEFUVFIyLCBjb25zdCBjaGFyICoqb2lkICwgICAgICAgICBcCisgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb25zdCBUWVBFX1QgKmN1ciA9IExJU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgd2hpbGUoIGN1ci0+ZGVzY3JpcHRvci5hc24xICE9IE5VTEwgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiggY3VyLT5BVFRSMSA9PSBBVFRSMSAmJiBjdXItPkFUVFIyID09IEFUVFIyICkgeyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICpvaWQgPSBjdXItPmRlc2NyaXB0b3IuYXNuMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAqb2xlbiA9IGN1ci0+ZGVzY3JpcHRvci5hc24xX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuKCAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGN1cisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1VTRV9DKSB8fCBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkVBVEVfQykKKy8qCisgKiBGb3IgWDUyMCBhdHRyaWJ1dGUgdHlwZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCAgICBkZXNjcmlwdG9yOworICAgIGNvbnN0IGNoYXIgICAgICAgICAgKnNob3J0X25hbWU7Cit9IG9pZF94NTIwX2F0dHJfdDsKKworc3RhdGljIGNvbnN0IG9pZF94NTIwX2F0dHJfdCBvaWRfeDUyMF9hdHRyX3R5cGVbXSA9Cit7CisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0FUX0NOICksICAgICAgICAgICJpZC1hdC1jb21tb25OYW1lIiwgICAgICAgICAgICAgICAiQ29tbW9uIE5hbWUiIH0sCisgICAgICAgICJDTiIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfQ09VTlRSWSApLCAgICAgImlkLWF0LWNvdW50cnlOYW1lIiwgICAgICAgICAgICAgICJDb3VudHJ5IiB9LAorICAgICAgICAiQyIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfTE9DQUxJVFkgKSwgICAgImlkLWF0LWxvY2FsaXR5IiwgICAgICAgICAgICAgICAgICJMb2NhbGl0eSIgfSwKKyAgICAgICAgIkwiLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0FUX1NUQVRFICksICAgICAgICJpZC1hdC1zdGF0ZSIsICAgICAgICAgICAgICAgICAgICAiU3RhdGUiIH0sCisgICAgICAgICJTVCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfT1JHQU5JWkFUSU9OICksImlkLWF0LW9yZ2FuaXphdGlvbk5hbWUiLCAgICAgICAgICJPcmdhbml6YXRpb24iIH0sCisgICAgICAgICJPIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9BVF9PUkdfVU5JVCApLCAgICAiaWQtYXQtb3JnYW5pemF0aW9uYWxVbml0TmFtZSIsICAgIk9yZyBVbml0IiB9LAorICAgICAgICAiT1UiLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1BLQ1M5X0VNQUlMICksICAgICJlbWFpbEFkZHJlc3MiLCAgICAgICAgICAgICAgICAgICAiRS1tYWlsIGFkZHJlc3MiIH0sCisgICAgICAgICJlbWFpbEFkZHJlc3MiLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0FUX1NFUklBTF9OVU1CRVIgKSwiaWQtYXQtc2VyaWFsTnVtYmVyIiwgICAgICAgICAgICAiU2VyaWFsIG51bWJlciIgfSwKKyAgICAgICAgInNlcmlhbE51bWJlciIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfUE9TVEFMX0FERFJFU1MgKSwiaWQtYXQtcG9zdGFsQWRkcmVzcyIsICAgICAgICAgICJQb3N0YWwgYWRkcmVzcyIgfSwKKyAgICAgICAgInBvc3RhbEFkZHJlc3MiLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0FUX1BPU1RBTF9DT0RFICksICJpZC1hdC1wb3N0YWxDb2RlIiwgICAgICAgICAgICAgICAiUG9zdGFsIGNvZGUiIH0sCisgICAgICAgICJwb3N0YWxDb2RlIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9BVF9TVVJfTkFNRSApLCAgICAiaWQtYXQtc3VyTmFtZSIsICAgICAgICAgICAgICAgICAgIlN1cm5hbWUiIH0sCisgICAgICAgICJTTiIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfR0lWRU5fTkFNRSApLCAgImlkLWF0LWdpdmVuTmFtZSIsICAgICAgICAgICAgICAgICJHaXZlbiBuYW1lIiB9LAorICAgICAgICAiR04iLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0FUX0lOSVRJQUxTICksICAgICJpZC1hdC1pbml0aWFscyIsICAgICAgICAgICAgICAgICAiSW5pdGlhbHMiIH0sCisgICAgICAgICJpbml0aWFscyIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfR0VORVJBVElPTl9RVUFMSUZJRVIgKSwgImlkLWF0LWdlbmVyYXRpb25RdWFsaWZpZXIiLCAiR2VuZXJhdGlvbiBxdWFsaWZpZXIiIH0sCisgICAgICAgICJnZW5lcmF0aW9uUXVhbGlmaWVyIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9BVF9USVRMRSApLCAgICAgICAiaWQtYXQtdGl0bGUiLCAgICAgICAgICAgICAgICAgICAgIlRpdGxlIiB9LAorICAgICAgICAidGl0bGUiLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0FUX0ROX1FVQUxJRklFUiApLCJpZC1hdC1kblF1YWxpZmllciIsICAgICAgICAgICAgICAiRGlzdGluZ3Vpc2hlZCBOYW1lIHF1YWxpZmllciIgfSwKKyAgICAgICAgImRuUXVhbGlmaWVyIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9BVF9QU0VVRE9OWU0gKSwgICAiaWQtYXQtcHNldWRvbnltIiwgICAgICAgICAgICAgICAgIlBzZXVkb255bSIgfSwKKyAgICAgICAgInBzZXVkb255bSIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRE9NQUlOX0NPTVBPTkVOVCApLCAiaWQtZG9tYWluQ29tcG9uZW50IiwgICAgICAgICAgICJEb21haW4gY29tcG9uZW50IiB9LAorICAgICAgICAiREMiLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0FUX1VOSVFVRV9JREVOVElGSUVSICksICJpZC1hdC11bmlxdWVJZGVudGlmaWVyIiwgICAgIlVuaXF1ZSBJZGVudGlmaWVyIiB9LAorICAgICAgICAidW5pcXVlSWRlbnRpZmllciIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9LAorICAgICAgICBOVUxMLAorICAgIH0KK307CisKK0ZOX09JRF9UWVBFRF9GUk9NX0FTTjEob2lkX3g1MjBfYXR0cl90LCB4NTIwX2F0dHIsIG9pZF94NTIwX2F0dHJfdHlwZSkKK0ZOX09JRF9HRVRfQVRUUjEobWJlZHRsc19vaWRfZ2V0X2F0dHJfc2hvcnRfbmFtZSwgb2lkX3g1MjBfYXR0cl90LCB4NTIwX2F0dHIsIGNvbnN0IGNoYXIgKiwgc2hvcnRfbmFtZSkKKworLyoKKyAqIEZvciBYNTA5IGV4dGVuc2lvbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCAgICBkZXNjcmlwdG9yOworICAgIGludCAgICAgICAgICAgICAgICAgZXh0X3R5cGU7Cit9IG9pZF94NTA5X2V4dF90OworCitzdGF0aWMgY29uc3Qgb2lkX3g1MDlfZXh0X3Qgb2lkX3g1MDlfZXh0W10gPQoreworICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9CQVNJQ19DT05TVFJBSU5UUyApLCAgICAiaWQtY2UtYmFzaWNDb25zdHJhaW50cyIsICAgIkJhc2ljIENvbnN0cmFpbnRzIiB9LAorICAgICAgICBNQkVEVExTX1g1MDlfRVhUX0JBU0lDX0NPTlNUUkFJTlRTLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0tFWV9VU0FHRSApLCAgICAgICAgICAgICJpZC1jZS1rZXlVc2FnZSIsICAgICAgICAgICAiS2V5IFVzYWdlIiB9LAorICAgICAgICBNQkVEVExTX1g1MDlfRVhUX0tFWV9VU0FHRSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FWFRFTkRFRF9LRVlfVVNBR0UgKSwgICAiaWQtY2UtZXh0S2V5VXNhZ2UiLCAgICAgICAgIkV4dGVuZGVkIEtleSBVc2FnZSIgfSwKKyAgICAgICAgTUJFRFRMU19YNTA5X0VYVF9FWFRFTkRFRF9LRVlfVVNBR0UsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfU1VCSkVDVF9BTFRfTkFNRSApLCAgICAgImlkLWNlLXN1YmplY3RBbHROYW1lIiwgICAgICJTdWJqZWN0IEFsdCBOYW1lIiB9LAorICAgICAgICBNQkVEVExTX1g1MDlfRVhUX1NVQkpFQ1RfQUxUX05BTUUsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfTlNfQ0VSVF9UWVBFICksICAgICAgICAgImlkLW5ldHNjYXBlLWNlcnR0eXBlIiwgICAgICJOZXRzY2FwZSBDZXJ0aWZpY2F0ZSBUeXBlIiB9LAorICAgICAgICBNQkVEVExTX1g1MDlfRVhUX05TX0NFUlRfVFlQRSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0sCisgICAgICAgIDAsCisgICAgfSwKK307CisKK0ZOX09JRF9UWVBFRF9GUk9NX0FTTjEob2lkX3g1MDlfZXh0X3QsIHg1MDlfZXh0LCBvaWRfeDUwOV9leHQpCitGTl9PSURfR0VUX0FUVFIxKG1iZWR0bHNfb2lkX2dldF94NTA5X2V4dF90eXBlLCBvaWRfeDUwOV9leHRfdCwgeDUwOV9leHQsIGludCwgZXh0X3R5cGUpCisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3Qgb2lkX2V4dF9rZXlfdXNhZ2VbXSA9Cit7CisgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9TRVJWRVJfQVVUSCApLCAgICAgICJpZC1rcC1zZXJ2ZXJBdXRoIiwgICAgICAiVExTIFdlYiBTZXJ2ZXIgQXV0aGVudGljYXRpb24iIH0sCisgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9DTElFTlRfQVVUSCApLCAgICAgICJpZC1rcC1jbGllbnRBdXRoIiwgICAgICAiVExTIFdlYiBDbGllbnQgQXV0aGVudGljYXRpb24iIH0sCisgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9DT0RFX1NJR05JTkcgKSwgICAgICJpZC1rcC1jb2RlU2lnbmluZyIsICAgICAiQ29kZSBTaWduaW5nIiB9LAorICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRU1BSUxfUFJPVEVDVElPTiApLCAiaWQta3AtZW1haWxQcm90ZWN0aW9uIiwgIkUtbWFpbCBQcm90ZWN0aW9uIiB9LAorICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfVElNRV9TVEFNUElORyApLCAgICAiaWQta3AtdGltZVN0YW1waW5nIiwgICAgIlRpbWUgU3RhbXBpbmciIH0sCisgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9PQ1NQX1NJR05JTkcgKSwgICAgICJpZC1rcC1PQ1NQU2lnbmluZyIsICAgICAiT0NTUCBTaWduaW5nIiB9LAorICAgIHsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9LAorfTsKKworRk5fT0lEX1RZUEVEX0ZST01fQVNOMShtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3QsIGV4dF9rZXlfdXNhZ2UsIG9pZF9leHRfa2V5X3VzYWdlKQorRk5fT0lEX0dFVF9BVFRSMShtYmVkdGxzX29pZF9nZXRfZXh0ZW5kZWRfa2V5X3VzYWdlLCBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3QsIGV4dF9rZXlfdXNhZ2UsIGNvbnN0IGNoYXIgKiwgZGVzY3JpcHRpb24pCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X1VTRV9DIHx8IE1CRURUTFNfWDUwOV9DUkVBVEVfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCisvKgorICogRm9yIFNpZ25hdHVyZUFsZ29yaXRobUlkZW50aWZpZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCAgICBkZXNjcmlwdG9yOworICAgIG1iZWR0bHNfbWRfdHlwZV90ICAgICAgICAgICBtZF9hbGc7CisgICAgbWJlZHRsc19wa190eXBlX3QgICAgICAgICAgIHBrX2FsZzsKK30gb2lkX3NpZ19hbGdfdDsKKworc3RhdGljIGNvbnN0IG9pZF9zaWdfYWxnX3Qgb2lkX3NpZ19hbGdbXSA9Cit7CisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19NRDJfQykKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfUEtDUzFfTUQyICksICAgICAgICAibWQyV2l0aFJTQUVuY3J5cHRpb24iLCAgICAgIlJTQSB3aXRoIE1EMiIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9NRDIsICAgICAgTUJFRFRMU19QS19SU0EsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX01EMl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9QS0NTMV9NRDQgKSwgICAgICAgICJtZDRXaXRoUlNBRW5jcnlwdGlvbiIsICAgICAiUlNBIHdpdGggTUQ0IiB9LAorICAgICAgICBNQkVEVExTX01EX01ENCwgICAgICBNQkVEVExTX1BLX1JTQSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfTUQ0X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1BLQ1MxX01ENSApLCAgICAgICAgIm1kNVdpdGhSU0FFbmNyeXB0aW9uIiwgICAgICJSU0Egd2l0aCBNRDUiIH0sCisgICAgICAgIE1CRURUTFNfTURfTUQ1LCAgICAgIE1CRURUTFNfUEtfUlNBLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19NRDVfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1BLQ1MxX1NIQTEgKSwgICAgICAgInNoYS0xV2l0aFJTQUVuY3J5cHRpb24iLCAgICJSU0Egd2l0aCBTSEExIiB9LAorICAgICAgICBNQkVEVExTX01EX1NIQTEsICAgICBNQkVEVExTX1BLX1JTQSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9QS0NTMV9TSEEyMjQgKSwgICAgICJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiIsICAiUlNBIHdpdGggU0hBLTIyNCIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEEyMjQsICAgTUJFRFRMU19QS19SU0EsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfUEtDUzFfU0hBMjU2ICksICAgICAic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iLCAgIlJTQSB3aXRoIFNIQS0yNTYiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBMjU2LCAgIE1CRURUTFNfUEtfUlNBLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfUEtDUzFfU0hBMzg0ICksICAgICAic2hhMzg0V2l0aFJTQUVuY3J5cHRpb24iLCAgIlJTQSB3aXRoIFNIQS0zODQiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBMzg0LCAgIE1CRURUTFNfUEtfUlNBLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1BLQ1MxX1NIQTUxMiApLCAgICAgInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIiwgICJSU0Egd2l0aCBTSEEtNTEyIiB9LAorICAgICAgICBNQkVEVExTX01EX1NIQTUxMiwgICBNQkVEVExTX1BLX1JTQSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9SU0FfU0hBX09CUyApLCAgICAgICJzaGEtMVdpdGhSU0FFbmNyeXB0aW9uIiwgICAiUlNBIHdpdGggU0hBMSIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEExLCAgICAgTUJFRFRMU19QS19SU0EsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ0RTQV9TSEExICksICAgICAgICJlY2RzYS13aXRoLVNIQTEiLCAgICAgICJFQ0RTQSB3aXRoIFNIQTEiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBMSwgICAgIE1CRURUTFNfUEtfRUNEU0EsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRUNEU0FfU0hBMjI0ICksICAgICAiZWNkc2Etd2l0aC1TSEEyMjQiLCAgICAiRUNEU0Egd2l0aCBTSEEyMjQiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBMjI0LCAgIE1CRURUTFNfUEtfRUNEU0EsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRUNEU0FfU0hBMjU2ICksICAgICAiZWNkc2Etd2l0aC1TSEEyNTYiLCAgICAiRUNEU0Egd2l0aCBTSEEyNTYiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBMjU2LCAgIE1CRURUTFNfUEtfRUNEU0EsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ0RTQV9TSEEzODQgKSwgICAgICJlY2RzYS13aXRoLVNIQTM4NCIsICAgICJFQ0RTQSB3aXRoIFNIQTM4NCIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEEzODQsICAgTUJFRFRMU19QS19FQ0RTQSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ0RTQV9TSEE1MTIgKSwgICAgICJlY2RzYS13aXRoLVNIQTUxMiIsICAgICJFQ0RTQSB3aXRoIFNIQTUxMiIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEE1MTIsICAgTUJFRFRMU19QS19FQ0RTQSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1JTQVNTQV9QU1MgKSwgICAgICAgICJSU0FTU0EtUFNTIiwgICAgICAgICAgICJSU0FTU0EtUFNTIiB9LAorICAgICAgICBNQkVEVExTX01EX05PTkUsICAgICBNQkVEVExTX1BLX1JTQVNTQV9QU1MsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisgICAgeworICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfSwKKyAgICAgICAgTUJFRFRMU19NRF9OT05FLCBNQkVEVExTX1BLX05PTkUsCisgICAgfSwKK307CisKK0ZOX09JRF9UWVBFRF9GUk9NX0FTTjEob2lkX3NpZ19hbGdfdCwgc2lnX2FsZywgb2lkX3NpZ19hbGcpCitGTl9PSURfR0VUX0RFU0NSSVBUT1JfQVRUUjEobWJlZHRsc19vaWRfZ2V0X3NpZ19hbGdfZGVzYywgb2lkX3NpZ19hbGdfdCwgc2lnX2FsZywgY29uc3QgY2hhciAqLCBkZXNjcmlwdGlvbikKK0ZOX09JRF9HRVRfQVRUUjIobWJlZHRsc19vaWRfZ2V0X3NpZ19hbGcsIG9pZF9zaWdfYWxnX3QsIHNpZ19hbGcsIG1iZWR0bHNfbWRfdHlwZV90LCBtZF9hbGcsIG1iZWR0bHNfcGtfdHlwZV90LCBwa19hbGcpCitGTl9PSURfR0VUX09JRF9CWV9BVFRSMihtYmVkdGxzX29pZF9nZXRfb2lkX2J5X3NpZ19hbGcsIG9pZF9zaWdfYWxnX3QsIG9pZF9zaWdfYWxnLCBtYmVkdGxzX3BrX3R5cGVfdCwgcGtfYWxnLCBtYmVkdGxzX21kX3R5cGVfdCwgbWRfYWxnKQorI2VuZGlmIC8qIE1CRURUTFNfTURfQyAqLworCisvKgorICogRm9yIFB1YmxpY0tleUluZm8gKFBLQ1MxLCBSRkMgNTQ4MCkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCAgICBkZXNjcmlwdG9yOworICAgIG1iZWR0bHNfcGtfdHlwZV90ICAgICAgICAgICBwa19hbGc7Cit9IG9pZF9wa19hbGdfdDsKKworc3RhdGljIGNvbnN0IG9pZF9wa19hbGdfdCBvaWRfcGtfYWxnW10gPQoreworICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9QS0NTMV9SU0EgKSwgICAgICAicnNhRW5jcnlwdGlvbiIsICAgIlJTQSIgfSwKKyAgICAgICAgTUJFRFRMU19QS19SU0EsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRUNfQUxHX1VOUkVTVFJJQ1RFRCApLCAgImlkLWVjUHVibGljS2V5IiwgICAiR2VuZXJpYyBFQyBrZXkiIH0sCisgICAgICAgIE1CRURUTFNfUEtfRUNLRVksCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRUNfQUxHX0VDREggKSwgICAgICAgICAgImlkLWVjREgiLCAgICAgICAgICAiRUMga2V5IGZvciBFQ0RIIiB9LAorICAgICAgICBNQkVEVExTX1BLX0VDS0VZX0RILAorICAgIH0sCisgICAgeworICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfSwKKyAgICAgICAgTUJFRFRMU19QS19OT05FLAorICAgIH0sCit9OworCitGTl9PSURfVFlQRURfRlJPTV9BU04xKG9pZF9wa19hbGdfdCwgcGtfYWxnLCBvaWRfcGtfYWxnKQorRk5fT0lEX0dFVF9BVFRSMShtYmVkdGxzX29pZF9nZXRfcGtfYWxnLCBvaWRfcGtfYWxnX3QsIHBrX2FsZywgbWJlZHRsc19wa190eXBlX3QsIHBrX2FsZykKK0ZOX09JRF9HRVRfT0lEX0JZX0FUVFIxKG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfcGtfYWxnLCBvaWRfcGtfYWxnX3QsIG9pZF9wa19hbGcsIG1iZWR0bHNfcGtfdHlwZV90LCBwa19hbGcpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisvKgorICogRm9yIG5hbWVkQ3VydmUgKFJGQyA1NDgwKQorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90ICAgIGRlc2NyaXB0b3I7CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaWQgICAgICAgIGdycF9pZDsKK30gb2lkX2VjcF9ncnBfdDsKKworc3RhdGljIGNvbnN0IG9pZF9lY3BfZ3JwX3Qgb2lkX2VjcF9ncnBbXSA9Cit7CisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCkKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AxOTJSMSApLCAic2VjcDE5MnIxIiwgICAgInNlY3AxOTJyMSIgfSwKKyAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDIyNFIxICksICJzZWNwMjI0cjEiLCAgICAic2VjcDIyNHIxIiB9LAorICAgICAgICBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjEsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjU2UjEgKSwgInNlY3AyNTZyMSIsICAgICJzZWNwMjU2cjEiIH0sCisgICAgICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCkKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AzODRSMSApLCAic2VjcDM4NHIxIiwgICAgInNlY3AzODRyMSIgfSwKKyAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDUyMVIxICksICJzZWNwNTIxcjEiLCAgICAic2VjcDUyMXIxIiB9LAorICAgICAgICBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjEsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMTkySzEgKSwgInNlY3AxOTJrMSIsICAgICJzZWNwMTkyazEiIH0sCisgICAgICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCkKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AyMjRLMSApLCAic2VjcDIyNGsxIiwgICAgInNlY3AyMjRrMSIgfSwKKyAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDI1NksxICksICJzZWNwMjU2azEiLCAgICAic2VjcDI1NmsxIiB9LAorICAgICAgICBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzEsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlAyNTZSMV9FTkFCTEVEKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ19HUlBfQlAyNTZSMSApLCAgICJicmFpbnBvb2xQMjU2cjEiLCJicmFpbnBvb2wyNTZyMSIgfSwKKyAgICAgICAgTUJFRFRMU19FQ1BfRFBfQlAyNTZSMSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVEKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ19HUlBfQlAzODRSMSApLCAgICJicmFpbnBvb2xQMzg0cjEiLCJicmFpbnBvb2wzODRyMSIgfSwKKyAgICAgICAgTUJFRFRMU19FQ1BfRFBfQlAzODRSMSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVEKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ19HUlBfQlA1MTJSMSApLCAgICJicmFpbnBvb2xQNTEycjEiLCJicmFpbnBvb2w1MTJyMSIgfSwKKyAgICAgICAgTUJFRFRMU19FQ1BfRFBfQlA1MTJSMSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRCAqLworICAgIHsKKyAgICAgICAgeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0sCisgICAgICAgIE1CRURUTFNfRUNQX0RQX05PTkUsCisgICAgfSwKK307CisKK0ZOX09JRF9UWVBFRF9GUk9NX0FTTjEob2lkX2VjcF9ncnBfdCwgZ3JwX2lkLCBvaWRfZWNwX2dycCkKK0ZOX09JRF9HRVRfQVRUUjEobWJlZHRsc19vaWRfZ2V0X2VjX2dycCwgb2lkX2VjcF9ncnBfdCwgZ3JwX2lkLCBtYmVkdGxzX2VjcF9ncm91cF9pZCwgZ3JwX2lkKQorRk5fT0lEX0dFVF9PSURfQllfQVRUUjEobWJlZHRsc19vaWRfZ2V0X29pZF9ieV9lY19ncnAsIG9pZF9lY3BfZ3JwX3QsIG9pZF9lY3BfZ3JwLCBtYmVkdGxzX2VjcF9ncm91cF9pZCwgZ3JwX2lkKQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfQykKKy8qCisgKiBGb3IgUEtDUyM1IFBCRVMyIGVuY3J5cHRpb24gYWxnb3JpdGhtCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3QgICAgZGVzY3JpcHRvcjsKKyAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgICAgICAgY2lwaGVyX2FsZzsKK30gb2lkX2NpcGhlcl9hbGdfdDsKKworc3RhdGljIGNvbnN0IG9pZF9jaXBoZXJfYWxnX3Qgb2lkX2NpcGhlcl9hbGdbXSA9Cit7CisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0RFU19DQkMgKSwgICAgICAgICAgICAgICJkZXNDQkMiLCAgICAgICAiREVTLUNCQyIgfSwKKyAgICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0NCQywKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9ERVNfRURFM19DQkMgKSwgICAgICAgICAiZGVzLWVkZTMtY2JjIiwgIkRFUy1FREUzLUNCQyIgfSwKKyAgICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDLAorICAgIH0sCisgICAgeworICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfSwKKyAgICAgICAgTUJFRFRMU19DSVBIRVJfTk9ORSwKKyAgICB9LAorfTsKKworRk5fT0lEX1RZUEVEX0ZST01fQVNOMShvaWRfY2lwaGVyX2FsZ190LCBjaXBoZXJfYWxnLCBvaWRfY2lwaGVyX2FsZykKK0ZOX09JRF9HRVRfQVRUUjEobWJlZHRsc19vaWRfZ2V0X2NpcGhlcl9hbGcsIG9pZF9jaXBoZXJfYWxnX3QsIGNpcGhlcl9hbGcsIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCwgY2lwaGVyX2FsZykKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKy8qCisgKiBGb3IgZGlnZXN0QWxnb3JpdGhtCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3QgICAgZGVzY3JpcHRvcjsKKyAgICBtYmVkdGxzX21kX3R5cGVfdCAgICAgICAgICAgbWRfYWxnOworfSBvaWRfbWRfYWxnX3Q7CisKK3N0YXRpYyBjb25zdCBvaWRfbWRfYWxnX3Qgb2lkX21kX2FsZ1tdID0KK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQyX0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfTUQyICksICAgICAgICJpZC1tZDIiLCAgICAgICAiTUQyIiB9LAorICAgICAgICBNQkVEVExTX01EX01EMiwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfTUQyX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfTUQ0ICksICAgICAgICJpZC1tZDQiLCAgICAgICAiTUQ0IiB9LAorICAgICAgICBNQkVEVExTX01EX01ENCwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfTUQ0X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfTUQ1ICksICAgICAgICJpZC1tZDUiLCAgICAgICAiTUQ1IiB9LAorICAgICAgICBNQkVEVExTX01EX01ENSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfTUQ1X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTEgKSwgICAgICAiaWQtc2hhMSIsICAgICAgIlNIQS0xIiB9LAorICAgICAgICBNQkVEVExTX01EX1NIQTEsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRElHRVNUX0FMR19TSEEyMjQgKSwgICAgImlkLXNoYTIyNCIsICAgICJTSEEtMjI0IiB9LAorICAgICAgICBNQkVEVExTX01EX1NIQTIyNCwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTI1NiApLCAgICAiaWQtc2hhMjU2IiwgICAgIlNIQS0yNTYiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBMjU2LAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRElHRVNUX0FMR19TSEEzODQgKSwgICAgImlkLXNoYTM4NCIsICAgICJTSEEtMzg0IiB9LAorICAgICAgICBNQkVEVExTX01EX1NIQTM4NCwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTUxMiApLCAgICAiaWQtc2hhNTEyIiwgICAgIlNIQS01MTIiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBNTEyLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworICAgIHsKKyAgICAgICAgeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0sCisgICAgICAgIE1CRURUTFNfTURfTk9ORSwKKyAgICB9LAorfTsKKworRk5fT0lEX1RZUEVEX0ZST01fQVNOMShvaWRfbWRfYWxnX3QsIG1kX2FsZywgb2lkX21kX2FsZykKK0ZOX09JRF9HRVRfQVRUUjEobWJlZHRsc19vaWRfZ2V0X21kX2FsZywgb2lkX21kX2FsZ190LCBtZF9hbGcsIG1iZWR0bHNfbWRfdHlwZV90LCBtZF9hbGcpCitGTl9PSURfR0VUX09JRF9CWV9BVFRSMShtYmVkdGxzX29pZF9nZXRfb2lkX2J5X21kLCBvaWRfbWRfYWxnX3QsIG9pZF9tZF9hbGcsIG1iZWR0bHNfbWRfdHlwZV90LCBtZF9hbGcpCisjZW5kaWYgLyogTUJFRFRMU19NRF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzEyX0MpCisvKgorICogRm9yIFBLQ1MjMTIgUEJFcworICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90ICAgIGRlc2NyaXB0b3I7CisgICAgbWJlZHRsc19tZF90eXBlX3QgICAgICAgICAgIG1kX2FsZzsKKyAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgICAgICAgY2lwaGVyX2FsZzsKK30gb2lkX3BrY3MxMl9wYmVfYWxnX3Q7CisKK3N0YXRpYyBjb25zdCBvaWRfcGtjczEyX3BiZV9hbGdfdCBvaWRfcGtjczEyX3BiZV9hbGdbXSA9Cit7CisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9ERVMzX0VERV9DQkMgKSwgInBiZVdpdGhTSEFBbmQzLUtleVRyaXBsZURFUy1DQkMiLCAiUEJFIHdpdGggU0hBMSBhbmQgMy1LZXkgM0RFUyIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEExLCAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQywKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9QS0NTMTJfUEJFX1NIQTFfREVTMl9FREVfQ0JDICksICJwYmVXaXRoU0hBQW5kMi1LZXlUcmlwbGVERVMtQ0JDIiwgIlBCRSB3aXRoIFNIQTEgYW5kIDItS2V5IDNERVMiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBMSwgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQywKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0sCisgICAgICAgIE1CRURUTFNfTURfTk9ORSwgTUJFRFRMU19DSVBIRVJfTk9ORSwKKyAgICB9LAorfTsKKworRk5fT0lEX1RZUEVEX0ZST01fQVNOMShvaWRfcGtjczEyX3BiZV9hbGdfdCwgcGtjczEyX3BiZV9hbGcsIG9pZF9wa2NzMTJfcGJlX2FsZykKK0ZOX09JRF9HRVRfQVRUUjIobWJlZHRsc19vaWRfZ2V0X3BrY3MxMl9wYmVfYWxnLCBvaWRfcGtjczEyX3BiZV9hbGdfdCwgcGtjczEyX3BiZV9hbGcsIG1iZWR0bHNfbWRfdHlwZV90LCBtZF9hbGcsIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCwgY2lwaGVyX2FsZykKKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxMl9DICovCisKKyNkZWZpbmUgT0lEX1NBRkVfU05QUklOVEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKCByZXQgPCAwIHx8IChzaXplX3QpIHJldCA+PSBuICkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfT0lEX0JVRl9UT09fU01BTEwgKTsgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG4gLT0gKHNpemVfdCkgcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcCArPSAoc2l6ZV90KSByZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoIDAgKQorCisvKiBSZXR1cm4gdGhlIHgueS56Li4uLiBzdHlsZSBudW1lcmljIHN0cmluZyBmb3IgdGhlIGdpdmVuIE9JRCAqLworaW50IG1iZWR0bHNfb2lkX2dldF9udW1lcmljX3N0cmluZyggY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpvaWQgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGksIG47CisgICAgdW5zaWduZWQgaW50IHZhbHVlOworICAgIGNoYXIgKnA7CisKKyAgICBwID0gYnVmOworICAgIG4gPSBzaXplOworCisgICAgLyogRmlyc3QgYnl0ZSBjb250YWlucyBmaXJzdCB0d28gZG90cyAqLworICAgIGlmKCBvaWQtPmxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiVkLiVkIiwgb2lkLT5wWzBdIC8gNDAsIG9pZC0+cFswXSAlIDQwICk7CisgICAgICAgIE9JRF9TQUZFX1NOUFJJTlRGOworICAgIH0KKworICAgIHZhbHVlID0gMDsKKyAgICBmb3IoIGkgPSAxOyBpIDwgb2lkLT5sZW47IGkrKyApCisgICAgeworICAgICAgICAvKiBQcmV2ZW50IG92ZXJmbG93IGluIHZhbHVlLiAqLworICAgICAgICBpZiggKCAoIHZhbHVlIDw8IDcgKSA+PiA3ICkgIT0gdmFsdWUgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9PSURfQlVGX1RPT19TTUFMTCApOworCisgICAgICAgIHZhbHVlIDw8PSA3OworICAgICAgICB2YWx1ZSArPSBvaWQtPnBbaV0gJiAweDdGOworCisgICAgICAgIGlmKCAhKCBvaWQtPnBbaV0gJiAweDgwICkgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBMYXN0IGJ5dGUgKi8KKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIuJWQiLCB2YWx1ZSApOworICAgICAgICAgICAgT0lEX1NBRkVfU05QUklOVEY7CisgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIChpbnQpICggc2l6ZSAtIG4gKSApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19PSURfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGFkbG9jay5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGFkbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWZmOWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wYWRsb2NrLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiAgVklBIFBhZExvY2sgc3VwcG9ydCBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgVklBIFBhZExvY2sgUHJvZ3JhbW1pbmcgR3VpZGU6CisgKgorICogIGh0dHA6Ly93d3cudmlhLmNvbS50dy9lbi9kb3dubG9hZHMvd2hpdGVwYXBlcnMvaW5pdGlhdGl2ZXMvcGFkbG9jay8KKyAqICBwcm9ncmFtbWluZ19ndWlkZS5wZGYKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BBRExPQ0tfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvcGFkbG9jay5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgYXNtCisjZGVmaW5lIGFzbSBfX2FzbQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9YODYpCisKKy8qCisgKiBQYWRMb2NrIGRldGVjdGlvbiByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX3BhZGxvY2tfaGFzX3N1cHBvcnQoIGludCBmZWF0dXJlICkKK3sKKyAgICBzdGF0aWMgaW50IGZsYWdzID0gLTE7CisgICAgaW50IGVieCA9IDAsIGVkeCA9IDA7CisKKyAgICBpZiggZmxhZ3MgPT0gLTEgKQorICAgIHsKKyAgICAgICAgYXNtKCAibW92bCAgJSVlYngsICUwICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICJtb3ZsICAkMHhDMDAwMDAwMCwgJSVlYXggIFxuXHQiCisgICAgICAgICAgICAgImNwdWlkICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAiY21wbCAgJDB4QzAwMDAwMDEsICUlZWF4ICBcblx0IgorICAgICAgICAgICAgICJtb3ZsICAkMCwgJSVlZHggICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgImpiICAgIHVuc3VwcG9ydGVkICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAibW92bCAgJDB4QzAwMDAwMDEsICUlZWF4ICBcblx0IgorICAgICAgICAgICAgICJjcHVpZCAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgInVuc3VwcG9ydGVkOiAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAibW92bCAgJSVlZHgsICUxICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICJtb3ZsICAlMiwgJSVlYnggICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgOiAiPW0iIChlYngpLCAiPW0iIChlZHgpCisgICAgICAgICAgICAgOiAgIm0iIChlYngpCisgICAgICAgICAgICAgOiAiZWF4IiwgImVjeCIsICJlZHgiICk7CisKKyAgICAgICAgZmxhZ3MgPSBlZHg7CisgICAgfQorCisgICAgcmV0dXJuKCBmbGFncyAmIGZlYXR1cmUgKTsKK30KKworLyoKKyAqIFBhZExvY2sgQUVTLUVDQiBibG9jayBlbihkZSljcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19wYWRsb2NrX3hjcnlwdGVjYiggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCit7CisgICAgaW50IGVieCA9IDA7CisgICAgdWludDMyX3QgKnJrOworICAgIHVpbnQzMl90ICpibGs7CisgICAgdWludDMyX3QgKmN0cmw7CisgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKKworICAgIHJrICA9IGN0eC0+cms7CisgICAgYmxrID0gTUJFRFRMU19QQURMT0NLX0FMSUdOMTYoIGJ1ZiApOworICAgIG1lbWNweSggYmxrLCBpbnB1dCwgMTYgKTsKKworICAgICBjdHJsID0gYmxrICsgNDsKKyAgICAqY3RybCA9IDB4ODAgfCBjdHgtPm5yIHwgKCAoIGN0eC0+bnIgKyAoIG1vZGVeMSApIC0gMTAgKSA8PCA5ICk7CisKKyAgICBhc20oICJwdXNoZmwgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInBvcGZsICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92bCAgICAlJWVieCwgJTAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZsICAgICQxLCAlJWVjeCAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmwgICAgJTIsICUlZWR4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92bCAgICAlMywgJSVlYnggICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZsICAgICU0LCAlJWVzaSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmwgICAgJTQsICUlZWRpICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAiLmJ5dGUgIDB4ZjMsMHgwZiwweGE3LDB4YzggICAgXG5cdCIKKyAgICAgICAgICJtb3ZsICAgICUxLCAlJWVieCAgICAgICAgICAgICBcblx0IgorICAgICAgICAgOiAiPW0iIChlYngpCisgICAgICAgICA6ICAibSIgKGVieCksICJtIiAoY3RybCksICJtIiAocmspLCAibSIgKGJsaykKKyAgICAgICAgIDogIm1lbW9yeSIsICJlY3giLCAiZWR4IiwgImVzaSIsICJlZGkiICk7CisKKyAgICBtZW1jcHkoIG91dHB1dCwgYmxrLCAxNiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBQYWRMb2NrIEFFUy1DQkMgYnVmZmVyIGVuKGRlKWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX3BhZGxvY2tfeGNyeXB0Y2JjKCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IGVieCA9IDA7CisgICAgc2l6ZV90IGNvdW50OworICAgIHVpbnQzMl90ICpyazsKKyAgICB1aW50MzJfdCAqaXc7CisgICAgdWludDMyX3QgKmN0cmw7CisgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKKworICAgIGlmKCAoIChsb25nKSBpbnB1dCAgJiAxNSApICE9IDAgfHwKKyAgICAgICAgKCAobG9uZykgb3V0cHV0ICYgMTUgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QQURMT0NLX0RBVEFfTUlTQUxJR05FRCApOworCisgICAgcmsgPSBjdHgtPnJrOworICAgIGl3ID0gTUJFRFRMU19QQURMT0NLX0FMSUdOMTYoIGJ1ZiApOworICAgIG1lbWNweSggaXcsIGl2LCAxNiApOworCisgICAgIGN0cmwgPSBpdyArIDQ7CisgICAgKmN0cmwgPSAweDgwIHwgY3R4LT5uciB8ICggKCBjdHgtPm5yICsgKCBtb2RlIF4gMSApIC0gMTAgKSA8PCA5ICk7CisKKyAgICBjb3VudCA9ICggbGVuZ3RoICsgMTUgKSA+PiA0OworCisgICAgYXNtKCAicHVzaGZsICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJwb3BmbCAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmwgICAgJSVlYngsICUwICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92bCAgICAlMiwgJSVlY3ggICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZsICAgICUzLCAlJWVkeCAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmwgICAgJTQsICUlZWJ4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92bCAgICAlNSwgJSVlc2kgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZsICAgICU2LCAlJWVkaSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmwgICAgJTcsICUlZWF4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAiLmJ5dGUgIDB4ZjMsMHgwZiwweGE3LDB4ZDAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZsICAgICUxLCAlJWVieCAgICAgICAgICAgICBcblx0IgorICAgICAgICAgOiAiPW0iIChlYngpCisgICAgICAgICA6ICAibSIgKGVieCksICJtIiAoY291bnQpLCAibSIgKGN0cmwpLAorICAgICAgICAgICAgIm0iICAocmspLCAibSIgKGlucHV0KSwgIm0iIChvdXRwdXQpLCAibSIgKGl3KQorICAgICAgICAgOiAibWVtb3J5IiwgImVheCIsICJlY3giLCAiZWR4IiwgImVzaSIsICJlZGkiICk7CisKKyAgICBtZW1jcHkoIGl2LCBpdywgMTYgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19IQVZFX1g4NiAqLworCisjZW5kaWYgLyogTUJFRFRMU19QQURMT0NLX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BlbS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlMzk2NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BlbS5jCkBAIC0wLDAgKzEsNDQ3IEBACisvKgorICogIFByaXZhY3kgRW5oYW5jZWQgTWFpbCAoUEVNKSBkZWNvZGluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKSB8fCBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYmFzZTY0LmgiCisjaW5jbHVkZSAibWJlZHRscy9kZXMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Flcy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQ1LmgiCisjaW5jbHVkZSAibWJlZHRscy9jaXBoZXIuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZW5kaWYKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKK3ZvaWQgbWJlZHRsc19wZW1faW5pdCggbWJlZHRsc19wZW1fY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX3BlbV9jb250ZXh0ICkgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykgJiYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykgJiYgICAgICAgICBcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfREVTX0MpIHx8IGRlZmluZWQoTUJFRFRMU19BRVNfQykgKQorLyoKKyAqIFJlYWQgYSAxNi1ieXRlIGhleCBzdHJpbmcgYW5kIGNvbnZlcnQgaXQgdG8gYmluYXJ5CisgKi8KK3N0YXRpYyBpbnQgcGVtX2dldF9pdiggY29uc3QgdW5zaWduZWQgY2hhciAqcywgdW5zaWduZWQgY2hhciAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpdl9sZW4gKQoreworICAgIHNpemVfdCBpLCBqLCBrOworCisgICAgbWVtc2V0KCBpdiwgMCwgaXZfbGVuICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgaXZfbGVuICogMjsgaSsrLCBzKysgKQorICAgIHsKKyAgICAgICAgaWYoICpzID49ICcwJyAmJiAqcyA8PSAnOScgKSBqID0gKnMgLSAnMCc7IGVsc2UKKyAgICAgICAgaWYoICpzID49ICdBJyAmJiAqcyA8PSAnRicgKSBqID0gKnMgLSAnNyc7IGVsc2UKKyAgICAgICAgaWYoICpzID49ICdhJyAmJiAqcyA8PSAnZicgKSBqID0gKnMgLSAnVyc7IGVsc2UKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfRU5DX0lWICk7CisKKyAgICAgICAgayA9ICggKCBpICYgMSApICE9IDAgKSA/IGogOiBqIDw8IDQ7CisKKyAgICAgICAgaXZbaSA+PiAxXSA9ICh1bnNpZ25lZCBjaGFyKSggaXZbaSA+PiAxXSB8IGsgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIHZvaWQgcGVtX3Bia2RmMSggdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsIHNpemVfdCBwd2RsZW4gKQoreworICAgIG1iZWR0bHNfbWQ1X2NvbnRleHQgbWQ1X2N0eDsKKyAgICB1bnNpZ25lZCBjaGFyIG1kNXN1bVsxNl07CisgICAgc2l6ZV90IHVzZV9sZW47CisKKyAgICBtYmVkdGxzX21kNV9pbml0KCAmbWQ1X2N0eCApOworCisgICAgLyoKKyAgICAgKiBrZXlbIDAuLjE1XSA9IE1ENShwd2QgfHwgSVYpCisgICAgICovCisgICAgbWJlZHRsc19tZDVfc3RhcnRzKCAmbWQ1X2N0eCApOworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNV9jdHgsIHB3ZCwgcHdkbGVuICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1X2N0eCwgaXYsICA4ICk7CisgICAgbWJlZHRsc19tZDVfZmluaXNoKCAmbWQ1X2N0eCwgbWQ1c3VtICk7CisKKyAgICBpZigga2V5bGVuIDw9IDE2ICkKKyAgICB7CisgICAgICAgIG1lbWNweSgga2V5LCBtZDVzdW0sIGtleWxlbiApOworCisgICAgICAgIG1iZWR0bHNfbWQ1X2ZyZWUoICZtZDVfY3R4ICk7CisgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggbWQ1c3VtLCAxNiApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbWVtY3B5KCBrZXksIG1kNXN1bSwgMTYgKTsKKworICAgIC8qCisgICAgICoga2V5WzE2Li4yM10gPSBNRDUoa2V5WyAwLi4xNV0gfHwgcHdkIHx8IElWXSkKKyAgICAgKi8KKyAgICBtYmVkdGxzX21kNV9zdGFydHMoICZtZDVfY3R4ICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1X2N0eCwgbWQ1c3VtLCAgMTYgKTsKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtZDVfY3R4LCBwd2QsIHB3ZGxlbiApOworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNV9jdHgsIGl2LCAgOCApOworICAgIG1iZWR0bHNfbWQ1X2ZpbmlzaCggJm1kNV9jdHgsIG1kNXN1bSApOworCisgICAgdXNlX2xlbiA9IDE2OworICAgIGlmKCBrZXlsZW4gPCAzMiApCisgICAgICAgIHVzZV9sZW4gPSBrZXlsZW4gLSAxNjsKKworICAgIG1lbWNweSgga2V5ICsgMTYsIG1kNXN1bSwgdXNlX2xlbiApOworCisgICAgbWJlZHRsc19tZDVfZnJlZSggJm1kNV9jdHggKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIG1kNXN1bSwgMTYgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKy8qCisgKiBEZWNyeXB0IHdpdGggREVTLUNCQywgdXNpbmcgUEJLREYxIGZvciBrZXkgZGVyaXZhdGlvbgorICovCitzdGF0aWMgdm9pZCBwZW1fZGVzX2RlY3J5cHQoIHVuc2lnbmVkIGNoYXIgZGVzX2l2WzhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsIHNpemVfdCBwd2RsZW4gKQoreworICAgIG1iZWR0bHNfZGVzX2NvbnRleHQgZGVzX2N0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGRlc19rZXlbOF07CisKKyAgICBtYmVkdGxzX2Rlc19pbml0KCAmZGVzX2N0eCApOworCisgICAgcGVtX3Bia2RmMSggZGVzX2tleSwgOCwgZGVzX2l2LCBwd2QsIHB3ZGxlbiApOworCisgICAgbWJlZHRsc19kZXNfc2V0a2V5X2RlYyggJmRlc19jdHgsIGRlc19rZXkgKTsKKyAgICBtYmVkdGxzX2Rlc19jcnlwdF9jYmMoICZkZXNfY3R4LCBNQkVEVExTX0RFU19ERUNSWVBULCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICBkZXNfaXYsIGJ1ZiwgYnVmICk7CisKKyAgICBtYmVkdGxzX2Rlc19mcmVlKCAmZGVzX2N0eCApOworICAgIG1iZWR0bHNfemVyb2l6ZSggZGVzX2tleSwgOCApOworfQorCisvKgorICogRGVjcnlwdCB3aXRoIDNERVMtQ0JDLCB1c2luZyBQQktERjEgZm9yIGtleSBkZXJpdmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHBlbV9kZXMzX2RlY3J5cHQoIHVuc2lnbmVkIGNoYXIgZGVzM19pdls4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHdkLCBzaXplX3QgcHdkbGVuICkKK3sKKyAgICBtYmVkdGxzX2RlczNfY29udGV4dCBkZXMzX2N0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGRlczNfa2V5WzI0XTsKKworICAgIG1iZWR0bHNfZGVzM19pbml0KCAmZGVzM19jdHggKTsKKworICAgIHBlbV9wYmtkZjEoIGRlczNfa2V5LCAyNCwgZGVzM19pdiwgcHdkLCBwd2RsZW4gKTsKKworICAgIG1iZWR0bHNfZGVzM19zZXQza2V5X2RlYyggJmRlczNfY3R4LCBkZXMzX2tleSApOworICAgIG1iZWR0bHNfZGVzM19jcnlwdF9jYmMoICZkZXMzX2N0eCwgTUJFRFRMU19ERVNfREVDUllQVCwgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgZGVzM19pdiwgYnVmLCBidWYgKTsKKworICAgIG1iZWR0bHNfZGVzM19mcmVlKCAmZGVzM19jdHggKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIGRlczNfa2V5LCAyNCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKy8qCisgKiBEZWNyeXB0IHdpdGggQUVTLVhYWC1DQkMsIHVzaW5nIFBCS0RGMSBmb3Iga2V5IGRlcml2YXRpb24KKyAqLworc3RhdGljIHZvaWQgcGVtX2Flc19kZWNyeXB0KCB1bnNpZ25lZCBjaGFyIGFlc19pdlsxNl0sIHVuc2lnbmVkIGludCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgc2l6ZV90IHB3ZGxlbiApCit7CisgICAgbWJlZHRsc19hZXNfY29udGV4dCBhZXNfY3R4OworICAgIHVuc2lnbmVkIGNoYXIgYWVzX2tleVszMl07CisKKyAgICBtYmVkdGxzX2Flc19pbml0KCAmYWVzX2N0eCApOworCisgICAgcGVtX3Bia2RmMSggYWVzX2tleSwga2V5bGVuLCBhZXNfaXYsIHB3ZCwgcHdkbGVuICk7CisKKyAgICBtYmVkdGxzX2Flc19zZXRrZXlfZGVjKCAmYWVzX2N0eCwgYWVzX2tleSwga2V5bGVuICogOCApOworICAgIG1iZWR0bHNfYWVzX2NyeXB0X2NiYyggJmFlc19jdHgsIE1CRURUTFNfQUVTX0RFQ1JZUFQsIGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGFlc19pdiwgYnVmLCBidWYgKTsKKworICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZhZXNfY3R4ICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBhZXNfa2V5LCBrZXlsZW4gKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNlbmRpZiAvKiBNQkVEVExTX01ENV9DICYmIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICYmCisgICAgICAgICAgKCBNQkVEVExTX0FFU19DIHx8IE1CRURUTFNfREVTX0MgKSAqLworCitpbnQgbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoIG1iZWR0bHNfcGVtX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqaGVhZGVyLCBjb25zdCBjaGFyICpmb290ZXIsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcHdkbGVuLCBzaXplX3QgKnVzZV9sZW4gKQoreworICAgIGludCByZXQsIGVuYzsKKyAgICBzaXplX3QgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzMSwgKnMyLCAqZW5kOworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykgJiYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykgJiYgICAgICAgICBcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfREVTX0MpIHx8IGRlZmluZWQoTUJFRFRMU19BRVNfQykgKQorICAgIHVuc2lnbmVkIGNoYXIgcGVtX2l2WzE2XTsKKyAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgZW5jX2FsZyA9IE1CRURUTFNfQ0lQSEVSX05PTkU7CisjZWxzZQorICAgICgodm9pZCkgcHdkKTsKKyAgICAoKHZvaWQpIHB3ZGxlbik7CisjZW5kaWYgLyogTUJFRFRMU19NRDVfQyAmJiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAmJgorICAgICAgICAgICggTUJFRFRMU19BRVNfQyB8fCBNQkVEVExTX0RFU19DICkgKi8KKworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBzMSA9ICh1bnNpZ25lZCBjaGFyICopIHN0cnN0ciggKGNvbnN0IGNoYXIgKikgZGF0YSwgaGVhZGVyICk7CisKKyAgICBpZiggczEgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVCApOworCisgICAgczIgPSAodW5zaWduZWQgY2hhciAqKSBzdHJzdHIoIChjb25zdCBjaGFyICopIGRhdGEsIGZvb3RlciApOworCisgICAgaWYoIHMyID09IE5VTEwgfHwgczIgPD0gczEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgKTsKKworICAgIHMxICs9IHN0cmxlbiggaGVhZGVyICk7CisgICAgaWYoICpzMSA9PSAnICcgICkgczErKzsKKyAgICBpZiggKnMxID09ICdccicgKSBzMSsrOworICAgIGlmKCAqczEgPT0gJ1xuJyApIHMxKys7CisgICAgZWxzZSByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgKTsKKworICAgIGVuZCA9IHMyOworICAgIGVuZCArPSBzdHJsZW4oIGZvb3RlciApOworICAgIGlmKCAqZW5kID09ICcgJyAgKSBlbmQrKzsKKyAgICBpZiggKmVuZCA9PSAnXHInICkgZW5kKys7CisgICAgaWYoICplbmQgPT0gJ1xuJyApIGVuZCsrOworICAgICp1c2VfbGVuID0gZW5kIC0gZGF0YTsKKworICAgIGVuYyA9IDA7CisKKyAgICBpZiggbWVtY21wKCBzMSwgIlByb2MtVHlwZTogNCxFTkNSWVBURUQiLCAyMiApID09IDAgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpICYmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpICYmICAgICAgICAgXAorICAgICggZGVmaW5lZChNQkVEVExTX0RFU19DKSB8fCBkZWZpbmVkKE1CRURUTFNfQUVTX0MpICkKKyAgICAgICAgZW5jKys7CisKKyAgICAgICAgczEgKz0gMjI7CisgICAgICAgIGlmKCAqczEgPT0gJ1xyJyApIHMxKys7CisgICAgICAgIGlmKCAqczEgPT0gJ1xuJyApIHMxKys7CisgICAgICAgIGVsc2UgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fSU5WQUxJRF9EQVRBICk7CisKKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyAgICAgICAgaWYoIG1lbWNtcCggczEsICJERUstSW5mbzogREVTLUVERTMtQ0JDLCIsIDIzICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVuY19hbGcgPSBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM7CisKKyAgICAgICAgICAgIHMxICs9IDIzOworICAgICAgICAgICAgaWYoIHBlbV9nZXRfaXYoIHMxLCBwZW1faXYsIDggKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9JTlZBTElEX0VOQ19JViApOworCisgICAgICAgICAgICBzMSArPSAxNjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBtZW1jbXAoIHMxLCAiREVLLUluZm86IERFUy1DQkMsIiwgMTggKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZW5jX2FsZyA9IE1CRURUTFNfQ0lQSEVSX0RFU19DQkM7CisKKyAgICAgICAgICAgIHMxICs9IDE4OworICAgICAgICAgICAgaWYoIHBlbV9nZXRfaXYoIHMxLCBwZW1faXYsIDgpICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfRU5DX0lWICk7CisKKyAgICAgICAgICAgIHMxICs9IDE2OworICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorICAgICAgICBpZiggbWVtY21wKCBzMSwgIkRFSy1JbmZvOiBBRVMtIiwgMTQgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIG1lbWNtcCggczEsICJERUstSW5mbzogQUVTLTEyOC1DQkMsIiwgMjIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBlbmNfYWxnID0gTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM7CisgICAgICAgICAgICBlbHNlIGlmKCBtZW1jbXAoIHMxLCAiREVLLUluZm86IEFFUy0xOTItQ0JDLCIsIDIyICkgPT0gMCApCisgICAgICAgICAgICAgICAgZW5jX2FsZyA9IE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOworICAgICAgICAgICAgZWxzZSBpZiggbWVtY21wKCBzMSwgIkRFSy1JbmZvOiBBRVMtMjU2LUNCQywiLCAyMiApID09IDAgKQorICAgICAgICAgICAgICAgIGVuY19hbGcgPSBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9VTktOT1dOX0VOQ19BTEcgKTsKKworICAgICAgICAgICAgczEgKz0gMjI7CisgICAgICAgICAgICBpZiggcGVtX2dldF9pdiggczEsIHBlbV9pdiwgMTYgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9JTlZBTElEX0VOQ19JViApOworCisgICAgICAgICAgICBzMSArPSAzMjsKKyAgICAgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworICAgICAgICBpZiggZW5jX2FsZyA9PSBNQkVEVExTX0NJUEhFUl9OT05FICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX1VOS05PV05fRU5DX0FMRyApOworCisgICAgICAgIGlmKCAqczEgPT0gJ1xyJyApIHMxKys7CisgICAgICAgIGlmKCAqczEgPT0gJ1xuJyApIHMxKys7CisgICAgICAgIGVsc2UgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fSU5WQUxJRF9EQVRBICk7CisjZWxzZQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisjZW5kaWYgLyogTUJFRFRMU19NRDVfQyAmJiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAmJgorICAgICAgICAgICggTUJFRFRMU19BRVNfQyB8fCBNQkVEVExTX0RFU19DICkgKi8KKyAgICB9CisKKyAgICBpZiggczEgPT0gczIgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9JTlZBTElEX0RBVEEgKTsKKworICAgIHJldCA9IG1iZWR0bHNfYmFzZTY0X2RlY29kZSggTlVMTCwgMCwgJmxlbiwgczEsIHMyIC0gczEgKTsKKworICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fSU5WQUxJRF9EQVRBICsgcmV0ICk7CisKKyAgICBpZiggKCBidWYgPSBtYmVkdGxzX2NhbGxvYyggMSwgbGVuICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fQUxMT0NfRkFJTEVEICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUoIGJ1ZiwgbGVuLCAmbGVuLCBzMSwgczIgLSBzMSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIGJ1ZiApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9JTlZBTElEX0RBVEEgKyByZXQgKTsKKyAgICB9CisKKyAgICBpZiggZW5jICE9IDAgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpICYmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpICYmICAgICAgICAgXAorICAgICggZGVmaW5lZChNQkVEVExTX0RFU19DKSB8fCBkZWZpbmVkKE1CRURUTFNfQUVTX0MpICkKKyAgICAgICAgaWYoIHB3ZCA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBidWYgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX1BBU1NXT1JEX1JFUVVJUkVEICk7CisgICAgICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyAgICAgICAgaWYoIGVuY19hbGcgPT0gTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDICkKKyAgICAgICAgICAgIHBlbV9kZXMzX2RlY3J5cHQoIHBlbV9pdiwgYnVmLCBsZW4sIHB3ZCwgcHdkbGVuICk7CisgICAgICAgIGVsc2UgaWYoIGVuY19hbGcgPT0gTUJFRFRMU19DSVBIRVJfREVTX0NCQyApCisgICAgICAgICAgICBwZW1fZGVzX2RlY3J5cHQoIHBlbV9pdiwgYnVmLCBsZW4sIHB3ZCwgcHdkbGVuICk7CisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorICAgICAgICBpZiggZW5jX2FsZyA9PSBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQyApCisgICAgICAgICAgICBwZW1fYWVzX2RlY3J5cHQoIHBlbV9pdiwgMTYsIGJ1ZiwgbGVuLCBwd2QsIHB3ZGxlbiApOworICAgICAgICBlbHNlIGlmKCBlbmNfYWxnID09IE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDICkKKyAgICAgICAgICAgIHBlbV9hZXNfZGVjcnlwdCggcGVtX2l2LCAyNCwgYnVmLCBsZW4sIHB3ZCwgcHdkbGVuICk7CisgICAgICAgIGVsc2UgaWYoIGVuY19hbGcgPT0gTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMgKQorICAgICAgICAgICAgcGVtX2Flc19kZWNyeXB0KCBwZW1faXYsIDMyLCBidWYsIGxlbiwgcHdkLCBwd2RsZW4gKTsKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlIHJlc3VsdCB3aWxsIGJlIEFTTi4xIHN0YXJ0aW5nIHdpdGggYSBTRVFVRU5DRSB0YWcsIHdpdGggMSB0byAzCisgICAgICAgICAqIGxlbmd0aCBieXRlcyAoYWxsb3cgNCB0byBiZSBzdXJlKSBpbiBhbGwga25vd24gdXNlIGNhc2VzLgorICAgICAgICAgKgorICAgICAgICAgKiBVc2UgdGhhdCBhcyBoZXVyaXNpdGljIHRvIHRyeSBkZXRlY3RpbmcgcGFzc3dvcmQgbWlzbWF0Y2hzLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIGxlbiA8PSAyIHx8IGJ1ZlswXSAhPSAweDMwIHx8IGJ1ZlsxXSA+IDB4ODMgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIGJ1ZiApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfTUlTTUFUQ0ggKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgbWJlZHRsc19mcmVlKCBidWYgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fRkVBVFVSRV9VTkFWQUlMQUJMRSApOworI2VuZGlmIC8qIE1CRURUTFNfTUQ1X0MgJiYgTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgJiYKKyAgICAgICAgICAoIE1CRURUTFNfQUVTX0MgfHwgTUJFRFRMU19ERVNfQyApICovCisgICAgfQorCisgICAgY3R4LT5idWYgPSBidWY7CisgICAgY3R4LT5idWZsZW4gPSBsZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKwordm9pZCBtYmVkdGxzX3BlbV9mcmVlKCBtYmVkdGxzX3BlbV9jb250ZXh0ICpjdHggKQoreworICAgIG1iZWR0bHNfZnJlZSggY3R4LT5idWYgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eC0+aW5mbyApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19wZW1fY29udGV4dCApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QRU1fUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQoraW50IG1iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlciggY29uc3QgY2hhciAqaGVhZGVyLCBjb25zdCBjaGFyICpmb290ZXIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGVyX2RhdGEsIHNpemVfdCBkZXJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHNpemVfdCAqb2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICplbmNvZGVfYnVmLCAqYywgKnAgPSBidWY7CisgICAgc2l6ZV90IGxlbiA9IDAsIHVzZV9sZW4sIGFkZF9sZW4gPSAwOworCisgICAgbWJlZHRsc19iYXNlNjRfZW5jb2RlKCBOVUxMLCAwLCAmdXNlX2xlbiwgZGVyX2RhdGEsIGRlcl9sZW4gKTsKKyAgICBhZGRfbGVuID0gc3RybGVuKCBoZWFkZXIgKSArIHN0cmxlbiggZm9vdGVyICkgKyAoIHVzZV9sZW4gLyA2NCApICsgMTsKKworICAgIGlmKCB1c2VfbGVuICsgYWRkX2xlbiA+IGJ1Zl9sZW4gKQorICAgIHsKKyAgICAgICAgKm9sZW4gPSB1c2VfbGVuICsgYWRkX2xlbjsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTCApOworICAgIH0KKworICAgIGlmKCAoIGVuY29kZV9idWYgPSBtYmVkdGxzX2NhbGxvYyggMSwgdXNlX2xlbiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX0FMTE9DX0ZBSUxFRCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19iYXNlNjRfZW5jb2RlKCBlbmNvZGVfYnVmLCB1c2VfbGVuLCAmdXNlX2xlbiwgZGVyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVyX2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIGVuY29kZV9idWYgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBtZW1jcHkoIHAsIGhlYWRlciwgc3RybGVuKCBoZWFkZXIgKSApOworICAgIHAgKz0gc3RybGVuKCBoZWFkZXIgKTsKKyAgICBjID0gZW5jb2RlX2J1ZjsKKworICAgIHdoaWxlKCB1c2VfbGVuICkKKyAgICB7CisgICAgICAgIGxlbiA9ICggdXNlX2xlbiA+IDY0ICkgPyA2NCA6IHVzZV9sZW47CisgICAgICAgIG1lbWNweSggcCwgYywgbGVuICk7CisgICAgICAgIHVzZV9sZW4gLT0gbGVuOworICAgICAgICBwICs9IGxlbjsKKyAgICAgICAgYyArPSBsZW47CisgICAgICAgICpwKysgPSAnXG4nOworICAgIH0KKworICAgIG1lbWNweSggcCwgZm9vdGVyLCBzdHJsZW4oIGZvb3RlciApICk7CisgICAgcCArPSBzdHJsZW4oIGZvb3RlciApOworCisgICAgKnArKyA9ICdcMCc7CisgICAgKm9sZW4gPSBwIC0gYnVmOworCisgICAgbWJlZHRsc19mcmVlKCBlbmNvZGVfYnVmICk7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QRU1fV1JJVEVfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfUEVNX1BBUlNFX0MgfHwgTUJFRFRMU19QRU1fV1JJVEVfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGsuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiZDBhNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrLmMKQEAgLTAsMCArMSwzNzQgQEAKKy8qCisgKiAgUHVibGljIEtleSBhYnN0cmFjdGlvbiBsYXllcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX0MpCisjaW5jbHVkZSAibWJlZHRscy9way5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGtfaW50ZXJuYWwuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorI2luY2x1ZGUgIm1iZWR0bHMvZWNwLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyNpbmNsdWRlICJtYmVkdGxzL2VjZHNhLmgiCisjZW5kaWYKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIEluaXRpYWxpc2UgYSBtYmVkdGxzX3BrX2NvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3BrX2luaXQoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBjdHgtPnBrX2luZm8gPSBOVUxMOworICAgIGN0eC0+cGtfY3R4ID0gTlVMTDsKK30KKworLyoKKyAqIEZyZWUgKHRoZSBjb21wb25lbnRzIG9mKSBhIG1iZWR0bHNfcGtfY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfcGtfZnJlZSggbWJlZHRsc19wa19jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPnBrX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIGN0eC0+cGtfaW5mby0+Y3R4X2ZyZWVfZnVuYyggY3R4LT5wa19jdHggKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfcGtfY29udGV4dCApICk7Cit9CisKKy8qCisgKiBHZXQgcGtfaW5mbyBzdHJ1Y3R1cmUgZnJvbSB0eXBlCisgKi8KK2NvbnN0IG1iZWR0bHNfcGtfaW5mb190ICogbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggbWJlZHRsc19wa190eXBlX3QgcGtfdHlwZSApCit7CisgICAgc3dpdGNoKCBwa190eXBlICkgeworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX1BLX1JTQToKKyAgICAgICAgICAgIHJldHVybiggJm1iZWR0bHNfcnNhX2luZm8gKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX1BLX0VDS0VZOgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19lY2tleV9pbmZvICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19QS19FQ0tFWV9ESDoKKyAgICAgICAgICAgIHJldHVybiggJm1iZWR0bHNfZWNrZXlkaF9pbmZvICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX1BLX0VDRFNBOgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19lY2RzYV9pbmZvICk7CisjZW5kaWYKKyAgICAgICAgLyogTUJFRFRMU19QS19SU0FfQUxUIG9taXR0ZWQgb24gcHVycG9zZSAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCBOVUxMICk7CisgICAgfQorfQorCisvKgorICogSW5pdGlhbGlzZSBjb250ZXh0CisgKi8KK2ludCBtYmVkdGxzX3BrX3NldHVwKCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgY29uc3QgbWJlZHRsc19wa19pbmZvX3QgKmluZm8gKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBpbmZvID09IE5VTEwgfHwgY3R4LT5wa19pbmZvICE9IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggKCBjdHgtPnBrX2N0eCA9IGluZm8tPmN0eF9hbGxvY19mdW5jKCkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19BTExPQ19GQUlMRUQgKTsKKworICAgIGN0eC0+cGtfaW5mbyA9IGluZm87CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQpCisvKgorICogSW5pdGlhbGl6ZSBhbiBSU0EtYWx0IGNvbnRleHQKKyAqLworaW50IG1iZWR0bHNfcGtfc2V0dXBfcnNhX2FsdCggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIHZvaWQgKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19yc2FfYWx0X2RlY3J5cHRfZnVuYyBkZWNyeXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19yc2FfYWx0X3NpZ25fZnVuYyBzaWduX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19yc2FfYWx0X2tleV9sZW5fZnVuYyBrZXlfbGVuX2Z1bmMgKQoreworICAgIG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0ICpyc2FfYWx0OworICAgIGNvbnN0IG1iZWR0bHNfcGtfaW5mb190ICppbmZvID0gJm1iZWR0bHNfcnNhX2FsdF9pbmZvOworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+cGtfaW5mbyAhPSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggY3R4LT5wa19jdHggPSBpbmZvLT5jdHhfYWxsb2NfZnVuYygpICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfQUxMT0NfRkFJTEVEICk7CisKKyAgICBjdHgtPnBrX2luZm8gPSBpbmZvOworCisgICAgcnNhX2FsdCA9IChtYmVkdGxzX3JzYV9hbHRfY29udGV4dCAqKSBjdHgtPnBrX2N0eDsKKworICAgIHJzYV9hbHQtPmtleSA9IGtleTsKKyAgICByc2FfYWx0LT5kZWNyeXB0X2Z1bmMgPSBkZWNyeXB0X2Z1bmM7CisgICAgcnNhX2FsdC0+c2lnbl9mdW5jID0gc2lnbl9mdW5jOworICAgIHJzYV9hbHQtPmtleV9sZW5fZnVuYyA9IGtleV9sZW5fZnVuYzsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUICovCisKKy8qCisgKiBUZWxsIGlmIGEgUEsgY2FuIGRvIHRoZSBvcGVyYXRpb25zIG9mIHRoZSBnaXZlbiB0eXBlCisgKi8KK2ludCBtYmVkdGxzX3BrX2Nhbl9kbyggY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIG1iZWR0bHNfcGtfdHlwZV90IHR5cGUgKQoreworICAgIC8qIG51bGwgb3IgTk9ORSBjb250ZXh0IGNhbid0IGRvIGFueXRoaW5nICovCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+cGtfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICByZXR1cm4oIGN0eC0+cGtfaW5mby0+Y2FuX2RvKCB0eXBlICkgKTsKK30KKworLyoKKyAqIEhlbHBlciBmb3IgbWJlZHRsc19wa19zaWduIGFuZCBtYmVkdGxzX3BrX3ZlcmlmeQorICovCitzdGF0aWMgaW5saW5lIGludCBwa19oYXNobGVuX2hlbHBlciggbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLCBzaXplX3QgKmhhc2hfbGVuICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKworICAgIGlmKCAqaGFzaF9sZW4gIT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoICggbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgICpoYXNoX2xlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFZlcmlmeSBhIHNpZ25hdHVyZQorICovCitpbnQgbWJlZHRsc19wa192ZXJpZnkoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdfbGVuICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5wa19pbmZvID09IE5VTEwgfHwKKyAgICAgICAgcGtfaGFzaGxlbl9oZWxwZXIoIG1kX2FsZywgJmhhc2hfbGVuICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBjdHgtPnBrX2luZm8tPnZlcmlmeV9mdW5jID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggY3R4LT5wa19pbmZvLT52ZXJpZnlfZnVuYyggY3R4LT5wa19jdHgsIG1kX2FsZywgaGFzaCwgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWcsIHNpZ19sZW4gKSApOworfQorCisvKgorICogVmVyaWZ5IGEgc2lnbmF0dXJlIHdpdGggb3B0aW9ucworICovCitpbnQgbWJlZHRsc19wa192ZXJpZnlfZXh0KCBtYmVkdGxzX3BrX3R5cGVfdCB0eXBlLCBjb25zdCB2b2lkICpvcHRpb25zLAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ19sZW4gKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPnBrX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAhIG1iZWR0bHNfcGtfY2FuX2RvKCBjdHgsIHR5cGUgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSCApOworCisgICAgaWYoIHR5cGUgPT0gTUJFRFRMU19QS19SU0FTU0FfUFNTICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjIxKQorICAgICAgICBpbnQgcmV0OworICAgICAgICBjb25zdCBtYmVkdGxzX3BrX3JzYXNzYV9wc3Nfb3B0aW9ucyAqcHNzX29wdHM7CisKKyAgICAgICAgaWYoIG9wdGlvbnMgPT0gTlVMTCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAgICAgcHNzX29wdHMgPSAoY29uc3QgbWJlZHRsc19wa19yc2Fzc2FfcHNzX29wdGlvbnMgKikgb3B0aW9uczsKKworICAgICAgICBpZiggc2lnX2xlbiA8IG1iZWR0bHNfcGtfZ2V0X2xlbiggY3R4ICkgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dCggbWJlZHRsc19wa19yc2EoICpjdHggKSwKKyAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBNQkVEVExTX1JTQV9QVUJMSUMsCisgICAgICAgICAgICAgICAgbWRfYWxnLCAodW5zaWduZWQgaW50KSBoYXNoX2xlbiwgaGFzaCwKKyAgICAgICAgICAgICAgICBwc3Nfb3B0cy0+bWdmMV9oYXNoX2lkLAorICAgICAgICAgICAgICAgIHBzc19vcHRzLT5leHBlY3RlZF9zYWx0X2xlbiwKKyAgICAgICAgICAgICAgICBzaWcgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgaWYoIHNpZ19sZW4gPiBtYmVkdGxzX3BrX2dldF9sZW4oIGN0eCApICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfU0lHX0xFTl9NSVNNQVRDSCApOworCisgICAgICAgIHJldHVybiggMCApOworI2Vsc2UKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBHZW5lcmFsIGNhc2U6IG5vIG9wdGlvbnMgKi8KKyAgICBpZiggb3B0aW9ucyAhPSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSApOworCisgICAgcmV0dXJuKCBtYmVkdGxzX3BrX3ZlcmlmeSggY3R4LCBtZF9hbGcsIGhhc2gsIGhhc2hfbGVuLCBzaWcsIHNpZ19sZW4gKSApOworfQorCisvKgorICogTWFrZSBhIHNpZ25hdHVyZQorICovCitpbnQgbWJlZHRsc19wa19zaWduKCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBoYXNoX2xlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnX2xlbiwKKyAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5wa19pbmZvID09IE5VTEwgfHwKKyAgICAgICAgcGtfaGFzaGxlbl9oZWxwZXIoIG1kX2FsZywgJmhhc2hfbGVuICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBjdHgtPnBrX2luZm8tPnNpZ25fZnVuYyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIGN0eC0+cGtfaW5mby0+c2lnbl9mdW5jKCBjdHgtPnBrX2N0eCwgbWRfYWxnLCBoYXNoLCBoYXNoX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWcsIHNpZ19sZW4sIGZfcm5nLCBwX3JuZyApICk7Cit9CisKKy8qCisgKiBEZWNyeXB0IG1lc3NhZ2UKKyAqLworaW50IG1iZWR0bHNfcGtfZGVjcnlwdCggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuLCBzaXplX3Qgb3NpemUsCisgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+cGtfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIGN0eC0+cGtfaW5mby0+ZGVjcnlwdF9mdW5jID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggY3R4LT5wa19pbmZvLT5kZWNyeXB0X2Z1bmMoIGN0eC0+cGtfY3R4LCBpbnB1dCwgaWxlbiwKKyAgICAgICAgICAgICAgICBvdXRwdXQsIG9sZW4sIG9zaXplLCBmX3JuZywgcF9ybmcgKSApOworfQorCisvKgorICogRW5jcnlwdCBtZXNzYWdlCisgKi8KK2ludCBtYmVkdGxzX3BrX2VuY3J5cHQoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiwgc2l6ZV90IG9zaXplLAorICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPnBrX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBjdHgtPnBrX2luZm8tPmVuY3J5cHRfZnVuYyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIGN0eC0+cGtfaW5mby0+ZW5jcnlwdF9mdW5jKCBjdHgtPnBrX2N0eCwgaW5wdXQsIGlsZW4sCisgICAgICAgICAgICAgICAgb3V0cHV0LCBvbGVuLCBvc2l6ZSwgZl9ybmcsIHBfcm5nICkgKTsKK30KKworLyoKKyAqIENoZWNrIHB1YmxpYy1wcml2YXRlIGtleSBwYWlyCisgKi8KK2ludCBtYmVkdGxzX3BrX2NoZWNrX3BhaXIoIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqcHViLCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKnBydiApCit7CisgICAgaWYoIHB1YiA9PSBOVUxMIHx8IHB1Yi0+cGtfaW5mbyA9PSBOVUxMIHx8CisgICAgICAgIHBydiA9PSBOVUxMIHx8IHBydi0+cGtfaW5mbyA9PSBOVUxMIHx8CisgICAgICAgIHBydi0+cGtfaW5mby0+Y2hlY2tfcGFpcl9mdW5jID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGlmKCBwcnYtPnBrX2luZm8tPnR5cGUgPT0gTUJFRFRMU19QS19SU0FfQUxUICkKKyAgICB7CisgICAgICAgIGlmKCBwdWItPnBrX2luZm8tPnR5cGUgIT0gTUJFRFRMU19QS19SU0EgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENIICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKCBwdWItPnBrX2luZm8gIT0gcHJ2LT5wa19pbmZvICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSCApOworICAgIH0KKworICAgIHJldHVybiggcHJ2LT5wa19pbmZvLT5jaGVja19wYWlyX2Z1bmMoIHB1Yi0+cGtfY3R4LCBwcnYtPnBrX2N0eCApICk7Cit9CisKKy8qCisgKiBHZXQga2V5IHNpemUgaW4gYml0cworICovCitzaXplX3QgbWJlZHRsc19wa19nZXRfYml0bGVuKCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+cGtfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICByZXR1cm4oIGN0eC0+cGtfaW5mby0+Z2V0X2JpdGxlbiggY3R4LT5wa19jdHggKSApOworfQorCisvKgorICogRXhwb3J0IGRlYnVnIGluZm9ybWF0aW9uCisgKi8KK2ludCBtYmVkdGxzX3BrX2RlYnVnKCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgbWJlZHRsc19wa19kZWJ1Z19pdGVtICppdGVtcyApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+cGtfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIGN0eC0+cGtfaW5mby0+ZGVidWdfZnVuYyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENIICk7CisKKyAgICBjdHgtPnBrX2luZm8tPmRlYnVnX2Z1bmMoIGN0eC0+cGtfY3R4LCBpdGVtcyApOworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQWNjZXNzIHRoZSBQSyB0eXBlIG5hbWUKKyAqLworY29uc3QgY2hhciAqbWJlZHRsc19wa19nZXRfbmFtZSggY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPnBrX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggImludmFsaWQgUEsiICk7CisKKyAgICByZXR1cm4oIGN0eC0+cGtfaW5mby0+bmFtZSApOworfQorCisvKgorICogQWNjZXNzIHRoZSBQSyB0eXBlCisgKi8KK21iZWR0bHNfcGtfdHlwZV90IG1iZWR0bHNfcGtfZ2V0X3R5cGUoIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5wa19pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfUEtfTk9ORSApOworCisgICAgcmV0dXJuKCBjdHgtPnBrX2luZm8tPnR5cGUgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfUEtfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGtfd3JhcC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGtfd3JhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMmFkNDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa193cmFwLmMKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiAgUHVibGljIEtleSBhYnN0cmFjdGlvbiBsYXllcjogd3JhcHBlciBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGtfaW50ZXJuYWwuaCIKKworLyogRXZlbiBpZiBSU0Egbm90IGFjdGl2YXRlZCwgZm9yIHRoZSBzYWtlIG9mIFJTQS1hbHQgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisjaW5jbHVkZSAibWJlZHRscy9lY3AuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisjaW5jbHVkZSAibWJlZHRscy9lY2RzYS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCkKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKK3N0YXRpYyBpbnQgcnNhX2Nhbl9kbyggbWJlZHRsc19wa190eXBlX3QgdHlwZSApCit7CisgICAgcmV0dXJuKCB0eXBlID09IE1CRURUTFNfUEtfUlNBIHx8CisgICAgICAgICAgICB0eXBlID09IE1CRURUTFNfUEtfUlNBU1NBX1BTUyApOworfQorCitzdGF0aWMgc2l6ZV90IHJzYV9nZXRfYml0bGVuKCBjb25zdCB2b2lkICpjdHggKQoreworICAgIHJldHVybiggOCAqICgoY29uc3QgbWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgpLT5sZW4gKTsKK30KKworc3RhdGljIGludCByc2FfdmVyaWZ5X3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBoYXNoX2xlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdfbGVuICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIHNpZ19sZW4gPCAoKG1iZWR0bHNfcnNhX2NvbnRleHQgKikgY3R4KS0+bGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5KCAobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19SU0FfUFVCTElDLCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgaGFzaF9sZW4sIGhhc2gsIHNpZyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggc2lnX2xlbiA+ICgobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgpLT5sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1NJR19MRU5fTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHJzYV9zaWduX3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBoYXNoX2xlbiwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnX2xlbiwKKyAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICAqc2lnX2xlbiA9ICgobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgpLT5sZW47CisKKyAgICByZXR1cm4oIG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24oIChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCwgZl9ybmcsIHBfcm5nLCBNQkVEVExTX1JTQV9QUklWQVRFLAorICAgICAgICAgICAgICAgIG1kX2FsZywgKHVuc2lnbmVkIGludCkgaGFzaF9sZW4sIGhhc2gsIHNpZyApICk7Cit9CisKK3N0YXRpYyBpbnQgcnNhX2RlY3J5cHRfd3JhcCggdm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuLCBzaXplX3Qgb3NpemUsCisgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgIGlmKCBpbGVuICE9ICgobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgpLT5sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgcmV0dXJuKCBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0KCAobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgsIGZfcm5nLCBwX3JuZywKKyAgICAgICAgICAgICAgICBNQkVEVExTX1JTQV9QUklWQVRFLCBvbGVuLCBpbnB1dCwgb3V0cHV0LCBvc2l6ZSApICk7Cit9CisKK3N0YXRpYyBpbnQgcnNhX2VuY3J5cHRfd3JhcCggdm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuLCBzaXplX3Qgb3NpemUsCisgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgICpvbGVuID0gKChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCktPmxlbjsKKworICAgIGlmKCAqb2xlbiA+IG9zaXplICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfT1VUUFVUX1RPT19MQVJHRSApOworCisgICAgcmV0dXJuKCBtYmVkdGxzX3JzYV9wa2NzMV9lbmNyeXB0KCAobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgsCisgICAgICAgICAgICAgICAgZl9ybmcsIHBfcm5nLCBNQkVEVExTX1JTQV9QVUJMSUMsIGlsZW4sIGlucHV0LCBvdXRwdXQgKSApOworfQorCitzdGF0aWMgaW50IHJzYV9jaGVja19wYWlyX3dyYXAoIGNvbnN0IHZvaWQgKnB1YiwgY29uc3Qgdm9pZCAqcHJ2ICkKK3sKKyAgICByZXR1cm4oIG1iZWR0bHNfcnNhX2NoZWNrX3B1Yl9wcml2KCAoY29uc3QgbWJlZHRsc19yc2FfY29udGV4dCAqKSBwdWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICopIHBydiApICk7Cit9CisKK3N0YXRpYyB2b2lkICpyc2FfYWxsb2Nfd3JhcCggdm9pZCApCit7CisgICAgdm9pZCAqY3R4ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19yc2FfY29udGV4dCApICk7CisKKyAgICBpZiggY3R4ICE9IE5VTEwgKQorICAgICAgICBtYmVkdGxzX3JzYV9pbml0KCAobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgsIDAsIDAgKTsKKworICAgIHJldHVybiggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIHJzYV9mcmVlX3dyYXAoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19yc2FfZnJlZSggKG1iZWR0bHNfcnNhX2NvbnRleHQgKikgY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgcnNhX2RlYnVnKCBjb25zdCB2b2lkICpjdHgsIG1iZWR0bHNfcGtfZGVidWdfaXRlbSAqaXRlbXMgKQoreworICAgIGl0ZW1zLT50eXBlID0gTUJFRFRMU19QS19ERUJVR19NUEk7CisgICAgaXRlbXMtPm5hbWUgPSAicnNhLk4iOworICAgIGl0ZW1zLT52YWx1ZSA9ICYoICgobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgpLT5OICk7CisKKyAgICBpdGVtcysrOworCisgICAgaXRlbXMtPnR5cGUgPSBNQkVEVExTX1BLX0RFQlVHX01QSTsKKyAgICBpdGVtcy0+bmFtZSA9ICJyc2EuRSI7CisgICAgaXRlbXMtPnZhbHVlID0gJiggKChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCktPkUgKTsKK30KKworY29uc3QgbWJlZHRsc19wa19pbmZvX3QgbWJlZHRsc19yc2FfaW5mbyA9IHsKKyAgICBNQkVEVExTX1BLX1JTQSwKKyAgICAiUlNBIiwKKyAgICByc2FfZ2V0X2JpdGxlbiwKKyAgICByc2FfY2FuX2RvLAorICAgIHJzYV92ZXJpZnlfd3JhcCwKKyAgICByc2Ffc2lnbl93cmFwLAorICAgIHJzYV9kZWNyeXB0X3dyYXAsCisgICAgcnNhX2VuY3J5cHRfd3JhcCwKKyAgICByc2FfY2hlY2tfcGFpcl93cmFwLAorICAgIHJzYV9hbGxvY193cmFwLAorICAgIHJzYV9mcmVlX3dyYXAsCisgICAgcnNhX2RlYnVnLAorfTsKKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisvKgorICogR2VuZXJpYyBFQyBrZXkKKyAqLworc3RhdGljIGludCBlY2tleV9jYW5fZG8oIG1iZWR0bHNfcGtfdHlwZV90IHR5cGUgKQoreworICAgIHJldHVybiggdHlwZSA9PSBNQkVEVExTX1BLX0VDS0VZIHx8CisgICAgICAgICAgICB0eXBlID09IE1CRURUTFNfUEtfRUNLRVlfREggfHwKKyAgICAgICAgICAgIHR5cGUgPT0gTUJFRFRMU19QS19FQ0RTQSApOworfQorCitzdGF0aWMgc2l6ZV90IGVja2V5X2dldF9iaXRsZW4oIGNvbnN0IHZvaWQgKmN0eCApCit7CisgICAgcmV0dXJuKCAoKG1iZWR0bHNfZWNwX2tleXBhaXIgKikgY3R4KS0+Z3JwLnBiaXRzICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdGF0aWMgaW50IGVjZHNhX3ZlcmlmeV93cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdfbGVuICk7CisKK3N0YXRpYyBpbnQgZWNkc2Ffc2lnbl93cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ19sZW4sCisgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApOworCitzdGF0aWMgaW50IGVja2V5X3ZlcmlmeV93cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfZWNkc2FfY29udGV4dCBlY2RzYTsKKworICAgIG1iZWR0bHNfZWNkc2FfaW5pdCggJmVjZHNhICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZHNhX2Zyb21fa2V5cGFpciggJmVjZHNhLCBjdHggKSApID09IDAgKQorICAgICAgICByZXQgPSBlY2RzYV92ZXJpZnlfd3JhcCggJmVjZHNhLCBtZF9hbGcsIGhhc2gsIGhhc2hfbGVuLCBzaWcsIHNpZ19sZW4gKTsKKworICAgIG1iZWR0bHNfZWNkc2FfZnJlZSggJmVjZHNhICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCitzdGF0aWMgaW50IGVja2V5X3NpZ25fd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzaWdfbGVuLAorICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19lY2RzYV9jb250ZXh0IGVjZHNhOworCisgICAgbWJlZHRsc19lY2RzYV9pbml0KCAmZWNkc2EgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkc2FfZnJvbV9rZXlwYWlyKCAmZWNkc2EsIGN0eCApICkgPT0gMCApCisgICAgICAgIHJldCA9IGVjZHNhX3NpZ25fd3JhcCggJmVjZHNhLCBtZF9hbGcsIGhhc2gsIGhhc2hfbGVuLCBzaWcsIHNpZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl9ybmcsIHBfcm5nICk7CisKKyAgICBtYmVkdGxzX2VjZHNhX2ZyZWUoICZlY2RzYSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfRUNEU0FfQyAqLworCitzdGF0aWMgaW50IGVja2V5X2NoZWNrX3BhaXIoIGNvbnN0IHZvaWQgKnB1YiwgY29uc3Qgdm9pZCAqcHJ2ICkKK3sKKyAgICByZXR1cm4oIG1iZWR0bHNfZWNwX2NoZWNrX3B1Yl9wcml2KCAoY29uc3QgbWJlZHRsc19lY3Bfa2V5cGFpciAqKSBwdWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBtYmVkdGxzX2VjcF9rZXlwYWlyICopIHBydiApICk7Cit9CisKK3N0YXRpYyB2b2lkICplY2tleV9hbGxvY193cmFwKCB2b2lkICkKK3sKKyAgICB2b2lkICpjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX2VjcF9rZXlwYWlyICkgKTsKKworICAgIGlmKCBjdHggIT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfaW5pdCggY3R4ICk7CisKKyAgICByZXR1cm4oIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBlY2tleV9mcmVlX3dyYXAoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCAobWJlZHRsc19lY3Bfa2V5cGFpciAqKSBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBlY2tleV9kZWJ1ZyggY29uc3Qgdm9pZCAqY3R4LCBtYmVkdGxzX3BrX2RlYnVnX2l0ZW0gKml0ZW1zICkKK3sKKyAgICBpdGVtcy0+dHlwZSA9IE1CRURUTFNfUEtfREVCVUdfRUNQOworICAgIGl0ZW1zLT5uYW1lID0gImVja2V5LlEiOworICAgIGl0ZW1zLT52YWx1ZSA9ICYoICgobWJlZHRsc19lY3Bfa2V5cGFpciAqKSBjdHgpLT5RICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfcGtfaW5mb190IG1iZWR0bHNfZWNrZXlfaW5mbyA9IHsKKyAgICBNQkVEVExTX1BLX0VDS0VZLAorICAgICJFQyIsCisgICAgZWNrZXlfZ2V0X2JpdGxlbiwKKyAgICBlY2tleV9jYW5fZG8sCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgZWNrZXlfdmVyaWZ5X3dyYXAsCisgICAgZWNrZXlfc2lnbl93cmFwLAorI2Vsc2UKKyAgICBOVUxMLAorICAgIE5VTEwsCisjZW5kaWYKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgZWNrZXlfY2hlY2tfcGFpciwKKyAgICBlY2tleV9hbGxvY193cmFwLAorICAgIGVja2V5X2ZyZWVfd3JhcCwKKyAgICBlY2tleV9kZWJ1ZywKK307CisKKy8qCisgKiBFQyBrZXkgcmVzdHJpY3RlZCB0byBFQ0RICisgKi8KK3N0YXRpYyBpbnQgZWNrZXlkaF9jYW5fZG8oIG1iZWR0bHNfcGtfdHlwZV90IHR5cGUgKQoreworICAgIHJldHVybiggdHlwZSA9PSBNQkVEVExTX1BLX0VDS0VZIHx8CisgICAgICAgICAgICB0eXBlID09IE1CRURUTFNfUEtfRUNLRVlfREggKTsKK30KKworY29uc3QgbWJlZHRsc19wa19pbmZvX3QgbWJlZHRsc19lY2tleWRoX2luZm8gPSB7CisgICAgTUJFRFRMU19QS19FQ0tFWV9ESCwKKyAgICAiRUNfREgiLAorICAgIGVja2V5X2dldF9iaXRsZW4sICAgICAgICAgLyogU2FtZSB1bmRlcmx5aW5nIGtleSBzdHJ1Y3R1cmUgKi8KKyAgICBlY2tleWRoX2Nhbl9kbywKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIGVja2V5X2NoZWNrX3BhaXIsCisgICAgZWNrZXlfYWxsb2Nfd3JhcCwgICAgICAgLyogU2FtZSB1bmRlcmx5aW5nIGtleSBzdHJ1Y3R1cmUgKi8KKyAgICBlY2tleV9mcmVlX3dyYXAsICAgICAgICAvKiBTYW1lIHVuZGVybHlpbmcga2V5IHN0cnVjdHVyZSAqLworICAgIGVja2V5X2RlYnVnLCAgICAgICAgICAgIC8qIFNhbWUgdW5kZXJseWluZyBrZXkgc3RydWN0dXJlICovCit9OworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorc3RhdGljIGludCBlY2RzYV9jYW5fZG8oIG1iZWR0bHNfcGtfdHlwZV90IHR5cGUgKQoreworICAgIHJldHVybiggdHlwZSA9PSBNQkVEVExTX1BLX0VDRFNBICk7Cit9CisKK3N0YXRpYyBpbnQgZWNkc2FfdmVyaWZ5X3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ19sZW4gKQoreworICAgIGludCByZXQ7CisgICAgKCh2b2lkKSBtZF9hbGcpOworCisgICAgcmV0ID0gbWJlZHRsc19lY2RzYV9yZWFkX3NpZ25hdHVyZSggKG1iZWR0bHNfZWNkc2FfY29udGV4dCAqKSBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsIGhhc2hfbGVuLCBzaWcsIHNpZ19sZW4gKTsKKworICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfRUNQX1NJR19MRU5fTUlTTUFUQ0ggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1NJR19MRU5fTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKK3N0YXRpYyBpbnQgZWNkc2Ffc2lnbl93cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ19sZW4sCisgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgcmV0dXJuKCBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZSggKG1iZWR0bHNfZWNkc2FfY29udGV4dCAqKSBjdHgsCisgICAgICAgICAgICAgICAgbWRfYWxnLCBoYXNoLCBoYXNoX2xlbiwgc2lnLCBzaWdfbGVuLCBmX3JuZywgcF9ybmcgKSApOworfQorCitzdGF0aWMgdm9pZCAqZWNkc2FfYWxsb2Nfd3JhcCggdm9pZCApCit7CisgICAgdm9pZCAqY3R4ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19lY2RzYV9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggIT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfZWNkc2FfaW5pdCggKG1iZWR0bHNfZWNkc2FfY29udGV4dCAqKSBjdHggKTsKKworICAgIHJldHVybiggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIGVjZHNhX2ZyZWVfd3JhcCggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2VjZHNhX2ZyZWUoIChtYmVkdGxzX2VjZHNhX2NvbnRleHQgKikgY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworY29uc3QgbWJlZHRsc19wa19pbmZvX3QgbWJlZHRsc19lY2RzYV9pbmZvID0geworICAgIE1CRURUTFNfUEtfRUNEU0EsCisgICAgIkVDRFNBIiwKKyAgICBlY2tleV9nZXRfYml0bGVuLCAgICAgLyogQ29tcGF0aWJsZSBrZXkgc3RydWN0dXJlcyAqLworICAgIGVjZHNhX2Nhbl9kbywKKyAgICBlY2RzYV92ZXJpZnlfd3JhcCwKKyAgICBlY2RzYV9zaWduX3dyYXAsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIGVja2V5X2NoZWNrX3BhaXIsICAgLyogQ29tcGF0aWJsZSBrZXkgc3RydWN0dXJlcyAqLworICAgIGVjZHNhX2FsbG9jX3dyYXAsCisgICAgZWNkc2FfZnJlZV93cmFwLAorICAgIGVja2V5X2RlYnVnLCAgICAgICAgLyogQ29tcGF0aWJsZSBrZXkgc3RydWN0dXJlcyAqLworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQpCisvKgorICogU3VwcG9ydCBmb3IgYWx0ZXJuYXRpdmUgUlNBLXByaXZhdGUgaW1wbGVtZW50YXRpb25zCisgKi8KKworc3RhdGljIGludCByc2FfYWx0X2Nhbl9kbyggbWJlZHRsc19wa190eXBlX3QgdHlwZSApCit7CisgICAgcmV0dXJuKCB0eXBlID09IE1CRURUTFNfUEtfUlNBICk7Cit9CisKK3N0YXRpYyBzaXplX3QgcnNhX2FsdF9nZXRfYml0bGVuKCBjb25zdCB2b2lkICpjdHggKQoreworICAgIGNvbnN0IG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0ICpyc2FfYWx0ID0gKGNvbnN0IG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0ICopIGN0eDsKKworICAgIHJldHVybiggOCAqIHJzYV9hbHQtPmtleV9sZW5fZnVuYyggcnNhX2FsdC0+a2V5ICkgKTsKK30KKworc3RhdGljIGludCByc2FfYWx0X3NpZ25fd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzaWdfbGVuLAorICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgIG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0ICpyc2FfYWx0ID0gKG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0ICopIGN0eDsKKworICAgICpzaWdfbGVuID0gcnNhX2FsdC0+a2V5X2xlbl9mdW5jKCByc2FfYWx0LT5rZXkgKTsKKworICAgIHJldHVybiggcnNhX2FsdC0+c2lnbl9mdW5jKCByc2FfYWx0LT5rZXksIGZfcm5nLCBwX3JuZywgTUJFRFRMU19SU0FfUFJJVkFURSwKKyAgICAgICAgICAgICAgICBtZF9hbGcsICh1bnNpZ25lZCBpbnQpIGhhc2hfbGVuLCBoYXNoLCBzaWcgKSApOworfQorCitzdGF0aWMgaW50IHJzYV9hbHRfZGVjcnlwdF93cmFwKCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4sIHNpemVfdCBvc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgbWJlZHRsc19yc2FfYWx0X2NvbnRleHQgKnJzYV9hbHQgPSAobWJlZHRsc19yc2FfYWx0X2NvbnRleHQgKikgY3R4OworCisgICAgKCh2b2lkKSBmX3JuZyk7CisgICAgKCh2b2lkKSBwX3JuZyk7CisKKyAgICBpZiggaWxlbiAhPSByc2FfYWx0LT5rZXlfbGVuX2Z1bmMoIHJzYV9hbHQtPmtleSApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHJldHVybiggcnNhX2FsdC0+ZGVjcnlwdF9mdW5jKCByc2FfYWx0LT5rZXksCisgICAgICAgICAgICAgICAgTUJFRFRMU19SU0FfUFJJVkFURSwgb2xlbiwgaW5wdXQsIG91dHB1dCwgb3NpemUgKSApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorc3RhdGljIGludCByc2FfYWx0X2NoZWNrX3BhaXIoIGNvbnN0IHZvaWQgKnB1YiwgY29uc3Qgdm9pZCAqcHJ2ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHNpZ1tNQkVEVExTX01QSV9NQVhfU0laRV07CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzMyXTsKKyAgICBzaXplX3Qgc2lnX2xlbiA9IDA7CisgICAgaW50IHJldDsKKworICAgIGlmKCByc2FfYWx0X2dldF9iaXRsZW4oIHBydiApICE9IHJzYV9nZXRfYml0bGVuKCBwdWIgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgKTsKKworICAgIG1lbXNldCggaGFzaCwgMHgyYSwgc2l6ZW9mKCBoYXNoICkgKTsKKworICAgIGlmKCAoIHJldCA9IHJzYV9hbHRfc2lnbl93cmFwKCAodm9pZCAqKSBwcnYsIE1CRURUTFNfTURfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgc2l6ZW9mKCBoYXNoICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZywgJnNpZ19sZW4sIE5VTEwsIE5VTEwgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggcnNhX3ZlcmlmeV93cmFwKCAodm9pZCAqKSBwdWIsIE1CRURUTFNfTURfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBzaXplb2YoIGhhc2ggKSwgc2lnLCBzaWdfbGVuICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworCitzdGF0aWMgdm9pZCAqcnNhX2FsdF9hbGxvY193cmFwKCB2b2lkICkKK3sKKyAgICB2b2lkICpjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3JzYV9hbHRfY29udGV4dCApICk7CisKKyAgICBpZiggY3R4ICE9IE5VTEwgKQorICAgICAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX3JzYV9hbHRfY29udGV4dCApICk7CisKKyAgICByZXR1cm4oIGN0eCApOworfQorCitzdGF0aWMgdm9pZCByc2FfYWx0X2ZyZWVfd3JhcCggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX3JzYV9hbHRfY29udGV4dCApICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworY29uc3QgbWJlZHRsc19wa19pbmZvX3QgbWJlZHRsc19yc2FfYWx0X2luZm8gPSB7CisgICAgTUJFRFRMU19QS19SU0FfQUxULAorICAgICJSU0EtYWx0IiwKKyAgICByc2FfYWx0X2dldF9iaXRsZW4sCisgICAgcnNhX2FsdF9jYW5fZG8sCisgICAgTlVMTCwKKyAgICByc2FfYWx0X3NpZ25fd3JhcCwKKyAgICByc2FfYWx0X2RlY3J5cHRfd3JhcCwKKyAgICBOVUxMLAorI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICByc2FfYWx0X2NoZWNrX3BhaXIsCisjZWxzZQorICAgIE5VTEwsCisjZW5kaWYKKyAgICByc2FfYWx0X2FsbG9jX3dyYXAsCisgICAgcnNhX2FsdF9mcmVlX3dyYXAsCisgICAgTlVMTCwKK307CisKKyNlbmRpZiAvKiBNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19QS19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa2NzMTEuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrY3MxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYTY0MjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa2NzMTEuYwpAQCAtMCwwICsxLDI0MCBAQAorLyoqCisgKiBcZmlsZSBwa2NzMTEuYworICoKKyAqIFxicmllZiBXcmFwcGVyIGZvciBQS0NTIzExIGxpYnJhcnkgbGlicGtjczExLWhlbHBlcgorICoKKyAqIFxhdXRob3IgQWRyaWFhbiBkZSBKb25nIDxkZWpvbmdAZm94LWl0LmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2luY2x1ZGUgIm1iZWR0bHMvcGtjczExLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzExX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisjaW5jbHVkZSAibWJlZHRscy9vaWQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3J0LmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgbWJlZHRsc19wa2NzMTFfaW5pdCggbWJlZHRsc19wa2NzMTFfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX3BrY3MxMV9jb250ZXh0ICkgKTsKK30KKworaW50IG1iZWR0bHNfcGtjczExX3g1MDlfY2VydF9iaW5kKCBtYmVkdGxzX3g1MDlfY3J0ICpjZXJ0LCBwa2NzMTFoX2NlcnRpZmljYXRlX3QgcGtjczExX2NlcnQgKQoreworICAgIGludCByZXQgPSAxOworICAgIHVuc2lnbmVkIGNoYXIgKmNlcnRfYmxvYiA9IE5VTEw7CisgICAgc2l6ZV90IGNlcnRfYmxvYl9zaXplID0gMDsKKworICAgIGlmKCBjZXJ0ID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMjsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGlmKCBwa2NzMTFoX2NlcnRpZmljYXRlX2dldENlcnRpZmljYXRlQmxvYiggcGtjczExX2NlcnQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2VydF9ibG9iX3NpemUgKSAhPSBDS1JfT0sgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMzsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGNlcnRfYmxvYiA9IG1iZWR0bHNfY2FsbG9jKCAxLCBjZXJ0X2Jsb2Jfc2l6ZSApOworICAgIGlmKCBOVUxMID09IGNlcnRfYmxvYiApCisgICAgeworICAgICAgICByZXQgPSA0OworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgaWYoIHBrY3MxMWhfY2VydGlmaWNhdGVfZ2V0Q2VydGlmaWNhdGVCbG9iKCBwa2NzMTFfY2VydCwgY2VydF9ibG9iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNlcnRfYmxvYl9zaXplICkgIT0gQ0tSX09LICkKKyAgICB7CisgICAgICAgIHJldCA9IDU7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBpZiggMCAhPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCBjZXJ0LCBjZXJ0X2Jsb2IsIGNlcnRfYmxvYl9zaXplICkgKQorICAgIHsKKyAgICAgICAgcmV0ID0gNjsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIHJldCA9IDA7CisKK2NsZWFudXA6CisgICAgaWYoIE5VTEwgIT0gY2VydF9ibG9iICkKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjZXJ0X2Jsb2IgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKworaW50IG1iZWR0bHNfcGtjczExX3ByaXZfa2V5X2JpbmQoIG1iZWR0bHNfcGtjczExX2NvbnRleHQgKnByaXZfa2V5LAorICAgICAgICBwa2NzMTFoX2NlcnRpZmljYXRlX3QgcGtjczExX2NlcnQgKQoreworICAgIGludCByZXQgPSAxOworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2VydDsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNlcnQgKTsKKworICAgIGlmKCBwcml2X2tleSA9PSBOVUxMICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgaWYoIDAgIT0gbWJlZHRsc19wa2NzMTFfeDUwOV9jZXJ0X2JpbmQoICZjZXJ0LCBwa2NzMTFfY2VydCApICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgcHJpdl9rZXktPmxlbiA9IG1iZWR0bHNfcGtfZ2V0X2xlbiggJmNlcnQucGsgKTsKKyAgICBwcml2X2tleS0+cGtjczExaF9jZXJ0ID0gcGtjczExX2NlcnQ7CisKKyAgICByZXQgPSAwOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNlcnQgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKK3ZvaWQgbWJlZHRsc19wa2NzMTFfcHJpdl9rZXlfZnJlZSggbWJlZHRsc19wa2NzMTFfY29udGV4dCAqcHJpdl9rZXkgKQoreworICAgIGlmKCBOVUxMICE9IHByaXZfa2V5ICkKKyAgICAgICAgcGtjczExaF9jZXJ0aWZpY2F0ZV9mcmVlQ2VydGlmaWNhdGUoIHByaXZfa2V5LT5wa2NzMTFoX2NlcnQgKTsKK30KKworaW50IG1iZWR0bHNfcGtjczExX2RlY3J5cHQoIG1iZWR0bHNfcGtjczExX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG91dHB1dF9tYXhfbGVuICkKK3sKKyAgICBzaXplX3QgaW5wdXRfbGVuLCBvdXRwdXRfbGVuOworCisgICAgaWYoIE5VTEwgPT0gY3R4ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBNQkVEVExTX1JTQV9QUklWQVRFICE9IG1vZGUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgb3V0cHV0X2xlbiA9IGlucHV0X2xlbiA9IGN0eC0+bGVuOworCisgICAgaWYoIGlucHV0X2xlbiA8IDE2IHx8IGlucHV0X2xlbiA+IG91dHB1dF9tYXhfbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qIERldGVybWluZSBzaXplIG9mIG91dHB1dCBidWZmZXIgKi8KKyAgICBpZiggcGtjczExaF9jZXJ0aWZpY2F0ZV9kZWNyeXB0QW55KCBjdHgtPnBrY3MxMWhfY2VydCwgQ0tNX1JTQV9QS0NTLCBpbnB1dCwKKyAgICAgICAgICAgIGlucHV0X2xlbiwgTlVMTCwgJm91dHB1dF9sZW4gKSAhPSBDS1JfT0sgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBpZiggb3V0cHV0X2xlbiA+IG91dHB1dF9tYXhfbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfT1VUUFVUX1RPT19MQVJHRSApOworCisgICAgaWYoIHBrY3MxMWhfY2VydGlmaWNhdGVfZGVjcnlwdEFueSggY3R4LT5wa2NzMTFoX2NlcnQsIENLTV9SU0FfUEtDUywgaW5wdXQsCisgICAgICAgICAgICBpbnB1dF9sZW4sIG91dHB1dCwgJm91dHB1dF9sZW4gKSAhPSBDS1JfT0sgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisgICAgKm9sZW4gPSBvdXRwdXRfbGVuOworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19wa2NzMTFfc2lnbiggbWJlZHRsc19wa2NzMTFfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnICkKK3sKKyAgICBzaXplX3Qgc2lnX2xlbiA9IDAsIGFzbl9sZW4gPSAwLCBvaWRfc2l6ZSA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IHNpZzsKKyAgICBjb25zdCBjaGFyICpvaWQ7CisKKyAgICBpZiggTlVMTCA9PSBjdHggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIE1CRURUTFNfUlNBX1BSSVZBVEUgIT0gbW9kZSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggbWRfYWxnICE9IE1CRURUTFNfTURfTk9ORSApCisgICAgeworICAgICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApOworICAgICAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfbWQoIG1kX2FsZywgJm9pZCwgJm9pZF9zaXplICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgICAgIGhhc2hsZW4gPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7CisgICAgICAgIGFzbl9sZW4gPSAxMCArIG9pZF9zaXplOworICAgIH0KKworICAgIHNpZ19sZW4gPSBjdHgtPmxlbjsKKyAgICBpZiggaGFzaGxlbiA+IHNpZ19sZW4gfHwgYXNuX2xlbiA+IHNpZ19sZW4gfHwKKyAgICAgICAgaGFzaGxlbiArIGFzbl9sZW4gPiBzaWdfbGVuICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgaWYoIG1kX2FsZyAhPSBNQkVEVExTX01EX05PTkUgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogRGlnZXN0SW5mbyA6Oj0gU0VRVUVOQ0UgeworICAgICAgICAgKiAgIGRpZ2VzdEFsZ29yaXRobSBEaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyLAorICAgICAgICAgKiAgIGRpZ2VzdCBEaWdlc3QgfQorICAgICAgICAgKgorICAgICAgICAgKiBEaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyIDo6PSBBbGdvcml0aG1JZGVudGlmaWVyCisgICAgICAgICAqCisgICAgICAgICAqIERpZ2VzdCA6Oj0gT0NURVQgU1RSSU5HCisgICAgICAgICAqLworICAgICAgICAqcCsrID0gTUJFRFRMU19BU04xX1NFUVVFTkNFIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEOworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpICggMHgwOCArIG9pZF9zaXplICsgaGFzaGxlbiApOworICAgICAgICAqcCsrID0gTUJFRFRMU19BU04xX1NFUVVFTkNFIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEOworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpICggMHgwNCArIG9pZF9zaXplICk7CisgICAgICAgICpwKysgPSBNQkVEVExTX0FTTjFfT0lEOworICAgICAgICAqcCsrID0gb2lkX3NpemUgJiAweEZGOworICAgICAgICBtZW1jcHkoIHAsIG9pZCwgb2lkX3NpemUgKTsKKyAgICAgICAgcCArPSBvaWRfc2l6ZTsKKyAgICAgICAgKnArKyA9IE1CRURUTFNfQVNOMV9OVUxMOworICAgICAgICAqcCsrID0gMHgwMDsKKyAgICAgICAgKnArKyA9IE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkc7CisgICAgICAgICpwKysgPSBoYXNobGVuOworICAgIH0KKworICAgIG1lbWNweSggcCwgaGFzaCwgaGFzaGxlbiApOworCisgICAgaWYoIHBrY3MxMWhfY2VydGlmaWNhdGVfc2lnbkFueSggY3R4LT5wa2NzMTFoX2NlcnQsIENLTV9SU0FfUEtDUywgc2lnLAorICAgICAgICAgICAgYXNuX2xlbiArIGhhc2hsZW4sIHNpZywgJnNpZ19sZW4gKSAhPSBDS1JfT0sgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19QS0NTMTFfQykgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrY3MxMi5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGtjczEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwM2ExMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrY3MxMi5jCkBAIC0wLDAgKzEsMzY1IEBACisvKgorICogIFBLQ1MjMTIgUGVyc29uYWwgSW5mb3JtYXRpb24gRXhjaGFuZ2UgU3ludGF4CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBQS0NTICMxMiBQZXJzb25hbCBJbmZvcm1hdGlvbiBFeGNoYW5nZSBTeW50YXggU3RhbmRhcmQgdjEuMQorICoKKyAqICBodHRwOi8vd3d3LnJzYS5jb20vcnNhbGFicy9wa2NzL2ZpbGVzL2gxMTMwMS13cC1wa2NzLTEydjEtMS1wZXJzb25hbC1pbmZvcm1hdGlvbi1leGNoYW5nZS1zeW50YXgucGRmCisgKiAgZnRwOi8vZnRwLnJzYXNlY3VyaXR5LmNvbS9wdWIvcGtjcy9wa2NzLTEyL3BrY3MtMTJ2MS0xLmFzbgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzEyX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3BrY3MxMi5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYXNuMS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2lwaGVyLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisjaW5jbHVkZSAibWJlZHRscy9hcmM0LmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyNpbmNsdWRlICJtYmVkdGxzL2Rlcy5oIgorI2VuZGlmCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgcGtjczEyX3BhcnNlX3BiZV9wYXJhbXMoIG1iZWR0bHNfYXNuMV9idWYgKnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYXNuMV9idWYgKnNhbHQsIGludCAqaXRlcmF0aW9ucyApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICoqcCA9ICZwYXJhbXMtPnA7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gcGFyYW1zLT5wICsgcGFyYW1zLT5sZW47CisKKyAgICAvKgorICAgICAqICBwa2NzLTEyUGJlUGFyYW1zIDo6PSBTRVFVRU5DRSB7CisgICAgICogICAgc2FsdCAgICAgICAgICBPQ1RFVCBTVFJJTkcsCisgICAgICogICAgaXRlcmF0aW9ucyAgICBJTlRFR0VSCisgICAgICogIH0KKyAgICAgKgorICAgICAqLworICAgIGlmKCBwYXJhbXMtPnRhZyAhPSAoIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTMTJfUEJFX0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmc2FsdC0+bGVuLCBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTMTJfUEJFX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICBzYWx0LT5wID0gKnA7CisgICAgKnAgKz0gc2FsdC0+bGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9pbnQoIHAsIGVuZCwgaXRlcmF0aW9ucyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzEyX1BCRV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzEyX1BCRV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggMCApOworfQorCisjZGVmaW5lIFBLQ1MxMl9NQVhfUFdETEVOIDEyOAorCitzdGF0aWMgaW50IHBrY3MxMl9wYmVfZGVyaXZlX2tleV9pdiggbWJlZHRsc19hc24xX2J1ZiAqcGJlX3BhcmFtcywgbWJlZHRsc19tZF90eXBlX3QgbWRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsICBzaXplX3QgcHdkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICppdiwgIHNpemVfdCBpdmxlbiApCit7CisgICAgaW50IHJldCwgaXRlcmF0aW9ucyA9IDA7CisgICAgbWJlZHRsc19hc24xX2J1ZiBzYWx0OworICAgIHNpemVfdCBpOworICAgIHVuc2lnbmVkIGNoYXIgdW5pcHdkW1BLQ1MxMl9NQVhfUFdETEVOICogMiArIDJdOworCisgICAgaWYoIHB3ZGxlbiA+IFBLQ1MxMl9NQVhfUFdETEVOICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTMTJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1lbXNldCggJnNhbHQsIDAsIHNpemVvZihtYmVkdGxzX2FzbjFfYnVmKSApOworICAgIG1lbXNldCggJnVuaXB3ZCwgMCwgc2l6ZW9mKHVuaXB3ZCkgKTsKKworICAgIGlmKCAoIHJldCA9IHBrY3MxMl9wYXJzZV9wYmVfcGFyYW1zKCBwYmVfcGFyYW1zLCAmc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZXJhdGlvbnMgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgZm9yKCBpID0gMDsgaSA8IHB3ZGxlbjsgaSsrICkKKyAgICAgICAgdW5pcHdkW2kgKiAyICsgMV0gPSBwd2RbaV07CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrY3MxMl9kZXJpdmF0aW9uKCBrZXksIGtleWxlbiwgdW5pcHdkLCBwd2RsZW4gKiAyICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FsdC5wLCBzYWx0LmxlbiwgbWRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19QS0NTMTJfREVSSVZFX0tFWSwgaXRlcmF0aW9ucyApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBpdiA9PSBOVUxMIHx8IGl2bGVuID09IDAgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtjczEyX2Rlcml2YXRpb24oIGl2LCBpdmxlbiwgdW5pcHdkLCBwd2RsZW4gKiAyICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FsdC5wLCBzYWx0LmxlbiwgbWRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19QS0NTMTJfREVSSVZFX0lWLCBpdGVyYXRpb25zICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorICAgIHJldHVybiggMCApOworfQorCisjdW5kZWYgUEtDUzEyX01BWF9QV0RMRU4KKworaW50IG1iZWR0bHNfcGtjczEyX3BiZV9zaGExX3JjNF8xMjgoIG1iZWR0bHNfYXNuMV9idWYgKnBiZV9wYXJhbXMsIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsICBzaXplX3QgcHdkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworI2lmICFkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorICAgICgodm9pZCkgcGJlX3BhcmFtcyk7CisgICAgKCh2b2lkKSBtb2RlKTsKKyAgICAoKHZvaWQpIHB3ZCk7CisgICAgKCh2b2lkKSBwd2RsZW4pOworICAgICgodm9pZCkgZGF0YSk7CisgICAgKCh2b2lkKSBsZW4pOworICAgICgodm9pZCkgb3V0cHV0KTsKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1MxMl9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisjZWxzZQorICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOworICAgIG1iZWR0bHNfYXJjNF9jb250ZXh0IGN0eDsKKyAgICAoKHZvaWQpIG1vZGUpOworCisgICAgbWJlZHRsc19hcmM0X2luaXQoICZjdHggKTsKKworICAgIGlmKCAoIHJldCA9IHBrY3MxMl9wYmVfZGVyaXZlX2tleV9pdiggcGJlX3BhcmFtcywgTUJFRFRMU19NRF9TSEExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdkLCBwd2RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIDE2LCBOVUxMLCAwICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgbWJlZHRsc19hcmM0X3NldHVwKCAmY3R4LCBrZXksIDE2ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hcmM0X2NyeXB0KCAmY3R4LCBsZW4sIGRhdGEsIG91dHB1dCApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworZXhpdDoKKyAgICBtYmVkdGxzX3plcm9pemUoIGtleSwgc2l6ZW9mKCBrZXkgKSApOworICAgIG1iZWR0bHNfYXJjNF9mcmVlKCAmY3R4ICk7CisKKyAgICByZXR1cm4oIHJldCApOworI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCit9CisKK2ludCBtYmVkdGxzX3BrY3MxMl9wYmUoIG1iZWR0bHNfYXNuMV9idWYgKnBiZV9wYXJhbXMsIGludCBtb2RlLAorICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCBjaXBoZXJfdHlwZSwgbWJlZHRsc19tZF90eXBlX3QgbWRfdHlwZSwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsICBzaXplX3QgcHdkbGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgcmV0LCBrZXlsZW4gPSAwOworICAgIHVuc2lnbmVkIGNoYXIga2V5WzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XTsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjaXBoZXJfY3R4OworICAgIHNpemVfdCBvbGVuID0gMDsKKworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcl90eXBlICk7CisgICAgaWYoIGNpcGhlcl9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1MxMl9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICBrZXlsZW4gPSBjaXBoZXJfaW5mby0+a2V5X2JpdGxlbiAvIDg7CisKKyAgICBpZiggKCByZXQgPSBwa2NzMTJfcGJlX2Rlcml2ZV9rZXlfaXYoIHBiZV9wYXJhbXMsIG1kX3R5cGUsIHB3ZCwgcHdkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgY2lwaGVyX2luZm8tPml2X3NpemUgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY2lwaGVyX2N0eCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjaXBoZXJfY3R4LCBjaXBoZXJfaW5mbyApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmNpcGhlcl9jdHgsIGtleSwgOCAqIGtleWxlbiwgKG1iZWR0bHNfb3BlcmF0aW9uX3QpIG1vZGUgKSApICE9IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoICZjaXBoZXJfY3R4LCBpdiwgY2lwaGVyX2luZm8tPml2X3NpemUgKSApICE9IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9yZXNldCggJmNpcGhlcl9jdHggKSApICE9IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjaXBoZXJfY3R4LCBkYXRhLCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm9sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggJmNpcGhlcl9jdHgsIG91dHB1dCArIG9sZW4sICZvbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfUEtDUzEyX1BBU1NXT1JEX01JU01BVENIOworCitleGl0OgorICAgIG1iZWR0bHNfemVyb2l6ZSgga2V5LCBzaXplb2YoIGtleSApICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBpdiwgIHNpemVvZiggaXYgICkgKTsKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY2lwaGVyX2N0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworc3RhdGljIHZvaWQgcGtjczEyX2ZpbGxfYnVmZmVyKCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGxlciwgc2l6ZV90IGZpbGxfbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gZGF0YTsKKyAgICBzaXplX3QgdXNlX2xlbjsKKworICAgIHdoaWxlKCBkYXRhX2xlbiA+IDAgKQorICAgIHsKKyAgICAgICAgdXNlX2xlbiA9ICggZGF0YV9sZW4gPiBmaWxsX2xlbiApID8gZmlsbF9sZW4gOiBkYXRhX2xlbjsKKyAgICAgICAgbWVtY3B5KCBwLCBmaWxsZXIsIHVzZV9sZW4gKTsKKyAgICAgICAgcCArPSB1c2VfbGVuOworICAgICAgICBkYXRhX2xlbiAtPSB1c2VfbGVuOworICAgIH0KK30KKworaW50IG1iZWR0bHNfcGtjczEyX2Rlcml2YXRpb24oIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsIHNpemVfdCBwd2RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIHNpemVfdCBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF90eXBlLCBpbnQgaWQsIGludCBpdGVyYXRpb25zICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGludCBqOworCisgICAgdW5zaWduZWQgY2hhciBkaXZlcnNpZmllclsxMjhdOworICAgIHVuc2lnbmVkIGNoYXIgc2FsdF9ibG9ja1sxMjhdLCBwd2RfYmxvY2tbMTI4XSwgaGFzaF9ibG9ja1sxMjhdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9vdXRwdXRbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICB1bnNpZ25lZCBjaGFyIGM7CisKKyAgICBzaXplX3QgaGxlbiwgdXNlX2xlbiwgdiwgaTsKKworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IG1kX2N0eDsKKworICAgIC8vIFRoaXMgdmVyc2lvbiBvbmx5IGFsbG93cyBtYXggb2YgNjQgYnl0ZXMgb2YgcGFzc3dvcmQgb3Igc2FsdAorICAgIGlmKCBkYXRhbGVuID4gMTI4IHx8IHB3ZGxlbiA+IDY0IHx8IHNhbHRsZW4gPiA2NCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzEyX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfdHlwZSApOworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1MxMl9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZtZF9jdHggKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZtZF9jdHgsIG1kX2luZm8sIDAgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworICAgIGhsZW4gPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7CisKKyAgICBpZiggaGxlbiA8PSAzMiApCisgICAgICAgIHYgPSA2NDsKKyAgICBlbHNlCisgICAgICAgIHYgPSAxMjg7CisKKyAgICBtZW1zZXQoIGRpdmVyc2lmaWVyLCAodW5zaWduZWQgY2hhcikgaWQsIHYgKTsKKworICAgIHBrY3MxMl9maWxsX2J1ZmZlciggc2FsdF9ibG9jaywgdiwgc2FsdCwgc2FsdGxlbiApOworICAgIHBrY3MxMl9maWxsX2J1ZmZlciggcHdkX2Jsb2NrLCAgdiwgcHdkLCAgcHdkbGVuICApOworCisgICAgcCA9IGRhdGE7CisgICAgd2hpbGUoIGRhdGFsZW4gPiAwICkKKyAgICB7CisgICAgICAgIC8vIENhbGN1bGF0ZSBoYXNoKCBkaXZlcnNpZmllciB8fCBzYWx0X2Jsb2NrIHx8IHB3ZF9ibG9jayApCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfc3RhcnRzKCAmbWRfY3R4ICkgKSAhPSAwICkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX3VwZGF0ZSggJm1kX2N0eCwgZGl2ZXJzaWZpZXIsIHYgKSApICE9IDAgKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCBzYWx0X2Jsb2NrLCB2ICkgKSAhPSAwICkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX3VwZGF0ZSggJm1kX2N0eCwgcHdkX2Jsb2NrLCB2ICkgKSAhPSAwICkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX2ZpbmlzaCggJm1kX2N0eCwgaGFzaF9vdXRwdXQgKSApICE9IDAgKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIC8vIFBlcmZvcm0gcmVtYWluaW5nICggaXRlcmF0aW9ucyAtIDEgKSByZWN1cnNpdmUgaGFzaCBjYWxjdWxhdGlvbnMKKyAgICAgICAgZm9yKCBpID0gMTsgaSA8IChzaXplX3QpIGl0ZXJhdGlvbnM7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWQoIG1kX2luZm8sIGhhc2hfb3V0cHV0LCBobGVuLCBoYXNoX291dHB1dCApICkgIT0gMCApCisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgdXNlX2xlbiA9ICggZGF0YWxlbiA+IGhsZW4gKSA/IGhsZW4gOiBkYXRhbGVuOworICAgICAgICBtZW1jcHkoIHAsIGhhc2hfb3V0cHV0LCB1c2VfbGVuICk7CisgICAgICAgIGRhdGFsZW4gLT0gdXNlX2xlbjsKKyAgICAgICAgcCArPSB1c2VfbGVuOworCisgICAgICAgIGlmKCBkYXRhbGVuID09IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gQ29uY2F0ZW5hdGluZyBjb3BpZXMgb2YgaGFzaF9vdXRwdXQgaW50byBoYXNoX2Jsb2NrIChCKQorICAgICAgICBwa2NzMTJfZmlsbF9idWZmZXIoIGhhc2hfYmxvY2ssIHYsIGhhc2hfb3V0cHV0LCBobGVuICk7CisKKyAgICAgICAgLy8gQiArPSAxCisgICAgICAgIGZvciggaSA9IHY7IGkgPiAwOyBpLS0gKQorICAgICAgICAgICAgaWYoICsraGFzaF9ibG9ja1tpIC0gMV0gIT0gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gc2FsdF9ibG9jayArPSBCCisgICAgICAgIGMgPSAwOworICAgICAgICBmb3IoIGkgPSB2OyBpID4gMDsgaS0tICkKKyAgICAgICAgeworICAgICAgICAgICAgaiA9IHNhbHRfYmxvY2tbaSAtIDFdICsgaGFzaF9ibG9ja1tpIC0gMV0gKyBjOworICAgICAgICAgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSAoaiA+PiA4KTsKKyAgICAgICAgICAgIHNhbHRfYmxvY2tbaSAtIDFdID0gaiAmIDB4RkY7CisgICAgICAgIH0KKworICAgICAgICAvLyBwd2RfYmxvY2sgICs9IEIKKyAgICAgICAgYyA9IDA7CisgICAgICAgIGZvciggaSA9IHY7IGkgPiAwOyBpLS0gKQorICAgICAgICB7CisgICAgICAgICAgICBqID0gcHdkX2Jsb2NrW2kgLSAxXSArIGhhc2hfYmxvY2tbaSAtIDFdICsgYzsKKyAgICAgICAgICAgIGMgPSAodW5zaWduZWQgY2hhcikgKGogPj4gOCk7CisgICAgICAgICAgICBwd2RfYmxvY2tbaSAtIDFdID0gaiAmIDB4RkY7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXQgPSAwOworCitleGl0OgorICAgIG1iZWR0bHNfemVyb2l6ZSggc2FsdF9ibG9jaywgc2l6ZW9mKCBzYWx0X2Jsb2NrICkgKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIHB3ZF9ibG9jaywgc2l6ZW9mKCBwd2RfYmxvY2sgKSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggaGFzaF9ibG9jaywgc2l6ZW9mKCBoYXNoX2Jsb2NrICkgKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIGhhc2hfb3V0cHV0LCBzaXplb2YoIGhhc2hfb3V0cHV0ICkgKTsKKworICAgIG1iZWR0bHNfbWRfZnJlZSggJm1kX2N0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfUEtDUzEyX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrY3M1LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa2NzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOGQ1YTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa2NzNS5jCkBAIC0wLDAgKzEsNDA2IEBACisvKioKKyAqIFxmaWxlIHBrY3M1LmMKKyAqCisgKiBcYnJpZWYgUEtDUyM1IGZ1bmN0aW9ucworICoKKyAqIFxhdXRob3IgTWF0aGlhcyBPbHNzb24gPG1hdGhpYXNAa29tcGV0ZW5zdW0uY29tPgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqIFBLQ1MjNSBpbmNsdWRlcyBQQktERjIgYW5kIG1vcmUKKyAqCisgKiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODk4IChTcGVjaWZpY2F0aW9uKQorICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjA3MCAoVGVzdCB2ZWN0b3JzKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzVfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvcGtjczUuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2FzbjEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NpcGhlci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYKKworc3RhdGljIGludCBwa2NzNV9wYXJzZV9wYmtkZjJfcGFyYW1zKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYXNuMV9idWYgKnNhbHQsIGludCAqaXRlcmF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICprZXlsZW4sIG1iZWR0bHNfbWRfdHlwZV90ICptZF90eXBlICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfYXNuMV9idWYgcHJmX2FsZ19vaWQ7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IHBhcmFtcy0+cDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBwYXJhbXMtPnAgKyBwYXJhbXMtPmxlbjsKKworICAgIGlmKCBwYXJhbXMtPnRhZyAhPSAoIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApOworICAgIC8qCisgICAgICogIFBCS0RGMi1wYXJhbXMgOjo9IFNFUVVFTkNFIHsKKyAgICAgKiAgICBzYWx0ICAgICAgICAgICAgICBPQ1RFVCBTVFJJTkcsCisgICAgICogICAgaXRlcmF0aW9uQ291bnQgICAgSU5URUdFUiwKKyAgICAgKiAgICBrZXlMZW5ndGggICAgICAgICBJTlRFR0VSIE9QVElPTkFMCisgICAgICogICAgcHJmICAgICAgICAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllciBERUZBVUxUIGFsZ2lkLWhtYWNXaXRoU0hBMQorICAgICAqICB9CisgICAgICoKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJnNhbHQtPmxlbiwgTUJFRFRMU19BU04xX09DVEVUX1NUUklORyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgIHNhbHQtPnAgPSBwOworICAgIHAgKz0gc2FsdC0+bGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9pbnQoICZwLCBlbmQsIGl0ZXJhdGlvbnMgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICBpZiggcCA9PSBlbmQgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfaW50KCAmcCwgZW5kLCBrZXlsZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBpZiggcCA9PSBlbmQgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfYWxnX251bGwoICZwLCBlbmQsICZwcmZfYWxnX29pZCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgIGlmKCBNQkVEVExTX09JRF9DTVAoIE1CRURUTFNfT0lEX0hNQUNfU0hBMSwgJnByZl9hbGdfb2lkICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgKm1kX3R5cGUgPSBNQkVEVExTX01EX1NIQTE7CisKKyAgICBpZiggcCAhPSBlbmQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3BrY3M1X3BiZXMyKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpwYmVfcGFyYW1zLCBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHdkLCAgc2l6ZV90IHB3ZGxlbiwKKyAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IHJldCwgaXRlcmF0aW9ucyA9IDAsIGtleWxlbiA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqcCwgKmVuZDsKKyAgICBtYmVkdGxzX2FzbjFfYnVmIGtkZl9hbGdfb2lkLCBlbmNfc2NoZW1lX29pZCwga2RmX2FsZ19wYXJhbXMsIGVuY19zY2hlbWVfcGFyYW1zOworICAgIG1iZWR0bHNfYXNuMV9idWYgc2FsdDsKKyAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF90eXBlID0gTUJFRFRMU19NRF9TSEExOworICAgIHVuc2lnbmVkIGNoYXIga2V5WzMyXSwgaXZbMzJdOworICAgIHNpemVfdCBvbGVuID0gMDsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IG1kX2N0eDsKKyAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgY2lwaGVyX2FsZzsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY2lwaGVyX2N0eDsKKworICAgIHAgPSBwYmVfcGFyYW1zLT5wOworICAgIGVuZCA9IHAgKyBwYmVfcGFyYW1zLT5sZW47CisKKyAgICAvKgorICAgICAqICBQQkVTMi1wYXJhbXMgOjo9IFNFUVVFTkNFIHsKKyAgICAgKiAgICBrZXlEZXJpdmF0aW9uRnVuYyBBbGdvcml0aG1JZGVudGlmaWVyIHt7UEJFUzItS0RGc319LAorICAgICAqICAgIGVuY3J5cHRpb25TY2hlbWUgQWxnb3JpdGhtSWRlbnRpZmllciB7e1BCRVMyLUVuY3N9fQorICAgICAqICB9CisgICAgICovCisgICAgaWYoIHBiZV9wYXJhbXMtPnRhZyAhPSAoIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9hbGcoICZwLCBlbmQsICZrZGZfYWxnX29pZCwgJmtkZl9hbGdfcGFyYW1zICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgLy8gT25seSBQQktERjIgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAgICAvLworICAgIGlmKCBNQkVEVExTX09JRF9DTVAoIE1CRURUTFNfT0lEX1BLQ1M1X1BCS0RGMiwgJmtkZl9hbGdfb2lkICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgaWYoICggcmV0ID0gcGtjczVfcGFyc2VfcGJrZGYyX3BhcmFtcyggJmtkZl9hbGdfcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzYWx0LCAmaXRlcmF0aW9ucywgJmtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWRfdHlwZSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF90eXBlICk7CisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9hbGcoICZwLCBlbmQsICZlbmNfc2NoZW1lX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmNfc2NoZW1lX3BhcmFtcyApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgaWYoIG1iZWR0bHNfb2lkX2dldF9jaXBoZXJfYWxnKCAmZW5jX3NjaGVtZV9vaWQsICZjaXBoZXJfYWxnICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyX2FsZyApOworICAgIGlmKCBjaXBoZXJfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTNV9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICAvKgorICAgICAqIFRoZSB2YWx1ZSBvZiBrZXlsZW4gZnJvbSBwa2NzNV9wYXJzZV9wYmtkZjJfcGFyYW1zKCkgaXMgaWdub3JlZAorICAgICAqIHNpbmNlIGl0IGlzIG9wdGlvbmFsIGFuZCB3ZSBkb24ndCBrbm93IGlmIGl0IHdhcyBzZXQgb3Igbm90CisgICAgICovCisgICAga2V5bGVuID0gY2lwaGVyX2luZm8tPmtleV9iaXRsZW4gLyA4OworCisgICAgaWYoIGVuY19zY2hlbWVfcGFyYW1zLnRhZyAhPSBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HIHx8CisgICAgICAgIGVuY19zY2hlbWVfcGFyYW1zLmxlbiAhPSBjaXBoZXJfaW5mby0+aXZfc2l6ZSApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICk7CisgICAgfQorCisgICAgbWJlZHRsc19tZF9pbml0KCAmbWRfY3R4ICk7CisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmNpcGhlcl9jdHggKTsKKworICAgIG1lbWNweSggaXYsIGVuY19zY2hlbWVfcGFyYW1zLnAsIGVuY19zY2hlbWVfcGFyYW1zLmxlbiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJm1kX2N0eCwgbWRfaW5mbywgMSApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtjczVfcGJrZGYyX2htYWMoICZtZF9jdHgsIHB3ZCwgcHdkbGVuLCBzYWx0LnAsIHNhbHQubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRpb25zLCBrZXlsZW4sIGtleSApICkgIT0gMCApCisgICAgeworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjaXBoZXJfY3R4LCBjaXBoZXJfaW5mbyApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmNpcGhlcl9jdHgsIGtleSwgOCAqIGtleWxlbiwgKG1iZWR0bHNfb3BlcmF0aW9uX3QpIG1vZGUgKSApICE9IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9jcnlwdCggJmNpcGhlcl9jdHgsIGl2LCBlbmNfc2NoZW1lX3BhcmFtcy5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCBkYXRhbGVuLCBvdXRwdXQsICZvbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfUEtDUzVfUEFTU1dPUkRfTUlTTUFUQ0g7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmNpcGhlcl9jdHggKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKK2ludCBtYmVkdGxzX3BrY3M1X3Bia2RmMl9obWFjKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIHNpemVfdCBzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXRlcmF0aW9uX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlfbGVuZ3RoLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCByZXQsIGo7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciBtZDFbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgdW5zaWduZWQgY2hhciB3b3JrW01CRURUTFNfTURfTUFYX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgbWRfc2l6ZSA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIGN0eC0+bWRfaW5mbyApOworICAgIHNpemVfdCB1c2VfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKm91dF9wID0gb3V0cHV0OworICAgIHVuc2lnbmVkIGNoYXIgY291bnRlcls0XTsKKworICAgIG1lbXNldCggY291bnRlciwgMCwgNCApOworICAgIGNvdW50ZXJbM10gPSAxOworCisgICAgaWYoIGl0ZXJhdGlvbl9jb3VudCA+IDB4RkZGRkZGRkYgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1M1X0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICB3aGlsZSgga2V5X2xlbmd0aCApCisgICAgeworICAgICAgICAvLyBVMSBlbmRzIHVwIGluIHdvcmsKKyAgICAgICAgLy8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggY3R4LCBwYXNzd29yZCwgcGxlbiApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfaG1hY191cGRhdGUoIGN0eCwgc2FsdCwgc2xlbiApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfaG1hY191cGRhdGUoIGN0eCwgY291bnRlciwgNCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfaG1hY19maW5pc2goIGN0eCwgd29yayApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIG1lbWNweSggbWQxLCB3b3JrLCBtZF9zaXplICk7CisKKyAgICAgICAgZm9yKCBpID0gMTsgaSA8IGl0ZXJhdGlvbl9jb3VudDsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVTIgZW5kcyB1cCBpbiBtZDEKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCBjdHgsIHBhc3N3b3JkLCBwbGVuICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCBjdHgsIG1kMSwgbWRfc2l6ZSApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggY3R4LCBtZDEgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIC8vIFUxIHhvciBVMgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCBtZF9zaXplOyBqKysgKQorICAgICAgICAgICAgICAgIHdvcmtbal0gXj0gbWQxW2pdOworICAgICAgICB9CisKKyAgICAgICAgdXNlX2xlbiA9ICgga2V5X2xlbmd0aCA8IG1kX3NpemUgKSA/IGtleV9sZW5ndGggOiBtZF9zaXplOworICAgICAgICBtZW1jcHkoIG91dF9wLCB3b3JrLCB1c2VfbGVuICk7CisKKyAgICAgICAga2V5X2xlbmd0aCAtPSAodWludDMyX3QpIHVzZV9sZW47CisgICAgICAgIG91dF9wICs9IHVzZV9sZW47CisKKyAgICAgICAgZm9yKCBpID0gNDsgaSA+IDA7IGktLSApCisgICAgICAgICAgICBpZiggKytjb3VudGVyW2kgLSAxXSAhPSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTFfQykKK2ludCBtYmVkdGxzX3BrY3M1X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgUEJLREYyIChTSEExKTogc2tpcHBlZFxuXG4iICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNkZWZpbmUgTUFYX1RFU1RTICAgNgorCitzdGF0aWMgY29uc3Qgc2l6ZV90IHBsZW5bTUFYX1RFU1RTXSA9CisgICAgeyA4LCA4LCA4LCAyNCwgOSB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYXNzd29yZFtNQVhfVEVTVFNdWzMyXSA9Cit7CisgICAgInBhc3N3b3JkIiwKKyAgICAicGFzc3dvcmQiLAorICAgICJwYXNzd29yZCIsCisgICAgInBhc3N3b3JkUEFTU1dPUkRwYXNzd29yZCIsCisgICAgInBhc3NcMHdvcmQiLAorfTsKKworc3RhdGljIGNvbnN0IHNpemVfdCBzbGVuW01BWF9URVNUU10gPQorICAgIHsgNCwgNCwgNCwgMzYsIDUgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FsdFtNQVhfVEVTVFNdWzQwXSA9Cit7CisgICAgInNhbHQiLAorICAgICJzYWx0IiwKKyAgICAic2FsdCIsCisgICAgInNhbHRTQUxUc2FsdFNBTFRzYWx0U0FMVHNhbHRTQUxUc2FsdCIsCisgICAgInNhXDBsdCIsCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3QgaXRfY250W01BWF9URVNUU10gPQorICAgIHsgMSwgMiwgNDA5NiwgNDA5NiwgNDA5NiB9OworCitzdGF0aWMgY29uc3QgdWludDMyX3Qga2V5X2xlbltNQVhfVEVTVFNdID0KKyAgICB7IDIwLCAyMCwgMjAsIDI1LCAxNiB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXN1bHRfa2V5W01BWF9URVNUU11bMzJdID0KK3sKKyAgICB7IDB4MGMsIDB4NjAsIDB4YzgsIDB4MGYsIDB4OTYsIDB4MWYsIDB4MGUsIDB4NzEsCisgICAgICAweGYzLCAweGE5LCAweGI1LCAweDI0LCAweGFmLCAweDYwLCAweDEyLCAweDA2LAorICAgICAgMHgyZiwgMHhlMCwgMHgzNywgMHhhNiB9LAorICAgIHsgMHhlYSwgMHg2YywgMHgwMSwgMHg0ZCwgMHhjNywgMHgyZCwgMHg2ZiwgMHg4YywKKyAgICAgIDB4Y2QsIDB4MWUsIDB4ZDksIDB4MmEsIDB4Y2UsIDB4MWQsIDB4NDEsIDB4ZjAsCisgICAgICAweGQ4LCAweGRlLCAweDg5LCAweDU3IH0sCisgICAgeyAweDRiLCAweDAwLCAweDc5LCAweDAxLCAweGI3LCAweDY1LCAweDQ4LCAweDlhLAorICAgICAgMHhiZSwgMHhhZCwgMHg0OSwgMHhkOSwgMHgyNiwgMHhmNywgMHgyMSwgMHhkMCwKKyAgICAgIDB4NjUsIDB4YTQsIDB4MjksIDB4YzEgfSwKKyAgICB7IDB4M2QsIDB4MmUsIDB4ZWMsIDB4NGYsIDB4ZTQsIDB4MWMsIDB4ODQsIDB4OWIsCisgICAgICAweDgwLCAweGM4LCAweGQ4LCAweDM2LCAweDYyLCAweGMwLCAweGU0LCAweDRhLAorICAgICAgMHg4YiwgMHgyOSwgMHgxYSwgMHg5NiwgMHg0YywgMHhmMiwgMHhmMCwgMHg3MCwKKyAgICAgIDB4MzggfSwKKyAgICB7IDB4NTYsIDB4ZmEsIDB4NmEsIDB4YTcsIDB4NTUsIDB4NDgsIDB4MDksIDB4OWQsCisgICAgICAweGNjLCAweDM3LCAweGQ3LCAweGYwLCAweDM0LCAweDI1LCAweGUwLCAweGMzIH0sCit9OworCitpbnQgbWJlZHRsc19wa2NzNV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBzaGExX2N0eDsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqaW5mb19zaGExOworICAgIGludCByZXQsIGk7CisgICAgdW5zaWduZWQgY2hhciBrZXlbNjRdOworCisgICAgbWJlZHRsc19tZF9pbml0KCAmc2hhMV9jdHggKTsKKworICAgIGluZm9fc2hhMSA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMSApOworICAgIGlmKCBpbmZvX3NoYTEgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJnNoYTFfY3R4LCBpbmZvX3NoYTEsIDEgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGZvciggaSA9IDA7IGkgPCBNQVhfVEVTVFM7IGkrKyApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQQktERjIgKFNIQTEpICMlZDogIiwgaSApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGtjczVfcGJrZGYyX2htYWMoICZzaGExX2N0eCwgcGFzc3dvcmRbaV0sIHBsZW5baV0sIHNhbHRbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlbltpXSwgaXRfY250W2ldLCBrZXlfbGVuW2ldLCBrZXkgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwIHx8CisgICAgICAgICAgICBtZW1jbXAoIHJlc3VsdF9rZXlbaV0sIGtleSwga2V5X2xlbltpXSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCitleGl0OgorICAgIG1iZWR0bHNfbWRfZnJlZSggJnNoYTFfY3R4ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19QS0NTNV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa3BhcnNlLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa3BhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc1NDI5ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrcGFyc2UuYwpAQCAtMCwwICsxLDEyOTMgQEAKKy8qCisgKiAgUHVibGljIEtleSBsYXllciBmb3IgcGFyc2luZyBrZXkgZmlsZXMgYW5kIHN0cnVjdHVyZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9way5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYXNuMS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorI2luY2x1ZGUgIm1iZWR0bHMvZWNwLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyNpbmNsdWRlICJtYmVkdGxzL2VjZHNhLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisjaW5jbHVkZSAibWJlZHRscy9wZW0uaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTNV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGtjczUuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMTJfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BrY3MxMi5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIExvYWQgYWxsIGRhdGEgZnJvbSBhIGZpbGUgaW50byBhIGdpdmVuIGJ1ZmZlci4KKyAqCisgKiBUaGUgZmlsZSBpcyBleHBlY3RlZCB0byBjb250YWluIGVpdGhlciBQRU0gb3IgREVSIGVuY29kZWQgZGF0YS4KKyAqIEEgdGVybWluYXRpbmcgbnVsbCBieXRlIGlzIGFsd2F5cyBhcHBlbmRlZC4gSXQgaXMgaW5jbHVkZWQgaW4gdGhlIGFubm91bmNlZAorICogbGVuZ3RoIG9ubHkgaWYgdGhlIGRhdGEgbG9va3MgbGlrZSBpdCBpcyBQRU0gZW5jb2RlZC4KKyAqLworaW50IG1iZWR0bHNfcGtfbG9hZF9maWxlKCBjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICoqYnVmLCBzaXplX3QgKm4gKQoreworICAgIEZJTEUgKmY7CisgICAgbG9uZyBzaXplOworCisgICAgaWYoICggZiA9IGZvcGVuKCBwYXRoLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19GSUxFX0lPX0VSUk9SICk7CisKKyAgICBmc2VlayggZiwgMCwgU0VFS19FTkQgKTsKKyAgICBpZiggKCBzaXplID0gZnRlbGwoIGYgKSApID09IC0xICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0ZJTEVfSU9fRVJST1IgKTsKKyAgICB9CisgICAgZnNlZWsoIGYsIDAsIFNFRUtfU0VUICk7CisKKyAgICAqbiA9IChzaXplX3QpIHNpemU7CisKKyAgICBpZiggKm4gKyAxID09IDAgfHwKKyAgICAgICAgKCAqYnVmID0gbWJlZHRsc19jYWxsb2MoIDEsICpuICsgMSApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19BTExPQ19GQUlMRUQgKTsKKyAgICB9CisKKyAgICBpZiggZnJlYWQoICpidWYsIDEsICpuLCBmICkgIT0gKm4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggKmJ1ZiApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0ZJTEVfSU9fRVJST1IgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgICgqYnVmKVsqbl0gPSAnXDAnOworCisgICAgaWYoIHN0cnN0ciggKGNvbnN0IGNoYXIgKikgKmJ1ZiwgIi0tLS0tQkVHSU4gIiApICE9IE5VTEwgKQorICAgICAgICArKypuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBMb2FkIGFuZCBwYXJzZSBhIHByaXZhdGUga2V5CisgKi8KK2ludCBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnB3ZCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbjsKKyAgICB1bnNpZ25lZCBjaGFyICpidWY7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX2xvYWRfZmlsZSggcGF0aCwgJmJ1ZiwgJm4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoIHB3ZCA9PSBOVUxMICkKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXkoIGN0eCwgYnVmLCBuLCBOVUxMLCAwICk7CisgICAgZWxzZQorICAgICAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleSggY3R4LCBidWYsIG4sCisgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcHdkLCBzdHJsZW4oIHB3ZCApICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGJ1ZiwgbiApOworICAgIG1iZWR0bHNfZnJlZSggYnVmICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogTG9hZCBhbmQgcGFyc2UgYSBwdWJsaWMga2V5CisgKi8KK2ludCBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlKCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbjsKKyAgICB1bnNpZ25lZCBjaGFyICpidWY7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX2xvYWRfZmlsZSggcGF0aCwgJmJ1ZiwgJm4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5KCBjdHgsIGJ1ZiwgbiApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBidWYsIG4gKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGJ1ZiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisvKiBNaW5pbWFsbHkgcGFyc2UgYW4gRUNQYXJhbWV0ZXJzIGJ1ZmZlciB0byBhbmQgbWJlZHRsc19hc24xX2J1ZgorICoKKyAqIEVDUGFyYW1ldGVycyA6Oj0gQ0hPSUNFIHsKKyAqICAgbmFtZWRDdXJ2ZSAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSCisgKiAgIHNwZWNpZmllZEN1cnZlICAgICBTcGVjaWZpZWRFQ0RvbWFpbiAtLSA9IFNFUVVFTkNFIHsgLi4uIH0KKyAqICAgLS0gaW1wbGljaXRDdXJ2ZSAgIE5VTEwKKyAqIH0KKyAqLworc3RhdGljIGludCBwa19nZXRfZWNwYXJhbXMoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX2J1ZiAqcGFyYW1zICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgLyogVGFnIG1heSBiZSBlaXRoZXIgT0lEIG9yIFNFUVVFTkNFICovCisgICAgcGFyYW1zLT50YWcgPSAqKnA7CisgICAgaWYoIHBhcmFtcy0+dGFnICE9IE1CRURUTFNfQVNOMV9PSUQKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQpCisgICAgICAgICAgICAmJiBwYXJhbXMtPnRhZyAhPSAoIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApCisjZW5kaWYKKyAgICAgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJnBhcmFtcy0+bGVuLCBwYXJhbXMtPnRhZyApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIHBhcmFtcy0+cCA9ICpwOworICAgICpwICs9IHBhcmFtcy0+bGVuOworCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQpCisvKgorICogUGFyc2UgYSBTcGVjaWZpZWRFQ0RvbWFpbiAoU0VDIDEgQy4yKSBhbmQgKG1vc3RseSkgZmlsbCB0aGUgZ3JvdXAgd2l0aCBpdC4KKyAqIFdBUk5JTkc6IHRoZSByZXN1bHRpbmcgZ3JvdXAgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoCisgKiBwa19ncm91cF9pZF9mcm9tX3NwZWNpZmllZCgpLCBzaW5jZSBpdHMgYmFzZSBwb2ludCBtYXkgbm90IGJlIHNldCBjb3JyZWN0bHkKKyAqIGlmIGl0IHdhcyBlbmNvZGVkIGNvbXByZXNzZWQuCisgKgorICogIFNwZWNpZmllZEVDRG9tYWluIDo6PSBTRVFVRU5DRSB7CisgKiAgICAgIHZlcnNpb24gU3BlY2lmaWVkRUNEb21haW5WZXJzaW9uKGVjZHBWZXIxIHwgZWNkcFZlcjIgfCBlY2RwVmVyMywgLi4uKSwKKyAqICAgICAgZmllbGRJRCBGaWVsZElEIHt7RmllbGRUeXBlc319LAorICogICAgICBjdXJ2ZSBDdXJ2ZSwKKyAqICAgICAgYmFzZSBFQ1BvaW50LAorICogICAgICBvcmRlciBJTlRFR0VSLAorICogICAgICBjb2ZhY3RvciBJTlRFR0VSIE9QVElPTkFMLAorICogICAgICBoYXNoIEhhc2hBbGdvcml0aG0gT1BUSU9OQUwsCisgKiAgICAgIC4uLgorICogIH0KKyAqCisgKiBXZSBvbmx5IHN1cHBvcnQgcHJpbWUtZmllbGQgYXMgZmllbGQgdHlwZSwgYW5kIGlnbm9yZSBoYXNoIGFuZCBjb2ZhY3Rvci4KKyAqLworc3RhdGljIGludCBwa19ncm91cF9mcm9tX3NwZWNpZmllZCggY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqcGFyYW1zLCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBwYXJhbXMtPnA7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGNvbnN0IGVuZCA9IHBhcmFtcy0+cCArIHBhcmFtcy0+bGVuOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZF9maWVsZCwgKmVuZF9jdXJ2ZTsKKyAgICBzaXplX3QgbGVuOworICAgIGludCB2ZXI7CisKKyAgICAvKiBTcGVjaWZpZWRFQ0RvbWFpblZlcnNpb24gOjo9IElOVEVHRVIgeyAxLCAyLCAzIH0gKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2ludCggJnAsIGVuZCwgJnZlciApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICBpZiggdmVyIDwgMSB8fCB2ZXIgPiAzICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKTsKKworICAgIC8qCisgICAgICogRmllbGRJRCB7IEZJRUxELUlEOklPU2V0IH0gOjo9IFNFUVVFTkNFIHsgLS0gRmluaXRlIGZpZWxkCisgICAgICogICAgICAgZmllbGRUeXBlIEZJRUxELUlELiZpZCh7SU9TZXR9KSwKKyAgICAgKiAgICAgICBwYXJhbWV0ZXJzIEZJRUxELUlELiZUeXBlKHtJT1NldH17QGZpZWxkVHlwZX0pCisgICAgICogfQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGVuZF9maWVsZCA9IHAgKyBsZW47CisKKyAgICAvKgorICAgICAqIEZJRUxELUlEIDo6PSBUWVBFLUlERU5USUZJRVIKKyAgICAgKiBGaWVsZFR5cGVzIEZJRUxELUlEIDo6PSB7CisgICAgICogICAgICAgeyBQcmltZS1wIElERU5USUZJRUQgQlkgcHJpbWUtZmllbGQgfSB8CisgICAgICogICAgICAgeyBDaGFyYWN0ZXJpc3RpYy10d28gSURFTlRJRklFRCBCWSBjaGFyYWN0ZXJpc3RpYy10d28tZmllbGQgfQorICAgICAqIH0KKyAgICAgKiBwcmltZS1maWVsZCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpZC1maWVsZFR5cGUgMSB9CisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmRfZmllbGQsICZsZW4sIE1CRURUTFNfQVNOMV9PSUQgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoIGxlbiAhPSBNQkVEVExTX09JRF9TSVpFKCBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1BSSU1FX0ZJRUxEICkgfHwKKyAgICAgICAgbWVtY21wKCBwLCBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1BSSU1FX0ZJRUxELCBsZW4gKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworICAgIH0KKworICAgIHAgKz0gbGVuOworCisgICAgLyogUHJpbWUtcCA6Oj0gSU5URUdFUiAtLSBGaWVsZCBvZiBzaXplIHAuICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmRfZmllbGQsICZncnAtPlAgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgZ3JwLT5wYml0cyA9IG1iZWR0bHNfbXBpX2JpdGxlbiggJmdycC0+UCApOworCisgICAgaWYoIHAgIT0gZW5kX2ZpZWxkICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICAvKgorICAgICAqIEN1cnZlIDo6PSBTRVFVRU5DRSB7CisgICAgICogICAgICAgYSBGaWVsZEVsZW1lbnQsCisgICAgICogICAgICAgYiBGaWVsZEVsZW1lbnQsCisgICAgICogICAgICAgc2VlZCBCSVQgU1RSSU5HIE9QVElPTkFMCisgICAgICogICAgICAgLS0gU2hhbGwgYmUgcHJlc2VudCBpZiB1c2VkIGluIFNwZWNpZmllZEVDRG9tYWluCisgICAgICogICAgICAgLS0gd2l0aCB2ZXJzaW9uIGVxdWFsIHRvIGVjZHBWZXIyIG9yIGVjZHBWZXIzCisgICAgICogfQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGVuZF9jdXJ2ZSA9IHAgKyBsZW47CisKKyAgICAvKgorICAgICAqIEZpZWxkRWxlbWVudCA6Oj0gT0NURVQgU1RSSU5HCisgICAgICogY29udGFpbmluZyBhbiBpbnRlZ2VyIGluIHRoZSBjYXNlIG9mIGEgcHJpbWUgZmllbGQKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZF9jdXJ2ZSwgJmxlbiwgTUJFRFRMU19BU04xX09DVEVUX1NUUklORyApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmZ3JwLT5BLCBwLCBsZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBwICs9IGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kX2N1cnZlLCAmbGVuLCBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoICZncnAtPkIsIHAsIGxlbiApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIHAgKz0gbGVuOworCisgICAgLyogSWdub3JlIHNlZWQgQklUIFNUUklORyBPUFRJT05BTCAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kX2N1cnZlLCAmbGVuLCBNQkVEVExTX0FTTjFfQklUX1NUUklORyApICkgPT0gMCApCisgICAgICAgIHAgKz0gbGVuOworCisgICAgaWYoIHAgIT0gZW5kX2N1cnZlICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICAvKgorICAgICAqIEVDUG9pbnQgOjo9IE9DVEVUIFNUUklORworICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLCBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfYmluYXJ5KCBncnAsICZncnAtPkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggY29uc3QgdW5zaWduZWQgY2hhciAqKSBwLCBsZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgd2UgY2FuJ3QgcmVhZCB0aGUgcG9pbnQgYmVjYXVzZSBpdCdzIGNvbXByZXNzZWQsIGNoZWF0IGJ5CisgICAgICAgICAqIHJlYWRpbmcgb25seSB0aGUgWCBjb29yZGluYXRlIGFuZCB0aGUgcGFyaXR5IGJpdCBvZiBZLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRSB8fAorICAgICAgICAgICAgKCBwWzBdICE9IDB4MDIgJiYgcFswXSAhPSAweDAzICkgfHwKKyAgICAgICAgICAgIGxlbiAhPSBtYmVkdGxzX21waV9zaXplKCAmZ3JwLT5QICkgKyAxIHx8CisgICAgICAgICAgICBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJmdycC0+Ry5YLCBwICsgMSwgbGVuIC0gMSApICE9IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX2xzZXQoICZncnAtPkcuWSwgcFswXSAtIDIgKSAhPSAwIHx8CisgICAgICAgICAgICBtYmVkdGxzX21waV9sc2V0KCAmZ3JwLT5HLlosIDEgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHAgKz0gbGVuOworCisgICAgLyoKKyAgICAgKiBvcmRlciBJTlRFR0VSCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZncnAtPk4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgZ3JwLT5uYml0cyA9IG1iZWR0bHNfbXBpX2JpdGxlbiggJmdycC0+TiApOworCisgICAgLyoKKyAgICAgKiBBbGxvdyBvcHRpb25hbCBlbGVtZW50cyBieSBwdXJwb3NlZnVsbHkgbm90IGVuZm9yY2luZyBwID09IGVuZCBoZXJlLgorICAgICAqLworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBncm91cCBpZCBhc3NvY2lhdGVkIHdpdGggYW4gKGFsbW9zdCBmaWxsZWQpIGdyb3VwIGFzIGdlbmVyYXRlZCBieQorICogcGtfZ3JvdXBfZnJvbV9zcGVjaWZpZWQoKSwgb3IgcmV0dXJuIGFuIGVycm9yIGlmIHVua25vd24uCisgKi8KK3N0YXRpYyBpbnQgcGtfZ3JvdXBfaWRfZnJvbV9ncm91cCggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKmdycF9pZCApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgcmVmOworICAgIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwX2lkICppZDsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZyZWYgKTsKKworICAgIGZvciggaWQgPSBtYmVkdGxzX2VjcF9ncnBfaWRfbGlzdCgpOyAqaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsgaWQrKyApCisgICAgeworICAgICAgICAvKiBMb2FkIHRoZSBncm91cCBhc3NvY2lhdGVkIHRvIHRoYXQgaWQgKi8KKyAgICAgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJnJlZiApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZyZWYsICppZCApICk7CisKKyAgICAgICAgLyogQ29tcGFyZSB0byB0aGUgZ3JvdXAgd2Ugd2VyZSBnaXZlbiwgc3RhcnRpbmcgd2l0aCBlYXN5IHRlc3RzICovCisgICAgICAgIGlmKCBncnAtPnBiaXRzID09IHJlZi5wYml0cyAmJiBncnAtPm5iaXRzID09IHJlZi5uYml0cyAmJgorICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJmdycC0+UCwgJnJlZi5QICkgPT0gMCAmJgorICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJmdycC0+QSwgJnJlZi5BICkgPT0gMCAmJgorICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJmdycC0+QiwgJnJlZi5CICkgPT0gMCAmJgorICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJmdycC0+TiwgJnJlZi5OICkgPT0gMCAmJgorICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJmdycC0+Ry5YLCAmcmVmLkcuWCApID09IDAgJiYKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZncnAtPkcuWiwgJnJlZi5HLlogKSA9PSAwICYmCisgICAgICAgICAgICAvKiBGb3IgWSB3ZSBtYXkgb25seSBrbm93IHRoZSBwYXJpdHkgYml0LCBzbyBjb21wYXJlIG9ubHkgdGhhdCAqLworICAgICAgICAgICAgbWJlZHRsc19tcGlfZ2V0X2JpdCggJmdycC0+Ry5ZLCAwICkgPT0gbWJlZHRsc19tcGlfZ2V0X2JpdCggJnJlZi5HLlksIDAgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJnJlZiApOworCisgICAgKmdycF9pZCA9ICppZDsKKworICAgIGlmKCByZXQgPT0gMCAmJiAqaWQgPT0gTUJFRFRMU19FQ1BfRFBfTk9ORSApCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFBhcnNlIGEgU3BlY2lmaWVkRUNEb21haW4gKFNFQyAxIEMuMikgYW5kIGZpbmQgdGhlIGFzc29jaWF0ZWQgZ3JvdXAgSUQKKyAqLworc3RhdGljIGludCBwa19ncm91cF9pZF9mcm9tX3NwZWNpZmllZCggY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKmdycF9pZCApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisKKyAgICBpZiggKCByZXQgPSBwa19ncm91cF9mcm9tX3NwZWNpZmllZCggcGFyYW1zLCAmZ3JwICkgKSAhPSAwICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgcmV0ID0gcGtfZ3JvdXBfaWRfZnJvbV9ncm91cCggJmdycCwgZ3JwX2lkICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVEICovCisKKy8qCisgKiBVc2UgRUMgcGFyYW1ldGVycyB0byBpbml0aWFsaXNlIGFuIEVDIGdyb3VwCisgKgorICogRUNQYXJhbWV0ZXJzIDo6PSBDSE9JQ0UgeworICogICBuYW1lZEN1cnZlICAgICAgICAgT0JKRUNUIElERU5USUZJRVIKKyAqICAgc3BlY2lmaWVkQ3VydmUgICAgIFNwZWNpZmllZEVDRG9tYWluIC0tID0gU0VRVUVOQ0UgeyAuLi4gfQorICogICAtLSBpbXBsaWNpdEN1cnZlICAgTlVMTAorICovCitzdGF0aWMgaW50IHBrX3VzZV9lY3BhcmFtcyggY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqcGFyYW1zLCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGdycF9pZDsKKworICAgIGlmKCBwYXJhbXMtPnRhZyA9PSBNQkVEVExTX0FTTjFfT0lEICkKKyAgICB7CisgICAgICAgIGlmKCBtYmVkdGxzX29pZF9nZXRfZWNfZ3JwKCBwYXJhbXMsICZncnBfaWQgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfVU5LTk9XTl9OQU1FRF9DVVJWRSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9FQ19FWFRFTkRFRCkKKyAgICAgICAgaWYoICggcmV0ID0gcGtfZ3JvdXBfaWRfZnJvbV9zcGVjaWZpZWQoIHBhcmFtcywgJmdycF9pZCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworI2Vsc2UKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8qCisgICAgICogZ3JwIG1heSBhbHJlYWR5IGJlIGluaXRpbGlhbGl6ZWQ7IGlmIHNvLCBtYWtlIHN1cmUgSURzIG1hdGNoCisgICAgICovCisgICAgaWYoIGdycC0+aWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORSAmJiBncnAtPmlkICE9IGdycF9pZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCBncnAsIGdycF9pZCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEVDIHB1YmxpYyBrZXkgaXMgYW4gRUMgcG9pbnQKKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyB0aGUgc3RydWN0dXJlIHVwb24gZmFpbHVyZSBpZgorICogZGVzaXJlZC4gVGFrZSBjYXJlIHRvIHBhc3MgYWxvbmcgdGhlIHBvc3NpYmxlIEVDUF9GRUFUVVJFX1VOQVZBSUxBQkxFCisgKiByZXR1cm4gY29kZSBvZiBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX2JpbmFyeSgpIGFuZCBsZWF2ZSBwIGluIGEgdXNhYmxlIHN0YXRlLgorICovCitzdGF0aWMgaW50IHBrX2dldF9lY3B1YmtleSggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyICprZXkgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX2JpbmFyeSggJmtleS0+Z3JwLCAma2V5LT5RLAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSAqcCwgZW5kIC0gKnAgKSApID09IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCAma2V5LT5ncnAsICZrZXktPlEgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdlIGtub3cgbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkgY29uc3VtZWQgYWxsIGJ5dGVzIG9yIGZhaWxlZAorICAgICAqLworICAgICpwID0gKHVuc2lnbmVkIGNoYXIgKikgZW5kOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisvKgorICogIFJTQVB1YmxpY0tleSA6Oj0gU0VRVUVOQ0UgeworICogICAgICBtb2R1bHVzICAgICAgICAgICBJTlRFR0VSLCAgLS0gbgorICogICAgICBwdWJsaWNFeHBvbmVudCAgICBJTlRFR0VSICAgLS0gZQorICogIH0KKyAqLworc3RhdGljIGludCBwa19nZXRfcnNhcHVia2V5KCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2EgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZICsgcmV0ICk7CisKKyAgICBpZiggKnAgKyBsZW4gIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfbXBpKCBwLCBlbmQsICZyc2EtPk4gKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggcCwgZW5kLCAmcnNhLT5FICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSArIHJldCApOworCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfSU5WQUxJRF9QVUJLRVkgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoIHJzYSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfSU5WQUxJRF9QVUJLRVkgKTsKKworICAgIHJzYS0+bGVuID0gbWJlZHRsc19tcGlfc2l6ZSggJnJzYS0+TiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworCisvKiBHZXQgYSBQSyBhbGdvcml0aG0gaWRlbnRpZmllcgorICoKKyAqICBBbGdvcml0aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgKiAgICAgICBhbGdvcml0aG0gICAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKKyAqICAgICAgIHBhcmFtZXRlcnMgICAgICAgICAgICAgIEFOWSBERUZJTkVEIEJZIGFsZ29yaXRobSBPUFRJT05BTCAgfQorICovCitzdGF0aWMgaW50IHBrX2dldF9wa19hbGcoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfdHlwZV90ICpwa19hbGcsIG1iZWR0bHNfYXNuMV9idWYgKnBhcmFtcyApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2FzbjFfYnVmIGFsZ19vaWQ7CisKKyAgICBtZW1zZXQoIHBhcmFtcywgMCwgc2l6ZW9mKG1iZWR0bHNfYXNuMV9idWYpICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2FsZyggcCwgZW5kLCAmYWxnX29pZCwgcGFyYW1zICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19JTlZBTElEX0FMRyArIHJldCApOworCisgICAgaWYoIG1iZWR0bHNfb2lkX2dldF9wa19hbGcoICZhbGdfb2lkLCBwa19hbGcgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19VTktOT1dOX1BLX0FMRyApOworCisgICAgLyoKKyAgICAgKiBObyBwYXJhbWV0ZXJzIHdpdGggUlNBIChvbmx5IGZvciBFQykKKyAgICAgKi8KKyAgICBpZiggKnBrX2FsZyA9PSBNQkVEVExTX1BLX1JTQSAmJgorICAgICAgICAgICAgKCAoIHBhcmFtcy0+dGFnICE9IE1CRURUTFNfQVNOMV9OVUxMICYmIHBhcmFtcy0+dGFnICE9IDAgKSB8fAorICAgICAgICAgICAgICAgIHBhcmFtcy0+bGVuICE9IDAgKSApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0lOVkFMSURfQUxHICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiAgU3ViamVjdFB1YmxpY0tleUluZm8gIDo6PSAgU0VRVUVOQ0UgIHsKKyAqICAgICAgIGFsZ29yaXRobSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgKiAgICAgICBzdWJqZWN0UHVibGljS2V5ICAgICBCSVQgU1RSSU5HIH0KKyAqLworaW50IG1iZWR0bHNfcGtfcGFyc2Vfc3VicHVia2V5KCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19jb250ZXh0ICpwayApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworICAgIG1iZWR0bHNfYXNuMV9idWYgYWxnX3BhcmFtczsKKyAgICBtYmVkdGxzX3BrX3R5cGVfdCBwa19hbGcgPSBNQkVEVExTX1BLX05PTkU7CisgICAgY29uc3QgbWJlZHRsc19wa19pbmZvX3QgKnBrX2luZm87CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBlbmQgPSAqcCArIGxlbjsKKworICAgIGlmKCAoIHJldCA9IHBrX2dldF9wa19hbGcoIHAsIGVuZCwgJnBrX2FsZywgJmFsZ19wYXJhbXMgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9iaXRzdHJpbmdfbnVsbCggcCwgZW5kLCAmbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSArIHJldCApOworCisgICAgaWYoICpwICsgbGVuICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfSU5WQUxJRF9QVUJLRVkgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICBpZiggKCBwa19pbmZvID0gbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggcGtfYWxnICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19VTktOT1dOX1BLX0FMRyApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19zZXR1cCggcGssIHBrX2luZm8gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgIGlmKCBwa19hbGcgPT0gTUJFRFRMU19QS19SU0EgKQorICAgIHsKKyAgICAgICAgcmV0ID0gcGtfZ2V0X3JzYXB1YmtleSggcCwgZW5kLCBtYmVkdGxzX3BrX3JzYSggKnBrICkgKTsKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGlmKCBwa19hbGcgPT0gTUJFRFRMU19QS19FQ0tFWV9ESCB8fCBwa19hbGcgPT0gTUJFRFRMU19QS19FQ0tFWSApCisgICAgeworICAgICAgICByZXQgPSBwa191c2VfZWNwYXJhbXMoICZhbGdfcGFyYW1zLCAmbWJlZHRsc19wa19lYyggKnBrICktPmdycCApOworICAgICAgICBpZiggcmV0ID09IDAgKQorICAgICAgICAgICAgcmV0ID0gcGtfZ2V0X2VjcHVia2V5KCBwLCBlbmQsIG1iZWR0bHNfcGtfZWMoICpwayApICk7CisgICAgfSBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9QS19VTktOT1dOX1BLX0FMRzsKKworICAgIGlmKCByZXQgPT0gMCAmJiAqcCAhPSBlbmQgKQorICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWQorICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSDsKKworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcGtfZnJlZSggcGsgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisvKgorICogUGFyc2UgYSBQS0NTIzEgZW5jb2RlZCBwcml2YXRlIFJTQSBrZXkKKyAqLworc3RhdGljIGludCBwa19wYXJzZV9rZXlfcGtjczFfZGVyKCBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleWxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnAsICplbmQ7CisKKyAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikga2V5OworICAgIGVuZCA9IHAgKyBrZXlsZW47CisKKyAgICAvKgorICAgICAqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBSU0FQcml2YXRlS2V5IChQS0NTIzEpCisgICAgICoKKyAgICAgKiAgUlNBUHJpdmF0ZUtleSA6Oj0gU0VRVUVOQ0UgeworICAgICAqICAgICAgdmVyc2lvbiAgICAgICAgICAgVmVyc2lvbiwKKyAgICAgKiAgICAgIG1vZHVsdXMgICAgICAgICAgIElOVEVHRVIsICAtLSBuCisgICAgICogICAgICBwdWJsaWNFeHBvbmVudCAgICBJTlRFR0VSLCAgLS0gZQorICAgICAqICAgICAgcHJpdmF0ZUV4cG9uZW50ICAgSU5URUdFUiwgIC0tIGQKKyAgICAgKiAgICAgIHByaW1lMSAgICAgICAgICAgIElOVEVHRVIsICAtLSBwCisgICAgICogICAgICBwcmltZTIgICAgICAgICAgICBJTlRFR0VSLCAgLS0gcQorICAgICAqICAgICAgZXhwb25lbnQxICAgICAgICAgSU5URUdFUiwgIC0tIGQgbW9kIChwLTEpCisgICAgICogICAgICBleHBvbmVudDIgICAgICAgICBJTlRFR0VSLCAgLS0gZCBtb2QgKHEtMSkKKyAgICAgKiAgICAgIGNvZWZmaWNpZW50ICAgICAgIElOVEVHRVIsICAtLSAoaW52ZXJzZSBvZiBxKSBtb2QgcAorICAgICAqICAgICAgb3RoZXJQcmltZUluZm9zICAgT3RoZXJQcmltZUluZm9zIE9QVElPTkFMCisgICAgICogIH0KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIGVuZCA9IHAgKyBsZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2ludCggJnAsIGVuZCwgJnJzYS0+dmVyICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgaWYoIHJzYS0+dmVyICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9WRVJTSU9OICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZyc2EtPk4gICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZyc2EtPkUgICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZyc2EtPkQgICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZyc2EtPlAgICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZyc2EtPlEgICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZyc2EtPkRQICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZyc2EtPkRRICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZyc2EtPlFQICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcnNhX2ZyZWUoIHJzYSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIHJzYS0+bGVuID0gbWJlZHRsc19tcGlfc2l6ZSggJnJzYS0+TiApOworCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcnNhX2ZyZWUoIHJzYSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCByc2EgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19yc2FfZnJlZSggcnNhICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorLyoKKyAqIFBhcnNlIGEgU0VDMSBlbmNvZGVkIHByaXZhdGUgRUMga2V5CisgKi8KK3N0YXRpYyBpbnQgcGtfcGFyc2Vfa2V5X3NlYzFfZGVyKCBtYmVkdGxzX2VjcF9rZXlwYWlyICplY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlsZW4gKQoreworICAgIGludCByZXQ7CisgICAgaW50IHZlcnNpb24sIHB1YmtleV9kb25lOworICAgIHNpemVfdCBsZW47CisgICAgbWJlZHRsc19hc24xX2J1ZiBwYXJhbXM7CisgICAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopIGtleTsKKyAgICB1bnNpZ25lZCBjaGFyICplbmQgPSBwICsga2V5bGVuOworICAgIHVuc2lnbmVkIGNoYXIgKmVuZDI7CisKKyAgICAvKgorICAgICAqIFJGQyA1OTE1LCBvciBTRUMxIEFwcGVuZGl4IEMuNAorICAgICAqCisgICAgICogRUNQcml2YXRlS2V5IDo6PSBTRVFVRU5DRSB7CisgICAgICogICAgICB2ZXJzaW9uICAgICAgICBJTlRFR0VSIHsgZWNQcml2a2V5VmVyMSgxKSB9IChlY1ByaXZrZXlWZXIxKSwKKyAgICAgKiAgICAgIHByaXZhdGVLZXkgICAgIE9DVEVUIFNUUklORywKKyAgICAgKiAgICAgIHBhcmFtZXRlcnMgWzBdIEVDUGFyYW1ldGVycyB7eyBOYW1lZEN1cnZlIH19IE9QVElPTkFMLAorICAgICAqICAgICAgcHVibGljS2V5ICBbMV0gQklUIFNUUklORyBPUFRJT05BTAorICAgICAqICAgIH0KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIGVuZCA9IHAgKyBsZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2ludCggJnAsIGVuZCwgJnZlcnNpb24gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgaWYoIHZlcnNpb24gIT0gMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfVkVSU0lPTiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sIE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoICZlY2stPmQsIHAsIGxlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoIGVjayApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIHAgKz0gbGVuOworCisgICAgcHVia2V5X2RvbmUgPSAwOworICAgIGlmKCBwICE9IGVuZCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBJcyAncGFyYW1ldGVycycgcHJlc2VudD8KKyAgICAgICAgICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgfCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCAwICkgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggcmV0ID0gcGtfZ2V0X2VjcGFyYW1zKCAmcCwgcCArIGxlbiwgJnBhcmFtcykgKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgKCByZXQgPSBwa191c2VfZWNwYXJhbXMoICZwYXJhbXMsICZlY2stPmdycCApICApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggZWNrICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggZWNrICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogSXMgJ3B1YmxpY2tleScgcHJlc2VudD8gSWYgbm90LCBvciBpZiB3ZSBjYW4ndCByZWFkIGl0IChlZyBiZWNhdXNlIGl0CisgICAgICAgICAqIGlzIGNvbXByZXNzZWQpLCBjcmVhdGUgaXQgZnJvbSB0aGUgcHJpdmF0ZSBrZXkuCisgICAgICAgICAqLworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgMSApICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVuZDIgPSBwICsgbGVuOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2JpdHN0cmluZ19udWxsKCAmcCwgZW5kMiwgJmxlbiApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgICAgICAgICAgaWYoIHAgKyBsZW4gIT0gZW5kMiApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gcGtfZ2V0X2VjcHVia2V5KCAmcCwgZW5kMiwgZWNrICkgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBwdWJrZXlfZG9uZSA9IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBUaGUgb25seSBhY2NlcHRhYmxlIGZhaWx1cmUgbW9kZSBvZiBwa19nZXRfZWNwdWJrZXkoKSBhYm92ZQorICAgICAgICAgICAgICAgICAqIGlzIGlmIHRoZSBwb2ludCBmb3JtYXQgaXMgbm90IHJlY29nbml6ZWQuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoIGVjayApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCAhIHB1YmtleV9kb25lICYmCisgICAgICAgICggcmV0ID0gbWJlZHRsc19lY3BfbXVsKCAmZWNrLT5ncnAsICZlY2stPlEsICZlY2stPmQsICZlY2stPmdycC5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoIGVjayApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXkoICZlY2stPmdycCwgJmVjay0+ZCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoIGVjayApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKworLyoKKyAqIFBhcnNlIGFuIHVuZW5jcnlwdGVkIFBLQ1MjOCBlbmNvZGVkIHByaXZhdGUga2V5CisgKi8KK3N0YXRpYyBpbnQgcGtfcGFyc2Vfa2V5X3BrY3M4X3VuZW5jcnlwdGVkX2RlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfY29udGV4dCAqcGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qga2V5bGVuICkKK3sKKyAgICBpbnQgcmV0LCB2ZXJzaW9uOworICAgIHNpemVfdCBsZW47CisgICAgbWJlZHRsc19hc24xX2J1ZiBwYXJhbXM7CisgICAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopIGtleTsKKyAgICB1bnNpZ25lZCBjaGFyICplbmQgPSBwICsga2V5bGVuOworICAgIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZyA9IE1CRURUTFNfUEtfTk9ORTsKKyAgICBjb25zdCBtYmVkdGxzX3BrX2luZm9fdCAqcGtfaW5mbzsKKworICAgIC8qCisgICAgICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIFByaXZhdEtleUluZm8gb2JqZWN0IChQS0NTIzggdjEuMiA9IFJGQyA1MjA4KQorICAgICAqCisgICAgICogICAgUHJpdmF0ZUtleUluZm8gOjo9IFNFUVVFTkNFIHsKKyAgICAgKiAgICAgIHZlcnNpb24gICAgICAgICAgICAgICAgICAgVmVyc2lvbiwKKyAgICAgKiAgICAgIHByaXZhdGVLZXlBbGdvcml0aG0gICAgICAgUHJpdmF0ZUtleUFsZ29yaXRobUlkZW50aWZpZXIsCisgICAgICogICAgICBwcml2YXRlS2V5ICAgICAgICAgICAgICAgIFByaXZhdGVLZXksCisgICAgICogICAgICBhdHRyaWJ1dGVzICAgICAgICAgICBbMF0gIElNUExJQ0lUIEF0dHJpYnV0ZXMgT1BUSU9OQUwgfQorICAgICAqCisgICAgICogICAgVmVyc2lvbiA6Oj0gSU5URUdFUgorICAgICAqICAgIFByaXZhdGVLZXlBbGdvcml0aG1JZGVudGlmaWVyIDo6PSBBbGdvcml0aG1JZGVudGlmaWVyCisgICAgICogICAgUHJpdmF0ZUtleSA6Oj0gT0NURVQgU1RSSU5HCisgICAgICoKKyAgICAgKiAgVGhlIFByaXZhdGVLZXkgT0NURVQgU1RSSU5HIGlzIGEgU0VDMSBFQ1ByaXZhdGVLZXkKKyAgICAgKi8KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgZW5kID0gcCArIGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfaW50KCAmcCwgZW5kLCAmdmVyc2lvbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICBpZiggdmVyc2lvbiAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9WRVJTSU9OICsgcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBwa19nZXRfcGtfYWxnKCAmcCwgZW5kLCAmcGtfYWxnLCAmcGFyYW1zICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLCBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgIGlmKCBsZW4gPCAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgIGlmKCAoIHBrX2luZm8gPSBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCBwa19hbGcgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3NldHVwKCBwaywgcGtfaW5mbyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgaWYoIHBrX2FsZyA9PSBNQkVEVExTX1BLX1JTQSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBwa19wYXJzZV9rZXlfcGtjczFfZGVyKCBtYmVkdGxzX3BrX3JzYSggKnBrICksIHAsIGxlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcGtfZnJlZSggcGsgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGlmKCBwa19hbGcgPT0gTUJFRFRMU19QS19FQ0tFWSB8fCBwa19hbGcgPT0gTUJFRFRMU19QS19FQ0tFWV9ESCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBwa191c2VfZWNwYXJhbXMoICZwYXJhbXMsICZtYmVkdGxzX3BrX2VjKCAqcGsgKS0+Z3JwICkgKSAhPSAwIHx8CisgICAgICAgICAgICAoIHJldCA9IHBrX3BhcnNlX2tleV9zZWMxX2RlciggbWJlZHRsc19wa19lYyggKnBrICksIHAsIGxlbiApICApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3BrX2ZyZWUoIHBrICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfSBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFBhcnNlIGFuIGVuY3J5cHRlZCBQS0NTIzggZW5jb2RlZCBwcml2YXRlIGtleQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxMl9DKSB8fCBkZWZpbmVkKE1CRURUTFNfUEtDUzVfQykKK3N0YXRpYyBpbnQgcGtfcGFyc2Vfa2V5X3BrY3M4X2VuY3J5cHRlZF9kZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2NvbnRleHQgKnBrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHdkLCBzaXplX3QgcHdkbGVuICkKK3sKKyAgICBpbnQgcmV0LCBkZWNyeXB0ZWQgPSAwOworICAgIHNpemVfdCBsZW47CisgICAgdW5zaWduZWQgY2hhciBidWZbMjA0OF07CisgICAgdW5zaWduZWQgY2hhciAqcCwgKmVuZDsKKyAgICBtYmVkdGxzX2FzbjFfYnVmIHBiZV9hbGdfb2lkLCBwYmVfcGFyYW1zOworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMTJfQykKKyAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgY2lwaGVyX2FsZzsKKyAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGc7CisjZW5kaWYKKworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikga2V5OworICAgIGVuZCA9IHAgKyBrZXlsZW47CisKKyAgICBpZiggcHdkbGVuID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX1JFUVVJUkVEICk7CisKKyAgICAvKgorICAgICAqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBFbmNyeXB0ZWRQcml2YXRLZXlJbmZvIG9iamVjdCAoUEtDUyM4KQorICAgICAqCisgICAgICogIEVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIDo6PSBTRVFVRU5DRSB7CisgICAgICogICAgZW5jcnlwdGlvbkFsZ29yaXRobSAgRW5jcnlwdGlvbkFsZ29yaXRobUlkZW50aWZpZXIsCisgICAgICogICAgZW5jcnlwdGVkRGF0YSAgICAgICAgRW5jcnlwdGVkRGF0YQorICAgICAqICB9CisgICAgICoKKyAgICAgKiAgRW5jcnlwdGlvbkFsZ29yaXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICAgKgorICAgICAqICBFbmNyeXB0ZWREYXRhIDo6PSBPQ1RFVCBTVFJJTkcKKyAgICAgKgorICAgICAqICBUaGUgRW5jcnlwdGVkRGF0YSBPQ1RFVCBTVFJJTkcgaXMgYSBQS0NTIzggUHJpdmF0ZUtleUluZm8KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIGVuZCA9IHAgKyBsZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2FsZyggJnAsIGVuZCwgJnBiZV9hbGdfb2lkLCAmcGJlX3BhcmFtcyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwgTUJFRFRMU19BU04xX09DVEVUX1NUUklORyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICBpZiggbGVuID4gc2l6ZW9mKCBidWYgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qCisgICAgICogRGVjcnlwdCBFbmNyeXB0ZWREYXRhIHdpdGggYXBwcm9wcmlhdGUgUERFCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxMl9DKQorICAgIGlmKCBtYmVkdGxzX29pZF9nZXRfcGtjczEyX3BiZV9hbGcoICZwYmVfYWxnX29pZCwgJm1kX2FsZywgJmNpcGhlcl9hbGcgKSA9PSAwICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtjczEyX3BiZSggJnBiZV9wYXJhbXMsIE1CRURUTFNfUEtDUzEyX1BCRV9ERUNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJfYWxnLCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3ZCwgcHdkbGVuLCBwLCBsZW4sIGJ1ZiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfUEtDUzEyX1BBU1NXT1JEX01JU01BVENIICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENIICk7CisKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBkZWNyeXB0ZWQgPSAxOworICAgIH0KKyAgICBlbHNlIGlmKCBNQkVEVExTX09JRF9DTVAoIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzRfMTI4LCAmcGJlX2FsZ19vaWQgKSA9PSAwICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtjczEyX3BiZV9zaGExX3JjNF8xMjgoICZwYmVfcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19QS0NTMTJfUEJFX0RFQ1JZUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwd2QsIHB3ZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIGxlbiwgYnVmICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJlc3QgZ3Vlc3MgZm9yIHBhc3N3b3JkIG1pc21hdGNoIHdoZW4gdXNpbmcgUkM0LiBJZiBmaXJzdCB0YWcgaXMKKyAgICAgICAgLy8gbm90IE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRQorICAgICAgICAvLworICAgICAgICBpZiggKmJ1ZiAhPSAoIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0ggKTsKKworICAgICAgICBkZWNyeXB0ZWQgPSAxOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19QS0NTMTJfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTNV9DKQorICAgIGlmKCBNQkVEVExTX09JRF9DTVAoIE1CRURUTFNfT0lEX1BLQ1M1X1BCRVMyLCAmcGJlX2FsZ19vaWQgKSA9PSAwICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtjczVfcGJlczIoICZwYmVfcGFyYW1zLCBNQkVEVExTX1BLQ1M1X0RFQ1JZUFQsIHB3ZCwgcHdkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIGxlbiwgYnVmICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9QS0NTNV9QQVNTV09SRF9NSVNNQVRDSCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19QQVNTV09SRF9NSVNNQVRDSCApOworCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgZGVjcnlwdGVkID0gMTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzVfQyAqLworICAgIHsKKyAgICAgICAgKCh2b2lkKSBwd2QpOworICAgIH0KKworICAgIGlmKCBkZWNyeXB0ZWQgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgcmV0dXJuKCBwa19wYXJzZV9rZXlfcGtjczhfdW5lbmNyeXB0ZWRfZGVyKCBwaywgYnVmLCBsZW4gKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzEyX0MgfHwgTUJFRFRMU19QS0NTNV9DICovCisKKy8qCisgKiBQYXJzZSBhIHByaXZhdGUga2V5CisgKi8KK2ludCBtYmVkdGxzX3BrX3BhcnNlX2tleSggbWJlZHRsc19wa19jb250ZXh0ICpwaywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgc2l6ZV90IHB3ZGxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBtYmVkdGxzX3BrX2luZm9fdCAqcGtfaW5mbzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyAgICBzaXplX3QgbGVuOworICAgIG1iZWR0bHNfcGVtX2NvbnRleHQgcGVtOworCisgICAgbWJlZHRsc19wZW1faW5pdCggJnBlbSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgIC8qIEF2b2lkIGNhbGxpbmcgbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoKSBvbiBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZyAqLworICAgIGlmKCBrZXlsZW4gPT0gMCB8fCBrZXlba2V5bGVuIC0gMV0gIT0gJ1wwJyApCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQ7CisgICAgZWxzZQorICAgICAgICByZXQgPSBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlciggJnBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHB3ZCwgcHdkbGVuLCAmbGVuICk7CisKKyAgICBpZiggcmV0ID09IDAgKQorICAgIHsKKyAgICAgICAgaWYoICggcGtfaW5mbyA9IG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfUEtfUlNBICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfVU5LTk9XTl9QS19BTEcgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3NldHVwKCBwaywgcGtfaW5mbyAgICAgICAgICAgICAgICAgICAgKSApICE9IDAgfHwKKyAgICAgICAgICAgICggcmV0ID0gcGtfcGFyc2Vfa2V5X3BrY3MxX2RlciggbWJlZHRsc19wa19yc2EoICpwayApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW0uYnVmLCBwZW0uYnVmbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wa19mcmVlKCBwayApOworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wZW1fZnJlZSggJnBlbSApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyAgICBlbHNlIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfUEVNX1BBU1NXT1JEX01JU01BVENIICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19QQVNTV09SRF9NSVNNQVRDSCApOworICAgIGVsc2UgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfUkVRVUlSRUQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX1JFUVVJUkVEICk7CisgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICAvKiBBdm9pZCBjYWxsaW5nIG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCkgb24gbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmcgKi8KKyAgICBpZigga2V5bGVuID09IDAgfHwga2V5W2tleWxlbiAtIDFdICE9ICdcMCcgKQorICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoICZwZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgcHdkLCBwd2RsZW4sICZsZW4gKTsKKyAgICBpZiggcmV0ID09IDAgKQorICAgIHsKKyAgICAgICAgaWYoICggcGtfaW5mbyA9IG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfUEtfRUNLRVkgKSApID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19VTktOT1dOX1BLX0FMRyApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfc2V0dXAoIHBrLCBwa19pbmZvICAgICAgICAgICAgICAgICAgICkgKSAhPSAwIHx8CisgICAgICAgICAgICAoIHJldCA9IHBrX3BhcnNlX2tleV9zZWMxX2RlciggbWJlZHRsc19wa19lYyggKnBrICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtLmJ1ZiwgcGVtLmJ1ZmxlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcGtfZnJlZSggcGsgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcGVtX2ZyZWUoICZwZW0gKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisgICAgZWxzZSBpZiggcmV0ID09IE1CRURUTFNfRVJSX1BFTV9QQVNTV09SRF9NSVNNQVRDSCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0ggKTsKKyAgICBlbHNlIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfUEVNX1BBU1NXT1JEX1JFUVVJUkVEICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19QQVNTV09SRF9SRVFVSVJFRCApOworICAgIGVsc2UgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisKKyAgICAvKiBBdm9pZCBjYWxsaW5nIG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCkgb24gbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmcgKi8KKyAgICBpZigga2V5bGVuID09IDAgfHwga2V5W2tleWxlbiAtIDFdICE9ICdcMCcgKQorICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoICZwZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgTlVMTCwgMCwgJmxlbiApOworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBwa19wYXJzZV9rZXlfcGtjczhfdW5lbmNyeXB0ZWRfZGVyKCBwaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbS5idWYsIHBlbS5idWZsZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3BrX2ZyZWUoIHBrICk7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3BlbV9mcmVlKCAmcGVtICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorICAgIGVsc2UgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMTJfQykgfHwgZGVmaW5lZChNQkVEVExTX1BLQ1M1X0MpCisgICAgLyogQXZvaWQgY2FsbGluZyBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlcigpIG9uIG5vbi1udWxsLXRlcm1pbmF0ZWQgc3RyaW5nICovCisgICAgaWYoIGtleWxlbiA9PSAwIHx8IGtleVtrZXlsZW4gLSAxXSAhPSAnXDAnICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVDsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCAmcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLUJFR0lOIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgTlVMTCwgMCwgJmxlbiApOworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBwa19wYXJzZV9rZXlfcGtjczhfZW5jcnlwdGVkX2RlciggcGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW0uYnVmLCBwZW0uYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdkLCBwd2RsZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3BrX2ZyZWUoIHBrICk7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3BlbV9mcmVlKCAmcGVtICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorICAgIGVsc2UgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxMl9DIHx8IE1CRURUTFNfUEtDUzVfQyAqLworI2Vsc2UKKyAgICAoKHZvaWQpIHJldCk7CisgICAgKCh2b2lkKSBwd2QpOworICAgICgodm9pZCkgcHdkbGVuKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9QQVJTRV9DICovCisKKyAgICAvKgorICAgICogQXQgdGhpcyBwb2ludCB3ZSBvbmx5IGtub3cgaXQncyBub3QgYSBQRU0gZm9ybWF0dGVkIGtleS4gQ291bGQgYmUgYW55CisgICAgKiBvZiB0aGUga25vd24gREVSIGVuY29kZWQgcHJpdmF0ZSBrZXkgZm9ybWF0cworICAgICoKKyAgICAqIFdlIHRyeSB0aGUgZGlmZmVyZW50IERFUiBmb3JtYXQgcGFyc2VycyB0byBzZWUgaWYgb25lIHBhc3NlcyB3aXRob3V0CisgICAgKiBlcnJvcgorICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxMl9DKSB8fCBkZWZpbmVkKE1CRURUTFNfUEtDUzVfQykKKyAgICBpZiggKCByZXQgPSBwa19wYXJzZV9rZXlfcGtjczhfZW5jcnlwdGVkX2RlciggcGssIGtleSwga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwd2QsIHB3ZGxlbiApICkgPT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3BrX2ZyZWUoIHBrICk7CisKKyAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENIICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzEyX0MgfHwgTUJFRFRMU19QS0NTNV9DICovCisKKyAgICBpZiggKCByZXQgPSBwa19wYXJzZV9rZXlfcGtjczhfdW5lbmNyeXB0ZWRfZGVyKCBwaywga2V5LCBrZXlsZW4gKSApID09IDAgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIG1iZWR0bHNfcGtfZnJlZSggcGsgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICBpZiggKCBwa19pbmZvID0gbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19QS19SU0EgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3NldHVwKCBwaywgcGtfaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gcGtfcGFyc2Vfa2V5X3BrY3MxX2RlciggbWJlZHRsc19wa19yc2EoICpwayApLCBrZXksIGtleWxlbiApICkgPT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3BrX2ZyZWUoIHBrICk7CisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGlmKCAoIHBrX2luZm8gPSBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX1BLX0VDS0VZICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19VTktOT1dOX1BLX0FMRyApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19zZXR1cCggcGssIHBrX2luZm8gICAgICAgICAgICAgICAgICAgICAgICAgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBwa19wYXJzZV9rZXlfc2VjMV9kZXIoIG1iZWR0bHNfcGtfZWMoICpwayApLCBrZXksIGtleWxlbiApICkgPT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3BrX2ZyZWUoIHBrICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKTsKK30KKworLyoKKyAqIFBhcnNlIGEgcHVibGljIGtleQorICovCitpbnQgbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5KCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCBrZXlsZW4gKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisgICAgc2l6ZV90IGxlbjsKKyAgICBtYmVkdGxzX3BlbV9jb250ZXh0IHBlbTsKKworICAgIG1iZWR0bHNfcGVtX2luaXQoICZwZW0gKTsKKworICAgIC8qIEF2b2lkIGNhbGxpbmcgbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoKSBvbiBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZyAqLworICAgIGlmKCBrZXlsZW4gPT0gMCB8fCBrZXlba2V5bGVuIC0gMV0gIT0gJ1wwJyApCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQ7CisgICAgZWxzZQorICAgICAgICByZXQgPSBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlciggJnBlbSwKKyAgICAgICAgICAgICAgICAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0iLAorICAgICAgICAgICAgICAgICItLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0iLAorICAgICAgICAgICAgICAgIGtleSwgTlVMTCwgMCwgJmxlbiApOworCisgICAgaWYoIHJldCA9PSAwICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFdhcyBQRU0gZW5jb2RlZAorICAgICAgICAgKi8KKyAgICAgICAga2V5ID0gcGVtLmJ1ZjsKKyAgICAgICAga2V5bGVuID0gcGVtLmJ1ZmxlbjsKKyAgICB9CisgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wZW1fZnJlZSggJnBlbSApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9QQVJTRV9DICovCisgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopIGtleTsKKworICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfc3VicHVia2V5KCAmcCwgcCArIGtleWxlbiwgY3R4ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisgICAgbWJlZHRsc19wZW1fZnJlZSggJnBlbSApOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19QS19QQVJTRV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa3dyaXRlLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa3dyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiNzk4YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3Brd3JpdGUuYwpAQCAtMCwwICsxLDQzOSBAQAorLyoKKyAqICBQdWJsaWMgS2V5IGxheWVyIGZvciB3cml0aW5nIGtleSBmaWxlcyBhbmQgc3RydWN0dXJlcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1dSSVRFX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3BrLmgiCisjaW5jbHVkZSAibWJlZHRscy9hc24xd3JpdGUuaCIKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyNpbmNsdWRlICJtYmVkdGxzL2VjcC5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisjaW5jbHVkZSAibWJlZHRscy9lY2RzYS5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisvKgorICogIFJTQVB1YmxpY0tleSA6Oj0gU0VRVUVOQ0UgeworICogICAgICBtb2R1bHVzICAgICAgICAgICBJTlRFR0VSLCAgLS0gbgorICogICAgICBwdWJsaWNFeHBvbmVudCAgICBJTlRFR0VSICAgLS0gZQorICogIH0KKyAqLworc3RhdGljIGludCBwa193cml0ZV9yc2FfcHVia2V5KCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX21waSggcCwgc3RhcnQsICZyc2EtPkUgKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9tcGkoIHAsIHN0YXJ0LCAmcnNhLT5OICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHAsIHN0YXJ0LCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKy8qCisgKiBFQyBwdWJsaWMga2V5IGlzIGFuIEVDIHBvaW50CisgKi8KK3N0YXRpYyBpbnQgcGtfd3JpdGVfZWNfcHVia2V5KCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyICplYyApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX0VDUF9NQVhfUFRfTEVOXTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX3BvaW50X3dyaXRlX2JpbmFyeSggJmVjLT5ncnAsICZlYy0+USwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbiwgYnVmLCBzaXplb2YoIGJ1ZiApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICpwIDwgc3RhcnQgfHwgKHNpemVfdCkoICpwIC0gc3RhcnQgKSA8IGxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAqcCAtPSBsZW47CisgICAgbWVtY3B5KCAqcCwgYnVmLCBsZW4gKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKKy8qCisgKiBFQ1BhcmFtZXRlcnMgOjo9IENIT0lDRSB7CisgKiAgIG5hbWVkQ3VydmUgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUgorICogfQorICovCitzdGF0aWMgaW50IHBrX3dyaXRlX2VjX3BhcmFtKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgKmVjICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworICAgIGNvbnN0IGNoYXIgKm9pZDsKKyAgICBzaXplX3Qgb2lkX2xlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfZWNfZ3JwKCBlYy0+Z3JwLmlkLCAmb2lkLCAmb2lkX2xlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfb2lkKCBwLCBzdGFydCwgb2lkLCBvaWRfbGVuICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCitpbnQgbWJlZHRsc19wa193cml0ZV9wdWJrZXkoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqa2V5ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCBrZXkgKSA9PSBNQkVEVExTX1BLX1JTQSApCisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIHBrX3dyaXRlX3JzYV9wdWJrZXkoIHAsIHN0YXJ0LCBtYmVkdGxzX3BrX3JzYSggKmtleSApICkgKTsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoIGtleSApID09IE1CRURUTFNfUEtfRUNLRVkgKQorICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBwa193cml0ZV9lY19wdWJrZXkoIHAsIHN0YXJ0LCBtYmVkdGxzX3BrX2VjKCAqa2V5ICkgKSApOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKK2ludCBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleV9kZXIoIG1iZWR0bHNfcGtfY29udGV4dCAqa2V5LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKmM7CisgICAgc2l6ZV90IGxlbiA9IDAsIHBhcl9sZW4gPSAwLCBvaWRfbGVuOworICAgIGNvbnN0IGNoYXIgKm9pZDsKKworICAgIGMgPSBidWYgKyBzaXplOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19wa193cml0ZV9wdWJrZXkoICZjLCBidWYsIGtleSApICk7CisKKyAgICBpZiggYyAtIGJ1ZiA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCisgICAgLyoKKyAgICAgKiAgU3ViamVjdFB1YmxpY0tleUluZm8gIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAgKiAgICAgICBhbGdvcml0aG0gICAgICAgICAgICBBbGdvcml0aG1JZGVudGlmaWVyLAorICAgICAqICAgICAgIHN1YmplY3RQdWJsaWNLZXkgICAgIEJJVCBTVFJJTkcgfQorICAgICAqLworICAgICotLWMgPSAwOworICAgIGxlbiArPSAxOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIGJ1ZiwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgYnVmLCBNQkVEVExTX0FTTjFfQklUX1NUUklORyApICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X3BrX2FsZyggbWJlZHRsc19wa19nZXRfdHlwZSgga2V5ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2lkLCAmb2lkX2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSgga2V5ICkgPT0gTUJFRFRMU19QS19FQ0tFWSApCisgICAgeworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggcGFyX2xlbiwgcGtfd3JpdGVfZWNfcGFyYW0oICZjLCBidWYsIG1iZWR0bHNfcGtfZWMoICprZXkgKSApICk7CisgICAgfQorI2VuZGlmCisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfYWxnb3JpdGhtX2lkZW50aWZpZXIoICZjLCBidWYsIG9pZCwgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyX2xlbiApICk7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgYnVmLCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCBidWYsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworaW50IG1iZWR0bHNfcGtfd3JpdGVfa2V5X2RlciggbWJlZHRsc19wa19jb250ZXh0ICprZXksIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqYyA9IGJ1ZiArIHNpemU7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoIGtleSApID09IE1CRURUTFNfUEtfUlNBICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYSA9IG1iZWR0bHNfcGtfcnNhKCAqa2V5ICk7CisKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX21waSggJmMsIGJ1ZiwgJnJzYS0+UVAgKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCAmYywgYnVmLCAmcnNhLT5EUSApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9tcGkoICZjLCBidWYsICZyc2EtPkRQICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX21waSggJmMsIGJ1ZiwgJnJzYS0+USApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9tcGkoICZjLCBidWYsICZyc2EtPlAgKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCAmYywgYnVmLCAmcnNhLT5EICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX21waSggJmMsIGJ1ZiwgJnJzYS0+RSApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9tcGkoICZjLCBidWYsICZyc2EtPk4gKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfaW50KCAmYywgYnVmLCAwICkgKTsKKworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgYnVmLCBsZW4gKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCBrZXkgKSA9PSBNQkVEVExTX1BLX0VDS0VZICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgKmVjID0gbWJlZHRsc19wa19lYyggKmtleSApOworICAgICAgICBzaXplX3QgcHViX2xlbiA9IDAsIHBhcl9sZW4gPSAwOworCisgICAgICAgIC8qCisgICAgICAgICAqIFJGQyA1OTE1LCBvciBTRUMxIEFwcGVuZGl4IEMuNAorICAgICAgICAgKgorICAgICAgICAgKiBFQ1ByaXZhdGVLZXkgOjo9IFNFUVVFTkNFIHsKKyAgICAgICAgICogICAgICB2ZXJzaW9uICAgICAgICBJTlRFR0VSIHsgZWNQcml2a2V5VmVyMSgxKSB9IChlY1ByaXZrZXlWZXIxKSwKKyAgICAgICAgICogICAgICBwcml2YXRlS2V5ICAgICBPQ1RFVCBTVFJJTkcsCisgICAgICAgICAqICAgICAgcGFyYW1ldGVycyBbMF0gRUNQYXJhbWV0ZXJzIHt7IE5hbWVkQ3VydmUgfX0gT1BUSU9OQUwsCisgICAgICAgICAqICAgICAgcHVibGljS2V5ICBbMV0gQklUIFNUUklORyBPUFRJT05BTAorICAgICAgICAgKiAgICB9CisgICAgICAgICAqLworCisgICAgICAgIC8qIHB1YmxpY0tleSAqLworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggcHViX2xlbiwgcGtfd3JpdGVfZWNfcHVia2V5KCAmYywgYnVmLCBlYyApICk7CisKKyAgICAgICAgaWYoIGMgLSBidWYgPCAxICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisgICAgICAgICotLWMgPSAwOworICAgICAgICBwdWJfbGVuICs9IDE7CisKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIHB1Yl9sZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCBidWYsIHB1Yl9sZW4gKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggcHViX2xlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIGJ1ZiwgTUJFRFRMU19BU04xX0JJVF9TVFJJTkcgKSApOworCisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBwdWJfbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgYnVmLCBwdWJfbGVuICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIHB1Yl9sZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgfCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCAxICkgKTsKKyAgICAgICAgbGVuICs9IHB1Yl9sZW47CisKKyAgICAgICAgLyogcGFyYW1ldGVycyAqLworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggcGFyX2xlbiwgcGtfd3JpdGVfZWNfcGFyYW0oICZjLCBidWYsIGVjICkgKTsKKworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggcGFyX2xlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIGJ1ZiwgcGFyX2xlbiApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBwYXJfbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgMCApICk7CisgICAgICAgIGxlbiArPSBwYXJfbGVuOworCisgICAgICAgIC8qIHByaXZhdGVLZXk6IHdyaXRlIGFzIE1QSSB0aGVuIGZpeCB0YWcgKi8KKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX21waSggJmMsIGJ1ZiwgJmVjLT5kICkgKTsKKyAgICAgICAgKmMgPSBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HOworCisgICAgICAgIC8qIHZlcnNpb24gKi8KKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2ludCggJmMsIGJ1ZiwgMSApICk7CisKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIGJ1ZiwgbGVuICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIGJ1ZiwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisKKyNkZWZpbmUgUEVNX0JFR0lOX1BVQkxJQ19LRVkgICAgIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG4iCisjZGVmaW5lIFBFTV9FTkRfUFVCTElDX0tFWSAgICAgICItLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiIKKworI2RlZmluZSBQRU1fQkVHSU5fUFJJVkFURV9LRVlfUlNBICAgIi0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS1cbiIKKyNkZWZpbmUgUEVNX0VORF9QUklWQVRFX0tFWV9SU0EgICAgICItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVxuIgorI2RlZmluZSBQRU1fQkVHSU5fUFJJVkFURV9LRVlfRUMgICAgIi0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLVxuIgorI2RlZmluZSBQRU1fRU5EX1BSSVZBVEVfS0VZX0VDICAgICAgIi0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS1cbiIKKworLyoKKyAqIE1heCBzaXplcyBvZiBrZXkgcGVyIHR5cGVzLiBTaG93biBhcyB0YWcgKyBsZW4gKCsgY29udGVudCkuCisgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKy8qCisgKiBSU0EgcHVibGljIGtleXM6CisgKiAgU3ViamVjdFB1YmxpY0tleUluZm8gIDo6PSAgU0VRVUVOQ0UgIHsgICAgICAgICAgMSArIDMKKyAqICAgICAgIGFsZ29yaXRobSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsICAxICsgMSAoc2VxdWVuY2UpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMSArIDEgKyA5IChyc2Egb2lkKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDEgKyAxIChwYXJhbXMgbnVsbCkKKyAqICAgICAgIHN1YmplY3RQdWJsaWNLZXkgICAgIEJJVCBTVFJJTkcgfSAgICAgICAgICAxICsgMyArICgxICsgYmVsb3cpCisgKiAgUlNBUHVibGljS2V5IDo6PSBTRVFVRU5DRSB7ICAgICAgICAgICAgICAgICAgICAgMSArIDMKKyAqICAgICAgbW9kdWx1cyAgICAgICAgICAgSU5URUdFUiwgIC0tIG4gICAgICAgICAgICAxICsgMyArIE1QSV9NQVggKyAxCisgKiAgICAgIHB1YmxpY0V4cG9uZW50ICAgIElOVEVHRVIgICAtLSBlICAgICAgICAgICAgMSArIDMgKyBNUElfTUFYICsgMQorICogIH0KKyAqLworI2RlZmluZSBSU0FfUFVCX0RFUl9NQVhfQllURVMgICAzOCArIDIgKiBNQkVEVExTX01QSV9NQVhfU0laRQorCisvKgorICogUlNBIHByaXZhdGUga2V5czoKKyAqICBSU0FQcml2YXRlS2V5IDo6PSBTRVFVRU5DRSB7ICAgICAgICAgICAgICAgICAgICAxICsgMworICogICAgICB2ZXJzaW9uICAgICAgICAgICBWZXJzaW9uLCAgICAgICAgICAgICAgICAgIDEgKyAxICsgMQorICogICAgICBtb2R1bHVzICAgICAgICAgICBJTlRFR0VSLCAgICAgICAgICAgICAgICAgIDEgKyAzICsgTVBJX01BWCArIDEKKyAqICAgICAgcHVibGljRXhwb25lbnQgICAgSU5URUdFUiwgICAgICAgICAgICAgICAgICAxICsgMyArIE1QSV9NQVggKyAxCisgKiAgICAgIHByaXZhdGVFeHBvbmVudCAgIElOVEVHRVIsICAgICAgICAgICAgICAgICAgMSArIDMgKyBNUElfTUFYICsgMQorICogICAgICBwcmltZTEgICAgICAgICAgICBJTlRFR0VSLCAgICAgICAgICAgICAgICAgIDEgKyAzICsgTVBJX01BWCAvIDIgKyAxCisgKiAgICAgIHByaW1lMiAgICAgICAgICAgIElOVEVHRVIsICAgICAgICAgICAgICAgICAgMSArIDMgKyBNUElfTUFYIC8gMiArIDEKKyAqICAgICAgZXhwb25lbnQxICAgICAgICAgSU5URUdFUiwgICAgICAgICAgICAgICAgICAxICsgMyArIE1QSV9NQVggLyAyICsgMQorICogICAgICBleHBvbmVudDIgICAgICAgICBJTlRFR0VSLCAgICAgICAgICAgICAgICAgIDEgKyAzICsgTVBJX01BWCAvIDIgKyAxCisgKiAgICAgIGNvZWZmaWNpZW50ICAgICAgIElOVEVHRVIsICAgICAgICAgICAgICAgICAgMSArIDMgKyBNUElfTUFYIC8gMiArIDEKKyAqICAgICAgb3RoZXJQcmltZUluZm9zICAgT3RoZXJQcmltZUluZm9zIE9QVElPTkFMICAwIChub3Qgc3VwcG9ydGVkKQorICogIH0KKyAqLworI2RlZmluZSBNUElfTUFYX1NJWkVfMiAgICAgICAgICBNQkVEVExTX01QSV9NQVhfU0laRSAvIDIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfTVBJX01BWF9TSVpFICUgMgorI2RlZmluZSBSU0FfUFJWX0RFUl9NQVhfQllURVMgICA0NyArIDMgKiBNQkVEVExTX01QSV9NQVhfU0laRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNSAqIE1QSV9NQVhfU0laRV8yCisKKyNlbHNlIC8qIE1CRURUTFNfUlNBX0MgKi8KKworI2RlZmluZSBSU0FfUFVCX0RFUl9NQVhfQllURVMgICAwCisjZGVmaW5lIFJTQV9QUlZfREVSX01BWF9CWVRFUyAgIDAKKworI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKy8qCisgKiBFQyBwdWJsaWMga2V5czoKKyAqICBTdWJqZWN0UHVibGljS2V5SW5mbyAgOjo9ICBTRVFVRU5DRSAgeyAgICAgIDEgKyAyCisgKiAgICBhbGdvcml0aG0gICAgICAgICBBbGdvcml0aG1JZGVudGlmaWVyLCAgICAxICsgMSAoc2VxdWVuY2UpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAxICsgMSArIDcgKGVjIG9pZCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDEgKyAxICsgOSAobmFtZWRDdXJ2ZSBvaWQpCisgKiAgICBzdWJqZWN0UHVibGljS2V5ICBCSVQgU1RSSU5HICAgICAgICAgICAgICAxICsgMiArIDEgICAgICAgICAgICAgICBbMV0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDEgKHBvaW50IGZvcm1hdCkgICAgICAgIFsxXQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMiAqIEVDUF9NQVggKGNvb3JkcykgICAgWzFdCisgKiAgfQorICovCisjZGVmaW5lIEVDUF9QVUJfREVSX01BWF9CWVRFUyAgIDMwICsgMiAqIE1CRURUTFNfRUNQX01BWF9CWVRFUworCisvKgorICogRUMgcHJpdmF0ZSBrZXlzOgorICogRUNQcml2YXRlS2V5IDo6PSBTRVFVRU5DRSB7ICAgICAgICAgICAgICAgICAgMSArIDIKKyAqICAgICAgdmVyc2lvbiAgICAgICAgSU5URUdFUiAsICAgICAgICAgICAgICAgIDEgKyAxICsgMQorICogICAgICBwcml2YXRlS2V5ICAgICBPQ1RFVCBTVFJJTkcsICAgICAgICAgICAgMSArIDEgKyBFQ1BfTUFYCisgKiAgICAgIHBhcmFtZXRlcnMgWzBdIEVDUGFyYW1ldGVycyBPUFRJT05BTCwgICAxICsgMSArICgxICsgMSArIDkpCisgKiAgICAgIHB1YmxpY0tleSAgWzFdIEJJVCBTVFJJTkcgT1BUSU9OQUwgICAgICAxICsgMiArIFsxXSBhYm92ZQorICogICAgfQorICovCisjZGVmaW5lIEVDUF9QUlZfREVSX01BWF9CWVRFUyAgIDI5ICsgMyAqIE1CRURUTFNfRUNQX01BWF9CWVRFUworCisjZWxzZSAvKiBNQkVEVExTX0VDUF9DICovCisKKyNkZWZpbmUgRUNQX1BVQl9ERVJfTUFYX0JZVEVTICAgMAorI2RlZmluZSBFQ1BfUFJWX0RFUl9NQVhfQllURVMgICAwCisKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisKKyNkZWZpbmUgUFVCX0RFUl9NQVhfQllURVMgICBSU0FfUFVCX0RFUl9NQVhfQllURVMgPiBFQ1BfUFVCX0RFUl9NQVhfQllURVMgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNBX1BVQl9ERVJfTUFYX0JZVEVTIDogRUNQX1BVQl9ERVJfTUFYX0JZVEVTCisjZGVmaW5lIFBSVl9ERVJfTUFYX0JZVEVTICAgUlNBX1BSVl9ERVJfTUFYX0JZVEVTID4gRUNQX1BSVl9ERVJfTUFYX0JZVEVTID8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTQV9QUlZfREVSX01BWF9CWVRFUyA6IEVDUF9QUlZfREVSX01BWF9CWVRFUworCitpbnQgbWJlZHRsc19wa193cml0ZV9wdWJrZXlfcGVtKCBtYmVkdGxzX3BrX2NvbnRleHQgKmtleSwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9idWZbUFVCX0RFUl9NQVhfQllURVNdOworICAgIHNpemVfdCBvbGVuID0gMDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfd3JpdGVfcHVia2V5X2Rlcigga2V5LCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihvdXRwdXRfYnVmKSApICkgPCAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wZW1fd3JpdGVfYnVmZmVyKCBQRU1fQkVHSU5fUFVCTElDX0tFWSwgUEVNX0VORF9QVUJMSUNfS0VZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYgKyBzaXplb2Yob3V0cHV0X2J1ZikgLSByZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LCBidWYsIHNpemUsICZvbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3BrX3dyaXRlX2tleV9wZW0oIG1iZWR0bHNfcGtfY29udGV4dCAqa2V5LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X2J1ZltQUlZfREVSX01BWF9CWVRFU107CisgICAgY29uc3QgY2hhciAqYmVnaW4sICplbmQ7CisgICAgc2l6ZV90IG9sZW4gPSAwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa193cml0ZV9rZXlfZGVyKCBrZXksIG91dHB1dF9idWYsIHNpemVvZihvdXRwdXRfYnVmKSApICkgPCAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSgga2V5ICkgPT0gTUJFRFRMU19QS19SU0EgKQorICAgIHsKKyAgICAgICAgYmVnaW4gPSBQRU1fQkVHSU5fUFJJVkFURV9LRVlfUlNBOworICAgICAgICBlbmQgPSBQRU1fRU5EX1BSSVZBVEVfS0VZX1JTQTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCBrZXkgKSA9PSBNQkVEVExTX1BLX0VDS0VZICkKKyAgICB7CisgICAgICAgIGJlZ2luID0gUEVNX0JFR0lOX1BSSVZBVEVfS0VZX0VDOworICAgICAgICBlbmQgPSBQRU1fRU5EX1BSSVZBVEVfS0VZX0VDOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BlbV93cml0ZV9idWZmZXIoIGJlZ2luLCBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1ZiArIHNpemVvZihvdXRwdXRfYnVmKSAtIHJldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQsIGJ1Ziwgc2l6ZSwgJm9sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9XUklURV9DICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1BLX1dSSVRFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BsYXRmb3JtLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTFjNDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogIFBsYXRmb3JtIGFic3RyYWN0aW9uIGxheWVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKworI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9NRU1PUlkpCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfQ0FMTE9DKQorc3RhdGljIHZvaWQgKnBsYXRmb3JtX2NhbGxvY191bmluaXQoIHNpemVfdCBuLCBzaXplX3Qgc2l6ZSApCit7CisgICAgKCh2b2lkKSBuKTsKKyAgICAoKHZvaWQpIHNpemUpOworICAgIHJldHVybiggTlVMTCApOworfQorCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQyAgIHBsYXRmb3JtX2NhbGxvY191bmluaXQKKyNlbmRpZiAvKiAhTUJFRFRMU19QTEFURk9STV9TVERfQ0FMTE9DICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9GUkVFKQorc3RhdGljIHZvaWQgcGxhdGZvcm1fZnJlZV91bmluaXQoIHZvaWQgKnB0ciApCit7CisgICAgKCh2b2lkKSBwdHIpOworfQorCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0ZSRUUgICAgIHBsYXRmb3JtX2ZyZWVfdW5pbml0CisjZW5kaWYgLyogIU1CRURUTFNfUExBVEZPUk1fU1REX0ZSRUUgKi8KKwordm9pZCAqICgqbWJlZHRsc19jYWxsb2MpKCBzaXplX3QsIHNpemVfdCApID0gTUJFRFRMU19QTEFURk9STV9TVERfQ0FMTE9DOwordm9pZCAoKm1iZWR0bHNfZnJlZSkoIHZvaWQgKiApICAgICA9IE1CRURUTFNfUExBVEZPUk1fU1REX0ZSRUU7CisKK2ludCBtYmVkdGxzX3BsYXRmb3JtX3NldF9jYWxsb2NfZnJlZSggdm9pZCAqICgqY2FsbG9jX2Z1bmMpKCBzaXplX3QsIHNpemVfdCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmZyZWVfZnVuYykoIHZvaWQgKiApICkKK3sKKyAgICBtYmVkdGxzX2NhbGxvYyA9IGNhbGxvY19mdW5jOworICAgIG1iZWR0bHNfZnJlZSA9IGZyZWVfZnVuYzsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX01FTU9SWSAqLworCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8c3RkYXJnLmg+CitpbnQgbWJlZHRsc19wbGF0Zm9ybV93aW4zMl9zbnByaW50ZiggY2hhciAqcywgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uICkKK3sKKyAgICBpbnQgcmV0OworICAgIHZhX2xpc3QgYXJncDsKKworICAgIC8qIEF2b2lkIGNhbGxpbmcgdGhlIGludmFsaWQgcGFyYW1ldGVyIGhhbmRsZXIgYnkgY2hlY2tpbmcgb3Vyc2VsdmVzICovCisgICAgaWYoIHMgPT0gTlVMTCB8fCBuID09IDAgfHwgZm10ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICB2YV9zdGFydCggYXJncCwgZm10ICk7CisjaWYgZGVmaW5lZChfVFJVTkNBVEUpCisgICAgcmV0ID0gX3ZzbnByaW50Zl9zKCBzLCBuLCBfVFJVTkNBVEUsIGZtdCwgYXJncCApOworI2Vsc2UKKyAgICByZXQgPSBfdnNucHJpbnRmKCBzLCBuLCBmbXQsIGFyZ3AgKTsKKyAgICBpZiggcmV0IDwgMCB8fCAoc2l6ZV90KSByZXQgPT0gbiApCisgICAgeworICAgICAgICBzW24tMV0gPSAnXDAnOworICAgICAgICByZXQgPSAtMTsKKyAgICB9CisjZW5kaWYKKyAgICB2YV9lbmQoIGFyZ3AgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQpCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYpCisvKgorICogTWFrZSBkdW1teSBmdW5jdGlvbiB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMKKyAqLworc3RhdGljIGludCBwbGF0Zm9ybV9zbnByaW50Zl91bmluaXQoIGNoYXIgKiBzLCBzaXplX3QgbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogZm9ybWF0LCAuLi4gKQoreworICAgICgodm9pZCkgcyk7CisgICAgKCh2b2lkKSBuKTsKKyAgICAoKHZvaWQpIGZvcm1hdCk7CisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYgICAgcGxhdGZvcm1fc25wcmludGZfdW5pbml0CisjZW5kaWYgLyogIU1CRURUTFNfUExBVEZPUk1fU1REX1NOUFJJTlRGICovCisKK2ludCAoKm1iZWR0bHNfc25wcmludGYpKCBjaGFyICogcywgc2l6ZV90IG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiApID0gTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEY7CisKK2ludCBtYmVkdGxzX3BsYXRmb3JtX3NldF9zbnByaW50ZiggaW50ICgqc25wcmludGZfZnVuYykoIGNoYXIgKiBzLCBzaXplX3QgbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiApICkKK3sKKyAgICBtYmVkdGxzX3NucHJpbnRmID0gc25wcmludGZfZnVuYzsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQpCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfUFJJTlRGKQorLyoKKyAqIE1ha2UgZHVtbXkgZnVuY3Rpb24gdG8gcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzCisgKi8KK3N0YXRpYyBpbnQgcGxhdGZvcm1fcHJpbnRmX3VuaW5pdCggY29uc3QgY2hhciAqZm9ybWF0LCAuLi4gKQoreworICAgICgodm9pZCkgZm9ybWF0KTsKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYgICAgcGxhdGZvcm1fcHJpbnRmX3VuaW5pdAorI2VuZGlmIC8qICFNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYgKi8KKworaW50ICgqbWJlZHRsc19wcmludGYpKCBjb25zdCBjaGFyICosIC4uLiApID0gTUJFRFRMU19QTEFURk9STV9TVERfUFJJTlRGOworCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9zZXRfcHJpbnRmKCBpbnQgKCpwcmludGZfZnVuYykoIGNvbnN0IGNoYXIgKiwgLi4uICkgKQoreworICAgIG1iZWR0bHNfcHJpbnRmID0gcHJpbnRmX2Z1bmM7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQpCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URikKKy8qCisgKiBNYWtlIGR1bW15IGZ1bmN0aW9uIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcworICovCitzdGF0aWMgaW50IHBsYXRmb3JtX2ZwcmludGZfdW5pbml0KCBGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uICkKK3sKKyAgICAoKHZvaWQpIHN0cmVhbSk7CisgICAgKCh2b2lkKSBmb3JtYXQpOworICAgIHJldHVybiggMCApOworfQorCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0ZQUklOVEYgICBwbGF0Zm9ybV9mcHJpbnRmX3VuaW5pdAorI2VuZGlmIC8qICFNQkVEVExTX1BMQVRGT1JNX1NURF9GUFJJTlRGICovCisKK2ludCAoKm1iZWR0bHNfZnByaW50ZikoIEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4gKSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URjsKKworaW50IG1iZWR0bHNfcGxhdGZvcm1fc2V0X2ZwcmludGYoIGludCAoKmZwcmludGZfZnVuYykoIEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4gKSApCit7CisgICAgbWJlZHRsc19mcHJpbnRmID0gZnByaW50Zl9mdW5jOworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9FWElUX0FMVCkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUKQorLyoKKyAqIE1ha2UgZHVtbXkgZnVuY3Rpb24gdG8gcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzCisgKi8KK3N0YXRpYyB2b2lkIHBsYXRmb3JtX2V4aXRfdW5pbml0KCBpbnQgc3RhdHVzICkKK3sKKyAgICAoKHZvaWQpIHN0YXR1cyk7Cit9CisKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVCAgIHBsYXRmb3JtX2V4aXRfdW5pbml0CisjZW5kaWYgLyogIU1CRURUTFNfUExBVEZPUk1fU1REX0VYSVQgKi8KKwordm9pZCAoKm1iZWR0bHNfZXhpdCkoIGludCBzdGF0dXMgKSA9IE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVQ7CisKK2ludCBtYmVkdGxzX3BsYXRmb3JtX3NldF9leGl0KCB2b2lkICgqZXhpdF9mdW5jKSggaW50IHN0YXR1cyApICkKK3sKKyAgICBtYmVkdGxzX2V4aXQgPSBleGl0X2Z1bmM7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9FWElUX0FMVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9USU1FX0FMVCkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FKQorLyoKKyAqIE1ha2UgZHVtbXkgZnVuY3Rpb24gdG8gcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzCisgKi8KK3N0YXRpYyBtYmVkdGxzX3RpbWVfdCBwbGF0Zm9ybV90aW1lX3VuaW5pdCggbWJlZHRsc190aW1lX3QqIHRpbWVyICkKK3sKKyAgICAoKHZvaWQpIHRpbWVyKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FICAgcGxhdGZvcm1fdGltZV91bmluaXQKKyNlbmRpZiAvKiAhTUJFRFRMU19QTEFURk9STV9TVERfVElNRSAqLworCittYmVkdGxzX3RpbWVfdCAoKm1iZWR0bHNfdGltZSkoIG1iZWR0bHNfdGltZV90KiB0aW1lciApID0gTUJFRFRMU19QTEFURk9STV9TVERfVElNRTsKKworaW50IG1iZWR0bHNfcGxhdGZvcm1fc2V0X3RpbWUoIG1iZWR0bHNfdGltZV90ICgqdGltZV9mdW5jKSggbWJlZHRsc190aW1lX3QqIHRpbWVyICkgKQoreworICAgIG1iZWR0bHNfdGltZSA9IHRpbWVfZnVuYzsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVfVElNRSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKy8qIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgc2VlZCBmdW5jdGlvbnMgdXNlCisgKiBzdGFuZGFyZCBsaWJjIGZpbGUgZnVuY3Rpb25zIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gYSBwcmUtZGVmaW5lZCBmaWxlbmFtZQorICovCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF9yZWFkKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICkKK3sKKyAgICBGSUxFICpmaWxlOworICAgIHNpemVfdCBuOworCisgICAgaWYoICggZmlsZSA9IGZvcGVuKCBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX0ZJTEUsICJyYiIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiggKCBuID0gZnJlYWQoIGJ1ZiwgMSwgYnVmX2xlbiwgZmlsZSApICkgIT0gYnVmX2xlbiApCisgICAgeworICAgICAgICBmY2xvc2UoIGZpbGUgKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZjbG9zZSggZmlsZSApOworICAgIHJldHVybiggbiApOworfQorCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF93cml0ZSggdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiApCit7CisgICAgRklMRSAqZmlsZTsKKyAgICBzaXplX3QgbjsKKworICAgIGlmKCAoIGZpbGUgPSBmb3BlbiggTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9GSUxFLCAidyIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiggKCBuID0gZndyaXRlKCBidWYsIDEsIGJ1Zl9sZW4sIGZpbGUgKSApICE9IGJ1Zl9sZW4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmaWxlICk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGZpbGUgKTsKKyAgICByZXR1cm4oIG4gKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX0FMVCkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1JFQUQpCisvKgorICogTWFrZSBkdW1teSBmdW5jdGlvbiB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMKKyAqLworc3RhdGljIGludCBwbGF0Zm9ybV9udl9zZWVkX3JlYWRfdW5pbml0KCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICkKK3sKKyAgICAoKHZvaWQpIGJ1Zik7CisgICAgKCh2b2lkKSBidWZfbGVuKTsKKyAgICByZXR1cm4oIC0xICk7Cit9CisKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9SRUFEICAgcGxhdGZvcm1fbnZfc2VlZF9yZWFkX3VuaW5pdAorI2VuZGlmIC8qICFNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1JFQUQgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfV1JJVEUpCisvKgorICogTWFrZSBkdW1teSBmdW5jdGlvbiB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMKKyAqLworc3RhdGljIGludCBwbGF0Zm9ybV9udl9zZWVkX3dyaXRlX3VuaW5pdCggdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiApCit7CisgICAgKCh2b2lkKSBidWYpOworICAgICgodm9pZCkgYnVmX2xlbik7CisgICAgcmV0dXJuKCAtMSApOworfQorCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfV1JJVEUgICBwbGF0Zm9ybV9udl9zZWVkX3dyaXRlX3VuaW5pdAorI2VuZGlmIC8qICFNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1dSSVRFICovCisKK2ludCAoKm1iZWR0bHNfbnZfc2VlZF9yZWFkKSggdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiApID0KKyAgICAgICAgICAgIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfUkVBRDsKK2ludCAoKm1iZWR0bHNfbnZfc2VlZF93cml0ZSkoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKSA9CisgICAgICAgICAgICBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1dSSVRFOworCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9zZXRfbnZfc2VlZCgKKyAgICAgICAgaW50ICgqbnZfc2VlZF9yZWFkX2Z1bmMpKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICksCisgICAgICAgIGludCAoKm52X3NlZWRfd3JpdGVfZnVuYykoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKSApCit7CisgICAgbWJlZHRsc19udl9zZWVkX3JlYWQgPSBudl9zZWVkX3JlYWRfZnVuYzsKKyAgICBtYmVkdGxzX252X3NlZWRfd3JpdGUgPSBudl9zZWVkX3dyaXRlX2Z1bmM7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX0FMVCAqLworI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3JpcGVtZDE2MC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcmlwZW1kMTYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiMGE2MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3JpcGVtZDE2MC5jCkBAIC0wLDAgKzEsNDY3IEBACisvKgorICogIFJJUEUgTUQtMTYwIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qCisgKiAgVGhlIFJJUEVNRC0xNjAgYWxnb3JpdGhtIHdhcyBkZXNpZ25lZCBieSBSSVBFIGluIDE5OTYKKyAqICBodHRwOi8vaG9tZXMuZXNhdC5rdWxldXZlbi5iZS9+Ym9zc2VsYWUvbWJlZHRsc19yaXBlbWQxNjAuaHRtbAorICogIGh0dHA6Ly9laGFzaC5pYWlrLnR1Z3Jhei5hdC93aWtpL1JJUEVNRC0xNjAKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JJUEVNRDE2MF9DKQorCisjaW5jbHVkZSAibWJlZHRscy9yaXBlbWQxNjAuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKy8qCisgKiAzMi1iaXQgaW50ZWdlciBtYW5pcHVsYXRpb24gbWFjcm9zIChsaXR0bGUgZW5kaWFuKQorICovCisjaWZuZGVmIEdFVF9VSU5UMzJfTEUKKyNkZWZpbmUgR0VUX1VJTlQzMl9MRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKG4pID0gKCAodWludDMyX3QpIChiKVsoaSkgICAgXSAgICAgICApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDFdIDw8ICA4ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMl0gPDwgMTYgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAzXSA8PCAyNCApOyAgICAgICAgICAgIFwKK30KKyNlbmRpZgorCisjaWZuZGVmIFBVVF9VSU5UMzJfTEUKKyNkZWZpbmUgUFVUX1VJTlQzMl9MRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChiKVsoaSkgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pICAgICAgICkgJiAweEZGICk7ICAgIFwKKyAgICAoYilbKGkpICsgMV0gPSAodW5zaWduZWQgY2hhcikgKCAoIChuKSA+PiAgOCApICYgMHhGRiApOyAgICBcCisgICAgKGIpWyhpKSArIDJdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgPj4gMTYgKSAmIDB4RkYgKTsgICAgXAorICAgIChiKVsoaSkgKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pID4+IDI0ICkgJiAweEZGICk7ICAgIFwKK30KKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCit2b2lkIG1iZWR0bHNfcmlwZW1kMTYwX2luaXQoIG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjBfZnJlZSggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX3JpcGVtZDE2MF9jbG9uZSggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqc3JjICkKK3sKKyAgICAqZHN0ID0gKnNyYzsKK30KKworLyoKKyAqIFJJUEVNRC0xNjAgY29udGV4dCBzZXR1cAorICovCit2b2lkIG1iZWR0bHNfcmlwZW1kMTYwX3N0YXJ0cyggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqY3R4ICkKK3sKKyAgICBjdHgtPnRvdGFsWzBdID0gMDsKKyAgICBjdHgtPnRvdGFsWzFdID0gMDsKKworICAgIGN0eC0+c3RhdGVbMF0gPSAweDY3NDUyMzAxOworICAgIGN0eC0+c3RhdGVbMV0gPSAweEVGQ0RBQjg5OworICAgIGN0eC0+c3RhdGVbMl0gPSAweDk4QkFEQ0ZFOworICAgIGN0eC0+c3RhdGVbM10gPSAweDEwMzI1NDc2OworICAgIGN0eC0+c3RhdGVbNF0gPSAweEMzRDJFMUYwOworfQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19SSVBFTUQxNjBfUFJPQ0VTU19BTFQpCisvKgorICogUHJvY2VzcyBvbmUgYmxvY2sKKyAqLwordm9pZCBtYmVkdGxzX3JpcGVtZDE2MF9wcm9jZXNzKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVs2NF0gKQoreworICAgIHVpbnQzMl90IEEsIEIsIEMsIEQsIEUsIEFwLCBCcCwgQ3AsIERwLCBFcCwgWFsxNl07CisKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyAwXSwgZGF0YSwgIDAgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyAxXSwgZGF0YSwgIDQgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyAyXSwgZGF0YSwgIDggKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyAzXSwgZGF0YSwgMTIgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA0XSwgZGF0YSwgMTYgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA1XSwgZGF0YSwgMjAgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA2XSwgZGF0YSwgMjQgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA3XSwgZGF0YSwgMjggKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA4XSwgZGF0YSwgMzIgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA5XSwgZGF0YSwgMzYgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzEwXSwgZGF0YSwgNDAgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzExXSwgZGF0YSwgNDQgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzEyXSwgZGF0YSwgNDggKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzEzXSwgZGF0YSwgNTIgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzE0XSwgZGF0YSwgNTYgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzE1XSwgZGF0YSwgNjAgKTsKKworICAgIEEgPSBBcCA9IGN0eC0+c3RhdGVbMF07CisgICAgQiA9IEJwID0gY3R4LT5zdGF0ZVsxXTsKKyAgICBDID0gQ3AgPSBjdHgtPnN0YXRlWzJdOworICAgIEQgPSBEcCA9IGN0eC0+c3RhdGVbM107CisgICAgRSA9IEVwID0gY3R4LT5zdGF0ZVs0XTsKKworI2RlZmluZSBGMSggeCwgeSwgeiApICAgKCB4IF4geSBeIHogKQorI2RlZmluZSBGMiggeCwgeSwgeiApICAgKCAoIHggJiB5ICkgfCAoIH54ICYgeiApICkKKyNkZWZpbmUgRjMoIHgsIHksIHogKSAgICggKCB4IHwgfnkgKSBeIHogKQorI2RlZmluZSBGNCggeCwgeSwgeiApICAgKCAoIHggJiB6ICkgfCAoIHkgJiB+eiApICkKKyNkZWZpbmUgRjUoIHgsIHksIHogKSAgICggeCBeICggeSB8IH56ICkgKQorCisjZGVmaW5lIFMoIHgsIG4gKSAoICggeCA8PCBuICkgfCAoIHggPj4gKDMyIC0gbikgKSApCisKKyNkZWZpbmUgUCggYSwgYiwgYywgZCwgZSwgciwgcywgZiwgayApICAgICAgXAorICAgIGEgKz0gZiggYiwgYywgZCApICsgWFtyXSArIGs7ICAgICAgICAgICBcCisgICAgYSA9IFMoIGEsIHMgKSArIGU7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjID0gUyggYywgMTAgKTsKKworI2RlZmluZSBQMiggYSwgYiwgYywgZCwgZSwgciwgcywgcnAsIHNwICkgICBcCisgICAgUCggYSwgYiwgYywgZCwgZSwgciwgcywgRiwgSyApOyAgICAgICAgIFwKKyAgICBQKCBhICMjIHAsIGIgIyMgcCwgYyAjIyBwLCBkICMjIHAsIGUgIyMgcCwgcnAsIHNwLCBGcCwgS3AgKTsKKworI2RlZmluZSBGICAgRjEKKyNkZWZpbmUgSyAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRnAgIEY1CisjZGVmaW5lIEtwICAweDUwQTI4QkU2CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsICAwLCAxMSwgIDUsICA4ICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsICAxLCAxNCwgMTQsICA5ICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsICAyLCAxNSwgIDcsICA5ICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsICAzLCAxMiwgIDAsIDExICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsICA0LCAgNSwgIDksIDEzICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsICA1LCAgOCwgIDIsIDE1ICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsICA2LCAgNywgMTEsIDE1ICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsICA3LCAgOSwgIDQsICA1ICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsICA4LCAxMSwgMTMsICA3ICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsICA5LCAxMywgIDYsICA3ICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsIDEwLCAxNCwgMTUsICA4ICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsIDExLCAxNSwgIDgsIDExICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsIDEyLCAgNiwgIDEsIDE0ICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsIDEzLCAgNywgMTAsIDE0ICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsIDE0LCAgOSwgIDMsIDEyICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsIDE1LCAgOCwgMTIsICA2ICk7CisjdW5kZWYgRgorI3VuZGVmIEsKKyN1bmRlZiBGcAorI3VuZGVmIEtwCisKKyNkZWZpbmUgRiAgIEYyCisjZGVmaW5lIEsgICAweDVBODI3OTk5CisjZGVmaW5lIEZwICBGNAorI2RlZmluZSBLcCAgMHg1QzRERDEyNAorICAgIFAyKCBFLCBBLCBCLCBDLCBELCAgNywgIDcsICA2LCAgOSApOworICAgIFAyKCBELCBFLCBBLCBCLCBDLCAgNCwgIDYsIDExLCAxMyApOworICAgIFAyKCBDLCBELCBFLCBBLCBCLCAxMywgIDgsICAzLCAxNSApOworICAgIFAyKCBCLCBDLCBELCBFLCBBLCAgMSwgMTMsICA3LCAgNyApOworICAgIFAyKCBBLCBCLCBDLCBELCBFLCAxMCwgMTEsICAwLCAxMiApOworICAgIFAyKCBFLCBBLCBCLCBDLCBELCAgNiwgIDksIDEzLCAgOCApOworICAgIFAyKCBELCBFLCBBLCBCLCBDLCAxNSwgIDcsICA1LCAgOSApOworICAgIFAyKCBDLCBELCBFLCBBLCBCLCAgMywgMTUsIDEwLCAxMSApOworICAgIFAyKCBCLCBDLCBELCBFLCBBLCAxMiwgIDcsIDE0LCAgNyApOworICAgIFAyKCBBLCBCLCBDLCBELCBFLCAgMCwgMTIsIDE1LCAgNyApOworICAgIFAyKCBFLCBBLCBCLCBDLCBELCAgOSwgMTUsICA4LCAxMiApOworICAgIFAyKCBELCBFLCBBLCBCLCBDLCAgNSwgIDksIDEyLCAgNyApOworICAgIFAyKCBDLCBELCBFLCBBLCBCLCAgMiwgMTEsICA0LCAgNiApOworICAgIFAyKCBCLCBDLCBELCBFLCBBLCAxNCwgIDcsICA5LCAxNSApOworICAgIFAyKCBBLCBCLCBDLCBELCBFLCAxMSwgMTMsICAxLCAxMyApOworICAgIFAyKCBFLCBBLCBCLCBDLCBELCAgOCwgMTIsICAyLCAxMSApOworI3VuZGVmIEYKKyN1bmRlZiBLCisjdW5kZWYgRnAKKyN1bmRlZiBLcAorCisjZGVmaW5lIEYgICBGMworI2RlZmluZSBLICAgMHg2RUQ5RUJBMQorI2RlZmluZSBGcCAgRjMKKyNkZWZpbmUgS3AgIDB4NkQ3MDNFRjMKKyAgICBQMiggRCwgRSwgQSwgQiwgQywgIDMsIDExLCAxNSwgIDkgKTsKKyAgICBQMiggQywgRCwgRSwgQSwgQiwgMTAsIDEzLCAgNSwgIDcgKTsKKyAgICBQMiggQiwgQywgRCwgRSwgQSwgMTQsICA2LCAgMSwgMTUgKTsKKyAgICBQMiggQSwgQiwgQywgRCwgRSwgIDQsICA3LCAgMywgMTEgKTsKKyAgICBQMiggRSwgQSwgQiwgQywgRCwgIDksIDE0LCAgNywgIDggKTsKKyAgICBQMiggRCwgRSwgQSwgQiwgQywgMTUsICA5LCAxNCwgIDYgKTsKKyAgICBQMiggQywgRCwgRSwgQSwgQiwgIDgsIDEzLCAgNiwgIDYgKTsKKyAgICBQMiggQiwgQywgRCwgRSwgQSwgIDEsIDE1LCAgOSwgMTQgKTsKKyAgICBQMiggQSwgQiwgQywgRCwgRSwgIDIsIDE0LCAxMSwgMTIgKTsKKyAgICBQMiggRSwgQSwgQiwgQywgRCwgIDcsICA4LCAgOCwgMTMgKTsKKyAgICBQMiggRCwgRSwgQSwgQiwgQywgIDAsIDEzLCAxMiwgIDUgKTsKKyAgICBQMiggQywgRCwgRSwgQSwgQiwgIDYsICA2LCAgMiwgMTQgKTsKKyAgICBQMiggQiwgQywgRCwgRSwgQSwgMTMsICA1LCAxMCwgMTMgKTsKKyAgICBQMiggQSwgQiwgQywgRCwgRSwgMTEsIDEyLCAgMCwgMTMgKTsKKyAgICBQMiggRSwgQSwgQiwgQywgRCwgIDUsICA3LCAgNCwgIDcgKTsKKyAgICBQMiggRCwgRSwgQSwgQiwgQywgMTIsICA1LCAxMywgIDUgKTsKKyN1bmRlZiBGCisjdW5kZWYgSworI3VuZGVmIEZwCisjdW5kZWYgS3AKKworI2RlZmluZSBGICAgRjQKKyNkZWZpbmUgSyAgIDB4OEYxQkJDREMKKyNkZWZpbmUgRnAgIEYyCisjZGVmaW5lIEtwICAweDdBNkQ3NkU5CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsICAxLCAxMSwgIDgsIDE1ICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsICA5LCAxMiwgIDYsICA1ICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsIDExLCAxNCwgIDQsICA4ICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsIDEwLCAxNSwgIDEsIDExICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsICAwLCAxNCwgIDMsIDE0ICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsICA4LCAxNSwgMTEsIDE0ICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsIDEyLCAgOSwgMTUsICA2ICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsICA0LCAgOCwgIDAsIDE0ICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsIDEzLCAgOSwgIDUsICA2ICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsICAzLCAxNCwgMTIsICA5ICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsICA3LCAgNSwgIDIsIDEyICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsIDE1LCAgNiwgMTMsICA5ICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsIDE0LCAgOCwgIDksIDEyICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsICA1LCAgNiwgIDcsICA1ICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsICA2LCAgNSwgMTAsIDE1ICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsICAyLCAxMiwgMTQsICA4ICk7CisjdW5kZWYgRgorI3VuZGVmIEsKKyN1bmRlZiBGcAorI3VuZGVmIEtwCisKKyNkZWZpbmUgRiAgIEY1CisjZGVmaW5lIEsgICAweEE5NTNGRDRFCisjZGVmaW5lIEZwICBGMQorI2RlZmluZSBLcCAgMHgwMDAwMDAwMAorICAgIFAyKCBCLCBDLCBELCBFLCBBLCAgNCwgIDksIDEyLCAgOCApOworICAgIFAyKCBBLCBCLCBDLCBELCBFLCAgMCwgMTUsIDE1LCAgNSApOworICAgIFAyKCBFLCBBLCBCLCBDLCBELCAgNSwgIDUsIDEwLCAxMiApOworICAgIFAyKCBELCBFLCBBLCBCLCBDLCAgOSwgMTEsICA0LCAgOSApOworICAgIFAyKCBDLCBELCBFLCBBLCBCLCAgNywgIDYsICAxLCAxMiApOworICAgIFAyKCBCLCBDLCBELCBFLCBBLCAxMiwgIDgsICA1LCAgNSApOworICAgIFAyKCBBLCBCLCBDLCBELCBFLCAgMiwgMTMsICA4LCAxNCApOworICAgIFAyKCBFLCBBLCBCLCBDLCBELCAxMCwgMTIsICA3LCAgNiApOworICAgIFAyKCBELCBFLCBBLCBCLCBDLCAxNCwgIDUsICA2LCAgOCApOworICAgIFAyKCBDLCBELCBFLCBBLCBCLCAgMSwgMTIsICAyLCAxMyApOworICAgIFAyKCBCLCBDLCBELCBFLCBBLCAgMywgMTMsIDEzLCAgNiApOworICAgIFAyKCBBLCBCLCBDLCBELCBFLCAgOCwgMTQsIDE0LCAgNSApOworICAgIFAyKCBFLCBBLCBCLCBDLCBELCAxMSwgMTEsICAwLCAxNSApOworICAgIFAyKCBELCBFLCBBLCBCLCBDLCAgNiwgIDgsICAzLCAxMyApOworICAgIFAyKCBDLCBELCBFLCBBLCBCLCAxNSwgIDUsICA5LCAxMSApOworICAgIFAyKCBCLCBDLCBELCBFLCBBLCAxMywgIDYsIDExLCAxMSApOworI3VuZGVmIEYKKyN1bmRlZiBLCisjdW5kZWYgRnAKKyN1bmRlZiBLcAorCisgICAgQyAgICAgICAgICAgICA9IGN0eC0+c3RhdGVbMV0gKyBDICsgRHA7CisgICAgY3R4LT5zdGF0ZVsxXSA9IGN0eC0+c3RhdGVbMl0gKyBEICsgRXA7CisgICAgY3R4LT5zdGF0ZVsyXSA9IGN0eC0+c3RhdGVbM10gKyBFICsgQXA7CisgICAgY3R4LT5zdGF0ZVszXSA9IGN0eC0+c3RhdGVbNF0gKyBBICsgQnA7CisgICAgY3R4LT5zdGF0ZVs0XSA9IGN0eC0+c3RhdGVbMF0gKyBCICsgQ3A7CisgICAgY3R4LT5zdGF0ZVswXSA9IEM7Cit9CisjZW5kaWYgLyogIU1CRURUTFNfUklQRU1EMTYwX1BST0NFU1NfQUxUICovCisKKy8qCisgKiBSSVBFTUQtMTYwIHByb2Nlc3MgYnVmZmVyCisgKi8KK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjBfdXBkYXRlKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiApCit7CisgICAgc2l6ZV90IGZpbGw7CisgICAgdWludDMyX3QgbGVmdDsKKworICAgIGlmKCBpbGVuID09IDAgKQorICAgICAgICByZXR1cm47CisKKyAgICBsZWZ0ID0gY3R4LT50b3RhbFswXSAmIDB4M0Y7CisgICAgZmlsbCA9IDY0IC0gbGVmdDsKKworICAgIGN0eC0+dG90YWxbMF0gKz0gKHVpbnQzMl90KSBpbGVuOworICAgIGN0eC0+dG90YWxbMF0gJj0gMHhGRkZGRkZGRjsKKworICAgIGlmKCBjdHgtPnRvdGFsWzBdIDwgKHVpbnQzMl90KSBpbGVuICkKKyAgICAgICAgY3R4LT50b3RhbFsxXSsrOworCisgICAgaWYoIGxlZnQgJiYgaWxlbiA+PSBmaWxsICkKKyAgICB7CisgICAgICAgIG1lbWNweSggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksIGlucHV0LCBmaWxsICk7CisgICAgICAgIG1iZWR0bHNfcmlwZW1kMTYwX3Byb2Nlc3MoIGN0eCwgY3R4LT5idWZmZXIgKTsKKyAgICAgICAgaW5wdXQgKz0gZmlsbDsKKyAgICAgICAgaWxlbiAgLT0gZmlsbDsKKyAgICAgICAgbGVmdCA9IDA7CisgICAgfQorCisgICAgd2hpbGUoIGlsZW4gPj0gNjQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19yaXBlbWQxNjBfcHJvY2VzcyggY3R4LCBpbnB1dCApOworICAgICAgICBpbnB1dCArPSA2NDsKKyAgICAgICAgaWxlbiAgLT0gNjQ7CisgICAgfQorCisgICAgaWYoIGlsZW4gPiAwICkKKyAgICB7CisgICAgICAgIG1lbWNweSggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksIGlucHV0LCBpbGVuICk7CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByaXBlbWQxNjBfcGFkZGluZ1s2NF0gPQoreworIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKKy8qCisgKiBSSVBFTUQtMTYwIGZpbmFsIGRpZ2VzdAorICovCit2b2lkIG1iZWR0bHNfcmlwZW1kMTYwX2ZpbmlzaCggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIG91dHB1dFsyMF0gKQoreworICAgIHVpbnQzMl90IGxhc3QsIHBhZG47CisgICAgdWludDMyX3QgaGlnaCwgbG93OworICAgIHVuc2lnbmVkIGNoYXIgbXNnbGVuWzhdOworCisgICAgaGlnaCA9ICggY3R4LT50b3RhbFswXSA+PiAyOSApCisgICAgICAgICB8ICggY3R4LT50b3RhbFsxXSA8PCAgMyApOworICAgIGxvdyAgPSAoIGN0eC0+dG90YWxbMF0gPDwgIDMgKTsKKworICAgIFBVVF9VSU5UMzJfTEUoIGxvdywgIG1zZ2xlbiwgMCApOworICAgIFBVVF9VSU5UMzJfTEUoIGhpZ2gsIG1zZ2xlbiwgNCApOworCisgICAgbGFzdCA9IGN0eC0+dG90YWxbMF0gJiAweDNGOworICAgIHBhZG4gPSAoIGxhc3QgPCA1NiApID8gKCA1NiAtIGxhc3QgKSA6ICggMTIwIC0gbGFzdCApOworCisgICAgbWJlZHRsc19yaXBlbWQxNjBfdXBkYXRlKCBjdHgsIHJpcGVtZDE2MF9wYWRkaW5nLCBwYWRuICk7CisgICAgbWJlZHRsc19yaXBlbWQxNjBfdXBkYXRlKCBjdHgsIG1zZ2xlbiwgOCApOworCisgICAgUFVUX1VJTlQzMl9MRSggY3R4LT5zdGF0ZVswXSwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJfTEUoIGN0eC0+c3RhdGVbMV0sIG91dHB1dCwgIDQgKTsKKyAgICBQVVRfVUlOVDMyX0xFKCBjdHgtPnN0YXRlWzJdLCBvdXRwdXQsICA4ICk7CisgICAgUFVUX1VJTlQzMl9MRSggY3R4LT5zdGF0ZVszXSwgb3V0cHV0LCAxMiApOworICAgIFBVVF9VSU5UMzJfTEUoIGN0eC0+c3RhdGVbNF0sIG91dHB1dCwgMTYgKTsKK30KKworLyoKKyAqIG91dHB1dCA9IFJJUEVNRC0xNjAoIGlucHV0IGJ1ZmZlciApCisgKi8KK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjAoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsyMF0gKQoreworICAgIG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgY3R4OworCisgICAgbWJlZHRsc19yaXBlbWQxNjBfaW5pdCggJmN0eCApOworICAgIG1iZWR0bHNfcmlwZW1kMTYwX3N0YXJ0cyggJmN0eCApOworICAgIG1iZWR0bHNfcmlwZW1kMTYwX3VwZGF0ZSggJmN0eCwgaW5wdXQsIGlsZW4gKTsKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF9maW5pc2goICZjdHgsIG91dHB1dCApOworICAgIG1iZWR0bHNfcmlwZW1kMTYwX2ZyZWUoICZjdHggKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisvKgorICogVGVzdCB2ZWN0b3JzIGZyb20gdGhlIFJJUEVNRC0xNjAgcGFwZXIgYW5kCisgKiBodHRwOi8vaG9tZXMuZXNhdC5rdWxldXZlbi5iZS9+Ym9zc2VsYWUvbWJlZHRsc19yaXBlbWQxNjAuaHRtbCNITUFDCisgKi8KKyNkZWZpbmUgVEVTVFMgICA4CisjZGVmaW5lIEtFWVMgICAgMgorc3RhdGljIGNvbnN0IGNoYXIgKnJpcGVtZDE2MF90ZXN0X2lucHV0W1RFU1RTXSA9Cit7CisgICAgIiIsCisgICAgImEiLAorICAgICJhYmMiLAorICAgICJtZXNzYWdlIGRpZ2VzdCIsCisgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwKKyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiLAorICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIsCisgICAgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiCisgICAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJpcGVtZDE2MF90ZXN0X21kW1RFU1RTXVsyMF0gPQoreworICAgIHsgMHg5YywgMHgxMSwgMHg4NSwgMHhhNSwgMHhjNSwgMHhlOSwgMHhmYywgMHg1NCwgMHg2MSwgMHgyOCwKKyAgICAgIDB4MDgsIDB4OTcsIDB4N2UsIDB4ZTgsIDB4ZjUsIDB4NDgsIDB4YjIsIDB4MjUsIDB4OGQsIDB4MzEgfSwKKyAgICB7IDB4MGIsIDB4ZGMsIDB4OWQsIDB4MmQsIDB4MjUsIDB4NmIsIDB4M2UsIDB4ZTksIDB4ZGEsIDB4YWUsCisgICAgICAweDM0LCAweDdiLCAweGU2LCAweGY0LCAweGRjLCAweDgzLCAweDVhLCAweDQ2LCAweDdmLCAweGZlIH0sCisgICAgeyAweDhlLCAweGIyLCAweDA4LCAweGY3LCAweGUwLCAweDVkLCAweDk4LCAweDdhLCAweDliLCAweDA0LAorICAgICAgMHg0YSwgMHg4ZSwgMHg5OCwgMHhjNiwgMHhiMCwgMHg4NywgMHhmMSwgMHg1YSwgMHgwYiwgMHhmYyB9LAorICAgIHsgMHg1ZCwgMHgwNiwgMHg4OSwgMHhlZiwgMHg0OSwgMHhkMiwgMHhmYSwgMHhlNSwgMHg3MiwgMHhiOCwKKyAgICAgIDB4ODEsIDB4YjEsIDB4MjMsIDB4YTgsIDB4NWYsIDB4ZmEsIDB4MjEsIDB4NTksIDB4NWYsIDB4MzYgfSwKKyAgICB7IDB4ZjcsIDB4MWMsIDB4MjcsIDB4MTAsIDB4OWMsIDB4NjksIDB4MmMsIDB4MWIsIDB4NTYsIDB4YmIsCisgICAgICAweGRjLCAweGViLCAweDViLCAweDlkLCAweDI4LCAweDY1LCAweGIzLCAweDcwLCAweDhkLCAweGJjIH0sCisgICAgeyAweDEyLCAweGEwLCAweDUzLCAweDM4LCAweDRhLCAweDljLCAweDBjLCAweDg4LCAweGU0LCAweDA1LAorICAgICAgMHhhMCwgMHg2YywgMHgyNywgMHhkYywgMHhmNCwgMHg5YSwgMHhkYSwgMHg2MiwgMHhlYiwgMHgyYiB9LAorICAgIHsgMHhiMCwgMHhlMiwgMHgwYiwgMHg2ZSwgMHgzMSwgMHgxNiwgMHg2NCwgMHgwMiwgMHg4NiwgMHhlZCwKKyAgICAgIDB4M2EsIDB4ODcsIDB4YTUsIDB4NzEsIDB4MzAsIDB4NzksIDB4YjIsIDB4MWYsIDB4NTEsIDB4ODkgfSwKKyAgICB7IDB4OWIsIDB4NzUsIDB4MmUsIDB4NDUsIDB4NTcsIDB4M2QsIDB4NGIsIDB4MzksIDB4ZjQsIDB4ZGIsCisgICAgICAweGQzLCAweDMyLCAweDNjLCAweGFiLCAweDgyLCAweGJmLCAweDYzLCAweDMyLCAweDZiLCAweGZiIH0sCit9OworCisvKgorICogQ2hlY2t1cCByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX3JpcGVtZDE2MF9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsyMF07CisKKyAgICBtZW1zZXQoIG91dHB1dCwgMCwgc2l6ZW9mIG91dHB1dCApOworCisgICAgZm9yKCBpID0gMDsgaSA8IFRFU1RTOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgUklQRU1ELTE2MCB0ZXN0ICMlZDogIiwgaSArIDEgKTsKKworICAgICAgICBtYmVkdGxzX3JpcGVtZDE2MCggKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcmlwZW1kMTYwX3Rlc3RfaW5wdXRbaV0sCisgICAgICAgICAgICAgICAgICAgc3RybGVuKCByaXBlbWQxNjBfdGVzdF9pbnB1dFtpXSApLAorICAgICAgICAgICAgICAgICAgIG91dHB1dCApOworCisgICAgICAgIGlmKCBtZW1jbXAoIG91dHB1dCwgcmlwZW1kMTYwX3Rlc3RfbWRbaV0sIDIwICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19SSVBFTUQxNjBfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcnNhLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9yc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGVmMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcnNhLmMKQEAgLTAsMCArMSwxNzMwIEBACisvKgorICogIFRoZSBSU0EgcHVibGljLWtleSBjcnlwdG9zeXN0ZW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIGZvbGxvd2luZyBzb3VyY2VzIHdlcmUgcmVmZXJlbmNlZCBpbiB0aGUgZGVzaWduIG9mIHRoaXMgaW1wbGVtZW50YXRpb24KKyAqICBvZiB0aGUgUlNBIGFsZ29yaXRobToKKyAqCisgKiAgWzFdIEEgbWV0aG9kIGZvciBvYnRhaW5pbmcgZGlnaXRhbCBzaWduYXR1cmVzIGFuZCBwdWJsaWMta2V5IGNyeXB0b3N5c3RlbXMKKyAqICAgICAgUiBSaXZlc3QsIEEgU2hhbWlyLCBhbmQgTCBBZGxlbWFuCisgKiAgICAgIGh0dHA6Ly9wZW9wbGUuY3NhaWwubWl0LmVkdS9yaXZlc3QvcHVicy5odG1sI1JTQTc4CisgKgorICogIFsyXSBIYW5kYm9vayBvZiBBcHBsaWVkIENyeXB0b2dyYXBoeSAtIDE5OTcsIENoYXB0ZXIgOAorICogICAgICBNZW5lemVzLCB2YW4gT29yc2Nob3QgYW5kIFZhbnN0b25lCisgKgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgIGZyZWUKKyNlbmRpZgorCisvKgorICogSW5pdGlhbGl6ZSBhbiBSU0EgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfcnNhX2luaXQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgIGludCBwYWRkaW5nLAorICAgICAgICAgICAgICAgaW50IGhhc2hfaWQgKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfcnNhX2NvbnRleHQgKSApOworCisgICAgbWJlZHRsc19yc2Ffc2V0X3BhZGRpbmcoIGN0eCwgcGFkZGluZywgaGFzaF9pZCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfbXV0ZXhfaW5pdCggJmN0eC0+bXV0ZXggKTsKKyNlbmRpZgorfQorCisvKgorICogU2V0IHBhZGRpbmcgZm9yIGFuIGV4aXN0aW5nIFJTQSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19yc2Ffc2V0X3BhZGRpbmcoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwgaW50IHBhZGRpbmcsIGludCBoYXNoX2lkICkKK3sKKyAgICBjdHgtPnBhZGRpbmcgPSBwYWRkaW5nOworICAgIGN0eC0+aGFzaF9pZCA9IGhhc2hfaWQ7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0VOUFJJTUUpCisKKy8qCisgKiBHZW5lcmF0ZSBhbiBSU0Ega2V5cGFpcgorICovCitpbnQgbWJlZHRsc19yc2FfZ2VuX2tleSggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJpdHMsIGludCBleHBvbmVudCApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waSBQMSwgUTEsIEgsIEc7CisKKyAgICBpZiggZl9ybmcgPT0gTlVMTCB8fCBuYml0cyA8IDEyOCB8fCBleHBvbmVudCA8IDMgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIG5iaXRzICUgMiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUDEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlExICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJkggKTsgbWJlZHRsc19tcGlfaW5pdCggJkcgKTsKKworICAgIC8qCisgICAgICogZmluZCBwcmltZXMgUCBhbmQgUSB3aXRoIFEgPCBQIHNvIHRoYXQ6CisgICAgICogR0NEKCBFLCAoUC0xKSooUS0xKSApID09IDEKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZjdHgtPkUsIGV4cG9uZW50ICkgKTsKKworICAgIGRvCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dlbl9wcmltZSggJmN0eC0+UCwgbmJpdHMgPj4gMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl9ybmcsIHBfcm5nICkgKTsKKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dlbl9wcmltZSggJmN0eC0+USwgbmJpdHMgPj4gMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl9ybmcsIHBfcm5nICkgKTsKKworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJmN0eC0+UCwgJmN0eC0+USApID09IDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmY3R4LT5OLCAmY3R4LT5QLCAmY3R4LT5RICkgKTsKKyAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2JpdGxlbiggJmN0eC0+TiApICE9IG5iaXRzICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmY3R4LT5QLCAmY3R4LT5RICkgPCAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tcGlfc3dhcCggJmN0eC0+UCwgJmN0eC0+USApOworCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2ludCggJlAxLCAmY3R4LT5QLCAxICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUTEsICZjdHgtPlEsIDEgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZILCAmUDEsICZRMSApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ2NkKCAmRywgJmN0eC0+RSwgJkggICkgKTsKKyAgICB9CisgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZHLCAxICkgIT0gMCApOworCisgICAgLyoKKyAgICAgKiBEICA9IEVeLTEgbW9kICgoUC0xKSooUS0xKSkKKyAgICAgKiBEUCA9IEQgbW9kIChQIC0gMSkKKyAgICAgKiBEUSA9IEQgbW9kIChRIC0gMSkKKyAgICAgKiBRUCA9IFFeLTEgbW9kIFAKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHgtPkQgLCAmY3R4LT5FLCAmSCAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC0+RFAsICZjdHgtPkQsICZQMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LT5EUSwgJmN0eC0+RCwgJlExICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHgtPlFQLCAmY3R4LT5RLCAmY3R4LT5QICkgKTsKKworICAgIGN0eC0+bGVuID0gKCBtYmVkdGxzX21waV9iaXRsZW4oICZjdHgtPk4gKSArIDcgKSA+PiAzOworCitjbGVhbnVwOgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJlAxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZRMSApOyBtYmVkdGxzX21waV9mcmVlKCAmSCApOyBtYmVkdGxzX21waV9mcmVlKCAmRyApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcnNhX2ZyZWUoIGN0eCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9LRVlfR0VOX0ZBSUxFRCArIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19HRU5QUklNRSAqLworCisvKgorICogQ2hlY2sgYSBwdWJsaWMgUlNBIGtleQorICovCitpbnQgbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCBjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCAhY3R4LT5OLnAgfHwgIWN0eC0+RS5wICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRCApOworCisgICAgaWYoICggY3R4LT5OLnBbMF0gJiAxICkgPT0gMCB8fAorICAgICAgICAoIGN0eC0+RS5wWzBdICYgMSApID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfYml0bGVuKCAmY3R4LT5OICkgPCAxMjggfHwKKyAgICAgICAgbWJlZHRsc19tcGlfYml0bGVuKCAmY3R4LT5OICkgPiBNQkVEVExTX01QSV9NQVhfQklUUyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9iaXRsZW4oICZjdHgtPkUgKSA8IDIgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJmN0eC0+RSwgJmN0eC0+TiApID49IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENoZWNrIGEgcHJpdmF0ZSBSU0Ega2V5CisgKi8KK2ludCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCBjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHggKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgUFEsIERFLCBQMSwgUTEsIEgsIEksIEcsIEcyLCBMMSwgTDIsIERQLCBEUSwgUVA7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoIGN0eCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggIWN0eC0+UC5wIHx8ICFjdHgtPlEucCB8fCAhY3R4LT5ELnAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUFEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkRFICk7IG1iZWR0bHNfbXBpX2luaXQoICZQMSApOyBtYmVkdGxzX21waV9pbml0KCAmUTEgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmSCAgKTsgbWJlZHRsc19tcGlfaW5pdCggJkkgICk7IG1iZWR0bHNfbXBpX2luaXQoICZHICApOyBtYmVkdGxzX21waV9pbml0KCAmRzIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmTDEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkwyICk7IG1iZWR0bHNfbXBpX2luaXQoICZEUCApOyBtYmVkdGxzX21waV9pbml0KCAmRFEgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUVAgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlBRLCAmY3R4LT5QLCAmY3R4LT5RICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZERSwgJmN0eC0+RCwgJmN0eC0+RSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUDEsICZjdHgtPlAsIDEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2ludCggJlExLCAmY3R4LT5RLCAxICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZILCAmUDEsICZRMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9nY2QoICZHLCAmY3R4LT5FLCAmSCAgKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9nY2QoICZHMiwgJlAxLCAmUTEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZGl2X21waSggJkwxLCAmTDIsICZILCAmRzIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJkksICZERSwgJkwxICApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZEUCwgJmN0eC0+RCwgJlAxICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZEUSwgJmN0eC0+RCwgJlExICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZRUCwgJmN0eC0+USwgJmN0eC0+UCApICk7CisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgYSB2YWxpZCBQS0NTMXYyIHByaXZhdGUga2V5CisgICAgICovCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZQUSwgJmN0eC0+TiApICE9IDAgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJkRQLCAmY3R4LT5EUCApICE9IDAgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJkRRLCAmY3R4LT5EUSApICE9IDAgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJlFQLCAmY3R4LT5RUCApICE9IDAgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX2ludCggJkwyLCAwICkgIT0gMCB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfaW50KCAmSSwgMSApICE9IDAgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX2ludCggJkcsIDEgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEOworICAgIH0KKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUFEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkRFICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZQMSApOyBtYmVkdGxzX21waV9mcmVlKCAmUTEgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmSCAgKTsgbWJlZHRsc19tcGlfZnJlZSggJkkgICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZHICApOyBtYmVkdGxzX21waV9mcmVlKCAmRzIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmTDEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkwyICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZEUCApOyBtYmVkdGxzX21waV9mcmVlKCAmRFEgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUVAgKTsKKworICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRCArIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBDaGVjayBpZiBjb250ZXh0cyBob2xkaW5nIGEgcHVibGljIGFuZCBwcml2YXRlIGtleSBtYXRjaAorICovCitpbnQgbWJlZHRsc19yc2FfY2hlY2tfcHViX3ByaXYoIGNvbnN0IG1iZWR0bHNfcnNhX2NvbnRleHQgKnB1YiwgY29uc3QgbWJlZHRsc19yc2FfY29udGV4dCAqcHJ2ICkKK3sKKyAgICBpZiggbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCBwdWIgKSAhPSAwIHx8CisgICAgICAgIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoIHBydiApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRCApOworICAgIH0KKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmcHViLT5OLCAmcHJ2LT5OICkgIT0gMCB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmcHViLT5FLCAmcHJ2LT5FICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBEbyBhbiBSU0EgcHVibGljIGtleSBvcGVyYXRpb24KKyAqLworaW50IG1iZWR0bHNfcnNhX3B1YmxpYyggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3Qgb2xlbjsKKyAgICBtYmVkdGxzX21waSBUOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZjdHgtPm11dGV4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJlQsIGlucHV0LCBjdHgtPmxlbiApICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJlQsICZjdHgtPk4gKSA+PSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIG9sZW4gPSBjdHgtPmxlbjsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2V4cF9tb2QoICZULCAmVCwgJmN0eC0+RSwgJmN0eC0+TiwgJmN0eC0+Uk4gKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmVCwgb3V0cHV0LCBvbGVuICkgKTsKKworY2xlYW51cDoKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfdW5sb2NrKCAmY3R4LT5tdXRleCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiApOworI2VuZGlmCisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmVCApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfUFVCTElDX0ZBSUxFRCArIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBvciB1cGRhdGUgYmxpbmRpbmcgdmFsdWVzLCBzZWUgc2VjdGlvbiAxMCBvZjoKKyAqICBLT0NIRVIsIFBhdWwgQy4gVGltaW5nIGF0dGFja3Mgb24gaW1wbGVtZW50YXRpb25zIG9mIERpZmZpZS1IZWxsbWFuLCBSU0EsCisgKiAgRFNTLCBhbmQgb3RoZXIgc3lzdGVtcy4gSW4gOiBBZHZhbmNlcyBpbiBDcnlwdG9sb2d5LUNSWVBUTyc5Ni4gU3ByaW5nZXIKKyAqICBCZXJsaW4gSGVpZGVsYmVyZywgMTk5Ni4gcC4gMTA0LTExMy4KKyAqLworc3RhdGljIGludCByc2FfcHJlcGFyZV9ibGluZGluZyggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0LCBjb3VudCA9IDA7CisKKyAgICBpZiggY3R4LT5WZi5wICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgLyogV2UgYWxyZWFkeSBoYXZlIGJsaW5kaW5nIHZhbHVlcywganVzdCB1cGRhdGUgdGhlbSBieSBzcXVhcmluZyAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZjdHgtPlZpLCAmY3R4LT5WaSwgJmN0eC0+VmkgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHgtPlZpLCAmY3R4LT5WaSwgJmN0eC0+TiApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmN0eC0+VmYsICZjdHgtPlZmLCAmY3R4LT5WZiApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC0+VmYsICZjdHgtPlZmLCAmY3R4LT5OICkgKTsKKworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgLyogVW5ibGluZGluZyB2YWx1ZTogVmYgPSByYW5kb20gbnVtYmVyLCBpbnZlcnRpYmxlIG1vZCBOICovCisgICAgZG8geworICAgICAgICBpZiggY291bnQrKyA+IDEwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1JOR19GQUlMRUQgKTsKKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tKCAmY3R4LT5WZiwgY3R4LT5sZW4gLSAxLCBmX3JuZywgcF9ybmcgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2djZCggJmN0eC0+VmksICZjdHgtPlZmLCAmY3R4LT5OICkgKTsKKyAgICB9IHdoaWxlKCBtYmVkdGxzX21waV9jbXBfaW50KCAmY3R4LT5WaSwgMSApICE9IDAgKTsKKworICAgIC8qIEJsaW5kaW5nIHZhbHVlOiBWaSA9ICBWZl4oLWUpIG1vZCBOICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LT5WaSwgJmN0eC0+VmYsICZjdHgtPk4gKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJmN0eC0+VmksICZjdHgtPlZpLCAmY3R4LT5FLCAmY3R4LT5OLCAmY3R4LT5STiApICk7CisKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogRG8gYW4gUlNBIHByaXZhdGUga2V5IG9wZXJhdGlvbgorICovCitpbnQgbWJlZHRsc19yc2FfcHJpdmF0ZSggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBvbGVuOworICAgIG1iZWR0bHNfbXBpIFQsIFQxLCBUMjsKKworICAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHByaXZhdGUga2V5IGluZm8sIHByZXZlbnQgcG9zc2libGUgbWlzdXNlICovCisgICAgaWYoIGN0eC0+UC5wID09IE5VTEwgfHwgY3R4LT5RLnAgPT0gTlVMTCB8fCBjdHgtPkQucCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZUICk7IG1iZWR0bHNfbXBpX2luaXQoICZUMSApOyBtYmVkdGxzX21waV9pbml0KCAmVDIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZjdHgtPm11dGV4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJlQsIGlucHV0LCBjdHgtPmxlbiApICk7CisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZULCAmY3R4LT5OICkgPj0gMCApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEE7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBpZiggZl9ybmcgIT0gTlVMTCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBCbGluZGluZworICAgICAgICAgKiBUID0gVCAqIFZpIG1vZCBOCisgICAgICAgICAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIHJzYV9wcmVwYXJlX2JsaW5kaW5nKCBjdHgsIGZfcm5nLCBwX3JuZyApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlQsICZULCAmY3R4LT5WaSApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJlQsICZULCAmY3R4LT5OICkgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX05PX0NSVCkKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2V4cF9tb2QoICZULCAmVCwgJmN0eC0+RCwgJmN0eC0+TiwgJmN0eC0+Uk4gKSApOworI2Vsc2UKKyAgICAvKgorICAgICAqIGZhc3RlciBkZWNyeXB0aW9uIHVzaW5nIHRoZSBDUlQKKyAgICAgKgorICAgICAqIFQxID0gaW5wdXQgXiBkUCBtb2QgUAorICAgICAqIFQyID0gaW5wdXQgXiBkUSBtb2QgUQorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJlQxLCAmVCwgJmN0eC0+RFAsICZjdHgtPlAsICZjdHgtPlJQICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2V4cF9tb2QoICZUMiwgJlQsICZjdHgtPkRRLCAmY3R4LT5RLCAmY3R4LT5SUSApICk7CisKKyAgICAvKgorICAgICAqIFQgPSAoVDEgLSBUMikgKiAoUV4tMSBtb2QgUCkgbW9kIFAKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZULCAmVDEsICZUMiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVDEsICZULCAmY3R4LT5RUCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmVCwgJlQxLCAmY3R4LT5QICkgKTsKKworICAgIC8qCisgICAgICogVCA9IFQyICsgVCAqIFEKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUMSwgJlQsICZjdHgtPlEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX21waSggJlQsICZUMiwgJlQxICkgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9OT19DUlQgKi8KKworICAgIGlmKCBmX3JuZyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFVuYmxpbmQKKyAgICAgICAgICogVCA9IFQgKiBWZiBtb2QgTgorICAgICAgICAgKi8KKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVCwgJlQsICZjdHgtPlZmICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmVCwgJlQsICZjdHgtPk4gKSApOworICAgIH0KKworICAgIG9sZW4gPSBjdHgtPmxlbjsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggJlQsIG91dHB1dCwgb2xlbiApICk7CisKK2NsZWFudXA6CisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCBtYmVkdGxzX211dGV4X3VubG9jayggJmN0eC0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJlQgKTsgbWJlZHRsc19tcGlfZnJlZSggJlQxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZUMiApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfUFJJVkFURV9GQUlMRUQgKyByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKy8qKgorICogR2VuZXJhdGUgYW5kIGFwcGx5IHRoZSBNR0YxIG9wZXJhdGlvbiAoZnJvbSBQS0NTIzEgdjIuMSkgdG8gYSBidWZmZXIuCisgKgorICogXHBhcmFtIGRzdCAgICAgICBidWZmZXIgdG8gbWFzaworICogXHBhcmFtIGRsZW4gICAgICBsZW5ndGggb2YgZGVzdGluYXRpb24gYnVmZmVyCisgKiBccGFyYW0gc3JjICAgICAgIHNvdXJjZSBvZiB0aGUgbWFzayBnZW5lcmF0aW9uCisgKiBccGFyYW0gc2xlbiAgICAgIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlcgorICogXHBhcmFtIG1kX2N0eCAgICBtZXNzYWdlIGRpZ2VzdCBjb250ZXh0IHRvIHVzZQorICovCitzdGF0aWMgdm9pZCBtZ2ZfbWFzayggdW5zaWduZWQgY2hhciAqZHN0LCBzaXplX3QgZGxlbiwgdW5zaWduZWQgY2hhciAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzbGVuLCBtYmVkdGxzX21kX2NvbnRleHRfdCAqbWRfY3R4ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1hc2tbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgdW5zaWduZWQgY2hhciBjb3VudGVyWzRdOworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisgICAgdW5zaWduZWQgaW50IGhsZW47CisgICAgc2l6ZV90IGksIHVzZV9sZW47CisKKyAgICBtZW1zZXQoIG1hc2ssIDAsIE1CRURUTFNfTURfTUFYX1NJWkUgKTsKKyAgICBtZW1zZXQoIGNvdW50ZXIsIDAsIDQgKTsKKworICAgIGhsZW4gPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9jdHgtPm1kX2luZm8gKTsKKworICAgIC8qIEdlbmVyYXRlIGFuZCBhcHBseSBkYk1hc2sgKi8KKyAgICBwID0gZHN0OworCisgICAgd2hpbGUoIGRsZW4gPiAwICkKKyAgICB7CisgICAgICAgIHVzZV9sZW4gPSBobGVuOworICAgICAgICBpZiggZGxlbiA8IGhsZW4gKQorICAgICAgICAgICAgdXNlX2xlbiA9IGRsZW47CisKKyAgICAgICAgbWJlZHRsc19tZF9zdGFydHMoIG1kX2N0eCApOworICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggbWRfY3R4LCBzcmMsIHNsZW4gKTsKKyAgICAgICAgbWJlZHRsc19tZF91cGRhdGUoIG1kX2N0eCwgY291bnRlciwgNCApOworICAgICAgICBtYmVkdGxzX21kX2ZpbmlzaCggbWRfY3R4LCBtYXNrICk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IHVzZV9sZW47ICsraSApCisgICAgICAgICAgICAqcCsrIF49IG1hc2tbaV07CisKKyAgICAgICAgY291bnRlclszXSsrOworCisgICAgICAgIGRsZW4gLT0gdXNlX2xlbjsKKyAgICB9Cit9CisjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMjEgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFBLQ1MjMSB2Mi4xIFJTQUVTLU9BRVAtRU5DUllQVCBmdW5jdGlvbgorICovCitpbnQgbWJlZHRsc19yc2FfcnNhZXNfb2FlcF9lbmNyeXB0KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhYmVsLCBzaXplX3QgbGFiZWxfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgc2l6ZV90IG9sZW47CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gb3V0cHV0OworICAgIHVuc2lnbmVkIGludCBobGVuOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IG1kX2N0eDsKKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfUlNBX1BSSVZBVEUgJiYgY3R4LT5wYWRkaW5nICE9IE1CRURUTFNfUlNBX1BLQ1NfVjIxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBmX3JuZyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCAobWJlZHRsc19tZF90eXBlX3QpIGN0eC0+aGFzaF9pZCApOworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgb2xlbiA9IGN0eC0+bGVuOworICAgIGhsZW4gPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7CisKKyAgICAvKiBmaXJzdCBjb21wYXJpc29uIGNoZWNrcyBmb3Igb3ZlcmZsb3cgKi8KKyAgICBpZiggaWxlbiArIDIgKiBobGVuICsgMiA8IGlsZW4gfHwgb2xlbiA8IGlsZW4gKyAyICogaGxlbiArIDIgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgbWVtc2V0KCBvdXRwdXQsIDAsIG9sZW4gKTsKKworICAgICpwKysgPSAwOworCisgICAgLyogR2VuZXJhdGUgYSByYW5kb20gb2N0ZXQgc3RyaW5nIHNlZWQgKi8KKyAgICBpZiggKCByZXQgPSBmX3JuZyggcF9ybmcsIHAsIGhsZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9STkdfRkFJTEVEICsgcmV0ICk7CisKKyAgICBwICs9IGhsZW47CisKKyAgICAvKiBDb25zdHJ1Y3QgREIgKi8KKyAgICBtYmVkdGxzX21kKCBtZF9pbmZvLCBsYWJlbCwgbGFiZWxfbGVuLCBwICk7CisgICAgcCArPSBobGVuOworICAgIHAgKz0gb2xlbiAtIDIgKiBobGVuIC0gMiAtIGlsZW47CisgICAgKnArKyA9IDE7CisgICAgbWVtY3B5KCBwLCBpbnB1dCwgaWxlbiApOworCisgICAgbWJlZHRsc19tZF9pbml0KCAmbWRfY3R4ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJm1kX2N0eCwgbWRfaW5mbywgMCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX21kX2ZyZWUoICZtZF9jdHggKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKiBtYXNrZWREQjogQXBwbHkgZGJNYXNrIHRvIERCICovCisgICAgbWdmX21hc2soIG91dHB1dCArIGhsZW4gKyAxLCBvbGVuIC0gaGxlbiAtIDEsIG91dHB1dCArIDEsIGhsZW4sCisgICAgICAgICAgICAgICAmbWRfY3R4ICk7CisKKyAgICAvKiBtYXNrZWRTZWVkOiBBcHBseSBzZWVkTWFzayB0byBzZWVkICovCisgICAgbWdmX21hc2soIG91dHB1dCArIDEsIGhsZW4sIG91dHB1dCArIGhsZW4gKyAxLCBvbGVuIC0gaGxlbiAtIDEsCisgICAgICAgICAgICAgICAmbWRfY3R4ICk7CisKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZtZF9jdHggKTsKKworICAgIHJldHVybiggKCBtb2RlID09IE1CRURUTFNfUlNBX1BVQkxJQyApCisgICAgICAgICAgICA/IG1iZWR0bHNfcnNhX3B1YmxpYyggIGN0eCwgb3V0cHV0LCBvdXRwdXQgKQorICAgICAgICAgICAgOiBtYmVkdGxzX3JzYV9wcml2YXRlKCBjdHgsIGZfcm5nLCBwX3JuZywgb3V0cHV0LCBvdXRwdXQgKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjIxICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KQorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBQS0NTIzEgdjIuMSBSU0FFUy1QS0NTMS1WMV81LUVOQ1JZUFQgZnVuY3Rpb24KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9lbmNyeXB0KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBzaXplX3QgbmJfcGFkLCBvbGVuOworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IG91dHB1dDsKKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfUlNBX1BSSVZBVEUgJiYgY3R4LT5wYWRkaW5nICE9IE1CRURUTFNfUlNBX1BLQ1NfVjE1ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8vIFdlIGRvbid0IGNoZWNrIHBfcm5nIGJlY2F1c2UgaXQgd29uJ3QgYmUgZGVyZWZlcmVuY2VkIGhlcmUKKyAgICBpZiggZl9ybmcgPT0gTlVMTCB8fCBpbnB1dCA9PSBOVUxMIHx8IG91dHB1dCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG9sZW4gPSBjdHgtPmxlbjsKKworICAgIC8qIGZpcnN0IGNvbXBhcmlzb24gY2hlY2tzIGZvciBvdmVyZmxvdyAqLworICAgIGlmKCBpbGVuICsgMTEgPCBpbGVuIHx8IG9sZW4gPCBpbGVuICsgMTEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgbmJfcGFkID0gb2xlbiAtIDMgLSBpbGVuOworCisgICAgKnArKyA9IDA7CisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFVCTElDICkKKyAgICB7CisgICAgICAgICpwKysgPSBNQkVEVExTX1JTQV9DUllQVDsKKworICAgICAgICB3aGlsZSggbmJfcGFkLS0gPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHJuZ19kbCA9IDEwMDsKKworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHJldCA9IGZfcm5nKCBwX3JuZywgcCwgMSApOworICAgICAgICAgICAgfSB3aGlsZSggKnAgPT0gMCAmJiAtLXJuZ19kbCAmJiByZXQgPT0gMCApOworCisgICAgICAgICAgICAvKiBDaGVjayBpZiBSTkcgZmFpbGVkIHRvIGdlbmVyYXRlIGRhdGEgKi8KKyAgICAgICAgICAgIGlmKCBybmdfZGwgPT0gMCB8fCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfUk5HX0ZBSUxFRCArIHJldCApOworCisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKnArKyA9IE1CRURUTFNfUlNBX1NJR047CisKKyAgICAgICAgd2hpbGUoIG5iX3BhZC0tID4gMCApCisgICAgICAgICAgICAqcCsrID0gMHhGRjsKKyAgICB9CisKKyAgICAqcCsrID0gMDsKKyAgICBtZW1jcHkoIHAsIGlucHV0LCBpbGVuICk7CisKKyAgICByZXR1cm4oICggbW9kZSA9PSBNQkVEVExTX1JTQV9QVUJMSUMgKQorICAgICAgICAgICAgPyBtYmVkdGxzX3JzYV9wdWJsaWMoICBjdHgsIG91dHB1dCwgb3V0cHV0ICkKKyAgICAgICAgICAgIDogbWJlZHRsc19yc2FfcHJpdmF0ZSggY3R4LCBmX3JuZywgcF9ybmcsIG91dHB1dCwgb3V0cHV0ICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YxNSAqLworCisvKgorICogQWRkIHRoZSBtZXNzYWdlIHBhZGRpbmcsIHRoZW4gZG8gYW4gUlNBIG9wZXJhdGlvbgorICovCitpbnQgbWJlZHRsc19yc2FfcGtjczFfZW5jcnlwdCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIHN3aXRjaCggY3R4LT5wYWRkaW5nICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkKKyAgICAgICAgY2FzZSBNQkVEVExTX1JTQV9QS0NTX1YxNToKKyAgICAgICAgICAgIHJldHVybiBtYmVkdGxzX3JzYV9yc2Flc19wa2NzMV92MTVfZW5jcnlwdCggY3R4LCBmX3JuZywgcF9ybmcsIG1vZGUsIGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgb3V0cHV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpCisgICAgICAgIGNhc2UgTUJFRFRMU19SU0FfUEtDU19WMjE6CisgICAgICAgICAgICByZXR1cm4gbWJlZHRsc19yc2FfcnNhZXNfb2FlcF9lbmNyeXB0KCBjdHgsIGZfcm5nLCBwX3JuZywgbW9kZSwgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbGVuLCBpbnB1dCwgb3V0cHV0ICk7CisjZW5kaWYKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HICk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUEtDUyMxIHYyLjEgUlNBRVMtT0FFUC1ERUNSWVBUIGZ1bmN0aW9uCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Flc19vYWVwX2RlY3J5cHQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFiZWwsIHNpemVfdCBsYWJlbF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X21heF9sZW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGlsZW4sIGksIHBhZF9sZW47CisgICAgdW5zaWduZWQgY2hhciAqcCwgYmFkLCBwYWRfZG9uZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRV07CisgICAgdW5zaWduZWQgY2hhciBsaGFzaFtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICB1bnNpZ25lZCBpbnQgaGxlbjsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBtZF9jdHg7CisKKyAgICAvKgorICAgICAqIFBhcmFtZXRlcnMgc2FuaXR5IGNoZWNrcworICAgICAqLworICAgIGlmKCBtb2RlID09IE1CRURUTFNfUlNBX1BSSVZBVEUgJiYgY3R4LT5wYWRkaW5nICE9IE1CRURUTFNfUlNBX1BLQ1NfVjIxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlsZW4gPSBjdHgtPmxlbjsKKworICAgIGlmKCBpbGVuIDwgMTYgfHwgaWxlbiA+IHNpemVvZiggYnVmICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIChtYmVkdGxzX21kX3R5cGVfdCkgY3R4LT5oYXNoX2lkICk7CisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBobGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApOworCisgICAgLy8gY2hlY2tpbmcgZm9yIGludGVnZXIgdW5kZXJmbG93CisgICAgaWYoIDIgKiBobGVuICsgMiA+IGlsZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgLyoKKyAgICAgKiBSU0Egb3BlcmF0aW9uCisgICAgICovCisgICAgcmV0ID0gKCBtb2RlID09IE1CRURUTFNfUlNBX1BVQkxJQyApCisgICAgICAgICAgPyBtYmVkdGxzX3JzYV9wdWJsaWMoICBjdHgsIGlucHV0LCBidWYgKQorICAgICAgICAgIDogbWJlZHRsc19yc2FfcHJpdmF0ZSggY3R4LCBmX3JuZywgcF9ybmcsIGlucHV0LCBidWYgKTsKKworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAvKgorICAgICAqIFVubWFzayBkYXRhIGFuZCBnZW5lcmF0ZSBsSGFzaAorICAgICAqLworICAgIG1iZWR0bHNfbWRfaW5pdCggJm1kX2N0eCApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZtZF9jdHgsIG1kX2luZm8sIDAgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisKKyAgICAvKiBHZW5lcmF0ZSBsSGFzaCAqLworICAgIG1iZWR0bHNfbWQoIG1kX2luZm8sIGxhYmVsLCBsYWJlbF9sZW4sIGxoYXNoICk7CisKKyAgICAvKiBzZWVkOiBBcHBseSBzZWVkTWFzayB0byBtYXNrZWRTZWVkICovCisgICAgbWdmX21hc2soIGJ1ZiArIDEsIGhsZW4sIGJ1ZiArIGhsZW4gKyAxLCBpbGVuIC0gaGxlbiAtIDEsCisgICAgICAgICAgICAgICAmbWRfY3R4ICk7CisKKyAgICAvKiBEQjogQXBwbHkgZGJNYXNrIHRvIG1hc2tlZERCICovCisgICAgbWdmX21hc2soIGJ1ZiArIGhsZW4gKyAxLCBpbGVuIC0gaGxlbiAtIDEsIGJ1ZiArIDEsIGhsZW4sCisgICAgICAgICAgICAgICAmbWRfY3R4ICk7CisKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZtZF9jdHggKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgY29udGVudHMsIGluICJjb25zdGFudC10aW1lIgorICAgICAqLworICAgIHAgPSBidWY7CisgICAgYmFkID0gMDsKKworICAgIGJhZCB8PSAqcCsrOyAvKiBGaXJzdCBieXRlIG11c3QgYmUgMCAqLworCisgICAgcCArPSBobGVuOyAvKiBTa2lwIHNlZWQgKi8KKworICAgIC8qIENoZWNrIGxIYXNoICovCisgICAgZm9yKCBpID0gMDsgaSA8IGhsZW47IGkrKyApCisgICAgICAgIGJhZCB8PSBsaGFzaFtpXSBeICpwKys7CisKKyAgICAvKiBHZXQgemVyby1wYWRkaW5nIGxlbiwgYnV0IGFsd2F5cyByZWFkIHRpbGwgZW5kIG9mIGJ1ZmZlcgorICAgICAqIChtaW51cyBvbmUsIGZvciB0aGUgMDEgYnl0ZSkgKi8KKyAgICBwYWRfbGVuID0gMDsKKyAgICBwYWRfZG9uZSA9IDA7CisgICAgZm9yKCBpID0gMDsgaSA8IGlsZW4gLSAyICogaGxlbiAtIDI7IGkrKyApCisgICAgeworICAgICAgICBwYWRfZG9uZSB8PSBwW2ldOworICAgICAgICBwYWRfbGVuICs9ICgocGFkX2RvbmUgfCAodW5zaWduZWQgY2hhciktcGFkX2RvbmUpID4+IDcpIF4gMTsKKyAgICB9CisKKyAgICBwICs9IHBhZF9sZW47CisgICAgYmFkIHw9ICpwKysgXiAweDAxOworCisgICAgLyoKKyAgICAgKiBUaGUgb25seSBpbmZvcm1hdGlvbiAibGVha2VkIiBpcyB3aGV0aGVyIHRoZSBwYWRkaW5nIHdhcyBjb3JyZWN0IG9yIG5vdAorICAgICAqIChlZywgbm8gZGF0YSBpcyBjb3BpZWQgaWYgaXQgd2FzIG5vdCBjb3JyZWN0KS4gVGhpcyBtZWV0cyB0aGUKKyAgICAgKiByZWNvbW1lbmRhdGlvbnMgaW4gUEtDUyMxIHYyLjI6IGFuIG9wcG9uZW50IGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuCisgICAgICogdGhlIGRpZmZlcmVudCBlcnJvciBjb25kaXRpb25zLgorICAgICAqLworICAgIGlmKCBiYWQgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORyApOworCisgICAgaWYoIGlsZW4gLSAoIHAgLSBidWYgKSA+IG91dHB1dF9tYXhfbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfT1VUUFVUX1RPT19MQVJHRSApOworCisgICAgKm9sZW4gPSBpbGVuIC0gKHAgLSBidWYpOworICAgIG1lbWNweSggb3V0cHV0LCBwLCAqb2xlbiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMjEgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFBLQ1MjMSB2Mi4xIFJTQUVTLVBLQ1MxLVYxXzUtREVDUllQVCBmdW5jdGlvbgorICovCitpbnQgbWJlZHRsc19yc2FfcnNhZXNfcGtjczFfdjE1X2RlY3J5cHQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG91dHB1dF9tYXhfbGVuKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGlsZW4sIHBhZF9jb3VudCA9IDAsIGk7CisgICAgdW5zaWduZWQgY2hhciAqcCwgYmFkLCBwYWRfZG9uZSA9IDA7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19NUElfTUFYX1NJWkVdOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFJJVkFURSAmJiBjdHgtPnBhZGRpbmcgIT0gTUJFRFRMU19SU0FfUEtDU19WMTUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWxlbiA9IGN0eC0+bGVuOworCisgICAgaWYoIGlsZW4gPCAxNiB8fCBpbGVuID4gc2l6ZW9mKCBidWYgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICByZXQgPSAoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFVCTElDICkKKyAgICAgICAgICA/IG1iZWR0bHNfcnNhX3B1YmxpYyggIGN0eCwgaW5wdXQsIGJ1ZiApCisgICAgICAgICAgOiBtYmVkdGxzX3JzYV9wcml2YXRlKCBjdHgsIGZfcm5nLCBwX3JuZywgaW5wdXQsIGJ1ZiApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHAgPSBidWY7CisgICAgYmFkID0gMDsKKworICAgIC8qCisgICAgICogQ2hlY2sgYW5kIGdldCBwYWRkaW5nIGxlbiBpbiAiY29uc3RhbnQtdGltZSIKKyAgICAgKi8KKyAgICBiYWQgfD0gKnArKzsgLyogRmlyc3QgYnl0ZSBtdXN0IGJlIDAgKi8KKworICAgIC8qIFRoaXMgdGVzdCBkb2VzIG5vdCBkZXBlbmQgb24gc2VjcmV0IGRhdGEgKi8KKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX1JTQV9QUklWQVRFICkKKyAgICB7CisgICAgICAgIGJhZCB8PSAqcCsrIF4gTUJFRFRMU19SU0FfQ1JZUFQ7CisKKyAgICAgICAgLyogR2V0IHBhZGRpbmcgbGVuLCBidXQgYWx3YXlzIHJlYWQgdGlsbCBlbmQgb2YgYnVmZmVyCisgICAgICAgICAqIChtaW51cyBvbmUsIGZvciB0aGUgMDAgYnl0ZSkgKi8KKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IGlsZW4gLSAzOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBwYWRfZG9uZSAgfD0gKChwW2ldIHwgKHVuc2lnbmVkIGNoYXIpLXBbaV0pID4+IDcpIF4gMTsKKyAgICAgICAgICAgIHBhZF9jb3VudCArPSAoKHBhZF9kb25lIHwgKHVuc2lnbmVkIGNoYXIpLXBhZF9kb25lKSA+PiA3KSBeIDE7CisgICAgICAgIH0KKworICAgICAgICBwICs9IHBhZF9jb3VudDsKKyAgICAgICAgYmFkIHw9ICpwKys7IC8qIE11c3QgYmUgemVybyAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYWQgfD0gKnArKyBeIE1CRURUTFNfUlNBX1NJR047CisKKyAgICAgICAgLyogR2V0IHBhZGRpbmcgbGVuLCBidXQgYWx3YXlzIHJlYWQgdGlsbCBlbmQgb2YgYnVmZmVyCisgICAgICAgICAqIChtaW51cyBvbmUsIGZvciB0aGUgMDAgYnl0ZSkgKi8KKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IGlsZW4gLSAzOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBwYWRfZG9uZSB8PSAoIHBbaV0gIT0gMHhGRiApOworICAgICAgICAgICAgcGFkX2NvdW50ICs9ICggcGFkX2RvbmUgPT0gMCApOworICAgICAgICB9CisKKyAgICAgICAgcCArPSBwYWRfY291bnQ7CisgICAgICAgIGJhZCB8PSAqcCsrOyAvKiBNdXN0IGJlIHplcm8gKi8KKyAgICB9CisKKyAgICBiYWQgfD0gKCBwYWRfY291bnQgPCA4ICk7CisKKyAgICBpZiggYmFkICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HICk7CisKKyAgICBpZiggaWxlbiAtICggcCAtIGJ1ZiApID4gb3V0cHV0X21heF9sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9PVVRQVVRfVE9PX0xBUkdFICk7CisKKyAgICAqb2xlbiA9IGlsZW4gLSAocCAtIGJ1Zik7CisgICAgbWVtY3B5KCBvdXRwdXQsIHAsICpvbGVuICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YxNSAqLworCisvKgorICogRG8gYW4gUlNBIG9wZXJhdGlvbiwgdGhlbiByZW1vdmUgdGhlIG1lc3NhZ2UgcGFkZGluZworICovCitpbnQgbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X21heF9sZW4pCit7CisgICAgc3dpdGNoKCBjdHgtPnBhZGRpbmcgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KQorICAgICAgICBjYXNlIE1CRURUTFNfUlNBX1BLQ1NfVjE1OgorICAgICAgICAgICAgcmV0dXJuIG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9kZWNyeXB0KCBjdHgsIGZfcm5nLCBwX3JuZywgbW9kZSwgb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQsIG91dHB1dF9tYXhfbGVuICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpCisgICAgICAgIGNhc2UgTUJFRFRMU19SU0FfUEtDU19WMjE6CisgICAgICAgICAgICByZXR1cm4gbWJlZHRsc19yc2FfcnNhZXNfb2FlcF9kZWNyeXB0KCBjdHgsIGZfcm5nLCBwX3JuZywgbW9kZSwgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGVuLCBpbnB1dCwgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9tYXhfbGVuICk7CisjZW5kaWYKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HICk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUEtDUyMxIHYyLjEgUlNBU1NBLVBTUy1TSUdOIGZ1bmN0aW9uCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3NpZ24oIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnICkKK3sKKyAgICBzaXplX3Qgb2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gc2lnOworICAgIHVuc2lnbmVkIGNoYXIgc2FsdFtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICB1bnNpZ25lZCBpbnQgc2xlbiwgaGxlbiwgb2Zmc2V0ID0gMDsKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBtc2I7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgbWRfY3R4OworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFJJVkFURSAmJiBjdHgtPnBhZGRpbmcgIT0gTUJFRFRMU19SU0FfUEtDU19WMjEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIGZfcm5nID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgb2xlbiA9IGN0eC0+bGVuOworCisgICAgaWYoIG1kX2FsZyAhPSBNQkVEVExTX01EX05PTkUgKQorICAgIHsKKyAgICAgICAgLyogR2F0aGVyIGxlbmd0aCBvZiBoYXNoIHRvIHNpZ24gKi8KKyAgICAgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApOworICAgICAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAgICAgaGFzaGxlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKyAgICB9CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggKG1iZWR0bHNfbWRfdHlwZV90KSBjdHgtPmhhc2hfaWQgKTsKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGhsZW4gPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7CisgICAgc2xlbiA9IGhsZW47CisKKyAgICBpZiggb2xlbiA8IGhsZW4gKyBzbGVuICsgMiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtZW1zZXQoIHNpZywgMCwgb2xlbiApOworCisgICAgLyogR2VuZXJhdGUgc2FsdCBvZiBsZW5ndGggc2xlbiAqLworICAgIGlmKCAoIHJldCA9IGZfcm5nKCBwX3JuZywgc2FsdCwgc2xlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1JOR19GQUlMRUQgKyByZXQgKTsKKworICAgIC8qIE5vdGU6IEVNU0EtUFNTIGVuY29kaW5nIGlzIG92ZXIgdGhlIGxlbmd0aCBvZiBOIC0gMSBiaXRzICovCisgICAgbXNiID0gbWJlZHRsc19tcGlfYml0bGVuKCAmY3R4LT5OICkgLSAxOworICAgIHAgKz0gb2xlbiAtIGhsZW4gKiAyIC0gMjsKKyAgICAqcCsrID0gMHgwMTsKKyAgICBtZW1jcHkoIHAsIHNhbHQsIHNsZW4gKTsKKyAgICBwICs9IHNsZW47CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZtZF9jdHggKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmbWRfY3R4LCBtZF9pbmZvLCAwICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbWRfZnJlZSggJm1kX2N0eCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qIEdlbmVyYXRlIEggPSBIYXNoKCBNJyApICovCisgICAgbWJlZHRsc19tZF9zdGFydHMoICZtZF9jdHggKTsKKyAgICBtYmVkdGxzX21kX3VwZGF0ZSggJm1kX2N0eCwgcCwgOCApOworICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCBoYXNoLCBoYXNobGVuICk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoICZtZF9jdHgsIHNhbHQsIHNsZW4gKTsKKyAgICBtYmVkdGxzX21kX2ZpbmlzaCggJm1kX2N0eCwgcCApOworCisgICAgLyogQ29tcGVuc2F0ZSBmb3IgYm91bmRhcnkgY29uZGl0aW9uIHdoZW4gYXBwbHlpbmcgbWFzayAqLworICAgIGlmKCBtc2IgJSA4ID09IDAgKQorICAgICAgICBvZmZzZXQgPSAxOworCisgICAgLyogbWFza2VkREI6IEFwcGx5IGRiTWFzayB0byBEQiAqLworICAgIG1nZl9tYXNrKCBzaWcgKyBvZmZzZXQsIG9sZW4gLSBobGVuIC0gMSAtIG9mZnNldCwgcCwgaGxlbiwgJm1kX2N0eCApOworCisgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisKKyAgICBtc2IgPSBtYmVkdGxzX21waV9iaXRsZW4oICZjdHgtPk4gKSAtIDE7CisgICAgc2lnWzBdICY9IDB4RkYgPj4gKCBvbGVuICogOCAtIG1zYiApOworCisgICAgcCArPSBobGVuOworICAgICpwKysgPSAweEJDOworCisgICAgcmV0dXJuKCAoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFVCTElDICkKKyAgICAgICAgICAgID8gbWJlZHRsc19yc2FfcHVibGljKCAgY3R4LCBzaWcsIHNpZyApCisgICAgICAgICAgICA6IG1iZWR0bHNfcnNhX3ByaXZhdGUoIGN0eCwgZl9ybmcsIHBfcm5nLCBzaWcsIHNpZyApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMjEgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFBLQ1MjMSB2Mi4xIFJTQVNTQS1QS0NTMS1WMV81LVNJR04gZnVuY3Rpb24KKyAqLworLyoKKyAqIERvIGFuIFJTQSBvcGVyYXRpb24gdG8gc2lnbiB0aGUgbWVzc2FnZSBkaWdlc3QKKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYXNzYV9wa2NzMV92MTVfc2lnbiggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcgKQoreworICAgIHNpemVfdCBuYl9wYWQsIG9sZW4sIG9pZF9zaXplID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gc2lnOworICAgIGNvbnN0IGNoYXIgKm9pZCA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqc2lnX3RyeSA9IE5VTEwsICp2ZXJpZiA9IE5VTEw7CisgICAgc2l6ZV90IGk7CisgICAgdW5zaWduZWQgY2hhciBkaWZmOworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZGlmZl9ub19vcHRpbWl6ZTsKKyAgICBpbnQgcmV0OworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFJJVkFURSAmJiBjdHgtPnBhZGRpbmcgIT0gTUJFRFRMU19SU0FfUEtDU19WMTUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgb2xlbiA9IGN0eC0+bGVuOworICAgIG5iX3BhZCA9IG9sZW4gLSAzOworCisgICAgaWYoIG1kX2FsZyAhPSBNQkVEVExTX01EX05PTkUgKQorICAgIHsKKyAgICAgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKTsKKyAgICAgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgICAgIGlmKCBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X21kKCBtZF9hbGcsICZvaWQsICZvaWRfc2l6ZSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICAgICBuYl9wYWQgLT0gMTAgKyBvaWRfc2l6ZTsKKworICAgICAgICBoYXNobGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApOworICAgIH0KKworICAgIG5iX3BhZCAtPSBoYXNobGVuOworCisgICAgaWYoICggbmJfcGFkIDwgOCApIHx8ICggbmJfcGFkID4gb2xlbiApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICpwKysgPSAwOworICAgICpwKysgPSBNQkVEVExTX1JTQV9TSUdOOworICAgIG1lbXNldCggcCwgMHhGRiwgbmJfcGFkICk7CisgICAgcCArPSBuYl9wYWQ7CisgICAgKnArKyA9IDA7CisKKyAgICBpZiggbWRfYWxnID09IE1CRURUTFNfTURfTk9ORSApCisgICAgeworICAgICAgICBtZW1jcHkoIHAsIGhhc2gsIGhhc2hsZW4gKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogRGlnZXN0SW5mbyA6Oj0gU0VRVUVOQ0UgeworICAgICAgICAgKiAgIGRpZ2VzdEFsZ29yaXRobSBEaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyLAorICAgICAgICAgKiAgIGRpZ2VzdCBEaWdlc3QgfQorICAgICAgICAgKgorICAgICAgICAgKiBEaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyIDo6PSBBbGdvcml0aG1JZGVudGlmaWVyCisgICAgICAgICAqCisgICAgICAgICAqIERpZ2VzdCA6Oj0gT0NURVQgU1RSSU5HCisgICAgICAgICAqLworICAgICAgICAqcCsrID0gTUJFRFRMU19BU04xX1NFUVVFTkNFIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEOworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpICggMHgwOCArIG9pZF9zaXplICsgaGFzaGxlbiApOworICAgICAgICAqcCsrID0gTUJFRFRMU19BU04xX1NFUVVFTkNFIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEOworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpICggMHgwNCArIG9pZF9zaXplICk7CisgICAgICAgICpwKysgPSBNQkVEVExTX0FTTjFfT0lEOworICAgICAgICAqcCsrID0gb2lkX3NpemUgJiAweEZGOworICAgICAgICBtZW1jcHkoIHAsIG9pZCwgb2lkX3NpemUgKTsKKyAgICAgICAgcCArPSBvaWRfc2l6ZTsKKyAgICAgICAgKnArKyA9IE1CRURUTFNfQVNOMV9OVUxMOworICAgICAgICAqcCsrID0gMHgwMDsKKyAgICAgICAgKnArKyA9IE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkc7CisgICAgICAgICpwKysgPSBoYXNobGVuOworICAgICAgICBtZW1jcHkoIHAsIGhhc2gsIGhhc2hsZW4gKTsKKyAgICB9CisKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX1JTQV9QVUJMSUMgKQorICAgICAgICByZXR1cm4oIG1iZWR0bHNfcnNhX3B1YmxpYyggIGN0eCwgc2lnLCBzaWcgKSApOworCisgICAgLyoKKyAgICAgKiBJbiBvcmRlciB0byBwcmV2ZW50IExlbnN0cmEncyBhdHRhY2ssIG1ha2UgdGhlIHNpZ25hdHVyZSBpbiBhCisgICAgICogdGVtcG9yYXJ5IGJ1ZmZlciBhbmQgY2hlY2sgaXQgYmVmb3JlIHJldHVybmluZyBpdC4KKyAgICAgKi8KKyAgICBzaWdfdHJ5ID0gbWJlZHRsc19jYWxsb2MoIDEsIGN0eC0+bGVuICk7CisgICAgaWYoIHNpZ190cnkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCApOworCisgICAgdmVyaWYgICA9IG1iZWR0bHNfY2FsbG9jKCAxLCBjdHgtPmxlbiApOworICAgIGlmKCB2ZXJpZiA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc2lnX3RyeSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfcnNhX3ByaXZhdGUoIGN0eCwgZl9ybmcsIHBfcm5nLCBzaWcsIHNpZ190cnkgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19yc2FfcHVibGljKCBjdHgsIHNpZ190cnksIHZlcmlmICkgKTsKKworICAgIC8qIENvbXBhcmUgaW4gY29uc3RhbnQgdGltZSBqdXN0IGluIGNhc2UgKi8KKyAgICBmb3IoIGRpZmYgPSAwLCBpID0gMDsgaSA8IGN0eC0+bGVuOyBpKysgKQorICAgICAgICBkaWZmIHw9IHZlcmlmW2ldIF4gc2lnW2ldOworICAgIGRpZmZfbm9fb3B0aW1pemUgPSBkaWZmOworCisgICAgaWYoIGRpZmZfbm9fb3B0aW1pemUgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9SU0FfUFJJVkFURV9GQUlMRUQ7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBtZW1jcHkoIHNpZywgc2lnX3RyeSwgY3R4LT5sZW4gKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX2ZyZWUoIHNpZ190cnkgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIHZlcmlmICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjE1ICovCisKKy8qCisgKiBEbyBhbiBSU0Egb3BlcmF0aW9uIHRvIHNpZ24gdGhlIG1lc3NhZ2UgZGlnZXN0CisgKi8KK2ludCBtYmVkdGxzX3JzYV9wa2NzMV9zaWduKCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcgKQoreworICAgIHN3aXRjaCggY3R4LT5wYWRkaW5nICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkKKyAgICAgICAgY2FzZSBNQkVEVExTX1JTQV9QS0NTX1YxNToKKyAgICAgICAgICAgIHJldHVybiBtYmVkdGxzX3JzYV9yc2Fzc2FfcGtjczFfdjE1X3NpZ24oIGN0eCwgZl9ybmcsIHBfcm5nLCBtb2RlLCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGxlbiwgaGFzaCwgc2lnICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpCisgICAgICAgIGNhc2UgTUJFRFRMU19SU0FfUEtDU19WMjE6CisgICAgICAgICAgICByZXR1cm4gbWJlZHRsc19yc2FfcnNhc3NhX3Bzc19zaWduKCBjdHgsIGZfcm5nLCBwX3JuZywgbW9kZSwgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hsZW4sIGhhc2gsIHNpZyApOworI2VuZGlmCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORyApOworICAgIH0KK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFBLQ1MjMSB2Mi4xIFJTQVNTQS1QU1MtVkVSSUZZIGZ1bmN0aW9uCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWdmMV9oYXNoX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9zYWx0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IHNpZ2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0W01CRURUTFNfTURfTUFYX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgemVyb3NbOF07CisgICAgdW5zaWduZWQgaW50IGhsZW47CisgICAgc2l6ZV90IHNsZW4sIG1zYjsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBtZF9jdHg7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19NUElfTUFYX1NJWkVdOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFJJVkFURSAmJiBjdHgtPnBhZGRpbmcgIT0gTUJFRFRMU19SU0FfUEtDU19WMjEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgc2lnbGVuID0gY3R4LT5sZW47CisKKyAgICBpZiggc2lnbGVuIDwgMTYgfHwgc2lnbGVuID4gc2l6ZW9mKCBidWYgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICByZXQgPSAoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFVCTElDICkKKyAgICAgICAgICA/IG1iZWR0bHNfcnNhX3B1YmxpYyggIGN0eCwgc2lnLCBidWYgKQorICAgICAgICAgIDogbWJlZHRsc19yc2FfcHJpdmF0ZSggY3R4LCBmX3JuZywgcF9ybmcsIHNpZywgYnVmICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcCA9IGJ1ZjsKKworICAgIGlmKCBidWZbc2lnbGVuIC0gMV0gIT0gMHhCQyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORyApOworCisgICAgaWYoIG1kX2FsZyAhPSBNQkVEVExTX01EX05PTkUgKQorICAgIHsKKyAgICAgICAgLyogR2F0aGVyIGxlbmd0aCBvZiBoYXNoIHRvIHNpZ24gKi8KKyAgICAgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApOworICAgICAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAgICAgaGFzaGxlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKyAgICB9CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWdmMV9oYXNoX2lkICk7CisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBobGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApOworICAgIHNsZW4gPSBzaWdsZW4gLSBobGVuIC0gMTsgLyogQ3VycmVudGx5IGxlbmd0aCBvZiBzYWx0ICsgcGFkZGluZyAqLworCisgICAgbWVtc2V0KCB6ZXJvcywgMCwgOCApOworCisgICAgLyoKKyAgICAgKiBOb3RlOiBFTVNBLVBTUyB2ZXJpZmljYXRpb24gaXMgb3ZlciB0aGUgbGVuZ3RoIG9mIE4gLSAxIGJpdHMKKyAgICAgKi8KKyAgICBtc2IgPSBtYmVkdGxzX21waV9iaXRsZW4oICZjdHgtPk4gKSAtIDE7CisKKyAgICAvKiBDb21wZW5zYXRlIGZvciBib3VuZGFyeSBjb25kaXRpb24gd2hlbiBhcHBseWluZyBtYXNrICovCisgICAgaWYoIG1zYiAlIDggPT0gMCApCisgICAgeworICAgICAgICBwKys7CisgICAgICAgIHNpZ2xlbiAtPSAxOworICAgIH0KKyAgICBpZiggYnVmWzBdID4+ICggOCAtIHNpZ2xlbiAqIDggKyBtc2IgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZtZF9jdHggKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmbWRfY3R4LCBtZF9pbmZvLCAwICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbWRfZnJlZSggJm1kX2N0eCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIG1nZl9tYXNrKCBwLCBzaWdsZW4gLSBobGVuIC0gMSwgcCArIHNpZ2xlbiAtIGhsZW4gLSAxLCBobGVuLCAmbWRfY3R4ICk7CisKKyAgICBidWZbMF0gJj0gMHhGRiA+PiAoIHNpZ2xlbiAqIDggLSBtc2IgKTsKKworICAgIHdoaWxlKCBwIDwgYnVmICsgc2lnbGVuICYmICpwID09IDAgKQorICAgICAgICBwKys7CisKKyAgICBpZiggcCA9PSBidWYgKyBzaWdsZW4gfHwKKyAgICAgICAgKnArKyAhPSAweDAxICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbWRfZnJlZSggJm1kX2N0eCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcgKTsKKyAgICB9CisKKyAgICAvKiBBY3R1YWwgc2FsdCBsZW4gKi8KKyAgICBzbGVuIC09IHAgLSBidWY7CisKKyAgICBpZiggZXhwZWN0ZWRfc2FsdF9sZW4gIT0gTUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZICYmCisgICAgICAgIHNsZW4gIT0gKHNpemVfdCkgZXhwZWN0ZWRfc2FsdF9sZW4gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORyApOworICAgIH0KKworICAgIC8qCisgICAgICogR2VuZXJhdGUgSCA9IEhhc2goIE0nICkKKyAgICAgKi8KKyAgICBtYmVkdGxzX21kX3N0YXJ0cyggJm1kX2N0eCApOworICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCB6ZXJvcywgOCApOworICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCBoYXNoLCBoYXNobGVuICk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoICZtZF9jdHgsIHAsIHNsZW4gKTsKKyAgICBtYmVkdGxzX21kX2ZpbmlzaCggJm1kX2N0eCwgcmVzdWx0ICk7CisKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZtZF9jdHggKTsKKworICAgIGlmKCBtZW1jbXAoIHAgKyBzbGVuLCByZXN1bHQsIGhsZW4gKSA9PSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7Cit9CisKKy8qCisgKiBTaW1wbGlmaWVkIFBLQ1MjMSB2Mi4xIFJTQVNTQS1QU1MtVkVSSUZZIGZ1bmN0aW9uCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3ZlcmlmeSggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZyApCit7CisgICAgbWJlZHRsc19tZF90eXBlX3QgbWdmMV9oYXNoX2lkID0gKCBjdHgtPmhhc2hfaWQgIT0gTUJFRFRMU19NRF9OT05FICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAobWJlZHRsc19tZF90eXBlX3QpIGN0eC0+aGFzaF9pZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1kX2FsZzsKKworICAgIHJldHVybiggbWJlZHRsc19yc2FfcnNhc3NhX3Bzc192ZXJpZnlfZXh0KCBjdHgsIGZfcm5nLCBwX3JuZywgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kX2FsZywgaGFzaGxlbiwgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1nZjFfaGFzaF9pZCwgTUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnICkgKTsKKworfQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjIxICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KQorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBQS0NTIzEgdjIuMSBSU0FTU0EtUEtDUzEtdjFfNS1WRVJJRlkgZnVuY3Rpb24KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYXNzYV9wa2NzMV92MTVfdmVyaWZ5KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4sIHNpZ2xlbiwgYXNuMV9sZW47CisgICAgdW5zaWduZWQgY2hhciAqcCwgKmVuZDsKKyAgICBtYmVkdGxzX21kX3R5cGVfdCBtc2dfbWRfYWxnOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfYXNuMV9idWYgb2lkOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfTVBJX01BWF9TSVpFXTsKKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfUlNBX1BSSVZBVEUgJiYgY3R4LT5wYWRkaW5nICE9IE1CRURUTFNfUlNBX1BLQ1NfVjE1ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHNpZ2xlbiA9IGN0eC0+bGVuOworCisgICAgaWYoIHNpZ2xlbiA8IDE2IHx8IHNpZ2xlbiA+IHNpemVvZiggYnVmICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgcmV0ID0gKCBtb2RlID09IE1CRURUTFNfUlNBX1BVQkxJQyApCisgICAgICAgICAgPyBtYmVkdGxzX3JzYV9wdWJsaWMoICBjdHgsIHNpZywgYnVmICkKKyAgICAgICAgICA6IG1iZWR0bHNfcnNhX3ByaXZhdGUoIGN0eCwgZl9ybmcsIHBfcm5nLCBzaWcsIGJ1ZiApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHAgPSBidWY7CisKKyAgICBpZiggKnArKyAhPSAwIHx8ICpwKysgIT0gTUJFRFRMU19SU0FfU0lHTiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORyApOworCisgICAgd2hpbGUoICpwICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHAgPj0gYnVmICsgc2lnbGVuIC0gMSB8fCAqcCAhPSAweEZGICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORyApOworICAgICAgICBwKys7CisgICAgfQorICAgIHArKzsKKworICAgIGxlbiA9IHNpZ2xlbiAtICggcCAtIGJ1ZiApOworCisgICAgaWYoIGxlbiA9PSBoYXNobGVuICYmIG1kX2FsZyA9PSBNQkVEVExTX01EX05PTkUgKQorICAgIHsKKyAgICAgICAgaWYoIG1lbWNtcCggcCwgaGFzaCwgaGFzaGxlbiApID09IDAgKQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQgKTsKKyAgICB9CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICk7CisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisgICAgaGFzaGxlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKworICAgIGVuZCA9IHAgKyBsZW47CisKKyAgICAvKgorICAgICAqIFBhcnNlIHRoZSBBU04uMSBzdHJ1Y3R1cmUgaW5zaWRlIHRoZSBQS0NTIzEgdjEuNSBzdHJ1Y3R1cmUKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmFzbjFfbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCApOworCisgICAgaWYoIGFzbjFfbGVuICsgMiAhPSBsZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmFzbjFfbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCApOworCisgICAgaWYoIGFzbjFfbGVuICsgNiArIGhhc2hsZW4gIT0gbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZvaWQubGVuLCBNQkVEVExTX0FTTjFfT0lEICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCApOworCisgICAgb2lkLnAgPSBwOworICAgIHAgKz0gb2lkLmxlbjsKKworICAgIGlmKCBtYmVkdGxzX29pZF9nZXRfbWRfYWxnKCAmb2lkLCAmbXNnX21kX2FsZyApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICBpZiggbWRfYWxnICE9IG1zZ19tZF9hbGcgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICAvKgorICAgICAqIGFzc3VtZSB0aGUgYWxnb3JpdGhtIHBhcmFtZXRlcnMgbXVzdCBiZSBOVUxMCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZhc24xX2xlbiwgTUJFRFRMU19BU04xX05VTEwgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmFzbjFfbGVuLCBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCApOworCisgICAgaWYoIGFzbjFfbGVuICE9IGhhc2hsZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICBpZiggbWVtY21wKCBwLCBoYXNoLCBoYXNobGVuICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQgKTsKKworICAgIHAgKz0gaGFzaGxlbjsKKworICAgIGlmKCBwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjE1ICovCisKKy8qCisgKiBEbyBhbiBSU0Egb3BlcmF0aW9uIGFuZCBjaGVjayB0aGUgbWVzc2FnZSBkaWdlc3QKKyAqLworaW50IG1iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeSggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcgKQoreworICAgIHN3aXRjaCggY3R4LT5wYWRkaW5nICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkKKyAgICAgICAgY2FzZSBNQkVEVExTX1JTQV9QS0NTX1YxNToKKyAgICAgICAgICAgIHJldHVybiBtYmVkdGxzX3JzYV9yc2Fzc2FfcGtjczFfdjE1X3ZlcmlmeSggY3R4LCBmX3JuZywgcF9ybmcsIG1vZGUsIG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hsZW4sIGhhc2gsIHNpZyApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjIxKQorICAgICAgICBjYXNlIE1CRURUTFNfUlNBX1BLQ1NfVjIxOgorICAgICAgICAgICAgcmV0dXJuIG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5KCBjdHgsIGZfcm5nLCBwX3JuZywgbW9kZSwgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGxlbiwgaGFzaCwgc2lnICk7CisjZW5kaWYKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HICk7CisgICAgfQorfQorCisvKgorICogQ29weSB0aGUgY29tcG9uZW50cyBvZiBhbiBSU0Ega2V5CisgKi8KK2ludCBtYmVkdGxzX3JzYV9jb3B5KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpkc3QsIGNvbnN0IG1iZWR0bHNfcnNhX2NvbnRleHQgKnNyYyApCit7CisgICAgaW50IHJldDsKKworICAgIGRzdC0+dmVyID0gc3JjLT52ZXI7CisgICAgZHN0LT5sZW4gPSBzcmMtPmxlbjsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJmRzdC0+TiwgJnNyYy0+TiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmZHN0LT5FLCAmc3JjLT5FICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJmRzdC0+RCwgJnNyYy0+RCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmZHN0LT5QLCAmc3JjLT5QICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZkc3QtPlEsICZzcmMtPlEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJmRzdC0+RFAsICZzcmMtPkRQICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZkc3QtPkRRLCAmc3JjLT5EUSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmZHN0LT5RUCwgJnNyYy0+UVAgKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmZHN0LT5STiwgJnNyYy0+Uk4gKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJmRzdC0+UlAsICZzcmMtPlJQICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZkc3QtPlJRLCAmc3JjLT5SUSApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZkc3QtPlZpLCAmc3JjLT5WaSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmZHN0LT5WZiwgJnNyYy0+VmYgKSApOworCisgICAgZHN0LT5wYWRkaW5nID0gc3JjLT5wYWRkaW5nOworICAgIGRzdC0+aGFzaF9pZCA9IHNyYy0+aGFzaF9pZDsKKworY2xlYW51cDoKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICBtYmVkdGxzX3JzYV9mcmVlKCBkc3QgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBjb21wb25lbnRzIG9mIGFuIFJTQSBrZXkKKyAqLwordm9pZCBtYmVkdGxzX3JzYV9mcmVlKCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHggKQoreworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPlZpICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPlZmICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+UlEgKTsgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+UlAgKTsgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+Uk4gKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5RUCApOyBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5EUSApOyBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5EUCApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPlEgICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPlAgICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPkQgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5FICApOyBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5OICApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfbXV0ZXhfZnJlZSggJmN0eC0+bXV0ZXggKTsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworI2luY2x1ZGUgIm1iZWR0bHMvc2hhMS5oIgorCisvKgorICogRXhhbXBsZSBSU0EtMTAyNCBrZXlwYWlyLCBmb3IgdGVzdCBwdXJwb3NlcworICovCisjZGVmaW5lIEtFWV9MRU4gMTI4CisKKyNkZWZpbmUgUlNBX04gICAiOTI5Mjc1ODQ1MzA2M0Q4MDNERDYwM0Q1RTc3N0Q3ODgiIFwKKyAgICAgICAgICAgICAgICAiOEVEMUQ1QkYzNTc4NjE5MEZBMkYyM0VCQzA4NDhBRUEiIFwKKyAgICAgICAgICAgICAgICAiRERBOTJDQTZDM0Q4MEIzMkM0RDEwOUJFMEYzNkQ2QUUiIFwKKyAgICAgICAgICAgICAgICAiNzEzMEI5Q0VEN0FDREY1NENGQzc1NTVBQzE0RUVCQUIiIFwKKyAgICAgICAgICAgICAgICAiOTNBODk4MTNGQkYzQzRGODA2NkQyRDgwMEY3QzM4QTgiIFwKKyAgICAgICAgICAgICAgICAiMUFFMzE5NDI5MTc0MDNGRjQ5NDZCMEE4M0QzRDNFMDUiIFwKKyAgICAgICAgICAgICAgICAiRUU1N0M2RjVGNTYwNkZCNUQ0QkM2Q0QzNEVFMDgwMUEiIFwKKyAgICAgICAgICAgICAgICAiNUU5NEJCNzdCMDc1MDcyMzNBMEJDN0JBQzhGOTBGNzkiCisKKyNkZWZpbmUgUlNBX0UgICAiMTAwMDEiCisKKyNkZWZpbmUgUlNBX0QgICAiMjRCRjYxODU0Njg3ODZGREQzMDMwODNEMjVFNjRFRkMiIFwKKyAgICAgICAgICAgICAgICAiNjZDQTQ3MkJDNDREMjUzMTAyRjhCNEE5RDNCRkE3NTAiIFwKKyAgICAgICAgICAgICAgICAiOTEzODZDMDA3NzkzN0ZFMzNGQTMyNTJEMjg4NTU4MzciIFwKKyAgICAgICAgICAgICAgICAiQUUxQjQ4NEE4QTlBNDVGN0VFOEMwQzYzNEY5OUU4Q0QiIFwKKyAgICAgICAgICAgICAgICAiREY3OUM1Q0UwN0VFNzJDN0YxMjMxNDIxOTgxNjQyMzQiIFwKKyAgICAgICAgICAgICAgICAiQ0FCQjcyNENGNzhCODE3M0I5Rjg4MEZDODYzMjI0MDciIFwKKyAgICAgICAgICAgICAgICAiQUYxRkVERkRERTJCRUI2NzRDQTE1RjNFODFBMTUyMUUiIFwKKyAgICAgICAgICAgICAgICAiMDcxNTEzQTFFODVCNURGQTAzMUYyMUVDQUU5MUEzNEQiCisKKyNkZWZpbmUgUlNBX1AgICAiQzM2RDBFQjdGQ0QyODUyMjNDRkI1QUFCQTVCREEzRDgiIFwKKyAgICAgICAgICAgICAgICAiMkMwMUNBRDE5RUE0ODRBODdFQTQzNzc2MzdFNzU1MDAiIFwKKyAgICAgICAgICAgICAgICAiRkNCMjAwNUM1QzdERDZFQzRBQzAyM0NEQTI4NUQ3OTYiIFwKKyAgICAgICAgICAgICAgICAiQzNEOUU3NUUxRUZDNDI0ODhCQjRGMUQxM0FDMzBBNTciCisKKyNkZWZpbmUgUlNBX1EgICAiQzAwMERGNTFBN0M3N0FFOEQ3QzczNzBDMUZGNTVCNjkiIFwKKyAgICAgICAgICAgICAgICAiRTIxMUMyQjlFNURCMUVEMEJGNjFEMEQ5ODk5NjIwRjQiIFwKKyAgICAgICAgICAgICAgICAiOTEwRTQxNjgzODdFM0MzMEFBMUUwMEMzMzlBNzk1MDgiIFwKKyAgICAgICAgICAgICAgICAiODQ1MkREOTZBOUE1RUE1RDlEQ0E2OERBNjM2MDMyQUYiCisKKyNkZWZpbmUgUlNBX0RQICAiQzFBQ0Y1Njc1NjQyNzRGQjA3QTBCQkFENUQyNkUyOTgiIFwKKyAgICAgICAgICAgICAgICAiM0M5NEQyMjI4OEFDRDc2M0ZEOEU1NjAwRUQ0QTcwMkQiIFwKKyAgICAgICAgICAgICAgICAiRjg0MTk4QTVGMDZDMkU3MjIzNkFFNDkwQzkzRjA3RjgiIFwKKyAgICAgICAgICAgICAgICAiM0NDNTU5Q0QyN0JDMkQxQ0E0ODg4MTE3MzBCQjU3MjUiCisKKyNkZWZpbmUgUlNBX0RRICAiNDk1OUNCRjZGOEZFRjc1MEFFRTY5NzdDMTU1NTc5QzciIFwKKyAgICAgICAgICAgICAgICAiRDhBQUVBNTY3NDlFQTI4NjIzMjcyRTRGN0QwNTkyQUYiIFwKKyAgICAgICAgICAgICAgICAiN0MxRjEzMTNDQUM5NDcxQjVDNTIzQkZFNTkyRjUxN0IiIFwKKyAgICAgICAgICAgICAgICAiNDA3QTFCRDc2QzE2NEI5M0RBMkQzMkEzODNFNTgzNTciCisKKyNkZWZpbmUgUlNBX1FQICAiOUFFN0ZCQzk5NTQ2NDMyREY3MTg5NkZDMjM5RUFEQUUiIFwKKyAgICAgICAgICAgICAgICAiRjM4RDE4RDJCMkYwRTJERDI3NUFBOTc3RTJCRjQ0MTEiIFwKKyAgICAgICAgICAgICAgICAiRjVBM0IyQTVEMzM2MDVBRUJCQ0NCQTdGRUI5RjJEMkYiIFwKKyAgICAgICAgICAgICAgICAiQTc0MjA2Q0VDMTY5RDc0QkY1QThDNTBENkY0OEVBMDgiCisKKyNkZWZpbmUgUFRfTEVOICAyNAorI2RlZmluZSBSU0FfUFQgICJceEFBXHhCQlx4Q0NceDAzXHgwMlx4MDFceDAwXHhGRlx4RkZceEZGXHhGRlx4RkYiIFwKKyAgICAgICAgICAgICAgICAiXHgxMVx4MjJceDMzXHgwQVx4MEJceDBDXHhDQ1x4RERceEREXHhERFx4RERceEREIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkKK3N0YXRpYyBpbnQgbXlyYW5kKCB2b2lkICpybmdfc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiApCit7CisjaWYgIWRlZmluZWQoX19PcGVuQlNEX18pCisgICAgc2l6ZV90IGk7CisKKyAgICBpZiggcm5nX3N0YXRlICE9IE5VTEwgKQorICAgICAgICBybmdfc3RhdGUgID0gTlVMTDsKKworICAgIGZvciggaSA9IDA7IGkgPCBsZW47ICsraSApCisgICAgICAgIG91dHB1dFtpXSA9IHJhbmQoKTsKKyNlbHNlCisgICAgaWYoIHJuZ19zdGF0ZSAhPSBOVUxMICkKKyAgICAgICAgcm5nX3N0YXRlID0gTlVMTDsKKworICAgIGFyYzRyYW5kb21fYnVmKCBvdXRwdXQsIGxlbiApOworI2VuZGlmIC8qICFPcGVuQlNEICovCisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YxNSAqLworCisvKgorICogQ2hlY2t1cCByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX3JzYV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KQorICAgIHNpemVfdCBsZW47CisgICAgbWJlZHRsc19yc2FfY29udGV4dCByc2E7CisgICAgdW5zaWduZWQgY2hhciByc2FfcGxhaW50ZXh0W1BUX0xFTl07CisgICAgdW5zaWduZWQgY2hhciByc2FfZGVjcnlwdGVkW1BUX0xFTl07CisgICAgdW5zaWduZWQgY2hhciByc2FfY2lwaGVydGV4dFtLRVlfTEVOXTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHVuc2lnbmVkIGNoYXIgc2hhMXN1bVsyMF07CisjZW5kaWYKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZyc2EsIE1CRURUTFNfUlNBX1BLQ1NfVjE1LCAwICk7CisKKyAgICByc2EubGVuID0gS0VZX0xFTjsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLk4gLCAxNiwgUlNBX04gICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLkUgLCAxNiwgUlNBX0UgICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLkQgLCAxNiwgUlNBX0QgICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLlAgLCAxNiwgUlNBX1AgICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLlEgLCAxNiwgUlNBX1EgICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLkRQLCAxNiwgUlNBX0RQICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLkRRLCAxNiwgUlNBX0RRICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLlFQLCAxNiwgUlNBX1FQICkgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgUlNBIGtleSB2YWxpZGF0aW9uOiAiICk7CisKKyAgICBpZiggbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCAgJnJzYSApICE9IDAgfHwKKyAgICAgICAgbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggJnJzYSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuICBQS0NTIzEgZW5jcnlwdGlvbiA6ICIgKTsKKworICAgIG1lbWNweSggcnNhX3BsYWludGV4dCwgUlNBX1BULCBQVF9MRU4gKTsKKworICAgIGlmKCBtYmVkdGxzX3JzYV9wa2NzMV9lbmNyeXB0KCAmcnNhLCBteXJhbmQsIE5VTEwsIE1CRURUTFNfUlNBX1BVQkxJQywgUFRfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNhX3BsYWludGV4dCwgcnNhX2NpcGhlcnRleHQgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiAgUEtDUyMxIGRlY3J5cHRpb24gOiAiICk7CisKKyAgICBpZiggbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdCggJnJzYSwgbXlyYW5kLCBOVUxMLCBNQkVEVExTX1JTQV9QUklWQVRFLCAmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNhX2NpcGhlcnRleHQsIHJzYV9kZWNyeXB0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocnNhX2RlY3J5cHRlZCkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBpZiggbWVtY21wKCByc2FfZGVjcnlwdGVkLCByc2FfcGxhaW50ZXh0LCBsZW4gKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQS0NTIzEgZGF0YSBzaWduICA6ICIgKTsKKworICAgIG1iZWR0bHNfc2hhMSggcnNhX3BsYWludGV4dCwgUFRfTEVOLCBzaGExc3VtICk7CisKKyAgICBpZiggbWJlZHRsc19yc2FfcGtjczFfc2lnbiggJnJzYSwgbXlyYW5kLCBOVUxMLCBNQkVEVExTX1JTQV9QUklWQVRFLCBNQkVEVExTX01EX1NIQTEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBzaGExc3VtLCByc2FfY2lwaGVydGV4dCApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuICBQS0NTIzEgc2lnLiB2ZXJpZnk6ICIgKTsKKworICAgIGlmKCBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkoICZyc2EsIE5VTEwsIE5VTEwsIE1CRURUTFNfUlNBX1BVQkxJQywgTUJFRFRMU19NRF9TSEExLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaGExc3VtLCByc2FfY2lwaGVydGV4dCApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmcnNhICk7CisjZWxzZSAvKiBNQkVEVExTX1BLQ1MxX1YxNSAqLworICAgICgodm9pZCkgdmVyYm9zZSk7CisjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMTUgKi8KKyAgICByZXR1cm4oIHJldCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NoYTEuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2NmMmEyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc2hhMS5jCkBAIC0wLDAgKzEsNDQ4IEBACisvKgorICogIEZJUFMtMTgwLTEgY29tcGxpYW50IFNIQS0xIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBTSEEtMSBzdGFuZGFyZCB3YXMgcHVibGlzaGVkIGJ5IE5JU1QgaW4gMTk5My4KKyAqCisgKiAgaHR0cDovL3d3dy5pdGwubmlzdC5nb3YvZmlwc3B1YnMvZmlwMTgwLTEuaHRtCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTEuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTFfQUxUKQorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIqKXY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIDMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbiBtYWNyb3MgKGJpZyBlbmRpYW4pCisgKi8KKyNpZm5kZWYgR0VUX1VJTlQzMl9CRQorI2RlZmluZSBHRVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobikgPSAoICh1aW50MzJfdCkgKGIpWyhpKSAgICBdIDw8IDI0ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMV0gPDwgMTYgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAyXSA8PCAgOCApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDNdICAgICAgICk7ICAgICAgICAgICAgXAorfQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQzMl9CRQorI2RlZmluZSBQVVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoYilbKGkpICAgIF0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMjQgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAxNiApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDJdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+ICA4ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgM10gPSAodW5zaWduZWQgY2hhcikgKCAobikgICAgICAgKTsgICAgICAgXAorfQorI2VuZGlmCisKK3ZvaWQgbWJlZHRsc19zaGExX2luaXQoIG1iZWR0bHNfc2hhMV9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfc2hhMV9jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX3NoYTFfZnJlZSggbWJlZHRsc19zaGExX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19zaGExX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfc2hhMV9jbG9uZSggbWJlZHRsc19zaGExX2NvbnRleHQgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NoYTFfY29udGV4dCAqc3JjICkKK3sKKyAgICAqZHN0ID0gKnNyYzsKK30KKworLyoKKyAqIFNIQS0xIGNvbnRleHQgc2V0dXAKKyAqLwordm9pZCBtYmVkdGxzX3NoYTFfc3RhcnRzKCBtYmVkdGxzX3NoYTFfY29udGV4dCAqY3R4ICkKK3sKKyAgICBjdHgtPnRvdGFsWzBdID0gMDsKKyAgICBjdHgtPnRvdGFsWzFdID0gMDsKKworICAgIGN0eC0+c3RhdGVbMF0gPSAweDY3NDUyMzAxOworICAgIGN0eC0+c3RhdGVbMV0gPSAweEVGQ0RBQjg5OworICAgIGN0eC0+c3RhdGVbMl0gPSAweDk4QkFEQ0ZFOworICAgIGN0eC0+c3RhdGVbM10gPSAweDEwMzI1NDc2OworICAgIGN0eC0+c3RhdGVbNF0gPSAweEMzRDJFMUYwOworfQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19TSEExX1BST0NFU1NfQUxUKQordm9pZCBtYmVkdGxzX3NoYTFfcHJvY2VzcyggbWJlZHRsc19zaGExX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBkYXRhWzY0XSApCit7CisgICAgdWludDMyX3QgdGVtcCwgV1sxNl0sIEEsIEIsIEMsIEQsIEU7CisKKyAgICBHRVRfVUlOVDMyX0JFKCBXWyAwXSwgZGF0YSwgIDAgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWyAxXSwgZGF0YSwgIDQgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWyAyXSwgZGF0YSwgIDggKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWyAzXSwgZGF0YSwgMTIgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWyA0XSwgZGF0YSwgMTYgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWyA1XSwgZGF0YSwgMjAgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWyA2XSwgZGF0YSwgMjQgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWyA3XSwgZGF0YSwgMjggKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWyA4XSwgZGF0YSwgMzIgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWyA5XSwgZGF0YSwgMzYgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWzEwXSwgZGF0YSwgNDAgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWzExXSwgZGF0YSwgNDQgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWzEyXSwgZGF0YSwgNDggKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWzEzXSwgZGF0YSwgNTIgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWzE0XSwgZGF0YSwgNTYgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBXWzE1XSwgZGF0YSwgNjAgKTsKKworI2RlZmluZSBTKHgsbikgKCh4IDw8IG4pIHwgKCh4ICYgMHhGRkZGRkZGRikgPj4gKDMyIC0gbikpKQorCisjZGVmaW5lIFIodCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlbXAgPSBXWyggdCAtICAzICkgJiAweDBGXSBeIFdbKCB0IC0gOCApICYgMHgwRl0gXiBcCisgICAgICAgICAgIFdbKCB0IC0gMTQgKSAmIDB4MEZdIF4gV1sgIHQgICAgICAgJiAweDBGXSwgIFwKKyAgICAoIFdbdCAmIDB4MEZdID0gUyh0ZW1wLDEpICkgICAgICAgICAgICAgICAgICAgICAgICAgXAorKQorCisjZGVmaW5lIFAoYSxiLGMsZCxlLHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGUgKz0gUyhhLDUpICsgRihiLGMsZCkgKyBLICsgeDsgYiA9IFMoYiwzMCk7ICAgICAgICBcCit9CisKKyAgICBBID0gY3R4LT5zdGF0ZVswXTsKKyAgICBCID0gY3R4LT5zdGF0ZVsxXTsKKyAgICBDID0gY3R4LT5zdGF0ZVsyXTsKKyAgICBEID0gY3R4LT5zdGF0ZVszXTsKKyAgICBFID0gY3R4LT5zdGF0ZVs0XTsKKworI2RlZmluZSBGKHgseSx6KSAoeiBeICh4ICYgKHkgXiB6KSkpCisjZGVmaW5lIEsgMHg1QTgyNzk5OQorCisgICAgUCggQSwgQiwgQywgRCwgRSwgV1swXSAgKTsKKyAgICBQKCBFLCBBLCBCLCBDLCBELCBXWzFdICApOworICAgIFAoIEQsIEUsIEEsIEIsIEMsIFdbMl0gICk7CisgICAgUCggQywgRCwgRSwgQSwgQiwgV1szXSAgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBBLCBXWzRdICApOworICAgIFAoIEEsIEIsIEMsIEQsIEUsIFdbNV0gICk7CisgICAgUCggRSwgQSwgQiwgQywgRCwgV1s2XSAgKTsKKyAgICBQKCBELCBFLCBBLCBCLCBDLCBXWzddICApOworICAgIFAoIEMsIEQsIEUsIEEsIEIsIFdbOF0gICk7CisgICAgUCggQiwgQywgRCwgRSwgQSwgV1s5XSAgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBXWzEwXSApOworICAgIFAoIEUsIEEsIEIsIEMsIEQsIFdbMTFdICk7CisgICAgUCggRCwgRSwgQSwgQiwgQywgV1sxMl0gKTsKKyAgICBQKCBDLCBELCBFLCBBLCBCLCBXWzEzXSApOworICAgIFAoIEIsIEMsIEQsIEUsIEEsIFdbMTRdICk7CisgICAgUCggQSwgQiwgQywgRCwgRSwgV1sxNV0gKTsKKyAgICBQKCBFLCBBLCBCLCBDLCBELCBSKDE2KSApOworICAgIFAoIEQsIEUsIEEsIEIsIEMsIFIoMTcpICk7CisgICAgUCggQywgRCwgRSwgQSwgQiwgUigxOCkgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBBLCBSKDE5KSApOworCisjdW5kZWYgSworI3VuZGVmIEYKKworI2RlZmluZSBGKHgseSx6KSAoeCBeIHkgXiB6KQorI2RlZmluZSBLIDB4NkVEOUVCQTEKKworICAgIFAoIEEsIEIsIEMsIEQsIEUsIFIoMjApICk7CisgICAgUCggRSwgQSwgQiwgQywgRCwgUigyMSkgKTsKKyAgICBQKCBELCBFLCBBLCBCLCBDLCBSKDIyKSApOworICAgIFAoIEMsIEQsIEUsIEEsIEIsIFIoMjMpICk7CisgICAgUCggQiwgQywgRCwgRSwgQSwgUigyNCkgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBSKDI1KSApOworICAgIFAoIEUsIEEsIEIsIEMsIEQsIFIoMjYpICk7CisgICAgUCggRCwgRSwgQSwgQiwgQywgUigyNykgKTsKKyAgICBQKCBDLCBELCBFLCBBLCBCLCBSKDI4KSApOworICAgIFAoIEIsIEMsIEQsIEUsIEEsIFIoMjkpICk7CisgICAgUCggQSwgQiwgQywgRCwgRSwgUigzMCkgKTsKKyAgICBQKCBFLCBBLCBCLCBDLCBELCBSKDMxKSApOworICAgIFAoIEQsIEUsIEEsIEIsIEMsIFIoMzIpICk7CisgICAgUCggQywgRCwgRSwgQSwgQiwgUigzMykgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBBLCBSKDM0KSApOworICAgIFAoIEEsIEIsIEMsIEQsIEUsIFIoMzUpICk7CisgICAgUCggRSwgQSwgQiwgQywgRCwgUigzNikgKTsKKyAgICBQKCBELCBFLCBBLCBCLCBDLCBSKDM3KSApOworICAgIFAoIEMsIEQsIEUsIEEsIEIsIFIoMzgpICk7CisgICAgUCggQiwgQywgRCwgRSwgQSwgUigzOSkgKTsKKworI3VuZGVmIEsKKyN1bmRlZiBGCisKKyNkZWZpbmUgRih4LHkseikgKCh4ICYgeSkgfCAoeiAmICh4IHwgeSkpKQorI2RlZmluZSBLIDB4OEYxQkJDREMKKworICAgIFAoIEEsIEIsIEMsIEQsIEUsIFIoNDApICk7CisgICAgUCggRSwgQSwgQiwgQywgRCwgUig0MSkgKTsKKyAgICBQKCBELCBFLCBBLCBCLCBDLCBSKDQyKSApOworICAgIFAoIEMsIEQsIEUsIEEsIEIsIFIoNDMpICk7CisgICAgUCggQiwgQywgRCwgRSwgQSwgUig0NCkgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBSKDQ1KSApOworICAgIFAoIEUsIEEsIEIsIEMsIEQsIFIoNDYpICk7CisgICAgUCggRCwgRSwgQSwgQiwgQywgUig0NykgKTsKKyAgICBQKCBDLCBELCBFLCBBLCBCLCBSKDQ4KSApOworICAgIFAoIEIsIEMsIEQsIEUsIEEsIFIoNDkpICk7CisgICAgUCggQSwgQiwgQywgRCwgRSwgUig1MCkgKTsKKyAgICBQKCBFLCBBLCBCLCBDLCBELCBSKDUxKSApOworICAgIFAoIEQsIEUsIEEsIEIsIEMsIFIoNTIpICk7CisgICAgUCggQywgRCwgRSwgQSwgQiwgUig1MykgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBBLCBSKDU0KSApOworICAgIFAoIEEsIEIsIEMsIEQsIEUsIFIoNTUpICk7CisgICAgUCggRSwgQSwgQiwgQywgRCwgUig1NikgKTsKKyAgICBQKCBELCBFLCBBLCBCLCBDLCBSKDU3KSApOworICAgIFAoIEMsIEQsIEUsIEEsIEIsIFIoNTgpICk7CisgICAgUCggQiwgQywgRCwgRSwgQSwgUig1OSkgKTsKKworI3VuZGVmIEsKKyN1bmRlZiBGCisKKyNkZWZpbmUgRih4LHkseikgKHggXiB5IF4geikKKyNkZWZpbmUgSyAweENBNjJDMUQ2CisKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBSKDYwKSApOworICAgIFAoIEUsIEEsIEIsIEMsIEQsIFIoNjEpICk7CisgICAgUCggRCwgRSwgQSwgQiwgQywgUig2MikgKTsKKyAgICBQKCBDLCBELCBFLCBBLCBCLCBSKDYzKSApOworICAgIFAoIEIsIEMsIEQsIEUsIEEsIFIoNjQpICk7CisgICAgUCggQSwgQiwgQywgRCwgRSwgUig2NSkgKTsKKyAgICBQKCBFLCBBLCBCLCBDLCBELCBSKDY2KSApOworICAgIFAoIEQsIEUsIEEsIEIsIEMsIFIoNjcpICk7CisgICAgUCggQywgRCwgRSwgQSwgQiwgUig2OCkgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBBLCBSKDY5KSApOworICAgIFAoIEEsIEIsIEMsIEQsIEUsIFIoNzApICk7CisgICAgUCggRSwgQSwgQiwgQywgRCwgUig3MSkgKTsKKyAgICBQKCBELCBFLCBBLCBCLCBDLCBSKDcyKSApOworICAgIFAoIEMsIEQsIEUsIEEsIEIsIFIoNzMpICk7CisgICAgUCggQiwgQywgRCwgRSwgQSwgUig3NCkgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBSKDc1KSApOworICAgIFAoIEUsIEEsIEIsIEMsIEQsIFIoNzYpICk7CisgICAgUCggRCwgRSwgQSwgQiwgQywgUig3NykgKTsKKyAgICBQKCBDLCBELCBFLCBBLCBCLCBSKDc4KSApOworICAgIFAoIEIsIEMsIEQsIEUsIEEsIFIoNzkpICk7CisKKyN1bmRlZiBLCisjdW5kZWYgRgorCisgICAgY3R4LT5zdGF0ZVswXSArPSBBOworICAgIGN0eC0+c3RhdGVbMV0gKz0gQjsKKyAgICBjdHgtPnN0YXRlWzJdICs9IEM7CisgICAgY3R4LT5zdGF0ZVszXSArPSBEOworICAgIGN0eC0+c3RhdGVbNF0gKz0gRTsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19TSEExX1BST0NFU1NfQUxUICovCisKKy8qCisgKiBTSEEtMSBwcm9jZXNzIGJ1ZmZlcgorICovCit2b2lkIG1iZWR0bHNfc2hhMV91cGRhdGUoIG1iZWR0bHNfc2hhMV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiApCit7CisgICAgc2l6ZV90IGZpbGw7CisgICAgdWludDMyX3QgbGVmdDsKKworICAgIGlmKCBpbGVuID09IDAgKQorICAgICAgICByZXR1cm47CisKKyAgICBsZWZ0ID0gY3R4LT50b3RhbFswXSAmIDB4M0Y7CisgICAgZmlsbCA9IDY0IC0gbGVmdDsKKworICAgIGN0eC0+dG90YWxbMF0gKz0gKHVpbnQzMl90KSBpbGVuOworICAgIGN0eC0+dG90YWxbMF0gJj0gMHhGRkZGRkZGRjsKKworICAgIGlmKCBjdHgtPnRvdGFsWzBdIDwgKHVpbnQzMl90KSBpbGVuICkKKyAgICAgICAgY3R4LT50b3RhbFsxXSsrOworCisgICAgaWYoIGxlZnQgJiYgaWxlbiA+PSBmaWxsICkKKyAgICB7CisgICAgICAgIG1lbWNweSggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksIGlucHV0LCBmaWxsICk7CisgICAgICAgIG1iZWR0bHNfc2hhMV9wcm9jZXNzKCBjdHgsIGN0eC0+YnVmZmVyICk7CisgICAgICAgIGlucHV0ICs9IGZpbGw7CisgICAgICAgIGlsZW4gIC09IGZpbGw7CisgICAgICAgIGxlZnQgPSAwOworICAgIH0KKworICAgIHdoaWxlKCBpbGVuID49IDY0ICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc2hhMV9wcm9jZXNzKCBjdHgsIGlucHV0ICk7CisgICAgICAgIGlucHV0ICs9IDY0OworICAgICAgICBpbGVuICAtPSA2NDsKKyAgICB9CisKKyAgICBpZiggaWxlbiA+IDAgKQorICAgICAgICBtZW1jcHkoICh2b2lkICopIChjdHgtPmJ1ZmZlciArIGxlZnQpLCBpbnB1dCwgaWxlbiApOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3BhZGRpbmdbNjRdID0KK3sKKyAweDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCisvKgorICogU0hBLTEgZmluYWwgZGlnZXN0CisgKi8KK3ZvaWQgbWJlZHRsc19zaGExX2ZpbmlzaCggbWJlZHRsc19zaGExX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbMjBdICkKK3sKKyAgICB1aW50MzJfdCBsYXN0LCBwYWRuOworICAgIHVpbnQzMl90IGhpZ2gsIGxvdzsKKyAgICB1bnNpZ25lZCBjaGFyIG1zZ2xlbls4XTsKKworICAgIGhpZ2ggPSAoIGN0eC0+dG90YWxbMF0gPj4gMjkgKQorICAgICAgICAgfCAoIGN0eC0+dG90YWxbMV0gPDwgIDMgKTsKKyAgICBsb3cgID0gKCBjdHgtPnRvdGFsWzBdIDw8ICAzICk7CisKKyAgICBQVVRfVUlOVDMyX0JFKCBoaWdoLCBtc2dsZW4sIDAgKTsKKyAgICBQVVRfVUlOVDMyX0JFKCBsb3csICBtc2dsZW4sIDQgKTsKKworICAgIGxhc3QgPSBjdHgtPnRvdGFsWzBdICYgMHgzRjsKKyAgICBwYWRuID0gKCBsYXN0IDwgNTYgKSA/ICggNTYgLSBsYXN0ICkgOiAoIDEyMCAtIGxhc3QgKTsKKworICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoIGN0eCwgc2hhMV9wYWRkaW5nLCBwYWRuICk7CisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggY3R4LCBtc2dsZW4sIDggKTsKKworICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+c3RhdGVbMF0sIG91dHB1dCwgIDAgKTsKKyAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPnN0YXRlWzFdLCBvdXRwdXQsICA0ICk7CisgICAgUFVUX1VJTlQzMl9CRSggY3R4LT5zdGF0ZVsyXSwgb3V0cHV0LCAgOCApOworICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+c3RhdGVbM10sIG91dHB1dCwgMTIgKTsKKyAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPnN0YXRlWzRdLCBvdXRwdXQsIDE2ICk7Cit9CisKKyNlbmRpZiAvKiAhTUJFRFRMU19TSEExX0FMVCAqLworCisvKgorICogb3V0cHV0ID0gU0hBLTEoIGlucHV0IGJ1ZmZlciApCisgKi8KK3ZvaWQgbWJlZHRsc19zaGExKCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzIwXSApCit7CisgICAgbWJlZHRsc19zaGExX2NvbnRleHQgY3R4OworCisgICAgbWJlZHRsc19zaGExX2luaXQoICZjdHggKTsKKyAgICBtYmVkdGxzX3NoYTFfc3RhcnRzKCAmY3R4ICk7CisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJmN0eCwgaW5wdXQsIGlsZW4gKTsKKyAgICBtYmVkdGxzX3NoYTFfZmluaXNoKCAmY3R4LCBvdXRwdXQgKTsKKyAgICBtYmVkdGxzX3NoYTFfZnJlZSggJmN0eCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKy8qCisgKiBGSVBTLTE4MC0xIHRlc3QgdmVjdG9ycworICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3Rlc3RfYnVmWzNdWzU3XSA9Cit7CisgICAgeyAiYWJjIiB9LAorICAgIHsgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIiB9LAorICAgIHsgIiIgfQorfTsKKworc3RhdGljIGNvbnN0IGludCBzaGExX3Rlc3RfYnVmbGVuWzNdID0KK3sKKyAgICAzLCA1NiwgMTAwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV90ZXN0X3N1bVszXVsyMF0gPQoreworICAgIHsgMHhBOSwgMHg5OSwgMHgzRSwgMHgzNiwgMHg0NywgMHgwNiwgMHg4MSwgMHg2QSwgMHhCQSwgMHgzRSwKKyAgICAgIDB4MjUsIDB4NzEsIDB4NzgsIDB4NTAsIDB4QzIsIDB4NkMsIDB4OUMsIDB4RDAsIDB4RDgsIDB4OUQgfSwKKyAgICB7IDB4ODQsIDB4OTgsIDB4M0UsIDB4NDQsIDB4MUMsIDB4M0IsIDB4RDIsIDB4NkUsIDB4QkEsIDB4QUUsCisgICAgICAweDRBLCAweEExLCAweEY5LCAweDUxLCAweDI5LCAweEU1LCAweEU1LCAweDQ2LCAweDcwLCAweEYxIH0sCisgICAgeyAweDM0LCAweEFBLCAweDk3LCAweDNDLCAweEQ0LCAweEM0LCAweERBLCAweEE0LCAweEY2LCAweDFFLAorICAgICAgMHhFQiwgMHgyQiwgMHhEQiwgMHhBRCwgMHgyNywgMHgzMSwgMHg2NSwgMHgzNCwgMHgwMSwgMHg2RiB9Cit9OworCisvKgorICogQ2hlY2t1cCByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX3NoYTFfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IGksIGosIGJ1ZmxlbiwgcmV0ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKyAgICB1bnNpZ25lZCBjaGFyIHNoYTFzdW1bMjBdOworICAgIG1iZWR0bHNfc2hhMV9jb250ZXh0IGN0eDsKKworICAgIG1iZWR0bHNfc2hhMV9pbml0KCAmY3R4ICk7CisKKyAgICAvKgorICAgICAqIFNIQS0xCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IDM7IGkrKyApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBTSEEtMSB0ZXN0ICMlZDogIiwgaSArIDEgKTsKKworICAgICAgICBtYmVkdGxzX3NoYTFfc3RhcnRzKCAmY3R4ICk7CisKKyAgICAgICAgaWYoIGkgPT0gMiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbXNldCggYnVmLCAnYScsIGJ1ZmxlbiA9IDEwMDAgKTsKKworICAgICAgICAgICAgZm9yKCBqID0gMDsgaiA8IDEwMDA7IGorKyApCisgICAgICAgICAgICAgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJmN0eCwgYnVmLCBidWZsZW4gKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmY3R4LCBzaGExX3Rlc3RfYnVmW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYTFfdGVzdF9idWZsZW5baV0gKTsKKworICAgICAgICBtYmVkdGxzX3NoYTFfZmluaXNoKCAmY3R4LCBzaGExc3VtICk7CisKKyAgICAgICAgaWYoIG1lbWNtcCggc2hhMXN1bSwgc2hhMV90ZXN0X3N1bVtpXSwgMjAgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3NoYTFfZnJlZSggJmN0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc2hhMjU2LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zaGEyNTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDI1ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc2hhMjU2LmMKQEAgLTAsMCArMSw0NTggQEAKKy8qCisgKiAgRklQUy0xODAtMiBjb21wbGlhbnQgU0hBLTI1NiBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgU0hBLTI1NiBTZWN1cmUgSGFzaCBTdGFuZGFyZCB3YXMgcHVibGlzaGVkIGJ5IE5JU1QgaW4gMjAwMi4KKyAqCisgKiAgaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE4MC0yL2ZpcHMxODAtMi5wZGYKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorCisjaW5jbHVkZSAibWJlZHRscy9zaGEyNTYuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQUxUKQorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uIG1hY3JvcyAoYmlnIGVuZGlhbikKKyAqLworI2lmbmRlZiBHRVRfVUlOVDMyX0JFCisjZGVmaW5lIEdFVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChuKSA9ICggKHVpbnQzMl90KSAoYilbKGkpICAgIF0gPDwgMjQgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAxXSA8PCAxNiApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDJdIDw8ICA4ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgM10gICAgICAgKTsgICAgICAgICAgICBcCit9IHdoaWxlKCAwICkKKyNlbmRpZgorCisjaWZuZGVmIFBVVF9VSU5UMzJfQkUKKyNkZWZpbmUgUFVUX1VJTlQzMl9CRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGIpWyhpKSAgICBdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDI0ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgMV0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMTYgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAgOCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDNdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pICAgICAgICk7ICAgICAgIFwKK30gd2hpbGUoIDAgKQorI2VuZGlmCisKK3ZvaWQgbWJlZHRsc19zaGEyNTZfaW5pdCggbWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX3NoYTI1Nl9mcmVlKCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfc2hhMjU2X2Nsb25lKCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpzcmMgKQoreworICAgICpkc3QgPSAqc3JjOworfQorCisvKgorICogU0hBLTI1NiBjb250ZXh0IHNldHVwCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfc3RhcnRzKCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGludCBpczIyNCApCit7CisgICAgY3R4LT50b3RhbFswXSA9IDA7CisgICAgY3R4LT50b3RhbFsxXSA9IDA7CisKKyAgICBpZiggaXMyMjQgPT0gMCApCisgICAgeworICAgICAgICAvKiBTSEEtMjU2ICovCisgICAgICAgIGN0eC0+c3RhdGVbMF0gPSAweDZBMDlFNjY3OworICAgICAgICBjdHgtPnN0YXRlWzFdID0gMHhCQjY3QUU4NTsKKyAgICAgICAgY3R4LT5zdGF0ZVsyXSA9IDB4M0M2RUYzNzI7CisgICAgICAgIGN0eC0+c3RhdGVbM10gPSAweEE1NEZGNTNBOworICAgICAgICBjdHgtPnN0YXRlWzRdID0gMHg1MTBFNTI3RjsKKyAgICAgICAgY3R4LT5zdGF0ZVs1XSA9IDB4OUIwNTY4OEM7CisgICAgICAgIGN0eC0+c3RhdGVbNl0gPSAweDFGODNEOUFCOworICAgICAgICBjdHgtPnN0YXRlWzddID0gMHg1QkUwQ0QxOTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogU0hBLTIyNCAqLworICAgICAgICBjdHgtPnN0YXRlWzBdID0gMHhDMTA1OUVEODsKKyAgICAgICAgY3R4LT5zdGF0ZVsxXSA9IDB4MzY3Q0Q1MDc7CisgICAgICAgIGN0eC0+c3RhdGVbMl0gPSAweDMwNzBERDE3OworICAgICAgICBjdHgtPnN0YXRlWzNdID0gMHhGNzBFNTkzOTsKKyAgICAgICAgY3R4LT5zdGF0ZVs0XSA9IDB4RkZDMDBCMzE7CisgICAgICAgIGN0eC0+c3RhdGVbNV0gPSAweDY4NTgxNTExOworICAgICAgICBjdHgtPnN0YXRlWzZdID0gMHg2NEY5OEZBNzsKKyAgICAgICAgY3R4LT5zdGF0ZVs3XSA9IDB4QkVGQTRGQTQ7CisgICAgfQorCisgICAgY3R4LT5pczIyNCA9IGlzMjI0OworfQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfUFJPQ0VTU19BTFQpCitzdGF0aWMgY29uc3QgdWludDMyX3QgS1tdID0KK3sKKyAgICAweDQyOEEyRjk4LCAweDcxMzc0NDkxLCAweEI1QzBGQkNGLCAweEU5QjVEQkE1LAorICAgIDB4Mzk1NkMyNUIsIDB4NTlGMTExRjEsIDB4OTIzRjgyQTQsIDB4QUIxQzVFRDUsCisgICAgMHhEODA3QUE5OCwgMHgxMjgzNUIwMSwgMHgyNDMxODVCRSwgMHg1NTBDN0RDMywKKyAgICAweDcyQkU1RDc0LCAweDgwREVCMUZFLCAweDlCREMwNkE3LCAweEMxOUJGMTc0LAorICAgIDB4RTQ5QjY5QzEsIDB4RUZCRTQ3ODYsIDB4MEZDMTlEQzYsIDB4MjQwQ0ExQ0MsCisgICAgMHgyREU5MkM2RiwgMHg0QTc0ODRBQSwgMHg1Q0IwQTlEQywgMHg3NkY5ODhEQSwKKyAgICAweDk4M0U1MTUyLCAweEE4MzFDNjZELCAweEIwMDMyN0M4LCAweEJGNTk3RkM3LAorICAgIDB4QzZFMDBCRjMsIDB4RDVBNzkxNDcsIDB4MDZDQTYzNTEsIDB4MTQyOTI5NjcsCisgICAgMHgyN0I3MEE4NSwgMHgyRTFCMjEzOCwgMHg0RDJDNkRGQywgMHg1MzM4MEQxMywKKyAgICAweDY1MEE3MzU0LCAweDc2NkEwQUJCLCAweDgxQzJDOTJFLCAweDkyNzIyQzg1LAorICAgIDB4QTJCRkU4QTEsIDB4QTgxQTY2NEIsIDB4QzI0QjhCNzAsIDB4Qzc2QzUxQTMsCisgICAgMHhEMTkyRTgxOSwgMHhENjk5MDYyNCwgMHhGNDBFMzU4NSwgMHgxMDZBQTA3MCwKKyAgICAweDE5QTRDMTE2LCAweDFFMzc2QzA4LCAweDI3NDg3NzRDLCAweDM0QjBCQ0I1LAorICAgIDB4MzkxQzBDQjMsIDB4NEVEOEFBNEEsIDB4NUI5Q0NBNEYsIDB4NjgyRTZGRjMsCisgICAgMHg3NDhGODJFRSwgMHg3OEE1NjM2RiwgMHg4NEM4NzgxNCwgMHg4Q0M3MDIwOCwKKyAgICAweDkwQkVGRkZBLCAweEE0NTA2Q0VCLCAweEJFRjlBM0Y3LCAweEM2NzE3OEYyLAorfTsKKworI2RlZmluZSAgU0hSKHgsbikgKCh4ICYgMHhGRkZGRkZGRikgPj4gbikKKyNkZWZpbmUgUk9UUih4LG4pIChTSFIoeCxuKSB8ICh4IDw8ICgzMiAtIG4pKSkKKworI2RlZmluZSBTMCh4KSAoUk9UUih4LCA3KSBeIFJPVFIoeCwxOCkgXiAgU0hSKHgsIDMpKQorI2RlZmluZSBTMSh4KSAoUk9UUih4LDE3KSBeIFJPVFIoeCwxOSkgXiAgU0hSKHgsMTApKQorCisjZGVmaW5lIFMyKHgpIChST1RSKHgsIDIpIF4gUk9UUih4LDEzKSBeIFJPVFIoeCwyMikpCisjZGVmaW5lIFMzKHgpIChST1RSKHgsIDYpIF4gUk9UUih4LDExKSBeIFJPVFIoeCwyNSkpCisKKyNkZWZpbmUgRjAoeCx5LHopICgoeCAmIHkpIHwgKHogJiAoeCB8IHkpKSkKKyNkZWZpbmUgRjEoeCx5LHopICh6IF4gKHggJiAoeSBeIHopKSkKKworI2RlZmluZSBSKHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFdbdF0gPSBTMShXW3QgLSAgMl0pICsgV1t0IC0gIDddICsgICAgICAgICAgXAorICAgICAgICAgICBTMChXW3QgLSAxNV0pICsgV1t0IC0gMTZdICAgICAgICAgICAgXAorKQorCisjZGVmaW5lIFAoYSxiLGMsZCxlLGYsZyxoLHgsSykgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcDEgPSBoICsgUzMoZSkgKyBGMShlLGYsZykgKyBLICsgeDsgICAgICBcCisgICAgdGVtcDIgPSBTMihhKSArIEYwKGEsYixjKTsgICAgICAgICAgICAgICAgICBcCisgICAgZCArPSB0ZW1wMTsgaCA9IHRlbXAxICsgdGVtcDI7ICAgICAgICAgICAgICBcCit9CisKK3ZvaWQgbWJlZHRsc19zaGEyNTZfcHJvY2VzcyggbWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdICkKK3sKKyAgICB1aW50MzJfdCB0ZW1wMSwgdGVtcDIsIFdbNjRdOworICAgIHVpbnQzMl90IEFbOF07CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICAgICAgQVtpXSA9IGN0eC0+c3RhdGVbaV07CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X1NNQUxMRVIpCisgICAgZm9yKCBpID0gMDsgaSA8IDY0OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIGkgPCAxNiApCisgICAgICAgICAgICBHRVRfVUlOVDMyX0JFKCBXW2ldLCBkYXRhLCA0ICogaSApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSKCBpICk7CisKKyAgICAgICAgUCggQVswXSwgQVsxXSwgQVsyXSwgQVszXSwgQVs0XSwgQVs1XSwgQVs2XSwgQVs3XSwgV1tpXSwgS1tpXSApOworCisgICAgICAgIHRlbXAxID0gQVs3XTsgQVs3XSA9IEFbNl07IEFbNl0gPSBBWzVdOyBBWzVdID0gQVs0XTsgQVs0XSA9IEFbM107CisgICAgICAgIEFbM10gPSBBWzJdOyBBWzJdID0gQVsxXTsgQVsxXSA9IEFbMF07IEFbMF0gPSB0ZW1wMTsKKyAgICB9CisjZWxzZSAvKiBNQkVEVExTX1NIQTI1Nl9TTUFMTEVSICovCisgICAgZm9yKCBpID0gMDsgaSA8IDE2OyBpKysgKQorICAgICAgICBHRVRfVUlOVDMyX0JFKCBXW2ldLCBkYXRhLCA0ICogaSApOworCisgICAgZm9yKCBpID0gMDsgaSA8IDE2OyBpICs9IDggKQorICAgIHsKKyAgICAgICAgUCggQVswXSwgQVsxXSwgQVsyXSwgQVszXSwgQVs0XSwgQVs1XSwgQVs2XSwgQVs3XSwgV1tpKzBdLCBLW2krMF0gKTsKKyAgICAgICAgUCggQVs3XSwgQVswXSwgQVsxXSwgQVsyXSwgQVszXSwgQVs0XSwgQVs1XSwgQVs2XSwgV1tpKzFdLCBLW2krMV0gKTsKKyAgICAgICAgUCggQVs2XSwgQVs3XSwgQVswXSwgQVsxXSwgQVsyXSwgQVszXSwgQVs0XSwgQVs1XSwgV1tpKzJdLCBLW2krMl0gKTsKKyAgICAgICAgUCggQVs1XSwgQVs2XSwgQVs3XSwgQVswXSwgQVsxXSwgQVsyXSwgQVszXSwgQVs0XSwgV1tpKzNdLCBLW2krM10gKTsKKyAgICAgICAgUCggQVs0XSwgQVs1XSwgQVs2XSwgQVs3XSwgQVswXSwgQVsxXSwgQVsyXSwgQVszXSwgV1tpKzRdLCBLW2krNF0gKTsKKyAgICAgICAgUCggQVszXSwgQVs0XSwgQVs1XSwgQVs2XSwgQVs3XSwgQVswXSwgQVsxXSwgQVsyXSwgV1tpKzVdLCBLW2krNV0gKTsKKyAgICAgICAgUCggQVsyXSwgQVszXSwgQVs0XSwgQVs1XSwgQVs2XSwgQVs3XSwgQVswXSwgQVsxXSwgV1tpKzZdLCBLW2krNl0gKTsKKyAgICAgICAgUCggQVsxXSwgQVsyXSwgQVszXSwgQVs0XSwgQVs1XSwgQVs2XSwgQVs3XSwgQVswXSwgV1tpKzddLCBLW2krN10gKTsKKyAgICB9CisKKyAgICBmb3IoIGkgPSAxNjsgaSA8IDY0OyBpICs9IDggKQorICAgIHsKKyAgICAgICAgUCggQVswXSwgQVsxXSwgQVsyXSwgQVszXSwgQVs0XSwgQVs1XSwgQVs2XSwgQVs3XSwgUihpKzApLCBLW2krMF0gKTsKKyAgICAgICAgUCggQVs3XSwgQVswXSwgQVsxXSwgQVsyXSwgQVszXSwgQVs0XSwgQVs1XSwgQVs2XSwgUihpKzEpLCBLW2krMV0gKTsKKyAgICAgICAgUCggQVs2XSwgQVs3XSwgQVswXSwgQVsxXSwgQVsyXSwgQVszXSwgQVs0XSwgQVs1XSwgUihpKzIpLCBLW2krMl0gKTsKKyAgICAgICAgUCggQVs1XSwgQVs2XSwgQVs3XSwgQVswXSwgQVsxXSwgQVsyXSwgQVszXSwgQVs0XSwgUihpKzMpLCBLW2krM10gKTsKKyAgICAgICAgUCggQVs0XSwgQVs1XSwgQVs2XSwgQVs3XSwgQVswXSwgQVsxXSwgQVsyXSwgQVszXSwgUihpKzQpLCBLW2krNF0gKTsKKyAgICAgICAgUCggQVszXSwgQVs0XSwgQVs1XSwgQVs2XSwgQVs3XSwgQVswXSwgQVsxXSwgQVsyXSwgUihpKzUpLCBLW2krNV0gKTsKKyAgICAgICAgUCggQVsyXSwgQVszXSwgQVs0XSwgQVs1XSwgQVs2XSwgQVs3XSwgQVswXSwgQVsxXSwgUihpKzYpLCBLW2krNl0gKTsKKyAgICAgICAgUCggQVsxXSwgQVsyXSwgQVszXSwgQVs0XSwgQVs1XSwgQVs2XSwgQVs3XSwgQVswXSwgUihpKzcpLCBLW2krN10gKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfU01BTExFUiAqLworCisgICAgZm9yKCBpID0gMDsgaSA8IDg7IGkrKyApCisgICAgICAgIGN0eC0+c3RhdGVbaV0gKz0gQVtpXTsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19TSEEyNTZfUFJPQ0VTU19BTFQgKi8KKworLyoKKyAqIFNIQS0yNTYgcHJvY2VzcyBidWZmZXIKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl91cGRhdGUoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuICkKK3sKKyAgICBzaXplX3QgZmlsbDsKKyAgICB1aW50MzJfdCBsZWZ0OworCisgICAgaWYoIGlsZW4gPT0gMCApCisgICAgICAgIHJldHVybjsKKworICAgIGxlZnQgPSBjdHgtPnRvdGFsWzBdICYgMHgzRjsKKyAgICBmaWxsID0gNjQgLSBsZWZ0OworCisgICAgY3R4LT50b3RhbFswXSArPSAodWludDMyX3QpIGlsZW47CisgICAgY3R4LT50b3RhbFswXSAmPSAweEZGRkZGRkZGOworCisgICAgaWYoIGN0eC0+dG90YWxbMF0gPCAodWludDMyX3QpIGlsZW4gKQorICAgICAgICBjdHgtPnRvdGFsWzFdKys7CisKKyAgICBpZiggbGVmdCAmJiBpbGVuID49IGZpbGwgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwgaW5wdXQsIGZpbGwgKTsKKyAgICAgICAgbWJlZHRsc19zaGEyNTZfcHJvY2VzcyggY3R4LCBjdHgtPmJ1ZmZlciApOworICAgICAgICBpbnB1dCArPSBmaWxsOworICAgICAgICBpbGVuICAtPSBmaWxsOworICAgICAgICBsZWZ0ID0gMDsKKyAgICB9CisKKyAgICB3aGlsZSggaWxlbiA+PSA2NCApCisgICAgeworICAgICAgICBtYmVkdGxzX3NoYTI1Nl9wcm9jZXNzKCBjdHgsIGlucHV0ICk7CisgICAgICAgIGlucHV0ICs9IDY0OworICAgICAgICBpbGVuICAtPSA2NDsKKyAgICB9CisKKyAgICBpZiggaWxlbiA+IDAgKQorICAgICAgICBtZW1jcHkoICh2b2lkICopIChjdHgtPmJ1ZmZlciArIGxlZnQpLCBpbnB1dCwgaWxlbiApOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcGFkZGluZ1s2NF0gPQoreworIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKKy8qCisgKiBTSEEtMjU2IGZpbmFsIGRpZ2VzdAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaCggbWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIG91dHB1dFszMl0gKQoreworICAgIHVpbnQzMl90IGxhc3QsIHBhZG47CisgICAgdWludDMyX3QgaGlnaCwgbG93OworICAgIHVuc2lnbmVkIGNoYXIgbXNnbGVuWzhdOworCisgICAgaGlnaCA9ICggY3R4LT50b3RhbFswXSA+PiAyOSApCisgICAgICAgICB8ICggY3R4LT50b3RhbFsxXSA8PCAgMyApOworICAgIGxvdyAgPSAoIGN0eC0+dG90YWxbMF0gPDwgIDMgKTsKKworICAgIFBVVF9VSU5UMzJfQkUoIGhpZ2gsIG1zZ2xlbiwgMCApOworICAgIFBVVF9VSU5UMzJfQkUoIGxvdywgIG1zZ2xlbiwgNCApOworCisgICAgbGFzdCA9IGN0eC0+dG90YWxbMF0gJiAweDNGOworICAgIHBhZG4gPSAoIGxhc3QgPCA1NiApID8gKCA1NiAtIGxhc3QgKSA6ICggMTIwIC0gbGFzdCApOworCisgICAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCBjdHgsIHNoYTI1Nl9wYWRkaW5nLCBwYWRuICk7CisgICAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCBjdHgsIG1zZ2xlbiwgOCApOworCisgICAgUFVUX1VJTlQzMl9CRSggY3R4LT5zdGF0ZVswXSwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+c3RhdGVbMV0sIG91dHB1dCwgIDQgKTsKKyAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPnN0YXRlWzJdLCBvdXRwdXQsICA4ICk7CisgICAgUFVUX1VJTlQzMl9CRSggY3R4LT5zdGF0ZVszXSwgb3V0cHV0LCAxMiApOworICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+c3RhdGVbNF0sIG91dHB1dCwgMTYgKTsKKyAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPnN0YXRlWzVdLCBvdXRwdXQsIDIwICk7CisgICAgUFVUX1VJTlQzMl9CRSggY3R4LT5zdGF0ZVs2XSwgb3V0cHV0LCAyNCApOworCisgICAgaWYoIGN0eC0+aXMyMjQgPT0gMCApCisgICAgICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+c3RhdGVbN10sIG91dHB1dCwgMjggKTsKK30KKworI2VuZGlmIC8qICFNQkVEVExTX1NIQTI1Nl9BTFQgKi8KKworLyoKKyAqIG91dHB1dCA9IFNIQS0yNTYoIGlucHV0IGJ1ZmZlciApCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTYoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFszMl0sIGludCBpczIyNCApCit7CisgICAgbWJlZHRsc19zaGEyNTZfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX3NoYTI1Nl9pbml0KCAmY3R4ICk7CisgICAgbWJlZHRsc19zaGEyNTZfc3RhcnRzKCAmY3R4LCBpczIyNCApOworICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSggJmN0eCwgaW5wdXQsIGlsZW4gKTsKKyAgICBtYmVkdGxzX3NoYTI1Nl9maW5pc2goICZjdHgsIG91dHB1dCApOworICAgIG1iZWR0bHNfc2hhMjU2X2ZyZWUoICZjdHggKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisvKgorICogRklQUy0xODAtMiB0ZXN0IHZlY3RvcnMKKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3Rlc3RfYnVmWzNdWzU3XSA9Cit7CisgICAgeyAiYWJjIiB9LAorICAgIHsgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIiB9LAorICAgIHsgIiIgfQorfTsKKworc3RhdGljIGNvbnN0IGludCBzaGEyNTZfdGVzdF9idWZsZW5bM10gPQoreworICAgIDMsIDU2LCAxMDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfdGVzdF9zdW1bNl1bMzJdID0KK3sKKyAgICAvKgorICAgICAqIFNIQS0yMjQgdGVzdCB2ZWN0b3JzCisgICAgICovCisgICAgeyAweDIzLCAweDA5LCAweDdELCAweDIyLCAweDM0LCAweDA1LCAweEQ4LCAweDIyLAorICAgICAgMHg4NiwgMHg0MiwgMHhBNCwgMHg3NywgMHhCRCwgMHhBMiwgMHg1NSwgMHhCMywKKyAgICAgIDB4MkEsIDB4QUQsIDB4QkMsIDB4RTQsIDB4QkQsIDB4QTAsIDB4QjMsIDB4RjcsCisgICAgICAweEUzLCAweDZDLCAweDlELCAweEE3IH0sCisgICAgeyAweDc1LCAweDM4LCAweDhCLCAweDE2LCAweDUxLCAweDI3LCAweDc2LCAweENDLAorICAgICAgMHg1RCwgMHhCQSwgMHg1RCwgMHhBMSwgMHhGRCwgMHg4OSwgMHgwMSwgMHg1MCwKKyAgICAgIDB4QjAsIDB4QzYsIDB4NDUsIDB4NUMsIDB4QjQsIDB4RjUsIDB4OEIsIDB4MTksCisgICAgICAweDUyLCAweDUyLCAweDI1LCAweDI1IH0sCisgICAgeyAweDIwLCAweDc5LCAweDQ2LCAweDU1LCAweDk4LCAweDBDLCAweDkxLCAweEQ4LAorICAgICAgMHhCQiwgMHhCNCwgMHhDMSwgMHhFQSwgMHg5NywgMHg2MSwgMHg4QSwgMHg0QiwKKyAgICAgIDB4RjAsIDB4M0YsIDB4NDIsIDB4NTgsIDB4MTksIDB4NDgsIDB4QjIsIDB4RUUsCisgICAgICAweDRFLCAweEU3LCAweEFELCAweDY3IH0sCisKKyAgICAvKgorICAgICAqIFNIQS0yNTYgdGVzdCB2ZWN0b3JzCisgICAgICovCisgICAgeyAweEJBLCAweDc4LCAweDE2LCAweEJGLCAweDhGLCAweDAxLCAweENGLCAweEVBLAorICAgICAgMHg0MSwgMHg0MSwgMHg0MCwgMHhERSwgMHg1RCwgMHhBRSwgMHgyMiwgMHgyMywKKyAgICAgIDB4QjAsIDB4MDMsIDB4NjEsIDB4QTMsIDB4OTYsIDB4MTcsIDB4N0EsIDB4OUMsCisgICAgICAweEI0LCAweDEwLCAweEZGLCAweDYxLCAweEYyLCAweDAwLCAweDE1LCAweEFEIH0sCisgICAgeyAweDI0LCAweDhELCAweDZBLCAweDYxLCAweEQyLCAweDA2LCAweDM4LCAweEI4LAorICAgICAgMHhFNSwgMHhDMCwgMHgyNiwgMHg5MywgMHgwQywgMHgzRSwgMHg2MCwgMHgzOSwKKyAgICAgIDB4QTMsIDB4M0MsIDB4RTQsIDB4NTksIDB4NjQsIDB4RkYsIDB4MjEsIDB4NjcsCisgICAgICAweEY2LCAweEVDLCAweEVELCAweEQ0LCAweDE5LCAweERCLCAweDA2LCAweEMxIH0sCisgICAgeyAweENELCAweEM3LCAweDZFLCAweDVDLCAweDk5LCAweDE0LCAweEZCLCAweDkyLAorICAgICAgMHg4MSwgMHhBMSwgMHhDNywgMHhFMiwgMHg4NCwgMHhENywgMHgzRSwgMHg2NywKKyAgICAgIDB4RjEsIDB4ODAsIDB4OUEsIDB4NDgsIDB4QTQsIDB4OTcsIDB4MjAsIDB4MEUsCisgICAgICAweDA0LCAweDZELCAweDM5LCAweENDLCAweEM3LCAweDExLCAweDJDLCAweEQwIH0KK307CisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfc2hhMjU2X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCBpLCBqLCBrLCBidWZsZW4sIHJldCA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqYnVmOworICAgIHVuc2lnbmVkIGNoYXIgc2hhMjU2c3VtWzMyXTsKKyAgICBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0IGN0eDsKKworICAgIGJ1ZiA9IG1iZWR0bHNfY2FsbG9jKCAxMDI0LCBzaXplb2YodW5zaWduZWQgY2hhcikgKTsKKyAgICBpZiggTlVMTCA9PSBidWYgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIG1iZWR0bHNfc2hhMjU2X2luaXQoICZjdHggKTsKKworICAgIGZvciggaSA9IDA7IGkgPCA2OyBpKysgKQorICAgIHsKKyAgICAgICAgaiA9IGkgJSAzOworICAgICAgICBrID0gaSA8IDM7CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgU0hBLSVkIHRlc3QgIyVkOiAiLCAyNTYgLSBrICogMzIsIGogKyAxICk7CisKKyAgICAgICAgbWJlZHRsc19zaGEyNTZfc3RhcnRzKCAmY3R4LCBrICk7CisKKyAgICAgICAgaWYoIGogPT0gMiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbXNldCggYnVmLCAnYScsIGJ1ZmxlbiA9IDEwMDAgKTsKKworICAgICAgICAgICAgZm9yKCBqID0gMDsgaiA8IDEwMDA7IGorKyApCisgICAgICAgICAgICAgICAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCAmY3R4LCBidWYsIGJ1ZmxlbiApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSggJmN0eCwgc2hhMjU2X3Rlc3RfYnVmW2pdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhMjU2X3Rlc3RfYnVmbGVuW2pdICk7CisKKyAgICAgICAgbWJlZHRsc19zaGEyNTZfZmluaXNoKCAmY3R4LCBzaGEyNTZzdW0gKTsKKworICAgICAgICBpZiggbWVtY21wKCBzaGEyNTZzdW0sIHNoYTI1Nl90ZXN0X3N1bVtpXSwgMzIgLSBrICogNCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCitleGl0OgorICAgIG1iZWR0bHNfc2hhMjU2X2ZyZWUoICZjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGJ1ZiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zaGE1MTIuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NoYTUxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNDUyMmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zaGE1MTIuYwpAQCAtMCwwICsxLDUxNCBAQAorLyoKKyAqICBGSVBTLTE4MC0yIGNvbXBsaWFudCBTSEEtMzg0LzUxMiBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgU0hBLTUxMiBTZWN1cmUgSGFzaCBTdGFuZGFyZCB3YXMgcHVibGlzaGVkIGJ5IE5JU1QgaW4gMjAwMi4KKyAqCisgKiAgaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE4MC0yL2ZpcHMxODAtMi5wZGYKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorCisjaW5jbHVkZSAibWJlZHRscy9zaGE1MTIuaCIKKworI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19XQVRDT01DX18pCisgICNkZWZpbmUgVUw2NCh4KSB4IyN1aTY0CisjZWxzZQorICAjZGVmaW5lIFVMNjQoeCkgeCMjVUxMCisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19TSEE1MTJfQUxUKQorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogNjQtYml0IGludGVnZXIgbWFuaXB1bGF0aW9uIG1hY3JvcyAoYmlnIGVuZGlhbikKKyAqLworI2lmbmRlZiBHRVRfVUlOVDY0X0JFCisjZGVmaW5lIEdFVF9VSU5UNjRfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChuKSA9ICggKHVpbnQ2NF90KSAoYilbKGkpICAgIF0gPDwgNTYgKSAgICAgICBcCisgICAgICAgIHwgKCAodWludDY0X3QpIChiKVsoaSkgKyAxXSA8PCA0OCApICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50NjRfdCkgKGIpWyhpKSArIDJdIDw8IDQwICkgICAgICAgXAorICAgICAgICB8ICggKHVpbnQ2NF90KSAoYilbKGkpICsgM10gPDwgMzIgKSAgICAgICBcCisgICAgICAgIHwgKCAodWludDY0X3QpIChiKVsoaSkgKyA0XSA8PCAyNCApICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50NjRfdCkgKGIpWyhpKSArIDVdIDw8IDE2ICkgICAgICAgXAorICAgICAgICB8ICggKHVpbnQ2NF90KSAoYilbKGkpICsgNl0gPDwgIDggKSAgICAgICBcCisgICAgICAgIHwgKCAodWludDY0X3QpIChiKVsoaSkgKyA3XSAgICAgICApOyAgICAgIFwKK30KKyNlbmRpZiAvKiBHRVRfVUlOVDY0X0JFICovCisKKyNpZm5kZWYgUFVUX1VJTlQ2NF9CRQorI2RlZmluZSBQVVRfVUlOVDY0X0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoYilbKGkpICAgIF0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gNTYgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiA0OCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDJdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDQwICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgM10gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMzIgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyA0XSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAyNCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDVdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDE2ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgNl0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gIDggKTsgICAgICAgXAorICAgIChiKVsoaSkgKyA3XSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSAgICAgICApOyAgICAgICBcCit9CisjZW5kaWYgLyogUFVUX1VJTlQ2NF9CRSAqLworCit2b2lkIG1iZWR0bHNfc2hhNTEyX2luaXQoIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19zaGE1MTJfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zaGE1MTJfZnJlZSggbWJlZHRsc19zaGE1MTJfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX3NoYTUxMl9jbG9uZSggbWJlZHRsc19zaGE1MTJfY29udGV4dCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19zaGE1MTJfY29udGV4dCAqc3JjICkKK3sKKyAgICAqZHN0ID0gKnNyYzsKK30KKworLyoKKyAqIFNIQS01MTIgY29udGV4dCBzZXR1cAorICovCit2b2lkIG1iZWR0bHNfc2hhNTEyX3N0YXJ0cyggbWJlZHRsc19zaGE1MTJfY29udGV4dCAqY3R4LCBpbnQgaXMzODQgKQoreworICAgIGN0eC0+dG90YWxbMF0gPSAwOworICAgIGN0eC0+dG90YWxbMV0gPSAwOworCisgICAgaWYoIGlzMzg0ID09IDAgKQorICAgIHsKKyAgICAgICAgLyogU0hBLTUxMiAqLworICAgICAgICBjdHgtPnN0YXRlWzBdID0gVUw2NCgweDZBMDlFNjY3RjNCQ0M5MDgpOworICAgICAgICBjdHgtPnN0YXRlWzFdID0gVUw2NCgweEJCNjdBRTg1ODRDQUE3M0IpOworICAgICAgICBjdHgtPnN0YXRlWzJdID0gVUw2NCgweDNDNkVGMzcyRkU5NEY4MkIpOworICAgICAgICBjdHgtPnN0YXRlWzNdID0gVUw2NCgweEE1NEZGNTNBNUYxRDM2RjEpOworICAgICAgICBjdHgtPnN0YXRlWzRdID0gVUw2NCgweDUxMEU1MjdGQURFNjgyRDEpOworICAgICAgICBjdHgtPnN0YXRlWzVdID0gVUw2NCgweDlCMDU2ODhDMkIzRTZDMUYpOworICAgICAgICBjdHgtPnN0YXRlWzZdID0gVUw2NCgweDFGODNEOUFCRkI0MUJENkIpOworICAgICAgICBjdHgtPnN0YXRlWzddID0gVUw2NCgweDVCRTBDRDE5MTM3RTIxNzkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBTSEEtMzg0ICovCisgICAgICAgIGN0eC0+c3RhdGVbMF0gPSBVTDY0KDB4Q0JCQjlENURDMTA1OUVEOCk7CisgICAgICAgIGN0eC0+c3RhdGVbMV0gPSBVTDY0KDB4NjI5QTI5MkEzNjdDRDUwNyk7CisgICAgICAgIGN0eC0+c3RhdGVbMl0gPSBVTDY0KDB4OTE1OTAxNUEzMDcwREQxNyk7CisgICAgICAgIGN0eC0+c3RhdGVbM10gPSBVTDY0KDB4MTUyRkVDRDhGNzBFNTkzOSk7CisgICAgICAgIGN0eC0+c3RhdGVbNF0gPSBVTDY0KDB4NjczMzI2NjdGRkMwMEIzMSk7CisgICAgICAgIGN0eC0+c3RhdGVbNV0gPSBVTDY0KDB4OEVCNDRBODc2ODU4MTUxMSk7CisgICAgICAgIGN0eC0+c3RhdGVbNl0gPSBVTDY0KDB4REIwQzJFMEQ2NEY5OEZBNyk7CisgICAgICAgIGN0eC0+c3RhdGVbN10gPSBVTDY0KDB4NDdCNTQ4MURCRUZBNEZBNCk7CisgICAgfQorCisgICAgY3R4LT5pczM4NCA9IGlzMzg0OworfQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19TSEE1MTJfUFJPQ0VTU19BTFQpCisKKy8qCisgKiBSb3VuZCBjb25zdGFudHMKKyAqLworc3RhdGljIGNvbnN0IHVpbnQ2NF90IEtbODBdID0KK3sKKyAgICBVTDY0KDB4NDI4QTJGOThENzI4QUUyMiksICBVTDY0KDB4NzEzNzQ0OTEyM0VGNjVDRCksCisgICAgVUw2NCgweEI1QzBGQkNGRUM0RDNCMkYpLCAgVUw2NCgweEU5QjVEQkE1ODE4OURCQkMpLAorICAgIFVMNjQoMHgzOTU2QzI1QkYzNDhCNTM4KSwgIFVMNjQoMHg1OUYxMTFGMUI2MDVEMDE5KSwKKyAgICBVTDY0KDB4OTIzRjgyQTRBRjE5NEY5QiksICBVTDY0KDB4QUIxQzVFRDVEQTZEODExOCksCisgICAgVUw2NCgweEQ4MDdBQTk4QTMwMzAyNDIpLCAgVUw2NCgweDEyODM1QjAxNDU3MDZGQkUpLAorICAgIFVMNjQoMHgyNDMxODVCRTRFRTRCMjhDKSwgIFVMNjQoMHg1NTBDN0RDM0Q1RkZCNEUyKSwKKyAgICBVTDY0KDB4NzJCRTVENzRGMjdCODk2RiksICBVTDY0KDB4ODBERUIxRkUzQjE2OTZCMSksCisgICAgVUw2NCgweDlCREMwNkE3MjVDNzEyMzUpLCAgVUw2NCgweEMxOUJGMTc0Q0Y2OTI2OTQpLAorICAgIFVMNjQoMHhFNDlCNjlDMTlFRjE0QUQyKSwgIFVMNjQoMHhFRkJFNDc4NjM4NEYyNUUzKSwKKyAgICBVTDY0KDB4MEZDMTlEQzY4QjhDRDVCNSksICBVTDY0KDB4MjQwQ0ExQ0M3N0FDOUM2NSksCisgICAgVUw2NCgweDJERTkyQzZGNTkyQjAyNzUpLCAgVUw2NCgweDRBNzQ4NEFBNkVBNkU0ODMpLAorICAgIFVMNjQoMHg1Q0IwQTlEQ0JENDFGQkQ0KSwgIFVMNjQoMHg3NkY5ODhEQTgzMTE1M0I1KSwKKyAgICBVTDY0KDB4OTgzRTUxNTJFRTY2REZBQiksICBVTDY0KDB4QTgzMUM2NkQyREI0MzIxMCksCisgICAgVUw2NCgweEIwMDMyN0M4OThGQjIxM0YpLCAgVUw2NCgweEJGNTk3RkM3QkVFRjBFRTQpLAorICAgIFVMNjQoMHhDNkUwMEJGMzNEQTg4RkMyKSwgIFVMNjQoMHhENUE3OTE0NzkzMEFBNzI1KSwKKyAgICBVTDY0KDB4MDZDQTYzNTFFMDAzODI2RiksICBVTDY0KDB4MTQyOTI5NjcwQTBFNkU3MCksCisgICAgVUw2NCgweDI3QjcwQTg1NDZEMjJGRkMpLCAgVUw2NCgweDJFMUIyMTM4NUMyNkM5MjYpLAorICAgIFVMNjQoMHg0RDJDNkRGQzVBQzQyQUVEKSwgIFVMNjQoMHg1MzM4MEQxMzlEOTVCM0RGKSwKKyAgICBVTDY0KDB4NjUwQTczNTQ4QkFGNjNERSksICBVTDY0KDB4NzY2QTBBQkIzQzc3QjJBOCksCisgICAgVUw2NCgweDgxQzJDOTJFNDdFREFFRTYpLCAgVUw2NCgweDkyNzIyQzg1MTQ4MjM1M0IpLAorICAgIFVMNjQoMHhBMkJGRThBMTRDRjEwMzY0KSwgIFVMNjQoMHhBODFBNjY0QkJDNDIzMDAxKSwKKyAgICBVTDY0KDB4QzI0QjhCNzBEMEY4OTc5MSksICBVTDY0KDB4Qzc2QzUxQTMwNjU0QkUzMCksCisgICAgVUw2NCgweEQxOTJFODE5RDZFRjUyMTgpLCAgVUw2NCgweEQ2OTkwNjI0NTU2NUE5MTApLAorICAgIFVMNjQoMHhGNDBFMzU4NTU3NzEyMDJBKSwgIFVMNjQoMHgxMDZBQTA3MDMyQkJEMUI4KSwKKyAgICBVTDY0KDB4MTlBNEMxMTZCOEQyRDBDOCksICBVTDY0KDB4MUUzNzZDMDg1MTQxQUI1MyksCisgICAgVUw2NCgweDI3NDg3NzRDREY4RUVCOTkpLCAgVUw2NCgweDM0QjBCQ0I1RTE5QjQ4QTgpLAorICAgIFVMNjQoMHgzOTFDMENCM0M1Qzk1QTYzKSwgIFVMNjQoMHg0RUQ4QUE0QUUzNDE4QUNCKSwKKyAgICBVTDY0KDB4NUI5Q0NBNEY3NzYzRTM3MyksICBVTDY0KDB4NjgyRTZGRjNENkIyQjhBMyksCisgICAgVUw2NCgweDc0OEY4MkVFNURFRkIyRkMpLCAgVUw2NCgweDc4QTU2MzZGNDMxNzJGNjApLAorICAgIFVMNjQoMHg4NEM4NzgxNEExRjBBQjcyKSwgIFVMNjQoMHg4Q0M3MDIwODFBNjQzOUVDKSwKKyAgICBVTDY0KDB4OTBCRUZGRkEyMzYzMUUyOCksICBVTDY0KDB4QTQ1MDZDRUJERTgyQkRFOSksCisgICAgVUw2NCgweEJFRjlBM0Y3QjJDNjc5MTUpLCAgVUw2NCgweEM2NzE3OEYyRTM3MjUzMkIpLAorICAgIFVMNjQoMHhDQTI3M0VDRUVBMjY2MTlDKSwgIFVMNjQoMHhEMTg2QjhDNzIxQzBDMjA3KSwKKyAgICBVTDY0KDB4RUFEQTdERDZDREUwRUIxRSksICBVTDY0KDB4RjU3RDRGN0ZFRTZFRDE3OCksCisgICAgVUw2NCgweDA2RjA2N0FBNzIxNzZGQkEpLCAgVUw2NCgweDBBNjM3REM1QTJDODk4QTYpLAorICAgIFVMNjQoMHgxMTNGOTgwNEJFRjkwREFFKSwgIFVMNjQoMHgxQjcxMEIzNTEzMUM0NzFCKSwKKyAgICBVTDY0KDB4MjhEQjc3RjUyMzA0N0Q4NCksICBVTDY0KDB4MzJDQUFCN0I0MEM3MjQ5MyksCisgICAgVUw2NCgweDNDOUVCRTBBMTVDOUJFQkMpLCAgVUw2NCgweDQzMUQ2N0M0OUMxMDBENEMpLAorICAgIFVMNjQoMHg0Q0M1RDRCRUNCM0U0MkI2KSwgIFVMNjQoMHg1OTdGMjk5Q0ZDNjU3RTJBKSwKKyAgICBVTDY0KDB4NUZDQjZGQUIzQUQ2RkFFQyksICBVTDY0KDB4NkM0NDE5OEM0QTQ3NTgxNykKK307CisKK3ZvaWQgbWJlZHRsc19zaGE1MTJfcHJvY2VzcyggbWJlZHRsc19zaGE1MTJfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbMTI4XSApCit7CisgICAgaW50IGk7CisgICAgdWludDY0X3QgdGVtcDEsIHRlbXAyLCBXWzgwXTsKKyAgICB1aW50NjRfdCBBLCBCLCBDLCBELCBFLCBGLCBHLCBIOworCisjZGVmaW5lICBTSFIoeCxuKSAoeCA+PiBuKQorI2RlZmluZSBST1RSKHgsbikgKFNIUih4LG4pIHwgKHggPDwgKDY0IC0gbikpKQorCisjZGVmaW5lIFMwKHgpIChST1RSKHgsIDEpIF4gUk9UUih4LCA4KSBeICBTSFIoeCwgNykpCisjZGVmaW5lIFMxKHgpIChST1RSKHgsMTkpIF4gUk9UUih4LDYxKSBeICBTSFIoeCwgNikpCisKKyNkZWZpbmUgUzIoeCkgKFJPVFIoeCwyOCkgXiBST1RSKHgsMzQpIF4gUk9UUih4LDM5KSkKKyNkZWZpbmUgUzMoeCkgKFJPVFIoeCwxNCkgXiBST1RSKHgsMTgpIF4gUk9UUih4LDQxKSkKKworI2RlZmluZSBGMCh4LHkseikgKCh4ICYgeSkgfCAoeiAmICh4IHwgeSkpKQorI2RlZmluZSBGMSh4LHkseikgKHogXiAoeCAmICh5IF4geikpKQorCisjZGVmaW5lIFAoYSxiLGMsZCxlLGYsZyxoLHgsSykgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcDEgPSBoICsgUzMoZSkgKyBGMShlLGYsZykgKyBLICsgeDsgICAgICBcCisgICAgdGVtcDIgPSBTMihhKSArIEYwKGEsYixjKTsgICAgICAgICAgICAgICAgICBcCisgICAgZCArPSB0ZW1wMTsgaCA9IHRlbXAxICsgdGVtcDI7ICAgICAgICAgICAgICBcCit9CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgeworICAgICAgICBHRVRfVUlOVDY0X0JFKCBXW2ldLCBkYXRhLCBpIDw8IDMgKTsKKyAgICB9CisKKyAgICBmb3IoIDsgaSA8IDgwOyBpKysgKQorICAgIHsKKyAgICAgICAgV1tpXSA9IFMxKFdbaSAtICAyXSkgKyBXW2kgLSAgN10gKworICAgICAgICAgICAgICAgUzAoV1tpIC0gMTVdKSArIFdbaSAtIDE2XTsKKyAgICB9CisKKyAgICBBID0gY3R4LT5zdGF0ZVswXTsKKyAgICBCID0gY3R4LT5zdGF0ZVsxXTsKKyAgICBDID0gY3R4LT5zdGF0ZVsyXTsKKyAgICBEID0gY3R4LT5zdGF0ZVszXTsKKyAgICBFID0gY3R4LT5zdGF0ZVs0XTsKKyAgICBGID0gY3R4LT5zdGF0ZVs1XTsKKyAgICBHID0gY3R4LT5zdGF0ZVs2XTsKKyAgICBIID0gY3R4LT5zdGF0ZVs3XTsKKyAgICBpID0gMDsKKworICAgIGRvCisgICAgeworICAgICAgICBQKCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBXW2ldLCBLW2ldICk7IGkrKzsKKyAgICAgICAgUCggSCwgQSwgQiwgQywgRCwgRSwgRiwgRywgV1tpXSwgS1tpXSApOyBpKys7CisgICAgICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFdbaV0sIEtbaV0gKTsgaSsrOworICAgICAgICBQKCBGLCBHLCBILCBBLCBCLCBDLCBELCBFLCBXW2ldLCBLW2ldICk7IGkrKzsKKyAgICAgICAgUCggRSwgRiwgRywgSCwgQSwgQiwgQywgRCwgV1tpXSwgS1tpXSApOyBpKys7CisgICAgICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFdbaV0sIEtbaV0gKTsgaSsrOworICAgICAgICBQKCBDLCBELCBFLCBGLCBHLCBILCBBLCBCLCBXW2ldLCBLW2ldICk7IGkrKzsKKyAgICAgICAgUCggQiwgQywgRCwgRSwgRiwgRywgSCwgQSwgV1tpXSwgS1tpXSApOyBpKys7CisgICAgfQorICAgIHdoaWxlKCBpIDwgODAgKTsKKworICAgIGN0eC0+c3RhdGVbMF0gKz0gQTsKKyAgICBjdHgtPnN0YXRlWzFdICs9IEI7CisgICAgY3R4LT5zdGF0ZVsyXSArPSBDOworICAgIGN0eC0+c3RhdGVbM10gKz0gRDsKKyAgICBjdHgtPnN0YXRlWzRdICs9IEU7CisgICAgY3R4LT5zdGF0ZVs1XSArPSBGOworICAgIGN0eC0+c3RhdGVbNl0gKz0gRzsKKyAgICBjdHgtPnN0YXRlWzddICs9IEg7Cit9CisjZW5kaWYgLyogIU1CRURUTFNfU0hBNTEyX1BST0NFU1NfQUxUICovCisKKy8qCisgKiBTSEEtNTEyIHByb2Nlc3MgYnVmZmVyCisgKi8KK3ZvaWQgbWJlZHRsc19zaGE1MTJfdXBkYXRlKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWxlbiApCit7CisgICAgc2l6ZV90IGZpbGw7CisgICAgdW5zaWduZWQgaW50IGxlZnQ7CisKKyAgICBpZiggaWxlbiA9PSAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGVmdCA9ICh1bnNpZ25lZCBpbnQpIChjdHgtPnRvdGFsWzBdICYgMHg3Rik7CisgICAgZmlsbCA9IDEyOCAtIGxlZnQ7CisKKyAgICBjdHgtPnRvdGFsWzBdICs9ICh1aW50NjRfdCkgaWxlbjsKKworICAgIGlmKCBjdHgtPnRvdGFsWzBdIDwgKHVpbnQ2NF90KSBpbGVuICkKKyAgICAgICAgY3R4LT50b3RhbFsxXSsrOworCisgICAgaWYoIGxlZnQgJiYgaWxlbiA+PSBmaWxsICkKKyAgICB7CisgICAgICAgIG1lbWNweSggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksIGlucHV0LCBmaWxsICk7CisgICAgICAgIG1iZWR0bHNfc2hhNTEyX3Byb2Nlc3MoIGN0eCwgY3R4LT5idWZmZXIgKTsKKyAgICAgICAgaW5wdXQgKz0gZmlsbDsKKyAgICAgICAgaWxlbiAgLT0gZmlsbDsKKyAgICAgICAgbGVmdCA9IDA7CisgICAgfQorCisgICAgd2hpbGUoIGlsZW4gPj0gMTI4ICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc2hhNTEyX3Byb2Nlc3MoIGN0eCwgaW5wdXQgKTsKKyAgICAgICAgaW5wdXQgKz0gMTI4OworICAgICAgICBpbGVuICAtPSAxMjg7CisgICAgfQorCisgICAgaWYoIGlsZW4gPiAwICkKKyAgICAgICAgbWVtY3B5KCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwgaW5wdXQsIGlsZW4gKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3BhZGRpbmdbMTI4XSA9Cit7CisgMHg4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCisvKgorICogU0hBLTUxMiBmaW5hbCBkaWdlc3QKKyAqLwordm9pZCBtYmVkdGxzX3NoYTUxMl9maW5pc2goIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbNjRdICkKK3sKKyAgICBzaXplX3QgbGFzdCwgcGFkbjsKKyAgICB1aW50NjRfdCBoaWdoLCBsb3c7CisgICAgdW5zaWduZWQgY2hhciBtc2dsZW5bMTZdOworCisgICAgaGlnaCA9ICggY3R4LT50b3RhbFswXSA+PiA2MSApCisgICAgICAgICB8ICggY3R4LT50b3RhbFsxXSA8PCAgMyApOworICAgIGxvdyAgPSAoIGN0eC0+dG90YWxbMF0gPDwgIDMgKTsKKworICAgIFBVVF9VSU5UNjRfQkUoIGhpZ2gsIG1zZ2xlbiwgMCApOworICAgIFBVVF9VSU5UNjRfQkUoIGxvdywgIG1zZ2xlbiwgOCApOworCisgICAgbGFzdCA9IChzaXplX3QpKCBjdHgtPnRvdGFsWzBdICYgMHg3RiApOworICAgIHBhZG4gPSAoIGxhc3QgPCAxMTIgKSA/ICggMTEyIC0gbGFzdCApIDogKCAyNDAgLSBsYXN0ICk7CisKKyAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoIGN0eCwgc2hhNTEyX3BhZGRpbmcsIHBhZG4gKTsKKyAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoIGN0eCwgbXNnbGVuLCAxNiApOworCisgICAgUFVUX1VJTlQ2NF9CRSggY3R4LT5zdGF0ZVswXSwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UNjRfQkUoIGN0eC0+c3RhdGVbMV0sIG91dHB1dCwgIDggKTsKKyAgICBQVVRfVUlOVDY0X0JFKCBjdHgtPnN0YXRlWzJdLCBvdXRwdXQsIDE2ICk7CisgICAgUFVUX1VJTlQ2NF9CRSggY3R4LT5zdGF0ZVszXSwgb3V0cHV0LCAyNCApOworICAgIFBVVF9VSU5UNjRfQkUoIGN0eC0+c3RhdGVbNF0sIG91dHB1dCwgMzIgKTsKKyAgICBQVVRfVUlOVDY0X0JFKCBjdHgtPnN0YXRlWzVdLCBvdXRwdXQsIDQwICk7CisKKyAgICBpZiggY3R4LT5pczM4NCA9PSAwICkKKyAgICB7CisgICAgICAgIFBVVF9VSU5UNjRfQkUoIGN0eC0+c3RhdGVbNl0sIG91dHB1dCwgNDggKTsKKyAgICAgICAgUFVUX1VJTlQ2NF9CRSggY3R4LT5zdGF0ZVs3XSwgb3V0cHV0LCA1NiApOworICAgIH0KK30KKworI2VuZGlmIC8qICFNQkVEVExTX1NIQTUxMl9BTFQgKi8KKworLyoKKyAqIG91dHB1dCA9IFNIQS01MTIoIGlucHV0IGJ1ZmZlciApCisgKi8KK3ZvaWQgbWJlZHRsc19zaGE1MTIoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs2NF0sIGludCBpczM4NCApCit7CisgICAgbWJlZHRsc19zaGE1MTJfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX3NoYTUxMl9pbml0KCAmY3R4ICk7CisgICAgbWJlZHRsc19zaGE1MTJfc3RhcnRzKCAmY3R4LCBpczM4NCApOworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJmN0eCwgaW5wdXQsIGlsZW4gKTsKKyAgICBtYmVkdGxzX3NoYTUxMl9maW5pc2goICZjdHgsIG91dHB1dCApOworICAgIG1iZWR0bHNfc2hhNTEyX2ZyZWUoICZjdHggKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKKy8qCisgKiBGSVBTLTE4MC0yIHRlc3QgdmVjdG9ycworICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfdGVzdF9idWZbM11bMTEzXSA9Cit7CisgICAgeyAiYWJjIiB9LAorICAgIHsgImFiY2RlZmdoYmNkZWZnaGljZGVmZ2hpamRlZmdoaWprZWZnaGlqa2xmZ2hpamtsbWdoaWprbG1uIgorICAgICAgImhpamtsbW5vaWprbG1ub3Bqa2xtbm9wcWtsbW5vcHFybG1ub3BxcnNtbm9wcXJzdG5vcHFyc3R1IiB9LAorICAgIHsgIiIgfQorfTsKKworc3RhdGljIGNvbnN0IGludCBzaGE1MTJfdGVzdF9idWZsZW5bM10gPQoreworICAgIDMsIDExMiwgMTAwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3Rlc3Rfc3VtWzZdWzY0XSA9Cit7CisgICAgLyoKKyAgICAgKiBTSEEtMzg0IHRlc3QgdmVjdG9ycworICAgICAqLworICAgIHsgMHhDQiwgMHgwMCwgMHg3NSwgMHgzRiwgMHg0NSwgMHhBMywgMHg1RSwgMHg4QiwKKyAgICAgIDB4QjUsIDB4QTAsIDB4M0QsIDB4NjksIDB4OUEsIDB4QzYsIDB4NTAsIDB4MDcsCisgICAgICAweDI3LCAweDJDLCAweDMyLCAweEFCLCAweDBFLCAweERFLCAweEQxLCAweDYzLAorICAgICAgMHgxQSwgMHg4QiwgMHg2MCwgMHg1QSwgMHg0MywgMHhGRiwgMHg1QiwgMHhFRCwKKyAgICAgIDB4ODAsIDB4ODYsIDB4MDcsIDB4MkIsIDB4QTEsIDB4RTcsIDB4Q0MsIDB4MjMsCisgICAgICAweDU4LCAweEJBLCAweEVDLCAweEExLCAweDM0LCAweEM4LCAweDI1LCAweEE3IH0sCisgICAgeyAweDA5LCAweDMzLCAweDBDLCAweDMzLCAweEY3LCAweDExLCAweDQ3LCAweEU4LAorICAgICAgMHgzRCwgMHgxOSwgMHgyRiwgMHhDNywgMHg4MiwgMHhDRCwgMHgxQiwgMHg0NywKKyAgICAgIDB4NTMsIDB4MTEsIDB4MUIsIDB4MTcsIDB4M0IsIDB4M0IsIDB4MDUsIDB4RDIsCisgICAgICAweDJGLCAweEEwLCAweDgwLCAweDg2LCAweEUzLCAweEIwLCAweEY3LCAweDEyLAorICAgICAgMHhGQywgMHhDNywgMHhDNywgMHgxQSwgMHg1NSwgMHg3RSwgMHgyRCwgMHhCOSwKKyAgICAgIDB4NjYsIDB4QzMsIDB4RTksIDB4RkEsIDB4OTEsIDB4NzQsIDB4NjAsIDB4MzkgfSwKKyAgICB7IDB4OUQsIDB4MEUsIDB4MTgsIDB4MDksIDB4NzEsIDB4NjQsIDB4NzQsIDB4Q0IsCisgICAgICAweDA4LCAweDZFLCAweDgzLCAweDRFLCAweDMxLCAweDBBLCAweDRBLCAweDFDLAorICAgICAgMHhFRCwgMHgxNCwgMHg5RSwgMHg5QywgMHgwMCwgMHhGMiwgMHg0OCwgMHg1MiwKKyAgICAgIDB4NzksIDB4NzIsIDB4Q0UsIDB4QzUsIDB4NzAsIDB4NEMsIDB4MkEsIDB4NUIsCisgICAgICAweDA3LCAweEI4LCAweEIzLCAweERDLCAweDM4LCAweEVDLCAweEM0LCAweEVCLAorICAgICAgMHhBRSwgMHg5NywgMHhERCwgMHhEOCwgMHg3RiwgMHgzRCwgMHg4OSwgMHg4NSB9LAorCisgICAgLyoKKyAgICAgKiBTSEEtNTEyIHRlc3QgdmVjdG9ycworICAgICAqLworICAgIHsgMHhERCwgMHhBRiwgMHgzNSwgMHhBMSwgMHg5MywgMHg2MSwgMHg3QSwgMHhCQSwKKyAgICAgIDB4Q0MsIDB4NDEsIDB4NzMsIDB4NDksIDB4QUUsIDB4MjAsIDB4NDEsIDB4MzEsCisgICAgICAweDEyLCAweEU2LCAweEZBLCAweDRFLCAweDg5LCAweEE5LCAweDdFLCAweEEyLAorICAgICAgMHgwQSwgMHg5RSwgMHhFRSwgMHhFNiwgMHg0QiwgMHg1NSwgMHhEMywgMHg5QSwKKyAgICAgIDB4MjEsIDB4OTIsIDB4OTksIDB4MkEsIDB4MjcsIDB4NEYsIDB4QzEsIDB4QTgsCisgICAgICAweDM2LCAweEJBLCAweDNDLCAweDIzLCAweEEzLCAweEZFLCAweEVCLCAweEJELAorICAgICAgMHg0NSwgMHg0RCwgMHg0NCwgMHgyMywgMHg2NCwgMHgzQywgMHhFOCwgMHgwRSwKKyAgICAgIDB4MkEsIDB4OUEsIDB4QzksIDB4NEYsIDB4QTUsIDB4NEMsIDB4QTQsIDB4OUYgfSwKKyAgICB7IDB4OEUsIDB4OTUsIDB4OUIsIDB4NzUsIDB4REEsIDB4RTMsIDB4MTMsIDB4REEsCisgICAgICAweDhDLCAweEY0LCAweEY3LCAweDI4LCAweDE0LCAweEZDLCAweDE0LCAweDNGLAorICAgICAgMHg4RiwgMHg3NywgMHg3OSwgMHhDNiwgMHhFQiwgMHg5RiwgMHg3RiwgMHhBMSwKKyAgICAgIDB4NzIsIDB4OTksIDB4QUUsIDB4QUQsIDB4QjYsIDB4ODgsIDB4OTAsIDB4MTgsCisgICAgICAweDUwLCAweDFELCAweDI4LCAweDlFLCAweDQ5LCAweDAwLCAweEY3LCAweEU0LAorICAgICAgMHgzMywgMHgxQiwgMHg5OSwgMHhERSwgMHhDNCwgMHhCNSwgMHg0MywgMHgzQSwKKyAgICAgIDB4QzcsIDB4RDMsIDB4MjksIDB4RUUsIDB4QjYsIDB4REQsIDB4MjYsIDB4NTQsCisgICAgICAweDVFLCAweDk2LCAweEU1LCAweDVCLCAweDg3LCAweDRCLCAweEU5LCAweDA5IH0sCisgICAgeyAweEU3LCAweDE4LCAweDQ4LCAweDNELCAweDBDLCAweEU3LCAweDY5LCAweDY0LAorICAgICAgMHg0RSwgMHgyRSwgMHg0MiwgMHhDNywgMHhCQywgMHgxNSwgMHhCNCwgMHg2MywKKyAgICAgIDB4OEUsIDB4MUYsIDB4OTgsIDB4QjEsIDB4M0IsIDB4MjAsIDB4NDQsIDB4MjgsCisgICAgICAweDU2LCAweDMyLCAweEE4LCAweDAzLCAweEFGLCAweEE5LCAweDczLCAweEVCLAorICAgICAgMHhERSwgMHgwRiwgMHhGMiwgMHg0NCwgMHg4NywgMHg3RSwgMHhBNiwgMHgwQSwKKyAgICAgIDB4NEMsIDB4QjAsIDB4NDMsIDB4MkMsIDB4RTUsIDB4NzcsIDB4QzMsIDB4MUIsCisgICAgICAweEVCLCAweDAwLCAweDlDLCAweDVDLCAweDJDLCAweDQ5LCAweEFBLCAweDJFLAorICAgICAgMHg0RSwgMHhBRCwgMHhCMiwgMHgxNywgMHhBRCwgMHg4QywgMHhDMCwgMHg5QiB9Cit9OworCisvKgorICogQ2hlY2t1cCByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX3NoYTUxMl9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgaSwgaiwgaywgYnVmbGVuLCByZXQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyIHNoYTUxMnN1bVs2NF07CisgICAgbWJlZHRsc19zaGE1MTJfY29udGV4dCBjdHg7CisKKyAgICBidWYgPSBtYmVkdGxzX2NhbGxvYyggMTAyNCwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICk7CisgICAgaWYoIE5VTEwgPT0gYnVmICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJCdWZmZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIgKTsKKworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3NoYTUxMl9pbml0KCAmY3R4ICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgNjsgaSsrICkKKyAgICB7CisgICAgICAgIGogPSBpICUgMzsKKyAgICAgICAgayA9IGkgPCAzOworCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFNIQS0lZCB0ZXN0ICMlZDogIiwgNTEyIC0gayAqIDEyOCwgaiArIDEgKTsKKworICAgICAgICBtYmVkdGxzX3NoYTUxMl9zdGFydHMoICZjdHgsIGsgKTsKKworICAgICAgICBpZiggaiA9PSAyICkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtc2V0KCBidWYsICdhJywgYnVmbGVuID0gMTAwMCApOworCisgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgMTAwMDsgaisrICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoICZjdHgsIGJ1ZiwgYnVmbGVuICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWJlZHRsc19zaGE1MTJfdXBkYXRlKCAmY3R4LCBzaGE1MTJfdGVzdF9idWZbal0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGE1MTJfdGVzdF9idWZsZW5bal0gKTsKKworICAgICAgICBtYmVkdGxzX3NoYTUxMl9maW5pc2goICZjdHgsIHNoYTUxMnN1bSApOworCisgICAgICAgIGlmKCBtZW1jbXAoIHNoYTUxMnN1bSwgc2hhNTEyX3Rlc3Rfc3VtW2ldLCA2NCAtIGsgKiAxNiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCitleGl0OgorICAgIG1iZWR0bHNfc2hhNTEyX2ZyZWUoICZjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGJ1ZiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfY2FjaGUuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjJkZTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfY2FjaGUuYwpAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqICBTU0wgc2Vzc2lvbiBjYWNoZSBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqIFRoZXNlIHNlc3Npb24gY2FsbGJhY2tzIHVzZSBhIHNpbXBsZSBjaGFpbmVkIGxpc3QKKyAqIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbi4KKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgIGZyZWUKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9zc2xfY2FjaGUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCit2b2lkIG1iZWR0bHNfc3NsX2NhY2hlX2luaXQoIG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgKmNhY2hlICkKK3sKKyAgICBtZW1zZXQoIGNhY2hlLCAwLCBzaXplb2YoIG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgKSApOworCisgICAgY2FjaGUtPnRpbWVvdXQgPSBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX1RJTUVPVVQ7CisgICAgY2FjaGUtPm1heF9lbnRyaWVzID0gTUJFRFRMU19TU0xfQ0FDSEVfREVGQVVMVF9NQVhfRU5UUklFUzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX211dGV4X2luaXQoICZjYWNoZS0+bXV0ZXggKTsKKyNlbmRpZgorfQorCitpbnQgbWJlZHRsc19zc2xfY2FjaGVfZ2V0KCB2b2lkICpkYXRhLCBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uICkKK3sKKyAgICBpbnQgcmV0ID0gMTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgIG1iZWR0bHNfdGltZV90IHQgPSBtYmVkdGxzX3RpbWUoIE5VTEwgKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgKmNhY2hlID0gKG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgKikgZGF0YTsKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9lbnRyeSAqY3VyLCAqZW50cnk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfbG9jayggJmNhY2hlLT5tdXRleCApICE9IDAgKQorICAgICAgICByZXR1cm4oIDEgKTsKKyNlbmRpZgorCisgICAgY3VyID0gY2FjaGUtPmNoYWluOworICAgIGVudHJ5ID0gTlVMTDsKKworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBlbnRyeSA9IGN1cjsKKyAgICAgICAgY3VyID0gY3VyLT5uZXh0OworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICAgICAgaWYoIGNhY2hlLT50aW1lb3V0ICE9IDAgJiYKKyAgICAgICAgICAgIChpbnQpICggdCAtIGVudHJ5LT50aW1lc3RhbXAgKSA+IGNhY2hlLT50aW1lb3V0ICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmCisKKyAgICAgICAgaWYoIHNlc3Npb24tPmNpcGhlcnN1aXRlICE9IGVudHJ5LT5zZXNzaW9uLmNpcGhlcnN1aXRlIHx8CisgICAgICAgICAgICBzZXNzaW9uLT5jb21wcmVzc2lvbiAhPSBlbnRyeS0+c2Vzc2lvbi5jb21wcmVzc2lvbiB8fAorICAgICAgICAgICAgc2Vzc2lvbi0+aWRfbGVuICE9IGVudHJ5LT5zZXNzaW9uLmlkX2xlbiApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiggbWVtY21wKCBzZXNzaW9uLT5pZCwgZW50cnktPnNlc3Npb24uaWQsCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zZXNzaW9uLmlkX2xlbiApICE9IDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbWVtY3B5KCBzZXNzaW9uLT5tYXN0ZXIsIGVudHJ5LT5zZXNzaW9uLm1hc3RlciwgNDggKTsKKworICAgICAgICBzZXNzaW9uLT52ZXJpZnlfcmVzdWx0ID0gZW50cnktPnNlc3Npb24udmVyaWZ5X3Jlc3VsdDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgICAgICAvKgorICAgICAgICAgKiBSZXN0b3JlIHBlZXIgY2VydGlmaWNhdGUgKHdpdGhvdXQgcmVzdCBvZiB0aGUgb3JpZ2luYWwgY2hhaW4pCisgICAgICAgICAqLworICAgICAgICBpZiggZW50cnktPnBlZXJfY2VydC5wICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCBzZXNzaW9uLT5wZWVyX2NlcnQgPSBtYmVkdGxzX2NhbGxvYyggMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtYmVkdGxzX3g1MDlfY3J0KSApICkgPT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggc2Vzc2lvbi0+cGVlcl9jZXJ0ICk7CisgICAgICAgICAgICBpZiggbWJlZHRsc194NTA5X2NydF9wYXJzZSggc2Vzc2lvbi0+cGVlcl9jZXJ0LCBlbnRyeS0+cGVlcl9jZXJ0LnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5wZWVyX2NlcnQubGVuICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBzZXNzaW9uLT5wZWVyX2NlcnQgKTsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLT5wZWVyX2NlcnQgPSBOVUxMOworICAgICAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworZXhpdDoKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfdW5sb2NrKCAmY2FjaGUtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldCA9IDE7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9jYWNoZV9zZXQoIHZvaWQgKmRhdGEsIGNvbnN0IG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gKQoreworICAgIGludCByZXQgPSAxOworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgbWJlZHRsc190aW1lX3QgdCA9IHRpbWUoIE5VTEwgKSwgb2xkZXN0ID0gMDsKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9lbnRyeSAqb2xkID0gTlVMTDsKKyNlbmRpZgorICAgIG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgKmNhY2hlID0gKG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgKikgZGF0YTsKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9lbnRyeSAqY3VyLCAqcHJ2OworICAgIGludCBjb3VudCA9IDA7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tdXRleF9sb2NrKCAmY2FjaGUtPm11dGV4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisgICAgY3VyID0gY2FjaGUtPmNoYWluOworICAgIHBydiA9IE5VTEw7CisKKyAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgY291bnQrKzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgICAgIGlmKCBjYWNoZS0+dGltZW91dCAhPSAwICYmCisgICAgICAgICAgICAoaW50KSAoIHQgLSBjdXItPnRpbWVzdGFtcCApID4gY2FjaGUtPnRpbWVvdXQgKQorICAgICAgICB7CisgICAgICAgICAgICBjdXItPnRpbWVzdGFtcCA9IHQ7CisgICAgICAgICAgICBicmVhazsgLyogZXhwaXJlZCwgcmV1c2UgdGhpcyBzbG90LCB1cGRhdGUgdGltZXN0YW1wICovCisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGlmKCBtZW1jbXAoIHNlc3Npb24tPmlkLCBjdXItPnNlc3Npb24uaWQsIGN1ci0+c2Vzc2lvbi5pZF9sZW4gKSA9PSAwICkKKyAgICAgICAgICAgIGJyZWFrOyAvKiBjbGllbnQgcmVjb25uZWN0ZWQsIGtlZXAgdGltZXN0YW1wIGZvciBzZXNzaW9uIGlkICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgICAgICBpZiggb2xkZXN0ID09IDAgfHwgY3VyLT50aW1lc3RhbXAgPCBvbGRlc3QgKQorICAgICAgICB7CisgICAgICAgICAgICBvbGRlc3QgPSBjdXItPnRpbWVzdGFtcDsKKyAgICAgICAgICAgIG9sZCA9IGN1cjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgcHJ2ID0gY3VyOworICAgICAgICBjdXIgPSBjdXItPm5leHQ7CisgICAgfQorCisgICAgaWYoIGN1ciA9PSBOVUxMICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICAgICAgLyoKKyAgICAgICAgICogUmV1c2Ugb2xkZXN0IGVudHJ5IGlmIG1heF9lbnRyaWVzIHJlYWNoZWQKKyAgICAgICAgICovCisgICAgICAgIGlmKCBjb3VudCA+PSBjYWNoZS0+bWF4X2VudHJpZXMgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggb2xkID09IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXIgPSBvbGQ7CisgICAgICAgIH0KKyNlbHNlIC8qIE1CRURUTFNfSEFWRV9USU1FICovCisgICAgICAgIC8qCisgICAgICAgICAqIFJldXNlIGZpcnN0IGVudHJ5IGluIGNoYWluIGlmIG1heF9lbnRyaWVzIHJlYWNoZWQsCisgICAgICAgICAqIGJ1dCBtb3ZlIHRvIGxhc3QgcGxhY2UKKyAgICAgICAgICovCisgICAgICAgIGlmKCBjb3VudCA+PSBjYWNoZS0+bWF4X2VudHJpZXMgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggY2FjaGUtPmNoYWluID09IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXIgPSBjYWNoZS0+Y2hhaW47CisgICAgICAgICAgICBjYWNoZS0+Y2hhaW4gPSBjdXItPm5leHQ7CisgICAgICAgICAgICBjdXItPm5leHQgPSBOVUxMOworICAgICAgICAgICAgcHJ2LT5uZXh0ID0gY3VyOworICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19IQVZFX1RJTUUgKi8KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogbWF4X2VudHJpZXMgbm90IHJlYWNoZWQsIGNyZWF0ZSBuZXcgZW50cnkKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgY3VyID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZihtYmVkdGxzX3NzbF9jYWNoZV9lbnRyeSkgKTsKKyAgICAgICAgICAgIGlmKCBjdXIgPT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCBwcnYgPT0gTlVMTCApCisgICAgICAgICAgICAgICAgY2FjaGUtPmNoYWluID0gY3VyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBydi0+bmV4dCA9IGN1cjsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICAgICAgY3VyLT50aW1lc3RhbXAgPSB0OworI2VuZGlmCisgICAgfQorCisgICAgbWVtY3B5KCAmY3VyLT5zZXNzaW9uLCBzZXNzaW9uLCBzaXplb2YoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgLyoKKyAgICAgKiBJZiB3ZSdyZSByZXVzaW5nIGFuIGVudHJ5LCBmcmVlIGl0cyBjZXJ0aWZpY2F0ZSBmaXJzdAorICAgICAqLworICAgIGlmKCBjdXItPnBlZXJfY2VydC5wICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjdXItPnBlZXJfY2VydC5wICk7CisgICAgICAgIG1lbXNldCggJmN1ci0+cGVlcl9jZXJ0LCAwLCBzaXplb2YobWJlZHRsc194NTA5X2J1ZikgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFN0b3JlIHBlZXIgY2VydGlmaWNhdGUKKyAgICAgKi8KKyAgICBpZiggc2Vzc2lvbi0+cGVlcl9jZXJ0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgY3VyLT5wZWVyX2NlcnQucCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzZXNzaW9uLT5wZWVyX2NlcnQtPnJhdy5sZW4gKTsKKyAgICAgICAgaWYoIGN1ci0+cGVlcl9jZXJ0LnAgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoIGN1ci0+cGVlcl9jZXJ0LnAsIHNlc3Npb24tPnBlZXJfY2VydC0+cmF3LnAsCisgICAgICAgICAgICAgICAgc2Vzc2lvbi0+cGVlcl9jZXJ0LT5yYXcubGVuICk7CisgICAgICAgIGN1ci0+cGVlcl9jZXJ0LmxlbiA9IHNlc3Npb24tPnBlZXJfY2VydC0+cmF3LmxlbjsKKworICAgICAgICBjdXItPnNlc3Npb24ucGVlcl9jZXJ0ID0gTlVMTDsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyAgICByZXQgPSAwOworCitleGl0OgorI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZjYWNoZS0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0ID0gMTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCit2b2lkIG1iZWR0bHNfc3NsX2NhY2hlX3NldF90aW1lb3V0KCBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0ICpjYWNoZSwgaW50IHRpbWVvdXQgKQoreworICAgIGlmKCB0aW1lb3V0IDwgMCApIHRpbWVvdXQgPSAwOworCisgICAgY2FjaGUtPnRpbWVvdXQgPSB0aW1lb3V0OworfQorI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9USU1FICovCisKK3ZvaWQgbWJlZHRsc19zc2xfY2FjaGVfc2V0X21heF9lbnRyaWVzKCBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0ICpjYWNoZSwgaW50IG1heCApCit7CisgICAgaWYoIG1heCA8IDAgKSBtYXggPSAwOworCisgICAgY2FjaGUtPm1heF9lbnRyaWVzID0gbWF4OworfQorCit2b2lkIG1iZWR0bHNfc3NsX2NhY2hlX2ZyZWUoIG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgKmNhY2hlICkKK3sKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9lbnRyeSAqY3VyLCAqcHJ2OworCisgICAgY3VyID0gY2FjaGUtPmNoYWluOworCisgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHBydiA9IGN1cjsKKyAgICAgICAgY3VyID0gY3VyLT5uZXh0OworCisgICAgICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25fZnJlZSggJnBydi0+c2Vzc2lvbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgICAgIG1iZWR0bHNfZnJlZSggcHJ2LT5wZWVyX2NlcnQucCApOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisgICAgICAgIG1iZWR0bHNfZnJlZSggcHJ2ICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfbXV0ZXhfZnJlZSggJmNhY2hlLT5tdXRleCApOworI2VuZGlmCit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DQUNIRV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfY2lwaGVyc3VpdGVzLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfY2lwaGVyc3VpdGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2MmJmNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9jaXBoZXJzdWl0ZXMuYwpAQCAtMCwwICsxLDE4NTcgQEAKKy8qKgorICogXGZpbGUgc3NsX2NpcGhlcnN1aXRlcy5jCisgKgorICogXGJyaWVmIFNTTCBjaXBoZXJzdWl0ZXMgZm9yIG1iZWQgVExTCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9zc2xfY2lwaGVyc3VpdGVzLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogT3JkZXJlZCBmcm9tIG1vc3QgcHJlZmVycmVkIHRvIGxlYXN0IHByZWZlcnJlZCBpbiB0ZXJtcyBvZiBzZWN1cml0eS4KKyAqCisgKiBDdXJyZW50IHJ1bGUgKGV4Y2VwdCByYzQsIHdlYWsgYW5kIG51bGwgd2hpY2ggY29tZSBsYXN0KToKKyAqIDEuIEJ5IGtleSBleGNoYW5nZToKKyAqICAgIEZvcndhcmQtc2VjdXJlIG5vbi1QU0sgPiBmb3J3YXJkLXNlY3VyZSBQU0sgPiBFQ0pQQUtFID4gb3RoZXIgbm9uLVBTSyA+IG90aGVyIFBTSworICogMi4gQnkga2V5IGxlbmd0aCBhbmQgY2lwaGVyOgorICogICAgQUVTLTI1NiA+IENhbWVsbGlhLTI1NiA+IEFFUy0xMjggPiBDYW1lbGxpYS0xMjggPiAzREVTCisgKiAzLiBCeSBjaXBoZXIgbW9kZSB3aGVuIHJlbGV2YW50IEdDTSA+IENDTSA+IENCQyA+IENDTV84CisgKiA0LiBCeSBoYXNoIGZ1bmN0aW9uIHVzZWQgd2hlbiByZWxldmFudAorICogNS4gQnkga2V5IGV4Y2hhbmdlL2F1dGggYWdhaW46IEVDID4gbm9uLUVDCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgY2lwaGVyc3VpdGVfcHJlZmVyZW5jZVtdID0KK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUykKKyAgICBNQkVEVExTX1NTTF9DSVBIRVJTVUlURVMsCisjZWxzZQorICAgIC8qIEFsbCBBRVMtMjU2IGVwaGVtZXJhbCBzdWl0ZXMgKi8KKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0NNLAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NDTSwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQsCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0NNXzgsCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0NNXzgsCisKKyAgICAvKiBBbGwgQ0FNRUxMSUEtMjU2IGVwaGVtZXJhbCBzdWl0ZXMgKi8KKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEsCisKKyAgICAvKiBBbGwgQUVTLTEyOCBlcGhlbWVyYWwgc3VpdGVzICovCisgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NDTSwKKyAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQ00sCisgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NDTV84LAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NDTV84LAorCisgICAgLyogQWxsIENBTUVMTElBLTEyOCBlcGhlbWVyYWwgc3VpdGVzICovCisgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBLAorCisgICAgLyogQWxsIHJlbWFpbmluZyA+PSAxMjgtYml0IGVwaGVtZXJhbCBzdWl0ZXMgKi8KKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwKKworICAgIC8qIFRoZSBQU0sgZXBoZW1lcmFsIHN1aXRlcyAqLworICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0NNLAorICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQsCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0NNXzgsCisKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTSwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTV84LAorCisgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwKKworICAgIC8qIFRoZSBFQ0pQQUtFIHN1aXRlICovCisgICAgTUJFRFRMU19UTFNfRUNKUEFLRV9XSVRIX0FFU18xMjhfQ0NNXzgsCisKKyAgICAvKiBBbGwgQUVTLTI1NiBzdWl0ZXMgKi8KKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQ00sCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQsCisgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NDTV84LAorCisgICAgLyogQWxsIENBTUVMTElBLTI1NiBzdWl0ZXMgKi8KKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQsCisgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCwKKworICAgIC8qIEFsbCBBRVMtMTI4IHN1aXRlcyAqLworICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NDTSwKKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0NNXzgsCisKKyAgICAvKiBBbGwgQ0FNRUxMSUEtMTI4IHN1aXRlcyAqLworICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2LAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LAorCisgICAgLyogQWxsIHJlbWFpbmluZyA+PSAxMjgtYml0IHN1aXRlcyAqLworICAgIE1CRURUTFNfVExTX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorCisgICAgLyogVGhlIFJTQSBQU0sgc3VpdGVzICovCisgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCwKKworICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsCisKKyAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwKKworICAgIC8qIFRoZSBQU0sgc3VpdGVzICovCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNLAorICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQsCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOCwKKworICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NDTSwKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2LAorICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNXzgsCisKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorCisgICAgLyogUkM0IHN1aXRlcyAqLworICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfUkM0XzEyOF9TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEsCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBLAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfU0hBLAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfTUQ1LAorICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBLAorICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9SQzRfMTI4X1NIQSwKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9SQzRfMTI4X1NIQSwKKworICAgIC8qIFdlYWsgc3VpdGVzICovCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0RFU19DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0RFU19DQkNfU0hBLAorCisgICAgLyogTlVMTCBzdWl0ZXMgKi8KKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX05VTExfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX05VTExfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBLAorICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBLAorCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEsCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9NRDUsCisgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9OVUxMX1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEsCisgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEsCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEsCisKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DSVBIRVJTVUlURVMgKi8KKyAgICAwCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCBjaXBoZXJzdWl0ZV9kZWZpbml0aW9uc1tdID0KK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwgIlRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCwgIlRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NDTSwgIlRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0yNTYtQ0NNIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NDTV84LCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTI1Ni1DQ00tOCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHIH0sCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0NNLCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTEyOC1DQ00iLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0NNXzgsICJUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMTI4LUNDTS04IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9TSE9SVF9UQUcgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCwgIlRMUy1FQ0RIRS1FQ0RTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwgIlRMUy1FQ0RIRS1FQ0RTQS1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsICJUTFMtRUNESEUtRUNEU0EtV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLCAiVExTLUVDREhFLUVDRFNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBLCAiVExTLUVDREhFLUVDRFNBLVdJVEgtUkM0LTEyOC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9OT0RUTFMgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX05VTExfU0hBLCAiVExTLUVDREhFLUVDRFNBLVdJVEgtTlVMTC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLCAiVExTLUVDREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLCAiVExTLUVDREhFLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwgIlRMUy1FQ0RIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LCAiVExTLUVDREhFLVJTQS1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCwgIlRMUy1FQ0RIRS1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LCAiVExTLUVDREhFLVJTQS1XSVRILUFFUy0yNTYtR0NNLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTSwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LCAiVExTLUVDREhFLVJTQS1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCwgIlRMUy1FQ0RIRS1SU0EtV0lUSC1DQU1FTExJQS0yNTYtQ0JDLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwgIlRMUy1FQ0RIRS1SU0EtV0lUSC1DQU1FTExJQS0xMjgtR0NNLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsICJUTFMtRUNESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTSwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLCAiVExTLUVDREhFLVJTQS1XSVRILTNERVMtRURFLUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBLCAiVExTLUVDREhFLVJTQS1XSVRILVJDNC0xMjgtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4LCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX05PRFRMUyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX05VTExfU0hBLCAiVExTLUVDREhFLVJTQS1XSVRILU5VTEwtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykgJiYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwgIlRMUy1ESEUtUlNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAmJiBNQkVEVExTX0dDTV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwgIlRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsICJUTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorCisgICAgeyBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2LCAiVExTLURIRS1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsICJUTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKworICAgIHsgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwgIlRMUy1ESEUtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ00sICJUTFMtREhFLVJTQS1XSVRILUFFUy0yNTYtQ0NNIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisgICAgeyBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOCwgIlRMUy1ESEUtUlNBLVdJVEgtQUVTLTI1Ni1DQ00tOCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9TSE9SVF9UQUcgfSwKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NDTSwgIlRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1DQ00iLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NDTV84LCAiVExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNDTS04IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiwgIlRMUy1ESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorCisgICAgeyBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYsICJUTFMtREhFLVJTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBLCAiVExTLURIRS1SU0EtV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorCisgICAgeyBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEsICJUTFMtREhFLVJTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYsICJUTFMtREhFLVJTQS1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsICJUTFMtREhFLVJTQS1XSVRILUNBTUVMTElBLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00sIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0FNRUxMSUFfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLCAiVExTLURIRS1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKSAmJiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsICJUTFMtUlNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICYmIE1CRURUTFNfR0NNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsICJUTFMtUlNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LCAiVExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NiwgIlRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLCAiVExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsICJUTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0NNLCAiVExTLVJTQS1XSVRILUFFUy0yNTYtQ0NNIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0NNXzgsICJUTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQ00tOCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyB9LAorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQ00sICJUTFMtUlNBLVdJVEgtQUVTLTEyOC1DQ00iLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQ01fOCwgIlRMUy1SU0EtV0lUSC1BRVMtMTI4LUNDTS04IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHIH0sCisjZW5kaWYgLyogTUJFRFRMU19DQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsICJUTFMtUlNBLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2LCAiVExTLVJTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQSwgIlRMUy1SU0EtV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBLCAiVExTLVJTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYsICJUTFMtUlNBLVdJVEgtQ0FNRUxMSUEtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LCAiVExTLVJTQS1XSVRILUNBTUVMTElBLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00sIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0FNRUxMSUFfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsICJUTFMtUlNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X01ENSwgIlRMUy1SU0EtV0lUSC1SQzQtMTI4LU1ENSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCwgTUJFRFRMU19NRF9NRDUsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX05PRFRMUyB9LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9TSEEsICJUTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfTk9EVExTIH0sCisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX0FSQzRfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLCAiVExTLUVDREgtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyAgICB7IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLCAiVExTLUVDREgtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwgIlRMUy1FQ0RILVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LCAiVExTLUVDREgtUlNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCwgIlRMUy1FQ0RILVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LCAiVExTLUVDREgtUlNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LCAiVExTLUVDREgtUlNBLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCwgIlRMUy1FQ0RILVJTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwgIlRMUy1FQ0RILVJTQS1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsICJUTFMtRUNESC1SU0EtV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLCAiVExTLUVDREgtUlNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX1JDNF8xMjhfU0hBLCAiVExTLUVDREgtUlNBLVdJVEgtUkM0LTEyOC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9OT0RUTFMgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX05VTExfU0hBLCAiVExTLUVDREgtUlNBLVdJVEgtTlVMTC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsICJUTFMtRUNESC1FQ0RTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyAgICB7IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsICJUTFMtRUNESC1FQ0RTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LCAiVExTLUVDREgtRUNEU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsICJUTFMtRUNESC1FQ0RTQS1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LCAiVExTLUVDREgtRUNEU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsICJUTFMtRUNESC1FQ0RTQS1XSVRILUFFUy0yNTYtR0NNLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTSwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsICJUTFMtRUNESC1FQ0RTQS1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LCAiVExTLUVDREgtRUNEU0EtV0lUSC1DQU1FTExJQS0yNTYtQ0JDLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2LCAiVExTLUVDREgtRUNEU0EtV0lUSC1DQU1FTExJQS0xMjgtR0NNLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCwgIlRMUy1FQ0RILUVDRFNBLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTSwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsICJUTFMtRUNESC1FQ0RTQS1XSVRILTNERVMtRURFLUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEsICJUTFMtRUNESC1FQ0RTQS1XSVRILVJDNC0xMjgtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4LCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9OT0RUTFMgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEsICJUTFMtRUNESC1FQ0RTQS1XSVRILU5VTEwtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LCAiVExTLVBTSy1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LCAiVExTLVBTSy1XSVRILUFFUy0yNTYtR0NNLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTSwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LCAiVExTLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LCAiVExTLVBTSy1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQSwgIlRMUy1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKworICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLCAiVExTLVBTSy1XSVRILUFFUy0yNTYtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisgICAgeyBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NDTSwgIlRMUy1QU0stV0lUSC1BRVMtMjU2LUNDTSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisgICAgeyBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NDTV84LCAiVExTLVBTSy1XSVRILUFFUy0yNTYtQ0NNLTgiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9TSE9SVF9UQUcgfSwKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNLCAiVExTLVBTSy1XSVRILUFFUy0xMjgtQ0NNIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNXzgsICJUTFMtUFNLLVdJVEgtQUVTLTEyOC1DQ00tOCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LCAiVExTLVBTSy1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LCAiVExTLVBTSy1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2LCAiVExTLVBTSy1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LCAiVExTLVBTSy1XSVRILUNBTUVMTElBLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00sIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwgIlRMUy1QU0stV0lUSC0zREVTLUVERS1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19QU0tfV0lUSF9SQzRfMTI4X1NIQSwgIlRMUy1QU0stV0lUSC1SQzQtMTI4LVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9OT0RUTFMgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwgIlRMUy1ESEUtUFNLLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwgIlRMUy1ESEUtUFNLLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwgIlRMUy1ESEUtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCwgIlRMUy1ESEUtUFNLLVdJVEgtQUVTLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEsICJUTFMtREhFLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKworICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQSwgIlRMUy1ESEUtUFNLLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ00sICJUTFMtREhFLVBTSy1XSVRILUFFUy0yNTYtQ0NNIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisgICAgeyBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOCwgIlRMUy1ESEUtUFNLLVdJVEgtQUVTLTI1Ni1DQ00tOCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9TSE9SVF9UQUcgfSwKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTSwgIlRMUy1ESEUtUFNLLVdJVEgtQUVTLTEyOC1DQ00iLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTV84LCAiVExTLURIRS1QU0stV0lUSC1BRVMtMTI4LUNDTS04IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiwgIlRMUy1ESEUtUFNLLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCwgIlRMUy1ESEUtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwgIlRMUy1ESEUtUFNLLVdJVEgtQ0FNRUxMSUEtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCwgIlRMUy1ESEUtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTSwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEsICJUTFMtREhFLVBTSy1XSVRILTNERVMtRURFLUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEsICJUTFMtREhFLVBTSy1XSVRILVJDNC0xMjgtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4LCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9OT0RUTFMgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LCAiVExTLUVDREhFLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LCAiVExTLUVDREhFLVBTSy1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQSwgIlRMUy1FQ0RIRS1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKworICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLCAiVExTLUVDREhFLVBTSy1XSVRILUFFUy0yNTYtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LCAiVExTLUVDREhFLVBTSy1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LCAiVExTLUVDREhFLVBTSy1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0FNRUxMSUFfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEsICJUTFMtRUNESEUtUFNLLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEsICJUTFMtRUNESEUtUFNLLVdJVEgtUkM0LTEyOC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfTk9EVExTIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FSQzRfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsICJUTFMtUlNBLVBTSy1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsICJUTFMtUlNBLVBTSy1XSVRILUFFUy0yNTYtR0NNLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTSwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsICJUTFMtUlNBLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQsICJUTFMtUlNBLVBTSy1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBLCAiVExTLVJTQS1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEsICJUTFMtUlNBLVBTSy1XSVRILUFFUy0yNTYtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsICJUTFMtUlNBLVBTSy1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQsICJUTFMtUlNBLVBTSy1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYsICJUTFMtUlNBLVBTSy1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsICJUTFMtUlNBLVBTSy1XSVRILUNBTUVMTElBLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00sIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0FNRUxMSUFfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBLCAiVExTLVJTQS1QU0stV0lUSC0zREVTLUVERS1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX1JDNF8xMjhfU0hBLCAiVExTLVJTQS1QU0stV0lUSC1SQzQtMTI4LVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfTk9EVExTIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FSQzRfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyAgICB7IE1CRURUTFNfVExTX0VDSlBBS0VfV0lUSF9BRVNfMTI4X0NDTV84LCAiVExTLUVDSlBBS0UtV0lUSC1BRVMtMTI4LUNDTS04IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIpCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX01ENSwgIlRMUy1SU0EtV0lUSC1OVUxMLU1ENSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX01ENSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEsICJUTFMtUlNBLVdJVEgtTlVMTC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfU0hBMjU2LCAiVExTLVJTQS1XSVRILU5VTEwtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEsICJUTFMtUFNLLVdJVEgtTlVMTC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMjU2LCAiVExTLVBTSy1XSVRILU5VTEwtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMzg0LCAiVExTLVBTSy1XSVRILU5VTEwtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQSwgIlRMUy1ESEUtUFNLLVdJVEgtTlVMTC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYsICJUTFMtREhFLVBTSy1XSVRILU5VTEwtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQsICJUTFMtREhFLVBTSy1XSVRILU5VTEwtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQSwgIlRMUy1FQ0RIRS1QU0stV0lUSC1OVUxMLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYsICJUTFMtRUNESEUtUFNLLVdJVEgtTlVMTC1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQsICJUTFMtRUNESEUtUFNLLVdJVEgtTlVMTC1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBLCAiVExTLVJTQS1QU0stV0lUSC1OVUxMLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTI1NiwgIlRMUy1SU0EtUFNLLVdJVEgtTlVMTC1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTM4NCwgIlRMUy1SU0EtUFNLLVdJVEgtTlVMTC1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9ERVNfQ0JDX1NIQSwgIlRMUy1ESEUtUlNBLVdJVEgtREVTLUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9ERVNfQ0JDX1NIQSwgIlRMUy1SU0EtV0lUSC1ERVMtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisjZW5kaWYgLyogTUJFRFRMU19FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMgKi8KKworICAgIHsgMCwgIiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OT05FLCBNQkVEVExTX01EX05PTkUsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX05PTkUsCisgICAgICAwLCAwLCAwLCAwLCAwIH0KK307CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUykKK2NvbnN0IGludCAqbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoIHZvaWQgKQoreworICAgIHJldHVybiggY2lwaGVyc3VpdGVfcHJlZmVyZW5jZSApOworfQorI2Vsc2UKKyNkZWZpbmUgTUFYX0NJUEhFUlNVSVRFUyAgICBzaXplb2YoIGNpcGhlcnN1aXRlX2RlZmluaXRpb25zICAgICApIC8gICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBjaXBoZXJzdWl0ZV9kZWZpbml0aW9uc1swXSAgKQorc3RhdGljIGludCBzdXBwb3J0ZWRfY2lwaGVyc3VpdGVzW01BWF9DSVBIRVJTVUlURVNdOworc3RhdGljIGludCBzdXBwb3J0ZWRfaW5pdCA9IDA7CisKK2NvbnN0IGludCAqbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoIHZvaWQgKQoreworICAgIC8qCisgICAgICogT24gaW5pdGlhbCBjYWxsIGZpbHRlciBvdXQgYWxsIGNpcGhlcnN1aXRlcyBub3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQKKyAgICAgKiBidWlsZCBiYXNlZCBvbiBwcmVzZW5jZSBpbiB0aGUgY2lwaGVyc3VpdGVfZGVmaW5pdGlvbnMuCisgICAgICovCisgICAgaWYoIHN1cHBvcnRlZF9pbml0ID09IDAgKQorICAgIHsKKyAgICAgICAgY29uc3QgaW50ICpwOworICAgICAgICBpbnQgKnE7CisKKyAgICAgICAgZm9yKCBwID0gY2lwaGVyc3VpdGVfcHJlZmVyZW5jZSwgcSA9IHN1cHBvcnRlZF9jaXBoZXJzdWl0ZXM7CisgICAgICAgICAgICAgKnAgIT0gMCAmJiBxIDwgc3VwcG9ydGVkX2NpcGhlcnN1aXRlcyArIE1BWF9DSVBIRVJTVUlURVMgLSAxOworICAgICAgICAgICAgIHArKyApCisgICAgICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTKQorICAgICAgICAgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY3NfaW5mbzsKKyAgICAgICAgICAgIGlmKCAoIGNzX2luZm8gPSBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV9mcm9tX2lkKCAqcCApICkgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgIGNzX2luZm8tPmNpcGhlciAhPSBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCApCisjZWxzZQorICAgICAgICAgICAgaWYoIG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQoICpwICkgIT0gTlVMTCApCisjZW5kaWYKKyAgICAgICAgICAgICAgICAqKHErKykgPSAqcDsKKyAgICAgICAgfQorICAgICAgICAqcSA9IDA7CisKKyAgICAgICAgc3VwcG9ydGVkX2luaXQgPSAxOworICAgIH0KKworICAgIHJldHVybiggc3VwcG9ydGVkX2NpcGhlcnN1aXRlcyApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUyAqLworCitjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICptYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV9mcm9tX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNpcGhlcnN1aXRlX25hbWUgKQoreworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmN1ciA9IGNpcGhlcnN1aXRlX2RlZmluaXRpb25zOworCisgICAgaWYoIE5VTEwgPT0gY2lwaGVyc3VpdGVfbmFtZSApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgd2hpbGUoIGN1ci0+aWQgIT0gMCApCisgICAgeworICAgICAgICBpZiggMCA9PSBzdHJjbXAoIGN1ci0+bmFtZSwgY2lwaGVyc3VpdGVfbmFtZSApICkKKyAgICAgICAgICAgIHJldHVybiggY3VyICk7CisKKyAgICAgICAgY3VyKys7CisgICAgfQorCisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKm1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQoIGludCBjaXBoZXJzdWl0ZSApCit7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY3VyID0gY2lwaGVyc3VpdGVfZGVmaW5pdGlvbnM7CisKKyAgICB3aGlsZSggY3VyLT5pZCAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCBjdXItPmlkID09IGNpcGhlcnN1aXRlICkKKyAgICAgICAgICAgIHJldHVybiggY3VyICk7CisKKyAgICAgICAgY3VyKys7CisgICAgfQorCisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisKK2NvbnN0IGNoYXIgKm1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lKCBjb25zdCBpbnQgY2lwaGVyc3VpdGVfaWQgKQoreworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmN1cjsKKworICAgIGN1ciA9IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQoIGNpcGhlcnN1aXRlX2lkICk7CisKKyAgICBpZiggY3VyID09IE5VTEwgKQorICAgICAgICByZXR1cm4oICJ1bmtub3duIiApOworCisgICAgcmV0dXJuKCBjdXItPm5hbWUgKTsKK30KKworaW50IG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9pZCggY29uc3QgY2hhciAqY2lwaGVyc3VpdGVfbmFtZSApCit7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY3VyOworCisgICAgY3VyID0gbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9zdHJpbmcoIGNpcGhlcnN1aXRlX25hbWUgKTsKKworICAgIGlmKCBjdXIgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgcmV0dXJuKCBjdXItPmlkICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfQykKK21iZWR0bHNfcGtfdHlwZV90IG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9zaWdfcGtfYWxnKCBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICppbmZvICkKK3sKKyAgICBzd2l0Y2goIGluZm8tPmtleV9leGNoYW5nZSApCisgICAgeworICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQToKKyAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBOgorICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQToKKyAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLOgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX1BLX1JTQSApOworCisgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0E6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfUEtfRUNEU0EgKTsKKworICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBOgorICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0E6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfUEtfRUNLRVkgKTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX1BLX05PTkUgKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTUJFRFRMU19QS19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKK2ludCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV91c2VzX2VjKCBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICppbmZvICkKK3sKKyAgICBzd2l0Y2goIGluZm8tPmtleV9leGNoYW5nZSApCisgICAgeworICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQToKKyAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQToKKyAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0s6CisgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0E6CisgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQToKKyAgICAgICAgICAgIHJldHVybiggMSApOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ0RIX0MgfHwgTUJFRFRMU19FQ0RTQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKK2ludCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV91c2VzX3BzayggY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqaW5mbyApCit7CisgICAgc3dpdGNoKCBpbmZvLT5rZXlfZXhjaGFuZ2UgKQorICAgIHsKKyAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0s6CisgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSzoKKyAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLOgorICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSzoKKyAgICAgICAgICAgIHJldHVybiggMSApOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9UTFNfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX2NsaS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX2NsaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMzgyM2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfY2xpLmMKQEAgLTAsMCArMSwzNDA1IEBACisvKgorICogIFNTTHYzL1RMU3YxIGNsaWVudC1zaWRlIGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICBmcmVlCisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvZGVidWcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsX2ludGVybmFsLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtX3RpbWUuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfaG9zdG5hbWVfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gc3NsLT5vdXRfbXNnICsgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOOworICAgIHNpemVfdCBob3N0bmFtZV9sZW47CisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBpZiggc3NsLT5ob3N0bmFtZSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGFkZGluZyBzZXJ2ZXIgbmFtZSBleHRlbnNpb246ICVzIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPmhvc3RuYW1lICkgKTsKKworICAgIGhvc3RuYW1lX2xlbiA9IHN0cmxlbiggc3NsLT5ob3N0bmFtZSApOworCisgICAgaWYoIGVuZCA8IHAgfHwgKHNpemVfdCkoIGVuZCAtIHAgKSA8IGhvc3RuYW1lX2xlbiArIDkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJidWZmZXIgdG9vIHNtYWxsIiApICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHN0cnVjdCB7CisgICAgICogICAgIE5hbWVUeXBlIG5hbWVfdHlwZTsKKyAgICAgKiAgICAgc2VsZWN0IChuYW1lX3R5cGUpIHsKKyAgICAgKiAgICAgICAgIGNhc2UgaG9zdF9uYW1lOiBIb3N0TmFtZTsKKyAgICAgKiAgICAgfSBuYW1lOworICAgICAqIH0gU2VydmVyTmFtZTsKKyAgICAgKgorICAgICAqIGVudW0geworICAgICAqICAgICBob3N0X25hbWUoMCksICgyNTUpCisgICAgICogfSBOYW1lVHlwZTsKKyAgICAgKgorICAgICAqIG9wYXF1ZSBIb3N0TmFtZTwxLi4yXjE2LTE+OworICAgICAqCisgICAgICogc3RydWN0IHsKKyAgICAgKiAgICAgU2VydmVyTmFtZSBzZXJ2ZXJfbmFtZV9saXN0PDEuLjJeMTYtMT4KKyAgICAgKiB9IFNlcnZlck5hbWVMaXN0OworICAgICAqLworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NFUlZFUk5BTUUgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NFUlZFUk5BTUUgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCAoaG9zdG5hbWVfbGVuICsgNSkgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggKGhvc3RuYW1lX2xlbiArIDUpICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggKGhvc3RuYW1lX2xlbiArIDMpID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIChob3N0bmFtZV9sZW4gKyAzKSAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9TRVJWRVJOQU1FX0hPU1ROQU1FICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBob3N0bmFtZV9sZW4gPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggaG9zdG5hbWVfbGVuICAgICAgKSAmIDB4RkYgKTsKKworICAgIG1lbWNweSggcCwgc3NsLT5ob3N0bmFtZSwgaG9zdG5hbWVfbGVuICk7CisKKyAgICAqb2xlbiA9IGhvc3RuYW1lX2xlbiArIDk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX3JlbmVnb3RpYXRpb25fZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgIT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9JTl9QUk9HUkVTUyApCisgICAgICAgIHJldHVybjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iICkgKTsKKworICAgIGlmKCBlbmQgPCBwIHx8IChzaXplX3QpKCBlbmQgLSBwICkgPCA1ICsgc3NsLT52ZXJpZnlfZGF0YV9sZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJidWZmZXIgdG9vIHNtYWxsIiApICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNlY3VyZSByZW5lZ290aWF0aW9uCisgICAgICovCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfUkVORUdPVElBVElPTl9JTkZPID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9SRU5FR09USUFUSU9OX0lORk8gICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9IDB4MDA7CisgICAgKnArKyA9ICggc3NsLT52ZXJpZnlfZGF0YV9sZW4gKyAxICkgJiAweEZGOworICAgICpwKysgPSBzc2wtPnZlcmlmeV9kYXRhX2xlbiAmIDB4RkY7CisKKyAgICBtZW1jcHkoIHAsIHNzbC0+b3duX3ZlcmlmeV9kYXRhLCBzc2wtPnZlcmlmeV9kYXRhX2xlbiApOworCisgICAgKm9sZW4gPSA1ICsgc3NsLT52ZXJpZnlfZGF0YV9sZW47Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworCisvKgorICogT25seSBpZiB3ZSBoYW5kbGUgYXQgbGVhc3Qgb25lIGtleSBleGNoYW5nZSB0aGF0IG5lZWRzIHNpZ25hdHVyZXMuCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCkKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9zaWduYXR1cmVfYWxnb3JpdGhtc19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisgICAgc2l6ZV90IHNpZ19hbGdfbGVuID0gMDsKKyAgICBjb25zdCBpbnQgKm1kOworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgdW5zaWduZWQgY2hhciAqc2lnX2FsZ19saXN0ID0gYnVmICsgNjsKKyNlbmRpZgorCisgICAgKm9sZW4gPSAwOworCisgICAgaWYoIHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlciAhPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgICAgICByZXR1cm47CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgYWRkaW5nIHNpZ25hdHVyZV9hbGdvcml0aG1zIGV4dGVuc2lvbiIgKSApOworCisgICAgZm9yKCBtZCA9IHNzbC0+Y29uZi0+c2lnX2hhc2hlczsgKm1kICE9IE1CRURUTFNfTURfTk9ORTsgbWQrKyApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorICAgICAgICBzaWdfYWxnX2xlbiArPSAyOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgICAgICBzaWdfYWxnX2xlbiArPSAyOworI2VuZGlmCisgICAgfQorCisgICAgaWYoIGVuZCA8IHAgfHwgKHNpemVfdCkoIGVuZCAtIHAgKSA8IHNpZ19hbGdfbGVuICsgNiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogUHJlcGFyZSBzaWduYXR1cmVfYWxnb3JpdGhtcyBleHRlbnNpb24gKFRMUyAxLjIpCisgICAgICovCisgICAgc2lnX2FsZ19sZW4gPSAwOworCisgICAgZm9yKCBtZCA9IHNzbC0+Y29uZi0+c2lnX2hhc2hlczsgKm1kICE9IE1CRURUTFNfTURfTk9ORTsgbWQrKyApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorICAgICAgICBzaWdfYWxnX2xpc3Rbc2lnX2FsZ19sZW4rK10gPSBtYmVkdGxzX3NzbF9oYXNoX2Zyb21fbWRfYWxnKCAqbWQgKTsKKyAgICAgICAgc2lnX2FsZ19saXN0W3NpZ19hbGdfbGVuKytdID0gTUJFRFRMU19TU0xfU0lHX0VDRFNBOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgICAgICBzaWdfYWxnX2xpc3Rbc2lnX2FsZ19sZW4rK10gPSBtYmVkdGxzX3NzbF9oYXNoX2Zyb21fbWRfYWxnKCAqbWQgKTsKKyAgICAgICAgc2lnX2FsZ19saXN0W3NpZ19hbGdfbGVuKytdID0gTUJFRFRMU19TU0xfU0lHX1JTQTsKKyNlbmRpZgorICAgIH0KKworICAgIC8qCisgICAgICogZW51bSB7CisgICAgICogICAgIG5vbmUoMCksIG1kNSgxKSwgc2hhMSgyKSwgc2hhMjI0KDMpLCBzaGEyNTYoNCksIHNoYTM4NCg1KSwKKyAgICAgKiAgICAgc2hhNTEyKDYpLCAoMjU1KQorICAgICAqIH0gSGFzaEFsZ29yaXRobTsKKyAgICAgKgorICAgICAqIGVudW0geyBhbm9ueW1vdXMoMCksIHJzYSgxKSwgZHNhKDIpLCBlY2RzYSgzKSwgKDI1NSkgfQorICAgICAqICAgU2lnbmF0dXJlQWxnb3JpdGhtOworICAgICAqCisgICAgICogc3RydWN0IHsKKyAgICAgKiAgICAgSGFzaEFsZ29yaXRobSBoYXNoOworICAgICAqICAgICBTaWduYXR1cmVBbGdvcml0aG0gc2lnbmF0dXJlOworICAgICAqIH0gU2lnbmF0dXJlQW5kSGFzaEFsZ29yaXRobTsKKyAgICAgKgorICAgICAqIFNpZ25hdHVyZUFuZEhhc2hBbGdvcml0aG0KKyAgICAgKiAgIHN1cHBvcnRlZF9zaWduYXR1cmVfYWxnb3JpdGhtczwyLi4yXjE2LTI+OworICAgICAqLworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NJR19BTEcgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NJR19BTEcgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCAoIHNpZ19hbGdfbGVuICsgMiApID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoICggc2lnX2FsZ19sZW4gKyAyICkgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBzaWdfYWxnX2xlbiA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBzaWdfYWxnX2xlbiAgICAgICkgJiAweEZGICk7CisKKyAgICAqb2xlbiA9IDYgKyBzaWdfYWxnX2xlbjsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgJiYKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX3N1cHBvcnRlZF9lbGxpcHRpY19jdXJ2ZXNfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKyAgICB1bnNpZ25lZCBjaGFyICplbGxpcHRpY19jdXJ2ZV9saXN0ID0gcCArIDY7CisgICAgc2l6ZV90IGVsbGlwdGljX2N1cnZlX2xlbiA9IDA7CisgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqaW5mbzsKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKmdycF9pZDsKKyNlbHNlCisgICAgKCh2b2lkKSBzc2wpOworI2VuZGlmCisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgYWRkaW5nIHN1cHBvcnRlZF9lbGxpcHRpY19jdXJ2ZXMgZXh0ZW5zaW9uIiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgZm9yKCBncnBfaWQgPSBzc2wtPmNvbmYtPmN1cnZlX2xpc3Q7ICpncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsgZ3JwX2lkKysgKQorICAgIHsKKyAgICAgICAgaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV9ncnBfaWQoICpncnBfaWQgKTsKKyNlbHNlCisgICAgZm9yKCBpbmZvID0gbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpOyBpbmZvLT5ncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsgaW5mbysrICkKKyAgICB7CisjZW5kaWYKKyAgICAgICAgaWYoIGluZm8gPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiaW52YWxpZCBjdXJ2ZSBpbiBzc2wgY29uZmlndXJhdGlvbiIgKSApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZWxsaXB0aWNfY3VydmVfbGVuICs9IDI7CisgICAgfQorCisgICAgaWYoIGVuZCA8IHAgfHwgKHNpemVfdCkoIGVuZCAtIHAgKSA8IDYgKyBlbGxpcHRpY19jdXJ2ZV9sZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJidWZmZXIgdG9vIHNtYWxsIiApICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbGxpcHRpY19jdXJ2ZV9sZW4gPSAwOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGZvciggZ3JwX2lkID0gc3NsLT5jb25mLT5jdXJ2ZV9saXN0OyAqZ3JwX2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7IGdycF9pZCsrICkKKyAgICB7CisgICAgICAgIGluZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fZ3JwX2lkKCAqZ3JwX2lkICk7CisjZWxzZQorICAgIGZvciggaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKTsgaW5mby0+Z3JwX2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7IGluZm8rKyApCisgICAgeworI2VuZGlmCisgICAgICAgIGVsbGlwdGljX2N1cnZlX2xpc3RbZWxsaXB0aWNfY3VydmVfbGVuKytdID0gaW5mby0+dGxzX2lkID4+IDg7CisgICAgICAgIGVsbGlwdGljX2N1cnZlX2xpc3RbZWxsaXB0aWNfY3VydmVfbGVuKytdID0gaW5mby0+dGxzX2lkICYgMHhGRjsKKyAgICB9CisKKyAgICBpZiggZWxsaXB0aWNfY3VydmVfbGVuID09IDAgKQorICAgICAgICByZXR1cm47CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfRUxMSVBUSUNfQ1VSVkVTID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfRUxMSVBUSUNfQ1VSVkVTICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggKCBlbGxpcHRpY19jdXJ2ZV9sZW4gKyAyICkgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggKCBlbGxpcHRpY19jdXJ2ZV9sZW4gKyAyICkgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCAoIGVsbGlwdGljX2N1cnZlX2xlbiAgICAgKSA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCAoIGVsbGlwdGljX2N1cnZlX2xlbiAgICAgKSAgICAgICkgJiAweEZGICk7CisKKyAgICAqb2xlbiA9IDYgKyBlbGxpcHRpY19jdXJ2ZV9sZW47Cit9CisKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9zdXBwb3J0ZWRfcG9pbnRfZm9ybWF0c19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgYWRkaW5nIHN1cHBvcnRlZF9wb2ludF9mb3JtYXRzIGV4dGVuc2lvbiIgKSApOworCisgICAgaWYoIGVuZCA8IHAgfHwgKHNpemVfdCkoIGVuZCAtIHAgKSA8IDYgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJidWZmZXIgdG9vIHNtYWxsIiApICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUUyA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfU1VQUE9SVEVEX1BPSU5UX0ZPUk1BVFMgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9IDB4MDA7CisgICAgKnArKyA9IDI7CisKKyAgICAqcCsrID0gMTsKKyAgICAqcCsrID0gTUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VEOworCisgICAgKm9sZW4gPSA2OworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DIHx8IE1CRURUTFNfRUNEU0FfQyB8fCAKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX2VjanBha2Vfa2twcF9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gc3NsLT5vdXRfbXNnICsgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOOworICAgIHNpemVfdCBra3BwX2xlbjsKKworICAgICpvbGVuID0gMDsKKworICAgIC8qIFNraXAgY29zdGx5IGV4dGVuc2lvbiBpZiB3ZSBjYW4ndCB1c2UgRUMgSi1QQUtFIGFueXdheSAqLworICAgIGlmKCBtYmVkdGxzX2VjanBha2VfY2hlY2soICZzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGFkZGluZyBlY2pwYWtlX2trcHAgZXh0ZW5zaW9uIiApICk7CisKKyAgICBpZiggZW5kIC0gcCA8IDQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJidWZmZXIgdG9vIHNtYWxsIiApICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9FQ0pQQUtFX0tLUFAgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VDSlBBS0VfS0tQUCAgICAgICkgJiAweEZGICk7CisKKyAgICAvKgorICAgICAqIFdlIG1heSBuZWVkIHRvIHNlbmQgQ2xpZW50SGVsbG8gbXVsdGlwbGUgdGltZXMgZm9yIEhlbGxvIHZlcmlmaWNhdGlvbi4KKyAgICAgKiBXZSBkb24ndCB3YW50IHRvIGNvbXB1dGUgZnJlc2ggdmFsdWVzIGV2ZXJ5IHRpbWUgKGJvdGggZm9yIHBlcmZvcm1hbmNlCisgICAgICogYW5kIGNvbnNpc3RlbmN5IHJlYXNvbnMpLCBzbyBjYWNoZSB0aGUgZXh0ZW5zaW9uIGNvbnRlbnQuCisgICAgICovCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2NhY2hlID09IE5VTEwgfHwKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY2FjaGVfbGVuID09IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJnZW5lcmF0aW5nIG5ldyBlY2pwYWtlIHBhcmFtZXRlcnMiICkgKTsKKworICAgICAgICByZXQgPSBtYmVkdGxzX2VjanBha2Vfd3JpdGVfcm91bmRfb25lKCAmc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgKyAyLCBlbmQgLSBwIC0gMiwgJmtrcHBfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxICwgIm1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF9vbmUiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2NhY2hlID0gbWJlZHRsc19jYWxsb2MoIDEsIGtrcHBfbGVuICk7CisgICAgICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jYWNoZSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJhbGxvY2F0aW9uIGZhaWxlZCIgKSApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KCBzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jYWNoZSwgcCArIDIsIGtrcHBfbGVuICk7CisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2NhY2hlX2xlbiA9IGtrcHBfbGVuOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInJlLXVzaW5nIGNhY2hlZCBlY2pwYWtlIHBhcmFtZXRlcnMiICkgKTsKKworICAgICAgICBra3BwX2xlbiA9IHNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2NhY2hlX2xlbjsKKworICAgICAgICBpZiggKHNpemVfdCkoIGVuZCAtIHAgLSAyICkgPCBra3BwX2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYnVmZmVyIHRvbyBzbWFsbCIgKSApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KCBwICsgMiwgc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY2FjaGUsIGtrcHBfbGVuICk7CisgICAgfQorCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBra3BwX2xlbiA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBra3BwX2xlbiAgICAgICkgJiAweEZGICk7CisKKyAgICAqb2xlbiA9IGtrcHBfbGVuICsgNDsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9tYXhfZnJhZ21lbnRfbGVuZ3RoX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBpZiggc3NsLT5jb25mLT5tZmxfY29kZSA9PSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fTk9ORSApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBhZGRpbmcgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iICkgKTsKKworICAgIGlmKCBlbmQgPCBwIHx8IChzaXplX3QpKCBlbmQgLSBwICkgPCA1ICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYnVmZmVyIHRvbyBzbWFsbCIgKSApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfTUFYX0ZSQUdNRU5UX0xFTkdUSCA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfTUFYX0ZSQUdNRU5UX0xFTkdUSCAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gMHgwMDsKKyAgICAqcCsrID0gMTsKKworICAgICpwKysgPSBzc2wtPmNvbmYtPm1mbF9jb2RlOworCisgICAgKm9sZW4gPSA1OworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEggKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfdHJ1bmNhdGVkX2htYWNfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBpZiggc3NsLT5jb25mLT50cnVuY19obWFjID09IE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRElTQUJMRUQgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdHJ1bmNhdGVkX2htYWMgZXh0ZW5zaW9uIiApICk7CisKKyAgICBpZiggZW5kIDwgcCB8fCAoc2l6ZV90KSggZW5kIC0gcCApIDwgNCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1RSVU5DQVRFRF9ITUFDID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9UUlVOQ0FURURfSE1BQyAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gMHgwMDsKKyAgICAqcCsrID0gMHgwMDsKKworICAgICpvbGVuID0gNDsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX2VuY3J5cHRfdGhlbl9tYWNfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBpZiggc3NsLT5jb25mLT5lbmNyeXB0X3RoZW5fbWFjID09IE1CRURUTFNfU1NMX0VUTV9ESVNBQkxFRCB8fAorICAgICAgICBzc2wtPmNvbmYtPm1heF9taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgYWRkaW5nIGVuY3J5cHRfdGhlbl9tYWMgIgorICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIgKSApOworCisgICAgaWYoIGVuZCA8IHAgfHwgKHNpemVfdCkoIGVuZCAtIHAgKSA8IDQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJidWZmZXIgdG9vIHNtYWxsIiApICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9FTkNSWVBUX1RIRU5fTUFDID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9FTkNSWVBUX1RIRU5fTUFDICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwKysgPSAweDAwOworICAgICpwKysgPSAweDAwOworCisgICAgKm9sZW4gPSA0OworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCkKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9leHRlbmRlZF9tc19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBzc2wtPmNvbmYtPmV4dGVuZGVkX21zID09IE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0RJU0FCTEVEIHx8CisgICAgICAgIHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBhZGRpbmcgZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCAiCisgICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiApICk7CisKKyAgICBpZiggZW5kIDwgcCB8fCAoc2l6ZV90KSggZW5kIC0gcCApIDwgNCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9IDB4MDA7CisgICAgKnArKyA9IDB4MDA7CisKKyAgICAqb2xlbiA9IDQ7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfc2Vzc2lvbl90aWNrZXRfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisgICAgc2l6ZV90IHRsZW4gPSBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT50aWNrZXRfbGVuOworCisgICAgKm9sZW4gPSAwOworCisgICAgaWYoIHNzbC0+Y29uZi0+c2Vzc2lvbl90aWNrZXRzID09IE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19ESVNBQkxFRCApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGFkZGluZyBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iICkgKTsKKworICAgIGlmKCBlbmQgPCBwIHx8IChzaXplX3QpKCBlbmQgLSBwICkgPCA0ICsgdGxlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NFU1NJT05fVElDS0VUID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9TRVNTSU9OX1RJQ0tFVCAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIHRsZW4gPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggdGxlbiAgICAgICkgJiAweEZGICk7CisKKyAgICAqb2xlbiA9IDQ7CisKKyAgICBpZiggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dGlja2V0ID09IE5VTEwgfHwgdGxlbiA9PSAwICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlbmRpbmcgc2Vzc2lvbiB0aWNrZXQgb2YgbGVuZ3RoICVkIiwgdGxlbiApICk7CisKKyAgICBtZW1jcHkoIHAsIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnRpY2tldCwgdGxlbiApOworCisgICAgKm9sZW4gKz0gdGxlbjsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9hbHBuX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisgICAgc2l6ZV90IGFscG5sZW4gPSAwOworICAgIGNvbnN0IGNoYXIgKipjdXI7CisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBpZiggc3NsLT5jb25mLT5hbHBuX2xpc3QgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGFkZGluZyBhbHBuIGV4dGVuc2lvbiIgKSApOworCisgICAgZm9yKCBjdXIgPSBzc2wtPmNvbmYtPmFscG5fbGlzdDsgKmN1ciAhPSBOVUxMOyBjdXIrKyApCisgICAgICAgIGFscG5sZW4gKz0gKHVuc2lnbmVkIGNoYXIpKCBzdHJsZW4oICpjdXIgKSAmIDB4RkYgKSArIDE7CisKKyAgICBpZiggZW5kIDwgcCB8fCAoc2l6ZV90KSggZW5kIC0gcCApIDwgNiArIGFscG5sZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJidWZmZXIgdG9vIHNtYWxsIiApICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9BTFBOID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9BTFBOICAgICAgKSAmIDB4RkYgKTsKKworICAgIC8qCisgICAgICogb3BhcXVlIFByb3RvY29sTmFtZTwxLi4yXjgtMT47CisgICAgICoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICBQcm90b2NvbE5hbWUgcHJvdG9jb2xfbmFtZV9saXN0PDIuLjJeMTYtMT4KKyAgICAgKiB9IFByb3RvY29sTmFtZUxpc3Q7CisgICAgICovCisKKyAgICAvKiBTa2lwIHdyaXRpbmcgZXh0ZW5zaW9uIGFuZCBsaXN0IGxlbmd0aCBmb3Igbm93ICovCisgICAgcCArPSA0OworCisgICAgZm9yKCBjdXIgPSBzc2wtPmNvbmYtPmFscG5fbGlzdDsgKmN1ciAhPSBOVUxMOyBjdXIrKyApCisgICAgeworICAgICAgICAqcCA9ICh1bnNpZ25lZCBjaGFyKSggc3RybGVuKCAqY3VyICkgJiAweEZGICk7CisgICAgICAgIG1lbWNweSggcCArIDEsICpjdXIsICpwICk7CisgICAgICAgIHAgKz0gMSArICpwOworICAgIH0KKworICAgICpvbGVuID0gcCAtIGJ1ZjsKKworICAgIC8qIExpc3QgbGVuZ3RoID0gb2xlbiAtIDIgKGV4dF90eXBlKSAtIDIgKGV4dF9sZW4pIC0gMiAobGlzdF9sZW4pICovCisgICAgYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpKCAoICggKm9sZW4gLSA2ICkgPj4gOCApICYgMHhGRiApOworICAgIGJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSggKCAoICpvbGVuIC0gNiApICAgICAgKSAmIDB4RkYgKTsKKworICAgIC8qIEV4dGVuc2lvbiBsZW5ndGggPSBvbGVuIC0gMiAoZXh0X3R5cGUpIC0gMiAoZXh0X2xlbikgKi8KKyAgICBidWZbMl0gPSAodW5zaWduZWQgY2hhcikoICggKCAqb2xlbiAtIDQgKSA+PiA4ICkgJiAweEZGICk7CisgICAgYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpKCAoICggKm9sZW4gLSA0ICkgICAgICApICYgMHhGRiApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0FMUE4gKi8KKworLyoKKyAqIEdlbmVyYXRlIHJhbmRvbSBieXRlcyBmb3IgQ2xpZW50SGVsbG8KKyAqLworc3RhdGljIGludCBzc2xfZ2VuZXJhdGVfcmFuZG9tKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IHNzbC0+aGFuZHNoYWtlLT5yYW5kYnl0ZXM7CisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICBtYmVkdGxzX3RpbWVfdCB0OworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFdoZW4gcmVzcG9uZGluZyB0byBhIHZlcmlmeSByZXF1ZXN0LCBNVVNUIHJldXNlIHJhbmRvbSAoUkZDIDYzNDcgNC4yLjEpCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gJiYKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWUgIT0gTlVMTCApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgdCA9IG1iZWR0bHNfdGltZSggTlVMTCApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIHQgPj4gMjQgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCB0ID4+IDE2ICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggdCA+PiAgOCApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIHQgICAgICAgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBjdXJyZW50IHRpbWU6ICVsdSIsIHQgKSApOworI2Vsc2UKKyAgICBpZiggKCByZXQgPSBzc2wtPmNvbmYtPmZfcm5nKCBzc2wtPmNvbmYtPnBfcm5nLCBwLCA0ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHAgKz0gNDsKKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVfVElNRSAqLworCisgICAgaWYoICggcmV0ID0gc3NsLT5jb25mLT5mX3JuZyggc3NsLT5jb25mLT5wX3JuZywgcCwgMjggKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX2NsaWVudF9oZWxsbyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBpLCBuLCBvbGVuLCBleHRfbGVuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpidWY7CisgICAgdW5zaWduZWQgY2hhciAqcCwgKnE7CisgICAgdW5zaWduZWQgY2hhciBvZmZlcl9jb21wcmVzczsKKyAgICBjb25zdCBpbnQgKmNpcGhlcnN1aXRlczsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSBjbGllbnQgaGVsbG8iICkgKTsKKworICAgIGlmKCBzc2wtPmNvbmYtPmZfcm5nID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJubyBSTkcgcHJvdmlkZWQiKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9OT19STkcgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRSApCisjZW5kaWYKKyAgICB7CisgICAgICAgIHNzbC0+bWFqb3JfdmVyID0gc3NsLT5jb25mLT5taW5fbWFqb3JfdmVyOworICAgICAgICBzc2wtPm1pbm9yX3ZlciA9IHNzbC0+Y29uZi0+bWluX21pbm9yX3ZlcjsKKyAgICB9CisKKyAgICBpZiggc3NsLT5jb25mLT5tYXhfbWFqb3JfdmVyID09IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJjb25maWd1cmVkIG1heCBtYWpvciB2ZXJzaW9uIGlzIGludmFsaWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uc2lkZXIgdXNpbmcgbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCkiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICAgICAwICAuICAgMCAgIGhhbmRzaGFrZSB0eXBlCisgICAgICogICAgIDEgIC4gICAzICAgaGFuZHNoYWtlIGxlbmd0aAorICAgICAqICAgICA0ICAuICAgNSAgIGhpZ2hlc3QgdmVyc2lvbiBzdXBwb3J0ZWQKKyAgICAgKiAgICAgNiAgLiAgIDkgICBjdXJyZW50IFVOSVggdGltZQorICAgICAqICAgIDEwICAuICAzNyAgIHJhbmRvbSBieXRlcworICAgICAqLworICAgIGJ1ZiA9IHNzbC0+b3V0X21zZzsKKyAgICBwID0gYnVmICsgNDsKKworICAgIG1iZWR0bHNfc3NsX3dyaXRlX3ZlcnNpb24oIHNzbC0+Y29uZi0+bWF4X21ham9yX3Zlciwgc3NsLT5jb25mLT5tYXhfbWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPnRyYW5zcG9ydCwgcCApOworICAgIHAgKz0gMjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBtYXggdmVyc2lvbjogWyVkOiVkXSIsCisgICAgICAgICAgICAgICAgICAgYnVmWzRdLCBidWZbNV0gKSApOworCisgICAgaWYoICggcmV0ID0gc3NsX2dlbmVyYXRlX3JhbmRvbSggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF9nZW5lcmF0ZV9yYW5kb20iLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBtZW1jcHkoIHAsIHNzbC0+aGFuZHNoYWtlLT5yYW5kYnl0ZXMsIDMyICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2xpZW50IGhlbGxvLCByYW5kb20gYnl0ZXMiLCBwLCAzMiApOworICAgIHAgKz0gMzI7CisKKyAgICAvKgorICAgICAqICAgIDM4ICAuICAzOCAgIHNlc3Npb24gaWQgbGVuZ3RoCisgICAgICogICAgMzkgIC4gMzkrbiAgc2Vzc2lvbiBpZAorICAgICAqICAgMzkrbiAuIDM5K24gIERUTFMgb25seTogY29va2llIGxlbmd0aCAoMSBieXRlKQorICAgICAqICAgNDArbiAuICAuLiAgIERUU0wgb25seTogY29va2llCisgICAgICogICAuLiAgIC4gLi4gICAgY2lwaGVyc3VpdGVsaXN0IGxlbmd0aCAoMiBieXRlcykKKyAgICAgKiAgIC4uICAgLiAuLiAgICBjaXBoZXJzdWl0ZWxpc3QKKyAgICAgKiAgIC4uICAgLiAuLiAgICBjb21wcmVzc2lvbiBtZXRob2RzIGxlbmd0aCAoMSBieXRlKQorICAgICAqICAgLi4gICAuIC4uICAgIGNvbXByZXNzaW9uIG1ldGhvZHMKKyAgICAgKiAgIC4uICAgLiAuLiAgICBleHRlbnNpb25zIGxlbmd0aCAoMiBieXRlcykKKyAgICAgKiAgIC4uICAgLiAuLiAgICBleHRlbnNpb25zCisgICAgICovCisgICAgbiA9IHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbjsKKworICAgIGlmKCBuIDwgMTYgfHwgbiA+IDMyIHx8CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgICAgICBzc2wtPnJlbmVnb19zdGF0dXMgIT0gTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UgfHwKKyNlbmRpZgorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmVzdW1lID09IDAgKQorICAgIHsKKyAgICAgICAgbiA9IDA7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgLyoKKyAgICAgKiBSRkMgNTA3NyBzZWN0aW9uIDMuNDogIldoZW4gcHJlc2VudGluZyBhIHRpY2tldCwgdGhlIGNsaWVudCBNQVkKKyAgICAgKiBnZW5lcmF0ZSBhbmQgaW5jbHVkZSBhIFNlc3Npb24gSUQgaW4gdGhlIFRMUyBDbGllbnRIZWxsby4iCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UgKQorI2VuZGlmCisgICAgeworICAgICAgICBpZiggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dGlja2V0ICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT50aWNrZXRfbGVuICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBzc2wtPmNvbmYtPmZfcm5nKCBzc2wtPmNvbmYtPnBfcm5nLCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCwgMzIgKTsKKworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW4gPSBuID0gMzI7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICovCisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpIG47CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgbjsgaSsrICkKKyAgICAgICAgKnArKyA9IHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkW2ldOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIHNlc3Npb24gaWQgbGVuLjogJWQiLCBuICkgKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICAgImNsaWVudCBoZWxsbywgc2Vzc2lvbiBpZCIsIGJ1ZiArIDM5LCBuICk7CisKKyAgICAvKgorICAgICAqIERUTFMgY29va2llCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT52ZXJpZnlfY29va2llID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggIm5vIHZlcmlmeSBjb29raWUgdG8gc2VuZCIgKSApOworICAgICAgICAgICAgKnArKyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjbGllbnQgaGVsbG8sIGNvb2tpZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT52ZXJpZnlfY29va2llX2xlbiApOworCisgICAgICAgICAgICAqcCsrID0gc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWVfbGVuOworICAgICAgICAgICAgbWVtY3B5KCBwLCBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWVfbGVuICk7CisgICAgICAgICAgICBwICs9IHNzbC0+aGFuZHNoYWtlLT52ZXJpZnlfY29va2llX2xlbjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBDaXBoZXJzdWl0ZSBsaXN0CisgICAgICovCisgICAgY2lwaGVyc3VpdGVzID0gc3NsLT5jb25mLT5jaXBoZXJzdWl0ZV9saXN0W3NzbC0+bWlub3JfdmVyXTsKKworICAgIC8qIFNraXAgd3JpdGluZyBjaXBoZXJzdWl0ZSBsZW5ndGggZm9yIG5vdyAqLworICAgIG4gPSAwOworICAgIHEgPSBwOworICAgIHAgKz0gMjsKKworICAgIGZvciggaSA9IDA7IGNpcGhlcnN1aXRlc1tpXSAhPSAwOyBpKysgKQorICAgIHsKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mbyA9IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQoIGNpcGhlcnN1aXRlc1tpXSApOworCisgICAgICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvID09IE5VTEwgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPm1pbl9taW5vcl92ZXIgPiBzc2wtPmNvbmYtPm1heF9taW5vcl92ZXIgfHwKKyAgICAgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPm1heF9taW5vcl92ZXIgPCBzc2wtPmNvbmYtPm1pbl9taW5vcl92ZXIgKQorICAgICAgICAgICAgY29udGludWU7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gJiYKKyAgICAgICAgICAgICggY2lwaGVyc3VpdGVfaW5mby0+ZmxhZ3MgJiBNQkVEVExTX0NJUEhFUlNVSVRFX05PRFRMUyApICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorICAgICAgICBpZiggc3NsLT5jb25mLT5hcmM0X2Rpc2FibGVkID09IE1CRURUTFNfU1NMX0FSQzRfRElTQUJMRUQgJiYKKyAgICAgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmNpcGhlciA9PSBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCApCisgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSAmJgorICAgICAgICAgICAgbWJlZHRsc19lY2pwYWtlX2NoZWNrKCAmc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY3R4ICkgIT0gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBhZGQgY2lwaGVyc3VpdGU6ICUwNHgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyc3VpdGVzW2ldICkgKTsKKworICAgICAgICBuKys7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIGNpcGhlcnN1aXRlc1tpXSA+PiA4ICk7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIGNpcGhlcnN1aXRlc1tpXSAgICAgICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBBZGQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GT19TQ1NWCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UgKQorI2VuZGlmCisgICAgeworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBNQkVEVExTX1NTTF9FTVBUWV9SRU5FR09USUFUSU9OX0lORk8gPj4gOCApOworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBNQkVEVExTX1NTTF9FTVBUWV9SRU5FR09USUFUSU9OX0lORk8gICAgICApOworICAgICAgICBuKys7CisgICAgfQorCisgICAgLyogU29tZSB2ZXJzaW9ucyBvZiBPcGVuU1NMIGRvbid0IGhhbmRsZSBpdCBjb3JyZWN0bHkgaWYgbm90IGF0IGVuZCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVikKKyAgICBpZiggc3NsLT5jb25mLT5mYWxsYmFjayA9PSBNQkVEVExTX1NTTF9JU19GQUxMQkFDSyApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImFkZGluZyBGQUxMQkFDS19TQ1NWIiApICk7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1ZfVkFMVUUgPj4gOCApOworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWX1ZBTFVFICAgICAgKTsKKyAgICAgICAgbisrOworICAgIH0KKyNlbmRpZgorCisgICAgKnErKyA9ICh1bnNpZ25lZCBjaGFyKSggbiA+PiA3ICk7CisgICAgKnErKyA9ICh1bnNpZ25lZCBjaGFyKSggbiA8PCAxICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgZ290ICVkIGNpcGhlcnN1aXRlcyIsIG4gKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1pMSUJfU1VQUE9SVCkKKyAgICBvZmZlcl9jb21wcmVzcyA9IDE7CisjZWxzZQorICAgIG9mZmVyX2NvbXByZXNzID0gMDsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBXZSBkb24ndCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggRFRMUyByaWdodCBub3c6IGlzIG1hbnkgcmVjb3JkcyBjb21lCisgICAgICogaW4gdGhlIHNhbWUgZGF0YWdyYW0sIHVuY29tcHJlc3Npbmcgb25lIGNvdWxkIG92ZXJ3cml0ZSB0aGUgbmV4dCBvbmUuCisgICAgICogV2UgZG9uJ3Qgd2FudCB0byBhZGQgY29tcGxleGl0eSBmb3IgaGFuZGxpbmcgdGhhdCBjYXNlIHVubGVzcyB0aGVyZSBpcworICAgICAqIGFuIGFjdHVhbCBuZWVkIGZvciBpdC4KKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgIG9mZmVyX2NvbXByZXNzID0gMDsKKyNlbmRpZgorCisgICAgaWYoIG9mZmVyX2NvbXByZXNzICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBjb21wcmVzcyBsZW4uOiAlZCIsIDIgKSApOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgY29tcHJlc3MgYWxnLjogJWQgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0NPTVBSRVNTX0RFRkxBVEUsIE1CRURUTFNfU1NMX0NPTVBSRVNTX05VTEwgKSApOworCisgICAgICAgICpwKysgPSAyOworICAgICAgICAqcCsrID0gTUJFRFRMU19TU0xfQ09NUFJFU1NfREVGTEFURTsKKyAgICAgICAgKnArKyA9IE1CRURUTFNfU1NMX0NPTVBSRVNTX05VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBjb21wcmVzcyBsZW4uOiAlZCIsIDEgKSApOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgY29tcHJlc3MgYWxnLjogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0NPTVBSRVNTX05VTEwgKSApOworCisgICAgICAgICpwKysgPSAxOworICAgICAgICAqcCsrID0gTUJFRFRMU19TU0xfQ09NUFJFU1NfTlVMTDsKKyAgICB9CisKKyAgICAvLyBGaXJzdCB3cml0ZSBleHRlbnNpb25zLCB0aGVuIHRoZSB0b3RhbCBsZW5ndGgKKyAgICAvLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTikKKyAgICBzc2xfd3JpdGVfaG9zdG5hbWVfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBzc2xfd3JpdGVfcmVuZWdvdGlhdGlvbl9leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQpCisgICAgc3NsX3dyaXRlX3NpZ25hdHVyZV9hbGdvcml0aG1zX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIHNzbF93cml0ZV9zdXBwb3J0ZWRfZWxsaXB0aWNfY3VydmVzX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworCisgICAgc3NsX3dyaXRlX3N1cHBvcnRlZF9wb2ludF9mb3JtYXRzX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICBzc2xfd3JpdGVfZWNqcGFrZV9ra3BwX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisgICAgc3NsX3dyaXRlX21heF9mcmFnbWVudF9sZW5ndGhfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCisgICAgc3NsX3dyaXRlX3RydW5jYXRlZF9obWFjX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgc3NsX3dyaXRlX2VuY3J5cHRfdGhlbl9tYWNfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCkKKyAgICBzc2xfd3JpdGVfZXh0ZW5kZWRfbXNfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICBzc2xfd3JpdGVfYWxwbl9leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgc3NsX3dyaXRlX3Nlc3Npb25fdGlja2V0X2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyAgICAvKiBvbGVuIHVudXNlZCBpZiBhbGwgZXh0ZW5zaW9ucyBhcmUgZGlzYWJsZWQgKi8KKyAgICAoKHZvaWQpIG9sZW4pOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIHRvdGFsIGV4dGVuc2lvbiBsZW5ndGg6ICVkIiwKKyAgICAgICAgICAgICAgICAgICBleHRfbGVuICkgKTsKKworICAgIGlmKCBleHRfbGVuID4gMCApCisgICAgeworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIGV4dF9sZW4gPj4gOCApICYgMHhGRiApOworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIGV4dF9sZW4gICAgICApICYgMHhGRiApOworICAgICAgICBwICs9IGV4dF9sZW47CisgICAgfQorCisgICAgc3NsLT5vdXRfbXNnbGVuICA9IHAgLSBidWY7CisgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U7CisgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0hTX0NMSUVOVF9IRUxMTzsKKworICAgIHNzbC0+c3RhdGUrKzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9mbGlnaHRfY29tcGxldGVkKCBzc2wgKTsKKyNlbmRpZgorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSBjbGllbnQgaGVsbG8iICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHNzbF9wYXJzZV9yZW5lZ290aWF0aW9uX2luZm8oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgIT0gTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgLyogQ2hlY2sgdmVyaWZ5LWRhdGEgaW4gY29uc3RhbnQtdGltZS4gVGhlIGxlbmd0aCBPVE9IIGlzIG5vIHNlY3JldCAqLworICAgICAgICBpZiggbGVuICAgICE9IDEgKyBzc2wtPnZlcmlmeV9kYXRhX2xlbiAqIDIgfHwKKyAgICAgICAgICAgIGJ1ZlswXSAhPSAgICAgc3NsLT52ZXJpZnlfZGF0YV9sZW4gKiAyIHx8CisgICAgICAgICAgICBtYmVkdGxzX3NzbF9zYWZlcl9tZW1jbXAoIGJ1ZiArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3duX3ZlcmlmeV9kYXRhLCBzc2wtPnZlcmlmeV9kYXRhX2xlbiApICE9IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NhZmVyX21lbWNtcCggYnVmICsgMSArIHNzbC0+dmVyaWZ5X2RhdGFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnBlZXJfdmVyaWZ5X2RhdGEsIHNzbC0+dmVyaWZ5X2RhdGFfbGVuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibm9uLW1hdGNoaW5nIHJlbmVnb3RpYXRpb24gaW5mbyIgKSApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworICAgIHsKKyAgICAgICAgaWYoIGxlbiAhPSAxIHx8IGJ1ZlswXSAhPSAweDAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJub24temVybyBsZW5ndGggcmVuZWdvdGlhdGlvbiBpbmZvIiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgICAgICB9CisKKyAgICAgICAgc3NsLT5zZWN1cmVfcmVuZWdvdGlhdGlvbiA9IE1CRURUTFNfU1NMX1NFQ1VSRV9SRU5FR09USUFUSU9OOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorc3RhdGljIGludCBzc2xfcGFyc2VfbWF4X2ZyYWdtZW50X2xlbmd0aF9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgLyoKKyAgICAgKiBzZXJ2ZXIgc2hvdWxkIHVzZSB0aGUgZXh0ZW5zaW9uIG9ubHkgaWYgd2UgZGlkLAorICAgICAqIGFuZCBpZiBzbyB0aGUgc2VydmVyJ3MgdmFsdWUgc2hvdWxkIG1hdGNoIG91cnMgKGFuZCBsZW4gaXMgYWx3YXlzIDEpCisgICAgICovCisgICAgaWYoIHNzbC0+Y29uZi0+bWZsX2NvZGUgPT0gTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOX05PTkUgfHwKKyAgICAgICAgbGVuICE9IDEgfHwKKyAgICAgICAgYnVmWzBdICE9IHNzbC0+Y29uZi0+bWZsX2NvZGUgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEggKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCitzdGF0aWMgaW50IHNzbF9wYXJzZV90cnVuY2F0ZWRfaG1hY19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpZiggc3NsLT5jb25mLT50cnVuY19obWFjID09IE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRElTQUJMRUQgfHwKKyAgICAgICAgbGVuICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgIH0KKworICAgICgodm9pZCkgYnVmKTsKKworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnRydW5jX2htYWMgPSBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0VOQUJMRUQ7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorc3RhdGljIGludCBzc2xfcGFyc2VfZW5jcnlwdF90aGVuX21hY19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpZiggc3NsLT5jb25mLT5lbmNyeXB0X3RoZW5fbWFjID09IE1CRURUTFNfU1NMX0VUTV9ESVNBQkxFRCB8fAorICAgICAgICBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgfHwKKyAgICAgICAgbGVuICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgIH0KKworICAgICgodm9pZCkgYnVmKTsKKworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmVuY3J5cHRfdGhlbl9tYWMgPSBNQkVEVExTX1NTTF9FVE1fRU5BQkxFRDsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX2V4dGVuZGVkX21zX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGlmKCBzc2wtPmNvbmYtPmV4dGVuZGVkX21zID09IE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0RJU0FCTEVEIHx8CisgICAgICAgIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCB8fAorICAgICAgICBsZW4gIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgfQorCisgICAgKCh2b2lkKSBidWYpOworCisgICAgc3NsLT5oYW5kc2hha2UtPmV4dGVuZGVkX21zID0gTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRU5BQkxFRDsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorc3RhdGljIGludCBzc2xfcGFyc2Vfc2Vzc2lvbl90aWNrZXRfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaWYoIHNzbC0+Y29uZi0+c2Vzc2lvbl90aWNrZXRzID09IE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19ESVNBQkxFRCB8fAorICAgICAgICBsZW4gIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgfQorCisgICAgKCh2b2lkKSBidWYpOworCisgICAgc3NsLT5oYW5kc2hha2UtPm5ld19zZXNzaW9uX3RpY2tldCA9IDE7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9zdXBwb3J0ZWRfcG9pbnRfZm9ybWF0c19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBzaXplX3QgbGlzdF9zaXplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgICBsaXN0X3NpemUgPSBidWZbMF07CisgICAgaWYoIGxpc3Rfc2l6ZSArIDEgIT0gbGVuICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICB9CisKKyAgICBwID0gYnVmICsgMTsKKyAgICB3aGlsZSggbGlzdF9zaXplID4gMCApCisgICAgeworICAgICAgICBpZiggcFswXSA9PSBNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQgfHwKKyAgICAgICAgICAgIHBbMF0gPT0gTUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRCApCisgICAgICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eC5wb2ludF9mb3JtYXQgPSBwWzBdOworI2VuZGlmICAgICAgICAgICAgCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHgucG9pbnRfZm9ybWF0ID0gcFswXTsKKyNlbmRpZgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCA0LCAoICJwb2ludCBmb3JtYXQgc2VsZWN0ZWQ6ICVkIiwgcFswXSApICk7CisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgfQorCisgICAgICAgIGxpc3Rfc2l6ZS0tOworICAgICAgICBwKys7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJubyBwb2ludCBmb3JtYXQgaW4gY29tbW9uIiApICk7CisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DIHx8IE1CRURUTFNfRUNEU0FfQyB8fCAKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcGFyc2VfZWNqcGFrZV9ra3BwKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSAhPQorICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2tpcCBlY2pwYWtlIGtrcHAgZXh0ZW5zaW9uIiApICk7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIC8qIElmIHdlIGdvdCBoZXJlLCB3ZSBubyBsb25nZXIgbmVlZCBvdXIgY2FjaGVkIGV4dGVuc2lvbiAqLworICAgIG1iZWR0bHNfZnJlZSggc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY2FjaGUgKTsKKyAgICBzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jYWNoZSA9IE5VTEw7CisgICAgc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY2FjaGVfbGVuID0gMDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX29uZSggJnNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX29uZSIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorc3RhdGljIGludCBzc2xfcGFyc2VfYWxwbl9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIHNpemVfdCBsaXN0X2xlbiwgbmFtZV9sZW47CisgICAgY29uc3QgY2hhciAqKnA7CisKKyAgICAvKiBJZiB3ZSBkaWRuJ3Qgc2VuZCBpdCwgdGhlIHNlcnZlciBzaG91bGRuJ3Qgc2VuZCBpdCAqLworICAgIGlmKCBzc2wtPmNvbmYtPmFscG5fbGlzdCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworCisgICAgLyoKKyAgICAgKiBvcGFxdWUgUHJvdG9jb2xOYW1lPDEuLjJeOC0xPjsKKyAgICAgKgorICAgICAqIHN0cnVjdCB7CisgICAgICogICAgIFByb3RvY29sTmFtZSBwcm90b2NvbF9uYW1lX2xpc3Q8Mi4uMl4xNi0xPgorICAgICAqIH0gUHJvdG9jb2xOYW1lTGlzdDsKKyAgICAgKgorICAgICAqIHRoZSAiUHJvdG9jb2xOYW1lTGlzdCIgTVVTVCBjb250YWluIGV4YWN0bHkgb25lICJQcm90b2NvbE5hbWUiCisgICAgICovCisKKyAgICAvKiBNaW4gbGVuZ3RoIGlzIDIgKGxpc3RfbGVuKSArIDEgKG5hbWVfbGVuKSArIDEgKG5hbWUpICovCisgICAgaWYoIGxlbiA8IDQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisKKyAgICBsaXN0X2xlbiA9ICggYnVmWzBdIDw8IDggKSB8IGJ1ZlsxXTsKKyAgICBpZiggbGlzdF9sZW4gIT0gbGVuIC0gMiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKworICAgIG5hbWVfbGVuID0gYnVmWzJdOworICAgIGlmKCBuYW1lX2xlbiAhPSBsaXN0X2xlbiAtIDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisKKyAgICAvKiBDaGVjayB0aGF0IHRoZSBzZXJ2ZXIgY2hvc2VuIHByb3RvY29sIHdhcyBpbiBvdXIgbGlzdCBhbmQgc2F2ZSBpdCAqLworICAgIGZvciggcCA9IHNzbC0+Y29uZi0+YWxwbl9saXN0OyAqcCAhPSBOVUxMOyBwKysgKQorICAgIHsKKyAgICAgICAgaWYoIG5hbWVfbGVuID09IHN0cmxlbiggKnAgKSAmJgorICAgICAgICAgICAgbWVtY21wKCBidWYgKyAzLCAqcCwgbmFtZV9sZW4gKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3NsLT5hbHBuX2Nob3NlbiA9ICpwOworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQUxQTiAqLworCisvKgorICogUGFyc2UgSGVsbG9WZXJpZnlSZXF1ZXN0LiAgT25seSBjYWxsZWQgYWZ0ZXIgdmVyaWZ5aW5nIHRoZSBIUyB0eXBlLgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorc3RhdGljIGludCBzc2xfcGFyc2VfaGVsbG9fdmVyaWZ5X3JlcXVlc3QoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHNzbC0+aW5fbXNnICsgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICk7CisgICAgaW50IG1ham9yX3ZlciwgbWlub3JfdmVyOworICAgIHVuc2lnbmVkIGNoYXIgY29va2llX2xlbjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gcGFyc2UgaGVsbG8gdmVyaWZ5IHJlcXVlc3QiICkgKTsKKworICAgIC8qCisgICAgICogc3RydWN0IHsKKyAgICAgKiAgIFByb3RvY29sVmVyc2lvbiBzZXJ2ZXJfdmVyc2lvbjsKKyAgICAgKiAgIG9wYXF1ZSBjb29raWU8MC4uMl44LTE+OworICAgICAqIH0gSGVsbG9WZXJpZnlSZXF1ZXN0OworICAgICAqLworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInNlcnZlciB2ZXJzaW9uIiwgcCwgMiApOworICAgIG1iZWR0bHNfc3NsX3JlYWRfdmVyc2lvbiggJm1ham9yX3ZlciwgJm1pbm9yX3Zlciwgc3NsLT5jb25mLT50cmFuc3BvcnQsIHAgKTsKKyAgICBwICs9IDI7CisKKyAgICAvKgorICAgICAqIFNpbmNlIHRoZSBSRkMgaXMgbm90IGNsZWFyIG9uIHRoaXMgcG9pbnQsIGFjY2VwdCBEVExTIDEuMCAoVExTIDEuMSkKKyAgICAgKiBldmVuIGlzIGxvd2VyIHRoYW4gb3VyIG1pbiB2ZXJzaW9uLgorICAgICAqLworICAgIGlmKCBtYWpvcl92ZXIgPCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMgfHwKKyAgICAgICAgbWlub3JfdmVyIDwgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yIHx8CisgICAgICAgIG1ham9yX3ZlciA+IHNzbC0+Y29uZi0+bWF4X21ham9yX3ZlciAgfHwKKyAgICAgICAgbWlub3JfdmVyID4gc3NsLT5jb25mLT5tYXhfbWlub3JfdmVyICApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIgdmVyc2lvbiIgKSApOworCisgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfUFJPVE9DT0xfVkVSU0lPTiApOworCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19QUk9UT0NPTF9WRVJTSU9OICk7CisgICAgfQorCisgICAgY29va2llX2xlbiA9ICpwKys7CisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY29va2llIiwgcCwgY29va2llX2xlbiApOworCisgICAgaWYoICggc3NsLT5pbl9tc2cgKyBzc2wtPmluX21zZ2xlbiApIC0gcCA8IGNvb2tpZV9sZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLAorICAgICAgICAgICAgKCAiY29va2llIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBpbmNvbWluZyBtZXNzYWdlIHNpemUiICkgKTsKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBzc2wsIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ09ERV9FUlJPUiApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgfQorCisgICAgbWJlZHRsc19mcmVlKCBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZSApOworCisgICAgc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWUgPSBtYmVkdGxzX2NhbGxvYyggMSwgY29va2llX2xlbiApOworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZSAgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImFsbG9jIGZhaWxlZCAoJWQgYnl0ZXMpIiwgY29va2llX2xlbiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworICAgIG1lbWNweSggc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWUsIHAsIGNvb2tpZV9sZW4gKTsKKyAgICBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZV9sZW4gPSBjb29raWVfbGVuOworCisgICAgLyogU3RhcnQgb3ZlciBhdCBDbGllbnRIZWxsbyAqLworICAgIHNzbC0+c3RhdGUgPSBNQkVEVExTX1NTTF9DTElFTlRfSEVMTE87CisgICAgbWJlZHRsc19zc2xfcmVzZXRfY2hlY2tzdW0oIHNzbCApOworCisgICAgbWJlZHRsc19zc2xfcmVjdl9mbGlnaHRfY29tcGxldGVkKCBzc2wgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gcGFyc2UgaGVsbG8gdmVyaWZ5IHJlcXVlc3QiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworc3RhdGljIGludCBzc2xfcGFyc2Vfc2VydmVyX2hlbGxvKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQsIGk7CisgICAgc2l6ZV90IG47CisgICAgc2l6ZV90IGV4dF9sZW47CisgICAgdW5zaWduZWQgY2hhciAqYnVmLCAqZXh0OworICAgIHVuc2lnbmVkIGNoYXIgY29tcDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgIGludCBhY2NlcHRfY29tcDsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBpbnQgcmVuZWdvdGlhdGlvbl9pbmZvX3NlZW4gPSAwOworI2VuZGlmCisgICAgaW50IGhhbmRzaGFrZV9mYWlsdXJlID0gMDsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpzdWl0ZV9pbmZvOworI2lmIGRlZmluZWQoTUJFRFRMU19ERUJVR19DKQorICAgIHVpbnQzMl90IHQ7CisjZW5kaWYKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gcGFyc2Ugc2VydmVyIGhlbGxvIiApICk7CisKKyAgICBidWYgPSBzc2wtPmluX21zZzsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgICAgIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9JTl9QUk9HUkVTUyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzbC0+cmVuZWdvX3JlY29yZHNfc2VlbisrOworCisgICAgICAgICAgICBpZiggc3NsLT5jb25mLT5yZW5lZ29fbWF4X3JlY29yZHMgPj0gMCAmJgorICAgICAgICAgICAgICAgIHNzbC0+cmVuZWdvX3JlY29yZHNfc2VlbiA+IHNzbC0+Y29uZi0+cmVuZWdvX21heF9yZWNvcmRzICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlbmVnb3RpYXRpb24gcmVxdWVzdGVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IG5vdCBob25vcmVkIGJ5IHNlcnZlciIgKSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm5vbi1oYW5kc2hha2UgbWVzc2FnZSBkdXJpbmcgcmVuZWdvIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQUlUSU5HX1NFUlZFUl9IRUxMT19SRU5FR08gKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICBpZiggYnVmWzBdID09IE1CRURUTFNfU1NMX0hTX0hFTExPX1ZFUklGWV9SRVFVRVNUICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJyZWNlaXZlZCBoZWxsbyB2ZXJpZnkgcmVxdWVzdCIgKSApOworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBwYXJzZSBzZXJ2ZXIgaGVsbG8iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggc3NsX3BhcnNlX2hlbGxvX3ZlcmlmeV9yZXF1ZXN0KCBzc2wgKSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogV2UgbWFkZSBpdCB0aHJvdWdoIHRoZSB2ZXJpZmljYXRpb24gcHJvY2VzcyAqLworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZSApOworICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWUgPSBOVUxMOworICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWVfbGVuID0gMDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19EVExTICovCisKKyAgICBpZiggc3NsLT5pbl9oc2xlbiA8IDM4ICsgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgfHwKKyAgICAgICAgYnVmWzBdICE9IE1CRURUTFNfU1NMX0hTX1NFUlZFUl9IRUxMTyApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgMCAgIC4gIDEgICAgc2VydmVyX3ZlcnNpb24KKyAgICAgKiAgMiAgIC4gMzMgICAgcmFuZG9tIChtYXliZSBpbmNsdWRpbmcgNCBieXRlcyBvZiBVbml4IHRpbWUpCisgICAgICogMzQgICAuIDM0ICAgIHNlc3Npb25faWQgbGVuZ3RoID0gbgorICAgICAqIDM1ICAgLiAzNCtuICBzZXNzaW9uX2lkCisgICAgICogMzUrbiAuIDM2K24gIGNpcGhlcl9zdWl0ZQorICAgICAqIDM3K24gLiAzNytuICBjb21wcmVzc2lvbl9tZXRob2QKKyAgICAgKgorICAgICAqIDM4K24gLiAzOStuICBleHRlbnNpb25zIGxlbmd0aCAob3B0aW9uYWwpCisgICAgICogNDArbiAuICAuLiAgIGV4dGVuc2lvbnMKKyAgICAgKi8KKyAgICBidWYgKz0gbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJzZXJ2ZXIgaGVsbG8sIHZlcnNpb24iLCBidWYgKyAwLCAyICk7CisgICAgbWJlZHRsc19zc2xfcmVhZF92ZXJzaW9uKCAmc3NsLT5tYWpvcl92ZXIsICZzc2wtPm1pbm9yX3ZlciwKKyAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPnRyYW5zcG9ydCwgYnVmICsgMCApOworCisgICAgaWYoIHNzbC0+bWFqb3JfdmVyIDwgc3NsLT5jb25mLT5taW5fbWFqb3JfdmVyIHx8CisgICAgICAgIHNzbC0+bWlub3JfdmVyIDwgc3NsLT5jb25mLT5taW5fbWlub3JfdmVyIHx8CisgICAgICAgIHNzbC0+bWFqb3JfdmVyID4gc3NsLT5jb25mLT5tYXhfbWFqb3JfdmVyIHx8CisgICAgICAgIHNzbC0+bWlub3JfdmVyID4gc3NsLT5jb25mLT5tYXhfbWlub3JfdmVyICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2VydmVyIHZlcnNpb24gb3V0IG9mIGJvdW5kcyAtICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG1pbjogWyVkOiVkXSwgc2VydmVyOiBbJWQ6JWRdLCBtYXg6IFslZDolZF0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+bWluX21ham9yX3Zlciwgc3NsLT5jb25mLT5taW5fbWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+bWFqb3JfdmVyLCBzc2wtPm1pbm9yX3ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPm1heF9tYWpvcl92ZXIsIHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlciApICk7CisKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBzc2wsIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19QUk9UT0NPTF9WRVJTSU9OICk7CisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1BST1RPQ09MX1ZFUlNJT04gKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVCVUdfQykKKyAgICB0ID0gKCAodWludDMyX3QpIGJ1ZlsyXSA8PCAyNCApCisgICAgICB8ICggKHVpbnQzMl90KSBidWZbM10gPDwgMTYgKQorICAgICAgfCAoICh1aW50MzJfdCkgYnVmWzRdIDw8ICA4ICkKKyAgICAgIHwgKCAodWludDMyX3QpIGJ1Zls1XSAgICAgICApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBjdXJyZW50IHRpbWU6ICVsdSIsIHQgKSApOworI2VuZGlmCisKKyAgICBtZW1jcHkoIHNzbC0+aGFuZHNoYWtlLT5yYW5kYnl0ZXMgKyAzMiwgYnVmICsgMiwgMzIgKTsKKworICAgIG4gPSBidWZbMzRdOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAgICJzZXJ2ZXIgaGVsbG8sIHJhbmRvbSBieXRlcyIsIGJ1ZiArIDIsIDMyICk7CisKKyAgICBpZiggbiA+IDMyICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9oc2xlbiA+IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICsgMzkgKyBuICkKKyAgICB7CisgICAgICAgIGV4dF9sZW4gPSAoICggYnVmWzM4ICsgbl0gPDwgIDggKQorICAgICAgICAgICAgICAgICAgfCAoIGJ1ZlszOSArIG5dICAgICAgICkgKTsKKworICAgICAgICBpZiggKCBleHRfbGVuID4gMCAmJiBleHRfbGVuIDwgNCApIHx8CisgICAgICAgICAgICBzc2wtPmluX2hzbGVuICE9IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICsgNDAgKyBuICsgZXh0X2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiggc3NsLT5pbl9oc2xlbiA9PSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSArIDM4ICsgbiApCisgICAgeworICAgICAgICBleHRfbGVuID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgIH0KKworICAgIC8qIGNpcGhlcnN1aXRlICh1c2VkIGxhdGVyKSAqLworICAgIGkgPSAoIGJ1ZlszNSArIG5dIDw8IDggKSB8IGJ1ZlszNiArIG5dOworCisgICAgLyoKKyAgICAgKiBSZWFkIGFuZCBjaGVjayBjb21wcmVzc2lvbgorICAgICAqLworICAgIGNvbXAgPSBidWZbMzcgKyBuXTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19aTElCX1NVUFBPUlQpCisgICAgLyogU2VlIGNvbW1lbnRzIGluIHNzbF93cml0ZV9jbGllbnRfaGVsbG8oKSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgYWNjZXB0X2NvbXAgPSAwOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBhY2NlcHRfY29tcCA9IDE7CisKKyAgICBpZiggY29tcCAhPSBNQkVEVExTX1NTTF9DT01QUkVTU19OVUxMICYmCisgICAgICAgICggY29tcCAhPSBNQkVEVExTX1NTTF9DT01QUkVTU19ERUZMQVRFIHx8IGFjY2VwdF9jb21wID09IDAgKSApCisjZWxzZSAvKiBNQkVEVExTX1pMSUJfU1VQUE9SVCAqLworICAgIGlmKCBjb21wICE9IE1CRURUTFNfU1NMX0NPTVBSRVNTX05VTEwgKQorI2VuZGlmLyogTUJFRFRMU19aTElCX1NVUFBPUlQgKi8KKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2VydmVyIGhlbGxvLCBiYWQgY29tcHJlc3Npb246ICVkIiwgY29tcCApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpemUgdXBkYXRlIGNoZWNrc3VtIGZ1bmN0aW9ucworICAgICAqLworICAgIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbyA9IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQoIGkgKTsKKworICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm8gPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImNpcGhlcnN1aXRlIGluZm8gZm9yICUwNHggbm90IGZvdW5kIiwgaSApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfb3B0aW1pemVfY2hlY2tzdW0oIHNzbCwgc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgc2Vzc2lvbiBpZCBsZW4uOiAlZCIsIG4gKSApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgICAic2VydmVyIGhlbGxvLCBzZXNzaW9uIGlkIiwgYnVmICsgMzUsIG4gKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlIHNlc3Npb24gY2FuIGJlIHJlc3VtZWQKKyAgICAgKi8KKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPnJlc3VtZSA9PSAwIHx8IG4gPT0gMCB8fAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgc3NsLT5yZW5lZ29fc3RhdHVzICE9IE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFIHx8CisjZW5kaWYKKyAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGUgIT0gaSB8fAorICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jb21wcmVzc2lvbiAhPSBjb21wIHx8CisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbiAhPSBuIHx8CisgICAgICAgIG1lbWNtcCggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWQsIGJ1ZiArIDM1LCBuICkgIT0gMCApCisgICAgeworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXN1bWUgPSAwOworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnN0YXJ0ID0gbWJlZHRsc190aW1lKCBOVUxMICk7CisjZW5kaWYKKyAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGUgPSBpOworICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jb21wcmVzc2lvbiA9IGNvbXA7CisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbiA9IG47CisgICAgICAgIG1lbWNweSggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWQsIGJ1ZiArIDM1LCBuICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNzbC0+c3RhdGUgPSBNQkVEVExTX1NTTF9TRVJWRVJfQ0hBTkdFX0NJUEhFUl9TUEVDOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2Rlcml2ZV9rZXlzKCBzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9kZXJpdmVfa2V5cyIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiJXMgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmVzdW1lID8gImEiIDogIm5vIiApICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgY2hvc2VuIGNpcGhlcnN1aXRlOiAlMDR4IiwgaSApICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzZXJ2ZXIgaGVsbG8sIGNvbXByZXNzIGFsZy46ICVkIiwgYnVmWzM3ICsgbl0gKSApOworCisgICAgc3VpdGVfaW5mbyA9IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlICk7CisgICAgaWYoIHN1aXRlX2luZm8gPT0gTlVMTAorI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisgICAgICAgICAgICB8fCAoIHNzbC0+Y29uZi0+YXJjNF9kaXNhYmxlZCAmJgorICAgICAgICAgICAgICAgIHN1aXRlX2luZm8tPmNpcGhlciA9PSBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCApCisjZW5kaWYKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBjaG9zZW4gY2lwaGVyc3VpdGU6ICVzIiwgc3VpdGVfaW5mby0+bmFtZSApICk7CisKKyAgICBpID0gMDsKKyAgICB3aGlsZSggMSApCisgICAgeworICAgICAgICBpZiggc3NsLT5jb25mLT5jaXBoZXJzdWl0ZV9saXN0W3NzbC0+bWlub3JfdmVyXVtpXSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBzc2wtPmNvbmYtPmNpcGhlcnN1aXRlX2xpc3Rbc3NsLT5taW5vcl92ZXJdW2krK10gPT0KKyAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlICkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggY29tcCAhPSBNQkVEVExTX1NTTF9DT01QUkVTU19OVUxMCisjaWYgZGVmaW5lZChNQkVEVExTX1pMSUJfU1VQUE9SVCkKKyAgICAgICAgJiYgY29tcCAhPSBNQkVEVExTX1NTTF9DT01QUkVTU19ERUZMQVRFCisjZW5kaWYKKyAgICAgICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICB9CisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+Y29tcHJlc3Npb24gPSBjb21wOworCisgICAgZXh0ID0gYnVmICsgNDAgKyBuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJzZXJ2ZXIgaGVsbG8sIHRvdGFsIGV4dGVuc2lvbiBsZW5ndGg6ICVkIiwgZXh0X2xlbiApICk7CisKKyAgICB3aGlsZSggZXh0X2xlbiApCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgZXh0X2lkICAgPSAoICggZXh0WzBdIDw8ICA4ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIGV4dFsxXSAgICAgICApICk7CisgICAgICAgIHVuc2lnbmVkIGludCBleHRfc2l6ZSA9ICggKCBleHRbMl0gPDwgIDggKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggZXh0WzNdICAgICAgICkgKTsKKworICAgICAgICBpZiggZXh0X3NpemUgKyA0ID4gZXh0X2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2goIGV4dF9pZCApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfUkVORUdPVElBVElPTl9JTkZPOgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgKSApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgICAgIHJlbmVnb3RpYXRpb25faW5mb19zZWVuID0gMTsKKyNlbmRpZgorCisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfcmVuZWdvdGlhdGlvbl9pbmZvKCBzc2wsIGV4dCArIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfc2l6ZSApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfRVhUX01BWF9GUkFHTUVOVF9MRU5HVEg6CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9tYXhfZnJhZ21lbnRfbGVuZ3RoX2V4dCggc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dCArIDQsIGV4dF9zaXplICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9UUlVOQ0FURURfSE1BQzoKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgdHJ1bmNhdGVkX2htYWMgZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV90cnVuY2F0ZWRfaG1hY19leHQoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgKyA0LCBleHRfc2l6ZSApICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfRU5DUllQVF9USEVOX01BQzoKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgZW5jcnlwdF90aGVuX21hYyBleHRlbnNpb24iICkgKTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gc3NsX3BhcnNlX2VuY3J5cHRfdGhlbl9tYWNfZXh0KCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ICsgNCwgZXh0X3NpemUgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCkKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfRVhURU5ERURfTUFTVEVSX1NFQ1JFVDoKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCBleHRlbnNpb24iICkgKTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gc3NsX3BhcnNlX2V4dGVuZGVkX21zX2V4dCggc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dCArIDQsIGV4dF9zaXplICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfU0VTU0lPTl9USUNLRVQ6CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIHNlc3Npb25fdGlja2V0IGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2Vfc2Vzc2lvbl90aWNrZXRfZXh0KCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ICsgNCwgZXh0X3NpemUgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykgfHwgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfU1VQUE9SVEVEX1BPSU5UX0ZPUk1BVFM6CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIHN1cHBvcnRlZF9wb2ludF9mb3JtYXRzIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2Vfc3VwcG9ydGVkX3BvaW50X2Zvcm1hdHNfZXh0KCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ICsgNCwgZXh0X3NpemUgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DIHx8IE1CRURUTFNfRUNEU0FfQyB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfRVhUX0VDSlBBS0VfS0tQUDoKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgZWNqcGFrZV9ra3BwIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfZWNqcGFrZV9ra3BwKCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ICsgNCwgZXh0X3NpemUgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9BTFBOOgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBhbHBuIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfYWxwbl9leHQoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0FMUE4gKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJ1bmtub3duIGV4dGVuc2lvbiBmb3VuZDogJWQgKGlnbm9yaW5nKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfaWQgKSApOworICAgICAgICB9CisKKyAgICAgICAgZXh0X2xlbiAtPSA0ICsgZXh0X3NpemU7CisgICAgICAgIGV4dCArPSA0ICsgZXh0X3NpemU7CisKKyAgICAgICAgaWYoIGV4dF9sZW4gPiAwICYmIGV4dF9sZW4gPCA0ICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogUmVuZWdvdGlhdGlvbiBzZWN1cml0eSBjaGVja3MKKyAgICAgKi8KKyAgICBpZiggc3NsLT5zZWN1cmVfcmVuZWdvdGlhdGlvbiA9PSBNQkVEVExTX1NTTF9MRUdBQ1lfUkVORUdPVElBVElPTiAmJgorICAgICAgICBzc2wtPmNvbmYtPmFsbG93X2xlZ2FjeV9yZW5lZ290aWF0aW9uID09IE1CRURUTFNfU1NMX0xFR0FDWV9CUkVBS19IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJsZWdhY3kgcmVuZWdvdGlhdGlvbiwgYnJlYWtpbmcgb2ZmIGhhbmRzaGFrZSIgKSApOworICAgICAgICBoYW5kc2hha2VfZmFpbHVyZSA9IDE7CisgICAgfQorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBlbHNlIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9JTl9QUk9HUkVTUyAmJgorICAgICAgICAgICAgIHNzbC0+c2VjdXJlX3JlbmVnb3RpYXRpb24gPT0gTUJFRFRMU19TU0xfU0VDVVJFX1JFTkVHT1RJQVRJT04gJiYKKyAgICAgICAgICAgICByZW5lZ290aWF0aW9uX2luZm9fc2VlbiA9PSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicmVuZWdvdGlhdGlvbl9pbmZvIGV4dGVuc2lvbiBtaXNzaW5nIChzZWN1cmUpIiApICk7CisgICAgICAgIGhhbmRzaGFrZV9mYWlsdXJlID0gMTsKKyAgICB9CisgICAgZWxzZSBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgJiYKKyAgICAgICAgICAgICBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID09IE1CRURUTFNfU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OICYmCisgICAgICAgICAgICAgc3NsLT5jb25mLT5hbGxvd19sZWdhY3lfcmVuZWdvdGlhdGlvbiA9PSBNQkVEVExTX1NTTF9MRUdBQ1lfTk9fUkVORUdPVElBVElPTiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImxlZ2FjeSByZW5lZ290aWF0aW9uIG5vdCBhbGxvd2VkIiApICk7CisgICAgICAgIGhhbmRzaGFrZV9mYWlsdXJlID0gMTsKKyAgICB9CisgICAgZWxzZSBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgJiYKKyAgICAgICAgICAgICBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID09IE1CRURUTFNfU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OICYmCisgICAgICAgICAgICAgcmVuZWdvdGlhdGlvbl9pbmZvX3NlZW4gPT0gMSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlbmVnb3RpYXRpb25faW5mbyBleHRlbnNpb24gcHJlc2VudCAobGVnYWN5KSIgKSApOworICAgICAgICBoYW5kc2hha2VfZmFpbHVyZSA9IDE7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKworICAgIGlmKCBoYW5kc2hha2VfZmFpbHVyZSA9PSAxICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHBhcnNlIHNlcnZlciBoZWxsbyIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3NlcnZlcl9kaF9wYXJhbXMoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICplbmQgKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRTsKKworICAgIC8qCisgICAgICogRXBoZW1lcmFsIERIIHBhcmFtZXRlcnM6CisgICAgICoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICBvcGFxdWUgZGhfcDwxLi4yXjE2LTE+OworICAgICAqICAgICBvcGFxdWUgZGhfZzwxLi4yXjE2LTE+OworICAgICAqICAgICBvcGFxdWUgZGhfWXM8MS4uMl4xNi0xPjsKKyAgICAgKiB9IFNlcnZlckRIUGFyYW1zOworICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZGhtX3JlYWRfcGFyYW1zKCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHgsIHAsIGVuZCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDIsICggIm1iZWR0bHNfZGhtX3JlYWRfcGFyYW1zIiApLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPmRobV9jdHgubGVuICogOCA8IHNzbC0+Y29uZi0+ZGhtX21pbl9iaXRsZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJESE0gcHJpbWUgdG9vIHNob3J0OiAlZCA8ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LmxlbiAqIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmRobV9taW5fYml0bGVuICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NUEkoIDMsICJESE06IFAgIiwgJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LlAgICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiREhNOiBHICIsICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5HICApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX01QSSggMywgIkRITTogR1kiLCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHguR1kgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX2NoZWNrX3NlcnZlcl9lY2RoX3BhcmFtcyggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9pbmZvOworCisgICAgY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV9ncnBfaWQoIHNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eC5ncnAuaWQgKTsKKyAgICBpZiggY3VydmVfaW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiRUNESCBjdXJ2ZTogJXMiLCBjdXJ2ZV9pbmZvLT5uYW1lICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICBpZiggbWJlZHRsc19zc2xfY2hlY2tfY3VydmUoIHNzbCwgc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LmdycC5pZCApICE9IDAgKQorI2Vsc2UKKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LmdycC5uYml0cyA8IDE2MyB8fAorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHguZ3JwLm5iaXRzID4gNTIxICkKKyNlbmRpZgorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19FQ1AoIDMsICJFQ0RIOiBRcCIsICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHguUXAgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3NlcnZlcl9lY2RoX3BhcmFtcyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZW5kICkKK3sKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisKKyAgICAvKgorICAgICAqIEVwaGVtZXJhbCBFQ0RIIHBhcmFtZXRlcnM6CisgICAgICoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICBFQ1BhcmFtZXRlcnMgY3VydmVfcGFyYW1zOworICAgICAqICAgICBFQ1BvaW50ICAgICAgcHVibGljOworICAgICAqIH0gU2VydmVyRUNESFBhcmFtczsKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZGhfcmVhZF9wYXJhbXMoICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiopIHAsIGVuZCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggIm1iZWR0bHNfZWNkaF9yZWFkX3BhcmFtcyIgKSwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIHNzbF9jaGVja19zZXJ2ZXJfZWNkaF9wYXJhbXMoIHNzbCApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGtleSBleGNoYW5nZSBtZXNzYWdlIChFQ0RIRSBjdXJ2ZSkiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3NlcnZlcl9wc2tfaGludCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZW5kICkKK3sKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisgICAgc2l6ZV90ICBsZW47CisgICAgKCh2b2lkKSBzc2wpOworCisgICAgLyoKKyAgICAgKiBQU0sgcGFyYW1ldGVyczoKKyAgICAgKgorICAgICAqIG9wYXF1ZSBwc2tfaWRlbnRpdHlfaGludDwwLi4yXjE2LTE+OworICAgICAqLworICAgIGxlbiA9ICgqcClbMF0gPDwgOCB8ICgqcClbMV07CisgICAgKnAgKz0gMjsKKworICAgIGlmKCAoKnApICsgbGVuID4gZW5kICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBrZXkgZXhjaGFuZ2UgbWVzc2FnZSAocHNrX2lkZW50aXR5X2hpbnQgbGVuZ3RoKSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSApOworICAgIH0KKworICAgIC8qCisgICAgICogTm90ZTogd2UgY3VycmVudGx5IGlnbm9yZSB0aGUgUEtTIGlkZW50aXR5IGhpbnQsIGFzIHdlIG9ubHkgYWxsb3cgb25lCisgICAgICogUFNLIHRvIGJlIHByb3Zpc2lvbm5lZCBvbiB0aGUgY2xpZW50LiBUaGlzIGNvdWxkIGJlIGNoYW5nZWQgbGF0ZXIgaWYKKyAgICAgKiBzb21lb25lIG5lZWRzIHRoYXQgZmVhdHVyZS4KKyAgICAgKi8KKyAgICAqcCArPSBsZW47CisgICAgcmV0ID0gMDsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCkKKy8qCisgKiBHZW5lcmF0ZSBhIHByZS1tYXN0ZXIgc2VjcmV0IGFuZCBlbmNyeXB0IGl0IHdpdGggdGhlIHNlcnZlcidzIFJTQSBrZXkKKyAqLworc3RhdGljIGludCBzc2xfd3JpdGVfZW5jcnlwdGVkX3BtcyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBtc19vZmZzZXQgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbl9ieXRlcyA9IHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCA/IDAgOiAyOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzc2wtPmhhbmRzaGFrZS0+cHJlbWFzdGVyICsgcG1zX29mZnNldDsKKworICAgIGlmKCBvZmZzZXQgKyBsZW5fYnl0ZXMgPiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJidWZmZXIgdG9vIHNtYWxsIGZvciBlbmNyeXB0ZWQgcG1zIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JVRkZFUl9UT09fU01BTEwgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEdlbmVyYXRlIChwYXJ0IG9mKSB0aGUgcHJlLW1hc3RlciBhcworICAgICAqICBzdHJ1Y3QgeworICAgICAqICAgICAgUHJvdG9jb2xWZXJzaW9uIGNsaWVudF92ZXJzaW9uOworICAgICAqICAgICAgb3BhcXVlIHJhbmRvbVs0Nl07CisgICAgICogIH0gUHJlTWFzdGVyU2VjcmV0OworICAgICAqLworICAgIG1iZWR0bHNfc3NsX3dyaXRlX3ZlcnNpb24oIHNzbC0+Y29uZi0+bWF4X21ham9yX3Zlciwgc3NsLT5jb25mLT5tYXhfbWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPnRyYW5zcG9ydCwgcCApOworCisgICAgaWYoICggcmV0ID0gc3NsLT5jb25mLT5mX3JuZyggc3NsLT5jb25mLT5wX3JuZywgcCArIDIsIDQ2ICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgImZfcm5nIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgc3NsLT5oYW5kc2hha2UtPnBtc2xlbiA9IDQ4OworCisgICAgaWYoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiY2VydGlmaWNhdGUgcmVxdWlyZWQiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3cgd3JpdGUgaXQgb3V0LCBlbmNyeXB0ZWQKKyAgICAgKi8KKyAgICBpZiggISBtYmVkdGxzX3BrX2Nhbl9kbyggJnNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydC0+cGssCisgICAgICAgICAgICAgICAgTUJFRFRMU19QS19SU0EgKSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImNlcnRpZmljYXRlIGtleSB0eXBlIG1pc21hdGNoIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1BLX1RZUEVfTUlTTUFUQ0ggKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX2VuY3J5cHQoICZzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQtPnBrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIHNzbC0+aGFuZHNoYWtlLT5wbXNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnICsgb2Zmc2V0ICsgbGVuX2J5dGVzLCBvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiAtIG9mZnNldCAtIGxlbl9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgaWYoIGxlbl9ieXRlcyA9PSAyICkKKyAgICB7CisgICAgICAgIHNzbC0+b3V0X21zZ1tvZmZzZXQrMF0gPSAodW5zaWduZWQgY2hhcikoICpvbGVuID4+IDggKTsKKyAgICAgICAgc3NsLT5vdXRfbXNnW29mZnNldCsxXSA9ICh1bnNpZ25lZCBjaGFyKSggKm9sZW4gICAgICApOworICAgICAgICAqb2xlbiArPSAyOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3NpZ25hdHVyZV9hbGdvcml0aG0oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgKm1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfdHlwZV90ICpwa19hbGcgKQoreworICAgICgodm9pZCkgc3NsKTsKKyAgICAqbWRfYWxnID0gTUJFRFRMU19NRF9OT05FOworICAgICpwa19hbGcgPSBNQkVEVExTX1BLX05PTkU7CisKKyAgICAvKiBPbmx5IGluIFRMUyAxLjIgKi8KKyAgICBpZiggc3NsLT5taW5vcl92ZXIgIT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICB7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIGlmKCAoKnApICsgMiA+IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFICk7CisKKyAgICAvKgorICAgICAqIEdldCBoYXNoIGFsZ29yaXRobQorICAgICAqLworICAgIGlmKCAoICptZF9hbGcgPSBtYmVkdGxzX3NzbF9tZF9hbGdfZnJvbV9oYXNoKCAoKnApWzBdICkgKSA9PSBNQkVEVExTX01EX05PTkUgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJTZXJ2ZXIgdXNlZCB1bnN1cHBvcnRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhhc2hBbGdvcml0aG0gJWQiLCAqKHApWzBdICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEdldCBzaWduYXR1cmUgYWxnb3JpdGhtCisgICAgICovCisgICAgaWYoICggKnBrX2FsZyA9IG1iZWR0bHNfc3NsX3BrX2FsZ19mcm9tX3NpZyggKCpwKVsxXSApICkgPT0gTUJFRFRMU19QS19OT05FICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2VydmVyIHVzZWQgdW5zdXBwb3J0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmVBbGdvcml0aG0gJWQiLCAoKnApWzFdICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHRoZSBoYXNoIGlzIGFjY2VwdGFibGUKKyAgICAgKi8KKyAgICBpZiggbWJlZHRsc19zc2xfY2hlY2tfc2lnX2hhc2goIHNzbCwgKm1kX2FsZyApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzZXJ2ZXIgdXNlZCBIYXNoQWxnb3JpdGhtICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGF0IHdhcyBub3Qgb2ZmZXJlZCIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiU2VydmVyIHVzZWQgU2lnbmF0dXJlQWxnb3JpdGhtICVkIiwgKCpwKVsxXSApICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJTZXJ2ZXIgdXNlZCBIYXNoQWxnb3JpdGhtICVkIiwgKCpwKVswXSApICk7CisgICAgKnAgKz0gMjsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9nZXRfZWNkaF9wYXJhbXNfZnJvbV9jZXJ0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgY29uc3QgbWJlZHRsc19lY3Bfa2V5cGFpciAqcGVlcl9rZXk7CisKKyAgICBpZiggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0ID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJjZXJ0aWZpY2F0ZSByZXF1aXJlZCIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICB9CisKKyAgICBpZiggISBtYmVkdGxzX3BrX2Nhbl9kbyggJnNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydC0+cGssCisgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1BLX0VDS0VZICkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzZXJ2ZXIga2V5IG5vdCBFQ0RIIGNhcGFibGUiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfUEtfVFlQRV9NSVNNQVRDSCApOworICAgIH0KKworICAgIHBlZXJfa2V5ID0gbWJlZHRsc19wa19lYyggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0LT5wayApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RoX2dldF9wYXJhbXMoICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgsIHBlZXJfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FQ0RIX1RIRUlSUyApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggIm1iZWR0bHNfZWNkaF9nZXRfcGFyYW1zIiApLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggc3NsX2NoZWNrX3NlcnZlcl9lY2RoX3BhcmFtcyggc3NsICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIgY2VydGlmaWNhdGUgKEVDREggY3VydmUpIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURSApOworICAgIH0KKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCkgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQgKi8KKworc3RhdGljIGludCBzc2xfcGFyc2Vfc2VydmVyX2tleV9leGNoYW5nZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm8gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm87CisgICAgdW5zaWduZWQgY2hhciAqcCwgKmVuZDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gcGFyc2Ugc2VydmVyIGtleSBleGNoYW5nZSIgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgcGFyc2Ugc2VydmVyIGtleSBleGNoYW5nZSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyAgICAoKHZvaWQpIHApOworICAgICgodm9pZCkgZW5kKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBzc2xfZ2V0X2VjZGhfcGFyYW1zX2Zyb21fY2VydCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAic3NsX2dldF9lY2RoX3BhcmFtc19mcm9tX2NlcnQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgcGFyc2Ugc2VydmVyIGtleSBleGNoYW5nZSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyAgICAoKHZvaWQpIHApOworICAgICgodm9pZCkgZW5kKTsKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEICovCisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+aW5fbXNndHlwZSAhPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNlcnZlcktleUV4Y2hhbmdlIG1heSBiZSBza2lwcGVkIHdpdGggUFNLIGFuZCBSU0EtUFNLIHdoZW4gdGhlIHNlcnZlcgorICAgICAqIGRvZXNuJ3QgdXNlIGEgcHNrX2lkZW50aXR5X2hpbnQKKyAgICAgKi8KKyAgICBpZiggc3NsLT5pbl9tc2dbMF0gIT0gTUJFRFRMU19TU0xfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSApCisgICAgeworICAgICAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0sgKQorICAgICAgICB7CisgICAgICAgICAgICBzc2wtPnJlY29yZF9yZWFkID0gMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICB9CisKKyAgICBwICAgPSBzc2wtPmluX21zZyArIG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApOworICAgIGVuZCA9IHNzbC0+aW5fbXNnICsgc3NsLT5pbl9oc2xlbjsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICAgInNlcnZlciBrZXkgZXhjaGFuZ2UiLCBwLCBlbmQgLSBwICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLICkKKyAgICB7CisgICAgICAgIGlmKCBzc2xfcGFyc2Vfc2VydmVyX3Bza19oaW50KCBzc2wsICZwLCBlbmQgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSApOworICAgICAgICB9CisgICAgfSAvKiBGQUxMVFJPVUdIICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLICkKKyAgICAgICAgOyAvKiBub3RoaW5nIG1vcmUgdG8gZG8gKi8KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbF9wYXJzZV9zZXJ2ZXJfZGhfcGFyYW1zKCBzc2wsICZwLCBlbmQgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbF9wYXJzZV9zZXJ2ZXJfZWNkaF9wYXJhbXMoIHNzbCwgJnAsIGVuZCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIga2V5IGV4Y2hhbmdlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX3R3byggJnNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBlbmQgLSBwICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX3R3byIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBICkKKyAgICB7CisgICAgICAgIHNpemVfdCBzaWdfbGVuLCBoYXNobGVuOworICAgICAgICB1bnNpZ25lZCBjaGFyIGhhc2hbNjRdOworICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcgPSBNQkVEVExTX01EX05PTkU7CisgICAgICAgIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZyA9IE1CRURUTFNfUEtfTk9ORTsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqcGFyYW1zID0gc3NsLT5pbl9tc2cgKyBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKTsKKyAgICAgICAgc2l6ZV90IHBhcmFtc19sZW4gPSBwIC0gcGFyYW1zOworCisgICAgICAgIC8qCisgICAgICAgICAqIEhhbmRsZSB0aGUgZGlnaXRhbGx5LXNpZ25lZCBzdHJ1Y3R1cmUKKyAgICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3NsX3BhcnNlX3NpZ25hdHVyZV9hbGdvcml0aG0oIHNzbCwgJnAsIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1kX2FsZywgJnBrX2FsZyApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCBwa19hbGcgIT0gbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX3NpZ19wa19hbGcoIGNpcGhlcnN1aXRlX2luZm8gKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyIDwgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICAgICAgeworICAgICAgICAgICAgcGtfYWxnID0gbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX3NpZ19wa19hbGcoIGNpcGhlcnN1aXRlX2luZm8gKTsKKworICAgICAgICAgICAgLyogRGVmYXVsdCBoYXNoIGZvciBFQ0RTQSBpcyBTSEEtMSAqLworICAgICAgICAgICAgaWYoIHBrX2FsZyA9PSBNQkVEVExTX1BLX0VDRFNBICYmIG1kX2FsZyA9PSBNQkVEVExTX01EX05PTkUgKQorICAgICAgICAgICAgICAgIG1kX2FsZyA9IE1CRURUTFNfTURfU0hBMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVhZCBzaWduYXR1cmUKKyAgICAgICAgICovCisgICAgICAgIHNpZ19sZW4gPSAoIHBbMF0gPDwgOCApIHwgcFsxXTsKKyAgICAgICAgcCArPSAyOworCisgICAgICAgIGlmKCBlbmQgIT0gcCArIHNpZ19sZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIga2V5IGV4Y2hhbmdlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJzaWduYXR1cmUiLCBwLCBzaWdfbGVuICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ29tcHV0ZSB0aGUgaGFzaCB0aGF0IGhhcyBiZWVuIHNpZ25lZAorICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorICAgICAgICBpZiggbWRfYWxnID09IE1CRURUTFNfTURfTk9ORSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X2NvbnRleHQgbWJlZHRsc19tZDU7CisgICAgICAgICAgICBtYmVkdGxzX3NoYTFfY29udGV4dCBtYmVkdGxzX3NoYTE7CisKKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X2luaXQoICAmbWJlZHRsc19tZDUgICk7CisgICAgICAgICAgICBtYmVkdGxzX3NoYTFfaW5pdCggJm1iZWR0bHNfc2hhMSApOworCisgICAgICAgICAgICBoYXNobGVuID0gMzY7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBkaWdpdGFsbHktc2lnbmVkIHN0cnVjdCB7CisgICAgICAgICAgICAgKiAgICAgb3BhcXVlIG1kNV9oYXNoWzE2XTsKKyAgICAgICAgICAgICAqICAgICBvcGFxdWUgc2hhX2hhc2hbMjBdOworICAgICAgICAgICAgICogfTsKKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBtZDVfaGFzaAorICAgICAgICAgICAgICogICAgIE1ENShDbGllbnRIZWxsby5yYW5kb20gKyBTZXJ2ZXJIZWxsby5yYW5kb20KKyAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgU2VydmVyUGFyYW1zKTsKKyAgICAgICAgICAgICAqIHNoYV9oYXNoCisgICAgICAgICAgICAgKiAgICAgU0hBKENsaWVudEhlbGxvLnJhbmRvbSArIFNlcnZlckhlbGxvLnJhbmRvbQorICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBTZXJ2ZXJQYXJhbXMpOworICAgICAgICAgICAgICovCisgICAgICAgICAgICBtYmVkdGxzX21kNV9zdGFydHMoICZtYmVkdGxzX21kNSApOworICAgICAgICAgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWJlZHRsc19tZDUsIHNzbC0+aGFuZHNoYWtlLT5yYW5kYnl0ZXMsIDY0ICk7CisgICAgICAgICAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtYmVkdGxzX21kNSwgcGFyYW1zLCBwYXJhbXNfbGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX21kNV9maW5pc2goICZtYmVkdGxzX21kNSwgaGFzaCApOworCisgICAgICAgICAgICBtYmVkdGxzX3NoYTFfc3RhcnRzKCAmbWJlZHRsc19zaGExICk7CisgICAgICAgICAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmbWJlZHRsc19zaGExLCBzc2wtPmhhbmRzaGFrZS0+cmFuZGJ5dGVzLCA2NCApOworICAgICAgICAgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJm1iZWR0bHNfc2hhMSwgcGFyYW1zLCBwYXJhbXNfbGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX3NoYTFfZmluaXNoKCAmbWJlZHRsc19zaGExLCBoYXNoICsgMTYgKTsKKworICAgICAgICAgICAgbWJlZHRsc19tZDVfZnJlZSggICZtYmVkdGxzX21kNSAgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMV9mcmVlKCAmbWJlZHRsc19zaGExICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgfHwgTUJFRFRMU19TU0xfUFJPVE9fVExTMSB8fCBcCisgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgICAgICBpZiggbWRfYWxnICE9IE1CRURUTFNfTURfTk9ORSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfY29udGV4dF90IGN0eDsKKworICAgICAgICAgICAgbWJlZHRsc19tZF9pbml0KCAmY3R4ICk7CisKKyAgICAgICAgICAgIC8qIEluZm8gZnJvbSBtZF9hbGcgd2lsbCBiZSB1c2VkIGluc3RlYWQgKi8KKyAgICAgICAgICAgIGhhc2hsZW4gPSAwOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogZGlnaXRhbGx5LXNpZ25lZCBzdHJ1Y3QgeworICAgICAgICAgICAgICogICAgIG9wYXF1ZSBjbGllbnRfcmFuZG9tWzMyXTsKKyAgICAgICAgICAgICAqICAgICBvcGFxdWUgc2VydmVyX3JhbmRvbVszMl07CisgICAgICAgICAgICAgKiAgICAgU2VydmVyREhQYXJhbXMgcGFyYW1zOworICAgICAgICAgICAgICogfTsKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKSwgMCApICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19tZF9zZXR1cCIsIHJldCApOworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfc3RhcnRzKCAmY3R4ICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggJmN0eCwgc3NsLT5oYW5kc2hha2UtPnJhbmRieXRlcywgNjQgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmY3R4LCBwYXJhbXMsIHBhcmFtc19sZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfZmluaXNoKCAmY3R4LCBoYXNoICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHggKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMSB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgfHwgXAorICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJwYXJhbWV0ZXJzIGhhc2giLCBoYXNoLCBoYXNobGVuICE9IDAgPyBoYXNobGVuIDoKKyAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpICggbWJlZHRsc19tZF9nZXRfc2l6ZSggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICkgKSApICk7CisKKyAgICAgICAgaWYoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydCA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJjZXJ0aWZpY2F0ZSByZXF1aXJlZCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFICk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBWZXJpZnkgc2lnbmF0dXJlCisgICAgICAgICAqLworICAgICAgICBpZiggISBtYmVkdGxzX3BrX2Nhbl9kbyggJnNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydC0+cGssIHBrX2FsZyApICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9QS19UWVBFX01JU01BVENIICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3ZlcmlmeSggJnNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydC0+cGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRfYWxnLCBoYXNoLCBoYXNobGVuLCBwLCBzaWdfbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19wa192ZXJpZnkiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEICovCisKK2V4aXQ6CisgICAgc3NsLT5zdGF0ZSsrOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBwYXJzZSBzZXJ2ZXIga2V5IGV4Y2hhbmdlIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKSAgICAgICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKSAgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEKSYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcGFyc2VfY2VydGlmaWNhdGVfcmVxdWVzdCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiApICk7CisKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKK30KKyNlbHNlCitzdGF0aWMgaW50IHNzbF9wYXJzZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqYnVmOworICAgIHNpemVfdCBuID0gMDsKKyAgICBzaXplX3QgY2VydF90eXBlX2xlbiA9IDAsIGRuX2xlbiA9IDA7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbzsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gcGFyc2UgY2VydGlmaWNhdGUgcmVxdWVzdCIgKSApOworCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgcGFyc2UgY2VydGlmaWNhdGUgcmVxdWVzdCIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIGlmKCBzc2wtPnJlY29yZF9yZWFkID09IDAgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNndHlwZSAhPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2VydGlmaWNhdGUgcmVxdWVzdCBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICAgICAgfQorCisgICAgICAgIHNzbC0+cmVjb3JkX3JlYWQgPSAxOworICAgIH0KKworICAgIHNzbC0+Y2xpZW50X2F1dGggPSAwOworICAgIHNzbC0+c3RhdGUrKzsKKworICAgIGlmKCBzc2wtPmluX21zZ1swXSA9PSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUICkKKyAgICAgICAgc3NsLT5jbGllbnRfYXV0aCsrOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJnb3QgJXMgY2VydGlmaWNhdGUgcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNsaWVudF9hdXRoID8gImEiIDogIm5vIiApICk7CisKKyAgICBpZiggc3NsLT5jbGllbnRfYXV0aCA9PSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgc3NsLT5yZWNvcmRfcmVhZCA9IDA7CisKKyAgICAvKgorICAgICAqICBzdHJ1Y3QgeworICAgICAqICAgICAgQ2xpZW50Q2VydGlmaWNhdGVUeXBlIGNlcnRpZmljYXRlX3R5cGVzPDEuLjJeOC0xPjsKKyAgICAgKiAgICAgIFNpZ25hdHVyZUFuZEhhc2hBbGdvcml0aG0KKyAgICAgKiAgICAgICAgc3VwcG9ydGVkX3NpZ25hdHVyZV9hbGdvcml0aG1zPDJeMTYtMT47IC0tIFRMUyAxLjIgb25seQorICAgICAqICAgICAgRGlzdGluZ3Vpc2hlZE5hbWUgY2VydGlmaWNhdGVfYXV0aG9yaXRpZXM8MC4uMl4xNi0xPjsKKyAgICAgKiAgfSBDZXJ0aWZpY2F0ZVJlcXVlc3Q7CisgICAgICoKKyAgICAgKiAgU2luY2Ugd2Ugb25seSBzdXBwb3J0IGEgc2luZ2xlIGNlcnRpZmljYXRlIG9uIGNsaWVudHMsIGxldCdzIGp1c3QKKyAgICAgKiAgaWdub3JlIGFsbCB0aGUgaW5mb3JtYXRpb24gdGhhdCdzIHN1cHBvc2VkIHRvIGhlbHAgdXMgcGljayBhCisgICAgICogIGNlcnRpZmljYXRlLgorICAgICAqCisgICAgICogIFdlIGNvdWxkIGNoZWNrIHRoYXQgb3VyIGNlcnRpZmljYXRlIG1hdGNoZXMgdGhlIHJlcXVlc3QsIGFuZCBiYWlsIG91dAorICAgICAqICBpZiBpdCBkb2Vzbid0LCBidXQgaXQncyBzaW1wbGVyIHRvIGp1c3Qgc2VuZCB0aGUgY2VydGlmaWNhdGUgYW55d2F5LAorICAgICAqICBhbmQgZ2l2ZSB0aGUgc2VydmVyIHRoZSBvcHBvcnR1bml0eSB0byBkZWNpZGUgaWYgaXQgc2hvdWxkIHRlcm1pbmF0ZQorICAgICAqICB0aGUgY29ubmVjdGlvbiB3aGVuIGl0IGRvZXNuJ3QgbGlrZSBvdXIgY2VydGlmaWNhdGUuCisgICAgICoKKyAgICAgKiAgU2FtZSBnb2VzIGZvciB0aGUgaGFzaCBpbiBUTFMgMS4yJ3Mgc2lnbmF0dXJlX2FsZ29yaXRobXM6IGF0IHRoaXMKKyAgICAgKiAgcG9pbnQgd2Ugb25seSBoYXZlIG9uZSBoYXNoIGF2YWlsYWJsZSAoc2VlIGNvbW1lbnRzIGluCisgICAgICogIHdyaXRlX2NlcnRpZmljYXRlX3ZlcmlmeSksIHNvIGxldCdzIGp1c3QgdXNlIHdoYXQgd2UgaGF2ZS4KKyAgICAgKgorICAgICAqICBIb3dldmVyLCB3ZSBzdGlsbCBtaW5pbWFsbHkgcGFyc2UgdGhlIG1lc3NhZ2UgdG8gY2hlY2sgaXQgaXMgYXQgbGVhc3QKKyAgICAgKiAgc3VwZXJmaWNpYWxseSBzYW5lLgorICAgICAqLworICAgIGJ1ZiA9IHNzbC0+aW5fbXNnOworCisgICAgLyogY2VydGlmaWNhdGVfdHlwZXMgKi8KKyAgICBjZXJ0X3R5cGVfbGVuID0gYnVmW21iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApXTsKKyAgICBuID0gY2VydF90eXBlX2xlbjsKKworICAgIGlmKCBzc2wtPmluX2hzbGVuIDwgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKyAyICsgbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSByZXF1ZXN0IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1JFUVVFU1QgKTsKKyAgICB9CisKKyAgICAvKiBzdXBwb3J0ZWRfc2lnbmF0dXJlX2FsZ29yaXRobXMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICB7CisgICAgICAgIHNpemVfdCBzaWdfYWxnX2xlbiA9ICggKCBidWZbbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKyAxICsgbl0gPDwgIDggKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggYnVmW21iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICsgMiArIG5dICAgICAgICkgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVCVUdfQykKKyAgICAgICAgdW5zaWduZWQgY2hhciogc2lnX2FsZyA9IGJ1ZiArIG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICsgMyArIG47CisgICAgICAgIHNpemVfdCBpOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCBzaWdfYWxnX2xlbjsgaSArPSAyICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJTdXBwb3J0ZWQgU2lnbmF0dXJlIEFsZ29yaXRobSBmb3VuZDogJWQsJWQiLCBzaWdfYWxnW2ldLCBzaWdfYWxnW2kgKyAxXSAgKSApOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBuICs9IDIgKyBzaWdfYWxnX2xlbjsKKworICAgICAgICBpZiggc3NsLT5pbl9oc2xlbiA8IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICsgMiArIG4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSByZXF1ZXN0IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKKyAgICAvKiBjZXJ0aWZpY2F0ZV9hdXRob3JpdGllcyAqLworICAgIGRuX2xlbiA9ICggKCBidWZbbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKyAxICsgbl0gPDwgIDggKQorICAgICAgICAgICAgIHwgKCBidWZbbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKyAyICsgbl0gICAgICAgKSApOworCisgICAgbiArPSBkbl9sZW47CisgICAgaWYoIHNzbC0+aW5faHNsZW4gIT0gbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKyAzICsgbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSByZXF1ZXN0IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1JFUVVFU1QgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQgJiYKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEICYmCisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQgJiYKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQgJiYKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEICYmCisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQgKi8KKworc3RhdGljIGludCBzc2xfcGFyc2Vfc2VydmVyX2hlbGxvX2RvbmUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gcGFyc2Ugc2VydmVyIGhlbGxvIGRvbmUiICkgKTsKKworICAgIGlmKCBzc2wtPnJlY29yZF9yZWFkID09IDAgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNndHlwZSAhPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGhlbGxvIGRvbmUgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFICk7CisgICAgICAgIH0KKyAgICB9CisgICAgc3NsLT5yZWNvcmRfcmVhZCA9IDA7CisKKyAgICBpZiggc3NsLT5pbl9oc2xlbiAgIT0gbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgfHwKKyAgICAgICAgc3NsLT5pbl9tc2dbMF0gIT0gTUJFRFRMU19TU0xfSFNfU0VSVkVSX0hFTExPX0RPTkUgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGhlbGxvIGRvbmUgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPX0RPTkUgKTsKKyAgICB9CisKKyAgICBzc2wtPnN0YXRlKys7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgIG1iZWR0bHNfc3NsX3JlY3ZfZmxpZ2h0X2NvbXBsZXRlZCggc3NsICk7CisjZW5kaWYKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gcGFyc2Ugc2VydmVyIGhlbGxvIGRvbmUiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHNzbF93cml0ZV9jbGllbnRfa2V5X2V4Y2hhbmdlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGksIG47CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbzsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgY2xpZW50IGtleSBleGNoYW5nZSIgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIERITSBrZXkgZXhjaGFuZ2UgLS0gc2VuZCBHXlggbW9kIFAKKyAgICAgICAgICovCisgICAgICAgIG4gPSBzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5sZW47CisKKyAgICAgICAgc3NsLT5vdXRfbXNnWzRdID0gKHVuc2lnbmVkIGNoYXIpKCBuID4+IDggKTsKKyAgICAgICAgc3NsLT5vdXRfbXNnWzVdID0gKHVuc2lnbmVkIGNoYXIpKCBuICAgICAgKTsKKyAgICAgICAgaSA9IDY7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19kaG1fbWFrZV9wdWJsaWMoICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgbWJlZHRsc19tcGlfc2l6ZSggJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LlAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NsLT5vdXRfbXNnW2ldLCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZGhtX21ha2VfcHVibGljIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiREhNOiBYICIsICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5YICApOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NUEkoIDMsICJESE06IEdYIiwgJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LkdYICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnByZW1hc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19QUkVNQVNURVJfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NsLT5oYW5kc2hha2UtPnBtc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiREhNOiBLICIsICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5LICApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBFQ0RIIGtleSBleGNoYW5nZSAtLSBzZW5kIGNsaWVudCBwdWJsaWMgdmFsdWUKKyAgICAgICAgICovCisgICAgICAgIGkgPSA0OworCisgICAgICAgIHJldCA9IG1iZWR0bHNfZWNkaF9tYWtlX3B1YmxpYyggJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2wtPm91dF9tc2dbaV0sIDEwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19lY2RoX21ha2VfcHVibGljIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfRUNQKCAzLCAiRUNESDogUSIsICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHguUSApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldCggJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzbC0+aGFuZHNoYWtlLT5wbXNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cHJlbWFzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19NUElfTUFYX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiRUNESDogeiIsICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgueiApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogb3BhcXVlIHBza19pZGVudGl0eTwwLi4yXjE2LTE+OworICAgICAgICAgKi8KKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+cHNrID09IE5VTEwgfHwgc3NsLT5jb25mLT5wc2tfaWRlbnRpdHkgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZ290IG5vIHByaXZhdGUga2V5IGZvciBQU0siICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1BSSVZBVEVfS0VZX1JFUVVJUkVEICk7CisgICAgICAgIH0KKworICAgICAgICBpID0gNDsKKyAgICAgICAgbiA9IHNzbC0+Y29uZi0+cHNrX2lkZW50aXR5X2xlbjsKKworICAgICAgICBpZiggaSArIDIgKyBuID4gTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJwc2sgaWRlbnRpdHkgdG9vIGxvbmcgb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTU0wgYnVmZmVyIHRvbyBzaG9ydCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTCApOworICAgICAgICB9CisKKyAgICAgICAgc3NsLT5vdXRfbXNnW2krK10gPSAodW5zaWduZWQgY2hhcikoIG4gPj4gOCApOworICAgICAgICBzc2wtPm91dF9tc2dbaSsrXSA9ICh1bnNpZ25lZCBjaGFyKSggbiAgICAgICk7CisKKyAgICAgICAgbWVtY3B5KCBzc2wtPm91dF9tc2cgKyBpLCBzc2wtPmNvbmYtPnBza19pZGVudGl0eSwgc3NsLT5jb25mLT5wc2tfaWRlbnRpdHlfbGVuICk7CisgICAgICAgIGkgKz0gc3NsLT5jb25mLT5wc2tfaWRlbnRpdHlfbGVuOworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCkKKyAgICAgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgKQorICAgICAgICB7CisgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCkKKyAgICAgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggcmV0ID0gc3NsX3dyaXRlX2VuY3J5cHRlZF9wbXMoIHNzbCwgaSwgJm4sIDIgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQpCisgICAgICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBDbGllbnREaWZmaWVIZWxsbWFuUHVibGljIHB1YmxpYyAoREhNIHNlbmQgR15YIG1vZCBQKQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBuID0gc3NsLT5oYW5kc2hha2UtPmRobV9jdHgubGVuOworCisgICAgICAgICAgICBpZiggaSArIDIgKyBuID4gTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInBzayBpZGVudGl0eSBvciBESE0gc2l6ZSB0b28gbG9uZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvciBTU0wgYnVmZmVyIHRvbyBzaG9ydCIgKSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JVRkZFUl9UT09fU01BTEwgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3NsLT5vdXRfbXNnW2krK10gPSAodW5zaWduZWQgY2hhcikoIG4gPj4gOCApOworICAgICAgICAgICAgc3NsLT5vdXRfbXNnW2krK10gPSAodW5zaWduZWQgY2hhcikoIG4gICAgICApOworCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2RobV9tYWtlX3B1YmxpYyggJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LAorICAgICAgICAgICAgICAgICAgICAoaW50KSBtYmVkdGxzX21waV9zaXplKCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHguUCApLAorICAgICAgICAgICAgICAgICAgICAmc3NsLT5vdXRfbXNnW2ldLCBuLAorICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZGhtX21ha2VfcHVibGljIiwgcmV0ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCkKKyAgICAgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ2xpZW50RUNEaWZmaWVIZWxsbWFuUHVibGljIHB1YmxpYzsKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19lY2RoX21ha2VfcHVibGljKCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LCAmbiwKKyAgICAgICAgICAgICAgICAgICAgJnNzbC0+b3V0X21zZ1tpXSwgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOIC0gaSwKKyAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMiLCByZXQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19FQ1AoIDMsICJFQ0RIOiBRIiwgJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eC5RICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEICovCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3Bza19kZXJpdmVfcHJlbWFzdGVyKCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9wc2tfZGVyaXZlX3ByZW1hc3RlciIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSApCisgICAgeworICAgICAgICBpID0gNDsKKyAgICAgICAgaWYoICggcmV0ID0gc3NsX3dyaXRlX2VuY3J5cHRlZF9wbXMoIHNzbCwgaSwgJm4sIDAgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIGkgPSA0OworCisgICAgICAgIHJldCA9IG1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF90d28oICZzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHgsCisgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnICsgaSwgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOIC0gaSwgJm4sCisgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjanBha2Vfd3JpdGVfcm91bmRfdHdvIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19lY2pwYWtlX2Rlcml2ZV9zZWNyZXQoICZzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHgsCisgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnByZW1hc3RlciwgMzIsICZzc2wtPmhhbmRzaGFrZS0+cG1zbGVuLAorICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19lY2pwYWtlX2Rlcml2ZV9zZWNyZXQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEICovCisgICAgeworICAgICAgICAoKHZvaWQpIGNpcGhlcnN1aXRlX2luZm8pOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICBzc2wtPm91dF9tc2dsZW4gID0gaSArIG47CisgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U7CisgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0U7CisKKyAgICBzc2wtPnN0YXRlKys7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHdyaXRlIGNsaWVudCBrZXkgZXhjaGFuZ2UiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQpICAgICAgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpICAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF93cml0ZV9jZXJ0aWZpY2F0ZV92ZXJpZnkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbzsKKyAgICBpbnQgcmV0OworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiICkgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2Rlcml2ZV9rZXlzKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfZGVyaXZlX2tleXMiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiICkgKTsKKyAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX2NlcnRpZmljYXRlX3ZlcmlmeSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbzsKKyAgICBzaXplX3QgbiA9IDAsIG9mZnNldCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzQ4XTsKKyAgICB1bnNpZ25lZCBjaGFyICpoYXNoX3N0YXJ0ID0gaGFzaDsKKyAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcgPSBNQkVEVExTX01EX05PTkU7CisgICAgdW5zaWduZWQgaW50IGhhc2hsZW47CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfZGVyaXZlX2tleXMoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9kZXJpdmVfa2V5cyIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIGlmKCBzc2wtPmNsaWVudF9hdXRoID09IDAgfHwgbWJlZHRsc19zc2xfb3duX2NlcnQoIHNzbCApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIGlmKCBtYmVkdGxzX3NzbF9vd25fa2V5KCBzc2wgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZ290IG5vIHByaXZhdGUga2V5IGZvciBjZXJ0aWZpY2F0ZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9QUklWQVRFX0tFWV9SRVFVSVJFRCApOworICAgIH0KKworICAgIC8qCisgICAgICogTWFrZSBhbiBSU0Egc2lnbmF0dXJlIG9mIHRoZSBoYW5kc2hha2UgZGlnZXN0cworICAgICAqLworICAgIHNzbC0+aGFuZHNoYWtlLT5jYWxjX3ZlcmlmeSggc3NsLCBoYXNoICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorICAgIGlmKCBzc2wtPm1pbm9yX3ZlciAhPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogZGlnaXRhbGx5LXNpZ25lZCBzdHJ1Y3QgeworICAgICAgICAgKiAgICAgb3BhcXVlIG1kNV9oYXNoWzE2XTsKKyAgICAgICAgICogICAgIG9wYXF1ZSBzaGFfaGFzaFsyMF07CisgICAgICAgICAqIH07CisgICAgICAgICAqCisgICAgICAgICAqIG1kNV9oYXNoCisgICAgICAgICAqICAgICBNRDUoaGFuZHNoYWtlX21lc3NhZ2VzKTsKKyAgICAgICAgICoKKyAgICAgICAgICogc2hhX2hhc2gKKyAgICAgICAgICogICAgIFNIQShoYW5kc2hha2VfbWVzc2FnZXMpOworICAgICAgICAgKi8KKyAgICAgICAgaGFzaGxlbiA9IDM2OworICAgICAgICBtZF9hbGcgPSBNQkVEVExTX01EX05PTkU7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRm9yIEVDRFNBLCBkZWZhdWx0IGhhc2ggaXMgU0hBLTEgb25seQorICAgICAgICAgKi8KKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfY2FuX2RvKCBtYmVkdGxzX3NzbF9vd25fa2V5KCBzc2wgKSwgTUJFRFRMU19QS19FQ0RTQSApICkKKyAgICAgICAgeworICAgICAgICAgICAgaGFzaF9zdGFydCArPSAxNjsKKyAgICAgICAgICAgIGhhc2hsZW4gLT0gMTY7CisgICAgICAgICAgICBtZF9hbGcgPSBNQkVEVExTX01EX1NIQTE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgfHwgTUJFRFRMU19TU0xfUFJPVE9fVExTMSB8fCBcCisgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBkaWdpdGFsbHktc2lnbmVkIHN0cnVjdCB7CisgICAgICAgICAqICAgICBvcGFxdWUgaGFuZHNoYWtlX21lc3NhZ2VzW2hhbmRzaGFrZV9tZXNzYWdlc19sZW5ndGhdOworICAgICAgICAgKiB9OworICAgICAgICAgKgorICAgICAgICAgKiBUYWtpbmcgc2hvcnRjdXQgaGVyZS4gV2UgYXNzdW1lIHRoYXQgdGhlIHNlcnZlciBhbHdheXMgYWxsb3dzIHRoZQorICAgICAgICAgKiBQUkYgSGFzaCBmdW5jdGlvbiBhbmQgaGFzIHNlbnQgaXQgaW4gdGhlIGFsbG93ZWQgc2lnbmF0dXJlCisgICAgICAgICAqIGFsZ29yaXRobXMgbGlzdCByZWNlaXZlZCBpbiB0aGUgQ2VydGlmaWNhdGUgUmVxdWVzdCBtZXNzYWdlLgorICAgICAgICAgKgorICAgICAgICAgKiBVbnRpbCB3ZSBlbmNvdW50ZXIgYSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCwgd2Ugd2lsbCB0YWtlIHRoaXMKKyAgICAgICAgICogc2hvcnRjdXQuCisgICAgICAgICAqCisgICAgICAgICAqIFJlYXNvbjogT3RoZXJ3aXNlIHdlIHNob3VsZCBoYXZlIHJ1bm5pbmcgaGFzaGVzIGZvciBTSEE1MTIgYW5kIFNIQTIyNAorICAgICAgICAgKiAgICAgICAgIGluIG9yZGVyIHRvIHNhdGlzZnkgJ3dlaXJkJyBuZWVkcyBmcm9tIHRoZSBzZXJ2ZXIgc2lkZS4KKyAgICAgICAgICovCisgICAgICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm8tPm1hYyA9PQorICAgICAgICAgICAgTUJFRFRMU19NRF9TSEEzODQgKQorICAgICAgICB7CisgICAgICAgICAgICBtZF9hbGcgPSBNQkVEVExTX01EX1NIQTM4NDsKKyAgICAgICAgICAgIHNzbC0+b3V0X21zZ1s0XSA9IE1CRURUTFNfU1NMX0hBU0hfU0hBMzg0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbWRfYWxnID0gTUJFRFRMU19NRF9TSEEyNTY7CisgICAgICAgICAgICBzc2wtPm91dF9tc2dbNF0gPSBNQkVEVExTX1NTTF9IQVNIX1NIQTI1NjsKKyAgICAgICAgfQorICAgICAgICBzc2wtPm91dF9tc2dbNV0gPSBtYmVkdGxzX3NzbF9zaWdfZnJvbV9wayggbWJlZHRsc19zc2xfb3duX2tleSggc3NsICkgKTsKKworICAgICAgICAvKiBJbmZvIGZyb20gbWRfYWxnIHdpbGwgYmUgdXNlZCBpbnN0ZWFkICovCisgICAgICAgIGhhc2hsZW4gPSAwOworICAgICAgICBvZmZzZXQgPSAyOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3NpZ24oIG1iZWR0bHNfc3NsX293bl9rZXkoIHNzbCApLCBtZF9hbGcsIGhhc2hfc3RhcnQsIGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnICsgNiArIG9mZnNldCwgJm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3BrX3NpZ24iLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBzc2wtPm91dF9tc2dbNCArIG9mZnNldF0gPSAodW5zaWduZWQgY2hhcikoIG4gPj4gOCApOworICAgIHNzbC0+b3V0X21zZ1s1ICsgb2Zmc2V0XSA9ICh1bnNpZ25lZCBjaGFyKSggbiAgICAgICk7CisKKyAgICBzc2wtPm91dF9tc2dsZW4gID0gNiArIG4gKyBvZmZzZXQ7CisgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U7CisgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFX1ZFUklGWTsKKworICAgIHNzbC0+c3RhdGUrKzsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiApICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qICFNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgJiYKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQgJiYKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9uZXdfc2Vzc2lvbl90aWNrZXQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICB1aW50MzJfdCBsaWZldGltZTsKKyAgICBzaXplX3QgdGlja2V0X2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyICp0aWNrZXQ7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBuZXcgc2Vzc2lvbiB0aWNrZXQiICkgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgbmV3IHNlc3Npb24gdGlja2V0IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICB1aW50MzIgdGlja2V0X2xpZmV0aW1lX2hpbnQ7CisgICAgICogICAgIG9wYXF1ZSB0aWNrZXQ8MC4uMl4xNi0xPjsKKyAgICAgKiB9IE5ld1Nlc3Npb25UaWNrZXQ7CisgICAgICoKKyAgICAgKiAwICAuICAzICAgdGlja2V0X2xpZmV0aW1lX2hpbnQKKyAgICAgKiA0ICAuICA1ICAgdGlja2V0X2xlbiAobikKKyAgICAgKiA2ICAuICA1K24gdGlja2V0IGNvbnRlbnQKKyAgICAgKi8KKyAgICBpZiggc3NsLT5pbl9tc2dbMF0gIT0gTUJFRFRMU19TU0xfSFNfTkVXX1NFU1NJT05fVElDS0VUIHx8CisgICAgICAgIHNzbC0+aW5faHNsZW4gPCA2ICsgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgbmV3IHNlc3Npb24gdGlja2V0IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX05FV19TRVNTSU9OX1RJQ0tFVCApOworICAgIH0KKworICAgIG1zZyA9IHNzbC0+aW5fbXNnICsgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICk7CisKKyAgICBsaWZldGltZSA9ICggbXNnWzBdIDw8IDI0ICkgfCAoIG1zZ1sxXSA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICggbXNnWzJdIDw8ICA4ICkgfCAoIG1zZ1szXSAgICAgICApOworCisgICAgdGlja2V0X2xlbiA9ICggbXNnWzRdIDw8IDggKSB8ICggbXNnWzVdICk7CisKKyAgICBpZiggdGlja2V0X2xlbiArIDYgKyBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSAhPSBzc2wtPmluX2hzbGVuICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIG5ldyBzZXNzaW9uIHRpY2tldCBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19ORVdfU0VTU0lPTl9USUNLRVQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInRpY2tldCBsZW5ndGg6ICVkIiwgdGlja2V0X2xlbiApICk7CisKKyAgICAvKiBXZSdyZSBub3Qgd2FpdGluZyBmb3IgYSBOZXdTZXNzaW9uVGlja2V0IG1lc3NhZ2UgYW55IG1vcmUgKi8KKyAgICBzc2wtPmhhbmRzaGFrZS0+bmV3X3Nlc3Npb25fdGlja2V0ID0gMDsKKyAgICBzc2wtPnN0YXRlID0gTUJFRFRMU19TU0xfU0VSVkVSX0NIQU5HRV9DSVBIRVJfU1BFQzsKKworICAgIC8qCisgICAgICogWmVyby1sZW5ndGggdGlja2V0IG1lYW5zIHRoZSBzZXJ2ZXIgY2hhbmdlZCBoaXMgbWluZCBhbmQgZG9lc24ndCB3YW50CisgICAgICogdG8gc2VuZCBhIHRpY2tldCBhZnRlciBhbGwsIHNvIGp1c3QgZm9yZ2V0IGl0CisgICAgICovCisgICAgaWYoIHRpY2tldF9sZW4gPT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT50aWNrZXQsCisgICAgICAgICAgICAgICAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dGlja2V0X2xlbiApOworICAgIG1iZWR0bHNfZnJlZSggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dGlja2V0ICk7CisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dGlja2V0ID0gTlVMTDsKKyAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT50aWNrZXRfbGVuID0gMDsKKworICAgIGlmKCAoIHRpY2tldCA9IG1iZWR0bHNfY2FsbG9jKCAxLCB0aWNrZXRfbGVuICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAidGlja2V0IGFsbG9jIGZhaWxlZCIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgKTsKKyAgICB9CisKKyAgICBtZW1jcHkoIHRpY2tldCwgbXNnICsgNiwgdGlja2V0X2xlbiApOworCisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dGlja2V0ID0gdGlja2V0OworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnRpY2tldF9sZW4gPSB0aWNrZXRfbGVuOworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnRpY2tldF9saWZldGltZSA9IGxpZmV0aW1lOworCisgICAgLyoKKyAgICAgKiBSRkMgNTA3NyBzZWN0aW9uIDMuNDoKKyAgICAgKiAiSWYgdGhlIGNsaWVudCByZWNlaXZlcyBhIHNlc3Npb24gdGlja2V0IGZyb20gdGhlIHNlcnZlciwgdGhlbiBpdAorICAgICAqIGRpc2NhcmRzIGFueSBTZXNzaW9uIElEIHRoYXQgd2FzIHNlbnQgaW4gdGhlIFNlcnZlckhlbGxvLiIKKyAgICAgKi8KKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInRpY2tldCBpbiB1c2UsIGRpc2NhcmRpbmcgc2Vzc2lvbiBpZCIgKSApOworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbiA9IDA7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHBhcnNlIG5ldyBzZXNzaW9uIHRpY2tldCIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICovCisKKy8qCisgKiBTU0wgaGFuZHNoYWtlIC0tIGNsaWVudCBzaWRlIC0tIHNpbmdsZSBzdGVwCisgKi8KK2ludCBtYmVkdGxzX3NzbF9oYW5kc2hha2VfY2xpZW50X3N0ZXAoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBpZiggc3NsLT5zdGF0ZSA9PSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiB8fCBzc2wtPmhhbmRzaGFrZSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiY2xpZW50IHN0YXRlOiAlZCIsIHNzbC0+c3RhdGUgKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfZmx1c2hfb3V0cHV0KCBzc2wgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gJiYKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfc3RhdGUgPT0gTUJFRFRMU19TU0xfUkVUUkFOU19TRU5ESU5HICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3Jlc2VuZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBDaGFuZ2Ugc3RhdGUgbm93LCBzbyB0aGF0IGl0IGlzIHJpZ2h0IGluIG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCksIHVzZWQKKyAgICAgKiBieSBEVExTIGZvciBkcm9wcGluZyBvdXQtb2Ytc2VxdWVuY2UgQ2hhbmdlQ2lwaGVyU3BlYyByZWNvcmRzICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgaWYoIHNzbC0+c3RhdGUgPT0gTUJFRFRMU19TU0xfU0VSVkVSX0NIQU5HRV9DSVBIRVJfU1BFQyAmJgorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+bmV3X3Nlc3Npb25fdGlja2V0ICE9IDAgKQorICAgIHsKKyAgICAgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX1NFUlZFUl9ORVdfU0VTU0lPTl9USUNLRVQ7CisgICAgfQorI2VuZGlmCisKKyAgICBzd2l0Y2goIHNzbC0+c3RhdGUgKQorICAgIHsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IRUxMT19SRVFVRVNUOgorICAgICAgICAgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX0NMSUVOVF9IRUxMTzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgLyoKKyAgICAgICAgKiAgPT0+ICAgQ2xpZW50SGVsbG8KKyAgICAgICAgKi8KKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NMSUVOVF9IRUxMTzoKKyAgICAgICAgICAgcmV0ID0gc3NsX3dyaXRlX2NsaWVudF9oZWxsbyggc3NsICk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgLyoKKyAgICAgICAgKiAgPD09ICAgU2VydmVySGVsbG8KKyAgICAgICAgKiAgICAgICAgQ2VydGlmaWNhdGUKKyAgICAgICAgKiAgICAgICggU2VydmVyS2V5RXhjaGFuZ2UgICkKKyAgICAgICAgKiAgICAgICggQ2VydGlmaWNhdGVSZXF1ZXN0ICkKKyAgICAgICAgKiAgICAgICAgU2VydmVySGVsbG9Eb25lCisgICAgICAgICovCisgICAgICAgY2FzZSBNQkVEVExTX1NTTF9TRVJWRVJfSEVMTE86CisgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9zZXJ2ZXJfaGVsbG8oIHNzbCApOworICAgICAgICAgICBicmVhazsKKworICAgICAgIGNhc2UgTUJFRFRMU19TU0xfU0VSVkVSX0NFUlRJRklDQVRFOgorICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9wYXJzZV9jZXJ0aWZpY2F0ZSggc3NsICk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBNQkVEVExTX1NTTF9TRVJWRVJfS0VZX0VYQ0hBTkdFOgorICAgICAgICAgICByZXQgPSBzc2xfcGFyc2Vfc2VydmVyX2tleV9leGNoYW5nZSggc3NsICk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBNQkVEVExTX1NTTF9DRVJUSUZJQ0FURV9SRVFVRVNUOgorICAgICAgICAgICByZXQgPSBzc2xfcGFyc2VfY2VydGlmaWNhdGVfcmVxdWVzdCggc3NsICk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBNQkVEVExTX1NTTF9TRVJWRVJfSEVMTE9fRE9ORToKKyAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX3NlcnZlcl9oZWxsb19kb25lKCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAvKgorICAgICAgICAqICA9PT4gKCBDZXJ0aWZpY2F0ZS9BbGVydCAgKQorICAgICAgICAqICAgICAgICBDbGllbnRLZXlFeGNoYW5nZQorICAgICAgICAqICAgICAgKCBDZXJ0aWZpY2F0ZVZlcmlmeSAgKQorICAgICAgICAqICAgICAgICBDaGFuZ2VDaXBoZXJTcGVjCisgICAgICAgICogICAgICAgIEZpbmlzaGVkCisgICAgICAgICovCisgICAgICAgY2FzZSBNQkVEVExTX1NTTF9DTElFTlRfQ0VSVElGSUNBVEU6CisgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX2NlcnRpZmljYXRlKCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NMSUVOVF9LRVlfRVhDSEFOR0U6CisgICAgICAgICAgIHJldCA9IHNzbF93cml0ZV9jbGllbnRfa2V5X2V4Y2hhbmdlKCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NFUlRJRklDQVRFX1ZFUklGWToKKyAgICAgICAgICAgcmV0ID0gc3NsX3dyaXRlX2NlcnRpZmljYXRlX3ZlcmlmeSggc3NsICk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBNQkVEVExTX1NTTF9DTElFTlRfQ0hBTkdFX0NJUEhFUl9TUEVDOgorICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9jaGFuZ2VfY2lwaGVyX3NwZWMoIHNzbCApOworICAgICAgICAgICBicmVhazsKKworICAgICAgIGNhc2UgTUJFRFRMU19TU0xfQ0xJRU5UX0ZJTklTSEVEOgorICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9maW5pc2hlZCggc3NsICk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgLyoKKyAgICAgICAgKiAgPD09ICAgKCBOZXdTZXNzaW9uVGlja2V0ICkKKyAgICAgICAgKiAgICAgICAgQ2hhbmdlQ2lwaGVyU3BlYworICAgICAgICAqICAgICAgICBGaW5pc2hlZAorICAgICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorICAgICAgIGNhc2UgTUJFRFRMU19TU0xfU0VSVkVSX05FV19TRVNTSU9OX1RJQ0tFVDoKKyAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX25ld19zZXNzaW9uX3RpY2tldCggc3NsICk7CisgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX1NFUlZFUl9DSEFOR0VfQ0lQSEVSX1NQRUM6CisgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3BhcnNlX2NoYW5nZV9jaXBoZXJfc3BlYyggc3NsICk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBNQkVEVExTX1NTTF9TRVJWRVJfRklOSVNIRUQ6CisgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3BhcnNlX2ZpbmlzaGVkKCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX0ZMVVNIX0JVRkZFUlM6CisgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiaGFuZHNoYWtlOiBkb25lIiApICk7CisgICAgICAgICAgIHNzbC0+c3RhdGUgPSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfV1JBUFVQOworICAgICAgICAgICBicmVhazsKKworICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSEFORFNIQUtFX1dSQVBVUDoKKyAgICAgICAgICAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3dyYXB1cCggc3NsICk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJpbnZhbGlkIHN0YXRlICVkIiwgc3NsLT5zdGF0ZSApICk7CisgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisgICB9CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NMSV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfY29va2llLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfY29va2llLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiMzJkZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9jb29raWUuYwpAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqICBEVExTIGNvb2tpZSBjYWxsYmFja3MgaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiBUaGVzZSBzZXNzaW9uIGNhbGxiYWNrcyB1c2UgYSBzaW1wbGUgY2hhaW5lZCBsaXN0CisgKiB0byBzdG9yZSBhbmQgcmV0cmlldmUgdGhlIHNlc3Npb24gaW5mb3JtYXRpb24uCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ09PS0lFX0MpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgZnJlZQorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF9jb29raWUuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiBJZiBEVExTIGlzIGluIHVzZSwgdGhlbiBhdCBsZWFzdCBvbmUgb2YgU0hBLTEsIFNIQS0yNTYsIFNIQS01MTIgaXMKKyAqIGF2YWlsYWJsZS4gVHJ5IFNIQS0yNTYgZmlyc3QsIDUxMiB3YXN0ZXMgcmVzb3VyY2VzIHNpbmNlIHdlIG5lZWQgdG8gc3RheQorICogd2l0aCBtYXggMzIgYnl0ZXMgb2YgY29va2llIGZvciBEVExTIDEuMAorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorI2RlZmluZSBDT09LSUVfTUQgICAgICAgICAgIE1CRURUTFNfTURfU0hBMjI0CisjZGVmaW5lIENPT0tJRV9NRF9PVVRMRU4gICAgMzIKKyNkZWZpbmUgQ09PS0lFX0hNQUNfTEVOICAgICAyOAorI2VsaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorI2RlZmluZSBDT09LSUVfTUQgICAgICAgICAgIE1CRURUTFNfTURfU0hBMzg0CisjZGVmaW5lIENPT0tJRV9NRF9PVVRMRU4gICAgNDgKKyNkZWZpbmUgQ09PS0lFX0hNQUNfTEVOICAgICAyOAorI2VsaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyNkZWZpbmUgQ09PS0lFX01EICAgICAgICAgICBNQkVEVExTX01EX1NIQTEKKyNkZWZpbmUgQ09PS0lFX01EX09VVExFTiAgICAyMAorI2RlZmluZSBDT09LSUVfSE1BQ19MRU4gICAgIDIwCisjZWxzZQorI2Vycm9yICJEVExTIGhlbGxvIHZlcmlmeSBuZWVkcyBTSEEtMSBvciBTSEEtMiIKKyNlbmRpZgorCisvKgorICogQ29va2llcyBhcmUgZm9ybWVkIG9mIGEgNC1ieXRlcyB0aW1lc3RhbXAgKG9yIHNlcmlhbCBudW1iZXIpIGFuZAorICogYW4gSE1BQyBvZiB0aW1lc3RlbXAgYW5kIGNsaWVudCBJRC4KKyAqLworI2RlZmluZSBDT09LSUVfTEVOICAgICAgKCA0ICsgQ09PS0lFX0hNQUNfTEVOICkKKwordm9pZCBtYmVkdGxzX3NzbF9jb29raWVfaW5pdCggbWJlZHRsc19zc2xfY29va2llX2N0eCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX21kX2luaXQoICZjdHgtPmhtYWNfY3R4ICk7CisjaWYgIWRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgY3R4LT5zZXJpYWwgPSAwOworI2VuZGlmCisgICAgY3R4LT50aW1lb3V0ID0gTUJFRFRMU19TU0xfQ09PS0lFX1RJTUVPVVQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc19tdXRleF9pbml0KCAmY3R4LT5tdXRleCApOworI2VuZGlmCit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY29va2llX3NldF90aW1lb3V0KCBtYmVkdGxzX3NzbF9jb29raWVfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZGVsYXkgKQoreworICAgIGN0eC0+dGltZW91dCA9IGRlbGF5OworfQorCit2b2lkIG1iZWR0bHNfc3NsX2Nvb2tpZV9mcmVlKCBtYmVkdGxzX3NzbF9jb29raWVfY3R4ICpjdHggKQoreworICAgIG1iZWR0bHNfbWRfZnJlZSggJmN0eC0+aG1hY19jdHggKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX211dGV4X2luaXQoICZjdHgtPm11dGV4ICk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHggKSApOworfQorCitpbnQgbWJlZHRsc19zc2xfY29va2llX3NldHVwKCBtYmVkdGxzX3NzbF9jb29raWVfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIga2V5W0NPT0tJRV9NRF9PVVRMRU5dOworCisgICAgaWYoICggcmV0ID0gZl9ybmcoIHBfcm5nLCBrZXksIHNpemVvZigga2V5ICkgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJmN0eC0+aG1hY19jdHgsIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIENPT0tJRV9NRCApLCAxICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfbWRfaG1hY19zdGFydHMoICZjdHgtPmhtYWNfY3R4LCBrZXksIHNpemVvZigga2V5ICkgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBrZXksIHNpemVvZigga2V5ICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogR2VuZXJhdGUgdGhlIEhNQUMgcGFydCBvZiBhIGNvb2tpZQorICovCitzdGF0aWMgaW50IHNzbF9jb29raWVfaG1hYyggbWJlZHRsc19tZF9jb250ZXh0X3QgKmhtYWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgdGltZVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNsaV9pZCwgc2l6ZV90IGNsaV9pZF9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgaG1hY19vdXRbQ09PS0lFX01EX09VVExFTl07CisKKyAgICBpZiggKHNpemVfdCkoIGVuZCAtICpwICkgPCBDT09LSUVfSE1BQ19MRU4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICBpZiggbWJlZHRsc19tZF9obWFjX3Jlc2V0KCAgaG1hY19jdHggKSAhPSAwIHx8CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoIGhtYWNfY3R4LCB0aW1lLCA0ICkgIT0gMCB8fAorICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCBobWFjX2N0eCwgY2xpX2lkLCBjbGlfaWRfbGVuICkgIT0gMCB8fAorICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCBobWFjX2N0eCwgaG1hY19vdXQgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgbWVtY3B5KCAqcCwgaG1hY19vdXQsIENPT0tJRV9ITUFDX0xFTiApOworICAgICpwICs9IENPT0tJRV9ITUFDX0xFTjsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogR2VuZXJhdGUgY29va2llIGZvciBEVExTIENsaWVudEhlbGxvIHZlcmlmaWNhdGlvbgorICovCitpbnQgbWJlZHRsc19zc2xfY29va2llX3dyaXRlKCB2b2lkICpwX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNsaV9pZCwgc2l6ZV90IGNsaV9pZF9sZW4gKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19zc2xfY29va2llX2N0eCAqY3R4ID0gKG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHggKikgcF9jdHg7CisgICAgdW5zaWduZWQgbG9uZyB0OworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGNsaV9pZCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoc2l6ZV90KSggZW5kIC0gKnAgKSA8IENPT0tJRV9MRU4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgIHQgPSAodW5zaWduZWQgbG9uZykgbWJlZHRsc190aW1lKCBOVUxMICk7CisjZWxzZQorICAgIHQgPSBjdHgtPnNlcmlhbCsrOworI2VuZGlmCisKKyAgICAoKnApWzBdID0gKHVuc2lnbmVkIGNoYXIpKCB0ID4+IDI0ICk7CisgICAgKCpwKVsxXSA9ICh1bnNpZ25lZCBjaGFyKSggdCA+PiAxNiApOworICAgICgqcClbMl0gPSAodW5zaWduZWQgY2hhcikoIHQgPj4gIDggKTsKKyAgICAoKnApWzNdID0gKHVuc2lnbmVkIGNoYXIpKCB0ICAgICAgICk7CisgICAgKnAgKz0gNDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZjdHgtPm11dGV4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKyByZXQgKTsKKyNlbmRpZgorCisgICAgcmV0ID0gc3NsX2Nvb2tpZV9obWFjKCAmY3R4LT5obWFjX2N0eCwgKnAgLSA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgZW5kLCBjbGlfaWQsIGNsaV9pZF9sZW4gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZjdHgtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIENoZWNrIGEgY29va2llCisgKi8KK2ludCBtYmVkdGxzX3NzbF9jb29raWVfY2hlY2soIHZvaWQgKnBfY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvb2tpZSwgc2l6ZV90IGNvb2tpZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xpX2lkLCBzaXplX3QgY2xpX2lkX2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciByZWZfaG1hY1tDT09LSUVfSE1BQ19MRU5dOworICAgIGludCByZXQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSByZWZfaG1hYzsKKyAgICBtYmVkdGxzX3NzbF9jb29raWVfY3R4ICpjdHggPSAobWJlZHRsc19zc2xfY29va2llX2N0eCAqKSBwX2N0eDsKKyAgICB1bnNpZ25lZCBsb25nIGN1cl90aW1lLCBjb29raWVfdGltZTsKKworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjbGlfaWQgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggY29va2llX2xlbiAhPSBDT09LSUVfTEVOICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXV0ZXhfbG9jayggJmN0eC0+bXV0ZXggKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiArIHJldCApOworI2VuZGlmCisKKyAgICBpZiggc3NsX2Nvb2tpZV9obWFjKCAmY3R4LT5obWFjX2N0eCwgY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICZwLCBwICsgc2l6ZW9mKCByZWZfaG1hYyApLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNsaV9pZCwgY2xpX2lkX2xlbiApICE9IDAgKQorICAgICAgICByZXQgPSAtMTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZjdHgtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgKTsKKyNlbmRpZgorCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCBtYmVkdGxzX3NzbF9zYWZlcl9tZW1jbXAoIGNvb2tpZSArIDQsIHJlZl9obWFjLCBzaXplb2YoIHJlZl9obWFjICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICBjdXJfdGltZSA9ICh1bnNpZ25lZCBsb25nKSBtYmVkdGxzX3RpbWUoIE5VTEwgKTsKKyNlbHNlCisgICAgY3VyX3RpbWUgPSBjdHgtPnNlcmlhbDsKKyNlbmRpZgorCisgICAgY29va2llX3RpbWUgPSAoICh1bnNpZ25lZCBsb25nKSBjb29raWVbMF0gPDwgMjQgKSB8CisgICAgICAgICAgICAgICAgICAoICh1bnNpZ25lZCBsb25nKSBjb29raWVbMV0gPDwgMTYgKSB8CisgICAgICAgICAgICAgICAgICAoICh1bnNpZ25lZCBsb25nKSBjb29raWVbMl0gPDwgIDggKSB8CisgICAgICAgICAgICAgICAgICAoICh1bnNpZ25lZCBsb25nKSBjb29raWVbM10gICAgICAgKTsKKworICAgIGlmKCBjdHgtPnRpbWVvdXQgIT0gMCAmJiBjdXJfdGltZSAtIGNvb2tpZV90aW1lID4gY3R4LT50aW1lb3V0ICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ09PS0lFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9zcnYuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9zcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzBkMmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3Nydi5jCkBAIC0wLDAgKzEsMzkyNiBAQAorLyoKKyAqICBTU0x2My9UTFN2MSBzZXJ2ZXItc2lkZSBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgZnJlZQorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzL2RlYnVnLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisjaW5jbHVkZSAibWJlZHRscy9lY3AuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtX3RpbWUuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZKQoraW50IG1iZWR0bHNfc3NsX3NldF9jbGllbnRfdHJhbnNwb3J0X2lkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlsZW4gKQoreworICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ICE9IE1CRURUTFNfU1NMX0lTX1NFUlZFUiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+Y2xpX2lkICk7CisKKyAgICBpZiggKCBzc2wtPmNsaV9pZCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBpbGVuICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEICk7CisKKyAgICBtZW1jcHkoIHNzbC0+Y2xpX2lkLCBpbmZvLCBpbGVuICk7CisgICAgc3NsLT5jbGlfaWRfbGVuID0gaWxlbjsKKworICAgIHJldHVybiggMCApOworfQorCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19jb29raWVzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGVfdCAqZl9jb29raWVfd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb29raWVfY2hlY2tfdCAqZl9jb29raWVfY2hlY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX2Nvb2tpZSApCit7CisgICAgY29uZi0+Zl9jb29raWVfd3JpdGUgPSBmX2Nvb2tpZV93cml0ZTsKKyAgICBjb25mLT5mX2Nvb2tpZV9jaGVjayA9IGZfY29va2llX2NoZWNrOworICAgIGNvbmYtPnBfY29va2llICAgICAgID0gcF9jb29raWU7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTikKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3NlcnZlcm5hbWVfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IHNlcnZlcm5hbWVfbGlzdF9zaXplLCBob3N0bmFtZV9sZW47CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAicGFyc2UgU2VydmVyTmFtZSBleHRlbnNpb24iICkgKTsKKworICAgIHNlcnZlcm5hbWVfbGlzdF9zaXplID0gKCAoIGJ1ZlswXSA8PCA4ICkgfCAoIGJ1ZlsxXSApICk7CisgICAgaWYoIHNlcnZlcm5hbWVfbGlzdF9zaXplICsgMiAhPSBsZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIHAgPSBidWYgKyAyOworICAgIHdoaWxlKCBzZXJ2ZXJuYW1lX2xpc3Rfc2l6ZSA+IDAgKQorICAgIHsKKyAgICAgICAgaG9zdG5hbWVfbGVuID0gKCAoIHBbMV0gPDwgOCApIHwgcFsyXSApOworICAgICAgICBpZiggaG9zdG5hbWVfbGVuICsgMyA+IHNlcnZlcm5hbWVfbGlzdF9zaXplICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBwWzBdID09IE1CRURUTFNfVExTX0VYVF9TRVJWRVJOQU1FX0hPU1ROQU1FICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gc3NsLT5jb25mLT5mX3NuaSggc3NsLT5jb25mLT5wX3NuaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbCwgcCArIDMsIGhvc3RuYW1lX2xlbiApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJzc2xfc25pX3dyYXBwZXIiLCByZXQgKTsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5SRUNPR05JWkVEX05BTUUgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgfQorCisgICAgICAgIHNlcnZlcm5hbWVfbGlzdF9zaXplIC09IGhvc3RuYW1lX2xlbiArIDM7CisgICAgICAgIHAgKz0gaG9zdG5hbWVfbGVuICsgMzsKKyAgICB9CisKKyAgICBpZiggc2VydmVybmFtZV9saXN0X3NpemUgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTiAqLworCitzdGF0aWMgaW50IHNzbF9wYXJzZV9yZW5lZ290aWF0aW9uX2luZm8oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgIT0gTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgLyogQ2hlY2sgdmVyaWZ5LWRhdGEgaW4gY29uc3RhbnQtdGltZS4gVGhlIGxlbmd0aCBPVE9IIGlzIG5vIHNlY3JldCAqLworICAgICAgICBpZiggbGVuICAgICE9IDEgKyBzc2wtPnZlcmlmeV9kYXRhX2xlbiB8fAorICAgICAgICAgICAgYnVmWzBdICE9ICAgICBzc2wtPnZlcmlmeV9kYXRhX2xlbiB8fAorICAgICAgICAgICAgbWJlZHRsc19zc2xfc2FmZXJfbWVtY21wKCBidWYgKyAxLCBzc2wtPnBlZXJfdmVyaWZ5X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dmVyaWZ5X2RhdGFfbGVuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibm9uLW1hdGNoaW5nIHJlbmVnb3RpYXRpb24gaW5mbyIgKSApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworICAgIHsKKyAgICAgICAgaWYoIGxlbiAhPSAxIHx8IGJ1ZlswXSAhPSAweDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm5vbi16ZXJvIGxlbmd0aCByZW5lZ290aWF0aW9uIGluZm8iICkgKTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2VuZF9mYXRhbF9oYW5kc2hha2VfZmFpbHVyZSggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgICAgIH0KKworICAgICAgICBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID0gTUJFRFRMU19TU0xfU0VDVVJFX1JFTkVHT1RJQVRJT047CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3NpZ25hdHVyZV9hbGdvcml0aG1zX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIHNpemVfdCBzaWdfYWxnX2xpc3Rfc2l6ZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IGJ1ZiArIGxlbjsKKyAgICBjb25zdCBpbnQgKm1kX2N1cjsKKworCisgICAgc2lnX2FsZ19saXN0X3NpemUgPSAoICggYnVmWzBdIDw8IDggKSB8ICggYnVmWzFdICkgKTsKKyAgICBpZiggc2lnX2FsZ19saXN0X3NpemUgKyAyICE9IGxlbiB8fAorICAgICAgICBzaWdfYWxnX2xpc3Rfc2l6ZSAlIDIgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3Igbm93LCBpZ25vcmUgdGhlIFNpZ25hdHVyZUFsZ29yaXRobSBwYXJ0IGFuZCByZWx5IG9uIG9mZmVyZWQKKyAgICAgKiBjaXBoZXJzdWl0ZXMgb25seSBmb3IgdGhhdCBwYXJ0LiBUbyBiZSBmaXhlZCBsYXRlci4KKyAgICAgKgorICAgICAqIFNvLCBqdXN0IGxvb2sgYXQgdGhlIEhhc2hBbGdvcml0aG0gcGFydC4KKyAgICAgKi8KKyAgICBmb3IoIG1kX2N1ciA9IHNzbC0+Y29uZi0+c2lnX2hhc2hlczsgKm1kX2N1ciAhPSBNQkVEVExTX01EX05PTkU7IG1kX2N1cisrICkgeworICAgICAgICBmb3IoIHAgPSBidWYgKyAyOyBwIDwgZW5kOyBwICs9IDIgKSB7CisgICAgICAgICAgICBpZiggKm1kX2N1ciA9PSAoaW50KSBtYmVkdGxzX3NzbF9tZF9hbGdfZnJvbV9oYXNoKCBwWzBdICkgKSB7CisgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnNpZ19hbGcgPSBwWzBdOworICAgICAgICAgICAgICAgIGdvdG8gaGF2ZV9zaWdfYWxnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogU29tZSBrZXkgZWNoYW5nZXMgZG8gbm90IG5lZWQgc2lnbmF0dXJlcyBhdCBhbGwgKi8KKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggIm5vIHNpZ25hdHVyZV9hbGdvcml0aG0gaW4gY29tbW9uIiApICk7CisgICAgcmV0dXJuKCAwICk7CisKK2hhdmVfc2lnX2FsZzoKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbyB2Mywgc2lnbmF0dXJlX2FsZ29yaXRobSBleHQ6ICVkIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+c2lnX2FsZyApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgJiYKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcGFyc2Vfc3VwcG9ydGVkX2VsbGlwdGljX2N1cnZlcyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgc2l6ZV90IGxpc3Rfc2l6ZSwgb3VyX3NpemU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcDsKKyAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9pbmZvLCAqKmN1cnZlczsKKworICAgIGxpc3Rfc2l6ZSA9ICggKCBidWZbMF0gPDwgOCApIHwgKCBidWZbMV0gKSApOworICAgIGlmKCBsaXN0X3NpemUgKyAyICE9IGxlbiB8fAorICAgICAgICBsaXN0X3NpemUgJSAyICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4gdW5sZXNzIGNsaWVudCBkdXBsaWNhdGVzIHRoZSBleHRlbnNpb24gKi8KKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPmN1cnZlcyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICAvKiBEb24ndCBhbGxvdyBvdXIgcGVlciB0byBtYWtlIHVzIGFsbG9jYXRlIHRvbyBtdWNoIG1lbW9yeSwKKyAgICAgKiBhbmQgbGVhdmUgcm9vbSBmb3IgYSBmaW5hbCAwICovCisgICAgb3VyX3NpemUgPSBsaXN0X3NpemUgLyAyICsgMTsKKyAgICBpZiggb3VyX3NpemUgPiBNQkVEVExTX0VDUF9EUF9NQVggKQorICAgICAgICBvdXJfc2l6ZSA9IE1CRURUTFNfRUNQX0RQX01BWDsKKworICAgIGlmKCAoIGN1cnZlcyA9IG1iZWR0bHNfY2FsbG9jKCBvdXJfc2l6ZSwgc2l6ZW9mKCAqY3VydmVzICkgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgKTsKKworICAgIHNzbC0+aGFuZHNoYWtlLT5jdXJ2ZXMgPSBjdXJ2ZXM7CisKKyAgICBwID0gYnVmICsgMjsKKyAgICB3aGlsZSggbGlzdF9zaXplID4gMCAmJiBvdXJfc2l6ZSA+IDEgKQorICAgIHsKKyAgICAgICAgY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV90bHNfaWQoICggcFswXSA8PCA4ICkgfCBwWzFdICk7CisKKyAgICAgICAgaWYoIGN1cnZlX2luZm8gIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgICpjdXJ2ZXMrKyA9IGN1cnZlX2luZm87CisgICAgICAgICAgICBvdXJfc2l6ZS0tOworICAgICAgICB9CisKKyAgICAgICAgbGlzdF9zaXplIC09IDI7CisgICAgICAgIHAgKz0gMjsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCBzc2xfcGFyc2Vfc3VwcG9ydGVkX3BvaW50X2Zvcm1hdHMoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgc2l6ZV90IGxpc3Rfc2l6ZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOworCisgICAgbGlzdF9zaXplID0gYnVmWzBdOworICAgIGlmKCBsaXN0X3NpemUgKyAxICE9IGxlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgcCA9IGJ1ZiArIDE7CisgICAgd2hpbGUoIGxpc3Rfc2l6ZSA+IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHBbMF0gPT0gTUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VEIHx8CisgICAgICAgICAgICBwWzBdID09IE1CRURUTFNfRUNQX1BGX0NPTVBSRVNTRUQgKQorICAgICAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykgfHwgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgucG9pbnRfZm9ybWF0ID0gcFswXTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY3R4LnBvaW50X2Zvcm1hdCA9IHBbMF07CisjZW5kaWYKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggNCwgKCAicG9pbnQgZm9ybWF0IHNlbGVjdGVkOiAlZCIsIHBbMF0gKSApOworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKworICAgICAgICBsaXN0X3NpemUtLTsKKyAgICAgICAgcCsrOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DIHx8IE1CRURUTFNfRUNEU0FfQyB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9lY2pwYWtlX2trcHAoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIG1iZWR0bHNfZWNqcGFrZV9jaGVjayggJnNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2N0eCApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJza2lwIGVjanBha2Uga2twcCBleHRlbnNpb24iICkgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfb25lKCAmc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBsZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfb25lIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgLyogT25seSBtYXJrIHRoZSBleHRlbnNpb24gYXMgT0sgd2hlbiB3ZSdyZSBzdXJlIGl0IGlzICovCisgICAgc3NsLT5oYW5kc2hha2UtPmNsaV9leHRzIHw9IE1CRURUTFNfVExTX0VYVF9FQ0pQQUtFX0tLUFBfT0s7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX21heF9mcmFnbWVudF9sZW5ndGhfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGlmKCBsZW4gIT0gMSB8fCBidWZbMF0gPj0gTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOX0lOVkFMSUQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPm1mbF9jb2RlID0gYnVmWzBdOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3RydW5jYXRlZF9obWFjX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGlmKCBsZW4gIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgKCh2b2lkKSBidWYpOworCisgICAgaWYoIHNzbC0+Y29uZi0+dHJ1bmNfaG1hYyA9PSBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0VOQUJMRUQgKQorICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT50cnVuY19obWFjID0gTUJFRFRMU19TU0xfVFJVTkNfSE1BQ19FTkFCTEVEOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX2VuY3J5cHRfdGhlbl9tYWNfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaWYoIGxlbiAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICAoKHZvaWQpIGJ1Zik7CisKKyAgICBpZiggc3NsLT5jb25mLT5lbmNyeXB0X3RoZW5fbWFjID09IE1CRURUTFNfU1NMX0VUTV9FTkFCTEVEICYmCisgICAgICAgIHNzbC0+bWlub3JfdmVyICE9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCisgICAgeworICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5lbmNyeXB0X3RoZW5fbWFjID0gTUJFRFRMU19TU0xfRVRNX0VOQUJMRUQ7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorc3RhdGljIGludCBzc2xfcGFyc2VfZXh0ZW5kZWRfbXNfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaWYoIGxlbiAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICAoKHZvaWQpIGJ1Zik7CisKKyAgICBpZiggc3NsLT5jb25mLT5leHRlbmRlZF9tcyA9PSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19FTkFCTEVEICYmCisgICAgICAgIHNzbC0+bWlub3JfdmVyICE9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCisgICAgeworICAgICAgICBzc2wtPmhhbmRzaGFrZS0+ZXh0ZW5kZWRfbXMgPSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19FTkFCTEVEOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorc3RhdGljIGludCBzc2xfcGFyc2Vfc2Vzc2lvbl90aWNrZXRfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uIHNlc3Npb247CisKKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uX2luaXQoICZzZXNzaW9uICk7CisKKyAgICBpZiggc3NsLT5jb25mLT5mX3RpY2tldF9wYXJzZSA9PSBOVUxMIHx8CisgICAgICAgIHNzbC0+Y29uZi0+Zl90aWNrZXRfd3JpdGUgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICAvKiBSZW1lbWJlciB0aGUgY2xpZW50IGFza2VkIHVzIHRvIHNlbmQgYSBuZXcgdGlja2V0ICovCisgICAgc3NsLT5oYW5kc2hha2UtPm5ld19zZXNzaW9uX3RpY2tldCA9IDE7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInRpY2tldCBsZW5ndGg6ICVkIiwgbGVuICkgKTsKKworICAgIGlmKCBsZW4gPT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgIT0gTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJ0aWNrZXQgcmVqZWN0ZWQ6IHJlbmVnb3RpYXRpbmciICkgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKworICAgIC8qCisgICAgICogRmFpbHVyZXMgYXJlIG9rOiBqdXN0IGlnbm9yZSB0aGUgdGlja2V0IGFuZCBwcm9jZWVkLgorICAgICAqLworICAgIGlmKCAoIHJldCA9IHNzbC0+Y29uZi0+Zl90aWNrZXRfcGFyc2UoIHNzbC0+Y29uZi0+cF90aWNrZXQsICZzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25fZnJlZSggJnNlc3Npb24gKTsKKworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQyApCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInRpY2tldCBpcyBub3QgYXV0aGVudGljIiApICk7CisgICAgICAgIGVsc2UgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfU0VTU0lPTl9USUNLRVRfRVhQSVJFRCApCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInRpY2tldCBpcyBleHBpcmVkIiApICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3RpY2tldF9wYXJzZSIsIHJldCApOworCisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIC8qCisgICAgICogS2VlcCB0aGUgc2Vzc2lvbiBJRCBzZW50IGJ5IHRoZSBjbGllbnQsIHNpbmNlIHdlIE1VU1Qgc2VuZCBpdCBiYWNrIHRvCisgICAgICogaW5mb3JtIHRoZW0gd2UncmUgYWNjZXB0aW5nIHRoZSB0aWNrZXQgIChSRkMgNTA3NyBzZWN0aW9uIDMuNCkKKyAgICAgKi8KKyAgICBzZXNzaW9uLmlkX2xlbiA9IHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbjsKKyAgICBtZW1jcHkoICZzZXNzaW9uLmlkLCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCwgc2Vzc2lvbi5pZF9sZW4gKTsKKworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25fZnJlZSggc3NsLT5zZXNzaW9uX25lZ290aWF0ZSApOworICAgIG1lbWNweSggc3NsLT5zZXNzaW9uX25lZ290aWF0ZSwgJnNlc3Npb24sIHNpemVvZiggbWJlZHRsc19zc2xfc2Vzc2lvbiApICk7CisKKyAgICAvKiBaZXJvaXplIGluc3RlYWQgb2YgZnJlZSBhcyB3ZSBjb3BpZWQgdGhlIGNvbnRlbnQgKi8KKyAgICBtYmVkdGxzX3plcm9pemUoICZzZXNzaW9uLCBzaXplb2YoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIHRpY2tldCIgKSApOworCisgICAgc3NsLT5oYW5kc2hha2UtPnJlc3VtZSA9IDE7CisKKyAgICAvKiBEb24ndCBzZW5kIGEgbmV3IHRpY2tldCBhZnRlciBhbGwsIHRoaXMgb25lIGlzIE9LICovCisgICAgc3NsLT5oYW5kc2hha2UtPm5ld19zZXNzaW9uX3RpY2tldCA9IDA7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX2FscG5fZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBzaXplX3QgbGlzdF9sZW4sIGN1cl9sZW4sIG91cnNfbGVuOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRoZWlycywgKnN0YXJ0LCAqZW5kOworICAgIGNvbnN0IGNoYXIgKipvdXJzOworCisgICAgLyogSWYgQUxQTiBub3QgY29uZmlndXJlZCwganVzdCBpZ25vcmUgdGhlIGV4dGVuc2lvbiAqLworICAgIGlmKCBzc2wtPmNvbmYtPmFscG5fbGlzdCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAvKgorICAgICAqIG9wYXF1ZSBQcm90b2NvbE5hbWU8MS4uMl44LTE+OworICAgICAqCisgICAgICogc3RydWN0IHsKKyAgICAgKiAgICAgUHJvdG9jb2xOYW1lIHByb3RvY29sX25hbWVfbGlzdDwyLi4yXjE2LTE+CisgICAgICogfSBQcm90b2NvbE5hbWVMaXN0OworICAgICAqLworCisgICAgLyogTWluIGxlbmd0aCBpcyAyIChsaXN0X2xlbikgKyAxIChuYW1lX2xlbikgKyAxIChuYW1lKSAqLworICAgIGlmKCBsZW4gPCA0ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworCisgICAgbGlzdF9sZW4gPSAoIGJ1ZlswXSA8PCA4ICkgfCBidWZbMV07CisgICAgaWYoIGxpc3RfbGVuICE9IGxlbiAtIDIgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisKKyAgICAvKgorICAgICAqIFVzZSBvdXIgb3JkZXIgb2YgcHJlZmVyZW5jZQorICAgICAqLworICAgIHN0YXJ0ID0gYnVmICsgMjsKKyAgICBlbmQgPSBidWYgKyBsZW47CisgICAgZm9yKCBvdXJzID0gc3NsLT5jb25mLT5hbHBuX2xpc3Q7ICpvdXJzICE9IE5VTEw7IG91cnMrKyApCisgICAgeworICAgICAgICBvdXJzX2xlbiA9IHN0cmxlbiggKm91cnMgKTsKKyAgICAgICAgZm9yKCB0aGVpcnMgPSBzdGFydDsgdGhlaXJzICE9IGVuZDsgdGhlaXJzICs9IGN1cl9sZW4gKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJZiB0aGUgbGlzdCBpcyB3ZWxsIGZvcm1lZCwgd2Ugc2hvdWxkIGdldCBlcXVhbGl0eSBmaXJzdCAqLworICAgICAgICAgICAgaWYoIHRoZWlycyA+IGVuZCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworCisgICAgICAgICAgICBjdXJfbGVuID0gKnRoZWlycysrOworCisgICAgICAgICAgICAvKiBFbXB0eSBzdHJpbmdzIE1VU1QgTk9UIGJlIGluY2x1ZGVkICovCisgICAgICAgICAgICBpZiggY3VyX2xlbiA9PSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisKKyAgICAgICAgICAgIGlmKCBjdXJfbGVuID09IG91cnNfbGVuICYmCisgICAgICAgICAgICAgICAgbWVtY21wKCB0aGVpcnMsICpvdXJzLCBjdXJfbGVuICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3NsLT5hbHBuX2Nob3NlbiA9ICpvdXJzOworICAgICAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogSWYgd2UgZ2V0IHRoZXJlLCBubyBtYXRjaCB3YXMgZm91bmQgKi8KKyAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX05PX0FQUExJQ0FUSU9OX1BST1RPQ09MICk7CisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0FMUE4gKi8KKworLyoKKyAqIEF1eGlsaWFyeSBmdW5jdGlvbnMgZm9yIFNlcnZlckhlbGxvIHBhcnNpbmcgYW5kIHJlbGF0ZWQgYWN0aW9ucworICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKy8qCisgKiBSZXR1cm4gMCBpZiB0aGUgZ2l2ZW4ga2V5IHVzZXMgb25lIG9mIHRoZSBhY2NlcHRhYmxlIGN1cnZlcywgLTEgb3RoZXJ3aXNlCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKK3N0YXRpYyBpbnQgc3NsX2NoZWNrX2tleV9jdXJ2ZSggbWJlZHRsc19wa19jb250ZXh0ICpwaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqKmN1cnZlcyApCit7CisgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqKmNydiA9IGN1cnZlczsKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pZCBncnBfaWQgPSBtYmVkdGxzX3BrX2VjKCAqcGsgKS0+Z3JwLmlkOworCisgICAgd2hpbGUoICpjcnYgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggKCpjcnYpLT5ncnBfaWQgPT0gZ3JwX2lkICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICBjcnYrKzsKKyAgICB9CisKKyAgICByZXR1cm4oIC0xICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9DICovCisKKy8qCisgKiBUcnkgcGlja2luZyBhIGNlcnRpZmljYXRlIGZvciB0aGlzIGNpcGhlcnN1aXRlLAorICogcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBzc2xfcGlja19jZXJ0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKiBjaXBoZXJzdWl0ZV9pbmZvICkKK3sKKyAgICBtYmVkdGxzX3NzbF9rZXlfY2VydCAqY3VyLCAqbGlzdCwgKmZhbGxiYWNrID0gTlVMTDsKKyAgICBtYmVkdGxzX3BrX3R5cGVfdCBwa19hbGcgPSBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfc2lnX3BrX2FsZyggY2lwaGVyc3VpdGVfaW5mbyApOworICAgIHVpbnQzMl90IGZsYWdzOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQorICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+c25pX2tleV9jZXJ0ICE9IE5VTEwgKQorICAgICAgICBsaXN0ID0gc3NsLT5oYW5kc2hha2UtPnNuaV9rZXlfY2VydDsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgbGlzdCA9IHNzbC0+Y29uZi0+a2V5X2NlcnQ7CisKKyAgICBpZiggcGtfYWxnID09IE1CRURUTFNfUEtfTk9ORSApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjaXBoZXJzdWl0ZSByZXF1aXJlcyBjZXJ0aWZpY2F0ZSIgKSApOworCisgICAgaWYoIGxpc3QgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoYXMgbm8gY2VydGlmaWNhdGUiICkgKTsKKyAgICAgICAgcmV0dXJuKCAtMSApOworICAgIH0KKworICAgIGZvciggY3VyID0gbGlzdDsgY3VyICE9IE5VTEw7IGN1ciA9IGN1ci0+bmV4dCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19DUlQoIDMsICJjYW5kaWRhdGUgY2VydGlmaWNhdGUgY2hhaW4sIGNlcnRpZmljYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyLT5jZXJ0ICk7CisKKyAgICAgICAgaWYoICEgbWJlZHRsc19wa19jYW5fZG8oIGN1ci0+a2V5LCBwa19hbGcgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2VydGlmaWNhdGUgbWlzbWF0Y2g6IGtleSB0eXBlIiApICk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgYXZvaWRzIHNlbmRpbmcgdGhlIGNsaWVudCBhIGNlcnQgaXQnbGwgcmVqZWN0IGJhc2VkIG9uCisgICAgICAgICAqIGtleVVzYWdlIG9yIG90aGVyIGV4dGVuc2lvbnMuCisgICAgICAgICAqCisgICAgICAgICAqIEl0IGFsc28gYWxsb3dzIHRoZSB1c2VyIHRvIHByb3Zpc2lvbiBkaWZmZXJlbnQgY2VydGlmaWNhdGVzIGZvcgorICAgICAgICAgKiBkaWZmZXJlbnQgdXNlcyBiYXNlZCBvbiBrZXlVc2FnZSwgZWcgaWYgdGhleSB3YW50IHRvIGF2b2lkIHNpZ25pbmcKKyAgICAgICAgICogYW5kIGRlY3J5cHRpbmcgd2l0aCB0aGUgc2FtZSBSU0Ega2V5LgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIG1iZWR0bHNfc3NsX2NoZWNrX2NlcnRfdXNhZ2UoIGN1ci0+Y2VydCwgY2lwaGVyc3VpdGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9JU19TRVJWRVIsICZmbGFncyApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNlcnRpZmljYXRlIG1pc21hdGNoOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZXh0ZW5kZWQpIGtleSB1c2FnZSBleHRlbnNpb24iICkgKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICAgICAgaWYoIHBrX2FsZyA9PSBNQkVEVExTX1BLX0VDRFNBICYmCisgICAgICAgICAgICBzc2xfY2hlY2tfa2V5X2N1cnZlKCBjdXItPmtleSwgc3NsLT5oYW5kc2hha2UtPmN1cnZlcyApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNlcnRpZmljYXRlIG1pc21hdGNoOiBlbGxpcHRpYyBjdXJ2ZSIgKSApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIC8qCisgICAgICAgICAqIFRyeSB0byBzZWxlY3QgYSBTSEEtMSBjZXJ0aWZpY2F0ZSBmb3IgcHJlLTEuMiBjbGllbnRzLCBidXQgc3RpbGwKKyAgICAgICAgICogcHJlc2VudCB0aGVtIGEgU0hBLWhpZ2hlciBjZXJ0IHJhdGhlciB0aGFuIGZhaWxpbmcgaWYgaXQncyB0aGUgb25seQorICAgICAgICAgKiBvbmUgd2UgZ290IHRoYXQgc2F0aXNmaWVzIHRoZSBvdGhlciBjb25kaXRpb25zLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyIDwgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICYmCisgICAgICAgICAgICBjdXItPmNlcnQtPnNpZ19tZCAhPSBNQkVEVExTX01EX1NIQTEgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggZmFsbGJhY2sgPT0gTlVMTCApCisgICAgICAgICAgICAgICAgZmFsbGJhY2sgPSBjdXI7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjZXJ0aWZpY2F0ZSBub3QgcHJlZmVycmVkOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hhLTIgd2l0aCBwcmUtVExTIDEuMiBjbGllbnQiICkgKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogSWYgd2UgZ2V0IHRoZXJlLCB3ZSBnb3QgYSB3aW5uZXIgKi8KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYoIGN1ciA9PSBOVUxMICkKKyAgICAgICAgY3VyID0gZmFsbGJhY2s7CisKKyAgICAvKiBEbyBub3QgdXBkYXRlIHNzbC0+aGFuZHNoYWtlLT5rZXlfY2VydCB1bmxlc3MgdGhlcmUgaXMgYSBtYXRjaCAqLworICAgIGlmKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBzc2wtPmhhbmRzaGFrZS0+a2V5X2NlcnQgPSBjdXI7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0NSVCggMywgInNlbGVjdGVkIGNlcnRpZmljYXRlIGNoYWluLCBjZXJ0aWZpY2F0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5rZXlfY2VydC0+Y2VydCApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIC0xICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKy8qCisgKiBDaGVjayBpZiBhIGdpdmVuIGNpcGhlcnN1aXRlIGlzIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBvdXIgY29uZmlnL2tleXMvZXRjCisgKiBTZXRzIGNpcGhlcnN1aXRlX2luZm8gb25seSBpZiB0aGUgc3VpdGUgbWF0Y2hlcy4KKyAqLworc3RhdGljIGludCBzc2xfY2lwaGVyc3VpdGVfbWF0Y2goIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IHN1aXRlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKipjaXBoZXJzdWl0ZV9pbmZvICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpzdWl0ZV9pbmZvOworCisgICAgc3VpdGVfaW5mbyA9IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQoIHN1aXRlX2lkICk7CisgICAgaWYoIHN1aXRlX2luZm8gPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInRyeWluZyBjaXBoZXJzdWl0ZTogJXMiLCBzdWl0ZV9pbmZvLT5uYW1lICkgKTsKKworICAgIGlmKCBzdWl0ZV9pbmZvLT5taW5fbWlub3JfdmVyID4gc3NsLT5taW5vcl92ZXIgfHwKKyAgICAgICAgc3VpdGVfaW5mby0+bWF4X21pbm9yX3ZlciA8IHNzbC0+bWlub3JfdmVyICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2lwaGVyc3VpdGUgbWlzbWF0Y2g6IHZlcnNpb24iICkgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gJiYKKyAgICAgICAgKCBzdWl0ZV9pbmZvLT5mbGFncyAmIE1CRURUTFNfQ0lQSEVSU1VJVEVfTk9EVExTICkgKQorICAgICAgICByZXR1cm4oIDAgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyAgICBpZiggc3NsLT5jb25mLT5hcmM0X2Rpc2FibGVkID09IE1CRURUTFNfU1NMX0FSQzRfRElTQUJMRUQgJiYKKyAgICAgICAgICAgIHN1aXRlX2luZm8tPmNpcGhlciA9PSBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNpcGhlcnN1aXRlIG1pc21hdGNoOiByYzQiICkgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICBpZiggc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgJiYKKyAgICAgICAgKCBzc2wtPmhhbmRzaGFrZS0+Y2xpX2V4dHMgJiBNQkVEVExTX1RMU19FWFRfRUNKUEFLRV9LS1BQX09LICkgPT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNpcGhlcnN1aXRlIG1pc21hdGNoOiBlY2pwYWtlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgY29uZmlndXJlZCBvciBleHQgbWlzc2luZyIgKSApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykgfHwgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgaWYoIG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3VzZXNfZWMoIHN1aXRlX2luZm8gKSAmJgorICAgICAgICAoIHNzbC0+aGFuZHNoYWtlLT5jdXJ2ZXMgPT0gTlVMTCB8fAorICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5jdXJ2ZXNbMF0gPT0gTlVMTCApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2lwaGVyc3VpdGUgbWlzbWF0Y2g6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gY29tbW9uIGVsbGlwdGljIGN1cnZlIiApICk7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgLyogSWYgdGhlIGNpcGhlcnN1aXRlIHJlcXVpcmVzIGEgcHJlLXNoYXJlZCBrZXkgYW5kIHdlIGRvbid0CisgICAgICogaGF2ZSBvbmUsIHNraXAgaXQgbm93IHJhdGhlciB0aGFuIGZhaWxpbmcgbGF0ZXIgKi8KKyAgICBpZiggbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdXNlc19wc2soIHN1aXRlX2luZm8gKSAmJgorICAgICAgICBzc2wtPmNvbmYtPmZfcHNrID09IE5VTEwgJiYKKyAgICAgICAgKCBzc2wtPmNvbmYtPnBzayA9PSBOVUxMIHx8IHNzbC0+Y29uZi0+cHNrX2lkZW50aXR5ID09IE5VTEwgfHwKKyAgICAgICAgICBzc2wtPmNvbmYtPnBza19pZGVudGl0eV9sZW4gPT0gMCB8fCBzc2wtPmNvbmYtPnBza19sZW4gPT0gMCApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2lwaGVyc3VpdGUgbWlzbWF0Y2g6IG5vIHByZS1zaGFyZWQga2V5IiApICk7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgLyoKKyAgICAgKiBGaW5hbCBjaGVjazogaWYgY2lwaGVyc3VpdGUgcmVxdWlyZXMgdXMgdG8gaGF2ZSBhCisgICAgICogY2VydGlmaWNhdGUva2V5IG9mIGEgcGFydGljdWxhciB0eXBlOgorICAgICAqIC0gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBjZXJ0aWZpY2F0ZSBpZiB3ZSBoYXZlIG9uZSwgb3IKKyAgICAgKiAtIHRyeSB0aGUgbmV4dCBjaXBoZXJzdWl0ZSBpZiB3ZSBkb24ndAorICAgICAqIFRoaXMgbXVzdCBiZSBkb25lIGxhc3Qgc2luY2Ugd2UgbW9kaWZ5IHRoZSBrZXlfY2VydCBsaXN0LgorICAgICAqLworICAgIGlmKCBzc2xfcGlja19jZXJ0KCBzc2wsIHN1aXRlX2luZm8gKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2lwaGVyc3VpdGUgbWlzbWF0Y2g6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gc3VpdGFibGUgY2VydGlmaWNhdGUiICkgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmCisKKyAgICAqY2lwaGVyc3VpdGVfaW5mbyA9IHN1aXRlX2luZm87CisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9TVVBQT1JUX1NTTFYyX0NMSUVOVF9IRUxMTykKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX2NsaWVudF9oZWxsb192MiggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0LCBnb3RfY29tbW9uX3N1aXRlOworICAgIHVuc2lnbmVkIGludCBpLCBqOworICAgIHNpemVfdCBuOworICAgIHVuc2lnbmVkIGludCBjaXBoX2xlbiwgc2Vzc19sZW4sIGNoYWxfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgKnA7CisgICAgY29uc3QgaW50ICpjaXBoZXJzdWl0ZXM7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbzsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gcGFyc2UgY2xpZW50IGhlbGxvIHYyIiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyAhPSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImNsaWVudCBoZWxsbyB2MiBpbGxlZ2FsIGZvciByZW5lZ290aWF0aW9uIiApICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2VuZF9mYXRhbF9oYW5kc2hha2VfZmFpbHVyZSggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisKKyAgICBidWYgPSBzc2wtPmluX2hkcjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgInJlY29yZCBoZWFkZXIiLCBidWYsIDUgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvIHYyLCBtZXNzYWdlIHR5cGU6ICVkIiwKKyAgICAgICAgICAgICAgICAgICBidWZbMl0gKSApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvIHYyLCBtZXNzYWdlIGxlbi46ICVkIiwKKyAgICAgICAgICAgICAgICAgICAoICggYnVmWzBdICYgMHg3RiApIDw8IDggKSB8IGJ1ZlsxXSApICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8gdjIsIG1heC4gdmVyc2lvbjogWyVkOiVkXSIsCisgICAgICAgICAgICAgICAgICAgYnVmWzNdLCBidWZbNF0gKSApOworCisgICAgLyoKKyAgICAgKiBTU0x2MiBDbGllbnQgSGVsbG8KKyAgICAgKgorICAgICAqIFJlY29yZCBsYXllcjoKKyAgICAgKiAgICAgMCAgLiAgIDEgICBtZXNzYWdlIGxlbmd0aAorICAgICAqCisgICAgICogU1NMIGxheWVyOgorICAgICAqICAgICAyICAuICAgMiAgIG1lc3NhZ2UgdHlwZQorICAgICAqICAgICAzICAuICAgNCAgIHByb3RvY29sIHZlcnNpb24KKyAgICAgKi8KKyAgICBpZiggYnVmWzJdICE9IE1CRURUTFNfU1NMX0hTX0NMSUVOVF9IRUxMTyB8fAorICAgICAgICBidWZbM10gIT0gTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICBuID0gKCAoIGJ1ZlswXSA8PCA4ICkgfCBidWZbMV0gKSAmIDB4N0ZGRjsKKworICAgIGlmKCBuIDwgMTcgfHwgbiA+IDUxMiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgc3NsLT5tYWpvcl92ZXIgPSBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzM7CisgICAgc3NsLT5taW5vcl92ZXIgPSAoIGJ1Zls0XSA8PSBzc2wtPmNvbmYtPm1heF9taW5vcl92ZXIgKQorICAgICAgICAgICAgICAgICAgICAgPyBidWZbNF0gIDogc3NsLT5jb25mLT5tYXhfbWlub3JfdmVyOworCisgICAgaWYoIHNzbC0+bWlub3JfdmVyIDwgc3NsLT5jb25mLT5taW5fbWlub3JfdmVyICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiY2xpZW50IG9ubHkgc3VwcG9ydHMgc3NsIHNtYWxsZXIgdGhhbiBtaW5pbXVtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgWyVkOiVkXSA8IFslZDolZF0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+bWFqb3JfdmVyLCBzc2wtPm1pbm9yX3ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPm1pbl9tYWpvcl92ZXIsIHNzbC0+Y29uZi0+bWluX21pbm9yX3ZlciApICk7CisKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBzc2wsIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19QUk9UT0NPTF9WRVJTSU9OICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19QUk9UT0NPTF9WRVJTSU9OICk7CisgICAgfQorCisgICAgc3NsLT5oYW5kc2hha2UtPm1heF9tYWpvcl92ZXIgPSBidWZbM107CisgICAgc3NsLT5oYW5kc2hha2UtPm1heF9taW5vcl92ZXIgPSBidWZbNF07CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9mZXRjaF9pbnB1dCggc3NsLCAyICsgbiApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9mZXRjaF9pbnB1dCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHNzbC0+aGFuZHNoYWtlLT51cGRhdGVfY2hlY2tzdW0oIHNzbCwgYnVmICsgMiwgbiApOworCisgICAgYnVmID0gc3NsLT5pbl9tc2c7CisgICAgbiA9IHNzbC0+aW5fbGVmdCAtIDU7CisKKyAgICAvKgorICAgICAqICAgIDAgIC4gICAxICAgY2lwaGVyc3VpdGVsaXN0IGxlbmd0aAorICAgICAqICAgIDIgIC4gICAzICAgc2Vzc2lvbiBpZCBsZW5ndGgKKyAgICAgKiAgICA0ICAuICAgNSAgIGNoYWxsZW5nZSBsZW5ndGgKKyAgICAgKiAgICA2ICAuICAuLiAgIGNpcGhlcnN1aXRlbGlzdAorICAgICAqICAgLi4gIC4gIC4uICAgc2Vzc2lvbiBpZAorICAgICAqICAgLi4gIC4gIC4uICAgY2hhbGxlbmdlCisgICAgICovCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAicmVjb3JkIGNvbnRlbnRzIiwgYnVmLCBuICk7CisKKyAgICBjaXBoX2xlbiA9ICggYnVmWzBdIDw8IDggKSB8IGJ1ZlsxXTsKKyAgICBzZXNzX2xlbiA9ICggYnVmWzJdIDw8IDggKSB8IGJ1ZlszXTsKKyAgICBjaGFsX2xlbiA9ICggYnVmWzRdIDw8IDggKSB8IGJ1Zls1XTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2lwaF9sZW46ICVkLCBzZXNzX2xlbjogJWQsIGNoYWxfbGVuOiAlZCIsCisgICAgICAgICAgICAgICAgICAgY2lwaF9sZW4sIHNlc3NfbGVuLCBjaGFsX2xlbiApICk7CisKKyAgICAvKgorICAgICAqIE1ha2Ugc3VyZSBlYWNoIHBhcmFtZXRlciBsZW5ndGggaXMgdmFsaWQKKyAgICAgKi8KKyAgICBpZiggY2lwaF9sZW4gPCAzIHx8ICggY2lwaF9sZW4gJSAzICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgaWYoIHNlc3NfbGVuID4gMzIgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIGlmKCBjaGFsX2xlbiA8IDggfHwgY2hhbF9sZW4gPiAzMiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgaWYoIG4gIT0gNiArIGNpcGhfbGVuICsgc2Vzc19sZW4gKyBjaGFsX2xlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2xpZW50IGhlbGxvLCBjaXBoZXJzdWl0ZWxpc3QiLAorICAgICAgICAgICAgICAgICAgIGJ1ZiArIDYsIGNpcGhfbGVuICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2xpZW50IGhlbGxvLCBzZXNzaW9uIGlkIiwKKyAgICAgICAgICAgICAgICAgICBidWYgKyA2ICsgY2lwaF9sZW4sIHNlc3NfbGVuICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2xpZW50IGhlbGxvLCBjaGFsbGVuZ2UiLAorICAgICAgICAgICAgICAgICAgIGJ1ZiArIDYgKyBjaXBoX2xlbiArIHNlc3NfbGVuLCBjaGFsX2xlbiApOworCisgICAgcCA9IGJ1ZiArIDYgKyBjaXBoX2xlbjsKKyAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW4gPSBzZXNzX2xlbjsKKyAgICBtZW1zZXQoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkLCAwLAorICAgICAgICAgICAgc2l6ZW9mKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCApICk7CisgICAgbWVtY3B5KCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCwgcCwgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWRfbGVuICk7CisKKyAgICBwICs9IHNlc3NfbGVuOworICAgIG1lbXNldCggc3NsLT5oYW5kc2hha2UtPnJhbmRieXRlcywgMCwgNjQgKTsKKyAgICBtZW1jcHkoIHNzbC0+aGFuZHNoYWtlLT5yYW5kYnl0ZXMgKyAzMiAtIGNoYWxfbGVuLCBwLCBjaGFsX2xlbiApOworCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GT19TQ1NWCisgICAgICovCisgICAgZm9yKCBpID0gMCwgcCA9IGJ1ZiArIDY7IGkgPCBjaXBoX2xlbjsgaSArPSAzLCBwICs9IDMgKQorICAgIHsKKyAgICAgICAgaWYoIHBbMF0gPT0gMCAmJiBwWzFdID09IDAgJiYgcFsyXSA9PSBNQkVEVExTX1NTTF9FTVBUWV9SRU5FR09USUFUSU9OX0lORk8gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8gIiApICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgICAgICAgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlY2VpdmVkIFJFTkVHT1RJQVRJT04gU0NTViAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVyaW5nIHJlbmVnb3RpYXRpb24iICkgKTsKKworICAgICAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworICAgICAgICAgICAgc3NsLT5zZWN1cmVfcmVuZWdvdGlhdGlvbiA9IE1CRURUTFNfU1NMX1NFQ1VSRV9SRU5FR09USUFUSU9OOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YpCisgICAgZm9yKCBpID0gMCwgcCA9IGJ1ZiArIDY7IGkgPCBjaXBoX2xlbjsgaSArPSAzLCBwICs9IDMgKQorICAgIHsKKyAgICAgICAgaWYoIHBbMF0gPT0gMCAmJgorICAgICAgICAgICAgcFsxXSA9PSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVl9WQUxVRSA+PiA4ICkgJiAweGZmICkgJiYKKyAgICAgICAgICAgIHBbMl0gPT0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1ZfVkFMVUUgICAgICApICYgMHhmZiApICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJyZWNlaXZlZCBGQUxMQkFDS19TQ1NWIiApICk7CisKKyAgICAgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA8IHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlciApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJpbmFwcm9wcmlhdGUgZmFsbGJhY2siICkgKTsKKworICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSU5BUFJPUFJJQVRFX0ZBTExCQUNLICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YgKi8KKworICAgIGdvdF9jb21tb25fc3VpdGUgPSAwOworICAgIGNpcGhlcnN1aXRlcyA9IHNzbC0+Y29uZi0+Y2lwaGVyc3VpdGVfbGlzdFtzc2wtPm1pbm9yX3Zlcl07CisgICAgY2lwaGVyc3VpdGVfaW5mbyA9IE5VTEw7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRSkKKyAgICBmb3IoIGogPSAwLCBwID0gYnVmICsgNjsgaiA8IGNpcGhfbGVuOyBqICs9IDMsIHAgKz0gMyApCisgICAgeworICAgICAgICBmb3IoIGkgPSAwOyBjaXBoZXJzdWl0ZXNbaV0gIT0gMDsgaSsrICkKKyNlbHNlCisgICAgZm9yKCBpID0gMDsgY2lwaGVyc3VpdGVzW2ldICE9IDA7IGkrKyApCisgICAgeworICAgICAgICBmb3IoIGogPSAwLCBwID0gYnVmICsgNjsgaiA8IGNpcGhfbGVuOyBqICs9IDMsIHAgKz0gMyApCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHBbMF0gIT0gMCB8fAorICAgICAgICAgICAgICAgIHBbMV0gIT0gKCAoIGNpcGhlcnN1aXRlc1tpXSA+PiA4ICkgJiAweEZGICkgfHwKKyAgICAgICAgICAgICAgICBwWzJdICE9ICggKCBjaXBoZXJzdWl0ZXNbaV0gICAgICApICYgMHhGRiApICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgZ290X2NvbW1vbl9zdWl0ZSA9IDE7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbF9jaXBoZXJzdWl0ZV9tYXRjaCggc3NsLCBjaXBoZXJzdWl0ZXNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaXBoZXJzdWl0ZV9pbmZvICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgICAgICBpZiggY2lwaGVyc3VpdGVfaW5mbyAhPSBOVUxMICkKKyAgICAgICAgICAgICAgICBnb3RvIGhhdmVfY2lwaGVyc3VpdGVfdjI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggZ290X2NvbW1vbl9zdWl0ZSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImdvdCBjaXBoZXJzdWl0ZXMgaW4gY29tbW9uLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBub25lIG9mIHRoZW0gdXNhYmxlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX05PX1VTQUJMRV9DSVBIRVJTVUlURSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImdvdCBubyBjaXBoZXJzdWl0ZXMgaW4gY29tbW9uIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX05PX0NJUEhFUl9DSE9TRU4gKTsKKyAgICB9CisKK2hhdmVfY2lwaGVyc3VpdGVfdjI6CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJzZWxlY3RlZCBjaXBoZXJzdWl0ZTogJXMiLCBjaXBoZXJzdWl0ZV9pbmZvLT5uYW1lICkgKTsKKworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlID0gY2lwaGVyc3VpdGVzW2ldOworICAgIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbyA9IGNpcGhlcnN1aXRlX2luZm87CisKKyAgICAvKgorICAgICAqIFNTTHYyIENsaWVudCBIZWxsbyByZWxldmFudCByZW5lZ290aWF0aW9uIHNlY3VyaXR5IGNoZWNrcworICAgICAqLworICAgIGlmKCBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID09IE1CRURUTFNfU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OICYmCisgICAgICAgIHNzbC0+Y29uZi0+YWxsb3dfbGVnYWN5X3JlbmVnb3RpYXRpb24gPT0gTUJFRFRMU19TU0xfTEVHQUNZX0JSRUFLX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImxlZ2FjeSByZW5lZ290aWF0aW9uLCBicmVha2luZyBvZmYgaGFuZHNoYWtlIiApICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2VuZF9mYXRhbF9oYW5kc2hha2VfZmFpbHVyZSggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIHNzbC0+aW5fbGVmdCA9IDA7CisgICAgc3NsLT5zdGF0ZSsrOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBwYXJzZSBjbGllbnQgaGVsbG8gdjIiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NSVl9TVVBQT1JUX1NTTFYyX0NMSUVOVF9IRUxMTyAqLworCitzdGF0aWMgaW50IHNzbF9wYXJzZV9jbGllbnRfaGVsbG8oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldCwgZ290X2NvbW1vbl9zdWl0ZTsKKyAgICBzaXplX3QgaSwgajsKKyAgICBzaXplX3QgY2lwaF9vZmZzZXQsIGNvbXBfb2Zmc2V0LCBleHRfb2Zmc2V0OworICAgIHNpemVfdCBtc2dfbGVuLCBjaXBoX2xlbiwgc2Vzc19sZW4sIGNvbXBfbGVuLCBleHRfbGVuOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBzaXplX3QgY29va2llX29mZnNldCwgY29va2llX2xlbjsKKyNlbmRpZgorICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgKnAsICpleHQ7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGludCByZW5lZ290aWF0aW9uX2luZm9fc2VlbiA9IDA7CisjZW5kaWYKKyAgICBpbnQgaGFuZHNoYWtlX2ZhaWx1cmUgPSAwOworICAgIGNvbnN0IGludCAqY2lwaGVyc3VpdGVzOworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm87CisgICAgaW50IG1ham9yLCBtaW5vcjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gcGFyc2UgY2xpZW50IGhlbGxvIiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCityZWFkX3JlY29yZF9oZWFkZXI6CisjZW5kaWYKKyAgICAvKgorICAgICAqIElmIHJlbmVnb3RpYXRpbmcsIHRoZW4gdGhlIGlucHV0IHdhcyByZWFkIHdpdGggbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoKSwKKyAgICAgKiBvdGhlcndpc2UgcmVhZCBpdCBvdXJzZWx2ZXMgbWFudWFsbHkgaW4gb3JkZXIgdG8gc3VwcG9ydCBTU0x2MgorICAgICAqIENsaWVudEhlbGxvLCB3aGljaCBkb2Vzbid0IHVzZSB0aGUgc2FtZSByZWNvcmQgbGF5ZXIgZm9ybWF0LgorICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFICkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfZmV0Y2hfaW5wdXQoIHNzbCwgNSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2ZldGNoX2lucHV0IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgYnVmID0gc3NsLT5pbl9oZHI7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9TVVBQT1JUX1NTTFYyX0NMSUVOVF9IRUxMTykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0gKQorI2VuZGlmCisgICAgICAgIGlmKCAoIGJ1ZlswXSAmIDB4ODAgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiBzc2xfcGFyc2VfY2xpZW50X2hlbGxvX3YyKCBzc2wgKTsKKyNlbmRpZgorCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAicmVjb3JkIGhlYWRlciIsIGJ1ZiwgbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICkgKTsKKworICAgIC8qCisgICAgICogU1NMdjMvVExTIENsaWVudCBIZWxsbworICAgICAqCisgICAgICogUmVjb3JkIGxheWVyOgorICAgICAqICAgICAwICAuICAgMCAgIG1lc3NhZ2UgdHlwZQorICAgICAqICAgICAxICAuICAgMiAgIHByb3RvY29sIHZlcnNpb24KKyAgICAgKiAgICAgMyAgLiAgIDExICBEVExTOiBlcG9jaCArIHJlY29yZCBzZXF1ZW5jZSBudW1iZXIKKyAgICAgKiAgICAgMyAgLiAgIDQgICBtZXNzYWdlIGxlbmd0aAorICAgICAqLworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvIHYzLCBtZXNzYWdlIHR5cGU6ICVkIiwKKyAgICAgICAgICAgICAgICAgICBidWZbMF0gKSApOworCisgICAgaWYoIGJ1ZlswXSAhPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbyB2MywgbWVzc2FnZSBsZW4uOiAlZCIsCisgICAgICAgICAgICAgICAgICAgKCBzc2wtPmluX2xlblswXSA8PCA4ICkgfCBzc2wtPmluX2xlblsxXSApICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbyB2MywgcHJvdG9jb2wgdmVyc2lvbjogWyVkOiVkXSIsCisgICAgICAgICAgICAgICAgICAgYnVmWzFdLCBidWZbMl0gKSApOworCisgICAgbWJlZHRsc19zc2xfcmVhZF92ZXJzaW9uKCAmbWFqb3IsICZtaW5vciwgc3NsLT5jb25mLT50cmFuc3BvcnQsIGJ1ZiArIDEgKTsKKworICAgIC8qIEFjY29yZGluZyB0byBSRkMgNTI0NiBBcHBlbmRpeCBFLjEsIHRoZSB2ZXJzaW9uIGhlcmUgaXMgdHlwaWNhbGx5CisgICAgICogInswMywwMH0sIHRoZSBsb3dlc3QgdmVyc2lvbiBudW1iZXIgc3VwcG9ydGVkIGJ5IHRoZSBjbGllbnQsIFtvcl0gdGhlCisgICAgICogdmFsdWUgb2YgQ2xpZW50SGVsbG8uY2xpZW50X3ZlcnNpb24iLCBzbyB0aGUgb25seSBtZWFuaW5nZnVsIGNoZWNrIGhlcmUKKyAgICAgKiBpcyB0aGUgbWFqb3IgdmVyc2lvbiBzaG91bGRuJ3QgYmUgbGVzcyB0aGFuIDMgKi8KKyAgICBpZiggbWFqb3IgPCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIC8qIEZvciBEVExTIGlmIHRoaXMgaXMgdGhlIGluaXRpYWwgaGFuZHNoYWtlLCByZW1lbWJlciB0aGUgY2xpZW50IHNlcXVlbmNlCisgICAgICogbnVtYmVyIHRvIHVzZSBpdCBpbiBvdXIgbmV4dCBtZXNzYWdlIChSRkMgNjM0NyA0LjIuMSkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTQorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgJiYgc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFCisjZW5kaWYKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgLyogRXBvY2ggc2hvdWxkIGJlIDAgZm9yIGluaXRpYWwgaGFuZHNoYWtlcyAqLworICAgICAgICBpZiggc3NsLT5pbl9jdHJbMF0gIT0gMCB8fCBzc2wtPmluX2N0clsxXSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSggc3NsLT5vdXRfY3RyICsgMiwgc3NsLT5pbl9jdHIgKyAyLCA2ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCisgICAgICAgIGlmKCBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV9jaGVjayggc3NsICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicmVwbGF5ZWQgcmVjb3JkLCBkaXNjYXJkaW5nIiApICk7CisgICAgICAgICAgICBzc2wtPm5leHRfcmVjb3JkX29mZnNldCA9IDA7CisgICAgICAgICAgICBzc2wtPmluX2xlZnQgPSAwOworICAgICAgICAgICAgZ290byByZWFkX3JlY29yZF9oZWFkZXI7CisgICAgICAgIH0KKworICAgICAgICAvKiBObyBNQUMgdG8gY2hlY2sgeWV0LCBzbyB3ZSBjYW4gdXBkYXRlIHJpZ2h0IG5vdyAqLworICAgICAgICBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV91cGRhdGUoIHNzbCApOworI2VuZGlmCisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworICAgIG1zZ19sZW4gPSAoIHNzbC0+aW5fbGVuWzBdIDw8IDggKSB8IHNzbC0+aW5fbGVuWzFdOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgIT0gTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgLyogU2V0IGJ5IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCkgKi8KKyAgICAgICAgbXNnX2xlbiA9IHNzbC0+aW5faHNsZW47CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYoIG1zZ19sZW4gPiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfZmV0Y2hfaW5wdXQoIHNzbCwgbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICkgKyBtc2dfbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfZmV0Y2hfaW5wdXQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgIC8qIERvbmUgcmVhZGluZyB0aGlzIHJlY29yZCwgZ2V0IHJlYWR5IGZvciB0aGUgbmV4dCBvbmUgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICAgICAgc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQgPSBtc2dfbGVuICsgbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICk7CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgc3NsLT5pbl9sZWZ0ID0gMDsKKyAgICB9CisKKyAgICBidWYgPSBzc2wtPmluX21zZzsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgInJlY29yZCBjb250ZW50cyIsIGJ1ZiwgbXNnX2xlbiApOworCisgICAgc3NsLT5oYW5kc2hha2UtPnVwZGF0ZV9jaGVja3N1bSggc3NsLCBidWYsIG1zZ19sZW4gKTsKKworICAgIC8qCisgICAgICogSGFuZHNoYWtlIGxheWVyOgorICAgICAqICAgICAwICAuICAgMCAgIGhhbmRzaGFrZSB0eXBlCisgICAgICogICAgIDEgIC4gICAzICAgaGFuZHNoYWtlIGxlbmd0aAorICAgICAqICAgICA0ICAuICAgNSAgIERUTFMgb25seTogbWVzc2FnZSBzZXFlbmNlIG51bWJlcgorICAgICAqICAgICA2ICAuICAgOCAgIERUTFMgb25seTogZnJhZ21lbnQgb2Zmc2V0CisgICAgICogICAgIDkgIC4gIDExICAgRFRMUyBvbmx5OiBmcmFnbWVudCBsZW5ndGgKKyAgICAgKi8KKyAgICBpZiggbXNnX2xlbiA8IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbyB2MywgaGFuZHNoYWtlIHR5cGU6ICVkIiwgYnVmWzBdICkgKTsKKworICAgIGlmKCBidWZbMF0gIT0gTUJFRFRMU19TU0xfSFNfQ0xJRU5UX0hFTExPICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbyB2MywgaGFuZHNoYWtlIGxlbi46ICVkIiwKKyAgICAgICAgICAgICAgICAgICAoIGJ1ZlsxXSA8PCAxNiApIHwgKCBidWZbMl0gPDwgOCApIHwgYnVmWzNdICkgKTsKKworICAgIC8qIFdlIGRvbid0IHN1cHBvcnQgZnJhZ21lbnRhdGlvbiBvZiBDbGllbnRIZWxsbyAoeWV0PykgKi8KKyAgICBpZiggYnVmWzFdICE9IDAgfHwKKyAgICAgICAgbXNnX2xlbiAhPSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSArICggKCBidWZbMl0gPDwgOCApIHwgYnVmWzNdICkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIENvcHkgdGhlIGNsaWVudCdzIGhhbmRzaGFrZSBtZXNzYWdlX3NlcSBvbiBpbml0aWFsIGhhbmRzaGFrZXMsCisgICAgICAgICAqIGNoZWNrIHNlcXVlbmNlIG51bWJlciBvbiByZW5lZ28uCisgICAgICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGhpcyBjb3VsZG4ndCBiZSBkb25lIGluIHNzbF9wcmVwYXJlX2hhbmRzaGFrZV9yZWNvcmQoKSAqLworICAgICAgICAgICAgdW5zaWduZWQgaW50IGNsaV9tc2dfc2VxID0gKCBzc2wtPmluX21zZ1s0XSA8PCA4ICkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZ1s1XTsKKworICAgICAgICAgICAgaWYoIGNsaV9tc2dfc2VxICE9IHNzbC0+aGFuZHNoYWtlLT5pbl9tc2dfc2VxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZV9zZXE6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlZCAoZXhwZWN0ZWQgJWQpIiwgY2xpX21zZ19zZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+aW5fbXNnX3NlcSApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+aW5fbXNnX3NlcSsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xpX21zZ19zZXEgPSAoIHNzbC0+aW5fbXNnWzRdIDw8IDggKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnWzVdOworICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPm91dF9tc2dfc2VxID0gY2xpX21zZ19zZXE7CisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+aW5fbXNnX3NlcSAgPSBjbGlfbXNnX3NlcSArIDE7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBGb3Igbm93IHdlIGRvbid0IHN1cHBvcnQgZnJhZ21lbnRhdGlvbiwgc28gbWFrZSBzdXJlCisgICAgICAgICAqIGZyYWdtZW50X29mZnNldCA9PSAwIGFuZCBmcmFnbWVudF9sZW5ndGggPT0gbGVuZ3RoCisgICAgICAgICAqLworICAgICAgICBpZiggc3NsLT5pbl9tc2dbNl0gIT0gMCB8fCBzc2wtPmluX21zZ1s3XSAhPSAwIHx8IHNzbC0+aW5fbXNnWzhdICE9IDAgfHwKKyAgICAgICAgICAgIG1lbWNtcCggc3NsLT5pbl9tc2cgKyAxLCBzc2wtPmluX21zZyArIDksIDMgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJDbGllbnRIZWxsbyBmcmFnbWVudGF0aW9uIG5vdCBzdXBwb3J0ZWQiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19EVExTICovCisKKyAgICBidWYgKz0gbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICk7CisgICAgbXNnX2xlbiAtPSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKTsKKworICAgIC8qCisgICAgICogQ2xpZW50SGVsbG8gbGF5ZXI6CisgICAgICogICAgIDAgIC4gICAxICAgcHJvdG9jb2wgdmVyc2lvbgorICAgICAqICAgICAyICAuICAzMyAgIHJhbmRvbSBieXRlcyAoc3RhcnRpbmcgd2l0aCA0IGJ5dGVzIG9mIFVuaXggdGltZSkKKyAgICAgKiAgICAzNCAgLiAgMzUgICBzZXNzaW9uIGlkIGxlbmd0aCAoMSBieXRlKQorICAgICAqICAgIDM1ICAuIDM0K3ggIHNlc3Npb24gaWQKKyAgICAgKiAgIDM1K3ggLiAzNSt4ICBEVExTIG9ubHk6IGNvb2tpZSBsZW5ndGggKDEgYnl0ZSkKKyAgICAgKiAgIDM2K3ggLiAgLi4gICBEVExTIG9ubHk6IGNvb2tpZQorICAgICAqICAgIC4uICAuICAuLiAgIGNpcGhlcnN1aXRlIGxpc3QgbGVuZ3RoICgyIGJ5dGVzKQorICAgICAqICAgIC4uICAuICAuLiAgIGNpcGhlcnN1aXRlIGxpc3QKKyAgICAgKiAgICAuLiAgLiAgLi4gICBjb21wcmVzc2lvbiBhbGcuIGxpc3QgbGVuZ3RoICgxIGJ5dGUpCisgICAgICogICAgLi4gIC4gIC4uICAgY29tcHJlc3Npb24gYWxnLiBsaXN0CisgICAgICogICAgLi4gIC4gIC4uICAgZXh0ZW5zaW9ucyBsZW5ndGggKDIgYnl0ZXMsIG9wdGlvbmFsKQorICAgICAqICAgIC4uICAuICAuLiAgIGV4dGVuc2lvbnMgKG9wdGlvbmFsKQorICAgICAqLworCisgICAgLyoKKyAgICAgKiBNaW5pbWFsIGxlbmd0aCAod2l0aCBldmVyeXRoaW5nIGVtcHR5IGFuZCBleHRlbnNpb25zIG9tbWl0dGVkKSBpcworICAgICAqIDIgKyAzMiArIDEgKyAyICsgMSA9IDM4IGJ5dGVzLiBDaGVjayB0aGF0IGZpcnN0LCBzbyB0aGF0IHdlIGNhbgorICAgICAqIHJlYWQgYXQgbGVhc3QgdXAgdG8gc2Vzc2lvbiBpZCBsZW5ndGggd2l0aG91dCB3b3JyeWluZy4KKyAgICAgKi8KKyAgICBpZiggbXNnX2xlbiA8IDM4ICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrIGFuZCBzYXZlIHRoZSBwcm90b2NvbCB2ZXJzaW9uCisgICAgICovCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2xpZW50IGhlbGxvLCB2ZXJzaW9uIiwgYnVmLCAyICk7CisKKyAgICBtYmVkdGxzX3NzbF9yZWFkX3ZlcnNpb24oICZzc2wtPm1ham9yX3ZlciwgJnNzbC0+bWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+dHJhbnNwb3J0LCBidWYgKTsKKworICAgIHNzbC0+aGFuZHNoYWtlLT5tYXhfbWFqb3JfdmVyID0gc3NsLT5tYWpvcl92ZXI7CisgICAgc3NsLT5oYW5kc2hha2UtPm1heF9taW5vcl92ZXIgPSBzc2wtPm1pbm9yX3ZlcjsKKworICAgIGlmKCBzc2wtPm1ham9yX3ZlciA8IHNzbC0+Y29uZi0+bWluX21ham9yX3ZlciB8fAorICAgICAgICBzc2wtPm1pbm9yX3ZlciA8IHNzbC0+Y29uZi0+bWluX21pbm9yX3ZlciApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImNsaWVudCBvbmx5IHN1cHBvcnRzIHNzbCBzbWFsbGVyIHRoYW4gbWluaW11bSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFslZDolZF0gPCBbJWQ6JWRdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm1ham9yX3Zlciwgc3NsLT5taW5vcl92ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5taW5fbWFqb3JfdmVyLCBzc2wtPmNvbmYtPm1pbl9taW5vcl92ZXIgKSApOworCisgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfUFJPVE9DT0xfVkVSU0lPTiApOworCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19QUk9UT0NPTF9WRVJTSU9OICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+bWFqb3JfdmVyID4gc3NsLT5jb25mLT5tYXhfbWFqb3JfdmVyICkKKyAgICB7CisgICAgICAgIHNzbC0+bWFqb3JfdmVyID0gc3NsLT5jb25mLT5tYXhfbWFqb3JfdmVyOworICAgICAgICBzc2wtPm1pbm9yX3ZlciA9IHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlcjsKKyAgICB9CisgICAgZWxzZSBpZiggc3NsLT5taW5vcl92ZXIgPiBzc2wtPmNvbmYtPm1heF9taW5vcl92ZXIgKQorICAgICAgICBzc2wtPm1pbm9yX3ZlciA9IHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlcjsKKworICAgIC8qCisgICAgICogU2F2ZSBjbGllbnQgcmFuZG9tIChpbmMuIFVuaXggdGltZSkKKyAgICAgKi8KKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjbGllbnQgaGVsbG8sIHJhbmRvbSBieXRlcyIsIGJ1ZiArIDIsIDMyICk7CisKKyAgICBtZW1jcHkoIHNzbC0+aGFuZHNoYWtlLT5yYW5kYnl0ZXMsIGJ1ZiArIDIsIDMyICk7CisKKyAgICAvKgorICAgICAqIENoZWNrIHRoZSBzZXNzaW9uIElEIGxlbmd0aCBhbmQgc2F2ZSBzZXNzaW9uIElECisgICAgICovCisgICAgc2Vzc19sZW4gPSBidWZbMzRdOworCisgICAgaWYoIHNlc3NfbGVuID4gc2l6ZW9mKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCApIHx8CisgICAgICAgIHNlc3NfbGVuICsgMzQgKyAyID4gbXNnX2xlbiApIC8qIDIgZm9yIGNpcGhlcmxpc3QgbGVuZ3RoIGZpZWxkICovCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2xpZW50IGhlbGxvLCBzZXNzaW9uIGlkIiwgYnVmICsgMzUsIHNlc3NfbGVuICk7CisKKyAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW4gPSBzZXNzX2xlbjsKKyAgICBtZW1zZXQoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkLCAwLAorICAgICAgICAgICAgc2l6ZW9mKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCApICk7CisgICAgbWVtY3B5KCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCwgYnVmICsgMzUsCisgICAgICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW4gKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgdGhlIGNvb2tpZSBsZW5ndGggYW5kIGNvbnRlbnQKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICBjb29raWVfb2Zmc2V0ID0gMzUgKyBzZXNzX2xlbjsKKyAgICAgICAgY29va2llX2xlbiA9IGJ1Zltjb29raWVfb2Zmc2V0XTsKKworICAgICAgICBpZiggY29va2llX29mZnNldCArIDEgKyBjb29raWVfbGVuICsgMiA+IG1zZ19sZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2xpZW50IGhlbGxvLCBjb29raWUiLAorICAgICAgICAgICAgICAgICAgICAgICBidWYgKyBjb29raWVfb2Zmc2V0ICsgMSwgY29va2llX2xlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkKKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+Zl9jb29raWVfY2hlY2sgIT0gTlVMTAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgICAgICYmIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRQorI2VuZGlmCisgICAgICAgICAgICApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPmZfY29va2llX2NoZWNrKCBzc2wtPmNvbmYtPnBfY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIGNvb2tpZV9vZmZzZXQgKyAxLCBjb29raWVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y2xpX2lkLCBzc2wtPmNsaV9pZF9sZW4gKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImNvb2tpZSB2ZXJpZmljYXRpb24gZmFpbGVkIiApICk7CisgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWVfbGVuID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImNvb2tpZSB2ZXJpZmljYXRpb24gcGFzc2VkIiApICk7CisgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWVfbGVuID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkgKi8KKyAgICAgICAgeworICAgICAgICAgICAgLyogV2Uga25vdyB3ZSBkaWRuJ3Qgc2VuZCBhIGNvb2tpZSwgc28gaXQgc2hvdWxkIGJlIGVtcHR5ICovCisgICAgICAgICAgICBpZiggY29va2llX2xlbiAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJjb29raWUgdmVyaWZpY2F0aW9uIHNraXBwZWQiICkgKTsKKyAgICAgICAgfQorCisgICAgLyoKKyAgICAgKiBDaGVjayB0aGUgY2lwaGVyc3VpdGVsaXN0IGxlbmd0aCAod2lsbCBiZSBwYXJzZWQgbGF0ZXIpCisgICAgICovCisgICAgICAgIGNpcGhfb2Zmc2V0ID0gY29va2llX29mZnNldCArIDEgKyBjb29raWVfbGVuOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworICAgICAgICBjaXBoX29mZnNldCA9IDM1ICsgc2Vzc19sZW47CisKKyAgICBjaXBoX2xlbiA9ICggYnVmW2NpcGhfb2Zmc2V0ICsgMF0gPDwgOCApCisgICAgICAgICAgICAgfCAoIGJ1ZltjaXBoX29mZnNldCArIDFdICAgICAgKTsKKworICAgIGlmKCBjaXBoX2xlbiA8IDIgfHwKKyAgICAgICAgY2lwaF9sZW4gKyAyICsgY2lwaF9vZmZzZXQgKyAxID4gbXNnX2xlbiB8fCAvKiAxIGZvciBjb21wLiBhbGcuIGxlbiAqLworICAgICAgICAoIGNpcGhfbGVuICUgMiApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgImNsaWVudCBoZWxsbywgY2lwaGVyc3VpdGVsaXN0IiwKKyAgICAgICAgICAgICAgICAgICBidWYgKyBjaXBoX29mZnNldCArIDIsICBjaXBoX2xlbiApOworCisgICAgLyoKKyAgICAgKiBDaGVjayB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBsZW5ndGggYW5kIHBpY2sgb25lCisgICAgICovCisgICAgY29tcF9vZmZzZXQgPSBjaXBoX29mZnNldCArIDIgKyBjaXBoX2xlbjsKKworICAgIGNvbXBfbGVuID0gYnVmW2NvbXBfb2Zmc2V0XTsKKworICAgIGlmKCBjb21wX2xlbiA8IDEgfHwKKyAgICAgICAgY29tcF9sZW4gPiAxNiB8fAorICAgICAgICBjb21wX2xlbiArIGNvbXBfb2Zmc2V0ICsgMSA+IG1zZ19sZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgImNsaWVudCBoZWxsbywgY29tcHJlc3Npb24iLAorICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIGNvbXBfb2Zmc2V0ICsgMSwgY29tcF9sZW4gKTsKKworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNvbXByZXNzaW9uID0gTUJFRFRMU19TU0xfQ09NUFJFU1NfTlVMTDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgIGZvciggaSA9IDA7IGkgPCBjb21wX2xlbjsgKytpICkKKyAgICB7CisgICAgICAgIGlmKCBidWZbY29tcF9vZmZzZXQgKyAxICsgaV0gPT0gTUJFRFRMU19TU0xfQ09NUFJFU1NfREVGTEFURSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNvbXByZXNzaW9uID0gTUJFRFRMU19TU0xfQ09NUFJFU1NfREVGTEFURTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBTZWUgY29tbWVudHMgaW4gc3NsX3dyaXRlX2NsaWVudF9oZWxsbygpICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jb21wcmVzc2lvbiA9IE1CRURUTFNfU1NMX0NPTVBSRVNTX05VTEw7CisjZW5kaWYKKworICAgIC8qIERvIG5vdCBwYXJzZSB0aGUgZXh0ZW5zaW9ucyBpZiB0aGUgcHJvdG9jb2wgaXMgU1NMdjMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisgICAgaWYoICggc3NsLT5tYWpvcl92ZXIgIT0gMyApIHx8ICggc3NsLT5taW5vcl92ZXIgIT0gMCApICkKKyAgICB7CisjZW5kaWYKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgdGhlIGV4dGVuc2lvbiBsZW5ndGgKKyAgICAgICAgICovCisgICAgICAgIGV4dF9vZmZzZXQgPSBjb21wX29mZnNldCArIDEgKyBjb21wX2xlbjsKKyAgICAgICAgaWYoIG1zZ19sZW4gPiBleHRfb2Zmc2V0ICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIG1zZ19sZW4gPCBleHRfb2Zmc2V0ICsgMiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4dF9sZW4gPSAoIGJ1ZltleHRfb2Zmc2V0ICsgMF0gPDwgOCApCisgICAgICAgICAgICAgICAgICAgIHwgKCBidWZbZXh0X29mZnNldCArIDFdICAgICAgKTsKKworICAgICAgICAgICAgaWYoICggZXh0X2xlbiA+IDAgJiYgZXh0X2xlbiA8IDQgKSB8fAorICAgICAgICAgICAgICAgIG1zZ19sZW4gIT0gZXh0X29mZnNldCArIDIgKyBleHRfbGVuICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBleHRfbGVuID0gMDsKKworICAgICAgICBleHQgPSBidWYgKyBleHRfb2Zmc2V0ICsgMjsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2xpZW50IGhlbGxvIGV4dGVuc2lvbnMiLCBleHQsIGV4dF9sZW4gKTsKKworICAgICAgICB3aGlsZSggZXh0X2xlbiAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dF9pZCAgID0gKCAoIGV4dFswXSA8PCAgOCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggZXh0WzFdICAgICAgICkgKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBleHRfc2l6ZSA9ICggKCBleHRbMl0gPDwgIDggKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIGV4dFszXSAgICAgICApICk7CisKKyAgICAgICAgICAgIGlmKCBleHRfc2l6ZSArIDQgPiBleHRfbGVuICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCggZXh0X2lkICkKKyAgICAgICAgICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9TRVJWRVJOQU1FOgorICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgU2VydmVyTmFtZSBleHRlbnNpb24iICkgKTsKKyAgICAgICAgICAgICAgICBpZiggc3NsLT5jb25mLT5mX3NuaSA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICByZXQgPSBzc2xfcGFyc2Vfc2VydmVybmFtZV9leHQoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04gKi8KKworICAgICAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfUkVORUdPVElBVElPTl9JTkZPOgorICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iICkgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgICAgICAgICAgICAgcmVuZWdvdGlhdGlvbl9pbmZvX3NlZW4gPSAxOworI2VuZGlmCisKKyAgICAgICAgICAgICAgICByZXQgPSBzc2xfcGFyc2VfcmVuZWdvdGlhdGlvbl9pbmZvKCBzc2wsIGV4dCArIDQsIGV4dF9zaXplICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEKQorICAgICAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfU0lHX0FMRzoKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBzaWduYXR1cmVfYWxnb3JpdGhtcyBleHRlbnNpb24iICkgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgICAgICAgICAgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgICAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9zaWduYXR1cmVfYWxnb3JpdGhtc19leHQoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAmJgorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfRUxMSVBUSUNfQ1VSVkVTOgorICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgc3VwcG9ydGVkIGVsbGlwdGljIGN1cnZlcyBleHRlbnNpb24iICkgKTsKKworICAgICAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9zdXBwb3J0ZWRfZWxsaXB0aWNfY3VydmVzKCBzc2wsIGV4dCArIDQsIGV4dF9zaXplICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfU1VQUE9SVEVEX1BPSU5UX0ZPUk1BVFM6CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBzdXBwb3J0ZWQgcG9pbnQgZm9ybWF0cyBleHRlbnNpb24iICkgKTsKKyAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+Y2xpX2V4dHMgfD0gTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTX1BSRVNFTlQ7CisKKyAgICAgICAgICAgICAgICByZXQgPSBzc2xfcGFyc2Vfc3VwcG9ydGVkX3BvaW50X2Zvcm1hdHMoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DIHx8IE1CRURUTFNfRUNEU0FfQyB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9FQ0pQQUtFX0tLUFA6CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBlY2pwYWtlIGtrcHAgZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgICAgICByZXQgPSBzc2xfcGFyc2VfZWNqcGFrZV9ra3BwKCBzc2wsIGV4dCArIDQsIGV4dF9zaXplICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfRVhUX01BWF9GUkFHTUVOVF9MRU5HVEg6CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBtYXggZnJhZ21lbnQgbGVuZ3RoIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX21heF9mcmFnbWVudF9sZW5ndGhfZXh0KCBzc2wsIGV4dCArIDQsIGV4dF9zaXplICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorICAgICAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfVFJVTkNBVEVEX0hNQUM6CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCB0cnVuY2F0ZWQgaG1hYyBleHRlbnNpb24iICkgKTsKKworICAgICAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV90cnVuY2F0ZWRfaG1hY19leHQoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9FTkNSWVBUX1RIRU5fTUFDOgorICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgZW5jcnlwdCB0aGVuIG1hYyBleHRlbnNpb24iICkgKTsKKworICAgICAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9lbmNyeXB0X3RoZW5fbWFjX2V4dCggc3NsLCBleHQgKyA0LCBleHRfc2l6ZSApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorICAgICAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfRVhURU5ERURfTUFTVEVSX1NFQ1JFVDoKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQgZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgICAgICByZXQgPSBzc2xfcGFyc2VfZXh0ZW5kZWRfbXNfZXh0KCBzc2wsIGV4dCArIDQsIGV4dF9zaXplICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfRVhUX1NFU1NJT05fVElDS0VUOgorICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgICAgICByZXQgPSBzc2xfcGFyc2Vfc2Vzc2lvbl90aWNrZXRfZXh0KCBzc2wsIGV4dCArIDQsIGV4dF9zaXplICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfRVhUX0FMUE46CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBhbHBuIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX2FscG5fZXh0KCBzc2wsIGV4dCArIDQsIGV4dF9zaXplICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgKi8KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInVua25vd24gZXh0ZW5zaW9uIGZvdW5kOiAlZCAoaWdub3JpbmcpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfaWQgKSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHRfbGVuIC09IDQgKyBleHRfc2l6ZTsKKyAgICAgICAgICAgIGV4dCArPSA0ICsgZXh0X3NpemU7CisKKyAgICAgICAgICAgIGlmKCBleHRfbGVuID4gMCAmJiBleHRfbGVuIDwgNCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YpCisgICAgZm9yKCBpID0gMCwgcCA9IGJ1ZiArIDQxICsgc2Vzc19sZW47IGkgPCBjaXBoX2xlbjsgaSArPSAyLCBwICs9IDIgKQorICAgIHsKKyAgICAgICAgaWYoIHBbMF0gPT0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1ZfVkFMVUUgPj4gOCApICYgMHhmZiApICYmCisgICAgICAgICAgICBwWzFdID09ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWX1ZBTFVFICAgICAgKSAmIDB4ZmYgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAicmVjZWl2ZWQgRkFMTEJBQ0tfU0NTViIgKSApOworCisgICAgICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPCBzc2wtPmNvbmYtPm1heF9taW5vcl92ZXIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiaW5hcHJvcHJpYXRlIGZhbGxiYWNrIiApICk7CisKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0lOQVBST1BSSUFURV9GQUxMQkFDSyApOworCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWICovCisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPX1NDU1YKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwLCBwID0gYnVmICsgY2lwaF9vZmZzZXQgKyAyOyBpIDwgY2lwaF9sZW47IGkgKz0gMiwgcCArPSAyICkKKyAgICB7CisgICAgICAgIGlmKCBwWzBdID09IDAgJiYgcFsxXSA9PSBNQkVEVExTX1NTTF9FTVBUWV9SRU5FR09USUFUSU9OX0lORk8gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8gIiApICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgICAgICAgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlY2VpdmVkIFJFTkVHT1RJQVRJT04gU0NTViBkdXJpbmcgcmVuZWdvdGlhdGlvbiIgKSApOworCisgICAgICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2VuZF9mYXRhbF9oYW5kc2hha2VfZmFpbHVyZSggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgc3NsLT5zZWN1cmVfcmVuZWdvdGlhdGlvbiA9IE1CRURUTFNfU1NMX1NFQ1VSRV9SRU5FR09USUFUSU9OOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlbmVnb3RpYXRpb24gc2VjdXJpdHkgY2hlY2tzCisgICAgICovCisgICAgaWYoIHNzbC0+c2VjdXJlX3JlbmVnb3RpYXRpb24gIT0gTUJFRFRMU19TU0xfU0VDVVJFX1JFTkVHT1RJQVRJT04gJiYKKyAgICAgICAgc3NsLT5jb25mLT5hbGxvd19sZWdhY3lfcmVuZWdvdGlhdGlvbiA9PSBNQkVEVExTX1NTTF9MRUdBQ1lfQlJFQUtfSEFORFNIQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibGVnYWN5IHJlbmVnb3RpYXRpb24sIGJyZWFraW5nIG9mZiBoYW5kc2hha2UiICkgKTsKKyAgICAgICAgaGFuZHNoYWtlX2ZhaWx1cmUgPSAxOworICAgIH0KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgZWxzZSBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgJiYKKyAgICAgICAgICAgICBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID09IE1CRURUTFNfU1NMX1NFQ1VSRV9SRU5FR09USUFUSU9OICYmCisgICAgICAgICAgICAgcmVuZWdvdGlhdGlvbl9pbmZvX3NlZW4gPT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlbmVnb3RpYXRpb25faW5mbyBleHRlbnNpb24gbWlzc2luZyAoc2VjdXJlKSIgKSApOworICAgICAgICBoYW5kc2hha2VfZmFpbHVyZSA9IDE7CisgICAgfQorICAgIGVsc2UgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICYmCisgICAgICAgICAgICAgc3NsLT5zZWN1cmVfcmVuZWdvdGlhdGlvbiA9PSBNQkVEVExTX1NTTF9MRUdBQ1lfUkVORUdPVElBVElPTiAmJgorICAgICAgICAgICAgIHNzbC0+Y29uZi0+YWxsb3dfbGVnYWN5X3JlbmVnb3RpYXRpb24gPT0gTUJFRFRMU19TU0xfTEVHQUNZX05PX1JFTkVHT1RJQVRJT04gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJsZWdhY3kgcmVuZWdvdGlhdGlvbiBub3QgYWxsb3dlZCIgKSApOworICAgICAgICBoYW5kc2hha2VfZmFpbHVyZSA9IDE7CisgICAgfQorICAgIGVsc2UgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICYmCisgICAgICAgICAgICAgc3NsLT5zZWN1cmVfcmVuZWdvdGlhdGlvbiA9PSBNQkVEVExTX1NTTF9MRUdBQ1lfUkVORUdPVElBVElPTiAmJgorICAgICAgICAgICAgIHJlbmVnb3RpYXRpb25faW5mb19zZWVuID09IDEgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJyZW5lZ290aWF0aW9uX2luZm8gZXh0ZW5zaW9uIHByZXNlbnQgKGxlZ2FjeSkiICkgKTsKKyAgICAgICAgaGFuZHNoYWtlX2ZhaWx1cmUgPSAxOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisKKyAgICBpZiggaGFuZHNoYWtlX2ZhaWx1cmUgPT0gMSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZWFyY2ggZm9yIGEgbWF0Y2hpbmcgY2lwaGVyc3VpdGUKKyAgICAgKiAoQXQgdGhlIGVuZCBiZWNhdXNlIHdlIG5lZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgRUMtYmFzZWQgZXh0ZW5zaW9ucworICAgICAqIGFuZCBjZXJ0aWZpY2F0ZSBmcm9tIHRoZSBTTkkgY2FsbGJhY2sgdHJpZ2dlcmVkIGJ5IHRoZSBTTkkgZXh0ZW5zaW9uLikKKyAgICAgKi8KKyAgICBnb3RfY29tbW9uX3N1aXRlID0gMDsKKyAgICBjaXBoZXJzdWl0ZXMgPSBzc2wtPmNvbmYtPmNpcGhlcnN1aXRlX2xpc3Rbc3NsLT5taW5vcl92ZXJdOworICAgIGNpcGhlcnN1aXRlX2luZm8gPSBOVUxMOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX1JFU1BFQ1RfQ0xJRU5UX1BSRUZFUkVOQ0UpCisgICAgZm9yKCBqID0gMCwgcCA9IGJ1ZiArIGNpcGhfb2Zmc2V0ICsgMjsgaiA8IGNpcGhfbGVuOyBqICs9IDIsIHAgKz0gMiApCisgICAgeworICAgICAgICBmb3IoIGkgPSAwOyBjaXBoZXJzdWl0ZXNbaV0gIT0gMDsgaSsrICkKKyNlbHNlCisgICAgZm9yKCBpID0gMDsgY2lwaGVyc3VpdGVzW2ldICE9IDA7IGkrKyApCisgICAgeworICAgICAgICBmb3IoIGogPSAwLCBwID0gYnVmICsgY2lwaF9vZmZzZXQgKyAyOyBqIDwgY2lwaF9sZW47IGogKz0gMiwgcCArPSAyICkKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBpZiggcFswXSAhPSAoICggY2lwaGVyc3VpdGVzW2ldID4+IDggKSAmIDB4RkYgKSB8fAorICAgICAgICAgICAgICAgIHBbMV0gIT0gKCAoIGNpcGhlcnN1aXRlc1tpXSAgICAgICkgJiAweEZGICkgKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBnb3RfY29tbW9uX3N1aXRlID0gMTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gc3NsX2NpcGhlcnN1aXRlX21hdGNoKCBzc2wsIGNpcGhlcnN1aXRlc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNpcGhlcnN1aXRlX2luZm8gKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvICE9IE5VTEwgKQorICAgICAgICAgICAgICAgIGdvdG8gaGF2ZV9jaXBoZXJzdWl0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBnb3RfY29tbW9uX3N1aXRlICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZ290IGNpcGhlcnN1aXRlcyBpbiBjb21tb24sICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IG5vbmUgb2YgdGhlbSB1c2FibGUiICkgKTsKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9mYXRhbF9oYW5kc2hha2VfZmFpbHVyZSggc3NsICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX05PX1VTQUJMRV9DSVBIRVJTVUlURSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImdvdCBubyBjaXBoZXJzdWl0ZXMgaW4gY29tbW9uIiApICk7CisgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUoIHNzbCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9OT19DSVBIRVJfQ0hPU0VOICk7CisgICAgfQorCitoYXZlX2NpcGhlcnN1aXRlOgorICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAic2VsZWN0ZWQgY2lwaGVyc3VpdGU6ICVzIiwgY2lwaGVyc3VpdGVfaW5mby0+bmFtZSApICk7CisKKyAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZSA9IGNpcGhlcnN1aXRlc1tpXTsKKyAgICBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm8gPSBjaXBoZXJzdWl0ZV9pbmZvOworCisgICAgc3NsLT5zdGF0ZSsrOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICBtYmVkdGxzX3NzbF9yZWN2X2ZsaWdodF9jb21wbGV0ZWQoIHNzbCApOworI2VuZGlmCisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHBhcnNlIGNsaWVudCBoZWxsbyIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX3RydW5jYXRlZF9obWFjX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworCisgICAgaWYoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnRydW5jX2htYWMgPT0gTUJFRFRMU19TU0xfVFJVTkNfSE1BQ19ESVNBQkxFRCApCisgICAgeworICAgICAgICAqb2xlbiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgYWRkaW5nIHRydW5jYXRlZCBobWFjIGV4dGVuc2lvbiIgKSApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfVFJVTkNBVEVEX0hNQUMgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1RSVU5DQVRFRF9ITUFDICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwKysgPSAweDAwOworICAgICpwKysgPSAweDAwOworCisgICAgKm9sZW4gPSA0OworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfZW5jcnlwdF90aGVuX21hY19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqc3VpdGUgPSBOVUxMOworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyID0gTlVMTDsKKworICAgIGlmKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5lbmNyeXB0X3RoZW5fbWFjID09IE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0RJU0FCTEVEIHx8CisgICAgICAgIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCisgICAgeworICAgICAgICAqb2xlbiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJGQyA3MzY2OiAiSWYgYSBzZXJ2ZXIgcmVjZWl2ZXMgYW4gZW5jcnlwdC10aGVuLU1BQyByZXF1ZXN0IGV4dGVuc2lvbgorICAgICAqIGZyb20gYSBjbGllbnQgYW5kIHRoZW4gc2VsZWN0cyBhIHN0cmVhbSBvciBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24KKyAgICAgKiB3aXRoIEFzc29jaWF0ZWQgRGF0YSAoQUVBRCkgY2lwaGVyc3VpdGUsIGl0IE1VU1QgTk9UIHNlbmQgYW4KKyAgICAgKiBlbmNyeXB0LXRoZW4tTUFDIHJlc3BvbnNlIGV4dGVuc2lvbiBiYWNrIHRvIHRoZSBjbGllbnQuIgorICAgICAqLworICAgIGlmKCAoIHN1aXRlID0gbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9pZCgKKyAgICAgICAgICAgICAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGUgKSApID09IE5VTEwgfHwKKyAgICAgICAgKCBjaXBoZXIgPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggc3VpdGUtPmNpcGhlciApICkgPT0gTlVMTCB8fAorICAgICAgICBjaXBoZXItPm1vZGUgIT0gTUJFRFRMU19NT0RFX0NCQyApCisgICAgeworICAgICAgICAqb2xlbiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgYWRkaW5nIGVuY3J5cHQgdGhlbiBtYWMgZXh0ZW5zaW9uIiApICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9FTkNSWVBUX1RIRU5fTUFDID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9FTkNSWVBUX1RIRU5fTUFDICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwKysgPSAweDAwOworICAgICpwKysgPSAweDAwOworCisgICAgKm9sZW4gPSA0OworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCkKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9leHRlbmRlZF9tc19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+ZXh0ZW5kZWRfbXMgPT0gTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRElTQUJMRUQgfHwKKyAgICAgICAgc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICB7CisgICAgICAgICpvbGVuID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBhZGRpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCAiCisgICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiApICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwKysgPSAweDAwOworICAgICpwKysgPSAweDAwOworCisgICAgKm9sZW4gPSA0OworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX3Nlc3Npb25fdGlja2V0X2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5uZXdfc2Vzc2lvbl90aWNrZXQgPT0gMCApCisgICAgeworICAgICAgICAqb2xlbiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgKSApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfU0VTU0lPTl9USUNLRVQgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NFU1NJT05fVElDS0VUICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwKysgPSAweDAwOworICAgICpwKysgPSAweDAwOworCisgICAgKm9sZW4gPSA0OworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfcmVuZWdvdGlhdGlvbl9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisKKyAgICBpZiggc3NsLT5zZWN1cmVfcmVuZWdvdGlhdGlvbiAhPSBNQkVEVExTX1NTTF9TRUNVUkVfUkVORUdPVElBVElPTiApCisgICAgeworICAgICAgICAqb2xlbiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiApICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9SRU5FR09USUFUSU9OX0lORk8gPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1JFTkVHT1RJQVRJT05fSU5GTyAgICAgICkgJiAweEZGICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyAhPSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICAqcCsrID0gMHgwMDsKKyAgICAgICAgKnArKyA9ICggc3NsLT52ZXJpZnlfZGF0YV9sZW4gKiAyICsgMSApICYgMHhGRjsKKyAgICAgICAgKnArKyA9IHNzbC0+dmVyaWZ5X2RhdGFfbGVuICogMiAmIDB4RkY7CisKKyAgICAgICAgbWVtY3B5KCBwLCBzc2wtPnBlZXJfdmVyaWZ5X2RhdGEsIHNzbC0+dmVyaWZ5X2RhdGFfbGVuICk7CisgICAgICAgIHAgKz0gc3NsLT52ZXJpZnlfZGF0YV9sZW47CisgICAgICAgIG1lbWNweSggcCwgc3NsLT5vd25fdmVyaWZ5X2RhdGEsIHNzbC0+dmVyaWZ5X2RhdGFfbGVuICk7CisgICAgICAgIHAgKz0gc3NsLT52ZXJpZnlfZGF0YV9sZW47CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisgICAgeworICAgICAgICAqcCsrID0gMHgwMDsKKyAgICAgICAgKnArKyA9IDB4MDE7CisgICAgICAgICpwKysgPSAweDAwOworICAgIH0KKworICAgICpvbGVuID0gcCAtIGJ1ZjsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9tYXhfZnJhZ21lbnRfbGVuZ3RoX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKworICAgIGlmKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5tZmxfY29kZSA9PSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fTk9ORSApCisgICAgeworICAgICAgICAqb2xlbiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iICkgKTsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX01BWF9GUkFHTUVOVF9MRU5HVEggPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX01BWF9GUkFHTUVOVF9MRU5HVEggICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9IDB4MDA7CisgICAgKnArKyA9IDE7CisKKyAgICAqcCsrID0gc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+bWZsX2NvZGU7CisKKyAgICAqb2xlbiA9IDU7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykgfHwgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9zdXBwb3J0ZWRfcG9pbnRfZm9ybWF0c19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICAoKHZvaWQpIHNzbCk7CisKKyAgICBpZiggKCBzc2wtPmhhbmRzaGFrZS0+Y2xpX2V4dHMgJgorICAgICAgICAgIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUU19QUkVTRU5UICkgPT0gMCApCisgICAgeworICAgICAgICAqb2xlbiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgc3VwcG9ydGVkX3BvaW50X2Zvcm1hdHMgZXh0ZW5zaW9uIiApICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUUyA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfU1VQUE9SVEVEX1BPSU5UX0ZPUk1BVFMgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9IDB4MDA7CisgICAgKnArKyA9IDI7CisKKyAgICAqcCsrID0gMTsKKyAgICAqcCsrID0gTUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VEOworCisgICAgKm9sZW4gPSA2OworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DIHx8IE1CRURUTFNfRUNEU0FfQyB8fCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX2VjanBha2Vfa2twcF9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gc3NsLT5vdXRfbXNnICsgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOOworICAgIHNpemVfdCBra3BwX2xlbjsKKworICAgICpvbGVuID0gMDsKKworICAgIC8qIFNraXAgY29zdGx5IGNvbXB1dGF0aW9uIGlmIG5vdCBuZWVkZWQgKi8KKyAgICBpZiggc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgIT0KKyAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSApCisgICAgICAgIHJldHVybjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBlY2pwYWtlIGtrcHAgZXh0ZW5zaW9uIiApICk7CisKKyAgICBpZiggZW5kIC0gcCA8IDQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJidWZmZXIgdG9vIHNtYWxsIiApICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9FQ0pQQUtFX0tLUFAgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VDSlBBS0VfS0tQUCAgICAgICkgJiAweEZGICk7CisKKyAgICByZXQgPSBtYmVkdGxzX2VjanBha2Vfd3JpdGVfcm91bmRfb25lKCAmc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgKyAyLCBlbmQgLSBwIC0gMiwgJmtrcHBfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxICwgIm1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF9vbmUiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICgga2twcF9sZW4gPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICgga2twcF9sZW4gICAgICApICYgMHhGRiApOworCisgICAgKm9sZW4gPSBra3BwX2xlbiArIDQ7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4gKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX2FscG5fZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBpZiggc3NsLT5hbHBuX2Nob3NlbiA9PSBOVUxMICkKKyAgICB7CisgICAgICAgICpvbGVuID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBhZGRpbmcgYWxwbiBleHRlbnNpb24iICkgKTsKKworICAgIC8qCisgICAgICogMCAuIDEgICAgZXh0IGlkZW50aWZpZXIKKyAgICAgKiAyIC4gMyAgICBleHQgbGVuZ3RoCisgICAgICogNCAuIDUgICAgcHJvdG9jb2wgbGlzdCBsZW5ndGgKKyAgICAgKiA2IC4gNiAgICBwcm90b2NvbCBuYW1lIGxlbmd0aAorICAgICAqIDcgLiA3K24gIHByb3RvY29sIG5hbWUKKyAgICAgKi8KKyAgICBidWZbMF0gPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0FMUE4gPj4gOCApICYgMHhGRiApOworICAgIGJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfQUxQTiAgICAgICkgJiAweEZGICk7CisKKyAgICAqb2xlbiA9IDcgKyBzdHJsZW4oIHNzbC0+YWxwbl9jaG9zZW4gKTsKKworICAgIGJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSggKCAoICpvbGVuIC0gNCApID4+IDggKSAmIDB4RkYgKTsKKyAgICBidWZbM10gPSAodW5zaWduZWQgY2hhcikoICggKCAqb2xlbiAtIDQgKSAgICAgICkgJiAweEZGICk7CisKKyAgICBidWZbNF0gPSAodW5zaWduZWQgY2hhcikoICggKCAqb2xlbiAtIDYgKSA+PiA4ICkgJiAweEZGICk7CisgICAgYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpKCAoICggKm9sZW4gLSA2ICkgICAgICApICYgMHhGRiApOworCisgICAgYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpKCAoICggKm9sZW4gLSA3ICkgICAgICApICYgMHhGRiApOworCisgICAgbWVtY3B5KCBidWYgKyA3LCBzc2wtPmFscG5fY2hvc2VuLCAqb2xlbiAtIDcgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDREhfQyB8fCBNQkVEVExTX0VDRFNBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpCitzdGF0aWMgaW50IHNzbF93cml0ZV9oZWxsb192ZXJpZnlfcmVxdWVzdCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzc2wtPm91dF9tc2cgKyA0OworICAgIHVuc2lnbmVkIGNoYXIgKmNvb2tpZV9sZW5fYnl0ZTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgaGVsbG8gdmVyaWZ5IHJlcXVlc3QiICkgKTsKKworICAgIC8qCisgICAgICogc3RydWN0IHsKKyAgICAgKiAgIFByb3RvY29sVmVyc2lvbiBzZXJ2ZXJfdmVyc2lvbjsKKyAgICAgKiAgIG9wYXF1ZSBjb29raWU8MC4uMl44LTE+OworICAgICAqIH0gSGVsbG9WZXJpZnlSZXF1ZXN0OworICAgICAqLworCisgICAgLyogVGhlIFJGQyBpcyBub3QgY2xlYXIgb24gdGhpcyBwb2ludCwgYnV0IHNlbmRpbmcgdGhlIGFjdHVhbCBuZWdvdGlhdGVkCisgICAgICogdmVyc2lvbiBsb29rcyBsaWtlIHRoZSBtb3N0IGludGVyb3BlcmFibGUgdGhpbmcgdG8gZG8uICovCisgICAgbWJlZHRsc19zc2xfd3JpdGVfdmVyc2lvbiggc3NsLT5tYWpvcl92ZXIsIHNzbC0+bWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPnRyYW5zcG9ydCwgcCApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInNlcnZlciB2ZXJzaW9uIiwgcCwgMiApOworICAgIHAgKz0gMjsKKworICAgIC8qIElmIHdlIGdldCBoZXJlLCBmX2Nvb2tpZV9jaGVjayBpcyBub3QgbnVsbCAqLworICAgIGlmKCBzc2wtPmNvbmYtPmZfY29va2llX3dyaXRlID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJpbmNvbnNpc3RlbnQgY29va2llIGNhbGxiYWNrcyIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworICAgIC8qIFNraXAgbGVuZ3RoIGJ5dGUgdW50aWwgd2Uga25vdyB0aGUgbGVuZ3RoICovCisgICAgY29va2llX2xlbl9ieXRlID0gcCsrOworCisgICAgaWYoICggcmV0ID0gc3NsLT5jb25mLT5mX2Nvb2tpZV93cml0ZSggc3NsLT5jb25mLT5wX2Nvb2tpZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcCwgc3NsLT5vdXRfYnVmICsgTUJFRFRMU19TU0xfQlVGRkVSX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNsaV9pZCwgc3NsLT5jbGlfaWRfbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgImZfY29va2llX3dyaXRlIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgKmNvb2tpZV9sZW5fYnl0ZSA9ICh1bnNpZ25lZCBjaGFyKSggcCAtICggY29va2llX2xlbl9ieXRlICsgMSApICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjb29raWUgc2VudCIsIGNvb2tpZV9sZW5fYnl0ZSArIDEsICpjb29raWVfbGVuX2J5dGUgKTsKKworICAgIHNzbC0+b3V0X21zZ2xlbiAgPSBwIC0gc3NsLT5vdXRfbXNnOworICAgIHNzbC0+b3V0X21zZ3R5cGUgPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFOworICAgIHNzbC0+b3V0X21zZ1swXSAgPSBNQkVEVExTX1NTTF9IU19IRUxMT19WRVJJRllfUkVRVUVTVDsKKworICAgIHNzbC0+c3RhdGUgPSBNQkVEVExTX1NTTF9TRVJWRVJfSEVMTE9fVkVSSUZZX1JFUVVFU1RfU0VOVDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gd3JpdGUgaGVsbG8gdmVyaWZ5IHJlcXVlc3QiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZICovCisKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX3NlcnZlcl9oZWxsbyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgIG1iZWR0bHNfdGltZV90IHQ7CisjZW5kaWYKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBvbGVuLCBleHRfbGVuID0gMCwgbjsKKyAgICB1bnNpZ25lZCBjaGFyICpidWYsICpwOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSBzZXJ2ZXIgaGVsbG8iICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZV9sZW4gIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImNsaWVudCBoZWxsbyB3YXMgbm90IGF1dGhlbnRpY2F0ZWQiICkgKTsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSBzZXJ2ZXIgaGVsbG8iICkgKTsKKworICAgICAgICByZXR1cm4oIHNzbF93cml0ZV9oZWxsb192ZXJpZnlfcmVxdWVzdCggc3NsICkgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkgKi8KKworICAgIGlmKCBzc2wtPmNvbmYtPmZfcm5nID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJubyBSTkcgcHJvdmlkZWQiKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9OT19STkcgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICAgICAwICAuICAgMCAgIGhhbmRzaGFrZSB0eXBlCisgICAgICogICAgIDEgIC4gICAzICAgaGFuZHNoYWtlIGxlbmd0aAorICAgICAqICAgICA0ICAuICAgNSAgIHByb3RvY29sIHZlcnNpb24KKyAgICAgKiAgICAgNiAgLiAgIDkgICBVTklYIHRpbWUoKQorICAgICAqICAgIDEwICAuICAzNyAgIHJhbmRvbSBieXRlcworICAgICAqLworICAgIGJ1ZiA9IHNzbC0+b3V0X21zZzsKKyAgICBwID0gYnVmICsgNDsKKworICAgIG1iZWR0bHNfc3NsX3dyaXRlX3ZlcnNpb24oIHNzbC0+bWFqb3JfdmVyLCBzc2wtPm1pbm9yX3ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT50cmFuc3BvcnQsIHAgKTsKKyAgICBwICs9IDI7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgY2hvc2VuIHZlcnNpb246IFslZDolZF0iLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmWzRdLCBidWZbNV0gKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICB0ID0gbWJlZHRsc190aW1lKCBOVUxMICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggdCA+PiAyNCApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIHQgPj4gMTYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCB0ID4+ICA4ICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggdCAgICAgICApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzZXJ2ZXIgaGVsbG8sIGN1cnJlbnQgdGltZTogJWx1IiwgdCApICk7CisjZWxzZQorICAgIGlmKCAoIHJldCA9IHNzbC0+Y29uZi0+Zl9ybmcoIHNzbC0+Y29uZi0+cF9ybmcsIHAsIDQgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcCArPSA0OworI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9USU1FICovCisKKyAgICBpZiggKCByZXQgPSBzc2wtPmNvbmYtPmZfcm5nKCBzc2wtPmNvbmYtPnBfcm5nLCBwLCAyOCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBwICs9IDI4OworCisgICAgbWVtY3B5KCBzc2wtPmhhbmRzaGFrZS0+cmFuZGJ5dGVzICsgMzIsIGJ1ZiArIDYsIDMyICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJzZXJ2ZXIgaGVsbG8sIHJhbmRvbSBieXRlcyIsIGJ1ZiArIDYsIDMyICk7CisKKyAgICAvKgorICAgICAqIFJlc3VtZSBpcyAwICBieSBkZWZhdWx0LCBzZWUgc3NsX2hhbmRzaGFrZV9pbml0KCkuCisgICAgICogSXQgbWF5IGJlIGFscmVhZHkgc2V0IHRvIDEgYnkgc3NsX3BhcnNlX3Nlc3Npb25fdGlja2V0X2V4dCgpLgorICAgICAqIElmIG5vdCwgdHJ5IGxvb2tpbmcgdXAgc2Vzc2lvbiBJRCBpbiBvdXIgY2FjaGUuCisgICAgICovCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5yZXN1bWUgPT0gMCAmJgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFICYmCisjZW5kaWYKKyAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWRfbGVuICE9IDAgJiYKKyAgICAgICAgc3NsLT5jb25mLT5mX2dldF9jYWNoZSAhPSBOVUxMICYmCisgICAgICAgIHNzbC0+Y29uZi0+Zl9nZXRfY2FjaGUoIHNzbC0+Y29uZi0+cF9jYWNoZSwgc3NsLT5zZXNzaW9uX25lZ290aWF0ZSApID09IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIGNhY2hlIiApICk7CisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXN1bWUgPSAxOworICAgIH0KKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+cmVzdW1lID09IDAgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogTmV3IHNlc3Npb24sIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIGlkLAorICAgICAgICAgKiB1bmxlc3Mgd2UncmUgYWJvdXQgdG8gaXNzdWUgYSBzZXNzaW9uIHRpY2tldAorICAgICAgICAgKi8KKyAgICAgICAgc3NsLT5zdGF0ZSsrOworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+c3RhcnQgPSBtYmVkdGxzX3RpbWUoIE5VTEwgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+bmV3X3Nlc3Npb25fdGlja2V0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW4gPSBuID0gMDsKKyAgICAgICAgICAgIG1lbXNldCggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWQsIDAsIDMyICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworICAgICAgICB7CisgICAgICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW4gPSBuID0gMzI7CisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2wtPmNvbmYtPmZfcm5nKCBzc2wtPmNvbmYtPnBfcm5nLCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVzdW1pbmcgYSBzZXNzaW9uCisgICAgICAgICAqLworICAgICAgICBuID0gc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWRfbGVuOworICAgICAgICBzc2wtPnN0YXRlID0gTUJFRFRMU19TU0xfU0VSVkVSX0NIQU5HRV9DSVBIRVJfU1BFQzsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9kZXJpdmVfa2V5cyggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfZGVyaXZlX2tleXMiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqICAgIDM4ICAuICAzOCAgICAgc2Vzc2lvbiBpZCBsZW5ndGgKKyAgICAgKiAgICAzOSAgLiAzOCtuICAgIHNlc3Npb24gaWQKKyAgICAgKiAgIDM5K24gLiA0MCtuICAgIGNob3NlbiBjaXBoZXJzdWl0ZQorICAgICAqICAgNDErbiAuIDQxK24gICAgY2hvc2VuIGNvbXByZXNzaW9uIGFsZy4KKyAgICAgKiAgIDQyK24gLiA0MytuICAgIGV4dGVuc2lvbnMgbGVuZ3RoCisgICAgICogICA0NCtuIC4gNDMrbittICBleHRlbnNpb25zCisgICAgICovCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW47CisgICAgbWVtY3B5KCBwLCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCwgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWRfbGVuICk7CisgICAgcCArPSBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW47CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgc2Vzc2lvbiBpZCBsZW4uOiAlZCIsIG4gKSApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgICAic2VydmVyIGhlbGxvLCBzZXNzaW9uIGlkIiwgYnVmICsgMzksIG4gKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggIiVzIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIsCisgICAgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJlc3VtZSA/ICJhIiA6ICJubyIgKSApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGUgPj4gOCApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlICAgICAgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jb21wcmVzc2lvbiAgICAgICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgY2hvc2VuIGNpcGhlcnN1aXRlOiAlcyIsCisgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZSApICkgKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgY29tcHJlc3MgYWxnLjogMHglMDJYIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jb21wcmVzc2lvbiApICk7CisKKyAgICAvKiBEbyBub3Qgd3JpdGUgdGhlIGV4dGVuc2lvbnMgaWYgdGhlIHByb3RvY29sIGlzIFNTTHYzICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorICAgIGlmKCAoIHNzbC0+bWFqb3JfdmVyICE9IDMgKSB8fCAoIHNzbC0+bWlub3JfdmVyICE9IDAgKSApCisgICAgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqICBGaXJzdCB3cml0ZSBleHRlbnNpb25zLCB0aGVuIHRoZSB0b3RhbCBsZW5ndGgKKyAgICAgKi8KKyAgICBzc2xfd3JpdGVfcmVuZWdvdGlhdGlvbl9leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKKyAgICBzc2xfd3JpdGVfbWF4X2ZyYWdtZW50X2xlbmd0aF9leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKKyAgICBzc2xfd3JpdGVfdHJ1bmNhdGVkX2htYWNfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKKyAgICBzc2xfd3JpdGVfZW5jcnlwdF90aGVuX21hY19leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorICAgIHNzbF93cml0ZV9leHRlbmRlZF9tc19leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgc3NsX3dyaXRlX3Nlc3Npb25fdGlja2V0X2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIHNzbF93cml0ZV9zdXBwb3J0ZWRfcG9pbnRfZm9ybWF0c19leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgc3NsX3dyaXRlX2VjanBha2Vfa2twcF9leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIHNzbF93cml0ZV9hbHBuX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgdG90YWwgZXh0ZW5zaW9uIGxlbmd0aDogJWQiLCBleHRfbGVuICkgKTsKKworICAgIGlmKCBleHRfbGVuID4gMCApCisgICAgeworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIGV4dF9sZW4gPj4gOCApICYgMHhGRiApOworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIGV4dF9sZW4gICAgICApICYgMHhGRiApOworICAgICAgICBwICs9IGV4dF9sZW47CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorICAgIH0KKyNlbmRpZgorCisgICAgc3NsLT5vdXRfbXNnbGVuICA9IHAgLSBidWY7CisgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U7CisgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0hTX1NFUlZFUl9IRUxMTzsKKworICAgIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHdyaXRlIHNlcnZlciBoZWxsbyIgKSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKSAgICAgICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKSAgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEKSYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKQorc3RhdGljIGludCBzc2xfd3JpdGVfY2VydGlmaWNhdGVfcmVxdWVzdCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiApICk7CisKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKK30KKyNlbHNlCitzdGF0aWMgaW50IHNzbF93cml0ZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRTsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvOworICAgIHNpemVfdCBkbl9zaXplLCB0b3RhbF9kbl9zaXplOyAvKiBleGNsdWRpbmcgbGVuZ3RoIGJ5dGVzICovCisgICAgc2l6ZV90IGN0X2xlbiwgc2FfbGVuOyAvKiBpbmNsdWRpbmcgbGVuZ3RoIGJ5dGVzICovCisgICAgdW5zaWduZWQgY2hhciAqYnVmLCAqcDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogY29uc3QgZW5kID0gc3NsLT5vdXRfbXNnICsgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOOworICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKmNydDsKKyAgICBpbnQgYXV0aG1vZGU7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiICkgKTsKKworICAgIHNzbC0+c3RhdGUrKzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTikKKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPnNuaV9hdXRobW9kZSAhPSBNQkVEVExTX1NTTF9WRVJJRllfVU5TRVQgKQorICAgICAgICBhdXRobW9kZSA9IHNzbC0+aGFuZHNoYWtlLT5zbmlfYXV0aG1vZGU7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGF1dGhtb2RlID0gc3NsLT5jb25mLT5hdXRobW9kZTsKKworICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgfHwKKyAgICAgICAgYXV0aG1vZGUgPT0gTUJFRFRMU19TU0xfVkVSSUZZX05PTkUgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiICkgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgICAgMCAgLiAgIDAgICBoYW5kc2hha2UgdHlwZQorICAgICAqICAgICAxICAuICAgMyAgIGhhbmRzaGFrZSBsZW5ndGgKKyAgICAgKiAgICAgNCAgLiAgIDQgICBjZXJ0IHR5cGUgY291bnQKKyAgICAgKiAgICAgNSAgLi4gbS0xICBjZXJ0IHR5cGVzCisgICAgICogICAgIG0gIC4uIG0rMSAgc2lnIGFsZyBsZW5ndGggKFRMUyAxLjIgb25seSkKKyAgICAgKiAgICBtKzEgLi4gbi0xICBTaWduYXR1cmVBbmRIYXNoQWxnb3JpdGhtcyAoVExTIDEuMiBvbmx5KQorICAgICAqICAgICBuICAuLiBuKzEgIGxlbmd0aCBvZiBhbGwgRE5zCisgICAgICogICAgbisyIC4uIG4rMyAgbGVuZ3RoIG9mIEROIDEKKyAgICAgKiAgICBuKzQgLi4gLi4uICBEaXN0aW5ndWlzaGVkIE5hbWUgIzEKKyAgICAgKiAgICAuLi4gLi4gLi4uICBsZW5ndGggb2YgRE4gMiwgZXRjLgorICAgICAqLworICAgIGJ1ZiA9IHNzbC0+b3V0X21zZzsKKyAgICBwID0gYnVmICsgNDsKKworICAgIC8qCisgICAgICogU3VwcG9ydGVkIGNlcnRpZmljYXRlIHR5cGVzCisgICAgICoKKyAgICAgKiAgICAgQ2xpZW50Q2VydGlmaWNhdGVUeXBlIGNlcnRpZmljYXRlX3R5cGVzPDEuLjJeOC0xPjsKKyAgICAgKiAgICAgZW51bSB7ICgyNTUpIH0gQ2xpZW50Q2VydGlmaWNhdGVUeXBlOworICAgICAqLworICAgIGN0X2xlbiA9IDA7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgcFsxICsgY3RfbGVuKytdID0gTUJFRFRMU19TU0xfQ0VSVF9UWVBFX1JTQV9TSUdOOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgcFsxICsgY3RfbGVuKytdID0gTUJFRFRMU19TU0xfQ0VSVF9UWVBFX0VDRFNBX1NJR047CisjZW5kaWYKKworICAgIHBbMF0gPSAodW5zaWduZWQgY2hhcikgY3RfbGVuKys7CisgICAgcCArPSBjdF9sZW47CisKKyAgICBzYV9sZW4gPSAwOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgIC8qCisgICAgICogQWRkIHNpZ25hdHVyZV9hbGdvcml0aG1zIGZvciB2ZXJpZnkgKFRMUyAxLjIpCisgICAgICoKKyAgICAgKiAgICAgU2lnbmF0dXJlQW5kSGFzaEFsZ29yaXRobSBzdXBwb3J0ZWRfc2lnbmF0dXJlX2FsZ29yaXRobXM8Mi4uMl4xNi0yPjsKKyAgICAgKgorICAgICAqICAgICBzdHJ1Y3QgeworICAgICAqICAgICAgICAgICBIYXNoQWxnb3JpdGhtIGhhc2g7CisgICAgICogICAgICAgICAgIFNpZ25hdHVyZUFsZ29yaXRobSBzaWduYXR1cmU7CisgICAgICogICAgIH0gU2lnbmF0dXJlQW5kSGFzaEFsZ29yaXRobTsKKyAgICAgKgorICAgICAqICAgICBlbnVtIHsgKDI1NSkgfSBIYXNoQWxnb3JpdGhtOworICAgICAqICAgICBlbnVtIHsgKDI1NSkgfSBTaWduYXR1cmVBbGdvcml0aG07CisgICAgICovCisgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApCisgICAgeworICAgICAgICBjb25zdCBpbnQgKmN1cjsKKworICAgICAgICAvKgorICAgICAgICAgKiBTdXBwb3J0ZWQgc2lnbmF0dXJlIGFsZ29yaXRobXMKKyAgICAgICAgICovCisgICAgICAgIGZvciggY3VyID0gc3NsLT5jb25mLT5zaWdfaGFzaGVzOyAqY3VyICE9IE1CRURUTFNfTURfTk9ORTsgY3VyKysgKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGhhc2ggPSBtYmVkdGxzX3NzbF9oYXNoX2Zyb21fbWRfYWxnKCAqY3VyICk7CisKKyAgICAgICAgICAgIGlmKCBNQkVEVExTX1NTTF9IQVNIX05PTkUgPT0gaGFzaCB8fCBtYmVkdGxzX3NzbF9zZXRfY2FsY192ZXJpZnlfbWQoIHNzbCwgaGFzaCApICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICAgICAgICAgIHBbMiArIHNhX2xlbisrXSA9IGhhc2g7CisgICAgICAgICAgICBwWzIgKyBzYV9sZW4rK10gPSBNQkVEVExTX1NTTF9TSUdfUlNBOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgICAgICAgICBwWzIgKyBzYV9sZW4rK10gPSBoYXNoOworICAgICAgICAgICAgcFsyICsgc2FfbGVuKytdID0gTUJFRFRMU19TU0xfU0lHX0VDRFNBOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBwWzBdID0gKHVuc2lnbmVkIGNoYXIpKCBzYV9sZW4gPj4gOCApOworICAgICAgICBwWzFdID0gKHVuc2lnbmVkIGNoYXIpKCBzYV9sZW4gICAgICApOworICAgICAgICBzYV9sZW4gKz0gMjsKKyAgICAgICAgcCArPSBzYV9sZW47CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworCisgICAgLyoKKyAgICAgKiBEaXN0aW5ndWlzaGVkTmFtZSBjZXJ0aWZpY2F0ZV9hdXRob3JpdGllczwwLi4yXjE2LTE+OworICAgICAqIG9wYXF1ZSBEaXN0aW5ndWlzaGVkTmFtZTwxLi4yXjE2LTE+OworICAgICAqLworICAgIHAgKz0gMjsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5zbmlfY2FfY2hhaW4gIT0gTlVMTCApCisgICAgICAgIGNydCA9IHNzbC0+aGFuZHNoYWtlLT5zbmlfY2FfY2hhaW47CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGNydCA9IHNzbC0+Y29uZi0+Y2FfY2hhaW47CisKKyAgICB0b3RhbF9kbl9zaXplID0gMDsKKyAgICB3aGlsZSggY3J0ICE9IE5VTEwgJiYgY3J0LT52ZXJzaW9uICE9IDAgKQorICAgIHsKKyAgICAgICAgZG5fc2l6ZSA9IGNydC0+c3ViamVjdF9yYXcubGVuOworCisgICAgICAgIGlmKCBlbmQgPCBwIHx8CisgICAgICAgICAgICAoc2l6ZV90KSggZW5kIC0gcCApIDwgZG5fc2l6ZSB8fAorICAgICAgICAgICAgKHNpemVfdCkoIGVuZCAtIHAgKSA8IDIgKyBkbl9zaXplICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJza2lwcGluZyBDQXM6IGJ1ZmZlciB0b28gc2hvcnQiICkgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggZG5fc2l6ZSA+PiA4ICk7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIGRuX3NpemUgICAgICApOworICAgICAgICBtZW1jcHkoIHAsIGNydC0+c3ViamVjdF9yYXcucCwgZG5fc2l6ZSApOworICAgICAgICBwICs9IGRuX3NpemU7CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAicmVxdWVzdGVkIEROIiwgcCAtIGRuX3NpemUsIGRuX3NpemUgKTsKKworICAgICAgICB0b3RhbF9kbl9zaXplICs9IDIgKyBkbl9zaXplOworICAgICAgICBjcnQgPSBjcnQtPm5leHQ7CisgICAgfQorCisgICAgc3NsLT5vdXRfbXNnbGVuICA9IHAgLSBidWY7CisgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U7CisgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFX1JFUVVFU1Q7CisgICAgc3NsLT5vdXRfbXNnWzQgKyBjdF9sZW4gKyBzYV9sZW5dID0gKHVuc2lnbmVkIGNoYXIpKCB0b3RhbF9kbl9zaXplICA+PiA4ICk7CisgICAgc3NsLT5vdXRfbXNnWzUgKyBjdF9sZW4gKyBzYV9sZW5dID0gKHVuc2lnbmVkIGNoYXIpKCB0b3RhbF9kbl9zaXplICAgICAgICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQoIHNzbCApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiApICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qICFNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgJiYKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQgJiYKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9nZXRfZWNkaF9wYXJhbXNfZnJvbV9jZXJ0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggISBtYmVkdGxzX3BrX2Nhbl9kbyggbWJlZHRsc19zc2xfb3duX2tleSggc3NsICksIE1CRURUTFNfUEtfRUNLRVkgKSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNlcnZlciBrZXkgbm90IEVDREggY2FwYWJsZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9QS19UWVBFX01JU01BVENIICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RoX2dldF9wYXJhbXMoICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2VjKCAqbWJlZHRsc19zc2xfb3duX2tleSggc3NsICkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRUNESF9PVVJTICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgKCAibWJlZHRsc19lY2RoX2dldF9wYXJhbXMiICksIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEICovCisKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX3NlcnZlcl9rZXlfZXhjaGFuZ2UoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbiA9IDA7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvOworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgdW5zaWduZWQgY2hhciAqcCA9IHNzbC0+b3V0X21zZyArIDQ7CisgICAgdW5zaWduZWQgY2hhciAqZGlnX3NpZ25lZCA9IHA7CisgICAgc2l6ZV90IGRpZ19zaWduZWRfbGVuID0gMCwgbGVuOworICAgICgodm9pZCkgZGlnX3NpZ25lZCk7CisgICAgKCh2b2lkKSBkaWdfc2lnbmVkX2xlbik7CisgICAgKCh2b2lkKSBsZW4pOworI2VuZGlmCisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIHNlcnZlciBrZXkgZXhjaGFuZ2UiICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0sgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBza2lwIHdyaXRlIHNlcnZlciBrZXkgZXhjaGFuZ2UiICkgKTsKKyAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EgKQorICAgIHsKKyAgICAgICAgc3NsX2dldF9lY2RoX3BhcmFtc19mcm9tX2NlcnQoIHNzbCApOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCB3cml0ZSBzZXJ2ZXIga2V5IGV4Y2hhbmdlIiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGpsZW47CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKworICAgICAgICByZXQgPSBtYmVkdGxzX2VjanBha2Vfd3JpdGVfcm91bmRfdHdvKCAmc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY3R4LAorICAgICAgICAgICAgICAgIHAsIGVuZCAtIHAsICZqbGVuLCBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF90d28iLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBwICs9IGpsZW47CisgICAgICAgIG4gKz0gamxlbjsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLICkKKyAgICB7CisgICAgICAgIC8qIE5vdGU6IHdlIGRvbid0IHN1cHBvcnQgaWRlbnRpdHkgaGludHMsIHVudGlsIHNvbWVvbmUgYXNrcworICAgICAgICAgKiBmb3IgdGhlbS4gKi8KKyAgICAgICAgKihwKyspID0gMHgwMDsKKyAgICAgICAgKihwKyspID0gMHgwMDsKKworICAgICAgICBuICs9IDI7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+ZGhtX1AucCA9PSBOVUxMIHx8IHNzbC0+Y29uZi0+ZGhtX0cucCA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJubyBESCBwYXJhbWV0ZXJzIHNldCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEVwaGVtZXJhbCBESCBwYXJhbWV0ZXJzOgorICAgICAgICAgKgorICAgICAgICAgKiBzdHJ1Y3QgeworICAgICAgICAgKiAgICAgb3BhcXVlIGRoX3A8MS4uMl4xNi0xPjsKKyAgICAgICAgICogICAgIG9wYXF1ZSBkaF9nPDEuLjJeMTYtMT47CisgICAgICAgICAqICAgICBvcGFxdWUgZGhfWXM8MS4uMl4xNi0xPjsKKyAgICAgICAgICogfSBTZXJ2ZXJESFBhcmFtczsKKyAgICAgICAgICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX2NvcHkoICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5QLCAmc3NsLT5jb25mLT5kaG1fUCApICkgIT0gMCB8fAorICAgICAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9jb3B5KCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHguRywgJnNzbC0+Y29uZi0+ZGhtX0cgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX21waV9jb3B5IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fbWFrZV9wYXJhbXMoICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIG1iZWR0bHNfbXBpX3NpemUoICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5QICksCisgICAgICAgICAgICAgICAgICAgICAgICBwLCAmbGVuLCBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19kaG1fbWFrZV9wYXJhbXMiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBkaWdfc2lnbmVkID0gcDsKKyAgICAgICAgZGlnX3NpZ25lZF9sZW4gPSBsZW47CisKKyAgICAgICAgcCArPSBsZW47CisgICAgICAgIG4gKz0gbGVuOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01QSSggMywgIkRITTogWCAiLCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHguWCAgKTsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiREhNOiBQICIsICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5QICApOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NUEkoIDMsICJESE06IEcgIiwgJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LkcgICk7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01QSSggMywgIkRITTogR1giLCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHguR1ggKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19FQ0RIRV9FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEVwaGVtZXJhbCBFQ0RIIHBhcmFtZXRlcnM6CisgICAgICAgICAqCisgICAgICAgICAqIHN0cnVjdCB7CisgICAgICAgICAqICAgICBFQ1BhcmFtZXRlcnMgY3VydmVfcGFyYW1zOworICAgICAgICAgKiAgICAgRUNQb2ludCAgICAgIHB1YmxpYzsKKyAgICAgICAgICogfSBTZXJ2ZXJFQ0RIUGFyYW1zOworICAgICAgICAgKi8KKyAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqKmN1cnZlID0gTlVMTDsKKyAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKmdpZDsKKworICAgICAgICAvKiBNYXRjaCBvdXIgcHJlZmVyZW5jZSBsaXN0IGFnYWluc3QgdGhlIG9mZmVyZWQgY3VydmVzICovCisgICAgICAgIGZvciggZ2lkID0gc3NsLT5jb25mLT5jdXJ2ZV9saXN0OyAqZ2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7IGdpZCsrICkKKyAgICAgICAgICAgIGZvciggY3VydmUgPSBzc2wtPmhhbmRzaGFrZS0+Y3VydmVzOyAqY3VydmUgIT0gTlVMTDsgY3VydmUrKyApCisgICAgICAgICAgICAgICAgaWYoICgqY3VydmUpLT5ncnBfaWQgPT0gKmdpZCApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gY3VydmVfbWF0Y2hpbmdfZG9uZTsKKworY3VydmVfbWF0Y2hpbmdfZG9uZToKKyAgICAgICAgaWYoIGN1cnZlID09IE5VTEwgfHwgKmN1cnZlID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm5vIG1hdGNoaW5nIGN1cnZlIGZvciBFQ0RIRSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfTk9fQ0lQSEVSX0NIT1NFTiApOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJFQ0RIRSBjdXJ2ZTogJXMiLCAoKmN1cnZlKS0+bmFtZSApICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eC5ncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKmN1cnZlKS0+Z3JwX2lkICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19lY3BfZ3JvdXBfbG9hZCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkaF9tYWtlX3BhcmFtcyggJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eCwgJmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOIC0gbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNkaF9tYWtlX3BhcmFtcyIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGRpZ19zaWduZWQgPSBwOworICAgICAgICBkaWdfc2lnbmVkX2xlbiA9IGxlbjsKKworICAgICAgICBwICs9IGxlbjsKKyAgICAgICAgbiArPSBsZW47CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfRUNQKCAzLCAiRUNESDogUSAiLCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LlEgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX0VDREhFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHNpZ25hdHVyZV9sZW4gPSAwOworICAgICAgICB1bnNpZ25lZCBpbnQgaGFzaGxlbiA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaGFzaFs2NF07CisgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZyA9IE1CRURUTFNfTURfTk9ORTsKKworICAgICAgICAvKgorICAgICAgICAgKiBDaG9vc2UgaGFzaCBhbGdvcml0aG0uIE5PTkUgbWVhbnMgTUQ1ICsgU0hBMSBoZXJlLgorICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1kX2FsZyA9IG1iZWR0bHNfc3NsX21kX2FsZ19mcm9tX2hhc2goIHNzbC0+aGFuZHNoYWtlLT5zaWdfYWxnICk7CisKKyAgICAgICAgICAgIGlmKCBtZF9hbGcgPT0gTUJFRFRMU19NRF9OT05FICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorICAgICAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09CisgICAgICAgICAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1kX2FsZyA9IE1CRURUTFNfTURfU0hBMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgbWRfYWxnID0gTUJFRFRMU19NRF9OT05FOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ29tcHV0ZSB0aGUgaGFzaCB0byBiZSBzaWduZWQKKyAgICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyAgICAgICAgaWYoIG1kX2FsZyA9PSBNQkVEVExTX01EX05PTkUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX21kNV9jb250ZXh0IG1iZWR0bHNfbWQ1OworICAgICAgICAgICAgbWJlZHRsc19zaGExX2NvbnRleHQgbWJlZHRsc19zaGExOworCisgICAgICAgICAgICBtYmVkdGxzX21kNV9pbml0KCAgJm1iZWR0bHNfbWQ1ICApOworICAgICAgICAgICAgbWJlZHRsc19zaGExX2luaXQoICZtYmVkdGxzX3NoYTEgKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGRpZ2l0YWxseS1zaWduZWQgc3RydWN0IHsKKyAgICAgICAgICAgICAqICAgICBvcGFxdWUgbWQ1X2hhc2hbMTZdOworICAgICAgICAgICAgICogICAgIG9wYXF1ZSBzaGFfaGFzaFsyMF07CisgICAgICAgICAgICAgKiB9OworICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIG1kNV9oYXNoCisgICAgICAgICAgICAgKiAgICAgTUQ1KENsaWVudEhlbGxvLnJhbmRvbSArIFNlcnZlckhlbGxvLnJhbmRvbQorICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBTZXJ2ZXJQYXJhbXMpOworICAgICAgICAgICAgICogc2hhX2hhc2gKKyAgICAgICAgICAgICAqICAgICBTSEEoQ2xpZW50SGVsbG8ucmFuZG9tICsgU2VydmVySGVsbG8ucmFuZG9tCisgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFNlcnZlclBhcmFtcyk7CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X3N0YXJ0cyggJm1iZWR0bHNfbWQ1ICk7CisgICAgICAgICAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtYmVkdGxzX21kNSwgc3NsLT5oYW5kc2hha2UtPnJhbmRieXRlcywgIDY0ICk7CisgICAgICAgICAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtYmVkdGxzX21kNSwgZGlnX3NpZ25lZCwgZGlnX3NpZ25lZF9sZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X2ZpbmlzaCggJm1iZWR0bHNfbWQ1LCBoYXNoICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMV9zdGFydHMoICZtYmVkdGxzX3NoYTEgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZtYmVkdGxzX3NoYTEsIHNzbC0+aGFuZHNoYWtlLT5yYW5kYnl0ZXMsICA2NCApOworICAgICAgICAgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJm1iZWR0bHNfc2hhMSwgZGlnX3NpZ25lZCwgZGlnX3NpZ25lZF9sZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMV9maW5pc2goICZtYmVkdGxzX3NoYTEsIGhhc2ggKyAxNiApOworCisgICAgICAgICAgICBoYXNobGVuID0gMzY7CisKKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X2ZyZWUoICAmbWJlZHRsc19tZDUgICk7CisgICAgICAgICAgICBtYmVkdGxzX3NoYTFfZnJlZSggJm1iZWR0bHNfc2hhMSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzEgfHwgXAorICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgaWYoIG1kX2FsZyAhPSBNQkVEVExTX01EX05PTkUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBjdHg7CisgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApOworCisgICAgICAgICAgICBtYmVkdGxzX21kX2luaXQoICZjdHggKTsKKworICAgICAgICAgICAgLyogSW5mbyBmcm9tIG1kX2FsZyB3aWxsIGJlIHVzZWQgaW5zdGVhZCAqLworICAgICAgICAgICAgaGFzaGxlbiA9IDA7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBkaWdpdGFsbHktc2lnbmVkIHN0cnVjdCB7CisgICAgICAgICAgICAgKiAgICAgb3BhcXVlIGNsaWVudF9yYW5kb21bMzJdOworICAgICAgICAgICAgICogICAgIG9wYXF1ZSBzZXJ2ZXJfcmFuZG9tWzMyXTsKKyAgICAgICAgICAgICAqICAgICBTZXJ2ZXJESFBhcmFtcyBwYXJhbXM7CisgICAgICAgICAgICAgKiB9OworICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmY3R4LCBtZF9pbmZvLCAwICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX21kX3NldHVwIiwgcmV0ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19tZF9zdGFydHMoICZjdHggKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmY3R4LCBzc2wtPmhhbmRzaGFrZS0+cmFuZGJ5dGVzLCA2NCApOworICAgICAgICAgICAgbWJlZHRsc19tZF91cGRhdGUoICZjdHgsIGRpZ19zaWduZWQsIGRpZ19zaWduZWRfbGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2ZpbmlzaCggJmN0eCwgaGFzaCApOworICAgICAgICAgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4ICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzEgfHwgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xIHx8IFwKKyAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAicGFyYW1ldGVycyBoYXNoIiwgaGFzaCwgaGFzaGxlbiAhPSAwID8gaGFzaGxlbiA6CisgICAgICAgICAgICAodW5zaWduZWQgaW50KSAoIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApICkgKSApOworCisgICAgICAgIC8qCisgICAgICAgICAqIE1ha2UgdGhlIHNpZ25hdHVyZQorICAgICAgICAgKi8KKyAgICAgICAgaWYoIG1iZWR0bHNfc3NsX293bl9rZXkoIHNzbCApID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImdvdCBubyBwcml2YXRlIGtleSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfUFJJVkFURV9LRVlfUkVRVUlSRUQgKTsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgICAgICB7CisgICAgICAgICAgICAqKHArKykgPSBzc2wtPmhhbmRzaGFrZS0+c2lnX2FsZzsKKyAgICAgICAgICAgICoocCsrKSA9IG1iZWR0bHNfc3NsX3NpZ19mcm9tX3BrKCBtYmVkdGxzX3NzbF9vd25fa2V5KCBzc2wgKSApOworCisgICAgICAgICAgICBuICs9IDI7CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3NpZ24oIG1iZWR0bHNfc3NsX293bl9rZXkoIHNzbCApLCBtZF9hbGcsIGhhc2gsIGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBwICsgMiAsICZzaWduYXR1cmVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfcGtfc2lnbiIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgICoocCsrKSA9ICh1bnNpZ25lZCBjaGFyKSggc2lnbmF0dXJlX2xlbiA+PiA4ICk7CisgICAgICAgICoocCsrKSA9ICh1bnNpZ25lZCBjaGFyKSggc2lnbmF0dXJlX2xlbiAgICAgICk7CisgICAgICAgIG4gKz0gMjsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJteSBzaWduYXR1cmUiLCBwLCBzaWduYXR1cmVfbGVuICk7CisKKyAgICAgICAgbiArPSBzaWduYXR1cmVfbGVuOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEICovCisKKyAgICBzc2wtPm91dF9tc2dsZW4gID0gNCArIG47CisgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U7CisgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0U7CisKKyAgICBzc2wtPnN0YXRlKys7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHdyaXRlIHNlcnZlciBrZXkgZXhjaGFuZ2UiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHNzbF93cml0ZV9zZXJ2ZXJfaGVsbG9fZG9uZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSBzZXJ2ZXIgaGVsbG8gZG9uZSIgKSApOworCisgICAgc3NsLT5vdXRfbXNnbGVuICA9IDQ7CisgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U7CisgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0hTX1NFUlZFUl9IRUxMT19ET05FOworCisgICAgc3NsLT5zdGF0ZSsrOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2ZsaWdodF9jb21wbGV0ZWQoIHNzbCApOworI2VuZGlmCisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHdyaXRlIHNlcnZlciBoZWxsbyBkb25lIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcGFyc2VfY2xpZW50X2RoX3B1YmxpYyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCApCit7CisgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFOworICAgIHNpemVfdCBuOworCisgICAgLyoKKyAgICAgKiBSZWNlaXZlIEdeWSBtb2QgUCwgcHJlbWFzdGVyID0gKEdeWSleWCBtb2QgUAorICAgICAqLworICAgIGlmKCAqcCArIDIgPiBlbmQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFICk7CisgICAgfQorCisgICAgbiA9ICggKCpwKVswXSA8PCA4ICkgfCAoKnApWzFdOworICAgICpwICs9IDI7CisKKyAgICBpZiggKnAgKyBuID4gZW5kICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZGhtX3JlYWRfcHVibGljKCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHgsICpwLCBuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZGhtX3JlYWRfcHVibGljIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX1JQICk7CisgICAgfQorCisgICAgKnAgKz0gbjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01QSSggMywgIkRITTogR1kiLCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHguR1kgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX2VuY3J5cHRlZF9wbXMoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcG1zX29mZnNldCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gbWJlZHRsc19wa19nZXRfbGVuKCBtYmVkdGxzX3NzbF9vd25fa2V5KCBzc2wgKSApOworICAgIHVuc2lnbmVkIGNoYXIgKnBtcyA9IHNzbC0+aGFuZHNoYWtlLT5wcmVtYXN0ZXIgKyBwbXNfb2Zmc2V0OworICAgIHVuc2lnbmVkIGNoYXIgdmVyWzJdOworICAgIHVuc2lnbmVkIGNoYXIgZmFrZV9wbXNbNDhdLCBwZWVyX3Btc1s0OF07CisgICAgdW5zaWduZWQgY2hhciBtYXNrOworICAgIHNpemVfdCBpLCBwZWVyX3Btc2xlbjsKKyAgICB1bnNpZ25lZCBpbnQgZGlmZjsKKworICAgIGlmKCAhIG1iZWR0bHNfcGtfY2FuX2RvKCBtYmVkdGxzX3NzbF9vd25fa2V5KCBzc2wgKSwgTUJFRFRMU19QS19SU0EgKSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImdvdCBubyBSU0EgcHJpdmF0ZSBrZXkiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfUFJJVkFURV9LRVlfUkVRVUlSRUQgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIERlY3J5cHQgdGhlIHByZW1hc3RlciB1c2luZyBvd24gcHJpdmF0ZSBSU0Ega2V5CisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgIGlmKCBzc2wtPm1pbm9yX3ZlciAhPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQorICAgIHsKKyAgICAgICAgaWYoICpwKysgIT0gKCAoIGxlbiA+PiA4ICkgJiAweEZGICkgfHwKKyAgICAgICAgICAgICpwKysgIT0gKCAoIGxlbiAgICAgICkgJiAweEZGICkgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQga2V5IGV4Y2hhbmdlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGlmKCBwICsgbGVuICE9IGVuZCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQga2V5IGV4Y2hhbmdlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3NzbF93cml0ZV92ZXJzaW9uKCBzc2wtPmhhbmRzaGFrZS0+bWF4X21ham9yX3ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPm1heF9taW5vcl92ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+dHJhbnNwb3J0LCB2ZXIgKTsKKworICAgIC8qCisgICAgICogUHJvdGVjdGlvbiBhZ2FpbnN0IEJsZWljaGVuYmFjaGVyJ3MgYXR0YWNrOiBpbnZhbGlkIFBLQ1MjMSB2MS41IHBhZGRpbmcKKyAgICAgKiBtdXN0IG5vdCBjYXVzZSB0aGUgY29ubmVjdGlvbiB0byBlbmQgaW1tZWRpYXRlbHk7IGluc3RlYWQsIHNlbmQgYQorICAgICAqIGJhZF9yZWNvcmRfbWFjIGxhdGVyIGluIHRoZSBoYW5kc2hha2UuCisgICAgICogQWxzbywgYXZvaWQgZGF0YS1kZXBlbmRhbnQgYnJhbmNoZXMgaGVyZSB0byBwcm90ZWN0IGFnYWluc3QKKyAgICAgKiB0aW1pbmctYmFzZWQgdmFyaWFudHMuCisgICAgICovCisgICAgcmV0ID0gc3NsLT5jb25mLT5mX3JuZyggc3NsLT5jb25mLT5wX3JuZywgZmFrZV9wbXMsIHNpemVvZiggZmFrZV9wbXMgKSApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3BrX2RlY3J5cHQoIG1iZWR0bHNfc3NsX293bl9rZXkoIHNzbCApLCBwLCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgcGVlcl9wbXMsICZwZWVyX3Btc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIHBlZXJfcG1zICksCisgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApOworCisgICAgZGlmZiAgPSAodW5zaWduZWQgaW50KSByZXQ7CisgICAgZGlmZiB8PSBwZWVyX3Btc2xlbiBeIDQ4OworICAgIGRpZmYgfD0gcGVlcl9wbXNbMF0gXiB2ZXJbMF07CisgICAgZGlmZiB8PSBwZWVyX3Btc1sxXSBeIHZlclsxXTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfREVCVUdfQUxMKQorICAgIGlmKCBkaWZmICE9IDAgKQorICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQga2V5IGV4Y2hhbmdlIG1lc3NhZ2UiICkgKTsKKyNlbmRpZgorCisgICAgaWYoIHNpemVvZiggc3NsLT5oYW5kc2hha2UtPnByZW1hc3RlciApIDwgcG1zX29mZnNldCB8fAorICAgICAgICBzaXplb2YoIHNzbC0+aGFuZHNoYWtlLT5wcmVtYXN0ZXIgKSAtIHBtc19vZmZzZXQgPCA0OCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisgICAgc3NsLT5oYW5kc2hha2UtPnBtc2xlbiA9IDQ4OworCisgICAgLyogbWFzayA9IGRpZmYgPyAweGZmIDogMHgwMCB1c2luZyBiaXQgb3BlcmF0aW9ucyB0byBhdm9pZCBicmFuY2hlcyAqLworICAgIC8qIE1TVkMgaGFzIGEgd2FybmluZyBhYm91dCB1bmFyeSBtaW51cyBvbiB1bnNpZ25lZCwgYnV0IHRoaXMgaXMKKyAgICAgKiB3ZWxsLWRlZmluZWQgYW5kIHByZWNpc2VseSB3aGF0IHdlIHdhbnQgdG8gZG8gaGVyZSAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoIHB1c2ggKQorI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDE0NiApCisjZW5kaWYKKyAgICBtYXNrID0gLSAoICggZGlmZiB8IC0gZGlmZiApID4+ICggc2l6ZW9mKCB1bnNpZ25lZCBpbnQgKSAqIDggLSAxICkgKTsKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKCBwb3AgKQorI2VuZGlmCisKKyAgICBmb3IoIGkgPSAwOyBpIDwgc3NsLT5oYW5kc2hha2UtPnBtc2xlbjsgaSsrICkKKyAgICAgICAgcG1zW2ldID0gKCBtYXNrICYgZmFrZV9wbXNbaV0gKSB8ICggKH5tYXNrKSAmIHBlZXJfcG1zW2ldICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9jbGllbnRfcHNrX2lkZW50aXR5KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBzaXplX3QgbjsKKworICAgIGlmKCBzc2wtPmNvbmYtPmZfcHNrID09IE5VTEwgJiYKKyAgICAgICAgKCBzc2wtPmNvbmYtPnBzayA9PSBOVUxMIHx8IHNzbC0+Y29uZi0+cHNrX2lkZW50aXR5ID09IE5VTEwgfHwKKyAgICAgICAgICBzc2wtPmNvbmYtPnBza19pZGVudGl0eV9sZW4gPT0gMCB8fCBzc2wtPmNvbmYtPnBza19sZW4gPT0gMCApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZ290IG5vIHByZS1zaGFyZWQga2V5IiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1BSSVZBVEVfS0VZX1JFUVVJUkVEICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSZWNlaXZlIGNsaWVudCBwcmUtc2hhcmVkIGtleSBpZGVudGl0eSBuYW1lCisgICAgICovCisgICAgaWYoICpwICsgMiA+IGVuZCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQga2V5IGV4Y2hhbmdlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UgKTsKKyAgICB9CisKKyAgICBuID0gKCAoKnApWzBdIDw8IDggKSB8ICgqcClbMV07CisgICAgKnAgKz0gMjsKKworICAgIGlmKCBuIDwgMSB8fCBuID4gNjU1MzUgfHwgKnAgKyBuID4gZW5kICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSApOworICAgIH0KKworICAgIGlmKCBzc2wtPmNvbmYtPmZfcHNrICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+Zl9wc2soIHNzbC0+Y29uZi0+cF9wc2ssIHNzbCwgKnAsIG4gKSAhPSAwICkKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1NTTF9VTktOT1dOX0lERU5USVRZOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBJZGVudGl0eSBpcyBub3QgYSBiaWcgc2VjcmV0IHNpbmNlIGNsaWVudHMgc2VuZCBpdCBpbiB0aGUgY2xlYXIsCisgICAgICAgICAqIGJ1dCB0cmVhdCBpdCBjYXJlZnVsbHkgYW55d2F5LCBqdXN0IGluIGNhc2UgKi8KKyAgICAgICAgaWYoIG4gIT0gc3NsLT5jb25mLT5wc2tfaWRlbnRpdHlfbGVuIHx8CisgICAgICAgICAgICBtYmVkdGxzX3NzbF9zYWZlcl9tZW1jbXAoIHNzbC0+Y29uZi0+cHNrX2lkZW50aXR5LCAqcCwgbiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9TU0xfVU5LTk9XTl9JREVOVElUWTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1VOS05PV05fSURFTlRJVFkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiVW5rbm93biBQU0sgaWRlbnRpdHkiLCAqcCwgbiApOworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOS05PV05fUFNLX0lERU5USVRZICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1VOS05PV05fSURFTlRJVFkgKTsKKyAgICB9CisKKyAgICAqcCArPSBuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEICovCisKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX2NsaWVudF9rZXlfZXhjaGFuZ2UoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvOworICAgIHVuc2lnbmVkIGNoYXIgKnAsICplbmQ7CisKKyAgICBjaXBoZXJzdWl0ZV9pbmZvID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBjbGllbnQga2V5IGV4Y2hhbmdlIiApICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcCA9IHNzbC0+aW5fbXNnICsgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICk7CisgICAgZW5kID0gc3NsLT5pbl9tc2cgKyBzc2wtPmluX2hzbGVuOworCisgICAgaWYoIHNzbC0+aW5fbXNndHlwZSAhPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSApOworICAgIH0KKworICAgIGlmKCBzc2wtPmluX21zZ1swXSAhPSBNQkVEVExTX1NTTF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfY2xpZW50X2RoX3B1YmxpYyggc3NsLCAmcCwgZW5kICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAoICJzc2xfcGFyc2VfY2xpZW50X2RoX3B1YmxpYyIgKSwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHAgIT0gZW5kICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGtleSBleGNoYW5nZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0KCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5wcmVtYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfUFJFTUFTVEVSX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzbC0+aGFuZHNoYWtlLT5wbXNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2RobV9jYWxjX3NlY3JldCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfQ1MgKTsKKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01QSSggMywgIkRITTogSyAiLCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHguSyAgKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RoX3JlYWRfcHVibGljKCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBlbmQgLSBwKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjZGhfcmVhZF9wdWJsaWMiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX1JQICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19FQ1AoIDMsICJFQ0RIOiBRcCAiLCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LlFwICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0KCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NsLT5oYW5kc2hha2UtPnBtc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5wcmVtYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX01QSV9NQVhfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjZGhfY2FsY19zZWNyZXQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX0NTICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NUEkoIDMsICJFQ0RIOiB6ICAiLCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LnogKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9jbGllbnRfcHNrX2lkZW50aXR5KCBzc2wsICZwLCBlbmQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggInNzbF9wYXJzZV9jbGllbnRfcHNrX2lkZW50aXR5IiApLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggcCAhPSBlbmQgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQga2V5IGV4Y2hhbmdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcHNrX2Rlcml2ZV9wcmVtYXN0ZXIoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3Bza19kZXJpdmVfcHJlbWFzdGVyIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfY2xpZW50X3Bza19pZGVudGl0eSggc3NsLCAmcCwgZW5kICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAoICJzc2xfcGFyc2VfY2xpZW50X3Bza19pZGVudGl0eSIgKSwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gc3NsX3BhcnNlX2VuY3J5cHRlZF9wbXMoIHNzbCwgcCwgZW5kLCAyICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAoICJzc2xfcGFyc2VfZW5jcnlwdGVkX3BtcyIgKSwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcHNrX2Rlcml2ZV9wcmVtYXN0ZXIoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3Bza19kZXJpdmVfcHJlbWFzdGVyIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gc3NsX3BhcnNlX2NsaWVudF9wc2tfaWRlbnRpdHkoIHNzbCwgJnAsIGVuZCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgKCAic3NsX3BhcnNlX2NsaWVudF9wc2tfaWRlbnRpdHkiICksIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfY2xpZW50X2RoX3B1YmxpYyggc3NsLCAmcCwgZW5kICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAoICJzc2xfcGFyc2VfY2xpZW50X2RoX3B1YmxpYyIgKSwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHAgIT0gZW5kICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGtleSBleGNoYW5nZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3Bza19kZXJpdmVfcHJlbWFzdGVyKCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9wc2tfZGVyaXZlX3ByZW1hc3RlciIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfY2xpZW50X3Bza19pZGVudGl0eSggc3NsLCAmcCwgZW5kICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAoICJzc2xfcGFyc2VfY2xpZW50X3Bza19pZGVudGl0eSIgKSwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RoX3JlYWRfcHVibGljKCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgZW5kIC0gcCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNkaF9yZWFkX3B1YmxpYyIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfUlAgKTsKKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0VDUCggMywgIkVDREg6IFFwICIsICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHguUXAgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9wc2tfZGVyaXZlX3ByZW1hc3Rlciggc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcHNrX2Rlcml2ZV9wcmVtYXN0ZXIiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfZW5jcnlwdGVkX3Btcyggc3NsLCBwLCBlbmQsIDAgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggInNzbF9wYXJzZV9wYXJzZV9lbmNyeXB0ZWRfcG1zX3NlY3JldCIgKSwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF90d28oICZzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgZW5kIC0gcCApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF90d28iLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFICk7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBtYmVkdGxzX2VjanBha2VfZGVyaXZlX3NlY3JldCggJnNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2N0eCwKKyAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cHJlbWFzdGVyLCAzMiwgJnNzbC0+aGFuZHNoYWtlLT5wbXNsZW4sCisgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjanBha2VfZGVyaXZlX3NlY3JldCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9kZXJpdmVfa2V5cyggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2Rlcml2ZV9rZXlzIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgc3NsLT5zdGF0ZSsrOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBwYXJzZSBjbGllbnQga2V5IGV4Y2hhbmdlIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKSAgICAgICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKSAgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEKSYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcGFyc2VfY2VydGlmaWNhdGVfdmVyaWZ5KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm8gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm87CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHBhcnNlIGNlcnRpZmljYXRlIHZlcmlmeSIgKSApOworCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKK30KKyNlbHNlCitzdGF0aWMgaW50IHNzbF9wYXJzZV9jZXJ0aWZpY2F0ZV92ZXJpZnkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFOworICAgIHNpemVfdCBpLCBzaWdfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFs0OF07CisgICAgdW5zaWduZWQgY2hhciAqaGFzaF9zdGFydCA9IGhhc2g7CisgICAgc2l6ZV90IGhhc2hsZW47CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgbWJlZHRsc19wa190eXBlX3QgcGtfYWxnOworI2VuZGlmCisgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnOworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm8gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm87CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHBhcnNlIGNlcnRpZmljYXRlIHZlcmlmeSIgKSApOworCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSB8fAorICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgLyogUmVhZCB0aGUgbWVzc2FnZSB3aXRob3V0IGFkZGluZyBpdCB0byB0aGUgY2hlY2tzdW0gKi8KKyAgICBkbyB7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVhZF9yZWNvcmRfbGF5ZXIoIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgKCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmRfbGF5ZXIiICksIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRsZV9tZXNzYWdlX3R5cGUoIHNzbCApOworCisgICAgfSB3aGlsZSggTUJFRFRMU19FUlJfU1NMX05PTl9GQVRBTCA9PSByZXQgKTsKKworICAgIGlmKCAwICE9IHJldCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggIm1iZWR0bHNfc3NsX2hhbmRsZV9tZXNzYWdlX3R5cGUiICksIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHNzbC0+c3RhdGUrKzsKKworICAgIC8qIFByb2Nlc3MgdGhlIG1lc3NhZ2UgY29udGVudHMgKi8KKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgfHwKKyAgICAgICAgc3NsLT5pbl9tc2dbMF0gIT0gTUJFRFRMU19TU0xfSFNfQ0VSVElGSUNBVEVfVkVSSUZZICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNlcnRpZmljYXRlIHZlcmlmeSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9WRVJJRlkgKTsKKyAgICB9CisKKyAgICBpID0gbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICk7CisKKyAgICAvKgorICAgICAqICBzdHJ1Y3QgeworICAgICAqICAgICBTaWduYXR1cmVBbmRIYXNoQWxnb3JpdGhtIGFsZ29yaXRobTsgLS0gVExTIDEuMiBvbmx5CisgICAgICogICAgIG9wYXF1ZSBzaWduYXR1cmU8MC4uMl4xNi0xPjsKKyAgICAgKiAgfSBEaWdpdGFsbHlTaWduZWQ7CisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgIT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICB7CisgICAgICAgIG1kX2FsZyA9IE1CRURUTFNfTURfTk9ORTsKKyAgICAgICAgaGFzaGxlbiA9IDM2OworCisgICAgICAgIC8qIEZvciBFQ0RTQSwgdXNlIFNIQS0xLCBub3QgTUQtNSArIFNIQS0xICovCisgICAgICAgIGlmKCBtYmVkdGxzX3BrX2Nhbl9kbyggJnNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydC0+cGssCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1BLX0VDRFNBICkgKQorICAgICAgICB7CisgICAgICAgICAgICBoYXNoX3N0YXJ0ICs9IDE2OworICAgICAgICAgICAgaGFzaGxlbiAtPSAxNjsKKyAgICAgICAgICAgIG1kX2FsZyA9IE1CRURUTFNfTURfU0hBMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxIHx8CisgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApCisgICAgeworICAgICAgICBpZiggaSArIDIgPiBzc2wtPmluX2hzbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2VydGlmaWNhdGUgdmVyaWZ5IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9WRVJJRlkgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEhhc2gKKyAgICAgICAgICovCisgICAgICAgIG1kX2FsZyA9IG1iZWR0bHNfc3NsX21kX2FsZ19mcm9tX2hhc2goIHNzbC0+aW5fbXNnW2ldICk7CisKKyAgICAgICAgaWYoIG1kX2FsZyA9PSBNQkVEVExTX01EX05PTkUgfHwgbWJlZHRsc19zc2xfc2V0X2NhbGNfdmVyaWZ5X21kKCBzc2wsIHNzbC0+aW5fbXNnW2ldICkgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInBlZXIgbm90IGFkaGVyaW5nIHRvIHJlcXVlc3RlZCBzaWdfYWxnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZvciB2ZXJpZnkgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1ZFUklGWSApOworICAgICAgICB9CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01EX1NIQTEpCisgICAgICAgIGlmKCBNQkVEVExTX01EX1NIQTEgPT0gbWRfYWxnICkKKyAgICAgICAgICAgIGhhc2hfc3RhcnQgKz0gMTY7CisjZW5kaWYKKworICAgICAgICAvKiBJbmZvIGZyb20gbWRfYWxnIHdpbGwgYmUgdXNlZCBpbnN0ZWFkICovCisgICAgICAgIGhhc2hsZW4gPSAwOworCisgICAgICAgIGkrKzsKKworICAgICAgICAvKgorICAgICAgICAgKiBTaWduYXR1cmUKKyAgICAgICAgICovCisgICAgICAgIGlmKCAoIHBrX2FsZyA9IG1iZWR0bHNfc3NsX3BrX2FsZ19mcm9tX3NpZyggc3NsLT5pbl9tc2dbaV0gKSApCisgICAgICAgICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX1BLX05PTkUgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInBlZXIgbm90IGFkaGVyaW5nIHRvIHJlcXVlc3RlZCBzaWdfYWxnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZvciB2ZXJpZnkgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1ZFUklGWSApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgdGhlIGNlcnRpZmljYXRlJ3Mga2V5IHR5cGUgbWF0Y2hlcyB0aGUgc2lnbmF0dXJlIGFsZworICAgICAgICAgKi8KKyAgICAgICAgaWYoICEgbWJlZHRsc19wa19jYW5fZG8oICZzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQtPnBrLCBwa19hbGcgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2lnX2FsZyBkb2Vzbid0IG1hdGNoIGNlcnQga2V5IiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfVkVSSUZZICk7CisgICAgICAgIH0KKworICAgICAgICBpKys7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworICAgIGlmKCBpICsgMiA+IHNzbC0+aW5faHNsZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2VydGlmaWNhdGUgdmVyaWZ5IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1ZFUklGWSApOworICAgIH0KKworICAgIHNpZ19sZW4gPSAoIHNzbC0+aW5fbXNnW2ldIDw8IDggKSB8IHNzbC0+aW5fbXNnW2krMV07CisgICAgaSArPSAyOworCisgICAgaWYoIGkgKyBzaWdfbGVuICE9IHNzbC0+aW5faHNsZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2VydGlmaWNhdGUgdmVyaWZ5IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1ZFUklGWSApOworICAgIH0KKworICAgIC8qIENhbGN1bGF0ZSBoYXNoIGFuZCB2ZXJpZnkgc2lnbmF0dXJlICovCisgICAgc3NsLT5oYW5kc2hha2UtPmNhbGNfdmVyaWZ5KCBzc2wsIGhhc2ggKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfdmVyaWZ5KCAmc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0LT5waywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kX2FsZywgaGFzaF9zdGFydCwgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnICsgaSwgc2lnX2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3BrX3ZlcmlmeSIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX3VwZGF0ZV9oYW5kc2hha2Vfc3RhdHVzKCBzc2wgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiApICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qICFNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgJiYKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQgJiYKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCitzdGF0aWMgaW50IHNzbF93cml0ZV9uZXdfc2Vzc2lvbl90aWNrZXQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgdGxlbjsKKyAgICB1aW50MzJfdCBsaWZldGltZTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgbmV3IHNlc3Npb24gdGlja2V0IiApICk7CisKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRTsKKyAgICBzc2wtPm91dF9tc2dbMF0gID0gTUJFRFRMU19TU0xfSFNfTkVXX1NFU1NJT05fVElDS0VUOworCisgICAgLyoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICB1aW50MzIgdGlja2V0X2xpZmV0aW1lX2hpbnQ7CisgICAgICogICAgIG9wYXF1ZSB0aWNrZXQ8MC4uMl4xNi0xPjsKKyAgICAgKiB9IE5ld1Nlc3Npb25UaWNrZXQ7CisgICAgICoKKyAgICAgKiA0ICAuICA3ICAgdGlja2V0X2xpZmV0aW1lX2hpbnQgKDAgPSB1bnNwZWNpZmllZCkKKyAgICAgKiA4ICAuICA5ICAgdGlja2V0X2xlbiAobikKKyAgICAgKiAxMCAuICA5K24gdGlja2V0IGNvbnRlbnQKKyAgICAgKi8KKworICAgIGlmKCAoIHJldCA9IHNzbC0+Y29uZi0+Zl90aWNrZXRfd3JpdGUoIHNzbC0+Y29uZi0+cF90aWNrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZyArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bGVuLCAmbGlmZXRpbWUgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfdGlja2V0X3dyaXRlIiwgcmV0ICk7CisgICAgICAgIHRsZW4gPSAwOworICAgIH0KKworICAgIHNzbC0+b3V0X21zZ1s0XSA9ICggbGlmZXRpbWUgPj4gMjQgKSAmIDB4RkY7CisgICAgc3NsLT5vdXRfbXNnWzVdID0gKCBsaWZldGltZSA+PiAxNiApICYgMHhGRjsKKyAgICBzc2wtPm91dF9tc2dbNl0gPSAoIGxpZmV0aW1lID4+ICA4ICkgJiAweEZGOworICAgIHNzbC0+b3V0X21zZ1s3XSA9ICggbGlmZXRpbWUgICAgICAgKSAmIDB4RkY7CisKKyAgICBzc2wtPm91dF9tc2dbOF0gPSAodW5zaWduZWQgY2hhcikoICggdGxlbiA+PiA4ICkgJiAweEZGICk7CisgICAgc3NsLT5vdXRfbXNnWzldID0gKHVuc2lnbmVkIGNoYXIpKCAoIHRsZW4gICAgICApICYgMHhGRiApOworCisgICAgc3NsLT5vdXRfbXNnbGVuID0gMTAgKyB0bGVuOworCisgICAgLyoKKyAgICAgKiBNb3JhbGx5IGVxdWl2YWxlbnQgdG8gdXBkYXRpbmcgc3NsLT5zdGF0ZSwgYnV0IE5ld1Nlc3Npb25UaWNrZXQgYW5kCisgICAgICogQ2hhbmdlQ2lwaGVyU3BlYyBzaGFyZSB0aGUgc2FtZSBzdGF0ZS4KKyAgICAgKi8KKyAgICBzc2wtPmhhbmRzaGFrZS0+bmV3X3Nlc3Npb25fdGlja2V0ID0gMDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gd3JpdGUgbmV3IHNlc3Npb24gdGlja2V0IiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgKi8KKworLyoKKyAqIFNTTCBoYW5kc2hha2UgLS0gc2VydmVyIHNpZGUgLS0gc2luZ2xlIHN0ZXAKKyAqLworaW50IG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9zZXJ2ZXJfc3RlcCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGlmKCBzc2wtPnN0YXRlID09IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSIHx8IHNzbC0+aGFuZHNoYWtlID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJzZXJ2ZXIgc3RhdGU6ICVkIiwgc3NsLT5zdGF0ZSApICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQoIHNzbCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSA9PSBNQkVEVExTX1NTTF9SRVRSQU5TX1NFTkRJTkcgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVzZW5kKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisjZW5kaWYKKworICAgIHN3aXRjaCggc3NsLT5zdGF0ZSApCisgICAgeworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hFTExPX1JFUVVFU1Q6CisgICAgICAgICAgICBzc2wtPnN0YXRlID0gTUJFRFRMU19TU0xfQ0xJRU5UX0hFTExPOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogIDw9PSAgIENsaWVudEhlbGxvCisgICAgICAgICAqLworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NMSUVOVF9IRUxMTzoKKyAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9jbGllbnRfaGVsbG8oIHNzbCApOworICAgICAgICAgICAgYnJlYWs7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfU0VSVkVSX0hFTExPX1ZFUklGWV9SRVFVRVNUX1NFTlQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQgKTsKKyNlbmRpZgorCisgICAgICAgIC8qCisgICAgICAgICAqICA9PT4gICBTZXJ2ZXJIZWxsbworICAgICAgICAgKiAgICAgICAgQ2VydGlmaWNhdGUKKyAgICAgICAgICogICAgICAoIFNlcnZlcktleUV4Y2hhbmdlICApCisgICAgICAgICAqICAgICAgKCBDZXJ0aWZpY2F0ZVJlcXVlc3QgKQorICAgICAgICAgKiAgICAgICAgU2VydmVySGVsbG9Eb25lCisgICAgICAgICAqLworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX1NFUlZFUl9IRUxMTzoKKyAgICAgICAgICAgIHJldCA9IHNzbF93cml0ZV9zZXJ2ZXJfaGVsbG8oIHNzbCApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9TRVJWRVJfQ0VSVElGSUNBVEU6CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9jZXJ0aWZpY2F0ZSggc3NsICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX1NFUlZFUl9LRVlfRVhDSEFOR0U6CisgICAgICAgICAgICByZXQgPSBzc2xfd3JpdGVfc2VydmVyX2tleV9leGNoYW5nZSggc3NsICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NFUlRJRklDQVRFX1JFUVVFU1Q6CisgICAgICAgICAgICByZXQgPSBzc2xfd3JpdGVfY2VydGlmaWNhdGVfcmVxdWVzdCggc3NsICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX1NFUlZFUl9IRUxMT19ET05FOgorICAgICAgICAgICAgcmV0ID0gc3NsX3dyaXRlX3NlcnZlcl9oZWxsb19kb25lKCBzc2wgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqICA8PT0gKCBDZXJ0aWZpY2F0ZS9BbGVydCAgKQorICAgICAgICAgKiAgICAgICAgQ2xpZW50S2V5RXhjaGFuZ2UKKyAgICAgICAgICogICAgICAoIENlcnRpZmljYXRlVmVyaWZ5ICApCisgICAgICAgICAqICAgICAgICBDaGFuZ2VDaXBoZXJTcGVjCisgICAgICAgICAqICAgICAgICBGaW5pc2hlZAorICAgICAgICAgKi8KKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9DTElFTlRfQ0VSVElGSUNBVEU6CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9wYXJzZV9jZXJ0aWZpY2F0ZSggc3NsICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NMSUVOVF9LRVlfRVhDSEFOR0U6CisgICAgICAgICAgICByZXQgPSBzc2xfcGFyc2VfY2xpZW50X2tleV9leGNoYW5nZSggc3NsICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NFUlRJRklDQVRFX1ZFUklGWToKKyAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9jZXJ0aWZpY2F0ZV92ZXJpZnkoIHNzbCApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9DTElFTlRfQ0hBTkdFX0NJUEhFUl9TUEVDOgorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfcGFyc2VfY2hhbmdlX2NpcGhlcl9zcGVjKCBzc2wgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfQ0xJRU5UX0ZJTklTSEVEOgorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfcGFyc2VfZmluaXNoZWQoIHNzbCApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogID09PiAoIE5ld1Nlc3Npb25UaWNrZXQgKQorICAgICAgICAgKiAgICAgICAgQ2hhbmdlQ2lwaGVyU3BlYworICAgICAgICAgKiAgICAgICAgRmluaXNoZWQKKyAgICAgICAgICovCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfU0VSVkVSX0NIQU5HRV9DSVBIRVJfU1BFQzoKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICAgICAgICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+bmV3X3Nlc3Npb25fdGlja2V0ICE9IDAgKQorICAgICAgICAgICAgICAgIHJldCA9IHNzbF93cml0ZV9uZXdfc2Vzc2lvbl90aWNrZXQoIHNzbCApOworICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfY2hhbmdlX2NpcGhlcl9zcGVjKCBzc2wgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfU0VSVkVSX0ZJTklTSEVEOgorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfZmluaXNoZWQoIHNzbCApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9GTFVTSF9CVUZGRVJTOgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJoYW5kc2hha2U6IGRvbmUiICkgKTsKKyAgICAgICAgICAgIHNzbC0+c3RhdGUgPSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfV1JBUFVQOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfV1JBUFVQOgorICAgICAgICAgICAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3dyYXB1cCggc3NsICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJpbnZhbGlkIHN0YXRlICVkIiwgc3NsLT5zdGF0ZSApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF90aWNrZXQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF90aWNrZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDkxMTZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3RpY2tldC5jCkBAIC0wLDAgKzEsNDg5IEBACisvKgorICogIFRMUyBzZXJ2ZXIgdGlja2V0cyBjYWxsYmFja3MgaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVElDS0VUX0MpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgZnJlZQorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF90aWNrZXQuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogSW5pdGlhbHplIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF90aWNrZXRfaW5pdCggbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfbXV0ZXhfaW5pdCggJmN0eC0+bXV0ZXggKTsKKyNlbmRpZgorfQorCisjZGVmaW5lIE1BWF9LRVlfQllURVMgMzIgICAgLyogMjU2IGJpdHMgKi8KKworLyoKKyAqIEdlbmVyYXRlL3VwZGF0ZSBhIGtleQorICovCitzdGF0aWMgaW50IHNzbF90aWNrZXRfZ2VuX2tleSggbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGluZGV4ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01BWF9LRVlfQllURVNdOworICAgIG1iZWR0bHNfc3NsX3RpY2tldF9rZXkgKmtleSA9IGN0eC0+a2V5cyArIGluZGV4OworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICBrZXktPmdlbmVyYXRpb25fdGltZSA9ICh1aW50MzJfdCkgbWJlZHRsc190aW1lKCBOVUxMICk7CisjZW5kaWYKKworICAgIGlmKCAoIHJldCA9IGN0eC0+Zl9ybmcoIGN0eC0+cF9ybmcsIGtleS0+bmFtZSwgc2l6ZW9mKCBrZXktPm5hbWUgKSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBjdHgtPmZfcm5nKCBjdHgtPnBfcm5nLCBidWYsIHNpemVvZiggYnVmICkgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgLyogV2l0aCBHQ00gYW5kIENDTSwgc2FtZSBjb250ZXh0IGNhbiBlbmNyeXB0ICYgZGVjcnlwdCAqLworICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmtleS0+Y3R4LCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9nZXRfa2V5X2JpdGxlbiggJmtleS0+Y3R4ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOQ1JZUFQgKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggYnVmLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUm90YXRlL2dlbmVyYXRlIGtleXMgaWYgbmVjZXNzYXJ5CisgKi8KK3N0YXRpYyBpbnQgc3NsX3RpY2tldF91cGRhdGVfa2V5cyggbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKmN0eCApCit7CisjaWYgIWRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgKCh2b2lkKSBjdHgpOworI2Vsc2UKKyAgICBpZiggY3R4LT50aWNrZXRfbGlmZXRpbWUgIT0gMCApCisgICAgeworICAgICAgICB1aW50MzJfdCBjdXJyZW50X3RpbWUgPSAodWludDMyX3QpIG1iZWR0bHNfdGltZSggTlVMTCApOworICAgICAgICB1aW50MzJfdCBrZXlfdGltZSA9IGN0eC0+a2V5c1tjdHgtPmFjdGl2ZV0uZ2VuZXJhdGlvbl90aW1lOworCisgICAgICAgIGlmKCBjdXJyZW50X3RpbWUgPiBrZXlfdGltZSAmJgorICAgICAgICAgICAgY3VycmVudF90aW1lIC0ga2V5X3RpbWUgPCBjdHgtPnRpY2tldF9saWZldGltZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisKKyAgICAgICAgY3R4LT5hY3RpdmUgPSAxIC0gY3R4LT5hY3RpdmU7CisKKyAgICAgICAgcmV0dXJuKCBzc2xfdGlja2V0X2dlbl9rZXkoIGN0eCwgY3R4LT5hY3RpdmUgKSApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19IQVZFX1RJTUUgKi8KKyAgICAgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBTZXR1cCBjb250ZXh0IGZvciBhY3R1YWwgdXNlCisgKi8KK2ludCBtYmVkdGxzX3NzbF90aWNrZXRfc2V0dXAoIG1iZWR0bHNfc3NsX3RpY2tldF9jb250ZXh0ICpjdHgsCisgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZywKKyAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgY2lwaGVyLAorICAgIHVpbnQzMl90IGxpZmV0aW1lICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm87CisKKyAgICBjdHgtPmZfcm5nID0gZl9ybmc7CisgICAgY3R4LT5wX3JuZyA9IHBfcm5nOworCisgICAgY3R4LT50aWNrZXRfbGlmZXRpbWUgPSBsaWZldGltZTsKKworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcik7CisgICAgaWYoIGNpcGhlcl9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIGNpcGhlcl9pbmZvLT5tb2RlICE9IE1CRURUTFNfTU9ERV9HQ00gJiYKKyAgICAgICAgY2lwaGVyX2luZm8tPm1vZGUgIT0gTUJFRFRMU19NT0RFX0NDTSApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGlmKCBjaXBoZXJfaW5mby0+a2V5X2JpdGxlbiA+IDggKiBNQVhfS0VZX0JZVEVTICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LT5rZXlzWzBdLmN0eCwgY2lwaGVyX2luZm8gKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmN0eC0+a2V5c1sxXS5jdHgsIGNpcGhlcl9pbmZvICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gc3NsX3RpY2tldF9nZW5fa2V5KCBjdHgsIDAgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBzc2xfdGlja2V0X2dlbl9rZXkoIGN0eCwgMSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogU2VyaWFsaXplIGEgc2Vzc2lvbiBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAqICAwICAgLiAgIG4tMSAgICAgc2Vzc2lvbiBzdHJ1Y3R1cmUsIG4gPSBzaXplb2YobWJlZHRsc19zc2xfc2Vzc2lvbikKKyAqICBuICAgLiAgIG4rMiAgICAgcGVlcl9jZXJ0IGxlbmd0aCA9IG0gKDAgaWYgbm8gY2VydGlmaWNhdGUpCisgKiAgbiszIC4gICBuKzIrbSAgIHBlZXIgY2VydCBBU04uMQorICovCitzdGF0aWMgaW50IHNzbF9zYXZlX3Nlc3Npb24oIGNvbnN0IG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBzaXplX3QgbGVmdCA9IGJ1Zl9sZW47CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgc2l6ZV90IGNlcnRfbGVuOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisgICAgaWYoIGxlZnQgPCBzaXplb2YoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgIG1lbWNweSggcCwgc2Vzc2lvbiwgc2l6ZW9mKCBtYmVkdGxzX3NzbF9zZXNzaW9uICkgKTsKKyAgICBwICs9IHNpemVvZiggbWJlZHRsc19zc2xfc2Vzc2lvbiApOworICAgIGxlZnQgLT0gc2l6ZW9mKCBtYmVkdGxzX3NzbF9zZXNzaW9uICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBpZiggc2Vzc2lvbi0+cGVlcl9jZXJ0ID09IE5VTEwgKQorICAgICAgICBjZXJ0X2xlbiA9IDA7CisgICAgZWxzZQorICAgICAgICBjZXJ0X2xlbiA9IHNlc3Npb24tPnBlZXJfY2VydC0+cmF3LmxlbjsKKworICAgIGlmKCBsZWZ0IDwgMyArIGNlcnRfbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggY2VydF9sZW4gPj4gMTYgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggY2VydF9sZW4gPj4gIDggJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggY2VydF9sZW4gICAgICAgJiAweEZGICk7CisKKyAgICBpZiggc2Vzc2lvbi0+cGVlcl9jZXJ0ICE9IE5VTEwgKQorICAgICAgICBtZW1jcHkoIHAsIHNlc3Npb24tPnBlZXJfY2VydC0+cmF3LnAsIGNlcnRfbGVuICk7CisKKyAgICBwICs9IGNlcnRfbGVuOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisgICAgKm9sZW4gPSBwIC0gYnVmOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBVbnNlcmlhbGlzZSBzZXNzaW9uLCBzZWUgc3NsX3NhdmVfc2Vzc2lvbigpCisgKi8KK3N0YXRpYyBpbnQgc3NsX2xvYWRfc2Vzc2lvbiggbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25zdCBlbmQgPSBidWYgKyBsZW47CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgc2l6ZV90IGNlcnRfbGVuOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisgICAgaWYoIHAgKyBzaXplb2YoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKSA+IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtZW1jcHkoIHNlc3Npb24sIHAsIHNpemVvZiggbWJlZHRsc19zc2xfc2Vzc2lvbiApICk7CisgICAgcCArPSBzaXplb2YoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIGlmKCBwICsgMyA+IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBjZXJ0X2xlbiA9ICggcFswXSA8PCAxNiApIHwgKCBwWzFdIDw8IDggKSB8IHBbMl07CisgICAgcCArPSAzOworCisgICAgaWYoIGNlcnRfbGVuID09IDAgKQorICAgIHsKKyAgICAgICAgc2Vzc2lvbi0+cGVlcl9jZXJ0ID0gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICBpZiggcCArIGNlcnRfbGVuID4gZW5kICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAgICAgc2Vzc2lvbi0+cGVlcl9jZXJ0ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc194NTA5X2NydCApICk7CisKKyAgICAgICAgaWYoIHNlc3Npb24tPnBlZXJfY2VydCA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggc2Vzc2lvbi0+cGVlcl9jZXJ0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9kZXIoIHNlc3Npb24tPnBlZXJfY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBjZXJ0X2xlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggc2Vzc2lvbi0+cGVlcl9jZXJ0ICk7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIHNlc3Npb24tPnBlZXJfY2VydCApOworICAgICAgICAgICAgc2Vzc2lvbi0+cGVlcl9jZXJ0ID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBwICs9IGNlcnRfbGVuOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworICAgIGlmKCBwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENyZWF0ZSBzZXNzaW9uIHRpY2tldCwgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKyAqCisgKiAgICBzdHJ1Y3QgeworICogICAgICAgIG9wYXF1ZSBrZXlfbmFtZVs0XTsKKyAqICAgICAgICBvcGFxdWUgaXZbMTJdOworICogICAgICAgIG9wYXF1ZSBlbmNyeXB0ZWRfc3RhdGU8MC4uMl4xNi0xPjsKKyAqICAgICAgICBvcGFxdWUgdGFnWzE2XTsKKyAqICAgIH0gdGlja2V0OworICoKKyAqIFRoZSBrZXlfbmFtZSwgaXYsIGFuZCBsZW5ndGggb2YgZW5jcnlwdGVkX3N0YXRlIGFyZSB0aGUgYWRkaXRpb25hbAorICogYXV0aGVudGljYXRlZCBkYXRhLgorICovCitpbnQgbWJlZHRsc19zc2xfdGlja2V0X3dyaXRlKCB2b2lkICpwX3RpY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICp0aWNrZXRfbGlmZXRpbWUgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKmN0eCA9IHBfdGlja2V0OworICAgIG1iZWR0bHNfc3NsX3RpY2tldF9rZXkgKmtleTsKKyAgICB1bnNpZ25lZCBjaGFyICprZXlfbmFtZSA9IHN0YXJ0OworICAgIHVuc2lnbmVkIGNoYXIgKml2ID0gc3RhcnQgKyA0OworICAgIHVuc2lnbmVkIGNoYXIgKnN0YXRlX2xlbl9ieXRlcyA9IGl2ICsgMTI7CisgICAgdW5zaWduZWQgY2hhciAqc3RhdGUgPSBzdGF0ZV9sZW5fYnl0ZXMgKyAyOworICAgIHVuc2lnbmVkIGNoYXIgKnRhZzsKKyAgICBzaXplX3QgY2xlYXJfbGVuLCBjaXBoX2xlbjsKKworICAgICp0bGVuID0gMDsKKworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPmZfcm5nID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgLyogV2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIGZvciBrZXlfbmFtZSwgMTIgZm9yIElWLCAyIGZvciBsZW4gMTYgZm9yIHRhZywKKyAgICAgKiBpbiBhZGRpdGlvbiB0byBzZXNzaW9uIGl0c2VsZiwgdGhhdCB3aWxsIGJlIGNoZWNrZWQgd2hlbiB3cml0aW5nIGl0LiAqLworICAgIGlmKCBlbmQgLSBzdGFydCA8IDQgKyAxMiArIDIgKyAxNiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JVRkZFUl9UT09fU01BTEwgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZjdHgtPm11dGV4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisgICAgaWYoICggcmV0ID0gc3NsX3RpY2tldF91cGRhdGVfa2V5cyggY3R4ICkgKSAhPSAwICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAga2V5ID0gJmN0eC0+a2V5c1tjdHgtPmFjdGl2ZV07CisKKyAgICAqdGlja2V0X2xpZmV0aW1lID0gY3R4LT50aWNrZXRfbGlmZXRpbWU7CisKKyAgICBtZW1jcHkoIGtleV9uYW1lLCBrZXktPm5hbWUsIDQgKTsKKworICAgIGlmKCAoIHJldCA9IGN0eC0+Zl9ybmcoIGN0eC0+cF9ybmcsIGl2LCAxMiApICkgIT0gMCApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIC8qIER1bXAgc2Vzc2lvbiBzdGF0ZSAqLworICAgIGlmKCAoIHJldCA9IHNzbF9zYXZlX3Nlc3Npb24oIHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIGVuZCAtIHN0YXRlLCAmY2xlYXJfbGVuICkgKSAhPSAwIHx8CisgICAgICAgICh1bnNpZ25lZCBsb25nKSBjbGVhcl9sZW4gPiA2NTUzNSApCisgICAgeworICAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKyAgICBzdGF0ZV9sZW5fYnl0ZXNbMF0gPSAoIGNsZWFyX2xlbiA+PiA4ICkgJiAweGZmOworICAgIHN0YXRlX2xlbl9ieXRlc1sxXSA9ICggY2xlYXJfbGVuICAgICAgKSAmIDB4ZmY7CisKKyAgICAvKiBFbmNyeXB0IGFuZCBhdXRoZW50aWNhdGUgKi8KKyAgICB0YWcgPSBzdGF0ZSArIGNsZWFyX2xlbjsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9hdXRoX2VuY3J5cHQoICZrZXktPmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaXYsIDEyLCBrZXlfbmFtZSwgNCArIDEyICsgMiwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUsIGNsZWFyX2xlbiwgc3RhdGUsICZjaXBoX2xlbiwgdGFnLCAxNiApICkgIT0gMCApCisgICAgeworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorICAgIGlmKCBjaXBoX2xlbiAhPSBjbGVhcl9sZW4gKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgKnRsZW4gPSA0ICsgMTIgKyAyICsgMTYgKyBjaXBoX2xlbjsKKworY2xlYW51cDoKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfdW5sb2NrKCAmY3R4LT5tdXRleCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiApOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogU2VsZWN0IGtleSBiYXNlZCBvbiBuYW1lCisgKi8KK3N0YXRpYyBtYmVkdGxzX3NzbF90aWNrZXRfa2V5ICpzc2xfdGlja2V0X3NlbGVjdF9rZXkoCisgICAgICAgIG1iZWR0bHNfc3NsX3RpY2tldF9jb250ZXh0ICpjdHgsCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbmFtZVs0XSApCit7CisgICAgdW5zaWduZWQgY2hhciBpOworCisgICAgZm9yKCBpID0gMDsgaSA8IHNpemVvZiggY3R4LT5rZXlzICkgLyBzaXplb2YoICpjdHgtPmtleXMgKTsgaSsrICkKKyAgICAgICAgaWYoIG1lbWNtcCggbmFtZSwgY3R4LT5rZXlzW2ldLm5hbWUsIDQgKSA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiggJmN0eC0+a2V5c1tpXSApOworCisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisKKy8qCisgKiBMb2FkIHNlc3Npb24gdGlja2V0IChzZWUgbWJlZHRsc19zc2xfdGlja2V0X3dyaXRlIGZvciBzdHJ1Y3R1cmUpCisgKi8KK2ludCBtYmVkdGxzX3NzbF90aWNrZXRfcGFyc2UoIHZvaWQgKnBfdGlja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKmN0eCA9IHBfdGlja2V0OworICAgIG1iZWR0bHNfc3NsX3RpY2tldF9rZXkgKmtleTsKKyAgICB1bnNpZ25lZCBjaGFyICprZXlfbmFtZSA9IGJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyICppdiA9IGJ1ZiArIDQ7CisgICAgdW5zaWduZWQgY2hhciAqZW5jX2xlbl9wID0gaXYgKyAxMjsKKyAgICB1bnNpZ25lZCBjaGFyICp0aWNrZXQgPSBlbmNfbGVuX3AgKyAyOworICAgIHVuc2lnbmVkIGNoYXIgKnRhZzsKKyAgICBzaXplX3QgZW5jX2xlbiwgY2xlYXJfbGVuOworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+Zl9ybmcgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKiBTZWUgbWJlZHRsc19zc2xfdGlja2V0X3dyaXRlKCkgKi8KKyAgICBpZiggbGVuIDwgNCArIDEyICsgMiArIDE2ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZjdHgtPm11dGV4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisgICAgaWYoICggcmV0ID0gc3NsX3RpY2tldF91cGRhdGVfa2V5cyggY3R4ICkgKSAhPSAwICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgZW5jX2xlbiA9ICggZW5jX2xlbl9wWzBdIDw8IDggKSB8IGVuY19sZW5fcFsxXTsKKyAgICB0YWcgPSB0aWNrZXQgKyBlbmNfbGVuOworCisgICAgaWYoIGxlbiAhPSA0ICsgMTIgKyAyICsgZW5jX2xlbiArIDE2ICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIC8qIFNlbGVjdCBrZXkgKi8KKyAgICBpZiggKCBrZXkgPSBzc2xfdGlja2V0X3NlbGVjdF9rZXkoIGN0eCwga2V5X25hbWUgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgLyogV2UgY2FuJ3Qga25vdyBmb3Igc3VyZSBidXQgdGhpcyBpcyBhIGxpa2VseSBvcHRpb24gdW5sZXNzIHdlJ3JlCisgICAgICAgICAqIHVuZGVyIGF0dGFjayAtIHRoaXMgaXMgb25seSBpbmZvcm1hdGl2ZSBhbnl3YXkgKi8KKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfU1NMX1NFU1NJT05fVElDS0VUX0VYUElSRUQ7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICAvKiBEZWNyeXB0IGFuZCBhdXRoZW50aWNhdGUgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9hdXRoX2RlY3J5cHQoICZrZXktPmN0eCwgaXYsIDEyLAorICAgICAgICAgICAgICAgICAgICBrZXlfbmFtZSwgNCArIDEyICsgMiwgdGlja2V0LCBlbmNfbGVuLAorICAgICAgICAgICAgICAgICAgICB0aWNrZXQsICZjbGVhcl9sZW4sIHRhZywgMTYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQgKQorICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDOworCisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisgICAgaWYoIGNsZWFyX2xlbiAhPSBlbmNfbGVuICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUjsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIC8qIEFjdHVhbGx5IGxvYWQgc2Vzc2lvbiAqLworICAgIGlmKCAoIHJldCA9IHNzbF9sb2FkX3Nlc3Npb24oIHNlc3Npb24sIHRpY2tldCwgY2xlYXJfbGVuICkgKSAhPSAwICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICB7CisgICAgICAgIC8qIENoZWNrIGZvciBleHBpcmF0aW9uICovCisgICAgICAgIG1iZWR0bHNfdGltZV90IGN1cnJlbnRfdGltZSA9IG1iZWR0bHNfdGltZSggTlVMTCApOworCisgICAgICAgIGlmKCBjdXJyZW50X3RpbWUgPCBzZXNzaW9uLT5zdGFydCB8fAorICAgICAgICAgICAgKHVpbnQzMl90KSggY3VycmVudF90aW1lIC0gc2Vzc2lvbi0+c3RhcnQgKSA+IGN0eC0+dGlja2V0X2xpZmV0aW1lICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfU1NMX1NFU1NJT05fVElDS0VUX0VYUElSRUQ7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworY2xlYW51cDoKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfdW5sb2NrKCAmY3R4LT5tdXRleCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiApOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogRnJlZSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfdGlja2V0X2ZyZWUoIG1iZWR0bHNfc3NsX3RpY2tldF9jb250ZXh0ICpjdHggKQoreworICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHgtPmtleXNbMF0uY3R4ICk7CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eC0+a2V5c1sxXS5jdHggKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX211dGV4X2ZyZWUoICZjdHgtPm11dGV4ICk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfc3NsX3RpY2tldF9jb250ZXh0ICkgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RJQ0tFVF9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfdGxzLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfdGxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhMDRhZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF90bHMuYwpAQCAtMCwwICsxLDc2NzkgQEAKKy8qCisgKiAgU1NMdjMvVExTdjEgc2hhcmVkIGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgU1NMIDMuMCBzcGVjaWZpY2F0aW9uIHdhcyBkcmFmdGVkIGJ5IE5ldHNjYXBlIGluIDE5OTYsCisgKiAgYW5kIGJlY2FtZSBhbiBJRVRGIHN0YW5kYXJkIGluIDE5OTkuCisgKgorICogIGh0dHA6Ly93cC5uZXRzY2FwZS5jb20vZW5nL3NzbDMvCisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjI0Ni50eHQKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzQ2LnR4dAorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgIGZyZWUKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9kZWJ1Zy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2xfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisjaW5jbHVkZSAibWJlZHRscy9vaWQuaCIKKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKiBMZW5ndGggb2YgdGhlICJlcG9jaCIgZmllbGQgaW4gdGhlIHJlY29yZCBoZWFkZXIgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNzbF9lcF9sZW4oIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICByZXR1cm4oIDIgKTsKKyNlbHNlCisgICAgKCh2b2lkKSBzc2wpOworI2VuZGlmCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBTdGFydCBhIHRpbWVyLgorICogUGFzc2luZyBtaWxsaXNlY3MgPSAwIGNhbmNlbHMgYSBydW5uaW5nIHRpbWVyLgorICovCitzdGF0aWMgdm9pZCBzc2xfc2V0X3RpbWVyKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVpbnQzMl90IG1pbGxpc2VjcyApCit7CisgICAgaWYoIHNzbC0+Zl9zZXRfdGltZXIgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2V0X3RpbWVyIHRvICVkIG1zIiwgKGludCkgbWlsbGlzZWNzICkgKTsKKyAgICBzc2wtPmZfc2V0X3RpbWVyKCBzc2wtPnBfdGltZXIsIG1pbGxpc2VjcyAvIDQsIG1pbGxpc2VjcyApOworfQorCisvKgorICogUmV0dXJuIC0xIGlzIHRpbWVyIGlzIGV4cGlyZWQsIDAgaWYgaXQgaXNuJ3QuCisgKi8KK3N0YXRpYyBpbnQgc3NsX2NoZWNrX3RpbWVyKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGlmKCBzc2wtPmZfZ2V0X3RpbWVyID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGlmKCBzc2wtPmZfZ2V0X3RpbWVyKCBzc2wtPnBfdGltZXIgKSA9PSAyICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidGltZXIgZXhwaXJlZCIgKSApOworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisvKgorICogRG91YmxlIHRoZSByZXRyYW5zbWl0IHRpbWVvdXQgdmFsdWUsIHdpdGhpbiB0aGUgYWxsb3dlZCByYW5nZSwKKyAqIHJldHVybmluZyAtMSBpZiB0aGUgbWF4aW11bSB2YWx1ZSBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWQuCisgKi8KK3N0YXRpYyBpbnQgc3NsX2RvdWJsZV9yZXRyYW5zbWl0X3RpbWVvdXQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgdWludDMyX3QgbmV3X3RpbWVvdXQ7CisKKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfdGltZW91dCA+PSBzc2wtPmNvbmYtPmhzX3RpbWVvdXRfbWF4ICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgbmV3X3RpbWVvdXQgPSAyICogc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfdGltZW91dDsKKworICAgIC8qIEF2b2lkIGFyaXRobWV0aWMgb3ZlcmZsb3cgYW5kIHJhbmdlIG92ZXJmbG93ICovCisgICAgaWYoIG5ld190aW1lb3V0IDwgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfdGltZW91dCB8fAorICAgICAgICBuZXdfdGltZW91dCA+IHNzbC0+Y29uZi0+aHNfdGltZW91dF9tYXggKQorICAgIHsKKyAgICAgICAgbmV3X3RpbWVvdXQgPSBzc2wtPmNvbmYtPmhzX3RpbWVvdXRfbWF4OworICAgIH0KKworICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3RpbWVvdXQgPSBuZXdfdGltZW91dDsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInVwZGF0ZSB0aW1lb3V0IHZhbHVlIHRvICVkIG1pbGxpc2VjcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF90aW1lb3V0ICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgdm9pZCBzc2xfcmVzZXRfcmV0cmFuc21pdF90aW1lb3V0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3RpbWVvdXQgPSBzc2wtPmNvbmYtPmhzX3RpbWVvdXRfbWluOworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidXBkYXRlIHRpbWVvdXQgdmFsdWUgdG8gJWQgbWlsbGlzZWNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3RpbWVvdXQgKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKKy8qCisgKiBDb252ZXJ0IG1heF9mcmFnbWVudF9sZW5ndGggY29kZXMgdG8gbGVuZ3RoLgorICogUkZDIDYwNjYgc2F5czoKKyAqICAgIGVudW17CisgKiAgICAgICAgMl45KDEpLCAyXjEwKDIpLCAyXjExKDMpLCAyXjEyKDQpLCAoMjU1KQorICogICAgfSBNYXhGcmFnbWVudExlbmd0aDsKKyAqIGFuZCB3ZSBhZGQgMCAtPiBleHRlbnNpb24gdW51c2VkCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWZsX2NvZGVfdG9fbGVuZ3RoW01CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9JTlZBTElEXSA9Cit7CisgICAgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOLCAgICAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fTk9ORSAqLworICAgIDUxMiwgICAgICAgICAgICAgICAgICAgIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl81MTIgICovCisgICAgMTAyNCwgICAgICAgICAgICAgICAgICAgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzEwMjQgKi8KKyAgICAyMDQ4LCAgICAgICAgICAgICAgICAgICAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMjA0OCAqLworICAgIDQwOTYsICAgICAgICAgICAgICAgICAgIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl80MDk2ICovCit9OworI2VuZGlmIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEggKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCitzdGF0aWMgaW50IHNzbF9zZXNzaW9uX2NvcHkoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKmRzdCwgY29uc3QgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc3JjICkKK3sKKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uX2ZyZWUoIGRzdCApOworICAgIG1lbWNweSggZHN0LCBzcmMsIHNpemVvZiggbWJlZHRsc19zc2xfc2Vzc2lvbiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBpZiggc3JjLT5wZWVyX2NlcnQgIT0gTlVMTCApCisgICAgeworICAgICAgICBpbnQgcmV0OworCisgICAgICAgIGRzdC0+cGVlcl9jZXJ0ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZihtYmVkdGxzX3g1MDlfY3J0KSApOworICAgICAgICBpZiggZHN0LT5wZWVyX2NlcnQgPT0gTlVMTCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgKTsKKworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoIGRzdC0+cGVlcl9jZXJ0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9kZXIoIGRzdC0+cGVlcl9jZXJ0LCBzcmMtPnBlZXJfY2VydC0+cmF3LnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT5wZWVyX2NlcnQtPnJhdy5sZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIGRzdC0+cGVlcl9jZXJ0ICk7CisgICAgICAgICAgICBkc3QtPnBlZXJfY2VydCA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgaWYoIHNyYy0+dGlja2V0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgZHN0LT50aWNrZXQgPSBtYmVkdGxzX2NhbGxvYyggMSwgc3JjLT50aWNrZXRfbGVuICk7CisgICAgICAgIGlmKCBkc3QtPnRpY2tldCA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworCisgICAgICAgIG1lbWNweSggZHN0LT50aWNrZXQsIHNyYy0+dGlja2V0LCBzcmMtPnRpY2tldF9sZW4gKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICYmIE1CRURUTFNfU1NMX0NMSV9DICovCisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DTElfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwpCitpbnQgKCptYmVkdGxzX3NzbF9od19yZWNvcmRfaW5pdCkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV9lbmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV9kZWMsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXZfZW5jLCAgY29uc3QgdW5zaWduZWQgY2hhciAqaXZfZGVjLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGl2bGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX2VuYywgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX2RlYywKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYWNsZW4gKSA9IE5VTEw7CitpbnQgKCptYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUpKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBkaXJlY3Rpb24pID0gTlVMTDsKK2ludCAoKm1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZXNldCkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApID0gTlVMTDsKK2ludCAoKm1iZWR0bHNfc3NsX2h3X3JlY29yZF93cml0ZSkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApID0gTlVMTDsKK2ludCAoKm1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZWFkKSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkgPSBOVUxMOworaW50ICgqbWJlZHRsc19zc2xfaHdfcmVjb3JkX2ZpbmlzaCkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApID0gTlVMTDsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwgKi8KKworLyoKKyAqIEtleSBtYXRlcmlhbCBnZW5lcmF0aW9uCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCitzdGF0aWMgaW50IHNzbDNfcHJmKCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsIHNpemVfdCBzbGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYW5kb20sIHNpemVfdCBybGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0YnVmLCBzaXplX3QgZGxlbiApCit7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19tZDVfY29udGV4dCBtZDU7CisgICAgbWJlZHRsc19zaGExX2NvbnRleHQgc2hhMTsKKyAgICB1bnNpZ25lZCBjaGFyIHBhZGRpbmdbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgc2hhMXN1bVsyMF07CisgICAgKCh2b2lkKWxhYmVsKTsKKworICAgIG1iZWR0bHNfbWQ1X2luaXQoICAmbWQ1ICApOworICAgIG1iZWR0bHNfc2hhMV9pbml0KCAmc2hhMSApOworCisgICAgLyoKKyAgICAgKiAgU1NMdjM6CisgICAgICogICAgYmxvY2sgPQorICAgICAqICAgICAgTUQ1KCBzZWNyZXQgKyBTSEExKCAnQScgICAgKyBzZWNyZXQgKyByYW5kb20gKSApICsKKyAgICAgKiAgICAgIE1ENSggc2VjcmV0ICsgU0hBMSggJ0JCJyAgICsgc2VjcmV0ICsgcmFuZG9tICkgKSArCisgICAgICogICAgICBNRDUoIHNlY3JldCArIFNIQTEoICdDQ0MnICArIHNlY3JldCArIHJhbmRvbSApICkgKworICAgICAqICAgICAgLi4uCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IGRsZW4gLyAxNjsgaSsrICkKKyAgICB7CisgICAgICAgIG1lbXNldCggcGFkZGluZywgKHVuc2lnbmVkIGNoYXIpICgnQScgKyBpKSwgMSArIGkgKTsKKworICAgICAgICBtYmVkdGxzX3NoYTFfc3RhcnRzKCAmc2hhMSApOworICAgICAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgcGFkZGluZywgMSArIGkgKTsKKyAgICAgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJnNoYTEsIHNlY3JldCwgc2xlbiApOworICAgICAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgcmFuZG9tLCBybGVuICk7CisgICAgICAgIG1iZWR0bHNfc2hhMV9maW5pc2goICZzaGExLCBzaGExc3VtICk7CisKKyAgICAgICAgbWJlZHRsc19tZDVfc3RhcnRzKCAmbWQ1ICk7CisgICAgICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNSwgc2VjcmV0LCBzbGVuICk7CisgICAgICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNSwgc2hhMXN1bSwgMjAgKTsKKyAgICAgICAgbWJlZHRsc19tZDVfZmluaXNoKCAmbWQ1LCBkc3RidWYgKyBpICogMTYgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX21kNV9mcmVlKCAgJm1kNSAgKTsKKyAgICBtYmVkdGxzX3NoYTFfZnJlZSggJnNoYTEgKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggcGFkZGluZywgc2l6ZW9mKCBwYWRkaW5nICkgKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIHNoYTFzdW0sIHNpemVvZiggc2hhMXN1bSApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorc3RhdGljIGludCB0bHMxX3ByZiggY29uc3QgdW5zaWduZWQgY2hhciAqc2VjcmV0LCBzaXplX3Qgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcmFuZG9tLCBzaXplX3QgcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdGJ1Ziwgc2l6ZV90IGRsZW4gKQoreworICAgIHNpemVfdCBuYiwgaHM7CisgICAgc2l6ZV90IGksIGosIGs7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqUzEsICpTMjsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcFsxMjhdOworICAgIHVuc2lnbmVkIGNoYXIgaF9pWzIwXTsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBtZF9jdHg7CisgICAgaW50IHJldDsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJm1kX2N0eCApOworCisgICAgaWYoIHNpemVvZiggdG1wICkgPCAyMCArIHN0cmxlbiggbGFiZWwgKSArIHJsZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgaHMgPSAoIHNsZW4gKyAxICkgLyAyOworICAgIFMxID0gc2VjcmV0OworICAgIFMyID0gc2VjcmV0ICsgc2xlbiAtIGhzOworCisgICAgbmIgPSBzdHJsZW4oIGxhYmVsICk7CisgICAgbWVtY3B5KCB0bXAgKyAyMCwgbGFiZWwsIG5iICk7CisgICAgbWVtY3B5KCB0bXAgKyAyMCArIG5iLCByYW5kb20sIHJsZW4gKTsKKyAgICBuYiArPSBybGVuOworCisgICAgLyoKKyAgICAgKiBGaXJzdCBjb21wdXRlIFBfbWQ1KHNlY3JldCxsYWJlbCtyYW5kb20pWzAuLmRsZW5dCisgICAgICovCisgICAgaWYoICggbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfTUQ1ICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZtZF9jdHgsIG1kX2luZm8sIDEgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggJm1kX2N0eCwgUzEsIGhzICk7CisgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJm1kX2N0eCwgdG1wICsgMjAsIG5iICk7CisgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJm1kX2N0eCwgNCArIHRtcCApOworCisgICAgZm9yKCBpID0gMDsgaSA8IGRsZW47IGkgKz0gMTYgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3Jlc2V0ICggJm1kX2N0eCApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmbWRfY3R4LCA0ICsgdG1wLCAxNiArIG5iICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZtZF9jdHgsIGhfaSApOworCisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19yZXNldCAoICZtZF9jdHggKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJm1kX2N0eCwgNCArIHRtcCwgMTYgKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJm1kX2N0eCwgNCArIHRtcCApOworCisgICAgICAgIGsgPSAoIGkgKyAxNiA+IGRsZW4gKSA/IGRsZW4gJSAxNiA6IDE2OworCisgICAgICAgIGZvciggaiA9IDA7IGogPCBrOyBqKysgKQorICAgICAgICAgICAgZHN0YnVmW2kgKyBqXSAgPSBoX2lbal07CisgICAgfQorCisgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisKKyAgICAvKgorICAgICAqIFhPUiBvdXQgd2l0aCBQX3NoYTEoc2VjcmV0LGxhYmVsK3JhbmRvbSlbMC4uZGxlbl0KKyAgICAgKi8KKyAgICBpZiggKCBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEExICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZtZF9jdHgsIG1kX2luZm8sIDEgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggJm1kX2N0eCwgUzIsIGhzICk7CisgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJm1kX2N0eCwgdG1wICsgMjAsIG5iICk7CisgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJm1kX2N0eCwgdG1wICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgZGxlbjsgaSArPSAyMCApCisgICAgeworICAgICAgICBtYmVkdGxzX21kX2htYWNfcmVzZXQgKCAmbWRfY3R4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZtZF9jdHgsIHRtcCwgMjAgKyBuYiApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmbWRfY3R4LCBoX2kgKTsKKworICAgICAgICBtYmVkdGxzX21kX2htYWNfcmVzZXQgKCAmbWRfY3R4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZtZF9jdHgsIHRtcCwgMjAgKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJm1kX2N0eCwgdG1wICk7CisKKyAgICAgICAgayA9ICggaSArIDIwID4gZGxlbiApID8gZGxlbiAlIDIwIDogMjA7CisKKyAgICAgICAgZm9yKCBqID0gMDsgaiA8IGs7IGorKyApCisgICAgICAgICAgICBkc3RidWZbaSArIGpdID0gKHVuc2lnbmVkIGNoYXIpKCBkc3RidWZbaSArIGpdIF4gaF9pW2pdICk7CisgICAgfQorCisgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIHRtcCwgc2l6ZW9mKCB0bXAgKSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggaF9pLCBzaXplb2YoIGhfaSApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorc3RhdGljIGludCB0bHNfcHJmX2dlbmVyaWMoIG1iZWR0bHNfbWRfdHlwZV90IG1kX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VjcmV0LCBzaXplX3Qgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYW5kb20sIHNpemVfdCBybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdGJ1Ziwgc2l6ZV90IGRsZW4gKQoreworICAgIHNpemVfdCBuYjsKKyAgICBzaXplX3QgaSwgaiwgaywgbWRfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgdG1wWzEyOF07CisgICAgdW5zaWduZWQgY2hhciBoX2lbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgbWRfY3R4OworICAgIGludCByZXQ7CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZtZF9jdHggKTsKKworICAgIGlmKCAoIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF90eXBlICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKworICAgIG1kX2xlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKworICAgIGlmKCBzaXplb2YoIHRtcCApIDwgbWRfbGVuICsgc3RybGVuKCBsYWJlbCApICsgcmxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBuYiA9IHN0cmxlbiggbGFiZWwgKTsKKyAgICBtZW1jcHkoIHRtcCArIG1kX2xlbiwgbGFiZWwsIG5iICk7CisgICAgbWVtY3B5KCB0bXAgKyBtZF9sZW4gKyBuYiwgcmFuZG9tLCBybGVuICk7CisgICAgbmIgKz0gcmxlbjsKKworICAgIC8qCisgICAgICogQ29tcHV0ZSBQXzxoYXNoPihzZWNyZXQsIGxhYmVsICsgcmFuZG9tKVswLi5kbGVuXQorICAgICAqLworICAgIGlmICggKCByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmbWRfY3R4LCBtZF9pbmZvLCAxICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoICZtZF9jdHgsIHNlY3JldCwgc2xlbiApOworICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZtZF9jdHgsIHRtcCArIG1kX2xlbiwgbmIgKTsKKyAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmbWRfY3R4LCB0bXAgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBkbGVuOyBpICs9IG1kX2xlbiApCisgICAgeworICAgICAgICBtYmVkdGxzX21kX2htYWNfcmVzZXQgKCAmbWRfY3R4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZtZF9jdHgsIHRtcCwgbWRfbGVuICsgbmIgKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJm1kX2N0eCwgaF9pICk7CisKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3Jlc2V0ICggJm1kX2N0eCApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmbWRfY3R4LCB0bXAsIG1kX2xlbiApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmbWRfY3R4LCB0bXAgKTsKKworICAgICAgICBrID0gKCBpICsgbWRfbGVuID4gZGxlbiApID8gZGxlbiAlIG1kX2xlbiA6IG1kX2xlbjsKKworICAgICAgICBmb3IoIGogPSAwOyBqIDwgazsgaisrICkKKyAgICAgICAgICAgIGRzdGJ1ZltpICsgal0gID0gaF9pW2pdOworICAgIH0KKworICAgIG1iZWR0bHNfbWRfZnJlZSggJm1kX2N0eCApOworCisgICAgbWJlZHRsc196ZXJvaXplKCB0bXAsIHNpemVvZiggdG1wICkgKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIGhfaSwgc2l6ZW9mKCBoX2kgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCitzdGF0aWMgaW50IHRsc19wcmZfc2hhMjU2KCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsIHNpemVfdCBzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYW5kb20sIHNpemVfdCBybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0YnVmLCBzaXplX3QgZGxlbiApCit7CisgICAgcmV0dXJuKCB0bHNfcHJmX2dlbmVyaWMoIE1CRURUTFNfTURfU0hBMjU2LCBzZWNyZXQsIHNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLCByYW5kb20sIHJsZW4sIGRzdGJ1ZiwgZGxlbiApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorc3RhdGljIGludCB0bHNfcHJmX3NoYTM4NCggY29uc3QgdW5zaWduZWQgY2hhciAqc2VjcmV0LCBzaXplX3Qgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcmFuZG9tLCBzaXplX3QgcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdGJ1Ziwgc2l6ZV90IGRsZW4gKQoreworICAgIHJldHVybiggdGxzX3ByZl9nZW5lcmljKCBNQkVEVExTX01EX1NIQTM4NCwgc2VjcmV0LCBzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCwgcmFuZG9tLCBybGVuLCBkc3RidWYsIGRsZW4gKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKworc3RhdGljIHZvaWQgc3NsX3VwZGF0ZV9jaGVja3N1bV9zdGFydCggbWJlZHRsc19zc2xfY29udGV4dCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKK3N0YXRpYyB2b2lkIHNzbF91cGRhdGVfY2hlY2tzdW1fbWQ1c2hhMSggbWJlZHRsc19zc2xfY29udGV4dCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCitzdGF0aWMgdm9pZCBzc2xfY2FsY192ZXJpZnlfc3NsKCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIHVuc2lnbmVkIGNoYXIgKiApOworc3RhdGljIHZvaWQgc3NsX2NhbGNfZmluaXNoZWRfc3NsKCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIHVuc2lnbmVkIGNoYXIgKiwgaW50ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCitzdGF0aWMgdm9pZCBzc2xfY2FsY192ZXJpZnlfdGxzKCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIHVuc2lnbmVkIGNoYXIgKiApOworc3RhdGljIHZvaWQgc3NsX2NhbGNfZmluaXNoZWRfdGxzKCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIHVuc2lnbmVkIGNoYXIgKiwgaW50ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKK3N0YXRpYyB2b2lkIHNzbF91cGRhdGVfY2hlY2tzdW1fc2hhMjU2KCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90ICk7CitzdGF0aWMgdm9pZCBzc2xfY2FsY192ZXJpZnlfdGxzX3NoYTI1NiggbWJlZHRsc19zc2xfY29udGV4dCAqLHVuc2lnbmVkIGNoYXIgKiApOworc3RhdGljIHZvaWQgc3NsX2NhbGNfZmluaXNoZWRfdGxzX3NoYTI1NiggbWJlZHRsc19zc2xfY29udGV4dCAqLHVuc2lnbmVkIGNoYXIgKiwgaW50ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKK3N0YXRpYyB2b2lkIHNzbF91cGRhdGVfY2hlY2tzdW1fc2hhMzg0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90ICk7CitzdGF0aWMgdm9pZCBzc2xfY2FsY192ZXJpZnlfdGxzX3NoYTM4NCggbWJlZHRsc19zc2xfY29udGV4dCAqLCB1bnNpZ25lZCBjaGFyICogKTsKK3N0YXRpYyB2b2lkIHNzbF9jYWxjX2ZpbmlzaGVkX3Rsc19zaGEzODQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQgKTsKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworCitpbnQgbWJlZHRsc19zc2xfZGVyaXZlX2tleXMoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgdW5zaWduZWQgY2hhciB0bXBbNjRdOworICAgIHVuc2lnbmVkIGNoYXIga2V5YmxrWzI1Nl07CisgICAgdW5zaWduZWQgY2hhciAqa2V5MTsKKyAgICB1bnNpZ25lZCBjaGFyICprZXkyOworICAgIHVuc2lnbmVkIGNoYXIgKm1hY19lbmM7CisgICAgdW5zaWduZWQgY2hhciAqbWFjX2RlYzsKKyAgICBzaXplX3QgaXZfY29weV9sZW47CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gPSBzc2wtPnNlc3Npb25fbmVnb3RpYXRlOworICAgIG1iZWR0bHNfc3NsX3RyYW5zZm9ybSAqdHJhbnNmb3JtID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlOworICAgIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9wYXJhbXMgKmhhbmRzaGFrZSA9IHNzbC0+aGFuZHNoYWtlOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBkZXJpdmUga2V5cyIgKSApOworCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggdHJhbnNmb3JtLT5jaXBoZXJzdWl0ZV9pbmZvLT5jaXBoZXIgKTsKKyAgICBpZiggY2lwaGVyX2luZm8gPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImNpcGhlciBpbmZvIGZvciAlZCBub3QgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+Y2lwaGVyc3VpdGVfaW5mby0+Y2lwaGVyICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggdHJhbnNmb3JtLT5jaXBoZXJzdWl0ZV9pbmZvLT5tYWMgKTsKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibWJlZHRsc19tZCBpbmZvIGZvciAlZCBub3QgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+Y2lwaGVyc3VpdGVfaW5mby0+bWFjICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCBhcHByb3ByaWF0ZSBQUkYgZnVuY3Rpb24gYW5kIG90aGVyIFNTTCAvIFRMUyAvIFRMUzEuMiBmdW5jdGlvbnMKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCisgICAgeworICAgICAgICBoYW5kc2hha2UtPnRsc19wcmYgPSBzc2wzX3ByZjsKKyAgICAgICAgaGFuZHNoYWtlLT5jYWxjX3ZlcmlmeSA9IHNzbF9jYWxjX3ZlcmlmeV9zc2w7CisgICAgICAgIGhhbmRzaGFrZS0+Y2FsY19maW5pc2hlZCA9IHNzbF9jYWxjX2ZpbmlzaGVkX3NzbDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgIHsKKyAgICAgICAgaGFuZHNoYWtlLT50bHNfcHJmID0gdGxzMV9wcmY7CisgICAgICAgIGhhbmRzaGFrZS0+Y2FsY192ZXJpZnkgPSBzc2xfY2FsY192ZXJpZnlfdGxzOworICAgICAgICBoYW5kc2hha2UtPmNhbGNfZmluaXNoZWQgPSBzc2xfY2FsY19maW5pc2hlZF90bHM7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICYmCisgICAgICAgIHRyYW5zZm9ybS0+Y2lwaGVyc3VpdGVfaW5mby0+bWFjID09IE1CRURUTFNfTURfU0hBMzg0ICkKKyAgICB7CisgICAgICAgIGhhbmRzaGFrZS0+dGxzX3ByZiA9IHRsc19wcmZfc2hhMzg0OworICAgICAgICBoYW5kc2hha2UtPmNhbGNfdmVyaWZ5ID0gc3NsX2NhbGNfdmVyaWZ5X3Rsc19zaGEzODQ7CisgICAgICAgIGhhbmRzaGFrZS0+Y2FsY19maW5pc2hlZCA9IHNzbF9jYWxjX2ZpbmlzaGVkX3Rsc19zaGEzODQ7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICB7CisgICAgICAgIGhhbmRzaGFrZS0+dGxzX3ByZiA9IHRsc19wcmZfc2hhMjU2OworICAgICAgICBoYW5kc2hha2UtPmNhbGNfdmVyaWZ5ID0gc3NsX2NhbGNfdmVyaWZ5X3Rsc19zaGEyNTY7CisgICAgICAgIGhhbmRzaGFrZS0+Y2FsY19maW5pc2hlZCA9IHNzbF9jYWxjX2ZpbmlzaGVkX3Rsc19zaGEyNTY7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTU0x2MzoKKyAgICAgKiAgIG1hc3RlciA9CisgICAgICogICAgIE1ENSggcHJlbWFzdGVyICsgU0hBMSggJ0EnICAgKyBwcmVtYXN0ZXIgKyByYW5kYnl0ZXMgKSApICsKKyAgICAgKiAgICAgTUQ1KCBwcmVtYXN0ZXIgKyBTSEExKCAnQkInICArIHByZW1hc3RlciArIHJhbmRieXRlcyApICkgKworICAgICAqICAgICBNRDUoIHByZW1hc3RlciArIFNIQTEoICdDQ0MnICsgcHJlbWFzdGVyICsgcmFuZGJ5dGVzICkgKQorICAgICAqCisgICAgICogVExTdjErOgorICAgICAqICAgbWFzdGVyID0gUFJGKCBwcmVtYXN0ZXIsICJtYXN0ZXIgc2VjcmV0IiwgcmFuZGJ5dGVzIClbMC4uNDddCisgICAgICovCisgICAgaWYoIGhhbmRzaGFrZS0+cmVzdW1lID09IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAicHJlbWFzdGVyIHNlY3JldCIsIGhhbmRzaGFrZS0+cHJlbWFzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2UtPnBtc2xlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorICAgICAgICBpZiggc3NsLT5oYW5kc2hha2UtPmV4dGVuZGVkX21zID09IE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0VOQUJMRUQgKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHNlc3Npb25faGFzaFs0OF07CisgICAgICAgICAgICBzaXplX3QgaGFzaF9sZW47CisKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidXNpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCIgKSApOworCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+Y2FsY192ZXJpZnkoIHNzbCwgc2Vzc2lvbl9oYXNoICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgICAgICAgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICAgICAgICAgICAgICBpZiggc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvLT5tYWMgPT0KKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19NRF9TSEEzODQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFzaF9sZW4gPSA0ODsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGhhc2hfbGVuID0gMzI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisgICAgICAgICAgICAgICAgaGFzaF9sZW4gPSAzNjsKKworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAic2Vzc2lvbiBoYXNoIiwgc2Vzc2lvbl9oYXNoLCBoYXNoX2xlbiApOworCisgICAgICAgICAgICByZXQgPSBoYW5kc2hha2UtPnRsc19wcmYoIGhhbmRzaGFrZS0+cHJlbWFzdGVyLCBoYW5kc2hha2UtPnBtc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuZGVkIG1hc3RlciBzZWNyZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX2hhc2gsIGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5tYXN0ZXIsIDQ4ICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInByZiIsIHJldCApOworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgcmV0ID0gaGFuZHNoYWtlLT50bHNfcHJmKCBoYW5kc2hha2UtPnByZW1hc3RlciwgaGFuZHNoYWtlLT5wbXNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hc3RlciBzZWNyZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZS0+cmFuZGJ5dGVzLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5tYXN0ZXIsIDQ4ICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInByZiIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggaGFuZHNoYWtlLT5wcmVtYXN0ZXIsIHNpemVvZihoYW5kc2hha2UtPnByZW1hc3RlcikgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggIm5vIHByZW1hc3RlciAoc2Vzc2lvbiByZXN1bWVkKSIgKSApOworCisgICAgLyoKKyAgICAgKiBTd2FwIHRoZSBjbGllbnQgYW5kIHNlcnZlciByYW5kb20gdmFsdWVzLgorICAgICAqLworICAgIG1lbWNweSggdG1wLCBoYW5kc2hha2UtPnJhbmRieXRlcywgNjQgKTsKKyAgICBtZW1jcHkoIGhhbmRzaGFrZS0+cmFuZGJ5dGVzLCB0bXAgKyAzMiwgMzIgKTsKKyAgICBtZW1jcHkoIGhhbmRzaGFrZS0+cmFuZGJ5dGVzICsgMzIsIHRtcCwgMzIgKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIHRtcCwgc2l6ZW9mKCB0bXAgKSApOworCisgICAgLyoKKyAgICAgKiAgU1NMdjM6CisgICAgICogICAga2V5IGJsb2NrID0KKyAgICAgKiAgICAgIE1ENSggbWFzdGVyICsgU0hBMSggJ0EnICAgICsgbWFzdGVyICsgcmFuZGJ5dGVzICkgKSArCisgICAgICogICAgICBNRDUoIG1hc3RlciArIFNIQTEoICdCQicgICArIG1hc3RlciArIHJhbmRieXRlcyApICkgKworICAgICAqICAgICAgTUQ1KCBtYXN0ZXIgKyBTSEExKCAnQ0NDJyAgKyBtYXN0ZXIgKyByYW5kYnl0ZXMgKSApICsKKyAgICAgKiAgICAgIE1ENSggbWFzdGVyICsgU0hBMSggJ0REREQnICsgbWFzdGVyICsgcmFuZGJ5dGVzICkgKSArCisgICAgICogICAgICAuLi4KKyAgICAgKgorICAgICAqICBUTFN2MToKKyAgICAgKiAgICBrZXkgYmxvY2sgPSBQUkYoIG1hc3RlciwgImtleSBleHBhbnNpb24iLCByYW5kYnl0ZXMgKQorICAgICAqLworICAgIHJldCA9IGhhbmRzaGFrZS0+dGxzX3ByZiggc2Vzc2lvbi0+bWFzdGVyLCA0OCwgImtleSBleHBhbnNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlLT5yYW5kYnl0ZXMsIDY0LCBrZXlibGssIDI1NiApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJwcmYiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNpcGhlcnN1aXRlID0gJXMiLAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lKCBzZXNzaW9uLT5jaXBoZXJzdWl0ZSApICkgKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJtYXN0ZXIgc2VjcmV0Iiwgc2Vzc2lvbi0+bWFzdGVyLCA0OCApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgInJhbmRvbSBieXRlcyIsIGhhbmRzaGFrZS0+cmFuZGJ5dGVzLCA2NCApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImtleSBibG9jayIsIGtleWJsaywgMjU2ICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGhhbmRzaGFrZS0+cmFuZGJ5dGVzLCBzaXplb2YoIGhhbmRzaGFrZS0+cmFuZGJ5dGVzICkgKTsKKworICAgIC8qCisgICAgICogRGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBrZXksIElWIGFuZCBNQUMgbGVuZ3RoLgorICAgICAqLworCisgICAgdHJhbnNmb3JtLT5rZXlsZW4gPSBjaXBoZXJfaW5mby0+a2V5X2JpdGxlbiAvIDg7CisKKyAgICBpZiggY2lwaGVyX2luZm8tPm1vZGUgPT0gTUJFRFRMU19NT0RFX0dDTSB8fAorICAgICAgICBjaXBoZXJfaW5mby0+bW9kZSA9PSBNQkVEVExTX01PREVfQ0NNICkKKyAgICB7CisgICAgICAgIHRyYW5zZm9ybS0+bWFjbGVuID0gMDsKKworICAgICAgICB0cmFuc2Zvcm0tPml2bGVuID0gMTI7CisgICAgICAgIHRyYW5zZm9ybS0+Zml4ZWRfaXZsZW4gPSA0OworCisgICAgICAgIC8qIE1pbmltdW0gbGVuZ3RoIGlzIGV4cGljaXQgSVYgKyB0YWcgKi8KKyAgICAgICAgdHJhbnNmb3JtLT5taW5sZW4gPSB0cmFuc2Zvcm0tPml2bGVuIC0gdHJhbnNmb3JtLT5maXhlZF9pdmxlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKCB0cmFuc2Zvcm0tPmNpcGhlcnN1aXRlX2luZm8tPmZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9TSE9SVF9UQUcgPyA4IDogMTYgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBITUFDIGNvbnRleHRzICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZ0cmFuc2Zvcm0tPm1kX2N0eF9lbmMsIG1kX2luZm8sIDEgKSApICE9IDAgfHwKKyAgICAgICAgICAgICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJnRyYW5zZm9ybS0+bWRfY3R4X2RlYywgbWRfaW5mbywgMSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfbWRfc2V0dXAiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBHZXQgTUFDIGxlbmd0aCAqLworICAgICAgICB0cmFuc2Zvcm0tPm1hY2xlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCisgICAgICAgIC8qCisgICAgICAgICAqIElmIEhNQUMgaXMgdG8gYmUgdHJ1bmNhdGVkLCB3ZSBzaGFsbCBrZWVwIHRoZSBsZWZ0bW9zdCBieXRlcywKKyAgICAgICAgICogKHJmYyA2MDY2IHBhZ2UgMTMgb3IgcmZjIDIxMDQgc2VjdGlvbiA0KSwKKyAgICAgICAgICogc28gd2Ugb25seSBuZWVkIHRvIGFkanVzdCB0aGUgbGVuZ3RoIGhlcmUuCisgICAgICAgICAqLworICAgICAgICBpZiggc2Vzc2lvbi0+dHJ1bmNfaG1hYyA9PSBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0VOQUJMRUQgKQorICAgICAgICAgICAgdHJhbnNmb3JtLT5tYWNsZW4gPSBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQ19MRU47CisjZW5kaWYgLyogTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMgKi8KKworICAgICAgICAvKiBJViBsZW5ndGggKi8KKyAgICAgICAgdHJhbnNmb3JtLT5pdmxlbiA9IGNpcGhlcl9pbmZvLT5pdl9zaXplOworCisgICAgICAgIC8qIE1pbmltdW0gbGVuZ3RoICovCisgICAgICAgIGlmKCBjaXBoZXJfaW5mby0+bW9kZSA9PSBNQkVEVExTX01PREVfU1RSRUFNICkKKyAgICAgICAgICAgIHRyYW5zZm9ybS0+bWlubGVuID0gdHJhbnNmb3JtLT5tYWNsZW47CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEdlbmVyaWNCbG9ja0NpcGhlcjoKKyAgICAgICAgICAgICAqIDEuIGlmIEV0TSBpcyBpbiB1c2U6IG9uZSBibG9jayBwbHVzIE1BQworICAgICAgICAgICAgICogICAgb3RoZXJ3aXNlOiAqIGZpcnN0IG11bHRpcGxlIG9mIGJsb2NrbGVuIGdyZWF0ZXIgdGhhbiBtYWNsZW4KKyAgICAgICAgICAgICAqIDIuIElWIGV4Y2VwdCBmb3IgU1NMMyBhbmQgVExTIDEuMAorICAgICAgICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorICAgICAgICAgICAgaWYoIHNlc3Npb24tPmVuY3J5cHRfdGhlbl9tYWMgPT0gTUJFRFRMU19TU0xfRVRNX0VOQUJMRUQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+bWlubGVuID0gdHJhbnNmb3JtLT5tYWNsZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNpcGhlcl9pbmZvLT5ibG9ja19zaXplOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5taW5sZW4gPSB0cmFuc2Zvcm0tPm1hY2xlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY2lwaGVyX2luZm8tPmJsb2NrX3NpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHRyYW5zZm9ybS0+bWFjbGVuICUgY2lwaGVyX2luZm8tPmJsb2NrX3NpemU7CisgICAgICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkKKyAgICAgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgfHwKKyAgICAgICAgICAgICAgICBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEgKQorICAgICAgICAgICAgICAgIDsgLyogTm8gbmVlZCB0byBhZGp1c3QgbWlubGVuICovCisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yIHx8CisgICAgICAgICAgICAgICAgc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPm1pbmxlbiArPSB0cmFuc2Zvcm0tPml2bGVuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAia2V5bGVuOiAlZCwgbWlubGVuOiAlZCwgaXZsZW46ICVkLCBtYWNsZW46ICVkIiwKKyAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPmtleWxlbiwgdHJhbnNmb3JtLT5taW5sZW4sIHRyYW5zZm9ybS0+aXZsZW4sCisgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5tYWNsZW4gKSApOworCisgICAgLyoKKyAgICAgKiBGaW5hbGx5IHNldHVwIHRoZSBjaXBoZXIgY29udGV4dHMsIElWcyBhbmQgTUFDIHNlY3JldHMuCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKyAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgKQorICAgIHsKKyAgICAgICAga2V5MSA9IGtleWJsayArIHRyYW5zZm9ybS0+bWFjbGVuICogMjsKKyAgICAgICAga2V5MiA9IGtleWJsayArIHRyYW5zZm9ybS0+bWFjbGVuICogMiArIHRyYW5zZm9ybS0+a2V5bGVuOworCisgICAgICAgIG1hY19lbmMgPSBrZXlibGs7CisgICAgICAgIG1hY19kZWMgPSBrZXlibGsgKyB0cmFuc2Zvcm0tPm1hY2xlbjsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIGlzIG5vdCB1c2VkIGluIFRMUyB2MS4xLgorICAgICAgICAgKi8KKyAgICAgICAgaXZfY29weV9sZW4gPSAoIHRyYW5zZm9ybS0+Zml4ZWRfaXZsZW4gKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5maXhlZF9pdmxlbiA6IHRyYW5zZm9ybS0+aXZsZW47CisgICAgICAgIG1lbWNweSggdHJhbnNmb3JtLT5pdl9lbmMsIGtleTIgKyB0cmFuc2Zvcm0tPmtleWxlbiwgIGl2X2NvcHlfbGVuICk7CisgICAgICAgIG1lbWNweSggdHJhbnNmb3JtLT5pdl9kZWMsIGtleTIgKyB0cmFuc2Zvcm0tPmtleWxlbiArIGl2X2NvcHlfbGVuLAorICAgICAgICAgICAgICAgIGl2X2NvcHlfbGVuICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DTElfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICkKKyAgICB7CisgICAgICAgIGtleTEgPSBrZXlibGsgKyB0cmFuc2Zvcm0tPm1hY2xlbiAqIDIgKyB0cmFuc2Zvcm0tPmtleWxlbjsKKyAgICAgICAga2V5MiA9IGtleWJsayArIHRyYW5zZm9ybS0+bWFjbGVuICogMjsKKworICAgICAgICBtYWNfZW5jID0ga2V5YmxrICsgdHJhbnNmb3JtLT5tYWNsZW47CisgICAgICAgIG1hY19kZWMgPSBrZXlibGs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBpcyBub3QgdXNlZCBpbiBUTFMgdjEuMS4KKyAgICAgICAgICovCisgICAgICAgIGl2X2NvcHlfbGVuID0gKCB0cmFuc2Zvcm0tPmZpeGVkX2l2bGVuICkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+Zml4ZWRfaXZsZW4gOiB0cmFuc2Zvcm0tPml2bGVuOworICAgICAgICBtZW1jcHkoIHRyYW5zZm9ybS0+aXZfZGVjLCBrZXkxICsgdHJhbnNmb3JtLT5rZXlsZW4sICBpdl9jb3B5X2xlbiApOworICAgICAgICBtZW1jcHkoIHRyYW5zZm9ybS0+aXZfZW5jLCBrZXkxICsgdHJhbnNmb3JtLT5rZXlsZW4gKyBpdl9jb3B5X2xlbiwKKyAgICAgICAgICAgICAgICBpdl9jb3B5X2xlbiApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX0MgKi8KKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICB7CisgICAgICAgIGlmKCB0cmFuc2Zvcm0tPm1hY2xlbiA+IHNpemVvZiB0cmFuc2Zvcm0tPm1hY19lbmMgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoIHRyYW5zZm9ybS0+bWFjX2VuYywgbWFjX2VuYywgdHJhbnNmb3JtLT5tYWNsZW4gKTsKKyAgICAgICAgbWVtY3B5KCB0cmFuc2Zvcm0tPm1hY19kZWMsIG1hY19kZWMsIHRyYW5zZm9ybS0+bWFjbGVuICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA+PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggJnRyYW5zZm9ybS0+bWRfY3R4X2VuYywgbWFjX2VuYywgdHJhbnNmb3JtLT5tYWNsZW4gKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggJnRyYW5zZm9ybS0+bWRfY3R4X2RlYywgbWFjX2RlYywgdHJhbnNmb3JtLT5tYWNsZW4gKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCkKKyAgICBpZiggbWJlZHRsc19zc2xfaHdfcmVjb3JkX2luaXQgIT0gTlVMTCApCisgICAgeworICAgICAgICBpbnQgcmV0ID0gMDsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImdvaW5nIGZvciBtYmVkdGxzX3NzbF9od19yZWNvcmRfaW5pdCgpIiApICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfaHdfcmVjb3JkX2luaXQoIHNzbCwga2V5MSwga2V5MiwgdHJhbnNmb3JtLT5rZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5pdl9lbmMsIHRyYW5zZm9ybS0+aXZfZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2X2NvcHlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY19lbmMsIG1hY19kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5tYWNsZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9od19yZWNvcmRfaW5pdCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFJTEVEICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTKQorICAgIGlmKCBzc2wtPmNvbmYtPmZfZXhwb3J0X2tleXMgIT0gTlVMTCApCisgICAgeworICAgICAgICBzc2wtPmNvbmYtPmZfZXhwb3J0X2tleXMoIHNzbC0+Y29uZi0+cF9leHBvcnRfa2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5tYXN0ZXIsIGtleWJsaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPm1hY2xlbiwgdHJhbnNmb3JtLT5rZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfY29weV9sZW4gKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmdHJhbnNmb3JtLT5jaXBoZXJfY3R4X2VuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcl9pbmZvICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfY2lwaGVyX3NldHVwIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZ0cmFuc2Zvcm0tPmNpcGhlcl9jdHhfZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyX2luZm8gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19jaXBoZXJfc2V0dXAiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoICZ0cmFuc2Zvcm0tPmNpcGhlcl9jdHhfZW5jLCBrZXkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcl9pbmZvLT5rZXlfYml0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5DUllQVCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2NpcGhlcl9zZXRrZXkiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoICZ0cmFuc2Zvcm0tPmNpcGhlcl9jdHhfZGVjLCBrZXkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcl9pbmZvLT5rZXlfYml0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfREVDUllQVCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2NpcGhlcl9zZXRrZXkiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGlmKCBjaXBoZXJfaW5mby0+bW9kZSA9PSBNQkVEVExTX01PREVfQ0JDICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUoICZ0cmFuc2Zvcm0tPmNpcGhlcl9jdHhfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19QQURESU5HX05PTkUgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0X3BhZGRpbmdfbW9kZSggJnRyYW5zZm9ybS0+Y2lwaGVyX2N0eF9kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1BBRERJTkdfTk9ORSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworICAgIG1iZWR0bHNfemVyb2l6ZSgga2V5YmxrLCBzaXplb2YoIGtleWJsayApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgIC8vIEluaXRpYWxpemUgY29tcHJlc3Npb24KKyAgICAvLworICAgIGlmKCBzZXNzaW9uLT5jb21wcmVzc2lvbiA9PSBNQkVEVExTX1NTTF9DT01QUkVTU19ERUZMQVRFICkKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPmNvbXByZXNzX2J1ZiA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJBbGxvY2F0aW5nIGNvbXByZXNzaW9uIGJ1ZmZlciIgKSApOworICAgICAgICAgICAgc3NsLT5jb21wcmVzc19idWYgPSBtYmVkdGxzX2NhbGxvYyggMSwgTUJFRFRMU19TU0xfQlVGRkVSX0xFTiApOworICAgICAgICAgICAgaWYoIHNzbC0+Y29tcHJlc3NfYnVmID09IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYWxsb2MoJWQgYnl0ZXMpIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9CVUZGRVJfTEVOICkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiSW5pdGlhbGl6aW5nIHpsaWIgc3RhdGVzIiApICk7CisKKyAgICAgICAgbWVtc2V0KCAmdHJhbnNmb3JtLT5jdHhfZGVmbGF0ZSwgMCwgc2l6ZW9mKCB0cmFuc2Zvcm0tPmN0eF9kZWZsYXRlICkgKTsKKyAgICAgICAgbWVtc2V0KCAmdHJhbnNmb3JtLT5jdHhfaW5mbGF0ZSwgMCwgc2l6ZW9mKCB0cmFuc2Zvcm0tPmN0eF9pbmZsYXRlICkgKTsKKworICAgICAgICBpZiggZGVmbGF0ZUluaXQoICZ0cmFuc2Zvcm0tPmN0eF9kZWZsYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFpfREVGQVVMVF9DT01QUkVTU0lPTiApICAgIT0gWl9PSyB8fAorICAgICAgICAgICAgaW5mbGF0ZUluaXQoICZ0cmFuc2Zvcm0tPmN0eF9pbmZsYXRlICkgIT0gWl9PSyApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcHJlc3Npb24iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0NPTVBSRVNTSU9OX0ZBSUxFRCApOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfWkxJQl9TVVBQT1JUICovCisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGRlcml2ZSBrZXlzIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKK3ZvaWQgc3NsX2NhbGNfdmVyaWZ5X3NzbCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCB1bnNpZ25lZCBjaGFyIGhhc2hbMzZdICkKK3sKKyAgICBtYmVkdGxzX21kNV9jb250ZXh0IG1kNTsKKyAgICBtYmVkdGxzX3NoYTFfY29udGV4dCBzaGExOworICAgIHVuc2lnbmVkIGNoYXIgcGFkXzFbNDhdOworICAgIHVuc2lnbmVkIGNoYXIgcGFkXzJbNDhdOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBjYWxjIHZlcmlmeSBzc2wiICkgKTsKKworICAgIG1iZWR0bHNfbWQ1X2luaXQoICZtZDUgKTsKKyAgICBtYmVkdGxzX3NoYTFfaW5pdCggJnNoYTEgKTsKKworICAgIG1iZWR0bHNfbWQ1X2Nsb25lKCAmbWQ1LCAmc3NsLT5oYW5kc2hha2UtPmZpbl9tZDUgKTsKKyAgICBtYmVkdGxzX3NoYTFfY2xvbmUoICZzaGExLCAmc3NsLT5oYW5kc2hha2UtPmZpbl9zaGExICk7CisKKyAgICBtZW1zZXQoIHBhZF8xLCAweDM2LCA0OCApOworICAgIG1lbXNldCggcGFkXzIsIDB4NUMsIDQ4ICk7CisKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtZDUsIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPm1hc3RlciwgNDggKTsKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtZDUsIHBhZF8xLCA0OCApOworICAgIG1iZWR0bHNfbWQ1X2ZpbmlzaCggJm1kNSwgaGFzaCApOworCisgICAgbWJlZHRsc19tZDVfc3RhcnRzKCAmbWQ1ICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1LCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5tYXN0ZXIsIDQ4ICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1LCBwYWRfMiwgNDggKTsKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtZDUsIGhhc2gsICAxNiApOworICAgIG1iZWR0bHNfbWQ1X2ZpbmlzaCggJm1kNSwgaGFzaCApOworCisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJnNoYTEsIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPm1hc3RlciwgNDggKTsKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgcGFkXzEsIDQwICk7CisgICAgbWJlZHRsc19zaGExX2ZpbmlzaCggJnNoYTEsIGhhc2ggKyAxNiApOworCisgICAgbWJlZHRsc19zaGExX3N0YXJ0cyggJnNoYTEgKTsKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+bWFzdGVyLCA0OCApOworICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZzaGExLCBwYWRfMiwgNDAgKTsKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgaGFzaCArIDE2LCAyMCApOworICAgIG1iZWR0bHNfc2hhMV9maW5pc2goICZzaGExLCBoYXNoICsgMTYgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgImNhbGN1bGF0ZWQgdmVyaWZ5IHJlc3VsdCIsIGhhc2gsIDM2ICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBjYWxjIHZlcmlmeSIgKSApOworCisgICAgbWJlZHRsc19tZDVfZnJlZSggICZtZDUgICk7CisgICAgbWJlZHRsc19zaGExX2ZyZWUoICZzaGExICk7CisKKyAgICByZXR1cm47Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKK3ZvaWQgc3NsX2NhbGNfdmVyaWZ5X3RscyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCB1bnNpZ25lZCBjaGFyIGhhc2hbMzZdICkKK3sKKyAgICBtYmVkdGxzX21kNV9jb250ZXh0IG1kNTsKKyAgICBtYmVkdGxzX3NoYTFfY29udGV4dCBzaGExOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBjYWxjIHZlcmlmeSB0bHMiICkgKTsKKworICAgIG1iZWR0bHNfbWQ1X2luaXQoICZtZDUgKTsKKyAgICBtYmVkdGxzX3NoYTFfaW5pdCggJnNoYTEgKTsKKworICAgIG1iZWR0bHNfbWQ1X2Nsb25lKCAmbWQ1LCAmc3NsLT5oYW5kc2hha2UtPmZpbl9tZDUgKTsKKyAgICBtYmVkdGxzX3NoYTFfY2xvbmUoICZzaGExLCAmc3NsLT5oYW5kc2hha2UtPmZpbl9zaGExICk7CisKKyAgICAgbWJlZHRsc19tZDVfZmluaXNoKCAmbWQ1LCAgaGFzaCApOworICAgIG1iZWR0bHNfc2hhMV9maW5pc2goICZzaGExLCBoYXNoICsgMTYgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgImNhbGN1bGF0ZWQgdmVyaWZ5IHJlc3VsdCIsIGhhc2gsIDM2ICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBjYWxjIHZlcmlmeSIgKSApOworCisgICAgbWJlZHRsc19tZDVfZnJlZSggICZtZDUgICk7CisgICAgbWJlZHRsc19zaGExX2ZyZWUoICZzaGExICk7CisKKyAgICByZXR1cm47Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMSB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKK3ZvaWQgc3NsX2NhbGNfdmVyaWZ5X3Rsc19zaGEyNTYoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgdW5zaWduZWQgY2hhciBoYXNoWzMyXSApCit7CisgICAgbWJlZHRsc19zaGEyNTZfY29udGV4dCBzaGEyNTY7CisKKyAgICBtYmVkdGxzX3NoYTI1Nl9pbml0KCAmc2hhMjU2ICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IGNhbGMgdmVyaWZ5IHNoYTI1NiIgKSApOworCisgICAgbWJlZHRsc19zaGEyNTZfY2xvbmUoICZzaGEyNTYsICZzc2wtPmhhbmRzaGFrZS0+ZmluX3NoYTI1NiApOworICAgIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaCggJnNoYTI1NiwgaGFzaCApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2FsY3VsYXRlZCB2ZXJpZnkgcmVzdWx0IiwgaGFzaCwgMzIgKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGNhbGMgdmVyaWZ5IiApICk7CisKKyAgICBtYmVkdGxzX3NoYTI1Nl9mcmVlKCAmc2hhMjU2ICk7CisKKyAgICByZXR1cm47Cit9CisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQordm9pZCBzc2xfY2FsY192ZXJpZnlfdGxzX3NoYTM4NCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCB1bnNpZ25lZCBjaGFyIGhhc2hbNDhdICkKK3sKKyAgICBtYmVkdGxzX3NoYTUxMl9jb250ZXh0IHNoYTUxMjsKKworICAgIG1iZWR0bHNfc2hhNTEyX2luaXQoICZzaGE1MTIgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gY2FsYyB2ZXJpZnkgc2hhMzg0IiApICk7CisKKyAgICBtYmVkdGxzX3NoYTUxMl9jbG9uZSggJnNoYTUxMiwgJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhNTEyICk7CisgICAgbWJlZHRsc19zaGE1MTJfZmluaXNoKCAmc2hhNTEyLCBoYXNoICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjYWxjdWxhdGVkIHZlcmlmeSByZXN1bHQiLCBoYXNoLCA0OCApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gY2FsYyB2ZXJpZnkiICkgKTsKKworICAgIG1iZWR0bHNfc2hhNTEyX2ZyZWUoICZzaGE1MTIgKTsKKworICAgIHJldHVybjsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKK2ludCBtYmVkdGxzX3NzbF9wc2tfZGVyaXZlX3ByZW1hc3RlciggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBtYmVkdGxzX2tleV9leGNoYW5nZV90eXBlX3Qga2V5X2V4ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gc3NsLT5oYW5kc2hha2UtPnByZW1hc3RlcjsKKyAgICB1bnNpZ25lZCBjaGFyICplbmQgPSBwICsgc2l6ZW9mKCBzc2wtPmhhbmRzaGFrZS0+cHJlbWFzdGVyICk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHNrID0gc3NsLT5jb25mLT5wc2s7CisgICAgc2l6ZV90IHBza19sZW4gPSBzc2wtPmNvbmYtPnBza19sZW47CisKKyAgICAvKiBJZiB0aGUgcHNrIGNhbGxiYWNrIHdhcyBjYWxsZWQsIHVzZSBpdHMgcmVzdWx0ICovCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5wc2sgIT0gTlVMTCApCisgICAgeworICAgICAgICBwc2sgPSBzc2wtPmhhbmRzaGFrZS0+cHNrOworICAgICAgICBwc2tfbGVuID0gc3NsLT5oYW5kc2hha2UtPnBza19sZW47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBQTVMgPSBzdHJ1Y3QgeworICAgICAqICAgICBvcGFxdWUgb3RoZXJfc2VjcmV0PDAuLjJeMTYtMT47CisgICAgICogICAgIG9wYXF1ZSBwc2s8MC4uMl4xNi0xPjsKKyAgICAgKiB9OworICAgICAqIHdpdGggIm90aGVyX3NlY3JldCIgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIGtleSBleGNoYW5nZQorICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQpCisgICAgaWYoIGtleV9leCA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgKQorICAgIHsKKyAgICAgICAgaWYoIGVuZCAtIHAgPCAyICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAgICAgKihwKyspID0gKHVuc2lnbmVkIGNoYXIpKCBwc2tfbGVuID4+IDggKTsKKyAgICAgICAgKihwKyspID0gKHVuc2lnbmVkIGNoYXIpKCBwc2tfbGVuICAgICAgKTsKKworICAgICAgICBpZiggZW5kIDwgcCB8fCAoc2l6ZV90KSggZW5kIC0gcCApIDwgcHNrX2xlbiApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgICAgIG1lbXNldCggcCwgMCwgcHNrX2xlbiApOworICAgICAgICBwICs9IHBza19sZW47CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKQorICAgIGlmKCBrZXlfZXggPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBvdGhlcl9zZWNyZXQgYWxyZWFkeSBzZXQgYnkgdGhlIENsaWVudEtleUV4Y2hhbmdlIG1lc3NhZ2UsCisgICAgICAgICAqIGFuZCBpcyA0OCBieXRlcyBsb25nCisgICAgICAgICAqLworICAgICAgICAqcCsrID0gMDsKKyAgICAgICAgKnArKyA9IDQ4OworICAgICAgICBwICs9IDQ4OworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQpCisgICAgaWYoIGtleV9leCA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIHNpemVfdCBsZW47CisKKyAgICAgICAgLyogV3JpdGUgbGVuZ3RoIG9ubHkgd2hlbiB3ZSBrbm93IHRoZSBhY3R1YWwgdmFsdWUgKi8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArIDIsIGVuZCAtICggcCArIDIgKSwgJmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgICAgICoocCsrKSA9ICh1bnNpZ25lZCBjaGFyKSggbGVuID4+IDggKTsKKyAgICAgICAgKihwKyspID0gKHVuc2lnbmVkIGNoYXIpKCBsZW4gKTsKKyAgICAgICAgcCArPSBsZW47CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiREhNOiBLICIsICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5LICApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCkKKyAgICBpZigga2V5X2V4ID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyApCisgICAgeworICAgICAgICBpbnQgcmV0OworICAgICAgICBzaXplX3QgemxlbjsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZGhfY2FsY19zZWNyZXQoICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgsICZ6bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArIDIsIGVuZCAtICggcCArIDIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjZGhfY2FsY19zZWNyZXQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICAqKHArKykgPSAodW5zaWduZWQgY2hhcikoIHpsZW4gPj4gOCApOworICAgICAgICAqKHArKykgPSAodW5zaWduZWQgY2hhcikoIHpsZW4gICAgICApOworICAgICAgICBwICs9IHpsZW47CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiRUNESDogeiIsICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgueiApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgKi8KKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworICAgIC8qIG9wYXF1ZSBwc2s8MC4uMl4xNi0xPjsgKi8KKyAgICBpZiggZW5kIC0gcCA8IDIgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgKihwKyspID0gKHVuc2lnbmVkIGNoYXIpKCBwc2tfbGVuID4+IDggKTsKKyAgICAqKHArKykgPSAodW5zaWduZWQgY2hhcikoIHBza19sZW4gICAgICApOworCisgICAgaWYoIGVuZCA8IHAgfHwgKHNpemVfdCkoIGVuZCAtIHAgKSA8IHBza19sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgbWVtY3B5KCBwLCBwc2ssIHBza19sZW4gKTsKKyAgICBwICs9IHBza19sZW47CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+cG1zbGVuID0gcCAtIHNzbC0+aGFuZHNoYWtlLT5wcmVtYXN0ZXI7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKy8qCisgKiBTU0x2My4wIE1BQyBmdW5jdGlvbnMKKyAqLworc3RhdGljIHZvaWQgc3NsX21hYyggbWJlZHRsc19tZF9jb250ZXh0X3QgKm1kX2N0eCwgdW5zaWduZWQgY2hhciAqc2VjcmV0LAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3RyLCBpbnQgdHlwZSApCit7CisgICAgdW5zaWduZWQgY2hhciBoZWFkZXJbMTFdOworICAgIHVuc2lnbmVkIGNoYXIgcGFkZGluZ1s0OF07CisgICAgaW50IHBhZGxlbjsKKyAgICBpbnQgbWRfc2l6ZSA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2N0eC0+bWRfaW5mbyApOworICAgIGludCBtZF90eXBlID0gbWJlZHRsc19tZF9nZXRfdHlwZSggbWRfY3R4LT5tZF9pbmZvICk7CisKKyAgICAvKiBPbmx5IE1ENSBhbmQgU0hBLTEgc3VwcG9ydGVkICovCisgICAgaWYoIG1kX3R5cGUgPT0gTUJFRFRMU19NRF9NRDUgKQorICAgICAgICBwYWRsZW4gPSA0ODsKKyAgICBlbHNlCisgICAgICAgIHBhZGxlbiA9IDQwOworCisgICAgbWVtY3B5KCBoZWFkZXIsIGN0ciwgOCApOworICAgIGhlYWRlclsgOF0gPSAodW5zaWduZWQgY2hhcikgIHR5cGU7CisgICAgaGVhZGVyWyA5XSA9ICh1bnNpZ25lZCBjaGFyKSggbGVuID4+IDggKTsKKyAgICBoZWFkZXJbMTBdID0gKHVuc2lnbmVkIGNoYXIpKCBsZW4gICAgICApOworCisgICAgbWVtc2V0KCBwYWRkaW5nLCAweDM2LCBwYWRsZW4gKTsKKyAgICBtYmVkdGxzX21kX3N0YXJ0cyggbWRfY3R4ICk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoIG1kX2N0eCwgc2VjcmV0LCAgbWRfc2l6ZSApOworICAgIG1iZWR0bHNfbWRfdXBkYXRlKCBtZF9jdHgsIHBhZGRpbmcsIHBhZGxlbiAgKTsKKyAgICBtYmVkdGxzX21kX3VwZGF0ZSggbWRfY3R4LCBoZWFkZXIsICAxMSAgICAgICk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoIG1kX2N0eCwgYnVmLCAgICAgbGVuICAgICApOworICAgIG1iZWR0bHNfbWRfZmluaXNoKCBtZF9jdHgsIGJ1ZiArICAgIGxlbiAgICAgKTsKKworICAgIG1lbXNldCggcGFkZGluZywgMHg1QywgcGFkbGVuICk7CisgICAgbWJlZHRsc19tZF9zdGFydHMoIG1kX2N0eCApOworICAgIG1iZWR0bHNfbWRfdXBkYXRlKCBtZF9jdHgsIHNlY3JldCwgICAgbWRfc2l6ZSApOworICAgIG1iZWR0bHNfbWRfdXBkYXRlKCBtZF9jdHgsIHBhZGRpbmcsICAgcGFkbGVuICApOworICAgIG1iZWR0bHNfbWRfdXBkYXRlKCBtZF9jdHgsIGJ1ZiArIGxlbiwgbWRfc2l6ZSApOworICAgIG1iZWR0bHNfbWRfZmluaXNoKCBtZF9jdHgsIGJ1ZiArIGxlbiAgICAgICAgICApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpIHx8IGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIpIHx8ICAgICBcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoIGRlZmluZWQoTUJFRFRMU19BRVNfQykgfHwgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpICkgKQorI2RlZmluZSBTU0xfU09NRV9NT0RFU19VU0VfTUFDCisjZW5kaWYKKworLyoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBmdW5jdGlvbnMKKyAqLworc3RhdGljIGludCBzc2xfZW5jcnlwdF9idWYoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgbWJlZHRsc19jaXBoZXJfbW9kZV90IG1vZGU7CisgICAgaW50IGF1dGhfZG9uZSA9IDA7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IGVuY3J5cHQgYnVmIiApICk7CisKKyAgICBpZiggc3NsLT5zZXNzaW9uX291dCA9PSBOVUxMIHx8IHNzbC0+dHJhbnNmb3JtX291dCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworICAgIG1vZGUgPSBtYmVkdGxzX2NpcGhlcl9nZXRfY2lwaGVyX21vZGUoICZzc2wtPnRyYW5zZm9ybV9vdXQtPmNpcGhlcl9jdHhfZW5jICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJiZWZvcmUgZW5jcnlwdDogb3V0cHV0IHBheWxvYWQiLAorICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZywgc3NsLT5vdXRfbXNnbGVuICk7CisKKyAgICAvKgorICAgICAqIEFkZCBNQUMgYmVmb3JlIGlmIG5lZWRlZAorICAgICAqLworI2lmIGRlZmluZWQoU1NMX1NPTUVfTU9ERVNfVVNFX01BQykKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX01PREVfU1RSRUFNIHx8CisgICAgICAgICggbW9kZSA9PSBNQkVEVExTX01PREVfQ0JDCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorICAgICAgICAgICYmIHNzbC0+c2Vzc2lvbl9vdXQtPmVuY3J5cHRfdGhlbl9tYWMgPT0gTUJFRFRMU19TU0xfRVRNX0RJU0FCTEVECisjZW5kaWYKKyAgICAgICAgKSApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzbF9tYWMoICZzc2wtPnRyYW5zZm9ybV9vdXQtPm1kX2N0eF9lbmMsCisgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5tYWNfZW5jLAorICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZywgc3NsLT5vdXRfbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X2N0ciwgc3NsLT5vdXRfbXNndHlwZSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpIHx8IFwKKyAgICAgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA+PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmc3NsLT50cmFuc2Zvcm1fb3V0LT5tZF9jdHhfZW5jLCBzc2wtPm91dF9jdHIsIDggKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZzc2wtPnRyYW5zZm9ybV9vdXQtPm1kX2N0eF9lbmMsIHNzbC0+b3V0X2hkciwgMyApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnNzbC0+dHJhbnNmb3JtX291dC0+bWRfY3R4X2VuYywgc3NsLT5vdXRfbGVuLCAyICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmc3NsLT50cmFuc2Zvcm1fb3V0LT5tZF9jdHhfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2csIHNzbC0+b3V0X21zZ2xlbiApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJnNzbC0+dHJhbnNmb3JtX291dC0+bWRfY3R4X2VuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnICsgc3NsLT5vdXRfbXNnbGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfcmVzZXQoICZzc2wtPnRyYW5zZm9ybV9vdXQtPm1kX2N0eF9lbmMgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiY29tcHV0ZWQgbWFjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnICsgc3NsLT5vdXRfbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPm1hY2xlbiApOworCisgICAgICAgIHNzbC0+b3V0X21zZ2xlbiArPSBzc2wtPnRyYW5zZm9ybV9vdXQtPm1hY2xlbjsKKyAgICAgICAgYXV0aF9kb25lKys7CisgICAgfQorI2VuZGlmIC8qIEFFQUQgbm90IHRoZSBvbmx5IG9wdGlvbiAqLworCisgICAgLyoKKyAgICAgKiBFbmNyeXB0CisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykgfHwgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUikKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX01PREVfU1RSRUFNICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIHNpemVfdCBvbGVuID0gMDsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImJlZm9yZSBlbmNyeXB0OiBtc2dsZW4gPSAlZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRpbmcgJWQgYnl0ZXMgb2YgcGFkZGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZ2xlbiwgMCApICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfY3J5cHQoICZzc2wtPnRyYW5zZm9ybV9vdXQtPmNpcGhlcl9jdHhfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPml2X2VuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5pdmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnLCBzc2wtPm91dF9tc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZywgJm9sZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2NpcGhlcl9jcnlwdCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBzc2wtPm91dF9tc2dsZW4gIT0gb2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgfHwgTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpIHx8IGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX01PREVfR0NNIHx8CisgICAgICAgIG1vZGUgPT0gTUJFRFRMU19NT0RFX0NDTSApCisgICAgeworICAgICAgICBpbnQgcmV0OworICAgICAgICBzaXplX3QgZW5jX21zZ2xlbiwgb2xlbjsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZW5jX21zZzsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhZGRfZGF0YVsxM107CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdGFnbGVuID0gc3NsLT50cmFuc2Zvcm1fb3V0LT5jaXBoZXJzdWl0ZV9pbmZvLT5mbGFncyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9TSE9SVF9UQUcgPyA4IDogMTY7CisKKyAgICAgICAgbWVtY3B5KCBhZGRfZGF0YSwgc3NsLT5vdXRfY3RyLCA4ICk7CisgICAgICAgIGFkZF9kYXRhWzhdICA9IHNzbC0+b3V0X21zZ3R5cGU7CisgICAgICAgIG1iZWR0bHNfc3NsX3dyaXRlX3ZlcnNpb24oIHNzbC0+bWFqb3JfdmVyLCBzc2wtPm1pbm9yX3ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+dHJhbnNwb3J0LCBhZGRfZGF0YSArIDkgKTsKKyAgICAgICAgYWRkX2RhdGFbMTFdID0gKCBzc2wtPm91dF9tc2dsZW4gPj4gOCApICYgMHhGRjsKKyAgICAgICAgYWRkX2RhdGFbMTJdID0gc3NsLT5vdXRfbXNnbGVuICYgMHhGRjsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJhZGRpdGlvbmFsIGRhdGEgdXNlZCBmb3IgQUVBRCIsCisgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kYXRhLCAxMyApOworCisgICAgICAgIC8qCisgICAgICAgICAqIEdlbmVyYXRlIElWCisgICAgICAgICAqLworICAgICAgICBpZiggc3NsLT50cmFuc2Zvcm1fb3V0LT5pdmxlbiAtIHNzbC0+dHJhbnNmb3JtX291dC0+Zml4ZWRfaXZsZW4gIT0gOCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFJlbWluZGVyIGlmIHdlIGV2ZXIgYWRkIGFuIEFFQUQgbW9kZSB3aXRoIGEgZGlmZmVyZW50IHNpemUgKi8KKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSggc3NsLT50cmFuc2Zvcm1fb3V0LT5pdl9lbmMgKyBzc2wtPnRyYW5zZm9ybV9vdXQtPmZpeGVkX2l2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9jdHIsIDggKTsKKyAgICAgICAgbWVtY3B5KCBzc2wtPm91dF9pdiwgc3NsLT5vdXRfY3RyLCA4ICk7CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiSVYgdXNlZCIsIHNzbC0+b3V0X2l2LAorICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+aXZsZW4gLSBzc2wtPnRyYW5zZm9ybV9vdXQtPmZpeGVkX2l2bGVuICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRml4IHBvaW50ZXIgcG9zaXRpb25zIGFuZCBtZXNzYWdlIGxlbmd0aCB3aXRoIGFkZGVkIElWCisgICAgICAgICAqLworICAgICAgICBlbmNfbXNnID0gc3NsLT5vdXRfbXNnOworICAgICAgICBlbmNfbXNnbGVuID0gc3NsLT5vdXRfbXNnbGVuOworICAgICAgICBzc2wtPm91dF9tc2dsZW4gKz0gc3NsLT50cmFuc2Zvcm1fb3V0LT5pdmxlbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPmZpeGVkX2l2bGVuOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiYmVmb3JlIGVuY3J5cHQ6IG1zZ2xlbiA9ICVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGluZyAlZCBieXRlcyBvZiBwYWRkaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnbGVuLCAwICkgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBFbmNyeXB0IGFuZCBhdXRoZW50aWNhdGUKKyAgICAgICAgICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX2F1dGhfZW5jcnlwdCggJnNzbC0+dHJhbnNmb3JtX291dC0+Y2lwaGVyX2N0eF9lbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+aXZfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPml2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGF0YSwgMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY19tc2csIGVuY19tc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY19tc2csICZvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNfbXNnICsgZW5jX21zZ2xlbiwgdGFnbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19jaXBoZXJfYXV0aF9lbmNyeXB0IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIG9sZW4gIT0gZW5jX21zZ2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorCisgICAgICAgIHNzbC0+b3V0X21zZ2xlbiArPSB0YWdsZW47CisgICAgICAgIGF1dGhfZG9uZSsrOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImFmdGVyIGVuY3J5cHQ6IHRhZyIsIGVuY19tc2cgKyBlbmNfbXNnbGVuLCB0YWdsZW4gKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgfHwgTUJFRFRMU19DQ01fQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggZGVmaW5lZChNQkVEVExTX0FFU19DKSB8fCBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykgKQorICAgIGlmKCBtb2RlID09IE1CRURUTFNfTU9ERV9DQkMgKQorICAgIHsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZW5jX21zZzsKKyAgICAgICAgc2l6ZV90IGVuY19tc2dsZW4sIHBhZGxlbiwgb2xlbiA9IDAsIGk7CisKKyAgICAgICAgcGFkbGVuID0gc3NsLT50cmFuc2Zvcm1fb3V0LT5pdmxlbiAtICggc3NsLT5vdXRfbXNnbGVuICsgMSApICUKKyAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5pdmxlbjsKKyAgICAgICAgaWYoIHBhZGxlbiA9PSBzc2wtPnRyYW5zZm9ybV9vdXQtPml2bGVuICkKKyAgICAgICAgICAgIHBhZGxlbiA9IDA7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8PSBwYWRsZW47IGkrKyApCisgICAgICAgICAgICBzc2wtPm91dF9tc2dbc3NsLT5vdXRfbXNnbGVuICsgaV0gPSAodW5zaWduZWQgY2hhcikgcGFkbGVuOworCisgICAgICAgIHNzbC0+b3V0X21zZ2xlbiArPSBwYWRsZW4gKyAxOworCisgICAgICAgIGVuY19tc2dsZW4gPSBzc2wtPm91dF9tc2dsZW47CisgICAgICAgIGVuY19tc2cgPSBzc2wtPm91dF9tc2c7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgICAgIC8qCisgICAgICAgICAqIFByZXBlbmQgcGVyLXJlY29yZCBJViBmb3IgYmxvY2sgY2lwaGVyIGluIFRMUyB2MS4xIGFuZCB1cCBhcyBwZXIKKyAgICAgICAgICogTWV0aG9kIDEgKDYuMi4zLjIuIGluIFJGQzQzNDYgYW5kIFJGQzUyNDYpCisgICAgICAgICAqLworICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPj0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEdlbmVyYXRlIElWCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJldCA9IHNzbC0+Y29uZi0+Zl9ybmcoIHNzbC0+Y29uZi0+cF9ybmcsIHNzbC0+dHJhbnNmb3JtX291dC0+aXZfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+aXZsZW4gKTsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgbWVtY3B5KCBzc2wtPm91dF9pdiwgc3NsLT50cmFuc2Zvcm1fb3V0LT5pdl9lbmMsCisgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+aXZsZW4gKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEZpeCBwb2ludGVyIHBvc2l0aW9ucyBhbmQgbWVzc2FnZSBsZW5ndGggd2l0aCBhZGRlZCBJVgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBlbmNfbXNnID0gc3NsLT5vdXRfbXNnOworICAgICAgICAgICAgZW5jX21zZ2xlbiA9IHNzbC0+b3V0X21zZ2xlbjsKKyAgICAgICAgICAgIHNzbC0+b3V0X21zZ2xlbiArPSBzc2wtPnRyYW5zZm9ybV9vdXQtPml2bGVuOworICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiYmVmb3JlIGVuY3J5cHQ6IG1zZ2xlbiA9ICVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGluZyAlZCBieXRlcyBvZiBJViBhbmQgJWQgYnl0ZXMgb2YgcGFkZGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnbGVuLCBzc2wtPnRyYW5zZm9ybV9vdXQtPml2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGxlbiArIDEgKSApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX2NyeXB0KCAmc3NsLT50cmFuc2Zvcm1fb3V0LT5jaXBoZXJfY3R4X2VuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5pdl9lbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+aXZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY19tc2csIGVuY19tc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY19tc2csICZvbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19jaXBoZXJfY3J5cHQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggZW5jX21zZ2xlbiAhPSBvbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyIDwgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFNhdmUgSVYgaW4gU1NMMyBhbmQgVExTMQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBtZW1jcHkoIHNzbC0+dHJhbnNmb3JtX291dC0+aXZfZW5jLAorICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPmNpcGhlcl9jdHhfZW5jLml2LAorICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPml2bGVuICk7CisgICAgICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorICAgICAgICBpZiggYXV0aF9kb25lID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTUFDKE1BQ193cml0ZV9rZXksIHNlcV9udW0gKworICAgICAgICAgICAgICogICAgIFRMU0NpcGhlclRleHQudHlwZSArCisgICAgICAgICAgICAgKiAgICAgVExTQ2lwaGVyVGV4dC52ZXJzaW9uICsKKyAgICAgICAgICAgICAqICAgICBsZW5ndGhfb2YoIChJViArKSBFTkMoLi4uKSApICsKKyAgICAgICAgICAgICAqICAgICBJViArIC8vIGV4Y2VwdCBmb3IgVExTIDEuMAorICAgICAgICAgICAgICogICAgIEVOQyhjb250ZW50ICsgcGFkZGluZyArIHBhZGRpbmdfbGVuZ3RoKSk7CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcHNldWRvX2hkclsxM107CisKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidXNpbmcgZW5jcnlwdCB0aGVuIG1hYyIgKSApOworCisgICAgICAgICAgICBtZW1jcHkoIHBzZXVkb19oZHIgKyAgMCwgc3NsLT5vdXRfY3RyLCA4ICk7CisgICAgICAgICAgICBtZW1jcHkoIHBzZXVkb19oZHIgKyAgOCwgc3NsLT5vdXRfaGRyLCAzICk7CisgICAgICAgICAgICBwc2V1ZG9faGRyWzExXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBzc2wtPm91dF9tc2dsZW4gPj4gOCApICYgMHhGRiApOworICAgICAgICAgICAgcHNldWRvX2hkclsxMl0gPSAodW5zaWduZWQgY2hhcikoICggc3NsLT5vdXRfbXNnbGVuICAgICAgKSAmIDB4RkYgKTsKKworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiTUFDJ2QgbWV0YS1kYXRhIiwgcHNldWRvX2hkciwgMTMgKTsKKworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnNzbC0+dHJhbnNmb3JtX291dC0+bWRfY3R4X2VuYywgcHNldWRvX2hkciwgMTMgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZzc2wtPnRyYW5zZm9ybV9vdXQtPm1kX2N0eF9lbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X2l2LCBzc2wtPm91dF9tc2dsZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZzc2wtPnRyYW5zZm9ybV9vdXQtPm1kX2N0eF9lbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X2l2ICsgc3NsLT5vdXRfbXNnbGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfcmVzZXQoICZzc2wtPnRyYW5zZm9ybV9vdXQtPm1kX2N0eF9lbmMgKTsKKworICAgICAgICAgICAgc3NsLT5vdXRfbXNnbGVuICs9IHNzbC0+dHJhbnNmb3JtX291dC0+bWFjbGVuOworICAgICAgICAgICAgYXV0aF9kb25lKys7CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDICovCisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAmJgorICAgICAgICAgICggTUJFRFRMU19BRVNfQyB8fCBNQkVEVExTX0NBTUVMTElBX0MgKSAqLworICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgLyogTWFrZSBleHRyYSBzdXJlIGF1dGhlbnRpY2F0aW9uIHdhcyBwZXJmb3JtZWQsIGV4YWN0bHkgb25jZSAqLworICAgIGlmKCBhdXRoX2RvbmUgIT0gMSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGVuY3J5cHQgYnVmIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2RlZmluZSBTU0xfTUFYX01BQ19TSVpFICAgNDgKKworc3RhdGljIGludCBzc2xfZGVjcnlwdF9idWYoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19jaXBoZXJfbW9kZV90IG1vZGU7CisgICAgaW50IGF1dGhfZG9uZSA9IDA7CisjaWYgZGVmaW5lZChTU0xfU09NRV9NT0RFU19VU0VfTUFDKQorICAgIHNpemVfdCBwYWRsZW4gPSAwLCBjb3JyZWN0ID0gMTsKKyNlbmRpZgorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBkZWNyeXB0IGJ1ZiIgKSApOworCisgICAgaWYoIHNzbC0+c2Vzc2lvbl9pbiA9PSBOVUxMIHx8IHNzbC0+dHJhbnNmb3JtX2luID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgbW9kZSA9IG1iZWR0bHNfY2lwaGVyX2dldF9jaXBoZXJfbW9kZSggJnNzbC0+dHJhbnNmb3JtX2luLT5jaXBoZXJfY3R4X2RlYyApOworCisgICAgaWYoIHNzbC0+aW5fbXNnbGVuIDwgc3NsLT50cmFuc2Zvcm1faW4tPm1pbmxlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImluX21zZ2xlbiAoJWQpIDwgbWlubGVuICglZCkiLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiwgc3NsLT50cmFuc2Zvcm1faW4tPm1pbmxlbiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykgfHwgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUikKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX01PREVfU1RSRUFNICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIHNpemVfdCBvbGVuID0gMDsKKworICAgICAgICBwYWRsZW4gPSAwOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX2NyeXB0KCAmc3NsLT50cmFuc2Zvcm1faW4tPmNpcGhlcl9jdHhfZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+aXZfZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnLCBzc2wtPmluX21zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2csICZvbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19jaXBoZXJfY3J5cHQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggc3NsLT5pbl9tc2dsZW4gIT0gb2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgfHwgTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpIHx8IGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX01PREVfR0NNIHx8CisgICAgICAgIG1vZGUgPT0gTUJFRFRMU19NT0RFX0NDTSApCisgICAgeworICAgICAgICBpbnQgcmV0OworICAgICAgICBzaXplX3QgZGVjX21zZ2xlbiwgb2xlbjsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGVjX21zZzsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGVjX21zZ19yZXN1bHQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYWRkX2RhdGFbMTNdOworICAgICAgICB1bnNpZ25lZCBjaGFyIHRhZ2xlbiA9IHNzbC0+dHJhbnNmb3JtX2luLT5jaXBoZXJzdWl0ZV9pbmZvLT5mbGFncyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9TSE9SVF9UQUcgPyA4IDogMTY7CisgICAgICAgIHNpemVfdCBleHBsaWNpdF9pdl9sZW4gPSBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPmZpeGVkX2l2bGVuOworCisgICAgICAgIGlmKCBzc2wtPmluX21zZ2xlbiA8IGV4cGxpY2l0X2l2X2xlbiArIHRhZ2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibXNnbGVuICglZCkgPCBleHBsaWNpdF9pdl9sZW4gKCVkKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIrIHRhZ2xlbiAoJWQpIiwgc3NsLT5pbl9tc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0X2l2X2xlbiwgdGFnbGVuICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDICk7CisgICAgICAgIH0KKyAgICAgICAgZGVjX21zZ2xlbiA9IHNzbC0+aW5fbXNnbGVuIC0gZXhwbGljaXRfaXZfbGVuIC0gdGFnbGVuOworCisgICAgICAgIGRlY19tc2cgPSBzc2wtPmluX21zZzsKKyAgICAgICAgZGVjX21zZ19yZXN1bHQgPSBzc2wtPmluX21zZzsKKyAgICAgICAgc3NsLT5pbl9tc2dsZW4gPSBkZWNfbXNnbGVuOworCisgICAgICAgIG1lbWNweSggYWRkX2RhdGEsIHNzbC0+aW5fY3RyLCA4ICk7CisgICAgICAgIGFkZF9kYXRhWzhdICA9IHNzbC0+aW5fbXNndHlwZTsKKyAgICAgICAgbWJlZHRsc19zc2xfd3JpdGVfdmVyc2lvbiggc3NsLT5tYWpvcl92ZXIsIHNzbC0+bWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT50cmFuc3BvcnQsIGFkZF9kYXRhICsgOSApOworICAgICAgICBhZGRfZGF0YVsxMV0gPSAoIHNzbC0+aW5fbXNnbGVuID4+IDggKSAmIDB4RkY7CisgICAgICAgIGFkZF9kYXRhWzEyXSA9IHNzbC0+aW5fbXNnbGVuICYgMHhGRjsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJhZGRpdGlvbmFsIGRhdGEgdXNlZCBmb3IgQUVBRCIsCisgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kYXRhLCAxMyApOworCisgICAgICAgIG1lbWNweSggc3NsLT50cmFuc2Zvcm1faW4tPml2X2RlYyArIHNzbC0+dHJhbnNmb3JtX2luLT5maXhlZF9pdmxlbiwKKyAgICAgICAgICAgICAgICBzc2wtPmluX2l2LAorICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5pdmxlbiAtIHNzbC0+dHJhbnNmb3JtX2luLT5maXhlZF9pdmxlbiApOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgIklWIHVzZWQiLCBzc2wtPnRyYW5zZm9ybV9pbi0+aXZfZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5pdmxlbiApOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJUQUcgdXNlZCIsIGRlY19tc2cgKyBkZWNfbXNnbGVuLCB0YWdsZW4gKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBEZWNyeXB0IGFuZCBhdXRoZW50aWNhdGUKKyAgICAgICAgICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX2F1dGhfZGVjcnlwdCggJnNzbC0+dHJhbnNmb3JtX2luLT5jaXBoZXJfY3R4X2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPml2X2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPml2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGF0YSwgMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY19tc2csIGRlY19tc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY19tc2dfcmVzdWx0LCAmb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjX21zZyArIGRlY19tc2dsZW4sIHRhZ2xlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfY2lwaGVyX2F1dGhfZGVjcnlwdCIsIHJldCApOworCisgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUMgKTsKKworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgICAgICBhdXRoX2RvbmUrKzsKKworICAgICAgICBpZiggb2xlbiAhPSBkZWNfbXNnbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DIHx8IE1CRURUTFNfQ0NNX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoIGRlZmluZWQoTUJFRFRMU19BRVNfQykgfHwgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpICkKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX01PREVfQ0JDICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIERlY3J5cHQgYW5kIGNoZWNrIHRoZSBwYWRkaW5nCisgICAgICAgICAqLworICAgICAgICBpbnQgcmV0OworICAgICAgICB1bnNpZ25lZCBjaGFyICpkZWNfbXNnOworICAgICAgICB1bnNpZ25lZCBjaGFyICpkZWNfbXNnX3Jlc3VsdDsKKyAgICAgICAgc2l6ZV90IGRlY19tc2dsZW47CisgICAgICAgIHNpemVfdCBtaW5sZW4gPSAwOworICAgICAgICBzaXplX3Qgb2xlbiA9IDA7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgaW1tZWRpYXRlIGNpcGhlcnRleHQgc2FuaXR5CisgICAgICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID49IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiApCisgICAgICAgICAgICBtaW5sZW4gKz0gc3NsLT50cmFuc2Zvcm1faW4tPml2bGVuOworI2VuZGlmCisKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnbGVuIDwgbWlubGVuICsgc3NsLT50cmFuc2Zvcm1faW4tPml2bGVuIHx8CisgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiA8IG1pbmxlbiArIHNzbC0+dHJhbnNmb3JtX2luLT5tYWNsZW4gKyAxICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJtc2dsZW4gKCVkKSA8IG1heCggaXZsZW4oJWQpLCBtYWNsZW4gKCVkKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIrIDEgKSAoICsgZXhwbCBJViApIiwgc3NsLT5pbl9tc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5pdmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPm1hY2xlbiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQyApOworICAgICAgICB9CisKKyAgICAgICAgZGVjX21zZ2xlbiA9IHNzbC0+aW5fbXNnbGVuOworICAgICAgICBkZWNfbXNnID0gc3NsLT5pbl9tc2c7CisgICAgICAgIGRlY19tc2dfcmVzdWx0ID0gc3NsLT5pbl9tc2c7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQXV0aGVudGljYXRlIGJlZm9yZSBkZWNyeXB0IGlmIGVuYWJsZWQKKyAgICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorICAgICAgICBpZiggc3NsLT5zZXNzaW9uX2luLT5lbmNyeXB0X3RoZW5fbWFjID09IE1CRURUTFNfU1NMX0VUTV9FTkFCTEVEICkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjb21wdXRlZF9tYWNbU1NMX01BWF9NQUNfU0laRV07CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBzZXVkb19oZHJbMTNdOworCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInVzaW5nIGVuY3J5cHQgdGhlbiBtYWMiICkgKTsKKworICAgICAgICAgICAgZGVjX21zZ2xlbiAtPSBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjbGVuOworICAgICAgICAgICAgc3NsLT5pbl9tc2dsZW4gLT0gc3NsLT50cmFuc2Zvcm1faW4tPm1hY2xlbjsKKworICAgICAgICAgICAgbWVtY3B5KCBwc2V1ZG9faGRyICsgIDAsIHNzbC0+aW5fY3RyLCA4ICk7CisgICAgICAgICAgICBtZW1jcHkoIHBzZXVkb19oZHIgKyAgOCwgc3NsLT5pbl9oZHIsIDMgKTsKKyAgICAgICAgICAgIHBzZXVkb19oZHJbMTFdID0gKHVuc2lnbmVkIGNoYXIpKCAoIHNzbC0+aW5fbXNnbGVuID4+IDggKSAmIDB4RkYgKTsKKyAgICAgICAgICAgIHBzZXVkb19oZHJbMTJdID0gKHVuc2lnbmVkIGNoYXIpKCAoIHNzbC0+aW5fbXNnbGVuICAgICAgKSAmIDB4RkYgKTsKKworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiTUFDJ2QgbWV0YS1kYXRhIiwgcHNldWRvX2hkciwgMTMgKTsKKworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnNzbC0+dHJhbnNmb3JtX2luLT5tZF9jdHhfZGVjLCBwc2V1ZG9faGRyLCAxMyApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnNzbC0+dHJhbnNmb3JtX2luLT5tZF9jdHhfZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX2l2LCBzc2wtPmluX21zZ2xlbiApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJnNzbC0+dHJhbnNmb3JtX2luLT5tZF9jdHhfZGVjLCBjb21wdXRlZF9tYWMgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY19yZXNldCggJnNzbC0+dHJhbnNmb3JtX2luLT5tZF9jdHhfZGVjICk7CisKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgIm1lc3NhZ2UgIG1hYyIsIHNzbC0+aW5faXYgKyBzc2wtPmluX21zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjbGVuICk7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJjb21wdXRlZCBtYWMiLCBjb21wdXRlZF9tYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPm1hY2xlbiApOworCisgICAgICAgICAgICBpZiggbWJlZHRsc19zc2xfc2FmZXJfbWVtY21wKCBzc2wtPmluX2l2ICsgc3NsLT5pbl9tc2dsZW4sIGNvbXB1dGVkX21hYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5tYWNsZW4gKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm1lc3NhZ2UgbWFjIGRvZXMgbm90IG1hdGNoIiApICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQyApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0aF9kb25lKys7CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgbGVuZ3RoIHNhbml0eQorICAgICAgICAgKi8KKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnbGVuICUgc3NsLT50cmFuc2Zvcm1faW4tPml2bGVuICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm1zZ2xlbiAoJWQpICUlIGl2bGVuICglZCkgIT0gMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiwgc3NsLT50cmFuc2Zvcm1faW4tPml2bGVuICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDICk7CisgICAgICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgLyoKKyAgICAgICAgICogSW5pdGlhbGl6ZSBmb3IgcHJlcGVuZGVkIElWIGZvciBibG9jayBjaXBoZXIgaW4gVExTIHYxLjEgYW5kIHVwCisgICAgICAgICAqLworICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPj0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICkKKyAgICAgICAgeworICAgICAgICAgICAgZGVjX21zZ2xlbiAtPSBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW47CisgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiAtPSBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW47CisKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW47IGkrKyApCisgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPml2X2RlY1tpXSA9IHNzbC0+aW5faXZbaV07CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgfHwgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfY3J5cHQoICZzc2wtPnRyYW5zZm9ybV9pbi0+Y2lwaGVyX2N0eF9kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5pdl9kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5pdmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjX21zZywgZGVjX21zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjX21zZ19yZXN1bHQsICZvbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19jaXBoZXJfY3J5cHQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggZGVjX21zZ2xlbiAhPSBvbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyIDwgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFNhdmUgSVYgaW4gU1NMMyBhbmQgVExTMQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBtZW1jcHkoIHNzbC0+dHJhbnNmb3JtX2luLT5pdl9kZWMsCisgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5jaXBoZXJfY3R4X2RlYy5pdiwKKyAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPml2bGVuICk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIHBhZGxlbiA9IDEgKyBzc2wtPmluX21zZ1tzc2wtPmluX21zZ2xlbiAtIDFdOworCisgICAgICAgIGlmKCBzc2wtPmluX21zZ2xlbiA8IHNzbC0+dHJhbnNmb3JtX2luLT5tYWNsZW4gKyBwYWRsZW4gJiYKKyAgICAgICAgICAgIGF1dGhfZG9uZSA9PSAwICkKKyAgICAgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfREVCVUdfQUxMKQorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJtc2dsZW4gKCVkKSA8IG1hY2xlbiAoJWQpICsgcGFkbGVuICglZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dsZW4sIHNzbC0+dHJhbnNmb3JtX2luLT5tYWNsZW4sIHBhZGxlbiApICk7CisjZW5kaWYKKyAgICAgICAgICAgIHBhZGxlbiA9IDA7CisgICAgICAgICAgICBjb3JyZWN0ID0gMDsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHBhZGxlbiA+IHNzbC0+dHJhbnNmb3JtX2luLT5pdmxlbiApCisgICAgICAgICAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9ERUJVR19BTEwpCisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgcGFkZGluZyBsZW5ndGg6IGlzICVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkbGVuLCBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW4gKSApOworI2VuZGlmCisgICAgICAgICAgICAgICAgY29ycmVjdCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA+IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUTFN2MSs6IGFsd2F5cyBjaGVjayB0aGUgcGFkZGluZyB1cCB0byB0aGUgZmlyc3QgZmFpbHVyZQorICAgICAgICAgICAgICogYW5kIGZha2UgY2hlY2sgdXAgdG8gMjU2IGJ5dGVzIG9mIHBhZGRpbmcKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc2l6ZV90IHBhZF9jb3VudCA9IDAsIHJlYWxfY291bnQgPSAxOworICAgICAgICAgICAgc2l6ZV90IHBhZGRpbmdfaWR4ID0gc3NsLT5pbl9tc2dsZW4gLSBwYWRsZW4gLSAxOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogUGFkZGluZyBpcyBndWFyYW50ZWVkIHRvIGJlIGluY29ycmVjdCBpZjoKKyAgICAgICAgICAgICAqICAgMS4gcGFkbGVuID49IHNzbC0+aW5fbXNnbGVuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogICAyLiBwYWRkaW5nX2lkeCA+PSBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKworICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjbGVuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogSW4gYm90aCBjYXNlcyB3ZSByZXNldCBwYWRkaW5nX2lkeCB0byBhIHNhZmUgdmFsdWUgKDApIHRvCisgICAgICAgICAgICAgKiBwcmV2ZW50IG91dC1vZi1idWZmZXIgcmVhZHMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNvcnJlY3QgJj0gKCBzc2wtPmluX21zZ2xlbiA+PSBwYWRsZW4gKyAxICk7CisgICAgICAgICAgICBjb3JyZWN0ICY9ICggcGFkZGluZ19pZHggPCBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPm1hY2xlbiApOworCisgICAgICAgICAgICBwYWRkaW5nX2lkeCAqPSBjb3JyZWN0OworCisgICAgICAgICAgICBmb3IoIGkgPSAxOyBpIDw9IDI1NjsgaSsrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWFsX2NvdW50ICY9ICggaSA8PSBwYWRsZW4gKTsKKyAgICAgICAgICAgICAgICBwYWRfY291bnQgKz0gcmVhbF9jb3VudCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3NsLT5pbl9tc2dbcGFkZGluZ19pZHggKyBpXSA9PSBwYWRsZW4gLSAxICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvcnJlY3QgJj0gKCBwYWRfY291bnQgPT0gcGFkbGVuICk7IC8qIE9ubHkgMSBvbiBjb3JyZWN0IHBhZGRpbmcgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfREVCVUdfQUxMKQorICAgICAgICAgICAgaWYoIHBhZGxlbiA+IDAgJiYgY29ycmVjdCA9PSAwICkKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBwYWRkaW5nIGJ5dGUgZGV0ZWN0ZWQiICkgKTsKKyNlbmRpZgorICAgICAgICAgICAgcGFkbGVuICY9IGNvcnJlY3QgKiAweDFGRjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMSB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgfHwgXAorICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgIH0KKworICAgICAgICBzc2wtPmluX21zZ2xlbiAtPSBwYWRsZW47CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAmJgorICAgICAgICAgICggTUJFRFRMU19BRVNfQyB8fCBNQkVEVExTX0NBTUVMTElBX0MgKSAqLworICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAicmF3IGJ1ZmZlciBhZnRlciBkZWNyeXB0aW9uIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZywgc3NsLT5pbl9tc2dsZW4gKTsKKworICAgIC8qCisgICAgICogQXV0aGVudGljYXRlIGlmIG5vdCBkb25lIHlldC4KKyAgICAgKiBDb21wdXRlIHRoZSBNQUMgcmVnYXJkbGVzcyBvZiB0aGUgcGFkZGluZyByZXN1bHQgKFJGQzQzNDYsIENCQ1RJTUUpLgorICAgICAqLworI2lmIGRlZmluZWQoU1NMX1NPTUVfTU9ERVNfVVNFX01BQykKKyAgICBpZiggYXV0aF9kb25lID09IDAgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0bXBbU1NMX01BWF9NQUNfU0laRV07CisKKyAgICAgICAgc3NsLT5pbl9tc2dsZW4gLT0gc3NsLT50cmFuc2Zvcm1faW4tPm1hY2xlbjsKKworICAgICAgICBzc2wtPmluX2xlblswXSA9ICh1bnNpZ25lZCBjaGFyKSggc3NsLT5pbl9tc2dsZW4gPj4gOCApOworICAgICAgICBzc2wtPmluX2xlblsxXSA9ICh1bnNpZ25lZCBjaGFyKSggc3NsLT5pbl9tc2dsZW4gICAgICApOworCisgICAgICAgIG1lbWNweSggdG1wLCBzc2wtPmluX21zZyArIHNzbC0+aW5fbXNnbGVuLCBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQorICAgICAgICB7CisgICAgICAgICAgICBzc2xfbWFjKCAmc3NsLT50cmFuc2Zvcm1faW4tPm1kX2N0eF9kZWMsCisgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPm1hY19kZWMsCisgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2csIHNzbC0+aW5fbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fY3RyLCBzc2wtPmluX21zZ3R5cGUgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpIHx8IFwKKyAgICAgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA+IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBQcm9jZXNzIE1BQyBhbmQgYWx3YXlzIHVwZGF0ZSBmb3IgcGFkbGVuIGFmdGVyd2FyZHMgdG8gbWFrZQorICAgICAgICAgICAgICogdG90YWwgdGltZSBpbmRlcGVuZGVudCBvZiBwYWRsZW4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBleHRyYV9ydW4gY29tcGVuc2F0ZXMgTUFDIGNoZWNrIGZvciBwYWRsZW4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBLbm93biB0aW1pbmcgYXR0YWNrczoKKyAgICAgICAgICAgICAqICAtIEx1Y2t5IFRoaXJ0ZWVuIChodHRwOi8vd3d3LmlzZy5yaHVsLmFjLnVrL3Rscy9UTFN0aW1pbmcucGRmKQorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFdlIHVzZSAoICggTHggKyA4ICkgLyA2NCApIHRvIGhhbmRsZSAnbmVnYXRpdmUgTHgnIHZhbHVlcworICAgICAgICAgICAgICogY29ycmVjdGx5LiAoV2Ugcm91bmQgZG93biBpbnN0ZWFkIG9mIHVwLCBzbyAtNTYgaXMgdGhlIGNvcnJlY3QKKyAgICAgICAgICAgICAqIHZhbHVlIGZvciBvdXIgY2FsY3VsYXRpb25zIGluc3RlYWQgb2YgLTU1KQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzaXplX3QgaiwgZXh0cmFfcnVuID0gMDsKKyAgICAgICAgICAgIGV4dHJhX3J1biA9ICggMTMgKyBzc2wtPmluX21zZ2xlbiArIHBhZGxlbiArIDggKSAvIDY0IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICggMTMgKyBzc2wtPmluX21zZ2xlbiAgICAgICAgICArIDggKSAvIDY0OworCisgICAgICAgICAgICBleHRyYV9ydW4gJj0gY29ycmVjdCAqIDB4RkY7CisKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZzc2wtPnRyYW5zZm9ybV9pbi0+bWRfY3R4X2RlYywgc3NsLT5pbl9jdHIsIDggKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZzc2wtPnRyYW5zZm9ybV9pbi0+bWRfY3R4X2RlYywgc3NsLT5pbl9oZHIsIDMgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZzc2wtPnRyYW5zZm9ybV9pbi0+bWRfY3R4X2RlYywgc3NsLT5pbl9sZW4sIDIgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZzc2wtPnRyYW5zZm9ybV9pbi0+bWRfY3R4X2RlYywgc3NsLT5pbl9tc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnbGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmc3NsLT50cmFuc2Zvcm1faW4tPm1kX2N0eF9kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnICsgc3NsLT5pbl9tc2dsZW4gKTsKKyAgICAgICAgICAgIC8qIENhbGwgbWJlZHRsc19tZF9wcm9jZXNzIGF0IGxlYXN0IG9uY2UgZHVlIHRvIGNhY2hlIGF0dGFja3MgKi8KKyAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCBleHRyYV9ydW4gKyAxOyBqKysgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfcHJvY2VzcyggJnNzbC0+dHJhbnNmb3JtX2luLT5tZF9jdHhfZGVjLCBzc2wtPmluX21zZyApOworCisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfcmVzZXQoICZzc2wtPnRyYW5zZm9ybV9pbi0+bWRfY3R4X2RlYyApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSB8fCBcCisgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJtZXNzYWdlICBtYWMiLCB0bXAsIHNzbC0+dHJhbnNmb3JtX2luLT5tYWNsZW4gKTsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiY29tcHV0ZWQgbWFjIiwgc3NsLT5pbl9tc2cgKyBzc2wtPmluX21zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPm1hY2xlbiApOworCisgICAgICAgIGlmKCBtYmVkdGxzX3NzbF9zYWZlcl9tZW1jbXAoIHRtcCwgc3NsLT5pbl9tc2cgKyBzc2wtPmluX21zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjbGVuICkgIT0gMCApCisgICAgICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RFQlVHX0FMTCkKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibWVzc2FnZSBtYWMgZG9lcyBub3QgbWF0Y2giICkgKTsKKyNlbmRpZgorICAgICAgICAgICAgY29ycmVjdCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgYXV0aF9kb25lKys7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRmluYWxseSBjaGVjayB0aGUgY29ycmVjdCBmbGFnCisgICAgICAgICAqLworICAgICAgICBpZiggY29ycmVjdCA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDICk7CisgICAgfQorI2VuZGlmIC8qIFNTTF9TT01FX01PREVTX1VTRV9NQUMgKi8KKworICAgIC8qIE1ha2UgZXh0cmEgc3VyZSBhdXRoZW50aWNhdGlvbiB3YXMgcGVyZm9ybWVkLCBleGFjdGx5IG9uY2UgKi8KKyAgICBpZiggYXV0aF9kb25lICE9IDEgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+aW5fbXNnbGVuID09IDAgKQorICAgIHsKKyAgICAgICAgc3NsLT5uYl96ZXJvKys7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhyZWUgb3IgbW9yZSBlbXB0eSBtZXNzYWdlcyBtYXkgYmUgYSBEb1MgYXR0YWNrCisgICAgICAgICAqIChleGNlc3NpdmUgQ1BVIGNvbnN1bXB0aW9uKS4KKyAgICAgICAgICovCisgICAgICAgIGlmKCBzc2wtPm5iX3plcm8gPiAzICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJyZWNlaXZlZCBmb3VyIGNvbnNlY3V0aXZlIGVtcHR5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lc3NhZ2VzLCBwb3NzaWJsZSBEb1MgYXR0YWNrIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQyApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgc3NsLT5uYl96ZXJvID0gMDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisgICAgICAgIDsgLyogaW5fY3RyIHJlYWQgZnJvbSBwZWVyLCBub3QgbWFpbnRhaW5lZCBpbnRlcm5hbGx5ICovCisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgZm9yKCBpID0gODsgaSA+IHNzbF9lcF9sZW4oIHNzbCApOyBpLS0gKQorICAgICAgICAgICAgaWYoICsrc3NsLT5pbl9jdHJbaSAtIDFdICE9IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIFRoZSBsb29wIGdvZXMgdG8gaXRzIGVuZCBpZmYgdGhlIGNvdW50ZXIgaXMgd3JhcHBpbmcgKi8KKyAgICAgICAgaWYoIGkgPT0gc3NsX2VwX2xlbiggc3NsICkgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImluY29taW5nIG1lc3NhZ2UgY291bnRlciB3b3VsZCB3cmFwIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9DT1VOVEVSX1dSQVBQSU5HICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGRlY3J5cHQgYnVmIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI3VuZGVmIE1BQ19OT05FCisjdW5kZWYgTUFDX1BMQUlOVEVYVAorI3VuZGVmIE1BQ19DSVBIRVJURVhUCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorLyoKKyAqIENvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zCisgKi8KK3N0YXRpYyBpbnQgc3NsX2NvbXByZXNzX2J1ZiggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKm1zZ19wb3N0ID0gc3NsLT5vdXRfbXNnOworICAgIHNpemVfdCBsZW5fcHJlID0gc3NsLT5vdXRfbXNnbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKm1zZ19wcmUgPSBzc2wtPmNvbXByZXNzX2J1ZjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gY29tcHJlc3MgYnVmIiApICk7CisKKyAgICBpZiggbGVuX3ByZSA9PSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBtZW1jcHkoIG1zZ19wcmUsIHNzbC0+b3V0X21zZywgbGVuX3ByZSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJiZWZvcmUgY29tcHJlc3Npb246IG1zZ2xlbiA9ICVkLCAiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZ2xlbiApICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJiZWZvcmUgY29tcHJlc3Npb246IG91dHB1dCBwYXlsb2FkIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2csIHNzbC0+b3V0X21zZ2xlbiApOworCisgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5jdHhfZGVmbGF0ZS5uZXh0X2luID0gbXNnX3ByZTsKKyAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPmN0eF9kZWZsYXRlLmF2YWlsX2luID0gbGVuX3ByZTsKKyAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPmN0eF9kZWZsYXRlLm5leHRfb3V0ID0gbXNnX3Bvc3Q7CisgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5jdHhfZGVmbGF0ZS5hdmFpbF9vdXQgPSBNQkVEVExTX1NTTF9CVUZGRVJfTEVOOworCisgICAgcmV0ID0gZGVmbGF0ZSggJnNzbC0+dHJhbnNmb3JtX291dC0+Y3R4X2RlZmxhdGUsIFpfU1lOQ19GTFVTSCApOworICAgIGlmKCByZXQgIT0gWl9PSyApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImZhaWxlZCB0byBwZXJmb3JtIGNvbXByZXNzaW9uICglZCkiLCByZXQgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9DT01QUkVTU0lPTl9GQUlMRUQgKTsKKyAgICB9CisKKyAgICBzc2wtPm91dF9tc2dsZW4gPSBNQkVEVExTX1NTTF9CVUZGRVJfTEVOIC0KKyAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPmN0eF9kZWZsYXRlLmF2YWlsX291dDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiYWZ0ZXIgY29tcHJlc3Npb246IG1zZ2xlbiA9ICVkLCAiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZ2xlbiApICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJhZnRlciBjb21wcmVzc2lvbjogb3V0cHV0IHBheWxvYWQiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZywgc3NsLT5vdXRfbXNnbGVuICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGNvbXByZXNzIGJ1ZiIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgc3NsX2RlY29tcHJlc3NfYnVmKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqbXNnX3Bvc3QgPSBzc2wtPmluX21zZzsKKyAgICBzaXplX3QgbGVuX3ByZSA9IHNzbC0+aW5fbXNnbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKm1zZ19wcmUgPSBzc2wtPmNvbXByZXNzX2J1ZjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gZGVjb21wcmVzcyBidWYiICkgKTsKKworICAgIGlmKCBsZW5fcHJlID09IDAgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIG1lbWNweSggbXNnX3ByZSwgc3NsLT5pbl9tc2csIGxlbl9wcmUgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiYmVmb3JlIGRlY29tcHJlc3Npb246IG1zZ2xlbiA9ICVkLCAiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnbGVuICkgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImJlZm9yZSBkZWNvbXByZXNzaW9uOiBpbnB1dCBwYXlsb2FkIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZywgc3NsLT5pbl9tc2dsZW4gKTsKKworICAgIHNzbC0+dHJhbnNmb3JtX2luLT5jdHhfaW5mbGF0ZS5uZXh0X2luID0gbXNnX3ByZTsKKyAgICBzc2wtPnRyYW5zZm9ybV9pbi0+Y3R4X2luZmxhdGUuYXZhaWxfaW4gPSBsZW5fcHJlOworICAgIHNzbC0+dHJhbnNmb3JtX2luLT5jdHhfaW5mbGF0ZS5uZXh0X291dCA9IG1zZ19wb3N0OworICAgIHNzbC0+dHJhbnNmb3JtX2luLT5jdHhfaW5mbGF0ZS5hdmFpbF9vdXQgPSBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisKKyAgICByZXQgPSBpbmZsYXRlKCAmc3NsLT50cmFuc2Zvcm1faW4tPmN0eF9pbmZsYXRlLCBaX1NZTkNfRkxVU0ggKTsKKyAgICBpZiggcmV0ICE9IFpfT0sgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJmYWlsZWQgdG8gcGVyZm9ybSBkZWNvbXByZXNzaW9uICglZCkiLCByZXQgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9DT01QUkVTU0lPTl9GQUlMRUQgKTsKKyAgICB9CisKKyAgICBzc2wtPmluX21zZ2xlbiA9IE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiAtCisgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+Y3R4X2luZmxhdGUuYXZhaWxfb3V0OworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJhZnRlciBkZWNvbXByZXNzaW9uOiBtc2dsZW4gPSAlZCwgIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiApICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJhZnRlciBkZWNvbXByZXNzaW9uOiBpbnB1dCBwYXlsb2FkIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZywgc3NsLT5pbl9tc2dsZW4gKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gZGVjb21wcmVzcyBidWYiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfWkxJQl9TVVBQT1JUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCitzdGF0aWMgaW50IHNzbF93cml0ZV9oZWxsb19yZXF1ZXN0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKK3N0YXRpYyBpbnQgc3NsX3Jlc2VuZF9oZWxsb19yZXF1ZXN0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIC8qIElmIHJlbmVnb3RpYXRpb24gaXMgbm90IGVuZm9yY2VkLCByZXRyYW5zbWl0IHVudGlsIHdlIHdvdWxkIHJlYWNoIG1heAorICAgICAqIHRpbWVvdXQgaWYgd2Ugd2VyZSB1c2luZyB0aGUgdXN1YWwgaGFuZHNoYWtlIGRvdWJsaW5nIHNjaGVtZSAqLworICAgIGlmKCBzc2wtPmNvbmYtPnJlbmVnb19tYXhfcmVjb3JkcyA8IDAgKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgcmF0aW8gPSBzc2wtPmNvbmYtPmhzX3RpbWVvdXRfbWF4IC8gc3NsLT5jb25mLT5oc190aW1lb3V0X21pbiArIDE7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgZG91YmxpbmdzID0gMTsKKworICAgICAgICB3aGlsZSggcmF0aW8gIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgICsrZG91YmxpbmdzOworICAgICAgICAgICAgcmF0aW8gPj49IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiggKytzc2wtPnJlbmVnb19yZWNvcmRzX3NlZW4gPiBkb3VibGluZ3MgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIm5vIGxvbmdlciByZXRyYW5zbWl0dGluZyBoZWxsbyByZXF1ZXN0IiApICk7CisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggc3NsX3dyaXRlX2hlbGxvX3JlcXVlc3QoIHNzbCApICk7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TUlZfQyAmJiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisKKy8qCisgKiBGaWxsIHRoZSBpbnB1dCBtZXNzYWdlIGJ1ZmZlciBieSBhcHBlbmRpbmcgZGF0YSB0byBpdC4KKyAqIFRoZSBhbW91bnQgb2YgZGF0YSBhbHJlYWR5IGZldGNoZWQgaXMgaW4gc3NsLT5pbl9sZWZ0LgorICoKKyAqIElmIHdlIHJldHVybiAwLCBpcyBpdCBndWFyYW50ZWVkIHRoYXQgKGF0IGxlYXN0KSBuYl93YW50IGJ5dGVzIGFyZQorICogYXZhaWxhYmxlIChmcm9tIHRoaXMgcmVhZCBhbmQvb3IgYSBwcmV2aW91cyBvbmUpLiBPdGhlcndpc2UsIGFuIGVycm9yIGNvZGUKKyAqIGlzIHJldHVybmVkIChwb3NzaWJseSBFT0Ygb3IgV0FOVF9SRUFEKS4KKyAqCisgKiBXaXRoIHN0cmVhbSB0cmFuc3BvcnQgKFRMUykgb24gc3VjY2VzcyBzc2wtPmluX2xlZnQgPT0gbmJfd2FudCwgYnV0CisgKiB3aXRoIGRhdGFncmFtIHRyYW5zcG9ydCAoRFRMUykgb24gc3VjY2VzcyBzc2wtPmluX2xlZnQgPj0gbmJfd2FudCwKKyAqIHNpbmNlIHdlIGFsd2F5cyByZWFkIGEgd2hvbGUgZGF0YWdyYW0gYXQgb25jZS4KKyAqCisgKiBGb3IgRFRMUywgaXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBzZXQgc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQgd2hlbgorICogdGhleSdyZSBkb25lIHJlYWRpbmcgYSByZWNvcmQuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9mZXRjaF9pbnB1dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBzaXplX3QgbmJfd2FudCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBmZXRjaCBpbnB1dCIgKSApOworCisgICAgaWYoIHNzbC0+Zl9yZWN2ID09IE5VTEwgJiYgc3NsLT5mX3JlY3ZfdGltZW91dCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiQmFkIHVzYWdlIG9mIG1iZWR0bHNfc3NsX3NldF9iaW8oKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yIG1iZWR0bHNfc3NsX3NldF9iaW8oKSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGlmKCBuYl93YW50ID4gTUJFRFRMU19TU0xfQlVGRkVSX0xFTiAtIChzaXplX3QpKCBzc2wtPmluX2hkciAtIHNzbC0+aW5fYnVmICkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJyZXF1ZXN0aW5nIG1vcmUgZGF0YSB0aGFuIGZpdHMiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICB1aW50MzJfdCB0aW1lb3V0OworCisgICAgICAgIC8qIEp1c3QgdG8gYmUgc3VyZSAqLworICAgICAgICBpZiggc3NsLT5mX3NldF90aW1lciA9PSBOVUxMIHx8IHNzbC0+Zl9nZXRfdGltZXIgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiWW91IG11c3QgdXNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJtYmVkdGxzX3NzbF9zZXRfdGltZXJfY2IoKSBmb3IgRFRMUyIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRoZSBwb2ludCBpcywgd2UgbmVlZCB0byBhbHdheXMgcmVhZCBhIGZ1bGwgZGF0YWdyYW0gYXQgb25jZSwgc28gd2UKKyAgICAgICAgICogc29tZXRpbWVzIHJlYWQgbW9yZSB0aGVuIHJlcXVlc3RlZCwgYW5kIGhhbmRsZSB0aGUgYWRkaXRpb25hbCBkYXRhLgorICAgICAgICAgKiBJdCBjb3VsZCBiZSB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCByZWNvcmQgKHdoaWxlIGZldGNoaW5nIHRoZQorICAgICAgICAgKiBoZWFkZXIpIGFuZC9vciBzb21lIG90aGVyIHJlY29yZHMgaW4gdGhlIHNhbWUgZGF0YWdyYW0uCisgICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIE1vdmUgdG8gdGhlIG5leHQgcmVjb3JkIGluIHRoZSBhbHJlYWR5IHJlYWQgZGF0YWdyYW0gaWYgYXBwbGljYWJsZQorICAgICAgICAgKi8KKyAgICAgICAgaWYoIHNzbC0+bmV4dF9yZWNvcmRfb2Zmc2V0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3NsLT5pbl9sZWZ0IDwgc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNzbC0+aW5fbGVmdCAtPSBzc2wtPm5leHRfcmVjb3JkX29mZnNldDsKKworICAgICAgICAgICAgaWYoIHNzbC0+aW5fbGVmdCAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIm5leHQgcmVjb3JkIGluIHNhbWUgZGF0YWdyYW0sIG9mZnNldDogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQgKSApOworICAgICAgICAgICAgICAgIG1lbW1vdmUoIHNzbC0+aW5faGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5faGRyICsgc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9sZWZ0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNzbC0+bmV4dF9yZWNvcmRfb2Zmc2V0ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiaW5fbGVmdDogJWQsIG5iX3dhbnQ6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9sZWZ0LCBuYl93YW50ICkgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBEb25lIGlmIHdlIGFscmVhZHkgaGF2ZSBlbm91Z2ggZGF0YS4KKyAgICAgICAgICovCisgICAgICAgIGlmKCBuYl93YW50IDw9IHNzbC0+aW5fbGVmdCkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBmZXRjaCBpbnB1dCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBBIHJlY29yZCBjYW4ndCBiZSBzcGxpdCBhY2Nyb3NzIGRhdGFncmFtcy4gSWYgd2UgbmVlZCB0byByZWFkIGJ1dAorICAgICAgICAgKiBhcmUgbm90IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgcmVjb3JkLCB0aGUgY2FsbGVyIGRpZCBzb21ldGhpbmcKKyAgICAgICAgICogd3JvbmcuCisgICAgICAgICAqLworICAgICAgICBpZiggc3NsLT5pbl9sZWZ0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBEb24ndCBldmVuIHRyeSB0byByZWFkIGlmIHRpbWUncyBvdXQgYWxyZWFkeS4KKyAgICAgICAgICogVGhpcyBhdm9pZHMgYnktcGFzc2luZyB0aGUgdGltZXIgd2hlbiByZXBlYXRlZGx5IHJlY2VpdmluZyBtZXNzYWdlcworICAgICAgICAgKiB0aGF0IHdpbGwgZW5kIHVwIGJlaW5nIGRyb3BwZWQuCisgICAgICAgICAqLworICAgICAgICBpZiggc3NsX2NoZWNrX3RpbWVyKCBzc2wgKSAhPSAwICkKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1NTTF9USU1FT1VUOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbiA9IE1CRURUTFNfU1NMX0JVRkZFUl9MRU4gLSAoIHNzbC0+aW5faGRyIC0gc3NsLT5pbl9idWYgKTsKKworICAgICAgICAgICAgaWYoIHNzbC0+c3RhdGUgIT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgKQorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF90aW1lb3V0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzc2wtPmNvbmYtPnJlYWRfdGltZW91dDsKKworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmX3JlY3ZfdGltZW91dDogJXUgbXMiLCB0aW1lb3V0ICkgKTsKKworICAgICAgICAgICAgaWYoIHNzbC0+Zl9yZWN2X3RpbWVvdXQgIT0gTlVMTCApCisgICAgICAgICAgICAgICAgcmV0ID0gc3NsLT5mX3JlY3ZfdGltZW91dCggc3NsLT5wX2Jpbywgc3NsLT5pbl9oZHIsIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldCA9IHNzbC0+Zl9yZWN2KCBzc2wtPnBfYmlvLCBzc2wtPmluX2hkciwgbGVuICk7CisKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMiwgInNzbC0+Zl9yZWN2KF90aW1lb3V0KSIsIHJldCApOworCisgICAgICAgICAgICBpZiggcmV0ID09IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0NPTk5fRU9GICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9USU1FT1VUICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJ0aW1lb3V0IiApICk7CisgICAgICAgICAgICBzc2xfc2V0X3RpbWVyKCBzc2wsIDAgKTsKKworICAgICAgICAgICAgaWYoIHNzbC0+c3RhdGUgIT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCBzc2xfZG91YmxlX3JldHJhbnNtaXRfdGltZW91dCggc3NsICkgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImhhbmRzaGFrZSB0aW1lb3V0IiApICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1RJTUVPVVQgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9yZXNlbmQoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9yZXNlbmQiLCByZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKTsKKyAgICAgICAgICAgIH0KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgICAgICAgICBlbHNlIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiAmJgorICAgICAgICAgICAgICAgICAgICAgc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fUEVORElORyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICggcmV0ID0gc3NsX3Jlc2VuZF9oZWxsb19yZXF1ZXN0KCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAic3NsX3Jlc2VuZF9oZWxsb19yZXF1ZXN0IiwgcmV0ICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX0MgJiYgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworICAgICAgICB9CisKKyAgICAgICAgaWYoIHJldCA8IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBzc2wtPmluX2xlZnQgPSByZXQ7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJpbl9sZWZ0OiAlZCwgbmJfd2FudDogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX2xlZnQsIG5iX3dhbnQgKSApOworCisgICAgICAgIHdoaWxlKCBzc2wtPmluX2xlZnQgPCBuYl93YW50ICkKKyAgICAgICAgeworICAgICAgICAgICAgbGVuID0gbmJfd2FudCAtIHNzbC0+aW5fbGVmdDsKKworICAgICAgICAgICAgaWYoIHNzbF9jaGVja190aW1lciggc3NsICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfU1NMX1RJTUVPVVQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHNzbC0+Zl9yZWN2X3RpbWVvdXQgIT0gTlVMTCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBzc2wtPmZfcmVjdl90aW1lb3V0KCBzc2wtPnBfYmlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX2hkciArIHNzbC0+aW5fbGVmdCwgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPnJlYWRfdGltZW91dCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBzc2wtPmZfcmVjdiggc3NsLT5wX2JpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5faGRyICsgc3NsLT5pbl9sZWZ0LCBsZW4gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiaW5fbGVmdDogJWQsIG5iX3dhbnQ6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX2xlZnQsIG5iX3dhbnQgKSApOworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAyLCAic3NsLT5mX3JlY3YoX3RpbWVvdXQpIiwgcmV0ICk7CisKKyAgICAgICAgICAgIGlmKCByZXQgPT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQ09OTl9FT0YgKTsKKworICAgICAgICAgICAgaWYoIHJldCA8IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIHNzbC0+aW5fbGVmdCArPSByZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGZldGNoIGlucHV0IiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEZsdXNoIGFueSBkYXRhIG5vdCB5ZXQgd3JpdHRlbgorICovCitpbnQgbWJlZHRsc19zc2xfZmx1c2hfb3V0cHV0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqYnVmLCBpOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBmbHVzaCBvdXRwdXQiICkgKTsKKworICAgIGlmKCBzc2wtPmZfc2VuZCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiQmFkIHVzYWdlIG9mIG1iZWR0bHNfc3NsX3NldF9iaW8oKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yIG1iZWR0bHNfc3NsX3NldF9iaW8oKSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIC8qIEF2b2lkIGluY3JlbWVudGluZyBjb3VudGVyIGlmIGRhdGEgaXMgZmx1c2hlZCAqLworICAgIGlmKCBzc2wtPm91dF9sZWZ0ID09IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBmbHVzaCBvdXRwdXQiICkgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgd2hpbGUoIHNzbC0+b3V0X2xlZnQgPiAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAibWVzc2FnZSBsZW5ndGg6ICVkLCBvdXRfbGVmdDogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9oZHJfbGVuKCBzc2wgKSArIHNzbC0+b3V0X21zZ2xlbiwgc3NsLT5vdXRfbGVmdCApICk7CisKKyAgICAgICAgYnVmID0gc3NsLT5vdXRfaGRyICsgbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICkgKworICAgICAgICAgICAgICBzc2wtPm91dF9tc2dsZW4gLSBzc2wtPm91dF9sZWZ0OworICAgICAgICByZXQgPSBzc2wtPmZfc2VuZCggc3NsLT5wX2JpbywgYnVmLCBzc2wtPm91dF9sZWZ0ICk7CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAyLCAic3NsLT5mX3NlbmQiLCByZXQgKTsKKworICAgICAgICBpZiggcmV0IDw9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBzc2wtPm91dF9sZWZ0IC09IHJldDsKKyAgICB9CisKKyAgICBmb3IoIGkgPSA4OyBpID4gc3NsX2VwX2xlbiggc3NsICk7IGktLSApCisgICAgICAgIGlmKCArK3NzbC0+b3V0X2N0cltpIC0gMV0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIC8qIFRoZSBsb29wIGdvZXMgdG8gaXRzIGVuZCBpZmYgdGhlIGNvdW50ZXIgaXMgd3JhcHBpbmcgKi8KKyAgICBpZiggaSA9PSBzc2xfZXBfbGVuKCBzc2wgKSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm91dGdvaW5nIG1lc3NhZ2UgY291bnRlciB3b3VsZCB3cmFwIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0NPVU5URVJfV1JBUFBJTkcgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGZsdXNoIG91dHB1dCIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBGdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBEVExTIHJldHJhbnNtaXNzaW9uIHN0YXRlIG1hY2hpbmUKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKy8qCisgKiBBcHBlbmQgY3VycmVudCBoYW5kc2hha2UgbWVzc2FnZSB0byBjdXJyZW50IG91dGdvaW5nIGZsaWdodAorICovCitzdGF0aWMgaW50IHNzbF9mbGlnaHRfYXBwZW5kKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtICptc2c7CisKKyAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgY3VycmVudCBtZXNzYWdlICovCisgICAgaWYoICggbXNnID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtICkgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJhbGxvYyAlZCBieXRlcyBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggbWJlZHRsc19zc2xfZmxpZ2h0X2l0ZW0gKSApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworICAgIGlmKCAoIG1zZy0+cCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzc2wtPm91dF9tc2dsZW4gKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJhbGxvYyAlZCBieXRlcyBmYWlsZWQiLCBzc2wtPm91dF9tc2dsZW4gKSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIG1zZyApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgKTsKKyAgICB9CisKKyAgICAvKiBDb3B5IGN1cnJlbnQgaGFuZHNoYWtlIG1lc3NhZ2Ugd2l0aCBoZWFkZXJzICovCisgICAgbWVtY3B5KCBtc2ctPnAsIHNzbC0+b3V0X21zZywgc3NsLT5vdXRfbXNnbGVuICk7CisgICAgbXNnLT5sZW4gPSBzc2wtPm91dF9tc2dsZW47CisgICAgbXNnLT50eXBlID0gc3NsLT5vdXRfbXNndHlwZTsKKyAgICBtc2ctPm5leHQgPSBOVUxMOworCisgICAgLyogQXBwZW5kIHRvIHRoZSBjdXJyZW50IGZsaWdodCAqLworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+ZmxpZ2h0ID09IE5VTEwgKQorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+ZmxpZ2h0ID0gbXNnOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtICpjdXIgPSBzc2wtPmhhbmRzaGFrZS0+ZmxpZ2h0OworICAgICAgICB3aGlsZSggY3VyLT5uZXh0ICE9IE5VTEwgKQorICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OworICAgICAgICBjdXItPm5leHQgPSBtc2c7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBjdXJyZW50IGZsaWdodCBvZiBoYW5kc2hha2UgbWVzc2FnZXMKKyAqLworc3RhdGljIHZvaWQgc3NsX2ZsaWdodF9mcmVlKCBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbSAqZmxpZ2h0ICkKK3sKKyAgICBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbSAqY3VyID0gZmxpZ2h0OworICAgIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtICpuZXh0OworCisgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG5leHQgPSBjdXItPm5leHQ7CisKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjdXItPnAgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjdXIgKTsKKworICAgICAgICBjdXIgPSBuZXh0OworICAgIH0KK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWSkKK3N0YXRpYyB2b2lkIHNzbF9kdGxzX3JlcGxheV9yZXNldCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisjZW5kaWYKKworLyoKKyAqIFN3YXAgdHJhbnNmb3JtX291dCBhbmQgb3V0X2N0ciB3aXRoIHRoZSBhbHRlcm5hdGl2ZSBvbmVzCisgKi8KK3N0YXRpYyB2b2lkIHNzbF9zd2FwX2Vwb2NocyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBtYmVkdGxzX3NzbF90cmFuc2Zvcm0gKnRtcF90cmFuc2Zvcm07CisgICAgdW5zaWduZWQgY2hhciB0bXBfb3V0X2N0cls4XTsKKworICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9vdXQgPT0gc3NsLT5oYW5kc2hha2UtPmFsdF90cmFuc2Zvcm1fb3V0ICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2tpcCBzd2FwIGVwb2NocyIgKSApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzd2FwIGVwb2NocyIgKSApOworCisgICAgLyogU3dhcCB0cmFuc2Zvcm1zICovCisgICAgdG1wX3RyYW5zZm9ybSAgICAgICAgICAgICAgICAgICAgID0gc3NsLT50cmFuc2Zvcm1fb3V0OworICAgIHNzbC0+dHJhbnNmb3JtX291dCAgICAgICAgICAgICAgICA9IHNzbC0+aGFuZHNoYWtlLT5hbHRfdHJhbnNmb3JtX291dDsKKyAgICBzc2wtPmhhbmRzaGFrZS0+YWx0X3RyYW5zZm9ybV9vdXQgPSB0bXBfdHJhbnNmb3JtOworCisgICAgLyogU3dhcCBlcG9jaCArIHNlcXVlbmNlX251bWJlciAqLworICAgIG1lbWNweSggdG1wX291dF9jdHIsICAgICAgICAgICAgICAgICBzc2wtPm91dF9jdHIsICAgICAgICAgICAgICAgIDggKTsKKyAgICBtZW1jcHkoIHNzbC0+b3V0X2N0ciwgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPmFsdF9vdXRfY3RyLCA4ICk7CisgICAgbWVtY3B5KCBzc2wtPmhhbmRzaGFrZS0+YWx0X291dF9jdHIsIHRtcF9vdXRfY3RyLCAgICAgICAgICAgICAgICAgOCApOworCisgICAgLyogQWRqdXN0IHRvIHRoZSBuZXdseSBhY3RpdmF0ZWQgdHJhbnNmb3JtICovCisgICAgaWYoIHNzbC0+dHJhbnNmb3JtX291dCAhPSBOVUxMICYmCisgICAgICAgIHNzbC0+bWlub3JfdmVyID49IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiApCisgICAgeworICAgICAgICBzc2wtPm91dF9tc2cgPSBzc2wtPm91dF9pdiArIHNzbC0+dHJhbnNmb3JtX291dC0+aXZsZW4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+Zml4ZWRfaXZsZW47CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgc3NsLT5vdXRfbXNnID0gc3NsLT5vdXRfaXY7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCkKKyAgICBpZiggbWJlZHRsc19zc2xfaHdfcmVjb3JkX2FjdGl2YXRlICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfaHdfcmVjb3JkX2FjdGl2YXRlKCBzc2wsIE1CRURUTFNfU1NMX0NIQU5ORUxfT1VUQk9VTkQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRCApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCit9CisKKy8qCisgKiBSZXRyYW5zbWl0IHRoZSBjdXJyZW50IGZsaWdodCBvZiBtZXNzYWdlcy4KKyAqCisgKiBOZWVkIHRvIHJlbWVtYmVyIHRoZSBjdXJyZW50IG1lc3NhZ2UgaW4gY2FzZSBmbHVzaF9vdXRwdXQgcmV0dXJucworICogV0FOVF9XUklURSwgY2F1c2luZyB1cyB0byBleGl0IHRoaXMgZnVuY3Rpb24gYW5kIGNvbWUgYmFjayBsYXRlci4KKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdW50aWwgc3RhdGUgaXMgbm8gbG9uZ2VyIFNFTkRJTkcuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9yZXNlbmQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBtYmVkdGxzX3NzbF9yZXNlbmQiICkgKTsKKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSAhPSBNQkVEVExTX1NTTF9SRVRSQU5TX1NFTkRJTkcgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJpbml0aWFsaXNlIHJlc2VuZGluZyIgKSApOworCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5jdXJfbXNnID0gc3NsLT5oYW5kc2hha2UtPmZsaWdodDsKKyAgICAgICAgc3NsX3N3YXBfZXBvY2hzKCBzc2wgKTsKKworICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSA9IE1CRURUTFNfU1NMX1JFVFJBTlNfU0VORElORzsKKyAgICB9CisKKyAgICB3aGlsZSggc3NsLT5oYW5kc2hha2UtPmN1cl9tc2cgIT0gTlVMTCApCisgICAgeworICAgICAgICBpbnQgcmV0OworICAgICAgICBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbSAqY3VyID0gc3NsLT5oYW5kc2hha2UtPmN1cl9tc2c7CisKKyAgICAgICAgLyogU3dhcCBlcG9jaHMgYmVmb3JlIHNlbmRpbmcgRmluaXNoZWQ6IHdlIGNhbid0IGRvIGl0IGFmdGVyCisgICAgICAgICAqIHNlbmRpbmcgQ2hhbmdlQ2lwaGVyU3BlYywgaW4gY2FzZSB3cml0ZSByZXR1cm5zIFdBTlRfUkVBRC4KKyAgICAgICAgICogTXVzdCBiZSBkb25lIGJlZm9yZSBjb3B5aW5nLCBtYXkgY2hhbmdlIG91dF9tc2cgcG9pbnRlciAqLworICAgICAgICBpZiggY3VyLT50eXBlID09IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgJiYKKyAgICAgICAgICAgIGN1ci0+cFswXSA9PSBNQkVEVExTX1NTTF9IU19GSU5JU0hFRCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzbF9zd2FwX2Vwb2Nocyggc3NsICk7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoIHNzbC0+b3V0X21zZywgY3VyLT5wLCBjdXItPmxlbiApOworICAgICAgICBzc2wtPm91dF9tc2dsZW4gPSBjdXItPmxlbjsKKyAgICAgICAgc3NsLT5vdXRfbXNndHlwZSA9IGN1ci0+dHlwZTsKKworICAgICAgICBzc2wtPmhhbmRzaGFrZS0+Y3VyX21zZyA9IGN1ci0+bmV4dDsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJyZXNlbnQgaGFuZHNoYWtlIG1lc3NhZ2UgaGVhZGVyIiwgc3NsLT5vdXRfbXNnLCAxMiApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIHNzbC0+c3RhdGUgPT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgKQorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSA9IE1CRURUTFNfU1NMX1JFVFJBTlNfRklOSVNIRUQ7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfc3RhdGUgPSBNQkVEVExTX1NTTF9SRVRSQU5TX1dBSVRJTkc7CisgICAgICAgIHNzbF9zZXRfdGltZXIoIHNzbCwgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfdGltZW91dCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gbWJlZHRsc19zc2xfcmVzZW5kIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFRvIGJlIGNhbGxlZCB3aGVuIHRoZSBsYXN0IG1lc3NhZ2Ugb2YgYW4gaW5jb21pbmcgZmxpZ2h0IGlzIHJlY2VpdmVkLgorICovCit2b2lkIG1iZWR0bHNfc3NsX3JlY3ZfZmxpZ2h0X2NvbXBsZXRlZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICAvKiBXZSB3b24ndCBuZWVkIHRvIHJlc2VuZCB0aGF0IG9uZSBhbnkgbW9yZSAqLworICAgIHNzbF9mbGlnaHRfZnJlZSggc3NsLT5oYW5kc2hha2UtPmZsaWdodCApOworICAgIHNzbC0+aGFuZHNoYWtlLT5mbGlnaHQgPSBOVUxMOworICAgIHNzbC0+aGFuZHNoYWtlLT5jdXJfbXNnID0gTlVMTDsKKworICAgIC8qIFRoZSBuZXh0IGluY29taW5nIGZsaWdodCB3aWxsIHN0YXJ0IHdpdGggdGhpcyBtc2dfc2VxICovCisgICAgc3NsLT5oYW5kc2hha2UtPmluX2ZsaWdodF9zdGFydF9zZXEgPSBzc2wtPmhhbmRzaGFrZS0+aW5fbXNnX3NlcTsKKworICAgIC8qIENhbmNlbCB0aW1lciAqLworICAgIHNzbF9zZXRfdGltZXIoIHNzbCwgMCApOworCisgICAgaWYoIHNzbC0+aW5fbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICYmCisgICAgICAgIHNzbC0+aW5fbXNnWzBdID09IE1CRURUTFNfU1NMX0hTX0ZJTklTSEVEICkKKyAgICB7CisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3N0YXRlID0gTUJFRFRMU19TU0xfUkVUUkFOU19GSU5JU0hFRDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSA9IE1CRURUTFNfU1NMX1JFVFJBTlNfUFJFUEFSSU5HOworfQorCisvKgorICogVG8gYmUgY2FsbGVkIHdoZW4gdGhlIGxhc3QgbWVzc2FnZSBvZiBhbiBvdXRnb2luZyBmbGlnaHQgaXMgc2VuZC4KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9zZW5kX2ZsaWdodF9jb21wbGV0ZWQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgc3NsX3Jlc2V0X3JldHJhbnNtaXRfdGltZW91dCggc3NsICk7CisgICAgc3NsX3NldF90aW1lciggc3NsLCBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF90aW1lb3V0ICk7CisKKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlID09IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgJiYKKyAgICAgICAgc3NsLT5pbl9tc2dbMF0gPT0gTUJFRFRMU19TU0xfSFNfRklOSVNIRUQgKQorICAgIHsKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfc3RhdGUgPSBNQkVEVExTX1NTTF9SRVRSQU5TX0ZJTklTSEVEOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3N0YXRlID0gTUJFRFRMU19TU0xfUkVUUkFOU19XQUlUSU5HOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworLyoKKyAqIFJlY29yZCBsYXllciBmdW5jdGlvbnMKKyAqLworCisvKgorICogV3JpdGUgY3VycmVudCByZWNvcmQuCisgKiBVc2VzIHNzbC0+b3V0X21zZ3R5cGUsIHNzbC0+b3V0X21zZ2xlbiBhbmQgYnl0ZXMgYXQgc3NsLT5vdXRfbXNnLgorICovCitpbnQgbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQsIGRvbmUgPSAwLCBvdXRfbXNnX3R5cGU7CisgICAgc2l6ZV90IGxlbiA9IHNzbC0+b3V0X21zZ2xlbjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgcmVjb3JkIiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICBzc2wtPmhhbmRzaGFrZSAhPSBOVUxMICYmCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3N0YXRlID09IE1CRURUTFNfU1NMX1JFVFJBTlNfU0VORElORyApCisgICAgeworICAgICAgICA7IC8qIFNraXAgc3BlY2lhbCBoYW5kc2hha2UgdHJlYXRtZW50IHdoZW4gcmVzZW5kaW5nICovCisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIGlmKCBzc2wtPm91dF9tc2d0eXBlID09IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgb3V0X21zZ190eXBlID0gc3NsLT5vdXRfbXNnWzBdOworCisgICAgICAgIGlmKCBvdXRfbXNnX3R5cGUgIT0gTUJFRFRMU19TU0xfSFNfSEVMTE9fUkVRVUVTVCAmJgorICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorCisgICAgICAgIHNzbC0+b3V0X21zZ1sxXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBsZW4gLSA0ICkgPj4gMTYgKTsKKyAgICAgICAgc3NsLT5vdXRfbXNnWzJdID0gKHVuc2lnbmVkIGNoYXIpKCAoIGxlbiAtIDQgKSA+PiAgOCApOworICAgICAgICBzc2wtPm91dF9tc2dbM10gPSAodW5zaWduZWQgY2hhcikoICggbGVuIC0gNCApICAgICAgICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRFRMUyBoYXMgYWRkaXRpb25hbCBmaWVsZHMgaW4gdGhlIEhhbmRzaGFrZSBsYXllciwKKyAgICAgICAgICogYmV0d2VlbiB0aGUgbGVuZ3RoIGZpZWxkIGFuZCB0aGUgYWN0dWFsIHBheWxvYWQ6CisgICAgICAgICAqICAgICAgdWludDE2IG1lc3NhZ2Vfc2VxOworICAgICAgICAgKiAgICAgIHVpbnQyNCBmcmFnbWVudF9vZmZzZXQ7CisgICAgICAgICAqICAgICAgdWludDI0IGZyYWdtZW50X2xlbmd0aDsKKyAgICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgICAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogTWFrZSByb29tIGZvciB0aGUgYWRkaXRpb25hbCBEVExTIGZpZWxkcyAqLworICAgICAgICAgICAgbWVtbW92ZSggc3NsLT5vdXRfbXNnICsgMTIsIHNzbC0+b3V0X21zZyArIDQsIGxlbiAtIDQgKTsKKyAgICAgICAgICAgIHNzbC0+b3V0X21zZ2xlbiArPSA4OworICAgICAgICAgICAgbGVuICs9IDg7CisKKyAgICAgICAgICAgIC8qIFdyaXRlIG1lc3NhZ2Vfc2VxIGFuZCB1cGRhdGUgaXQsIGV4Y2VwdCBmb3IgSGVsbG9SZXF1ZXN0ICovCisgICAgICAgICAgICBpZiggb3V0X21zZ190eXBlICE9IE1CRURUTFNfU1NMX0hTX0hFTExPX1JFUVVFU1QgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZ1s0XSA9ICggc3NsLT5oYW5kc2hha2UtPm91dF9tc2dfc2VxID4+IDggKSAmIDB4RkY7CisgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnWzVdID0gKCBzc2wtPmhhbmRzaGFrZS0+b3V0X21zZ19zZXEgICAgICApICYgMHhGRjsKKyAgICAgICAgICAgICAgICArKyggc3NsLT5oYW5kc2hha2UtPm91dF9tc2dfc2VxICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnWzRdID0gMDsKKyAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2dbNV0gPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBXZSBkb24ndCBmcmFnbWVudCwgc28gZnJhZ19vZmZzZXQgPSAwIGFuZCBmcmFnX2xlbiA9IGxlbiAqLworICAgICAgICAgICAgbWVtc2V0KCBzc2wtPm91dF9tc2cgKyA2LCAweDAwLCAzICk7CisgICAgICAgICAgICBtZW1jcHkoIHNzbC0+b3V0X21zZyArIDksIHNzbC0+b3V0X21zZyArIDEsIDMgKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworICAgICAgICBpZiggb3V0X21zZ190eXBlICE9IE1CRURUTFNfU1NMX0hTX0hFTExPX1JFUVVFU1QgKQorICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnVwZGF0ZV9jaGVja3N1bSggc3NsLCBzc2wtPm91dF9tc2csIGxlbiApOworICAgIH0KKworICAgIC8qIFNhdmUgaGFuZHNoYWtlIGFuZCBDQ1MgbWVzc2FnZXMgZm9yIHJlc2VuZGluZyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICYmCisgICAgICAgIHNzbC0+aGFuZHNoYWtlICE9IE5VTEwgJiYKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfc3RhdGUgIT0gTUJFRFRMU19TU0xfUkVUUkFOU19TRU5ESU5HICYmCisgICAgICAgICggc3NsLT5vdXRfbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfQ0hBTkdFX0NJUEhFUl9TUEVDIHx8CisgICAgICAgICAgc3NsLT5vdXRfbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICkgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gc3NsX2ZsaWdodF9hcHBlbmQoIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF9mbGlnaHRfYXBwZW5kIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9vdXQgIT0gTlVMTCAmJgorICAgICAgICBzc2wtPnNlc3Npb25fb3V0LT5jb21wcmVzc2lvbiA9PSBNQkVEVExTX1NTTF9DT01QUkVTU19ERUZMQVRFICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHNzbF9jb21wcmVzc19idWYoIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF9jb21wcmVzc19idWYiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBsZW4gPSBzc2wtPm91dF9tc2dsZW47CisgICAgfQorI2VuZGlmIC8qTUJFRFRMU19aTElCX1NVUFBPUlQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMKQorICAgIGlmKCBtYmVkdGxzX3NzbF9od19yZWNvcmRfd3JpdGUgIT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImdvaW5nIGZvciBtYmVkdGxzX3NzbF9od19yZWNvcmRfd3JpdGUoKSIgKSApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2h3X3JlY29yZF93cml0ZSggc3NsICk7CisgICAgICAgIGlmKCByZXQgIT0gMCAmJiByZXQgIT0gTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBTExUSFJPVUdIICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfaHdfcmVjb3JkX3dyaXRlIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCByZXQgPT0gMCApCisgICAgICAgICAgICBkb25lID0gMTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMICovCisgICAgaWYoICFkb25lICkKKyAgICB7CisgICAgICAgIHNzbC0+b3V0X2hkclswXSA9ICh1bnNpZ25lZCBjaGFyKSBzc2wtPm91dF9tc2d0eXBlOworICAgICAgICBtYmVkdGxzX3NzbF93cml0ZV92ZXJzaW9uKCBzc2wtPm1ham9yX3Zlciwgc3NsLT5taW5vcl92ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPnRyYW5zcG9ydCwgc3NsLT5vdXRfaGRyICsgMSApOworCisgICAgICAgIHNzbC0+b3V0X2xlblswXSA9ICh1bnNpZ25lZCBjaGFyKSggbGVuID4+IDggKTsKKyAgICAgICAgc3NsLT5vdXRfbGVuWzFdID0gKHVuc2lnbmVkIGNoYXIpKCBsZW4gICAgICApOworCisgICAgICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9vdXQgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbF9lbmNyeXB0X2J1Ziggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJzc2xfZW5jcnlwdF9idWYiLCByZXQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZW4gPSBzc2wtPm91dF9tc2dsZW47CisgICAgICAgICAgICBzc2wtPm91dF9sZW5bMF0gPSAodW5zaWduZWQgY2hhcikoIGxlbiA+PiA4ICk7CisgICAgICAgICAgICBzc2wtPm91dF9sZW5bMV0gPSAodW5zaWduZWQgY2hhcikoIGxlbiAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICBzc2wtPm91dF9sZWZ0ID0gbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICkgKyBzc2wtPm91dF9tc2dsZW47CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJvdXRwdXQgcmVjb3JkOiBtc2d0eXBlID0gJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiA9IFslZDolZF0sIG1zZ2xlbiA9ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfaGRyWzBdLCBzc2wtPm91dF9oZHJbMV0sIHNzbC0+b3V0X2hkclsyXSwKKyAgICAgICAgICAgICAgICAgICAgICggc3NsLT5vdXRfbGVuWzBdIDw8IDggKSB8IHNzbC0+b3V0X2xlblsxXSApICk7CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAib3V0cHV0IHJlY29yZCBzZW50IHRvIG5ldHdvcmsiLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9oZHIsIG1iZWR0bHNfc3NsX2hkcl9sZW4oIHNzbCApICsgc3NsLT5vdXRfbXNnbGVuICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfZmx1c2hfb3V0cHV0KCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfZmx1c2hfb3V0cHV0IiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSByZWNvcmQiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorLyoKKyAqIE1hcmsgYml0cyBpbiBiaXRtYXNrICh1c2VkIGZvciBEVExTIEhTIHJlYXNzZW1ibHkpCisgKi8KK3N0YXRpYyB2b2lkIHNzbF9iaXRtYXNrX3NldCggdW5zaWduZWQgY2hhciAqbWFzaywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbiApCit7CisgICAgdW5zaWduZWQgaW50IHN0YXJ0X2JpdHMsIGVuZF9iaXRzOworCisgICAgc3RhcnRfYml0cyA9IDggLSAoIG9mZnNldCAlIDggKTsKKyAgICBpZiggc3RhcnRfYml0cyAhPSA4ICkKKyAgICB7CisgICAgICAgIHNpemVfdCBmaXJzdF9ieXRlX2lkeCA9IG9mZnNldCAvIDg7CisKKyAgICAgICAgLyogU3BlY2lhbCBjYXNlICovCisgICAgICAgIGlmKCBsZW4gPD0gc3RhcnRfYml0cyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciggOyBsZW4gIT0gMDsgbGVuLS0gKQorICAgICAgICAgICAgICAgIG1hc2tbZmlyc3RfYnl0ZV9pZHhdIHw9IDEgPDwgKCBzdGFydF9iaXRzIC0gbGVuICk7CisKKyAgICAgICAgICAgIC8qIEF2b2lkIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBvZmZzZXQgb3IgbGVuIGJlY29taW5nIGludmFsaWQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSBzdGFydF9iaXRzOyAvKiBOb3cgb2Zmc2V0ICUgOCA9PSAwICovCisgICAgICAgIGxlbiAtPSBzdGFydF9iaXRzOworCisgICAgICAgIGZvciggOyBzdGFydF9iaXRzICE9IDA7IHN0YXJ0X2JpdHMtLSApCisgICAgICAgICAgICBtYXNrW2ZpcnN0X2J5dGVfaWR4XSB8PSAxIDw8ICggc3RhcnRfYml0cyAtIDEgKTsKKyAgICB9CisKKyAgICBlbmRfYml0cyA9IGxlbiAlIDg7CisgICAgaWYoIGVuZF9iaXRzICE9IDAgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGxhc3RfYnl0ZV9pZHggPSAoIG9mZnNldCArIGxlbiApIC8gODsKKworICAgICAgICBsZW4gLT0gZW5kX2JpdHM7IC8qIE5vdyBsZW4gJSA4ID09IDAgKi8KKworICAgICAgICBmb3IoIDsgZW5kX2JpdHMgIT0gMDsgZW5kX2JpdHMtLSApCisgICAgICAgICAgICBtYXNrW2xhc3RfYnl0ZV9pZHhdIHw9IDEgPDwgKCA4IC0gZW5kX2JpdHMgKTsKKyAgICB9CisKKyAgICBtZW1zZXQoIG1hc2sgKyBvZmZzZXQgLyA4LCAweEZGLCBsZW4gLyA4ICk7Cit9CisKKy8qCisgKiBDaGVjayB0aGF0IGJpdG1hc2sgaXMgZnVsbAorICovCitzdGF0aWMgaW50IHNzbF9iaXRtYXNrX2NoZWNrKCB1bnNpZ25lZCBjaGFyICptYXNrLCBzaXplX3QgbGVuICkKK3sKKyAgICBzaXplX3QgaTsKKworICAgIGZvciggaSA9IDA7IGkgPCBsZW4gLyA4OyBpKysgKQorICAgICAgICBpZiggbWFza1tpXSAhPSAweEZGICkKKyAgICAgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBsZW4gJSA4OyBpKysgKQorICAgICAgICBpZiggKCBtYXNrW2xlbiAvIDhdICYgKCAxIDw8ICggNyAtIGkgKSApICkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFJlYXNzZW1ibGUgZnJhZ21lbnRlZCBEVExTIGhhbmRzaGFrZSBtZXNzYWdlcy4KKyAqCisgKiBVc2UgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciByZWFzc2VtYmx5LCBkaXZpZGVkIGluIHR3byBwYXJ0czoKKyAqIC0gdGhlIGZpcnN0IGhvbGRzIHRoZSByZWFzc2VtYmxlZCBtZXNzYWdlIChpbmNsdWRpbmcgaGFuZHNoYWtlIGhlYWRlciksCisgKiAtIHRoZSBzZWNvbmQgaG9sZHMgYSBiaXRtYXNrIGluZGljYXRpbmcgd2hpY2ggcGFydHMgb2YgdGhlIG1lc3NhZ2UKKyAqICAgKGV4Y2x1ZGluZyBoZWFkZXJzKSBoYXZlIGJlZW4gcmVjZWl2ZWQgc28gZmFyLgorICovCitzdGF0aWMgaW50IHNzbF9yZWFzc2VtYmxlX2R0bHNfaGFuZHNoYWtlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIHVuc2lnbmVkIGNoYXIgKm1zZywgKmJpdG1hc2s7CisgICAgc2l6ZV90IGZyYWdfbGVuLCBmcmFnX29mZjsKKyAgICBzaXplX3QgbXNnX2xlbiA9IHNzbC0+aW5faHNsZW4gLSAxMjsgLyogV2l0aG91dCBoZWFkZXJzICovCisKKyAgICBpZiggc3NsLT5oYW5kc2hha2UgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm5vdCBzdXBwb3J0ZWQgb3V0c2lkZSBoYW5kc2hha2UgKGZvciBub3cpIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZvciBmaXJzdCBmcmFnbWVudCwgY2hlY2sgc2l6ZSBhbmQgYWxsb2NhdGUgYnVmZmVyCisgICAgICovCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5oc19tc2cgPT0gTlVMTCApCisgICAgeworICAgICAgICBzaXplX3QgYWxsb2NfbGVuOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiaW5pdGlhbGl6ZSByZWFzc2VtYmx5LCB0b3RhbCBsZW5ndGggPSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX2xlbiApICk7CisKKyAgICAgICAgaWYoIHNzbC0+aW5faHNsZW4gPiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImhhbmRzaGFrZSBtZXNzYWdlIHRvbyBsYXJnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworICAgICAgICB9CisKKyAgICAgICAgLyogVGhlIGJpdG1hc2sgbmVlZHMgb25lIGJpdCBwZXIgYnl0ZSBvZiBtZXNzYWdlIGV4Y2x1ZGluZyBoZWFkZXIgKi8KKyAgICAgICAgYWxsb2NfbGVuID0gMTIgKyBtc2dfbGVuICsgbXNnX2xlbiAvIDggKyAoIG1zZ19sZW4gJSA4ICE9IDAgKTsKKworICAgICAgICBzc2wtPmhhbmRzaGFrZS0+aHNfbXNnID0gbWJlZHRsc19jYWxsb2MoIDEsIGFsbG9jX2xlbiApOworICAgICAgICBpZiggc3NsLT5oYW5kc2hha2UtPmhzX21zZyA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJhbGxvYyBmYWlsZWQgKCVkIGJ5dGVzKSIsIGFsbG9jX2xlbiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFByZXBhcmUgZmluYWwgaGVhZGVyOiBjb3B5IG1zZ190eXBlLCBsZW5ndGggYW5kIG1lc3NhZ2Vfc2VxLAorICAgICAgICAgKiB0aGVuIGFkZCBzdGFuZGFyZGlzZWQgZnJhZ21lbnRfb2Zmc2V0IGFuZCBmcmFnbWVudF9sZW5ndGggKi8KKyAgICAgICAgbWVtY3B5KCBzc2wtPmhhbmRzaGFrZS0+aHNfbXNnLCBzc2wtPmluX21zZywgNiApOworICAgICAgICBtZW1zZXQoIHNzbC0+aGFuZHNoYWtlLT5oc19tc2cgKyA2LCAwLCAzICk7CisgICAgICAgIG1lbWNweSggc3NsLT5oYW5kc2hha2UtPmhzX21zZyArIDksCisgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPmhzX21zZyArIDEsIDMgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogTWFrZSBzdXJlIG1zZ190eXBlIGFuZCBsZW5ndGggYXJlIGNvbnNpc3RlbnQgKi8KKyAgICAgICAgaWYoIG1lbWNtcCggc3NsLT5oYW5kc2hha2UtPmhzX21zZywgc3NsLT5pbl9tc2csIDQgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJmcmFnbWVudCBoZWFkZXIgbWlzbWF0Y2giICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtc2cgPSBzc2wtPmhhbmRzaGFrZS0+aHNfbXNnICsgMTI7CisgICAgYml0bWFzayA9IG1zZyArIG1zZ19sZW47CisKKyAgICAvKgorICAgICAqIENoZWNrIGFuZCBjb3B5IGN1cnJlbnQgZnJhZ21lbnQKKyAgICAgKi8KKyAgICBmcmFnX29mZiA9ICggc3NsLT5pbl9tc2dbNl0gIDw8IDE2ICkgfAorICAgICAgICAgICAgICAgKCBzc2wtPmluX21zZ1s3XSAgPDwgOCAgKSB8CisgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnWzhdOworICAgIGZyYWdfbGVuID0gKCBzc2wtPmluX21zZ1s5XSAgPDwgMTYgKSB8CisgICAgICAgICAgICAgICAoIHNzbC0+aW5fbXNnWzEwXSA8PCA4ICApIHwKKyAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dbMTFdOworCisgICAgaWYoIGZyYWdfb2ZmICsgZnJhZ19sZW4gPiBtc2dfbGVuICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiaW52YWxpZCBmcmFnbWVudCBvZmZzZXQvbGVuOiAlZCArICVkID4gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnX29mZiwgZnJhZ19sZW4sIG1zZ19sZW4gKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRCApOworICAgIH0KKworICAgIGlmKCBmcmFnX2xlbiArIDEyID4gc3NsLT5pbl9tc2dsZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJpbnZhbGlkIGZyYWdtZW50IGxlbmd0aDogJWQgKyAxMiA+ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ19sZW4sIHNzbC0+aW5fbXNnbGVuICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImFkZGluZyBmcmFnbWVudCwgb2Zmc2V0ID0gJWQsIGxlbmd0aCA9ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdfb2ZmLCBmcmFnX2xlbiApICk7CisKKyAgICBtZW1jcHkoIG1zZyArIGZyYWdfb2ZmLCBzc2wtPmluX21zZyArIDEyLCBmcmFnX2xlbiApOworICAgIHNzbF9iaXRtYXNrX3NldCggYml0bWFzaywgZnJhZ19vZmYsIGZyYWdfbGVuICk7CisKKyAgICAvKgorICAgICAqIERvIHdlIGhhdmUgdGhlIGNvbXBsZXRlIG1lc3NhZ2UgYnkgbm93PworICAgICAqIElmIHllcywgZmluYWxpemUgaXQsIGVsc2UgYXNrIHRvIHJlYWQgdGhlIG5leHQgcmVjb3JkLgorICAgICAqLworICAgIGlmKCBzc2xfYml0bWFza19jaGVjayggYml0bWFzaywgbXNnX2xlbiApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJtZXNzYWdlIGlzIG5vdCBjb21wbGV0ZSB5ZXQiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJoYW5kc2hha2UgbWVzc2FnZSBjb21wbGV0ZWQiICkgKTsKKworICAgIGlmKCBmcmFnX2xlbiArIDEyIDwgc3NsLT5pbl9tc2dsZW4gKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogV2UnZ290IG1vcmUgaGFuZHNoYWtlIG1lc3NhZ2VzIGluIHRoZSBzYW1lIHJlY29yZC4KKyAgICAgICAgICogVGhpcyBjYXNlIGlzIG5vdCBoYW5kbGVkIG5vdyBiZWNhdXNlIG5vIGtub3cgaW1wbGVtZW50YXRpb24gZG9lcworICAgICAgICAgKiB0aGF0IGFuZCBpdCdzIGhhcmQgdG8gdGVzdCwgc28gd2UgcHJlZmVyIHRvIGZhaWwgY2xlYW5seSBmb3Igbm93LgorICAgICAgICAgKi8KKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJsYXN0IGZyYWdtZW50IG5vdCBhbG9uZSBpbiBpdHMgcmVjb3JkIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9sZWZ0ID4gc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogV2UndmUgZ290IG1vcmUgZGF0YSBpbiB0aGUgYnVmZmVyIGFmdGVyIHRoZSBjdXJyZW50IHJlY29yZCwKKyAgICAgICAgICogdGhhdCB3ZSBkb24ndCB3YW50IHRvIG92ZXJ3cml0ZS4gTW92ZSBpdCBiZWZvcmUgd3JpdGluZyB0aGUKKyAgICAgICAgICogcmVhc3NlbWJsZWQgbWVzc2FnZSwgYW5kIGFkanVzdCBpbl9sZWZ0IGFuZCBuZXh0X3JlY29yZF9vZmZzZXQuCisgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICpjdXJfcmVtYWluID0gc3NsLT5pbl9oZHIgKyBzc2wtPm5leHRfcmVjb3JkX29mZnNldDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqbmV3X3JlbWFpbiA9IHNzbC0+aW5fbXNnICsgc3NsLT5pbl9oc2xlbjsKKyAgICAgICAgc2l6ZV90IHJlbWFpbl9sZW4gPSBzc2wtPmluX2xlZnQgLSBzc2wtPm5leHRfcmVjb3JkX29mZnNldDsKKworICAgICAgICAvKiBGaXJzdCBjb21wdXRlIGFuZCBjaGVjayBuZXcgbGVuZ3RocyAqLworICAgICAgICBzc2wtPm5leHRfcmVjb3JkX29mZnNldCA9IG5ld19yZW1haW4gLSBzc2wtPmluX2hkcjsKKyAgICAgICAgc3NsLT5pbl9sZWZ0ID0gc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQgKyByZW1haW5fbGVuOworCisgICAgICAgIGlmKCBzc2wtPmluX2xlZnQgPiBNQkVEVExTX1NTTF9CVUZGRVJfTEVOIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpKCBzc2wtPmluX2hkciAtIHNzbC0+aW5fYnVmICkgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlYXNzZW1ibGVkIG1lc3NhZ2UgdG9vIGxhcmdlIGZvciBidWZmZXIiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JVRkZFUl9UT09fU01BTEwgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbW1vdmUoIG5ld19yZW1haW4sIGN1cl9yZW1haW4sIHJlbWFpbl9sZW4gKTsKKyAgICB9CisKKyAgICBtZW1jcHkoIHNzbC0+aW5fbXNnLCBzc2wtPmhhbmRzaGFrZS0+aHNfbXNnLCBzc2wtPmluX2hzbGVuICk7CisKKyAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+aGFuZHNoYWtlLT5oc19tc2cgKTsKKyAgICBzc2wtPmhhbmRzaGFrZS0+aHNfbXNnID0gTlVMTDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInJlYXNzZW1ibGVkIGhhbmRzaGFrZSBtZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZywgc3NsLT5pbl9oc2xlbiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCitpbnQgbWJlZHRsc19zc2xfcHJlcGFyZV9oYW5kc2hha2VfcmVjb3JkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGlmKCBzc2wtPmluX21zZ2xlbiA8IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiaGFuZHNoYWtlIG1lc3NhZ2UgdG9vIHNob3J0OiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dsZW4gKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRCApOworICAgIH0KKworICAgIHNzbC0+aW5faHNsZW4gPSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSArICgKKyAgICAgICAgICAgICAgICAgICAgKCBzc2wtPmluX21zZ1sxXSA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgICAgKCBzc2wtPmluX21zZ1syXSA8PCA4ICApIHwKKyAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZ1szXSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJoYW5kc2hha2UgbWVzc2FnZTogbXNnbGVuID0iCisgICAgICAgICAgICAgICAgICAgICAgICAiICVkLCB0eXBlID0gJWQsIGhzbGVuID0gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dsZW4sIHNzbC0+aW5fbXNnWzBdLCBzc2wtPmluX2hzbGVuICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIHVuc2lnbmVkIGludCByZWN2X21zZ19zZXEgPSAoIHNzbC0+aW5fbXNnWzRdIDw8IDggKSB8IHNzbC0+aW5fbXNnWzVdOworCisgICAgICAgIC8qIHNzbC0+aGFuZHNoYWtlIGlzIE5VTEwgd2hlbiByZWNlaXZpbmcgQ2xpZW50SGVsbG8gZm9yIHJlbmVnbyAqLworICAgICAgICBpZiggc3NsLT5oYW5kc2hha2UgIT0gTlVMTCAmJgorICAgICAgICAgICAgcmVjdl9tc2dfc2VxICE9IHNzbC0+aGFuZHNoYWtlLT5pbl9tc2dfc2VxICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogUmV0cmFuc21pdCBvbmx5IG9uIGxhc3QgbWVzc2FnZSBmcm9tIHByZXZpb3VzIGZsaWdodCwgdG8gYXZvaWQKKyAgICAgICAgICAgICAqIHRvbyBtYW55IHJldHJhbnNtaXNzaW9ucy4KKyAgICAgICAgICAgICAqIEJlc2lkZXMsIE5vIHNhbmUgc2VydmVyIGV2ZXIgcmV0cmFuc21pdHMgSGVsbG9WZXJpZnlSZXF1ZXN0ICovCisgICAgICAgICAgICBpZiggcmVjdl9tc2dfc2VxID09IHNzbC0+aGFuZHNoYWtlLT5pbl9mbGlnaHRfc3RhcnRfc2VxIC0gMSAmJgorICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnWzBdICE9IE1CRURUTFNfU1NMX0hTX0hFTExPX1ZFUklGWV9SRVFVRVNUICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggInJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBsYXN0IGZsaWdodCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lc3NhZ2Vfc2VxID0gJWQsIHN0YXJ0X29mX2ZsaWdodCA9ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3ZfbXNnX3NlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5pbl9mbGlnaHRfc3RhcnRfc2VxICkgKTsKKworICAgICAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3Jlc2VuZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3Jlc2VuZCIsIHJldCApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImRyb3BwaW5nIG91dC1vZi1zZXF1ZW5jZSBtZXNzYWdlOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVzc2FnZV9zZXEgPSAlZCwgZXhwZWN0ZWQgPSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN2X21zZ19zZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+aW5fbXNnX3NlcSApICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApOworICAgICAgICB9CisgICAgICAgIC8qIFdhaXQgdW50aWwgbWVzc2FnZSBjb21wbGV0aW9uIHRvIGluY3JlbWVudCBpbl9tc2dfc2VxICovCisKKyAgICAgICAgLyogUmVhc3NlbWJsZSBpZiBjdXJyZW50IG1lc3NhZ2UgaXMgZnJhZ21lbnRlZCBvciByZWFzc2VtYmx5IGlzCisgICAgICAgICAqIGFscmVhZHkgaW4gcHJvZ3Jlc3MgKi8KKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnbGVuIDwgc3NsLT5pbl9oc2xlbiB8fAorICAgICAgICAgICAgbWVtY21wKCBzc2wtPmluX21zZyArIDYsICJcMFwwXDAiLCAgICAgICAgMyApICE9IDAgfHwKKyAgICAgICAgICAgIG1lbWNtcCggc3NsLT5pbl9tc2cgKyA5LCBzc2wtPmluX21zZyArIDEsIDMgKSAhPSAwIHx8CisgICAgICAgICAgICAoIHNzbC0+aGFuZHNoYWtlICE9IE5VTEwgJiYgc3NsLT5oYW5kc2hha2UtPmhzX21zZyAhPSBOVUxMICkgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImZvdW5kIGZyYWdtZW50ZWQgRFRMUyBoYW5kc2hha2UgbWVzc2FnZSIgKSApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfcmVhc3NlbWJsZV9kdGxzX2hhbmRzaGFrZSggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJzc2xfcmVhc3NlbWJsZV9kdGxzX2hhbmRzaGFrZSIsIHJldCApOworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKyAgICAvKiBXaXRoIFRMUyB3ZSBkb24ndCBoYW5kbGUgZnJhZ21lbnRhdGlvbiAoZm9yIG5vdykgKi8KKyAgICBpZiggc3NsLT5pbl9tc2dsZW4gPCBzc2wtPmluX2hzbGVuICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiVExTIGhhbmRzaGFrZSBmcmFnbWVudGF0aW9uIG5vdCBzdXBwb3J0ZWQiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCit2b2lkIG1iZWR0bHNfc3NsX3VwZGF0ZV9oYW5kc2hha2Vfc3RhdHVzKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworCisgICAgaWYoIHNzbC0+c3RhdGUgIT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgJiYKKyAgICAgICAgc3NsLT5oYW5kc2hha2UgIT0gTlVMTCApCisgICAgeworICAgICAgICBzc2wtPmhhbmRzaGFrZS0+dXBkYXRlX2NoZWNrc3VtKCBzc2wsIHNzbC0+aW5fbXNnLCBzc2wtPmluX2hzbGVuICk7CisgICAgfQorCisgICAgLyogSGFuZHNoYWtlIG1lc3NhZ2UgaXMgY29tcGxldGUsIGluY3JlbWVudCBjb3VudGVyICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gJiYKKyAgICAgICAgc3NsLT5oYW5kc2hha2UgIT0gTlVMTCApCisgICAgeworICAgICAgICBzc2wtPmhhbmRzaGFrZS0+aW5fbXNnX3NlcSsrOworICAgIH0KKyNlbmRpZgorfQorCisvKgorICogRFRMUyBhbnRpLXJlcGxheTogUkZDIDYzNDcgNC4xLjIuNgorICoKKyAqIGluX3dpbmRvdyBpcyBhIGZpZWxkIG9mIGJpdHMgbnVtYmVyZWQgZnJvbSAwIChsc2IpIHRvIDYzIChtc2IpLgorICogQml0IG4gaXMgc2V0IGlmZiByZWNvcmQgbnVtYmVyIGluX3dpbmRvd190b3AgLSBuIGhhcyBiZWVuIHNlZW4uCisgKgorICogVXN1YWxseSwgaW5fd2luZG93X3RvcCBpcyB0aGUgbGFzdCByZWNvcmQgbnVtYmVyIHNlZW4gYW5kIHRoZSBsc2Igb2YKKyAqIGluX3dpbmRvdyBpcyBzZXQuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB0aGUgaW5pdGlhbCBzdGF0ZSAocmVjb3JkIG51bWJlciAwCisgKiBub3Qgc2VlbiB5ZXQpLgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQorc3RhdGljIHZvaWQgc3NsX2R0bHNfcmVwbGF5X3Jlc2V0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIHNzbC0+aW5fd2luZG93X3RvcCA9IDA7CisgICAgc3NsLT5pbl93aW5kb3cgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHNzbF9sb2FkX3NpeF9ieXRlcyggdW5zaWduZWQgY2hhciAqYnVmICkKK3sKKyAgICByZXR1cm4oICggKHVpbnQ2NF90KSBidWZbMF0gPDwgNDAgKSB8CisgICAgICAgICAgICAoICh1aW50NjRfdCkgYnVmWzFdIDw8IDMyICkgfAorICAgICAgICAgICAgKCAodWludDY0X3QpIGJ1ZlsyXSA8PCAyNCApIHwKKyAgICAgICAgICAgICggKHVpbnQ2NF90KSBidWZbM10gPDwgMTYgKSB8CisgICAgICAgICAgICAoICh1aW50NjRfdCkgYnVmWzRdIDw8ICA4ICkgfAorICAgICAgICAgICAgKCAodWludDY0X3QpIGJ1Zls1XSAgICAgICApICk7Cit9CisKKy8qCisgKiBSZXR1cm4gMCBpZiBzZXF1ZW5jZSBudW1iZXIgaXMgYWNjZXB0YWJsZSwgLTEgb3RoZXJ3aXNlCisgKi8KK2ludCBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV9jaGVjayggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICB1aW50NjRfdCByZWNfc2VxbnVtID0gc3NsX2xvYWRfc2l4X2J5dGVzKCBzc2wtPmluX2N0ciArIDIgKTsKKyAgICB1aW50NjRfdCBiaXQ7CisKKyAgICBpZiggc3NsLT5jb25mLT5hbnRpX3JlcGxheSA9PSBNQkVEVExTX1NTTF9BTlRJX1JFUExBWV9ESVNBQkxFRCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoIHJlY19zZXFudW0gPiBzc2wtPmluX3dpbmRvd190b3AgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGJpdCA9IHNzbC0+aW5fd2luZG93X3RvcCAtIHJlY19zZXFudW07CisKKyAgICBpZiggYml0ID49IDY0ICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoICggc3NsLT5pbl93aW5kb3cgJiAoICh1aW50NjRfdCkgMSA8PCBiaXQgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFVwZGF0ZSByZXBsYXkgd2luZG93IG9uIG5ldyB2YWxpZGF0ZWQgcmVjb3JkCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfZHRsc19yZXBsYXlfdXBkYXRlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIHVpbnQ2NF90IHJlY19zZXFudW0gPSBzc2xfbG9hZF9zaXhfYnl0ZXMoIHNzbC0+aW5fY3RyICsgMiApOworCisgICAgaWYoIHNzbC0+Y29uZi0+YW50aV9yZXBsYXkgPT0gTUJFRFRMU19TU0xfQU5USV9SRVBMQVlfRElTQUJMRUQgKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiggcmVjX3NlcW51bSA+IHNzbC0+aW5fd2luZG93X3RvcCApCisgICAgeworICAgICAgICAvKiBVcGRhdGUgd2luZG93X3RvcCBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aW5kb3cgKi8KKyAgICAgICAgdWludDY0X3Qgc2hpZnQgPSByZWNfc2VxbnVtIC0gc3NsLT5pbl93aW5kb3dfdG9wOworCisgICAgICAgIGlmKCBzaGlmdCA+PSA2NCApCisgICAgICAgICAgICBzc2wtPmluX3dpbmRvdyA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3NsLT5pbl93aW5kb3cgPDw9IHNoaWZ0OworICAgICAgICAgICAgc3NsLT5pbl93aW5kb3cgfD0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHNzbC0+aW5fd2luZG93X3RvcCA9IHJlY19zZXFudW07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIE1hcmsgdGhhdCBudW1iZXIgYXMgc2VlbiBpbiB0aGUgY3VycmVudCB3aW5kb3cgKi8KKyAgICAgICAgdWludDY0X3QgYml0ID0gc3NsLT5pbl93aW5kb3dfdG9wIC0gcmVjX3NlcW51bTsKKworICAgICAgICBpZiggYml0IDwgNjQgKSAvKiBBbHdheXMgdHJ1ZSwgYnV0IGJlIGV4dHJhIHN1cmUgKi8KKyAgICAgICAgICAgIHNzbC0+aW5fd2luZG93IHw9ICh1aW50NjRfdCkgMSA8PCBiaXQ7CisgICAgfQorfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRSkgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyBpbnQgc3NsX3Nlc3Npb25fcmVzZXRfaW50KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBwYXJ0aWFsICk7CisKKy8qCisgKiBXaXRob3V0IGFueSBTU0wgY29udGV4dCwgY2hlY2sgaWYgYSBkYXRhZ3JhbSBsb29rcyBsaWtlIGEgQ2xpZW50SGVsbG8gd2l0aAorICogYSB2YWxpZCBjb29raWUsIGFuZCBpZiBpdCBkb2Vzbid0LCBnZW5lcmF0ZSBhIEhlbGxvVmVyaWZ5UmVxdWVzdCBtZXNzYWdlLgorICogQm90aCBpbnB1dCBhbmQgb3V0cHV0IGluY2x1ZGUgZnVsbCBEVExTIGhlYWRlcnMuCisgKgorICogLSBpZiBjb29raWUgaXMgdmFsaWQsIHJldHVybiAwCisgKiAtIGlmIENsaWVudEhlbGxvIGxvb2tzIHN1cGVyZmljaWFsbHkgdmFsaWQgYnV0IGNvb2tpZSBpcyBub3QsCisgKiAgIGZpbGwgb2J1ZiBhbmQgc2V0IG9sZW4sIHRoZW4KKyAqICAgcmV0dXJuIE1CRURUTFNfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQKKyAqIC0gb3RoZXJ3aXNlIHJldHVybiBhIHNwZWNpZmljIGVycm9yIGNvZGUKKyAqLworc3RhdGljIGludCBzc2xfY2hlY2tfZHRsc19jbGlobG9fY29va2llKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY29va2llX3dyaXRlX3QgKmZfY29va2llX3dyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY29va2llX2NoZWNrX3QgKmZfY29va2llX2NoZWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9jb29raWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjbGlfaWQsIHNpemVfdCBjbGlfaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvYnVmLCBzaXplX3QgYnVmX2xlbiwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBzaXplX3Qgc2lkX2xlbiwgY29va2llX2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworCisgICAgaWYoIGZfY29va2llX3dyaXRlID09IE5VTEwgfHwgZl9jb29raWVfY2hlY2sgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKgorICAgICAqIFN0cnVjdHVyZSBvZiBDbGllbnRIZWxsbyB3aXRoIHJlY29yZCBhbmQgaGFuZHNoYWtlIGhlYWRlcnMsCisgICAgICogYW5kIGV4cGVjdGVkIHZhbHVlcy4gV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBhIGxvdCwgbW9yZSBjaGVja3Mgd2lsbCBiZQorICAgICAqIGRvbmUgd2hlbiBhY3R1YWxseSBwYXJzaW5nIHRoZSBDbGllbnRIZWxsbyAtIHNraXBwaW5nIHRob3NlIGNoZWNrcworICAgICAqIGF2b2lkcyBjb2RlIGR1cGxpY2F0aW9uIGFuZCBkb2VzIG5vdCBtYWtlIGNvb2tpZSBmb3JnaW5nIGFueSBlYXNpZXIuCisgICAgICoKKyAgICAgKiAgMC0wICBDb250ZW50VHlwZSB0eXBlOyAgICAgICAgICAgICAgICAgIGNvcGllZCwgbXVzdCBiZSBoYW5kc2hha2UKKyAgICAgKiAgMS0yICBQcm90b2NvbFZlcnNpb24gdmVyc2lvbjsgICAgICAgICAgIGNvcGllZAorICAgICAqICAzLTQgIHVpbnQxNiBlcG9jaDsgICAgICAgICAgICAgICAgICAgICAgY29waWVkLCBtdXN0IGJlIDAKKyAgICAgKiAgNS0xMCB1aW50NDggc2VxdWVuY2VfbnVtYmVyOyAgICAgICAgICAgIGNvcGllZAorICAgICAqIDExLTEyIHVpbnQxNiBsZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgKGlnbm9yZWQpCisgICAgICoKKyAgICAgKiAxMy0xMyBIYW5kc2hha2VUeXBlIG1zZ190eXBlOyAgICAgICAgICAgIChpZ25vcmVkKQorICAgICAqIDE0LTE2IHVpbnQyNCBsZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgKGlnbm9yZWQpCisgICAgICogMTctMTggdWludDE2IG1lc3NhZ2Vfc2VxOyAgICAgICAgICAgICAgICBjb3BpZWQKKyAgICAgKiAxOS0yMSB1aW50MjQgZnJhZ21lbnRfb2Zmc2V0OyAgICAgICAgICAgIGNvcGllZCwgbXVzdCBiZSAwCisgICAgICogMjItMjQgdWludDI0IGZyYWdtZW50X2xlbmd0aDsgICAgICAgICAgICAoaWdub3JlZCkKKyAgICAgKgorICAgICAqIDI1LTI2IFByb3RvY29sVmVyc2lvbiBjbGllbnRfdmVyc2lvbjsgICAgKGlnbm9yZWQpCisgICAgICogMjctNTggUmFuZG9tIHJhbmRvbTsgICAgICAgICAgICAgICAgICAgICAoaWdub3JlZCkKKyAgICAgKiA1OS14eCBTZXNzaW9uSUQgc2Vzc2lvbl9pZDsgICAgICAgICAgICAgIDEgYnl0ZSBsZW4gKyBzaWRfbGVuIGNvbnRlbnQKKyAgICAgKiA2MCsgICBvcGFxdWUgY29va2llPDAuLjJeOC0xPjsgICAgICAgICAgIDEgYnl0ZSBsZW4gKyBjb250ZW50CisgICAgICogICAgICAgLi4uCisgICAgICoKKyAgICAgKiBNaW5pbXVtIGxlbmd0aCBpcyA2MSBieXRlcy4KKyAgICAgKi8KKyAgICBpZiggaW5fbGVuIDwgNjEgfHwKKyAgICAgICAgaW5bMF0gIT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSB8fAorICAgICAgICBpblszXSAhPSAwIHx8IGluWzRdICE9IDAgfHwKKyAgICAgICAgaW5bMTldICE9IDAgfHwgaW5bMjBdICE9IDAgfHwgaW5bMjFdICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIHNpZF9sZW4gPSBpbls1OV07CisgICAgaWYoIHNpZF9sZW4gPiBpbl9sZW4gLSA2MSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKworICAgIGNvb2tpZV9sZW4gPSBpbls2MCArIHNpZF9sZW5dOworICAgIGlmKCBjb29raWVfbGVuID4gaW5fbGVuIC0gNjAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisKKyAgICBpZiggZl9jb29raWVfY2hlY2soIHBfY29va2llLCBpbiArIHNpZF9sZW4gKyA2MSwgY29va2llX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaV9pZCwgY2xpX2lkX2xlbiApID09IDAgKQorICAgIHsKKyAgICAgICAgLyogVmFsaWQgY29va2llICovCisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgd2UgZ2V0IGhlcmUsIHdlJ3ZlIGdvdCBhbiBpbnZhbGlkIGNvb2tpZSwgbGV0J3MgcHJlcGFyZSBIVlIuCisgICAgICoKKyAgICAgKiAgMC0wICBDb250ZW50VHlwZSB0eXBlOyAgICAgICAgICAgICAgICAgIGNvcGllZAorICAgICAqICAxLTIgIFByb3RvY29sVmVyc2lvbiB2ZXJzaW9uOyAgICAgICAgICAgY29waWVkCisgICAgICogIDMtNCAgdWludDE2IGVwb2NoOyAgICAgICAgICAgICAgICAgICAgICBjb3BpZWQKKyAgICAgKiAgNS0xMCB1aW50NDggc2VxdWVuY2VfbnVtYmVyOyAgICAgICAgICAgIGNvcGllZAorICAgICAqIDExLTEyIHVpbnQxNiBsZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgb2xlbiAtIDEzCisgICAgICoKKyAgICAgKiAxMy0xMyBIYW5kc2hha2VUeXBlIG1zZ190eXBlOyAgICAgICAgICAgIGhlbGxvX3ZlcmlmeV9yZXF1ZXN0CisgICAgICogMTQtMTYgdWludDI0IGxlbmd0aDsgICAgICAgICAgICAgICAgICAgICBvbGVuIC0gMjUKKyAgICAgKiAxNy0xOCB1aW50MTYgbWVzc2FnZV9zZXE7ICAgICAgICAgICAgICAgIGNvcGllZAorICAgICAqIDE5LTIxIHVpbnQyNCBmcmFnbWVudF9vZmZzZXQ7ICAgICAgICAgICAgY29waWVkCisgICAgICogMjItMjQgdWludDI0IGZyYWdtZW50X2xlbmd0aDsgICAgICAgICAgICBvbGVuIC0gMjUKKyAgICAgKgorICAgICAqIDI1LTI2IFByb3RvY29sVmVyc2lvbiBzZXJ2ZXJfdmVyc2lvbjsgICAgMHhmZSAweGZmCisgICAgICogMjctMjcgb3BhcXVlIGNvb2tpZTwwLi4yXjgtMT47ICAgICAgICAgICBjb29raWVfbGVuID0gb2xlbiAtIDI3LCBjb29raWUKKyAgICAgKgorICAgICAqIE1pbmltdW0gbGVuZ3RoIGlzIDI4LgorICAgICAqLworICAgIGlmKCBidWZfbGVuIDwgMjggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICAvKiBDb3B5IG1vc3QgZmllbGRzIGFuZCBhZGFwdCBvdGhlcnMgKi8KKyAgICBtZW1jcHkoIG9idWYsIGluLCAyNSApOworICAgIG9idWZbMTNdID0gTUJFRFRMU19TU0xfSFNfSEVMTE9fVkVSSUZZX1JFUVVFU1Q7CisgICAgb2J1ZlsyNV0gPSAweGZlOworICAgIG9idWZbMjZdID0gMHhmZjsKKworICAgIC8qIEdlbmVyYXRlIGFuZCB3cml0ZSBhY3R1YWwgY29va2llICovCisgICAgcCA9IG9idWYgKyAyODsKKyAgICBpZiggZl9jb29raWVfd3JpdGUoIHBfY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgJnAsIG9idWYgKyBidWZfbGVuLCBjbGlfaWQsIGNsaV9pZF9sZW4gKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgKm9sZW4gPSBwIC0gb2J1ZjsKKworICAgIC8qIEdvIGJhY2sgYW5kIGZpbGwgbGVuZ3RoIGZpZWxkcyAqLworICAgIG9idWZbMjddID0gKHVuc2lnbmVkIGNoYXIpKCAqb2xlbiAtIDI4ICk7CisKKyAgICBvYnVmWzE0XSA9IG9idWZbMjJdID0gKHVuc2lnbmVkIGNoYXIpKCAoICpvbGVuIC0gMjUgKSA+PiAxNiApOworICAgIG9idWZbMTVdID0gb2J1ZlsyM10gPSAodW5zaWduZWQgY2hhcikoICggKm9sZW4gLSAyNSApID4+ICA4ICk7CisgICAgb2J1ZlsxNl0gPSBvYnVmWzI0XSA9ICh1bnNpZ25lZCBjaGFyKSggKCAqb2xlbiAtIDI1ICkgICAgICAgKTsKKworICAgIG9idWZbMTFdID0gKHVuc2lnbmVkIGNoYXIpKCAoICpvbGVuIC0gMTMgKSA+PiAgOCApOworICAgIG9idWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpKCAoICpvbGVuIC0gMTMgKSAgICAgICApOworCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSEVMTE9fVkVSSUZZX1JFUVVJUkVEICk7Cit9CisKKy8qCisgKiBIYW5kbGUgcG9zc2libGUgY2xpZW50IHJlY29ubmVjdCB3aXRoIHRoZSBzYW1lIFVEUCBxdWFkcnVwbGV0CisgKiAoUkZDIDYzNDcgU2VjdGlvbiA0LjIuOCkuCisgKgorICogQ2FsbGVkIGJ5IHNzbF9wYXJzZV9yZWNvcmRfaGVhZGVyKCkgaW4gY2FzZSB3ZSByZWNlaXZlIGFuIGVwb2NoIDAgcmVjb3JkCisgKiB0aGF0IGxvb2tzIGxpa2UgYSBDbGllbnRIZWxsby4KKyAqCisgKiAtIGlmIHRoZSBpbnB1dCBsb29rcyBsaWtlIGEgQ2xpZW50SGVsbG8gd2l0aG91dCBjb29raWVzLAorICogICBzZW5kIGJhY2sgSGVsbG9WZXJpZnlSZXF1ZXN0LCB0aGVuCisgKiAgIHJldHVybiBNQkVEVExTX0VSUl9TU0xfSEVMTE9fVkVSSUZZX1JFUVVJUkVECisgKiAtIGlmIHRoZSBpbnB1dCBsb29rcyBsaWtlIGEgQ2xpZW50SGVsbG8gd2l0aCBhIHZhbGlkIGNvb2tpZSwKKyAqICAgcmVzZXQgdGhlIHNlc3Npb24gb2YgdGhlIGN1cnJlbnQgY29udGV4dCwgYW5kCisgKiAgIHJldHVybiBNQkVEVExTX0VSUl9TU0xfQ0xJRU5UX1JFQ09OTkVDVAorICogLSBpZiBhbnl0aGluZyBnb2VzIHdyb25nLCByZXR1cm4gYSBzcGVjaWZpYyBlcnJvciBjb2RlCisgKgorICogbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoKSB3aWxsIGlnbm9yZSB0aGUgcmVjb3JkIGlmIGFueXRoaW5nIGVsc2UgdGhhbgorICogTUJFRFRMU19FUlJfU1NMX0NMSUVOVF9SRUNPTk5FQ1Qgb3IgMCBpcyByZXR1cm5lZCwgYWx0aG91Z2ggdGhpcyBmdW5jdGlvbgorICogY2Fubm90IG5vdCByZXR1cm4gMC4KKyAqLworc3RhdGljIGludCBzc2xfaGFuZGxlX3Bvc3NpYmxlX3JlY29ubmVjdCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisKKyAgICByZXQgPSBzc2xfY2hlY2tfZHRsc19jbGlobG9fY29va2llKAorICAgICAgICAgICAgc3NsLT5jb25mLT5mX2Nvb2tpZV93cml0ZSwKKyAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9jb29raWVfY2hlY2ssCisgICAgICAgICAgICBzc2wtPmNvbmYtPnBfY29va2llLAorICAgICAgICAgICAgc3NsLT5jbGlfaWQsIHNzbC0+Y2xpX2lkX2xlbiwKKyAgICAgICAgICAgIHNzbC0+aW5fYnVmLCBzc2wtPmluX2xlZnQsCisgICAgICAgICAgICBzc2wtPm91dF9idWYsIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiwgJmxlbiApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAyLCAic3NsX2NoZWNrX2R0bHNfY2xpaGxvX2Nvb2tpZSIsIHJldCApOworCisgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfSEVMTE9fVkVSSUZZX1JFUVVJUkVEICkKKyAgICB7CisgICAgICAgIC8qIERvbnQgY2hlY2sgd3JpdGUgZXJyb3JzIGFzIHdlIGNhbid0IGRvIGFueXRoaW5nIGhlcmUuCisgICAgICAgICAqIElmIHRoZSBlcnJvciBpcyBwZXJtYW5lbnQgd2UnbGwgY2F0Y2ggaXQgbGF0ZXIsCisgICAgICAgICAqIGlmIGl0J3Mgbm90LCB0aGVuIGhvcGVmdWxseSBpdCdsbCB3b3JrIG5leHQgdGltZS4gKi8KKyAgICAgICAgKHZvaWQpIHNzbC0+Zl9zZW5kKCBzc2wtPnBfYmlvLCBzc2wtPm91dF9idWYsIGxlbiApOworCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRCApOworICAgIH0KKworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICAvKiBHb3QgYSB2YWxpZCBjb29raWUsIHBhcnRpYWxseSByZXNldCBjb250ZXh0ICovCisgICAgICAgIGlmKCAoIHJldCA9IHNzbF9zZXNzaW9uX3Jlc2V0X2ludCggc3NsLCAxICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAicmVzZXQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9DTElFTlRfUkVDT05ORUNUICk7CisgICAgfQorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFICYmIE1CRURUTFNfU1NMX1NSVl9DICovCisKKy8qCisgKiBDb250ZW50VHlwZSB0eXBlOworICogUHJvdG9jb2xWZXJzaW9uIHZlcnNpb247CisgKiB1aW50MTYgZXBvY2g7ICAgICAgICAgICAgLy8gRFRMUyBvbmx5CisgKiB1aW50NDggc2VxdWVuY2VfbnVtYmVyOyAgLy8gRFRMUyBvbmx5CisgKiB1aW50MTYgbGVuZ3RoOworICoKKyAqIFJldHVybiAwIGlmIGhlYWRlciBsb29rcyBzYW5lIChhbmQsIGZvciBEVExTLCB0aGUgcmVjb3JkIGlzIGV4cGVjdGVkKQorICogTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEIGlmIHRoZSBoZWFkZXIgbG9va3MgYmFkLAorICogTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfUkVDT1JEIChEVExTIG9ubHkpIGlmIHNhbmUgYnV0IHVuZXhwZWN0ZWQuCisgKgorICogV2l0aCBEVExTLCBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCgpIHdpbGw6CisgKiAxLiBwcm9jZWVkIHdpdGggdGhlIHJlY29yZCBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMAorICogMi4gZHJvcCBvbmx5IHRoZSBjdXJyZW50IHJlY29yZCBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgVU5FWFBFQ1RFRF9SRUNPUkQKKyAqIDMuIHJldHVybiBDTElFTlRfUkVDT05ORUNUIGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoYXQgdmFsdWUKKyAqIDQuIGRyb3AgdGhlIHdob2xlIGRhdGFncmFtIGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbnl0aGluZyBlbHNlLgorICogUG9pbnQgMiBpcyBuZWVkZWQgd2hlbiB0aGUgcGVlciBpcyByZXNlbmRpbmcsIGFuZCB3ZSBoYXZlIGFscmVhZHkgcmVjZWl2ZWQKKyAqIHRoZSBmaXJzdCByZWNvcmQgZnJvbSBhIGRhdGFncmFtIGJ1dCBhcmUgc3RpbGwgd2FpdGluZyBmb3IgdGhlIG90aGVycy4KKyAqLworc3RhdGljIGludCBzc2xfcGFyc2VfcmVjb3JkX2hlYWRlciggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIGludCBtYWpvcl92ZXIsIG1pbm9yX3ZlcjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImlucHV0IHJlY29yZCBoZWFkZXIiLCBzc2wtPmluX2hkciwgbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICkgKTsKKworICAgIHNzbC0+aW5fbXNndHlwZSA9ICBzc2wtPmluX2hkclswXTsKKyAgICBzc2wtPmluX21zZ2xlbiA9ICggc3NsLT5pbl9sZW5bMF0gPDwgOCApIHwgc3NsLT5pbl9sZW5bMV07CisgICAgbWJlZHRsc19zc2xfcmVhZF92ZXJzaW9uKCAmbWFqb3JfdmVyLCAmbWlub3JfdmVyLCBzc2wtPmNvbmYtPnRyYW5zcG9ydCwgc3NsLT5pbl9oZHIgKyAxICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImlucHV0IHJlY29yZDogbXNndHlwZSA9ICVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiA9IFslZDolZF0sIG1zZ2xlbiA9ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNndHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ham9yX3ZlciwgbWlub3JfdmVyLCBzc2wtPmluX21zZ2xlbiApICk7CisKKyAgICAvKiBDaGVjayByZWNvcmQgdHlwZSAqLworICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgIT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSAmJgorICAgICAgICBzc2wtPmluX21zZ3R5cGUgIT0gTUJFRFRMU19TU0xfTVNHX0FMRVJUICYmCisgICAgICAgIHNzbC0+aW5fbXNndHlwZSAhPSBNQkVEVExTX1NTTF9NU0dfQ0hBTkdFX0NJUEhFUl9TUEVDICYmCisgICAgICAgIHNzbC0+aW5fbXNndHlwZSAhPSBNQkVEVExTX1NTTF9NU0dfQVBQTElDQVRJT05fREFUQSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInVua25vd24gcmVjb3JkIHR5cGUiICkgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VORVhQRUNURURfTUVTU0FHRSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRCApOworICAgIH0KKworICAgIC8qIENoZWNrIHZlcnNpb24gKi8KKyAgICBpZiggbWFqb3JfdmVyICE9IHNzbC0+bWFqb3JfdmVyICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibWFqb3IgdmVyc2lvbiBtaXNtYXRjaCIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRCApOworICAgIH0KKworICAgIGlmKCBtaW5vcl92ZXIgPiBzc2wtPmNvbmYtPm1heF9taW5vcl92ZXIgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJtaW5vciB2ZXJzaW9uIG1pc21hdGNoIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEICk7CisgICAgfQorCisgICAgLyogQ2hlY2sgbGVuZ3RoIGFnYWluc3QgdGhlIHNpemUgb2Ygb3VyIGJ1ZmZlciAqLworICAgIGlmKCBzc2wtPmluX21zZ2xlbiA+IE1CRURUTFNfU1NMX0JVRkZFUl9MRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAtIChzaXplX3QpKCBzc2wtPmluX21zZyAtIHNzbC0+aW5fYnVmICkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgbWVzc2FnZSBsZW5ndGgiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQgKTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBsZW5ndGggYWdhaW5zdCBib3VuZHMgb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtIGFuZCB2ZXJzaW9uICovCisgICAgaWYoIHNzbC0+dHJhbnNmb3JtX2luID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnbGVuIDwgMSB8fAorICAgICAgICAgICAgc3NsLT5pbl9tc2dsZW4gPiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBtZXNzYWdlIGxlbmd0aCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiggc3NsLT5pbl9tc2dsZW4gPCBzc2wtPnRyYW5zZm9ybV9pbi0+bWlubGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgbWVzc2FnZSBsZW5ndGgiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEICk7CisgICAgICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCAmJgorICAgICAgICAgICAgc3NsLT5pbl9tc2dsZW4gPiBzc2wtPnRyYW5zZm9ybV9pbi0+bWlubGVuICsgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgbWVzc2FnZSBsZW5ndGgiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEICk7CisgICAgICAgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgLyoKKyAgICAgICAgICogVExTIGVuY3J5cHRlZCBtZXNzYWdlcyBjYW4gaGF2ZSB1cCB0byAyNTYgYnl0ZXMgb2YgcGFkZGluZworICAgICAgICAgKi8KKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID49IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSAmJgorICAgICAgICAgICAgc3NsLT5pbl9tc2dsZW4gPiBzc2wtPnRyYW5zZm9ybV9pbi0+bWlubGVuICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICsgMjU2ICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgbWVzc2FnZSBsZW5ndGgiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEICk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIC8qCisgICAgICogRFRMUy1yZWxhdGVkIHRlc3RzIGRvbmUgbGFzdCwgYmVjYXVzZSBtb3N0IG9mIHRoZW0gbWF5IHJlc3VsdCBpbgorICAgICAqIHNpbGVudGx5IGRyb3BwaW5nIHRoZSByZWNvcmQgKGJ1dCBub3QgdGhlIHdob2xlIGRhdGFncmFtKSwgYW5kIHdlIG9ubHkKKyAgICAgKiB3YW50IHRvIGNvbnNpZGVyIHRoYXQgYWZ0ZXIgZW5zdXJpbmcgdGhhdCB0aGUgImJhc2ljIiBmaWVsZHMgKHR5cGUsCisgICAgICogdmVyc2lvbiwgbGVuZ3RoKSBhcmUgc2FuZS4KKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgcmVjX2Vwb2NoID0gKCBzc2wtPmluX2N0clswXSA8PCA4ICkgfCBzc2wtPmluX2N0clsxXTsKKworICAgICAgICAvKiBEcm9wIHVuZXhwZWN0ZWQgQ2hhbmdlQ2lwaGVyU3BlYyBtZXNzYWdlcyAqLworICAgICAgICBpZiggc3NsLT5pbl9tc2d0eXBlID09IE1CRURUTFNfU1NMX01TR19DSEFOR0VfQ0lQSEVSX1NQRUMgJiYKKyAgICAgICAgICAgIHNzbC0+c3RhdGUgIT0gTUJFRFRMU19TU0xfQ0xJRU5UX0NIQU5HRV9DSVBIRVJfU1BFQyAmJgorICAgICAgICAgICAgc3NsLT5zdGF0ZSAhPSBNQkVEVExTX1NTTF9TRVJWRVJfQ0hBTkdFX0NJUEhFUl9TUEVDICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJkcm9wcGluZyB1bmV4cGVjdGVkIENoYW5nZUNpcGhlclNwZWMiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfUkVDT1JEICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBEcm9wIHVuZXhwZWN0ZWQgQXBwbGljYXRpb25EYXRhIHJlY29yZHMsCisgICAgICAgICAqIGV4Y2VwdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHJlbmVnb3RpYXRpb25zICovCisgICAgICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0FQUExJQ0FUSU9OX0RBVEEgJiYKKyAgICAgICAgICAgIHNzbC0+c3RhdGUgIT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgICAgICAgICAmJiAhICggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgJiYKKyAgICAgICAgICAgICAgICAgICBzc2wtPnN0YXRlID09IE1CRURUTFNfU1NMX1NFUlZFUl9IRUxMTyApCisjZW5kaWYKKyAgICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJkcm9wcGluZyB1bmV4cGVjdGVkIEFwcGxpY2F0aW9uRGF0YSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9SRUNPUkQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGVwb2NoIChhbmQgc2VxdWVuY2UgbnVtYmVyKSB3aXRoIERUTFMgKi8KKyAgICAgICAgaWYoIHJlY19lcG9jaCAhPSBzc2wtPmluX2Vwb2NoICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJyZWNvcmQgZnJvbSBhbm90aGVyIGVwb2NoOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVkLCByZWNlaXZlZCAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9lcG9jaCwgcmVjX2Vwb2NoICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRSkgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBDaGVjayBmb3IgYW4gZXBvY2ggMCBDbGllbnRIZWxsby4gV2UgY2FuJ3QgdXNlIGluX21zZyBoZXJlIHRvCisgICAgICAgICAgICAgKiBhY2Nlc3MgdGhlIGZpcnN0IGJ5dGUgb2YgcmVjb3JkIGNvbnRlbnQgKGhhbmRzaGFrZSB0eXBlKSwgYXMgd2UKKyAgICAgICAgICAgICAqIGhhdmUgYW4gYWN0aXZlIHRyYW5zZm9ybSAocG9zc2libHkgaXZfbGVuICE9IDApLCBzbyB1c2UgdGhlCisgICAgICAgICAgICAgKiBmYWN0IHRoYXQgdGhlIHJlY29yZCBoZWFkZXIgbGVuIGlzIDEzIGluc3RlYWQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiAmJgorICAgICAgICAgICAgICAgIHNzbC0+c3RhdGUgPT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgJiYKKyAgICAgICAgICAgICAgICByZWNfZXBvY2ggPT0gMCAmJgorICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICYmCisgICAgICAgICAgICAgICAgc3NsLT5pbl9sZWZ0ID4gMTMgJiYKKyAgICAgICAgICAgICAgICBzc2wtPmluX2J1ZlsxM10gPT0gTUJFRFRMU19TU0xfSFNfQ0xJRU5UX0hFTExPICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInBvc3NpYmxlIGNsaWVudCByZWNvbm5lY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSB0aGUgc2FtZSBwb3J0IiApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBzc2xfaGFuZGxlX3Bvc3NpYmxlX3JlY29ubmVjdCggc3NsICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFICYmIE1CRURUTFNfU1NMX1NSVl9DICovCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9SRUNPUkQgKTsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQorICAgICAgICAvKiBSZXBsYXkgZGV0ZWN0aW9uIG9ubHkgd29ya3MgZm9yIHRoZSBjdXJyZW50IGVwb2NoICovCisgICAgICAgIGlmKCByZWNfZXBvY2ggPT0gc3NsLT5pbl9lcG9jaCAmJgorICAgICAgICAgICAgbWJlZHRsc19zc2xfZHRsc19yZXBsYXlfY2hlY2soIHNzbCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlcGxheWVkIHJlY29yZCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9SRUNPUkQgKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogSWYgYXBwbGljYWJsZSwgZGVjcnlwdCAoYW5kIGRlY29tcHJlc3MpIHJlY29yZCBjb250ZW50CisgKi8KK3N0YXRpYyBpbnQgc3NsX3ByZXBhcmVfcmVjb3JkX2NvbnRlbnQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldCwgZG9uZSA9IDA7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJpbnB1dCByZWNvcmQgZnJvbSBuZXR3b3JrIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPmluX2hkciwgbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICkgKyBzc2wtPmluX21zZ2xlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwpCisgICAgaWYoIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZWFkICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJnb2luZyBmb3IgbWJlZHRsc19zc2xfaHdfcmVjb3JkX3JlYWQoKSIgKSApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZWFkKCBzc2wgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFMTFRIUk9VR0ggKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9od19yZWNvcmRfcmVhZCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFJTEVEICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggcmV0ID09IDAgKQorICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCAqLworICAgIGlmKCAhZG9uZSAmJiBzc2wtPnRyYW5zZm9ybV9pbiAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHNzbF9kZWNyeXB0X2J1Ziggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAic3NsX2RlY3J5cHRfYnVmIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiaW5wdXQgcGF5bG9hZCBhZnRlciBkZWNyeXB0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2csIHNzbC0+aW5fbXNnbGVuICk7CisKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnbGVuID4gTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgbWVzc2FnZSBsZW5ndGgiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEICk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9pbiAhPSBOVUxMICYmCisgICAgICAgIHNzbC0+c2Vzc2lvbl9pbi0+Y29tcHJlc3Npb24gPT0gTUJFRFRMU19TU0xfQ09NUFJFU1NfREVGTEFURSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBzc2xfZGVjb21wcmVzc19idWYoIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF9kZWNvbXByZXNzX2J1ZiIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1pMSUJfU1VQUE9SVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfZHRsc19yZXBsYXlfdXBkYXRlKCBzc2wgKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgdm9pZCBzc2xfaGFuZHNoYWtlX3dyYXB1cF9mcmVlX2hzX3RyYW5zZm9ybSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKKy8qCisgKiBSZWFkIGEgcmVjb3JkLgorICoKKyAqIFNpbGVudGx5IGlnbm9yZSBub24tZmF0YWwgYWxlcnQgKGFuZCBmb3IgRFRMUywgaW52YWxpZCByZWNvcmRzIGFzIHdlbGwsCisgKiBSRkMgNjM0NyA0LjEuMi43KSBhbmQgY29udGludWUgcmVhZGluZyB1bnRpbCBhIHZhbGlkIHJlY29yZCBpcyBmb3VuZC4KKyAqCisgKi8KK2ludCBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiByZWFkIHJlY29yZCIgKSApOworCisgICAgZG8geworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkX2xheWVyKCBzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggIm1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkX2xheWVyIiApLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9oYW5kbGVfbWVzc2FnZV90eXBlKCBzc2wgKTsKKworICAgIH0gd2hpbGUoIE1CRURUTFNfRVJSX1NTTF9OT05fRkFUQUwgPT0gcmV0ICk7CisKKyAgICBpZiggMCAhPSByZXQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAoICJtYmVkdGxzX3NzbF9oYW5kbGVfbWVzc2FnZV90eXBlIiApLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlID09IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfdXBkYXRlX2hhbmRzaGFrZV9zdGF0dXMoIHNzbCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gcmVhZCByZWNvcmQiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19zc2xfcmVhZF9yZWNvcmRfbGF5ZXIoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCBzc2wtPmluX2hzbGVuICE9IDAgJiYgc3NsLT5pbl9oc2xlbiA8IHNzbC0+aW5fbXNnbGVuICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEdldCBuZXh0IEhhbmRzaGFrZSBtZXNzYWdlIGluIHRoZSBjdXJyZW50IHJlY29yZAorICAgICAgICAgKi8KKyAgICAgICAgc3NsLT5pbl9tc2dsZW4gLT0gc3NsLT5pbl9oc2xlbjsKKworICAgICAgICBtZW1tb3ZlKCBzc2wtPmluX21zZywgc3NsLT5pbl9tc2cgKyBzc2wtPmluX2hzbGVuLAorICAgICAgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiApOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgInJlbWFpbmluZyBjb250ZW50IGluIHJlY29yZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZywgc3NsLT5pbl9tc2dsZW4gKTsKKworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBzc2wtPmluX2hzbGVuID0gMDsKKworICAgIC8qCisgICAgICogUmVhZCB0aGUgcmVjb3JkIGhlYWRlciBhbmQgcGFyc2UgaXQKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCityZWFkX3JlY29yZF9oZWFkZXI6CisjZW5kaWYKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2ZldGNoX2lucHV0KCBzc2wsIG1iZWR0bHNfc3NsX2hkcl9sZW4oIHNzbCApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2ZldGNoX2lucHV0IiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gc3NsX3BhcnNlX3JlY29yZF9oZWFkZXIoIHNzbCApICkgIT0gMCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICAgICAgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9DTElFTlRfUkVDT05ORUNUICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9SRUNPUkQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNraXAgdW5leHBlY3RlZCByZWNvcmQgKGJ1dCBub3Qgd2hvbGUgZGF0YWdyYW0pICovCisgICAgICAgICAgICAgICAgc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQgPSBzc2wtPmluX21zZ2xlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICk7CisKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImRpc2NhcmRpbmcgdW5leHBlY3RlZCByZWNvcmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGhlYWRlcikiICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTa2lwIGludmFsaWQgcmVjb3JkIGFuZCB0aGUgcmVzdCBvZiB0aGUgZGF0YWdyYW0gKi8KKyAgICAgICAgICAgICAgICBzc2wtPm5leHRfcmVjb3JkX29mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgc3NsLT5pbl9sZWZ0ID0gMDsKKworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoaGVhZGVyKSIgKSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBHZXQgbmV4dCByZWNvcmQgKi8KKyAgICAgICAgICAgIGdvdG8gcmVhZF9yZWNvcmRfaGVhZGVyOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlYWQgYW5kIG9wdGlvbmFsbHkgZGVjcnlwdCB0aGUgbWVzc2FnZSBjb250ZW50cworICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2ZldGNoX2lucHV0KCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9oZHJfbGVuKCBzc2wgKSArIHNzbC0+aW5fbXNnbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2ZldGNoX2lucHV0IiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgLyogRG9uZSByZWFkaW5nIHRoaXMgcmVjb3JkLCBnZXQgcmVhZHkgZm9yIHRoZSBuZXh0IG9uZSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQgPSBzc2wtPmluX21zZ2xlbiArIG1iZWR0bHNfc3NsX2hkcl9sZW4oIHNzbCApOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBzc2wtPmluX2xlZnQgPSAwOworCisgICAgaWYoICggcmV0ID0gc3NsX3ByZXBhcmVfcmVjb3JkX2NvbnRlbnQoIHNzbCApICkgIT0gMCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNpbGVudGx5IGRpc2NhcmQgaW52YWxpZCByZWNvcmRzICovCisgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRCB8fAorICAgICAgICAgICAgICAgIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEV4Y2VwdCB3aGVuIHdhaXRpbmcgZm9yIEZpbmlzaGVkIGFzIGEgYmFkIG1hYyBoZXJlCisgICAgICAgICAgICAgICAgICogcHJvYmFibHkgbWVhbnMgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdGhlIGhhbmRzaGFrZQorICAgICAgICAgICAgICAgICAqIChlZyB3cm9uZyBwc2sgdXNlZCwgbWl0bSBkb3duZ3JhZGUgYXR0ZW1wdCwgZXRjLikgKi8KKyAgICAgICAgICAgICAgICBpZiggc3NsLT5zdGF0ZSA9PSBNQkVEVExTX1NTTF9DTElFTlRfRklOSVNIRUQgfHwKKyAgICAgICAgICAgICAgICAgICAgc3NsLT5zdGF0ZSA9PSBNQkVEVExTX1NTTF9TRVJWRVJfRklOSVNIRUQgKQorICAgICAgICAgICAgICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUykKKyAgICAgICAgICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUMgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19CQURfUkVDT1JEX01BQyApOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUKQorICAgICAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPmJhZG1hY19saW1pdCAhPSAwICYmCisgICAgICAgICAgICAgICAgICAgICsrc3NsLT5iYWRtYWNfc2VlbiA+PSBzc2wtPmNvbmYtPmJhZG1hY19saW1pdCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInRvbyBtYW55IHJlY29yZHMgd2l0aCBiYWQgTUFDIiApICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDICk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImRpc2NhcmRpbmcgaW52YWxpZCByZWNvcmQgKG1hYykiICkgKTsKKyAgICAgICAgICAgICAgICBnb3RvIHJlYWRfcmVjb3JkX2hlYWRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgLyogRXJyb3Igb3V0IChhbmQgc2VuZCBhbGVydCkgb24gaW52YWxpZCByZWNvcmRzICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTExfQUxFUlRfTUVTU0FHRVMpCisgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19CQURfUkVDT1JEX01BQyApOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXaGVuIHdlIHNlbnQgdGhlIGxhc3QgZmxpZ2h0IG9mIHRoZSBoYW5kc2hha2UsIHdlIE1VU1QgcmVzcG9uZCB0byBhCisgICAgICogcmV0cmFuc21pdCBvZiB0aGUgcGVlcidzIHByZXZpb3VzIGZsaWdodCB3aXRoIGEgcmV0cmFuc21pdC4gKEluCisgICAgICogcHJhY3RpY2UsIG9ubHkgdGhlIEZpbmlzaGVkIG1lc3NhZ2Ugd2lsbCBtYWtlIGl0LCBvdGhlciBtZXNzYWdlcworICAgICAqIGluY2x1ZGluZyBDQ1MgdXNlIHRoZSBvbGQgdHJhbnNmb3JtIHNvIHRoZXkncmUgZHJvcHBlZCBhcyBpbnZhbGlkLikKKyAgICAgKgorICAgICAqIElmIHRoZSByZWNvcmQgd2UgcmVjZWl2ZWQgaXMgbm90IGEgaGFuZHNoYWtlIG1lc3NhZ2UsIGhvd2V2ZXIsIGl0CisgICAgICogbWVhbnMgdGhlIHBlZXIgcmVjZWl2ZWQgb3VyIGxhc3QgZmxpZ2h0IHNvIHdlIGNhbiBjbGVhbiB1cAorICAgICAqIGhhbmRzaGFrZSBpbmZvLgorICAgICAqCisgICAgICogVGhpcyBjaGVjayBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSBwcmVwYXJlX2hhbmRzaGFrZSgpIGR1ZSB0byBhbiBlZGdlCisgICAgICogY2FzZTogaWYgdGhlIGNsaWVudCBpbW1lZGlhdGVseSByZXF1ZXN0cyByZW5lZ290aWF0aW9uLCB0aGlzCisgICAgICogZmluaXNoZXMgdGhlIGN1cnJlbnQgaGFuZHNoYWtlIGZpcnN0LCBhdm9pZGluZyB0aGUgbmV3IENsaWVudEhlbGxvCisgICAgICogYmVpbmcgbWlzdGFrZW4gZm9yIGFuIGFuY2llbnQgbWVzc2FnZSBpbiB0aGUgY3VycmVudCBoYW5kc2hha2UuCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gJiYKKyAgICAgICAgc3NsLT5oYW5kc2hha2UgIT0gTlVMTCAmJgorICAgICAgICBzc2wtPnN0YXRlID09IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSICkKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSAmJgorICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnWzBdID09IE1CRURUTFNfU1NMX0hTX0ZJTklTSEVEICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJyZWNlaXZlZCByZXRyYW5zbWl0IG9mIGxhc3QgZmxpZ2h0IiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3Jlc2VuZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9yZXNlbmQiLCByZXQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzbF9oYW5kc2hha2Vfd3JhcHVwX2ZyZWVfaHNfdHJhbnNmb3JtKCBzc2wgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9oYW5kbGVfbWVzc2FnZV90eXBlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisKKyAgICAvKgorICAgICAqIEhhbmRsZSBwYXJ0aWN1bGFyIHR5cGVzIG9mIHJlY29yZHMKKyAgICAgKi8KKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlID09IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcHJlcGFyZV9oYW5kc2hha2VfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIHNzbC0+aW5fbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfQUxFUlQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJnb3QgYW4gYWxlcnQgbWVzc2FnZSwgdHlwZTogWyVkOiVkXSIsCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnWzBdLCBzc2wtPmluX21zZ1sxXSApICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogSWdub3JlIG5vbi1mYXRhbCBhbGVydHMsIGV4Y2VwdCBjbG9zZV9ub3RpZnkgYW5kIG5vX3JlbmVnb3RpYXRpb24KKyAgICAgICAgICovCisgICAgICAgIGlmKCBzc2wtPmluX21zZ1swXSA9PSBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiaXMgYSBmYXRhbCBhbGVydCBtZXNzYWdlIChtc2cgJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnWzFdICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0ZBVEFMX0FMRVJUX01FU1NBR0UgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBzc2wtPmluX21zZ1swXSA9PSBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9XQVJOSU5HICYmCisgICAgICAgICAgICBzc2wtPmluX21zZ1sxXSA9PSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfQ0xPU0VfTk9USUZZICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJpcyBhIGNsb3NlIG5vdGlmeSBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWSApOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRU5BQkxFRCkKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnWzBdID09IE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX1dBUk5JTkcgJiYKKyAgICAgICAgICAgIHNzbC0+aW5fbXNnWzFdID09IE1CRURUTFNfU1NMX0FMRVJUX01TR19OT19SRU5FR09USUFUSU9OICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJpcyBhIFNTTHYzIG5vX2NlcnQiICkgKTsKKyAgICAgICAgICAgIC8qIFdpbGwgYmUgaGFuZGxlZCB3aGVuIHRyeWluZyB0byBwYXJzZSBTZXJ2ZXJIZWxsbyAqLworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICYmCisgICAgICAgICAgICBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiAmJgorICAgICAgICAgICAgc3NsLT5pbl9tc2dbMF0gPT0gTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfV0FSTklORyAmJgorICAgICAgICAgICAgc3NsLT5pbl9tc2dbMV0gPT0gTUJFRFRMU19TU0xfQUxFUlRfTVNHX05PX0NFUlQgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImlzIGEgU1NMdjMgbm9fY2VydCIgKSApOworICAgICAgICAgICAgLyogV2lsbCBiZSBoYW5kbGVkIGluIG1iZWR0bHNfc3NsX3BhcnNlX2NlcnRpZmljYXRlKCkgKi8KKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyAmJiBNQkVEVExTX1NTTF9TUlZfQyAqLworCisgICAgICAgIC8qIFNpbGVudGx5IGlnbm9yZTogZmV0Y2ggbmV3IG1lc3NhZ2UgKi8KKyAgICAgICAgcmV0dXJuIE1CRURUTFNfRVJSX1NTTF9OT05fRkFUQUw7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19IQU5EU0hBS0VfRkFJTFVSRSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2UgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggc3NsID09IE5VTEwgfHwgc3NsLT5jb25mID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBzZW5kIGFsZXJ0IG1lc3NhZ2UiICkgKTsKKworICAgIHNzbC0+b3V0X21zZ3R5cGUgPSBNQkVEVExTX1NTTF9NU0dfQUxFUlQ7CisgICAgc3NsLT5vdXRfbXNnbGVuID0gMjsKKyAgICBzc2wtPm91dF9tc2dbMF0gPSBsZXZlbDsKKyAgICBzc2wtPm91dF9tc2dbMV0gPSBtZXNzYWdlOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBzZW5kIGFsZXJ0IG1lc3NhZ2UiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogSGFuZHNoYWtlIGZ1bmN0aW9ucworICovCisjaWYgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQpICAgICAgICAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCkgICAgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpICAgICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpICAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSAgICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEKQoraW50IG1iZWR0bHNfc3NsX3dyaXRlX2NlcnRpZmljYXRlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm8gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm87CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIGNlcnRpZmljYXRlIiApICk7CisKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9wYXJzZV9jZXJ0aWZpY2F0ZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBjZXJ0aWZpY2F0ZSIgKSApOworCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgcGFyc2UgY2VydGlmaWNhdGUiICkgKTsKKyAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworfQorI2Vsc2UKK2ludCBtYmVkdGxzX3NzbF93cml0ZV9jZXJ0aWZpY2F0ZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisgICAgc2l6ZV90IGksIG47CisgICAgY29uc3QgbWJlZHRsc194NTA5X2NydCAqY3J0OworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm8gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm87CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIGNlcnRpZmljYXRlIiApICk7CisKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfQ0xJRU5UICkKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPmNsaWVudF9hdXRoID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgd3JpdGUgY2VydGlmaWNhdGUiICkgKTsKKyAgICAgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisgICAgICAgIC8qCisgICAgICAgICAqIElmIHVzaW5nIFNTTHYzIGFuZCBnb3Qgbm8gY2VydCwgc2VuZCBhbiBBbGVydCBtZXNzYWdlCisgICAgICAgICAqIChvdGhlcndpc2UgYW4gZW1wdHkgQ2VydGlmaWNhdGUgbWVzc2FnZSB3aWxsIGJlIHNlbnQpLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIG1iZWR0bHNfc3NsX293bl9jZXJ0KCBzc2wgKSAgPT0gTlVMTCAmJgorICAgICAgICAgICAgc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICAgICAgeworICAgICAgICAgICAgc3NsLT5vdXRfbXNnbGVuICA9IDI7CisgICAgICAgICAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0FMRVJUOworICAgICAgICAgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX1dBUk5JTkc7CisgICAgICAgICAgICBzc2wtPm91dF9tc2dbMV0gID0gTUJFRFRMU19TU0xfQUxFUlRfTVNHX05PX0NFUlQ7CisKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiZ290IG5vIGNlcnRpZmljYXRlIHRvIHNlbmQiICkgKTsKKyAgICAgICAgICAgIGdvdG8gd3JpdGVfbXNnOworICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyAqLworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DTElfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICkKKyAgICB7CisgICAgICAgIGlmKCBtYmVkdGxzX3NzbF9vd25fY2VydCggc3NsICkgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZ290IG5vIGNlcnRpZmljYXRlIHRvIHNlbmQiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0NSVCggMywgIm93biBjZXJ0aWZpY2F0ZSIsIG1iZWR0bHNfc3NsX293bl9jZXJ0KCBzc2wgKSApOworCisgICAgLyoKKyAgICAgKiAgICAgMCAgLiAgMCAgICBoYW5kc2hha2UgdHlwZQorICAgICAqICAgICAxICAuICAzICAgIGhhbmRzaGFrZSBsZW5ndGgKKyAgICAgKiAgICAgNCAgLiAgNiAgICBsZW5ndGggb2YgYWxsIGNlcnRzCisgICAgICogICAgIDcgIC4gIDkgICAgbGVuZ3RoIG9mIGNlcnQuIDEKKyAgICAgKiAgICAxMCAgLiBuLTEgICBwZWVyIGNlcnRpZmljYXRlCisgICAgICogICAgIG4gIC4gbisyICAgbGVuZ3RoIG9mIGNlcnQuIDIKKyAgICAgKiAgICBuKzMgLiAuLi4gICB1cHBlciBsZXZlbCBjZXJ0LCBldGMuCisgICAgICovCisgICAgaSA9IDc7CisgICAgY3J0ID0gbWJlZHRsc19zc2xfb3duX2NlcnQoIHNzbCApOworCisgICAgd2hpbGUoIGNydCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG4gPSBjcnQtPnJhdy5sZW47CisgICAgICAgIGlmKCBuID4gTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOIC0gMyAtIGkgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImNlcnRpZmljYXRlIHRvbyBsYXJnZSwgJWQgPiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpICsgMyArIG4sIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9DRVJUSUZJQ0FURV9UT09fTEFSR0UgKTsKKyAgICAgICAgfQorCisgICAgICAgIHNzbC0+b3V0X21zZ1tpICAgIF0gPSAodW5zaWduZWQgY2hhcikoIG4gPj4gMTYgKTsKKyAgICAgICAgc3NsLT5vdXRfbXNnW2kgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSggbiA+PiAgOCApOworICAgICAgICBzc2wtPm91dF9tc2dbaSArIDJdID0gKHVuc2lnbmVkIGNoYXIpKCBuICAgICAgICk7CisKKyAgICAgICAgaSArPSAzOyBtZW1jcHkoIHNzbC0+b3V0X21zZyArIGksIGNydC0+cmF3LnAsIG4gKTsKKyAgICAgICAgaSArPSBuOyBjcnQgPSBjcnQtPm5leHQ7CisgICAgfQorCisgICAgc3NsLT5vdXRfbXNnWzRdICA9ICh1bnNpZ25lZCBjaGFyKSggKCBpIC0gNyApID4+IDE2ICk7CisgICAgc3NsLT5vdXRfbXNnWzVdICA9ICh1bnNpZ25lZCBjaGFyKSggKCBpIC0gNyApID4+ICA4ICk7CisgICAgc3NsLT5vdXRfbXNnWzZdICA9ICh1bnNpZ25lZCBjaGFyKSggKCBpIC0gNyApICAgICAgICk7CisKKyAgICBzc2wtPm91dF9tc2dsZW4gID0gaTsKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRTsKKyAgICBzc2wtPm91dF9tc2dbMF0gID0gTUJFRFRMU19TU0xfSFNfQ0VSVElGSUNBVEU7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCit3cml0ZV9tc2c6CisjZW5kaWYKKworICAgIHNzbC0+c3RhdGUrKzsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gd3JpdGUgY2VydGlmaWNhdGUiICkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9wYXJzZV9jZXJ0aWZpY2F0ZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisgICAgc2l6ZV90IGksIG47CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbzsKKyAgICBpbnQgYXV0aG1vZGUgPSBzc2wtPmNvbmYtPmF1dGhtb2RlOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBjZXJ0aWZpY2F0ZSIgKSApOworCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgcGFyc2UgY2VydGlmaWNhdGUiICkgKTsKKyAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiAmJgorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgcGFyc2UgY2VydGlmaWNhdGUiICkgKTsKKyAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5zbmlfYXV0aG1vZGUgIT0gTUJFRFRMU19TU0xfVkVSSUZZX1VOU0VUICkKKyAgICAgICAgYXV0aG1vZGUgPSBzc2wtPmhhbmRzaGFrZS0+c25pX2F1dGhtb2RlOworI2VuZGlmCisKKyAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgJiYKKyAgICAgICAgYXV0aG1vZGUgPT0gTUJFRFRMU19TU0xfVkVSSUZZX05PTkUgKQorICAgIHsKKyAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dmVyaWZ5X3Jlc3VsdCA9IE1CRURUTFNfWDUwOV9CQURDRVJUX1NLSVBfVkVSSUZZOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgcGFyc2UgY2VydGlmaWNhdGUiICkgKTsKKyAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBzc2wtPnN0YXRlKys7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHRoZSBjbGllbnQgc2VudCBhbiBlbXB0eSBjZXJ0aWZpY2F0ZQorICAgICAqLworICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ICA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgJiYKKyAgICAgICAgc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPmluX21zZ2xlbiAgPT0gMiAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0FMRVJUICAgICAgICAgICAgJiYKKyAgICAgICAgICAgIHNzbC0+aW5fbXNnWzBdICA9PSBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9XQVJOSU5HICAmJgorICAgICAgICAgICAgc3NsLT5pbl9tc2dbMV0gID09IE1CRURUTFNfU1NMX0FMRVJUX01TR19OT19DRVJUICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJTU0x2MyBjbGllbnQgaGFzIG5vIGNlcnRpZmljYXRlIiApICk7CisKKyAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnZlcmlmeV9yZXN1bHQgPSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9NSVNTSU5HOworICAgICAgICAgICAgaWYoIGF1dGhtb2RlID09IE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfTk9fQ0xJRU5UX0NFUlRJRklDQVRFICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ICA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgJiYKKyAgICAgICAgc3NsLT5taW5vcl92ZXIgIT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPmluX2hzbGVuICAgPT0gMyArIG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICYmCisgICAgICAgICAgICBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSAgICAmJgorICAgICAgICAgICAgc3NsLT5pbl9tc2dbMF0gID09IE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFICAgJiYKKyAgICAgICAgICAgIG1lbWNtcCggc3NsLT5pbl9tc2cgKyBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSwgIlwwXDBcMCIsIDMgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJUTFN2MSBjbGllbnQgaGFzIG5vIGNlcnRpZmljYXRlIiApICk7CisKKyAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnZlcmlmeV9yZXN1bHQgPSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9NSVNTSU5HOworICAgICAgICAgICAgaWYoIGF1dGhtb2RlID09IE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfTk9fQ0xJRU5UX0NFUlRJRklDQVRFICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMSB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgfHwgXAorICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NSVl9DICovCisKKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2VydGlmaWNhdGUgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9tc2dbMF0gIT0gTUJFRFRMU19TU0xfSFNfQ0VSVElGSUNBVEUgfHwKKyAgICAgICAgc3NsLT5pbl9oc2xlbiA8IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICsgMyArIDMgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2VydGlmaWNhdGUgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEUgKTsKKyAgICB9CisKKyAgICBpID0gbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICk7CisKKyAgICAvKgorICAgICAqIFNhbWUgbWVzc2FnZSBzdHJ1Y3R1cmUgYXMgaW4gbWJlZHRsc19zc2xfd3JpdGVfY2VydGlmaWNhdGUoKQorICAgICAqLworICAgIG4gPSAoIHNzbC0+aW5fbXNnW2krMV0gPDwgOCApIHwgc3NsLT5pbl9tc2dbaSsyXTsKKworICAgIGlmKCBzc2wtPmluX21zZ1tpXSAhPSAwIHx8CisgICAgICAgIHNzbC0+aW5faHNsZW4gIT0gbiArIDMgKyBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURSApOworICAgIH0KKworICAgIC8qIEluIGNhc2Ugd2UgdHJpZWQgdG8gcmV1c2UgYSBzZXNzaW9uIGJ1dCBpdCBmYWlsZWQgKi8KKyAgICBpZiggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQgKTsKKyAgICB9CisKKyAgICBpZiggKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQgPSBtYmVkdGxzX2NhbGxvYyggMSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfY3J0ICkgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJhbGxvYyglZCBieXRlcykgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfY3J0ICkgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydCApOworCisgICAgaSArPSAzOworCisgICAgd2hpbGUoIGkgPCBzc2wtPmluX2hzbGVuICkKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPmluX21zZ1tpXSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2VydGlmaWNhdGUgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFICk7CisgICAgICAgIH0KKworICAgICAgICBuID0gKCAodW5zaWduZWQgaW50KSBzc2wtPmluX21zZ1tpICsgMV0gPDwgOCApCisgICAgICAgICAgICB8ICh1bnNpZ25lZCBpbnQpIHNzbC0+aW5fbXNnW2kgKyAyXTsKKyAgICAgICAgaSArPSAzOworCisgICAgICAgIGlmKCBuIDwgMTI4IHx8IGkgKyBuID4gc3NsLT5pbl9oc2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNlcnRpZmljYXRlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9kZXIoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZyArIGksIG4gKTsKKyAgICAgICAgaWYoIDAgIT0gcmV0ICYmICggTUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1NJR19BTEcgKyBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5EICkgIT0gcmV0ICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAiIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZGVyIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaSArPSBuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0NSVCggMywgInBlZXIgY2VydGlmaWNhdGUiLCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQgKTsKKworICAgIC8qCisgICAgICogT24gY2xpZW50LCBtYWtlIHN1cmUgdGhlIHNlcnZlciBjZXJ0IGRvZXNuJ3QgY2hhbmdlIGR1cmluZyByZW5lZ28gdG8KKyAgICAgKiBhdm9pZCAidHJpcGxlIGhhbmRzaGFrZSIgYXR0YWNrOiBodHRwczovL3NlY3VyZS1yZXN1bXB0aW9uLmNvbS8KKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pICYmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfQ0xJRU5UICYmCisgICAgICAgIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICkKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPnNlc3Npb24tPnBlZXJfY2VydCA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJuZXcgc2VydmVyIGNlcnQgZHVyaW5nIHJlbmVnb3RpYXRpb24iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHNzbC0+c2Vzc2lvbi0+cGVlcl9jZXJ0LT5yYXcubGVuICE9CisgICAgICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQtPnJhdy5sZW4gfHwKKyAgICAgICAgICAgIG1lbWNtcCggc3NsLT5zZXNzaW9uLT5wZWVyX2NlcnQtPnJhdy5wLAorICAgICAgICAgICAgICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQtPnJhdy5wLAorICAgICAgICAgICAgICAgICAgICBzc2wtPnNlc3Npb24tPnBlZXJfY2VydC0+cmF3LmxlbiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNlcnZlciBjZXJ0IGNoYW5nZWQgZHVyaW5nIHJlbmVnb3RpYXRpb24iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURSApOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gJiYgTUJFRFRMU19TU0xfQ0xJX0MgKi8KKworICAgIGlmKCBhdXRobW9kZSAhPSBNQkVEVExTX1NTTF9WRVJJRllfTk9ORSApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICpjYV9jaGFpbjsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybCAqY2FfY3JsOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQorICAgICAgICBpZiggc3NsLT5oYW5kc2hha2UtPnNuaV9jYV9jaGFpbiAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgY2FfY2hhaW4gPSBzc2wtPmhhbmRzaGFrZS0+c25pX2NhX2NoYWluOworICAgICAgICAgICAgY2FfY3JsICAgPSBzc2wtPmhhbmRzaGFrZS0+c25pX2NhX2NybDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgY2FfY2hhaW4gPSBzc2wtPmNvbmYtPmNhX2NoYWluOworICAgICAgICAgICAgY2FfY3JsICAgPSBzc2wtPmNvbmYtPmNhX2NybDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBjYV9jaGFpbiA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJnb3Qgbm8gQ0EgY2hhaW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0NBX0NIQUlOX1JFUVVJUkVEICk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBNYWluIGNoZWNrOiB2ZXJpZnkgY2VydGlmaWNhdGUKKyAgICAgICAgICovCisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X3dpdGhfcHJvZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jaGFpbiwgY2FfY3JsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmNlcnRfcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5ob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dmVyaWZ5X3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3ZyZnksIHNzbC0+Y29uZi0+cF92cmZ5ICk7CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAieDUwOV92ZXJpZnlfY2VydCIsIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU2Vjb25kYXJ5IGNoZWNrczogYWx3YXlzIGRvbmUsIGJ1dCBjaGFuZ2UgJ3JldCcgb25seSBpZiBpdCB3YXMgMAorICAgICAgICAgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICpwayA9ICZzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQtPnBrOworCisgICAgICAgICAgICAvKiBJZiBjZXJ0aWZpY2F0ZSB1c2VzIGFuIEVDIGtleSwgbWFrZSBzdXJlIHRoZSBjdXJ2ZSBpcyBPSyAqLworICAgICAgICAgICAgaWYoIG1iZWR0bHNfcGtfY2FuX2RvKCBwaywgTUJFRFRMU19QS19FQ0tFWSApICYmCisgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY2hlY2tfY3VydmUoIHNzbCwgbWJlZHRsc19wa19lYyggKnBrICktPmdycC5pZCApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNlcnRpZmljYXRlIChFQyBrZXkgY3VydmUpIiApICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKworICAgICAgICBpZiggbWJlZHRsc19zc2xfY2hlY2tfY2VydF91c2FnZSggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnN1aXRlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISBzc2wtPmNvbmYtPmVuZHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnZlcmlmeV9yZXN1bHQgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiApICk7CisgICAgICAgICAgICBpZiggcmV0ID09IDAgKQorICAgICAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEU7CisgICAgICAgIH0KKworICAgICAgICBpZiggYXV0aG1vZGUgPT0gTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMICkKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBwYXJzZSBjZXJ0aWZpY2F0ZSIgKSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVECisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRAorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRAorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVECisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEICovCisKK2ludCBtYmVkdGxzX3NzbF93cml0ZV9jaGFuZ2VfY2lwaGVyX3NwZWMoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgY2hhbmdlIGNpcGhlciBzcGVjIiApICk7CisKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0NIQU5HRV9DSVBIRVJfU1BFQzsKKyAgICBzc2wtPm91dF9tc2dsZW4gID0gMTsKKyAgICBzc2wtPm91dF9tc2dbMF0gID0gMTsKKworICAgIHNzbC0+c3RhdGUrKzsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gd3JpdGUgY2hhbmdlIGNpcGhlciBzcGVjIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfc3NsX3BhcnNlX2NoYW5nZV9jaXBoZXJfc3BlYyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBjaGFuZ2UgY2lwaGVyIHNwZWMiICkgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19DSEFOR0VfQ0lQSEVSX1NQRUMgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2hhbmdlIGNpcGhlciBzcGVjIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+aW5fbXNnbGVuICE9IDEgfHwgc3NsLT5pbl9tc2dbMF0gIT0gMSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjaGFuZ2UgY2lwaGVyIHNwZWMgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0hBTkdFX0NJUEhFUl9TUEVDICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTd2l0Y2ggdG8gb3VyIG5lZ290aWF0ZWQgdHJhbnNmb3JtIGFuZCBzZXNzaW9uIHBhcmFtZXRlcnMgZm9yIGluYm91bmQKKyAgICAgKiBkYXRhLgorICAgICAqLworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic3dpdGNoaW5nIHRvIG5ldyB0cmFuc2Zvcm0gc3BlYyBmb3IgaW5ib3VuZCBkYXRhIiApICk7CisgICAgc3NsLT50cmFuc2Zvcm1faW4gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGU7CisgICAgc3NsLT5zZXNzaW9uX2luID0gc3NsLT5zZXNzaW9uX25lZ290aWF0ZTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQorICAgICAgICBzc2xfZHRsc19yZXBsYXlfcmVzZXQoIHNzbCApOworI2VuZGlmCisKKyAgICAgICAgLyogSW5jcmVtZW50IGVwb2NoICovCisgICAgICAgIGlmKCArK3NzbC0+aW5fZXBvY2ggPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiRFRMUyBlcG9jaCB3b3VsZCB3cmFwIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9DT1VOVEVSX1dSQVBQSU5HICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKyAgICBtZW1zZXQoIHNzbC0+aW5fY3RyLCAwLCA4ICk7CisKKyAgICAvKgorICAgICAqIFNldCB0aGUgaW5fbXNnIHBvaW50ZXIgdG8gdGhlIGNvcnJlY3QgbG9jYXRpb24gYmFzZWQgb24gSVYgbGVuZ3RoCisgICAgICovCisgICAgaWYoIHNzbC0+bWlub3JfdmVyID49IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiApCisgICAgeworICAgICAgICBzc2wtPmluX21zZyA9IHNzbC0+aW5faXYgKyBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPml2bGVuIC0KKyAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmZpeGVkX2l2bGVuOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHNzbC0+aW5fbXNnID0gc3NsLT5pbl9pdjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMKQorICAgIGlmKCBtYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUoIHNzbCwgTUJFRFRMU19TU0xfQ0hBTk5FTF9JTkJPVU5EICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfaHdfcmVjb3JkX2FjdGl2YXRlIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgc3NsLT5zdGF0ZSsrOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBwYXJzZSBjaGFuZ2UgY2lwaGVyIHNwZWMiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCit2b2lkIG1iZWR0bHNfc3NsX29wdGltaXplX2NoZWNrc3VtKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyApCit7CisgICAgKCh2b2lkKSBjaXBoZXJzdWl0ZV9pbmZvKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisgICAgaWYoIHNzbC0+bWlub3JfdmVyIDwgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnVwZGF0ZV9jaGVja3N1bSA9IHNzbF91cGRhdGVfY2hlY2tzdW1fbWQ1c2hhMTsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPm1hYyA9PSBNQkVEVExTX01EX1NIQTM4NCApCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT51cGRhdGVfY2hlY2tzdW0gPSBzc2xfdXBkYXRlX2NoZWNrc3VtX3NoYTM4NDsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPm1hYyAhPSBNQkVEVExTX01EX1NIQTM4NCApCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT51cGRhdGVfY2hlY2tzdW0gPSBzc2xfdXBkYXRlX2NoZWNrc3VtX3NoYTI1NjsKKyAgICBlbHNlCisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIG1iZWR0bHNfc3NsX3Jlc2V0X2NoZWNrc3VtKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisgICAgIG1iZWR0bHNfbWQ1X3N0YXJ0cyggJnNzbC0+aGFuZHNoYWtlLT5maW5fbWQ1ICApOworICAgIG1iZWR0bHNfc2hhMV9zdGFydHMoICZzc2wtPmhhbmRzaGFrZS0+ZmluX3NoYTEgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoICZzc2wtPmhhbmRzaGFrZS0+ZmluX3NoYTI1NiwgMCApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIG1iZWR0bHNfc2hhNTEyX3N0YXJ0cyggJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhNTEyLCAxICk7CisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KK30KKworc3RhdGljIHZvaWQgc3NsX3VwZGF0ZV9jaGVja3N1bV9zdGFydCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorICAgICBtYmVkdGxzX21kNV91cGRhdGUoICZzc2wtPmhhbmRzaGFrZS0+ZmluX21kNSAsIGJ1ZiwgbGVuICk7CisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhMSwgYnVmLCBsZW4gKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICBtYmVkdGxzX3NoYTI1Nl91cGRhdGUoICZzc2wtPmhhbmRzaGFrZS0+ZmluX3NoYTI1NiwgYnVmLCBsZW4gKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoICZzc2wtPmhhbmRzaGFrZS0+ZmluX3NoYTUxMiwgYnVmLCBsZW4gKTsKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKK3N0YXRpYyB2b2lkIHNzbF91cGRhdGVfY2hlY2tzdW1fbWQ1c2hhMSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgICBtYmVkdGxzX21kNV91cGRhdGUoICZzc2wtPmhhbmRzaGFrZS0+ZmluX21kNSAsIGJ1ZiwgbGVuICk7CisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhMSwgYnVmLCBsZW4gKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorc3RhdGljIHZvaWQgc3NsX3VwZGF0ZV9jaGVja3N1bV9zaGEyNTYoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSggJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhMjU2LCBidWYsIGxlbiApOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCitzdGF0aWMgdm9pZCBzc2xfdXBkYXRlX2NoZWNrc3VtX3NoYTM4NCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgbWJlZHRsc19zaGE1MTJfdXBkYXRlKCAmc3NsLT5oYW5kc2hha2UtPmZpbl9zaGE1MTIsIGJ1ZiwgbGVuICk7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKK3N0YXRpYyB2b2lkIHNzbF9jYWxjX2ZpbmlzaGVkX3NzbCgKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGZyb20gKQoreworICAgIGNvbnN0IGNoYXIgKnNlbmRlcjsKKyAgICBtYmVkdGxzX21kNV9jb250ZXh0ICBtZDU7CisgICAgbWJlZHRsc19zaGExX2NvbnRleHQgc2hhMTsKKworICAgIHVuc2lnbmVkIGNoYXIgcGFkYnVmWzQ4XTsKKyAgICB1bnNpZ25lZCBjaGFyIG1kNXN1bVsxNl07CisgICAgdW5zaWduZWQgY2hhciBzaGExc3VtWzIwXTsKKworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gPSBzc2wtPnNlc3Npb25fbmVnb3RpYXRlOworICAgIGlmKCAhc2Vzc2lvbiApCisgICAgICAgIHNlc3Npb24gPSBzc2wtPnNlc3Npb247CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IGNhbGMgIGZpbmlzaGVkIHNzbCIgKSApOworCisgICAgbWJlZHRsc19tZDVfaW5pdCggJm1kNSApOworICAgIG1iZWR0bHNfc2hhMV9pbml0KCAmc2hhMSApOworCisgICAgbWJlZHRsc19tZDVfY2xvbmUoICZtZDUsICZzc2wtPmhhbmRzaGFrZS0+ZmluX21kNSApOworICAgIG1iZWR0bHNfc2hhMV9jbG9uZSggJnNoYTEsICZzc2wtPmhhbmRzaGFrZS0+ZmluX3NoYTEgKTsKKworICAgIC8qCisgICAgICogU1NMdjM6CisgICAgICogICBoYXNoID0KKyAgICAgKiAgICAgIE1ENSggbWFzdGVyICsgcGFkMiArCisgICAgICogICAgICAgICAgTUQ1KCBoYW5kc2hha2UgKyBzZW5kZXIgKyBtYXN0ZXIgKyBwYWQxICkgKQorICAgICAqICAgKyBTSEExKCBtYXN0ZXIgKyBwYWQyICsKKyAgICAgKiAgICAgICAgIFNIQTEoIGhhbmRzaGFrZSArIHNlbmRlciArIG1hc3RlciArIHBhZDEgKSApCisgICAgICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01ENV9BTFQpCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiZmluaXNoZWQgIG1kNSBzdGF0ZSIsICh1bnNpZ25lZCBjaGFyICopCisgICAgICAgICAgICAgICAgICAgIG1kNS5zdGF0ZSwgc2l6ZW9mKCAgbWQ1LnN0YXRlICkgKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19TSEExX0FMVCkKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJmaW5pc2hlZCBzaGExIHN0YXRlIiwgKHVuc2lnbmVkIGNoYXIgKikKKyAgICAgICAgICAgICAgICAgICBzaGExLnN0YXRlLCBzaXplb2YoIHNoYTEuc3RhdGUgKSApOworI2VuZGlmCisKKyAgICBzZW5kZXIgPSAoIGZyb20gPT0gTUJFRFRMU19TU0xfSVNfQ0xJRU5UICkgPyAiQ0xOVCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIlNSVlIiOworCisgICAgbWVtc2V0KCBwYWRidWYsIDB4MzYsIDQ4ICk7CisKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtZDUsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHNlbmRlciwgNCApOworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNSwgc2Vzc2lvbi0+bWFzdGVyLCA0OCApOworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNSwgcGFkYnVmLCA0OCApOworICAgIG1iZWR0bHNfbWQ1X2ZpbmlzaCggJm1kNSwgbWQ1c3VtICk7CisKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc2VuZGVyLCA0ICk7CisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJnNoYTEsIHNlc3Npb24tPm1hc3RlciwgNDggKTsKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgcGFkYnVmLCA0MCApOworICAgIG1iZWR0bHNfc2hhMV9maW5pc2goICZzaGExLCBzaGExc3VtICk7CisKKyAgICBtZW1zZXQoIHBhZGJ1ZiwgMHg1QywgNDggKTsKKworICAgIG1iZWR0bHNfbWQ1X3N0YXJ0cyggJm1kNSApOworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNSwgc2Vzc2lvbi0+bWFzdGVyLCA0OCApOworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNSwgcGFkYnVmLCA0OCApOworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNSwgbWQ1c3VtLCAxNiApOworICAgIG1iZWR0bHNfbWQ1X2ZpbmlzaCggJm1kNSwgYnVmICk7CisKKyAgICBtYmVkdGxzX3NoYTFfc3RhcnRzKCAmc2hhMSApOworICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZzaGExLCBzZXNzaW9uLT5tYXN0ZXIsIDQ4ICk7CisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJnNoYTEsIHBhZGJ1ZiAsIDQwICk7CisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJnNoYTEsIHNoYTFzdW0sIDIwICk7CisgICAgbWJlZHRsc19zaGExX2ZpbmlzaCggJnNoYTEsIGJ1ZiArIDE2ICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjYWxjIGZpbmlzaGVkIHJlc3VsdCIsIGJ1ZiwgMzYgKTsKKworICAgIG1iZWR0bHNfbWQ1X2ZyZWUoICAmbWQ1ICApOworICAgIG1iZWR0bHNfc2hhMV9mcmVlKCAmc2hhMSApOworCisgICAgbWJlZHRsc196ZXJvaXplKCAgcGFkYnVmLCBzaXplb2YoICBwYWRidWYgKSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggIG1kNXN1bSwgc2l6ZW9mKCAgbWQ1c3VtICkgKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIHNoYTFzdW0sIHNpemVvZiggc2hhMXN1bSApICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGNhbGMgIGZpbmlzaGVkIiApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKK3N0YXRpYyB2b2lkIHNzbF9jYWxjX2ZpbmlzaGVkX3RscygKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGZyb20gKQoreworICAgIGludCBsZW4gPSAxMjsKKyAgICBjb25zdCBjaGFyICpzZW5kZXI7CisgICAgbWJlZHRsc19tZDVfY29udGV4dCAgbWQ1OworICAgIG1iZWR0bHNfc2hhMV9jb250ZXh0IHNoYTE7CisgICAgdW5zaWduZWQgY2hhciBwYWRidWZbMzZdOworCisgICAgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiA9IHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGU7CisgICAgaWYoICFzZXNzaW9uICkKKyAgICAgICAgc2Vzc2lvbiA9IHNzbC0+c2Vzc2lvbjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gY2FsYyAgZmluaXNoZWQgdGxzIiApICk7CisKKyAgICBtYmVkdGxzX21kNV9pbml0KCAmbWQ1ICk7CisgICAgbWJlZHRsc19zaGExX2luaXQoICZzaGExICk7CisKKyAgICBtYmVkdGxzX21kNV9jbG9uZSggJm1kNSwgJnNzbC0+aGFuZHNoYWtlLT5maW5fbWQ1ICk7CisgICAgbWJlZHRsc19zaGExX2Nsb25lKCAmc2hhMSwgJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhMSApOworCisgICAgLyoKKyAgICAgKiBUTFN2MToKKyAgICAgKiAgIGhhc2ggPSBQUkYoIG1hc3RlciwgZmluaXNoZWRfbGFiZWwsCisgICAgICogICAgICAgICAgICAgICBNRDUoIGhhbmRzaGFrZSApICsgU0hBMSggaGFuZHNoYWtlICkgKVswLi4xMV0KKyAgICAgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUQ1X0FMVCkKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJmaW5pc2hlZCAgbWQ1IHN0YXRlIiwgKHVuc2lnbmVkIGNoYXIgKikKKyAgICAgICAgICAgICAgICAgICAgbWQ1LnN0YXRlLCBzaXplb2YoICBtZDUuc3RhdGUgKSApOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTFfQUxUKQorICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImZpbmlzaGVkIHNoYTEgc3RhdGUiLCAodW5zaWduZWQgY2hhciAqKQorICAgICAgICAgICAgICAgICAgIHNoYTEuc3RhdGUsIHNpemVvZiggc2hhMS5zdGF0ZSApICk7CisjZW5kaWYKKworICAgIHNlbmRlciA9ICggZnJvbSA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgKQorICAgICAgICAgICAgID8gImNsaWVudCBmaW5pc2hlZCIKKyAgICAgICAgICAgICA6ICJzZXJ2ZXIgZmluaXNoZWQiOworCisgICAgbWJlZHRsc19tZDVfZmluaXNoKCAgJm1kNSwgcGFkYnVmICk7CisgICAgbWJlZHRsc19zaGExX2ZpbmlzaCggJnNoYTEsIHBhZGJ1ZiArIDE2ICk7CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+dGxzX3ByZiggc2Vzc2lvbi0+bWFzdGVyLCA0OCwgc2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRidWYsIDM2LCBidWYsIGxlbiApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2FsYyBmaW5pc2hlZCByZXN1bHQiLCBidWYsIGxlbiApOworCisgICAgbWJlZHRsc19tZDVfZnJlZSggICZtZDUgICk7CisgICAgbWJlZHRsc19zaGExX2ZyZWUoICZzaGExICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoICBwYWRidWYsIHNpemVvZiggIHBhZGJ1ZiApICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGNhbGMgIGZpbmlzaGVkIiApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMSB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKK3N0YXRpYyB2b2lkIHNzbF9jYWxjX2ZpbmlzaGVkX3Rsc19zaGEyNTYoCisgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBmcm9tICkKK3sKKyAgICBpbnQgbGVuID0gMTI7CisgICAgY29uc3QgY2hhciAqc2VuZGVyOworICAgIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgc2hhMjU2OworICAgIHVuc2lnbmVkIGNoYXIgcGFkYnVmWzMyXTsKKworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gPSBzc2wtPnNlc3Npb25fbmVnb3RpYXRlOworICAgIGlmKCAhc2Vzc2lvbiApCisgICAgICAgIHNlc3Npb24gPSBzc2wtPnNlc3Npb247CisKKyAgICBtYmVkdGxzX3NoYTI1Nl9pbml0KCAmc2hhMjU2ICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IGNhbGMgIGZpbmlzaGVkIHRscyBzaGEyNTYiICkgKTsKKworICAgIG1iZWR0bHNfc2hhMjU2X2Nsb25lKCAmc2hhMjU2LCAmc3NsLT5oYW5kc2hha2UtPmZpbl9zaGEyNTYgKTsKKworICAgIC8qCisgICAgICogVExTdjEuMjoKKyAgICAgKiAgIGhhc2ggPSBQUkYoIG1hc3RlciwgZmluaXNoZWRfbGFiZWwsCisgICAgICogICAgICAgICAgICAgICBIYXNoKCBoYW5kc2hha2UgKSApWzAuMTFdCisgICAgICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9BTFQpCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiZmluaXNoZWQgc2hhMiBzdGF0ZSIsICh1bnNpZ25lZCBjaGFyICopCisgICAgICAgICAgICAgICAgICAgc2hhMjU2LnN0YXRlLCBzaXplb2YoIHNoYTI1Ni5zdGF0ZSApICk7CisjZW5kaWYKKworICAgIHNlbmRlciA9ICggZnJvbSA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgKQorICAgICAgICAgICAgID8gImNsaWVudCBmaW5pc2hlZCIKKyAgICAgICAgICAgICA6ICJzZXJ2ZXIgZmluaXNoZWQiOworCisgICAgbWJlZHRsc19zaGEyNTZfZmluaXNoKCAmc2hhMjU2LCBwYWRidWYgKTsKKworICAgIHNzbC0+aGFuZHNoYWtlLT50bHNfcHJmKCBzZXNzaW9uLT5tYXN0ZXIsIDQ4LCBzZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGJ1ZiwgMzIsIGJ1ZiwgbGVuICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjYWxjIGZpbmlzaGVkIHJlc3VsdCIsIGJ1ZiwgbGVuICk7CisKKyAgICBtYmVkdGxzX3NoYTI1Nl9mcmVlKCAmc2hhMjU2ICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoICBwYWRidWYsIHNpemVvZiggIHBhZGJ1ZiApICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGNhbGMgIGZpbmlzaGVkIiApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorc3RhdGljIHZvaWQgc3NsX2NhbGNfZmluaXNoZWRfdGxzX3NoYTM4NCgKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGZyb20gKQoreworICAgIGludCBsZW4gPSAxMjsKKyAgICBjb25zdCBjaGFyICpzZW5kZXI7CisgICAgbWJlZHRsc19zaGE1MTJfY29udGV4dCBzaGE1MTI7CisgICAgdW5zaWduZWQgY2hhciBwYWRidWZbNDhdOworCisgICAgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiA9IHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGU7CisgICAgaWYoICFzZXNzaW9uICkKKyAgICAgICAgc2Vzc2lvbiA9IHNzbC0+c2Vzc2lvbjsKKworICAgIG1iZWR0bHNfc2hhNTEyX2luaXQoICZzaGE1MTIgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gY2FsYyAgZmluaXNoZWQgdGxzIHNoYTM4NCIgKSApOworCisgICAgbWJlZHRsc19zaGE1MTJfY2xvbmUoICZzaGE1MTIsICZzc2wtPmhhbmRzaGFrZS0+ZmluX3NoYTUxMiApOworCisgICAgLyoKKyAgICAgKiBUTFN2MS4yOgorICAgICAqICAgaGFzaCA9IFBSRiggbWFzdGVyLCBmaW5pc2hlZF9sYWJlbCwKKyAgICAgKiAgICAgICAgICAgICAgIEhhc2goIGhhbmRzaGFrZSApIClbMC4xMV0KKyAgICAgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0FMVCkKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJmaW5pc2hlZCBzaGE1MTIgc3RhdGUiLCAodW5zaWduZWQgY2hhciAqKQorICAgICAgICAgICAgICAgICAgIHNoYTUxMi5zdGF0ZSwgc2l6ZW9mKCBzaGE1MTIuc3RhdGUgKSApOworI2VuZGlmCisKKyAgICBzZW5kZXIgPSAoIGZyb20gPT0gTUJFRFRMU19TU0xfSVNfQ0xJRU5UICkKKyAgICAgICAgICAgICA/ICJjbGllbnQgZmluaXNoZWQiCisgICAgICAgICAgICAgOiAic2VydmVyIGZpbmlzaGVkIjsKKworICAgIG1iZWR0bHNfc2hhNTEyX2ZpbmlzaCggJnNoYTUxMiwgcGFkYnVmICk7CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+dGxzX3ByZiggc2Vzc2lvbi0+bWFzdGVyLCA0OCwgc2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRidWYsIDQ4LCBidWYsIGxlbiApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2FsYyBmaW5pc2hlZCByZXN1bHQiLCBidWYsIGxlbiApOworCisgICAgbWJlZHRsc19zaGE1MTJfZnJlZSggJnNoYTUxMiApOworCisgICAgbWJlZHRsc196ZXJvaXplKCAgcGFkYnVmLCBzaXplb2YoIHBhZGJ1ZiApICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGNhbGMgIGZpbmlzaGVkIiApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworCitzdGF0aWMgdm9pZCBzc2xfaGFuZHNoYWtlX3dyYXB1cF9mcmVlX2hzX3RyYW5zZm9ybSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggIj0+IGhhbmRzaGFrZSB3cmFwdXA6IGZpbmFsIGZyZWUiICkgKTsKKworICAgIC8qCisgICAgICogRnJlZSBvdXIgaGFuZHNoYWtlIHBhcmFtcworICAgICAqLworICAgIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9mcmVlKCBzc2wtPmhhbmRzaGFrZSApOworICAgIG1iZWR0bHNfZnJlZSggc3NsLT5oYW5kc2hha2UgKTsKKyAgICBzc2wtPmhhbmRzaGFrZSA9IE5VTEw7CisKKyAgICAvKgorICAgICAqIEZyZWUgdGhlIHByZXZpb3VzIHRyYW5zZm9ybSBhbmQgc3dpdGggaW4gdGhlIGN1cnJlbnQgb25lCisgICAgICovCisgICAgaWYoIHNzbC0+dHJhbnNmb3JtICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX3RyYW5zZm9ybV9mcmVlKCBzc2wtPnRyYW5zZm9ybSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+dHJhbnNmb3JtICk7CisgICAgfQorICAgIHNzbC0+dHJhbnNmb3JtID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlOworICAgIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZSA9IE5VTEw7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggIjw9IGhhbmRzaGFrZSB3cmFwdXA6IGZpbmFsIGZyZWUiICkgKTsKK30KKwordm9pZCBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfd3JhcHVwKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXN1bWUgPSBzc2wtPmhhbmRzaGFrZS0+cmVzdW1lOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICI9PiBoYW5kc2hha2Ugd3JhcHVwIiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICkKKyAgICB7CisgICAgICAgIHNzbC0+cmVuZWdvX3N0YXR1cyA9ICBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RPTkU7CisgICAgICAgIHNzbC0+cmVuZWdvX3JlY29yZHNfc2VlbiA9IDA7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIEZyZWUgdGhlIHByZXZpb3VzIHNlc3Npb24gYW5kIHN3aXRjaCBpbiB0aGUgY3VycmVudCBvbmUKKyAgICAgKi8KKyAgICBpZiggc3NsLT5zZXNzaW9uICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorICAgICAgICAvKiBSRkMgNzM2NiAzLjE6IGtlZXAgdGhlIEV0TSBzdGF0ZSAqLworICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5lbmNyeXB0X3RoZW5fbWFjID0KKyAgICAgICAgICAgICAgICAgIHNzbC0+c2Vzc2lvbi0+ZW5jcnlwdF90aGVuX21hYzsKKyNlbmRpZgorCisgICAgICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25fZnJlZSggc3NsLT5zZXNzaW9uICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT5zZXNzaW9uICk7CisgICAgfQorICAgIHNzbC0+c2Vzc2lvbiA9IHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGU7CisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZSA9IE5VTEw7CisKKyAgICAvKgorICAgICAqIEFkZCBjYWNoZSBlbnRyeQorICAgICAqLworICAgIGlmKCBzc2wtPmNvbmYtPmZfc2V0X2NhY2hlICE9IE5VTEwgJiYKKyAgICAgICAgc3NsLT5zZXNzaW9uLT5pZF9sZW4gIT0gMCAmJgorICAgICAgICByZXN1bWUgPT0gMCApCisgICAgeworICAgICAgICBpZiggc3NsLT5jb25mLT5mX3NldF9jYWNoZSggc3NsLT5jb25mLT5wX2NhY2hlLCBzc2wtPnNlc3Npb24gKSAhPSAwICkKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiY2FjaGUgZGlkIG5vdCBzdG9yZSBzZXNzaW9uIiApICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gJiYKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPmZsaWdodCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIC8qIENhbmNlbCBoYW5kc2hha2UgdGltZXIgKi8KKyAgICAgICAgc3NsX3NldF90aW1lciggc3NsLCAwICk7CisKKyAgICAgICAgLyogS2VlcCBsYXN0IGZsaWdodCBhcm91bmQgaW4gY2FzZSB3ZSBuZWVkIHRvIHJlc2VuZCBpdDoKKyAgICAgICAgICogd2UgbmVlZCB0aGUgaGFuZHNoYWtlIGFuZCB0cmFuc2Zvcm0gc3RydWN0dXJlcyBmb3IgdGhhdCAqLworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNraXAgZnJlZWluZyBoYW5kc2hha2UgYW5kIHRyYW5zZm9ybSIgKSApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgc3NsX2hhbmRzaGFrZV93cmFwdXBfZnJlZV9oc190cmFuc2Zvcm0oIHNzbCApOworCisgICAgc3NsLT5zdGF0ZSsrOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICI8PSBoYW5kc2hha2Ugd3JhcHVwIiApICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF93cml0ZV9maW5pc2hlZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0LCBoYXNoX2xlbjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgZmluaXNoZWQiICkgKTsKKworICAgIC8qCisgICAgICogU2V0IHRoZSBvdXRfbXNnIHBvaW50ZXIgdG8gdGhlIGNvcnJlY3QgbG9jYXRpb24gYmFzZWQgb24gSVYgbGVuZ3RoCisgICAgICovCisgICAgaWYoIHNzbC0+bWlub3JfdmVyID49IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiApCisgICAgeworICAgICAgICBzc2wtPm91dF9tc2cgPSBzc2wtPm91dF9pdiArIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+aXZsZW4gLQorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmZpeGVkX2l2bGVuOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHNzbC0+b3V0X21zZyA9IHNzbC0+b3V0X2l2OworCisgICAgc3NsLT5oYW5kc2hha2UtPmNhbGNfZmluaXNoZWQoIHNzbCwgc3NsLT5vdXRfbXNnICsgNCwgc3NsLT5jb25mLT5lbmRwb2ludCApOworCisgICAgLyoKKyAgICAgKiBSRkMgNTI0NiA3LjQuOSAoUGFnZSA2Mykgc2F5cyAxMiBpcyB0aGUgZGVmYXVsdCBsZW5ndGggYW5kIGNpcGhlcnN1aXRlcworICAgICAqIG1heSBkZWZpbmUgc29tZSBvdGhlciB2YWx1ZS4gQ3VycmVudGx5IChlYXJseSAyMDE2KSwgbm8gZGVmaW5lZAorICAgICAqIGNpcGhlcnN1aXRlIGRvZXMgdGhpcyAoYW5kIHRoaXMgaXMgdW5saWtlbHkgdG8gY2hhbmdlIGFzIGFjdGl2aXR5IGhhcworICAgICAqIG1vdmVkIHRvIFRMUyAxLjMgbm93KSBzbyB3ZSBjYW4ga2VlcCB0aGUgaGFyZGNvZGVkIDEyIGhlcmUuCisgICAgICovCisgICAgaGFzaF9sZW4gPSAoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApID8gMzYgOiAxMjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBzc2wtPnZlcmlmeV9kYXRhX2xlbiA9IGhhc2hfbGVuOworICAgIG1lbWNweSggc3NsLT5vd25fdmVyaWZ5X2RhdGEsIHNzbC0+b3V0X21zZyArIDQsIGhhc2hfbGVuICk7CisjZW5kaWYKKworICAgIHNzbC0+b3V0X21zZ2xlbiAgPSA0ICsgaGFzaF9sZW47CisgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U7CisgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0hTX0ZJTklTSEVEOworCisgICAgLyoKKyAgICAgKiBJbiBjYXNlIG9mIHNlc3Npb24gcmVzdW1pbmcsIGludmVydCB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIKKyAgICAgKiBDaGFuZ2VDaXBoZXJTcGVjIG1lc3NhZ2VzIG9yZGVyLgorICAgICAqLworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+cmVzdW1lICE9IDAgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgICAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgKQorICAgICAgICAgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9XUkFQVVA7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgICAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgKQorICAgICAgICAgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX0NMSUVOVF9DSEFOR0VfQ0lQSEVSX1NQRUM7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgICAgICBzc2wtPnN0YXRlKys7CisKKyAgICAvKgorICAgICAqIFN3aXRjaCB0byBvdXIgbmVnb3RpYXRlZCB0cmFuc2Zvcm0gYW5kIHNlc3Npb24gcGFyYW1ldGVycyBmb3Igb3V0Ym91bmQKKyAgICAgKiBkYXRhLgorICAgICAqLworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic3dpdGNoaW5nIHRvIG5ldyB0cmFuc2Zvcm0gc3BlYyBmb3Igb3V0Ym91bmQgZGF0YSIgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpOworCisgICAgICAgIC8qIFJlbWVtYmVyIGN1cnJlbnQgZXBvY2ggc2V0dGluZ3MgZm9yIHJlc2VuZGluZyAqLworICAgICAgICBzc2wtPmhhbmRzaGFrZS0+YWx0X3RyYW5zZm9ybV9vdXQgPSBzc2wtPnRyYW5zZm9ybV9vdXQ7CisgICAgICAgIG1lbWNweSggc3NsLT5oYW5kc2hha2UtPmFsdF9vdXRfY3RyLCBzc2wtPm91dF9jdHIsIDggKTsKKworICAgICAgICAvKiBTZXQgc2VxdWVuY2VfbnVtYmVyIHRvIHplcm8gKi8KKyAgICAgICAgbWVtc2V0KCBzc2wtPm91dF9jdHIgKyAyLCAwLCA2ICk7CisKKyAgICAgICAgLyogSW5jcmVtZW50IGVwb2NoICovCisgICAgICAgIGZvciggaSA9IDI7IGkgPiAwOyBpLS0gKQorICAgICAgICAgICAgaWYoICsrc3NsLT5vdXRfY3RyW2kgLSAxXSAhPSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBUaGUgbG9vcCBnb2VzIHRvIGl0cyBlbmQgaWZmIHRoZSBjb3VudGVyIGlzIHdyYXBwaW5nICovCisgICAgICAgIGlmKCBpID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIkRUTFMgZXBvY2ggd291bGQgd3JhcCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQ09VTlRFUl9XUkFQUElORyApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19EVExTICovCisgICAgbWVtc2V0KCBzc2wtPm91dF9jdHIsIDAsIDggKTsKKworICAgIHNzbC0+dHJhbnNmb3JtX291dCA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZTsKKyAgICBzc2wtPnNlc3Npb25fb3V0ID0gc3NsLT5zZXNzaW9uX25lZ290aWF0ZTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMKQorICAgIGlmKCBtYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUoIHNzbCwgTUJFRFRMU19TU0xfQ0hBTk5FTF9PVVRCT1VORCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2h3X3JlY29yZF9hY3RpdmF0ZSIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFJTEVEICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9mbGlnaHRfY29tcGxldGVkKCBzc2wgKTsKKyNlbmRpZgorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSBmaW5pc2hlZCIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisjZGVmaW5lIFNTTF9NQVhfSEFTSF9MRU4gMzYKKyNlbHNlCisjZGVmaW5lIFNTTF9NQVhfSEFTSF9MRU4gMTIKKyNlbmRpZgorCitpbnQgbWJlZHRsc19zc2xfcGFyc2VfZmluaXNoZWQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBpbnQgaGFzaF9sZW47CisgICAgdW5zaWduZWQgY2hhciBidWZbU1NMX01BWF9IQVNIX0xFTl07CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHBhcnNlIGZpbmlzaGVkIiApICk7CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+Y2FsY19maW5pc2hlZCggc3NsLCBidWYsIHNzbC0+Y29uZi0+ZW5kcG9pbnQgXiAxICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+aW5fbXNndHlwZSAhPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGZpbmlzaGVkIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFICk7CisgICAgfQorCisgICAgLyogVGhlcmUgaXMgY3VycmVudGx5IG5vIGNpcGhlcnN1aXRlIHVzaW5nIGFub3RoZXIgbGVuZ3RoIHdpdGggVExTIDEuMiAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICAgICAgaGFzaF9sZW4gPSAzNjsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgaGFzaF9sZW4gPSAxMjsKKworICAgIGlmKCBzc2wtPmluX21zZ1swXSAhPSBNQkVEVExTX1NTTF9IU19GSU5JU0hFRCB8fAorICAgICAgICBzc2wtPmluX2hzbGVuICAhPSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSArIGhhc2hfbGVuICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGZpbmlzaGVkIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0ZJTklTSEVEICk7CisgICAgfQorCisgICAgaWYoIG1iZWR0bHNfc3NsX3NhZmVyX21lbWNtcCggc3NsLT5pbl9tc2cgKyBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSwKKyAgICAgICAgICAgICAgICAgICAgICBidWYsIGhhc2hfbGVuICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBmaW5pc2hlZCBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19GSU5JU0hFRCApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBzc2wtPnZlcmlmeV9kYXRhX2xlbiA9IGhhc2hfbGVuOworICAgIG1lbWNweSggc3NsLT5wZWVyX3ZlcmlmeV9kYXRhLCBidWYsIGhhc2hfbGVuICk7CisjZW5kaWYKKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+cmVzdW1lICE9IDAgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgICAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgKQorICAgICAgICAgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX0NMSUVOVF9DSEFOR0VfQ0lQSEVSX1NQRUM7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgICAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgKQorICAgICAgICAgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9XUkFQVVA7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgICAgICBzc2wtPnN0YXRlKys7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgIG1iZWR0bHNfc3NsX3JlY3ZfZmxpZ2h0X2NvbXBsZXRlZCggc3NsICk7CisjZW5kaWYKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gcGFyc2UgZmluaXNoZWQiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgdm9pZCBzc2xfaGFuZHNoYWtlX3BhcmFtc19pbml0KCBtYmVkdGxzX3NzbF9oYW5kc2hha2VfcGFyYW1zICpoYW5kc2hha2UgKQoreworICAgIG1lbXNldCggaGFuZHNoYWtlLCAwLCBzaXplb2YoIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9wYXJhbXMgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyAgICAgbWJlZHRsc19tZDVfaW5pdCggICAmaGFuZHNoYWtlLT5maW5fbWQ1ICApOworICAgIG1iZWR0bHNfc2hhMV9pbml0KCAgICZoYW5kc2hha2UtPmZpbl9zaGExICk7CisgICAgIG1iZWR0bHNfbWQ1X3N0YXJ0cyggJmhhbmRzaGFrZS0+ZmluX21kNSAgKTsKKyAgICBtYmVkdGxzX3NoYTFfc3RhcnRzKCAmaGFuZHNoYWtlLT5maW5fc2hhMSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIG1iZWR0bHNfc2hhMjU2X2luaXQoICAgJmhhbmRzaGFrZS0+ZmluX3NoYTI1NiAgICApOworICAgIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cyggJmhhbmRzaGFrZS0+ZmluX3NoYTI1NiwgMCApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIG1iZWR0bHNfc2hhNTEyX2luaXQoICAgJmhhbmRzaGFrZS0+ZmluX3NoYTUxMiAgICApOworICAgIG1iZWR0bHNfc2hhNTEyX3N0YXJ0cyggJmhhbmRzaGFrZS0+ZmluX3NoYTUxMiwgMSApOworI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKKyAgICBoYW5kc2hha2UtPnVwZGF0ZV9jaGVja3N1bSA9IHNzbF91cGRhdGVfY2hlY2tzdW1fc3RhcnQ7CisgICAgaGFuZHNoYWtlLT5zaWdfYWxnID0gTUJFRFRMU19TU0xfSEFTSF9TSEExOworCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorICAgIG1iZWR0bHNfZGhtX2luaXQoICZoYW5kc2hha2UtPmRobV9jdHggKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpCisgICAgbWJlZHRsc19lY2RoX2luaXQoICZoYW5kc2hha2UtPmVjZGhfY3R4ICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICBtYmVkdGxzX2VjanBha2VfaW5pdCggJmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHggKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgIGhhbmRzaGFrZS0+ZWNqcGFrZV9jYWNoZSA9IE5VTEw7CisgICAgaGFuZHNoYWtlLT5lY2pwYWtlX2NhY2hlX2xlbiA9IDA7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQorICAgIGhhbmRzaGFrZS0+c25pX2F1dGhtb2RlID0gTUJFRFRMU19TU0xfVkVSSUZZX1VOU0VUOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNzbF90cmFuc2Zvcm1faW5pdCggbWJlZHRsc19zc2xfdHJhbnNmb3JtICp0cmFuc2Zvcm0gKQoreworICAgIG1lbXNldCggdHJhbnNmb3JtLCAwLCBzaXplb2YobWJlZHRsc19zc2xfdHJhbnNmb3JtKSApOworCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJnRyYW5zZm9ybS0+Y2lwaGVyX2N0eF9lbmMgKTsKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmdHJhbnNmb3JtLT5jaXBoZXJfY3R4X2RlYyApOworCisgICAgbWJlZHRsc19tZF9pbml0KCAmdHJhbnNmb3JtLT5tZF9jdHhfZW5jICk7CisgICAgbWJlZHRsc19tZF9pbml0KCAmdHJhbnNmb3JtLT5tZF9jdHhfZGVjICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfc2Vzc2lvbl9pbml0KCBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uICkKK3sKKyAgICBtZW1zZXQoIHNlc3Npb24sIDAsIHNpemVvZihtYmVkdGxzX3NzbF9zZXNzaW9uKSApOworfQorCitzdGF0aWMgaW50IHNzbF9oYW5kc2hha2VfaW5pdCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICAvKiBDbGVhciBvbGQgaGFuZHNoYWtlIGluZm9ybWF0aW9uIGlmIHByZXNlbnQgKi8KKyAgICBpZiggc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlICkKKyAgICAgICAgbWJlZHRsc19zc2xfdHJhbnNmb3JtX2ZyZWUoIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZSApOworICAgIGlmKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlICkKKyAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9mcmVlKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlICk7CisgICAgaWYoIHNzbC0+aGFuZHNoYWtlICkKKyAgICAgICAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX2ZyZWUoIHNzbC0+aGFuZHNoYWtlICk7CisKKyAgICAvKgorICAgICAqIEVpdGhlciB0aGUgcG9pbnRlcnMgYXJlIG5vdyBOVUxMIG9yIGNsZWFyZWQgcHJvcGVybHkgYW5kIGNhbiBiZSBmcmVlZC4KKyAgICAgKiBOb3cgYWxsb2NhdGUgbWlzc2luZyBzdHJ1Y3R1cmVzLgorICAgICAqLworICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUgPT0gTlVMTCApCisgICAgeworICAgICAgICBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKG1iZWR0bHNfc3NsX3RyYW5zZm9ybSkgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5zZXNzaW9uX25lZ290aWF0ZSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKG1iZWR0bHNfc3NsX3Nlc3Npb24pICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgc3NsLT5oYW5kc2hha2UgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9wYXJhbXMpICk7CisgICAgfQorCisgICAgLyogQWxsIHBvaW50ZXJzIHNob3VsZCBleGlzdCBhbmQgY2FuIGJlIGRpcmVjdGx5IGZyZWVkIHdpdGhvdXQgaXNzdWUgKi8KKyAgICBpZiggc3NsLT5oYW5kc2hha2UgPT0gTlVMTCB8fAorICAgICAgICBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUgPT0gTlVMTCB8fAorICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJhbGxvYygpIG9mIHNzbCBzdWItY29udGV4dHMgZmFpbGVkIiApICk7CisKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPmhhbmRzaGFrZSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUgKTsKKworICAgICAgICBzc2wtPmhhbmRzaGFrZSA9IE5VTEw7CisgICAgICAgIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZSA9IE5VTEw7CisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUgPSBOVUxMOworCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25faW5pdCggc3NsLT5zZXNzaW9uX25lZ290aWF0ZSApOworICAgIHNzbF90cmFuc2Zvcm1faW5pdCggc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlICk7CisgICAgc3NsX2hhbmRzaGFrZV9wYXJhbXNfaW5pdCggc3NsLT5oYW5kc2hha2UgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5hbHRfdHJhbnNmb3JtX291dCA9IHNzbC0+dHJhbnNmb3JtX291dDsKKworICAgICAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgKQorICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfc3RhdGUgPSBNQkVEVExTX1NTTF9SRVRSQU5TX1BSRVBBUklORzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfc3RhdGUgPSBNQkVEVExTX1NTTF9SRVRSQU5TX1dBSVRJTkc7CisKKyAgICAgICAgc3NsX3NldF90aW1lciggc3NsLCAwICk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisvKiBEdW1teSBjb29raWUgY2FsbGJhY2tzIGZvciBkZWZhdWx0cyAqLworc3RhdGljIGludCBzc2xfY29va2llX3dyaXRlX2R1bW15KCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjbGlfaWQsIHNpemVfdCBjbGlfaWRfbGVuICkKK3sKKyAgICAoKHZvaWQpIGN0eCk7CisgICAgKCh2b2lkKSBwKTsKKyAgICAoKHZvaWQpIGVuZCk7CisgICAgKCh2b2lkKSBjbGlfaWQpOworICAgICgodm9pZCkgY2xpX2lkX2xlbik7CisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFICk7Cit9CisKK3N0YXRpYyBpbnQgc3NsX2Nvb2tpZV9jaGVja19kdW1teSggdm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvb2tpZSwgc2l6ZV90IGNvb2tpZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xpX2lkLCBzaXplX3QgY2xpX2lkX2xlbiApCit7CisgICAgKCh2b2lkKSBjdHgpOworICAgICgodm9pZCkgY29va2llKTsKKyAgICAoKHZvaWQpIGNvb2tpZV9sZW4pOworICAgICgodm9pZCkgY2xpX2lkKTsKKyAgICAoKHZvaWQpIGNsaV9pZF9sZW4pOworCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZICYmIE1CRURUTFNfU1NMX1NSVl9DICovCisKKy8qCisgKiBJbml0aWFsaXplIGFuIFNTTCBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfaW5pdCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBtZW1zZXQoIHNzbCwgMCwgc2l6ZW9mKCBtYmVkdGxzX3NzbF9jb250ZXh0ICkgKTsKK30KKworLyoKKyAqIFNldHVwIGFuIFNTTCBjb250ZXh0CisgKi8KK2ludCBtYmVkdGxzX3NzbF9zZXR1cCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYgKQoreworICAgIGludCByZXQ7CisgICAgY29uc3Qgc2l6ZV90IGxlbiA9IE1CRURUTFNfU1NMX0JVRkZFUl9MRU47CisKKyAgICBzc2wtPmNvbmYgPSBjb25mOworCisgICAgLyoKKyAgICAgKiBQcmVwYXJlIGJhc2Ugc3RydWN0dXJlcworICAgICAqLworICAgIGlmKCAoIHNzbC0+IGluX2J1ZiA9IG1iZWR0bHNfY2FsbG9jKCAxLCBsZW4gKSApID09IE5VTEwgfHwKKyAgICAgICAgKCBzc2wtPm91dF9idWYgPSBtYmVkdGxzX2NhbGxvYyggMSwgbGVuICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYWxsb2MoJWQgYnl0ZXMpIGZhaWxlZCIsIGxlbiApICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT5pbl9idWYgKTsKKyAgICAgICAgc3NsLT5pbl9idWYgPSBOVUxMOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIGNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyAgICAgICAgc3NsLT5vdXRfaGRyID0gc3NsLT5vdXRfYnVmOworICAgICAgICBzc2wtPm91dF9jdHIgPSBzc2wtPm91dF9idWYgKyAgMzsKKyAgICAgICAgc3NsLT5vdXRfbGVuID0gc3NsLT5vdXRfYnVmICsgMTE7CisgICAgICAgIHNzbC0+b3V0X2l2ICA9IHNzbC0+b3V0X2J1ZiArIDEzOworICAgICAgICBzc2wtPm91dF9tc2cgPSBzc2wtPm91dF9idWYgKyAxMzsKKworICAgICAgICBzc2wtPmluX2hkciA9IHNzbC0+aW5fYnVmOworICAgICAgICBzc2wtPmluX2N0ciA9IHNzbC0+aW5fYnVmICsgIDM7CisgICAgICAgIHNzbC0+aW5fbGVuID0gc3NsLT5pbl9idWYgKyAxMTsKKyAgICAgICAgc3NsLT5pbl9pdiAgPSBzc2wtPmluX2J1ZiArIDEzOworICAgICAgICBzc2wtPmluX21zZyA9IHNzbC0+aW5fYnVmICsgMTM7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgc3NsLT5vdXRfY3RyID0gc3NsLT5vdXRfYnVmOworICAgICAgICBzc2wtPm91dF9oZHIgPSBzc2wtPm91dF9idWYgKyAgODsKKyAgICAgICAgc3NsLT5vdXRfbGVuID0gc3NsLT5vdXRfYnVmICsgMTE7CisgICAgICAgIHNzbC0+b3V0X2l2ICA9IHNzbC0+b3V0X2J1ZiArIDEzOworICAgICAgICBzc2wtPm91dF9tc2cgPSBzc2wtPm91dF9idWYgKyAxMzsKKworICAgICAgICBzc2wtPmluX2N0ciA9IHNzbC0+aW5fYnVmOworICAgICAgICBzc2wtPmluX2hkciA9IHNzbC0+aW5fYnVmICsgIDg7CisgICAgICAgIHNzbC0+aW5fbGVuID0gc3NsLT5pbl9idWYgKyAxMTsKKyAgICAgICAgc3NsLT5pbl9pdiAgPSBzc2wtPmluX2J1ZiArIDEzOworICAgICAgICBzc2wtPmluX21zZyA9IHNzbC0+aW5fYnVmICsgMTM7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gc3NsX2hhbmRzaGFrZV9pbml0KCBzc2wgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBSZXNldCBhbiBpbml0aWFsaXplZCBhbmQgdXNlZCBTU0wgY29udGV4dCBmb3IgcmUtdXNlIHdoaWxlIHJldGFpbmluZworICogYWxsIGFwcGxpY2F0aW9uLXNldCB2YXJpYWJsZXMsIGZ1bmN0aW9uIHBvaW50ZXJzIGFuZCBkYXRhLgorICoKKyAqIElmIHBhcnRpYWwgaXMgbm9uLXplcm8sIGtlZXAgZGF0YSBpbiB0aGUgaW5wdXQgYnVmZmVyIGFuZCBjbGllbnQgSUQuCisgKiAoVXNlIHdoZW4gYSBEVExTIGNsaWVudCByZWNvbm5lY3RzIGZyb20gdGhlIHNhbWUgcG9ydC4pCisgKi8KK3N0YXRpYyBpbnQgc3NsX3Nlc3Npb25fcmVzZXRfaW50KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBwYXJ0aWFsICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX0hFTExPX1JFUVVFU1Q7CisKKyAgICAvKiBDYW5jZWwgYW55IHBvc3NpYmx5IHJ1bm5pbmcgdGltZXIgKi8KKyAgICBzc2xfc2V0X3RpbWVyKCBzc2wsIDAgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBzc2wtPnJlbmVnb19zdGF0dXMgPSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRTsKKyAgICBzc2wtPnJlbmVnb19yZWNvcmRzX3NlZW4gPSAwOworCisgICAgc3NsLT52ZXJpZnlfZGF0YV9sZW4gPSAwOworICAgIG1lbXNldCggc3NsLT5vd25fdmVyaWZ5X2RhdGEsIDAsIE1CRURUTFNfU1NMX1ZFUklGWV9EQVRBX01BWF9MRU4gKTsKKyAgICBtZW1zZXQoIHNzbC0+cGVlcl92ZXJpZnlfZGF0YSwgMCwgTUJFRFRMU19TU0xfVkVSSUZZX0RBVEFfTUFYX0xFTiApOworI2VuZGlmCisgICAgc3NsLT5zZWN1cmVfcmVuZWdvdGlhdGlvbiA9IE1CRURUTFNfU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OOworCisgICAgc3NsLT5pbl9vZmZ0ID0gTlVMTDsKKworICAgIHNzbC0+aW5fbXNnID0gc3NsLT5pbl9idWYgKyAxMzsKKyAgICBzc2wtPmluX21zZ3R5cGUgPSAwOworICAgIHNzbC0+aW5fbXNnbGVuID0gMDsKKyAgICBpZiggcGFydGlhbCA9PSAwICkKKyAgICAgICAgc3NsLT5pbl9sZWZ0ID0gMDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQgPSAwOworICAgIHNzbC0+aW5fZXBvY2ggPSAwOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQorICAgIHNzbF9kdGxzX3JlcGxheV9yZXNldCggc3NsICk7CisjZW5kaWYKKworICAgIHNzbC0+aW5faHNsZW4gPSAwOworICAgIHNzbC0+bmJfemVybyA9IDA7CisgICAgc3NsLT5yZWNvcmRfcmVhZCA9IDA7CisKKyAgICBzc2wtPm91dF9tc2cgPSBzc2wtPm91dF9idWYgKyAxMzsKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gMDsKKyAgICBzc2wtPm91dF9tc2dsZW4gPSAwOworICAgIHNzbC0+b3V0X2xlZnQgPSAwOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcpCisgICAgaWYoIHNzbC0+c3BsaXRfZG9uZSAhPSBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElOR19ESVNBQkxFRCApCisgICAgICAgIHNzbC0+c3BsaXRfZG9uZSA9IDA7CisjZW5kaWYKKworICAgIHNzbC0+dHJhbnNmb3JtX2luID0gTlVMTDsKKyAgICBzc2wtPnRyYW5zZm9ybV9vdXQgPSBOVUxMOworCisgICAgbWVtc2V0KCBzc2wtPm91dF9idWYsIDAsIE1CRURUTFNfU1NMX0JVRkZFUl9MRU4gKTsKKyAgICBpZiggcGFydGlhbCA9PSAwICkKKyAgICAgICAgbWVtc2V0KCBzc2wtPmluX2J1ZiwgMCwgTUJFRFRMU19TU0xfQlVGRkVSX0xFTiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwpCisgICAgaWYoIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZXNldCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiZ29pbmcgZm9yIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZXNldCgpIiApICk7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZXNldCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfaHdfcmVjb3JkX3Jlc2V0IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYoIHNzbC0+dHJhbnNmb3JtICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX3RyYW5zZm9ybV9mcmVlKCBzc2wtPnRyYW5zZm9ybSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+dHJhbnNmb3JtICk7CisgICAgICAgIHNzbC0+dHJhbnNmb3JtID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiggc3NsLT5zZXNzaW9uICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25fZnJlZSggc3NsLT5zZXNzaW9uICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT5zZXNzaW9uICk7CisgICAgICAgIHNzbC0+c2Vzc2lvbiA9IE5VTEw7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIHNzbC0+YWxwbl9jaG9zZW4gPSBOVUxMOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgIGlmKCBwYXJ0aWFsID09IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPmNsaV9pZCApOworICAgICAgICBzc2wtPmNsaV9pZCA9IE5VTEw7CisgICAgICAgIHNzbC0+Y2xpX2lkX2xlbiA9IDA7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiggKCByZXQgPSBzc2xfaGFuZHNoYWtlX2luaXQoIHNzbCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFJlc2V0IGFuIGluaXRpYWxpemVkIGFuZCB1c2VkIFNTTCBjb250ZXh0IGZvciByZS11c2Ugd2hpbGUgcmV0YWluaW5nCisgKiBhbGwgYXBwbGljYXRpb24tc2V0IHZhcmlhYmxlcywgZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGRhdGEuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIHJldHVybiggc3NsX3Nlc3Npb25fcmVzZXRfaW50KCBzc2wsIDAgKSApOworfQorCisvKgorICogU1NMIHNldCBhY2Nlc3NvcnMKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2VuZHBvaW50KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGludCBlbmRwb2ludCApCit7CisgICAgY29uZi0+ZW5kcG9pbnQgICA9IGVuZHBvaW50OworfQorCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfdHJhbnNwb3J0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGludCB0cmFuc3BvcnQgKQoreworICAgIGNvbmYtPnRyYW5zcG9ydCA9IHRyYW5zcG9ydDsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWSkKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9kdGxzX2FudGlfcmVwbGF5KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNoYXIgbW9kZSApCit7CisgICAgY29uZi0+YW50aV9yZXBsYXkgPSBtb2RlOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYmFkbWFjX2xpbWl0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIHVuc2lnbmVkIGxpbWl0ICkKK3sKKyAgICBjb25mLT5iYWRtYWNfbGltaXQgPSBsaW1pdDsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX2hhbmRzaGFrZV90aW1lb3V0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIHVpbnQzMl90IG1pbiwgdWludDMyX3QgbWF4ICkKK3sKKyAgICBjb25mLT5oc190aW1lb3V0X21pbiA9IG1pbjsKKyAgICBjb25mLT5oc190aW1lb3V0X21heCA9IG1heDsKK30KKyNlbmRpZgorCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfYXV0aG1vZGUoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IGF1dGhtb2RlICkKK3sKKyAgICBjb25mLT5hdXRobW9kZSAgID0gYXV0aG1vZGU7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl92ZXJpZnkoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfdnJmeSkodm9pZCAqLCBtYmVkdGxzX3g1MDlfY3J0ICosIGludCwgdWludDMyX3QgKiksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3ZyZnkgKQoreworICAgIGNvbmYtPmZfdnJmeSAgICAgID0gZl92cmZ5OworICAgIGNvbmYtPnBfdnJmeSAgICAgID0gcF92cmZ5OworfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgY29uZi0+Zl9ybmcgICAgICA9IGZfcm5nOworICAgIGNvbmYtPnBfcm5nICAgICAgPSBwX3JuZzsKK30KKwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2RiZyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgdm9pZCAoKmZfZGJnKSh2b2lkICosIGludCwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKiksCisgICAgICAgICAgICAgICAgICB2b2lkICAqcF9kYmcgKQoreworICAgIGNvbmYtPmZfZGJnICAgICAgPSBmX2RiZzsKKyAgICBjb25mLT5wX2RiZyAgICAgID0gcF9kYmc7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfc2V0X2JpbyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICB2b2lkICpwX2JpbywKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF90ICpmX3NlbmQsCisgICAgICAgIG1iZWR0bHNfc3NsX3JlY3ZfdCAqZl9yZWN2LAorICAgICAgICBtYmVkdGxzX3NzbF9yZWN2X3RpbWVvdXRfdCAqZl9yZWN2X3RpbWVvdXQgKQoreworICAgIHNzbC0+cF9iaW8gICAgICAgICAgPSBwX2JpbzsKKyAgICBzc2wtPmZfc2VuZCAgICAgICAgID0gZl9zZW5kOworICAgIHNzbC0+Zl9yZWN2ICAgICAgICAgPSBmX3JlY3Y7CisgICAgc3NsLT5mX3JlY3ZfdGltZW91dCA9IGZfcmVjdl90aW1lb3V0OworfQorCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfcmVhZF90aW1lb3V0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIHVpbnQzMl90IHRpbWVvdXQgKQoreworICAgIGNvbmYtPnJlYWRfdGltZW91dCAgID0gdGltZW91dDsKK30KKwordm9pZCBtYmVkdGxzX3NzbF9zZXRfdGltZXJfY2IoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NldF90aW1lcl90ICpmX3NldF90aW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9nZXRfdGltZXJfdCAqZl9nZXRfdGltZXIgKQoreworICAgIHNzbC0+cF90aW1lciAgICAgICAgPSBwX3RpbWVyOworICAgIHNzbC0+Zl9zZXRfdGltZXIgICAgPSBmX3NldF90aW1lcjsKKyAgICBzc2wtPmZfZ2V0X3RpbWVyICAgID0gZl9nZXRfdGltZXI7CisKKyAgICAvKiBNYWtlIHN1cmUgd2Ugc3RhcnQgd2l0aCBubyB0aW1lciBydW5uaW5nICovCisgICAgc3NsX3NldF90aW1lciggc3NsLCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fY2FjaGUoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgdm9pZCAqcF9jYWNoZSwKKyAgICAgICAgaW50ICgqZl9nZXRfY2FjaGUpKHZvaWQgKiwgbWJlZHRsc19zc2xfc2Vzc2lvbiAqKSwKKyAgICAgICAgaW50ICgqZl9zZXRfY2FjaGUpKHZvaWQgKiwgY29uc3QgbWJlZHRsc19zc2xfc2Vzc2lvbiAqKSApCit7CisgICAgY29uZi0+cF9jYWNoZSA9IHBfY2FjaGU7CisgICAgY29uZi0+Zl9nZXRfY2FjaGUgPSBmX2dldF9jYWNoZTsKKyAgICBjb25mLT5mX3NldF9jYWNoZSA9IGZfc2V0X2NhY2hlOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NSVl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQoraW50IG1iZWR0bHNfc3NsX3NldF9zZXNzaW9uKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGNvbnN0IG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggc3NsID09IE5VTEwgfHwKKyAgICAgICAgc2Vzc2lvbiA9PSBOVUxMIHx8CisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUgPT0gTlVMTCB8fAorICAgICAgICBzc2wtPmNvbmYtPmVuZHBvaW50ICE9IE1CRURUTFNfU1NMX0lTX0NMSUVOVCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IHNzbF9zZXNzaW9uX2NvcHkoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUsIHNlc3Npb24gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgc3NsLT5oYW5kc2hha2UtPnJlc3VtZSA9IDE7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DTElfQyAqLworCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqY2lwaGVyc3VpdGVzICkKK3sKKyAgICBjb25mLT5jaXBoZXJzdWl0ZV9saXN0W01CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMF0gPSBjaXBoZXJzdWl0ZXM7CisgICAgY29uZi0+Y2lwaGVyc3VpdGVfbGlzdFtNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzFdID0gY2lwaGVyc3VpdGVzOworICAgIGNvbmYtPmNpcGhlcnN1aXRlX2xpc3RbTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yXSA9IGNpcGhlcnN1aXRlczsKKyAgICBjb25mLT5jaXBoZXJzdWl0ZV9saXN0W01CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fM10gPSBjaXBoZXJzdWl0ZXM7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXNfZm9yX3ZlcnNpb24oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqY2lwaGVyc3VpdGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1ham9yLCBpbnQgbWlub3IgKQoreworICAgIGlmKCBtYWpvciAhPSBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMgKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiggbWlub3IgPCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgfHwgbWlub3IgPiBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25mLT5jaXBoZXJzdWl0ZV9saXN0W21pbm9yXSA9IGNpcGhlcnN1aXRlczsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX2NlcnRfcHJvZmlsZSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlICpwcm9maWxlICkKK3sKKyAgICBjb25mLT5jZXJ0X3Byb2ZpbGUgPSBwcm9maWxlOworfQorCisvKiBBcHBlbmQgYSBuZXcga2V5Y2VydCBlbnRyeSB0byBhIChwb3NzaWJseSBlbXB0eSkgbGlzdCAqLworc3RhdGljIGludCBzc2xfYXBwZW5kX2tleV9jZXJ0KCBtYmVkdGxzX3NzbF9rZXlfY2VydCAqKmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfY29udGV4dCAqa2V5ICkKK3sKKyAgICBtYmVkdGxzX3NzbF9rZXlfY2VydCAqbmV3OworCisgICAgbmV3ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19zc2xfa2V5X2NlcnQgKSApOworICAgIGlmKCBuZXcgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworCisgICAgbmV3LT5jZXJ0ID0gY2VydDsKKyAgICBuZXctPmtleSAgPSBrZXk7CisgICAgbmV3LT5uZXh0ID0gTlVMTDsKKworICAgIC8qIFVwZGF0ZSBoZWFkIGlzIHRoZSBsaXN0IHdhcyBudWxsLCBlbHNlIGFkZCB0byB0aGUgZW5kICovCisgICAgaWYoICpoZWFkID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgKmhlYWQgPSBuZXc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX2tleV9jZXJ0ICpjdXIgPSAqaGVhZDsKKyAgICAgICAgd2hpbGUoIGN1ci0+bmV4dCAhPSBOVUxMICkKKyAgICAgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICAgICAgY3VyLT5uZXh0ID0gbmV3OworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydCAqb3duX2NlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2NvbnRleHQgKnBrX2tleSApCit7CisgICAgcmV0dXJuKCBzc2xfYXBwZW5kX2tleV9jZXJ0KCAmY29uZi0+a2V5X2NlcnQsIG93bl9jZXJ0LCBwa19rZXkgKSApOworfQorCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICpjYV9jaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3JsICpjYV9jcmwgKQoreworICAgIGNvbmYtPmNhX2NoYWluICAgPSBjYV9jaGFpbjsKKyAgICBjb25mLT5jYV9jcmwgICAgID0gY2FfY3JsOworfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQoraW50IG1iZWR0bHNfc3NsX3NldF9oc19vd25fY2VydCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydCAqb3duX2NlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2NvbnRleHQgKnBrX2tleSApCit7CisgICAgcmV0dXJuKCBzc2xfYXBwZW5kX2tleV9jZXJ0KCAmc3NsLT5oYW5kc2hha2UtPnNuaV9rZXlfY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bl9jZXJ0LCBwa19rZXkgKSApOworfQorCit2b2lkIG1iZWR0bHNfc3NsX3NldF9oc19jYV9jaGFpbiggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNhX2NoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNhX2NybCApCit7CisgICAgc3NsLT5oYW5kc2hha2UtPnNuaV9jYV9jaGFpbiAgID0gY2FfY2hhaW47CisgICAgc3NsLT5oYW5kc2hha2UtPnNuaV9jYV9jcmwgICAgID0gY2FfY3JsOworfQorCit2b2lkIG1iZWR0bHNfc3NsX3NldF9oc19hdXRobW9kZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhdXRobW9kZSApCit7CisgICAgc3NsLT5oYW5kc2hha2UtPnNuaV9hdXRobW9kZSA9IGF1dGhtb2RlOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorLyoKKyAqIFNldCBFQyBKLVBBS0UgcGFzc3dvcmQgZm9yIGN1cnJlbnQgaGFuZHNoYWtlCisgKi8KK2ludCBtYmVkdGxzX3NzbF9zZXRfaHNfZWNqcGFrZV9wYXNzd29yZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHB3X2xlbiApCit7CisgICAgbWJlZHRsc19lY2pwYWtlX3JvbGUgcm9sZTsKKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZSA9PSBOVUxMIHx8IHNzbC0+Y29uZiA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiApCisgICAgICAgIHJvbGUgPSBNQkVEVExTX0VDSlBBS0VfU0VSVkVSOworICAgIGVsc2UKKyAgICAgICAgcm9sZSA9IE1CRURUTFNfRUNKUEFLRV9DTElFTlQ7CisKKyAgICByZXR1cm4oIG1iZWR0bHNfZWNqcGFrZV9zZXR1cCggJnNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19NRF9TSEEyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcsIHB3X2xlbiApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKK2ludCBtYmVkdGxzX3NzbF9jb25mX3BzayggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzaywgc2l6ZV90IHBza19sZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHNrX2lkZW50aXR5LCBzaXplX3QgcHNrX2lkZW50aXR5X2xlbiApCit7CisgICAgaWYoIHBzayA9PSBOVUxMIHx8IHBza19pZGVudGl0eSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBwc2tfbGVuID4gTUJFRFRMU19QU0tfTUFYX0xFTiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKiBJZGVudGl0eSBsZW4gd2lsbCBiZSBlbmNvZGVkIG9uIHR3byBieXRlcyAqLworICAgIGlmKCAoIHBza19pZGVudGl0eV9sZW4gPj4gMTYgKSAhPSAwIHx8CisgICAgICAgIHBza19pZGVudGl0eV9sZW4gPiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBpZiggY29uZi0+cHNrICE9IE5VTEwgfHwgY29uZi0+cHNrX2lkZW50aXR5ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjb25mLT5wc2sgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjb25mLT5wc2tfaWRlbnRpdHkgKTsKKyAgICAgICAgY29uZi0+cHNrID0gTlVMTDsKKyAgICAgICAgY29uZi0+cHNrX2lkZW50aXR5ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiggKCBjb25mLT5wc2sgPSBtYmVkdGxzX2NhbGxvYyggMSwgcHNrX2xlbiApICkgPT0gTlVMTCB8fAorICAgICAgICAoIGNvbmYtPnBza19pZGVudGl0eSA9IG1iZWR0bHNfY2FsbG9jKCAxLCBwc2tfaWRlbnRpdHlfbGVuICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnJlZSggY29uZi0+cHNrICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggY29uZi0+cHNrX2lkZW50aXR5ICk7CisgICAgICAgIGNvbmYtPnBzayA9IE5VTEw7CisgICAgICAgIGNvbmYtPnBza19pZGVudGl0eSA9IE5VTEw7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworICAgIGNvbmYtPnBza19sZW4gPSBwc2tfbGVuOworICAgIGNvbmYtPnBza19pZGVudGl0eV9sZW4gPSBwc2tfaWRlbnRpdHlfbGVuOworCisgICAgbWVtY3B5KCBjb25mLT5wc2ssIHBzaywgY29uZi0+cHNrX2xlbiApOworICAgIG1lbWNweSggY29uZi0+cHNrX2lkZW50aXR5LCBwc2tfaWRlbnRpdHksIGNvbmYtPnBza19pZGVudGl0eV9sZW4gKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19zc2xfc2V0X2hzX3BzayggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzaywgc2l6ZV90IHBza19sZW4gKQoreworICAgIGlmKCBwc2sgPT0gTlVMTCB8fCBzc2wtPmhhbmRzaGFrZSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBwc2tfbGVuID4gTUJFRFRMU19QU0tfTUFYX0xFTiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPnBzayAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPmhhbmRzaGFrZS0+cHNrICk7CisKKyAgICBpZiggKCBzc2wtPmhhbmRzaGFrZS0+cHNrID0gbWJlZHRsc19jYWxsb2MoIDEsIHBza19sZW4gKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgKTsKKworICAgIHNzbC0+aGFuZHNoYWtlLT5wc2tfbGVuID0gcHNrX2xlbjsKKyAgICBtZW1jcHkoIHNzbC0+aGFuZHNoYWtlLT5wc2ssIHBzaywgc3NsLT5oYW5kc2hha2UtPnBza19sZW4gKTsKKworICAgIHJldHVybiggMCApOworfQorCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfcHNrX2NiKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3Bzaykodm9pZCAqLCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3BzayApCit7CisgICAgY29uZi0+Zl9wc2sgPSBmX3BzazsKKyAgICBjb25mLT5wX3BzayA9IHBfcHNrOworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQoraW50IG1iZWR0bHNfc3NsX2NvbmZfZGhfcGFyYW0oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgY29uc3QgY2hhciAqZGhtX1AsIGNvbnN0IGNoYXIgKmRobV9HICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjb25mLT5kaG1fUCwgMTYsIGRobV9QICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjb25mLT5kaG1fRywgMTYsIGRobV9HICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjb25mLT5kaG1fUCApOworICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmY29uZi0+ZGhtX0cgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfc3NsX2NvbmZfZGhfcGFyYW1fY3R4KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIG1iZWR0bHNfZGhtX2NvbnRleHQgKmRobV9jdHggKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9jb3B5KCAmY29uZi0+ZGhtX1AsICZkaG1fY3R4LT5QICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfY29weSggJmNvbmYtPmRobV9HLCAmZGhtX2N0eC0+RyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmY29uZi0+ZGhtX1AgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfZnJlZSggJmNvbmYtPmRobV9HICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19ESE1fQyAmJiBNQkVEVExTX1NTTF9TUlZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorLyoKKyAqIFNldCB0aGUgbWluaW11bSBsZW5ndGggZm9yIERpZmZpZS1IZWxsbWFuIHBhcmFtZXRlcnMKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2RobV9taW5fYml0bGVuKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiaXRsZW4gKQoreworICAgIGNvbmYtPmRobV9taW5fYml0bGVuID0gYml0bGVuOworfQorI2VuZGlmIC8qIE1CRURUTFNfREhNX0MgJiYgTUJFRFRMU19TU0xfQ0xJX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCkKKy8qCisgKiBTZXQgYWxsb3dlZC9wcmVmZXJyZWQgaGFzaGVzIGZvciBoYW5kc2hha2Ugc2lnbmF0dXJlcworICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfc2lnX2hhc2hlcyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqaGFzaGVzICkKK3sKKyAgICBjb25mLT5zaWdfaGFzaGVzID0gaGFzaGVzOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisvKgorICogU2V0IHRoZSBhbGxvd2VkIGVsbGlwdGljIGN1cnZlcworICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfY3VydmVzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwX2lkICpjdXJ2ZV9saXN0ICkKK3sKKyAgICBjb25mLT5jdXJ2ZV9saXN0ID0gY3VydmVfbGlzdDsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCitpbnQgbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGNvbnN0IGNoYXIgKmhvc3RuYW1lICkKK3sKKyAgICBzaXplX3QgaG9zdG5hbWVfbGVuOworCisgICAgaWYoIGhvc3RuYW1lID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgaG9zdG5hbWVfbGVuID0gc3RybGVuKCBob3N0bmFtZSApOworCisgICAgaWYoIGhvc3RuYW1lX2xlbiArIDEgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggaG9zdG5hbWVfbGVuID4gTUJFRFRMU19TU0xfTUFYX0hPU1RfTkFNRV9MRU4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgc3NsLT5ob3N0bmFtZSA9IG1iZWR0bHNfY2FsbG9jKCAxLCBob3N0bmFtZV9sZW4gKyAxICk7CisKKyAgICBpZiggc3NsLT5ob3N0bmFtZSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEICk7CisKKyAgICBtZW1jcHkoIHNzbC0+aG9zdG5hbWUsIGhvc3RuYW1lLCBob3N0bmFtZV9sZW4gKTsKKworICAgIHNzbC0+aG9zdG5hbWVbaG9zdG5hbWVfbGVuXSA9ICdcMCc7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX3NuaSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgaW50ICgqZl9zbmkpKHZvaWQgKiwgbWJlZHRsc19zc2xfY29udGV4dCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICB2b2lkICpwX3NuaSApCit7CisgICAgY29uZi0+Zl9zbmkgPSBmX3NuaTsKKyAgICBjb25mLT5wX3NuaSA9IHBfc25pOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKK2ludCBtYmVkdGxzX3NzbF9jb25mX2FscG5fcHJvdG9jb2xzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNvbnN0IGNoYXIgKipwcm90b3MgKQoreworICAgIHNpemVfdCBjdXJfbGVuLCB0b3RfbGVuOworICAgIGNvbnN0IGNoYXIgKipwOworCisgICAgLyoKKyAgICAgKiAiRW1wdHkgc3RyaW5ncyBNVVNUIE5PVCBiZSBpbmNsdWRlZCBhbmQgYnl0ZSBzdHJpbmdzIE1VU1QgTk9UIGJlCisgICAgICogdHJ1bmNhdGVkIi4gQ2hlY2sgbGVuZ3RocyBub3cgcmF0aGVyIHRoYW4gbGF0ZXIuCisgICAgICovCisgICAgdG90X2xlbiA9IDA7CisgICAgZm9yKCBwID0gcHJvdG9zOyAqcCAhPSBOVUxMOyBwKysgKQorICAgIHsKKyAgICAgICAgY3VyX2xlbiA9IHN0cmxlbiggKnAgKTsKKyAgICAgICAgdG90X2xlbiArPSBjdXJfbGVuOworCisgICAgICAgIGlmKCBjdXJfbGVuID09IDAgfHwgY3VyX2xlbiA+IDI1NSB8fCB0b3RfbGVuID4gNjU1MzUgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBjb25mLT5hbHBuX2xpc3QgPSBwcm90b3M7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworY29uc3QgY2hhciAqbWJlZHRsc19zc2xfZ2V0X2FscG5fcHJvdG9jb2woIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgcmV0dXJuKCBzc2wtPmFscG5fY2hvc2VuICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQUxQTiAqLworCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfbWF4X3ZlcnNpb24oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IG1ham9yLCBpbnQgbWlub3IgKQoreworICAgIGNvbmYtPm1heF9tYWpvcl92ZXIgPSBtYWpvcjsKKyAgICBjb25mLT5tYXhfbWlub3JfdmVyID0gbWlub3I7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9taW5fdmVyc2lvbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgbWFqb3IsIGludCBtaW5vciApCit7CisgICAgY29uZi0+bWluX21ham9yX3ZlciA9IG1ham9yOworICAgIGNvbmYtPm1pbl9taW5vcl92ZXIgPSBtaW5vcjsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVikgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9mYWxsYmFjayggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjaGFyIGZhbGxiYWNrICkKK3sKKyAgICBjb25mLT5mYWxsYmFjayA9IGZhbGxiYWNrOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZW5jcnlwdF90aGVuX21hYyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjaGFyIGV0bSApCit7CisgICAgY29uZi0+ZW5jcnlwdF90aGVuX21hYyA9IGV0bTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX2V4dGVuZGVkX21hc3Rlcl9zZWNyZXQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgY2hhciBlbXMgKQoreworICAgIGNvbmYtPmV4dGVuZGVkX21zID0gZW1zOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX2FyYzRfc3VwcG9ydCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjaGFyIGFyYzQgKQoreworICAgIGNvbmYtPmFyYzRfZGlzYWJsZWQgPSBhcmM0OworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCitpbnQgbWJlZHRsc19zc2xfY29uZl9tYXhfZnJhZ19sZW4oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgdW5zaWduZWQgY2hhciBtZmxfY29kZSApCit7CisgICAgaWYoIG1mbF9jb2RlID49IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9JTlZBTElEIHx8CisgICAgICAgIG1mbF9jb2RlX3RvX2xlbmd0aFttZmxfY29kZV0gPiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBjb25mLT5tZmxfY29kZSA9IG1mbF9jb2RlOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl90cnVuY2F0ZWRfaG1hYyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgdHJ1bmNhdGUgKQoreworICAgIGNvbmYtPnRydW5jX2htYWMgPSB0cnVuY2F0ZTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORykKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9jYmNfcmVjb3JkX3NwbGl0dGluZyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjaGFyIHNwbGl0ICkKK3sKKyAgICBjb25mLT5jYmNfcmVjb3JkX3NwbGl0dGluZyA9IHNwbGl0OworfQorI2VuZGlmCisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9sZWdhY3lfcmVuZWdvdGlhdGlvbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgYWxsb3dfbGVnYWN5ICkKK3sKKyAgICBjb25mLT5hbGxvd19sZWdhY3lfcmVuZWdvdGlhdGlvbiA9IGFsbG93X2xlZ2FjeTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9yZW5lZ290aWF0aW9uKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGludCByZW5lZ290aWF0aW9uICkKK3sKKyAgICBjb25mLT5kaXNhYmxlX3JlbmVnb3RpYXRpb24gPSByZW5lZ290aWF0aW9uOworfQorCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfcmVuZWdvdGlhdGlvbl9lbmZvcmNlZCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgbWF4X3JlY29yZHMgKQoreworICAgIGNvbmYtPnJlbmVnb19tYXhfcmVjb3JkcyA9IG1heF9yZWNvcmRzOworfQorCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfcmVuZWdvdGlhdGlvbl9wZXJpb2QoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBwZXJpb2RbOF0gKQoreworICAgIG1lbWNweSggY29uZi0+cmVuZWdvX3BlcmlvZCwgcGVyaW9kLCA4ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHMoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IHVzZV90aWNrZXRzICkKK3sKKyAgICBjb25mLT5zZXNzaW9uX3RpY2tldHMgPSB1c2VfdGlja2V0czsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHNfY2IoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgbWJlZHRsc19zc2xfdGlja2V0X3dyaXRlX3QgKmZfdGlja2V0X3dyaXRlLAorICAgICAgICBtYmVkdGxzX3NzbF90aWNrZXRfcGFyc2VfdCAqZl90aWNrZXRfcGFyc2UsCisgICAgICAgIHZvaWQgKnBfdGlja2V0ICkKK3sKKyAgICBjb25mLT5mX3RpY2tldF93cml0ZSA9IGZfdGlja2V0X3dyaXRlOworICAgIGNvbmYtPmZfdGlja2V0X3BhcnNlID0gZl90aWNrZXRfcGFyc2U7CisgICAgY29uZi0+cF90aWNrZXQgICAgICAgPSBwX3RpY2tldDsKK30KKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFBPUlRfS0VZUykKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9leHBvcnRfa2V5c19jYiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICBtYmVkdGxzX3NzbF9leHBvcnRfa2V5c190ICpmX2V4cG9ydF9rZXlzLAorICAgICAgICB2b2lkICpwX2V4cG9ydF9rZXlzICkKK3sKKyAgICBjb25mLT5mX2V4cG9ydF9rZXlzID0gZl9leHBvcnRfa2V5czsKKyAgICBjb25mLT5wX2V4cG9ydF9rZXlzID0gcF9leHBvcnRfa2V5czsKK30KKyNlbmRpZgorCisvKgorICogU1NMIGdldCBhY2Nlc3NvcnMKKyAqLworc2l6ZV90IG1iZWR0bHNfc3NsX2dldF9ieXRlc19hdmFpbCggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICByZXR1cm4oIHNzbC0+aW5fb2ZmdCA9PSBOVUxMID8gMCA6IHNzbC0+aW5fbXNnbGVuICk7Cit9CisKK3VpbnQzMl90IG1iZWR0bHNfc3NsX2dldF92ZXJpZnlfcmVzdWx0KCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGlmKCBzc2wtPnNlc3Npb24gIT0gTlVMTCApCisgICAgICAgIHJldHVybiggc3NsLT5zZXNzaW9uLT52ZXJpZnlfcmVzdWx0ICk7CisKKyAgICBpZiggc3NsLT5zZXNzaW9uX25lZ290aWF0ZSAhPSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT52ZXJpZnlfcmVzdWx0ICk7CisKKyAgICByZXR1cm4oIDB4RkZGRkZGRkYgKTsKK30KKworY29uc3QgY2hhciAqbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGlmKCBzc2wgPT0gTlVMTCB8fCBzc2wtPnNlc3Npb24gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgcmV0dXJuIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lKCBzc2wtPnNlc3Npb24tPmNpcGhlcnN1aXRlICk7Cit9CisKK2NvbnN0IGNoYXIgKm1iZWR0bHNfc3NsX2dldF92ZXJzaW9uKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisgICAgICAgIHN3aXRjaCggc3NsLT5taW5vcl92ZXIgKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjoKKyAgICAgICAgICAgICAgICByZXR1cm4oICJEVExTdjEuMCIgKTsKKworICAgICAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzM6CisgICAgICAgICAgICAgICAgcmV0dXJuKCAiRFRMU3YxLjIiICk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuKCAidW5rbm93biAoRFRMUykiICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHN3aXRjaCggc3NsLT5taW5vcl92ZXIgKQorICAgIHsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzA6CisgICAgICAgICAgICByZXR1cm4oICJTU0x2My4wIiApOworCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xOgorICAgICAgICAgICAgcmV0dXJuKCAiVExTdjEuMCIgKTsKKworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjoKKyAgICAgICAgICAgIHJldHVybiggIlRMU3YxLjEiICk7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzM6CisgICAgICAgICAgICByZXR1cm4oICJUTFN2MS4yIiApOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oICJ1bmtub3duIiApOworICAgIH0KK30KKworaW50IG1iZWR0bHNfc3NsX2dldF9yZWNvcmRfZXhwYW5zaW9uKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIHNpemVfdCB0cmFuc2Zvcm1fZXhwYW5zaW9uOworICAgIGNvbnN0IG1iZWR0bHNfc3NsX3RyYW5zZm9ybSAqdHJhbnNmb3JtID0gc3NsLT50cmFuc2Zvcm1fb3V0OworCisjaWYgZGVmaW5lZChNQkVEVExTX1pMSUJfU1VQUE9SVCkKKyAgICBpZiggc3NsLT5zZXNzaW9uX291dC0+Y29tcHJlc3Npb24gIT0gTUJFRFRMU19TU0xfQ09NUFJFU1NfTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyNlbmRpZgorCisgICAgaWYoIHRyYW5zZm9ybSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAoaW50KSBtYmVkdGxzX3NzbF9oZHJfbGVuKCBzc2wgKSApOworCisgICAgc3dpdGNoKCBtYmVkdGxzX2NpcGhlcl9nZXRfY2lwaGVyX21vZGUoICZ0cmFuc2Zvcm0tPmNpcGhlcl9jdHhfZW5jICkgKQorICAgIHsKKyAgICAgICAgY2FzZSBNQkVEVExTX01PREVfR0NNOgorICAgICAgICBjYXNlIE1CRURUTFNfTU9ERV9DQ006CisgICAgICAgIGNhc2UgTUJFRFRMU19NT0RFX1NUUkVBTToKKyAgICAgICAgICAgIHRyYW5zZm9ybV9leHBhbnNpb24gPSB0cmFuc2Zvcm0tPm1pbmxlbjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUJFRFRMU19NT0RFX0NCQzoKKyAgICAgICAgICAgIHRyYW5zZm9ybV9leHBhbnNpb24gPSB0cmFuc2Zvcm0tPm1hY2xlbgorICAgICAgICAgICAgICAgICAgICAgICsgbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZ0cmFuc2Zvcm0tPmNpcGhlcl9jdHhfZW5jICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworICAgIHJldHVybiggKGludCkoIG1iZWR0bHNfc3NsX2hkcl9sZW4oIHNzbCApICsgdHJhbnNmb3JtX2V4cGFuc2lvbiApICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCitzaXplX3QgbWJlZHRsc19zc2xfZ2V0X21heF9mcmFnX2xlbiggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBzaXplX3QgbWF4X2xlbjsKKworICAgIC8qCisgICAgICogQXNzdW1lIG1mbF9jb2RlIGlzIGNvcnJlY3Qgc2luY2UgaXQgd2FzIGNoZWNrZWQgd2hlbiBzZXQKKyAgICAgKi8KKyAgICBtYXhfbGVuID0gbWZsX2NvZGVfdG9fbGVuZ3RoW3NzbC0+Y29uZi0+bWZsX2NvZGVdOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiBhIHNtYWxsZXIgbWF4IGxlbmd0aCB3YXMgbmVnb3RpYXRlZAorICAgICAqLworICAgIGlmKCBzc2wtPnNlc3Npb25fb3V0ICE9IE5VTEwgJiYKKyAgICAgICAgbWZsX2NvZGVfdG9fbGVuZ3RoW3NzbC0+c2Vzc2lvbl9vdXQtPm1mbF9jb2RlXSA8IG1heF9sZW4gKQorICAgIHsKKyAgICAgICAgbWF4X2xlbiA9IG1mbF9jb2RlX3RvX2xlbmd0aFtzc2wtPnNlc3Npb25fb3V0LT5tZmxfY29kZV07CisgICAgfQorCisgICAgcmV0dXJuIG1heF9sZW47Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCitjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICptYmVkdGxzX3NzbF9nZXRfcGVlcl9jZXJ0KCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGlmKCBzc2wgPT0gTlVMTCB8fCBzc2wtPnNlc3Npb24gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgcmV0dXJuKCBzc2wtPnNlc3Npb24tPnBlZXJfY2VydCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKK2ludCBtYmVkdGxzX3NzbF9nZXRfc2Vzc2lvbiggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBtYmVkdGxzX3NzbF9zZXNzaW9uICpkc3QgKQoreworICAgIGlmKCBzc2wgPT0gTlVMTCB8fAorICAgICAgICBkc3QgPT0gTlVMTCB8fAorICAgICAgICBzc2wtPnNlc3Npb24gPT0gTlVMTCB8fAorICAgICAgICBzc2wtPmNvbmYtPmVuZHBvaW50ICE9IE1CRURUTFNfU1NMX0lTX0NMSUVOVCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIHJldHVybiggc3NsX3Nlc3Npb25fY29weSggZHN0LCBzc2wtPnNlc3Npb24gKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NMSV9DICovCisKKy8qCisgKiBQZXJmb3JtIGEgc2luZ2xlIHN0ZXAgb2YgdGhlIFNTTCBoYW5kc2hha2UKKyAqLworaW50IG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9zdGVwKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRTsKKworICAgIGlmKCBzc2wgPT0gTlVMTCB8fCBzc2wtPmNvbmYgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX0NMSUVOVCApCisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9jbGllbnRfc3RlcCggc3NsICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiApCisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9zZXJ2ZXJfc3RlcCggc3NsICk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBQZXJmb3JtIHRoZSBTU0wgaGFuZHNoYWtlCisgKi8KK2ludCBtYmVkdGxzX3NzbF9oYW5kc2hha2UoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBpZiggc3NsID09IE5VTEwgfHwgc3NsLT5jb25mID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBoYW5kc2hha2UiICkgKTsKKworICAgIHdoaWxlKCBzc2wtPnN0YXRlICE9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9zdGVwKCBzc2wgKTsKKworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBoYW5kc2hha2UiICkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKy8qCisgKiBXcml0ZSBIZWxsb1JlcXVlc3QgdG8gcmVxdWVzdCByZW5lZ290aWF0aW9uIG9uIHNlcnZlcgorICovCitzdGF0aWMgaW50IHNzbF93cml0ZV9oZWxsb19yZXF1ZXN0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIGhlbGxvIHJlcXVlc3QiICkgKTsKKworICAgIHNzbC0+b3V0X21zZ2xlbiAgPSA0OworICAgIHNzbC0+b3V0X21zZ3R5cGUgPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFOworICAgIHNzbC0+b3V0X21zZ1swXSAgPSBNQkVEVExTX1NTTF9IU19IRUxMT19SRVFVRVNUOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSBoZWxsbyByZXF1ZXN0IiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TUlZfQyAqLworCisvKgorICogQWN0dWFsbHkgcmVuZWdvdGlhdGUgY3VycmVudCBjb25uZWN0aW9uLCB0cmlnZ2VyZWQgYnkgZWl0aGVyOgorICogLSBhbnkgc2lkZTogY2FsbGluZyBtYmVkdGxzX3NzbF9yZW5lZ290aWF0ZSgpLAorICogLSBjbGllbnQ6IHJlY2VpdmluZyBhIEhlbGxvUmVxdWVzdCBkdXJpbmcgbWJlZHRsc19zc2xfcmVhZCgpLAorICogLSBzZXJ2ZXI6IHJlY2VpdmluZyBhbnkgaGFuZHNoYWtlIG1lc3NhZ2Ugb24gc2VydmVyIGR1cmluZyBtYmVkdGxzX3NzbF9yZWFkKCkgYWZ0ZXIKKyAqICAgdGhlIGluaXRpYWwgaGFuZHNoYWtlIGlzIGNvbXBsZXRlZC4KKyAqIElmIHRoZSBoYW5kc2hha2UgZG9lc24ndCBjb21wbGV0ZSBkdWUgdG8gd2FpdGluZyBmb3IgSS9PLCBpdCB3aWxsIGNvbnRpbnVlCisgKiBkdXJpbmcgdGhlIG5leHQgY2FsbHMgdG8gbWJlZHRsc19zc2xfcmVuZWdvdGlhdGUoKSBvciBtYmVkdGxzX3NzbF9yZWFkKCkgcmVzcGVjdGl2ZWx5LgorICovCitzdGF0aWMgaW50IHNzbF9zdGFydF9yZW5lZ290aWF0aW9uKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHJlbmVnb3RpYXRlIiApICk7CisKKyAgICBpZiggKCByZXQgPSBzc2xfaGFuZHNoYWtlX2luaXQoIHNzbCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAvKiBSRkMgNjM0NyA0LjIuMjogIlsuLi5dIHRoZSBIZWxsb1JlcXVlc3Qgd2lsbCBoYXZlIG1lc3NhZ2Vfc2VxID0gMCBhbmQKKyAgICAgKiB0aGUgU2VydmVySGVsbG8gd2lsbCBoYXZlIG1lc3NhZ2Vfc2VxID0gMSIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9QRU5ESU5HICkKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiApCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+b3V0X21zZ19zZXEgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+aW5fbXNnX3NlcSA9IDE7CisgICAgfQorI2VuZGlmCisKKyAgICBzc2wtPnN0YXRlID0gTUJFRFRMU19TU0xfSEVMTE9fUkVRVUVTVDsKKyAgICBzc2wtPnJlbmVnb19zdGF0dXMgPSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfaGFuZHNoYWtlIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSByZW5lZ290aWF0ZSIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBSZW5lZ290aWF0ZSBjdXJyZW50IGNvbm5lY3Rpb24gb24gY2xpZW50LAorICogb3IgcmVxdWVzdCByZW5lZ290aWF0aW9uIG9uIHNlcnZlcgorICovCitpbnQgbWJlZHRsc19zc2xfcmVuZWdvdGlhdGUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFOworCisgICAgaWYoIHNzbCA9PSBOVUxMIHx8IHNzbC0+Y29uZiA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgLyogT24gc2VydmVyLCBqdXN0IHNlbmQgdGhlIHJlcXVlc3QgKi8KKyAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+c3RhdGUgIT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICAgICBzc2wtPnJlbmVnb19zdGF0dXMgPSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX1BFTkRJTkc7CisKKyAgICAgICAgLyogRGlkIHdlIGFscmVhZHkgdHJ5L3N0YXJ0IHNlbmRpbmcgSGVsbG9SZXF1ZXN0PyAqLworICAgICAgICBpZiggc3NsLT5vdXRfbGVmdCAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggbWJlZHRsc19zc2xfZmx1c2hfb3V0cHV0KCBzc2wgKSApOworCisgICAgICAgIHJldHVybiggc3NsX3dyaXRlX2hlbGxvX3JlcXVlc3QoIHNzbCApICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NSVl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgIC8qCisgICAgICogT24gY2xpZW50LCBlaXRoZXIgc3RhcnQgdGhlIHJlbmVnb3RpYXRpb24gcHJvY2VzcyBvciwKKyAgICAgKiBpZiBhbHJlYWR5IGluIHByb2dyZXNzLCBjb250aW51ZSB0aGUgaGFuZHNoYWtlCisgICAgICovCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyAhPSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICkKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPnN0YXRlICE9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gc3NsX3N0YXJ0X3JlbmVnb3RpYXRpb24oIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF9zdGFydF9yZW5lZ290aWF0aW9uIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfaGFuZHNoYWtlIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NMSV9DICovCisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQ2hlY2sgcmVjb3JkIGNvdW50ZXJzIGFuZCByZW5lZ290aWF0ZSBpZiB0aGV5J3JlIGFib3ZlIHRoZSBsaW1pdC4KKyAqLworc3RhdGljIGludCBzc2xfY2hlY2tfY3RyX3JlbmVnb3RpYXRlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGlmKCBzc2wtPnN0YXRlICE9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSIHx8CisgICAgICAgIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX1BFTkRJTkcgfHwKKyAgICAgICAgc3NsLT5jb25mLT5kaXNhYmxlX3JlbmVnb3RpYXRpb24gPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9ESVNBQkxFRCApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBpZiggbWVtY21wKCBzc2wtPmluX2N0ciwgIHNzbC0+Y29uZi0+cmVuZWdvX3BlcmlvZCwgOCApIDw9IDAgJiYKKyAgICAgICAgbWVtY21wKCBzc2wtPm91dF9jdHIsIHNzbC0+Y29uZi0+cmVuZWdvX3BlcmlvZCwgOCApIDw9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJyZWNvcmQgY291bnRlciBsaW1pdCByZWFjaGVkOiByZW5lZ290aWF0ZSIgKSApOworICAgIHJldHVybiggbWJlZHRsc19zc2xfcmVuZWdvdGlhdGUoIHNzbCApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworCisvKgorICogUmVjZWl2ZSBhcHBsaWNhdGlvbiBkYXRhIGRlY3J5cHRlZCBmcm9tIHRoZSBTU0wgbGF5ZXIKKyAqLworaW50IG1iZWR0bHNfc3NsX3JlYWQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0LCByZWNvcmRfcmVhZCA9IDA7CisgICAgc2l6ZV90IG47CisKKyAgICBpZiggc3NsID09IE5VTEwgfHwgc3NsLT5jb25mID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiByZWFkIiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGlmKCBzc2wtPmhhbmRzaGFrZSAhPSBOVUxMICYmCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSA9PSBNQkVEVExTX1NTTF9SRVRSQU5TX1NFTkRJTkcgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9yZXNlbmQoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGlmKCAoIHJldCA9IHNzbF9jaGVja19jdHJfcmVuZWdvdGlhdGUoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJzc2xfY2hlY2tfY3RyX3JlbmVnb3RpYXRlIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiggc3NsLT5zdGF0ZSAhPSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2UoIHNzbCApOworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQUlUSU5HX1NFUlZFUl9IRUxMT19SRU5FR08gKQorICAgICAgICB7CisgICAgICAgICAgICByZWNvcmRfcmVhZCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9oYW5kc2hha2UiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9vZmZ0ID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgLyogU3RhcnQgdGltZXIgaWYgbm90IGFscmVhZHkgcnVubmluZyAqLworICAgICAgICBpZiggc3NsLT5mX2dldF90aW1lciAhPSBOVUxMICYmCisgICAgICAgICAgICBzc2wtPmZfZ2V0X3RpbWVyKCBzc2wtPnBfdGltZXIgKSA9PSAtMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzbF9zZXRfdGltZXIoIHNzbCwgc3NsLT5jb25mLT5yZWFkX3RpbWVvdXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAhIHJlY29yZF9yZWFkICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfQ09OTl9FT0YgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIDAgKTsKKworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCBzc2wtPmluX21zZ2xlbiAgPT0gMCAmJgorICAgICAgICAgICAgc3NsLT5pbl9tc2d0eXBlID09IE1CRURUTFNfU1NMX01TR19BUFBMSUNBVElPTl9EQVRBICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIE9wZW5TU0wgc2VuZHMgZW1wdHkgbWVzc2FnZXMgdG8gcmFuZG9taXplIHRoZSBJVgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9DT05OX0VPRiApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicmVjZWl2ZWQgaGFuZHNoYWtlIG1lc3NhZ2UiICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgICAgICAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgJiYKKyAgICAgICAgICAgICAgICAoIHNzbC0+aW5fbXNnWzBdICE9IE1CRURUTFNfU1NMX0hTX0hFTExPX1JFUVVFU1QgfHwKKyAgICAgICAgICAgICAgICAgIHNzbC0+aW5faHNsZW4gIT0gbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJoYW5kc2hha2UgcmVjZWl2ZWQgKG5vdCBIZWxsb1JlcXVlc3QpIiApICk7CisKKyAgICAgICAgICAgICAgICAvKiBXaXRoIERUTFMsIGRyb3AgdGhlIHBhY2tldCAocHJvYmFibHkgZnJvbSBsYXN0IGhhbmRzaGFrZSkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgICAgICAgICAgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApOworI2VuZGlmCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiAmJgorICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnWzBdICE9IE1CRURUTFNfU1NMX0hTX0NMSUVOVF9IRUxMTyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJoYW5kc2hha2UgcmVjZWl2ZWQgKG5vdCBDbGllbnRIZWxsbykiICkgKTsKKworICAgICAgICAgICAgICAgIC8qIFdpdGggRFRMUywgZHJvcCB0aGUgcGFja2V0IChwcm9iYWJseSBmcm9tIGxhc3QgaGFuZHNoYWtlKSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICAgICAgICAgICAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICAgICBpZiggc3NsLT5jb25mLT5kaXNhYmxlX3JlbmVnb3RpYXRpb24gPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9ESVNBQkxFRCB8fAorICAgICAgICAgICAgICAgICggc3NsLT5zZWN1cmVfcmVuZWdvdGlhdGlvbiA9PSBNQkVEVExTX1NTTF9MRUdBQ1lfUkVORUdPVElBVElPTiAmJgorICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5hbGxvd19sZWdhY3lfcmVuZWdvdGlhdGlvbiA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTEVHQUNZX05PX1JFTkVHT1RJQVRJT04gKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJyZWZ1c2luZyByZW5lZ290aWF0aW9uLCBzZW5kaW5nIGFsZXJ0IiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisgICAgICAgICAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBTU0x2MyBkb2VzIG5vdCBoYXZlIGEgIm5vX3JlbmVnb3RpYXRpb24iIGFsZXJ0CisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgICAgICAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID49IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fUkVORUdPVElBVElPTiApICkgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzEgfHwgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xIHx8CisgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRFRMUyBjbGllbnRzIG5lZWQgdG8ga25vdyByZW5lZ28gaXMgc2VydmVyLWluaXRpYXRlZCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICAgICAgICAgICAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICYmCisgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfQ0xJRU5UICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNzbC0+cmVuZWdvX3N0YXR1cyA9IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fUEVORElORzsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXQgPSBzc2xfc3RhcnRfcmVuZWdvdGlhdGlvbiggc3NsICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FJVElOR19TRVJWRVJfSEVMTE9fUkVORUdPICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZF9yZWFkID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAic3NsX3N0YXJ0X3JlbmVnb3RpYXRpb24iLCByZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIElmIGEgbm9uLWhhbmRzaGFrZSByZWNvcmQgd2FzIHJlYWQgZHVyaW5nIHJlbmVnbywgZmFsbHRocm91Z2gsCisgICAgICAgICAgICAgKiBlbHNlIHRlbGwgdGhlIHVzZXIgdGhleSBzaG91bGQgY2FsbCBtYmVkdGxzX3NzbF9yZWFkKCkgYWdhaW4gKi8KKyAgICAgICAgICAgIGlmKCAhIHJlY29yZF9yZWFkICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9QRU5ESU5HICkKKyAgICAgICAgeworCisgICAgICAgICAgICBpZiggc3NsLT5jb25mLT5yZW5lZ29fbWF4X3JlY29yZHMgPj0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICsrc3NsLT5yZW5lZ29fcmVjb3Jkc19zZWVuID4gc3NsLT5jb25mLT5yZW5lZ29fbWF4X3JlY29yZHMgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJyZW5lZ290aWF0aW9uIHJlcXVlc3RlZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgbm90IGhvbm9yZWQgYnkgY2xpZW50IiApICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKworICAgICAgICAvKiBGYXRhbCBhbmQgY2xvc3VyZSBhbGVydHMgaGFuZGxlZCBieSBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCgpICovCisgICAgICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0FMRVJUICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJpZ25vcmluZyBub24tZmF0YWwgbm9uLWNsb3N1cmUgYWxlcnQiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNndHlwZSAhPSBNQkVEVExTX1NTTF9NU0dfQVBQTElDQVRJT05fREFUQSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGFwcGxpY2F0aW9uIGRhdGEgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFICk7CisgICAgICAgIH0KKworICAgICAgICBzc2wtPmluX29mZnQgPSBzc2wtPmluX21zZzsKKworICAgICAgICAvKiBXZSdyZSBnb2luZyB0byByZXR1cm4gc29tZXRoaW5nIG5vdywgY2FuY2VsIHRpbWVyLAorICAgICAgICAgKiBleGNlcHQgaWYgaGFuZHNoYWtlIChyZW5lZ290aWF0aW9uKSBpcyBpbiBwcm9ncmVzcyAqLworICAgICAgICBpZiggc3NsLT5zdGF0ZSA9PSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiApCisgICAgICAgICAgICBzc2xfc2V0X3RpbWVyKCBzc2wsIDAgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICAgICAgLyogSWYgd2UgcmVxdWVzdGVkIHJlbmVnbyBidXQgcmVjZWl2ZWQgQXBwRGF0YSwgcmVzZW5kIEhlbGxvUmVxdWVzdC4KKyAgICAgICAgICogRG8gaXQgbm93LCBhZnRlciBzZXR0aW5nIGluX29mZnQsIHRvIGF2b2lkIHRha2luZyB0aGlzIGJyYW5jaAorICAgICAgICAgKiBhZ2FpbiBpZiBzc2xfd3JpdGVfaGVsbG9fcmVxdWVzdCgpIHJldHVybnMgV0FOVF9XUklURSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICYmCisgICAgICAgICAgICBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9QRU5ESU5HICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggcmV0ID0gc3NsX3Jlc2VuZF9oZWxsb19yZXF1ZXN0KCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF9yZXNlbmRfaGVsbG9fcmVxdWVzdCIsIHJldCApOworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TUlZfQyAmJiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisjZW5kaWYKKyAgICB9CisKKyAgICBuID0gKCBsZW4gPCBzc2wtPmluX21zZ2xlbiApCisgICAgICAgID8gbGVuIDogc3NsLT5pbl9tc2dsZW47CisKKyAgICBtZW1jcHkoIGJ1Ziwgc3NsLT5pbl9vZmZ0LCBuICk7CisgICAgc3NsLT5pbl9tc2dsZW4gLT0gbjsKKworICAgIGlmKCBzc2wtPmluX21zZ2xlbiA9PSAwICkKKyAgICAgICAgLyogYWxsIGJ5dGVzIGNvbnN1bWVkICAqLworICAgICAgICBzc2wtPmluX29mZnQgPSBOVUxMOworICAgIGVsc2UKKyAgICAgICAgLyogbW9yZSBkYXRhIGF2YWlsYWJsZSAqLworICAgICAgICBzc2wtPmluX29mZnQgKz0gbjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gcmVhZCIgKSApOworCisgICAgcmV0dXJuKCAoaW50KSBuICk7Cit9CisKKy8qCisgKiBTZW5kIGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgZW5jcnlwdGVkIGJ5IHRoZSBTU0wgbGF5ZXIsCisgKiB0YWtpbmcgY2FyZSBvZiBtYXggZnJhZ21lbnQgbGVuZ3RoIGFuZCBidWZmZXIgc2l6ZQorICovCitzdGF0aWMgaW50IHNzbF93cml0ZV9yZWFsKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorICAgIHNpemVfdCBtYXhfbGVuID0gbWJlZHRsc19zc2xfZ2V0X21heF9mcmFnX2xlbiggc3NsICk7CisKKyAgICBpZiggbGVuID4gbWF4X2xlbiApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZnJhZ21lbnQgbGFyZ2VyIHRoYW4gdGhlIChuZWdvdGlhdGVkKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhpbXVtIGZyYWdtZW50IGxlbmd0aDogJWQgPiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwgbWF4X2xlbiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgbGVuID0gbWF4X2xlbjsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCAqLworCisgICAgaWYoIHNzbC0+b3V0X2xlZnQgIT0gMCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQoIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2ZsdXNoX291dHB1dCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzc2wtPm91dF9tc2dsZW4gID0gbGVuOworICAgICAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0FQUExJQ0FUSU9OX0RBVEE7CisgICAgICAgIG1lbWNweSggc3NsLT5vdXRfbXNnLCBidWYsIGxlbiApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworLyoKKyAqIFdyaXRlIGFwcGxpY2F0aW9uIGRhdGEsIGRvaW5nIDEvbi0xIHNwbGl0dGluZyBpZiBuZWNlc3NhcnkuCisgKgorICogV2l0aCBub24tYmxvY2tpbmcgSS9PLCBzc2xfd3JpdGVfcmVhbCgpIG1heSByZXR1cm4gV0FOVF9XUklURSwKKyAqIHRoZW4gdGhlIGNhbGxlciB3aWxsIGNhbGwgdXMgYWdhaW4gd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMsIHNvCisgKiByZW1lbWJlciB3ZXRoZXIgd2UgYWxyZWFkeSBkaWQgdGhlIHNwbGl0IG9yIG5vdC4KKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcpCitzdGF0aWMgaW50IHNzbF93cml0ZV9zcGxpdCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCBzc2wtPmNvbmYtPmNiY19yZWNvcmRfc3BsaXR0aW5nID09CisgICAgICAgICAgICBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElOR19ESVNBQkxFRCB8fAorICAgICAgICBsZW4gPD0gMSB8fAorICAgICAgICBzc2wtPm1pbm9yX3ZlciA+IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSB8fAorICAgICAgICBtYmVkdGxzX2NpcGhlcl9nZXRfY2lwaGVyX21vZGUoICZzc2wtPnRyYW5zZm9ybV9vdXQtPmNpcGhlcl9jdHhfZW5jICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gTUJFRFRMU19NT0RFX0NCQyApCisgICAgeworICAgICAgICByZXR1cm4oIHNzbF93cml0ZV9yZWFsKCBzc2wsIGJ1ZiwgbGVuICkgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5zcGxpdF9kb25lID09IDAgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gc3NsX3dyaXRlX3JlYWwoIHNzbCwgYnVmLCAxICkgKSA8PSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIHNzbC0+c3BsaXRfZG9uZSA9IDE7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gc3NsX3dyaXRlX3JlYWwoIHNzbCwgYnVmICsgMSwgbGVuIC0gMSApICkgPD0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgc3NsLT5zcGxpdF9kb25lID0gMDsKKworICAgIHJldHVybiggcmV0ICsgMSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HICovCisKKy8qCisgKiBXcml0ZSBhcHBsaWNhdGlvbiBkYXRhIChwdWJsaWMtZmFjaW5nIHdyYXBwZXIpCisgKi8KK2ludCBtYmVkdGxzX3NzbF93cml0ZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIiApICk7CisKKyAgICBpZiggc3NsID09IE5VTEwgfHwgc3NsLT5jb25mID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGlmKCAoIHJldCA9IHNzbF9jaGVja19jdHJfcmVuZWdvdGlhdGUoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJzc2xfY2hlY2tfY3RyX3JlbmVnb3RpYXRlIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiggc3NsLT5zdGF0ZSAhPSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2UoIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcpCisgICAgcmV0ID0gc3NsX3dyaXRlX3NwbGl0KCBzc2wsIGJ1ZiwgbGVuICk7CisjZWxzZQorICAgIHJldCA9IHNzbF93cml0ZV9yZWFsKCBzc2wsIGJ1ZiwgbGVuICk7CisjZW5kaWYKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gd3JpdGUiICkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBOb3RpZnkgdGhlIHBlZXIgdGhhdCB0aGUgY29ubmVjdGlvbiBpcyBiZWluZyBjbG9zZWQKKyAqLworaW50IG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIHNzbCA9PSBOVUxMIHx8IHNzbC0+Y29uZiA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgY2xvc2Ugbm90aWZ5IiApICk7CisKKyAgICBpZiggc3NsLT5vdXRfbGVmdCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQoIHNzbCApICk7CisKKyAgICBpZiggc3NsLT5zdGF0ZSA9PSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfQ0xPU0VfTk9USUZZICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSBjbG9zZSBub3RpZnkiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCit2b2lkIG1iZWR0bHNfc3NsX3RyYW5zZm9ybV9mcmVlKCBtYmVkdGxzX3NzbF90cmFuc2Zvcm0gKnRyYW5zZm9ybSApCit7CisgICAgaWYoIHRyYW5zZm9ybSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisjaWYgZGVmaW5lZChNQkVEVExTX1pMSUJfU1VQUE9SVCkKKyAgICBkZWZsYXRlRW5kKCAmdHJhbnNmb3JtLT5jdHhfZGVmbGF0ZSApOworICAgIGluZmxhdGVFbmQoICZ0cmFuc2Zvcm0tPmN0eF9pbmZsYXRlICk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZ0cmFuc2Zvcm0tPmNpcGhlcl9jdHhfZW5jICk7CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJnRyYW5zZm9ybS0+Y2lwaGVyX2N0eF9kZWMgKTsKKworICAgIG1iZWR0bHNfbWRfZnJlZSggJnRyYW5zZm9ybS0+bWRfY3R4X2VuYyApOworICAgIG1iZWR0bHNfbWRfZnJlZSggJnRyYW5zZm9ybS0+bWRfY3R4X2RlYyApOworCisgICAgbWJlZHRsc196ZXJvaXplKCB0cmFuc2Zvcm0sIHNpemVvZiggbWJlZHRsc19zc2xfdHJhbnNmb3JtICkgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorc3RhdGljIHZvaWQgc3NsX2tleV9jZXJ0X2ZyZWUoIG1iZWR0bHNfc3NsX2tleV9jZXJ0ICprZXlfY2VydCApCit7CisgICAgbWJlZHRsc19zc2xfa2V5X2NlcnQgKmN1ciA9IGtleV9jZXJ0LCAqbmV4dDsKKworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBuZXh0ID0gY3VyLT5uZXh0OworICAgICAgICBtYmVkdGxzX2ZyZWUoIGN1ciApOworICAgICAgICBjdXIgPSBuZXh0OworICAgIH0KK30KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKwordm9pZCBtYmVkdGxzX3NzbF9oYW5kc2hha2VfZnJlZSggbWJlZHRsc19zc2xfaGFuZHNoYWtlX3BhcmFtcyAqaGFuZHNoYWtlICkKK3sKKyAgICBpZiggaGFuZHNoYWtlID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorICAgIG1iZWR0bHNfbWQ1X2ZyZWUoICAgICZoYW5kc2hha2UtPmZpbl9tZDUgICk7CisgICAgbWJlZHRsc19zaGExX2ZyZWUoICAgJmhhbmRzaGFrZS0+ZmluX3NoYTEgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICBtYmVkdGxzX3NoYTI1Nl9mcmVlKCAgICZoYW5kc2hha2UtPmZpbl9zaGEyNTYgICAgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICBtYmVkdGxzX3NoYTUxMl9mcmVlKCAgICZoYW5kc2hha2UtPmZpbl9zaGE1MTIgICAgKTsKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorICAgIG1iZWR0bHNfZGhtX2ZyZWUoICZoYW5kc2hha2UtPmRobV9jdHggKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpCisgICAgbWJlZHRsc19lY2RoX2ZyZWUoICZoYW5kc2hha2UtPmVjZGhfY3R4ICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICBtYmVkdGxzX2VjanBha2VfZnJlZSggJmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHggKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgIG1iZWR0bHNfZnJlZSggaGFuZHNoYWtlLT5lY2pwYWtlX2NhY2hlICk7CisgICAgaGFuZHNoYWtlLT5lY2pwYWtlX2NhY2hlID0gTlVMTDsKKyAgICBoYW5kc2hha2UtPmVjanBha2VfY2FjaGVfbGVuID0gMDsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIC8qIGV4cGxpY2l0IHZvaWQgcG9pbnRlciBjYXN0IGZvciBidWdneSBNUyBjb21waWxlciAqLworICAgIG1iZWR0bHNfZnJlZSggKHZvaWQgKikgaGFuZHNoYWtlLT5jdXJ2ZXMgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgaWYoIGhhbmRzaGFrZS0+cHNrICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBoYW5kc2hha2UtPnBzaywgaGFuZHNoYWtlLT5wc2tfbGVuICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggaGFuZHNoYWtlLT5wc2sgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQorICAgIC8qCisgICAgICogRnJlZSBvbmx5IHRoZSBsaW5rZWQgbGlzdCB3cmFwcGVyLCBub3QgdGhlIGtleXMgdGhlbXNlbHZlcworICAgICAqIHNpbmNlIHRoZSBiZWxvbmcgdG8gdGhlIFNOSSBjYWxsYmFjaworICAgICAqLworICAgIGlmKCBoYW5kc2hha2UtPnNuaV9rZXlfY2VydCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX2tleV9jZXJ0ICpjdXIgPSBoYW5kc2hha2UtPnNuaV9rZXlfY2VydCwgKm5leHQ7CisKKyAgICAgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dCA9IGN1ci0+bmV4dDsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggY3VyICk7CisgICAgICAgICAgICBjdXIgPSBuZXh0OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAmJiBNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgbWJlZHRsc19mcmVlKCBoYW5kc2hha2UtPnZlcmlmeV9jb29raWUgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGhhbmRzaGFrZS0+aHNfbXNnICk7CisgICAgc3NsX2ZsaWdodF9mcmVlKCBoYW5kc2hha2UtPmZsaWdodCApOworI2VuZGlmCisKKyAgICBtYmVkdGxzX3plcm9pemUoIGhhbmRzaGFrZSwgc2l6ZW9mKCBtYmVkdGxzX3NzbF9oYW5kc2hha2VfcGFyYW1zICkgKTsKK30KKwordm9pZCBtYmVkdGxzX3NzbF9zZXNzaW9uX2ZyZWUoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gKQoreworICAgIGlmKCBzZXNzaW9uID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBpZiggc2Vzc2lvbi0+cGVlcl9jZXJ0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBzZXNzaW9uLT5wZWVyX2NlcnQgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzZXNzaW9uLT5wZWVyX2NlcnQgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgIG1iZWR0bHNfZnJlZSggc2Vzc2lvbi0+dGlja2V0ICk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfemVyb2l6ZSggc2Vzc2lvbiwgc2l6ZW9mKCBtYmVkdGxzX3NzbF9zZXNzaW9uICkgKTsKK30KKworLyoKKyAqIEZyZWUgYW4gU1NMIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9mcmVlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGlmKCBzc2wgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gZnJlZSIgKSApOworCisgICAgaWYoIHNzbC0+b3V0X2J1ZiAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggc3NsLT5vdXRfYnVmLCBNQkVEVExTX1NTTF9CVUZGRVJfTEVOICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT5vdXRfYnVmICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+aW5fYnVmICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBzc2wtPmluX2J1ZiwgTUJFRFRMU19TU0xfQlVGRkVSX0xFTiApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+aW5fYnVmICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1pMSUJfU1VQUE9SVCkKKyAgICBpZiggc3NsLT5jb21wcmVzc19idWYgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3plcm9pemUoIHNzbC0+Y29tcHJlc3NfYnVmLCBNQkVEVExTX1NTTF9CVUZGRVJfTEVOICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT5jb21wcmVzc19idWYgKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmKCBzc2wtPnRyYW5zZm9ybSApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF90cmFuc2Zvcm1fZnJlZSggc3NsLT50cmFuc2Zvcm0gKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPnRyYW5zZm9ybSApOworICAgIH0KKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZSApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF9oYW5kc2hha2VfZnJlZSggc3NsLT5oYW5kc2hha2UgKTsKKyAgICAgICAgbWJlZHRsc19zc2xfdHJhbnNmb3JtX2ZyZWUoIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZSApOworICAgICAgICBtYmVkdGxzX3NzbF9zZXNzaW9uX2ZyZWUoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUgKTsKKworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+aGFuZHNoYWtlICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT5zZXNzaW9uX25lZ290aWF0ZSApOworICAgIH0KKworICAgIGlmKCBzc2wtPnNlc3Npb24gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9mcmVlKCBzc2wtPnNlc3Npb24gKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPnNlc3Npb24gKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBpZiggc3NsLT5ob3N0bmFtZSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggc3NsLT5ob3N0bmFtZSwgc3RybGVuKCBzc2wtPmhvc3RuYW1lICkgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPmhvc3RuYW1lICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCkKKyAgICBpZiggbWJlZHRsc19zc2xfaHdfcmVjb3JkX2ZpbmlzaCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiZ29pbmcgZm9yIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9maW5pc2goKSIgKSApOworICAgICAgICBtYmVkdGxzX3NzbF9od19yZWNvcmRfZmluaXNoKCBzc2wgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgbWJlZHRsc19mcmVlKCBzc2wtPmNsaV9pZCApOworI2VuZGlmCisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGZyZWUiICkgKTsKKworICAgIC8qIEFjdHVhbGx5IGNsZWFyIGFmdGVyIGxhc3QgZGVidWcgbWVzc2FnZSAqLworICAgIG1iZWR0bHNfemVyb2l6ZSggc3NsLCBzaXplb2YoIG1iZWR0bHNfc3NsX2NvbnRleHQgKSApOworfQorCisvKgorICogSW5pdGlhbHplIG1iZWR0bHNfc3NsX2NvbmZpZworICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYgKQoreworICAgIG1lbXNldCggY29uZiwgMCwgc2l6ZW9mKCBtYmVkdGxzX3NzbF9jb25maWcgKSApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcHJlc2V0X2RlZmF1bHRfaGFzaGVzW10gPSB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIE1CRURUTFNfTURfU0hBNTEyLAorICAgIE1CRURUTFNfTURfU0hBMzg0LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIE1CRURUTFNfTURfU0hBMjU2LAorICAgIE1CRURUTFNfTURfU0hBMjI0LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICBNQkVEVExTX01EX1NIQTEsCisjZW5kaWYKKyAgICBNQkVEVExTX01EX05PTkUKK307CisjZW5kaWYKKworc3RhdGljIGludCBzc2xfcHJlc2V0X3N1aXRlYl9jaXBoZXJzdWl0ZXNbXSA9IHsKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKyAgICAwCit9OworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcHJlc2V0X3N1aXRlYl9oYXNoZXNbXSA9IHsKKyAgICBNQkVEVExTX01EX1NIQTI1NiwKKyAgICBNQkVEVExTX01EX1NIQTM4NCwKKyAgICBNQkVEVExTX01EX05PTkUKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKK3N0YXRpYyBtYmVkdGxzX2VjcF9ncm91cF9pZCBzc2xfcHJlc2V0X3N1aXRlYl9jdXJ2ZXNbXSA9IHsKKyAgICBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEsCisgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxLAorICAgIE1CRURUTFNfRUNQX0RQX05PTkUKK307CisjZW5kaWYKKworLyoKKyAqIExvYWQgZGVmYXVsdCBpbiBtYmVkdGxzX3NzbF9jb25maWcKKyAqLworaW50IG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuZHBvaW50LCBpbnQgdHJhbnNwb3J0LCBpbnQgcHJlc2V0ICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgaW50IHJldDsKKyNlbmRpZgorCisgICAgLyogVXNlIHRoZSBmdW5jdGlvbnMgaGVyZSBzbyB0aGF0IHRoZXkgYXJlIGNvdmVyZWQgaW4gdGVzdHMsCisgICAgICogYnV0IG90aGVyd2lzZSBhY2Nlc3MgbWVtYmVyIGRpcmVjdGx5IGZvciBlZmZpY2llbmN5ICovCisgICAgbWJlZHRsc19zc2xfY29uZl9lbmRwb2ludCggY29uZiwgZW5kcG9pbnQgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX3RyYW5zcG9ydCggY29uZiwgdHJhbnNwb3J0ICk7CisKKyAgICAvKgorICAgICAqIFRoaW5ncyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIHByZXNldHMKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgIGlmKCBlbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgKQorICAgIHsKKyAgICAgICAgY29uZi0+YXV0aG1vZGUgPSBNQkVEVExTX1NTTF9WRVJJRllfUkVRVUlSRUQ7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgICAgIGNvbmYtPnNlc3Npb25fdGlja2V0cyA9IE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19FTkFCTEVEOworI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorICAgIGNvbmYtPmFyYzRfZGlzYWJsZWQgPSBNQkVEVExTX1NTTF9BUkM0X0RJU0FCTEVEOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgY29uZi0+ZW5jcnlwdF90aGVuX21hYyA9IE1CRURUTFNfU1NMX0VUTV9FTkFCTEVEOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCisgICAgY29uZi0+ZXh0ZW5kZWRfbXMgPSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19FTkFCTEVEOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HKQorICAgIGNvbmYtPmNiY19yZWNvcmRfc3BsaXR0aW5nID0gTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRU5BQkxFRDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICBjb25mLT5mX2Nvb2tpZV93cml0ZSA9IHNzbF9jb29raWVfd3JpdGVfZHVtbXk7CisgICAgY29uZi0+Zl9jb29raWVfY2hlY2sgPSBzc2xfY29va2llX2NoZWNrX2R1bW15OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCisgICAgY29uZi0+YW50aV9yZXBsYXkgPSBNQkVEVExTX1NTTF9BTlRJX1JFUExBWV9FTkFCTEVEOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgY29uZi0+aHNfdGltZW91dF9taW4gPSBNQkVEVExTX1NTTF9EVExTX1RJTUVPVVRfREZMX01JTjsKKyAgICBjb25mLT5oc190aW1lb3V0X21heCA9IE1CRURUTFNfU1NMX0RUTFNfVElNRU9VVF9ERkxfTUFYOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgY29uZi0+cmVuZWdvX21heF9yZWNvcmRzID0gTUJFRFRMU19TU0xfUkVORUdPX01BWF9SRUNPUkRTX0RFRkFVTFQ7CisgICAgbWVtc2V0KCBjb25mLT5yZW5lZ29fcGVyaW9kLCAweEZGLCA3ICk7CisgICAgY29uZi0+cmVuZWdvX3BlcmlvZFs3XSA9IDB4MDA7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICAgICAgICAgIGlmKCBlbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfZGhfcGFyYW0oIGNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfREhNX1JGQzUxMTRfTU9EUF8yMDQ4X1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfREhNX1JGQzUxMTRfTU9EUF8yMDQ4X0cgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogUHJlc2V0LXNwZWNpZmljIGRlZmF1bHRzCisgICAgICovCisgICAgc3dpdGNoKCBwcmVzZXQgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogTlNBIFN1aXRlIEIKKyAgICAgICAgICovCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfUFJFU0VUX1NVSVRFQjoKKyAgICAgICAgICAgIGNvbmYtPm1pbl9tYWpvcl92ZXIgPSBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzM7CisgICAgICAgICAgICBjb25mLT5taW5fbWlub3JfdmVyID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zOyAvKiBUTFMgMS4yICovCisgICAgICAgICAgICBjb25mLT5tYXhfbWFqb3JfdmVyID0gTUJFRFRMU19TU0xfTUFYX01BSk9SX1ZFUlNJT047CisgICAgICAgICAgICBjb25mLT5tYXhfbWlub3JfdmVyID0gTUJFRFRMU19TU0xfTUFYX01JTk9SX1ZFUlNJT047CisKKyAgICAgICAgICAgIGNvbmYtPmNpcGhlcnN1aXRlX2xpc3RbTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wXSA9CisgICAgICAgICAgICBjb25mLT5jaXBoZXJzdWl0ZV9saXN0W01CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMV0gPQorICAgICAgICAgICAgY29uZi0+Y2lwaGVyc3VpdGVfbGlzdFtNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzJdID0KKyAgICAgICAgICAgIGNvbmYtPmNpcGhlcnN1aXRlX2xpc3RbTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zXSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9wcmVzZXRfc3VpdGViX2NpcGhlcnN1aXRlczsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgICAgICAgICAgY29uZi0+Y2VydF9wcm9maWxlID0gJm1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZV9zdWl0ZWI7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCkKKyAgICAgICAgICAgIGNvbmYtPnNpZ19oYXNoZXMgPSBzc2xfcHJlc2V0X3N1aXRlYl9oYXNoZXM7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICAgICAgICAgIGNvbmYtPmN1cnZlX2xpc3QgPSBzc2xfcHJlc2V0X3N1aXRlYl9jdXJ2ZXM7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIERlZmF1bHQKKyAgICAgICAgICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjb25mLT5taW5fbWFqb3JfdmVyID0gTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zOworICAgICAgICAgICAgY29uZi0+bWluX21pbm9yX3ZlciA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMTsgLyogVExTIDEuMCAqLworICAgICAgICAgICAgY29uZi0+bWF4X21ham9yX3ZlciA9IE1CRURUTFNfU1NMX01BWF9NQUpPUl9WRVJTSU9OOworICAgICAgICAgICAgY29uZi0+bWF4X21pbm9yX3ZlciA9IE1CRURUTFNfU1NMX01BWF9NSU5PUl9WRVJTSU9OOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgICAgICAgICAgaWYoIHRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICAgICAgICAgIGNvbmYtPm1pbl9taW5vcl92ZXIgPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzI7CisjZW5kaWYKKworICAgICAgICAgICAgY29uZi0+Y2lwaGVyc3VpdGVfbGlzdFtNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzBdID0KKyAgICAgICAgICAgIGNvbmYtPmNpcGhlcnN1aXRlX2xpc3RbTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xXSA9CisgICAgICAgICAgICBjb25mLT5jaXBoZXJzdWl0ZV9saXN0W01CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMl0gPQorICAgICAgICAgICAgY29uZi0+Y2lwaGVyc3VpdGVfbGlzdFtNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzNdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgICAgICAgICAgY29uZi0+Y2VydF9wcm9maWxlID0gJm1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZV9kZWZhdWx0OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQpCisgICAgICAgICAgICBjb25mLT5zaWdfaGFzaGVzID0gc3NsX3ByZXNldF9kZWZhdWx0X2hhc2hlczsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgICAgICAgICAgY29uZi0+Y3VydmVfbGlzdCA9IG1iZWR0bHNfZWNwX2dycF9pZF9saXN0KCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKyAgICAgICAgICAgIGNvbmYtPmRobV9taW5fYml0bGVuID0gMTAyNDsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogRnJlZSBtYmVkdGxzX3NzbF9jb25maWcKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpCisgICAgbWJlZHRsc19tcGlfZnJlZSggJmNvbmYtPmRobV9QICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmNvbmYtPmRobV9HICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorICAgIGlmKCBjb25mLT5wc2sgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3plcm9pemUoIGNvbmYtPnBzaywgY29uZi0+cHNrX2xlbiApOworICAgICAgICBtYmVkdGxzX3plcm9pemUoIGNvbmYtPnBza19pZGVudGl0eSwgY29uZi0+cHNrX2lkZW50aXR5X2xlbiApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGNvbmYtPnBzayApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGNvbmYtPnBza19pZGVudGl0eSApOworICAgICAgICBjb25mLT5wc2tfbGVuID0gMDsKKyAgICAgICAgY29uZi0+cHNrX2lkZW50aXR5X2xlbiA9IDA7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBzc2xfa2V5X2NlcnRfZnJlZSggY29uZi0+a2V5X2NlcnQgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc196ZXJvaXplKCBjb25mLCBzaXplb2YoIG1iZWR0bHNfc3NsX2NvbmZpZyApICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfQykgJiYgXAorICAgICggZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgKQorLyoKKyAqIENvbnZlcnQgYmV0d2VlbiBNQkVEVExTX1BLX1hYWCBhbmQgU1NMX1NJR19YWFgKKyAqLwordW5zaWduZWQgY2hhciBtYmVkdGxzX3NzbF9zaWdfZnJvbV9wayggbWJlZHRsc19wa19jb250ZXh0ICpwayApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgIGlmKCBtYmVkdGxzX3BrX2Nhbl9kbyggcGssIE1CRURUTFNfUEtfUlNBICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfU1NMX1NJR19SU0EgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorICAgIGlmKCBtYmVkdGxzX3BrX2Nhbl9kbyggcGssIE1CRURUTFNfUEtfRUNEU0EgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19TU0xfU0lHX0VDRFNBICk7CisjZW5kaWYKKyAgICByZXR1cm4oIE1CRURUTFNfU1NMX1NJR19BTk9OICk7Cit9CisKK21iZWR0bHNfcGtfdHlwZV90IG1iZWR0bHNfc3NsX3BrX2FsZ19mcm9tX3NpZyggdW5zaWduZWQgY2hhciBzaWcgKQoreworICAgIHN3aXRjaCggc2lnICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgICAgICBjYXNlIE1CRURUTFNfU1NMX1NJR19SU0E6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfUEtfUlNBICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9TSUdfRUNEU0E6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfUEtfRUNEU0EgKTsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX1BLX05PTkUgKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTUJFRFRMU19QS19DICYmICggTUJFRFRMU19SU0FfQyB8fCBNQkVEVExTX0VDRFNBX0MgKSAqLworCisvKgorICogQ29udmVydCBmcm9tIE1CRURUTFNfU1NMX0hBU0hfWFhYIHRvIE1CRURUTFNfTURfWFhYCisgKi8KK21iZWR0bHNfbWRfdHlwZV90IG1iZWR0bHNfc3NsX21kX2FsZ19mcm9tX2hhc2goIHVuc2lnbmVkIGNoYXIgaGFzaCApCit7CisgICAgc3dpdGNoKCBoYXNoICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hBU0hfTUQ1OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX01EX01ENSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IQVNIX1NIQTE6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfTURfU0hBMSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hBU0hfU0hBMjI0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX01EX1NIQTIyNCApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hBU0hfU0hBMjU2OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX01EX1NIQTI1NiApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hBU0hfU0hBMzg0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX01EX1NIQTM4NCApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hBU0hfU0hBNTEyOgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX01EX1NIQTUxMiApOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfTURfTk9ORSApOworICAgIH0KK30KKworLyoKKyAqIENvbnZlcnQgZnJvbSBNQkVEVExTX01EX1hYWCB0byBNQkVEVExTX1NTTF9IQVNIX1hYWAorICovCit1bnNpZ25lZCBjaGFyIG1iZWR0bHNfc3NsX2hhc2hfZnJvbV9tZF9hbGcoIGludCBtZCApCit7CisgICAgc3dpdGNoKCBtZCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX01EX01ENToKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19TU0xfSEFTSF9NRDUgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19NRF9TSEExOgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX1NTTF9IQVNIX1NIQTEgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX01EX1NIQTIyNDoKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19TU0xfSEFTSF9TSEEyMjQgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX01EX1NIQTI1NjoKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19TU0xfSEFTSF9TSEEyNTYgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX01EX1NIQTM4NDoKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19TU0xfSEFTSF9TSEEzODQgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX01EX1NIQTUxMjoKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19TU0xfSEFTSF9TSEE1MTIgKTsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX1NTTF9IQVNIX05PTkUgKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisvKgorICogQ2hlY2sgaWYgYSBjdXJ2ZSBwcm9wb3NlZCBieSB0aGUgcGVlciBpcyBpbiBvdXIgbGlzdC4KKyAqIFJldHVybiAwIGlmIHdlJ3JlIHdpbGxpbmcgdG8gdXNlIGl0LCAtMSBvdGhlcndpc2UuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9jaGVja19jdXJ2ZSggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBtYmVkdGxzX2VjcF9ncm91cF9pZCBncnBfaWQgKQoreworICAgIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwX2lkICpnaWQ7CisKKyAgICBpZiggc3NsLT5jb25mLT5jdXJ2ZV9saXN0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBmb3IoIGdpZCA9IHNzbC0+Y29uZi0+Y3VydmVfbGlzdDsgKmdpZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOyBnaWQrKyApCisgICAgICAgIGlmKCAqZ2lkID09IGdycF9pZCApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIHJldHVybiggLTEgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQpCisvKgorICogQ2hlY2sgaWYgYSBoYXNoIHByb3Bvc2VkIGJ5IHRoZSBwZWVyIGlzIGluIG91ciBsaXN0LgorICogUmV0dXJuIDAgaWYgd2UncmUgd2lsbGluZyB0byB1c2UgaXQsIC0xIG90aGVyd2lzZS4KKyAqLworaW50IG1iZWR0bHNfc3NsX2NoZWNrX3NpZ19oYXNoKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kICkKK3sKKyAgICBjb25zdCBpbnQgKmN1cjsKKworICAgIGlmKCBzc2wtPmNvbmYtPnNpZ19oYXNoZXMgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGZvciggY3VyID0gc3NsLT5jb25mLT5zaWdfaGFzaGVzOyAqY3VyICE9IE1CRURUTFNfTURfTk9ORTsgY3VyKysgKQorICAgICAgICBpZiggKmN1ciA9PSAoaW50KSBtZCApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIHJldHVybiggLTEgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKK2ludCBtYmVkdGxzX3NzbF9jaGVja19jZXJ0X3VzYWdlKCBjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICpjZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNlcnRfZW5kcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpmbGFncyApCit7CisgICAgaW50IHJldCA9IDA7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFKQorICAgIGludCB1c2FnZSA9IDA7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UpCisgICAgY29uc3QgY2hhciAqZXh0X29pZDsKKyAgICBzaXplX3QgZXh0X2xlbjsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRSkgJiYgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UpCisgICAgKCh2b2lkKSBjZXJ0KTsKKyAgICAoKHZvaWQpIGNlcnRfZW5kcG9pbnQpOworICAgICgodm9pZCkgZmxhZ3MpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UpCisgICAgaWYoIGNlcnRfZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICkKKyAgICB7CisgICAgICAgIC8qIFNlcnZlciBwYXJ0IG9mIHRoZSBrZXkgZXhjaGFuZ2UgKi8KKyAgICAgICAgc3dpdGNoKCBjaXBoZXJzdWl0ZS0+a2V5X2V4Y2hhbmdlICkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0E6CisgICAgICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0s6CisgICAgICAgICAgICAgICAgdXNhZ2UgPSBNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBOgorICAgICAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0E6CisgICAgICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBOgorICAgICAgICAgICAgICAgIHVzYWdlID0gTUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBOgorICAgICAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBOgorICAgICAgICAgICAgICAgIHVzYWdlID0gTUJFRFRMU19YNTA5X0tVX0tFWV9BR1JFRU1FTlQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8qIERvbid0IHVzZSBkZWZhdWx0OiB3ZSB3YW50IHdhcm5pbmdzIHdoZW4gYWRkaW5nIG5ldyB2YWx1ZXMgKi8KKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfTk9ORToKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLOgorICAgICAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLOgorICAgICAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0s6CisgICAgICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0U6CisgICAgICAgICAgICAgICAgdXNhZ2UgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIENsaWVudCBhdXRoOiB3ZSBvbmx5IGltcGxlbWVudCByc2Ffc2lnbiBhbmQgbWJlZHRsc19lY2RzYV9zaWduIGZvciBub3cgKi8KKyAgICAgICAgdXNhZ2UgPSBNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkU7CisgICAgfQorCisgICAgaWYoIG1iZWR0bHNfeDUwOV9jcnRfY2hlY2tfa2V5X3VzYWdlKCBjZXJ0LCB1c2FnZSApICE9IDAgKQorICAgIHsKKyAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0tFWV9VU0FHRTsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorI2Vsc2UKKyAgICAoKHZvaWQpIGNpcGhlcnN1aXRlKTsKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UpCisgICAgaWYoIGNlcnRfZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICkKKyAgICB7CisgICAgICAgIGV4dF9vaWQgPSBNQkVEVExTX09JRF9TRVJWRVJfQVVUSDsKKyAgICAgICAgZXh0X2xlbiA9IE1CRURUTFNfT0lEX1NJWkUoIE1CRURUTFNfT0lEX1NFUlZFUl9BVVRIICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGV4dF9vaWQgPSBNQkVEVExTX09JRF9DTElFTlRfQVVUSDsKKyAgICAgICAgZXh0X2xlbiA9IE1CRURUTFNfT0lEX1NJWkUoIE1CRURUTFNfT0lEX0NMSUVOVF9BVVRIICk7CisgICAgfQorCisgICAgaWYoIG1iZWR0bHNfeDUwOV9jcnRfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlKCBjZXJ0LCBleHRfb2lkLCBleHRfbGVuICkgIT0gMCApCisgICAgeworICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfRVhUX0tFWV9VU0FHRTsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UgKi8KKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKy8qCisgKiBDb252ZXJ0IHZlcnNpb24gbnVtYmVycyB0by9mcm9tIHdpcmUgZm9ybWF0CisgKiBhbmQsIGZvciBEVExTLCB0by9mcm9tIFRMUyBlcXVpdmFsZW50LgorICoKKyAqIEZvciBUTFMgdGhpcyBpcyB0aGUgaWRlbnRpdHkuCisgKiBGb3IgRFRMUywgdXNlIG9uZSBjb21wbGVtZW50ICh2IC0+IDI1NSAtIHYsIGFuZCB0aGVuIG1hcCBhcyBmb2xsb3dzOgorICogMS4wIDwtPiAzLjIgICAgICAoRFRMUyAxLjAgaXMgYmFzZWQgb24gVExTIDEuMSkKKyAqIDEueCA8LT4gMy54KzEgICAgZm9yIHggIT0gMCAoRFRMUyAxLjIgYmFzZWQgb24gVExTIDEuMikKKyAqLwordm9pZCBtYmVkdGxzX3NzbF93cml0ZV92ZXJzaW9uKCBpbnQgbWFqb3IsIGludCBtaW5vciwgaW50IHRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdmVyWzJdICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyAgICAgICAgaWYoIG1pbm9yID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiApCisgICAgICAgICAgICAtLW1pbm9yOyAvKiBEVExTIDEuMCBzdG9yZWQgYXMgVExTIDEuMSBpbnRlcm5hbGx5ICovCisKKyAgICAgICAgdmVyWzBdID0gKHVuc2lnbmVkIGNoYXIpKCAyNTUgLSAoIG1ham9yIC0gMiApICk7CisgICAgICAgIHZlclsxXSA9ICh1bnNpZ25lZCBjaGFyKSggMjU1IC0gKCBtaW5vciAtIDEgKSApOworICAgIH0KKyAgICBlbHNlCisjZWxzZQorICAgICgodm9pZCkgdHJhbnNwb3J0KTsKKyNlbmRpZgorICAgIHsKKyAgICAgICAgdmVyWzBdID0gKHVuc2lnbmVkIGNoYXIpIG1ham9yOworICAgICAgICB2ZXJbMV0gPSAodW5zaWduZWQgY2hhcikgbWlub3I7CisgICAgfQorfQorCit2b2lkIG1iZWR0bHNfc3NsX3JlYWRfdmVyc2lvbiggaW50ICptYWpvciwgaW50ICptaW5vciwgaW50IHRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciB2ZXJbMl0gKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggdHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICAqbWFqb3IgPSAyNTUgLSB2ZXJbMF0gKyAyOworICAgICAgICAqbWlub3IgPSAyNTUgLSB2ZXJbMV0gKyAxOworCisgICAgICAgIGlmKCAqbWlub3IgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xICkKKyAgICAgICAgICAgICsrKm1pbm9yOyAvKiBEVExTIDEuMCBzdG9yZWQgYXMgVExTIDEuMSBpbnRlcm5hbGx5ICovCisgICAgfQorICAgIGVsc2UKKyNlbHNlCisgICAgKCh2b2lkKSB0cmFuc3BvcnQpOworI2VuZGlmCisgICAgeworICAgICAgICAqbWFqb3IgPSB2ZXJbMF07CisgICAgICAgICptaW5vciA9IHZlclsxXTsKKyAgICB9Cit9CisKK2ludCBtYmVkdGxzX3NzbF9zZXRfY2FsY192ZXJpZnlfbWQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IG1kICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgIT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICAgICAgcmV0dXJuIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1ZFUklGWV9IQVNIOworCisgICAgc3dpdGNoKCBtZCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hBU0hfTUQ1OgorICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPmNhbGNfdmVyaWZ5ID0gc3NsX2NhbGNfdmVyaWZ5X3RsczsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IQVNIX1NIQTE6CisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+Y2FsY192ZXJpZnkgPSBzc2xfY2FsY192ZXJpZnlfdGxzOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IQVNIX1NIQTM4NDoKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5jYWxjX3ZlcmlmeSA9IHNzbF9jYWxjX3ZlcmlmeV90bHNfc2hhMzg0OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSEFTSF9TSEEyNTY6CisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+Y2FsY192ZXJpZnkgPSBzc2xfY2FsY192ZXJpZnlfdGxzX3NoYTI1NjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfVkVSSUZZX0hBU0g7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisjZWxzZSAvKiAhTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisgICAgKHZvaWQpIHNzbDsKKyAgICAodm9pZCkgbWQ7CisKKyAgICByZXR1cm4gTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfVkVSSUZZX0hBU0g7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9UTFNfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvdGhyZWFkaW5nLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS90aHJlYWRpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2VjMDFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvdGhyZWFkaW5nLmMKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiAgVGhyZWFkaW5nIGFic3RyYWN0aW9uIGxheWVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3RocmVhZGluZy5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19QVEhSRUFEKQorc3RhdGljIHZvaWQgdGhyZWFkaW5nX211dGV4X2luaXRfcHRocmVhZCggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqbXV0ZXggKQoreworICAgIGlmKCBtdXRleCA9PSBOVUxMIHx8IG11dGV4LT5pc192YWxpZCApCisgICAgICAgIHJldHVybjsKKworICAgIG11dGV4LT5pc192YWxpZCA9IHB0aHJlYWRfbXV0ZXhfaW5pdCggJm11dGV4LT5tdXRleCwgTlVMTCApID09IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRocmVhZGluZ19tdXRleF9mcmVlX3B0aHJlYWQoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKm11dGV4ICkKK3sKKyAgICBpZiggbXV0ZXggPT0gTlVMTCB8fCAhbXV0ZXgtPmlzX3ZhbGlkICkKKyAgICAgICAgcmV0dXJuOworCisgICAgKHZvaWQpIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSggJm11dGV4LT5tdXRleCApOworICAgIG11dGV4LT5pc192YWxpZCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgdGhyZWFkaW5nX211dGV4X2xvY2tfcHRocmVhZCggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqbXV0ZXggKQoreworICAgIGlmKCBtdXRleCA9PSBOVUxMIHx8ICEgbXV0ZXgtPmlzX3ZhbGlkICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBwdGhyZWFkX211dGV4X2xvY2soICZtdXRleC0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHRocmVhZGluZ19tdXRleF91bmxvY2tfcHRocmVhZCggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqbXV0ZXggKQoreworICAgIGlmKCBtdXRleCA9PSBOVUxMIHx8ICEgbXV0ZXgtPmlzX3ZhbGlkICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBwdGhyZWFkX211dGV4X3VubG9jayggJm11dGV4LT5tdXRleCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3ZvaWQgKCptYmVkdGxzX211dGV4X2luaXQpKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSA9IHRocmVhZGluZ19tdXRleF9pbml0X3B0aHJlYWQ7Cit2b2lkICgqbWJlZHRsc19tdXRleF9mcmVlKSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqICkgPSB0aHJlYWRpbmdfbXV0ZXhfZnJlZV9wdGhyZWFkOworaW50ICgqbWJlZHRsc19tdXRleF9sb2NrKSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqICkgPSB0aHJlYWRpbmdfbXV0ZXhfbG9ja19wdGhyZWFkOworaW50ICgqbWJlZHRsc19tdXRleF91bmxvY2spKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSA9IHRocmVhZGluZ19tdXRleF91bmxvY2tfcHRocmVhZDsKKworLyoKKyAqIFdpdGggcGh0cmVhZHMgd2UgY2FuIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZSBtdXRleGVzCisgKi8KKyNkZWZpbmUgTVVURVhfSU5JVCAgPSB7IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsIDEgfQorCisjZW5kaWYgLyogTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19BTFQpCitzdGF0aWMgaW50IHRocmVhZGluZ19tdXRleF9mYWlsKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICptdXRleCApCit7CisgICAgKCh2b2lkKSBtdXRleCApOworICAgIHJldHVybiggTUJFRFRMU19FUlJfVEhSRUFESU5HX0JBRF9JTlBVVF9EQVRBICk7Cit9CitzdGF0aWMgdm9pZCB0aHJlYWRpbmdfbXV0ZXhfZHVtbXkoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKm11dGV4ICkKK3sKKyAgICAoKHZvaWQpIG11dGV4ICk7CisgICAgcmV0dXJuOworfQorCit2b2lkICgqbWJlZHRsc19tdXRleF9pbml0KSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqICkgPSB0aHJlYWRpbmdfbXV0ZXhfZHVtbXk7Cit2b2lkICgqbWJlZHRsc19tdXRleF9mcmVlKSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqICkgPSB0aHJlYWRpbmdfbXV0ZXhfZHVtbXk7CitpbnQgKCptYmVkdGxzX211dGV4X2xvY2spKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSA9IHRocmVhZGluZ19tdXRleF9mYWlsOworaW50ICgqbWJlZHRsc19tdXRleF91bmxvY2spKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSA9IHRocmVhZGluZ19tdXRleF9mYWlsOworCisvKgorICogU2V0IGZ1bmN0aW9ucyBwb2ludGVycyBhbmQgaW5pdGlhbGl6ZSBnbG9iYWwgbXV0ZXhlcworICovCit2b2lkIG1iZWR0bHNfdGhyZWFkaW5nX3NldF9hbHQoIHZvaWQgKCptdXRleF9pbml0KSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqICksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCptdXRleF9mcmVlKSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqICksCisgICAgICAgICAgICAgICAgICAgICAgIGludCAoKm11dGV4X2xvY2spKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqbXV0ZXhfdW5sb2NrKSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqICkgKQoreworICAgIG1iZWR0bHNfbXV0ZXhfaW5pdCA9IG11dGV4X2luaXQ7CisgICAgbWJlZHRsc19tdXRleF9mcmVlID0gbXV0ZXhfZnJlZTsKKyAgICBtYmVkdGxzX211dGV4X2xvY2sgPSBtdXRleF9sb2NrOworICAgIG1iZWR0bHNfbXV0ZXhfdW5sb2NrID0gbXV0ZXhfdW5sb2NrOworCisgICAgbWJlZHRsc19tdXRleF9pbml0KCAmbWJlZHRsc190aHJlYWRpbmdfcmVhZGRpcl9tdXRleCApOworICAgIG1iZWR0bHNfbXV0ZXhfaW5pdCggJm1iZWR0bHNfdGhyZWFkaW5nX2dtdGltZV9tdXRleCApOworfQorCisvKgorICogRnJlZSBnbG9iYWwgbXV0ZXhlcworICovCit2b2lkIG1iZWR0bHNfdGhyZWFkaW5nX2ZyZWVfYWx0KCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX211dGV4X2ZyZWUoICZtYmVkdGxzX3RocmVhZGluZ19yZWFkZGlyX211dGV4ICk7CisgICAgbWJlZHRsc19tdXRleF9mcmVlKCAmbWJlZHRsc190aHJlYWRpbmdfZ210aW1lX211dGV4ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19USFJFQURJTkdfQUxUICovCisKKy8qCisgKiBEZWZpbmUgZ2xvYmFsIG11dGV4ZXMKKyAqLworI2lmbmRlZiBNVVRFWF9JTklUCisjZGVmaW5lIE1VVEVYX0lOSVQKKyNlbmRpZgorbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCBtYmVkdGxzX3RocmVhZGluZ19yZWFkZGlyX211dGV4IE1VVEVYX0lOSVQ7CittYmVkdGxzX3RocmVhZGluZ19tdXRleF90IG1iZWR0bHNfdGhyZWFkaW5nX2dtdGltZV9tdXRleCBNVVRFWF9JTklUOworCisjZW5kaWYgLyogTUJFRFRMU19USFJFQURJTkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvdGltaW5nLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS90aW1pbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2M3ZmYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvdGltaW5nLmMKQEAgLTAsMCArMSw1MjUgQEAKKy8qCisgKiAgUG9ydGFibGUgaW50ZXJmYWNlIHRvIHRoZSBDUFUgY3ljbGUgY291bnRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkgJiYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19USU1JTkdfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvdGltaW5nLmgiCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1RJTUlOR19BTFQpCisKKyNpZiAhZGVmaW5lZCh1bml4KSAmJiAhZGVmaW5lZChfX3VuaXhfXykgJiYgIWRlZmluZWQoX191bml4KSAmJiBcCisgICAgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfV0lOMzIpCisjZXJyb3IgIlRoaXMgbW9kdWxlIG9ubHkgd29ya3Mgb24gVW5peCBhbmQgV2luZG93cywgc2VlIE1CRURUTFNfVElNSU5HX0MgaW4gY29uZmlnLmgiCisjZW5kaWYKKworI2lmbmRlZiBhc20KKyNkZWZpbmUgYXNtIF9fYXNtCisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChFRklYNjQpICYmICFkZWZpbmVkKEVGSTMyKQorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbmJhc2UuaD4KKworc3RydWN0IF9ocl90aW1lCit7CisgICAgTEFSR0VfSU5URUdFUiBzdGFydDsKK307CisKKyNlbHNlCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworc3RydWN0IF9ocl90aW1lCit7CisgICAgc3RydWN0IHRpbWV2YWwgc3RhcnQ7Cit9OworCisjZW5kaWYgLyogX1dJTjMyICYmICFFRklYNjQgJiYgIUVGSTMyICovCisKKyNpZiAhZGVmaW5lZChIQVZFX0hBUkRDTE9DSykgJiYgZGVmaW5lZChNQkVEVExTX0hBVkVfQVNNKSAmJiAgXAorICAgICggZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChfTV9JWDg2KSApIHx8IGRlZmluZWQoX19XQVRDT01DX18pCisKKyNkZWZpbmUgSEFWRV9IQVJEQ0xPQ0sKKwordW5zaWduZWQgbG9uZyBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soIHZvaWQgKQoreworICAgIHVuc2lnbmVkIGxvbmcgdHNjOworICAgIF9fYXNtICAgcmR0c2MKKyAgICBfX2FzbSAgIG1vdiAgW3RzY10sIGVheAorICAgIHJldHVybiggdHNjICk7Cit9CisjZW5kaWYgLyogIUhBVkVfSEFSRENMT0NLICYmIE1CRURUTFNfSEFWRV9BU00gJiYKKyAgICAgICAgICAoIF9NU0NfVkVSICYmIF9NX0lYODYgKSB8fCBfX1dBVENPTUNfXyAqLworCisvKiBzb21lIHZlcnNpb25zIG9mIG1pbmd3LTY0IGhhdmUgMzItYml0IGxvbmdzIGV2ZW4gb24geDg0XzY0ICovCisjaWYgIWRlZmluZWQoSEFWRV9IQVJEQ0xPQ0spICYmIGRlZmluZWQoTUJFRFRMU19IQVZFX0FTTSkgJiYgIFwKKyAgICBkZWZpbmVkKF9fR05VQ19fKSAmJiAoIGRlZmluZWQoX19pMzg2X18pIHx8ICggICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKCBfX3g4Nl82NF9fKSApICYmIF9fU0laRU9GX0xPTkdfXyA9PSA0ICkgKQorCisjZGVmaW5lIEhBVkVfSEFSRENMT0NLCisKK3Vuc2lnbmVkIGxvbmcgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCB2b2lkICkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGxvLCBoaTsKKyAgICBhc20gdm9sYXRpbGUoICJyZHRzYyIgOiAiPWEiIChsbyksICI9ZCIgKGhpKSApOworICAgIHJldHVybiggbG8gKTsKK30KKyNlbmRpZiAvKiAhSEFWRV9IQVJEQ0xPQ0sgJiYgTUJFRFRMU19IQVZFX0FTTSAmJgorICAgICAgICAgIF9fR05VQ19fICYmIF9faTM4Nl9fICovCisKKyNpZiAhZGVmaW5lZChIQVZFX0hBUkRDTE9DSykgJiYgZGVmaW5lZChNQkVEVExTX0hBVkVfQVNNKSAmJiAgXAorICAgIGRlZmluZWQoX19HTlVDX18pICYmICggZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKQorCisjZGVmaW5lIEhBVkVfSEFSRENMT0NLCisKK3Vuc2lnbmVkIGxvbmcgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCB2b2lkICkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGxvLCBoaTsKKyAgICBhc20gdm9sYXRpbGUoICJyZHRzYyIgOiAiPWEiIChsbyksICI9ZCIgKGhpKSApOworICAgIHJldHVybiggbG8gfCAoIGhpIDw8IDMyICkgKTsKK30KKyNlbmRpZiAvKiAhSEFWRV9IQVJEQ0xPQ0sgJiYgTUJFRFRMU19IQVZFX0FTTSAmJgorICAgICAgICAgIF9fR05VQ19fICYmICggX19hbWQ2NF9fIHx8IF9feDg2XzY0X18gKSAqLworCisjaWYgIWRlZmluZWQoSEFWRV9IQVJEQ0xPQ0spICYmIGRlZmluZWQoTUJFRFRMU19IQVZFX0FTTSkgJiYgIFwKKyAgICBkZWZpbmVkKF9fR05VQ19fKSAmJiAoIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19wcGNfXykgKQorCisjZGVmaW5lIEhBVkVfSEFSRENMT0NLCisKK3Vuc2lnbmVkIGxvbmcgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCB2b2lkICkKK3sKKyAgICB1bnNpZ25lZCBsb25nIHRibCwgdGJ1MCwgdGJ1MTsKKworICAgIGRvCisgICAgeworICAgICAgICBhc20gdm9sYXRpbGUoICJtZnRidSAlMCIgOiAiPXIiICh0YnUwKSApOworICAgICAgICBhc20gdm9sYXRpbGUoICJtZnRiICAlMCIgOiAiPXIiICh0YmwgKSApOworICAgICAgICBhc20gdm9sYXRpbGUoICJtZnRidSAlMCIgOiAiPXIiICh0YnUxKSApOworICAgIH0KKyAgICB3aGlsZSggdGJ1MCAhPSB0YnUxICk7CisKKyAgICByZXR1cm4oIHRibCApOworfQorI2VuZGlmIC8qICFIQVZFX0hBUkRDTE9DSyAmJiBNQkVEVExTX0hBVkVfQVNNICYmCisgICAgICAgICAgX19HTlVDX18gJiYgKCBfX3Bvd2VycGNfXyB8fCBfX3BwY19fICkgKi8KKworI2lmICFkZWZpbmVkKEhBVkVfSEFSRENMT0NLKSAmJiBkZWZpbmVkKE1CRURUTFNfSEFWRV9BU00pICYmICBcCisgICAgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX3NwYXJjNjRfXykKKworI2lmIGRlZmluZWQoX19PcGVuQlNEX18pCisjd2FybmluZyBPcGVuQlNEIGRvZXMgbm90IGFsbG93IGFjY2VzcyB0byB0aWNrIHJlZ2lzdGVyIHVzaW5nIHNvZnR3YXJlIHZlcnNpb24gaW5zdGVhZAorI2Vsc2UKKyNkZWZpbmUgSEFWRV9IQVJEQ0xPQ0sKKwordW5zaWduZWQgbG9uZyBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soIHZvaWQgKQoreworICAgIHVuc2lnbmVkIGxvbmcgdGljazsKKyAgICBhc20gdm9sYXRpbGUoICJyZHByICUldGljaywgJTA7IiA6ICI9JnIiICh0aWNrKSApOworICAgIHJldHVybiggdGljayApOworfQorI2VuZGlmIC8qIF9fT3BlbkJTRF9fICovCisjZW5kaWYgLyogIUhBVkVfSEFSRENMT0NLICYmIE1CRURUTFNfSEFWRV9BU00gJiYKKyAgICAgICAgICBfX0dOVUNfXyAmJiBfX3NwYXJjNjRfXyAqLworCisjaWYgIWRlZmluZWQoSEFWRV9IQVJEQ0xPQ0spICYmIGRlZmluZWQoTUJFRFRMU19IQVZFX0FTTSkgJiYgIFwKKyAgICBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgIWRlZmluZWQoX19zcGFyYzY0X18pCisKKyNkZWZpbmUgSEFWRV9IQVJEQ0xPQ0sKKwordW5zaWduZWQgbG9uZyBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soIHZvaWQgKQoreworICAgIHVuc2lnbmVkIGxvbmcgdGljazsKKyAgICBhc20gdm9sYXRpbGUoICIuYnl0ZSAweDgzLCAweDQxLCAweDAwLCAweDAwIiApOworICAgIGFzbSB2b2xhdGlsZSggIm1vdiAgICUlZzEsICUwIiA6ICI9ciIgKHRpY2spICk7CisgICAgcmV0dXJuKCB0aWNrICk7Cit9CisjZW5kaWYgLyogIUhBVkVfSEFSRENMT0NLICYmIE1CRURUTFNfSEFWRV9BU00gJiYKKyAgICAgICAgICBfX0dOVUNfXyAmJiBfX3NwYXJjX18gJiYgIV9fc3BhcmM2NF9fICovCisKKyNpZiAhZGVmaW5lZChIQVZFX0hBUkRDTE9DSykgJiYgZGVmaW5lZChNQkVEVExTX0hBVkVfQVNNKSAmJiAgICAgIFwKKyAgICBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fYWxwaGFfXykKKworI2RlZmluZSBIQVZFX0hBUkRDTE9DSworCit1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayggdm9pZCApCit7CisgICAgdW5zaWduZWQgbG9uZyBjYzsKKyAgICBhc20gdm9sYXRpbGUoICJycGNjICUwIiA6ICI9ciIgKGNjKSApOworICAgIHJldHVybiggY2MgJiAweEZGRkZGRkZGICk7Cit9CisjZW5kaWYgLyogIUhBVkVfSEFSRENMT0NLICYmIE1CRURUTFNfSEFWRV9BU00gJiYKKyAgICAgICAgICBfX0dOVUNfXyAmJiBfX2FscGhhX18gKi8KKworI2lmICFkZWZpbmVkKEhBVkVfSEFSRENMT0NLKSAmJiBkZWZpbmVkKE1CRURUTFNfSEFWRV9BU00pICYmICAgICAgXAorICAgIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19pYTY0X18pCisKKyNkZWZpbmUgSEFWRV9IQVJEQ0xPQ0sKKwordW5zaWduZWQgbG9uZyBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soIHZvaWQgKQoreworICAgIHVuc2lnbmVkIGxvbmcgaXRjOworICAgIGFzbSB2b2xhdGlsZSggIm1vdiAlMCA9IGFyLml0YyIgOiAiPXIiIChpdGMpICk7CisgICAgcmV0dXJuKCBpdGMgKTsKK30KKyNlbmRpZiAvKiAhSEFWRV9IQVJEQ0xPQ0sgJiYgTUJFRFRMU19IQVZFX0FTTSAmJgorICAgICAgICAgIF9fR05VQ19fICYmIF9faWE2NF9fICovCisKKyNpZiAhZGVmaW5lZChIQVZFX0hBUkRDTE9DSykgJiYgZGVmaW5lZChfTVNDX1ZFUikgJiYgXAorICAgICFkZWZpbmVkKEVGSVg2NCkgJiYgIWRlZmluZWQoRUZJMzIpCisKKyNkZWZpbmUgSEFWRV9IQVJEQ0xPQ0sKKwordW5zaWduZWQgbG9uZyBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soIHZvaWQgKQoreworICAgIExBUkdFX0lOVEVHRVIgb2Zmc2V0OworCisgICAgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoICZvZmZzZXQgKTsKKworICAgIHJldHVybiggKHVuc2lnbmVkIGxvbmcpKCBvZmZzZXQuUXVhZFBhcnQgKSApOworfQorI2VuZGlmIC8qICFIQVZFX0hBUkRDTE9DSyAmJiBfTVNDX1ZFUiAmJiAhRUZJWDY0ICYmICFFRkkzMiAqLworCisjaWYgIWRlZmluZWQoSEFWRV9IQVJEQ0xPQ0spCisKKyNkZWZpbmUgSEFWRV9IQVJEQ0xPQ0sKKworc3RhdGljIGludCBoYXJkY2xvY2tfaW5pdCA9IDA7CitzdGF0aWMgc3RydWN0IHRpbWV2YWwgdHZfaW5pdDsKKwordW5zaWduZWQgbG9uZyBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soIHZvaWQgKQoreworICAgIHN0cnVjdCB0aW1ldmFsIHR2X2N1cjsKKworICAgIGlmKCBoYXJkY2xvY2tfaW5pdCA9PSAwICkKKyAgICB7CisgICAgICAgIGdldHRpbWVvZmRheSggJnR2X2luaXQsIE5VTEwgKTsKKyAgICAgICAgaGFyZGNsb2NrX2luaXQgPSAxOworICAgIH0KKworICAgIGdldHRpbWVvZmRheSggJnR2X2N1ciwgTlVMTCApOworICAgIHJldHVybiggKCB0dl9jdXIudHZfc2VjICAtIHR2X2luaXQudHZfc2VjICApICogMTAwMDAwMAorICAgICAgICAgICsgKCB0dl9jdXIudHZfdXNlYyAtIHR2X2luaXQudHZfdXNlYyApICk7Cit9CisjZW5kaWYgLyogIUhBVkVfSEFSRENMT0NLICovCisKK3ZvbGF0aWxlIGludCBtYmVkdGxzX3RpbWluZ19hbGFybWVkID0gMDsKKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChFRklYNjQpICYmICFkZWZpbmVkKEVGSTMyKQorCit1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2dldF90aW1lciggc3RydWN0IG1iZWR0bHNfdGltaW5nX2hyX3RpbWUgKnZhbCwgaW50IHJlc2V0ICkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGRlbHRhOworICAgIExBUkdFX0lOVEVHRVIgb2Zmc2V0LCBoZnJlcTsKKyAgICBzdHJ1Y3QgX2hyX3RpbWUgKnQgPSAoc3RydWN0IF9ocl90aW1lICopIHZhbDsKKworICAgIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCAgJm9mZnNldCApOworICAgIFF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3koICZoZnJlcSApOworCisgICAgZGVsdGEgPSAodW5zaWduZWQgbG9uZykoICggMTAwMCAqCisgICAgICAgICggb2Zmc2V0LlF1YWRQYXJ0IC0gdC0+c3RhcnQuUXVhZFBhcnQgKSApIC8KKyAgICAgICAgICAgaGZyZXEuUXVhZFBhcnQgKTsKKworICAgIGlmKCByZXNldCApCisgICAgICAgIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCAmdC0+c3RhcnQgKTsKKworICAgIHJldHVybiggZGVsdGEgKTsKK30KKworLyogSXQncyBPSyB0byB1c2UgYSBnbG9iYWwgYmVjYXVzZSBhbGFybSgpIGlzIHN1cHBvc2VkIHRvIGJlIGdsb2JhbCBhbnl3YXkgKi8KK3N0YXRpYyBEV09SRCBhbGFybU1zOworCitzdGF0aWMgRFdPUkQgV0lOQVBJIFRpbWVyUHJvYyggTFBWT0lEIFRpbWVyQ29udGV4dCApCit7CisgICAgKCh2b2lkKSBUaW1lckNvbnRleHQpOworICAgIFNsZWVwKCBhbGFybU1zICk7CisgICAgbWJlZHRsc190aW1pbmdfYWxhcm1lZCA9IDE7CisgICAgcmV0dXJuKCBUUlVFICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zZXRfYWxhcm0oIGludCBzZWNvbmRzICkKK3sKKyAgICBEV09SRCBUaHJlYWRJZDsKKworICAgIG1iZWR0bHNfdGltaW5nX2FsYXJtZWQgPSAwOworICAgIGFsYXJtTXMgPSBzZWNvbmRzICogMTAwMDsKKyAgICBDbG9zZUhhbmRsZSggQ3JlYXRlVGhyZWFkKCBOVUxMLCAwLCBUaW1lclByb2MsIE5VTEwsIDAsICZUaHJlYWRJZCApICk7Cit9CisKKyNlbHNlIC8qIF9XSU4zMiAmJiAhRUZJWDY0ICYmICFFRkkzMiAqLworCit1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2dldF90aW1lciggc3RydWN0IG1iZWR0bHNfdGltaW5nX2hyX3RpbWUgKnZhbCwgaW50IHJlc2V0ICkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGRlbHRhOworICAgIHN0cnVjdCB0aW1ldmFsIG9mZnNldDsKKyAgICBzdHJ1Y3QgX2hyX3RpbWUgKnQgPSAoc3RydWN0IF9ocl90aW1lICopIHZhbDsKKworICAgIGdldHRpbWVvZmRheSggJm9mZnNldCwgTlVMTCApOworCisgICAgaWYoIHJlc2V0ICkKKyAgICB7CisgICAgICAgIHQtPnN0YXJ0LnR2X3NlYyAgPSBvZmZzZXQudHZfc2VjOworICAgICAgICB0LT5zdGFydC50dl91c2VjID0gb2Zmc2V0LnR2X3VzZWM7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIGRlbHRhID0gKCBvZmZzZXQudHZfc2VjICAtIHQtPnN0YXJ0LnR2X3NlYyAgKSAqIDEwMDAKKyAgICAgICAgICArICggb2Zmc2V0LnR2X3VzZWMgLSB0LT5zdGFydC50dl91c2VjICkgLyAxMDAwOworCisgICAgcmV0dXJuKCBkZWx0YSApOworfQorCitzdGF0aWMgdm9pZCBzaWdoYW5kbGVyKCBpbnQgc2lnbnVtICkKK3sKKyAgICBtYmVkdGxzX3RpbWluZ19hbGFybWVkID0gMTsKKyAgICBzaWduYWwoIHNpZ251bSwgc2lnaGFuZGxlciApOworfQorCit2b2lkIG1iZWR0bHNfc2V0X2FsYXJtKCBpbnQgc2Vjb25kcyApCit7CisgICAgbWJlZHRsc190aW1pbmdfYWxhcm1lZCA9IDA7CisgICAgc2lnbmFsKCBTSUdBTFJNLCBzaWdoYW5kbGVyICk7CisgICAgYWxhcm0oIHNlY29uZHMgKTsKK30KKworI2VuZGlmIC8qIF9XSU4zMiAmJiAhRUZJWDY0ICYmICFFRkkzMiAqLworCisvKgorICogU2V0IGRlbGF5cyB0byB3YXRjaAorICovCit2b2lkIG1iZWR0bHNfdGltaW5nX3NldF9kZWxheSggdm9pZCAqZGF0YSwgdWludDMyX3QgaW50X21zLCB1aW50MzJfdCBmaW5fbXMgKQoreworICAgIG1iZWR0bHNfdGltaW5nX2RlbGF5X2NvbnRleHQgKmN0eCA9IChtYmVkdGxzX3RpbWluZ19kZWxheV9jb250ZXh0ICopIGRhdGE7CisKKyAgICBjdHgtPmludF9tcyA9IGludF9tczsKKyAgICBjdHgtPmZpbl9tcyA9IGZpbl9tczsKKworICAgIGlmKCBmaW5fbXMgIT0gMCApCisgICAgICAgICh2b2lkKSBtYmVkdGxzX3RpbWluZ19nZXRfdGltZXIoICZjdHgtPnRpbWVyLCAxICk7Cit9CisKKy8qCisgKiBHZXQgbnVtYmVyIG9mIGRlbGF5cyBleHBpcmVkCisgKi8KK2ludCBtYmVkdGxzX3RpbWluZ19nZXRfZGVsYXkoIHZvaWQgKmRhdGEgKQoreworICAgIG1iZWR0bHNfdGltaW5nX2RlbGF5X2NvbnRleHQgKmN0eCA9IChtYmVkdGxzX3RpbWluZ19kZWxheV9jb250ZXh0ICopIGRhdGE7CisgICAgdW5zaWduZWQgbG9uZyBlbGFwc2VkX21zOworCisgICAgaWYoIGN0eC0+ZmluX21zID09IDAgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBlbGFwc2VkX21zID0gbWJlZHRsc190aW1pbmdfZ2V0X3RpbWVyKCAmY3R4LT50aW1lciwgMCApOworCisgICAgaWYoIGVsYXBzZWRfbXMgPj0gY3R4LT5maW5fbXMgKQorICAgICAgICByZXR1cm4oIDIgKTsKKworICAgIGlmKCBlbGFwc2VkX21zID49IGN0eC0+aW50X21zICkKKyAgICAgICAgcmV0dXJuKCAxICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2VuZGlmIC8qICFNQkVEVExTX1RJTUlOR19BTFQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKKy8qCisgKiBCdXN5LXdhaXRzIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4KKyAqIFVzZWQgZm9yIHRlc3RpbmcgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrLgorICovCitzdGF0aWMgdm9pZCBidXN5X21zbGVlcCggdW5zaWduZWQgbG9uZyBtc2VjICkKK3sKKyAgICBzdHJ1Y3QgbWJlZHRsc190aW1pbmdfaHJfdGltZSBoaXJlczsKKyAgICB1bnNpZ25lZCBsb25nIGkgPSAwOyAvKiBmb3IgYnVzeS13YWl0aW5nICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBqOyAvKiB0byBwcmV2ZW50IG9wdGltaXNhdGlvbiAqLworCisgICAgKHZvaWQpIG1iZWR0bHNfdGltaW5nX2dldF90aW1lciggJmhpcmVzLCAxICk7CisKKyAgICB3aGlsZSggbWJlZHRsc190aW1pbmdfZ2V0X3RpbWVyKCAmaGlyZXMsIDAgKSA8IG1zZWMgKQorICAgICAgICBpKys7CisKKyAgICBqID0gaTsKKyAgICAodm9pZCkgajsKK30KKworI2RlZmluZSBGQUlMICAgIGRvICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYoIHZlcmJvc2UgIT0gMCApICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuKCAxICk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSggMCApCisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBXYXJuaW5nOiB0aGlzIGlzIHdvcmsgaW4gcHJvZ3Jlc3MsIHNvbWUgdGVzdHMgbWF5IG5vdCBiZSByZWxpYWJsZSBlbm91Z2gKKyAqIHlldCEgRmFsc2UgcG9zaXRpdmVzIG1heSBoYXBwZW4uCisgKi8KK2ludCBtYmVkdGxzX3RpbWluZ19zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGN5Y2xlcywgcmF0aW87CisgICAgdW5zaWduZWQgbG9uZyBtaWxsaXNlY3MsIHNlY3M7CisgICAgaW50IGhhcmRmYWlsOworICAgIHN0cnVjdCBtYmVkdGxzX3RpbWluZ19ocl90aW1lIGhpcmVzOworICAgIHVpbnQzMl90IGEsIGI7CisgICAgbWJlZHRsc190aW1pbmdfZGVsYXlfY29udGV4dCBjdHg7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFRJTUlORyB0ZXN0cyBub3RlOiB3aWxsIHRha2Ugc29tZSB0aW1lIVxuIiApOworCisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFRJTUlORyB0ZXN0ICMxIChzZXRfYWxhcm0gLyBnZXRfdGltZXIpOiAiICk7CisKKyAgICBmb3IoIHNlY3MgPSAxOyBzZWNzIDw9IDM7IHNlY3MrKyApCisgICAgeworICAgICAgICAodm9pZCkgbWJlZHRsc190aW1pbmdfZ2V0X3RpbWVyKCAmaGlyZXMsIDEgKTsKKworICAgICAgICBtYmVkdGxzX3NldF9hbGFybSggKGludCkgc2VjcyApOworICAgICAgICB3aGlsZSggIW1iZWR0bHNfdGltaW5nX2FsYXJtZWQgKQorICAgICAgICAgICAgOworCisgICAgICAgIG1pbGxpc2VjcyA9IG1iZWR0bHNfdGltaW5nX2dldF90aW1lciggJmhpcmVzLCAwICk7CisKKyAgICAgICAgLyogRm9yIHNvbWUgcmVhc29uIG9uIFdpbmRvd3MgaXQgbG9va3MgbGlrZSBhbGFybSBoYXMgYW4gZXh0cmEgZGVsYXkKKyAgICAgICAgICogKG1heWJlIHJlbGF0ZWQgdG8gY3JlYXRpbmcgYSBuZXcgdGhyZWFkKS4gQWxsb3cgc29tZSByb29tIGhlcmUuICovCisgICAgICAgIGlmKCBtaWxsaXNlY3MgPCA4MDAgKiBzZWNzIHx8IG1pbGxpc2VjcyA+IDEyMDAgKiBzZWNzICsgMzAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgVElNSU5HIHRlc3QgIzIgKHNldC9nZXRfZGVsYXkgICAgICAgICk6ICIgKTsKKworICAgIGZvciggYSA9IDIwMDsgYSA8PSA0MDA7IGEgKz0gMjAwICkKKyAgICB7CisgICAgICAgIGZvciggYiA9IDIwMDsgYiA8PSA0MDA7IGIgKz0gMjAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc190aW1pbmdfc2V0X2RlbGF5KCAmY3R4LCBhLCBhICsgYiApOworCisgICAgICAgICAgICBidXN5X21zbGVlcCggYSAtIGEgLyA4ICk7CisgICAgICAgICAgICBpZiggbWJlZHRsc190aW1pbmdfZ2V0X2RlbGF5KCAmY3R4ICkgIT0gMCApCisgICAgICAgICAgICAgICAgRkFJTDsKKworICAgICAgICAgICAgYnVzeV9tc2xlZXAoIGEgLyA0ICk7CisgICAgICAgICAgICBpZiggbWJlZHRsc190aW1pbmdfZ2V0X2RlbGF5KCAmY3R4ICkgIT0gMSApCisgICAgICAgICAgICAgICAgRkFJTDsKKworICAgICAgICAgICAgYnVzeV9tc2xlZXAoIGIgLSBhIC8gOCAtIGIgLyA4ICk7CisgICAgICAgICAgICBpZiggbWJlZHRsc190aW1pbmdfZ2V0X2RlbGF5KCAmY3R4ICkgIT0gMSApCisgICAgICAgICAgICAgICAgRkFJTDsKKworICAgICAgICAgICAgYnVzeV9tc2xlZXAoIGIgLyA0ICk7CisgICAgICAgICAgICBpZiggbWJlZHRsc190aW1pbmdfZ2V0X2RlbGF5KCAmY3R4ICkgIT0gMiApCisgICAgICAgICAgICAgICAgRkFJTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1iZWR0bHNfdGltaW5nX3NldF9kZWxheSggJmN0eCwgMCwgMCApOworICAgIGJ1c3lfbXNsZWVwKCAyMDAgKTsKKyAgICBpZiggbWJlZHRsc190aW1pbmdfZ2V0X2RlbGF5KCAmY3R4ICkgIT0gLTEgKQorICAgICAgICBGQUlMOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFRJTUlORyB0ZXN0ICMzIChoYXJkY2xvY2sgLyBnZXRfdGltZXIpOiAiICk7CisKKyAgICAvKgorICAgICAqIEFsbG93IG9uZSBmYWlsdXJlIGZvciBwb3NzaWJsZSBjb3VudGVyIHdyYXBwaW5nLgorICAgICAqIE9uIGEgNEdoeiAzMi1iaXQgbWFjaGluZSB0aGUgY3ljbGUgY291bnRlciB3cmFwcyBhYm91dCBvbmNlIHBlciBzZWNvbmQ7CisgICAgICogc2luY2UgdGhlIHdob2xlIHRlc3QgaXMgYWJvdXQgMTBtcywgaXQgc2hvdWxkbid0IGhhcHBlbiB0d2ljZSBpbiBhIHJvdy4KKyAgICAgKi8KKyAgICBoYXJkZmFpbCA9IDA7CisKK2hhcmRfdGVzdDoKKyAgICBpZiggaGFyZGZhaWwgPiAxICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWQgKGlnbm9yZWQpXG4iICk7CisKKyAgICAgICAgZ290byBoYXJkX3Rlc3RfZG9uZTsKKyAgICB9CisKKyAgICAvKiBHZXQgYSByZWZlcmVuY2UgcmF0aW8gY3ljbGVzL21zICovCisgICAgbWlsbGlzZWNzID0gMTsKKyAgICBjeWNsZXMgPSBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soKTsKKyAgICBidXN5X21zbGVlcCggbWlsbGlzZWNzICk7CisgICAgY3ljbGVzID0gbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCkgLSBjeWNsZXM7CisgICAgcmF0aW8gPSBjeWNsZXMgLyBtaWxsaXNlY3M7CisKKyAgICAvKiBDaGVjayB0aGF0IHRoZSByYXRpbyBpcyBtb3N0bHkgY29uc3RhbnQgKi8KKyAgICBmb3IoIG1pbGxpc2VjcyA9IDI7IG1pbGxpc2VjcyA8PSA0OyBtaWxsaXNlY3MrKyApCisgICAgeworICAgICAgICBjeWNsZXMgPSBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soKTsKKyAgICAgICAgYnVzeV9tc2xlZXAoIG1pbGxpc2VjcyApOworICAgICAgICBjeWNsZXMgPSBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soKSAtIGN5Y2xlczsKKworICAgICAgICAvKiBBbGxvdyB2YXJpYXRpb24gdXAgdG8gMjAlICovCisgICAgICAgIGlmKCBjeWNsZXMgLyBtaWxsaXNlY3MgPCByYXRpbyAtIHJhdGlvIC8gNSB8fAorICAgICAgICAgICAgY3ljbGVzIC8gbWlsbGlzZWNzID4gcmF0aW8gKyByYXRpbyAvIDUgKQorICAgICAgICB7CisgICAgICAgICAgICBoYXJkZmFpbCsrOworICAgICAgICAgICAgZ290byBoYXJkX3Rlc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworaGFyZF90ZXN0X2RvbmU6CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfVElNSU5HX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3ZlcnNpb24uYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3ZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2E4MGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvdmVyc2lvbi5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAgVmVyc2lvbiBpbmZvcm1hdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fQykKKworI2luY2x1ZGUgIm1iZWR0bHMvdmVyc2lvbi5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorCit1bnNpZ25lZCBpbnQgbWJlZHRsc192ZXJzaW9uX2dldF9udW1iZXIoKQoreworICAgIHJldHVybiggTUJFRFRMU19WRVJTSU9OX05VTUJFUiApOworfQorCit2b2lkIG1iZWR0bHNfdmVyc2lvbl9nZXRfc3RyaW5nKCBjaGFyICpzdHJpbmcgKQoreworICAgIG1lbWNweSggc3RyaW5nLCBNQkVEVExTX1ZFUlNJT05fU1RSSU5HLAorICAgICAgICAgICAgc2l6ZW9mKCBNQkVEVExTX1ZFUlNJT05fU1RSSU5HICkgKTsKK30KKwordm9pZCBtYmVkdGxzX3ZlcnNpb25fZ2V0X3N0cmluZ19mdWxsKCBjaGFyICpzdHJpbmcgKQoreworICAgIG1lbWNweSggc3RyaW5nLCBNQkVEVExTX1ZFUlNJT05fU1RSSU5HX0ZVTEwsCisgICAgICAgICAgICBzaXplb2YoIE1CRURUTFNfVkVSU0lPTl9TVFJJTkdfRlVMTCApICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1ZFUlNJT05fQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvdmVyc2lvbl9mZWF0dXJlcy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvdmVyc2lvbl9mZWF0dXJlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NjZlNjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS92ZXJzaW9uX2ZlYXR1cmVzLmMKQEAgLTAsMCArMSw2NDcgQEAKKy8qCisgKiAgVmVyc2lvbiBmZWF0dXJlIGluZm9ybWF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVkVSU0lPTl9DKQorCisjaW5jbHVkZSAibWJlZHRscy92ZXJzaW9uLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgKmZlYXR1cmVzW10gPSB7CisjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMpCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfQVNNKQorICAgICJNQkVEVExTX0hBVkVfQVNNIiwKKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVfQVNNICovCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfU1NFMikKKyAgICAiTUJFRFRMU19IQVZFX1NTRTIiLAorI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9TU0UyICovCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICAiTUJFRFRMU19IQVZFX1RJTUUiLAorI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9USU1FICovCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRV9EQVRFKQorICAgICJNQkVEVExTX0hBVkVfVElNRV9EQVRFIiwKKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVfVElNRV9EQVRFICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX01FTU9SWSkKKyAgICAiTUJFRFRMU19QTEFURk9STV9NRU1PUlkiLAorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMpCisgICAgIk1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUyIsCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUKQorICAgICJNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUKQorICAgICJNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUKQorICAgICJNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQpCisgICAgIk1CRURUTFNfUExBVEZPUk1fUFJJTlRGX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCkKKyAgICAiTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUKQorICAgICJNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORykKKyAgICAiTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkciLAorI2VuZGlmIC8qIE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HICovCisjaWYgZGVmaW5lZChNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRCkKKyAgICAiTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX1RJTUlOR19BTFQpCisgICAgIk1CRURUTFNfVElNSU5HX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19USU1JTkdfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19BTFQpCisgICAgIk1CRURUTFNfQUVTX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19BRVNfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQUxUKQorICAgICJNQkVEVExTX0FSQzRfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX0FSQzRfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0JMT1dGSVNIX0FMVCkKKyAgICAiTUJFRFRMU19CTE9XRklTSF9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfQkxPV0ZJU0hfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0FMVCkKKyAgICAiTUJFRFRMU19DQU1FTExJQV9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfQ0FNRUxMSUFfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19BTFQpCisgICAgIk1CRURUTFNfREVTX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19ERVNfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1hURUFfQUxUKQorICAgICJNQkVEVExTX1hURUFfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1hURUFfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX01EMl9BTFQpCisgICAgIk1CRURUTFNfTUQyX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19NRDJfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9BTFQpCisgICAgIk1CRURUTFNfTUQ0X0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19NRDRfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9BTFQpCisgICAgIk1CRURUTFNfTUQ1X0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19NRDVfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1JJUEVNRDE2MF9BTFQpCisgICAgIk1CRURUTFNfUklQRU1EMTYwX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19SSVBFTUQxNjBfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQUxUKQorICAgICJNQkVEVExTX1NIQTFfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9BTFQpCisgICAgIk1CRURUTFNfU0hBMjU2X0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9BTFQpCisgICAgIk1CRURUTFNfU0hBNTEyX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX01EMl9QUk9DRVNTX0FMVCkKKyAgICAiTUJFRFRMU19NRDJfUFJPQ0VTU19BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfTUQyX1BST0NFU1NfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9QUk9DRVNTX0FMVCkKKyAgICAiTUJFRFRMU19NRDRfUFJPQ0VTU19BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfTUQ0X1BST0NFU1NfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9QUk9DRVNTX0FMVCkKKyAgICAiTUJFRFRMU19NRDVfUFJPQ0VTU19BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfTUQ1X1BST0NFU1NfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1JJUEVNRDE2MF9QUk9DRVNTX0FMVCkKKyAgICAiTUJFRFRMU19SSVBFTUQxNjBfUFJPQ0VTU19BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfUklQRU1EMTYwX1BST0NFU1NfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfUFJPQ0VTU19BTFQpCisgICAgIk1CRURUTFNfU0hBMV9QUk9DRVNTX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19TSEExX1BST0NFU1NfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9QUk9DRVNTX0FMVCkKKyAgICAiTUJFRFRMU19TSEEyNTZfUFJPQ0VTU19BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X1BST0NFU1NfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9QUk9DRVNTX0FMVCkKKyAgICAiTUJFRFRMU19TSEE1MTJfUFJPQ0VTU19BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX1BST0NFU1NfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19TRVRLRVlfQUxUKQorICAgICJNQkVEVExTX0RFU19TRVRLRVlfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX0RFU19TRVRLRVlfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DUllQVF9FQ0JfQUxUKQorICAgICJNQkVEVExTX0RFU19DUllQVF9FQ0JfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DUllQVF9FQ0JfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0RFUzNfQ1JZUFRfRUNCX0FMVCkKKyAgICAiTUJFRFRMU19ERVMzX0NSWVBUX0VDQl9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfREVTM19DUllQVF9FQ0JfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19TRVRLRVlfRU5DX0FMVCkKKyAgICAiTUJFRFRMU19BRVNfU0VUS0VZX0VOQ19BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfQUVTX1NFVEtFWV9FTkNfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19TRVRLRVlfREVDX0FMVCkKKyAgICAiTUJFRFRMU19BRVNfU0VUS0VZX0RFQ19BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfQUVTX1NFVEtFWV9ERUNfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19FTkNSWVBUX0FMVCkKKyAgICAiTUJFRFRMU19BRVNfRU5DUllQVF9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfQUVTX0VOQ1JZUFRfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19ERUNSWVBUX0FMVCkKKyAgICAiTUJFRFRMU19BRVNfREVDUllQVF9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfQUVTX0RFQ1JZUFRfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZKQorICAgICJNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZIiwKKyNlbmRpZiAvKiBNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUKQorICAgICJNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19ST01fVEFCTEVTKQorICAgICJNQkVEVExTX0FFU19ST01fVEFCTEVTIiwKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19ST01fVEFCTEVTICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX1NNQUxMX01FTU9SWSkKKyAgICAiTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkiLAorI2VuZGlmIC8qIE1CRURUTFNfQ0FNRUxMSUFfU01BTExfTUVNT1JZICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICAiTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMiLAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICAiTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIiLAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICAiTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIiLAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUikKKyAgICAiTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIiLAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3KQorICAgICJNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3IiwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3ICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MpCisgICAgIk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUyIsCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4pCisgICAgIk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTiIsCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TKQorICAgICJNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TIiwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUykKKyAgICAiTUJFRFRMU19FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMiLAorI2VuZGlmIC8qIE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTICovCisjaWYgZGVmaW5lZChNQkVEVExTX1JFTU9WRV9BUkM0X0NJUEhFUlNVSVRFUykKKyAgICAiTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMiLAorI2VuZGlmIC8qIE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQpCisgICAgIk1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQlAyNTZSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQpCisgICAgIk1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQpCisgICAgIk1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQpCisgICAgIk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9OSVNUX09QVElNKQorICAgICJNQkVEVExTX0VDUF9OSVNUX09QVElNIiwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9OSVNUX09QVElNICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpCisgICAgIk1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQyIsCisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQpCisgICAgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQpCisgICAgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpCisgICAgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKQorICAgICJNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpCisgICAgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKQorICAgICJNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVEKQorICAgICJNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZKQorICAgICJNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZIiwKKyNlbmRpZiAvKiBNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZICovCisjaWYgZGVmaW5lZChNQkVEVExTX0dFTlBSSU1FKQorICAgICJNQkVEVExTX0dFTlBSSU1FIiwKKyNlbmRpZiAvKiBNQkVEVExTX0dFTlBSSU1FICovCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgICJNQkVEVExTX0ZTX0lPIiwKKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisjaWYgZGVmaW5lZChNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTKQorICAgICJNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTIiwKKyNlbmRpZiAvKiBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTICovCisjaWYgZGVmaW5lZChNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkpCisgICAgIk1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWSIsCisjZW5kaWYgLyogTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2KQorICAgICJNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2IiwKKyNlbmRpZiAvKiBNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2ICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKKyAgICAiTUJFRFRMU19FTlRST1BZX05WX1NFRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAiTUJFRFRMU19NRU1PUllfREVCVUciLAorI2VuZGlmIC8qIE1CRURUTFNfTUVNT1JZX0RFQlVHICovCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UpCisgICAgIk1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRSIsCisjZW5kaWYgLyogTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCkKKyAgICAiTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQiLAorI2VuZGlmIC8qIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkKKyAgICAiTUJFRFRMU19QS0NTMV9WMTUiLAorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjE1ICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKyAgICAiTUJFRFRMU19QS0NTMV9WMjEiLAorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjIxICovCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9OT19DUlQpCisgICAgIk1CRURUTFNfUlNBX05PX0NSVCIsCisjZW5kaWYgLyogTUJFRFRMU19SU0FfTk9fQ1JUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyAgICAiTUJFRFRMU19TRUxGX1RFU1QiLAorI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9TTUFMTEVSKQorICAgICJNQkVEVExTX1NIQTI1Nl9TTUFMTEVSIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9TTUFMTEVSICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTExfQUxFUlRfTUVTU0FHRVMpCisgICAgIk1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUyIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfQUxMX0FMRVJUX01FU1NBR0VTICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9ERUJVR19BTEwpCisgICAgIk1CRURUTFNfU1NMX0RFQlVHX0FMTCIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfREVCVUdfQUxMICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorICAgICJNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorICAgICJNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWKQorICAgICJNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwpCisgICAgIk1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORykKKyAgICAiTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkciLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgICJNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8pCisgICAgIk1CRURUTFNfU1NMX1NSVl9TVVBQT1JUX1NTTFYyX0NMSUVOVF9IRUxMTyIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRSkKKyAgICAiTUJFRFRMU19TU0xfU1JWX1JFU1BFQ1RfQ0xJRU5UX1BSRUZFUkVOQ0UiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorICAgICJNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorICAgICJNQkVEVExTX1NTTF9QUk9UT19TU0wzIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKQorICAgICJNQkVEVExTX1NTTF9QUk9UT19UTFMxIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisgICAgIk1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgIk1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgICJNQkVEVExTX1NTTF9QUk9UT19EVExTIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19EVExTICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgICJNQkVEVExTX1NTTF9BTFBOIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQorICAgICJNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkKKyAgICAiTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFKQorICAgICJNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVCkKKyAgICAiTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgIk1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFBPUlRfS0VZUykKKyAgICAiTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQorICAgICJNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKKyAgICAiTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDICovCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19BTFQpCisgICAgIk1CRURUTFNfVEhSRUFESU5HX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19USFJFQURJTkdfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19QVEhSRUFEKQorICAgICJNQkVEVExTX1RIUkVBRElOR19QVEhSRUFEIiwKKyNlbmRpZiAvKiBNQkVEVExTX1RIUkVBRElOR19QVEhSRUFEICovCisjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMpCisgICAgIk1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUyIsCisjZW5kaWYgLyogTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMpCisgICAgIk1CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMyIsCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0FMTE9XX0VYVEVOU0lPTlNfTk9OX1YzICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQUxMT1dfVU5TVVBQT1JURURfQ1JJVElDQUxfRVhURU5TSU9OKQorICAgICJNQkVEVExTX1g1MDlfQUxMT1dfVU5TVVBQT1JURURfQ1JJVElDQUxfRVhURU5TSU9OIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQUxMT1dfVU5TVVBQT1JURURfQ1JJVElDQUxfRVhURU5TSU9OICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFKQorICAgICJNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFKQorICAgICJNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUKQorICAgICJNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1pMSUJfU1VQUE9SVCkKKyAgICAiTUJFRFRMU19aTElCX1NVUFBPUlQiLAorI2VuZGlmIC8qIE1CRURUTFNfWkxJQl9TVVBQT1JUICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU05JX0MpCisgICAgIk1CRURUTFNfQUVTTklfQyIsCisjZW5kaWYgLyogTUJFRFRMU19BRVNOSV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorICAgICJNQkVEVExTX0FFU19DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyAgICAiTUJFRFRMU19BUkM0X0MiLAorI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FTTjFfUEFSU0VfQykKKyAgICAiTUJFRFRMU19BU04xX1BBUlNFX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfQVNOMV9QQVJTRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0FTTjFfV1JJVEVfQykKKyAgICAiTUJFRFRMU19BU04xX1dSSVRFX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfQVNOMV9XUklURV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0JBU0U2NF9DKQorICAgICJNQkVEVExTX0JBU0U2NF9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0JBU0U2NF9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQorICAgICJNQkVEVExTX0JJR05VTV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0JMT1dGSVNIX0MpCisgICAgIk1CRURUTFNfQkxPV0ZJU0hfQyIsCisjZW5kaWYgLyogTUJFRFRMU19CTE9XRklTSF9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisgICAgIk1CRURUTFNfQ0FNRUxMSUFfQyIsCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorICAgICJNQkVEVExTX0NDTV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0NDTV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpCisgICAgIk1CRURUTFNfQ0VSVFNfQyIsCisjZW5kaWYgLyogTUJFRFRMU19DRVJUU19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9DKQorICAgICJNQkVEVExTX0NJUEhFUl9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NNQUNfQykKKyAgICAiTUJFRFRMU19DTUFDX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfQ01BQ19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyIsCisjZW5kaWYgLyogTUJFRFRMU19DVFJfRFJCR19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0RFQlVHX0MpCisgICAgIk1CRURUTFNfREVCVUdfQyIsCisjZW5kaWYgLyogTUJFRFRMU19ERUJVR19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorICAgICJNQkVEVExTX0RFU19DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorICAgICJNQkVEVExTX0RITV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0RITV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykKKyAgICAiTUJFRFRMU19FQ0RIX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgIk1CRURUTFNfRUNEU0FfQyIsCisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDSlBBS0VfQykKKyAgICAiTUJFRFRMU19FQ0pQQUtFX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfRUNKUEFLRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgICJNQkVEVExTX0VDUF9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykKKyAgICAiTUJFRFRMU19FTlRST1BZX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpCisgICAgIk1CRURUTFNfRVJST1JfQyIsCisjZW5kaWYgLyogTUJFRFRMU19FUlJPUl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgICJNQkVEVExTX0dDTV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVHRV9DKQorICAgICJNQkVEVExTX0hBVkVHRV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVHRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0hNQUNfRFJCR19DKQorICAgICJNQkVEVExTX0hNQUNfRFJCR19DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0hNQUNfRFJCR19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCisgICAgIk1CRURUTFNfTURfQyIsCisjZW5kaWYgLyogTUJFRFRMU19NRF9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX01EMl9DKQorICAgICJNQkVEVExTX01EMl9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX01EMl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorICAgICJNQkVEVExTX01ENF9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX01ENF9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorICAgICJNQkVEVExTX01ENV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX01ENV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICAiTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX05FVF9DKQorICAgICJNQkVEVExTX05FVF9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX05FVF9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX09JRF9DKQorICAgICJNQkVEVExTX09JRF9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX09JRF9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BBRExPQ0tfQykKKyAgICAiTUJFRFRMU19QQURMT0NLX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfUEFETE9DS19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorICAgICJNQkVEVExTX1BFTV9QQVJTRV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9QQVJTRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQorICAgICJNQkVEVExTX1BFTV9XUklURV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9XUklURV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX0MpCisgICAgIk1CRURUTFNfUEtfQyIsCisjZW5kaWYgLyogTUJFRFRMU19QS19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0MpCisgICAgIk1CRURUTFNfUEtfUEFSU0VfQyIsCisjZW5kaWYgLyogTUJFRFRMU19QS19QQVJTRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1dSSVRFX0MpCisgICAgIk1CRURUTFNfUEtfV1JJVEVfQyIsCisjZW5kaWYgLyogTUJFRFRMU19QS19XUklURV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1M1X0MpCisgICAgIk1CRURUTFNfUEtDUzVfQyIsCisjZW5kaWYgLyogTUJFRFRMU19QS0NTNV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxMV9DKQorICAgICJNQkVEVExTX1BLQ1MxMV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxMV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxMl9DKQorICAgICJNQkVEVExTX1BLQ1MxMl9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxMl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisgICAgIk1CRURUTFNfUExBVEZPUk1fQyIsCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1JJUEVNRDE2MF9DKQorICAgICJNQkVEVExTX1JJUEVNRDE2MF9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1JJUEVNRDE2MF9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgICJNQkVEVExTX1JTQV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICAiTUJFRFRMU19TSEExX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgICJNQkVEVExTX1NIQTI1Nl9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgICJNQkVEVExTX1NIQTUxMl9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorICAgICJNQkVEVExTX1NTTF9DQUNIRV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DQUNIRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DT09LSUVfQykKKyAgICAiTUJFRFRMU19TU0xfQ09PS0lFX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NPT0tJRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9USUNLRVRfQykKKyAgICAiTUJFRFRMU19TU0xfVElDS0VUX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RJQ0tFVF9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKyAgICAiTUJFRFRMU19TU0xfQ0xJX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NMSV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICAiTUJFRFRMU19TU0xfU1JWX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NSVl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykKKyAgICAiTUJFRFRMU19TU0xfVExTX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RMU19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgICJNQkVEVExTX1RIUkVBRElOR19DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1RIUkVBRElOR19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1RJTUlOR19DKQorICAgICJNQkVEVExTX1RJTUlOR19DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1RJTUlOR19DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fQykKKyAgICAiTUJFRFRMU19WRVJTSU9OX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfVkVSU0lPTl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfVVNFX0MpCisgICAgIk1CRURUTFNfWDUwOV9VU0VfQyIsCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X1VTRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgIk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyIsCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MpCisgICAgIk1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQyIsCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MpCisgICAgIk1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQyIsCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JFQVRFX0MpCisgICAgIk1CRURUTFNfWDUwOV9DUkVBVEVfQyIsCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSRUFURV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MpCisgICAgIk1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQyIsCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9XUklURV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MpCisgICAgIk1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQyIsCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NTUl9XUklURV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1hURUFfQykKKyAgICAiTUJFRFRMU19YVEVBX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfWFRFQV9DICovCisjZW5kaWYgLyogTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTICovCisgICAgTlVMTAorfTsKKworaW50IG1iZWR0bHNfdmVyc2lvbl9jaGVja19mZWF0dXJlKCBjb25zdCBjaGFyICpmZWF0dXJlICkKK3sKKyAgICBjb25zdCBjaGFyICoqaWR4ID0gZmVhdHVyZXM7CisKKyAgICBpZiggKmlkeCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMiApOworCisgICAgaWYoIGZlYXR1cmUgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIHdoaWxlKCAqaWR4ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoICFzdHJjbXAoICppZHgsIGZlYXR1cmUgKSApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgaWR4Kys7CisgICAgfQorICAgIHJldHVybiggLTEgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfVkVSU0lPTl9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94NTA5LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94NTA5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkMzkwZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDkuYwpAQCAtMCwwICsxLDEwNjMgQEAKKy8qCisgKiAgWC41MDkgY29tbW9uIGZ1bmN0aW9ucyBmb3IgcGFyc2luZyBhbmQgdmVyaWZpY2F0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBJVFUtVCBYLjUwOSBzdGFuZGFyZCBkZWZpbmVzIGEgY2VydGlmaWNhdGUgZm9ybWF0IGZvciBQS0kuCisgKgorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzUyODAudHh0IChDZXJ0aWZpY2F0ZXMgYW5kIENSTHMpCisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzI3OS50eHQgKEFsZyBJRHMgZm9yIENSTHMpCisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjk4Ni50eHQgKENTUnMsIGFrYSBQS0NTIzEwKQorICoKKyAqICBodHRwOi8vd3d3Lml0dS5pbnQvSVRVLVQvc3R1ZHlncm91cHMvY29tMTcvbGFuZ3VhZ2VzL1guNjgwLTAyMDcucGRmCisgKiAgaHR0cDovL3d3dy5pdHUuaW50L0lUVS1UL3N0dWR5Z3JvdXBzL2NvbTE3L2xhbmd1YWdlcy9YLjY5MC0wMjA3LnBkZgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9VU0VfQykKKworI2luY2x1ZGUgIm1iZWR0bHMveDUwOS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYXNuMS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgZnJlZQorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgIHNucHJpbnRmCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtX3RpbWUuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgIWRlZmluZWQoRUZJMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2Vsc2UKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmICFkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBDSEVDSyhjb2RlKSBpZiggKCByZXQgPSBjb2RlICkgIT0gMCApeyByZXR1cm4oIHJldCApOyB9CisjZGVmaW5lIENIRUNLX1JBTkdFKG1pbiwgbWF4LCB2YWwpIGlmKCB2YWwgPCBtaW4gfHwgdmFsID4gbWF4ICl7IHJldHVybiggcmV0ICk7IH0KKworLyoKKyAqICBDZXJ0aWZpY2F0ZVNlcmlhbE51bWJlciAgOjo9ICBJTlRFR0VSCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfZ2V0X3NlcmlhbCggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9idWYgKnNlcmlhbCApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIGVuZCAtICpwICkgPCAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0VSSUFMICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisKKyAgICBpZiggKipwICE9ICggTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgfCBNQkVEVExTX0FTTjFfUFJJTUlUSVZFIHwgMiApICYmCisgICAgICAgICoqcCAhPSAgIE1CRURUTFNfQVNOMV9JTlRFR0VSICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0VSSUFMICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICk7CisKKyAgICBzZXJpYWwtPnRhZyA9ICooKnApKys7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2xlbiggcCwgZW5kLCAmc2VyaWFsLT5sZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwgKyByZXQgKTsKKworICAgIHNlcmlhbC0+cCA9ICpwOworICAgICpwICs9IHNlcmlhbC0+bGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qIEdldCBhbiBhbGdvcml0aG0gaWRlbnRpZmllciB3aXRob3V0IHBhcmFtZXRlcnMgKGVnIGZvciBzaWduYXR1cmVzKQorICoKKyAqICBBbGdvcml0aG1JZGVudGlmaWVyICA6Oj0gIFNFUVVFTkNFICB7CisgKiAgICAgICBhbGdvcml0aG0gICAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKKyAqICAgICAgIHBhcmFtZXRlcnMgICAgICAgICAgICAgIEFOWSBERUZJTkVEIEJZIGFsZ29yaXRobSBPUFRJT05BTCAgfQorICovCitpbnQgbWJlZHRsc194NTA5X2dldF9hbGdfbnVsbCggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2J1ZiAqYWxnICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9hbGdfbnVsbCggcCwgZW5kLCBhbGcgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogUGFyc2UgYW4gYWxnb3JpdGhtIGlkZW50aWZpZXIgd2l0aCAob3B0aW9uYWwpIHBhcmFtYXRlcnMKKyAqLworaW50IG1iZWR0bHNfeDUwOV9nZXRfYWxnKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2J1ZiAqYWxnLCBtYmVkdGxzX3g1MDlfYnVmICpwYXJhbXMgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2FsZyggcCwgZW5kLCBhbGcsIHBhcmFtcyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQpCisvKgorICogSGFzaEFsZ29yaXRobSA6Oj0gQWxnb3JpdGhtSWRlbnRpZmllcgorICoKKyAqIEFsZ29yaXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAqICAgICAgYWxnb3JpdGhtICAgICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIsCisgKiAgICAgIHBhcmFtZXRlcnMgICAgICAgICAgICAgIEFOWSBERUZJTkVEIEJZIGFsZ29yaXRobSBPUFRJT05BTCAgfQorICoKKyAqIEZvciBIYXNoQWxnb3JpdGhtLCBwYXJhbWV0ZXJzIE1VU1QgYmUgTlVMTCBvciBhYnNlbnQuCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9nZXRfaGFzaF9hbGcoIGNvbnN0IG1iZWR0bHNfeDUwOV9idWYgKmFsZywgbWJlZHRsc19tZF90eXBlX3QgKm1kX2FsZyApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZDsKKyAgICBtYmVkdGxzX3g1MDlfYnVmIG1kX29pZDsKKyAgICBzaXplX3QgbGVuOworCisgICAgLyogTWFrZSBzdXJlIHdlIGdvdCBhIFNFUVVFTkNFIGFuZCBzZXR1cCBib3VuZHMgKi8KKyAgICBpZiggYWxnLT50YWcgIT0gKCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApOworCisgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopIGFsZy0+cDsKKyAgICBlbmQgPSBwICsgYWxnLT5sZW47CisKKyAgICBpZiggcCA+PSBlbmQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgIC8qIFBhcnNlIG1kX29pZCAqLworICAgIG1kX29pZC50YWcgPSAqcDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbWRfb2lkLmxlbiwgTUJFRFRMU19BU04xX09JRCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIHJldCApOworCisgICAgbWRfb2lkLnAgPSBwOworICAgIHAgKz0gbWRfb2lkLmxlbjsKKworICAgIC8qIEdldCBtZF9hbGcgZnJvbSBtZF9vaWQgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX29pZF9nZXRfbWRfYWxnKCAmbWRfb2lkLCBtZF9hbGcgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyByZXQgKTsKKworICAgIC8qIE1ha2Ugc3VyZSBwYXJhbXMgaXMgYWJzZW50IG9mIE5VTEwgKi8KKyAgICBpZiggcCA9PSBlbmQgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLCBNQkVEVExTX0FTTjFfTlVMTCApICkgIT0gMCB8fCBsZW4gIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIHJldCApOworCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiAgICBSU0FTU0EtUFNTLXBhcmFtcyAgOjo9ICBTRVFVRU5DRSAgeworICogICAgICAgaGFzaEFsZ29yaXRobSAgICAgWzBdIEhhc2hBbGdvcml0aG0gREVGQVVMVCBzaGExSWRlbnRpZmllciwKKyAqICAgICAgIG1hc2tHZW5BbGdvcml0aG0gIFsxXSBNYXNrR2VuQWxnb3JpdGhtIERFRkFVTFQgbWdmMVNIQTFJZGVudGlmaWVyLAorICogICAgICAgc2FsdExlbmd0aCAgICAgICAgWzJdIElOVEVHRVIgREVGQVVMVCAyMCwKKyAqICAgICAgIHRyYWlsZXJGaWVsZCAgICAgIFszXSBJTlRFR0VSIERFRkFVTFQgMSAgfQorICogICAgLS0gTm90ZSB0aGF0IHRoZSB0YWdzIGluIHRoaXMgU2VxdWVuY2UgYXJlIGV4cGxpY2l0LgorICoKKyAqIFJGQyA0MDU1ICh3aGljaCBkZWZpbmVzIHVzZSBvZiBSU0FTU0EtUFNTIGluIFBLSVgpIHN0YXRlcyB0aGF0IHRoZSB2YWx1ZQorICogb2YgdHJhaWxlckZpZWxkIE1VU1QgYmUgMSwgYW5kIFBLQ1MjMSB2Mi4yIGRvZXNuJ3QgZXZlbiBkZWZpbmUgYW55IG90aGVyCisgKiBvcHRpb24uIEVuZm9yZSB0aGlzIGF0IHBhcnNpbmcgdGltZS4KKyAqLworaW50IG1iZWR0bHNfeDUwOV9nZXRfcnNhc3NhX3Bzc19wYXJhbXMoIGNvbnN0IG1iZWR0bHNfeDUwOV9idWYgKnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgKm1kX2FsZywgbWJlZHRsc19tZF90eXBlX3QgKm1nZl9tZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzYWx0X2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwgKmVuZDI7CisgICAgc2l6ZV90IGxlbjsKKyAgICBtYmVkdGxzX3g1MDlfYnVmIGFsZ19pZCwgYWxnX3BhcmFtczsKKworICAgIC8qIEZpcnN0IHNldCBldmVyeXRoaW5nIHRvIGRlZmF1bHRzICovCisgICAgKm1kX2FsZyA9IE1CRURUTFNfTURfU0hBMTsKKyAgICAqbWdmX21kID0gTUJFRFRMU19NRF9TSEExOworICAgICpzYWx0X2xlbiA9IDIwOworCisgICAgLyogTWFrZSBzdXJlIHBhcmFtcyBpcyBhIFNFUVVFTkNFIGFuZCBzZXR1cCBib3VuZHMgKi8KKyAgICBpZiggcGFyYW1zLT50YWcgIT0gKCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApOworCisgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopIHBhcmFtcy0+cDsKKyAgICBlbmQgPSBwICsgcGFyYW1zLT5sZW47CisKKyAgICBpZiggcCA9PSBlbmQgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIC8qCisgICAgICogSGFzaEFsZ29yaXRobQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8IE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IDAgKSApID09IDAgKQorICAgIHsKKyAgICAgICAgZW5kMiA9IHAgKyBsZW47CisKKyAgICAgICAgLyogSGFzaEFsZ29yaXRobSA6Oj0gQWxnb3JpdGhtSWRlbnRpZmllciAod2l0aG91dCBwYXJhbWV0ZXJzKSAqLworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X2FsZ19udWxsKCAmcCwgZW5kMiwgJmFsZ19pZCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfb2lkX2dldF9tZF9hbGcoICZhbGdfaWQsIG1kX2FsZyApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyByZXQgKTsKKworICAgICAgICBpZiggcCAhPSBlbmQyICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisgICAgfQorICAgIGVsc2UgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgcmV0ICk7CisKKyAgICBpZiggcCA9PSBlbmQgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIC8qCisgICAgICogTWFza0dlbkFsZ29yaXRobQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8IE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IDEgKSApID09IDAgKQorICAgIHsKKyAgICAgICAgZW5kMiA9IHAgKyBsZW47CisKKyAgICAgICAgLyogTWFza0dlbkFsZ29yaXRobSA6Oj0gQWxnb3JpdGhtSWRlbnRpZmllciAocGFyYW1zID0gSGFzaEFsZ29yaXRobSkgKi8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9hbGcoICZwLCBlbmQyLCAmYWxnX2lkLCAmYWxnX3BhcmFtcyApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIC8qIE9ubHkgTUZHMSBpcyByZWNvZ25pc2VkIGZvciBub3cgKi8KKyAgICAgICAgaWYoIE1CRURUTFNfT0lEX0NNUCggTUJFRFRMU19PSURfTUdGMSwgJmFsZ19pZCApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0ZFQVRVUkVfVU5BVkFJTEFCTEUgKworICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5EICk7CisKKyAgICAgICAgLyogUGFyc2UgSGFzaEFsZ29yaXRobSAqLworICAgICAgICBpZiggKCByZXQgPSB4NTA5X2dldF9oYXNoX2FsZyggJmFsZ19wYXJhbXMsIG1nZl9tZCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGlmKCBwICE9IGVuZDIgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKyAgICB9CisgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyByZXQgKTsKKworICAgIGlmKCBwID09IGVuZCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgLyoKKyAgICAgKiBzYWx0X2xlbgorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8IE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IDIgKSApID09IDAgKQorICAgIHsKKyAgICAgICAgZW5kMiA9IHAgKyBsZW47CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9pbnQoICZwLCBlbmQyLCBzYWx0X2xlbiApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyByZXQgKTsKKworICAgICAgICBpZiggcCAhPSBlbmQyICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisgICAgfQorICAgIGVsc2UgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgcmV0ICk7CisKKyAgICBpZiggcCA9PSBlbmQgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIC8qCisgICAgICogdHJhaWxlcl9maWVsZCAoaWYgcHJlc2VudCwgbXVzdCBiZSAxKQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8IE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IDMgKSApID09IDAgKQorICAgIHsKKyAgICAgICAgaW50IHRyYWlsZXJfZmllbGQ7CisKKyAgICAgICAgZW5kMiA9IHAgKyBsZW47CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9pbnQoICZwLCBlbmQyLCAmdHJhaWxlcl9maWVsZCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyByZXQgKTsKKworICAgICAgICBpZiggcCAhPSBlbmQyICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICAgICAgaWYoIHRyYWlsZXJfZmllbGQgIT0gMSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKTsKKyAgICB9CisgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyByZXQgKTsKKworICAgIGlmKCBwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQgKi8KKworLyoKKyAqICBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUgOjo9IFNFUVVFTkNFIHsKKyAqICAgIHR5cGUgICAgIEF0dHJpYnV0ZVR5cGUsCisgKiAgICB2YWx1ZSAgICBBdHRyaWJ1dGVWYWx1ZSB9CisgKgorICogIEF0dHJpYnV0ZVR5cGUgOjo9IE9CSkVDVCBJREVOVElGSUVSCisgKgorICogIEF0dHJpYnV0ZVZhbHVlIDo6PSBBTlkgREVGSU5FRCBCWSBBdHRyaWJ1dGVUeXBlCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9nZXRfYXR0cl90eXBlX3ZhbHVlKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X25hbWUgKmN1ciApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworICAgIG1iZWR0bHNfeDUwOV9idWYgKm9pZDsKKyAgICBtYmVkdGxzX3g1MDlfYnVmICp2YWw7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSArIHJldCApOworCisgICAgaWYoICggZW5kIC0gKnAgKSA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisKKyAgICBvaWQgPSAmY3VyLT5vaWQ7CisgICAgb2lkLT50YWcgPSAqKnA7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmb2lkLT5sZW4sIE1CRURUTFNfQVNOMV9PSUQgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsgcmV0ICk7CisKKyAgICBvaWQtPnAgPSAqcDsKKyAgICAqcCArPSBvaWQtPmxlbjsKKworICAgIGlmKCAoIGVuZCAtICpwICkgPCAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworCisgICAgaWYoICoqcCAhPSBNQkVEVExTX0FTTjFfQk1QX1NUUklORyAmJiAqKnAgIT0gTUJFRFRMU19BU04xX1VURjhfU1RSSU5HICAgICAgJiYKKyAgICAgICAgKipwICE9IE1CRURUTFNfQVNOMV9UNjFfU1RSSU5HICYmICoqcCAhPSBNQkVEVExTX0FTTjFfUFJJTlRBQkxFX1NUUklORyAmJgorICAgICAgICAqKnAgIT0gTUJFRFRMU19BU04xX0lBNV9TVFJJTkcgJiYgKipwICE9IE1CRURUTFNfQVNOMV9VTklWRVJTQUxfU1RSSU5HICYmCisgICAgICAgICoqcCAhPSBNQkVEVExTX0FTTjFfQklUX1NUUklORyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKTsKKworICAgIHZhbCA9ICZjdXItPnZhbDsKKyAgICB2YWwtPnRhZyA9ICooKnApKys7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2xlbiggcCwgZW5kLCAmdmFsLT5sZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsgcmV0ICk7CisKKyAgICB2YWwtPnAgPSAqcDsKKyAgICAqcCArPSB2YWwtPmxlbjsKKworICAgIGN1ci0+bmV4dCA9IE5VTEw7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqICBOYW1lIDo6PSBDSE9JQ0UgeyAtLSBvbmx5IG9uZSBwb3NzaWJpbGl0eSBmb3Igbm93IC0tCisgKiAgICAgICByZG5TZXF1ZW5jZSAgUkROU2VxdWVuY2UgfQorICoKKyAqICBSRE5TZXF1ZW5jZSA6Oj0gU0VRVUVOQ0UgT0YgUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZQorICoKKyAqICBSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIDo6PQorICogICAgU0VUIE9GIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZQorICoKKyAqICBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUgOjo9IFNFUVVFTkNFIHsKKyAqICAgIHR5cGUgICAgIEF0dHJpYnV0ZVR5cGUsCisgKiAgICB2YWx1ZSAgICBBdHRyaWJ1dGVWYWx1ZSB9CisgKgorICogIEF0dHJpYnV0ZVR5cGUgOjo9IE9CSkVDVCBJREVOVElGSUVSCisgKgorICogIEF0dHJpYnV0ZVZhbHVlIDo6PSBBTlkgREVGSU5FRCBCWSBBdHRyaWJ1dGVUeXBlCisgKgorICogVGhlIGRhdGEgc3RydWN0dXJlIGlzIG9wdGltaXplZCBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGVhY2ggUkROIGhhcyBvbmx5CisgKiBvbmUgZWxlbWVudCwgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYXMgYSBsaXN0IG9mIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZS4KKyAqIEZvciB0aGUgZ2VuZXJhbCBjYXNlIHdlIHN0aWxsIHVzZSBhIGZsYXQgbGlzdCwgYnV0IHdlIG1hcmsgZWxlbWVudHMgb2YgdGhlCisgKiBzYW1lIHNldCBzbyB0aGF0IHRoZXkgYXJlICJtZXJnZWQiIHRvZ2V0aGVyIGluIHRoZSBmdW5jdGlvbnMgdGhhdCBjb25zdW1lCisgKiB0aGlzIGxpc3QsIGVnIG1iZWR0bHNfeDUwOV9kbl9nZXRzKCkuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfZ2V0X25hbWUoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X25hbWUgKmN1ciApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3Qgc2V0X2xlbjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmRfc2V0OworCisgICAgLyogZG9uJ3QgdXNlIHJlY3Vyc2lvbiwgd2UnZCByaXNrIHN0YWNrIG92ZXJmbG93IGlmIG5vdCBvcHRpbWl6ZWQgKi8KKyAgICB3aGlsZSggMSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBwYXJzZSBTRVQKKyAgICAgICAgICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZzZXRfbGVuLAorICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVQgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSArIHJldCApOworCisgICAgICAgIGVuZF9zZXQgID0gKnAgKyBzZXRfbGVuOworCisgICAgICAgIHdoaWxlKCAxICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggcmV0ID0geDUwOV9nZXRfYXR0cl90eXBlX3ZhbHVlKCBwLCBlbmRfc2V0LCBjdXIgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIGlmKCAqcCA9PSBlbmRfc2V0ICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogTWFyayB0aGlzIGl0ZW0gYXMgYmVpbmcgbm8gdGhlIG9ubHkgb25lIGluIGEgc2V0ICovCisgICAgICAgICAgICBjdXItPm5leHRfbWVyZ2VkID0gMTsKKworICAgICAgICAgICAgY3VyLT5uZXh0ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc194NTA5X25hbWUgKSApOworCisgICAgICAgICAgICBpZiggY3VyLT5uZXh0ID09IE5VTEwgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQgKTsKKworICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogY29udGludWUgdW50aWwgZW5kIG9mIFNFUVVFTkNFIGlzIHJlYWNoZWQKKyAgICAgICAgICovCisgICAgICAgIGlmKCAqcCA9PSBlbmQgKQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAgICAgY3VyLT5uZXh0ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc194NTA5X25hbWUgKSApOworCisgICAgICAgIGlmKCBjdXItPm5leHQgPT0gTlVMTCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVEICk7CisKKyAgICAgICAgY3VyID0gY3VyLT5uZXh0OworICAgIH0KK30KKworc3RhdGljIGludCB4NTA5X3BhcnNlX2ludCh1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgbiwgaW50ICpyZXMpeworICAgICpyZXMgPSAwOworICAgIGZvciggOyBuID4gMDsgLS1uICl7CisgICAgICAgIGlmKCAoICoqcCA8ICcwJykgfHwgKCAqKnAgPiAnOScgKSApIHJldHVybiBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURTsKKyAgICAgICAgKnJlcyAqPSAxMDsKKyAgICAgICAgKnJlcyArPSAoKigqcCkrKyAtICcwJyk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHg1MDlfZGF0ZV9pc192YWxpZChjb25zdCBtYmVkdGxzX3g1MDlfdGltZSAqdGltZSkKK3sKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEU7CisKKyAgICBDSEVDS19SQU5HRSggMCwgOTk5OSwgdGltZS0+eWVhciApOworICAgIENIRUNLX1JBTkdFKCAwLCAyMywgICB0aW1lLT5ob3VyICk7CisgICAgQ0hFQ0tfUkFOR0UoIDAsIDU5LCAgIHRpbWUtPm1pbiAgKTsKKyAgICBDSEVDS19SQU5HRSggMCwgNTksICAgdGltZS0+c2VjICApOworCisgICAgc3dpdGNoKCB0aW1lLT5tb24gKQorICAgIHsKKyAgICAgICAgY2FzZSAxOiBjYXNlIDM6IGNhc2UgNTogY2FzZSA3OiBjYXNlIDg6IGNhc2UgMTA6IGNhc2UgMTI6CisgICAgICAgICAgICBDSEVDS19SQU5HRSggMSwgMzEsIHRpbWUtPmRheSApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDogY2FzZSA2OiBjYXNlIDk6IGNhc2UgMTE6CisgICAgICAgICAgICBDSEVDS19SQU5HRSggMSwgMzAsIHRpbWUtPmRheSApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIENIRUNLX1JBTkdFKCAxLCAyOCArICh0aW1lLT55ZWFyICUgNCA9PSAwKSwgdGltZS0+ZGF5ICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiAgVGltZSA6Oj0gQ0hPSUNFIHsKKyAqICAgICAgIHV0Y1RpbWUgICAgICAgIFVUQ1RpbWUsCisgKiAgICAgICBnZW5lcmFsVGltZSAgICBHZW5lcmFsaXplZFRpbWUgfQorICovCitpbnQgbWJlZHRsc194NTA5X2dldF90aW1lKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV90aW1lICp0aW1lICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisgICAgdW5zaWduZWQgY2hhciB0YWc7CisKKyAgICBpZiggKCBlbmQgLSAqcCApIDwgMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgIHRhZyA9ICoqcDsKKworICAgIGlmKCB0YWcgPT0gTUJFRFRMU19BU04xX1VUQ19USU1FICkKKyAgICB7CisgICAgICAgICgqcCkrKzsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19hc24xX2dldF9sZW4oIHAsIGVuZCwgJmxlbiApOworCisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFICsgcmV0ICk7CisKKyAgICAgICAgQ0hFQ0soIHg1MDlfcGFyc2VfaW50KCBwLCAyLCAmdGltZS0+eWVhciApICk7CisgICAgICAgIENIRUNLKCB4NTA5X3BhcnNlX2ludCggcCwgMiwgJnRpbWUtPm1vbiApICk7CisgICAgICAgIENIRUNLKCB4NTA5X3BhcnNlX2ludCggcCwgMiwgJnRpbWUtPmRheSApICk7CisgICAgICAgIENIRUNLKCB4NTA5X3BhcnNlX2ludCggcCwgMiwgJnRpbWUtPmhvdXIgKSApOworICAgICAgICBDSEVDSyggeDUwOV9wYXJzZV9pbnQoIHAsIDIsICZ0aW1lLT5taW4gKSApOworICAgICAgICBpZiggbGVuID4gMTAgKQorICAgICAgICAgICAgQ0hFQ0soIHg1MDlfcGFyc2VfaW50KCBwLCAyLCAmdGltZS0+c2VjICkgKTsKKyAgICAgICAgaWYoIGxlbiA+IDEyICYmICooKnApKysgIT0gJ1onICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKTsKKworICAgICAgICB0aW1lLT55ZWFyICs9ICAxMDAgKiAoIHRpbWUtPnllYXIgPCA1MCApOworICAgICAgICB0aW1lLT55ZWFyICs9IDE5MDA7CisKKyAgICAgICAgQ0hFQ0soIHg1MDlfZGF0ZV9pc192YWxpZCggdGltZSApICk7CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorICAgIGVsc2UgaWYoIHRhZyA9PSBNQkVEVExTX0FTTjFfR0VORVJBTElaRURfVElNRSApCisgICAgeworICAgICAgICAoKnApKys7CisgICAgICAgIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfbGVuKCBwLCBlbmQsICZsZW4gKTsKKworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURSArIHJldCApOworCisgICAgICAgIENIRUNLKCB4NTA5X3BhcnNlX2ludCggcCwgNCwgJnRpbWUtPnllYXIgKSApOworICAgICAgICBDSEVDSyggeDUwOV9wYXJzZV9pbnQoIHAsIDIsICZ0aW1lLT5tb24gKSApOworICAgICAgICBDSEVDSyggeDUwOV9wYXJzZV9pbnQoIHAsIDIsICZ0aW1lLT5kYXkgKSApOworICAgICAgICBDSEVDSyggeDUwOV9wYXJzZV9pbnQoIHAsIDIsICZ0aW1lLT5ob3VyICkgKTsKKyAgICAgICAgQ0hFQ0soIHg1MDlfcGFyc2VfaW50KCBwLCAyLCAmdGltZS0+bWluICkgKTsKKyAgICAgICAgaWYoIGxlbiA+IDEyICkKKyAgICAgICAgICAgIENIRUNLKCB4NTA5X3BhcnNlX2ludCggcCwgMiwgJnRpbWUtPnNlYyApICk7CisgICAgICAgIGlmKCBsZW4gPiAxNCAmJiAqKCpwKSsrICE9ICdaJyApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFICk7CisKKyAgICAgICAgQ0hFQ0soIHg1MDlfZGF0ZV9pc192YWxpZCggdGltZSApICk7CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURSArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApOworfQorCitpbnQgbWJlZHRsc194NTA5X2dldF9zaWcoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsIG1iZWR0bHNfeDUwOV9idWYgKnNpZyApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworICAgIGludCB0YWdfdHlwZTsKKworICAgIGlmKCAoIGVuZCAtICpwICkgPCAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0lHTkFUVVJFICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisKKyAgICB0YWdfdHlwZSA9ICoqcDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfYml0c3RyaW5nX251bGwoIHAsIGVuZCwgJmxlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NJR05BVFVSRSArIHJldCApOworCisgICAgc2lnLT50YWcgPSB0YWdfdHlwZTsKKyAgICBzaWctPmxlbiA9IGxlbjsKKyAgICBzaWctPnAgPSAqcDsKKworICAgICpwICs9IGxlbjsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogR2V0IHNpZ25hdHVyZSBhbGdvcml0aG0gZnJvbSBhbGcgT0lEIGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfZ2V0X3NpZ19hbGcoIGNvbnN0IG1iZWR0bHNfeDUwOV9idWYgKnNpZ19vaWQsIGNvbnN0IG1iZWR0bHNfeDUwOV9idWYgKnNpZ19wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgKm1kX2FsZywgbWJlZHRsc19wa190eXBlX3QgKnBrX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqc2lnX29wdHMgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKnNpZ19vcHRzICE9IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfb2lkX2dldF9zaWdfYWxnKCBzaWdfb2lkLCBtZF9hbGcsIHBrX2FsZyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1NJR19BTEcgKyByZXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVCkKKyAgICBpZiggKnBrX2FsZyA9PSBNQkVEVExTX1BLX1JTQVNTQV9QU1MgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wa19yc2Fzc2FfcHNzX29wdGlvbnMgKnBzc19vcHRzOworCisgICAgICAgIHBzc19vcHRzID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19wa19yc2Fzc2FfcHNzX29wdGlvbnMgKSApOworICAgICAgICBpZiggcHNzX29wdHMgPT0gTlVMTCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVEICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2dldF9yc2Fzc2FfcHNzX3BhcmFtcyggc2lnX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwc3Nfb3B0cy0+bWdmMV9oYXNoX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBzc19vcHRzLT5leHBlY3RlZF9zYWx0X2xlbiApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIHBzc19vcHRzICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgKnNpZ19vcHRzID0gKHZvaWQgKikgcHNzX29wdHM7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUICovCisgICAgeworICAgICAgICAvKiBNYWtlIHN1cmUgcGFyYW1ldGVycyBhcmUgYWJzZW50IG9yIE5VTEwgKi8KKyAgICAgICAgaWYoICggc2lnX3BhcmFtcy0+dGFnICE9IE1CRURUTFNfQVNOMV9OVUxMICYmIHNpZ19wYXJhbXMtPnRhZyAhPSAwICkgfHwKKyAgICAgICAgICAgICAgc2lnX3BhcmFtcy0+bGVuICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFguNTA5IEV4dGVuc2lvbnMgKE5vIHBhcnNpbmcgb2YgZXh0ZW5zaW9ucywgcG9pbnRlciBzaG91bGQKKyAqIGJlIGVpdGhlciBtYW51YWxseSB1cGRhdGVkIG9yIGV4dGVuc2lvbnMgc2hvdWxkIGJlIHBhcnNlZCEKKyAqLworaW50IG1iZWR0bHNfeDUwOV9nZXRfZXh0KCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2J1ZiAqZXh0LCBpbnQgdGFnICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisKKyAgICBpZiggKnAgPT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBleHQtPnRhZyA9ICoqcDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZleHQtPmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgdGFnICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGV4dC0+cCA9ICpwOworICAgIGVuZCA9ICpwICsgZXh0LT5sZW47CisKKyAgICAvKgorICAgICAqIEV4dGVuc2lvbnMgIDo6PSAgU0VRVUVOQ0UgU0laRSAoMS4uTUFYKSBPRiBFeHRlbnNpb24KKyAgICAgKgorICAgICAqIEV4dGVuc2lvbiAgOjo9ICBTRVFVRU5DRSAgeworICAgICAqICAgICAgZXh0bklEICAgICAgT0JKRUNUIElERU5USUZJRVIsCisgICAgICogICAgICBjcml0aWNhbCAgICBCT09MRUFOIERFRkFVTFQgRkFMU0UsCisgICAgICogICAgICBleHRuVmFsdWUgICBPQ1RFVCBTVFJJTkcgIH0KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgaWYoIGVuZCAhPSAqcCArIGxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFN0b3JlIHRoZSBuYW1lIGluIHByaW50YWJsZSBmb3JtIGludG8gYnVmOyBubyBtb3JlCisgKiB0aGFuIHNpemUgY2hhcmFjdGVycyB3aWxsIGJlIHdyaXR0ZW4KKyAqLworaW50IG1iZWR0bHNfeDUwOV9kbl9nZXRzKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBtYmVkdGxzX3g1MDlfbmFtZSAqZG4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGksIG47CisgICAgdW5zaWduZWQgY2hhciBjLCBtZXJnZSA9IDA7CisgICAgY29uc3QgbWJlZHRsc194NTA5X25hbWUgKm5hbWU7CisgICAgY29uc3QgY2hhciAqc2hvcnRfbmFtZSA9IE5VTEw7CisgICAgY2hhciBzW01CRURUTFNfWDUwOV9NQVhfRE5fTkFNRV9TSVpFXSwgKnA7CisKKyAgICBtZW1zZXQoIHMsIDAsIHNpemVvZiggcyApICk7CisKKyAgICBuYW1lID0gZG47CisgICAgcCA9IGJ1ZjsKKyAgICBuID0gc2l6ZTsKKworICAgIHdoaWxlKCBuYW1lICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoICFuYW1lLT5vaWQucCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lLT5uZXh0OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiggbmFtZSAhPSBkbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sIG1lcmdlID8gIiArICIgOiAiLCAiICk7CisgICAgICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IG1iZWR0bHNfb2lkX2dldF9hdHRyX3Nob3J0X25hbWUoICZuYW1lLT5vaWQsICZzaG9ydF9uYW1lICk7CisKKyAgICAgICAgaWYoIHJldCA9PSAwICkKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIlcz0iLCBzaG9ydF9uYW1lICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcP1w/PSIgKTsKKyAgICAgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IG5hbWUtPnZhbC5sZW47IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBpID49IHNpemVvZiggcyApIC0gMSApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGMgPSBuYW1lLT52YWwucFtpXTsKKyAgICAgICAgICAgIGlmKCBjIDwgMzIgfHwgYyA9PSAxMjcgfHwgKCBjID4gMTI4ICYmIGMgPCAxNjAgKSApCisgICAgICAgICAgICAgICAgIHNbaV0gPSAnPyc7CisgICAgICAgICAgICBlbHNlIHNbaV0gPSBjOworICAgICAgICB9CisgICAgICAgIHNbaV0gPSAnXDAnOworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiJXMiLCBzICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgICAgIG1lcmdlID0gbmFtZS0+bmV4dF9tZXJnZWQ7CisgICAgICAgIG5hbWUgPSBuYW1lLT5uZXh0OworICAgIH0KKworICAgIHJldHVybiggKGludCkgKCBzaXplIC0gbiApICk7Cit9CisKKy8qCisgKiBTdG9yZSB0aGUgc2VyaWFsIGluIHByaW50YWJsZSBmb3JtIGludG8gYnVmOyBubyBtb3JlCisgKiB0aGFuIHNpemUgY2hhcmFjdGVycyB3aWxsIGJlIHdyaXR0ZW4KKyAqLworaW50IG1iZWR0bHNfeDUwOV9zZXJpYWxfZ2V0cyggY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqc2VyaWFsICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBpLCBuLCBucjsKKyAgICBjaGFyICpwOworCisgICAgcCA9IGJ1ZjsKKyAgICBuID0gc2l6ZTsKKworICAgIG5yID0gKCBzZXJpYWwtPmxlbiA8PSAzMiApCisgICAgICAgID8gc2VyaWFsLT5sZW4gIDogMjg7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgbnI7IGkrKyApCisgICAgeworICAgICAgICBpZiggaSA9PSAwICYmIG5yID4gMSAmJiBzZXJpYWwtPnBbaV0gPT0gMHgwICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIlMDJYJXMiLAorICAgICAgICAgICAgICAgIHNlcmlhbC0+cFtpXSwgKCBpIDwgbnIgLSAxICkgPyAiOiIgOiAiIiApOworICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKyAgICB9CisKKyAgICBpZiggbnIgIT0gc2VyaWFsLT5sZW4gKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIi4uLi4iICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworICAgIH0KKworICAgIHJldHVybiggKGludCkgKCBzaXplIC0gbiApICk7Cit9CisKKy8qCisgKiBIZWxwZXIgZm9yIHdyaXRpbmcgc2lnbmF0dXJlIGFsZ29yaXRobXMKKyAqLworaW50IG1iZWR0bHNfeDUwOV9zaWdfYWxnX2dldHMoIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IG1iZWR0bHNfeDUwOV9idWYgKnNpZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZywgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzaWdfb3B0cyApCit7CisgICAgaW50IHJldDsKKyAgICBjaGFyICpwID0gYnVmOworICAgIHNpemVfdCBuID0gc2l6ZTsKKyAgICBjb25zdCBjaGFyICpkZXNjID0gTlVMTDsKKworICAgIHJldCA9IG1iZWR0bHNfb2lkX2dldF9zaWdfYWxnX2Rlc2MoIHNpZ19vaWQsICZkZXNjICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIj8/PyIgICk7CisgICAgZWxzZQorICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiJXMiLCBkZXNjICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQpCisgICAgaWYoIHBrX2FsZyA9PSBNQkVEVExTX1BLX1JTQVNTQV9QU1MgKQorICAgIHsKKyAgICAgICAgY29uc3QgbWJlZHRsc19wa19yc2Fzc2FfcHNzX29wdGlvbnMgKnBzc19vcHRzOworICAgICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbywgKm1nZl9tZF9pbmZvOworCisgICAgICAgIHBzc19vcHRzID0gKGNvbnN0IG1iZWR0bHNfcGtfcnNhc3NhX3Bzc19vcHRpb25zICopIHNpZ19vcHRzOworCisgICAgICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKTsKKyAgICAgICAgbWdmX21kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBwc3Nfb3B0cy0+bWdmMV9oYXNoX2lkICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiAoJXMsIE1HRjEtJXMsIDB4JTAyWCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRfaW5mbyA/IG1iZWR0bHNfbWRfZ2V0X25hbWUoIG1kX2luZm8gKSA6ICI/Pz8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWdmX21kX2luZm8gPyBtYmVkdGxzX21kX2dldF9uYW1lKCBtZ2ZfbWRfaW5mbyApIDogIj8/PyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc3Nfb3B0cy0+ZXhwZWN0ZWRfc2FsdF9sZW4gKTsKKyAgICAgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisgICAgfQorI2Vsc2UKKyAgICAoKHZvaWQpIHBrX2FsZyk7CisgICAgKCh2b2lkKSBtZF9hbGcpOworICAgICgodm9pZCkgc2lnX29wdHMpOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQgKi8KKworICAgIHJldHVybiggKGludCkoIHNpemUgLSBuICkgKTsKK30KKworLyoKKyAqIEhlbHBlciBmb3Igd3JpdGluZyAiUlNBIGtleSBzaXplIiwgIkVDIGtleSBzaXplIiwgZXRjCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfa2V5X3NpemVfaGVscGVyKCBjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSApCit7CisgICAgY2hhciAqcCA9IGJ1ZjsKKyAgICBzaXplX3QgbiA9IGJ1Zl9zaXplOworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiJXMga2V5IHNpemUiLCBuYW1lICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUVfREFURSkKKy8qCisgKiBTZXQgdGhlIHRpbWUgc3RydWN0dXJlIHRvIHRoZSBjdXJyZW50IHRpbWUuCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlLgorICovCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgIWRlZmluZWQoRUZJMzIpCitzdGF0aWMgaW50IHg1MDlfZ2V0X2N1cnJlbnRfdGltZSggbWJlZHRsc194NTA5X3RpbWUgKm5vdyApCit7CisgICAgU1lTVEVNVElNRSBzdDsKKworICAgIEdldFN5c3RlbVRpbWUoICZzdCApOworCisgICAgbm93LT55ZWFyID0gc3Qud1llYXI7CisgICAgbm93LT5tb24gID0gc3Qud01vbnRoOworICAgIG5vdy0+ZGF5ICA9IHN0LndEYXk7CisgICAgbm93LT5ob3VyID0gc3Qud0hvdXI7CisgICAgbm93LT5taW4gID0gc3Qud01pbnV0ZTsKKyAgICBub3ctPnNlYyAgPSBzdC53U2Vjb25kOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorc3RhdGljIGludCB4NTA5X2dldF9jdXJyZW50X3RpbWUoIG1iZWR0bHNfeDUwOV90aW1lICpub3cgKQoreworICAgIHN0cnVjdCB0bSAqbHQ7CisgICAgbWJlZHRsc190aW1lX3QgdHQ7CisgICAgaW50IHJldCA9IDA7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfbG9jayggJm1iZWR0bHNfdGhyZWFkaW5nX2dtdGltZV9tdXRleCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiApOworI2VuZGlmCisKKyAgICB0dCA9IG1iZWR0bHNfdGltZSggTlVMTCApOworICAgIGx0ID0gZ210aW1lKCAmdHQgKTsKKworICAgIGlmKCBsdCA9PSBOVUxMICkKKyAgICAgICAgcmV0ID0gLTE7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbm93LT55ZWFyID0gbHQtPnRtX3llYXIgKyAxOTAwOworICAgICAgICBub3ctPm1vbiAgPSBsdC0+dG1fbW9uICArIDE7CisgICAgICAgIG5vdy0+ZGF5ICA9IGx0LT50bV9tZGF5OworICAgICAgICBub3ctPmhvdXIgPSBsdC0+dG1faG91cjsKKyAgICAgICAgbm93LT5taW4gID0gbHQtPnRtX21pbjsKKyAgICAgICAgbm93LT5zZWMgID0gbHQtPnRtX3NlYzsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfdW5sb2NrKCAmbWJlZHRsc190aHJlYWRpbmdfZ210aW1lX211dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SICk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogX1dJTjMyICYmICFFRklYNjQgJiYgIUVGSTMyICovCisKKy8qCisgKiBSZXR1cm4gMCBpZiBiZWZvcmUgPD0gYWZ0ZXIsIDEgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9jaGVja190aW1lKCBjb25zdCBtYmVkdGxzX3g1MDlfdGltZSAqYmVmb3JlLCBjb25zdCBtYmVkdGxzX3g1MDlfdGltZSAqYWZ0ZXIgKQoreworICAgIGlmKCBiZWZvcmUtPnllYXIgID4gYWZ0ZXItPnllYXIgKQorICAgICAgICByZXR1cm4oIDEgKTsKKworICAgIGlmKCBiZWZvcmUtPnllYXIgPT0gYWZ0ZXItPnllYXIgJiYKKyAgICAgICAgYmVmb3JlLT5tb24gICA+IGFmdGVyLT5tb24gKQorICAgICAgICByZXR1cm4oIDEgKTsKKworICAgIGlmKCBiZWZvcmUtPnllYXIgPT0gYWZ0ZXItPnllYXIgJiYKKyAgICAgICAgYmVmb3JlLT5tb24gID09IGFmdGVyLT5tb24gICYmCisgICAgICAgIGJlZm9yZS0+ZGF5ICAgPiBhZnRlci0+ZGF5ICkKKyAgICAgICAgcmV0dXJuKCAxICk7CisKKyAgICBpZiggYmVmb3JlLT55ZWFyID09IGFmdGVyLT55ZWFyICYmCisgICAgICAgIGJlZm9yZS0+bW9uICA9PSBhZnRlci0+bW9uICAmJgorICAgICAgICBiZWZvcmUtPmRheSAgPT0gYWZ0ZXItPmRheSAgJiYKKyAgICAgICAgYmVmb3JlLT5ob3VyICA+IGFmdGVyLT5ob3VyICkKKyAgICAgICAgcmV0dXJuKCAxICk7CisKKyAgICBpZiggYmVmb3JlLT55ZWFyID09IGFmdGVyLT55ZWFyICYmCisgICAgICAgIGJlZm9yZS0+bW9uICA9PSBhZnRlci0+bW9uICAmJgorICAgICAgICBiZWZvcmUtPmRheSAgPT0gYWZ0ZXItPmRheSAgJiYKKyAgICAgICAgYmVmb3JlLT5ob3VyID09IGFmdGVyLT5ob3VyICYmCisgICAgICAgIGJlZm9yZS0+bWluICAgPiBhZnRlci0+bWluICApCisgICAgICAgIHJldHVybiggMSApOworCisgICAgaWYoIGJlZm9yZS0+eWVhciA9PSBhZnRlci0+eWVhciAmJgorICAgICAgICBiZWZvcmUtPm1vbiAgPT0gYWZ0ZXItPm1vbiAgJiYKKyAgICAgICAgYmVmb3JlLT5kYXkgID09IGFmdGVyLT5kYXkgICYmCisgICAgICAgIGJlZm9yZS0+aG91ciA9PSBhZnRlci0+aG91ciAmJgorICAgICAgICBiZWZvcmUtPm1pbiAgPT0gYWZ0ZXItPm1pbiAgJiYKKyAgICAgICAgYmVmb3JlLT5zZWMgICA+IGFmdGVyLT5zZWMgICkKKyAgICAgICAgcmV0dXJuKCAxICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfeDUwOV90aW1lX2lzX3Bhc3QoIGNvbnN0IG1iZWR0bHNfeDUwOV90aW1lICp0byApCit7CisgICAgbWJlZHRsc194NTA5X3RpbWUgbm93OworCisgICAgaWYoIHg1MDlfZ2V0X2N1cnJlbnRfdGltZSggJm5vdyApICE9IDAgKQorICAgICAgICByZXR1cm4oIDEgKTsKKworICAgIHJldHVybiggeDUwOV9jaGVja190aW1lKCAmbm93LCB0byApICk7Cit9CisKK2ludCBtYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmUoIGNvbnN0IG1iZWR0bHNfeDUwOV90aW1lICpmcm9tICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfdGltZSBub3c7CisKKyAgICBpZiggeDUwOV9nZXRfY3VycmVudF90aW1lKCAmbm93ICkgIT0gMCApCisgICAgICAgIHJldHVybiggMSApOworCisgICAgcmV0dXJuKCB4NTA5X2NoZWNrX3RpbWUoIGZyb20sICZub3cgKSApOworfQorCisjZWxzZSAgLyogTUJFRFRMU19IQVZFX1RJTUVfREFURSAqLworCitpbnQgbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdCggY29uc3QgbWJlZHRsc194NTA5X3RpbWUgKnRvICkKK3sKKyAgICAoKHZvaWQpIHRvKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfeDUwOV90aW1lX2lzX2Z1dHVyZSggY29uc3QgbWJlZHRsc194NTA5X3RpbWUgKmZyb20gKQoreworICAgICgodm9pZCkgZnJvbSk7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19IQVZFX1RJTUVfREFURSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jcnQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NlcnRzLmgiCisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfeDUwOV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0VSVFNfQykgJiYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICBpbnQgcmV0OworICAgIHVpbnQzMl90IGZsYWdzOworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2FjZXJ0OworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2xpY2VydDsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWC41MDkgY2VydGlmaWNhdGUgbG9hZDogIiApOworCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2xpY2VydCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJmNsaWNlcnQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9jbGlfY3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X2NsaV9jcnRfbGVuICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNhY2VydCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJmNhY2VydCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X2NhX2NydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X2NhX2NydF9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4gIFguNTA5IHNpZ25hdHVyZSB2ZXJpZnk6ICIpOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF92ZXJpZnkoICZjbGljZXJ0LCAmY2FjZXJ0LCBOVUxMLCBOVUxMLCAmZmxhZ3MsIE5VTEwsIE5VTEwgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG5cbiIpOworCisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2FjZXJ0ICApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNsaWNlcnQgKTsKKworICAgIHJldHVybiggMCApOworI2Vsc2UKKyAgICAoKHZvaWQpIHZlcmJvc2UpOworICAgIHJldHVybiggMCApOworI2VuZGlmIC8qIE1CRURUTFNfQ0VSVFNfQyAmJiBNQkVEVExTX1NIQTFfQyAqLworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9VU0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOV9jcmVhdGUuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDlfY3JlYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyMGVjOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDlfY3JlYXRlLmMKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisgKiAgWC41MDkgYmFzZSBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIGNlcnRpZmljYXRlcyAvIENTUnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSRUFURV9DKQorCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisjaW5jbHVkZSAibWJlZHRscy9hc24xd3JpdGUuaCIKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIHNpemVfdCBuYW1lX2xlbjsKKyAgICBjb25zdCBjaGFyKm9pZDsKK30geDUwOV9hdHRyX2Rlc2NyaXB0b3JfdDsKKworI2RlZmluZSBBRERfU1RSTEVOKCBzICkgICAgIHMsIHNpemVvZiggcyApIC0gMQorCitzdGF0aWMgY29uc3QgeDUwOV9hdHRyX2Rlc2NyaXB0b3JfdCB4NTA5X2F0dHJzW10gPQoreworICAgIHsgQUREX1NUUkxFTiggIkNOIiApLCAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfQ04gfSwKKyAgICB7IEFERF9TVFJMRU4oICJjb21tb25OYW1lIiApLCAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX0NOIH0sCisgICAgeyBBRERfU1RSTEVOKCAiQyIgKSwgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9DT1VOVFJZIH0sCisgICAgeyBBRERfU1RSTEVOKCAiY291bnRyeU5hbWUiICksICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9DT1VOVFJZIH0sCisgICAgeyBBRERfU1RSTEVOKCAiTyIgKSwgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9PUkdBTklaQVRJT04gfSwKKyAgICB7IEFERF9TVFJMRU4oICJvcmdhbml6YXRpb25OYW1lIiApLCAgICAgICAgIE1CRURUTFNfT0lEX0FUX09SR0FOSVpBVElPTiB9LAorICAgIHsgQUREX1NUUkxFTiggIkwiICksICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfTE9DQUxJVFkgfSwKKyAgICB7IEFERF9TVFJMRU4oICJsb2NhbGl0eSIgKSwgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX0xPQ0FMSVRZIH0sCisgICAgeyBBRERfU1RSTEVOKCAiUiIgKSwgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTOV9FTUFJTCB9LAorICAgIHsgQUREX1NUUkxFTiggIk9VIiApLCAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfT1JHX1VOSVQgfSwKKyAgICB7IEFERF9TVFJMRU4oICJvcmdhbml6YXRpb25hbFVuaXROYW1lIiApLCAgIE1CRURUTFNfT0lEX0FUX09SR19VTklUIH0sCisgICAgeyBBRERfU1RSTEVOKCAiU1QiICksICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9TVEFURSB9LAorICAgIHsgQUREX1NUUkxFTiggInN0YXRlT3JQcm92aW5jZU5hbWUiICksICAgICAgTUJFRFRMU19PSURfQVRfU1RBVEUgfSwKKyAgICB7IEFERF9TVFJMRU4oICJlbWFpbEFkZHJlc3MiICksICAgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1M5X0VNQUlMIH0sCisgICAgeyBBRERfU1RSTEVOKCAic2VyaWFsTnVtYmVyIiApLCAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9TRVJJQUxfTlVNQkVSIH0sCisgICAgeyBBRERfU1RSTEVOKCAicG9zdGFsQWRkcmVzcyIgKSwgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9QT1NUQUxfQUREUkVTUyB9LAorICAgIHsgQUREX1NUUkxFTiggInBvc3RhbENvZGUiICksICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfUE9TVEFMX0NPREUgfSwKKyAgICB7IEFERF9TVFJMRU4oICJkblF1YWxpZmllciIgKSwgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX0ROX1FVQUxJRklFUiB9LAorICAgIHsgQUREX1NUUkxFTiggInRpdGxlIiApLCAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfVElUTEUgfSwKKyAgICB7IEFERF9TVFJMRU4oICJzdXJOYW1lIiApLCAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX1NVUl9OQU1FIH0sCisgICAgeyBBRERfU1RSTEVOKCAiU04iICksICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9TVVJfTkFNRSB9LAorICAgIHsgQUREX1NUUkxFTiggImdpdmVuTmFtZSIgKSwgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfR0lWRU5fTkFNRSB9LAorICAgIHsgQUREX1NUUkxFTiggIkdOIiApLCAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfR0lWRU5fTkFNRSB9LAorICAgIHsgQUREX1NUUkxFTiggImluaXRpYWxzIiApLCAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfSU5JVElBTFMgfSwKKyAgICB7IEFERF9TVFJMRU4oICJwc2V1ZG9ueW0iICksICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX1BTRVVET05ZTSB9LAorICAgIHsgQUREX1NUUkxFTiggImdlbmVyYXRpb25RdWFsaWZpZXIiICksICAgICAgTUJFRFRMU19PSURfQVRfR0VORVJBVElPTl9RVUFMSUZJRVIgfSwKKyAgICB7IEFERF9TVFJMRU4oICJkb21haW5Db21wb25lbnQiICksICAgICAgICAgIE1CRURUTFNfT0lEX0RPTUFJTl9DT01QT05FTlQgfSwKKyAgICB7IEFERF9TVFJMRU4oICJEQyIgKSwgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0RPTUFJTl9DT01QT05FTlQgfSwKKyAgICB7IE5VTEwsIDAsIE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKng1MDlfYXRfb2lkX2Zyb21fbmFtZSggY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuICkKK3sKKyAgICBjb25zdCB4NTA5X2F0dHJfZGVzY3JpcHRvcl90ICpjdXI7CisKKyAgICBmb3IoIGN1ciA9IHg1MDlfYXR0cnM7IGN1ci0+bmFtZSAhPSBOVUxMOyBjdXIrKyApCisgICAgICAgIGlmKCBjdXItPm5hbWVfbGVuID09IG5hbWVfbGVuICYmCisgICAgICAgICAgICBzdHJuY21wKCBjdXItPm5hbWUsIG5hbWUsIG5hbWVfbGVuICkgPT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIHJldHVybiggY3VyLT5vaWQgKTsKK30KKworaW50IG1iZWR0bHNfeDUwOV9zdHJpbmdfdG9fbmFtZXMoIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICoqaGVhZCwgY29uc3QgY2hhciAqbmFtZSApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgY29uc3QgY2hhciAqcyA9IG5hbWUsICpjID0gczsKKyAgICBjb25zdCBjaGFyICplbmQgPSBzICsgc3RybGVuKCBzICk7CisgICAgY29uc3QgY2hhciAqb2lkID0gTlVMTDsKKyAgICBpbnQgaW5fdGFnID0gMTsKKyAgICBjaGFyIGRhdGFbTUJFRFRMU19YNTA5X01BWF9ETl9OQU1FX1NJWkVdOworICAgIGNoYXIgKmQgPSBkYXRhOworCisgICAgLyogQ2xlYXIgZXhpc3RpbmcgY2hhaW4gaWYgcHJlc2VudCAqLworICAgIG1iZWR0bHNfYXNuMV9mcmVlX25hbWVkX2RhdGFfbGlzdCggaGVhZCApOworCisgICAgd2hpbGUoIGMgPD0gZW5kICkKKyAgICB7CisgICAgICAgIGlmKCBpbl90YWcgJiYgKmMgPT0gJz0nICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggb2lkID0geDUwOV9hdF9vaWRfZnJvbV9uYW1lKCBzLCBjIC0gcyApICkgPT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX09JRDsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHMgPSBjICsgMTsKKyAgICAgICAgICAgIGluX3RhZyA9IDA7CisgICAgICAgICAgICBkID0gZGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAhaW5fdGFnICYmICpjID09ICdcXCcgJiYgYyAhPSBlbmQgKQorICAgICAgICB7CisgICAgICAgICAgICBjKys7CisKKyAgICAgICAgICAgIC8qIENoZWNrIGZvciB2YWxpZCBlc2NhcGVkIGNoYXJhY3RlcnMgKi8KKyAgICAgICAgICAgIGlmKCBjID09IGVuZCB8fCAqYyAhPSAnLCcgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCAhaW5fdGFnICYmICggKmMgPT0gJywnIHx8IGMgPT0gZW5kICkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggbWJlZHRsc19hc24xX3N0b3JlX25hbWVkX2RhdGEoIGhlYWQsIG9pZCwgc3RybGVuKCBvaWQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkIC0gZGF0YSApID09IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUoIGMgPCBlbmQgJiYgKihjICsgMSkgPT0gJyAnICkKKyAgICAgICAgICAgICAgICBjKys7CisKKyAgICAgICAgICAgIHMgPSBjICsgMTsKKyAgICAgICAgICAgIGluX3RhZyA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiggIWluX3RhZyAmJiBzICE9IGMgKyAxICkKKyAgICAgICAgeworICAgICAgICAgICAgKihkKyspID0gKmM7CisKKyAgICAgICAgICAgIGlmKCBkIC0gZGF0YSA9PSBNQkVEVExTX1g1MDlfTUFYX0ROX05BTUVfU0laRSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUU7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYysrOworICAgIH0KKworZXhpdDoKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qIFRoZSBmaXJzdCBieXRlIG9mIHRoZSB2YWx1ZSBpbiB0aGUgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgc3RydWN0dXJlIGlzIHJlc2VydmVkCisgKiB0byBzdG9yZSB0aGUgY3JpdGljYWwgYm9vbGVhbiBmb3IgdXMKKyAqLworaW50IG1iZWR0bHNfeDUwOV9zZXRfZXh0ZW5zaW9uKCBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqKmhlYWQsIGNvbnN0IGNoYXIgKm9pZCwgc2l6ZV90IG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3JpdGljYWwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCwgc2l6ZV90IHZhbF9sZW4gKQoreworICAgIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpjdXI7CisKKyAgICBpZiggKCBjdXIgPSBtYmVkdGxzX2FzbjFfc3RvcmVfbmFtZWRfZGF0YSggaGVhZCwgb2lkLCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgdmFsX2xlbiArIDEgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworICAgIGN1ci0+dmFsLnBbMF0gPSBjcml0aWNhbDsKKyAgICBtZW1jcHkoIGN1ci0+dmFsLnAgKyAxLCB2YWwsIHZhbF9sZW4gKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUgOjo9CisgKiAgICBTRVQgT0YgQXR0cmlidXRlVHlwZUFuZFZhbHVlCisgKgorICogIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZSA6Oj0gU0VRVUVOQ0UgeworICogICAgdHlwZSAgICAgQXR0cmlidXRlVHlwZSwKKyAqICAgIHZhbHVlICAgIEF0dHJpYnV0ZVZhbHVlIH0KKyAqCisgKiAgQXR0cmlidXRlVHlwZSA6Oj0gT0JKRUNUIElERU5USUZJRVIKKyAqCisgKiAgQXR0cmlidXRlVmFsdWUgOjo9IEFOWSBERUZJTkVEIEJZIEF0dHJpYnV0ZVR5cGUKKyAqLworc3RhdGljIGludCB4NTA5X3dyaXRlX25hbWUoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIC8vIFdyaXRlIFByaW50YWJsZVN0cmluZyBmb3IgYWxsIGV4Y2VwdCBNQkVEVExTX09JRF9QS0NTOV9FTUFJTAorICAgIC8vCisgICAgaWYoIE1CRURUTFNfT0lEX1NJWkUoIE1CRURUTFNfT0lEX1BLQ1M5X0VNQUlMICkgPT0gb2lkX2xlbiAmJgorICAgICAgICBtZW1jbXAoIG9pZCwgTUJFRFRMU19PSURfUEtDUzlfRU1BSUwsIG9pZF9sZW4gKSA9PSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9pYTVfc3RyaW5nKCBwLCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9sZW4gKSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfcHJpbnRhYmxlX3N0cmluZyggcCwgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfbGVuICkgKTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSBPSUQKKyAgICAvLworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9vaWQoIHAsIHN0YXJ0LCBvaWQsIG9pZF9sZW4gKSApOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHAsIHN0YXJ0LCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVQgKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworaW50IG1iZWR0bHNfeDUwOV93cml0ZV9uYW1lcyggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpmaXJzdCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKyAgICBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqY3VyID0gZmlyc3Q7CisKKyAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgeDUwOV93cml0ZV9uYW1lKCBwLCBzdGFydCwgKGNoYXIgKikgY3VyLT5vaWQucCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyLT5vaWQubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXItPnZhbC5wLCBjdXItPnZhbC5sZW4gKSApOworICAgICAgICBjdXIgPSBjdXItPm5leHQ7CisgICAgfQorCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKK2ludCBtYmVkdGxzX3g1MDlfd3JpdGVfc2lnKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9pZCwgc2l6ZV90IG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpemUgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBpZiggKnAgPCBzdGFydCB8fCAoc2l6ZV90KSggKnAgLSBzdGFydCApIDwgc2l6ZSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICBsZW4gPSBzaXplOworICAgICgqcCkgLT0gbGVuOworICAgIG1lbWNweSggKnAsIHNpZywgbGVuICk7CisKKyAgICBpZiggKnAgLSBzdGFydCA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCisgICAgKi0tKCpwKSA9IDA7CisgICAgbGVuICs9IDE7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCBwLCBzdGFydCwgTUJFRFRMU19BU04xX0JJVF9TVFJJTkcgKSApOworCisgICAgLy8gV3JpdGUgT0lECisgICAgLy8KKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfYWxnb3JpdGhtX2lkZW50aWZpZXIoIHAsIHN0YXJ0LCBvaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZF9sZW4sIDAgKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworc3RhdGljIGludCB4NTA5X3dyaXRlX2V4dGVuc2lvbiggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmV4dCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9yYXdfYnVmZmVyKCBwLCBzdGFydCwgZXh0LT52YWwucCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0LT52YWwubGVuIC0gMSApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGV4dC0+dmFsLmxlbiAtIDEgKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HICkgKTsKKworICAgIGlmKCBleHQtPnZhbC5wWzBdICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2Jvb2woIHAsIHN0YXJ0LCAxICkgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfcmF3X2J1ZmZlciggcCwgc3RhcnQsIGV4dC0+b2lkLnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0LT5vaWQubGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgZXh0LT5vaWQubGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCBwLCBzdGFydCwgTUJFRFRMU19BU04xX09JRCApICk7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCBwLCBzdGFydCwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworLyoKKyAqIEV4dGVuc2lvbiAgOjo9ICBTRVFVRU5DRSAgeworICogICAgIGV4dG5JRCAgICAgIE9CSkVDVCBJREVOVElGSUVSLAorICogICAgIGNyaXRpY2FsICAgIEJPT0xFQU4gREVGQVVMVCBGQUxTRSwKKyAqICAgICBleHRuVmFsdWUgICBPQ1RFVCBTVFJJTkcKKyAqICAgICAgICAgICAgICAgICAtLSBjb250YWlucyB0aGUgREVSIGVuY29kaW5nIG9mIGFuIEFTTi4xIHZhbHVlCisgKiAgICAgICAgICAgICAgICAgLS0gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uIHR5cGUgaWRlbnRpZmllZAorICogICAgICAgICAgICAgICAgIC0tIGJ5IGV4dG5JRAorICogICAgIH0KKyAqLworaW50IG1iZWR0bHNfeDUwOV93cml0ZV9leHRlbnNpb25zKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqZmlyc3QgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisgICAgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmN1cl9leHQgPSBmaXJzdDsKKworICAgIHdoaWxlKCBjdXJfZXh0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgeDUwOV93cml0ZV9leHRlbnNpb24oIHAsIHN0YXJ0LCBjdXJfZXh0ICkgKTsKKyAgICAgICAgY3VyX2V4dCA9IGN1cl9leHQtPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUkVBVEVfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOV9jcmwuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDlfY3JsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyYjQ3MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDlfY3JsLmMKQEAgLTAsMCArMSw3MjIgQEAKKy8qCisgKiAgWC41MDkgQ2VydGlkaWNhdGUgUmV2b2NhdGlvbiBMaXN0IChDUkwpIHBhcnNpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIElUVS1UIFguNTA5IHN0YW5kYXJkIGRlZmluZXMgYSBjZXJ0aWZpY2F0ZSBmb3JtYXQgZm9yIFBLSS4KKyAqCisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNTI4MC50eHQgKENlcnRpZmljYXRlcyBhbmQgQ1JMcykKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMjc5LnR4dCAoQWxnIElEcyBmb3IgQ1JMcykKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTg2LnR4dCAoQ1NScywgYWthIFBLQ1MjMTApCisgKgorICogIGh0dHA6Ly93d3cuaXR1LmludC9JVFUtVC9zdHVkeWdyb3Vwcy9jb20xNy9sYW5ndWFnZXMvWC42ODAtMDIwNy5wZGYKKyAqICBodHRwOi8vd3d3Lml0dS5pbnQvSVRVLVQvc3R1ZHlncm91cHMvY29tMTcvbGFuZ3VhZ2VzL1guNjkwLTAyMDcucGRmCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DKQorCisjaW5jbHVkZSAibWJlZHRscy94NTA5X2NybC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgc25wcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgIWRlZmluZWQoRUZJMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2Vsc2UKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgZGVmaW5lZChFRklYNjQpIHx8IGRlZmluZWQoRUZJMzIpCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogIFZlcnNpb24gIDo6PSAgSU5URUdFUiAgeyAgdjEoMCksIHYyKDEpICB9CisgKi8KK3N0YXRpYyBpbnQgeDUwOV9jcmxfZ2V0X3ZlcnNpb24oIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdmVyICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9pbnQoIHAsIGVuZCwgdmVyICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApCisgICAgICAgIHsKKyAgICAgICAgICAgICp2ZXIgPSAwOworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OICsgcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBYLjUwOSBDUkwgdjIgZXh0ZW5zaW9ucyAobm8gZXh0ZW5zaW9ucyBwYXJzZWQgeWV0LikKKyAqLworc3RhdGljIGludCB4NTA5X2dldF9jcmxfZXh0KCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfYnVmICpleHQgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICAvKiBHZXQgZXhwbGljaXQgdGFnICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9leHQoIHAsIGVuZCwgZXh0LCAwKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgd2hpbGUoICpwIDwgZW5kICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sCisgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyByZXQgKTsKKworICAgICAgICAqcCArPSBsZW47CisgICAgfQorCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFguNTA5IENSTCB2MiBlbnRyeSBleHRlbnNpb25zIChubyBleHRlbnNpb25zIHBhcnNlZCB5ZXQuKQorICovCitzdGF0aWMgaW50IHg1MDlfZ2V0X2NybF9lbnRyeV9leHQoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9idWYgKmV4dCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIC8qIE9QVElPTkFMICovCisgICAgaWYoIGVuZCA8PSAqcCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgZXh0LT50YWcgPSAqKnA7CisgICAgZXh0LT5wID0gKnA7CisKKyAgICAvKgorICAgICAqIEdldCBDUkwtZW50cnkgZXh0ZW5zaW9uIHNlcXVlbmNlIGhlYWRlcgorICAgICAqIGNybEVudHJ5RXh0ZW5zaW9ucyAgICAgIEV4dGVuc2lvbnMgT1BUSU9OQUwgIC0tIGlmIHByZXNlbnQsIE1VU1QgYmUgdjIKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmZXh0LT5sZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkKKyAgICAgICAgeworICAgICAgICAgICAgZXh0LT5wID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyByZXQgKTsKKyAgICB9CisKKyAgICBlbmQgPSAqcCArIGV4dC0+bGVuOworCisgICAgaWYoIGVuZCAhPSAqcCArIGV4dC0+bGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIHdoaWxlKCAqcCA8IGVuZCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgcmV0ICk7CisKKyAgICAgICAgKnAgKz0gbGVuOworICAgIH0KKworICAgIGlmKCAqcCAhPSBlbmQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBYLjUwOSBDUkwgRW50cmllcworICovCitzdGF0aWMgaW50IHg1MDlfZ2V0X2VudHJpZXMoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZW50cnkgKmVudHJ5ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBlbnRyeV9sZW47CisgICAgbWJlZHRsc194NTA5X2NybF9lbnRyeSAqY3VyX2VudHJ5ID0gZW50cnk7CisKKyAgICBpZiggKnAgPT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmZW50cnlfbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFUVVFTkNFIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGVuZCA9ICpwICsgZW50cnlfbGVuOworCisgICAgd2hpbGUoICpwIDwgZW5kICkKKyAgICB7CisgICAgICAgIHNpemVfdCBsZW4yOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQyOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4yLAorICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSB8IE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBjdXJfZW50cnktPnJhdy50YWcgPSAqKnA7CisgICAgICAgIGN1cl9lbnRyeS0+cmF3LnAgPSAqcDsKKyAgICAgICAgY3VyX2VudHJ5LT5yYXcubGVuID0gbGVuMjsKKyAgICAgICAgZW5kMiA9ICpwICsgbGVuMjsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X3NlcmlhbCggcCwgZW5kMiwgJmN1cl9lbnRyeS0+c2VyaWFsICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF90aW1lKCBwLCBlbmQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyX2VudHJ5LT5yZXZvY2F0aW9uX2RhdGUgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBpZiggKCByZXQgPSB4NTA5X2dldF9jcmxfZW50cnlfZXh0KCBwLCBlbmQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyX2VudHJ5LT5lbnRyeV9leHQgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBpZiggKnAgPCBlbmQgKQorICAgICAgICB7CisgICAgICAgICAgICBjdXJfZW50cnktPm5leHQgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfY3JsX2VudHJ5ICkgKTsKKworICAgICAgICAgICAgaWYoIGN1cl9lbnRyeS0+bmV4dCA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVEICk7CisKKyAgICAgICAgICAgIGN1cl9lbnRyeSA9IGN1cl9lbnRyeS0+bmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogUGFyc2Ugb25lICBDUkxzIGluIERFUiBmb3JtYXQgYW5kIGFwcGVuZCBpdCB0byB0aGUgY2hhaW5lZCBsaXN0CisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2RlciggbWJlZHRsc194NTA5X2NybCAqY2hhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwLCAqZW5kOworICAgIG1iZWR0bHNfeDUwOV9idWYgc2lnX3BhcmFtczEsIHNpZ19wYXJhbXMyLCBzaWdfb2lkMjsKKyAgICBtYmVkdGxzX3g1MDlfY3JsICpjcmwgPSBjaGFpbjsKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIHZhbGlkIGlucHV0CisgICAgICovCisgICAgaWYoIGNybCA9PSBOVUxMIHx8IGJ1ZiA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtZW1zZXQoICZzaWdfcGFyYW1zMSwgMCwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfYnVmICkgKTsKKyAgICBtZW1zZXQoICZzaWdfcGFyYW1zMiwgMCwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfYnVmICkgKTsKKyAgICBtZW1zZXQoICZzaWdfb2lkMiwgMCwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfYnVmICkgKTsKKworICAgIC8qCisgICAgICogQWRkIG5ldyBDUkwgb24gdGhlIGVuZCBvZiB0aGUgY2hhaW4gaWYgbmVlZGVkLgorICAgICAqLworICAgIHdoaWxlKCBjcmwtPnZlcnNpb24gIT0gMCAmJiBjcmwtPm5leHQgIT0gTlVMTCApCisgICAgICAgIGNybCA9IGNybC0+bmV4dDsKKworICAgIGlmKCBjcmwtPnZlcnNpb24gIT0gMCAmJiBjcmwtPm5leHQgPT0gTlVMTCApCisgICAgeworICAgICAgICBjcmwtPm5leHQgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfY3JsICkgKTsKKworICAgICAgICBpZiggY3JsLT5uZXh0ID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIGNybCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRCApOworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9pbml0KCBjcmwtPm5leHQgKTsKKyAgICAgICAgY3JsID0gY3JsLT5uZXh0OworICAgIH0KKworICAgIC8qCisgICAgICogQ29weSByYXcgREVSLWVuY29kZWQgQ1JMCisgICAgICovCisgICAgaWYoICggcCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBidWZsZW4gKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVEICk7CisKKyAgICBtZW1jcHkoIHAsIGJ1ZiwgYnVmbGVuICk7CisKKyAgICBjcmwtPnJhdy5wID0gcDsKKyAgICBjcmwtPnJhdy5sZW4gPSBidWZsZW47CisKKyAgICBlbmQgPSBwICsgYnVmbGVuOworCisgICAgLyoKKyAgICAgKiBDZXJ0aWZpY2F0ZUxpc3QgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAgKiAgICAgIHRic0NlcnRMaXN0ICAgICAgICAgIFRCU0NlcnRMaXN0LAorICAgICAqICAgICAgc2lnbmF0dXJlQWxnb3JpdGhtICAgQWxnb3JpdGhtSWRlbnRpZmllciwKKyAgICAgKiAgICAgIHNpZ25hdHVyZVZhbHVlICAgICAgIEJJVCBTVFJJTkcgIH0KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIGNybCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKTsKKyAgICB9CisKKyAgICBpZiggbGVuICE9IChzaXplX3QpICggZW5kIC0gcCApICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRCU0NlcnRMaXN0ICA6Oj0gIFNFUVVFTkNFICB7CisgICAgICovCisgICAgY3JsLT50YnMucCA9IHA7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIGNybCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBlbmQgPSBwICsgbGVuOworICAgIGNybC0+dGJzLmxlbiA9IGVuZCAtIGNybC0+dGJzLnA7CisKKyAgICAvKgorICAgICAqIFZlcnNpb24gIDo6PSAgSU5URUdFUiAgT1BUSU9OQUwgeyAgdjEoMCksIHYyKDEpICB9CisgICAgICogICAgICAgICAgICAgICAtLSBpZiBwcmVzZW50LCBNVVNUIGJlIHYyCisgICAgICoKKyAgICAgKiBzaWduYXR1cmUgICAgICAgICAgICBBbGdvcml0aG1JZGVudGlmaWVyCisgICAgICovCisgICAgaWYoICggcmV0ID0geDUwOV9jcmxfZ2V0X3ZlcnNpb24oICZwLCBlbmQsICZjcmwtPnZlcnNpb24gKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X2FsZyggJnAsIGVuZCwgJmNybC0+c2lnX29pZCwgJnNpZ19wYXJhbXMxICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgY3JsLT52ZXJzaW9uKys7CisKKyAgICBpZiggY3JsLT52ZXJzaW9uID4gMiApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIGNybCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9zaWdfYWxnKCAmY3JsLT5zaWdfb2lkLCAmc2lnX3BhcmFtczEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNybC0+c2lnX21kLCAmY3JsLT5zaWdfcGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNybC0+c2lnX29wdHMgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRyApOworICAgIH0KKworICAgIC8qCisgICAgICogaXNzdWVyICAgICAgICAgICAgICAgTmFtZQorICAgICAqLworICAgIGNybC0+aXNzdWVyX3Jhdy5wID0gcDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfbmFtZSggJnAsIHAgKyBsZW4sICZjcmwtPmlzc3VlciApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIGNybCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGNybC0+aXNzdWVyX3Jhdy5sZW4gPSBwIC0gY3JsLT5pc3N1ZXJfcmF3LnA7CisKKyAgICAvKgorICAgICAqIHRoaXNVcGRhdGUgICAgICAgICAgVGltZQorICAgICAqIG5leHRVcGRhdGUgICAgICAgICAgVGltZSBPUFRJT05BTAorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfdGltZSggJnAsIGVuZCwgJmNybC0+dGhpc191cGRhdGUgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X3RpbWUoICZwLCBlbmQsICZjcmwtPm5leHRfdXBkYXRlICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgIT0gKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURSArCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkgJiYKKyAgICAgICAgICAgIHJldCAhPSAoIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFICsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiByZXZva2VkQ2VydGlmaWNhdGVzICAgIFNFUVVFTkNFIE9GIFNFUVVFTkNFICAgeworICAgICAqICAgICAgdXNlckNlcnRpZmljYXRlICAgICAgICBDZXJ0aWZpY2F0ZVNlcmlhbE51bWJlciwKKyAgICAgKiAgICAgIHJldm9jYXRpb25EYXRlICAgICAgICAgVGltZSwKKyAgICAgKiAgICAgIGNybEVudHJ5RXh0ZW5zaW9ucyAgICAgRXh0ZW5zaW9ucyBPUFRJT05BTAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBpZiBwcmVzZW50LCBNVVNUIGJlIHYyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB9IE9QVElPTkFMCisgICAgICovCisgICAgaWYoICggcmV0ID0geDUwOV9nZXRfZW50cmllcyggJnAsIGVuZCwgJmNybC0+ZW50cnkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNybEV4dGVuc2lvbnMgICAgICAgICAgRVhQTElDSVQgRXh0ZW5zaW9ucyBPUFRJT05BTAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gaWYgcHJlc2VudCwgTVVTVCBiZSB2MgorICAgICAqLworICAgIGlmKCBjcmwtPnZlcnNpb24gPT0gMiApCisgICAgeworICAgICAgICByZXQgPSB4NTA5X2dldF9jcmxfZXh0KCAmcCwgZW5kLCAmY3JsLT5jcmxfZXh0ICk7CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggcCAhPSBlbmQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworICAgIH0KKworICAgIGVuZCA9IGNybC0+cmF3LnAgKyBjcmwtPnJhdy5sZW47CisKKyAgICAvKgorICAgICAqICBzaWduYXR1cmVBbGdvcml0aG0gICBBbGdvcml0aG1JZGVudGlmaWVyLAorICAgICAqICBzaWduYXR1cmVWYWx1ZSAgICAgICBCSVQgU1RSSU5HCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9hbGcoICZwLCBlbmQsICZzaWdfb2lkMiwgJnNpZ19wYXJhbXMyICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIGNybC0+c2lnX29pZC5sZW4gIT0gc2lnX29pZDIubGVuIHx8CisgICAgICAgIG1lbWNtcCggY3JsLT5zaWdfb2lkLnAsIHNpZ19vaWQyLnAsIGNybC0+c2lnX29pZC5sZW4gKSAhPSAwIHx8CisgICAgICAgIHNpZ19wYXJhbXMxLmxlbiAhPSBzaWdfcGFyYW1zMi5sZW4gfHwKKyAgICAgICAgKCBzaWdfcGFyYW1zMS5sZW4gIT0gMCAmJgorICAgICAgICAgIG1lbWNtcCggc2lnX3BhcmFtczEucCwgc2lnX3BhcmFtczIucCwgc2lnX3BhcmFtczEubGVuICkgIT0gMCApICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9TSUdfTUlTTUFUQ0ggKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X3NpZyggJnAsIGVuZCwgJmNybC0+c2lnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFBhcnNlIG9uZSBvciBtb3JlIENSTHMgYW5kIGFkZCB0aGVtIHRvIHRoZSBjaGFpbmVkIGxpc3QKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcmxfcGFyc2UoIG1iZWR0bHNfeDUwOV9jcmwgKmNoYWluLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCB1c2VfbGVuOworICAgIG1iZWR0bHNfcGVtX2NvbnRleHQgcGVtOworICAgIGludCBpc19wZW0gPSAwOworCisgICAgaWYoIGNoYWluID09IE5VTEwgfHwgYnVmID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGRvCisgICAgeworICAgICAgICBtYmVkdGxzX3BlbV9pbml0KCAmcGVtICk7CisKKyAgICAgICAgLy8gQXZvaWQgY2FsbGluZyBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlcigpIG9uIG5vbi1udWxsLXRlcm1pbmF0ZWQKKyAgICAgICAgLy8gc3RyaW5nCisgICAgICAgIGlmKCBidWZsZW4gPT0gMCB8fCBidWZbYnVmbGVuIC0gMV0gIT0gJ1wwJyApCisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlciggJnBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1FTkQgWDUwOSBDUkwtLS0tLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgTlVMTCwgMCwgJnVzZV9sZW4gKTsKKworICAgICAgICBpZiggcmV0ID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogV2FzIFBFTSBlbmNvZGVkCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlzX3BlbSA9IDE7CisKKyAgICAgICAgICAgIGJ1ZmxlbiAtPSB1c2VfbGVuOworICAgICAgICAgICAgYnVmICs9IHVzZV9sZW47CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZGVyKCBjaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtLmJ1ZiwgcGVtLmJ1ZmxlbiApICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19wZW1fZnJlZSggJnBlbSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wZW1fZnJlZSggJnBlbSApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBJbiB0aGUgUEVNIGNhc2UsIGJ1ZmxlbiBpcyAxIGF0IHRoZSBlbmQsIGZvciB0aGUgdGVybWluYXRlZCBOVUxMIGJ5dGUuCisgICAgICogQW5kIGEgdmFsaWQgQ1JMIGNhbm5vdCBiZSBsZXNzIHRoYW4gMSBieXRlIGFueXdheS4gKi8KKyAgICB3aGlsZSggaXNfcGVtICYmIGJ1ZmxlbiA+IDEgKTsKKworICAgIGlmKCBpc19wZW0gKQorICAgICAgICByZXR1cm4oIDAgKTsKKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19QRU1fUEFSU0VfQyAqLworICAgICAgICByZXR1cm4oIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZGVyKCBjaGFpbiwgYnVmLCBidWZsZW4gKSApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoKKyAqIExvYWQgb25lIG9yIG1vcmUgQ1JMcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGNoYWluZWQgbGlzdAorICovCitpbnQgbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlKCBtYmVkdGxzX3g1MDlfY3JsICpjaGFpbiwgY29uc3QgY2hhciAqcGF0aCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbjsKKyAgICB1bnNpZ25lZCBjaGFyICpidWY7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX2xvYWRfZmlsZSggcGF0aCwgJmJ1ZiwgJm4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NybF9wYXJzZSggY2hhaW4sIGJ1ZiwgbiApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBidWYsIG4gKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGJ1ZiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKKy8qCisgKiBSZXR1cm4gYW4gaW5mb3JtYXRpb25hbCBzdHJpbmcgYWJvdXQgdGhlIGNlcnRpZmljYXRlLgorICovCisjZGVmaW5lIEJFRk9SRV9DT0xPTiAgICAxNAorI2RlZmluZSBCQyAgICAgICAgICAgICAgIjE0IgorLyoKKyAqIFJldHVybiBhbiBpbmZvcm1hdGlvbmFsIHN0cmluZyBhYm91dCB0aGUgQ1JMLgorICovCitpbnQgbWJlZHRsc194NTA5X2NybF9pbmZvKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X2NybCAqY3JsICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuOworICAgIGNoYXIgKnA7CisgICAgY29uc3QgbWJlZHRsc194NTA5X2NybF9lbnRyeSAqZW50cnk7CisKKyAgICBwID0gYnVmOworICAgIG4gPSBzaXplOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiVzQ1JMIHZlcnNpb24gICA6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgsIGNybC0+dmVyc2lvbiApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNpc3N1ZXIgbmFtZSAgIDogIiwgcHJlZml4ICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisgICAgcmV0ID0gbWJlZHRsc194NTA5X2RuX2dldHMoIHAsIG4sICZjcmwtPmlzc3VlciApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXN0aGlzIHVwZGF0ZSAgIDogIiBcCisgICAgICAgICAgICAgICAgICAgIiUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkIiwgcHJlZml4LAorICAgICAgICAgICAgICAgICAgIGNybC0+dGhpc191cGRhdGUueWVhciwgY3JsLT50aGlzX3VwZGF0ZS5tb24sCisgICAgICAgICAgICAgICAgICAgY3JsLT50aGlzX3VwZGF0ZS5kYXksICBjcmwtPnRoaXNfdXBkYXRlLmhvdXIsCisgICAgICAgICAgICAgICAgICAgY3JsLT50aGlzX3VwZGF0ZS5taW4sICBjcmwtPnRoaXNfdXBkYXRlLnNlYyApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNuZXh0IHVwZGF0ZSAgIDogIiBcCisgICAgICAgICAgICAgICAgICAgIiUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkIiwgcHJlZml4LAorICAgICAgICAgICAgICAgICAgIGNybC0+bmV4dF91cGRhdGUueWVhciwgY3JsLT5uZXh0X3VwZGF0ZS5tb24sCisgICAgICAgICAgICAgICAgICAgY3JsLT5uZXh0X3VwZGF0ZS5kYXksICBjcmwtPm5leHRfdXBkYXRlLmhvdXIsCisgICAgICAgICAgICAgICAgICAgY3JsLT5uZXh0X3VwZGF0ZS5taW4sICBjcmwtPm5leHRfdXBkYXRlLnNlYyApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgZW50cnkgPSAmY3JsLT5lbnRyeTsKKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiVzUmV2b2tlZCBjZXJ0aWZpY2F0ZXM6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHdoaWxlKCBlbnRyeSAhPSBOVUxMICYmIGVudHJ5LT5yYXcubGVuICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNzZXJpYWwgbnVtYmVyOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCApOworICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfc2VyaWFsX2dldHMoIHAsIG4sICZlbnRyeS0+c2VyaWFsICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIgcmV2b2NhdGlvbiBkYXRlOiAiIFwKKyAgICAgICAgICAgICAgICAgICAiJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQiLAorICAgICAgICAgICAgICAgICAgIGVudHJ5LT5yZXZvY2F0aW9uX2RhdGUueWVhciwgZW50cnktPnJldm9jYXRpb25fZGF0ZS5tb24sCisgICAgICAgICAgICAgICAgICAgZW50cnktPnJldm9jYXRpb25fZGF0ZS5kYXksICBlbnRyeS0+cmV2b2NhdGlvbl9kYXRlLmhvdXIsCisgICAgICAgICAgICAgICAgICAgZW50cnktPnJldm9jYXRpb25fZGF0ZS5taW4sICBlbnRyeS0+cmV2b2NhdGlvbl9kYXRlLnNlYyApOworICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgICAgICBlbnRyeSA9IGVudHJ5LT5uZXh0OworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiVzc2lnbmVkIHVzaW5nICA6ICIsIHByZWZpeCApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X3NpZ19hbGdfZ2V0cyggcCwgbiwgJmNybC0+c2lnX29pZCwgY3JsLT5zaWdfcGssIGNybC0+c2lnX21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmwtPnNpZ19vcHRzICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4iICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXR1cm4oIChpbnQpICggc2l6ZSAtIG4gKSApOworfQorCisvKgorICogSW5pdGlhbGl6ZSBhIENSTCBjaGFpbgorICovCit2b2lkIG1iZWR0bHNfeDUwOV9jcmxfaW5pdCggbWJlZHRsc194NTA5X2NybCAqY3JsICkKK3sKKyAgICBtZW1zZXQoIGNybCwgMCwgc2l6ZW9mKG1iZWR0bHNfeDUwOV9jcmwpICk7Cit9CisKKy8qCisgKiBVbmFsbG9jYXRlIGFsbCBDUkwgZGF0YQorICovCit2b2lkIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggbWJlZHRsc194NTA5X2NybCAqY3JsICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfY3JsICpjcmxfY3VyID0gY3JsOworICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNybF9wcnY7CisgICAgbWJlZHRsc194NTA5X25hbWUgKm5hbWVfY3VyOworICAgIG1iZWR0bHNfeDUwOV9uYW1lICpuYW1lX3BydjsKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2VudHJ5ICplbnRyeV9jdXI7CisgICAgbWJlZHRsc194NTA5X2NybF9lbnRyeSAqZW50cnlfcHJ2OworCisgICAgaWYoIGNybCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG8KKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUKQorICAgICAgICBtYmVkdGxzX2ZyZWUoIGNybF9jdXItPnNpZ19vcHRzICk7CisjZW5kaWYKKworICAgICAgICBuYW1lX2N1ciA9IGNybF9jdXItPmlzc3Vlci5uZXh0OworICAgICAgICB3aGlsZSggbmFtZV9jdXIgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVfcHJ2ID0gbmFtZV9jdXI7CisgICAgICAgICAgICBuYW1lX2N1ciA9IG5hbWVfY3VyLT5uZXh0OworICAgICAgICAgICAgbWJlZHRsc196ZXJvaXplKCBuYW1lX3Bydiwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfbmFtZSApICk7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIG5hbWVfcHJ2ICk7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeV9jdXIgPSBjcmxfY3VyLT5lbnRyeS5uZXh0OworICAgICAgICB3aGlsZSggZW50cnlfY3VyICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRyeV9wcnYgPSBlbnRyeV9jdXI7CisgICAgICAgICAgICBlbnRyeV9jdXIgPSBlbnRyeV9jdXItPm5leHQ7CisgICAgICAgICAgICBtYmVkdGxzX3plcm9pemUoIGVudHJ5X3Bydiwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfY3JsX2VudHJ5ICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggZW50cnlfcHJ2ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggY3JsX2N1ci0+cmF3LnAgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggY3JsX2N1ci0+cmF3LnAsIGNybF9jdXItPnJhdy5sZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggY3JsX2N1ci0+cmF3LnAgKTsKKyAgICAgICAgfQorCisgICAgICAgIGNybF9jdXIgPSBjcmxfY3VyLT5uZXh0OworICAgIH0KKyAgICB3aGlsZSggY3JsX2N1ciAhPSBOVUxMICk7CisKKyAgICBjcmxfY3VyID0gY3JsOworICAgIGRvCisgICAgeworICAgICAgICBjcmxfcHJ2ID0gY3JsX2N1cjsKKyAgICAgICAgY3JsX2N1ciA9IGNybF9jdXItPm5leHQ7CisKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBjcmxfcHJ2LCBzaXplb2YoIG1iZWR0bHNfeDUwOV9jcmwgKSApOworICAgICAgICBpZiggY3JsX3BydiAhPSBjcmwgKQorICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBjcmxfcHJ2ICk7CisgICAgfQorICAgIHdoaWxlKCBjcmxfY3VyICE9IE5VTEwgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOV9jcnQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDlfY3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlMTRmOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDlfY3J0LmMKQEAgLTAsMCArMSwyMzk0IEBACisvKgorICogIFguNTA5IGNlcnRpZmljYXRlIHBhcnNpbmcgYW5kIHZlcmlmaWNhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgSVRVLVQgWC41MDkgc3RhbmRhcmQgZGVmaW5lcyBhIGNlcnRpZmljYXRlIGZvcm1hdCBmb3IgUEtJLgorICoKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM1MjgwLnR4dCAoQ2VydGlmaWNhdGVzIGFuZCBDUkxzKQorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzMyNzkudHh0IChBbGcgSURzIGZvciBDUkxzKQorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5ODYudHh0IChDU1JzLCBha2EgUEtDUyMxMCkKKyAqCisgKiAgaHR0cDovL3d3dy5pdHUuaW50L0lUVS1UL3N0dWR5Z3JvdXBzL2NvbTE3L2xhbmd1YWdlcy9YLjY4MC0wMjA3LnBkZgorICogIGh0dHA6Ly93d3cuaXR1LmludC9JVFUtVC9zdHVkeWdyb3Vwcy9jb20xNy9sYW5ndWFnZXMvWC42OTAtMDIwNy5wZGYKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3J0LmgiCisjaW5jbHVkZSAibWJlZHRscy9vaWQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisjaW5jbHVkZSAibWJlZHRscy9wZW0uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICBzbnByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisjaW5jbHVkZSAibWJlZHRscy90aHJlYWRpbmcuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgIWRlZmluZWQoRUZJMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2Vsc2UKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmICFkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChFRklYNjQpIHx8IGRlZmluZWQoRUZJMzIpCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZiAvKiAhX1dJTjMyIHx8IEVGSVg2NCB8fCBFRkkzMiAqLworI2VuZGlmCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiBEZWZhdWx0IHByb2ZpbGUKKyAqLworY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlIG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZV9kZWZhdWx0ID0KK3sKKyAgICAvKiBIYXNoZXMgZnJvbSBTSEEtMSBhbmQgYWJvdmUgKi8KKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19NRF9TSEExICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1JJUEVNRDE2MCApIHwKKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19NRF9TSEEyMjQgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfTURfU0hBMjU2ICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1NIQTM4NCApIHwKKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19NRF9TSEE1MTIgKSwKKyAgICAweEZGRkZGRkYsIC8qIEFueSBQSyBhbGcgICAgKi8KKyAgICAweEZGRkZGRkYsIC8qIEFueSBjdXJ2ZSAgICAgKi8KKyAgICAyMDQ4LAorfTsKKworLyoKKyAqIE5leHQtZGVmYXVsdCBwcm9maWxlCisgKi8KK2NvbnN0IG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZSBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGVfbmV4dCA9Cit7CisgICAgLyogSGFzaGVzIGZyb20gU0hBLTI1NiBhbmQgYWJvdmUgKi8KKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19NRF9TSEEyNTYgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfTURfU0hBMzg0ICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1NIQTUxMiApLAorICAgIDB4RkZGRkZGRiwgLyogQW55IFBLIGFsZyAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICAvKiBDdXJ2ZXMgYXQgb3IgYWJvdmUgMTI4LWJpdCBzZWN1cml0eSBsZXZlbCAqLworICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMSApIHwKKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX0VDUF9EUF9CUDI1NlIxICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX0VDUF9EUF9CUDM4NFIxICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX0VDUF9EUF9CUDUxMlIxICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzEgKSwKKyNlbHNlCisgICAgMCwKKyNlbmRpZgorICAgIDIwNDgsCit9OworCisvKgorICogTlNBIFN1aXRlIEIgUHJvZmlsZQorICovCitjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgbWJlZHRsc194NTA5X2NydF9wcm9maWxlX3N1aXRlYiA9Cit7CisgICAgLyogT25seSBTSEEtMjU2IGFuZCAzODQgKi8KKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19NRF9TSEEyNTYgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfTURfU0hBMzg0ICksCisgICAgLyogT25seSBFQ0RTQSAqLworICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX1BLX0VDRFNBICksCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIC8qIE9ubHkgTklTVCBQLTI1NiBhbmQgUC0zODQgKi8KKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjEgKSwKKyNlbHNlCisgICAgMCwKKyNlbmRpZgorICAgIDAsCit9OworCisvKgorICogQ2hlY2sgbWRfYWxnIGFnYWluc3QgcHJvZmlsZQorICogUmV0dXJuIDAgaWYgbWRfYWxnIGFjY2VwdGFibGUgZm9yIHRoaXMgcHJvZmlsZSwgLTEgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9wcm9maWxlX2NoZWNrX21kX2FsZyggY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcgKQoreworICAgIGlmKCAoIHByb2ZpbGUtPmFsbG93ZWRfbWRzICYgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIG1kX2FsZyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgcmV0dXJuKCAtMSApOworfQorCisvKgorICogQ2hlY2sgcGtfYWxnIGFnYWluc3QgcHJvZmlsZQorICogUmV0dXJuIDAgaWYgcGtfYWxnIGFjY2VwdGFibGUgZm9yIHRoaXMgcHJvZmlsZSwgLTEgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9wcm9maWxlX2NoZWNrX3BrX2FsZyggY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX3R5cGVfdCBwa19hbGcgKQoreworICAgIGlmKCAoIHByb2ZpbGUtPmFsbG93ZWRfcGtzICYgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIHBrX2FsZyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgcmV0dXJuKCAtMSApOworfQorCisvKgorICogQ2hlY2sga2V5IGFnYWluc3QgcHJvZmlsZQorICogUmV0dXJuIDAgaWYgcGtfYWxnIGFjY2VwdGFibGUgZm9yIHRoaXMgcHJvZmlsZSwgLTEgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9wcm9maWxlX2NoZWNrX2tleSggY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX3R5cGVfdCBwa19hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqcGsgKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICBpZiggcGtfYWxnID09IE1CRURUTFNfUEtfUlNBIHx8IHBrX2FsZyA9PSBNQkVEVExTX1BLX1JTQVNTQV9QU1MgKQorICAgIHsKKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X2JpdGxlbiggcGsgKSA+PSBwcm9maWxlLT5yc2FfbWluX2JpdGxlbiApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYoIHBrX2FsZyA9PSBNQkVEVExTX1BLX0VDRFNBIHx8CisgICAgICAgIHBrX2FsZyA9PSBNQkVEVExTX1BLX0VDS0VZIHx8CisgICAgICAgIHBrX2FsZyA9PSBNQkVEVExTX1BLX0VDS0VZX0RIICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGdpZCA9IG1iZWR0bHNfcGtfZWMoICpwayApLT5ncnAuaWQ7CisKKyAgICAgICAgaWYoICggcHJvZmlsZS0+YWxsb3dlZF9jdXJ2ZXMgJiBNQkVEVExTX1g1MDlfSURfRkxBRyggZ2lkICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiggLTEgKTsKK30KKworLyoKKyAqICBWZXJzaW9uICA6Oj0gIElOVEVHRVIgIHsgIHYxKDApLCB2MigxKSwgdjMoMikgIH0KKyAqLworc3RhdGljIGludCB4NTA5X2dldF92ZXJzaW9uKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnZlciApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgMCApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICB7CisgICAgICAgICAgICAqdmVyID0gMDsKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBlbmQgPSAqcCArIGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfaW50KCBwLCBlbmQsIHZlciApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04gKyByZXQgKTsKKworICAgIGlmKCAqcCAhPSBlbmQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiAgVmFsaWRpdHkgOjo9IFNFUVVFTkNFIHsKKyAqICAgICAgIG5vdEJlZm9yZSAgICAgIFRpbWUsCisgKiAgICAgICBub3RBZnRlciAgICAgICBUaW1lIH0KKyAqLworc3RhdGljIGludCB4NTA5X2dldF9kYXRlcyggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfdGltZSAqZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV90aW1lICp0byApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKyByZXQgKTsKKworICAgIGVuZCA9ICpwICsgbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF90aW1lKCBwLCBlbmQsIGZyb20gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF90aW1lKCBwLCBlbmQsIHRvICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAqcCAhPSBlbmQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBYLjUwOSB2Mi92MyB1bmlxdWUgaWRlbnRpZmllciAobm90IHBhcnNlZCkKKyAqLworc3RhdGljIGludCB4NTA5X2dldF91aWQoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfYnVmICp1aWQsIGludCBuICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICpwID09IGVuZCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgdWlkLT50YWcgPSAqKnA7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmdWlkLT5sZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8IE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IG4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgdWlkLT5wID0gKnA7CisgICAgKnAgKz0gdWlkLT5sZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCB4NTA5X2dldF9iYXNpY19jb25zdHJhaW50cyggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNhX2lzdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbWF4X3BhdGhsZW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKworICAgIC8qCisgICAgICogQmFzaWNDb25zdHJhaW50cyA6Oj0gU0VRVUVOQ0UgeworICAgICAqICAgICAgY0EgICAgICAgICAgICAgICAgICAgICAgQk9PTEVBTiBERUZBVUxUIEZBTFNFLAorICAgICAqICAgICAgcGF0aExlbkNvbnN0cmFpbnQgICAgICAgSU5URUdFUiAoMC4uTUFYKSBPUFRJT05BTCB9CisgICAgICovCisgICAgKmNhX2lzdHJ1ZSA9IDA7IC8qIERFRkFVTFQgRkFMU0UgKi8KKyAgICAqbWF4X3BhdGhsZW4gPSAwOyAvKiBlbmRsZXNzICovCisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgaWYoICpwID09IGVuZCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9ib29sKCBwLCBlbmQsIGNhX2lzdHJ1ZSApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19hc24xX2dldF9pbnQoIHAsIGVuZCwgY2FfaXN0cnVlICk7CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyByZXQgKTsKKworICAgICAgICBpZiggKmNhX2lzdHJ1ZSAhPSAwICkKKyAgICAgICAgICAgICpjYV9pc3RydWUgPSAxOworICAgIH0KKworICAgIGlmKCAqcCA9PSBlbmQgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfaW50KCBwLCBlbmQsIG1heF9wYXRobGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICAoKm1heF9wYXRobGVuKSsrOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgeDUwOV9nZXRfbnNfY2VydF90eXBlKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm5zX2NlcnRfdHlwZSkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfeDUwOV9iaXRzdHJpbmcgYnMgPSB7IDAsIDAsIE5VTEwgfTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfYml0c3RyaW5nKCBwLCBlbmQsICZicyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyByZXQgKTsKKworICAgIGlmKCBicy5sZW4gIT0gMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9MRU5HVEggKTsKKworICAgIC8qIEdldCBhY3R1YWwgYml0c3RyaW5nICovCisgICAgKm5zX2NlcnRfdHlwZSA9ICpicy5wOworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHg1MDlfZ2V0X2tleV91c2FnZSggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqa2V5X3VzYWdlKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc194NTA5X2JpdHN0cmluZyBicyA9IHsgMCwgMCwgTlVMTCB9OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9iaXRzdHJpbmcoIHAsIGVuZCwgJmJzICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgaWYoIGJzLmxlbiA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RIICk7CisKKyAgICAvKiBHZXQgYWN0dWFsIGJpdHN0cmluZyAqLworICAgICprZXlfdXNhZ2UgPSAwOworICAgIGZvciggaSA9IDA7IGkgPCBicy5sZW4gJiYgaSA8IHNpemVvZiggdW5zaWduZWQgaW50ICk7IGkrKyApCisgICAgeworICAgICAgICAqa2V5X3VzYWdlIHw9ICh1bnNpZ25lZCBpbnQpIGJzLnBbaV0gPDwgKDgqaSk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBFeHRLZXlVc2FnZVN5bnRheCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uTUFYKSBPRiBLZXlQdXJwb3NlSWQKKyAqCisgKiBLZXlQdXJwb3NlSWQgOjo9IE9CSkVDVCBJREVOVElGSUVSCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9nZXRfZXh0X2tleV91c2FnZSggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9zZXF1ZW5jZSAqZXh0X2tleV91c2FnZSkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9zZXF1ZW5jZV9vZiggcCwgZW5kLCBleHRfa2V5X3VzYWdlLCBNQkVEVExTX0FTTjFfT0lEICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgLyogU2VxdWVuY2UgbGVuZ3RoIG11c3QgYmUgPj0gMSAqLworICAgIGlmKCBleHRfa2V5X3VzYWdlLT5idWYucCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBTdWJqZWN0QWx0TmFtZSA6Oj0gR2VuZXJhbE5hbWVzCisgKgorICogR2VuZXJhbE5hbWVzIDo6PSBTRVFVRU5DRSBTSVpFICgxLi5NQVgpIE9GIEdlbmVyYWxOYW1lCisgKgorICogR2VuZXJhbE5hbWUgOjo9IENIT0lDRSB7CisgKiAgICAgIG90aGVyTmFtZSAgICAgICAgICAgICAgICAgICAgICAgWzBdICAgICBPdGhlck5hbWUsCisgKiAgICAgIHJmYzgyMk5hbWUgICAgICAgICAgICAgICAgICAgICAgWzFdICAgICBJQTVTdHJpbmcsCisgKiAgICAgIGROU05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgWzJdICAgICBJQTVTdHJpbmcsCisgKiAgICAgIHg0MDBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgWzNdICAgICBPUkFkZHJlc3MsCisgKiAgICAgIGRpcmVjdG9yeU5hbWUgICAgICAgICAgICAgICAgICAgWzRdICAgICBOYW1lLAorICogICAgICBlZGlQYXJ0eU5hbWUgICAgICAgICAgICAgICAgICAgIFs1XSAgICAgRURJUGFydHlOYW1lLAorICogICAgICB1bmlmb3JtUmVzb3VyY2VJZGVudGlmaWVyICAgICAgIFs2XSAgICAgSUE1U3RyaW5nLAorICogICAgICBpUEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgIFs3XSAgICAgT0NURVQgU1RSSU5HLAorICogICAgICByZWdpc3RlcmVkSUQgICAgICAgICAgICAgICAgICAgIFs4XSAgICAgT0JKRUNUIElERU5USUZJRVIgfQorICoKKyAqIE90aGVyTmFtZSA6Oj0gU0VRVUVOQ0UgeworICogICAgICB0eXBlLWlkICAgIE9CSkVDVCBJREVOVElGSUVSLAorICogICAgICB2YWx1ZSAgICAgIFswXSBFWFBMSUNJVCBBTlkgREVGSU5FRCBCWSB0eXBlLWlkIH0KKyAqCisgKiBFRElQYXJ0eU5hbWUgOjo9IFNFUVVFTkNFIHsKKyAqICAgICAgbmFtZUFzc2lnbmVyICAgICAgICAgICAgWzBdICAgICBEaXJlY3RvcnlTdHJpbmcgT1BUSU9OQUwsCisgKiAgICAgIHBhcnR5TmFtZSAgICAgICAgICAgICAgIFsxXSAgICAgRGlyZWN0b3J5U3RyaW5nIH0KKyAqCisgKiBOT1RFOiB3ZSBvbmx5IHBhcnNlIGFuZCB1c2UgZE5TTmFtZSBhdCB0aGlzIHBvaW50LgorICovCitzdGF0aWMgaW50IHg1MDlfZ2V0X3N1YmplY3RfYWx0X25hbWUoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9zZXF1ZW5jZSAqc3ViamVjdF9hbHRfbmFtZSApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuLCB0YWdfbGVuOworICAgIG1iZWR0bHNfYXNuMV9idWYgKmJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyIHRhZzsKKyAgICBtYmVkdGxzX2FzbjFfc2VxdWVuY2UgKmN1ciA9IHN1YmplY3RfYWx0X25hbWU7CisKKyAgICAvKiBHZXQgbWFpbiBzZXF1ZW5jZSB0YWcgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgaWYoICpwICsgbGVuICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICB3aGlsZSggKnAgPCBlbmQgKQorICAgIHsKKyAgICAgICAgaWYoICggZW5kIC0gKnAgKSA8IDEgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgICAgICB0YWcgPSAqKnA7CisgICAgICAgICgqcCkrKzsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9sZW4oIHAsIGVuZCwgJnRhZ19sZW4gKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgICAgIGlmKCAoIHRhZyAmIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDICkgIT0gTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKTsKKworICAgICAgICAvKiBTa2lwIGV2ZXJ5dGhpbmcgYnV0IEROUyBuYW1lICovCisgICAgICAgIGlmKCB0YWcgIT0gKCBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8IDIgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICpwICs9IHRhZ19sZW47CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBhc3NpZ24gbmV4dCBwb2ludGVyICovCisgICAgICAgIGlmKCBjdXItPmJ1Zi5wICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggY3VyLT5uZXh0ICE9IE5VTEwgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKTsKKworICAgICAgICAgICAgY3VyLT5uZXh0ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19hc24xX3NlcXVlbmNlICkgKTsKKworICAgICAgICAgICAgaWYoIGN1ci0+bmV4dCA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfQUxMT0NfRkFJTEVEICk7CisKKyAgICAgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIGJ1ZiA9ICYoY3VyLT5idWYpOworICAgICAgICBidWYtPnRhZyA9IHRhZzsKKyAgICAgICAgYnVmLT5wID0gKnA7CisgICAgICAgIGJ1Zi0+bGVuID0gdGFnX2xlbjsKKyAgICAgICAgKnAgKz0gYnVmLT5sZW47CisgICAgfQorCisgICAgLyogU2V0IGZpbmFsIHNlcXVlbmNlIGVudHJ5J3MgbmV4dCBwb2ludGVyIHRvIE5VTEwgKi8KKyAgICBjdXItPm5leHQgPSBOVUxMOworCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFguNTA5IHYzIGV4dGVuc2lvbnMKKyAqCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9nZXRfY3J0X2V4dCggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydCAqY3J0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisgICAgdW5zaWduZWQgY2hhciAqZW5kX2V4dF9kYXRhLCAqZW5kX2V4dF9vY3RldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfZXh0KCBwLCBlbmQsICZjcnQtPnYzX2V4dCwgMyApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICB3aGlsZSggKnAgPCBlbmQgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogRXh0ZW5zaW9uICA6Oj0gIFNFUVVFTkNFICB7CisgICAgICAgICAqICAgICAgZXh0bklEICAgICAgT0JKRUNUIElERU5USUZJRVIsCisgICAgICAgICAqICAgICAgY3JpdGljYWwgICAgQk9PTEVBTiBERUZBVUxUIEZBTFNFLAorICAgICAgICAgKiAgICAgIGV4dG5WYWx1ZSAgIE9DVEVUIFNUUklORyAgfQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc194NTA5X2J1ZiBleHRuX29pZCA9IHswLCAwLCBOVUxMfTsKKyAgICAgICAgaW50IGlzX2NyaXRpY2FsID0gMDsgLyogREVGQVVMVCBGQUxTRSAqLworICAgICAgICBpbnQgZXh0X3R5cGUgPSAwOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sCisgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyByZXQgKTsKKworICAgICAgICBlbmRfZXh0X2RhdGEgPSAqcCArIGxlbjsKKworICAgICAgICAvKiBHZXQgZXh0ZW5zaW9uIElEICovCisgICAgICAgIGV4dG5fb2lkLnRhZyA9ICoqcDsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmZXh0bl9vaWQubGVuLCBNQkVEVExTX0FTTjFfT0lEICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyByZXQgKTsKKworICAgICAgICBleHRuX29pZC5wID0gKnA7CisgICAgICAgICpwICs9IGV4dG5fb2lkLmxlbjsKKworICAgICAgICBpZiggKCBlbmQgLSAqcCApIDwgMSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworCisgICAgICAgIC8qIEdldCBvcHRpb25hbCBjcml0aWNhbCAqLworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2Jvb2woIHAsIGVuZF9leHRfZGF0YSwgJmlzX2NyaXRpY2FsICkgKSAhPSAwICYmCisgICAgICAgICAgICAoIHJldCAhPSBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgICAgIC8qIERhdGEgc2hvdWxkIGJlIG9jdGV0IHN0cmluZyB0eXBlICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmRfZXh0X2RhdGEsICZsZW4sCisgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX09DVEVUX1NUUklORyApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgcmV0ICk7CisKKyAgICAgICAgZW5kX2V4dF9vY3RldCA9ICpwICsgbGVuOworCisgICAgICAgIGlmKCBlbmRfZXh0X29jdGV0ICE9IGVuZF9leHRfZGF0YSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBEZXRlY3Qgc3VwcG9ydGVkIGV4dGVuc2lvbnMKKyAgICAgICAgICovCisgICAgICAgIHJldCA9IG1iZWR0bHNfb2lkX2dldF94NTA5X2V4dF90eXBlKCAmZXh0bl9vaWQsICZleHRfdHlwZSApOworCisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE5vIHBhcnNlciBmb3VuZCwgc2tpcCBleHRlbnNpb24gKi8KKyAgICAgICAgICAgICpwID0gZW5kX2V4dF9vY3RldDsKKworI2lmICFkZWZpbmVkKE1CRURUTFNfWDUwOV9BTExPV19VTlNVUFBPUlRFRF9DUklUSUNBTF9FWFRFTlNJT04pCisgICAgICAgICAgICBpZiggaXNfY3JpdGljYWwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIERhdGEgaXMgbWFya2VkIGFzIGNyaXRpY2FsOiBmYWlsICovCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyogRm9yYmlkIHJlcGVhdGVkIGV4dGVuc2lvbnMgKi8KKyAgICAgICAgaWYoICggY3J0LT5leHRfdHlwZXMgJiBleHRfdHlwZSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyApOworCisgICAgICAgIGNydC0+ZXh0X3R5cGVzIHw9IGV4dF90eXBlOworCisgICAgICAgIHN3aXRjaCggZXh0X3R5cGUgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTUJFRFRMU19YNTA5X0VYVF9CQVNJQ19DT05TVFJBSU5UUzoKKyAgICAgICAgICAgIC8qIFBhcnNlIGJhc2ljIGNvbnN0cmFpbnRzICovCisgICAgICAgICAgICBpZiggKCByZXQgPSB4NTA5X2dldF9iYXNpY19jb25zdHJhaW50cyggcCwgZW5kX2V4dF9vY3RldCwKKyAgICAgICAgICAgICAgICAgICAgJmNydC0+Y2FfaXN0cnVlLCAmY3J0LT5tYXhfcGF0aGxlbiApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUJFRFRMU19YNTA5X0VYVF9LRVlfVVNBR0U6CisgICAgICAgICAgICAvKiBQYXJzZSBrZXkgdXNhZ2UgKi8KKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHg1MDlfZ2V0X2tleV91c2FnZSggcCwgZW5kX2V4dF9vY3RldCwKKyAgICAgICAgICAgICAgICAgICAgJmNydC0+a2V5X3VzYWdlICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX1g1MDlfRVhUX0VYVEVOREVEX0tFWV9VU0FHRToKKyAgICAgICAgICAgIC8qIFBhcnNlIGV4dGVuZGVkIGtleSB1c2FnZSAqLworICAgICAgICAgICAgaWYoICggcmV0ID0geDUwOV9nZXRfZXh0X2tleV91c2FnZSggcCwgZW5kX2V4dF9vY3RldCwKKyAgICAgICAgICAgICAgICAgICAgJmNydC0+ZXh0X2tleV91c2FnZSApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUJFRFRMU19YNTA5X0VYVF9TVUJKRUNUX0FMVF9OQU1FOgorICAgICAgICAgICAgLyogUGFyc2Ugc3ViamVjdCBhbHQgbmFtZSAqLworICAgICAgICAgICAgaWYoICggcmV0ID0geDUwOV9nZXRfc3ViamVjdF9hbHRfbmFtZSggcCwgZW5kX2V4dF9vY3RldCwKKyAgICAgICAgICAgICAgICAgICAgJmNydC0+c3ViamVjdF9hbHRfbmFtZXMgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1CRURUTFNfWDUwOV9FWFRfTlNfQ0VSVF9UWVBFOgorICAgICAgICAgICAgLyogUGFyc2UgbmV0c2NhcGUgY2VydGlmaWNhdGUgdHlwZSAqLworICAgICAgICAgICAgaWYoICggcmV0ID0geDUwOV9nZXRfbnNfY2VydF90eXBlKCBwLCBlbmRfZXh0X29jdGV0LAorICAgICAgICAgICAgICAgICAgICAmY3J0LT5uc19jZXJ0X3R5cGUgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCAqcCAhPSBlbmQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBQYXJzZSBhbmQgZmlsbCBhIHNpbmdsZSBYLjUwOSBjZXJ0aWZpY2F0ZSBpbiBERVIgZm9ybWF0CisgKi8KK3N0YXRpYyBpbnQgeDUwOV9jcnRfcGFyc2VfZGVyX2NvcmUoIG1iZWR0bHNfeDUwOV9jcnQgKmNydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnAsICplbmQsICpjcnRfZW5kOworICAgIG1iZWR0bHNfeDUwOV9idWYgc2lnX3BhcmFtczEsIHNpZ19wYXJhbXMyLCBzaWdfb2lkMjsKKworICAgIG1lbXNldCggJnNpZ19wYXJhbXMxLCAwLCBzaXplb2YoIG1iZWR0bHNfeDUwOV9idWYgKSApOworICAgIG1lbXNldCggJnNpZ19wYXJhbXMyLCAwLCBzaXplb2YoIG1iZWR0bHNfeDUwOV9idWYgKSApOworICAgIG1lbXNldCggJnNpZ19vaWQyLCAwLCBzaXplb2YoIG1iZWR0bHNfeDUwOV9idWYgKSApOworCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgdmFsaWQgaW5wdXQKKyAgICAgKi8KKyAgICBpZiggY3J0ID09IE5VTEwgfHwgYnVmID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgYnVmZmVyIHVudGlsIHdlIGZpZ3VyZSBvdXQgYWN0dWFsIGxlbmd0aAorICAgIHAgPSAodW5zaWduZWQgY2hhciopIGJ1ZjsKKyAgICBsZW4gPSBidWZsZW47CisgICAgZW5kID0gcCArIGxlbjsKKworICAgIC8qCisgICAgICogQ2VydGlmaWNhdGUgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAgKiAgICAgIHRic0NlcnRpZmljYXRlICAgICAgIFRCU0NlcnRpZmljYXRlLAorICAgICAqICAgICAgc2lnbmF0dXJlQWxnb3JpdGhtICAgQWxnb3JpdGhtSWRlbnRpZmllciwKKyAgICAgKiAgICAgIHNpZ25hdHVyZVZhbHVlICAgICAgIEJJVCBTVFJJTkcgIH0KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKTsKKyAgICB9CisKKyAgICBpZiggbGVuID4gKHNpemVfdCkgKCBlbmQgLSBwICkgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBjcnQgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworICAgIH0KKyAgICBjcnRfZW5kID0gcCArIGxlbjsKKworICAgIC8vIENyZWF0ZSBhbmQgcG9wdWxhdGUgYSBuZXcgYnVmZmVyIGZvciB0aGUgcmF3IGZpZWxkCisgICAgY3J0LT5yYXcubGVuID0gY3J0X2VuZCAtIGJ1ZjsKKyAgICBjcnQtPnJhdy5wID0gcCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBjcnQtPnJhdy5sZW4gKTsKKyAgICBpZiggcCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRCApOworCisgICAgbWVtY3B5KCBwLCBidWYsIGNydC0+cmF3LmxlbiApOworCisgICAgLy8gRGlyZWN0IHBvaW50ZXJzIHRvIHRoZSBuZXcgYnVmZmVyIAorICAgIHAgKz0gY3J0LT5yYXcubGVuIC0gbGVuOworICAgIGVuZCA9IGNydF9lbmQgPSBwICsgbGVuOworCisgICAgLyoKKyAgICAgKiBUQlNDZXJ0aWZpY2F0ZSAgOjo9ICBTRVFVRU5DRSAgeworICAgICAqLworICAgIGNydC0+dGJzLnAgPSBwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBjcnQgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgZW5kID0gcCArIGxlbjsKKyAgICBjcnQtPnRicy5sZW4gPSBlbmQgLSBjcnQtPnRicy5wOworCisgICAgLyoKKyAgICAgKiBWZXJzaW9uICA6Oj0gIElOVEVHRVIgIHsgIHYxKDApLCB2MigxKSwgdjMoMikgIH0KKyAgICAgKgorICAgICAqIENlcnRpZmljYXRlU2VyaWFsTnVtYmVyICA6Oj0gIElOVEVHRVIKKyAgICAgKgorICAgICAqIHNpZ25hdHVyZSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSB4NTA5X2dldF92ZXJzaW9uKCAgJnAsIGVuZCwgJmNydC0+dmVyc2lvbiAgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X3NlcmlhbCggICAmcCwgZW5kLCAmY3J0LT5zZXJpYWwgICApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfYWxnKCAgICAgICZwLCBlbmQsICZjcnQtPnNpZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWdfcGFyYW1zMSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGNydC0+dmVyc2lvbisrOworCisgICAgaWYoIGNydC0+dmVyc2lvbiA+IDMgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBjcnQgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fVkVSU0lPTiApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfc2lnX2FsZyggJmNydC0+c2lnX29pZCwgJnNpZ19wYXJhbXMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcnQtPnNpZ19tZCwgJmNydC0+c2lnX3BrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcnQtPnNpZ19vcHRzICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpc3N1ZXIgICAgICAgICAgICAgICBOYW1lCisgICAgICovCisgICAgY3J0LT5pc3N1ZXJfcmF3LnAgPSBwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBjcnQgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9uYW1lKCAmcCwgcCArIGxlbiwgJmNydC0+aXNzdWVyICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgY3J0LT5pc3N1ZXJfcmF3LmxlbiA9IHAgLSBjcnQtPmlzc3Vlcl9yYXcucDsKKworICAgIC8qCisgICAgICogVmFsaWRpdHkgOjo9IFNFUVVFTkNFIHsKKyAgICAgKiAgICAgIG5vdEJlZm9yZSAgICAgIFRpbWUsCisgICAgICogICAgICBub3RBZnRlciAgICAgICBUaW1lIH0KKyAgICAgKgorICAgICAqLworICAgIGlmKCAoIHJldCA9IHg1MDlfZ2V0X2RhdGVzKCAmcCwgZW5kLCAmY3J0LT52YWxpZF9mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3J0LT52YWxpZF90byApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qCisgICAgICogc3ViamVjdCAgICAgICAgICAgICAgTmFtZQorICAgICAqLworICAgIGNydC0+c3ViamVjdF9yYXcucCA9IHA7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBpZiggbGVuICYmICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9uYW1lKCAmcCwgcCArIGxlbiwgJmNydC0+c3ViamVjdCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGNydC0+c3ViamVjdF9yYXcubGVuID0gcCAtIGNydC0+c3ViamVjdF9yYXcucDsKKworICAgIC8qCisgICAgICogU3ViamVjdFB1YmxpY0tleUluZm8KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX3N1YnB1YmtleSggJnAsIGVuZCwgJmNydC0+cGsgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBjcnQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICBpc3N1ZXJVbmlxdWVJRCAgWzFdICBJTVBMSUNJVCBVbmlxdWVJZGVudGlmaWVyIE9QVElPTkFMLAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAtLSBJZiBwcmVzZW50LCB2ZXJzaW9uIHNoYWxsIGJlIHYyIG9yIHYzCisgICAgICogIHN1YmplY3RVbmlxdWVJRCBbMl0gIElNUExJQ0lUIFVuaXF1ZUlkZW50aWZpZXIgT1BUSU9OQUwsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIC0tIElmIHByZXNlbnQsIHZlcnNpb24gc2hhbGwgYmUgdjIgb3IgdjMKKyAgICAgKiAgZXh0ZW5zaW9ucyAgICAgIFszXSAgRVhQTElDSVQgRXh0ZW5zaW9ucyBPUFRJT05BTAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAtLSBJZiBwcmVzZW50LCB2ZXJzaW9uIHNoYWxsIGJlIHYzCisgICAgICovCisgICAgaWYoIGNydC0+dmVyc2lvbiA9PSAyIHx8IGNydC0+dmVyc2lvbiA9PSAzICkKKyAgICB7CisgICAgICAgIHJldCA9IHg1MDlfZ2V0X3VpZCggJnAsIGVuZCwgJmNydC0+aXNzdWVyX2lkLCAgMSApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBjcnQtPnZlcnNpb24gPT0gMiB8fCBjcnQtPnZlcnNpb24gPT0gMyApCisgICAgeworICAgICAgICByZXQgPSB4NTA5X2dldF91aWQoICZwLCBlbmQsICZjcnQtPnN1YmplY3RfaWQsICAyICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19YNTA5X0FMTE9XX0VYVEVOU0lPTlNfTk9OX1YzKQorICAgIGlmKCBjcnQtPnZlcnNpb24gPT0gMyApCisjZW5kaWYKKyAgICB7CisgICAgICAgIHJldCA9IHg1MDlfZ2V0X2NydF9leHQoICZwLCBlbmQsIGNydCApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBwICE9IGVuZCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisgICAgfQorCisgICAgZW5kID0gY3J0X2VuZDsKKworICAgIC8qCisgICAgICogIH0KKyAgICAgKiAgLS0gZW5kIG9mIFRCU0NlcnRpZmljYXRlCisgICAgICoKKyAgICAgKiAgc2lnbmF0dXJlQWxnb3JpdGhtICAgQWxnb3JpdGhtSWRlbnRpZmllciwKKyAgICAgKiAgc2lnbmF0dXJlVmFsdWUgICAgICAgQklUIFNUUklORworICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfYWxnKCAmcCwgZW5kLCAmc2lnX29pZDIsICZzaWdfcGFyYW1zMiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBjcnQtPnNpZ19vaWQubGVuICE9IHNpZ19vaWQyLmxlbiB8fAorICAgICAgICBtZW1jbXAoIGNydC0+c2lnX29pZC5wLCBzaWdfb2lkMi5wLCBjcnQtPnNpZ19vaWQubGVuICkgIT0gMCB8fAorICAgICAgICBzaWdfcGFyYW1zMS5sZW4gIT0gc2lnX3BhcmFtczIubGVuIHx8CisgICAgICAgICggc2lnX3BhcmFtczEubGVuICE9IDAgJiYKKyAgICAgICAgICBtZW1jbXAoIHNpZ19wYXJhbXMxLnAsIHNpZ19wYXJhbXMyLnAsIHNpZ19wYXJhbXMxLmxlbiApICE9IDAgKSApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfU0lHX01JU01BVENIICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9zaWcoICZwLCBlbmQsICZjcnQtPnNpZyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBwICE9IGVuZCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBQYXJzZSBvbmUgWC41MDkgY2VydGlmaWNhdGUgaW4gREVSIGZvcm1hdCBmcm9tIGEgYnVmZmVyIGFuZCBhZGQgdGhlbSB0byBhCisgKiBjaGFpbmVkIGxpc3QKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZGVyKCBtYmVkdGxzX3g1MDlfY3J0ICpjaGFpbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX3g1MDlfY3J0ICpjcnQgPSBjaGFpbiwgKnByZXYgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgdmFsaWQgaW5wdXQKKyAgICAgKi8KKyAgICBpZiggY3J0ID09IE5VTEwgfHwgYnVmID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHdoaWxlKCBjcnQtPnZlcnNpb24gIT0gMCAmJiBjcnQtPm5leHQgIT0gTlVMTCApCisgICAgeworICAgICAgICBwcmV2ID0gY3J0OworICAgICAgICBjcnQgPSBjcnQtPm5leHQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBBZGQgbmV3IGNlcnRpZmljYXRlIG9uIHRoZSBlbmQgb2YgdGhlIGNoYWluIGlmIG5lZWRlZC4KKyAgICAgKi8KKyAgICBpZiggY3J0LT52ZXJzaW9uICE9IDAgJiYgY3J0LT5uZXh0ID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgY3J0LT5uZXh0ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc194NTA5X2NydCApICk7CisKKyAgICAgICAgaWYoIGNydC0+bmV4dCA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQgKTsKKworICAgICAgICBwcmV2ID0gY3J0OworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoIGNydC0+bmV4dCApOworICAgICAgICBjcnQgPSBjcnQtPm5leHQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0geDUwOV9jcnRfcGFyc2VfZGVyX2NvcmUoIGNydCwgYnVmLCBidWZsZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHByZXYgKQorICAgICAgICAgICAgcHJldi0+bmV4dCA9IE5VTEw7CisKKyAgICAgICAgaWYoIGNydCAhPSBjaGFpbiApCisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIGNydCApOworCisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBQYXJzZSBvbmUgb3IgbW9yZSBQRU0gY2VydGlmaWNhdGVzIGZyb20gYSBidWZmZXIgYW5kIGFkZCB0aGVtIHRvIHRoZSBjaGFpbmVkCisgKiBsaXN0CisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCBtYmVkdGxzX3g1MDlfY3J0ICpjaGFpbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuICkKK3sKKyAgICBpbnQgc3VjY2VzcyA9IDAsIGZpcnN0X2Vycm9yID0gMCwgdG90YWxfZmFpbGVkID0gMDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisgICAgaW50IGJ1Zl9mb3JtYXQgPSBNQkVEVExTX1g1MDlfRk9STUFUX0RFUjsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgdmFsaWQgaW5wdXQKKyAgICAgKi8KKyAgICBpZiggY2hhaW4gPT0gTlVMTCB8fCBidWYgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworCisgICAgLyoKKyAgICAgKiBEZXRlcm1pbmUgYnVmZmVyIGNvbnRlbnQuIEJ1ZmZlciBjb250YWlucyBlaXRoZXIgb25lIERFUiBjZXJ0aWZpY2F0ZSBvcgorICAgICAqIG9uZSBvciBtb3JlIFBFTSBjZXJ0aWZpY2F0ZXMuCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorICAgIGlmKCBidWZsZW4gIT0gMCAmJiBidWZbYnVmbGVuIC0gMV0gPT0gJ1wwJyAmJgorICAgICAgICBzdHJzdHIoIChjb25zdCBjaGFyICopIGJ1ZiwgIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLSIgKSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGJ1Zl9mb3JtYXQgPSBNQkVEVExTX1g1MDlfRk9STUFUX1BFTTsKKyAgICB9CisKKyAgICBpZiggYnVmX2Zvcm1hdCA9PSBNQkVEVExTX1g1MDlfRk9STUFUX0RFUiApCisgICAgICAgIHJldHVybiBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2RlciggY2hhaW4sIGJ1ZiwgYnVmbGVuICk7CisjZWxzZQorICAgIHJldHVybiBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2RlciggY2hhaW4sIGJ1ZiwgYnVmbGVuICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyAgICBpZiggYnVmX2Zvcm1hdCA9PSBNQkVEVExTX1g1MDlfRk9STUFUX1BFTSApCisgICAgeworICAgICAgICBpbnQgcmV0OworICAgICAgICBtYmVkdGxzX3BlbV9jb250ZXh0IHBlbTsKKworICAgICAgICAvKiAxIHJhdGhlciB0aGFuIDAgc2luY2UgdGhlIHRlcm1pbmF0aW5nIE5VTEwgYnl0ZSBpcyBjb3VudGVkIGluICovCisgICAgICAgIHdoaWxlKCBidWZsZW4gPiAxICkKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZV90IHVzZV9sZW47CisgICAgICAgICAgICBtYmVkdGxzX3BlbV9pbml0KCAmcGVtICk7CisKKyAgICAgICAgICAgIC8qIElmIHdlIGdldCB0aGVyZSwgd2Uga25vdyB0aGUgc3RyaW5nIGlzIG51bGwtdGVybWluYXRlZCAqLworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoICZwZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgTlVMTCwgMCwgJnVzZV9sZW4gKTsKKworICAgICAgICAgICAgaWYoIHJldCA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFdhcyBQRU0gZW5jb2RlZAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGJ1ZmxlbiAtPSB1c2VfbGVuOworICAgICAgICAgICAgICAgIGJ1ZiArPSB1c2VfbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggcmV0ID09IE1CRURUTFNfRVJSX1BFTV9CQURfSU5QVVRfREFUQSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3BlbV9mcmVlKCAmcGVtICk7CisKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFBFTSBoZWFkZXIgYW5kIGZvb3RlciB3ZXJlIGZvdW5kCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYnVmbGVuIC09IHVzZV9sZW47CisgICAgICAgICAgICAgICAgYnVmICs9IHVzZV9sZW47CisKKyAgICAgICAgICAgICAgICBpZiggZmlyc3RfZXJyb3IgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIGZpcnN0X2Vycm9yID0gcmV0OworCisgICAgICAgICAgICAgICAgdG90YWxfZmFpbGVkKys7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZGVyKCBjaGFpbiwgcGVtLmJ1ZiwgcGVtLmJ1ZmxlbiApOworCisgICAgICAgICAgICBtYmVkdGxzX3BlbV9mcmVlKCAmcGVtICk7CisKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBRdWl0IHBhcnNpbmcgb24gYSBtZW1vcnkgZXJyb3IKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVEICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgICAgIGlmKCBmaXJzdF9lcnJvciA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RfZXJyb3IgPSByZXQ7CisKKyAgICAgICAgICAgICAgICB0b3RhbF9mYWlsZWQrKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3VjY2VzcyA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggc3VjY2VzcyApCisgICAgICAgIHJldHVybiggdG90YWxfZmFpbGVkICk7CisgICAgZWxzZSBpZiggZmlyc3RfZXJyb3IgKQorICAgICAgICByZXR1cm4oIGZpcnN0X2Vycm9yICk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9VTktOT1dOX0ZPUk1BVCApOworI2VuZGlmIC8qIE1CRURUTFNfUEVNX1BBUlNFX0MgKi8KK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKy8qCisgKiBMb2FkIG9uZSBvciBtb3JlIGNlcnRpZmljYXRlcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGNoYWluZWQgbGlzdAorICovCitpbnQgbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCBtYmVkdGxzX3g1MDlfY3J0ICpjaGFpbiwgY29uc3QgY2hhciAqcGF0aCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbjsKKyAgICB1bnNpZ25lZCBjaGFyICpidWY7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX2xvYWRfZmlsZSggcGF0aCwgJmJ1ZiwgJm4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggY2hhaW4sIGJ1ZiwgbiApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBidWYsIG4gKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGJ1ZiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworaW50IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aCggbWJlZHRsc194NTA5X2NydCAqY2hhaW4sIGNvbnN0IGNoYXIgKnBhdGggKQoreworICAgIGludCByZXQgPSAwOworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChFRklYNjQpICYmICFkZWZpbmVkKEVGSTMyKQorICAgIGludCB3X3JldDsKKyAgICBXQ0hBUiBzekRpcltNQVhfUEFUSF07CisgICAgY2hhciBmaWxlbmFtZVtNQVhfUEFUSF07CisgICAgY2hhciAqcDsKKyAgICBzaXplX3QgbGVuID0gc3RybGVuKCBwYXRoICk7CisKKyAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbGVfZGF0YTsKKyAgICBIQU5ETEUgaEZpbmQ7CisKKyAgICBpZiggbGVuID4gTUFYX1BBVEggLSAzICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtZW1zZXQoIHN6RGlyLCAwLCBzaXplb2Yoc3pEaXIpICk7CisgICAgbWVtc2V0KCBmaWxlbmFtZSwgMCwgTUFYX1BBVEggKTsKKyAgICBtZW1jcHkoIGZpbGVuYW1lLCBwYXRoLCBsZW4gKTsKKyAgICBmaWxlbmFtZVtsZW4rK10gPSAnXFwnOworICAgIHAgPSBmaWxlbmFtZSArIGxlbjsKKyAgICBmaWxlbmFtZVtsZW4rK10gPSAnKic7CisKKyAgICB3X3JldCA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoIENQX0FDUCwgMCwgZmlsZW5hbWUsIGxlbiwgc3pEaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfUEFUSCAtIDMgKTsKKyAgICBpZiggd19yZXQgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworCisgICAgaEZpbmQgPSBGaW5kRmlyc3RGaWxlVyggc3pEaXIsICZmaWxlX2RhdGEgKTsKKyAgICBpZiggaEZpbmQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfRklMRV9JT19FUlJPUiApOworCisgICAgbGVuID0gTUFYX1BBVEggLSBsZW47CisgICAgZG8KKyAgICB7CisgICAgICAgIG1lbXNldCggcCwgMCwgbGVuICk7CisKKyAgICAgICAgaWYoIGZpbGVfZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHdfcmV0ID0gV2lkZUNoYXJUb011bHRpQnl0ZSggQ1BfQUNQLCAwLCBmaWxlX2RhdGEuY0ZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdHJsZW5XKCBmaWxlX2RhdGEuY0ZpbGVOYW1lICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgKGludCkgbGVuIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMICk7CisgICAgICAgIGlmKCB3X3JldCA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9GSUxFX0lPX0VSUk9SICk7CisKKyAgICAgICAgd19yZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoIGNoYWluLCBmaWxlbmFtZSApOworICAgICAgICBpZiggd19yZXQgPCAwICkKKyAgICAgICAgICAgIHJldCsrOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgKz0gd19yZXQ7CisgICAgfQorICAgIHdoaWxlKCBGaW5kTmV4dEZpbGVXKCBoRmluZCwgJmZpbGVfZGF0YSApICE9IDAgKTsKKworICAgIGlmKCBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9OT19NT1JFX0ZJTEVTICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfWDUwOV9GSUxFX0lPX0VSUk9SOworCisgICAgRmluZENsb3NlKCBoRmluZCApOworI2Vsc2UgLyogX1dJTjMyICovCisgICAgaW50IHRfcmV0OworICAgIGludCBzbnBfcmV0OworICAgIHN0cnVjdCBzdGF0IHNiOworICAgIHN0cnVjdCBkaXJlbnQgKmVudHJ5OworICAgIGNoYXIgZW50cnlfbmFtZVtNQkVEVExTX1g1MDlfTUFYX0ZJTEVfUEFUSF9MRU5dOworICAgIERJUiAqZGlyID0gb3BlbmRpciggcGF0aCApOworCisgICAgaWYoIGRpciA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0ZJTEVfSU9fRVJST1IgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRCkKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZtYmVkdGxzX3RocmVhZGluZ19yZWFkZGlyX211dGV4ICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGNsb3NlZGlyKCBkaXIgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisjZW5kaWYKKworICAgIHdoaWxlKCAoIGVudHJ5ID0gcmVhZGRpciggZGlyICkgKSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHNucF9yZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBlbnRyeV9uYW1lLCBzaXplb2YgZW50cnlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy8lcyIsIHBhdGgsIGVudHJ5LT5kX25hbWUgKTsKKworICAgICAgICBpZiggc25wX3JldCA8IDAgfHwgKHNpemVfdClzbnBfcmV0ID49IHNpemVvZiBlbnRyeV9uYW1lICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfWDUwOV9CVUZGRVJfVE9PX1NNQUxMOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0YXQoIGVudHJ5X25hbWUsICZzYiApID09IC0xICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfWDUwOV9GSUxFX0lPX0VSUk9SOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisKKyAgICAgICAgaWYoICFTX0lTUkVHKCBzYi5zdF9tb2RlICkgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gSWdub3JlIHBhcnNlIGVycm9ycworICAgICAgICAvLworICAgICAgICB0X3JldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggY2hhaW4sIGVudHJ5X25hbWUgKTsKKyAgICAgICAgaWYoIHRfcmV0IDwgMCApCisgICAgICAgICAgICByZXQrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ICs9IHRfcmV0OworICAgIH0KKworY2xlYW51cDoKKyAgICBjbG9zZWRpciggZGlyICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQpCisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfdW5sb2NrKCAmbWJlZHRsc190aHJlYWRpbmdfcmVhZGRpcl9tdXRleCApICE9IDAgKQorICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1I7CisjZW5kaWYKKworI2VuZGlmIC8qIF9XSU4zMiAqLworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKK3N0YXRpYyBpbnQgeDUwOV9pbmZvX3N1YmplY3RfYWx0X25hbWUoIGNoYXIgKipidWYsIHNpemVfdCAqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9zZXF1ZW5jZSAqc3ViamVjdF9hbHRfbmFtZSApCit7CisgICAgc2l6ZV90IGk7CisgICAgc2l6ZV90IG4gPSAqc2l6ZTsKKyAgICBjaGFyICpwID0gKmJ1ZjsKKyAgICBjb25zdCBtYmVkdGxzX3g1MDlfc2VxdWVuY2UgKmN1ciA9IHN1YmplY3RfYWx0X25hbWU7CisgICAgY29uc3QgY2hhciAqc2VwID0gIiI7CisgICAgc2l6ZV90IHNlcF9sZW4gPSAwOworCisgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCBjdXItPmJ1Zi5sZW4gKyBzZXBfbGVuID49IG4gKQorICAgICAgICB7CisgICAgICAgICAgICAqcCA9ICdcMCc7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQlVGRkVSX1RPT19TTUFMTCApOworICAgICAgICB9CisKKyAgICAgICAgbiAtPSBjdXItPmJ1Zi5sZW4gKyBzZXBfbGVuOworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgc2VwX2xlbjsgaSsrICkKKyAgICAgICAgICAgICpwKysgPSBzZXBbaV07CisgICAgICAgIGZvciggaSA9IDA7IGkgPCBjdXItPmJ1Zi5sZW47IGkrKyApCisgICAgICAgICAgICAqcCsrID0gY3VyLT5idWYucFtpXTsKKworICAgICAgICBzZXAgPSAiLCAiOworICAgICAgICBzZXBfbGVuID0gMjsKKworICAgICAgICBjdXIgPSBjdXItPm5leHQ7CisgICAgfQorCisgICAgKnAgPSAnXDAnOworCisgICAgKnNpemUgPSBuOworICAgICpidWYgPSBwOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNkZWZpbmUgUFJJTlRfSVRFTShpKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiVzIiBpLCBzZXAgKTsgICAgXAorICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNlcCA9ICIsICI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIENFUlRfVFlQRSh0eXBlLG5hbWUpICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYoIG5zX2NlcnRfdHlwZSAmIHR5cGUgKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFBSSU5UX0lURU0oIG5hbWUgKTsKKworc3RhdGljIGludCB4NTA5X2luZm9fY2VydF90eXBlKCBjaGFyICoqYnVmLCBzaXplX3QgKnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbnNfY2VydF90eXBlICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuID0gKnNpemU7CisgICAgY2hhciAqcCA9ICpidWY7CisgICAgY29uc3QgY2hhciAqc2VwID0gIiI7CisKKyAgICBDRVJUX1RZUEUoIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX0NMSUVOVCwgICAgICAgICAiU1NMIENsaWVudCIgKTsKKyAgICBDRVJUX1RZUEUoIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX1NFUlZFUiwgICAgICAgICAiU1NMIFNlcnZlciIgKTsKKyAgICBDRVJUX1RZUEUoIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfRU1BSUwsICAgICAgICAgICAgICAiRW1haWwiICk7CisgICAgQ0VSVF9UWVBFKCBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX09CSkVDVF9TSUdOSU5HLCAgICAgIk9iamVjdCBTaWduaW5nIiApOworICAgIENFUlRfVFlQRSggTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9SRVNFUlZFRCwgICAgICAgICAgICJSZXNlcnZlZCIgKTsKKyAgICBDRVJUX1RZUEUoIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX0NBLCAgICAgICAgICAgICAiU1NMIENBIiApOworICAgIENFUlRfVFlQRSggTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTF9DQSwgICAgICAgICAgICJFbWFpbCBDQSIgKTsKKyAgICBDRVJUX1RZUEUoIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfT0JKRUNUX1NJR05JTkdfQ0EsICAiT2JqZWN0IFNpZ25pbmcgQ0EiICk7CisKKyAgICAqc2l6ZSA9IG47CisgICAgKmJ1ZiA9IHA7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2RlZmluZSBLRVlfVVNBR0UoY29kZSxuYW1lKSAgICBcCisgICAgaWYoIGtleV91c2FnZSAmIGNvZGUgKSAgICAgIFwKKyAgICAgICAgUFJJTlRfSVRFTSggbmFtZSApOworCitzdGF0aWMgaW50IHg1MDlfaW5mb19rZXlfdXNhZ2UoIGNoYXIgKipidWYsIHNpemVfdCAqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV91c2FnZSApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbiA9ICpzaXplOworICAgIGNoYXIgKnAgPSAqYnVmOworICAgIGNvbnN0IGNoYXIgKnNlcCA9ICIiOworCisgICAgS0VZX1VTQUdFKCBNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkUsICAgICJEaWdpdGFsIFNpZ25hdHVyZSIgKTsKKyAgICBLRVlfVVNBR0UoIE1CRURUTFNfWDUwOV9LVV9OT05fUkVQVURJQVRJT04sICAgICAgIk5vbiBSZXB1ZGlhdGlvbiIgKTsKKyAgICBLRVlfVVNBR0UoIE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5ULCAgICAgIktleSBFbmNpcGhlcm1lbnQiICk7CisgICAgS0VZX1VTQUdFKCBNQkVEVExTX1g1MDlfS1VfREFUQV9FTkNJUEhFUk1FTlQsICAgICJEYXRhIEVuY2lwaGVybWVudCIgKTsKKyAgICBLRVlfVVNBR0UoIE1CRURUTFNfWDUwOV9LVV9LRVlfQUdSRUVNRU5ULCAgICAgICAgIktleSBBZ3JlZW1lbnQiICk7CisgICAgS0VZX1VTQUdFKCBNQkVEVExTX1g1MDlfS1VfS0VZX0NFUlRfU0lHTiwgICAgICAgICJLZXkgQ2VydCBTaWduIiApOworICAgIEtFWV9VU0FHRSggTUJFRFRMU19YNTA5X0tVX0NSTF9TSUdOLCAgICAgICAgICAgICAiQ1JMIFNpZ24iICk7CisgICAgS0VZX1VTQUdFKCBNQkVEVExTX1g1MDlfS1VfRU5DSVBIRVJfT05MWSwgICAgICAgICJFbmNpcGhlciBPbmx5IiApOworICAgIEtFWV9VU0FHRSggTUJFRFRMU19YNTA5X0tVX0RFQ0lQSEVSX09OTFksICAgICAgICAiRGVjaXBoZXIgT25seSIgKTsKKworICAgICpzaXplID0gbjsKKyAgICAqYnVmID0gcDsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHg1MDlfaW5mb19leHRfa2V5X3VzYWdlKCBjaGFyICoqYnVmLCBzaXplX3QgKnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfc2VxdWVuY2UgKmV4dGVuZGVkX2tleV91c2FnZSApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBjaGFyICpkZXNjOworICAgIHNpemVfdCBuID0gKnNpemU7CisgICAgY2hhciAqcCA9ICpidWY7CisgICAgY29uc3QgbWJlZHRsc194NTA5X3NlcXVlbmNlICpjdXIgPSBleHRlbmRlZF9rZXlfdXNhZ2U7CisgICAgY29uc3QgY2hhciAqc2VwID0gIiI7CisKKyAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIG1iZWR0bHNfb2lkX2dldF9leHRlbmRlZF9rZXlfdXNhZ2UoICZjdXItPmJ1ZiwgJmRlc2MgKSAhPSAwICkKKyAgICAgICAgICAgIGRlc2MgPSAiPz8/IjsKKworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiJXMlcyIsIHNlcCwgZGVzYyApOworICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgICAgICBzZXAgPSAiLCAiOworCisgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKKyAgICAqc2l6ZSA9IG47CisgICAgKmJ1ZiA9IHA7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFJldHVybiBhbiBpbmZvcm1hdGlvbmFsIHN0cmluZyBhYm91dCB0aGUgY2VydGlmaWNhdGUuCisgKi8KKyNkZWZpbmUgQkVGT1JFX0NPTE9OICAgIDE4CisjZGVmaW5lIEJDICAgICAgICAgICAgICAiMTgiCitpbnQgbWJlZHRsc194NTA5X2NydF9pbmZvKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X2NydCAqY3J0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuOworICAgIGNoYXIgKnA7CisgICAgY2hhciBrZXlfc2l6ZV9zdHJbQkVGT1JFX0NPTE9OXTsKKworICAgIHAgPSBidWY7CisgICAgbiA9IHNpemU7CisKKyAgICBpZiggTlVMTCA9PSBjcnQgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuQ2VydGlmaWNhdGUgaXMgdW5pbml0aWFsaXNlZCFcbiIgKTsKKyAgICAgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICAgICAgcmV0dXJuKCAoaW50KSAoIHNpemUgLSBuICkgKTsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiJXNjZXJ0LiB2ZXJzaW9uICAgICA6ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgY3J0LT52ZXJzaW9uICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiVzc2VyaWFsIG51bWJlciAgICAgOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X3NlcmlhbF9nZXRzKCBwLCBuLCAmY3J0LT5zZXJpYWwgKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiVzaXNzdWVyIG5hbWUgICAgICAgOiAiLCBwcmVmaXggKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfZG5fZ2V0cyggcCwgbiwgJmNydC0+aXNzdWVyICApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNzdWJqZWN0IG5hbWUgICAgICA6ICIsIHByZWZpeCApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9kbl9nZXRzKCBwLCBuLCAmY3J0LT5zdWJqZWN0ICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc2lzc3VlZCAgb24gICAgICAgIDogIiBcCisgICAgICAgICAgICAgICAgICAgIiUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkIiwgcHJlZml4LAorICAgICAgICAgICAgICAgICAgIGNydC0+dmFsaWRfZnJvbS55ZWFyLCBjcnQtPnZhbGlkX2Zyb20ubW9uLAorICAgICAgICAgICAgICAgICAgIGNydC0+dmFsaWRfZnJvbS5kYXksICBjcnQtPnZhbGlkX2Zyb20uaG91ciwKKyAgICAgICAgICAgICAgICAgICBjcnQtPnZhbGlkX2Zyb20ubWluLCAgY3J0LT52YWxpZF9mcm9tLnNlYyApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNleHBpcmVzIG9uICAgICAgICA6ICIgXAorICAgICAgICAgICAgICAgICAgICIlMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZCIsIHByZWZpeCwKKyAgICAgICAgICAgICAgICAgICBjcnQtPnZhbGlkX3RvLnllYXIsIGNydC0+dmFsaWRfdG8ubW9uLAorICAgICAgICAgICAgICAgICAgIGNydC0+dmFsaWRfdG8uZGF5LCAgY3J0LT52YWxpZF90by5ob3VyLAorICAgICAgICAgICAgICAgICAgIGNydC0+dmFsaWRfdG8ubWluLCAgY3J0LT52YWxpZF90by5zZWMgKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiVzc2lnbmVkIHVzaW5nICAgICAgOiAiLCBwcmVmaXggKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9zaWdfYWxnX2dldHMoIHAsIG4sICZjcnQtPnNpZ19vaWQsIGNydC0+c2lnX3BrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnQtPnNpZ19tZCwgY3J0LT5zaWdfb3B0cyApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgLyogS2V5IHNpemUgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfa2V5X3NpemVfaGVscGVyKCBrZXlfc2l6ZV9zdHIsIEJFRk9SRV9DT0xPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19nZXRfbmFtZSggJmNydC0+cGsgKSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiVzJS0iIEJDICJzOiAlZCBiaXRzIiwgcHJlZml4LCBrZXlfc2l6ZV9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIG1iZWR0bHNfcGtfZ2V0X2JpdGxlbiggJmNydC0+cGsgKSApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgLyoKKyAgICAgKiBPcHRpb25hbCBleHRlbnNpb25zCisgICAgICovCisKKyAgICBpZiggY3J0LT5leHRfdHlwZXMgJiBNQkVEVExTX1g1MDlfRVhUX0JBU0lDX0NPTlNUUkFJTlRTICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiVzYmFzaWMgY29uc3RyYWludHMgOiBDQT0lcyIsIHByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNydC0+Y2FfaXN0cnVlID8gInRydWUiIDogImZhbHNlIiApOworICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgICAgICBpZiggY3J0LT5tYXhfcGF0aGxlbiA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiLCBtYXhfcGF0aGxlbj0lZCIsIGNydC0+bWF4X3BhdGhsZW4gLSAxICk7CisgICAgICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBjcnQtPmV4dF90eXBlcyAmIE1CRURUTFNfWDUwOV9FWFRfU1VCSkVDVF9BTFRfTkFNRSApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc3N1YmplY3QgYWx0IG5hbWUgIDogIiwgcHJlZml4ICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgICAgIGlmKCAoIHJldCA9IHg1MDlfaW5mb19zdWJqZWN0X2FsdF9uYW1lKCAmcCwgJm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcnQtPnN1YmplY3RfYWx0X25hbWVzICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIGNydC0+ZXh0X3R5cGVzICYgTUJFRFRMU19YNTA5X0VYVF9OU19DRVJUX1RZUEUgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNjZXJ0LiB0eXBlICAgICAgICA6ICIsIHByZWZpeCApOworICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgICAgICBpZiggKCByZXQgPSB4NTA5X2luZm9fY2VydF90eXBlKCAmcCwgJm4sIGNydC0+bnNfY2VydF90eXBlICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIGNydC0+ZXh0X3R5cGVzICYgTUJFRFRMU19YNTA5X0VYVF9LRVlfVVNBR0UgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNrZXkgdXNhZ2UgICAgICAgICA6ICIsIHByZWZpeCApOworICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgICAgICBpZiggKCByZXQgPSB4NTA5X2luZm9fa2V5X3VzYWdlKCAmcCwgJm4sIGNydC0+a2V5X3VzYWdlICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIGNydC0+ZXh0X3R5cGVzICYgTUJFRFRMU19YNTA5X0VYVF9FWFRFTkRFRF9LRVlfVVNBR0UgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNleHQga2V5IHVzYWdlICAgICA6ICIsIHByZWZpeCApOworICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgICAgICBpZiggKCByZXQgPSB4NTA5X2luZm9fZXh0X2tleV91c2FnZSggJnAsICZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNydC0+ZXh0X2tleV91c2FnZSApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiIgKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldHVybiggKGludCkgKCBzaXplIC0gbiApICk7Cit9CisKK3N0cnVjdCB4NTA5X2NydF92ZXJpZnlfc3RyaW5nIHsKKyAgICBpbnQgY29kZTsKKyAgICBjb25zdCBjaGFyICpzdHJpbmc7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHg1MDlfY3J0X3ZlcmlmeV9zdHJpbmcgeDUwOV9jcnRfdmVyaWZ5X3N0cmluZ3NbXSA9IHsKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDRVJUX0VYUElSRUQsICAgICAgICJUaGUgY2VydGlmaWNhdGUgdmFsaWRpdHkgaGFzIGV4cGlyZWQiIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VELCAgICAgICAiVGhlIGNlcnRpZmljYXRlIGhhcyBiZWVuIHJldm9rZWQgKGlzIG9uIGEgQ1JMKSIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDRVJUX0NOX01JU01BVENILCAgICJUaGUgY2VydGlmaWNhdGUgQ29tbW9uIE5hbWUgKENOKSBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBleHBlY3RlZCBDTiIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVELCAgICJUaGUgY2VydGlmaWNhdGUgaXMgbm90IGNvcnJlY3RseSBzaWduZWQgYnkgdGhlIHRydXN0ZWQgQ0EiIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ1JMX05PVF9UUlVTVEVELCAgICAiVGhlIENSTCBpcyBub3QgY29ycmVjdGx5IHNpZ25lZCBieSB0aGUgdHJ1c3RlZCBDQSIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDUkxfRVhQSVJFRCwgICAgICAgICJUaGUgQ1JMIGlzIGV4cGlyZWQiIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ0VSVF9NSVNTSU5HLCAgICAgICAiQ2VydGlmaWNhdGUgd2FzIG1pc3NpbmciIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ0VSVF9TS0lQX1ZFUklGWSwgICAiQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHdhcyBza2lwcGVkIiB9LAorICAgIHsgTUJFRFRMU19YNTA5X0JBRENFUlRfT1RIRVIsICAgICAgICAgIk90aGVyIHJlYXNvbiAoY2FuIGJlIHVzZWQgYnkgdmVyaWZ5IGNhbGxiYWNrKSIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDRVJUX0ZVVFVSRSwgICAgICAgICJUaGUgY2VydGlmaWNhdGUgdmFsaWRpdHkgc3RhcnRzIGluIHRoZSBmdXR1cmUiIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ1JMX0ZVVFVSRSwgICAgICAgICAiVGhlIENSTCBpcyBmcm9tIHRoZSBmdXR1cmUiIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ0VSVF9LRVlfVVNBR0UsICAgICAiVXNhZ2UgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVVzYWdlIGV4dGVuc2lvbiIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDRVJUX0VYVF9LRVlfVVNBR0UsICJVc2FnZSBkb2VzIG5vdCBtYXRjaCB0aGUgZXh0ZW5kZWRLZXlVc2FnZSBleHRlbnNpb24iIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ0VSVF9OU19DRVJUX1RZUEUsICAiVXNhZ2UgZG9lcyBub3QgbWF0Y2ggdGhlIG5zQ2VydFR5cGUgZXh0ZW5zaW9uIiB9LAorICAgIHsgTUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX01ELCAgICAgICAgIlRoZSBjZXJ0aWZpY2F0ZSBpcyBzaWduZWQgd2l0aCBhbiB1bmFjY2VwdGFibGUgaGFzaC4iIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ0VSVF9CQURfUEssICAgICAgICAiVGhlIGNlcnRpZmljYXRlIGlzIHNpZ25lZCB3aXRoIGFuIHVuYWNjZXB0YWJsZSBQSyBhbGcgKGVnIFJTQSB2cyBFQ0RTQSkuIiB9LAorICAgIHsgTUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX0tFWSwgICAgICAgIlRoZSBjZXJ0aWZpY2F0ZSBpcyBzaWduZWQgd2l0aCBhbiB1bmFjY2VwdGFibGUga2V5IChlZyBiYWQgY3VydmUsIFJTQSB0b28gc2hvcnQpLiIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDUkxfQkFEX01ELCAgICAgICAgICJUaGUgQ1JMIGlzIHNpZ25lZCB3aXRoIGFuIHVuYWNjZXB0YWJsZSBoYXNoLiIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDUkxfQkFEX1BLLCAgICAgICAgICJUaGUgQ1JMIGlzIHNpZ25lZCB3aXRoIGFuIHVuYWNjZXB0YWJsZSBQSyBhbGcgKGVnIFJTQSB2cyBFQ0RTQSkuIiB9LAorICAgIHsgTUJFRFRMU19YNTA5X0JBRENSTF9CQURfS0VZLCAgICAgICAgIlRoZSBDUkwgaXMgc2lnbmVkIHdpdGggYW4gdW5hY2NlcHRhYmxlIGtleSAoZWcgYmFkIGN1cnZlLCBSU0EgdG9vIHNob3J0KS4iIH0sCisgICAgeyAwLCBOVUxMIH0KK307CisKK2ludCBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9pbmZvKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IHN0cnVjdCB4NTA5X2NydF92ZXJpZnlfc3RyaW5nICpjdXI7CisgICAgY2hhciAqcCA9IGJ1ZjsKKyAgICBzaXplX3QgbiA9IHNpemU7CisKKyAgICBmb3IoIGN1ciA9IHg1MDlfY3J0X3ZlcmlmeV9zdHJpbmdzOyBjdXItPnN0cmluZyAhPSBOVUxMIDsgY3VyKysgKQorICAgIHsKKyAgICAgICAgaWYoICggZmxhZ3MgJiBjdXItPmNvZGUgKSA9PSAwICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIlcyVzXG4iLCBwcmVmaXgsIGN1ci0+c3RyaW5nICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworICAgICAgICBmbGFncyBePSBjdXItPmNvZGU7CisgICAgfQorCisgICAgaWYoIGZsYWdzICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiVzVW5rbm93biByZWFzb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIih0aGlzIHNob3VsZCBub3QgaGFwcGVuKVxuIiwgcHJlZml4ICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworICAgIH0KKworICAgIHJldHVybiggKGludCkgKCBzaXplIC0gbiApICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UpCitpbnQgbWJlZHRsc194NTA5X2NydF9jaGVja19rZXlfdXNhZ2UoIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKmNydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVzYWdlICkKK3sKKyAgICB1bnNpZ25lZCBpbnQgdXNhZ2VfbXVzdCwgdXNhZ2VfbWF5OworICAgIHVuc2lnbmVkIGludCBtYXlfbWFzayA9IE1CRURUTFNfWDUwOV9LVV9FTkNJUEhFUl9PTkxZCisgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTUJFRFRMU19YNTA5X0tVX0RFQ0lQSEVSX09OTFk7CisKKyAgICBpZiggKCBjcnQtPmV4dF90eXBlcyAmIE1CRURUTFNfWDUwOV9FWFRfS0VZX1VTQUdFICkgPT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgdXNhZ2VfbXVzdCA9IHVzYWdlICYgfm1heV9tYXNrOworCisgICAgaWYoICggKCBjcnQtPmtleV91c2FnZSAmIH5tYXlfbWFzayApICYgdXNhZ2VfbXVzdCApICE9IHVzYWdlX211c3QgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHVzYWdlX21heSA9IHVzYWdlICYgbWF5X21hc2s7CisKKyAgICBpZiggKCAoIGNydC0+a2V5X3VzYWdlICYgbWF5X21hc2sgKSB8IHVzYWdlX21heSApICE9IHVzYWdlX21heSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRSkKK2ludCBtYmVkdGxzX3g1MDlfY3J0X2NoZWNrX2V4dGVuZGVkX2tleV91c2FnZSggY29uc3QgbWJlZHRsc194NTA5X2NydCAqY3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNhZ2Vfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzYWdlX2xlbiApCit7CisgICAgY29uc3QgbWJlZHRsc194NTA5X3NlcXVlbmNlICpjdXI7CisKKyAgICAvKiBFeHRlbnNpb24gaXMgbm90IG1hbmRhdG9yeSwgYWJzZW50IG1lYW5zIG5vIHJlc3RyaWN0aW9uICovCisgICAgaWYoICggY3J0LT5leHRfdHlwZXMgJiBNQkVEVExTX1g1MDlfRVhUX0VYVEVOREVEX0tFWV9VU0FHRSApID09IDAgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIC8qCisgICAgICogTG9vayBmb3IgdGhlIHJlcXVlc3RlZCB1c2FnZSAob3Igd2lsZGNhcmQgQU5ZKSBpbiBvdXIgbGlzdAorICAgICAqLworICAgIGZvciggY3VyID0gJmNydC0+ZXh0X2tleV91c2FnZTsgY3VyICE9IE5VTEw7IGN1ciA9IGN1ci0+bmV4dCApCisgICAgeworICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfYnVmICpjdXJfb2lkID0gJmN1ci0+YnVmOworCisgICAgICAgIGlmKCBjdXJfb2lkLT5sZW4gPT0gdXNhZ2VfbGVuICYmCisgICAgICAgICAgICBtZW1jbXAoIGN1cl9vaWQtPnAsIHVzYWdlX29pZCwgdXNhZ2VfbGVuICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIE1CRURUTFNfT0lEX0NNUCggTUJFRFRMU19PSURfQU5ZX0VYVEVOREVEX0tFWV9VU0FHRSwgY3VyX29pZCApID09IDAgKQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MpCisvKgorICogUmV0dXJuIDEgaWYgdGhlIGNlcnRpZmljYXRlIGlzIHJldm9rZWQsIG9yIDAgb3RoZXJ3aXNlLgorICovCitpbnQgbWJlZHRsc194NTA5X2NydF9pc19yZXZva2VkKCBjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQsIGNvbnN0IG1iZWR0bHNfeDUwOV9jcmwgKmNybCApCit7CisgICAgY29uc3QgbWJlZHRsc194NTA5X2NybF9lbnRyeSAqY3VyID0gJmNybC0+ZW50cnk7CisKKyAgICB3aGlsZSggY3VyICE9IE5VTEwgJiYgY3VyLT5zZXJpYWwubGVuICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIGNydC0+c2VyaWFsLmxlbiA9PSBjdXItPnNlcmlhbC5sZW4gJiYKKyAgICAgICAgICAgIG1lbWNtcCggY3J0LT5zZXJpYWwucCwgY3VyLT5zZXJpYWwucCwgY3J0LT5zZXJpYWwubGVuICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0KCAmY3VyLT5yZXZvY2F0aW9uX2RhdGUgKSApCisgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBDaGVjayB0aGF0IHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSBpcyBub3QgcmV2b2tlZCBhY2NvcmRpbmcgdG8gdGhlIENSTC4KKyAqIFNraXAgdmFsaWRhdGlvbiBpcyBubyBDUkwgZm9yIHRoZSBnaXZlbiBDQSBpcyBwcmVzZW50LgorICovCitzdGF0aWMgaW50IHg1MDlfY3J0X3ZlcmlmeWNybCggbWJlZHRsc194NTA5X2NydCAqY3J0LCBtYmVkdGxzX3g1MDlfY3J0ICpjYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3JsICpjcmxfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgKnByb2ZpbGUgKQoreworICAgIGludCBmbGFncyA9IDA7CisgICAgdW5zaWduZWQgY2hhciBoYXNoW01CRURUTFNfTURfTUFYX1NJWkVdOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworCisgICAgaWYoIGNhID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIGZsYWdzICk7CisKKyAgICB3aGlsZSggY3JsX2xpc3QgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggY3JsX2xpc3QtPnZlcnNpb24gPT0gMCB8fAorICAgICAgICAgICAgY3JsX2xpc3QtPmlzc3Vlcl9yYXcubGVuICE9IGNhLT5zdWJqZWN0X3Jhdy5sZW4gfHwKKyAgICAgICAgICAgIG1lbWNtcCggY3JsX2xpc3QtPmlzc3Vlcl9yYXcucCwgY2EtPnN1YmplY3RfcmF3LnAsCisgICAgICAgICAgICAgICAgICAgIGNybF9saXN0LT5pc3N1ZXJfcmF3LmxlbiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBjcmxfbGlzdCA9IGNybF9saXN0LT5uZXh0OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBpZiB0aGUgQ0EgaXMgY29uZmlndXJlZCB0byBzaWduIENSTHMKKyAgICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFKQorICAgICAgICBpZiggbWJlZHRsc194NTA5X2NydF9jaGVja19rZXlfdXNhZ2UoIGNhLCBNQkVEVExTX1g1MDlfS1VfQ1JMX1NJR04gKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENSTF9OT1RfVFJVU1RFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBpZiBDUkwgaXMgY29ycmVjdGx5IHNpZ25lZCBieSB0aGUgdHJ1c3RlZCBDQQorICAgICAgICAgKi8KKyAgICAgICAgaWYoIHg1MDlfcHJvZmlsZV9jaGVja19tZF9hbGcoIHByb2ZpbGUsIGNybF9saXN0LT5zaWdfbWQgKSAhPSAwICkKKyAgICAgICAgICAgIGZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDUkxfQkFEX01EOworCisgICAgICAgIGlmKCB4NTA5X3Byb2ZpbGVfY2hlY2tfcGtfYWxnKCBwcm9maWxlLCBjcmxfbGlzdC0+c2lnX3BrICkgIT0gMCApCisgICAgICAgICAgICBmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ1JMX0JBRF9QSzsKKworICAgICAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggY3JsX2xpc3QtPnNpZ19tZCApOworICAgICAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIENhbm5vdCBjaGVjayAndW5rbm93bicgaGFzaAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ1JMX05PVF9UUlVTVEVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX21kKCBtZF9pbmZvLCBjcmxfbGlzdC0+dGJzLnAsIGNybF9saXN0LT50YnMubGVuLCBoYXNoICk7CisKKyAgICAgICAgaWYoIHg1MDlfcHJvZmlsZV9jaGVja19rZXkoIHByb2ZpbGUsIGNybF9saXN0LT5zaWdfcGssICZjYS0+cGsgKSAhPSAwICkKKyAgICAgICAgICAgIGZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0JBRF9LRVk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfdmVyaWZ5X2V4dCggY3JsX2xpc3QtPnNpZ19waywgY3JsX2xpc3QtPnNpZ19vcHRzLCAmY2EtPnBrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JsX2xpc3QtPnNpZ19tZCwgaGFzaCwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JsX2xpc3QtPnNpZy5wLCBjcmxfbGlzdC0+c2lnLmxlbiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ1JMX05PVF9UUlVTVEVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBmb3IgdmFsaWRpdHkgb2YgQ1JMIChEbyBub3QgZHJvcCBvdXQpCisgICAgICAgICAqLworICAgICAgICBpZiggbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdCggJmNybF9saXN0LT5uZXh0X3VwZGF0ZSApICkKKyAgICAgICAgICAgIGZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDUkxfRVhQSVJFRDsKKworICAgICAgICBpZiggbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlKCAmY3JsX2xpc3QtPnRoaXNfdXBkYXRlICkgKQorICAgICAgICAgICAgZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENSTF9GVVRVUkU7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgaWYgY2VydGlmaWNhdGUgaXMgcmV2b2tlZAorICAgICAgICAgKi8KKyAgICAgICAgaWYoIG1iZWR0bHNfeDUwOV9jcnRfaXNfcmV2b2tlZCggY3J0LCBjcmxfbGlzdCApICkKKyAgICAgICAgeworICAgICAgICAgICAgZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY3JsX2xpc3QgPSBjcmxfbGlzdC0+bmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4oIGZsYWdzICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DICovCisKKy8qCisgKiBMaWtlIG1lbWNtcCwgYnV0IGNhc2UtaW5zZW5zaXRpdmUgYW5kIGFsd2F5cyByZXR1cm5zIC0xIGlmIGRpZmZlcmVudAorICovCitzdGF0aWMgaW50IHg1MDlfbWVtY2FzZWNtcCggY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyLCBzaXplX3QgbGVuICkKK3sKKyAgICBzaXplX3QgaTsKKyAgICB1bnNpZ25lZCBjaGFyIGRpZmY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbjEgPSBzMSwgKm4yID0gczI7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgbGVuOyBpKysgKQorICAgIHsKKyAgICAgICAgZGlmZiA9IG4xW2ldIF4gbjJbaV07CisKKyAgICAgICAgaWYoIGRpZmYgPT0gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiggZGlmZiA9PSAzMiAmJgorICAgICAgICAgICAgKCAoIG4xW2ldID49ICdhJyAmJiBuMVtpXSA8PSAneicgKSB8fAorICAgICAgICAgICAgICAoIG4xW2ldID49ICdBJyAmJiBuMVtpXSA8PSAnWicgKSApICkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBSZXR1cm4gMCBpZiBuYW1lIG1hdGNoZXMgd2lsZGNhcmQsIC0xIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IHg1MDlfY2hlY2tfd2lsZGNhcmQoIGNvbnN0IGNoYXIgKmNuLCBtYmVkdGxzX3g1MDlfYnVmICpuYW1lICkKK3sKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgY25faWR4ID0gMCwgY25fbGVuID0gc3RybGVuKCBjbiApOworCisgICAgaWYoIG5hbWUtPmxlbiA8IDMgfHwgbmFtZS0+cFswXSAhPSAnKicgfHwgbmFtZS0+cFsxXSAhPSAnLicgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBjbl9sZW47ICsraSApCisgICAgeworICAgICAgICBpZiggY25baV0gPT0gJy4nICkKKyAgICAgICAgeworICAgICAgICAgICAgY25faWR4ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIGNuX2lkeCA9PSAwICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoIGNuX2xlbiAtIGNuX2lkeCA9PSBuYW1lLT5sZW4gLSAxICYmCisgICAgICAgIHg1MDlfbWVtY2FzZWNtcCggbmFtZS0+cCArIDEsIGNuICsgY25faWR4LCBuYW1lLT5sZW4gLSAxICkgPT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIC0xICk7Cit9CisKKy8qCisgKiBDb21wYXJlIHR3byBYLjUwOSBzdHJpbmdzLCBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgYWxsb3dpbmcgZm9yIHNvbWUgZW5jb2RpbmcKKyAqIHZhcmlhdGlvbnMgKGJ1dCBub3QgYWxsKS4KKyAqCisgKiBSZXR1cm4gMCBpZiBlcXVhbCwgLTEgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHg1MDlfc3RyaW5nX2NtcCggY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqYSwgY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqYiApCit7CisgICAgaWYoIGEtPnRhZyA9PSBiLT50YWcgJiYKKyAgICAgICAgYS0+bGVuID09IGItPmxlbiAmJgorICAgICAgICBtZW1jbXAoIGEtPnAsIGItPnAsIGItPmxlbiApID09IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgaWYoICggYS0+dGFnID09IE1CRURUTFNfQVNOMV9VVEY4X1NUUklORyB8fCBhLT50YWcgPT0gTUJFRFRMU19BU04xX1BSSU5UQUJMRV9TVFJJTkcgKSAmJgorICAgICAgICAoIGItPnRhZyA9PSBNQkVEVExTX0FTTjFfVVRGOF9TVFJJTkcgfHwgYi0+dGFnID09IE1CRURUTFNfQVNOMV9QUklOVEFCTEVfU1RSSU5HICkgJiYKKyAgICAgICAgYS0+bGVuID09IGItPmxlbiAmJgorICAgICAgICB4NTA5X21lbWNhc2VjbXAoIGEtPnAsIGItPnAsIGItPmxlbiApID09IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgcmV0dXJuKCAtMSApOworfQorCisvKgorICogQ29tcGFyZSB0d28gWC41MDkgTmFtZXMgKGFrYSByZG5TZXF1ZW5jZSkuCisgKgorICogU2VlIFJGQyA1MjgwIHNlY3Rpb24gNy4xLCB0aG91Z2ggd2UgZG9uJ3QgaW1wbGVtZW50IHRoZSB3aG9sZSBhbGdvcml0aG06CisgKiB3ZSBzb21ldGltZXMgcmV0dXJuIHVuZXF1YWwgd2hlbiB0aGUgZnVsbCBhbGdvcml0aG0gd291bGQgcmV0dXJuIGVxdWFsLAorICogYnV0IG5ldmVyIHRoZSBvdGhlciB3YXkuIChJbiBwYXJ0aWN1bGFyLCB3ZSBkb24ndCBkbyBVbmljb2RlIG5vcm1hbGlzYXRpb24KKyAqIG9yIHNwYWNlIGZvbGRpbmcuKQorICoKKyAqIFJldHVybiAwIGlmIGVxdWFsLCAtMSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9uYW1lX2NtcCggY29uc3QgbWJlZHRsc194NTA5X25hbWUgKmEsIGNvbnN0IG1iZWR0bHNfeDUwOV9uYW1lICpiICkKK3sKKyAgICAvKiBBdm9pZCByZWN1cnNpb24sIGl0IG1pZ2h0IG5vdCBiZSBvcHRpbWlzZWQgYnkgdGhlIGNvbXBpbGVyICovCisgICAgd2hpbGUoIGEgIT0gTlVMTCB8fCBiICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIGEgPT0gTlVMTCB8fCBiID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgICAgIC8qIHR5cGUgKi8KKyAgICAgICAgaWYoIGEtPm9pZC50YWcgIT0gYi0+b2lkLnRhZyB8fAorICAgICAgICAgICAgYS0+b2lkLmxlbiAhPSBiLT5vaWQubGVuIHx8CisgICAgICAgICAgICBtZW1jbXAoIGEtPm9pZC5wLCBiLT5vaWQucCwgYi0+b2lkLmxlbiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIC0xICk7CisgICAgICAgIH0KKworICAgICAgICAvKiB2YWx1ZSAqLworICAgICAgICBpZiggeDUwOV9zdHJpbmdfY21wKCAmYS0+dmFsLCAmYi0+dmFsICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICAgICAgLyogc3RydWN0dXJlIG9mIHRoZSBsaXN0IG9mIHNldHMgKi8KKyAgICAgICAgaWYoIGEtPm5leHRfbWVyZ2VkICE9IGItPm5leHRfbWVyZ2VkICkKKyAgICAgICAgICAgIHJldHVybiggLTEgKTsKKworICAgICAgICBhID0gYS0+bmV4dDsKKyAgICAgICAgYiA9IGItPm5leHQ7CisgICAgfQorCisgICAgLyogYSA9PSBOVUxMID09IGIgKi8KKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENoZWNrIGlmICdwYXJlbnQnIGlzIGEgc3VpdGFibGUgcGFyZW50IChzaWduaW5nIENBKSBmb3IgJ2NoaWxkJy4KKyAqIFJldHVybiAwIGlmIHllcywgLTEgaWYgbm90LgorICoKKyAqIHRvcCBtZWFucyBwYXJlbnQgaXMgYSBsb2NhbGx5LXRydXN0ZWQgY2VydGlmaWNhdGUKKyAqIGJvdHRvbSBtZWFucyBjaGlsZCBpcyB0aGUgZW5kIGVudGl0eSBjZXJ0CisgKi8KK3N0YXRpYyBpbnQgeDUwOV9jcnRfY2hlY2tfcGFyZW50KCBjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICpjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICpwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvcCwgaW50IGJvdHRvbSApCit7CisgICAgaW50IG5lZWRfY2FfYml0OworCisgICAgLyogUGFyZW50IG11c3QgYmUgdGhlIGlzc3VlciAqLworICAgIGlmKCB4NTA5X25hbWVfY21wKCAmY2hpbGQtPmlzc3VlciwgJnBhcmVudC0+c3ViamVjdCApICE9IDAgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICAvKiBQYXJlbnQgbXVzdCBoYXZlIHRoZSBiYXNpY0NvbnN0cmFpbnRzIENBIGJpdCBzZXQgYXMgYSBnZW5lcmFsIHJ1bGUgKi8KKyAgICBuZWVkX2NhX2JpdCA9IDE7CisKKyAgICAvKiBFeGNlcHRpb246IHYxL3YyIGNlcnRpZmljYXRlcyB0aGF0IGFyZSBsb2NhbGx5IHRydXN0ZWQuICovCisgICAgaWYoIHRvcCAmJiBwYXJlbnQtPnZlcnNpb24gPCAzICkKKyAgICAgICAgbmVlZF9jYV9iaXQgPSAwOworCisgICAgLyogRXhjZXB0aW9uOiBzZWxmLXNpZ25lZCBlbmQtZW50aXR5IGNlcnRzIHRoYXQgYXJlIGxvY2FsbHkgdHJ1c3RlZC4gKi8KKyAgICBpZiggdG9wICYmIGJvdHRvbSAmJgorICAgICAgICBjaGlsZC0+cmF3LmxlbiA9PSBwYXJlbnQtPnJhdy5sZW4gJiYKKyAgICAgICAgbWVtY21wKCBjaGlsZC0+cmF3LnAsIHBhcmVudC0+cmF3LnAsIGNoaWxkLT5yYXcubGVuICkgPT0gMCApCisgICAgeworICAgICAgICBuZWVkX2NhX2JpdCA9IDA7CisgICAgfQorCisgICAgaWYoIG5lZWRfY2FfYml0ICYmICEgcGFyZW50LT5jYV9pc3RydWUgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UpCisgICAgaWYoIG5lZWRfY2FfYml0ICYmCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfY2hlY2tfa2V5X3VzYWdlKCBwYXJlbnQsIE1CRURUTFNfWDUwOV9LVV9LRVlfQ0VSVF9TSUdOICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCB4NTA5X2NydF92ZXJpZnlfdG9wKAorICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNoaWxkLCBtYmVkdGxzX3g1MDlfY3J0ICp0cnVzdF9jYSwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3JsICpjYV9jcmwsCisgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlICpwcm9maWxlLAorICAgICAgICAgICAgICAgIGludCBwYXRoX2NudCwgaW50IHNlbGZfY250LCB1aW50MzJfdCAqZmxhZ3MsCisgICAgICAgICAgICAgICAgaW50ICgqZl92cmZ5KSh2b2lkICosIG1iZWR0bHNfeDUwOV9jcnQgKiwgaW50LCB1aW50MzJfdCAqKSwKKyAgICAgICAgICAgICAgICB2b2lkICpwX3ZyZnkgKQoreworICAgIGludCByZXQ7CisgICAgdWludDMyX3QgY2FfZmxhZ3MgPSAwOworICAgIGludCBjaGVja19wYXRoX2NudDsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisKKyAgICBpZiggbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdCggJmNoaWxkLT52YWxpZF90byApICkKKyAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0VYUElSRUQ7CisKKyAgICBpZiggbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlKCAmY2hpbGQtPnZhbGlkX2Zyb20gKSApCisgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9GVVRVUkU7CisKKyAgICBpZiggeDUwOV9wcm9maWxlX2NoZWNrX21kX2FsZyggcHJvZmlsZSwgY2hpbGQtPnNpZ19tZCApICE9IDAgKQorICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX01EOworCisgICAgaWYoIHg1MDlfcHJvZmlsZV9jaGVja19wa19hbGcoIHByb2ZpbGUsIGNoaWxkLT5zaWdfcGsgKSAhPSAwICkKKyAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0JBRF9QSzsKKworICAgIC8qCisgICAgICogQ2hpbGQgaXMgdGhlIHRvcCBvZiB0aGUgY2hhaW4uIENoZWNrIGFnYWluc3QgdGhlIHRydXN0X2NhIGxpc3QuCisgICAgICovCisgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOworCisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGNoaWxkLT5zaWdfbWQgKTsKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIENhbm5vdCBjaGVjayAndW5rbm93bicsIG5vIG5lZWQgdG8gdHJ5IGFueSBDQQorICAgICAgICAgKi8KKyAgICAgICAgdHJ1c3RfY2EgPSBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfbWQoIG1kX2luZm8sIGNoaWxkLT50YnMucCwgY2hpbGQtPnRicy5sZW4sIGhhc2ggKTsKKworICAgIGZvciggLyogdHJ1c3RfY2EgKi8gOyB0cnVzdF9jYSAhPSBOVUxMOyB0cnVzdF9jYSA9IHRydXN0X2NhLT5uZXh0ICkKKyAgICB7CisgICAgICAgIGlmKCB4NTA5X2NydF9jaGVja19wYXJlbnQoIGNoaWxkLCB0cnVzdF9jYSwgMSwgcGF0aF9jbnQgPT0gMCApICE9IDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY2hlY2tfcGF0aF9jbnQgPSBwYXRoX2NudCArIDE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVkdWNlIGNoZWNrX3BhdGhfY250IHRvIGNoZWNrIGFnYWluc3QgaWYgdG9wIG9mIHRoZSBjaGFpbiBpcworICAgICAgICAgKiB0aGUgc2FtZSBhcyB0aGUgdHJ1c3RlZCBDQQorICAgICAgICAgKi8KKyAgICAgICAgaWYoIGNoaWxkLT5zdWJqZWN0X3Jhdy5sZW4gPT0gdHJ1c3RfY2EtPnN1YmplY3RfcmF3LmxlbiAmJgorICAgICAgICAgICAgbWVtY21wKCBjaGlsZC0+c3ViamVjdF9yYXcucCwgdHJ1c3RfY2EtPnN1YmplY3RfcmF3LnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPmlzc3Vlcl9yYXcubGVuICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoZWNrX3BhdGhfY250LS07CisgICAgICAgIH0KKworICAgICAgICAvKiBTZWxmIHNpZ25lZCBjZXJ0aWZpY2F0ZXMgZG8gbm90IGNvdW50IHRvd2FyZHMgdGhlIGxpbWl0ICovCisgICAgICAgIGlmKCB0cnVzdF9jYS0+bWF4X3BhdGhsZW4gPiAwICYmCisgICAgICAgICAgICB0cnVzdF9jYS0+bWF4X3BhdGhsZW4gPCBjaGVja19wYXRoX2NudCAtIHNlbGZfY250ICkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiggbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdCggJnRydXN0X2NhLT52YWxpZF90byApICkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiggbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlKCAmdHJ1c3RfY2EtPnZhbGlkX2Zyb20gKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfdmVyaWZ5X2V4dCggY2hpbGQtPnNpZ19waywgY2hpbGQtPnNpZ19vcHRzLCAmdHJ1c3RfY2EtPnBrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnNpZ19tZCwgaGFzaCwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnNpZy5wLCBjaGlsZC0+c2lnLmxlbiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRvcCBvZiBjaGFpbiBpcyBzaWduZWQgYnkgYSB0cnVzdGVkIENBCisgICAgICAgICAqLworICAgICAgICAqZmxhZ3MgJj0gfk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOworCisgICAgICAgIGlmKCB4NTA5X3Byb2ZpbGVfY2hlY2tfa2V5KCBwcm9maWxlLCBjaGlsZC0+c2lnX3BrLCAmdHJ1c3RfY2EtPnBrICkgIT0gMCApCisgICAgICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX0tFWTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRvcCBvZiBjaGFpbiBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHRydXN0ZWQgQ0Egc2VuZCBhIHZlcmlmeSByZXF1ZXN0CisgICAgICogdG8gdGhlIGNhbGxiYWNrIGZvciBhbnkgaXNzdWVzIHdpdGggdmFsaWRpdHkgYW5kIENSTCBwcmVzZW5jZSBmb3IgdGhlCisgICAgICogdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZS4KKyAgICAgKi8KKyAgICBpZiggdHJ1c3RfY2EgIT0gTlVMTCAmJgorICAgICAgICAoIGNoaWxkLT5zdWJqZWN0X3Jhdy5sZW4gIT0gdHJ1c3RfY2EtPnN1YmplY3RfcmF3LmxlbiB8fAorICAgICAgICAgIG1lbWNtcCggY2hpbGQtPnN1YmplY3RfcmF3LnAsIHRydXN0X2NhLT5zdWJqZWN0X3Jhdy5wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5pc3N1ZXJfcmF3LmxlbiApICE9IDAgKSApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DKQorICAgICAgICAvKiBDaGVjayB0cnVzdGVkIENBJ3MgQ1JMIGZvciB0aGUgY2hhaW4ncyB0b3AgY3J0ICovCisgICAgICAgICpmbGFncyB8PSB4NTA5X2NydF92ZXJpZnljcmwoIGNoaWxkLCB0cnVzdF9jYSwgY2FfY3JsLCBwcm9maWxlICk7CisjZWxzZQorICAgICAgICAoKHZvaWQpIGNhX2NybCk7CisjZW5kaWYKKworICAgICAgICBpZiggTlVMTCAhPSBmX3ZyZnkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCByZXQgPSBmX3ZyZnkoIHBfdnJmeSwgdHJ1c3RfY2EsIHBhdGhfY250ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhX2ZsYWdzICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogQ2FsbCBjYWxsYmFjayBvbiB0b3AgY2VydCAqLworICAgIGlmKCBOVUxMICE9IGZfdnJmeSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBmX3ZyZnkoIHBfdnJmeSwgY2hpbGQsIHBhdGhfY250LCBmbGFncyApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgICpmbGFncyB8PSBjYV9mbGFnczsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHg1MDlfY3J0X3ZlcmlmeV9jaGlsZCgKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICpjaGlsZCwgbWJlZHRsc194NTA5X2NydCAqcGFyZW50LAorICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKnRydXN0X2NhLCBtYmVkdGxzX3g1MDlfY3JsICpjYV9jcmwsCisgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlICpwcm9maWxlLAorICAgICAgICAgICAgICAgIGludCBwYXRoX2NudCwgaW50IHNlbGZfY250LCB1aW50MzJfdCAqZmxhZ3MsCisgICAgICAgICAgICAgICAgaW50ICgqZl92cmZ5KSh2b2lkICosIG1iZWR0bHNfeDUwOV9jcnQgKiwgaW50LCB1aW50MzJfdCAqKSwKKyAgICAgICAgICAgICAgICB2b2lkICpwX3ZyZnkgKQoreworICAgIGludCByZXQ7CisgICAgdWludDMyX3QgcGFyZW50X2ZsYWdzID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgbWJlZHRsc194NTA5X2NydCAqZ3JhbmRwYXJlbnQ7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisKKyAgICAvKiBDb3VudGluZyBpbnRlcm1lZGlhdGUgc2VsZiBzaWduZWQgY2VydGlmaWNhdGVzICovCisgICAgaWYoICggcGF0aF9jbnQgIT0gMCApICYmIHg1MDlfbmFtZV9jbXAoICZjaGlsZC0+aXNzdWVyLCAmY2hpbGQtPnN1YmplY3QgKSA9PSAwICkKKyAgICAgICAgc2VsZl9jbnQrKzsKKworICAgIC8qIHBhdGhfY250IGlzIDAgZm9yIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgQ0EgKi8KKyAgICBpZiggMSArIHBhdGhfY250ID4gTUJFRFRMU19YNTA5X01BWF9JTlRFUk1FRElBVEVfQ0EgKQorICAgIHsKKyAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEICk7CisgICAgfQorCisgICAgaWYoIG1iZWR0bHNfeDUwOV90aW1lX2lzX3Bhc3QoICZjaGlsZC0+dmFsaWRfdG8gKSApCisgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9FWFBJUkVEOworCisgICAgaWYoIG1iZWR0bHNfeDUwOV90aW1lX2lzX2Z1dHVyZSggJmNoaWxkLT52YWxpZF9mcm9tICkgKQorICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfRlVUVVJFOworCisgICAgaWYoIHg1MDlfcHJvZmlsZV9jaGVja19tZF9hbGcoIHByb2ZpbGUsIGNoaWxkLT5zaWdfbWQgKSAhPSAwICkKKyAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0JBRF9NRDsKKworICAgIGlmKCB4NTA5X3Byb2ZpbGVfY2hlY2tfcGtfYWxnKCBwcm9maWxlLCBjaGlsZC0+c2lnX3BrICkgIT0gMCApCisgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9CQURfUEs7CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggY2hpbGQtPnNpZ19tZCApOworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2Fubm90IGNoZWNrICd1bmtub3duJyBoYXNoCisgICAgICAgICAqLworICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbWQoIG1kX2luZm8sIGNoaWxkLT50YnMucCwgY2hpbGQtPnRicy5sZW4sIGhhc2ggKTsKKworICAgICAgICBpZiggeDUwOV9wcm9maWxlX2NoZWNrX2tleSggcHJvZmlsZSwgY2hpbGQtPnNpZ19waywgJnBhcmVudC0+cGsgKSAhPSAwICkKKyAgICAgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9CQURfS0VZOworCisgICAgICAgIGlmKCBtYmVkdGxzX3BrX3ZlcmlmeV9leHQoIGNoaWxkLT5zaWdfcGssIGNoaWxkLT5zaWdfb3B0cywgJnBhcmVudC0+cGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC0+c2lnX21kLCBoYXNoLCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC0+c2lnLnAsIGNoaWxkLT5zaWcubGVuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRDsKKyAgICAgICAgfQorICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DKQorICAgIC8qIENoZWNrIHRydXN0ZWQgQ0EncyBDUkwgZm9yIHRoZSBnaXZlbiBjcnQgKi8KKyAgICAqZmxhZ3MgfD0geDUwOV9jcnRfdmVyaWZ5Y3JsKGNoaWxkLCBwYXJlbnQsIGNhX2NybCwgcHJvZmlsZSApOworI2VuZGlmCisKKyAgICAvKiBMb29rIGZvciBhIGdyYW5kcGFyZW50IGluIHRydXN0ZWQgQ0FzICovCisgICAgZm9yKCBncmFuZHBhcmVudCA9IHRydXN0X2NhOworICAgICAgICAgZ3JhbmRwYXJlbnQgIT0gTlVMTDsKKyAgICAgICAgIGdyYW5kcGFyZW50ID0gZ3JhbmRwYXJlbnQtPm5leHQgKQorICAgIHsKKyAgICAgICAgaWYoIHg1MDlfY3J0X2NoZWNrX3BhcmVudCggcGFyZW50LCBncmFuZHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcGF0aF9jbnQgPT0gMCApID09IDAgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYoIGdyYW5kcGFyZW50ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0ID0geDUwOV9jcnRfdmVyaWZ5X3RvcCggcGFyZW50LCBncmFuZHBhcmVudCwgY2FfY3JsLCBwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NudCArIDEsIHNlbGZfY250LCAmcGFyZW50X2ZsYWdzLCBmX3ZyZnksIHBfdnJmeSApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogTG9vayBmb3IgYSBncmFuZHBhcmVudCB1cHdhcmRzIHRoZSBjaGFpbiAqLworICAgICAgICBmb3IoIGdyYW5kcGFyZW50ID0gcGFyZW50LT5uZXh0OworICAgICAgICAgICAgIGdyYW5kcGFyZW50ICE9IE5VTEw7CisgICAgICAgICAgICAgZ3JhbmRwYXJlbnQgPSBncmFuZHBhcmVudC0+bmV4dCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qICsyIGJlY2F1c2UgdGhlIGN1cnJlbnQgc3RlcCBpcyBub3QgeWV0IGFjY291bnRlZCBmb3IKKyAgICAgICAgICAgICAqIGFuZCBiZWNhdXNlIG1heF9wYXRobGVuIGlzIG9uZSBoaWdoZXIgdGhhbiBpdCBzaG91bGQgYmUuCisgICAgICAgICAgICAgKiBBbHNvIHNlbGYgc2lnbmVkIGNlcnRpZmljYXRlcyBkbyBub3QgY291bnQgdG8gdGhlIGxpbWl0LiAqLworICAgICAgICAgICAgaWYoIGdyYW5kcGFyZW50LT5tYXhfcGF0aGxlbiA+IDAgJiYKKyAgICAgICAgICAgICAgICBncmFuZHBhcmVudC0+bWF4X3BhdGhsZW4gPCAyICsgcGF0aF9jbnQgLSBzZWxmX2NudCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCB4NTA5X2NydF9jaGVja19wYXJlbnQoIHBhcmVudCwgZ3JhbmRwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwYXRoX2NudCA9PSAwICkgPT0gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBJcyBvdXIgcGFyZW50IHBhcnQgb2YgdGhlIGNoYWluIG9yIGF0IHRoZSB0b3A/ICovCisgICAgICAgIGlmKCBncmFuZHBhcmVudCAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0geDUwOV9jcnRfdmVyaWZ5X2NoaWxkKCBwYXJlbnQsIGdyYW5kcGFyZW50LCB0cnVzdF9jYSwgY2FfY3JsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlLCBwYXRoX2NudCArIDEsIHNlbGZfY250LCAmcGFyZW50X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3ZyZnksIHBfdnJmeSApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0geDUwOV9jcnRfdmVyaWZ5X3RvcCggcGFyZW50LCB0cnVzdF9jYSwgY2FfY3JsLCBwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jbnQgKyAxLCBzZWxmX2NudCwgJnBhcmVudF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfdnJmeSwgcF92cmZ5ICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBjaGlsZCBpcyB2ZXJpZmllZCB0byBiZSBhIGNoaWxkIG9mIHRoZSBwYXJlbnQsIGNhbGwgdmVyaWZ5IGNhbGxiYWNrICovCisgICAgaWYoIE5VTEwgIT0gZl92cmZ5ICkKKyAgICAgICAgaWYoICggcmV0ID0gZl92cmZ5KCBwX3ZyZnksIGNoaWxkLCBwYXRoX2NudCwgZmxhZ3MgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICpmbGFncyB8PSBwYXJlbnRfZmxhZ3M7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGUgY2VydGlmaWNhdGUgdmFsaWRpdHkKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5KCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQsCisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICp0cnVzdF9jYSwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNhX2NybCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNuLCB1aW50MzJfdCAqZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3ZyZnkpKHZvaWQgKiwgbWJlZHRsc194NTA5X2NydCAqLCBpbnQsIHVpbnQzMl90ICopLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF92cmZ5ICkKK3sKKyAgICByZXR1cm4oIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X3dpdGhfcHJvZmlsZSggY3J0LCB0cnVzdF9jYSwgY2FfY3JsLAorICAgICAgICAgICAgICAgICZtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGVfZGVmYXVsdCwgY24sIGZsYWdzLCBmX3ZyZnksIHBfdnJmeSApICk7Cit9CisKKworLyoKKyAqIFZlcmlmeSB0aGUgY2VydGlmaWNhdGUgdmFsaWRpdHksIHdpdGggcHJvZmlsZQorICovCitpbnQgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfd2l0aF9wcm9maWxlKCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQsCisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICp0cnVzdF9jYSwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNhX2NybCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZSAqcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNuLCB1aW50MzJfdCAqZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3ZyZnkpKHZvaWQgKiwgbWJlZHRsc194NTA5X2NydCAqLCBpbnQsIHVpbnQzMl90ICopLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF92cmZ5ICkKK3sKKyAgICBzaXplX3QgY25fbGVuOworICAgIGludCByZXQ7CisgICAgaW50IHBhdGhsZW4gPSAwLCBzZWxmc2lnbmVkID0gMDsKKyAgICBtYmVkdGxzX3g1MDlfY3J0ICpwYXJlbnQ7CisgICAgbWJlZHRsc194NTA5X25hbWUgKm5hbWU7CisgICAgbWJlZHRsc194NTA5X3NlcXVlbmNlICpjdXIgPSBOVUxMOworICAgIG1iZWR0bHNfcGtfdHlwZV90IHBrX3R5cGU7CisKKyAgICBpZiggcHJvZmlsZSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAqZmxhZ3MgPSAwOworCisgICAgaWYoIGNuICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbmFtZSA9ICZjcnQtPnN1YmplY3Q7CisgICAgICAgIGNuX2xlbiA9IHN0cmxlbiggY24gKTsKKworICAgICAgICBpZiggY3J0LT5leHRfdHlwZXMgJiBNQkVEVExTX1g1MDlfRVhUX1NVQkpFQ1RfQUxUX05BTUUgKQorICAgICAgICB7CisgICAgICAgICAgICBjdXIgPSAmY3J0LT5zdWJqZWN0X2FsdF9uYW1lczsKKworICAgICAgICAgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggY3VyLT5idWYubGVuID09IGNuX2xlbiAmJgorICAgICAgICAgICAgICAgICAgICB4NTA5X21lbWNhc2VjbXAoIGNuLCBjdXItPmJ1Zi5wLCBjbl9sZW4gKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBpZiggY3VyLT5idWYubGVuID4gMiAmJgorICAgICAgICAgICAgICAgICAgICBtZW1jbXAoIGN1ci0+YnVmLnAsICIqLiIsIDIgKSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgIHg1MDlfY2hlY2tfd2lsZGNhcmQoIGNuLCAmY3VyLT5idWYgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIGN1ciA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0g7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSggbmFtZSAhPSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggTUJFRFRMU19PSURfQ01QKCBNQkVEVExTX09JRF9BVF9DTiwgJm5hbWUtPm9pZCApID09IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIG5hbWUtPnZhbC5sZW4gPT0gY25fbGVuICYmCisgICAgICAgICAgICAgICAgICAgICAgICB4NTA5X21lbWNhc2VjbXAoIG5hbWUtPnZhbC5wLCBjbiwgY25fbGVuICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBpZiggbmFtZS0+dmFsLmxlbiA+IDIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcCggbmFtZS0+dmFsLnAsICIqLiIsIDIgKSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICB4NTA5X2NoZWNrX3dpbGRjYXJkKCBjbiwgJm5hbWUtPnZhbCApID09IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUtPm5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCBuYW1lID09IE5VTEwgKQorICAgICAgICAgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENoZWNrIHRoZSB0eXBlIGFuZCBzaXplIG9mIHRoZSBrZXkgKi8KKyAgICBwa190eXBlID0gbWJlZHRsc19wa19nZXRfdHlwZSggJmNydC0+cGsgKTsKKworICAgIGlmKCB4NTA5X3Byb2ZpbGVfY2hlY2tfcGtfYWxnKCBwcm9maWxlLCBwa190eXBlICkgIT0gMCApCisgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9CQURfUEs7CisKKyAgICBpZiggeDUwOV9wcm9maWxlX2NoZWNrX2tleSggcHJvZmlsZSwgcGtfdHlwZSwgJmNydC0+cGsgKSAhPSAwICkKKyAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0JBRF9LRVk7CisKKyAgICAvKiBMb29rIGZvciBhIHBhcmVudCBpbiB0cnVzdGVkIENBcyAqLworICAgIGZvciggcGFyZW50ID0gdHJ1c3RfY2E7IHBhcmVudCAhPSBOVUxMOyBwYXJlbnQgPSBwYXJlbnQtPm5leHQgKQorICAgIHsKKyAgICAgICAgaWYoIHg1MDlfY3J0X2NoZWNrX3BhcmVudCggY3J0LCBwYXJlbnQsIDAsIHBhdGhsZW4gPT0gMCApID09IDAgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYoIHBhcmVudCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldCA9IHg1MDlfY3J0X3ZlcmlmeV90b3AoIGNydCwgcGFyZW50LCBjYV9jcmwsIHByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhsZW4sIHNlbGZzaWduZWQsIGZsYWdzLCBmX3ZyZnksIHBfdnJmeSApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogTG9vayBmb3IgYSBwYXJlbnQgdXB3YXJkcyB0aGUgY2hhaW4gKi8KKyAgICAgICAgZm9yKCBwYXJlbnQgPSBjcnQtPm5leHQ7IHBhcmVudCAhPSBOVUxMOyBwYXJlbnQgPSBwYXJlbnQtPm5leHQgKQorICAgICAgICAgICAgaWYoIHg1MDlfY3J0X2NoZWNrX3BhcmVudCggY3J0LCBwYXJlbnQsIDAsIHBhdGhsZW4gPT0gMCApID09IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIEFyZSB3ZSBwYXJ0IG9mIHRoZSBjaGFpbiBvciBhdCB0aGUgdG9wPyAqLworICAgICAgICBpZiggcGFyZW50ICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSB4NTA5X2NydF92ZXJpZnlfY2hpbGQoIGNydCwgcGFyZW50LCB0cnVzdF9jYSwgY2FfY3JsLCBwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRobGVuLCBzZWxmc2lnbmVkLCBmbGFncywgZl92cmZ5LCBwX3ZyZnkgKTsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IHg1MDlfY3J0X3ZlcmlmeV90b3AoIGNydCwgdHJ1c3RfY2EsIGNhX2NybCwgcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhsZW4sIHNlbGZzaWduZWQsIGZsYWdzLCBmX3ZyZnksIHBfdnJmeSApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoICpmbGFncyAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgY2VydGlmaWNhdGUgY2hhaW4KKyAqLwordm9pZCBtYmVkdGxzX3g1MDlfY3J0X2luaXQoIG1iZWR0bHNfeDUwOV9jcnQgKmNydCApCit7CisgICAgbWVtc2V0KCBjcnQsIDAsIHNpemVvZihtYmVkdGxzX3g1MDlfY3J0KSApOworfQorCisvKgorICogVW5hbGxvY2F0ZSBhbGwgY2VydGlmaWNhdGUgZGF0YQorICovCit2b2lkIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggbWJlZHRsc194NTA5X2NydCAqY3J0ICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfY3J0ICpjZXJ0X2N1ciA9IGNydDsKKyAgICBtYmVkdGxzX3g1MDlfY3J0ICpjZXJ0X3BydjsKKyAgICBtYmVkdGxzX3g1MDlfbmFtZSAqbmFtZV9jdXI7CisgICAgbWJlZHRsc194NTA5X25hbWUgKm5hbWVfcHJ2OworICAgIG1iZWR0bHNfeDUwOV9zZXF1ZW5jZSAqc2VxX2N1cjsKKyAgICBtYmVkdGxzX3g1MDlfc2VxdWVuY2UgKnNlcV9wcnY7CisKKyAgICBpZiggY3J0ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBkbworICAgIHsKKyAgICAgICAgbWJlZHRsc19wa19mcmVlKCAmY2VydF9jdXItPnBrICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQpCisgICAgICAgIG1iZWR0bHNfZnJlZSggY2VydF9jdXItPnNpZ19vcHRzICk7CisjZW5kaWYKKworICAgICAgICBuYW1lX2N1ciA9IGNlcnRfY3VyLT5pc3N1ZXIubmV4dDsKKyAgICAgICAgd2hpbGUoIG5hbWVfY3VyICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBuYW1lX3BydiA9IG5hbWVfY3VyOworICAgICAgICAgICAgbmFtZV9jdXIgPSBuYW1lX2N1ci0+bmV4dDsKKyAgICAgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggbmFtZV9wcnYsIHNpemVvZiggbWJlZHRsc194NTA5X25hbWUgKSApOworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBuYW1lX3BydiApOworICAgICAgICB9CisKKyAgICAgICAgbmFtZV9jdXIgPSBjZXJ0X2N1ci0+c3ViamVjdC5uZXh0OworICAgICAgICB3aGlsZSggbmFtZV9jdXIgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVfcHJ2ID0gbmFtZV9jdXI7CisgICAgICAgICAgICBuYW1lX2N1ciA9IG5hbWVfY3VyLT5uZXh0OworICAgICAgICAgICAgbWJlZHRsc196ZXJvaXplKCBuYW1lX3Bydiwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfbmFtZSApICk7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIG5hbWVfcHJ2ICk7CisgICAgICAgIH0KKworICAgICAgICBzZXFfY3VyID0gY2VydF9jdXItPmV4dF9rZXlfdXNhZ2UubmV4dDsKKyAgICAgICAgd2hpbGUoIHNlcV9jdXIgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlcV9wcnYgPSBzZXFfY3VyOworICAgICAgICAgICAgc2VxX2N1ciA9IHNlcV9jdXItPm5leHQ7CisgICAgICAgICAgICBtYmVkdGxzX3plcm9pemUoIHNlcV9wcnYsIHNpemVvZiggbWJlZHRsc194NTA5X3NlcXVlbmNlICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggc2VxX3BydiApOworICAgICAgICB9CisKKyAgICAgICAgc2VxX2N1ciA9IGNlcnRfY3VyLT5zdWJqZWN0X2FsdF9uYW1lcy5uZXh0OworICAgICAgICB3aGlsZSggc2VxX2N1ciAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgc2VxX3BydiA9IHNlcV9jdXI7CisgICAgICAgICAgICBzZXFfY3VyID0gc2VxX2N1ci0+bmV4dDsKKyAgICAgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggc2VxX3Bydiwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfc2VxdWVuY2UgKSApOworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBzZXFfcHJ2ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggY2VydF9jdXItPnJhdy5wICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3plcm9pemUoIGNlcnRfY3VyLT5yYXcucCwgY2VydF9jdXItPnJhdy5sZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggY2VydF9jdXItPnJhdy5wICk7CisgICAgICAgIH0KKworICAgICAgICBjZXJ0X2N1ciA9IGNlcnRfY3VyLT5uZXh0OworICAgIH0KKyAgICB3aGlsZSggY2VydF9jdXIgIT0gTlVMTCApOworCisgICAgY2VydF9jdXIgPSBjcnQ7CisgICAgZG8KKyAgICB7CisgICAgICAgIGNlcnRfcHJ2ID0gY2VydF9jdXI7CisgICAgICAgIGNlcnRfY3VyID0gY2VydF9jdXItPm5leHQ7CisKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBjZXJ0X3Bydiwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfY3J0ICkgKTsKKyAgICAgICAgaWYoIGNlcnRfcHJ2ICE9IGNydCApCisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIGNlcnRfcHJ2ICk7CisgICAgfQorICAgIHdoaWxlKCBjZXJ0X2N1ciAhPSBOVUxMICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDlfY3NyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94NTA5X2Nzci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwM2QwNmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94NTA5X2Nzci5jCkBAIC0wLDAgKzEsNDIzIEBACisvKgorICogIFguNTA5IENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdCAoQ1NSKSBwYXJzaW5nCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBJVFUtVCBYLjUwOSBzdGFuZGFyZCBkZWZpbmVzIGEgY2VydGlmaWNhdGUgZm9ybWF0IGZvciBQS0kuCisgKgorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzUyODAudHh0IChDZXJ0aWZpY2F0ZXMgYW5kIENSTHMpCisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzI3OS50eHQgKEFsZyBJRHMgZm9yIENSTHMpCisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjk4Ni50eHQgKENTUnMsIGFrYSBQS0NTIzEwKQorICoKKyAqICBodHRwOi8vd3d3Lml0dS5pbnQvSVRVLVQvc3R1ZHlncm91cHMvY29tMTcvbGFuZ3VhZ2VzL1guNjgwLTAyMDcucGRmCisgKiAgaHR0cDovL3d3dy5pdHUuaW50L0lUVS1UL3N0dWR5Z3JvdXBzL2NvbTE3L2xhbmd1YWdlcy9YLjY5MC0wMjA3LnBkZgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQykKKworI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jc3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisjaW5jbHVkZSAibWJlZHRscy9wZW0uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgZGVmaW5lZChFRklYNjQpIHx8IGRlZmluZWQoRUZJMzIpCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogIFZlcnNpb24gIDo6PSAgSU5URUdFUiAgeyAgdjEoMCkgIH0KKyAqLworc3RhdGljIGludCB4NTA5X2Nzcl9nZXRfdmVyc2lvbiggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp2ZXIgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2ludCggcCwgZW5kLCB2ZXIgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkKKyAgICAgICAgeworICAgICAgICAgICAgKnZlciA9IDA7CisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04gKyByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFBhcnNlIGEgQ1NSIGluIERFUiBmb3JtYXQKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZGVyKCBtYmVkdGxzX3g1MDlfY3NyICpjc3IsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwLCAqZW5kOworICAgIG1iZWR0bHNfeDUwOV9idWYgc2lnX3BhcmFtczsKKworICAgIG1lbXNldCggJnNpZ19wYXJhbXMsIDAsIHNpemVvZiggbWJlZHRsc194NTA5X2J1ZiApICk7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciB2YWxpZCBpbnB1dAorICAgICAqLworICAgIGlmKCBjc3IgPT0gTlVMTCB8fCBidWYgPT0gTlVMTCB8fCBidWZsZW4gPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworCisgICAgbWJlZHRsc194NTA5X2Nzcl9pbml0KCBjc3IgKTsKKworICAgIC8qCisgICAgICogZmlyc3QgY29weSB0aGUgcmF3IERFUiBkYXRhCisgICAgICovCisgICAgcCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBsZW4gPSBidWZsZW4gKTsKKworICAgIGlmKCBwID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVEICk7CisKKyAgICBtZW1jcHkoIHAsIGJ1ZiwgYnVmbGVuICk7CisKKyAgICBjc3ItPnJhdy5wID0gcDsKKyAgICBjc3ItPnJhdy5sZW4gPSBsZW47CisgICAgZW5kID0gcCArIGxlbjsKKworICAgIC8qCisgICAgICogIENlcnRpZmljYXRpb25SZXF1ZXN0IDo6PSBTRVFVRU5DRSB7CisgICAgICogICAgICAgY2VydGlmaWNhdGlvblJlcXVlc3RJbmZvIENlcnRpZmljYXRpb25SZXF1ZXN0SW5mbywKKyAgICAgKiAgICAgICBzaWduYXR1cmVBbGdvcml0aG0gQWxnb3JpdGhtSWRlbnRpZmllciwKKyAgICAgKiAgICAgICBzaWduYXR1cmUgICAgICAgICAgQklUIFNUUklORworICAgICAqICB9CisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCBjc3IgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICk7CisgICAgfQorCisgICAgaWYoIGxlbiAhPSAoc2l6ZV90KSAoIGVuZCAtIHAgKSApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoIGNzciApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgQ2VydGlmaWNhdGlvblJlcXVlc3RJbmZvIDo6PSBTRVFVRU5DRSB7CisgICAgICovCisgICAgY3NyLT5jcmkucCA9IHA7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoIGNzciApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBlbmQgPSBwICsgbGVuOworICAgIGNzci0+Y3JpLmxlbiA9IGVuZCAtIGNzci0+Y3JpLnA7CisKKyAgICAvKgorICAgICAqICBWZXJzaW9uICA6Oj0gIElOVEVHRVIgeyAgdjEoMCkgfQorICAgICAqLworICAgIGlmKCAoIHJldCA9IHg1MDlfY3NyX2dldF92ZXJzaW9uKCAmcCwgZW5kLCAmY3NyLT52ZXJzaW9uICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggY3NyICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgY3NyLT52ZXJzaW9uKys7CisKKyAgICBpZiggY3NyLT52ZXJzaW9uICE9IDEgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCBjc3IgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fVkVSU0lPTiApOworICAgIH0KKworICAgIC8qCisgICAgICogIHN1YmplY3QgICAgICAgICAgICAgICBOYW1lCisgICAgICovCisgICAgY3NyLT5zdWJqZWN0X3Jhdy5wID0gcDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggY3NyICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfbmFtZSggJnAsIHAgKyBsZW4sICZjc3ItPnN1YmplY3QgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCBjc3IgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBjc3ItPnN1YmplY3RfcmF3LmxlbiA9IHAgLSBjc3ItPnN1YmplY3RfcmF3LnA7CisKKyAgICAvKgorICAgICAqICBzdWJqZWN0UEtJbmZvIFN1YmplY3RQdWJsaWNLZXlJbmZvCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19wYXJzZV9zdWJwdWJrZXkoICZwLCBlbmQsICZjc3ItPnBrICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggY3NyICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgYXR0cmlidXRlcyAgICBbMF0gQXR0cmlidXRlcworICAgICAqCisgICAgICogIFRoZSBsaXN0IG9mIHBvc3NpYmxlIGF0dHJpYnV0ZXMgaXMgb3Blbi1lbmRlZCwgdGhvdWdoIFJGQyAyOTg1CisgICAgICogIChQS0NTIzkpIGRlZmluZXMgYSBmZXcgaW4gc2VjdGlvbiA1LjQuIFdlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IGFueSwKKyAgICAgKiAgc28gd2UganVzdCBpZ25vcmUgdGhlbS4gVGhpcyBpcyBhIHNhZmUgdGhpbmcgdG8gZG8gYXMgdGhlIHdvcnN0IHRoaW5nCisgICAgICogIHRoYXQgY291bGQgaGFwcGVuIGlzIHRoYXQgd2UgaXNzdWUgYSBjZXJ0aWZpY2F0ZSB0aGF0IGRvZXMgbm90IG1hdGNoCisgICAgICogIHRoZSByZXF1ZXN0ZXIncyBleHBlY3RhdGlvbnMgLSB0aGlzIGNhbm5vdCBjYXVzZSBhIHZpb2xhdGlvbiBvZiBvdXIKKyAgICAgKiAgc2lnbmF0dXJlIHBvbGljaWVzLgorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCBjc3IgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgcCArPSBsZW47CisKKyAgICBlbmQgPSBjc3ItPnJhdy5wICsgY3NyLT5yYXcubGVuOworCisgICAgLyoKKyAgICAgKiAgc2lnbmF0dXJlQWxnb3JpdGhtICAgQWxnb3JpdGhtSWRlbnRpZmllciwKKyAgICAgKiAgc2lnbmF0dXJlICAgICAgICAgICAgQklUIFNUUklORworICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfYWxnKCAmcCwgZW5kLCAmY3NyLT5zaWdfb2lkLCAmc2lnX3BhcmFtcyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoIGNzciApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfc2lnX2FsZyggJmNzci0+c2lnX29pZCwgJnNpZ19wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNzci0+c2lnX21kLCAmY3NyLT5zaWdfcGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNzci0+c2lnX29wdHMgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCBjc3IgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRyApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfc2lnKCAmcCwgZW5kLCAmY3NyLT5zaWcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCBjc3IgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggcCAhPSBlbmQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCBjc3IgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogUGFyc2UgYSBDU1IsIGFsbG93aW5nIGZvciBQRU0gb3IgcmF3IERFUiBlbmNvZGluZworICovCitpbnQgbWJlZHRsc194NTA5X2Nzcl9wYXJzZSggbWJlZHRsc194NTA5X2NzciAqY3NyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKQoreworICAgIGludCByZXQ7CisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorICAgIHNpemVfdCB1c2VfbGVuOworICAgIG1iZWR0bHNfcGVtX2NvbnRleHQgcGVtOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciB2YWxpZCBpbnB1dAorICAgICAqLworICAgIGlmKCBjc3IgPT0gTlVMTCB8fCBidWYgPT0gTlVMTCB8fCBidWZsZW4gPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorICAgIG1iZWR0bHNfcGVtX2luaXQoICZwZW0gKTsKKworICAgIC8qIEF2b2lkIGNhbGxpbmcgbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoKSBvbiBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZyAqLworICAgIGlmKCBidWZbYnVmbGVuIC0gMV0gIT0gJ1wwJyApCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQ7CisgICAgZWxzZQorICAgICAgICByZXQgPSBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlciggJnBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgTlVMTCwgMCwgJnVzZV9sZW4gKTsKKworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBXYXMgUEVNIGVuY29kZWQsIHBhcnNlIHRoZSByZXN1bHQKKyAgICAgICAgICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZGVyKCBjc3IsIHBlbS5idWYsIHBlbS5idWZsZW4gKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBtYmVkdGxzX3BlbV9mcmVlKCAmcGVtICk7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyAgICBlbHNlIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVCApCisgICAgeworICAgICAgICBtYmVkdGxzX3BlbV9mcmVlKCAmcGVtICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9QQVJTRV9DICovCisgICAgcmV0dXJuKCBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlX2RlciggY3NyLCBidWYsIGJ1ZmxlbiApICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisvKgorICogTG9hZCBhIENTUiBpbnRvIHRoZSBzdHJ1Y3R1cmUKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZmlsZSggbWJlZHRsc194NTA5X2NzciAqY3NyLCBjb25zdCBjaGFyICpwYXRoICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfbG9hZF9maWxlKCBwYXRoLCAmYnVmLCAmbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlKCBjc3IsIGJ1ZiwgbiApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBidWYsIG4gKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGJ1ZiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKKyNkZWZpbmUgQkVGT1JFX0NPTE9OICAgIDE0CisjZGVmaW5lIEJDICAgICAgICAgICAgICAiMTQiCisvKgorICogUmV0dXJuIGFuIGluZm9ybWF0aW9uYWwgc3RyaW5nIGFib3V0IHRoZSBDU1IuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3NyX2luZm8oIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3NyICpjc3IgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IG47CisgICAgY2hhciAqcDsKKyAgICBjaGFyIGtleV9zaXplX3N0cltCRUZPUkVfQ09MT05dOworCisgICAgcCA9IGJ1ZjsKKyAgICBuID0gc2l6ZTsKKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIlc0NTUiB2ZXJzaW9uICAgOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LCBjc3ItPnZlcnNpb24gKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiVzc3ViamVjdCBuYW1lICA6ICIsIHByZWZpeCApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9kbl9nZXRzKCBwLCBuLCAmY3NyLT5zdWJqZWN0ICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc3NpZ25lZCB1c2luZyAgOiAiLCBwcmVmaXggKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9zaWdfYWxnX2dldHMoIHAsIG4sICZjc3ItPnNpZ19vaWQsIGNzci0+c2lnX3BrLCBjc3ItPnNpZ19tZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyLT5zaWdfb3B0cyApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2tleV9zaXplX2hlbHBlcigga2V5X3NpemVfc3RyLCBCRUZPUkVfQ09MT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfZ2V0X25hbWUoICZjc3ItPnBrICkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lcyUtIiBCQyAiczogJWQgYml0c1xuIiwgcHJlZml4LCBrZXlfc2l6ZV9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIG1iZWR0bHNfcGtfZ2V0X2JpdGxlbiggJmNzci0+cGsgKSApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0dXJuKCAoaW50KSAoIHNpemUgLSBuICkgKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYSBDU1IKKyAqLwordm9pZCBtYmVkdGxzX3g1MDlfY3NyX2luaXQoIG1iZWR0bHNfeDUwOV9jc3IgKmNzciApCit7CisgICAgbWVtc2V0KCBjc3IsIDAsIHNpemVvZihtYmVkdGxzX3g1MDlfY3NyKSApOworfQorCisvKgorICogVW5hbGxvY2F0ZSBhbGwgQ1NSIGRhdGEKKyAqLwordm9pZCBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoIG1iZWR0bHNfeDUwOV9jc3IgKmNzciApCit7CisgICAgbWJlZHRsc194NTA5X25hbWUgKm5hbWVfY3VyOworICAgIG1iZWR0bHNfeDUwOV9uYW1lICpuYW1lX3BydjsKKworICAgIGlmKCBjc3IgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfcGtfZnJlZSggJmNzci0+cGsgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVCkKKyAgICBtYmVkdGxzX2ZyZWUoIGNzci0+c2lnX29wdHMgKTsKKyNlbmRpZgorCisgICAgbmFtZV9jdXIgPSBjc3ItPnN1YmplY3QubmV4dDsKKyAgICB3aGlsZSggbmFtZV9jdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBuYW1lX3BydiA9IG5hbWVfY3VyOworICAgICAgICBuYW1lX2N1ciA9IG5hbWVfY3VyLT5uZXh0OworICAgICAgICBtYmVkdGxzX3plcm9pemUoIG5hbWVfcHJ2LCBzaXplb2YoIG1iZWR0bHNfeDUwOV9uYW1lICkgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBuYW1lX3BydiApOworICAgIH0KKworICAgIGlmKCBjc3ItPnJhdy5wICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBjc3ItPnJhdy5wLCBjc3ItPnJhdy5sZW4gKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjc3ItPnJhdy5wICk7CisgICAgfQorCisgICAgbWJlZHRsc196ZXJvaXplKCBjc3IsIHNpemVvZiggbWJlZHRsc194NTA5X2NzciApICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDl3cml0ZV9jcnQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDl3cml0ZV9jcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWQ5YTIyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOXdyaXRlX2NydC5jCkBAIC0wLDAgKzEsNDU5IEBACisvKgorICogIFguNTA5IGNlcnRpZmljYXRlIHdyaXRpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiBSZWZlcmVuY2VzOgorICogLSBjZXJ0aWZpY2F0ZXM6IFJGQyA1MjgwLCB1cGRhdGVkIGJ5IFJGQyA2ODE4CisgKiAtIENTUnM6IFBLQ1MjMTAgdjEuNyBha2EgUkZDIDI5ODYKKyAqIC0gYXR0cmlidXRlczogUEtDUyM5IHYyLjAgYWthIFJGQyAyOTg1CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9XUklURV9DKQorCisjaW5jbHVkZSAibWJlZHRscy94NTA5X2NydC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisjaW5jbHVkZSAibWJlZHRscy9hc24xd3JpdGUuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTEuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisjZW5kaWYgLyogTUJFRFRMU19QRU1fV1JJVEVfQyAqLworCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9pbml0KCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YobWJlZHRsc194NTA5d3JpdGVfY2VydCkgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZjdHgtPnNlcmlhbCApOworICAgIGN0eC0+dmVyc2lvbiA9IE1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8zOworfQorCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9mcmVlKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHggKQoreworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPnNlcmlhbCApOworCisgICAgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YV9saXN0KCAmY3R4LT5zdWJqZWN0ICk7CisgICAgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YV9saXN0KCAmY3R4LT5pc3N1ZXIgKTsKKyAgICBtYmVkdGxzX2FzbjFfZnJlZV9uYW1lZF9kYXRhX2xpc3QoICZjdHgtPmV4dGVuc2lvbnMgKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YobWJlZHRsc194NTA5d3JpdGVfY2VydCkgKTsKK30KKwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3ZlcnNpb24oIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwgaW50IHZlcnNpb24gKQoreworICAgIGN0eC0+dmVyc2lvbiA9IHZlcnNpb247Cit9CisKK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9tZF9hbGcoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnICkKK3sKKyAgICBjdHgtPm1kX2FsZyA9IG1kX2FsZzsKK30KKwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5KCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsIG1iZWR0bHNfcGtfY29udGV4dCAqa2V5ICkKK3sKKyAgICBjdHgtPnN1YmplY3Rfa2V5ID0ga2V5OworfQorCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX2tleSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LCBtYmVkdGxzX3BrX2NvbnRleHQgKmtleSApCit7CisgICAgY3R4LT5pc3N1ZXJfa2V5ID0ga2V5OworfQorCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X25hbWUoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN1YmplY3RfbmFtZSApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfeDUwOV9zdHJpbmdfdG9fbmFtZXMoICZjdHgtPnN1YmplY3QsIHN1YmplY3RfbmFtZSApOworfQorCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9pc3N1ZXJfbmFtZSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppc3N1ZXJfbmFtZSApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfeDUwOV9zdHJpbmdfdG9fbmFtZXMoICZjdHgtPmlzc3VlciwgaXNzdWVyX25hbWUgKTsKK30KKworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc2VyaWFsKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsIGNvbnN0IG1iZWR0bHNfbXBpICpzZXJpYWwgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9jb3B5KCAmY3R4LT5zZXJpYWwsIHNlcmlhbCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfdmFsaWRpdHkoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwgY29uc3QgY2hhciAqbm90X2JlZm9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbm90X2FmdGVyICkKK3sKKyAgICBpZiggc3RybGVuKCBub3RfYmVmb3JlICkgIT0gTUJFRFRMU19YNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOIC0gMSB8fAorICAgICAgICBzdHJsZW4oIG5vdF9hZnRlciApICAhPSBNQkVEVExTX1g1MDlfUkZDNTI4MF9VVENfVElNRV9MRU4gLSAxICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworICAgIH0KKyAgICBzdHJuY3B5KCBjdHgtPm5vdF9iZWZvcmUsIG5vdF9iZWZvcmUsIE1CRURUTFNfWDUwOV9SRkM1MjgwX1VUQ19USU1FX0xFTiApOworICAgIHN0cm5jcHkoIGN0eC0+bm90X2FmdGVyICwgbm90X2FmdGVyICwgTUJFRFRMU19YNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOICk7CisgICAgY3R4LT5ub3RfYmVmb3JlW01CRURUTFNfWDUwOV9SRkM1MjgwX1VUQ19USU1FX0xFTiAtIDFdID0gJ1onOworICAgIGN0eC0+bm90X2FmdGVyW01CRURUTFNfWDUwOV9SRkM1MjgwX1VUQ19USU1FX0xFTiAtIDFdID0gJ1onOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2V4dGVuc2lvbiggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2lkLCBzaXplX3Qgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjcml0aWNhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCwgc2l6ZV90IHZhbF9sZW4gKQoreworICAgIHJldHVybiBtYmVkdGxzX3g1MDlfc2V0X2V4dGVuc2lvbiggJmN0eC0+ZXh0ZW5zaW9ucywgb2lkLCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRpY2FsLCB2YWwsIHZhbF9sZW4gKTsKK30KKworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfYmFzaWNfY29uc3RyYWludHMoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlzX2NhLCBpbnQgbWF4X3BhdGhsZW4gKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbOV07CisgICAgdW5zaWduZWQgY2hhciAqYyA9IGJ1ZiArIHNpemVvZihidWYpOworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZihidWYpICk7CisKKyAgICBpZiggaXNfY2EgJiYgbWF4X3BhdGhsZW4gPiAxMjcgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBpc19jYSApCisgICAgeworICAgICAgICBpZiggbWF4X3BhdGhsZW4gPj0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9pbnQoICZjLCBidWYsIG1heF9wYXRobGVuICkgKTsKKyAgICAgICAgfQorICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfYm9vbCggJmMsIGJ1ZiwgMSApICk7CisgICAgfQorCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIGJ1ZiwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKTsKKworICAgIHJldHVybiBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2V4dGVuc2lvbiggY3R4LCBNQkVEVExTX09JRF9CQVNJQ19DT05TVFJBSU5UUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9TSVpFKCBNQkVEVExTX09JRF9CQVNJQ19DT05TVFJBSU5UUyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGJ1ZiArIHNpemVvZihidWYpIC0gbGVuLCBsZW4gKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X2tleV9pZGVudGlmaWVyKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHggKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19NUElfTUFYX1NJWkUgKiAyICsgMjBdOyAvKiB0YWcsIGxlbmd0aCArIDJ4TVBJICovCisgICAgdW5zaWduZWQgY2hhciAqYyA9IGJ1ZiArIHNpemVvZihidWYpOworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZihidWYpICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19wa193cml0ZV9wdWJrZXkoICZjLCBidWYsIGN0eC0+c3ViamVjdF9rZXkgKSApOworCisgICAgbWJlZHRsc19zaGExKCBidWYgKyBzaXplb2YoYnVmKSAtIGxlbiwgbGVuLCBidWYgKyBzaXplb2YoYnVmKSAtIDIwICk7CisgICAgYyA9IGJ1ZiArIHNpemVvZihidWYpIC0gMjA7CisgICAgbGVuID0gMjA7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgYnVmLCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCBidWYsIE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcgKSApOworCisgICAgcmV0dXJuIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfZXh0ZW5zaW9uKCBjdHgsIE1CRURUTFNfT0lEX1NVQkpFQ1RfS0VZX0lERU5USUZJRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfU0laRSggTUJFRFRMU19PSURfU1VCSkVDVF9LRVlfSURFTlRJRklFUiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGJ1ZiArIHNpemVvZihidWYpIC0gbGVuLCBsZW4gKTsKK30KKworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfYXV0aG9yaXR5X2tleV9pZGVudGlmaWVyKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHggKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19NUElfTUFYX1NJWkUgKiAyICsgMjBdOyAvKiB0YWcsIGxlbmd0aCArIDJ4TVBJICovCisgICAgdW5zaWduZWQgY2hhciAqYyA9IGJ1ZiArIHNpemVvZihidWYpOworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZihidWYpICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19wa193cml0ZV9wdWJrZXkoICZjLCBidWYsIGN0eC0+aXNzdWVyX2tleSApICk7CisKKyAgICBtYmVkdGxzX3NoYTEoIGJ1ZiArIHNpemVvZihidWYpIC0gbGVuLCBsZW4sIGJ1ZiArIHNpemVvZihidWYpIC0gMjAgKTsKKyAgICBjID0gYnVmICsgc2l6ZW9mKGJ1ZikgLSAyMDsKKyAgICBsZW4gPSAyMDsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCBidWYsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIGJ1ZiwgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgfCAwICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCBidWYsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIGJ1ZiwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisKKyAgICByZXR1cm4gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9leHRlbnNpb24oIGN0eCwgTUJFRFRMU19PSURfQVVUSE9SSVRZX0tFWV9JREVOVElGSUVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9TSVpFKCBNQkVEVExTX09JRF9BVVRIT1JJVFlfS0VZX0lERU5USUZJRVIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYnVmICsgc2l6ZW9mKGJ1ZikgLSBsZW4sIGxlbiApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisKK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2tleV91c2FnZSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X3VzYWdlICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls0XSwga3U7CisgICAgdW5zaWduZWQgY2hhciAqYzsKKyAgICBpbnQgcmV0OworCisgICAgLyogV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCA3IGJpdHMsIGZyb20gMHg4MCB0byAweDAyICovCisgICAgaWYoICgga2V5X3VzYWdlICYgfjB4ZmUgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKworICAgIGMgPSBidWYgKyA0OworICAgIGt1ID0gKHVuc2lnbmVkIGNoYXIpIGtleV91c2FnZTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV93cml0ZV9iaXRzdHJpbmcoICZjLCBidWYsICZrdSwgNyApICkgIT0gNCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2V4dGVuc2lvbiggY3R4LCBNQkVEVExTX09JRF9LRVlfVVNBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9TSVpFKCBNQkVEVExTX09JRF9LRVlfVVNBR0UgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGJ1ZiwgNCApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfbnNfY2VydF90eXBlKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5zX2NlcnRfdHlwZSApCit7CisgICAgdW5zaWduZWQgY2hhciBidWZbNF07CisgICAgdW5zaWduZWQgY2hhciAqYzsKKyAgICBpbnQgcmV0OworCisgICAgYyA9IGJ1ZiArIDQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfd3JpdGVfYml0c3RyaW5nKCAmYywgYnVmLCAmbnNfY2VydF90eXBlLCA4ICkgKSAhPSA0ICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfZXh0ZW5zaW9uKCBjdHgsIE1CRURUTFNfT0lEX05TX0NFUlRfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1NJWkUoIE1CRURUTFNfT0lEX05TX0NFUlRfVFlQRSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYnVmLCA0ICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHg1MDlfd3JpdGVfdGltZSggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRpbWUsIHNpemVfdCBzaXplICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgLyoKKyAgICAgKiB3cml0ZSBNQkVEVExTX0FTTjFfVVRDX1RJTUUgaWYgeWVhciA8IDIwNTAgKDIgYnl0ZXMgc2hvcnRlcikKKyAgICAgKi8KKyAgICBpZiggdGltZVswXSA9PSAnMicgJiYgdGltZVsxXSA9PSAnMCcgJiYgdGltZSBbMl0gPCAnNScgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3Jhd19idWZmZXIoIHAsIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgdGltZSArIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIC0gMiApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHAsIHN0YXJ0LCBsZW4gKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCBwLCBzdGFydCwgTUJFRFRMU19BU04xX1VUQ19USU1FICkgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3Jhd19idWZmZXIoIHAsIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSB0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfR0VORVJBTElaRURfVElNRSApICk7CisgICAgfQorCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9kZXIoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBjaGFyICpzaWdfb2lkOworICAgIHNpemVfdCBzaWdfb2lkX2xlbiA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqYywgKmMyOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFs2NF07CisgICAgdW5zaWduZWQgY2hhciBzaWdbTUJFRFRMU19NUElfTUFYX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgdG1wX2J1ZlsyMDQ4XTsKKyAgICBzaXplX3Qgc3ViX2xlbiA9IDAsIHB1Yl9sZW4gPSAwLCBzaWdfYW5kX29pZF9sZW4gPSAwLCBzaWdfbGVuOworICAgIHNpemVfdCBsZW4gPSAwOworICAgIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZzsKKworICAgIC8qCisgICAgICogUHJlcGFyZSBkYXRhIHRvIGJlIHNpZ25lZCBpbiB0bXBfYnVmCisgICAgICovCisgICAgYyA9IHRtcF9idWYgKyBzaXplb2YoIHRtcF9idWYgKTsKKworICAgIC8qIFNpZ25hdHVyZSBhbGdvcml0aG0gbmVlZGVkIGluIFRCUywgYW5kIGxhdGVyIGZvciBhY3R1YWwgc2lnbmF0dXJlICovCisgICAgcGtfYWxnID0gbWJlZHRsc19wa19nZXRfdHlwZSggY3R4LT5pc3N1ZXJfa2V5ICk7CisgICAgaWYoIHBrX2FsZyA9PSBNQkVEVExTX1BLX0VDS0VZICkKKyAgICAgICAgcGtfYWxnID0gTUJFRFRMU19QS19FQ0RTQTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfc2lnX2FsZyggcGtfYWxnLCBjdHgtPm1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2lnX29pZCwgJnNpZ19vaWRfbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgRXh0ZW5zaW9ucyAgOjo9ICBTRVFVRU5DRSBTSVpFICgxLi5NQVgpIE9GIEV4dGVuc2lvbgorICAgICAqLworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfeDUwOV93cml0ZV9leHRlbnNpb25zKCAmYywgdG1wX2J1ZiwgY3R4LT5leHRlbnNpb25zICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgdG1wX2J1ZiwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgdG1wX2J1ZiwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCB0bXBfYnVmLCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCB0bXBfYnVmLCBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgMyApICk7CisKKyAgICAvKgorICAgICAqICBTdWJqZWN0UHVibGljS2V5SW5mbworICAgICAqLworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBwdWJfbGVuLCBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleV9kZXIoIGN0eC0+c3ViamVjdF9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfYnVmLCBjIC0gdG1wX2J1ZiApICk7CisgICAgYyAtPSBwdWJfbGVuOworICAgIGxlbiArPSBwdWJfbGVuOworCisgICAgLyoKKyAgICAgKiAgU3ViamVjdCAgOjo9ICBOYW1lCisgICAgICovCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc194NTA5X3dyaXRlX25hbWVzKCAmYywgdG1wX2J1ZiwgY3R4LT5zdWJqZWN0ICkgKTsKKworICAgIC8qCisgICAgICogIFZhbGlkaXR5IDo6PSBTRVFVRU5DRSB7CisgICAgICogICAgICAgbm90QmVmb3JlICAgICAgVGltZSwKKyAgICAgKiAgICAgICBub3RBZnRlciAgICAgICBUaW1lIH0KKyAgICAgKi8KKyAgICBzdWJfbGVuID0gMDsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBzdWJfbGVuLCB4NTA5X3dyaXRlX3RpbWUoICZjLCB0bXBfYnVmLCBjdHgtPm5vdF9hZnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19YNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBzdWJfbGVuLCB4NTA5X3dyaXRlX3RpbWUoICZjLCB0bXBfYnVmLCBjdHgtPm5vdF9iZWZvcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfWDUwOV9SRkM1MjgwX1VUQ19USU1FX0xFTiApICk7CisKKyAgICBsZW4gKz0gc3ViX2xlbjsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgdG1wX2J1Ziwgc3ViX2xlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIHRtcF9idWYsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKTsKKworICAgIC8qCisgICAgICogIElzc3VlciAgOjo9ICBOYW1lCisgICAgICovCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc194NTA5X3dyaXRlX25hbWVzKCAmYywgdG1wX2J1ZiwgY3R4LT5pc3N1ZXIgKSApOworCisgICAgLyoKKyAgICAgKiAgU2lnbmF0dXJlICAgOjo9ICBBbGdvcml0aG1JZGVudGlmaWVyCisgICAgICovCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2FsZ29yaXRobV9pZGVudGlmaWVyKCAmYywgdG1wX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2lnX29pZCwgc3RybGVuKCBzaWdfb2lkICksIDAgKSApOworCisgICAgLyoKKyAgICAgKiAgU2VyaWFsICAgOjo9ICBJTlRFR0VSCisgICAgICovCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX21waSggJmMsIHRtcF9idWYsICZjdHgtPnNlcmlhbCApICk7CisKKyAgICAvKgorICAgICAqICBWZXJzaW9uICA6Oj0gIElOVEVHRVIgIHsgIHYxKDApLCB2MigxKSwgdjMoMikgIH0KKyAgICAgKi8KKyAgICBzdWJfbGVuID0gMDsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggc3ViX2xlbiwgbWJlZHRsc19hc24xX3dyaXRlX2ludCggJmMsIHRtcF9idWYsIGN0eC0+dmVyc2lvbiApICk7CisgICAgbGVuICs9IHN1Yl9sZW47CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIHRtcF9idWYsIHN1Yl9sZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCB0bXBfYnVmLCBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgMCApICk7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgdG1wX2J1ZiwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgdG1wX2J1ZiwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworCisgICAgLyoKKyAgICAgKiBNYWtlIHNpZ25hdHVyZQorICAgICAqLworICAgIG1iZWR0bHNfbWQoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGN0eC0+bWRfYWxnICksIGMsIGxlbiwgaGFzaCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19zaWduKCBjdHgtPmlzc3Vlcl9rZXksIGN0eC0+bWRfYWxnLCBoYXNoLCAwLCBzaWcsICZzaWdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZfcm5nLCBwX3JuZyApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qCisgICAgICogV3JpdGUgZGF0YSB0byBvdXRwdXQgYnVmZmVyCisgICAgICovCisgICAgYzIgPSBidWYgKyBzaXplOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBzaWdfYW5kX29pZF9sZW4sIG1iZWR0bHNfeDUwOV93cml0ZV9zaWcoICZjMiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ19vaWQsIHNpZ19vaWRfbGVuLCBzaWcsIHNpZ19sZW4gKSApOworCisgICAgaWYoIGxlbiA+IChzaXplX3QpKCBjMiAtIGJ1ZiApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgIGMyIC09IGxlbjsKKyAgICBtZW1jcHkoIGMyLCBjLCBsZW4gKTsKKworICAgIGxlbiArPSBzaWdfYW5kX29pZF9sZW47CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMyLCBidWYsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMyLCBidWYsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKKyNkZWZpbmUgUEVNX0JFR0lOX0NSVCAgICAgICAgICAgIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxuIgorI2RlZmluZSBQRU1fRU5EX0NSVCAgICAgICAgICAgICAiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxuIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQoraW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9wZW0oIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmNydCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9idWZbNDA5Nl07CisgICAgc2l6ZV90IG9sZW4gPSAwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X2RlciggY3J0LCBvdXRwdXRfYnVmLCBzaXplb2Yob3V0cHV0X2J1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfcm5nLCBwX3JuZyApICkgPCAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wZW1fd3JpdGVfYnVmZmVyKCBQRU1fQkVHSU5fQ1JULCBQRU1fRU5EX0NSVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmICsgc2l6ZW9mKG91dHB1dF9idWYpIC0gcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCwgYnVmLCBzaXplLCAmb2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEVNX1dSSVRFX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOXdyaXRlX2Nzci5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOXdyaXRlX2Nzci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZDg1NmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94NTA5d3JpdGVfY3NyLmMKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiAgWC41MDkgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0IHdyaXRpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiBSZWZlcmVuY2VzOgorICogLSBDU1JzOiBQS0NTIzEwIHYxLjcgYWthIFJGQyAyOTg2CisgKiAtIGF0dHJpYnV0ZXM6IFBLQ1MjOSB2Mi4wIGFrYSBSRkMgMjk4NQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQykKKworI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jc3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYXNuMXdyaXRlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorI2VuZGlmCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3NyX2luaXQoIG1iZWR0bHNfeDUwOXdyaXRlX2NzciAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKG1iZWR0bHNfeDUwOXdyaXRlX2NzcikgKTsKK30KKwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfZnJlZSggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHggKQoreworICAgIG1iZWR0bHNfYXNuMV9mcmVlX25hbWVkX2RhdGFfbGlzdCggJmN0eC0+c3ViamVjdCApOworICAgIG1iZWR0bHNfYXNuMV9mcmVlX25hbWVkX2RhdGFfbGlzdCggJmN0eC0+ZXh0ZW5zaW9ucyApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZihtYmVkdGxzX3g1MDl3cml0ZV9jc3IpICk7Cit9CisKK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9tZF9hbGcoIG1iZWR0bHNfeDUwOXdyaXRlX2NzciAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcgKQoreworICAgIGN0eC0+bWRfYWxnID0gbWRfYWxnOworfQorCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfa2V5KCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwgbWJlZHRsc19wa19jb250ZXh0ICprZXkgKQoreworICAgIGN0eC0+a2V5ID0ga2V5OworfQorCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9zdWJqZWN0X25hbWUoIG1iZWR0bHNfeDUwOXdyaXRlX2NzciAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3ViamVjdF9uYW1lICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lcyggJmN0eC0+c3ViamVjdCwgc3ViamVjdF9uYW1lICk7Cit9CisKK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2V4dGVuc2lvbiggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLCBzaXplX3QgdmFsX2xlbiApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfeDUwOV9zZXRfZXh0ZW5zaW9uKCAmY3R4LT5leHRlbnNpb25zLCBvaWQsIG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgdmFsLCB2YWxfbGVuICk7Cit9CisKK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2tleV91c2FnZSggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsIHVuc2lnbmVkIGNoYXIga2V5X3VzYWdlICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKyAgICB1bnNpZ25lZCBjaGFyICpjOworICAgIGludCByZXQ7CisKKyAgICBjID0gYnVmICsgNDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV93cml0ZV9iaXRzdHJpbmcoICZjLCBidWYsICZrZXlfdXNhZ2UsIDcgKSApICE9IDQgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9leHRlbnNpb24oIGN0eCwgTUJFRFRMU19PSURfS0VZX1VTQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfU0laRSggTUJFRFRMU19PSURfS0VZX1VTQUdFICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIDQgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X25zX2NlcnRfdHlwZSggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5zX2NlcnRfdHlwZSApCit7CisgICAgdW5zaWduZWQgY2hhciBidWZbNF07CisgICAgdW5zaWduZWQgY2hhciAqYzsKKyAgICBpbnQgcmV0OworCisgICAgYyA9IGJ1ZiArIDQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfd3JpdGVfYml0c3RyaW5nKCAmYywgYnVmLCAmbnNfY2VydF90eXBlLCA4ICkgKSAhPSA0ICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfZXh0ZW5zaW9uKCBjdHgsIE1CRURUTFNfT0lEX05TX0NFUlRfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1NJWkUoIE1CRURUTFNfT0lEX05TX0NFUlRfVFlQRSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCA0ICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3NyX2RlciggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgY29uc3QgY2hhciAqc2lnX29pZDsKKyAgICBzaXplX3Qgc2lnX29pZF9sZW4gPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKmMsICpjMjsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbNjRdOworICAgIHVuc2lnbmVkIGNoYXIgc2lnW01CRURUTFNfTVBJX01BWF9TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcF9idWZbMjA0OF07CisgICAgc2l6ZV90IHB1Yl9sZW4gPSAwLCBzaWdfYW5kX29pZF9sZW4gPSAwLCBzaWdfbGVuOworICAgIHNpemVfdCBsZW4gPSAwOworICAgIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZzsKKworICAgIC8qCisgICAgICogUHJlcGFyZSBkYXRhIHRvIGJlIHNpZ25lZCBpbiB0bXBfYnVmCisgICAgICovCisgICAgYyA9IHRtcF9idWYgKyBzaXplb2YoIHRtcF9idWYgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfeDUwOV93cml0ZV9leHRlbnNpb25zKCAmYywgdG1wX2J1ZiwgY3R4LT5leHRlbnNpb25zICkgKTsKKworICAgIGlmKCBsZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIHRtcF9idWYsIGxlbiApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCB0bXBfYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworCisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCB0bXBfYnVmLCBsZW4gKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgdG1wX2J1ZiwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFVCApICk7CisKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX29pZCggJmMsIHRtcF9idWYsIE1CRURUTFNfT0lEX1BLQ1M5X0NTUl9FWFRfUkVRLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfU0laRSggTUJFRFRMU19PSURfUEtDUzlfQ1NSX0VYVF9SRVEgKSApICk7CisKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIHRtcF9idWYsIGxlbiApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCB0bXBfYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworICAgIH0KKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCB0bXBfYnVmLCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCB0bXBfYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBwdWJfbGVuLCBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleV9kZXIoIGN0eC0+a2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX2J1ZiwgYyAtIHRtcF9idWYgKSApOworICAgIGMgLT0gcHViX2xlbjsKKyAgICBsZW4gKz0gcHViX2xlbjsKKworICAgIC8qCisgICAgICogIFN1YmplY3QgIDo6PSAgTmFtZQorICAgICAqLworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfeDUwOV93cml0ZV9uYW1lcyggJmMsIHRtcF9idWYsIGN0eC0+c3ViamVjdCApICk7CisKKyAgICAvKgorICAgICAqICBWZXJzaW9uICA6Oj0gIElOVEVHRVIgIHsgIHYxKDApLCB2MigxKSwgdjMoMikgIH0KKyAgICAgKi8KKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfaW50KCAmYywgdG1wX2J1ZiwgMCApICk7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgdG1wX2J1ZiwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgdG1wX2J1ZiwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworCisgICAgLyoKKyAgICAgKiBQcmVwYXJlIHNpZ25hdHVyZQorICAgICAqLworICAgIG1iZWR0bHNfbWQoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGN0eC0+bWRfYWxnICksIGMsIGxlbiwgaGFzaCApOworCisgICAgcGtfYWxnID0gbWJlZHRsc19wa19nZXRfdHlwZSggY3R4LT5rZXkgKTsKKyAgICBpZiggcGtfYWxnID09IE1CRURUTFNfUEtfRUNLRVkgKQorICAgICAgICBwa19hbGcgPSBNQkVEVExTX1BLX0VDRFNBOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19zaWduKCBjdHgtPmtleSwgY3R4LT5tZF9hbGcsIGhhc2gsIDAsIHNpZywgJnNpZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgZl9ybmcsIHBfcm5nICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9zaWdfYWxnKCBwa19hbGcsIGN0eC0+bWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWdfb2lkLCAmc2lnX29pZF9sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdyaXRlIGRhdGEgdG8gb3V0cHV0IGJ1ZmZlcgorICAgICAqLworICAgIGMyID0gYnVmICsgc2l6ZTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggc2lnX2FuZF9vaWRfbGVuLCBtYmVkdGxzX3g1MDlfd3JpdGVfc2lnKCAmYzIsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdfb2lkLCBzaWdfb2lkX2xlbiwgc2lnLCBzaWdfbGVuICkgKTsKKworICAgIGlmKCBsZW4gPiAoc2l6ZV90KSggYzIgLSBidWYgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICBjMiAtPSBsZW47CisgICAgbWVtY3B5KCBjMiwgYywgbGVuICk7CisKKyAgICBsZW4gKz0gc2lnX2FuZF9vaWRfbGVuOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjMiwgYnVmLCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjMiwgYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCisjZGVmaW5lIFBFTV9CRUdJTl9DU1IgICAgICAgICAgICItLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLVxuIgorI2RlZmluZSBQRU1fRU5EX0NTUiAgICAgICAgICAgICAiLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tXG4iCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3NyX3BlbSggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfYnVmWzQwOTZdOworICAgIHNpemVfdCBvbGVuID0gMDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9kZXIoIGN0eCwgb3V0cHV0X2J1Ziwgc2l6ZW9mKG91dHB1dF9idWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3JuZywgcF9ybmcgKSApIDwgMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlciggUEVNX0JFR0lOX0NTUiwgUEVNX0VORF9DU1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1ZiArIHNpemVvZihvdXRwdXRfYnVmKSAtIHJldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQsIGJ1Ziwgc2l6ZSwgJm9sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9XUklURV9DICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3h0ZWEuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3h0ZWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTBhMzUwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveHRlYS5jCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogIEFuIDMyLWJpdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgWFRFQSBhbGdvcml0aG0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YVEVBX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3h0ZWEuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1hURUFfQUxUKQorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uIG1hY3JvcyAoYmlnIGVuZGlhbikKKyAqLworI2lmbmRlZiBHRVRfVUlOVDMyX0JFCisjZGVmaW5lIEdFVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChuKSA9ICggKHVpbnQzMl90KSAoYilbKGkpICAgIF0gPDwgMjQgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAxXSA8PCAxNiApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDJdIDw8ICA4ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgM10gICAgICAgKTsgICAgICAgICAgICBcCit9CisjZW5kaWYKKworI2lmbmRlZiBQVVRfVUlOVDMyX0JFCisjZGVmaW5lIFBVVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChiKVsoaSkgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAyNCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDFdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDE2ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgMl0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gIDggKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSAgICAgICApOyAgICAgICBcCit9CisjZW5kaWYKKwordm9pZCBtYmVkdGxzX3h0ZWFfaW5pdCggbWJlZHRsc194dGVhX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc194dGVhX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfeHRlYV9mcmVlKCBtYmVkdGxzX3h0ZWFfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX3h0ZWFfY29udGV4dCApICk7Cit9CisKKy8qCisgKiBYVEVBIGtleSBzY2hlZHVsZQorICovCit2b2lkIG1iZWR0bHNfeHRlYV9zZXR1cCggbWJlZHRsc194dGVhX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdICkKK3sKKyAgICBpbnQgaTsKKworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YobWJlZHRsc194dGVhX2NvbnRleHQpICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgNDsgaSsrICkKKyAgICB7CisgICAgICAgIEdFVF9VSU5UMzJfQkUoIGN0eC0+a1tpXSwga2V5LCBpIDw8IDIgKTsKKyAgICB9Cit9CisKKy8qCisgKiBYVEVBIGVuY3J5cHQgZnVuY3Rpb24KKyAqLworaW50IG1iZWR0bHNfeHRlYV9jcnlwdF9lY2IoIG1iZWR0bHNfeHRlYV9jb250ZXh0ICpjdHgsIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzhdLCB1bnNpZ25lZCBjaGFyIG91dHB1dFs4XSkKK3sKKyAgICB1aW50MzJfdCAqaywgdjAsIHYxLCBpOworCisgICAgayA9IGN0eC0+azsKKworICAgIEdFVF9VSU5UMzJfQkUoIHYwLCBpbnB1dCwgMCApOworICAgIEdFVF9VSU5UMzJfQkUoIHYxLCBpbnB1dCwgNCApOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19YVEVBX0VOQ1JZUFQgKQorICAgIHsKKyAgICAgICAgdWludDMyX3Qgc3VtID0gMCwgZGVsdGEgPSAweDlFMzc3OUI5OworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCAzMjsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgdjAgKz0gKCgodjEgPDwgNCkgXiAodjEgPj4gNSkpICsgdjEpIF4gKHN1bSArIGtbc3VtICYgM10pOworICAgICAgICAgICAgc3VtICs9IGRlbHRhOworICAgICAgICAgICAgdjEgKz0gKCgodjAgPDwgNCkgXiAodjAgPj4gNSkpICsgdjApIF4gKHN1bSArIGtbKHN1bT4+MTEpICYgM10pOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgLyogTUJFRFRMU19YVEVBX0RFQ1JZUFQgKi8KKyAgICB7CisgICAgICAgIHVpbnQzMl90IGRlbHRhID0gMHg5RTM3NzlCOSwgc3VtID0gZGVsdGEgKiAzMjsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgMzI7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHYxIC09ICgoKHYwIDw8IDQpIF4gKHYwID4+IDUpKSArIHYwKSBeIChzdW0gKyBrWyhzdW0+PjExKSAmIDNdKTsKKyAgICAgICAgICAgIHN1bSAtPSBkZWx0YTsKKyAgICAgICAgICAgIHYwIC09ICgoKHYxIDw8IDQpIF4gKHYxID4+IDUpKSArIHYxKSBeIChzdW0gKyBrW3N1bSAmIDNdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBVVF9VSU5UMzJfQkUoIHYwLCBvdXRwdXQsIDAgKTsKKyAgICBQVVRfVUlOVDMyX0JFKCB2MSwgb3V0cHV0LCA0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisvKgorICogWFRFQS1DQkMgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICovCitpbnQgbWJlZHRsc194dGVhX2NyeXB0X2NiYyggbWJlZHRsc194dGVhX2NvbnRleHQgKmN0eCwgaW50IG1vZGUsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbOF0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQpCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciB0ZW1wWzhdOworCisgICAgaWYoIGxlbmd0aCAlIDggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1hURUFfSU5WQUxJRF9JTlBVVF9MRU5HVEggKTsKKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfWFRFQV9ERUNSWVBUICkKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGggPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KCB0ZW1wLCBpbnB1dCwgOCApOworICAgICAgICAgICAgbWJlZHRsc194dGVhX2NyeXB0X2VjYiggY3R4LCBtb2RlLCBpbnB1dCwgb3V0cHV0ICk7CisKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSggb3V0cHV0W2ldIF4gaXZbaV0gKTsKKworICAgICAgICAgICAgbWVtY3B5KCBpdiwgdGVtcCwgOCApOworCisgICAgICAgICAgICBpbnB1dCAgKz0gODsKKyAgICAgICAgICAgIG91dHB1dCArPSA4OworICAgICAgICAgICAgbGVuZ3RoIC09IDg7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICAgICAgICAgICAgICBvdXRwdXRbaV0gPSAodW5zaWduZWQgY2hhcikoIGlucHV0W2ldIF4gaXZbaV0gKTsKKworICAgICAgICAgICAgbWJlZHRsc194dGVhX2NyeXB0X2VjYiggY3R4LCBtb2RlLCBvdXRwdXQsIG91dHB1dCApOworICAgICAgICAgICAgbWVtY3B5KCBpdiwgb3V0cHV0LCA4ICk7CisKKyAgICAgICAgICAgIGlucHV0ICArPSA4OworICAgICAgICAgICAgb3V0cHV0ICs9IDg7CisgICAgICAgICAgICBsZW5ndGggLT0gODsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogIU1CRURUTFNfWFRFQV9BTFQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKKy8qCisgKiBYVEVBIHRlc3RzIHZlY3RvcnMgKG5vbi1vZmZpY2lhbCkKKyAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB4dGVhX3Rlc3Rfa2V5WzZdWzE2XSA9Cit7CisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsCisgICAgIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwKKyAgICAgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBhLCAweDBiLAorICAgICAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHh0ZWFfdGVzdF9wdFs2XVs4XSA9Cit7CisgICAgeyAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4IH0sCisgICAgeyAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxIH0sCisgICAgeyAweDVhLCAweDViLCAweDZlLCAweDI3LCAweDg5LCAweDQ4LCAweGQ3LCAweDdmIH0sCisgICAgeyAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4IH0sCisgICAgeyAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxIH0sCisgICAgeyAweDcwLCAweGUxLCAweDIyLCAweDVkLCAweDZlLCAweDRlLCAweDc2LCAweDU1IH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHh0ZWFfdGVzdF9jdFs2XVs4XSA9Cit7CisgICAgeyAweDQ5LCAweDdkLCAweGYzLCAweGQwLCAweDcyLCAweDYxLCAweDJjLCAweGI1IH0sCisgICAgeyAweGU3LCAweDhmLCAweDJkLCAweDEzLCAweDc0LCAweDQzLCAweDQxLCAweGQ4IH0sCisgICAgeyAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxIH0sCisgICAgeyAweGEwLCAweDM5LCAweDA1LCAweDg5LCAweGY4LCAweGI4LCAweGVmLCAweGE1IH0sCisgICAgeyAweGVkLCAweDIzLCAweDM3LCAweDVhLCAweDgyLCAweDFhLCAweDhjLCAweDJkIH0sCisgICAgeyAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxIH0KK307CisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfeHRlYV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgaSwgcmV0ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKKyAgICBtYmVkdGxzX3h0ZWFfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX3h0ZWFfaW5pdCggJmN0eCApOworICAgIGZvciggaSA9IDA7IGkgPCA2OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWFRFQSB0ZXN0ICMlZDogIiwgaSArIDEgKTsKKworICAgICAgICBtZW1jcHkoIGJ1ZiwgeHRlYV90ZXN0X3B0W2ldLCA4ICk7CisKKyAgICAgICAgbWJlZHRsc194dGVhX3NldHVwKCAmY3R4LCB4dGVhX3Rlc3Rfa2V5W2ldICk7CisgICAgICAgIG1iZWR0bHNfeHRlYV9jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfWFRFQV9FTkNSWVBULCBidWYsIGJ1ZiApOworCisgICAgICAgIGlmKCBtZW1jbXAoIGJ1ZiwgeHRlYV90ZXN0X2N0W2ldLCA4ICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194dGVhX2ZyZWUoICZjdHggKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19YVEVBX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2RhZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsOCBAQAorYWRkX3N1YmRpcmVjdG9yeShhZXMpCithZGRfc3ViZGlyZWN0b3J5KGhhc2gpCithZGRfc3ViZGlyZWN0b3J5KHBrZXkpCithZGRfc3ViZGlyZWN0b3J5KHJhbmRvbSkKK2FkZF9zdWJkaXJlY3Rvcnkoc3NsKQorYWRkX3N1YmRpcmVjdG9yeSh0ZXN0KQorYWRkX3N1YmRpcmVjdG9yeSh4NTA5KQorYWRkX3N1YmRpcmVjdG9yeSh1dGlsKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL01ha2VmaWxlIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MzY4OWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvTWFrZWZpbGUKQEAgLTAsMCArMSwyODggQEAKKworIyBUbyBjb21waWxlIG9uIFN1bk9TOiBhZGQgIi1sc29ja2V0IC1sbnNsIiB0byBMREZMQUdTCisjIFRvIGNvbXBpbGUgd2l0aCBQS0NTMTE6IGFkZCAiLWxwa2NzMTEtaGVscGVyIiB0byBMREZMQUdTCisKK0NGTEFHUwk/PSAtTzIKK1dBUk5JTkdfQ0ZMQUdTID89IC1XYWxsIC1XIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50CitMREZMQUdTID89CisKK0xPQ0FMX0NGTEFHUyA9ICQoV0FSTklOR19DRkxBR1MpIC1JLi4vaW5jbHVkZSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0CitMT0NBTF9MREZMQUdTID0gLUwuLi9saWJyYXJ5IAkJCVwKKwkJLWxtYmVkdGxzJChTSEFSRURfU1VGRklYKQlcCisJCS1sbWJlZHg1MDkkKFNIQVJFRF9TVUZGSVgpCVwKKwkJLWxtYmVkY3J5cHRvJChTSEFSRURfU1VGRklYKQorCitpZm5kZWYgU0hBUkVECitERVA9Li4vbGlicmFyeS9saWJtYmVkY3J5cHRvLmEgLi4vbGlicmFyeS9saWJtYmVkeDUwOS5hIC4uL2xpYnJhcnkvbGlibWJlZHRscy5hCitlbHNlCitERVA9Li4vbGlicmFyeS9saWJtYmVkY3J5cHRvLiQoRExFWFQpIC4uL2xpYnJhcnkvbGlibWJlZHg1MDkuJChETEVYVCkgLi4vbGlicmFyeS9saWJtYmVkdGxzLiQoRExFWFQpCitlbmRpZgorCitpZmRlZiBERUJVRworTE9DQUxfQ0ZMQUdTICs9IC1nMworZW5kaWYKKworIyBpZiB3ZSdyZSBydW5uaW5nIG9uIFdpbmRvd3MsIGJ1aWxkIGZvciBXaW5kb3dzCitpZmRlZiBXSU5ET1dTCitXSU5ET1dTX0JVSUxEPTEKK2VuZGlmCisKK2lmZGVmIFdJTkRPV1NfQlVJTEQKK0RMRVhUPWRsbAorRVhFWFQ9LmV4ZQorTE9DQUxfTERGTEFHUyArPSAtbHdzMl8zMgoraWZkZWYgU0hBUkVECitTSEFSRURfU1VGRklYPS4kKERMRVhUKQorZW5kaWYKK2Vsc2UKK0RMRVhUPXNvCitFWEVYVD0KK1NIQVJFRF9TVUZGSVg9CitlbmRpZgorCisjIFpsaWIgc2hhcmVkIGxpYnJhcnkgZXh0ZW5zaW9uczoKK2lmZGVmIFpMSUIKK0xPQ0FMX0xERkxBR1MgKz0gLWx6CitlbmRpZgorCitBUFBTID0JYWVzL2Flc2NyeXB0MiQoRVhFWFQpCQlhZXMvY3J5cHRfYW5kX2hhc2gkKEVYRVhUKQlcCisJaGFzaC9oZWxsbyQoRVhFWFQpCQloYXNoL2dlbmVyaWNfc3VtJChFWEVYVCkJXAorCQkJCQlwa2V5L2RoX2NsaWVudCQoRVhFWFQpCQlcCisJcGtleS9kaF9nZW5wcmltZSQoRVhFWFQpCXBrZXkvZGhfc2VydmVyJChFWEVYVCkJCVwKKwlwa2V5L2VjZGhfY3VydmUyNTUxOSQoRVhFWFQpCQkJCQlcCisJcGtleS9lY2RzYSQoRVhFWFQpCQlwa2V5L2dlbl9rZXkkKEVYRVhUKQkJXAorCXBrZXkva2V5X2FwcCQoRVhFWFQpCQlwa2V5L2tleV9hcHBfd3JpdGVyJChFWEVYVCkJXAorCXBrZXkvbXBpX2RlbW8kKEVYRVhUKQkJcGtleS9wa19kZWNyeXB0JChFWEVYVCkJCVwKKwlwa2V5L3BrX2VuY3J5cHQkKEVYRVhUKQkJcGtleS9wa19zaWduJChFWEVYVCkJCVwKKwlwa2V5L3BrX3ZlcmlmeSQoRVhFWFQpCQlwa2V5L3JzYV9nZW5rZXkkKEVYRVhUKQkJXAorCXBrZXkvcnNhX2RlY3J5cHQkKEVYRVhUKQlwa2V5L3JzYV9lbmNyeXB0JChFWEVYVCkJXAorCXBrZXkvcnNhX3NpZ24kKEVYRVhUKQkJcGtleS9yc2FfdmVyaWZ5JChFWEVYVCkJCVwKKwlwa2V5L3JzYV9zaWduX3BzcyQoRVhFWFQpCXBrZXkvcnNhX3ZlcmlmeV9wc3MkKEVYRVhUKQlcCisJc3NsL2R0bHNfY2xpZW50JChFWEVYVCkJCXNzbC9kdGxzX3NlcnZlciQoRVhFWFQpCQlcCisJc3NsL3NzbF9jbGllbnQxJChFWEVYVCkJCXNzbC9zc2xfY2xpZW50MiQoRVhFWFQpCQlcCisJc3NsL3NzbF9zZXJ2ZXIkKEVYRVhUKQkJc3NsL3NzbF9zZXJ2ZXIyJChFWEVYVCkJCVwKKwlzc2wvc3NsX2Zvcmtfc2VydmVyJChFWEVYVCkJc3NsL21pbmlfY2xpZW50JChFWEVYVCkJCVwKKwlzc2wvc3NsX21haWxfY2xpZW50JChFWEVYVCkJcmFuZG9tL2dlbl9lbnRyb3B5JChFWEVYVCkJXAorCXJhbmRvbS9nZW5fcmFuZG9tX2hhdmVnZSQoRVhFWFQpCQkJCVwKKwlyYW5kb20vZ2VuX3JhbmRvbV9jdHJfZHJiZyQoRVhFWFQpCQkJCVwKKwl0ZXN0L3NzbF9jZXJ0X3Rlc3QkKEVYRVhUKQl0ZXN0L2JlbmNobWFyayQoRVhFWFQpCQlcCisJdGVzdC9zZWxmdGVzdCQoRVhFWFQpCQl0ZXN0L3VkcF9wcm94eSQoRVhFWFQpCQlcCisJdXRpbC9wZW0yZGVyJChFWEVYVCkJCXV0aWwvc3RyZXJyb3IkKEVYRVhUKQkJXAorCXg1MDkvY2VydF9hcHAkKEVYRVhUKQkJeDUwOS9jcmxfYXBwJChFWEVYVCkJCVwKKwl4NTA5L2NlcnRfcmVxJChFWEVYVCkJCXg1MDkvY2VydF93cml0ZSQoRVhFWFQpCQlcCisJeDUwOS9yZXFfYXBwJChFWEVYVCkKKworaWZkZWYgUFRIUkVBRAorQVBQUyArPQlzc2wvc3NsX3B0aHJlYWRfc2VydmVyJChFWEVYVCkKK2VuZGlmCisKKy5TSUxFTlQ6CisKKy5QSE9OWTogYWxsIGNsZWFuIGxpc3QKKworYWxsOiAkKEFQUFMpCisKKyQoREVQKToKKwkkKE1BS0UpIC1DIC4uL2xpYnJhcnkKKworYWVzL2Flc2NyeXB0MiQoRVhFWFQpOiBhZXMvYWVzY3J5cHQyLmMgJChERVApCisJZWNobyAiICBDQyAgICBhZXMvYWVzY3J5cHQyLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBhZXMvYWVzY3J5cHQyLmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK2Flcy9jcnlwdF9hbmRfaGFzaCQoRVhFWFQpOiBhZXMvY3J5cHRfYW5kX2hhc2guYyAkKERFUCkKKwllY2hvICIgIENDICAgIGFlcy9jcnlwdF9hbmRfaGFzaC5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgYWVzL2NyeXB0X2FuZF9oYXNoLmMgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK2hhc2gvaGVsbG8kKEVYRVhUKTogaGFzaC9oZWxsby5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgaGFzaC9oZWxsby5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgaGFzaC9oZWxsby5jICAgICAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitoYXNoL2dlbmVyaWNfc3VtJChFWEVYVCk6IGhhc2gvZ2VuZXJpY19zdW0uYyAkKERFUCkKKwllY2hvICIgIENDICAgIGhhc2gvZ2VuZXJpY19zdW0uYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIGhhc2gvZ2VuZXJpY19zdW0uYyAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9kaF9jbGllbnQkKEVYRVhUKTogcGtleS9kaF9jbGllbnQuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvZGhfY2xpZW50LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L2RoX2NsaWVudC5jICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvZGhfZ2VucHJpbWUkKEVYRVhUKTogcGtleS9kaF9nZW5wcmltZS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9kaF9nZW5wcmltZS5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9kaF9nZW5wcmltZS5jICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitwa2V5L2RoX3NlcnZlciQoRVhFWFQpOiBwa2V5L2RoX3NlcnZlci5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9kaF9zZXJ2ZXIuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHBrZXkvZGhfc2VydmVyLmMgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9lY2RoX2N1cnZlMjU1MTkkKEVYRVhUKTogcGtleS9lY2RoX2N1cnZlMjU1MTkuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvZWNkaF9jdXJ2ZTI1NTE5LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L2VjZGhfY3VydmUyNTUxOS5jICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvZWNkc2EkKEVYRVhUKTogcGtleS9lY2RzYS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9lY2RzYS5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9lY2RzYS5jICAgICAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitwa2V5L2dlbl9rZXkkKEVYRVhUKTogcGtleS9nZW5fa2V5LmMgJChERVApCisJZWNobyAiICBDQyAgICBwa2V5L2dlbl9rZXkuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHBrZXkvZ2VuX2tleS5jICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkva2V5X2FwcCQoRVhFWFQpOiBwa2V5L2tleV9hcHAuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkva2V5X2FwcC5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9rZXlfYXBwLmMgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9rZXlfYXBwX3dyaXRlciQoRVhFWFQpOiBwa2V5L2tleV9hcHBfd3JpdGVyLmMgJChERVApCisJZWNobyAiICBDQyAgICBwa2V5L2tleV9hcHBfd3JpdGVyLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L2tleV9hcHBfd3JpdGVyLmMgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9tcGlfZGVtbyQoRVhFWFQpOiBwa2V5L21waV9kZW1vLmMgJChERVApCisJZWNobyAiICBDQyAgICBwa2V5L21waV9kZW1vLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L21waV9kZW1vLmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvcGtfZGVjcnlwdCQoRVhFWFQpOiBwa2V5L3BrX2RlY3J5cHQuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvcGtfZGVjcnlwdC5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9wa19kZWNyeXB0LmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvcGtfZW5jcnlwdCQoRVhFWFQpOiBwa2V5L3BrX2VuY3J5cHQuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvcGtfZW5jcnlwdC5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9wa19lbmNyeXB0LmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvcGtfc2lnbiQoRVhFWFQpOiBwa2V5L3BrX3NpZ24uYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvcGtfc2lnbi5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9wa19zaWduLmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvcGtfdmVyaWZ5JChFWEVYVCk6IHBrZXkvcGtfdmVyaWZ5LmMgJChERVApCisJZWNobyAiICBDQyAgICBwa2V5L3BrX3ZlcmlmeS5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9wa192ZXJpZnkuYyAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvcnNhX2dlbmtleSQoRVhFWFQpOiBwa2V5L3JzYV9nZW5rZXkuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvcnNhX2dlbmtleS5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9yc2FfZ2Vua2V5LmMgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitwa2V5L3JzYV9zaWduJChFWEVYVCk6IHBrZXkvcnNhX3NpZ24uYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvcnNhX3NpZ24uYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHBrZXkvcnNhX3NpZ24uYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9yc2FfdmVyaWZ5JChFWEVYVCk6IHBrZXkvcnNhX3ZlcmlmeS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9yc2FfdmVyaWZ5LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L3JzYV92ZXJpZnkuYyAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvcnNhX3NpZ25fcHNzJChFWEVYVCk6IHBrZXkvcnNhX3NpZ25fcHNzLmMgJChERVApCisJZWNobyAiICBDQyAgICBwa2V5L3JzYV9zaWduX3Bzcy5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9yc2Ffc2lnbl9wc3MuYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9yc2FfdmVyaWZ5X3BzcyQoRVhFWFQpOiBwa2V5L3JzYV92ZXJpZnlfcHNzLmMgJChERVApCisJZWNobyAiICBDQyAgICBwa2V5L3JzYV92ZXJpZnlfcHNzLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L3JzYV92ZXJpZnlfcHNzLmMgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitwa2V5L3JzYV9kZWNyeXB0JChFWEVYVCk6IHBrZXkvcnNhX2RlY3J5cHQuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvcnNhX2RlY3J5cHQuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHBrZXkvcnNhX2RlY3J5cHQuYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9yc2FfZW5jcnlwdCQoRVhFWFQpOiBwa2V5L3JzYV9lbmNyeXB0LmMgJChERVApCisJZWNobyAiICBDQyAgICBwa2V5L3JzYV9lbmNyeXB0LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L3JzYV9lbmNyeXB0LmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3JhbmRvbS9nZW5fZW50cm9weSQoRVhFWFQpOiByYW5kb20vZ2VuX2VudHJvcHkuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHJhbmRvbS9nZW5fZW50cm9weS5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcmFuZG9tL2dlbl9lbnRyb3B5LmMgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3JhbmRvbS9nZW5fcmFuZG9tX2hhdmVnZSQoRVhFWFQpOiByYW5kb20vZ2VuX3JhbmRvbV9oYXZlZ2UuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHJhbmRvbS9nZW5fcmFuZG9tX2hhdmVnZS5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcmFuZG9tL2dlbl9yYW5kb21faGF2ZWdlLmMgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3JhbmRvbS9nZW5fcmFuZG9tX2N0cl9kcmJnJChFWEVYVCk6IHJhbmRvbS9nZW5fcmFuZG9tX2N0cl9kcmJnLmMgJChERVApCisJZWNobyAiICBDQyAgICByYW5kb20vZ2VuX3JhbmRvbV9jdHJfZHJiZy5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcmFuZG9tL2dlbl9yYW5kb21fY3RyX2RyYmcuYyAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworc3NsL2R0bHNfY2xpZW50JChFWEVYVCk6IHNzbC9kdGxzX2NsaWVudC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgc3NsL2R0bHNfY2xpZW50LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBzc2wvZHRsc19jbGllbnQuYyAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3NzbC9kdGxzX3NlcnZlciQoRVhFWFQpOiBzc2wvZHRsc19zZXJ2ZXIuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHNzbC9kdGxzX3NlcnZlci5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgc3NsL2R0bHNfc2VydmVyLmMgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitzc2wvc3NsX2NsaWVudDEkKEVYRVhUKTogc3NsL3NzbF9jbGllbnQxLmMgJChERVApCisJZWNobyAiICBDQyAgICBzc2wvc3NsX2NsaWVudDEuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHNzbC9zc2xfY2xpZW50MS5jICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworc3NsL3NzbF9jbGllbnQyJChFWEVYVCk6IHNzbC9zc2xfY2xpZW50Mi5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgc3NsL3NzbF9jbGllbnQyLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBzc2wvc3NsX2NsaWVudDIuYyAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3NzbC9zc2xfc2VydmVyJChFWEVYVCk6IHNzbC9zc2xfc2VydmVyLmMgJChERVApCisJZWNobyAiICBDQyAgICBzc2wvc3NsX3NlcnZlci5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgc3NsL3NzbF9zZXJ2ZXIuYyAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitzc2wvc3NsX3NlcnZlcjIkKEVYRVhUKTogc3NsL3NzbF9zZXJ2ZXIyLmMgJChERVApCisJZWNobyAiICBDQyAgICBzc2wvc3NsX3NlcnZlcjIuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHNzbC9zc2xfc2VydmVyMi5jICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3NzbC9zc2xfZm9ya19zZXJ2ZXIkKEVYRVhUKTogc3NsL3NzbF9mb3JrX3NlcnZlci5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgc3NsL3NzbF9mb3JrX3NlcnZlci5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgc3NsL3NzbF9mb3JrX3NlcnZlci5jICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3NzbC9zc2xfcHRocmVhZF9zZXJ2ZXIkKEVYRVhUKTogc3NsL3NzbF9wdGhyZWFkX3NlcnZlci5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgc3NsL3NzbF9wdGhyZWFkX3NlcnZlci5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgc3NsL3NzbF9wdGhyZWFkX3NlcnZlci5jICAgJChMT0NBTF9MREZMQUdTKSAtbHB0aHJlYWQgICQoTERGTEFHUykgLW8gJEAKKworc3NsL3NzbF9tYWlsX2NsaWVudCQoRVhFWFQpOiBzc2wvc3NsX21haWxfY2xpZW50LmMgJChERVApCisJZWNobyAiICBDQyAgICBzc2wvc3NsX21haWxfY2xpZW50LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBzc2wvc3NsX21haWxfY2xpZW50LmMgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworc3NsL21pbmlfY2xpZW50JChFWEVYVCk6IHNzbC9taW5pX2NsaWVudC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgc3NsL21pbmlfY2xpZW50LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBzc2wvbWluaV9jbGllbnQuYyAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0L3NzbF9jZXJ0X3Rlc3QkKEVYRVhUKTogdGVzdC9zc2xfY2VydF90ZXN0LmMgJChERVApCisJZWNobyAiICBDQyAgICB0ZXN0L3NzbF9jZXJ0X3Rlc3QuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHRlc3Qvc3NsX2NlcnRfdGVzdC5jICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3QvYmVuY2htYXJrJChFWEVYVCk6IHRlc3QvYmVuY2htYXJrLmMgJChERVApCisJZWNobyAiICBDQyAgICB0ZXN0L2JlbmNobWFyay5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgdGVzdC9iZW5jaG1hcmsuYyAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0L3NlbGZ0ZXN0JChFWEVYVCk6IHRlc3Qvc2VsZnRlc3QuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHRlc3Qvc2VsZnRlc3QuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHRlc3Qvc2VsZnRlc3QuYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdC91ZHBfcHJveHkkKEVYRVhUKTogdGVzdC91ZHBfcHJveHkuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHRlc3QvdWRwX3Byb3h5LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSB0ZXN0L3VkcF9wcm94eS5jICAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit1dGlsL3BlbTJkZXIkKEVYRVhUKTogdXRpbC9wZW0yZGVyLmMgJChERVApCisJZWNobyAiICBDQyAgICB1dGlsL3BlbTJkZXIuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHV0aWwvcGVtMmRlci5jICAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit1dGlsL3N0cmVycm9yJChFWEVYVCk6IHV0aWwvc3RyZXJyb3IuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHV0aWwvc3RyZXJyb3IuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHV0aWwvc3RyZXJyb3IuYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworeDUwOS9jZXJ0X2FwcCQoRVhFWFQpOiB4NTA5L2NlcnRfYXBwLmMgJChERVApCisJZWNobyAiICBDQyAgICB4NTA5L2NlcnRfYXBwLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSB4NTA5L2NlcnRfYXBwLmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3g1MDkvY2VydF93cml0ZSQoRVhFWFQpOiB4NTA5L2NlcnRfd3JpdGUuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHg1MDkvY2VydF93cml0ZS5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgeDUwOS9jZXJ0X3dyaXRlLmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3g1MDkvY3JsX2FwcCQoRVhFWFQpOiB4NTA5L2NybF9hcHAuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHg1MDkvY3JsX2FwcC5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgeDUwOS9jcmxfYXBwLmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3g1MDkvY2VydF9yZXEkKEVYRVhUKTogeDUwOS9jZXJ0X3JlcS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgeDUwOS9jZXJ0X3JlcS5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgeDUwOS9jZXJ0X3JlcS5jICAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit4NTA5L3JlcV9hcHAkKEVYRVhUKTogeDUwOS9yZXFfYXBwLmMgJChERVApCisJZWNobyAiICBDQyAgICB4NTA5L3JlcV9hcHAuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHg1MDkvcmVxX2FwcC5jICAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitjbGVhbjoKK2lmbmRlZiBXSU5ET1dTCisJcm0gLWYgJChBUFBTKQorZWxzZQorCWRlbCAvUyAvUSAvRiAqLm8gKi5leGUKK2VuZGlmCisKK2xpc3Q6CisJZWNobyAkKEFQUFMpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvYWVzL0NNYWtlTGlzdHMudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2Flcy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWEwY2FhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2Flcy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDkgQEAKK2FkZF9leGVjdXRhYmxlKGFlc2NyeXB0MiBhZXNjcnlwdDIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhhZXNjcnlwdDIgbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUoY3J5cHRfYW5kX2hhc2ggY3J5cHRfYW5kX2hhc2guYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhjcnlwdF9hbmRfaGFzaCBtYmVkdGxzKQorCitpbnN0YWxsKFRBUkdFVFMgYWVzY3J5cHQyIGNyeXB0X2FuZF9oYXNoCisgICAgICAgIERFU1RJTkFUSU9OICJiaW4iCisgICAgICAgIFBFUk1JU1NJT05TIE9XTkVSX1JFQUQgT1dORVJfV1JJVEUgT1dORVJfRVhFQ1VURSBHUk9VUF9SRUFEIEdST1VQX0VYRUNVVEUgV09STERfUkVBRCBXT1JMRF9FWEVDVVRFKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2Flcy9hZXNjcnlwdDIuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9hZXMvYWVzY3J5cHQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3ZDc3ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9hZXMvYWVzY3J5cHQyLmMKQEAgLTAsMCArMSw0NTIgQEAKKy8qCisgKiAgQUVTLTI1NiBmaWxlIGVuY3J5cHRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvYWVzLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZiAhZGVmaW5lZChfV0lOMzJfV0NFKQorI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2RlZmluZSBNT0RFX0VOQ1JZUFQgICAgMAorI2RlZmluZSBNT0RFX0RFQ1JZUFQgICAgMQorCisjZGVmaW5lIFVTQUdFICAgXAorICAgICJcbiAgYWVzY3J5cHQyIDxtb2RlPiA8aW5wdXQgZmlsZW5hbWU+IDxvdXRwdXQgZmlsZW5hbWU+IDxrZXk+XG4iIFwKKyAgICAiXG4gICA8bW9kZT46IDAgPSBlbmNyeXB0LCAxID0gZGVjcnlwdFxuIiBcCisgICAgIlxuICBleGFtcGxlOiBhZXNjcnlwdDIgMCBmaWxlIGZpbGUuYWVzIGhleDpFNzZCMjQxMzk1OEIwMEUxOTNcbiIgXAorICAgICJcbiIKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQUVTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAhZGVmaW5lZChNQkVEVExTX01EX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQUVTX0MgYW5kL29yIE1CRURUTFNfU0hBMjU2X0MgIgorICAgICAgICAgICAgICAgICAgICAiYW5kL29yIE1CRURUTFNfRlNfSU8gYW5kL29yIE1CRURUTFNfTURfQyAiCisgICAgICAgICAgICAgICAgICAgICJub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0ID0gMTsKKworICAgIHVuc2lnbmVkIGludCBpLCBuOworICAgIGludCBtb2RlLCBsYXN0bjsKKyAgICBzaXplX3Qga2V5bGVuOworICAgIEZJTEUgKmZrZXksICpmaW4gPSBOVUxMLCAqZm91dCA9IE5VTEw7CisKKyAgICBjaGFyICpwOworICAgIHVuc2lnbmVkIGNoYXIgSVZbMTZdOworICAgIHVuc2lnbmVkIGNoYXIga2V5WzUxMl07CisgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzEwMjRdOworICAgIHVuc2lnbmVkIGNoYXIgZGlmZjsKKworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgYWVzX2N0eDsKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBzaGFfY3R4OworCisjaWYgZGVmaW5lZChfV0lOMzJfV0NFKQorICAgIGxvbmcgZmlsZXNpemUsIG9mZnNldDsKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorICAgICAgIExBUkdFX0lOVEVHRVIgbGlfc2l6ZTsKKyAgICBfX2ludDY0IGZpbGVzaXplLCBvZmZzZXQ7CisjZWxzZQorICAgICAgb2ZmX3QgZmlsZXNpemUsIG9mZnNldDsKKyNlbmRpZgorCisgICAgbWJlZHRsc19hZXNfaW5pdCggJmFlc19jdHggKTsKKyAgICBtYmVkdGxzX21kX2luaXQoICZzaGFfY3R4ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmc2hhX2N0eCwgbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEEyNTYgKSwgMSApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgISBtYmVkdGxzX21kX3NldHVwKCkgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBQYXJzZSB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KKyAgICAgKi8KKyAgICBpZiggYXJnYyAhPSA1ICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCBVU0FHRSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbW9kZSA9IGF0b2koIGFyZ3ZbMV0gKTsKKyAgICBtZW1zZXQoSVYsIDAsIHNpemVvZihJVikpOworICAgIG1lbXNldChrZXksIDAsIHNpemVvZihrZXkpKTsKKyAgICBtZW1zZXQoZGlnZXN0LCAwLCBzaXplb2YoZGlnZXN0KSk7CisgICAgbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOworCisgICAgaWYoIG1vZGUgIT0gTU9ERV9FTkNSWVBUICYmIG1vZGUgIT0gTU9ERV9ERUNSWVBUICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiaW52YWxpZGUgb3BlcmF0aW9uIG1vZGVcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBzdHJjbXAoIGFyZ3ZbMl0sIGFyZ3ZbM10gKSA9PSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiaW5wdXQgYW5kIG91dHB1dCBmaWxlbmFtZXMgbXVzdCBkaWZmZXJcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIGZpbiA9IGZvcGVuKCBhcmd2WzJdLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZm9wZW4oJXMscmIpIGZhaWxlZFxuIiwgYXJndlsyXSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggZm91dCA9IGZvcGVuKCBhcmd2WzNdLCAid2IrIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZvcGVuKCVzLHdiKykgZmFpbGVkXG4iLCBhcmd2WzNdICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlYWQgdGhlIHNlY3JldCBrZXkgYW5kIGNsZWFuIHRoZSBjb21tYW5kIGxpbmUuCisgICAgICovCisgICAgaWYoICggZmtleSA9IGZvcGVuKCBhcmd2WzRdLCAicmIiICkgKSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGtleWxlbiA9IGZyZWFkKCBrZXksIDEsIHNpemVvZigga2V5ICksIGZrZXkgKTsKKyAgICAgICAgZmNsb3NlKCBma2V5ICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKCBtZW1jbXAoIGFyZ3ZbNF0sICJoZXg6IiwgNCApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBwID0gJmFyZ3ZbNF1bNF07CisgICAgICAgICAgICBrZXlsZW4gPSAwOworCisgICAgICAgICAgICB3aGlsZSggc3NjYW5mKCBwLCAiJTAyWCIsICZuICkgPiAwICYmCisgICAgICAgICAgICAgICAgICAga2V5bGVuIDwgKGludCkgc2l6ZW9mKCBrZXkgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAga2V5W2tleWxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSBuOworICAgICAgICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGtleWxlbiA9IHN0cmxlbiggYXJndls0XSApOworCisgICAgICAgICAgICBpZigga2V5bGVuID4gKGludCkgc2l6ZW9mKCBrZXkgKSApCisgICAgICAgICAgICAgICAga2V5bGVuID0gKGludCkgc2l6ZW9mKCBrZXkgKTsKKworICAgICAgICAgICAgbWVtY3B5KCBrZXksIGFyZ3ZbNF0sIGtleWxlbiApOworICAgICAgICB9CisgICAgfQorCisgICAgbWVtc2V0KCBhcmd2WzRdLCAwLCBzdHJsZW4oIGFyZ3ZbNF0gKSApOworCisjaWYgZGVmaW5lZChfV0lOMzJfV0NFKQorICAgIGZpbGVzaXplID0gZnNlZWsoIGZpbiwgMEwsIFNFRUtfRU5EICk7CisjZWxzZQorI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIC8qCisgICAgICogU3VwcG9ydCBsYXJnZSBmaWxlcyAoPiAyR2IpIG9uIFdpbjMyCisgICAgICovCisgICAgbGlfc2l6ZS5RdWFkUGFydCA9IDA7CisgICAgbGlfc2l6ZS5Mb3dQYXJ0ICA9CisgICAgICAgIFNldEZpbGVQb2ludGVyKCAoSEFORExFKSBfZ2V0X29zZmhhbmRsZSggX2ZpbGVubyggZmluICkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpX3NpemUuTG93UGFydCwgJmxpX3NpemUuSGlnaFBhcnQsIEZJTEVfRU5EICk7CisKKyAgICBpZiggbGlfc2l6ZS5Mb3dQYXJ0ID09IDB4RkZGRkZGRkYgJiYgR2V0TGFzdEVycm9yKCkgIT0gTk9fRVJST1IgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJTZXRGaWxlUG9pbnRlcigwLEZJTEVfRU5EKSBmYWlsZWRcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGZpbGVzaXplID0gbGlfc2l6ZS5RdWFkUGFydDsKKyNlbHNlCisgICAgaWYoICggZmlsZXNpemUgPSBsc2VlayggZmlsZW5vKCBmaW4gKSwgMCwgU0VFS19FTkQgKSApIDwgMCApCisgICAgeworICAgICAgICBwZXJyb3IoICJsc2VlayIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyNlbmRpZgorI2VuZGlmCisKKyAgICBpZiggZnNlZWsoIGZpbiwgMCwgU0VFS19TRVQgKSA8IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmc2VlaygwLFNFRUtfU0VUKSBmYWlsZWRcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBtb2RlID09IE1PREVfRU5DUllQVCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBHZW5lcmF0ZSB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yIGFzOgorICAgICAgICAgKiBJViA9IFNIQS0yNTYoIGZpbGVzaXplIHx8IGZpbGVuYW1lIClbMC4uMTVdCisgICAgICAgICAqLworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICh1bnNpZ25lZCBjaGFyKSggZmlsZXNpemUgPj4gKCBpIDw8IDMgKSApOworCisgICAgICAgIHAgPSBhcmd2WzJdOworCisgICAgICAgIG1iZWR0bHNfbWRfc3RhcnRzKCAmc2hhX2N0eCApOworICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggJnNoYV9jdHgsIGJ1ZmZlciwgOCApOworICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggJnNoYV9jdHgsICh1bnNpZ25lZCBjaGFyICopIHAsIHN0cmxlbiggcCApICk7CisgICAgICAgIG1iZWR0bHNfbWRfZmluaXNoKCAmc2hhX2N0eCwgZGlnZXN0ICk7CisKKyAgICAgICAgbWVtY3B5KCBJViwgZGlnZXN0LCAxNiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRoZSBsYXN0IGZvdXIgYml0cyBpbiB0aGUgSVYgYXJlIGFjdHVhbGx5IHVzZWQKKyAgICAgICAgICogdG8gc3RvcmUgdGhlIGZpbGUgc2l6ZSBtb2R1bG8gdGhlIEFFUyBibG9jayBzaXplLgorICAgICAgICAgKi8KKyAgICAgICAgbGFzdG4gPSAoaW50KSggZmlsZXNpemUgJiAweDBGICk7CisKKyAgICAgICAgSVZbMTVdID0gKHVuc2lnbmVkIGNoYXIpCisgICAgICAgICAgICAoICggSVZbMTVdICYgMHhGMCApIHwgbGFzdG4gKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBBcHBlbmQgdGhlIElWIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dC4KKyAgICAgICAgICovCisgICAgICAgIGlmKCBmd3JpdGUoIElWLCAxLCAxNiwgZm91dCApICE9IDE2ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmd3JpdGUoJWQgYnl0ZXMpIGZhaWxlZFxuIiwgMTYgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEhhc2ggdGhlIElWIGFuZCB0aGUgc2VjcmV0IGtleSB0b2dldGhlciA4MTkyIHRpbWVzCisgICAgICAgICAqIHVzaW5nIHRoZSByZXN1bHQgdG8gc2V0dXAgdGhlIEFFUyBjb250ZXh0IGFuZCBITUFDLgorICAgICAgICAgKi8KKyAgICAgICAgbWVtc2V0KCBkaWdlc3QsIDAsICAzMiApOworICAgICAgICBtZW1jcHkoIGRpZ2VzdCwgSVYsIDE2ICk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDgxOTI7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfc3RhcnRzKCAmc2hhX2N0eCApOworICAgICAgICAgICAgbWJlZHRsc19tZF91cGRhdGUoICZzaGFfY3R4LCBkaWdlc3QsIDMyICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggJnNoYV9jdHgsIGtleSwga2V5bGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2ZpbmlzaCggJnNoYV9jdHgsIGRpZ2VzdCApOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCBrZXksIDAsIHNpemVvZigga2V5ICkgKTsKKyAgICAgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmFlc19jdHgsIGRpZ2VzdCwgMjU2ICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoICZzaGFfY3R4LCBkaWdlc3QsIDMyICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRW5jcnlwdCBhbmQgd3JpdGUgdGhlIGNpcGhlcnRleHQuCisgICAgICAgICAqLworICAgICAgICBmb3IoIG9mZnNldCA9IDA7IG9mZnNldCA8IGZpbGVzaXplOyBvZmZzZXQgKz0gMTYgKQorICAgICAgICB7CisgICAgICAgICAgICBuID0gKCBmaWxlc2l6ZSAtIG9mZnNldCA+IDE2ICkgPyAxNiA6IChpbnQpCisgICAgICAgICAgICAgICAgKCBmaWxlc2l6ZSAtIG9mZnNldCApOworCisgICAgICAgICAgICBpZiggZnJlYWQoIGJ1ZmZlciwgMSwgbiwgZmluICkgIT0gKHNpemVfdCkgbiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmcmVhZCglZCBieXRlcykgZmFpbGVkXG4iLCBuICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gKHVuc2lnbmVkIGNoYXIpKCBidWZmZXJbaV0gXiBJVltpXSApOworCisgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9lY2IoICZhZXNfY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBidWZmZXIsIGJ1ZmZlciApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnNoYV9jdHgsIGJ1ZmZlciwgMTYgKTsKKworICAgICAgICAgICAgaWYoIGZ3cml0ZSggYnVmZmVyLCAxLCAxNiwgZm91dCApICE9IDE2ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZ3cml0ZSglZCBieXRlcykgZmFpbGVkXG4iLCAxNiApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWVtY3B5KCBJViwgYnVmZmVyLCAxNiApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRmluYWxseSB3cml0ZSB0aGUgSE1BQy4KKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZzaGFfY3R4LCBkaWdlc3QgKTsKKworICAgICAgICBpZiggZndyaXRlKCBkaWdlc3QsIDEsIDMyLCBmb3V0ICkgIT0gMzIgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZ3cml0ZSglZCBieXRlcykgZmFpbGVkXG4iLCAxNiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIG1vZGUgPT0gTU9ERV9ERUNSWVBUICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdG1wWzE2XTsKKworICAgICAgICAvKgorICAgICAgICAgKiAgVGhlIGVuY3J5cHRlZCBmaWxlIG11c3QgYmUgc3RydWN0dXJlZCBhcyBmb2xsb3dzOgorICAgICAgICAgKgorICAgICAgICAgKiAgICAgICAgMDAgLi4gMTUgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uIFZlY3RvcgorICAgICAgICAgKiAgICAgICAgMTYgLi4gMzEgICAgICAgICAgICAgIEFFUyBFbmNyeXB0ZWQgQmxvY2sgIzEKKyAgICAgICAgICogICAgICAgICAgIC4uCisgICAgICAgICAqICAgICAgTioxNiAuLiAoTisxKSoxNiAtIDEgICAgQUVTIEVuY3J5cHRlZCBCbG9jayAjTgorICAgICAgICAgKiAgKE4rMSkqMTYgLi4gKE4rMSkqMTYgKyAzMiAgIEhNQUMtU0hBLTI1NihjaXBoZXJ0ZXh0KQorICAgICAgICAgKi8KKyAgICAgICAgaWYoIGZpbGVzaXplIDwgNDggKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZpbGUgdG9vIHNob3J0IHRvIGJlIGVuY3J5cHRlZC5cbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIGZpbGVzaXplICYgMHgwRiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZpbGUgc2l6ZSBub3QgYSBtdWx0aXBsZSBvZiAxNi5cbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFN1YnRyYWN0IHRoZSBJViArIEhNQUMgbGVuZ3RoLgorICAgICAgICAgKi8KKyAgICAgICAgZmlsZXNpemUgLT0gKCAxNiArIDMyICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVhZCB0aGUgSVYgYW5kIG9yaWdpbmFsIGZpbGVzaXplIG1vZHVsbyAxNi4KKyAgICAgICAgICovCisgICAgICAgIGlmKCBmcmVhZCggYnVmZmVyLCAxLCAxNiwgZmluICkgIT0gMTYgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZyZWFkKCVkIGJ5dGVzKSBmYWlsZWRcbiIsIDE2ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoIElWLCBidWZmZXIsIDE2ICk7CisgICAgICAgIGxhc3RuID0gSVZbMTVdICYgMHgwRjsKKworICAgICAgICAvKgorICAgICAgICAgKiBIYXNoIHRoZSBJViBhbmQgdGhlIHNlY3JldCBrZXkgdG9nZXRoZXIgODE5MiB0aW1lcworICAgICAgICAgKiB1c2luZyB0aGUgcmVzdWx0IHRvIHNldHVwIHRoZSBBRVMgY29udGV4dCBhbmQgSE1BQy4KKyAgICAgICAgICovCisgICAgICAgIG1lbXNldCggZGlnZXN0LCAwLCAgMzIgKTsKKyAgICAgICAgbWVtY3B5KCBkaWdlc3QsIElWLCAxNiApOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCA4MTkyOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX21kX3N0YXJ0cyggJnNoYV9jdHggKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmc2hhX2N0eCwgZGlnZXN0LCAzMiApOworICAgICAgICAgICAgbWJlZHRsc19tZF91cGRhdGUoICZzaGFfY3R4LCBrZXksIGtleWxlbiApOworICAgICAgICAgICAgbWJlZHRsc19tZF9maW5pc2goICZzaGFfY3R4LCBkaWdlc3QgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbXNldCgga2V5LCAwLCBzaXplb2YoIGtleSApICk7CisgICAgICAgIG1iZWR0bHNfYWVzX3NldGtleV9kZWMoICZhZXNfY3R4LCBkaWdlc3QsIDI1NiApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmc2hhX2N0eCwgZGlnZXN0LCAzMiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIERlY3J5cHQgYW5kIHdyaXRlIHRoZSBwbGFpbnRleHQuCisgICAgICAgICAqLworICAgICAgICBmb3IoIG9mZnNldCA9IDA7IG9mZnNldCA8IGZpbGVzaXplOyBvZmZzZXQgKz0gMTYgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggZnJlYWQoIGJ1ZmZlciwgMSwgMTYsIGZpbiApICE9IDE2ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZyZWFkKCVkIGJ5dGVzKSBmYWlsZWRcbiIsIDE2ICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtZW1jcHkoIHRtcCwgYnVmZmVyLCAxNiApOworCisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmc2hhX2N0eCwgYnVmZmVyLCAxNiApOworICAgICAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfZWNiKCAmYWVzX2N0eCwgTUJFRFRMU19BRVNfREVDUllQVCwgYnVmZmVyLCBidWZmZXIgKTsKKworICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IDE2OyBpKysgKQorICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICh1bnNpZ25lZCBjaGFyKSggYnVmZmVyW2ldIF4gSVZbaV0gKTsKKworICAgICAgICAgICAgbWVtY3B5KCBJViwgdG1wLCAxNiApOworCisgICAgICAgICAgICBuID0gKCBsYXN0biA+IDAgJiYgb2Zmc2V0ID09IGZpbGVzaXplIC0gMTYgKQorICAgICAgICAgICAgICAgID8gbGFzdG4gOiAxNjsKKworICAgICAgICAgICAgaWYoIGZ3cml0ZSggYnVmZmVyLCAxLCBuLCBmb3V0ICkgIT0gKHNpemVfdCkgbiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmd3JpdGUoJWQgYnl0ZXMpIGZhaWxlZFxuIiwgbiApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFZlcmlmeSB0aGUgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJnNoYV9jdHgsIGRpZ2VzdCApOworCisgICAgICAgIGlmKCBmcmVhZCggYnVmZmVyLCAxLCAzMiwgZmluICkgIT0gMzIgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZyZWFkKCVkIGJ5dGVzKSBmYWlsZWRcbiIsIDMyICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBVc2UgY29uc3RhbnQtdGltZSBidWZmZXIgY29tcGFyaXNvbiAqLworICAgICAgICBkaWZmID0gMDsKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDMyOyBpKysgKQorICAgICAgICAgICAgZGlmZiB8PSBkaWdlc3RbaV0gXiBidWZmZXJbaV07CisKKyAgICAgICAgaWYoIGRpZmYgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiSE1BQyBjaGVjayBmYWlsZWQ6IHdyb25nIGtleSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3IgZmlsZSBjb3JydXB0ZWQuXG4iICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXQgPSAwOworCitleGl0OgorICAgIGlmKCBmaW4gKQorICAgICAgICBmY2xvc2UoIGZpbiApOworICAgIGlmKCBmb3V0ICkKKyAgICAgICAgZmNsb3NlKCBmb3V0ICk7CisKKyAgICBtZW1zZXQoIGJ1ZmZlciwgMCwgc2l6ZW9mKCBidWZmZXIgKSApOworICAgIG1lbXNldCggZGlnZXN0LCAwLCBzaXplb2YoIGRpZ2VzdCApICk7CisKKyAgICBtYmVkdGxzX2Flc19mcmVlKCAmYWVzX2N0eCApOworICAgIG1iZWR0bHNfbWRfZnJlZSggJnNoYV9jdHggKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAmJiBNQkVEVExTX1NIQTI1Nl9DICYmIE1CRURUTFNfRlNfSU8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9hZXMvY3J5cHRfYW5kX2hhc2guYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9hZXMvY3J5cHRfYW5kX2hhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGI5NWUwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2Flcy9jcnlwdF9hbmRfaGFzaC5jCkBAIC0wLDAgKzEsNTUxIEBACisvKgorICogIFxicmllZiAgR2VuZXJpYyBmaWxlIGVuY3J5cHRpb24gcHJvZ3JhbSB1c2luZyBnZW5lcmljIHdyYXBwZXJzIGZvciBjb25maWd1cmVkCisgKiAgICAgICAgICBzZWN1cml0eS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX0MpICYmIGRlZmluZWQoTUJFRFRMU19NRF9DKSAmJiBcCisgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2luY2x1ZGUgIm1iZWR0bHMvY2lwaGVyLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmICFkZWZpbmVkKF9XSU4zMl9XQ0UpCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjZGVmaW5lIE1PREVfRU5DUllQVCAgICAwCisjZGVmaW5lIE1PREVfREVDUllQVCAgICAxCisKKyNkZWZpbmUgVVNBR0UgICBcCisgICAgIlxuICBjcnlwdF9hbmRfaGFzaCA8bW9kZT4gPGlucHV0IGZpbGVuYW1lPiA8b3V0cHV0IGZpbGVuYW1lPiA8Y2lwaGVyPiA8bWJlZHRsc19tZD4gPGtleT5cbiIgXAorICAgICJcbiAgIDxtb2RlPjogMCA9IGVuY3J5cHQsIDEgPSBkZWNyeXB0XG4iIFwKKyAgICAiXG4gIGV4YW1wbGU6IGNyeXB0X2FuZF9oYXNoIDAgZmlsZSBmaWxlLmFlcyBBRVMtMTI4LUNCQyBTSEExIGhleDpFNzZCMjQxMzk1OEIwMEUxOTNcbiIgXAorICAgICJcbiIKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfTURfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQ0lQSEVSX0MgYW5kL29yIE1CRURUTFNfTURfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0ID0gMSwgaSwgbjsKKyAgICBpbnQgbW9kZTsKKyAgICBzaXplX3Qga2V5bGVuLCBpbGVuLCBvbGVuOworICAgIEZJTEUgKmZrZXksICpmaW4gPSBOVUxMLCAqZm91dCA9IE5VTEw7CisKKyAgICBjaGFyICpwOworICAgIHVuc2lnbmVkIGNoYXIgSVZbMTZdOworICAgIHVuc2lnbmVkIGNoYXIga2V5WzUxMl07CisgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMTAyNF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAyNF07CisgICAgdW5zaWduZWQgY2hhciBkaWZmOworCisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY2lwaGVyX2N0eDsKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBtZF9jdHg7CisjaWYgZGVmaW5lZChfV0lOMzJfV0NFKQorICAgIGxvbmcgZmlsZXNpemUsIG9mZnNldDsKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorICAgICAgIExBUkdFX0lOVEVHRVIgbGlfc2l6ZTsKKyAgICBfX2ludDY0IGZpbGVzaXplLCBvZmZzZXQ7CisjZWxzZQorICAgICAgb2ZmX3QgZmlsZXNpemUsIG9mZnNldDsKKyNlbmRpZgorCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmNpcGhlcl9jdHggKTsKKyAgICBtYmVkdGxzX21kX2luaXQoICZtZF9jdHggKTsKKworICAgIC8qCisgICAgICogUGFyc2UgdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCisgICAgICovCisgICAgaWYoIGFyZ2MgIT0gNyApCisgICAgeworICAgICAgICBjb25zdCBpbnQgKmxpc3Q7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJBdmFpbGFibGUgY2lwaGVyczpcbiIgKTsKKyAgICAgICAgbGlzdCA9IG1iZWR0bHNfY2lwaGVyX2xpc3QoKTsKKyAgICAgICAgd2hpbGUoICpsaXN0ICkKKyAgICAgICAgeworICAgICAgICAgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggKmxpc3QgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAlc1xuIiwgY2lwaGVyX2luZm8tPm5hbWUgKTsKKyAgICAgICAgICAgIGxpc3QrKzsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG5BdmFpbGFibGUgbWVzc2FnZSBkaWdlc3RzOlxuIiApOworICAgICAgICBsaXN0ID0gbWJlZHRsc19tZF9saXN0KCk7CisgICAgICAgIHdoaWxlKCAqbGlzdCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCAqbGlzdCApOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICVzXG4iLCBtYmVkdGxzX21kX2dldF9uYW1lKCBtZF9pbmZvICkgKTsKKyAgICAgICAgICAgIGxpc3QrKzsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbW9kZSA9IGF0b2koIGFyZ3ZbMV0gKTsKKworICAgIGlmKCBtb2RlICE9IE1PREVfRU5DUllQVCAmJiBtb2RlICE9IE1PREVfREVDUllQVCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImludmFsaWQgb3BlcmF0aW9uIG1vZGVcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBzdHJjbXAoIGFyZ3ZbMl0sIGFyZ3ZbM10gKSA9PSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiaW5wdXQgYW5kIG91dHB1dCBmaWxlbmFtZXMgbXVzdCBkaWZmZXJcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIGZpbiA9IGZvcGVuKCBhcmd2WzJdLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZm9wZW4oJXMscmIpIGZhaWxlZFxuIiwgYXJndlsyXSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggZm91dCA9IGZvcGVuKCBhcmd2WzNdLCAid2IrIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZvcGVuKCVzLHdiKykgZmFpbGVkXG4iLCBhcmd2WzNdICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlYWQgdGhlIENpcGhlciBhbmQgTUQgZnJvbSB0aGUgY29tbWFuZCBsaW5lCisgICAgICovCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fc3RyaW5nKCBhcmd2WzRdICk7CisgICAgaWYoIGNpcGhlcl9pbmZvID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJDaXBoZXIgJyVzJyBub3QgZm91bmRcbiIsIGFyZ3ZbNF0gKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmNpcGhlcl9jdHgsIGNpcGhlcl9pbmZvKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJtYmVkdGxzX2NpcGhlcl9zZXR1cCBmYWlsZWRcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcoIGFyZ3ZbNV0gKTsKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiTWVzc2FnZSBEaWdlc3QgJyVzJyBub3QgZm91bmRcbiIsIGFyZ3ZbNV0gKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBtYmVkdGxzX21kX3NldHVwKCAmbWRfY3R4LCBtZF9pbmZvLCAxICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIm1iZWR0bHNfbWRfc2V0dXAgZmFpbGVkXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlYWQgdGhlIHNlY3JldCBrZXkgYW5kIGNsZWFuIHRoZSBjb21tYW5kIGxpbmUuCisgICAgICovCisgICAgaWYoICggZmtleSA9IGZvcGVuKCBhcmd2WzZdLCAicmIiICkgKSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGtleWxlbiA9IGZyZWFkKCBrZXksIDEsIHNpemVvZigga2V5ICksIGZrZXkgKTsKKyAgICAgICAgZmNsb3NlKCBma2V5ICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKCBtZW1jbXAoIGFyZ3ZbNl0sICJoZXg6IiwgNCApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBwID0gJmFyZ3ZbNl1bNF07CisgICAgICAgICAgICBrZXlsZW4gPSAwOworCisgICAgICAgICAgICB3aGlsZSggc3NjYW5mKCBwLCAiJTAyWCIsICZuICkgPiAwICYmCisgICAgICAgICAgICAgICAgICAga2V5bGVuIDwgKGludCkgc2l6ZW9mKCBrZXkgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAga2V5W2tleWxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSBuOworICAgICAgICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGtleWxlbiA9IHN0cmxlbiggYXJndls2XSApOworCisgICAgICAgICAgICBpZigga2V5bGVuID4gKGludCkgc2l6ZW9mKCBrZXkgKSApCisgICAgICAgICAgICAgICAga2V5bGVuID0gKGludCkgc2l6ZW9mKCBrZXkgKTsKKworICAgICAgICAgICAgbWVtY3B5KCBrZXksIGFyZ3ZbNl0sIGtleWxlbiApOworICAgICAgICB9CisgICAgfQorCisgICAgbWVtc2V0KCBhcmd2WzZdLCAwLCBzdHJsZW4oIGFyZ3ZbNl0gKSApOworCisjaWYgZGVmaW5lZChfV0lOMzJfV0NFKQorICAgIGZpbGVzaXplID0gZnNlZWsoIGZpbiwgMEwsIFNFRUtfRU5EICk7CisjZWxzZQorI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIC8qCisgICAgICogU3VwcG9ydCBsYXJnZSBmaWxlcyAoPiAyR2IpIG9uIFdpbjMyCisgICAgICovCisgICAgbGlfc2l6ZS5RdWFkUGFydCA9IDA7CisgICAgbGlfc2l6ZS5Mb3dQYXJ0ICA9CisgICAgICAgIFNldEZpbGVQb2ludGVyKCAoSEFORExFKSBfZ2V0X29zZmhhbmRsZSggX2ZpbGVubyggZmluICkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpX3NpemUuTG93UGFydCwgJmxpX3NpemUuSGlnaFBhcnQsIEZJTEVfRU5EICk7CisKKyAgICBpZiggbGlfc2l6ZS5Mb3dQYXJ0ID09IDB4RkZGRkZGRkYgJiYgR2V0TGFzdEVycm9yKCkgIT0gTk9fRVJST1IgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJTZXRGaWxlUG9pbnRlcigwLEZJTEVfRU5EKSBmYWlsZWRcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGZpbGVzaXplID0gbGlfc2l6ZS5RdWFkUGFydDsKKyNlbHNlCisgICAgaWYoICggZmlsZXNpemUgPSBsc2VlayggZmlsZW5vKCBmaW4gKSwgMCwgU0VFS19FTkQgKSApIDwgMCApCisgICAgeworICAgICAgICBwZXJyb3IoICJsc2VlayIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyNlbmRpZgorI2VuZGlmCisKKyAgICBpZiggZnNlZWsoIGZpbiwgMCwgU0VFS19TRVQgKSA8IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmc2VlaygwLFNFRUtfU0VUKSBmYWlsZWRcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBtb2RlID09IE1PREVfRU5DUllQVCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBHZW5lcmF0ZSB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yIGFzOgorICAgICAgICAgKiBJViA9IE1EKCBmaWxlc2l6ZSB8fCBmaWxlbmFtZSApWzAuLjE1XQorICAgICAgICAgKi8KKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDg7IGkrKyApCisgICAgICAgICAgICBidWZmZXJbaV0gPSAodW5zaWduZWQgY2hhcikoIGZpbGVzaXplID4+ICggaSA8PCAzICkgKTsKKworICAgICAgICBwID0gYXJndlsyXTsKKworICAgICAgICBtYmVkdGxzX21kX3N0YXJ0cyggJm1kX2N0eCApOworICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggJm1kX2N0eCwgYnVmZmVyLCA4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCAodW5zaWduZWQgY2hhciAqKSBwLCBzdHJsZW4oIHAgKSApOworICAgICAgICBtYmVkdGxzX21kX2ZpbmlzaCggJm1kX2N0eCwgZGlnZXN0ICk7CisKKyAgICAgICAgbWVtY3B5KCBJViwgZGlnZXN0LCAxNiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIEFwcGVuZCB0aGUgSVYgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgb3V0cHV0LgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIGZ3cml0ZSggSVYsIDEsIDE2LCBmb3V0ICkgIT0gMTYgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZ3cml0ZSglZCBieXRlcykgZmFpbGVkXG4iLCAxNiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogSGFzaCB0aGUgSVYgYW5kIHRoZSBzZWNyZXQga2V5IHRvZ2V0aGVyIDgxOTIgdGltZXMKKyAgICAgICAgICogdXNpbmcgdGhlIHJlc3VsdCB0byBzZXR1cCB0aGUgQUVTIGNvbnRleHQgYW5kIEhNQUMuCisgICAgICAgICAqLworICAgICAgICBtZW1zZXQoIGRpZ2VzdCwgMCwgIDMyICk7CisgICAgICAgIG1lbWNweSggZGlnZXN0LCBJViwgMTYgKTsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgODE5MjsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19tZF9zdGFydHMoICZtZF9jdHggKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCBkaWdlc3QsIDMyICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggJm1kX2N0eCwga2V5LCBrZXlsZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfZmluaXNoKCAmbWRfY3R4LCBkaWdlc3QgKTsKKworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCBrZXksIDAsIHNpemVvZigga2V5ICkgKTsKKworICAgICAgICBpZiggbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY2lwaGVyX2N0eCwgZGlnZXN0LCBjaXBoZXJfaW5mby0+a2V5X2JpdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5DUllQVCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIm1iZWR0bHNfY2lwaGVyX3NldGtleSgpIHJldHVybmVkIGVycm9yXG4iKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBpZiggbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY2lwaGVyX2N0eCwgSVYsIDE2ICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAibWJlZHRsc19jaXBoZXJfc2V0X2l2KCkgcmV0dXJuZWQgZXJyb3JcbiIpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGlmKCBtYmVkdGxzX2NpcGhlcl9yZXNldCggJmNpcGhlcl9jdHggKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJtYmVkdGxzX2NpcGhlcl9yZXNldCgpIHJldHVybmVkIGVycm9yXG4iKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoICZtZF9jdHgsIGRpZ2VzdCwgMzIgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBFbmNyeXB0IGFuZCB3cml0ZSB0aGUgY2lwaGVydGV4dC4KKyAgICAgICAgICovCisgICAgICAgIGZvciggb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZmlsZXNpemU7IG9mZnNldCArPSBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmNpcGhlcl9jdHggKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlsZW4gPSAoICh1bnNpZ25lZCBpbnQpIGZpbGVzaXplIC0gb2Zmc2V0ID4gbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjaXBoZXJfY3R4ICkgKSA/CisgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjaXBoZXJfY3R4ICkgOiAodW5zaWduZWQgaW50KSAoIGZpbGVzaXplIC0gb2Zmc2V0ICk7CisKKyAgICAgICAgICAgIGlmKCBmcmVhZCggYnVmZmVyLCAxLCBpbGVuLCBmaW4gKSAhPSBpbGVuICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZyZWFkKCVsZCBieXRlcykgZmFpbGVkXG4iLCAobG9uZykgaWxlbiApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmNpcGhlcl9jdHgsIGJ1ZmZlciwgaWxlbiwgb3V0cHV0LCAmb2xlbiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAibWJlZHRsc19jaXBoZXJfdXBkYXRlKCkgcmV0dXJuZWQgZXJyb3JcbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJm1kX2N0eCwgb3V0cHV0LCBvbGVuICk7CisKKyAgICAgICAgICAgIGlmKCBmd3JpdGUoIG91dHB1dCwgMSwgb2xlbiwgZm91dCApICE9IG9sZW4gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZndyaXRlKCVsZCBieXRlcykgZmFpbGVkXG4iLCAobG9uZykgb2xlbiApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCBtYmVkdGxzX2NpcGhlcl9maW5pc2goICZjaXBoZXJfY3R4LCBvdXRwdXQsICZvbGVuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAibWJlZHRsc19jaXBoZXJfZmluaXNoKCkgcmV0dXJuZWQgZXJyb3JcbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmbWRfY3R4LCBvdXRwdXQsIG9sZW4gKTsKKworICAgICAgICBpZiggZndyaXRlKCBvdXRwdXQsIDEsIG9sZW4sIGZvdXQgKSAhPSBvbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmd3JpdGUoJWxkIGJ5dGVzKSBmYWlsZWRcbiIsIChsb25nKSBvbGVuICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBGaW5hbGx5IHdyaXRlIHRoZSBITUFDLgorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJm1kX2N0eCwgZGlnZXN0ICk7CisKKyAgICAgICAgaWYoIGZ3cml0ZSggZGlnZXN0LCAxLCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICksIGZvdXQgKSAhPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZ3cml0ZSglZCBieXRlcykgZmFpbGVkXG4iLCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBtb2RlID09IE1PREVfREVDUllQVCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiAgVGhlIGVuY3J5cHRlZCBmaWxlIG11c3QgYmUgc3RydWN0dXJlZCBhcyBmb2xsb3dzOgorICAgICAgICAgKgorICAgICAgICAgKiAgICAgICAgMDAgLi4gMTUgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uIFZlY3RvcgorICAgICAgICAgKiAgICAgICAgMTYgLi4gMzEgICAgICAgICAgICAgIEVuY3J5cHRlZCBCbG9jayAjMQorICAgICAgICAgKiAgICAgICAgICAgLi4KKyAgICAgICAgICogICAgICBOKjE2IC4uIChOKzEpKjE2IC0gMSAgICBFbmNyeXB0ZWQgQmxvY2sgI04KKyAgICAgICAgICogIChOKzEpKjE2IC4uIChOKzEpKjE2ICsgbiAgICBIYXNoKGNpcGhlcnRleHQpCisgICAgICAgICAqLworICAgICAgICBpZiggZmlsZXNpemUgPCAxNiArIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRmlsZSB0b28gc2hvcnQgdG8gYmUgZW5jcnlwdGVkLlxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCAmY2lwaGVyX2N0eCApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkludmFsaWQgY2lwaGVyIGJsb2NrIHNpemU6IDAuIFxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgdGhlIGZpbGUgc2l6ZS4KKyAgICAgICAgICovCisgICAgICAgIGlmKCBjaXBoZXJfaW5mby0+bW9kZSAhPSBNQkVEVExTX01PREVfR0NNICYmCisgICAgICAgICAgICAoICggZmlsZXNpemUgLSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKSAlCisgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjaXBoZXJfY3R4ICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGaWxlIGNvbnRlbnQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUgKCVkKS5cbiIsCisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmNpcGhlcl9jdHggKSk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBTdWJ0cmFjdCB0aGUgSVYgKyBITUFDIGxlbmd0aC4KKyAgICAgICAgICovCisgICAgICAgIGZpbGVzaXplIC09ICggMTYgKyBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBSZWFkIHRoZSBJViBhbmQgb3JpZ2luYWwgZmlsZXNpemUgbW9kdWxvIDE2LgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIGZyZWFkKCBidWZmZXIsIDEsIDE2LCBmaW4gKSAhPSAxNiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZnJlYWQoJWQgYnl0ZXMpIGZhaWxlZFxuIiwgMTYgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSggSVYsIGJ1ZmZlciwgMTYgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBIYXNoIHRoZSBJViBhbmQgdGhlIHNlY3JldCBrZXkgdG9nZXRoZXIgODE5MiB0aW1lcworICAgICAgICAgKiB1c2luZyB0aGUgcmVzdWx0IHRvIHNldHVwIHRoZSBBRVMgY29udGV4dCBhbmQgSE1BQy4KKyAgICAgICAgICovCisgICAgICAgIG1lbXNldCggZGlnZXN0LCAwLCAgMzIgKTsKKyAgICAgICAgbWVtY3B5KCBkaWdlc3QsIElWLCAxNiApOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCA4MTkyOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX21kX3N0YXJ0cyggJm1kX2N0eCApOworICAgICAgICAgICAgbWJlZHRsc19tZF91cGRhdGUoICZtZF9jdHgsIGRpZ2VzdCwgMzIgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCBrZXksIGtleWxlbiApOworICAgICAgICAgICAgbWJlZHRsc19tZF9maW5pc2goICZtZF9jdHgsIGRpZ2VzdCApOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCBrZXksIDAsIHNpemVvZigga2V5ICkgKTsKKworICAgICAgICBpZiggbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY2lwaGVyX2N0eCwgZGlnZXN0LCBjaXBoZXJfaW5mby0+a2V5X2JpdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfREVDUllQVCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIm1iZWR0bHNfY2lwaGVyX3NldGtleSgpIHJldHVybmVkIGVycm9yXG4iICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY2lwaGVyX2N0eCwgSVYsIDE2ICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAibWJlZHRsc19jaXBoZXJfc2V0X2l2KCkgcmV0dXJuZWQgZXJyb3JcbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBtYmVkdGxzX2NpcGhlcl9yZXNldCggJmNpcGhlcl9jdHggKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJtYmVkdGxzX2NpcGhlcl9yZXNldCgpIHJldHVybmVkIGVycm9yXG4iICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmbWRfY3R4LCBkaWdlc3QsIDMyICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRGVjcnlwdCBhbmQgd3JpdGUgdGhlIHBsYWludGV4dC4KKyAgICAgICAgICovCisgICAgICAgIGZvciggb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZmlsZXNpemU7IG9mZnNldCArPSBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmNpcGhlcl9jdHggKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlsZW4gPSAoICh1bnNpZ25lZCBpbnQpIGZpbGVzaXplIC0gb2Zmc2V0ID4gbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjaXBoZXJfY3R4ICkgKSA/CisgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjaXBoZXJfY3R4ICkgOiAodW5zaWduZWQgaW50KSAoIGZpbGVzaXplIC0gb2Zmc2V0ICk7CisKKyAgICAgICAgICAgIGlmKCBmcmVhZCggYnVmZmVyLCAxLCBpbGVuLCBmaW4gKSAhPSBpbGVuICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZyZWFkKCVkIGJ5dGVzKSBmYWlsZWRcbiIsCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCAmY2lwaGVyX2N0eCApICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmbWRfY3R4LCBidWZmZXIsIGlsZW4gKTsKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjaXBoZXJfY3R4LCBidWZmZXIsIGlsZW4sIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGVuICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJtYmVkdGxzX2NpcGhlcl91cGRhdGUoKSByZXR1cm5lZCBlcnJvclxuIiApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIGZ3cml0ZSggb3V0cHV0LCAxLCBvbGVuLCBmb3V0ICkgIT0gb2xlbiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmd3JpdGUoJWxkIGJ5dGVzKSBmYWlsZWRcbiIsIChsb25nKSBvbGVuICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVmVyaWZ5IHRoZSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUuCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmbWRfY3R4LCBkaWdlc3QgKTsKKworICAgICAgICBpZiggZnJlYWQoIGJ1ZmZlciwgMSwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApLCBmaW4gKSAhPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZyZWFkKCVkIGJ5dGVzKSBmYWlsZWRcbiIsIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogVXNlIGNvbnN0YW50LXRpbWUgYnVmZmVyIGNvbXBhcmlzb24gKi8KKyAgICAgICAgZGlmZiA9IDA7CisgICAgICAgIGZvciggaSA9IDA7IGkgPCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7IGkrKyApCisgICAgICAgICAgICBkaWZmIHw9IGRpZ2VzdFtpXSBeIGJ1ZmZlcltpXTsKKworICAgICAgICBpZiggZGlmZiAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJITUFDIGNoZWNrIGZhaWxlZDogd3Jvbmcga2V5LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvciBmaWxlIGNvcnJ1cHRlZC5cbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFdyaXRlIHRoZSBmaW5hbCBibG9jayBvZiBkYXRhCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX2NpcGhlcl9maW5pc2goICZjaXBoZXJfY3R4LCBvdXRwdXQsICZvbGVuICk7CisKKyAgICAgICAgaWYoIGZ3cml0ZSggb3V0cHV0LCAxLCBvbGVuLCBmb3V0ICkgIT0gb2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZndyaXRlKCVsZCBieXRlcykgZmFpbGVkXG4iLCAobG9uZykgb2xlbiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0ID0gMDsKKworZXhpdDoKKyAgICBpZiggZmluICkKKyAgICAgICAgZmNsb3NlKCBmaW4gKTsKKyAgICBpZiggZm91dCApCisgICAgICAgIGZjbG9zZSggZm91dCApOworCisgICAgbWVtc2V0KCBidWZmZXIsIDAsIHNpemVvZiggYnVmZmVyICkgKTsKKyAgICBtZW1zZXQoIGRpZ2VzdCwgMCwgc2l6ZW9mKCBkaWdlc3QgKSApOworCisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmNpcGhlcl9jdHggKTsKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZtZF9jdHggKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfQyAmJiBNQkVEVExTX01EX0MgJiYgTUJFRFRMU19GU19JTyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2hhc2gvQ01ha2VMaXN0cy50eHQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvaGFzaC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGE5NzViCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2hhc2gvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw5IEBACithZGRfZXhlY3V0YWJsZShoZWxsbyBoZWxsby5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGhlbGxvIG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKGdlbmVyaWNfc3VtIGdlbmVyaWNfc3VtLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZ2VuZXJpY19zdW0gbWJlZHRscykKKworaW5zdGFsbChUQVJHRVRTIGhlbGxvIGdlbmVyaWNfc3VtCisgICAgICAgIERFU1RJTkFUSU9OICJiaW4iCisgICAgICAgIFBFUk1JU1NJT05TIE9XTkVSX1JFQUQgT1dORVJfV1JJVEUgT1dORVJfRVhFQ1VURSBHUk9VUF9SRUFEIEdST1VQX0VYRUNVVEUgV09STERfUkVBRCBXT1JMRF9FWEVDVVRFKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2hhc2gvZ2VuZXJpY19zdW0uYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9oYXNoL2dlbmVyaWNfc3VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlODFkNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9oYXNoL2dlbmVyaWNfc3VtLmMKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiAgZ2VuZXJpYyBtZXNzYWdlIGRpZ2VzdCBsYXllciBkZW1vbnN0cmF0aW9uIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfTURfQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19NRF9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorc3RhdGljIGludCBnZW5lcmljX3dyYXBwZXIoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgY2hhciAqc3VtICkKK3sKKyAgICBpbnQgcmV0ID0gbWJlZHRsc19tZF9maWxlKCBtZF9pbmZvLCBmaWxlbmFtZSwgc3VtICk7CisKKyAgICBpZiggcmV0ID09IDEgKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZhaWxlZCB0byBvcGVuOiAlc1xuIiwgZmlsZW5hbWUgKTsKKworICAgIGlmKCByZXQgPT0gMiApCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZmFpbGVkIHRvIHJlYWQ6ICVzXG4iLCBmaWxlbmFtZSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworc3RhdGljIGludCBnZW5lcmljX3ByaW50KCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbywgY2hhciAqZmlsZW5hbWUgKQoreworICAgIGludCBpOworICAgIHVuc2lnbmVkIGNoYXIgc3VtW01CRURUTFNfTURfTUFYX1NJWkVdOworCisgICAgaWYoIGdlbmVyaWNfd3JhcHBlciggbWRfaW5mbywgZmlsZW5hbWUsIHN1bSApICE9IDAgKQorICAgICAgICByZXR1cm4oIDEgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7IGkrKyApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJTAyeCIsIHN1bVtpXSApOworCisgICAgbWJlZHRsc19wcmludGYoICIgICVzXG4iLCBmaWxlbmFtZSApOworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IGdlbmVyaWNfY2hlY2soIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLCBjaGFyICpmaWxlbmFtZSApCit7CisgICAgaW50IGk7CisgICAgc2l6ZV90IG47CisgICAgRklMRSAqZjsKKyAgICBpbnQgbmJfZXJyMSwgbmJfZXJyMjsKKyAgICBpbnQgbmJfdG90MSwgbmJfdG90MjsKKyAgICB1bnNpZ25lZCBjaGFyIHN1bVtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICBjaGFyIGxpbmVbMTAyNF07CisgICAgY2hhciBkaWZmOworI2lmIGRlZmluZWQoX19jbGFuZ19hbmFseXplcl9fKQorICAgIGNoYXIgYnVmW01CRURUTFNfTURfTUFYX1NJWkUgKiAyICsgMV0gPSB7IH07CisjZWxzZQorICAgIGNoYXIgYnVmW01CRURUTFNfTURfTUFYX1NJWkUgKiAyICsgMV07CisjZW5kaWYKKworICAgIGlmKCAoIGYgPSBmb3BlbiggZmlsZW5hbWUsICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWQgdG8gb3BlbjogJXNcbiIsIGZpbGVuYW1lICk7CisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIG5iX2VycjEgPSBuYl9lcnIyID0gMDsKKyAgICBuYl90b3QxID0gbmJfdG90MiA9IDA7CisKKyAgICBtZW1zZXQoIGxpbmUsIDAsIHNpemVvZiggbGluZSApICk7CisKKyAgICBuID0gc2l6ZW9mKCBsaW5lICk7CisKKyAgICB3aGlsZSggZmdldHMoIGxpbmUsIChpbnQpIG4gLSAxLCBmICkgIT0gTlVMTCApCisgICAgeworICAgICAgICBuID0gc3RybGVuKCBsaW5lICk7CisKKyAgICAgICAgaWYoIG4gPCAoc2l6ZV90KSAyICogbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApICsgNCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJObyAnJXMnIGhhc2ggZm91bmQgb24gbGluZS5cbiIsIG1iZWR0bHNfbWRfZ2V0X25hbWUoIG1kX2luZm8gKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBsaW5lWzIgKiBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICldICE9ICcgJyB8fCBsaW5lWzIgKiBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKyAxXSAhPSAnICcgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigiTm8gJyVzJyBoYXNoIGZvdW5kIG9uIGxpbmUuXG4iLCBtYmVkdGxzX21kX2dldF9uYW1lKCBtZF9pbmZvICkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiggbGluZVtuIC0gMV0gPT0gJ1xuJyApIHsgbi0tOyBsaW5lW25dID0gJ1wwJzsgfQorICAgICAgICBpZiggbGluZVtuIC0gMV0gPT0gJ1xyJyApIHsgbi0tOyBsaW5lW25dID0gJ1wwJzsgfQorCisgICAgICAgIG5iX3RvdDErKzsKKworICAgICAgICBpZiggZ2VuZXJpY193cmFwcGVyKCBtZF9pbmZvLCBsaW5lICsgMiArIDIgKiBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICksIHN1bSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBuYl9lcnIxKys7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG5iX3RvdDIrKzsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApOyBpKysgKQorICAgICAgICAgICAgc3ByaW50ZiggYnVmICsgaSAqIDIsICIlMDJ4Iiwgc3VtW2ldICk7CisKKyAgICAgICAgLyogVXNlIGNvbnN0YW50LXRpbWUgYnVmZmVyIGNvbXBhcmlzb24gKi8KKyAgICAgICAgZGlmZiA9IDA7CisgICAgICAgIGZvciggaSA9IDA7IGkgPCAyICogbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApOyBpKysgKQorICAgICAgICAgICAgZGlmZiB8PSBsaW5lW2ldIF4gYnVmW2ldOworCisgICAgICAgIGlmKCBkaWZmICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBuYl9lcnIyKys7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIndyb25nIGNoZWNrc3VtOiAlc1xuIiwgbGluZSArIDY2ICk7CisgICAgICAgIH0KKworICAgICAgICBuID0gc2l6ZW9mKCBsaW5lICk7CisgICAgfQorCisgICAgaWYoIG5iX2VycjEgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIldBUk5JTkc6ICVkIChvdXQgb2YgJWQpIGlucHV0IGZpbGVzIGNvdWxkICIKKyAgICAgICAgICAgICAgICAibm90IGJlIHJlYWRcbiIsIG5iX2VycjEsIG5iX3RvdDEgKTsKKyAgICB9CisKKyAgICBpZiggbmJfZXJyMiAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiV0FSTklORzogJWQgKG91dCBvZiAlZCkgY29tcHV0ZWQgY2hlY2tzdW1zIGRpZCAiCisgICAgICAgICAgICAgICAgIm5vdCBtYXRjaFxuIiwgbmJfZXJyMiwgbmJfdG90MiApOworICAgIH0KKworICAgIGZjbG9zZSggZiApOworCisgICAgcmV0dXJuKCBuYl9lcnIxICE9IDAgfHwgbmJfZXJyMiAhPSAwICk7Cit9CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0LCBpOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IG1kX2N0eDsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJm1kX2N0eCApOworCisgICAgaWYoIGFyZ2MgPT0gMSApCisgICAgeworICAgICAgICBjb25zdCBpbnQgKmxpc3Q7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwcmludCBtb2RlOiAgZ2VuZXJpY19zdW0gPG1iZWR0bHNfbWQ+IDxmaWxlPiA8ZmlsZT4gLi4uXG4iICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiY2hlY2sgbW9kZTogIGdlbmVyaWNfc3VtIDxtYmVkdGxzX21kPiAtYyA8Y2hlY2tzdW0gZmlsZT5cbiIgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuQXZhaWxhYmxlIG1lc3NhZ2UgZGlnZXN0czpcbiIgKTsKKyAgICAgICAgbGlzdCA9IG1iZWR0bHNfbWRfbGlzdCgpOworICAgICAgICB3aGlsZSggKmxpc3QgKQorICAgICAgICB7CisgICAgICAgICAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggKmxpc3QgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAlc1xuIiwgbWJlZHRsc19tZF9nZXRfbmFtZSggbWRfaW5mbyApICk7CisgICAgICAgICAgICBsaXN0Kys7CisgICAgICAgIH0KKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuICBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSZWFkIHRoZSBNRCBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgKi8KKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKCBhcmd2WzFdICk7CisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIk1lc3NhZ2UgRGlnZXN0ICclcycgbm90IGZvdW5kXG4iLCBhcmd2WzFdICk7CisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKyAgICBpZiggbWJlZHRsc19tZF9zZXR1cCggJm1kX2N0eCwgbWRfaW5mbywgMCApICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29udGV4dC5cbiIgKTsKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgcmV0ID0gMDsKKyAgICBpZiggYXJnYyA9PSA0ICYmIHN0cmNtcCggIi1jIiwgYXJndlsyXSApID09IDAgKQorICAgIHsKKyAgICAgICAgcmV0IHw9IGdlbmVyaWNfY2hlY2soIG1kX2luZm8sIGFyZ3ZbM10gKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGZvciggaSA9IDI7IGkgPCBhcmdjOyBpKysgKQorICAgICAgICByZXQgfD0gZ2VuZXJpY19wcmludCggbWRfaW5mbywgYXJndltpXSApOworCitleGl0OgorICAgIG1iZWR0bHNfbWRfZnJlZSggJm1kX2N0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX01EX0MgJiYgTUJFRFRMU19GU19JTyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2hhc2gvaGVsbG8uYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9oYXNoL2hlbGxvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY0MjBmMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9oYXNoL2hlbGxvLmMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICBDbGFzc2ljICJIZWxsbywgd29ybGQiIGRlbW9uc3RyYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyNpbmNsdWRlICJtYmVkdGxzL21kNS5oIgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01ENV9DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX01ENV9DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIHZvaWQgKQoreworICAgIGludCBpOworICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XTsKKyAgICBjaGFyIHN0cltdID0gIkhlbGxvLCB3b3JsZCEiOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgTUQ1KCclcycpID0gIiwgc3RyICk7CisKKyAgICBtYmVkdGxzX21kNSggKHVuc2lnbmVkIGNoYXIgKikgc3RyLCAxMywgZGlnZXN0ICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJTAyeCIsIGRpZ2VzdFtpXSApOworCisgICAgbWJlZHRsc19wcmludGYoICJcblxuIiApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19NRDVfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvQ01ha2VMaXN0cy50eHQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTM3YTQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw2MyBAQAorYWRkX2V4ZWN1dGFibGUoZGhfY2xpZW50IGRoX2NsaWVudC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRoX2NsaWVudCBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShkaF9nZW5wcmltZSBkaF9nZW5wcmltZS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRoX2dlbnByaW1lIG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKGRoX3NlcnZlciBkaF9zZXJ2ZXIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhkaF9zZXJ2ZXIgbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUoZWNkaF9jdXJ2ZTI1NTE5IGVjZGhfY3VydmUyNTUxOS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGVjZGhfY3VydmUyNTUxOSBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShlY2RzYSBlY2RzYS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGVjZHNhIG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKGdlbl9rZXkgZ2VuX2tleS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGdlbl9rZXkgbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUoa2V5X2FwcCBrZXlfYXBwLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoa2V5X2FwcCBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShrZXlfYXBwX3dyaXRlciBrZXlfYXBwX3dyaXRlci5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGtleV9hcHBfd3JpdGVyIG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKG1waV9kZW1vIG1waV9kZW1vLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMobXBpX2RlbW8gbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUocnNhX2dlbmtleSByc2FfZ2Vua2V5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMocnNhX2dlbmtleSBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShyc2Ffc2lnbiByc2Ffc2lnbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHJzYV9zaWduIG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKHJzYV92ZXJpZnkgcnNhX3ZlcmlmeS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHJzYV92ZXJpZnkgbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUocnNhX3NpZ25fcHNzIHJzYV9zaWduX3Bzcy5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHJzYV9zaWduX3BzcyBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShyc2FfdmVyaWZ5X3BzcyByc2FfdmVyaWZ5X3Bzcy5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHJzYV92ZXJpZnlfcHNzIG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKHJzYV9lbmNyeXB0IHJzYV9lbmNyeXB0LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMocnNhX2VuY3J5cHQgbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUocnNhX2RlY3J5cHQgcnNhX2RlY3J5cHQuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhyc2FfZGVjcnlwdCBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShwa19zaWduIHBrX3NpZ24uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhwa19zaWduIG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKHBrX3ZlcmlmeSBwa192ZXJpZnkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhwa192ZXJpZnkgbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUocGtfZW5jcnlwdCBwa19lbmNyeXB0LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMocGtfZW5jcnlwdCBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShwa19kZWNyeXB0IHBrX2RlY3J5cHQuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhwa19kZWNyeXB0IG1iZWR0bHMpCisKK2luc3RhbGwoVEFSR0VUUyBkaF9jbGllbnQgZGhfZ2VucHJpbWUgZGhfc2VydmVyIGtleV9hcHAgbXBpX2RlbW8gcnNhX2dlbmtleSByc2Ffc2lnbiByc2FfdmVyaWZ5IHJzYV9lbmNyeXB0IHJzYV9kZWNyeXB0IHBrX2VuY3J5cHQgcGtfZGVjcnlwdCBwa19zaWduIHBrX3ZlcmlmeSBnZW5fa2V5CisgICAgICAgIERFU1RJTkFUSU9OICJiaW4iCisgICAgICAgIFBFUk1JU1NJT05TIE9XTkVSX1JFQUQgT1dORVJfV1JJVEUgT1dORVJfRVhFQ1VURSBHUk9VUF9SRUFEIEdST1VQX0VYRUNVVEUgV09STERfUkVBRCBXT1JMRF9FWEVDVVRFKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZGhfY2xpZW50LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9kaF9jbGllbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzVkMGIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZGhfY2xpZW50LmMKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiAgRGlmZmllLUhlbGxtYW4tTWVya2xlIGtleSBleGNoYW5nZSAoY2xpZW50IHNpZGUpCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc190aW1lX3QgICAgIHRpbWVfdAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpICYmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpICYmIGRlZmluZWQoTUJFRFRMU19ORVRfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19SU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0ZTX0lPKSAmJiBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYWVzLmgiCisjaW5jbHVkZSAibWJlZHRscy9kaG0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhMS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2RlZmluZSBTRVJWRVJfTkFNRSAibG9jYWxob3N0IgorI2RlZmluZSBTRVJWRVJfUE9SVCAiMTE5OTkiCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0FFU19DKSB8fCAhZGVmaW5lZChNQkVEVExTX0RITV9DKSB8fCAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpIHx8ICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NIQTFfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19BRVNfQyBhbmQvb3IgTUJFRFRMU19ESE1fQyBhbmQvb3IgTUJFRFRMU19FTlRST1BZX0MgIgorICAgICAgICAgICAiYW5kL29yIE1CRURUTFNfTkVUX0MgYW5kL29yIE1CRURUTFNfUlNBX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfU0hBMjU2X0MgYW5kL29yIE1CRURUTFNfRlNfSU8gYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBGSUxFICpmOworCisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbiwgYnVmbGVuOworICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgc2VydmVyX2ZkOworCisgICAgdW5zaWduZWQgY2hhciAqcCwgKmVuZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyMDQ4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbMzJdOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAiZGhfY2xpZW50IjsKKworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgcnNhOworICAgIG1iZWR0bHNfZGhtX2NvbnRleHQgZGhtOworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgYWVzOworCisgICAgbWJlZHRsc19uZXRfaW5pdCggJnNlcnZlcl9mZCApOworICAgIG1iZWR0bHNfcnNhX2luaXQoICZyc2EsIE1CRURUTFNfUlNBX1BLQ1NfVjE1LCBNQkVEVExTX01EX1NIQTI1NiApOworICAgIG1iZWR0bHNfZGhtX2luaXQoICZkaG0gKTsKKyAgICBtYmVkdGxzX2Flc19pbml0KCAmYWVzICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKworICAgIC8qCisgICAgICogMS4gU2V0dXAgdGhlIFJORworICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAyLiBSZWFkIHRoZSBzZXJ2ZXIncyBwdWJsaWMgUlNBIGtleQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gUmVhZGluZyBwdWJsaWMga2V5IGZyb20gcnNhX3B1Yi50eHQiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggInJzYV9wdWIudHh0IiwgInJiIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3Qgb3BlbiByc2FfcHViLnR4dFxuIiBcCisgICAgICAgICAgICAgICAgIiAgISBQbGVhc2UgcnVuIHJzYV9nZW5rZXkgZmlyc3RcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19yc2FfaW5pdCggJnJzYSwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5OLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5FLCAxNiwgZiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9yZWFkX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcnNhLmxlbiA9ICggbWJlZHRsc19tcGlfYml0bGVuKCAmcnNhLk4gKSArIDcgKSA+PiAzOworCisgICAgZmNsb3NlKCBmICk7CisKKyAgICAvKgorICAgICAqIDMuIEluaXRpYXRlIHRoZSBjb25uZWN0aW9uCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBDb25uZWN0aW5nIHRvIHRjcC8lcy8lcyIsIFNFUlZFUl9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVkVSX1BPUlQgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfY29ubmVjdCggJnNlcnZlcl9mZCwgU0VSVkVSX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFUlZFUl9QT1JULCBNQkVEVExTX05FVF9QUk9UT19UQ1AgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfY29ubmVjdCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogNGEuIEZpcnN0IGdldCB0aGUgYnVmZmVyIGxlbmd0aAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gUmVjZWl2aW5nIHRoZSBzZXJ2ZXIncyBESCBwYXJhbWV0ZXJzIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfcmVjdiggJnNlcnZlcl9mZCwgYnVmLCAyICkgKSAhPSAyICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X3JlY3YgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBuID0gYnVmbGVuID0gKCBidWZbMF0gPDwgOCApIHwgYnVmWzFdOworICAgIGlmKCBidWZsZW4gPCAxIHx8IGJ1ZmxlbiA+IHNpemVvZiggYnVmICkgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgR290IGFuIGludmFsaWQgYnVmZmVyIGxlbmd0aFxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDRiLiBHZXQgdGhlIERITSBwYXJhbWV0ZXJzOiBQLCBHIGFuZCBZcyA9IEdeWHMgbW9kIFAKKyAgICAgKi8KKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfcmVjdiggJnNlcnZlcl9mZCwgYnVmLCBuICkgKSAhPSAoaW50KSBuICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X3JlY3YgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBwID0gYnVmLCBlbmQgPSBidWYgKyBidWZsZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2RobV9yZWFkX3BhcmFtcyggJmRobSwgJnAsIGVuZCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2RobV9yZWFkX3BhcmFtcyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBkaG0ubGVuIDwgNjQgfHwgZGhtLmxlbiA+IDUxMiApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBJbnZhbGlkIERITSBtb2R1bHVzIHNpemVcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiA1LiBDaGVjayB0aGF0IHRoZSBzZXJ2ZXIncyBSU0Egc2lnbmF0dXJlIG1hdGNoZXMKKyAgICAgKiAgICB0aGUgU0hBLTI1NiBoYXNoIG9mIChQLEcsWXMpCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBWZXJpZnlpbmcgdGhlIHNlcnZlcidzIFJTQSBzaWduYXR1cmUiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHAgKz0gMjsKKworICAgIGlmKCAoIG4gPSAoc2l6ZV90KSAoIGVuZCAtIHAgKSApICE9IHJzYS5sZW4gKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgSW52YWxpZCBSU0Egc2lnbmF0dXJlIHNpemVcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zaGExKCBidWYsIChpbnQpKCBwIC0gMiAtIGJ1ZiApLCBoYXNoICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkoICZyc2EsIE5VTEwsIE5VTEwsIE1CRURUTFNfUlNBX1BVQkxJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX01EX1NIQTI1NiwgMCwgaGFzaCwgcCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDYuIFNlbmQgb3VyIHB1YmxpYyB2YWx1ZTogWWMgPSBHIF4gWGMgbW9kIFAKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFNlbmRpbmcgb3duIHB1YmxpYyB2YWx1ZSB0byBzZXJ2ZXIiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG4gPSBkaG0ubGVuOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZGhtX21ha2VfcHVibGljKCAmZGhtLCAoaW50KSBkaG0ubGVuLCBidWYsIG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZGhtX21ha2VfcHVibGljIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfc2VuZCggJnNlcnZlcl9mZCwgYnVmLCBuICkgKSAhPSAoaW50KSBuICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X3NlbmQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDcuIERlcml2ZSB0aGUgc2hhcmVkIHNlY3JldDogSyA9IFlzIF4gWGMgbW9kIFAKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFNoYXJlZCBzZWNyZXQ6ICIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoICZkaG0sIGJ1Ziwgc2l6ZW9mKCBidWYgKSwgJm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZm9yKCBuID0gMDsgbiA8IDE2OyBuKysgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiUwMngiLCBidWZbbl0gKTsKKworICAgIC8qCisgICAgICogOC4gU2V0dXAgdGhlIEFFUy0yNTYgZGVjcnlwdGlvbiBrZXkKKyAgICAgKgorICAgICAqIFRoaXMgaXMgYW4gb3Zlcmx5IHNpbXBsaWZpZWQgZXhhbXBsZTsgYmVzdCBwcmFjdGljZSBpcworICAgICAqIHRvIGhhc2ggdGhlIHNoYXJlZCBzZWNyZXQgd2l0aCBhIHJhbmRvbSB2YWx1ZSB0byBkZXJpdmUKKyAgICAgKiB0aGUga2V5aW5nIG1hdGVyaWFsIGZvciB0aGUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGtleXMsCisgICAgICogSVZzIGFuZCBNQUNzLgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiLi4uXG4gIC4gUmVjZWl2aW5nIGFuZCBkZWNyeXB0aW5nIHRoZSBjaXBoZXJ0ZXh0IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX2Flc19zZXRrZXlfZGVjKCAmYWVzLCBidWYsIDI1NiApOworCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X3JlY3YoICZzZXJ2ZXJfZmQsIGJ1ZiwgMTYgKSApICE9IDE2ICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X3JlY3YgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX2Flc19jcnlwdF9lY2IoICZhZXMsIE1CRURUTFNfQUVTX0RFQ1JZUFQsIGJ1ZiwgYnVmICk7CisgICAgYnVmWzE2XSA9ICdcMCc7CisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBQbGFpbnRleHQgaXMgXCIlc1wiXG5cbiIsIChjaGFyICopIGJ1ZiApOworCitleGl0OgorCisgICAgbWJlZHRsc19uZXRfZnJlZSggJnNlcnZlcl9mZCApOworCisgICAgbWJlZHRsc19hZXNfZnJlZSggJmFlcyApOworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZyc2EgKTsKKyAgICBtYmVkdGxzX2RobV9mcmVlKCAmZGhtICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICYmIE1CRURUTFNfREhNX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYKKyAgICAgICAgICBNQkVEVExTX05FVF9DICYmIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19TSEEyNTZfQyAmJgorICAgICAgICAgIE1CRURUTFNfRlNfSU8gJiYgTUJFRFRMU19DVFJfRFJCR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9kaF9nZW5wcmltZS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZGhfZ2VucHJpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGE5NGExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZGhfZ2VucHJpbWUuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqICBEaWZmaWUtSGVsbG1hbi1NZXJrbGUga2V5IGV4Y2hhbmdlIChwcmltZSBnZW5lcmF0aW9uKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgICB0aW1lX3QKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgfHwgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0dFTlBSSU1FKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19GU19JTyBhbmQvb3IgTUJFRFRMU19DVFJfRFJCR19DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0dFTlBSSU1FIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSAibWJlZHRscy9iaWdudW0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiXG4gdXNhZ2U6IGRoX2dlbnByaW1lIHBhcmFtPTw+Li4uXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIGFjY2VwcmFibGUgcGFyYW1ldGVyczpcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgYml0cz0lJWQgICAgICAgICAgIGRlZmF1bHQ6IDIwNDhcbiIKKworI2RlZmluZSBERkxfQklUUyAgICAyMDQ4CisKKy8qCisgKiBOb3RlOiBHID0gNCBpcyBhbHdheXMgYSBxdWFkcmF0aWMgcmVzaWR1ZSBtb2QgUCwKKyAqIHNvIGl0IGlzIGEgZ2VuZXJhdG9yIG9mIG9yZGVyIFEgKHdpdGggUCA9IDIqUSsxKS4KKyAqLworI2RlZmluZSBHRU5FUkFUT1IgIjQiCisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqKmFyZ3YgKQoreworICAgIGludCByZXQgPSAxOworICAgIG1iZWR0bHNfbXBpIEcsIFAsIFE7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJkaF9nZW5wcmltZSI7CisgICAgRklMRSAqZm91dDsKKyAgICBpbnQgbmJpdHMgPSBERkxfQklUUzsKKyAgICBpbnQgaTsKKyAgICBjaGFyICpwLCAqcTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZHICk7IG1iZWR0bHNfbXBpX2luaXQoICZQICk7IG1iZWR0bHNfbXBpX2luaXQoICZRICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKworICAgIGlmKCBhcmdjID09IDAgKQorICAgIHsKKyAgICB1c2FnZToKKyAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGZvciggaSA9IDE7IGkgPCBhcmdjOyBpKysgKQorICAgIHsKKyAgICAgICAgcCA9IGFyZ3ZbaV07CisgICAgICAgIGlmKCAoIHEgPSBzdHJjaHIoIHAsICc9JyApICkgPT0gTlVMTCApCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAqcSsrID0gJ1wwJzsKKworICAgICAgICBpZiggc3RyY21wKCBwLCAiYml0cyIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbmJpdHMgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggbmJpdHMgPCAwIHx8IG5iaXRzID4gTUJFRFRMU19NUElfTUFYX0JJVFMgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkcsIDEwLCBHRU5FUkFUT1IgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgICEgR2VuZXJhdGluZyBsYXJnZSBwcmltZXMgbWF5IHRha2UgbWludXRlcyFcbiIgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiAgLiBHZW5lcmF0aW5nIHRoZSBtb2R1bHVzLCBwbGVhc2Ugd2FpdC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgLyoKKyAgICAgKiBUaGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lLi4uCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfZ2VuX3ByaW1lKCAmUCwgbmJpdHMsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9nZW5fcHJpbWUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAuIFZlcmlmeWluZyB0aGF0IFEgPSAoUC0xKS8yIGlzIHByaW1lLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9zdWJfaW50KCAmUSwgJlAsIDEgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19tcGlfc3ViX2ludCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX2Rpdl9pbnQoICZRLCBOVUxMLCAmUSwgMiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9kaXZfaW50IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfaXNfcHJpbWUoICZRLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX2lzX3ByaW1lIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiAgLiBFeHBvcnRpbmcgdGhlIHZhbHVlIGluIGRoX3ByaW1lLnR4dC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggZm91dCA9IGZvcGVuKCAiZGhfcHJpbWUudHh0IiwgIndiKyIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IGNyZWF0ZSBkaF9wcmltZS50eHRcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlAgPSAiLCAmUCwgMTYsIGZvdXQgKSAhPSAwICkgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRyA9ICIsICZHLCAxNiwgZm91dCApICE9IDAgKSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV93cml0ZV9maWxlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBmY2xvc2UoIGZvdXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG5cbiIgKTsKKyAgICBmY2xvc2UoIGZvdXQgKTsKKworZXhpdDoKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZHICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZQICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZRICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX0ZTX0lPICYmCisgICAgICAgICAgTUJFRFRMU19DVFJfRFJCR19DICYmIE1CRURUTFNfR0VOUFJJTUUgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2RoX3ByaW1lLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2RoX3ByaW1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTBjMjgxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZGhfcHJpbWUudHh0CkBAIC0wLDAgKzEsMiBAQAorUCA9IEZGRkZGRkZGRkZGRkZGRkZDOTBGREFBMjIxNjhDMjM0QzRDNjYyOEI4MERDMUNEMTI5MDI0RTA4OEE2N0NDNzQwMjBCQkVBNjNCMTM5QjIyNTE0QTA4Nzk4RTM0MDREREVGOTUxOUIzQ0QzQTQzMUIzMDJCMEE2REYyNUYxNDM3NEZFMTM1NkQ2RDUxQzI0NUU0ODVCNTc2NjI1RTdFQzZGNDRDNDJFOUE2MzdFRDZCMEJGRjVDQjZGNDA2QjdFREVFMzg2QkZCNUE4OTlGQTVBRTlGMjQxMTdDNEIxRkU2NDkyODY2NTFFQ0U0NUIzREMyMDA3Q0I4QTE2M0JGMDU5OERBNDgzNjFDNTVEMzlBNjkxNjNGQThGRDI0Q0Y1RjgzNjU1RDIzRENBM0FEOTYxQzYyRjM1NjIwODU1MkJCOUVENTI5MDc3MDk2OTY2RDY3MEMzNTRFNEFCQzk4MDRGMTc0NkMwOENBMTgyMTdDMzI5MDVFNDYyRTM2Q0UzQkUzOUU3NzJDMTgwRTg2MDM5QjI3ODNBMkVDMDdBMjhGQjVDNTVERjA2RjRDNTJDOURFMkJDQkY2OTU1ODE3MTgzOTk1NDk3Q0VBOTU2QUU1MTVEMjI2MTg5OEZBMDUxMDE1NzI4RTVBOEFBQ0FBNjhGRkZGRkZGRkZGRkZGRkZGCitHID0gMDIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2RoX3NlcnZlci5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZGhfc2VydmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmMmIxYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2RoX3NlcnZlci5jCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogIERpZmZpZS1IZWxsbWFuLU1lcmtsZSBrZXkgZXhjaGFuZ2UgKHNlcnZlciBzaWRlKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgICB0aW1lX3QKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKSAmJiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfTkVUX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19GU19JTykgJiYgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvbmV0X3NvY2tldHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Flcy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZGhtLmgiCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNkZWZpbmUgU0VSVkVSX1BPUlQgIjExOTk5IgorI2RlZmluZSBQTEFJTlRFWFQgIj09SGVsbG8gdGhlcmUhPT0iCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0FFU19DKSB8fCAhZGVmaW5lZChNQkVEVExTX0RITV9DKSB8fCAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpIHx8ICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NIQTFfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19BRVNfQyBhbmQvb3IgTUJFRFRMU19ESE1fQyBhbmQvb3IgTUJFRFRMU19FTlRST1BZX0MgIgorICAgICAgICAgICAiYW5kL29yIE1CRURUTFNfTkVUX0MgYW5kL29yIE1CRURUTFNfUlNBX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfU0hBMjU2X0MgYW5kL29yIE1CRURUTFNfRlNfSU8gYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBGSUxFICpmOworCisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbiwgYnVmbGVuOworICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgbGlzdGVuX2ZkLCBjbGllbnRfZmQ7CisKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyMDQ4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmMlsyXTsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gImRoX3NlcnZlciI7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IHJzYTsKKyAgICBtYmVkdGxzX2RobV9jb250ZXh0IGRobTsKKyAgICBtYmVkdGxzX2Flc19jb250ZXh0IGFlczsKKworICAgIG1iZWR0bHNfbmV0X2luaXQoICZsaXN0ZW5fZmQgKTsKKyAgICBtYmVkdGxzX25ldF9pbml0KCAmY2xpZW50X2ZkICk7CisgICAgbWJlZHRsc19yc2FfaW5pdCggJnJzYSwgTUJFRFRMU19SU0FfUEtDU19WMTUsIE1CRURUTFNfTURfU0hBMjU2ICk7CisgICAgbWJlZHRsc19kaG1faW5pdCggJmRobSApOworICAgIG1iZWR0bHNfYWVzX2luaXQoICZhZXMgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgLyoKKyAgICAgKiAxLiBTZXR1cCB0aGUgUk5HCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDJhLiBSZWFkIHRoZSBzZXJ2ZXIncyBwcml2YXRlIFJTQSBrZXkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFJlYWRpbmcgcHJpdmF0ZSBrZXkgZnJvbSByc2FfcHJpdi50eHQiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggInJzYV9wcml2LnR4dCIsICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IG9wZW4gcnNhX3ByaXYudHh0XG4iIFwKKyAgICAgICAgICAgICAgICAiICAhIFBsZWFzZSBydW4gcnNhX2dlbmtleSBmaXJzdFxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmcnNhLCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLk4gLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5FICwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuRCAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLlAgLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5RICwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuRFAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLkRRLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5RUCwgMTYsIGYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19tcGlfcmVhZF9maWxlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJzYS5sZW4gPSAoIG1iZWR0bHNfbXBpX2JpdGxlbiggJnJzYS5OICkgKyA3ICkgPj4gMzsKKworICAgIGZjbG9zZSggZiApOworCisgICAgLyoKKyAgICAgKiAyYi4gR2V0IHRoZSBESE0gbW9kdWx1cyBhbmQgZ2VuZXJhdG9yCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBSZWFkaW5nIERIIHBhcmFtZXRlcnMgZnJvbSBkaF9wcmltZS50eHQiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggImRoX3ByaW1lLnR4dCIsICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IG9wZW4gZGhfcHJpbWUudHh0XG4iIFwKKyAgICAgICAgICAgICAgICAiICAhIFBsZWFzZSBydW4gZGhfZ2VucHJpbWUgZmlyc3RcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJmRobS5QLCAxNiwgZiApICE9IDAgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmZGhtLkcsIDE2LCBmICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBJbnZhbGlkIERIIHBhcmFtZXRlciBmaWxlXG5cbiIgKTsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIC8qCisgICAgICogMy4gV2FpdCBmb3IgYSBjbGllbnQgdG8gY29ubmVjdAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gV2FpdGluZyBmb3IgYSByZW1vdGUgY29ubmVjdGlvbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfYmluZCggJmxpc3Rlbl9mZCwgTlVMTCwgU0VSVkVSX1BPUlQsIE1CRURUTFNfTkVUX1BST1RPX1RDUCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9iaW5kIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfYWNjZXB0KCAmbGlzdGVuX2ZkLCAmY2xpZW50X2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9hY2NlcHQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDQuIFNldHVwIHRoZSBESCBwYXJhbWV0ZXJzIChQLEcsWXMpCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZW5kaW5nIHRoZSBzZXJ2ZXIncyBESCBwYXJhbWV0ZXJzIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fbWFrZV9wYXJhbXMoICZkaG0sIChpbnQpIG1iZWR0bHNfbXBpX3NpemUoICZkaG0uUCApLCBidWYsICZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2RobV9tYWtlX3BhcmFtcyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogNS4gU2lnbiB0aGUgcGFyYW1ldGVycyBhbmQgc2VuZCB0aGVtCisgICAgICovCisgICAgbWJlZHRsc19zaGExKCBidWYsIG4sIGhhc2ggKTsKKworICAgIGJ1ZltuICAgIF0gPSAodW5zaWduZWQgY2hhcikoIHJzYS5sZW4gPj4gOCApOworICAgIGJ1ZltuICsgMV0gPSAodW5zaWduZWQgY2hhcikoIHJzYS5sZW4gICAgICApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19yc2FfcGtjczFfc2lnbiggJnJzYSwgTlVMTCwgTlVMTCwgTUJFRFRMU19SU0FfUFJJVkFURSwgTUJFRFRMU19NRF9TSEEyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGhhc2gsIGJ1ZiArIG4gKyAyICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24gcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBidWZsZW4gPSBuICsgMiArIHJzYS5sZW47CisgICAgYnVmMlswXSA9ICh1bnNpZ25lZCBjaGFyKSggYnVmbGVuID4+IDggKTsKKyAgICBidWYyWzFdID0gKHVuc2lnbmVkIGNoYXIpKCBidWZsZW4gICAgICApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfc2VuZCggJmNsaWVudF9mZCwgYnVmMiwgMiApICkgIT0gMiB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbmV0X3NlbmQoICZjbGllbnRfZmQsIGJ1ZiwgYnVmbGVuICkgKSAhPSAoaW50KSBidWZsZW4gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfc2VuZCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogNi4gR2V0IHRoZSBjbGllbnQncyBwdWJsaWMgdmFsdWU6IFljID0gRyBeIFhjIG1vZCBQCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBSZWNlaXZpbmcgdGhlIGNsaWVudCdzIHB1YmxpYyB2YWx1ZSIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X3JlY3YoICZjbGllbnRfZmQsIGJ1ZiwgbiApICkgIT0gKGludCkgbiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9yZWN2IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fcmVhZF9wdWJsaWMoICZkaG0sIGJ1ZiwgZGhtLmxlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2RobV9yZWFkX3B1YmxpYyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogNy4gRGVyaXZlIHRoZSBzaGFyZWQgc2VjcmV0OiBLID0gWXMgXiBYYyBtb2QgUAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2hhcmVkIHNlY3JldDogIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggJmRobSwgYnVmLCBzaXplb2YoIGJ1ZiApLCAmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19kaG1fY2FsY19zZWNyZXQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBmb3IoIG4gPSAwOyBuIDwgMTY7IG4rKyApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJTAyeCIsIGJ1ZltuXSApOworCisgICAgLyoKKyAgICAgKiA4LiBTZXR1cCB0aGUgQUVTLTI1NiBlbmNyeXB0aW9uIGtleQorICAgICAqCisgICAgICogVGhpcyBpcyBhbiBvdmVybHkgc2ltcGxpZmllZCBleGFtcGxlOyBiZXN0IHByYWN0aWNlIGlzCisgICAgICogdG8gaGFzaCB0aGUgc2hhcmVkIHNlY3JldCB3aXRoIGEgcmFuZG9tIHZhbHVlIHRvIGRlcml2ZQorICAgICAqIHRoZSBrZXlpbmcgbWF0ZXJpYWwgZm9yIHRoZSBlbmNyeXB0aW9uL2RlY3J5cHRpb24ga2V5cworICAgICAqIGFuZCBNQUNzLgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiLi4uXG4gIC4gRW5jcnlwdGluZyBhbmQgc2VuZGluZyB0aGUgY2lwaGVydGV4dCIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmFlcywgYnVmLCAyNTYgKTsKKyAgICBtZW1jcHkoIGJ1ZiwgUExBSU5URVhULCAxNiApOworICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggJmFlcywgTUJFRFRMU19BRVNfRU5DUllQVCwgYnVmLCBidWYgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X3NlbmQoICZjbGllbnRfZmQsIGJ1ZiwgMTYgKSApICE9IDE2ICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X3NlbmQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuXG4iICk7CisKK2V4aXQ6CisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmY2xpZW50X2ZkICk7CisgICAgbWJlZHRsc19uZXRfZnJlZSggJmxpc3Rlbl9mZCApOworCisgICAgbWJlZHRsc19hZXNfZnJlZSggJmFlcyApOworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZyc2EgKTsKKyAgICBtYmVkdGxzX2RobV9mcmVlKCAmZGhtICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICYmIE1CRURUTFNfREhNX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYKKyAgICAgICAgICBNQkVEVExTX05FVF9DICYmIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19TSEEyNTZfQyAmJgorICAgICAgICAgIE1CRURUTFNfRlNfSU8gJiYgTUJFRFRMU19DVFJfRFJCR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9lY2RoX2N1cnZlMjU1MTkuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2VjZGhfY3VydmUyNTUxOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMTVjNDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9lY2RoX2N1cnZlMjU1MTkuYwpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqICBFeGFtcGxlIEVDREhFIHdpdGggQ3VydmUyNTUxOSBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCAiTUJFRFRMU19FQ0RIX0MgYW5kL29yICIKKyAgICAgICAgICAgICAgICAgICAgIk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCBhbmQvb3IgIgorICAgICAgICAgICAgICAgICAgICAiTUJFRFRMU19FTlRST1BZX0MgYW5kL29yIE1CRURUTFNfQ1RSX0RSQkdfQyAiCisgICAgICAgICAgICAgICAgICAgICJub3QgZGVmaW5lZFxuIiApOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VjZGguaCIKKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19lY2RoX2NvbnRleHQgY3R4X2NsaSwgY3R4X3NydjsKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICB1bnNpZ25lZCBjaGFyIGNsaV90b19zcnZbMzJdLCBzcnZfdG9fY2xpWzMyXTsKKyAgICBjb25zdCBjaGFyIHBlcnNbXSA9ICJlY2RoIjsKKyAgICAoKHZvaWQpIGFyZ2MpOworICAgICgodm9pZCkgYXJndik7CisKKyAgICBtYmVkdGxzX2VjZGhfaW5pdCggJmN0eF9jbGkgKTsKKyAgICBtYmVkdGxzX2VjZGhfaW5pdCggJmN0eF9zcnYgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgLyoKKyAgICAgKiBJbml0aWFsaXplIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHJfZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIHBlcnMgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIENsaWVudDogaW5pYWxpemUgY29udGV4dCBhbmQgZ2VuZXJhdGUga2V5cGFpcgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNldHRpbmcgdXAgY2xpZW50IGNvbnRleHQuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZjdHhfY2xpLmdycCwgTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOSApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2VjcF9ncm91cF9sb2FkIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCAmY3R4X2NsaS5ncnAsICZjdHhfY2xpLmQsICZjdHhfY2xpLlEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmY3R4X2NsaS5RLlgsIGNsaV90b19zcnYsIDMyICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiBTZXJ2ZXI6IGluaXRpYWxpemUgY29udGV4dCBhbmQgZ2VuZXJhdGUga2V5cGFpcgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNldHRpbmcgdXAgc2VydmVyIGNvbnRleHQuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZjdHhfc3J2LmdycCwgTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOSApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2VjcF9ncm91cF9sb2FkIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCAmY3R4X3Nydi5ncnAsICZjdHhfc3J2LmQsICZjdHhfc3J2LlEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmY3R4X3Nydi5RLlgsIHNydl90b19jbGksIDMyICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiBTZXJ2ZXI6IHJlYWQgcGVlcidzIGtleSBhbmQgZ2VuZXJhdGUgc2hhcmVkIHNlY3JldAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNlcnZlciByZWFkaW5nIGNsaWVudCBrZXkgYW5kIGNvbXB1dGluZyBzZWNyZXQuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfbXBpX2xzZXQoICZjdHhfc3J2LlFwLlosIDEgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19tcGlfbHNldCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJmN0eF9zcnYuUXAuWCwgY2xpX3RvX3NydiwgMzIgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkKCAmY3R4X3Nydi5ncnAsICZjdHhfc3J2LnosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4X3Nydi5RcCwgJmN0eF9zcnYuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIENsaWVudDogcmVhZCBwZWVyJ3Mga2V5IGFuZCBnZW5lcmF0ZSBzaGFyZWQgc2VjcmV0CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ2xpZW50IHJlYWRpbmcgc2VydmVyIGtleSBhbmQgY29tcHV0aW5nIHNlY3JldC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbWJlZHRsc19tcGlfbHNldCggJmN0eF9jbGkuUXAuWiwgMSApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9sc2V0IHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmY3R4X2NsaS5RcC5YLCBzcnZfdG9fY2xpLCAzMiApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoICZjdHhfY2xpLmdycCwgJmN0eF9jbGkueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHhfY2xpLlFwLCAmY3R4X2NsaS5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogVmVyaWZpY2F0aW9uOiBhcmUgdGhlIGNvbXB1dGVkIHNlY3JldCBlcXVhbD8KKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDaGVja2luZyBpZiBib3RoIGNvbXB1dGVkIHNlY3JldHMgYXJlIGVxdWFsLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX21waV9jbXBfbXBpKCAmY3R4X2NsaS56LCAmY3R4X3Nydi56ICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZWNkaF9jb21wdXRlX3NoYXJlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisKK2V4aXQ6CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfZWNkaF9mcmVlKCAmY3R4X3NydiApOworICAgIG1iZWR0bHNfZWNkaF9mcmVlKCAmY3R4X2NsaSApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyAgICByZXR1cm4oIHJldCAhPSAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ0RIX0MgJiYgTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEICYmCisgICAgICAgICAgTUJFRFRMU19FTlRST1BZX0MgJiYgTUJFRFRMU19DVFJfRFJCR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9lY2RzYS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZWNkc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjlkMzEyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZWNkc2EuYwpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqICBFeGFtcGxlIEVDRFNBIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpICYmIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VjZHNhLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisvKgorICogVW5jb21tZW50IHRvIHNob3cga2V5IGFuZCBzaWduYXR1cmUgZGV0YWlscworICovCisjZGVmaW5lIFZFUkJPU0UKKworLyoKKyAqIFVuY29tbWVudCB0byBmb3JjZSB1c2Ugb2YgYSBzcGVjaWZpYyBjdXJ2ZQorICovCisjZGVmaW5lIEVDUEFSQU1TICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMQorCisjaWYgIWRlZmluZWQoRUNQQVJBTVMpCisjZGVmaW5lIEVDUEFSQU1TICAgIG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKS0+Z3JwX2lkCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfRUNEU0FfQyBhbmQvb3IgTUJFRFRMU19TSEEyNTZfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19FTlRST1BZX0MgYW5kL29yIE1CRURUTFNfQ1RSX0RSQkdfQyBub3QgZGVmaW5lZFxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorI2lmIGRlZmluZWQoVkVSQk9TRSkKK3N0YXRpYyB2b2lkIGR1bXBfYnVmKCBjb25zdCBjaGFyICp0aXRsZSwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBzaXplX3QgaTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiJXMiLCB0aXRsZSApOworICAgIGZvciggaSA9IDA7IGkgPCBsZW47IGkrKyApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCIlYyVjIiwgIjAxMjM0NTY3ODlBQkNERUYiIFtidWZbaV0gLyAxNl0sCisgICAgICAgICAgICAgICAgICAgICAgICIwMTIzNDU2Nzg5QUJDREVGIiBbYnVmW2ldICUgMTZdICk7CisgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9wdWJrZXkoIGNvbnN0IGNoYXIgKnRpdGxlLCBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKmtleSApCit7CisgICAgdW5zaWduZWQgY2hhciBidWZbMzAwXTsKKyAgICBzaXplX3QgbGVuOworCisgICAgaWYoIG1iZWR0bHNfZWNwX3BvaW50X3dyaXRlX2JpbmFyeSggJmtleS0+Z3JwLCAma2V5LT5RLAorICAgICAgICAgICAgICAgIE1CRURUTFNfRUNQX1BGX1VOQ09NUFJFU1NFRCwgJmxlbiwgYnVmLCBzaXplb2YgYnVmICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZigiaW50ZXJuYWwgZXJyb3JcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZHVtcF9idWYoIHRpdGxlLCBidWYsIGxlbiApOworfQorI2Vsc2UKKyNkZWZpbmUgZHVtcF9idWYoIGEsIGIsIGMgKQorI2RlZmluZSBkdW1wX3B1YmtleSggYSwgYiApCisjZW5kaWYKKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19lY2RzYV9jb250ZXh0IGN0eF9zaWduLCBjdHhfdmVyaWZ5OworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFtdID0gIlRoaXMgc2hvdWxkIGJlIHRoZSBoYXNoIG9mIGEgbWVzc2FnZS4iOworICAgIHVuc2lnbmVkIGNoYXIgc2lnWzUxMl07CisgICAgc2l6ZV90IHNpZ19sZW47CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJlY2RzYSI7CisgICAgKCh2b2lkKSBhcmd2KTsKKworICAgIG1iZWR0bHNfZWNkc2FfaW5pdCggJmN0eF9zaWduICk7CisgICAgbWJlZHRsc19lY2RzYV9pbml0KCAmY3R4X3ZlcmlmeSApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICBtZW1zZXQoc2lnLCAwLCBzaXplb2YoIHNpZyApICk7CisgICAgcmV0ID0gMTsKKworICAgIGlmKCBhcmdjICE9IDEgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJ1c2FnZTogZWNkc2FcbiIgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworI2VuZGlmCisKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogR2VuZXJhdGUgYSBrZXkgcGFpciBmb3Igc2lnbmluZworICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiAgLiBHZW5lcmF0aW5nIGtleSBwYWlyLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZHNhX2dlbmtleSggJmN0eF9zaWduLCBFQ1BBUkFNUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19lY2RzYV9nZW5rZXkgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2sgKGtleSBzaXplOiAlZCBiaXRzKVxuIiwgKGludCkgY3R4X3NpZ24uZ3JwLnBiaXRzICk7CisKKyAgICBkdW1wX3B1YmtleSggIiAgKyBQdWJsaWMga2V5OiAiLCAmY3R4X3NpZ24gKTsKKworICAgIC8qCisgICAgICogU2lnbiBzb21lIG1lc3NhZ2UgaGFzaAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNpZ25pbmcgbWVzc2FnZS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RzYV93cml0ZV9zaWduYXR1cmUoICZjdHhfc2lnbiwgTUJFRFRMU19NRF9TSEEyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBzaXplb2YoIGhhc2ggKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZywgJnNpZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZWNkc2FfZ2Vua2V5IHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBtYmVkdGxzX3ByaW50ZiggIiBvayAoc2lnbmF0dXJlIGxlbmd0aCA9ICV1KVxuIiwgKHVuc2lnbmVkIGludCkgc2lnX2xlbiApOworCisgICAgZHVtcF9idWYoICIgICsgSGFzaDogIiwgaGFzaCwgc2l6ZW9mIGhhc2ggKTsKKyAgICBkdW1wX2J1ZiggIiAgKyBTaWduYXR1cmU6ICIsIHNpZywgc2lnX2xlbiApOworCisgICAgLyoKKyAgICAgKiBUcmFuc2ZlciBwdWJsaWMgaW5mb3JtYXRpb24gdG8gdmVyaWZ5aW5nIGNvbnRleHQKKyAgICAgKgorICAgICAqIFdlIGNvdWxkIHVzZSB0aGUgc2FtZSBjb250ZXh0IGZvciB2ZXJpZmljYXRpb24gYW5kIHNpZ25hdHVyZXMsIGJ1dCB3ZQorICAgICAqIGNob3NlIHRvIHVzZSBhIG5ldyBvbmUgaW4gb3JkZXIgdG8gbWFrZSBpdCBjbGVhciB0aGF0IHRoZSB2ZXJpZnlpbmcKKyAgICAgKiBjb250ZXh0IG9ubHkgbmVlZHMgdGhlIHB1YmxpYyBrZXkgKFEpLCBhbmQgbm90IHRoZSBwcml2YXRlIGtleSAoZCkuCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gUHJlcGFyaW5nIHZlcmlmaWNhdGlvbiBjb250ZXh0Li4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF9ncm91cF9jb3B5KCAmY3R4X3ZlcmlmeS5ncnAsICZjdHhfc2lnbi5ncnAgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19lY3BfZ3JvdXBfY29weSByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF9jb3B5KCAmY3R4X3ZlcmlmeS5RLCAmY3R4X3NpZ24uUSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2VjcF9jb3B5IHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IDA7CisKKyAgICAvKgorICAgICAqIFZlcmlmeSBzaWduYXR1cmUKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAuIFZlcmlmeWluZyBzaWduYXR1cmUuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkc2FfcmVhZF9zaWduYXR1cmUoICZjdHhfdmVyaWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBzaXplb2YoIGhhc2ggKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnLCBzaWdfbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZWNkc2FfcmVhZF9zaWduYXR1cmUgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworZXhpdDoKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19lY2RzYV9mcmVlKCAmY3R4X3ZlcmlmeSApOworICAgIG1iZWR0bHNfZWNkc2FfZnJlZSggJmN0eF9zaWduICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9DICYmIE1CRURUTFNfRU5UUk9QWV9DICYmIE1CRURUTFNfQ1RSX0RSQkdfQyAmJgorICAgICAgICAgIEVDUEFSQU1TICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9nZW5fa2V5LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9nZW5fa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgxMjY5NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2dlbl9rZXkuYwpAQCAtMCwwICsxLDQyNSBAQAorLyoKKyAqICBLZXkgZ2VuZXJhdGlvbiBhcHBsaWNhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19XUklURV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9way5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZWNkc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgIWRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIERFVl9SQU5ET01fVEhSRVNIT0xEICAgICAgICAzMgorCitpbnQgZGV2X3JhbmRvbV9lbnRyb3B5X3BvbGwoIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBGSUxFICpmaWxlOworICAgIHNpemVfdCByZXQsIGxlZnQgPSBsZW47CisgICAgdW5zaWduZWQgY2hhciAqcCA9IG91dHB1dDsKKyAgICAoKHZvaWQpIGRhdGEpOworCisgICAgKm9sZW4gPSAwOworCisgICAgZmlsZSA9IGZvcGVuKCAiL2Rldi9yYW5kb20iLCAicmIiICk7CisgICAgaWYoIGZpbGUgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICk7CisKKyAgICB3aGlsZSggbGVmdCA+IDAgKQorICAgIHsKKyAgICAgICAgLyogL2Rldi9yYW5kb20gY2FuIHJldHVybiBtdWNoIGxlc3MgdGhhbiByZXF1ZXN0ZWQuIElmIHNvLCB0cnkgYWdhaW4gKi8KKyAgICAgICAgcmV0ID0gZnJlYWQoIHAsIDEsIGxlZnQsIGZpbGUgKTsKKyAgICAgICAgaWYoIHJldCA9PSAwICYmIGZlcnJvciggZmlsZSApICkKKyAgICAgICAgeworICAgICAgICAgICAgZmNsb3NlKCBmaWxlICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCApOworICAgICAgICB9CisKKyAgICAgICAgcCArPSByZXQ7CisgICAgICAgIGxlZnQgLT0gcmV0OworICAgICAgICBzbGVlcCggMSApOworICAgIH0KKyAgICBmY2xvc2UoIGZpbGUgKTsKKyAgICAqb2xlbiA9IGxlbjsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qICFfV0lOMzIgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorI2RlZmluZSBERkxfRUNfQ1VSVkUgICAgICAgICAgICBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCktPmdycF9pZAorI2Vsc2UKKyNkZWZpbmUgREZMX0VDX0NVUlZFICAgICAgICAgICAgMAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNkZWZpbmUgVVNBR0VfREVWX1JBTkRPTSBcCisgICAgIiAgICB1c2VfZGV2X3JhbmRvbT0wfDEgICAgZGVmYXVsdDogMFxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfREVWX1JBTkRPTSAiIgorI2VuZGlmIC8qICFfV0lOMzIgJiYgTUJFRFRMU19GU19JTyAqLworCisjZGVmaW5lIEZPUk1BVF9QRU0gICAgICAgICAgICAgIDAKKyNkZWZpbmUgRk9STUFUX0RFUiAgICAgICAgICAgICAgMQorCisjZGVmaW5lIERGTF9UWVBFICAgICAgICAgICAgICAgIE1CRURUTFNfUEtfUlNBCisjZGVmaW5lIERGTF9SU0FfS0VZU0laRSAgICAgICAgIDQwOTYKKyNkZWZpbmUgREZMX0ZJTEVOQU1FICAgICAgICAgICAgImtleWZpbGUua2V5IgorI2RlZmluZSBERkxfRk9STUFUICAgICAgICAgICAgICBGT1JNQVRfUEVNCisjZGVmaW5lIERGTF9VU0VfREVWX1JBTkRPTSAgICAgIDAKKworI2RlZmluZSBVU0FHRSBcCisgICAgIlxuIHVzYWdlOiBnZW5fa2V5IHBhcmFtPTw+Li4uXG4iICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4gYWNjZXB0YWJsZSBwYXJhbWV0ZXJzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgdHlwZT1yc2F8ZWMgICAgICAgICAgIGRlZmF1bHQ6IHJzYVxuIiAgICAgICAgICBcCisgICAgIiAgICByc2Ffa2V5c2l6ZT0lJWQgICAgICAgIGRlZmF1bHQ6IDQwOTZcbiIgICAgICAgIFwKKyAgICAiICAgIGVjX2N1cnZlPSUlcyAgICAgICAgICAgc2VlIGJlbG93XG4iICAgICAgICAgICAgXAorICAgICIgICAgZmlsZW5hbWU9JSVzICAgICAgICAgICBkZWZhdWx0OiBrZXlmaWxlLmtleVxuIiBcCisgICAgIiAgICBmb3JtYXQ9cGVtfGRlciAgICAgICAgZGVmYXVsdDogcGVtXG4iICAgICAgICAgIFwKKyAgICBVU0FHRV9ERVZfUkFORE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICJcbiIKKworI2lmICFkZWZpbmVkKE1CRURUTFNfUEtfV1JJVEVfQykgfHwgIWRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCAiTUJFRFRMU19QS19XUklURV9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19FTlRST1BZX0MgYW5kL29yIE1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfUEVNX1dSSVRFX0MiCisgICAgICAgICAgICAibm90IGRlZmluZWQuXG4iICk7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorLyoKKyAqIGdsb2JhbCBvcHRpb25zCisgKi8KK3N0cnVjdCBvcHRpb25zCit7CisgICAgaW50IHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIHRoZSB0eXBlIG9mIGtleSB0byBnZW5lcmF0ZSAgICAgICAgICAqLworICAgIGludCByc2Ffa2V5c2l6ZTsgICAgICAgICAgICAvKiBsZW5ndGggb2Yga2V5IGluIGJpdHMgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgZWNfY3VydmU7ICAgICAgICAgICAgICAgLyogY3VydmUgaWRlbnRpZmllciBmb3IgRUMga2V5cyAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7ICAgICAgIC8qIGZpbGVuYW1lIG9mIHRoZSBrZXkgZmlsZSAgICAgICAgICAgICAqLworICAgIGludCBmb3JtYXQ7ICAgICAgICAgICAgICAgICAvKiB0aGUgb3V0cHV0IGZvcm1hdCB0byB1c2UgICAgICAgICAgICAgKi8KKyAgICBpbnQgdXNlX2Rldl9yYW5kb207ICAgICAgICAgLyogdXNlIC9kZXYvcmFuZG9tIGFzIGVudHJvcHkgc291cmNlICAgICovCit9IG9wdDsKKworc3RhdGljIGludCB3cml0ZV9wcml2YXRlX2tleSggbWJlZHRsc19wa19jb250ZXh0ICprZXksIGNvbnN0IGNoYXIgKm91dHB1dF9maWxlICkKK3sKKyAgICBpbnQgcmV0OworICAgIEZJTEUgKmY7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfYnVmWzE2MDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyICpjID0gb3V0cHV0X2J1ZjsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIG1lbXNldChvdXRwdXRfYnVmLCAwLCAxNjAwMCk7CisgICAgaWYoIG9wdC5mb3JtYXQgPT0gRk9STUFUX1BFTSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3dyaXRlX2tleV9wZW0oIGtleSwgb3V0cHV0X2J1ZiwgMTYwMDAgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBsZW4gPSBzdHJsZW4oIChjaGFyICopIG91dHB1dF9idWYgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa193cml0ZV9rZXlfZGVyKCBrZXksIG91dHB1dF9idWYsIDE2MDAwICkgKSA8IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBsZW4gPSByZXQ7CisgICAgICAgIGMgPSBvdXRwdXRfYnVmICsgc2l6ZW9mKG91dHB1dF9idWYpIC0gbGVuOworICAgIH0KKworICAgIGlmKCAoIGYgPSBmb3Blbiggb3V0cHV0X2ZpbGUsICJ3YiIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggZndyaXRlKCBjLCAxLCBsZW4sIGYgKSAhPSBsZW4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgbWJlZHRsc19wa19jb250ZXh0IGtleTsKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBpbnQgaTsKKyAgICBjaGFyICpwLCAqcTsKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gImdlbl9rZXkiOworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9pbmZvOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFNldCB0byBzYW5lIHZhbHVlcworICAgICAqLworICAgIG1iZWR0bHNfcGtfaW5pdCggJmtleSApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKworICAgIGlmKCBhcmdjID09IDAgKQorICAgIHsKKyAgICB1c2FnZToKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBhdmFpbGFibGUgZWNfY3VydmUgdmFsdWVzOlxuIiApOworICAgICAgICBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICAlcyAoZGVmYXVsdClcbiIsIGN1cnZlX2luZm8tPm5hbWUgKTsKKyAgICAgICAgd2hpbGUoICggKytjdXJ2ZV9pbmZvICktPm5hbWUgIT0gTlVMTCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICAlc1xuIiwgY3VydmVfaW5mby0+bmFtZSApOworI2VuZGlmCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBvcHQudHlwZSAgICAgICAgICAgICAgICA9IERGTF9UWVBFOworICAgIG9wdC5yc2Ffa2V5c2l6ZSAgICAgICAgID0gREZMX1JTQV9LRVlTSVpFOworICAgIG9wdC5lY19jdXJ2ZSAgICAgICAgICAgID0gREZMX0VDX0NVUlZFOworICAgIG9wdC5maWxlbmFtZSAgICAgICAgICAgID0gREZMX0ZJTEVOQU1FOworICAgIG9wdC5mb3JtYXQgICAgICAgICAgICAgID0gREZMX0ZPUk1BVDsKKyAgICBvcHQudXNlX2Rldl9yYW5kb20gICAgICA9IERGTF9VU0VfREVWX1JBTkRPTTsKKworICAgIGZvciggaSA9IDE7IGkgPCBhcmdjOyBpKysgKQorICAgIHsKKyAgICAgICAgcCA9IGFyZ3ZbaV07CisgICAgICAgIGlmKCAoIHEgPSBzdHJjaHIoIHAsICc9JyApICkgPT0gTlVMTCApCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAqcSsrID0gJ1wwJzsKKworICAgICAgICBpZiggc3RyY21wKCBwLCAidHlwZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgInJzYSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQudHlwZSA9IE1CRURUTFNfUEtfUlNBOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiZWMiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0LnR5cGUgPSBNQkVEVExTX1BLX0VDS0VZOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZm9ybWF0IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAicGVtIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5mb3JtYXQgPSBGT1JNQVRfUEVNOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiZGVyIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5mb3JtYXQgPSBGT1JNQVRfREVSOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicnNhX2tleXNpemUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5yc2Ffa2V5c2l6ZSA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQucnNhX2tleXNpemUgPCAxMDI0IHx8CisgICAgICAgICAgICAgICAgb3B0LnJzYV9rZXlzaXplID4gTUJFRFRMU19NUElfTUFYX0JJVFMgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImVjX2N1cnZlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX25hbWUoIHEgKSApID09IE5VTEwgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICAgICBvcHQuZWNfY3VydmUgPSBjdXJ2ZV9pbmZvLT5ncnBfaWQ7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJmaWxlbmFtZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5maWxlbmFtZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInVzZV9kZXZfcmFuZG9tIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQudXNlX2Rldl9yYW5kb20gPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnVzZV9kZXZfcmFuZG9tIDwgMCB8fCBvcHQudXNlX2Rldl9yYW5kb20gPiAxICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgaWYoIG9wdC51c2VfZGV2X3JhbmRvbSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VudHJvcHlfYWRkX3NvdXJjZSggJmVudHJvcHksIGRldl9yYW5kb21fZW50cm9weV9wb2xsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIERFVl9SQU5ET01fVEhSRVNIT0xELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfU1RST05HICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoIlxuICAgIFVzaW5nIC9kZXYvcmFuZG9tLCBzbyBjYW4gdGFrZSBhIGxvbmcgdGltZSEgIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworICAgIH0KKyNlbmRpZiAvKiAhX1dJTjMyICYmIE1CRURUTFNfRlNfSU8gKi8KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAxLjEuIEdlbmVyYXRlIHRoZSBrZXkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIEdlbmVyYXRpbmcgdGhlIHByaXZhdGUga2V5IC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19zZXR1cCggJmtleSwgbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggb3B0LnR5cGUgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19zZXR1cCByZXR1cm5lZCAtMHglMDR4IiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfR0VOUFJJTUUpCisgICAgaWYoIG9wdC50eXBlID09IE1CRURUTFNfUEtfUlNBICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfcnNhX2dlbl9rZXkoIG1iZWR0bHNfcGtfcnNhKCBrZXkgKSwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5yc2Ffa2V5c2l6ZSwgNjU1MzcgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcnNhX2dlbl9rZXkgcmV0dXJuZWQgLTB4JTA0eCIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICBpZiggb3B0LnR5cGUgPT0gTUJFRFRMU19QS19FQ0tFWSApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX2VjcF9nZW5fa2V5KCBvcHQuZWNfY3VydmUsIG1iZWR0bHNfcGtfZWMoIGtleSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3JzYV9nZW5fa2V5IHJldHVybmVkIC0weCUwNHgiLCAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBrZXkgdHlwZSBub3Qgc3VwcG9ydGVkXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDEuMiBQcmludCB0aGUga2V5CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiAgLiBLZXkgaW5mb3JtYXRpb246XG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoICZrZXkgKSA9PSBNQkVEVExTX1BLX1JTQSApCisgICAgeworICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2EgPSBtYmVkdGxzX3BrX3JzYSgga2V5ICk7CisgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJOOiAgIiwgICZyc2EtPk4sICAxNiwgTlVMTCApOworICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRTogICIsICAmcnNhLT5FLCAgMTYsIE5VTEwgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkQ6ICAiLCAgJnJzYS0+RCwgIDE2LCBOVUxMICk7CisgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJQOiAgIiwgICZyc2EtPlAsICAxNiwgTlVMTCApOworICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUTogICIsICAmcnNhLT5RLCAgMTYsIE5VTEwgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkRQOiAiLCAgJnJzYS0+RFAsIDE2LCBOVUxMICk7CisgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJEUTogICIsICZyc2EtPkRRLCAxNiwgTlVMTCApOworICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUVA6ICAiLCAmcnNhLT5RUCwgMTYsIE5VTEwgKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCAma2V5ICkgPT0gTUJFRFRMU19QS19FQ0tFWSApCisgICAgeworICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyICplY3AgPSBtYmVkdGxzX3BrX2VjKCBrZXkgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJjdXJ2ZTogJXNcbiIsCisgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX2dycF9pZCggZWNwLT5ncnAuaWQgKS0+bmFtZSApOworICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiWF9ROiAgICIsICZlY3AtPlEuWCwgMTYsIE5VTEwgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIllfUTogICAiLCAmZWNwLT5RLlksIDE2LCBOVUxMICk7CisgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJEOiAgICAgIiwgJmVjcC0+ZCAgLCAxNiwgTlVMTCApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgbWJlZHRsc19wcmludGYoIiAgISBrZXkgdHlwZSBub3Qgc3VwcG9ydGVkXG4iKTsKKworICAgIC8qCisgICAgICogMS4zIEV4cG9ydCBrZXkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBXcml0aW5nIGtleSB0byBmaWxlLi4uIiApOworCisgICAgaWYoICggcmV0ID0gd3JpdGVfcHJpdmF0ZV9rZXkoICZrZXksIG9wdC5maWxlbmFtZSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKK2V4aXQ6CisKKyAgICBpZiggcmV0ICE9IDAgJiYgcmV0ICE9IDEpCisgICAgeworI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1Ziwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAtICVzXG4iLCBidWYgKTsKKyNlbHNlCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgfQorCisgICAgbWJlZHRsc19wa19mcmVlKCAma2V5ICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BLX1dSSVRFX0MgJiYgTUJFRFRMU19QRU1fV1JJVEVfQyAmJiBNQkVEVExTX0ZTX0lPICYmCisgICAgICAgICogTUJFRFRMU19FTlRST1BZX0MgJiYgTUJFRFRMU19DVFJfRFJCR19DICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2tleV9hcHAuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2tleV9hcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmI4NDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkva2V5X2FwcC5jCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogIEtleSByZWFkaW5nIGFwcGxpY2F0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0MpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNkZWZpbmUgTU9ERV9OT05FICAgICAgICAgICAgICAgMAorI2RlZmluZSBNT0RFX1BSSVZBVEUgICAgICAgICAgICAxCisjZGVmaW5lIE1PREVfUFVCTElDICAgICAgICAgICAgIDIKKworI2RlZmluZSBERkxfTU9ERSAgICAgICAgICAgICAgICBNT0RFX05PTkUKKyNkZWZpbmUgREZMX0ZJTEVOQU1FICAgICAgICAgICAgImtleWZpbGUua2V5IgorI2RlZmluZSBERkxfUEFTU1dPUkQgICAgICAgICAgICAiIgorI2RlZmluZSBERkxfUEFTU1dPUkRfRklMRSAgICAgICAiIgorI2RlZmluZSBERkxfREVCVUdfTEVWRUwgICAgICAgICAwCisKKyNkZWZpbmUgVVNBR0UgXAorICAgICJcbiB1c2FnZToga2V5X2FwcCBwYXJhbT08Pi4uLlxuIiAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIGFjY2VwdGFibGUgcGFyYW1ldGVyczpcbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIG1vZGU9cHJpdmF0ZXxwdWJsaWMgZGVmYXVsdDogbm9uZVxuIiAgICAgICAgICAgXAorICAgICIgICAgZmlsZW5hbWU9JSVzICAgICAgICAgZGVmYXVsdDoga2V5ZmlsZS5rZXlcbiIgICBcCisgICAgIiAgICBwYXNzd29yZD0lJXMgICAgICAgICBkZWZhdWx0OiBcIlwiXG4iICAgICAgICAgIFwKKyAgICAiICAgIHBhc3N3b3JkX2ZpbGU9JSVzICAgIGRlZmF1bHQ6IFwiXCJcbiIgICAgICAgICAgXAorICAgICJcbiIKKworCisjaWYgIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19QS19QQVJTRV9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorLyoKKyAqIGdsb2JhbCBvcHRpb25zCisgKi8KK3N0cnVjdCBvcHRpb25zCit7CisgICAgaW50IG1vZGU7ICAgICAgICAgICAgICAgICAgIC8qIHRoZSBtb2RlIHRvIHJ1biB0aGUgYXBwbGljYXRpb24gaW4gICAqLworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOyAgICAgICAvKiBmaWxlbmFtZSBvZiB0aGUga2V5IGZpbGUgICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpwYXNzd29yZDsgICAgICAgLyogcGFzc3dvcmQgZm9yIHRoZSBwcml2YXRlIGtleSAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqcGFzc3dvcmRfZmlsZTsgIC8qIHBhc3N3b3JkX2ZpbGUgZm9yIHRoZSBwcml2YXRlIGtleSAgICAqLworfSBvcHQ7CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisgICAgY2hhciBidWZbMTAyNF07CisgICAgaW50IGk7CisgICAgY2hhciAqcCwgKnE7CisKKyAgICAvKgorICAgICAqIFNldCB0byBzYW5lIHZhbHVlcworICAgICAqLworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrICk7CisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZihidWYpICk7CisKKyAgICBpZiggYXJnYyA9PSAwICkKKyAgICB7CisgICAgdXNhZ2U6CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCBVU0FHRSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgb3B0Lm1vZGUgICAgICAgICAgICAgICAgPSBERkxfTU9ERTsKKyAgICBvcHQuZmlsZW5hbWUgICAgICAgICAgICA9IERGTF9GSUxFTkFNRTsKKyAgICBvcHQucGFzc3dvcmQgICAgICAgICAgICA9IERGTF9QQVNTV09SRDsKKyAgICBvcHQucGFzc3dvcmRfZmlsZSAgICAgICA9IERGTF9QQVNTV09SRF9GSUxFOworCisgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgeworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGlmKCBzdHJjbXAoIHAsICJtb2RlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAicHJpdmF0ZSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubW9kZSA9IE1PREVfUFJJVkFURTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInB1YmxpYyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubW9kZSA9IE1PREVfUFVCTElDOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZmlsZW5hbWUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuZmlsZW5hbWUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJwYXNzd29yZCIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5wYXNzd29yZCA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInBhc3N3b3JkX2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQucGFzc3dvcmRfZmlsZSA9IHE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgfQorCisgICAgaWYoIG9wdC5tb2RlID09IE1PREVfUFJJVkFURSApCisgICAgeworICAgICAgICBpZiggc3RybGVuKCBvcHQucGFzc3dvcmQgKSAmJiBzdHJsZW4oIG9wdC5wYXNzd29yZF9maWxlICkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkVycm9yOiBjYW5ub3QgaGF2ZSBib3RoIHBhc3N3b3JkIGFuZCBwYXNzd29yZF9maWxlXG4iICk7CisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHN0cmxlbiggb3B0LnBhc3N3b3JkX2ZpbGUgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIEZJTEUgKmY7CisKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gTG9hZGluZyB0aGUgcGFzc3dvcmQgZmlsZSAuLi4iICk7CisgICAgICAgICAgICBpZiggKCBmID0gZm9wZW4oIG9wdC5wYXNzd29yZF9maWxlLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgZm9wZW4gcmV0dXJuZWQgTlVMTFxuIiApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCBmZ2V0cyggYnVmLCBzaXplb2YoYnVmKSwgZiApID09IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiRXJyb3I6IGZnZXRzKCkgZmFpbGVkIHRvIHJldHJpZXZlIHBhc3N3b3JkXG4iICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmNsb3NlKCBmICk7CisKKyAgICAgICAgICAgIGkgPSAoaW50KSBzdHJsZW4oIGJ1ZiApOworICAgICAgICAgICAgaWYoIGJ1ZltpIC0gMV0gPT0gJ1xuJyApIGJ1ZltpIC0gMV0gPSAnXDAnOworICAgICAgICAgICAgaWYoIGJ1ZltpIC0gMl0gPT0gJ1xyJyApIGJ1ZltpIC0gMl0gPSAnXDAnOworICAgICAgICAgICAgb3B0LnBhc3N3b3JkID0gYnVmOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogMS4xLiBMb2FkIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gTG9hZGluZyB0aGUgcHJpdmF0ZSBrZXkgLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJnBrLCBvcHQuZmlsZW5hbWUsIG9wdC5wYXNzd29yZCApOworCisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiAxLjIgUHJpbnQgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gS2V5IGluZm9ybWF0aW9uICAgIC4uLlxuIiApOworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoICZwayApID09IE1CRURUTFNfUEtfUlNBICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhID0gbWJlZHRsc19wa19yc2EoIHBrICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiTjogICIsICZyc2EtPk4sIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRTogICIsICZyc2EtPkUsIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRDogICIsICZyc2EtPkQsIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUDogICIsICZyc2EtPlAsIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUTogICIsICZyc2EtPlEsIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRFA6ICIsICZyc2EtPkRQLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkRROiAgIiwgJnJzYS0+RFEsIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUVA6ICAiLCAmcnNhLT5RUCwgMTYsIE5VTEwgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCAmcGsgKSA9PSBNQkVEVExTX1BLX0VDS0VZICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpciAqZWNwID0gbWJlZHRsc19wa19lYyggcGsgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJRKFgpOiAiLCAmZWNwLT5RLlgsIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUShZKTogIiwgJmVjcC0+US5ZLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlEoWik6ICIsICZlY3AtPlEuWiwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJEICAgOiAiLCAmZWNwLT5kICAsIDE2LCBOVUxMICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJEbyBub3Qga25vdyBob3cgdG8gcHJpbnQga2V5IGluZm9ybWF0aW9uIGZvciB0aGlzIHR5cGVcbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKCBvcHQubW9kZSA9PSBNT0RFX1BVQkxJQyApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiAxLjEuIExvYWQgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBMb2FkaW5nIHRoZSBwdWJsaWMga2V5IC4uLiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlKCAmcGssIG9wdC5maWxlbmFtZSApOworCisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlIHJldHVybmVkIC0weCUwNHhcbiIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gS2V5IGluZm9ybWF0aW9uICAgIC4uLlxuIiApOworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoICZwayApID09IE1CRURUTFNfUEtfUlNBICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhID0gbWJlZHRsc19wa19yc2EoIHBrICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiTjogICIsICZyc2EtPk4sIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRTogICIsICZyc2EtPkUsIDE2LCBOVUxMICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgICAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSggJnBrICkgPT0gTUJFRFRMU19QS19FQ0tFWSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgKmVjcCA9IG1iZWR0bHNfcGtfZWMoIHBrICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUShYKTogIiwgJmVjcC0+US5YLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlEoWSk6ICIsICZlY3AtPlEuWSwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJRKFopOiAiLCAmZWNwLT5RLlosIDE2LCBOVUxMICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJEbyBub3Qga25vdyBob3cgdG8gcHJpbnQga2V5IGluZm9ybWF0aW9uIGZvciB0aGlzIHR5cGVcbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgICAgIGdvdG8gdXNhZ2U7CisKK2V4aXQ6CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykKKyAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgKTsKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgISAgTGFzdCBlcnJvciB3YXM6ICVzXG4iLCBidWYgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19wa19mcmVlKCAmcGsgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfUEtfUEFSU0VfQyAmJiBNQkVEVExTX0ZTX0lPICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9rZXlfYXBwX3dyaXRlci5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkva2V5X2FwcF93cml0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDEyMDc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkva2V5X2FwcF93cml0ZXIuYwpAQCAtMCwwICsxLDQwNiBAQAorLyoKKyAqICBLZXkgd3JpdGluZyBhcHBsaWNhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19XUklURV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGsuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisjZGVmaW5lIFVTQUdFX09VVCBcCisgICAgIiAgICBvdXRwdXRfZmlsZT0lJXMgICAgICBkZWZhdWx0OiBrZXlmaWxlLnBlbVxuIiAgIFwKKyAgICAiICAgIG91dHB1dF9mb3JtYXQ9cGVtfGRlciBkZWZhdWx0OiBwZW1cbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX09VVCBcCisgICAgIiAgICBvdXRwdXRfZmlsZT0lJXMgICAgICBkZWZhdWx0OiBrZXlmaWxlLmRlclxuIiAgIFwKKyAgICAiICAgIG91dHB1dF9mb3JtYXQ9ZGVyICAgICBkZWZhdWx0OiBkZXJcbiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQorI2RlZmluZSBERkxfT1VUUFVUX0ZJTEVOQU1FICAgICAia2V5ZmlsZS5wZW0iCisjZGVmaW5lIERGTF9PVVRQVVRfRk9STUFUICAgICAgIE9VVFBVVF9GT1JNQVRfUEVNCisjZWxzZQorI2RlZmluZSBERkxfT1VUUFVUX0ZJTEVOQU1FICAgICAia2V5ZmlsZS5kZXIiCisjZGVmaW5lIERGTF9PVVRQVVRfRk9STUFUICAgICAgIE9VVFBVVF9GT1JNQVRfREVSCisjZW5kaWYKKworI2RlZmluZSBERkxfTU9ERSAgICAgICAgICAgICAgICBNT0RFX05PTkUKKyNkZWZpbmUgREZMX0ZJTEVOQU1FICAgICAgICAgICAgImtleWZpbGUua2V5IgorI2RlZmluZSBERkxfREVCVUdfTEVWRUwgICAgICAgICAwCisjZGVmaW5lIERGTF9PVVRQVVRfTU9ERSAgICAgICAgIE9VVFBVVF9NT0RFX05PTkUKKworI2RlZmluZSBNT0RFX05PTkUgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1PREVfUFJJVkFURSAgICAgICAgICAgIDEKKyNkZWZpbmUgTU9ERV9QVUJMSUMgICAgICAgICAgICAgMgorCisjZGVmaW5lIE9VVFBVVF9NT0RFX05PTkUgICAgICAgICAgICAgICAwCisjZGVmaW5lIE9VVFBVVF9NT0RFX1BSSVZBVEUgICAgICAgICAgICAxCisjZGVmaW5lIE9VVFBVVF9NT0RFX1BVQkxJQyAgICAgICAgICAgICAyCisKKyNkZWZpbmUgT1VUUFVUX0ZPUk1BVF9QRU0gICAgICAgICAgICAgIDAKKyNkZWZpbmUgT1VUUFVUX0ZPUk1BVF9ERVIgICAgICAgICAgICAgIDEKKworI2RlZmluZSBVU0FHRSBcCisgICAgIlxuIHVzYWdlOiBrZXlfYXBwIHBhcmFtPTw+Li4uXG4iICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4gYWNjZXB0YWJsZSBwYXJhbWV0ZXJzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgbW9kZT1wcml2YXRlfHB1YmxpYyBkZWZhdWx0OiBub25lXG4iICAgICAgICAgICBcCisgICAgIiAgICBmaWxlbmFtZT0lJXMgICAgICAgICBkZWZhdWx0OiBrZXlmaWxlLmtleVxuIiAgIFwKKyAgICAiICAgIG91dHB1dF9tb2RlPXByaXZhdGV8cHVibGljIGRlZmF1bHQ6IG5vbmVcbiIgICAgXAorICAgIFVTQUdFX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19QS19XUklURV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCAiTUJFRFRMU19QS19XUklURV9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIG5vdCBkZWZpbmVkLlxuIiApOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKy8qCisgKiBnbG9iYWwgb3B0aW9ucworICovCitzdHJ1Y3Qgb3B0aW9ucworeworICAgIGludCBtb2RlOyAgICAgICAgICAgICAgICAgICAvKiB0aGUgbW9kZSB0byBydW4gdGhlIGFwcGxpY2F0aW9uIGluICAgKi8KKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsgICAgICAgLyogZmlsZW5hbWUgb2YgdGhlIGtleSBmaWxlICAgICAgICAgICAgICovCisgICAgaW50IG91dHB1dF9tb2RlOyAgICAgICAgICAgIC8qIHRoZSBvdXRwdXQgbW9kZSB0byB1c2UgICAgICAgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKm91dHB1dF9maWxlOyAgICAvKiB3aGVyZSB0byBzdG9yZSB0aGUgY29uc3RydWN0ZWQga2V5IGZpbGUgICovCisgICAgaW50IG91dHB1dF9mb3JtYXQ7ICAgICAgICAgIC8qIHRoZSBvdXRwdXQgZm9ybWF0IHRvIHVzZSAgICAgICAgICAgICAqLworfSBvcHQ7CisKK3N0YXRpYyBpbnQgd3JpdGVfcHVibGljX2tleSggbWJlZHRsc19wa19jb250ZXh0ICprZXksIGNvbnN0IGNoYXIgKm91dHB1dF9maWxlICkKK3sKKyAgICBpbnQgcmV0OworICAgIEZJTEUgKmY7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfYnVmWzE2MDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyICpjID0gb3V0cHV0X2J1ZjsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIG1lbXNldChvdXRwdXRfYnVmLCAwLCAxNjAwMCk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisgICAgaWYoIG9wdC5vdXRwdXRfZm9ybWF0ID09IE9VVFBVVF9GT1JNQVRfUEVNICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfd3JpdGVfcHVia2V5X3BlbSgga2V5LCBvdXRwdXRfYnVmLCAxNjAwMCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGxlbiA9IHN0cmxlbiggKGNoYXIgKikgb3V0cHV0X2J1ZiApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfd3JpdGVfcHVia2V5X2Rlcigga2V5LCBvdXRwdXRfYnVmLCAxNjAwMCApICkgPCAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgbGVuID0gcmV0OworICAgICAgICBjID0gb3V0cHV0X2J1ZiArIHNpemVvZihvdXRwdXRfYnVmKSAtIGxlbiAtIDE7CisgICAgfQorCisgICAgaWYoICggZiA9IGZvcGVuKCBvdXRwdXRfZmlsZSwgInciICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoIGZ3cml0ZSggYywgMSwgbGVuLCBmICkgIT0gbGVuICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorCisgICAgZmNsb3NlKCBmICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCB3cml0ZV9wcml2YXRlX2tleSggbWJlZHRsc19wa19jb250ZXh0ICprZXksIGNvbnN0IGNoYXIgKm91dHB1dF9maWxlICkKK3sKKyAgICBpbnQgcmV0OworICAgIEZJTEUgKmY7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfYnVmWzE2MDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyICpjID0gb3V0cHV0X2J1ZjsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIG1lbXNldChvdXRwdXRfYnVmLCAwLCAxNjAwMCk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisgICAgaWYoIG9wdC5vdXRwdXRfZm9ybWF0ID09IE9VVFBVVF9GT1JNQVRfUEVNICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfd3JpdGVfa2V5X3BlbSgga2V5LCBvdXRwdXRfYnVmLCAxNjAwMCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGxlbiA9IHN0cmxlbiggKGNoYXIgKikgb3V0cHV0X2J1ZiApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfd3JpdGVfa2V5X2Rlcigga2V5LCBvdXRwdXRfYnVmLCAxNjAwMCApICkgPCAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgbGVuID0gcmV0OworICAgICAgICBjID0gb3V0cHV0X2J1ZiArIHNpemVvZihvdXRwdXRfYnVmKSAtIGxlbiAtIDE7CisgICAgfQorCisgICAgaWYoICggZiA9IGZvcGVuKCBvdXRwdXRfZmlsZSwgInciICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoIGZ3cml0ZSggYywgMSwgbGVuLCBmICkgIT0gbGVuICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorCisgICAgZmNsb3NlKCBmICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQgPSAwOworICAgIG1iZWR0bHNfcGtfY29udGV4dCBrZXk7CisgICAgY2hhciBidWZbMTAyNF07CisgICAgaW50IGk7CisgICAgY2hhciAqcCwgKnE7CisKKyAgICAvKgorICAgICAqIFNldCB0byBzYW5lIHZhbHVlcworICAgICAqLworICAgIG1iZWR0bHNfcGtfaW5pdCggJmtleSApOworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBpZiggYXJnYyA9PSAwICkKKyAgICB7CisgICAgdXNhZ2U6CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCBVU0FHRSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgb3B0Lm1vZGUgICAgICAgICAgICAgICAgPSBERkxfTU9ERTsKKyAgICBvcHQuZmlsZW5hbWUgICAgICAgICAgICA9IERGTF9GSUxFTkFNRTsKKyAgICBvcHQub3V0cHV0X21vZGUgICAgICAgICA9IERGTF9PVVRQVVRfTU9ERTsKKyAgICBvcHQub3V0cHV0X2ZpbGUgICAgICAgICA9IERGTF9PVVRQVVRfRklMRU5BTUU7CisgICAgb3B0Lm91dHB1dF9mb3JtYXQgICAgICAgPSBERkxfT1VUUFVUX0ZPUk1BVDsKKworICAgIGZvciggaSA9IDE7IGkgPCBhcmdjOyBpKysgKQorICAgIHsKKyAgICAgICAgcCA9IGFyZ3ZbaV07CisgICAgICAgIGlmKCAoIHEgPSBzdHJjaHIoIHAsICc9JyApICkgPT0gTlVMTCApCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAqcSsrID0gJ1wwJzsKKworICAgICAgICBpZiggc3RyY21wKCBwLCAibW9kZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgInByaXZhdGUiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1vZGUgPSBNT0RFX1BSSVZBVEU7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJwdWJsaWMiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1vZGUgPSBNT0RFX1BVQkxJQzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm91dHB1dF9tb2RlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAicHJpdmF0ZSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQub3V0cHV0X21vZGUgPSBPVVRQVVRfTU9ERV9QUklWQVRFOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAicHVibGljIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5vdXRwdXRfbW9kZSA9IE9VVFBVVF9NT0RFX1BVQkxJQzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm91dHB1dF9mb3JtYXQiICkgPT0gMCApCisgICAgICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAicGVtIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5vdXRwdXRfZm9ybWF0ID0gT1VUUFVUX0ZPUk1BVF9QRU07CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJkZXIiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm91dHB1dF9mb3JtYXQgPSBPVVRQVVRfRk9STUFUX0RFUjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImZpbGVuYW1lIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmZpbGVuYW1lID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAib3V0cHV0X2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQub3V0cHV0X2ZpbGUgPSBxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgIH0KKworICAgIGlmKCBvcHQubW9kZSA9PSBNT0RFX05PTkUgJiYgb3B0Lm91dHB1dF9tb2RlICE9IE9VVFBVVF9NT0RFX05PTkUgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbkNhbm5vdCBvdXRwdXQgYSBrZXkgd2l0aG91dCByZWFkaW5nIG9uZS5cbiIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIG9wdC5tb2RlID09IE1PREVfUFVCTElDICYmIG9wdC5vdXRwdXRfbW9kZSA9PSBPVVRQVVRfTU9ERV9QUklWQVRFICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG5DYW5ub3Qgb3V0cHV0IGEgcHJpdmF0ZSBrZXkgZnJvbSBhIHB1YmxpYyBrZXkuXG4iKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBvcHQubW9kZSA9PSBNT0RFX1BSSVZBVEUgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogMS4xLiBMb2FkIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gTG9hZGluZyB0aGUgcHJpdmF0ZSBrZXkgLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJmtleSwgb3B0LmZpbGVuYW1lLCBOVUxMICk7CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCAoY2hhciAqKSBidWYsIHNpemVvZihidWYpICk7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlIHJldHVybmVkIC0weCUwNHggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogMS4yIFByaW50IHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEtleSBpbmZvcm1hdGlvbiAgICAuLi5cbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoICZrZXkgKSA9PSBNQkVEVExTX1BLX1JTQSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYSA9IG1iZWR0bHNfcGtfcnNhKCBrZXkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJOOiAgIiwgICZyc2EtPk4sICAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkU6ICAiLCAgJnJzYS0+RSwgIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRDogICIsICAmcnNhLT5ELCAgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJQOiAgIiwgICZyc2EtPlAsICAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlE6ICAiLCAgJnJzYS0+USwgIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRFA6ICIsICAmcnNhLT5EUCwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJEUTogICIsICZyc2EtPkRRLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlFQOiAgIiwgJnJzYS0+UVAsIDE2LCBOVUxMICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgICAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSggJmtleSApID09IE1CRURUTFNfUEtfRUNLRVkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyICplY3AgPSBtYmVkdGxzX3BrX2VjKCBrZXkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJRKFgpOiAiLCAmZWNwLT5RLlgsIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUShZKTogIiwgJmVjcC0+US5ZLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlEoWik6ICIsICZlY3AtPlEuWiwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJEICAgOiAiLCAmZWNwLT5kICAsIDE2LCBOVUxMICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50Zigia2V5IHR5cGUgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOworCisgICAgfQorICAgIGVsc2UgaWYoIG9wdC5tb2RlID09IE1PREVfUFVCTElDICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIDEuMS4gTG9hZCB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIExvYWRpbmcgdGhlIHB1YmxpYyBrZXkgLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUoICZrZXksIG9wdC5maWxlbmFtZSApOworCisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgKGNoYXIgKikgYnVmLCBzaXplb2YoYnVmKSApOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleSByZXR1cm5lZCAtMHglMDR4IC0gJXNcblxuIiwgLXJldCwgYnVmICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIDEuMiBQcmludCB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBLZXkgaW5mb3JtYXRpb24gICAgLi4uXG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCAma2V5ICkgPT0gTUJFRFRMU19QS19SU0EgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2EgPSBtYmVkdGxzX3BrX3JzYSgga2V5ICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiTjogIiwgJnJzYS0+TiwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJFOiAiLCAmcnNhLT5FLCAxNiwgTlVMTCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoICZrZXkgKSA9PSBNQkVEVExTX1BLX0VDS0VZICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpciAqZWNwID0gbWJlZHRsc19wa19lYygga2V5ICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUShYKTogIiwgJmVjcC0+US5YLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlEoWSk6ICIsICZlY3AtPlEuWSwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJRKFopOiAiLCAmZWNwLT5RLlosIDE2LCBOVUxMICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50Zigia2V5IHR5cGUgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGdvdG8gdXNhZ2U7CisKKyAgICBpZiggb3B0Lm91dHB1dF9tb2RlID09IE9VVFBVVF9NT0RFX1BVQkxJQyApCisgICAgeworICAgICAgICB3cml0ZV9wdWJsaWNfa2V5KCAma2V5LCBvcHQub3V0cHV0X2ZpbGUgKTsKKyAgICB9CisgICAgaWYoIG9wdC5vdXRwdXRfbW9kZSA9PSBPVVRQVVRfTU9ERV9QUklWQVRFICkKKyAgICB7CisgICAgICAgIHdyaXRlX3ByaXZhdGVfa2V5KCAma2V5LCBvcHQub3V0cHV0X2ZpbGUgKTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiggcmV0ICE9IDAgJiYgcmV0ICE9IDEpCisgICAgeworI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1Ziwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAtICVzXG4iLCBidWYgKTsKKyNlbHNlCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgfQorCisgICAgbWJlZHRsc19wa19mcmVlKCAma2V5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QS19XUklURV9DICYmIE1CRURUTFNfRlNfSU8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L21waV9kZW1vLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9tcGlfZGVtby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZTg5NTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9tcGlfZGVtby5jCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogIFNpbXBsZSBNUEkgZGVtb25zdHJhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSAibWJlZHRscy9iaWdudW0uaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waSBFLCBQLCBRLCBOLCBILCBELCBYLCBZLCBaOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJkUgKTsgbWJlZHRsc19tcGlfaW5pdCggJlAgKTsgbWJlZHRsc19tcGlfaW5pdCggJlEgKTsgbWJlZHRsc19tcGlfaW5pdCggJk4gKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmSCApOyBtYmVkdGxzX21waV9pbml0KCAmRCApOyBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZaICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmUCwgMTAsICIyNzg5IiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlEsIDEwLCAiMzIwMyIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZFLCAxMCwgICIyNTciICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZOLCAmUCwgJlEgKSApOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgUHVibGljIGtleTpcblxuIiApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIiAgTiA9ICIsICZOLCAxMCwgTlVMTCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiICBFID0gIiwgJkUsIDEwLCBOVUxMICkgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIFByaXZhdGUga2V5OlxuXG4iICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiICBQID0gIiwgJlAsIDEwLCBOVUxMICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICIgIFEgPSAiLCAmUSwgMTAsIE5VTEwgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0dFTlBSSU1FKQorICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2ludCggJlAsICZQLCAxICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZRLCAmUSwgMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmSCwgJlAsICZRICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZELCAmRSwgJkggKSApOworCisgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIiAgRCA9IEVeLTEgbW9kIChQLTEpKihRLTEpID0gIiwKKyAgICAgICAgICAgICAgICAgICAgJkQsIDEwLCBOVUxMICk7CisjZWxzZQorICAgIG1iZWR0bHNfcHJpbnRmKCJcblRlc3Qgc2tpcHBlZCAoTUJFRFRMU19HRU5QUklNRSBub3QgZGVmaW5lZCkuXG5cbiIpOworI2VuZGlmCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIDEwLCAiNTU1NTUiICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2V4cF9tb2QoICZZLCAmWCwgJkUsICZOLCBOVUxMICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2V4cF9tb2QoICZaLCAmWSwgJkQsICZOLCBOVUxMICkgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIFJTQSBvcGVyYXRpb246XG5cbiIgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICIgIFggKHBsYWludGV4dCkgID0gIiwgJlgsIDEwLCBOVUxMICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICIgIFkgKGNpcGhlcnRleHQpID0gWF5FIG1vZCBOID0gIiwgJlksIDEwLCBOVUxMICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICIgIFogKGRlY3J5cHRlZCkgID0gWV5EIG1vZCBOID0gIiwgJlosIDEwLCBOVUxMICkgKTsKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZFICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZQICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZRICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZOICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJkggKTsgbWJlZHRsc19tcGlfZnJlZSggJkQgKTsgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWiApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG5BbiBlcnJvciBvY2N1cnJlZC5cbiIgKTsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19GU19JTyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcGtfZGVjcnlwdC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcGtfZGVjcnlwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZmJjNzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9wa19kZWNyeXB0LmMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiAgUHVibGljIGtleS1iYXNlZCBzaW1wbGUgZGVjcnlwdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19GU19JTykgJiYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3BrLmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfUEtfUEFSU0VfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19GU19JTyBhbmQvb3IgTUJFRFRMU19FTlRST1BZX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBGSUxFICpmOworICAgIGludCByZXQsIGM7CisgICAgc2l6ZV90IGksIG9sZW4gPSAwOworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwazsKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdFsxMDI0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls1MTJdOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAibWJlZHRsc19wa19kZWNyeXB0IjsKKyAgICAoKHZvaWQpIGFyZ3YpOworCisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKyAgICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoIHJlc3VsdCApICk7CisgICAgcmV0ID0gMTsKKworICAgIGlmKCBhcmdjICE9IDIgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJ1c2FnZTogbWJlZHRsc19wa19kZWNyeXB0IDxrZXlfZmlsZT5cbiIgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworI2VuZGlmCisKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBSZWFkaW5nIHByaXZhdGUga2V5IGZyb20gJyVzJyIsIGFyZ3ZbMV0gKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJnBrLCBhcmd2WzFdLCAiIiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBFeHRyYWN0IHRoZSBSU0EgZW5jcnlwdGVkIHZhbHVlIGZyb20gdGhlIHRleHQgZmlsZQorICAgICAqLworICAgIHJldCA9IDE7CisKKyAgICBpZiggKCBmID0gZm9wZW4oICJyZXN1bHQtZW5jLnR4dCIsICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgISBDb3VsZCBub3Qgb3BlbiAlc1xuXG4iLCAicmVzdWx0LWVuYy50eHQiICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpID0gMDsKKworICAgIHdoaWxlKCBmc2NhbmYoIGYsICIlMDJYIiwgJmMgKSA+IDAgJiYKKyAgICAgICAgICAgaSA8IChpbnQpIHNpemVvZiggYnVmICkgKQorICAgICAgICBidWZbaSsrXSA9ICh1bnNpZ25lZCBjaGFyKSBjOworCisgICAgZmNsb3NlKCBmICk7CisKKyAgICAvKgorICAgICAqIERlY3J5cHQgdGhlIGVuY3J5cHRlZCBSU0EgZGF0YSBhbmQgcHJpbnQgdGhlIHJlc3VsdC4KKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIERlY3J5cHRpbmcgdGhlIGVuY3J5cHRlZCBkYXRhIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX2RlY3J5cHQoICZwaywgYnVmLCBpLCByZXN1bHQsICZvbGVuLCBzaXplb2YocmVzdWx0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcGtfZGVjcnlwdCByZXR1cm5lZCAtMHglMDR4XG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIE9LXG5cbiIgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiVGhlIGRlY3J5cHRlZCByZXN1bHQgaXM6ICclcydcblxuIiwgcmVzdWx0ICk7CisKKyAgICByZXQgPSAwOworCitleGl0OgorICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCAoY2hhciAqKSBidWYsIHNpemVvZihidWYpICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhICBMYXN0IGVycm9yIHdhczogJXNcbiIsIGJ1ZiApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19QS19QQVJTRV9DICYmIE1CRURUTFNfRlNfSU8gJiYKKyAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX0NUUl9EUkJHX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3BrX2VuY3J5cHQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3BrX2VuY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2E5ZDVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcGtfZW5jcnlwdC5jCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogIFJTQSBzaW1wbGUgZGF0YSBlbmNyeXB0aW9uIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpICYmIGRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGsuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfUEtfUEFSU0VfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19FTlRST1BZX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBGSUxFICpmOworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGksIG9sZW4gPSAwOworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwazsKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0WzEwMjRdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzUxMl07CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJtYmVkdGxzX3BrX2VuY3J5cHQiOworCisgICAgcmV0ID0gMTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgaWYoIGFyZ2MgIT0gMyApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInVzYWdlOiBtYmVkdGxzX3BrX2VuY3J5cHQgPGtleV9maWxlPiA8c3RyaW5nIG9mIG1heCAxMDAgY2hhcmFjdGVycz5cbiIgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworI2VuZGlmCisKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBSZWFkaW5nIHB1YmxpYyBrZXkgZnJvbSAnJXMnIiwgYXJndlsxXSApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSggJnBrLCBhcmd2WzFdICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIHN0cmxlbiggYXJndlsyXSApID4gMTAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIElucHV0IGRhdGEgbGFyZ2VyIHRoYW4gMTAwIGNoYXJhY3RlcnMuXG5cbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1lbWNweSggaW5wdXQsIGFyZ3ZbMl0sIHN0cmxlbiggYXJndlsyXSApICk7CisKKyAgICAvKgorICAgICAqIENhbGN1bGF0ZSB0aGUgUlNBIGVuY3J5cHRpb24gb2YgdGhlIGhhc2guCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBHZW5lcmF0aW5nIHRoZSBlbmNyeXB0ZWQgdmFsdWUiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfZW5jcnlwdCggJnBrLCBpbnB1dCwgc3RybGVuKCBhcmd2WzJdICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCAmb2xlbiwgc2l6ZW9mKGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3BrX2VuY3J5cHQgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXcml0ZSB0aGUgc2lnbmF0dXJlIGludG8gcmVzdWx0LWVuYy50eHQKKyAgICAgKi8KKyAgICBpZiggKCBmID0gZm9wZW4oICJyZXN1bHQtZW5jLnR4dCIsICJ3YisiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBjcmVhdGUgJXNcblxuIiwgInJlc3VsdC1lbmMudHh0IiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZm9yKCBpID0gMDsgaSA8IG9sZW47IGkrKyApCisgICAgICAgIG1iZWR0bHNfZnByaW50ZiggZiwgIiUwMlglcyIsIGJ1ZltpXSwKKyAgICAgICAgICAgICAgICAgKCBpICsgMSApICUgMTYgPT0gMCA/ICJcclxuIiA6ICIgIiApOworCisgICAgZmNsb3NlKCBmICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIERvbmUgKGNyZWF0ZWQgXCIlc1wiKVxuXG4iLCAicmVzdWx0LWVuYy50eHQiICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKQorICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIChjaGFyICopIGJ1Ziwgc2l6ZW9mKGJ1ZikgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICEgIExhc3QgZXJyb3Igd2FzOiAlc1xuIiwgYnVmICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX1BLX1BBUlNFX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYKKyAgICAgICAgICBNQkVEVExTX0ZTX0lPICYmIE1CRURUTFNfQ1RSX0RSQkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcGtfc2lnbi5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcGtfc2lnbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjA4YTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9wa19zaWduLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiAgUHVibGljIGtleS1iYXNlZCBzaWduYXR1cmUgY3JlYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgc25wcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSB8fCAhZGVmaW5lZChNQkVEVExTX01EX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1NIQTI1Nl9DIGFuZC9vciBNQkVEVExTX01EX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfUEtfUEFSU0VfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisjaW5jbHVkZSAibWJlZHRscy9way5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIEZJTEUgKmY7CisgICAgaW50IHJldCA9IDE7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFszMl07CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19NUElfTUFYX1NJWkVdOworICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gIm1iZWR0bHNfcGtfc2lnbiI7CisgICAgc2l6ZV90IG9sZW4gPSAwOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgaWYoIGFyZ2MgIT0gMyApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInVzYWdlOiBtYmVkdGxzX3BrX3NpZ24gPGtleV9maWxlPiA8ZmlsZW5hbWU+XG4iICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZgorCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHJfZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBwZXJzICkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkIC0weCUwNHhcbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gUmVhZGluZyBwcml2YXRlIGtleSBmcm9tICclcyciLCBhcmd2WzFdICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJnBrLCBhcmd2WzFdLCAiIiApICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3Qgb3BlbiAnJXMnXG4iLCBhcmd2WzFdICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENvbXB1dGUgdGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgaW5wdXQgZmlsZSwKKyAgICAgKiB0aGVuIGNhbGN1bGF0ZSB0aGUgc2lnbmF0dXJlIG9mIHRoZSBoYXNoLgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gR2VuZXJhdGluZyB0aGUgU0hBLTI1NiBzaWduYXR1cmUiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEEyNTYgKSwKKyAgICAgICAgICAgICAgICAgICAgYXJndlsyXSwgaGFzaCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3Qgb3BlbiBvciByZWFkICVzXG5cbiIsIGFyZ3ZbMl0gKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfc2lnbiggJnBrLCBNQkVEVExTX01EX1NIQTI1NiwgaGFzaCwgMCwgYnVmLCAmb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcGtfc2lnbiByZXR1cm5lZCAtMHglMDR4XG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdyaXRlIHRoZSBzaWduYXR1cmUgaW50byA8ZmlsZW5hbWU+LnNpZworICAgICAqLworICAgIG1iZWR0bHNfc25wcmludGYoIGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMuc2lnIiwgYXJndlsyXSApOworCisgICAgaWYoICggZiA9IGZvcGVuKCBmaWxlbmFtZSwgIndiKyIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IGNyZWF0ZSAlc1xuXG4iLCBmaWxlbmFtZSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIGZ3cml0ZSggYnVmLCAxLCBvbGVuLCBmICkgIT0gb2xlbiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuICAhIGZ3cml0ZSBmYWlsZWRcblxuIiApOworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGZjbG9zZSggZiApOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBEb25lIChjcmVhdGVkIFwiJXNcIilcblxuIiwgZmlsZW5hbWUgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCAoY2hhciAqKSBidWYsIHNpemVvZihidWYpICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhICBMYXN0IGVycm9yIHdhczogJXNcbiIsIGJ1ZiApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYKKyAgICAgICAgICBNQkVEVExTX1NIQTI1Nl9DICYmIE1CRURUTFNfUEtfUEFSU0VfQyAmJiBNQkVEVExTX0ZTX0lPICYmCisgICAgICAgICAgTUJFRFRMU19DVFJfRFJCR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9wa192ZXJpZnkuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3BrX3ZlcmlmeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNWQxN2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9wa192ZXJpZnkuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqICBQdWJsaWMga2V5LWJhc2VkIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgc25wcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX01EX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0MpIHx8ICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfTURfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19TSEEyNTZfQyBhbmQvb3IgTUJFRFRMU19QS19QQVJTRV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0ZTX0lPIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3BrLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgRklMRSAqZjsKKyAgICBpbnQgcmV0ID0gMTsKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRV07CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworCisgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKKworICAgIGlmKCBhcmdjICE9IDMgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJ1c2FnZTogbWJlZHRsc19wa192ZXJpZnkgPGtleV9maWxlPiA8ZmlsZW5hbWU+XG4iICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZgorCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFJlYWRpbmcgcHVibGljIGtleSBmcm9tICclcyciLCBhcmd2WzFdICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUoICZwaywgYXJndlsxXSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlIHJldHVybmVkIC0weCUwNHhcbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogRXh0cmFjdCB0aGUgc2lnbmF0dXJlIGZyb20gdGhlIGZpbGUKKyAgICAgKi8KKyAgICByZXQgPSAxOworICAgIG1iZWR0bHNfc25wcmludGYoIGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMuc2lnIiwgYXJndlsyXSApOworCisgICAgaWYoICggZiA9IGZvcGVuKCBmaWxlbmFtZSwgInJiIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAhIENvdWxkIG5vdCBvcGVuICVzXG5cbiIsIGZpbGVuYW1lICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKworICAgIGkgPSBmcmVhZCggYnVmLCAxLCBzaXplb2YoYnVmKSwgZiApOworCisgICAgZmNsb3NlKCBmICk7CisKKyAgICAvKgorICAgICAqIENvbXB1dGUgdGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgaW5wdXQgZmlsZSBhbmQKKyAgICAgKiB2ZXJpZnkgdGhlIHNpZ25hdHVyZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gVmVyaWZ5aW5nIHRoZSBTSEEtMjU2IHNpZ25hdHVyZSIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9maWxlKAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTI1NiApLAorICAgICAgICAgICAgICAgICAgICBhcmd2WzJdLCBoYXNoICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJXNcblxuIiwgYXJndlsyXSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa192ZXJpZnkoICZwaywgTUJFRFRMU19NRF9TSEEyNTYsIGhhc2gsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19wa192ZXJpZnkgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBPSyAodGhlIHNpZ25hdHVyZSBpcyB2YWxpZClcblxuIiApOworCisgICAgcmV0ID0gMDsKKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgKGNoYXIgKikgYnVmLCBzaXplb2YoYnVmKSApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgISAgTGFzdCBlcnJvciB3YXM6ICVzXG4iLCBidWYgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfU0hBMjU2X0MgJiYKKyAgICAgICAgICBNQkVEVExTX1BLX1BBUlNFX0MgJiYgTUJFRFRMU19GU19JTyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX2RlY3J5cHQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9kZWNyeXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjMDEzZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9kZWNyeXB0LmMKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiAgUlNBIHNpbXBsZSBkZWNyeXB0aW9uIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX2V4aXQgICAgICAgZXhpdAorI2RlZmluZSBNQkVEVExTX0VYSVRfU1VDQ0VTUyBFWElUX1NVQ0NFU1MKKyNkZWZpbmUgTUJFRFRMU19FWElUX0ZBSUxVUkUgRVhJVF9GQUlMVVJFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgJiYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0ZTX0lPKSAmJiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX1JTQV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0ZTX0lPIGFuZC9vciBNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIEZJTEUgKmY7CisgICAgaW50IHJldHVybl92YWwsIGV4aXRfdmFsLCBjOworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgcnNhOworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzEwMjRdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzUxMl07CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJyc2FfZGVjcnlwdCI7CisgICAgKCh2b2lkKSBhcmd2KTsKKworICAgIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZiggcmVzdWx0ICkgKTsKKyAgICBleGl0X3ZhbCA9IE1CRURUTFNfRVhJVF9TVUNDRVNTOworCisgICAgaWYoIGFyZ2MgIT0gMSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInVzYWdlOiByc2FfZGVjcnlwdFxuIiApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisjZW5kaWYKKworICAgICAgICBtYmVkdGxzX2V4aXQoIE1CRURUTFNfRVhJVF9GQUlMVVJFICk7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKworICAgIHJldHVybl92YWwgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHJfZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJvcHksIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBwZXJzICkgKTsKKyAgICBpZiggcmV0dXJuX3ZhbCAhPSAwICkKKyAgICB7CisgICAgICAgIGV4aXRfdmFsID0gTUJFRFRMU19FWElUX0ZBSUxVUkU7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gUmVhZGluZyBwcml2YXRlIGtleSBmcm9tIHJzYV9wcml2LnR4dCIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggZiA9IGZvcGVuKCAicnNhX3ByaXYudHh0IiwgInJiIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBleGl0X3ZhbCA9IE1CRURUTFNfRVhJVF9GQUlMVVJFOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3Qgb3BlbiByc2FfcHJpdi50eHRcbiIgXAorICAgICAgICAgICAgICAgICIgICEgUGxlYXNlIHJ1biByc2FfZ2Vua2V5IGZpcnN0XG5cbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldHVybl92YWwgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuTiAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0dXJuX3ZhbCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5FICwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXR1cm5fdmFsID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLkQgLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldHVybl92YWwgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuUCAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0dXJuX3ZhbCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5RICwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXR1cm5fdmFsID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLkRQLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldHVybl92YWwgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuRFEsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0dXJuX3ZhbCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5RUCwgMTYsIGYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgZXhpdF92YWwgPSBNQkVEVExTX0VYSVRfRkFJTFVSRTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19tcGlfcmVhZF9maWxlIHJldHVybmVkICVkXG5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsICk7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcnNhLmxlbiA9ICggbWJlZHRsc19tcGlfYml0bGVuKCAmcnNhLk4gKSArIDcgKSA+PiAzOworCisgICAgZmNsb3NlKCBmICk7CisKKyAgICAvKgorICAgICAqIEV4dHJhY3QgdGhlIFJTQSBlbmNyeXB0ZWQgdmFsdWUgZnJvbSB0aGUgdGV4dCBmaWxlCisgICAgICovCisgICAgaWYoICggZiA9IGZvcGVuKCAicmVzdWx0LWVuYy50eHQiLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIGV4aXRfdmFsID0gTUJFRFRMU19FWElUX0ZBSUxVUkU7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gICEgQ291bGQgbm90IG9wZW4gJXNcblxuIiwgInJlc3VsdC1lbmMudHh0IiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaSA9IDA7CisKKyAgICB3aGlsZSggZnNjYW5mKCBmLCAiJTAyWCIsICZjICkgPiAwICYmCisgICAgICAgICAgIGkgPCAoaW50KSBzaXplb2YoIGJ1ZiApICkKKyAgICAgICAgYnVmW2krK10gPSAodW5zaWduZWQgY2hhcikgYzsKKworICAgIGZjbG9zZSggZiApOworCisgICAgaWYoIGkgIT0gcnNhLmxlbiApCisgICAgeworICAgICAgICBleGl0X3ZhbCA9IE1CRURUTFNfRVhJVF9GQUlMVVJFOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAhIEludmFsaWQgUlNBIHNpZ25hdHVyZSBmb3JtYXRcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBEZWNyeXB0IHRoZSBlbmNyeXB0ZWQgUlNBIGRhdGEgYW5kIHByaW50IHRoZSByZXN1bHQuCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBEZWNyeXB0aW5nIHRoZSBlbmNyeXB0ZWQgZGF0YSIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0dXJuX3ZhbCA9IG1iZWR0bHNfcnNhX3BrY3MxX2RlY3J5cHQoICZyc2EsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RyX2RyYmcsIE1CRURUTFNfUlNBX1BSSVZBVEUsICZpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHJlc3VsdCwgMTAyNCApOworICAgIGlmKCByZXR1cm5fdmFsICE9IDAgKQorICAgIHsKKyAgICAgICAgZXhpdF92YWwgPSBNQkVEVExTX0VYSVRfRkFJTFVSRTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdCByZXR1cm5lZCAlZFxuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBPS1xuXG4iICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlRoZSBkZWNyeXB0ZWQgcmVzdWx0IGlzOiAnJXMnXG5cbiIsIHJlc3VsdCApOworCitleGl0OgorICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisgICAgbWJlZHRsc19yc2FfZnJlZSggJnJzYSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIGV4aXRfdmFsICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX1JTQV9DICYmIE1CRURUTFNfRlNfSU8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX2VuY3J5cHQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9lbmNyeXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljYjE4NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9lbmNyeXB0LmMKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiAgUlNBIHNpbXBsZSBkYXRhIGVuY3J5cHRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfZXhpdCAgICAgICBleGl0CisjZGVmaW5lIE1CRURUTFNfRVhJVF9TVUNDRVNTIEVYSVRfU1VDQ0VTUworI2RlZmluZSBNQkVEVExTX0VYSVRfRkFJTFVSRSBFWElUX0ZBSUxVUkUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX1JTQV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIEZJTEUgKmY7CisgICAgaW50IHJldHVybl92YWwsIGV4aXRfdmFsOworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgcnNhOworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRbMTAyNF07CisgICAgdW5zaWduZWQgY2hhciBidWZbNTEyXTsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gInJzYV9lbmNyeXB0IjsKKworICAgIGV4aXRfdmFsID0gTUJFRFRMU19FWElUX1NVQ0NFU1M7CisKKyAgICBpZiggYXJnYyAhPSAyICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAidXNhZ2U6IHJzYV9lbmNyeXB0IDxzdHJpbmcgb2YgbWF4IDEwMCBjaGFyYWN0ZXJzPlxuIiApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisjZW5kaWYKKworICAgICAgICBtYmVkdGxzX2V4aXQoIE1CRURUTFNfRVhJVF9GQUlMVVJFICk7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJnJzYSwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworCisgICAgcmV0dXJuX3ZhbCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW50cm9weSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApOworICAgIGlmKCByZXR1cm5fdmFsICE9IDAgKQorICAgIHsKKyAgICAgICAgZXhpdF92YWwgPSBNQkVEVExTX0VYSVRfRkFJTFVSRTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBSZWFkaW5nIHB1YmxpYyBrZXkgZnJvbSByc2FfcHViLnR4dCIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggZiA9IGZvcGVuKCAicnNhX3B1Yi50eHQiLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIGV4aXRfdmFsID0gTUJFRFRMU19FWElUX0ZBSUxVUkU7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBvcGVuIHJzYV9wdWIudHh0XG4iIFwKKyAgICAgICAgICAgICAgICAiICAhIFBsZWFzZSBydW4gcnNhX2dlbmtleSBmaXJzdFxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXR1cm5fdmFsID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLk4sIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0dXJuX3ZhbCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5FLCAxNiwgZiApICkgIT0gMCApCisgICAgeworICAgICAgICBleGl0X3ZhbCA9IE1CRURUTFNfRVhJVF9GQUlMVVJFOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9yZWFkX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgKTsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByc2EubGVuID0gKCBtYmVkdGxzX21waV9iaXRsZW4oICZyc2EuTiApICsgNyApID4+IDM7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIGlmKCBzdHJsZW4oIGFyZ3ZbMV0gKSA+IDEwMCApCisgICAgeworICAgICAgICBleGl0X3ZhbCA9IE1CRURUTFNfRVhJVF9GQUlMVVJFOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBJbnB1dCBkYXRhIGxhcmdlciB0aGFuIDEwMCBjaGFyYWN0ZXJzLlxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtZW1jcHkoIGlucHV0LCBhcmd2WzFdLCBzdHJsZW4oIGFyZ3ZbMV0gKSApOworCisgICAgLyoKKyAgICAgKiBDYWxjdWxhdGUgdGhlIFJTQSBlbmNyeXB0aW9uIG9mIHRoZSBoYXNoLgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gR2VuZXJhdGluZyB0aGUgUlNBIGVuY3J5cHRlZCB2YWx1ZSIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0dXJuX3ZhbCA9IG1iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQoICZyc2EsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RyX2RyYmcsIE1CRURUTFNfUlNBX1BVQkxJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBhcmd2WzFdICksIGlucHV0LCBidWYgKTsKKyAgICBpZiggcmV0dXJuX3ZhbCAhPSAwICkKKyAgICB7CisgICAgICAgIGV4aXRfdmFsID0gTUJFRFRMU19FWElUX0ZBSUxVUkU7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQgcmV0dXJuZWQgJWRcblxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogV3JpdGUgdGhlIHNpZ25hdHVyZSBpbnRvIHJlc3VsdC1lbmMudHh0CisgICAgICovCisgICAgaWYoICggZiA9IGZvcGVuKCAicmVzdWx0LWVuYy50eHQiLCAid2IrIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBleGl0X3ZhbCA9IE1CRURUTFNfRVhJVF9GQUlMVVJFOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3QgY3JlYXRlICVzXG5cbiIsICJyZXN1bHQtZW5jLnR4dCIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGZvciggaSA9IDA7IGkgPCByc2EubGVuOyBpKysgKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIGYsICIlMDJYJXMiLCBidWZbaV0sCisgICAgICAgICAgICAgICAgICggaSArIDEgKSAlIDE2ID09IDAgPyAiXHJcbiIgOiAiICIgKTsKKworICAgIGZjbG9zZSggZiApOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBEb25lIChjcmVhdGVkIFwiJXNcIilcblxuIiwgInJlc3VsdC1lbmMudHh0IiApOworCitleGl0OgorICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisgICAgbWJlZHRsc19yc2FfZnJlZSggJnJzYSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIGV4aXRfdmFsICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX1JTQV9DICYmIE1CRURUTFNfRU5UUk9QWV9DICYmCisgICAgICAgICAgTUJFRFRMU19GU19JTyAmJiBNQkVEVExTX0NUUl9EUkJHX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9nZW5rZXkuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9nZW5rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTk5YWQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX2dlbmtleS5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogIEV4YW1wbGUgUlNBIGtleSBnZW5lcmF0aW9uIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpICYmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19HRU5QUklNRSkgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19GU19JTykgJiYgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYmlnbnVtLmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2RlZmluZSBLRVlfU0laRSAyMDQ4CisjZGVmaW5lIEVYUE9ORU5UIDY1NTM3CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgIWRlZmluZWQoTUJFRFRMU19HRU5QUklNRSkgfHwgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19SU0FfQyBhbmQvb3IgTUJFRFRMU19HRU5QUklNRSBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19GU19JTyBhbmQvb3IgTUJFRFRMU19DVFJfRFJCR19DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIHZvaWQgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19yc2FfY29udGV4dCByc2E7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgRklMRSAqZnB1YiAgPSBOVUxMOworICAgIEZJTEUgKmZwcml2ID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gInJzYV9nZW5rZXkiOworCisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiAgLiBHZW5lcmF0aW5nIHRoZSBSU0Ega2V5IFsgJWQtYml0IF0uLi4iLCBLRVlfU0laRSApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmcnNhLCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19yc2FfZ2VuX2tleSggJnJzYSwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZywgS0VZX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUE9ORU5UICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcnNhX2dlbl9rZXkgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAuIEV4cG9ydGluZyB0aGUgcHVibGljICBrZXkgaW4gcnNhX3B1Yi50eHQuLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCBmcHViID0gZm9wZW4oICJyc2FfcHViLnR4dCIsICJ3YisiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIGNvdWxkIG5vdCBvcGVuIHJzYV9wdWIudHh0IGZvciB3cml0aW5nXG5cbiIgKTsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJOID0gIiwgJnJzYS5OLCAxNiwgZnB1YiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJFID0gIiwgJnJzYS5FLCAxNiwgZnB1YiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV93cml0ZV9maWxlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiAgLiBFeHBvcnRpbmcgdGhlIHByaXZhdGUga2V5IGluIHJzYV9wcml2LnR4dC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggZnByaXYgPSBmb3BlbiggInJzYV9wcml2LnR4dCIsICJ3YisiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIGNvdWxkIG5vdCBvcGVuIHJzYV9wcml2LnR4dCBmb3Igd3JpdGluZ1xuIiApOworICAgICAgICByZXQgPSAxOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIk4gPSAiICwgJnJzYS5OICwgMTYsIGZwcml2ICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkUgPSAiICwgJnJzYS5FICwgMTYsIGZwcml2ICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkQgPSAiICwgJnJzYS5EICwgMTYsIGZwcml2ICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlAgPSAiICwgJnJzYS5QICwgMTYsIGZwcml2ICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlEgPSAiICwgJnJzYS5RICwgMTYsIGZwcml2ICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkRQID0gIiwgJnJzYS5EUCwgMTYsIGZwcml2ICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkRRID0gIiwgJnJzYS5EUSwgMTYsIGZwcml2ICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlFQID0gIiwgJnJzYS5RUCwgMTYsIGZwcml2ICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisvKgorICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4gIC4gR2VuZXJhdGluZyB0aGUgY2VydGlmaWNhdGUuLi4iICk7CisKKyAgICB4NTA5d3JpdGVfaW5pdF9yYXcoICZjZXJ0ICk7CisgICAgeDUwOXdyaXRlX2FkZF9wdWJrZXkoICZjZXJ0LCAmcnNhICk7CisgICAgeDUwOXdyaXRlX2FkZF9zdWJqZWN0KCAmY2VydCwgIkNOPSdsb2NhbGhvc3QnIiApOworICAgIHg1MDl3cml0ZV9hZGRfdmFsaWRpdHkoICZjZXJ0LCAiMjAwNy0wOS0wNiAxNzowMDozMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwLTA5LTA2IDE3OjAwOjMyIiApOworICAgIHg1MDl3cml0ZV9jcmVhdGVfc2VsZnNpZ24oICZjZXJ0LCAmcnNhICk7CisgICAgeDUwOXdyaXRlX2NydGZpbGUoICZjZXJ0LCAiY2VydC5kZXIiLCBYNTA5X09VVFBVVF9ERVIgKTsKKyAgICB4NTA5d3JpdGVfY3J0ZmlsZSggJmNlcnQsICJjZXJ0LnBlbSIsIFg1MDlfT1VUUFVUX1BFTSApOworICAgIHg1MDl3cml0ZV9mcmVlX3JhdyggJmNlcnQgKTsKKyovCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcblxuIiApOworCitleGl0OgorCisgICAgaWYoIGZwdWIgICE9IE5VTEwgKQorICAgICAgICBmY2xvc2UoIGZwdWIgKTsKKworICAgIGlmKCBmcHJpdiAhPSBOVUxMICkKKyAgICAgICAgZmNsb3NlKCBmcHJpdiApOworCisgICAgbWJlZHRsc19yc2FfZnJlZSggJnJzYSApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYgTUJFRFRMU19SU0FfQyAmJgorICAgICAgICAgIE1CRURUTFNfR0VOUFJJTUUgJiYgTUJFRFRMU19GU19JTyAmJiBNQkVEVExTX0NUUl9EUkJHX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9wcml2LnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9wcml2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmMzN2ZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3ByaXYudHh0CkBAIC0wLDAgKzEsOCBAQAorTiA9IEExRDQ2RkJBMjMxOEY4RENFRjE2QzI4MDk0OEIxQ0YyNzk2NkI5QjQ3MjI1RUQyOTg5RjhENzRCNDVCRDM2MDQ5QzBBQUI1QUQwRkYwMDM1NTNCQTg0M0M4RTEyNzgyRkM1ODczQkI4OUEzREM4NEI4ODNEMjU2NjZDRDIyQkYzQUNENUI2NzU5NjlGOEJFQkZCQ0FDOTNGREQ5MjdDNzQ0MkIxNzhCMTBEMURGRjkzOThFNTIzMTZBQUUwQUY3NEU1OTQ2NTBCREMzQzY3MDI0MUQ0MTg2ODQ1OTNDREExQTdCOURDNEYyMEQyRkRDNkY2NjM0NDA3NDAwM0UyMTENCitFID0gMDEwMDAxDQorRCA9IDU4OTU1MkJCNEYyRjAyM0FERERENTU4NkQwQzhGRDg1NzUxMkQ4MjA4MDQzNjY3OEQwN0Y5ODRBMjlEODkyRDMxRjFGNzAwMEZDNUEzOUEwRjczRTI3RDg4NUU0NzI0OUE0MTQ4QzhBNTY1M0VGNjlGOTFGOEY3MzZCQTlGODQ4NDFDMkQ5OUNEOEMyNERFOEI3MkI1QzlCRTBFREJFMjNGOTNENzMxNzQ5RkVBOUNGQjRBNDhERDJCN0YzNUEyNzAzRTc0QUEyRDREQjdERTlDRUVBN0Q3NjNBRjBBREE3QUMxNzZDNEU5QTIyQzRDREE2NUNFQzBDNjU5NjQ0MDENCitQID0gQ0QwODM1NjhEMkQ0NkM0NEM0MEMxRkEwMTAxQUYyMTU1RTU5QzcwQjA4NDIzMTEyQUYwQzEyMDI1MTRCQkE1MjEwNzY1RTI5RkYxMzAzNkY1NkM3NDk1ODk0RDgwQ0Y4QzNCQUVFMjgzOUJBQ0JCMEI4NkY2QTI5NjVGNjBEQjENCitRID0gQ0EwRUVFQTVFNzEwRThFOTgxMUE2Qjg0NjM5OTQyMEUzQUU0QTRDMTY2NDdFNDI2RERGOEJCQkNCMTFDRDNGMzVDRTJFNEI2QkNBRDA3QUUyQzBFQzJFQ0JGQ0M2MDFCMjA3Q0RENzdCNTY3M0UxNjM4MkIxMTMwQkY0NjUyNjENCitEUCA9IDBEMEUyMUMwN0JGNDM0QjRBODNCMTE2NDcyQzIxNDdBMTFEOEVCOThBMzNDRkJCQ0YxRDI3NUVGMTlEODE1OTQxNjIyNDM1QUFGMzgzOUI2QzQzMkNBNTNDRTlFNzcyQ0ZCRTE5MjNBOTM3QTc2NkZEOTNFOTZFNkVERUMxREYxDQorRFEgPSAyNjlDRUJFNjMwNURGRUU0ODA5Mzc3RjA3OEM4MTRFMzdCNDVBRTY2NzcxMTRERkM0Rjc2RjUwOTdFMUYzMDMxRDU5MjU2N0FDNTVCOUI5ODIxM0I0MEVDRDU0QTREMjM2MUY1RkFBQ0ExQjFGNTFGNzFFNDY5MDg5M0M0RjA4MQ0KK1FQID0gOTdBQzVCQjg4NUFCQ0EzMTQzNzVFOUU0REIxQkE0QjIyMThDOTA2MTlGNjFCRDQ3NEY1Nzg1MDc1RUNBODE3NTBBNzM1MTk5QThDMTkxRkUyRDMzNTVFN0NGNjAxQTcwRTVDQUJERTBFMDJDMjUzOEJCOUZCNDg3MTU0MEIzQzENCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2FfcHViLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9wdWIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNmQzMTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2FfcHViLnR4dApAQCAtMCwwICsxLDIgQEAKK04gPSBBMUQ0NkZCQTIzMThGOERDRUYxNkMyODA5NDhCMUNGMjc5NjZCOUI0NzIyNUVEMjk4OUY4RDc0QjQ1QkQzNjA0OUMwQUFCNUFEMEZGMDAzNTUzQkE4NDNDOEUxMjc4MkZDNTg3M0JCODlBM0RDODRCODgzRDI1NjY2Q0QyMkJGM0FDRDVCNjc1OTY5RjhCRUJGQkNBQzkzRkREOTI3Qzc0NDJCMTc4QjEwRDFERkY5Mzk4RTUyMzE2QUFFMEFGNzRFNTk0NjUwQkRDM0M2NzAyNDFENDE4Njg0NTkzQ0RBMUE3QjlEQzRGMjBEMkZEQzZGNjYzNDQwNzQwMDNFMjExDQorRSA9IDAxMDAwMQ0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9zaWduLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2Ffc2lnbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZmJmN2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2Ffc2lnbi5jCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogIFJTQS9TSEEtMjU2IHNpZ25hdHVyZSBjcmVhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgfHwgIWRlZmluZWQoTUJFRFRMU19NRF9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgTUJFRFRMU19SU0FfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfTURfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfU0hBMjU2X0MgYW5kL29yIE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBGSUxFICpmOworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19yc2FfY29udGV4dCByc2E7CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRV07CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJnJzYSwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKyAgICByZXQgPSAxOworCisgICAgaWYoIGFyZ2MgIT0gMiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInVzYWdlOiByc2Ffc2lnbiA8ZmlsZW5hbWU+XG4iICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZgorCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFJlYWRpbmcgcHJpdmF0ZSBrZXkgZnJvbSByc2FfcHJpdi50eHQiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggInJzYV9wcml2LnR4dCIsICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IG9wZW4gcnNhX3ByaXYudHh0XG4iIFwKKyAgICAgICAgICAgICAgICAiICAhIFBsZWFzZSBydW4gcnNhX2dlbmtleSBmaXJzdFxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuTiAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLkUgLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5EICwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuUCAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLlEgLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5EUCwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuRFEsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLlFQLCAxNiwgZiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9yZWFkX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcnNhLmxlbiA9ICggbWJlZHRsc19tcGlfYml0bGVuKCAmcnNhLk4gKSArIDcgKSA+PiAzOworCisgICAgZmNsb3NlKCBmICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIENoZWNraW5nIHRoZSBwcml2YXRlIGtleSIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoICZyc2EgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSBmYWlsZWQgd2l0aCAtMHglMHhcbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogQ29tcHV0ZSB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBpbnB1dCBmaWxlLAorICAgICAqIHRoZW4gY2FsY3VsYXRlIHRoZSBSU0Egc2lnbmF0dXJlIG9mIHRoZSBoYXNoLgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gR2VuZXJhdGluZyB0aGUgUlNBL1NIQS0yNTYgc2lnbmF0dXJlIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMjU2ICksCisgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMV0sIGhhc2ggKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IG9wZW4gb3IgcmVhZCAlc1xuXG4iLCBhcmd2WzFdICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3JzYV9wa2NzMV9zaWduKCAmcnNhLCBOVUxMLCBOVUxMLCBNQkVEVExTX1JTQV9QUklWQVRFLCBNQkVEVExTX01EX1NIQTI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAsIGhhc2gsIGJ1ZiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3JzYV9wa2NzMV9zaWduIHJldHVybmVkIC0weCUweFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdyaXRlIHRoZSBzaWduYXR1cmUgaW50byA8ZmlsZW5hbWU+LnNpZworICAgICAqLworICAgIG1iZWR0bHNfc25wcmludGYoIGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMuc2lnIiwgYXJndlsxXSApOworCisgICAgaWYoICggZiA9IGZvcGVuKCBmaWxlbmFtZSwgIndiKyIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IGNyZWF0ZSAlc1xuXG4iLCBhcmd2WzFdICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgcnNhLmxlbjsgaSsrICkKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBmLCAiJTAyWCVzIiwgYnVmW2ldLAorICAgICAgICAgICAgICAgICAoIGkgKyAxICkgJSAxNiA9PSAwID8gIlxyXG4iIDogIiAiICk7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gRG9uZSAoY3JlYXRlZCBcIiVzXCIpXG5cbiIsIGZpbGVuYW1lICk7CisKK2V4aXQ6CisKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmcnNhICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX1JTQV9DICYmIE1CRURUTFNfU0hBMjU2X0MgJiYKKyAgICAgICAgICBNQkVEVExTX0ZTX0lPICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2Ffc2lnbl9wc3MuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9zaWduX3Bzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNmYxNGQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2Ffc2lnbl9wc3MuYwpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqICBSU0FTU0EtUFNTL1NIQS0yNTYgc2lnbmF0dXJlIGNyZWF0aW9uIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19NRF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSB8fCAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19NRF9DIGFuZC9vciBNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19SU0FfQyBhbmQvb3IgTUJFRFRMU19TSEEyNTZfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19QS19QQVJTRV9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0NUUl9EUkJHX0Mgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIEZJTEUgKmY7CisgICAgaW50IHJldCA9IDE7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFszMl07CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19NUElfTUFYX1NJWkVdOworICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gInJzYV9zaWduX3BzcyI7CisgICAgc2l6ZV90IG9sZW4gPSAwOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgaWYoIGFyZ2MgIT0gMyApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInVzYWdlOiByc2Ffc2lnbl9wc3MgPGtleV9maWxlPiA8ZmlsZW5hbWU+XG4iICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZgorCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHJfZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBwZXJzICkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gUmVhZGluZyBwcml2YXRlIGtleSBmcm9tICclcyciLCBhcmd2WzFdICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJnBrLCBhcmd2WzFdLCAiIiApICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3QgcmVhZCBrZXkgZnJvbSAnJXMnXG4iLCBhcmd2WzFdICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhIG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggIW1iZWR0bHNfcGtfY2FuX2RvKCAmcGssIE1CRURUTFNfUEtfUlNBICkgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgS2V5IGlzIG5vdCBhbiBSU0Ega2V5XG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3JzYV9zZXRfcGFkZGluZyggbWJlZHRsc19wa19yc2EoIHBrICksIE1CRURUTFNfUlNBX1BLQ1NfVjIxLCBNQkVEVExTX01EX1NIQTI1NiApOworCisgICAgLyoKKyAgICAgKiBDb21wdXRlIHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGlucHV0IGZpbGUsCisgICAgICogdGhlbiBjYWxjdWxhdGUgdGhlIFJTQSBzaWduYXR1cmUgb2YgdGhlIGhhc2guCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBHZW5lcmF0aW5nIHRoZSBSU0EvU0hBLTI1NiBzaWduYXR1cmUiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEEyNTYgKSwKKyAgICAgICAgICAgICAgICAgICAgYXJndlsyXSwgaGFzaCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3Qgb3BlbiBvciByZWFkICVzXG5cbiIsIGFyZ3ZbMl0gKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfc2lnbiggJnBrLCBNQkVEVExTX01EX1NIQTI1NiwgaGFzaCwgMCwgYnVmLCAmb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcGtfc2lnbiByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogV3JpdGUgdGhlIHNpZ25hdHVyZSBpbnRvIDxmaWxlbmFtZT4uc2lnCisgICAgICovCisgICAgbWJlZHRsc19zbnByaW50ZiggZmlsZW5hbWUsIDUxMiwgIiVzLnNpZyIsIGFyZ3ZbMl0gKTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggZmlsZW5hbWUsICJ3YisiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBjcmVhdGUgJXNcblxuIiwgZmlsZW5hbWUgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBmd3JpdGUoIGJ1ZiwgMSwgb2xlbiwgZiApICE9IG9sZW4gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiAgISBmd3JpdGUgZmFpbGVkXG5cbiIgKTsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gRG9uZSAoY3JlYXRlZCBcIiVzXCIpXG5cbiIsIGZpbGVuYW1lICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGsgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYgTUJFRFRMU19SU0FfQyAmJgorICAgICAgICAgIE1CRURUTFNfU0hBMjU2X0MgJiYgTUJFRFRMU19QS19QQVJTRV9DICYmIE1CRURUTFNfRlNfSU8gJiYKKyAgICAgICAgICBNQkVEVExTX0NUUl9EUkJHX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV92ZXJpZnkuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV92ZXJpZnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgyN2FhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3ZlcmlmeS5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogIFJTQS9TSEEtMjU2IHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICBzbnByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfTURfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfUlNBX0MgYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX01EX0MgYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX1NIQTI1Nl9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgRklMRSAqZjsKKyAgICBpbnQgcmV0LCBjOworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgcnNhOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFszMl07CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19NUElfTUFYX1NJWkVdOworICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZyc2EsIE1CRURUTFNfUlNBX1BLQ1NfVjE1LCAwICk7CisgICAgcmV0ID0gMTsKKworICAgIGlmKCBhcmdjICE9IDIgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJ1c2FnZTogcnNhX3ZlcmlmeSA8ZmlsZW5hbWU+XG4iICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZgorCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFJlYWRpbmcgcHVibGljIGtleSBmcm9tIHJzYV9wdWIudHh0IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCBmID0gZm9wZW4oICJyc2FfcHViLnR4dCIsICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IG9wZW4gcnNhX3B1Yi50eHRcbiIgXAorICAgICAgICAgICAgICAgICIgICEgUGxlYXNlIHJ1biByc2FfZ2Vua2V5IGZpcnN0XG5cbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5OLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5FLCAxNiwgZiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9yZWFkX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcnNhLmxlbiA9ICggbWJlZHRsc19tcGlfYml0bGVuKCAmcnNhLk4gKSArIDcgKSA+PiAzOworCisgICAgZmNsb3NlKCBmICk7CisKKyAgICAvKgorICAgICAqIEV4dHJhY3QgdGhlIFJTQSBzaWduYXR1cmUgZnJvbSB0aGUgdGV4dCBmaWxlCisgICAgICovCisgICAgcmV0ID0gMTsKKyAgICBtYmVkdGxzX3NucHJpbnRmKCBmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzLnNpZyIsIGFyZ3ZbMV0gKTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggZmlsZW5hbWUsICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgISBDb3VsZCBub3Qgb3BlbiAlc1xuXG4iLCBmaWxlbmFtZSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaSA9IDA7CisgICAgd2hpbGUoIGZzY2FuZiggZiwgIiUwMlgiLCAmYyApID4gMCAmJgorICAgICAgICAgICBpIDwgKGludCkgc2l6ZW9mKCBidWYgKSApCisgICAgICAgIGJ1ZltpKytdID0gKHVuc2lnbmVkIGNoYXIpIGM7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIGlmKCBpICE9IHJzYS5sZW4gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgISBJbnZhbGlkIFJTQSBzaWduYXR1cmUgZm9ybWF0XG5cbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogQ29tcHV0ZSB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBpbnB1dCBmaWxlIGFuZAorICAgICAqIHZlcmlmeSB0aGUgc2lnbmF0dXJlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBWZXJpZnlpbmcgdGhlIFJTQS9TSEEtMjU2IHNpZ25hdHVyZSIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9maWxlKAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTI1NiApLAorICAgICAgICAgICAgICAgICAgICBhcmd2WzFdLCBoYXNoICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJXNcblxuIiwgYXJndlsxXSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5KCAmcnNhLCBOVUxMLCBOVUxMLCBNQkVEVExTX1JTQV9QVUJMSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19NRF9TSEEyNTYsIDIwLCBoYXNoLCBidWYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5IHJldHVybmVkIC0weCUweFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIE9LICh0aGUgc2lnbmF0dXJlIGlzIHZhbGlkKVxuXG4iICk7CisKKyAgICByZXQgPSAwOworCitleGl0OgorCisgICAgbWJlZHRsc19yc2FfZnJlZSggJnJzYSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19SU0FfQyAmJiBNQkVEVExTX1NIQTI1Nl9DICYmCisgICAgICAgICAgTUJFRFRMU19GU19JTyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3ZlcmlmeV9wc3MuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV92ZXJpZnlfcHNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFiNzIwZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV92ZXJpZnlfcHNzLmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiAgUlNBU1NBLVBTUy9TSEEtMjU2IHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgc25wcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01EX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpIHx8ICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX01EX0MgYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1JTQV9DIGFuZC9vciBNQkVEVExTX1NIQTI1Nl9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1BLX1BBUlNFX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGsuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgRklMRSAqZjsKKyAgICBpbnQgcmV0ID0gMTsKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRV07CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworCisgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKKworICAgIGlmKCBhcmdjICE9IDMgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJ1c2FnZTogcnNhX3ZlcmlmeV9wc3MgPGtleV9maWxlPiA8ZmlsZW5hbWU+XG4iICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZgorCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFJlYWRpbmcgcHVibGljIGtleSBmcm9tICclcyciLCBhcmd2WzFdICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUoICZwaywgYXJndlsxXSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3QgcmVhZCBrZXkgZnJvbSAnJXMnXG4iLCBhcmd2WzFdICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhIG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggIW1iZWR0bHNfcGtfY2FuX2RvKCAmcGssIE1CRURUTFNfUEtfUlNBICkgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgS2V5IGlzIG5vdCBhbiBSU0Ega2V5XG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3JzYV9zZXRfcGFkZGluZyggbWJlZHRsc19wa19yc2EoIHBrICksIE1CRURUTFNfUlNBX1BLQ1NfVjIxLCBNQkVEVExTX01EX1NIQTI1NiApOworCisgICAgLyoKKyAgICAgKiBFeHRyYWN0IHRoZSBSU0Egc2lnbmF0dXJlIGZyb20gdGhlIGZpbGUKKyAgICAgKi8KKyAgICByZXQgPSAxOworICAgIG1iZWR0bHNfc25wcmludGYoIGZpbGVuYW1lLCA1MTIsICIlcy5zaWciLCBhcmd2WzJdICk7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIGZpbGVuYW1lLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gICEgQ291bGQgbm90IG9wZW4gJXNcblxuIiwgZmlsZW5hbWUgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworCisgICAgaSA9IGZyZWFkKCBidWYsIDEsIE1CRURUTFNfTVBJX01BWF9TSVpFLCBmICk7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIC8qCisgICAgICogQ29tcHV0ZSB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBpbnB1dCBmaWxlIGFuZAorICAgICAqIHZlcmlmeSB0aGUgc2lnbmF0dXJlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBWZXJpZnlpbmcgdGhlIFJTQS9TSEEtMjU2IHNpZ25hdHVyZSIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9maWxlKAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTI1NiApLAorICAgICAgICAgICAgICAgICAgICBhcmd2WzJdLCBoYXNoICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJXNcblxuIiwgYXJndlsyXSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa192ZXJpZnkoICZwaywgTUJFRFRMU19NRF9TSEEyNTYsIGhhc2gsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19wa192ZXJpZnkgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIE9LICh0aGUgc2lnbmF0dXJlIGlzIHZhbGlkKVxuXG4iICk7CisKKyAgICByZXQgPSAwOworCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX1JTQV9DICYmIE1CRURUTFNfU0hBMjU2X0MgJiYKKyAgICAgICAgICBNQkVEVExTX1BLX1BBUlNFX0MgJiYgTUJFRFRMU19GU19JTyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3JhbmRvbS9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9yYW5kb20vQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5MzNkOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9yYW5kb20vQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMiBAQAorYWRkX2V4ZWN1dGFibGUoZ2VuX3JhbmRvbV9oYXZlZ2UgZ2VuX3JhbmRvbV9oYXZlZ2UuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhnZW5fcmFuZG9tX2hhdmVnZSBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShnZW5fcmFuZG9tX2N0cl9kcmJnIGdlbl9yYW5kb21fY3RyX2RyYmcuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhnZW5fcmFuZG9tX2N0cl9kcmJnIG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKGdlbl9lbnRyb3B5IGdlbl9lbnRyb3B5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZ2VuX2VudHJvcHkgbWJlZHRscykKKworaW5zdGFsbChUQVJHRVRTIGdlbl9yYW5kb21faGF2ZWdlIGdlbl9yYW5kb21fY3RyX2RyYmcgZ2VuX2VudHJvcHkKKyAgICAgICAgREVTVElOQVRJT04gImJpbiIKKyAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURSBXT1JMRF9SRUFEIFdPUkxEX0VYRUNVVEUpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcmFuZG9tL2dlbl9lbnRyb3B5LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcmFuZG9tL2dlbl9lbnRyb3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkyZDM4MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9yYW5kb20vZ2VuX2VudHJvcHkuYwpAQCAtMCwwICsxLDk2IEBACisvKioKKyAqICBcYnJpZWYgVXNlIGFuZCBnZW5lcmF0ZSBtdWx0aXBsZSBlbnRyb3BpZXMgY2FsbHMgaW50byBhIGZpbGUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19FTlRST1BZX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgRklMRSAqZjsKKyAgICBpbnQgaSwgaywgcmV0OworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworCisgICAgaWYoIGFyZ2MgPCAyICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAidXNhZ2U6ICVzIDxvdXRwdXQgZmlsZW5hbWU+XG4iLCBhcmd2WzBdICk7CisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCAoIGYgPSBmb3BlbiggYXJndlsxXSwgIndiKyIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWQgdG8gb3BlbiAnJXMnIGZvciB3cml0aW5nLlxuIiwgYXJndlsxXSApOworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKworICAgIGZvciggaSA9IDAsIGsgPSA3Njg7IGkgPCBrOyBpKysgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19lbnRyb3B5X2Z1bmMoICZlbnRyb3B5LCBidWYsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoImZhaWxlZCFcbiIpOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisKKyAgICAgICAgZndyaXRlKCBidWYsIDEsIHNpemVvZiggYnVmICksIGYgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkdlbmVyYXRpbmcgJWxka2Igb2YgZGF0YSBpbiBmaWxlICclcycuLi4gJTA0LjFmIiBcCisgICAgICAgICAgICAgICAgIiUlIGRvbmVcciIsIChsb25nKShzaXplb2YoYnVmKSAqIGsgLyAxMDI0KSwgYXJndlsxXSwgKDEwMCAqIChmbG9hdCkgKGkgKyAxKSkgLyBrICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisgICAgfQorCisgICAgcmV0ID0gMDsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgZmNsb3NlKCBmICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcmFuZG9tL2dlbl9yYW5kb21fY3RyX2RyYmcuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9yYW5kb20vZ2VuX3JhbmRvbV9jdHJfZHJiZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NmY5OWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcmFuZG9tL2dlbl9yYW5kb21fY3RyX2RyYmcuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoqCisgKiAgXGJyaWVmIFVzZSBhbmQgZ2VuZXJhdGUgcmFuZG9tIGRhdGEgaW50byBhIGZpbGUgdmlhIHRoZSBDVFJfREJSRyBiYXNlZCBvbiBBRVMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgJiYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgJiYgXAorIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCBcCisgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19DVFJfRFJCR19DIGFuZC9vciBNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBGSUxFICpmOworICAgIGludCBpLCBrLCByZXQ7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgaWYoIGFyZ2MgPCAyICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAidXNhZ2U6ICVzIDxvdXRwdXQgZmlsZW5hbWU+XG4iLCBhcmd2WzBdICk7CisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCAoIGYgPSBmb3BlbiggYXJndlsxXSwgIndiKyIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWQgdG8gb3BlbiAnJXMnIGZvciB3cml0aW5nLlxuIiwgYXJndlsxXSApOworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyAgICByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHJfZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSAiUkFORE9NX0dFTiIsIDEwICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkIGluIG1iZWR0bHNfY3RyX2RyYmdfc2VlZDogJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorICAgIG1iZWR0bHNfY3RyX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSggJmN0cl9kcmJnLCBNQkVEVExTX0NUUl9EUkJHX1BSX09GRiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfdXBkYXRlX3NlZWRfZmlsZSggJmN0cl9kcmJnLCAic2VlZGZpbGUiICk7CisKKyAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1IgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJGYWlsZWQgdG8gb3BlbiBzZWVkZmlsZS4gR2VuZXJhdGluZyBvbmUuXG4iICk7CisgICAgICAgIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfd3JpdGVfc2VlZF9maWxlKCAmY3RyX2RyYmcsICJzZWVkZmlsZSIgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWQgaW4gbWJlZHRsc19jdHJfZHJiZ193cml0ZV9zZWVkX2ZpbGU6ICVkXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZCBpbiBtYmVkdGxzX2N0cl9kcmJnX3VwZGF0ZV9zZWVkX2ZpbGU6ICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKyNlbmRpZgorCisgICAgZm9yKCBpID0gMCwgayA9IDc2ODsgaSA8IGs7IGkrKyApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0cl9kcmJnLCBidWYsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoImZhaWxlZCFcbiIpOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisKKyAgICAgICAgZndyaXRlKCBidWYsIDEsIHNpemVvZiggYnVmICksIGYgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkdlbmVyYXRpbmcgJWxka2Igb2YgZGF0YSBpbiBmaWxlICclcycuLi4gJTA0LjFmIiBcCisgICAgICAgICAgICAgICAgIiUlIGRvbmVcciIsIChsb25nKShzaXplb2YoYnVmKSAqIGsgLyAxMDI0KSwgYXJndlsxXSwgKDEwMCAqIChmbG9hdCkgKGkgKyAxKSkgLyBrICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisgICAgfQorCisgICAgcmV0ID0gMDsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX3ByaW50ZigiXG4iKTsKKworICAgIGZjbG9zZSggZiApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ1RSX0RSQkdfQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3JhbmRvbS9nZW5fcmFuZG9tX2hhdmVnZS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3JhbmRvbS9nZW5fcmFuZG9tX2hhdmVnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzE0NjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcmFuZG9tL2dlbl9yYW5kb21faGF2ZWdlLmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qKgorICogIFxicmllZiBHZW5lcmF0ZSByYW5kb20gZGF0YSBpbnRvIGEgZmlsZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2luY2x1ZGUgIm1iZWR0bHMvaGF2ZWdlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19IQVZFR0VfQyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBGSUxFICpmOworICAgIHRpbWVfdCB0OworICAgIGludCBpLCBrLCByZXQgPSAwOworICAgIG1iZWR0bHNfaGF2ZWdlX3N0YXRlIGhzOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworCisgICAgaWYoIGFyZ2MgPCAyICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAidXNhZ2U6ICVzIDxvdXRwdXQgZmlsZW5hbWU+XG4iLCBhcmd2WzBdICk7CisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCAoIGYgPSBmb3BlbiggYXJndlsxXSwgIndiKyIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWQgdG8gb3BlbiAnJXMnIGZvciB3cml0aW5nLlxuIiwgYXJndlsxXSApOworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX2hhdmVnZV9pbml0KCAmaHMgKTsKKworICAgIHQgPSB0aW1lKCBOVUxMICk7CisKKyAgICBmb3IoIGkgPSAwLCBrID0gNzY4OyBpIDwgazsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCBtYmVkdGxzX2hhdmVnZV9yYW5kb20oICZocywgYnVmLCBzaXplb2YoIGJ1ZiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiRmFpbGVkIHRvIGdldCByYW5kb20gZnJvbSBzb3VyY2UuXG4iICk7CisKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBmd3JpdGUoIGJ1Ziwgc2l6ZW9mKCBidWYgKSwgMSwgZiApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiR2VuZXJhdGluZyAlbGRrYiBvZiBkYXRhIGluIGZpbGUgJyVzJy4uLiAlMDQuMWYiIFwKKyAgICAgICAgICAgICAgICAiJSUgZG9uZVxyIiwgKGxvbmcpKHNpemVvZihidWYpICogayAvIDEwMjQpLCBhcmd2WzFdLCAoMTAwICogKGZsb2F0KSAoaSArIDEpKSAvIGsgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKyAgICB9CisKKyAgICBpZiggdCA9PSB0aW1lKCBOVUxMICkgKQorICAgICAgICB0LS07CisKKyAgICBtYmVkdGxzX3ByaW50ZigiIFxuICIpOworCitleGl0OgorICAgIG1iZWR0bHNfaGF2ZWdlX2ZyZWUoICZocyApOworICAgIGZjbG9zZSggZiApOworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19IQVZFR0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2NTYzMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw2MiBAQAorc2V0KFRIUkVBRFNfVVNFX1BUSFJFQURTX1dJTjMyIHRydWUpCitmaW5kX3BhY2thZ2UoVGhyZWFkcykKKworc2V0KGxpYnMKKyAgICBtYmVkdGxzCispCisKK3NldCh0YXJnZXRzCisgICAgZHRsc19jbGllbnQKKyAgICBkdGxzX3NlcnZlcgorICAgIHNzbF9jbGllbnQxCisgICAgc3NsX2NsaWVudDIKKyAgICBzc2xfc2VydmVyCisgICAgc3NsX2Zvcmtfc2VydmVyCisgICAgc3NsX21haWxfY2xpZW50CisgICAgbWluaV9jbGllbnQKKykKKworaWYoVVNFX1BLQ1MxMV9IRUxQRVJfTElCUkFSWSkKKyAgICBzZXQobGlicyAke2xpYnN9IHBrY3MxMS1oZWxwZXIpCitlbmRpZihVU0VfUEtDUzExX0hFTFBFUl9MSUJSQVJZKQorCitpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorICAgIHNldChsaWJzICR7bGlic30gJHtaTElCX0xJQlJBUklFU30pCitlbmRpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorCithZGRfZXhlY3V0YWJsZShkdGxzX2NsaWVudCBkdGxzX2NsaWVudC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGR0bHNfY2xpZW50ICR7bGlic30pCisKK2FkZF9leGVjdXRhYmxlKGR0bHNfc2VydmVyIGR0bHNfc2VydmVyLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZHRsc19zZXJ2ZXIgJHtsaWJzfSkKKworYWRkX2V4ZWN1dGFibGUoc3NsX2NsaWVudDEgc3NsX2NsaWVudDEuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhzc2xfY2xpZW50MSAke2xpYnN9KQorCithZGRfZXhlY3V0YWJsZShzc2xfY2xpZW50MiBzc2xfY2xpZW50Mi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNzbF9jbGllbnQyICR7bGlic30pCisKK2FkZF9leGVjdXRhYmxlKHNzbF9zZXJ2ZXIgc3NsX3NlcnZlci5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNzbF9zZXJ2ZXIgJHtsaWJzfSkKKworYWRkX2V4ZWN1dGFibGUoc3NsX3NlcnZlcjIgc3NsX3NlcnZlcjIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhzc2xfc2VydmVyMiAke2xpYnN9KQorCithZGRfZXhlY3V0YWJsZShzc2xfZm9ya19zZXJ2ZXIgc3NsX2Zvcmtfc2VydmVyLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoc3NsX2Zvcmtfc2VydmVyICR7bGlic30pCisKK2FkZF9leGVjdXRhYmxlKHNzbF9tYWlsX2NsaWVudCBzc2xfbWFpbF9jbGllbnQuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhzc2xfbWFpbF9jbGllbnQgJHtsaWJzfSkKKworYWRkX2V4ZWN1dGFibGUobWluaV9jbGllbnQgbWluaV9jbGllbnQuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhtaW5pX2NsaWVudCAke2xpYnN9KQorCitpZihUSFJFQURTX0ZPVU5EKQorICAgIGFkZF9leGVjdXRhYmxlKHNzbF9wdGhyZWFkX3NlcnZlciBzc2xfcHRocmVhZF9zZXJ2ZXIuYykKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoc3NsX3B0aHJlYWRfc2VydmVyICR7bGlic30gJHtDTUFLRV9USFJFQURfTElCU19JTklUfSkKKyAgICBzZXQodGFyZ2V0cyAke3RhcmdldHN9IHNzbF9wdGhyZWFkX3NlcnZlcikKK2VuZGlmKFRIUkVBRFNfRk9VTkQpCisKK2luc3RhbGwoVEFSR0VUUyAke3RhcmdldHN9CisgICAgICAgIERFU1RJTkFUSU9OICJiaW4iCisgICAgICAgIFBFUk1JU1NJT05TIE9XTkVSX1JFQUQgT1dORVJfV1JJVEUgT1dORVJfRVhFQ1VURSBHUk9VUF9SRUFEIEdST1VQX0VYRUNVVEUgV09STERfUkVBRCBXT1JMRF9FWEVDVVRFKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9kdGxzX2NsaWVudC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9kdGxzX2NsaWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MmEzZmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL2R0bHNfY2xpZW50LmMKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiAgU2ltcGxlIERUTFMgY2xpZW50IGRlbW9uc3RyYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKSB8fCAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgIHx8ICFkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpIHx8ICAgICAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKSB8fCAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19DRVJUU19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCAiTUJFRFRMU19TU0xfQ0xJX0MgYW5kL29yIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX05FVF9DIGFuZC9vciBNQkVEVExTX1RJTUlOR19DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19FTlRST1BZX0MgYW5kL29yIE1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyBhbmQvb3IgTUJFRFRMU19SU0FfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfQ0VSVFNfQyBhbmQvb3IgTUJFRFRMU19QRU1fUEFSU0VfQyBub3QgZGVmaW5lZC5cbiIgKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm1iZWR0bHMvbmV0X3NvY2tldHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2RlYnVnLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2VydHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3RpbWluZy5oIgorCisjZGVmaW5lIFNFUlZFUl9QT1JUICI0NDMzIgorI2RlZmluZSBTRVJWRVJfTkFNRSAibG9jYWxob3N0IgorI2RlZmluZSBTRVJWRVJfQUREUiAiMTI3LjAuMC4xIiAvKiBmb3JjZXMgSVB2NCAqLworI2RlZmluZSBNRVNTQUdFICAgICAiRWNobyB0aGlzIgorCisjZGVmaW5lIFJFQURfVElNRU9VVF9NUyAxMDAwCisjZGVmaW5lIE1BWF9SRVRSWSAgICAgICA1CisKKyNkZWZpbmUgREVCVUdfTEVWRUwgMAorCitzdGF0aWMgdm9pZCBteV9kZWJ1Zyggdm9pZCAqY3R4LCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyICkKK3sKKyAgICAoKHZvaWQpIGxldmVsKTsKKworICAgIG1iZWR0bHNfZnByaW50ZiggKEZJTEUgKikgY3R4LCAiJXM6JTA0ZDogJXMiLCBmaWxlLCBsaW5lLCBzdHIgKTsKKyAgICBmZmx1c2goICAoRklMRSAqKSBjdHggICk7Cit9CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0LCBsZW47CisgICAgbWJlZHRsc19uZXRfY29udGV4dCBzZXJ2ZXJfZmQ7CisgICAgdWludDMyX3QgZmxhZ3M7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJkdGxzX2NsaWVudCI7CisgICAgaW50IHJldHJ5X2xlZnQgPSBNQVhfUkVUUlk7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IGNhY2VydDsKKyAgICBtYmVkdGxzX3RpbWluZ19kZWxheV9jb250ZXh0IHRpbWVyOworCisgICAgKCh2b2lkKSBhcmdjKTsKKyAgICAoKHZvaWQpIGFyZ3YpOworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFQlVHX0MpCisgICAgbWJlZHRsc19kZWJ1Z19zZXRfdGhyZXNob2xkKCBERUJVR19MRVZFTCApOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIDAuIEluaXRpYWxpemUgdGhlIFJORyBhbmQgdGhlIHNlc3Npb24gZGF0YQorICAgICAqLworICAgIG1iZWR0bHNfbmV0X2luaXQoICZzZXJ2ZXJfZmQgKTsKKyAgICBtYmVkdGxzX3NzbF9pbml0KCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoICZjb25mICk7CisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2FjZXJ0ICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMC4gTG9hZCBjZXJ0aWZpY2F0ZXMKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIHRoZSBDQSByb290IGNlcnRpZmljYXRlIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJmNhY2VydCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X2Nhc19wZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9jYXNfcGVtX2xlbiApOworICAgIGlmKCByZXQgPCAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rICglZCBza2lwcGVkKVxuIiwgcmV0ICk7CisKKyAgICAvKgorICAgICAqIDEuIFN0YXJ0IHRoZSBjb25uZWN0aW9uCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ29ubmVjdGluZyB0byB1ZHAvJXMvJXMuLi4iLCBTRVJWRVJfTkFNRSwgU0VSVkVSX1BPUlQgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfY29ubmVjdCggJnNlcnZlcl9mZCwgU0VSVkVSX0FERFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFUlZFUl9QT1JULCBNQkVEVExTX05FVF9QUk9UT19VRFAgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfY29ubmVjdCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDIuIFNldHVwIHN0dWZmCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2V0dGluZyB1cCB0aGUgRFRMUyBzdHJ1Y3R1cmUuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyggJmNvbmYsCisgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfSVNfQ0xJRU5ULAorICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSwKKyAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9QUkVTRVRfREVGQVVMVCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKiBPUFRJT05BTCBpcyB1c3VhbGx5IGEgYmFkIGNob2ljZSBmb3Igc2VjdXJpdHksIGJ1dCBtYWtlcyBpbnRlcm9wIGVhc2llcgorICAgICAqIGluIHRoaXMgc2ltcGxpZmllZCBleGFtcGxlLCBpbiB3aGljaCB0aGUgY2EgY2hhaW4gaXMgaGFyZGNvZGVkLgorICAgICAqIFByb2R1Y3Rpb24gY29kZSBzaG91bGQgc2V0IGEgcHJvcGVyIGNhIGNoYWluIGFuZCB1c2UgUkVRVUlSRUQuICovCisgICAgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZSggJmNvbmYsIE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4oICZjb25mLCAmY2FjZXJ0LCBOVUxMICk7CisgICAgbWJlZHRsc19zc2xfY29uZl9ybmcoICZjb25mLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBteV9kZWJ1Zywgc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXR1cCggJnNzbCwgJmNvbmYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2V0dXAgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXRfaG9zdG5hbWUoICZzc2wsIFNFUlZFUl9OQU1FICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oICZzc2wsICZzZXJ2ZXJfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19uZXRfc2VuZCwgbWJlZHRsc19uZXRfcmVjdiwgbWJlZHRsc19uZXRfcmVjdl90aW1lb3V0ICk7CisKKyAgICBtYmVkdGxzX3NzbF9zZXRfdGltZXJfY2IoICZzc2wsICZ0aW1lciwgbWJlZHRsc190aW1pbmdfc2V0X2RlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3RpbWluZ19nZXRfZGVsYXkgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDQuIEhhbmRzaGFrZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFBlcmZvcm1pbmcgdGhlIFNTTC9UTFMgaGFuZHNoYWtlLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBkbyByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2UoICZzc2wgKTsKKyAgICB3aGlsZSggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwKKyAgICAgICAgICAgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDUuIFZlcmlmeSB0aGUgc2VydmVyIGNlcnRpZmljYXRlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gVmVyaWZ5aW5nIHBlZXIgWC41MDkgY2VydGlmaWNhdGUuLi4iICk7CisKKyAgICAvKiBJbiByZWFsIGxpZmUsIHdlIHdvdWxkIGhhdmUgdXNlZCBNQkVEVExTX1NTTF9WRVJJRllfUkVRVUlSRUQgc28gdGhhdCB0aGUKKyAgICAgKiBoYW5kc2hha2Ugd291bGQgbm90IHN1Y2NlZWQgaWYgdGhlIHBlZXIncyBjZXJ0IGlzIGJhZC4gIEV2ZW4gaWYgd2UgdXNlZAorICAgICAqIE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTCwgd2Ugd291bGQgYmFpbCBvdXQgaGVyZSBpZiByZXQgIT0gMCAqLworICAgIGlmKCAoIGZsYWdzID0gbWJlZHRsc19zc2xfZ2V0X3ZlcmlmeV9yZXN1bHQoICZzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciB2cmZ5X2J1Zls1MTJdOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuIiApOworCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2luZm8oIHZyZnlfYnVmLCBzaXplb2YoIHZyZnlfYnVmICksICIgICEgIiwgZmxhZ3MgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCB2cmZ5X2J1ZiApOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDYuIFdyaXRlIHRoZSBlY2hvIHJlcXVlc3QKKyAgICAgKi8KK3NlbmRfcmVxdWVzdDoKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgPiBXcml0ZSB0byBzZXJ2ZXI6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBsZW4gPSBzaXplb2YoIE1FU1NBR0UgKSAtIDE7CisKKyAgICBkbyByZXQgPSBtYmVkdGxzX3NzbF93cml0ZSggJnNzbCwgKHVuc2lnbmVkIGNoYXIgKikgTUVTU0FHRSwgbGVuICk7CisgICAgd2hpbGUoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8CisgICAgICAgICAgIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApOworCisgICAgaWYoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfd3JpdGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBsZW4gPSByZXQ7CisgICAgbWJlZHRsc19wcmludGYoICIgJWQgYnl0ZXMgd3JpdHRlblxuXG4lc1xuXG4iLCBsZW4sIE1FU1NBR0UgKTsKKworICAgIC8qCisgICAgICogNy4gUmVhZCB0aGUgZWNobyByZXNwb25zZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICA8IFJlYWQgZnJvbSBzZXJ2ZXI6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBsZW4gPSBzaXplb2YoIGJ1ZiApIC0gMTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgZG8gcmV0ID0gbWJlZHRsc19zc2xfcmVhZCggJnNzbCwgYnVmLCBsZW4gKTsKKyAgICB3aGlsZSggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwKKyAgICAgICAgICAgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisKKyAgICBpZiggcmV0IDw9IDAgKQorICAgIHsKKyAgICAgICAgc3dpdGNoKCByZXQgKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9USU1FT1VUOgorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIHRpbWVvdXRcblxuIiApOworICAgICAgICAgICAgICAgIGlmKCByZXRyeV9sZWZ0LS0gPiAwICkKKyAgICAgICAgICAgICAgICAgICAgZ290byBzZW5kX3JlcXVlc3Q7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWToKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBjb25uZWN0aW9uIHdhcyBjbG9zZWQgZ3JhY2VmdWxseVxuIiApOworICAgICAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICAgICAgZ290byBjbG9zZV9ub3RpZnk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgbWJlZHRsc19zc2xfcmVhZCByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgbGVuID0gcmV0OworICAgIG1iZWR0bHNfcHJpbnRmKCAiICVkIGJ5dGVzIHJlYWRcblxuJXNcblxuIiwgbGVuLCBidWYgKTsKKworICAgIC8qCisgICAgICogOC4gRG9uZSwgY2xlYW5seSBjbG9zZSB0aGUgY29ubmVjdGlvbgorICAgICAqLworY2xvc2Vfbm90aWZ5OgorICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIENsb3NpbmcgdGhlIGNvbm5lY3Rpb24uLi4iICk7CisKKyAgICAvKiBObyBlcnJvciBjaGVja2luZywgdGhlIGNvbm5lY3Rpb24gbWlnaHQgYmUgY2xvc2VkIGFscmVhZHkgKi8KKyAgICBkbyByZXQgPSBtYmVkdGxzX3NzbF9jbG9zZV9ub3RpZnkoICZzc2wgKTsKKyAgICB3aGlsZSggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisgICAgcmV0ID0gMDsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIGRvbmVcbiIgKTsKKworICAgIC8qCisgICAgICogOS4gRmluYWwgY2xlYW4tdXBzIGFuZCBleGl0CisgICAgICovCitleGl0OgorCisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIGNoYXIgZXJyb3JfYnVmWzEwMF07CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgZXJyb3JfYnVmLCAxMDAgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJMYXN0IGVycm9yIHdhczogJWQgLSAlc1xuXG4iLCByZXQsIGVycm9yX2J1ZiApOworICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19uZXRfZnJlZSggJnNlcnZlcl9mZCApOworCisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2FjZXJ0ICk7CisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIC8qIFNoZWxsIGNhbiBub3QgaGFuZGxlIGxhcmdlIGV4aXQgbnVtYmVycyAtPiAxIGZvciBlcnJvcnMgKi8KKyAgICBpZiggcmV0IDwgMCApCisgICAgICAgIHJldCA9IDE7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NMSV9DICYmIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgJiYgTUJFRFRMU19ORVRfQyAmJgorICAgICAgICAgIE1CRURUTERfVElNSU5HX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYgTUJFRFRMU19DVFJfRFJCR19DICYmCisgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICYmIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19DRVJUU19DICYmCisgICAgICAgICAgTUJFRFRMU19QRU1fUEFSU0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9kdGxzX3NlcnZlci5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9kdGxzX3NlcnZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMGRkYTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL2R0bHNfc2VydmVyLmMKQEAgLTAsMCArMSw0MjUgQEAKKy8qCisgKiAgU2ltcGxlIERUTFMgc2VydmVyIGRlbW9uc3RyYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgICB0aW1lX3QKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpIHx8ICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9DT09LSUVfQykgfHwgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8ICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpIHx8ICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBwcmludGYoICJNQkVEVExTX1NTTF9TUlZfQyBhbmQvb3IgTUJFRFRMU19TU0xfUFJPVE9fRFRMUyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfU1NMX0NPT0tJRV9DIGFuZC9vciBNQkVEVExTX05FVF9DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19FTlRST1BZX0MgYW5kL29yIE1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyBhbmQvb3IgTUJFRFRMU19SU0FfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfQ0VSVFNfQyBhbmQvb3IgTUJFRFRMU19QRU1fUEFSU0VfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfVElNSU5HX0Mgbm90IGRlZmluZWQuXG4iICk7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2VydHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsX2Nvb2tpZS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbmV0X3NvY2tldHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9kZWJ1Zy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvdGltaW5nLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisjaW5jbHVkZSAibWJlZHRscy9zc2xfY2FjaGUuaCIKKyNlbmRpZgorCisjZGVmaW5lIFJFQURfVElNRU9VVF9NUyAxMDAwMCAgIC8qIDUgc2Vjb25kcyAqLworI2RlZmluZSBERUJVR19MRVZFTCAwCisKK3N0YXRpYyB2b2lkIG15X2RlYnVnKCB2b2lkICpjdHgsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgKQoreworICAgICgodm9pZCkgbGV2ZWwpOworCisgICAgbWJlZHRsc19mcHJpbnRmKCAoRklMRSAqKSBjdHgsICIlczolMDRkOiAlcyIsIGZpbGUsIGxpbmUsIHN0ciApOworICAgIGZmbHVzaCggIChGSUxFICopIGN0eCAgKTsKK30KKworaW50IG1haW4oIHZvaWQgKQoreworICAgIGludCByZXQsIGxlbjsKKyAgICBtYmVkdGxzX25ldF9jb250ZXh0IGxpc3Rlbl9mZCwgY2xpZW50X2ZkOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAiZHRsc19zZXJ2ZXIiOworICAgIHVuc2lnbmVkIGNoYXIgY2xpZW50X2lwWzE2XSA9IHsgMCB9OworICAgIHNpemVfdCBjbGlpcF9sZW47CisgICAgbWJlZHRsc19zc2xfY29va2llX2N0eCBjb29raWVfY3R4OworCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgbWJlZHRsc194NTA5X2NydCBzcnZjZXJ0OworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwa2V5OworICAgIG1iZWR0bHNfdGltaW5nX2RlbGF5X2NvbnRleHQgdGltZXI7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorICAgIG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgY2FjaGU7CisjZW5kaWYKKworICAgIG1iZWR0bHNfbmV0X2luaXQoICZsaXN0ZW5fZmQgKTsKKyAgICBtYmVkdGxzX25ldF9pbml0KCAmY2xpZW50X2ZkICk7CisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9pbml0KCAmY29va2llX2N0eCApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9pbml0KCAmY2FjaGUgKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJnNydmNlcnQgKTsKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwa2V5ICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19ERUJVR19DKQorICAgIG1iZWR0bHNfZGVidWdfc2V0X3RocmVzaG9sZCggREVCVUdfTEVWRUwgKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAxLiBMb2FkIHRoZSBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUgUlNBIGtleQorICAgICAqLworICAgIHByaW50ZiggIlxuICAuIExvYWRpbmcgdGhlIHNlcnZlciBjZXJ0LiBhbmQga2V5Li4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAvKgorICAgICAqIFRoaXMgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHVzZXMgZW1iZWRkZWQgdGVzdCBjZXJ0aWZpY2F0ZXMuCisgICAgICogSW5zdGVhZCwgeW91IG1heSB3YW50IHRvIHVzZSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoKSB0byByZWFkIHRoZQorICAgICAqIHNlcnZlciBhbmQgQ0EgY2VydGlmaWNhdGVzLCBhcyB3ZWxsIGFzIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSgpLgorICAgICAqLworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZzcnZjZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3Rfc3J2X2NydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X3Nydl9jcnRfbGVuICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIHByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZzcnZjZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2FzX3BlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X2Nhc19wZW1fbGVuICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIHByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9ICBtYmVkdGxzX3BrX3BhcnNlX2tleSggJnBrZXksIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9zcnZfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9zcnZfa2V5X2xlbiwgTlVMTCwgMCApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBwcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcGtfcGFyc2Vfa2V5IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDIuIFNldHVwIHRoZSAibGlzdGVuaW5nIiBVRFAgc29ja2V0CisgICAgICovCisgICAgcHJpbnRmKCAiICAuIEJpbmQgb24gdWRwLyovNDQzMyAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2JpbmQoICZsaXN0ZW5fZmQsIE5VTEwsICI0NDMzIiwgTUJFRFRMU19ORVRfUFJPVE9fVURQICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9iaW5kIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDMuIFNlZWQgdGhlIFJORworICAgICAqLworICAgIHByaW50ZiggIiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDQuIFNldHVwIHN0dWZmCisgICAgICovCisgICAgcHJpbnRmKCAiICAuIFNldHRpbmcgdXAgdGhlIERUTFMgZGF0YS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCAmY29uZiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfSVNfU0VSVkVSLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0sCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1BSRVNFVF9ERUZBVUxUICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCAmY29uZiwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgbXlfZGVidWcsIHN0ZG91dCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorICAgIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl9jYWNoZSggJmNvbmYsICZjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY2FjaGVfZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jYWNoZV9zZXQgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbiggJmNvbmYsIHNydmNlcnQubmV4dCwgTlVMTCApOworICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCggJmNvbmYsICZzcnZjZXJ0LCAmcGtleSApICkgIT0gMCApCisgICAgeworICAgICAgICBwcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2Nvb2tpZV9zZXR1cCggJmNvb2tpZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApICkgIT0gMCApCisgICAgeworICAgICAgICBwcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29va2llX3NldHVwIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfY29uZl9kdGxzX2Nvb2tpZXMoICZjb25mLCBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGUsIG1iZWR0bHNfc3NsX2Nvb2tpZV9jaGVjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29va2llX2N0eCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0dXAoICZzc2wsICZjb25mICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9zZXR1cCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX3NldF90aW1lcl9jYiggJnNzbCwgJnRpbWVyLCBtYmVkdGxzX3RpbWluZ19zZXRfZGVsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGltaW5nX2dldF9kZWxheSApOworCisgICAgcHJpbnRmKCAiIG9rXG4iICk7CisKK3Jlc2V0OgorI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIGVycm9yX2J1ZlsxMDBdOworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGVycm9yX2J1ZiwgMTAwICk7CisgICAgICAgIHByaW50ZigiTGFzdCBlcnJvciB3YXM6ICVkIC0gJXNcblxuIiwgcmV0LCBlcnJvcl9idWYgKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZjbGllbnRfZmQgKTsKKworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQoICZzc2wgKTsKKworICAgIC8qCisgICAgICogMy4gV2FpdCB1bnRpbCBhIGNsaWVudCBjb25uZWN0cworICAgICAqLworICAgIHByaW50ZiggIiAgLiBXYWl0aW5nIGZvciBhIHJlbW90ZSBjb25uZWN0aW9uIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfYWNjZXB0KCAmbGlzdGVuX2ZkLCAmY2xpZW50X2ZkLAorICAgICAgICAgICAgICAgICAgICBjbGllbnRfaXAsIHNpemVvZiggY2xpZW50X2lwICksICZjbGlpcF9sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2FjY2VwdCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qIEZvciBIZWxsb1ZlcmlmeVJlcXVlc3QgY29va2llcyAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NldF9jbGllbnRfdHJhbnNwb3J0X2lkKCAmc3NsLAorICAgICAgICAgICAgICAgICAgICBjbGllbnRfaXAsIGNsaWlwX2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBwcmludGYoICIgZmFpbGVkXG4gICEgIgorICAgICAgICAgICAgICAgICJtYmVkdGxzX3NzbF9zZXRfY2xpZW50X3RyYW5zcG9ydF9pZCgpIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oICZzc2wsICZjbGllbnRfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19uZXRfc2VuZCwgbWJlZHRsc19uZXRfcmVjdiwgbWJlZHRsc19uZXRfcmVjdl90aW1lb3V0ICk7CisKKyAgICBwcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogNS4gSGFuZHNoYWtlCisgICAgICovCisgICAgcHJpbnRmKCAiICAuIFBlcmZvcm1pbmcgdGhlIERUTFMgaGFuZHNoYWtlLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBkbyByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2UoICZzc2wgKTsKKyAgICB3aGlsZSggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwKKyAgICAgICAgICAgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisKKyAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCAiIGhlbGxvIHZlcmlmaWNhdGlvbiByZXF1ZXN0ZWRcbiIgKTsKKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgZ290byByZXNldDsKKyAgICB9CisgICAgZWxzZSBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgfQorCisgICAgcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDYuIFJlYWQgdGhlIGVjaG8gUmVxdWVzdAorICAgICAqLworICAgIHByaW50ZiggIiAgPCBSZWFkIGZyb20gY2xpZW50OiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbGVuID0gc2l6ZW9mKCBidWYgKSAtIDE7CisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKworICAgIGRvIHJldCA9IG1iZWR0bHNfc3NsX3JlYWQoICZzc2wsIGJ1ZiwgbGVuICk7CisgICAgd2hpbGUoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8CisgICAgICAgICAgIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApOworCisgICAgaWYoIHJldCA8PSAwICkKKyAgICB7CisgICAgICAgIHN3aXRjaCggcmV0ICkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfVElNRU9VVDoKKyAgICAgICAgICAgICAgICBwcmludGYoICIgdGltZW91dFxuXG4iICk7CisgICAgICAgICAgICAgICAgZ290byByZXNldDsKKworICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlk6CisgICAgICAgICAgICAgICAgcHJpbnRmKCAiIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBncmFjZWZ1bGx5XG4iICk7CisgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICBnb3RvIGNsb3NlX25vdGlmeTsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBwcmludGYoICIgbWJlZHRsc19zc2xfcmVhZCByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgICAgICAgICAgZ290byByZXNldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxlbiA9IHJldDsKKyAgICBwcmludGYoICIgJWQgYnl0ZXMgcmVhZFxuXG4lc1xuXG4iLCBsZW4sIGJ1ZiApOworCisgICAgLyoKKyAgICAgKiA3LiBXcml0ZSB0aGUgMjAwIFJlc3BvbnNlCisgICAgICovCisgICAgcHJpbnRmKCAiICA+IFdyaXRlIHRvIGNsaWVudDoiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGRvIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlKCAmc3NsLCBidWYsIGxlbiApOworICAgIHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fAorICAgICAgICAgICByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKworICAgIGlmKCByZXQgPCAwICkKKyAgICB7CisgICAgICAgIHByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGxlbiA9IHJldDsKKyAgICBwcmludGYoICIgJWQgYnl0ZXMgd3JpdHRlblxuXG4lc1xuXG4iLCBsZW4sIGJ1ZiApOworCisgICAgLyoKKyAgICAgKiA4LiBEb25lLCBjbGVhbmx5IGNsb3NlIHRoZSBjb25uZWN0aW9uCisgICAgICovCitjbG9zZV9ub3RpZnk6CisgICAgcHJpbnRmKCAiICAuIENsb3NpbmcgdGhlIGNvbm5lY3Rpb24uLi4iICk7CisKKyAgICAvKiBObyBlcnJvciBjaGVja2luZywgdGhlIGNvbm5lY3Rpb24gbWlnaHQgYmUgY2xvc2VkIGFscmVhZHkgKi8KKyAgICBkbyByZXQgPSBtYmVkdGxzX3NzbF9jbG9zZV9ub3RpZnkoICZzc2wgKTsKKyAgICB3aGlsZSggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisgICAgcmV0ID0gMDsKKworICAgIHByaW50ZiggIiBkb25lXG4iICk7CisKKyAgICBnb3RvIHJlc2V0OworCisgICAgLyoKKyAgICAgKiBGaW5hbCBjbGVhbi11cHMgYW5kIGV4aXQKKyAgICAgKi8KK2V4aXQ6CisKKyNpZmRlZiBNQkVEVExTX0VSUk9SX0MKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciBlcnJvcl9idWZbMTAwXTsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBlcnJvcl9idWYsIDEwMCApOworICAgICAgICBwcmludGYoICJMYXN0IGVycm9yIHdhczogJWQgLSAlc1xuXG4iLCByZXQsIGVycm9yX2J1ZiApOworICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19uZXRfZnJlZSggJmNsaWVudF9mZCApOworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZsaXN0ZW5fZmQgKTsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJnNydmNlcnQgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwa2V5ICk7CisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9mcmVlKCAmY29va2llX2N0eCApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9mcmVlKCAmY2FjaGUgKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBwcmludGYoICIgIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgLyogU2hlbGwgY2FuIG5vdCBoYW5kbGUgbGFyZ2UgZXhpdCBudW1iZXJzIC0+IDEgZm9yIGVycm9ycyAqLworICAgIGlmKCByZXQgPCAwICkKKyAgICAgICAgcmV0ID0gMTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX0MgJiYgTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAmJgorICAgICAgICAgIE1CRURUTFNfU1NMX0NPT0tJRV9DICYmIE1CRURUTFNfTkVUX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYKKyAgICAgICAgICBNQkVEVExTX0NUUl9EUkJHX0MgJiYgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICYmIE1CRURUTFNfUlNBX0MKKyAgICAgICAgICAmJiBNQkVEVExTX0NFUlRTX0MgJiYgTUJFRFRMU19QRU1fUEFSU0VfQyAmJiBNQkVEVExTX1RJTUlOR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL21pbmlfY2xpZW50LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL21pbmlfY2xpZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwNDU1ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvbWluaV9jbGllbnQuYwpAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqICBNaW5pbWFsIFNTTCBjbGllbnQsIHVzZWQgZm9yIG1lbW9yeSBtZWFzdXJlbWVudHMuCisgKiAgKG1lYW50IHRvIGJlIHVzZWQgd2l0aCBjb25maWctc3VpdGUtYi5oIG9yIGNvbmZpZy1jY20tcHNrLXRsczFfMi5oKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisvKgorICogV2UncmUgY3JlYXRpbmcgYW5kIGNvbm5lY3RpbmcgdGhlIHNvY2tldCAibWFudWFsbHkiIHJhdGhlciB0aGFuIHVzaW5nIHRoZQorICogTkVUIG1vZHVsZSwgaW4gb3JkZXIgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGdldGFkZHJpbmZvKCkgd2hpY2ggdGVuZHMgdG8KKyAqIGRvbWluYXRlIG1lbW9yeSB1c2FnZSBpbiBzbWFsbCBjb25maWd1cmF0aW9ucy4gRm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHksCisgKiBvbmx5IGEgVW5peCB2ZXJzaW9uIGlzIGltcGxlbWVudGVkLgorICoKKyAqIFdhcm5pbmc6IHdlIGFyZSBicmVha2luZyBzb21lIG9mIHRoZSBhYnRyYWN0aW9ucyBmcm9tIHRoZSBORVQgbGF5ZXIgaGVyZS4KKyAqIFRoaXMgaXMgbm90IGEgZ29vZCBleGFtcGxlIGZvciBnZW5lcmFsIHVzZS4gVGhpcyBwcm9ncmFtcyBoYXMgdGhlIHNwZWNpZmljCisgKiBnb2FsIG9mIG1pbmltaXppbmcgdXNlIG9mIHRoZSBsaWJjIGZ1bmN0aW9ucyBvbiBmdWxsLWJsb3duIE9TZXMuCisgKi8KKyNpZiBkZWZpbmVkKHVuaXgpIHx8IGRlZmluZWQoX191bml4X18pIHx8IGRlZmluZWQoX191bml4KSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUgVU5JWAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpIHx8IFwKKyAgICAhZGVmaW5lZChVTklYKQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBwcmludGYKKyNlbmRpZgorCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoICJNQkVEVExTX0NUUl9EUkJHX0MgYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19ORVRfQyBhbmQvb3IgTUJFRFRMU19TU0xfQ0xJX0MgYW5kL29yIFVOSVggIgorICAgICAgICAgICAgIm5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCisvKgorICogSGFyZGNvZGVkIHZhbHVlcyBmb3Igc2VydmVyIGhvc3QgYW5kIHBvcnQKKyAqLworI2RlZmluZSBQT1JUX0JFIDB4MTE1MSAgICAgIC8qIDQ0MzMgKi8KKyNkZWZpbmUgUE9SVF9MRSAweDUxMTEKKyNkZWZpbmUgQUREUl9CRSAweDdmMDAwMDAxICAvKiAxMjcuMC4wLjEgKi8KKyNkZWZpbmUgQUREUl9MRSAweDAxMDAwMDdmCisjZGVmaW5lIEhPU1ROQU1FICJsb2NhbGhvc3QiIC8qIGZvciBjZXJ0IHZlcmlmaWNhdGlvbiBpZiBlbmFibGVkICovCisKKyNkZWZpbmUgR0VUX1JFUVVFU1QgIkdFVCAvIEhUVFAvMS4wXHJcblxyXG4iCisKK2NvbnN0IGNoYXIgKnBlcnMgPSAibWluaV9jbGllbnQiOworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCitjb25zdCB1bnNpZ25lZCBjaGFyIHBza1tdID0geworICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZgorfTsKK2NvbnN0IGNoYXIgcHNrX2lkW10gPSAiQ2xpZW50X2lkZW50aXR5IjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisvKiBUaGlzIGlzIHRlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTIuY3J0LCBhIENBIHVzaW5nIEVDIHNlY3AzODRyMSAqLworY29uc3QgdW5zaWduZWQgY2hhciBjYV9jZXJ0W10gPSB7CisgICAgMHgzMCwgMHg4MiwgMHgwMiwgMHg1MiwgMHgzMCwgMHg4MiwgMHgwMSwgMHhkNywgMHhhMCwgMHgwMywgMHgwMiwgMHgwMSwKKyAgICAweDAyLCAweDAyLCAweDA5LCAweDAwLCAweGMxLCAweDQzLCAweGUyLCAweDdlLCAweDYyLCAweDQzLCAweGNjLCAweGU4LAorICAgIDB4MzAsIDB4MGEsIDB4MDYsIDB4MDgsIDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDQsIDB4MDMsIDB4MDIsCisgICAgMHgzMCwgMHgzZSwgMHgzMSwgMHgwYiwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywKKyAgICAweDAyLCAweDRlLCAweDRjLCAweDMxLCAweDExLCAweDMwLCAweDBmLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBhLAorICAgIDB4MTMsIDB4MDgsIDB4NTAsIDB4NmYsIDB4NmMsIDB4NjEsIDB4NzIsIDB4NTMsIDB4NTMsIDB4NGMsIDB4MzEsIDB4MWMsCisgICAgMHgzMCwgMHgxYSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywgMHgxMywgMHgxMywgMHg1MCwgMHg2ZiwgMHg2YywKKyAgICAweDYxLCAweDcyLCAweDczLCAweDczLCAweDZjLCAweDIwLCAweDU0LCAweDY1LCAweDczLCAweDc0LCAweDIwLCAweDQ1LAorICAgIDB4NDMsIDB4MjAsIDB4NDMsIDB4NDEsIDB4MzAsIDB4MWUsIDB4MTcsIDB4MGQsIDB4MzEsIDB4MzMsIDB4MzAsIDB4MzksCisgICAgMHgzMiwgMHgzNCwgMHgzMSwgMHgzNSwgMHgzNCwgMHgzOSwgMHgzNCwgMHgzOCwgMHg1YSwgMHgxNywgMHgwZCwgMHgzMiwKKyAgICAweDMzLCAweDMwLCAweDM5LCAweDMyLCAweDMyLCAweDMxLCAweDM1LCAweDM0LCAweDM5LCAweDM0LCAweDM4LCAweDVhLAorICAgIDB4MzAsIDB4M2UsIDB4MzEsIDB4MGIsIDB4MzAsIDB4MDksIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDYsIDB4MTMsCisgICAgMHgwMiwgMHg0ZSwgMHg0YywgMHgzMSwgMHgxMSwgMHgzMCwgMHgwZiwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwYSwKKyAgICAweDEzLCAweDA4LCAweDUwLCAweDZmLCAweDZjLCAweDYxLCAweDcyLCAweDUzLCAweDUzLCAweDRjLCAweDMxLCAweDFjLAorICAgIDB4MzAsIDB4MWEsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MDMsIDB4MTMsIDB4MTMsIDB4NTAsIDB4NmYsIDB4NmMsCisgICAgMHg2MSwgMHg3MiwgMHg3MywgMHg3MywgMHg2YywgMHgyMCwgMHg1NCwgMHg2NSwgMHg3MywgMHg3NCwgMHgyMCwgMHg0NSwKKyAgICAweDQzLCAweDIwLCAweDQzLCAweDQxLCAweDMwLCAweDc2LCAweDMwLCAweDEwLCAweDA2LCAweDA3LCAweDJhLCAweDg2LAorICAgIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDIsIDB4MDEsIDB4MDYsIDB4MDUsIDB4MmIsIDB4ODEsIDB4MDQsIDB4MDAsIDB4MjIsCisgICAgMHgwMywgMHg2MiwgMHgwMCwgMHgwNCwgMHhjMywgMHhkYSwgMHgyYiwgMHgzNCwgMHg0MSwgMHgzNywgMHg1OCwgMHgyZiwKKyAgICAweDg3LCAweDU2LCAweGZlLCAweGZjLCAweDg5LCAweGJhLCAweDI5LCAweDQzLCAweDRiLCAweDRlLCAweGUwLCAweDZlLAorICAgIDB4YzMsIDB4MGUsIDB4NTcsIDB4NTMsIDB4MzMsIDB4MzksIDB4NTgsIDB4ZDQsIDB4NTIsIDB4YjQsIDB4OTEsIDB4OTUsCisgICAgMHgzOSwgMHgwYiwgMHgyMywgMHhkZiwgMHg1ZiwgMHgxNywgMHgyNCwgMHg2MiwgMHg0OCwgMHhmYywgMHgxYSwgMHg5NSwKKyAgICAweDI5LCAweGNlLCAweDJjLCAweDJkLCAweDg3LCAweGMyLCAweDg4LCAweDUyLCAweDgwLCAweGFmLCAweGQ2LCAweDZhLAorICAgIDB4YWIsIDB4MjEsIDB4ZGQsIDB4YjgsIDB4ZDMsIDB4MWMsIDB4NmUsIDB4NTgsIDB4YjgsIDB4Y2EsIDB4ZTgsIDB4YjIsCisgICAgMHg2OSwgMHg4ZSwgMHhmMywgMHg0MSwgMHhhZCwgMHgyOSwgMHhjMywgMHhiNCwgMHg1ZiwgMHg3NSwgMHhhNywgMHg0NywKKyAgICAweDZmLCAweGQ1LCAweDE5LCAweDI5LCAweDU1LCAweDY5LCAweDlhLCAweDUzLCAweDNiLCAweDIwLCAweGI0LCAweDY2LAorICAgIDB4MTYsIDB4NjAsIDB4MzMsIDB4MWUsIDB4YTMsIDB4ODEsIDB4YTAsIDB4MzAsIDB4ODEsIDB4OWQsIDB4MzAsIDB4MWQsCisgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgxZCwgMHgwZSwgMHgwNCwgMHgxNiwgMHgwNCwgMHgxNCwgMHg5ZCwgMHg2ZCwgMHgyMCwKKyAgICAweDI0LCAweDQ5LCAweDAxLCAweDNmLCAweDJiLCAweGNiLCAweDc4LCAweGI1LCAweDE5LCAweGJjLCAweDdlLCAweDI0LAorICAgIDB4YzksIDB4ZGIsIDB4ZmIsIDB4MzYsIDB4N2MsIDB4MzAsIDB4NmUsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MWQsIDB4MjMsCisgICAgMHgwNCwgMHg2NywgMHgzMCwgMHg2NSwgMHg4MCwgMHgxNCwgMHg5ZCwgMHg2ZCwgMHgyMCwgMHgyNCwgMHg0OSwgMHgwMSwKKyAgICAweDNmLCAweDJiLCAweGNiLCAweDc4LCAweGI1LCAweDE5LCAweGJjLCAweDdlLCAweDI0LCAweGM5LCAweGRiLCAweGZiLAorICAgIDB4MzYsIDB4N2MsIDB4YTEsIDB4NDIsIDB4YTQsIDB4NDAsIDB4MzAsIDB4M2UsIDB4MzEsIDB4MGIsIDB4MzAsIDB4MDksCisgICAgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywgMHgwMiwgMHg0ZSwgMHg0YywgMHgzMSwgMHgxMSwgMHgzMCwKKyAgICAweDBmLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBhLCAweDEzLCAweDA4LCAweDUwLCAweDZmLCAweDZjLCAweDYxLAorICAgIDB4NzIsIDB4NTMsIDB4NTMsIDB4NGMsIDB4MzEsIDB4MWMsIDB4MzAsIDB4MWEsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsCisgICAgMHgwMywgMHgxMywgMHgxMywgMHg1MCwgMHg2ZiwgMHg2YywgMHg2MSwgMHg3MiwgMHg3MywgMHg3MywgMHg2YywgMHgyMCwKKyAgICAweDU0LCAweDY1LCAweDczLCAweDc0LCAweDIwLCAweDQ1LCAweDQzLCAweDIwLCAweDQzLCAweDQxLCAweDgyLCAweDA5LAorICAgIDB4MDAsIDB4YzEsIDB4NDMsIDB4ZTIsIDB4N2UsIDB4NjIsIDB4NDMsIDB4Y2MsIDB4ZTgsIDB4MzAsIDB4MGMsIDB4MDYsCisgICAgMHgwMywgMHg1NSwgMHgxZCwgMHgxMywgMHgwNCwgMHgwNSwgMHgzMCwgMHgwMywgMHgwMSwgMHgwMSwgMHhmZiwgMHgzMCwKKyAgICAweDBhLCAweDA2LCAweDA4LCAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAweDNkLCAweDA0LCAweDAzLCAweDAyLCAweDAzLAorICAgIDB4NjksIDB4MDAsIDB4MzAsIDB4NjYsIDB4MDIsIDB4MzEsIDB4MDAsIDB4YzMsIDB4YjQsIDB4NjIsIDB4NzMsIDB4NTYsCisgICAgMHgyOCwgMHg5NSwgMHgwMCwgMHg3ZCwgMHg3OCwgMHgxMiwgMHgyNiwgMHhkMiwgMHg3MSwgMHg3YiwgMHgxOSwgMHhmOCwKKyAgICAweDhhLCAweDk4LCAweDNlLCAweDkyLCAweGZlLCAweDMzLCAweDllLCAweGU0LCAweDc5LCAweGQyLCAweGZlLCAweDdhLAorICAgIDB4YjcsIDB4ODcsIDB4NzQsIDB4M2MsIDB4MmIsIDB4YjgsIDB4ZDcsIDB4NjksIDB4OTQsIDB4MGIsIDB4YTMsIDB4NjcsCisgICAgMHg3NywgMHhiOCwgMHhiMywgMHhiZSwgMHhkMSwgMHgzNiwgMHgzMiwgMHgwMiwgMHgzMSwgMHgwMCwgMHhmZCwgMHg2NywKKyAgICAweDljLCAweDk0LCAweDIzLCAweDY3LCAweGMwLCAweDU2LCAweGJhLCAweDRiLCAweDMzLCAweDE1LCAweDAwLCAweGM2LAorICAgIDB4ZTMsIDB4Y2MsIDB4MzEsIDB4MDgsIDB4MmMsIDB4OWMsIDB4OGIsIDB4ZGEsIDB4YTksIDB4NzUsIDB4MjMsIDB4MmYsCisgICAgMHhiOCwgMHgyOCwgMHhlNywgMHhmMiwgMHg5YywgMHgxNCwgMHgzYSwgMHg0MCwgMHgwMSwgMHg1YywgMHhhZiwgMHgwYywKKyAgICAweGIyLCAweGNmLCAweDc0LCAweDdmLCAweDMwLCAweDlmLCAweDA4LCAweDQzLCAweGFkLCAweDIwLAorfTsKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworZW51bSBleGl0X2NvZGVzCit7CisgICAgZXhpdF9vayA9IDAsCisgICAgY3RyX2RyYmdfc2VlZF9mYWlsZWQsCisgICAgc3NsX2NvbmZpZ19kZWZhdWx0c19mYWlsZWQsCisgICAgc3NsX3NldHVwX2ZhaWxlZCwKKyAgICBob3N0bmFtZV9mYWlsZWQsCisgICAgc29ja2V0X2ZhaWxlZCwKKyAgICBjb25uZWN0X2ZhaWxlZCwKKyAgICB4NTA5X2NydF9wYXJzZV9mYWlsZWQsCisgICAgc3NsX2hhbmRzaGFrZV9mYWlsZWQsCisgICAgc3NsX3dyaXRlX2ZhaWxlZCwKK307CisKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBpbnQgcmV0ID0gZXhpdF9vazsKKyAgICBtYmVkdGxzX25ldF9jb250ZXh0IHNlcnZlcl9mZDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBtYmVkdGxzX3g1MDlfY3J0IGNhOworI2VuZGlmCisKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgLyoKKyAgICAgKiAwLiBJbml0aWFsaXplIGFuZCBzZXR1cCBzdHVmZgorICAgICAqLworICAgIG1iZWR0bHNfbmV0X2luaXQoICZzZXJ2ZXJfZmQgKTsKKyAgICBtYmVkdGxzX3NzbF9pbml0KCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoICZjb25mICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2EgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsIHN0cmxlbiggcGVycyApICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSBjdHJfZHJiZ19zZWVkX2ZhaWxlZDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoICZjb25mLAorICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0lTX0NMSUVOVCwKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNLAorICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1BSRVNFVF9ERUZBVUxUICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSBzc2xfY29uZmlnX2RlZmF1bHRzX2ZhaWxlZDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCAmY29uZiwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgbWJlZHRsc19zc2xfY29uZl9wc2soICZjb25mLCBwc2ssIHNpemVvZiggcHNrICksCisgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcHNrX2lkLCBzaXplb2YoIHBza19pZCApIC0gMSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBpZiggbWJlZHRsc194NTA5X2NydF9wYXJzZV9kZXIoICZjYSwgY2FfY2VydCwgc2l6ZW9mKCBjYV9jZXJ0ICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IHg1MDlfY3J0X3BhcnNlX2ZhaWxlZDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4oICZjb25mLCAmY2EsIE5VTEwgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX2F1dGhtb2RlKCAmY29uZiwgTUJFRFRMU19TU0xfVkVSSUZZX1JFUVVJUkVEICk7CisjZW5kaWYKKworICAgIGlmKCBtYmVkdGxzX3NzbF9zZXR1cCggJnNzbCwgJmNvbmYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IHNzbF9zZXR1cF9mYWlsZWQ7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBpZiggbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lKCAmc3NsLCBIT1NUTkFNRSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gaG9zdG5hbWVfZmFpbGVkOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIDEuIFN0YXJ0IHRoZSBjb25uZWN0aW9uCisgICAgICovCisgICAgbWVtc2V0KCAmYWRkciwgMCwgc2l6ZW9mKCBhZGRyICkgKTsKKyAgICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisgICAgcmV0ID0gMTsgLyogZm9yIGVuZGlhbm5lc3MgZGV0ZWN0aW9uICovCisgICAgYWRkci5zaW5fcG9ydCA9ICooKGNoYXIgKikgJnJldCkgPT0gcmV0ID8gUE9SVF9MRSA6IFBPUlRfQkU7CisgICAgYWRkci5zaW5fYWRkci5zX2FkZHIgPSAqKChjaGFyICopICZyZXQpID09IHJldCA/IEFERFJfTEUgOiBBRERSX0JFOworICAgIHJldCA9IDA7CisKKyAgICBpZiggKCBzZXJ2ZXJfZmQuZmQgPSBzb2NrZXQoIEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwICkgKSA8IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gc29ja2V0X2ZhaWxlZDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBjb25uZWN0KCBzZXJ2ZXJfZmQuZmQsCisgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKCBhZGRyICkgKSA8IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gY29ubmVjdF9mYWlsZWQ7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3NzbF9zZXRfYmlvKCAmc3NsLCAmc2VydmVyX2ZkLCBtYmVkdGxzX25ldF9zZW5kLCBtYmVkdGxzX25ldF9yZWN2LCBOVUxMICk7CisKKyAgICBpZiggbWJlZHRsc19zc2xfaGFuZHNoYWtlKCAmc3NsICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSBzc2xfaGFuZHNoYWtlX2ZhaWxlZDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogMi4gV3JpdGUgdGhlIEdFVCByZXF1ZXN0IGFuZCBjbG9zZSB0aGUgY29ubmVjdGlvbgorICAgICAqLworICAgIGlmKCBtYmVkdGxzX3NzbF93cml0ZSggJnNzbCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgR0VUX1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBHRVRfUkVRVUVTVCApIC0gMSApIDw9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gc3NsX3dyaXRlX2ZhaWxlZDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSggJnNzbCApOworCitleGl0OgorICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZzZXJ2ZXJfZmQgKTsKKworICAgIG1iZWR0bHNfc3NsX2ZyZWUoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggJmNvbmYgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNhICk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX2NsaWVudDEuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX2NsaWVudDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTFmNzM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfY2xpZW50MS5jCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogIFNTTCBjbGllbnQgZGVtb25zdHJhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfdGltZSAgICAgICB0aW1lIAorI2RlZmluZSBtYmVkdGxzX3RpbWVfdCAgICAgdGltZV90CisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19DRVJUU19DKSB8fCAhZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKSB8fCAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1NTTF9UTFNfQyBhbmQvb3IgTUJFRFRMU19TU0xfQ0xJX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfTkVUX0MgYW5kL29yIE1CRURUTFNfUlNBX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3IgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICIKKyAgICAgICAgICAgIm5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZGVidWcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9jZXJ0cy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgU0VSVkVSX1BPUlQgIjQ0MzMiCisjZGVmaW5lIFNFUlZFUl9OQU1FICJsb2NhbGhvc3QiCisjZGVmaW5lIEdFVF9SRVFVRVNUICJHRVQgLyBIVFRQLzEuMFxyXG5cclxuIgorCisjZGVmaW5lIERFQlVHX0xFVkVMIDEKKworc3RhdGljIHZvaWQgbXlfZGVidWcoIHZvaWQgKmN0eCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciApCit7CisgICAgKCh2b2lkKSBsZXZlbCk7CisKKyAgICBtYmVkdGxzX2ZwcmludGYoIChGSUxFICopIGN0eCwgIiVzOiUwNGQ6ICVzIiwgZmlsZSwgbGluZSwgc3RyICk7CisgICAgZmZsdXNoKCAgKEZJTEUgKikgY3R4ICApOworfQorCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgaW50IHJldCwgbGVuOworICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgc2VydmVyX2ZkOworICAgIHVpbnQzMl90IGZsYWdzOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAic3NsX2NsaWVudDEiOworCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgbWJlZHRsc194NTA5X2NydCBjYWNlcnQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVCVUdfQykKKyAgICBtYmVkdGxzX2RlYnVnX3NldF90aHJlc2hvbGQoIERFQlVHX0xFVkVMICk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogMC4gSW5pdGlhbGl6ZSB0aGUgUk5HIGFuZCB0aGUgc2Vzc2lvbiBkYXRhCisgICAgICovCisgICAgbWJlZHRsc19uZXRfaW5pdCggJnNlcnZlcl9mZCApOworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjYWNlcnQgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAwLiBJbml0aWFsaXplIGNlcnRpZmljYXRlcworICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIENBIHJvb3QgY2VydGlmaWNhdGUgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmY2FjZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2FzX3BlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X2Nhc19wZW1fbGVuICk7CisgICAgaWYoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2sgKCVkIHNraXBwZWQpXG4iLCByZXQgKTsKKworICAgIC8qCisgICAgICogMS4gU3RhcnQgdGhlIGNvbm5lY3Rpb24KKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDb25uZWN0aW5nIHRvIHRjcC8lcy8lcy4uLiIsIFNFUlZFUl9OQU1FLCBTRVJWRVJfUE9SVCApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9jb25uZWN0KCAmc2VydmVyX2ZkLCBTRVJWRVJfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVkVSX1BPUlQsIE1CRURUTFNfTkVUX1BST1RPX1RDUCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9jb25uZWN0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMi4gU2V0dXAgc3R1ZmYKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBTZXR0aW5nIHVwIHRoZSBTU0wvVExTIHN0cnVjdHVyZS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCAmY29uZiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfSVNfQ0xJRU5ULAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9QUkVTRVRfREVGQVVMVCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyogT1BUSU9OQUwgaXMgbm90IG9wdGltYWwgZm9yIHNlY3VyaXR5LAorICAgICAqIGJ1dCBtYWtlcyBpbnRlcm9wIGVhc2llciBpbiB0aGlzIHNpbXBsaWZpZWQgZXhhbXBsZSAqLworICAgIG1iZWR0bHNfc3NsX2NvbmZfYXV0aG1vZGUoICZjb25mLCBNQkVEVExTX1NTTF9WRVJJRllfT1BUSU9OQUwgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluKCAmY29uZiwgJmNhY2VydCwgTlVMTCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCAmY29uZiwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgbXlfZGVidWcsIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0dXAoICZzc2wsICZjb25mICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldHVwIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lKCAmc3NsLCAibWJlZCBUTFMgU2VydmVyIDEiICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oICZzc2wsICZzZXJ2ZXJfZmQsIG1iZWR0bHNfbmV0X3NlbmQsIG1iZWR0bHNfbmV0X3JlY3YsIE5VTEwgKTsKKworICAgIC8qCisgICAgICogNC4gSGFuZHNoYWtlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gUGVyZm9ybWluZyB0aGUgU1NML1RMUyBoYW5kc2hha2UuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggJnNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgJiYgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDUuIFZlcmlmeSB0aGUgc2VydmVyIGNlcnRpZmljYXRlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gVmVyaWZ5aW5nIHBlZXIgWC41MDkgY2VydGlmaWNhdGUuLi4iICk7CisKKyAgICAvKiBJbiByZWFsIGxpZmUsIHdlIHByb2JhYmx5IHdhbnQgdG8gYmFpbCBvdXQgd2hlbiByZXQgIT0gMCAqLworICAgIGlmKCAoIGZsYWdzID0gbWJlZHRsc19zc2xfZ2V0X3ZlcmlmeV9yZXN1bHQoICZzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciB2cmZ5X2J1Zls1MTJdOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuIiApOworCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2luZm8oIHZyZnlfYnVmLCBzaXplb2YoIHZyZnlfYnVmICksICIgICEgIiwgZmxhZ3MgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCB2cmZ5X2J1ZiApOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDMuIFdyaXRlIHRoZSBHRVQgcmVxdWVzdAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICA+IFdyaXRlIHRvIHNlcnZlcjoiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGxlbiA9IHNwcmludGYoIChjaGFyICopIGJ1ZiwgR0VUX1JFUVVFU1QgKTsKKworICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlKCAmc3NsLCBidWYsIGxlbiApICkgPD0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgJiYgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfd3JpdGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsZW4gPSByZXQ7CisgICAgbWJlZHRsc19wcmludGYoICIgJWQgYnl0ZXMgd3JpdHRlblxuXG4lcyIsIGxlbiwgKGNoYXIgKikgYnVmICk7CisKKyAgICAvKgorICAgICAqIDcuIFJlYWQgdGhlIEhUVFAgcmVzcG9uc2UKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgPCBSZWFkIGZyb20gc2VydmVyOiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGxlbiA9IHNpemVvZiggYnVmICkgLSAxOworICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCAmc3NsLCBidWYsIGxlbiApOworCisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlkgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYoIHJldCA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3JlYWQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCByZXQgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG5cbkVPRlxuXG4iICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGxlbiA9IHJldDsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgJWQgYnl0ZXMgcmVhZFxuXG4lcyIsIGxlbiwgKGNoYXIgKikgYnVmICk7CisgICAgfQorICAgIHdoaWxlKCAxICk7CisKKyAgICBtYmVkdGxzX3NzbF9jbG9zZV9ub3RpZnkoICZzc2wgKTsKKworZXhpdDoKKworI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIGVycm9yX2J1ZlsxMDBdOworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGVycm9yX2J1ZiwgMTAwICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJMYXN0IGVycm9yIHdhczogJWQgLSAlc1xuXG4iLCByZXQsIGVycm9yX2J1ZiApOworICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19uZXRfZnJlZSggJnNlcnZlcl9mZCApOworCisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2FjZXJ0ICk7CisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX1NTTF9UTFNfQyAmJgorICAgICAgICAgIE1CRURUTFNfU1NMX0NMSV9DICYmIE1CRURUTFNfTkVUX0MgJiYgTUJFRFRMU19SU0FfQyAmJgorICAgICAgICAgIE1CRURUTFNfQ0VSVFNfQyAmJiBNQkVEVExTX1BFTV9QQVJTRV9DICYmIE1CRURUTFNfQ1RSX0RSQkdfQyAmJgorICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfY2xpZW50Mi5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfY2xpZW50Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDcxZTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9jbGllbnQyLmMKQEAgLTAsMCArMSwxNjczIEBACisvKgorICogIFNTTCBjbGllbnQgd2l0aCBjZXJ0aWZpY2F0ZSBhdXRoZW50aWNhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX3RpbWUgICAgICAgdGltZQorI2RlZmluZSBtYmVkdGxzX3RpbWVfdCAgICAgdGltZV90CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19TU0xfVExTX0MgYW5kL29yIE1CRURUTFNfU1NMX0NMSV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX05FVF9DIGFuZC9vciBNQkVEVExTX0NUUl9EUkJHX0MgYW5kL29yIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsLmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2VydHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9kZWJ1Zy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvdGltaW5nLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIERGTF9TRVJWRVJfTkFNRSAgICAgICAgICJsb2NhbGhvc3QiCisjZGVmaW5lIERGTF9TRVJWRVJfQUREUiAgICAgICAgIE5VTEwKKyNkZWZpbmUgREZMX1NFUlZFUl9QT1JUICAgICAgICAgIjQ0MzMiCisjZGVmaW5lIERGTF9SRVFVRVNUX1BBR0UgICAgICAgICIvIgorI2RlZmluZSBERkxfUkVRVUVTVF9TSVpFICAgICAgICAtMQorI2RlZmluZSBERkxfREVCVUdfTEVWRUwgICAgICAgICAwCisjZGVmaW5lIERGTF9OQklPICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgREZMX1JFQURfVElNRU9VVCAgICAgICAgMAorI2RlZmluZSBERkxfTUFYX1JFU0VORCAgICAgICAgICAwCisjZGVmaW5lIERGTF9DQV9GSUxFICAgICAgICAgICAgICIiCisjZGVmaW5lIERGTF9DQV9QQVRIICAgICAgICAgICAgICIiCisjZGVmaW5lIERGTF9DUlRfRklMRSAgICAgICAgICAgICIiCisjZGVmaW5lIERGTF9LRVlfRklMRSAgICAgICAgICAgICIiCisjZGVmaW5lIERGTF9QU0sgICAgICAgICAgICAgICAgICIiCisjZGVmaW5lIERGTF9QU0tfSURFTlRJVFkgICAgICAgICJDbGllbnRfaWRlbnRpdHkiCisjZGVmaW5lIERGTF9FQ0pQQUtFX1BXICAgICAgICAgIE5VTEwKKyNkZWZpbmUgREZMX0ZPUkNFX0NJUEhFUiAgICAgICAgMAorI2RlZmluZSBERkxfUkVORUdPVElBVElPTiAgICAgICBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RJU0FCTEVECisjZGVmaW5lIERGTF9BTExPV19MRUdBQ1kgICAgICAgIC0yCisjZGVmaW5lIERGTF9SRU5FR09USUFURSAgICAgICAgIDAKKyNkZWZpbmUgREZMX0VYQ0hBTkdFUyAgICAgICAgICAgMQorI2RlZmluZSBERkxfTUlOX1ZFUlNJT04gICAgICAgICAtMQorI2RlZmluZSBERkxfTUFYX1ZFUlNJT04gICAgICAgICAtMQorI2RlZmluZSBERkxfQVJDNCAgICAgICAgICAgICAgICAtMQorI2RlZmluZSBERkxfQVVUSF9NT0RFICAgICAgICAgICAtMQorI2RlZmluZSBERkxfTUZMX0NPREUgICAgICAgICAgICBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fTk9ORQorI2RlZmluZSBERkxfVFJVTkNfSE1BQyAgICAgICAgICAtMQorI2RlZmluZSBERkxfUkVDU1BMSVQgICAgICAgICAgICAtMQorI2RlZmluZSBERkxfREhNTEVOICAgICAgICAgICAgICAtMQorI2RlZmluZSBERkxfUkVDT05ORUNUICAgICAgICAgICAwCisjZGVmaW5lIERGTF9SRUNPX0RFTEFZICAgICAgICAgIDAKKyNkZWZpbmUgREZMX1JFQ09OTkVDVF9IQVJEICAgICAgMAorI2RlZmluZSBERkxfVElDS0VUUyAgICAgICAgICAgICBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFNfRU5BQkxFRAorI2RlZmluZSBERkxfQUxQTl9TVFJJTkcgICAgICAgICBOVUxMCisjZGVmaW5lIERGTF9UUkFOU1BPUlQgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0KKyNkZWZpbmUgREZMX0hTX1RPX01JTiAgICAgICAgICAgMAorI2RlZmluZSBERkxfSFNfVE9fTUFYICAgICAgICAgICAwCisjZGVmaW5lIERGTF9GQUxMQkFDSyAgICAgICAgICAgIC0xCisjZGVmaW5lIERGTF9FWFRFTkRFRF9NUyAgICAgICAgIC0xCisjZGVmaW5lIERGTF9FVE0gICAgICAgICAgICAgICAgIC0xCisKKyNkZWZpbmUgR0VUX1JFUVVFU1QgIkdFVCAlcyBIVFRQLzEuMFxyXG5FeHRyYS1oZWFkZXI6ICIKKyNkZWZpbmUgR0VUX1JFUVVFU1RfRU5EICJcclxuXHJcbiIKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNkZWZpbmUgVVNBR0VfSU8gXAorICAgICIgICAgY2FfZmlsZT0lJXMgICAgICAgICAgVGhlIHNpbmdsZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHRvcC1sZXZlbCBDQShzKSB5b3UgZnVsbHkgdHJ1c3RcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiIChwcmUtbG9hZGVkKVxuIiBcCisgICAgIiAgICBjYV9wYXRoPSUlcyAgICAgICAgICBUaGUgcGF0aCBjb250YWluaW5nIHRoZSB0b3AtbGV2ZWwgQ0EocykgeW91IGZ1bGx5IHRydXN0XG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJcIiAocHJlLWxvYWRlZCkgKG92ZXJyaWRlcyBjYV9maWxlKVxuIiBcCisgICAgIiAgICBjcnRfZmlsZT0lJXMgICAgICAgICBZb3VyIG93biBjZXJ0IGFuZCBjaGFpbiAoaW4gYm90dG9tIHRvIHRvcCBvcmRlciwgdG9wIG1heSBiZSBvbWl0dGVkKVxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKHByZS1sb2FkZWQpXG4iIFwKKyAgICAiICAgIGtleV9maWxlPSUlcyAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKHByZS1sb2FkZWQpXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9JTyBcCisgICAgIiAgICBObyBmaWxlIG9wZXJhdGlvbnMgYXZhaWxhYmxlIChNQkVEVExTX0ZTX0lPIG5vdCBkZWZpbmVkKVxuIgorI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKyNlbHNlCisjZGVmaW5lIFVTQUdFX0lPICIiCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKyNkZWZpbmUgVVNBR0VfUFNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgcHNrPSUlcyAgICAgICAgICAgICAgZGVmYXVsdDogXCJcIiAoaW4gaGV4LCB3aXRob3V0IDB4KVxuIiBcCisgICAgIiAgICBwc2tfaWRlbnRpdHk9JSVzICAgICBkZWZhdWx0OiBcIkNsaWVudF9pZGVudGl0eVwiXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9QU0sgIiIKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorI2RlZmluZSBVU0FHRV9USUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgdGlja2V0cz0lJWQgICAgICAgICAgZGVmYXVsdDogMSAoZW5hYmxlZClcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX1RJQ0tFVFMgIiIKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCisjZGVmaW5lIFVTQUdFX1RSVU5DX0hNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICB0cnVuY19obWFjPSUlZCAgICAgICBkZWZhdWx0OiBsaWJyYXJ5IGRlZmF1bHRcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX1RSVU5DX0hNQUMgIiIKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorI2RlZmluZSBVU0FHRV9NQVhfRlJBR19MRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIG1heF9mcmFnX2xlbj0lJWQgICAgIGRlZmF1bHQ6IDE2Mzg0ICh0bHMgZGVmYXVsdClcbiIgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IDUxMiwgMTAyNCwgMjA0OCwgNDA5NlxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfTUFYX0ZSQUdfTEVOICIiCisjZW5kaWYgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORykKKyNkZWZpbmUgVVNBR0VfUkVDU1BMSVQgXAorICAgICIgICAgcmVjc3BsaXQ9MC8xICAgICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiBvbilcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX1JFQ1NQTElUCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykKKyNkZWZpbmUgVVNBR0VfREhNTEVOIFwKKyAgICAiICAgIGRobWxlbj0lJWQgICAgICAgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IDEwMjQgYml0cylcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0RITUxFTgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCisjZGVmaW5lIFVTQUdFX0FMUE4gXAorICAgICIgICAgYWxwbj0lJXMgICAgICAgICAgICAgZGVmYXVsdDogXCJcIiAoZGlzYWJsZWQpXG4iICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlOiBzcGR5LzEsaHR0cC8xLjFcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0FMUE4gIiIKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisjZGVmaW5lIFVTQUdFX0RUTFMgXAorICAgICIgICAgZHRscz0lJWQgICAgICAgICAgICAgZGVmYXVsdDogMCAoVExTKVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGhzX3RpbWVvdXQ9JSVkLSUlZCAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiAxMDAwLTYwMDAwKVxuIiAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlIG9mIERUTFMgaGFuZHNoYWtlIHRpbWVvdXRzIGluIG1pbGxpc2Vjc1xuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfRFRMUyAiIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YpCisjZGVmaW5lIFVTQUdFX0ZBTExCQUNLIFwKKyAgICAiICAgIGZhbGxiYWNrPTAvMSAgICAgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdDogb2ZmKVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfRkFMTEJBQ0sgIiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorI2RlZmluZSBVU0FHRV9FTVMgXAorICAgICIgICAgZXh0ZW5kZWRfbXM9MC8xICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiBvbilcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0VNUyAiIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisjZGVmaW5lIFVTQUdFX0VUTSBcCisgICAgIiAgICBldG09MC8xICAgICAgICAgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IG9uKVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfRVRNICIiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyNkZWZpbmUgVVNBR0VfUkVORUdPIFwKKyAgICAiICAgIHJlbmVnb3RpYXRpb249JSVkICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgICAgIFwKKyAgICAiICAgIHJlbmVnb3RpYXRlPSUlZCAgICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfUkVORUdPICIiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorI2RlZmluZSBVU0FHRV9FQ0pQQUtFIFwKKyAgICAiICAgIGVjanBha2VfcHc9JSVzICAgICAgIGRlZmF1bHQ6IG5vbmUgKGRpc2FibGVkKVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfRUNKUEFLRSAiIgorI2VuZGlmCisKKyNkZWZpbmUgVVNBR0UgXAorICAgICJcbiB1c2FnZTogc3NsX2NsaWVudDIgcGFyYW09PD4uLi5cbiIgICAgICAgICAgICAgICAgICAgXAorICAgICJcbiBhY2NlcHRhYmxlIHBhcmFtZXRlcnM6XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgc2VydmVyX25hbWU9JSVzICAgICAgZGVmYXVsdDogbG9jYWxob3N0XG4iICAgICAgICAgXAorICAgICIgICAgc2VydmVyX2FkZHI9JSVzICAgICAgZGVmYXVsdDogZ2l2ZW4gYnkgbmFtZVxuIiAgICAgXAorICAgICIgICAgc2VydmVyX3BvcnQ9JSVkICAgICAgZGVmYXVsdDogNDQzM1xuIiAgICAgICAgICAgICAgXAorICAgICIgICAgcmVxdWVzdF9wYWdlPSUlcyAgICAgZGVmYXVsdDogXCIuXCJcbiIgICAgICAgICAgICAgXAorICAgICIgICAgcmVxdWVzdF9zaXplPSUlZCAgICAgZGVmYXVsdDogYWJvdXQgMzQgKGJhc2ljIHJlcXVlc3QpXG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgKG1pbmltdW06IDAsIG1heDogMTYzODQpXG4iIFwKKyAgICAiICAgIGRlYnVnX2xldmVsPSUlZCAgICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgICAgIFwKKyAgICAiICAgIG5iaW89JSVkICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGJsb2NraW5nIEkvTylcbiIgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogMSAobm9uLWJsb2NraW5nKSwgMiAoYWRkZWQgZGVsYXlzKVxuIiBcCisgICAgIiAgICByZWFkX3RpbWVvdXQ9JSVkICAgICBkZWZhdWx0OiAwIG1zIChubyB0aW1lb3V0KVxuIiAgICBcCisgICAgIiAgICBtYXhfcmVzZW5kPSUlZCAgICAgICBkZWZhdWx0OiAwIChubyByZXNlbmQgb24gdGltZW91dClcbiIgXAorICAgICJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVTQUdFX0RUTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgYXV0aF9tb2RlPSUlcyAgICAgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdDogbm9uZSlcbiIgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG5vbmUsIG9wdGlvbmFsLCByZXF1aXJlZFxuIiBcCisgICAgVVNBR0VfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfUFNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfRUNKUEFLRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBhbGxvd19sZWdhY3k9JSVkICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiBubylcbiIgICAgICBcCisgICAgVVNBR0VfUkVORUdPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBleGNoYW5nZXM9JSVkICAgICAgICBkZWZhdWx0OiAxXG4iICAgICAgICAgICAgICAgICBcCisgICAgIiAgICByZWNvbm5lY3Q9JSVkICAgICAgICBkZWZhdWx0OiAwIChkaXNhYmxlZClcbiIgICAgICBcCisgICAgIiAgICByZWNvX2RlbGF5PSUlZCAgICAgICBkZWZhdWx0OiAwIHNlY29uZHNcbiIgICAgICAgICBcCisgICAgIiAgICByZWNvbm5lY3RfaGFyZD0lJWQgICBkZWZhdWx0OiAwIChkaXNhYmxlZClcbiIgICAgICBcCisgICAgVVNBR0VfVElDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfTUFYX0ZSQUdfTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfVFJVTkNfSE1BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfQUxQTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfRkFMTEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfRU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfRVRNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfUkVDU1BMSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfREhNTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBhcmM0PSUlZCAgICAgICAgICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiAwKVxuIiBcCisgICAgIiAgICBtaW5fdmVyc2lvbj0lJXMgICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiB0bHMxKVxuIiAgICAgICBcCisgICAgIiAgICBtYXhfdmVyc2lvbj0lJXMgICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiB0bHMxXzIpXG4iICAgICBcCisgICAgIiAgICBmb3JjZV92ZXJzaW9uPSUlcyAgICBkZWZhdWx0OiBcIlwiIChub25lKVxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHNzbDMsIHRsczEsIHRsczFfMSwgdGxzMV8yLCBkdGxzMSwgZHRsczFfMlxuIiBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBmb3JjZV9jaXBoZXJzdWl0ZT08bmFtZT4gICAgZGVmYXVsdDogYWxsIGVuYWJsZWRcbiJcCisgICAgIiBhY2NlcHRhYmxlIGNpcGhlcnN1aXRlIG5hbWVzOlxuIgorCisvKgorICogZ2xvYmFsIG9wdGlvbnMKKyAqLworc3RydWN0IG9wdGlvbnMKK3sKKyAgICBjb25zdCBjaGFyICpzZXJ2ZXJfbmFtZTsgICAgLyogaG9zdG5hbWUgb2YgdGhlIHNlcnZlciAoY2xpZW50IG9ubHkpICAgICAqLworICAgIGNvbnN0IGNoYXIgKnNlcnZlcl9hZGRyOyAgICAvKiBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIgKGNsaWVudCBvbmx5KSAgICAgICovCisgICAgY29uc3QgY2hhciAqc2VydmVyX3BvcnQ7ICAgIC8qIHBvcnQgb24gd2hpY2ggdGhlIHNzbCBzZXJ2aWNlIHJ1bnMgICAgICAgKi8KKyAgICBpbnQgZGVidWdfbGV2ZWw7ICAgICAgICAgICAgLyogbGV2ZWwgb2YgZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCBuYmlvOyAgICAgICAgICAgICAgICAgICAvKiBzaG91bGQgSS9PIGJlIGJsb2NraW5nPyAgICAgICAgICAgICAgICAgICovCisgICAgdWludDMyX3QgcmVhZF90aW1lb3V0OyAgICAgIC8qIHRpbWVvdXQgb24gbWJlZHRsc19zc2xfcmVhZCgpIGluIG1pbGxpc2Vjb25kcyAgICAqLworICAgIGludCBtYXhfcmVzZW5kOyAgICAgICAgICAgICAvKiBEVExTIHRpbWVzIHRvIHJlc2VuZCBvbiByZWFkIHRpbWVvdXQgICAgICovCisgICAgY29uc3QgY2hhciAqcmVxdWVzdF9wYWdlOyAgIC8qIHBhZ2Ugb24gc2VydmVyIHRvIHJlcXVlc3QgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgcmVxdWVzdF9zaXplOyAgICAgICAgICAgLyogcGFkIHJlcXVlc3Qgd2l0aCBoZWFkZXIgdG8gcmVxdWVzdGVkIHNpemUgKi8KKyAgICBjb25zdCBjaGFyICpjYV9maWxlOyAgICAgICAgLyogdGhlIGZpbGUgd2l0aCB0aGUgQ0EgY2VydGlmaWNhdGUocykgICAgICAqLworICAgIGNvbnN0IGNoYXIgKmNhX3BhdGg7ICAgICAgICAvKiB0aGUgcGF0aCB3aXRoIHRoZSBDQSBjZXJ0aWZpY2F0ZShzKSByZXNpZGUgKi8KKyAgICBjb25zdCBjaGFyICpjcnRfZmlsZTsgICAgICAgLyogdGhlIGZpbGUgd2l0aCB0aGUgY2xpZW50IGNlcnRpZmljYXRlICAgICAqLworICAgIGNvbnN0IGNoYXIgKmtleV9maWxlOyAgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSBjbGllbnQga2V5ICAgICAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqcHNrOyAgICAgICAgICAgIC8qIHRoZSBwcmUtc2hhcmVkIGtleSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpwc2tfaWRlbnRpdHk7ICAgLyogdGhlIHByZS1zaGFyZWQga2V5IGlkZW50aXR5ICAgICAgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKmVjanBha2VfcHc7ICAgICAvKiB0aGUgRUMgSi1QQUtFIHBhc3N3b3JkICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IGZvcmNlX2NpcGhlcnN1aXRlWzJdOyAgIC8qIHByb3RvY29sL2NpcGhlcnN1aXRlIHRvIHVzZSwgb3IgYWxsICAgICAgKi8KKyAgICBpbnQgcmVuZWdvdGlhdGlvbjsgICAgICAgICAgLyogZW5hYmxlIC8gZGlzYWJsZSByZW5lZ290aWF0aW9uICAgICAgICAgICAqLworICAgIGludCBhbGxvd19sZWdhY3k7ICAgICAgICAgICAvKiBhbGxvdyBsZWdhY3kgcmVuZWdvdGlhdGlvbiAgICAgICAgICAgICAgICovCisgICAgaW50IHJlbmVnb3RpYXRlOyAgICAgICAgICAgIC8qIGF0dGVtcHQgcmVuZWdvdGlhdGlvbj8gICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgcmVuZWdvX2RlbGF5OyAgICAgICAgICAgLyogZGVsYXkgYmVmb3JlIGVuZm9yY2luZyByZW5lZ290aWF0aW9uICAgICAqLworICAgIGludCBleGNoYW5nZXM7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGF0YSBleGNoYW5nZXMgICAgICAgICAgICAgICAgICovCisgICAgaW50IG1pbl92ZXJzaW9uOyAgICAgICAgICAgIC8qIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBhY2NlcHRlZCAgICAgICAgKi8KKyAgICBpbnQgbWF4X3ZlcnNpb247ICAgICAgICAgICAgLyogbWF4aW11bSBwcm90b2NvbCB2ZXJzaW9uIGFjY2VwdGVkICAgICAgICAqLworICAgIGludCBhcmM0OyAgICAgICAgICAgICAgICAgICAvKiBmbGFnIGZvciBhcmM0IHN1aXRlcyBzdXBwb3J0ICAgICAgICAgICAgICovCisgICAgaW50IGF1dGhfbW9kZTsgICAgICAgICAgICAgIC8qIHZlcmlmeSBtb2RlIGZvciBjb25uZWN0aW9uICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG1mbF9jb2RlOyAgICAgLyogY29kZSBmb3IgbWF4aW11bSBmcmFnbWVudCBsZW5ndGggICAgICAgICAqLworICAgIGludCB0cnVuY19obWFjOyAgICAgICAgICAgICAvKiBuZWdvdGlhdGUgdHJ1bmNhdGVkIGhtYWMgb3Igbm90ICAgICAgICAgICovCisgICAgaW50IHJlY3NwbGl0OyAgICAgICAgICAgICAgIC8qIGVuYWJsZSByZWNvcmQgc3BsaXR0aW5nPyAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgZGhtbGVuOyAgICAgICAgICAgICAgICAgLyogbWluaW11bSBESE0gcGFyYW1zIGxlbiBpbiBiaXRzICAgICAgICAgICAqLworICAgIGludCByZWNvbm5lY3Q7ICAgICAgICAgICAgICAvKiBhdHRlbXB0IHRvIHJlc3VtZSBzZXNzaW9uICAgICAgICAgICAgICAgICovCisgICAgaW50IHJlY29fZGVsYXk7ICAgICAgICAgICAgIC8qIGRlbGF5IGluIHNlY29uZHMgYmVmb3JlIHJlc3VtaW5nIHNlc3Npb24gKi8KKyAgICBpbnQgcmVjb25uZWN0X2hhcmQ7ICAgICAgICAgLyogdW5leHBlY3RlZGx5IHJlY29ubmVjdCBmcm9tIHRoZSBzYW1lIHBvcnQgKi8KKyAgICBpbnQgdGlja2V0czsgICAgICAgICAgICAgICAgLyogZW5hYmxlIC8gZGlzYWJsZSBzZXNzaW9uIHRpY2tldHMgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKmFscG5fc3RyaW5nOyAgICAvKiBBTFBOIHN1cHBvcnRlZCBwcm90b2NvbHMgICAgICAgICAgICAgICAgICovCisgICAgaW50IHRyYW5zcG9ydDsgICAgICAgICAgICAgIC8qIFRMUyBvciBEVExTPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1aW50MzJfdCBoc190b19taW47ICAgICAgICAgLyogSW5pdGlhbCB2YWx1ZSBvZiBEVExTIGhhbmRzaGFrZSB0aW1lciAgICAqLworICAgIHVpbnQzMl90IGhzX3RvX21heDsgICAgICAgICAvKiBNYXggdmFsdWUgb2YgRFRMUyBoYW5kc2hha2UgdGltZXIgICAgICAgICovCisgICAgaW50IGZhbGxiYWNrOyAgICAgICAgICAgICAgIC8qIGlzIHRoaXMgYSBmYWxsYmFjayBjb25uZWN0aW9uPyAgICAgICAgICAgKi8KKyAgICBpbnQgZXh0ZW5kZWRfbXM7ICAgICAgICAgICAgLyogbmVnb3RpYXRlIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQ/ICAgICAgICAqLworICAgIGludCBldG07ICAgICAgICAgICAgICAgICAgICAvKiBuZWdvdGlhdGUgZW5jcnlwdCB0aGVuIG1hYz8gICAgICAgICAgICAgICovCit9IG9wdDsKKworc3RhdGljIHZvaWQgbXlfZGVidWcoIHZvaWQgKmN0eCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciApCit7CisgICAgY29uc3QgY2hhciAqcCwgKmJhc2VuYW1lOworCisgICAgLyogRXh0cmFjdCBiYXNlbmFtZSBmcm9tIGZpbGUgKi8KKyAgICBmb3IoIHAgPSBiYXNlbmFtZSA9IGZpbGU7ICpwICE9ICdcMCc7IHArKyApCisgICAgICAgIGlmKCAqcCA9PSAnLycgfHwgKnAgPT0gJ1xcJyApCisgICAgICAgICAgICBiYXNlbmFtZSA9IHAgKyAxOworCisgICAgbWJlZHRsc19mcHJpbnRmKCAoRklMRSAqKSBjdHgsICIlczolMDRkOiB8JWR8ICVzIiwgYmFzZW5hbWUsIGxpbmUsIGxldmVsLCBzdHIgKTsKKyAgICBmZmx1c2goICAoRklMRSAqKSBjdHggICk7Cit9CisKKy8qCisgKiBUZXN0IHJlY3Yvc2VuZCBmdW5jdGlvbnMgdGhhdCBtYWtlIHN1cmUgZWFjaCB0cnkgcmV0dXJucworICogV0FOVF9SRUFEL1dBTlRfV1JJVEUgYXQgbGVhc3Qgb25jZSBiZWZvcmUgc3VjZXNzZWRpbmcKKyAqLworc3RhdGljIGludCBteV9yZWN2KCB2b2lkICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgc3RhdGljIGludCBmaXJzdF90cnkgPSAxOworICAgIGludCByZXQ7CisKKyAgICBpZiggZmlyc3RfdHJ5ICkKKyAgICB7CisgICAgICAgIGZpcnN0X3RyeSA9IDA7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApOworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfbmV0X3JlY3YoIGN0eCwgYnVmLCBsZW4gKTsKKyAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKQorICAgICAgICBmaXJzdF90cnkgPSAxOyAvKiBOZXh0IGNhbGwgd2lsbCBiZSBhIG5ldyBvcGVyYXRpb24gKi8KKyAgICByZXR1cm4oIHJldCApOworfQorCitzdGF0aWMgaW50IG15X3NlbmQoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBzdGF0aWMgaW50IGZpcnN0X3RyeSA9IDE7CisgICAgaW50IHJldDsKKworICAgIGlmKCBmaXJzdF90cnkgKQorICAgIHsKKyAgICAgICAgZmlyc3RfdHJ5ID0gMDsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApOworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfbmV0X3NlbmQoIGN0eCwgYnVmLCBsZW4gKTsKKyAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgZmlyc3RfdHJ5ID0gMTsgLyogTmV4dCBjYWxsIHdpbGwgYmUgYSBuZXcgb3BlcmF0aW9uICovCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorLyoKKyAqIEVuYWJsZWQgaWYgZGVidWdfbGV2ZWwgPiAxIGluIGNvZGUgYmVsb3cKKyAqLworc3RhdGljIGludCBteV92ZXJpZnkoIHZvaWQgKmRhdGEsIG1iZWR0bHNfeDUwOV9jcnQgKmNydCwgaW50IGRlcHRoLCB1aW50MzJfdCAqZmxhZ3MgKQoreworICAgIGNoYXIgYnVmWzEwMjRdOworICAgICgodm9pZCkgZGF0YSk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuVmVyaWZ5IHJlcXVlc3RlZCBmb3IgKERlcHRoICVkKTpcbiIsIGRlcHRoICk7CisgICAgbWJlZHRsc194NTA5X2NydF9pbmZvKCBidWYsIHNpemVvZiggYnVmICkgLSAxLCAiIiwgY3J0ICk7CisgICAgbWJlZHRsc19wcmludGYoICIlcyIsIGJ1ZiApOworCisgICAgaWYgKCAoICpmbGFncyApID09IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgVGhpcyBjZXJ0aWZpY2F0ZSBoYXMgbm8gZmxhZ3NcbiIgKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9pbmZvKCBidWYsIHNpemVvZiggYnVmICksICIgICEgIiwgKmZsYWdzICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJXNcbiIsIGJ1ZiApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHJldCA9IDAsIGxlbiwgdGFpbF9sZW4sIGksIHdyaXR0ZW4sIGZyYWdzLCByZXRyeV9sZWZ0OworICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgc2VydmVyX2ZkOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiArIDFdOworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorICAgIHVuc2lnbmVkIGNoYXIgcHNrW01CRURUTFNfUFNLX01BWF9MRU5dOworICAgIHNpemVfdCBwc2tfbGVuID0gMDsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICBjb25zdCBjaGFyICphbHBuX2xpc3RbMTBdOworI2VuZGlmCisgICAgY29uc3QgY2hhciAqcGVycyA9ICJzc2xfY2xpZW50MiI7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uIHNhdmVkX3Nlc3Npb247CisjaWYgZGVmaW5lZChNQkVEVExTX1RJTUlOR19DKQorICAgIG1iZWR0bHNfdGltaW5nX2RlbGF5X2NvbnRleHQgdGltZXI7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICB1aW50MzJfdCBmbGFnczsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IGNhY2VydDsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IGNsaWNlcnQ7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrZXk7CisjZW5kaWYKKyAgICBjaGFyICpwLCAqcTsKKyAgICBjb25zdCBpbnQgKmxpc3Q7CisKKyAgICAvKgorICAgICAqIE1ha2Ugc3VyZSBtZW1vcnkgcmVmZXJlbmNlcyBhcmUgdmFsaWQuCisgICAgICovCisgICAgbWJlZHRsc19uZXRfaW5pdCggJnNlcnZlcl9mZCApOworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyAgICBtZW1zZXQoICZzYXZlZF9zZXNzaW9uLCAwLCBzaXplb2YoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKSApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2FjZXJ0ICk7CisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2xpY2VydCApOworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrZXkgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICBtZW1zZXQoICh2b2lkICogKSBhbHBuX2xpc3QsIDAsIHNpemVvZiggYWxwbl9saXN0ICkgKTsKKyNlbmRpZgorCisgICAgaWYoIGFyZ2MgPT0gMCApCisgICAgeworICAgIHVzYWdlOgorICAgICAgICBpZiggcmV0ID09IDAgKQorICAgICAgICAgICAgcmV0ID0gMTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKworICAgICAgICBsaXN0ID0gbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoKTsKKyAgICAgICAgd2hpbGUoICpsaXN0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoIiAlLTQycyIsIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lKCAqbGlzdCApICk7CisgICAgICAgICAgICBsaXN0Kys7CisgICAgICAgICAgICBpZiggISpsaXN0ICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCIgJXNcbiIsIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lKCAqbGlzdCApICk7CisgICAgICAgICAgICBsaXN0Kys7CisgICAgICAgIH0KKyAgICAgICAgbWJlZHRsc19wcmludGYoIlxuIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBvcHQuc2VydmVyX25hbWUgICAgICAgICA9IERGTF9TRVJWRVJfTkFNRTsKKyAgICBvcHQuc2VydmVyX2FkZHIgICAgICAgICA9IERGTF9TRVJWRVJfQUREUjsKKyAgICBvcHQuc2VydmVyX3BvcnQgICAgICAgICA9IERGTF9TRVJWRVJfUE9SVDsKKyAgICBvcHQuZGVidWdfbGV2ZWwgICAgICAgICA9IERGTF9ERUJVR19MRVZFTDsKKyAgICBvcHQubmJpbyAgICAgICAgICAgICAgICA9IERGTF9OQklPOworICAgIG9wdC5yZWFkX3RpbWVvdXQgICAgICAgID0gREZMX1JFQURfVElNRU9VVDsKKyAgICBvcHQubWF4X3Jlc2VuZCAgICAgICAgICA9IERGTF9NQVhfUkVTRU5EOworICAgIG9wdC5yZXF1ZXN0X3BhZ2UgICAgICAgID0gREZMX1JFUVVFU1RfUEFHRTsKKyAgICBvcHQucmVxdWVzdF9zaXplICAgICAgICA9IERGTF9SRVFVRVNUX1NJWkU7CisgICAgb3B0LmNhX2ZpbGUgICAgICAgICAgICAgPSBERkxfQ0FfRklMRTsKKyAgICBvcHQuY2FfcGF0aCAgICAgICAgICAgICA9IERGTF9DQV9QQVRIOworICAgIG9wdC5jcnRfZmlsZSAgICAgICAgICAgID0gREZMX0NSVF9GSUxFOworICAgIG9wdC5rZXlfZmlsZSAgICAgICAgICAgID0gREZMX0tFWV9GSUxFOworICAgIG9wdC5wc2sgICAgICAgICAgICAgICAgID0gREZMX1BTSzsKKyAgICBvcHQucHNrX2lkZW50aXR5ICAgICAgICA9IERGTF9QU0tfSURFTlRJVFk7CisgICAgb3B0LmVjanBha2VfcHcgICAgICAgICAgPSBERkxfRUNKUEFLRV9QVzsKKyAgICBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF09IERGTF9GT1JDRV9DSVBIRVI7CisgICAgb3B0LnJlbmVnb3RpYXRpb24gICAgICAgPSBERkxfUkVORUdPVElBVElPTjsKKyAgICBvcHQuYWxsb3dfbGVnYWN5ICAgICAgICA9IERGTF9BTExPV19MRUdBQ1k7CisgICAgb3B0LnJlbmVnb3RpYXRlICAgICAgICAgPSBERkxfUkVORUdPVElBVEU7CisgICAgb3B0LmV4Y2hhbmdlcyAgICAgICAgICAgPSBERkxfRVhDSEFOR0VTOworICAgIG9wdC5taW5fdmVyc2lvbiAgICAgICAgID0gREZMX01JTl9WRVJTSU9OOworICAgIG9wdC5tYXhfdmVyc2lvbiAgICAgICAgID0gREZMX01BWF9WRVJTSU9OOworICAgIG9wdC5hcmM0ICAgICAgICAgICAgICAgID0gREZMX0FSQzQ7CisgICAgb3B0LmF1dGhfbW9kZSAgICAgICAgICAgPSBERkxfQVVUSF9NT0RFOworICAgIG9wdC5tZmxfY29kZSAgICAgICAgICAgID0gREZMX01GTF9DT0RFOworICAgIG9wdC50cnVuY19obWFjICAgICAgICAgID0gREZMX1RSVU5DX0hNQUM7CisgICAgb3B0LnJlY3NwbGl0ICAgICAgICAgICAgPSBERkxfUkVDU1BMSVQ7CisgICAgb3B0LmRobWxlbiAgICAgICAgICAgICAgPSBERkxfREhNTEVOOworICAgIG9wdC5yZWNvbm5lY3QgICAgICAgICAgID0gREZMX1JFQ09OTkVDVDsKKyAgICBvcHQucmVjb19kZWxheSAgICAgICAgICA9IERGTF9SRUNPX0RFTEFZOworICAgIG9wdC5yZWNvbm5lY3RfaGFyZCAgICAgID0gREZMX1JFQ09OTkVDVF9IQVJEOworICAgIG9wdC50aWNrZXRzICAgICAgICAgICAgID0gREZMX1RJQ0tFVFM7CisgICAgb3B0LmFscG5fc3RyaW5nICAgICAgICAgPSBERkxfQUxQTl9TVFJJTkc7CisgICAgb3B0LnRyYW5zcG9ydCAgICAgICAgICAgPSBERkxfVFJBTlNQT1JUOworICAgIG9wdC5oc190b19taW4gICAgICAgICAgID0gREZMX0hTX1RPX01JTjsKKyAgICBvcHQuaHNfdG9fbWF4ICAgICAgICAgICA9IERGTF9IU19UT19NQVg7CisgICAgb3B0LmZhbGxiYWNrICAgICAgICAgICAgPSBERkxfRkFMTEJBQ0s7CisgICAgb3B0LmV4dGVuZGVkX21zICAgICAgICAgPSBERkxfRVhURU5ERURfTVM7CisgICAgb3B0LmV0bSAgICAgICAgICAgICAgICAgPSBERkxfRVRNOworCisgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgeworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGlmKCBzdHJjbXAoIHAsICJzZXJ2ZXJfbmFtZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5zZXJ2ZXJfbmFtZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInNlcnZlcl9hZGRyIiApID09IDAgKQorICAgICAgICAgICAgb3B0LnNlcnZlcl9hZGRyID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic2VydmVyX3BvcnQiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuc2VydmVyX3BvcnQgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJkdGxzIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgdCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCB0ID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC50cmFuc3BvcnQgPSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNOworICAgICAgICAgICAgZWxzZSBpZiggdCA9PSAxICkKKyAgICAgICAgICAgICAgICBvcHQudHJhbnNwb3J0ID0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZGVidWdfbGV2ZWwiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5kZWJ1Z19sZXZlbCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuZGVidWdfbGV2ZWwgPCAwIHx8IG9wdC5kZWJ1Z19sZXZlbCA+IDY1NTM1ICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm5iaW8iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5uYmlvID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5uYmlvIDwgMCB8fCBvcHQubmJpbyA+IDIgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicmVhZF90aW1lb3V0IiApID09IDAgKQorICAgICAgICAgICAgb3B0LnJlYWRfdGltZW91dCA9IGF0b2koIHEgKTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibWF4X3Jlc2VuZCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0Lm1heF9yZXNlbmQgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0Lm1heF9yZXNlbmQgPCAwICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInJlcXVlc3RfcGFnZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5yZXF1ZXN0X3BhZ2UgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyZXF1ZXN0X3NpemUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5yZXF1ZXN0X3NpemUgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnJlcXVlc3Rfc2l6ZSA8IDAgfHwgb3B0LnJlcXVlc3Rfc2l6ZSA+IE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJjYV9maWxlIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmNhX2ZpbGUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJjYV9wYXRoIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmNhX3BhdGggPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJjcnRfZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5jcnRfZmlsZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImtleV9maWxlIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmtleV9maWxlID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicHNrIiApID09IDAgKQorICAgICAgICAgICAgb3B0LnBzayA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInBza19pZGVudGl0eSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5wc2tfaWRlbnRpdHkgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJlY2pwYWtlX3B3IiApID09IDAgKQorICAgICAgICAgICAgb3B0LmVjanBha2VfcHcgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJmb3JjZV9jaXBoZXJzdWl0ZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdID0gbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX2lkKCBxICk7CisKKyAgICAgICAgICAgIGlmKCBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF0gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gMjsKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzFdID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyZW5lZ290aWF0aW9uIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQucmVuZWdvdGlhdGlvbiA9IChhdG9pKCBxICkpID8gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9FTkFCTEVEIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RJU0FCTEVEOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImFsbG93X2xlZ2FjeSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCBhdG9pKCBxICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgLTE6IG9wdC5hbGxvd19sZWdhY3kgPSBNQkVEVExTX1NTTF9MRUdBQ1lfQlJFQUtfSEFORFNIQUtFOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDA6ICBvcHQuYWxsb3dfbGVnYWN5ID0gTUJFRFRMU19TU0xfTEVHQUNZX05PX1JFTkVHT1RJQVRJT047IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTogIG9wdC5hbGxvd19sZWdhY3kgPSBNQkVEVExTX1NTTF9MRUdBQ1lfQUxMT1dfUkVORUdPVElBVElPTjsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogZ290byB1c2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyZW5lZ290aWF0ZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnJlbmVnb3RpYXRlID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5yZW5lZ290aWF0ZSA8IDAgfHwgb3B0LnJlbmVnb3RpYXRlID4gMSApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJleGNoYW5nZXMiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5leGNoYW5nZXMgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LmV4Y2hhbmdlcyA8IDEgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicmVjb25uZWN0IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQucmVjb25uZWN0ID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5yZWNvbm5lY3QgPCAwIHx8IG9wdC5yZWNvbm5lY3QgPiAyICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInJlY29fZGVsYXkiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5yZWNvX2RlbGF5ID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5yZWNvX2RlbGF5IDwgMCApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyZWNvbm5lY3RfaGFyZCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnJlY29ubmVjdF9oYXJkID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5yZWNvbm5lY3RfaGFyZCA8IDAgfHwgb3B0LnJlY29ubmVjdF9oYXJkID4gMSApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJ0aWNrZXRzIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQudGlja2V0cyA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQudGlja2V0cyA8IDAgfHwgb3B0LnRpY2tldHMgPiAyICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImFscG4iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5hbHBuX3N0cmluZyA9IHE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZmFsbGJhY2siICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCggYXRvaSggcSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6IG9wdC5mYWxsYmFjayA9IE1CRURUTFNfU1NMX0lTX05PVF9GQUxMQkFDSzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBvcHQuZmFsbGJhY2sgPSBNQkVEVExTX1NTTF9JU19GQUxMQkFDSzsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogZ290byB1c2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJleHRlbmRlZF9tcyIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCBhdG9pKCBxICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMDogb3B0LmV4dGVuZGVkX21zID0gTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRElTQUJMRUQ7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTogb3B0LmV4dGVuZGVkX21zID0gTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRU5BQkxFRDsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogZ290byB1c2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJldG0iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCggYXRvaSggcSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6IG9wdC5ldG0gPSBNQkVEVExTX1NTTF9FVE1fRElTQUJMRUQ7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTogb3B0LmV0bSA9IE1CRURUTFNfU1NMX0VUTV9FTkFCTEVEOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm1pbl92ZXJzaW9uIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAic3NsMyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzA7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInRsczFfMSIgKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICBzdHJjbXAoIHEsICJkdGxzMSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzI7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxXzIiICkgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgc3RyY21wKCBxLCAiZHRsczFfMiIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJtYXhfdmVyc2lvbiIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgInNzbDMiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxXzEiICkgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgc3RyY21wKCBxLCAiZHRsczEiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMV8yIiApID09IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgIHN0cmNtcCggcSwgImR0bHMxXzIiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiYXJjNCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCBhdG9pKCBxICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMDogICAgIG9wdC5hcmM0ID0gTUJFRFRMU19TU0xfQVJDNF9ESVNBQkxFRDsgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICBvcHQuYXJjNCA9IE1CRURUTFNfU1NMX0FSQzRfRU5BQkxFRDsgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgZ290byB1c2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJmb3JjZV92ZXJzaW9uIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAic3NsMyIgKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzA7CisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMSIgKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzE7CisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMV8xIiApID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjsKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxXzIiICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zOworICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImR0bHMxIiApID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjsKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzI7CisgICAgICAgICAgICAgICAgb3B0LnRyYW5zcG9ydCA9IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImR0bHMxXzIiICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zOworICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMzsKKyAgICAgICAgICAgICAgICBvcHQudHJhbnNwb3J0ID0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiYXV0aF9tb2RlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAibm9uZSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQuYXV0aF9tb2RlID0gTUJFRFRMU19TU0xfVkVSSUZZX05PTkU7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJvcHRpb25hbCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQuYXV0aF9tb2RlID0gTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAicmVxdWlyZWQiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0LmF1dGhfbW9kZSA9IE1CRURUTFNfU1NMX1ZFUklGWV9SRVFVSVJFRDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm1heF9mcmFnX2xlbiIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgIjUxMiIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWZsX2NvZGUgPSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fNTEyOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiMTAyNCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWZsX2NvZGUgPSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMTAyNDsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIjIwNDgiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1mbF9jb2RlID0gTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzIwNDg7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICI0MDk2IiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tZmxfY29kZSA9IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl80MDk2OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAidHJ1bmNfaG1hYyIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCBhdG9pKCBxICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMDogb3B0LnRydW5jX2htYWMgPSBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0RJU0FCTEVEOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IG9wdC50cnVuY19obWFjID0gTUJFRFRMU19TU0xfVFJVTkNfSE1BQ19FTkFCTEVEOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImhzX3RpbWVvdXQiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIHAgPSBzdHJjaHIoIHEsICctJyApICkgPT0gTlVMTCApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgICAgICpwKysgPSAnXDAnOworICAgICAgICAgICAgb3B0LmhzX3RvX21pbiA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIG9wdC5oc190b19tYXggPSBhdG9pKCBwICk7CisgICAgICAgICAgICBpZiggb3B0LmhzX3RvX21pbiA9PSAwIHx8IG9wdC5oc190b19tYXggPCBvcHQuaHNfdG9fbWluICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInJlY3NwbGl0IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQucmVjc3BsaXQgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnJlY3NwbGl0IDwgMCB8fCBvcHQucmVjc3BsaXQgPiAxICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImRobWxlbiIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmRobWxlbiA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuZGhtbGVuIDwgMCApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERUJVR19DKQorICAgIG1iZWR0bHNfZGVidWdfc2V0X3RocmVzaG9sZCggb3B0LmRlYnVnX2xldmVsICk7CisjZW5kaWYKKworICAgIGlmKCBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF0gPiAwICkKKyAgICB7CisgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm87CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8gPSBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV9mcm9tX2lkKCBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF0gKTsKKworICAgICAgICBpZiggb3B0Lm1heF92ZXJzaW9uICE9IC0xICYmCisgICAgICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5taW5fbWlub3JfdmVyID4gb3B0Lm1heF92ZXJzaW9uICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoImZvcmNlZCBjaXBoZXJzdWl0ZSBub3QgYWxsb3dlZCB3aXRoIHRoaXMgcHJvdG9jb2wgdmVyc2lvblxuIik7CisgICAgICAgICAgICByZXQgPSAyOworICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBpZiggb3B0Lm1pbl92ZXJzaW9uICE9IC0xICYmCisgICAgICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5tYXhfbWlub3JfdmVyIDwgb3B0Lm1pbl92ZXJzaW9uICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoImZvcmNlZCBjaXBoZXJzdWl0ZSBub3QgYWxsb3dlZCB3aXRoIHRoaXMgcHJvdG9jb2wgdmVyc2lvblxuIik7CisgICAgICAgICAgICByZXQgPSAyOworICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIElmIHRoZSBzZXJ2ZXIgc2VsZWN0cyBhIHZlcnNpb24gdGhhdCdzIG5vdCBzdXBwb3J0ZWQgYnkKKyAgICAgICAgICogdGhpcyBzdWl0ZSwgdGhlbiB0aGVyZSB3aWxsIGJlIG5vIGNvbW1vbiBjaXBoZXJzdWl0ZS4uLiAqLworICAgICAgICBpZiggb3B0Lm1heF92ZXJzaW9uID09IC0xIHx8CisgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPiBjaXBoZXJzdWl0ZV9pbmZvLT5tYXhfbWlub3JfdmVyICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gY2lwaGVyc3VpdGVfaW5mby0+bWF4X21pbm9yX3ZlcjsKKyAgICAgICAgfQorICAgICAgICBpZiggb3B0Lm1pbl92ZXJzaW9uIDwgY2lwaGVyc3VpdGVfaW5mby0+bWluX21pbm9yX3ZlciApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IGNpcGhlcnN1aXRlX2luZm8tPm1pbl9taW5vcl92ZXI7CisgICAgICAgICAgICAvKiBEVExTIHN0YXJ0cyB3aXRoIFRMUyAxLjEgKi8KKyAgICAgICAgICAgIGlmKCBvcHQudHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA8IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiApCisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yOworICAgICAgICB9CisKKyAgICAgICAgLyogRW5hYmxlIFJDNCBpZiBuZWVkZWQgYW5kIG5vdCBleHBsaWNpdGx5IGRpc2FibGVkICovCisgICAgICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5jaXBoZXIgPT0gTUJFRFRMU19DSVBIRVJfQVJDNF8xMjggKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggb3B0LmFyYzQgPT0gTUJFRFRMU19TU0xfQVJDNF9ESVNBQkxFRCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoImZvcmNlZCBSQzQgY2lwaGVyc3VpdGUgd2l0aCBSQzQgZGlzYWJsZWRcbiIpOworICAgICAgICAgICAgICAgIHJldCA9IDI7CisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3B0LmFyYzQgPSBNQkVEVExTX1NTTF9BUkM0X0VOQUJMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKyAgICAvKgorICAgICAqIFVuaGV4aWZ5IHRoZSBwcmUtc2hhcmVkIGtleSBpZiBhbnkgaXMgZ2l2ZW4KKyAgICAgKi8KKyAgICBpZiggc3RybGVuKCBvcHQucHNrICkgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjOworICAgICAgICBzaXplX3QgajsKKworICAgICAgICBpZiggc3RybGVuKCBvcHQucHNrICkgJSAyICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigicHJlLXNoYXJlZCBrZXkgbm90IHZhbGlkIGhleFxuIik7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBwc2tfbGVuID0gc3RybGVuKCBvcHQucHNrICkgLyAyOworCisgICAgICAgIGZvciggaiA9IDA7IGogPCBzdHJsZW4oIG9wdC5wc2sgKTsgaiArPSAyICkKKyAgICAgICAgeworICAgICAgICAgICAgYyA9IG9wdC5wc2tbal07CisgICAgICAgICAgICBpZiggYyA+PSAnMCcgJiYgYyA8PSAnOScgKQorICAgICAgICAgICAgICAgIGMgLT0gJzAnOworICAgICAgICAgICAgZWxzZSBpZiggYyA+PSAnYScgJiYgYyA8PSAnZicgKQorICAgICAgICAgICAgICAgIGMgLT0gJ2EnIC0gMTA7CisgICAgICAgICAgICBlbHNlIGlmKCBjID49ICdBJyAmJiBjIDw9ICdGJyApCisgICAgICAgICAgICAgICAgYyAtPSAnQScgLSAxMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigicHJlLXNoYXJlZCBrZXkgbm90IHZhbGlkIGhleFxuIik7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHNrWyBqIC8gMiBdID0gYyA8PCA0OworCisgICAgICAgICAgICBjID0gb3B0LnBza1tqICsgMV07CisgICAgICAgICAgICBpZiggYyA+PSAnMCcgJiYgYyA8PSAnOScgKQorICAgICAgICAgICAgICAgIGMgLT0gJzAnOworICAgICAgICAgICAgZWxzZSBpZiggYyA+PSAnYScgJiYgYyA8PSAnZicgKQorICAgICAgICAgICAgICAgIGMgLT0gJ2EnIC0gMTA7CisgICAgICAgICAgICBlbHNlIGlmKCBjID49ICdBJyAmJiBjIDw9ICdGJyApCisgICAgICAgICAgICAgICAgYyAtPSAnQScgLSAxMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigicHJlLXNoYXJlZCBrZXkgbm90IHZhbGlkIGhleFxuIik7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHNrWyBqIC8gMiBdIHw9IGM7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCisgICAgaWYoIG9wdC5hbHBuX3N0cmluZyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHAgPSAoY2hhciAqKSBvcHQuYWxwbl9zdHJpbmc7CisgICAgICAgIGkgPSAwOworCisgICAgICAgIC8qIExlYXZlIHJvb20gZm9yIGEgZmluYWwgTlVMTCBpbiBhbHBuX2xpc3QgKi8KKyAgICAgICAgd2hpbGUoIGkgPCAoaW50KSBzaXplb2YgYWxwbl9saXN0IC0gMSAmJiAqcCAhPSAnXDAnICkKKyAgICAgICAgeworICAgICAgICAgICAgYWxwbl9saXN0W2krK10gPSBwOworCisgICAgICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgc3RyaW5nIGFuZCBtb3ZlIG9uIHRvIG5leHQgb25lICovCisgICAgICAgICAgICB3aGlsZSggKnAgIT0gJywnICYmICpwICE9ICdcMCcgKQorICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIGlmKCAqcCA9PSAnLCcgKQorICAgICAgICAgICAgICAgICpwKysgPSAnXDAnOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0FMUE4gKi8KKworICAgIC8qCisgICAgICogMC4gSW5pdGlhbGl6ZSB0aGUgUk5HIGFuZCB0aGUgc2Vzc2lvbiBkYXRhCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAtMHgleFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIC8qCisgICAgICogMS4xLiBMb2FkIHRoZSB0cnVzdGVkIENBCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgQ0Egcm9vdCBjZXJ0aWZpY2F0ZSAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBpZiggc3RybGVuKCBvcHQuY2FfcGF0aCApICkKKyAgICAgICAgaWYoIHN0cmNtcCggb3B0LmNhX3BhdGgsICJub25lIiApID09IDAgKQorICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoKCAmY2FjZXJ0LCBvcHQuY2FfcGF0aCApOworICAgIGVsc2UgaWYoIHN0cmxlbiggb3B0LmNhX2ZpbGUgKSApCisgICAgICAgIGlmKCBzdHJjbXAoIG9wdC5jYV9maWxlLCAibm9uZSIgKSA9PSAwICkKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNhY2VydCwgb3B0LmNhX2ZpbGUgKTsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0VSVFNfQykKKyAgICAgICAgZm9yKCBpID0gMDsgbWJlZHRsc190ZXN0X2Nhc1tpXSAhPSBOVUxMOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmY2FjZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9jYXNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X2Nhc19sZW5baV0gKTsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbHNlCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19DRVJUU19DIG5vdCBkZWZpbmVkLiIpOworICAgIH0KKyNlbmRpZgorICAgIGlmKCByZXQgPCAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rICglZCBza2lwcGVkKVxuIiwgcmV0ICk7CisKKyAgICAvKgorICAgICAqIDEuMi4gTG9hZCBvd24gY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5CisgICAgICoKKyAgICAgKiAoY2FuIGJlIHNraXBwZWQgaWYgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGlzIG5vdCByZXF1aXJlZCkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIHRoZSBjbGllbnQgY2VydC4gYW5kIGtleS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgIGlmKCBzdHJsZW4oIG9wdC5jcnRfZmlsZSApICkKKyAgICAgICAgaWYoIHN0cmNtcCggb3B0LmNydF9maWxlLCAibm9uZSIgKSA9PSAwICkKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNsaWNlcnQsIG9wdC5jcnRfZmlsZSApOworICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DRVJUU19DKQorICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmY2xpY2VydCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X2NsaV9jcnQsCisgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X2NsaV9jcnRfbGVuICk7CisjZWxzZQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQ0VSVFNfQyBub3QgZGVmaW5lZC4iKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgIGlmKCBzdHJsZW4oIG9wdC5rZXlfZmlsZSApICkKKyAgICAgICAgaWYoIHN0cmNtcCggb3B0LmtleV9maWxlLCAibm9uZSIgKSA9PSAwICkKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJnBrZXksIG9wdC5rZXlfZmlsZSwgIiIgKTsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0VSVFNfQykKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXkoICZwa2V5LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2xpX2tleSwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfY2xpX2tleV9sZW4sIE5VTEwsIDAgKTsKKyNlbHNlCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19DRVJUU19DIG5vdCBkZWZpbmVkLiIpOworICAgIH0KKyNlbmRpZgorICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9rZXkgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworICAgIC8qCisgICAgICogMi4gU3RhcnQgdGhlIGNvbm5lY3Rpb24KKyAgICAgKi8KKyAgICBpZiggb3B0LnNlcnZlcl9hZGRyID09IE5VTEwpCisgICAgICAgIG9wdC5zZXJ2ZXJfYWRkciA9IG9wdC5zZXJ2ZXJfbmFtZTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIENvbm5lY3RpbmcgdG8gJXMvJXMvJXMuLi4iLAorICAgICAgICAgICAgb3B0LnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNID8gInRjcCIgOiAidWRwIiwKKyAgICAgICAgICAgIG9wdC5zZXJ2ZXJfYWRkciwgb3B0LnNlcnZlcl9wb3J0ICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2Nvbm5lY3QoICZzZXJ2ZXJfZmQsIG9wdC5zZXJ2ZXJfYWRkciwgb3B0LnNlcnZlcl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQudHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0gPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX05FVF9QUk9UT19UQ1AgOiBNQkVEVExTX05FVF9QUk9UT19VRFAgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfY29ubmVjdCByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggb3B0Lm5iaW8gPiAwICkKKyAgICAgICAgcmV0ID0gbWJlZHRsc19uZXRfc2V0X25vbmJsb2NrKCAmc2VydmVyX2ZkICk7CisgICAgZWxzZQorICAgICAgICByZXQgPSBtYmVkdGxzX25ldF9zZXRfYmxvY2soICZzZXJ2ZXJfZmQgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbmV0X3NldF8obm9uKWJsb2NrKCkgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMy4gU2V0dXAgc3R1ZmYKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBTZXR0aW5nIHVwIHRoZSBTU0wvVExTIHN0cnVjdHVyZS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCAmY29uZiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfSVNfQ0xJRU5ULAorICAgICAgICAgICAgICAgICAgICBvcHQudHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9QUkVTRVRfREVGQVVMVCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgaWYoIG9wdC5kZWJ1Z19sZXZlbCA+IDAgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX3ZlcmlmeSggJmNvbmYsIG15X3ZlcmlmeSwgTlVMTCApOworI2VuZGlmCisKKyAgICBpZiggb3B0LmF1dGhfbW9kZSAhPSBERkxfQVVUSF9NT0RFICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZSggJmNvbmYsIG9wdC5hdXRoX21vZGUgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggb3B0LmhzX3RvX21pbiAhPSBERkxfSFNfVE9fTUlOIHx8IG9wdC5oc190b19tYXggIT0gREZMX0hTX1RPX01BWCApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfaGFuZHNoYWtlX3RpbWVvdXQoICZjb25mLCBvcHQuaHNfdG9fbWluLCBvcHQuaHNfdG9fbWF4ICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfbWF4X2ZyYWdfbGVuKCAmY29uZiwgb3B0Lm1mbF9jb2RlICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZfbWF4X2ZyYWdfbGVuIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorICAgIGlmKCBvcHQudHJ1bmNfaG1hYyAhPSBERkxfVFJVTkNfSE1BQyApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfdHJ1bmNhdGVkX2htYWMoICZjb25mLCBvcHQudHJ1bmNfaG1hYyApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCisgICAgaWYoIG9wdC5leHRlbmRlZF9tcyAhPSBERkxfRVhURU5ERURfTVMgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2V4dGVuZGVkX21hc3Rlcl9zZWNyZXQoICZjb25mLCBvcHQuZXh0ZW5kZWRfbXMgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorICAgIGlmKCBvcHQuZXRtICE9IERGTF9FVE0gKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2VuY3J5cHRfdGhlbl9tYWMoICZjb25mLCBvcHQuZXRtICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcpCisgICAgaWYoIG9wdC5yZWNzcGxpdCAhPSBERkxfUkVDU1BMSVQgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2NiY19yZWNvcmRfc3BsaXR0aW5nKCAmY29uZiwgb3B0LnJlY3NwbGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0VOQUJMRUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRElTQUJMRUQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorICAgIGlmKCBvcHQuZGhtbGVuICE9IERGTF9ESE1MRU4gKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2RobV9taW5fYml0bGVuKCAmY29uZiwgb3B0LmRobWxlbiApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCisgICAgaWYoIG9wdC5hbHBuX3N0cmluZyAhPSBOVUxMICkKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9hbHBuX3Byb3RvY29scyggJmNvbmYsIGFscG5fbGlzdCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZfYWxwbl9wcm90b2NvbHMgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19zc2xfY29uZl9ybmcoICZjb25mLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBteV9kZWJ1Zywgc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX3NzbF9jb25mX3JlYWRfdGltZW91dCggJmNvbmYsIG9wdC5yZWFkX3RpbWVvdXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorICAgIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl90aWNrZXRzKCAmY29uZiwgb3B0LnRpY2tldHMgKTsKKyNlbmRpZgorCisgICAgaWYoIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVswXSAhPSBERkxfRk9SQ0VfQ0lQSEVSICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXMoICZjb25mLCBvcHQuZm9yY2VfY2lwaGVyc3VpdGUgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisgICAgaWYoIG9wdC5hcmM0ICE9IERGTF9BUkM0ICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9hcmM0X3N1cHBvcnQoICZjb25mLCBvcHQuYXJjNCApOworI2VuZGlmCisKKyAgICBpZiggb3B0LmFsbG93X2xlZ2FjeSAhPSBERkxfQUxMT1dfTEVHQUNZICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9sZWdhY3lfcmVuZWdvdGlhdGlvbiggJmNvbmYsIG9wdC5hbGxvd19sZWdhY3kgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgbWJlZHRsc19zc2xfY29uZl9yZW5lZ290aWF0aW9uKCAmY29uZiwgb3B0LnJlbmVnb3RpYXRpb24gKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgaWYoIHN0cmNtcCggb3B0LmNhX3BhdGgsICJub25lIiApICE9IDAgJiYKKyAgICAgICAgc3RyY21wKCBvcHQuY2FfZmlsZSwgIm5vbmUiICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluKCAmY29uZiwgJmNhY2VydCwgTlVMTCApOworICAgIH0KKyAgICBpZiggc3RyY21wKCBvcHQuY3J0X2ZpbGUsICJub25lIiApICE9IDAgJiYKKyAgICAgICAgc3RyY21wKCBvcHQua2V5X2ZpbGUsICJub25lIiApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCggJmNvbmYsICZjbGljZXJ0LCAmcGtleSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfcHNrKCAmY29uZiwgcHNrLCBwc2tfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBvcHQucHNrX2lkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIG9wdC5wc2tfaWRlbnRpdHkgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25mX3BzayByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyNlbmRpZgorCisgICAgaWYoIG9wdC5taW5fdmVyc2lvbiAhPSBERkxfTUlOX1ZFUlNJT04gKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX21pbl92ZXJzaW9uKCAmY29uZiwgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBvcHQubWluX3ZlcnNpb24gKTsKKworICAgIGlmKCBvcHQubWF4X3ZlcnNpb24gIT0gREZMX01BWF9WRVJTSU9OICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9tYXhfdmVyc2lvbiggJmNvbmYsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgb3B0Lm1heF92ZXJzaW9uICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YpCisgICAgaWYoIG9wdC5mYWxsYmFjayAhPSBERkxfRkFMTEJBQ0sgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2ZhbGxiYWNrKCAmY29uZiwgb3B0LmZhbGxiYWNrICk7CisjZW5kaWYKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9zZXR1cCByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXRfaG9zdG5hbWUoICZzc2wsIG9wdC5zZXJ2ZXJfbmFtZSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9zZXRfaG9zdG5hbWUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIGlmKCBvcHQuZWNqcGFrZV9wdyAhPSBERkxfRUNKUEFLRV9QVyApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXRfaHNfZWNqcGFrZV9wYXNzd29yZCggJnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG9wdC5lY2pwYWtlX3B3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggb3B0LmVjanBha2VfcHcgKSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldF9oc19lY2pwYWtlX3Bhc3N3b3JkIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiggb3B0Lm5iaW8gPT0gMiApCisgICAgICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oICZzc2wsICZzZXJ2ZXJfZmQsIG15X3NlbmQsIG15X3JlY3YsIE5VTEwgKTsKKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oICZzc2wsICZzZXJ2ZXJfZmQsIG1iZWR0bHNfbmV0X3NlbmQsIG1iZWR0bHNfbmV0X3JlY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5uYmlvID09IDAgPyBtYmVkdGxzX25ldF9yZWN2X3RpbWVvdXQgOiBOVUxMICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisgICAgbWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCAmc3NsLCAmdGltZXIsIG1iZWR0bHNfdGltaW5nX3NldF9kZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190aW1pbmdfZ2V0X2RlbGF5ICk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDQuIEhhbmRzaGFrZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFBlcmZvcm1pbmcgdGhlIFNTTC9UTFMgaGFuZHNoYWtlLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICB3aGlsZSggKCByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2UoICZzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCAtMHgleFxuIiwgLXJldCApOworICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoCisgICAgICAgICAgICAgICAgICAgICIgICAgVW5hYmxlIHRvIHZlcmlmeSB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJFaXRoZXIgaXQgaXMgaW52YWxpZCxcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICBvciB5b3UgZGlkbid0IHNldCBjYV9maWxlIG9yIGNhX3BhdGggIgorICAgICAgICAgICAgICAgICAgICAgICAgInRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlLlxuIgorICAgICAgICAgICAgICAgICAgICAiICAgIEFsdGVybmF0aXZlbHksIHlvdSBtYXkgd2FudCB0byB1c2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgImF1dGhfbW9kZT1vcHRpb25hbCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiIgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAgIFsgUHJvdG9jb2wgaXMgJXMgXVxuICAgIFsgQ2lwaGVyc3VpdGUgaXMgJXMgXVxuIiwKKyAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF92ZXJzaW9uKCAmc3NsICksIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZSggJnNzbCApICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9nZXRfcmVjb3JkX2V4cGFuc2lvbiggJnNzbCApICkgPj0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgIFsgUmVjb3JkIGV4cGFuc2lvbiBpcyAlZCBdXG4iLCByZXQgKTsKKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgIFsgUmVjb3JkIGV4cGFuc2lvbiBpcyB1bmtub3duIChjb21wcmVzc2lvbikgXVxuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgIFsgTWF4aW11bSBmcmFnbWVudCBsZW5ndGggaXMgJXUgXVxuIiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgbWJlZHRsc19zc2xfZ2V0X21heF9mcmFnX2xlbiggJnNzbCApICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICBpZiggb3B0LmFscG5fc3RyaW5nICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqYWxwID0gbWJlZHRsc19zc2xfZ2V0X2FscG5fcHJvdG9jb2woICZzc2wgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgWyBBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBpcyAlcyBdXG4iLAorICAgICAgICAgICAgICAgIGFscCA/IGFscCA6ICIobm9uZSkiICk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiggb3B0LnJlY29ubmVjdCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCIgIC4gU2F2aW5nIHNlc3Npb24gZm9yIHJldXNlLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2dldF9zZXNzaW9uKCAmc3NsLCAmc2F2ZWRfc2Vzc2lvbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2dldF9zZXNzaW9uIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgLyoKKyAgICAgKiA1LiBWZXJpZnkgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFZlcmlmeWluZyBwZWVyIFguNTA5IGNlcnRpZmljYXRlLi4uIiApOworCisgICAgaWYoICggZmxhZ3MgPSBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCggJnNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIHZyZnlfYnVmWzUxMl07CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4iICk7CisKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfaW5mbyggdnJmeV9idWYsIHNpemVvZiggdnJmeV9idWYgKSwgIiAgISAiLCBmbGFncyApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJXNcbiIsIHZyZnlfYnVmICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIGlmKCBtYmVkdGxzX3NzbF9nZXRfcGVlcl9jZXJ0KCAmc3NsICkgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBQZWVyIGNlcnRpZmljYXRlIGluZm9ybWF0aW9uICAgIC4uLlxuIiApOworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2luZm8oIChjaGFyICopIGJ1Ziwgc2l6ZW9mKCBidWYgKSAtIDEsICIgICAgICAiLAorICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9nZXRfcGVlcl9jZXJ0KCAmc3NsICkgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIlc1xuIiwgYnVmICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGlmKCBvcHQucmVuZWdvdGlhdGUgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogUGVyZm9ybSByZW5lZ290aWF0aW9uICh0aGlzIG11c3QgYmUgZG9uZSB3aGVuIHRoZSBzZXJ2ZXIgaXMgd2FpdGluZworICAgICAgICAgKiBmb3IgaW5wdXQgZnJvbSBvdXIgc2lkZSkuCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBQZXJmb3JtaW5nIHJlbmVnb3RpYXRpb24uLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisgICAgICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX3JlbmVnb3RpYXRlKCAmc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmCisgICAgICAgICAgICAgICAgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9yZW5lZ290aWF0ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworCisgICAgLyoKKyAgICAgKiA2LiBXcml0ZSB0aGUgR0VUIHJlcXVlc3QKKyAgICAgKi8KKyAgICByZXRyeV9sZWZ0ID0gb3B0Lm1heF9yZXNlbmQ7CitzZW5kX3JlcXVlc3Q6CisgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgdG8gc2VydmVyOiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbGVuID0gbWJlZHRsc19zbnByaW50ZiggKGNoYXIgKikgYnVmLCBzaXplb2YoYnVmKSAtIDEsIEdFVF9SRVFVRVNULAorICAgICAgICAgICAgICAgICAgICBvcHQucmVxdWVzdF9wYWdlICk7CisgICAgdGFpbF9sZW4gPSAoaW50KSBzdHJsZW4oIEdFVF9SRVFVRVNUX0VORCApOworCisgICAgLyogQWRkIHBhZGRpbmcgdG8gR0VUIHJlcXVlc3QgdG8gcmVhY2ggb3B0LnJlcXVlc3Rfc2l6ZSBpbiBsZW5ndGggKi8KKyAgICBpZiggb3B0LnJlcXVlc3Rfc2l6ZSAhPSBERkxfUkVRVUVTVF9TSVpFICYmCisgICAgICAgIGxlbiArIHRhaWxfbGVuIDwgb3B0LnJlcXVlc3Rfc2l6ZSApCisgICAgeworICAgICAgICBtZW1zZXQoIGJ1ZiArIGxlbiwgJ0EnLCBvcHQucmVxdWVzdF9zaXplIC0gbGVuIC0gdGFpbF9sZW4gKTsKKyAgICAgICAgbGVuICs9IG9wdC5yZXF1ZXN0X3NpemUgLSBsZW4gLSB0YWlsX2xlbjsKKyAgICB9CisKKyAgICBzdHJuY3B5KCAoY2hhciAqKSBidWYgKyBsZW4sIEdFVF9SRVFVRVNUX0VORCwgc2l6ZW9mKGJ1ZikgLSBsZW4gLSAxICk7CisgICAgbGVuICs9IHRhaWxfbGVuOworCisgICAgLyogVHJ1bmNhdGUgaWYgcmVxdWVzdCBzaXplIGlzIHNtYWxsZXIgdGhhbiB0aGUgIm5hdHVyYWwiIHNpemUgKi8KKyAgICBpZiggb3B0LnJlcXVlc3Rfc2l6ZSAhPSBERkxfUkVRVUVTVF9TSVpFICYmCisgICAgICAgIGxlbiA+IG9wdC5yZXF1ZXN0X3NpemUgKQorICAgIHsKKyAgICAgICAgbGVuID0gb3B0LnJlcXVlc3Rfc2l6ZTsKKworICAgICAgICAvKiBTdGlsbCBlbmQgd2l0aCBcclxuIHVubGVzcyB0aGF0J3MgcmVhbGx5IG5vdCBwb3NzaWJsZSAqLworICAgICAgICBpZiggbGVuID49IDIgKSBidWZbbGVuIC0gMl0gPSAnXHInOworICAgICAgICBpZiggbGVuID49IDEgKSBidWZbbGVuIC0gMV0gPSAnXG4nOworICAgIH0KKworICAgIGlmKCBvcHQudHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0gKQorICAgIHsKKyAgICAgICAgZm9yKCB3cml0dGVuID0gMCwgZnJhZ3MgPSAwOyB3cml0dGVuIDwgbGVuOyB3cml0dGVuICs9IHJldCwgZnJhZ3MrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlKCAmc3NsLCBidWYgKyB3cml0dGVuLCBsZW4gLSB3cml0dGVuICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPD0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmCisgICAgICAgICAgICAgICAgICAgIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAvKiBOb3Qgc3RyZWFtLCBzbyBkYXRhZ3JhbSAqLworICAgIHsKKyAgICAgICAgZG8gcmV0ID0gbWJlZHRsc19zc2xfd3JpdGUoICZzc2wsIGJ1ZiwgbGVuICk7CisgICAgICAgIHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fAorICAgICAgICAgICAgICAgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisKKyAgICAgICAgaWYoIHJldCA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGZyYWdzID0gMTsKKyAgICAgICAgd3JpdHRlbiA9IHJldDsKKyAgICB9CisKKyAgICBidWZbd3JpdHRlbl0gPSAnXDAnOworICAgIG1iZWR0bHNfcHJpbnRmKCAiICVkIGJ5dGVzIHdyaXR0ZW4gaW4gJWQgZnJhZ21lbnRzXG5cbiVzXG4iLCB3cml0dGVuLCBmcmFncywgKGNoYXIgKikgYnVmICk7CisKKyAgICAvKgorICAgICAqIDcuIFJlYWQgdGhlIEhUVFAgcmVzcG9uc2UKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgPCBSZWFkIGZyb20gc2VydmVyOiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgLyoKKyAgICAgKiBUTFMgYW5kIERUTFMgbmVlZCBkaWZmZXJlbnQgcmVhZGluZyBzdHlsZXMgKHN0cmVhbSB2cyBkYXRhZ3JhbSkKKyAgICAgKi8KKyAgICBpZiggb3B0LnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNICkKKyAgICB7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbiA9IHNpemVvZiggYnVmICkgLSAxOworICAgICAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3JlYWQoICZzc2wsIGJ1ZiwgbGVuICk7CisKKyAgICAgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fAorICAgICAgICAgICAgICAgIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmKCByZXQgPD0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoKCByZXQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBjb25uZWN0aW9uIHdhcyBjbG9zZWQgZ3JhY2VmdWxseVxuIiApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gY2xvc2Vfbm90aWZ5OworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGNvbm5lY3Rpb24gd2FzIHJlc2V0IGJ5IHBlZXJcbiIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlY29ubmVjdDsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgbWJlZHRsc19zc2xfcmVhZCByZXR1cm5lZCAtMHgleFxuIiwgLXJldCApOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGVuID0gcmV0OworICAgICAgICAgICAgYnVmW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgJWQgYnl0ZXMgcmVhZFxuXG4lcyIsIGxlbiwgKGNoYXIgKikgYnVmICk7CisKKyAgICAgICAgICAgIC8qIEVuZCBvZiBtZXNzYWdlIHNob3VsZCBiZSBkZXRlY3RlZCBhY2NvcmRpbmcgdG8gdGhlIHN5bnRheCBvZiB0aGUKKyAgICAgICAgICAgICAqIGFwcGxpY2F0aW9uIHByb3RvY29sIChlZyBIVFRQKSwganVzdCB1c2UgYSBkdW1teSB0ZXN0IGhlcmUuICovCisgICAgICAgICAgICBpZiggcmV0ID4gMCAmJiBidWZbbGVuLTFdID09ICdcbicgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUoIDEgKTsKKyAgICB9CisgICAgZWxzZSAvKiBOb3Qgc3RyZWFtLCBzbyBkYXRhZ3JhbSAqLworICAgIHsKKyAgICAgICAgbGVuID0gc2l6ZW9mKCBidWYgKSAtIDE7CisgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICAgICAgZG8gcmV0ID0gbWJlZHRsc19zc2xfcmVhZCggJnNzbCwgYnVmLCBsZW4gKTsKKyAgICAgICAgd2hpbGUoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8CisgICAgICAgICAgICAgICByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKworICAgICAgICBpZiggcmV0IDw9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goIHJldCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfVElNRU9VVDoKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgdGltZW91dFxuIiApOworICAgICAgICAgICAgICAgICAgICBpZiggcmV0cnlfbGVmdC0tID4gMCApCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHNlbmRfcmVxdWVzdDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlk6CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBncmFjZWZ1bGx5XG4iICk7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gY2xvc2Vfbm90aWZ5OworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgbWJlZHRsc19zc2xfcmVhZCByZXR1cm5lZCAtMHgleFxuIiwgLXJldCApOworICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsZW4gPSByZXQ7CisgICAgICAgIGJ1ZltsZW5dID0gJ1wwJzsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgJWQgYnl0ZXMgcmVhZFxuXG4lcyIsIGxlbiwgKGNoYXIgKikgYnVmICk7CisgICAgICAgIHJldCA9IDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiA3Yi4gU2ltdWxhdGUgaGFyZCByZXNldCBhbmQgcmVjb25uZWN0IGZyb20gc2FtZSBwb3J0PworICAgICAqLworICAgIGlmKCBvcHQucmVjb25uZWN0X2hhcmQgIT0gMCApCisgICAgeworICAgICAgICBvcHQucmVjb25uZWN0X2hhcmQgPSAwOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFJlc3RhcnRpbmcgY29ubmVjdGlvbiBmcm9tIHNhbWUgcG9ydC4uLiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0KCAmc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSggKCByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2UoICZzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgJiYKKyAgICAgICAgICAgICAgICByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgICAgICBnb3RvIHNlbmRfcmVxdWVzdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDdjLiBDb250aW51ZSBkb2luZyBkYXRhIGV4Y2hhbmdlcz8KKyAgICAgKi8KKyAgICBpZiggLS1vcHQuZXhjaGFuZ2VzID4gMCApCisgICAgICAgIGdvdG8gc2VuZF9yZXF1ZXN0OworCisgICAgLyoKKyAgICAgKiA4LiBEb25lLCBjbGVhbmx5IGNsb3NlIHRoZSBjb25uZWN0aW9uCisgICAgICovCitjbG9zZV9ub3RpZnk6CisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ2xvc2luZyB0aGUgY29ubmVjdGlvbi4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgLyogTm8gZXJyb3IgY2hlY2tpbmcsIHRoZSBjb25uZWN0aW9uIG1pZ2h0IGJlIGNsb3NlZCBhbHJlYWR5ICovCisgICAgZG8gcmV0ID0gbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCAmc3NsICk7CisgICAgd2hpbGUoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApOworICAgIHJldCA9IDA7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBkb25lXG4iICk7CisKKyAgICAvKgorICAgICAqIDkuIFJlY29ubmVjdD8KKyAgICAgKi8KK3JlY29ubmVjdDoKKyAgICBpZiggb3B0LnJlY29ubmVjdCAhPSAwICkKKyAgICB7CisgICAgICAgIC0tb3B0LnJlY29ubmVjdDsKKworICAgICAgICBtYmVkdGxzX25ldF9mcmVlKCAmc2VydmVyX2ZkICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisgICAgICAgIGlmKCBvcHQucmVjb19kZWxheSA+IDAgKQorICAgICAgICAgICAgbWJlZHRsc19uZXRfdXNsZWVwKCAxMDAwMDAwICogb3B0LnJlY29fZGVsYXkgKTsKKyNlbmRpZgorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFJlY29ubmVjdGluZyB3aXRoIHNhdmVkIHNlc3Npb24uLi4iICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCggJnNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0X3Nlc3Npb24oICZzc2wsICZzYXZlZF9zZXNzaW9uICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfY29ubmVjdCggJnNlcnZlcl9mZCwgb3B0LnNlcnZlcl9hZGRyLCBvcHQuc2VydmVyX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQudHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0gPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ORVRfUFJPVE9fVENQIDogTUJFRFRMU19ORVRfUFJPVE9fVURQICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfY29ubmVjdCByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggb3B0Lm5iaW8gPiAwICkKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfbmV0X3NldF9ub25ibG9jayggJnNlcnZlcl9mZCApOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX25ldF9zZXRfYmxvY2soICZzZXJ2ZXJfZmQgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbmV0X3NldF8obm9uKWJsb2NrKCkgcmV0dXJuZWQgLTB4JXhcblxuIiwKKyAgICAgICAgICAgICAgICAgICAgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCAmc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmCisgICAgICAgICAgICAgICAgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAgICAgZ290byBzZW5kX3JlcXVlc3Q7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDbGVhbnVwIGFuZCBleGl0CisgICAgICovCitleGl0OgorI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIGVycm9yX2J1ZlsxMDBdOworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGVycm9yX2J1ZiwgMTAwICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJMYXN0IGVycm9yIHdhczogLTB4JVggLSAlc1xuXG4iLCAtcmV0LCBlcnJvcl9idWYgKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZzZXJ2ZXJfZmQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNsaWNlcnQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjYWNlcnQgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwa2V5ICk7CisjZW5kaWYKKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uX2ZyZWUoICZzYXZlZF9zZXNzaW9uICk7CisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIC8vIFNoZWxsIGNhbiBub3QgaGFuZGxlIGxhcmdlIGV4aXQgbnVtYmVycyAtPiAxIGZvciBlcnJvcnMKKyAgICBpZiggcmV0IDwgMCApCisgICAgICAgIHJldCA9IDE7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYgTUJFRFRMU19TU0xfVExTX0MgJiYKKyAgICAgICAgICBNQkVEVExTX1NTTF9DTElfQyAmJiBNQkVEVExTX05FVF9DICYmIE1CRURUTFNfUlNBX0MgJiYKKyAgICAgICAgICBNQkVEVExTX0NUUl9EUkJHX0MgTUJFRFRMU19USU1JTkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfZm9ya19zZXJ2ZXIuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX2Zvcmtfc2VydmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyNDg5NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX2Zvcmtfc2VydmVyLmMKQEAgLTAsMCArMSw0MTYgQEAKKy8qCisgKiAgU1NMIHNlcnZlciBkZW1vbnN0cmF0aW9uIHByb2dyYW0gdXNpbmcgZm9yaygpIGZvciBoYW5kbGluZyBtdWx0aXBsZSBjbGllbnRzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc190aW1lX3QgICAgIHRpbWVfdAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpIHx8ICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykgfHwgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8ICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAhZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQoraW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgICgodm9pZCkgYXJnYyk7CisgICAgKCh2b2lkKSBhcmd2KTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX0NFUlRTX0MgYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DICIKKyAgICAgICAgICAgImFuZC9vciBNQkVEVExTX1NTTF9UTFNfQyBhbmQvb3IgTUJFRFRMU19TU0xfU1JWX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfTkVUX0MgYW5kL29yIE1CRURUTFNfUlNBX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3IgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1RJTUlOR19DIGFuZC9vciBNQkVEVExTX1BFTV9QQVJTRV9DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxpZiBkZWZpbmVkKF9XSU4zMikKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiX1dJTjMyIGRlZmluZWQuIFRoaXMgYXBwbGljYXRpb24gcmVxdWlyZXMgZm9yaygpIGFuZCBzaWduYWxzICIKKyAgICAgICAgICAgInRvIHdvcmsgY29ycmVjdGx5LlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2VydHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbmV0X3NvY2tldHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3RpbWluZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChFRklYNjQpIHx8IGRlZmluZWQoRUZJMzIpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2RlZmluZSBIVFRQX1JFU1BPTlNFIFwKKyAgICAiSFRUUC8xLjAgMjAwIE9LXHJcbkNvbnRlbnQtVHlwZTogdGV4dC9odG1sXHJcblxyXG4iIFwKKyAgICAiPGgyPm1iZWQgVExTIFRlc3QgU2VydmVyPC9oMj5cclxuIiBcCisgICAgIjxwPlN1Y2Nlc3NmdWwgY29ubmVjdGlvbiB1c2luZzogJXM8L3A+XHJcbiIKKworI2RlZmluZSBERUJVR19MRVZFTCAwCisKK3N0YXRpYyB2b2lkIG15X2RlYnVnKCB2b2lkICpjdHgsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgKQoreworICAgICgodm9pZCkgbGV2ZWwpOworCisgICAgbWJlZHRsc19mcHJpbnRmKCAoRklMRSAqKSBjdHgsICIlczolMDRkOiAlcyIsIGZpbGUsIGxpbmUsIHN0ciApOworICAgIGZmbHVzaCggIChGSUxFICopIGN0eCAgKTsKK30KKworaW50IG1haW4oIHZvaWQgKQoreworICAgIGludCByZXQsIGxlbiwgY250ID0gMCwgcGlkOworICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgbGlzdGVuX2ZkLCBjbGllbnRfZmQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJzc2xfZm9ya19zZXJ2ZXIiOworCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgbWJlZHRsc194NTA5X2NydCBzcnZjZXJ0OworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwa2V5OworCisgICAgbWJlZHRsc19uZXRfaW5pdCggJmxpc3Rlbl9mZCApOworICAgIG1iZWR0bHNfbmV0X2luaXQoICZjbGllbnRfZmQgKTsKKyAgICBtYmVkdGxzX3NzbF9pbml0KCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoICZjb25mICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmcGtleSApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJnNydmNlcnQgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgc2lnbmFsKCBTSUdDSExELCBTSUdfSUdOICk7CisKKyAgICAvKgorICAgICAqIDAuIEluaXRpYWwgc2VlZGluZyBvZiB0aGUgUk5HCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBJbml0aWFsIHNlZWRpbmcgb2YgdGhlIHJhbmRvbSBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWQhICBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAxLiBMb2FkIHRoZSBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUgUlNBIGtleQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIHNlcnZlciBjZXJ0LiBhbmQga2V5Li4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAvKgorICAgICAqIFRoaXMgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHVzZXMgZW1iZWRkZWQgdGVzdCBjZXJ0aWZpY2F0ZXMuCisgICAgICogSW5zdGVhZCwgeW91IG1heSB3YW50IHRvIHVzZSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoKSB0byByZWFkIHRoZQorICAgICAqIHNlcnZlciBhbmQgQ0EgY2VydGlmaWNhdGVzLCBhcyB3ZWxsIGFzIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSgpLgorICAgICAqLworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZzcnZjZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3Rfc3J2X2NydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X3Nydl9jcnRfbGVuICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZCEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmc3J2Y2VydCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X2Nhc19wZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9jYXNfcGVtX2xlbiApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWQhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gIG1iZWR0bHNfcGtfcGFyc2Vfa2V5KCAmcGtleSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X3Nydl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9zcnZfa2V5X2xlbiwgTlVMTCwgMCApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWQhICBtYmVkdGxzX3BrX3BhcnNlX2tleSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDFiLiBQcmVwYXJlIFNTTCBjb25maWd1cmF0aW9uCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ29uZmlndXJpbmcgU1NMLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoICZjb25mLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9JU19TRVJWRVIsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1BSRVNFVF9ERUZBVUxUICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZCEgIG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCAmY29uZiwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgbXlfZGVidWcsIHN0ZG91dCApOworCisgICAgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbiggJmNvbmYsIHNydmNlcnQubmV4dCwgTlVMTCApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQoICZjb25mLCAmc3J2Y2VydCwgJnBrZXkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkISAgbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDIuIFNldHVwIHRoZSBsaXN0ZW5pbmcgVENQIHNvY2tldAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEJpbmQgb24gaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzMy8gLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9iaW5kKCAmbGlzdGVuX2ZkLCBOVUxMLCAiNDQzMyIsIE1CRURUTFNfTkVUX1BST1RPX1RDUCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWQhICBtYmVkdGxzX25ldF9iaW5kIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIHdoaWxlKCAxICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIDMuIFdhaXQgdW50aWwgYSBjbGllbnQgY29ubmVjdHMKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfbmV0X2luaXQoICZjbGllbnRfZmQgKTsKKyAgICAgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFdhaXRpbmcgZm9yIGEgcmVtb3RlIGNvbm5lY3Rpb24gLi4uXG4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfYWNjZXB0KCAmbGlzdGVuX2ZkLCAmY2xpZW50X2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWQhICBtYmVkdGxzX25ldF9hY2NlcHQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiAzLjUuIEZvcmtpbmcgc2VydmVyIHRocmVhZAorICAgICAgICAgKi8KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBGb3JraW5nIHRvIGhhbmRsZSBjb25uZWN0aW9uIC4uLiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBwaWQgPSBmb3JrKCk7CisKKyAgICAgICAgaWYoIHBpZCA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigiIGZhaWxlZCEgIGZvcmsgcmV0dXJuZWQgJWRcblxuIiwgcGlkICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggcGlkICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3Jlc2VlZCggJmN0cl9kcmJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSAicGFyZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiApICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkISAgbWJlZHRsc19jdHJfZHJiZ19yZXNlZWQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfbmV0X2luaXQoICZsaXN0ZW5fZmQgKTsKKworICAgICAgICBwaWQgPSBnZXRwaWQoKTsKKworICAgICAgICAvKgorICAgICAgICAgKiA0LiBTZXR1cCBzdHVmZgorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwaWQgJWQ6IFNldHRpbmcgdXAgdGhlIFNTTCBkYXRhLlxuIiwgcGlkICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19yZXNlZWQoICZjdHJfZHJiZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSAiY2hpbGQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgInBpZCAlZDogU1NMIHNldHVwIGZhaWxlZCEgIG1iZWR0bHNfY3RyX2RyYmdfcmVzZWVkIHJldHVybmVkICVkXG5cbiIsCisgICAgICAgICAgICAgICAgICAgIHBpZCwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXR1cCggJnNzbCwgJmNvbmYgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgInBpZCAlZDogU1NMIHNldHVwIGZhaWxlZCEgIG1iZWR0bHNfc3NsX3NldHVwIHJldHVybmVkICVkXG5cbiIsCisgICAgICAgICAgICAgICAgICAgIHBpZCwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3NzbF9zZXRfYmlvKCAmc3NsLCAmY2xpZW50X2ZkLCBtYmVkdGxzX25ldF9zZW5kLCBtYmVkdGxzX25ldF9yZWN2LCBOVUxMICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwaWQgJWQ6IFNTTCBzZXR1cCBva1xuIiwgcGlkICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogNS4gSGFuZHNoYWtlCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBpZCAlZDogUGVyZm9ybWluZyB0aGUgU1NML1RMUyBoYW5kc2hha2UuXG4iLCBwaWQgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICB3aGlsZSggKCByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2UoICZzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgJiYgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgICAgICJwaWQgJWQ6IFNTTCBoYW5kc2hha2UgZmFpbGVkISAgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkICVkXG5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWQsIHJldCApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGlkICVkOiBTU0wgaGFuZHNoYWtlIG9rXG4iLCBwaWQgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiA2LiBSZWFkIHRoZSBIVFRQIFJlcXVlc3QKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGlkICVkOiBTdGFydCByZWFkaW5nIGZyb20gY2xpZW50LlxuIiwgcGlkICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgbGVuID0gc2l6ZW9mKCBidWYgKSAtIDE7CisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfcmVhZCggJnNzbCwgYnVmLCBsZW4gKTsKKworICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8IHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmKCByZXQgPD0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoKCByZXQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBpZCAlZDogY29ubmVjdGlvbiB3YXMgY2xvc2VkIGdyYWNlZnVsbHlcbiIsIHBpZCApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGlkICVkOiBjb25uZWN0aW9uIHdhcyByZXNldCBieSBwZWVyXG4iLCBwaWQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBpZCAlZDogbWJlZHRsc19zc2xfcmVhZCByZXR1cm5lZCAlZFxuIiwgcGlkLCByZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZW4gPSByZXQ7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBpZCAlZDogJWQgYnl0ZXMgcmVhZFxuXG4lcyIsIHBpZCwgbGVuLCAoY2hhciAqKSBidWYgKTsKKworICAgICAgICAgICAgaWYoIHJldCA+IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHdoaWxlKCAxICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogNy4gV3JpdGUgdGhlIDIwMCBSZXNwb25zZQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwaWQgJWQ6IFN0YXJ0IHdyaXRpbmcgdG8gY2xpZW50LlxuIiwgcGlkICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCBIVFRQX1JFU1BPTlNFLAorICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZSggJnNzbCApICk7CisKKyAgICAgICAgd2hpbGUoIGNudCsrIDwgMTAwICkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGUoICZzc2wsIGJ1ZiwgbGVuICkgKSA8PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX05FVF9DT05OX1JFU0VUICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWQgJWQ6IFdyaXRlIGZhaWxlZCEgIHBlZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uXG5cbiIsIHBpZCApOworICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlkICVkOiBXcml0ZSBmYWlsZWQhICBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAlZFxuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgcmV0ICk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZW4gPSByZXQ7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBpZCAlZDogJWQgYnl0ZXMgd3JpdHRlblxuXG4lc1xuIiwgcGlkLCBsZW4sIChjaGFyICopIGJ1ZiApOworCisgICAgICAgICAgICBtYmVkdGxzX25ldF91c2xlZXAoIDEwMDAwMDAgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSggJnNzbCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZjbGllbnRfZmQgKTsKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmbGlzdGVuX2ZkICk7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZzcnZjZXJ0ICk7CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGtleSApOworICAgIG1iZWR0bHNfc3NsX2ZyZWUoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggJmNvbmYgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfQ0VSVFNfQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJgorICAgICAgICAgIE1CRURUTFNfU1NMX1RMU19DICYmIE1CRURUTFNfU1NMX1NSVl9DICYmIE1CRURUTFNfTkVUX0MgJiYKKyAgICAgICAgICBNQkVEVExTX1JTQV9DICYmIE1CRURUTFNfQ1RSX0RSQkdfQyAmJiBNQkVEVExTX1BFTV9QQVJTRV9DICYmCisgICAgICAgICAgISBfV0lOMzIgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX21haWxfY2xpZW50LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9tYWlsX2NsaWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMjI3NzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9tYWlsX2NsaWVudC5jCkBAIC0wLDAgKzEsODQyIEBACisvKgorICogIFNTTCBjbGllbnQgZm9yIFNNVFAgc2VydmVycworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX3RpbWUgICAgICAgdGltZQorI2RlZmluZSBtYmVkdGxzX3RpbWVfdCAgICAgdGltZV90IAorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKSB8fCAhZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfTkVUX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgfHwgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgTUJFRFRMU19FTlRST1BZX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfU1NMX1RMU19DIGFuZC9vciBNQkVEVExTX1NTTF9DTElfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19ORVRfQyBhbmQvb3IgTUJFRFRMU19SU0FfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIGFuZC9vciBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgIgorICAgICAgICAgICAibm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL2Jhc2U2NC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9jZXJ0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOS5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChFRklYNjQpIHx8IGRlZmluZWQoRUZJMzIpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2lmIGRlZmluZWQoX1dJTjMyX1dDRSkKKyNwcmFnbWEgY29tbWVudCggbGliLCAid3MyLmxpYiIgKQorI2Vsc2UKKyNwcmFnbWEgY29tbWVudCggbGliLCAid3MyXzMyLmxpYiIgKQorI2VuZGlmCisjZW5kaWYgLyogX01TQ19WRVIgKi8KKyNlbmRpZgorCisjZGVmaW5lIERGTF9TRVJWRVJfTkFNRSAgICAgICAgICJsb2NhbGhvc3QiCisjZGVmaW5lIERGTF9TRVJWRVJfUE9SVCAgICAgICAgICI0NjUiCisjZGVmaW5lIERGTF9VU0VSX05BTUUgICAgICAgICAgICJ1c2VyIgorI2RlZmluZSBERkxfVVNFUl9QV0QgICAgICAgICAgICAicGFzc3dvcmQiCisjZGVmaW5lIERGTF9NQUlMX0ZST00gICAgICAgICAgICIiCisjZGVmaW5lIERGTF9NQUlMX1RPICAgICAgICAgICAgICIiCisjZGVmaW5lIERGTF9ERUJVR19MRVZFTCAgICAgICAgIDAKKyNkZWZpbmUgREZMX0NBX0ZJTEUgICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0NSVF9GSUxFICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0tFWV9GSUxFICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0ZPUkNFX0NJUEhFUiAgICAgICAgMAorI2RlZmluZSBERkxfTU9ERSAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERGTF9BVVRIRU5USUNBVElPTiAgICAgIDAKKworI2RlZmluZSBNT0RFX1NTTF9UTFMgICAgICAgICAgICAwCisjZGVmaW5lIE1PREVfU1RBUlRUTFMgICAgICAgICAgIDAKKworI2lmIGRlZmluZWQoTUJFRFRMU19CQVNFNjRfQykKKyNkZWZpbmUgVVNBR0VfQVVUSCBcCisgICAgIiAgICBhdXRoZW50aWNhdGlvbj0lJWQgICBkZWZhdWx0OiAwIChkaXNhYmxlZClcbiIgICAgICBcCisgICAgIiAgICB1c2VyX25hbWU9JSVzICAgICAgICBkZWZhdWx0OiBcInVzZXJcIlxuIiAgICAgICAgICBcCisgICAgIiAgICB1c2VyX3B3ZD0lJXMgICAgICAgICBkZWZhdWx0OiBcInBhc3N3b3JkXCJcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0FVVEggXAorICAgICIgICAgYXV0aGVudGljYXRpb24gb3B0aW9ucyBkaXNhYmxlZC4gKFJlcXVpcmUgTUJFRFRMU19CQVNFNjRfQylcbiIKKyNlbmRpZiAvKiBNQkVEVExTX0JBU0U2NF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjZGVmaW5lIFVTQUdFX0lPIFwKKyAgICAiICAgIGNhX2ZpbGU9JSVzICAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKHByZS1sb2FkZWQpXG4iIFwKKyAgICAiICAgIGNydF9maWxlPSUlcyAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKHByZS1sb2FkZWQpXG4iIFwKKyAgICAiICAgIGtleV9maWxlPSUlcyAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKHByZS1sb2FkZWQpXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9JTyBcCisgICAgIiAgICBObyBmaWxlIG9wZXJhdGlvbnMgYXZhaWxhYmxlIChNQkVEVExTX0ZTX0lPIG5vdCBkZWZpbmVkKVxuIgorI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworI2RlZmluZSBVU0FHRSBcCisgICAgIlxuIHVzYWdlOiBzc2xfbWFpbF9jbGllbnQgcGFyYW09PD4uLi5cbiIgICAgICAgICAgICAgICBcCisgICAgIlxuIGFjY2VwdGFibGUgcGFyYW1ldGVyczpcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBzZXJ2ZXJfbmFtZT0lJXMgICAgICBkZWZhdWx0OiBsb2NhbGhvc3RcbiIgICAgICAgICBcCisgICAgIiAgICBzZXJ2ZXJfcG9ydD0lJWQgICAgICBkZWZhdWx0OiA0NDMzXG4iICAgICAgICAgICAgICBcCisgICAgIiAgICBkZWJ1Z19sZXZlbD0lJWQgICAgICBkZWZhdWx0OiAwIChkaXNhYmxlZClcbiIgICAgICBcCisgICAgIiAgICBtb2RlPSUlZCAgICAgICAgICAgICBkZWZhdWx0OiAwIChTU0wvVExTKSAoMSBmb3IgU1RBUlRUTFMpXG4iICBcCisgICAgVVNBR0VfQVVUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBtYWlsX2Zyb209JSVzICAgICAgICBkZWZhdWx0OiBcIlwiXG4iICAgICAgICAgICAgICBcCisgICAgIiAgICBtYWlsX3RvPSUlcyAgICAgICAgICBkZWZhdWx0OiBcIlwiXG4iICAgICAgICAgICAgICBcCisgICAgVVNBR0VfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBmb3JjZV9jaXBoZXJzdWl0ZT08bmFtZT4gICAgZGVmYXVsdDogYWxsIGVuYWJsZWRcbiJcCisgICAgIiBhY2NlcHRhYmxlIGNpcGhlcnN1aXRlIG5hbWVzOlxuIgorCisvKgorICogZ2xvYmFsIG9wdGlvbnMKKyAqLworc3RydWN0IG9wdGlvbnMKK3sKKyAgICBjb25zdCBjaGFyICpzZXJ2ZXJfbmFtZTsgICAgLyogaG9zdG5hbWUgb2YgdGhlIHNlcnZlciAoY2xpZW50IG9ubHkpICAgICAqLworICAgIGNvbnN0IGNoYXIgKnNlcnZlcl9wb3J0OyAgICAvKiBwb3J0IG9uIHdoaWNoIHRoZSBzc2wgc2VydmljZSBydW5zICAgICAgICovCisgICAgaW50IGRlYnVnX2xldmVsOyAgICAgICAgICAgIC8qIGxldmVsIG9mIGRlYnVnZ2luZyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgYXV0aGVudGljYXRpb247ICAgICAgICAgLyogaWYgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQgICAgICAgICAgICAqLworICAgIGludCBtb2RlOyAgICAgICAgICAgICAgICAgICAvKiBTU0wvVExTICgwKSBvciBTVEFSVFRMUyAoMSkgICAgICAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqdXNlcl9uYW1lOyAgICAgIC8qIHVzZXJuYW1lIHRvIHVzZSBmb3IgYXV0aGVudGljYXRpb24gICAgICAgKi8KKyAgICBjb25zdCBjaGFyICp1c2VyX3B3ZDsgICAgICAgLyogcGFzc3dvcmQgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvbiAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKm1haWxfZnJvbTsgICAgICAvKiBFLU1haWwgYWRkcmVzcyB0byB1c2UgYXMgc2VuZGVyICAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqbWFpbF90bzsgICAgICAgIC8qIEUtTWFpbCBhZGRyZXNzIHRvIHVzZSBhcyByZWNpcGllbnQgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpjYV9maWxlOyAgICAgICAgLyogdGhlIGZpbGUgd2l0aCB0aGUgQ0EgY2VydGlmaWNhdGUocykgICAgICAqLworICAgIGNvbnN0IGNoYXIgKmNydF9maWxlOyAgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgICAgICovCisgICAgY29uc3QgY2hhciAqa2V5X2ZpbGU7ICAgICAgIC8qIHRoZSBmaWxlIHdpdGggdGhlIGNsaWVudCBrZXkgICAgICAgICAgICAgKi8KKyAgICBpbnQgZm9yY2VfY2lwaGVyc3VpdGVbMl07ICAgLyogcHJvdG9jb2wvY2lwaGVyc3VpdGUgdG8gdXNlLCBvciBhbGwgICAgICAqLworfSBvcHQ7CisKK3N0YXRpYyB2b2lkIG15X2RlYnVnKCB2b2lkICpjdHgsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgKQoreworICAgICgodm9pZCkgbGV2ZWwpOworCisgICAgbWJlZHRsc19mcHJpbnRmKCAoRklMRSAqKSBjdHgsICIlczolMDRkOiAlcyIsIGZpbGUsIGxpbmUsIHN0ciApOworICAgIGZmbHVzaCggIChGSUxFICopIGN0eCAgKTsKK30KKworc3RhdGljIGludCBkb19oYW5kc2hha2UoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICB1aW50MzJfdCBmbGFnczsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBtZW1zZXQoYnVmLCAwLCAxMDI0KTsKKworICAgIC8qCisgICAgICogNC4gSGFuZHNoYWtlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gUGVyZm9ybWluZyB0aGUgU1NML1RMUyBoYW5kc2hha2UuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJiByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpCisgICAgICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIChjaGFyICopIGJ1ZiwgMTAyNCApOworI2VuZGlmCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQgJWQ6ICVzXG5cbiIsIHJldCwgYnVmICk7CisgICAgICAgICAgICByZXR1cm4oIC0xICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAgIFsgQ2lwaGVyc3VpdGUgaXMgJXMgXVxuIiwKKyAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZSggc3NsICkgKTsKKworICAgIC8qCisgICAgICogNS4gVmVyaWZ5IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBWZXJpZnlpbmcgcGVlciBYLjUwOSBjZXJ0aWZpY2F0ZS4uLiIgKTsKKworICAgIC8qIEluIHJlYWwgbGlmZSwgd2UgcHJvYmFibHkgd2FudCB0byBiYWlsIG91dCB3aGVuIHJldCAhPSAwICovCisgICAgaWYoICggZmxhZ3MgPSBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGNoYXIgdnJmeV9idWZbNTEyXTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiIgKTsKKworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9pbmZvKCB2cmZ5X2J1Ziwgc2l6ZW9mKCB2cmZ5X2J1ZiApLCAiICAhICIsIGZsYWdzICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIlc1xuIiwgdnJmeV9idWYgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gUGVlciBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiAgICAuLi5cbiIgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luZm8oIChjaGFyICopIGJ1Ziwgc2l6ZW9mKCBidWYgKSAtIDEsICIgICAgICAiLAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9wZWVyX2NlcnQoIHNzbCApICk7CisgICAgbWJlZHRsc19wcmludGYoICIlc1xuIiwgYnVmICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCB3cml0ZV9zc2xfZGF0YSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisKKyAgICBtYmVkdGxzX3ByaW50ZigiXG4lcyIsIGJ1Zik7CisgICAgd2hpbGUoIGxlbiAmJiAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlKCBzc2wsIGJ1ZiwgbGVuICkgKSA8PSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJiByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHdyaXRlX3NzbF9hbmRfZ2V0X3Jlc3BvbnNlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGFbMTI4XTsKKyAgICBjaGFyIGNvZGVbNF07CisgICAgc2l6ZV90IGksIGlkeCA9IDA7CisKKyAgICBtYmVkdGxzX3ByaW50ZigiXG4lcyIsIGJ1Zik7CisgICAgd2hpbGUoIGxlbiAmJiAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlKCBzc2wsIGJ1ZiwgbGVuICkgKSA8PSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJiByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRvCisgICAgeworICAgICAgICBsZW4gPSBzaXplb2YoIGRhdGEgKSAtIDE7CisgICAgICAgIG1lbXNldCggZGF0YSwgMCwgc2l6ZW9mKCBkYXRhICkgKTsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfcmVhZCggc3NsLCBkYXRhLCBsZW4gKTsKKworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1BFRVJfQ0xPU0VfTk9USUZZICkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBpZiggcmV0IDw9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3JlYWQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZigiXG4lcyIsIGRhdGEpOworICAgICAgICBsZW4gPSByZXQ7CisgICAgICAgIGZvciggaSA9IDA7IGkgPCBsZW47IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBkYXRhW2ldICE9ICdcbicgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCBpZHggPCA0ICkKKyAgICAgICAgICAgICAgICAgICAgY29kZVsgaWR4KysgXSA9IGRhdGFbaV07CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCBpZHggPT0gNCAmJiBjb2RlWzBdID49ICcwJyAmJiBjb2RlWzBdIDw9ICc5JyAmJiBjb2RlWzNdID09ICcgJyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29kZVszXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgcmV0dXJuIGF0b2koIGNvZGUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWR4ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSggMSApOworfQorCitzdGF0aWMgaW50IHdyaXRlX2FuZF9nZXRfcmVzcG9uc2UoIG1iZWR0bHNfbmV0X2NvbnRleHQgKnNvY2tfZmQsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGFbMTI4XTsKKyAgICBjaGFyIGNvZGVbNF07CisgICAgc2l6ZV90IGksIGlkeCA9IDA7CisKKyAgICBtYmVkdGxzX3ByaW50ZigiXG4lcyIsIGJ1Zik7CisgICAgaWYoIGxlbiAmJiAoIHJldCA9IG1iZWR0bHNfbmV0X3NlbmQoIHNvY2tfZmQsIGJ1ZiwgbGVuICkgKSA8PSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3dyaXRlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGRvCisgICAgeworICAgICAgICBsZW4gPSBzaXplb2YoIGRhdGEgKSAtIDE7CisgICAgICAgIG1lbXNldCggZGF0YSwgMCwgc2l6ZW9mKCBkYXRhICkgKTsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19uZXRfcmVjdiggc29ja19mZCwgZGF0YSwgbGVuICk7CisKKyAgICAgICAgaWYoIHJldCA8PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiAgISByZWFkIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgZGF0YVtsZW5dID0gJ1wwJzsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIlxuJXMiLCBkYXRhKTsKKyAgICAgICAgbGVuID0gcmV0OworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgbGVuOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggZGF0YVtpXSAhPSAnXG4nICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggaWR4IDwgNCApCisgICAgICAgICAgICAgICAgICAgIGNvZGVbIGlkeCsrIF0gPSBkYXRhW2ldOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiggaWR4ID09IDQgJiYgY29kZVswXSA+PSAnMCcgJiYgY29kZVswXSA8PSAnOScgJiYgY29kZVszXSA9PSAnICcgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvZGVbM10gPSAnXDAnOworICAgICAgICAgICAgICAgIHJldHVybiBhdG9pKCBjb2RlICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlkeCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUoIDEgKTsKK30KKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQgPSAwLCBsZW47CisgICAgbWJlZHRsc19uZXRfY29udGV4dCBzZXJ2ZXJfZmQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisjaWYgZGVmaW5lZChNQkVEVExTX0JBU0U2NF9DKQorICAgIHVuc2lnbmVkIGNoYXIgYmFzZVsxMDI0XTsKKyNlbmRpZgorICAgIGNoYXIgaG9zdG5hbWVbMzJdOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAic3NsX21haWxfY2xpZW50IjsKKworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgc3NsOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZyBjb25mOworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2FjZXJ0OworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2xpY2VydDsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGtleTsKKyAgICBpbnQgaTsKKyAgICBzaXplX3QgbjsKKyAgICBjaGFyICpwLCAqcTsKKyAgICBjb25zdCBpbnQgKmxpc3Q7CisKKyAgICAvKgorICAgICAqIE1ha2Ugc3VyZSBtZW1vcnkgcmVmZXJlbmNlcyBhcmUgdmFsaWQgaW4gY2FzZSB3ZSBleGl0IGVhcmx5LgorICAgICAqLworICAgIG1iZWR0bHNfbmV0X2luaXQoICZzZXJ2ZXJfZmQgKTsKKyAgICBtYmVkdGxzX3NzbF9pbml0KCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoICZjb25mICk7CisgICAgbWVtc2V0KCAmYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2FjZXJ0ICk7CisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2xpY2VydCApOworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrZXkgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgaWYoIGFyZ2MgPT0gMCApCisgICAgeworICAgIHVzYWdlOgorICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKworICAgICAgICBsaXN0ID0gbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoKTsKKyAgICAgICAgd2hpbGUoICpsaXN0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoIiAgICAlc1xuIiwgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUoICpsaXN0ICkgKTsKKyAgICAgICAgICAgIGxpc3QrKzsKKyAgICAgICAgfQorICAgICAgICBtYmVkdGxzX3ByaW50ZigiXG4iKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG9wdC5zZXJ2ZXJfbmFtZSAgICAgICAgID0gREZMX1NFUlZFUl9OQU1FOworICAgIG9wdC5zZXJ2ZXJfcG9ydCAgICAgICAgID0gREZMX1NFUlZFUl9QT1JUOworICAgIG9wdC5kZWJ1Z19sZXZlbCAgICAgICAgID0gREZMX0RFQlVHX0xFVkVMOworICAgIG9wdC5hdXRoZW50aWNhdGlvbiAgICAgID0gREZMX0FVVEhFTlRJQ0FUSU9OOworICAgIG9wdC5tb2RlICAgICAgICAgICAgICAgID0gREZMX01PREU7CisgICAgb3B0LnVzZXJfbmFtZSAgICAgICAgICAgPSBERkxfVVNFUl9OQU1FOworICAgIG9wdC51c2VyX3B3ZCAgICAgICAgICAgID0gREZMX1VTRVJfUFdEOworICAgIG9wdC5tYWlsX2Zyb20gICAgICAgICAgID0gREZMX01BSUxfRlJPTTsKKyAgICBvcHQubWFpbF90byAgICAgICAgICAgICA9IERGTF9NQUlMX1RPOworICAgIG9wdC5jYV9maWxlICAgICAgICAgICAgID0gREZMX0NBX0ZJTEU7CisgICAgb3B0LmNydF9maWxlICAgICAgICAgICAgPSBERkxfQ1JUX0ZJTEU7CisgICAgb3B0LmtleV9maWxlICAgICAgICAgICAgPSBERkxfS0VZX0ZJTEU7CisgICAgb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdPSBERkxfRk9SQ0VfQ0lQSEVSOworCisgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgeworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGlmKCBzdHJjbXAoIHAsICJzZXJ2ZXJfbmFtZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5zZXJ2ZXJfbmFtZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInNlcnZlcl9wb3J0IiApID09IDAgKQorICAgICAgICAgICAgb3B0LnNlcnZlcl9wb3J0ID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZGVidWdfbGV2ZWwiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5kZWJ1Z19sZXZlbCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuZGVidWdfbGV2ZWwgPCAwIHx8IG9wdC5kZWJ1Z19sZXZlbCA+IDY1NTM1ICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImF1dGhlbnRpY2F0aW9uIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuYXV0aGVudGljYXRpb24gPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LmF1dGhlbnRpY2F0aW9uIDwgMCB8fCBvcHQuYXV0aGVudGljYXRpb24gPiAxICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm1vZGUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5tb2RlID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5tb2RlIDwgMCB8fCBvcHQubW9kZSA+IDEgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAidXNlcl9uYW1lIiApID09IDAgKQorICAgICAgICAgICAgb3B0LnVzZXJfbmFtZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInVzZXJfcHdkIiApID09IDAgKQorICAgICAgICAgICAgb3B0LnVzZXJfcHdkID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibWFpbF9mcm9tIiApID09IDAgKQorICAgICAgICAgICAgb3B0Lm1haWxfZnJvbSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm1haWxfdG8iICkgPT0gMCApCisgICAgICAgICAgICBvcHQubWFpbF90byA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImNhX2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuY2FfZmlsZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImNydF9maWxlIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmNydF9maWxlID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAia2V5X2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQua2V5X2ZpbGUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJmb3JjZV9jaXBoZXJzdWl0ZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdID0gLTE7CisKKyAgICAgICAgICAgIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVswXSA9IG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9pZCggcSApOworCisgICAgICAgICAgICBpZiggb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdIDw9IDAgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisKKyAgICAgICAgICAgIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVsxXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDAuIEluaXRpYWxpemUgdGhlIFJORyBhbmQgdGhlIHNlc3Npb24gZGF0YQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMS4xLiBMb2FkIHRoZSB0cnVzdGVkIENBCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgQ0Egcm9vdCBjZXJ0aWZpY2F0ZSAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBpZiggc3RybGVuKCBvcHQuY2FfZmlsZSApICkKKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY2FjZXJ0LCBvcHQuY2FfZmlsZSApOworICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DRVJUU19DKQorICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmY2FjZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2FzX3BlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9jYXNfcGVtX2xlbiApOworI2Vsc2UKKyAgICB7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0NFUlRTX0Mgbm90IGRlZmluZWQuIik7CisgICAgfQorI2VuZGlmCisgICAgaWYoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBvayAoJWQgc2tpcHBlZClcbiIsIHJldCApOworCisgICAgLyoKKyAgICAgKiAxLjIuIExvYWQgb3duIGNlcnRpZmljYXRlIGFuZCBwcml2YXRlIGtleQorICAgICAqCisgICAgICogKGNhbiBiZSBza2lwcGVkIGlmIGNsaWVudCBhdXRoZW50aWNhdGlvbiBpcyBub3QgcmVxdWlyZWQpCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgY2xpZW50IGNlcnQuIGFuZCBrZXkuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBpZiggc3RybGVuKCBvcHQuY3J0X2ZpbGUgKSApCisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNsaWNlcnQsIG9wdC5jcnRfZmlsZSApOworICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DRVJUU19DKQorICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmY2xpY2VydCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X2NsaV9jcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfY2xpX2NydF9sZW4gKTsKKyNlbHNlCisgICAgeworICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQ0VSVFNfQyBub3QgZGVmaW5lZC4iKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgaWYoIHN0cmxlbiggb3B0LmtleV9maWxlICkgKQorICAgICAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoICZwa2V5LCBvcHQua2V5X2ZpbGUsICIiICk7CisgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpICYmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXkoICZwa2V5LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2xpX2tleSwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfY2xpX2tleV9sZW4sIE5VTEwsIDAgKTsKKyNlbHNlCisgICAgeworICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQ0VSVFNfQyBvciBNQkVEVExTX1BFTV9QQVJTRV9DIG5vdCBkZWZpbmVkLiIpOworICAgIH0KKyNlbmRpZgorICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9rZXkgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAyLiBTdGFydCB0aGUgY29ubmVjdGlvbgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIENvbm5lY3RpbmcgdG8gdGNwLyVzLyVzLi4uIiwgb3B0LnNlcnZlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LnNlcnZlcl9wb3J0ICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2Nvbm5lY3QoICZzZXJ2ZXJfZmQsIG9wdC5zZXJ2ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LnNlcnZlcl9wb3J0LCBNQkVEVExTX05FVF9QUk9UT19UQ1AgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfY29ubmVjdCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDMuIFNldHVwIHN0dWZmCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2V0dGluZyB1cCB0aGUgU1NML1RMUyBzdHJ1Y3R1cmUuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyggJmNvbmYsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0lTX0NMSUVOVCwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTSwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfUFJFU0VUX0RFRkFVTFQgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyogT1BUSU9OQUwgaXMgbm90IG9wdGltYWwgZm9yIHNlY3VyaXR5LAorICAgICAqIGJ1dCBtYWtlcyBpbnRlcm9wIGVhc2llciBpbiB0aGlzIHNpbXBsaWZpZWQgZXhhbXBsZSAqLworICAgIG1iZWR0bHNfc3NsX2NvbmZfYXV0aG1vZGUoICZjb25mLCBNQkVEVExTX1NTTF9WRVJJRllfT1BUSU9OQUwgKTsKKworICAgIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCAmY29uZiwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgbXlfZGVidWcsIHN0ZG91dCApOworCisgICAgaWYoIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVswXSAhPSBERkxfRk9SQ0VfQ0lQSEVSICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXMoICZjb25mLCBvcHQuZm9yY2VfY2lwaGVyc3VpdGUgKTsKKworICAgIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4oICZjb25mLCAmY2FjZXJ0LCBOVUxMICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCggJmNvbmYsICZjbGljZXJ0LCAmcGtleSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0dXAoICZzc2wsICZjb25mICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldHVwIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lKCAmc3NsLCBvcHQuc2VydmVyX25hbWUgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfc2V0X2JpbyggJnNzbCwgJnNlcnZlcl9mZCwgbWJlZHRsc19uZXRfc2VuZCwgbWJlZHRsc19uZXRfcmVjdiwgTlVMTCApOworCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIGlmKCBvcHQubW9kZSA9PSBNT0RFX1NTTF9UTFMgKQorICAgIHsKKyAgICAgICAgaWYoIGRvX2hhbmRzaGFrZSggJnNzbCApICE9IDAgKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICA+IEdldCBoZWFkZXIgZnJvbSBzZXJ2ZXI6IiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHJldCA9IHdyaXRlX3NzbF9hbmRfZ2V0X3Jlc3BvbnNlKCAmc3NsLCBidWYsIDAgKTsKKyAgICAgICAgaWYoIHJldCA8IDIwMCB8fCByZXQgPiAyOTkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZigiIG9rXG4iICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgRUhMTyB0byBzZXJ2ZXI6IiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIGdldGhvc3RuYW1lKCBob3N0bmFtZSwgMzIgKTsKKyAgICAgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCAiRUhMTyAlc1xyXG4iLCBob3N0bmFtZSApOworICAgICAgICByZXQgPSB3cml0ZV9zc2xfYW5kX2dldF9yZXNwb25zZSggJnNzbCwgYnVmLCBsZW4gKTsKKyAgICAgICAgaWYoIHJldCA8IDIwMCB8fCByZXQgPiAyOTkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgID4gR2V0IGhlYWRlciBmcm9tIHNlcnZlcjoiICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gd3JpdGVfYW5kX2dldF9yZXNwb25zZSggJnNlcnZlcl9mZCwgYnVmLCAwICk7CisgICAgICAgIGlmKCByZXQgPCAyMDAgfHwgcmV0ID4gMjk5ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgc2VydmVyIHJlc3BvbmRlZCB3aXRoICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoIiBva1xuIiApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICA+IFdyaXRlIEVITE8gdG8gc2VydmVyOiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBnZXRob3N0bmFtZSggaG9zdG5hbWUsIDMyICk7CisgICAgICAgIGxlbiA9IHNwcmludGYoIChjaGFyICopIGJ1ZiwgIkVITE8gJXNcclxuIiwgaG9zdG5hbWUgKTsKKyAgICAgICAgcmV0ID0gd3JpdGVfYW5kX2dldF9yZXNwb25zZSggJnNlcnZlcl9mZCwgYnVmLCBsZW4gKTsKKyAgICAgICAgaWYoIHJldCA8IDIwMCB8fCByZXQgPiAyOTkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZigiIG9rXG4iICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgU1RBUlRUTFMgdG8gc2VydmVyOiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBnZXRob3N0bmFtZSggaG9zdG5hbWUsIDMyICk7CisgICAgICAgIGxlbiA9IHNwcmludGYoIChjaGFyICopIGJ1ZiwgIlNUQVJUVExTXHJcbiIgKTsKKyAgICAgICAgcmV0ID0gd3JpdGVfYW5kX2dldF9yZXNwb25zZSggJnNlcnZlcl9mZCwgYnVmLCBsZW4gKTsKKyAgICAgICAgaWYoIHJldCA8IDIwMCB8fCByZXQgPiAyOTkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZigiIG9rXG4iICk7CisKKyAgICAgICAgaWYoIGRvX2hhbmRzaGFrZSggJnNzbCApICE9IDAgKQorICAgICAgICAgICAgZ290byBleGl0OworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19CQVNFNjRfQykKKyAgICBpZiggb3B0LmF1dGhlbnRpY2F0aW9uICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICA+IFdyaXRlIEFVVEggTE9HSU4gdG8gc2VydmVyOiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBsZW4gPSBzcHJpbnRmKCAoY2hhciAqKSBidWYsICJBVVRIIExPR0lOXHJcbiIgKTsKKyAgICAgICAgcmV0ID0gd3JpdGVfc3NsX2FuZF9nZXRfcmVzcG9uc2UoICZzc2wsIGJ1ZiwgbGVuICk7CisgICAgICAgIGlmKCByZXQgPCAyMDAgfHwgcmV0ID4gMzk5ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgc2VydmVyIHJlc3BvbmRlZCB3aXRoICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoIiBva1xuIiApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICA+IFdyaXRlIHVzZXJuYW1lIHRvIHNlcnZlcjogJXMiLCBvcHQudXNlcl9uYW1lICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19iYXNlNjRfZW5jb2RlKCBiYXNlLCBzaXplb2YoIGJhc2UgKSwgJm4sIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG9wdC51c2VyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggb3B0LnVzZXJfbmFtZSApICk7CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19iYXNlNjRfZW5jb2RlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGxlbiA9IHNwcmludGYoIChjaGFyICopIGJ1ZiwgIiVzXHJcbiIsIGJhc2UgKTsKKyAgICAgICAgcmV0ID0gd3JpdGVfc3NsX2FuZF9nZXRfcmVzcG9uc2UoICZzc2wsIGJ1ZiwgbGVuICk7CisgICAgICAgIGlmKCByZXQgPCAzMDAgfHwgcmV0ID4gMzk5ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgc2VydmVyIHJlc3BvbmRlZCB3aXRoICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoIiBva1xuIiApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICA+IFdyaXRlIHBhc3N3b3JkIHRvIHNlcnZlcjogJXMiLCBvcHQudXNlcl9wd2QgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICByZXQgPSBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUoIGJhc2UsIHNpemVvZiggYmFzZSApLCAmbiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgb3B0LnVzZXJfcHdkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIG9wdC51c2VyX3B3ZCApICk7CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19iYXNlNjRfZW5jb2RlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGxlbiA9IHNwcmludGYoIChjaGFyICopIGJ1ZiwgIiVzXHJcbiIsIGJhc2UgKTsKKyAgICAgICAgcmV0ID0gd3JpdGVfc3NsX2FuZF9nZXRfcmVzcG9uc2UoICZzc2wsIGJ1ZiwgbGVuICk7CisgICAgICAgIGlmKCByZXQgPCAyMDAgfHwgcmV0ID4gMzk5ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgc2VydmVyIHJlc3BvbmRlZCB3aXRoICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoIiBva1xuIiApOworICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgTUFJTCBGUk9NIHRvIHNlcnZlcjoiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGxlbiA9IHNwcmludGYoIChjaGFyICopIGJ1ZiwgIk1BSUwgRlJPTTo8JXM+XHJcbiIsIG9wdC5tYWlsX2Zyb20gKTsKKyAgICByZXQgPSB3cml0ZV9zc2xfYW5kX2dldF9yZXNwb25zZSggJnNzbCwgYnVmLCBsZW4gKTsKKyAgICBpZiggcmV0IDwgMjAwIHx8IHJldCA+IDI5OSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZigiIG9rXG4iICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgPiBXcml0ZSBSQ1BUIFRPIHRvIHNlcnZlcjoiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGxlbiA9IHNwcmludGYoIChjaGFyICopIGJ1ZiwgIlJDUFQgVE86PCVzPlxyXG4iLCBvcHQubWFpbF90byApOworICAgIHJldCA9IHdyaXRlX3NzbF9hbmRfZ2V0X3Jlc3BvbnNlKCAmc3NsLCBidWYsIGxlbiApOworICAgIGlmKCByZXQgPCAyMDAgfHwgcmV0ID4gMjk5ICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIHNlcnZlciByZXNwb25kZWQgd2l0aCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCIgb2tcbiIgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiICA+IFdyaXRlIERBVEEgdG8gc2VydmVyOiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCAiREFUQVxyXG4iICk7CisgICAgcmV0ID0gd3JpdGVfc3NsX2FuZF9nZXRfcmVzcG9uc2UoICZzc2wsIGJ1ZiwgbGVuICk7CisgICAgaWYoIHJldCA8IDMwMCB8fCByZXQgPiAzOTkgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgc2VydmVyIHJlc3BvbmRlZCB3aXRoICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoIiBva1xuIiApOworCisgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgY29udGVudCB0byBzZXJ2ZXI6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBsZW4gPSBzcHJpbnRmKCAoY2hhciAqKSBidWYsICJGcm9tOiAlc1xyXG5TdWJqZWN0OiBtYmVkIFRMUyBUZXN0IG1haWxcclxuXHJcbiIKKyAgICAgICAgICAgICJUaGlzIGlzIGEgc2ltcGxlIHRlc3QgbWFpbCBmcm9tIHRoZSAiCisgICAgICAgICAgICAibWJlZCBUTFMgbWFpbCBjbGllbnQgZXhhbXBsZS5cclxuIgorICAgICAgICAgICAgIlxyXG4iCisgICAgICAgICAgICAiRW5qb3khIiwgb3B0Lm1haWxfZnJvbSApOworICAgIHJldCA9IHdyaXRlX3NzbF9kYXRhKCAmc3NsLCBidWYsIGxlbiApOworCisgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCAiXHJcbi5cclxuIik7CisgICAgcmV0ID0gd3JpdGVfc3NsX2FuZF9nZXRfcmVzcG9uc2UoICZzc2wsIGJ1ZiwgbGVuICk7CisgICAgaWYoIHJldCA8IDIwMCB8fCByZXQgPiAyOTkgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgc2VydmVyIHJlc3BvbmRlZCB3aXRoICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoIiBva1xuIiApOworCisgICAgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCAmc3NsICk7CisKK2V4aXQ6CisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmc2VydmVyX2ZkICk7CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2xpY2VydCApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNhY2VydCApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrZXkgKTsKKyAgICBtYmVkdGxzX3NzbF9mcmVlKCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoICZjb25mICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfRU5UUk9QWV9DICYmIE1CRURUTFNfU1NMX1RMU19DICYmCisgICAgICAgICAgTUJFRFRMU19TU0xfQ0xJX0MgJiYgTUJFRFRMU19ORVRfQyAmJiBNQkVEVExTX1JTQV9DICoqCisgICAgICAgICAgTUJFRFRMU19DVFJfRFJCR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9wdGhyZWFkX3NlcnZlci5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfcHRocmVhZF9zZXJ2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTA1YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfcHRocmVhZF9zZXJ2ZXIuYwpAQCAtMCwwICsxLDUyOSBAQAorLyoKKyAqICBTU0wgc2VydmVyIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB1c2luZyBwdGhyZWFkIGZvciBoYW5kbGluZyBtdWx0aXBsZQorICogIGNsaWVudHMuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfQ0VSVFNfQykgfHwgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKSB8fCAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykgfHwgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgfHwgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKSB8fCAhZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19QVEhSRUFEKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgTUJFRFRMU19DRVJUU19DIGFuZC9vciBNQkVEVExTX0VOVFJPUFlfQyAiCisgICAgICAgICAgICJhbmQvb3IgTUJFRFRMU19TU0xfVExTX0MgYW5kL29yIE1CRURUTFNfU1NMX1NSVl9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX05FVF9DIGFuZC9vciBNQkVEVExTX1JTQV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0NUUl9EUkJHX0MgYW5kL29yIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19USFJFQURJTkdfQyBhbmQvb3IgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRCAiCisgICAgICAgICAgICJhbmQvb3IgTUJFRFRMU19QRU1fUEFSU0VfQyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9jZXJ0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsLmgiCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF9jYWNoZS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorI2luY2x1ZGUgIm1iZWR0bHMvbWVtb3J5X2J1ZmZlcl9hbGxvYy5oIgorI2VuZGlmCisKKyNkZWZpbmUgSFRUUF9SRVNQT05TRSBcCisgICAgIkhUVFAvMS4wIDIwMCBPS1xyXG5Db250ZW50LVR5cGU6IHRleHQvaHRtbFxyXG5cclxuIiBcCisgICAgIjxoMj5tYmVkIFRMUyBUZXN0IFNlcnZlcjwvaDI+XHJcbiIgXAorICAgICI8cD5TdWNjZXNzZnVsIGNvbm5lY3Rpb24gdXNpbmc6ICVzPC9wPlxyXG4iCisKKyNkZWZpbmUgREVCVUdfTEVWRUwgMAorCisjZGVmaW5lIE1BWF9OVU1fVEhSRUFEUyA1CisKK21iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgZGVidWdfbXV0ZXg7CisKK3N0YXRpYyB2b2lkIG15X211dGV4ZWRfZGVidWcoIHZvaWQgKmN0eCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciApCit7CisgICAgbG9uZyBpbnQgdGhyZWFkX2lkID0gKGxvbmcgaW50KSBwdGhyZWFkX3NlbGYoKTsKKworICAgIG1iZWR0bHNfbXV0ZXhfbG9jayggJmRlYnVnX211dGV4ICk7CisKKyAgICAoKHZvaWQpIGxldmVsKTsKKyAgICBtYmVkdGxzX2ZwcmludGYoIChGSUxFICopIGN0eCwgIiVzOiUwNGQ6IFsgIyVsZCBdICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsIGxpbmUsIHRocmVhZF9pZCwgc3RyICk7CisgICAgZmZsdXNoKCAgKEZJTEUgKikgY3R4ICApOworCisgICAgbWJlZHRsc19tdXRleF91bmxvY2soICZkZWJ1Z19tdXRleCApOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbWJlZHRsc19uZXRfY29udGV4dCBjbGllbnRfZmQ7CisgICAgaW50IHRocmVhZF9jb21wbGV0ZTsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmZpZzsKK30gdGhyZWFkX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCBhY3RpdmU7CisgICAgdGhyZWFkX2luZm9fdCAgIGRhdGE7CisgICAgcHRocmVhZF90ICAgICAgIHRocmVhZDsKK30gcHRocmVhZF9pbmZvX3Q7CisKK3N0YXRpYyB0aHJlYWRfaW5mb190ICAgIGJhc2VfaW5mbzsKK3N0YXRpYyBwdGhyZWFkX2luZm9fdCAgIHRocmVhZHNbTUFYX05VTV9USFJFQURTXTsKKworc3RhdGljIHZvaWQgKmhhbmRsZV9zc2xfY29ubmVjdGlvbiggdm9pZCAqZGF0YSApCit7CisgICAgaW50IHJldCwgbGVuOworICAgIHRocmVhZF9pbmZvX3QgKnRocmVhZF9pbmZvID0gKHRocmVhZF9pbmZvX3QgKikgZGF0YTsKKyAgICBtYmVkdGxzX25ldF9jb250ZXh0ICpjbGllbnRfZmQgPSAmdGhyZWFkX2luZm8tPmNsaWVudF9mZDsKKyAgICBsb25nIGludCB0aHJlYWRfaWQgPSAobG9uZyBpbnQpIHB0aHJlYWRfc2VsZigpOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgc3NsOworCisgICAgLyogTWFrZSBzdXJlIG1lbW9yeSByZWZlcmVuY2VzIGFyZSB2YWxpZCAqLworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICMlbGQgXSAgU2V0dGluZyB1cCBTU0wvVExTIGRhdGFcbiIsIHRocmVhZF9pZCApOworCisgICAgLyoKKyAgICAgKiA0LiBHZXQgdGhlIFNTTCBjb250ZXh0IHJlYWR5CisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0dXAoICZzc2wsIHRocmVhZF9pbmZvLT5jb25maWcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFsgIyVsZCBdICBmYWlsZWQ6IG1iZWR0bHNfc3NsX3NldHVwIHJldHVybmVkIC0weCUwNHhcbiIsCisgICAgICAgICAgICAgICAgdGhyZWFkX2lkLCAtcmV0ICk7CisgICAgICAgIGdvdG8gdGhyZWFkX2V4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfc2V0X2JpbyggJnNzbCwgY2xpZW50X2ZkLCBtYmVkdGxzX25ldF9zZW5kLCBtYmVkdGxzX25ldF9yZWN2LCBOVUxMICk7CisKKyAgICAvKgorICAgICAqIDUuIEhhbmRzaGFrZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICMlbGQgXSAgUGVyZm9ybWluZyB0aGUgU1NML1RMUyBoYW5kc2hha2VcbiIsIHRocmVhZF9pZCApOworCisgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCAmc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJiByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyAjJWxkIF0gIGZhaWxlZDogbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIC0weCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgIHRocmVhZF9pZCwgLXJldCApOworICAgICAgICAgICAgZ290byB0aHJlYWRfZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICMlbGQgXSAgb2tcbiIsIHRocmVhZF9pZCApOworCisgICAgLyoKKyAgICAgKiA2LiBSZWFkIHRoZSBIVFRQIFJlcXVlc3QKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyAjJWxkIF0gIDwgUmVhZCBmcm9tIGNsaWVudFxuIiwgdGhyZWFkX2lkICk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgbGVuID0gc2l6ZW9mKCBidWYgKSAtIDE7CisgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3JlYWQoICZzc2wsIGJ1ZiwgbGVuICk7CisKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8IHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiggcmV0IDw9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goIHJldCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlk6CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICMlbGQgXSAgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGdyYWNlZnVsbHlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX2lkICk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gdGhyZWFkX2V4aXQ7CisKKyAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX05FVF9DT05OX1JFU0VUOgorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyAjJWxkIF0gIGNvbm5lY3Rpb24gd2FzIHJlc2V0IGJ5IHBlZXJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX2lkICk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gdGhyZWFkX2V4aXQ7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyAjJWxkIF0gIG1iZWR0bHNfc3NsX3JlYWQgcmV0dXJuZWQgLTB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfaWQsIC1yZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byB0aHJlYWRfZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxlbiA9IHJldDsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFsgIyVsZCBdICAlZCBieXRlcyByZWFkXG49PT09PVxuJXNcbj09PT09XG4iLAorICAgICAgICAgICAgICAgIHRocmVhZF9pZCwgbGVuLCAoY2hhciAqKSBidWYgKTsKKworICAgICAgICBpZiggcmV0ID4gMCApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgd2hpbGUoIDEgKTsKKworICAgIC8qCisgICAgICogNy4gV3JpdGUgdGhlIDIwMCBSZXNwb25zZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICMlbGQgXSAgPiBXcml0ZSB0byBjbGllbnQ6XG4iLCB0aHJlYWRfaWQgKTsKKworICAgIGxlbiA9IHNwcmludGYoIChjaGFyICopIGJ1ZiwgSFRUUF9SRVNQT05TRSwKKyAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGUoICZzc2wgKSApOworCisgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGUoICZzc2wsIGJ1ZiwgbGVuICkgKSA8PSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfTkVUX0NPTk5fUkVTRVQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyAjJWxkIF0gIGZhaWxlZDogcGVlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb25cbiIsCisgICAgICAgICAgICAgICAgICAgIHRocmVhZF9pZCApOworICAgICAgICAgICAgZ290byB0aHJlYWRfZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJiByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyAjJWxkIF0gIGZhaWxlZDogbWJlZHRsc19zc2xfd3JpdGUgcmV0dXJuZWQgLTB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdGhyZWFkX2lkLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gdGhyZWFkX2V4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsZW4gPSByZXQ7CisgICAgbWJlZHRsc19wcmludGYoICIgIFsgIyVsZCBdICAlZCBieXRlcyB3cml0dGVuXG49PT09PVxuJXNcbj09PT09XG4iLAorICAgICAgICAgICAgdGhyZWFkX2lkLCBsZW4sIChjaGFyICopIGJ1ZiApOworCisgICAgbWJlZHRsc19wcmludGYoICIgIFsgIyVsZCBdICAuIENsb3NpbmcgdGhlIGNvbm5lY3Rpb24uLi4iLCB0aHJlYWRfaWQgKTsKKworICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSggJnNzbCApICkgPCAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJgorICAgICAgICAgICAgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFsgIyVsZCBdICBmYWlsZWQ6IG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSByZXR1cm5lZCAtMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICB0aHJlYWRfaWQsIHJldCApOworICAgICAgICAgICAgZ290byB0aHJlYWRfZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICByZXQgPSAwOworCit0aHJlYWRfZXhpdDoKKworI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIGVycm9yX2J1ZlsxMDBdOworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGVycm9yX2J1ZiwgMTAwICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCIgIFsgIyVsZCBdICBMYXN0IGVycm9yIHdhczogLTB4JTA0eCAtICVzXG5cbiIsCisgICAgICAgICAgICAgICB0aHJlYWRfaWQsIC1yZXQsIGVycm9yX2J1ZiApOworICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19uZXRfZnJlZSggY2xpZW50X2ZkICk7CisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworCisgICAgdGhyZWFkX2luZm8tPnRocmVhZF9jb21wbGV0ZSA9IDE7CisKKyAgICByZXR1cm4oIE5VTEwgKTsKK30KKworc3RhdGljIGludCB0aHJlYWRfY3JlYXRlKCBtYmVkdGxzX25ldF9jb250ZXh0ICpjbGllbnRfZmQgKQoreworICAgIGludCByZXQsIGk7CisKKyAgICAvKgorICAgICAqIEZpbmQgaW4tYWN0aXZlIG9yIGZpbmlzaGVkIHRocmVhZCBzbG90CisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IE1BWF9OVU1fVEhSRUFEUzsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCB0aHJlYWRzW2ldLmFjdGl2ZSA9PSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmKCB0aHJlYWRzW2ldLmRhdGEudGhyZWFkX2NvbXBsZXRlID09IDEgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyBtYWluIF0gIENsZWFuaW5nIHVwIHRocmVhZCAlZFxuIiwgaSApOworICAgICAgICAgICAgcHRocmVhZF9qb2luKHRocmVhZHNbaV0udGhyZWFkLCBOVUxMICk7CisgICAgICAgICAgICBtZW1zZXQoICZ0aHJlYWRzW2ldLCAwLCBzaXplb2YocHRocmVhZF9pbmZvX3QpICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBpID09IE1BWF9OVU1fVEhSRUFEUyApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIC8qCisgICAgICogRmlsbCB0aHJlYWQtaW5mbyBmb3IgdGhyZWFkCisgICAgICovCisgICAgbWVtY3B5KCAmdGhyZWFkc1tpXS5kYXRhLCAmYmFzZV9pbmZvLCBzaXplb2YoYmFzZV9pbmZvKSApOworICAgIHRocmVhZHNbaV0uYWN0aXZlID0gMTsKKyAgICBtZW1jcHkoICZ0aHJlYWRzW2ldLmRhdGEuY2xpZW50X2ZkLCBjbGllbnRfZmQsIHNpemVvZiggbWJlZHRsc19uZXRfY29udGV4dCApICk7CisKKyAgICBpZiggKCByZXQgPSBwdGhyZWFkX2NyZWF0ZSggJnRocmVhZHNbaV0udGhyZWFkLCBOVUxMLCBoYW5kbGVfc3NsX2Nvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aHJlYWRzW2ldLmRhdGEgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1haW4oIHZvaWQgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19uZXRfY29udGV4dCBsaXN0ZW5fZmQsIGNsaWVudF9mZDsKKyAgICBjb25zdCBjaGFyIHBlcnNbXSA9ICJzc2xfcHRocmVhZF9zZXJ2ZXIiOworCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgbWJlZHRsc194NTA5X2NydCBzcnZjZXJ0OworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2FjaGFpbjsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGtleTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIHVuc2lnbmVkIGNoYXIgYWxsb2NfYnVmWzEwMDAwMF07CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisgICAgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCBjYWNoZTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggYWxsb2NfYnVmLCBzaXplb2YoYWxsb2NfYnVmKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisgICAgbWJlZHRsc19zc2xfY2FjaGVfaW5pdCggJmNhY2hlICk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJnNydmNlcnQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjYWNoYWluICk7CisKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworICAgIG1lbXNldCggdGhyZWFkcywgMCwgc2l6ZW9mKHRocmVhZHMpICk7CisgICAgbWJlZHRsc19uZXRfaW5pdCggJmxpc3Rlbl9mZCApOworICAgIG1iZWR0bHNfbmV0X2luaXQoICZjbGllbnRfZmQgKTsKKworICAgIG1iZWR0bHNfbXV0ZXhfaW5pdCggJmRlYnVnX211dGV4ICk7CisKKyAgICBiYXNlX2luZm8uY29uZmlnID0gJmNvbmY7CisKKyAgICAvKgorICAgICAqIFdlIHVzZSBvbmx5IGEgc2luZ2xlIGVudHJvcHkgc291cmNlIHRoYXQgaXMgdXNlZCBpbiBhbGwgdGhlIHRocmVhZHMuCisgICAgICovCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisKKyAgICAvKgorICAgICAqIDEuIExvYWQgdGhlIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBSU0Ega2V5CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBMb2FkaW5nIHRoZSBzZXJ2ZXIgY2VydC4gYW5kIGtleS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgLyoKKyAgICAgKiBUaGlzIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB1c2VzIGVtYmVkZGVkIHRlc3QgY2VydGlmaWNhdGVzLgorICAgICAqIEluc3RlYWQsIHlvdSBtYXkgd2FudCB0byB1c2UgbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCkgdG8gcmVhZCB0aGUKKyAgICAgKiBzZXJ2ZXIgYW5kIENBIGNlcnRpZmljYXRlcywgYXMgd2VsbCBhcyBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoKS4KKyAgICAgKi8KKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmc3J2Y2VydCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X3Nydl9jcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9zcnZfY3J0X2xlbiApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZjYWNoYWluLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2FzX3BlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X2Nhc19wZW1fbGVuICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wa19pbml0KCAmcGtleSApOworICAgIHJldCA9ICBtYmVkdGxzX3BrX3BhcnNlX2tleSggJnBrZXksIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9zcnZfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9zcnZfa2V5X2xlbiwgTlVMTCwgMCApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9rZXkgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAxYi4gU2VlZCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWQ6IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAtMHglMDR4XG4iLAorICAgICAgICAgICAgICAgIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDFjLiBQcmVwYXJlIFNTTCBjb25maWd1cmF0aW9uCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2V0dGluZyB1cCB0aGUgU1NMIGRhdGEuLi4uIiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCAmY29uZiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfSVNfU0VSVkVSLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9QUkVTRVRfREVGQVVMVCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWQ6IG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyByZXR1cm5lZCAtMHglMDR4XG4iLAorICAgICAgICAgICAgICAgIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCAmY29uZiwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgbXlfbXV0ZXhlZF9kZWJ1Zywgc3Rkb3V0ICk7CisKKyAgICAvKiBtYmVkdGxzX3NzbF9jYWNoZV9nZXQoKSBhbmQgbWJlZHRsc19zc2xfY2FjaGVfc2V0KCkgYXJlIHRocmVhZC1zYWZlIGlmCisgICAgICogTUJFRFRMU19USFJFQURJTkdfQyBpcyBzZXQuCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorICAgIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl9jYWNoZSggJmNvbmYsICZjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY2FjaGVfZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jYWNoZV9zZXQgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbiggJmNvbmYsICZjYWNoYWluLCBOVUxMICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCggJmNvbmYsICZzcnZjZXJ0LCAmcGtleSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworCisgICAgLyoKKyAgICAgKiAyLiBTZXR1cCB0aGUgbGlzdGVuaW5nIFRDUCBzb2NrZXQKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBCaW5kIG9uIGh0dHBzOi8vbG9jYWxob3N0OjQ0MzMvIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfYmluZCggJmxpc3Rlbl9mZCwgTlVMTCwgIjQ0MzMiLCBNQkVEVExTX05FVF9QUk9UT19UQ1AgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfYmluZCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKK3Jlc2V0OgorI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIGVycm9yX2J1ZlsxMDBdOworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGVycm9yX2J1ZiwgMTAwICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbIG1haW4gXSAgTGFzdCBlcnJvciB3YXM6IC0weCUwNHggLSAlc1xuIiwgLXJldCwgZXJyb3JfYnVmICk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIDMuIFdhaXQgdW50aWwgYSBjbGllbnQgY29ubmVjdHMKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyBtYWluIF0gIFdhaXRpbmcgZm9yIGEgcmVtb3RlIGNvbm5lY3Rpb25cbiIgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2FjY2VwdCggJmxpc3Rlbl9mZCwgJmNsaWVudF9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFsgbWFpbiBdIGZhaWxlZDogbWJlZHRsc19uZXRfYWNjZXB0IHJldHVybmVkIC0weCUwNHhcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgIFsgbWFpbiBdICBva1xuIiApOworICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbIG1haW4gXSAgQ3JlYXRpbmcgYSBuZXcgdGhyZWFkXG4iICk7CisKKyAgICBpZiggKCByZXQgPSB0aHJlYWRfY3JlYXRlKCAmY2xpZW50X2ZkICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbIG1haW4gXSAgZmFpbGVkOiB0aHJlYWRfY3JlYXRlIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgbWJlZHRsc19uZXRfZnJlZSggJmNsaWVudF9mZCApOworICAgICAgICBnb3RvIHJlc2V0OworICAgIH0KKworICAgIHJldCA9IDA7CisgICAgZ290byByZXNldDsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZzcnZjZXJ0ICk7CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGtleSApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9mcmVlKCAmY2FjaGUgKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoICZjb25mICk7CisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmbGlzdGVuX2ZkICk7CisKKyAgICBtYmVkdGxzX211dGV4X2ZyZWUoICZkZWJ1Z19tdXRleCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0NFUlRTX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYKKyAgICAgICAgICBNQkVEVExTX1NTTF9UTFNfQyAmJiBNQkVEVExTX1NTTF9TUlZfQyAmJiBNQkVEVExTX05FVF9DICYmCisgICAgICAgICAgTUJFRFRMU19SU0FfQyAmJiBNQkVEVExTX0NUUl9EUkJHX0MgJiYgTUJFRFRMU19USFJFQURJTkdfQyAmJgorICAgICAgICAgIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQgJiYgTUJFRFRMU19QRU1fUEFSU0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfc2VydmVyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9zZXJ2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDU0ZjE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfc2VydmVyLmMKQEAgLTAsMCArMSw0MDEgQEAKKy8qCisgKiAgU1NMIHNlcnZlciBkZW1vbnN0cmF0aW9uIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc190aW1lICAgICAgIHRpbWUKKyNkZWZpbmUgbWJlZHRsc190aW1lX3QgICAgIHRpbWVfdCAKKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpIHx8ICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykgfHwgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8ICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX0NFUlRTX0MgYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DICIKKyAgICAgICAgICAgImFuZC9vciBNQkVEVExTX1NTTF9UTFNfQyBhbmQvb3IgTUJFRFRMU19TU0xfU1JWX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfTkVUX0MgYW5kL29yIE1CRURUTFNfUlNBX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3IgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICIKKyAgICAgICAgICAgImFuZC9vciBNQkVEVExTX1BFTV9QQVJTRV9DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NlcnRzLmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZGVidWcuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF9jYWNoZS5oIgorI2VuZGlmCisKKyNkZWZpbmUgSFRUUF9SRVNQT05TRSBcCisgICAgIkhUVFAvMS4wIDIwMCBPS1xyXG5Db250ZW50LVR5cGU6IHRleHQvaHRtbFxyXG5cclxuIiBcCisgICAgIjxoMj5tYmVkIFRMUyBUZXN0IFNlcnZlcjwvaDI+XHJcbiIgXAorICAgICI8cD5TdWNjZXNzZnVsIGNvbm5lY3Rpb24gdXNpbmc6ICVzPC9wPlxyXG4iCisKKyNkZWZpbmUgREVCVUdfTEVWRUwgMAorCitzdGF0aWMgdm9pZCBteV9kZWJ1Zyggdm9pZCAqY3R4LCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyICkKK3sKKyAgICAoKHZvaWQpIGxldmVsKTsKKworICAgIG1iZWR0bHNfZnByaW50ZiggKEZJTEUgKikgY3R4LCAiJXM6JTA0ZDogJXMiLCBmaWxlLCBsaW5lLCBzdHIgKTsKKyAgICBmZmx1c2goICAoRklMRSAqKSBjdHggICk7Cit9CisKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBpbnQgcmV0LCBsZW47CisgICAgbWJlZHRsc19uZXRfY29udGV4dCBsaXN0ZW5fZmQsIGNsaWVudF9mZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gInNzbF9zZXJ2ZXIiOworCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgbWJlZHRsc194NTA5X2NydCBzcnZjZXJ0OworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwa2V5OworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0IGNhY2hlOworI2VuZGlmCisKKyAgICBtYmVkdGxzX25ldF9pbml0KCAmbGlzdGVuX2ZkICk7CisgICAgbWJlZHRsc19uZXRfaW5pdCggJmNsaWVudF9mZCApOworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisgICAgbWJlZHRsc19zc2xfY2FjaGVfaW5pdCggJmNhY2hlICk7CisjZW5kaWYKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZzcnZjZXJ0ICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmcGtleSApOworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVCVUdfQykKKyAgICBtYmVkdGxzX2RlYnVnX3NldF90aHJlc2hvbGQoIERFQlVHX0xFVkVMICk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogMS4gTG9hZCB0aGUgY2VydGlmaWNhdGVzIGFuZCBwcml2YXRlIFJTQSBrZXkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIExvYWRpbmcgdGhlIHNlcnZlciBjZXJ0LiBhbmQga2V5Li4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAvKgorICAgICAqIFRoaXMgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHVzZXMgZW1iZWRkZWQgdGVzdCBjZXJ0aWZpY2F0ZXMuCisgICAgICogSW5zdGVhZCwgeW91IG1heSB3YW50IHRvIHVzZSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoKSB0byByZWFkIHRoZQorICAgICAqIHNlcnZlciBhbmQgQ0EgY2VydGlmaWNhdGVzLCBhcyB3ZWxsIGFzIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSgpLgorICAgICAqLworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZzcnZjZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3Rfc3J2X2NydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X3Nydl9jcnRfbGVuICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJnNydmNlcnQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9jYXNfcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfY2FzX3BlbV9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSAgbWJlZHRsc19wa19wYXJzZV9rZXkoICZwa2V5LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3Rfc3J2X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9sZW4sIE5VTEwsIDAgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcGtfcGFyc2Vfa2V5IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMi4gU2V0dXAgdGhlIGxpc3RlbmluZyBUQ1Agc29ja2V0CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQmluZCBvbiBodHRwczovL2xvY2FsaG9zdDo0NDMzLyAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2JpbmQoICZsaXN0ZW5fZmQsIE5VTEwsICI0NDMzIiwgTUJFRFRMU19ORVRfUFJPVE9fVENQICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2JpbmQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAzLiBTZWVkIHRoZSBSTkcKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiA0LiBTZXR1cCBzdHVmZgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNldHRpbmcgdXAgdGhlIFNTTCBkYXRhLi4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCAmY29uZiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfSVNfU0VSVkVSLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9QUkVTRVRfREVGQVVMVCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3NzbF9jb25mX3JuZyggJmNvbmYsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX2RiZyggJmNvbmYsIG15X2RlYnVnLCBzdGRvdXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fY2FjaGUoICZjb25mLCAmY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NhY2hlX2dldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY2FjaGVfc2V0ICk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4oICZjb25mLCBzcnZjZXJ0Lm5leHQsIE5VTEwgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0KCAmY29uZiwgJnNydmNlcnQsICZwa2V5ICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXR1cCggJnNzbCwgJmNvbmYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2V0dXAgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCityZXNldDoKKyNpZmRlZiBNQkVEVExTX0VSUk9SX0MKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciBlcnJvcl9idWZbMTAwXTsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBlcnJvcl9idWYsIDEwMCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiTGFzdCBlcnJvciB3YXM6ICVkIC0gJXNcblxuIiwgcmV0LCBlcnJvcl9idWYgKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZjbGllbnRfZmQgKTsKKworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQoICZzc2wgKTsKKworICAgIC8qCisgICAgICogMy4gV2FpdCB1bnRpbCBhIGNsaWVudCBjb25uZWN0cworICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFdhaXRpbmcgZm9yIGEgcmVtb3RlIGNvbm5lY3Rpb24gLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9hY2NlcHQoICZsaXN0ZW5fZmQsICZjbGllbnRfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2FjY2VwdCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oICZzc2wsICZjbGllbnRfZmQsIG1iZWR0bHNfbmV0X3NlbmQsIG1iZWR0bHNfbmV0X3JlY3YsIE5VTEwgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDUuIEhhbmRzaGFrZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFBlcmZvcm1pbmcgdGhlIFNTTC9UTFMgaGFuZHNoYWtlLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICB3aGlsZSggKCByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2UoICZzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiA2LiBSZWFkIHRoZSBIVFRQIFJlcXVlc3QKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgPCBSZWFkIGZyb20gY2xpZW50OiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGxlbiA9IHNpemVvZiggYnVmICkgLSAxOworICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCAmc3NsLCBidWYsIGxlbiApOworCisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYoIHJldCA8PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCByZXQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfU1NMX1BFRVJfQ0xPU0VfTk9USUZZOgorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBjb25uZWN0aW9uIHdhcyBjbG9zZWQgZ3JhY2VmdWxseVxuIiApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfTkVUX0NPTk5fUkVTRVQ6CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGNvbm5lY3Rpb24gd2FzIHJlc2V0IGJ5IHBlZXJcbiIgKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBtYmVkdGxzX3NzbF9yZWFkIHJldHVybmVkIC0weCV4XG4iLCAtcmV0ICk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGxlbiA9IHJldDsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgJWQgYnl0ZXMgcmVhZFxuXG4lcyIsIGxlbiwgKGNoYXIgKikgYnVmICk7CisKKyAgICAgICAgaWYoIHJldCA+IDAgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHdoaWxlKCAxICk7CisKKyAgICAvKgorICAgICAqIDcuIFdyaXRlIHRoZSAyMDAgUmVzcG9uc2UKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgPiBXcml0ZSB0byBjbGllbnQ6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBsZW4gPSBzcHJpbnRmKCAoY2hhciAqKSBidWYsIEhUVFBfUkVTUE9OU0UsCisgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlKCAmc3NsICkgKTsKKworICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlKCAmc3NsLCBidWYsIGxlbiApICkgPD0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX05FVF9DT05OX1JFU0VUICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgcGVlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb25cblxuIiApOworICAgICAgICAgICAgZ290byByZXNldDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJiByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxlbiA9IHJldDsKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAlZCBieXRlcyB3cml0dGVuXG5cbiVzXG4iLCBsZW4sIChjaGFyICopIGJ1ZiApOworCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ2xvc2luZyB0aGUgY29ubmVjdGlvbi4uLiIgKTsKKworICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSggJnNzbCApICkgPCAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJgorICAgICAgICAgICAgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byByZXNldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICByZXQgPSAwOworICAgIGdvdG8gcmVzZXQ7CisKK2V4aXQ6CisKKyNpZmRlZiBNQkVEVExTX0VSUk9SX0MKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciBlcnJvcl9idWZbMTAwXTsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBlcnJvcl9idWYsIDEwMCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiTGFzdCBlcnJvciB3YXM6ICVkIC0gJXNcblxuIiwgcmV0LCBlcnJvcl9idWYgKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZjbGllbnRfZmQgKTsKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmbGlzdGVuX2ZkICk7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZzcnZjZXJ0ICk7CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGtleSApOworICAgIG1iZWR0bHNfc3NsX2ZyZWUoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggJmNvbmYgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisgICAgbWJlZHRsc19zc2xfY2FjaGVfZnJlZSggJmNhY2hlICk7CisjZW5kaWYKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfQ0VSVFNfQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJgorICAgICAgICAgIE1CRURUTFNfU1NMX1RMU19DICYmIE1CRURUTFNfU1NMX1NSVl9DICYmIE1CRURUTFNfTkVUX0MgJiYKKyAgICAgICAgICBNQkVEVExTX1JTQV9DICYmIE1CRURUTFNfQ1RSX0RSQkdfQyAmJiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAgICAgICAgICAmJiBNQkVEVExTX0ZTX0lPICYmIE1CRURUTFNfUEVNX1BBUlNFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX3NlcnZlcjIuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX3NlcnZlcjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGJkYTU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfc2VydmVyMi5jCkBAIC0wLDAgKzEsMjMzOCBAQAorLyoKKyAqICBTU0wgY2xpZW50IHdpdGggb3B0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2RlZmluZSBtYmVkdGxzX3RpbWUgICAgICAgdGltZQorI2RlZmluZSBtYmVkdGxzX3RpbWVfdCAgICAgdGltZV90CisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19TU0xfVExTX0MgYW5kL29yIE1CRURUTFNfU1NMX1NSVl9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX05FVF9DIGFuZC9vciBNQkVEVExTX0NUUl9EUkJHX0MgYW5kL29yIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsLmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2VydHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9kZWJ1Zy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvdGltaW5nLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgIWRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisjaW5jbHVkZSAibWJlZHRscy9zc2xfY2FjaGUuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9USUNLRVRfQykKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF90aWNrZXQuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DT09LSUVfQykKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF9jb29raWUuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyNpbmNsdWRlICJtYmVkdGxzL21lbW9yeV9idWZmZXJfYWxsb2MuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjZGVmaW5lIFNOSV9PUFRJT04KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNkZWZpbmUgREZMX1NFUlZFUl9BRERSICAgICAgICAgTlVMTAorI2RlZmluZSBERkxfU0VSVkVSX1BPUlQgICAgICAgICAiNDQzMyIKKyNkZWZpbmUgREZMX0RFQlVHX0xFVkVMICAgICAgICAgMAorI2RlZmluZSBERkxfTkJJTyAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERGTF9SRUFEX1RJTUVPVVQgICAgICAgIDAKKyNkZWZpbmUgREZMX0NBX0ZJTEUgICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0NBX1BBVEggICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0NSVF9GSUxFICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0tFWV9GSUxFICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0NSVF9GSUxFMiAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0tFWV9GSUxFMiAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX1BTSyAgICAgICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX1BTS19JREVOVElUWSAgICAgICAgIkNsaWVudF9pZGVudGl0eSIKKyNkZWZpbmUgREZMX0VDSlBBS0VfUFcgICAgICAgICAgTlVMTAorI2RlZmluZSBERkxfUFNLX0xJU1QgICAgICAgICAgICBOVUxMCisjZGVmaW5lIERGTF9GT1JDRV9DSVBIRVIgICAgICAgIDAKKyNkZWZpbmUgREZMX1ZFUlNJT05fU1VJVEVTICAgICAgTlVMTAorI2RlZmluZSBERkxfUkVORUdPVElBVElPTiAgICAgICBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RJU0FCTEVECisjZGVmaW5lIERGTF9BTExPV19MRUdBQ1kgICAgICAgIC0yCisjZGVmaW5lIERGTF9SRU5FR09USUFURSAgICAgICAgIDAKKyNkZWZpbmUgREZMX1JFTkVHT19ERUxBWSAgICAgICAgLTIKKyNkZWZpbmUgREZMX1JFTkVHT19QRVJJT0QgICAgICAgLTEKKyNkZWZpbmUgREZMX0VYQ0hBTkdFUyAgICAgICAgICAgMQorI2RlZmluZSBERkxfTUlOX1ZFUlNJT04gICAgICAgICAtMQorI2RlZmluZSBERkxfTUFYX1ZFUlNJT04gICAgICAgICAtMQorI2RlZmluZSBERkxfQVJDNCAgICAgICAgICAgICAgICAtMQorI2RlZmluZSBERkxfQVVUSF9NT0RFICAgICAgICAgICAtMQorI2RlZmluZSBERkxfTUZMX0NPREUgICAgICAgICAgICBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fTk9ORQorI2RlZmluZSBERkxfVFJVTkNfSE1BQyAgICAgICAgICAtMQorI2RlZmluZSBERkxfVElDS0VUUyAgICAgICAgICAgICBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFNfRU5BQkxFRAorI2RlZmluZSBERkxfVElDS0VUX1RJTUVPVVQgICAgICA4NjQwMAorI2RlZmluZSBERkxfQ0FDSEVfTUFYICAgICAgICAgICAtMQorI2RlZmluZSBERkxfQ0FDSEVfVElNRU9VVCAgICAgICAtMQorI2RlZmluZSBERkxfU05JICAgICAgICAgICAgICAgICBOVUxMCisjZGVmaW5lIERGTF9BTFBOX1NUUklORyAgICAgICAgIE5VTEwKKyNkZWZpbmUgREZMX0RITV9GSUxFICAgICAgICAgICAgTlVMTAorI2RlZmluZSBERkxfVFJBTlNQT1JUICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNCisjZGVmaW5lIERGTF9DT09LSUVTICAgICAgICAgICAgIDEKKyNkZWZpbmUgREZMX0FOVElfUkVQTEFZICAgICAgICAgLTEKKyNkZWZpbmUgREZMX0hTX1RPX01JTiAgICAgICAgICAgMAorI2RlZmluZSBERkxfSFNfVE9fTUFYICAgICAgICAgICAwCisjZGVmaW5lIERGTF9CQURNQUNfTElNSVQgICAgICAgIC0xCisjZGVmaW5lIERGTF9FWFRFTkRFRF9NUyAgICAgICAgIC0xCisjZGVmaW5lIERGTF9FVE0gICAgICAgICAgICAgICAgIC0xCisKKyNkZWZpbmUgTE9OR19SRVNQT05TRSAiPHA+MDEtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWhcclxuIiBcCisgICAgIjAyLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWhcclxuIiAgXAorICAgICIwMy1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoXHJcbiIgIFwKKyAgICAiMDQtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaFxyXG4iICBcCisgICAgIjA1LWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWhcclxuIiAgXAorICAgICIwNi1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoXHJcbiIgIFwKKyAgICAiMDctYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWg8L3A+XHJcbiIKKworLyogVW5jb21tZW50IExPTkdfUkVTUE9OU0UgYXQgdGhlIGVuZCBvZiBIVFRQX1JFU1BPTlNFIHRvIHRlc3Qgc2VuZGluZyBsb25nZXIKKyAqIHBhY2tldHMgKGZvciBmcmFnbWVudGF0aW9uIHB1cnBvc2VzKSAqLworI2RlZmluZSBIVFRQX1JFU1BPTlNFIFwKKyAgICAiSFRUUC8xLjAgMjAwIE9LXHJcbkNvbnRlbnQtVHlwZTogdGV4dC9odG1sXHJcblxyXG4iIFwKKyAgICAiPGgyPm1iZWQgVExTIFRlc3QgU2VydmVyPC9oMj5cclxuIiBcCisgICAgIjxwPlN1Y2Nlc3NmdWwgY29ubmVjdGlvbiB1c2luZzogJXM8L3A+XHJcbiIgLy8gTE9OR19SRVNQT05TRQorCisvKgorICogU2l6ZSBvZiB0aGUgYmFzaWMgSS9PIGJ1ZmZlci4gQWJsZSB0byBob2xkIG91ciBkZWZhdWx0IHJlc3BvbnNlLgorICoKKyAqIFlvdSB3aWxsIG5lZWQgdG8gYWRhcHQgdGhlIG1iZWR0bHNfc3NsX2dldF9ieXRlc19hdmFpbCgpIHRlc3QgaW4gc3NsLW9wdC5zaAorICogaWYgeW91IGNoYW5nZSB0aGlzIHZhbHVlIHRvIHNvbWV0aGluZyBvdXRzaWRlIHRoZSByYW5nZSA8PSAxMDAgb3IgPiA1MDAKKyAqLworI2RlZmluZSBJT19CVUZfTEVOICAgICAgMjAwCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjZGVmaW5lIFVTQUdFX0lPIFwKKyAgICAiICAgIGNhX2ZpbGU9JSVzICAgICAgICAgIFRoZSBzaW5nbGUgZmlsZSBjb250YWluaW5nIHRoZSB0b3AtbGV2ZWwgQ0EocykgeW91IGZ1bGx5IHRydXN0XG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJcIiAocHJlLWxvYWRlZClcbiIgXAorICAgICIgICAgY2FfcGF0aD0lJXMgICAgICAgICAgVGhlIHBhdGggY29udGFpbmluZyB0aGUgdG9wLWxldmVsIENBKHMpIHlvdSBmdWxseSB0cnVzdFxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKHByZS1sb2FkZWQpIChvdmVycmlkZXMgY2FfZmlsZSlcbiIgXAorICAgICIgICAgY3J0X2ZpbGU9JSVzICAgICAgICAgWW91ciBvd24gY2VydCBhbmQgY2hhaW4gKGluIGJvdHRvbSB0byB0b3Agb3JkZXIsIHRvcCBtYXkgYmUgb21pdHRlZClcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBzZWUgbm90ZSBhZnRlciBrZXlfZmlsZTJcbiIgXAorICAgICIgICAga2V5X2ZpbGU9JSVzICAgICAgICAgZGVmYXVsdDogc2VlIG5vdGUgYWZ0ZXIga2V5X2ZpbGUyXG4iIFwKKyAgICAiICAgIGNydF9maWxlMj0lJXMgICAgICAgIFlvdXIgc2Vjb25kIGNlcnQgYW5kIGNoYWluIChpbiBib3R0b20gdG8gdG9wIG9yZGVyLCB0b3AgbWF5IGJlIG9taXR0ZWQpXG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogc2VlIG5vdGUgYWZ0ZXIga2V5X2ZpbGUyXG4iIFwKKyAgICAiICAgIGtleV9maWxlMj0lJXMgICAgICAgIGRlZmF1bHQ6IHNlZSBub3RlIGJlbG93XG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogaWYgbmVpdGhlciBjcnRfZmlsZS9rZXlfZmlsZSBub3IgY3J0X2ZpbGUyL2tleV9maWxlMiBhcmUgdXNlZCxcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVsb2FkZWQgY2VydGlmaWNhdGUocykgYW5kIGtleShzKSBhcmUgdXNlZCBpZiBhdmFpbGFibGVcbiIgXAorICAgICIgICAgZGhtX2ZpbGU9JSVzICAgICAgICBGaWxlIGNvbnRhaW5pbmcgRGlmZmllLUhlbGxtYW4gcGFyYW1ldGVyc1xuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcHJlbG9hZGVkIHBhcmFtZXRlcnNcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0lPIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIE5vIGZpbGUgb3BlcmF0aW9ucyBhdmFpbGFibGUgKE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQpXG4iIFwKKyAgICAiXG4iCisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworI2Vsc2UKKyNkZWZpbmUgVVNBR0VfSU8gIiIKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorI2RlZmluZSBVU0FHRV9QU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBwc2s9JSVzICAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiIChpbiBoZXgsIHdpdGhvdXQgMHgpXG4iIFwKKyAgICAiICAgIHBza19pZGVudGl0eT0lJXMgICAgIGRlZmF1bHQ6IFwiQ2xpZW50X2lkZW50aXR5XCJcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX1BTSyAiIgorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisjZGVmaW5lIFVTQUdFX1RJQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICB0aWNrZXRzPSUlZCAgICAgICAgICBkZWZhdWx0OiAxIChlbmFibGVkKVxuIiAgICAgICBcCisgICAgIiAgICB0aWNrZXRfdGltZW91dD0lJWQgICBkZWZhdWx0OiA4NjQwMCAob25lIGRheSlcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX1RJQ0tFVFMgIiIKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyNkZWZpbmUgVVNBR0VfQ0FDSEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBjYWNoZV9tYXg9JSVkICAgICAgICBkZWZhdWx0OiBjYWNoZSBkZWZhdWx0ICg1MClcbiIgICAgXAorICAgICIgICAgY2FjaGVfdGltZW91dD0lJWQgICAgZGVmYXVsdDogY2FjaGUgZGVmYXVsdCAoMWQpXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9DQUNIRSAiIgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NBQ0hFX0MgKi8KKworI2lmIGRlZmluZWQoU05JX09QVElPTikKKyNkZWZpbmUgVVNBR0VfU05JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBzbmk9JSVzICAgICAgICAgICAgICBuYW1lMSxjZXJ0MSxrZXkxLGNhMSxjcmwxLGF1dGgxWywuLi5dXG4iICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRpc2FibGVkXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9TTkkgIiIKKyNlbmRpZiAvKiBTTklfT1BUSU9OICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisjZGVmaW5lIFVTQUdFX01BWF9GUkFHX0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgbWF4X2ZyYWdfbGVuPSUlZCAgICAgZGVmYXVsdDogMTYzODQgKHRscyBkZWZhdWx0KVxuIiAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogNTEyLCAxMDI0LCAyMDQ4LCA0MDk2XG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9NQVhfRlJBR19MRU4gIiIKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorI2RlZmluZSBVU0FHRV9UUlVOQ19ITUFDIFwKKyAgICAiICAgIHRydW5jX2htYWM9JSVkICAgICAgIGRlZmF1bHQ6IGxpYnJhcnkgZGVmYXVsdFxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfVFJVTkNfSE1BQyAiIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCisjZGVmaW5lIFVTQUdFX0FMUE4gXAorICAgICIgICAgYWxwbj0lJXMgICAgICAgICAgICAgZGVmYXVsdDogXCJcIiAoZGlzYWJsZWQpXG4iICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlOiBzcGR5LzEsaHR0cC8xLjFcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0FMUE4gIiIKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZKQorI2RlZmluZSBVU0FHRV9DT09LSUVTIFwKKyAgICAiICAgIGNvb2tpZXM9MC8xLy0xICAgICAgZGVmYXVsdDogMSAoZW5hYmxlZClcbiIgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgMDogZGlzYWJsZWQsIC0xOiBsaWJyYXJ5IGRlZmF1bHQgKGJyb2tlbilcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0NPT0tJRVMgIiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQorI2RlZmluZSBVU0FHRV9BTlRJX1JFUExBWSBcCisgICAgIiAgICBhbnRpX3JlcGxheT0wLzEgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IGVuYWJsZWQpXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9BTlRJX1JFUExBWSAiIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUKQorI2RlZmluZSBVU0FHRV9CQURNQUNfTElNSVQgXAorICAgICIgICAgYmFkbWFjX2xpbWl0PSUlZCAgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdDogZGlzYWJsZWQpXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9CQURNQUNfTElNSVQgIiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorI2RlZmluZSBVU0FHRV9EVExTIFwKKyAgICAiICAgIGR0bHM9JSVkICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKFRMUylcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBoc190aW1lb3V0PSUlZC0lJWQgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdDogMTAwMC02MDAwMClcbiIgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSBvZiBEVExTIGhhbmRzaGFrZSB0aW1lb3V0cyBpbiBtaWxsaXNlY3NcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0RUTFMgIiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorI2RlZmluZSBVU0FHRV9FTVMgXAorICAgICIgICAgZXh0ZW5kZWRfbXM9MC8xICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiBvbilcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0VNUyAiIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisjZGVmaW5lIFVTQUdFX0VUTSBcCisgICAgIiAgICBldG09MC8xICAgICAgICAgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IG9uKVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfRVRNICIiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyNkZWZpbmUgVVNBR0VfUkVORUdPIFwKKyAgICAiICAgIHJlbmVnb3RpYXRpb249JSVkICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgICAgIFwKKyAgICAiICAgIHJlbmVnb3RpYXRlPSUlZCAgICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgICAgIFwKKyAgICAiICAgIHJlbmVnb19kZWxheT0lJWQgICAgIGRlZmF1bHQ6IC0yIChsaWJyYXJ5IGRlZmF1bHQpXG4iIFwKKyAgICAiICAgIHJlbmVnb19wZXJpb2Q9JSVkICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQpXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9SRU5FR08gIiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisjZGVmaW5lIFVTQUdFX0VDSlBBS0UgXAorICAgICIgICAgZWNqcGFrZV9wdz0lJXMgICAgICAgZGVmYXVsdDogbm9uZSAoZGlzYWJsZWQpXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9FQ0pQQUtFICIiCisjZW5kaWYKKworI2RlZmluZSBVU0FHRSBcCisgICAgIlxuIHVzYWdlOiBzc2xfc2VydmVyMiBwYXJhbT08Pi4uLlxuIiAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIGFjY2VwdGFibGUgcGFyYW1ldGVyczpcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBzZXJ2ZXJfYWRkcj0lJWQgICAgICBkZWZhdWx0OiAoYWxsIGludGVyZmFjZXMpXG4iICBcCisgICAgIiAgICBzZXJ2ZXJfcG9ydD0lJWQgICAgICBkZWZhdWx0OiA0NDMzXG4iICAgICAgICAgICAgICBcCisgICAgIiAgICBkZWJ1Z19sZXZlbD0lJWQgICAgICBkZWZhdWx0OiAwIChkaXNhYmxlZClcbiIgICAgICBcCisgICAgIiAgICBuYmlvPSUlZCAgICAgICAgICAgICBkZWZhdWx0OiAwIChibG9ja2luZyBJL08pXG4iICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IDEgKG5vbi1ibG9ja2luZyksIDIgKGFkZGVkIGRlbGF5cylcbiIgXAorICAgICIgICAgcmVhZF90aW1lb3V0PSUlZCAgICAgZGVmYXVsdDogMCBtcyAobm8gdGltZW91dClcbiIgICAgXAorICAgICJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVTQUdFX0RUTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVTQUdFX0NPT0tJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVTQUdFX0FOVElfUkVQTEFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVTQUdFX0JBRE1BQ19MSU1JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgYXV0aF9tb2RlPSUlcyAgICAgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdDogbm9uZSlcbiIgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG5vbmUsIG9wdGlvbmFsLCByZXF1aXJlZFxuIiBcCisgICAgVVNBR0VfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfU05JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfUFNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfRUNKUEFLRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBhbGxvd19sZWdhY3k9JSVkICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiBubylcbiIgICAgICBcCisgICAgVVNBR0VfUkVORUdPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBleGNoYW5nZXM9JSVkICAgICAgICBkZWZhdWx0OiAxXG4iICAgICAgICAgICAgICAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfVElDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfQ0FDSEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfTUFYX0ZSQUdfTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfVFJVTkNfSE1BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfQUxQTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfRU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfRVRNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBhcmM0PSUlZCAgICAgICAgICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiAwKVxuIiBcCisgICAgIiAgICBtaW5fdmVyc2lvbj0lJXMgICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiB0bHMxKVxuIiAgICAgICBcCisgICAgIiAgICBtYXhfdmVyc2lvbj0lJXMgICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiB0bHMxXzIpXG4iICAgICBcCisgICAgIiAgICBmb3JjZV92ZXJzaW9uPSUlcyAgICBkZWZhdWx0OiBcIlwiIChub25lKVxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHNzbDMsIHRsczEsIHRsczFfMSwgdGxzMV8yLCBkdGxzMSwgZHRsczFfMlxuIiBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICB2ZXJzaW9uX3N1aXRlcz1hLGIsYyxkICAgICAgcGVyLXZlcnNpb24gY2lwaGVyc3VpdGVzXG4iICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgZnJvbSBzc2wzIHRvIHRsczFfMlxuIiAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogYWxsIGVuYWJsZWRcbiIgICAgICAgICAgICBcCisgICAgIiAgICBmb3JjZV9jaXBoZXJzdWl0ZT08bmFtZT4gICAgZGVmYXVsdDogYWxsIGVuYWJsZWRcbiIgICAgICAgICAgICBcCisgICAgIiBhY2NlcHRhYmxlIGNpcGhlcnN1aXRlIG5hbWVzOlxuIgorCisvKgorICogZ2xvYmFsIG9wdGlvbnMKKyAqLworc3RydWN0IG9wdGlvbnMKK3sKKyAgICBjb25zdCBjaGFyICpzZXJ2ZXJfYWRkcjsgICAgLyogYWRkcmVzcyBvbiB3aGljaCB0aGUgc3NsIHNlcnZpY2UgcnVucyAgICAqLworICAgIGNvbnN0IGNoYXIgKnNlcnZlcl9wb3J0OyAgICAvKiBwb3J0IG9uIHdoaWNoIHRoZSBzc2wgc2VydmljZSBydW5zICAgICAgICovCisgICAgaW50IGRlYnVnX2xldmVsOyAgICAgICAgICAgIC8qIGxldmVsIG9mIGRlYnVnZ2luZyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgbmJpbzsgICAgICAgICAgICAgICAgICAgLyogc2hvdWxkIEkvTyBiZSBibG9ja2luZz8gICAgICAgICAgICAgICAgICAqLworICAgIHVpbnQzMl90IHJlYWRfdGltZW91dDsgICAgICAvKiB0aW1lb3V0IG9uIG1iZWR0bHNfc3NsX3JlYWQoKSBpbiBtaWxsaXNlY29uZHMgICAgKi8KKyAgICBjb25zdCBjaGFyICpjYV9maWxlOyAgICAgICAgLyogdGhlIGZpbGUgd2l0aCB0aGUgQ0EgY2VydGlmaWNhdGUocykgICAgICAqLworICAgIGNvbnN0IGNoYXIgKmNhX3BhdGg7ICAgICAgICAvKiB0aGUgcGF0aCB3aXRoIHRoZSBDQSBjZXJ0aWZpY2F0ZShzKSByZXNpZGUgKi8KKyAgICBjb25zdCBjaGFyICpjcnRfZmlsZTsgICAgICAgLyogdGhlIGZpbGUgd2l0aCB0aGUgc2VydmVyIGNlcnRpZmljYXRlICAgICAqLworICAgIGNvbnN0IGNoYXIgKmtleV9maWxlOyAgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSBzZXJ2ZXIga2V5ICAgICAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqY3J0X2ZpbGUyOyAgICAgIC8qIHRoZSBmaWxlIHdpdGggdGhlIDJuZCBzZXJ2ZXIgY2VydGlmaWNhdGUgKi8KKyAgICBjb25zdCBjaGFyICprZXlfZmlsZTI7ICAgICAgLyogdGhlIGZpbGUgd2l0aCB0aGUgMm5kIHNlcnZlciBrZXkgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKnBzazsgICAgICAgICAgICAvKiB0aGUgcHJlLXNoYXJlZCBrZXkgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqcHNrX2lkZW50aXR5OyAgIC8qIHRoZSBwcmUtc2hhcmVkIGtleSBpZGVudGl0eSAgICAgICAgICAgICAgKi8KKyAgICBjaGFyICpwc2tfbGlzdDsgICAgICAgICAgICAgLyogbGlzdCBvZiBQU0sgaWQva2V5IHBhaXJzIGZvciBjYWxsYmFjayAgICAqLworICAgIGNvbnN0IGNoYXIgKmVjanBha2VfcHc7ICAgICAvKiB0aGUgRUMgSi1QQUtFIHBhc3N3b3JkICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IGZvcmNlX2NpcGhlcnN1aXRlWzJdOyAgIC8qIHByb3RvY29sL2NpcGhlcnN1aXRlIHRvIHVzZSwgb3IgYWxsICAgICAgKi8KKyAgICBjb25zdCBjaGFyICp2ZXJzaW9uX3N1aXRlczsgLyogcGVyLXZlcnNpb24gY2lwaGVyc3VpdGVzICAgICAgICAgICAgICAgICAqLworICAgIGludCByZW5lZ290aWF0aW9uOyAgICAgICAgICAvKiBlbmFibGUgLyBkaXNhYmxlIHJlbmVnb3RpYXRpb24gICAgICAgICAgICovCisgICAgaW50IGFsbG93X2xlZ2FjeTsgICAgICAgICAgIC8qIGFsbG93IGxlZ2FjeSByZW5lZ290aWF0aW9uICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgcmVuZWdvdGlhdGU7ICAgICAgICAgICAgLyogYXR0ZW1wdCByZW5lZ290aWF0aW9uPyAgICAgICAgICAgICAgICAgICAqLworICAgIGludCByZW5lZ29fZGVsYXk7ICAgICAgICAgICAvKiBkZWxheSBiZWZvcmUgZW5mb3JjaW5nIHJlbmVnb3RpYXRpb24gICAgICovCisgICAgaW50IHJlbmVnb19wZXJpb2Q7ICAgICAgICAgIC8qIHBlcmlvZCBmb3IgYXV0b21hdGljIHJlbmVnb3RpYXRpb24gICAgICAgKi8KKyAgICBpbnQgZXhjaGFuZ2VzOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGRhdGEgZXhjaGFuZ2VzICAgICAgICAgICAgICAgICAqLworICAgIGludCBtaW5fdmVyc2lvbjsgICAgICAgICAgICAvKiBtaW5pbXVtIHByb3RvY29sIHZlcnNpb24gYWNjZXB0ZWQgICAgICAgICovCisgICAgaW50IG1heF92ZXJzaW9uOyAgICAgICAgICAgIC8qIG1heGltdW0gcHJvdG9jb2wgdmVyc2lvbiBhY2NlcHRlZCAgICAgICAgKi8KKyAgICBpbnQgYXJjNDsgICAgICAgICAgICAgICAgICAgLyogZmxhZyBmb3IgYXJjNCBzdWl0ZXMgc3VwcG9ydCAgICAgICAgICAgICAqLworICAgIGludCBhdXRoX21vZGU7ICAgICAgICAgICAgICAvKiB2ZXJpZnkgbW9kZSBmb3IgY29ubmVjdGlvbiAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBtZmxfY29kZTsgICAgIC8qIGNvZGUgZm9yIG1heGltdW0gZnJhZ21lbnQgbGVuZ3RoICAgICAgICAgKi8KKyAgICBpbnQgdHJ1bmNfaG1hYzsgICAgICAgICAgICAgLyogYWNjZXB0IHRydW5jYXRlZCBobWFjPyAgICAgICAgICAgICAgICAgICAqLworICAgIGludCB0aWNrZXRzOyAgICAgICAgICAgICAgICAvKiBlbmFibGUgLyBkaXNhYmxlIHNlc3Npb24gdGlja2V0cyAgICAgICAgICovCisgICAgaW50IHRpY2tldF90aW1lb3V0OyAgICAgICAgIC8qIHNlc3Npb24gdGlja2V0IGxpZmV0aW1lICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgY2FjaGVfbWF4OyAgICAgICAgICAgICAgLyogbWF4IG51bWJlciBvZiBzZXNzaW9uIGNhY2hlIGVudHJpZXMgICAgICAqLworICAgIGludCBjYWNoZV90aW1lb3V0OyAgICAgICAgICAvKiBleHBpcmF0aW9uIGRlbGF5IG9mIHNlc3Npb24gY2FjaGUgZW50cmllcyAqLworICAgIGNoYXIgKnNuaTsgICAgICAgICAgICAgICAgICAvKiBzdHJpbmcgZGVzY3JpYmluZyBzbmkgaW5mb3JtYXRpb24gICAgICAgICovCisgICAgY29uc3QgY2hhciAqYWxwbl9zdHJpbmc7ICAgIC8qIEFMUE4gc3VwcG9ydGVkIHByb3RvY29scyAgICAgICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpkaG1fZmlsZTsgICAgICAgLyogdGhlIGZpbGUgd2l0aCB0aGUgREggcGFyYW1ldGVycyAgICAgICAgICAqLworICAgIGludCBleHRlbmRlZF9tczsgICAgICAgICAgICAvKiBhbGxvdyBuZWdvdGlhdGlvbiBvZiBleHRlbmRlZCBNUz8gICAgICAgICovCisgICAgaW50IGV0bTsgICAgICAgICAgICAgICAgICAgIC8qIGFsbG93IG5lZ290aWF0aW9uIG9mIGVuY3J5cHQtdGhlbi1NQUM/ICAgKi8KKyAgICBpbnQgdHJhbnNwb3J0OyAgICAgICAgICAgICAgLyogVExTIG9yIERUTFM/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCBjb29raWVzOyAgICAgICAgICAgICAgICAvKiBVc2UgY29va2llcyBmb3IgRFRMUz8gLTEgdG8gYnJlYWsgdGhlbSAgICovCisgICAgaW50IGFudGlfcmVwbGF5OyAgICAgICAgICAgIC8qIFVzZSBhbnRpLXJlcGxheSBmb3IgRFRMUz8gLTEgZm9yIGRlZmF1bHQgKi8KKyAgICB1aW50MzJfdCBoc190b19taW47ICAgICAgICAgLyogSW5pdGlhbCB2YWx1ZSBvZiBEVExTIGhhbmRzaGFrZSB0aW1lciAgICAqLworICAgIHVpbnQzMl90IGhzX3RvX21heDsgICAgICAgICAvKiBNYXggdmFsdWUgb2YgRFRMUyBoYW5kc2hha2UgdGltZXIgICAgICAgICovCisgICAgaW50IGJhZG1hY19saW1pdDsgICAgICAgICAgIC8qIExpbWl0IG9mIHJlY29yZHMgd2l0aCBiYWQgTUFDICAgICAgICAgICAgKi8KK30gb3B0OworCitzdGF0aWMgdm9pZCBteV9kZWJ1Zyggdm9pZCAqY3R4LCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyICkKK3sKKyAgICBjb25zdCBjaGFyICpwLCAqYmFzZW5hbWU7CisKKyAgICAvKiBFeHRyYWN0IGJhc2VuYW1lIGZyb20gZmlsZSAqLworICAgIGZvciggcCA9IGJhc2VuYW1lID0gZmlsZTsgKnAgIT0gJ1wwJzsgcCsrICkKKyAgICAgICAgaWYoICpwID09ICcvJyB8fCAqcCA9PSAnXFwnICkKKyAgICAgICAgICAgIGJhc2VuYW1lID0gcCArIDE7CisKKyAgICBtYmVkdGxzX2ZwcmludGYoIChGSUxFICopIGN0eCwgIiVzOiUwNGQ6IHwlZHwgJXMiLCBiYXNlbmFtZSwgbGluZSwgbGV2ZWwsIHN0ciApOworICAgIGZmbHVzaCggIChGSUxFICopIGN0eCAgKTsKK30KKworLyoKKyAqIFRlc3QgcmVjdi9zZW5kIGZ1bmN0aW9ucyB0aGF0IG1ha2Ugc3VyZSBlYWNoIHRyeSByZXR1cm5zCisgKiBXQU5UX1JFQUQvV0FOVF9XUklURSBhdCBsZWFzdCBvbmNlIGJlZm9yZSBzdWNlc3NlZGluZworICovCitzdGF0aWMgaW50IG15X3JlY3YoIHZvaWQgKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBzdGF0aWMgaW50IGZpcnN0X3RyeSA9IDE7CisgICAgaW50IHJldDsKKworICAgIGlmKCBmaXJzdF90cnkgKQorICAgIHsKKyAgICAgICAgZmlyc3RfdHJ5ID0gMDsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICk7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19uZXRfcmVjdiggY3R4LCBidWYsIGxlbiApOworICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApCisgICAgICAgIGZpcnN0X3RyeSA9IDE7IC8qIE5leHQgY2FsbCB3aWxsIGJlIGEgbmV3IG9wZXJhdGlvbiAqLworICAgIHJldHVybiggcmV0ICk7Cit9CisKK3N0YXRpYyBpbnQgbXlfc2VuZCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIHN0YXRpYyBpbnQgZmlyc3RfdHJ5ID0gMTsKKyAgICBpbnQgcmV0OworCisgICAgaWYoIGZpcnN0X3RyeSApCisgICAgeworICAgICAgICBmaXJzdF90cnkgPSAwOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19uZXRfc2VuZCggY3R4LCBidWYsIGxlbiApOworICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICBmaXJzdF90cnkgPSAxOyAvKiBOZXh0IGNhbGwgd2lsbCBiZSBhIG5ldyBvcGVyYXRpb24gKi8KKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUmV0dXJuIGF1dGhtb2RlIGZyb20gc3RyaW5nLCBvciAtMSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IGdldF9hdXRoX21vZGUoIGNvbnN0IGNoYXIgKnMgKQoreworICAgIGlmKCBzdHJjbXAoIHMsICJub25lIiApID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfU1NMX1ZFUklGWV9OT05FICk7CisgICAgaWYoIHN0cmNtcCggcywgIm9wdGlvbmFsIiApID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTCApOworICAgIGlmKCBzdHJjbXAoIHMsICJyZXF1aXJlZCIgKSA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX1NTTF9WRVJJRllfUkVRVUlSRUQgKTsKKworICAgIHJldHVybiggLTEgKTsKK30KKworLyoKKyAqIFVzZWQgYnkgc25pX3BhcnNlIGFuZCBwc2tfcGFyc2UgdG8gaGFuZGxlIGNvbWEtc2VwYXJhdGVkIGxpc3RzCisgKi8KKyNkZWZpbmUgR0VUX0lURU0oIGRzdCApICAgICAgICAgXAorICAgIGRzdCA9IHA7ICAgICAgICAgICAgICAgICAgICBcCisgICAgd2hpbGUoICpwICE9ICcsJyApICAgICAgICAgIFwKKyAgICAgICAgaWYoICsrcCA+IGVuZCApICAgICAgICAgXAorICAgICAgICAgICAgZ290byBlcnJvcjsgICAgICAgICBcCisgICAgKnArKyA9ICdcMCc7CisKKyNpZiBkZWZpbmVkKFNOSV9PUFRJT04pCit0eXBlZGVmIHN0cnVjdCBfc25pX2VudHJ5IHNuaV9lbnRyeTsKKworc3RydWN0IF9zbmlfZW50cnkgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgbWJlZHRsc194NTA5X2NydCAqY2VydDsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgKmtleTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0KiBjYTsKKyAgICBtYmVkdGxzX3g1MDlfY3JsKiBjcmw7CisgICAgaW50IGF1dGhtb2RlOworICAgIHNuaV9lbnRyeSAqbmV4dDsKK307CisKK3ZvaWQgc25pX2ZyZWUoIHNuaV9lbnRyeSAqaGVhZCApCit7CisgICAgc25pX2VudHJ5ICpjdXIgPSBoZWFkLCAqbmV4dDsKKworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGN1ci0+Y2VydCApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGN1ci0+Y2VydCApOworCisgICAgICAgIG1iZWR0bHNfcGtfZnJlZSggY3VyLT5rZXkgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjdXItPmtleSApOworCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3VyLT5jYSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGN1ci0+Y2EgKTsKKworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIGN1ci0+Y3JsICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggY3VyLT5jcmwgKTsKKworICAgICAgICBuZXh0ID0gY3VyLT5uZXh0OworICAgICAgICBtYmVkdGxzX2ZyZWUoIGN1ciApOworICAgICAgICBjdXIgPSBuZXh0OworICAgIH0KK30KKworLyoKKyAqIFBhcnNlIGEgc3RyaW5nIG9mIHNleHR1cGxlcyBuYW1lMSxjcnQxLGtleTEsY2ExLGNybDEsYXV0aDFbLC4uLl0KKyAqIGludG8gYSB1c2FibGUgc25pX2VudHJ5IGxpc3QuIEZvciBjYTEsIGNybDEsIGF1dGgxLCB0aGUgc3BlY2lhbCB2YWx1ZQorICogJy0nIG1lYW5zIHVuc2V0LiBJZiBjYTEgaXMgdW5zZXQsIHRoZW4gY3JsMSBpcyBpZ25vcmVkIHRvby4KKyAqCisgKiBNb2RpZmllcyB0aGUgaW5wdXQgc3RyaW5nISBUaGlzIGlzIG5vdCBwcm9kdWN0aW9uIHF1YWxpdHkhCisgKi8KK3NuaV9lbnRyeSAqc25pX3BhcnNlKCBjaGFyICpzbmlfc3RyaW5nICkKK3sKKyAgICBzbmlfZW50cnkgKmN1ciA9IE5VTEwsICpuZXcgPSBOVUxMOworICAgIGNoYXIgKnAgPSBzbmlfc3RyaW5nOworICAgIGNoYXIgKmVuZCA9IHA7CisgICAgY2hhciAqY3J0X2ZpbGUsICprZXlfZmlsZSwgKmNhX2ZpbGUsICpjcmxfZmlsZSwgKmF1dGhfc3RyOworCisgICAgd2hpbGUoICplbmQgIT0gJ1wwJyApCisgICAgICAgICsrZW5kOworICAgICplbmQgPSAnLCc7CisKKyAgICB3aGlsZSggcCA8PSBlbmQgKQorICAgIHsKKyAgICAgICAgaWYoICggbmV3ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggc25pX2VudHJ5ICkgKSApID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBzbmlfZnJlZSggY3VyICk7CisgICAgICAgICAgICByZXR1cm4oIE5VTEwgKTsKKyAgICAgICAgfQorCisgICAgICAgIEdFVF9JVEVNKCBuZXctPm5hbWUgKTsKKyAgICAgICAgR0VUX0lURU0oIGNydF9maWxlICk7CisgICAgICAgIEdFVF9JVEVNKCBrZXlfZmlsZSApOworICAgICAgICBHRVRfSVRFTSggY2FfZmlsZSApOworICAgICAgICBHRVRfSVRFTSggY3JsX2ZpbGUgKTsKKyAgICAgICAgR0VUX0lURU0oIGF1dGhfc3RyICk7CisKKyAgICAgICAgaWYoICggbmV3LT5jZXJ0ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc194NTA5X2NydCApICkgKSA9PSBOVUxMIHx8CisgICAgICAgICAgICAoIG5ldy0+a2V5ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19wa19jb250ZXh0ICkgKSApID09IE5VTEwgKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoIG5ldy0+Y2VydCApOworICAgICAgICBtYmVkdGxzX3BrX2luaXQoIG5ldy0+a2V5ICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggbmV3LT5jZXJ0LCBjcnRfZmlsZSApICE9IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggbmV3LT5rZXksIGtleV9maWxlLCAiIiApICE9IDAgKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiggc3RyY21wKCBjYV9maWxlLCAiLSIgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggbmV3LT5jYSA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfeDUwOV9jcnQgKSApICkgPT0gTlVMTCApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCBuZXctPmNhICk7CisKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoIG5ldy0+Y2EsIGNhX2ZpbGUgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHN0cmNtcCggY3JsX2ZpbGUsICItIiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCBuZXctPmNybCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfeDUwOV9jcmwgKSApICkgPT0gTlVMTCApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgbWJlZHRsc194NTA5X2NybF9pbml0KCBuZXctPmNybCApOworCisgICAgICAgICAgICBpZiggbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlKCBuZXctPmNybCwgY3JsX2ZpbGUgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHN0cmNtcCggYXV0aF9zdHIsICItIiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCBuZXctPmF1dGhtb2RlID0gZ2V0X2F1dGhfbW9kZSggYXV0aF9zdHIgKSApIDwgMCApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXctPmF1dGhtb2RlID0gREZMX0FVVEhfTU9ERTsKKworICAgICAgICBuZXctPm5leHQgPSBjdXI7CisgICAgICAgIGN1ciA9IG5ldzsKKyAgICB9CisKKyAgICByZXR1cm4oIGN1ciApOworCitlcnJvcjoKKyAgICBzbmlfZnJlZSggbmV3ICk7CisgICAgc25pX2ZyZWUoIGN1ciApOworICAgIHJldHVybiggTlVMTCApOworfQorCisvKgorICogU05JIGNhbGxiYWNrLgorICovCitpbnQgc25pX2NhbGxiYWNrKCB2b2lkICpwX2luZm8sIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiApCit7CisgICAgY29uc3Qgc25pX2VudHJ5ICpjdXIgPSAoY29uc3Qgc25pX2VudHJ5ICopIHBfaW5mbzsKKworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggbmFtZV9sZW4gPT0gc3RybGVuKCBjdXItPm5hbWUgKSAmJgorICAgICAgICAgICAgbWVtY21wKCBuYW1lLCBjdXItPm5hbWUsIG5hbWVfbGVuICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBjdXItPmNhICE9IE5VTEwgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NldF9oc19jYV9jaGFpbiggc3NsLCBjdXItPmNhLCBjdXItPmNybCApOworCisgICAgICAgICAgICBpZiggY3VyLT5hdXRobW9kZSAhPSBERkxfQVVUSF9NT0RFICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZXRfaHNfYXV0aG1vZGUoIHNzbCwgY3VyLT5hdXRobW9kZSApOworCisgICAgICAgICAgICByZXR1cm4oIG1iZWR0bHNfc3NsX3NldF9oc19vd25fY2VydCggc3NsLCBjdXItPmNlcnQsIGN1ci0+a2V5ICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4oIC0xICk7Cit9CisKKyNlbmRpZiAvKiBTTklfT1BUSU9OICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKworI2RlZmluZSBIRVgyTlVNKCBjICkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoIGMgPj0gJzAnICYmIGMgPD0gJzknICkgICAgICBcCisgICAgICAgICAgICBjIC09ICcwJzsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlIGlmKCBjID49ICdhJyAmJiBjIDw9ICdmJyApIFwKKyAgICAgICAgICAgIGMgLT0gJ2EnIC0gMTA7ICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgaWYoIGMgPj0gJ0EnICYmIGMgPD0gJ0YnICkgXAorICAgICAgICAgICAgYyAtPSAnQScgLSAxMDsgICAgICAgICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4oIC0xICk7CisKKy8qCisgKiBDb252ZXJ0IGEgaGV4IHN0cmluZyB0byBieXRlcy4KKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICovCitpbnQgdW5oZXhpZnkoIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgY29uc3QgY2hhciAqaW5wdXQsIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciBjOworICAgIHNpemVfdCBqOworCisgICAgKm9sZW4gPSBzdHJsZW4oIGlucHV0ICk7CisgICAgaWYoICpvbGVuICUgMiAhPSAwIHx8ICpvbGVuIC8gMiA+IE1CRURUTFNfUFNLX01BWF9MRU4gKQorICAgICAgICByZXR1cm4oIC0xICk7CisgICAgKm9sZW4gLz0gMjsKKworICAgIGZvciggaiA9IDA7IGogPCAqb2xlbiAqIDI7IGogKz0gMiApCisgICAgeworICAgICAgICBjID0gaW5wdXRbal07CisgICAgICAgIEhFWDJOVU0oIGMgKTsKKyAgICAgICAgb3V0cHV0WyBqIC8gMiBdID0gYyA8PCA0OworCisgICAgICAgIGMgPSBpbnB1dFtqICsgMV07CisgICAgICAgIEhFWDJOVU0oIGMgKTsKKyAgICAgICAgb3V0cHV0WyBqIC8gMiBdIHw9IGM7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3R5cGVkZWYgc3RydWN0IF9wc2tfZW50cnkgcHNrX2VudHJ5OworCitzdHJ1Y3QgX3Bza19lbnRyeQoreworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgc2l6ZV90IGtleV9sZW47CisgICAgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19QU0tfTUFYX0xFTl07CisgICAgcHNrX2VudHJ5ICpuZXh0OworfTsKKworLyoKKyAqIEZyZWUgYSBsaXN0IG9mIHBza19lbnRyeSdzCisgKi8KK3ZvaWQgcHNrX2ZyZWUoIHBza19lbnRyeSAqaGVhZCApCit7CisgICAgcHNrX2VudHJ5ICpuZXh0OworCisgICAgd2hpbGUoIGhlYWQgIT0gTlVMTCApCisgICAgeworICAgICAgICBuZXh0ID0gaGVhZC0+bmV4dDsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBoZWFkICk7CisgICAgICAgIGhlYWQgPSBuZXh0OworICAgIH0KK30KKworLyoKKyAqIFBhcnNlIGEgc3RyaW5nIG9mIHBhaXJzIG5hbWUxLGtleTFbLG5hbWUyLGtleTJbLC4uLl1dCisgKiBpbnRvIGEgdXNhYmxlIHBza19lbnRyeSBsaXN0LgorICoKKyAqIE1vZGlmaWVzIHRoZSBpbnB1dCBzdHJpbmchIFRoaXMgaXMgbm90IHByb2R1Y3Rpb24gcXVhbGl0eSEKKyAqLworcHNrX2VudHJ5ICpwc2tfcGFyc2UoIGNoYXIgKnBza19zdHJpbmcgKQoreworICAgIHBza19lbnRyeSAqY3VyID0gTlVMTCwgKm5ldyA9IE5VTEw7CisgICAgY2hhciAqcCA9IHBza19zdHJpbmc7CisgICAgY2hhciAqZW5kID0gcDsKKyAgICBjaGFyICprZXlfaGV4OworCisgICAgd2hpbGUoICplbmQgIT0gJ1wwJyApCisgICAgICAgICsrZW5kOworICAgICplbmQgPSAnLCc7CisKKyAgICB3aGlsZSggcCA8PSBlbmQgKQorICAgIHsKKyAgICAgICAgaWYoICggbmV3ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggcHNrX2VudHJ5ICkgKSApID09IE5VTEwgKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBtZW1zZXQoIG5ldywgMCwgc2l6ZW9mKCBwc2tfZW50cnkgKSApOworCisgICAgICAgIEdFVF9JVEVNKCBuZXctPm5hbWUgKTsKKyAgICAgICAgR0VUX0lURU0oIGtleV9oZXggKTsKKworICAgICAgICBpZiggdW5oZXhpZnkoIG5ldy0+a2V5LCBrZXlfaGV4LCAmbmV3LT5rZXlfbGVuICkgIT0gMCApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIG5ldy0+bmV4dCA9IGN1cjsKKyAgICAgICAgY3VyID0gbmV3OworICAgIH0KKworICAgIHJldHVybiggY3VyICk7CisKK2Vycm9yOgorICAgIHBza19mcmVlKCBuZXcgKTsKKyAgICBwc2tfZnJlZSggY3VyICk7CisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBQU0sgY2FsbGJhY2sKKyAqLworaW50IHBza19jYWxsYmFjayggdm9pZCAqcF9pbmZvLCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4gKQoreworICAgIHBza19lbnRyeSAqY3VyID0gKHBza19lbnRyeSAqKSBwX2luZm87CisKKyAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIG5hbWVfbGVuID09IHN0cmxlbiggY3VyLT5uYW1lICkgJiYKKyAgICAgICAgICAgIG1lbWNtcCggbmFtZSwgY3VyLT5uYW1lLCBuYW1lX2xlbiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIG1iZWR0bHNfc3NsX3NldF9oc19wc2soIHNzbCwgY3VyLT5rZXksIGN1ci0+a2V5X2xlbiApICk7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuKCAtMSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCAqLworCitzdGF0aWMgbWJlZHRsc19uZXRfY29udGV4dCBsaXN0ZW5fZmQsIGNsaWVudF9mZDsKKworLyogSW50ZXJydXB0aW9uIGhhbmRsZXIgdG8gZW5zdXJlIGNsZWFuIGV4aXQgKGZvciB2YWxncmluZCB0ZXN0aW5nKSAqLworI2lmICFkZWZpbmVkKF9XSU4zMikKK3N0YXRpYyBpbnQgcmVjZWl2ZWRfc2lndGVybSA9IDA7Cit2b2lkIHRlcm1faGFuZGxlciggaW50IHNpZyApCit7CisgICAgKCh2b2lkKSBzaWcpOworICAgIHJlY2VpdmVkX3NpZ3Rlcm0gPSAxOworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZsaXN0ZW5fZmQgKTsgLyogY2F1c2VzIG1iZWR0bHNfbmV0X2FjY2VwdCgpIHRvIGFib3J0ICovCisgICAgbWJlZHRsc19uZXRfZnJlZSggJmNsaWVudF9mZCApOyAvKiBjYXVzZXMgbmV0X3JlYWQoKSB0byBhYm9ydCAqLworfQorI2VuZGlmCisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0ID0gMCwgbGVuLCB3cml0dGVuLCBmcmFncywgZXhjaGFuZ2VzX2xlZnQ7CisgICAgaW50IHZlcnNpb25fc3VpdGVzWzRdWzJdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW0lPX0JVRl9MRU5dOworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorICAgIHVuc2lnbmVkIGNoYXIgcHNrW01CRURUTFNfUFNLX01BWF9MRU5dOworICAgIHNpemVfdCBwc2tfbGVuID0gMDsKKyAgICBwc2tfZW50cnkgKnBza19pbmZvID0gTlVMTDsKKyNlbmRpZgorICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAic3NsX3NlcnZlcjIiOworICAgIHVuc2lnbmVkIGNoYXIgY2xpZW50X2lwWzE2XSA9IHsgMCB9OworICAgIHNpemVfdCBjbGlpcF9sZW47CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DT09LSUVfQykKKyAgICBtYmVkdGxzX3NzbF9jb29raWVfY3R4IGNvb2tpZV9jdHg7CisjZW5kaWYKKworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgc3NsOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZyBjb25mOworI2lmIGRlZmluZWQoTUJFRFRMU19USU1JTkdfQykKKyAgICBtYmVkdGxzX3RpbWluZ19kZWxheV9jb250ZXh0IHRpbWVyOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIHVuc2lnbmVkIGNoYXIgcmVuZWdvX3BlcmlvZFs4XSA9IHsgMCB9OworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgdWludDMyX3QgZmxhZ3M7CisgICAgbWJlZHRsc194NTA5X2NydCBjYWNlcnQ7CisgICAgbWJlZHRsc194NTA5X2NydCBzcnZjZXJ0OworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwa2V5OworICAgIG1iZWR0bHNfeDUwOV9jcnQgc3J2Y2VydDI7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrZXkyOworICAgIGludCBrZXlfY2VydF9pbml0ID0gMCwga2V5X2NlcnRfaW5pdDIgPSAwOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgbWJlZHRsc19kaG1fY29udGV4dCBkaG07CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisgICAgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCBjYWNoZTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorICAgIG1iZWR0bHNfc3NsX3RpY2tldF9jb250ZXh0IHRpY2tldF9jdHg7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFNOSV9PUFRJT04pCisgICAgc25pX2VudHJ5ICpzbmlfaW5mbyA9IE5VTEw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCisgICAgY29uc3QgY2hhciAqYWxwbl9saXN0WzEwXTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisgICAgdW5zaWduZWQgY2hhciBhbGxvY19idWZbMTAwMDAwXTsKKyNlbmRpZgorCisgICAgaW50IGk7CisgICAgY2hhciAqcCwgKnE7CisgICAgY29uc3QgaW50ICpsaXN0OworCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggYWxsb2NfYnVmLCBzaXplb2YoYWxsb2NfYnVmKSApOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE1ha2Ugc3VyZSBtZW1vcnkgcmVmZXJlbmNlcyBhcmUgdmFsaWQgaW4gY2FzZSB3ZSBleGl0IGVhcmx5LgorICAgICAqLworICAgIG1iZWR0bHNfbmV0X2luaXQoICZjbGllbnRfZmQgKTsKKyAgICBtYmVkdGxzX25ldF9pbml0KCAmbGlzdGVuX2ZkICk7CisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2FjZXJ0ICk7CisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmc3J2Y2VydCApOworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrZXkgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZzcnZjZXJ0MiApOworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrZXkyICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBtYmVkdGxzX2RobV9pbml0KCAmZGhtICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisgICAgbWJlZHRsc19zc2xfY2FjaGVfaW5pdCggJmNhY2hlICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICBtYmVkdGxzX3NzbF90aWNrZXRfaW5pdCggJnRpY2tldF9jdHggKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICBtZW1zZXQoICh2b2lkICopIGFscG5fbGlzdCwgMCwgc2l6ZW9mKCBhbHBuX2xpc3QgKSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DT09LSUVfQykKKyAgICBtYmVkdGxzX3NzbF9jb29raWVfaW5pdCggJmNvb2tpZV9jdHggKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX1dJTjMyKQorICAgIC8qIEFib3J0IGNsZWFubHkgb24gU0lHVEVSTSBhbmQgU0lHSU5UICovCisgICAgc2lnbmFsKCBTSUdURVJNLCB0ZXJtX2hhbmRsZXIgKTsKKyAgICBzaWduYWwoIFNJR0lOVCwgdGVybV9oYW5kbGVyICk7CisjZW5kaWYKKworICAgIGlmKCBhcmdjID09IDAgKQorICAgIHsKKyAgICB1c2FnZToKKyAgICAgICAgaWYoIHJldCA9PSAwICkKKyAgICAgICAgICAgIHJldCA9IDE7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisKKyAgICAgICAgbGlzdCA9IG1iZWR0bHNfc3NsX2xpc3RfY2lwaGVyc3VpdGVzKCk7CisgICAgICAgIHdoaWxlKCAqbGlzdCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCIgJS00MnMiLCBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfbmFtZSggKmxpc3QgKSApOworICAgICAgICAgICAgbGlzdCsrOworICAgICAgICAgICAgaWYoICEqbGlzdCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigiICVzXG4iLCBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfbmFtZSggKmxpc3QgKSApOworICAgICAgICAgICAgbGlzdCsrOworICAgICAgICB9CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJcbiIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgb3B0LnNlcnZlcl9hZGRyICAgICAgICAgPSBERkxfU0VSVkVSX0FERFI7CisgICAgb3B0LnNlcnZlcl9wb3J0ICAgICAgICAgPSBERkxfU0VSVkVSX1BPUlQ7CisgICAgb3B0LmRlYnVnX2xldmVsICAgICAgICAgPSBERkxfREVCVUdfTEVWRUw7CisgICAgb3B0Lm5iaW8gICAgICAgICAgICAgICAgPSBERkxfTkJJTzsKKyAgICBvcHQucmVhZF90aW1lb3V0ICAgICAgICA9IERGTF9SRUFEX1RJTUVPVVQ7CisgICAgb3B0LmNhX2ZpbGUgICAgICAgICAgICAgPSBERkxfQ0FfRklMRTsKKyAgICBvcHQuY2FfcGF0aCAgICAgICAgICAgICA9IERGTF9DQV9QQVRIOworICAgIG9wdC5jcnRfZmlsZSAgICAgICAgICAgID0gREZMX0NSVF9GSUxFOworICAgIG9wdC5rZXlfZmlsZSAgICAgICAgICAgID0gREZMX0tFWV9GSUxFOworICAgIG9wdC5jcnRfZmlsZTIgICAgICAgICAgID0gREZMX0NSVF9GSUxFMjsKKyAgICBvcHQua2V5X2ZpbGUyICAgICAgICAgICA9IERGTF9LRVlfRklMRTI7CisgICAgb3B0LnBzayAgICAgICAgICAgICAgICAgPSBERkxfUFNLOworICAgIG9wdC5wc2tfaWRlbnRpdHkgICAgICAgID0gREZMX1BTS19JREVOVElUWTsKKyAgICBvcHQucHNrX2xpc3QgICAgICAgICAgICA9IERGTF9QU0tfTElTVDsKKyAgICBvcHQuZWNqcGFrZV9wdyAgICAgICAgICA9IERGTF9FQ0pQQUtFX1BXOworICAgIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVswXT0gREZMX0ZPUkNFX0NJUEhFUjsKKyAgICBvcHQudmVyc2lvbl9zdWl0ZXMgICAgICA9IERGTF9WRVJTSU9OX1NVSVRFUzsKKyAgICBvcHQucmVuZWdvdGlhdGlvbiAgICAgICA9IERGTF9SRU5FR09USUFUSU9OOworICAgIG9wdC5hbGxvd19sZWdhY3kgICAgICAgID0gREZMX0FMTE9XX0xFR0FDWTsKKyAgICBvcHQucmVuZWdvdGlhdGUgICAgICAgICA9IERGTF9SRU5FR09USUFURTsKKyAgICBvcHQucmVuZWdvX2RlbGF5ICAgICAgICA9IERGTF9SRU5FR09fREVMQVk7CisgICAgb3B0LnJlbmVnb19wZXJpb2QgICAgICAgPSBERkxfUkVORUdPX1BFUklPRDsKKyAgICBvcHQuZXhjaGFuZ2VzICAgICAgICAgICA9IERGTF9FWENIQU5HRVM7CisgICAgb3B0Lm1pbl92ZXJzaW9uICAgICAgICAgPSBERkxfTUlOX1ZFUlNJT047CisgICAgb3B0Lm1heF92ZXJzaW9uICAgICAgICAgPSBERkxfTUFYX1ZFUlNJT047CisgICAgb3B0LmFyYzQgICAgICAgICAgICAgICAgPSBERkxfQVJDNDsKKyAgICBvcHQuYXV0aF9tb2RlICAgICAgICAgICA9IERGTF9BVVRIX01PREU7CisgICAgb3B0Lm1mbF9jb2RlICAgICAgICAgICAgPSBERkxfTUZMX0NPREU7CisgICAgb3B0LnRydW5jX2htYWMgICAgICAgICAgPSBERkxfVFJVTkNfSE1BQzsKKyAgICBvcHQudGlja2V0cyAgICAgICAgICAgICA9IERGTF9USUNLRVRTOworICAgIG9wdC50aWNrZXRfdGltZW91dCAgICAgID0gREZMX1RJQ0tFVF9USU1FT1VUOworICAgIG9wdC5jYWNoZV9tYXggICAgICAgICAgID0gREZMX0NBQ0hFX01BWDsKKyAgICBvcHQuY2FjaGVfdGltZW91dCAgICAgICA9IERGTF9DQUNIRV9USU1FT1VUOworICAgIG9wdC5zbmkgICAgICAgICAgICAgICAgID0gREZMX1NOSTsKKyAgICBvcHQuYWxwbl9zdHJpbmcgICAgICAgICA9IERGTF9BTFBOX1NUUklORzsKKyAgICBvcHQuZGhtX2ZpbGUgICAgICAgICAgICA9IERGTF9ESE1fRklMRTsKKyAgICBvcHQudHJhbnNwb3J0ICAgICAgICAgICA9IERGTF9UUkFOU1BPUlQ7CisgICAgb3B0LmNvb2tpZXMgICAgICAgICAgICAgPSBERkxfQ09PS0lFUzsKKyAgICBvcHQuYW50aV9yZXBsYXkgICAgICAgICA9IERGTF9BTlRJX1JFUExBWTsKKyAgICBvcHQuaHNfdG9fbWluICAgICAgICAgICA9IERGTF9IU19UT19NSU47CisgICAgb3B0LmhzX3RvX21heCAgICAgICAgICAgPSBERkxfSFNfVE9fTUFYOworICAgIG9wdC5iYWRtYWNfbGltaXQgICAgICAgID0gREZMX0JBRE1BQ19MSU1JVDsKKyAgICBvcHQuZXh0ZW5kZWRfbXMgICAgICAgICA9IERGTF9FWFRFTkRFRF9NUzsKKyAgICBvcHQuZXRtICAgICAgICAgICAgICAgICA9IERGTF9FVE07CisKKyAgICBmb3IoIGkgPSAxOyBpIDwgYXJnYzsgaSsrICkKKyAgICB7CisgICAgICAgIHAgPSBhcmd2W2ldOworICAgICAgICBpZiggKCBxID0gc3RyY2hyKCBwLCAnPScgKSApID09IE5VTEwgKQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgKnErKyA9ICdcMCc7CisKKyAgICAgICAgaWYoIHN0cmNtcCggcCwgInNlcnZlcl9wb3J0IiApID09IDAgKQorICAgICAgICAgICAgb3B0LnNlcnZlcl9wb3J0ID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic2VydmVyX2FkZHIiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuc2VydmVyX2FkZHIgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJkdGxzIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgdCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCB0ID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC50cmFuc3BvcnQgPSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNOworICAgICAgICAgICAgZWxzZSBpZiggdCA9PSAxICkKKyAgICAgICAgICAgICAgICBvcHQudHJhbnNwb3J0ID0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZGVidWdfbGV2ZWwiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5kZWJ1Z19sZXZlbCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuZGVidWdfbGV2ZWwgPCAwIHx8IG9wdC5kZWJ1Z19sZXZlbCA+IDY1NTM1ICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm5iaW8iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5uYmlvID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5uYmlvIDwgMCB8fCBvcHQubmJpbyA+IDIgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicmVhZF90aW1lb3V0IiApID09IDAgKQorICAgICAgICAgICAgb3B0LnJlYWRfdGltZW91dCA9IGF0b2koIHEgKTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiY2FfZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5jYV9maWxlID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiY2FfcGF0aCIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5jYV9wYXRoID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiY3J0X2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuY3J0X2ZpbGUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJrZXlfZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5rZXlfZmlsZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImNydF9maWxlMiIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5jcnRfZmlsZTIgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJrZXlfZmlsZTIiICkgPT0gMCApCisgICAgICAgICAgICBvcHQua2V5X2ZpbGUyID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZGhtX2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuZGhtX2ZpbGUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJwc2siICkgPT0gMCApCisgICAgICAgICAgICBvcHQucHNrID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicHNrX2lkZW50aXR5IiApID09IDAgKQorICAgICAgICAgICAgb3B0LnBza19pZGVudGl0eSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInBza19saXN0IiApID09IDAgKQorICAgICAgICAgICAgb3B0LnBza19saXN0ID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZWNqcGFrZV9wdyIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5lY2pwYWtlX3B3ID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZm9yY2VfY2lwaGVyc3VpdGUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVswXSA9IG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9pZCggcSApOworCisgICAgICAgICAgICBpZiggb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldCA9IDI7CisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVsxXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAidmVyc2lvbl9zdWl0ZXMiICkgPT0gMCApCisgICAgICAgICAgICBvcHQudmVyc2lvbl9zdWl0ZXMgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyZW5lZ290aWF0aW9uIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQucmVuZWdvdGlhdGlvbiA9IChhdG9pKCBxICkpID8gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9FTkFCTEVEIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RJU0FCTEVEOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImFsbG93X2xlZ2FjeSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCBhdG9pKCBxICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgLTE6IG9wdC5hbGxvd19sZWdhY3kgPSBNQkVEVExTX1NTTF9MRUdBQ1lfQlJFQUtfSEFORFNIQUtFOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDA6ICBvcHQuYWxsb3dfbGVnYWN5ID0gTUJFRFRMU19TU0xfTEVHQUNZX05PX1JFTkVHT1RJQVRJT047IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTogIG9wdC5hbGxvd19sZWdhY3kgPSBNQkVEVExTX1NTTF9MRUdBQ1lfQUxMT1dfUkVORUdPVElBVElPTjsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogZ290byB1c2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyZW5lZ290aWF0ZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnJlbmVnb3RpYXRlID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5yZW5lZ290aWF0ZSA8IDAgfHwgb3B0LnJlbmVnb3RpYXRlID4gMSApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyZW5lZ29fZGVsYXkiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5yZW5lZ29fZGVsYXkgPSBhdG9pKCBxICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicmVuZWdvX3BlcmlvZCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnJlbmVnb19wZXJpb2QgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnJlbmVnb19wZXJpb2QgPCAyIHx8IG9wdC5yZW5lZ29fcGVyaW9kID4gMjU1ICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImV4Y2hhbmdlcyIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmV4Y2hhbmdlcyA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuZXhjaGFuZ2VzIDwgMCApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJtaW5fdmVyc2lvbiIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgInNzbDMiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxXzEiICkgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgc3RyY21wKCBxLCAiZHRsczEiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMV8yIiApID09IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgIHN0cmNtcCggcSwgImR0bHMxXzIiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibWF4X3ZlcnNpb24iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJzc2wzIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMDsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInRsczEiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMV8xIiApID09IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgIHN0cmNtcCggcSwgImR0bHMxIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInRsczFfMiIgKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICBzdHJjbXAoIHEsICJkdGxzMV8yIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImFyYzQiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCggYXRvaSggcSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6ICAgICBvcHQuYXJjNCA9IE1CRURUTFNfU1NMX0FSQzRfRElTQUJMRUQ7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgb3B0LmFyYzQgPSBNQkVEVExTX1NTTF9BUkM0X0VOQUJMRUQ7ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZm9yY2VfdmVyc2lvbiIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgInNzbDMiICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wOworICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInRsczEiICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xOworICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInRsczFfMSIgKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzI7CisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMV8yIiApID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMzsKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJkdGxzMSIgKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzI7CisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yOworICAgICAgICAgICAgICAgIG9wdC50cmFuc3BvcnQgPSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJkdGxzMV8yIiApID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMzsKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzM7CisgICAgICAgICAgICAgICAgb3B0LnRyYW5zcG9ydCA9IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImF1dGhfbW9kZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggb3B0LmF1dGhfbW9kZSA9IGdldF9hdXRoX21vZGUoIHEgKSApIDwgMCApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJtYXhfZnJhZ19sZW4iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICI1MTIiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1mbF9jb2RlID0gTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzUxMjsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIjEwMjQiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1mbF9jb2RlID0gTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzEwMjQ7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICIyMDQ4IiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tZmxfY29kZSA9IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl8yMDQ4OworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiNDA5NiIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWZsX2NvZGUgPSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fNDA5NjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImFscG4iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5hbHBuX3N0cmluZyA9IHE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAidHJ1bmNfaG1hYyIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCBhdG9pKCBxICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMDogb3B0LnRydW5jX2htYWMgPSBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0RJU0FCTEVEOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IG9wdC50cnVuY19obWFjID0gTUJFRFRMU19TU0xfVFJVTkNfSE1BQ19FTkFCTEVEOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImV4dGVuZGVkX21zIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goIGF0b2koIHEgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAwOiBvcHQuZXh0ZW5kZWRfbXMgPSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19ESVNBQkxFRDsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBvcHQuZXh0ZW5kZWRfbXMgPSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19FTkFCTEVEOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImV0bSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCBhdG9pKCBxICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMDogb3B0LmV0bSA9IE1CRURUTFNfU1NMX0VUTV9ESVNBQkxFRDsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBvcHQuZXRtID0gTUJFRFRMU19TU0xfRVRNX0VOQUJMRUQ7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGdvdG8gdXNhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAidGlja2V0cyIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnRpY2tldHMgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnRpY2tldHMgPCAwIHx8IG9wdC50aWNrZXRzID4gMSApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJ0aWNrZXRfdGltZW91dCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnRpY2tldF90aW1lb3V0ID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC50aWNrZXRfdGltZW91dCA8IDAgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiY2FjaGVfbWF4IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuY2FjaGVfbWF4ID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5jYWNoZV9tYXggPCAwICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImNhY2hlX3RpbWVvdXQiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5jYWNoZV90aW1lb3V0ID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5jYWNoZV90aW1lb3V0IDwgMCApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJjb29raWVzIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuY29va2llcyA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuY29va2llcyA8IC0xIHx8IG9wdC5jb29raWVzID4gMSkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImFudGlfcmVwbGF5IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuYW50aV9yZXBsYXkgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LmFudGlfcmVwbGF5IDwgMCB8fCBvcHQuYW50aV9yZXBsYXkgPiAxKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiYmFkbWFjX2xpbWl0IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuYmFkbWFjX2xpbWl0ID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5iYWRtYWNfbGltaXQgPCAwICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImhzX3RpbWVvdXQiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIHAgPSBzdHJjaHIoIHEsICctJyApICkgPT0gTlVMTCApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgICAgICpwKysgPSAnXDAnOworICAgICAgICAgICAgb3B0LmhzX3RvX21pbiA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIG9wdC5oc190b19tYXggPSBhdG9pKCBwICk7CisgICAgICAgICAgICBpZiggb3B0LmhzX3RvX21pbiA9PSAwIHx8IG9wdC5oc190b19tYXggPCBvcHQuaHNfdG9fbWluICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInNuaSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnNuaSA9IHE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVCVUdfQykKKyAgICBtYmVkdGxzX2RlYnVnX3NldF90aHJlc2hvbGQoIG9wdC5kZWJ1Z19sZXZlbCApOworI2VuZGlmCisKKyAgICBpZiggb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdID4gMCApCisgICAgeworICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvOworICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvID0gbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9pZCggb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdICk7CisKKyAgICAgICAgaWYoIG9wdC5tYXhfdmVyc2lvbiAhPSAtMSAmJgorICAgICAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+bWluX21pbm9yX3ZlciA+IG9wdC5tYXhfdmVyc2lvbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJmb3JjZWQgY2lwaGVyc3VpdGUgbm90IGFsbG93ZWQgd2l0aCB0aGlzIHByb3RvY29sIHZlcnNpb25cbiIpOworICAgICAgICAgICAgcmV0ID0gMjsKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgaWYoIG9wdC5taW5fdmVyc2lvbiAhPSAtMSAmJgorICAgICAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+bWF4X21pbm9yX3ZlciA8IG9wdC5taW5fdmVyc2lvbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJmb3JjZWQgY2lwaGVyc3VpdGUgbm90IGFsbG93ZWQgd2l0aCB0aGlzIHByb3RvY29sIHZlcnNpb25cbiIpOworICAgICAgICAgICAgcmV0ID0gMjsKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKworICAgICAgICAvKiBJZiB3ZSBzZWxlY3QgYSB2ZXJzaW9uIHRoYXQncyBub3Qgc3VwcG9ydGVkIGJ5CisgICAgICAgICAqIHRoaXMgc3VpdGUsIHRoZW4gdGhlcmUgd2lsbCBiZSBubyBjb21tb24gY2lwaGVyc3VpdGUuLi4gKi8KKyAgICAgICAgaWYoIG9wdC5tYXhfdmVyc2lvbiA9PSAtMSB8fAorICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID4gY2lwaGVyc3VpdGVfaW5mby0+bWF4X21pbm9yX3ZlciApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IGNpcGhlcnN1aXRlX2luZm8tPm1heF9taW5vcl92ZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYoIG9wdC5taW5fdmVyc2lvbiA8IGNpcGhlcnN1aXRlX2luZm8tPm1pbl9taW5vcl92ZXIgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBjaXBoZXJzdWl0ZV9pbmZvLT5taW5fbWlub3JfdmVyOworICAgICAgICAgICAgLyogRFRMUyBzdGFydHMgd2l0aCBUTFMgMS4xICovCisgICAgICAgICAgICBpZiggb3B0LnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gJiYKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIgKQorICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEVuYWJsZSBSQzQgaWYgbmVlZGVkIGFuZCBub3QgZXhwbGljaXRseSBkaXNhYmxlZCAqLworICAgICAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+Y2lwaGVyID09IE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4ICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIG9wdC5hcmM0ID09IE1CRURUTFNfU1NMX0FSQzRfRElTQUJMRUQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJmb3JjZWQgUkM0IGNpcGhlcnN1aXRlIHdpdGggUkM0IGRpc2FibGVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXQgPSAyOworICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9wdC5hcmM0ID0gTUJFRFRMU19TU0xfQVJDNF9FTkFCTEVEOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIG9wdC52ZXJzaW9uX3N1aXRlcyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWVbNF0gPSB7IDAgfTsKKworICAgICAgICAvKiBQYXJzZSA0LWVsZW1lbnQgY29tYS1zZXBhcmF0ZWQgbGlzdCAqLworICAgICAgICBmb3IoIGkgPSAwLCBwID0gKGNoYXIgKikgb3B0LnZlcnNpb25fc3VpdGVzOworICAgICAgICAgICAgIGkgPCA0ICYmICpwICE9ICdcMCc7CisgICAgICAgICAgICAgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgbmFtZVtpXSA9IHA7CisKKyAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSB0aGUgY3VycmVudCBzdHJpbmcgYW5kIG1vdmUgb24gdG8gbmV4dCBvbmUgKi8KKyAgICAgICAgICAgIHdoaWxlKCAqcCAhPSAnLCcgJiYgKnAgIT0gJ1wwJyApCisgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgaWYoICpwID09ICcsJyApCisgICAgICAgICAgICAgICAgKnArKyA9ICdcMCc7CisgICAgICAgIH0KKworICAgICAgICBpZiggaSAhPSA0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJ0b28gZmV3IHZhbHVlcyBmb3IgdmVyc2lvbl9zdWl0ZXNcbiIgKTsKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQoIHZlcnNpb25fc3VpdGVzLCAwLCBzaXplb2YoIHZlcnNpb25fc3VpdGVzICkgKTsKKworICAgICAgICAvKiBHZXQgdGhlIHN1aXRlcyBpZGVudGlmaWVycyBmcm9tIHRoZWlyIG5hbWUgKi8KKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDQ7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlcnNpb25fc3VpdGVzW2ldWzBdID0gbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX2lkKCBuYW1lW2ldICk7CisKKyAgICAgICAgICAgIGlmKCB2ZXJzaW9uX3N1aXRlc1tpXVswXSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInVua25vd24gY2lwaGVyc3VpdGU6ICclcydcbiIsIG5hbWVbaV0gKTsKKyAgICAgICAgICAgICAgICByZXQgPSAyOworICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKyAgICAvKgorICAgICAqIFVuaGV4aWZ5IHRoZSBwcmUtc2hhcmVkIGtleSBhbmQgcGFyc2UgdGhlIGxpc3QgaWYgYW55IGdpdmVuCisgICAgICovCisgICAgaWYoIHVuaGV4aWZ5KCBwc2ssIG9wdC5wc2ssICZwc2tfbGVuICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInByZS1zaGFyZWQga2V5IG5vdCB2YWxpZCBoZXhcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBvcHQucHNrX2xpc3QgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggKCBwc2tfaW5mbyA9IHBza19wYXJzZSggb3B0LnBza19saXN0ICkgKSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwc2tfbGlzdCBpbnZhbGlkIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIGlmKCBvcHQuYWxwbl9zdHJpbmcgIT0gTlVMTCApCisgICAgeworICAgICAgICBwID0gKGNoYXIgKikgb3B0LmFscG5fc3RyaW5nOworICAgICAgICBpID0gMDsKKworICAgICAgICAvKiBMZWF2ZSByb29tIGZvciBhIGZpbmFsIE5VTEwgaW4gYWxwbl9saXN0ICovCisgICAgICAgIHdoaWxlKCBpIDwgKGludCkgc2l6ZW9mIGFscG5fbGlzdCAtIDEgJiYgKnAgIT0gJ1wwJyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGFscG5fbGlzdFtpKytdID0gcDsKKworICAgICAgICAgICAgLyogVGVybWluYXRlIHRoZSBjdXJyZW50IHN0cmluZyBhbmQgbW92ZSBvbiB0byBuZXh0IG9uZSAqLworICAgICAgICAgICAgd2hpbGUoICpwICE9ICcsJyAmJiAqcCAhPSAnXDAnICkKKyAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICBpZiggKnAgPT0gJywnICkKKyAgICAgICAgICAgICAgICAqcCsrID0gJ1wwJzsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCisKKyAgICAvKgorICAgICAqIDAuIEluaXRpYWxpemUgdGhlIFJORyBhbmQgdGhlIHNlc3Npb24gZGF0YQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgLTB4JXhcbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICAvKgorICAgICAqIDEuMS4gTG9hZCB0aGUgdHJ1c3RlZCBDQQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIENBIHJvb3QgY2VydGlmaWNhdGUgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgaWYoIHN0cmxlbiggb3B0LmNhX3BhdGggKSApCisgICAgICAgIGlmKCBzdHJjbXAoIG9wdC5jYV9wYXRoLCAibm9uZSIgKSA9PSAwICkKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aCggJmNhY2VydCwgb3B0LmNhX3BhdGggKTsKKyAgICBlbHNlIGlmKCBzdHJsZW4oIG9wdC5jYV9maWxlICkgKQorICAgICAgICBpZiggc3RyY21wKCBvcHQuY2FfZmlsZSwgIm5vbmUiICkgPT0gMCApCisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjYWNlcnQsIG9wdC5jYV9maWxlICk7CisgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpCisgICAgICAgIGZvciggaSA9IDA7IG1iZWR0bHNfdGVzdF9jYXNbaV0gIT0gTlVMTDsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJmNhY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2FzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9jYXNfbGVuW2ldICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZWxzZQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQ0VSVFNfQyBub3QgZGVmaW5lZC4iKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiggcmV0IDwgMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBvayAoJWQgc2tpcHBlZClcbiIsIHJldCApOworCisgICAgLyoKKyAgICAgKiAxLjIuIExvYWQgb3duIGNlcnRpZmljYXRlIGFuZCBwcml2YXRlIGtleQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIHNlcnZlciBjZXJ0LiBhbmQga2V5Li4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgaWYoIHN0cmxlbiggb3B0LmNydF9maWxlICkgJiYgc3RyY21wKCBvcHQuY3J0X2ZpbGUsICJub25lIiApICE9IDAgKQorICAgIHsKKyAgICAgICAga2V5X2NlcnRfaW5pdCsrOworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZzcnZjZXJ0LCBvcHQuY3J0X2ZpbGUgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlIHJldHVybmVkIC0weCV4XG5cbiIsCisgICAgICAgICAgICAgICAgICAgIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiggc3RybGVuKCBvcHQua2V5X2ZpbGUgKSAmJiBzdHJjbXAoIG9wdC5rZXlfZmlsZSwgIm5vbmUiICkgIT0gMCApCisgICAgeworICAgICAgICBrZXlfY2VydF9pbml0Kys7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJnBrZXksIG9wdC5rZXlfZmlsZSwgIiIgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZigga2V5X2NlcnRfaW5pdCA9PSAxICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBjcnRfZmlsZSB3aXRob3V0IGtleV9maWxlIG9yIHZpY2UtdmVyc2FcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIHN0cmxlbiggb3B0LmNydF9maWxlMiApICYmIHN0cmNtcCggb3B0LmNydF9maWxlMiwgIm5vbmUiICkgIT0gMCApCisgICAgeworICAgICAgICBrZXlfY2VydF9pbml0MisrOworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZzcnZjZXJ0Miwgb3B0LmNydF9maWxlMiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoMikgcmV0dXJuZWQgLTB4JXhcblxuIiwKKyAgICAgICAgICAgICAgICAgICAgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorICAgIGlmKCBzdHJsZW4oIG9wdC5rZXlfZmlsZTIgKSAmJiBzdHJjbXAoIG9wdC5rZXlfZmlsZTIsICJub25lIiApICE9IDAgKQorICAgIHsKKyAgICAgICAga2V5X2NlcnRfaW5pdDIrKzsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmcGtleTIsIG9wdC5rZXlfZmlsZTIsICIiICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSgyKSByZXR1cm5lZCAtMHgleFxuXG4iLAorICAgICAgICAgICAgICAgICAgICAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoIGtleV9jZXJ0X2luaXQyID09IDEgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIGNydF9maWxlMiB3aXRob3V0IGtleV9maWxlMiBvciB2aWNlLXZlcnNhXG5cbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyNlbmRpZgorICAgIGlmKCBrZXlfY2VydF9pbml0ID09IDAgJiYKKyAgICAgICAgc3RyY21wKCBvcHQuY3J0X2ZpbGUsICJub25lIiApICE9IDAgJiYKKyAgICAgICAgc3RyY21wKCBvcHQua2V5X2ZpbGUsICJub25lIiApICE9IDAgJiYKKyAgICAgICAga2V5X2NlcnRfaW5pdDIgPT0gMCAmJgorICAgICAgICBzdHJjbXAoIG9wdC5jcnRfZmlsZTIsICJub25lIiApICE9IDAgJiYKKyAgICAgICAgc3RyY21wKCBvcHQua2V5X2ZpbGUyLCAibm9uZSIgKSAhPSAwICkKKyAgICB7CisjaWYgIWRlZmluZWQoTUJFRFRMU19DRVJUU19DKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIk5vdCBjZXJ0aWZpY2F0ZWQgb3Iga2V5IHByb3ZpZGVkLCBhbmQgXG4iCisgICAgICAgICAgICAgICAgIk1CRURUTFNfQ0VSVFNfQyBub3QgZGVmaW5lZCFcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworI2Vsc2UKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZzcnZjZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X3Nydl9jcnRfcnNhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X3Nydl9jcnRfcnNhX2xlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleSggJnBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X3Nydl9rZXlfcnNhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9zcnZfa2V5X3JzYV9sZW4sIE5VTEwsIDAgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9rZXkgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGtleV9jZXJ0X2luaXQgPSAyOworI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJnNydmNlcnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X3Nydl9jcnRfZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9lY19sZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgeDUwOV9jcnRfcGFyc2UyIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleSggJnBrZXkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9zcnZfa2V5X2VjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9zcnZfa2V5X2VjX2xlbiwgTlVMTCwgMCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBwa19wYXJzZV9rZXkyIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBrZXlfY2VydF9pbml0MiA9IDI7CisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DRVJUU19DICovCisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgIGlmKCBvcHQuZGhtX2ZpbGUgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIERITSBwYXJhbWV0ZXJzLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZGhtX3BhcnNlX2RobWZpbGUoICZkaG0sIG9wdC5kaG1fZmlsZSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZGhtX3BhcnNlX2RobWZpbGUgcmV0dXJuZWQgLTB4JTA0WFxuXG4iLAorICAgICAgICAgICAgICAgICAgICAgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoU05JX09QVElPTikKKyAgICBpZiggb3B0LnNuaSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNldHRpbmcgdXAgU05JIGluZm9ybWF0aW9uLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIGlmKCAoIHNuaV9pbmZvID0gc25pX3BhcnNlKCBvcHQuc25pICkgKSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4iICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworICAgIH0KKyNlbmRpZiAvKiBTTklfT1BUSU9OICovCisKKyAgICAvKgorICAgICAqIDIuIFNldHVwIHRoZSBsaXN0ZW5pbmcgVENQIHNvY2tldAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEJpbmQgb24gJXM6Ly8lczolcy8gLi4uIiwKKyAgICAgICAgICAgIG9wdC50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTSA/ICJ0Y3AiIDogInVkcCIsCisgICAgICAgICAgICBvcHQuc2VydmVyX2FkZHIgPyBvcHQuc2VydmVyX2FkZHIgOiAiKiIsCisgICAgICAgICAgICBvcHQuc2VydmVyX3BvcnQgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfYmluZCggJmxpc3Rlbl9mZCwgb3B0LnNlcnZlcl9hZGRyLCBvcHQuc2VydmVyX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfTkVUX1BST1RPX1RDUCA6IE1CRURUTFNfTkVUX1BST1RPX1VEUCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9iaW5kIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDMuIFNldHVwIHN0dWZmCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2V0dGluZyB1cCB0aGUgU1NML1RMUyBzdHJ1Y3R1cmUuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyggJmNvbmYsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0lTX1NFUlZFUiwKKyAgICAgICAgICAgICAgICAgICAgb3B0LnRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfUFJFU0VUX0RFRkFVTFQgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBvcHQuYXV0aF9tb2RlICE9IERGTF9BVVRIX01PREUgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2F1dGhtb2RlKCAmY29uZiwgb3B0LmF1dGhfbW9kZSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBvcHQuaHNfdG9fbWluICE9IERGTF9IU19UT19NSU4gfHwgb3B0LmhzX3RvX21heCAhPSBERkxfSFNfVE9fTUFYICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9oYW5kc2hha2VfdGltZW91dCggJmNvbmYsIG9wdC5oc190b19taW4sIG9wdC5oc190b19tYXggKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19EVExTICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9tYXhfZnJhZ19sZW4oICZjb25mLCBvcHQubWZsX2NvZGUgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZl9tYXhfZnJhZ19sZW4gcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorICAgIGlmKCBvcHQudHJ1bmNfaG1hYyAhPSBERkxfVFJVTkNfSE1BQyApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfdHJ1bmNhdGVkX2htYWMoICZjb25mLCBvcHQudHJ1bmNfaG1hYyApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCisgICAgaWYoIG9wdC5leHRlbmRlZF9tcyAhPSBERkxfRVhURU5ERURfTVMgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2V4dGVuZGVkX21hc3Rlcl9zZWNyZXQoICZjb25mLCBvcHQuZXh0ZW5kZWRfbXMgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorICAgIGlmKCBvcHQuZXRtICE9IERGTF9FVE0gKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2VuY3J5cHRfdGhlbl9tYWMoICZjb25mLCBvcHQuZXRtICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICBpZiggb3B0LmFscG5fc3RyaW5nICE9IE5VTEwgKQorICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25mX2FscG5fcHJvdG9jb2xzKCAmY29uZiwgYWxwbl9saXN0ICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZl9hbHBuX3Byb3RvY29scyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX3NzbF9jb25mX3JuZyggJmNvbmYsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX2RiZyggJmNvbmYsIG15X2RlYnVnLCBzdGRvdXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBpZiggb3B0LmNhY2hlX21heCAhPSAtMSApCisgICAgICAgIG1iZWR0bHNfc3NsX2NhY2hlX3NldF9tYXhfZW50cmllcyggJmNhY2hlLCBvcHQuY2FjaGVfbWF4ICk7CisKKyAgICBpZiggb3B0LmNhY2hlX3RpbWVvdXQgIT0gLTEgKQorICAgICAgICBtYmVkdGxzX3NzbF9jYWNoZV9zZXRfdGltZW91dCggJmNhY2hlLCBvcHQuY2FjaGVfdGltZW91dCApOworCisgICAgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX2NhY2hlKCAmY29uZiwgJmNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jYWNoZV9nZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NhY2hlX3NldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICBpZiggb3B0LnRpY2tldHMgPT0gTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTX0VOQUJMRUQgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfdGlja2V0X3NldHVwKCAmdGlja2V0X2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcsCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdC50aWNrZXRfdGltZW91dCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3RpY2tldF9zZXR1cCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl90aWNrZXRzX2NiKCAmY29uZiwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF90aWNrZXRfd3JpdGUsCisgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfdGlja2V0X3BhcnNlLAorICAgICAgICAgICAgICAgICZ0aWNrZXRfY3R4ICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIG9wdC50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DT09LSUVfQykKKyAgICAgICAgaWYoIG9wdC5jb29raWVzID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2Nvb2tpZV9zZXR1cCggJmNvb2tpZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb29raWVfc2V0dXAgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2R0bHNfY29va2llcyggJmNvbmYsIG1iZWR0bHNfc3NsX2Nvb2tpZV93cml0ZSwgbWJlZHRsc19zc2xfY29va2llX2NoZWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvb2tpZV9jdHggKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ09PS0lFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZKQorICAgICAgICBpZiggb3B0LmNvb2tpZXMgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19jb29raWVzKCAmY29uZiwgTlVMTCwgTlVMTCwgTlVMTCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSAqLworICAgICAgICB7CisgICAgICAgICAgICA7IC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQorICAgICAgICBpZiggb3B0LmFudGlfcmVwbGF5ICE9IERGTF9BTlRJX1JFUExBWSApCisgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYW50aV9yZXBsYXkoICZjb25mLCBvcHQuYW50aV9yZXBsYXkgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVCkKKyAgICAgICAgaWYoIG9wdC5iYWRtYWNfbGltaXQgIT0gREZMX0JBRE1BQ19MSU1JVCApCisgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYmFkbWFjX2xpbWl0KCAmY29uZiwgb3B0LmJhZG1hY19saW1pdCApOworI2VuZGlmCisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworICAgIGlmKCBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF0gIT0gREZMX0ZPUkNFX0NJUEhFUiApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCAmY29uZiwgb3B0LmZvcmNlX2NpcGhlcnN1aXRlICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorICAgIGlmKCBvcHQuYXJjNCAhPSBERkxfQVJDNCApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfYXJjNF9zdXBwb3J0KCAmY29uZiwgb3B0LmFyYzQgKTsKKyNlbmRpZgorCisgICAgaWYoIG9wdC52ZXJzaW9uX3N1aXRlcyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzX2Zvcl92ZXJzaW9uKCAmY29uZiwgdmVyc2lvbl9zdWl0ZXNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKTsKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXNfZm9yX3ZlcnNpb24oICZjb25mLCB2ZXJzaW9uX3N1aXRlc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSApOworICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2NpcGhlcnN1aXRlc19mb3JfdmVyc2lvbiggJmNvbmYsIHZlcnNpb25fc3VpdGVzWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICk7CisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzX2Zvcl92ZXJzaW9uKCAmY29uZiwgdmVyc2lvbl9zdWl0ZXNbM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKTsKKyAgICB9CisKKyAgICBpZiggb3B0LmFsbG93X2xlZ2FjeSAhPSBERkxfQUxMT1dfTEVHQUNZICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9sZWdhY3lfcmVuZWdvdGlhdGlvbiggJmNvbmYsIG9wdC5hbGxvd19sZWdhY3kgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgbWJlZHRsc19zc2xfY29uZl9yZW5lZ290aWF0aW9uKCAmY29uZiwgb3B0LnJlbmVnb3RpYXRpb24gKTsKKworICAgIGlmKCBvcHQucmVuZWdvX2RlbGF5ICE9IERGTF9SRU5FR09fREVMQVkgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb25fZW5mb3JjZWQoICZjb25mLCBvcHQucmVuZWdvX2RlbGF5ICk7CisKKyAgICBpZiggb3B0LnJlbmVnb19wZXJpb2QgIT0gREZMX1JFTkVHT19QRVJJT0QgKQorICAgIHsKKyAgICAgICAgcmVuZWdvX3BlcmlvZFs3XSA9IG9wdC5yZW5lZ29fcGVyaW9kOworICAgICAgICBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb25fcGVyaW9kKCAmY29uZiwgcmVuZWdvX3BlcmlvZCApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgaWYoIHN0cmNtcCggb3B0LmNhX3BhdGgsICJub25lIiApICE9IDAgJiYKKyAgICAgICAgc3RyY21wKCBvcHQuY2FfZmlsZSwgIm5vbmUiICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluKCAmY29uZiwgJmNhY2VydCwgTlVMTCApOworICAgIH0KKyAgICBpZigga2V5X2NlcnRfaW5pdCApCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQoICZjb25mLCAmc3J2Y2VydCwgJnBrZXkgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgaWYoIGtleV9jZXJ0X2luaXQyICkKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCggJmNvbmYsICZzcnZjZXJ0MiwgJnBrZXkyICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNOSV9PUFRJT04pCisgICAgaWYoIG9wdC5zbmkgIT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfc25pKCAmY29uZiwgc25pX2NhbGxiYWNrLCBzbmlfaW5mbyApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKyAgICBpZiggc3RybGVuKCBvcHQucHNrICkgIT0gMCAmJiBzdHJsZW4oIG9wdC5wc2tfaWRlbnRpdHkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfcHNrKCAmY29uZiwgcHNrLCBwc2tfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgb3B0LnBza19pZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggb3B0LnBza19pZGVudGl0eSApICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBmYWlsZWRcbiAgbWJlZHRsc19zc2xfY29uZl9wc2sgcmV0dXJuZWQgLTB4JTA0WFxuXG4iLCAtIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIG9wdC5wc2tfbGlzdCAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9wc2tfY2IoICZjb25mLCBwc2tfY2FsbGJhY2ssIHBza19pbmZvICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykKKyAgICAvKgorICAgICAqIFVzZSBkaWZmZXJlbnQgZ3JvdXAgdGhhbiBkZWZhdWx0IERITSBncm91cAorICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBpZiggb3B0LmRobV9maWxlICE9IE5VTEwgKQorICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9jb25mX2RoX3BhcmFtX2N0eCggJmNvbmYsICZkaG0gKTsKKyNlbmRpZgorICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgZmFpbGVkXG4gIG1iZWR0bHNfc3NsX2NvbmZfZGhfcGFyYW0gcmV0dXJuZWQgLTB4JTA0WFxuXG4iLCAtIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiggb3B0Lm1pbl92ZXJzaW9uICE9IERGTF9NSU5fVkVSU0lPTiApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfbWluX3ZlcnNpb24oICZjb25mLCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIG9wdC5taW5fdmVyc2lvbiApOworCisgICAgaWYoIG9wdC5tYXhfdmVyc2lvbiAhPSBERkxfTUlOX1ZFUlNJT04gKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX21heF92ZXJzaW9uKCAmY29uZiwgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBvcHQubWF4X3ZlcnNpb24gKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9zZXR1cCByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggb3B0Lm5iaW8gPT0gMiApCisgICAgICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oICZzc2wsICZjbGllbnRfZmQsIG15X3NlbmQsIG15X3JlY3YsIE5VTEwgKTsKKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oICZzc2wsICZjbGllbnRfZmQsIG1iZWR0bHNfbmV0X3NlbmQsIG1iZWR0bHNfbmV0X3JlY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5uYmlvID09IDAgPyBtYmVkdGxzX25ldF9yZWN2X3RpbWVvdXQgOiBOVUxMICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisgICAgbWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCAmc3NsLCAmdGltZXIsIG1iZWR0bHNfdGltaW5nX3NldF9kZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190aW1pbmdfZ2V0X2RlbGF5ICk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKK3Jlc2V0OgorI2lmICFkZWZpbmVkKF9XSU4zMikKKyAgICBpZiggcmVjZWl2ZWRfc2lndGVybSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBpbnRlcnJ1cHRlZCBieSBTSUdURVJNXG4iICk7CisgICAgICAgIHJldCA9IDA7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX0NMSUVOVF9SRUNPTk5FQ1QgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICEgQ2xpZW50IGluaXRpYXRlZCByZWNvbm5lY3Rpb24gZnJvbSBzYW1lIHBvcnRcbiIgKTsKKyAgICAgICAgZ290byBoYW5kc2hha2U7CisgICAgfQorCisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIGNoYXIgZXJyb3JfYnVmWzEwMF07CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgZXJyb3JfYnVmLCAxMDAgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIkxhc3QgZXJyb3Igd2FzOiAlZCAtICVzXG5cbiIsIHJldCwgZXJyb3JfYnVmICk7CisgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmY2xpZW50X2ZkICk7CisKKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0KCAmc3NsICk7CisKKyAgICAvKgorICAgICAqIDMuIFdhaXQgdW50aWwgYSBjbGllbnQgY29ubmVjdHMKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBXYWl0aW5nIGZvciBhIHJlbW90ZSBjb25uZWN0aW9uIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfYWNjZXB0KCAmbGlzdGVuX2ZkLCAmY2xpZW50X2ZkLAorICAgICAgICAgICAgICAgICAgICBjbGllbnRfaXAsIHNpemVvZiggY2xpZW50X2lwICksICZjbGlpcF9sZW4gKSApICE9IDAgKQorICAgIHsKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisgICAgICAgIGlmKCByZWNlaXZlZF9zaWd0ZXJtICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgaW50ZXJydXB0ZWQgYnkgc2lnbmFsXG4iICk7CisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9hY2NlcHQgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIG9wdC5uYmlvID4gMCApCisgICAgICAgIHJldCA9IG1iZWR0bHNfbmV0X3NldF9ub25ibG9jayggJmNsaWVudF9mZCApOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gbWJlZHRsc19uZXRfc2V0X2Jsb2NrKCAmY2xpZW50X2ZkICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG5ldF9zZXRfKG5vbilibG9jaygpIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX2NvbmZfcmVhZF90aW1lb3V0KCAmY29uZiwgb3B0LnJlYWRfdGltZW91dCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkKKyAgICBpZiggb3B0LnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQoICZzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfaXAsIGNsaWlwX2xlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICIKKyAgICAgICAgICAgICAgICAgICAgIm1iZWR0bHNfc3NsX3NldF9jbGllbnRfdHJhbnNwb3J0X2lkKCkgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICBpZiggb3B0LmVjanBha2VfcHcgIT0gREZMX0VDSlBBS0VfUFcgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0X2hzX2VjanBha2VfcGFzc3dvcmQoICZzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBvcHQuZWNqcGFrZV9wdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIG9wdC5lY2pwYWtlX3B3ICkgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9zZXRfaHNfZWNqcGFrZV9wYXNzd29yZCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogNC4gSGFuZHNoYWtlCisgICAgICovCitoYW5kc2hha2U6CisgICAgbWJlZHRsc19wcmludGYoICIgIC4gUGVyZm9ybWluZyB0aGUgU1NML1RMUyBoYW5kc2hha2UuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGRvIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggJnNzbCApOworICAgIHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fAorICAgICAgICAgICByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKworICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBoZWxsbyB2ZXJpZmljYXRpb24gcmVxdWVzdGVkXG4iICk7CisgICAgICAgIHJldCA9IDA7CisgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgfQorICAgIGVsc2UgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgdnJmeV9idWZbNTEyXTsKKyAgICAgICAgICAgIGZsYWdzID0gbWJlZHRsc19zc2xfZ2V0X3ZlcmlmeV9yZXN1bHQoICZzc2wgKTsKKworICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfaW5mbyggdnJmeV9idWYsIHNpemVvZiggdnJmeV9idWYgKSwgIiAgISAiLCBmbGFncyApOworCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCB2cmZ5X2J1ZiApOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBnb3RvIHJlc2V0OworICAgIH0KKyAgICBlbHNlIC8qIHJldCA9PSAwICovCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAgIFsgUHJvdG9jb2wgaXMgJXMgXVxuICAgIFsgQ2lwaGVyc3VpdGUgaXMgJXMgXVxuIiwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9nZXRfdmVyc2lvbiggJnNzbCApLCBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGUoICZzc2wgKSApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2dldF9yZWNvcmRfZXhwYW5zaW9uKCAmc3NsICkgKSA+PSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgWyBSZWNvcmQgZXhwYW5zaW9uIGlzICVkIF1cbiIsIHJldCApOworICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgWyBSZWNvcmQgZXhwYW5zaW9uIGlzIHVua25vd24gKGNvbXByZXNzaW9uKSBdXG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisgICAgbWJlZHRsc19wcmludGYoICIgICAgWyBNYXhpbXVtIGZyYWdtZW50IGxlbmd0aCBpcyAldSBdXG4iLAorICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBtYmVkdGxzX3NzbF9nZXRfbWF4X2ZyYWdfbGVuKCAmc3NsICkgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIGlmKCBvcHQuYWxwbl9zdHJpbmcgIT0gTlVMTCApCisgICAgeworICAgICAgICBjb25zdCBjaGFyICphbHAgPSBtYmVkdGxzX3NzbF9nZXRfYWxwbl9wcm90b2NvbCggJnNzbCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICBbIEFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sIGlzICVzIF1cbiIsCisgICAgICAgICAgICAgICAgYWxwID8gYWxwIDogIihub25lKSIgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIC8qCisgICAgICogNS4gVmVyaWZ5IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBWZXJpZnlpbmcgcGVlciBYLjUwOSBjZXJ0aWZpY2F0ZS4uLiIgKTsKKworICAgIGlmKCAoIGZsYWdzID0gbWJlZHRsc19zc2xfZ2V0X3ZlcmlmeV9yZXN1bHQoICZzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciB2cmZ5X2J1Zls1MTJdOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuIiApOworCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2luZm8oIHZyZnlfYnVmLCBzaXplb2YoIHZyZnlfYnVmICksICIgICEgIiwgZmxhZ3MgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCB2cmZ5X2J1ZiApOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICBpZiggbWJlZHRsc19zc2xfZ2V0X3BlZXJfY2VydCggJnNzbCApICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgY2hhciBjcnRfYnVmWzUxMl07CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gUGVlciBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiAgICAuLi5cbiIgKTsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9pbmZvKCBjcnRfYnVmLCBzaXplb2YoIGNydF9idWYgKSwgIiAgICAgICIsCisgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9wZWVyX2NlcnQoICZzc2wgKSApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCBjcnRfYnVmICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisgICAgaWYoIG9wdC5leGNoYW5nZXMgPT0gMCApCisgICAgICAgIGdvdG8gY2xvc2Vfbm90aWZ5OworCisgICAgZXhjaGFuZ2VzX2xlZnQgPSBvcHQuZXhjaGFuZ2VzOworZGF0YV9leGNoYW5nZToKKyAgICAvKgorICAgICAqIDYuIFJlYWQgdGhlIEhUVFAgUmVxdWVzdAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICA8IFJlYWQgZnJvbSBjbGllbnQ6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAvKgorICAgICAqIFRMUyBhbmQgRFRMUyBuZWVkIGRpZmZlcmVudCByZWFkaW5nIHN0eWxlcyAoc3RyZWFtIHZzIGRhdGFncmFtKQorICAgICAqLworICAgIGlmKCBvcHQudHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0gKQorICAgIHsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgaW50IHRlcm1pbmF0ZWQgPSAwOworICAgICAgICAgICAgbGVuID0gc2l6ZW9mKCBidWYgKSAtIDE7CisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfcmVhZCggJnNzbCwgYnVmLCBsZW4gKTsKKworICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8CisgICAgICAgICAgICAgICAgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYoIHJldCA8PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2goIHJldCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBncmFjZWZ1bGx5XG4iICk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGNsb3NlX25vdGlmeTsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfTkVUX0NPTk5fUkVTRVQ6CisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBjb25uZWN0aW9uIHdhcyByZXNldCBieSBwZWVyXG4iICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzZXQ7CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG1iZWR0bHNfc3NsX3JlYWQgcmV0dXJuZWQgLTB4JXhcbiIsIC1yZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiggbWJlZHRsc19zc2xfZ2V0X2J5dGVzX2F2YWlsKCAmc3NsICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuID0gcmV0OworICAgICAgICAgICAgICAgIGJ1ZltsZW5dID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAlZCBieXRlcyByZWFkXG5cbiVzXG4iLCBsZW4sIChjaGFyICopIGJ1ZiApOworCisgICAgICAgICAgICAgICAgLyogRW5kIG9mIG1lc3NhZ2Ugc2hvdWxkIGJlIGRldGVjdGVkIGFjY29yZGluZyB0byB0aGUgc3ludGF4IG9mIHRoZQorICAgICAgICAgICAgICAgICAqIGFwcGxpY2F0aW9uIHByb3RvY29sIChlZyBIVFRQKSwganVzdCB1c2UgYSBkdW1teSB0ZXN0IGhlcmUuICovCisgICAgICAgICAgICAgICAgaWYoIGJ1ZltsZW4gLSAxXSA9PSAnXG4nICkKKyAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IGV4dHJhX2xlbiwgb3JpX2xlbjsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpsYXJnZXJfYnVmOworCisgICAgICAgICAgICAgICAgb3JpX2xlbiA9IHJldDsKKyAgICAgICAgICAgICAgICBleHRyYV9sZW4gPSAoaW50KSBtYmVkdGxzX3NzbF9nZXRfYnl0ZXNfYXZhaWwoICZzc2wgKTsKKworICAgICAgICAgICAgICAgIGxhcmdlcl9idWYgPSBtYmVkdGxzX2NhbGxvYyggMSwgb3JpX2xlbiArIGV4dHJhX2xlbiArIDEgKTsKKyAgICAgICAgICAgICAgICBpZiggbGFyZ2VyX2J1ZiA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIiApOworICAgICAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgICAgICAgICBnb3RvIHJlc2V0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1lbXNldCggbGFyZ2VyX2J1ZiwgMCwgb3JpX2xlbiArIGV4dHJhX2xlbiApOworICAgICAgICAgICAgICAgIG1lbWNweSggbGFyZ2VyX2J1ZiwgYnVmLCBvcmlfbGVuICk7CisKKyAgICAgICAgICAgICAgICAvKiBUaGlzIHJlYWQgc2hvdWxkIG5ldmVyIGZhaWwgYW5kIGdldCB0aGUgd2hvbGUgY2FjaGVkIGRhdGEgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCAmc3NsLCBsYXJnZXJfYnVmICsgb3JpX2xlbiwgZXh0cmFfbGVuICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSBleHRyYV9sZW4gfHwKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X2J5dGVzX2F2YWlsKCAmc3NsICkgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgISBtYmVkdGxzX3NzbF9yZWFkIGZhaWxlZCBvbiBjYWNoZWQgZGF0YVxuIiApOworICAgICAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgICAgICAgICBnb3RvIHJlc2V0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxhcmdlcl9idWZbb3JpX2xlbiArIGV4dHJhX2xlbl0gPSAnXDAnOworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICV1IGJ5dGVzIHJlYWQgKCV1ICsgJXUpXG5cbiVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JpX2xlbiArIGV4dHJhX2xlbiwgb3JpX2xlbiwgZXh0cmFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbGFyZ2VyX2J1ZiApOworCisgICAgICAgICAgICAgICAgLyogRW5kIG9mIG1lc3NhZ2Ugc2hvdWxkIGJlIGRldGVjdGVkIGFjY29yZGluZyB0byB0aGUgc3ludGF4IG9mIHRoZQorICAgICAgICAgICAgICAgICAqIGFwcGxpY2F0aW9uIHByb3RvY29sIChlZyBIVFRQKSwganVzdCB1c2UgYSBkdW1teSB0ZXN0IGhlcmUuICovCisgICAgICAgICAgICAgICAgaWYoIGxhcmdlcl9idWZbb3JpX2xlbiArIGV4dHJhX2xlbiAtIDFdID09ICdcbicgKQorICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gMTsKKworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggbGFyZ2VyX2J1ZiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiggdGVybWluYXRlZCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSggMSApOworICAgIH0KKyAgICBlbHNlIC8qIE5vdCBzdHJlYW0sIHNvIGRhdGFncmFtICovCisgICAgeworICAgICAgICBsZW4gPSBzaXplb2YoIGJ1ZiApIC0gMTsKKyAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKworICAgICAgICBkbyByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCAmc3NsLCBidWYsIGxlbiApOworICAgICAgICB3aGlsZSggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwKKyAgICAgICAgICAgICAgIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApOworCisgICAgICAgIGlmKCByZXQgPD0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCggcmV0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWToKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGdyYWNlZnVsbHlcbiIgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBjbG9zZV9ub3RpZnk7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBtYmVkdGxzX3NzbF9yZWFkIHJldHVybmVkIC0weCV4XG4iLCAtcmV0ICk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsZW4gPSByZXQ7CisgICAgICAgIGJ1ZltsZW5dID0gJ1wwJzsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgJWQgYnl0ZXMgcmVhZFxuXG4lcyIsIGxlbiwgKGNoYXIgKikgYnVmICk7CisgICAgICAgIHJldCA9IDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiA3YS4gUmVxdWVzdCByZW5lZ290aWF0aW9uIHdoaWxlIGNsaWVudCBpcyB3YWl0aW5nIGZvciBpbnB1dCBmcm9tIHVzLgorICAgICAqIChvbmx5IG9uIHRoZSBmaXJzdCBleGNoYW5nZSwgdG8gYmUgYWJsZSB0byB0ZXN0IHJldHJhbnNtaXNzaW9uKQorICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBpZiggb3B0LnJlbmVnb3RpYXRlICYmIGV4Y2hhbmdlc19sZWZ0ID09IG9wdC5leGNoYW5nZXMgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gUmVxdWVzdGlvbiByZW5lZ290aWF0aW9uLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX3JlbmVnb3RpYXRlKCAmc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmCisgICAgICAgICAgICAgICAgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9yZW5lZ290aWF0ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgICAgICBnb3RvIHJlc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworCisgICAgLyoKKyAgICAgKiA3LiBXcml0ZSB0aGUgMjAwIFJlc3BvbnNlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgdG8gY2xpZW50OiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCBIVFRQX1JFU1BPTlNFLAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZSggJnNzbCApICk7CisKKyAgICBpZiggb3B0LnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNICkKKyAgICB7CisgICAgICAgIGZvciggd3JpdHRlbiA9IDAsIGZyYWdzID0gMDsgd3JpdHRlbiA8IGxlbjsgd3JpdHRlbiArPSByZXQsIGZyYWdzKysgKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSggKCByZXQgPSBtYmVkdGxzX3NzbF93cml0ZSggJnNzbCwgYnVmICsgd3JpdHRlbiwgbGVuIC0gd3JpdHRlbiApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDw9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfTkVUX0NPTk5fUkVTRVQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgcGVlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb25cblxuIiApOworICAgICAgICAgICAgICAgICAgICBnb3RvIHJlc2V0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJgorICAgICAgICAgICAgICAgICAgICByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfd3JpdGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgLyogTm90IHN0cmVhbSwgc28gZGF0YWdyYW0gKi8KKyAgICB7CisgICAgICAgIGRvIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlKCAmc3NsLCBidWYsIGxlbiApOworICAgICAgICB3aGlsZSggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwKKyAgICAgICAgICAgICAgIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApOworCisgICAgICAgIGlmKCByZXQgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfd3JpdGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIHJlc2V0OworICAgICAgICB9CisKKyAgICAgICAgZnJhZ3MgPSAxOworICAgICAgICB3cml0dGVuID0gcmV0OworICAgIH0KKworICAgIGJ1Zlt3cml0dGVuXSA9ICdcMCc7CisgICAgbWJlZHRsc19wcmludGYoICIgJWQgYnl0ZXMgd3JpdHRlbiBpbiAlZCBmcmFnbWVudHNcblxuJXNcbiIsIHdyaXR0ZW4sIGZyYWdzLCAoY2hhciAqKSBidWYgKTsKKyAgICByZXQgPSAwOworCisgICAgLyoKKyAgICAgKiA3Yi4gQ29udGludWUgZG9pbmcgZGF0YSBleGNoYW5nZXM/CisgICAgICovCisgICAgaWYoIC0tZXhjaGFuZ2VzX2xlZnQgPiAwICkKKyAgICAgICAgZ290byBkYXRhX2V4Y2hhbmdlOworCisgICAgLyoKKyAgICAgKiA4LiBEb25lLCBjbGVhbmx5IGNsb3NlIHRoZSBjb25uZWN0aW9uCisgICAgICovCitjbG9zZV9ub3RpZnk6CisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ2xvc2luZyB0aGUgY29ubmVjdGlvbi4uLiIgKTsKKworICAgIC8qIE5vIGVycm9yIGNoZWNraW5nLCB0aGUgY29ubmVjdGlvbiBtaWdodCBiZSBjbG9zZWQgYWxyZWFkeSAqLworICAgIGRvIHJldCA9IG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSggJnNzbCApOworICAgIHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKyAgICByZXQgPSAwOworCisgICAgbWJlZHRsc19wcmludGYoICIgZG9uZVxuIiApOworCisgICAgZ290byByZXNldDsKKworICAgIC8qCisgICAgICogQ2xlYW51cCBhbmQgZXhpdAorICAgICAqLworZXhpdDoKKyNpZmRlZiBNQkVEVExTX0VSUk9SX0MKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciBlcnJvcl9idWZbMTAwXTsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBlcnJvcl9idWYsIDEwMCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiTGFzdCBlcnJvciB3YXM6IC0weCVYIC0gJXNcblxuIiwgLXJldCwgZXJyb3JfYnVmICk7CisgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDbGVhbmluZyB1cC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19uZXRfZnJlZSggJmNsaWVudF9mZCApOworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZsaXN0ZW5fZmQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgIG1iZWR0bHNfZGhtX2ZyZWUoICZkaG0gKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNhY2VydCApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJnNydmNlcnQgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwa2V5ICk7CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmc3J2Y2VydDIgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwa2V5MiApOworI2VuZGlmCisjaWYgZGVmaW5lZChTTklfT1BUSU9OKQorICAgIHNuaV9mcmVlKCBzbmlfaW5mbyApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgcHNrX2ZyZWUoIHBza19pbmZvICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBtYmVkdGxzX2RobV9mcmVlKCAmZGhtICk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfc3NsX2ZyZWUoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggJmNvbmYgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorICAgIG1iZWR0bHNfc3NsX2NhY2hlX2ZyZWUoICZjYWNoZSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgbWJlZHRsc19zc2xfdGlja2V0X2ZyZWUoICZ0aWNrZXRfY3R4ICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NPT0tJRV9DKQorICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9mcmVlKCAmY29va2llX2N0eCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3N0YXR1cygpOworI2VuZGlmCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWUoKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19wcmludGYoICIgZG9uZS5cbiIgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgLy8gU2hlbGwgY2FuIG5vdCBoYW5kbGUgbGFyZ2UgZXhpdCBudW1iZXJzIC0+IDEgZm9yIGVycm9ycworICAgIGlmKCByZXQgPCAwICkKKyAgICAgICAgcmV0ID0gMTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX1NTTF9UTFNfQyAmJgorICAgICAgICAgIE1CRURUTFNfU1NMX1NSVl9DICYmIE1CRURUTFNfTkVUX0MgJiYgTUJFRFRMU19SU0FfQyAmJgorICAgICAgICAgIE1CRURUTFNfQ1RSX0RSQkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3Rlc3QvQ01ha2VMaXN0cy50eHQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdGVzdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWQ3MTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3Rlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyNyBAQAorc2V0KGxpYnMKKyAgICBtYmVkdGxzCispCisKK2lmKFVTRV9QS0NTMTFfSEVMUEVSX0xJQlJBUlkpCisgICAgc2V0KGxpYnMgJHtsaWJzfSBwa2NzMTEtaGVscGVyKQorZW5kaWYoVVNFX1BLQ1MxMV9IRUxQRVJfTElCUkFSWSkKKworaWYoRU5BQkxFX1pMSUJfU1VQUE9SVCkKKyAgICBzZXQobGlicyAke2xpYnN9ICR7WkxJQl9MSUJSQVJJRVN9KQorZW5kaWYoRU5BQkxFX1pMSUJfU1VQUE9SVCkKKworYWRkX2V4ZWN1dGFibGUoc2VsZnRlc3Qgc2VsZnRlc3QuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhzZWxmdGVzdCAke2xpYnN9KQorCithZGRfZXhlY3V0YWJsZShiZW5jaG1hcmsgYmVuY2htYXJrLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoYmVuY2htYXJrICR7bGlic30pCisKK2FkZF9leGVjdXRhYmxlKHNzbF9jZXJ0X3Rlc3Qgc3NsX2NlcnRfdGVzdC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNzbF9jZXJ0X3Rlc3QgJHtsaWJzfSkKKworYWRkX2V4ZWN1dGFibGUodWRwX3Byb3h5IHVkcF9wcm94eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHVkcF9wcm94eSAke2xpYnN9KQorCitpbnN0YWxsKFRBUkdFVFMgc2VsZnRlc3QgYmVuY2htYXJrIHNzbF9jZXJ0X3Rlc3QgdWRwX3Byb3h5CisgICAgICAgIERFU1RJTkFUSU9OICJiaW4iCisgICAgICAgIFBFUk1JU1NJT05TIE9XTkVSX1JFQUQgT1dORVJfV1JJVEUgT1dORVJfRVhFQ1VURSBHUk9VUF9SRUFEIEdST1VQX0VYRUNVVEUgV09STERfUkVBRCBXT1JMRF9FWEVDVVRFKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3Rlc3QvYmVuY2htYXJrLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdGVzdC9iZW5jaG1hcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjU3OGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3Rlc3QvYmVuY2htYXJrLmMKQEAgLTAsMCArMSw4ODIgQEAKKy8qCisgKiAgQmVuY2htYXJrIGRlbW9uc3RyYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX2V4aXQgICAgICAgZXhpdAorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICBzbnByaW50ZgorI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1RJTUlOR19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX1RJTUlOR19DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJtYmVkdGxzL3RpbWluZy5oIgorCisjaW5jbHVkZSAibWJlZHRscy9tZDQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kNS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcmlwZW1kMTYwLmgiCisjaW5jbHVkZSAibWJlZHRscy9zaGExLmgiCisjaW5jbHVkZSAibWJlZHRscy9zaGEyNTYuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTUxMi5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYXJjNC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZGVzLmgiCisjaW5jbHVkZSAibWJlZHRscy9hZXMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Jsb3dmaXNoLmgiCisjaW5jbHVkZSAibWJlZHRscy9jYW1lbGxpYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZ2NtLmgiCisjaW5jbHVkZSAibWJlZHRscy9jY20uaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NtYWMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2hhdmVnZS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2htYWNfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjaW5jbHVkZSAibWJlZHRscy9kaG0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VjZHNhLmgiCisjaW5jbHVkZSAibWJlZHRscy9lY2RoLmgiCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyNpbmNsdWRlICJtYmVkdGxzL21lbW9yeV9idWZmZXJfYWxsb2MuaCIKKyNlbmRpZgorCisvKgorICogRm9yIGhlYXAgdXNhZ2UgZXN0aW1hdGVzLCB3ZSBuZWVkIGFuIGVzdGltYXRlIG9mIHRoZSBvdmVyaGVhZCBwZXIgYWxsb2NhdGVkCisgKiBibG9jay4gcHRtYWxsb2MyLzMgKHVzZWQgaW4gZ251IGxpYmMgZm9yIGluc3RhbmNlKSB1c2VzIDIgc2l6ZV90IHBlciBibG9jaywKKyAqIHNvIHVzZSB0aGF0IGFzIG91ciBiYXNlbGluZS4KKyAqLworI2RlZmluZSBNRU1fQkxPQ0tfT1ZFUkhFQUQgICggMiAqIHNpemVvZiggc2l6ZV90ICkgKQorCisvKgorICogU2l6ZSB0byB1c2UgZm9yIHRoZSBhbGxvYyBidWZmZXIgaWYgTUVNT1JZX0JVRkZFUl9BTExPQ19DIGlzIGRlZmluZWQuCisgKi8KKyNkZWZpbmUgSEVBUF9TSVpFICAgICAgICgxdSA8PCAxNikgIC8vIDY0aworCisjZGVmaW5lIEJVRlNJWkUgICAgICAgICAxMDI0CisjZGVmaW5lIEhFQURFUl9GT1JNQVQgICAiICAlLTI0cyA6ICAiCisjZGVmaW5lIFRJVExFX0xFTiAgICAgICAyNQorCisjZGVmaW5lIE9QVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIm1kNCwgbWQ1LCByaXBlbWQxNjAsIHNoYTEsIHNoYTI1Niwgc2hhNTEyLFxuIiAgICAgICAgICAgICAgICAgICAgICBcCisgICAgImFyYzQsIGRlczMsIGRlcywgY2FtZWxsaWEsIGJsb3dmaXNoLFxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgImFlc19jYmMsIGFlc19nY20sIGFlc19jY20sIGFlc19jbWFjLCBkZXMzX2NtYWMsXG4iICAgICAgICAgICAgICAgICBcCisgICAgImhhdmVnZSwgY3RyX2RyYmcsIGhtYWNfZHJiZ1xuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgInJzYSwgZGhtLCBlY2RzYSwgZWNkaC5cbiIKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKQorI2RlZmluZSBQUklOVF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsICggY2hhciAqICl0bXAsIHNpemVvZiggdG1wICkgKTsgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkZBSUxFRDogJXNcbiIsIHRtcCApOworI2Vsc2UKKyNkZWZpbmUgUFJJTlRfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJGQUlMRUQ6IC0weCUwNHhcbiIsIC1yZXQgKTsKKyNlbmRpZgorCisjZGVmaW5lIFRJTUVfQU5EX1RTQyggVElUTEUsIENPREUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBpaSwgamosIHRzYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19wcmludGYoIEhFQURFUl9GT1JNQVQsIFRJVExFICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmZsdXNoKCBzdGRvdXQgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19zZXRfYWxhcm0oIDEgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yKCBpaSA9IDE7ICEgbWJlZHRsc190aW1pbmdfYWxhcm1lZDsgaWkrKyApICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENPREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdHNjID0gbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yKCBqaiA9IDA7IGpqIDwgMTAyNDsgamorKyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENPREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19wcmludGYoICIlOWx1IEtiL3MsICAlOWx1IGN5Y2xlcy9ieXRlXG4iLCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICBpaSAqIEJVRlNJWkUgLyAxMDI0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAoIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jaygpIC0gdHNjICkgLyAoIGpqICogQlVGU0laRSApICk7ICAgICAgICAgXAorfSB3aGlsZSggMCApCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykKKyNkZWZpbmUgUFJJTlRfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCAoIGNoYXIgKiApdG1wLCBzaXplb2YoIHRtcCApICk7ICAgICAgICAgIFwKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJGQUlMRUQ6ICVzXG4iLCB0bXAgKTsKKyNlbHNlCisjZGVmaW5lIFBSSU5UX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiRkFJTEVEOiAtMHglMDR4XG4iLCAtcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpICYmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisKKyNkZWZpbmUgTUVNT1JZX01FQVNVUkVfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzaXplX3QgbWF4X3VzZWQsIG1heF9ibG9ja3MsIG1heF9ieXRlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzaXplX3QgcHJ2X3VzZWQsIHBydl9ibG9ja3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfY3VyX2dldCggJnBydl91c2VkLCAmcHJ2X2Jsb2NrcyApOyAgICAgIFwKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfbWF4X3Jlc2V0KCApOworCisjZGVmaW5lIE1FTU9SWV9NRUFTVVJFX1BSSU5UKCB0aXRsZV9sZW4gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX21heF9nZXQoICZtYXhfdXNlZCwgJm1heF9ibG9ja3MgKTsgICAgICBcCisgICAgZm9yKCBpaSA9IDEyIC0gdGl0bGVfbGVuOyBpaSAhPSAwOyBpaS0tICkgbWJlZHRsc19wcmludGYoICIgIiApOyAgICBcCisgICAgbWF4X3VzZWQgLT0gcHJ2X3VzZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWF4X2Jsb2NrcyAtPSBwcnZfYmxvY2tzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWF4X2J5dGVzID0gbWF4X3VzZWQgKyBNRU1fQkxPQ0tfT1ZFUkhFQUQgKiBtYXhfYmxvY2tzOyAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19wcmludGYoICIlNnUgaGVhcCBieXRlcyIsICh1bnNpZ25lZCkgbWF4X2J5dGVzICk7CisKKyNlbHNlCisjZGVmaW5lIE1FTU9SWV9NRUFTVVJFX0lOSVQKKyNkZWZpbmUgTUVNT1JZX01FQVNVUkVfUFJJTlQoIHRpdGxlX2xlbiApCisjZW5kaWYKKworI2RlZmluZSBUSU1FX1BVQkxJQyggVElUTEUsIFRZUEUsIENPREUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgaWk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGludCByZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1FTU9SWV9NRUFTVVJFX0lOSVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfcHJpbnRmKCBIRUFERVJfRk9STUFULCBUSVRMRSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZmbHVzaCggc3Rkb3V0ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfc2V0X2FsYXJtKCAzICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZvciggaWkgPSAxOyAhIG1iZWR0bHNfdGltaW5nX2FsYXJtZWQgJiYgISByZXQgOyBpaSsrICkgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDT0RFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKCByZXQgIT0gMCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQUklOVF9FUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiU2bHUgIiBUWVBFICIvcyIsIGlpIC8gMyApOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBNRU1PUllfTUVBU1VSRV9QUklOVCggc2l6ZW9mKCBUWVBFICkgKyAxICk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSggMCApCisKK3N0YXRpYyBpbnQgbXlyYW5kKCB2b2lkICpybmdfc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiApCit7CisgICAgc2l6ZV90IHVzZV9sZW47CisgICAgaW50IHJuZDsKKworICAgIGlmKCBybmdfc3RhdGUgIT0gTlVMTCApCisgICAgICAgIHJuZ19zdGF0ZSAgPSBOVUxMOworCisgICAgd2hpbGUoIGxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgdXNlX2xlbiA9IGxlbjsKKyAgICAgICAgaWYoIHVzZV9sZW4gPiBzaXplb2YoaW50KSApCisgICAgICAgICAgICB1c2VfbGVuID0gc2l6ZW9mKGludCk7CisKKyAgICAgICAgcm5kID0gcmFuZCgpOworICAgICAgICBtZW1jcHkoIG91dHB1dCwgJnJuZCwgdXNlX2xlbiApOworICAgICAgICBvdXRwdXQgKz0gdXNlX2xlbjsKKyAgICAgICAgbGVuIC09IHVzZV9sZW47CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBDbGVhciBzb21lIG1lbW9yeSB0aGF0IHdhcyB1c2VkIHRvIHByZXBhcmUgdGhlIGNvbnRleHQKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKK3ZvaWQgZWNwX2NsZWFyX3ByZWNvbXB1dGVkKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwICkKK3sKKyAgICBpZiggZ3JwLT5UICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGk7CisgICAgICAgIGZvciggaSA9IDA7IGkgPCBncnAtPlRfc2l6ZTsgaSsrICkKKyAgICAgICAgICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZncnAtPlRbaV0gKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBncnAtPlQgKTsKKyAgICB9CisgICAgZ3JwLT5UID0gTlVMTDsKKyAgICBncnAtPlRfc2l6ZSA9IDA7Cit9CisjZWxzZQorI2RlZmluZSBlY3BfY2xlYXJfcHJlY29tcHV0ZWQoIGcgKQorI2VuZGlmCisKK3Vuc2lnbmVkIGNoYXIgYnVmW0JVRlNJWkVdOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciBtZDQsIG1kNSwgcmlwZW1kMTYwLCBzaGExLCBzaGEyNTYsIHNoYTUxMiwKKyAgICAgICAgIGFyYzQsIGRlczMsIGRlcywKKyAgICAgICAgIGFlc19jYmMsIGFlc19nY20sIGFlc19jY20sIGFlc19jbWFjLCBkZXMzX2NtYWMsCisgICAgICAgICBjYW1lbGxpYSwgYmxvd2Zpc2gsCisgICAgICAgICBoYXZlZ2UsIGN0cl9kcmJnLCBobWFjX2RyYmcsCisgICAgICAgICByc2EsIGRobSwgZWNkc2EsIGVjZGg7Cit9IHRvZG9fbGlzdDsKKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCBpOworICAgIHVuc2lnbmVkIGNoYXIgdG1wWzIwMF07CisgICAgY2hhciB0aXRsZVtUSVRMRV9MRU5dOworICAgIHRvZG9fbGlzdCB0b2RvOworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisgICAgdW5zaWduZWQgY2hhciBhbGxvY19idWZbSEVBUF9TSVpFXSA9IHsgMCB9OworI2VuZGlmCisKKyAgICBpZiggYXJnYyA8PSAxICkKKyAgICB7CisgICAgICAgIG1lbXNldCggJnRvZG8sIDEsIHNpemVvZiggdG9kbyApICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1lbXNldCggJnRvZG8sIDAsIHNpemVvZiggdG9kbyApICk7CisKKyAgICAgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJtZDQiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5tZDQgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAibWQ1IiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8ubWQ1ID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgInJpcGVtZDE2MCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLnJpcGVtZDE2MCA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJzaGExIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uc2hhMSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJzaGEyNTYiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5zaGEyNTYgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAic2hhNTEyIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uc2hhNTEyID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImFyYzQiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5hcmM0ID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImRlczMiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5kZXMzID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImRlcyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmRlcyA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJhZXNfY2JjIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uYWVzX2NiYyA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJhZXNfZ2NtIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uYWVzX2djbSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJhZXNfY2NtIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uYWVzX2NjbSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJhZXNfY21hYyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmFlc19jbWFjID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImRlczNfY21hYyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmRlczNfY21hYyA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJjYW1lbGxpYSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmNhbWVsbGlhID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImJsb3dmaXNoIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uYmxvd2Zpc2ggPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiaGF2ZWdlIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uaGF2ZWdlID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImN0cl9kcmJnIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uY3RyX2RyYmcgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiaG1hY19kcmJnIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uaG1hY19kcmJnID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgInJzYSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLnJzYSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJkaG0iICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5kaG0gPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiZWNkc2EiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5lY2RzYSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJlY2RoIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uZWNkaCA9IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJVbnJlY29nbml6ZWQgb3B0aW9uOiAlc1xuIiwgYXJndltpXSApOworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiQXZhaWxhYmxlIG9wdGlvbnM6ICIgT1BUSU9OUyApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQoIGFsbG9jX2J1Ziwgc2l6ZW9mKCBhbGxvY19idWYgKSApOworI2VuZGlmCisgICAgbWVtc2V0KCBidWYsIDB4QUEsIHNpemVvZiggYnVmICkgKTsKKyAgICBtZW1zZXQoIHRtcCwgMHhCQiwgc2l6ZW9mKCB0bXAgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorICAgIGlmKCB0b2RvLm1kNCApCisgICAgICAgIFRJTUVfQU5EX1RTQyggIk1ENCIsIG1iZWR0bHNfbWQ0KCBidWYsIEJVRlNJWkUsIHRtcCApICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyAgICBpZiggdG9kby5tZDUgKQorICAgICAgICBUSU1FX0FORF9UU0MoICJNRDUiLCBtYmVkdGxzX21kNSggYnVmLCBCVUZTSVpFLCB0bXAgKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCisgICAgaWYoIHRvZG8ucmlwZW1kMTYwICkKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiUklQRU1EMTYwIiwgbWJlZHRsc19yaXBlbWQxNjAoIGJ1ZiwgQlVGU0laRSwgdG1wICkgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICBpZiggdG9kby5zaGExICkKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiU0hBLTEiLCBtYmVkdGxzX3NoYTEoIGJ1ZiwgQlVGU0laRSwgdG1wICkgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIGlmKCB0b2RvLnNoYTI1NiApCisgICAgICAgIFRJTUVfQU5EX1RTQyggIlNIQS0yNTYiLCBtYmVkdGxzX3NoYTI1NiggYnVmLCBCVUZTSVpFLCB0bXAsIDAgKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgaWYoIHRvZG8uc2hhNTEyICkKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiU0hBLTUxMiIsIG1iZWR0bHNfc2hhNTEyKCBidWYsIEJVRlNJWkUsIHRtcCwgMCApICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisgICAgaWYoIHRvZG8uYXJjNCApCisgICAgeworICAgICAgICBtYmVkdGxzX2FyYzRfY29udGV4dCBhcmM0OworICAgICAgICBtYmVkdGxzX2FyYzRfaW5pdCggJmFyYzQgKTsKKyAgICAgICAgbWJlZHRsc19hcmM0X3NldHVwKCAmYXJjNCwgdG1wLCAzMiApOworICAgICAgICBUSU1FX0FORF9UU0MoICJBUkM0IiwgbWJlZHRsc19hcmM0X2NyeXB0KCAmYXJjNCwgQlVGU0laRSwgYnVmLCBidWYgKSApOworICAgICAgICBtYmVkdGxzX2FyYzRfZnJlZSggJmFyYzQgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGlmKCB0b2RvLmRlczMgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19kZXMzX2NvbnRleHQgZGVzMzsKKyAgICAgICAgbWJlZHRsc19kZXMzX2luaXQoICZkZXMzICk7CisgICAgICAgIG1iZWR0bHNfZGVzM19zZXQza2V5X2VuYyggJmRlczMsIHRtcCApOworICAgICAgICBUSU1FX0FORF9UU0MoICIzREVTIiwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2RlczNfY3J5cHRfY2JjKCAmZGVzMywgTUJFRFRMU19ERVNfRU5DUllQVCwgQlVGU0laRSwgdG1wLCBidWYsIGJ1ZiApICk7CisgICAgICAgIG1iZWR0bHNfZGVzM19mcmVlKCAmZGVzMyApOworICAgIH0KKworICAgIGlmKCB0b2RvLmRlcyApCisgICAgeworICAgICAgICBtYmVkdGxzX2Rlc19jb250ZXh0IGRlczsKKyAgICAgICAgbWJlZHRsc19kZXNfaW5pdCggJmRlcyApOworICAgICAgICBtYmVkdGxzX2Rlc19zZXRrZXlfZW5jKCAmZGVzLCB0bXAgKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiREVTIiwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2Rlc19jcnlwdF9jYmMoICZkZXMsIE1CRURUTFNfREVTX0VOQ1JZUFQsIEJVRlNJWkUsIHRtcCwgYnVmLCBidWYgKSApOworICAgICAgICBtYmVkdGxzX2Rlc19mcmVlKCAmZGVzICk7CisgICAgfQorCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ01BQ19DKQorICAgIGlmKCB0b2RvLmRlczNfY21hYyApCisgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs4XTsKKyAgICAgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKworICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICBtZW1zZXQoIHRtcCwgMCwgc2l6ZW9mKCB0bXAgKSApOworCisgICAgICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0VDQiApOworCisgICAgICAgIFRJTUVfQU5EX1RTQyggIjNERVMtQ01BQyIsCisgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfY21hYyggY2lwaGVyX2luZm8sIHRtcCwgMTkyLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgQlVGU0laRSwgb3V0cHV0ICkgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19DTUFDX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBpZiggdG9kby5hZXNfY2JjICkKKyAgICB7CisgICAgICAgIGludCBrZXlzaXplOworICAgICAgICBtYmVkdGxzX2Flc19jb250ZXh0IGFlczsKKyAgICAgICAgbWJlZHRsc19hZXNfaW5pdCggJmFlcyApOworICAgICAgICBmb3IoIGtleXNpemUgPSAxMjg7IGtleXNpemUgPD0gMjU2OyBrZXlzaXplICs9IDY0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkFFUy1DQkMtJWQiLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgICAgICBtZW1zZXQoIHRtcCwgMCwgc2l6ZW9mKCB0bXAgKSApOworICAgICAgICAgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmFlcywgdG1wLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIFRJTUVfQU5EX1RTQyggdGl0bGUsCisgICAgICAgICAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfY2JjKCAmYWVzLCBNQkVEVExTX0FFU19FTkNSWVBULCBCVUZTSVpFLCB0bXAsIGJ1ZiwgYnVmICkgKTsKKyAgICAgICAgfQorICAgICAgICBtYmVkdGxzX2Flc19mcmVlKCAmYWVzICk7CisgICAgfQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIGlmKCB0b2RvLmFlc19nY20gKQorICAgIHsKKyAgICAgICAgaW50IGtleXNpemU7CisgICAgICAgIG1iZWR0bHNfZ2NtX2NvbnRleHQgZ2NtOworCisgICAgICAgIG1iZWR0bHNfZ2NtX2luaXQoICZnY20gKTsKKyAgICAgICAgZm9yKCBrZXlzaXplID0gMTI4OyBrZXlzaXplIDw9IDI1Njsga2V5c2l6ZSArPSA2NCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJBRVMtR0NNLSVkIiwga2V5c2l6ZSApOworCisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICAgICAgbWVtc2V0KCB0bXAsIDAsIHNpemVvZiggdG1wICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZ2NtX3NldGtleSggJmdjbSwgTUJFRFRMU19DSVBIRVJfSURfQUVTLCB0bXAsIGtleXNpemUgKTsKKworICAgICAgICAgICAgVElNRV9BTkRfVFNDKCB0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19nY21fY3J5cHRfYW5kX3RhZyggJmdjbSwgTUJFRFRMU19HQ01fRU5DUllQVCwgQlVGU0laRSwgdG1wLAorICAgICAgICAgICAgICAgICAgICAgICAgMTIsIE5VTEwsIDAsIGJ1ZiwgYnVmLCAxNiwgdG1wICkgKTsKKworICAgICAgICAgICAgbWJlZHRsc19nY21fZnJlZSggJmdjbSApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorICAgIGlmKCB0b2RvLmFlc19jY20gKQorICAgIHsKKyAgICAgICAgaW50IGtleXNpemU7CisgICAgICAgIG1iZWR0bHNfY2NtX2NvbnRleHQgY2NtOworCisgICAgICAgIG1iZWR0bHNfY2NtX2luaXQoICZjY20gKTsKKyAgICAgICAgZm9yKCBrZXlzaXplID0gMTI4OyBrZXlzaXplIDw9IDI1Njsga2V5c2l6ZSArPSA2NCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJBRVMtQ0NNLSVkIiwga2V5c2l6ZSApOworCisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICAgICAgbWVtc2V0KCB0bXAsIDAsIHNpemVvZiggdG1wICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfY2NtX3NldGtleSggJmNjbSwgTUJFRFRMU19DSVBIRVJfSURfQUVTLCB0bXAsIGtleXNpemUgKTsKKworICAgICAgICAgICAgVElNRV9BTkRfVFNDKCB0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnKCAmY2NtLCBCVUZTSVpFLCB0bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAxMiwgTlVMTCwgMCwgYnVmLCBidWYsIHRtcCwgMTYgKSApOworCisgICAgICAgICAgICBtYmVkdGxzX2NjbV9mcmVlKCAmY2NtICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ01BQ19DKQorICAgIGlmKCB0b2RvLmFlc19jbWFjICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XTsKKyAgICAgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICAgICAgbWJlZHRsc19jaXBoZXJfdHlwZV90IGNpcGhlcl90eXBlOworICAgICAgICBpbnQga2V5c2l6ZTsKKworICAgICAgICBmb3IoIGtleXNpemUgPSAxMjgsIGNpcGhlcl90eXBlID0gTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I7CisgICAgICAgICAgICAga2V5c2l6ZSA8PSAyNTY7CisgICAgICAgICAgICAga2V5c2l6ZSArPSA2NCwgY2lwaGVyX3R5cGUrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJBRVMtQ01BQy0lZCIsIGtleXNpemUgKTsKKworICAgICAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgICAgIG1lbXNldCggdG1wLCAwLCBzaXplb2YoIHRtcCApICk7CisKKyAgICAgICAgICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcl90eXBlICk7CisKKyAgICAgICAgICAgIFRJTUVfQU5EX1RTQyggdGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2NtYWMoIGNpcGhlcl9pbmZvLCB0bXAsIGtleXNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgQlVGU0laRSwgb3V0cHV0ICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgIG1lbXNldCggdG1wLCAwLCBzaXplb2YoIHRtcCApICk7CisgICAgICAgIFRJTUVfQU5EX1RTQyggIkFFUy1DTUFDLVBSRi0xMjgiLAorICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NtYWNfcHJmXzEyOCggdG1wLCAxNiwgYnVmLCBCVUZTSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICkgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19DTUFDX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykgJiYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBpZiggdG9kby5jYW1lbGxpYSApCisgICAgeworICAgICAgICBpbnQga2V5c2l6ZTsKKyAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0IGNhbWVsbGlhOworICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX2luaXQoICZjYW1lbGxpYSApOworICAgICAgICBmb3IoIGtleXNpemUgPSAxMjg7IGtleXNpemUgPD0gMjU2OyBrZXlzaXplICs9IDY0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkNBTUVMTElBLUNCQy0lZCIsIGtleXNpemUgKTsKKworICAgICAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgICAgIG1lbXNldCggdG1wLCAwLCBzaXplb2YoIHRtcCApICk7CisgICAgICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoICZjYW1lbGxpYSwgdG1wLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIFRJTUVfQU5EX1RTQyggdGl0bGUsCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2JjKCAmY2FtZWxsaWEsIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRlNJWkUsIHRtcCwgYnVmLCBidWYgKSApOworICAgICAgICB9CisgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfZnJlZSggJmNhbWVsbGlhICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQkxPV0ZJU0hfQykgJiYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBpZiggdG9kby5ibG93ZmlzaCApCisgICAgeworICAgICAgICBpbnQga2V5c2l6ZTsKKyAgICAgICAgbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0IGJsb3dmaXNoOworICAgICAgICBtYmVkdGxzX2Jsb3dmaXNoX2luaXQoICZibG93ZmlzaCApOworCisgICAgICAgIGZvcigga2V5c2l6ZSA9IDEyODsga2V5c2l6ZSA8PSAyNTY7IGtleXNpemUgKz0gNjQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiQkxPV0ZJU0gtQ0JDLSVkIiwga2V5c2l6ZSApOworCisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICAgICAgbWVtc2V0KCB0bXAsIDAsIHNpemVvZiggdG1wICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfc2V0a2V5KCAmYmxvd2Zpc2gsIHRtcCwga2V5c2l6ZSApOworCisgICAgICAgICAgICBUSU1FX0FORF9UU0MoIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NiYyggJmJsb3dmaXNoLCBNQkVEVExTX0JMT1dGSVNIX0VOQ1JZUFQsIEJVRlNJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICB0bXAsIGJ1ZiwgYnVmICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfZnJlZSggJmJsb3dmaXNoICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRUdFX0MpCisgICAgaWYoIHRvZG8uaGF2ZWdlICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfaGF2ZWdlX3N0YXRlIGhzOworICAgICAgICBtYmVkdGxzX2hhdmVnZV9pbml0KCAmaHMgKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiSEFWRUdFIiwgbWJlZHRsc19oYXZlZ2VfcmFuZG9tKCAmaHMsIGJ1ZiwgQlVGU0laRSApICk7CisgICAgICAgIG1iZWR0bHNfaGF2ZWdlX2ZyZWUoICZocyApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisgICAgaWYoIHRvZG8uY3RyX2RyYmcgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworCisgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBteXJhbmQsIE5VTEwsIE5VTEwsIDAgKSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiQ1RSX0RSQkcgKE5PUFIpIiwKKyAgICAgICAgICAgICAgICBpZiggbWJlZHRsc19jdHJfZHJiZ19yYW5kb20oICZjdHJfZHJiZywgYnVmLCBCVUZTSVpFICkgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBteXJhbmQsIE5VTEwsIE5VTEwsIDAgKSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKTsKKyAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmY3RyX2RyYmcsIE1CRURUTFNfQ1RSX0RSQkdfUFJfT04gKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiQ1RSX0RSQkcgKFBSKSIsCisgICAgICAgICAgICAgICAgaWYoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3RyX2RyYmcsIGJ1ZiwgQlVGU0laRSApICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKSApOworICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hNQUNfRFJCR19DKQorICAgIGlmKCB0b2RvLmhtYWNfZHJiZyApCisgICAgeworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0IGhtYWNfZHJiZzsKKyAgICAgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisKKyAgICAgICAgbWJlZHRsc19obWFjX2RyYmdfaW5pdCggJmhtYWNfZHJiZyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICAgICAgaWYoICggbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMSApICkgPT0gTlVMTCApCisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZobWFjX2RyYmcsIG1kX2luZm8sIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBUSU1FX0FORF9UU0MoICJITUFDX0RSQkcgU0hBLTEgKE5PUFIpIiwKKyAgICAgICAgICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmaG1hY19kcmJnLCBidWYsIEJVRlNJWkUgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSkgKTsKKyAgICAgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmhtYWNfZHJiZyApOworCisgICAgICAgIGlmKCBtYmVkdGxzX2htYWNfZHJiZ19zZWVkKCAmaG1hY19kcmJnLCBtZF9pbmZvLCBteXJhbmQsIE5VTEwsIE5VTEwsIDAgKSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKTsKKyAgICAgICAgbWJlZHRsc19obWFjX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSggJmhtYWNfZHJiZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfSE1BQ19EUkJHX1BSX09OICk7CisgICAgICAgIFRJTUVfQU5EX1RTQyggIkhNQUNfRFJCRyBTSEEtMSAoUFIpIiwKKyAgICAgICAgICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmaG1hY19kcmJnLCBidWYsIEJVRlNJWkUgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSkgKTsKKyAgICAgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmhtYWNfZHJiZyApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgICAgIGlmKCAoIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTI1NiApICkgPT0gTlVMTCApCisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZobWFjX2RyYmcsIG1kX2luZm8sIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBUSU1FX0FORF9UU0MoICJITUFDX0RSQkcgU0hBLTI1NiAoTk9QUikiLAorICAgICAgICAgICAgICAgIGlmKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZobWFjX2RyYmcsIGJ1ZiwgQlVGU0laRSApICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKSApOworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmaG1hY19kcmJnICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZobWFjX2RyYmcsIG1kX2luZm8sIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmaG1hY19kcmJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ITUFDX0RSQkdfUFJfT04gKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiSE1BQ19EUkJHIFNIQS0yNTYgKFBSKSIsCisgICAgICAgICAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggJmhtYWNfZHJiZywgYnVmLCBCVUZTSVpFICkgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpICk7CisgICAgICAgIG1iZWR0bHNfaG1hY19kcmJnX2ZyZWUoICZobWFjX2RyYmcgKTsKKyNlbmRpZgorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfR0VOUFJJTUUpCisgICAgaWYoIHRvZG8ucnNhICkKKyAgICB7CisgICAgICAgIGludCBrZXlzaXplOworICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0IHJzYTsKKyAgICAgICAgZm9yKCBrZXlzaXplID0gMjA0ODsga2V5c2l6ZSA8PSA0MDk2OyBrZXlzaXplICo9IDIgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiUlNBLSVkIiwga2V5c2l6ZSApOworCisgICAgICAgICAgICBtYmVkdGxzX3JzYV9pbml0KCAmcnNhLCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworICAgICAgICAgICAgbWJlZHRsc19yc2FfZ2VuX2tleSggJnJzYSwgbXlyYW5kLCBOVUxMLCBrZXlzaXplLCA2NTUzNyApOworCisgICAgICAgICAgICBUSU1FX1BVQkxJQyggdGl0bGUsICIgcHVibGljIiwKKyAgICAgICAgICAgICAgICAgICAgYnVmWzBdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19yc2FfcHVibGljKCAmcnNhLCBidWYsIGJ1ZiApICk7CisKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgInByaXZhdGUiLAorICAgICAgICAgICAgICAgICAgICBidWZbMF0gPSAwOworICAgICAgICAgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3JzYV9wcml2YXRlKCAmcnNhLCBteXJhbmQsIE5VTEwsIGJ1ZiwgYnVmICkgKTsKKworICAgICAgICAgICAgbWJlZHRsc19yc2FfZnJlZSggJnJzYSApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykKKyAgICBpZiggdG9kby5kaG0gKQorICAgIHsKKyAgICAgICAgaW50IGRobV9zaXplc1tdID0geyAyMDQ4LCAzMDcyIH07CisgICAgICAgIGNvbnN0IGNoYXIgKmRobV9QW10gPSB7CisgICAgICAgICAgICBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMjA0OF9QLAorICAgICAgICAgICAgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzMwNzJfUCwKKyAgICAgICAgfTsKKyAgICAgICAgY29uc3QgY2hhciAqZGhtX0dbXSA9IHsKKyAgICAgICAgICAgIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8yMDQ4X0csCisgICAgICAgICAgICBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMzA3Ml9HLAorICAgICAgICB9OworCisgICAgICAgIG1iZWR0bHNfZGhtX2NvbnRleHQgZGhtOworICAgICAgICBzaXplX3Qgb2xlbjsKKyAgICAgICAgZm9yKCBpID0gMDsgKHNpemVfdCkgaSA8IHNpemVvZiggZGhtX3NpemVzICkgLyBzaXplb2YoIGRobV9zaXplc1swXSApOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2RobV9pbml0KCAmZGhtICk7CisKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmRobS5QLCAxNiwgZGhtX1BbaV0gKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZkaG0uRywgMTYsIGRobV9HW2ldICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRobS5sZW4gPSBtYmVkdGxzX21waV9zaXplKCAmZGhtLlAgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZGhtX21ha2VfcHVibGljKCAmZGhtLCAoaW50KSBkaG0ubGVuLCBidWYsIGRobS5sZW4sIG15cmFuZCwgTlVMTCApOworICAgICAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2NvcHkoICZkaG0uR1ksICZkaG0uR1ggKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkRIRS0lZCIsIGRobV9zaXplc1tpXSApOworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAiaGFuZHNoYWtlIiwKKyAgICAgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZGhtX21ha2VfcHVibGljKCAmZGhtLCAoaW50KSBkaG0ubGVuLCBidWYsIGRobS5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApOworICAgICAgICAgICAgICAgICAgICByZXQgfD0gbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoICZkaG0sIGJ1Ziwgc2l6ZW9mKCBidWYgKSwgJm9sZW4sIG15cmFuZCwgTlVMTCApICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJESC0lZCIsIGRobV9zaXplc1tpXSApOworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAiaGFuZHNoYWtlIiwKKyAgICAgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0KCAmZGhtLCBidWYsIHNpemVvZiggYnVmICksICZvbGVuLCBteXJhbmQsIE5VTEwgKSApOworCisgICAgICAgICAgICBtYmVkdGxzX2RobV9mcmVlKCAmZGhtICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgaWYoIHRvZG8uZWNkc2EgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19lY2RzYV9jb250ZXh0IGVjZHNhOworICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9pbmZvOworICAgICAgICBzaXplX3Qgc2lnX2xlbjsKKworICAgICAgICBtZW1zZXQoIGJ1ZiwgMHgyQSwgc2l6ZW9mKCBidWYgKSApOworCisgICAgICAgIGZvciggY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvLT5ncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjZHNhX2luaXQoICZlY2RzYSApOworCisgICAgICAgICAgICBpZiggbWJlZHRsc19lY2RzYV9nZW5rZXkoICZlY2RzYSwgY3VydmVfaW5mby0+Z3JwX2lkLCBteXJhbmQsIE5VTEwgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICAgICAgICAgIGVjcF9jbGVhcl9wcmVjb21wdXRlZCggJmVjZHNhLmdycCApOworCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiRUNEU0EtJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlX2luZm8tPm5hbWUgKTsKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgInNpZ24iLAorICAgICAgICAgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZSggJmVjZHNhLCBNQkVEVExTX01EX1NIQTI1NiwgYnVmLCBjdXJ2ZV9pbmZvLT5iaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgJnNpZ19sZW4sIG15cmFuZCwgTlVMTCApICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkc2FfZnJlZSggJmVjZHNhICk7CisgICAgICAgIH0KKworICAgICAgICBmb3IoIGN1cnZlX2luZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCk7CisgICAgICAgICAgICAgY3VydmVfaW5mby0+Z3JwX2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7CisgICAgICAgICAgICAgY3VydmVfaW5mbysrICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19lY2RzYV9pbml0KCAmZWNkc2EgKTsKKworICAgICAgICAgICAgaWYoIG1iZWR0bHNfZWNkc2FfZ2Vua2V5KCAmZWNkc2EsIGN1cnZlX2luZm8tPmdycF9pZCwgbXlyYW5kLCBOVUxMICkgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNkc2Ffd3JpdGVfc2lnbmF0dXJlKCAmZWNkc2EsIE1CRURUTFNfTURfU0hBMjU2LCBidWYsIGN1cnZlX2luZm8tPmJpdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsICZzaWdfbGVuLCBteXJhbmQsIE5VTEwgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVjcF9jbGVhcl9wcmVjb21wdXRlZCggJmVjZHNhLmdycCApOworCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiRUNEU0EtJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlX2luZm8tPm5hbWUgKTsKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgInZlcmlmeSIsCisgICAgICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZWNkc2FfcmVhZF9zaWduYXR1cmUoICZlY2RzYSwgYnVmLCBjdXJ2ZV9pbmZvLT5iaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgc2lnX2xlbiApICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkc2FfZnJlZSggJmVjZHNhICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpCisgICAgaWYoIHRvZG8uZWNkaCApCisgICAgeworICAgICAgICBtYmVkdGxzX2VjZGhfY29udGV4dCBlY2RoOworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEKQorICAgICAgICBtYmVkdGxzX21waSB6OworI2VuZGlmCisgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKmN1cnZlX2luZm87CisgICAgICAgIHNpemVfdCBvbGVuOworCisgICAgICAgIGZvciggY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvLT5ncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjZGhfaW5pdCggJmVjZGggKTsKKworICAgICAgICAgICAgaWYoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZlY2RoLmdycCwgY3VydmVfaW5mby0+Z3JwX2lkICkgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9tYWtlX3B1YmxpYyggJmVjZGgsICZvbGVuLCBidWYsIHNpemVvZiggYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfY29weSggJmVjZGguUXAsICZlY2RoLlEgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVjcF9jbGVhcl9wcmVjb21wdXRlZCggJmVjZGguZ3JwICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJFQ0RIRS0lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVfaW5mby0+bmFtZSApOworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAiaGFuZHNoYWtlIiwKKyAgICAgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZWNkaF9tYWtlX3B1YmxpYyggJmVjZGgsICZvbGVuLCBidWYsIHNpemVvZiggYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApOworICAgICAgICAgICAgICAgICAgICByZXQgfD0gbWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0KCAmZWNkaCwgJm9sZW4sIGJ1Ziwgc2l6ZW9mKCBidWYgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApICk7CisgICAgICAgICAgICBtYmVkdGxzX2VjZGhfZnJlZSggJmVjZGggKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEN1cnZlMjU1MTkgbmVlZHMgdG8gYmUgaGFuZGxlZCBzZXBhcmF0ZWx5ICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQpCisgICAgICAgIG1iZWR0bHNfZWNkaF9pbml0KCAmZWNkaCApOworICAgICAgICBtYmVkdGxzX21waV9pbml0KCAmeiApOworCisgICAgICAgIGlmKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZWNkaC5ncnAsIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTkgKSAhPSAwIHx8CisgICAgICAgICAgICBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyggJmVjZGguZ3JwLCAmZWNkaC5kLCAmZWNkaC5RcCwgbXlyYW5kLCBOVUxMICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworICAgICAgICB9CisKKyAgICAgICAgVElNRV9QVUJMSUMoICAiRUNESEUtQ3VydmUyNTUxOSIsICJoYW5kc2hha2UiLAorICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyggJmVjZGguZ3JwLCAmZWNkaC5kLCAmZWNkaC5RLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApOworICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoICZlY2RoLmdycCwgJnosICZlY2RoLlFwLCAmZWNkaC5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSApOworCisgICAgICAgIG1iZWR0bHNfZWNkaF9mcmVlKCAmZWNkaCApOworICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmeiApOworI2VuZGlmCisKKyAgICAgICAgZm9yKCBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpOworICAgICAgICAgICAgIGN1cnZlX2luZm8tPmdycF9pZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOworICAgICAgICAgICAgIGN1cnZlX2luZm8rKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9pbml0KCAmZWNkaCApOworCisgICAgICAgICAgICBpZiggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmVjZGguZ3JwLCBjdXJ2ZV9pbmZvLT5ncnBfaWQgKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWJlZHRsc19lY2RoX21ha2VfcHVibGljKCAmZWNkaCwgJm9sZW4sIGJ1Ziwgc2l6ZW9mKCBidWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9jb3B5KCAmZWNkaC5RcCwgJmVjZGguUSApICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMoICZlY2RoLCAmb2xlbiwgYnVmLCBzaXplb2YoIGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlY3BfY2xlYXJfcHJlY29tcHV0ZWQoICZlY2RoLmdycCApOworCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiRUNESC0lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVfaW5mby0+bmFtZSApOworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAiaGFuZHNoYWtlIiwKKyAgICAgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldCggJmVjZGgsICZvbGVuLCBidWYsIHNpemVvZiggYnVmICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSApOworICAgICAgICAgICAgbWJlZHRsc19lY2RoX2ZyZWUoICZlY2RoICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBDdXJ2ZTI1NTE5IG5lZWRzIHRvIGJlIGhhbmRsZWQgc2VwYXJhdGVseSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEKQorICAgICAgICBtYmVkdGxzX2VjZGhfaW5pdCggJmVjZGggKTsKKyAgICAgICAgbWJlZHRsc19tcGlfaW5pdCggJnogKTsKKworICAgICAgICBpZiggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmVjZGguZ3JwLCBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5ICkgIT0gMCB8fAorICAgICAgICAgICAgbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoICZlY2RoLmdycCwgJmVjZGguZCwgJmVjZGguUXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApICE9IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCAmZWNkaC5ncnAsICZlY2RoLmQsICZlY2RoLlEsIG15cmFuZCwgTlVMTCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICAgICAgfQorCisgICAgICAgIFRJTUVfUFVCTElDKCAgIkVDREgtQ3VydmUyNTUxOSIsICJoYW5kc2hha2UiLAorICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoICZlY2RoLmdycCwgJnosICZlY2RoLlFwLCAmZWNkaC5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSApOworCisgICAgICAgIG1iZWR0bHNfZWNkaF9mcmVlKCAmZWNkaCApOworICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmeiApOworI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfVElNSU5HX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy90ZXN0L3NlbGZ0ZXN0LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdGVzdC9zZWxmdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDFhZDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdGVzdC9zZWxmdGVzdC5jCkBAIC0wLDAgKzEsNDUyIEBACisvKgorICogIFNlbGYtdGVzdCBkZW1vbnN0cmF0aW9uIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weV9wb2xsLmgiCisjaW5jbHVkZSAibWJlZHRscy9obWFjX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9kaG0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL2djbS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2NtLmgiCisjaW5jbHVkZSAibWJlZHRscy9jbWFjLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZDIuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kNC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQ1LmgiCisjaW5jbHVkZSAibWJlZHRscy9yaXBlbWQxNjAuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTI1Ni5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhNTEyLmgiCisjaW5jbHVkZSAibWJlZHRscy9hcmM0LmgiCisjaW5jbHVkZSAibWJlZHRscy9kZXMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Flcy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2FtZWxsaWEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Jhc2U2NC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYmlnbnVtLmgiCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3h0ZWEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3BrY3M1LmgiCisjaW5jbHVkZSAibWJlZHRscy9lY3AuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VjanBha2UuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3RpbWluZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfZXhpdCAgICAgICBleGl0CisjZGVmaW5lIE1CRURUTFNfRVhJVF9TVUNDRVNTIEVYSVRfU1VDQ0VTUworI2RlZmluZSBNQkVEVExTX0VYSVRfRkFJTFVSRSBFWElUX0ZBSUxVUkUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyNpbmNsdWRlICJtYmVkdGxzL21lbW9yeV9idWZmZXJfYWxsb2MuaCIKKyNlbmRpZgorCitzdGF0aWMgaW50IHRlc3Rfc25wcmludGYoIHNpemVfdCBuLCBjb25zdCBjaGFyIHJlZl9idWZbMTBdLCBpbnQgcmVmX3JldCApCit7CisgICAgaW50IHJldDsKKyAgICBjaGFyIGJ1ZlsxMF0gPSAieHh4eHh4eHh4IjsKKyAgICBjb25zdCBjaGFyIHJlZlsxMF0gPSAieHh4eHh4eHh4IjsKKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgbiwgIiVzIiwgIjEyMyIgKTsKKyAgICBpZiggcmV0IDwgMCB8fCAoc2l6ZV90KSByZXQgPj0gbiApCisgICAgICAgIHJldCA9IC0xOworCisgICAgaWYoIHN0cm5jbXAoIHJlZl9idWYsIGJ1Ziwgc2l6ZW9mKCBidWYgKSApICE9IDAgfHwKKyAgICAgICAgcmVmX3JldCAhPSByZXQgfHwKKyAgICAgICAgbWVtY21wKCBidWYgKyBuLCByZWYgKyBuLCBzaXplb2YoIGJ1ZiApIC0gbiApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3Rlc3Rfc25wcmludGYoIHZvaWQgKQoreworICAgIHJldHVybiggdGVzdF9zbnByaW50ZiggMCwgInh4eHh4eHh4eCIsICAtMSApICE9IDAgfHwKKyAgICAgICAgICAgIHRlc3Rfc25wcmludGYoIDEsICIiLCAgICAgICAgICAgLTEgKSAhPSAwIHx8CisgICAgICAgICAgICB0ZXN0X3NucHJpbnRmKCAyLCAiMSIsICAgICAgICAgIC0xICkgIT0gMCB8fAorICAgICAgICAgICAgdGVzdF9zbnByaW50ZiggMywgIjEyIiwgICAgICAgICAtMSApICE9IDAgfHwKKyAgICAgICAgICAgIHRlc3Rfc25wcmludGYoIDQsICIxMjMiLCAgICAgICAgIDMgKSAhPSAwIHx8CisgICAgICAgICAgICB0ZXN0X3NucHJpbnRmKCA1LCAiMTIzIiwgICAgICAgICAzICkgIT0gMCApOworfQorCisvKgorICogQ2hlY2sgaWYgYSBzZWVkIGZpbGUgaXMgcHJlc2VudCwgYW5kIGlmIG5vdCBjcmVhdGUgb25lIGZvciB0aGUgZW50cm9weQorICogc2VsZi10ZXN0LiBJZiB0aGlzIGZhaWxzLCB3ZSBhdHRlbXB0IHRoZSB0ZXN0IGFueXdheSwgc28gbm8gZXJyb3IgaXMgcGFzc2VkCisgKiBiYWNrLgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkgJiYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpICYmICFkZWZpbmVkKE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWSkKK3N0YXRpYyB2b2lkIGNyZWF0ZV9lbnRyb3B5X3NlZWRfZmlsZSggdm9pZCApCit7CisgICAgaW50IHJlc3VsdDsKKyAgICBzaXplX3Qgb3V0cHV0X2xlbiA9IDA7CisgICAgdW5zaWduZWQgY2hhciBzZWVkX3ZhbHVlW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXTsKKworICAgIC8qIEF0dGVtcHQgdG8gcmVhZCB0aGUgZW50cm9weSBzZWVkIGZpbGUuIElmIHRoaXMgZmFpbHMgLSBhdHRlbXB0IHRvIHdyaXRlCisgICAgICogdG8gdGhlIGZpbGUgdG8gZW5zdXJlIG9uZSBpcyBwcmVzZW50LiAqLworICAgIHJlc3VsdCA9IG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfcmVhZCggc2VlZF92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworICAgIGlmKCAwID09IHJlc3VsdCApCisgICAgICAgIHJldHVybjsKKworICAgIHJlc3VsdCA9IG1iZWR0bHNfcGxhdGZvcm1fZW50cm9weV9wb2xsKCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB1dF9sZW4gKTsKKyAgICBpZiggMCAhPSByZXN1bHQgKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiggTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgIT0gb3V0cHV0X2xlbiApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfd3JpdGUoIHNlZWRfdmFsdWUsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7Cit9CisjZW5kaWYKKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCB2LCBzdWl0ZXNfdGVzdGVkID0gMCwgc3VpdGVzX2ZhaWxlZCA9IDA7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykgJiYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDAwMDAwXTsKKyNlbmRpZgorICAgIHZvaWQgKnBvaW50ZXI7CisKKyAgICAvKgorICAgICAqIFRoZSBDIHN0YW5kYXJkIGRvZXNuJ3QgZ3VhcmFudGVlIHRoYXQgYWxsLWJpdHMtMCBpcyB0aGUgcmVwcmVzZW50YXRpb24KKyAgICAgKiBvZiBhIE5VTEwgcG9pbnRlci4gV2UgZG8gaG93ZXZlciB1c2UgdGhhdCBpbiBvdXIgY29kZSBmb3IgaW5pdGlhbGl6aW5nCisgICAgICogc3RydWN0dXJlcywgd2hpY2ggc2hvdWxkIHdvcmsgb24gZXZlcnkgbW9kZXJuIHBsYXRmb3JtLiBMZXQncyBiZSBzdXJlLgorICAgICAqLworICAgIG1lbXNldCggJnBvaW50ZXIsIDAsIHNpemVvZiggdm9pZCAqICkgKTsKKyAgICBpZiggcG9pbnRlciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiYWxsLWJpdHMtemVybyBpcyBub3QgYSBOVUxMIHBvaW50ZXJcbiIgKTsKKyAgICAgICAgbWJlZHRsc19leGl0KCBNQkVEVExTX0VYSVRfRkFJTFVSRSApOworICAgIH0KKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIHdlIGhhdmUgYSBzbnByaW50ZiB0aGF0IGNvcnJlY3RseSB6ZXJvLXRlcm1pbmF0ZXMKKyAgICAgKi8KKyAgICBpZiggcnVuX3Rlc3Rfc25wcmludGYoKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAidGhlIHNucHJpbnRmIGltcGxlbWVudGF0aW9uIGlzIGJyb2tlblxuIiApOworICAgICAgICBtYmVkdGxzX2V4aXQoIE1CRURUTFNfRVhJVF9GQUlMVVJFICk7CisgICAgfQorCisgICAgaWYoIGFyZ2MgPT0gMiAmJiAoIHN0cmNtcCggYXJndlsxXSwgIi0tcXVpZXQiICkgPT0gMCAgfHwKKyAgICAgICAgc3RyY21wKCBhcmd2WzFdLCAiLXEiICkgPT0gMCApICkKKyAgICB7CisgICAgICAgIHYgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggYnVmLCBzaXplb2YoYnVmKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQyX0MpCisgICAgaWYoIG1iZWR0bHNfbWQyX3NlbGZfdGVzdCggdiApICAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCisgICAgaWYoIG1iZWR0bHNfbWQ0X3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyAgICBpZiggbWJlZHRsc19tZDVfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JJUEVNRDE2MF9DKQorICAgIGlmKCBtYmVkdGxzX3JpcGVtZDE2MF9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIGlmKCBtYmVkdGxzX3NoYTFfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIGlmKCBtYmVkdGxzX3NoYTI1Nl9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgaWYoIG1iZWR0bHNfc2hhNTEyX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisgICAgaWYoIG1iZWR0bHNfYXJjNF9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisgICAgaWYoIG1iZWR0bHNfZGVzX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyAgICBpZiggbWJlZHRsc19hZXNfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisgICAgaWYoIG1iZWR0bHNfZ2NtX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykgJiYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorICAgIGlmKCBtYmVkdGxzX2NjbV9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ01BQ19DKQorICAgIGlmKCAoIG1iZWR0bHNfY21hY19zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CQVNFNjRfQykKKyAgICBpZiggbWJlZHRsc19iYXNlNjRfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQorICAgIGlmKCBtYmVkdGxzX21waV9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgaWYoIG1iZWR0bHNfcnNhX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1VTRV9DKQorICAgIGlmKCBtYmVkdGxzX3g1MDlfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1hURUFfQykKKyAgICBpZiggbWJlZHRsc194dGVhX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKQorICAgIGlmKCBtYmVkdGxzX2NhbWVsbGlhX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQorICAgIGlmKCBtYmVkdGxzX2N0cl9kcmJnX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ITUFDX0RSQkdfQykKKyAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGlmKCBtYmVkdGxzX2VjcF9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNKUEFLRV9DKQorICAgIGlmKCBtYmVkdGxzX2VjanBha2Vfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorICAgIGlmKCBtYmVkdGxzX2RobV9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKQorCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkgJiYgIWRlZmluZWQoTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZKQorICAgIGNyZWF0ZV9lbnRyb3B5X3NlZWRfZmlsZSgpOworI2VuZGlmCisKKyAgICBpZiggbWJlZHRsc19lbnRyb3B5X3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTNV9DKQorICAgIGlmKCBtYmVkdGxzX3BrY3M1X3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworLyogU2xvdyB0ZXN0cyBsYXN0ICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisgICAgaWYoIG1iZWR0bHNfdGltaW5nX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworICAgIGlmKCB2ICE9IDAgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKSAmJiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc3RhdHVzKCk7CisjZW5kaWYKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCk7CisgICAgaWYoIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNlbHNlCisgICAgbWJlZHRsc19wcmludGYoICIgTUJFRFRMU19TRUxGX1RFU1Qgbm90IGRlZmluZWQuXG4iICk7CisjZW5kaWYKKworICAgIGlmKCB2ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEV4ZWN1dGVkICVkIHRlc3Qgc3VpdGVzXG5cbiIsIHN1aXRlc190ZXN0ZWQgKTsKKworICAgICAgICBpZiggc3VpdGVzX2ZhaWxlZCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICVkIHRlc3RzIEZBSUwgXVxuXG4iLCBzdWl0ZXNfZmFpbGVkICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyBBbGwgdGVzdHMgUEFTUyBdXG5cbiIgKTsKKyAgICAgICAgfQorI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmKCBzdWl0ZXNfZmFpbGVkID4gMCkKKyAgICAgICAgbWJlZHRsc19leGl0KCBNQkVEVExTX0VYSVRfRkFJTFVSRSApOworCisgICAgLyogcmV0dXJuKCkgaXMgaGVyZSB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzICovCisgICAgcmV0dXJuKCBNQkVEVExTX0VYSVRfU1VDQ0VTUyApOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdGVzdC9zc2xfY2VydF90ZXN0LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdGVzdC9zc2xfY2VydF90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmY2QyZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy90ZXN0L3NzbF9jZXJ0X3Rlc3QuYwpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqICBTU0wgY2VydGlmaWNhdGUgZnVuY3Rpb25hbGl0eSB0ZXN0cworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgc25wcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0ZTX0lPKSAmJiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQykKKyNpbmNsdWRlICJtYmVkdGxzL2NlcnRzLmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5X2NydC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjZGVmaW5lIE1BWF9DTElFTlRfQ0VSVFMgICAgOAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX1JTQV9DIGFuZC9vciBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgIgorICAgICAgICAgICAiTUJFRFRMU19GU19JTyBhbmQvb3IgTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DICIKKyAgICAgICAgICAgIm5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorY29uc3QgY2hhciAqY2xpZW50X2NlcnRpZmljYXRlc1tNQVhfQ0xJRU5UX0NFUlRTXSA9Cit7CisgICAgImNsaWVudDEuY3J0IiwKKyAgICAiY2xpZW50Mi5jcnQiLAorICAgICJzZXJ2ZXIxLmNydCIsCisgICAgInNlcnZlcjIuY3J0IiwKKyAgICAiY2VydF9zaGEyMjQuY3J0IiwKKyAgICAiY2VydF9zaGEyNTYuY3J0IiwKKyAgICAiY2VydF9zaGEzODQuY3J0IiwKKyAgICAiY2VydF9zaGE1MTIuY3J0IgorfTsKKworY29uc3QgY2hhciAqY2xpZW50X3ByaXZhdGVfa2V5c1tNQVhfQ0xJRU5UX0NFUlRTXSA9Cit7CisgICAgImNsaWVudDEua2V5IiwKKyAgICAiY2xpZW50Mi5rZXkiLAorICAgICJzZXJ2ZXIxLmtleSIsCisgICAgInNlcnZlcjIua2V5IiwKKyAgICAiY2VydF9kaWdlc3Qua2V5IiwKKyAgICAiY2VydF9kaWdlc3Qua2V5IiwKKyAgICAiY2VydF9kaWdlc3Qua2V5IiwKKyAgICAiY2VydF9kaWdlc3Qua2V5IgorfTsKKworaW50IG1haW4oIHZvaWQgKQoreworICAgIGludCByZXQsIGk7CisgICAgbWJlZHRsc194NTA5X2NydCBjYWNlcnQ7CisgICAgbWJlZHRsc194NTA5X2NybCBjcmw7CisgICAgY2hhciBidWZbMTAyNDBdOworCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2FjZXJ0ICk7CisgICAgbWJlZHRsc194NTA5X2NybF9pbml0KCAmY3JsICk7CisKKyAgICAvKgorICAgICAqIDEuMS4gTG9hZCB0aGUgdHJ1c3RlZCBDQQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gTG9hZGluZyB0aGUgQ0Egcm9vdCBjZXJ0aWZpY2F0ZSAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIC8qCisgICAgICogQWx0ZXJuYXRpdmVseSwgeW91IG1heSBsb2FkIHRoZSBDQSBjZXJ0aWZpY2F0ZXMgZnJvbSBhIC5wZW0gb3IKKyAgICAgKiAuY3J0IGZpbGUgYnkgY2FsbGluZyBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjYWNlcnQsICJteWNhLmNydCIgKS4KKyAgICAgKi8KKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjYWNlcnQsICJzc2wvdGVzdC1jYS90ZXN0LWNhLmNydCIgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luZm8oIGJ1ZiwgMTAyNCwgIkNSVDogIiwgJmNhY2VydCApOworICAgIG1iZWR0bHNfcHJpbnRmKCIlc1xuIiwgYnVmICk7CisKKyAgICAvKgorICAgICAqIDEuMi4gTG9hZCB0aGUgQ1JMCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgQ1JMIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlKCAmY3JsLCAic3NsL3Rlc3QtY2EvY3JsLnBlbSIgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZmlsZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2luZm8oIGJ1ZiwgMTAyNCwgIkNSTDogIiwgJmNybCApOworICAgIG1iZWR0bHNfcHJpbnRmKCIlc1xuIiwgYnVmICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgTUFYX0NMSUVOVF9DRVJUUzsgaSsrICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIDEuMy4gTG9hZCBvd24gY2VydGlmaWNhdGUKKyAgICAgICAgICovCisgICAgICAgIGNoYXIgICAgbmFtZVs1MTJdOworICAgICAgICB1aW50MzJfdCBmbGFnczsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydCBjbGljZXJ0OworICAgICAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2xpY2VydCApOworICAgICAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgICAgIG1iZWR0bHNfc25wcmludGYobmFtZSwgNTEyLCAic3NsL3Rlc3QtY2EvJXMiLCBjbGllbnRfY2VydGlmaWNhdGVzW2ldKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgJXMuLi4iLCBuYW1lICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY2xpY2VydCwgbmFtZSApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiAxLjQuIFZlcmlmeSBjZXJ0aWZpY2F0ZSB2YWxpZGl0eSB3aXRoIENBIGNlcnRpZmljYXRlCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBWZXJpZnkgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSB3aXRoIENBIGNlcnRpZmljYXRlLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5KCAmY2xpY2VydCwgJmNhY2VydCwgJmNybCwgTlVMTCwgJmZsYWdzLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGNoYXIgdnJmeV9idWZbNTEyXTsKKworICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiIgKTsKKyAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfaW5mbyggdnJmeV9idWYsIHNpemVvZiggdnJmeV9idWYgKSwgIiAgISAiLCBmbGFncyApOworICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCB2cmZ5X2J1ZiApOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIDEuNS4gTG9hZCBvd24gcHJpdmF0ZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfc25wcmludGYobmFtZSwgNTEyLCAic3NsL3Rlc3QtY2EvJXMiLCBjbGllbnRfcHJpdmF0ZV9rZXlzW2ldKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIHRoZSBjbGllbnQgcHJpdmF0ZSBrZXkgJXMuLi4iLCBuYW1lICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmcGssIG5hbWUsIE5VTEwgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogMS42LiBWZXJpZnkgY2VydGlmaWNhdGUgdmFsaWRpdHkgd2l0aCBwcml2YXRlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gVmVyaWZ5IHRoZSBjbGllbnQgY2VydGlmaWNhdGUgd2l0aCBwcml2YXRlIGtleS4uLiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworCisgICAgICAgIC8qIEVDIE5PVCBJTVBMRU1FTlRFRCBZRVQgKi8KKyAgICAgICAgaWYoICEgbWJlZHRsc19wa19jYW5fZG8oICZjbGljZXJ0LnBrLCBNQkVEVExTX1BLX1JTQSApICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIGNlcnRpZmljYXRlJ3Mga2V5IGlzIG5vdCBSU0FcblxuIiApOworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfWDUwOV9GRUFUVVJFX1VOQVZBSUxBQkxFOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19tcGlfY21wX21waSgmbWJlZHRsc19wa19yc2EoIHBrICktPk4sICZtYmVkdGxzX3BrX3JzYSggY2xpY2VydC5wayApLT5OKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfbXBpX2NtcF9tcGkgZm9yIE4gcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBtYmVkdGxzX21waV9jbXBfbXBpKCZtYmVkdGxzX3BrX3JzYSggcGsgKS0+RSwgJm1iZWR0bHNfcGtfcnNhKCBjbGljZXJ0LnBrICktPkUpOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19tcGlfY21wX21waSBmb3IgRSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoIG1iZWR0bHNfcGtfcnNhKCBwayApICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjbGljZXJ0ICk7CisgICAgICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNhY2VydCApOworICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggJmNybCApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICYmIE1CRURUTFNfRlNfSU8gJiYKKyAgICAgICAgICBNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy90ZXN0L3VkcF9wcm94eS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3Rlc3QvdWRwX3Byb3h5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA2MjRkMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy90ZXN0L3VkcF9wcm94eS5jCkBAIC0wLDAgKzEsNjE4IEBACisvKgorICogIFVEUCBwcm94eTogZW11bGF0ZSBhbiB1bnJlbGlhYmxlIFVEUCBjb25uZXhpb24gZm9yIERUTFMgdGVzdGluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKgorICogV2FybmluZzogdGhpcyBpcyBhbiBpbnRlcm5hbCB1dGlsaXR5IHByb2dyYW0gd2UgdXNlIGZvciB0ZXN0cy4KKyAqIEl0IGRvZXMgYnJlYWsgc29tZSBhYnN0cmFjdGlvbnMgZnJvbSB0aGUgTkVUIGxheWVyLCBhbmQgaXMgdGh1cyBOT1QgYW4KKyAqIGV4YW1wbGUgb2YgZ29vZCBnZW5lcmFsIHVzYWdlLgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2RlZmluZSBtYmVkdGxzX3RpbWUgICAgICAgdGltZQorI2RlZmluZSBtYmVkdGxzX3RpbWVfdCAgICAgdGltZV90CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19ORVRfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZiggIk1CRURUTFNfTkVUX0Mgbm90IGRlZmluZWQuXG4iICk7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIEZvciBzZWxlY3QoKSAqLworI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKSkgJiYgIWRlZmluZWQoRUZJWDY0KSAmJiBcCisgICAgIWRlZmluZWQoRUZJMzIpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCisjcHJhZ21hIGNvbW1lbnQoIGxpYiwgIndzMi5saWIiICkKKyNlbHNlCisjcHJhZ21hIGNvbW1lbnQoIGxpYiwgIndzMl8zMi5saWIiICkKKyNlbmRpZgorI2VuZGlmIC8qIF9NU0NfVkVSICovCisjZWxzZSAvKiAoIF9XSU4zMiB8fCBfV0lOMzJfV0NFICkgJiYgIUVGSVg2NCAmJiAhRUZJMzIgKi8KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIC8qICggX1dJTjMyIHx8IF9XSU4zMl9XQ0UgKSAmJiAhRUZJWDY0ICYmICFFRkkzMiAqLworCisvKiBGb3IgZ2V0dGltZW9mZGF5KCkgKi8KKyNpZiAhZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorCisjZGVmaW5lIE1BWF9NU0dfU0laRSAgICAgICAgICAgIDE2Mzg0ICsgMjA0OCAvKiBtYXggcmVjb3JkL2RhdGFncmFtIHNpemUgKi8KKworI2RlZmluZSBERkxfU0VSVkVSX0FERFIgICAgICAgICAibG9jYWxob3N0IgorI2RlZmluZSBERkxfU0VSVkVSX1BPUlQgICAgICAgICAiNDQzMyIKKyNkZWZpbmUgREZMX0xJU1RFTl9BRERSICAgICAgICAgImxvY2FsaG9zdCIKKyNkZWZpbmUgREZMX0xJU1RFTl9QT1JUICAgICAgICAgIjU1NTYiCisKKyNkZWZpbmUgVVNBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIHVzYWdlOiB1ZHBfcHJveHkgcGFyYW09PD4uLi5cbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICJcbiBhY2NlcHRhYmxlIHBhcmFtZXRlcnM6XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHNlcnZlcl9hZGRyPSUlcyAgICAgIGRlZmF1bHQ6IGxvY2FsaG9zdFxuIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBzZXJ2ZXJfcG9ydD0lJWQgICAgICBkZWZhdWx0OiA0NDMzXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgbGlzdGVuX2FkZHI9JSVzICAgICAgZGVmYXVsdDogbG9jYWxob3N0XG4iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGxpc3Rlbl9wb3J0PSUlZCAgICAgIGRlZmF1bHQ6IDQ0MzNcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgZHVwbGljYXRlPSUlZCAgICAgICAgZGVmYXVsdDogMCAobm8gZHVwbGljYXRpb24pXG4iICAgICAgICAgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZHVwbGljYXRlIGFib3V0IDE6TiBwYWNrZXRzIHJhbmRvbWx5XG4iICAgICAgICBcCisgICAgIiAgICBkZWxheT0lJWQgICAgICAgICAgICBkZWZhdWx0OiAwIChubyBkZWxheWVkIHBhY2tldHMpXG4iICAgICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBkZWxheSBhYm91dCAxOk4gcGFja2V0cyByYW5kb21seVxuIiAgICAgICAgICAgIFwKKyAgICAiICAgIGRlbGF5X2Njcz0wLzEgICAgICAgZGVmYXVsdDogMCAoZG9uJ3QgZGVsYXkgQ2hhbmdlQ2lwaGVyU3BlYylcbiIgICBcCisgICAgIiAgICBkcm9wPSUlZCAgICAgICAgICAgICBkZWZhdWx0OiAwIChubyBkcm9wcGVkIHBhY2tldHMpXG4iICAgICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBkcm9wIGFib3V0IDE6TiBwYWNrZXRzIHJhbmRvbWx5XG4iICAgICAgICAgICAgIFwKKyAgICAiICAgIG10dT0lJWQgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKHVubGltaXRlZClcbiIgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3AgcGFja2V0cyBsYXJnZXIgdGhhbiBOIGJ5dGVzXG4iICAgICAgICAgICAgXAorICAgICIgICAgYmFkX2FkPTAvMSAgICAgICAgICBkZWZhdWx0OiAwIChkb24ndCBhZGQgYmFkIEFwcGxpY2F0aW9uRGF0YSlcbiIgIFwKKyAgICAiICAgIHByb3RlY3RfaHZyPTAvMSAgICAgZGVmYXVsdDogMCAoZG9uJ3QgcHJvdGVjdCBIZWxsb1ZlcmlmeVJlcXVlc3QpXG4iIFwKKyAgICAiICAgIHByb3RlY3RfbGVuPSUlZCAgICAgZGVmYXVsdDogKGRvbid0IHByb3RlY3QgcGFja2V0cyBvZiB0aGlzIHNpemUpXG4iIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBzZWVkPSUlZCAgICAgICAgICAgICBkZWZhdWx0OiAodXNlIGN1cnJlbnQgdGltZSlcbiIgICAgICAgICAgICAgICAgXAorICAgICJcbiIKKworLyoKKyAqIGdsb2JhbCBvcHRpb25zCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9ucworeworICAgIGNvbnN0IGNoYXIgKnNlcnZlcl9hZGRyOyAgICAvKiBhZGRyZXNzIHRvIGZvcndhcmQgcGFja2V0cyB0byAgICAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqc2VydmVyX3BvcnQ7ICAgIC8qIHBvcnQgdG8gZm9yd2FyZCBwYWNrZXRzIHRvICAgICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpsaXN0ZW5fYWRkcjsgICAgLyogYWRkcmVzcyBmb3IgYWNjZXB0aW5nIGNsaWVudCBjb25uZWN0aW9ucyAqLworICAgIGNvbnN0IGNoYXIgKmxpc3Rlbl9wb3J0OyAgICAvKiBwb3J0IGZvciBhY2NlcHRpbmcgY2xpZW50IGNvbm5lY3Rpb25zICAgICovCisKKyAgICBpbnQgZHVwbGljYXRlOyAgICAgICAgICAgICAgLyogZHVwbGljYXRlIDEgaW4gTiBwYWNrZXRzIChub25lIGlmIDApICAgICAqLworICAgIGludCBkZWxheTsgICAgICAgICAgICAgICAgICAvKiBkZWxheSAxIHBhY2tldCBpbiBOIChub25lIGlmIDApICAgICAgICAgICovCisgICAgaW50IGRlbGF5X2NjczsgICAgICAgICAgICAgIC8qIGRlbGF5IENoYW5nZUNpcGhlclNwZWMgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgZHJvcDsgICAgICAgICAgICAgICAgICAgLyogZHJvcCAxIHBhY2tldCBpbiBOIChub25lIGlmIDApICAgICAgICAgICAqLworICAgIGludCBtdHU7ICAgICAgICAgICAgICAgICAgICAvKiBkcm9wIHBhY2tldHMgbGFyZ2VyIHRoYW4gdGhpcyAgICAgICAgICAgICovCisgICAgaW50IGJhZF9hZDsgICAgICAgICAgICAgICAgIC8qIGluamVjdCBjb3JydXB0ZWQgQXBwbGljYXRpb25EYXRhIHJlY29yZCAgKi8KKyAgICBpbnQgcHJvdGVjdF9odnI7ICAgICAgICAgICAgLyogbmV2ZXIgZHJvcCBvciBkZWxheSBIZWxsb1ZlcmlmeVJlcXVlc3QgICAqLworICAgIGludCBwcm90ZWN0X2xlbjsgICAgICAgICAgICAvKiBuZXZlciBkcm9wL2RlbGF5IHBhY2tldCBvZiB0aGUgZ2l2ZW4gc2l6ZSovCisKKyAgICB1bnNpZ25lZCBpbnQgc2VlZDsgICAgICAgICAgLyogc2VlZCBmb3IgInJhbmRvbSIgZXZlbnRzICAgICAgICAgICAgICAgICAqLworfSBvcHQ7CisKK3N0YXRpYyB2b2lkIGV4aXRfdXNhZ2UoIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlICkKK3sKKyAgICBpZiggdmFsdWUgPT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIHVua25vd24gb3B0aW9uIG9yIG1pc3NpbmcgdmFsdWU6ICVzXG4iLCBuYW1lICk7CisgICAgZWxzZQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBvcHRpb24gJXM6IGlsbGVnYWwgdmFsdWU6ICVzXG4iLCBuYW1lLCB2YWx1ZSApOworCisgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisgICAgZXhpdCggMSApOworfQorCitzdGF0aWMgdm9pZCBnZXRfb3B0aW9ucyggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IGk7CisgICAgY2hhciAqcCwgKnE7CisKKyAgICBvcHQuc2VydmVyX2FkZHIgICAgPSBERkxfU0VSVkVSX0FERFI7CisgICAgb3B0LnNlcnZlcl9wb3J0ICAgID0gREZMX1NFUlZFUl9QT1JUOworICAgIG9wdC5saXN0ZW5fYWRkciAgICA9IERGTF9MSVNURU5fQUREUjsKKyAgICBvcHQubGlzdGVuX3BvcnQgICAgPSBERkxfTElTVEVOX1BPUlQ7CisgICAgLyogT3RoZXIgbWVtYmVycyBkZWZhdWx0IHRvIDAgKi8KKworICAgIGZvciggaSA9IDE7IGkgPCBhcmdjOyBpKysgKQorICAgIHsKKyAgICAgICAgcCA9IGFyZ3ZbaV07CisgICAgICAgIGlmKCAoIHEgPSBzdHJjaHIoIHAsICc9JyApICkgPT0gTlVMTCApCisgICAgICAgICAgICBleGl0X3VzYWdlKCBwLCBOVUxMICk7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGlmKCBzdHJjbXAoIHAsICJzZXJ2ZXJfYWRkciIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5zZXJ2ZXJfYWRkciA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInNlcnZlcl9wb3J0IiApID09IDAgKQorICAgICAgICAgICAgb3B0LnNlcnZlcl9wb3J0ID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibGlzdGVuX2FkZHIiICkgPT0gMCApCisgICAgICAgICAgICBvcHQubGlzdGVuX2FkZHIgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJsaXN0ZW5fcG9ydCIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5saXN0ZW5fcG9ydCA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImR1cGxpY2F0ZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmR1cGxpY2F0ZSA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuZHVwbGljYXRlIDwgMCB8fCBvcHQuZHVwbGljYXRlID4gMjAgKQorICAgICAgICAgICAgICAgIGV4aXRfdXNhZ2UoIHAsIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJkZWxheSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmRlbGF5ID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5kZWxheSA8IDAgfHwgb3B0LmRlbGF5ID4gMjAgfHwgb3B0LmRlbGF5ID09IDEgKQorICAgICAgICAgICAgICAgIGV4aXRfdXNhZ2UoIHAsIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJkZWxheV9jY3MiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5kZWxheV9jY3MgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LmRlbGF5X2NjcyA8IDAgfHwgb3B0LmRlbGF5X2NjcyA+IDEgKQorICAgICAgICAgICAgICAgIGV4aXRfdXNhZ2UoIHAsIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJkcm9wIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuZHJvcCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuZHJvcCA8IDAgfHwgb3B0LmRyb3AgPiAyMCB8fCBvcHQuZHJvcCA9PSAxICkKKyAgICAgICAgICAgICAgICBleGl0X3VzYWdlKCBwLCBxICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibXR1IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQubXR1ID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5tdHUgPCAwIHx8IG9wdC5tdHUgPiBNQVhfTVNHX1NJWkUgKQorICAgICAgICAgICAgICAgIGV4aXRfdXNhZ2UoIHAsIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJiYWRfYWQiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5iYWRfYWQgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LmJhZF9hZCA8IDAgfHwgb3B0LmJhZF9hZCA+IDEgKQorICAgICAgICAgICAgICAgIGV4aXRfdXNhZ2UoIHAsIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJwcm90ZWN0X2h2ciIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnByb3RlY3RfaHZyID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5wcm90ZWN0X2h2ciA8IDAgfHwgb3B0LnByb3RlY3RfaHZyID4gMSApCisgICAgICAgICAgICAgICAgZXhpdF91c2FnZSggcCwgcSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInByb3RlY3RfbGVuIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQucHJvdGVjdF9sZW4gPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnByb3RlY3RfbGVuIDwgMCApCisgICAgICAgICAgICAgICAgZXhpdF91c2FnZSggcCwgcSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInNlZWQiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5zZWVkID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5zZWVkID09IDAgKQorICAgICAgICAgICAgICAgIGV4aXRfdXNhZ2UoIHAsIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0X3VzYWdlKCBwLCBOVUxMICk7CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqbXNnX3R5cGUoIHVuc2lnbmVkIGNoYXIgKm1zZywgc2l6ZV90IGxlbiApCit7CisgICAgaWYoIGxlbiA8IDEgKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiggIkludmFsaWQiICk7CisgICAgc3dpdGNoKCBtc2dbMF0gKQorICAgIHsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9NU0dfQ0hBTkdFX0NJUEhFUl9TUEVDOiAgICByZXR1cm4oICJDaGFuZ2VDaXBoZXJTcGVjIiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX01TR19BTEVSVDogICAgICAgICAgICAgICAgIHJldHVybiggIkFsZXJ0IiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX01TR19BUFBMSUNBVElPTl9EQVRBOiAgICAgIHJldHVybiggIkFwcGxpY2F0aW9uRGF0YSIgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFOiAgICAgICAgICAgICBicmVhazsgLyogU2VlIGJlbG93ICovCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiggIlVua25vd24iICk7CisgICAgfQorCisgICAgaWYoIGxlbiA8IDEzICsgMTIgKSAgICAgICAgICAgICAgICAgICAgIHJldHVybiggIkludmFsaWQgaGFuZHNoYWtlIiApOworCisgICAgLyoKKyAgICAgKiBPdXIgaGFuZHNoYWtlIG1lc3NhZ2UgYXJlIGxlc3MgdGhhbiAyXjE2IGJ5dGVzIGxvbmcsIHNvIHRoZXkgc2hvdWxkCisgICAgICogaGF2ZSAwIGFzIHRoZSBmaXJzdCBieXRlIG9mIGxlbmd0aCwgZnJhZ19vZmZzZXQgYW5kIGZyYWdfbGVuZ3RoLgorICAgICAqIE90aGVyd2lzZSwgYXNzdW1lIHRoZXkgYXJlIGVuY3J5cHRlZC4KKyAgICAgKi8KKyAgICBpZiggbXNnWzE0XSB8fCBtc2dbMTldIHx8IG1zZ1syMl0gKSAgICAgcmV0dXJuKCAiRW5jcnlwdGVkIGhhbmRzaGFrZSIgKTsKKworICAgIHN3aXRjaCggbXNnWzEzXSApCisgICAgeworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hTX0hFTExPX1JFUVVFU1Q6ICAgICAgICAgIHJldHVybiggIkhlbGxvUmVxdWVzdCIgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IU19DTElFTlRfSEVMTE86ICAgICAgICAgICByZXR1cm4oICJDbGllbnRIZWxsbyIgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IU19TRVJWRVJfSEVMTE86ICAgICAgICAgICByZXR1cm4oICJTZXJ2ZXJIZWxsbyIgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IU19IRUxMT19WRVJJRllfUkVRVUVTVDogICByZXR1cm4oICJIZWxsb1ZlcmlmeVJlcXVlc3QiICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSFNfTkVXX1NFU1NJT05fVElDS0VUOiAgICAgcmV0dXJuKCAiTmV3U2Vzc2lvblRpY2tldCIgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURTogICAgICAgICAgICByZXR1cm4oICJDZXJ0aWZpY2F0ZSIgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFOiAgICByZXR1cm4oICJTZXJ2ZXJLZXlFeGNoYW5nZSIgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUOiAgICByZXR1cm4oICJDZXJ0aWZpY2F0ZVJlcXVlc3QiICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSFNfU0VSVkVSX0hFTExPX0RPTkU6ICAgICAgcmV0dXJuKCAiU2VydmVySGVsbG9Eb25lIiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFX1ZFUklGWTogICAgIHJldHVybiggIkNlcnRpZmljYXRlVmVyaWZ5IiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0U6ICAgIHJldHVybiggIkNsaWVudEtleUV4Y2hhbmdlIiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hTX0ZJTklTSEVEOiAgICAgICAgICAgICAgIHJldHVybiggIkZpbmlzaGVkIiApOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oICJVbmtub3duIGhhbmRzaGFrZSIgKTsKKyAgICB9Cit9CisKKy8qIFJldHVybiBlbGFwc2VkIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBmaXJzdCBjYWxsICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBlbGxhcHNlZF90aW1lKCB2b2lkICkKK3sKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICByZXR1cm4oIDAgKTsKKyNlbHNlCisgICAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIHJlZiA9IHsgMCwgMCB9OworICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKworICAgIGlmKCByZWYudHZfc2VjID09IDAgJiYgcmVmLnR2X3VzZWMgPT0gMCApCisgICAgeworICAgICAgICBnZXR0aW1lb2ZkYXkoICZyZWYsIE5VTEwgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgZ2V0dGltZW9mZGF5KCAmbm93LCBOVUxMICk7CisgICAgcmV0dXJuKCAxMDAwICogKCBub3cudHZfc2VjICAtIHJlZi50dl9zZWMgKQorICAgICAgICAgICAgICAgICArICggbm93LnR2X3VzZWMgLSByZWYudHZfdXNlYyApIC8gMTAwMCApOworI2VuZGlmCit9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbWJlZHRsc19uZXRfY29udGV4dCAqZHN0OworICAgIGNvbnN0IGNoYXIgKndheTsKKyAgICBjb25zdCBjaGFyICp0eXBlOworICAgIHVuc2lnbmVkIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQVhfTVNHX1NJWkVdOworfSBwYWNrZXQ7CisKKy8qIFByaW50IHBhY2tldC4gT3V0Z29pbmcgcGFja2V0cyBjb21lIHdpdGggYSByZWFzb24gKGZvcndhcmQsIGR1cGwsIGV0Yy4pICovCit2b2lkIHByaW50X3BhY2tldCggY29uc3QgcGFja2V0ICpwLCBjb25zdCBjaGFyICp3aHkgKQoreworICAgIGlmKCB3aHkgPT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAlMDVsdSAlcyAlcyAoJXUgYnl0ZXMpXG4iLAorICAgICAgICAgICAgICAgIGVsbGFwc2VkX3RpbWUoKSwgcC0+d2F5LCBwLT50eXBlLCBwLT5sZW4gKTsKKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgICAgICAlcyAlcyAoJXUgYnl0ZXMpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBwLT53YXksIHAtPnR5cGUsIHAtPmxlbiwgd2h5ICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKK30KKworaW50IHNlbmRfcGFja2V0KCBjb25zdCBwYWNrZXQgKnAsIGNvbnN0IGNoYXIgKndoeSApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX25ldF9jb250ZXh0ICpkc3QgPSBwLT5kc3Q7CisKKyAgICAvKiBpbnNlcnQgY29ycnVwdGVkIEFwcGxpY2F0aW9uRGF0YSByZWNvcmQ/ICovCisgICAgaWYoIG9wdC5iYWRfYWQgJiYKKyAgICAgICAgc3RyY21wKCBwLT50eXBlLCAiQXBwbGljYXRpb25EYXRhIiApID09IDAgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBidWZbTUFYX01TR19TSVpFXTsKKyAgICAgICAgbWVtY3B5KCBidWYsIHAtPmJ1ZiwgcC0+bGVuICk7CisgICAgICAgICsrYnVmW3AtPmxlbiAtIDFdOworCisgICAgICAgIHByaW50X3BhY2tldCggcCwgImNvcnJ1cHRlZCIgKTsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfc2VuZCggZHN0LCBidWYsIHAtPmxlbiApICkgPD0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhIG1iZWR0bHNfbmV0X3NlbmQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaW50X3BhY2tldCggcCwgd2h5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfc2VuZCggZHN0LCBwLT5idWYsIHAtPmxlbiApICkgPD0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgISBtYmVkdGxzX25ldF9zZW5kIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKiBEb24ndCBkdXBsaWNhdGUgQXBwbGljYXRpb24gRGF0YSwgb25seSBoYW5kc2hha2UgY292ZXJlZCAqLworICAgIGlmKCBvcHQuZHVwbGljYXRlICE9IDAgJiYKKyAgICAgICAgc3RyY21wKCBwLT50eXBlLCAiQXBwbGljYXRpb25EYXRhIiApICE9IDAgJiYKKyAgICAgICAgcmFuZCgpICUgb3B0LmR1cGxpY2F0ZSA9PSAwICkKKyAgICB7CisgICAgICAgIHByaW50X3BhY2tldCggcCwgImR1cGxpY2F0ZWQiICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfc2VuZCggZHN0LCBwLT5idWYsIHAtPmxlbiApICkgPD0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhIG1iZWR0bHNfbmV0X3NlbmQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgcGFja2V0IHByZXY7CisKK3ZvaWQgY2xlYXJfcGVuZGluZyggdm9pZCApCit7CisgICAgbWVtc2V0KCAmcHJldiwgMCwgc2l6ZW9mKCBwYWNrZXQgKSApOworfQorCisvKgorICogQXZvaWQgZHJvcHBpbmcgb3IgZGVsYXlpbmcgYSBwYWNrZXQgdGhhdCB3YXMgYWxyZWFkeSBkcm9wcGVkIHR3aWNlOiB0aGlzCisgKiBvbmx5IHJlc3VsdHMgaW4gdW5pbnRlcmVzdGluZyB0aW1lb3V0cy4gV2UgY2FuJ3QgcmVseSBvbiB0eXBlIHRvIGlkZW50aWZ5CisgKiBwYWNrZXRzLCBzaW5jZSBkdXJpbmcgcmVuZWdvdGlhdGlvbiB0aGV5J3JlIGFsbCBlbmNyeXB0ZWQuICBTbywgcmVseSBvbgorICogc2l6ZSBtb2QgMjA0OCAod2hpY2ggaXMgdXN1YWxseSBqdXN0IHNpemUpLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBkcm9wcGVkWzIwNDhdID0geyAwIH07CisjZGVmaW5lIERST1BfTUFYIDIKKworLyoKKyAqIE9wZW5TU0wgZ3JvdXBzIHBhY2tldHMgaW4gYSBkYXRhZ3JhbSB0aGUgZmlyc3QgdGltZSBpdCBzZW5kcyB0aGVtLCBidXQgbm90CisgKiB3aGVuIGl0IHJlc2VuZHMgdGhlbS4gQ291bnQgZXZlcnkgcmVjb3JkIGFzIHNlZW4gdGhlIGZpcnN0IHRpbWUuCisgKi8KK3ZvaWQgdXBkYXRlX2Ryb3BwZWQoIGNvbnN0IHBhY2tldCAqcCApCit7CisgICAgc2l6ZV90IGlkID0gcC0+bGVuICUgc2l6ZW9mKCBkcm9wcGVkICk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gcC0+YnVmICsgcC0+bGVuOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1ciA9IHAtPmJ1ZjsKKyAgICBzaXplX3QgbGVuID0gKCAoIGN1clsxMV0gPDwgOCApIHwgY3VyWzEyXSApICsgMTM7CisKKyAgICArK2Ryb3BwZWRbaWRdOworCisgICAgLyogQXZvaWQgY291bnRpbmcgc2luZ2xlIHJlY29yZCB0d2ljZSAqLworICAgIGlmKCBsZW4gPT0gcC0+bGVuICkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUoIGN1ciA8IGVuZCApCisgICAgeworICAgICAgICBsZW4gPSAoICggY3VyWzExXSA8PCA4ICkgfCBjdXJbMTJdICkgKyAxMzsKKworICAgICAgICBpZCA9IGxlbiAlIHNpemVvZiggZHJvcHBlZCApOworICAgICAgICArK2Ryb3BwZWRbaWRdOworCisgICAgICAgIGN1ciArPSBsZW47CisgICAgfQorfQorCitpbnQgaGFuZGxlX21lc3NhZ2UoIGNvbnN0IGNoYXIgKndheSwKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19uZXRfY29udGV4dCAqZHN0LAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX25ldF9jb250ZXh0ICpzcmMgKQoreworICAgIGludCByZXQ7CisgICAgcGFja2V0IGN1cjsKKyAgICBzaXplX3QgaWQ7CisKKyAgICAvKiByZWNlaXZlIHBhY2tldCAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X3JlY3YoIHNyYywgY3VyLmJ1Ziwgc2l6ZW9mKCBjdXIuYnVmICkgKSApIDw9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICEgbWJlZHRsc19uZXRfcmVjdiByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgY3VyLmxlbiAgPSByZXQ7CisgICAgY3VyLnR5cGUgPSBtc2dfdHlwZSggY3VyLmJ1ZiwgY3VyLmxlbiApOworICAgIGN1ci53YXkgID0gd2F5OworICAgIGN1ci5kc3QgID0gZHN0OworICAgIHByaW50X3BhY2tldCggJmN1ciwgTlVMTCApOworCisgICAgaWQgPSBjdXIubGVuICUgc2l6ZW9mKCBkcm9wcGVkICk7CisKKyAgICAvKiBkbyB3ZSB3YW50IHRvIGRyb3AsIGRlbGF5LCBvciBmb3J3YXJkIGl0PyAqLworICAgIGlmKCAoIG9wdC5tdHUgIT0gMCAmJgorICAgICAgICAgIGN1ci5sZW4gPiAodW5zaWduZWQpIG9wdC5tdHUgKSB8fAorICAgICAgICAoIG9wdC5kcm9wICE9IDAgJiYKKyAgICAgICAgICBzdHJjbXAoIGN1ci50eXBlLCAiQXBwbGljYXRpb25EYXRhIiApICE9IDAgJiYKKyAgICAgICAgICAhICggb3B0LnByb3RlY3RfaHZyICYmCisgICAgICAgICAgICAgIHN0cmNtcCggY3VyLnR5cGUsICJIZWxsb1ZlcmlmeVJlcXVlc3QiICkgPT0gMCApICYmCisgICAgICAgICAgY3VyLmxlbiAhPSAoc2l6ZV90KSBvcHQucHJvdGVjdF9sZW4gJiYKKyAgICAgICAgICBkcm9wcGVkW2lkXSA8IERST1BfTUFYICYmCisgICAgICAgICAgcmFuZCgpICUgb3B0LmRyb3AgPT0gMCApICkKKyAgICB7CisgICAgICAgIHVwZGF0ZV9kcm9wcGVkKCAmY3VyICk7CisgICAgfQorICAgIGVsc2UgaWYoICggb3B0LmRlbGF5X2NjcyA9PSAxICYmCisgICAgICAgICAgICAgICBzdHJjbXAoIGN1ci50eXBlLCAiQ2hhbmdlQ2lwaGVyU3BlYyIgKSA9PSAwICkgfHwKKyAgICAgICAgICAgICAoIG9wdC5kZWxheSAhPSAwICYmCisgICAgICAgICAgICAgICBzdHJjbXAoIGN1ci50eXBlLCAiQXBwbGljYXRpb25EYXRhIiApICE9IDAgJiYKKyAgICAgICAgICAgICAgICEgKCBvcHQucHJvdGVjdF9odnIgJiYKKyAgICAgICAgICAgICAgICAgICBzdHJjbXAoIGN1ci50eXBlLCAiSGVsbG9WZXJpZnlSZXF1ZXN0IiApID09IDAgKSAmJgorICAgICAgICAgICAgICAgcHJldi5kc3QgPT0gTlVMTCAmJgorICAgICAgICAgICAgICAgY3VyLmxlbiAhPSAoc2l6ZV90KSBvcHQucHJvdGVjdF9sZW4gJiYKKyAgICAgICAgICAgICAgIGRyb3BwZWRbaWRdIDwgRFJPUF9NQVggJiYKKyAgICAgICAgICAgICAgIHJhbmQoKSAlIG9wdC5kZWxheSA9PSAwICkgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCAmcHJldiwgJmN1ciwgc2l6ZW9mKCBwYWNrZXQgKSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBmb3J3YXJkIGFuZCBwb3NzaWJseSBkdXBsaWNhdGUgKi8KKyAgICAgICAgaWYoICggcmV0ID0gc2VuZF9wYWNrZXQoICZjdXIsICJmb3J3YXJkZWQiICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgLyogc2VuZCBwcmV2aW91c2x5IGRlbGF5ZWQgbWVzc2FnZSBpZiBhbnkgKi8KKyAgICAgICAgaWYoIHByZXYuZHN0ICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBzZW5kX3BhY2tldCggJnByZXYsICJkZWxheWVkIiApOworICAgICAgICAgICAgbWVtc2V0KCAmcHJldiwgMCwgc2l6ZW9mKCBwYWNrZXQgKSApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgbWJlZHRsc19uZXRfY29udGV4dCBsaXN0ZW5fZmQsIGNsaWVudF9mZCwgc2VydmVyX2ZkOworCisgICAgaW50IG5iX2ZkczsKKyAgICBmZF9zZXQgcmVhZF9mZHM7CisKKyAgICBtYmVkdGxzX25ldF9pbml0KCAmbGlzdGVuX2ZkICk7CisgICAgbWJlZHRsc19uZXRfaW5pdCggJmNsaWVudF9mZCApOworICAgIG1iZWR0bHNfbmV0X2luaXQoICZzZXJ2ZXJfZmQgKTsKKworICAgIGdldF9vcHRpb25zKCBhcmdjLCBhcmd2ICk7CisKKyAgICAvKgorICAgICAqIERlY2lzaW9ucyB0byBkcm9wL2RlbGF5L2R1cGxpY2F0ZSBwYWNrZXRzIGFyZSBwc2V1ZG8tcmFuZG9tOiBkcm9wcGluZworICAgICAqIGV4YWN0bHkgMSBpbiBOIHBhY2tldHMgd291bGQgbGVhZCB0byBwcm9ibGVtcyB3aGVuIGEgZmxpZ2h0IGhhcyBleGFjdGx5CisgICAgICogTiBwYWNrZXRzOiB0aGUgc2FtZSBwYWNrZXQgd291bGQgYmUgZHJvcHBlZCBvbiBldmVyeSByZXNlbmQuCisgICAgICoKKyAgICAgKiBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlcHJvZHVjZSBwcm9ibGVtcyByZWxpYWJseSwgdGhlIHNlZWQgbWF5IGJlCisgICAgICogc3BlY2lmaWVkIGV4cGxpY2l0bHkuCisgICAgICovCisgICAgaWYoIG9wdC5zZWVkID09IDAgKQorICAgIHsKKyAgICAgICAgb3B0LnNlZWQgPSAodW5zaWduZWQgaW50KSB0aW1lKCBOVUxMICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFBzZXVkby1yYW5kb20gc2VlZDogJXVcbiIsIG9wdC5zZWVkICk7CisgICAgfQorCisgICAgc3JhbmQoIG9wdC5zZWVkICk7CisKKyAgICAvKgorICAgICAqIDAuICJDb25uZWN0IiB0byB0aGUgc2VydmVyCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ29ubmVjdCB0byBzZXJ2ZXIgb24gVURQLyVzLyVzIC4uLiIsCisgICAgICAgICAgICBvcHQuc2VydmVyX2FkZHIsIG9wdC5zZXJ2ZXJfcG9ydCApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9jb25uZWN0KCAmc2VydmVyX2ZkLCBvcHQuc2VydmVyX2FkZHIsIG9wdC5zZXJ2ZXJfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ORVRfUFJPVE9fVURQICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2Nvbm5lY3QgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAxLiBTZXR1cCB0aGUgImxpc3RlbmluZyIgVURQIHNvY2tldAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEJpbmQgb24gVURQLyVzLyVzIC4uLiIsCisgICAgICAgICAgICBvcHQubGlzdGVuX2FkZHIsIG9wdC5saXN0ZW5fcG9ydCApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9iaW5kKCAmbGlzdGVuX2ZkLCBvcHQubGlzdGVuX2FkZHIsIG9wdC5saXN0ZW5fcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ORVRfUFJPVE9fVURQICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2JpbmQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAyLiBXYWl0IHVudGlsIGEgY2xpZW50IGNvbm5lY3RzCisgICAgICovCithY2NlcHQ6CisgICAgbWJlZHRsc19uZXRfZnJlZSggJmNsaWVudF9mZCApOworCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gV2FpdGluZyBmb3IgYSByZW1vdGUgY29ubmVjdGlvbiAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2FjY2VwdCggJmxpc3Rlbl9mZCwgJmNsaWVudF9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfYWNjZXB0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMy4gRm9yd2FyZCBwYWNrZXRzIGZvcmV2ZXIgKGtpbGwgdGhlIHByb2Nlc3MgdG8gdGVybWluYXRlIGl0KQorICAgICAqLworICAgIGNsZWFyX3BlbmRpbmcoKTsKKyAgICBtZW1zZXQoIGRyb3BwZWQsIDAsIHNpemVvZiggZHJvcHBlZCApICk7CisKKyAgICBuYl9mZHMgPSBjbGllbnRfZmQuZmQ7CisgICAgaWYoIG5iX2ZkcyA8IHNlcnZlcl9mZC5mZCApCisgICAgICAgIG5iX2ZkcyA9IHNlcnZlcl9mZC5mZDsKKyAgICBpZiggbmJfZmRzIDwgbGlzdGVuX2ZkLmZkICkKKyAgICAgICAgbmJfZmRzID0gbGlzdGVuX2ZkLmZkOworICAgICsrbmJfZmRzOworCisgICAgd2hpbGUoIDEgKQorICAgIHsKKyAgICAgICAgRkRfWkVSTyggJnJlYWRfZmRzICk7CisgICAgICAgIEZEX1NFVCggc2VydmVyX2ZkLmZkLCAmcmVhZF9mZHMgKTsKKyAgICAgICAgRkRfU0VUKCBjbGllbnRfZmQuZmQsICZyZWFkX2ZkcyApOworICAgICAgICBGRF9TRVQoIGxpc3Rlbl9mZC5mZCwgJnJlYWRfZmRzICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gc2VsZWN0KCBuYl9mZHMsICZyZWFkX2ZkcywgTlVMTCwgTlVMTCwgTlVMTCApICkgPD0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcnJvciggInNlbGVjdCIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBGRF9JU1NFVCggbGlzdGVuX2ZkLmZkLCAmcmVhZF9mZHMgKSApCisgICAgICAgICAgICBnb3RvIGFjY2VwdDsKKworICAgICAgICBpZiggRkRfSVNTRVQoIGNsaWVudF9mZC5mZCwgJnJlYWRfZmRzICkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCByZXQgPSBoYW5kbGVfbWVzc2FnZSggIlMgPC0gQyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlcnZlcl9mZCwgJmNsaWVudF9mZCApICkgIT0gMCApCisgICAgICAgICAgICAgICAgZ290byBhY2NlcHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggRkRfSVNTRVQoIHNlcnZlcl9mZC5mZCwgJnJlYWRfZmRzICkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCByZXQgPSBoYW5kbGVfbWVzc2FnZSggIlMgLT4gQyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsaWVudF9mZCwgJnNlcnZlcl9mZCApICkgIT0gMCApCisgICAgICAgICAgICAgICAgZ290byBhY2NlcHQ7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisKKyNpZmRlZiBNQkVEVExTX0VSUk9SX0MKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciBlcnJvcl9idWZbMTAwXTsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBlcnJvcl9idWYsIDEwMCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkxhc3QgZXJyb3Igd2FzOiAtMHglMDRYIC0gJXNcblxuIiwgLSByZXQsIGVycm9yX2J1ZiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19uZXRfZnJlZSggJmNsaWVudF9mZCApOworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZzZXJ2ZXJfZmQgKTsKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmbGlzdGVuX2ZkICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCAhPSAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX05FVF9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdXRpbC9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy91dGlsL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YjY2MDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdXRpbC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEzIEBACitzZXQobGlicworICAgIG1iZWR0bHMKKykKKworYWRkX2V4ZWN1dGFibGUoc3RyZXJyb3Igc3RyZXJyb3IuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhzdHJlcnJvciAke2xpYnN9KQorCithZGRfZXhlY3V0YWJsZShwZW0yZGVyIHBlbTJkZXIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhwZW0yZGVyICR7bGlic30pCisKK2luc3RhbGwoVEFSR0VUUyBzdHJlcnJvciBwZW0yZGVyCisgICAgICAgIERFU1RJTkFUSU9OICJiaW4iCisgICAgICAgIFBFUk1JU1NJT05TIE9XTkVSX1JFQUQgT1dORVJfV1JJVEUgT1dORVJfRVhFQ1VURSBHUk9VUF9SRUFEIEdST1VQX0VYRUNVVEUgV09STERfUkVBRCBXT1JMRF9FWEVDVVRFKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3V0aWwvcGVtMmRlci5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3V0aWwvcGVtMmRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMmM2YWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdXRpbC9wZW0yZGVyLmMKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiAgQ29udmVydCBQRU0gdG8gREVSCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CQVNFNjRfQykgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Jhc2U2NC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjZGVmaW5lIERGTF9GSUxFTkFNRSAgICAgICAgICAgICJmaWxlLnBlbSIKKyNkZWZpbmUgREZMX09VVFBVVF9GSUxFTkFNRSAgICAgImZpbGUuZGVyIgorCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiXG4gdXNhZ2U6IHBlbTJkZXIgcGFyYW09PD4uLi5cbiIgICAgICAgICAgICAgICAgICAgXAorICAgICJcbiBhY2NlcHRhYmxlIHBhcmFtZXRlcnM6XG4iICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBmaWxlbmFtZT0lJXMgICAgICAgICBkZWZhdWx0OiBmaWxlLnBlbVxuIiAgICAgIFwKKyAgICAiICAgIG91dHB1dF9maWxlPSUlcyAgICAgIGRlZmF1bHQ6IGZpbGUuZGVyXG4iICAgICAgXAorICAgICJcbiIKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQkFTRTY0X0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQkFTRTY0X0MgYW5kL29yIE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisvKgorICogZ2xvYmFsIG9wdGlvbnMKKyAqLworc3RydWN0IG9wdGlvbnMKK3sKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsgICAgICAgLyogZmlsZW5hbWUgb2YgdGhlIGlucHV0IGZpbGUgICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpvdXRwdXRfZmlsZTsgICAgLyogd2hlcmUgdG8gc3RvcmUgdGhlIG91dHB1dCAgICAgICAgICAgICAgKi8KK30gb3B0OworCitpbnQgY29udmVydF9wZW1fdG9fZGVyKCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzMSwgKnMyLCAqZW5kID0gaW5wdXQgKyBpbGVuOworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgczEgPSAodW5zaWduZWQgY2hhciAqKSBzdHJzdHIoIChjb25zdCBjaGFyICopIGlucHV0LCAiLS0tLS1CRUdJTiIgKTsKKyAgICBpZiggczEgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIHMyID0gKHVuc2lnbmVkIGNoYXIgKikgc3Ryc3RyKCAoY29uc3QgY2hhciAqKSBpbnB1dCwgIi0tLS0tRU5EIiApOworICAgIGlmKCBzMiA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgczEgKz0gMTA7CisgICAgd2hpbGUoIHMxIDwgZW5kICYmICpzMSAhPSAnLScgKQorICAgICAgICBzMSsrOworICAgIHdoaWxlKCBzMSA8IGVuZCAmJiAqczEgPT0gJy0nICkKKyAgICAgICAgczErKzsKKyAgICBpZiggKnMxID09ICdccicgKSBzMSsrOworICAgIGlmKCAqczEgPT0gJ1xuJyApIHMxKys7CisKKyAgICBpZiggczIgPD0gczEgfHwgczIgPiBlbmQgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICByZXQgPSBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUoIE5VTEwsIDAsICZsZW4sIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHMxLCBzMiAtIHMxICk7CisgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoIGxlbiA+ICpvbGVuICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19iYXNlNjRfZGVjb2RlKCBvdXRwdXQsIGxlbiwgJmxlbiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgczEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczIgLSBzMSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgICpvbGVuID0gbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBMb2FkIGFsbCBkYXRhIGZyb20gYSBmaWxlIGludG8gYSBnaXZlbiBidWZmZXIuCisgKi8KK3N0YXRpYyBpbnQgbG9hZF9maWxlKCBjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICoqYnVmLCBzaXplX3QgKm4gKQoreworICAgIEZJTEUgKmY7CisgICAgbG9uZyBzaXplOworCisgICAgaWYoICggZiA9IGZvcGVuKCBwYXRoLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgZnNlZWsoIGYsIDAsIFNFRUtfRU5EICk7CisgICAgaWYoICggc2l6ZSA9IGZ0ZWxsKCBmICkgKSA9PSAtMSApCisgICAgeworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgcmV0dXJuKCAtMSApOworICAgIH0KKyAgICBmc2VlayggZiwgMCwgU0VFS19TRVQgKTsKKworICAgICpuID0gKHNpemVfdCkgc2l6ZTsKKworICAgIGlmKCAqbiArIDEgPT0gMCB8fAorICAgICAgICAoICpidWYgPSBtYmVkdGxzX2NhbGxvYyggMSwgKm4gKyAxICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorCisgICAgaWYoIGZyZWFkKCAqYnVmLCAxLCAqbiwgZiApICE9ICpuICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICBmcmVlKCAqYnVmICk7CisgICAgICAgICpidWYgPSBOVUxMOworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorCisgICAgZmNsb3NlKCBmICk7CisKKyAgICAoKmJ1ZilbKm5dID0gJ1wwJzsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogV3JpdGUgYnVmZmVyIHRvIGEgZmlsZQorICovCitzdGF0aWMgaW50IHdyaXRlX2ZpbGUoIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IG4gKQoreworICAgIEZJTEUgKmY7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIHBhdGgsICJ3YiIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggZndyaXRlKCBidWYsIDEsIG4sIGYgKSAhPSBuICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorCisgICAgZmNsb3NlKCBmICk7CisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpwZW1fYnVmZmVyID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyIGRlcl9idWZmZXJbNDA5Nl07CisgICAgY2hhciBidWZbMTAyNF07CisgICAgc2l6ZV90IHBlbV9zaXplLCBkZXJfc2l6ZSA9IHNpemVvZihkZXJfYnVmZmVyKTsKKyAgICBpbnQgaTsKKyAgICBjaGFyICpwLCAqcTsKKworICAgIC8qCisgICAgICogU2V0IHRvIHNhbmUgdmFsdWVzCisgICAgICovCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZihidWYpICk7CisgICAgbWVtc2V0KCBkZXJfYnVmZmVyLCAwLCBzaXplb2YoZGVyX2J1ZmZlcikgKTsKKworICAgIGlmKCBhcmdjID09IDAgKQorICAgIHsKKyAgICB1c2FnZToKKyAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBvcHQuZmlsZW5hbWUgICAgICAgICAgICA9IERGTF9GSUxFTkFNRTsKKyAgICBvcHQub3V0cHV0X2ZpbGUgICAgICAgICA9IERGTF9PVVRQVVRfRklMRU5BTUU7CisKKyAgICBmb3IoIGkgPSAxOyBpIDwgYXJnYzsgaSsrICkKKyAgICB7CisKKyAgICAgICAgcCA9IGFyZ3ZbaV07CisgICAgICAgIGlmKCAoIHEgPSBzdHJjaHIoIHAsICc9JyApICkgPT0gTlVMTCApCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAqcSsrID0gJ1wwJzsKKworICAgICAgICBpZiggc3RyY21wKCBwLCAiZmlsZW5hbWUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuZmlsZW5hbWUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJvdXRwdXRfZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5vdXRwdXRfZmlsZSA9IHE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAxLjEuIExvYWQgdGhlIFBFTSBmaWxlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBMb2FkaW5nIHRoZSBQRU0gZmlsZSAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IGxvYWRfZmlsZSggb3B0LmZpbGVuYW1lLCAmcGVtX2J1ZmZlciwgJnBlbV9zaXplICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyNpZmRlZiBNQkVEVExTX0VSUk9SX0MKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyNlbmRpZgorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbG9hZF9maWxlIHJldHVybmVkICVkIC0gJXNcblxuIiwgcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDEuMi4gQ29udmVydCBmcm9tIFBFTSB0byBERVIKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDb252ZXJ0aW5nIGZyb20gUEVNIHRvIERFUiAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IGNvbnZlcnRfcGVtX3RvX2RlciggcGVtX2J1ZmZlciwgcGVtX3NpemUsIGRlcl9idWZmZXIsICZkZXJfc2l6ZSApICkgIT0gMCApCisgICAgeworI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworI2VuZGlmCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBjb252ZXJ0X3BlbV90b19kZXIgJWQgLSAlc1xuXG4iLCByZXQsIGJ1ZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMS4zLiBXcml0ZSB0aGUgREVSIGZpbGUKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBXcml0aW5nIHRoZSBERVIgZmlsZSAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IHdyaXRlX2ZpbGUoIG9wdC5vdXRwdXRfZmlsZSwgZGVyX2J1ZmZlciwgZGVyX3NpemUgKTsKKworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworI2VuZGlmCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICB3cml0ZV9maWxlIHJldHVybmVkICVkIC0gJXNcblxuIiwgcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKK2V4aXQ6CisgICAgZnJlZSggcGVtX2J1ZmZlciApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQkFTRTY0X0MgJiYgTUJFRFRMU19GU19JTyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3V0aWwvc3RyZXJyb3IuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy91dGlsL3N0cmVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4MjgwYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy91dGlsL3N0cmVycm9yLmMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqICBUcmFuc2xhdGUgZXJyb3IgY29kZSB0byBlcnJvciBzdHJpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykgfHwgZGVmaW5lZChNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZKQorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2RlZmluZSBVU0FHRSBcCisgICAgIlxuIHVzYWdlOiBzdHJlcnJvciA8ZXJyb3Jjb2RlPlxuIiBcCisgICAgIlxuIHdoZXJlIDxlcnJvcmNvZGU+IGNhbiBiZSBhIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgKHN0YXJ0cyB3aXRoIDB4IG9yIC0weClcbiIKKworI2lmICFkZWZpbmVkKE1CRURUTFNfRVJST1JfQykgJiYgIWRlZmluZWQoTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWSkKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19FUlJPUl9DIGFuZC9vciBNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGxvbmcgaW50IHZhbDsKKyAgICBjaGFyICplbmQgPSBhcmd2WzFdOworCisgICAgaWYoIGFyZ2MgIT0gMiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgdmFsID0gc3RydG9sKCBhcmd2WzFdLCAmZW5kLCAxMCApOworICAgIGlmKCAqZW5kICE9ICdcMCcgKQorICAgIHsKKyAgICAgICAgdmFsID0gc3RydG9sKCBhcmd2WzFdLCAmZW5kLCAxNiApOworICAgICAgICBpZiggKmVuZCAhPSAnXDAnICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiggdmFsID4gMCApCisgICAgICAgIHZhbCA9IC12YWw7CisKKyAgICBpZiggdmFsICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciBlcnJvcl9idWZbMjAwXTsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggdmFsLCBlcnJvcl9idWYsIDIwMCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiTGFzdCBlcnJvciB3YXM6IC0weCUwNHggLSAlc1xuXG4iLCAoaW50KSAtdmFsLCBlcnJvcl9idWYgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggdmFsICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FUlJPUl9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvd2luY2VfbWFpbi5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3dpbmNlX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDNhMmJhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3dpbmNlX21haW4uYwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogIFdpbmRvd3MgQ0UgY29uc29sZSBhcHBsaWNhdGlvbiBlbnRyeSBwb2ludAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgZGVmaW5lZChfV0lOMzJfV0NFKQorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCitleHRlcm4gaW50IG1haW4oIGludCwgY29uc3QgY2hhciAqKiApOworCitpbnQgX3RtYWluKCBpbnQgYXJnYywgX1RDSEFSKiB0YXJndltdICkKK3sKKyAgICBjaGFyICoqYXJndjsKKyAgICBpbnQgaTsKKworICAgIGFyZ3YgPSAoIGNoYXIgKiogKSBjYWxsb2MoIGFyZ2MsIHNpemVvZiggY2hhciAqICkgKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgYXJnYzsgaSsrICkgeworICAgICAgICBzaXplX3QgbGVuOworICAgICAgICBsZW4gPSBfdGNzbGVuKCB0YXJndltpXSApICsgMTsKKyAgICAgICAgYXJndltpXSA9ICggY2hhciAqICkgY2FsbG9jKCBsZW4sIHNpemVvZiggY2hhciApICk7CisgICAgICAgIHdjc3RvbWJzKCBhcmd2W2ldLCB0YXJndltpXSwgbGVuICk7CisgICAgfQorCisgICAgcmV0dXJuIG1haW4oIGFyZ2MsIGFyZ3YgKTsKK30KKworI2VuZGlmICAvKiBkZWZpbmVkKF9XSU4zMl9XQ0UpICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMveDUwOS9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YjhiNWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMveDUwOS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMwIEBACitzZXQobGlicworICAgIG1iZWR0bHMKKykKKworaWYoVVNFX1BLQ1MxMV9IRUxQRVJfTElCUkFSWSkKKyAgICBzZXQobGlicyAke2xpYnN9IHBrY3MxMS1oZWxwZXIpCitlbmRpZihVU0VfUEtDUzExX0hFTFBFUl9MSUJSQVJZKQorCitpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorICAgIHNldChsaWJzICR7bGlic30gJHtaTElCX0xJQlJBUklFU30pCitlbmRpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorCithZGRfZXhlY3V0YWJsZShjZXJ0X2FwcCBjZXJ0X2FwcC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNlcnRfYXBwICR7bGlic30pCisKK2FkZF9leGVjdXRhYmxlKGNybF9hcHAgY3JsX2FwcC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNybF9hcHAgJHtsaWJzfSkKKworYWRkX2V4ZWN1dGFibGUocmVxX2FwcCByZXFfYXBwLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMocmVxX2FwcCAke2xpYnN9KQorCithZGRfZXhlY3V0YWJsZShjZXJ0X3JlcSBjZXJ0X3JlcS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNlcnRfcmVxICR7bGlic30pCisKK2FkZF9leGVjdXRhYmxlKGNlcnRfd3JpdGUgY2VydF93cml0ZS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNlcnRfd3JpdGUgJHtsaWJzfSkKKworaW5zdGFsbChUQVJHRVRTIGNlcnRfYXBwIGNybF9hcHAgcmVxX2FwcCBjZXJ0X3JlcSBjZXJ0X3dyaXRlCisgICAgICAgIERFU1RJTkFUSU9OICJiaW4iCisgICAgICAgIFBFUk1JU1NJT05TIE9XTkVSX1JFQUQgT1dORVJfV1JJVEUgT1dORVJfRVhFQ1VURSBHUk9VUF9SRUFEIEdST1VQX0VYRUNVVEUgV09STERfUkVBRCBXT1JMRF9FWEVDVVRFKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvY2VydF9hcHAuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L2NlcnRfYXBwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5M2NhOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L2NlcnRfYXBwLmMKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiAgQ2VydGlmaWNhdGUgcmVhZGluZyBhcHBsaWNhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX3RpbWUgICAgICAgdGltZQorI2RlZmluZSBtYmVkdGxzX3RpbWVfdCAgICAgdGltZV90CisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgTUJFRFRMU19FTlRST1BZX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfU1NMX1RMU19DIGFuZC9vciBNQkVEVExTX1NTTF9DTElfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19ORVRfQyBhbmQvb3IgTUJFRFRMU19SU0FfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0NUUl9EUkJHX0Mgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsLmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisjaW5jbHVkZSAibWJlZHRscy9kZWJ1Zy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBNT0RFX05PTkUgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1PREVfRklMRSAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTU9ERV9TU0wgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIERGTF9NT0RFICAgICAgICAgICAgICAgIE1PREVfTk9ORQorI2RlZmluZSBERkxfRklMRU5BTUUgICAgICAgICAgICAiY2VydC5jcnQiCisjZGVmaW5lIERGTF9DQV9GSUxFICAgICAgICAgICAgICIiCisjZGVmaW5lIERGTF9DUkxfRklMRSAgICAgICAgICAgICIiCisjZGVmaW5lIERGTF9DQV9QQVRIICAgICAgICAgICAgICIiCisjZGVmaW5lIERGTF9TRVJWRVJfTkFNRSAgICAgICAgICJsb2NhbGhvc3QiCisjZGVmaW5lIERGTF9TRVJWRVJfUE9SVCAgICAgICAgICI0NDMzIgorI2RlZmluZSBERkxfREVCVUdfTEVWRUwgICAgICAgICAwCisjZGVmaW5lIERGTF9QRVJNSVNTSVZFICAgICAgICAgIDAKKworI2RlZmluZSBVU0FHRV9JTyBcCisgICAgIiAgICBjYV9maWxlPSUlcyAgICAgICAgICBUaGUgc2luZ2xlIGZpbGUgY29udGFpbmluZyB0aGUgdG9wLWxldmVsIENBKHMpIHlvdSBmdWxseSB0cnVzdFxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKG5vbmUpXG4iIFwKKyAgICAiICAgIGNybF9maWxlPSUlcyAgICAgICAgIFRoZSBzaW5nbGUgQ1JMIGZpbGUgeW91IHdhbnQgdG8gdXNlXG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJcIiAobm9uZSlcbiIgXAorICAgICIgICAgY2FfcGF0aD0lJXMgICAgICAgICAgVGhlIHBhdGggY29udGFpbmluZyB0aGUgdG9wLWxldmVsIENBKHMpIHlvdSBmdWxseSB0cnVzdFxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKG5vbmUpIChvdmVycmlkZXMgY2FfZmlsZSlcbiIKKworI2RlZmluZSBVU0FHRSBcCisgICAgIlxuIHVzYWdlOiBjZXJ0X2FwcCBwYXJhbT08Pi4uLlxuIiAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4gYWNjZXB0YWJsZSBwYXJhbWV0ZXJzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgbW9kZT1maWxlfHNzbCAgICAgICBkZWZhdWx0OiBub25lXG4iICAgICAgICAgICBcCisgICAgIiAgICBmaWxlbmFtZT0lJXMgICAgICAgICBkZWZhdWx0OiBjZXJ0LmNydFxuIiAgICAgIFwKKyAgICBVU0FHRV9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgc2VydmVyX25hbWU9JSVzICAgICAgZGVmYXVsdDogbG9jYWxob3N0XG4iICAgICBcCisgICAgIiAgICBzZXJ2ZXJfcG9ydD0lJWQgICAgICBkZWZhdWx0OiA0NDMzXG4iICAgICAgICAgIFwKKyAgICAiICAgIGRlYnVnX2xldmVsPSUlZCAgICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgXAorICAgICIgICAgcGVybWlzc2l2ZT0lJWQgICAgICAgZGVmYXVsdDogMCAoZGlzYWJsZWQpXG4iICBcCisgICAgIlxuIgorCisvKgorICogZ2xvYmFsIG9wdGlvbnMKKyAqLworc3RydWN0IG9wdGlvbnMKK3sKKyAgICBpbnQgbW9kZTsgICAgICAgICAgICAgICAgICAgLyogdGhlIG1vZGUgdG8gcnVuIHRoZSBhcHBsaWNhdGlvbiBpbiAgICovCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7ICAgICAgIC8qIGZpbGVuYW1lIG9mIHRoZSBjZXJ0aWZpY2F0ZSBmaWxlICAgICAqLworICAgIGNvbnN0IGNoYXIgKmNhX2ZpbGU7ICAgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSBDQSBjZXJ0aWZpY2F0ZShzKSAgKi8KKyAgICBjb25zdCBjaGFyICpjcmxfZmlsZTsgICAgICAgLyogdGhlIGZpbGUgd2l0aCB0aGUgQ1JMIHRvIHVzZSAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqY2FfcGF0aDsgICAgICAgIC8qIHRoZSBwYXRoIHdpdGggdGhlIENBIGNlcnRpZmljYXRlKHMpIHJlc2lkZSAqLworICAgIGNvbnN0IGNoYXIgKnNlcnZlcl9uYW1lOyAgICAvKiBob3N0bmFtZSBvZiB0aGUgc2VydmVyIChjbGllbnQgb25seSkgKi8KKyAgICBjb25zdCBjaGFyICpzZXJ2ZXJfcG9ydDsgICAgLyogcG9ydCBvbiB3aGljaCB0aGUgc3NsIHNlcnZpY2UgcnVucyAgICovCisgICAgaW50IGRlYnVnX2xldmVsOyAgICAgICAgICAgIC8qIGxldmVsIG9mIGRlYnVnZ2luZyAgICAgICAgICAgICAgICAgICAqLworICAgIGludCBwZXJtaXNzaXZlOyAgICAgICAgICAgICAvKiBwZXJtaXNzaXZlIHBhcnNpbmcgICAgICAgICAgICAgICAgICAgKi8KK30gb3B0OworCitzdGF0aWMgdm9pZCBteV9kZWJ1Zyggdm9pZCAqY3R4LCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyICkKK3sKKyAgICAoKHZvaWQpIGxldmVsKTsKKworICAgIG1iZWR0bHNfZnByaW50ZiggKEZJTEUgKikgY3R4LCAiJXM6JTA0ZDogJXMiLCBmaWxlLCBsaW5lLCBzdHIgKTsKKyAgICBmZmx1c2goICAoRklMRSAqKSBjdHggICk7Cit9CisKK3N0YXRpYyBpbnQgbXlfdmVyaWZ5KCB2b2lkICpkYXRhLCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQsIGludCBkZXB0aCwgdWludDMyX3QgKmZsYWdzICkKK3sKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICAoKHZvaWQpIGRhdGEpOworCisgICAgbWJlZHRsc19wcmludGYoICJcblZlcmlmeSByZXF1ZXN0ZWQgZm9yIChEZXB0aCAlZCk6XG4iLCBkZXB0aCApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5mbyggYnVmLCBzaXplb2YoIGJ1ZiApIC0gMSwgIiIsIGNydCApOworICAgIG1iZWR0bHNfcHJpbnRmKCAiJXMiLCBidWYgKTsKKworICAgIGlmICggKCAqZmxhZ3MgKSA9PSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFRoaXMgY2VydGlmaWNhdGUgaGFzIG5vIGZsYWdzXG4iICk7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfaW5mbyggYnVmLCBzaXplb2YoIGJ1ZiApLCAiICAhICIsICpmbGFncyApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCBidWYgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQgPSAwOworICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgc2VydmVyX2ZkOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgc3NsOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZyBjb25mOworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2FjZXJ0OworICAgIG1iZWR0bHNfeDUwOV9jcmwgY2Fjcmw7CisgICAgaW50IGksIGo7CisgICAgdWludDMyX3QgZmxhZ3M7CisgICAgaW50IHZlcmlmeSA9IDA7CisgICAgY2hhciAqcCwgKnE7CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJjZXJ0X2FwcCI7CisKKyAgICAvKgorICAgICAqIFNldCB0byBzYW5lIHZhbHVlcworICAgICAqLworICAgIG1iZWR0bHNfbmV0X2luaXQoICZzZXJ2ZXJfZmQgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjYWNlcnQgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQykKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2luaXQoICZjYWNybCApOworI2Vsc2UKKyAgICAvKiBaZXJvaXplIHN0cnVjdHVyZSBhcyBDUkwgcGFyc2luZyBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3ZSBoYXZlIHRvIHBhc3MKKyAgICAgICBpdCB0byB0aGUgdmVyaWZ5IGZ1bmN0aW9uICovCisgICAgbWVtc2V0KCAmY2FjcmwsIDAsIHNpemVvZihtYmVkdGxzX3g1MDlfY3JsKSApOworI2VuZGlmCisKKyAgICBpZiggYXJnYyA9PSAwICkKKyAgICB7CisgICAgdXNhZ2U6CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCBVU0FHRSApOworICAgICAgICByZXQgPSAyOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgb3B0Lm1vZGUgICAgICAgICAgICAgICAgPSBERkxfTU9ERTsKKyAgICBvcHQuZmlsZW5hbWUgICAgICAgICAgICA9IERGTF9GSUxFTkFNRTsKKyAgICBvcHQuY2FfZmlsZSAgICAgICAgICAgICA9IERGTF9DQV9GSUxFOworICAgIG9wdC5jcmxfZmlsZSAgICAgICAgICAgID0gREZMX0NSTF9GSUxFOworICAgIG9wdC5jYV9wYXRoICAgICAgICAgICAgID0gREZMX0NBX1BBVEg7CisgICAgb3B0LnNlcnZlcl9uYW1lICAgICAgICAgPSBERkxfU0VSVkVSX05BTUU7CisgICAgb3B0LnNlcnZlcl9wb3J0ICAgICAgICAgPSBERkxfU0VSVkVSX1BPUlQ7CisgICAgb3B0LmRlYnVnX2xldmVsICAgICAgICAgPSBERkxfREVCVUdfTEVWRUw7CisgICAgb3B0LnBlcm1pc3NpdmUgICAgICAgICAgPSBERkxfUEVSTUlTU0lWRTsKKworICAgIGZvciggaSA9IDE7IGkgPCBhcmdjOyBpKysgKQorICAgIHsKKyAgICAgICAgcCA9IGFyZ3ZbaV07CisgICAgICAgIGlmKCAoIHEgPSBzdHJjaHIoIHAsICc9JyApICkgPT0gTlVMTCApCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAqcSsrID0gJ1wwJzsKKworICAgICAgICBmb3IoIGogPSAwOyBwICsgaiA8IHE7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBhcmd2W2ldW2pdID49ICdBJyAmJiBhcmd2W2ldW2pdIDw9ICdaJyApCisgICAgICAgICAgICAgICAgYXJndltpXVtqXSB8PSAweDIwOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHN0cmNtcCggcCwgIm1vZGUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJmaWxlIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tb2RlID0gTU9ERV9GSUxFOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAic3NsIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tb2RlID0gTU9ERV9TU0w7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJmaWxlbmFtZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5maWxlbmFtZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImNhX2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuY2FfZmlsZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImNybF9maWxlIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmNybF9maWxlID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiY2FfcGF0aCIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5jYV9wYXRoID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic2VydmVyX25hbWUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuc2VydmVyX25hbWUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzZXJ2ZXJfcG9ydCIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5zZXJ2ZXJfcG9ydCA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImRlYnVnX2xldmVsIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuZGVidWdfbGV2ZWwgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LmRlYnVnX2xldmVsIDwgMCB8fCBvcHQuZGVidWdfbGV2ZWwgPiA2NTUzNSApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJwZXJtaXNzaXZlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQucGVybWlzc2l2ZSA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQucGVybWlzc2l2ZSA8IDAgfHwgb3B0LnBlcm1pc3NpdmUgPiAxICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAxLjEuIExvYWQgdGhlIHRydXN0ZWQgQ0EKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIHRoZSBDQSByb290IGNlcnRpZmljYXRlIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoIHN0cmxlbiggb3B0LmNhX3BhdGggKSApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX3BhdGgoICZjYWNlcnQsIG9wdC5jYV9wYXRoICk7CisgICAgICAgIHZlcmlmeSA9IDE7CisgICAgfQorICAgIGVsc2UgaWYoIHN0cmxlbiggb3B0LmNhX2ZpbGUgKSApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjYWNlcnQsIG9wdC5jYV9maWxlICk7CisgICAgICAgIHZlcmlmeSA9IDE7CisgICAgfQorCisgICAgaWYoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2sgKCVkIHNraXBwZWQpXG4iLCByZXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DKQorICAgIGlmKCBzdHJsZW4oIG9wdC5jcmxfZmlsZSApICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZmlsZSggJmNhY3JsLCBvcHQuY3JsX2ZpbGUgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NybF9wYXJzZSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICB2ZXJpZnkgPSAxOworICAgIH0KKyNlbmRpZgorCisgICAgaWYoIG9wdC5tb2RlID09IE1PREVfRklMRSApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0IGNydDsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydCAqY3VyID0gJmNydDsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY3J0ICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogMS4xLiBMb2FkIHRoZSBjZXJ0aWZpY2F0ZShzKQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBMb2FkaW5nIHRoZSBjZXJ0aWZpY2F0ZShzKSAuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY3J0LCBvcHQuZmlsZW5hbWUgKTsKKworICAgICAgICBpZiggcmV0IDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjcnQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBvcHQucGVybWlzc2l2ZSA9PSAwICYmIHJldCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSBmYWlsZWQgdG8gcGFyc2UgJWQgY2VydGlmaWNhdGVzXG5cbiIsIHJldCApOworICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY3J0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIDEuMiBQcmludCB0aGUgY2VydGlmaWNhdGUocykKKyAgICAgICAgICovCisgICAgICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFBlZXIgY2VydGlmaWNhdGUgaW5mb3JtYXRpb24gICAgLi4uXG4iICk7CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X2luZm8oIChjaGFyICopIGJ1Ziwgc2l6ZW9mKCBidWYgKSAtIDEsICIgICAgICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyICk7CisgICAgICAgICAgICBpZiggcmV0ID09IC0xICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9pbmZvIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNydCApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIlc1xuIiwgYnVmICk7CisKKyAgICAgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IDA7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogMS4zIFZlcmlmeSB0aGUgY2VydGlmaWNhdGUKKyAgICAgICAgICovCisgICAgICAgIGlmKCB2ZXJpZnkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBWZXJpZnlpbmcgWC41MDkgY2VydGlmaWNhdGUuLi4iICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5KCAmY3J0LCAmY2FjZXJ0LCAmY2FjcmwsIE5VTEwsICZmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfdmVyaWZ5LCBOVUxMICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGFyIHZyZnlfYnVmWzUxMl07CisKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2luZm8oIHZyZnlfYnVmLCBzaXplb2YoIHZyZnlfYnVmICksICIgICEgIiwgZmxhZ3MgKTsKKworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJXNcbiIsIHZyZnlfYnVmICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNydCApOworICAgIH0KKyAgICBlbHNlIGlmKCBvcHQubW9kZSA9PSBNT0RFX1NTTCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiAxLiBJbml0aWFsaXplIHRoZSBSTkcgYW5kIHRoZSBzZXNzaW9uIGRhdGEKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gc3NsX2V4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFQlVHX0MpCisgICAgICAgIG1iZWR0bHNfZGVidWdfc2V0X3RocmVzaG9sZCggb3B0LmRlYnVnX2xldmVsICk7CisjZW5kaWYKKworICAgICAgICAvKgorICAgICAgICAgKiAyLiBTdGFydCB0aGUgY29ubmVjdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gU1NMIGNvbm5lY3Rpb24gdG8gdGNwLyVzLyVzLi4uIiwgb3B0LnNlcnZlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuc2VydmVyX3BvcnQgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9jb25uZWN0KCAmc2VydmVyX2ZkLCBvcHQuc2VydmVyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuc2VydmVyX3BvcnQsIE1CRURUTFNfTkVUX1BST1RPX1RDUCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2Nvbm5lY3QgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIHNzbF9leGl0OworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogMy4gU2V0dXAgc3R1ZmYKKyAgICAgICAgICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyggJmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9JU19DTElFTlQsCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfUFJFU0VUX0RFRkFVTFQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyaWZ5ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZSggJmNvbmYsIE1CRURUTFNfU1NMX1ZFUklGWV9SRVFVSVJFRCApOworICAgICAgICAgICAgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbiggJmNvbmYsICZjYWNlcnQsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfdmVyaWZ5KCAmY29uZiwgbXlfdmVyaWZ5LCBOVUxMICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZSggJmNvbmYsIE1CRURUTFNfU1NMX1ZFUklGWV9OT05FICk7CisKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9ybmcoICZjb25mLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICk7CisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgbXlfZGVidWcsIHN0ZG91dCApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldHVwIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBzc2xfZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSggJnNzbCwgb3B0LnNlcnZlcl9uYW1lICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBzc2xfZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oICZzc2wsICZzZXJ2ZXJfZmQsIG1iZWR0bHNfbmV0X3NlbmQsIG1iZWR0bHNfbmV0X3JlY3YsIE5VTEwgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiA0LiBIYW5kc2hha2UKKyAgICAgICAgICovCisgICAgICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggJnNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJiByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgICAgICBnb3RvIHNzbF9leGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiA1LiBQcmludCB0aGUgY2VydGlmaWNhdGUKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFBlZXIgY2VydGlmaWNhdGUgaW5mb3JtYXRpb24gICAgLi4uXG4iICk7CisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfaW5mbyggKGNoYXIgKikgYnVmLCBzaXplb2YoIGJ1ZiApIC0gMSwgIiAgICAgICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5zZXNzaW9uLT5wZWVyX2NlcnQgKTsKKyAgICAgICAgaWYoIHJldCA9PSAtMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X2luZm8gcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIHNzbF9leGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIlc1xuIiwgYnVmICk7CisKKyAgICAgICAgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCAmc3NsICk7CisKK3NzbF9leGl0OgorICAgICAgICBtYmVkdGxzX3NzbF9mcmVlKCAmc3NsICk7CisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGdvdG8gdXNhZ2U7CisKK2V4aXQ6CisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmc2VydmVyX2ZkICk7CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2FjZXJ0ICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MpCisgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCAmY2FjcmwgKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIGlmKCByZXQgPCAwICkKKyAgICAgICAgcmV0ID0gMTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX1NTTF9UTFNfQyAmJgorICAgICAgICAgIE1CRURUTFNfU1NMX0NMSV9DICYmIE1CRURUTFNfTkVUX0MgJiYgTUJFRFRMU19SU0FfQyAmJgorICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAmJiBNQkVEVExTX0ZTX0lPICYmIE1CRURUTFNfQ1RSX0RSQkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvY2VydF9yZXEuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L2NlcnRfcmVxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkZjIxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L2NlcnRfcmVxLmMKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiAgQ2VydGlmaWNhdGUgcmVxdWVzdCBnZW5lcmF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NTUl9XUklURV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCAiTUJFRFRMU19YNTA5X0NTUl9XUklURV9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19QS19QQVJTRV9DIGFuZC9vciBNQkVEVExTX1NIQTI1Nl9DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19FTlRST1BZX0MgYW5kL29yIE1CRURUTFNfQ1RSX0RSQkdfQyAiCisgICAgICAgICAgICAibm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3NyLmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgREZMX0ZJTEVOQU1FICAgICAgICAgICAgImtleWZpbGUua2V5IgorI2RlZmluZSBERkxfREVCVUdfTEVWRUwgICAgICAgICAwCisjZGVmaW5lIERGTF9PVVRQVVRfRklMRU5BTUUgICAgICJjZXJ0LnJlcSIKKyNkZWZpbmUgREZMX1NVQkpFQ1RfTkFNRSAgICAgICAgIkNOPUNlcnQsTz1tYmVkIFRMUyxDPVVLIgorI2RlZmluZSBERkxfS0VZX1VTQUdFICAgICAgICAgICAwCisjZGVmaW5lIERGTF9OU19DRVJUX1RZUEUgICAgICAgIDAKKworI2RlZmluZSBVU0FHRSBcCisgICAgIlxuIHVzYWdlOiBjZXJ0X3JlcSBwYXJhbT08Pi4uLlxuIiAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4gYWNjZXB0YWJsZSBwYXJhbWV0ZXJzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgZmlsZW5hbWU9JSVzICAgICAgICAgZGVmYXVsdDoga2V5ZmlsZS5rZXlcbiIgICBcCisgICAgIiAgICBkZWJ1Z19sZXZlbD0lJWQgICAgICBkZWZhdWx0OiAwIChkaXNhYmxlZClcbiIgIFwKKyAgICAiICAgIG91dHB1dF9maWxlPSUlcyAgICAgIGRlZmF1bHQ6IGNlcnQucmVxXG4iICAgICAgXAorICAgICIgICAgc3ViamVjdF9uYW1lPSUlcyAgICAgZGVmYXVsdDogQ049Q2VydCxPPW1iZWQgVExTLEM9VUtcbiIgICBcCisgICAgIiAgICBrZXlfdXNhZ2U9JSVzICAgICAgICBkZWZhdWx0OiAoZW1wdHkpXG4iICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWEtc2VwYXJhdGVkLWxpc3Qgb2YgdmFsdWVzOlxuIiAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0YWxfc2lnbmF0dXJlXG4iICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uX3JlcHVkaWF0aW9uXG4iICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZW5jaXBoZXJtZW50XG4iICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZW5jaXBoZXJtZW50XG4iICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2FncmVlbWVudFxuIiAgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfY2VydF9zaWduXG4iICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgY3JsX3NpZ25cbiIgICAgICAgICAgICAgIFwKKyAgICAiICAgIG5zX2NlcnRfdHlwZT0lJXMgICAgIGRlZmF1bHQ6IChlbXB0eSlcbiIgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBDb21tYS1zZXBhcmF0ZWQtbGlzdCBvZiB2YWx1ZXM6XG4iICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NsaWVudFxuIiAgICAgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfc2VydmVyXG4iICAgICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsXG4iICAgICAgICAgICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3NpZ25pbmdcbiIgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfY2FcbiIgICAgICAgICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsX2NhXG4iICAgICAgICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3NpZ25pbmdfY2FcbiIgICAgIFwKKyAgICAiXG4iCisKKy8qCisgKiBnbG9iYWwgb3B0aW9ucworICovCitzdHJ1Y3Qgb3B0aW9ucworeworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOyAgICAgICAvKiBmaWxlbmFtZSBvZiB0aGUga2V5IGZpbGUgICAgICAgICAgICAgKi8KKyAgICBpbnQgZGVidWdfbGV2ZWw7ICAgICAgICAgICAgLyogbGV2ZWwgb2YgZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqb3V0cHV0X2ZpbGU7ICAgIC8qIHdoZXJlIHRvIHN0b3JlIHRoZSBjb25zdHJ1Y3RlZCBrZXkgZmlsZSAgKi8KKyAgICBjb25zdCBjaGFyICpzdWJqZWN0X25hbWU7ICAgLyogc3ViamVjdCBuYW1lIGZvciBjZXJ0aWZpY2F0ZSByZXF1ZXN0ICovCisgICAgdW5zaWduZWQgY2hhciBrZXlfdXNhZ2U7ICAgIC8qIGtleSB1c2FnZSBmbGFncyAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgbnNfY2VydF90eXBlOyAvKiBOUyBjZXJ0IHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gb3B0OworCitpbnQgd3JpdGVfY2VydGlmaWNhdGVfcmVxdWVzdCggbWJlZHRsc194NTA5d3JpdGVfY3NyICpyZXEsIGNvbnN0IGNoYXIgKm91dHB1dF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBGSUxFICpmOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X2J1Zls0MDk2XTsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIG1lbXNldCggb3V0cHV0X2J1ZiwgMCwgNDA5NiApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9wZW0oIHJlcSwgb3V0cHV0X2J1ZiwgNDA5NiwgZl9ybmcsIHBfcm5nICkgKSA8IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgbGVuID0gc3RybGVuKCAoY2hhciAqKSBvdXRwdXRfYnVmICk7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIG91dHB1dF9maWxlLCAidyIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggZndyaXRlKCBvdXRwdXRfYnVmLCAxLCBsZW4sIGYgKSAhPSBsZW4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgbWJlZHRsc19wa19jb250ZXh0IGtleTsKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBpbnQgaTsKKyAgICBjaGFyICpwLCAqcSwgKnI7CisgICAgbWJlZHRsc194NTA5d3JpdGVfY3NyIHJlcTsKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gImNzciBleGFtcGxlIGFwcCI7CisKKyAgICAvKgorICAgICAqIFNldCB0byBzYW5lIHZhbHVlcworICAgICAqLworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9pbml0KCAmcmVxICk7CisgICAgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9tZF9hbGcoICZyZXEsIE1CRURUTFNfTURfU0hBMjU2ICk7CisgICAgbWJlZHRsc19wa19pbml0KCAma2V5ICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgaWYoIGFyZ2MgPT0gMCApCisgICAgeworICAgIHVzYWdlOgorICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG9wdC5maWxlbmFtZSAgICAgICAgICAgID0gREZMX0ZJTEVOQU1FOworICAgIG9wdC5kZWJ1Z19sZXZlbCAgICAgICAgID0gREZMX0RFQlVHX0xFVkVMOworICAgIG9wdC5vdXRwdXRfZmlsZSAgICAgICAgID0gREZMX09VVFBVVF9GSUxFTkFNRTsKKyAgICBvcHQuc3ViamVjdF9uYW1lICAgICAgICA9IERGTF9TVUJKRUNUX05BTUU7CisgICAgb3B0LmtleV91c2FnZSAgICAgICAgICAgPSBERkxfS0VZX1VTQUdFOworICAgIG9wdC5uc19jZXJ0X3R5cGUgICAgICAgID0gREZMX05TX0NFUlRfVFlQRTsKKworICAgIGZvciggaSA9IDE7IGkgPCBhcmdjOyBpKysgKQorICAgIHsKKworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGlmKCBzdHJjbXAoIHAsICJmaWxlbmFtZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5maWxlbmFtZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm91dHB1dF9maWxlIiApID09IDAgKQorICAgICAgICAgICAgb3B0Lm91dHB1dF9maWxlID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZGVidWdfbGV2ZWwiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5kZWJ1Z19sZXZlbCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuZGVidWdfbGV2ZWwgPCAwIHx8IG9wdC5kZWJ1Z19sZXZlbCA+IDY1NTM1ICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInN1YmplY3RfbmFtZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnN1YmplY3RfbmFtZSA9IHE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAia2V5X3VzYWdlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSggcSAhPSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggKCByID0gc3RyY2hyKCBxLCAnLCcgKSApICE9IE5VTEwgKQorICAgICAgICAgICAgICAgICAgICAqcisrID0gJ1wwJzsKKworICAgICAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJkaWdpdGFsX3NpZ25hdHVyZSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0LmtleV91c2FnZSB8PSBNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAibm9uX3JlcHVkaWF0aW9uIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQua2V5X3VzYWdlIHw9IE1CRURUTFNfWDUwOV9LVV9OT05fUkVQVURJQVRJT047CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAia2V5X2VuY2lwaGVybWVudCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0LmtleV91c2FnZSB8PSBNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJkYXRhX2VuY2lwaGVybWVudCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0LmtleV91c2FnZSB8PSBNQkVEVExTX1g1MDlfS1VfREFUQV9FTkNJUEhFUk1FTlQ7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAia2V5X2FncmVlbWVudCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0LmtleV91c2FnZSB8PSBNQkVEVExTX1g1MDlfS1VfS0VZX0FHUkVFTUVOVDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJrZXlfY2VydF9zaWduIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQua2V5X3VzYWdlIHw9IE1CRURUTFNfWDUwOV9LVV9LRVlfQ0VSVF9TSUdOOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImNybF9zaWduIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQua2V5X3VzYWdlIHw9IE1CRURUTFNfWDUwOV9LVV9DUkxfU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisKKyAgICAgICAgICAgICAgICBxID0gcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJuc19jZXJ0X3R5cGUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlKCBxICE9IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAoIHIgPSBzdHJjaHIoIHEsICcsJyApICkgIT0gTlVMTCApCisgICAgICAgICAgICAgICAgICAgICpyKysgPSAnXDAnOworCisgICAgICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgInNzbF9jbGllbnQiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfQ0xJRU5UOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInNzbF9zZXJ2ZXIiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfU0VSVkVSOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImVtYWlsIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQubnNfY2VydF90eXBlIHw9IE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfRU1BSUw7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAib2JqZWN0X3NpZ25pbmciICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9PQkpFQ1RfU0lHTklORzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJzc2xfY2EiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfQ0E7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiZW1haWxfY2EiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTF9DQTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJvYmplY3Rfc2lnbmluZ19jYSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0Lm5zX2NlcnRfdHlwZSB8PSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX09CSkVDVF9TSUdOSU5HX0NBOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKworICAgICAgICAgICAgICAgIHEgPSByOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgfQorCisgICAgaWYoIG9wdC5rZXlfdXNhZ2UgKQorICAgICAgICBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2tleV91c2FnZSggJnJlcSwgb3B0LmtleV91c2FnZSApOworCisgICAgaWYoIG9wdC5uc19jZXJ0X3R5cGUgKQorICAgICAgICBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X25zX2NlcnRfdHlwZSggJnJlcSwgb3B0Lm5zX2NlcnRfdHlwZSApOworCisgICAgLyoKKyAgICAgKiAwLiBTZWVkIHRoZSBQUk5HCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkICVkIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAxLjAuIENoZWNrIHRoZSBzdWJqZWN0IG5hbWUgZm9yIHZhbGlkaXR5CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ2hlY2tpbmcgc3ViamVjdCBuYW1lLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X3N1YmplY3RfbmFtZSggJnJlcSwgb3B0LnN1YmplY3RfbmFtZSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9zdWJqZWN0X25hbWUgcmV0dXJuZWQgJWQiLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDEuMS4gTG9hZCB0aGUga2V5CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgcHJpdmF0ZSBrZXkgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoICZrZXksIG9wdC5maWxlbmFtZSwgTlVMTCApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUgcmV0dXJuZWQgJWQiLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfa2V5KCAmcmVxLCAma2V5ICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAxLjIuIFdyaXRpbmcgdGhlIHJlcXVlc3QKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBXcml0aW5nIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gd3JpdGVfY2VydGlmaWNhdGVfcmVxdWVzdCggJnJlcSwgb3B0Lm91dHB1dF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIHdyaXRlX2NlcnRpZmNhdGVfcmVxdWVzdCAlZCIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworZXhpdDoKKworICAgIGlmKCByZXQgIT0gMCAmJiByZXQgIT0gMSkKKyAgICB7CisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIC0gJXNcbiIsIGJ1ZiApOworI2Vsc2UKKyAgICAgICAgbWJlZHRsc19wcmludGYoIlxuIik7CisjZW5kaWYKKyAgICB9CisKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfZnJlZSggJnJlcSApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJmtleSApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NTUl9XUklURV9DICYmIE1CRURUTFNfUEtfUEFSU0VfQyAmJiBNQkVEVExTX0ZTX0lPICYmCisgICAgICAgICAgTUJFRFRMU19FTlRST1BZX0MgJiYgTUJFRFRMU19DVFJfRFJCR19DICYmIE1CRURUTFNfUEVNX1dSSVRFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L2NlcnRfd3JpdGUuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L2NlcnRfd3JpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU1ZjFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvY2VydF93cml0ZS5jCkBAIC0wLDAgKzEsNjY4IEBACisvKgorICogIENlcnRpZmljYXRlIGdlbmVyYXRpb24gYW5kIHNpZ25pbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FUlJPUl9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZiggIk1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQyBhbmQvb3IgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19GU19JTyBhbmQvb3IgTUJFRFRMU19TSEEyNTZfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciBNQkVEVExTX0NUUl9EUkJHX0MgYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX0VSUk9SX0Mgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3J0LmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5X2Nzci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MpCisjZGVmaW5lIFVTQUdFX0NTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgcmVxdWVzdF9maWxlPSUlcyAgICAgZGVmYXVsdDogKGVtcHR5KVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgSWYgcmVxdWVzdF9maWxlIGlzIHNwZWNpZmllZCwgc3ViamVjdF9rZXksXG4iICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3RfcHdkIGFuZCBzdWJqZWN0X25hbWUgYXJlIGlnbm9yZWQhXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9DU1IgIiIKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MgKi8KKworI2RlZmluZSBERkxfSVNTVUVSX0NSVCAgICAgICAgICAiIgorI2RlZmluZSBERkxfUkVRVUVTVF9GSUxFICAgICAgICAiIgorI2RlZmluZSBERkxfU1VCSkVDVF9LRVkgICAgICAgICAic3ViamVjdC5rZXkiCisjZGVmaW5lIERGTF9JU1NVRVJfS0VZICAgICAgICAgICJjYS5rZXkiCisjZGVmaW5lIERGTF9TVUJKRUNUX1BXRCAgICAgICAgICIiCisjZGVmaW5lIERGTF9JU1NVRVJfUFdEICAgICAgICAgICIiCisjZGVmaW5lIERGTF9PVVRQVVRfRklMRU5BTUUgICAgICJjZXJ0LmNydCIKKyNkZWZpbmUgREZMX1NVQkpFQ1RfTkFNRSAgICAgICAgIkNOPUNlcnQsTz1tYmVkIFRMUyxDPVVLIgorI2RlZmluZSBERkxfSVNTVUVSX05BTUUgICAgICAgICAiQ049Q0EsTz1tYmVkIFRMUyxDPVVLIgorI2RlZmluZSBERkxfTk9UX0JFRk9SRSAgICAgICAgICAiMjAwMTAxMDEwMDAwMDAiCisjZGVmaW5lIERGTF9OT1RfQUZURVIgICAgICAgICAgICIyMDMwMTIzMTIzNTk1OSIKKyNkZWZpbmUgREZMX1NFUklBTCAgICAgICAgICAgICAgIjEiCisjZGVmaW5lIERGTF9TRUxGU0lHTiAgICAgICAgICAgIDAKKyNkZWZpbmUgREZMX0lTX0NBICAgICAgICAgICAgICAgMAorI2RlZmluZSBERkxfTUFYX1BBVEhMRU4gICAgICAgICAtMQorI2RlZmluZSBERkxfS0VZX1VTQUdFICAgICAgICAgICAwCisjZGVmaW5lIERGTF9OU19DRVJUX1RZUEUgICAgICAgIDAKKworI2RlZmluZSBVU0FHRSBcCisgICAgIlxuIHVzYWdlOiBjZXJ0X3dyaXRlIHBhcmFtPTw+Li4uXG4iICAgICAgICAgICAgICAgIFwKKyAgICAiXG4gYWNjZXB0YWJsZSBwYXJhbWV0ZXJzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVTQUdFX0NTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBzdWJqZWN0X2tleT0lJXMgICAgICBkZWZhdWx0OiBzdWJqZWN0LmtleVxuIiAgIFwKKyAgICAiICAgIHN1YmplY3RfcHdkPSUlcyAgICAgIGRlZmF1bHQ6IChlbXB0eSlcbiIgICAgICAgXAorICAgICIgICAgc3ViamVjdF9uYW1lPSUlcyAgICAgZGVmYXVsdDogQ049Q2VydCxPPW1iZWQgVExTLEM9VUtcbiIgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGlzc3Vlcl9jcnQ9JSVzICAgICAgIGRlZmF1bHQ6IChlbXB0eSlcbiIgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBJZiBpc3N1ZXJfY3J0IGlzIHNwZWNpZmllZCwgaXNzdWVyX25hbWUgaXNcbiIgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlZCFcbiIgICAgICAgICAgICAgICAgXAorICAgICIgICAgaXNzdWVyX25hbWU9JSVzICAgICAgZGVmYXVsdDogQ049Q0EsTz1tYmVkIFRMUyxDPVVLXG4iICAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHNlbGZzaWduPSUlZCAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKVxuIiAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBJZiBzZWxmc2lnbiBpcyBlbmFibGVkLCBpc3N1ZXJfbmFtZSBhbmRcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXJfa2V5IGFyZSByZXF1aXJlZCAoaXNzdWVyX2NydCBhbmRcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0XyogYXJlIGlnbm9yZWRcbiIgICBcCisgICAgIiAgICBpc3N1ZXJfa2V5PSUlcyAgICAgICBkZWZhdWx0OiBjYS5rZXlcbiIgICAgICAgIFwKKyAgICAiICAgIGlzc3Vlcl9wd2Q9JSVzICAgICAgIGRlZmF1bHQ6IChlbXB0eSlcbiIgICAgICAgXAorICAgICIgICAgb3V0cHV0X2ZpbGU9JSVzICAgICAgZGVmYXVsdDogY2VydC5jcnRcbiIgICAgICBcCisgICAgIiAgICBzZXJpYWw9JSVzICAgICAgICAgICBkZWZhdWx0OiAxXG4iICAgICAgICAgICAgIFwKKyAgICAiICAgIG5vdF9iZWZvcmU9JSVzICAgICAgIGRlZmF1bHQ6IDIwMDEwMTAxMDAwMDAwXG4iXAorICAgICIgICAgbm90X2FmdGVyPSUlcyAgICAgICAgZGVmYXVsdDogMjAzMDEyMzEyMzU5NTlcbiJcCisgICAgIiAgICBpc19jYT0lJWQgICAgICAgICAgICBkZWZhdWx0OiAwIChkaXNhYmxlZClcbiIgIFwKKyAgICAiICAgIG1heF9wYXRobGVuPSUlZCAgICAgIGRlZmF1bHQ6IC0xIChub25lKVxuIiAgICAgXAorICAgICIgICAga2V5X3VzYWdlPSUlcyAgICAgICAgZGVmYXVsdDogKGVtcHR5KVxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hLXNlcGFyYXRlZC1saXN0IG9mIHZhbHVlczpcbiIgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdGFsX3NpZ25hdHVyZVxuIiAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbl9yZXB1ZGlhdGlvblxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2VuY2lwaGVybWVudFxuIiAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2VuY2lwaGVybWVudFxuIiAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9hZ3JlZW1lbnRcbiIgICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2NlcnRfc2lnblxuIiAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGNybF9zaWduXG4iICAgICAgICAgICAgICBcCisgICAgIiAgICBuc19jZXJ0X3R5cGU9JSVzICAgICBkZWZhdWx0OiAoZW1wdHkpXG4iICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWEtc2VwYXJhdGVkLWxpc3Qgb2YgdmFsdWVzOlxuIiAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jbGllbnRcbiIgICAgICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3NlcnZlclxuIiAgICAgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbFxuIiAgICAgICAgICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9zaWduaW5nXG4iICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NhXG4iICAgICAgICAgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbF9jYVxuIiAgICAgICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9zaWduaW5nX2NhXG4iICAgICBcCisgICAgIlxuIgorCisvKgorICogZ2xvYmFsIG9wdGlvbnMKKyAqLworc3RydWN0IG9wdGlvbnMKK3sKKyAgICBjb25zdCBjaGFyICppc3N1ZXJfY3J0OyAgICAgLyogZmlsZW5hbWUgb2YgdGhlIGlzc3VlciBjZXJ0aWZpY2F0ZSAgICovCisgICAgY29uc3QgY2hhciAqcmVxdWVzdF9maWxlOyAgIC8qIGZpbGVuYW1lIG9mIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0ICAqLworICAgIGNvbnN0IGNoYXIgKnN1YmplY3Rfa2V5OyAgICAvKiBmaWxlbmFtZSBvZiB0aGUgc3ViamVjdCBrZXkgZmlsZSAgICAgKi8KKyAgICBjb25zdCBjaGFyICppc3N1ZXJfa2V5OyAgICAgLyogZmlsZW5hbWUgb2YgdGhlIGlzc3VlciBrZXkgZmlsZSAgICAgICovCisgICAgY29uc3QgY2hhciAqc3ViamVjdF9wd2Q7ICAgIC8qIHBhc3N3b3JkIGZvciB0aGUgc3ViamVjdCBrZXkgZmlsZSAgICAqLworICAgIGNvbnN0IGNoYXIgKmlzc3Vlcl9wd2Q7ICAgICAvKiBwYXNzd29yZCBmb3IgdGhlIGlzc3VlciBrZXkgZmlsZSAgICAgKi8KKyAgICBjb25zdCBjaGFyICpvdXRwdXRfZmlsZTsgICAgLyogd2hlcmUgdG8gc3RvcmUgdGhlIGNvbnN0cnVjdGVkIGtleSBmaWxlICAqLworICAgIGNvbnN0IGNoYXIgKnN1YmplY3RfbmFtZTsgICAvKiBzdWJqZWN0IG5hbWUgZm9yIGNlcnRpZmljYXRlICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICppc3N1ZXJfbmFtZTsgICAgLyogaXNzdWVyIG5hbWUgZm9yIGNlcnRpZmljYXRlICAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqbm90X2JlZm9yZTsgICAgIC8qIHZhbGlkaXR5IHBlcmlvZCBub3QgYmVmb3JlICAgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKm5vdF9hZnRlcjsgICAgICAvKiB2YWxpZGl0eSBwZXJpb2Qgbm90IGFmdGVyICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpzZXJpYWw7ICAgICAgICAgLyogc2VyaWFsIG51bWJlciBzdHJpbmcgICAgICAgICAgICAgICAgICovCisgICAgaW50IHNlbGZzaWduOyAgICAgICAgICAgICAgIC8qIHNlbGZzaWduIHRoZSBjZXJ0aWZpY2F0ZSAgICAgICAgICAgICAqLworICAgIGludCBpc19jYTsgICAgICAgICAgICAgICAgICAvKiBpcyBhIENBIGNlcnRpZmljYXRlICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgbWF4X3BhdGhsZW47ICAgICAgICAgICAgLyogbWF4aW11bSBDQSBwYXRoIGxlbmd0aCAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBrZXlfdXNhZ2U7ICAgIC8qIGtleSB1c2FnZSBmbGFncyAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgbnNfY2VydF90eXBlOyAvKiBOUyBjZXJ0IHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gb3B0OworCitpbnQgd3JpdGVfY2VydGlmaWNhdGUoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmNydCwgY29uc3QgY2hhciAqb3V0cHV0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgRklMRSAqZjsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9idWZbNDA5Nl07CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBtZW1zZXQoIG91dHB1dF9idWYsIDAsIDQwOTYgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfcGVtKCBjcnQsIG91dHB1dF9idWYsIDQwOTYsIGZfcm5nLCBwX3JuZyApICkgPCAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGxlbiA9IHN0cmxlbiggKGNoYXIgKikgb3V0cHV0X2J1ZiApOworCisgICAgaWYoICggZiA9IGZvcGVuKCBvdXRwdXRfZmlsZSwgInciICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoIGZ3cml0ZSggb3V0cHV0X2J1ZiwgMSwgbGVuLCBmICkgIT0gbGVuICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorCisgICAgZmNsb3NlKCBmICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQgPSAwOworICAgIG1iZWR0bHNfeDUwOV9jcnQgaXNzdWVyX2NydDsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgbG9hZGVkX2lzc3Vlcl9rZXksIGxvYWRlZF9zdWJqZWN0X2tleTsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgKmlzc3Vlcl9rZXkgPSAmbG9hZGVkX2lzc3Vlcl9rZXksCisgICAgICAgICAgICAgICAgKnN1YmplY3Rfa2V5ID0gJmxvYWRlZF9zdWJqZWN0X2tleTsKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBjaGFyIGlzc3Vlcl9uYW1lWzI1Nl07CisgICAgaW50IGk7CisgICAgY2hhciAqcCwgKnEsICpyOworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DKQorICAgIGNoYXIgc3ViamVjdF9uYW1lWzI1Nl07CisgICAgbWJlZHRsc194NTA5X2NzciBjc3I7CisjZW5kaWYKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0IGNydDsKKyAgICBtYmVkdGxzX21waSBzZXJpYWw7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJjcnQgZXhhbXBsZSBhcHAiOworCisgICAgLyoKKyAgICAgKiBTZXQgdG8gc2FuZSB2YWx1ZXMKKyAgICAgKi8KKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfaW5pdCggJmNydCApOworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfbWRfYWxnKCAmY3J0LCBNQkVEVExTX01EX1NIQTI1NiApOworICAgIG1iZWR0bHNfcGtfaW5pdCggJmxvYWRlZF9pc3N1ZXJfa2V5ICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmbG9hZGVkX3N1YmplY3Rfa2V5ICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnNlcmlhbCApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MpCisgICAgbWJlZHRsc194NTA5X2Nzcl9pbml0KCAmY3NyICk7CisjZW5kaWYKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZpc3N1ZXJfY3J0ICk7CisgICAgbWVtc2V0KCBidWYsIDAsIDEwMjQgKTsKKworICAgIGlmKCBhcmdjID09IDAgKQorICAgIHsKKyAgICB1c2FnZToKKyAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBvcHQuaXNzdWVyX2NydCAgICAgICAgICA9IERGTF9JU1NVRVJfQ1JUOworICAgIG9wdC5yZXF1ZXN0X2ZpbGUgICAgICAgID0gREZMX1JFUVVFU1RfRklMRTsKKyAgICBvcHQuc3ViamVjdF9rZXkgICAgICAgICA9IERGTF9TVUJKRUNUX0tFWTsKKyAgICBvcHQuaXNzdWVyX2tleSAgICAgICAgICA9IERGTF9JU1NVRVJfS0VZOworICAgIG9wdC5zdWJqZWN0X3B3ZCAgICAgICAgID0gREZMX1NVQkpFQ1RfUFdEOworICAgIG9wdC5pc3N1ZXJfcHdkICAgICAgICAgID0gREZMX0lTU1VFUl9QV0Q7CisgICAgb3B0Lm91dHB1dF9maWxlICAgICAgICAgPSBERkxfT1VUUFVUX0ZJTEVOQU1FOworICAgIG9wdC5zdWJqZWN0X25hbWUgICAgICAgID0gREZMX1NVQkpFQ1RfTkFNRTsKKyAgICBvcHQuaXNzdWVyX25hbWUgICAgICAgICA9IERGTF9JU1NVRVJfTkFNRTsKKyAgICBvcHQubm90X2JlZm9yZSAgICAgICAgICA9IERGTF9OT1RfQkVGT1JFOworICAgIG9wdC5ub3RfYWZ0ZXIgICAgICAgICAgID0gREZMX05PVF9BRlRFUjsKKyAgICBvcHQuc2VyaWFsICAgICAgICAgICAgICA9IERGTF9TRVJJQUw7CisgICAgb3B0LnNlbGZzaWduICAgICAgICAgICAgPSBERkxfU0VMRlNJR047CisgICAgb3B0LmlzX2NhICAgICAgICAgICAgICAgPSBERkxfSVNfQ0E7CisgICAgb3B0Lm1heF9wYXRobGVuICAgICAgICAgPSBERkxfTUFYX1BBVEhMRU47CisgICAgb3B0LmtleV91c2FnZSAgICAgICAgICAgPSBERkxfS0VZX1VTQUdFOworICAgIG9wdC5uc19jZXJ0X3R5cGUgICAgICAgID0gREZMX05TX0NFUlRfVFlQRTsKKworICAgIGZvciggaSA9IDE7IGkgPCBhcmdjOyBpKysgKQorICAgIHsKKworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGlmKCBzdHJjbXAoIHAsICJyZXF1ZXN0X2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQucmVxdWVzdF9maWxlID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic3ViamVjdF9rZXkiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuc3ViamVjdF9rZXkgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJpc3N1ZXJfa2V5IiApID09IDAgKQorICAgICAgICAgICAgb3B0Lmlzc3Vlcl9rZXkgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzdWJqZWN0X3B3ZCIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5zdWJqZWN0X3B3ZCA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImlzc3Vlcl9wd2QiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuaXNzdWVyX3B3ZCA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImlzc3Vlcl9jcnQiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuaXNzdWVyX2NydCA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm91dHB1dF9maWxlIiApID09IDAgKQorICAgICAgICAgICAgb3B0Lm91dHB1dF9maWxlID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic3ViamVjdF9uYW1lIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuc3ViamVjdF9uYW1lID0gcTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJpc3N1ZXJfbmFtZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0Lmlzc3Vlcl9uYW1lID0gcTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJub3RfYmVmb3JlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQubm90X2JlZm9yZSA9IHE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibm90X2FmdGVyIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQubm90X2FmdGVyID0gcTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzZXJpYWwiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5zZXJpYWwgPSBxOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInNlbGZzaWduIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuc2VsZnNpZ24gPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnNlbGZzaWduIDwgMCB8fCBvcHQuc2VsZnNpZ24gPiAxICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImlzX2NhIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuaXNfY2EgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LmlzX2NhIDwgMCB8fCBvcHQuaXNfY2EgPiAxICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm1heF9wYXRobGVuIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQubWF4X3BhdGhsZW4gPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0Lm1heF9wYXRobGVuIDwgLTEgfHwgb3B0Lm1heF9wYXRobGVuID4gMTI3ICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImtleV91c2FnZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUoIHEgIT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICggciA9IHN0cmNociggcSwgJywnICkgKSAhPSBOVUxMICkKKyAgICAgICAgICAgICAgICAgICAgKnIrKyA9ICdcMCc7CisKKyAgICAgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAiZGlnaXRhbF9zaWduYXR1cmUiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5rZXlfdXNhZ2UgfD0gTUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIm5vbl9yZXB1ZGlhdGlvbiIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0LmtleV91c2FnZSB8PSBNQkVEVExTX1g1MDlfS1VfTk9OX1JFUFVESUFUSU9OOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImtleV9lbmNpcGhlcm1lbnQiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5rZXlfdXNhZ2UgfD0gTUJFRFRMU19YNTA5X0tVX0tFWV9FTkNJUEhFUk1FTlQ7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiZGF0YV9lbmNpcGhlcm1lbnQiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5rZXlfdXNhZ2UgfD0gTUJFRFRMU19YNTA5X0tVX0RBVEFfRU5DSVBIRVJNRU5UOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImtleV9hZ3JlZW1lbnQiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5rZXlfdXNhZ2UgfD0gTUJFRFRMU19YNTA5X0tVX0tFWV9BR1JFRU1FTlQ7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAia2V5X2NlcnRfc2lnbiIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0LmtleV91c2FnZSB8PSBNQkVEVExTX1g1MDlfS1VfS0VZX0NFUlRfU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJjcmxfc2lnbiIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0LmtleV91c2FnZSB8PSBNQkVEVExTX1g1MDlfS1VfQ1JMX1NJR047CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworCisgICAgICAgICAgICAgICAgcSA9IHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibnNfY2VydF90eXBlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSggcSAhPSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggKCByID0gc3RyY2hyKCBxLCAnLCcgKSApICE9IE5VTEwgKQorICAgICAgICAgICAgICAgICAgICAqcisrID0gJ1wwJzsKKworICAgICAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJzc2xfY2xpZW50IiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQubnNfY2VydF90eXBlIHw9IE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX0NMSUVOVDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJzc2xfc2VydmVyIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQubnNfY2VydF90eXBlIHw9IE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX1NFUlZFUjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJlbWFpbCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0Lm5zX2NlcnRfdHlwZSB8PSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX0VNQUlMOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIm9iamVjdF9zaWduaW5nIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQubnNfY2VydF90eXBlIHw9IE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfT0JKRUNUX1NJR05JTkc7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAic3NsX2NhIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQubnNfY2VydF90eXBlIHw9IE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX0NBOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImVtYWlsX2NhIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQubnNfY2VydF90eXBlIHw9IE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfRU1BSUxfQ0E7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAib2JqZWN0X3NpZ25pbmdfY2EiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9PQkpFQ1RfU0lHTklOR19DQTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisKKyAgICAgICAgICAgICAgICBxID0gcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCJcbiIpOworCisgICAgLyoKKyAgICAgKiAwLiBTZWVkIHRoZSBQUk5HCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkICVkIC0gJXNcbiIsIHJldCwgYnVmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLy8gUGFyc2Ugc2VyaWFsIHRvIE1QSQorICAgIC8vCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gUmVhZGluZyBzZXJpYWwgbnVtYmVyLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnNlcmlhbCwgMTAsIG9wdC5zZXJpYWwgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nIHJldHVybmVkIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvLyBQYXJzZSBpc3N1ZXIgY2VydGlmaWNhdGUgaWYgcHJlc2VudAorICAgIC8vCisgICAgaWYoICFvcHQuc2VsZnNpZ24gJiYgc3RybGVuKCBvcHQuaXNzdWVyX2NydCApICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIDEuMC5hLiBMb2FkIHRoZSBjZXJ0aWZpY2F0ZXMKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIGlzc3VlciBjZXJ0aWZpY2F0ZSAuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmaXNzdWVyX2NydCwgb3B0Lmlzc3Vlcl9jcnQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSByZXR1cm5lZCAtMHglMDJ4IC0gJXNcblxuIiwgLXJldCwgYnVmICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfZG5fZ2V0cyggaXNzdWVyX25hbWUsIHNpemVvZihpc3N1ZXJfbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNzdWVyX2NydC5zdWJqZWN0ICk7CisgICAgICAgIGlmKCByZXQgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfZG5fZ2V0cyByZXR1cm5lZCAtMHglMDJ4IC0gJXNcblxuIiwgLXJldCwgYnVmICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBvcHQuaXNzdWVyX25hbWUgPSBpc3N1ZXJfbmFtZTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DKQorICAgIC8vIFBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QgaWYgcHJlc2VudAorICAgIC8vCisgICAgaWYoICFvcHQuc2VsZnNpZ24gJiYgc3RybGVuKCBvcHQucmVxdWVzdF9maWxlICkgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogMS4wLmIuIExvYWQgdGhlIENTUgorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgY2VydGlmaWNhdGUgcmVxdWVzdCAuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2Nzcl9wYXJzZV9maWxlKCAmY3NyLCBvcHQucmVxdWVzdF9maWxlICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlX2ZpbGUgcmV0dXJuZWQgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2RuX2dldHMoIHN1YmplY3RfbmFtZSwgc2l6ZW9mKHN1YmplY3RfbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3NyLnN1YmplY3QgKTsKKyAgICAgICAgaWYoIHJldCA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9kbl9nZXRzIHJldHVybmVkIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG9wdC5zdWJqZWN0X25hbWUgPSBzdWJqZWN0X25hbWU7CisgICAgICAgIHN1YmplY3Rfa2V5ID0gJmNzci5wazsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MgKi8KKworICAgIC8qCisgICAgICogMS4xLiBMb2FkIHRoZSBrZXlzCisgICAgICovCisgICAgaWYoICFvcHQuc2VsZnNpZ24gJiYgIXN0cmxlbiggb3B0LnJlcXVlc3RfZmlsZSApICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIHN1YmplY3Qga2V5IC4uLiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoICZsb2FkZWRfc3ViamVjdF9rZXksIG9wdC5zdWJqZWN0X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5zdWJqZWN0X3B3ZCApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSByZXR1cm5lZCAtMHglMDJ4IC0gJXNcblxuIiwgLXJldCwgYnVmICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIGlzc3VlciBrZXkgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoICZsb2FkZWRfaXNzdWVyX2tleSwgb3B0Lmlzc3Vlcl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5pc3N1ZXJfcHdkICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUgcmV0dXJuZWQgLXglMDJ4IC0gJXNcblxuIiwgLXJldCwgYnVmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiBrZXkgYW5kIGlzc3VlciBjZXJ0aWZpY2F0ZSBtYXRjaAorICAgIC8vCisgICAgaWYoIHN0cmxlbiggb3B0Lmlzc3Vlcl9jcnQgKSApCisgICAgeworICAgICAgICBpZiggIW1iZWR0bHNfcGtfY2FuX2RvKCAmaXNzdWVyX2NydC5waywgTUJFRFRMU19QS19SU0EgKSB8fAorICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJm1iZWR0bHNfcGtfcnNhKCBpc3N1ZXJfY3J0LnBrICktPk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgJm1iZWR0bHNfcGtfcnNhKCAqaXNzdWVyX2tleSApLT5OICkgIT0gMCB8fAorICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJm1iZWR0bHNfcGtfcnNhKCBpc3N1ZXJfY3J0LnBrICktPkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJm1iZWR0bHNfcGtfcnNhKCAqaXNzdWVyX2tleSApLT5FICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBpc3N1ZXJfa2V5IGRvZXMgbm90IG1hdGNoIGlzc3VlciBjZXJ0aWZpY2F0ZVxuXG4iICk7CisgICAgICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICBpZiggb3B0LnNlbGZzaWduICkKKyAgICB7CisgICAgICAgIG9wdC5zdWJqZWN0X25hbWUgPSBvcHQuaXNzdWVyX25hbWU7CisgICAgICAgIHN1YmplY3Rfa2V5ID0gaXNzdWVyX2tleTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5KCAmY3J0LCBzdWJqZWN0X2tleSApOworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX2tleSggJmNydCwgaXNzdWVyX2tleSApOworCisgICAgLyoKKyAgICAgKiAxLjAuIENoZWNrIHRoZSBuYW1lcyBmb3IgdmFsaWRpdHkKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3RfbmFtZSggJmNydCwgb3B0LnN1YmplY3RfbmFtZSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X25hbWUgcmV0dXJuZWQgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9pc3N1ZXJfbmFtZSggJmNydCwgb3B0Lmlzc3Vlcl9uYW1lICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9uYW1lIHJldHVybmVkIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNldHRpbmcgY2VydGlmaWNhdGUgdmFsdWVzIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zZXJpYWwoICZjcnQsICZzZXJpYWwgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc2VyaWFsIHJldHVybmVkIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfdmFsaWRpdHkoICZjcnQsIG9wdC5ub3RfYmVmb3JlLCBvcHQubm90X2FmdGVyICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3ZhbGlkaXR5IHJldHVybmVkIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBBZGRpbmcgdGhlIEJhc2ljIENvbnN0cmFpbnRzIGV4dGVuc2lvbiAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfYmFzaWNfY29uc3RyYWludHMoICZjcnQsIG9wdC5pc19jYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0Lm1heF9wYXRobGVuICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICB4NTA5d3JpdGVfY3J0X3NldF9iYXNpY19jb250cmFpbnRzIHJldHVybmVkIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEFkZGluZyB0aGUgU3ViamVjdCBLZXkgSWRlbnRpZmllciAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXlfaWRlbnRpZmllciggJmNydCApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X2tleV9pZGVudGlmaWVyIHJldHVybmVkIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBBZGRpbmcgdGhlIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllciAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfYXV0aG9yaXR5X2tleV9pZGVudGlmaWVyKCAmY3J0ICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2F1dGhvcml0eV9rZXlfaWRlbnRpZmllciByZXR1cm5lZCAtMHglMDJ4IC0gJXNcblxuIiwgLXJldCwgYnVmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisKKyAgICBpZiggb3B0LmtleV91c2FnZSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBBZGRpbmcgdGhlIEtleSBVc2FnZSBleHRlbnNpb24gLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfa2V5X3VzYWdlKCAmY3J0LCBvcHQua2V5X3VzYWdlICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9rZXlfdXNhZ2UgcmV0dXJuZWQgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKyAgICB9CisKKyAgICBpZiggb3B0Lm5zX2NlcnRfdHlwZSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBBZGRpbmcgdGhlIE5TIENlcnQgVHlwZSBleHRlbnNpb24gLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfbnNfY2VydF90eXBlKCAmY3J0LCBvcHQubnNfY2VydF90eXBlICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9uc19jZXJ0X3R5cGUgcmV0dXJuZWQgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDEuMi4gV3JpdGluZyB0aGUgcmVxdWVzdAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFdyaXRpbmcgdGhlIGNlcnRpZmljYXRlLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSB3cml0ZV9jZXJ0aWZpY2F0ZSggJmNydCwgb3B0Lm91dHB1dF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICB3cml0ZV9jZXJ0aWZjYXRlIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5d3JpdGVfY3J0X2ZyZWUoICZjcnQgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZsb2FkZWRfc3ViamVjdF9rZXkgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZsb2FkZWRfaXNzdWVyX2tleSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZzZXJpYWwgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQyAmJiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgJiYKKyAgICAgICAgICBNQkVEVExTX0ZTX0lPICYmIE1CRURUTFNfRU5UUk9QWV9DICYmIE1CRURUTFNfQ1RSX0RSQkdfQyAmJgorICAgICAgICAgIE1CRURUTFNfRVJST1JfQyAmJiBNQkVEVExTX1BFTV9XUklURV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMveDUwOS9jcmxfYXBwLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMveDUwOS9jcmxfYXBwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwZDE5ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L2NybF9hcHAuYwpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqICBDUkwgcmVhZGluZyBhcHBsaWNhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX1JTQV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3JsLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIERGTF9GSUxFTkFNRSAgICAgICAgICAgICJjcmwucGVtIgorI2RlZmluZSBERkxfREVCVUdfTEVWRUwgICAgICAgICAwCisKKyNkZWZpbmUgVVNBR0UgXAorICAgICJcbiB1c2FnZTogY3JsX2FwcCBwYXJhbT08Pi4uLlxuIiAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIGFjY2VwdGFibGUgcGFyYW1ldGVyczpcbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGZpbGVuYW1lPSUlcyAgICAgICAgIGRlZmF1bHQ6IGNybC5wZW1cbiIgICAgICBcCisgICAgIlxuIgorCisvKgorICogZ2xvYmFsIG9wdGlvbnMKKyAqLworc3RydWN0IG9wdGlvbnMKK3sKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsgICAgICAgLyogZmlsZW5hbWUgb2YgdGhlIGNlcnRpZmljYXRlIGZpbGUgICAgICovCit9IG9wdDsKKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMDAwMF07CisgICAgbWJlZHRsc194NTA5X2NybCBjcmw7CisgICAgaW50IGk7CisgICAgY2hhciAqcCwgKnE7CisKKyAgICAvKgorICAgICAqIFNldCB0byBzYW5lIHZhbHVlcworICAgICAqLworICAgIG1iZWR0bHNfeDUwOV9jcmxfaW5pdCggJmNybCApOworCisgICAgaWYoIGFyZ2MgPT0gMCApCisgICAgeworICAgIHVzYWdlOgorICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG9wdC5maWxlbmFtZSAgICAgICAgICAgID0gREZMX0ZJTEVOQU1FOworCisgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgeworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGlmKCBzdHJjbXAoIHAsICJmaWxlbmFtZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5maWxlbmFtZSA9IHE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAxLjEuIExvYWQgdGhlIENSTAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gTG9hZGluZyB0aGUgQ1JMIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlKCAmY3JsLCBvcHQuZmlsZW5hbWUgKTsKKworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoICZjcmwgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDEuMiBQcmludCB0aGUgQ1JMCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ1JMIGluZm9ybWF0aW9uICAgIC4uLlxuIiApOworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcmxfaW5mbyggKGNoYXIgKikgYnVmLCBzaXplb2YoIGJ1ZiApIC0gMSwgIiAgICAgICIsICZjcmwgKTsKKyAgICBpZiggcmV0ID09IC0xICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3JsX2luZm8gcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggJmNybCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIlc1xuIiwgYnVmICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCAmY3JsICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX1JTQV9DICYmIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQyAmJgorICAgICAgICAgIE1CRURUTFNfRlNfSU8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L3JlcV9hcHAuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L3JlcV9hcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDEwYTUzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvcmVxX2FwcC5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogIENlcnRpZmljYXRlIHJlcXVlc3QgcmVhZGluZyBhcHBsaWNhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX1JTQV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3NyLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIERGTF9GSUxFTkFNRSAgICAgICAgICAgICJjZXJ0LnJlcSIKKyNkZWZpbmUgREZMX0RFQlVHX0xFVkVMICAgICAgICAgMAorCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiXG4gdXNhZ2U6IHJlcV9hcHAgcGFyYW09PD4uLi5cbiIgICAgICAgICAgICAgICAgICAgXAorICAgICJcbiBhY2NlcHRhYmxlIHBhcmFtZXRlcnM6XG4iICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBmaWxlbmFtZT0lJXMgICAgICAgICBkZWZhdWx0OiBjZXJ0LnJlcVxuIiAgICAgIFwKKyAgICAiXG4iCisKKy8qCisgKiBnbG9iYWwgb3B0aW9ucworICovCitzdHJ1Y3Qgb3B0aW9ucworeworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOyAgICAgICAvKiBmaWxlbmFtZSBvZiB0aGUgY2VydGlmaWNhdGUgcmVxdWVzdCAgKi8KK30gb3B0OworCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAwMDAwXTsKKyAgICBtYmVkdGxzX3g1MDlfY3NyIGNzcjsKKyAgICBpbnQgaTsKKyAgICBjaGFyICpwLCAqcTsKKworICAgIC8qCisgICAgICogU2V0IHRvIHNhbmUgdmFsdWVzCisgICAgICovCisgICAgbWJlZHRsc194NTA5X2Nzcl9pbml0KCAmY3NyICk7CisKKyAgICBpZiggYXJnYyA9PSAwICkKKyAgICB7CisgICAgdXNhZ2U6CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCBVU0FHRSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgb3B0LmZpbGVuYW1lICAgICAgICAgICAgPSBERkxfRklMRU5BTUU7CisKKyAgICBmb3IoIGkgPSAxOyBpIDwgYXJnYzsgaSsrICkKKyAgICB7CisgICAgICAgIHAgPSBhcmd2W2ldOworICAgICAgICBpZiggKCBxID0gc3RyY2hyKCBwLCAnPScgKSApID09IE5VTEwgKQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgKnErKyA9ICdcMCc7CisKKyAgICAgICAgaWYoIHN0cmNtcCggcCwgImZpbGVuYW1lIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmZpbGVuYW1lID0gcTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDEuMS4gTG9hZCB0aGUgQ1NSCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBMb2FkaW5nIHRoZSBDU1IgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlX2ZpbGUoICZjc3IsIG9wdC5maWxlbmFtZSApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggJmNzciApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMS4yIFByaW50IHRoZSBDU1IKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDU1IgaW5mb3JtYXRpb24gICAgLi4uXG4iICk7CisgICAgcmV0ID0gbWJlZHRsc194NTA5X2Nzcl9pbmZvKCAoY2hhciAqKSBidWYsIHNpemVvZiggYnVmICkgLSAxLCAiICAgICAgIiwgJmNzciApOworICAgIGlmKCByZXQgPT0gLTEgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jc3JfaW5mbyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCAmY3NyICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCBidWYgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoICZjc3IgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DICYmCisgICAgICAgICAgTUJFRFRMU19GU19JTyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvYXBpZG9jX2Z1bGwuc2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9hcGlkb2NfZnVsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZWJhYjEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvYXBpZG9jX2Z1bGwuc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKKyMgR2VuZXJhdGUgZG94eWdlbiBkb2N1bWVudGF0aW9uIHdpdGggYSBmdWxsIGNvbmZpZy5oICh0aGlzIGVuc3VyZXMgdGhhdCBldmVyeQorIyBhdmFpbGFibGUgZmxhZyBpcyBkb2N1bWVudGVkLCBhbmQgYXZvaWRzIHdhcm5pbmdzIGFib3V0IGRvY3VtZW50YXRpb24KKyMgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgI2RlZmluZSkuCisjCisjIC8hXCBUaGlzIG11c3Qgbm90IGJlIGEgTWFrZWZpbGUgdGFyZ2V0LCBhcyBpdCB3b3VsZCBjcmVhdGUgYSByYWNlIGNvbmRpdGlvbgorIyB3aGVuIG11bHRpcGxlIHRhcmdldHMgYXJlIGludm9rZWQgaW4gdGhlIHNhbWUgcGFyYWxsZWwgYnVpbGQuCisKK3NldCAtZXUKKworQ09ORklHX0g9J2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCcKKworaWYgWyAtciAkQ09ORklHX0ggXTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiJENPTkZJR19IIG5vdCBmb3VuZCIgPiYyCisgICAgZXhpdCAxCitmaQorCitDT05GSUdfQkFLPSR7Q09ORklHX0h9LmJhaworY3AgLXAgJENPTkZJR19IICRDT05GSUdfQkFLCisKK3NjcmlwdHMvY29uZmlnLnBsIHJlYWxmdWxsCittYWtlIGFwaWRvYworCittdiAkQ09ORklHX0JBSyAkQ09ORklHX0gKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2J1bXBfdmVyc2lvbi5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2J1bXBfdmVyc2lvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYzhiODAwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvYnVtcF92ZXJzaW9uLnNoCkBAIC0wLDAgKzEsMTQwIEBACisjIS9iaW4vYmFzaAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisjCisjIENvcHlyaWdodCAoYykgMjAxMi0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyBQdXJwb3NlCisjCisjIFNldHMgdGhlIHZlcnNpb24gbnVtYmVycyBpbiB0aGUgc291cmNlIGNvZGUgdG8gdGhvc2UgZ2l2ZW4uCisjCisjIFVzYWdlOiBidW1wX3ZlcnNpb24uc2ggWyAtLXZlcnNpb24gPHZlcnNpb24+IF0gWyAtLXNvLWNyeXB0byA8dmVyc2lvbj5dCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAtLXNvLXg1MDkgPHZlcnNpb24+IF0gWyAtLXNvLXRscyA8dmVyc2lvbj4gXQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgLXYgfCAtLXZlcmJvc2UgXSBbIC1oIHwgLS1oZWxwIF0KKyMKKworVkVSU0lPTj0iIgorU09WRVJTSU9OPSIiCisKKyMgUGFyc2UgYXJndW1lbnRzCisjCit1bnRpbCBbIC16ICIkMSIgXQorZG8KKyAgY2FzZSAiJDEiIGluCisgICAgLS12ZXJzaW9uKQorICAgICAgIyBWZXJzaW9uIHRvIHVzZQorICAgICAgc2hpZnQKKyAgICAgIFZFUlNJT049JDEKKyAgICAgIDs7CisgICAgLS1zby1jcnlwdG8pCisgICAgICBzaGlmdAorICAgICAgU09fQ1JZUFRPPSQxCisgICAgICA7OworICAgIC0tc28teDUwOSkKKyAgICAgIHNoaWZ0CisgICAgICBTT19YNTA5PSQxCisgICAgICA7OworICAgIC0tc28tdGxzKQorICAgICAgc2hpZnQKKyAgICAgIFNPX1RMUz0kMQorICAgICAgOzsKKyAgICAtdnwtLXZlcmJvc2UpCisgICAgICAjIEJlIHZlcmJvc2UKKyAgICAgIFZFUkJPU0U9IjEiCisgICAgICA7OworICAgIC1ofC0taGVscCkKKyAgICAgICMgcHJpbnQgaGVscAorICAgICAgZWNobyAiVXNhZ2U6ICQwIgorICAgICAgZWNobyAtZSAiICAtaHwtLWhlbHBcdFx0UHJpbnQgdGhpcyBoZWxwLiIKKyAgICAgIGVjaG8gLWUgIiAgLS12ZXJzaW9uIDx2ZXJzaW9uPlx0VmVyc2lvbiB0byBidW1wIHRvLiIKKyAgICAgIGVjaG8gLWUgIiAgLS1zby1jcnlwdG8gPHZlcnNpb24+XHRTTyB2ZXJzaW9uIHRvIGJ1bXAgbGlibWJlZGNyeXB0byB0by4iCisgICAgICBlY2hvIC1lICIgIC0tc28teDUwOSA8dmVyc2lvbj5cdFNPIHZlcnNpb24gdG8gYnVtcCBsaWJtYmVkeDUwOSB0by4iCisgICAgICBlY2hvIC1lICIgIC0tc28tdGxzIDx2ZXJzaW9uPlx0U08gdmVyc2lvbiB0byBidW1wIGxpYm1iZWR0bHMgdG8uIgorICAgICAgZWNobyAtZSAiICAtdnwtLXZlcmJvc2VcdFx0VmVyYm9zZS4iCisgICAgICBleGl0IDEKKyAgICAgIDs7CisgICAgKikKKyAgICAgICMgcHJpbnQgZXJyb3IKKyAgICAgIGVjaG8gIlVua25vd24gYXJndW1lbnQ6ICckMSciCisgICAgICBleGl0IDEKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgWyAiWCIgPSAiWCRWRVJTSU9OIiBdOwordGhlbgorICBlY2hvICJObyB2ZXJzaW9uIHNwZWNpZmllZC4gVW5hYmxlIHRvIGNvbnRpbnVlLiIKKyAgZXhpdCAxCitmaQorCitbICRWRVJCT1NFIF0gJiYgZWNobyAiQnVtcGluZyBWRVJTSU9OIGluIGxpYnJhcnkvQ01ha2VMaXN0cy50eHQiCitzZWQgLWUgInMvIFZFUlNJT04gWzAtOS5dXHsxLFx9LyBWRVJTSU9OICRWRVJTSU9OL2ciIDwgbGlicmFyeS9DTWFrZUxpc3RzLnR4dCA+IHRtcAorbXYgdG1wIGxpYnJhcnkvQ01ha2VMaXN0cy50eHQKKworaWYgWyAiWCIgIT0gIlgkU09fQ1JZUFRPIiBdOwordGhlbgorICBbICRWRVJCT1NFIF0gJiYgZWNobyAiQnVtcGluZyBTT1ZFUlNJT04gZm9yIGxpYm1iZWRjcnlwdG8gaW4gbGlicmFyeS9DTWFrZUxpc3RzLnR4dCIKKyAgc2VkIC1lICIvbWJlZGNyeXB0by8gcy8gU09WRVJTSU9OIFswLTldXHsxLFx9LyBTT1ZFUlNJT04gJFNPX0NSWVBUTy9nIiA8IGxpYnJhcnkvQ01ha2VMaXN0cy50eHQgPiB0bXAKKyAgbXYgdG1wIGxpYnJhcnkvQ01ha2VMaXN0cy50eHQKKworICBbICRWRVJCT1NFIF0gJiYgZWNobyAiQnVtcGluZyBTT1ZFUlNJT04gZm9yIGxpYm1iZWRjcnlwdG8gaW4gbGlicmFyeS9NYWtlZmlsZSIKKyAgc2VkIC1lICJzL1NPRVhUX0NSWVBUTz1zby5bMC05XVx7MSxcfS9TT0VYVF9DUllQVE89c28uJFNPX0NSWVBUTy9nIiA8IGxpYnJhcnkvTWFrZWZpbGUgPiB0bXAKKyAgbXYgdG1wIGxpYnJhcnkvTWFrZWZpbGUKK2ZpCisKK2lmIFsgIlgiICE9ICJYJFNPX1g1MDkiIF07Cit0aGVuCisgIFsgJFZFUkJPU0UgXSAmJiBlY2hvICJCdW1waW5nIFNPVkVSU0lPTiBmb3IgbGlibWJlZHg1MDkgaW4gbGlicmFyeS9DTWFrZUxpc3RzLnR4dCIKKyAgc2VkIC1lICIvbWJlZHg1MDkvIHMvIFNPVkVSU0lPTiBbMC05XVx7MSxcfS8gU09WRVJTSU9OICRTT19YNTA5L2ciIDwgbGlicmFyeS9DTWFrZUxpc3RzLnR4dCA+IHRtcAorICBtdiB0bXAgbGlicmFyeS9DTWFrZUxpc3RzLnR4dAorCisgIFsgJFZFUkJPU0UgXSAmJiBlY2hvICJCdW1waW5nIFNPVkVSU0lPTiBmb3IgbGlibWJlZHg1MDkgaW4gbGlicmFyeS9NYWtlZmlsZSIKKyAgc2VkIC1lICJzL1NPRVhUX1g1MDk9c28uWzAtOV1cezEsXH0vU09FWFRfWDUwOT1zby4kU09fWDUwOS9nIiA8IGxpYnJhcnkvTWFrZWZpbGUgPiB0bXAKKyAgbXYgdG1wIGxpYnJhcnkvTWFrZWZpbGUKK2ZpCisKK2lmIFsgIlgiICE9ICJYJFNPX1RMUyIgXTsKK3RoZW4KKyAgWyAkVkVSQk9TRSBdICYmIGVjaG8gIkJ1bXBpbmcgU09WRVJTSU9OIGZvciBsaWJtYmVkdGxzIGluIGxpYnJhcnkvQ01ha2VMaXN0cy50eHQiCisgIHNlZCAtZSAiL21iZWR0bHMvIHMvIFNPVkVSU0lPTiBbMC05XVx7MSxcfS8gU09WRVJTSU9OICRTT19UTFMvZyIgPCBsaWJyYXJ5L0NNYWtlTGlzdHMudHh0ID4gdG1wCisgIG12IHRtcCBsaWJyYXJ5L0NNYWtlTGlzdHMudHh0CisKKyAgWyAkVkVSQk9TRSBdICYmIGVjaG8gIkJ1bXBpbmcgU09WRVJTSU9OIGZvciBsaWJtYmVkdGxzIGluIGxpYnJhcnkvTWFrZWZpbGUiCisgIHNlZCAtZSAicy9TT0VYVF9UTFM9c28uWzAtOV1cezEsXH0vU09FWFRfVExTPXNvLiRTT19UTFMvZyIgPCBsaWJyYXJ5L01ha2VmaWxlID4gdG1wCisgIG12IHRtcCBsaWJyYXJ5L01ha2VmaWxlCitmaQorCitbICRWRVJCT1NFIF0gJiYgZWNobyAiQnVtcGluZyBWRVJTSU9OIGluIGluY2x1ZGUvbWJlZHRscy92ZXJzaW9uLmgiCityZWFkIE1BSk9SIE1JTk9SIFBBVENIIDw8PCQoSUZTPSIuIjsgZWNobyAkVkVSU0lPTikKK1ZFUlNJT05fTlI9IiQoIHByaW50ZiAiMHglMDJYJTAyWCUwMlgwMCIgJE1BSk9SICRNSU5PUiAkUEFUQ0ggKSIKK2NhdCBpbmNsdWRlL21iZWR0bHMvdmVyc2lvbi5oIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc2VkIC1lICJzL19WRVJTSU9OX01BSk9SIC5cezEsXH0vX1ZFUlNJT05fTUFKT1IgICRNQUpPUi8iIHwgICAgXAorICAgIHNlZCAtZSAicy9fVkVSU0lPTl9NSU5PUiAuXHsxLFx9L19WRVJTSU9OX01JTk9SICAkTUlOT1IvIiB8ICAgIFwKKyAgICBzZWQgLWUgInMvX1ZFUlNJT05fUEFUQ0ggLlx7MSxcfS9fVkVSU0lPTl9QQVRDSCAgJFBBVENILyIgfCAgICBcCisgICAgc2VkIC1lICJzL19WRVJTSU9OX05VTUJFUiAuXHsxLFx9L19WRVJTSU9OX05VTUJFUiAgICAgICAgICRWRVJTSU9OX05SLyIgfCAgICBcCisgICAgc2VkIC1lICJzL19WRVJTSU9OX1NUUklORyAuXHsxLFx9L19WRVJTSU9OX1NUUklORyAgICAgICAgIFwiJFZFUlNJT05cIi8iIHwgICAgXAorICAgIHNlZCAtZSAicy9fVkVSU0lPTl9TVFJJTkdfRlVMTCAuXHsxLFx9L19WRVJTSU9OX1NUUklOR19GVUxMICAgIFwibWJlZCBUTFMgJFZFUlNJT05cIi8iIFwKKyAgICA+IHRtcAorbXYgdG1wIGluY2x1ZGUvbWJlZHRscy92ZXJzaW9uLmgKKworWyAkVkVSQk9TRSBdICYmIGVjaG8gIkJ1bXBpbmcgdmVyc2lvbiBpbiB0ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV92ZXJzaW9uLmRhdGEiCitzZWQgLWUgInMvdmVyc2lvbjpcIi5cezEsXH0vdmVyc2lvbjpcIiRWRVJTSU9OXCIvZyIgPCB0ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV92ZXJzaW9uLmRhdGEgPiB0bXAKK212IHRtcCB0ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV92ZXJzaW9uLmRhdGEKKworWyAkVkVSQk9TRSBdICYmIGVjaG8gIkJ1bXBpbmcgUFJPSkVDVF9OQU1FIGluIGRveHlnZW4vbWJlZHRscy5kb3h5ZmlsZSBhbmQgZG94eWdlbi9pbnB1dC9kb2NfbWFpbnBhZ2UuaCIKK2ZvciBpIGluIGRveHlnZW4vbWJlZHRscy5kb3h5ZmlsZSBkb3h5Z2VuL2lucHV0L2RvY19tYWlucGFnZS5oOworZG8KKyAgc2VkIC1lICJzL21iZWQgVExTIHZbMC05XC5dXHsxLFx9L21iZWQgVExTIHYkVkVSU0lPTi9nIiA8ICRpID4gdG1wCisgIG12IHRtcCAkaQorZG9uZQorCitbICRWRVJCT1NFIF0gJiYgZWNobyAiUmUtZ2VuZXJhdGluZyBsaWJyYXJ5L2Vycm9yLmMiCitzY3JpcHRzL2dlbmVyYXRlX2Vycm9ycy5wbAorCitbICRWRVJCT1NFIF0gJiYgZWNobyAiUmUtZ2VuZXJhdGluZyBsaWJyYXJ5L3ZlcnNpb25fZmVhdHVyZXMuYyIKK3NjcmlwdHMvZ2VuZXJhdGVfZmVhdHVyZXMucGwKKworWyAkVkVSQk9TRSBdICYmIGVjaG8gIlJlLWdlbmVyYXRpbmcgdmlzdWFsYyBmaWxlcyIKK3NjcmlwdHMvZ2VuZXJhdGVfdmlzdWFsY19maWxlcy5wbAorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9jb25maWcucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9jb25maWcucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODkyMWE4NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2NvbmZpZy5wbApAQCAtMCwwICsxLDI1MiBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjIFB1cnBvc2UKKyMKKyMgQ29tbWVudHMgYW5kIHVuY29tbWVudHMgI2RlZmluZSBsaW5lcyBpbiB0aGUgZ2l2ZW4gaGVhZGVyIGZpbGUgYW5kIG9wdGlvbmFsbHkKKyMgc2V0cyB0aGVpciB2YWx1ZSBvciBjYW4gZ2V0IHRoZSB2YWx1ZS4gVGhpcyBpcyB0byBwcm92aWRlIHNjcmlwdGluZyBjb250cm9sIG9mCisjIHdoYXQgcHJlcHJvY2Vzc29yIHN5bWJvbHMsIGFuZCB0aGVyZWZvcmUgd2hhdCBidWlsZCB0aW1lIGNvbmZpZ3VyYXRpb24gZmxhZ3MKKyMgYXJlIHNldCBpbiB0aGUgJ2NvbmZpZy5oJyBmaWxlLgorIworIyBVc2FnZTogY29uZmlnLnBsIFstZiA8ZmlsZT4gfCAtLWZpbGUgPGZpbGU+XSBbLW8gfCAtLWZvcmNlXQorIyAgICAgICAgICAgICAgICAgICBbc2V0IDxzeW1ib2w+IDx2YWx1ZT4gfCB1bnNldCA8c3ltYm9sPiB8IGdldCA8c3ltYm9sPiB8CisjICAgICAgICAgICAgICAgICAgICAgICBmdWxsIHwgcmVhbGZ1bGxdCisjCisjIEZ1bGwgdXNhZ2UgZGVzY3JpcHRpb24gcHJvdmlkZWQgYmVsb3cuCisjCisjIFRoaW5ncyB0aGF0IHNob3VsZG4ndCBiZSBlbmFibGVkIHdpdGggImZ1bGwiLgorIworIyAgIE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkKKyMgICBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRAorIyAgIE1CRURUTFNfSEFWRV9TU0UyCisjICAgTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TCisjICAgTUJFRFRMU19FQ1BfRFBfTTIyMV9FTkFCTEVECisjICAgTUJFRFRMU19FQ1BfRFBfTTM4M19FTkFCTEVECisjICAgTUJFRFRMU19FQ1BfRFBfTTUxMV9FTkFCTEVECisjICAgTUJFRFRMU19OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUworIyAgIE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorIyAgIE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTCisjICAgTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMCisjICAgTUJFRFRMU19YNTA5X0FMTE9XX0VYVEVOU0lPTlNfTk9OX1YzCisjICAgTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgorIyAgICAgICAtIHRoaXMgY291bGQgYmUgZW5hYmxlZCBpZiB0aGUgcmVzcGVjdGl2ZSB0ZXN0cyB3ZXJlIGFkYXB0ZWQKKyMgICBNQkVEVExTX1pMSUJfU1VQUE9SVAorIyAgIE1CRURUTFNfUEtDUzExX0MKKyMgICBhbmQgYW55IHN5bWJvbCBiZWdpbm5pbmcgX0FMVAorIworCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OworCitteSAkY29uZmlnX2ZpbGUgPSAiaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oIjsKK215ICR1c2FnZSA9IDw8RU9VOworJDAgWy1mIDxmaWxlPiB8IC0tZmlsZSA8ZmlsZT5dIFstbyB8IC0tZm9yY2VdCisgICAgICAgICAgICAgICAgICAgW3NldCA8c3ltYm9sPiA8dmFsdWU+IHwgdW5zZXQgPHN5bWJvbD4gfCBnZXQgPHN5bWJvbD4gfAorICAgICAgICAgICAgICAgICAgICAgICAgZnVsbCB8IHJlYWxmdWxsXQorCitDb21tYW5kcworICAgIHNldCA8c3ltYm9sPiBbPHZhbHVlPl0gIC0gVW5jb21tZW50cyBvciBhZGRzIGEgI2RlZmluZSBmb3IgdGhlIDxzeW1ib2w+IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgb3B0aW9uYWxseSBtYWtpbmcgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIDx2YWx1ZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc3ltYm9sIGlzbid0IHByZXNlbnQgaW4gdGhlIGZpbGUgYW4gZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJldHVybmVkLgorICAgIHVuc2V0IDxzeW1ib2w+ICAgICAgICAgIC0gQ29tbWVudHMgb3V0IHRoZSAjZGVmaW5lIGZvciB0aGUgZ2l2ZW4gc3ltYm9sIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgZ2V0IDxzeW1ib2w+ICAgICAgICAgICAgLSBGaW5kcyB0aGUgI2RlZmluZSBmb3IgdGhlIGdpdmVuIHN5bWJvbCwgcmV0dXJuaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBleGl0Y29kZSBvZiAwIGlmIHRoZSBzeW1ib2wgaXMgZm91bmQsIGFuZCAtMSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90LiBUaGUgdmFsdWUgb2YgdGhlIHN5bWJvbCBpcyBvdXRwdXQgaWYgb25lIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICBmdWxsICAgICAgICAgICAgICAgICAgICAtIFVuY29tbWVudHMgYWxsICNkZWZpbmUncyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRpbmcgc29tZSByZXNlcnZlZCBzeW1ib2xzLCB1bnRpbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNb2R1bGUgY29uZmlndXJhdGlvbiBvcHRpb25zJyBzZWN0aW9uCisgICAgcmVhbGZ1bGwgICAgICAgICAgICAgICAgLSBVbmNvbW1lbnRzIGFsbCAjZGVmaW5lJ3Mgd2l0aCBubyBleGNsdXNpb25zCisKK09wdGlvbnMKKyAgICAtZiB8IC0tZmlsZSA8ZmlsZW5hbWU+ICAtIFRoZSBmaWxlIG9yIGZpbGUgcGF0aCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZWRpdC4gV2hlbiBvbWl0dGVkLCB0aGUgZm9sbG93aW5nIGRlZmF1bHQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb25maWdfZmlsZQorICAgIC1vIHwgLS1mb3JjZSAgICAgICAgICAgIC0gSWYgdGhlIHN5bWJvbCBpc24ndCBwcmVzZW50IGluIHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHdoZW4gc2V0dGluZyBpdCdzIHZhbHVlLCBhICNkZWZpbmUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuCisKK0VPVQorCitteSBAZXhjbHVkZWQgPSBxdygKK01CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkKK01CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVECitNQkVEVExTX0hBVkVfU1NFMgorTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TCitNQkVEVExTX0VDUF9EUF9NMjIxX0VOQUJMRUQKK01CRURUTFNfRUNQX0RQX00zODNfRU5BQkxFRAorTUJFRFRMU19FQ1BfRFBfTTUxMV9FTkFCTEVECitNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCitNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkKK01CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTCitNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwKK01CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMworTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgorTUJFRFRMU19aTElCX1NVUFBPUlQKK01CRURUTFNfUEtDUzExX0MKK19BTFRccyokCispOworCisjIFRoaW5ncyB0aGF0IHNob3VsZCBiZSBlbmFibGVkIGluICJmdWxsIiBldmVuIGlmIHRoZXkgbWF0Y2ggQGV4Y2x1ZGVkCitteSBAbm9uX2V4Y2x1ZGVkID0gcXcoCitQTEFURk9STV9bQS1aMC05XStfQUxUCispOworCisjIFByb2Nlc3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKworbXkgJGZvcmNlX29wdGlvbiA9IDA7CisKK215ICgkYXJnLCAkbmFtZSwgJHZhbHVlLCAkYWN0aW9uKTsKKword2hpbGUgKCRhcmcgPSBzaGlmdCkgeworCisgICAgIyBDaGVjayBpZiB0aGUgYXJndW1lbnQgaXMgYW4gb3B0aW9uCisgICAgaWYgKCRhcmcgZXEgIi1mIiB8fCAkYXJnIGVxICItLWZpbGUiKSB7CisgICAgICAgICRjb25maWdfZmlsZSA9IHNoaWZ0OworCisgICAgICAgIC1mICRjb25maWdfZmlsZSBvciBkaWUgIk5vIHN1Y2ggZmlsZTogJGNvbmZpZ19maWxlXG4iOworCisgICAgfQorICAgIGVsc2lmICgkYXJnIGVxICItbyIgfHwgJGFyZyBlcSAiLS1mb3JjZSIpIHsKKyAgICAgICAgJGZvcmNlX29wdGlvbiA9IDE7CisKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgIyAuLi5lbHNlIGFzc3VtZSBpdCdzIGEgY29tbWFuZAorICAgICAgICAkYWN0aW9uID0gJGFyZzsKKworICAgICAgICBpZiAoJGFjdGlvbiBlcSAiZnVsbCIgfHwgJGFjdGlvbiBlcSAicmVhbGZ1bGwiKSB7CisgICAgICAgICAgICAjIE5vIGFkZGl0aW9uYWwgcGFyYW1ldGVycworICAgICAgICAgICAgZGllICR1c2FnZSBpZiBAQVJHVjsKKworICAgICAgICB9CisgICAgICAgIGVsc2lmICgkYWN0aW9uIGVxICJ1bnNldCIgfHwgJGFjdGlvbiBlcSAiZ2V0IikgeworICAgICAgICAgICAgZGllICR1c2FnZSB1bmxlc3MgQEFSR1Y7CisgICAgICAgICAgICAkbmFtZSA9IHNoaWZ0OworCisgICAgICAgIH0KKyAgICAgICAgZWxzaWYgKCRhY3Rpb24gZXEgInNldCIpIHsKKyAgICAgICAgICAgIGRpZSAkdXNhZ2UgdW5sZXNzIEBBUkdWOworICAgICAgICAgICAgJG5hbWUgPSBzaGlmdDsKKyAgICAgICAgICAgICR2YWx1ZSA9IHNoaWZ0IGlmIEBBUkdWOworCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkaWUgIkNvbW1hbmQgJyRhY3Rpb24nIG5vdCByZWNvZ25pc2VkLlxuXG4iLiR1c2FnZTsKKyAgICAgICAgfQorICAgIH0KK30KKworIyBJZiBubyBjb21tYW5kIHdhcyBzcGVjaWZpZWQsIGV4aXQuLi4KK2lmICggbm90IGRlZmluZWQoJGFjdGlvbikgKXsgZGllICR1c2FnZTsgfQorCisjIENoZWNrIHRoZSBjb25maWcgZmlsZSBpcyBwcmVzZW50CitpZiAoISAtZiAkY29uZmlnX2ZpbGUpICB7CisKKyAgICBjaGRpciAnLi4nIG9yIGRpZTsKKworICAgICMgQ29uZmlybSB0aGlzIGlzIHRoZSBwcm9qZWN0IHJvb3QgZGlyZWN0b3J5IGFuZCB0cnkgYWdhaW4KKyAgICBpZiAoICEoLWQgJ3NjcmlwdHMnICYmIC1kICdpbmNsdWRlJyAmJiAtZCAnbGlicmFyeScgJiYgLWYgJGNvbmZpZ19maWxlKSApIHsKKyAgICAgICAgZGllICJJZiBubyBmaWxlIHNwZWNpZmllZCwgbXVzdCBiZSBydW4gZnJvbSB0aGUgcHJvamVjdCByb290IG9yIHNjcmlwdHMgZGlyZWN0b3J5LlxuIjsKKyAgICB9Cit9CisKKworIyBOb3cgcmVhZCB0aGUgZmlsZSBhbmQgcHJvY2VzcyB0aGUgY29udGVudHMKKworb3BlbiBteSAkY29uZmlnX3JlYWQsICc8JywgJGNvbmZpZ19maWxlIG9yIGRpZSAicmVhZCAkY29uZmlnX2ZpbGU6ICQhXG4iOworbXkgQGNvbmZpZ19saW5lcyA9IDwkY29uZmlnX3JlYWQ+OworY2xvc2UgJGNvbmZpZ19yZWFkOworCitteSAoJGV4Y2x1ZGVfcmUsICRub19leGNsdWRlX3JlKTsKK2lmICgkYWN0aW9uIGVxICJyZWFsZnVsbCIpIHsKKyAgICAkZXhjbHVkZV9yZSA9IHFyL14kLzsKKyAgICAkbm9fZXhjbHVkZV9yZSA9IHFyLy4vOworfSBlbHNlIHsKKyAgICAkZXhjbHVkZV9yZSA9IGpvaW4gJ3wnLCBAZXhjbHVkZWQ7CisgICAgJG5vX2V4Y2x1ZGVfcmUgPSBqb2luICd8JywgQG5vbl9leGNsdWRlZDsKK30KKworb3BlbiBteSAkY29uZmlnX3dyaXRlLCAnPicsICRjb25maWdfZmlsZSBvciBkaWUgIndyaXRlICRjb25maWdfZmlsZTogJCFcbiI7CisKK215ICRkb25lOworZm9yIG15ICRsaW5lIChAY29uZmlnX2xpbmVzKSB7CisgICAgaWYgKCRhY3Rpb24gZXEgImZ1bGwiIHx8ICRhY3Rpb24gZXEgInJlYWxmdWxsIikgeworICAgICAgICBpZiAoJGxpbmUgPX4gL25hbWUgU0VDVElPTjogTW9kdWxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy8pIHsKKyAgICAgICAgICAgICRkb25lID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghJGRvbmUgJiYgJGxpbmUgPX4gbSFeLy9ccz8jZGVmaW5lISAmJgorICAgICAgICAgICAgICAgICggJGxpbmUgIX4gLyRleGNsdWRlX3JlLyB8fCAkbGluZSA9fiAvJG5vX2V4Y2x1ZGVfcmUvICkgKSB7CisgICAgICAgICAgICAkbGluZSA9fiBzIV4vL1xzPyEhOworICAgICAgICB9CisgICAgICAgIGlmICghJGRvbmUgJiYgJGxpbmUgPX4gbSFeXHM/I2RlZmluZSEgJiYKKyAgICAgICAgICAgICAgICAhICggJGxpbmUgIX4gLyRleGNsdWRlX3JlLyB8fCAkbGluZSA9fiAvJG5vX2V4Y2x1ZGVfcmUvICkgKSB7CisgICAgICAgICAgICAkbGluZSA9fiBzIV4hLy8hOworICAgICAgICB9CisgICAgfSBlbHNpZiAoJGFjdGlvbiBlcSAidW5zZXQiKSB7CisgICAgICAgIGlmICghJGRvbmUgJiYgJGxpbmUgPX4gL15ccyojZGVmaW5lXHMqJG5hbWVcYi8pIHsKKyAgICAgICAgICAgICRsaW5lID0gJy8vJyAuICRsaW5lOworICAgICAgICAgICAgJGRvbmUgPSAxOworICAgICAgICB9CisgICAgfSBlbHNpZiAoISRkb25lICYmICRhY3Rpb24gZXEgInNldCIpIHsKKyAgICAgICAgaWYgKCRsaW5lID1+IG0hXig/Oi8vKT9ccyojZGVmaW5lXHMqJG5hbWVcYiEpIHsKKyAgICAgICAgICAgICRsaW5lID0gIiNkZWZpbmUgJG5hbWUiOworICAgICAgICAgICAgJGxpbmUgLj0gIiAkdmFsdWUiIGlmIGRlZmluZWQgJHZhbHVlICYmICR2YWx1ZSBuZSAiIjsKKyAgICAgICAgICAgICRsaW5lIC49ICJcbiI7CisgICAgICAgICAgICAkZG9uZSA9IDE7CisgICAgICAgIH0KKyAgICB9IGVsc2lmICghJGRvbmUgJiYgJGFjdGlvbiBlcSAiZ2V0IikgeworICAgICAgICBpZiAoJGxpbmUgPX4gL15ccyojZGVmaW5lXHMqJG5hbWVccyooLiopXHMqXGIvKSB7CisgICAgICAgICAgICAkdmFsdWUgPSAkMTsKKyAgICAgICAgICAgICRkb25lID0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaW50ICRjb25maWdfd3JpdGUgJGxpbmU7Cit9CisKKyMgRGlkIHRoZSBzZXQgY29tbWFuZCB3b3JrPworaWYgKCRhY3Rpb24gZXEgInNldCImJiAkZm9yY2Vfb3B0aW9uICYmICEkZG9uZSkgeworCisgICAgIyBJZiB0aGUgZm9yY2Ugb3B0aW9uIHdhcyBzZXQsIGFwcGVuZCB0aGUgc3ltYm9sIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUKKyAgICBteSAkbGluZSA9ICIjZGVmaW5lICRuYW1lIjsKKyAgICAkbGluZSAuPSAiICR2YWx1ZSIgaWYgZGVmaW5lZCAkdmFsdWUgJiYgJHZhbHVlIG5lICIiOworICAgICRsaW5lIC49ICJcbiI7CisgICAgJGRvbmUgPSAxOworCisgICAgcHJpbnQgJGNvbmZpZ193cml0ZSAkbGluZTsKK30KKworY2xvc2UgJGNvbmZpZ193cml0ZTsKKworaWYgKCRhY3Rpb24gZXEgImdldCIpIHsKKyAgICBpZigkZG9uZSkgeworICAgICAgICBpZiAoJHZhbHVlIG5lICcnKSB7CisgICAgICAgICAgICBwcmludCAkdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZXhpdCAwOworICAgIH0gZWxzZSB7CisgICAgICAgICMgSWYgdGhlIHN5bWJvbCB3YXMgbm90IGZvdW5kLCByZXR1cm4gYW4gZXJyb3IKKyAgICAgICAgZXhpdCAtMTsKKyAgICB9Cit9CisKK2lmICgkYWN0aW9uIGVxICJmdWxsIiAmJiAhJGRvbmUpIHsKKyAgICBkaWUgIkNvbmZpZ3VyYXRpb24gc2VjdGlvbiB3YXMgbm90IGZvdW5kIGluICRjb25maWdfZmlsZVxuIjsKKworfQorCitpZiAoJGFjdGlvbiBuZSAiZnVsbCIgJiYgJGFjdGlvbiBuZSAidW5zZXQiICYmICEkZG9uZSkgeworICAgIGRpZSAiQSAjZGVmaW5lIGZvciB0aGUgc3ltYm9sICRuYW1lIHdhcyBub3QgZm91bmQgaW4gJGNvbmZpZ19maWxlXG4iOworfQorCitfX0VORF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL2Vycm9yLmZtdCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvZXJyb3IuZm10Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwODc0MmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL2Vycm9yLmZtdApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqICBFcnJvciBtZXNzYWdlIGluZm9ybWF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykgfHwgZGVmaW5lZChNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZKQorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiBzbnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3RpbWVfdCAgIHRpbWVfdAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK0hFQURFUl9JTkNMVURFRAorCit2b2lkIG1iZWR0bHNfc3RyZXJyb3IoIGludCByZXQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApCit7CisgICAgc2l6ZV90IGxlbjsKKyAgICBpbnQgdXNlX3JldDsKKworICAgIGlmKCBidWZsZW4gPT0gMCApCisgICAgICAgIHJldHVybjsKKworICAgIG1lbXNldCggYnVmLCAweDAwLCBidWZsZW4gKTsKKworICAgIGlmKCByZXQgPCAwICkKKyAgICAgICAgcmV0ID0gLXJldDsKKworICAgIGlmKCByZXQgJiAweEZGODAgKQorICAgIHsKKyAgICAgICAgdXNlX3JldCA9IHJldCAmIDB4RkY4MDsKKworICAgICAgICAvLyBIaWdoIGxldmVsIGVycm9yIGNvZGVzCisgICAgICAgIC8vCisgICAgICAgIC8vIEJFR0lOIGdlbmVyYXRlZCBjb2RlCitISUdIX0xFVkVMX0NPREVfQ0hFQ0tTCisgICAgICAgIC8vIEVORCBnZW5lcmF0ZWQgY29kZQorCisgICAgICAgIGlmKCBzdHJsZW4oIGJ1ZiApID09IDAgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJVTktOT1dOIEVSUk9SIENPREUgKCUwNFgpIiwgdXNlX3JldCApOworICAgIH0KKworICAgIHVzZV9yZXQgPSByZXQgJiB+MHhGRjgwOworCisgICAgaWYoIHVzZV9yZXQgPT0gMCApCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIGhpZ2ggbGV2ZWwgY29kZSBpcyBwcmVzZW50LCBtYWtlIGEgY29uY2F0ZW5hdGlvbiBiZXR3ZWVuIGJvdGgKKyAgICAvLyBlcnJvciBzdHJpbmdzLgorICAgIC8vCisgICAgbGVuID0gc3RybGVuKCBidWYgKTsKKworICAgIGlmKCBsZW4gPiAwICkKKyAgICB7CisgICAgICAgIGlmKCBidWZsZW4gLSBsZW4gPCA1ICkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYgKyBsZW4sIGJ1ZmxlbiAtIGxlbiwgIiA6ICIgKTsKKworICAgICAgICBidWYgKz0gbGVuICsgMzsKKyAgICAgICAgYnVmbGVuIC09IGxlbiArIDM7CisgICAgfQorCisgICAgLy8gTG93IGxldmVsIGVycm9yIGNvZGVzCisgICAgLy8KKyAgICAvLyBCRUdJTiBnZW5lcmF0ZWQgY29kZQorTE9XX0xFVkVMX0NPREVfQ0hFQ0tTCisgICAgLy8gRU5EIGdlbmVyYXRlZCBjb2RlCisKKyAgICBpZiggc3RybGVuKCBidWYgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJVTktOT1dOIEVSUk9SIENPREUgKCUwNFgpIiwgdXNlX3JldCApOworfQorCisjZWxzZSAvKiBNQkVEVExTX0VSUk9SX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWSkKKworLyoKKyAqIFByb3ZpZGUgYW4gbm9uLWZ1bmN0aW9uIGluIGNhc2UgTUJFRFRMU19FUlJPUl9DIGlzIG5vdCBkZWZpbmVkCisgKi8KK3ZvaWQgbWJlZHRsc19zdHJlcnJvciggaW50IHJldCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuICkKK3sKKyAgICAoKHZvaWQpIHJldCk7CisKKyAgICBpZiggYnVmbGVuID4gMCApCisgICAgICAgIGJ1ZlswXSA9ICdcMCc7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0VSUk9SX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvcmVuYW1lLTEuMy0yLjAudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy9yZW5hbWUtMS4zLTIuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3ZjZiZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvcmVuYW1lLTEuMy0yLjAudHh0CkBAIC0wLDAgKzEsMjE3NSBAQAorQUVTX0RFQ1JZUFQgTUJFRFRMU19BRVNfREVDUllQVAorQUVTX0VOQ1JZUFQgTUJFRFRMU19BRVNfRU5DUllQVAorQVNOMV9CSVRfU1RSSU5HIE1CRURUTFNfQVNOMV9CSVRfU1RSSU5HCitBU04xX0JNUF9TVFJJTkcgTUJFRFRMU19BU04xX0JNUF9TVFJJTkcKK0FTTjFfQk9PTEVBTiBNQkVEVExTX0FTTjFfQk9PTEVBTgorQVNOMV9DSEtfQUREIE1CRURUTFNfQVNOMV9DSEtfQURECitBU04xX0NPTlNUUlVDVEVEIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRAorQVNOMV9DT05URVhUX1NQRUNJRklDIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDCitBU04xX0dFTkVSQUxJWkVEX1RJTUUgTUJFRFRMU19BU04xX0dFTkVSQUxJWkVEX1RJTUUKK0FTTjFfSUE1X1NUUklORyBNQkVEVExTX0FTTjFfSUE1X1NUUklORworQVNOMV9JTlRFR0VSIE1CRURUTFNfQVNOMV9JTlRFR0VSCitBU04xX05VTEwgTUJFRFRMU19BU04xX05VTEwKK0FTTjFfT0NURVRfU1RSSU5HIE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcKK0FTTjFfT0lEIE1CRURUTFNfQVNOMV9PSUQKK0FTTjFfUFJJTUlUSVZFIE1CRURUTFNfQVNOMV9QUklNSVRJVkUKK0FTTjFfUFJJTlRBQkxFX1NUUklORyBNQkVEVExTX0FTTjFfUFJJTlRBQkxFX1NUUklORworQVNOMV9TRVFVRU5DRSBNQkVEVExTX0FTTjFfU0VRVUVOQ0UKK0FTTjFfU0VUIE1CRURUTFNfQVNOMV9TRVQKK0FTTjFfVDYxX1NUUklORyBNQkVEVExTX0FTTjFfVDYxX1NUUklORworQVNOMV9VTklWRVJTQUxfU1RSSU5HIE1CRURUTFNfQVNOMV9VTklWRVJTQUxfU1RSSU5HCitBU04xX1VUQ19USU1FIE1CRURUTFNfQVNOMV9VVENfVElNRQorQVNOMV9VVEY4X1NUUklORyBNQkVEVExTX0FTTjFfVVRGOF9TVFJJTkcKK0JBRENFUlRfQ05fTUlTTUFUQ0ggTUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0gKK0JBRENFUlRfRVhQSVJFRCBNQkVEVExTX1g1MDlfQkFEQ0VSVF9FWFBJUkVECitCQURDRVJUX0VYVF9LRVlfVVNBR0UgTUJFRFRMU19YNTA5X0JBRENFUlRfRVhUX0tFWV9VU0FHRQorQkFEQ0VSVF9GVVRVUkUgTUJFRFRMU19YNTA5X0JBRENFUlRfRlVUVVJFCitCQURDRVJUX0tFWV9VU0FHRSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9LRVlfVVNBR0UKK0JBRENFUlRfTUlTU0lORyBNQkVEVExTX1g1MDlfQkFEQ0VSVF9NSVNTSU5HCitCQURDRVJUX05PVF9UUlVTVEVEIE1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVECitCQURDRVJUX05TX0NFUlRfVFlQRSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9OU19DRVJUX1RZUEUKK0JBRENFUlRfT1RIRVIgTUJFRFRMU19YNTA5X0JBRENFUlRfT1RIRVIKK0JBRENFUlRfUkVWT0tFRCBNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VECitCQURDRVJUX1NLSVBfVkVSSUZZIE1CRURUTFNfWDUwOV9CQURDRVJUX1NLSVBfVkVSSUZZCitCQURDUkxfRVhQSVJFRCBNQkVEVExTX1g1MDlfQkFEQ1JMX0VYUElSRUQKK0JBRENSTF9GVVRVUkUgTUJFRFRMU19YNTA5X0JBRENSTF9GVVRVUkUKK0JBRENSTF9OT1RfVFJVU1RFRCBNQkVEVExTX1g1MDlfQkFEQ1JMX05PVF9UUlVTVEVECitCTE9XRklTSF9CTE9DS1NJWkUgTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkUKK0JMT1dGSVNIX0RFQ1JZUFQgTUJFRFRMU19CTE9XRklTSF9ERUNSWVBUCitCTE9XRklTSF9FTkNSWVBUIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVAorQkxPV0ZJU0hfTUFYX0tFWSBNQkVEVExTX0JMT1dGSVNIX01BWF9LRVlfQklUUworQkxPV0ZJU0hfTUlOX0tFWSBNQkVEVExTX0JMT1dGSVNIX01JTl9LRVlfQklUUworQkxPV0ZJU0hfUk9VTkRTIE1CRURUTFNfQkxPV0ZJU0hfUk9VTkRTCitDQU1FTExJQV9ERUNSWVBUIE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVAorQ0FNRUxMSUFfRU5DUllQVCBNQkVEVExTX0NBTUVMTElBX0VOQ1JZUFQKK0NPTExFQ1RfU0laRSBNQkVEVExTX0hBVkVHRV9DT0xMRUNUX1NJWkUKK0NUUl9EUkJHX0JMT0NLU0laRSBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRQorQ1RSX0RSQkdfRU5UUk9QWV9MRU4gTUJFRFRMU19DVFJfRFJCR19FTlRST1BZX0xFTgorQ1RSX0RSQkdfS0VZQklUUyBNQkVEVExTX0NUUl9EUkJHX0tFWUJJVFMKK0NUUl9EUkJHX0tFWVNJWkUgTUJFRFRMU19DVFJfRFJCR19LRVlTSVpFCitDVFJfRFJCR19NQVhfSU5QVVQgTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQKK0NUUl9EUkJHX01BWF9SRVFVRVNUIE1CRURUTFNfQ1RSX0RSQkdfTUFYX1JFUVVFU1QKK0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUIE1CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQKK0NUUl9EUkJHX1BSX09GRiBNQkVEVExTX0NUUl9EUkJHX1BSX09GRgorQ1RSX0RSQkdfUFJfT04gTUJFRFRMU19DVFJfRFJCR19QUl9PTgorQ1RSX0RSQkdfUkVTRUVEX0lOVEVSVkFMIE1CRURUTFNfQ1RSX0RSQkdfUkVTRUVEX0lOVEVSVkFMCitDVFJfRFJCR19TRUVETEVOIE1CRURUTFNfQ1RSX0RSQkdfU0VFRExFTgorREVQUkVDQVRFRCBNQkVEVExTX0RFUFJFQ0FURUQKK0RFU19ERUNSWVBUIE1CRURUTFNfREVTX0RFQ1JZUFQKK0RFU19FTkNSWVBUIE1CRURUTFNfREVTX0VOQ1JZUFQKK0RFU19LRVlfU0laRSBNQkVEVExTX0RFU19LRVlfU0laRQorRU5UUk9QWV9CTE9DS19TSVpFIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFCitFTlRST1BZX01BWF9HQVRIRVIgTUJFRFRMU19FTlRST1BZX01BWF9HQVRIRVIKK0VOVFJPUFlfTUFYX1NFRURfU0laRSBNQkVEVExTX0VOVFJPUFlfTUFYX1NFRURfU0laRQorRU5UUk9QWV9NQVhfU09VUkNFUyBNQkVEVExTX0VOVFJPUFlfTUFYX1NPVVJDRVMKK0VOVFJPUFlfTUlOX0hBUkRDTE9DSyBNQkVEVExTX0VOVFJPUFlfTUlOX0hBUkRDTE9DSworRU5UUk9QWV9NSU5fSEFWRUdFIE1CRURUTFNfRU5UUk9QWV9NSU5fSEFWRUdFCitFTlRST1BZX01JTl9QTEFURk9STSBNQkVEVExTX0VOVFJPUFlfTUlOX1BMQVRGT1JNCitFTlRST1BZX1NPVVJDRV9NQU5VQUwgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9NQU5VQUwKK0VYVF9BVVRIT1JJVFlfS0VZX0lERU5USUZJRVIgTUJFRFRMU19YNTA5X0VYVF9BVVRIT1JJVFlfS0VZX0lERU5USUZJRVIKK0VYVF9CQVNJQ19DT05TVFJBSU5UUyBNQkVEVExTX1g1MDlfRVhUX0JBU0lDX0NPTlNUUkFJTlRTCitFWFRfQ0VSVElGSUNBVEVfUE9MSUNJRVMgTUJFRFRMU19YNTA5X0VYVF9DRVJUSUZJQ0FURV9QT0xJQ0lFUworRVhUX0NSTF9ESVNUUklCVVRJT05fUE9JTlRTIE1CRURUTFNfWDUwOV9FWFRfQ1JMX0RJU1RSSUJVVElPTl9QT0lOVFMKK0VYVF9FWFRFTkRFRF9LRVlfVVNBR0UgTUJFRFRMU19YNTA5X0VYVF9FWFRFTkRFRF9LRVlfVVNBR0UKK0VYVF9GUkVTSEVTVF9DUkwgTUJFRFRMU19YNTA5X0VYVF9GUkVTSEVTVF9DUkwKK0VYVF9JTklISUJJVF9BTllQT0xJQ1kgTUJFRFRMU19YNTA5X0VYVF9JTklISUJJVF9BTllQT0xJQ1kKK0VYVF9JU1NVRVJfQUxUX05BTUUgTUJFRFRMU19YNTA5X0VYVF9JU1NVRVJfQUxUX05BTUUKK0VYVF9LRVlfVVNBR0UgTUJFRFRMU19YNTA5X0VYVF9LRVlfVVNBR0UKK0VYVF9OQU1FX0NPTlNUUkFJTlRTIE1CRURUTFNfWDUwOV9FWFRfTkFNRV9DT05TVFJBSU5UUworRVhUX05TX0NFUlRfVFlQRSBNQkVEVExTX1g1MDlfRVhUX05TX0NFUlRfVFlQRQorRVhUX1BPTElDWV9DT05TVFJBSU5UUyBNQkVEVExTX1g1MDlfRVhUX1BPTElDWV9DT05TVFJBSU5UUworRVhUX1BPTElDWV9NQVBQSU5HUyBNQkVEVExTX1g1MDlfRVhUX1BPTElDWV9NQVBQSU5HUworRVhUX1NVQkpFQ1RfQUxUX05BTUUgTUJFRFRMU19YNTA5X0VYVF9TVUJKRUNUX0FMVF9OQU1FCitFWFRfU1VCSkVDVF9ESVJFQ1RPUllfQVRUUlMgTUJFRFRMU19YNTA5X0VYVF9TVUJKRUNUX0RJUkVDVE9SWV9BVFRSUworRVhUX1NVQkpFQ1RfS0VZX0lERU5USUZJRVIgTUJFRFRMU19YNTA5X0VYVF9TVUJKRUNUX0tFWV9JREVOVElGSUVSCitHQ01fREVDUllQVCBNQkVEVExTX0dDTV9ERUNSWVBUCitHQ01fRU5DUllQVCBNQkVEVExTX0dDTV9FTkNSWVBUCitLVV9DUkxfU0lHTiBNQkVEVExTX1g1MDlfS1VfQ1JMX1NJR04KK0tVX0RBVEFfRU5DSVBIRVJNRU5UIE1CRURUTFNfWDUwOV9LVV9EQVRBX0VOQ0lQSEVSTUVOVAorS1VfRElHSVRBTF9TSUdOQVRVUkUgTUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFCitLVV9LRVlfQUdSRUVNRU5UIE1CRURUTFNfWDUwOV9LVV9LRVlfQUdSRUVNRU5UCitLVV9LRVlfQ0VSVF9TSUdOIE1CRURUTFNfWDUwOV9LVV9LRVlfQ0VSVF9TSUdOCitLVV9LRVlfRU5DSVBIRVJNRU5UIE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UCitLVV9OT05fUkVQVURJQVRJT04gTUJFRFRMU19YNTA5X0tVX05PTl9SRVBVRElBVElPTgorTE5fMl9ESVZfTE5fMTBfU0NBTEUxMDAgTUJFRFRMU19MTl8yX0RJVl9MTl8xMF9TQ0FMRTEwMAorTURfQ09OVEVYVF9UX0lOSVQgTUJFRFRMU19NRF9DT05URVhUX1RfSU5JVAorTUVNT1JZX1ZFUklGWV9BTExPQyBNQkVEVExTX01FTU9SWV9WRVJJRllfQUxMT0MKK01FTU9SWV9WRVJJRllfQUxXQVlTIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9BTFdBWVMKK01FTU9SWV9WRVJJRllfRlJFRSBNQkVEVExTX01FTU9SWV9WRVJJRllfRlJFRQorTUVNT1JZX1ZFUklGWV9OT05FIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9OT05FCitNUElfQ0hLIE1CRURUTFNfTVBJX0NISworTkVUX1BST1RPX1RDUCBNQkVEVExTX05FVF9QUk9UT19UQ1AKK05FVF9QUk9UT19VRFAgTUJFRFRMU19ORVRfUFJPVE9fVURQCitOU19DRVJUX1RZUEVfRU1BSUwgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTAorTlNfQ0VSVF9UWVBFX0VNQUlMX0NBIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfRU1BSUxfQ0EKK05TX0NFUlRfVFlQRV9PQkpFQ1RfU0lHTklORyBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX09CSkVDVF9TSUdOSU5HCitOU19DRVJUX1RZUEVfT0JKRUNUX1NJR05JTkdfQ0EgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9PQkpFQ1RfU0lHTklOR19DQQorTlNfQ0VSVF9UWVBFX1JFU0VSVkVEIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfUkVTRVJWRUQKK05TX0NFUlRfVFlQRV9TU0xfQ0EgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfQ0EKK05TX0NFUlRfVFlQRV9TU0xfQ0xJRU5UIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX0NMSUVOVAorTlNfQ0VSVF9UWVBFX1NTTF9TRVJWRVIgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfU0VSVkVSCitPSURfQU5TSV9YOV82MiBNQkVEVExTX09JRF9BTlNJX1g5XzYyCitPSURfQU5TSV9YOV82Ml9GSUVMRF9UWVBFIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfRklFTERfVFlQRQorT0lEX0FOU0lfWDlfNjJfUFJJTUVfRklFTEQgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9QUklNRV9GSUVMRAorT0lEX0FOU0lfWDlfNjJfU0lHIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfU0lHCitPSURfQU5TSV9YOV82Ml9TSUdfU0hBMiBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1NJR19TSEEyCitPSURfQU5ZX0VYVEVOREVEX0tFWV9VU0FHRSBNQkVEVExTX09JRF9BTllfRVhURU5ERURfS0VZX1VTQUdFCitPSURfQVQgTUJFRFRMU19PSURfQVQKK09JRF9BVF9DTiBNQkVEVExTX09JRF9BVF9DTgorT0lEX0FUX0NPVU5UUlkgTUJFRFRMU19PSURfQVRfQ09VTlRSWQorT0lEX0FUX0ROX1FVQUxJRklFUiBNQkVEVExTX09JRF9BVF9ETl9RVUFMSUZJRVIKK09JRF9BVF9HRU5FUkFUSU9OX1FVQUxJRklFUiBNQkVEVExTX09JRF9BVF9HRU5FUkFUSU9OX1FVQUxJRklFUgorT0lEX0FUX0dJVkVOX05BTUUgTUJFRFRMU19PSURfQVRfR0lWRU5fTkFNRQorT0lEX0FUX0lOSVRJQUxTIE1CRURUTFNfT0lEX0FUX0lOSVRJQUxTCitPSURfQVRfTE9DQUxJVFkgTUJFRFRMU19PSURfQVRfTE9DQUxJVFkKK09JRF9BVF9PUkdBTklaQVRJT04gTUJFRFRMU19PSURfQVRfT1JHQU5JWkFUSU9OCitPSURfQVRfT1JHX1VOSVQgTUJFRFRMU19PSURfQVRfT1JHX1VOSVQKK09JRF9BVF9QT1NUQUxfQUREUkVTUyBNQkVEVExTX09JRF9BVF9QT1NUQUxfQUREUkVTUworT0lEX0FUX1BPU1RBTF9DT0RFIE1CRURUTFNfT0lEX0FUX1BPU1RBTF9DT0RFCitPSURfQVRfUFNFVURPTllNIE1CRURUTFNfT0lEX0FUX1BTRVVET05ZTQorT0lEX0FUX1NFUklBTF9OVU1CRVIgTUJFRFRMU19PSURfQVRfU0VSSUFMX05VTUJFUgorT0lEX0FUX1NUQVRFIE1CRURUTFNfT0lEX0FUX1NUQVRFCitPSURfQVRfU1VSX05BTUUgTUJFRFRMU19PSURfQVRfU1VSX05BTUUKK09JRF9BVF9USVRMRSBNQkVEVExTX09JRF9BVF9USVRMRQorT0lEX0FUX1VOSVFVRV9JREVOVElGSUVSIE1CRURUTFNfT0lEX0FUX1VOSVFVRV9JREVOVElGSUVSCitPSURfQVVUSE9SSVRZX0tFWV9JREVOVElGSUVSIE1CRURUTFNfT0lEX0FVVEhPUklUWV9LRVlfSURFTlRJRklFUgorT0lEX0JBU0lDX0NPTlNUUkFJTlRTIE1CRURUTFNfT0lEX0JBU0lDX0NPTlNUUkFJTlRTCitPSURfQ0VSVElDT00gTUJFRFRMU19PSURfQ0VSVElDT00KK09JRF9DRVJUSUZJQ0FURV9QT0xJQ0lFUyBNQkVEVExTX09JRF9DRVJUSUZJQ0FURV9QT0xJQ0lFUworT0lEX0NMSUVOVF9BVVRIIE1CRURUTFNfT0lEX0NMSUVOVF9BVVRICitPSURfQ01QIE1CRURUTFNfT0lEX0NNUAorT0lEX0NPREVfU0lHTklORyBNQkVEVExTX09JRF9DT0RFX1NJR05JTkcKK09JRF9DT1VOVFJZX1VTIE1CRURUTFNfT0lEX0NPVU5UUllfVVMKK09JRF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUyBNQkVEVExTX09JRF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUworT0lEX0NSTF9OVU1CRVIgTUJFRFRMU19PSURfQ1JMX05VTUJFUgorT0lEX0RFU19DQkMgTUJFRFRMU19PSURfREVTX0NCQworT0lEX0RFU19FREUzX0NCQyBNQkVEVExTX09JRF9ERVNfRURFM19DQkMKK09JRF9ESUdFU1RfQUxHX01EMiBNQkVEVExTX09JRF9ESUdFU1RfQUxHX01EMgorT0lEX0RJR0VTVF9BTEdfTUQ0IE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfTUQ0CitPSURfRElHRVNUX0FMR19NRDUgTUJFRFRMU19PSURfRElHRVNUX0FMR19NRDUKK09JRF9ESUdFU1RfQUxHX1NIQTEgTUJFRFRMU19PSURfRElHRVNUX0FMR19TSEExCitPSURfRElHRVNUX0FMR19TSEEyMjQgTUJFRFRMU19PSURfRElHRVNUX0FMR19TSEEyMjQKK09JRF9ESUdFU1RfQUxHX1NIQTI1NiBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTI1NgorT0lEX0RJR0VTVF9BTEdfU0hBMzg0IE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBMzg0CitPSURfRElHRVNUX0FMR19TSEE1MTIgTUJFRFRMU19PSURfRElHRVNUX0FMR19TSEE1MTIKK09JRF9ET01BSU5fQ09NUE9ORU5UIE1CRURUTFNfT0lEX0RPTUFJTl9DT01QT05FTlQKK09JRF9FQ0RTQV9TSEExIE1CRURUTFNfT0lEX0VDRFNBX1NIQTEKK09JRF9FQ0RTQV9TSEEyMjQgTUJFRFRMU19PSURfRUNEU0FfU0hBMjI0CitPSURfRUNEU0FfU0hBMjU2IE1CRURUTFNfT0lEX0VDRFNBX1NIQTI1NgorT0lEX0VDRFNBX1NIQTM4NCBNQkVEVExTX09JRF9FQ0RTQV9TSEEzODQKK09JRF9FQ0RTQV9TSEE1MTIgTUJFRFRMU19PSURfRUNEU0FfU0hBNTEyCitPSURfRUNfQUxHX0VDREggTUJFRFRMU19PSURfRUNfQUxHX0VDREgKK09JRF9FQ19BTEdfVU5SRVNUUklDVEVEIE1CRURUTFNfT0lEX0VDX0FMR19VTlJFU1RSSUNURUQKK09JRF9FQ19CUkFJTlBPT0xfVjEgTUJFRFRMU19PSURfRUNfQlJBSU5QT09MX1YxCitPSURfRUNfR1JQX0JQMjU2UjEgTUJFRFRMU19PSURfRUNfR1JQX0JQMjU2UjEKK09JRF9FQ19HUlBfQlAzODRSMSBNQkVEVExTX09JRF9FQ19HUlBfQlAzODRSMQorT0lEX0VDX0dSUF9CUDUxMlIxIE1CRURUTFNfT0lEX0VDX0dSUF9CUDUxMlIxCitPSURfRUNfR1JQX1NFQ1AxOTJLMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDE5MksxCitPSURfRUNfR1JQX1NFQ1AxOTJSMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDE5MlIxCitPSURfRUNfR1JQX1NFQ1AyMjRLMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDIyNEsxCitPSURfRUNfR1JQX1NFQ1AyMjRSMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDIyNFIxCitPSURfRUNfR1JQX1NFQ1AyNTZLMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDI1NksxCitPSURfRUNfR1JQX1NFQ1AyNTZSMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDI1NlIxCitPSURfRUNfR1JQX1NFQ1AzODRSMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDM4NFIxCitPSURfRUNfR1JQX1NFQ1A1MjFSMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDUyMVIxCitPSURfRU1BSUxfUFJPVEVDVElPTiBNQkVEVExTX09JRF9FTUFJTF9QUk9URUNUSU9OCitPSURfRVhURU5ERURfS0VZX1VTQUdFIE1CRURUTFNfT0lEX0VYVEVOREVEX0tFWV9VU0FHRQorT0lEX0ZSRVNIRVNUX0NSTCBNQkVEVExTX09JRF9GUkVTSEVTVF9DUkwKK09JRF9HT1YgTUJFRFRMU19PSURfR09WCitPSURfSE1BQ19TSEExIE1CRURUTFNfT0lEX0hNQUNfU0hBMQorT0lEX0lEX0NFIE1CRURUTFNfT0lEX0lEX0NFCitPSURfSU5JSElCSVRfQU5ZUE9MSUNZIE1CRURUTFNfT0lEX0lOSUhJQklUX0FOWVBPTElDWQorT0lEX0lTT19DQ0lUVF9EUyBNQkVEVExTX09JRF9JU09fQ0NJVFRfRFMKK09JRF9JU09fSURFTlRJRklFRF9PUkcgTUJFRFRMU19PSURfSVNPX0lERU5USUZJRURfT1JHCitPSURfSVNPX0lUVV9DT1VOVFJZIE1CRURUTFNfT0lEX0lTT19JVFVfQ09VTlRSWQorT0lEX0lTT19JVFVfVVNfT1JHIE1CRURUTFNfT0lEX0lTT19JVFVfVVNfT1JHCitPSURfSVNPX01FTUJFUl9CT0RJRVMgTUJFRFRMU19PSURfSVNPX01FTUJFUl9CT0RJRVMKK09JRF9JU1NVRVJfQUxUX05BTUUgTUJFRFRMU19PSURfSVNTVUVSX0FMVF9OQU1FCitPSURfS0VZX1VTQUdFIE1CRURUTFNfT0lEX0tFWV9VU0FHRQorT0lEX0tQIE1CRURUTFNfT0lEX0tQCitPSURfTUdGMSBNQkVEVExTX09JRF9NR0YxCitPSURfTkFNRV9DT05TVFJBSU5UUyBNQkVEVExTX09JRF9OQU1FX0NPTlNUUkFJTlRTCitPSURfTkVUU0NBUEUgTUJFRFRMU19PSURfTkVUU0NBUEUKK09JRF9OU19CQVNFX1VSTCBNQkVEVExTX09JRF9OU19CQVNFX1VSTAorT0lEX05TX0NBX1BPTElDWV9VUkwgTUJFRFRMU19PSURfTlNfQ0FfUE9MSUNZX1VSTAorT0lEX05TX0NBX1JFVk9DQVRJT05fVVJMIE1CRURUTFNfT0lEX05TX0NBX1JFVk9DQVRJT05fVVJMCitPSURfTlNfQ0VSVCBNQkVEVExTX09JRF9OU19DRVJUCitPSURfTlNfQ0VSVF9TRVFVRU5DRSBNQkVEVExTX09JRF9OU19DRVJUX1NFUVVFTkNFCitPSURfTlNfQ0VSVF9UWVBFIE1CRURUTFNfT0lEX05TX0NFUlRfVFlQRQorT0lEX05TX0NPTU1FTlQgTUJFRFRMU19PSURfTlNfQ09NTUVOVAorT0lEX05TX0RBVEFfVFlQRSBNQkVEVExTX09JRF9OU19EQVRBX1RZUEUKK09JRF9OU19SRU5FV0FMX1VSTCBNQkVEVExTX09JRF9OU19SRU5FV0FMX1VSTAorT0lEX05TX1JFVk9DQVRJT05fVVJMIE1CRURUTFNfT0lEX05TX1JFVk9DQVRJT05fVVJMCitPSURfTlNfU1NMX1NFUlZFUl9OQU1FIE1CRURUTFNfT0lEX05TX1NTTF9TRVJWRVJfTkFNRQorT0lEX09DU1BfU0lHTklORyBNQkVEVExTX09JRF9PQ1NQX1NJR05JTkcKK09JRF9PSVdfU0VDU0lHIE1CRURUTFNfT0lEX09JV19TRUNTSUcKK09JRF9PSVdfU0VDU0lHX0FMRyBNQkVEVExTX09JRF9PSVdfU0VDU0lHX0FMRworT0lEX09JV19TRUNTSUdfU0hBMSBNQkVEVExTX09JRF9PSVdfU0VDU0lHX1NIQTEKK09JRF9PUkdBTklaQVRJT04gTUJFRFRMU19PSURfT1JHQU5JWkFUSU9OCitPSURfT1JHX0FOU0lfWDlfNjIgTUJFRFRMU19PSURfT1JHX0FOU0lfWDlfNjIKK09JRF9PUkdfQ0VSVElDT00gTUJFRFRMU19PSURfT1JHX0NFUlRJQ09NCitPSURfT1JHX0RPRCBNQkVEVExTX09JRF9PUkdfRE9ECitPSURfT1JHX0dPViBNQkVEVExTX09JRF9PUkdfR09WCitPSURfT1JHX05FVFNDQVBFIE1CRURUTFNfT0lEX09SR19ORVRTQ0FQRQorT0lEX09SR19PSVcgTUJFRFRMU19PSURfT1JHX09JVworT0lEX09SR19SU0FfREFUQV9TRUNVUklUWSBNQkVEVExTX09JRF9PUkdfUlNBX0RBVEFfU0VDVVJJVFkKK09JRF9PUkdfVEVMRVRSVVNUIE1CRURUTFNfT0lEX09SR19URUxFVFJVU1QKK09JRF9QS0NTIE1CRURUTFNfT0lEX1BLQ1MKK09JRF9QS0NTMSBNQkVEVExTX09JRF9QS0NTMQorT0lEX1BLQ1MxMiBNQkVEVExTX09JRF9QS0NTMTIKK09JRF9QS0NTMTJfUEJFIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkUKK09JRF9QS0NTMTJfUEJFX1NIQTFfREVTMl9FREVfQ0JDIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9ERVMyX0VERV9DQkMKK09JRF9QS0NTMTJfUEJFX1NIQTFfREVTM19FREVfQ0JDIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9ERVMzX0VERV9DQkMKK09JRF9QS0NTMTJfUEJFX1NIQTFfUkMyXzEyOF9DQkMgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX1JDMl8xMjhfQ0JDCitPSURfUEtDUzEyX1BCRV9TSEExX1JDMl80MF9DQkMgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX1JDMl80MF9DQkMKK09JRF9QS0NTMTJfUEJFX1NIQTFfUkM0XzEyOCBNQkVEVExTX09JRF9QS0NTMTJfUEJFX1NIQTFfUkM0XzEyOAorT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzRfNDAgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX1JDNF80MAorT0lEX1BLQ1MxX01EMiBNQkVEVExTX09JRF9QS0NTMV9NRDIKK09JRF9QS0NTMV9NRDQgTUJFRFRMU19PSURfUEtDUzFfTUQ0CitPSURfUEtDUzFfTUQ1IE1CRURUTFNfT0lEX1BLQ1MxX01ENQorT0lEX1BLQ1MxX1JTQSBNQkVEVExTX09JRF9QS0NTMV9SU0EKK09JRF9QS0NTMV9TSEExIE1CRURUTFNfT0lEX1BLQ1MxX1NIQTEKK09JRF9QS0NTMV9TSEEyMjQgTUJFRFRMU19PSURfUEtDUzFfU0hBMjI0CitPSURfUEtDUzFfU0hBMjU2IE1CRURUTFNfT0lEX1BLQ1MxX1NIQTI1NgorT0lEX1BLQ1MxX1NIQTM4NCBNQkVEVExTX09JRF9QS0NTMV9TSEEzODQKK09JRF9QS0NTMV9TSEE1MTIgTUJFRFRMU19PSURfUEtDUzFfU0hBNTEyCitPSURfUEtDUzUgTUJFRFRMU19PSURfUEtDUzUKK09JRF9QS0NTNV9QQkVTMiBNQkVEVExTX09JRF9QS0NTNV9QQkVTMgorT0lEX1BLQ1M1X1BCRV9NRDJfREVTX0NCQyBNQkVEVExTX09JRF9QS0NTNV9QQkVfTUQyX0RFU19DQkMKK09JRF9QS0NTNV9QQkVfTUQyX1JDMl9DQkMgTUJFRFRMU19PSURfUEtDUzVfUEJFX01EMl9SQzJfQ0JDCitPSURfUEtDUzVfUEJFX01ENV9ERVNfQ0JDIE1CRURUTFNfT0lEX1BLQ1M1X1BCRV9NRDVfREVTX0NCQworT0lEX1BLQ1M1X1BCRV9NRDVfUkMyX0NCQyBNQkVEVExTX09JRF9QS0NTNV9QQkVfTUQ1X1JDMl9DQkMKK09JRF9QS0NTNV9QQkVfU0hBMV9ERVNfQ0JDIE1CRURUTFNfT0lEX1BLQ1M1X1BCRV9TSEExX0RFU19DQkMKK09JRF9QS0NTNV9QQkVfU0hBMV9SQzJfQ0JDIE1CRURUTFNfT0lEX1BLQ1M1X1BCRV9TSEExX1JDMl9DQkMKK09JRF9QS0NTNV9QQktERjIgTUJFRFRMU19PSURfUEtDUzVfUEJLREYyCitPSURfUEtDUzVfUEJNQUMxIE1CRURUTFNfT0lEX1BLQ1M1X1BCTUFDMQorT0lEX1BLQ1M5IE1CRURUTFNfT0lEX1BLQ1M5CitPSURfUEtDUzlfQ1NSX0VYVF9SRVEgTUJFRFRMU19PSURfUEtDUzlfQ1NSX0VYVF9SRVEKK09JRF9QS0NTOV9FTUFJTCBNQkVEVExTX09JRF9QS0NTOV9FTUFJTAorT0lEX1BLSVggTUJFRFRMU19PSURfUEtJWAorT0lEX1BPTElDWV9DT05TVFJBSU5UUyBNQkVEVExTX09JRF9QT0xJQ1lfQ09OU1RSQUlOVFMKK09JRF9QT0xJQ1lfTUFQUElOR1MgTUJFRFRMU19PSURfUE9MSUNZX01BUFBJTkdTCitPSURfUFJJVkFURV9LRVlfVVNBR0VfUEVSSU9EIE1CRURUTFNfT0lEX1BSSVZBVEVfS0VZX1VTQUdFX1BFUklPRAorT0lEX1JTQVNTQV9QU1MgTUJFRFRMU19PSURfUlNBU1NBX1BTUworT0lEX1JTQV9DT01QQU5ZIE1CRURUTFNfT0lEX1JTQV9DT01QQU5ZCitPSURfUlNBX1NIQV9PQlMgTUJFRFRMU19PSURfUlNBX1NIQV9PQlMKK09JRF9TRVJWRVJfQVVUSCBNQkVEVExTX09JRF9TRVJWRVJfQVVUSAorT0lEX1NJWkUgTUJFRFRMU19PSURfU0laRQorT0lEX1NVQkpFQ1RfQUxUX05BTUUgTUJFRFRMU19PSURfU1VCSkVDVF9BTFRfTkFNRQorT0lEX1NVQkpFQ1RfRElSRUNUT1JZX0FUVFJTIE1CRURUTFNfT0lEX1NVQkpFQ1RfRElSRUNUT1JZX0FUVFJTCitPSURfU1VCSkVDVF9LRVlfSURFTlRJRklFUiBNQkVEVExTX09JRF9TVUJKRUNUX0tFWV9JREVOVElGSUVSCitPSURfVEVMRVRSVVNUIE1CRURUTFNfT0lEX1RFTEVUUlVTVAorT0lEX1RJTUVfU1RBTVBJTkcgTUJFRFRMU19PSURfVElNRV9TVEFNUElORworUEFETE9DS19BQ0UgTUJFRFRMU19QQURMT0NLX0FDRQorUEFETE9DS19BTElHTjE2IE1CRURUTFNfUEFETE9DS19BTElHTjE2CitQQURMT0NLX1BIRSBNQkVEVExTX1BBRExPQ0tfUEhFCitQQURMT0NLX1BNTSBNQkVEVExTX1BBRExPQ0tfUE1NCitQQURMT0NLX1JORyBNQkVEVExTX1BBRExPQ0tfUk5HCitQS0NTMTJfREVSSVZFX0lWIE1CRURUTFNfUEtDUzEyX0RFUklWRV9JVgorUEtDUzEyX0RFUklWRV9LRVkgTUJFRFRMU19QS0NTMTJfREVSSVZFX0tFWQorUEtDUzEyX0RFUklWRV9NQUNfS0VZIE1CRURUTFNfUEtDUzEyX0RFUklWRV9NQUNfS0VZCitQS0NTMTJfUEJFX0RFQ1JZUFQgTUJFRFRMU19QS0NTMTJfUEJFX0RFQ1JZUFQKK1BLQ1MxMl9QQkVfRU5DUllQVCBNQkVEVExTX1BLQ1MxMl9QQkVfRU5DUllQVAorUEtDUzVfREVDUllQVCBNQkVEVExTX1BLQ1M1X0RFQ1JZUFQKK1BLQ1M1X0VOQ1JZUFQgTUJFRFRMU19QS0NTNV9FTkNSWVBUCitQT0xBUlNTTF9BRVNOSV9BRVMgTUJFRFRMU19BRVNOSV9BRVMKK1BPTEFSU1NMX0FFU05JX0MgTUJFRFRMU19BRVNOSV9DCitQT0xBUlNTTF9BRVNOSV9DTE1VTCBNQkVEVExTX0FFU05JX0NMTVVMCitQT0xBUlNTTF9BRVNOSV9IIE1CRURUTFNfQUVTTklfSAorUE9MQVJTU0xfQUVTX0FMVCBNQkVEVExTX0FFU19BTFQKK1BPTEFSU1NMX0FFU19DIE1CRURUTFNfQUVTX0MKK1BPTEFSU1NMX0FFU19IIE1CRURUTFNfQUVTX0gKK1BPTEFSU1NMX0FFU19ST01fVEFCTEVTIE1CRURUTFNfQUVTX1JPTV9UQUJMRVMKK1BPTEFSU1NMX0FSQzRfQUxUIE1CRURUTFNfQVJDNF9BTFQKK1BPTEFSU1NMX0FSQzRfQyBNQkVEVExTX0FSQzRfQworUE9MQVJTU0xfQVJDNF9IIE1CRURUTFNfQVJDNF9ICitQT0xBUlNTTF9BU04xX0ggTUJFRFRMU19BU04xX0gKK1BPTEFSU1NMX0FTTjFfUEFSU0VfQyBNQkVEVExTX0FTTjFfUEFSU0VfQworUE9MQVJTU0xfQVNOMV9XUklURV9DIE1CRURUTFNfQVNOMV9XUklURV9DCitQT0xBUlNTTF9BU04xX1dSSVRFX0ggTUJFRFRMU19BU04xX1dSSVRFX0gKK1BPTEFSU1NMX0JBU0U2NF9DIE1CRURUTFNfQkFTRTY0X0MKK1BPTEFSU1NMX0JBU0U2NF9IIE1CRURUTFNfQkFTRTY0X0gKK1BPTEFSU1NMX0JJR05VTV9DIE1CRURUTFNfQklHTlVNX0MKK1BPTEFSU1NMX0JJR05VTV9IIE1CRURUTFNfQklHTlVNX0gKK1BPTEFSU1NMX0JMT1dGSVNIX0FMVCBNQkVEVExTX0JMT1dGSVNIX0FMVAorUE9MQVJTU0xfQkxPV0ZJU0hfQyBNQkVEVExTX0JMT1dGSVNIX0MKK1BPTEFSU1NMX0JMT1dGSVNIX0ggTUJFRFRMU19CTE9XRklTSF9ICitQT0xBUlNTTF9CTl9NVUxfSCBNQkVEVExTX0JOX01VTF9ICitQT0xBUlNTTF9DQU1FTExJQV9BTFQgTUJFRFRMU19DQU1FTExJQV9BTFQKK1BPTEFSU1NMX0NBTUVMTElBX0MgTUJFRFRMU19DQU1FTExJQV9DCitQT0xBUlNTTF9DQU1FTExJQV9IIE1CRURUTFNfQ0FNRUxMSUFfSAorUE9MQVJTU0xfQ0FNRUxMSUFfU01BTExfTUVNT1JZIE1CRURUTFNfQ0FNRUxMSUFfU01BTExfTUVNT1JZCitQT0xBUlNTTF9DQ01fQyBNQkVEVExTX0NDTV9DCitQT0xBUlNTTF9DQ01fSCBNQkVEVExTX0NDTV9ICitQT0xBUlNTTF9DRVJUU19DIE1CRURUTFNfQ0VSVFNfQworUE9MQVJTU0xfQ0VSVFNfSCBNQkVEVExTX0NFUlRTX0gKK1BPTEFSU1NMX0NIRUNLX0NPTkZJR19IIE1CRURUTFNfQ0hFQ0tfQ09ORklHX0gKK1BPTEFSU1NMX0NJUEhFUlNVSVRFX05PRFRMUyBNQkVEVExTX0NJUEhFUlNVSVRFX05PRFRMUworUE9MQVJTU0xfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHIE1CRURUTFNfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHCitQT0xBUlNTTF9DSVBIRVJTVUlURV9XRUFLIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSworUE9MQVJTU0xfQ0lQSEVSX0FFU18xMjhfQ0JDIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDCitQT0xBUlNTTF9DSVBIRVJfQUVTXzEyOF9DQ00gTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00KK1BPTEFSU1NMX0NJUEhFUl9BRVNfMTI4X0NGQjEyOCBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyOAorUE9MQVJTU0xfQ0lQSEVSX0FFU18xMjhfQ1RSIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSCitQT0xBUlNTTF9DSVBIRVJfQUVTXzEyOF9FQ0IgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0IKK1BPTEFSU1NMX0NJUEhFUl9BRVNfMTI4X0dDTSBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTQorUE9MQVJTU0xfQ0lQSEVSX0FFU18xOTJfQ0JDIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDCitQT0xBUlNTTF9DSVBIRVJfQUVTXzE5Ml9DQ00gTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ00KK1BPTEFSU1NMX0NJUEhFUl9BRVNfMTkyX0NGQjEyOCBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NGQjEyOAorUE9MQVJTU0xfQ0lQSEVSX0FFU18xOTJfQ1RSIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ1RSCitQT0xBUlNTTF9DSVBIRVJfQUVTXzE5Ml9FQ0IgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0IKK1BPTEFSU1NMX0NJUEhFUl9BRVNfMTkyX0dDTSBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTQorUE9MQVJTU0xfQ0lQSEVSX0FFU18yNTZfQ0JDIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDCitQT0xBUlNTTF9DSVBIRVJfQUVTXzI1Nl9DQ00gTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ00KK1BPTEFSU1NMX0NJUEhFUl9BRVNfMjU2X0NGQjEyOCBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NGQjEyOAorUE9MQVJTU0xfQ0lQSEVSX0FFU18yNTZfQ1RSIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ1RSCitQT0xBUlNTTF9DSVBIRVJfQUVTXzI1Nl9FQ0IgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0IKK1BPTEFSU1NMX0NJUEhFUl9BRVNfMjU2X0dDTSBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTQorUE9MQVJTU0xfQ0lQSEVSX0FSQzRfMTI4IE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4CitQT0xBUlNTTF9DSVBIRVJfQkxPV0ZJU0hfQ0JDIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQworUE9MQVJTU0xfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0IE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0CitQT0xBUlNTTF9DSVBIRVJfQkxPV0ZJU0hfQ1RSIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUgorUE9MQVJTU0xfQ0lQSEVSX0JMT1dGSVNIX0VDQiBNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9FQ0IKK1BPTEFSU1NMX0NJUEhFUl9DIE1CRURUTFNfQ0lQSEVSX0MKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ00KK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjgKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFIKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xMjhfRUNCIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9FQ0IKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00KK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkMKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQ00KK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DRkIxMjgKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xOTJfQ1RSIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DVFIKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xOTJfRUNCIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9FQ0IKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ00KK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQ00KK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DRkIxMjgKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8yNTZfQ1RSIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DVFIKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8yNTZfRUNCIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9FQ0IKK1BPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00KK1BPTEFSU1NMX0NJUEhFUl9ERVNfQ0JDIE1CRURUTFNfQ0lQSEVSX0RFU19DQkMKK1BPTEFSU1NMX0NJUEhFUl9ERVNfRUNCIE1CRURUTFNfQ0lQSEVSX0RFU19FQ0IKK1BPTEFSU1NMX0NJUEhFUl9ERVNfRURFM19DQkMgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDCitQT0xBUlNTTF9DSVBIRVJfREVTX0VERTNfRUNCIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0VDQgorUE9MQVJTU0xfQ0lQSEVSX0RFU19FREVfQ0JDIE1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDCitQT0xBUlNTTF9DSVBIRVJfREVTX0VERV9FQ0IgTUJFRFRMU19DSVBIRVJfREVTX0VERV9FQ0IKK1BPTEFSU1NMX0NJUEhFUl9IIE1CRURUTFNfQ0lQSEVSX0gKK1BPTEFSU1NMX0NJUEhFUl9JRF8zREVTIE1CRURUTFNfQ0lQSEVSX0lEXzNERVMKK1BPTEFSU1NMX0NJUEhFUl9JRF9BRVMgTUJFRFRMU19DSVBIRVJfSURfQUVTCitQT0xBUlNTTF9DSVBIRVJfSURfQVJDNCBNQkVEVExTX0NJUEhFUl9JRF9BUkM0CitQT0xBUlNTTF9DSVBIRVJfSURfQkxPV0ZJU0ggTUJFRFRMU19DSVBIRVJfSURfQkxPV0ZJU0gKK1BPTEFSU1NMX0NJUEhFUl9JRF9DQU1FTExJQSBNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQQorUE9MQVJTU0xfQ0lQSEVSX0lEX0RFUyBNQkVEVExTX0NJUEhFUl9JRF9ERVMKK1BPTEFSU1NMX0NJUEhFUl9JRF9OT05FIE1CRURUTFNfQ0lQSEVSX0lEX05PTkUKK1BPTEFSU1NMX0NJUEhFUl9JRF9OVUxMIE1CRURUTFNfQ0lQSEVSX0lEX05VTEwKK1BPTEFSU1NMX0NJUEhFUl9NT0RFX0FFQUQgTUJFRFRMU19DSVBIRVJfTU9ERV9BRUFECitQT0xBUlNTTF9DSVBIRVJfTU9ERV9DQkMgTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK1BPTEFSU1NMX0NJUEhFUl9NT0RFX0NGQiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorUE9MQVJTU0xfQ0lQSEVSX01PREVfQ1RSIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitQT0xBUlNTTF9DSVBIRVJfTU9ERV9TVFJFQU0gTUJFRFRMU19DSVBIRVJfTU9ERV9TVFJFQU0KK1BPTEFSU1NMX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORyBNQkVEVExTX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORworUE9MQVJTU0xfQ0lQSEVSX05PTkUgTUJFRFRMU19DSVBIRVJfTk9ORQorUE9MQVJTU0xfQ0lQSEVSX05VTEwgTUJFRFRMU19DSVBIRVJfTlVMTAorUE9MQVJTU0xfQ0lQSEVSX05VTExfQ0lQSEVSIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitQT0xBUlNTTF9DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworUE9MQVJTU0xfQ0lQSEVSX1BBRERJTkdfUEtDUzcgTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworUE9MQVJTU0xfQ0lQSEVSX1BBRERJTkdfWkVST1MgTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworUE9MQVJTU0xfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTiBNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK1BPTEFSU1NMX0NJUEhFUl9WQVJJQUJMRV9JVl9MRU4gTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOCitQT0xBUlNTTF9DSVBIRVJfVkFSSUFCTEVfS0VZX0xFTiBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9LRVlfTEVOCitQT0xBUlNTTF9DSVBIRVJfV1JBUF9IIE1CRURUTFNfQ0lQSEVSX1dSQVBfSAorUE9MQVJTU0xfQ09ORklHX0ZJTEUgTUJFRFRMU19DT05GSUdfRklMRQorUE9MQVJTU0xfQ09ORklHX0ggTUJFRFRMU19DT05GSUdfSAorUE9MQVJTU0xfQ1RSX0RSQkdfQyBNQkVEVExTX0NUUl9EUkJHX0MKK1BPTEFSU1NMX0NUUl9EUkJHX0ggTUJFRFRMU19DVFJfRFJCR19ICitQT0xBUlNTTF9ERUJVR19DIE1CRURUTFNfREVCVUdfQworUE9MQVJTU0xfREVCVUdfREZMX01PREUgTUJFRFRMU19ERUJVR19ERkxfTU9ERQorUE9MQVJTU0xfREVCVUdfSCBNQkVEVExTX0RFQlVHX0gKK1BPTEFSU1NMX0RFQlVHX0xPR19GVUxMIE1CRURUTFNfREVCVUdfTE9HX0ZVTEwKK1BPTEFSU1NMX0RFQlVHX0xPR19SQVcgTUJFRFRMU19ERUJVR19MT0dfUkFXCitQT0xBUlNTTF9ERUNSWVBUIE1CRURUTFNfREVDUllQVAorUE9MQVJTU0xfREVQUkVDQVRFRF9SRU1PVkVEIE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVECitQT0xBUlNTTF9ERVBSRUNBVEVEX1dBUk5JTkcgTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcKK1BPTEFSU1NMX0RFU19BTFQgTUJFRFRMU19ERVNfQUxUCitQT0xBUlNTTF9ERVNfQyBNQkVEVExTX0RFU19DCitQT0xBUlNTTF9ERVNfSCBNQkVEVExTX0RFU19ICitQT0xBUlNTTF9ESE1fQyBNQkVEVExTX0RITV9DCitQT0xBUlNTTF9ESE1fSCBNQkVEVExTX0RITV9ICitQT0xBUlNTTF9ESE1fUkZDMjQwOV9NT0RQXzEwMjRfRyBNQkVEVExTX0RITV9SRkMyNDA5X01PRFBfMTAyNF9HCitQT0xBUlNTTF9ESE1fUkZDMjQwOV9NT0RQXzEwMjRfUCBNQkVEVExTX0RITV9SRkMyNDA5X01PRFBfMTAyNF9QCitQT0xBUlNTTF9ESE1fUkZDMzUyNl9NT0RQXzIwNDhfRyBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMjA0OF9HCitQT0xBUlNTTF9ESE1fUkZDMzUyNl9NT0RQXzIwNDhfUCBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMjA0OF9QCitQT0xBUlNTTF9ESE1fUkZDMzUyNl9NT0RQXzMwNzJfRyBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMzA3Ml9HCitQT0xBUlNTTF9ESE1fUkZDMzUyNl9NT0RQXzMwNzJfUCBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMzA3Ml9QCitQT0xBUlNTTF9ESE1fUkZDNTExNF9NT0RQXzEwMjRfRyBNQkVEVExTX0RITV9SRkM1MTE0X01PRFBfMTAyNF9HCitQT0xBUlNTTF9ESE1fUkZDNTExNF9NT0RQXzEwMjRfUCBNQkVEVExTX0RITV9SRkM1MTE0X01PRFBfMTAyNF9QCitQT0xBUlNTTF9ESE1fUkZDNTExNF9NT0RQXzIwNDhfRyBNQkVEVExTX0RITV9SRkM1MTE0X01PRFBfMjA0OF9HCitQT0xBUlNTTF9ESE1fUkZDNTExNF9NT0RQXzIwNDhfUCBNQkVEVExTX0RITV9SRkM1MTE0X01PRFBfMjA0OF9QCitQT0xBUlNTTF9FQ0RIX0MgTUJFRFRMU19FQ0RIX0MKK1BPTEFSU1NMX0VDREhfSCBNQkVEVExTX0VDREhfSAorUE9MQVJTU0xfRUNESF9PVVJTIE1CRURUTFNfRUNESF9PVVJTCitQT0xBUlNTTF9FQ0RIX1RIRUlSUyBNQkVEVExTX0VDREhfVEhFSVJTCitQT0xBUlNTTF9FQ0RTQV9DIE1CRURUTFNfRUNEU0FfQworUE9MQVJTU0xfRUNEU0FfREVURVJNSU5JU1RJQyBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKK1BPTEFSU1NMX0VDRFNBX0ggTUJFRFRMU19FQ0RTQV9ICitQT0xBUlNTTF9FQ1BfQyBNQkVEVExTX0VDUF9DCitQT0xBUlNTTF9FQ1BfRFBfQlAyNTZSMSBNQkVEVExTX0VDUF9EUF9CUDI1NlIxCitQT0xBUlNTTF9FQ1BfRFBfQlAyNTZSMV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRAorUE9MQVJTU0xfRUNQX0RQX0JQMzg0UjEgTUJFRFRMU19FQ1BfRFBfQlAzODRSMQorUE9MQVJTU0xfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQKK1BPTEFSU1NMX0VDUF9EUF9CUDUxMlIxIE1CRURUTFNfRUNQX0RQX0JQNTEyUjEKK1BPTEFSU1NMX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVECitQT0xBUlNTTF9FQ1BfRFBfTTI1NSBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5CitQT0xBUlNTTF9FQ1BfRFBfTTI1NV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorUE9MQVJTU0xfRUNQX0RQX01BWCBNQkVEVExTX0VDUF9EUF9NQVgKK1BPTEFSU1NMX0VDUF9EUF9OT05FIE1CRURUTFNfRUNQX0RQX05PTkUKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMTkySzEgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxCitQT0xBUlNTTF9FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMTkyUjEgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxCitQT0xBUlNTTF9FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMjI0SzEgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxCitQT0xBUlNTTF9FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMjI0UjEgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxCitQT0xBUlNTTF9FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMjU2SzEgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxCitQT0xBUlNTTF9FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMjU2UjEgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxCitQT0xBUlNTTF9FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMzg0UjEgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxCitQT0xBUlNTTF9FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK1BPTEFSU1NMX0VDUF9EUF9TRUNQNTIxUjEgTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxCitQT0xBUlNTTF9FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK1BPTEFSU1NMX0VDUF9GSVhFRF9QT0lOVF9PUFRJTSBNQkVEVExTX0VDUF9GSVhFRF9QT0lOVF9PUFRJTQorUE9MQVJTU0xfRUNQX0ggTUJFRFRMU19FQ1BfSAorUE9MQVJTU0xfRUNQX01BWF9CSVRTIE1CRURUTFNfRUNQX01BWF9CSVRTCitQT0xBUlNTTF9FQ1BfTUFYX0JZVEVTIE1CRURUTFNfRUNQX01BWF9CWVRFUworUE9MQVJTU0xfRUNQX01BWF9QVF9MRU4gTUJFRFRMU19FQ1BfTUFYX1BUX0xFTgorUE9MQVJTU0xfRUNQX05JU1RfT1BUSU0gTUJFRFRMU19FQ1BfTklTVF9PUFRJTQorUE9MQVJTU0xfRUNQX1BGX0NPTVBSRVNTRUQgTUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRAorUE9MQVJTU0xfRUNQX1BGX1VOQ09NUFJFU1NFRCBNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQKK1BPTEFSU1NMX0VDUF9UTFNfTkFNRURfQ1VSVkUgTUJFRFRMU19FQ1BfVExTX05BTUVEX0NVUlZFCitQT0xBUlNTTF9FQ1BfV0lORE9XX1NJWkUgTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUKK1BPTEFSU1NMX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUyBNQkVEVExTX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUworUE9MQVJTU0xfRU5DUllQVCBNQkVEVExTX0VOQ1JZUFQKK1BPTEFSU1NMX0VOVFJPUFlfQyBNQkVEVExTX0VOVFJPUFlfQworUE9MQVJTU0xfRU5UUk9QWV9GT1JDRV9TSEEyNTYgTUJFRFRMU19FTlRST1BZX0ZPUkNFX1NIQTI1NgorUE9MQVJTU0xfRU5UUk9QWV9IIE1CRURUTFNfRU5UUk9QWV9ICitQT0xBUlNTTF9FTlRST1BZX1BPTExfSCBNQkVEVExTX0VOVFJPUFlfUE9MTF9ICitQT0xBUlNTTF9FTlRST1BZX1NIQTI1Nl9BQ0NVTVVMQVRPUiBNQkVEVExTX0VOVFJPUFlfU0hBMjU2X0FDQ1VNVUxBVE9SCitQT0xBUlNTTF9FTlRST1BZX1NIQTUxMl9BQ0NVTVVMQVRPUiBNQkVEVExTX0VOVFJPUFlfU0hBNTEyX0FDQ1VNVUxBVE9SCitQT0xBUlNTTF9FUlJPUl9DIE1CRURUTFNfRVJST1JfQworUE9MQVJTU0xfRVJST1JfSCBNQkVEVExTX0VSUk9SX0gKK1BPTEFSU1NMX0VSUk9SX1NUUkVSUk9SX0JDIE1CRURUTFNfRVJST1JfU1RSRVJST1JfQkMKK1BPTEFSU1NMX0VSUk9SX1NUUkVSUk9SX0RVTU1ZIE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkKK1BPTEFSU1NMX0VSUl9BRVNfSU5WQUxJRF9JTlBVVF9MRU5HVEggTUJFRFRMU19FUlJfQUVTX0lOVkFMSURfSU5QVVRfTEVOR1RICitQT0xBUlNTTF9FUlJfQUVTX0lOVkFMSURfS0VZX0xFTkdUSCBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RICitQT0xBUlNTTF9FUlJfQVNOMV9CVUZfVE9PX1NNQUxMIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorUE9MQVJTU0xfRVJSX0FTTjFfSU5WQUxJRF9EQVRBIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9EQVRBCitQT0xBUlNTTF9FUlJfQVNOMV9JTlZBTElEX0xFTkdUSCBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RICitQT0xBUlNTTF9FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKK1BPTEFSU1NMX0VSUl9BU04xX01BTExPQ19GQUlMRUQgTUJFRFRMU19FUlJfQVNOMV9BTExPQ19GQUlMRUQKK1BPTEFSU1NMX0VSUl9BU04xX09VVF9PRl9EQVRBIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKK1BPTEFSU1NMX0VSUl9BU04xX1VORVhQRUNURURfVEFHIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKK1BPTEFSU1NMX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTCBNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTAorUE9MQVJTU0xfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUiBNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIKK1BPTEFSU1NMX0VSUl9CTE9XRklTSF9JTlZBTElEX0lOUFVUX0xFTkdUSCBNQkVEVExTX0VSUl9CTE9XRklTSF9JTlZBTElEX0lOUFVUX0xFTkdUSAorUE9MQVJTU0xfRVJSX0JMT1dGSVNIX0lOVkFMSURfS0VZX0xFTkdUSCBNQkVEVExTX0VSUl9CTE9XRklTSF9JTlZBTElEX0tFWV9MRU5HVEgKK1BPTEFSU1NMX0VSUl9DQU1FTExJQV9JTlZBTElEX0lOUFVUX0xFTkdUSCBNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0lOUFVUX0xFTkdUSAorUE9MQVJTU0xfRVJSX0NBTUVMTElBX0lOVkFMSURfS0VZX0xFTkdUSCBNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0tFWV9MRU5HVEgKK1BPTEFSU1NMX0VSUl9DQ01fQVVUSF9GQUlMRUQgTUJFRFRMU19FUlJfQ0NNX0FVVEhfRkFJTEVECitQT0xBUlNTTF9FUlJfQ0NNX0JBRF9JTlBVVCBNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCitQT0xBUlNTTF9FUlJfQ0lQSEVSX0FMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9DSVBIRVJfQUxMT0NfRkFJTEVECitQT0xBUlNTTF9FUlJfQ0lQSEVSX0FVVEhfRkFJTEVEIE1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKK1BPTEFSU1NMX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRQorUE9MQVJTU0xfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVEIE1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECitQT0xBUlNTTF9FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORyBNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HCitQT0xBUlNTTF9FUlJfQ1RSX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEIE1CRURUTFNfRVJSX0NUUl9EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfQ1RSX0RSQkdfRklMRV9JT19FUlJPUgorUE9MQVJTU0xfRVJSX0NUUl9EUkJHX0lOUFVUX1RPT19CSUcgTUJFRFRMU19FUlJfQ1RSX0RSQkdfSU5QVVRfVE9PX0JJRworUE9MQVJTU0xfRVJSX0NUUl9EUkJHX1JFUVVFU1RfVE9PX0JJRyBNQkVEVExTX0VSUl9DVFJfRFJCR19SRVFVRVNUX1RPT19CSUcKK1BPTEFSU1NMX0VSUl9ERVNfSU5WQUxJRF9JTlBVVF9MRU5HVEggTUJFRFRMU19FUlJfREVTX0lOVkFMSURfSU5QVVRfTEVOR1RICitQT0xBUlNTTF9FUlJfREhNX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX0RITV9CQURfSU5QVVRfREFUQQorUE9MQVJTU0xfRVJSX0RITV9DQUxDX1NFQ1JFVF9GQUlMRUQgTUJFRFRMU19FUlJfREhNX0NBTENfU0VDUkVUX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0RITV9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX0RITV9GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfREhNX0lOVkFMSURfRk9STUFUIE1CRURUTFNfRVJSX0RITV9JTlZBTElEX0ZPUk1BVAorUE9MQVJTU0xfRVJSX0RITV9NQUtFX1BBUkFNU19GQUlMRUQgTUJFRFRMU19FUlJfREhNX01BS0VfUEFSQU1TX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0RITV9NQUtFX1BVQkxJQ19GQUlMRUQgTUJFRFRMU19FUlJfREhNX01BS0VfUFVCTElDX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0RITV9NQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX0RITV9BTExPQ19GQUlMRUQKK1BPTEFSU1NMX0VSUl9ESE1fUkVBRF9QQVJBTVNfRkFJTEVEIE1CRURUTFNfRVJSX0RITV9SRUFEX1BBUkFNU19GQUlMRUQKK1BPTEFSU1NMX0VSUl9ESE1fUkVBRF9QVUJMSUNfRkFJTEVEIE1CRURUTFNfRVJSX0RITV9SRUFEX1BVQkxJQ19GQUlMRUQKK1BPTEFSU1NMX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCitQT0xBUlNTTF9FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwgTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwKK1BPTEFSU1NMX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRQorUE9MQVJTU0xfRVJSX0VDUF9JTlZBTElEX0tFWSBNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKK1BPTEFSU1NMX0VSUl9FQ1BfTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9FQ1BfQUxMT0NfRkFJTEVECitQT0xBUlNTTF9FUlJfRUNQX1JBTkRPTV9GQUlMRUQgTUJFRFRMU19FUlJfRUNQX1JBTkRPTV9GQUlMRUQKK1BPTEFSU1NMX0VSUl9FQ1BfU0lHX0xFTl9NSVNNQVRDSCBNQkVEVExTX0VSUl9FQ1BfU0lHX0xFTl9NSVNNQVRDSAorUE9MQVJTU0xfRVJSX0VDUF9WRVJJRllfRkFJTEVEIE1CRURUTFNfRVJSX0VDUF9WRVJJRllfRkFJTEVECitQT0xBUlNTTF9FUlJfRU5UUk9QWV9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX0VOVFJPUFlfRklMRV9JT19FUlJPUgorUE9MQVJTU0xfRVJSX0VOVFJPUFlfTUFYX1NPVVJDRVMgTUJFRFRMU19FUlJfRU5UUk9QWV9NQVhfU09VUkNFUworUE9MQVJTU0xfRVJSX0VOVFJPUFlfTk9fU09VUkNFU19ERUZJTkVEIE1CRURUTFNfRVJSX0VOVFJPUFlfTk9fU09VUkNFU19ERUZJTkVECitQT0xBUlNTTF9FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0dDTV9BVVRIX0ZBSUxFRCBNQkVEVExTX0VSUl9HQ01fQVVUSF9GQUlMRUQKK1BPTEFSU1NMX0VSUl9HQ01fQkFEX0lOUFVUIE1CRURUTFNfRVJSX0dDTV9CQURfSU5QVVQKK1BPTEFSU1NMX0VSUl9ITUFDX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEIE1CRURUTFNfRVJSX0hNQUNfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQKK1BPTEFSU1NMX0VSUl9ITUFDX0RSQkdfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRklMRV9JT19FUlJPUgorUE9MQVJTU0xfRVJSX0hNQUNfRFJCR19JTlBVVF9UT09fQklHIE1CRURUTFNfRVJSX0hNQUNfRFJCR19JTlBVVF9UT09fQklHCitQT0xBUlNTTF9FUlJfSE1BQ19EUkJHX1JFUVVFU1RfVE9PX0JJRyBNQkVEVExTX0VSUl9ITUFDX0RSQkdfUkVRVUVTVF9UT09fQklHCitQT0xBUlNTTF9FUlJfTUQyX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfTUQyX0ZJTEVfSU9fRVJST1IKK1BPTEFSU1NMX0VSUl9NRDRfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9NRDRfRklMRV9JT19FUlJPUgorUE9MQVJTU0xfRVJSX01ENV9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX01ENV9GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfTURfQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX01EX0FMTE9DX0ZBSUxFRAorUE9MQVJTU0xfRVJSX01EX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBCitQT0xBUlNTTF9FUlJfTURfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9NRF9GRUFUVVJFX1VOQVZBSUxBQkxFCitQT0xBUlNTTF9FUlJfTURfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9NRF9GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfTVBJX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQQorUE9MQVJTU0xfRVJSX01QSV9CVUZGRVJfVE9PX1NNQUxMIE1CRURUTFNfRVJSX01QSV9CVUZGRVJfVE9PX1NNQUxMCitQT0xBUlNTTF9FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8gTUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8KK1BPTEFSU1NMX0VSUl9NUElfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9NUElfRklMRV9JT19FUlJPUgorUE9MQVJTU0xfRVJSX01QSV9JTlZBTElEX0NIQVJBQ1RFUiBNQkVEVExTX0VSUl9NUElfSU5WQUxJRF9DSEFSQUNURVIKK1BPTEFSU1NMX0VSUl9NUElfTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVECitQT0xBUlNTTF9FUlJfTVBJX05FR0FUSVZFX1ZBTFVFIE1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRQorUE9MQVJTU0xfRVJSX01QSV9OT1RfQUNDRVBUQUJMRSBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUKK1BPTEFSU1NMX0VSUl9ORVRfQUNDRVBUX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfQUNDRVBUX0ZBSUxFRAorUE9MQVJTU0xfRVJSX05FVF9CSU5EX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfQklORF9GQUlMRUQKK1BPTEFSU1NMX0VSUl9ORVRfQ09OTkVDVF9GQUlMRUQgTUJFRFRMU19FUlJfTkVUX0NPTk5FQ1RfRkFJTEVECitQT0xBUlNTTF9FUlJfTkVUX0NPTk5fUkVTRVQgTUJFRFRMU19FUlJfTkVUX0NPTk5fUkVTRVQKK1BPTEFSU1NMX0VSUl9ORVRfTElTVEVOX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfTElTVEVOX0ZBSUxFRAorUE9MQVJTU0xfRVJSX05FVF9SRUNWX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfUkVDVl9GQUlMRUQKK1BPTEFSU1NMX0VSUl9ORVRfU0VORF9GQUlMRUQgTUJFRFRMU19FUlJfTkVUX1NFTkRfRkFJTEVECitQT0xBUlNTTF9FUlJfTkVUX1NPQ0tFVF9GQUlMRUQgTUJFRFRMU19FUlJfTkVUX1NPQ0tFVF9GQUlMRUQKK1BPTEFSU1NMX0VSUl9ORVRfVElNRU9VVCBNQkVEVExTX0VSUl9TU0xfVElNRU9VVAorUE9MQVJTU0xfRVJSX05FVF9VTktOT1dOX0hPU1QgTUJFRFRMU19FUlJfTkVUX1VOS05PV05fSE9TVAorUE9MQVJTU0xfRVJSX05FVF9XQU5UX1JFQUQgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRAorUE9MQVJTU0xfRVJSX05FVF9XQU5UX1dSSVRFIE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFCitQT0xBUlNTTF9FUlJfT0lEX0JVRl9UT09fU01BTEwgTUJFRFRMU19FUlJfT0lEX0JVRl9UT09fU01BTEwKK1BPTEFSU1NMX0VSUl9PSURfTk9UX0ZPVU5EIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKK1BPTEFSU1NMX0VSUl9QQURMT0NLX0RBVEFfTUlTQUxJR05FRCBNQkVEVExTX0VSUl9QQURMT0NLX0RBVEFfTUlTQUxJR05FRAorUE9MQVJTU0xfRVJSX1BCS0RGMl9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9QQktERjJfQkFEX0lOUFVUX0RBVEEKK1BPTEFSU1NMX0VSUl9QRU1fQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfUEVNX0JBRF9JTlBVVF9EQVRBCitQT0xBUlNTTF9FUlJfUEVNX0ZFQVRVUkVfVU5BVkFJTEFCTEUgTUJFRFRMU19FUlJfUEVNX0ZFQVRVUkVfVU5BVkFJTEFCTEUKK1BPTEFSU1NMX0VSUl9QRU1fSU5WQUxJRF9EQVRBIE1CRURUTFNfRVJSX1BFTV9JTlZBTElEX0RBVEEKK1BPTEFSU1NMX0VSUl9QRU1fSU5WQUxJRF9FTkNfSVYgTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfRU5DX0lWCitQT0xBUlNTTF9FUlJfUEVNX01BTExPQ19GQUlMRUQgTUJFRFRMU19FUlJfUEVNX0FMTE9DX0ZBSUxFRAorUE9MQVJTU0xfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVAorUE9MQVJTU0xfRVJSX1BFTV9QQVNTV09SRF9NSVNNQVRDSCBNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfTUlTTUFUQ0gKK1BPTEFSU1NMX0VSUl9QRU1fUEFTU1dPUkRfUkVRVUlSRUQgTUJFRFRMU19FUlJfUEVNX1BBU1NXT1JEX1JFUVVJUkVECitQT0xBUlNTTF9FUlJfUEVNX1VOS05PV05fRU5DX0FMRyBNQkVEVExTX0VSUl9QRU1fVU5LTk9XTl9FTkNfQUxHCitQT0xBUlNTTF9FUlJfUEtDUzEyX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1BLQ1MxMl9CQURfSU5QVVRfREFUQQorUE9MQVJTU0xfRVJSX1BLQ1MxMl9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX1BLQ1MxMl9GRUFUVVJFX1VOQVZBSUxBQkxFCitQT0xBUlNTTF9FUlJfUEtDUzEyX1BBU1NXT1JEX01JU01BVENIIE1CRURUTFNfRVJSX1BLQ1MxMl9QQVNTV09SRF9NSVNNQVRDSAorUE9MQVJTU0xfRVJSX1BLQ1MxMl9QQkVfSU5WQUxJRF9GT1JNQVQgTUJFRFRMU19FUlJfUEtDUzEyX1BCRV9JTlZBTElEX0ZPUk1BVAorUE9MQVJTU0xfRVJSX1BLQ1M1X0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1BLQ1M1X0JBRF9JTlBVVF9EQVRBCitQT0xBUlNTTF9FUlJfUEtDUzVfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9QS0NTNV9GRUFUVVJFX1VOQVZBSUxBQkxFCitQT0xBUlNTTF9FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgTUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQKK1BPTEFSU1NMX0VSUl9QS0NTNV9QQVNTV09SRF9NSVNNQVRDSCBNQkVEVExTX0VSUl9QS0NTNV9QQVNTV09SRF9NSVNNQVRDSAorUE9MQVJTU0xfRVJSX1BLX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBCitQT0xBUlNTTF9FUlJfUEtfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9QS19GRUFUVVJFX1VOQVZBSUxBQkxFCitQT0xBUlNTTF9FUlJfUEtfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9QS19GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfUEtfSU5WQUxJRF9BTEcgTUJFRFRMU19FUlJfUEtfSU5WQUxJRF9BTEcKK1BPTEFSU1NMX0VSUl9QS19JTlZBTElEX1BVQktFWSBNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWQorUE9MQVJTU0xfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQKK1BPTEFSU1NMX0VSUl9QS19LRVlfSU5WQUxJRF9WRVJTSU9OIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX1ZFUlNJT04KK1BPTEFSU1NMX0VSUl9QS19NQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX1BLX0FMTE9DX0ZBSUxFRAorUE9MQVJTU0xfRVJSX1BLX1BBU1NXT1JEX01JU01BVENIIE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENICitQT0xBUlNTTF9FUlJfUEtfUEFTU1dPUkRfUkVRVUlSRUQgTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfUkVRVUlSRUQKK1BPTEFSU1NMX0VSUl9QS19TSUdfTEVOX01JU01BVENIIE1CRURUTFNfRVJSX1BLX1NJR19MRU5fTUlTTUFUQ0gKK1BPTEFSU1NMX0VSUl9QS19UWVBFX01JU01BVENIIE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0gKK1BPTEFSU1NMX0VSUl9QS19VTktOT1dOX05BTUVEX0NVUlZFIE1CRURUTFNfRVJSX1BLX1VOS05PV05fTkFNRURfQ1VSVkUKK1BPTEFSU1NMX0VSUl9QS19VTktOT1dOX1BLX0FMRyBNQkVEVExTX0VSUl9QS19VTktOT1dOX1BLX0FMRworUE9MQVJTU0xfRVJSX1JJUEVNRDE2MF9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX1JJUEVNRDE2MF9GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfUlNBX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQQorUE9MQVJTU0xfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcgTUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworUE9MQVJTU0xfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEIE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECitQT0xBUlNTTF9FUlJfUlNBX0tFWV9HRU5fRkFJTEVEIE1CRURUTFNfRVJSX1JTQV9LRVlfR0VOX0ZBSUxFRAorUE9MQVJTU0xfRVJSX1JTQV9PVVRQVVRfVE9PX0xBUkdFIE1CRURUTFNfRVJSX1JTQV9PVVRQVVRfVE9PX0xBUkdFCitQT0xBUlNTTF9FUlJfUlNBX1BSSVZBVEVfRkFJTEVEIE1CRURUTFNfRVJSX1JTQV9QUklWQVRFX0ZBSUxFRAorUE9MQVJTU0xfRVJSX1JTQV9QVUJMSUNfRkFJTEVEIE1CRURUTFNfRVJSX1JTQV9QVUJMSUNfRkFJTEVECitQT0xBUlNTTF9FUlJfUlNBX1JOR19GQUlMRUQgTUJFRFRMU19FUlJfUlNBX1JOR19GQUlMRUQKK1BPTEFSU1NMX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRAorUE9MQVJTU0xfRVJSX1NIQTFfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9TSEExX0ZJTEVfSU9fRVJST1IKK1BPTEFSU1NMX0VSUl9TSEEyNTZfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9TSEEyNTZfRklMRV9JT19FUlJPUgorUE9MQVJTU0xfRVJSX1NIQTUxMl9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX1NIQTUxMl9GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfUkVRVUVTVAorUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfVkVSSUZZIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfVkVSSUZZCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DSEFOR0VfQ0lQSEVSX1NQRUMgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DSEFOR0VfQ0lQSEVSX1NQRUMKK1BPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTworUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UKK1BPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfQ1MgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX0NTCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX1JQIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRV9SUAorUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfRklOSVNIRUQgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19GSU5JU0hFRAorUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfTkVXX1NFU1NJT05fVElDS0VUIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfTkVXX1NFU1NJT05fVElDS0VUCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19QUk9UT0NPTF9WRVJTSU9OIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfUFJPVE9DT0xfVkVSU0lPTgorUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE9fRE9ORSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMT19ET05FCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRQorUE9MQVJTU0xfRVJSX1NTTF9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEKK1BPTEFSU1NMX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTCBNQkVEVExTX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTAorUE9MQVJTU0xfRVJSX1NTTF9DQV9DSEFJTl9SRVFVSVJFRCBNQkVEVExTX0VSUl9TU0xfQ0FfQ0hBSU5fUkVRVUlSRUQKK1BPTEFSU1NMX0VSUl9TU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQgTUJFRFRMU19FUlJfU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVECitQT0xBUlNTTF9FUlJfU1NMX0NFUlRJRklDQVRFX1RPT19MQVJHRSBNQkVEVExTX0VSUl9TU0xfQ0VSVElGSUNBVEVfVE9PX0xBUkdFCitQT0xBUlNTTF9FUlJfU1NMX0NPTVBSRVNTSU9OX0ZBSUxFRCBNQkVEVExTX0VSUl9TU0xfQ09NUFJFU1NJT05fRkFJTEVECitQT0xBUlNTTF9FUlJfU1NMX0NPTk5fRU9GIE1CRURUTFNfRVJSX1NTTF9DT05OX0VPRgorUE9MQVJTU0xfRVJSX1NTTF9DT1VOVEVSX1dSQVBQSU5HIE1CRURUTFNfRVJSX1NTTF9DT1VOVEVSX1dSQVBQSU5HCitQT0xBUlNTTF9FUlJfU1NMX0ZBVEFMX0FMRVJUX01FU1NBR0UgTUJFRFRMU19FUlJfU1NMX0ZBVEFMX0FMRVJUX01FU1NBR0UKK1BPTEFSU1NMX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRQorUE9MQVJTU0xfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQgTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRAorUE9MQVJTU0xfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRAorUE9MQVJTU0xfRVJSX1NTTF9IV19BQ0NFTF9GQUxMVEhST1VHSCBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFMTFRIUk9VR0gKK1BPTEFSU1NMX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SCitQT0xBUlNTTF9FUlJfU1NMX0lOVkFMSURfTUFDIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQworUE9MQVJTU0xfRVJSX1NTTF9JTlZBTElEX1JFQ09SRCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQKK1BPTEFSU1NMX0VSUl9TU0xfTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVECitQT0xBUlNTTF9FUlJfU1NMX05PX0NJUEhFUl9DSE9TRU4gTUJFRFRMU19FUlJfU1NMX05PX0NJUEhFUl9DSE9TRU4KK1BPTEFSU1NMX0VSUl9TU0xfTk9fQ0xJRU5UX0NFUlRJRklDQVRFIE1CRURUTFNfRVJSX1NTTF9OT19DTElFTlRfQ0VSVElGSUNBVEUKK1BPTEFSU1NMX0VSUl9TU0xfTk9fUk5HIE1CRURUTFNfRVJSX1NTTF9OT19STkcKK1BPTEFSU1NMX0VSUl9TU0xfTk9fVVNBQkxFX0NJUEhFUlNVSVRFIE1CRURUTFNfRVJSX1NTTF9OT19VU0FCTEVfQ0lQSEVSU1VJVEUKK1BPTEFSU1NMX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlkgTUJFRFRMU19FUlJfU1NMX1BFRVJfQ0xPU0VfTk9USUZZCitQT0xBUlNTTF9FUlJfU1NMX1BFRVJfVkVSSUZZX0ZBSUxFRCBNQkVEVExTX0VSUl9TU0xfUEVFUl9WRVJJRllfRkFJTEVECitQT0xBUlNTTF9FUlJfU1NMX1BLX1RZUEVfTUlTTUFUQ0ggTUJFRFRMU19FUlJfU1NMX1BLX1RZUEVfTUlTTUFUQ0gKK1BPTEFSU1NMX0VSUl9TU0xfUFJJVkFURV9LRVlfUkVRVUlSRUQgTUJFRFRMU19FUlJfU1NMX1BSSVZBVEVfS0VZX1JFUVVJUkVECitQT0xBUlNTTF9FUlJfU1NMX1NFU1NJT05fVElDS0VUX0VYUElSRUQgTUJFRFRMU19FUlJfU1NMX1NFU1NJT05fVElDS0VUX0VYUElSRUQKK1BPTEFSU1NMX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UKK1BPTEFSU1NMX0VSUl9TU0xfVU5LTk9XTl9DSVBIRVIgTUJFRFRMU19FUlJfU1NMX1VOS05PV05fQ0lQSEVSCitQT0xBUlNTTF9FUlJfU1NMX1VOS05PV05fSURFTlRJVFkgTUJFRFRMU19FUlJfU1NMX1VOS05PV05fSURFTlRJVFkKK1BPTEFSU1NMX0VSUl9TU0xfV0FJVElOR19TRVJWRVJfSEVMTE9fUkVORUdPIE1CRURUTFNfRVJSX1NTTF9XQUlUSU5HX1NFUlZFUl9IRUxMT19SRU5FR08KK1BPTEFSU1NMX0VSUl9USFJFQURJTkdfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfVEhSRUFESU5HX0JBRF9JTlBVVF9EQVRBCitQT0xBUlNTTF9FUlJfVEhSRUFESU5HX0ZFQVRVUkVfVU5BVkFJTEFCTEUgTUJFRFRMU19FUlJfVEhSRUFESU5HX0ZFQVRVUkVfVU5BVkFJTEFCTEUKK1BPTEFSU1NMX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SCitQT0xBUlNTTF9FUlJfWDUwOV9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBCitQT0xBUlNTTF9FUlJfWDUwOV9DRVJUX1VOS05PV05fRk9STUFUIE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9VTktOT1dOX0ZPUk1BVAorUE9MQVJTU0xfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEIE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVECitQT0xBUlNTTF9FUlJfWDUwOV9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX1g1MDlfRkVBVFVSRV9VTkFWQUlMQUJMRQorUE9MQVJTU0xfRVJSX1g1MDlfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9YNTA5X0ZJTEVfSU9fRVJST1IKK1BPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfQUxHIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcKK1BPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfREFURSBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURQorUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TCitQT0xBUlNTTF9FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUCitQT0xBUlNTTF9FUlJfWDUwOV9JTlZBTElEX05BTUUgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUKK1BPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfU0VSSUFMIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwKK1BPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfU0lHTkFUVVJFIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TSUdOQVRVUkUKK1BPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfVkVSU0lPTiBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfVkVSU0lPTgorUE9MQVJTU0xfRVJSX1g1MDlfTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRAorUE9MQVJTU0xfRVJSX1g1MDlfU0lHX01JU01BVENIIE1CRURUTFNfRVJSX1g1MDlfU0lHX01JU01BVENICitQT0xBUlNTTF9FUlJfWDUwOV9VTktOT1dOX09JRCBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fT0lECitQT0xBUlNTTF9FUlJfWDUwOV9VTktOT1dOX1NJR19BTEcgTUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1NJR19BTEcKK1BPTEFSU1NMX0VSUl9YNTA5X1VOS05PV05fVkVSU0lPTiBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fVkVSU0lPTgorUE9MQVJTU0xfRVJSX1hURUFfSU5WQUxJRF9JTlBVVF9MRU5HVEggTUJFRFRMU19FUlJfWFRFQV9JTlZBTElEX0lOUFVUX0xFTkdUSAorUE9MQVJTU0xfRlNfSU8gTUJFRFRMU19GU19JTworUE9MQVJTU0xfR0NNX0MgTUJFRFRMU19HQ01fQworUE9MQVJTU0xfR0NNX0ggTUJFRFRMU19HQ01fSAorUE9MQVJTU0xfR0VOUFJJTUUgTUJFRFRMU19HRU5QUklNRQorUE9MQVJTU0xfSEFWRUdFX0MgTUJFRFRMU19IQVZFR0VfQworUE9MQVJTU0xfSEFWRUdFX0ggTUJFRFRMU19IQVZFR0VfSAorUE9MQVJTU0xfSEFWRV9BU00gTUJFRFRMU19IQVZFX0FTTQorUE9MQVJTU0xfSEFWRV9JTlQxNiBNQkVEVExTX0hBVkVfSU5UMTYKK1BPTEFSU1NMX0hBVkVfSU5UMzIgTUJFRFRMU19IQVZFX0lOVDMyCitQT0xBUlNTTF9IQVZFX0lOVDY0IE1CRURUTFNfSEFWRV9JTlQ2NAorUE9MQVJTU0xfSEFWRV9JTlQ4IE1CRURUTFNfSEFWRV9JTlQ4CitQT0xBUlNTTF9IQVZFX0lQVjYgTUJFRFRMU19IQVZFX0lQVjYKK1BPTEFSU1NMX0hBVkVfTE9OR0xPTkcgTUJFRFRMU19IQVZFX0xPTkdMT05HCitQT0xBUlNTTF9IQVZFX1NTRTIgTUJFRFRMU19IQVZFX1NTRTIKK1BPTEFSU1NMX0hBVkVfVElNRSBNQkVEVExTX0hBVkVfVElNRQorUE9MQVJTU0xfSEFWRV9VREJMIE1CRURUTFNfSEFWRV9VREJMCitQT0xBUlNTTF9IQVZFX1g4NiBNQkVEVExTX0hBVkVfWDg2CitQT0xBUlNTTF9IQVZFX1g4Nl82NCBNQkVEVExTX0hBVkVfWDg2XzY0CitQT0xBUlNTTF9ITUFDX0RSQkdfQyBNQkVEVExTX0hNQUNfRFJCR19DCitQT0xBUlNTTF9ITUFDX0RSQkdfSCBNQkVEVExTX0hNQUNfRFJCR19ICitQT0xBUlNTTF9ITUFDX0RSQkdfTUFYX0lOUFVUIE1CRURUTFNfSE1BQ19EUkJHX01BWF9JTlBVVAorUE9MQVJTU0xfSE1BQ19EUkJHX01BWF9SRVFVRVNUIE1CRURUTFNfSE1BQ19EUkJHX01BWF9SRVFVRVNUCitQT0xBUlNTTF9ITUFDX0RSQkdfTUFYX1NFRURfSU5QVVQgTUJFRFRMU19ITUFDX0RSQkdfTUFYX1NFRURfSU5QVVQKK1BPTEFSU1NMX0hNQUNfRFJCR19QUl9PRkYgTUJFRFRMU19ITUFDX0RSQkdfUFJfT0ZGCitQT0xBUlNTTF9ITUFDX0RSQkdfUFJfT04gTUJFRFRMU19ITUFDX0RSQkdfUFJfT04KK1BPTEFSU1NMX0hNQUNfRFJCR19SRVNFRURfSU5URVJWQUwgTUJFRFRMU19ITUFDX0RSQkdfUkVTRUVEX0lOVEVSVkFMCitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfREhFX1BTSyBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLCitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0RIRV9SU0EgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQQorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQKK1BPTEFSU1NMX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQQorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sKK1BPTEFSU1NMX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EKK1BPTEFSU1NMX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQQorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQKK1BPTEFSU1NMX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQQorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX05PTkUgTUJFRFRMU19LRVlfRVhDSEFOR0VfTk9ORQorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX1BTSyBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sKK1BPTEFSU1NMX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX1JTQSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EKK1BPTEFSU1NMX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX1JTQV9QU0sgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSworUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQKK1BPTEFSU1NMX0tFWV9FWENIQU5HRV9fU09NRV9fRUNESEVfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fRUNESEVfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQKK1BPTEFSU1NMX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQKK1BPTEFSU1NMX0tFWV9MRU5HVEhfREVTIE1CRURUTFNfS0VZX0xFTkdUSF9ERVMKK1BPTEFSU1NMX0tFWV9MRU5HVEhfREVTX0VERSBNQkVEVExTX0tFWV9MRU5HVEhfREVTX0VERQorUE9MQVJTU0xfS0VZX0xFTkdUSF9ERVNfRURFMyBNQkVEVExTX0tFWV9MRU5HVEhfREVTX0VERTMKK1BPTEFSU1NMX0tFWV9MRU5HVEhfTk9ORSBNQkVEVExTX0tFWV9MRU5HVEhfTk9ORQorUE9MQVJTU0xfTUFYX0JMT0NLX0xFTkdUSCBNQkVEVExTX01BWF9CTE9DS19MRU5HVEgKK1BPTEFSU1NMX01BWF9JVl9MRU5HVEggTUJFRFRMU19NQVhfSVZfTEVOR1RICitQT0xBUlNTTF9NRDJfQUxUIE1CRURUTFNfTUQyX0FMVAorUE9MQVJTU0xfTUQyX0MgTUJFRFRMU19NRDJfQworUE9MQVJTU0xfTUQyX0ggTUJFRFRMU19NRDJfSAorUE9MQVJTU0xfTUQ0X0FMVCBNQkVEVExTX01ENF9BTFQKK1BPTEFSU1NMX01ENF9DIE1CRURUTFNfTUQ0X0MKK1BPTEFSU1NMX01ENF9IIE1CRURUTFNfTUQ0X0gKK1BPTEFSU1NMX01ENV9BTFQgTUJFRFRMU19NRDVfQUxUCitQT0xBUlNTTF9NRDVfQyBNQkVEVExTX01ENV9DCitQT0xBUlNTTF9NRDVfSCBNQkVEVExTX01ENV9ICitQT0xBUlNTTF9NRF9DIE1CRURUTFNfTURfQworUE9MQVJTU0xfTURfSCBNQkVEVExTX01EX0gKK1BPTEFSU1NMX01EX01BWF9TSVpFIE1CRURUTFNfTURfTUFYX1NJWkUKK1BPTEFSU1NMX01EX01EMiBNQkVEVExTX01EX01EMgorUE9MQVJTU0xfTURfTUQ0IE1CRURUTFNfTURfTUQ0CitQT0xBUlNTTF9NRF9NRDUgTUJFRFRMU19NRF9NRDUKK1BPTEFSU1NMX01EX05PTkUgTUJFRFRMU19NRF9OT05FCitQT0xBUlNTTF9NRF9SSVBFTUQxNjAgTUJFRFRMU19NRF9SSVBFTUQxNjAKK1BPTEFSU1NMX01EX1NIQTEgTUJFRFRMU19NRF9TSEExCitQT0xBUlNTTF9NRF9TSEEyMjQgTUJFRFRMU19NRF9TSEEyMjQKK1BPTEFSU1NMX01EX1NIQTI1NiBNQkVEVExTX01EX1NIQTI1NgorUE9MQVJTU0xfTURfU0hBMzg0IE1CRURUTFNfTURfU0hBMzg0CitQT0xBUlNTTF9NRF9TSEE1MTIgTUJFRFRMU19NRF9TSEE1MTIKK1BPTEFSU1NMX01EX1dSQVBfSCBNQkVEVExTX01EX1dSQVBfSAorUE9MQVJTU0xfTUVNT1JZX0FMSUdOX01VTFRJUExFIE1CRURUTFNfTUVNT1JZX0FMSUdOX01VTFRJUExFCitQT0xBUlNTTF9NRU1PUllfQkFDS1RSQUNFIE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRQorUE9MQVJTU0xfTUVNT1JZX0JVRkZFUl9BTExPQ19DIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCitQT0xBUlNTTF9NRU1PUllfQlVGRkVSX0FMTE9DX0ggTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0gKK1BPTEFSU1NMX01FTU9SWV9DIE1CRURUTFNfTUVNT1JZX0MKK1BPTEFSU1NMX01FTU9SWV9ERUJVRyBNQkVEVExTX01FTU9SWV9ERUJVRworUE9MQVJTU0xfTUVNT1JZX0ggTUJFRFRMU19NRU1PUllfSAorUE9MQVJTU0xfTU9ERV9DQkMgTUJFRFRMU19NT0RFX0NCQworUE9MQVJTU0xfTU9ERV9DQ00gTUJFRFRMU19NT0RFX0NDTQorUE9MQVJTU0xfTU9ERV9DRkIgTUJFRFRMU19NT0RFX0NGQgorUE9MQVJTU0xfTU9ERV9DVFIgTUJFRFRMU19NT0RFX0NUUgorUE9MQVJTU0xfTU9ERV9FQ0IgTUJFRFRMU19NT0RFX0VDQgorUE9MQVJTU0xfTU9ERV9HQ00gTUJFRFRMU19NT0RFX0dDTQorUE9MQVJTU0xfTU9ERV9OT05FIE1CRURUTFNfTU9ERV9OT05FCitQT0xBUlNTTF9NT0RFX09GQiBNQkVEVExTX01PREVfT0ZCCitQT0xBUlNTTF9NT0RFX1NUUkVBTSBNQkVEVExTX01PREVfU1RSRUFNCitQT0xBUlNTTF9NUElfTUFYX0JJVFMgTUJFRFRMU19NUElfTUFYX0JJVFMKK1BPTEFSU1NMX01QSV9NQVhfQklUU19TQ0FMRTEwMCBNQkVEVExTX01QSV9NQVhfQklUU19TQ0FMRTEwMAorUE9MQVJTU0xfTVBJX01BWF9MSU1CUyBNQkVEVExTX01QSV9NQVhfTElNQlMKK1BPTEFSU1NMX01QSV9NQVhfU0laRSBNQkVEVExTX01QSV9NQVhfU0laRQorUE9MQVJTU0xfTVBJX1JXX0JVRkZFUl9TSVpFIE1CRURUTFNfTVBJX1JXX0JVRkZFUl9TSVpFCitQT0xBUlNTTF9NUElfV0lORE9XX1NJWkUgTUJFRFRMU19NUElfV0lORE9XX1NJWkUKK1BPTEFSU1NMX05FVF9DIE1CRURUTFNfTkVUX0MKK1BPTEFSU1NMX05FVF9IIE1CRURUTFNfTkVUX0gKK1BPTEFSU1NMX05FVF9MSVNURU5fQkFDS0xPRyBNQkVEVExTX05FVF9MSVNURU5fQkFDS0xPRworUE9MQVJTU0xfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMgTUJFRFRMU19OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUworUE9MQVJTU0xfTk9fUExBVEZPUk1fRU5UUk9QWSBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkKK1BPTEFSU1NMX09JRF9DIE1CRURUTFNfT0lEX0MKK1BPTEFSU1NMX09JRF9IIE1CRURUTFNfT0lEX0gKK1BPTEFSU1NMX09QRVJBVElPTl9OT05FIE1CRURUTFNfT1BFUkFUSU9OX05PTkUKK1BPTEFSU1NMX1BBRERJTkdfTk9ORSBNQkVEVExTX1BBRERJTkdfTk9ORQorUE9MQVJTU0xfUEFERElOR19PTkVfQU5EX1pFUk9TIE1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCitQT0xBUlNTTF9QQURESU5HX1BLQ1M3IE1CRURUTFNfUEFERElOR19QS0NTNworUE9MQVJTU0xfUEFERElOR19aRVJPUyBNQkVEVExTX1BBRERJTkdfWkVST1MKK1BPTEFSU1NMX1BBRERJTkdfWkVST1NfQU5EX0xFTiBNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorUE9MQVJTU0xfUEFETE9DS19DIE1CRURUTFNfUEFETE9DS19DCitQT0xBUlNTTF9QQURMT0NLX0ggTUJFRFRMU19QQURMT0NLX0gKK1BPTEFSU1NMX1BCS0RGMl9DIE1CRURUTFNfUEJLREYyX0MKK1BPTEFSU1NMX1BCS0RGMl9IIE1CRURUTFNfUEJLREYyX0gKK1BPTEFSU1NMX1BFTV9IIE1CRURUTFNfUEVNX0gKK1BPTEFSU1NMX1BFTV9QQVJTRV9DIE1CRURUTFNfUEVNX1BBUlNFX0MKK1BPTEFSU1NMX1BFTV9XUklURV9DIE1CRURUTFNfUEVNX1dSSVRFX0MKK1BPTEFSU1NMX1BLQ1MxMV9DIE1CRURUTFNfUEtDUzExX0MKK1BPTEFSU1NMX1BLQ1MxMV9IIE1CRURUTFNfUEtDUzExX0gKK1BPTEFSU1NMX1BLQ1MxMl9DIE1CRURUTFNfUEtDUzEyX0MKK1BPTEFSU1NMX1BLQ1MxMl9IIE1CRURUTFNfUEtDUzEyX0gKK1BPTEFSU1NMX1BLQ1MxX1YxNSBNQkVEVExTX1BLQ1MxX1YxNQorUE9MQVJTU0xfUEtDUzFfVjIxIE1CRURUTFNfUEtDUzFfVjIxCitQT0xBUlNTTF9QS0NTNV9DIE1CRURUTFNfUEtDUzVfQworUE9MQVJTU0xfUEtDUzVfSCBNQkVEVExTX1BLQ1M1X0gKK1BPTEFSU1NMX1BLX0MgTUJFRFRMU19QS19DCitQT0xBUlNTTF9QS19ERUJVR19FQ1AgTUJFRFRMU19QS19ERUJVR19FQ1AKK1BPTEFSU1NMX1BLX0RFQlVHX01BWF9JVEVNUyBNQkVEVExTX1BLX0RFQlVHX01BWF9JVEVNUworUE9MQVJTU0xfUEtfREVCVUdfTVBJIE1CRURUTFNfUEtfREVCVUdfTVBJCitQT0xBUlNTTF9QS19ERUJVR19OT05FIE1CRURUTFNfUEtfREVCVUdfTk9ORQorUE9MQVJTU0xfUEtfRUNEU0EgTUJFRFRMU19QS19FQ0RTQQorUE9MQVJTU0xfUEtfRUNLRVkgTUJFRFRMU19QS19FQ0tFWQorUE9MQVJTU0xfUEtfRUNLRVlfREggTUJFRFRMU19QS19FQ0tFWV9ESAorUE9MQVJTU0xfUEtfSCBNQkVEVExTX1BLX0gKK1BPTEFSU1NMX1BLX05PTkUgTUJFRFRMU19QS19OT05FCitQT0xBUlNTTF9QS19QQVJTRV9DIE1CRURUTFNfUEtfUEFSU0VfQworUE9MQVJTU0xfUEtfUEFSU0VfRUNfRVhURU5ERUQgTUJFRFRMU19QS19QQVJTRV9FQ19FWFRFTkRFRAorUE9MQVJTU0xfUEtfUlNBIE1CRURUTFNfUEtfUlNBCitQT0xBUlNTTF9QS19SU0FTU0FfUFNTIE1CRURUTFNfUEtfUlNBU1NBX1BTUworUE9MQVJTU0xfUEtfUlNBX0FMVCBNQkVEVExTX1BLX1JTQV9BTFQKK1BPTEFSU1NMX1BLX1dSQVBfSCBNQkVEVExTX1BLX1dSQVBfSAorUE9MQVJTU0xfUEtfV1JJVEVfQyBNQkVEVExTX1BLX1dSSVRFX0MKK1BPTEFSU1NMX1BMQVRGT1JNX0MgTUJFRFRMU19QTEFURk9STV9DCitQT0xBUlNTTF9QTEFURk9STV9FWElUX0FMVCBNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUCitQT0xBUlNTTF9QTEFURk9STV9FWElUX01BQ1JPIE1CRURUTFNfUExBVEZPUk1fRVhJVF9NQUNSTworUE9MQVJTU0xfUExBVEZPUk1fRlBSSU5URl9BTFQgTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX0FMVAorUE9MQVJTU0xfUExBVEZPUk1fRlBSSU5URl9NQUNSTyBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfTUFDUk8KK1BPTEFSU1NMX1BMQVRGT1JNX0ZSRUVfTUFDUk8gTUJFRFRMU19QTEFURk9STV9GUkVFX01BQ1JPCitQT0xBUlNTTF9QTEFURk9STV9IIE1CRURUTFNfUExBVEZPUk1fSAorUE9MQVJTU0xfUExBVEZPUk1fTUFMTE9DX01BQ1JPIE1CRURUTFNfUExBVEZPUk1fQUxMT0NfTUFDUk8KK1BPTEFSU1NMX1BMQVRGT1JNX01FTU9SWSBNQkVEVExTX1BMQVRGT1JNX01FTU9SWQorUE9MQVJTU0xfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUyBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMKK1BPTEFSU1NMX1BMQVRGT1JNX1BSSU5URl9BTFQgTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUCitQT0xBUlNTTF9QTEFURk9STV9QUklOVEZfTUFDUk8gTUJFRFRMU19QTEFURk9STV9QUklOVEZfTUFDUk8KK1BPTEFSU1NMX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVAorUE9MQVJTU0xfUExBVEZPUk1fU05QUklOVEZfTUFDUk8gTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9NQUNSTworUE9MQVJTU0xfUExBVEZPUk1fU1REX0VYSVQgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVAorUE9MQVJTU0xfUExBVEZPUk1fU1REX0ZQUklOVEYgTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URgorUE9MQVJTU0xfUExBVEZPUk1fU1REX0ZSRUUgTUJFRFRMU19QTEFURk9STV9TVERfRlJFRQorUE9MQVJTU0xfUExBVEZPUk1fU1REX01BTExPQyBNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MKK1BPTEFSU1NMX1BMQVRGT1JNX1NURF9NRU1fSERSIE1CRURUTFNfUExBVEZPUk1fU1REX01FTV9IRFIKK1BPTEFSU1NMX1BMQVRGT1JNX1NURF9QUklOVEYgTUJFRFRMU19QTEFURk9STV9TVERfUFJJTlRGCitQT0xBUlNTTF9QTEFURk9STV9TVERfU05QUklOVEYgTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYKK1BPTEFSU1NMX1BSRU1BU1RFUl9TSVpFIE1CRURUTFNfUFJFTUFTVEVSX1NJWkUKK1BPTEFSU1NMX1BTS19NQVhfTEVOIE1CRURUTFNfUFNLX01BWF9MRU4KK1BPTEFSU1NMX1JFTU9WRV9BUkM0X0NJUEhFUlNVSVRFUyBNQkVEVExTX1JFTU9WRV9BUkM0X0NJUEhFUlNVSVRFUworUE9MQVJTU0xfUklQRU1EMTYwX0FMVCBNQkVEVExTX1JJUEVNRDE2MF9BTFQKK1BPTEFSU1NMX1JJUEVNRDE2MF9DIE1CRURUTFNfUklQRU1EMTYwX0MKK1BPTEFSU1NMX1JJUEVNRDE2MF9IIE1CRURUTFNfUklQRU1EMTYwX0gKK1BPTEFSU1NMX1JTQV9DIE1CRURUTFNfUlNBX0MKK1BPTEFSU1NMX1JTQV9IIE1CRURUTFNfUlNBX0gKK1BPTEFSU1NMX1JTQV9OT19DUlQgTUJFRFRMU19SU0FfTk9fQ1JUCitQT0xBUlNTTF9TRUxGX1RFU1QgTUJFRFRMU19TRUxGX1RFU1QKK1BPTEFSU1NMX1NIQTFfQUxUIE1CRURUTFNfU0hBMV9BTFQKK1BPTEFSU1NMX1NIQTFfQyBNQkVEVExTX1NIQTFfQworUE9MQVJTU0xfU0hBMV9IIE1CRURUTFNfU0hBMV9ICitQT0xBUlNTTF9TSEEyNTZfQUxUIE1CRURUTFNfU0hBMjU2X0FMVAorUE9MQVJTU0xfU0hBMjU2X0MgTUJFRFRMU19TSEEyNTZfQworUE9MQVJTU0xfU0hBMjU2X0ggTUJFRFRMU19TSEEyNTZfSAorUE9MQVJTU0xfU0hBNTEyX0FMVCBNQkVEVExTX1NIQTUxMl9BTFQKK1BPTEFSU1NMX1NIQTUxMl9DIE1CRURUTFNfU0hBNTEyX0MKK1BPTEFSU1NMX1NIQTUxMl9IIE1CRURUTFNfU0hBNTEyX0gKK1BPTEFSU1NMX1NTTF9BRUFEX1JBTkRPTV9JViBNQkVEVExTX1NTTF9BRUFEX1JBTkRPTV9JVgorUE9MQVJTU0xfU1NMX0FMRVJUX01FU1NBR0VTIE1CRURUTFNfU1NMX0FMRVJUX01FU1NBR0VTCitQT0xBUlNTTF9TU0xfQUxQTiBNQkVEVExTX1NTTF9BTFBOCitQT0xBUlNTTF9TU0xfQ0FDSEVfQyBNQkVEVExTX1NTTF9DQUNIRV9DCitQT0xBUlNTTF9TU0xfQ0FDSEVfSCBNQkVEVExTX1NTTF9DQUNIRV9ICitQT0xBUlNTTF9TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcKK1BPTEFSU1NMX1NTTF9DSVBIRVJTVUlURVNfSCBNQkVEVExTX1NTTF9DSVBIRVJTVUlURVNfSAorUE9MQVJTU0xfU1NMX0NMSV9DIE1CRURUTFNfU1NMX0NMSV9DCitQT0xBUlNTTF9TU0xfQ09PS0lFX0MgTUJFRFRMU19TU0xfQ09PS0lFX0MKK1BPTEFSU1NMX1NTTF9DT09LSUVfSCBNQkVEVExTX1NTTF9DT09LSUVfSAorUE9MQVJTU0xfU1NMX0NPT0tJRV9USU1FT1VUIE1CRURUTFNfU1NMX0NPT0tJRV9USU1FT1VUCitQT0xBUlNTTF9TU0xfREVCVUdfQUxMIE1CRURUTFNfU1NMX0RFQlVHX0FMTAorUE9MQVJTU0xfU1NMX0RJU0FCTEVfUkVORUdPVElBVElPTiBNQkVEVExTX1NTTF9ESVNBQkxFX1JFTkVHT1RJQVRJT04KK1BPTEFSU1NMX1NTTF9EVExTX0FOVElfUkVQTEFZIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkKK1BPTEFSU1NMX1NTTF9EVExTX0JBRE1BQ19MSU1JVCBNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVAorUE9MQVJTU0xfU1NMX0RUTFNfSEVMTE9fVkVSSUZZIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCitQT0xBUlNTTF9TU0xfRU5DUllQVF9USEVOX01BQyBNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDCitQT0xBUlNTTF9TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCBNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUCitQT0xBUlNTTF9TU0xfRkFMTEJBQ0tfU0NTViBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWCitQT0xBUlNTTF9TU0xfSCBNQkVEVExTX1NTTF9ICitQT0xBUlNTTF9TU0xfSFdfUkVDT1JEX0FDQ0VMIE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTAorUE9MQVJTU0xfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEggTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSAorUE9MQVJTU0xfU1NMX1BST1RPX0RUTFMgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworUE9MQVJTU0xfU1NMX1BST1RPX1NTTDMgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworUE9MQVJTU0xfU1NMX1BST1RPX1RMUzEgTUJFRFRMU19TU0xfUFJPVE9fVExTMQorUE9MQVJTU0xfU1NMX1BST1RPX1RMUzFfMSBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKK1BPTEFSU1NMX1NTTF9QUk9UT19UTFMxXzIgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCitQT0xBUlNTTF9TU0xfUkVORUdPVElBVElPTiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OCitQT0xBUlNTTF9TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTiBNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OCitQT0xBUlNTTF9TU0xfU0VTU0lPTl9USUNLRVRTIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUworUE9MQVJTU0xfU1NMX1NSVl9DIE1CRURUTFNfU1NMX1NSVl9DCitQT0xBUlNTTF9TU0xfU1JWX1JFU1BFQ1RfQ0xJRU5UX1BSRUZFUkVOQ0UgTUJFRFRMU19TU0xfU1JWX1JFU1BFQ1RfQ0xJRU5UX1BSRUZFUkVOQ0UKK1BPTEFSU1NMX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8gTUJFRFRMU19TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPCitQT0xBUlNTTF9TU0xfVExTX0MgTUJFRFRMU19TU0xfVExTX0MKK1BPTEFSU1NMX1NTTF9UUlVOQ0FURURfSE1BQyBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQworUE9MQVJTU0xfVEhSRUFESU5HX0FMVCBNQkVEVExTX1RIUkVBRElOR19BTFQKK1BPTEFSU1NMX1RIUkVBRElOR19DIE1CRURUTFNfVEhSRUFESU5HX0MKK1BPTEFSU1NMX1RIUkVBRElOR19IIE1CRURUTFNfVEhSRUFESU5HX0gKK1BPTEFSU1NMX1RIUkVBRElOR19JTVBMIE1CRURUTFNfVEhSRUFESU5HX0lNUEwKK1BPTEFSU1NMX1RIUkVBRElOR19QVEhSRUFEIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQKK1BPTEFSU1NMX1RJTUlOR19BTFQgTUJFRFRMU19USU1JTkdfQUxUCitQT0xBUlNTTF9USU1JTkdfQyBNQkVEVExTX1RJTUlOR19DCitQT0xBUlNTTF9USU1JTkdfSCBNQkVEVExTX1RJTUlOR19ICitQT0xBUlNTTF9WRVJTSU9OX0MgTUJFRFRMU19WRVJTSU9OX0MKK1BPTEFSU1NMX1ZFUlNJT05fRkVBVFVSRVMgTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTCitQT0xBUlNTTF9WRVJTSU9OX0ggTUJFRFRMU19WRVJTSU9OX0gKK1BPTEFSU1NMX1ZFUlNJT05fTUFKT1IgTUJFRFRMU19WRVJTSU9OX01BSk9SCitQT0xBUlNTTF9WRVJTSU9OX01JTk9SIE1CRURUTFNfVkVSU0lPTl9NSU5PUgorUE9MQVJTU0xfVkVSU0lPTl9OVU1CRVIgTUJFRFRMU19WRVJTSU9OX05VTUJFUgorUE9MQVJTU0xfVkVSU0lPTl9QQVRDSCBNQkVEVExTX1ZFUlNJT05fUEFUQ0gKK1BPTEFSU1NMX1ZFUlNJT05fU1RSSU5HIE1CRURUTFNfVkVSU0lPTl9TVFJJTkcKK1BPTEFSU1NMX1ZFUlNJT05fU1RSSU5HX0ZVTEwgTUJFRFRMU19WRVJTSU9OX1NUUklOR19GVUxMCitQT0xBUlNTTF9YNTA5X0FMTE9XX0VYVEVOU0lPTlNfTk9OX1YzIE1CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMworUE9MQVJTU0xfWDUwOV9BTExPV19VTlNVUFBPUlRFRF9DUklUSUNBTF9FWFRFTlNJT04gTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgorUE9MQVJTU0xfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UgTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRQorUE9MQVJTU0xfWDUwOV9DSEVDS19LRVlfVVNBR0UgTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRQorUE9MQVJTU0xfWDUwOV9DUkVBVEVfQyBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKK1BPTEFSU1NMX1g1MDlfQ1JMX0ggTUJFRFRMU19YNTA5X0NSTF9ICitQT0xBUlNTTF9YNTA5X0NSTF9QQVJTRV9DIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQworUE9MQVJTU0xfWDUwOV9DUlRfSCBNQkVEVExTX1g1MDlfQ1JUX0gKK1BPTEFSU1NMX1g1MDlfQ1JUX1BBUlNFX0MgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCitQT0xBUlNTTF9YNTA5X0NSVF9XUklURV9DIE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQworUE9MQVJTU0xfWDUwOV9DU1JfSCBNQkVEVExTX1g1MDlfQ1NSX0gKK1BPTEFSU1NMX1g1MDlfQ1NSX1BBUlNFX0MgTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DCitQT0xBUlNTTF9YNTA5X0NTUl9XUklURV9DIE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQworUE9MQVJTU0xfWDUwOV9IIE1CRURUTFNfWDUwOV9ICitQT0xBUlNTTF9YNTA5X01BWF9JTlRFUk1FRElBVEVfQ0EgTUJFRFRMU19YNTA5X01BWF9JTlRFUk1FRElBVEVfQ0EKK1BPTEFSU1NMX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUIE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQKK1BPTEFSU1NMX1g1MDlfVVNFX0MgTUJFRFRMU19YNTA5X1VTRV9DCitQT0xBUlNTTF9YVEVBX0FMVCBNQkVEVExTX1hURUFfQUxUCitQT0xBUlNTTF9YVEVBX0MgTUJFRFRMU19YVEVBX0MKK1BPTEFSU1NMX1hURUFfSCBNQkVEVExTX1hURUFfSAorUE9MQVJTU0xfWkxJQl9TVVBQT1JUIE1CRURUTFNfWkxJQl9TVVBQT1JUCitSU0FfQ1JZUFQgTUJFRFRMU19SU0FfQ1JZUFQKK1JTQV9QS0NTX1YxNSBNQkVEVExTX1JTQV9QS0NTX1YxNQorUlNBX1BLQ1NfVjIxIE1CRURUTFNfUlNBX1BLQ1NfVjIxCitSU0FfUFJJVkFURSBNQkVEVExTX1JTQV9QUklWQVRFCitSU0FfUFVCTElDIE1CRURUTFNfUlNBX1BVQkxJQworUlNBX1NBTFRfTEVOX0FOWSBNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlkKK1JTQV9TSUdOIE1CRURUTFNfUlNBX1NJR04KK1NTTF9BTEVSVF9MRVZFTF9GQVRBTCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTAorU1NMX0FMRVJUX0xFVkVMX1dBUk5JTkcgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfV0FSTklORworU1NMX0FMRVJUX01TR19BQ0NFU1NfREVOSUVEIE1CRURUTFNfU1NMX0FMRVJUX01TR19BQ0NFU1NfREVOSUVECitTU0xfQUxFUlRfTVNHX0JBRF9DRVJUIE1CRURUTFNfU1NMX0FMRVJUX01TR19CQURfQ0VSVAorU1NMX0FMRVJUX01TR19CQURfUkVDT1JEX01BQyBNQkVEVExTX1NTTF9BTEVSVF9NU0dfQkFEX1JFQ09SRF9NQUMKK1NTTF9BTEVSVF9NU0dfQ0VSVF9FWFBJUkVEIE1CRURUTFNfU1NMX0FMRVJUX01TR19DRVJUX0VYUElSRUQKK1NTTF9BTEVSVF9NU0dfQ0VSVF9SRVZPS0VEIE1CRURUTFNfU1NMX0FMRVJUX01TR19DRVJUX1JFVk9LRUQKK1NTTF9BTEVSVF9NU0dfQ0VSVF9VTktOT1dOIE1CRURUTFNfU1NMX0FMRVJUX01TR19DRVJUX1VOS05PV04KK1NTTF9BTEVSVF9NU0dfQ0xPU0VfTk9USUZZIE1CRURUTFNfU1NMX0FMRVJUX01TR19DTE9TRV9OT1RJRlkKK1NTTF9BTEVSVF9NU0dfREVDT0RFX0VSUk9SIE1CRURUTFNfU1NMX0FMRVJUX01TR19ERUNPREVfRVJST1IKK1NTTF9BTEVSVF9NU0dfREVDT01QUkVTU0lPTl9GQUlMVVJFIE1CRURUTFNfU1NMX0FMRVJUX01TR19ERUNPTVBSRVNTSU9OX0ZBSUxVUkUKK1NTTF9BTEVSVF9NU0dfREVDUllQVElPTl9GQUlMRUQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ1JZUFRJT05fRkFJTEVECitTU0xfQUxFUlRfTVNHX0RFQ1JZUFRfRVJST1IgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ1JZUFRfRVJST1IKK1NTTF9BTEVSVF9NU0dfRVhQT1JUX1JFU1RSSUNUSU9OIE1CRURUTFNfU1NMX0FMRVJUX01TR19FWFBPUlRfUkVTVFJJQ1RJT04KK1NTTF9BTEVSVF9NU0dfSEFORFNIQUtFX0ZBSUxVUkUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0hBTkRTSEFLRV9GQUlMVVJFCitTU0xfQUxFUlRfTVNHX0lMTEVHQUxfUEFSQU1FVEVSIE1CRURUTFNfU1NMX0FMRVJUX01TR19JTExFR0FMX1BBUkFNRVRFUgorU1NMX0FMRVJUX01TR19JTkFQUk9QUklBVEVfRkFMTEJBQ0sgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0lOQVBST1BSSUFURV9GQUxMQkFDSworU1NMX0FMRVJUX01TR19JTlNVRkZJQ0lFTlRfU0VDVVJJVFkgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0lOU1VGRklDSUVOVF9TRUNVUklUWQorU1NMX0FMRVJUX01TR19JTlRFUk5BTF9FUlJPUiBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSU5URVJOQUxfRVJST1IKK1NTTF9BTEVSVF9NU0dfTk9fQVBQTElDQVRJT05fUFJPVE9DT0wgTUJFRFRMU19TU0xfQUxFUlRfTVNHX05PX0FQUExJQ0FUSU9OX1BST1RPQ09MCitTU0xfQUxFUlRfTVNHX05PX0NFUlQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX05PX0NFUlQKK1NTTF9BTEVSVF9NU0dfTk9fUkVORUdPVElBVElPTiBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fUkVORUdPVElBVElPTgorU1NMX0FMRVJUX01TR19QUk9UT0NPTF9WRVJTSU9OIE1CRURUTFNfU1NMX0FMRVJUX01TR19QUk9UT0NPTF9WRVJTSU9OCitTU0xfQUxFUlRfTVNHX1JFQ09SRF9PVkVSRkxPVyBNQkVEVExTX1NTTF9BTEVSVF9NU0dfUkVDT1JEX09WRVJGTE9XCitTU0xfQUxFUlRfTVNHX1VORVhQRUNURURfTUVTU0FHRSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5FWFBFQ1RFRF9NRVNTQUdFCitTU0xfQUxFUlRfTVNHX1VOS05PV05fQ0EgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOS05PV05fQ0EKK1NTTF9BTEVSVF9NU0dfVU5LTk9XTl9QU0tfSURFTlRJVFkgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOS05PV05fUFNLX0lERU5USVRZCitTU0xfQUxFUlRfTVNHX1VOUkVDT0dOSVpFRF9OQU1FIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTlJFQ09HTklaRURfTkFNRQorU1NMX0FMRVJUX01TR19VTlNVUFBPUlRFRF9DRVJUIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTlNVUFBPUlRFRF9DRVJUCitTU0xfQUxFUlRfTVNHX1VOU1VQUE9SVEVEX0VYVCBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5TVVBQT1JURURfRVhUCitTU0xfQUxFUlRfTVNHX1VTRVJfQ0FOQ0VMRUQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VTRVJfQ0FOQ0VMRUQKK1NTTF9BTlRJX1JFUExBWV9ESVNBQkxFRCBNQkVEVExTX1NTTF9BTlRJX1JFUExBWV9ESVNBQkxFRAorU1NMX0FOVElfUkVQTEFZX0VOQUJMRUQgTUJFRFRMU19TU0xfQU5USV9SRVBMQVlfRU5BQkxFRAorU1NMX0FSQzRfRElTQUJMRUQgTUJFRFRMU19TU0xfQVJDNF9ESVNBQkxFRAorU1NMX0FSQzRfRU5BQkxFRCBNQkVEVExTX1NTTF9BUkM0X0VOQUJMRUQKK1NTTF9CVUZGRVJfTEVOIE1CRURUTFNfU1NMX0JVRkZFUl9MRU4KK1NTTF9DQUNIRV9ERUZBVUxUX01BWF9FTlRSSUVTIE1CRURUTFNfU1NMX0NBQ0hFX0RFRkFVTFRfTUFYX0VOVFJJRVMKK1NTTF9DQUNIRV9ERUZBVUxUX1RJTUVPVVQgTUJFRFRMU19TU0xfQ0FDSEVfREVGQVVMVF9USU1FT1VUCitTU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRElTQUJMRUQgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRElTQUJMRUQKK1NTTF9DQkNfUkVDT1JEX1NQTElUVElOR19FTkFCTEVEIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0VOQUJMRUQKK1NTTF9DRVJUSUZJQ0FURV9SRVFVRVNUIE1CRURUTFNfU1NMX0NFUlRJRklDQVRFX1JFUVVFU1QKK1NTTF9DRVJUSUZJQ0FURV9WRVJJRlkgTUJFRFRMU19TU0xfQ0VSVElGSUNBVEVfVkVSSUZZCitTU0xfQ0VSVF9UWVBFX0VDRFNBX1NJR04gTUJFRFRMU19TU0xfQ0VSVF9UWVBFX0VDRFNBX1NJR04KK1NTTF9DRVJUX1RZUEVfUlNBX1NJR04gTUJFRFRMU19TU0xfQ0VSVF9UWVBFX1JTQV9TSUdOCitTU0xfQ0hBTk5FTF9JTkJPVU5EIE1CRURUTFNfU1NMX0NIQU5ORUxfSU5CT1VORAorU1NMX0NIQU5ORUxfT1VUQk9VTkQgTUJFRFRMU19TU0xfQ0hBTk5FTF9PVVRCT1VORAorU1NMX0NJUEhFUlNVSVRFUyBNQkVEVExTX1NTTF9DSVBIRVJTVUlURVMKK1NTTF9DTElFTlRfQ0VSVElGSUNBVEUgTUJFRFRMU19TU0xfQ0xJRU5UX0NFUlRJRklDQVRFCitTU0xfQ0xJRU5UX0NIQU5HRV9DSVBIRVJfU1BFQyBNQkVEVExTX1NTTF9DTElFTlRfQ0hBTkdFX0NJUEhFUl9TUEVDCitTU0xfQ0xJRU5UX0ZJTklTSEVEIE1CRURUTFNfU1NMX0NMSUVOVF9GSU5JU0hFRAorU1NMX0NMSUVOVF9IRUxMTyBNQkVEVExTX1NTTF9DTElFTlRfSEVMTE8KK1NTTF9DTElFTlRfS0VZX0VYQ0hBTkdFIE1CRURUTFNfU1NMX0NMSUVOVF9LRVlfRVhDSEFOR0UKK1NTTF9DT01QUkVTU0lPTl9BREQgTUJFRFRMU19TU0xfQ09NUFJFU1NJT05fQURECitTU0xfQ09NUFJFU1NfREVGTEFURSBNQkVEVExTX1NTTF9DT01QUkVTU19ERUZMQVRFCitTU0xfQ09NUFJFU1NfTlVMTCBNQkVEVExTX1NTTF9DT01QUkVTU19OVUxMCitTU0xfREVCVUdfQlVGIE1CRURUTFNfU1NMX0RFQlVHX0JVRgorU1NMX0RFQlVHX0NSVCBNQkVEVExTX1NTTF9ERUJVR19DUlQKK1NTTF9ERUJVR19FQ1AgTUJFRFRMU19TU0xfREVCVUdfRUNQCitTU0xfREVCVUdfTVBJIE1CRURUTFNfU1NMX0RFQlVHX01QSQorU1NMX0RFQlVHX01TRyBNQkVEVExTX1NTTF9ERUJVR19NU0cKK1NTTF9ERUJVR19SRVQgTUJFRFRMU19TU0xfREVCVUdfUkVUCitTU0xfREVGQVVMVF9USUNLRVRfTElGRVRJTUUgTUJFRFRMU19TU0xfREVGQVVMVF9USUNLRVRfTElGRVRJTUUKK1NTTF9EVExTX1RJTUVPVVRfREZMX01BWCBNQkVEVExTX1NTTF9EVExTX1RJTUVPVVRfREZMX01BWAorU1NMX0RUTFNfVElNRU9VVF9ERkxfTUlOIE1CRURUTFNfU1NMX0RUTFNfVElNRU9VVF9ERkxfTUlOCitTU0xfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPIE1CRURUTFNfU1NMX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTworU1NMX0VUTV9ESVNBQkxFRCBNQkVEVExTX1NTTF9FVE1fRElTQUJMRUQKK1NTTF9FVE1fRU5BQkxFRCBNQkVEVExTX1NTTF9FVE1fRU5BQkxFRAorU1NMX0VYVEVOREVEX01TX0RJU0FCTEVEIE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0RJU0FCTEVECitTU0xfRVhURU5ERURfTVNfRU5BQkxFRCBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19FTkFCTEVECitTU0xfRkFMTEJBQ0tfU0NTViBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWCitTU0xfRkxVU0hfQlVGRkVSUyBNQkVEVExTX1NTTF9GTFVTSF9CVUZGRVJTCitTU0xfSEFORFNIQUtFX09WRVIgTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIKK1NTTF9IQU5EU0hBS0VfV1JBUFVQIE1CRURUTFNfU1NMX0hBTkRTSEFLRV9XUkFQVVAKK1NTTF9IQVNIX01ENSBNQkVEVExTX1NTTF9IQVNIX01ENQorU1NMX0hBU0hfTk9ORSBNQkVEVExTX1NTTF9IQVNIX05PTkUKK1NTTF9IQVNIX1NIQTEgTUJFRFRMU19TU0xfSEFTSF9TSEExCitTU0xfSEFTSF9TSEEyMjQgTUJFRFRMU19TU0xfSEFTSF9TSEEyMjQKK1NTTF9IQVNIX1NIQTI1NiBNQkVEVExTX1NTTF9IQVNIX1NIQTI1NgorU1NMX0hBU0hfU0hBMzg0IE1CRURUTFNfU1NMX0hBU0hfU0hBMzg0CitTU0xfSEFTSF9TSEE1MTIgTUJFRFRMU19TU0xfSEFTSF9TSEE1MTIKK1NTTF9IRUxMT19SRVFVRVNUIE1CRURUTFNfU1NMX0hFTExPX1JFUVVFU1QKK1NTTF9IU19DRVJUSUZJQ0FURSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURQorU1NMX0hTX0NFUlRJRklDQVRFX1JFUVVFU1QgTUJFRFRMU19TU0xfSFNfQ0VSVElGSUNBVEVfUkVRVUVTVAorU1NMX0hTX0NFUlRJRklDQVRFX1ZFUklGWSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURV9WRVJJRlkKK1NTTF9IU19DTElFTlRfSEVMTE8gTUJFRFRMU19TU0xfSFNfQ0xJRU5UX0hFTExPCitTU0xfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSBNQkVEVExTX1NTTF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFCitTU0xfSFNfRklOSVNIRUQgTUJFRFRMU19TU0xfSFNfRklOSVNIRUQKK1NTTF9IU19IRUxMT19SRVFVRVNUIE1CRURUTFNfU1NMX0hTX0hFTExPX1JFUVVFU1QKK1NTTF9IU19IRUxMT19WRVJJRllfUkVRVUVTVCBNQkVEVExTX1NTTF9IU19IRUxMT19WRVJJRllfUkVRVUVTVAorU1NMX0hTX05FV19TRVNTSU9OX1RJQ0tFVCBNQkVEVExTX1NTTF9IU19ORVdfU0VTU0lPTl9USUNLRVQKK1NTTF9IU19TRVJWRVJfSEVMTE8gTUJFRFRMU19TU0xfSFNfU0VSVkVSX0hFTExPCitTU0xfSFNfU0VSVkVSX0hFTExPX0RPTkUgTUJFRFRMU19TU0xfSFNfU0VSVkVSX0hFTExPX0RPTkUKK1NTTF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFIE1CRURUTFNfU1NMX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UKK1NTTF9JTklUSUFMX0hBTkRTSEFLRSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRQorU1NMX0lTX0NMSUVOVCBNQkVEVExTX1NTTF9JU19DTElFTlQKK1NTTF9JU19GQUxMQkFDSyBNQkVEVExTX1NTTF9JU19GQUxMQkFDSworU1NMX0lTX05PVF9GQUxMQkFDSyBNQkVEVExTX1NTTF9JU19OT1RfRkFMTEJBQ0sKK1NTTF9JU19TRVJWRVIgTUJFRFRMU19TU0xfSVNfU0VSVkVSCitTU0xfTEVHQUNZX0FMTE9XX1JFTkVHT1RJQVRJT04gTUJFRFRMU19TU0xfTEVHQUNZX0FMTE9XX1JFTkVHT1RJQVRJT04KK1NTTF9MRUdBQ1lfQlJFQUtfSEFORFNIQUtFIE1CRURUTFNfU1NMX0xFR0FDWV9CUkVBS19IQU5EU0hBS0UKK1NTTF9MRUdBQ1lfTk9fUkVORUdPVElBVElPTiBNQkVEVExTX1NTTF9MRUdBQ1lfTk9fUkVORUdPVElBVElPTgorU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OCitTU0xfTUFDX0FERCBNQkVEVExTX1NTTF9NQUNfQURECitTU0xfTUFKT1JfVkVSU0lPTl8zIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMworU1NMX01BWF9DT05URU5UX0xFTiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4KK1NTTF9NQVhfRlJBR19MRU5fMTAyNCBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMTAyNAorU1NMX01BWF9GUkFHX0xFTl8yMDQ4IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl8yMDQ4CitTU0xfTUFYX0ZSQUdfTEVOXzQwOTYgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzQwOTYKK1NTTF9NQVhfRlJBR19MRU5fNTEyIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl81MTIKK1NTTF9NQVhfRlJBR19MRU5fSU5WQUxJRCBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fSU5WQUxJRAorU1NMX01BWF9GUkFHX0xFTl9OT05FIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9OT05FCitTU0xfTUFYX01BSk9SX1ZFUlNJT04gTUJFRFRMU19TU0xfTUFYX01BSk9SX1ZFUlNJT04KK1NTTF9NQVhfTUlOT1JfVkVSU0lPTiBNQkVEVExTX1NTTF9NQVhfTUlOT1JfVkVSU0lPTgorU1NMX01JTk9SX1ZFUlNJT05fMCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAKK1NTTF9NSU5PUl9WRVJTSU9OXzEgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xCitTU0xfTUlOT1JfVkVSU0lPTl8yIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMgorU1NMX01JTk9SX1ZFUlNJT05fMyBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMKK1NTTF9NSU5fTUFKT1JfVkVSU0lPTiBNQkVEVExTX1NTTF9NSU5fTUFKT1JfVkVSU0lPTgorU1NMX01JTl9NSU5PUl9WRVJTSU9OIE1CRURUTFNfU1NMX01JTl9NSU5PUl9WRVJTSU9OCitTU0xfTVNHX0FMRVJUIE1CRURUTFNfU1NMX01TR19BTEVSVAorU1NMX01TR19BUFBMSUNBVElPTl9EQVRBIE1CRURUTFNfU1NMX01TR19BUFBMSUNBVElPTl9EQVRBCitTU0xfTVNHX0NIQU5HRV9DSVBIRVJfU1BFQyBNQkVEVExTX1NTTF9NU0dfQ0hBTkdFX0NJUEhFUl9TUEVDCitTU0xfTVNHX0hBTkRTSEFLRSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFCitTU0xfUEFERElOR19BREQgTUJFRFRMU19TU0xfUEFERElOR19BREQKK1NTTF9SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04KK1NTTF9SRU5FR09USUFUSU9OX0RJU0FCTEVEIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRElTQUJMRUQKK1NTTF9SRU5FR09USUFUSU9OX0RPTkUgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9ET05FCitTU0xfUkVORUdPVElBVElPTl9FTkFCTEVEIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRU5BQkxFRAorU1NMX1JFTkVHT1RJQVRJT05fTk9UX0VORk9SQ0VEIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fTk9UX0VORk9SQ0VECitTU0xfUkVORUdPVElBVElPTl9QRU5ESU5HIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fUEVORElORworU1NMX1JFTkVHT19NQVhfUkVDT1JEU19ERUZBVUxUIE1CRURUTFNfU1NMX1JFTkVHT19NQVhfUkVDT1JEU19ERUZBVUxUCitTU0xfUkVUUkFOU19GSU5JU0hFRCBNQkVEVExTX1NTTF9SRVRSQU5TX0ZJTklTSEVECitTU0xfUkVUUkFOU19QUkVQQVJJTkcgTUJFRFRMU19TU0xfUkVUUkFOU19QUkVQQVJJTkcKK1NTTF9SRVRSQU5TX1NFTkRJTkcgTUJFRFRMU19TU0xfUkVUUkFOU19TRU5ESU5HCitTU0xfUkVUUkFOU19XQUlUSU5HIE1CRURUTFNfU1NMX1JFVFJBTlNfV0FJVElORworU1NMX1NFQ1VSRV9SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX1NFQ1VSRV9SRU5FR09USUFUSU9OCitTU0xfU0VSVkVSX0NFUlRJRklDQVRFIE1CRURUTFNfU1NMX1NFUlZFUl9DRVJUSUZJQ0FURQorU1NMX1NFUlZFUl9DSEFOR0VfQ0lQSEVSX1NQRUMgTUJFRFRMU19TU0xfU0VSVkVSX0NIQU5HRV9DSVBIRVJfU1BFQworU1NMX1NFUlZFUl9GSU5JU0hFRCBNQkVEVExTX1NTTF9TRVJWRVJfRklOSVNIRUQKK1NTTF9TRVJWRVJfSEVMTE8gTUJFRFRMU19TU0xfU0VSVkVSX0hFTExPCitTU0xfU0VSVkVSX0hFTExPX0RPTkUgTUJFRFRMU19TU0xfU0VSVkVSX0hFTExPX0RPTkUKK1NTTF9TRVJWRVJfSEVMTE9fVkVSSUZZX1JFUVVFU1RfU0VOVCBNQkVEVExTX1NTTF9TRVJWRVJfSEVMTE9fVkVSSUZZX1JFUVVFU1RfU0VOVAorU1NMX1NFUlZFUl9LRVlfRVhDSEFOR0UgTUJFRFRMU19TU0xfU0VSVkVSX0tFWV9FWENIQU5HRQorU1NMX1NFUlZFUl9ORVdfU0VTU0lPTl9USUNLRVQgTUJFRFRMU19TU0xfU0VSVkVSX05FV19TRVNTSU9OX1RJQ0tFVAorU1NMX1NFU1NJT05fVElDS0VUU19ESVNBQkxFRCBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFNfRElTQUJMRUQKK1NTTF9TRVNTSU9OX1RJQ0tFVFNfRU5BQkxFRCBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFNfRU5BQkxFRAorU1NMX1NJR19BTk9OIE1CRURUTFNfU1NMX1NJR19BTk9OCitTU0xfU0lHX0VDRFNBIE1CRURUTFNfU1NMX1NJR19FQ0RTQQorU1NMX1NJR19SU0EgTUJFRFRMU19TU0xfU0lHX1JTQQorU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0KK1NTTF9UUkFOU1BPUlRfU1RSRUFNIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0KK1NTTF9UUlVOQ0FURURfSE1BQ19MRU4gTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUNfTEVOCitTU0xfVFJVTkNfSE1BQ19ESVNBQkxFRCBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0RJU0FCTEVECitTU0xfVFJVTkNfSE1BQ19FTkFCTEVEIE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRU5BQkxFRAorU1NMX1ZFUklGWV9EQVRBX01BWF9MRU4gTUJFRFRMU19TU0xfVkVSSUZZX0RBVEFfTUFYX0xFTgorU1NMX1ZFUklGWV9OT05FIE1CRURUTFNfU1NMX1ZFUklGWV9OT05FCitTU0xfVkVSSUZZX09QVElPTkFMIE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTAorU1NMX1ZFUklGWV9SRVFVSVJFRCBNQkVEVExTX1NTTF9WRVJJRllfUkVRVUlSRUQKK1RMU19ESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQ00KK1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQ01fOCBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQ01fOAorVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NDTSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ00KK1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOCBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOAorVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKK1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CitUTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKK1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBCitUTFNfREhFX1BTS19XSVRIX05VTExfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NgorVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NCBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQKK1RMU19ESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCitUTFNfREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKK1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKK1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKK1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQ00gTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0NNCitUTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0NNXzggTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0NNXzgKK1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKK1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKK1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYKK1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ00gTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0NNCitUTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0NNXzggTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0NNXzgKK1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKK1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCitUTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKK1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCitUTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKK1RMU19ESEVfUlNBX1dJVEhfREVTX0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0RFU19DQkNfU0hBCitUTFNfRUNESEVfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCitUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0NNIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQ00KK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0NNXzggTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NDTV84CitUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CitUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NDTSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0NNCitUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NDTV84IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQ01fOAorVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CitUTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CitUTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CitUTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CitUTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CitUTFNfRUNESEVfRUNEU0FfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX05VTExfU0hBCitUTFNfRUNESEVfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBCitUTFNfRUNESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCitUTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKK1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCitUTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CitUTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKK1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQQorVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMjU2CitUTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQKK1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorVExTX0VDREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKK1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CitUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKK1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CitUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CitUTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKK1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CitUTFNfRUNESEVfUlNBX1dJVEhfTlVMTF9TSEEgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfTlVMTF9TSEEKK1RMU19FQ0RIRV9SU0FfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9SQzRfMTI4X1NIQQorVExTX0VDREhfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCitUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCitUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CitUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CitUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCitUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CitUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CitUTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKK1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CitUTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorVExTX0VDREhfRUNEU0FfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEKK1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBCitUTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCitUTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKK1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCitUTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKK1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorVExTX0VDREhfUlNBX1dJVEhfTlVMTF9TSEEgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9OVUxMX1NIQQorVExTX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQQorVExTX0VYVF9BTFBOIE1CRURUTFNfVExTX0VYVF9BTFBOCitUTFNfRVhUX0VOQ1JZUFRfVEhFTl9NQUMgTUJFRFRMU19UTFNfRVhUX0VOQ1JZUFRfVEhFTl9NQUMKK1RMU19FWFRfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCBNQkVEVExTX1RMU19FWFRfRVhURU5ERURfTUFTVEVSX1NFQ1JFVAorVExTX0VYVF9NQVhfRlJBR01FTlRfTEVOR1RIIE1CRURUTFNfVExTX0VYVF9NQVhfRlJBR01FTlRfTEVOR1RICitUTFNfRVhUX1JFTkVHT1RJQVRJT05fSU5GTyBNQkVEVExTX1RMU19FWFRfUkVORUdPVElBVElPTl9JTkZPCitUTFNfRVhUX1NFUlZFUk5BTUUgTUJFRFRMU19UTFNfRVhUX1NFUlZFUk5BTUUKK1RMU19FWFRfU0VSVkVSTkFNRV9IT1NUTkFNRSBNQkVEVExTX1RMU19FWFRfU0VSVkVSTkFNRV9IT1NUTkFNRQorVExTX0VYVF9TRVNTSU9OX1RJQ0tFVCBNQkVEVExTX1RMU19FWFRfU0VTU0lPTl9USUNLRVQKK1RMU19FWFRfU0lHX0FMRyBNQkVEVExTX1RMU19FWFRfU0lHX0FMRworVExTX0VYVF9TVVBQT1JURURfRUxMSVBUSUNfQ1VSVkVTIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfRUxMSVBUSUNfQ1VSVkVTCitUTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUUworVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUU19QUkVTRU5UIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUU19QUkVTRU5UCitUTFNfRVhUX1RSVU5DQVRFRF9ITUFDIE1CRURUTFNfVExTX0VYVF9UUlVOQ0FURURfSE1BQworVExTX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKK1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CitUTFNfUFNLX1dJVEhfQUVTXzEyOF9DQ00gTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQ00KK1RMU19QU0tfV0lUSF9BRVNfMTI4X0NDTV84IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNXzgKK1RMU19QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CitUTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKK1RMU19QU0tfV0lUSF9BRVNfMjU2X0NDTSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NDTQorVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNXzggTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOAorVExTX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKK1RMU19QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CitUTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKK1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorVExTX1BTS19XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBCitUTFNfUFNLX1dJVEhfTlVMTF9TSEEyNTYgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEyNTYKK1RMU19QU0tfV0lUSF9OVUxMX1NIQTM4NCBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQTM4NAorVExTX1BTS19XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX1BTS19XSVRIX1JDNF8xMjhfU0hBCitUTFNfUlNBX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKK1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKK1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKK1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKK1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKK1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKK1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKK1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CitUTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKK1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CitUTFNfUlNBX1BTS19XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQQorVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEyNTYKK1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEzODQgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMzg0CitUTFNfUlNBX1BTS19XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorVExTX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKK1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CitUTFNfUlNBX1dJVEhfQUVTXzEyOF9DQ00gTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQ00KK1RMU19SU0FfV0lUSF9BRVNfMTI4X0NDTV84IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0NNXzgKK1RMU19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CitUTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYKK1RMU19SU0FfV0lUSF9BRVNfMjU2X0NDTSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NDTQorVExTX1JTQV9XSVRIX0FFU18yNTZfQ0NNXzggTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOAorVExTX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKK1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQorVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CitUTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKK1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQorVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2CitUTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKK1RMU19SU0FfV0lUSF9ERVNfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF9ERVNfQ0JDX1NIQQorVExTX1JTQV9XSVRIX05VTExfTUQ1IE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfTUQ1CitUTFNfUlNBX1dJVEhfTlVMTF9TSEEgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEKK1RMU19SU0FfV0lUSF9OVUxMX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX1NIQTI1NgorVExTX1JTQV9XSVRIX1JDNF8xMjhfTUQ1IE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfTUQ1CitUTFNfUlNBX1dJVEhfUkM0XzEyOF9TSEEgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9TSEEKK1g1MDlfQ1JUX1ZFUlNJT05fMSBNQkVEVExTX1g1MDlfQ1JUX1ZFUlNJT05fMQorWDUwOV9DUlRfVkVSU0lPTl8yIE1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8yCitYNTA5X0NSVF9WRVJTSU9OXzMgTUJFRFRMU19YNTA5X0NSVF9WRVJTSU9OXzMKK1g1MDlfRk9STUFUX0RFUiBNQkVEVExTX1g1MDlfRk9STUFUX0RFUgorWDUwOV9GT1JNQVRfUEVNIE1CRURUTFNfWDUwOV9GT1JNQVRfUEVNCitYNTA5X01BWF9ETl9OQU1FX1NJWkUgTUJFRFRMU19YNTA5X01BWF9ETl9OQU1FX1NJWkUKK1g1MDlfUkZDNTI4MF9NQVhfU0VSSUFMX0xFTiBNQkVEVExTX1g1MDlfUkZDNTI4MF9NQVhfU0VSSUFMX0xFTgorWDUwOV9SRkM1MjgwX1VUQ19USU1FX0xFTiBNQkVEVExTX1g1MDlfUkZDNTI4MF9VVENfVElNRV9MRU4KK1hURUFfREVDUllQVCBNQkVEVExTX1hURUFfREVDUllQVAorWFRFQV9FTkNSWVBUIE1CRURUTFNfWFRFQV9FTkNSWVBUCitfYXNuMV9iaXRzdHJpbmcgbWJlZHRsc19hc24xX2JpdHN0cmluZworX2FzbjFfYnVmIG1iZWR0bHNfYXNuMV9idWYKK19hc24xX25hbWVkX2RhdGEgbWJlZHRsc19hc24xX25hbWVkX2RhdGEKK19hc24xX3NlcXVlbmNlIG1iZWR0bHNfYXNuMV9zZXF1ZW5jZQorX3NzbF9jYWNoZV9jb250ZXh0IG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQKK19zc2xfY2FjaGVfZW50cnkgbWJlZHRsc19zc2xfY2FjaGVfZW50cnkKK19zc2xfY2lwaGVyc3VpdGVfdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90Citfc3NsX2NvbnRleHQgbWJlZHRsc19zc2xfY29udGV4dAorX3NzbF9mbGlnaHRfaXRlbSBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbQorX3NzbF9oYW5kc2hha2VfcGFyYW1zIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9wYXJhbXMKK19zc2xfa2V5X2NlcnQgbWJlZHRsc19zc2xfa2V5X2NlcnQKK19zc2xfcHJlbWFzdGVyX3NlY3JldCBtYmVkdGxzX3NzbF9wcmVtYXN0ZXJfc2VjcmV0Citfc3NsX3Nlc3Npb24gbWJlZHRsc19zc2xfc2Vzc2lvbgorX3NzbF90aWNrZXRfa2V5cyBtYmVkdGxzX3NzbF90aWNrZXRfa2V5cworX3NzbF90cmFuc2Zvcm0gbWJlZHRsc19zc2xfdHJhbnNmb3JtCitfeDUwOV9jcmwgbWJlZHRsc194NTA5X2NybAorX3g1MDlfY3JsX2VudHJ5IG1iZWR0bHNfeDUwOV9jcmxfZW50cnkKK194NTA5X2NydCBtYmVkdGxzX3g1MDlfY3J0CitfeDUwOV9jc3IgbWJlZHRsc194NTA5X2NzcgorX3g1MDlfdGltZSBtYmVkdGxzX3g1MDlfdGltZQorX3g1MDl3cml0ZV9jZXJ0IG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQKK194NTA5d3JpdGVfY3NyIG1iZWR0bHNfeDUwOXdyaXRlX2NzcgorYWVzX2NvbnRleHQgbWJlZHRsc19hZXNfY29udGV4dAorYWVzX2NyeXB0X2NiYyBtYmVkdGxzX2Flc19jcnlwdF9jYmMKK2Flc19jcnlwdF9jZmIxMjggbWJlZHRsc19hZXNfY3J5cHRfY2ZiMTI4CithZXNfY3J5cHRfY2ZiOCBtYmVkdGxzX2Flc19jcnlwdF9jZmI4CithZXNfY3J5cHRfY3RyIG1iZWR0bHNfYWVzX2NyeXB0X2N0cgorYWVzX2NyeXB0X2VjYiBtYmVkdGxzX2Flc19jcnlwdF9lY2IKK2Flc19mcmVlIG1iZWR0bHNfYWVzX2ZyZWUKK2Flc19pbml0IG1iZWR0bHNfYWVzX2luaXQKK2Flc19zZWxmX3Rlc3QgbWJlZHRsc19hZXNfc2VsZl90ZXN0CithZXNfc2V0a2V5X2RlYyBtYmVkdGxzX2Flc19zZXRrZXlfZGVjCithZXNfc2V0a2V5X2VuYyBtYmVkdGxzX2Flc19zZXRrZXlfZW5jCithZXNuaV9jcnlwdF9lY2IgbWJlZHRsc19hZXNuaV9jcnlwdF9lY2IKK2Flc25pX2djbV9tdWx0IG1iZWR0bHNfYWVzbmlfZ2NtX211bHQKK2Flc25pX2ludmVyc2Vfa2V5IG1iZWR0bHNfYWVzbmlfaW52ZXJzZV9rZXkKK2Flc25pX3NldGtleV9lbmMgbWJlZHRsc19hZXNuaV9zZXRrZXlfZW5jCithZXNuaV9zdXBwb3J0cyBtYmVkdGxzX2Flc25pX2hhc19zdXBwb3J0CithbGFybWVkIG1iZWR0bHNfdGltaW5nX2FsYXJtZWQKK2FyYzRfY29udGV4dCBtYmVkdGxzX2FyYzRfY29udGV4dAorYXJjNF9jcnlwdCBtYmVkdGxzX2FyYzRfY3J5cHQKK2FyYzRfZnJlZSBtYmVkdGxzX2FyYzRfZnJlZQorYXJjNF9pbml0IG1iZWR0bHNfYXJjNF9pbml0CithcmM0X3NlbGZfdGVzdCBtYmVkdGxzX2FyYzRfc2VsZl90ZXN0CithcmM0X3NldHVwIG1iZWR0bHNfYXJjNF9zZXR1cAorYXNuMV9iaXRzdHJpbmcgbWJlZHRsc19hc24xX2JpdHN0cmluZworYXNuMV9idWYgbWJlZHRsc19hc24xX2J1ZgorYXNuMV9maW5kX25hbWVkX2RhdGEgbWJlZHRsc19hc24xX2ZpbmRfbmFtZWRfZGF0YQorYXNuMV9mcmVlX25hbWVkX2RhdGEgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YQorYXNuMV9mcmVlX25hbWVkX2RhdGFfbGlzdCBtYmVkdGxzX2FzbjFfZnJlZV9uYW1lZF9kYXRhX2xpc3QKK2FzbjFfZ2V0X2FsZyBtYmVkdGxzX2FzbjFfZ2V0X2FsZworYXNuMV9nZXRfYWxnX251bGwgbWJlZHRsc19hc24xX2dldF9hbGdfbnVsbAorYXNuMV9nZXRfYml0c3RyaW5nIG1iZWR0bHNfYXNuMV9nZXRfYml0c3RyaW5nCithc24xX2dldF9iaXRzdHJpbmdfbnVsbCBtYmVkdGxzX2FzbjFfZ2V0X2JpdHN0cmluZ19udWxsCithc24xX2dldF9ib29sIG1iZWR0bHNfYXNuMV9nZXRfYm9vbAorYXNuMV9nZXRfaW50IG1iZWR0bHNfYXNuMV9nZXRfaW50Cithc24xX2dldF9sZW4gbWJlZHRsc19hc24xX2dldF9sZW4KK2FzbjFfZ2V0X21waSBtYmVkdGxzX2FzbjFfZ2V0X21waQorYXNuMV9nZXRfc2VxdWVuY2Vfb2YgbWJlZHRsc19hc24xX2dldF9zZXF1ZW5jZV9vZgorYXNuMV9nZXRfdGFnIG1iZWR0bHNfYXNuMV9nZXRfdGFnCithc24xX25hbWVkX2RhdGEgbWJlZHRsc19hc24xX25hbWVkX2RhdGEKK2FzbjFfc2VxdWVuY2UgbWJlZHRsc19hc24xX3NlcXVlbmNlCithc24xX3N0b3JlX25hbWVkX2RhdGEgbWJlZHRsc19hc24xX3N0b3JlX25hbWVkX2RhdGEKK2FzbjFfd3JpdGVfYWxnb3JpdGhtX2lkZW50aWZpZXIgbWJlZHRsc19hc24xX3dyaXRlX2FsZ29yaXRobV9pZGVudGlmaWVyCithc24xX3dyaXRlX2JpdHN0cmluZyBtYmVkdGxzX2FzbjFfd3JpdGVfYml0c3RyaW5nCithc24xX3dyaXRlX2Jvb2wgbWJlZHRsc19hc24xX3dyaXRlX2Jvb2wKK2FzbjFfd3JpdGVfaWE1X3N0cmluZyBtYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZworYXNuMV93cml0ZV9pbnQgbWJlZHRsc19hc24xX3dyaXRlX2ludAorYXNuMV93cml0ZV9sZW4gbWJlZHRsc19hc24xX3dyaXRlX2xlbgorYXNuMV93cml0ZV9tcGkgbWJlZHRsc19hc24xX3dyaXRlX21waQorYXNuMV93cml0ZV9udWxsIG1iZWR0bHNfYXNuMV93cml0ZV9udWxsCithc24xX3dyaXRlX29jdGV0X3N0cmluZyBtYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nCithc24xX3dyaXRlX29pZCBtYmVkdGxzX2FzbjFfd3JpdGVfb2lkCithc24xX3dyaXRlX3ByaW50YWJsZV9zdHJpbmcgbWJlZHRsc19hc24xX3dyaXRlX3ByaW50YWJsZV9zdHJpbmcKK2FzbjFfd3JpdGVfcmF3X2J1ZmZlciBtYmVkdGxzX2FzbjFfd3JpdGVfcmF3X2J1ZmZlcgorYXNuMV93cml0ZV90YWcgbWJlZHRsc19hc24xX3dyaXRlX3RhZworYmFzZTY0X2RlY29kZSBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUKK2Jhc2U2NF9lbmNvZGUgbWJlZHRsc19iYXNlNjRfZW5jb2RlCitiYXNlNjRfc2VsZl90ZXN0IG1iZWR0bHNfYmFzZTY0X3NlbGZfdGVzdAorYmxvd2Zpc2hfY29udGV4dCBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQKK2Jsb3dmaXNoX2NyeXB0X2NiYyBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NiYworYmxvd2Zpc2hfY3J5cHRfY2ZiNjQgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jZmI2NAorYmxvd2Zpc2hfY3J5cHRfY3RyIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY3RyCitibG93ZmlzaF9jcnlwdF9lY2IgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9lY2IKK2Jsb3dmaXNoX2ZyZWUgbWJlZHRsc19ibG93ZmlzaF9mcmVlCitibG93ZmlzaF9pbml0IG1iZWR0bHNfYmxvd2Zpc2hfaW5pdAorYmxvd2Zpc2hfc2V0a2V5IG1iZWR0bHNfYmxvd2Zpc2hfc2V0a2V5CitjYW1lbGxpYV9jb250ZXh0IG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dAorY2FtZWxsaWFfY3J5cHRfY2JjIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2JjCitjYW1lbGxpYV9jcnlwdF9jZmIxMjggbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jZmIxMjgKK2NhbWVsbGlhX2NyeXB0X2N0ciBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2N0cgorY2FtZWxsaWFfY3J5cHRfZWNiIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiCitjYW1lbGxpYV9mcmVlIG1iZWR0bHNfY2FtZWxsaWFfZnJlZQorY2FtZWxsaWFfaW5pdCBtYmVkdGxzX2NhbWVsbGlhX2luaXQKK2NhbWVsbGlhX3NlbGZfdGVzdCBtYmVkdGxzX2NhbWVsbGlhX3NlbGZfdGVzdAorY2FtZWxsaWFfc2V0a2V5X2RlYyBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9kZWMKK2NhbWVsbGlhX3NldGtleV9lbmMgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jCitjY21fYXV0aF9kZWNyeXB0IG1iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdAorY2NtX2NvbnRleHQgbWJlZHRsc19jY21fY29udGV4dAorY2NtX2VuY3J5cHRfYW5kX3RhZyBtYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWcKK2NjbV9mcmVlIG1iZWR0bHNfY2NtX2ZyZWUKK2NjbV9pbml0IG1iZWR0bHNfY2NtX2luaXQKK2NjbV9zZWxmX3Rlc3QgbWJlZHRsc19jY21fc2VsZl90ZXN0CitjaXBoZXJfYXV0aF9kZWNyeXB0IG1iZWR0bHNfY2lwaGVyX2F1dGhfZGVjcnlwdAorY2lwaGVyX2F1dGhfZW5jcnlwdCBtYmVkdGxzX2NpcGhlcl9hdXRoX2VuY3J5cHQKK2NpcGhlcl9iYXNlX3QgbWJlZHRsc19jaXBoZXJfYmFzZV90CitjaXBoZXJfY2hlY2tfdGFnIG1iZWR0bHNfY2lwaGVyX2NoZWNrX3RhZworY2lwaGVyX2NvbnRleHRfdCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QKK2NpcGhlcl9jcnlwdCBtYmVkdGxzX2NpcGhlcl9jcnlwdAorY2lwaGVyX2RlZmluaXRpb25fdCBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9uX3QKK2NpcGhlcl9kZWZpbml0aW9ucyBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9ucworY2lwaGVyX2ZpbmlzaCBtYmVkdGxzX2NpcGhlcl9maW5pc2gKK2NpcGhlcl9mcmVlIG1iZWR0bHNfY2lwaGVyX2ZyZWUKK2NpcGhlcl9mcmVlX2N0eCBtYmVkdGxzX2NpcGhlcl9mcmVlX2N0eAorY2lwaGVyX2dldF9ibG9ja19zaXplIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplCitjaXBoZXJfZ2V0X2NpcGhlcl9tb2RlIG1iZWR0bHNfY2lwaGVyX2dldF9jaXBoZXJfbW9kZQorY2lwaGVyX2dldF9pdl9zaXplIG1iZWR0bHNfY2lwaGVyX2dldF9pdl9zaXplCitjaXBoZXJfZ2V0X2tleV9zaXplIG1iZWR0bHNfY2lwaGVyX2dldF9rZXlfYml0bGVuCitjaXBoZXJfZ2V0X25hbWUgbWJlZHRsc19jaXBoZXJfZ2V0X25hbWUKK2NpcGhlcl9nZXRfb3BlcmF0aW9uIG1iZWR0bHNfY2lwaGVyX2dldF9vcGVyYXRpb24KK2NpcGhlcl9nZXRfdHlwZSBtYmVkdGxzX2NpcGhlcl9nZXRfdHlwZQorY2lwaGVyX2lkX3QgbWJlZHRsc19jaXBoZXJfaWRfdAorY2lwaGVyX2luZm9fZnJvbV9zdHJpbmcgbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3N0cmluZworY2lwaGVyX2luZm9fZnJvbV90eXBlIG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlCitjaXBoZXJfaW5mb19mcm9tX3ZhbHVlcyBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdmFsdWVzCitjaXBoZXJfaW5mb190IG1iZWR0bHNfY2lwaGVyX2luZm9fdAorY2lwaGVyX2luaXQgbWJlZHRsc19jaXBoZXJfaW5pdAorY2lwaGVyX2luaXRfY3R4IG1iZWR0bHNfY2lwaGVyX3NldHVwCitjaXBoZXJfbGlzdCBtYmVkdGxzX2NpcGhlcl9saXN0CitjaXBoZXJfbW9kZV90IG1iZWR0bHNfY2lwaGVyX21vZGVfdAorY2lwaGVyX3BhZGRpbmdfdCBtYmVkdGxzX2NpcGhlcl9wYWRkaW5nX3QKK2NpcGhlcl9yZXNldCBtYmVkdGxzX2NpcGhlcl9yZXNldAorY2lwaGVyX3NlbGZfdGVzdCBtYmVkdGxzX2NpcGhlcl9zZWxmX3Rlc3QKK2NpcGhlcl9zZXRfaXYgbWJlZHRsc19jaXBoZXJfc2V0X2l2CitjaXBoZXJfc2V0X3BhZGRpbmdfbW9kZSBtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlCitjaXBoZXJfc2V0a2V5IG1iZWR0bHNfY2lwaGVyX3NldGtleQorY2lwaGVyX3R5cGVfdCBtYmVkdGxzX2NpcGhlcl90eXBlX3QKK2NpcGhlcl91cGRhdGUgbWJlZHRsc19jaXBoZXJfdXBkYXRlCitjaXBoZXJfdXBkYXRlX2FkIG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZAorY2lwaGVyX3dyaXRlX3RhZyBtYmVkdGxzX2NpcGhlcl93cml0ZV90YWcKK2N0cl9kcmJnX2NvbnRleHQgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0CitjdHJfZHJiZ19mcmVlIG1iZWR0bHNfY3RyX2RyYmdfZnJlZQorY3RyX2RyYmdfaW5pdCBtYmVkdGxzX2N0cl9kcmJnX2luaXQKK2N0cl9kcmJnX2luaXRfZW50cm9weV9sZW4gbWJlZHRsc19jdHJfZHJiZ19pbml0X2VudHJvcHlfbGVuCitjdHJfZHJiZ19yYW5kb20gbWJlZHRsc19jdHJfZHJiZ19yYW5kb20KK2N0cl9kcmJnX3JhbmRvbV93aXRoX2FkZCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbV93aXRoX2FkZAorY3RyX2RyYmdfcmVzZWVkIG1iZWR0bHNfY3RyX2RyYmdfcmVzZWVkCitjdHJfZHJiZ19zZWxmX3Rlc3QgbWJlZHRsc19jdHJfZHJiZ19zZWxmX3Rlc3QKK2N0cl9kcmJnX3NldF9lbnRyb3B5X2xlbiBtYmVkdGxzX2N0cl9kcmJnX3NldF9lbnRyb3B5X2xlbgorY3RyX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSBtYmVkdGxzX2N0cl9kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UKK2N0cl9kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwgbWJlZHRsc19jdHJfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsCitjdHJfZHJiZ191cGRhdGUgbWJlZHRsc19jdHJfZHJiZ191cGRhdGUKK2N0cl9kcmJnX3VwZGF0ZV9zZWVkX2ZpbGUgbWJlZHRsc19jdHJfZHJiZ191cGRhdGVfc2VlZF9maWxlCitjdHJfZHJiZ193cml0ZV9zZWVkX2ZpbGUgbWJlZHRsc19jdHJfZHJiZ193cml0ZV9zZWVkX2ZpbGUKK2RlYnVnX2ZtdCBtYmVkdGxzX2RlYnVnX2ZtdAorZGVidWdfcHJpbnRfYnVmIG1iZWR0bHNfZGVidWdfcHJpbnRfYnVmCitkZWJ1Z19wcmludF9jcnQgbWJlZHRsc19kZWJ1Z19wcmludF9jcnQKK2RlYnVnX3ByaW50X2VjcCBtYmVkdGxzX2RlYnVnX3ByaW50X2VjcAorZGVidWdfcHJpbnRfbXBpIG1iZWR0bHNfZGVidWdfcHJpbnRfbXBpCitkZWJ1Z19wcmludF9tc2cgbWJlZHRsc19kZWJ1Z19wcmludF9tc2cKK2RlYnVnX3ByaW50X3JldCBtYmVkdGxzX2RlYnVnX3ByaW50X3JldAorZGVidWdfc2V0X2xvZ19tb2RlIG1iZWR0bHNfZGVidWdfc2V0X2xvZ19tb2RlCitkZWJ1Z19zZXRfdGhyZXNob2xkIG1iZWR0bHNfZGVidWdfc2V0X3RocmVzaG9sZAorZGVzM19jb250ZXh0IG1iZWR0bHNfZGVzM19jb250ZXh0CitkZXMzX2NyeXB0X2NiYyBtYmVkdGxzX2RlczNfY3J5cHRfY2JjCitkZXMzX2NyeXB0X2VjYiBtYmVkdGxzX2RlczNfY3J5cHRfZWNiCitkZXMzX2ZyZWUgbWJlZHRsc19kZXMzX2ZyZWUKK2RlczNfaW5pdCBtYmVkdGxzX2RlczNfaW5pdAorZGVzM19zZXQya2V5X2RlYyBtYmVkdGxzX2RlczNfc2V0MmtleV9kZWMKK2RlczNfc2V0MmtleV9lbmMgbWJlZHRsc19kZXMzX3NldDJrZXlfZW5jCitkZXMzX3NldDNrZXlfZGVjIG1iZWR0bHNfZGVzM19zZXQza2V5X2RlYworZGVzM19zZXQza2V5X2VuYyBtYmVkdGxzX2RlczNfc2V0M2tleV9lbmMKK2Rlc19jb250ZXh0IG1iZWR0bHNfZGVzX2NvbnRleHQKK2Rlc19jcnlwdF9jYmMgbWJlZHRsc19kZXNfY3J5cHRfY2JjCitkZXNfY3J5cHRfZWNiIG1iZWR0bHNfZGVzX2NyeXB0X2VjYgorZGVzX2ZyZWUgbWJlZHRsc19kZXNfZnJlZQorZGVzX2luaXQgbWJlZHRsc19kZXNfaW5pdAorZGVzX2tleV9jaGVja19rZXlfcGFyaXR5IG1iZWR0bHNfZGVzX2tleV9jaGVja19rZXlfcGFyaXR5CitkZXNfa2V5X2NoZWNrX3dlYWsgbWJlZHRsc19kZXNfa2V5X2NoZWNrX3dlYWsKK2Rlc19rZXlfc2V0X3Bhcml0eSBtYmVkdGxzX2Rlc19rZXlfc2V0X3Bhcml0eQorZGVzX3NlbGZfdGVzdCBtYmVkdGxzX2Rlc19zZWxmX3Rlc3QKK2Rlc19zZXRrZXlfZGVjIG1iZWR0bHNfZGVzX3NldGtleV9kZWMKK2Rlc19zZXRrZXlfZW5jIG1iZWR0bHNfZGVzX3NldGtleV9lbmMKK2RobV9jYWxjX3NlY3JldCBtYmVkdGxzX2RobV9jYWxjX3NlY3JldAorZGhtX2NvbnRleHQgbWJlZHRsc19kaG1fY29udGV4dAorZGhtX2ZyZWUgbWJlZHRsc19kaG1fZnJlZQorZGhtX2luaXQgbWJlZHRsc19kaG1faW5pdAorZGhtX21ha2VfcGFyYW1zIG1iZWR0bHNfZGhtX21ha2VfcGFyYW1zCitkaG1fbWFrZV9wdWJsaWMgbWJlZHRsc19kaG1fbWFrZV9wdWJsaWMKK2RobV9wYXJzZV9kaG0gbWJlZHRsc19kaG1fcGFyc2VfZGhtCitkaG1fcGFyc2VfZGhtZmlsZSBtYmVkdGxzX2RobV9wYXJzZV9kaG1maWxlCitkaG1fcmVhZF9wYXJhbXMgbWJlZHRsc19kaG1fcmVhZF9wYXJhbXMKK2RobV9yZWFkX3B1YmxpYyBtYmVkdGxzX2RobV9yZWFkX3B1YmxpYworZGhtX3NlbGZfdGVzdCBtYmVkdGxzX2RobV9zZWxmX3Rlc3QKK2VjZGhfY2FsY19zZWNyZXQgbWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0CitlY2RoX2NvbXB1dGVfc2hhcmVkIG1iZWR0bHNfZWNkaF9jb21wdXRlX3NoYXJlZAorZWNkaF9jb250ZXh0IG1iZWR0bHNfZWNkaF9jb250ZXh0CitlY2RoX2ZyZWUgbWJlZHRsc19lY2RoX2ZyZWUKK2VjZGhfZ2VuX3B1YmxpYyBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYworZWNkaF9nZXRfcGFyYW1zIG1iZWR0bHNfZWNkaF9nZXRfcGFyYW1zCitlY2RoX2luaXQgbWJlZHRsc19lY2RoX2luaXQKK2VjZGhfbWFrZV9wYXJhbXMgbWJlZHRsc19lY2RoX21ha2VfcGFyYW1zCitlY2RoX21ha2VfcHVibGljIG1iZWR0bHNfZWNkaF9tYWtlX3B1YmxpYworZWNkaF9yZWFkX3BhcmFtcyBtYmVkdGxzX2VjZGhfcmVhZF9wYXJhbXMKK2VjZGhfcmVhZF9wdWJsaWMgbWJlZHRsc19lY2RoX3JlYWRfcHVibGljCitlY2RoX3NlbGZfdGVzdCBtYmVkdGxzX2VjZGhfc2VsZl90ZXN0CitlY2RoX3NpZGUgbWJlZHRsc19lY2RoX3NpZGUKK2VjZHNhX2NvbnRleHQgbWJlZHRsc19lY2RzYV9jb250ZXh0CitlY2RzYV9mcmVlIG1iZWR0bHNfZWNkc2FfZnJlZQorZWNkc2FfZnJvbV9rZXlwYWlyIG1iZWR0bHNfZWNkc2FfZnJvbV9rZXlwYWlyCitlY2RzYV9nZW5rZXkgbWJlZHRsc19lY2RzYV9nZW5rZXkKK2VjZHNhX2luZm8gbWJlZHRsc19lY2RzYV9pbmZvCitlY2RzYV9pbml0IG1iZWR0bHNfZWNkc2FfaW5pdAorZWNkc2FfcmVhZF9zaWduYXR1cmUgbWJlZHRsc19lY2RzYV9yZWFkX3NpZ25hdHVyZQorZWNkc2Ffc2VsZl90ZXN0IG1iZWR0bHNfZWNkc2Ffc2VsZl90ZXN0CitlY2RzYV9zaWduIG1iZWR0bHNfZWNkc2Ffc2lnbgorZWNkc2Ffc2lnbl9kZXQgbWJlZHRsc19lY2RzYV9zaWduX2RldAorZWNkc2FfdmVyaWZ5IG1iZWR0bHNfZWNkc2FfdmVyaWZ5CitlY2RzYV93cml0ZV9zaWduYXR1cmUgbWJlZHRsc19lY2RzYV93cml0ZV9zaWduYXR1cmUKK2VjZHNhX3dyaXRlX3NpZ25hdHVyZV9kZXQgbWJlZHRsc19lY2RzYV93cml0ZV9zaWduYXR1cmVfZGV0CitlY2tleV9pbmZvIG1iZWR0bHNfZWNrZXlfaW5mbworZWNrZXlkaF9pbmZvIG1iZWR0bHNfZWNrZXlkaF9pbmZvCitlY3BfYWRkIG1iZWR0bHNfZWNwX2FkZAorZWNwX2NoZWNrX3ByaXZrZXkgbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleQorZWNwX2NoZWNrX3B1Yl9wcml2IG1iZWR0bHNfZWNwX2NoZWNrX3B1Yl9wcml2CitlY3BfY2hlY2tfcHVia2V5IG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleQorZWNwX2NvcHkgbWJlZHRsc19lY3BfY29weQorZWNwX2N1cnZlX2luZm8gbWJlZHRsc19lY3BfY3VydmVfaW5mbworZWNwX2N1cnZlX2luZm9fZnJvbV9ncnBfaWQgbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX2dycF9pZAorZWNwX2N1cnZlX2luZm9fZnJvbV9uYW1lIG1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV9uYW1lCitlY3BfY3VydmVfaW5mb19mcm9tX3Rsc19pZCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fdGxzX2lkCitlY3BfY3VydmVfbGlzdCBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0CitlY3BfZ2VuX2tleSBtYmVkdGxzX2VjcF9nZW5fa2V5CitlY3BfZ2VuX2tleXBhaXIgbWJlZHRsc19lY3BfZ2VuX2tleXBhaXIKK2VjcF9ncm91cCBtYmVkdGxzX2VjcF9ncm91cAorZWNwX2dyb3VwX2NvcHkgbWJlZHRsc19lY3BfZ3JvdXBfY29weQorZWNwX2dyb3VwX2ZyZWUgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZQorZWNwX2dyb3VwX2lkIG1iZWR0bHNfZWNwX2dyb3VwX2lkCitlY3BfZ3JvdXBfaW5pdCBtYmVkdGxzX2VjcF9ncm91cF9pbml0CitlY3BfZ3JvdXBfcmVhZF9zdHJpbmcgbWJlZHRsc19lY3BfZ3JvdXBfcmVhZF9zdHJpbmcKK2VjcF9ncnBfaWRfbGlzdCBtYmVkdGxzX2VjcF9ncnBfaWRfbGlzdAorZWNwX2lzX3plcm8gbWJlZHRsc19lY3BfaXNfemVybworZWNwX2tleXBhaXIgbWJlZHRsc19lY3Bfa2V5cGFpcgorZWNwX2tleXBhaXJfZnJlZSBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUKK2VjcF9rZXlwYWlyX2luaXQgbWJlZHRsc19lY3Bfa2V5cGFpcl9pbml0CitlY3BfbXVsIG1iZWR0bHNfZWNwX211bAorZWNwX3BvaW50IG1iZWR0bHNfZWNwX3BvaW50CitlY3BfcG9pbnRfZnJlZSBtYmVkdGxzX2VjcF9wb2ludF9mcmVlCitlY3BfcG9pbnRfaW5pdCBtYmVkdGxzX2VjcF9wb2ludF9pbml0CitlY3BfcG9pbnRfcmVhZF9iaW5hcnkgbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkKK2VjcF9wb2ludF9yZWFkX3N0cmluZyBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX3N0cmluZworZWNwX3BvaW50X3dyaXRlX2JpbmFyeSBtYmVkdGxzX2VjcF9wb2ludF93cml0ZV9iaW5hcnkKK2VjcF9zZWxmX3Rlc3QgbWJlZHRsc19lY3Bfc2VsZl90ZXN0CitlY3Bfc2V0X3plcm8gbWJlZHRsc19lY3Bfc2V0X3plcm8KK2VjcF9zdWIgbWJlZHRsc19lY3Bfc3ViCitlY3BfdGxzX3JlYWRfZ3JvdXAgbWJlZHRsc19lY3BfdGxzX3JlYWRfZ3JvdXAKK2VjcF90bHNfcmVhZF9wb2ludCBtYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludAorZWNwX3Rsc193cml0ZV9ncm91cCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfZ3JvdXAKK2VjcF90bHNfd3JpdGVfcG9pbnQgbWJlZHRsc19lY3BfdGxzX3dyaXRlX3BvaW50CitlY3BfdXNlX2tub3duX2RwIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQKK2VudHJvcHlfYWRkX3NvdXJjZSBtYmVkdGxzX2VudHJvcHlfYWRkX3NvdXJjZQorZW50cm9weV9jb250ZXh0IG1iZWR0bHNfZW50cm9weV9jb250ZXh0CitlbnRyb3B5X2ZyZWUgbWJlZHRsc19lbnRyb3B5X2ZyZWUKK2VudHJvcHlfZnVuYyBtYmVkdGxzX2VudHJvcHlfZnVuYworZW50cm9weV9nYXRoZXIgbWJlZHRsc19lbnRyb3B5X2dhdGhlcgorZW50cm9weV9pbml0IG1iZWR0bHNfZW50cm9weV9pbml0CitlbnRyb3B5X3NlbGZfdGVzdCBtYmVkdGxzX2VudHJvcHlfc2VsZl90ZXN0CitlbnRyb3B5X3VwZGF0ZV9tYW51YWwgbWJlZHRsc19lbnRyb3B5X3VwZGF0ZV9tYW51YWwKK2VudHJvcHlfdXBkYXRlX3NlZWRfZmlsZSBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX3NlZWRfZmlsZQorZW50cm9weV93cml0ZV9zZWVkX2ZpbGUgbWJlZHRsc19lbnRyb3B5X3dyaXRlX3NlZWRfZmlsZQorZXJyb3Jfc3RyZXJyb3IgbWJlZHRsc19zdHJlcnJvcgorZl9zb3VyY2VfcHRyIG1iZWR0bHNfZW50cm9weV9mX3NvdXJjZV9wdHIKK2djbV9hdXRoX2RlY3J5cHQgbWJlZHRsc19nY21fYXV0aF9kZWNyeXB0CitnY21fY29udGV4dCBtYmVkdGxzX2djbV9jb250ZXh0CitnY21fY3J5cHRfYW5kX3RhZyBtYmVkdGxzX2djbV9jcnlwdF9hbmRfdGFnCitnY21fZmluaXNoIG1iZWR0bHNfZ2NtX2ZpbmlzaAorZ2NtX2ZyZWUgbWJlZHRsc19nY21fZnJlZQorZ2NtX2luaXQgbWJlZHRsc19nY21faW5pdAorZ2NtX3NlbGZfdGVzdCBtYmVkdGxzX2djbV9zZWxmX3Rlc3QKK2djbV9zdGFydHMgbWJlZHRsc19nY21fc3RhcnRzCitnY21fdXBkYXRlIG1iZWR0bHNfZ2NtX3VwZGF0ZQorZ2V0X3RpbWVyIG1iZWR0bHNfdGltaW5nX2dldF90aW1lcgoraGFyZGNsb2NrIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jaworaGFyZGNsb2NrX3BvbGwgbWJlZHRsc19oYXJkY2xvY2tfcG9sbAoraGF2ZWdlX2ZyZWUgbWJlZHRsc19oYXZlZ2VfZnJlZQoraGF2ZWdlX2luaXQgbWJlZHRsc19oYXZlZ2VfaW5pdAoraGF2ZWdlX3BvbGwgbWJlZHRsc19oYXZlZ2VfcG9sbAoraGF2ZWdlX3JhbmRvbSBtYmVkdGxzX2hhdmVnZV9yYW5kb20KK2hhdmVnZV9zdGF0ZSBtYmVkdGxzX2hhdmVnZV9zdGF0ZQoraG1hY19kcmJnX2NvbnRleHQgbWJlZHRsc19obWFjX2RyYmdfY29udGV4dAoraG1hY19kcmJnX2ZyZWUgbWJlZHRsc19obWFjX2RyYmdfZnJlZQoraG1hY19kcmJnX2luaXQgbWJlZHRsc19obWFjX2RyYmdfaW5pdAoraG1hY19kcmJnX2luaXRfYnVmIG1iZWR0bHNfaG1hY19kcmJnX2luaXRfYnVmCitobWFjX2RyYmdfcmFuZG9tIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbQoraG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb21fd2l0aF9hZGQKK2htYWNfZHJiZ19yZXNlZWQgbWJlZHRsc19obWFjX2RyYmdfcmVzZWVkCitobWFjX2RyYmdfc2VsZl90ZXN0IG1iZWR0bHNfaG1hY19kcmJnX3NlbGZfdGVzdAoraG1hY19kcmJnX3NldF9lbnRyb3B5X2xlbiBtYmVkdGxzX2htYWNfZHJiZ19zZXRfZW50cm9weV9sZW4KK2htYWNfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlIG1iZWR0bHNfaG1hY19kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UKK2htYWNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsIG1iZWR0bHNfaG1hY19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwKK2htYWNfZHJiZ191cGRhdGUgbWJlZHRsc19obWFjX2RyYmdfdXBkYXRlCitobWFjX2RyYmdfdXBkYXRlX3NlZWRfZmlsZSBtYmVkdGxzX2htYWNfZHJiZ191cGRhdGVfc2VlZF9maWxlCitobWFjX2RyYmdfd3JpdGVfc2VlZF9maWxlIG1iZWR0bHNfaG1hY19kcmJnX3dyaXRlX3NlZWRfZmlsZQoraHJfdGltZSBtYmVkdGxzX3RpbWluZ19ocl90aW1lCitrZXlfZXhjaGFuZ2VfdHlwZV90IG1iZWR0bHNfa2V5X2V4Y2hhbmdlX3R5cGVfdAorbV9zbGVlcCBtYmVkdGxzX3RpbWluZ19tX3NsZWVwCittZCBtYmVkdGxzX21kCittZDIgbWJlZHRsc19tZDIKK21kMl9jb250ZXh0IG1iZWR0bHNfbWQyX2NvbnRleHQKK21kMl9maWxlIG1iZWR0bHNfbWQyX2ZpbGUKK21kMl9maW5pc2ggbWJlZHRsc19tZDJfZmluaXNoCittZDJfZnJlZSBtYmVkdGxzX21kMl9mcmVlCittZDJfaG1hYyBtYmVkdGxzX21kMl9obWFjCittZDJfaG1hY19maW5pc2ggbWJlZHRsc19tZDJfaG1hY19maW5pc2gKK21kMl9obWFjX3Jlc2V0IG1iZWR0bHNfbWQyX2htYWNfcmVzZXQKK21kMl9obWFjX3N0YXJ0cyBtYmVkdGxzX21kMl9obWFjX3N0YXJ0cworbWQyX2htYWNfdXBkYXRlIG1iZWR0bHNfbWQyX2htYWNfdXBkYXRlCittZDJfaW5mbyBtYmVkdGxzX21kMl9pbmZvCittZDJfaW5pdCBtYmVkdGxzX21kMl9pbml0CittZDJfcHJvY2VzcyBtYmVkdGxzX21kMl9wcm9jZXNzCittZDJfc2VsZl90ZXN0IG1iZWR0bHNfbWQyX3NlbGZfdGVzdAorbWQyX3N0YXJ0cyBtYmVkdGxzX21kMl9zdGFydHMKK21kMl91cGRhdGUgbWJlZHRsc19tZDJfdXBkYXRlCittZDQgbWJlZHRsc19tZDQKK21kNF9jb250ZXh0IG1iZWR0bHNfbWQ0X2NvbnRleHQKK21kNF9maWxlIG1iZWR0bHNfbWQ0X2ZpbGUKK21kNF9maW5pc2ggbWJlZHRsc19tZDRfZmluaXNoCittZDRfZnJlZSBtYmVkdGxzX21kNF9mcmVlCittZDRfaG1hYyBtYmVkdGxzX21kNF9obWFjCittZDRfaG1hY19maW5pc2ggbWJlZHRsc19tZDRfaG1hY19maW5pc2gKK21kNF9obWFjX3Jlc2V0IG1iZWR0bHNfbWQ0X2htYWNfcmVzZXQKK21kNF9obWFjX3N0YXJ0cyBtYmVkdGxzX21kNF9obWFjX3N0YXJ0cworbWQ0X2htYWNfdXBkYXRlIG1iZWR0bHNfbWQ0X2htYWNfdXBkYXRlCittZDRfaW5mbyBtYmVkdGxzX21kNF9pbmZvCittZDRfaW5pdCBtYmVkdGxzX21kNF9pbml0CittZDRfcHJvY2VzcyBtYmVkdGxzX21kNF9wcm9jZXNzCittZDRfc2VsZl90ZXN0IG1iZWR0bHNfbWQ0X3NlbGZfdGVzdAorbWQ0X3N0YXJ0cyBtYmVkdGxzX21kNF9zdGFydHMKK21kNF91cGRhdGUgbWJlZHRsc19tZDRfdXBkYXRlCittZDUgbWJlZHRsc19tZDUKK21kNV9jb250ZXh0IG1iZWR0bHNfbWQ1X2NvbnRleHQKK21kNV9maWxlIG1iZWR0bHNfbWQ1X2ZpbGUKK21kNV9maW5pc2ggbWJlZHRsc19tZDVfZmluaXNoCittZDVfZnJlZSBtYmVkdGxzX21kNV9mcmVlCittZDVfaG1hYyBtYmVkdGxzX21kNV9obWFjCittZDVfaG1hY19maW5pc2ggbWJlZHRsc19tZDVfaG1hY19maW5pc2gKK21kNV9obWFjX3Jlc2V0IG1iZWR0bHNfbWQ1X2htYWNfcmVzZXQKK21kNV9obWFjX3N0YXJ0cyBtYmVkdGxzX21kNV9obWFjX3N0YXJ0cworbWQ1X2htYWNfdXBkYXRlIG1iZWR0bHNfbWQ1X2htYWNfdXBkYXRlCittZDVfaW5mbyBtYmVkdGxzX21kNV9pbmZvCittZDVfaW5pdCBtYmVkdGxzX21kNV9pbml0CittZDVfcHJvY2VzcyBtYmVkdGxzX21kNV9wcm9jZXNzCittZDVfc2VsZl90ZXN0IG1iZWR0bHNfbWQ1X3NlbGZfdGVzdAorbWQ1X3N0YXJ0cyBtYmVkdGxzX21kNV9zdGFydHMKK21kNV91cGRhdGUgbWJlZHRsc19tZDVfdXBkYXRlCittZF9jb250ZXh0X3QgbWJlZHRsc19tZF9jb250ZXh0X3QKK21kX2ZpbGUgbWJlZHRsc19tZF9maWxlCittZF9maW5pc2ggbWJlZHRsc19tZF9maW5pc2gKK21kX2ZyZWUgbWJlZHRsc19tZF9mcmVlCittZF9mcmVlX2N0eCBtYmVkdGxzX21kX2ZyZWVfY3R4CittZF9nZXRfbmFtZSBtYmVkdGxzX21kX2dldF9uYW1lCittZF9nZXRfc2l6ZSBtYmVkdGxzX21kX2dldF9zaXplCittZF9nZXRfdHlwZSBtYmVkdGxzX21kX2dldF90eXBlCittZF9obWFjIG1iZWR0bHNfbWRfaG1hYworbWRfaG1hY19maW5pc2ggbWJlZHRsc19tZF9obWFjX2ZpbmlzaAorbWRfaG1hY19yZXNldCBtYmVkdGxzX21kX2htYWNfcmVzZXQKK21kX2htYWNfc3RhcnRzIG1iZWR0bHNfbWRfaG1hY19zdGFydHMKK21kX2htYWNfdXBkYXRlIG1iZWR0bHNfbWRfaG1hY191cGRhdGUKK21kX2luZm9fZnJvbV9zdHJpbmcgbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nCittZF9pbmZvX2Zyb21fdHlwZSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlCittZF9pbmZvX3QgbWJlZHRsc19tZF9pbmZvX3QKK21kX2luaXQgbWJlZHRsc19tZF9pbml0CittZF9pbml0X2N0eCBtYmVkdGxzX21kX2luaXRfY3R4CittZF9saXN0IG1iZWR0bHNfbWRfbGlzdAorbWRfcHJvY2VzcyBtYmVkdGxzX21kX3Byb2Nlc3MKK21kX3N0YXJ0cyBtYmVkdGxzX21kX3N0YXJ0cworbWRfdHlwZV90IG1iZWR0bHNfbWRfdHlwZV90CittZF91cGRhdGUgbWJlZHRsc19tZF91cGRhdGUKK21lbW9yeV9idWZmZXJfYWxsb2NfY3VyX2dldCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfY3VyX2dldAorbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlCittZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQKK21lbW9yeV9idWZmZXJfYWxsb2NfbWF4X2dldCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfbWF4X2dldAorbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfcmVzZXQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX21heF9yZXNldAorbWVtb3J5X2J1ZmZlcl9hbGxvY19zZWxmX3Rlc3QgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3NlbGZfdGVzdAorbWVtb3J5X2J1ZmZlcl9hbGxvY19zdGF0dXMgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3N0YXR1cworbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3ZlcmlmeQorbWVtb3J5X2J1ZmZlcl9zZXRfdmVyaWZ5IG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9zZXRfdmVyaWZ5CittZW1vcnlfc2V0X293biBtYmVkdGxzX21lbW9yeV9zZXRfb3duCittcGkgbWJlZHRsc19tcGkKK21waV9hZGRfYWJzIG1iZWR0bHNfbXBpX2FkZF9hYnMKK21waV9hZGRfaW50IG1iZWR0bHNfbXBpX2FkZF9pbnQKK21waV9hZGRfbXBpIG1iZWR0bHNfbXBpX2FkZF9tcGkKK21waV9jbXBfYWJzIG1iZWR0bHNfbXBpX2NtcF9hYnMKK21waV9jbXBfaW50IG1iZWR0bHNfbXBpX2NtcF9pbnQKK21waV9jbXBfbXBpIG1iZWR0bHNfbXBpX2NtcF9tcGkKK21waV9jb3B5IG1iZWR0bHNfbXBpX2NvcHkKK21waV9kaXZfaW50IG1iZWR0bHNfbXBpX2Rpdl9pbnQKK21waV9kaXZfbXBpIG1iZWR0bHNfbXBpX2Rpdl9tcGkKK21waV9leHBfbW9kIG1iZWR0bHNfbXBpX2V4cF9tb2QKK21waV9maWxsX3JhbmRvbSBtYmVkdGxzX21waV9maWxsX3JhbmRvbQorbXBpX2ZyZWUgbWJlZHRsc19tcGlfZnJlZQorbXBpX2djZCBtYmVkdGxzX21waV9nY2QKK21waV9nZW5fcHJpbWUgbWJlZHRsc19tcGlfZ2VuX3ByaW1lCittcGlfZ2V0X2JpdCBtYmVkdGxzX21waV9nZXRfYml0CittcGlfZ3JvdyBtYmVkdGxzX21waV9ncm93CittcGlfaW5pdCBtYmVkdGxzX21waV9pbml0CittcGlfaW52X21vZCBtYmVkdGxzX21waV9pbnZfbW9kCittcGlfaXNfcHJpbWUgbWJlZHRsc19tcGlfaXNfcHJpbWUKK21waV9sc2IgbWJlZHRsc19tcGlfbHNiCittcGlfbHNldCBtYmVkdGxzX21waV9sc2V0CittcGlfbW9kX2ludCBtYmVkdGxzX21waV9tb2RfaW50CittcGlfbW9kX21waSBtYmVkdGxzX21waV9tb2RfbXBpCittcGlfbXNiIG1iZWR0bHNfbXBpX2JpdGxlbgorbXBpX211bF9pbnQgbWJlZHRsc19tcGlfbXVsX2ludAorbXBpX211bF9tcGkgbWJlZHRsc19tcGlfbXVsX21waQorbXBpX3JlYWRfYmluYXJ5IG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5CittcGlfcmVhZF9maWxlIG1iZWR0bHNfbXBpX3JlYWRfZmlsZQorbXBpX3JlYWRfc3RyaW5nIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nCittcGlfc2FmZV9jb25kX2Fzc2lnbiBtYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduCittcGlfc2FmZV9jb25kX3N3YXAgbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXAKK21waV9zZWxmX3Rlc3QgbWJlZHRsc19tcGlfc2VsZl90ZXN0CittcGlfc2V0X2JpdCBtYmVkdGxzX21waV9zZXRfYml0CittcGlfc2hpZnRfbCBtYmVkdGxzX21waV9zaGlmdF9sCittcGlfc2hpZnRfciBtYmVkdGxzX21waV9zaGlmdF9yCittcGlfc2hyaW5rIG1iZWR0bHNfbXBpX3NocmluaworbXBpX3NpemUgbWJlZHRsc19tcGlfc2l6ZQorbXBpX3N1Yl9hYnMgbWJlZHRsc19tcGlfc3ViX2FicworbXBpX3N1Yl9pbnQgbWJlZHRsc19tcGlfc3ViX2ludAorbXBpX3N1Yl9tcGkgbWJlZHRsc19tcGlfc3ViX21waQorbXBpX3N3YXAgbWJlZHRsc19tcGlfc3dhcAorbXBpX3dyaXRlX2JpbmFyeSBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkKK21waV93cml0ZV9maWxlIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUKK21waV93cml0ZV9zdHJpbmcgbWJlZHRsc19tcGlfd3JpdGVfc3RyaW5nCituZXRfYWNjZXB0IG1iZWR0bHNfbmV0X2FjY2VwdAorbmV0X2JpbmQgbWJlZHRsc19uZXRfYmluZAorbmV0X2Nsb3NlIG1iZWR0bHNfbmV0X2ZyZWUKK25ldF9jb25uZWN0IG1iZWR0bHNfbmV0X2Nvbm5lY3QKK25ldF9yZWN2IG1iZWR0bHNfbmV0X3JlY3YKK25ldF9yZWN2X3RpbWVvdXQgbWJlZHRsc19uZXRfcmVjdl90aW1lb3V0CituZXRfc2VuZCBtYmVkdGxzX25ldF9zZW5kCituZXRfc2V0X2Jsb2NrIG1iZWR0bHNfbmV0X3NldF9ibG9jaworbmV0X3NldF9ub25ibG9jayBtYmVkdGxzX25ldF9zZXRfbm9uYmxvY2sKK25ldF91c2xlZXAgbWJlZHRsc19uZXRfdXNsZWVwCitvaWRfZGVzY3JpcHRvcl90IG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdAorb2lkX2dldF9hdHRyX3Nob3J0X25hbWUgbWJlZHRsc19vaWRfZ2V0X2F0dHJfc2hvcnRfbmFtZQorb2lkX2dldF9jaXBoZXJfYWxnIG1iZWR0bHNfb2lkX2dldF9jaXBoZXJfYWxnCitvaWRfZ2V0X2VjX2dycCBtYmVkdGxzX29pZF9nZXRfZWNfZ3JwCitvaWRfZ2V0X2V4dGVuZGVkX2tleV91c2FnZSBtYmVkdGxzX29pZF9nZXRfZXh0ZW5kZWRfa2V5X3VzYWdlCitvaWRfZ2V0X21kX2FsZyBtYmVkdGxzX29pZF9nZXRfbWRfYWxnCitvaWRfZ2V0X251bWVyaWNfc3RyaW5nIG1iZWR0bHNfb2lkX2dldF9udW1lcmljX3N0cmluZworb2lkX2dldF9vaWRfYnlfZWNfZ3JwIG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfZWNfZ3JwCitvaWRfZ2V0X29pZF9ieV9tZCBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X21kCitvaWRfZ2V0X29pZF9ieV9wa19hbGcgbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9wa19hbGcKK29pZF9nZXRfb2lkX2J5X3NpZ19hbGcgbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9zaWdfYWxnCitvaWRfZ2V0X3BrX2FsZyBtYmVkdGxzX29pZF9nZXRfcGtfYWxnCitvaWRfZ2V0X3BrY3MxMl9wYmVfYWxnIG1iZWR0bHNfb2lkX2dldF9wa2NzMTJfcGJlX2FsZworb2lkX2dldF9zaWdfYWxnIG1iZWR0bHNfb2lkX2dldF9zaWdfYWxnCitvaWRfZ2V0X3NpZ19hbGdfZGVzYyBtYmVkdGxzX29pZF9nZXRfc2lnX2FsZ19kZXNjCitvaWRfZ2V0X3g1MDlfZXh0X3R5cGUgbWJlZHRsc19vaWRfZ2V0X3g1MDlfZXh0X3R5cGUKK29wZXJhdGlvbl90IG1iZWR0bHNfb3BlcmF0aW9uX3QKK3BhZGxvY2tfc3VwcG9ydHMgbWJlZHRsc19wYWRsb2NrX2hhc19zdXBwb3J0CitwYWRsb2NrX3hjcnlwdGNiYyBtYmVkdGxzX3BhZGxvY2tfeGNyeXB0Y2JjCitwYWRsb2NrX3hjcnlwdGVjYiBtYmVkdGxzX3BhZGxvY2tfeGNyeXB0ZWNiCitwZW1fY29udGV4dCBtYmVkdGxzX3BlbV9jb250ZXh0CitwZW1fZnJlZSBtYmVkdGxzX3BlbV9mcmVlCitwZW1faW5pdCBtYmVkdGxzX3BlbV9pbml0CitwZW1fcmVhZF9idWZmZXIgbWJlZHRsc19wZW1fcmVhZF9idWZmZXIKK3BlbV93cml0ZV9idWZmZXIgbWJlZHRsc19wZW1fd3JpdGVfYnVmZmVyCitwa19jYW5fZG8gbWJlZHRsc19wa19jYW5fZG8KK3BrX2NoZWNrX3BhaXIgbWJlZHRsc19wa19jaGVja19wYWlyCitwa19jb250ZXh0IG1iZWR0bHNfcGtfY29udGV4dAorcGtfZGVidWcgbWJlZHRsc19wa19kZWJ1ZworcGtfZGVidWdfaXRlbSBtYmVkdGxzX3BrX2RlYnVnX2l0ZW0KK3BrX2RlYnVnX3R5cGUgbWJlZHRsc19wa19kZWJ1Z190eXBlCitwa19kZWNyeXB0IG1iZWR0bHNfcGtfZGVjcnlwdAorcGtfZWMgbWJlZHRsc19wa19lYworcGtfZW5jcnlwdCBtYmVkdGxzX3BrX2VuY3J5cHQKK3BrX2ZyZWUgbWJlZHRsc19wa19mcmVlCitwa19nZXRfbGVuIG1iZWR0bHNfcGtfZ2V0X2xlbgorcGtfZ2V0X25hbWUgbWJlZHRsc19wa19nZXRfbmFtZQorcGtfZ2V0X3NpemUgbWJlZHRsc19wa19nZXRfYml0bGVuCitwa19nZXRfdHlwZSBtYmVkdGxzX3BrX2dldF90eXBlCitwa19pbmZvX2Zyb21fdHlwZSBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlCitwa19pbmZvX3QgbWJlZHRsc19wa19pbmZvX3QKK3BrX2luaXQgbWJlZHRsc19wa19pbml0Citwa19pbml0X2N0eCBtYmVkdGxzX3BrX3NldHVwCitwa19pbml0X2N0eF9yc2FfYWx0IG1iZWR0bHNfcGtfc2V0dXBfcnNhX2FsdAorcGtfbG9hZF9maWxlIG1iZWR0bHNfcGtfbG9hZF9maWxlCitwa19wYXJzZV9rZXkgbWJlZHRsc19wa19wYXJzZV9rZXkKK3BrX3BhcnNlX2tleWZpbGUgbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlCitwa19wYXJzZV9wdWJsaWNfa2V5IG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleQorcGtfcGFyc2VfcHVibGljX2tleWZpbGUgbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZQorcGtfcGFyc2Vfc3VicHVia2V5IG1iZWR0bHNfcGtfcGFyc2Vfc3VicHVia2V5Citwa19yc2EgbWJlZHRsc19wa19yc2EKK3BrX3JzYV9hbHRfZGVjcnlwdF9mdW5jIG1iZWR0bHNfcGtfcnNhX2FsdF9kZWNyeXB0X2Z1bmMKK3BrX3JzYV9hbHRfa2V5X2xlbl9mdW5jIG1iZWR0bHNfcGtfcnNhX2FsdF9rZXlfbGVuX2Z1bmMKK3BrX3JzYV9hbHRfc2lnbl9mdW5jIG1iZWR0bHNfcGtfcnNhX2FsdF9zaWduX2Z1bmMKK3BrX3JzYXNzYV9wc3Nfb3B0aW9ucyBtYmVkdGxzX3BrX3JzYXNzYV9wc3Nfb3B0aW9ucworcGtfc2lnbiBtYmVkdGxzX3BrX3NpZ24KK3BrX3R5cGVfdCBtYmVkdGxzX3BrX3R5cGVfdAorcGtfdmVyaWZ5IG1iZWR0bHNfcGtfdmVyaWZ5Citwa192ZXJpZnlfZXh0IG1iZWR0bHNfcGtfdmVyaWZ5X2V4dAorcGtfd3JpdGVfa2V5X2RlciBtYmVkdGxzX3BrX3dyaXRlX2tleV9kZXIKK3BrX3dyaXRlX2tleV9wZW0gbWJlZHRsc19wa193cml0ZV9rZXlfcGVtCitwa193cml0ZV9wdWJrZXkgbWJlZHRsc19wa193cml0ZV9wdWJrZXkKK3BrX3dyaXRlX3B1YmtleV9kZXIgbWJlZHRsc19wa193cml0ZV9wdWJrZXlfZGVyCitwa193cml0ZV9wdWJrZXlfcGVtIG1iZWR0bHNfcGtfd3JpdGVfcHVia2V5X3BlbQorcGtjczExX2NvbnRleHQgbWJlZHRsc19wa2NzMTFfY29udGV4dAorcGtjczExX2RlY3J5cHQgbWJlZHRsc19wa2NzMTFfZGVjcnlwdAorcGtjczExX3ByaXZfa2V5X2ZyZWUgbWJlZHRsc19wa2NzMTFfcHJpdl9rZXlfZnJlZQorcGtjczExX3ByaXZfa2V5X2luaXQgbWJlZHRsc19wa2NzMTFfcHJpdl9rZXlfYmluZAorcGtjczExX3NpZ24gbWJlZHRsc19wa2NzMTFfc2lnbgorcGtjczExX3g1MDlfY2VydF9pbml0IG1iZWR0bHNfcGtjczExX3g1MDlfY2VydF9iaW5kCitwa2NzMTJfZGVyaXZhdGlvbiBtYmVkdGxzX3BrY3MxMl9kZXJpdmF0aW9uCitwa2NzMTJfcGJlIG1iZWR0bHNfcGtjczEyX3BiZQorcGtjczEyX3BiZV9zaGExX3JjNF8xMjggbWJlZHRsc19wa2NzMTJfcGJlX3NoYTFfcmM0XzEyOAorcGtjczVfcGJlczIgbWJlZHRsc19wa2NzNV9wYmVzMgorcGtjczVfcGJrZGYyX2htYWMgbWJlZHRsc19wa2NzNV9wYmtkZjJfaG1hYworcGtjczVfc2VsZl90ZXN0IG1iZWR0bHNfcGtjczVfc2VsZl90ZXN0CitwbGF0Zm9ybV9lbnRyb3B5X3BvbGwgbWJlZHRsc19wbGF0Zm9ybV9lbnRyb3B5X3BvbGwKK3BsYXRmb3JtX3NldF9leGl0IG1iZWR0bHNfcGxhdGZvcm1fc2V0X2V4aXQKK3BsYXRmb3JtX3NldF9mcHJpbnRmIG1iZWR0bHNfcGxhdGZvcm1fc2V0X2ZwcmludGYKK3BsYXRmb3JtX3NldF9tYWxsb2NfZnJlZSBtYmVkdGxzX3BsYXRmb3JtX3NldF9tYWxsb2NfZnJlZQorcGxhdGZvcm1fc2V0X3ByaW50ZiBtYmVkdGxzX3BsYXRmb3JtX3NldF9wcmludGYKK3BsYXRmb3JtX3NldF9zbnByaW50ZiBtYmVkdGxzX3BsYXRmb3JtX3NldF9zbnByaW50ZgorcG9sYXJzc2xfZXhpdCBtYmVkdGxzX2V4aXQKK3BvbGFyc3NsX2ZwcmludGYgbWJlZHRsc19mcHJpbnRmCitwb2xhcnNzbF9mcmVlIG1iZWR0bHNfZnJlZQorcG9sYXJzc2xfbWFsbG9jIG1iZWR0bHNfbWFsbG9jCitwb2xhcnNzbF9tdXRleF9mcmVlIG1iZWR0bHNfbXV0ZXhfZnJlZQorcG9sYXJzc2xfbXV0ZXhfaW5pdCBtYmVkdGxzX211dGV4X2luaXQKK3BvbGFyc3NsX211dGV4X2xvY2sgbWJlZHRsc19tdXRleF9sb2NrCitwb2xhcnNzbF9tdXRleF91bmxvY2sgbWJlZHRsc19tdXRleF91bmxvY2sKK3BvbGFyc3NsX3ByaW50ZiBtYmVkdGxzX3ByaW50ZgorcG9sYXJzc2xfc25wcmludGYgbWJlZHRsc19zbnByaW50ZgorcG9sYXJzc2xfc3RyZXJyb3IgbWJlZHRsc19zdHJlcnJvcgorcmlwZW1kMTYwIG1iZWR0bHNfcmlwZW1kMTYwCityaXBlbWQxNjBfY29udGV4dCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0CityaXBlbWQxNjBfZmlsZSBtYmVkdGxzX3JpcGVtZDE2MF9maWxlCityaXBlbWQxNjBfZmluaXNoIG1iZWR0bHNfcmlwZW1kMTYwX2ZpbmlzaAorcmlwZW1kMTYwX2ZyZWUgbWJlZHRsc19yaXBlbWQxNjBfZnJlZQorcmlwZW1kMTYwX2htYWMgbWJlZHRsc19yaXBlbWQxNjBfaG1hYworcmlwZW1kMTYwX2htYWNfZmluaXNoIG1iZWR0bHNfcmlwZW1kMTYwX2htYWNfZmluaXNoCityaXBlbWQxNjBfaG1hY19yZXNldCBtYmVkdGxzX3JpcGVtZDE2MF9obWFjX3Jlc2V0CityaXBlbWQxNjBfaG1hY19zdGFydHMgbWJlZHRsc19yaXBlbWQxNjBfaG1hY19zdGFydHMKK3JpcGVtZDE2MF9obWFjX3VwZGF0ZSBtYmVkdGxzX3JpcGVtZDE2MF9obWFjX3VwZGF0ZQorcmlwZW1kMTYwX2luZm8gbWJlZHRsc19yaXBlbWQxNjBfaW5mbworcmlwZW1kMTYwX2luaXQgbWJlZHRsc19yaXBlbWQxNjBfaW5pdAorcmlwZW1kMTYwX3Byb2Nlc3MgbWJlZHRsc19yaXBlbWQxNjBfcHJvY2VzcworcmlwZW1kMTYwX3NlbGZfdGVzdCBtYmVkdGxzX3JpcGVtZDE2MF9zZWxmX3Rlc3QKK3JpcGVtZDE2MF9zdGFydHMgbWJlZHRsc19yaXBlbWQxNjBfc3RhcnRzCityaXBlbWQxNjBfdXBkYXRlIG1iZWR0bHNfcmlwZW1kMTYwX3VwZGF0ZQorcnNhX2FsdF9jb250ZXh0IG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0Cityc2FfYWx0X2luZm8gbWJlZHRsc19yc2FfYWx0X2luZm8KK3JzYV9jaGVja19wcml2a2V5IG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkKK3JzYV9jaGVja19wdWJfcHJpdiBtYmVkdGxzX3JzYV9jaGVja19wdWJfcHJpdgorcnNhX2NoZWNrX3B1YmtleSBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkKK3JzYV9jb250ZXh0IG1iZWR0bHNfcnNhX2NvbnRleHQKK3JzYV9jb3B5IG1iZWR0bHNfcnNhX2NvcHkKK3JzYV9kZWNyeXB0X2Z1bmMgbWJlZHRsc19yc2FfZGVjcnlwdF9mdW5jCityc2FfZnJlZSBtYmVkdGxzX3JzYV9mcmVlCityc2FfZ2VuX2tleSBtYmVkdGxzX3JzYV9nZW5fa2V5Cityc2FfaW5mbyBtYmVkdGxzX3JzYV9pbmZvCityc2FfaW5pdCBtYmVkdGxzX3JzYV9pbml0Cityc2Ffa2V5X2xlbl9mdW5jIG1iZWR0bHNfcnNhX2tleV9sZW5fZnVuYworcnNhX3BrY3MxX2RlY3J5cHQgbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdAorcnNhX3BrY3MxX2VuY3J5cHQgbWJlZHRsc19yc2FfcGtjczFfZW5jcnlwdAorcnNhX3BrY3MxX3NpZ24gbWJlZHRsc19yc2FfcGtjczFfc2lnbgorcnNhX3BrY3MxX3ZlcmlmeSBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkKK3JzYV9wcml2YXRlIG1iZWR0bHNfcnNhX3ByaXZhdGUKK3JzYV9wdWJsaWMgbWJlZHRsc19yc2FfcHVibGljCityc2FfcnNhZXNfb2FlcF9kZWNyeXB0IG1iZWR0bHNfcnNhX3JzYWVzX29hZXBfZGVjcnlwdAorcnNhX3JzYWVzX29hZXBfZW5jcnlwdCBtYmVkdGxzX3JzYV9yc2Flc19vYWVwX2VuY3J5cHQKK3JzYV9yc2Flc19wa2NzMV92MTVfZGVjcnlwdCBtYmVkdGxzX3JzYV9yc2Flc19wa2NzMV92MTVfZGVjcnlwdAorcnNhX3JzYWVzX3BrY3MxX3YxNV9lbmNyeXB0IG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9lbmNyeXB0Cityc2FfcnNhc3NhX3BrY3MxX3YxNV9zaWduIG1iZWR0bHNfcnNhX3JzYXNzYV9wa2NzMV92MTVfc2lnbgorcnNhX3JzYXNzYV9wa2NzMV92MTVfdmVyaWZ5IG1iZWR0bHNfcnNhX3JzYXNzYV9wa2NzMV92MTVfdmVyaWZ5Cityc2FfcnNhc3NhX3Bzc19zaWduIG1iZWR0bHNfcnNhX3JzYXNzYV9wc3Nfc2lnbgorcnNhX3JzYXNzYV9wc3NfdmVyaWZ5IG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5Cityc2FfcnNhc3NhX3Bzc192ZXJpZnlfZXh0IG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dAorcnNhX3NlbGZfdGVzdCBtYmVkdGxzX3JzYV9zZWxmX3Rlc3QKK3JzYV9zZXRfcGFkZGluZyBtYmVkdGxzX3JzYV9zZXRfcGFkZGluZworcnNhX3NpZ25fZnVuYyBtYmVkdGxzX3JzYV9zaWduX2Z1bmMKK3NhZmVyX21lbWNtcCBtYmVkdGxzX3NzbF9zYWZlcl9tZW1jbXAKK3NldF9hbGFybSBtYmVkdGxzX3NldF9hbGFybQorc2hhMSBtYmVkdGxzX3NoYTEKK3NoYTFfY29udGV4dCBtYmVkdGxzX3NoYTFfY29udGV4dAorc2hhMV9maWxlIG1iZWR0bHNfc2hhMV9maWxlCitzaGExX2ZpbmlzaCBtYmVkdGxzX3NoYTFfZmluaXNoCitzaGExX2ZyZWUgbWJlZHRsc19zaGExX2ZyZWUKK3NoYTFfaG1hYyBtYmVkdGxzX3NoYTFfaG1hYworc2hhMV9obWFjX2ZpbmlzaCBtYmVkdGxzX3NoYTFfaG1hY19maW5pc2gKK3NoYTFfaG1hY19yZXNldCBtYmVkdGxzX3NoYTFfaG1hY19yZXNldAorc2hhMV9obWFjX3N0YXJ0cyBtYmVkdGxzX3NoYTFfaG1hY19zdGFydHMKK3NoYTFfaG1hY191cGRhdGUgbWJlZHRsc19zaGExX2htYWNfdXBkYXRlCitzaGExX2luZm8gbWJlZHRsc19zaGExX2luZm8KK3NoYTFfaW5pdCBtYmVkdGxzX3NoYTFfaW5pdAorc2hhMV9wcm9jZXNzIG1iZWR0bHNfc2hhMV9wcm9jZXNzCitzaGExX3NlbGZfdGVzdCBtYmVkdGxzX3NoYTFfc2VsZl90ZXN0CitzaGExX3N0YXJ0cyBtYmVkdGxzX3NoYTFfc3RhcnRzCitzaGExX3VwZGF0ZSBtYmVkdGxzX3NoYTFfdXBkYXRlCitzaGEyMjRfaW5mbyBtYmVkdGxzX3NoYTIyNF9pbmZvCitzaGEyNTYgbWJlZHRsc19zaGEyNTYKK3NoYTI1Nl9jb250ZXh0IG1iZWR0bHNfc2hhMjU2X2NvbnRleHQKK3NoYTI1Nl9maWxlIG1iZWR0bHNfc2hhMjU2X2ZpbGUKK3NoYTI1Nl9maW5pc2ggbWJlZHRsc19zaGEyNTZfZmluaXNoCitzaGEyNTZfZnJlZSBtYmVkdGxzX3NoYTI1Nl9mcmVlCitzaGEyNTZfaG1hYyBtYmVkdGxzX3NoYTI1Nl9obWFjCitzaGEyNTZfaG1hY19maW5pc2ggbWJlZHRsc19zaGEyNTZfaG1hY19maW5pc2gKK3NoYTI1Nl9obWFjX3Jlc2V0IG1iZWR0bHNfc2hhMjU2X2htYWNfcmVzZXQKK3NoYTI1Nl9obWFjX3N0YXJ0cyBtYmVkdGxzX3NoYTI1Nl9obWFjX3N0YXJ0cworc2hhMjU2X2htYWNfdXBkYXRlIG1iZWR0bHNfc2hhMjU2X2htYWNfdXBkYXRlCitzaGEyNTZfaW5mbyBtYmVkdGxzX3NoYTI1Nl9pbmZvCitzaGEyNTZfaW5pdCBtYmVkdGxzX3NoYTI1Nl9pbml0CitzaGEyNTZfcHJvY2VzcyBtYmVkdGxzX3NoYTI1Nl9wcm9jZXNzCitzaGEyNTZfc2VsZl90ZXN0IG1iZWR0bHNfc2hhMjU2X3NlbGZfdGVzdAorc2hhMjU2X3N0YXJ0cyBtYmVkdGxzX3NoYTI1Nl9zdGFydHMKK3NoYTI1Nl91cGRhdGUgbWJlZHRsc19zaGEyNTZfdXBkYXRlCitzaGEzODRfaW5mbyBtYmVkdGxzX3NoYTM4NF9pbmZvCitzaGE1MTIgbWJlZHRsc19zaGE1MTIKK3NoYTUxMl9jb250ZXh0IG1iZWR0bHNfc2hhNTEyX2NvbnRleHQKK3NoYTUxMl9maWxlIG1iZWR0bHNfc2hhNTEyX2ZpbGUKK3NoYTUxMl9maW5pc2ggbWJlZHRsc19zaGE1MTJfZmluaXNoCitzaGE1MTJfZnJlZSBtYmVkdGxzX3NoYTUxMl9mcmVlCitzaGE1MTJfaG1hYyBtYmVkdGxzX3NoYTUxMl9obWFjCitzaGE1MTJfaG1hY19maW5pc2ggbWJlZHRsc19zaGE1MTJfaG1hY19maW5pc2gKK3NoYTUxMl9obWFjX3Jlc2V0IG1iZWR0bHNfc2hhNTEyX2htYWNfcmVzZXQKK3NoYTUxMl9obWFjX3N0YXJ0cyBtYmVkdGxzX3NoYTUxMl9obWFjX3N0YXJ0cworc2hhNTEyX2htYWNfdXBkYXRlIG1iZWR0bHNfc2hhNTEyX2htYWNfdXBkYXRlCitzaGE1MTJfaW5mbyBtYmVkdGxzX3NoYTUxMl9pbmZvCitzaGE1MTJfaW5pdCBtYmVkdGxzX3NoYTUxMl9pbml0CitzaGE1MTJfcHJvY2VzcyBtYmVkdGxzX3NoYTUxMl9wcm9jZXNzCitzaGE1MTJfc2VsZl90ZXN0IG1iZWR0bHNfc2hhNTEyX3NlbGZfdGVzdAorc2hhNTEyX3N0YXJ0cyBtYmVkdGxzX3NoYTUxMl9zdGFydHMKK3NoYTUxMl91cGRhdGUgbWJlZHRsc19zaGE1MTJfdXBkYXRlCitzb3VyY2Vfc3RhdGUgbWJlZHRsc19lbnRyb3B5X3NvdXJjZV9zdGF0ZQorc3NsX2NhY2hlX2NvbnRleHQgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dAorc3NsX2NhY2hlX2VudHJ5IG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5Citzc2xfY2FjaGVfZnJlZSBtYmVkdGxzX3NzbF9jYWNoZV9mcmVlCitzc2xfY2FjaGVfZ2V0IG1iZWR0bHNfc3NsX2NhY2hlX2dldAorc3NsX2NhY2hlX2luaXQgbWJlZHRsc19zc2xfY2FjaGVfaW5pdAorc3NsX2NhY2hlX3NldCBtYmVkdGxzX3NzbF9jYWNoZV9zZXQKK3NzbF9jYWNoZV9zZXRfbWF4X2VudHJpZXMgbWJlZHRsc19zc2xfY2FjaGVfc2V0X21heF9lbnRyaWVzCitzc2xfY2FjaGVfc2V0X3RpbWVvdXQgbWJlZHRsc19zc2xfY2FjaGVfc2V0X3RpbWVvdXQKK3NzbF9jaGVja19jZXJ0X3VzYWdlIG1iZWR0bHNfc3NsX2NoZWNrX2NlcnRfdXNhZ2UKK3NzbF9jaXBoZXJzdWl0ZV9mcm9tX2lkIG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQKK3NzbF9jaXBoZXJzdWl0ZV9mcm9tX3N0cmluZyBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV9mcm9tX3N0cmluZworc3NsX2NpcGhlcnN1aXRlX3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdAorc3NsX2NpcGhlcnN1aXRlX3VzZXNfZWMgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdXNlc19lYworc3NsX2NpcGhlcnN1aXRlX3VzZXNfcHNrIG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3VzZXNfcHNrCitzc2xfY2xvc2Vfbm90aWZ5IG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeQorc3NsX2NvbnRleHQgbWJlZHRsc19zc2xfY29udGV4dAorc3NsX2Nvb2tpZV9jaGVjayBtYmVkdGxzX3NzbF9jb29raWVfY2hlY2sKK3NzbF9jb29raWVfY2hlY2tfdCBtYmVkdGxzX3NzbF9jb29raWVfY2hlY2tfdAorc3NsX2Nvb2tpZV9jdHggbWJlZHRsc19zc2xfY29va2llX2N0eAorc3NsX2Nvb2tpZV9mcmVlIG1iZWR0bHNfc3NsX2Nvb2tpZV9mcmVlCitzc2xfY29va2llX2luaXQgbWJlZHRsc19zc2xfY29va2llX2luaXQKK3NzbF9jb29raWVfc2V0X3RpbWVvdXQgbWJlZHRsc19zc2xfY29va2llX3NldF90aW1lb3V0Citzc2xfY29va2llX3NldHVwIG1iZWR0bHNfc3NsX2Nvb2tpZV9zZXR1cAorc3NsX2Nvb2tpZV93cml0ZSBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGUKK3NzbF9jb29raWVfd3JpdGVfdCBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGVfdAorc3NsX2N1cnZlX2lzX2FjY2VwdGFibGUgbWJlZHRsc19zc2xfY3VydmVfaXNfYWNjZXB0YWJsZQorc3NsX2Rlcml2ZV9rZXlzIG1iZWR0bHNfc3NsX2Rlcml2ZV9rZXlzCitzc2xfZHRsc19yZXBsYXlfY2hlY2sgbWJlZHRsc19zc2xfZHRsc19yZXBsYXlfY2hlY2sKK3NzbF9kdGxzX3JlcGxheV91cGRhdGUgbWJlZHRsc19zc2xfZHRsc19yZXBsYXlfdXBkYXRlCitzc2xfZmV0Y2hfaW5wdXQgbWJlZHRsc19zc2xfZmV0Y2hfaW5wdXQKK3NzbF9mbGlnaHRfaXRlbSBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbQorc3NsX2ZsdXNoX291dHB1dCBtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQKK3NzbF9mcmVlIG1iZWR0bHNfc3NsX2ZyZWUKK3NzbF9nZXRfYWxwbl9wcm90b2NvbCBtYmVkdGxzX3NzbF9nZXRfYWxwbl9wcm90b2NvbAorc3NsX2dldF9ieXRlc19hdmFpbCBtYmVkdGxzX3NzbF9nZXRfYnl0ZXNfYXZhaWwKK3NzbF9nZXRfY2lwaGVyc3VpdGUgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlCitzc2xfZ2V0X2NpcGhlcnN1aXRlX2lkIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9pZAorc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lCitzc2xfZ2V0X2NpcGhlcnN1aXRlX3NpZ19wa19hbGcgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX3NpZ19wa19hbGcKK3NzbF9nZXRfcGVlcl9jZXJ0IG1iZWR0bHNfc3NsX2dldF9wZWVyX2NlcnQKK3NzbF9nZXRfcmVjb3JkX2V4cGFuc2lvbiBtYmVkdGxzX3NzbF9nZXRfcmVjb3JkX2V4cGFuc2lvbgorc3NsX2dldF9zZXNzaW9uIG1iZWR0bHNfc3NsX2dldF9zZXNzaW9uCitzc2xfZ2V0X3ZlcmlmeV9yZXN1bHQgbWJlZHRsc19zc2xfZ2V0X3ZlcmlmeV9yZXN1bHQKK3NzbF9nZXRfdmVyc2lvbiBtYmVkdGxzX3NzbF9nZXRfdmVyc2lvbgorc3NsX2hhbmRzaGFrZSBtYmVkdGxzX3NzbF9oYW5kc2hha2UKK3NzbF9oYW5kc2hha2VfY2xpZW50X3N0ZXAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX2NsaWVudF9zdGVwCitzc2xfaGFuZHNoYWtlX2ZyZWUgbWJlZHRsc19zc2xfaGFuZHNoYWtlX2ZyZWUKK3NzbF9oYW5kc2hha2VfcGFyYW1zIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9wYXJhbXMKK3NzbF9oYW5kc2hha2Vfc2VydmVyX3N0ZXAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3NlcnZlcl9zdGVwCitzc2xfaGFuZHNoYWtlX3N0ZXAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3N0ZXAKK3NzbF9oYW5kc2hha2Vfd3JhcHVwIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV93cmFwdXAKK3NzbF9oZHJfbGVuIG1iZWR0bHNfc3NsX2hkcl9sZW4KK3NzbF9oc19oZHJfbGVuIG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4KK3NzbF9od19yZWNvcmRfYWN0aXZhdGUgbWJlZHRsc19zc2xfaHdfcmVjb3JkX2FjdGl2YXRlCitzc2xfaHdfcmVjb3JkX2ZpbmlzaCBtYmVkdGxzX3NzbF9od19yZWNvcmRfZmluaXNoCitzc2xfaHdfcmVjb3JkX2luaXQgbWJlZHRsc19zc2xfaHdfcmVjb3JkX2luaXQKK3NzbF9od19yZWNvcmRfcmVhZCBtYmVkdGxzX3NzbF9od19yZWNvcmRfcmVhZAorc3NsX2h3X3JlY29yZF9yZXNldCBtYmVkdGxzX3NzbF9od19yZWNvcmRfcmVzZXQKK3NzbF9od19yZWNvcmRfd3JpdGUgbWJlZHRsc19zc2xfaHdfcmVjb3JkX3dyaXRlCitzc2xfaW5pdCBtYmVkdGxzX3NzbF9pbml0Citzc2xfa2V5X2NlcnQgbWJlZHRsc19zc2xfa2V5X2NlcnQKK3NzbF9sZWdhY3lfcmVuZWdvdGlhdGlvbiBtYmVkdGxzX3NzbF9jb25mX2xlZ2FjeV9yZW5lZ290aWF0aW9uCitzc2xfbGlzdF9jaXBoZXJzdWl0ZXMgbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMKK3NzbF9tZF9hbGdfZnJvbV9oYXNoIG1iZWR0bHNfc3NsX21kX2FsZ19mcm9tX2hhc2gKK3NzbF9vcHRpbWl6ZV9jaGVja3N1bSBtYmVkdGxzX3NzbF9vcHRpbWl6ZV9jaGVja3N1bQorc3NsX293bl9jZXJ0IG1iZWR0bHNfc3NsX293bl9jZXJ0Citzc2xfb3duX2tleSBtYmVkdGxzX3NzbF9vd25fa2V5Citzc2xfcGFyc2VfY2VydGlmaWNhdGUgbWJlZHRsc19zc2xfcGFyc2VfY2VydGlmaWNhdGUKK3NzbF9wYXJzZV9jaGFuZ2VfY2lwaGVyX3NwZWMgbWJlZHRsc19zc2xfcGFyc2VfY2hhbmdlX2NpcGhlcl9zcGVjCitzc2xfcGFyc2VfZmluaXNoZWQgbWJlZHRsc19zc2xfcGFyc2VfZmluaXNoZWQKK3NzbF9wa19hbGdfZnJvbV9zaWcgbWJlZHRsc19zc2xfcGtfYWxnX2Zyb21fc2lnCitzc2xfcGtjczExX2RlY3J5cHQgbWJlZHRsc19zc2xfcGtjczExX2RlY3J5cHQKK3NzbF9wa2NzMTFfa2V5X2xlbiBtYmVkdGxzX3NzbF9wa2NzMTFfa2V5X2xlbgorc3NsX3BrY3MxMV9zaWduIG1iZWR0bHNfc3NsX3BrY3MxMV9zaWduCitzc2xfcHNrX2Rlcml2ZV9wcmVtYXN0ZXIgbWJlZHRsc19zc2xfcHNrX2Rlcml2ZV9wcmVtYXN0ZXIKK3NzbF9yZWFkIG1iZWR0bHNfc3NsX3JlYWQKK3NzbF9yZWFkX3JlY29yZCBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZAorc3NsX3JlYWRfdmVyc2lvbiBtYmVkdGxzX3NzbF9yZWFkX3ZlcnNpb24KK3NzbF9yZWN2X2ZsaWdodF9jb21wbGV0ZWQgbWJlZHRsc19zc2xfcmVjdl9mbGlnaHRfY29tcGxldGVkCitzc2xfcmVuZWdvdGlhdGUgbWJlZHRsc19zc2xfcmVuZWdvdGlhdGUKK3NzbF9yZXNlbmQgbWJlZHRsc19zc2xfcmVzZW5kCitzc2xfcmVzZXRfY2hlY2tzdW0gbWJlZHRsc19zc2xfcmVzZXRfY2hlY2tzdW0KK3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlCitzc2xfc2VuZF9mYXRhbF9oYW5kc2hha2VfZmFpbHVyZSBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlCitzc2xfc2VuZF9mbGlnaHRfY29tcGxldGVkIG1iZWR0bHNfc3NsX3NlbmRfZmxpZ2h0X2NvbXBsZXRlZAorc3NsX3Nlc3Npb24gbWJlZHRsc19zc2xfc2Vzc2lvbgorc3NsX3Nlc3Npb25fZnJlZSBtYmVkdGxzX3NzbF9zZXNzaW9uX2ZyZWUKK3NzbF9zZXNzaW9uX2luaXQgbWJlZHRsc19zc2xfc2Vzc2lvbl9pbml0Citzc2xfc2Vzc2lvbl9yZXNldCBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0Citzc2xfc2V0X2FscG5fcHJvdG9jb2xzIG1iZWR0bHNfc3NsX2NvbmZfYWxwbl9wcm90b2NvbHMKK3NzbF9zZXRfYXJjNF9zdXBwb3J0IG1iZWR0bHNfc3NsX2NvbmZfYXJjNF9zdXBwb3J0Citzc2xfc2V0X2F1dGhtb2RlIG1iZWR0bHNfc3NsX2NvbmZfYXV0aG1vZGUKK3NzbF9zZXRfYmlvIG1iZWR0bHNfc3NsX3NldF9iaW8KK3NzbF9zZXRfYmlvX3RpbWVvdXQgbWJlZHRsc19zc2xfc2V0X2Jpb190aW1lb3V0Citzc2xfc2V0X2NhX2NoYWluIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4KK3NzbF9zZXRfY2JjX3JlY29yZF9zcGxpdHRpbmcgbWJlZHRsc19zc2xfY29uZl9jYmNfcmVjb3JkX3NwbGl0dGluZworc3NsX3NldF9jaXBoZXJzdWl0ZXMgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXMKK3NzbF9zZXRfY2lwaGVyc3VpdGVzX2Zvcl92ZXJzaW9uIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzX2Zvcl92ZXJzaW9uCitzc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQgbWJlZHRsc19zc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQKK3NzbF9zZXRfY3VydmVzIG1iZWR0bHNfc3NsX2NvbmZfY3VydmVzCitzc2xfc2V0X2RiZyBtYmVkdGxzX3NzbF9jb25mX2RiZworc3NsX3NldF9kaF9wYXJhbSBtYmVkdGxzX3NzbF9jb25mX2RoX3BhcmFtCitzc2xfc2V0X2RoX3BhcmFtX2N0eCBtYmVkdGxzX3NzbF9jb25mX2RoX3BhcmFtX2N0eAorc3NsX3NldF9kdGxzX2FudGlfcmVwbGF5IG1iZWR0bHNfc3NsX2NvbmZfZHRsc19hbnRpX3JlcGxheQorc3NsX3NldF9kdGxzX2JhZG1hY19saW1pdCBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYmFkbWFjX2xpbWl0Citzc2xfc2V0X2R0bHNfY29va2llcyBtYmVkdGxzX3NzbF9jb25mX2R0bHNfY29va2llcworc3NsX3NldF9lbmNyeXB0X3RoZW5fbWFjIG1iZWR0bHNfc3NsX2NvbmZfZW5jcnlwdF90aGVuX21hYworc3NsX3NldF9lbmRwb2ludCBtYmVkdGxzX3NzbF9jb25mX2VuZHBvaW50Citzc2xfc2V0X2V4dGVuZGVkX21hc3Rlcl9zZWNyZXQgbWJlZHRsc19zc2xfY29uZl9leHRlbmRlZF9tYXN0ZXJfc2VjcmV0Citzc2xfc2V0X2ZhbGxiYWNrIG1iZWR0bHNfc3NsX2NvbmZfZmFsbGJhY2sKK3NzbF9zZXRfaGFuZHNoYWtlX3RpbWVvdXQgbWJlZHRsc19zc2xfY29uZl9oYW5kc2hha2VfdGltZW91dAorc3NsX3NldF9ob3N0bmFtZSBtYmVkdGxzX3NzbF9zZXRfaG9zdG5hbWUKK3NzbF9zZXRfbWF4X2ZyYWdfbGVuIG1iZWR0bHNfc3NsX2NvbmZfbWF4X2ZyYWdfbGVuCitzc2xfc2V0X21heF92ZXJzaW9uIG1iZWR0bHNfc3NsX2NvbmZfbWF4X3ZlcnNpb24KK3NzbF9zZXRfbWluX3ZlcnNpb24gbWJlZHRsc19zc2xfY29uZl9taW5fdmVyc2lvbgorc3NsX3NldF9vd25fY2VydCBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0Citzc2xfc2V0X293bl9jZXJ0X2FsdCBtYmVkdGxzX3NzbF9zZXRfb3duX2NlcnRfYWx0Citzc2xfc2V0X293bl9jZXJ0X3JzYSBtYmVkdGxzX3NzbF9zZXRfb3duX2NlcnRfcnNhCitzc2xfc2V0X3BzayBtYmVkdGxzX3NzbF9jb25mX3Bzaworc3NsX3NldF9wc2tfY2IgbWJlZHRsc19zc2xfY29uZl9wc2tfY2IKK3NzbF9zZXRfcmVuZWdvdGlhdGlvbiBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb24KK3NzbF9zZXRfcmVuZWdvdGlhdGlvbl9lbmZvcmNlZCBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb25fZW5mb3JjZWQKK3NzbF9zZXRfcmVuZWdvdGlhdGlvbl9wZXJpb2QgbWJlZHRsc19zc2xfY29uZl9yZW5lZ290aWF0aW9uX3BlcmlvZAorc3NsX3NldF9ybmcgbWJlZHRsc19zc2xfY29uZl9ybmcKK3NzbF9zZXRfc2Vzc2lvbiBtYmVkdGxzX3NzbF9zZXRfc2Vzc2lvbgorc3NsX3NldF9zZXNzaW9uX2NhY2hlIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl9jYWNoZQorc3NsX3NldF9zZXNzaW9uX3RpY2tldF9saWZldGltZSBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fdGlja2V0X2xpZmV0aW1lCitzc2xfc2V0X3Nlc3Npb25fdGlja2V0cyBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fdGlja2V0cworc3NsX3NldF9zbmkgbWJlZHRsc19zc2xfY29uZl9zbmkKK3NzbF9zZXRfdHJhbnNwb3J0IG1iZWR0bHNfc3NsX2NvbmZfdHJhbnNwb3J0Citzc2xfc2V0X3RydW5jYXRlZF9obWFjIG1iZWR0bHNfc3NsX2NvbmZfdHJ1bmNhdGVkX2htYWMKK3NzbF9zZXRfdmVyaWZ5IG1iZWR0bHNfc3NsX2NvbmZfdmVyaWZ5Citzc2xfc2lnX2Zyb21fcGsgbWJlZHRsc19zc2xfc2lnX2Zyb21fcGsKK3NzbF9zdGF0ZXMgbWJlZHRsc19zc2xfc3RhdGVzCitzc2xfdGlja2V0X2tleXMgbWJlZHRsc19zc2xfdGlja2V0X2tleXMKK3NzbF90cmFuc2Zvcm0gbWJlZHRsc19zc2xfdHJhbnNmb3JtCitzc2xfdHJhbnNmb3JtX2ZyZWUgbWJlZHRsc19zc2xfdHJhbnNmb3JtX2ZyZWUKK3NzbF93cml0ZSBtYmVkdGxzX3NzbF93cml0ZQorc3NsX3dyaXRlX2NlcnRpZmljYXRlIG1iZWR0bHNfc3NsX3dyaXRlX2NlcnRpZmljYXRlCitzc2xfd3JpdGVfY2hhbmdlX2NpcGhlcl9zcGVjIG1iZWR0bHNfc3NsX3dyaXRlX2NoYW5nZV9jaXBoZXJfc3BlYworc3NsX3dyaXRlX2ZpbmlzaGVkIG1iZWR0bHNfc3NsX3dyaXRlX2ZpbmlzaGVkCitzc2xfd3JpdGVfcmVjb3JkIG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZAorc3NsX3dyaXRlX3ZlcnNpb24gbWJlZHRsc19zc2xfd3JpdGVfdmVyc2lvbgorc3VwcG9ydGVkX2NpcGhlcnMgbWJlZHRsc19jaXBoZXJfc3VwcG9ydGVkCit0X3NpbnQgbWJlZHRsc19tcGlfc2ludAordF91ZGJsIG1iZWR0bHNfdF91ZGJsCit0X3VpbnQgbWJlZHRsc19tcGlfdWludAordGVzdF9jYV9jcnQgbWJlZHRsc190ZXN0X2NhX2NydAordGVzdF9jYV9jcnRfZWMgbWJlZHRsc190ZXN0X2NhX2NydF9lYwordGVzdF9jYV9jcnRfcnNhIG1iZWR0bHNfdGVzdF9jYV9jcnRfcnNhCit0ZXN0X2NhX2tleSBtYmVkdGxzX3Rlc3RfY2Ffa2V5Cit0ZXN0X2NhX2tleV9lYyBtYmVkdGxzX3Rlc3RfY2Ffa2V5X2VjCit0ZXN0X2NhX2tleV9yc2EgbWJlZHRsc190ZXN0X2NhX2tleV9yc2EKK3Rlc3RfY2FfbGlzdCBtYmVkdGxzX3Rlc3RfY2FzX3BlbQordGVzdF9jYV9wd2QgbWJlZHRsc190ZXN0X2NhX3B3ZAordGVzdF9jYV9wd2RfZWMgbWJlZHRsc190ZXN0X2NhX3B3ZF9lYwordGVzdF9jYV9wd2RfcnNhIG1iZWR0bHNfdGVzdF9jYV9wd2RfcnNhCit0ZXN0X2NsaV9jcnQgbWJlZHRsc190ZXN0X2NsaV9jcnQKK3Rlc3RfY2xpX2NydF9lYyBtYmVkdGxzX3Rlc3RfY2xpX2NydF9lYwordGVzdF9jbGlfY3J0X3JzYSBtYmVkdGxzX3Rlc3RfY2xpX2NydF9yc2EKK3Rlc3RfY2xpX2tleSBtYmVkdGxzX3Rlc3RfY2xpX2tleQordGVzdF9jbGlfa2V5X2VjIG1iZWR0bHNfdGVzdF9jbGlfa2V5X2VjCit0ZXN0X2NsaV9rZXlfcnNhIG1iZWR0bHNfdGVzdF9jbGlfa2V5X3JzYQordGVzdF9kaG1fcGFyYW1zIG1iZWR0bHNfdGVzdF9kaG1fcGFyYW1zCit0ZXN0X3Nydl9jcnQgbWJlZHRsc190ZXN0X3Nydl9jcnQKK3Rlc3Rfc3J2X2NydF9lYyBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9lYwordGVzdF9zcnZfY3J0X3JzYSBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9yc2EKK3Rlc3Rfc3J2X2tleSBtYmVkdGxzX3Rlc3Rfc3J2X2tleQordGVzdF9zcnZfa2V5X2VjIG1iZWR0bHNfdGVzdF9zcnZfa2V5X2VjCit0ZXN0X3Nydl9rZXlfcnNhIG1iZWR0bHNfdGVzdF9zcnZfa2V5X3JzYQordGhyZWFkaW5nX211dGV4X3QgbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdAordGhyZWFkaW5nX3NldF9hbHQgbWJlZHRsc190aHJlYWRpbmdfc2V0X2FsdAordGltaW5nX3NlbGZfdGVzdCBtYmVkdGxzX3RpbWluZ19zZWxmX3Rlc3QKK3ZlcnNpb25fY2hlY2tfZmVhdHVyZSBtYmVkdGxzX3ZlcnNpb25fY2hlY2tfZmVhdHVyZQordmVyc2lvbl9nZXRfbnVtYmVyIG1iZWR0bHNfdmVyc2lvbl9nZXRfbnVtYmVyCit2ZXJzaW9uX2dldF9zdHJpbmcgbWJlZHRsc192ZXJzaW9uX2dldF9zdHJpbmcKK3ZlcnNpb25fZ2V0X3N0cmluZ19mdWxsIG1iZWR0bHNfdmVyc2lvbl9nZXRfc3RyaW5nX2Z1bGwKK3g1MDlfYml0c3RyaW5nIG1iZWR0bHNfeDUwOV9iaXRzdHJpbmcKK3g1MDlfYnVmIG1iZWR0bHNfeDUwOV9idWYKK3g1MDlfY3JsIG1iZWR0bHNfeDUwOV9jcmwKK3g1MDlfY3JsX2VudHJ5IG1iZWR0bHNfeDUwOV9jcmxfZW50cnkKK3g1MDlfY3JsX2ZyZWUgbWJlZHRsc194NTA5X2NybF9mcmVlCit4NTA5X2NybF9pbmZvIG1iZWR0bHNfeDUwOV9jcmxfaW5mbworeDUwOV9jcmxfaW5pdCBtYmVkdGxzX3g1MDlfY3JsX2luaXQKK3g1MDlfY3JsX3BhcnNlIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2UKK3g1MDlfY3JsX3BhcnNlX2RlciBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2RlcgoreDUwOV9jcmxfcGFyc2VfZmlsZSBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2ZpbGUKK3g1MDlfY3J0IG1iZWR0bHNfeDUwOV9jcnQKK3g1MDlfY3J0X2NoZWNrX2V4dGVuZGVkX2tleV91c2FnZSBtYmVkdGxzX3g1MDlfY3J0X2NoZWNrX2V4dGVuZGVkX2tleV91c2FnZQoreDUwOV9jcnRfY2hlY2tfa2V5X3VzYWdlIG1iZWR0bHNfeDUwOV9jcnRfY2hlY2tfa2V5X3VzYWdlCit4NTA5X2NydF9mcmVlIG1iZWR0bHNfeDUwOV9jcnRfZnJlZQoreDUwOV9jcnRfaW5mbyBtYmVkdGxzX3g1MDlfY3J0X2luZm8KK3g1MDlfY3J0X2luaXQgbWJlZHRsc194NTA5X2NydF9pbml0Cit4NTA5X2NydF9wYXJzZSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlCit4NTA5X2NydF9wYXJzZV9kZXIgbWJlZHRsc194NTA5X2NydF9wYXJzZV9kZXIKK3g1MDlfY3J0X3BhcnNlX2ZpbGUgbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlCit4NTA5X2NydF9wYXJzZV9wYXRoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aAoreDUwOV9jcnRfcmV2b2tlZCBtYmVkdGxzX3g1MDlfY3J0X2lzX3Jldm9rZWQKK3g1MDlfY3J0X3ZlcmlmeSBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeQoreDUwOV9jcnRfdmVyaWZ5X2luZm8gbWJlZHRsc194NTA5X2NydF92ZXJpZnlfaW5mbworeDUwOV9jc3IgbWJlZHRsc194NTA5X2NzcgoreDUwOV9jc3JfZnJlZSBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUKK3g1MDlfY3NyX2luZm8gbWJlZHRsc194NTA5X2Nzcl9pbmZvCit4NTA5X2Nzcl9pbml0IG1iZWR0bHNfeDUwOV9jc3JfaW5pdAoreDUwOV9jc3JfcGFyc2UgbWJlZHRsc194NTA5X2Nzcl9wYXJzZQoreDUwOV9jc3JfcGFyc2VfZGVyIG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZGVyCit4NTA5X2Nzcl9wYXJzZV9maWxlIG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZmlsZQoreDUwOV9kbl9nZXRzIG1iZWR0bHNfeDUwOV9kbl9nZXRzCit4NTA5X2dldF9hbGcgbWJlZHRsc194NTA5X2dldF9hbGcKK3g1MDlfZ2V0X2FsZ19udWxsIG1iZWR0bHNfeDUwOV9nZXRfYWxnX251bGwKK3g1MDlfZ2V0X2V4dCBtYmVkdGxzX3g1MDlfZ2V0X2V4dAoreDUwOV9nZXRfbmFtZSBtYmVkdGxzX3g1MDlfZ2V0X25hbWUKK3g1MDlfZ2V0X3JzYXNzYV9wc3NfcGFyYW1zIG1iZWR0bHNfeDUwOV9nZXRfcnNhc3NhX3Bzc19wYXJhbXMKK3g1MDlfZ2V0X3NlcmlhbCBtYmVkdGxzX3g1MDlfZ2V0X3NlcmlhbAoreDUwOV9nZXRfc2lnIG1iZWR0bHNfeDUwOV9nZXRfc2lnCit4NTA5X2dldF9zaWdfYWxnIG1iZWR0bHNfeDUwOV9nZXRfc2lnX2FsZworeDUwOV9nZXRfdGltZSBtYmVkdGxzX3g1MDlfZ2V0X3RpbWUKK3g1MDlfa2V5X3NpemVfaGVscGVyIG1iZWR0bHNfeDUwOV9rZXlfc2l6ZV9oZWxwZXIKK3g1MDlfbmFtZSBtYmVkdGxzX3g1MDlfbmFtZQoreDUwOV9vaWRfZ2V0X2Rlc2NyaXB0aW9uIG1iZWR0bHNfeDUwOV9vaWRfZ2V0X2Rlc2NyaXB0aW9uCit4NTA5X29pZF9nZXRfbnVtZXJpY19zdHJpbmcgbWJlZHRsc194NTA5X29pZF9nZXRfbnVtZXJpY19zdHJpbmcKK3g1MDlfc2VsZl90ZXN0IG1iZWR0bHNfeDUwOV9zZWxmX3Rlc3QKK3g1MDlfc2VxdWVuY2UgbWJlZHRsc194NTA5X3NlcXVlbmNlCit4NTA5X3NlcmlhbF9nZXRzIG1iZWR0bHNfeDUwOV9zZXJpYWxfZ2V0cworeDUwOV9zZXRfZXh0ZW5zaW9uIG1iZWR0bHNfeDUwOV9zZXRfZXh0ZW5zaW9uCit4NTA5X3NpZ19hbGdfZ2V0cyBtYmVkdGxzX3g1MDlfc2lnX2FsZ19nZXRzCit4NTA5X3N0cmluZ190b19uYW1lcyBtYmVkdGxzX3g1MDlfc3RyaW5nX3RvX25hbWVzCit4NTA5X3RpbWUgbWJlZHRsc194NTA5X3RpbWUKK3g1MDlfdGltZV9leHBpcmVkIG1iZWR0bHNfeDUwOV90aW1lX2lzX3Bhc3QKK3g1MDlfdGltZV9mdXR1cmUgbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlCit4NTA5X3dyaXRlX2V4dGVuc2lvbnMgbWJlZHRsc194NTA5X3dyaXRlX2V4dGVuc2lvbnMKK3g1MDlfd3JpdGVfbmFtZXMgbWJlZHRsc194NTA5X3dyaXRlX25hbWVzCit4NTA5X3dyaXRlX3NpZyBtYmVkdGxzX3g1MDlfd3JpdGVfc2lnCit4NTA5d3JpdGVfY2VydCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0Cit4NTA5d3JpdGVfY3J0X2RlciBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfZGVyCit4NTA5d3JpdGVfY3J0X2ZyZWUgbWJlZHRsc194NTA5d3JpdGVfY3J0X2ZyZWUKK3g1MDl3cml0ZV9jcnRfaW5pdCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfaW5pdAoreDUwOXdyaXRlX2NydF9wZW0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3BlbQoreDUwOXdyaXRlX2NydF9zZXRfYXV0aG9yaXR5X2tleV9pZGVudGlmaWVyIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfYXV0aG9yaXR5X2tleV9pZGVudGlmaWVyCit4NTA5d3JpdGVfY3J0X3NldF9iYXNpY19jb25zdHJhaW50cyBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2Jhc2ljX2NvbnN0cmFpbnRzCit4NTA5d3JpdGVfY3J0X3NldF9leHRlbnNpb24gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9leHRlbnNpb24KK3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9rZXkgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9pc3N1ZXJfa2V5Cit4NTA5d3JpdGVfY3J0X3NldF9pc3N1ZXJfbmFtZSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9uYW1lCit4NTA5d3JpdGVfY3J0X3NldF9rZXlfdXNhZ2UgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9rZXlfdXNhZ2UKK3g1MDl3cml0ZV9jcnRfc2V0X21kX2FsZyBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X21kX2FsZworeDUwOXdyaXRlX2NydF9zZXRfbnNfY2VydF90eXBlIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfbnNfY2VydF90eXBlCit4NTA5d3JpdGVfY3J0X3NldF9zZXJpYWwgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zZXJpYWwKK3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXkKK3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5X2lkZW50aWZpZXIgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X2tleV9pZGVudGlmaWVyCit4NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X25hbWUgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X25hbWUKK3g1MDl3cml0ZV9jcnRfc2V0X3ZhbGlkaXR5IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfdmFsaWRpdHkKK3g1MDl3cml0ZV9jcnRfc2V0X3ZlcnNpb24gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF92ZXJzaW9uCit4NTA5d3JpdGVfY3NyIG1iZWR0bHNfeDUwOXdyaXRlX2NzcgoreDUwOXdyaXRlX2Nzcl9kZXIgbWJlZHRsc194NTA5d3JpdGVfY3NyX2RlcgoreDUwOXdyaXRlX2Nzcl9mcmVlIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9mcmVlCit4NTA5d3JpdGVfY3NyX2luaXQgbWJlZHRsc194NTA5d3JpdGVfY3NyX2luaXQKK3g1MDl3cml0ZV9jc3JfcGVtIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9wZW0KK3g1MDl3cml0ZV9jc3Jfc2V0X2V4dGVuc2lvbiBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2V4dGVuc2lvbgoreDUwOXdyaXRlX2Nzcl9zZXRfa2V5IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfa2V5Cit4NTA5d3JpdGVfY3NyX3NldF9rZXlfdXNhZ2UgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9rZXlfdXNhZ2UKK3g1MDl3cml0ZV9jc3Jfc2V0X21kX2FsZyBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X21kX2FsZworeDUwOXdyaXRlX2Nzcl9zZXRfbnNfY2VydF90eXBlIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfbnNfY2VydF90eXBlCit4NTA5d3JpdGVfY3NyX3NldF9zdWJqZWN0X25hbWUgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9zdWJqZWN0X25hbWUKK3h0ZWFfY29udGV4dCBtYmVkdGxzX3h0ZWFfY29udGV4dAoreHRlYV9jcnlwdF9jYmMgbWJlZHRsc194dGVhX2NyeXB0X2NiYworeHRlYV9jcnlwdF9lY2IgbWJlZHRsc194dGVhX2NyeXB0X2VjYgoreHRlYV9mcmVlIG1iZWR0bHNfeHRlYV9mcmVlCit4dGVhX2luaXQgbWJlZHRsc194dGVhX2luaXQKK3h0ZWFfc2VsZl90ZXN0IG1iZWR0bHNfeHRlYV9zZWxmX3Rlc3QKK3h0ZWFfc2V0dXAgbWJlZHRsc194dGVhX3NldHVwCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZlcnNpb25fZmVhdHVyZXMuZm10IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92ZXJzaW9uX2ZlYXR1cmVzLmZtdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjdlZGExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92ZXJzaW9uX2ZlYXR1cmVzLmZtdApAQCAtMCwwICsxLDYwIEBACisvKgorICogIFZlcnNpb24gZmVhdHVyZSBpbmZvcm1hdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fQykKKworI2luY2x1ZGUgIm1iZWR0bHMvdmVyc2lvbi5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyICpmZWF0dXJlc1tdID0geworI2lmIGRlZmluZWQoTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTKQorRkVBVFVSRV9ERUZJTkVTCisjZW5kaWYgLyogTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTICovCisgICAgTlVMTAorfTsKKworaW50IG1iZWR0bHNfdmVyc2lvbl9jaGVja19mZWF0dXJlKCBjb25zdCBjaGFyICpmZWF0dXJlICkKK3sKKyAgICBjb25zdCBjaGFyICoqaWR4ID0gZmVhdHVyZXM7CisKKyAgICBpZiggKmlkeCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMiApOworCisgICAgaWYoIGZlYXR1cmUgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIHdoaWxlKCAqaWR4ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoICFzdHJjbXAoICppZHgsIGZlYXR1cmUgKSApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgaWR4Kys7CisgICAgfQorICAgIHJldHVybiggLTEgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfVkVSU0lPTl9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZzMjAxMC1hcHAtdGVtcGxhdGUudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnMyMDEwLWFwcC10ZW1wbGF0ZS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMzg1ODcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZzMjAxMC1hcHAtdGVtcGxhdGUudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1w8UEFUSE5BTUU+LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPjxHVUlEPjwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPjxBUFBOQU1FPjwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZzMjAxMC1tYWluLXRlbXBsYXRlLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZzMjAxMC1tYWluLXRlbXBsYXRlLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxZjVjYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnMyMDEwLW1haW4tdGVtcGxhdGUudmN4cHJvagpAQCAtMCwwICsxLDE1MyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5tYmVkVExTPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TUJFRFRMU19FWFBPUlRTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8Q29tcGlsZUFzPkNvbXBpbGVBc0M8L0NvbXBpbGVBcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO01CRURUTFNfRVhQT1JUUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPENvbXBpbGVBcz5Db21waWxlQXNDPC9Db21waWxlQXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNQkVEVExTX0VYUE9SVFM7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNQkVEVExTX0VYUE9SVFM7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CitIRUFERVJfRU5UUklFUworICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KK1NPVVJDRV9FTlRSSUVTCisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czIwMTAtc2xuLXRlbXBsYXRlLnNsbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnMyMDEwLXNsbi10ZW1wbGF0ZS5zbG4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3YWQyYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnMyMDEwLXNsbi10ZW1wbGF0ZS5zbG4KQEAgLTAsMCArMSwyOCBAQAor77u/CitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMS4wMAorIyBWaXN1YWwgQysrIEV4cHJlc3MgMjAxMAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYmVkVExTIiwgIm1iZWRUTFMudmN4cHJvaiIsICJ7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSIKK0VuZFByb2plY3QKK0FQUF9FTlRSSUVTCitHbG9iYWwKKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbgorCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyCisJCURlYnVnfHg2NCA9IERlYnVnfHg2NAorCQlSZWxlYXNlfFdpbjMyID0gUmVsZWFzZXxXaW4zMgorCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0CisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uCisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorQ09ORl9FTlRSSUVTCisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQorCUVuZEdsb2JhbFNlY3Rpb24KK0VuZEdsb2JhbApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czYtYXBwLXRlbXBsYXRlLmRzcCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnM2LWFwcC10ZW1wbGF0ZS5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkYmVhMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnM2LWFwcC10ZW1wbGF0ZS5kc3AKQEAgLTAsMCArMSwxMDEgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iPEFQUE5BTUU+IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgKiogRE8gTk9UIEVESVQgKioNCisNCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMNCisNCitDRkc9PEFQUE5BTUU+IC0gV2luMzIgRGVidWcNCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgIjxBUFBOQU1FPi5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAiPEFQUE5BTUU+Lm1hayIgQ0ZHPSI8QVBQTkFNRT4gLSBXaW4zMiBEZWJ1ZyINCishTUVTU0FHRSANCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCishTUVTU0FHRSANCishTUVTU0FHRSAiPEFQUE5BTUU+IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSAiPEFQUE5BTUU+IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQorIU1FU1NBR0UgDQorDQorIyBCZWdpbiBQcm9qZWN0DQorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCisjIFBST1AgU2NjX1Byb2pOYW1lICIiDQorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCitDUFA9Y2wuZXhlDQorUlNDPXJjLmV4ZQ0KKw0KKyFJRiAgIiQoQ0ZHKSIgPT0gIjxBUFBOQU1FPiAtIFdpbjMyIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgInRlbXAiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgIiINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAidGVtcCINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwYyAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwYyAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliICBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliICBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIjxBUFBOQU1FPiAtIFdpbjMyIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIiINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJ0ZW1wIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICIiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgInRlbXAiDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aNyAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1o3IC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAgL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwYyAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwYyAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliICBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliICBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQorDQorIUVORElGIA0KKw0KKyMgQmVnaW4gVGFyZ2V0DQorDQorIyBOYW1lICI8QVBQTkFNRT4gLSBXaW4zMiBSZWxlYXNlIg0KKyMgTmFtZSAiPEFQUE5BTUU+IC0gV2luMzIgRGVidWciDQorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHByb2dyYW1zXDxQQVRITkFNRT4uYw0KKyMgQUREIENQUCAvSSAiLi4vLi4vaW5jbHVkZSINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCINCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIg0KKyMgRW5kIEdyb3VwDQorIyBFbmQgVGFyZ2V0DQorIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnM2LW1haW4tdGVtcGxhdGUuZHNwIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czYtbWFpbi10ZW1wbGF0ZS5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM3MjhjNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnM2LW1haW4tdGVtcGxhdGUuZHNwCkBAIC0wLDAgKzEsOTQgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ibWJlZHRscyIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgKiogRE8gTk9UIEVESVQgKioNCisNCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIgMHgwMTA0DQorDQorQ0ZHPW1iZWR0bHMgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJtYmVkdGxzLm1hayIuCishTUVTU0FHRSANCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgIm1iZWR0bHMubWFrIiBDRkc9Im1iZWR0bHMgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFICJtYmVkdGxzIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIpCishTUVTU0FHRSAibWJlZHRscyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikKKyFNRVNTQUdFIA0KKw0KKyMgQmVnaW4gUHJvamVjdA0KKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQorQ1BQPWNsLmV4ZQ0KK1JTQz1yYy5leGUNCisNCishSUYgICIkKENGRykiID09ICJtYmVkdGxzIC0gV2luMzIgUmVsZWFzZSIKKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIiINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJ0ZW1wIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICIiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgInRlbXAiDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL1lYIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9JICIuLi8uLi9pbmNsdWRlIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9ZWCAvRkQgL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwYyAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwYyAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCisjIEFERCBMSUIzMiAvbm9sb2dvDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIm1iZWR0bHMgLSBXaW4zMiBEZWJ1ZyIKKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIiINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJ0ZW1wIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICIiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgInRlbXAiDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL1o3IC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9ZWCAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9HWCAvWjcgL09kIC9JICIuLi8uLi9pbmNsdWRlIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9ZWCAvRkQgL0daIC9jDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MGMgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MGMgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSUIzMj1saW5rLmV4ZSAtbGliDQorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvDQorIyBBREQgTElCMzIgL25vbG9nbw0KKw0KKyFFTkRJRg0KKw0KKyMgQmVnaW4gVGFyZ2V0DQorDQorIyBOYW1lICJtYmVkdGxzIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAibWJlZHRscyAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCitTT1VSQ0VfRU5UUklFUw0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCINCitIRUFERVJfRU5UUklFUw0KKyMgRW5kIEdyb3VwDQorIyBFbmQgVGFyZ2V0DQorIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnM2LXdvcmtzcGFjZS10ZW1wbGF0ZS5kc3cgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZzNi13b3Jrc3BhY2UtdGVtcGxhdGUuZHN3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOTAwOTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZzNi13b3Jrc3BhY2UtdGVtcGxhdGUuZHN3CkBAIC0wLDAgKzEsMTggQEAKK01pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCisNCitBUFBfRU5UUklFUw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitHbG9iYWw6DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTwzPg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9lY2MtaGVhcC5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2VjYy1oZWFwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0YTA0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9lY2MtaGVhcC5zaApAQCAtMCwwICsxLDc0IEBACisjIS9iaW4vc2gKKworIyBNZWFzdXJlIGhlYXAgdXNhZ2UgKGFuZCBwZXJmb3JtYW5jZSkgb2YgRUNDIG9wZXJhdGlvbnMgd2l0aCB2YXJpb3VzIHZhbHVlcyBvZgorIyB0aGUgcmVsZXZhbnQgdHVuYWJsZSBjb21waWxlLXRpbWUgcGFyYW1ldGVycy4KKyMKKyMgVXNhZ2UgKHByZWZlcmFibHkgb24gYSAzMi1iaXQgcGxhdGZvcm0pOgorIyBjbWFrZSAtRCBDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgLgorIyBzY3JpcHRzL2VjYy1oZWFwLnNoIHwgdGVlIGVjYy1oZWFwLmxvZworCitzZXQgLWV1CisKK0NPTkZJR19IPSdpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgnCisKK2lmIFsgLXIgJENPTkZJR19IIF07IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gIiRDT05GSUdfSCBub3QgZm91bmQiID4mMgorICAgIGV4aXQgMQorZmkKKworaWYgZ3JlcCAtaSBjbWFrZSBNYWtlZmlsZSA+L2Rldi9udWxsOyB0aGVuIDo7IGVsc2UKKyAgICBlY2hvICJOZWVkcyBDbWFrZSIgPiYyCisgICAgZXhpdCAxCitmaQorCitpZiBnaXQgc3RhdHVzIHwgZ3JlcCAtRiAkQ09ORklHX0ggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgZWNobyAiY29uZmlnLmggbm90IGNsZWFuIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK0NPTkZJR19CQUs9JHtDT05GSUdfSH0uYmFrCitjcCAkQ09ORklHX0ggJENPTkZJR19CQUsKKworY2F0IDw8IEVPRiA+JENPTkZJR19ICisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fQworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX01FTU9SWQorI2RlZmluZSBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworI2RlZmluZSBNQkVEVExTX01FTU9SWV9ERUJVRworCisjZGVmaW5lIE1CRURUTFNfVElNSU5HX0MKKworI2RlZmluZSBNQkVEVExTX0JJR05VTV9DCisjZGVmaW5lIE1CRURUTFNfRUNQX0MKKyNkZWZpbmUgTUJFRFRMU19BU04xX1BBUlNFX0MKKyNkZWZpbmUgTUJFRFRMU19BU04xX1dSSVRFX0MKKyNkZWZpbmUgTUJFRFRMU19FQ0RTQV9DCisjZGVmaW5lIE1CRURUTFNfRUNESF9DCisKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECisKKyNpbmNsdWRlICJjaGVja19jb25maWcuaCIKKworLy8jZGVmaW5lIE1CRURUTFNfRUNQX1dJTkRPV19TSVpFICAgICAgICAgICAgNgorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0ZJWEVEX1BPSU5UX09QVElNICAgICAgMQorRU9GCisKK2ZvciBGIGluIDAgMTsgZG8KKyAgICBmb3IgVyBpbiAyIDMgNCA1IDY7IGRvCisgICAgICAgIHNjcmlwdHMvY29uZmlnLnBsIHNldCBNQkVEVExTX0VDUF9XSU5ET1dfU0laRSAkVworICAgICAgICBzY3JpcHRzL2NvbmZpZy5wbCBzZXQgTUJFRFRMU19FQ1BfRklYRURfUE9JTlRfT1BUSU0gJEYKKyAgICAgICAgbWFrZSBiZW5jaG1hcmsgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgIGVjaG8gImZpeGVkIHBvaW50IG9wdGltID0gJEYsIG1heCB3aW5kb3cgc2l6ZSA9ICRXIgorICAgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICAgICAgcHJvZ3JhbXMvdGVzdC9iZW5jaG1hcmsKKyAgICBkb25lCitkb25lCisKKyMgY2xlYW51cAorCittdiAkQ09ORklHX0JBSyAkQ09ORklHX0gKK21ha2UgY2xlYW4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2ZpbmQtbWVtLWxlYWsuY29jY2kgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9maW5kLW1lbS1sZWFrLmNvY2NpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZmU0NTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9maW5kLW1lbS1sZWFrLmNvY2NpCkBAIC0wLDAgKzEsMjAgQEAKK0BACitleHByZXNzaW9uIHgsIHk7CitzdGF0ZW1lbnQgUzsKK0BACisgIHggPSBtYmVkdGxzX21hbGxvYyguLi4pOworICB5ID0gbWJlZHRsc19tYWxsb2MoLi4uKTsKKyAgLi4uCisqIGlmICh4ID09IE5VTEwgfHwgeSA9PSBOVUxMKQorICAgIFMKKworQEAKK2V4cHJlc3Npb24geCwgeTsKK3N0YXRlbWVudCBTOworQEAKKyAgaWYgKAorKiAgICh4ID0gbWJlZHRsc19tYWxsb2MoLi4uKSkgPT0gTlVMTAorICAgIHx8CisqICAgKHkgPSBtYmVkdGxzX21hbGxvYyguLi4pKSA9PSBOVUxMCisgICkKKyAgICBTCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9mb290cHJpbnQuc2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9mb290cHJpbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDM4ZTUwYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2Zvb3RwcmludC5zaApAQCAtMCwwICsxLDExNCBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjIFB1cnBvc2UKKyMKKyMgVGhpcyBzY3JpcHQgZGV0ZXJtaW5lcyBST00gc2l6ZSAob3IgY29kZSBzaXplKSBmb3IgdGhlIHN0YW5kYXJkIG1iZWQgVExTCisjIGNvbmZpZ3VyYXRpb25zLCB3aGVuIGJ1aWx0IGZvciBhIENvcnRleCBNMy9NNCB0YXJnZXQuCisjCisjIENvbmZpZ3VyYXRpb25zIGluY2x1ZGVkOgorIyAgIGRlZmF1bHQgICAgaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oCisjICAgeW90dGEgICAgICB5b3R0YS9tb2R1bGUvbWJlZHRscy9jb25maWcuaAorIyAgIHRocmVhZCAgICAgY29uZmlncy9jb25maWctdGhyZWFkLmgKKyMgICBzdWl0ZS1iICAgIGNvbmZpZ3MvY29uZmlnLXN1aXRlLWIuaAorIyAgIHBzayAgICAgICAgY29uZmlncy9jb25maWctY2NtLXBzay10bHMxXzIuaAorIworIyBVc2FnZTogZm9vdHByaW50LnNoCisjCitzZXQgLWV1CisKK0NPTkZJR19IPSdpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgnCisKK2lmIFsgLXIgJENPTkZJR19IIF07IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gIiRDT05GSUdfSCBub3QgZm91bmQiID4mMgorICAgIGVjaG8gIlRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHJ1biBmcm9tIHRoZSByb290IG9mIiA+JjIKKyAgICBlY2hvICJhIGdpdCBjaGVja291dCBvciB1bmNvbXByZXNzZWQgdGFyYmFsbCIgPiYyCisgICAgZXhpdCAxCitmaQorCitpZiBncmVwIC1pIGNtYWtlIE1ha2VmaWxlID4vZGV2L251bGw7IHRoZW4KKyAgICBlY2hvICJOb3QgY29tcGF0aWJsZSB3aXRoIENNYWtlIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK2lmIHdoaWNoIGFybS1ub25lLWVhYmktZ2NjID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiWW91IG5lZWQgdGhlIEFSTS1HQ0MgdG9vbGNoYWluIGluIHlvdXIgcGF0aCIgPiYyCisgICAgZWNobyAiU2VlIGh0dHBzOi8vbGF1bmNocGFkLm5ldC9nY2MtYXJtLWVtYmVkZGVkLyIgPiYyCisgICAgZXhpdCAxCitmaQorCitBUk1HQ0NfRkxBR1M9Jy1PcyAtbWFyY2g9YXJtdjctbSAtbXRodW1iJworT1VURklMRT0nMDAtZm9vdHByaW50LXN1bW1hcnkudHh0JworCitsb2coKQoreworICAgIGVjaG8gIiRAIgorICAgIGVjaG8gIiRAIiA+PiAiJE9VVEZJTEUiCit9CisKK2RvaXQoKQoreworICAgIE5BTUU9IiQxIgorICAgIEZJTEU9IiQyIgorCisgICAgbG9nICIiCisgICAgbG9nICIkTkFNRSAoJEZJTEUpOiIKKworICAgIGNwICRDT05GSUdfSCAke0NPTkZJR19IfS5iYWsKKyAgICBpZiBbICIkRklMRSIgIT0gJENPTkZJR19IIF07IHRoZW4KKyAgICAgICAgY3AgIiRGSUxFIiAgJENPTkZJR19ICisgICAgZmkKKworICAgIHsKKyAgICAgICAgc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19ORVRfQyB8fCB0cnVlCisgICAgICAgIHNjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfVElNSU5HX0MgfHwgdHJ1ZQorICAgICAgICBzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0ZTX0lPIHx8IHRydWUKKyAgICAgICAgc2NyaXB0cy9jb25maWcucGwgLS1mb3JjZSBzZXQgTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZIHx8IHRydWUKKyAgICB9ID4vZGV2L251bGwgMj4mMQorCisgICAgbWFrZSBjbGVhbiA+L2Rldi9udWxsCisgICAgQ0M9YXJtLW5vbmUtZWFiaS1nY2MgQVI9YXJtLW5vbmUtZWFiaS1hciBMRD1hcm0tbm9uZS1lYWJpLWxkIFwKKyAgICAgICAgQ0ZMQUdTPSIkQVJNR0NDX0ZMQUdTIiBtYWtlIGxpYiA+L2Rldi9udWxsCisKKyAgICBPVVQ9InNpemUtJHtOQU1FfS50eHQiCisgICAgYXJtLW5vbmUtZWFiaS1zaXplIC10IGxpYnJhcnkvbGlibWJlZCouYSA+ICIkT1VUIgorICAgIGxvZyAiJCggaGVhZCAtbjEgIiRPVVQiICkiCisgICAgbG9nICIkKCB0YWlsIC1uMSAiJE9VVCIgKSIKKworICAgIGNwICR7Q09ORklHX0h9LmJhayAkQ09ORklHX0gKK30KKworIyB0cnVuY2F0ZSB0aGUgZmlsZSBqdXN0IHRoaXMgdGltZQorZWNobyAiKGdlbmVyYXRlZCBieSAkMCkiID4gIiRPVVRGSUxFIgorZWNobyAiIiA+PiAiJE9VVEZJTEUiCisKK2xvZyAiRm9vdHByaW50IG9mIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zIChtaW51cyBuZXRfc29ja2V0cy5jLCB0aW1pbmcuYywgZnNfaW8pIgorbG9nICJmb3IgYmFyZS1tZXRhbCBBUk0gQ29ydGV4LU0zL000IG1pY3JvY29udHJvbGxlcnMuIgorCitWRVJTSU9OX0g9ImluY2x1ZGUvbWJlZHRscy92ZXJzaW9uLmgiCitNQkVEVExTX1ZFUlNJT049JCggc2VkIC1uICdzLy4qVkVSU0lPTl9TVFJJTkcgKiJcKC4qXCkiL1wxL3AnICRWRVJTSU9OX0ggKQoraWYgZ2l0IHJldi1wYXJzZSBIRUFEID4vZGV2L251bGw7IHRoZW4KKyAgICBHSVRfSEVBRD0kKCBnaXQgcmV2LXBhcnNlIEhFQUQgfCBoZWFkIC1jIDEwICkKKyAgICBHSVRfVkVSU0lPTj0iIChnaXQgaGVhZDogJEdJVF9IRUFEKSIKK2Vsc2UKKyAgICBHSVRfVkVSU0lPTj0iIgorZmkKKworbG9nICIiCitsb2cgIm1iZWQgVExTICRNQkVEVExTX1ZFUlNJT04kR0lUX1ZFUlNJT04iCitsb2cgIiQoIGFybS1ub25lLWVhYmktZ2NjIC0tdmVyc2lvbiB8IGhlYWQgLW4xICkiCitsb2cgIkNGTEFHUz0kQVJNR0NDX0ZMQUdTIgorCisjIGNyZWF0ZXMgdGhlIHlvdHRhIGNvbmZpZworeW90dGEvY3JlYXRlLW1vZHVsZS5zaCA+L2Rldi9udWxsCisKK2RvaXQgZGVmYXVsdCAgICBpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgKK2RvaXQgeW90dGEgICAgICB5b3R0YS9tb2R1bGUvbWJlZHRscy9jb25maWcuaAorZG9pdCB0aHJlYWQgICAgIGNvbmZpZ3MvY29uZmlnLXRocmVhZC5oCitkb2l0IHN1aXRlLWIgICAgY29uZmlncy9jb25maWctc3VpdGUtYi5oCitkb2l0IHBzayAgICAgICAgY29uZmlncy9jb25maWctY2NtLXBzay10bHMxXzIuaAorCit6aXAgbWJlZHRscy1mb290cHJpbnQuemlwICIkT1VURklMRSIgc2l6ZS0qLnR4dCA+L2Rldi9udWxsCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9nZW5lcmF0ZV9lcnJvcnMucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9nZW5lcmF0ZV9lcnJvcnMucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2ZjZjA3YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2dlbmVyYXRlX2Vycm9ycy5wbApAQCAtMCwwICsxLDE5OCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgR2VuZXJhdGUgZXJyb3IuYworIworIyBVc2FnZTogLi9nZW5lcmF0ZV9lcnJvcnMucGwgb3Igc2NyaXB0cy9nZW5lcmF0ZV9lcnJvcnMucGwgd2l0aG91dCBhcmd1bWVudHMsCisjIG9yIGdlbmVyYXRlX2Vycm9ycy5wbCBpbmNsdWRlX2RpciBkYXRhX2RpciBlcnJvcl9maWxlCisKK3VzZSBzdHJpY3Q7CisKK215ICgkaW5jbHVkZV9kaXIsICRkYXRhX2RpciwgJGVycm9yX2ZpbGUpOworCitpZiggQEFSR1YgKSB7CisgICAgZGllICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiIGlmIHNjYWxhciBAQVJHViAhPSAzOworICAgICgkaW5jbHVkZV9kaXIsICRkYXRhX2RpciwgJGVycm9yX2ZpbGUpID0gQEFSR1Y7CisKKyAgICAtZCAkaW5jbHVkZV9kaXIgb3IgZGllICJObyBzdWNoIGRpcmVjdG9yeTogJGluY2x1ZGVfZGlyXG4iOworICAgIC1kICRkYXRhX2RpciBvciBkaWUgIk5vIHN1Y2ggZGlyZWN0b3J5OiAkZGF0YV9kaXJcbiI7Cit9IGVsc2UgeworICAgICRpbmNsdWRlX2RpciA9ICdpbmNsdWRlL21iZWR0bHMnOworICAgICRkYXRhX2RpciA9ICdzY3JpcHRzL2RhdGFfZmlsZXMnOworICAgICRlcnJvcl9maWxlID0gJ2xpYnJhcnkvZXJyb3IuYyc7CisKKyAgICB1bmxlc3MoIC1kICRpbmNsdWRlX2RpciAmJiAtZCAkZGF0YV9kaXIgKSB7CisgICAgICAgIGNoZGlyICcuLicgb3IgZGllOworICAgICAgICAtZCAkaW5jbHVkZV9kaXIgJiYgLWQgJGRhdGFfZGlyCisgICAgICAgICAgICBvciBkaWUgIldpdGhvdXQgYXJndW1lbnRzLCBtdXN0IGJlIHJ1biBmcm9tIHJvb3Qgb3Igc2NyaXB0c1xuIgorICAgIH0KK30KKworbXkgJGVycm9yX2Zvcm1hdF9maWxlID0gJGRhdGFfZGlyLicvZXJyb3IuZm10JzsKKworbXkgQGxvd19sZXZlbF9tb2R1bGVzID0gKCAiQUVTIiwgIkFTTjEiLCAiQkxPV0ZJU0giLCAiQ0FNRUxMSUEiLCAiQklHTlVNIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkJBU0U2NCIsICJYVEVBIiwgIlBCS0RGMiIsICJPSUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFETE9DSyIsICJERVMiLCAiTkVUIiwgIkNUUl9EUkJHIiwgIkVOVFJPUFkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiSE1BQ19EUkJHIiwgIk1EMiIsICJNRDQiLCAiTUQ1IiwgIlJJUEVNRDE2MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJTSEExIiwgIlNIQTI1NiIsICJTSEE1MTIiLCAiR0NNIiwgIlRIUkVBRElORyIsICJDQ00iICk7CitteSBAaGlnaF9sZXZlbF9tb2R1bGVzID0gKCAiUEVNIiwgIlg1MDkiLCAiREhNIiwgIlJTQSIsICJFQ1AiLCAiTUQiLCAiQ0lQSEVSIiwgIlNTTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEsiLCAiUEtDUzEyIiwgIlBLQ1M1IiApOworCitteSAkbGluZV9zZXBhcmF0b3IgPSAkLzsKK3VuZGVmICQvOworCitvcGVuKEZPUk1BVF9GSUxFLCAiJGVycm9yX2Zvcm1hdF9maWxlIikgb3IgZGllICJPcGVuaW5nIGVycm9yIGZvcm1hdCBmaWxlICckZXJyb3JfZm9ybWF0X2ZpbGUnOiAkISI7CitteSAkZXJyb3JfZm9ybWF0ID0gPEZPUk1BVF9GSUxFPjsKK2Nsb3NlKEZPUk1BVF9GSUxFKTsKKworJC8gPSAkbGluZV9zZXBhcmF0b3I7CisKK29wZW4oR1JFUCwgImdyZXAgXCJkZWZpbmUgTUJFRFRMU19FUlJfXCIgJGluY2x1ZGVfZGlyLyogfCIpIHx8IGRpZSgiRmFpbHVyZSB3aGVuIGNhbGxpbmcgZ3JlcDogJCEiKTsKKworbXkgJGxsX29sZF9kZWZpbmUgPSAiIjsKK215ICRobF9vbGRfZGVmaW5lID0gIiI7CisKK215ICRsbF9jb2RlX2NoZWNrID0gIiI7CitteSAkaGxfY29kZV9jaGVjayA9ICIiOworCitteSAkaGVhZGVycyA9ICIiOworCitteSAlZXJyb3JfY29kZXNfc2VlbjsKKword2hpbGUgKG15ICRsaW5lID0gPEdSRVA+KQoreworICAgIG5leHQgaWYgKCRsaW5lID1+IC9jb21wYXQtMS4yLmgvKTsKKyAgICBteSAoJGVycm9yX25hbWUsICRlcnJvcl9jb2RlKSA9ICRsaW5lID1+IC8oTUJFRFRMU19FUlJfXHcrKVxzK1wtKDB4XHcrKS87CisgICAgbXkgKCRkZXNjcmlwdGlvbikgPSAkbGluZSA9fiAvXC9cKlwqPCAoLio/KVwuPyBcKlwvLzsKKworICAgIGRpZSAiRHVwbGljYXRlZCBlcnJvciBjb2RlOiAkZXJyb3JfY29kZSAoJGVycm9yX25hbWUpXG4iCisgICAgICAgIGlmKCAkZXJyb3JfY29kZXNfc2VlbnskZXJyb3JfY29kZX0rKyApOworCisgICAgJGRlc2NyaXB0aW9uID1+IHMvXFwvXFxcXC9nOworICAgIGlmICgkZGVzY3JpcHRpb24gZXEgIiIpIHsKKyAgICAgICAgJGRlc2NyaXB0aW9uID0gIkRFU0NSSVBUSU9OIE1JU1NJTkciOworICAgICAgICB3YXJuICJNaXNzaW5nIGRlc2NyaXB0aW9uIGZvciAkZXJyb3JfbmFtZVxuIjsKKyAgICB9CisKKyAgICBteSAoJG1vZHVsZV9uYW1lKSA9ICRlcnJvcl9uYW1lID1+IC9eTUJFRFRMU19FUlJfKFteX10rKS87CisKKyAgICAjIEZpeCBmYXVsdHkgb25lcworICAgICRtb2R1bGVfbmFtZSA9ICJCSUdOVU0iIGlmICgkbW9kdWxlX25hbWUgZXEgIk1QSSIpOworICAgICRtb2R1bGVfbmFtZSA9ICJDVFJfRFJCRyIgaWYgKCRtb2R1bGVfbmFtZSBlcSAiQ1RSIik7CisgICAgJG1vZHVsZV9uYW1lID0gIkhNQUNfRFJCRyIgaWYgKCRtb2R1bGVfbmFtZSBlcSAiSE1BQyIpOworCisgICAgbXkgJGRlZmluZV9uYW1lID0gJG1vZHVsZV9uYW1lOworICAgICRkZWZpbmVfbmFtZSA9ICJYNTA5X1VTRSxYNTA5X0NSRUFURSIgaWYgKCRkZWZpbmVfbmFtZSBlcSAiWDUwOSIpOworICAgICRkZWZpbmVfbmFtZSA9ICJBU04xX1BBUlNFIiBpZiAoJGRlZmluZV9uYW1lIGVxICJBU04xIik7CisgICAgJGRlZmluZV9uYW1lID0gIlNTTF9UTFMiIGlmICgkZGVmaW5lX25hbWUgZXEgIlNTTCIpOworICAgICRkZWZpbmVfbmFtZSA9ICJQRU1fUEFSU0UsUEVNX1dSSVRFIiBpZiAoJGRlZmluZV9uYW1lIGVxICJQRU0iKTsKKworICAgIG15ICRpbmNsdWRlX25hbWUgPSAkbW9kdWxlX25hbWU7CisgICAgJGluY2x1ZGVfbmFtZSA9fiB0ci9BLVovYS16LzsKKyAgICAkaW5jbHVkZV9uYW1lID0gIiIgaWYgKCRpbmNsdWRlX25hbWUgZXEgImFzbjEiKTsKKworICAgICMgRml4IGZhdWx0eSBvbmVzCisgICAgJGluY2x1ZGVfbmFtZSA9ICJuZXRfc29ja2V0cyIgaWYgKCRtb2R1bGVfbmFtZSBlcSAiTkVUIik7CisKKyAgICBteSAkZm91bmRfbGwgPSBncmVwICRfIGVxICRtb2R1bGVfbmFtZSwgQGxvd19sZXZlbF9tb2R1bGVzOworICAgIG15ICRmb3VuZF9obCA9IGdyZXAgJF8gZXEgJG1vZHVsZV9uYW1lLCBAaGlnaF9sZXZlbF9tb2R1bGVzOworICAgIGlmICghJGZvdW5kX2xsICYmICEkZm91bmRfaGwpCisgICAgeworICAgICAgICBwcmludGYoIkVycm9yOiBEbyBub3Qga25vdyBob3cgdG8gaGFuZGxlOiAkbW9kdWxlX25hbWVcbiIpOworICAgICAgICBleGl0IDE7CisgICAgfQorCisgICAgbXkgJGNvZGVfY2hlY2s7CisgICAgbXkgJG9sZF9kZWZpbmU7CisgICAgbXkgJHdoaXRlX3NwYWNlOworICAgIG15ICRmaXJzdDsKKworICAgIGlmICgkZm91bmRfbGwpCisgICAgeworICAgICAgICAkY29kZV9jaGVjayA9IFwkbGxfY29kZV9jaGVjazsKKyAgICAgICAgJG9sZF9kZWZpbmUgPSBcJGxsX29sZF9kZWZpbmU7CisgICAgICAgICR3aGl0ZV9zcGFjZSA9ICcgICAgJzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgJGNvZGVfY2hlY2sgPSBcJGhsX2NvZGVfY2hlY2s7CisgICAgICAgICRvbGRfZGVmaW5lID0gXCRobF9vbGRfZGVmaW5lOworICAgICAgICAkd2hpdGVfc3BhY2UgPSAnICAgICAgICAnOworICAgIH0KKworICAgIGlmICgkZGVmaW5lX25hbWUgbmUgJHskb2xkX2RlZmluZX0pCisgICAgeworICAgICAgICBpZiAoJHskb2xkX2RlZmluZX0gbmUgIiIpCisgICAgICAgIHsKKyAgICAgICAgICAgICR7JGNvZGVfY2hlY2t9IC49ICIjZW5kaWYgLyogIjsKKyAgICAgICAgICAgICRmaXJzdCA9IDA7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRkZXAgKHNwbGl0KC8sLywgJHskb2xkX2RlZmluZX0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICR7JGNvZGVfY2hlY2t9IC49ICIgfHwgIiBpZiAoJGZpcnN0KyspOworICAgICAgICAgICAgICAgICR7JGNvZGVfY2hlY2t9IC49ICJNQkVEVExTXyR7ZGVwfV9DIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICR7JGNvZGVfY2hlY2t9IC49ICIgKi9cblxuIjsKKyAgICAgICAgfQorCisgICAgICAgICR7JGNvZGVfY2hlY2t9IC49ICIjaWYgIjsKKyAgICAgICAgJGhlYWRlcnMgLj0gIiNpZiAiIGlmICgkaW5jbHVkZV9uYW1lIG5lICIiKTsKKyAgICAgICAgJGZpcnN0ID0gMDsKKyAgICAgICAgZm9yZWFjaCBteSAkZGVwIChzcGxpdCgvLC8sICR7ZGVmaW5lX25hbWV9KSkKKyAgICAgICAgeworICAgICAgICAgICAgJHskY29kZV9jaGVja30gLj0gIiB8fCAiIGlmICgkZmlyc3QpOworICAgICAgICAgICAgJGhlYWRlcnMgICAgICAgLj0gIiB8fCAiIGlmICgkZmlyc3QrKyk7CisKKyAgICAgICAgICAgICR7JGNvZGVfY2hlY2t9IC49ICJkZWZpbmVkKE1CRURUTFNfJHtkZXB9X0MpIjsKKyAgICAgICAgICAgICRoZWFkZXJzICAgICAgIC49ICJkZWZpbmVkKE1CRURUTFNfJHtkZXB9X0MpIiBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkaW5jbHVkZV9uYW1lIG5lICIiKTsKKyAgICAgICAgfQorICAgICAgICAkeyRjb2RlX2NoZWNrfSAuPSAiXG4iOworICAgICAgICAkaGVhZGVycyAuPSAiXG4jaW5jbHVkZSBcIm1iZWR0bHMvJHtpbmNsdWRlX25hbWV9LmhcIlxuIi4KKyAgICAgICAgICAgICAgICAgICAgIiNlbmRpZlxuXG4iIGlmICgkaW5jbHVkZV9uYW1lIG5lICIiKTsKKyAgICAgICAgJHskb2xkX2RlZmluZX0gPSAkZGVmaW5lX25hbWU7CisgICAgfQorCisgICAgaWYgKCRlcnJvcl9uYW1lIGVxICJNQkVEVExTX0VSUl9TU0xfRkFUQUxfQUxFUlRfTUVTU0FHRSIpCisgICAgeworICAgICAgICAkeyRjb2RlX2NoZWNrfSAuPSAiJHt3aGl0ZV9zcGFjZX1pZiggdXNlX3JldCA9PSAtKCRlcnJvcl9uYW1lKSApXG4iLgorICAgICAgICAgICAgICAgICAgICAgICAgICAiJHt3aGl0ZV9zcGFjZX1ce1xuIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7d2hpdGVfc3BhY2V9ICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCBcIiRtb2R1bGVfbmFtZSAtICRkZXNjcmlwdGlvblwiICk7XG4iLgorICAgICAgICAgICAgICAgICAgICAgICAgICAiJHt3aGl0ZV9zcGFjZX0gICAgcmV0dXJuO1xuIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7d2hpdGVfc3BhY2V9fVxuIgorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAkeyRjb2RlX2NoZWNrfSAuPSAiJHt3aGl0ZV9zcGFjZX1pZiggdXNlX3JldCA9PSAtKCRlcnJvcl9uYW1lKSApXG4iLgorICAgICAgICAgICAgICAgICAgICAgICAgICAiJHt3aGl0ZV9zcGFjZX0gICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sIFwiJG1vZHVsZV9uYW1lIC0gJGRlc2NyaXB0aW9uXCIgKTtcbiIKKyAgICB9Cit9OworCitpZiAoJGxsX29sZF9kZWZpbmUgbmUgIiIpCit7CisgICAgJGxsX2NvZGVfY2hlY2sgLj0gIiNlbmRpZiAvKiAiOworICAgIG15ICRmaXJzdCA9IDA7CisgICAgZm9yZWFjaCBteSAkZGVwIChzcGxpdCgvLC8sICRsbF9vbGRfZGVmaW5lKSkKKyAgICB7CisgICAgICAgICRsbF9jb2RlX2NoZWNrIC49ICIgfHwgIiBpZiAoJGZpcnN0KyspOworICAgICAgICAkbGxfY29kZV9jaGVjayAuPSAiTUJFRFRMU18ke2RlcH1fQyI7CisgICAgfQorICAgICRsbF9jb2RlX2NoZWNrIC49ICIgKi9cbiI7Cit9CitpZiAoJGhsX29sZF9kZWZpbmUgbmUgIiIpCit7CisgICAgJGhsX2NvZGVfY2hlY2sgLj0gIiNlbmRpZiAvKiAiOworICAgIG15ICRmaXJzdCA9IDA7CisgICAgZm9yZWFjaCBteSAkZGVwIChzcGxpdCgvLC8sICRobF9vbGRfZGVmaW5lKSkKKyAgICB7CisgICAgICAgICRobF9jb2RlX2NoZWNrIC49ICIgfHwgIiBpZiAoJGZpcnN0KyspOworICAgICAgICAkaGxfY29kZV9jaGVjayAuPSAiTUJFRFRMU18ke2RlcH1fQyI7CisgICAgfQorICAgICRobF9jb2RlX2NoZWNrIC49ICIgKi9cbiI7Cit9CisKKyRlcnJvcl9mb3JtYXQgPX4gcy9IRUFERVJfSU5DTFVERURcbi8kaGVhZGVycy9nOworJGVycm9yX2Zvcm1hdCA9fiBzL0xPV19MRVZFTF9DT0RFX0NIRUNLU1xuLyRsbF9jb2RlX2NoZWNrL2c7CiskZXJyb3JfZm9ybWF0ID1+IHMvSElHSF9MRVZFTF9DT0RFX0NIRUNLU1xuLyRobF9jb2RlX2NoZWNrL2c7CisKK29wZW4oRVJST1JfRklMRSwgIj4kZXJyb3JfZmlsZSIpIG9yIGRpZSAiT3BlbmluZyBkZXN0aW5hdGlvbiBmaWxlICckZXJyb3JfZmlsZSc6ICQhIjsKK3ByaW50IEVSUk9SX0ZJTEUgJGVycm9yX2Zvcm1hdDsKK2Nsb3NlKEVSUk9SX0ZJTEUpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZ2VuZXJhdGVfZmVhdHVyZXMucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9nZW5lcmF0ZV9mZWF0dXJlcy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYWE2OTVjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZ2VuZXJhdGVfZmVhdHVyZXMucGwKQEAgLTAsMCArMSw3NCBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisKK3VzZSBzdHJpY3Q7CisKK215ICgkaW5jbHVkZV9kaXIsICRkYXRhX2RpciwgJGZlYXR1cmVfZmlsZSk7CisKK2lmKCBAQVJHViApIHsKKyAgICBkaWUgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIgaWYgc2NhbGFyIEBBUkdWICE9IDM7CisgICAgKCRpbmNsdWRlX2RpciwgJGRhdGFfZGlyLCAkZmVhdHVyZV9maWxlKSA9IEBBUkdWOworCisgICAgLWQgJGluY2x1ZGVfZGlyIG9yIGRpZSAiTm8gc3VjaCBkaXJlY3Rvcnk6ICRpbmNsdWRlX2RpclxuIjsKKyAgICAtZCAkZGF0YV9kaXIgb3IgZGllICJObyBzdWNoIGRpcmVjdG9yeTogJGRhdGFfZGlyXG4iOworfSBlbHNlIHsKKyAgICAkaW5jbHVkZV9kaXIgPSAnaW5jbHVkZS9tYmVkdGxzJzsKKyAgICAkZGF0YV9kaXIgPSAnc2NyaXB0cy9kYXRhX2ZpbGVzJzsKKyAgICAkZmVhdHVyZV9maWxlID0gJ2xpYnJhcnkvdmVyc2lvbl9mZWF0dXJlcy5jJzsKKworICAgIHVubGVzcyggLWQgJGluY2x1ZGVfZGlyICYmIC1kICRkYXRhX2RpciApIHsKKyAgICAgICAgY2hkaXIgJy4uJyBvciBkaWU7CisgICAgICAgIC1kICRpbmNsdWRlX2RpciAmJiAtZCAkZGF0YV9kaXIKKyAgICAgICAgICAgIG9yIGRpZSAiV2l0aG91dCBhcmd1bWVudHMsIG11c3QgYmUgcnVuIGZyb20gcm9vdCBvciBzY3JpcHRzXG4iCisgICAgfQorfQorCitteSAkZmVhdHVyZV9mb3JtYXRfZmlsZSA9ICRkYXRhX2Rpci4nL3ZlcnNpb25fZmVhdHVyZXMuZm10JzsKKworbXkgQHNlY3Rpb25zID0gKCAiU3lzdGVtIHN1cHBvcnQiLCAibWJlZCBUTFMgbW9kdWxlcyIsCisgICAgICAgICAgICAgICAgICJtYmVkIFRMUyBmZWF0dXJlIHN1cHBvcnQiICk7CisKK215ICRsaW5lX3NlcGFyYXRvciA9ICQvOwordW5kZWYgJC87CisKK29wZW4oRk9STUFUX0ZJTEUsICIkZmVhdHVyZV9mb3JtYXRfZmlsZSIpIG9yIGRpZSAiT3BlbmluZyBmZWF0dXJlIGZvcm1hdCBmaWxlICckZmVhdHVyZV9mb3JtYXRfZmlsZSc6ICQhIjsKK215ICRmZWF0dXJlX2Zvcm1hdCA9IDxGT1JNQVRfRklMRT47CitjbG9zZShGT1JNQVRfRklMRSk7CisKKyQvID0gJGxpbmVfc2VwYXJhdG9yOworCitvcGVuKENPTkZJR19ILCAiJGluY2x1ZGVfZGlyL2NvbmZpZy5oIikgfHwgZGllKCJGYWlsdXJlIHdoZW4gb3BlbmluZyBjb25maWcuaDogJCEiKTsKKworbXkgJGZlYXR1cmVfZGVmaW5lcyA9ICIiOworbXkgJGluX3NlY3Rpb24gPSAwOworCit3aGlsZSAobXkgJGxpbmUgPSA8Q09ORklHX0g+KQoreworICAgIG5leHQgaWYgKCRpbl9zZWN0aW9uICYmICRsaW5lICF+IC8jZGVmaW5lLyAmJiAkbGluZSAhfiAvU0VDVElPTi8pOworICAgIG5leHQgaWYgKCEkaW5fc2VjdGlvbiAmJiAkbGluZSAhfiAvU0VDVElPTi8pOworCisgICAgaWYgKCRpbl9zZWN0aW9uKSB7CisgICAgICAgIGlmICgkbGluZSA9fiAvU0VDVElPTi8pIHsKKyAgICAgICAgICAgICRpbl9zZWN0aW9uID0gMDsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICBteSAoJGRlZmluZSkgPSAkbGluZSA9fiAvI2RlZmluZSAoXHcrKS87CisgICAgICAgICRmZWF0dXJlX2RlZmluZXMgLj0gIiNpZiBkZWZpbmVkKCR7ZGVmaW5lfSlcbiI7CisgICAgICAgICRmZWF0dXJlX2RlZmluZXMgLj0gIiAgICBcIiR7ZGVmaW5lfVwiLFxuIjsKKyAgICAgICAgJGZlYXR1cmVfZGVmaW5lcyAuPSAiI2VuZGlmIC8qICR7ZGVmaW5lfSAqL1xuIjsKKyAgICB9CisKKyAgICBpZiAoISRpbl9zZWN0aW9uKSB7CisgICAgICAgIG15ICgkc2VjdGlvbl9uYW1lKSA9ICRsaW5lID1+IC9TRUNUSU9OOiAoW1x3IF0rKS87CisgICAgICAgIG15ICRmb3VuZF9zZWN0aW9uID0gZ3JlcCAkXyBlcSAkc2VjdGlvbl9uYW1lLCBAc2VjdGlvbnM7CisKKyAgICAgICAgJGluX3NlY3Rpb24gPSAxIGlmICgkZm91bmRfc2VjdGlvbik7CisgICAgfQorfTsKKworJGZlYXR1cmVfZm9ybWF0ID1+IHMvRkVBVFVSRV9ERUZJTkVTXG4vJGZlYXR1cmVfZGVmaW5lcy9nOworCitvcGVuKEVSUk9SX0ZJTEUsICI+JGZlYXR1cmVfZmlsZSIpIG9yIGRpZSAiT3BlbmluZyBkZXN0aW5hdGlvbiBmaWxlICckZmVhdHVyZV9maWxlJzogJCEiOworcHJpbnQgRVJST1JfRklMRSAkZmVhdHVyZV9mb3JtYXQ7CitjbG9zZShFUlJPUl9GSUxFKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2dlbmVyYXRlX3Zpc3VhbGNfZmlsZXMucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9nZW5lcmF0ZV92aXN1YWxjX2ZpbGVzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhkMzY2NTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9nZW5lcmF0ZV92aXN1YWxjX2ZpbGVzLnBsCkBAIC0wLDAgKzEsMTk1IEBACisjIS91c3IvYmluL3BlcmwKKworIyBHZW5lcmF0ZSBmaWxlcyBmb3IgTVMgVmlzdWFsIFN0dWRpbzoKKyMgLSBmb3IgVlM2OiBtYWluIHByb2plY3QgKGxpYnJhcnkpIGZpbGUsIGluZGl2aWR1YWwgYXBwIGZpbGVzLCB3b3Jrc3BhY2UKKyMgLSBmb3IgVlMyMDEwOiBtYWluIGZpbGUsIGluZGl2aWR1YWwgYXBwcywgc29sdXRpb24gZmlsZQorIworIyBNdXN0IGJlIHJ1biBmcm9tIG1iZWRUTFMgcm9vdCBvciBzY3JpcHRzIGRpcmVjdG9yeS4KKyMgVGFrZXMgbm8gYXJndW1lbnQuCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7Cit1c2UgRGlnZXN0OjpNRDUgJ21kNV9oZXgnOworCitteSAkdnN4X2RpciA9ICJ2aXN1YWxjL1ZTMjAxMCI7CitteSAkdnN4X2V4dCA9ICJ2Y3hwcm9qIjsKK215ICR2c3hfYXBwX3RwbF9maWxlID0gInNjcmlwdHMvZGF0YV9maWxlcy92czIwMTAtYXBwLXRlbXBsYXRlLiR2c3hfZXh0IjsKK215ICR2c3hfbWFpbl90cGxfZmlsZSA9ICJzY3JpcHRzL2RhdGFfZmlsZXMvdnMyMDEwLW1haW4tdGVtcGxhdGUuJHZzeF9leHQiOworbXkgJHZzeF9tYWluX2ZpbGUgPSAiJHZzeF9kaXIvbWJlZFRMUy4kdnN4X2V4dCI7CitteSAkdnN4X3Nsbl90cGxfZmlsZSA9ICJzY3JpcHRzL2RhdGFfZmlsZXMvdnMyMDEwLXNsbi10ZW1wbGF0ZS5zbG4iOworbXkgJHZzeF9zbG5fZmlsZSA9ICIkdnN4X2Rpci9tYmVkVExTLnNsbiI7CisKK215ICRwcm9ncmFtc19kaXIgPSAncHJvZ3JhbXMnOworbXkgJGhlYWRlcl9kaXIgPSAnaW5jbHVkZS9tYmVkdGxzJzsKK215ICRzb3VyY2VfZGlyID0gJ2xpYnJhcnknOworCisjIE5lZWQgd2luZG93cyBsaW5lIGVuZGluZ3MhCitteSAkdnN4X2hkcl90cGwgPSA8PEVPVDsKKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXFwuLlxce05BTUV9IiAvPlxyCitFT1QKK215ICR2c3hfc3JjX3RwbCA9IDw8RU9UOworICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cXC4uXFx7TkFNRX0iIC8+XHIKK0VPVAorCitteSAkdnN4X3Nsbl9hcHBfZW50cnlfdHBsID0gPDxFT1Q7CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIntBUFBOQU1FfSIsICJ7QVBQTkFNRX0udmN4cHJvaiIsICJ7R1VJRH0iXHIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0XHIKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fVxyCisJRW5kUHJvamVjdFNlY3Rpb25ccgorRW5kUHJvamVjdFxyCitFT1QKKworbXkgJHZzeF9zbG5fY29uZl9lbnRyeV90cGwgPSA8PEVPVDsKKwkJe0dVSUR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyXHIKKwkJe0dVSUR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMlxyCisJCXtHVUlEfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0XHIKKwkJe0dVSUR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0XHIKKwkJe0dVSUR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMlxyCisJCXtHVUlEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyXHIKKwkJe0dVSUR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0XHIKKwkJe0dVSUR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NFxyCitFT1QKKworZXhpdCggbWFpbigpICk7CisKK3N1YiBjaGVja19kaXJzIHsKKyAgICByZXR1cm4gLWQgJHZzeF9kaXIKKyAgICAgICAgJiYgLWQgJGhlYWRlcl9kaXIKKyAgICAgICAgJiYgLWQgJHNvdXJjZV9kaXIKKyAgICAgICAgJiYgLWQgJHByb2dyYW1zX2RpcjsKK30KKworc3ViIHNsdXJwX2ZpbGUgeworICAgIG15ICgkZmlsZW5hbWUpID0gQF87CisKKyAgICBsb2NhbCAkLyA9IHVuZGVmOworICAgIG9wZW4gbXkgJGZoLCAnPCcsICRmaWxlbmFtZSBvciBkaWUgIkNvdWxkIG5vdCByZWFkICRmaWxlbmFtZVxuIjsKKyAgICBteSAkY29udGVudCA9IDwkZmg+OworICAgIGNsb3NlICRmaDsKKworICAgIHJldHVybiAkY29udGVudDsKK30KKworc3ViIGNvbnRlbnRfdG9fZmlsZSB7CisgICAgbXkgKCRjb250ZW50LCAkZmlsZW5hbWUpID0gQF87CisKKyAgICBvcGVuIG15ICRmaCwgJz4nLCAkZmlsZW5hbWUgb3IgZGllICJDb3VsZCBub3Qgd3JpdGUgdG8gJGZpbGVuYW1lXG4iOworICAgIHByaW50ICRmaCAkY29udGVudDsKKyAgICBjbG9zZSAkZmg7Cit9CisKK3N1YiBnZW5fYXBwX2d1aWQgeworICAgIG15ICgkcGF0aCkgPSBAXzsKKworICAgIG15ICRndWlkID0gbWQ1X2hleCggIm1iZWRUTFM6JHBhdGgiICk7CisgICAgJGd1aWQgPX4gcy8oLns4fSkoLns0fSkoLns0fSkoLns0fSkoLnsxMn0pL1xVeyQxLSQyLSQzLSQ0LSQ1fS87CisKKyAgICByZXR1cm4gJGd1aWQ7Cit9CisKK3N1YiBnZW5fYXBwIHsKKyAgICBteSAoJHBhdGgsICR0ZW1wbGF0ZSwgJGRpciwgJGV4dCkgPSBAXzsKKworICAgIG15ICRndWlkID0gZ2VuX2FwcF9ndWlkKCAkcGF0aCApOworICAgICRwYXRoID1+IHMhLyFcXCFnOworICAgIChteSAkYXBwbmFtZSA9ICRwYXRoKSA9fiBzLy4qXFwvLzsKKworICAgIG15ICRjb250ZW50ID0gJHRlbXBsYXRlOworICAgICRjb250ZW50ID1+IHMvPFBBVEhOQU1FPi8kcGF0aC9nOworICAgICRjb250ZW50ID1+IHMvPEFQUE5BTUU+LyRhcHBuYW1lL2c7CisgICAgJGNvbnRlbnQgPX4gcy88R1VJRD4vJGd1aWQvZzsKKworICAgIGNvbnRlbnRfdG9fZmlsZSggJGNvbnRlbnQsICIkZGlyLyRhcHBuYW1lLiRleHQiICk7Cit9CisKK3N1YiBnZXRfYXBwX2xpc3QgeworICAgIG15ICRhcHBfbGlzdCA9IGBjZCAkcHJvZ3JhbXNfZGlyICYmIG1ha2UgbGlzdGA7CisgICAgZGllICJtYWtlIGxpc3QgZmFpbGVkOiAkIVxuIiBpZiAkPzsKKworICAgIHJldHVybiBzcGxpdCAvXHMrLywgJGFwcF9saXN0OworfQorCitzdWIgZ2VuX2FwcF9maWxlcyB7CisgICAgbXkgQGFwcF9saXN0ID0gQF87CisKKyAgICBteSAkdnN4X3RwbCA9IHNsdXJwX2ZpbGUoICR2c3hfYXBwX3RwbF9maWxlICk7CisKKyAgICBmb3IgbXkgJGFwcCAoIEBhcHBfbGlzdCApIHsKKyAgICAgICAgZ2VuX2FwcCggJGFwcCwgJHZzeF90cGwsICR2c3hfZGlyLCAkdnN4X2V4dCApOworICAgIH0KK30KKworc3ViIGdlbl9lbnRyeV9saXN0IHsKKyAgICBteSAoJHRwbCwgQG5hbWVzKSA9IEBfOworCisgICAgbXkgJGVudHJpZXM7CisgICAgZm9yIG15ICRuYW1lIChAbmFtZXMpIHsKKyAgICAgICAgKG15ICRlbnRyeSA9ICR0cGwpID1+IHMve05BTUV9LyRuYW1lL2c7CisgICAgICAgICRlbnRyaWVzIC49ICRlbnRyeTsKKyAgICB9CisKKyAgICByZXR1cm4gJGVudHJpZXM7Cit9CisKK3N1YiBnZW5fbWFpbl9maWxlIHsKKyAgICBteSAoJGhlYWRlcnMsICRzb3VyY2VzLCAkaGRyX3RwbCwgJHNyY190cGwsICRtYWluX3RwbCwgJG1haW5fb3V0KSA9IEBfOworCisgICAgbXkgJGhlYWRlcl9lbnRyaWVzID0gZ2VuX2VudHJ5X2xpc3QoICRoZHJfdHBsLCBAJGhlYWRlcnMgKTsKKyAgICBteSAkc291cmNlX2VudHJpZXMgPSBnZW5fZW50cnlfbGlzdCggJHNyY190cGwsIEAkc291cmNlcyApOworCisgICAgbXkgJG91dCA9IHNsdXJwX2ZpbGUoICRtYWluX3RwbCApOworICAgICRvdXQgPX4gcy9TT1VSQ0VfRU5UUklFU1xyXG4vJHNvdXJjZV9lbnRyaWVzL207CisgICAgJG91dCA9fiBzL0hFQURFUl9FTlRSSUVTXHJcbi8kaGVhZGVyX2VudHJpZXMvbTsKKworICAgIGNvbnRlbnRfdG9fZmlsZSggJG91dCwgJG1haW5fb3V0ICk7Cit9CisKK3N1YiBnZW5fdnN4X3NvbHV0aW9uIHsKKyAgICBteSAoQGFwcF9uYW1lcykgPSBAXzsKKworICAgIG15ICgkYXBwX2VudHJpZXMsICRjb25mX2VudHJpZXMpOworICAgIGZvciBteSAkcGF0aCAoQGFwcF9uYW1lcykgeworICAgICAgICBteSAkZ3VpZCA9IGdlbl9hcHBfZ3VpZCggJHBhdGggKTsKKyAgICAgICAgKG15ICRhcHBuYW1lID0gJHBhdGgpID1+IHMhLiovISE7CisKKyAgICAgICAgbXkgJGFwcF9lbnRyeSA9ICR2c3hfc2xuX2FwcF9lbnRyeV90cGw7CisgICAgICAgICRhcHBfZW50cnkgPX4gcy97QVBQTkFNRX0vJGFwcG5hbWUvZzsKKyAgICAgICAgJGFwcF9lbnRyeSA9fiBzL3tHVUlEfS8kZ3VpZC9nOworCisgICAgICAgICRhcHBfZW50cmllcyAuPSAkYXBwX2VudHJ5OworCisgICAgICAgIG15ICRjb25mX2VudHJ5ID0gJHZzeF9zbG5fY29uZl9lbnRyeV90cGw7CisgICAgICAgICRjb25mX2VudHJ5ID1+IHMve0dVSUR9LyRndWlkL2c7CisKKyAgICAgICAgJGNvbmZfZW50cmllcyAuPSAkY29uZl9lbnRyeTsKKyAgICB9CisKKyAgICBteSAkb3V0ID0gc2x1cnBfZmlsZSggJHZzeF9zbG5fdHBsX2ZpbGUgKTsKKyAgICAkb3V0ID1+IHMvQVBQX0VOVFJJRVNcclxuLyRhcHBfZW50cmllcy9tOworICAgICRvdXQgPX4gcy9DT05GX0VOVFJJRVNcclxuLyRjb25mX2VudHJpZXMvbTsKKworICAgIGNvbnRlbnRfdG9fZmlsZSggJG91dCwgJHZzeF9zbG5fZmlsZSApOworfQorCitzdWIgbWFpbiB7CisgICAgaWYoICEgY2hlY2tfZGlycygpICkgeworICAgICAgICBjaGRpciAnLi4nIG9yIGRpZTsKKyAgICAgICAgY2hlY2tfZGlycyBvciBkaWUgIk11c3QgYnV0IHJ1biBmcm9tIG1iZWRUTFMgcm9vdCBvciBzY3JpcHRzIGRpclxuIjsKKyAgICB9CisKKyAgICBteSBAYXBwX2xpc3QgPSBnZXRfYXBwX2xpc3QoKTsKKyAgICBteSBAaGVhZGVycyA9IDwkaGVhZGVyX2Rpci8qLmg+OworICAgIG15IEBzb3VyY2VzID0gPCRzb3VyY2VfZGlyLyouYz47CisgICAgbWFwIHsgcyEvIVxcIWcgfSBAaGVhZGVyczsKKyAgICBtYXAgeyBzIS8hXFwhZyB9IEBzb3VyY2VzOworCisgICAgZ2VuX2FwcF9maWxlcyggQGFwcF9saXN0ICk7CisKKyAgICBnZW5fbWFpbl9maWxlKCBcQGhlYWRlcnMsIFxAc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAkdnN4X2hkcl90cGwsICR2c3hfc3JjX3RwbCwKKyAgICAgICAgICAgICAgICAgICAkdnN4X21haW5fdHBsX2ZpbGUsICR2c3hfbWFpbl9maWxlICk7CisKKyAgICBnZW5fdnN4X3NvbHV0aW9uKCBAYXBwX2xpc3QgKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvbWFsbG9jLWluaXQucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9tYWxsb2MtaW5pdC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iN2Q2ZmNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvbWFsbG9jLWluaXQucGwKQEAgLTAsMCArMSw3MCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgQ2hlY2sgZm9yIG1hbGxvYyBjYWxscyBub3Qgc2hvcnRseSBmb2xsb3dlZCBieSBpbml0aWFsaXNhdGlvbi4KKyMKKyMgS25vd24gbGltaXRhdGlvbnM6CisjIC0gZmFsc2UgbmVnYXRpdmU6IGNhbid0IHNlZSBhbGxvY2F0aW9ucyBzcGFubmluZyBtb3JlIHRoYW4gb25lIGxpbmUKKyMgLSBwb3NzaWJsZSBmYWxzZSBuZWdhdGl2ZXMsIHNlZSBwYXR0ZXJucworIyAtIGZhbHNlIHBvc2l0aXZlOiBtYWxsb2MtbWFsbG9jLWluaXQtaW5pdCBpcyBub3QgYWNjZXB0ZWQKKyMgLSBmYWxzZSBwb3NpdGl2ZXM6ICJub24tc3RhbmRhcmQiIGluaXQgZnVuY3Rpb25zIChlZywgdGhlIHRoaW5ncyBiZWluZworIyBpbml0aWFsaXNlZCBpcyBub3QgdGhlIGZpcnN0IGFyZywgb3IgaW5pdGlhbGlzZSBzdHJ1Y3QgbWVtYmVycykKKyMKKyMgU2luY2UgZmFsc2UgcG9zaXRpdmVzIGFyZSBleHBlY3RlZCwgdGhlIHJlc3VsdHMgbXVzdCBiZSBtYW51YWxseSByZXZpZXdlZC4KKyMKKyMgVHlwaWNhbCB1c2FnZTogc2NyaXB0cy9tYWxsb2MtaW5pdC5wbCBsaWJyYXJ5LyouYworCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OworCit1c2UgdXRmODsKK3VzZSBvcGVuIHF3KDpzdGQgdXRmOCk7CisKK215ICRsaW1pdCA9IDc7CitteSAkaW5pdHMgPSBxci9tZW1zZXR8bWVtY3B5fF9pbml0fGZyZWFkfGJhc2U2NF8uLmNvZGUvOworCisjIGNhc2VzIHRvIGJlYXIgaW4gbWluZDoKKyMKKyMgMC4gZm9vID0gbWFsbG9jKC4uLik7IG1lbXNldCggZm9vLCAuLi4gKTsKKyMgMS4gKmZvbyA9IG1hbGxvYyguLi4pOyBtZW1zZXQoICpmb28sIC4uLiApOworIyAyLiB0eXBlICpmb28gPSBtYWxsb2MoLi4uKTsgbWVtc2V0KCBmb28sIC4uLik7CisjIDMuIGZvbyA9IG1hbGxvYyguLi4pOyBmb29faW5pdCggKHR5cGUgKikgZm9vICk7CisjIDQuIGZvbyA9IG1hbGxvYyguLi4pOyBmb3IoaT0wLi5uKSB7IGluaXQoICZmb29baV0gKTsgfQorIworIyBUaGUgY2hvc2VuIHBhdHRlcm5zIGFyZSBhIGJpdCByZWxheGVkLCBidXQgdW5saWtlbHkgdG8gY2F1c2UgZmFsc2UgcG9zaXRpdmVzCisjIGluIHJlYWwgY29kZSAoaW5pdGlhbGlzaW5nICpmb28gb3IgJmZvbyBpbnN0ZWFkIG9mIGZvbyB3aWxsIGxpa2VseSBiZSBjYXVnaHQKKyMgYnkgZnVuY3Rpb25hbCB0ZXN0cykuCisjCitteSAkaWQgPSBxci8oW2EtekEtWi0wLTlfXC0+XC5dKikvOworbXkgJHByZWZpeCA9IHFyL1xzKD86XCo/fFwmP3xcKFthLXpfXSogXCpcKSlccyovOworCitteSAkbmFtZTsKK215ICRsaW5lOworbXkgQGJhZDsKKworZGllICJVc2FnZTogJDAgZmlsZS5jIFsuLi5dXG4iIHVubGVzcyBAQVJHVjsKKword2hpbGUgKG15ICRmaWxlID0gc2hpZnQgQEFSR1YpCit7CisgICAgb3BlbiBteSAkZmgsICI8IiwgJGZpbGUgb3IgZGllICJyZWFkICRmaWxlIGZhaWxlZDogJCFcbiI7CisgICAgd2hpbGUgKDwkZmg+KQorICAgIHsKKyAgICAgICAgaWYoIC9tYmVkdGxzX21hbGxvY1woLyApIHsKKyAgICAgICAgICAgIGlmKCAvJGlkXHMqPS4qbWJlZHRsc19tYWxsb2NcKC8gKSB7CisgICAgICAgICAgICAgICAgcHVzaCBAYmFkLCAiJGZpbGU6JGxpbmU6JG5hbWUiIGlmICRuYW1lOworICAgICAgICAgICAgICAgICRuYW1lID0gJDE7CisgICAgICAgICAgICAgICAgJGxpbmUgPSAkLjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaCBAYmFkLCAiJGZpbGU6JC46Pz8/IiB1bmxlc3MgL3JldHVybiBtYmVkdGxzX21hbGxvYy87CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzaWYoICRuYW1lICYmIC8oPzokaW5pdHMpXCgkcHJlZml4XFEkbmFtZVxFXGIvICkgeworICAgICAgICAgICAgdW5kZWYgJG5hbWU7CisgICAgICAgIH0gZWxzaWYoICRuYW1lICYmICQuIC0gJGxpbmUgPiAkbGltaXQgKSB7CisgICAgICAgICAgICBwdXNoIEBiYWQsICIkZmlsZTokbGluZTokbmFtZSI7CisgICAgICAgICAgICB1bmRlZiAkbmFtZTsKKyAgICAgICAgICAgIHVuZGVmICRsaW5lOworICAgICAgICB9CisgICAgfQorICAgIGNsb3NlICRmaCBvciBkaWU7Cit9CisKK3ByaW50ICIkX1xuIiBmb3IgQGJhZDsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL21hc3NpZl9tYXgucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9tYXNzaWZfbWF4LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxY2U0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9tYXNzaWZfbWF4LnBsCkBAIC0wLDAgKzEsMzMgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIFBhcnNlIGEgbWFzc2lmLm91dC54eHggZmlsZSBhbmQgb3V0cHV0IHBlYWsgdG90YWwgbWVtb3J5IHVzYWdlCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7CisKK3VzZSB1dGY4OwordXNlIG9wZW4gcXcoOnN0ZCB1dGY4KTsKKworZGllIHVubGVzcyBAQVJHViA9PSAxOworCitteSBAc25hcHM7CitvcGVuIG15ICRmaCwgJzwnLCAkQVJHVlswXSBvciBkaWU7Cit7IGxvY2FsICQvID0gJ3NuYXBzaG90PSc7IEBzbmFwcyA9IDwkZmg+OyB9CitjbG9zZSAkZmggb3IgZGllOworCitteSAoJG1heCwgJG1heF9oZWFwLCAkbWF4X2hlLCAkbWF4X3N0YWNrKSA9ICgwLCAwLCAwLCAwKTsKK2ZvciAoQHNuYXBzKQoreworICAgIG15ICgkaGVhcCwgJGhlYXBfZXh0cmEsICRzdGFjaykgPSBteworICAgICAgICBtZW1faGVhcF9CPShcZCspXG4KKyAgICAgICAgbWVtX2hlYXBfZXh0cmFfQj0oXGQrKVxuCisgICAgICAgIG1lbV9zdGFja3NfQj0oXGQrKQorICAgIH14bTsKKyAgICBuZXh0IHVubGVzcyBkZWZpbmVkICRoZWFwOworICAgIG15ICR0b3RhbCA9ICRoZWFwICsgJGhlYXBfZXh0cmEgKyAkc3RhY2s7CisgICAgaWYoICR0b3RhbCA+ICRtYXggKSB7CisgICAgICAgICgkbWF4LCAkbWF4X2hlYXAsICRtYXhfaGUsICRtYXhfc3RhY2spID0gKCR0b3RhbCwgJGhlYXAsICRoZWFwX2V4dHJhLCAkc3RhY2spOworICAgIH0KK30KKworcHJpbnRmICIkbWF4IChoZWFwICRtYXhfaGVhcCskbWF4X2hlLCBzdGFjayAkbWF4X3N0YWNrKVxuIjsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL21lbW9yeS5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL21lbW9yeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZGFkMjg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvbWVtb3J5LnNoCkBAIC0wLDAgKzEsMTI2IEBACisjIS9iaW4vc2gKKworIyBNZWFzdXJlIG1lbW9yeSB1c2FnZSBvZiBhIG1pbmltYWwgY2xpZW50IHVzaW5nIGEgc21hbGwgY29uZmlndXJhdGlvbgorIyBDdXJyZW50bHkgaGFyZHdpcmVkIHRvIGNjbS1wc2sgYW5kIHN1aXRlLWIsIG1heSBiZSBleHBhbmRlZCBsYXRlcgorIworIyBVc2UgZGlmZmVyZW50IGJ1aWxkIG9wdGlvbnMgZm9yIG1lYXN1cmluZyBleGVjdXRhYmxlIHNpemUgYW5kIG1lbW9yeSB1c2FnZSwKKyMgc2luY2UgZm9yIG1lbW9yeSB3ZSB3YW50IGRlYnVnIGluZm9ybWF0aW9uLgorCitzZXQgLWV1CisKK0NPTkZJR19IPSdpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgnCisKK0NMSUVOVD0nbWluaV9jbGllbnQnCisKK0NGTEFHU19FWEVDPSctZm5vLWFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIC1XbCwtLWdjLXNlY3Rpb24gLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMnCitDRkxBR1NfTUVNPS1nMworCitpZiBbIC1yICRDT05GSUdfSCBdOyB0aGVuIDo7IGVsc2UKKyAgICBlY2hvICIkQ09ORklHX0ggbm90IGZvdW5kIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK2lmIGdyZXAgLWkgY21ha2UgTWFrZWZpbGUgPi9kZXYvbnVsbDsgdGhlbgorICAgIGVjaG8gIk5vdCBjb21wYXRpYmxlIHdpdGggQ01ha2UiID4mMgorICAgIGV4aXQgMQorZmkKKworaWYgWyAkKCB1bmFtZSApICE9IExpbnV4IF07IHRoZW4KKyAgICBlY2hvICJPbmx5IHdvcmsgb24gTGludXgiID4mMgorICAgIGV4aXQgMQorZmkKKworaWYgZ2l0IHN0YXR1cyB8IGdyZXAgLUYgJENPTkZJR19IID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGVjaG8gImNvbmZpZy5oIG5vdCBjbGVhbiIgPiYyCisgICAgZXhpdCAxCitmaQorCisjIG1ha2UgbWVhc3VyZW1lbnRzIHdpdGggb25lIGNvbmZpZ3VyYXRpb24KKyMgdXNhZ2U6IGRvX2NvbmZpZyA8bmFtZT4gPHVuc2V0LWxpc3Q+IDxzZXJ2ZXItYXJncz4KK2RvX2NvbmZpZygpCit7CisgICAgTkFNRT0kMQorICAgIFVOU0VUX0xJU1Q9JDIKKyAgICBTRVJWRVJfQVJHUz0kMworCisgICAgZWNobyAiIgorICAgIGVjaG8gImNvbmZpZy0kTkFNRToiCisgICAgY3AgY29uZmlncy9jb25maWctJE5BTUUuaCAkQ09ORklHX0gKKyAgICBzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX1NTTF9TUlZfQworCisgICAgZm9yIEZMQUcgaW4gJFVOU0VUX0xJU1Q7IGRvCisgICAgICAgIHNjcmlwdHMvY29uZmlnLnBsIHVuc2V0ICRGTEFHCisgICAgZG9uZQorCisgICAgZ3JlcCAtRiBTU0xfTUFYX0NPTlRFTlRfTEVOICRDT05GSUdfSCB8fCBlY2hvICdTU0xfTUFYX0NPTlRFTlRfTEVOPTE2Mzg0JworCisgICAgcHJpbnRmICIgICAgRXhlY3V0YWJsZSBzaXplLi4uICIKKworICAgIG1ha2UgY2xlYW4KKyAgICBDRkxBR1M9JENGTEFHU19FWEVDIG1ha2UgT0ZMQUdTPS1PcyBsaWIgPi9kZXYvbnVsbCAyPiYxCisgICAgY2QgcHJvZ3JhbXMKKyAgICBDRkxBR1M9JENGTEFHU19FWEVDIG1ha2UgT0ZMQUdTPS1PcyBzc2wvJENMSUVOVCA+L2Rldi9udWxsCisgICAgc3RyaXAgc3NsLyRDTElFTlQKKyAgICBzdGF0IC1jICclcycgc3NsLyRDTElFTlQKKyAgICBjZCAuLgorCisgICAgcHJpbnRmICIgICAgUGVhayByYW0gdXNhZ2UuLi4gIgorCisgICAgbWFrZSBjbGVhbgorICAgIENGTEFHUz0kQ0ZMQUdTX01FTSBtYWtlIE9GTEFHUz0tT3MgbGliID4vZGV2L251bGwgMj4mMQorICAgIGNkIHByb2dyYW1zCisgICAgQ0ZMQUdTPSRDRkxBR1NfTUVNIG1ha2UgT0ZMQUdTPS1PcyBzc2wvJENMSUVOVCA+L2Rldi9udWxsCisgICAgY2QgLi4KKworICAgIC4vc3NsX3NlcnZlcjIgJFNFUlZFUl9BUkdTID4vZGV2L251bGwgJgorICAgIFNSVl9QSUQ9JCEKKyAgICBzbGVlcCAxOworCisgICAgaWYgdmFsZ3JpbmQgLS10b29sPW1hc3NpZiAtLXN0YWNrcz15ZXMgcHJvZ3JhbXMvc3NsLyRDTElFTlQgPi9kZXYvbnVsbCAyPiYxCisgICAgdGhlbgorICAgICAgICBGQUlMRUQ9MAorICAgIGVsc2UKKyAgICAgICAgZWNobyAiY2xpZW50IGZhaWxlZCIgPiYyCisgICAgICAgIEZBSUxFRD0xCisgICAgZmkKKworICAgIGtpbGwgJFNSVl9QSUQKKyAgICB3YWl0ICRTUlZfUElECisKKyAgICBzY3JpcHRzL21hc3NpZl9tYXgucGwgbWFzc2lmLm91dC4qCisgICAgbXYgbWFzc2lmLm91dC4qIG1hc3NpZi0kTkFNRS4kJAorfQorCisjIHByZXBhcmF0aW9uCisKK0NPTkZJR19CQUs9JHtDT05GSUdfSH0uYmFrCitjcCAkQ09ORklHX0ggJENPTkZJR19CQUsKKworcm0gLWYgbWFzc2lmLm91dC4qCisKK3ByaW50ZiAiYnVpbGRpbmcgc2VydmVyLi4uICIKKworbWFrZSBjbGVhbgorbWFrZSBsaWIgPi9kZXYvbnVsbCAyPiYxCisoY2QgcHJvZ3JhbXMgJiYgbWFrZSBzc2wvc3NsX3NlcnZlcjIpID4vZGV2L251bGwKK2NwIHByb2dyYW1zL3NzbC9zc2xfc2VydmVyMiAuCisKK2VjaG8gImRvbmUiCisKKyMgYWN0dWFsIG1lYXN1cmVtZW50cworCitkb19jb25maWcgICAiY2NtLXBzay10bHMxXzIiIFwKKyAgICAgICAgICAgICIiIFwKKyAgICAgICAgICAgICJwc2s9MDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiCisKK2RvX2NvbmZpZyAgICJzdWl0ZS1iIiBcCisgICAgICAgICAgICAiTUJFRFRMU19CQVNFNjRfQyBNQkVEVExTX1BFTV9QQVJTRV9DIE1CRURUTFNfQ0VSVFNfQyIgXAorICAgICAgICAgICAgIiIKKworIyBjbGVhbnVwCisKK212ICRDT05GSUdfQkFLICRDT05GSUdfSAorbWFrZSBjbGVhbgorcm0gc3NsX3NlcnZlcjIKKworZXhpdCAkRkFJTEVECmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9vdXRwdXRfZW52LnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvb3V0cHV0X2Vudi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NDFmZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvb3V0cHV0X2Vudi5zaApAQCAtMCwwICsxLDE2OCBAQAorIyEvYmluL3NoCisjCisjIG91dHB1dF9lbnYuc2gKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjIFB1cnBvc2UKKyMKKyMgVG8gcHJpbnQgb3V0IGFsbCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50LgorIworIyBUaGlzIGluY2x1ZGVzOgorIyAgIC0gYXJjaGl0ZWN0dXJlIG9mIHRoZSBzeXN0ZW0KKyMgICAtIHR5cGUgYW5kIHZlcnNpb24gb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0KKyMgICAtIHZlcnNpb24gb2YgYXJtY2MsIGNsYW5nLCBnY2MtYXJtIGFuZCBnY2MgY29tcGlsZXJzCisjICAgLSB2ZXJzaW9uIG9mIGxpYmMsIGNsYW5nLCBhc2FuIGFuZCB2YWxncmluZCBpZiBpbnN0YWxsZWQKKyMgICAtIHZlcnNpb24gb2YgZ251VExTIGFuZCBPcGVuU1NMCisKK2VjaG8KK2VjaG8gIiogT3BlcmF0aW5nIHN5c3RlbSBhbmQgYXJjaGl0ZWN0dXJlOiIKK3VuYW1lIC1hCisKK2VjaG8KK2lmIGBoYXNoIGFybWNjID4gL2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgZWNobyAiKiBhcm1jYzoiCisgICAgYXJtY2MgLS12c24gfCBoZWFkIC1uIDIKK2Vsc2UKKyAgICBlY2hvICIqIGFybWNjIG5vdCBmb3VuZCEiCitmaQorCitlY2hvCitpZiBgaGFzaCBhcm0tbm9uZS1lYWJpLWdjYyA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgIGVjaG8gIiogZ2NjLWFybToiCisgICAgYXJtLW5vbmUtZWFiaS1nY2MgLS12ZXJzaW9uIHwgaGVhZCAtbiAxCitlbHNlCisgICAgZWNobyAiKiBnY2MtYXJtIG5vdCBmb3VuZCEiCitmaQorCitlY2hvCitpZiBgaGFzaCBnY2MgPiAvZGV2L251bGwgMj4mMWA7IHRoZW4KKyAgICBlY2hvICIqIGdjYzoiCisgICAgZ2NjIC0tdmVyc2lvbiB8IGhlYWQgLW4gMQorZWxzZQorICAgIGVjaG8gIiogZ2NjIG5vdCBmb3VuZCEiCitmaQorCitlY2hvCitpZiBgaGFzaCBjbGFuZyA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgIGVjaG8gIiogY2xhbmc6IgorICAgIGNsYW5nIC0tdmVyc2lvbiB8IGhlYWQgLW4gMgorICAgIGNsYW5nIC12IDI+JjEgfCBncmVwIFNlbGVjdGVkCitlbHNlCisgICAgZWNobyAiKiBjbGFuZyBub3QgZm91bmQhIgorZmkKKworZWNobworaWYgYGhhc2ggbGRkID4gL2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgZWNobyAiKiBsaWJjOiIKKyAgICBsZGQgLS12ZXJzaW9uIHwgaGVhZCAtbiAxCitlbHNlCisgICAgZWNobyAiKiBObyBsZGQgcHJlc2VudDogY2FuJ3QgZGV0ZXJtaW5lIGxpYmMgdmVyc2lvbiEiCitmaQorCitlY2hvCitpZiBgaGFzaCB2YWxncmluZCA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgIGVjaG8gIiogdmFsZ3JpbmQ6IgorICAgIHZhbGdyaW5kIC0tdmVyc2lvbgorZWxzZQorICAgIGVjaG8gIiogdmFsZ3JpbmQgbm90IGZvdW5kISIKK2ZpCisKK2VjaG8KK2lmIGBoYXNoIG9wZW5zc2wgPiAvZGV2L251bGwgMj4mMWA7IHRoZW4KKyAgICBlY2hvICIqIG9wZW5zc2w6IgorICAgIG9wZW5zc2wgdmVyc2lvbgorZWxzZQorICAgIGVjaG8gIiogb3BlbnNzbCBub3QgZm91bmQhIgorZmkKKworaWYgWyAtbiAiJHtPUEVOU1NMK3NldH0iIF07IHRoZW4KKyAgICBlY2hvCisgICAgaWYgYGhhc2ggIiRPUEVOU1NMIiA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgICAgICBlY2hvICIqICRPUEVOU1NMIGF0IGVudmlyb25tZW50IHZhcmlhYmxlICdPUEVOU1NMJzoiCisgICAgICAgICRPUEVOU1NMIHZlcnNpb24KKyAgICBlbHNlCisgICAgICAgIGVjaG8gIiogJE9QRU5TU0wgYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ09QRU5TU0wnIG5vdCBmb3VuZCEiCisgICAgZmkKK2ZpCisKK2lmIFsgLW4gIiR7T1BFTlNTTF9MRUdBQ1krc2V0fSIgXTsgdGhlbgorICAgIGVjaG8KKyAgICBpZiBgaGFzaCAiJE9QRU5TU0xfTEVHQUNZIiA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgICAgICBlY2hvICIqICRPUEVOU1NMX0xFR0FDWSBhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSAnT1BFTlNTTF9MRUdBQ1knOiIKKyAgICAgICAgJE9QRU5TU0xfTEVHQUNZIHZlcnNpb24KKyAgICBlbHNlCisgICAgICAgIGVjaG8gIiogJE9QRU5TU0xfTEVHQUNZIGF0IGVudmlyb25tZW50IHZhcmlhYmxlICdPUEVOU1NMX0xFR0FDWScgbm90IGZvdW5kISIKKyAgICBmaQorZmkKKworZWNobworaWYgYGhhc2ggZ251dGxzLWNsaSA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgIGVjaG8gIiogZ251VExTIGNsaWVudDoiCisgICAgZ251dGxzLWNsaSAtLXZlcnNpb24gfCBoZWFkIC1uIDEKK2Vsc2UKKyAgICBlY2hvICIqIGdudVRMUyBjbGllbnQgbm90IGZvdW5kISIKK2ZpCisKK2VjaG8KK2lmIGBoYXNoIGdudXRscy1zZXJ2ID4gL2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgZWNobyAiKiBnbnVUTFMgc2VydmVyOiIKKyAgICBnbnV0bHMtc2VydiAtLXZlcnNpb24gfCBoZWFkIC1uIDEKK2Vsc2UKKyAgICBlY2hvICIqIGdudVRMUyBzZXJ2ZXIgbm90IGZvdW5kISIKK2ZpCisKK2lmIFsgLW4gIiR7R05VVExTX0NMSStzZXR9IiBdOyB0aGVuCisgICAgZWNobworICAgIGlmIGBoYXNoICIkR05VVExTX0NMSSIgPiAvZGV2L251bGwgMj4mMWA7IHRoZW4KKyAgICAgICAgZWNobyAiKiAkR05VVExTX0NMSSBhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR05VVExTX0NMSSc6IgorICAgICAgICAkR05VVExTX0NMSSAtLXZlcnNpb24gfCBoZWFkIC1uIDEKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIiogJEdOVVRMU19DTEkgYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dOVVRMU19DTEknIG5vdCBmb3VuZCEiCisgICAgZmkKK2ZpCisKK2lmIFsgLW4gIiR7R05VVExTX1NFUlYrc2V0fSIgXTsgdGhlbgorICAgIGVjaG8KKyAgICBpZiBgaGFzaCAiJEdOVVRMU19TRVJWIiA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgICAgICBlY2hvICIqICRHTlVUTFNfU0VSViBhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR05VVExTX1NFUlYnOiIKKyAgICAgICAgJEdOVVRMU19TRVJWIC0tdmVyc2lvbiB8IGhlYWQgLW4gMQorICAgIGVsc2UKKyAgICAgICAgZWNobyAiKiAkR05VVExTX1NFUlYgYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dOVVRMU19TRVJWJyBub3QgZm91bmQhIgorICAgIGZpCitmaQorCitpZiBbIC1uICIke0dOVVRMU19MRUdBQ1lfQ0xJK3NldH0iIF07IHRoZW4KKyAgICBlY2hvCisgICAgaWYgYGhhc2ggIiRHTlVUTFNfTEVHQUNZX0NMSSIgPiAvZGV2L251bGwgMj4mMWA7IHRoZW4KKyAgICAgICAgZWNobyAiKiAkR05VVExTX0xFR0FDWV9DTEkgYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dOVVRMU19MRUdBQ1lfQ0xJJzoiCisgICAgICAgICRHTlVUTFNfTEVHQUNZX0NMSSAtLXZlcnNpb24gfCBoZWFkIC1uIDEKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIiogJEdOVVRMU19MRUdBQ1lfQ0xJIGF0IGVudmlyb25tZW50IHZhcmlhYmxlICdHTlVUTFNfTEVHQUNZX0NMSScgbm90IGZvdW5kISIKKyAgICBmaQorZmkKKworaWYgWyAtbiAiJHtHTlVUTFNfTEVHQUNZX1NFUlYrc2V0fSIgXTsgdGhlbgorICAgIGVjaG8KKyAgICBpZiBgaGFzaCAiJEdOVVRMU19MRUdBQ1lfU0VSViIgPiAvZGV2L251bGwgMj4mMWA7IHRoZW4KKyAgICAgICAgZWNobyAiKiAkR05VVExTX0xFR0FDWV9TRVJWIGF0IGVudmlyb25tZW50IHZhcmlhYmxlICdHTlVUTFNfTEVHQUNZX1NFUlYnOiIKKyAgICAgICAgJEdOVVRMU19MRUdBQ1lfU0VSViAtLXZlcnNpb24gfCBoZWFkIC1uIDEKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIiogJEdOVVRMU19MRUdBQ1lfU0VSViBhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR05VVExTX0xFR0FDWV9TRVJWJyBub3QgZm91bmQhIgorICAgIGZpCitmaQorCitlY2hvCitpZiBgaGFzaCBkcGtnID4gL2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgZWNobyAiKiBhc2FuOiIKKyAgICBkcGtnIC1zIGxpYmFzYW4yIDI+IC9kZXYvbnVsbCB8IGdyZXAgLWkgdmVyc2lvbgorICAgIGRwa2cgLXMgbGliYXNhbjEgMj4gL2Rldi9udWxsIHwgZ3JlcCAtaSB2ZXJzaW9uCisgICAgZHBrZyAtcyBsaWJhc2FuMCAyPiAvZGV2L251bGwgfCBncmVwIC1pIHZlcnNpb24KK2Vsc2UKKyAgICBlY2hvICIqIE5vIGRwa2cgcHJlc2VudDogY2FuJ3QgZGV0ZXJtaW5lIGFzYW4gdmVyc2lvbiEiCitmaQorCitlY2hvCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL3JlbmFtZS5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL3JlbmFtZS5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMjk1MTllCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvcmVuYW1lLnBsCkBAIC0wLDAgKzEsMTIyIEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBUaGlzIHNjcmlwdCBtaWdyYXRlcyBhcHBsaWNhdGlvbiBzb3VyY2UgY29kZSBmcm9tIHRoZSBtYmVkIFRMUyAxLjMgQVBJIHRvIHRoZQorIyBtYmVkIFRMUyAyLjAgQVBJLgorIworIyBUaGUgc2NyaXB0IHByb2Nlc3NlcyB0aGUgZ2l2ZW4gc291cmNlIGNvZGUgYW5kIHJlbmFtZXMgaWRlbnRpZmllcnMgLSBmdW5jdGlvbnMKKyMgdHlwZXMsIGVudW1zIGV0YywgYXMKKyMKKyMgVXNhZ2U6ICByZW5hbWUucGwgWy1mIGRhdGFmaWxlXSBbLXNdIFstLV0gW2ZpbGVuYW1lcy4uLl0KKyMKKwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKKwordXNlIHV0Zjg7Cit1c2UgUGF0aDo6Q2xhc3M7Cit1c2Ugb3BlbiBxdyg6c3RkIHV0ZjgpOworCitteSAkdXNhZ2UgPSAiVXNhZ2U6ICQwIFstZiBkYXRhZmlsZV0gWy1zXSBbLS1dIFtmaWxlbmFtZXMuLi5dXG4iOworCisobXkgJGRhdGFmaWxlID0gJDApID1+IHMvcmVuYW1lLnBsJC9kYXRhX2ZpbGVzXC9yZW5hbWUtMS4zLTIuMC50eHQvOworbXkgJGRvX3N0cmluZ3MgPSAwOworCit3aGlsZSggQEFSR1YgJiYgJEFSR1ZbMF0gPX4gL14tLyApIHsKKyAgICBteSAkb3B0ID0gc2hpZnQ7CisgICAgaWYoICRvcHQgZXEgJy0tJyApIHsKKyAgICAgICAgbGFzdDsKKyAgICB9IGVsc2lmKCAkb3B0IGVxICctZicgKSB7CisgICAgICAgICRkYXRhZmlsZSA9IHNoaWZ0OworICAgIH0gZWxzaWYoICRvcHQgZXEgJy1zJyApIHsKKyAgICAgICAgJGRvX3N0cmluZ3MgPSAxOyBzaGlmdDsKKyAgICB9IGVsc2UgeworICAgICAgICBkaWUgJHVzYWdlOworICAgIH0KK30KKworbXkgJXN1YnN0Oworb3BlbiBteSAkbmZoLCAnPCcsICRkYXRhZmlsZSBvciBkaWUgIkNvdWxkIG5vdCByZWFkICRkYXRhZmlsZVxuIjsKK215ICRpZGVudCA9IHFyL1tfQS1aYS16XVtfQS1aYS16MC05XSovOword2hpbGUoIG15ICRsaW5lID0gPCRuZmg+ICkgeworICAgIGNob21wICRsaW5lOworICAgIG15ICggJG9sZCwgJG5ldyApID0gKCAkbGluZSA9fiAvXigkaWRlbnQpXHMrKCRpZGVudCkkLyApOworICAgIGlmKCAhICRvbGQgfHwgISAkbmV3ICkgeworICAgICAgICBkaWUgIiQwOiAkZGF0YWZpbGU6JC46IGJhZCBpbnB1dCAnJGxpbmUnXG4iOworICAgIH0KKyAgICAkc3Vic3R7JG9sZH0gPSAkbmV3OworfQorY2xvc2UgJG5maCBvciBkaWU7CisKK215ICRzdHJpbmcgPSBxci8iKD86XFwufFteXFwiXSkqIi87CitteSAkc3BhY2UgPSBxci9ccysvOworbXkgJGlkbnVtID0gcXIvW2EtekEtWjAtOV9dKy87CitteSAkc3ltYm9scyA9IHFyL1stISNcJCUmJygpKissLlwvOjs8PT4/QFtcXFxdXl9ge3x9fl0rfCIvOworCitteSAkbGliX2luY2x1ZGVfZGlyID0gZGlyKCQwKS0+cGFyZW50LT5wYXJlbnQtPnN1YmRpcignaW5jbHVkZScsICdtYmVkdGxzJyk7CitteSAkbGliX3NvdXJjZV9kaXIgPSBkaXIoJDApLT5wYXJlbnQtPnBhcmVudC0+c3ViZGlyKCdsaWJyYXJ5Jyk7CisKKyMgaWYgd2UgcmVwbGFjZSBpbnNpZGUgc3RyaW5ncywgd2UgZG9uJ3QgY29uc2lkZXIgdGhlbSBhIHRva2VuCitteSAkdG9rZW4gPSAkZG9fc3RyaW5ncyA/ICAgICAgICAgcXIvJHNwYWNlfCRpZG51bXwkc3ltYm9scy8KKyAgICAgICAgICAgICAgICAgICAgICAgIDogcXIvJHN0cmluZ3wkc3BhY2V8JGlkbnVtfCRzeW1ib2xzLzsKKworbXkgJXdhcm5pbmdzOworCisjIElmIG5vIGZpbGVzIHdlcmUgcGFzc2VkLCBleGl0Li4uCitpZiAoIG5vdCBkZWZpbmVkKCRBUkdWWzBdKSApeyBkaWUgJHVzYWdlOyB9CisKK3doaWxlKCBteSAkZmlsZW5hbWUgPSBzaGlmdCApCit7CisgICAgcHJpbnQgU1RERVJSICIkZmlsZW5hbWUuLi4gIjsKKworICAgIGlmKCBkaXIoJGZpbGVuYW1lKS0+cGFyZW50IGVxICRsaWJfaW5jbHVkZV9kaXIgfHwKKyAgICAgICAgIGRpcigkZmlsZW5hbWUpLT5wYXJlbnQgZXEgJGxpYl9zb3VyY2VfZGlyICkKKyAgICB7CisgICAgICAgIGRpZSAiU2NyaXB0IGNhbm5vdCBiZSBleGVjdXRlZCBvbiB0aGUgbWJlZCBUTFMgbGlicmFyeSBpdHNlbGYuIjsKKyAgICB9CisKKyAgICBpZiggLWQgJGZpbGVuYW1lICkgeyBwcmludCBTVERFUlIgInNraXAgKGRpcmVjdG9yeSlcbiI7IG5leHQgfQorCisgICAgb3BlbiBteSAkcmZoLCAnPCcsICRmaWxlbmFtZSBvciBkaWU7CisgICAgbXkgQGxpbmVzID0gPCRyZmg+OworICAgIGNsb3NlICRyZmggb3IgZGllOworCisgICAgbXkgQG91dDsKKyAgICBmb3IgbXkgJGxpbmUgKEBsaW5lcykgeworICAgICAgICBpZiggJGxpbmUgPX4gLyNpbmNsdWRlLyApIHsKKyAgICAgICAgICAgICRsaW5lID1+IHMvcG9sYXJzc2wvbWJlZHRscy87CisgICAgICAgICAgICAkbGluZSA9fiBzL1BPTEFSU1NML01CRURUTFMvOworICAgICAgICAgICAgcHVzaCggQG91dCwgJGxpbmUgKTsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICBteSBAd29yZHMgPSAoJGxpbmUgPX4gLyR0b2tlbi9nKTsKKyAgICAgICAgbXkgJGNoZWNrbGluZSA9IGpvaW4gJycsIEB3b3JkczsKKyAgICAgICAgaWYoICRjaGVja2xpbmUgZXEgJGxpbmUgKSB7CisgICAgICAgICAgICBteSBAbmV3ID0gbWFwIHsgZXhpc3RzICRzdWJzdHskX30gPyAkc3Vic3R7JF99IDogJF8gfSBAd29yZHM7CisgICAgICAgICAgICBwdXNoKCBAb3V0LCBqb2luICcnLCBAbmV3ICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkd2FybmluZ3N7JGZpbGVuYW1lfSA9IFtdIHVubGVzcyAkd2FybmluZ3N7JGZpbGVuYW1lfTsKKyAgICAgICAgICAgIHB1c2ggQHsgJHdhcm5pbmdzeyRmaWxlbmFtZX0gfSwgJGxpbmU7CisgICAgICAgICAgICBwdXNoKCBAb3V0LCAkbGluZSApOworICAgICAgICB9CisgICAgfQorCisgICAgb3BlbiBteSAkd2ZoLCAnPicsICRmaWxlbmFtZSBvciBkaWU7CisgICAgcHJpbnQgJHdmaCAkXyBmb3IgQG91dDsKKyAgICBjbG9zZSAkd2ZoIG9yIGRpZTsKKyAgICBwcmludCBTVERFUlIgImRvbmVcbiI7Cit9CisKK2lmKCAld2FybmluZ3MgKSB7CisgICAgcHJpbnQgIlxuV2FybmluZzogbGluZXMgc2tpcHBlZCBkdWUgdG8gdW5leHBlY3RlZCBjaGFyYWN0ZXJzOlxuIjsKKyAgICBmb3IgbXkgJGZpbGVuYW1lIChzb3J0IGtleXMgJXdhcm5pbmdzKSB7CisgICAgICAgIHByaW50ICJpbiAkZmlsZW5hbWU6XG4iOworICAgICAgICBwcmludCBmb3IgQHsgJHdhcm5pbmdzeyRmaWxlbmFtZX0gfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9ybS1tYWxsb2MtY2FzdC5jb2NjaSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL3JtLW1hbGxvYy1jYXN0LmNvY2NpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzdkYzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9ybS1tYWxsb2MtY2FzdC5jb2NjaQpAQCAtMCwwICsxLDcgQEAKK0BybV9tYWxsb2NfY2FzdEAKK2V4cHJlc3Npb24geCwgbjsKK3R5cGUgVDsKK0BACisgIHggPQorLSAoVCAqKQorICBtYmVkdGxzX21hbGxvYyhuKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvdG1wX2lnbm9yZV9tYWtlZmlsZXMuc2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy90bXBfaWdub3JlX21ha2VmaWxlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZjk0NTBlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvdG1wX2lnbm9yZV9tYWtlZmlsZXMuc2gKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL2Jhc2gKKworIyBUZW1wb3JhcmlseSAoZGUpaWdub3JlIE1ha2VmaWxlcyBnZW5lcmF0ZWQgYnkgQ01ha2UgdG8gYWxsb3cgZWFzaWVyCisjIGdpdCBkZXZlbG9wbWVudAorCitJR05PUkU9IiIKKworIyBQYXJzZSBhcmd1bWVudHMKKyMKK3VudGlsIFsgLXogIiQxIiBdCitkbworICBjYXNlICIkMSIgaW4KKyAgICAtdXwtLXVuZG8pCisgICAgICBJR05PUkU9IjAiCisgICAgICA7OworICAgIC12fC0tdmVyYm9zZSkKKyAgICAgICMgQmUgdmVyYm9zZQorICAgICAgVkVSQk9TRT0iMSIKKyAgICAgIDs7CisgICAgLWh8LS1oZWxwKQorICAgICAgIyBwcmludCBoZWxwCisgICAgICBlY2hvICJVc2FnZTogJDAiCisgICAgICBlY2hvIC1lICIgIC1ofC0taGVscFx0XHRQcmludCB0aGlzIGhlbHAuIgorICAgICAgZWNobyAtZSAiICAtdXwtLXVuZG9cdFx0UmVtb3ZlIGlnbm9yZXMgYW5kIGNvbnRpbnVlIHRyYWNraW5nLiIKKyAgICAgIGVjaG8gLWUgIiAgLXZ8LS12ZXJib3NlXHRcdFZlcmJvc2UuIgorICAgICAgZXhpdCAxCisgICAgICA7OworICAgICopCisgICAgICAjIHByaW50IGVycm9yCisgICAgICBlY2hvICJVbmtub3duIGFyZ3VtZW50OiAnJDEnIgorICAgICAgZXhpdCAxCisgICAgICA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmIFsgIlgiID0gIlgkSUdOT1JFIiBdOwordGhlbgorICBbICRWRVJCT1NFIF0gJiYgZWNobyAiSWdub3JpbmcgTWFrZWZpbGVzIgorICBnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCBNYWtlZmlsZSBsaWJyYXJ5L01ha2VmaWxlIHByb2dyYW1zL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlCitlbHNlCisgIFsgJFZFUkJPU0UgXSAmJiBlY2hvICJUcmFja2luZyBNYWtlZmlsZXMiCisgIGdpdCB1cGRhdGUtaW5kZXggLS1uby1hc3N1bWUtdW5jaGFuZ2VkIE1ha2VmaWxlIGxpYnJhcnkvTWFrZWZpbGUgcHJvZ3JhbXMvTWFrZWZpbGUgdGVzdHMvTWFrZWZpbGUKK2ZpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvQ01ha2VMaXN0cy50eHQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1ODNjNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEyOCBAQAorc2V0KGxpYnMKKyAgICBtYmVkdGxzCispCisKK2lmKFVTRV9QS0NTMTFfSEVMUEVSX0xJQlJBUlkpCisgICAgc2V0KGxpYnMgJHtsaWJzfSBwa2NzMTEtaGVscGVyKQorZW5kaWYoVVNFX1BLQ1MxMV9IRUxQRVJfTElCUkFSWSkKKworaWYoRU5BQkxFX1pMSUJfU1VQUE9SVCkKKyAgICBzZXQobGlicyAke2xpYnN9ICR7WkxJQl9MSUJSQVJJRVN9KQorZW5kaWYoRU5BQkxFX1pMSUJfU1VQUE9SVCkKKworZmluZF9wYWNrYWdlKFBlcmwpCitpZihOT1QgUEVSTF9GT1VORCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDYW5ub3QgYnVpbGQgdGVzdCBzdWl0ZXMgd2l0aG91dCBQZXJsIikKK2VuZGlmKCkKKworZnVuY3Rpb24oYWRkX3Rlc3Rfc3VpdGUgc3VpdGVfbmFtZSkKKyAgICBpZihBUkdWMSkKKyAgICAgICAgc2V0KGRhdGFfbmFtZSAke0FSR1YxfSkKKyAgICBlbHNlKCkKKyAgICAgICAgc2V0KGRhdGFfbmFtZSAke3N1aXRlX25hbWV9KQorICAgIGVuZGlmKCkKKworICAgIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgICAgT1VUUFVUIHRlc3Rfc3VpdGVfJHtkYXRhX25hbWV9LmMKKyAgICAgICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzIHRlc3Rfc3VpdGVfJHtzdWl0ZV9uYW1lfSB0ZXN0X3N1aXRlXyR7ZGF0YV9uYW1lfQorICAgICAgICBERVBFTkRTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgbWJlZHRscyBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlXyR7c3VpdGVfbmFtZX0uZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfJHtkYXRhX25hbWV9LmRhdGEKKyAgICApCisKKyAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKKyAgICBhZGRfZXhlY3V0YWJsZSh0ZXN0X3N1aXRlXyR7ZGF0YV9uYW1lfSB0ZXN0X3N1aXRlXyR7ZGF0YV9uYW1lfS5jKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X3N1aXRlXyR7ZGF0YV9uYW1lfSAke2xpYnN9KQorICAgIGFkZF90ZXN0KCR7ZGF0YV9uYW1lfS1zdWl0ZSB0ZXN0X3N1aXRlXyR7ZGF0YV9uYW1lfSkKK2VuZGZ1bmN0aW9uKGFkZF90ZXN0X3N1aXRlKQorCitpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQyBPUiBDTUFLRV9DT01QSUxFUl9JU19DTEFORykKKyAgICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV25vLXVudXNlZC1mdW5jdGlvbiIpCitlbmRpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQyBPUiBDTUFLRV9DT01QSUxFUl9JU19DTEFORykKKworaWYoTVNWQykKKyAgICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAvdyIpICMgbm8gd2FybmluZ3MgaGVyZQorZW5kaWYoTVNWQykKKworYWRkX3Rlc3Rfc3VpdGUoYWVzIGFlcy5lY2IpCithZGRfdGVzdF9zdWl0ZShhZXMgYWVzLmNiYykKK2FkZF90ZXN0X3N1aXRlKGFlcyBhZXMuY2ZiKQorYWRkX3Rlc3Rfc3VpdGUoYWVzIGFlcy5yZXN0KQorYWRkX3Rlc3Rfc3VpdGUoYXJjNCkKK2FkZF90ZXN0X3N1aXRlKGFzbjF3cml0ZSkKK2FkZF90ZXN0X3N1aXRlKGJhc2U2NCkKK2FkZF90ZXN0X3N1aXRlKGJsb3dmaXNoKQorYWRkX3Rlc3Rfc3VpdGUoY2FtZWxsaWEpCithZGRfdGVzdF9zdWl0ZShjY20pCithZGRfdGVzdF9zdWl0ZShjaXBoZXIgY2lwaGVyLmFlcykKK2FkZF90ZXN0X3N1aXRlKGNpcGhlciBjaXBoZXIuYXJjNCkKK2FkZF90ZXN0X3N1aXRlKGNpcGhlciBjaXBoZXIuYmxvd2Zpc2gpCithZGRfdGVzdF9zdWl0ZShjaXBoZXIgY2lwaGVyLmNhbWVsbGlhKQorYWRkX3Rlc3Rfc3VpdGUoY2lwaGVyIGNpcGhlci5jY20pCithZGRfdGVzdF9zdWl0ZShjaXBoZXIgY2lwaGVyLmRlcykKK2FkZF90ZXN0X3N1aXRlKGNpcGhlciBjaXBoZXIuZ2NtKQorYWRkX3Rlc3Rfc3VpdGUoY2lwaGVyIGNpcGhlci5udWxsKQorYWRkX3Rlc3Rfc3VpdGUoY2lwaGVyIGNpcGhlci5wYWRkaW5nKQorYWRkX3Rlc3Rfc3VpdGUoY21hYykKK2FkZF90ZXN0X3N1aXRlKGN0cl9kcmJnKQorYWRkX3Rlc3Rfc3VpdGUoZGVidWcpCithZGRfdGVzdF9zdWl0ZShkZXMpCithZGRfdGVzdF9zdWl0ZShkaG0pCithZGRfdGVzdF9zdWl0ZShlY2RoKQorYWRkX3Rlc3Rfc3VpdGUoZWNkc2EpCithZGRfdGVzdF9zdWl0ZShlY2pwYWtlKQorYWRkX3Rlc3Rfc3VpdGUoZWNwKQorYWRkX3Rlc3Rfc3VpdGUoZW50cm9weSkKK2FkZF90ZXN0X3N1aXRlKGVycm9yKQorYWRkX3Rlc3Rfc3VpdGUoZ2NtIGdjbS5hZXMxMjhfZW4pCithZGRfdGVzdF9zdWl0ZShnY20gZ2NtLmFlczE5Ml9lbikKK2FkZF90ZXN0X3N1aXRlKGdjbSBnY20uYWVzMjU2X2VuKQorYWRkX3Rlc3Rfc3VpdGUoZ2NtIGdjbS5hZXMxMjhfZGUpCithZGRfdGVzdF9zdWl0ZShnY20gZ2NtLmFlczE5Ml9kZSkKK2FkZF90ZXN0X3N1aXRlKGdjbSBnY20uYWVzMjU2X2RlKQorYWRkX3Rlc3Rfc3VpdGUoZ2NtIGdjbS5jYW1lbGxpYSkKK2FkZF90ZXN0X3N1aXRlKGhtYWNfZHJiZyBobWFjX2RyYmcubWlzYykKK2FkZF90ZXN0X3N1aXRlKGhtYWNfZHJiZyBobWFjX2RyYmcubm9fcmVzZWVkKQorYWRkX3Rlc3Rfc3VpdGUoaG1hY19kcmJnIGhtYWNfZHJiZy5ub3ByKQorYWRkX3Rlc3Rfc3VpdGUoaG1hY19kcmJnIGhtYWNfZHJiZy5wcikKK2FkZF90ZXN0X3N1aXRlKG1kKQorYWRkX3Rlc3Rfc3VpdGUobWR4KQorYWRkX3Rlc3Rfc3VpdGUobWVtb3J5X2J1ZmZlcl9hbGxvYykKK2FkZF90ZXN0X3N1aXRlKG1waSkKK2FkZF90ZXN0X3N1aXRlKHBlbSkKK2FkZF90ZXN0X3N1aXRlKHBrY3MxX3YxNSkKK2FkZF90ZXN0X3N1aXRlKHBrY3MxX3YyMSkKK2FkZF90ZXN0X3N1aXRlKHBrY3M1KQorYWRkX3Rlc3Rfc3VpdGUocGspCithZGRfdGVzdF9zdWl0ZShwa3BhcnNlKQorYWRkX3Rlc3Rfc3VpdGUocGt3cml0ZSkKK2FkZF90ZXN0X3N1aXRlKHNoYXgpCithZGRfdGVzdF9zdWl0ZShzc2wpCithZGRfdGVzdF9zdWl0ZSh0aW1pbmcpCithZGRfdGVzdF9zdWl0ZShyc2EpCithZGRfdGVzdF9zdWl0ZSh2ZXJzaW9uKQorYWRkX3Rlc3Rfc3VpdGUoeHRlYSkKK2FkZF90ZXN0X3N1aXRlKHg1MDlwYXJzZSkKK2FkZF90ZXN0X3N1aXRlKHg1MDl3cml0ZSkKKworIyBNYWtlIGRhdGFfZmlsZXMgYXZhaWxhYmxlIGluIGFuIG91dC1vZi1zb3VyY2UgYnVpbGQKK2lmIChOT1QgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IFNUUkVRVUFMICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKKyAgICAjIEdldCBPUyBkZXBlbmRlbnQgcGF0aCB0byB1c2UgaW4gYGV4ZWN1dGVfcHJvY2Vzc2AKKyAgICBmaWxlKFRPX05BVElWRV9QQVRIICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZGF0YV9maWxlcyIgbGluaykKKyAgICBmaWxlKFRPX05BVElWRV9QQVRIICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGF0YV9maWxlcyIgdGFyZ2V0KQorCisgICAgaWYgKE5PVCBFWElTVFMgJHtsaW5rfSkKKyAgICAgICAgaWYgKENNQUtFX0hPU1RfVU5JWCkKKyAgICAgICAgICAgIHNldChjb21tYW5kIGxuIC1zICR7dGFyZ2V0fSAke2xpbmt9KQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgIHNldChjb21tYW5kIGNtZC5leGUgL2MgbWtsaW5rIC9kICR7bGlua30gJHt0YXJnZXR9KQorICAgICAgICBlbmRpZigpCisKKyAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtjb21tYW5kfQorICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfVkFSSUFCTEUgb3V0cHV0KQorCisgICAgICAgIGlmIChOT1QgJHtyZXN1bHR9IEVRVUFMIDApCisgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgY3JlYXRlIHN5bWJvbGljIGxpbmsgZm9yOiAke3RhcmdldH0gLS0+ICR7b3V0cHV0fSIpCisgICAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCitlbmRpZigpCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9EZXNjcmlwdGlvbnMudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL0Rlc2NyaXB0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxM2JiMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9EZXNjcmlwdGlvbnMudHh0CkBAIC0wLDAgKzEsMjIgQEAKK3Rlc3Rfc3VpdGVzCisgICAgVGhlIHZhcmlvdXMgJ3Rlc3Rfc3VpdGVfWFhYJyBwcm9ncmFtcyBmcm9tIHRoZSAndGVzdHMnIGRpcmVjdG9yeSwgZXhlY3V0ZWQKKyAgICB1c2luZyAnbWFrZSBjaGVjaycgKFVuaXggbWFrZSkgb3IgJ21ha2UgdGVzdCcgKENtYWtlKSwgaW5jbHVkZSB0ZXN0IGNhc2VzCisgICAgKHJlZmVyZW5jZSB0ZXN0IHZlY3RvcnMsIHNhbml0eSBjaGVja3MsIG1hbGZvcm1lZCBpbnB1dCBmb3IgcGFyc2luZworICAgIGZ1bmN0aW9ucywgZXRjLikgZm9yIGFsbCBtb2R1bGVzIGV4Y2VwdCB0aGUgU1NMIG1vZHVsZXMuCisKK3NlbGZ0ZXN0cworICAgIFRoZSAncHJvZ3JhbXMvdGVzdC9zZWxmdGVzdCcgcHJvZ3JhbSBydW5zIHRoZSAnWFhYX3NlbGZfdGVzdCgpJyBmdW5jdGlvbnMKKyAgICBvZiBlYWNoIGluZGl2aWR1YWwgbW9kdWxlLiBNb3N0IG9mIHRoZW0gYXJlIGluY2x1ZGVkIGluIHRoZSByZXNwZWN0aXZlCisgICAgdGVzdCBzdWl0ZSwgYnV0IHNvbWUgc2xvd2VyIG9uZXMgYXJlIG9ubHkgaW5jbHVkZWQgaGVyZS4KKworY29tcGF0CisgICAgVGhlICd0ZXN0cy9jb21wYXQuc2gnIHNjcmlwdCBjaGVja3MgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIE9wZW5TU0wgYW5kCisgICAgR251VExTIChhbmQgb3Vyc2VsdmVzISkgZm9yIGV2ZXJ5IGNvbW1vbiBjaXBoZXJzdWl0ZSwgaW4gZXZlcnkgVExTCisgICAgdmVyc2lvbiwgYm90aCB3YXlzIChjbGllbnQvc2VydmVyKSwgdXNpbmcgY2xpZW50IGF1dGhlbnRpY2F0aW9uIG9yIG5vdC4KKyAgICBGb3IgZWFjaCBjaXBoZXJzdWl0ZS92ZXJzaW9uL3NpZGUvYXV0aG1vZGUgaXQgcGVyZm9ybXMgYSBmdWxsIGhhbmRzaGFrZQorICAgIGFuZCBhIHNtYWxsIGRhdGEgZXhjaGFuZ2UuCisKK3NzbF9vcHQKKyAgICBUaGUgJ3Rlc3RzL3NzbC1vcHQuc2gnIHNjcmlwdCBjaGVja3MgdmFyaW91cyBvcHRpb25zIGFuZC9vciBvcGVyYXRpb25zIG5vdAorICAgIGNvdmVyZWQgYnkgY29tcGF0LnNoOiBzZXNzaW9uIHJlc3VtcHRpb24gKHVzaW5nIHNlc3Npb24gY2FjaGUgb3IgdGlja2V0cyksCisgICAgcmVuZWdvdGlhdGlvbiwgU05JLCBvdGhlciBleHRlbnNpb25zLCBldGMuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvTWFrZWZpbGUgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc4N2YyNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9NYWtlZmlsZQpAQCAtMCwwICsxLDQ1MCBAQAorCisjIFRvIGNvbXBpbGUgb24gU3VuT1M6IGFkZCAiLWxzb2NrZXQgLWxuc2wiIHRvIExERkxBR1MKKyMgVG8gY29tcGlsZSB3aXRoIFBLQ1MxMTogYWRkICItbHBrY3MxMS1oZWxwZXIiIHRvIExERkxBR1MKKworQ0ZMQUdTCT89IC1PMgorV0FSTklOR19DRkxBR1MgPz0gLVdhbGwgLVcgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgLVduby11bnVzZWQtZnVuY3Rpb24gLVduby11bnVzZWQtdmFsdWUKK0xERkxBR1MgPz0KKworTE9DQUxfQ0ZMQUdTID0gJChXQVJOSU5HX0NGTEFHUykgLUkuLi9pbmNsdWRlIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKK0xPQ0FMX0xERkxBR1MgPSAtTC4uL2xpYnJhcnkgCQkJXAorCQktbG1iZWR0bHMkKFNIQVJFRF9TVUZGSVgpCVwKKwkJLWxtYmVkeDUwOSQoU0hBUkVEX1NVRkZJWCkJXAorCQktbG1iZWRjcnlwdG8kKFNIQVJFRF9TVUZGSVgpCisKK2lmbmRlZiBTSEFSRUQKK0RFUD0uLi9saWJyYXJ5L2xpYm1iZWRjcnlwdG8uYSAuLi9saWJyYXJ5L2xpYm1iZWR4NTA5LmEgLi4vbGlicmFyeS9saWJtYmVkdGxzLmEKK2Vsc2UKK0RFUD0uLi9saWJyYXJ5L2xpYm1iZWRjcnlwdG8uJChETEVYVCkgLi4vbGlicmFyeS9saWJtYmVkeDUwOS4kKERMRVhUKSAuLi9saWJyYXJ5L2xpYm1iZWR0bHMuJChETEVYVCkKK2VuZGlmCisKK2lmZGVmIERFQlVHCitMT0NBTF9DRkxBR1MgKz0gLWczCitlbmRpZgorCisjIGlmIHdlJ3JlIHJ1bm5pbmcgb24gV2luZG93cywgYnVpbGQgZm9yIFdpbmRvd3MKK2lmZGVmIFdJTkRPV1MKK1dJTkRPV1NfQlVJTEQ9MQorZW5kaWYKKworaWZkZWYgV0lORE9XU19CVUlMRAorRExFWFQ9ZGxsCitFWEVYVD0uZXhlCitMT0NBTF9MREZMQUdTICs9IC1sd3MyXzMyCitpZmRlZiBTSEFSRUQKK1NIQVJFRF9TVUZGSVg9LiQoRExFWFQpCitlbmRpZgorZWxzZQorRExFWFQ9c28KK0VYRVhUPQorU0hBUkVEX1NVRkZJWD0KK2VuZGlmCisKKyMgWmxpYiBzaGFyZWQgbGlicmFyeSBleHRlbnNpb25zOgoraWZkZWYgWkxJQgorTE9DQUxfTERGTEFHUyArPSAtbHoKK2VuZGlmCisKK0FQUFMgPQl0ZXN0X3N1aXRlX2Flcy5lY2IkKEVYRVhUKQl0ZXN0X3N1aXRlX2Flcy5jYmMkKEVYRVhUKQlcCisJdGVzdF9zdWl0ZV9hZXMuY2ZiJChFWEVYVCkJdGVzdF9zdWl0ZV9hZXMucmVzdCQoRVhFWFQpCVwKKwl0ZXN0X3N1aXRlX2FyYzQkKEVYRVhUKQkJdGVzdF9zdWl0ZV9hc24xd3JpdGUkKEVYRVhUKQlcCisJdGVzdF9zdWl0ZV9iYXNlNjQkKEVYRVhUKQl0ZXN0X3N1aXRlX2Jsb3dmaXNoJChFWEVYVCkJXAorCXRlc3Rfc3VpdGVfY2FtZWxsaWEkKEVYRVhUKQl0ZXN0X3N1aXRlX2NjbSQoRVhFWFQpCQlcCisJdGVzdF9zdWl0ZV9jbWFjJChFWEVYVCkJCQkJCQlcCisJdGVzdF9zdWl0ZV9jaXBoZXIuYWVzJChFWEVYVCkJCQkJCVwKKwl0ZXN0X3N1aXRlX2NpcGhlci5hcmM0JChFWEVYVCkJdGVzdF9zdWl0ZV9jaXBoZXIuY2NtJChFWEVYVCkJXAorCXRlc3Rfc3VpdGVfY2lwaGVyLmdjbSQoRVhFWFQpCQkJCQlcCisJdGVzdF9zdWl0ZV9jaXBoZXIuYmxvd2Zpc2gkKEVYRVhUKQkJCQlcCisJdGVzdF9zdWl0ZV9jaXBoZXIuY2FtZWxsaWEkKEVYRVhUKQkJCQlcCisJdGVzdF9zdWl0ZV9jaXBoZXIuZGVzJChFWEVYVCkJdGVzdF9zdWl0ZV9jaXBoZXIubnVsbCQoRVhFWFQpCVwKKwl0ZXN0X3N1aXRlX2NpcGhlci5wYWRkaW5nJChFWEVYVCkJCQkJXAorCXRlc3Rfc3VpdGVfY3RyX2RyYmckKEVYRVhUKQl0ZXN0X3N1aXRlX2RlYnVnJChFWEVYVCkJXAorCXRlc3Rfc3VpdGVfZGVzJChFWEVYVCkJCXRlc3Rfc3VpdGVfZGhtJChFWEVYVCkJCVwKKwl0ZXN0X3N1aXRlX2VjZGgkKEVYRVhUKQkJdGVzdF9zdWl0ZV9lY2RzYSQoRVhFWFQpCVwKKwl0ZXN0X3N1aXRlX2VjanBha2UkKEVYRVhUKQl0ZXN0X3N1aXRlX2VjcCQoRVhFWFQpCQlcCisJdGVzdF9zdWl0ZV9lcnJvciQoRVhFWFQpCXRlc3Rfc3VpdGVfZW50cm9weSQoRVhFWFQpCVwKKwl0ZXN0X3N1aXRlX2djbS5hZXMxMjhfZGUkKEVYRVhUKQkJCQlcCisJdGVzdF9zdWl0ZV9nY20uYWVzMTkyX2RlJChFWEVYVCkJCQkJXAorCXRlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9kZSQoRVhFWFQpCQkJCVwKKwl0ZXN0X3N1aXRlX2djbS5hZXMxMjhfZW4kKEVYRVhUKQkJCQlcCisJdGVzdF9zdWl0ZV9nY20uYWVzMTkyX2VuJChFWEVYVCkJCQkJXAorCXRlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9lbiQoRVhFWFQpCQkJCVwKKwl0ZXN0X3N1aXRlX2djbS5jYW1lbGxpYSQoRVhFWFQpCQkJCQlcCisJdGVzdF9zdWl0ZV9obWFjX2RyYmcubWlzYyQoRVhFWFQpCQkJCVwKKwl0ZXN0X3N1aXRlX2htYWNfZHJiZy5ub19yZXNlZWQkKEVYRVhUKQkJCQlcCisJdGVzdF9zdWl0ZV9obWFjX2RyYmcubm9wciQoRVhFWFQpCQkJCVwKKwl0ZXN0X3N1aXRlX2htYWNfZHJiZy5wciQoRVhFWFQpCQkJCQlcCisJdGVzdF9zdWl0ZV9tZCQoRVhFWFQpCQl0ZXN0X3N1aXRlX21keCQoRVhFWFQpCQlcCisJdGVzdF9zdWl0ZV9tZW1vcnlfYnVmZmVyX2FsbG9jJChFWEVYVCkJCQkJXAorCXRlc3Rfc3VpdGVfbXBpJChFWEVYVCkJCQkJCQlcCisJdGVzdF9zdWl0ZV9wZW0kKEVYRVhUKQkJCXRlc3Rfc3VpdGVfcGtjczFfdjE1JChFWEVYVCkJXAorCXRlc3Rfc3VpdGVfcGtjczFfdjIxJChFWEVYVCkJdGVzdF9zdWl0ZV9wa2NzNSQoRVhFWFQpCVwKKwl0ZXN0X3N1aXRlX3BrcGFyc2UkKEVYRVhUKQl0ZXN0X3N1aXRlX3Brd3JpdGUkKEVYRVhUKQlcCisJdGVzdF9zdWl0ZV9wayQoRVhFWFQpCQkJCQkJXAorCXRlc3Rfc3VpdGVfcnNhJChFWEVYVCkJCXRlc3Rfc3VpdGVfc2hheCQoRVhFWFQpCQlcCisJdGVzdF9zdWl0ZV9zc2wkKEVYRVhUKQkJdGVzdF9zdWl0ZV90aW1pbmckKEVYRVhUKQkJCVwKKwl0ZXN0X3N1aXRlX3g1MDlwYXJzZSQoRVhFWFQpCXRlc3Rfc3VpdGVfeDUwOXdyaXRlJChFWEVYVCkJXAorCXRlc3Rfc3VpdGVfeHRlYSQoRVhFWFQpCQl0ZXN0X3N1aXRlX3ZlcnNpb24kKEVYRVhUKQorCisuU0lMRU5UOgorCisuUEhPTlk6IGFsbCBjaGVjayB0ZXN0IGNsZWFuCisKK2FsbDogJChBUFBTKQorCiskKERFUCk6CisJJChNQUtFKSAtQyAuLi9saWJyYXJ5CisKKyMgaW52b2tlIHBlcmwgZXhwbGljaXRseSBmb3IgdGhlIHNha2Ugb2YgbWluZ3czMi1tYWtlCisKK3Rlc3Rfc3VpdGVfYWVzLmVjYi5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2Flcy5lY2IuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfYWVzIHRlc3Rfc3VpdGVfYWVzLmVjYgorCit0ZXN0X3N1aXRlX2Flcy5jYmMuYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2Flcy5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuY2JjLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2FlcyB0ZXN0X3N1aXRlX2Flcy5jYmMKKwordGVzdF9zdWl0ZV9hZXMuY2ZiLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmNmYi5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9hZXMgdGVzdF9zdWl0ZV9hZXMuY2ZiCisKK3Rlc3Rfc3VpdGVfYWVzLnJlc3QuYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2Flcy5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9hZXMucmVzdC5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9hZXMgdGVzdF9zdWl0ZV9hZXMucmVzdAorCit0ZXN0X3N1aXRlX2NpcGhlci5hZXMuYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuYWVzLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2NpcGhlciB0ZXN0X3N1aXRlX2NpcGhlci5hZXMKKwordGVzdF9zdWl0ZV9jaXBoZXIuYXJjNC5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5hcmM0LmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2NpcGhlciB0ZXN0X3N1aXRlX2NpcGhlci5hcmM0CisKK3Rlc3Rfc3VpdGVfY2lwaGVyLmNjbS5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5jY20uZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfY2lwaGVyIHRlc3Rfc3VpdGVfY2lwaGVyLmNjbQorCit0ZXN0X3N1aXRlX2NpcGhlci5nY20uYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuZ2NtLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2NpcGhlciB0ZXN0X3N1aXRlX2NpcGhlci5nY20KKwordGVzdF9zdWl0ZV9jaXBoZXIuYmxvd2Zpc2guYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuYmxvd2Zpc2guZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfY2lwaGVyIHRlc3Rfc3VpdGVfY2lwaGVyLmJsb3dmaXNoCisKK3Rlc3Rfc3VpdGVfY2lwaGVyLmNhbWVsbGlhLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmNhbWVsbGlhLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2NpcGhlciB0ZXN0X3N1aXRlX2NpcGhlci5jYW1lbGxpYQorCit0ZXN0X3N1aXRlX2NpcGhlci5kZXMuYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuZGVzLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2NpcGhlciB0ZXN0X3N1aXRlX2NpcGhlci5kZXMKKwordGVzdF9zdWl0ZV9jaXBoZXIubnVsbC5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5udWxsLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2NpcGhlciB0ZXN0X3N1aXRlX2NpcGhlci5udWxsCisKK3Rlc3Rfc3VpdGVfY2lwaGVyLnBhZGRpbmcuYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIucGFkZGluZy5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9jaXBoZXIgdGVzdF9zdWl0ZV9jaXBoZXIucGFkZGluZworCit0ZXN0X3N1aXRlX2djbS5hZXMxMjhfZGUuYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2djbS5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTI4X2RlLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2djbSB0ZXN0X3N1aXRlX2djbS5hZXMxMjhfZGUKKwordGVzdF9zdWl0ZV9nY20uYWVzMTkyX2RlLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9nY20uZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczE5Ml9kZS5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9nY20gdGVzdF9zdWl0ZV9nY20uYWVzMTkyX2RlCisKK3Rlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9kZS5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMyNTZfZGUuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfZ2NtIHRlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9kZQorCit0ZXN0X3N1aXRlX2djbS5hZXMxMjhfZW4uYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2djbS5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTI4X2VuLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2djbSB0ZXN0X3N1aXRlX2djbS5hZXMxMjhfZW4KKwordGVzdF9zdWl0ZV9nY20uYWVzMTkyX2VuLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9nY20uZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczE5Ml9lbi5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9nY20gdGVzdF9zdWl0ZV9nY20uYWVzMTkyX2VuCisKK3Rlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9lbi5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMyNTZfZW4uZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfZ2NtIHRlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9lbgorCit0ZXN0X3N1aXRlX2djbS5jYW1lbGxpYS5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2djbS5jYW1lbGxpYS5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9nY20gdGVzdF9zdWl0ZV9nY20uY2FtZWxsaWEKKwordGVzdF9zdWl0ZV9obWFjX2RyYmcubWlzYy5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5taXNjLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2htYWNfZHJiZyB0ZXN0X3N1aXRlX2htYWNfZHJiZy5taXNjCisKK3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm5vX3Jlc2VlZC5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5ub19yZXNlZWQuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfaG1hY19kcmJnIHRlc3Rfc3VpdGVfaG1hY19kcmJnLm5vX3Jlc2VlZAorCit0ZXN0X3N1aXRlX2htYWNfZHJiZy5ub3ByLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcuZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm5vcHIuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfaG1hY19kcmJnIHRlc3Rfc3VpdGVfaG1hY19kcmJnLm5vcHIKKwordGVzdF9zdWl0ZV9obWFjX2RyYmcucHIuYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcucHIuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfaG1hY19kcmJnIHRlc3Rfc3VpdGVfaG1hY19kcmJnLnByCisKKyUuYyA6IHN1aXRlcy8lLmZ1bmN0aW9uIHN1aXRlcy8lLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyAkKiAkKgorCit0ZXN0X3N1aXRlX2Flcy5lY2IkKEVYRVhUKTogdGVzdF9zdWl0ZV9hZXMuZWNiLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2Flcy5jYmMkKEVYRVhUKTogdGVzdF9zdWl0ZV9hZXMuY2JjLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2Flcy5jZmIkKEVYRVhUKTogdGVzdF9zdWl0ZV9hZXMuY2ZiLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2Flcy5yZXN0JChFWEVYVCk6IHRlc3Rfc3VpdGVfYWVzLnJlc3QuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfYXJjNCQoRVhFWFQpOiB0ZXN0X3N1aXRlX2FyYzQuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfYXNuMXdyaXRlJChFWEVYVCk6IHRlc3Rfc3VpdGVfYXNuMXdyaXRlLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2Jhc2U2NCQoRVhFWFQpOiB0ZXN0X3N1aXRlX2Jhc2U2NC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9ibG93ZmlzaCQoRVhFWFQpOiB0ZXN0X3N1aXRlX2Jsb3dmaXNoLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2NhbWVsbGlhJChFWEVYVCk6IHRlc3Rfc3VpdGVfY2FtZWxsaWEuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfY2NtJChFWEVYVCk6IHRlc3Rfc3VpdGVfY2NtLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2NtYWMkKEVYRVhUKTogdGVzdF9zdWl0ZV9jbWFjLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2NpcGhlci5hZXMkKEVYRVhUKTogdGVzdF9zdWl0ZV9jaXBoZXIuYWVzLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2NpcGhlci5hcmM0JChFWEVYVCk6IHRlc3Rfc3VpdGVfY2lwaGVyLmFyYzQuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfY2lwaGVyLmNjbSQoRVhFWFQpOiB0ZXN0X3N1aXRlX2NpcGhlci5jY20uYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfY2lwaGVyLmdjbSQoRVhFWFQpOiB0ZXN0X3N1aXRlX2NpcGhlci5nY20uYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfY2lwaGVyLmJsb3dmaXNoJChFWEVYVCk6IHRlc3Rfc3VpdGVfY2lwaGVyLmJsb3dmaXNoLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2NpcGhlci5jYW1lbGxpYSQoRVhFWFQpOiB0ZXN0X3N1aXRlX2NpcGhlci5jYW1lbGxpYS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9jaXBoZXIuZGVzJChFWEVYVCk6IHRlc3Rfc3VpdGVfY2lwaGVyLmRlcy5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9jaXBoZXIubnVsbCQoRVhFWFQpOiB0ZXN0X3N1aXRlX2NpcGhlci5udWxsLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2NpcGhlci5wYWRkaW5nJChFWEVYVCk6IHRlc3Rfc3VpdGVfY2lwaGVyLnBhZGRpbmcuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfY3RyX2RyYmckKEVYRVhUKTogdGVzdF9zdWl0ZV9jdHJfZHJiZy5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9kZXMkKEVYRVhUKTogdGVzdF9zdWl0ZV9kZXMuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZGhtJChFWEVYVCk6IHRlc3Rfc3VpdGVfZGhtLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2VjZGgkKEVYRVhUKTogdGVzdF9zdWl0ZV9lY2RoLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2VjZHNhJChFWEVYVCk6IHRlc3Rfc3VpdGVfZWNkc2EuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZWNqcGFrZSQoRVhFWFQpOiB0ZXN0X3N1aXRlX2VjanBha2UuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZWNwJChFWEVYVCk6IHRlc3Rfc3VpdGVfZWNwLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2VudHJvcHkkKEVYRVhUKTogdGVzdF9zdWl0ZV9lbnRyb3B5LmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2Vycm9yJChFWEVYVCk6IHRlc3Rfc3VpdGVfZXJyb3IuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZ2NtLmFlczEyOF9kZSQoRVhFWFQpOiB0ZXN0X3N1aXRlX2djbS5hZXMxMjhfZGUuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZ2NtLmFlczE5Ml9kZSQoRVhFWFQpOiB0ZXN0X3N1aXRlX2djbS5hZXMxOTJfZGUuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9kZSQoRVhFWFQpOiB0ZXN0X3N1aXRlX2djbS5hZXMyNTZfZGUuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZ2NtLmFlczEyOF9lbiQoRVhFWFQpOiB0ZXN0X3N1aXRlX2djbS5hZXMxMjhfZW4uYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZ2NtLmFlczE5Ml9lbiQoRVhFWFQpOiB0ZXN0X3N1aXRlX2djbS5hZXMxOTJfZW4uYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9lbiQoRVhFWFQpOiB0ZXN0X3N1aXRlX2djbS5hZXMyNTZfZW4uYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZ2NtLmNhbWVsbGlhJChFWEVYVCk6IHRlc3Rfc3VpdGVfZ2NtLmNhbWVsbGlhLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2htYWNfZHJiZy5taXNjJChFWEVYVCk6IHRlc3Rfc3VpdGVfaG1hY19kcmJnLm1pc2MuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm5vX3Jlc2VlZCQoRVhFWFQpOiB0ZXN0X3N1aXRlX2htYWNfZHJiZy5ub19yZXNlZWQuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm5vcHIkKEVYRVhUKTogdGVzdF9zdWl0ZV9obWFjX2RyYmcubm9wci5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9obWFjX2RyYmcucHIkKEVYRVhUKTogdGVzdF9zdWl0ZV9obWFjX2RyYmcucHIuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfbWQkKEVYRVhUKTogdGVzdF9zdWl0ZV9tZC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9tZHgkKEVYRVhUKTogdGVzdF9zdWl0ZV9tZHguYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfbWVtb3J5X2J1ZmZlcl9hbGxvYyQoRVhFWFQpOiB0ZXN0X3N1aXRlX21lbW9yeV9idWZmZXJfYWxsb2MuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfbXBpJChFWEVYVCk6IHRlc3Rfc3VpdGVfbXBpLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX3BlbSQoRVhFWFQpOiB0ZXN0X3N1aXRlX3BlbS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9wa2NzMV92MTUkKEVYRVhUKTogdGVzdF9zdWl0ZV9wa2NzMV92MTUuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfcGtjczFfdjIxJChFWEVYVCk6IHRlc3Rfc3VpdGVfcGtjczFfdjIxLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX3BrY3M1JChFWEVYVCk6IHRlc3Rfc3VpdGVfcGtjczUuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfcGtwYXJzZSQoRVhFWFQpOiB0ZXN0X3N1aXRlX3BrcGFyc2UuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfcGt3cml0ZSQoRVhFWFQpOiB0ZXN0X3N1aXRlX3Brd3JpdGUuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfcGskKEVYRVhUKTogdGVzdF9zdWl0ZV9way5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9yc2EkKEVYRVhUKTogdGVzdF9zdWl0ZV9yc2EuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfc2hheCQoRVhFWFQpOiB0ZXN0X3N1aXRlX3NoYXguYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfc3NsJChFWEVYVCk6IHRlc3Rfc3VpdGVfc3NsLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX3RpbWluZyQoRVhFWFQpOiB0ZXN0X3N1aXRlX3RpbWluZy5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV94NTA5cGFyc2UkKEVYRVhUKTogdGVzdF9zdWl0ZV94NTA5cGFyc2UuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfeDUwOXdyaXRlJChFWEVYVCk6IHRlc3Rfc3VpdGVfeDUwOXdyaXRlLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX3h0ZWEkKEVYRVhUKTogdGVzdF9zdWl0ZV94dGVhLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2RlYnVnJChFWEVYVCk6IHRlc3Rfc3VpdGVfZGVidWcuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfdmVyc2lvbiQoRVhFWFQpOiB0ZXN0X3N1aXRlX3ZlcnNpb24uYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK2NsZWFuOgoraWZuZGVmIFdJTkRPV1MKKwlybSAtZiAkKEFQUFMpICouYworZWxzZQorCWRlbCAvUSAvRiAqLmMgKi5leGUKK2VuZGlmCisKK2NoZWNrOiAkKEFQUFMpCisJcGVybCBzY3JpcHRzL3J1bi10ZXN0LXN1aXRlcy5wbAorCit0ZXN0OiBjaGVjawpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2NvbXBhdC5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9jb21wYXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWE4MTI0MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9jb21wYXQuc2gKQEAgLTAsMCArMSwxMjQ3IEBACisjIS9iaW4vc2gKKworIyBjb21wYXQuc2gKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBUZXN0IGludGVyb3BlcmJpbGl0eSB3aXRoIE9wZW5TU0wsIEdudVRMUyBhcyB3ZWxsIGFzIGl0c2VsZi4KKyMKKyMgQ2hlY2sgZWFjaCBjb21tb24gY2lwaGVyc3VpdGUsIHdpdGggZWFjaCB2ZXJzaW9uLCBib3RoIHdheXMgKGNsaWVudC9zZXJ2ZXIpLAorIyB3aXRoIGFuZCB3aXRob3V0IGNsaWVudCBhdXRoZW50aWNhdGlvbi4KKworc2V0IC11CisKKyMgaW5pdGlhbGlzZSBjb3VudGVycworVEVTVFM9MAorRkFJTEVEPTAKK1NLSVBQRUQ9MAorU1JWTUVNPTAKKworIyBkZWZhdWx0IGNvbW1hbmRzLCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBlbnZpcm9ubWVudAorOiAke01fU1JWOj0uLi9wcm9ncmFtcy9zc2wvc3NsX3NlcnZlcjJ9Cis6ICR7TV9DTEk6PS4uL3Byb2dyYW1zL3NzbC9zc2xfY2xpZW50Mn0KKzogJHtPUEVOU1NMX0NNRDo9b3BlbnNzbH0gIyBPUEVOU1NMIHdvdWxkIGNvbmZsaWN0IHdpdGggdGhlIGJ1aWxkIHN5c3RlbQorOiAke0dOVVRMU19DTEk6PWdudXRscy1jbGl9Cis6ICR7R05VVExTX1NFUlY6PWdudXRscy1zZXJ2fQorCisjIGRvIHdlIGhhdmUgYSByZWNlbnQgZW5vdWdoIEdudVRMUz8KK2lmICggd2hpY2ggJEdOVVRMU19DTEkgJiYgd2hpY2ggJEdOVVRMU19TRVJWICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgR19WRVI9IiQoICRHTlVUTFNfQ0xJIC0tdmVyc2lvbiB8IGhlYWQgLW4xICkiCisgICAgaWYgZWNobyAiJEdfVkVSIiB8IGdyZXAgJ0BWRVJTSU9OQCcgPiAvZGV2L251bGw7IHRoZW4gIyBnaXQgdmVyc2lvbgorICAgICAgICBQRUVSX0dOVVRMUz0iIEdudVRMUyIKKyAgICBlbHNlCisgICAgICAgIGV2YWwgJCggZWNobyAkR19WRVIgfCBzZWQgJ3MvLiogXChbMC05XSpcKVwuXChbMC05XVwpKlwuXChbMC05XSpcKSQvTUFKT1I9IlwxIiBNSU5PUj0iXDIiIFBBVENIPSJcMyIvJyApCisgICAgICAgIGlmIFsgJE1BSk9SIC1sdCAzIC1vIFwKKyAgICAgICAgICAgIFwoICRNQUpPUiAtZXEgMyAtYSAkTUlOT1IgLWx0IDIgXCkgLW8gXAorICAgICAgICAgICAgXCggJE1BSk9SIC1lcSAzIC1hICRNSU5PUiAtZXEgMiAtYSAkUEFUQ0ggLWx0IDE1IFwpIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgUEVFUl9HTlVUTFM9IiIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUEVFUl9HTlVUTFM9IiBHbnVUTFMiCisgICAgICAgIGZpCisgICAgZmkKK2Vsc2UKKyAgICBQRUVSX0dOVVRMUz0iIgorZmkKKworIyBkZWZhdWx0IHZhbHVlcyBmb3Igb3B0aW9ucworTU9ERVM9InRsczEgdGxzMV8xIHRsczFfMiBkdGxzMSBkdGxzMV8yIgorVkVSSUZJRVM9Ik5PIFlFUyIKK1RZUEVTPSJFQ0RTQSBSU0EgUFNLIgorRklMVEVSPSIiCitFWENMVURFPSdOVUxMXHxERVMtQ0JDLVx8UkM0XHxBUkNGT1VSJyAjIGF2b2lkIHBsYWluIERFUyBidXQga2VlcCAzREVTLUVERS1DQkMgKG1iZWRUTFMpLCBERVMtQ0JDMyAoT3BlblNTTCkKK1ZFUkJPU0U9IiIKK01FTUNIRUNLPTAKK1BFRVJTPSJPcGVuU1NMJFBFRVJfR05VVExTIG1iZWRUTFMiCisKKyMgaGlkZGVuIG9wdGlvbjogc2tpcCBEVExTIHdpdGggT3BlblNTTAorIyAodHJhdmlzIENJIGhhcyBhIHZlcnNpb24gdGhhdCBkb2Vzbid0IHdvcmsgZm9yIHVzKQorOiAke09TU0xfTk9fRFRMUzo9MH0KKworcHJpbnRfdXNhZ2UoKSB7CisgICAgZWNobyAiVXNhZ2U6ICQwIgorICAgIHByaW50ZiAiICAtaHwtLWhlbHBcdFByaW50IHRoaXMgaGVscC5cbiIKKyAgICBwcmludGYgIiAgLWZ8LS1maWx0ZXJcdE9ubHkgbWF0Y2hpbmcgY2lwaGVyc3VpdGVzIGFyZSB0ZXN0ZWQgKERlZmF1bHQ6ICckRklMVEVSJylcbiIKKyAgICBwcmludGYgIiAgLWV8LS1leGNsdWRlXHRNYXRjaGluZyBjaXBoZXJzdWl0ZXMgYXJlIGV4Y2x1ZGVkIChEZWZhdWx0OiAnJEVYQ0xVREUnKVxuIgorICAgIHByaW50ZiAiICAtbXwtLW1vZGVzXHRXaGljaCBtb2RlcyB0byBwZXJmb3JtIChEZWZhdWx0OiAnJE1PREVTJylcbiIKKyAgICBwcmludGYgIiAgLXR8LS10eXBlc1x0V2hpY2gga2V5IGV4Y2hhbmdlIHR5cGUgdG8gcGVyZm9ybSAoRGVmYXVsdDogJyRUWVBFUycpXG4iCisgICAgcHJpbnRmICIgIC1WfC0tdmVyaWZ5XHRXaGljaCB2ZXJpZmljYXRpb24gbW9kZXMgdG8gcGVyZm9ybSAoRGVmYXVsdDogJyRWRVJJRklFUycpXG4iCisgICAgcHJpbnRmICIgIC1wfC0tcGVlcnNcdFdoaWNoIHBlZXJzIHRvIHVzZSAoRGVmYXVsdDogJyRQRUVSUycpXG4iCisgICAgcHJpbnRmICIgICAgICAgICAgICBcdEFsc28gYXZhaWxhYmxlOiBHbnVUTFMgKG5lZWRzIHYzLjIuMTUgb3IgaGlnaGVyKVxuIgorICAgIHByaW50ZiAiICAtTXwtLW1lbWNoZWNrXHRDaGVjayBtZW1vcnkgbGVha3MgYW5kIGVycm9ycy5cbiIKKyAgICBwcmludGYgIiAgLXZ8LS12ZXJib3NlXHRTZXQgdmVyYm9zZSBvdXRwdXQuXG4iCit9CisKK2dldF9vcHRpb25zKCkgeworICAgIHdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KKyAgICAgICAgY2FzZSAiJDEiIGluCisgICAgICAgICAgICAtZnwtLWZpbHRlcikKKyAgICAgICAgICAgICAgICBzaGlmdDsgRklMVEVSPSQxCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIC1lfC0tZXhjbHVkZSkKKyAgICAgICAgICAgICAgICBzaGlmdDsgRVhDTFVERT0kMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtbXwtLW1vZGVzKQorICAgICAgICAgICAgICAgIHNoaWZ0OyBNT0RFUz0kMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtdHwtLXR5cGVzKQorICAgICAgICAgICAgICAgIHNoaWZ0OyBUWVBFUz0kMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtVnwtLXZlcmlmeSkKKyAgICAgICAgICAgICAgICBzaGlmdDsgVkVSSUZJRVM9JDEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgLXB8LS1wZWVycykKKyAgICAgICAgICAgICAgICBzaGlmdDsgUEVFUlM9JDEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgLXZ8LS12ZXJib3NlKQorICAgICAgICAgICAgICAgIFZFUkJPU0U9MQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtTXwtLW1lbWNoZWNrKQorICAgICAgICAgICAgICAgIE1FTUNIRUNLPTEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgLWh8LS1oZWxwKQorICAgICAgICAgICAgICAgIHByaW50X3VzYWdlCisgICAgICAgICAgICAgICAgZXhpdCAwCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgZWNobyAiVW5rbm93biBhcmd1bWVudDogJyQxJyIKKyAgICAgICAgICAgICAgICBwcmludF91c2FnZQorICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgc2hpZnQKKyAgICBkb25lCisKKyAgICAjIHNhbml0aXplIHNvbWUgb3B0aW9ucyAobW9kZXMgY2hlY2tlZCBsYXRlcikKKyAgICBWRVJJRklFUz0iJCggZWNobyAkVkVSSUZJRVMgfCB0ciBbYS16XSBbQS1aXSApIgorICAgIFRZUEVTPSIkKCBlY2hvICRUWVBFUyB8IHRyIFthLXpdIFtBLVpdICkiCit9CisKK2xvZygpIHsKKyAgaWYgWyAiWCIgIT0gIlgkVkVSQk9TRSIgXTsgdGhlbgorICAgIGVjaG8gIiIKKyAgICBlY2hvICIkQCIKKyAgZmkKK30KKworIyBpc19kdGxzIDxtb2RlPgoraXNfZHRscygpCit7CisgICAgdGVzdCAiJDEiID0gImR0bHMxIiAtbyAiJDEiID0gImR0bHMxXzIiCit9CisKKyMgbWlub3JfdmVyIDxtb2RlPgorbWlub3JfdmVyKCkKK3sKKyAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgc3NsMykKKyAgICAgICAgICAgIGVjaG8gMAorICAgICAgICAgICAgOzsKKyAgICAgICAgdGxzMSkKKyAgICAgICAgICAgIGVjaG8gMQorICAgICAgICAgICAgOzsKKyAgICAgICAgdGxzMV8xfGR0bHMxKQorICAgICAgICAgICAgZWNobyAyCisgICAgICAgICAgICA7OworICAgICAgICB0bHMxXzJ8ZHRsczFfMikKKyAgICAgICAgICAgIGVjaG8gMworICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIGVjaG8gImVycm9yOiBpbnZhbGlkIG1vZGU6ICRNT0RFIiA+JjIKKyAgICAgICAgICAgICMgZXhpdGluZyBpcyBubyBnb29kIGhlcmUsIHR5cGljYWxseSBjYWxsZWQgaW4gYSBzdWJzaGVsbAorICAgICAgICAgICAgZWNobyAtMQorICAgIGVzYWMKK30KKworZmlsdGVyKCkKK3sKKyAgTElTVD0iJDEiCisgIE5FV19MSVNUPSIiCisKKyAgaWYgaXNfZHRscyAiJE1PREUiOyB0aGVuCisgICAgICBFWENMTU9ERT0iJEVYQ0xVREUiJ1x8UkM0XHxBUkNGT1VSJworICBlbHNlCisgICAgICBFWENMTU9ERT0iJEVYQ0xVREUiCisgIGZpCisKKyAgZm9yIGkgaW4gJExJU1Q7CisgIGRvCisgICAgTkVXX0xJU1Q9IiRORVdfTElTVCAkKCBlY2hvICIkaSIgfCBncmVwICIkRklMVEVSIiB8IGdyZXAgLXYgIiRFWENMTU9ERSIgKSIKKyAgZG9uZQorCisgICMgbm9ybWFsaXplIHdoaXRlc3BhY2UKKyAgZWNobyAiJE5FV19MSVNUIiB8IHNlZCAtZSAncy9bWzpzcGFjZTpdXVtbOnNwYWNlOl1dKi8gL2cnIC1lICdzL14gLy8nIC1lICdzLyAkLy8nCit9CisKKyMgT3BlblNTTCAxLjAuMWggd2l0aCAtVmVyaWZ5IHdhbnRzIGEgQ2xpZW50Q2VydGlmaWNhdGUgbWVzc2FnZSBldmVuIGZvcgorIyBQU0sgY2lwaGVyc3VpdGVzIHdpdGggRFRMUywgd2hpY2ggaXMgaW5jb3JyZWN0LCBzbyBkaXNhYmxlIHRoZW0gZm9yIG5vdworY2hlY2tfb3BlbnNzbF9zZXJ2ZXJfYnVnKCkKK3sKKyAgICBpZiB0ZXN0ICJYJFZFUklGWSIgPSAiWFlFUyIgJiYgaXNfZHRscyAiJE1PREUiICYmIFwKKyAgICAgICAgZWNobyAiJDEiIHwgZ3JlcCAiXlRMUy1QU0siID4vZGV2L251bGw7CisgICAgdGhlbgorICAgICAgICBTS0lQX05FWFQ9IllFUyIKKyAgICBmaQorfQorCitmaWx0ZXJfY2lwaGVyc3VpdGVzKCkKK3sKKyAgICBpZiBbICJYIiAhPSAiWCRGSUxURVIiIC1vICJYIiAhPSAiWCRFWENMVURFIiBdOworICAgIHRoZW4KKyAgICAgICAgIyBDaXBoZXJzdWl0ZSBmb3IgbWJlZCBUTFMKKyAgICAgICAgTV9DSVBIRVJTPSQoIGZpbHRlciAiJE1fQ0lQSEVSUyIgKQorCisgICAgICAgICMgQ2lwaGVyc3VpdGUgZm9yIE9wZW5TU0wKKyAgICAgICAgT19DSVBIRVJTPSQoIGZpbHRlciAiJE9fQ0lQSEVSUyIgKQorCisgICAgICAgICMgQ2lwaGVyc3VpdGUgZm9yIEdudVRMUworICAgICAgICBHX0NJUEhFUlM9JCggZmlsdGVyICIkR19DSVBIRVJTIiApCisgICAgZmkKKworICAgICMgT3BlblNTTCAxLjAuMWggZG9lc24ndCBzdXBwb3J0IERUTFMgMS4yCisgICAgaWYgWyBgbWlub3JfdmVyICIkTU9ERSJgIC1nZSAzIF0gJiYgaXNfZHRscyAiJE1PREUiOyB0aGVuCisgICAgICAgIE9fQ0lQSEVSUz0iIgorICAgICAgICBjYXNlICIkUEVFUiIgaW4KKyAgICAgICAgICAgIFtPb11wZW4qKQorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBmaQorCisgICAgIyBGb3IgR251VExTIGNsaWVudCAtPiBtYmVkIFRMUyBzZXJ2ZXIsCisgICAgIyB3ZSBuZWVkIHRvIGZvcmNlIElQdjQgYnkgY29ubmVjdGluZyB0byAxMjcuMC4wLjEgYnV0IHRoZW4gYXV0aCBmYWlscworICAgIGlmIFsgIlgkVkVSSUZZIiA9ICJYWUVTIiBdICYmIGlzX2R0bHMgIiRNT0RFIjsgdGhlbgorICAgICAgICBHX0NJUEhFUlM9IiIKKyAgICBmaQorfQorCityZXNldF9jaXBoZXJzdWl0ZXMoKQoreworICAgIE1fQ0lQSEVSUz0iIgorICAgIE9fQ0lQSEVSUz0iIgorICAgIEdfQ0lQSEVSUz0iIgorfQorCithZGRfY29tbW9uX2NpcGhlcnN1aXRlcygpCit7CisgICAgY2FzZSAkVFlQRSBpbgorCisgICAgICAgICJFQ0RTQSIpCisgICAgICAgICAgICBpZiBbIGBtaW5vcl92ZXIgIiRNT0RFImAgLWd0IDAgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1OVUxMLVNIQSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1SQzQtMTI4LVNIQSAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgR19DSVBIRVJTPSIkR19DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1FQ0RTQTorTlVMTDorU0hBMSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1FQ0RTQTorQVJDRk9VUi0xMjg6K1NIQTEgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1FQ0RTQTorM0RFUy1DQkM6K1NIQTEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1FQ0RTQTorQUVTLTEyOC1DQkM6K1NIQTEgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1FQ0RTQTorQUVTLTI1Ni1DQkM6K1NIQTEgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBPX0NJUEhFUlM9IiRPX0NJUEhFUlMgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLUVDRFNBLU5VTEwtU0hBICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1FQ0RTQS1SQzQtU0hBICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESEUtRUNEU0EtREVTLUNCQzMtU0hBICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLUVDRFNBLUFFUzEyOC1TSEEgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1FQ0RTQS1BRVMyNTYtU0hBICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIFsgYG1pbm9yX3ZlciAiJE1PREUiYCAtZ2UgMyBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEzODQgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgR19DSVBIRVJTPSIkR19DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLUVDRFNBOitBRVMtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtRUNEU0E6K0FFUy0yNTYtQ0JDOitTSEEzODQgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1FQ0RTQTorQUVTLTEyOC1HQ006K0FFQUQgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLUVDRFNBOitBRVMtMjU2LUdDTTorQUVBRCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgT19DSVBIRVJTPSIkT19DSVBIRVJTICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1FQ0RTQS1BRVMxMjgtU0hBMjU2ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESEUtRUNEU0EtQUVTMjU2LVNIQTM4NCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLUVDRFNBLUFFUzEyOC1HQ00tU0hBMjU2ICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1FQ0RTQS1BRVMyNTYtR0NNLVNIQTM4NCAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIlJTQSIpCisgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQSAgIFwKKyAgICAgICAgICAgICAgICBUTFMtREhFLVJTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBICAgXAorICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILVJDNC0xMjgtTUQ1ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtTlVMTC1NRDUgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1OVUxMLVNIQSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgR19DSVBIRVJTPSIkR19DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK0RIRS1SU0E6K0FFUy0xMjgtQ0JDOitTSEExICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArREhFLVJTQTorQUVTLTI1Ni1DQkM6K1NIQTEgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtESEUtUlNBOitDQU1FTExJQS0xMjgtQ0JDOitTSEExICAgICAgICBcCisgICAgICAgICAgICAgICAgK0RIRS1SU0E6K0NBTUVMTElBLTI1Ni1DQkM6K1NIQTEgICAgICAgIFwKKyAgICAgICAgICAgICAgICArREhFLVJTQTorM0RFUy1DQkM6K1NIQTEgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtSU0E6K0FFUy0yNTYtQ0JDOitTSEExICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK1JTQTorQ0FNRUxMSUEtMjU2LUNCQzorU0hBMSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArUlNBOitBRVMtMTI4LUNCQzorU0hBMSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtSU0E6K0NBTUVMTElBLTEyOC1DQkM6K1NIQTEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK1JTQTorM0RFUy1DQkM6K1NIQTEgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArUlNBOitBUkNGT1VSLTEyODorU0hBMSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtSU0E6K0FSQ0ZPVVItMTI4OitNRDUgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK1JTQTorTlVMTDorTUQ1ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArUlNBOitOVUxMOitTSEExICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIE9fQ0lQSEVSUz0iJE9fQ0lQSEVSUyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBESEUtUlNBLUFFUzEyOC1TSEEgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBESEUtUlNBLUFFUzI1Ni1TSEEgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBESEUtUlNBLUNBTUVMTElBMTI4LVNIQSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBESEUtUlNBLUNBTUVMTElBMjU2LVNIQSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBFREgtUlNBLURFUy1DQkMzLVNIQSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBRVMyNTYtU0hBICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBDQU1FTExJQTI1Ni1TSEEgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBRVMxMjgtU0hBICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBDQU1FTExJQTEyOC1TSEEgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBERVMtQ0JDMy1TSEEgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBSQzQtU0hBICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBSQzQtTUQ1ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBOVUxMLU1ENSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBOVUxMLVNIQSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBpZiBbIGBtaW5vcl92ZXIgIiRNT0RFImAgLWd0IDAgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUlNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUlNBLVdJVEgtUkM0LTEyOC1TSEEgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUlNBLVdJVEgtTlVMTC1TSEEgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgR19DSVBIRVJTPSIkR19DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1SU0E6K0FFUy0xMjgtQ0JDOitTSEExICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1SU0E6K0FFUy0yNTYtQ0JDOitTSEExICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1SU0E6KzNERVMtQ0JDOitTSEExICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1SU0E6K0FSQ0ZPVVItMTI4OitTSEExICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1SU0E6K05VTEw6K1NIQTEgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBPX0NJUEhFUlM9IiRPX0NJUEhFUlMgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLVJTQS1BRVMyNTYtU0hBICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1SU0EtQUVTMTI4LVNIQSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESEUtUlNBLURFUy1DQkMzLVNIQSAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLVJTQS1SQzQtU0hBICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1SU0EtTlVMTC1TSEEgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIFsgYG1pbm9yX3ZlciAiJE1PREUiYCAtZ2UgMyBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEyNTYgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2ICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEyNTYgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBMjU2ICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEyNTYgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEzODQgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2ICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0ICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBHX0NJUEhFUlM9IiRHX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQTorQUVTLTEyOC1DQkM6K1NIQTI1NiAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1SU0E6K0FFUy0xMjgtQ0JDOitTSEEyNTYgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQTorQUVTLTI1Ni1DQkM6K1NIQTI1NiAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1SU0E6K0FFUy0yNTYtQ0JDOitTSEEyNTYgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVJTQTorQUVTLTEyOC1DQkM6K1NIQTI1NiAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVJTQTorQUVTLTI1Ni1DQkM6K1NIQTM4NCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQTorQUVTLTEyOC1HQ006K0FFQUQgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQTorQUVTLTI1Ni1HQ006K0FFQUQgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1SU0E6K0FFUy0xMjgtR0NNOitBRUFEICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1SU0E6K0FFUy0yNTYtR0NNOitBRUFEICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVJTQTorQUVTLTEyOC1HQ006K0FFQUQgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVJTQTorQUVTLTI1Ni1HQ006K0FFQUQgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIE9fQ0lQSEVSUz0iJE9fQ0lQSEVSUyAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBOVUxMLVNIQTI1NiAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBBRVMxMjgtU0hBMjU2ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBESEUtUlNBLUFFUzEyOC1TSEEyNTYgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBBRVMyNTYtU0hBMjU2ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBESEUtUlNBLUFFUzI1Ni1TSEEyNTYgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1SU0EtQUVTMTI4LVNIQTI1NiAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1SU0EtQUVTMjU2LVNIQTM4NCAgICAgXAorICAgICAgICAgICAgICAgICAgICBBRVMxMjgtR0NNLVNIQTI1NiAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBESEUtUlNBLUFFUzEyOC1HQ00tU0hBMjU2ICAgXAorICAgICAgICAgICAgICAgICAgICBBRVMyNTYtR0NNLVNIQTM4NCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBESEUtUlNBLUFFUzI1Ni1HQ00tU0hBMzg0ICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1SU0EtQUVTMTI4LUdDTS1TSEEyNTYgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKworICAgICAgICAiUFNLIikKKyAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1SQzQtMTI4LVNIQSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILTNERVMtRURFLUNCQy1TSEEgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1BRVMtMjU2LUNCQy1TSEEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgR19DSVBIRVJTPSIkR19DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK1BTSzorQVJDRk9VUi0xMjg6K1NIQTEgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArUFNLOiszREVTLUNCQzorU0hBMSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtQU0s6K0FFUy0xMjgtQ0JDOitTSEExICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK1BTSzorQUVTLTI1Ni1DQkM6K1NIQTEgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBPX0NJUEhFUlM9IiRPX0NJUEhFUlMgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgUFNLLVJDNC1TSEEgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgUFNLLTNERVMtRURFLUNCQy1TSEEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgUFNLLUFFUzEyOC1DQkMtU0hBICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgUFNLLUFFUzI1Ni1DQkMtU0hBICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgOzsKKyAgICBlc2FjCit9CisKK2FkZF9vcGVuc3NsX2NpcGhlcnN1aXRlcygpCit7CisgICAgY2FzZSAkVFlQRSBpbgorCisgICAgICAgICJFQ0RTQSIpCisgICAgICAgICAgICBpZiBbIGBtaW5vcl92ZXIgIiRNT0RFImAgLWd0IDAgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESC1FQ0RTQS1XSVRILU5VTEwtU0hBICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESC1FQ0RTQS1XSVRILVJDNC0xMjgtU0hBICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESC1FQ0RTQS1XSVRILTNERVMtRURFLUNCQy1TSEEgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESC1FQ0RTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESC1FQ0RTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgT19DSVBIRVJTPSIkT19DSVBIRVJTICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RILUVDRFNBLU5VTEwtU0hBICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESC1FQ0RTQS1SQzQtU0hBICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREgtRUNEU0EtREVTLUNCQzMtU0hBICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RILUVDRFNBLUFFUzEyOC1TSEEgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESC1FQ0RTQS1BRVMyNTYtU0hBICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiBbIGBtaW5vcl92ZXIgIiRNT0RFImAgLWdlIDMgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RILUVDRFNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREgtRUNEU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEzODQgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESC1FQ0RTQS1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RILUVDRFNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIE9fQ0lQSEVSUz0iJE9fQ0lQSEVSUyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESC1FQ0RTQS1BRVMxMjgtU0hBMjU2ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREgtRUNEU0EtQUVTMjU2LVNIQTM4NCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RILUVDRFNBLUFFUzEyOC1HQ00tU0hBMjU2ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESC1FQ0RTQS1BRVMyNTYtR0NNLVNIQTM4NCAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworCisgICAgICAgICJSU0EiKQorICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILURFUy1DQkMtU0hBICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtREhFLVJTQS1XSVRILURFUy1DQkMtU0hBICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIE9fQ0lQSEVSUz0iJE9fQ0lQSEVSUyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBERVMtQ0JDLVNIQSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBFREgtUlNBLURFUy1DQkMtU0hBICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICA7OworCisgICAgICAgICJQU0siKQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCit9CisKK2FkZF9nbnV0bHNfY2lwaGVyc3VpdGVzKCkKK3sKKyAgICBjYXNlICRUWVBFIGluCisKKyAgICAgICAgIkVDRFNBIikKKyAgICAgICAgICAgIGlmIFsgYG1pbm9yX3ZlciAiJE1PREUiYCAtZ2UgMyBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLUVDRFNBLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1DQU1FTExJQS0yNTYtQ0JDLVNIQTM4NCAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLUVDRFNBLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQgICAgXAorICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBHX0NJUEhFUlM9IiRHX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtRUNEU0E6K0NBTUVMTElBLTEyOC1DQkM6K1NIQTI1NiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1FQ0RTQTorQ0FNRUxMSUEtMjU2LUNCQzorU0hBMzg0ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLUVDRFNBOitDQU1FTExJQS0xMjgtR0NNOitBRUFEICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtRUNEU0E6K0NBTUVMTElBLTI1Ni1HQ006K0FFQUQgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIlJTQSIpCisgICAgICAgICAgICBpZiBbIGBtaW5vcl92ZXIgIiRNT0RFImAgLWd0IDAgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILU5VTEwtU0hBMjU2ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBHX0NJUEhFUlM9IiRHX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtSU0E6K05VTEw6K1NIQTI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyBgbWlub3JfdmVyICIkTU9ERSJgIC1nZSAzIF0KKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQTI1NiAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEzODQgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1DQU1FTExJQS0yNTYtQ0JDLVNIQTI1NiAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVJTQS1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC1DQU1FTExJQS0yNTYtQ0JDLVNIQTI1NiAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1DQU1FTExJQS0xMjgtR0NNLVNIQTI1NiAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC1DQU1FTExJQS0xMjgtR0NNLVNIQTI1NiAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtQ0FNRUxMSUEtMTI4LUdDTS1TSEEyNTYgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUNBTUVMTElBLTI1Ni1HQ00tU0hBMzg0ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBHX0NJUEhFUlM9IiRHX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1SU0E6K0NBTUVMTElBLTEyOC1DQkM6K1NIQTI1NiAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUlNBOitDQU1FTExJQS0yNTYtQ0JDOitTSEEzODQgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQTorQ0FNRUxMSUEtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtSU0E6K0NBTUVMTElBLTI1Ni1DQkM6K1NIQTI1NiAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVJTQTorQ0FNRUxMSUEtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1SU0E6K0NBTUVMTElBLTI1Ni1DQkM6K1NIQTI1NiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1SU0E6K0NBTUVMTElBLTEyOC1HQ006K0FFQUQgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUlNBOitDQU1FTExJQS0yNTYtR0NNOitBRUFEICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1SU0E6K0NBTUVMTElBLTEyOC1HQ006K0FFQUQgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtESEUtUlNBOitDQU1FTExJQS0yNTYtR0NNOitBRUFEICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBOitDQU1FTExJQS0xMjgtR0NNOitBRUFEICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQTorQ0FNRUxMSUEtMjU2LUdDTTorQUVBRCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworCisgICAgICAgICJQU0siKQorICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILTNERVMtRURFLUNCQy1TSEEgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtQUVTLTI1Ni1DQkMtU0hBICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILVJDNC0xMjgtU0hBICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgR19DSVBIRVJTPSIkR19DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArREhFLVBTSzorM0RFUy1DQkM6K1NIQTEgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK0RIRS1QU0s6K0FFUy0xMjgtQ0JDOitTSEExICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtESEUtUFNLOitBRVMtMjU2LUNCQzorU0hBMSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArREhFLVBTSzorQVJDRk9VUi0xMjg6K1NIQTEgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgaWYgWyBgbWlub3JfdmVyICIkTU9ERSJgIC1ndCAwIF0KKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1QU0stV0lUSC1BRVMtMjU2LUNCQy1TSEEgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVBTSy1XSVRILTNERVMtRURFLUNCQy1TSEEgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1QU0stV0lUSC1SQzQtMTI4LVNIQSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILTNERVMtRURFLUNCQy1TSEEgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1QU0stV0lUSC1BRVMtMjU2LUNCQy1TSEEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILVJDNC0xMjgtU0hBICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIEdfQ0lQSEVSUz0iJEdfQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVBTSzorM0RFUy1DQkM6K1NIQTEgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1QU0s6K0FFUy0xMjgtQ0JDOitTSEExICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUFNLOitBRVMtMjU2LUNCQzorU0hBMSAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVBTSzorQVJDRk9VUi0xMjg6K1NIQTEgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtSU0EtUFNLOiszREVTLUNCQzorU0hBMSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBLVBTSzorQUVTLTI1Ni1DQkM6K1NIQTEgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6K0FFUy0xMjgtQ0JDOitTSEExICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtSU0EtUFNLOitBUkNGT1VSLTEyODorU0hBMSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyBgbWlub3JfdmVyICIkTU9ERSJgIC1nZSAzIF0KKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1QU0stV0lUSC1BRVMtMjU2LUNCQy1TSEEzODQgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEzODQgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1QU0stV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQTI1NiAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUFNLLVdJVEgtTlVMTC1TSEEzODQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVBTSy1XSVRILU5VTEwtU0hBMjU2ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEyNTYgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUFNLLVdJVEgtQUVTLTI1Ni1DQkMtU0hBMzg0ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEyNTYgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtQUVTLTI1Ni1DQkMtU0hBMzg0ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUFNLLVdJVEgtTlVMTC1TSEEyNTYgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILU5VTEwtU0hBMzg0ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtTlVMTC1TSEEyNTYgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILU5VTEwtU0hBMzg0ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1QU0stV0lUSC1BRVMtMjU2LUNCQy1TSEEzODQgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILU5VTEwtU0hBMjU2ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1QU0stV0lUSC1OVUxMLVNIQTM4NCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1DQU1FTExJQS0yNTYtQ0JDLVNIQTM4NCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1QU0stV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQTI1NiAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUFNLLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1QU0stV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1DQU1FTExJQS0xMjgtR0NNLVNIQTI1NiAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1DQU1FTExJQS0xMjgtR0NNLVNIQTI1NiAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILUFFUy0yNTYtR0NNLVNIQTM4NCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1QU0stV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBHX0NJUEhFUlM9IiRHX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1QU0s6K0FFUy0yNTYtQ0JDOitTSEEzODQgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUFNLOitDQU1FTExJQS0yNTYtQ0JDOitTSEEzODQgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVBTSzorQUVTLTEyOC1DQkM6K1NIQTI1NiAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1QU0s6K0NBTUVMTElBLTEyOC1DQkM6K1NIQTI1NiAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUFNLOitBRVMtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1BTSzorQUVTLTI1Ni1DQkM6K1NIQTM4NCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtESEUtUFNLOitBRVMtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVBTSzorQUVTLTI1Ni1DQkM6K1NIQTM4NCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6K0FFUy0yNTYtQ0JDOitTSEEzODQgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtSU0EtUFNLOitBRVMtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVBTSzorQ0FNRUxMSUEtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1QU0s6K0NBTUVMTElBLTI1Ni1DQkM6K1NIQTM4NCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtQU0s6K0NBTUVMTElBLTEyOC1DQkM6K1NIQTI1NiAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUFNLOitDQU1FTExJQS0yNTYtQ0JDOitTSEEzODQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6K0NBTUVMTElBLTI1Ni1DQkM6K1NIQTM4NCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtSU0EtUFNLOitDQU1FTExJQS0xMjgtQ0JDOitTSEEyNTYgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUFNLOitBRVMtMTI4LUdDTTorQUVBRCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1BTSzorQUVTLTI1Ni1HQ006K0FFQUQgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtESEUtUFNLOitBRVMtMTI4LUdDTTorQUVBRCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVBTSzorQUVTLTI1Ni1HQ006K0FFQUQgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6K0NBTUVMTElBLTEyOC1HQ006K0FFQUQgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtSU0EtUFNLOitDQU1FTExJQS0yNTYtR0NNOitBRUFEICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUFNLOitDQU1FTExJQS0xMjgtR0NNOitBRUFEICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1BTSzorQ0FNRUxMSUEtMjU2LUdDTTorQUVBRCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtESEUtUFNLOitDQU1FTExJQS0xMjgtR0NNOitBRUFEICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVBTSzorQ0FNRUxMSUEtMjU2LUdDTTorQUVBRCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6K0FFUy0yNTYtR0NNOitBRUFEICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtSU0EtUFNLOitBRVMtMTI4LUdDTTorQUVBRCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUFNLOitOVUxMOitTSEEzODQgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVBTSzorTlVMTDorU0hBMjU2ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtQU0s6K05VTEw6K1NIQTI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUFNLOitOVUxMOitTSEEzODQgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1QU0s6K05VTEw6K1NIQTI1NiAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtESEUtUFNLOitOVUxMOitTSEEzODQgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBLVBTSzorTlVMTDorU0hBMjU2ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6K05VTEw6K1NIQTM4NCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgIGVzYWMKK30KKworYWRkX21iZWR0bHNfY2lwaGVyc3VpdGVzKCkKK3sKKyAgICBjYXNlICRUWVBFIGluCisKKyAgICAgICAgIkVDRFNBIikKKyAgICAgICAgICAgIGlmIFsgYG1pbm9yX3ZlciAiJE1PREUiYCAtZ3QgMCBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREgtRUNEU0EtV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQTI1NiAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESC1FQ0RTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0ICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiBbIGBtaW5vcl92ZXIgIiRNT0RFImAgLWdlIDMgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RILUVDRFNBLVdJVEgtQ0FNRUxMSUEtMTI4LUdDTS1TSEEyNTYgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREgtRUNEU0EtV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMTI4LUNDTSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0yNTYtQ0NNICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTEyOC1DQ00tOCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMjU2LUNDTS04ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworCisgICAgICAgICJSU0EiKQorICAgICAgICAgICAgaWYgWyAiJE1PREUiID0gInRsczFfMiIgXTsKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtQUVTLTEyOC1DQ00gICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1BRVMtMjU2LUNDTSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNDTSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVJTQS1XSVRILUFFUy0yNTYtQ0NNICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1BRVMtMTI4LUNDTS04ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUFFUy0yNTYtQ0NNLTggICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0NNLTggICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQUVTLTI1Ni1DQ00tOCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIlBTSyIpCisgICAgICAgICAgICAjICpQU0stTlVMTC1TSEEgc3VpdGVzIHN1cHBvcnRlZCBieSBHbnVUTFMgMy4zLjUgYnV0IG5vdCAzLjIuMTUKKyAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtUFNLLVdJVEgtTlVMTC1TSEEgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILU5VTEwtU0hBICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBpZiBbIGBtaW5vcl92ZXIgIiRNT0RFImAgLWd0IDAgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUFNLLVdJVEgtTlVMTC1TSEEgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILU5VTEwtU0hBICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAiJE1PREUiID0gInRsczFfMiIgXTsKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUFNLLVdJVEgtQUVTLTEyOC1DQ00gICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1BRVMtMjU2LUNDTSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1BRVMtMTI4LUNDTSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILUFFUy0yNTYtQ0NNICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1BRVMtMTI4LUNDTS04ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILUFFUy0yNTYtQ0NNLTggICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILUFFUy0xMjgtQ0NNLTggICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtQUVTLTI1Ni1DQ00tOCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworfQorCitzZXR1cF9hcmd1bWVudHMoKQoreworICAgIEdfTU9ERT0iIgorICAgIGNhc2UgIiRNT0RFIiBpbgorICAgICAgICAic3NsMyIpCisgICAgICAgICAgICBHX1BSSU9fTU9ERT0iK1ZFUlMtU1NMMy4wIgorICAgICAgICAgICAgOzsKKyAgICAgICAgInRsczEiKQorICAgICAgICAgICAgR19QUklPX01PREU9IitWRVJTLVRMUzEuMCIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJ0bHMxXzEiKQorICAgICAgICAgICAgR19QUklPX01PREU9IitWRVJTLVRMUzEuMSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJ0bHMxXzIiKQorICAgICAgICAgICAgR19QUklPX01PREU9IitWRVJTLVRMUzEuMiIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJkdGxzMSIpCisgICAgICAgICAgICBHX1BSSU9fTU9ERT0iK1ZFUlMtRFRMUzEuMCIKKyAgICAgICAgICAgIEdfTU9ERT0iLXUiCisgICAgICAgICAgICA7OworICAgICAgICAiZHRsczFfMiIpCisgICAgICAgICAgICBHX1BSSU9fTU9ERT0iK1ZFUlMtRFRMUzEuMiIKKyAgICAgICAgICAgIEdfTU9ERT0iLXUiCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgZWNobyAiZXJyb3I6IGludmFsaWQgbW9kZTogJE1PREUiID4mMgorICAgICAgICAgICAgZXhpdCAxOworICAgIGVzYWMKKworICAgIE1fU0VSVkVSX0FSR1M9InNlcnZlcl9wb3J0PSRQT1JUIHNlcnZlcl9hZGRyPTAuMC4wLjAgZm9yY2VfdmVyc2lvbj0kTU9ERSBhcmM0PTEiCisgICAgT19TRVJWRVJfQVJHUz0iLWFjY2VwdCAkUE9SVCAtY2lwaGVyIE5VTEwsQUxMIC0kTU9ERSAtZGhwYXJhbSBkYXRhX2ZpbGVzL2RocGFyYW1zLnBlbSIKKyAgICBHX1NFUlZFUl9BUkdTPSItcCAkUE9SVCAtLWh0dHAgJEdfTU9ERSIKKyAgICBHX1NFUlZFUl9QUklPPSJOT1JNQUw6K0FSQ0ZPVVItMTI4OitOVUxMOitNRDU6K1BTSzorREhFLVBTSzorRUNESEUtUFNLOitSU0EtUFNLOi1WRVJTLVRMUy1BTEw6JEdfUFJJT19NT0RFIgorCisgICAgIyB3aXRoIE9wZW5TU0wgMS4wLjFoLCAtd3d3LCAtV1dXIGFuZCAtSFRUUCBicmVhayBEVExTIGhhbmRzaGFrZXMKKyAgICBpZiBpc19kdGxzICIkTU9ERSI7IHRoZW4KKyAgICAgICAgT19TRVJWRVJfQVJHUz0iJE9fU0VSVkVSX0FSR1MiCisgICAgZWxzZQorICAgICAgICBPX1NFUlZFUl9BUkdTPSIkT19TRVJWRVJfQVJHUyAtd3d3IgorICAgIGZpCisKKyAgICBNX0NMSUVOVF9BUkdTPSJzZXJ2ZXJfcG9ydD0kUE9SVCBzZXJ2ZXJfYWRkcj0xMjcuMC4wLjEgZm9yY2VfdmVyc2lvbj0kTU9ERSIKKyAgICBPX0NMSUVOVF9BUkdTPSItY29ubmVjdCBsb2NhbGhvc3Q6JFBPUlQgLSRNT0RFIgorICAgIEdfQ0xJRU5UX0FSR1M9Ii1wICRQT1JUIC0tZGVidWcgMyAkR19NT0RFIgorICAgIEdfQ0xJRU5UX1BSSU89Ik5PTkU6JEdfUFJJT19NT0RFOitDT01QLU5VTEw6K0NVUlZFLUFMTDorU0lHTi1BTEwiCisKKyAgICBpZiBbICJYJFZFUklGWSIgPSAiWFlFUyIgXTsKKyAgICB0aGVuCisgICAgICAgIE1fU0VSVkVSX0FSR1M9IiRNX1NFUlZFUl9BUkdTIGNhX2ZpbGU9ZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydCBhdXRoX21vZGU9cmVxdWlyZWQiCisgICAgICAgIE9fU0VSVkVSX0FSR1M9IiRPX1NFUlZFUl9BUkdTIC1DQWZpbGUgZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydCAtVmVyaWZ5IDEwIgorICAgICAgICBHX1NFUlZFUl9BUkdTPSIkR19TRVJWRVJfQVJHUyAtLXg1MDljYWZpbGUgZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydCAtLXJlcXVpcmUtY2xpZW50LWNlcnQiCisKKyAgICAgICAgTV9DTElFTlRfQVJHUz0iJE1fQ0xJRU5UX0FSR1MgY2FfZmlsZT1kYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IGF1dGhfbW9kZT1yZXF1aXJlZCIKKyAgICAgICAgT19DTElFTlRfQVJHUz0iJE9fQ0xJRU5UX0FSR1MgLUNBZmlsZSBkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IC12ZXJpZnkgMTAiCisgICAgICAgIEdfQ0xJRU5UX0FSR1M9IiRHX0NMSUVOVF9BUkdTIC0teDUwOWNhZmlsZSBkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IgorICAgIGVsc2UKKyAgICAgICAgIyBkb24ndCByZXF1ZXN0IGEgY2xpZW50IGNlcnQgYXQgYWxsCisgICAgICAgIE1fU0VSVkVSX0FSR1M9IiRNX1NFUlZFUl9BUkdTIGNhX2ZpbGU9bm9uZSBhdXRoX21vZGU9bm9uZSIKKyAgICAgICAgR19TRVJWRVJfQVJHUz0iJEdfU0VSVkVSX0FSR1MgLS1kaXNhYmxlLWNsaWVudC1jZXJ0IgorCisgICAgICAgIE1fQ0xJRU5UX0FSR1M9IiRNX0NMSUVOVF9BUkdTIGNhX2ZpbGU9bm9uZSBhdXRoX21vZGU9bm9uZSIKKyAgICAgICAgT19DTElFTlRfQVJHUz0iJE9fQ0xJRU5UX0FSR1MiCisgICAgICAgIEdfQ0xJRU5UX0FSR1M9IiRHX0NMSUVOVF9BUkdTIC0taW5zZWN1cmUiCisgICAgZmkKKworICAgIGNhc2UgJFRZUEUgaW4KKyAgICAgICAgIkVDRFNBIikKKyAgICAgICAgICAgIE1fU0VSVkVSX0FSR1M9IiRNX1NFUlZFUl9BUkdTIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5jcnQga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIKKyAgICAgICAgICAgIE9fU0VSVkVSX0FSR1M9IiRPX1NFUlZFUl9BUkdTIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNS5jcnQgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjUua2V5IgorICAgICAgICAgICAgR19TRVJWRVJfQVJHUz0iJEdfU0VSVkVSX0FSR1MgLS14NTA5Y2VydGZpbGUgZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCAtLXg1MDlrZXlmaWxlIGRhdGFfZmlsZXMvc2VydmVyNS5rZXkiCisKKyAgICAgICAgICAgIGlmIFsgIlgkVkVSSUZZIiA9ICJYWUVTIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgTV9DTElFTlRfQVJHUz0iJE1fQ0xJRU5UX0FSR1MgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjYua2V5IgorICAgICAgICAgICAgICAgIE9fQ0xJRU5UX0FSR1M9IiRPX0NMSUVOVF9BUkdTIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNi5jcnQgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjYua2V5IgorICAgICAgICAgICAgICAgIEdfQ0xJRU5UX0FSR1M9IiRHX0NMSUVOVF9BUkdTIC0teDUwOWNlcnRmaWxlIGRhdGFfZmlsZXMvc2VydmVyNi5jcnQgLS14NTA5a2V5ZmlsZSBkYXRhX2ZpbGVzL3NlcnZlcjYua2V5IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIE1fQ0xJRU5UX0FSR1M9IiRNX0NMSUVOVF9BUkdTIGNydF9maWxlPW5vbmUga2V5X2ZpbGU9bm9uZSIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworCisgICAgICAgICJSU0EiKQorICAgICAgICAgICAgTV9TRVJWRVJfQVJHUz0iJE1fU0VSVkVSX0FSR1MgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjIua2V5IgorICAgICAgICAgICAgT19TRVJWRVJfQVJHUz0iJE9fU0VSVkVSX0FSR1MgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCAta2V5IGRhdGFfZmlsZXMvc2VydmVyMi5rZXkiCisgICAgICAgICAgICBHX1NFUlZFUl9BUkdTPSIkR19TRVJWRVJfQVJHUyAtLXg1MDljZXJ0ZmlsZSBkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IC0teDUwOWtleWZpbGUgZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSIKKworICAgICAgICAgICAgaWYgWyAiWCRWRVJJRlkiID0gIlhZRVMiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBNX0NMSUVOVF9BUkdTPSIkTV9DTElFTlRfQVJHUyBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyMS5rZXkiCisgICAgICAgICAgICAgICAgT19DTElFTlRfQVJHUz0iJE9fQ0xJRU5UX0FSR1MgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCAta2V5IGRhdGFfZmlsZXMvc2VydmVyMS5rZXkiCisgICAgICAgICAgICAgICAgR19DTElFTlRfQVJHUz0iJEdfQ0xJRU5UX0FSR1MgLS14NTA5Y2VydGZpbGUgZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCAtLXg1MDlrZXlmaWxlIGRhdGFfZmlsZXMvc2VydmVyMS5rZXkiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgTV9DTElFTlRfQVJHUz0iJE1fQ0xJRU5UX0FSR1MgY3J0X2ZpbGU9bm9uZSBrZXlfZmlsZT1ub25lIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIlBTSyIpCisgICAgICAgICAgICAjIGdpdmUgUlNBLVBTSy1jYXBhYmxlIHNlcnZlciBhIFJTQSBjZXJ0CisgICAgICAgICAgICAjIChzaG91bGQgYmUgYSBzZXBhcmF0ZSB0eXBlLCBidXQgaGFyZGVyIHRvIGNsb3NlIHdpdGggb3BlbnNzbCkKKyAgICAgICAgICAgIE1fU0VSVkVSX0FSR1M9IiRNX1NFUlZFUl9BUkdTIHBzaz02MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MCBjYV9maWxlPW5vbmUgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjIua2V5IgorICAgICAgICAgICAgT19TRVJWRVJfQVJHUz0iJE9fU0VSVkVSX0FSR1MgLXBzayA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MCAtbm9jZXJ0IgorICAgICAgICAgICAgR19TRVJWRVJfQVJHUz0iJEdfU0VSVkVSX0FSR1MgLS14NTA5Y2VydGZpbGUgZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCAtLXg1MDlrZXlmaWxlIGRhdGFfZmlsZXMvc2VydmVyMi5rZXkgLS1wc2twYXNzd2QgZGF0YV9maWxlcy9wYXNzd2QucHNrIgorCisgICAgICAgICAgICBNX0NMSUVOVF9BUkdTPSIkTV9DTElFTlRfQVJHUyBwc2s9NjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzAgY3J0X2ZpbGU9bm9uZSBrZXlfZmlsZT1ub25lIgorICAgICAgICAgICAgT19DTElFTlRfQVJHUz0iJE9fQ0xJRU5UX0FSR1MgLXBzayA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MCIKKyAgICAgICAgICAgIEdfQ0xJRU5UX0FSR1M9IiRHX0NMSUVOVF9BUkdTIC0tcHNrdXNlcm5hbWUgQ2xpZW50X2lkZW50aXR5IC0tcHNra2V5PTYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwIgorICAgICAgICAgICAgOzsKKyAgICBlc2FjCit9CisKKyMgaXNfbWJlZHRscyA8Y21kX2xpbmU+Citpc19tYmVkdGxzKCkgeworICAgIGVjaG8gIiQxIiB8IGdyZXAgJ3NzbF9zZXJ2ZXIyXHxzc2xfY2xpZW50MicgPiAvZGV2L251bGwKK30KKworIyBoYXNfbWVtX2VyciA8bG9nX2ZpbGVfbmFtZT4KK2hhc19tZW1fZXJyKCkgeworICAgIGlmICggZ3JlcCAtRiAnQWxsIGhlYXAgYmxvY2tzIHdlcmUgZnJlZWQgLS0gbm8gbGVha3MgYXJlIHBvc3NpYmxlJyAiJDEiICYmCisgICAgICAgICBncmVwIC1GICdFUlJPUiBTVU1NQVJZOiAwIGVycm9ycyBmcm9tIDAgY29udGV4dHMnICIkMSIgKSA+IC9kZXYvbnVsbAorICAgIHRoZW4KKyAgICAgICAgcmV0dXJuIDEgIyBmYWxzZTogZG9lcyBub3QgaGF2ZSBlcnJvcnMKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwICMgdHJ1ZTogaGFzIGVycm9ycworICAgIGZpCit9CisKKyMgc3RhcnRfc2VydmVyIDxuYW1lPgorIyBhbHNvIHNhdmVzIG5hbWUgYW5kIGNvbW1hbmQKK3N0YXJ0X3NlcnZlcigpIHsKKyAgICBjYXNlICQxIGluCisgICAgICAgIFtPb11wZW4qKQorICAgICAgICAgICAgU0VSVkVSX0NNRD0iJE9QRU5TU0xfQ01EIHNfc2VydmVyICRPX1NFUlZFUl9BUkdTIgorICAgICAgICAgICAgOzsKKyAgICAgICAgW0dnXW51KikKKyAgICAgICAgICAgIFNFUlZFUl9DTUQ9IiRHTlVUTFNfU0VSViAkR19TRVJWRVJfQVJHUyAtLXByaW9yaXR5ICRHX1NFUlZFUl9QUklPIgorICAgICAgICAgICAgOzsKKyAgICAgICAgbWJlZCopCisgICAgICAgICAgICBTRVJWRVJfQ01EPSIkTV9TUlYgJE1fU0VSVkVSX0FSR1MiCisgICAgICAgICAgICBpZiBbICIkTUVNQ0hFQ0siIC1ndCAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBTRVJWRVJfQ01EPSJ2YWxncmluZCAtLWxlYWstY2hlY2s9ZnVsbCAkU0VSVkVSX0NNRCIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgZWNobyAiZXJyb3I6IGludmFsaWQgc2VydmVyIG5hbWU6ICQxIiA+JjIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisgICAgU0VSVkVSX05BTUU9JDEKKworICAgIGxvZyAiJFNFUlZFUl9DTUQiCisgICAgZWNobyAiJFNFUlZFUl9DTUQiID4gJFNSVl9PVVQKKyAgICAjIGZvciBzZXJ2ZXJzIHdpdGhvdXQgLXd3dyBvciBlcXVpdmFsZW50CisgICAgd2hpbGUgOjsgZG8gZWNobyBibGE7IHNsZWVwIDE7IGRvbmUgfCAkU0VSVkVSX0NNRCA+PiAkU1JWX09VVCAyPiYxICYKKyAgICBQUk9DRVNTX0lEPSQhCisKKyAgICBzbGVlcCAxCit9CisKKyMgdGVybWluYXRlIHRoZSBydW5uaW5nIHNlcnZlcgorc3RvcF9zZXJ2ZXIoKSB7CisgICAga2lsbCAkUFJPQ0VTU19JRCAyPi9kZXYvbnVsbAorICAgIHdhaXQgJFBST0NFU1NfSUQgMj4vZGV2L251bGwKKworICAgIGlmIFsgIiRNRU1DSEVDSyIgLWd0IDAgXTsgdGhlbgorICAgICAgICBpZiBpc19tYmVkdGxzICIkU0VSVkVSX0NNRCIgJiYgaGFzX21lbV9lcnIgJFNSVl9PVVQ7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiAgISBTZXJ2ZXIgaGFkIG1lbW9yeSBlcnJvcnMiCisgICAgICAgICAgICBTUlZNRU09JCgoICRTUlZNRU0gKyAxICkpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgcm0gLWYgJFNSVl9PVVQKK30KKworIyBraWxsIHRoZSBydW5uaW5nIHNlcnZlciAodXNlZCB3aGVuIGtpbGxlZCBieSBzaWduYWwpCitjbGVhbnVwKCkgeworICAgIHJtIC1mICRTUlZfT1VUICRDTElfT1VUCisgICAga2lsbCAkUFJPQ0VTU19JRCA+L2Rldi9udWxsIDI+JjEKKyAgICBraWxsICRXQVRDSERPR19QSUQgPi9kZXYvbnVsbCAyPiYxCisgICAgZXhpdCAxCit9CisKKyMgd2FpdCBmb3IgY2xpZW50IHRvIHRlcm1pbmF0ZSBhbmQgc2V0IEVYSVQKKyMgbXVzdCBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgc3RhcnRpbmcgdGhlIGNsaWVudAord2FpdF9jbGllbnRfZG9uZSgpIHsKKyAgICBDTElfUElEPSQhCisKKyAgICAoIHNsZWVwICIkRE9HX0RFTEFZIjsgZWNobyAiVElNRU9VVCIgPj4gJENMSV9PVVQ7IGtpbGwgJENMSV9QSUQgKSAmCisgICAgV0FUQ0hET0dfUElEPSQhCisKKyAgICB3YWl0ICRDTElfUElECisgICAgRVhJVD0kPworCisgICAga2lsbCAkV0FUQ0hET0dfUElECisgICAgd2FpdCAkV0FUQ0hET0dfUElECisKKyAgICBlY2hvICJFWElUOiAkRVhJVCIgPj4gJENMSV9PVVQKK30KKworIyBydW5fY2xpZW50IDxuYW1lPiA8Y2lwaGVyPgorcnVuX2NsaWVudCgpIHsKKyAgICAjIGFubm91bmNlIHdoYXQgd2UncmUgZ29pbmcgdG8gZG8KKyAgICBURVNUUz0kKCggJFRFU1RTICsgMSApKQorICAgIFZFUklGPSQoZWNobyAkVkVSSUZZIHwgdHIgJ1s6dXBwZXI6XScgJ1s6bG93ZXI6XScpCisgICAgVElUTEU9ImBlY2hvICQxIHwgaGVhZCAtYzFgLT5gZWNobyAkU0VSVkVSX05BTUUgfCBoZWFkIC1jMWAiCisgICAgVElUTEU9IiRUSVRMRSAkTU9ERSwkVkVSSUYgJDIiCisgICAgcHJpbnRmICIkVElUTEUgIgorICAgIExFTj0kKCggNzIgLSBgZWNobyAiJFRJVExFIiB8IHdjIC1jYCApKQorICAgIGZvciBpIGluIGBzZXEgMSAkTEVOYDsgZG8gcHJpbnRmICcuJzsgZG9uZTsgcHJpbnRmICcgJworCisgICAgIyBzaG91bGQgd2Ugc2tpcD8KKyAgICBpZiBbICJYJFNLSVBfTkVYVCIgPSAiWFlFUyIgXTsgdGhlbgorICAgICAgICBTS0lQX05FWFQ9Ik5PIgorICAgICAgICBlY2hvICJTS0lQIgorICAgICAgICBTS0lQUEVEPSQoKCAkU0tJUFBFRCArIDEgKSkKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgICMgcnVuIHRoZSBjb21tYW5kIGFuZCBpbnRlcnByZXQgcmVzdWx0CisgICAgY2FzZSAkMSBpbgorICAgICAgICBbT29dcGVuKikKKyAgICAgICAgICAgIENMSUVOVF9DTUQ9IiRPUEVOU1NMX0NNRCBzX2NsaWVudCAkT19DTElFTlRfQVJHUyAtY2lwaGVyICQyIgorICAgICAgICAgICAgbG9nICIkQ0xJRU5UX0NNRCIKKyAgICAgICAgICAgIGVjaG8gIiRDTElFTlRfQ01EIiA+ICRDTElfT1VUCisgICAgICAgICAgICBwcmludGYgJ0dFVCBIVFRQLzEuMFxyXG5cclxuJyB8ICRDTElFTlRfQ01EID4+ICRDTElfT1VUIDI+JjEgJgorICAgICAgICAgICAgd2FpdF9jbGllbnRfZG9uZQorCisgICAgICAgICAgICBpZiBbICRFWElUIC1lcSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBSRVNVTFQ9MAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICMgSWYgdGhlIGNpcGhlciBpc24ndCBzdXBwb3J0ZWQuLi4gCisgICAgICAgICAgICAgICAgaWYgZ3JlcCAnQ2lwaGVyIGlzIChOT05FKScgJENMSV9PVVQgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBSRVNVTFQ9MQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgUkVTVUxUPTIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgW0dnXW51KikKKyAgICAgICAgICAgICMgbmVlZCB0byBmb3JjZSBJUHY0IHdpdGggVURQLCBidXQga2VlcCBsb2NhbGhvc3QgZm9yIGF1dGgKKyAgICAgICAgICAgIGlmIGlzX2R0bHMgIiRNT0RFIjsgdGhlbgorICAgICAgICAgICAgICAgIEdfSE9TVD0iMTI3LjAuMC4xIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEdfSE9TVD0ibG9jYWxob3N0IgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIENMSUVOVF9DTUQ9IiRHTlVUTFNfQ0xJICRHX0NMSUVOVF9BUkdTIC0tcHJpb3JpdHkgJEdfUFJJT19NT0RFOiQyICRHX0hPU1QiCisgICAgICAgICAgICBsb2cgIiRDTElFTlRfQ01EIgorICAgICAgICAgICAgZWNobyAiJENMSUVOVF9DTUQiID4gJENMSV9PVVQKKyAgICAgICAgICAgIHByaW50ZiAnR0VUIEhUVFAvMS4wXHJcblxyXG4nIHwgJENMSUVOVF9DTUQgPj4gJENMSV9PVVQgMj4mMSAmCisgICAgICAgICAgICB3YWl0X2NsaWVudF9kb25lCisKKyAgICAgICAgICAgIGlmIFsgJEVYSVQgLWVxIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIFJFU1VMVD0wCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUkVTVUxUPTIKKyAgICAgICAgICAgICAgICAjIGludGVycHJldCBlYXJseSBmYWlsdXJlLCB3aXRoIGEgaGFuZHNoYWtlX2ZhaWx1cmUgYWxlcnQKKyAgICAgICAgICAgICAgICAjIGJlZm9yZSB0aGUgc2VydmVyIGhlbGxvLCBhcyAibm8gY2lwaGVyc3VpdGUgaW4gY29tbW9uIgorICAgICAgICAgICAgICAgIGlmIGdyZXAgLUYgJ1JlY2VpdmVkIGFsZXJ0IFs0MF06IEhhbmRzaGFrZSBmYWlsZWQnICRDTElfT1VUOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIGdyZXAgLWkgJ1NFUlZFUiBIRUxMTyAuKiB3YXMgcmVjZWl2ZWQnICRDTElfT1VUOyB0aGVuIDoKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUPTEKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaSA+L2Rldi9udWxsCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKworICAgICAgICBtYmVkKikKKyAgICAgICAgICAgIENMSUVOVF9DTUQ9IiRNX0NMSSAkTV9DTElFTlRfQVJHUyBmb3JjZV9jaXBoZXJzdWl0ZT0kMiIKKyAgICAgICAgICAgIGlmIFsgIiRNRU1DSEVDSyIgLWd0IDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIENMSUVOVF9DTUQ9InZhbGdyaW5kIC0tbGVhay1jaGVjaz1mdWxsICRDTElFTlRfQ01EIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGxvZyAiJENMSUVOVF9DTUQiCisgICAgICAgICAgICBlY2hvICIkQ0xJRU5UX0NNRCIgPiAkQ0xJX09VVAorICAgICAgICAgICAgJENMSUVOVF9DTUQgPj4gJENMSV9PVVQgMj4mMSAmCisgICAgICAgICAgICB3YWl0X2NsaWVudF9kb25lCisKKyAgICAgICAgICAgIGNhc2UgJEVYSVQgaW4KKyAgICAgICAgICAgICAgICAjIFN1Y2Nlc3MKKyAgICAgICAgICAgICAgICAiMCIpICAgIFJFU1VMVD0wICAgIDs7CisKKyAgICAgICAgICAgICAgICAjIENpcGhlcnN1aXRlIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAiMiIpICAgIFJFU1VMVD0xICAgIDs7CisKKyAgICAgICAgICAgICAgICAjIEVycm9yCisgICAgICAgICAgICAgICAgKikgICAgICBSRVNVTFQ9MiAgICA7OworICAgICAgICAgICAgZXNhYworCisgICAgICAgICAgICBpZiBbICIkTUVNQ0hFQ0siIC1ndCAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBpZiBpc19tYmVkdGxzICIkQ0xJRU5UX0NNRCIgJiYgaGFzX21lbV9lcnIgJENMSV9PVVQ7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgUkVTVUxUPTIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgZWNobyAiZXJyb3I6IGludmFsaWQgY2xpZW50IG5hbWU6ICQxIiA+JjIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBlY2hvICJFWElUOiAkRVhJVCIgPj4gJENMSV9PVVQKKworICAgICMgcmVwb3J0IGFuZCBjb3VudCByZXN1bHQKKyAgICBjYXNlICRSRVNVTFQgaW4KKyAgICAgICAgIjAiKQorICAgICAgICAgICAgZWNobyBQQVNTCisgICAgICAgICAgICA7OworICAgICAgICAiMSIpCisgICAgICAgICAgICBlY2hvIFNLSVAKKyAgICAgICAgICAgIFNLSVBQRUQ9JCgoICRTS0lQUEVEICsgMSApKQorICAgICAgICAgICAgOzsKKyAgICAgICAgIjIiKQorICAgICAgICAgICAgZWNobyBGQUlMCisgICAgICAgICAgICBjcCAkU1JWX09VVCBjLXNydi0ke1RFU1RTfS5sb2cKKyAgICAgICAgICAgIGNwICRDTElfT1VUIGMtY2xpLSR7VEVTVFN9LmxvZworICAgICAgICAgICAgZWNobyAiICAhIG91dHB1dHMgc2F2ZWQgdG8gYy1zcnYtJHtURVNUU30ubG9nLCBjLWNsaS0ke1RFU1RTfS5sb2ciCisKKyAgICAgICAgICAgIGlmIFsgIlgke1VTRVI6LX0iID0gWGJ1aWxkYm90IC1vICJYJHtMT0dOQU1FOi19IiA9IFhidWlsZGJvdCBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiICAhIHNlcnZlciBvdXRwdXQ6IgorICAgICAgICAgICAgICAgIGNhdCBjLXNydi0ke1RFU1RTfS5sb2cKKyAgICAgICAgICAgICAgICBlY2hvICIgICEgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorICAgICAgICAgICAgICAgIGVjaG8gIiAgISBjbGllbnQgb3V0cHV0OiIKKyAgICAgICAgICAgICAgICBjYXQgYy1jbGktJHtURVNUU30ubG9nCisgICAgICAgICAgICBmaQorCisgICAgICAgICAgICBGQUlMRUQ9JCgoICRGQUlMRUQgKyAxICkpCisgICAgICAgICAgICA7OworICAgIGVzYWMKKworICAgIHJtIC1mICRDTElfT1VUCit9CisKKyMKKyMgTUFJTgorIworCitpZiBjZCAkKCBkaXJuYW1lICQwICk7IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gImNkICQoIGRpcm5hbWUgJDAgKSBmYWlsZWQiID4mMgorICAgIGV4aXQgMQorZmkKKworZ2V0X29wdGlvbnMgIiRAIgorCisjIHNhbml0eSBjaGVja3MsIGF2b2lkIGFuIGF2YWxhbmNoZSBvZiBlcnJvcnMKK2lmIFsgISAteCAiJE1fU1JWIiBdOyB0aGVuCisgICAgZWNobyAiQ29tbWFuZCAnJE1fU1JWJyBpcyBub3QgYW4gZXhlY3V0YWJsZSBmaWxlIiA+JjIKKyAgICBleGl0IDEKK2ZpCitpZiBbICEgLXggIiRNX0NMSSIgXTsgdGhlbgorICAgIGVjaG8gIkNvbW1hbmQgJyRNX0NMSScgaXMgbm90IGFuIGV4ZWN1dGFibGUgZmlsZSIgPiYyCisgICAgZXhpdCAxCitmaQorCitpZiBlY2hvICIkUEVFUlMiIHwgZ3JlcCAtaSBvcGVuc3NsID4gL2Rldi9udWxsOyB0aGVuCisgICAgaWYgd2hpY2ggIiRPUEVOU1NMX0NNRCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgZWNobyAiQ29tbWFuZCAnJE9QRU5TU0xfQ01EJyBub3QgZm91bmQiID4mMgorICAgICAgICBleGl0IDEKKyAgICBmaQorZmkKKworaWYgZWNobyAiJFBFRVJTIiB8IGdyZXAgLWkgZ251dGxzID4gL2Rldi9udWxsOyB0aGVuCisgICAgZm9yIENNRCBpbiAiJEdOVVRMU19DTEkiICIkR05VVExTX1NFUlYiOyBkbworICAgICAgICBpZiB3aGljaCAiJENNRCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgICAgIGVjaG8gIkNvbW1hbmQgJyRDTUQnIG5vdCBmb3VuZCIgPiYyCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICBkb25lCitmaQorCitmb3IgUEVFUiBpbiAkUEVFUlM7IGRvCisgICAgY2FzZSAiJFBFRVIiIGluCisgICAgICAgIG1iZWQqfFtPb11wZW4qfFtHZ11udSopCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgZWNobyAiVW5rbm93biBwZWVyczogJFBFRVIiID4mMgorICAgICAgICAgICAgZXhpdCAxCisgICAgZXNhYworZG9uZQorCisjIFBpY2sgYSAidW5pcXVlIiBwb3J0IGluIHRoZSByYW5nZSAxMDAwMC0xOTk5OS4KK1BPUlQ9IjAwMDAkJCIKK1BPUlQ9IjEkKGVjaG8gJFBPUlQgfCB0YWlsIC1jIDUpIgorCisjIEFsc28gcGljayBhIHVuaXF1ZSBuYW1lIGZvciBpbnRlcm1lZGlhdGUgZmlsZXMKK1NSVl9PVVQ9InNydl9vdXQuJCQiCitDTElfT1VUPSJjbGlfb3V0LiQkIgorCisjIGNsaWVudCB0aW1lb3V0IGRlbGF5OiBiZSBtb3JlIHBhdGllbnQgd2l0aCB2YWxncmluZAoraWYgWyAiJE1FTUNIRUNLIiAtZ3QgMCBdOyB0aGVuCisgICAgRE9HX0RFTEFZPTMwCitlbHNlCisgICAgRE9HX0RFTEFZPTEwCitmaQorCitTS0lQX05FWFQ9Ik5PIgorCit0cmFwIGNsZWFudXAgSU5UIFRFUk0gSFVQCisKK2ZvciBWRVJJRlkgaW4gJFZFUklGSUVTOyBkbworICAgIGZvciBNT0RFIGluICRNT0RFUzsgZG8KKyAgICAgICAgZm9yIFRZUEUgaW4gJFRZUEVTOyBkbworICAgICAgICAgICAgZm9yIFBFRVIgaW4gJFBFRVJTOyBkbworCisgICAgICAgICAgICBzZXR1cF9hcmd1bWVudHMKKworICAgICAgICAgICAgY2FzZSAiJFBFRVIiIGluCisKKyAgICAgICAgICAgICAgICBbT29dcGVuKikKKworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkT1NTTF9OT19EVExTIiAtZ3QgMCAmJiBpc19kdGxzICIkTU9ERSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBmaQorCisgICAgICAgICAgICAgICAgICAgIHJlc2V0X2NpcGhlcnN1aXRlcworICAgICAgICAgICAgICAgICAgICBhZGRfY29tbW9uX2NpcGhlcnN1aXRlcworICAgICAgICAgICAgICAgICAgICBhZGRfb3BlbnNzbF9jaXBoZXJzdWl0ZXMKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2NpcGhlcnN1aXRlcworCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIlgiICE9ICJYJE1fQ0lQSEVSUyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc2VydmVyICJPcGVuU1NMIgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gJE1fQ0lQSEVSUzsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19vcGVuc3NsX3NlcnZlcl9idWcgJGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fY2xpZW50IG1iZWRUTFMgJGkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Bfc2VydmVyCisgICAgICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiWCIgIT0gIlgkT19DSVBIRVJTIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9zZXJ2ZXIgIm1iZWRUTFMiCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiAkT19DSVBIRVJTOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9jbGllbnQgT3BlblNTTCAkaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcF9zZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgW0dnXW51KikKKworICAgICAgICAgICAgICAgICAgICByZXNldF9jaXBoZXJzdWl0ZXMKKyAgICAgICAgICAgICAgICAgICAgYWRkX2NvbW1vbl9jaXBoZXJzdWl0ZXMKKyAgICAgICAgICAgICAgICAgICAgYWRkX2dudXRsc19jaXBoZXJzdWl0ZXMKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2NpcGhlcnN1aXRlcworCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIlgiICE9ICJYJE1fQ0lQSEVSUyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc2VydmVyICJHbnVUTFMiCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiAkTV9DSVBIRVJTOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9jbGllbnQgbWJlZFRMUyAkaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcF9zZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgICAgICAgICBpZiBbICJYIiAhPSAiWCRHX0NJUEhFUlMiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3NlcnZlciAibWJlZFRMUyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluICRHX0NJUEhFUlM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2NsaWVudCBHbnVUTFMgJGkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Bfc2VydmVyCisgICAgICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgIG1iZWQqKQorCisgICAgICAgICAgICAgICAgICAgIHJlc2V0X2NpcGhlcnN1aXRlcworICAgICAgICAgICAgICAgICAgICBhZGRfY29tbW9uX2NpcGhlcnN1aXRlcworICAgICAgICAgICAgICAgICAgICBhZGRfb3BlbnNzbF9jaXBoZXJzdWl0ZXMKKyAgICAgICAgICAgICAgICAgICAgYWRkX2dudXRsc19jaXBoZXJzdWl0ZXMKKyAgICAgICAgICAgICAgICAgICAgYWRkX21iZWR0bHNfY2lwaGVyc3VpdGVzCisgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9jaXBoZXJzdWl0ZXMKKworICAgICAgICAgICAgICAgICAgICBpZiBbICJYIiAhPSAiWCRNX0NJUEhFUlMiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3NlcnZlciAibWJlZFRMUyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluICRNX0NJUEhFUlM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2NsaWVudCBtYmVkVExTICRpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBzdG9wX3NlcnZlcgorICAgICAgICAgICAgICAgICAgICBmaQorCisgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICBlY2hvICJVbmtub3duIHBlZXI6ICRQRUVSIiA+JjIKKyAgICAgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZG9uZQorICAgIGRvbmUKK2RvbmUKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCitpZiBbICRGQUlMRUQgLW5lIDAgLW8gJFNSVk1FTSAtbmUgMCBdOwordGhlbgorICAgIHByaW50ZiAiRkFJTEVEIgorZWxzZQorICAgIHByaW50ZiAiUEFTU0VEIgorZmkKKworaWYgWyAiJE1FTUNIRUNLIiAtZ3QgMCBdOyB0aGVuCisgICAgTUVNUkVQT1JUPSIsICRTUlZNRU0gc2VydmVyIG1lbW9yeSBlcnJvcnMiCitlbHNlCisgICAgTUVNUkVQT1JUPSIiCitmaQorCitQQVNTRUQ9JCgoICRURVNUUyAtICRGQUlMRUQgKSkKK2VjaG8gIiAoJFBBU1NFRCAvICRURVNUUyB0ZXN0cyAoJFNLSVBQRUQgc2tpcHBlZCRNRU1SRVBPUlQpKSIKKworRkFJTEVEPSQoKCAkRkFJTEVEICsgJFNSVk1FTSApKQorZXhpdCAkRkFJTEVECmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9SZWFkbWUteDUwOS50eHQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9SZWFkbWUteDUwOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwZDYxMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL1JlYWRtZS14NTA5LnR4dApAQCAtMCwwICsxLDkzIEBACitUaGlzIGRvY3VtZW50cyB0aGUgWC41MDkgQ0FzLCBjZXJ0aWZpY2F0ZXMsIGFuZCBDUkxTIHVzZWQgZm9yIHRlc3RpbmcuCisKK0NlcnRpZmljYXRpb24gYXV0aG9yaXRpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIHR3byBtYWluIENBcyBmb3IgdXNlIGFzIHRydXN0ZWQgcm9vdHM6CistIHRlc3QtY2EuY3J0IGFrYSAiQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQSIKKyAgdXNlcyBhIFJTQS0yMDQ4IGtleQorLSB0ZXN0LWNhMiouY3J0IGFrYSAiQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQSIKKyAgdXNlcyBhbiBFQyBrZXkgd2l0aCBOSVNUIFAtMzg0IChha2Egc2VjcDM4NHIxKQorICB2YXJpYW50cyB1c2VkIHRvIHRlc3QgdGhlIGtleVVzYWdlIGV4dGVuc2lvbgorVGhlIGZpbGVzIHRlc3QtY2FfY2F0MTIgYW5kIHRlc3QtY2FfY2F0MjEgY29udGFpbiB0aGVtIGNvbmNhdGVuYXRlZCBib3RoIHdheXMuCisKK1R3byBpbnRlcm1lZGlhdGUgQ0FzIGFyZSBzaWduZWQgYnkgdGhlbToKKy0gdGVzdC1pbnQtY2EuY3J0ICJDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IEludGVybWVkaWF0ZSBDQSIKKyAgdXNlcyBSU0EtNDA5Niwgc2lnbmVkIGJ5IHRlc3QtY2EyCistIHRlc3QtaW50LWNhMi5jcnQgIkM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgSW50ZXJtZWRpYXRlIEVDIENBIgorICB1c2VzIGFuIEVDIGtleSB3aXRoIE5JU1QgUC0yNTYsIHNpZ25lZCBieSB0ZXN0LWNhCisKK0EgdGhpcmQgaW50ZXJtZWRpYXRlIENBIGlzIHNpZ25lZCBieSB0ZXN0LWludC1jYTIuY3J0OgorLSB0ZXN0LWludC1jYTMuY3J0ICJDPVVLLCBPPW1iZWQgVExTLCBDTj1tYmVkIFRMUyBUZXN0IGludGVybWVkaWF0ZSBDQSAzIgorCitGaW5hbGx5LCBvdGhlciBDQXMgZm9yIHNwZWNpZmljIHB1cnBvc2VzOgorLSBlbmNvLWNhLXByc3RyLnBlbTogaGFzIGl0cyBDTiBlbmNvZGVkIGFzIGEgcHJpbnRhYmxlIHN0cmluZywgYnV0IGNoaWxkIGNlcnQKKyAgZW5jby1jZXJ0LXV0ZjhzdHIucGVtIGhhcyBpdHMgaXNzdWVyJ3MgQ04gZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZy4KKy0gdGVzdC1jYS12MS5jcnQ6IHYxICJDQSIsIHNpZ25zCisgICAgc2VydmVyMS12MS5jcnQ6IHYxICJpbnRlcm1lZGlhdGUgQ0EiLCBzaWducworICAgICAgICBzZXJ2ZXIyLXYxKi5jcnQ6IEVFIGNlcnQgKHdpdGhvdXQgb2Ygd2l0aCBjaGFpbiBpbiBzYW1lIGZpbGUpCistIGtleVVzYWdlLmRlY2lwaGVyT25seS5jcnQ6IGhhcyB0aGUgZGVjaXBoZXJPbmx5IGtleVVzYWdlIGJpdCBzZXQKKworRW5kLWVudGl0eSBjZXJ0aWZpY2F0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Nob3J0IGluZm9ybWF0aW9uIGZpZWxkczoKKworLSBuYW1lIG9yIHBhdHRlcm4KKy0gaXNzdWluZyBDQTogICAxICAgLT4gdGVzdC1jYS5jcnQKKyAgICAgICAgICAgICAgICAyICAgLT4gdGVzdC1jYTIuY3J0CisgICAgICAgICAgICAgICAgSTEgIC0+IHRlc3QtaW50LWNhLmNydAorICAgICAgICAgICAgICAgIEkyICAtPiB0ZXN0LWludC1jYTIuY3J0CisgICAgICAgICAgICAgICAgSTMgIC0+IHRlc3QtaW50LWNhMy5jcnQKKyAgICAgICAgICAgICAgICBPICAgLT4gb3RoZXIKKy0ga2V5IHR5cGU6IFIgLT4gUlNBLCBFIC0+IEVDCistIEMgLT4gdGhlcmUgaXMgYSBDUkwgcmV2b2tpbmcgdGhpcyBjZXJ0IChzZWUgYmVsb3cpCistIEwgLT4gQ049bG9jYWxob3N0ICh1c2VmdWwgZm9yIGxvY2FsIHRlc3Qgc2VydmVycykKKy0gUDEsIFAyIGlmIHRoZSBmaWxlIGluY2x1ZGVzIHBhcmVudCAocmVzcC4gcGFyZW50ICsgZ3JhbmRwYXJlbnQpCistIGZyZWUtZm9ybSBjb21tZW50cworCitMaXN0IG9mIGNlcnRpZmljYXRlczoKKworLSBjZXJ0X2V4YW1wbGVfbXVsdGkqLmNydDogMS9PIFI6IHN1YmplY3RBbHROYW1lCistIGNlcnRfZXhhbXBsZV93aWxkY2FyZC5jcnQ6IDEgUjogd2lsZGNhcmQgaW4gc3ViamVjdCdzIENOCistIGNlcnRfbWQqLmNydCwgY2VydF9zaGEqLmNydDogMSBSOiBzaWduYXR1cmUgaGFzaAorLSBjZXJ0X3YxX3dpdGhfZXh0LmNydDogMSBSOiB2MSB3aXRoIGV4dGVuc2lvbnMgKGlsbGVnYWwpCistIGNsaTIuY3J0OiAyIEU6IGJhc2ljCistIGVuY28tY2VydC11dGY4c3RyLnBlbTogc2VlIGVuY28tY2EtcHJzdHIucGVtIGFib3ZlCistIHNlcnZlcjEqLmNydDogMSogUiBDKiBQMSo6IG1pc2MgKihzZXJ2ZXIxLXYxIHNlZSB0ZXN0LWNhLXYxLmNydCBhYm92ZSkKKyAgICAqQ1JMIGZvcjogLmNlcnRfdHlwZS5jcnQsIC5jcnQsIC5rZXlfdXNhZ2UuY3J0LCAudjEuY3J0CisgICAgUDEgb25seSBmb3IgX2NhLmNydAorLSBzZXJ2ZXIyLXYxKi5jcnQ6IE8gUjogc2VlIHRlc3QtY2EtdjEuY3J0IGFib3ZlCistIHNlcnZlcjIqLmNydDogMSBSIEw6IG1pc2MKKy0gc2VydmVyMy5jcnQ6IDEgRSBMOiBFQyBjZXJ0IHNpZ25lZCBieSBSU0EgQ0EKKy0gc2VydmVyNC5jcnQ6IDIgUiBMOiBSU0EgY2VydCBzaWduZWQgYnkgRUMgQ0EKKy0gc2VydmVyNSouY3J0OiAyKiBFIEw6IG1pc2MgKihleGNlcHQgc2VydmVyNS1zZWxmc2lnbmVkKQorICAgIC1zaGEqOiBoYXNoZXMKKyAgICAtZWt1KjogZXh0ZW5kZUtleVVzYWdlIChjbGkvc3J2ID0gd3d3IGNsaWVudC9zZXJ2ZXIsIGNzID0gY29kZXNpZ24sIGV0YykKKyAgICAta3UqOiBrZXlVc2FnZSAoZHMgPSBzaWduYXR1cmVzLCBrZS9rYSA9IGtleSBleGNoYW5nZS9hZ3JlZW1lbnQpCistIHNlcnZlcjYtc3MtY2hpbGQuY3J0OiBPIEU6ICJjaGlsZCIgb2Ygbm9uLUNBIHNlcnZlcjUtc2VsZnNpZ25lZAorLSBzZXJ2ZXI2LmNydCwgc2VydmVyNi5wZW06IDIgRSBMIEM6IHJldm9rZWQKKy0gc2VydmVyNyouY3J0OiBJMSBFIEwgUDEqOiBFQyBzaWduZWQgYnkgUlNBIHNpZ25lZCBieSBFQworICAgICpQMSBleGNlcHQgNy5jcnQsIFAyIF9pbnQtY2FfY2EyLmNydAorICAgICpfc3BhY2U6IHdpdGggUEVNIGVycm9yKHMpCistIHNlcnZlcjgqLmNydDogSTIgUiBMOiBSU0Egc2lnbmVkIGJ5IEVDIHNpZ25lZCBieSBSU0EgKFAxIGZvciBfaW50LWNhMikKKy0gc2VydmVyOSouY3J0OiAxIFIgQyogTCBQMSo6IHNpZ25lZCB1c2luZyBSU0FTU0EtUFNTCisgICAgKkNSTCBmb3I6IDkuY3J0LCAtYmFkc2lnbiwgLXdpdGgtY2EgKFAxKQorLSBzZXJ2ZXIxMCouY3J0OiBJMyBFIEwgUDIvUDMKKworQ2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaWduaW5nIENBIGluIHBhcmVudGhlc2VzIChzYW1lIG1lYW5pbmcgYXMgY2VydGlmaWNhdGVzKS4KKworLSBjcmwtZWMtc2hhKi5wZW06ICgyKSBzZXJ2ZXI2LmNydAorLSBjcmwtZnV0dXJlLnBlbTogKDIpIHNlcnZlcjYuY3J0ICsgdW5rbm93bgorLSBjcmwtcnNhLXBzcy0qLnBlbTogKDEpIHNlcnZlcjl7LGJhZHNpZ24sd2l0aC1jYX0uY3J0ICsgY2VydF9zaGEzODQuY3J0ICsgdW5rbm93bgorLSBjcmwucGVtLCBjcmxfZXhwaXJlZC5wZW06ICgxKSBzZXJ2ZXIxeywuY2VydF90eXBlLC5rZXlfdXNhZ2UsLnYxfS5jcnQgKyB1bmtub3duCistIGNybF9tZCoucGVtOiBjcmxfc2hhKi5wZW06ICgxKSBzYW1lIGFzIGNybC5wZW0KKy0gY3J0X2NhdF8qLnBlbTogKDErMikgY29uY2F0ZW5hdGlvbnMgaW4gdmFyaW91cyBvcmRlcnM6CisgICAgZWMgPSBjcmwtZWMtc2hhMjU2LnBlbSwgZWNmdXQgPSBjcmwtZnV0dXJlLnBlbQorICAgIHJzYSA9IGNybC5wZW0sIHJzYWJhZHBlbSA9IHNhbWUgd2l0aCBwZW0gZXJyb3IsIHJzYWV4cCA9IGNybF9leHBpcmVkLnBlbQorCitOb3RlOiBjcmxfZnV0dXJlIHdvdWxkIHJldm9rZSBzZXJ2ZXI5IGFuZCBjZXJ0X3NoYTM4NC5jcnQgaWYgc2lnbmVkIGJ5IENBIDEKKyAgICAgIGNybC1yc2EtcHNzKiB3b3VsZCByZXZva2Ugc2VydmVyNi5jcnQgaWYgc2lnbmVkIGJ5IENBIDIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2JpdHN0cmluZy1pbi1kbi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9iaXRzdHJpbmctaW4tZG4ucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOThhYTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9iaXRzdHJpbmctaW4tZG4ucGVtCkBAIC0wLDAgKzEsNTEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQ0KK01JSUVBVENDQXVtZ0F3SUJBZ0lCQWpBTkJna3Foa2lHOXcwQkFRVUZBREJ4TVJNd0VRWURWUVFEREFwVVpYTjANCitJRU5CSURBeE1SRXdEd1lEVlFRSURBaEZZMjVwZG05eWNERUxNQWtHQTFVRUJoTUNXRmd4SGpBY0Jna3Foa2lHDQorOXcwQkNRRVdEM1JqWVVCbGVHRnRjR3hsTG1OdmJURWFNQmdHQTFVRUNnd1JWR1Z6ZENCRFFTQkJkWFJvYjNKcA0KK2RIa3dIaGNOTVRVd016RXhNVEl3TmpVeFdoY05NalV3TXpBNE1USXdOalV4V2pDQm16RUxNQWtHQTFVRUJoTUMNCitXRmd4RERBS0JnTlZCQW9NQTNSallURVJNQThHQTFVRUNBd0lSV051YVhadmNuQXhEREFLQmdOVkJBc01BMVJEDQorUVRFUE1BMEdBMVVFQXd3R1EyeHBaVzUwTVNFd0h3WUpLb1pJaHZjTkFRa0JGaEpqYkdsbGJuUkFaWGhoYlhCcw0KK1pTNWpiMjB4RXpBUkJnTlZCQVVUQ2pjeE1ERXdNVEl5TlRVeEZEQVNCZ05WQkMwREN3QTNNVEF4TURFeU1qVTENCitNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW5RUzBKTGI4RHF5OFYybXN6a1drDQorVjhjL05QUWNHM2l2dWVYWkhxT1Q5SlRpUHFyaWdHY0xIdGxtbGFKMGFVVXhpeDdxNjBhT2RzMDQxVEZ5ZWtuVA0KK1NVRllZNHBwT2hpUCtmT3BXS1B2NFpNd2hTSTJYemNnWWhRU05IVjBsSUcxd2U5UkFBZnVtb21ETXE3b01KaGINCitFR2YwaWhpYmJ3WlhQVXdCbG0xMEdhQjRLOTNQTlk4Qno0ZWtCeHpRMVdKa1E1TEdzUW5WWlN1TG52cDVkV1NlDQorSjJheHh5WTRoUFhSMzBqekV5WnZ5NGt2NG56QXU1bHFaNVhLTHJSTzRUS3dacnRyK0NDUFZrUEpSRTM2cldZdA0KK3RRYUpFRXBOT28wWlBwVHRHNkY4L3RHaDVyOGpGeC9mNndHK255QU5KSjk4a0VQOGk2VFBqUnJnKzY5N21MY2QNCitpUUlEQVFBQm8za3dkekFKQmdOVkhSTUVBakFBTURZR0ExVWRId1F2TUMwd0s2QXBvQ2VHSldoMGRIQTZMeTlqDQorY213dVpYaGhiWEJzWlM1amIyMHZkR1Z6ZEY5allWOHdNUzVqY213d0V3WURWUjBsQkF3d0NnWUlLd1lCQlFVSA0KK0F3SXdIUVlEVlIwUkJCWXdGSUVTWTJ4cFpXNTBRR1Y0WVcxd2JHVXVZMjl0TUEwR0NTcUdTSWIzRFFFQkJRVUENCitBNElCQVFCeVNFTENuVTgvUHRHSUczZHdoSkVOT1NVNVI3dzhqcFJYeEhDdVNCUitXNm51VUNJU3oreitFZEYvDQorQTdBT0pEQVN1Uys0Z2tyU1NtUWhHRnBmN0U1VmJGOHRyVlpoTEFaclhxS01jVXJlS0g2djBJOE1BVVhtSXMzRw0KK3RxaUJHZjdwU1lKTjlEdlZPT2dBTmpkeTZUSHVVell2NXFTdkJaNHBOWUVmSFNsTU5yVjduaXluZDhkZ1BPTUwNCitwQTdHVWZ2NWsybU1rTWJTRDE1cFRNZ2NhdnJCS1lneXFjdkYxQzNxZ2hmb0w1K2kzOEg4c0t6RjhoeTd3SHRFDQorRVNIdEJxMjBSWUEzbTBVY0EwZTY0R2Nhbk8yUHMvQVFWQmM3cU1lSGJxbnFqM3VVaHRUa1FjTVVXbk1neTFOUg0KKzVSYnpvTE1PeHE3aG9PQ3lJYVFlTS93Z3hlR0UNCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tDQorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KK01JSUVwQUlCQUFLQ0FRRUFuUVMwSkxiOERxeThWMm1zemtXa1Y4Yy9OUFFjRzNpdnVlWFpIcU9UOUpUaVBxcmkNCitnR2NMSHRsbWxhSjBhVVV4aXg3cTYwYU9kczA0MVRGeWVrblRTVUZZWTRwcE9oaVArZk9wV0tQdjRaTXdoU0kyDQorWHpjZ1loUVNOSFYwbElHMXdlOVJBQWZ1bW9tRE1xN29NSmhiRUdmMGloaWJid1pYUFV3QmxtMTBHYUI0SzkzUA0KK05ZOEJ6NGVrQnh6UTFXSmtRNUxHc1FuVlpTdUxudnA1ZFdTZUoyYXh4eVk0aFBYUjMwanpFeVp2eTRrdjRuekENCit1NWxxWjVYS0xyUk80VEt3WnJ0citDQ1BWa1BKUkUzNnJXWXR0UWFKRUVwTk9vMFpQcFR0RzZGOC90R2g1cjhqDQorRngvZjZ3RytueUFOSko5OGtFUDhpNlRQalJyZys2OTdtTGNkaVFJREFRQUJBb0lCQUY3aTNNbmpHbWJ6MDgwdg0KK094SmIyM2lBRzU0d2RsdlRqcjNVUEdUYmpTbWNYeXhuc0FEUVJGUWNKSFlBZWtDelk4RWlxZXdMODBPdnVNeDgNCisyU1UxUDgxaEE3MERnNXRzQkhXVDNaNkhVd3NLRzZRWWpLcjFjVWhUd0x5YXpoeUFWZ29nU042djdHek85TTNJDQorRE9CdzhYYjBtejVvcUdWcmU0UzdUYXBOOG44Wkc1b1dtMFhLR0FDWHkwS2J6WTBLdldka1V6dW1GUThYL0FSRQ0KK0ZzV3l1K082OUViTXFaUlVLdTQ1U3JjdWJzZFZHak93c2VaSGttcDVWNnBjNlEvT3JUSFpxWEp0RHZhNVVJUnENCisrTG9mNXNjeTlqaXd3Um5NL2tsdmgyM216MHlTVTRZQTM2NDVtNUtxeVdSNFlKQ1IxTW5NQU5tWFVTZVlXZll6DQorMTkrUjFnRUNnWUVBem04M2xJN2VJaFRIMzhIMC9qRnBmM1I3dk5qUFgzVFI1d2FhNEVYc0N4aFRPcG9MODltUg0KK2lObXpIMGFPQzRPUjhyei85UENud210SDFseVE0ci9Sb2tCbUNwM3BCeGVXU2xlbkZmVjNyTENlRURvMFEvT0wNCitTWDVETDRJYlpEMFZtTkR0NjA2V1M3QUV2OTNHaHBOMDNBbnc2a2dIUVVtMWwwMzBQUjlEWVpFQ2dZRUF3cmdPDQorL1J5Qi9FaHc3c21seXNaYjJzbjFsdmQ2ejhmZytwY3U4Wk5SS09EYVlDQ09iOHAxbG5Icm5JUWRFbWpobG1WcA0KK0hBRXVKNWp4Q2IrbHlydVYrZGx4KzBXL3A2bEh0S3IwaUJIRzhFRmtIbmpONlkrNTlRdTBIZlNtMHBadzdGdHINCitRY1VEUHVESmtUVlVBdnJacWNpV2x3elRXQ0M5S1lYdGFzVCtBSGtDZ1lFQW5QODBkQVVicHl2S3ZyL1J4U2hyDQorSllXL1BXWmVnQ2htSXArQlZpT1hXdkRMQzN4d3JxbSs1eWM1OVFWQnJqd0gyV1luKzI2ekIwZHp3UEZ4TnlIUA0KK0d1aURNbnZaNTR6bXZlOWZvWEduN0d2K0tqVTUzcHZ3U0pxQUdqZUhBWHI3VzljNXVvVndCR3Yva0xQbjhoMWUNCisrS0dPMlg2aUZlTXErY0ZOaU5hbjlpRUNnWUJqK29HbnNLV0ZWZVMybHM4THlNR05Hem1BWkYyb3BpWjhSSGdVDQorRGVJVUxTK3pQOFFpM2o5MkdkUXlMeHVHUWxmaUV2dmZKelA5bk9mV2E1TEMvNEpJSVVBSEZvOExsVDErSkhFZQ0KK0ZKS2k5ZEJrWFA3Tk44RHhjeXJ1WHBueGN0RlVhclF0dHV5dHNsbU10MmNGaUt1T0k3SStxSlV6b011L3NFWngNCitGZWlkY1FLQmdRQ3VyYWxtdGJsNG54am4zYVIvWmdGVEFLQ0w5V2FKUGg1aEZKOXE0VXVXeEpkQlg1ejNFeTMvDQorNzBlaExLWVB1bWptWnRYeW56ejRCVFdqMVc5WCt0Z2ovNDk5dXpWNkxkUUVSR2pUNldWeTh4UjlSRUxXVzBhbg0KK045TjFJQWM0cVRTamJJNEVJTXdNQlNBb0ZmQ3V4L2pmRGtHNGcrUkRucFY5MnNxeHoyQ3RLZz09DQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGkuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9leGFtcGxlX211bHRpLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWUxOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9leGFtcGxlX211bHRpLmNydApAQCAtMCwwICsxLDgwIEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDE3ICgweDExKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IE1heSAxMCAxMzoyMzo0MSAyMDEyIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogTWF5IDExIDEzOjIzOjQxIDIwMjIgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPXd3dy5leGFtcGxlLmNvbQorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmI5OjNjOjRhOmM1OmM4OmEzOjhlOjkwOjE3OmE0OjllOjUyOmFhOjcxOgorICAgICAgICAgICAgICAgICAgICA3NToyNjo2MTo4MDplNzpjNzpiNTo2ZDo4YzpmZjphYTpiNjo0MToyNjpiNzoKKyAgICAgICAgICAgICAgICAgICAgYmU6MTE6YWQ6NWM6NzM6MTY6MGM6NjQ6MTE6NDg6MDQ6ZmY6ZDY6ZTE6M2I6CisgICAgICAgICAgICAgICAgICAgIDA1OmRiOjg5OmJiOmIzOjk3OjA5OmQ1OjFjOjE0OmRkOjY4Ojg3OjM5OmIwOgorICAgICAgICAgICAgICAgICAgICAzZDo3MTpjYjplMjo3NjpkMDoxYTpkODoxODoyZDo4MDoxYjo1NDpmNjplNToKKyAgICAgICAgICAgICAgICAgICAgNDQ6OWE6ZjE6Y2I6YWY6NjE6MmU6ZGY6NDk6MGQ6OWQ6MDk6Yjc6ZWQ6YjE6CisgICAgICAgICAgICAgICAgICAgIGZkOjNjOmZkOjNjOmZhOjI0OmNmOjVkOmJmOjdjOmU0OjUzOmU3OjI1OmI1OgorICAgICAgICAgICAgICAgICAgICBlYTo0NDoyMjplOToyNjpkMzplYToyMDo5NDo5ZTplNjo2MTo2NzpiYToyZToKKyAgICAgICAgICAgICAgICAgICAgMDc6Njc6MGI6MDM6MmY6YTI6MDk6ZWQ6ZjA6MzM6OGY6MGI6Y2U6MTA6ZWY6CisgICAgICAgICAgICAgICAgICAgIDY3OmE0OmM2OjA4OmRhOmMxOmVkOmMyOjNmOmQ3OjRhOmRkOjE1OjNkOmY5OgorICAgICAgICAgICAgICAgICAgICA1ZToxYzo4MTo2MDo0NjozZTpiNTpiMzozZDoyZjphNjpkZTo0NzoxYzpiYzoKKyAgICAgICAgICAgICAgICAgICAgOTI6YWU6ZWI6ZGY6Mjc6NmI6MTY6NTY6Yjc6ZGM6ZWM6ZDE6NTU6NTc6YTU6CisgICAgICAgICAgICAgICAgICAgIDZlOmVjOjc1OjI1OmY1OmI3OjdiOmRmOmFiOmQyOjNhOjVhOjkxOjk4OjdkOgorICAgICAgICAgICAgICAgICAgICA5NzoxNzowYjoxMzowYTphNzo2Yjo0YTo4YjpjMTo0NzozMDpmYjozYTpmODoKKyAgICAgICAgICAgICAgICAgICAgNDE6MDQ6ZDU6YzE6ZGY6Yjg6MWQ6YmY6N2I6MDE6YTU6NjU6YTI6ZTA6MWU6CisgICAgICAgICAgICAgICAgICAgIDM2OmI3OmE2OjVjOmNjOjMwOjVhOmY4OmNkOjZmOmNkOmYxOjE5OjYyOjI1OgorICAgICAgICAgICAgICAgICAgICBjYTowMTplMzozNTo3ZjpmYToyMDpmNTpkYzpmZDo2OTpiMjo2YTowMDo3ZDoKKyAgICAgICAgICAgICAgICAgICAgMTc6ZjcKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAgICAgICAgICAgICBDQTpGQUxTRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIDdEOkU0OjlDOjZCOkU2OkY5OjcxOjdEOjQ2OkQyOjEyOjNEOkFEOjZCOjFEOkZEOkMyOkFBOjc4OjRDCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lOiAKKyAgICAgICAgICAgICAgICBETlM6ZXhhbXBsZS5jb20sIEROUzpleGFtcGxlLm5ldCwgRE5TOiouZXhhbXBsZS5vcmcKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDRmOjA5OmNiOjdhOmQ1OmVlOmY1OmVmOjYyOjBkOmRjOjdiOmEyOjg1OmQ2OjhjOmNhOjk1OgorICAgICAgICAgYjQ6NmI6ZGE6MTE6NWI6OTI6MDA6NzU6MTM6Yjk6Y2E6MGI6Y2U6ZWE6ZmI6YzM6MWY6ZTI6CisgICAgICAgICAzZjo3ZjoyMTo3NDo3OTplMjplNjpiYzpkYTowNjplNToyZjo2ZjpmNjo1NTpjNjo3MzozOToKKyAgICAgICAgIGNmOjQ4OmJjOjBkOjJmOjBjOmQyOjdhOjA2OmMzOjRhOjRjOmQ5OjQ4OjVkOmEwOmQwOjczOgorICAgICAgICAgODk6ZTQ6ZDQ6ODU6MWQ6OTY6OWE6MGU6NTc6OTk6YzY6NmY6MWQ6MjE6Mjc6MWY6OGQ6MDU6CisgICAgICAgICAyOTplODo0MDphZTo4MjozOTo2ODpjMzo5NzowNzpjZjozYzo5Mzo0YzoxYTpkZjoyZjphNjoKKyAgICAgICAgIGE0OjU1OjQ4OjdmOjdjOjhjOjFhOmM5OjIyOmRhOjI0OmNkOjkyOjM5OmM2OjhhOmVjOmIwOgorICAgICAgICAgOGQ6ZjU6Njk6ODI6Njc6Y2I6MDQ6ZWU6ZGU6NTM6NDE6OTY6YzE6Mjc6ZGM6MmY6ZmU6MzM6CisgICAgICAgICBmYTpkMzowZTpiODpkNDozMjphOTo4NDoyODo1MzphNTpmMDpkMTo4OTpkNTphMjo5ODplNzoKKyAgICAgICAgIDE2OjkxOmJiOjljOmMwOjQxOjhlOjhjOjU4OmFjOmZmOmUzOmRkOjJlOjdhOmFiOmIwOmI5OgorICAgICAgICAgNzE6NzY6YWQ6MGY6Mjc6MzM6Zjc6YTk6Mjk6ZDM6YzA6NzY6YzA6YmY6MDY6NDA6N2M6MGU6CisgICAgICAgICBkNTphNDo3Yzo4YTplMjozMjo2ZToxNjphZTpkYTo2NDoxZjpiMDo1NTo3YzpkYjpkZDpmMToKKyAgICAgICAgIGE0OmJhOjQ0OjdjOmIzOjk5OjU4OmQyOjM0OjZlOjAwOmVhOjk3OjZjOjE0OjNhOmYyOjEwOgorICAgICAgICAgMWU6MGE6YTI6NDk6MTA6NzY6MDE6ZjQ6ZjI6Yzg6MTg6ZmQ6Y2M6NjM6NDY6MTI6OGI6MDk6CisgICAgICAgICAxYjpmMTo5NDplNgorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEY2pDQ0FscWdBd0lCQWdJQkVUQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEl3TlRFd01UTXlNelF4V2hjTk1qSXdOVEV4TVRNeU16UXhXakE2TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdEQVdCZ05WQkFNVEQzZDNkeTVsZUdGdGNHeGxMbU52YlRDQ0FTSXdEUVlKCitLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFMazhTc1hJbzQ2UUY2U2VVcXB4ZFNaaGdPZkh0VzJNCisvNnEyUVNhM3ZoR3RYSE1XREdRUlNBVC8xdUU3QmR1SnU3T1hDZFVjRk4xb2h6bXdQWEhMNG5iUUd0Z1lMWUFiCitWUGJsUkpyeHk2OWhMdDlKRFowSnQrMngvVHo5UFBva3oxMi9mT1JUNXlXMTZrUWk2U2JUNmlDVW51WmhaN291CitCMmNMQXkraUNlM3dNNDhMemhEdlo2VEdDTnJCN2NJLzEwcmRGVDM1WGh5QllFWSt0Yk05TDZiZVJ4eThrcTdyCiszeWRyRmxhMzNPelJWVmVsYnV4MUpmVzNlOStyMGpwYWtaaDlseGNMRXdxbmEwcUx3VWN3K3pyNFFRVFZ3ZCs0CitIYjk3QWFWbG91QWVOcmVtWE13d1d2ak5iODN4R1dJbHlnSGpOWC82SVBYYy9XbXlhZ0I5Ri9jQ0F3RUFBYU9CCitnVEIvTUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZIM2tuR3ZtK1hGOVJ0SVNQYTFySGYzQ3FuaE1NQjhHCitBMVVkSXdRWU1CYUFGTFJhNUtXejN0SlM5cm5WcHBVUDZ6Njh4LzMvTURJR0ExVWRFUVFyTUNtQ0MyVjRZVzF3CitiR1V1WTI5dGdndGxlR0Z0Y0d4bExtNWxkSUlOS2k1bGVHRnRjR3hsTG05eVp6QU5CZ2txaGtpRzl3MEJBUVVGCitBQU9DQVFFQVR3bkxldFh1OWU5aURkeDdvb1hXak1xVnRHdmFFVnVTQUhVVHVjb0x6dXI3d3gvaVAzOGhkSG5pCis1cnphQnVVdmIvWlZ4bk01ejBpOERTOE0wbm9HdzBwTTJVaGRvTkJ6aWVUVWhSMldtZzVYbWNadkhTRW5INDBGCitLZWhBcm9JNWFNT1hCODg4azB3YTN5K21wRlZJZjN5TUdza2kyaVROa2puR2l1eXdqZlZwZ21mTEJPN2VVMEdXCit3U2ZjTC80eit0TU91TlF5cVlRb1U2WHcwWW5Wb3BqbkZwRzduTUJCam94WXJQL2ozUzU2cTdDNWNYYXREeWN6Cis5NmtwMDhCMndMOEdRSHdPMWFSOGl1SXliaGF1Mm1RZnNGVjgyOTN4cExwRWZMT1pXTkkwYmdEcWwyd1VPdklRCitIZ3FpU1JCMkFmVHl5Qmo5ekdOR0Vvc0pHL0dVNWc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9leGFtcGxlX211bHRpX25vY24uY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9leGFtcGxlX211bHRpX25vY24uY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MzQ4NDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGlfbm9jbi5jcnQKQEAgLTAsMCArMSwxMyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCL1RDQ0FXYWdBd0lCQWdJSkFQZkdmL2pwcVdQNU1BMEdDU3FHU0liM0RRRUJCUVVBTUEweEN6QUpCZ05WCitCQVlUQWs1TU1CNFhEVEUwTURFeU1qRXdNRFF6TTFvWERUSTBNREV5TWpFd01EUXpNMW93RFRFTE1Ba0dBMVVFCitCaE1DVGt3d2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFOMFJpcCtadXJCb3lpcnFPMnB0CitXWmZ0VHNsVTVBM3V6cUI5b0I2cTZBN0N1eE5BMjRvU2pva1RKS1hGOWZyWTlaRFh5TXJMeGY2VEhhL2FFaU56CitVbmxHR3JxZ1Z5dDJGakd6cUsvbk9Kc0lpMk9aT2dvbDdrWFNHRmk2dVpNYTdkUlltbU1iTi96M0ZBaWZoV1ZKCis4MWt5YmRIZzZHM2VVdTFtdEtrTDJrQ1ZBZ01CQUFHalpUQmpNQWtHQTFVZEV3UUNNQUF3Q3dZRFZSMFBCQVFECitBZ1hnTUVrR0ExVWRFUVJDTUVDQ0hIZDNkeTV6YUc5MGIydGhiaTFpY21GMWJuTmphSGRsYVdjdVpHV0NGSGQzCitkeTV0WVhOemFXMXZMV0ZpWVhSbExtVjFod1RBcUFFQmh3VEFxRVdRTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCCitBQmp4MXl0cnFDeUZDNS8wY2pXbmJMSzl2c3ZMbnkyWmlrRGV3ZlJ4cUo1ekF4R1dMcUhPcjFTbVVtdTJEcnZCCitia1Q5ZzV6MTkraU1oUG56SnoxeDdRMm03V1RJSlR1VVBLK2hLWkpBVERMTmhaODZoNU5rdzhrOVl6S2NPclBtCitFSXFzeTU1Q1NnTFUwbnRsanFTQnZTYjRpZnJGMU5uSVdlajJsU2ZONnIrMworLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9leGFtcGxlX3dpbGRjYXJkLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV93aWxkY2FyZC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5NWU4YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV93aWxkY2FyZC5jcnQKQEAgLTAsMCArMSw3NyBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAxMiAoMHhjKQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBGZWIgIDcgMTY6MDY6MzYgMjAxMiBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEZlYiAgNyAxNjowNjozNiAyMDIyIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj0qLmV4YW1wbGUuY29tCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6Yjk6M2M6NGE6YzU6Yzg6YTM6OGU6OTA6MTc6YTQ6OWU6NTI6YWE6NzE6CisgICAgICAgICAgICAgICAgICAgIDc1OjI2OjYxOjgwOmU3OmM3OmI1OjZkOjhjOmZmOmFhOmI2OjQxOjI2OmI3OgorICAgICAgICAgICAgICAgICAgICBiZToxMTphZDo1Yzo3MzoxNjowYzo2NDoxMTo0ODowNDpmZjpkNjplMTozYjoKKyAgICAgICAgICAgICAgICAgICAgMDU6ZGI6ODk6YmI6YjM6OTc6MDk6ZDU6MWM6MTQ6ZGQ6Njg6ODc6Mzk6YjA6CisgICAgICAgICAgICAgICAgICAgIDNkOjcxOmNiOmUyOjc2OmQwOjFhOmQ4OjE4OjJkOjgwOjFiOjU0OmY2OmU1OgorICAgICAgICAgICAgICAgICAgICA0NDo5YTpmMTpjYjphZjo2MToyZTpkZjo0OTowZDo5ZDowOTpiNzplZDpiMToKKyAgICAgICAgICAgICAgICAgICAgZmQ6M2M6ZmQ6M2M6ZmE6MjQ6Y2Y6NWQ6YmY6N2M6ZTQ6NTM6ZTc6MjU6YjU6CisgICAgICAgICAgICAgICAgICAgIGVhOjQ0OjIyOmU5OjI2OmQzOmVhOjIwOjk0OjllOmU2OjYxOjY3OmJhOjJlOgorICAgICAgICAgICAgICAgICAgICAwNzo2NzowYjowMzoyZjphMjowOTplZDpmMDozMzo4ZjowYjpjZToxMDplZjoKKyAgICAgICAgICAgICAgICAgICAgNjc6YTQ6YzY6MDg6ZGE6YzE6ZWQ6YzI6M2Y6ZDc6NGE6ZGQ6MTU6M2Q6Zjk6CisgICAgICAgICAgICAgICAgICAgIDVlOjFjOjgxOjYwOjQ2OjNlOmI1OmIzOjNkOjJmOmE2OmRlOjQ3OjFjOmJjOgorICAgICAgICAgICAgICAgICAgICA5MjphZTplYjpkZjoyNzo2YjoxNjo1NjpiNzpkYzplYzpkMTo1NTo1NzphNToKKyAgICAgICAgICAgICAgICAgICAgNmU6ZWM6NzU6MjU6ZjU6Yjc6N2I6ZGY6YWI6ZDI6M2E6NWE6OTE6OTg6N2Q6CisgICAgICAgICAgICAgICAgICAgIDk3OjE3OjBiOjEzOjBhOmE3OjZiOjRhOjhiOmMxOjQ3OjMwOmZiOjNhOmY4OgorICAgICAgICAgICAgICAgICAgICA0MTowNDpkNTpjMTpkZjpiODoxZDpiZjo3YjowMTphNTo2NTphMjplMDoxZToKKyAgICAgICAgICAgICAgICAgICAgMzY6Yjc6YTY6NWM6Y2M6MzA6NWE6Zjg6Y2Q6NmY6Y2Q6ZjE6MTk6NjI6MjU6CisgICAgICAgICAgICAgICAgICAgIGNhOjAxOmUzOjM1OjdmOmZhOjIwOmY1OmRjOmZkOjY5OmIyOjZhOjAwOjdkOgorICAgICAgICAgICAgICAgICAgICAxNzpmNworICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOkZBTFNFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgN0Q6RTQ6OUM6NkI6RTY6Rjk6NzE6N0Q6NDY6RDI6MTI6M0Q6QUQ6NkI6MUQ6RkQ6QzI6QUE6Nzg6NEMKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgOTE6YjM6ODQ6NWM6NWQ6NjA6ZjI6YTU6MGE6NGE6ZGM6ZDY6YzY6NzU6ZGE6MzQ6NTI6NzI6CisgICAgICAgIDZjOjBlOjYwOjRmOmVmOjBlOjU1OmYzOjRiOmJmOmQwOjQwOmU3OjkxOjJjOmE3Ojk0OjhmOgorICAgICAgICAzZDpkYjowYTplYzpiMjpmNTo4MzphNzphMTozMzo2MTo5NjozNzo1NzoxNDo4MDo1YjplNzoKKyAgICAgICAgYmM6ZTE6ZDM6MmM6MzY6MzI6NmY6ZWY6N2E6MDA6OTk6MzM6MTU6ZmM6Mzg6MjA6ZGY6NzQ6CisgICAgICAgIDdkOjNkOjBmOjgxOmQwOmI0OmZkOmI2OjQ2OmYxOmM1OmI4OmJjOmRlOjc0OmEyOjQxOmE3OgorICAgICAgICBjODo1MTpkYToyMDoxMjo4MjozZTowYzo4Yzo0ODpkYToxOTpiNjo1MjplOTo0Zjo2NzpjMToKKyAgICAgICAgMjg6OWU6MjA6YjY6Y2U6YmU6ODk6YmQ6NjQ6ZDc6MDU6M2U6ODc6YWY6YmE6MmI6NWQ6YWE6CisgICAgICAgIGZlOjYyOjY2OmZiOmE2Ojc1OmFkOjg5OmExOjE4OmU4Ojc4OjU0OmVhOmRmOjBhOjg1OmU5OgorICAgICAgICAzMjozMjphODoxYTpjZDozNTo4MTpmODphODpkYTpkMToxNjo4YTo2MzplNzo2NzpkYTo2ZToKKyAgICAgICAgZTE6M2I6MWM6MzE6MjA6OTk6ZWU6ZTI6YjI6ZmI6ODI6YzU6MjE6ZTI6NjM6NGM6NjE6MTU6CisgICAgICAgIDRkOjUzOmFkOmRkOjE1OjdmOjBiOmI2OjMzOjQzOmFkOjI3OjhhOmIxOmFmOjkzOjE3OjcyOgorICAgICAgICBjNDpiZTozMToyNjo5MzozYzo3ZDpmYzpkNTozZDpjZjowYjpiZTpjNTo3YjplOTpiNDpmODoKKyAgICAgICAgZjM6MzA6ZjI6ZjU6YTI6Mjc6ZWI6OWE6NzE6ZmM6N2Y6Nzk6NWU6ODg6YzU6YTY6MmQ6MzM6CisgICAgICAgIDU3OmJhOjM4OjA2OmU2OmFkOjBiOjk2Ojk3OjlkOmNjOjk0OjdiOjgzOjA5OjE3OmE2OmVlOgorICAgICAgICBjZTpiYjowZjozNgorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlET3pDQ0FpT2dBd0lCQWdJQkREQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEl3TWpBM01UWXdOak0yV2hjTk1qSXdNakEzTVRZd05qTTJXakE0TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEZqQVVCZ05WQkFNVURTb3VaWGhoYlhCc1pTNWpiMjB3Z2dFaU1BMEdDU3FHCitTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDNVBFckZ5S09Pa0Jla25sS3FjWFVtWVlEbng3VnRqUCtxCit0a0VtdDc0UnJWeHpGZ3hrRVVnRS85YmhPd1hiaWJ1emx3blZIQlRkYUljNXNEMXh5K0oyMEJyWUdDMkFHMVQyCis1VVNhOGN1dllTN2ZTUTJkQ2JmdHNmMDgvVHo2Sk05ZHYzemtVK2NsdGVwRUl1a20wK29nbEo3bVlXZTZMZ2RuCitDd012b2dudDhET1BDODRRNzJla3hnamF3ZTNDUDlkSzNSVTkrVjRjZ1dCR1ByV3pQUyttM2tjY3ZKS3U2OThuCitheFpXdDl6czBWVlhwVzdzZFNYMXQzdmZxOUk2V3BHWWZaY1hDeE1LcDJ0S2k4RkhNUHM2K0VFRTFjSGZ1QjIvCitld0dsWmFMZ0hqYTNwbHpNTUZyNHpXL044UmxpSmNvQjR6Vi8raUQxM1AxcHNtb0FmUmYzQWdNQkFBR2pUVEJMCitNQWtHQTFVZEV3UUNNQUF3SFFZRFZSME9CQllFRkgza25Hdm0rWEY5UnRJU1BhMXJIZjNDcW5oTU1COEdBMVVkCitJd1FZTUJhQUZMUmE1S1d6M3RKUzlyblZwcFVQNno2OHgvMy9NQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUJBUUNSCitzNFJjWFdEeXBRcEszTmJHZGRvMFVuSnNEbUJQN3c1VjgwdS8wRURua1N5bmxJODkyd3Jzc3ZXRHA2RXpZWlkzCitWeFNBVytlODRkTXNOakp2NzNvQW1UTVYvRGdnMzNSOVBRK0IwTFQ5dGtieHhiaTgzblNpUWFmSVVkb2dFb0krCitESXhJMmhtMlV1bFBaOEVvbmlDMnpyNkp2V1RYQlQ2SHI3b3JYYXIrWW1iN3BuV3RpYUVZNkhoVTZ0OEtoZWt5CitNcWdhelRXQitLamEwUmFLWStkbjJtN2hPeHd4SUpudTRyTDdnc1VoNG1OTVlSVk5VNjNkRlg4THRqTkRyU2VLCitzYStURjNMRXZqRW1reng5L05VOXp3dSt4WHZwdFBqek1QTDFvaWZybW5IOGYzbGVpTVdtTFROWHVqZ0c1cTBMCitscGVkekpSN2d3a1hwdTdPdXc4MgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWE3N2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X21kMi5jcnQKQEAgLTAsMCArMSw3NyBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiA5ICgweDkpCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IG1kMldpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSnVsIDEyIDEwOjU2OjU5IDIwMDkgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBKdWwgMTIgMTA6NTY6NTkgMjAxMSBHTVQKKyAgICAgICAgU3ViamVjdDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgQ2VydCBNRDIKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgyMDQ4IGJpdCk6CisgICAgICAgICAgICAgICAgICAgIDAwOmRjOjEzOjc0OjgxOmM2OjEyOmY2OjY3OjVkOmExOjY2OjcyOmVkOmRjOgorICAgICAgICAgICAgICAgICAgICA3OTpiNjo1ODo1YzozMjo1ODpiMzpkNDoxNDpmZDo2YzowMjo2MTo5ZTowYjoKKyAgICAgICAgICAgICAgICAgICAgOTk6NDY6NjM6YTM6MGE6NDE6ZDQ6NDI6MzM6MjE6ZTY6ZWQ6NDM6MDc6NWE6CisgICAgICAgICAgICAgICAgICAgIDFkOmEyOjNiOjY0OjI5OmE4OjJhOmMxOjY2OjI4OjAwOjU5OmQ4OjBjOjQ5OgorICAgICAgICAgICAgICAgICAgICAyZDozMDpiNzozZDo4YzpiYjo2MDo2MjozMTo4MzoyNzo3Zjo0Yjo5NTo5MjoKKyAgICAgICAgICAgICAgICAgICAgMmU6YTA6ZDY6YzY6ODQ6OTQ6NGI6YjM6ZTQ6YTY6Y2M6ZmY6MzI6M2E6YzU6CisgICAgICAgICAgICAgICAgICAgIGVjOjRjOmM5OjI0OjU4OmJmOmIzOjMzOjc3OjZhOmI1OjE3OjhiOjAyOjEwOgorICAgICAgICAgICAgICAgICAgICAyOTo4ZTo5NTphYTo5MTo2MDoxNzo0Mzo0Mjo4NzphODo3YzpkYTowOTo4MzoKKyAgICAgICAgICAgICAgICAgICAgOTg6OWQ6N2E6NjU6NWU6MjA6NTI6MDc6MmU6NjU6YTU6MzE6ZmQ6ZDk6NzQ6CisgICAgICAgICAgICAgICAgICAgIDFlOjAwOmM5OmFlOjlkOjgxOjU2OjhiOjA4OjBhOmY1OjFlOjljOmRjOmEyOgorICAgICAgICAgICAgICAgICAgICA1ZTo2YzpkYjpmZjoxMTo4MzoxNTpmNDpkMToyNDo1Nzo5YjowZjplYjozNToKKyAgICAgICAgICAgICAgICAgICAgYzk6ZjE6YWE6NDY6NGU6NzQ6N2Y6ZmU6MWQ6YjA6OTE6MWY6ODk6NGE6ODQ6CisgICAgICAgICAgICAgICAgICAgIGNiOmRmOjc1OmUzOmNkOjc3OjgyOjYyOjA5OmU1OjlmOjZkOjI5OmRlOjJlOgorICAgICAgICAgICAgICAgICAgICAyNTpkODo0ODpiNjoyMDpiZTo1MTo5Nzo0YzoyZDoyMDo2NToyZDoyYTo1MDoKKyAgICAgICAgICAgICAgICAgICAgOWU6MjQ6NWQ6NzI6OTU6ZTA6YTI6MDY6NDE6OGM6NjE6ZTQ6NTA6NTc6NzQ6CisgICAgICAgICAgICAgICAgICAgIDk2OmIxOjI5OmI1OmExOjg4OjM3OmYxOjVjOjllOmIyOjllOjhlOjgzOjhkOgorICAgICAgICAgICAgICAgICAgICA3MjozYjpiNTo1YzpmZTpiYjoxMjo4OTo3Mjo1YzphMTpmOTpkODoxODoyOToKKyAgICAgICAgICAgICAgICAgICAgYjI6MjcKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAgICAgICAgICAgICBDQTpGQUxTRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEI3OjUxOkQ0OkU1OjIwOkQ1OjQ1OjU0OkY0OkM1OjUxOjFCOkUwOjgyOkI1OjYxOjA1OkFGOjlCOkI2CisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpDRjoyMjozMToyNzo5MTpEODpDMjo1NDpGRjoxRTpEQTpEOTpFRTo4QTpDNTo4OTozMjpBRDowQzoyMQorCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogbWQyV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgMjg6NWE6ZGQ6NDg6ZmI6ZWM6ODA6ZmU6ZGU6Yjc6MjA6YzA6NGM6MDU6YTk6NGI6NTE6ZTk6CisgICAgICAgIGE3OmQxOjRiOjVlOjc2OjQyOmQyOjVkOjlhOjE0OjE5OjNiOmNiOmY5OjkxOmQ3OjBmOjExOgorICAgICAgICBjOTpjZDpkZDowMDo4YjoyYzo3Njo3MzoyMjphMDoxOTo0OTo4MTo2Mzo0MDozMDo0ODoyNzoKKyAgICAgICAgNjI6OTA6Y2E6Yjg6ZGM6MzM6MzU6YjM6NGI6NTg6Y2E6ZGM6MDc6NjY6ODc6MmU6ZWE6NDQ6CisgICAgICAgIDJhOjZhOjEzOjY3OjdhOjMyOjVlOjQ4OjFkOjg4Ojg4OmM1OjcwOmU2OmU3OmVjOjFiOjJmOgorICAgICAgICBhNzpmNDo2MTo3MToyOTpmNjo2Njo5MzozMDo2MDo3ZTpiMzo0YzowMTpjODoyYzo1MzpjZToKKyAgICAgICAgMDA6MTE6ZWM6YmY6ZjY6ZjI6Y2U6NTE6OTc6ZDg6ZWQ6ZWQ6ZGM6Yzk6NmI6Yjg6MTk6MTU6CisgICAgICAgIGM4OjlhOjYxOjZkOjEyOjlhOjk5OjI1OmQ4OjAzOjFkOmE2OjRjOjIwOmE1OmY4OjQ2OmEzOgorICAgICAgICAwNTozMjpiYjoxYTo4ZToxYTo2NTowZDpmMzoxMzozNToxZDo2Zjo3MzoyODozMToxMjpkNzoKKyAgICAgICAgYzQ6OWU6NzM6YTA6YTc6Y2U6ODI6MjU6ZDE6NDA6ZTg6MWI6Nzc6NjA6ZjM6M2U6ODE6N2Y6CisgICAgICAgIDE5OmVlOmNmOjk3OjRkOmM4OmMzOjM1OjliOjcyOjk4OjNiOmMzOjM1OjQzOjE0OjBhOjA0OgorICAgICAgICAyMTo3YjpmNzpkYjplNjo1ZjpjZToyMTpkMTpjZTpiZjpiNzplZjpjMTo2MzoyMTpjMjo3ODoKKyAgICAgICAgZTE6Mzc6YWE6YjE6ZTA6MzE6YjM6YjY6NjM6NGM6ZmQ6NjY6Yzg6ZTY6Y2Y6Zjg6ZDk6OTc6CisgICAgICAgIDJmOmNmOjkyOjgxOjNmOmQ0OmJmOmVjOmUyOmFkOjZlOjM5OmM3OmE2OmE4OmUwOjMyOmIwOgorICAgICAgICAyZTowZDplMTozMAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEUHpDQ0FpZWdBd0lCQWdJQkNUQU5CZ2txaGtpRzl3MEJBUUlGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNRGt3TnpFeU1UQTFOalU1V2hjTk1URXdOekV5TVRBMU5qVTVXakE4TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdqQVlCZ05WQkFNVEVWQnZiR0Z5VTFOTUlFTmxjblFnVFVReU1JSUJJakFOCitCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEzQk4wZ2NZUzltZGRvV1p5N2R4NXRsaGNNbGl6CisxQlQ5YkFKaG5ndVpSbU9qQ2tIVVFqTWg1dTFEQjFvZG9qdGtLYWdxd1dZb0FGbllERWt0TUxjOWpMdGdZakdECitKMzlMbFpJdW9OYkdoSlJMcytTbXpQOHlPc1hzVE1ra1dMK3pNM2RxdFJlTEFoQXBqcFdxa1dBWFEwS0hxSHphCitDWU9ZblhwbFhpQlNCeTVscFRIOTJYUWVBTW11bllGV2l3Z0s5UjZjM0tKZWJOdi9FWU1WOU5Fa1Y1c1A2elhKCis4YXBHVG5SLy9oMndrUitKU29UTDMzWGp6WGVDWWdubG4yMHAzaTRsMkVpMklMNVJsMHd0SUdVdEtsQ2VKRjF5CitsZUNpQmtHTVllUlFWM1NXc1NtMW9ZZzM4Vnllc3A2T2c0MXlPN1ZjL3JzU2lYSmNvZm5ZR0NteUp3SURBUUFCCitvMDB3U3pBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCUzNVZFRsSU5WRlZQVEZVUnZnZ3JWaEJhK2J0akFmCitCZ05WSFNNRUdEQVdnQlRQSWpFbmtkakNWUDhlMnRudWlzV0pNcTBNSVRBTkJna3Foa2lHOXcwQkFRSUZBQU9DCitBUUVBS0ZyZFNQdnNnUDdldHlEQVRBV3BTMUhwcDlGTFhuWkMwbDJhRkJrN3kvbVIxdzhSeWMzZEFJc3Nkbk1pCitvQmxKZ1dOQU1FZ25ZcERLdU53ek5iTkxXTXJjQjJhSEx1cEVLbW9UWjNveVhrZ2RpSWpGY09ibjdCc3ZwL1JoCitjU24yWnBNd1lINnpUQUhJTEZQT0FCSHN2L2J5emxHWDJPM3QzTWxydUJrVnlKcGhiUkthbVNYWUF4Mm1UQ0NsCisrRWFqQlRLN0dvNGFaUTN6RXpVZGIzTW9NUkxYeEo1em9LZk9naVhSUU9nYmQyRHpQb0YvR2U3UGwwM0l3eldiCitjcGc3d3pWREZBb0VJWHYzMitaZnppSFJ6ciszNzhGakljSjQ0VGVxc2VBeHM3WmpUUDFteU9iUCtObVhMOCtTCitnVC9Vdit6aXJXNDV4NmFvNERLd0xnM2hNQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X21kNC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X21kNC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmMTY2YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ0LmNydApAQCAtMCwwICsxLDc3IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDUgKDB4NSkKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogbWQ0V2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBGZWIgMTIgMTQ6NDQ6MDcgMjAxMSBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEZlYiAxMiAxNDo0NDowNyAyMDIxIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBDZXJ0IE1ENAorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6Yjk6M2M6NGE6YzU6Yzg6YTM6OGU6OTA6MTc6YTQ6OWU6NTI6YWE6NzE6CisgICAgICAgICAgICAgICAgICAgIDc1OjI2OjYxOjgwOmU3OmM3OmI1OjZkOjhjOmZmOmFhOmI2OjQxOjI2OmI3OgorICAgICAgICAgICAgICAgICAgICBiZToxMTphZDo1Yzo3MzoxNjowYzo2NDoxMTo0ODowNDpmZjpkNjplMTozYjoKKyAgICAgICAgICAgICAgICAgICAgMDU6ZGI6ODk6YmI6YjM6OTc6MDk6ZDU6MWM6MTQ6ZGQ6Njg6ODc6Mzk6YjA6CisgICAgICAgICAgICAgICAgICAgIDNkOjcxOmNiOmUyOjc2OmQwOjFhOmQ4OjE4OjJkOjgwOjFiOjU0OmY2OmU1OgorICAgICAgICAgICAgICAgICAgICA0NDo5YTpmMTpjYjphZjo2MToyZTpkZjo0OTowZDo5ZDowOTpiNzplZDpiMToKKyAgICAgICAgICAgICAgICAgICAgZmQ6M2M6ZmQ6M2M6ZmE6MjQ6Y2Y6NWQ6YmY6N2M6ZTQ6NTM6ZTc6MjU6YjU6CisgICAgICAgICAgICAgICAgICAgIGVhOjQ0OjIyOmU5OjI2OmQzOmVhOjIwOjk0OjllOmU2OjYxOjY3OmJhOjJlOgorICAgICAgICAgICAgICAgICAgICAwNzo2NzowYjowMzoyZjphMjowOTplZDpmMDozMzo4ZjowYjpjZToxMDplZjoKKyAgICAgICAgICAgICAgICAgICAgNjc6YTQ6YzY6MDg6ZGE6YzE6ZWQ6YzI6M2Y6ZDc6NGE6ZGQ6MTU6M2Q6Zjk6CisgICAgICAgICAgICAgICAgICAgIDVlOjFjOjgxOjYwOjQ2OjNlOmI1OmIzOjNkOjJmOmE2OmRlOjQ3OjFjOmJjOgorICAgICAgICAgICAgICAgICAgICA5MjphZTplYjpkZjoyNzo2YjoxNjo1NjpiNzpkYzplYzpkMTo1NTo1NzphNToKKyAgICAgICAgICAgICAgICAgICAgNmU6ZWM6NzU6MjU6ZjU6Yjc6N2I6ZGY6YWI6ZDI6M2E6NWE6OTE6OTg6N2Q6CisgICAgICAgICAgICAgICAgICAgIDk3OjE3OjBiOjEzOjBhOmE3OjZiOjRhOjhiOmMxOjQ3OjMwOmZiOjNhOmY4OgorICAgICAgICAgICAgICAgICAgICA0MTowNDpkNTpjMTpkZjpiODoxZDpiZjo3YjowMTphNTo2NTphMjplMDoxZToKKyAgICAgICAgICAgICAgICAgICAgMzY6Yjc6YTY6NWM6Y2M6MzA6NWE6Zjg6Y2Q6NmY6Y2Q6ZjE6MTk6NjI6MjU6CisgICAgICAgICAgICAgICAgICAgIGNhOjAxOmUzOjM1OjdmOmZhOjIwOmY1OmRjOmZkOjY5OmIyOjZhOjAwOjdkOgorICAgICAgICAgICAgICAgICAgICAxNzpmNworICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOkZBTFNFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgN0Q6RTQ6OUM6NkI6RTY6Rjk6NzE6N0Q6NDY6RDI6MTI6M0Q6QUQ6NkI6MUQ6RkQ6QzI6QUE6Nzg6NEMKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBtZDRXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICA5NDpkYjplMTo4Njo3MToyZDo0MzpkNjo1MTo2MTphNzo5NTpiYzplODo3MzpkYTpmZjplNDoKKyAgICAgICAgZmQ6NDE6MGY6NWM6ZGU6MTQ6ZjQ6YzQ6YmE6NWQ6MmM6MzA6MmM6YTY6ZGM6MmQ6ZTg6ODc6CisgICAgICAgIDQ1OmYxOmM1OmZlOmQxOjRhOjY0Ojk5OjE5OjA5OjJmOjcyOjdjOjNmOjhkOmM4OjMxOjIyOgorICAgICAgICBkZDowYTo2OTowMzozZDoxMjo4Yzo0ZDpjMzpmNzphMzpjNTpkMTo1ZDpjOTpmZjo0Yjo4MzoKKyAgICAgICAgNmI6ZDY6YjQ6ZTU6ZDg6Y2U6OTQ6NWU6ZWM6YmY6Njg6YzU6YjI6NjM6OGU6NWM6Y2I6ZjM6CisgICAgICAgIDhkOjYyOjczOjgyOjYyOjdlOmRmOmRiOjdkOjBiOjhkOjIxOjEwOmRiOjlhOmExOjYyOjRkOgorICAgICAgICA0Njo0MjpkMTpiYjozODozMjplZjpjMTpmYzphMTplMjo3Zjo2MDowODozNzozMjoyMDoyYzoKKyAgICAgICAgN2M6YTI6Yzk6MTI6MGQ6ODk6ZmU6MmI6MTU6MDg6OTE6Nzk6ZTI6YTk6Nzk6YTQ6ZGE6Y2Q6CisgICAgICAgIDgxOjQzOjAxOmUyOjA5OjJkOjFhOmY0OjE2OmVmOmFmOjRkOjUwOjQ2OjVlOjJkOmRkOjQ4OgorICAgICAgICAyNzoxMDpjMDo0MjpiNzphNTo5ZTpjMjoxZjo2ZTo1MDozNjowMzplZDo5NTo3Nzo5YTphMzoKKyAgICAgICAgZDk6NGM6ZDc6MjM6OTM6YjE6MjQ6MmE6NjM6Mjc6Mjg6N2E6ZGU6M2Q6NTk6ZDI6OTI6Yzg6CisgICAgICAgIDhmOmY2OjM5OjFkOjY1OmFiOjA5Ojc4OjA1OjQ2OjkwOmE5OmY2OjEwOmIxOmVmOmM4OjhjOgorICAgICAgICA0ZDo3ZDo4ZDpmMjo3ODpiNzo4ODoxNTowOTo3ZTpkZjplOTo4NzphODo2NDpjMTo5NTo1MzoKKyAgICAgICAgZmI6ZGE6MDU6Yjc6NjI6YmM6YWQ6ZmI6ZDk6YTQ6YTk6MDY6NmM6NmI6OTg6MDE6Yjk6Mzk6CisgICAgICAgIDc4OmQzOjRlOjg3CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURQekNDQWllZ0F3SUJBZ0lCQlRBTkJna3Foa2lHOXcwQkFRTUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQTNXaGNOTWpFd01qRXlNVFEwTkRBM1dqQThNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R2pBWUJnTlZCQU1URVZCdmJHRnlVMU5NSUVObGNuUWdUVVEwTUlJQklqQU4KK0Jna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXVUeEt4Y2lqanBBWHBKNVNxbkYxSm1HQTU4ZTEKK2JZei9xclpCSnJlK0VhMWNjeFlNWkJGSUJQL1c0VHNGMjRtN3M1Y0oxUndVM1dpSE9iQTljY3ZpZHRBYTJCZ3QKK2dCdFU5dVZFbXZITHIyRXUzMGtOblFtMzdiSDlQUDA4K2lUUFhiOTg1RlBuSmJYcVJDTHBKdFBxSUpTZTVtRm4KK3VpNEhad3NETDZJSjdmQXpqd3ZPRU85bnBNWUkyc0h0d2ovWFN0MFZQZmxlSElGZ1JqNjFzejB2cHQ1SEhMeVMKK3J1dmZKMnNXVnJmYzdORlZWNlZ1N0hVbDliZDczNnZTT2xxUm1IMlhGd3NUQ3FkclNvdkJSekQ3T3ZoQkJOWEIKKzM3Z2R2M3NCcFdXaTRCNDJ0NlpjekRCYStNMXZ6ZkVaWWlYS0FlTTFmL29nOWR6OWFiSnFBSDBYOXdJREFRQUIKK28wMHdTekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJSOTVKeHI1dmx4ZlViU0VqMnRheDM5d3FwNFREQWYKK0JnTlZIU01FR0RBV2dCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvekFOQmdrcWhraUc5dzBCQVFNRkFBT0MKK0FRRUFsTnZoaG5FdFE5WlJZYWVWdk9oejJ2L2svVUVQWE40VTlNUzZYU3d3TEtiY0xlaUhSZkhGL3RGS1pKa1oKK0NTOXlmRCtOeURFaTNRcHBBejBTakUzRDk2UEYwVjNKLzB1RGE5YTA1ZGpPbEY3c3YyakZzbU9PWE12empXSnoKK2dtSiszOXQ5QzQwaEVOdWFvV0pOUmtMUnV6Z3k3OEg4b2VKL1lBZzNNaUFzZktMSkVnMkovaXNWQ0pGNTRxbDUKK3BOck5nVU1CNGdrdEd2UVc3NjlOVUVaZUxkMUlKeERBUXJlbG5zSWZibEEyQSsyVmQ1cWoyVXpYSTVPeEpDcGoKK0p5aDYzajFaMHBMSWovWTVIV1dyQ1hnRlJwQ3A5aEN4NzhpTVRYMk44bmkzaUJVSmZ0L3BoNmhrd1pWVCs5b0YKK3QySzhyZnZacEtrR2JHdVlBYms1ZU5OT2h3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ1LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ1LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2Q0M2YxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDUuY3J0CkBAIC0wLDAgKzEsNzcgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogNiAoMHg2KQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBtZDVXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowNyAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjA3IDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgTUQ1CisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgIFJTQSBQdWJsaWMgS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1cyAoMjA0OCBiaXQpOgorICAgICAgICAgICAgICAgICAgICAwMDpiOTozYzo0YTpjNTpjODphMzo4ZTo5MDoxNzphNDo5ZTo1MjphYTo3MToKKyAgICAgICAgICAgICAgICAgICAgNzU6MjY6NjE6ODA6ZTc6Yzc6YjU6NmQ6OGM6ZmY6YWE6YjY6NDE6MjY6Yjc6CisgICAgICAgICAgICAgICAgICAgIGJlOjExOmFkOjVjOjczOjE2OjBjOjY0OjExOjQ4OjA0OmZmOmQ2OmUxOjNiOgorICAgICAgICAgICAgICAgICAgICAwNTpkYjo4OTpiYjpiMzo5NzowOTpkNToxYzoxNDpkZDo2ODo4NzozOTpiMDoKKyAgICAgICAgICAgICAgICAgICAgM2Q6NzE6Y2I6ZTI6NzY6ZDA6MWE6ZDg6MTg6MmQ6ODA6MWI6NTQ6ZjY6ZTU6CisgICAgICAgICAgICAgICAgICAgIDQ0OjlhOmYxOmNiOmFmOjYxOjJlOmRmOjQ5OjBkOjlkOjA5OmI3OmVkOmIxOgorICAgICAgICAgICAgICAgICAgICBmZDozYzpmZDozYzpmYToyNDpjZjo1ZDpiZjo3YzplNDo1MzplNzoyNTpiNToKKyAgICAgICAgICAgICAgICAgICAgZWE6NDQ6MjI6ZTk6MjY6ZDM6ZWE6MjA6OTQ6OWU6ZTY6NjE6Njc6YmE6MmU6CisgICAgICAgICAgICAgICAgICAgIDA3OjY3OjBiOjAzOjJmOmEyOjA5OmVkOmYwOjMzOjhmOjBiOmNlOjEwOmVmOgorICAgICAgICAgICAgICAgICAgICA2NzphNDpjNjowODpkYTpjMTplZDpjMjozZjpkNzo0YTpkZDoxNTozZDpmOToKKyAgICAgICAgICAgICAgICAgICAgNWU6MWM6ODE6NjA6NDY6M2U6YjU6YjM6M2Q6MmY6YTY6ZGU6NDc6MWM6YmM6CisgICAgICAgICAgICAgICAgICAgIDkyOmFlOmViOmRmOjI3OjZiOjE2OjU2OmI3OmRjOmVjOmQxOjU1OjU3OmE1OgorICAgICAgICAgICAgICAgICAgICA2ZTplYzo3NToyNTpmNTpiNzo3YjpkZjphYjpkMjozYTo1YTo5MTo5ODo3ZDoKKyAgICAgICAgICAgICAgICAgICAgOTc6MTc6MGI6MTM6MGE6YTc6NmI6NGE6OGI6YzE6NDc6MzA6ZmI6M2E6Zjg6CisgICAgICAgICAgICAgICAgICAgIDQxOjA0OmQ1OmMxOmRmOmI4OjFkOmJmOjdiOjAxOmE1OjY1OmEyOmUwOjFlOgorICAgICAgICAgICAgICAgICAgICAzNjpiNzphNjo1YzpjYzozMDo1YTpmODpjZDo2ZjpjZDpmMToxOTo2MjoyNToKKyAgICAgICAgICAgICAgICAgICAgY2E6MDE6ZTM6MzU6N2Y6ZmE6MjA6ZjU6ZGM6ZmQ6Njk6YjI6NmE6MDA6N2Q6CisgICAgICAgICAgICAgICAgICAgIDE3OmY3CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6RkFMU0UKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICA3RDpFNDo5Qzo2QjpFNjpGOTo3MTo3RDo0NjpEMjoxMjozRDpBRDo2QjoxRDpGRDpDMjpBQTo3ODo0QworICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IG1kNVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIDkyOjEzOjgxOjBjOmZmOmFjOmFiOjk4OjUyOjZjOjI4OmM5OmM2OjNlOjgwOmM2OmVjOjc3OgorICAgICAgICBkMDoxMzplMTphMjoyOToxZDoyZjpiNzpjNTo5NTo0MTo4Mzo2MDpkOTo1MDo5YzpkMDpkNjoKKyAgICAgICAgMDk6Zjc6MGY6OTc6Y2Q6YzA6ZTY6YjI6Njg6ZmE6MzE6Yzk6MmE6YTM6ZDM6MWU6NTM6YWU6CisgICAgICAgIDc5OmRjOjM1OmJhOmIwOmQ5OmU1OjdhOjM3OjFiOjJhOjkyOmZhOmQyOjU5OjkwOjQzOjFiOgorICAgICAgICA2YTo5MTpjMTpkYjozNjpkYTplOTozOTpkMzpmNTphYzplMzo0NjowMTpjYTo1NTowNDoxNzoKKyAgICAgICAgMWE6YjE6OTc6Mjg6ZTg6ZmY6MWI6ZTc6ZTE6MTA6Yzk6YjU6MzE6ZDg6Y2U6YTY6ODk6NmE6CisgICAgICAgIDRhOmRmOjc4OjdiOjAyOjJmOjgzOmIzOjQxOmQ1OmVmOjBiOmI2OjQ0OmZmOjMyOmE2OmNmOgorICAgICAgICAxYjpjMjpmNDpiMDo3NTo2NjphOTpkYTo2Zjo3YzphNTplMzpjNjpjMTozYToyZjpiZjpmODoKKyAgICAgICAgMTI6NmY6MDQ6MmM6Mzc6ZjI6NGU6ZmM6Yjk6MDk6ZmY6YTQ6NWI6NDA6MTk6ZTk6NTg6OTE6CisgICAgICAgIDY0OjgyOmQ2OmFkOmI5OjdmOmMwOjEyOmMyOmNlOmI3OmI2OmJhOmZiOjEwOmEyOjNmOjc0OgorICAgICAgICA5NzoxMDozOTpkNDpkYzo0YTplNTo1YzpmNzplNTozYTpkOTo2ODpkNzoxNzo2YjpmNTo1MToKKyAgICAgICAgMDg6YjQ6YTI6MzA6MGQ6Y2M6MzY6MTA6NmQ6NGU6MWQ6MjI6Y2M6NDg6ZDE6Mzg6NDQ6YmE6CisgICAgICAgIGNjOjJiOjQ3Ojk5OmY3OmM2OjhiOjQxOjI0OmYzOmYxOjJjOjEwOjFhOmYyOjg4OmJiOmIyOgorICAgICAgICBlMDpmZDo0NDoyNjozZDphZDplYTphZjoxZDpkMDowMDo1Njo0MTo0ZTpmNDpiMDozYjo5ZDoKKyAgICAgICAgMzI6NmY6NDg6YzcKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFB6Q0NBaWVnQXdJQkFnSUJCakFOQmdrcWhraUc5dzBCQVFRRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBM1doY05NakV3TWpFeU1UUTBOREEzV2pBOE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHakFZQmdOVkJBTVRFVkJ2YkdGeVUxTk1JRU5sY25RZ1RVUTFNSUlCSWpBTgorQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdVR4S3hjaWpqcEFYcEo1U3FuRjFKbUdBNThlMQorYll6L3FyWkJKcmUrRWExY2N4WU1aQkZJQlAvVzRUc0YyNG03czVjSjFSd1UzV2lIT2JBOWNjdmlkdEFhMkJndAorZ0J0VTl1VkVtdkhMcjJFdTMwa05uUW0zN2JIOVBQMDgraVRQWGI5ODVGUG5KYlhxUkNMcEp0UHFJSlNlNW1GbgordWk0SFp3c0RMNklKN2ZBemp3dk9FTzlucE1ZSTJzSHR3ai9YU3QwVlBmbGVISUZnUmo2MXN6MHZwdDVISEx5UworcnV2Zkoyc1dWcmZjN05GVlY2VnU3SFVsOWJkNzM2dlNPbHFSbUgyWEZ3c1RDcWRyU292QlJ6RDdPdmhCQk5YQgorMzdnZHYzc0JwV1dpNEI0MnQ2WmN6REJhK00xdnpmRVpZaVhLQWVNMWYvb2c5ZHo5YWJKcUFIMFg5d0lEQVFBQgorbzAwd1N6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlI5NUp4cjV2bHhmVWJTRWoydGF4Mzl3cXA0VERBZgorQmdOVkhTTUVHREFXZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS96QU5CZ2txaGtpRzl3MEJBUVFGQUFPQworQVFFQWtoT0JEUCtzcTVoU2JDakp4ajZBeHV4MzBCUGhvaWtkTDdmRmxVR0RZTmxRbk5EV0NmY1BsODNBNXJKbworK2pISktxUFRIbE91ZWR3MXVyRFo1WG8zR3lxUyt0SlprRU1iYXBIQjJ6YmE2VG5UOWF6alJnSEtWUVFYR3JHWAorS09qL0crZmhFTW0xTWRqT3BvbHFTdDk0ZXdJdmc3TkIxZThMdGtUL01xYlBHOEwwc0hWbXFkcHZmS1hqeHNFNgorTDcvNEVtOEVMRGZ5VHZ5NUNmK2tXMEFaNlZpUlpJTFdyYmwvd0JMQ3pyZTJ1dnNRb2o5MGx4QTUxTnhLNVZ6MworNVRyWmFOY1hhL1ZSQ0xTaU1BM01OaEJ0VGgwaXpFalJPRVM2ekN0SG1mZkdpMEVrOC9Fc0VCcnlpTHV5NFAxRQorSmoydDZxOGQwQUJXUVU3MHNEdWRNbTlJeHc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9zaGExLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhMS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4YjJmMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhMS5jcnQKQEAgLTAsMCArMSw3NyBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiA3ICgweDcpCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowNyAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjA3IDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgU0hBMQorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6Yjk6M2M6NGE6YzU6Yzg6YTM6OGU6OTA6MTc6YTQ6OWU6NTI6YWE6NzE6CisgICAgICAgICAgICAgICAgICAgIDc1OjI2OjYxOjgwOmU3OmM3OmI1OjZkOjhjOmZmOmFhOmI2OjQxOjI2OmI3OgorICAgICAgICAgICAgICAgICAgICBiZToxMTphZDo1Yzo3MzoxNjowYzo2NDoxMTo0ODowNDpmZjpkNjplMTozYjoKKyAgICAgICAgICAgICAgICAgICAgMDU6ZGI6ODk6YmI6YjM6OTc6MDk6ZDU6MWM6MTQ6ZGQ6Njg6ODc6Mzk6YjA6CisgICAgICAgICAgICAgICAgICAgIDNkOjcxOmNiOmUyOjc2OmQwOjFhOmQ4OjE4OjJkOjgwOjFiOjU0OmY2OmU1OgorICAgICAgICAgICAgICAgICAgICA0NDo5YTpmMTpjYjphZjo2MToyZTpkZjo0OTowZDo5ZDowOTpiNzplZDpiMToKKyAgICAgICAgICAgICAgICAgICAgZmQ6M2M6ZmQ6M2M6ZmE6MjQ6Y2Y6NWQ6YmY6N2M6ZTQ6NTM6ZTc6MjU6YjU6CisgICAgICAgICAgICAgICAgICAgIGVhOjQ0OjIyOmU5OjI2OmQzOmVhOjIwOjk0OjllOmU2OjYxOjY3OmJhOjJlOgorICAgICAgICAgICAgICAgICAgICAwNzo2NzowYjowMzoyZjphMjowOTplZDpmMDozMzo4ZjowYjpjZToxMDplZjoKKyAgICAgICAgICAgICAgICAgICAgNjc6YTQ6YzY6MDg6ZGE6YzE6ZWQ6YzI6M2Y6ZDc6NGE6ZGQ6MTU6M2Q6Zjk6CisgICAgICAgICAgICAgICAgICAgIDVlOjFjOjgxOjYwOjQ2OjNlOmI1OmIzOjNkOjJmOmE2OmRlOjQ3OjFjOmJjOgorICAgICAgICAgICAgICAgICAgICA5MjphZTplYjpkZjoyNzo2YjoxNjo1NjpiNzpkYzplYzpkMTo1NTo1NzphNToKKyAgICAgICAgICAgICAgICAgICAgNmU6ZWM6NzU6MjU6ZjU6Yjc6N2I6ZGY6YWI6ZDI6M2E6NWE6OTE6OTg6N2Q6CisgICAgICAgICAgICAgICAgICAgIDk3OjE3OjBiOjEzOjBhOmE3OjZiOjRhOjhiOmMxOjQ3OjMwOmZiOjNhOmY4OgorICAgICAgICAgICAgICAgICAgICA0MTowNDpkNTpjMTpkZjpiODoxZDpiZjo3YjowMTphNTo2NTphMjplMDoxZToKKyAgICAgICAgICAgICAgICAgICAgMzY6Yjc6YTY6NWM6Y2M6MzA6NWE6Zjg6Y2Q6NmY6Y2Q6ZjE6MTk6NjI6MjU6CisgICAgICAgICAgICAgICAgICAgIGNhOjAxOmUzOjM1OjdmOmZhOjIwOmY1OmRjOmZkOjY5OmIyOjZhOjAwOjdkOgorICAgICAgICAgICAgICAgICAgICAxNzpmNworICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOkZBTFNFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgN0Q6RTQ6OUM6NkI6RTY6Rjk6NzE6N0Q6NDY6RDI6MTI6M0Q6QUQ6NkI6MUQ6RkQ6QzI6QUE6Nzg6NEMKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgOTM6MjY6NDA6Njg6M2Q6ZTc6NjI6ZWE6ZDE6NmE6Nzg6MmI6YzI6MDc6ZjM6MGQ6M2I6ZjY6CisgICAgICAgIDY5OjE4OmNkOjA4OjVlOjMxOmU3OjQ4OjYwOjA4OjJhOjQ2OmI2OmRlOmQxOjM1OjBhOmVjOgorICAgICAgICAzMTozNjo4Mzo3ZDplYjo3YzpkODo2MzowOTpjMzplNDpjNToxMDpjYTo3Yzo3YjoyZjoyMDoKKyAgICAgICAgNGQ6ZDI6MGU6NWY6ZWU6MDk6ZTM6ODQ6NGY6Mjg6Y2M6MDg6NzQ6OWE6MTE6MjM6NWY6ZGU6CisgICAgICAgIDBlOjNhOjBmOjhiOjJkOjY0OjkxOjA1OmY2OmQ1OmM3OjMwOmM4OjIwOmVlOjZjOmM0OjYyOgorICAgICAgICA3Yzo4ZDphODo0ZDoyZTo3MDo4YzphYzpiNTo1ZDpkZTo5YjoxMDo1Yzo5ODpmZDphMTo3ODoKKyAgICAgICAgOWI6OWM6ZjA6NzM6MzM6ZGU6MmY6OGM6NTk6ZmE6ZGM6YWY6NGM6ZGY6OTc6ZTM6OWQ6MDA6CisgICAgICAgIDM3OjlhOmZhOmQzOjY3Ojc3OmI5OjJmOmI5OjRhOjIzOmFkOmY5OmI0OmExOmI3OmFjOmM1OgorICAgICAgICBhODowZjo2Mjo4YzplNjo3ZTpiNDo5NDoyYTpkYjpmMjpmYzo1Mjo5MjphNDo5ZTo0ZTo1MToKKyAgICAgICAgNGY6OWQ6YzA6Y2U6YWU6M2Q6MTc6MWM6OTQ6NmM6NWY6ZTg6MTY6YjU6Y2U6MmU6ZTI6NWE6CisgICAgICAgIGNmOjZhOmRiOmRkOmIwOmQ0OmJlOjYyOmE1OjQ2OjkyOjMwOjdjOjdjOmZjOjA1OmY4Ojc4OgorICAgICAgICAzMDo5MzozMDoyODphYjo2OTphMTo3MjozMTpkYzozYjo5Nzo2MzozYTo1YjpiMzplMTozNDoKKyAgICAgICAgODY6ODA6NGE6Mjg6ZjU6ZGM6ZDU6ODQ6OGM6MTM6YTQ6NmM6ZDI6YzE6MmQ6YTY6MjU6ZDc6CisgICAgICAgIDZmOmM5OjkzOjc4OmE1OjE2OmJhOmQ5OjE3OjZlOjNlOmNhOjk2OmYyOjllOjVjOmUzOmFlOgorICAgICAgICAxMjoyZTphNToxMQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEUURDQ0FpaWdBd0lCQWdJQkJ6QU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREEzV2hjTk1qRXdNakV5TVRRME5EQTNXakE5TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEd6QVpCZ05WQkFNVEVsQnZiR0Z5VTFOTUlFTmxjblFnVTBoQk1UQ0NBU0l3CitEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTGs4U3NYSW80NlFGNlNlVXFweGRTWmhnT2ZICit0VzJNLzZxMlFTYTN2aEd0WEhNV0RHUVJTQVQvMXVFN0JkdUp1N09YQ2RVY0ZOMW9oem13UFhITDRuYlFHdGdZCitMWUFiVlBibFJKcnh5NjloTHQ5SkRaMEp0KzJ4L1R6OVBQb2t6MTIvZk9SVDV5VzE2a1FpNlNiVDZpQ1VudVpoCitaN291QjJjTEF5K2lDZTN3TTQ4THpoRHZaNlRHQ05yQjdjSS8xMHJkRlQzNVhoeUJZRVkrdGJNOUw2YmVSeHk4CitrcTdyM3lkckZsYTMzT3pSVlZlbGJ1eDFKZlczZTkrcjBqcGFrWmg5bHhjTEV3cW5hMHFMd1Vjdyt6cjRRUVRWCit3ZCs0SGI5N0FhVmxvdUFlTnJlbVhNd3dXdmpOYjgzeEdXSWx5Z0hqTlgvNklQWGMvV215YWdCOUYvY0NBd0VBCitBYU5OTUVzd0NRWURWUjBUQkFJd0FEQWRCZ05WSFE0RUZnUVVmZVNjYStiNWNYMUcwaEk5cldzZC9jS3FlRXd3CitId1lEVlIwakJCZ3dGb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2Y4d0RRWUpLb1pJaHZjTkFRRUZCUUFECitnZ0VCQUpNbVFHZzk1MkxxMFdwNEs4SUg4dzA3OW1rWXpRaGVNZWRJWUFncVJyYmUwVFVLN0RFMmczM3JmTmhqCitDY1BreFJES2ZIc3ZJRTNTRGwvdUNlT0VUeWpNQ0hTYUVTTmYzZzQ2RDRzdFpKRUY5dFhITU1nZzdtekVZbnlOCitxRTB1Y0l5c3RWM2VteEJjbVAyaGVKdWM4SE16M2krTVdmcmNyMHpmbCtPZEFEZWErdE5uZDdrdnVVb2pyZm0wCitvYmVzeGFnUFlvem1mclNVS3R2eS9GS1NwSjVPVVUrZHdNNnVQUmNjbEd4ZjZCYTF6aTdpV3M5cTI5MncxTDVpCitwVWFTTUh4OC9BWDRlRENUTUNpcmFhRnlNZHc3bDJNNlc3UGhOSWFBU2lqMTNOV0VqQk9rYk5MQkxhWWwxMi9KCitrM2lsRnJyWkYyNCt5cGJ5bmx6anJoSXVwUkU9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X3NoYTIyNC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X3NoYTIyNC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4M2MyOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhMjI0LmNydApAQCAtMCwwICsxLDc3IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDggKDB4OCkKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMjI0V2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBGZWIgMTIgMTQ6NDQ6MDcgMjAxMSBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEZlYiAxMiAxNDo0NDowNyAyMDIxIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBDZXJ0IFNIQTIyNAorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6Yjk6M2M6NGE6YzU6Yzg6YTM6OGU6OTA6MTc6YTQ6OWU6NTI6YWE6NzE6CisgICAgICAgICAgICAgICAgICAgIDc1OjI2OjYxOjgwOmU3OmM3OmI1OjZkOjhjOmZmOmFhOmI2OjQxOjI2OmI3OgorICAgICAgICAgICAgICAgICAgICBiZToxMTphZDo1Yzo3MzoxNjowYzo2NDoxMTo0ODowNDpmZjpkNjplMTozYjoKKyAgICAgICAgICAgICAgICAgICAgMDU6ZGI6ODk6YmI6YjM6OTc6MDk6ZDU6MWM6MTQ6ZGQ6Njg6ODc6Mzk6YjA6CisgICAgICAgICAgICAgICAgICAgIDNkOjcxOmNiOmUyOjc2OmQwOjFhOmQ4OjE4OjJkOjgwOjFiOjU0OmY2OmU1OgorICAgICAgICAgICAgICAgICAgICA0NDo5YTpmMTpjYjphZjo2MToyZTpkZjo0OTowZDo5ZDowOTpiNzplZDpiMToKKyAgICAgICAgICAgICAgICAgICAgZmQ6M2M6ZmQ6M2M6ZmE6MjQ6Y2Y6NWQ6YmY6N2M6ZTQ6NTM6ZTc6MjU6YjU6CisgICAgICAgICAgICAgICAgICAgIGVhOjQ0OjIyOmU5OjI2OmQzOmVhOjIwOjk0OjllOmU2OjYxOjY3OmJhOjJlOgorICAgICAgICAgICAgICAgICAgICAwNzo2NzowYjowMzoyZjphMjowOTplZDpmMDozMzo4ZjowYjpjZToxMDplZjoKKyAgICAgICAgICAgICAgICAgICAgNjc6YTQ6YzY6MDg6ZGE6YzE6ZWQ6YzI6M2Y6ZDc6NGE6ZGQ6MTU6M2Q6Zjk6CisgICAgICAgICAgICAgICAgICAgIDVlOjFjOjgxOjYwOjQ2OjNlOmI1OmIzOjNkOjJmOmE2OmRlOjQ3OjFjOmJjOgorICAgICAgICAgICAgICAgICAgICA5MjphZTplYjpkZjoyNzo2YjoxNjo1NjpiNzpkYzplYzpkMTo1NTo1NzphNToKKyAgICAgICAgICAgICAgICAgICAgNmU6ZWM6NzU6MjU6ZjU6Yjc6N2I6ZGY6YWI6ZDI6M2E6NWE6OTE6OTg6N2Q6CisgICAgICAgICAgICAgICAgICAgIDk3OjE3OjBiOjEzOjBhOmE3OjZiOjRhOjhiOmMxOjQ3OjMwOmZiOjNhOmY4OgorICAgICAgICAgICAgICAgICAgICA0MTowNDpkNTpjMTpkZjpiODoxZDpiZjo3YjowMTphNTo2NTphMjplMDoxZToKKyAgICAgICAgICAgICAgICAgICAgMzY6Yjc6YTY6NWM6Y2M6MzA6NWE6Zjg6Y2Q6NmY6Y2Q6ZjE6MTk6NjI6MjU6CisgICAgICAgICAgICAgICAgICAgIGNhOjAxOmUzOjM1OjdmOmZhOjIwOmY1OmRjOmZkOjY5OmIyOjZhOjAwOjdkOgorICAgICAgICAgICAgICAgICAgICAxNzpmNworICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOkZBTFNFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgN0Q6RTQ6OUM6NkI6RTY6Rjk6NzE6N0Q6NDY6RDI6MTI6M0Q6QUQ6NkI6MUQ6RkQ6QzI6QUE6Nzg6NEMKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBiODo5YjowYTpkMTpiNDpkMTphNDpjZTowNTozOTo0Mjo3YTozYjo3Yjo1ZTpmZDo5Nzo1NzoKKyAgICAgICAgOGE6MzY6NjA6NDI6Mzk6ZDA6ZTY6MGM6OWM6N2U6MmY6MmI6YmU6ZWY6ZTc6NDU6MzQ6Nzc6CisgICAgICAgIDQ4OjdhOjEwOjRhOmZkOjc2OmNhOjQyOjM5OjI1OjNjOmZhOjE5OmY4OjYzOjZjOmU3OjM2OgorICAgICAgICAyNzo5YTplYzowNjpjZTplNDpmNzoyYzoyZTpjNjozNjpjMToyNTpiZDphYjowOTphYTplMjoKKyAgICAgICAgZGE6NGU6ZGU6YWU6YjU6ZjU6YmE6OWU6OTA6MjQ6NTI6MzQ6OTY6OTY6NjE6NGM6MjY6YjU6CisgICAgICAgIDU3OjY1OmIxOjEwOmVkOjEzOjJiOjU0OjkwOmNlOmQzOjIxOmNiOjhjOmQzOjRjOjZjOmU1OgorICAgICAgICBlMTo3ODoyMjoxNjozZjplMTpiZTpmMTplZTo1ZDozOTo0ODphMTplNjo4MDo0NjpmNDo0NjoKKyAgICAgICAgZjI6Nzk6MDM6M2U6ZjE6ZmM6NTE6NDc6ZDk6MDU6ZTg6ODU6ODE6MWI6MGI6NGY6ZmE6ODU6CisgICAgICAgIDlkOmNlOmU3Ojc2OjVhOjZmOmRhOjk4OjlmOjQzOmYxOmYzOjJmOjJmOjU3OjI4OmFhOjcwOgorICAgICAgICAxNDo4Mjo3ZjpkNTo2OToxNDo4YzpmOTo4MjpiNjoyZjphNjpkZjpiNTo2YjowZTo0MzpjOToKKyAgICAgICAgOTY6OTE6NjQ6M2Q6OGI6YTg6MTc6MTU6OWE6ODg6NDI6YTQ6ZDA6OTA6YzA6YTM6YTI6ZTE6CisgICAgICAgIGRkOmY2Ojk1OjZkOjNiOjlkOjcxOmE2OjFlOjllOjJjOjFlOmRiOmY2OjVmOjkzOjQzOjJjOgorICAgICAgICBlZDo1Mzo3MDo1NTo1MDo1NjpkZjpjZDo5Njo2YzpkNTo5MTowZjpiMTphNzpmNDpiNzoxNzoKKyAgICAgICAgOWQ6MWY6MGI6ZjY6MGI6Zjg6ZmU6ZTc6N2M6ZGU6YzE6MjA6Yjc6ZmM6Njk6MTM6YmE6ZTI6CisgICAgICAgIDYxOjliOmE1OjYyCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURRakNDQWlxZ0F3SUJBZ0lCQ0RBTkJna3Foa2lHOXcwQkFRNEZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQTNXaGNOTWpFd01qRXlNVFEwTkRBM1dqQS9NUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SFRBYkJnTlZCQU1URkZCdmJHRnlVMU5NSUVObGNuUWdVMGhCTWpJME1JSUIKK0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF1VHhLeGNpampwQVhwSjVTcW5GMUptR0EKKzU4ZTFiWXovcXJaQkpyZStFYTFjY3hZTVpCRklCUC9XNFRzRjI0bTdzNWNKMVJ3VTNXaUhPYkE5Y2N2aWR0QWEKKzJCZ3RnQnRVOXVWRW12SExyMkV1MzBrTm5RbTM3Ykg5UFAwOCtpVFBYYjk4NUZQbkpiWHFSQ0xwSnRQcUlKU2UKKzVtRm51aTRIWndzREw2SUo3ZkF6and2T0VPOW5wTVlJMnNIdHdqL1hTdDBWUGZsZUhJRmdSajYxc3owdnB0NUgKK0hMeVNydXZmSjJzV1ZyZmM3TkZWVjZWdTdIVWw5YmQ3MzZ2U09scVJtSDJYRndzVENxZHJTb3ZCUnpEN092aEIKK0JOWEIzN2dkdjNzQnBXV2k0QjQydDZaY3pEQmErTTF2emZFWllpWEtBZU0xZi9vZzlkejlhYkpxQUgwWDl3SUQKK0FRQUJvMDB3U3pBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCUjk1SnhyNXZseGZVYlNFajJ0YXgzOXdxcDQKK1REQWZCZ05WSFNNRUdEQVdnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5L3pBTkJna3Foa2lHOXcwQkFRNEYKK0FBT0NBUUVBdUpzSzBiVFJwTTRGT1VKNk8zdGUvWmRYaWpaZ1FqblE1Z3ljZmk4cnZ1L25SVFIzU0hvUVN2MTIKK3lrSTVKVHo2R2ZoamJPYzJKNXJzQnM3azl5d3V4amJCSmIyckNhcmkyazdlcnJYMXVwNlFKRkkwbHBaaFRDYTEKK1YyV3hFTzBUSzFTUXp0TWh5NHpUVEd6bDRYZ2lGai9odnZIdVhUbElvZWFBUnZSRzhua0RQdkg4VVVmWkJlaUYKK2dSc0xUL3FGbmM3bmRscHYycGlmUS9Iekx5OVhLS3B3RklKLzFXa1VqUG1DdGkrbTM3VnJEa1BKbHBGa1BZdW8KK0Z4V2FpRUtrMEpEQW82TGgzZmFWYlR1ZGNhWWVuaXdlMi9aZmswTXM3Vk53VlZCVzM4MldiTldSRDdHbjlMY1gKK25SOEw5Z3Y0L3VkODNzRWd0L3hwRTdyaVladWxZZz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X3NoYTI1Ni5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X3NoYTI1Ni5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhNzUyMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhMjU2LmNydApAQCAtMCwwICsxLDc3IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDkgKDB4OSkKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBGZWIgMTIgMTQ6NDQ6MDcgMjAxMSBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEZlYiAxMiAxNDo0NDowNyAyMDIxIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBDZXJ0IFNIQTI1NgorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6Yjk6M2M6NGE6YzU6Yzg6YTM6OGU6OTA6MTc6YTQ6OWU6NTI6YWE6NzE6CisgICAgICAgICAgICAgICAgICAgIDc1OjI2OjYxOjgwOmU3OmM3OmI1OjZkOjhjOmZmOmFhOmI2OjQxOjI2OmI3OgorICAgICAgICAgICAgICAgICAgICBiZToxMTphZDo1Yzo3MzoxNjowYzo2NDoxMTo0ODowNDpmZjpkNjplMTozYjoKKyAgICAgICAgICAgICAgICAgICAgMDU6ZGI6ODk6YmI6YjM6OTc6MDk6ZDU6MWM6MTQ6ZGQ6Njg6ODc6Mzk6YjA6CisgICAgICAgICAgICAgICAgICAgIDNkOjcxOmNiOmUyOjc2OmQwOjFhOmQ4OjE4OjJkOjgwOjFiOjU0OmY2OmU1OgorICAgICAgICAgICAgICAgICAgICA0NDo5YTpmMTpjYjphZjo2MToyZTpkZjo0OTowZDo5ZDowOTpiNzplZDpiMToKKyAgICAgICAgICAgICAgICAgICAgZmQ6M2M6ZmQ6M2M6ZmE6MjQ6Y2Y6NWQ6YmY6N2M6ZTQ6NTM6ZTc6MjU6YjU6CisgICAgICAgICAgICAgICAgICAgIGVhOjQ0OjIyOmU5OjI2OmQzOmVhOjIwOjk0OjllOmU2OjYxOjY3OmJhOjJlOgorICAgICAgICAgICAgICAgICAgICAwNzo2NzowYjowMzoyZjphMjowOTplZDpmMDozMzo4ZjowYjpjZToxMDplZjoKKyAgICAgICAgICAgICAgICAgICAgNjc6YTQ6YzY6MDg6ZGE6YzE6ZWQ6YzI6M2Y6ZDc6NGE6ZGQ6MTU6M2Q6Zjk6CisgICAgICAgICAgICAgICAgICAgIDVlOjFjOjgxOjYwOjQ2OjNlOmI1OmIzOjNkOjJmOmE2OmRlOjQ3OjFjOmJjOgorICAgICAgICAgICAgICAgICAgICA5MjphZTplYjpkZjoyNzo2YjoxNjo1NjpiNzpkYzplYzpkMTo1NTo1NzphNToKKyAgICAgICAgICAgICAgICAgICAgNmU6ZWM6NzU6MjU6ZjU6Yjc6N2I6ZGY6YWI6ZDI6M2E6NWE6OTE6OTg6N2Q6CisgICAgICAgICAgICAgICAgICAgIDk3OjE3OjBiOjEzOjBhOmE3OjZiOjRhOjhiOmMxOjQ3OjMwOmZiOjNhOmY4OgorICAgICAgICAgICAgICAgICAgICA0MTowNDpkNTpjMTpkZjpiODoxZDpiZjo3YjowMTphNTo2NTphMjplMDoxZToKKyAgICAgICAgICAgICAgICAgICAgMzY6Yjc6YTY6NWM6Y2M6MzA6NWE6Zjg6Y2Q6NmY6Y2Q6ZjE6MTk6NjI6MjU6CisgICAgICAgICAgICAgICAgICAgIGNhOjAxOmUzOjM1OjdmOmZhOjIwOmY1OmRjOmZkOjY5OmIyOjZhOjAwOjdkOgorICAgICAgICAgICAgICAgICAgICAxNzpmNworICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOkZBTFNFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgN0Q6RTQ6OUM6NkI6RTY6Rjk6NzE6N0Q6NDY6RDI6MTI6M0Q6QUQ6NkI6MUQ6RkQ6QzI6QUE6Nzg6NEMKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICA2OTpjZTpmOTphOTpkNTplMjozMjpkYjpmZTphOTpmOTo5Mjo3YTpkNjo3NjozNzowNTo1MToKKyAgICAgICAgYzk6ZTM6YTE6MDM6NzI6YjI6YmM6MmM6ODY6NGI6MzE6MTY6MDI6MTA6ZTg6NDM6ZDQ6YzA6CisgICAgICAgIDMzOjNjOjRmOmVhOjlkOjEyOjZiOjU3OjUxOmJjOmQ3OmQ5OjQyOjU2OmNmOmM3OjI5OmU3OgorICAgICAgICBkNzo1MjoyNDo0OToyOTphYzo5YzpkZTo4ZjpjYzphYjoxYTphOTo2MjowNzo1YTo2YjpmNzoKKyAgICAgICAgZmI6MTk6YWI6ZjU6YjE6MmM6YTQ6YWE6ZGM6NWQ6MDM6NzM6MTc6N2M6ZWE6NTI6NDQ6ODA6CisgICAgICAgIGNhOjcwOmQzOjEwOmM1OjJlOmZkOjlmOmQyOjBkOjY1OmM0OmYyOmNjOmVmOjFiOjE4OmUxOgorICAgICAgICAwYTowODo0ZTo2NzpkMDo1Njo3ZjoyNDo1NDoyZTo3MzozMTpiNTo0ZDoyMjo3NDpmODozMDoKKyAgICAgICAgZjk6OTI6YzQ6NjQ6Yzk6NDY6ODA6ZDQ6ZTE6YmQ6ZDY6ZTc6MjY6ZWE6YmI6YzQ6ZmU6NmY6CisgICAgICAgIGEyOmM1OjEwOmU0OjY0OjJmOmIwOjQ0OjA0OjJjOmIzOjQ0OjM5OmNmOmI0OmRlOmFjOjgzOgorICAgICAgICA0Mzo1ZTowYjpjYTpjZDpmYjo0ZToxODplNjozODozOTplNzoxMDozZjpkNjo1OToxNzplNzoKKyAgICAgICAgNDI6ZWY6MDA6ZTM6ODg6YzY6NDM6YmM6MjE6MTI6YmY6MjA6YTg6NjQ6YzY6MzA6ZGM6OGM6CisgICAgICAgIDZiOmI4OjZhOmNlOjZiOjhhOjIyOjNiOmQ4OmFmOjBjOmI0OmJiOjRkOmJlOjk2OmRkOjQwOgorICAgICAgICBkOTo4NzozZTo5NToyZToxYToyNzoyMzo2MjplODo2ZTpiZDplMDo4OTpkMDphNzoyODoxNjoKKyAgICAgICAgOTU6ZWE6Y2I6ODk6YTM6Zjc6N2Y6ZmI6MGY6YWM6YWI6ZDY6YTg6YjQ6Y2I6NDM6OTI6ZDk6CisgICAgICAgIGNiOjNlOjhhOjExCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURRakNDQWlxZ0F3SUJBZ0lCQ1RBTkJna3Foa2lHOXcwQkFRc0ZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQTNXaGNOTWpFd01qRXlNVFEwTkRBM1dqQS9NUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SFRBYkJnTlZCQU1URkZCdmJHRnlVMU5NSUVObGNuUWdVMGhCTWpVMk1JSUIKK0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF1VHhLeGNpampwQVhwSjVTcW5GMUptR0EKKzU4ZTFiWXovcXJaQkpyZStFYTFjY3hZTVpCRklCUC9XNFRzRjI0bTdzNWNKMVJ3VTNXaUhPYkE5Y2N2aWR0QWEKKzJCZ3RnQnRVOXVWRW12SExyMkV1MzBrTm5RbTM3Ykg5UFAwOCtpVFBYYjk4NUZQbkpiWHFSQ0xwSnRQcUlKU2UKKzVtRm51aTRIWndzREw2SUo3ZkF6and2T0VPOW5wTVlJMnNIdHdqL1hTdDBWUGZsZUhJRmdSajYxc3owdnB0NUgKK0hMeVNydXZmSjJzV1ZyZmM3TkZWVjZWdTdIVWw5YmQ3MzZ2U09scVJtSDJYRndzVENxZHJTb3ZCUnpEN092aEIKK0JOWEIzN2dkdjNzQnBXV2k0QjQydDZaY3pEQmErTTF2emZFWllpWEtBZU0xZi9vZzlkejlhYkpxQUgwWDl3SUQKK0FRQUJvMDB3U3pBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCUjk1SnhyNXZseGZVYlNFajJ0YXgzOXdxcDQKK1REQWZCZ05WSFNNRUdEQVdnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5L3pBTkJna3Foa2lHOXcwQkFRc0YKK0FBT0NBUUVBYWM3NXFkWGlNdHYrcWZtU2V0WjJOd1ZSeWVPaEEzS3l2Q3lHU3pFV0FoRG9ROVRBTXp4UDZwMFMKK2ExZFJ2TmZaUWxiUHh5bm4xMUlrU1Ntc25ONlB6S3NhcVdJSFdtdjMreG1yOWJFc3BLcmNYUU56RjN6cVVrU0EKK3luRFRFTVV1L1ovU0RXWEU4c3p2R3hqaENnaE9aOUJXZnlSVUxuTXh0VTBpZFBndytaTEVaTWxHZ05UaHZkYm4KK0p1cTd4UDV2b3NVUTVHUXZzRVFFTExORU9jKzAzcXlEUTE0THlzMzdUaGptT0RubkVEL1dXUmZuUXU4QTQ0akcKK1E3d2hFcjhncUdUR01OeU1hN2hxem11S0lqdllyd3kwdTAyK2x0MUEyWWMrbFM0YUp5Tmk2RzY5NEluUXB5Z1cKK2xlckxpYVAzZi9zUHJLdldxTFRMUTVMWnl6NktFUT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X3NoYTM4NC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X3NoYTM4NC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjYWFjOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhMzg0LmNydApAQCAtMCwwICsxLDc3IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEwICgweGEpCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogRmViIDEyIDE0OjQ0OjA3IDIwMTEgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBGZWIgMTIgMTQ6NDQ6MDcgMjAyMSBHTVQKKyAgICAgICAgU3ViamVjdDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgQ2VydCBTSEEzODQKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgyMDQ4IGJpdCk6CisgICAgICAgICAgICAgICAgICAgIDAwOmI5OjNjOjRhOmM1OmM4OmEzOjhlOjkwOjE3OmE0OjllOjUyOmFhOjcxOgorICAgICAgICAgICAgICAgICAgICA3NToyNjo2MTo4MDplNzpjNzpiNTo2ZDo4YzpmZjphYTpiNjo0MToyNjpiNzoKKyAgICAgICAgICAgICAgICAgICAgYmU6MTE6YWQ6NWM6NzM6MTY6MGM6NjQ6MTE6NDg6MDQ6ZmY6ZDY6ZTE6M2I6CisgICAgICAgICAgICAgICAgICAgIDA1OmRiOjg5OmJiOmIzOjk3OjA5OmQ1OjFjOjE0OmRkOjY4Ojg3OjM5OmIwOgorICAgICAgICAgICAgICAgICAgICAzZDo3MTpjYjplMjo3NjpkMDoxYTpkODoxODoyZDo4MDoxYjo1NDpmNjplNToKKyAgICAgICAgICAgICAgICAgICAgNDQ6OWE6ZjE6Y2I6YWY6NjE6MmU6ZGY6NDk6MGQ6OWQ6MDk6Yjc6ZWQ6YjE6CisgICAgICAgICAgICAgICAgICAgIGZkOjNjOmZkOjNjOmZhOjI0OmNmOjVkOmJmOjdjOmU0OjUzOmU3OjI1OmI1OgorICAgICAgICAgICAgICAgICAgICBlYTo0NDoyMjplOToyNjpkMzplYToyMDo5NDo5ZTplNjo2MTo2NzpiYToyZToKKyAgICAgICAgICAgICAgICAgICAgMDc6Njc6MGI6MDM6MmY6YTI6MDk6ZWQ6ZjA6MzM6OGY6MGI6Y2U6MTA6ZWY6CisgICAgICAgICAgICAgICAgICAgIDY3OmE0OmM2OjA4OmRhOmMxOmVkOmMyOjNmOmQ3OjRhOmRkOjE1OjNkOmY5OgorICAgICAgICAgICAgICAgICAgICA1ZToxYzo4MTo2MDo0NjozZTpiNTpiMzozZDoyZjphNjpkZTo0NzoxYzpiYzoKKyAgICAgICAgICAgICAgICAgICAgOTI6YWU6ZWI6ZGY6Mjc6NmI6MTY6NTY6Yjc6ZGM6ZWM6ZDE6NTU6NTc6YTU6CisgICAgICAgICAgICAgICAgICAgIDZlOmVjOjc1OjI1OmY1OmI3OjdiOmRmOmFiOmQyOjNhOjVhOjkxOjk4OjdkOgorICAgICAgICAgICAgICAgICAgICA5NzoxNzowYjoxMzowYTphNzo2Yjo0YTo4YjpjMTo0NzozMDpmYjozYTpmODoKKyAgICAgICAgICAgICAgICAgICAgNDE6MDQ6ZDU6YzE6ZGY6Yjg6MWQ6YmY6N2I6MDE6YTU6NjU6YTI6ZTA6MWU6CisgICAgICAgICAgICAgICAgICAgIDM2OmI3OmE2OjVjOmNjOjMwOjVhOmY4OmNkOjZmOmNkOmYxOjE5OjYyOjI1OgorICAgICAgICAgICAgICAgICAgICBjYTowMTplMzozNTo3ZjpmYToyMDpmNTpkYzpmZDo2OTpiMjo2YTowMDo3ZDoKKyAgICAgICAgICAgICAgICAgICAgMTc6ZjcKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAgICAgICAgICAgICBDQTpGQUxTRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIDdEOkU0OjlDOjZCOkU2OkY5OjcxOjdEOjQ2OkQyOjEyOjNEOkFEOjZCOjFEOkZEOkMyOkFBOjc4OjRDCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgNjg6ZTY6MDM6ZjA6YmE6NDQ6ZTc6Y2M6ZTE6YjI6MDc6NmM6NTY6Yzg6YmU6Yjc6YmE6ODA6CisgICAgICAgIDYxOmM4OmY5OjY2OjU3OmUxOmNiOjYwOjdkOmNkOjhkOjBmOjY2OmIwOmYyOjYxOjQ1OmZkOgorICAgICAgICBmYzpjODo5Mzo5NTpiYjpiNDoxNDowMDo3NjpjNzplMTo1NzphNjplMjo2MDozMTo4YjpmYzoKKyAgICAgICAgZTE6MGY6Njg6MjQ6NGM6YmI6MWQ6YzU6YjY6Nzc6ZWM6MjM6ZTE6NWI6NGY6MTA6NmM6NmE6CisgICAgICAgIGUwOjZkOmU3OjM0OmY4OjcyOjE0OmFlOjE2OjU3OjI1OjhiOmU4OmI5OjcxOmExOmQwOjc4OgorICAgICAgICBlYToxODpjMTo1MTpjNDoyZToyNjo2ZDpjYjo4MDo4ZDphNTpiOTpkZTplNzozNzpjMToyYjoKKyAgICAgICAgZWM6ZTg6OTg6YzY6Zjk6MWE6YmY6ZmU6YTM6ZGU6M2Q6ZDY6NTk6OTg6NDU6ZGM6NGE6YTY6CisgICAgICAgIGFkOjBhOmFmOjczOjUwOjQzOjIzOjVhOjliOjlhOmY5OjhmOmZmOjQxOjE1OmU1OjljOjEyOgorICAgICAgICA5ZToyOTo1NTo1Yzo3OTo5Yzo4OTowYzpjODo4YTo4Mjo4NjpiMTo5NjphZTo3Yzo3ZDo0ZjoKKyAgICAgICAgMGI6ZmQ6ZTM6OWU6OGI6YTU6NGQ6ODg6NTU6MDU6YWQ6NmM6NjM6YWE6NzQ6MGM6NDE6MGQ6CisgICAgICAgIDQ3OjIyOmNjOjFhOjQ1OjAyOjkyOjVlOmQxOmUwOmI5OjMxOjUyOmZmOmY2OjMwOmYwOjg3OgorICAgICAgICAyYzpkZDpmYTpmYTpiOTpjYzo0NTpjYjozNjozMzo1YjozNTo3Zjo1ZjowNTo0ZjplMDo4ZjoKKyAgICAgICAgOWE6ZTQ6ZDI6ZmE6Yzk6ZDQ6ZmM6NjI6OTk6YWM6NTk6ZmI6ZmQ6MDQ6YmM6NWE6YzA6NDc6CisgICAgICAgIDVlOjVkOjNkOmRmOjMxOjhjOjdmOmRjOjAwOmNiOmNiOmMwOmY0OjYyOjQxOjQ0OmRiOjFkOgorICAgICAgICBiYTpjMDphZDo4YQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEUWpDQ0FpcWdBd0lCQWdJQkNqQU5CZ2txaGtpRzl3MEJBUXdGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREEzV2hjTk1qRXdNakV5TVRRME5EQTNXakEvTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhUQWJCZ05WQkFNVEZGQnZiR0Z5VTFOTUlFTmxjblFnVTBoQk16ZzBNSUlCCitJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdVR4S3hjaWpqcEFYcEo1U3FuRjFKbUdBCis1OGUxYll6L3FyWkJKcmUrRWExY2N4WU1aQkZJQlAvVzRUc0YyNG03czVjSjFSd1UzV2lIT2JBOWNjdmlkdEFhCisyQmd0Z0J0VTl1VkVtdkhMcjJFdTMwa05uUW0zN2JIOVBQMDgraVRQWGI5ODVGUG5KYlhxUkNMcEp0UHFJSlNlCis1bUZudWk0SFp3c0RMNklKN2ZBemp3dk9FTzlucE1ZSTJzSHR3ai9YU3QwVlBmbGVISUZnUmo2MXN6MHZwdDVICitITHlTcnV2Zkoyc1dWcmZjN05GVlY2VnU3SFVsOWJkNzM2dlNPbHFSbUgyWEZ3c1RDcWRyU292QlJ6RDdPdmhCCitCTlhCMzdnZHYzc0JwV1dpNEI0MnQ2WmN6REJhK00xdnpmRVpZaVhLQWVNMWYvb2c5ZHo5YWJKcUFIMFg5d0lECitBUUFCbzAwd1N6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlI5NUp4cjV2bHhmVWJTRWoydGF4Mzl3cXA0CitUREFmQmdOVkhTTUVHREFXZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS96QU5CZ2txaGtpRzl3MEJBUXdGCitBQU9DQVFFQWFPWUQ4THBFNTh6aHNnZHNWc2krdDdxQVljajVabGZoeTJCOXpZMFBackR5WVVYOS9NaVRsYnUwCitGQUIyeCtGWHB1SmdNWXY4NFE5b0pFeTdIY1cyZCt3ajRWdFBFR3hxNEczbk5QaHlGSzRXVnlXTDZMbHhvZEI0Cis2aGpCVWNRdUptM0xnSTJsdWQ3bk44RXI3T2lZeHZrYXYvNmozajNXV1poRjNFcW1yUXF2YzFCREkxcWJtdm1QCisvMEVWNVp3U25pbFZYSG1jaVF6SWlvS0dzWmF1ZkgxUEMvM2pub3VsVFloVkJhMXNZNnAwREVFTlJ5TE1Ha1VDCitrbDdSNExreFV2LzJNUENITE4zNitybk1SY3MyTTFzMWYxOEZUK0NQbXVUUytzblUvR0tackZuNy9RUzhXc0JICitYbDA5M3pHTWY5d0F5OHZBOUdKQlJOc2R1c0N0aWc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9zaGE1MTIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9zaGE1MTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYjRlZWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X3NoYTUxMi5jcnQKQEAgLTAsMCArMSw3NyBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAxMSAoMHhiKQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowNyAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjA3IDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgU0hBNTEyCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgIFJTQSBQdWJsaWMgS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1cyAoMjA0OCBiaXQpOgorICAgICAgICAgICAgICAgICAgICAwMDpiOTozYzo0YTpjNTpjODphMzo4ZTo5MDoxNzphNDo5ZTo1MjphYTo3MToKKyAgICAgICAgICAgICAgICAgICAgNzU6MjY6NjE6ODA6ZTc6Yzc6YjU6NmQ6OGM6ZmY6YWE6YjY6NDE6MjY6Yjc6CisgICAgICAgICAgICAgICAgICAgIGJlOjExOmFkOjVjOjczOjE2OjBjOjY0OjExOjQ4OjA0OmZmOmQ2OmUxOjNiOgorICAgICAgICAgICAgICAgICAgICAwNTpkYjo4OTpiYjpiMzo5NzowOTpkNToxYzoxNDpkZDo2ODo4NzozOTpiMDoKKyAgICAgICAgICAgICAgICAgICAgM2Q6NzE6Y2I6ZTI6NzY6ZDA6MWE6ZDg6MTg6MmQ6ODA6MWI6NTQ6ZjY6ZTU6CisgICAgICAgICAgICAgICAgICAgIDQ0OjlhOmYxOmNiOmFmOjYxOjJlOmRmOjQ5OjBkOjlkOjA5OmI3OmVkOmIxOgorICAgICAgICAgICAgICAgICAgICBmZDozYzpmZDozYzpmYToyNDpjZjo1ZDpiZjo3YzplNDo1MzplNzoyNTpiNToKKyAgICAgICAgICAgICAgICAgICAgZWE6NDQ6MjI6ZTk6MjY6ZDM6ZWE6MjA6OTQ6OWU6ZTY6NjE6Njc6YmE6MmU6CisgICAgICAgICAgICAgICAgICAgIDA3OjY3OjBiOjAzOjJmOmEyOjA5OmVkOmYwOjMzOjhmOjBiOmNlOjEwOmVmOgorICAgICAgICAgICAgICAgICAgICA2NzphNDpjNjowODpkYTpjMTplZDpjMjozZjpkNzo0YTpkZDoxNTozZDpmOToKKyAgICAgICAgICAgICAgICAgICAgNWU6MWM6ODE6NjA6NDY6M2U6YjU6YjM6M2Q6MmY6YTY6ZGU6NDc6MWM6YmM6CisgICAgICAgICAgICAgICAgICAgIDkyOmFlOmViOmRmOjI3OjZiOjE2OjU2OmI3OmRjOmVjOmQxOjU1OjU3OmE1OgorICAgICAgICAgICAgICAgICAgICA2ZTplYzo3NToyNTpmNTpiNzo3YjpkZjphYjpkMjozYTo1YTo5MTo5ODo3ZDoKKyAgICAgICAgICAgICAgICAgICAgOTc6MTc6MGI6MTM6MGE6YTc6NmI6NGE6OGI6YzE6NDc6MzA6ZmI6M2E6Zjg6CisgICAgICAgICAgICAgICAgICAgIDQxOjA0OmQ1OmMxOmRmOmI4OjFkOmJmOjdiOjAxOmE1OjY1OmEyOmUwOjFlOgorICAgICAgICAgICAgICAgICAgICAzNjpiNzphNjo1YzpjYzozMDo1YTpmODpjZDo2ZjpjZDpmMToxOTo2MjoyNToKKyAgICAgICAgICAgICAgICAgICAgY2E6MDE6ZTM6MzU6N2Y6ZmE6MjA6ZjU6ZGM6ZmQ6Njk6YjI6NmE6MDA6N2Q6CisgICAgICAgICAgICAgICAgICAgIDE3OmY3CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6RkFMU0UKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICA3RDpFNDo5Qzo2QjpFNjpGOTo3MTo3RDo0NjpEMjoxMjozRDpBRDo2QjoxRDpGRDpDMjpBQTo3ODo0QworICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTUxMldpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIDg0OjY4Ojc4OjcyOjU0OjAwOmJmOjhhOjQ1OjI4OjM1OmJlOjE4OjQ3OmQ4OjY5OmY2OjY3OgorICAgICAgICBkZTphNjpmODphNjpkMDpmZDo5Zjo3OTpmNzplODowMjo4YTpjMzo4Mzo1ZDo4NTo0NTpjYzoKKyAgICAgICAgYjY6OTg6Nzc6YTc6MTg6M2Y6NmI6ZDI6ZTQ6ZDA6YWY6ZDU6NTI6ZDk6ZGI6N2U6NGE6ZDM6CisgICAgICAgIDY4OmIwOjA4OjY0OjE0OmRlOmMyOjNiOjFkOjdiOmFjOjc5OmFkOjQ5OjVhOjRjOmY2OmQyOgorICAgICAgICAzNTplZjphNDo4YzpiNzo1YjpkMTowYjo3Yjo1MDpjNjo5Yzo0ODozZTo5NjozYjoxYjowYjoKKyAgICAgICAgMGU6ZTg6MTA6M2Y6OGM6M2I6NGY6NmI6MWQ6NWM6M2E6Mjc6ZjM6NDM6MjI6YWM6Mzc6MTE6CisgICAgICAgIDcxOmI4OjA3OjY2OmIwOmY4OjcxOmMzOjIyOmNmOmY0Ojk2OjgzOjkzOmZiOjQyOmIwOjFhOgorICAgICAgICA0MzpmOTo0YjpkZjpjYjo1ZjowZjpiYTo5ZTo4MDpmMTpmZjowODozYTo0Njo1MTpkYzpkMDoKKyAgICAgICAgMzY6YmQ6YjE6YzQ6Y2E6ZmI6MDA6MTI6ZTc6ZTA6Mzc6NzA6NDA6MGU6NzM6MTk6NjM6YzI6CisgICAgICAgIGU1OmRhOjU2Ojc3OjA3OjY4OmE1OjQwOjllOmQ2OjBmOmFkOmI1OmIzOmIyOmY1OjNmOjAxOgorICAgICAgICBlODo2ODplNzphMzpiMDpkNzpmMzpkZDpmZjpiNjpkNzo4Zjo3NTo0ZToyNTphYjoxMjozMjoKKyAgICAgICAgOTk6NDU6YWQ6NTc6NDA6ZGU6ZDc6YjQ6MGQ6ZDA6YzM6NjY6ODk6NDc6ZjI6MGM6YjI6YjU6CisgICAgICAgIGRmOjUyOjBlOmZhOjYzOjYyOjY1Ojg5OjA3OjRhOjgwOjY5OjBlOjRlOmJhOmMwOjQzOjVkOgorICAgICAgICAwNTo3NToyMjpjZjo1MDpmOTphYzpiZDplZjo4ZDo4YzoxMDowODpiNjo4Yjo2Mjo0ZjphMToKKyAgICAgICAgNjA6NTU6YTM6MGQKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFFqQ0NBaXFnQXdJQkFnSUJDekFOQmdrcWhraUc5dzBCQVEwRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBM1doY05NakV3TWpFeU1UUTBOREEzV2pBL01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIVEFiQmdOVkJBTVRGRkJ2YkdGeVUxTk1JRU5sY25RZ1UwaEJOVEV5TUlJQgorSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXVUeEt4Y2lqanBBWHBKNVNxbkYxSm1HQQorNThlMWJZei9xclpCSnJlK0VhMWNjeFlNWkJGSUJQL1c0VHNGMjRtN3M1Y0oxUndVM1dpSE9iQTljY3ZpZHRBYQorMkJndGdCdFU5dVZFbXZITHIyRXUzMGtOblFtMzdiSDlQUDA4K2lUUFhiOTg1RlBuSmJYcVJDTHBKdFBxSUpTZQorNW1GbnVpNEhad3NETDZJSjdmQXpqd3ZPRU85bnBNWUkyc0h0d2ovWFN0MFZQZmxlSElGZ1JqNjFzejB2cHQ1SAorSEx5U3J1dmZKMnNXVnJmYzdORlZWNlZ1N0hVbDliZDczNnZTT2xxUm1IMlhGd3NUQ3FkclNvdkJSekQ3T3ZoQgorQk5YQjM3Z2R2M3NCcFdXaTRCNDJ0NlpjekRCYStNMXZ6ZkVaWWlYS0FlTTFmL29nOWR6OWFiSnFBSDBYOXdJRAorQVFBQm8wMHdTekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJSOTVKeHI1dmx4ZlViU0VqMnRheDM5d3FwNAorVERBZkJnTlZIU01FR0RBV2dCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvekFOQmdrcWhraUc5dzBCQVEwRgorQUFPQ0FRRUFoR2g0Y2xRQXY0cEZLRFcrR0VmWWFmWm4zcWI0cHREOW4zbjM2QUtLdzROZGhVWE10cGgzcHhnLworYTlMazBLL1ZVdG5iZmtyVGFMQUlaQlRld2pzZGU2eDVyVWxhVFBiU05lK2tqTGRiMFF0N1VNYWNTRDZXT3hzTAorRHVnUVA0dzdUMnNkWERvbjgwTWlyRGNSY2JnSFpyRDRjY01pei9TV2c1UDdRckFhUS9sTDM4dGZEN3FlZ1BILworQ0RwR1VkelFOcjJ4eE1yN0FCTG40RGR3UUE1ekdXUEM1ZHBXZHdkb3BVQ2UxZyt0dGJPeTlUOEI2R2pubzdEWAorODkzL3R0ZVBkVTRscXhJeW1VV3RWMERlMTdRTjBNTm1pVWZ5RExLMTMxSU8rbU5pWllrSFNvQnBEazY2d0VOZAorQlhVaXoxRDVyTDN2all3UUNMYUxZaytoWUZXakRRPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfdjFfd2l0aF9leHQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF92MV93aXRoX2V4dC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwNzA0OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfdjFfd2l0aF9leHQuY3J0CkBAIC0wLDAgKzEsMjMgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRHpUQ0NBclVDQ1FDOTdVVEgwajdDcERBTkJna3Foa2lHOXcwQkFRVUZBRENCaHpFTE1Ba0dBMVVFQmhNQworV0ZneEN6QUpCZ05WQkFnVEFsaFlNUXN3Q1FZRFZRUUhFd0pZV0RFTE1Ba0dBMVVFQ2hNQ1dGZ3hDekFKQmdOVgorQkFzVEFsaFlNU2N3SlFZSktvWklodmNOQVFrQkZoaGhaRzFwYmtCcFpHVnVkR2wwZVMxamFHVmpheTV2Y21jeAorR3pBWkJnTlZCQU1URW1sa1pXNTBhWFI1TFdOb1pXTnJMbTl5WnpBZUZ3MHhNekEzTURReE5qRTNNREphRncweAorTkRBM01EUXhOakUzTURKYU1JR0hNUXN3Q1FZRFZRUUdFd0pZV0RFTE1Ba0dBMVVFQ0JNQ1dGZ3hDekFKQmdOVgorQkFjVEFsaFlNUXN3Q1FZRFZRUUtFd0pZV0RFTE1Ba0dBMVVFQ3hNQ1dGZ3hKekFsQmdrcWhraUc5dzBCQ1FFVworR0dGa2JXbHVRR2xrWlc1MGFYUjVMV05vWldOckxtOXlaekViTUJrR0ExVUVBeE1TYVdSbGJuUnBkSGt0WTJobAorWTJzdWIzSm5NSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTF2OEZzd011Z2hPOAorbXdrSFdBZitYUnBLMzNrWVIwaWZCbk9idmsyUjlaVEVVay9UZkZFRUZWbGVuNXhoaUUwZzhsYkNqOFk1TXpzZword1pzSnY1aW4vS25yYVliN1ZDMGFoMGp4NHNNa2hLUmN5VVdmanlIOHI3Rk5IMWoxamQwOFpwV0pHb3RZeHhhTAorZXZxb20xcnpMTjk5SlBPYnd5Q0NnR2NRamxSVjdjTWZJZ3dsd0hiL0pQWE95L2hZQWdqckNqcXZCdTNuTDUvYgorSEYwUHlWR2lLQ0VRaUhoTUJLTmpBeHpRckNVR3k3VnArM1FsSVlyczYvbTVBOTZ2b2hYL2ord3p3SXAzUWdpSworWWhqNUU0Wm8vaVFMZjZSd2w3cEw0UlRkVCtjcmN5MTQzbVlpU2hOWStheWw5c25mVkpObnVIYU1lMTVmVkVzUAorWDlsRHZkQnZYd0lEQVFBQm96OHdQVEE3QmdOVkhSRUVOREF5Z2hKcFpHVnVkR2wwZVMxamFHVmpheTV2Y21lQworRm5kM2R5NXBaR1Z1ZEdsMGVTMWphR1ZqYXk1dmNtZUhCQ1U3L2pBd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQgorQUFYVVhvV2xReEt2U0NWV2hlczh4MDNNQ3VkZTBuRHFERkgxRFBHSUtlVmVXT3c4N25WbmkraEl2eThJSTZoagorNVpmR1NIdVpjaTJBZ0VsQTN0WGsycURjWi91QlhlMlZWNEl3c2dYS1VZU2xwejF4b1U1NUluVDRlN0tkc3NFUAorSE95clUwM0R6bThKazBQaGdFSnBWNDh0a1dZb0p2WnZPaXdHMGU0M1VQRHY5eHA4QzhFYnZKbW11V2tVV25OVworbzB5RG5vQU94R2ZVR1NVUTFndVRwV0NvUUVLajNEUzR2NGxJMGtObUptK29SRTJ2djFYZWFsV0VIU3VNcFJaTworUWh5OFdJbVgzbXV3OTlNUDU3OXRZNDRENVo3cDNrcGlDMWJ3VjN0emtIZGY1bWtyQWJGSklmbGlQdmpNclBNdworMmV5WFhpakRzZWJwVDB3M3J1TXhqSGc9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jbGkyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NsaTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZmE1MTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jbGkyLmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNMRENDQWJLZ0F3SUJBZ0lCRFRBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UTXdPVEkwTVRVMU1qQTBXaGNOTWpNd09USXlNVFUxTWpBMFdqQkJNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SHpBZEJnTlZCQU1URmxCdmJHRnlVMU5NSUZSbGMzUWdRMnhwWlc1MElESXcKK1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSWDVhNnhjOS9Uckx1VHVJSC9FcTd1NWxPc3psVlQKKzlqUU96QzdqWXlVTDM1amk4MXhnTnBiQTFSZ1VjT1YvbjlWTFJSamxzR3pWWFBpV2o0ZHdvK1RIbzRHZE1JR2EKK01Ba0dBMVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVGSG9BWDRaay9PQmQ1UkVRTzdMbU84UW1QOC9pTUc0R0ExVWQKK0l3Um5NR1dBRkoxdElDUkpBVDhyeTNpMUdieCtKTW5iK3paOG9VS2tRREErTVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwR0MKK0NRREJRK0orWWtQTTZEQUtCZ2dxaGtqT1BRUURBZ05vQURCbEFqQktaUTE3SUlPaW1ibW9EL3lON284OXUzQk0KK2xnT3Nqbmh3M2ZJT29MSVd5MldPR3NrL0xHRisrRHp2clJ6dU5pQUNNUUNkOGllbTFYUzRKSzdoYWo4eG9jcFUKK0x3alFqZTVQREdIZmQzaDl0UDM4UWtudTViSnF3czBtZDJLT0tIeWVWMFU9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jbGkyLmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NsaTIua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDdkMDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jbGkyLmtleQpAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUhjQ0FRRUVJUGIzaG1UeFozL21aSTN2eWs3cDNVM3dCZitXSW9wNmhEaGtGekpobUxjcW9Bb0dDQ3FHU000OQorQXdFSG9VUURRZ0FFVitXdXNYUGYwNnk3azdpQi94S3U3dVpUck01VlUvWTBEc3d1NDJNbEM5K1k0dk5jWURhVword05VWUZIRGxmNS9WUzBVWTViQnMxVno0bG8rSGNLUGt4dz09CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZWMtc2hhMS5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZWMtc2hhMS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1ODY0MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1lYy1zaGExLnBlbQpAQCAtMCwwICsxLDEwIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJiekNCOWdJQkFUQUpCZ2NxaGtqT1BRUUJNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFEKK2IyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFSY05NVE13T1RJME1UWXoKK01UQTRXaGNOTWpNd09USXlNVFl6TVRBNFdqQVVNQklDQVFvWERURXpNRGt5TkRFMk1qZ3pPRnFnY2pCd01HNEcKK0ExVWRJd1JuTUdXQUZKMXRJQ1JKQVQ4cnkzaTFHYngrSk1uYit6WjhvVUtrUURBK01Rc3dDUVlEVlFRR0V3Sk8KK1RERVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWcKK1EwR0NDUURCUStKK1lrUE02REFKQmdjcWhrak9QUVFCQTJrQU1HWUNNUURWRzk1cnJTU2w0ZEpnYko1dlIxR1cKK3N2RXVFc0FoMzVFaEYxV3JjYWRNdUNlTVFWWDljVVB1cEZmUVVwSHlNZm9DTVFDS2YweXY4cE45QkFvaTNGVm0KKzU2bWVXUGhVZWtnTEtLTUFvYnQyb0pKWTZmZXVpRlUyWUZHczFhRjByVjZCaitVPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWVjLXNoYTIyNC5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZWMtc2hhMjI0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTMxZjEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWVjLXNoYTIyNC5wZW0KQEAgLTAsMCArMSwxMCBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCY0RDQjl3SUJBVEFLQmdncWhrak9QUVFEQVRBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEVYRFRFek1Ea3lOREUyCitNekV3T0ZvWERUSXpNRGt5TWpFMk16RXdPRm93RkRBU0FnRUtGdzB4TXpBNU1qUXhOakk0TXpoYW9ISXdjREJ1CitCZ05WSFNNRVp6QmxnQlNkYlNBa1NRRS9LOHQ0dFJtOGZpVEoyL3MyZktGQ3BFQXdQakVMTUFrR0ExVUVCaE1DCitUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJ3d0dnWURWUVFERXhOUWIyeGhjbk56YkNCVVpYTjBJRVZECitJRU5CZ2drQXdVUGlmbUpEek9nd0NnWUlLb1pJemowRUF3RURhQUF3WlFJd2JuK2kwZE9lc3QwSUpHenVxQkxBCitWNW5zY1pQdkhqRFY2bFdzU3d1clM0TEMvVXYvcVd0ZXVNQ3AzT3FRUkpIY0FqRUE2S0EwZGlib3ZmTDFXS0ZvCitDOGpVR3hsTWZIZVdEUmtxTWZjampnSXBreTd2NTBzS3RET2ZtRkpuM0hGVWJpS3AKKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmZDVmOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtCkBAIC0wLDAgKzEsMTAgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQmNUQ0I5d0lCQVRBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFWERURXpNRGt5TkRFMgorTXpFd09Gb1hEVEl6TURreU1qRTJNekV3T0Zvd0ZEQVNBZ0VLRncweE16QTVNalF4TmpJNE16aGFvSEl3Y0RCdQorQmdOVkhTTUVaekJsZ0JTZGJTQWtTUUUvSzh0NHRSbThmaVRKMi9zMmZLRkNwRUF3UGpFTE1Ba0dBMVVFQmhNQworVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sd3dHZ1lEVlFRREV4TlFiMnhoY25OemJDQlVaWE4wSUVWRAorSUVOQmdna0F3VVBpZm1KRHpPZ3dDZ1lJS29aSXpqMEVBd0lEYVFBd1pnSXhBS3VRNjg0czdneWh0eEtKcjZMbgorUzJCUTAyZjFqalBIclpWZFhhWnZtM0M1dEdpMmNLa29LMWFNaXlDM0xzUkN1QUl4QUlNaGowVG1jdUlacjVmWAorZzVSQnlEN3pVblpCcG9FQWRneEZ5NEpQSjJJVmlXT1Bla1NHaDhiL0pZMVZOUzZaYnc9PQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWVjLXNoYTM4NC5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZWMtc2hhMzg0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzU3YWJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWVjLXNoYTM4NC5wZW0KQEAgLTAsMCArMSwxMCBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCY0RDQjl3SUJBVEFLQmdncWhrak9QUVFEQXpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEVYRFRFek1Ea3lOREUyCitNekV3T0ZvWERUSXpNRGt5TWpFMk16RXdPRm93RkRBU0FnRUtGdzB4TXpBNU1qUXhOakk0TXpoYW9ISXdjREJ1CitCZ05WSFNNRVp6QmxnQlNkYlNBa1NRRS9LOHQ0dFJtOGZpVEoyL3MyZktGQ3BFQXdQakVMTUFrR0ExVUVCaE1DCitUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJ3d0dnWURWUVFERXhOUWIyeGhjbk56YkNCVVpYTjBJRVZECitJRU5CZ2drQXdVUGlmbUpEek9nd0NnWUlLb1pJemowRUF3TURhQUF3WlFJd2F0ZUphRDEzK1lpNEhXQklsT292Cis4WkRzdm5mUWZXL1IwQTFzMlpjY0FpK2J5dXJTaHVOR2lTdnNGU2g1ZC82UUFqRUE0MjdGOGJOay9mZGo1WVh1CitPbzFxRWQ3V3BEMmROVWIwZHJhR1NJY0pHQlJHemk1aXQxNFVYcjljUjRTNWVKNlEKKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1lYy1zaGE1MTIucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWVjLXNoYTUxMi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjOTQwMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1lYy1zaGE1MTIucGVtCkBAIC0wLDAgKzEsMTAgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQmNUQ0I5d0lCQVRBS0JnZ3Foa2pPUFFRREJEQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFWERURXpNRGt5TkRFMgorTXpFd09Gb1hEVEl6TURreU1qRTJNekV3T0Zvd0ZEQVNBZ0VLRncweE16QTVNalF4TmpJNE16aGFvSEl3Y0RCdQorQmdOVkhTTUVaekJsZ0JTZGJTQWtTUUUvSzh0NHRSbThmaVRKMi9zMmZLRkNwRUF3UGpFTE1Ba0dBMVVFQmhNQworVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sd3dHZ1lEVlFRREV4TlFiMnhoY25OemJDQlVaWE4wSUVWRAorSUVOQmdna0F3VVBpZm1KRHpPZ3dDZ1lJS29aSXpqMEVBd1FEYVFBd1pnSXhBTC9WRnJESVlVRUNzUzByVnBBeQorNnp0L0NxZUFaMXNhL2w1TFRhRzFYVzI4Nm4yS2liaXByNkVwa1laTllJUUlMZ0l4QUkwd2IzUHkxREhQV3BZZgorL0JGQkg3QzNLWXErbldUckxlRW5ocmpVMUx6Ry9DaVE4bG51c2t5YTZsdy9QM2xKL0E9PQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWZ1dHVyZS5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZnV0dXJlLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTM4MjE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWZ1dHVyZS5wZW0KQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCZ3pDQ0FRb0NBUUV3Q1FZSEtvWkl6ajBFQVRBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEVYRFRNeU1ETXhNREV4CitNRFV4TlZvWERUUXlNRE13T0RFeE1EVXhOVm93S0RBU0FnRUtGdzB4TXpBNU1qUXhOakk0TXpoYU1CSUNBUllYCitEVEUwTURFeU1ERXpORE13TlZxZ2NqQndNRzRHQTFVZEl3Um5NR1dBRkoxdElDUkpBVDhyeTNpMUdieCtKTW5iCisrelo4b1VLa1FEQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WCitCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBHQ0NRREJRK0orWWtQTTZEQUpCZ2NxaGtqT1BRUUJBMmdBCitNR1VDTVFDbXN2TnNPUWRiR3BtenBlWmxLVTlsRFA2eXlXZW5ySS84OXN3WllvZ0UzY1NQb2I0dE96ZVlnMzhpCitvcjkxSVBnQ01EN04vMFF6Nk5xMklnQnRaT1JMZ3NBMGx0SytXNkFPUysvRUlodkd1WFY4dWd1VXlZa25sNHZiCisrY0UrbFd4aENRPT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTEtYmFkc2lnbi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGExLWJhZHNpZ24ucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMmE1OTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGExLWJhZHNpZ24ucGVtCkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQ0pEQ0NBUVlDQVFFd0V3WUpLb1pJaHZjTkFRRUtNQWFpQkFJQ0FPb3dPekVMTUFrR0ExVUVCaE1DVGt3eAorRVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CRncweAorTkRBeE1qQXhNelEyTXpWYUZ3MHlOREF4TVRneE16UTJNelZhTUNnd0VnSUJDaGNOTVRNd09USTBNVFl5T0RNNAorV2pBU0FnRVdGdzB4TkRBeE1qQXhNelF6TURWYW9HY3daVEJqQmdOVkhTTUVYREJhZ0JTMFd1U2xzOTdTVXZhNQorMWFhVkQrcyt2TWY5LzZFL3BEMHdPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTQorTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CZ2dFQU1CTUdDU3FHU0liM0RRRUJDakFHb2dRQworQWdEcUE0SUJBUUI4WkJYMEJFZ1JjeDBsZmsxY3RFTFJ1MUFZb0o1Qm5zbVFwcTIzQ2E0WUlQMnliMmtUTjFaUworNGZSNFNnWWNOY3RnbzJKSmlOaVVrQ3UxWm5SVU9KVXk4VWxFaW8wK2FldW1UTno2Q2JlSkVEaHI1TkMzb2lWMAorTXp2TG45ckpWTFBldE9UOVVydnZJeThpejVQbjFkOG11NXJrdDlCS1FScTlOUXg4cmlLblNJb1RjOTFOTENNbworbWtDQ0I1NURWYmF6T0RTV0sxOWU2eVEwSlM0NTRSZ2xPc3FSdExKL0VEYmk2bENzTFhvdEZ0M0dFR01yb2IxTworN1FjazFaNTlib2FIeEdZRkVWbng5MCs0TTMvcWlrVnR3WmRjQmpMRW1mdXdZdnN6Rnc4SjJ5Nlh3bWcvSHRVYQoreTZsaTBKeldOSHRrS1VsQ3YyK1NFU1piRDNOVThHUVkKKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTEucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljYTRmNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTEucGVtCkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQ0pEQ0NBUVlDQVFFd0V3WUpLb1pJaHZjTkFRRUtNQWFpQkFJQ0FPb3dPekVMTUFrR0ExVUVCaE1DVGt3eAorRVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CRncweAorTkRBeE1qQXhNelEyTXpWYUZ3MHlOREF4TVRneE16UTJNelZhTUNnd0VnSUJDaGNOTVRNd09USTBNVFl5T0RNNAorV2pBU0FnRVdGdzB4TkRBeE1qQXhNelF6TURWYW9HY3daVEJqQmdOVkhTTUVYREJhZ0JTMFd1U2xzOTdTVXZhNQorMWFhVkQrcyt2TWY5LzZFL3BEMHdPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTQorTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CZ2dFQU1CTUdDU3FHU0liM0RRRUJDakFHb2dRQworQWdEcUE0SUJBUUI4WkJYMEJFZ1JjeDBsZmsxY3RFTFJ1MUFZb0o1Qm5zbVFwcTIzQ2E0WUlQMnliMmtUTjFaUworNGZSNFNnWWNOY3RnbzJKSmlOaVVrQ3UxWm5SVU9KVXk4VWxFaW8wK2FldW1UTno2Q2JlSkVEaHI1TkMzb2lWMAorTXp2TG45ckpWTFBldE9UOVVydnZJeThpejVQbjFkOG11NXJrdDlCS1FScTlOUXg4cmlLblNJb1RjOTFOTENNbworbWtDQ0I1NURWYmF6T0RTV0sxOWU2eVEwSlM0NTRSZ2xPc3FSdExKL0VEYmk2bENzTFhvdEZ0M0dFR01yb2IxTworN1FjazFaNTlib2FIeEdZRkVWbng5MCs0TTMvcWlrVnR3WmRjQmpMRW1mdXdZdnN6Rnc4SjJ5Nlh3bWcvSHRVYQoreTZsaTBKeldOSHRrS1VsQ3YyK1NFU1piRDNOVThHUVoKKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTIyNC5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGEyMjQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MWQ1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGEyMjQucGVtCkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQ2VqQ0NBVEVDQVFFd1BnWUpLb1pJaHZjTkFRRUtNREdnRFRBTEJnbGdoa2dCWlFNRUFnU2hHakFZQmdrcQoraGtpRzl3MEJBUWd3Q3dZSllJWklBV1VEQkFJRW9nUUNBZ0RpTURzeEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRAorVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6ZENCRFFSY05NVFF3TVRJdworTVRNMU5qQTJXaGNOTWpRd01URTRNVE0xTmpBMldqQW9NQklDQVFvWERURXpNRGt5TkRFMk1qZ3pPRm93RWdJQgorRmhjTk1UUXdNVEl3TVRNME16QTFXcUJuTUdVd1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvcgorUHJ6SC9mK2hQNlE5TURzeEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjRworQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6ZENCRFFZSUJBREErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDRworU0FGbEF3UUNCS0VhTUJnR0NTcUdTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ1NpQkFJQ0FPSURnZ0VCQUVKSQoraTlzUU96TXZ2T1Rrc040OCtYK2trL3drTE1LUkdJMjIybHFVNnk2dFAxTFgzT0UvK0tOOGdQWFIrbENDK2UwdgorVHNSVEprcEtFY21IWm9QLzhrT3RabkxiOVBkSVRLR01RblorZG1uNU1GRXpaSS96eXJZV3VKVHVLMVE4M3cwZQorTWM4OGNBaHU4aTRQVGsvV25zV0RwaEsxUTJZUnVwbW13V1NVcHAxWjJycFIrWVNDZWRDMDFUVnJ0U1VKVUJ3OQorTlNxS0RoeVdZSkliUzYvYkZhRVJzd0M4eGxNUmh5TEhVdmlram1BSzM2VGJJZGhUbkVmZkhPUFc3NXNFT0VFQgorZjBBM1Z0bFo3eTV5dDIvYTZ2T2F1SkNpdnhLdC9QdXRkSGZCcUg0M1FRbW9WTFdDMkZtVDlBRFRKd2NzWkIzRAorYTZKU3FDSU1SQ1FZMkpPVW4wQT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTI1Ni5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGEyNTYucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNmE0OTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGEyNTYucGVtCkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQ2VqQ0NBVEVDQVFFd1BnWUpLb1pJaHZjTkFRRUtNREdnRFRBTEJnbGdoa2dCWlFNRUFnR2hHakFZQmdrcQoraGtpRzl3MEJBUWd3Q3dZSllJWklBV1VEQkFJQm9nUUNBZ0RlTURzeEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRAorVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6ZENCRFFSY05NVFF3TVRJdworTVRNMU5qRTJXaGNOTWpRd01URTRNVE0xTmpFMldqQW9NQklDQVFvWERURXpNRGt5TkRFMk1qZ3pPRm93RWdJQgorRmhjTk1UUXdNVEl3TVRNME16QTFXcUJuTUdVd1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvcgorUHJ6SC9mK2hQNlE5TURzeEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjRworQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6ZENCRFFZSUJBREErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDRworU0FGbEF3UUNBYUVhTUJnR0NTcUdTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ0dpQkFJQ0FONERnZ0VCQUVaNAorb3FwOWk1ZVhyTjZhQ1NUYVUxajA3TVZURlcvVTFqUUFxNkdzZUI2YkV2b0VYRk1VSEpzZ0FPYnFDSzlmbGZFQworRkVxWHFXU28zM2hoUFU3QUtLdHRiRExqVVlSTm5RQVBSVW5SSWwxL2ExK1VqcWdLY2hXV0Q5aXR5ZVc4SUN4bworSWRBVFg5cmVZbVBETElNcVRDN3p1ZmxZa3ZydmRFT3VCT1JRUDVtbjRqOHQ4NE1TUUYvcDRxemFVMFh4TG80WAorY2t6WkNjSHBhNDVBQXBDRGpKTWQ5b25oRlZDWXN5a2lZckY5TlFGTzhUSTRsUTVqdjc5R291ZkV6dmhZMVNQQgorcjF4ejRzTXBmeWFvUGFhM1NNMi9uRDY1RTVqelhlbGwydTJWV05HS3Y0ekFRUDBFNXlHZWwrMXJrbEJsdGFkYgorWExkSnl5YWszM0NMQkt1K25KYz0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTM4NC5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGEzODQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZjdlNGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGEzODQucGVtCkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQ2VqQ0NBVEVDQVFFd1BnWUpLb1pJaHZjTkFRRUtNREdnRFRBTEJnbGdoa2dCWlFNRUFnS2hHakFZQmdrcQoraGtpRzl3MEJBUWd3Q3dZSllJWklBV1VEQkFJQ29nUUNBZ0RPTURzeEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRAorVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6ZENCRFFSY05NVFF3TVRJdworTVRNMU5qSTRXaGNOTWpRd01URTRNVE0xTmpJNFdqQW9NQklDQVFvWERURXpNRGt5TkRFMk1qZ3pPRm93RWdJQgorRmhjTk1UUXdNVEl3TVRNME16QTFXcUJuTUdVd1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvcgorUHJ6SC9mK2hQNlE5TURzeEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjRworQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6ZENCRFFZSUJBREErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDRworU0FGbEF3UUNBcUVhTUJnR0NTcUdTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ0tpQkFJQ0FNNERnZ0VCQUFjbworU250VUdETEJPQXUwSUlaYVZlYTVOdDFOTXNNY3BwQzBoV1B1SDFMS0F3eVVPREJxcFQrMCtBdUFMSzBlSWRZUgorYTdtQUIrY3YyZkZ3bXd4blFXSjFGdng0ZnQvTjJBQWZCODNWUktwU28zeFI4Ynhsb0hmVFdLbXl4SkhtSDlqMQorRVltTFM4NnJqM05oamY0bS9ZbFFRM0ltNUh3T2dTZ0JPRThnbHE1RCswV21zaTlMc05FWlhFek13N1RNVWdicworeTlvL2doWUYvc2hLVTRtZXdLM0RlTTlnUWlUY0g1QTRJU1hSODdoQlEwOEFLSlJBRzFDTHZUeXpxV2lVVVkraworcThpWkRZRjE3c0hyUGkyeW44cTljNHpkeGlhV0RHRGRMMExoOTB3WEdUQWFnZW9HRXEyNVRNdUw1RnBYK3UxdQorS1VIL3hmMWpFbk56YllOR2ladz0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTUxMi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGE1MTIucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMWQ2NTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGE1MTIucGVtCkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQ2VqQ0NBVEVDQVFFd1BnWUpLb1pJaHZjTkFRRUtNREdnRFRBTEJnbGdoa2dCWlFNRUFnT2hHakFZQmdrcQoraGtpRzl3MEJBUWd3Q3dZSllJWklBV1VEQkFJRG9nUUNBZ0MrTURzeEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRAorVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6ZENCRFFSY05NVFF3TVRJdworTVRNMU5qTTRXaGNOTWpRd01URTRNVE0xTmpNNFdqQW9NQklDQVFvWERURXpNRGt5TkRFMk1qZ3pPRm93RWdJQgorRmhjTk1UUXdNVEl3TVRNME16QTFXcUJuTUdVd1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvcgorUHJ6SC9mK2hQNlE5TURzeEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjRworQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6ZENCRFFZSUJBREErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDRworU0FGbEF3UUNBNkVhTUJnR0NTcUdTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ09pQkFJQ0FMNERnZ0VCQUI5RgoreXdCZnhPamV0eE5iQ0ZoT1lvUFkyanZGQ0ZWZGxvd01HdXhFaFgvTGt0cWlCWHFSYzJyNW5hUVN6dUhxTzhJcQorMXpBQ3RpRExyaTBDdmdTSGxyYXZCTmVZNGMyd2ovL3VlRkU4OXRZNXBLOUU2dlpwN2NWK1JmTXgyWWZHUEFBMgordDd0V1oyckpXekVMZzhjWjhocGpTd0ZIN0ptZ0p6akU1Z2kyZ0FEaEJZTzZWdjVTM1NPZ3FOamlOMU9NMzFBVQorcDZHSEs1WTFqdXJGNVp3enMrdzN3WG9YZ3BPeHh3RUM0ZWlTODZjOWtOU3Vkd1RMdkRUVTBiWUVRRTFjRitLMAorc0I4UVdBQkZKZnVPNWtqRDJ3M3JXZ21BaU9Lc1pveGQxeHJkYStXRDNKaERYbm9WcTNvVkJJVmxXVno2WUlEOAorZW5NZk12d1NjQTVBSW16dTl4QT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZDEwOTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwucGVtCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRFeE1ESXlNREV3TWpJMQorT1ZvWERURTVNVEV5TlRFd01qSTFPVm93S0RBU0FnRUJGdzB4TVRBeU1USXhORFEwTURkYU1CSUNBUU1YRFRFeAorTURJeE1qRTBORFF3TjFvd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFKWXVXZEtQZGJsTVZXQ254cE1uY2h1TAorZHFXeksyQkEwUmVsQ2FHanB4dXdYM05tTERtKzVoS2phL0RKeGFScVRPZjRSU0Mza2NYOENkSWxkc0xPOTZkegorLy93QVFkRlBEaHk2QUZUNXZLVE84SXRQSERiN3FGT3FGcXBlSmk1WE4xeW9aR1RCMWVpMG1nRDN4QmFLYnA2VQoreUNPWkpTSUZvbXQ3cGlUNEdjZ1dWSExVbXB5SEREZW9kTmhZUHJOMGpmMm1yK0VDZDlmUUpZZHoxcW0wWHgrUQorTmJLWERpUFJtUFgwcVZsZUNaU2VTcDFKQW1VNEdvQ08rOTZxUVVwamdsbCs2eFd5YTNVTmo2MWY5c2gwWnpyNworNXVnMkxabzV1Qk0vTHBOUjFLM1RMeE5DY2c3dVVQVG45cjE0M2Q3aXZKaFBsM3RFSm40UFhqdjZtbExvT2dVPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX2NhdF9lYy1yc2EucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX2NhdF9lYy1yc2EucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZGE4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfY2F0X2VjLXJzYS5wZW0KQEAgLTAsMCArMSwyMSBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCY1RDQjl3SUJBVEFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEVYRFRFek1Ea3lOREUyCitNekV3T0ZvWERUSXpNRGt5TWpFMk16RXdPRm93RkRBU0FnRUtGdzB4TXpBNU1qUXhOakk0TXpoYW9ISXdjREJ1CitCZ05WSFNNRVp6QmxnQlNkYlNBa1NRRS9LOHQ0dFJtOGZpVEoyL3MyZktGQ3BFQXdQakVMTUFrR0ExVUVCaE1DCitUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJ3d0dnWURWUVFERXhOUWIyeGhjbk56YkNCVVpYTjBJRVZECitJRU5CZ2drQXdVUGlmbUpEek9nd0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFLdVE2ODRzN2d5aHR4S0pyNkxuCitTMkJRMDJmMWpqUEhyWlZkWGFadm0zQzV0R2kyY0trb0sxYU1peUMzTHNSQ3VBSXhBSU1oajBUbWN1SVpyNWZYCitnNVJCeUQ3elVuWkJwb0VBZGd4Rnk0SlBKMklWaVdPUGVrU0doOGIvSlkxVk5TNlpidz09CistLS0tLUVORCBYNTA5IENSTC0tLS0tCistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJxekNCbERBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFWERURXhNREl5TURFd01qSTEKK09Wb1hEVEU1TVRFeU5URXdNakkxT1Zvd0tEQVNBZ0VCRncweE1UQXlNVEl4TkRRME1EZGFNQklDQVFNWERURXgKK01ESXhNakUwTkRRd04xb3dEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBSll1V2RLUGRibE1WV0NueHBNbmNodUwKK2RxV3pLMkJBMFJlbENhR2pweHV3WDNObUxEbSs1aEtqYS9ESnhhUnFUT2Y0UlNDM2tjWDhDZElsZHNMTzk2ZHoKKy8vd0FRZEZQRGh5NkFGVDV2S1RPOEl0UEhEYjdxRk9xRnFwZUppNVhOMXlvWkdUQjFlaTBtZ0QzeEJhS2JwNlUKK3lDT1pKU0lGb210N3BpVDRHY2dXVkhMVW1weUhERGVvZE5oWVByTjBqZjJtcitFQ2Q5ZlFKWWR6MXFtMFh4K1EKK05iS1hEaVBSbVBYMHFWbGVDWlNlU3AxSkFtVTRHb0NPKzk2cVFVcGpnbGwrNnhXeWEzVU5qNjFmOXNoMFp6cjcKKzV1ZzJMWm81dUJNL0xwTlIxSzNUTHhOQ2NnN3VVUFRuOXIxNDNkN2l2SmhQbDN0RUpuNFBYanY2bWxMb09nVT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9jYXRfZWNmdXQtcnNhLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9jYXRfZWNmdXQtcnNhLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2I4YzI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX2NhdF9lY2Z1dC1yc2EucGVtCkBAIC0wLDAgKzEsMjIgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQmd6Q0NBUW9DQVFFd0NRWUhLb1pJemowRUFUQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFWERUTXlNRE14TURFeAorTURVeE5Wb1hEVFF5TURNd09ERXhNRFV4TlZvd0tEQVNBZ0VLRncweE16QTVNalF4TmpJNE16aGFNQklDQVJZWAorRFRFME1ERXlNREV6TkRNd05WcWdjakJ3TUc0R0ExVWRJd1JuTUdXQUZKMXRJQ1JKQVQ4cnkzaTFHYngrSk1uYgorK3paOG9VS2tRREErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVgorQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwR0NDUURCUStKK1lrUE02REFKQmdjcWhrak9QUVFCQTJnQQorTUdVQ01RQ21zdk5zT1FkYkdwbXpwZVpsS1U5bERQNnl5V2VuckkvODlzd1pZb2dFM2NTUG9iNHRPemVZZzM4aQorb3I5MUlQZ0NNRDdOLzBRejZOcTJJZ0J0Wk9STGdzQTBsdEsrVzZBT1MrL0VJaHZHdVhWOHVndVV5WWtubDR2YgorK2NFK2xXeGhDUT09CistLS0tLUVORCBYNTA5IENSTC0tLS0tCistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJxekNCbERBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFWERURXhNREl5TURFd01qSTEKK09Wb1hEVEU1TVRFeU5URXdNakkxT1Zvd0tEQVNBZ0VCRncweE1UQXlNVEl4TkRRME1EZGFNQklDQVFNWERURXgKK01ESXhNakUwTkRRd04xb3dEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBSll1V2RLUGRibE1WV0NueHBNbmNodUwKK2RxV3pLMkJBMFJlbENhR2pweHV3WDNObUxEbSs1aEtqYS9ESnhhUnFUT2Y0UlNDM2tjWDhDZElsZHNMTzk2ZHoKKy8vd0FRZEZQRGh5NkFGVDV2S1RPOEl0UEhEYjdxRk9xRnFwZUppNVhOMXlvWkdUQjFlaTBtZ0QzeEJhS2JwNlUKK3lDT1pKU0lGb210N3BpVDRHY2dXVkhMVW1weUhERGVvZE5oWVByTjBqZjJtcitFQ2Q5ZlFKWWR6MXFtMFh4K1EKK05iS1hEaVBSbVBYMHFWbGVDWlNlU3AxSkFtVTRHb0NPKzk2cVFVcGpnbGwrNnhXeWEzVU5qNjFmOXNoMFp6cjcKKzV1ZzJMWm81dUJNL0xwTlIxSzNUTHhOQ2NnN3VVUFRuOXIxNDNkN2l2SmhQbDN0RUpuNFBYanY2bWxMb09nVT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9jYXRfcnNhLWVjLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9jYXRfcnNhLWVjLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWQzNjlkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX2NhdF9yc2EtZWMucGVtCkBAIC0wLDAgKzEsMjEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRFeE1ESXlNREV3TWpJMQorT1ZvWERURTVNVEV5TlRFd01qSTFPVm93S0RBU0FnRUJGdzB4TVRBeU1USXhORFEwTURkYU1CSUNBUU1YRFRFeAorTURJeE1qRTBORFF3TjFvd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFKWXVXZEtQZGJsTVZXQ254cE1uY2h1TAorZHFXeksyQkEwUmVsQ2FHanB4dXdYM05tTERtKzVoS2phL0RKeGFScVRPZjRSU0Mza2NYOENkSWxkc0xPOTZkegorLy93QVFkRlBEaHk2QUZUNXZLVE84SXRQSERiN3FGT3FGcXBlSmk1WE4xeW9aR1RCMWVpMG1nRDN4QmFLYnA2VQoreUNPWkpTSUZvbXQ3cGlUNEdjZ1dWSExVbXB5SEREZW9kTmhZUHJOMGpmMm1yK0VDZDlmUUpZZHoxcW0wWHgrUQorTmJLWERpUFJtUFgwcVZsZUNaU2VTcDFKQW1VNEdvQ08rOTZxUVVwamdsbCs2eFd5YTNVTmo2MWY5c2gwWnpyNworNXVnMkxabzV1Qk0vTHBOUjFLM1RMeE5DY2c3dVVQVG45cjE0M2Q3aXZKaFBsM3RFSm40UFhqdjZtbExvT2dVPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCY1RDQjl3SUJBVEFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEVYRFRFek1Ea3lOREUyCitNekV3T0ZvWERUSXpNRGt5TWpFMk16RXdPRm93RkRBU0FnRUtGdzB4TXpBNU1qUXhOakk0TXpoYW9ISXdjREJ1CitCZ05WSFNNRVp6QmxnQlNkYlNBa1NRRS9LOHQ0dFJtOGZpVEoyL3MyZktGQ3BFQXdQakVMTUFrR0ExVUVCaE1DCitUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJ3d0dnWURWUVFERXhOUWIyeGhjbk56YkNCVVpYTjBJRVZECitJRU5CZ2drQXdVUGlmbUpEek9nd0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFLdVE2ODRzN2d5aHR4S0pyNkxuCitTMkJRMDJmMWpqUEhyWlZkWGFadm0zQzV0R2kyY0trb0sxYU1peUMzTHNSQ3VBSXhBSU1oajBUbWN1SVpyNWZYCitnNVJCeUQ3elVuWkJwb0VBZGd4Rnk0SlBKMklWaVdPUGVrU0doOGIvSlkxVk5TNlpidz09CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfY2F0X3JzYWJhZHBlbS1lYy5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfY2F0X3JzYWJhZHBlbS1lYy5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzNWUxOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9jYXRfcnNhYmFkcGVtLWVjLnBlbQpAQCAtMCwwICsxLDIxIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJxekNCbERBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFWERURXhNREl5TURFd01qSTEKK09Wb1hEVEU1TVRFeU5URXdNakkxT1Zvd0tEQVNBZ0VCRncweE1UQXlNVEl4TkRRME1EZGFNQklDQVFNWERURXgKK01ESXhNakUwTkRRd04xb3dEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBSll1V2RLUGRibE1WV0NueHBNbmNodUwKK2RxV3pLMkJBMFJlbENhR2pweHV3WDNObUxEbSs1aEtqYS9ESnhhUnFUT2Y0UlNDM2tjWDhDZElsZHNMTzk2ZHoKKy8vd0FRZEZQRGh5NkFGVDV2S1RPOEl0UEhEYjdxRk9xRnFwZUppNVhOMXlvWkdUQjFlaTBtZ0QzeEJhS2JwNlUKK3lDT1pKU0lGb210N3BpVDRHY2dXVkhMVW1weUhERGVvZE5oWVByTjBqZjJtcitFQ2Q5ZlFKWWR6MXFtMFh4K1EKK05iS1hEaVBSbVBYMHFWbGVDWlNlU3AxSkFtVTRHb0NPKzk2cVFVcGpnbGwrNnhXeWEzVU5qNjFmOXNoMFp6cjcKKzV1ZzJMWm81dUJNL0xwTlIxSzNUTHhOQ2NnN3VVUFRuOXIxNDNkN2l2SmhQbDN0RUpuNFBYanY2bWxMb09nVQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCY1RDQjl3SUJBVEFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEVYRFRFek1Ea3lOREUyCitNekV3T0ZvWERUSXpNRGt5TWpFMk16RXdPRm93RkRBU0FnRUtGdzB4TXpBNU1qUXhOakk0TXpoYW9ISXdjREJ1CitCZ05WSFNNRVp6QmxnQlNkYlNBa1NRRS9LOHQ0dFJtOGZpVEoyL3MyZktGQ3BFQXdQakVMTUFrR0ExVUVCaE1DCitUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJ3d0dnWURWUVFERXhOUWIyeGhjbk56YkNCVVpYTjBJRVZECitJRU5CZ2drQXdVUGlmbUpEek9nd0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFLdVE2ODRzN2d5aHR4S0pyNkxuCitTMkJRMDJmMWpqUEhyWlZkWGFadm0zQzV0R2kyY0trb0sxYU1peUMzTHNSQ3VBSXhBSU1oajBUbWN1SVpyNWZYCitnNVJCeUQ3elVuWkJwb0VBZGd4Rnk0SlBKMklWaVdPUGVrU0doOGIvSlkxVk5TNlpidz09CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfZXhwaXJlZC5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfZXhwaXJlZC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2MGFlNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9leHBpcmVkLnBlbQpAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJxekNCbERBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFWERURXhNREl5TURFd01qUXgKK09Wb1hEVEV4TURJeU1ERXhNalF4T1Zvd0tEQVNBZ0VCRncweE1UQXlNVEl4TkRRME1EZGFNQklDQVFNWERURXgKK01ESXhNakUwTkRRd04xb3dEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBS2dQMVhtQ0lQYmZZMS9VTytTVkZRaXIKK2pBclo5NFFuUWRvYW40dEoyOWQ4RG1UeEorejkvS3lXTm9HZU93YzlQLzJHUVFhWmFoUU9CcjBmNmxZZDY3Q3QKK3dGVmgvUTJ6RjhGZ1JjclFWN3UvdkpNMzNRMnlFc1FrTUdsTTdyRTVsQzk3MnZVS1d1L05LcThiTjlXL3RXeFoKK1NGYnZUWHB2MDI0YUkwSVJ1ZHBPQ0FMbkl5OFNGaFZiMi81MklOMnVSNnFyRml6RGV4TUVkU2NrZ3BIdUp6R1MKK0lpQU5oSU1uNUxkUVlKRmpQZ0J6UVUxMnREZGd6Y3B4dEdoVDEweTR1UXJlK1ViU2p3K2lWeW1sM2lzc3c1OWsKK09TbWtXRmIwNkxhbVJDMjE1SkFNb2szWVFPNVJueENSOEVqcVBjSnIrNytPOWExTzErK3lpYWl0ZzRiVWpFQT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9tZDIucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX21kMi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3Mzc5NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9tZDIucGVtCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVFJRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRBNU1EY3hPVEU1TlRZegorTjFvWERUQTVNRGt4TnpFNU5UWXpOMW93S0RBU0FnRUJGdzB3T1RBeU1Ea3lNVEV5TXpaYU1CSUNBUU1YRFRBNQorTURJd09USXhNVEl6Tmxvd0RRWUpLb1pJaHZjTkFRRUNCUUFEZ2dFQkFGOEY1eTgyemd0eGN3UTRhRnZya2FuVAoreWd5ZDUrUlcvWS8vdnBjazQ0VitDWXgxZDFyK1FrYXVhWGVsOXFVS0JQc2cyZFV3UStqd1YvbStTcDJNSGFYNQorTmZXN1hVYjdKaTR5aHdnaDkvOXZGUHFxbktCZjllc0xKdUpvUTRtTGhjR0I1SjF5Q2NhdkxyeW52QjRQSkVuRworZ3JhVGJieWl6ZWxYQm1rM0Fwdk5ZeGN6Slp4dDdFenBWYnJGYWV2N215R21PZmZkRGtJTWMyV0RwRGt5TFRsVQora0lUakI3Zk1KaEQvZGdOc2tLWjRmZ2tLS0tQQ01KckpQTzY3V3p3cXgvNnZzclpjQUNCOVgrMTQzV1pyNEdWTworRncyU2FNbnFmVkxsVUVuZG9PcGJMQ1U0dWdjYzgya1FRRjNUc292WEpZVzdYcW9XbDJ1L0VOQ3dTaGw5cmw0PQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX21kNC5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfbWQ0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjc3ZGFiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX21kNC5wZW0KQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCcXpDQmxEQU5CZ2txaGtpRzl3MEJBUU1GQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRVhEVEV4TURJeE1qRTBORFF3CitOMW9YRFRFeE1EUXhNekUwTkRRd04xb3dLREFTQWdFQkZ3MHhNVEF5TVRJeE5EUTBNRGRhTUJJQ0FRTVhEVEV4CitNREl4TWpFME5EUXdOMW93RFFZSktvWklodmNOQVFFREJRQURnZ0VCQUlKdFlYeTN1d0lwbVNHZmk5bXVTOHh2CiszNkZUNmczczFWL3hpY2RQYTU0anVKZ0JJNnN4SEt6UXRiU05JYnFhZEVXd1V0dlE4azFFTVJvOVVHT2JoUlY4CitpK1VXbTVxaTBHRlY3bk1pNEUycDJKaS9zRkt0Z2R4a3poQ2ZuK3AzTW9HZ3gvbkM3WXR3cG5OZEYra3VDVjFNCitKVFBxZm0rdGFaa1lBRE9hZlAvaFJhUHgzVEkrSE5FM3V4NENiN2hOcFdkZld6dDQ4WlBNdWhDTXpJdExkL1VLCit4eGpKYW05WEFHVVRLaTcrZVd0bWE5WHptWU9JRWxRdjJLRlBWTWN4NW52ZzAzOXJyV0s2dE9iR0w2N2tDZlRICit2K25JeDdyQU9XNlVOVThhajFrZkpIWWpFS01CSDFJOXdqTVNIVXBreEJMUU9LbFBOUmtzaUVWc0lobUVWc3M9CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfbWQ1LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9tZDUucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMTc5NjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfbWQ1LnBlbQpAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJxekNCbERBTkJna3Foa2lHOXcwQkFRUUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFWERURXhNREl4TWpFME5EUXcKK04xb1hEVEV4TURReE16RTBORFF3TjFvd0tEQVNBZ0VCRncweE1UQXlNVEl4TkRRME1EZGFNQklDQVFNWERURXgKK01ESXhNakUwTkRRd04xb3dEUVlKS29aSWh2Y05BUUVFQlFBRGdnRUJBS0tDSloxTXdMK2dLQXczUlY0cUVtYjkKK2dNRGRTTEoxVmRrbjlGZ0R4MmlqTm5ZRHR2YVcrSTNzT1hycTdPNmdWTjFLRWFtSkpidWZWSkE1K09FMm9WYkMKK2h1c0VkZ1FtOEQ1VGJyR2NqUElQV3hnWXl1dVJzbDdYb3ZaaFhucVRJVXJDK0o4b0g5WHpLYU1jK0haYjVVaFIKK2g4YnpjeXArOWpiQmplN2xXd0tUemt1dmQvSTdWYlMwMlRVa1dGSlRyWUIwTGFqOFdNY2djWml5WDBpWnVqOGoKKzRoT3VwdTBsUG9Telo0aDd0MFZtYXk2d08rOG44TEpvaHlpd1lTN0xkZHBPaklkUDBNV2lmTjd1L0FycU5ObGgKKzJrZzhlQWMxcFlPVS9wSkZUQUFiT21DL2tRcGE5c2tkK1BQSVBQaDlUNTNvM3llRFFBMHZGcU45MkpyeUNDVT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9zaGExLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9zaGExLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDliZWJmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX3NoYTEucGVtCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRFeE1ESXhNakUwTkRRdworTjFvWERURXhNRFF4TXpFME5EUXdOMW93S0RBU0FnRUJGdzB4TVRBeU1USXhORFEwTURkYU1CSUNBUU1YRFRFeAorTURJeE1qRTBORFF3TjFvd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFHNjRqcW43Vkxkdm5LUk9zYkNQUjh3OQoreG5veDl2anVNMmxHV2VtYTlzVHVwdHc5RWhBclZTYmliWFoxSVBQeXJFeTFRT3EzTnVrQnFVVzNLek96WVY1TQorQnhaU2EyOEZUUXh0VkNoV2tEVUlNQ0s4QlN4eTA3eWllRmYvM0E4bWJmY1czWnpONGFrTHhPd2V1RnA2bDJINworOW9hMmplVWkxQmxIQ1pTNkpZSTJwSFpsOHFpTVJpcXFNbGVTTTJrMXc3VHJhS0xOQkZNOFVLNzJiclhlWmpQaQorbk5PemRZc1FEeldvMUhXN2RzTFdMZlpLb0pleXF2b2ZWRFFwQzVkTzU2a3R5L2RvODl6MU9uRVhmek1OZVZWVAorSkNlQU96dXU2a2RyZis5a2VSb1doY0lvQm9zL1h0VFY1N3UwcGdyODFiTGdqajVQWWl2ZXZLTC9rS2J5dktJPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX3NoYTIyNC5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfc2hhMjI0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjZmNWJlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX3NoYTIyNC5wZW0KQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCcXpDQmxEQU5CZ2txaGtpRzl3MEJBUTRGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRVhEVEV4TURJeE1qRTBORFF3CitOMW9YRFRFeE1EUXhNekUwTkRRd04xb3dLREFTQWdFQkZ3MHhNVEF5TVRJeE5EUTBNRGRhTUJJQ0FRTVhEVEV4CitNREl4TWpFME5EUXdOMW93RFFZSktvWklodmNOQVFFT0JRQURnZ0VCQUwyc0lseTJPd2dCdTlVZkVJbWR1VEcvCitSdEdFTzhSa1hiQ1JKUExaYVZHUWg5YjhyQ1JWSEw5dElXbTM3MkZWa0t5WUVtM21JcmwycnkxNlJ6blJ0NXl4CitEZDgvREtVR1VsSWUxS3d6akRjOU83YnYxRkRTWEhkMVVTbUdUaGVLREhOdHVKWFlFTk1IZG95UjJrMkJWR09aCitpZTR6VWNTcHF5TWpCbFVqZ05tWE42Z1FJY3JSSW11bVZVak1rNzQrcldUYTBoUTBwaUYycWxSdUUxZERxY1pQCitMa0UvOTJyYm5GZVJBTzkxWFVlRWoxM2RpZjJVamxBckZXZDYyQUZwMHd0SW4yc2I3d2FoaFVqOS9yRXM2V2d4CitrZGlOc1JNdG82L2l4THJQdTN2eHM4MFpQV0hleTU4N1QxWlo5YlMvd0RrcDlXK1cwckd5Um9QVm1xaUt0dk09CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfc2hhMjU2LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9zaGEyNTYucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzY2EyNTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfc2hhMjU2LnBlbQpAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJxekNCbERBTkJna3Foa2lHOXcwQkFRc0ZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFWERURXhNREl4TWpFME5EUXcKK04xb1hEVEV4TURReE16RTBORFF3TjFvd0tEQVNBZ0VCRncweE1UQXlNVEl4TkRRME1EZGFNQklDQVFNWERURXgKK01ESXhNakUwTkRRd04xb3dEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRzRtQkJnd2ZOeW5DWVlMMkNFbnFvcmUKK21nS3BDMzJ0QjZXaVVCdTlmaWdjdmROM25TWC8xd3JCOHJwaUU4UjA0QzhvU0ZnbHdob3RKQ25sV3N5NDJ0amIKKzBwazBXdWl6bG4wUEZNYy9PeXBxUk5OaHd4MzFTSEg0Mlc0S3pPTmlxdnEzbi9Xa0gzTTFZbmlSMVpuTWx5dmkKK2xKaW9RbjZaQW9jNk82bU1QMUo5ZHVLWVloaU1BT1Y5OTJQRDEvaXFYdytqWU4zMVJ3ZElTOC9tR3pJczRha2UKK0Vkdml3aE0zRTQvc1ZiTk9XQ09uWkZZVjRtK3lOQUVlMjlITDFWS3c2VVhpeEJjemN0K2JycVhOVkQzVTZUMEYKKzVvdlI2QlRlZlpPMTdlVDUyRHVrZTVSWkdEVXlRT0d5d3hPWUtJNVcrRmNPWWRwK1U1SWRrMzk5dEF6Mk1kdz0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9zaGEzODQucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX3NoYTM4NC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiYWEyYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9zaGEzODQucGVtCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVF3RkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRFeE1ESXhNakUwTkRRdworTjFvWERURXhNRFF4TXpFME5EUXdOMW93S0RBU0FnRUJGdzB4TVRBeU1USXhORFEwTURkYU1CSUNBUU1YRFRFeAorTURJeE1qRTBORFF3TjFvd0RRWUpLb1pJaHZjTkFRRU1CUUFEZ2dFQkFDMEdwbVJ2c3J2c2hwMXEvU1hrODBIQQorbTI4WnZFdXlzOXpZNS9BbnJ0WUhRZnNYOVFSSms1bGk3UGxuekh0VkdwOEk1UWk0bUpWUGFKK0ptaHFBYy9vbworTlBteER4OG05WEY5djBYSHpxUVpJV2xQWEg4UU05V0x6VGF6YlFGWGh1d25aNkxQaHBvK204Y2JOOTFtVUZpbAorOWcrU0drbWErVllWK3lQUk5tS3lsZGNSVnZQWlVJa2hUQ01Xa1pvWXJiRFhVbWtWUXBzZ3oyYzVrc0llTUkvNworNFFqOUozOEk5QU90MERsUTNldEZoTmMwT01uUjd6WTh0bjlCNGRlam9Oa2xFWmZpeUR4c0RaVlB1c1pyeG5XTQorV3h1ZWhPR0haZjNZRVNqTE10UjdCVzI2UVJISUYvbmhHREhzYkxpdW54WEk2ZUpsYllGb1pNZndjNlRNcW5jPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX3NoYTUxMi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfc2hhNTEyLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDcxMmU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX3NoYTUxMi5wZW0KQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCcXpDQmxEQU5CZ2txaGtpRzl3MEJBUTBGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRVhEVEV4TURJeE1qRTBORFF3CitOMW9YRFRFeE1EUXhNekUwTkRRd04xb3dLREFTQWdFQkZ3MHhNVEF5TVRJeE5EUTBNRGRhTUJJQ0FRTVhEVEV4CitNREl4TWpFME5EUXdOMW93RFFZSktvWklodmNOQVFFTkJRQURnZ0VCQUg2R1UyNGhkNmQvNVBtRHVzVCtoMktsCitlN3NjbWhrWkRQVStWSlNuekhkRVJFWVRQYW9GcXlWQnVKT0U5NWxaRUxFcWRPYXVoTzNsRzJXRVFWR2NnRWN2Cis0alMyRXpSM0JZZXgxYzF1cHFHdGRJdklvQTlUT0x1a2R5NktlYXVvbWlXaG8yS2Q3YlNhWEh5MjBqd2RrTGtvCisvdDNsVmhUdEJ2S2JoOFhIVll3Q2F3MWFDajNMeWR3TmNTK3pQblJnc01WSHN6RnhtTU5uNUhDUlc4bGJZd2NmCitVQTk4T214SVpzMmhwQktScHZsZkE1eTZzWEV4Mit0U01nK01KcnppR0JnRzZPUi9tK0tUYUs1WWxlOW5yQys3CitoektJZTgzaHBrdHZmQjFDWTVBazRVa2U5LzFGUnFBanM1S0NSeFlTR1E3WmRTN0RnQWVHd1Qzc2xMYmwvdFk9CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcnRfY2F0X3JzYWV4cC1lYy5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcnRfY2F0X3JzYWV4cC1lYy5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3NGM5YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NydF9jYXRfcnNhZXhwLWVjLnBlbQpAQCAtMCwwICsxLDIxIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJxekNCbERBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFWERURXhNREl5TURFd01qUXgKK09Wb1hEVEV4TURJeU1ERXhNalF4T1Zvd0tEQVNBZ0VCRncweE1UQXlNVEl4TkRRME1EZGFNQklDQVFNWERURXgKK01ESXhNakUwTkRRd04xb3dEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBS2dQMVhtQ0lQYmZZMS9VTytTVkZRaXIKK2pBclo5NFFuUWRvYW40dEoyOWQ4RG1UeEorejkvS3lXTm9HZU93YzlQLzJHUVFhWmFoUU9CcjBmNmxZZDY3Q3QKK3dGVmgvUTJ6RjhGZ1JjclFWN3UvdkpNMzNRMnlFc1FrTUdsTTdyRTVsQzk3MnZVS1d1L05LcThiTjlXL3RXeFoKK1NGYnZUWHB2MDI0YUkwSVJ1ZHBPQ0FMbkl5OFNGaFZiMi81MklOMnVSNnFyRml6RGV4TUVkU2NrZ3BIdUp6R1MKK0lpQU5oSU1uNUxkUVlKRmpQZ0J6UVUxMnREZGd6Y3B4dEdoVDEweTR1UXJlK1ViU2p3K2lWeW1sM2lzc3c1OWsKK09TbWtXRmIwNkxhbVJDMjE1SkFNb2szWVFPNVJueENSOEVqcVBjSnIrNytPOWExTzErK3lpYWl0ZzRiVWpFQT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQmNUQ0I5d0lCQVRBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFWERURXpNRGt5TkRFMgorTXpFd09Gb1hEVEl6TURreU1qRTJNekV3T0Zvd0ZEQVNBZ0VLRncweE16QTVNalF4TmpJNE16aGFvSEl3Y0RCdQorQmdOVkhTTUVaekJsZ0JTZGJTQWtTUUUvSzh0NHRSbThmaVRKMi9zMmZLRkNwRUF3UGpFTE1Ba0dBMVVFQmhNQworVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sd3dHZ1lEVlFRREV4TlFiMnhoY25OemJDQlVaWE4wSUVWRAorSUVOQmdna0F3VVBpZm1KRHpPZ3dDZ1lJS29aSXpqMEVBd0lEYVFBd1pnSXhBS3VRNjg0czdneWh0eEtKcjZMbgorUzJCUTAyZjFqalBIclpWZFhhWnZtM0M1dEdpMmNLa29LMWFNaXlDM0xzUkN1QUl4QUlNaGowVG1jdUlacjVmWAorZzVSQnlEN3pVblpCcG9FQWRneEZ5NEpQSjJJVmlXT1Bla1NHaDhiL0pZMVZOUzZaYnc9PQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGguMTAwMC5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaC4xMDAwLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzJmMTlmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGguMTAwMC5wZW0KQEAgLTAsMCArMSwzNCBAQAorCitSZWNvbW1lbmRlZCBrZXkgbGVuZ3RoOiAxNjAgYml0cworCitnZW5lcmF0b3I6CisJMjM6ODQ6M2M6MGQ6NTU6OGM6Yjk6N2Q6YTk6ZDU6OWE6ODA6ODI6ZmI6NTA6CisJODk6Mjk6NzE6OGU6OGU6YTE6Mjk6MmU6ZGY6ZGI6MDE6MzQ6NDE6ZTc6NjY6CisJZmE6NjA6ZGM6YmM6MzQ6ODM6NDU6NzA6ZTA6NjE6ZTk6YTY6MjU6MjM6YzI6CisJNzc6MzM6YTk6OGE6OTA6OTQ6MjE6ZmY6ODQ6ZDI6N2I6MzY6Mzk6OWI6ZTU6CisJZjA6ODg6MmI6MzU6OTg6NjQ6Mjg6NTg6Mjc6YmU6ZmE6YmY6ZTM6NjA6Y2M6CisJYzQ6NjE6NjA6NTk6Nzg6YTc6ZTE6YTM6YjM6YTc6M2U6N2U6NWI6YTg6ZDc6CisJYjc6YmE6MjU6MGU6YjE6OWU6Nzk6MDM6YjU6ODM6YmE6NDM6MzQ6YjY6YzE6CisJY2U6NDU6NjY6NzI6MDc6NjQ6OGE6YWY6MTQ6ZDg6YWU6MTg6MTk6YmE6MjU6CisJYTY6ZDk6MzY6Zjg6OGM6CisKK3ByaW1lOgorCTllOmE0OmE4OmM0OjI5OmZlOjc2OjE4OjAyOjRmOjc2OmM5OjI5OjBlOmYyOgorCWJhOjBkOjkyOjA4OjlkOmQ5OmIzOjI4OjQxOjVkOjg4OjRlOmZlOjNjOmFlOgorCWMxOmQ0OjNlOjdlOmZiOmQ4OjJjOmJmOjdiOjYzOjcwOjk5OjllOmM0OmFjOgorCWQwOjFlOjdjOjRlOjIyOjA3OmQyOmI1OmY5OjlhOjllOjUyOmUyOjk3OjlkOgorCWMzOmNiOjBkOjY2OjMzOjc1Ojk1OmE3Ojk2OjZlOjY5OmVjOjE2OmJkOjA2OgorCTRhOjFhOmRjOmIyOmQ0OjI5OjIzOmFiOjJlOjhmOjdmOjZhOjg0OjFkOjgyOgorCTIzOjZlOjQyOjhjOjFlOjcwOjNkOjIxOmJiOmI5OmI5OjhmOmY5OmZkOjljOgorCTUzOjA4OmU0OmU4OjVhOjA0OmNhOjVmOjhmOjczOjU1OmFjOmUxOjQxOjIwOgorCWM3OjQzOmZhOjhmOjk5OgorCisKKy0tLS0tQkVHSU4gREggUEFSQU1FVEVSUy0tLS0tCitNSUlCQXdKK0FKNmtxTVFwL25ZWUFrOTJ5U2tPOHJvTmtnaWQyYk1vUVYySVR2NDhyc0hVUG43NzJDeS9lMk53CittWjdFck5BZWZFNGlCOUsxK1pxZVV1S1huY1BMRFdZemRaV25sbTVwN0JhOUJrb2EzTExVS1NPckxvOS9hb1FkCitnaU51UW93ZWNEMGh1N201ai9uOW5GTUk1T2hhQk1wZmozTlZyT0ZCSU1kRCtvK1pBbjBqaER3TlZZeTVmYW5WCittb0NDKzFDSktYR09qcUVwTHQvYkFUUkI1MmI2WU55OE5JTkZjT0JoNmFZbEk4SjNNNm1La0pRaC80VFNlelk1CittK1h3aUNzMW1HUW9XQ2UrK3IvallNekVZV0JaZUtmaG83T25QbjVicU5lM3VpVU9zWjU1QTdXRHVrTTB0c0hPCitSV1p5QjJTS3J4VFlyaGdadWlXbTJUYjRqQUlDQUtBPQorLS0tLS1FTkQgREggUEFSQU1FVEVSUy0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaC5vcHRsZW4ucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGgub3B0bGVuLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTFlMjliCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGgub3B0bGVuLnBlbQpAQCAtMCwwICsxLDU4IEBACisKK1JlY29tbWVuZGVkIGtleSBsZW5ndGg6IDI1NiBiaXRzCisKK2dlbmVyYXRvcjoKKwk4MDowYTpiZjplNzpkYzo2Njo3YTphMTo3YjpjZDo3YzowNDo2MTo0YjpjMjoKKwkyMTphNjo1NDo4MjpjYzpjMDo0Yjo2MDo0NjowMjpiMDplMTozMTo5MDo4YToKKwk5Mzo4ZTphMToxYjo0ODpkYzo1MTo1ZDphYjo3YTpiYzpiYjoxZTowYzo3ZjoKKwlkNjo2NToxMTplZDpjMDpkODo2NTo1MTpiNzo2MzoyNDo5NjplMDozZDpmOToKKwk0Mzo1NzplMTpjNDplYTowNzphNzpjZToxZTozODoxYToyZjpjYTpmZDpmZjoKKwk1Zjo1YjpmMDowZDpmODoyODo4MDo2MDoyMDplODo3NTpjMDowOToyNjplNDoKKwlkMDoxMTpmODo4NDo3NzphMTpiMDoxOToyNzpkNzozODoxMzpjYTpkNDo4NDoKKwk3Yzo2Mzo5NjpiOToyNDo0NjoyMTpiZToyYjowMDpiNjozYzo2NTo5Mjo1MzoKKwkzMTo4NDoxMzo0NDozYzpkMjo0NDoyMTo1YzpkNzpmZDo0YzpiZTo3OTo2ZToKKwk4MjpjNjpjZjo3MDpmODo5YzpjMDpjNToyODpmYjo4ZTozNDo0ODowOTpiMzoKKwkxODo3NjplNzplZjo3Mzo5ZDo1MTo2MDpkMDo5NTpjOTo2ODo0MTo4ODpiMDoKKwljODo3NTo1Yzo3YTo0Njo4ZDo0NzpmNTo2ZDo2ZDpiOTplYTowMToyOToyNDoKKwllYzpiMDo1NTo2ZjpiNzoxMzoxMjphODpkNzpjOTozYjpiMjo4OTo4ZTphMDoKKwk4ZTplNTo0ZTplYjo1OTo0NTo0ODoyODo1ZjowNjphOTo3MzpjYjpiZToyYToKKwkwYzpiMDoyZTo5MDpmMzoyMzpmZTowNDo1NToyMTpmMzo0Yzo2ODozNTo0YToKKwk2ZDozZTo5NTpkYjpmZjpmMTplYjo2NDo2OToyZTpkYzowYTo0NDpmMzpkMzoKKwllNDowODpkMDplNDo3OTphNTo0MTplNzo3OTphNjowNTo0Mjo1OTplMjpkODoKKwk1NDoKKworcHJpbWU6CisJYjM6MTI6NmE6ZWE6ZjQ6NzE6NTM6Yzc6ZDY6N2Y6NDA6MzA6MzA6YjI6OTI6CisJYjU6YmQ6NWE6NmM6OWU6YWU6MWM6MTM6N2E6ZjM6NDA6ODc6ZmM6ZTI6YTM6CisJNmE6NTc6OGQ6NzA6YzU6YzU6NjA6YWQ6MmI6ZGI6OTI6NGM6NGE6NGQ6YmU6CisJZTI6MGE6MTY6NzE6YmU6NzE6MDM6Y2U6ODc6ZGU6ZmE6NzY6OTA6ODk6MzY6CisJODA6M2Q6YmU6Y2E6NjA6YzM6M2U6MTI6ODk6YzE6YTA6M2E6YzI6YzY6YzQ6CisJZTQ6OTQ6MDU6ZTU6OTA6MmY6YTA6NTk6NmE6MWM6YmE6YTg6OTU6Y2M6NDA6CisJMmQ6NTI6MTM6ZWQ6NGE6NWY6MWY6NWI6YTg6YjU6ZTE6ZWQ6M2Q6YTk6NTE6CisJYTQ6YzQ6NzU6YWY6ZWI6MGM6YTY6NjA6Yjc6MzY6OGM6Mzg6Yzg6ZTg6MDk6CisJZjM6ODI6ZDk6NmE6ZTE6OWU6NjA6ZGM6OTg6NGU6NjE6Y2I6NDI6YjU6ZGY6CisJZDc6MjM6MzI6MmE6Y2Y6MzI6N2Y6OWU6NDE6M2M6ZGE6NjQ6MDA6YzE6NWM6CisJNWI6MmU6YTE6ZmE6MzQ6NDA6NWQ6ODM6OTg6MmY6YmE6NDA6ZTY6ZDg6NTI6CisJZGE6M2Q6OTE6MDE6OWI6ZjI6MzU6MTE6MzE6NDI6NTQ6ZGM6MjE6MWE6OTA6CisJODM6M2U6NWI6MTc6OTg6ZWU6NTI6YTc6ODE6OTg6YzU6NTU6NjQ6NDc6Mjk6CisJYWQ6OTI6ZjA6NjA6MzY6N2M6NzQ6ZGU6ZDM6Nzc6MDQ6YWQ6ZmM6Mjc6M2E6CisJNGE6MzM6ZmU6Yzg6MjE6YmQ6MmU6YmQ6M2I6YzA6NTE6NzM6MGU6OTc6YTQ6CisJZGQ6MTQ6ZDI6Yjc6NjY6MDY6MjU6OTI6ZjU6ZWU6YzA6OWQ6MTY6YmI6NTA6CisJZWY6ZWI6ZjI6Y2M6MDA6ZGQ6M2U6MGU6MzQ6MTg6ZTY6MGU6Yzg6NDg6NzA6CisJZjc6CisKKworLS0tLS1CRUdJTiBESCBQQVJBTUVURVJTLS0tLS0KK01JSUNEZ0tDQVFFQXN4SnE2dlJ4VThmV2YwQXdNTEtTdGIxYWJKNnVIQk42ODBDSC9PS2phbGVOY01YRllLMHIKKzI1Sk1TazIrNGdvV2NiNXhBODZIM3ZwMmtJazJnRDIreW1ERFBoS0p3YUE2d3NiRTVKUUY1WkF2b0ZscUhMcW8KK2xjeEFMVklUN1VwZkgxdW90ZUh0UGFsUnBNUjFyK3NNcG1DM05vdzR5T2dKODRMWmF1R2VZTnlZVG1ITFFyWGYKKzF5TXlLczh5ZjU1QlBOcGtBTUZjV3k2aCtqUkFYWU9ZTDdwQTV0aFMyajJSQVp2eU5SRXhRbFRjSVJxUWd6NWIKK0Y1anVVcWVCbU1WVlpFY3ByWkx3WURaOGRON1Rkd1N0L0NjNlNqUCt5Q0c5THIwN3dGRnpEcGVrM1JUU3QyWUcKK0paTDE3c0NkRnJ0UTcrdnl6QURkUGc0MEdPWU95RWh3OXdLQ0FRRUFnQXEvNTl4bWVxRjd6WHdFWVV2Q0lhWlUKK2dzekFTMkJHQXJEaE1aQ0trNDZoRzBqY1VWMnJlcnk3SGd4LzFtVVI3Y0RZWlZHM1l5U1c0RDM1UTFmaHhPb0gKK3A4NGVPQm92eXYzL1gxdndEZmdvZ0dBZzZIWEFDU2JrMEJINGhIZWhzQmtuMXpnVHl0U0VmR09XdVNSR0liNHIKK0FMWThaWkpUTVlRVFJEelNSQ0ZjMS8xTXZubHVnc2JQY1BpY3dNVW8rNDQwU0FtekdIYm43M09kVVdEUWxjbG8KK1FZaXd5SFZjZWthTlIvVnRiYm5xQVNrazdMQlZiN2NURXFqWHlUdXlpWTZnanVWTzYxbEZTQ2hmQnFsenk3NHEKK0RMQXVrUE1qL2dSVklmTk1hRFZLYlQ2VjIvL3g2MlJwTHR3S1JQUFQ1QWpRNUhtbFFlZDVwZ1ZDV2VMWVZBSUMKK0FRQT0KKy0tLS0tRU5EIERIIFBBUkFNRVRFUlMtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGhwYXJhbXMucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGhwYXJhbXMucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZTA1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaHBhcmFtcy5wZW0KQEAgLTAsMCArMSw1IEBACistLS0tLUJFR0lOIERIIFBBUkFNRVRFUlMtLS0tLQorTUlHSEFvR0JBSjQxOURCRU9nbVFUem81cVhsNWZRY045VE40NTV3a09MNzA1Mkh6eHhSVk15aFltd1FjZ0p2aAorMXNhMThmeWZSOU9pVkVNWWdsT3BrcVZvR0xON3FkNWFRTk5pNVc3L0MrVkJkSFRCSmNHWkp5eVA1QjNxY3ozMgorOW1MSkt1ZGxWdWRWMFF4azVxVUphUFoveHVwejBOeW9WcHZpdWlCT0kxZ05pOG92U1hXekFnRUMKKy0tLS0tRU5EIERIIFBBUkFNRVRFUlMtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMS90ZXN0LWNhLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjEvdGVzdC1jYS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxZDE0YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjEvdGVzdC1jYS5jcnQKQEAgLTAsMCArMSw4MCBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAwICgweDApCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowMCAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjAwIDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgyMDQ4IGJpdCk6CisgICAgICAgICAgICAgICAgICAgIDAwOmMwOmRmOjM3OmZjOjE3OmJiOmUwOjk2OjlkOjNmOjg2OmRlOjk2OjMyOgorICAgICAgICAgICAgICAgICAgICA3ZDo0NDphNToxNjphMDpjZDoyMTpmMTo5OTpkNDplYzplYTpjYjo3YzoxODoKKyAgICAgICAgICAgICAgICAgICAgNTg6MDg6OTQ6YTU6ZWM6OWI6YzU6OGI6ZGY6MWE6MWU6OTk6Mzg6OTk6ODc6CisgICAgICAgICAgICAgICAgICAgIDFlOjdiOmMwOjhkOjM5OmRmOjM4OjVkOjcwOjc4OjA3OmQzOjllOmQ5OjkzOgorICAgICAgICAgICAgICAgICAgICBlODpiOTo3Mjo1MTpjNTpjZTphMzozMDo1MjphOTpmMjplNzo0MDo3MDoxNDoKKyAgICAgICAgICAgICAgICAgICAgY2I6NDQ6YTI6NzI6MGI6YzI6ZTU6NDA6Zjk6M2U6ZTU6YTY6MGU6YjM6Zjk6CisgICAgICAgICAgICAgICAgICAgIGVjOjRhOjYzOmMwOmI4OjI5OjAwOjc0OjljOjU3OjNiOmE4OmE1OjA0OjkwOgorICAgICAgICAgICAgICAgICAgICA3MTpmMTpiZDo4MzpkOTozZjpkNjphNTplMjozYzoyYTo4ZjplZjoyNzo2MDoKKyAgICAgICAgICAgICAgICAgICAgYzM6YzY6OWY6Y2I6YmE6ZWM6NjA6N2Q6Yjc6ZTY6ODQ6MzI6YmU6NGY6ZmI6CisgICAgICAgICAgICAgICAgICAgIDU4OjI2OjIyOjAzOjViOmQ0OmI0OmQ1OmZiOmY1OmUzOjk2OjJlOjcwOmMwOgorICAgICAgICAgICAgICAgICAgICBlNDoyZTpiZDpmYzoyZTplZTplMjo0MTo1NTpjMDozNDoyZTo3ZDoyNDo3MjoKKyAgICAgICAgICAgICAgICAgICAgNjk6Y2I6NDc6YjE6MTQ6NDA6ODM6N2Q6Njc6ZjQ6ODY6ZjY6MzE6YWI6ZjE6CisgICAgICAgICAgICAgICAgICAgIDc5OmE0OmIyOmI1OjJlOjEyOmY5Ojg0OjE3OmYwOjYyOjZmOjI3OjNlOjEzOgorICAgICAgICAgICAgICAgICAgICA1ODpiMTo1NDowZDoyMTo5YTo3MzozNzphMTozMDpjZjo2Zjo5MjpkYzpmNjoKKyAgICAgICAgICAgICAgICAgICAgZTk6ZmM6YWM6ZGI6MmU6Mjg6ZDE6N2U6MDI6NGI6MjM6YTA6MTU6ZjI6Mzg6CisgICAgICAgICAgICAgICAgICAgIDY1OjY0OjA5OmVhOjBjOjZlOjhlOjFiOjE3OmEwOjcxOmM4OmIzOjliOmM5OgorICAgICAgICAgICAgICAgICAgICBhYjplOTpjMzpmMjpjZjo4Nzo5Njo4Zjo4MDowMjozMjo5ZTo5OTo1ODo2ZjoKKyAgICAgICAgICAgICAgICAgICAgYTI6ZDUKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOgorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOgorICAgICAgICAgICAgICAgIEI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOgorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICAgICAgRGlyTmFtZTovQz1OTC9PPVBvbGFyU1NML0NOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgICAgICAgICBzZXJpYWw6MDAKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBiODpmZDo1NDpkODowMDo1NDo5MDo4YjoyNTpiMDoyNzpkZDo5NTpjZDphMjpmNzo4NDowNzoKKyAgICAgICAgMWQ6ODc6ODk6NGE6YzQ6Nzg6MTE6ZDg6MDc6YjU6ZDc6MjI6NTA6OGU6NDg6ZWI6NjI6N2E6CisgICAgICAgIDMyOjg5OmJlOjYzOjQ3OjUzOmZmOmI2OmJlOmYxOjJlOjhjOjU0OmMwOjk5OjNmOmEwOmI5OgorICAgICAgICAzNzoyMzo3Mjo1ZjowZDo0Njo1OTo4ZjpkODo0NzpjZDo5Nzo0Yzo5ZjowNzowYzoxMjo2MjoKKyAgICAgICAgMDk6M2E6MjQ6ZTQ6MzY6ZDk6ZTk6MmM6ZGE6Mzg6ZDA6NzM6NzU6NjE6ZDc6YzE6NmM6MjY6CisgICAgICAgIDhiOjliOmUwOmQ1OmRjOjY3OmVkOjhjOjZiOjMzOmQ3Ojc0OjIyOjNjOjRjOmRiOmI1OjhkOgorICAgICAgICAyYTpjZToyYzowZDowODo1OTowNTowOTowNTphNjozOTo5ZjpiMzo2NzoxYjplMjo4MzplNToKKyAgICAgICAgZTE6OGY6NTM6ZjY6Njc6OTM6Yzc6Zjk6NmY6NzY6NDQ6NTg6MTI6ZTg6M2E6ZDQ6OTc6ZTc6CisgICAgICAgIGU5OmMwOjNlOmE4OjdhOjcyOjNkOjg3OjUzOjFmOmU1OjJjOjg0Ojg0OmU3OjlhOjllOjdmOgorICAgICAgICA2NjpkOToxZjo5YjpmNToxMzo0ODpiMDo0ZDoxNDpkMTpkZTpiMjoyNDpkOTo3ODo3ZDpmNToKKyAgICAgICAgMzU6Y2M6NTg6MTk6ZDE6ZDI6OTk6ZWY6NGQ6NzM6Zjg6MWY6ODk6ZDQ6NWE6ZDA6NTI6Y2U6CisgICAgICAgIDA5OmY1OmIxOjQ2OjUxOjZhOjAwOjhlOjNiOmNjOjZmOjYzOjAxOjAwOjk5OmVkOjlkOmE2OgorICAgICAgICAwODo2MDpjZDozMjoxODpkMDo3MzplMDo1ODo3MTpkOTplNTpkMjo1MzpkNzo4ZDpkMDpjYToKKyAgICAgICAgZTk6NWQ6MmE6MGE6MGQ6NWQ6NTU6ZWM6MjE6NTA6MTc6MTY6ZTY6MDY6NGE6Y2Q6NWU6ZGU6CisgICAgICAgIGY3OmUwOmU5OjU0CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURoekNDQW0rZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQXdXaGNOTWpFd01qRXlNVFEwTkRBd1dqQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3Z2dFaU1BMEcKK0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEQTN6ZjhGN3ZnbHAwL2h0NldNbjFFcFJhZ3pTSHgKK21kVHM2c3Q4R0ZnSWxLWHNtOFdMM3hvZW1UaVpoeDU3d0kwNTN6aGRjSGdIMDU3WmsraTVjbEhGenFNd1VxbnkKKzUwQndGTXRFb25JTHd1VkErVDdscGc2eitleEtZOEM0S1FCMG5GYzdxS1VFa0hIeHZZUFpQOWFsNGp3cWorOG4KK1lNUEduOHU2N0dCOXQrYUVNcjVQKzFnbUlnTmIxTFRWKy9YamxpNXd3T1F1dmZ3dTd1SkJWY0EwTG4wa2NtbkwKK1I3RVVRSU45Wi9TRzlqR3I4WG1rc3JVdUV2bUVGL0JpYnljK0UxaXhWQTBobW5NM29URFBiNUxjOXVuOHJOc3UKK0tORitBa3Nqb0JYeU9HVmtDZW9NYm80YkY2Qnh5TE9ieWF2cHcvTFBoNWFQZ0FJeW5wbFliNkxWQWdNQkFBR2oKK2daVXdnWkl3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RUZnUVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgKKy9mOHdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlYKK0JBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnoKK2RDQkRRWUlCQURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXVQMVUyQUJVa0lzbHNDZmRsYzJpOTRRSEhZZUoKK1NzUjRFZGdIdGRjaVVJNUk2Mko2TW9tK1kwZFQvN2ErOFM2TVZNQ1pQNkM1TnlOeVh3MUdXWS9ZUjgyWFRKOEgKK0RCSmlDVG9rNURiWjZTemFPTkJ6ZFdIWHdXd21pNXZnMWR4bjdZeHJNOWQwSWp4TTI3V05LczRzRFFoWkJRa0YKK3BqbWZzMmNiNG9QbDRZOVQ5bWVUeC9sdmRrUllFdWc2MUpmbjZjQStxSHB5UFlkVEgrVXNoSVRubXA1L1p0a2YKK20vVVRTTEJORk5IZXNpVFplSDMxTmN4WUdkSFNtZTlOYy9nZmlkUmEwRkxPQ2ZXeFJsRnFBSTQ3ekc5akFRQ1oKKzdaMm1DR0ROTWhqUWMrQlljZG5sMGxQWGpkREs2VjBxQ2cxZFZld2hVQmNXNWdaS3pWN2U5K0RwVkE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMi90ZXN0LWNhLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjIvdGVzdC1jYS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxZDE0YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjIvdGVzdC1jYS5jcnQKQEAgLTAsMCArMSw4MCBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAwICgweDApCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowMCAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjAwIDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgyMDQ4IGJpdCk6CisgICAgICAgICAgICAgICAgICAgIDAwOmMwOmRmOjM3OmZjOjE3OmJiOmUwOjk2OjlkOjNmOjg2OmRlOjk2OjMyOgorICAgICAgICAgICAgICAgICAgICA3ZDo0NDphNToxNjphMDpjZDoyMTpmMTo5OTpkNDplYzplYTpjYjo3YzoxODoKKyAgICAgICAgICAgICAgICAgICAgNTg6MDg6OTQ6YTU6ZWM6OWI6YzU6OGI6ZGY6MWE6MWU6OTk6Mzg6OTk6ODc6CisgICAgICAgICAgICAgICAgICAgIDFlOjdiOmMwOjhkOjM5OmRmOjM4OjVkOjcwOjc4OjA3OmQzOjllOmQ5OjkzOgorICAgICAgICAgICAgICAgICAgICBlODpiOTo3Mjo1MTpjNTpjZTphMzozMDo1MjphOTpmMjplNzo0MDo3MDoxNDoKKyAgICAgICAgICAgICAgICAgICAgY2I6NDQ6YTI6NzI6MGI6YzI6ZTU6NDA6Zjk6M2U6ZTU6YTY6MGU6YjM6Zjk6CisgICAgICAgICAgICAgICAgICAgIGVjOjRhOjYzOmMwOmI4OjI5OjAwOjc0OjljOjU3OjNiOmE4OmE1OjA0OjkwOgorICAgICAgICAgICAgICAgICAgICA3MTpmMTpiZDo4MzpkOTozZjpkNjphNTplMjozYzoyYTo4ZjplZjoyNzo2MDoKKyAgICAgICAgICAgICAgICAgICAgYzM6YzY6OWY6Y2I6YmE6ZWM6NjA6N2Q6Yjc6ZTY6ODQ6MzI6YmU6NGY6ZmI6CisgICAgICAgICAgICAgICAgICAgIDU4OjI2OjIyOjAzOjViOmQ0OmI0OmQ1OmZiOmY1OmUzOjk2OjJlOjcwOmMwOgorICAgICAgICAgICAgICAgICAgICBlNDoyZTpiZDpmYzoyZTplZTplMjo0MTo1NTpjMDozNDoyZTo3ZDoyNDo3MjoKKyAgICAgICAgICAgICAgICAgICAgNjk6Y2I6NDc6YjE6MTQ6NDA6ODM6N2Q6Njc6ZjQ6ODY6ZjY6MzE6YWI6ZjE6CisgICAgICAgICAgICAgICAgICAgIDc5OmE0OmIyOmI1OjJlOjEyOmY5Ojg0OjE3OmYwOjYyOjZmOjI3OjNlOjEzOgorICAgICAgICAgICAgICAgICAgICA1ODpiMTo1NDowZDoyMTo5YTo3MzozNzphMTozMDpjZjo2Zjo5MjpkYzpmNjoKKyAgICAgICAgICAgICAgICAgICAgZTk6ZmM6YWM6ZGI6MmU6Mjg6ZDE6N2U6MDI6NGI6MjM6YTA6MTU6ZjI6Mzg6CisgICAgICAgICAgICAgICAgICAgIDY1OjY0OjA5OmVhOjBjOjZlOjhlOjFiOjE3OmEwOjcxOmM4OmIzOjliOmM5OgorICAgICAgICAgICAgICAgICAgICBhYjplOTpjMzpmMjpjZjo4Nzo5Njo4Zjo4MDowMjozMjo5ZTo5OTo1ODo2ZjoKKyAgICAgICAgICAgICAgICAgICAgYTI6ZDUKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOgorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOgorICAgICAgICAgICAgICAgIEI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOgorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICAgICAgRGlyTmFtZTovQz1OTC9PPVBvbGFyU1NML0NOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgICAgICAgICBzZXJpYWw6MDAKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBiODpmZDo1NDpkODowMDo1NDo5MDo4YjoyNTpiMDoyNzpkZDo5NTpjZDphMjpmNzo4NDowNzoKKyAgICAgICAgMWQ6ODc6ODk6NGE6YzQ6Nzg6MTE6ZDg6MDc6YjU6ZDc6MjI6NTA6OGU6NDg6ZWI6NjI6N2E6CisgICAgICAgIDMyOjg5OmJlOjYzOjQ3OjUzOmZmOmI2OmJlOmYxOjJlOjhjOjU0OmMwOjk5OjNmOmEwOmI5OgorICAgICAgICAzNzoyMzo3Mjo1ZjowZDo0Njo1OTo4ZjpkODo0NzpjZDo5Nzo0Yzo5ZjowNzowYzoxMjo2MjoKKyAgICAgICAgMDk6M2E6MjQ6ZTQ6MzY6ZDk6ZTk6MmM6ZGE6Mzg6ZDA6NzM6NzU6NjE6ZDc6YzE6NmM6MjY6CisgICAgICAgIDhiOjliOmUwOmQ1OmRjOjY3OmVkOjhjOjZiOjMzOmQ3Ojc0OjIyOjNjOjRjOmRiOmI1OjhkOgorICAgICAgICAyYTpjZToyYzowZDowODo1OTowNTowOTowNTphNjozOTo5ZjpiMzo2NzoxYjplMjo4MzplNToKKyAgICAgICAgZTE6OGY6NTM6ZjY6Njc6OTM6Yzc6Zjk6NmY6NzY6NDQ6NTg6MTI6ZTg6M2E6ZDQ6OTc6ZTc6CisgICAgICAgIGU5OmMwOjNlOmE4OjdhOjcyOjNkOjg3OjUzOjFmOmU1OjJjOjg0Ojg0OmU3OjlhOjllOjdmOgorICAgICAgICA2NjpkOToxZjo5YjpmNToxMzo0ODpiMDo0ZDoxNDpkMTpkZTpiMjoyNDpkOTo3ODo3ZDpmNToKKyAgICAgICAgMzU6Y2M6NTg6MTk6ZDE6ZDI6OTk6ZWY6NGQ6NzM6Zjg6MWY6ODk6ZDQ6NWE6ZDA6NTI6Y2U6CisgICAgICAgIDA5OmY1OmIxOjQ2OjUxOjZhOjAwOjhlOjNiOmNjOjZmOjYzOjAxOjAwOjk5OmVkOjlkOmE2OgorICAgICAgICAwODo2MDpjZDozMjoxODpkMDo3MzplMDo1ODo3MTpkOTplNTpkMjo1MzpkNzo4ZDpkMDpjYToKKyAgICAgICAgZTk6NWQ6MmE6MGE6MGQ6NWQ6NTU6ZWM6MjE6NTA6MTc6MTY6ZTY6MDY6NGE6Y2Q6NWU6ZGU6CisgICAgICAgIGY3OmUwOmU5OjU0CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURoekNDQW0rZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQXdXaGNOTWpFd01qRXlNVFEwTkRBd1dqQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3Z2dFaU1BMEcKK0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEQTN6ZjhGN3ZnbHAwL2h0NldNbjFFcFJhZ3pTSHgKK21kVHM2c3Q4R0ZnSWxLWHNtOFdMM3hvZW1UaVpoeDU3d0kwNTN6aGRjSGdIMDU3WmsraTVjbEhGenFNd1VxbnkKKzUwQndGTXRFb25JTHd1VkErVDdscGc2eitleEtZOEM0S1FCMG5GYzdxS1VFa0hIeHZZUFpQOWFsNGp3cWorOG4KK1lNUEduOHU2N0dCOXQrYUVNcjVQKzFnbUlnTmIxTFRWKy9YamxpNXd3T1F1dmZ3dTd1SkJWY0EwTG4wa2NtbkwKK1I3RVVRSU45Wi9TRzlqR3I4WG1rc3JVdUV2bUVGL0JpYnljK0UxaXhWQTBobW5NM29URFBiNUxjOXVuOHJOc3UKK0tORitBa3Nqb0JYeU9HVmtDZW9NYm80YkY2Qnh5TE9ieWF2cHcvTFBoNWFQZ0FJeW5wbFliNkxWQWdNQkFBR2oKK2daVXdnWkl3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RUZnUVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgKKy9mOHdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlYKK0JBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnoKK2RDQkRRWUlCQURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXVQMVUyQUJVa0lzbHNDZmRsYzJpOTRRSEhZZUoKK1NzUjRFZGdIdGRjaVVJNUk2Mko2TW9tK1kwZFQvN2ErOFM2TVZNQ1pQNkM1TnlOeVh3MUdXWS9ZUjgyWFRKOEgKK0RCSmlDVG9rNURiWjZTemFPTkJ6ZFdIWHdXd21pNXZnMWR4bjdZeHJNOWQwSWp4TTI3V05LczRzRFFoWkJRa0YKK3BqbWZzMmNiNG9QbDRZOVQ5bWVUeC9sdmRrUllFdWc2MUpmbjZjQStxSHB5UFlkVEgrVXNoSVRubXA1L1p0a2YKK20vVVRTTEJORk5IZXNpVFplSDMxTmN4WUdkSFNtZTlOYy9nZmlkUmEwRkxPQ2ZXeFJsRnFBSTQ3ekc5akFRQ1oKKzdaMm1DR0ROTWhqUWMrQlljZG5sMGxQWGpkREs2VjBxQ2cxZFZld2hVQmNXNWdaS3pWN2U5K0RwVkE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMi90ZXN0LWNhMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIyL3Rlc3QtY2EyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDFhNDIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMi90ZXN0LWNhMi5jcnQKQEAgLTAsMCArMSwxNSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDVWpDQ0FkZWdBd0lCQWdJSkFNRkQ0bjVpUTh6b01Bb0dDQ3FHU000OUJBTUNNRDR4Q3pBSkJnTlZCQVlUCitBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGCitReUJEUVRBZUZ3MHhNekE1TWpReE5UUTVORGhhRncweU16QTVNakl4TlRRNU5EaGFNRDR4Q3pBSkJnTlZCQVlUCitBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGCitReUJEUVRCMk1CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCTVBhS3pSQk4xZ3ZoMWIrL0ltNktVTkxUdUJ1Cit3dzVYVXpNNVdOUlN0SkdWT1FzajMxOFhKR0pJL0JxVktjNHNMWWZDaUZLQXI5WnFxeUhkdU5NY2JsaTR5dWl5CithWTd6UWEwcHc3UmZkYWRIYjlVWktWVnBtbE03SUxSbUZtQXpIcU9Cb0RDQm5UQWRCZ05WSFE0RUZnUVVuVzBnCitKRWtCUHl2TGVMVVp2SDRreWR2N05ud3diZ1lEVlIwakJHY3daWUFVblcwZ0pFa0JQeXZMZUxVWnZINGt5ZHY3CitObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFCitBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bd0dBMVVkRXdRRk1BTUJBZjh3CitDZ1lJS29aSXpqMEVBd0lEYVFBd1pnSXhBTU8wWW5OV0tKVUFmWGdTSnRKeGV4bjRpcGcra3Y0em51UjUwdjU2Cit0NGQwUEN1NDEybVVDNk5uZDdpenZ0RTJNZ0l4QVAxbm5KUWpaOEJXdWtzekZRREc0OHd4Q0N5Y2k5cXBkU012Cit1Q2puOHB3VU9rQUJYSzhNc3M5MGZ6Q2ZDRU90SUE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMy9SZWFkbWUgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIzL1JlYWRtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODlkYWRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMy9SZWFkbWUKQEAgLTAsMCArMSBAQAorVGhpcyBpcyBqdXN0IHRvIG1ha2Ugc3VyZSBmaWxlcyB0aGF0IGRvbid0IHBhcnNlIGFzIGNlcnRzIGFyZSBpZ25vcmVkLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMy90ZXN0LWNhLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjMvdGVzdC1jYS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxZDE0YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjMvdGVzdC1jYS5jcnQKQEAgLTAsMCArMSw4MCBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAwICgweDApCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowMCAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjAwIDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgyMDQ4IGJpdCk6CisgICAgICAgICAgICAgICAgICAgIDAwOmMwOmRmOjM3OmZjOjE3OmJiOmUwOjk2OjlkOjNmOjg2OmRlOjk2OjMyOgorICAgICAgICAgICAgICAgICAgICA3ZDo0NDphNToxNjphMDpjZDoyMTpmMTo5OTpkNDplYzplYTpjYjo3YzoxODoKKyAgICAgICAgICAgICAgICAgICAgNTg6MDg6OTQ6YTU6ZWM6OWI6YzU6OGI6ZGY6MWE6MWU6OTk6Mzg6OTk6ODc6CisgICAgICAgICAgICAgICAgICAgIDFlOjdiOmMwOjhkOjM5OmRmOjM4OjVkOjcwOjc4OjA3OmQzOjllOmQ5OjkzOgorICAgICAgICAgICAgICAgICAgICBlODpiOTo3Mjo1MTpjNTpjZTphMzozMDo1MjphOTpmMjplNzo0MDo3MDoxNDoKKyAgICAgICAgICAgICAgICAgICAgY2I6NDQ6YTI6NzI6MGI6YzI6ZTU6NDA6Zjk6M2U6ZTU6YTY6MGU6YjM6Zjk6CisgICAgICAgICAgICAgICAgICAgIGVjOjRhOjYzOmMwOmI4OjI5OjAwOjc0OjljOjU3OjNiOmE4OmE1OjA0OjkwOgorICAgICAgICAgICAgICAgICAgICA3MTpmMTpiZDo4MzpkOTozZjpkNjphNTplMjozYzoyYTo4ZjplZjoyNzo2MDoKKyAgICAgICAgICAgICAgICAgICAgYzM6YzY6OWY6Y2I6YmE6ZWM6NjA6N2Q6Yjc6ZTY6ODQ6MzI6YmU6NGY6ZmI6CisgICAgICAgICAgICAgICAgICAgIDU4OjI2OjIyOjAzOjViOmQ0OmI0OmQ1OmZiOmY1OmUzOjk2OjJlOjcwOmMwOgorICAgICAgICAgICAgICAgICAgICBlNDoyZTpiZDpmYzoyZTplZTplMjo0MTo1NTpjMDozNDoyZTo3ZDoyNDo3MjoKKyAgICAgICAgICAgICAgICAgICAgNjk6Y2I6NDc6YjE6MTQ6NDA6ODM6N2Q6Njc6ZjQ6ODY6ZjY6MzE6YWI6ZjE6CisgICAgICAgICAgICAgICAgICAgIDc5OmE0OmIyOmI1OjJlOjEyOmY5Ojg0OjE3OmYwOjYyOjZmOjI3OjNlOjEzOgorICAgICAgICAgICAgICAgICAgICA1ODpiMTo1NDowZDoyMTo5YTo3MzozNzphMTozMDpjZjo2Zjo5MjpkYzpmNjoKKyAgICAgICAgICAgICAgICAgICAgZTk6ZmM6YWM6ZGI6MmU6Mjg6ZDE6N2U6MDI6NGI6MjM6YTA6MTU6ZjI6Mzg6CisgICAgICAgICAgICAgICAgICAgIDY1OjY0OjA5OmVhOjBjOjZlOjhlOjFiOjE3OmEwOjcxOmM4OmIzOjliOmM5OgorICAgICAgICAgICAgICAgICAgICBhYjplOTpjMzpmMjpjZjo4Nzo5Njo4Zjo4MDowMjozMjo5ZTo5OTo1ODo2ZjoKKyAgICAgICAgICAgICAgICAgICAgYTI6ZDUKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOgorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOgorICAgICAgICAgICAgICAgIEI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOgorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICAgICAgRGlyTmFtZTovQz1OTC9PPVBvbGFyU1NML0NOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgICAgICAgICBzZXJpYWw6MDAKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBiODpmZDo1NDpkODowMDo1NDo5MDo4YjoyNTpiMDoyNzpkZDo5NTpjZDphMjpmNzo4NDowNzoKKyAgICAgICAgMWQ6ODc6ODk6NGE6YzQ6Nzg6MTE6ZDg6MDc6YjU6ZDc6MjI6NTA6OGU6NDg6ZWI6NjI6N2E6CisgICAgICAgIDMyOjg5OmJlOjYzOjQ3OjUzOmZmOmI2OmJlOmYxOjJlOjhjOjU0OmMwOjk5OjNmOmEwOmI5OgorICAgICAgICAzNzoyMzo3Mjo1ZjowZDo0Njo1OTo4ZjpkODo0NzpjZDo5Nzo0Yzo5ZjowNzowYzoxMjo2MjoKKyAgICAgICAgMDk6M2E6MjQ6ZTQ6MzY6ZDk6ZTk6MmM6ZGE6Mzg6ZDA6NzM6NzU6NjE6ZDc6YzE6NmM6MjY6CisgICAgICAgIDhiOjliOmUwOmQ1OmRjOjY3OmVkOjhjOjZiOjMzOmQ3Ojc0OjIyOjNjOjRjOmRiOmI1OjhkOgorICAgICAgICAyYTpjZToyYzowZDowODo1OTowNTowOTowNTphNjozOTo5ZjpiMzo2NzoxYjplMjo4MzplNToKKyAgICAgICAgZTE6OGY6NTM6ZjY6Njc6OTM6Yzc6Zjk6NmY6NzY6NDQ6NTg6MTI6ZTg6M2E6ZDQ6OTc6ZTc6CisgICAgICAgIGU5OmMwOjNlOmE4OjdhOjcyOjNkOjg3OjUzOjFmOmU1OjJjOjg0Ojg0OmU3OjlhOjllOjdmOgorICAgICAgICA2NjpkOToxZjo5YjpmNToxMzo0ODpiMDo0ZDoxNDpkMTpkZTpiMjoyNDpkOTo3ODo3ZDpmNToKKyAgICAgICAgMzU6Y2M6NTg6MTk6ZDE6ZDI6OTk6ZWY6NGQ6NzM6Zjg6MWY6ODk6ZDQ6NWE6ZDA6NTI6Y2U6CisgICAgICAgIDA5OmY1OmIxOjQ2OjUxOjZhOjAwOjhlOjNiOmNjOjZmOjYzOjAxOjAwOjk5OmVkOjlkOmE2OgorICAgICAgICAwODo2MDpjZDozMjoxODpkMDo3MzplMDo1ODo3MTpkOTplNTpkMjo1MzpkNzo4ZDpkMDpjYToKKyAgICAgICAgZTk6NWQ6MmE6MGE6MGQ6NWQ6NTU6ZWM6MjE6NTA6MTc6MTY6ZTY6MDY6NGE6Y2Q6NWU6ZGU6CisgICAgICAgIGY3OmUwOmU5OjU0CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURoekNDQW0rZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQXdXaGNOTWpFd01qRXlNVFEwTkRBd1dqQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3Z2dFaU1BMEcKK0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEQTN6ZjhGN3ZnbHAwL2h0NldNbjFFcFJhZ3pTSHgKK21kVHM2c3Q4R0ZnSWxLWHNtOFdMM3hvZW1UaVpoeDU3d0kwNTN6aGRjSGdIMDU3WmsraTVjbEhGenFNd1VxbnkKKzUwQndGTXRFb25JTHd1VkErVDdscGc2eitleEtZOEM0S1FCMG5GYzdxS1VFa0hIeHZZUFpQOWFsNGp3cWorOG4KK1lNUEduOHU2N0dCOXQrYUVNcjVQKzFnbUlnTmIxTFRWKy9YamxpNXd3T1F1dmZ3dTd1SkJWY0EwTG4wa2NtbkwKK1I3RVVRSU45Wi9TRzlqR3I4WG1rc3JVdUV2bUVGL0JpYnljK0UxaXhWQTBobW5NM29URFBiNUxjOXVuOHJOc3UKK0tORitBa3Nqb0JYeU9HVmtDZW9NYm80YkY2Qnh5TE9ieWF2cHcvTFBoNWFQZ0FJeW5wbFliNkxWQWdNQkFBR2oKK2daVXdnWkl3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RUZnUVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgKKy9mOHdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlYKK0JBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnoKK2RDQkRRWUlCQURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXVQMVUyQUJVa0lzbHNDZmRsYzJpOTRRSEhZZUoKK1NzUjRFZGdIdGRjaVVJNUk2Mko2TW9tK1kwZFQvN2ErOFM2TVZNQ1pQNkM1TnlOeVh3MUdXWS9ZUjgyWFRKOEgKK0RCSmlDVG9rNURiWjZTemFPTkJ6ZFdIWHdXd21pNXZnMWR4bjdZeHJNOWQwSWp4TTI3V05LczRzRFFoWkJRa0YKK3BqbWZzMmNiNG9QbDRZOVQ5bWVUeC9sdmRrUllFdWc2MUpmbjZjQStxSHB5UFlkVEgrVXNoSVRubXA1L1p0a2YKK20vVVRTTEJORk5IZXNpVFplSDMxTmN4WUdkSFNtZTlOYy9nZmlkUmEwRkxPQ2ZXeFJsRnFBSTQ3ekc5akFRQ1oKKzdaMm1DR0ROTWhqUWMrQlljZG5sMGxQWGpkREs2VjBxQ2cxZFZld2hVQmNXNWdaS3pWN2U5K0RwVkE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMy90ZXN0LWNhMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIzL3Rlc3QtY2EyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDFhNDIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMy90ZXN0LWNhMi5jcnQKQEAgLTAsMCArMSwxNSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDVWpDQ0FkZWdBd0lCQWdJSkFNRkQ0bjVpUTh6b01Bb0dDQ3FHU000OUJBTUNNRDR4Q3pBSkJnTlZCQVlUCitBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGCitReUJEUVRBZUZ3MHhNekE1TWpReE5UUTVORGhhRncweU16QTVNakl4TlRRNU5EaGFNRDR4Q3pBSkJnTlZCQVlUCitBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGCitReUJEUVRCMk1CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCTVBhS3pSQk4xZ3ZoMWIrL0ltNktVTkxUdUJ1Cit3dzVYVXpNNVdOUlN0SkdWT1FzajMxOFhKR0pJL0JxVktjNHNMWWZDaUZLQXI5WnFxeUhkdU5NY2JsaTR5dWl5CithWTd6UWEwcHc3UmZkYWRIYjlVWktWVnBtbE03SUxSbUZtQXpIcU9Cb0RDQm5UQWRCZ05WSFE0RUZnUVVuVzBnCitKRWtCUHl2TGVMVVp2SDRreWR2N05ud3diZ1lEVlIwakJHY3daWUFVblcwZ0pFa0JQeXZMZUxVWnZINGt5ZHY3CitObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFCitBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bd0dBMVVkRXdRRk1BTUJBZjh3CitDZ1lJS29aSXpqMEVBd0lEYVFBd1pnSXhBTU8wWW5OV0tKVUFmWGdTSnRKeGV4bjRpcGcra3Y0em51UjUwdjU2Cit0NGQwUEN1NDEybVVDNk5uZDdpenZ0RTJNZ0l4QVAxbm5KUWpaOEJXdWtzekZRREc0OHd4Q0N5Y2k5cXBkU012Cit1Q2puOHB3VU9rQUJYSzhNc3M5MGZ6Q2ZDRU90SUE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9SZWFkbWUgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L1JlYWRtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjFmNjEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9SZWFkbWUKQEAgLTAsMCArMSw0NyBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGNlcnRpZmljYXRlcyBmb3IgdGhlIHRlc3RzIHRhcmdldGluZyB0aGUgZW5mb3JjZW1lbnQgb2YgdGhlIHBvbGljeSBpbmRpY2F0ZWQgYnkgdGhlICpwYXRoTGVuQ29uc3RyYWludCogZmllbGQuIEFsbCBsZWFmIGVsZW1lbnRzIHdlcmUgZ2VuZXJhdGVkIHdpdGggKmlzX2NhKiB1bnNldCBhbmQgYWxsIHJvb3RzIHdpdGggdGhlICpzZWxmc2lnbj0xKiBvcHRpb24uIAorCisxLiB6ZXJvIHBhdGhsZW4gY29uc3RyYWludCBvbiBhbiBpbnRlcm1lZGlhdGUgQ0EgKGludmFsaWQpCitgYGAKK2NlcnQxMS5jcnQgLT4gY2VydDEyLmNydCAobWF4X3BhdGhsZW49MCkgLT4gY2VydDEzLmNydCAtPiBjZXJ0MTQuY3J0CitgYGAKKworMi4gemVybyBwYXRobGVuIGNvbnN0cmFpbnQgb24gdGhlIHJvb3QgQ0EgKGludmFsaWQpCitgYGAKK2NlcnQyMS5jcnQgKG1heF9wYXRobGVuPTApIC0+IGNlcnQyMi5jcnQgLT4gY2VydDIzLmNydAorYGBgCisKKzMuIG5vbnplcm8gcGF0aGxlbiBjb25zdHJhaW50IG9uIHRoZSByb290IENBIChpbnZhbGlkKQorYGBgCitjZXJ0MzEuY3J0IChtYXhfcGF0aGxlbj0xKSAtPiBjZXJ0MzIuY3J0IC0+IGNlcnQzMy5jcnQgLT4gY2VydDM0LmNydAorYGBgCisKKzQuIG5vbnplcm8gcGF0aGxlbiBjb25zdHJhaW50IG9uIGFuIGludGVybWVkaWF0ZSBDQSAoaW52YWxpZCkKK2BgYAorY2VydDQxLmNydCAtPiBjZXJ0NDIuY3J0IChtYXhfcGF0aGxlbj0xKSAtPiBjZXJ0NDMuY3J0IC0+IGNlcnQ0NC5jcnQgLT4gY2VydDQ1LmNydCAKK2BgYAorCis1LiBub256ZXJvIHBhdGhsZW4gY29uc3RyYWludCBvbiBhbiBpbnRlcm1lZGlhdGUgQ0Egd2l0aCBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgY2hhaW4gKHZhbGlkKQorYGBgCitjZXJ0NTEuY3J0IC0+IGNlcnQ1Mi5jcnQgKG1heF9wYXRobGVuPTEpIC0+IGNlcnQ1My5jcnQgLT4gY2VydDU0LmNydAorYGBgCisKKzYuIG5vbnplcm8gcGF0aGxlbiBjb25zdHJhaW50IG9uIHRoZSByb290IENBIHdpdGggbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGNoYWluICh2YWxpZCkKK2BgYAorY2VydDYxLmNydCAobWF4X3BhdGhsZW49MSkgLT4gY2VydDYyLmNydCAtPiBjZXJ0NjMuY3J0CitgYGAKKworNy4gcGF0aGxlbiBjb25zdHJhaW50IG9uIHRoZSByb290IENBIHdpdGggbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgYW5kIGEgc2VsZiBzaWduZWQgY2VydGlmaWNhdGUgaW4gdGhlIGNoYWluICh2YWxpZCkgCisoVGhpcyBzaXR1YXRpb24gaGFwcGVucyBmb3IgZXhhbXBsZSB3aGVuIGEgcm9vdCBvZiBzb21lIGhpZXJhcmNoeSBnZXRzIGludGVncmF0ZWQgaW50byBhbm90aGVyIGhpZXJhcmNoeS4gSW4gdGhpcyBjYXNlIHRoZSBjZXJ0aWZpY2F0ZXMgaXNzdWVkIGJlZm9yZSB0aGUgaW50ZWdyYXRpb24gd2lsbCBoYXZlIGFuIGludGVybWFkaWF0ZSBzZWxmIHNpZ25lZCBjZXJ0aWZpY2F0ZSBpbiB0aGVpciBjaGFpbikKK2BgYAorY2VydDcxLmNydCAobWF4X3BhdGhsZW49MSkgLT4gY2VydDcyLmNydCAtPiBjZXJ0NzMuY3J0IChzZWxmIHNpZ25lZCkgLT4gY2VydDc0LmNydCAtPiBjZXJ0NzQuY3J0CitgYGAKKworOC4gemVybyBwYXRobGVuIGNvbnN0cmFpbnQgb24gZmlyc3QgaW50ZXJtZWRpYXRlIENBICh2YWxpZCkKK2BgYAorY2VydDgxLmNydCAtPiBjZXJ0ODIuY3J0IChtYXhfcGF0aGxlbj0wKSAtPiBjZXJ0ODMuY3J0CitgYGAKKworOS4gemVybyBwYXRobGVuIGNvbnN0cmFpbnQgb24gdHJ1c3RlZCByb290ICh2YWxpZCkKK2BgYAorY2VydDkxLmNydCAobWF4X3BhdGhsZW49MCkgLT4gY2VydDkyLmNydAorYGBgCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQxMS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQxMS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3N2MzZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDExLmNydApAQCAtMCwwICsxLDE4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUM5ekNDQWQrZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFXTVJRd0VnWURWUVFERXd0VVpYTjAKK0lISnZiM1FnTWpBZUZ3MHdNVEF4TURFd01EQXdNREJhRncwek1ERXlNekV5TXpVNU5UbGFNQll4RkRBU0JnTlYKK0JBTVRDMVJsYzNRZ2NtOXZkQ0F5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEKK2hxTHcrS0RIOCt0a1g5aHBobnlkT1pGb3VlR1RZNXY4V2RZSTZLWlhvSWxuOUlBdTRSbWI2TTU5dUx6aVh1cmcKK1ZLdXdCcU9rYlVac0lZME5PQTZDOEZwZGpaTDFkaThWaXE2Njl2QkJzOWMreDloS3B4OC9WVmNaZlRhR2dxbmkKK2g1WGlpdlF5bkJRNEUyS094RVErVmpVTURxSUJIWUcxVlhXczRLTWtBZUpzcURZSHRtUzRYc0M5VFhUSXJpNVMKKzlJWDRtRTVBOStuZ1NUbzAvNlNqd2NkMjd1TzJJUUhYREM3amt4WDVPSDVqRlBBcXNWS1RZRGVXbENVN2J2YnIKK2l5MUg5Wjl1Q2wrTTd1bmJBbDhCS1E4bGVPbm5vM0tPM2xRUUFQR1AyRUZSVDBYTXVVWEpuZnlkUGJ6TWE5RlkKK3VmQjFJOHpDQlp2aVB2Ty9PZjN5cndJREFRQUJvMUF3VGpBTUJnTlZIUk1FQlRBREFRRUJNQjBHQTFVZERnUVcKK0JCU1VIU0g2Z2pyWUZablMxZ0R2azdCcGZ3VEt3REFmQmdOVkhTTUVHREFXZ0JTVUhTSDZnanJZRlpuUzFnRHYKK2s3QnBmd1RLd0RBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQVRMcVpHRkVCTysySWlIamtuN3BCa0F1a3RtSG0KK2pra3VGTE9Od2Uwdmx4WkZhYWJhRnFTZ2tvUzVlWjUwRDBkbXVVa3BKUk5NbkdLMUIvamE1UmV3dEFkeEQ2dXMKK1ZUOEpwZVdZa2h4YVNJSGpVVzk1akpMTVZyMTdpdDhqSGF3STA1dEQyNm5xRGpUcTNDMnJNNEV4cEFhSy9EZ3YKKzgzWkhlNElkdmVua1hja0RNSWptU3NLMEdmb21abUt2bW5meGhnNEZuUXZaR0k0OEpKVXFQQTJkSHhSaFV5cjQKK29oQm1INVhpNW9MSUNkODVHUmk4WXFEMDBhZ0tMOTlFakd1bGFLTkVkc1FrckM0WnZZNlFEVjBFRW5idThiNFIKK0dmaUE0MlVXTjJkS05TcU5oQk9yUDlnNXlUY0lXWGgxRHdwZDFaOXZoQkN3bUJlZ1BxcU01SU0xZFE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MTIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODhjMmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQxMi5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEQ2pDQ0FmS2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBV01SUXdFZ1lEVlFRREV3dFVaWE4wCitJSEp2YjNRZ01qQWVGdzB3TVRBeE1ERXdNREF3TURCYUZ3MHpNREV5TXpFeU16VTVOVGxhTUNZeEpEQWlCZ05WCitCQU1URzFSbGMzUWdhVzUwWlhKdFpXUnBZWFJsSUcxaGVIQmhkR2dnTVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCCitCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFOSnJQNy9ZK0tqdXB2bGdhT21RWUFyZkd1b2gzQ3pjZFBlL21saHErZnhECis4VTlxemdTVnVWUitGcE5aaTlEeU1sak1CcldWMU9uWkkrY1ZDRFlZa05NYTNJa1YrQWt6Skdxd2NTQktFKzZOCitSWFp2ditJNHhiR3ltZFNTYVQ2S2gxUGdQVmsvRVlOZkxGRjMwcEJzeWNqTTgxYU10WmdXNmFBOXhDU3AwcjhXCitYa1pvZHNySlVRZXJEaC83Vm1EVkVlS2FuWm9nOGF1dnJ2cy9FTmlBOGQ0cC83NWxPSUVSNG5MejZTU241RXF5Cit1WHpOQ3dtVDVQVndXU3RYYkREN0VCczNyT3RSMlZOV1E5bzZRZGZLUU9lL1NrSWRkWnIxSVdHRUo4SkhqdE5vCitqeGNZTzY3QStKZ3AxSndqays4M2VSSUNzMGhsV3llSFdmQmxiT1ZJS0xjQ0F3RUFBYU5UTUZFd0R3WURWUjBUCitCQWd3QmdFQkFRSUJBREFkQmdOVkhRNEVGZ1FVeXc4UGh5L0ZBdmlmR1ErRzZIV2tNaVd6eXFVd0h3WURWUjBqCitCQmd3Rm9BVWxCMGgrb0k2MkJXWjB0WUE3NU93YVg4RXlzQXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBQ0ZTCis2dEZ5OVRwVk1VZmgxbWtyM3JGRVZ0aG8wTkprUmhKVzh6MlBUbUtRYTA2OVM5Z1MrVTYrQ3Nxd3ZNMXkzeXloCitQdDJxMzRmaGhoYlErZ1M4aUFtK3p2UXRCc3lzM2ZyZlZrZUttUnp4V0RoMkxuVCt0SmkveHRxZGxVTHVhNU5CCisyMVNvNDZIZGxjZURUdXYydlVickhneFVTL0lFaklMNk9aWjBTYzZTNll5YnZHU2lvR3NSVUhPMmsySWlPblVhCitDK2hwQnZPa1hTY25JdGZkTUtBQWNlNzFDc1plTjk3c2J4ZU5JTUJEaVg5YlN5K2RaTHNjRWhSd0JVQUJpTnIvCitzWWRZdklwYnJGWG93ak10QmRhYyt2dmhjZW03ZGtDckNkc0d5bEdJTldoRTJ0QzloS21Ga0ZYbzRtdS9BR0RTCitNNC81OVRsTWVLOFgrV1o5ekJzPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MTMuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MTMuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDFhMjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQxMy5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlERnpDQ0FmK2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBbU1TUXdJZ1lEVlFRREV4dFVaWE4wCitJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURFd0hoY05NREV3TVRBeE1EQXdNREF3V2hjTk16QXhNak14CitNak0xT1RVNVdqQW1NU1F3SWdZRFZRUURFeHRVWlhOMElHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREl3CitnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDczBxZEtYeXR1L0dUS3BhMkgwQ0UzCitPUFNJTU0yaGlZYmF2elVyb3lMK2hGdjlYVm94aDVDR25WVXhLN0I5aWZWdnp5RWxyY1Y3dGp1SWxHd3AxaExICit0eC9ZVTIyeGtzSS9uNS9OUy9xcnhrSzV4andFV0I5bHg5M3J3TEswUW5mallSWnJpcjd5eVNvQktpNklsSE92CitHT3dsMFYvSkFzbE1Xd1VabEZtdll2b0NXU1dHckRBa3hXVm5IcStIb1o3WW9NL2JkSmRzSUlKWWUzdHQ3TDhECitjSlZQNWRROGpTczgvRWhtOEJiRzMzOXIzQjd2L0tkSzh6dW9NaWc5YWcvWU91OWpPYjBRdllDMkhkWm9MNFdWCitOKzdhYXNUUW1ER1dHT3Q3Zms3QUVsMEVJOGxEdnIyTy81cTZhZDlqUkNreHlxM2xKd1J5K00zTWRWS2dBMU9uCitBZ01CQUFHalVEQk9NQXdHQTFVZEV3UUZNQU1CQVFFd0hRWURWUjBPQkJZRUZNNnU1R2tqa3hiOFBEZFFJR0tECitEOHQxWnYvOU1COEdBMVVkSXdRWU1CYUFGTXNQRDRjdnhRTDRueGtQaHVoMXBESWxzOHFsTUEwR0NTcUdTSWIzCitEUUVCQ3dVQUE0SUJBUUNMcEtBVHQwMURVTTh3Q2lERlZTcG1waUNCcXhuTFJmUXVZK3RhMXArZjE1TE1FK2NUCis5NGx3YVlDZkNCdFhRWXdpdVZGWWRLOHp0V0VTdFBnNkJlY01MUEIySzlnTy90YWx4VW9WRHVtc21SODNwKzJ5Cis4WUptRkh5anIrQlNoc2pQOXBhQ2pVUWtKaU1PaVdScE5GTnBTY3YwSU9IbWI4TkxFUjN2WC90Q214eVZIUGcvCis3dEJwRFhSRDZqT3lhallINEtVeDZ3ZGRjWVdiNjNOOXNBcFZwUkhOYXFwVUtqdWlRd2ZVRlpqQTdBeUsvRlVTCisvY08zKyt1cStDa1poQnU4dnVwYXpuWEQ0aDBFMjhHYlpndnUvRjBlZEI3ZjBRNURwbnVESjZIRk1ZbDNBMm1NCittOHBxS05uUllHQ3RRd3BwQllWc29CaXNnYTJ5bXROdWQ3SysKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDE0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDE0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWUxY2JiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MTQuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJREREQ0NBZlNnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQW1NU1F3SWdZRFZRUURFeHRVWlhOMAorSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lESXdIaGNOTURFd01UQXhNREF3TURBd1doY05NekF4TWpNeAorTWpNMU9UVTVXakFlTVJ3d0dnWURWUVFERXhOVVpYTjBJR3hsWVdZZ2FXNTJZV3hwWkNBek1JSUJJakFOQmdrcQoraGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3NlZjL1QyR1lUV2o3bkdaY3kydm9aeWVXa0Z5ZkRJeQorb2V4eUplOGV5dVdYK1lxYVNDcmExSk1jd3cwSnk4ZTkvNi9hSTllemQxZDczZVpEY1c1aDYxdGFnQ3BCa2krVworZFloK0ZKZkNkRGRQblNraXRXT0JMS0JLMjFBUTlkeGVQdmtRQkVhbkRkQWsySXdhc3lkQ29IRWlTQ3F3WE5FegoralZKUEwzOGliYkxmOXNOTzNrazZ6T0ZBM1FxVlNUSjRCZGROaDliSEw3eTEwNmVrZk1ocmZ5VHpTcG8zV2owVgorMjBUaG1KWjFOdXdZUmwzajFYSEFMUDB0OENwMlpMYlh1RnNUV3FURk56WGorZ1dNOGIySWZacW1xY2V3NXBvWgorNGFEa2pYWE9pelJ4RFB4Q0hwN3JMejl4djFwSUlCeGFkeTBZV3Ardzl2eEx4RkY2cllCTHRRSURBUUFCbzAwdworU3pBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCUW9GL3FybjlXbktWM3pPbkN3TWw5OVVobXg4REFmQmdOVgorSFNNRUdEQVdnQlRPcnVScEk1TVcvRHczVUNCaWd3L0xkV2IvL1RBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQQorVlVubFgvL2gzVDVBamM4NVdOa3lUdWlyaFNadElyNitYL0F4SDRrUi9RRzVOaWFEeFA5SDBGek1zNUZjTW5pOAorM1JzNGQySDNDQnMrUUI3bG0vYit4eTI2dnBPUndsVkZYU2NIZVRFYW51WFNWc21HUGtuN1RBUXJQb3laZ1ZVTgordXk0VEdpOE1sa3NvNGdtZ2VodmdUa2xJVitFbXh5MzJBYmQxbFJmSTgvdk9RMXhUZEE3ZjNYOThBZldTdFR5YQorREdSc1FMWkUvUTQvR2g1N3hOcUYwZnRCSVJ3dDlUYkdsdThBeVppSWlsVkVDR3ZFL2d0VHd1cXBRUE9oSlFtaQorTmRZVEVyZ0QyV2t3OW9oaWZRRm80NkFNTVUxc2VlaHRxaWpXMnBDMlVqbVY1bmJvUHMwZUdRbVdyZk5DakRPcgorc1pmaDk4QmFmY2FGR2p6NjA1VjM2Zz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQyMS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQyMS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxYzVkNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDIxLmNydApAQCAtMCwwICsxLDE4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUMrakNDQWVLZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFXTVJRd0VnWURWUVFERXd0VVpYTjAKK0lISnZiM1FnTWpBZUZ3MHdNVEF4TURFd01EQXdNREJhRncwek1ERXlNekV5TXpVNU5UbGFNQll4RkRBU0JnTlYKK0JBTVRDMVJsYzNRZ2NtOXZkQ0F5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEKK21UWDJzSFk0Mk9yZDlnV3lCNkdjZGxMampFKzR6QkoxQm9EcE1udko4OW5pTVR1WlRxMVZpTXAvQjZSdVRIKzIKK1lGMytyaVpZUURIOXlNLzhyZ3ZBVUl2SzlTVGFxMTlacm0wbW5mUVVvOXlLZGtmb0orWHZXdXZLNmYrTmtBTWcKK3hmaEFENmVTdXBpZ1R2b3YvdzJJVDhyUzBkeG80S0Y2aEtCTDJhWWxYaGlFeWkvTm1zRVBaV3ZWaCtxazNML1EKK0dTd3BnQytEaFZvUXpGUm9mVWRLOU85TWtnUjY3NWlmdGFGRHZ5aTdGMGZ4clNMZkIvV3k0Y2dSWXpJVzZweU4KKzJzWFdpdktkTEkzYmdCMDFmZmRiTzE3WkFHSUxLMXdoTzI5L2JYNmhiSDA5WS9IN2pSMnZqeStLUDlOMFBFYTMKKzdTQnltbG9rQjNBOHdxL0xXUFlQZVFJREFRQUJvMU13VVRBUEJnTlZIUk1FQ0RBR0FRRUJBZ0VBTUIwR0ExVWQKK0RnUVdCQlNPQmQxZkgwMFk5cjVTOGNFTGovOUlUNEJHbERBZkJnTlZIU01FR0RBV2dCU09CZDFmSDAwWTlyNVMKKzhjRUxqLzlJVDRCR2xEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFGRVkyU3RwcGFQek9nRzZ2RXZQSnIvLysKK05XWTFqS2NCQjNjVCt6V0pXNTQrQmV4RGp5YUJSbkJJUHZSTERHOFBBbGhsWXI5di9QNkpDakJTdWhZb3JGTEcKK1A0WmhEK2FrdU12bjZ5Rjduc3lHMjBMSFB3dkU3L2p5ZTcrelNPM2hoeXFDZzdON003TzE3ZXhvL2Fndy9pVUkKK0RZVXVVdjFaSmxadlBCMmttWk1ZYTc4ZzBQMnlueUtwdTRoZGJzdEp6eHdBNGFRRFhHUXhjUU50diszWkNkQzIKK1RJNHcwam9ka2pxZHEvNHkwTWNwa0V2WUwzL0xhUUVsTGFIcjhDUW83eFlFenNqditjbnpvakNPL2lsWFUrUmwKK3N6OTQwUTRuakFKcWxwZmlKNDRhRnl0anA5NnVONFlWcFZpRkN2UnovLzl1eVFZOWt1QS84a0t3SnVPM3F3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDIyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDIyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGNkNjVkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MjIuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJREJ6Q0NBZStnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQVdNUlF3RWdZRFZRUURFd3RVWlhOMAorSUhKdmIzUWdNakFlRncwd01UQXhNREV3TURBd01EQmFGdzB6TURFeU16RXlNelU1TlRsYU1DWXhKREFpQmdOVgorQkFNVEcxUmxjM1FnYVc1MFpYSnRaV1JwWVhSbElHMWhlSEJoZEdnZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQgorQlFBRGdnRVBBRENDQVFvQ2dnRUJBTnBHbEJNWGRvOGNPOW9xVXcvYjZQTXdpTU5WOExDZTZ3QjlWS0hQYTZPRworUTBvOFhxa3Rnd25oMXJvamdwTWhiQ0FwRTdVWGVNcjZaR3EvTnRxbU8xaE81YWRWNUplaFdaeXZnN2o0RUJwRworZzhpV28wak5wS01KMFl4MXVCa2tsakVkWkxUSGE0YksvenkyTktxRE5TMnlXczkvTTUreHc1WEUyZWNBZzdGVAorY1hoZjNxNTBWK002VDJJYVE5QnhudFR5Q1Q4SUlGMmVSTS90OVk5NDRzOVJmem0vS1FWS1JZUHVkWDdZaFR0OQoraXFDSkI0Sm9xWWhzM0hFTzB3UGtKeFk0S0JUVUNOOTRzKzdqVUZkUnJZeGUrOFlhNnRJWVdxRDM4aTVxZEdoWQoreHJWZXkxTGF0c0RKUTJFZ05Zb2JNL0xqb0NMSzFXVXNzRXFmME9VMmJpMENBd0VBQWFOUU1FNHdEQVlEVlIwVAorQkFVd0F3RUJBVEFkQmdOVkhRNEVGZ1FVT0JsOGVkVm0vSDV4ZFMyRUdFZUx6ZnRaL0RVd0h3WURWUjBqQkJndworRm9BVWpnWGRYeDlOR1BhK1V2SEJDNC8vU0UrQVJwUXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRndacmlUdQorREtraURIRmZ6M1VYNGZJeFlUSENpNFR2ZVlaR1BlVGJ4aEJiM1haQzVxREY0VDVIdkNUU2tHOStvRmZaekkxYQorbFBOMnlaQjdRbm1ISm95V2E1ZnVvdndVTDBpSTNpSVpNcVU1NnRkVlBXOGdrSmUrK1U1a0hNU3B6MlZGMGVvOAorN1hrS1d4Wm92UndjemdmREZSUDl6TTlDeWx5elFqcXh4NmtieEpveldud2M1VXJWYkpNYVBJcW9uWHAxbkRvWgoraTg3OCtoWDRySlVFamdPNlNhOUdWWlFwbXVDclFGMHFLc1RpVUJ6Wk42N2hvRDN4b1RBWWk1SVhRRTJ0UkQxTgorajN6d25nOWxpQ3N4dXJHTW51VjBCUFd2L0lEWVJ1L3N5amVlMVF2MVZGZVJ0bzVENFJsZG1pMnAxZjVpV0pDaworNW01WXBSc2tuYUlDallzPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MjMuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MjMuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNTQ3MjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQyMy5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlERERDQ0FmU2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBbU1TUXdJZ1lEVlFRREV4dFVaWE4wCitJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURFd0hoY05NREV3TVRBeE1EQXdNREF3V2hjTk16QXhNak14CitNak0xT1RVNVdqQWVNUnd3R2dZRFZRUURFeE5VWlhOMElHeGxZV1lnYVc1MllXeHBaQ0F5TUlJQklqQU5CZ2txCitoa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQWlnR2dIR05XTmtFV1dGbjdlYVU0a0MyV2pSM1J0Y0JzCitvVzFNbFFuZFV2d1dVSGdjYmZJZzduaDY2T2k2WGwzSXFBTWpIajFKMEVQR2N3VGZtTGRhUnZOMzhLalRNaDMvCitGaUZyclVMME1OZ2lHeGprVHRoV2dzZlY0Qy9pM3ZSRFRDVysyVU1GZGQ2K3o3aHdGZitsZFRzQ1A5UXArOTNHCitkcnNscnZBUjJXMHFqSExVTEFKR2svNld6eEZHNnhlQ2dkaGtvb0RQcHJzZmxaSi9jTjFTdXFUWU9hVk1BajlKCithb3ZTdFVUVmhGOG91RFVMcHEwZmlCSW1vbGRPYmNHZGFBV2xnUmwwazhOZG9TTHBXZC83K2hpNHNINVBTT1pxCisrOGcxbFEzY2dyRTd0YTRYM3AvaTZlQXBjbjFoeUVrVHk5WnBLT0Z2WlhuTTREMWo4K0tTS1FJREFRQUJvMDB3CitTekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJUQ04ydkRMWTF0Y2VuVHp5Um1sUzRUQmUyeGlqQWZCZ05WCitIU01FR0RBV2dCUTRHWHg1MVdiOGZuRjFMWVFZUjR2TisxbjhOVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBCitlYi90Z3RTYnJ6N2o3SFFheEdnSTVMVmVkUnJvM2EyZk5MaE8wd05ib0dJNmdBQ0lQYWl0MWVQa1V3dU1mTGZsCitGa3kyLzJWWjhJZTRwUXF4Rm1kU1VxZjFOU214Z2lXTFJobzRvVGlGdjF6MDhMWVFnU2RLVDQ5ZmZLTzY3VERHCitEMW5JOHJFdVQxTnVwcThXSTVqY0tnV3FrdE1KamdLemZOKzluQ2dGR1FNR3FUQm50N3VZWkhobnVaZktTSlB2CitnSG1TNGdqNzJPUTJOdTZ4T1JHaGQ2SjhWanpjRzZCWDFwTGViTlFSemxIVDNFNUlWTkYvOWNDcmMrRTg3V25zCitiREd0emh5eDdTSVA3LzJUaUplQlpzN3A4eFhwYURGMmNOeDJGK2paSCtQOGZlVDdjK0pvWTdBNzJ1VkRTbFlmCitXVmYwMnB5bEtSZ3FheU91akgzUFdBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDMxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDMxLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzJhZjRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MzEuY3J0CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQytqQ0NBZUtnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQVdNUlF3RWdZRFZRUURFd3RVWlhOMAorSUhKdmIzUWdNakFlRncwd01UQXhNREV3TURBd01EQmFGdzB6TURFeU16RXlNelU1TlRsYU1CWXhGREFTQmdOVgorQkFNVEMxUmxjM1FnY205dmRDQXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQorbVRYMnNIWTQyT3JkOWdXeUI2R2NkbExqakUrNHpCSjFCb0RwTW52Sjg5bmlNVHVaVHExVmlNcC9CNlJ1VEgrMgorWUYzK3JpWllRREg5eU0vOHJndkFVSXZLOVNUYXExOVpybTBtbmZRVW85eUtka2ZvSitYdld1dks2ZitOa0FNZworeGZoQUQ2ZVN1cGlnVHZvdi93MklUOHJTMGR4bzRLRjZoS0JMMmFZbFhoaUV5aS9ObXNFUFpXdlZoK3FrM0wvUQorR1N3cGdDK0RoVm9RekZSb2ZVZEs5TzlNa2dSNjc1aWZ0YUZEdnlpN0YwZnhyU0xmQi9XeTRjZ1JZeklXNnB5TgorMnNYV2l2S2RMSTNiZ0IwMWZmZGJPMTdaQUdJTEsxd2hPMjkvYlg2aGJIMDlZL0g3alIydmp5K0tQOU4wUEVhMworN1NCeW1sb2tCM0E4d3EvTFdQWVBlUUlEQVFBQm8xTXdVVEFQQmdOVkhSTUVDREFHQVFFQkFnRUJNQjBHQTFVZAorRGdRV0JCU09CZDFmSDAwWTlyNVM4Y0VMai85SVQ0QkdsREFmQmdOVkhTTUVHREFXZ0JTT0JkMWZIMDBZOXI1UworOGNFTGovOUlUNEJHbERBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQUI5bkxhcXhzQlcwaXNEYUJHTkp5ekg5TworV3FZWTBoZXg5dG0zVXF5Z2ZFOWI5YWFoeWtwa293UUl6aDREOVhwYmQwaFpHVmxLL3N3MnFzS2o2Z0RPaU10TAordVdzNGdhRk5XSVFxaFZzVHpMODhjN1hhVzU1bitUUlFkVlp5eTM4RFpWV3BodGUxTXVtYzlXQjhOMTVyWlREaAoraVhqd0dsMG1yVjFlZ3E0aEpaTHB5MTRmNmlocVU3S0dmbWM5b254dmd2V3hZTGkrNXY4ODc0YzRvcGhTS3NJMgorcVZFOGlaNnVxMm9RNjZQZDVTNTBjWWs2TUVXNWxpZkFoTE01V0ZabVc3ZFJLbXlrQkdaOXJGckpySXZoa21oOQorSGU3cTZURVFQMVdjb2MxNDduSWcwQlRrSEd0ZHJFdjNqSVg2VUtLVUV3VVVrOUFSQjFtU29kWlFIQmh1d3c9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MzIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MzIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkY2Q2NWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQzMi5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEQnpDQ0FlK2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBV01SUXdFZ1lEVlFRREV3dFVaWE4wCitJSEp2YjNRZ01qQWVGdzB3TVRBeE1ERXdNREF3TURCYUZ3MHpNREV5TXpFeU16VTVOVGxhTUNZeEpEQWlCZ05WCitCQU1URzFSbGMzUWdhVzUwWlhKdFpXUnBZWFJsSUcxaGVIQmhkR2dnTVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCCitCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFOcEdsQk1YZG84Y085b3FVdy9iNlBNd2lNTlY4TENlNndCOVZLSFBhNk9HCitRMG84WHFrdGd3bmgxcm9qZ3BNaGJDQXBFN1VYZU1yNlpHcS9OdHFtTzFoTzVhZFY1SmVoV1p5dmc3ajRFQnBHCitnOGlXbzBqTnBLTUowWXgxdUJra2xqRWRaTFRIYTRiSy96eTJOS3FETlMyeVdzOS9NNSt4dzVYRTJlY0FnN0ZUCitjWGhmM3E1MFYrTTZUMklhUTlCeG50VHlDVDhJSUYyZVJNL3Q5WTk0NHM5UmZ6bS9LUVZLUllQdWRYN1loVHQ5CitpcUNKQjRKb3FZaHMzSEVPMHdQa0p4WTRLQlRVQ045NHMrN2pVRmRScll4ZSs4WWE2dElZV3FEMzhpNXFkR2hZCit4clZleTFMYXRzREpRMkVnTllvYk0vTGpvQ0xLMVdVc3NFcWYwT1UyYmkwQ0F3RUFBYU5RTUU0d0RBWURWUjBUCitCQVV3QXdFQkFUQWRCZ05WSFE0RUZnUVVPQmw4ZWRWbS9INXhkUzJFR0VlTHpmdFovRFV3SHdZRFZSMGpCQmd3CitGb0FVamdYZFh4OU5HUGErVXZIQkM0Ly9TRStBUnBRd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFGd1pyaVR1CitES2tpREhGZnozVVg0Zkl4WVRIQ2k0VHZlWVpHUGVUYnhoQmIzWFpDNXFERjRUNUh2Q1RTa0c5K29GZlp6STFhCitsUE4yeVpCN1FubUhKb3lXYTVmdW92d1VMMGlJM2lJWk1xVTU2dGRWUFc4Z2tKZSsrVTVrSE1TcHoyVkYwZW84Cis3WGtLV3hab3ZSd2N6Z2ZERlJQOXpNOUN5bHl6UWpxeHg2a2J4Sm96V253YzVVclZiSk1hUElxb25YcDFuRG9aCitpODc4K2hYNHJKVUVqZ082U2E5R1ZaUXBtdUNyUUYwcUtzVGlVQnpaTjY3aG9EM3hvVEFZaTVJWFFFMnRSRDFOCitqM3p3bmc5bGlDc3h1ckdNbnVWMEJQV3YvSURZUnUvc3lqZWUxUXYxVkZlUnRvNUQ0UmxkbWkycDFmNWlXSkNrCis1bTVZcFJza25hSUNqWXM9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQzMy5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQzMy5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1ZDE5MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDMzLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURGekNDQWYrZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFtTVNRd0lnWURWUVFERXh0VVpYTjAKK0lHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREV3SGhjTk1ERXdNVEF4TURBd01EQXdXaGNOTXpBeE1qTXgKK01qTTFPVFU1V2pBbU1TUXdJZ1lEVlFRREV4dFVaWE4wSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lESXcKK2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNLQWFBY1kxWTJRUlpZV2Z0NXBUaVEKK0xaYU5IZEcxd0d5aGJVeVZDZDFTL0JaUWVCeHQ4aUR1ZUhybzZMcGVYY2lvQXlNZVBVblFROFp6Qk4rWXQxcEcKKzgzZndxTk15SGY4V0lXdXRRdlF3MkNJYkdPUk8yRmFDeDlYZ0wrTGU5RU5NSmI3WlF3VjEzcjdQdUhBVi82VjEKK093SS8xQ243M2NaMnV5V3U4QkhaYlNxTWN0UXNBa2FUL3BiUEVVYnJGNEtCMkdTaWdNK211eCtWa245dzNWSzYKK3BOZzVwVXdDUDBscWk5SzFSTldFWHlpNE5RdW1yUitJRWlhaVYwNXR3WjFvQmFXQkdYU1R3MTJoSXVsWjMvdjYKK0dMaXdmazlJNW1yN3lEV1ZEZHlDc1R1MXJoZmVuK0xwNENseWZXSElTUlBMMW1rbzRXOWxlY3pnUFdQejRwSXAKK0FnTUJBQUdqVURCT01Bd0dBMVVkRXdRRk1BTUJBUUV3SFFZRFZSME9CQllFRk1JM2E4TXRqVzF4NmRQUEpHYVYKK0xoTUY3YkdLTUI4R0ExVWRJd1FZTUJhQUZEZ1pmSG5WWnZ4K2NYVXRoQmhIaTgzN1dmdzFNQTBHQ1NxR1NJYjMKK0RRRUJDd1VBQTRJQkFRQ3ByenBvajZVYUVHNGVxTGcyTDNIcXN2WTczL1hFOHl0dVo5d0RDM0hvZG5tcGV6VVgKKzQ4WHdKUEhGTzdPR1BHV1pnc1UycVgvWnA3eVVYa1ZGU0s0Vm5tblN6VXRYTlZsVTBvV0VFT3pRTHJwcGhrc0gKK2RjRjhZTk4vWTY1S25oeklVNzg0dUhlRmVmVXBQYUU2eVM1T1NaYm9wdFpXVkY5eTFMb1UzRjdnTjBVR3ZWRzkKK2hmbHo1TzAvS3ZtWWQrNitZcmplKzJsYkhpSkhOWExtT1BpWnlrOVRCRGtueWdCdVUxNElPV2doUWltM3lrczkKK3RLazhEMzhWbDg1VjVhRzluTzRTVGp4NUo4QnRTbDB4NndXM3Q5V3dVNVVDOWdlQ1JPaFpJMVhSQmFmSW9La24KK1ZTZ0hMcExUQVJ0TGlrYmJnLzNTeHBuVzEybXNIdmdMVmFzZgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MzQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MzQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYmNiNjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQzNC5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlERERDQ0FmU2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBbU1TUXdJZ1lEVlFRREV4dFVaWE4wCitJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURJd0hoY05NREV3TVRBeE1EQXdNREF3V2hjTk16QXhNak14CitNak0xT1RVNVdqQWVNUnd3R2dZRFZRUURFeE5VWlhOMElHeGxZV1lnYVc1MllXeHBaQ0F6TUlJQklqQU5CZ2txCitoa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQWtTcmdXRkQ0bFlRMFJGL3ozbUpaam4xbGdOQmtobkNQCiswaGNpSnYvZXRvTU4zYkNCK3VjOGZvMHd4RFEyWmNielRBUTBxQk5uakp2QUoxcXNsWkE5Ym9JQkttVDhKU2l4CitpaS8xWFREV0kzRTVhT3ZYMWg2bFc2NnBWc0l6TG0wTkFmMFZKbjJ4THcwWXY4aGZLYndqY05lQWZtN0dDd0pCCis4c2tqZWtNS0o4K2U2cFA0Wkh4bXJuT28wa1VsQ2c4dzhSS3paNnNZSnhYMUVUZWtXUEVVU1hyc2NRL1lTanBPCit6akxEcGgxbE80Z1ZFckJoZEpnSnBKem5xa3JSQmlSN2YvaElycEFWM3dPVWJ0ZnJ4ckliNUZYT005cnQvc3ZXCitSUnJ6SVVHbkJ2bzA0V1orS1FIUHNNbis5eDhpKy90dWVPZzFLTGZzMTBoVzBSV3NUUWptT1FJREFRQUJvMDB3CitTekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJTT0JyMVU0aDVQWXlPcUdlL2dKZ3dXazdGZmV6QWZCZ05WCitIU01FR0RBV2dCVENOMnZETFkxdGNlblR6eVJtbFM0VEJlMnhpakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBCithQkx1d05ONXZPaDJkTGJuOGxNTnNjL29URlNJbnp1K3lsekMvS0xUa2pveU1ZWStTMklTVXVldzlwelVvNEdzCitBQUUvcnFWWWVkbmF5eUExM2VOUkJud0l3KzhrUFRFU2FKTUdsNnVRUWQ4RHpBYWx6cXhiRmhid0ZZMlQwcGRpCitMTkZrR2ptR2RwUk55L1ZTVHk2SkVFQk1oSUtYak1wYWN0bXBpVjZtd0szYmZuRmFYWjZvNzArSlpyTmVpU2UwCitnOHNjaTZnQlZFdDI3Ykd2aExhbHV0OFdYYzdWQ2t4UWhRQ1NCZHYvOTRFbVJ4elB5ZTZpQUswTDlqYVRIbHQrCitxUjVNV0p4Wk4zMm11STduc0tuZXRVTVpiSVl3dk8xTFBuOGYrMGhkWWtjazhrRTdnYTFVTTk4b1RnUWVJT21qCiszSk5DRGtOWStaMzg3dWphYU9BVnh3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDQxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDQxLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDY1Yzk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NDEuY3J0CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzl6Q0NBZCtnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQVdNUlF3RWdZRFZRUURFd3RVWlhOMAorSUhKdmIzUWdOREFlRncwd01UQXhNREV3TURBd01EQmFGdzB6TURFeU16RXlNelU1TlRsYU1CWXhGREFTQmdOVgorQkFNVEMxUmxjM1FnY205dmRDQTBNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQorbVRYMnNIWTQyT3JkOWdXeUI2R2NkbExqakUrNHpCSjFCb0RwTW52Sjg5bmlNVHVaVHExVmlNcC9CNlJ1VEgrMgorWUYzK3JpWllRREg5eU0vOHJndkFVSXZLOVNUYXExOVpybTBtbmZRVW85eUtka2ZvSitYdld1dks2ZitOa0FNZworeGZoQUQ2ZVN1cGlnVHZvdi93MklUOHJTMGR4bzRLRjZoS0JMMmFZbFhoaUV5aS9ObXNFUFpXdlZoK3FrM0wvUQorR1N3cGdDK0RoVm9RekZSb2ZVZEs5TzlNa2dSNjc1aWZ0YUZEdnlpN0YwZnhyU0xmQi9XeTRjZ1JZeklXNnB5TgorMnNYV2l2S2RMSTNiZ0IwMWZmZGJPMTdaQUdJTEsxd2hPMjkvYlg2aGJIMDlZL0g3alIydmp5K0tQOU4wUEVhMworN1NCeW1sb2tCM0E4d3EvTFdQWVBlUUlEQVFBQm8xQXdUakFNQmdOVkhSTUVCVEFEQVFFQk1CMEdBMVVkRGdRVworQkJTT0JkMWZIMDBZOXI1UzhjRUxqLzlJVDRCR2xEQWZCZ05WSFNNRUdEQVdnQlNPQmQxZkgwMFk5cjVTOGNFTAorai85SVQ0QkdsREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBV2hySEdJTWNFRzJVSmZ2OTIwaGZ0eGkrSnZqLworaXZyaEVzY3FsVkEwUU5McVpWOHYvYWkvQWl5cERMazd1d0t0c3hGMmkrc2w4MTQ3M2FTRlM5aGgzRjgzL29mbQoreDhFVThYMUZCUUhOMXp5QUVwWnlQWHI3TWlhVFhuNHc1c0NlWkxtcFd5eEdrK2NSaVBWUkUwUVViWERHZlZScAorM3Y5ODRvQ1VNVXpiYit6djZRbGtIYTZtL2tacTBxcm5OVlZwMFg0YzcvUGI1ZWxKT1ZsS25Jc2xOZ2QvZUxyegorelNhYlRvQVg5T1A2dGJKZFNSa3kvTG1JWVcrQ1hIL1k0WVZ3cEV1N05pc1ptRG82bG5DQm9SUUIzUWd4b01McAorbU0rUlVZK0F5SHIwWnNTVVNiNmlpY0pNUlozbWh4Q0x2bksvTm9lLzNocTRwVWs0U2l0N3M3Skw3QT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ0Mi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ0Mi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA3MTMxOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDQyLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURDakNDQWZLZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFXTVJRd0VnWURWUVFERXd0VVpYTjAKK0lISnZiM1FnTkRBZUZ3MHdNVEF4TURFd01EQXdNREJhRncwek1ERXlNekV5TXpVNU5UbGFNQ1l4SkRBaUJnTlYKK0JBTVRHMVJsYzNRZ2FXNTBaWEp0WldScFlYUmxJRzFoZUhCaGRHZ2dNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUIKK0JRQURnZ0VQQURDQ0FRb0NnZ0VCQU5wR2xCTVhkbzhjTzlvcVV3L2I2UE13aU1OVjhMQ2U2d0I5VktIUGE2T0cKK1EwbzhYcWt0Z3duaDFyb2pncE1oYkNBcEU3VVhlTXI2WkdxL050cW1PMWhPNWFkVjVKZWhXWnl2ZzdqNEVCcEcKK2c4aVdvMGpOcEtNSjBZeDF1QmtrbGpFZFpMVEhhNGJLL3p5Mk5LcUROUzJ5V3M5L001K3h3NVhFMmVjQWc3RlQKK2NYaGYzcTUwVitNNlQySWFROUJ4bnRUeUNUOElJRjJlUk0vdDlZOTQ0czlSZnptL0tRVktSWVB1ZFg3WWhUdDkKK2lxQ0pCNEpvcVloczNIRU8wd1BrSnhZNEtCVFVDTjk0cys3alVGZFJyWXhlKzhZYTZ0SVlXcUQzOGk1cWRHaFkKK3hyVmV5MUxhdHNESlEyRWdOWW9iTS9Mam9DTEsxV1Vzc0VxZjBPVTJiaTBDQXdFQUFhTlRNRkV3RHdZRFZSMFQKK0JBZ3dCZ0VCQVFJQkFUQWRCZ05WSFE0RUZnUVVPQmw4ZWRWbS9INXhkUzJFR0VlTHpmdFovRFV3SHdZRFZSMGoKK0JCZ3dGb0FVamdYZFh4OU5HUGErVXZIQkM0Ly9TRStBUnBRd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFHS2gKK3BCaFlTR04wS0dXSUc0R0c0bVZvVGl3ODgwZWhldER1VHBsM3ltWk5xa29VdVRhQXRVM1BKV09jdGNKdmE3aDYKKzRQU2d5YWJpL1dRbWhudFIxR3hDVXQwR1R1aEhteUpZc1N3YWtYVWdNZ0Y2VzZUS2N4ZzZtNHZqTWtrcmYrWlQKKzFsTy9NaXd4aFRUbHVIUEdrbC9uQkcrdXh5U0ludVFNRHZkeVFEWHAyZTE3cXhvcHMrRysxVW5SSmlucUx0c2QKK0xNa0NPVDRweWg2QjV5c25KOGdQMVoyRUtXamhLSmNJSFJNVW03QXAvcGY4WmdoNUxJcWRSdERTdU51VG1QTFAKK2xrZ29lYk9DTzNjL21XQ2NpUjB4R0Njejg2RzNmWXpudkdwNFhxSG5Sa2czU3BBY0hRYlEvblNIQSsxTGRmRmkKK25xWlFQbkpQVnNKY3REUjkzNWM9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ0My5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ0My5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1ZDE5MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDQzLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURGekNDQWYrZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFtTVNRd0lnWURWUVFERXh0VVpYTjAKK0lHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREV3SGhjTk1ERXdNVEF4TURBd01EQXdXaGNOTXpBeE1qTXgKK01qTTFPVFU1V2pBbU1TUXdJZ1lEVlFRREV4dFVaWE4wSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lESXcKK2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNLQWFBY1kxWTJRUlpZV2Z0NXBUaVEKK0xaYU5IZEcxd0d5aGJVeVZDZDFTL0JaUWVCeHQ4aUR1ZUhybzZMcGVYY2lvQXlNZVBVblFROFp6Qk4rWXQxcEcKKzgzZndxTk15SGY4V0lXdXRRdlF3MkNJYkdPUk8yRmFDeDlYZ0wrTGU5RU5NSmI3WlF3VjEzcjdQdUhBVi82VjEKK093SS8xQ243M2NaMnV5V3U4QkhaYlNxTWN0UXNBa2FUL3BiUEVVYnJGNEtCMkdTaWdNK211eCtWa245dzNWSzYKK3BOZzVwVXdDUDBscWk5SzFSTldFWHlpNE5RdW1yUitJRWlhaVYwNXR3WjFvQmFXQkdYU1R3MTJoSXVsWjMvdjYKK0dMaXdmazlJNW1yN3lEV1ZEZHlDc1R1MXJoZmVuK0xwNENseWZXSElTUlBMMW1rbzRXOWxlY3pnUFdQejRwSXAKK0FnTUJBQUdqVURCT01Bd0dBMVVkRXdRRk1BTUJBUUV3SFFZRFZSME9CQllFRk1JM2E4TXRqVzF4NmRQUEpHYVYKK0xoTUY3YkdLTUI4R0ExVWRJd1FZTUJhQUZEZ1pmSG5WWnZ4K2NYVXRoQmhIaTgzN1dmdzFNQTBHQ1NxR1NJYjMKK0RRRUJDd1VBQTRJQkFRQ3ByenBvajZVYUVHNGVxTGcyTDNIcXN2WTczL1hFOHl0dVo5d0RDM0hvZG5tcGV6VVgKKzQ4WHdKUEhGTzdPR1BHV1pnc1UycVgvWnA3eVVYa1ZGU0s0Vm5tblN6VXRYTlZsVTBvV0VFT3pRTHJwcGhrc0gKK2RjRjhZTk4vWTY1S25oeklVNzg0dUhlRmVmVXBQYUU2eVM1T1NaYm9wdFpXVkY5eTFMb1UzRjdnTjBVR3ZWRzkKK2hmbHo1TzAvS3ZtWWQrNitZcmplKzJsYkhpSkhOWExtT1BpWnlrOVRCRGtueWdCdVUxNElPV2doUWltM3lrczkKK3RLazhEMzhWbDg1VjVhRzluTzRTVGp4NUo4QnRTbDB4NndXM3Q5V3dVNVVDOWdlQ1JPaFpJMVhSQmFmSW9La24KK1ZTZ0hMcExUQVJ0TGlrYmJnLzNTeHBuVzEybXNIdmdMVmFzZgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NDQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NDQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NGZiMmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ0NC5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlERnpDQ0FmK2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBbU1TUXdJZ1lEVlFRREV4dFVaWE4wCitJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURJd0hoY05NREV3TVRBeE1EQXdNREF3V2hjTk16QXhNak14CitNak0xT1RVNVdqQW1NU1F3SWdZRFZRUURFeHRVWlhOMElHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JRE13CitnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDUkt1QllVUGlWaERSRVgvUGVZbG1PCitmV1dBMEdTR2NJL1NGeUltLzk2Mmd3M2RzSUg2NXp4K2pUREVORFpseHZOTUJEU29FMmVNbThBbldxeVZrRDF1CitnZ0VxWlB3bEtMR0tML1ZkTU5ZamNUbG82OWZXSHFWYnJxbFd3ak11YlEwQi9SVW1mYkV2RFJpL3lGOHB2Q053CisxNEIrYnNZTEFrSHl5U042UXdvbno1N3FrL2hrZkdhdWM2alNSU1VLRHpEeEVyTm5xeGduRmZVUk42Ulk4UlJKCitldXh4RDloS09rN09Nc09tSFdVN2lCVVNzR0YwbUFta25PZXFTdEVHSkh0LytFaXVrQlhmQTVSdTErdkdzaHZrCitWYzR6MnUzK3k5WkZHdk1oUWFjRytqVGhabjRwQWMrd3lmNzNIeUw3KzI1NDZEVW90K3pYU0ZiUkZheE5DT1k1CitBZ01CQUFHalVEQk9NQXdHQTFVZEV3UUZNQU1CQVFFd0hRWURWUjBPQkJZRUZJNEd2VlRpSGs5akk2b1o3K0FtCitEQmFUc1Y5N01COEdBMVVkSXdRWU1CYUFGTUkzYThNdGpXMXg2ZFBQSkdhVkxoTUY3YkdLTUEwR0NTcUdTSWIzCitEUUVCQ3dVQUE0SUJBUUNCM2R0c29WZHNjaFZ5Q1dTSTE2U2U0NlJaSnRMVzFiTTAxOUtkeVpqOURkSVoyVlBtCitJcCtCUUZjVkp5emJmbWhuNVFCYmhOREtrd3NmbGRJOVk4SXFaMTMyajQ0Mi9YSUZaSWlsYVBpM2NFL1dMRlVZCitOeHUyb3B1TjMrS0R3RFlPMzJDVXAzZnJyOU9qQXRCNWFtWm5rWGF1K0MxRWtKbFN1V2FUKy9nSWxZd2xyNC9ICit1QURjeXFGU215MjhQOWpta0s4QXpaSGhLbmxSYWRBbjJjREI4TUZYRDVWeG5MSmZlamtwclFWTGR4VFhSb3ZQCitjRS82YzdQVUdJSzIyV2NTWDhLVGZ1dmlLbWpkR1ZoZ2VLcHMyblJOS2FTSWxxWUN6dHljOElqY1p3SkNuaDZjCitaVzhWOWJpN1d4REsrSTlQUGdyZ0xLOFcrVlRrUzBSdGpQNWEKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDQ1LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDQ1LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWQ1YjNkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NDUuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJREREQ0NBZlNnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQW1NU1F3SWdZRFZRUURFeHRVWlhOMAorSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lETXdIaGNOTURFd01UQXhNREF3TURBd1doY05NekF4TWpNeAorTWpNMU9UVTVXakFlTVJ3d0dnWURWUVFERXhOVVpYTjBJR3hsWVdZZ2FXNTJZV3hwWkNBME1JSUJJakFOQmdrcQoraGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFrY05zRS9zNG5hdUE1dlNHLzIzem5IVDVaakZBUWlSYQorODN4bzgzTUQyak1yQmpnQkJ6T1cwSUtlZGs5bG1xY1Jtb01zV3QzUGJZZUgyQW0rRXF0T2poOXZiSHcvd1hFdworZVhnN0R0WmFZVGplUk5rcndaMHo1QnovVFR2aWE3WWtjZmFVODNPRzRKeUw4R21tYnRpR05PSFp5SHFUdjJLeQorajZZcXlCSmFERTdkd0JOQkpkNURFbEV1dnI2VHUvWTNLM1o2ejhiWlVBWC81b0lJMnNxOHJnNzZaUStEZms4aQordXBqcDRNVlB2b3doLyt5cytXTk1XNU1BNWsxZHdZeVUxTVoyME8vYWE5VlRNa2I0RFB5djRwWFpnaTFkQkNNYworWXNrUFJWb1BQc0U1eGwzRFozaDRxWjAzOU1iY2FsWEZZZTY1Njg5K1JhMU80L2RzWFI1cmFRSURBUUFCbzAwdworU3pBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCVEt0WGRRWkE4Y1prUy84OWVpaWg0R1RKWCtmREFmQmdOVgorSFNNRUdEQVdnQlNPQnIxVTRoNVBZeU9xR2UvZ0pnd1drN0ZmZXpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQQorSVd5bnlvOGV6dCtTbyt3MjloN3oyWlMzL0VjckVyblNpRERKMERhRS92Y3ZmbHJUL3RFUGVESFR4eTYxcVF1WAorS29zZU84NGZvRnFMUHUxWXFnU2pSZ21iazc2Z3Q4YUF1MGxyNi90MFJIV2RIS1pHM1F0Szg2OTZwR29NQWhWZworSGEzZi9ZWWFFa3FTbkh3VSsvdnhFWEVrR0hNMjJVSHdiN2R0SDJMZkJIdG9RdGpFNk0rVWx2NlFka0xqMkxGRAorWE1LSkl5QWxpYlRSTVc4WU9QNEcvRGVrQ3ExRHN0VU9jVG43QkZxZUFqanpZd3YzTkhwT0pIZFpyVWd5R2I3QgorUXFEWGYyck0zczdMRXB3RE12ZmRyYUFFV2xkNC9MUkxrZmF1L1BmS0Q1WXdHWWczTmI0NXh5WEZTRWlqVmpBcgorMjNHOEhBSWNKSnUyalVJV0dyOU90UT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ1MS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ1MS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2NWM5NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDUxLmNydApAQCAtMCwwICsxLDE4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUM5ekNDQWQrZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFXTVJRd0VnWURWUVFERXd0VVpYTjAKK0lISnZiM1FnTkRBZUZ3MHdNVEF4TURFd01EQXdNREJhRncwek1ERXlNekV5TXpVNU5UbGFNQll4RkRBU0JnTlYKK0JBTVRDMVJsYzNRZ2NtOXZkQ0EwTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEKK21UWDJzSFk0Mk9yZDlnV3lCNkdjZGxMampFKzR6QkoxQm9EcE1udko4OW5pTVR1WlRxMVZpTXAvQjZSdVRIKzIKK1lGMytyaVpZUURIOXlNLzhyZ3ZBVUl2SzlTVGFxMTlacm0wbW5mUVVvOXlLZGtmb0orWHZXdXZLNmYrTmtBTWcKK3hmaEFENmVTdXBpZ1R2b3YvdzJJVDhyUzBkeG80S0Y2aEtCTDJhWWxYaGlFeWkvTm1zRVBaV3ZWaCtxazNML1EKK0dTd3BnQytEaFZvUXpGUm9mVWRLOU85TWtnUjY3NWlmdGFGRHZ5aTdGMGZ4clNMZkIvV3k0Y2dSWXpJVzZweU4KKzJzWFdpdktkTEkzYmdCMDFmZmRiTzE3WkFHSUxLMXdoTzI5L2JYNmhiSDA5WS9IN2pSMnZqeStLUDlOMFBFYTMKKzdTQnltbG9rQjNBOHdxL0xXUFlQZVFJREFRQUJvMUF3VGpBTUJnTlZIUk1FQlRBREFRRUJNQjBHQTFVZERnUVcKK0JCU09CZDFmSDAwWTlyNVM4Y0VMai85SVQ0QkdsREFmQmdOVkhTTUVHREFXZ0JTT0JkMWZIMDBZOXI1UzhjRUwKK2ovOUlUNEJHbERBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQVdockhHSU1jRUcyVUpmdjkyMGhmdHhpK0p2ai8KK2l2cmhFc2NxbFZBMFFOTHFaVjh2L2FpL0FpeXBETGs3dXdLdHN4RjJpK3NsODE0NzNhU0ZTOWhoM0Y4My9vZm0KK3g4RVU4WDFGQlFITjF6eUFFcFp5UFhyN01pYVRYbjR3NXNDZVpMbXBXeXhHaytjUmlQVlJFMFFVYlhER2ZWUnAKKzN2OTg0b0NVTVV6YmIrenY2UWxrSGE2bS9rWnEwcXJuTlZWcDBYNGM3L1BiNWVsSk9WbEtuSXNsTmdkL2VMcnoKK3pTYWJUb0FYOU9QNnRiSmRTUmt5L0xtSVlXK0NYSC9ZNFlWd3BFdTdOaXNabURvNmxuQ0JvUlFCM1FneG9NTHAKK21NK1JVWStBeUhyMFpzU1VTYjZpaWNKTVJaM21oeENMdm5LL05vZS8zaHE0cFVrNFNpdDdzN0pMN0E9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NTIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNzEzMTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ1Mi5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEQ2pDQ0FmS2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBV01SUXdFZ1lEVlFRREV3dFVaWE4wCitJSEp2YjNRZ05EQWVGdzB3TVRBeE1ERXdNREF3TURCYUZ3MHpNREV5TXpFeU16VTVOVGxhTUNZeEpEQWlCZ05WCitCQU1URzFSbGMzUWdhVzUwWlhKdFpXUnBZWFJsSUcxaGVIQmhkR2dnTVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCCitCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFOcEdsQk1YZG84Y085b3FVdy9iNlBNd2lNTlY4TENlNndCOVZLSFBhNk9HCitRMG84WHFrdGd3bmgxcm9qZ3BNaGJDQXBFN1VYZU1yNlpHcS9OdHFtTzFoTzVhZFY1SmVoV1p5dmc3ajRFQnBHCitnOGlXbzBqTnBLTUowWXgxdUJra2xqRWRaTFRIYTRiSy96eTJOS3FETlMyeVdzOS9NNSt4dzVYRTJlY0FnN0ZUCitjWGhmM3E1MFYrTTZUMklhUTlCeG50VHlDVDhJSUYyZVJNL3Q5WTk0NHM5UmZ6bS9LUVZLUllQdWRYN1loVHQ5CitpcUNKQjRKb3FZaHMzSEVPMHdQa0p4WTRLQlRVQ045NHMrN2pVRmRScll4ZSs4WWE2dElZV3FEMzhpNXFkR2hZCit4clZleTFMYXRzREpRMkVnTllvYk0vTGpvQ0xLMVdVc3NFcWYwT1UyYmkwQ0F3RUFBYU5UTUZFd0R3WURWUjBUCitCQWd3QmdFQkFRSUJBVEFkQmdOVkhRNEVGZ1FVT0JsOGVkVm0vSDV4ZFMyRUdFZUx6ZnRaL0RVd0h3WURWUjBqCitCQmd3Rm9BVWpnWGRYeDlOR1BhK1V2SEJDNC8vU0UrQVJwUXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBR0toCitwQmhZU0dOMEtHV0lHNEdHNG1Wb1Rpdzg4MGVoZXREdVRwbDN5bVpOcWtvVXVUYUF0VTNQSldPY3RjSnZhN2g2Cis0UFNneWFiaS9XUW1obnRSMUd4Q1V0MEdUdWhIbXlKWXNTd2FrWFVnTWdGNlc2VEtjeGc2bTR2ak1ra3JmK1pUCisxbE8vTWl3eGhUVGx1SFBHa2wvbkJHK3V4eVNJbnVRTUR2ZHlRRFhwMmUxN3F4b3BzK0crMVVuUkppbnFMdHNkCitMTWtDT1Q0cHloNkI1eXNuSjhnUDFaMkVLV2poS0pjSUhSTVVtN0FwL3BmOFpnaDVMSXFkUnREU3VOdVRtUExQCitsa2dvZWJPQ08zYy9tV0NjaVIweEdDY3o4NkczZll6bnZHcDRYcUhuUmtnM1NwQWNIUWJRL25TSEErMUxkZkZpCitucVpRUG5KUFZzSmN0RFI5MzVjPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NTMuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NTMuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNWQxOTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ1My5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlERnpDQ0FmK2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBbU1TUXdJZ1lEVlFRREV4dFVaWE4wCitJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURFd0hoY05NREV3TVRBeE1EQXdNREF3V2hjTk16QXhNak14CitNak0xT1RVNVdqQW1NU1F3SWdZRFZRUURFeHRVWlhOMElHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREl3CitnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDS0FhQWNZMVkyUVJaWVdmdDVwVGlRCitMWmFOSGRHMXdHeWhiVXlWQ2QxUy9CWlFlQnh0OGlEdWVIcm82THBlWGNpb0F5TWVQVW5RUThaekJOK1l0MXBHCis4M2Z3cU5NeUhmOFdJV3V0UXZRdzJDSWJHT1JPMkZhQ3g5WGdMK0xlOUVOTUpiN1pRd1YxM3I3UHVIQVYvNlYxCitPd0kvMUNuNzNjWjJ1eVd1OEJIWmJTcU1jdFFzQWthVC9wYlBFVWJyRjRLQjJHU2lnTSttdXgrVmtuOXczVks2CitwTmc1cFV3Q1AwbHFpOUsxUk5XRVh5aTROUXVtclIrSUVpYWlWMDV0d1oxb0JhV0JHWFNUdzEyaEl1bFozL3Y2CitHTGl3Zms5STVtcjd5RFdWRGR5Q3NUdTFyaGZlbitMcDRDbHlmV0hJU1JQTDFta280VzlsZWN6Z1BXUHo0cElwCitBZ01CQUFHalVEQk9NQXdHQTFVZEV3UUZNQU1CQVFFd0hRWURWUjBPQkJZRUZNSTNhOE10alcxeDZkUFBKR2FWCitMaE1GN2JHS01COEdBMVVkSXdRWU1CYUFGRGdaZkhuVlp2eCtjWFV0aEJoSGk4MzdXZncxTUEwR0NTcUdTSWIzCitEUUVCQ3dVQUE0SUJBUUNwcnpwb2o2VWFFRzRlcUxnMkwzSHFzdlk3My9YRTh5dHVaOXdEQzNIb2RubXBlelVYCis0OFh3SlBIRk83T0dQR1daZ3NVMnFYL1pwN3lVWGtWRlNLNFZubW5TelV0WE5WbFUwb1dFRU96UUxycHBoa3NICitkY0Y4WU5OL1k2NUtuaHpJVTc4NHVIZUZlZlVwUGFFNnlTNU9TWmJvcHRaV1ZGOXkxTG9VM0Y3Z04wVUd2Vkc5CitoZmx6NU8wL0t2bVlkKzYrWXJqZSsybGJIaUpITlhMbU9QaVp5azlUQkRrbnlnQnVVMTRJT1dnaFFpbTN5a3M5Cit0S2s4RDM4Vmw4NVY1YUc5bk80U1RqeDVKOEJ0U2wweDZ3VzN0OVd3VTVVQzlnZUNST2haSTFYUkJhZklvS2tuCitWU2dITHBMVEFSdExpa2JiZy8zU3hwblcxMm1zSHZnTFZhc2YKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDU0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDU0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDJlMTRmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NTQuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRENqQ0NBZktnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQW1NU1F3SWdZRFZRUURFeHRVWlhOMAorSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lESXdIaGNOTURFd01UQXhNREF3TURBd1doY05NekF4TWpNeAorTWpNMU9UVTVXakFjTVJvd0dBWURWUVFERXhGVVpYTjBJRXhsWVdZZ05DQjJZV3hwWkRDQ0FTSXdEUVlKS29aSQoraHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFKRXE0RmhRK0pXRU5FUmY4OTVpV1k1OVpZRFFaSVp3ajlJWAorSWliLzNyYUREZDJ3Z2ZyblBINk5NTVEwTm1YRzgwd0VOS2dUWjR5YndDZGFySldRUFc2Q0FTcGsvQ1Vvc1lvdgorOVYwdzFpTnhPV2pyMTlZZXBWdXVxVmJDTXk1dERRSDlGU1o5c1M4TkdML0lYeW04STNEWGdINXV4Z3NDUWZMSgorSTNwRENpZlBudXFUK0dSOFpxNXpxTkpGSlFvUE1QRVNzMmVyR0NjVjlSRTNwRmp4RkVsNjdIRVAyRW82VHM0eQordzZZZFpUdUlGUkt3WVhTWUNhU2M1NnBLMFFZa2UzLzRTSzZRRmQ4RGxHN1g2OGF5RytSVnpqUGE3ZjdMMWtVYQorOHlGQnB3YjZOT0ZtZmlrQno3REovdmNmSXZ2N2Juam9OU2kzN05kSVZ0RVZyRTBJNWprQ0F3RUFBYU5OTUVzdworQ1FZRFZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVWpnYTlWT0llVDJNanFobnY0Q1lNRnBPeFgzc3dId1lEVlIwagorQkJnd0ZvQVV3amRyd3kyTmJYSHAwODhrWnBVdUV3WHRzWW93RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURkcAorVnBQcjRBekU3ZWNyaGNsUUtHalBhN2xlYW9yWXVldmpUTFdzaWVZMTdtVlFobE1YMWl0VE5YbFBCVWZQQXNPZAorTzdMVWdZMHlaT25WN2w4VGJmR2FsOHBJRithY2dGTGdxTTVBNno4bmdDaE1pNmlLRVpDaERWZmZBVkhKczNlLworV1VtN1ZlRlk4TXZ3bmF5M2lIajJ0ckM3WFFYMlNaQ292WFlmTlAzYlZ5cUlhRE5xdDZTUFkxc2tvdVdwbW1VbgorSVN6Y3lINkVVL0NlZ0ZqSEp5WHhyc0lXOU52Mm1EZWpybWNSMEVKT21FQWZXVWdvbmZlbWVYOTN4a3daSFcycworbFo4L2U2clRQUFNHZGhZL2I0VlJ1Nm8xRnBMY1BMR1pTZ1B3WUJOVll0Z1Q0V3NvVDB4VXZtNlkxV2lwaVpkYQorQi9icGlMOGw0R1NWdFR3MUprbz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDYxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDYxLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzJhZjRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NjEuY3J0CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQytqQ0NBZUtnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQVdNUlF3RWdZRFZRUURFd3RVWlhOMAorSUhKdmIzUWdNakFlRncwd01UQXhNREV3TURBd01EQmFGdzB6TURFeU16RXlNelU1TlRsYU1CWXhGREFTQmdOVgorQkFNVEMxUmxjM1FnY205dmRDQXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQorbVRYMnNIWTQyT3JkOWdXeUI2R2NkbExqakUrNHpCSjFCb0RwTW52Sjg5bmlNVHVaVHExVmlNcC9CNlJ1VEgrMgorWUYzK3JpWllRREg5eU0vOHJndkFVSXZLOVNUYXExOVpybTBtbmZRVW85eUtka2ZvSitYdld1dks2ZitOa0FNZworeGZoQUQ2ZVN1cGlnVHZvdi93MklUOHJTMGR4bzRLRjZoS0JMMmFZbFhoaUV5aS9ObXNFUFpXdlZoK3FrM0wvUQorR1N3cGdDK0RoVm9RekZSb2ZVZEs5TzlNa2dSNjc1aWZ0YUZEdnlpN0YwZnhyU0xmQi9XeTRjZ1JZeklXNnB5TgorMnNYV2l2S2RMSTNiZ0IwMWZmZGJPMTdaQUdJTEsxd2hPMjkvYlg2aGJIMDlZL0g3alIydmp5K0tQOU4wUEVhMworN1NCeW1sb2tCM0E4d3EvTFdQWVBlUUlEQVFBQm8xTXdVVEFQQmdOVkhSTUVDREFHQVFFQkFnRUJNQjBHQTFVZAorRGdRV0JCU09CZDFmSDAwWTlyNVM4Y0VMai85SVQ0QkdsREFmQmdOVkhTTUVHREFXZ0JTT0JkMWZIMDBZOXI1UworOGNFTGovOUlUNEJHbERBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQUI5bkxhcXhzQlcwaXNEYUJHTkp5ekg5TworV3FZWTBoZXg5dG0zVXF5Z2ZFOWI5YWFoeWtwa293UUl6aDREOVhwYmQwaFpHVmxLL3N3MnFzS2o2Z0RPaU10TAordVdzNGdhRk5XSVFxaFZzVHpMODhjN1hhVzU1bitUUlFkVlp5eTM4RFpWV3BodGUxTXVtYzlXQjhOMTVyWlREaAoraVhqd0dsMG1yVjFlZ3E0aEpaTHB5MTRmNmlocVU3S0dmbWM5b254dmd2V3hZTGkrNXY4ODc0YzRvcGhTS3NJMgorcVZFOGlaNnVxMm9RNjZQZDVTNTBjWWs2TUVXNWxpZkFoTE01V0ZabVc3ZFJLbXlrQkdaOXJGckpySXZoa21oOQorSGU3cTZURVFQMVdjb2MxNDduSWcwQlRrSEd0ZHJFdjNqSVg2VUtLVUV3VVVrOUFSQjFtU29kWlFIQmh1d3c9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NjIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NjIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkY2Q2NWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ2Mi5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEQnpDQ0FlK2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBV01SUXdFZ1lEVlFRREV3dFVaWE4wCitJSEp2YjNRZ01qQWVGdzB3TVRBeE1ERXdNREF3TURCYUZ3MHpNREV5TXpFeU16VTVOVGxhTUNZeEpEQWlCZ05WCitCQU1URzFSbGMzUWdhVzUwWlhKdFpXUnBZWFJsSUcxaGVIQmhkR2dnTVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCCitCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFOcEdsQk1YZG84Y085b3FVdy9iNlBNd2lNTlY4TENlNndCOVZLSFBhNk9HCitRMG84WHFrdGd3bmgxcm9qZ3BNaGJDQXBFN1VYZU1yNlpHcS9OdHFtTzFoTzVhZFY1SmVoV1p5dmc3ajRFQnBHCitnOGlXbzBqTnBLTUowWXgxdUJra2xqRWRaTFRIYTRiSy96eTJOS3FETlMyeVdzOS9NNSt4dzVYRTJlY0FnN0ZUCitjWGhmM3E1MFYrTTZUMklhUTlCeG50VHlDVDhJSUYyZVJNL3Q5WTk0NHM5UmZ6bS9LUVZLUllQdWRYN1loVHQ5CitpcUNKQjRKb3FZaHMzSEVPMHdQa0p4WTRLQlRVQ045NHMrN2pVRmRScll4ZSs4WWE2dElZV3FEMzhpNXFkR2hZCit4clZleTFMYXRzREpRMkVnTllvYk0vTGpvQ0xLMVdVc3NFcWYwT1UyYmkwQ0F3RUFBYU5RTUU0d0RBWURWUjBUCitCQVV3QXdFQkFUQWRCZ05WSFE0RUZnUVVPQmw4ZWRWbS9INXhkUzJFR0VlTHpmdFovRFV3SHdZRFZSMGpCQmd3CitGb0FVamdYZFh4OU5HUGErVXZIQkM0Ly9TRStBUnBRd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFGd1pyaVR1CitES2tpREhGZnozVVg0Zkl4WVRIQ2k0VHZlWVpHUGVUYnhoQmIzWFpDNXFERjRUNUh2Q1RTa0c5K29GZlp6STFhCitsUE4yeVpCN1FubUhKb3lXYTVmdW92d1VMMGlJM2lJWk1xVTU2dGRWUFc4Z2tKZSsrVTVrSE1TcHoyVkYwZW84Cis3WGtLV3hab3ZSd2N6Z2ZERlJQOXpNOUN5bHl6UWpxeHg2a2J4Sm96V253YzVVclZiSk1hUElxb25YcDFuRG9aCitpODc4K2hYNHJKVUVqZ082U2E5R1ZaUXBtdUNyUUYwcUtzVGlVQnpaTjY3aG9EM3hvVEFZaTVJWFFFMnRSRDFOCitqM3p3bmc5bGlDc3h1ckdNbnVWMEJQV3YvSURZUnUvc3lqZWUxUXYxVkZlUnRvNUQ0UmxkbWkycDFmNWlXSkNrCis1bTVZcFJza25hSUNqWXM9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ2My5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ2My5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhOTBlNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDYzLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURDakNDQWZLZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFtTVNRd0lnWURWUVFERXh0VVpYTjAKK0lHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREV3SGhjTk1ERXdNVEF4TURBd01EQXdXaGNOTXpBeE1qTXgKK01qTTFPVFU1V2pBY01Sb3dHQVlEVlFRREV4RlVaWE4wSUV4bFlXWWdkbUZzYVdRZ01qQ0NBU0l3RFFZSktvWkkKK2h2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSW9Cb0J4alZqWkJGbGhaKzNtbE9KQXRsbzBkMGJYQWJLRnQKK1RKVUozVkw4RmxCNEhHM3lJTzU0ZXVqb3VsNWR5S2dESXg0OVNkQkR4bk1FMzVpM1drYnpkL0NvMHpJZC94WWgKK2E2MUM5RERZSWhzWTVFN1lWb0xIMWVBdjR0NzBRMHdsdnRsREJYWGV2cys0Y0JYL3BYVTdBai9VS2Z2ZHhuYTcKK0phN3dFZGx0S294eTFDd0NScFArbHM4UlJ1c1hnb0hZWktLQXo2YTdINVdTZjNEZFVycWsyRG1sVEFJL1NXcUwKKzByVkUxWVJmS0xnMUM2YXRINGdTSnFKWFRtM0JuV2dGcFlFWmRKUERYYUVpNlZuZisvb1l1TEIrVDBqbWF2dkkKK05aVU4zSUt4TzdXdUY5NmY0dW5nS1hKOVljaEpFOHZXYVNqaGIyVjV6T0E5WS9QaWtpa0NBd0VBQWFOTk1Fc3cKK0NRWURWUjBUQkFJd0FEQWRCZ05WSFE0RUZnUVV3amRyd3kyTmJYSHAwODhrWnBVdUV3WHRzWW93SHdZRFZSMGoKK0JCZ3dGb0FVT0JsOGVkVm0vSDV4ZFMyRUdFZUx6ZnRaL0RVd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFCcnQKKzJmS09Vd0FiNUVGRC9lYlhNTTRRemc2c0ZZcHEvbWNuUGxtR21xd056bXVtbGdZVUJTMTVsaVRuQTRuQmdSMDkKK2Iyc2VqbHduemNucnNGQjE4WUNtRS9USVB1aDNYTUpYbVV4amNuQ3kzcVB1U3dwdXdHM2JyVUdRUGlJWmhSWnoKKzEraVNjN3ViYS9KR2FUcUxCSXRhUlBsQjZkRDNqcVkzVW93RmFXdm5ZaVZtQ1hnMTQ3RUJDNU1uMkVEaXVrZzAKK3hzcU0wM3lmcFVrcDQvVzkrV3BKdUdOeWhpY1NKYk54bGgzekVqcmdXZU12aG5GbXJUcjdzczZQMlpvS0dTMy8KK1FyWkJMVXprazI1aENGM2RUTmZURFZTUVV0MHJPTkp2eDN5bStLcCt6UVdjL29Ic0RzMFNUczVEYjJKMGRHcDgKK1ZFeXh5ZXZmd2l2RjRFUTcwSnc9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ3MS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ3MS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyYWY0YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDcxLmNydApAQCAtMCwwICsxLDE4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUMrakNDQWVLZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFXTVJRd0VnWURWUVFERXd0VVpYTjAKK0lISnZiM1FnTWpBZUZ3MHdNVEF4TURFd01EQXdNREJhRncwek1ERXlNekV5TXpVNU5UbGFNQll4RkRBU0JnTlYKK0JBTVRDMVJsYzNRZ2NtOXZkQ0F5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEKK21UWDJzSFk0Mk9yZDlnV3lCNkdjZGxMampFKzR6QkoxQm9EcE1udko4OW5pTVR1WlRxMVZpTXAvQjZSdVRIKzIKK1lGMytyaVpZUURIOXlNLzhyZ3ZBVUl2SzlTVGFxMTlacm0wbW5mUVVvOXlLZGtmb0orWHZXdXZLNmYrTmtBTWcKK3hmaEFENmVTdXBpZ1R2b3YvdzJJVDhyUzBkeG80S0Y2aEtCTDJhWWxYaGlFeWkvTm1zRVBaV3ZWaCtxazNML1EKK0dTd3BnQytEaFZvUXpGUm9mVWRLOU85TWtnUjY3NWlmdGFGRHZ5aTdGMGZ4clNMZkIvV3k0Y2dSWXpJVzZweU4KKzJzWFdpdktkTEkzYmdCMDFmZmRiTzE3WkFHSUxLMXdoTzI5L2JYNmhiSDA5WS9IN2pSMnZqeStLUDlOMFBFYTMKKzdTQnltbG9rQjNBOHdxL0xXUFlQZVFJREFRQUJvMU13VVRBUEJnTlZIUk1FQ0RBR0FRRUJBZ0VCTUIwR0ExVWQKK0RnUVdCQlNPQmQxZkgwMFk5cjVTOGNFTGovOUlUNEJHbERBZkJnTlZIU01FR0RBV2dCU09CZDFmSDAwWTlyNVMKKzhjRUxqLzlJVDRCR2xEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFCOW5MYXF4c0JXMGlzRGFCR05KeXpIOU8KK1dxWVkwaGV4OXRtM1VxeWdmRTliOWFhaHlrcGtvd1FJemg0RDlYcGJkMGhaR1ZsSy9zdzJxc0tqNmdET2lNdEwKK3VXczRnYUZOV0lRcWhWc1R6TDg4YzdYYVc1NW4rVFJRZFZaeXkzOERaVldwaHRlMU11bWM5V0I4TjE1clpURGgKK2lYandHbDBtclYxZWdxNGhKWkxweTE0ZjZpaHFVN0tHZm1jOW9ueHZndld4WUxpKzV2ODg3NGM0b3BoU0tzSTIKK3FWRThpWjZ1cTJvUTY2UGQ1UzUwY1lrNk1FVzVsaWZBaExNNVdGWm1XN2RSS215a0JHWjlyRnJKckl2aGttaDkKK0hlN3E2VEVRUDFXY29jMTQ3bklnMEJUa0hHdGRyRXYzaklYNlVLS1VFd1VVazlBUkIxbVNvZFpRSEJodXd3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDcyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDcyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGNkNjVkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NzIuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJREJ6Q0NBZStnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQVdNUlF3RWdZRFZRUURFd3RVWlhOMAorSUhKdmIzUWdNakFlRncwd01UQXhNREV3TURBd01EQmFGdzB6TURFeU16RXlNelU1TlRsYU1DWXhKREFpQmdOVgorQkFNVEcxUmxjM1FnYVc1MFpYSnRaV1JwWVhSbElHMWhlSEJoZEdnZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQgorQlFBRGdnRVBBRENDQVFvQ2dnRUJBTnBHbEJNWGRvOGNPOW9xVXcvYjZQTXdpTU5WOExDZTZ3QjlWS0hQYTZPRworUTBvOFhxa3Rnd25oMXJvamdwTWhiQ0FwRTdVWGVNcjZaR3EvTnRxbU8xaE81YWRWNUplaFdaeXZnN2o0RUJwRworZzhpV28wak5wS01KMFl4MXVCa2tsakVkWkxUSGE0YksvenkyTktxRE5TMnlXczkvTTUreHc1WEUyZWNBZzdGVAorY1hoZjNxNTBWK002VDJJYVE5QnhudFR5Q1Q4SUlGMmVSTS90OVk5NDRzOVJmem0vS1FWS1JZUHVkWDdZaFR0OQoraXFDSkI0Sm9xWWhzM0hFTzB3UGtKeFk0S0JUVUNOOTRzKzdqVUZkUnJZeGUrOFlhNnRJWVdxRDM4aTVxZEdoWQoreHJWZXkxTGF0c0RKUTJFZ05Zb2JNL0xqb0NMSzFXVXNzRXFmME9VMmJpMENBd0VBQWFOUU1FNHdEQVlEVlIwVAorQkFVd0F3RUJBVEFkQmdOVkhRNEVGZ1FVT0JsOGVkVm0vSDV4ZFMyRUdFZUx6ZnRaL0RVd0h3WURWUjBqQkJndworRm9BVWpnWGRYeDlOR1BhK1V2SEJDNC8vU0UrQVJwUXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRndacmlUdQorREtraURIRmZ6M1VYNGZJeFlUSENpNFR2ZVlaR1BlVGJ4aEJiM1haQzVxREY0VDVIdkNUU2tHOStvRmZaekkxYQorbFBOMnlaQjdRbm1ISm95V2E1ZnVvdndVTDBpSTNpSVpNcVU1NnRkVlBXOGdrSmUrK1U1a0hNU3B6MlZGMGVvOAorN1hrS1d4Wm92UndjemdmREZSUDl6TTlDeWx5elFqcXh4NmtieEpveldud2M1VXJWYkpNYVBJcW9uWHAxbkRvWgoraTg3OCtoWDRySlVFamdPNlNhOUdWWlFwbXVDclFGMHFLc1RpVUJ6Wk42N2hvRDN4b1RBWWk1SVhRRTJ0UkQxTgorajN6d25nOWxpQ3N4dXJHTW51VjBCUFd2L0lEWVJ1L3N5amVlMVF2MVZGZVJ0bzVENFJsZG1pMnAxZjVpV0pDaworNW01WXBSc2tuYUlDallzPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NzMuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NzMuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NTRjNzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ3My5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlERnpDQ0FmK2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBbU1TUXdJZ1lEVlFRREV4dFVaWE4wCitJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURFd0hoY05NREV3TVRBeE1EQXdNREF3V2hjTk16QXhNak14CitNak0xT1RVNVdqQW1NU1F3SWdZRFZRUURFeHRVWlhOMElHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREV3CitnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEYVJwUVRGM2FQSER2YUtsTVAyK2p6CitNSWpEVmZDd251c0FmVlNoejJ1amhrTktQRjZwTFlNSjRkYTZJNEtUSVd3Z0tSTzFGM2pLK21ScXZ6YmFwanRZCitUdVduVmVTWG9WbWNyNE80K0JBYVJvUElscU5JemFTakNkR01kYmdaSkpZeEhXUzB4MnVHeXY4OHRqU3FnelV0CitzbHJQZnpPZnNjT1Z4Tm5uQUlPeFUzRjRYOTZ1ZEZmak9rOWlHa1BRY1o3VThnay9DQ0JkbmtUUDdmV1BlT0xQCitVWDg1dnlrRlNrV0Q3blYrMklVN2ZZcWdpUWVDYUttSWJOeHhEdE1ENUNjV09DZ1UxQWpmZUxQdTQxQlhVYTJNCitYdnZHR3VyU0dGcWc5L0l1YW5Sb1dNYTFYc3RTMnJiQXlVTmhJRFdLR3pQeTQ2QWl5dFZsTExCS245RGxObTR0CitBZ01CQUFHalVEQk9NQXdHQTFVZEV3UUZNQU1CQVFFd0hRWURWUjBPQkJZRUZEZ1pmSG5WWnZ4K2NYVXRoQmhICitpODM3V2Z3MU1COEdBMVVkSXdRWU1CYUFGRGdaZkhuVlp2eCtjWFV0aEJoSGk4MzdXZncxTUEwR0NTcUdTSWIzCitEUUVCQ3dVQUE0SUJBUURQUUM5dllKZWdCZ1ZaSHUwU3RvUlQ3TDZTaFdjWmM1Wi9UZXlycUpCZG9pZ3VTUnE1CitrTWlGWFpwa3N4ZUZsSVVZcnkyMU1pZ1lxeE9YR1oyR1pZTnFoTHBZVmg3aHpBWTh1WXZmNFU3MHE4OHpqN213CitnSWNnRWFNZDcxR0hxYmIyTzV4M2ZDTjd2TGVVNURGWUJXZnFMbGtMNTdVcXIyYVJESGx1Y3J5eVJOb3JkaWNOCitXYkN4UG96bXF0Yk5NQUJFVWJqTE1DQ3V6SmVOUlNaYlMwT09vZDZYZDNOMDBFSzdQcWFSaGJpaGJxM0w2Z1VHCitNalVJMmtlU3hXNHZYY0RmSTVIcWVtNlNIcENjM3JldHgyVlVnd0lEQW9Ucnc3RTRkd215QzRUcDdUREpMLytkCitHVThxaFJtb1FlcjdtTFV6cGIzczhtcS80clp4K2FsVFEzZ3UKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDc0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDc0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjBjNGMyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NzQuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRENqQ0NBZktnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQW1NU1F3SWdZRFZRUURFeHRVWlhOMAorSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lERXdIaGNOTURFd01UQXhNREF3TURBd1doY05NekF4TWpNeAorTWpNMU9UVTVXakFjTVJvd0dBWURWUVFERXhGVVpYTjBJRXhsWVdZZ2RtRnNhV1FnTXpDQ0FTSXdEUVlKS29aSQoraHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFJb0JvQnhqVmpaQkZsaForM21sT0pBdGxvMGQwYlhBYktGdAorVEpVSjNWTDhGbEI0SEczeUlPNTRldWpvdWw1ZHlLZ0RJeDQ5U2RCRHhuTUUzNWkzV2tiemQvQ28weklkL3hZaAorYTYxQzlERFlJaHNZNUU3WVZvTEgxZUF2NHQ3MFEwd2x2dGxEQlhYZXZzKzRjQlgvcFhVN0FqL1VLZnZkeG5hNworSmE3d0VkbHRLb3h5MUN3Q1JwUCtsczhSUnVzWGdvSFlaS0tBejZhN0g1V1NmM0RkVXJxazJEbWxUQUkvU1dxTAorMHJWRTFZUmZLTGcxQzZhdEg0Z1NKcUpYVG0zQm5XZ0ZwWUVaZEpQRFhhRWk2Vm5mKy9vWXVMQitUMGptYXZ2SQorTlpVTjNJS3hPN1d1Rjk2ZjR1bmdLWEo5WWNoSkU4dldhU2poYjJWNXpPQTlZL1Bpa2lrQ0F3RUFBYU5OTUVzdworQ1FZRFZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVXdqZHJ3eTJOYlhIcDA4OGtacFV1RXdYdHNZb3dId1lEVlIwagorQkJnd0ZvQVVPQmw4ZWRWbS9INXhkUzJFR0VlTHpmdFovRFV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUs5UgorSjdIOGVwRzJOYWdaM0dwbDZSMWpTaUlpeFdsUEpjaTJCejFOcjhOSUVSNjRUSkNLSGVoOWt1NnR6U2RyVkwzQgorMnJqNUdtcHViRFhFV0FLZk10dDBjY0YyVUl2YTlyRE1OemFBbkNTZXZXSFhmOUh0dHI4NFg2Um1odFhiOS9SbQorZnAzVytMMEdsRGZIZkhuOHVvVmRRZTVlNnhrbUd4dGNIRFVzeU8vQ0pNa3J3VXlvQjh6czdVdGxOdE9mNDVINAorUFBnMDlselY3UlE5dkZJSDQ4Ri80Z1pXK3czQXFOOVp3dllrR2NKVVk4dHlIcGI5aERyUjRGNmxvVklucmxDRQorMHBRaVFYTkNkZWUxemE5UXNTY1NqWU54R2ZSMkRrem90ZTQxSDA5OGp2TGFsTFRUZzVGcXgvQXlsblgyODVGSQorRVRHT3VtTlE1MUlKTFVwcStoYz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDgxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDgxLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmIyYmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0ODEuY3J0CkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQnBUQ0NBVW1nQXdJQkFnSUJVVEFNQmdncWhrak9QUVFEQWdVQU1ERXhEekFOQmdOVkJBTVRCbEp2YjNRZworT0RFUk1BOEdBMVVFQ2hNSWJXSmxaQ0JVVEZNeEN6QUpCZ05WQkFZVEFsVkxNQjRYRFRBeE1ERXdNVEF3TURBdworTUZvWERUTXdNVEl6TVRJek5UazFPVm93TVRFUE1BMEdBMVVFQXhNR1VtOXZkQ0E0TVJFd0R3WURWUVFLRXdodAorWW1Wa0lGUk1VekVMTUFrR0ExVUVCaE1DVlVzd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFUMQorR3VUUTl2Z2YybDNvTE0yNXI3OGN2SUFRcUUwMkd6UUdqcC9XV3czQ3lzRXdUd05FdVpHaFJpRDVsRG1rYlVHVworVU54di83dUpqeTdrM0szZkROZGtvMUF3VGpBTUJnTlZIUk1FQlRBREFRSC9NQjBHQTFVZERnUVdCQlRIRkEyaAorQXUwdFBuemVZbkxjbWxUUWo0RkFhakFmQmdOVkhTTUVHREFXZ0JUSEZBMmhBdTB0UG56ZVluTGNtbFRRajRGQQorYWpBTUJnZ3Foa2pPUFFRREFnVUFBMGdBTUVVQ0lIN1ovSE5iL1B3YnM0MGlObGwxYTlnbWdBYllPZ2RsVlBXbworblNkY2I3Y1pBaUVBbGhWYjZDZEJYc2pPZkFXV0VFVC9RUDc0ejYwOFBLRmNjQ0lGUENETGt4bz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDgyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDgyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDllY2M5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0ODIuY3J0CkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQnFEQ0NBVXlnQXdJQkFnSUJVakFNQmdncWhrak9QUVFEQWdVQU1ERXhEekFOQmdOVkJBTVRCbEp2YjNRZworT0RFUk1BOEdBMVVFQ2hNSWJXSmxaQ0JVVEZNeEN6QUpCZ05WQkFZVEFsVkxNQjRYRFRBeE1ERXdNVEF3TURBdworTUZvWERUTXdNVEl6TVRJek5UazFPVm93TVRFUE1BMEdBMVVFQXhNR1NXNTBJRGd5TVJFd0R3WURWUVFLRXdodAorWW1Wa0lGUk1VekVMTUFrR0ExVUVCaE1DVlVzd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFTMgorZ2lZUXQ0SFZmUTJ0OGVUUzBidklTd3A3b2wyeDE3dW1ibGxCeHd6R0RGRVVRMDBKTDEvU1N0ZXplY0swbE5oRQorMEF2WThFejJzb1FFdGRTZVFHa0NvMU13VVRBUEJnTlZIUk1FQ0RBR0FRSC9BZ0VBTUIwR0ExVWREZ1FXQkJTMworK25zdjNuUWtuU2c0YURqbFRpUnBDUG83WHpBZkJnTlZIU01FR0RBV2dCVEhGQTJoQXUwdFBuemVZbkxjbWxUUQorajRGQWFqQU1CZ2dxaGtqT1BRUURBZ1VBQTBnQU1FVUNJUUR1czJMdngzeXl2YVZpWTFzMzM0dU1tNmdlNDg0WAorb2t0TXl4TFZqa0FNaUFJZ2VoVEhpSkphVDlQbmxWYStoVXB4c0lmVkF1TWV4cm01ZncvYkRGNU54enc9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ4My5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ4My5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhNzQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDgzLmNydApAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUJvRENDQVVXZ0F3SUJBZ0lCVXpBTUJnZ3Foa2pPUFFRREFnVUFNREV4RHpBTkJnTlZCQU1UQmtsdWRDQTQKK01qRVJNQThHQTFVRUNoTUliV0psWkNCVVRGTXhDekFKQmdOVkJBWVRBbFZMTUI0WERUQXhNREV3TVRBd01EQXcKK01Gb1hEVE13TVRJek1USXpOVGsxT1Zvd01ERU9NQXdHQTFVRUF4TUZSVVVnT0RNeEVUQVBCZ05WQkFvVENHMWkKK1pXUWdWRXhUTVFzd0NRWURWUVFHRXdKVlN6QlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNU3kKKzZYNWlCWXJkeHhPTWZkY0EyM3BMQm9KQ2V5RWppV2ZBTHhUbTgwTUpHQmRSTlZkblQ1MHhOVTNTRER3SFdQZGEKKy9FUXFIcStpdHNxa1VleUFHQXlqVFRCTE1Ba0dBMVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVGR3NGSC9Lc3ZNNG4KK3IraTFnSTJpQ1ZYaTNLdEZNQjhHQTFVZEl3UVlNQmFBRkxmNmV5L2VkQ1NkS0Rob09PVk9KR2tJK2p0Zk1Bd0cKK0NDcUdTTTQ5QkFNQ0JRQURSd0F3UkFJZ1FVUkg4REhXRkhWSzM4K3puV2M4NUcxUCtnNG9jZGtBNUd0MExiT2cKK1NKTUNJQnNhY09MRnl3eFpZRjhhdGl6dzZ6TVJ3K1FlSFIyNTE0SkloSlVjazJrZAorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0OTEuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0OTEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDYwNWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ5MS5jcnQKQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCcVRDQ0FVeWdBd0lCQWdJQld6QU1CZ2dxaGtqT1BRUURBZ1VBTURFeER6QU5CZ05WQkFNVEJsSnZiM1FnCitPVEVSTUE4R0ExVUVDaE1JYldKbFpDQlVURk14Q3pBSkJnTlZCQVlUQWxWTE1CNFhEVEF4TURFd01UQXdNREF3CitNRm9YRFRNd01USXpNVEl6TlRrMU9Wb3dNVEVQTUEwR0ExVUVBeE1HVW05dmRDQTVNUkV3RHdZRFZRUUtFd2h0CitZbVZrSUZSTVV6RUxNQWtHQTFVRUJoTUNWVXN3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVRoCitEMlNtZFM2RDdjWWkydkdNeXVDZG9sL09PVU4yZGkycFMyd2ZTSS9Nc1kvWjRPOWlOSHFiWFFQNmwraGNUNWFwCitkYXljczdyNlpQTnFtV003YjE2Z28xTXdVVEFQQmdOVkhSTUVDREFHQVFIL0FnRUFNQjBHQTFVZERnUVdCQlJiCit6VnJjQXhkZGowaTBERXF2VEdUOEYzN2JpekFmQmdOVkhTTUVHREFXZ0JSYnpWcmNBeGRkajBpMERFcXZUR1Q4CitGMzdiaXpBTUJnZ3Foa2pPUFFRREFnVUFBMGtBTUVZQ0lRRGJyU1Y0bmRIMHZBUjNIcUpmQm44TlQ4emR2TWpCCitxU0plczZRd2E0MmIyd0loQUt5b0gwSCtiMVN2dzhwTWt2VVlGNEVsSDVDbm43Z3hiN1dsM2FyYzAraFEKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDkyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDkyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWI1M2E1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0OTIuY3J0CkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQm9UQ0NBVVdnQXdJQkFnSUJYREFNQmdncWhrak9QUVFEQWdVQU1ERXhEekFOQmdOVkJBTVRCbEp2YjNRZworT1RFUk1BOEdBMVVFQ2hNSWJXSmxaQ0JVVEZNeEN6QUpCZ05WQkFZVEFsVkxNQjRYRFRBeE1ERXdNVEF3TURBdworTUZvWERUTXdNVEl6TVRJek5UazFPVm93TURFT01Bd0dBMVVFQXhNRlJVVWdPVEl4RVRBUEJnTlZCQW9UQ0cxaQorWldRZ1ZFeFRNUXN3Q1FZRFZRUUdFd0pWU3pCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkM5RQordEsxcEU4RWk4dmdTY3VueWp4NTBDK3FEc1FTOEQyUmhHSEM0VmtFMnl5aUZ4SkEveW5ob2VYVEtac0h1RVdJOQorQ2ZPU3ZrMFJyVFdmOW5yMHBUR2pUVEJMTUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZMcXNONTJ0QWYxaworWGx6eFFtZEQ1cUc2U3k2UE1COEdBMVVkSXdRWU1CYUFGRnZOV3R3REYxMlBTTFFNU3E5TVpQd1hmdHVMTUF3RworQ0NxR1NNNDlCQU1DQlFBRFNBQXdSUUlnWGxmS3Foa2hYZ0sxMTJFeWNsK1o1TkhNKzZhcVhFN2k5ajdJeUdmaworaWtJQ0lRREJZTkdicFN4ODJYRytJUy9oNEFXTlRhNEhzNnJtV3ZRRFdKdW03TnJ6TVE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMjI0X3Bydi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY18yMjRfcHJ2LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmI4M2EwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMjI0X3Bydi5wZW0KQEAgLTAsMCArMSw1IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01HZ0NBUUVFSEdoSitYMFFadmFaZDFsamZINDRtVVpNN2o3SHJKY0dVNkMrQjBLZ0J3WUZLNEVFQUNHaFBBTTYKK0FBUVdrNktROS9DMWNmNHJRZFhZU3dFeWRqSDBxR0Q1bGZvekxBbC9WQmtyc1E4QUVUOHEvN0U4R2lUT1JKRkYKK2NhbFVRSzRCU2dETDl3PT0KKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzIyNF9wdWIucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMjI0X3B1Yi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJkYTU0YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzIyNF9wdWIucGVtCkBAIC0wLDAgKzEsNCBAQAorLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KK01FNHdFQVlIS29aSXpqMENBUVlGSzRFRUFDRURPZ0FFRnBPaWtQZnd0WEgrSzBIVjJFc0JNbll4OUtoZytaWDYKK015d0pmMVFaSzdFUEFCRS9Ldit4UEJva3prU1JSWEdwVkVDdUFVb0F5L2M9CistLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzI1Nl9wcnYucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMjU2X3Bydi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyZGQ0YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzI1Nl9wcnYucGVtCkBAIC0wLDAgKzEsNSBAQAorLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCitNSGNDQVFFRUlFbkpxTUdNUzRoV09NUXh6eDN4eVpRVEZnbTFnTlQ5UTZES3NYMnk4VDd1b0FvR0NDcUdTTTQ5CitBd0VIb1VRRFFnQUVkM0psYjRGTE9aSjUxZUh4ZUIrc2J3bWFQRnloc09OVFVZTkxDTFplQzFjbGtNMnZqM2FUCitZYnp6U3MvQkhsNEhUb1FtdmQ0RXZtNWxPVVZFbGhmZVJRPT0KKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzI1Nl9wdWIucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMjU2X3B1Yi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxZGEwMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzI1Nl9wdWIucGVtCkBAIC0wLDAgKzEsNCBAQAorLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KK01Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWQzSmxiNEZMT1pKNTFlSHhlQitzYndtYVBGeWgKK3NPTlRVWU5MQ0xaZUMxY2xrTTJ2ajNhVFlienpTcy9CSGw0SFRvUW12ZDRFdm01bE9VVkVsaGZlUlE9PQorLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY18zODRfcHJ2LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzM4NF9wcnYucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OTA3NTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY18zODRfcHJ2LnBlbQpAQCAtMCwwICsxLDYgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUlHa0FnRUJCREEvWFkyYjRvQzFhV3pGekorVXo0cjM1cllkMWxrcktyS3pwTVlIUlFRWDdESjl6Y3J0ZkJBRgorUFhHYUJYVHdwMnFnQndZRks0RUVBQ0toWkFOaUFBVFp4bUsxQzZLY3BIbVFSUTRFT3VyMDhNYWJGV2R0RVM5aQorS25ISk1GbXZtWmFSeFdnTkswVFJFVmVkc1M5S1FUb3UxY1JmejdaN1cyUGdDNUhyNVowSnByR3NMQXhDZ3FvUworTVg3VmtVK1ptOFNJdXhNdWcwTE1OdkxLWGpONXgwYz0KKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzM4NF9wdWIucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMzg0X3B1Yi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5NTM4MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzM4NF9wdWIucGVtCkBAIC0wLDAgKzEsNSBAQAorLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KK01IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFMmNaaXRRdWluS1I1a0VVT0JEcnE5UERHbXhWbmJSRXYKK1lpcHh5VEJacjVtV2tjVm9EU3RFMFJGWG5iRXZTa0U2THRYRVg4KzJlMXRqNEF1UjYrV2RDYWF4ckN3TVFvS3EKK0VqRisxWkZQbVp2RWlMc1RMb05DekRieXlsNHplY2RICistLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzUyMV9wcnYucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfNTIxX3Bydi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ0YmI0NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzUyMV9wcnYucGVtCkBAIC0wLDAgKzEsNyBAQAorLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCitNSUhjQWdFQkJFSUJzYmF0Qjd0NTV6SU5wWmhnNmlqZ1ZTaFBZRmp5ZWQ1bWJnYlVOZEt2ZTlvbzJaK2tlMzNRCitsajRXc0Fjd2VPNkxpampaWnFXQzlHMFovNVhmT3Rsb1dxNmdCd1lGSzRFRUFDT2hnWWtEZ1lZQUJBQWQ0VUxWCitUMm5yQTQ3a3Q2K2RQS0IzTnYyYzl4bnJOVTFwaDU3bjg4RTIrdysvbndqNGErWDZFbzdCb0ZIVDVzWkQ2RnJhCitqL3JQTm1QQ1lMMHNoRXR2VmdETzZPU0tubVhRbkszWW55TmQ3Z1h6dUtaR3ZuRmZIMmZWdERUZy95T2gvQWZ2CitkMEFaUGtEdS8yODd6ZjEyV3FrVlVETlNUK1R5QmZWRVRpa3NUQzlxd1E9PQorLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfNTIxX3B1Yi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY181MjFfcHViLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmJjNWM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfNTIxX3B1Yi5wZW0KQEAgLTAsMCArMSw2IEBACistLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQorTUlHYk1CQUdCeXFHU000OUFnRUdCU3VCQkFBakE0R0dBQVFBSGVGQzFVOXA2d09PNUxldm5UeWdkemI5blBjWgorNnpWTmFZZWU1L1BCTnZzUHY1OEkrR3ZsK2hLT3dhQlIwK2JHUStoYTJvLzZ6elpqd21DOUxJUkxiMVlBenVqaworaXA1bDBKeXQySjhqWGU0Rjg3aW1ScjV4WHg5bjFiUTA0UDhqb2Z3SDczZEFHVDVBN3Y5dk84MzlkbHFwRlZBegorVWsvazhnWDFSRTRwTEV3dmFzRT0KKy0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnAyNTZfcHJ2LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwMjU2X3Bydi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2YTg2NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwMjU2X3Bydi5wZW0KQEAgLTAsMCArMSw1IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01IZ0NBUUVFSUNGaDF2TGJkbEp2cGl3VzgxYW9Ed0h6TDNkbmhMTnFxWmVacUxkbUlJRC9vQXNHQ1Nza0F3TUMKK0NBRUJCNkZFQTBJQUJIYU1qSzVLdktZd2JiRHRnYkRFcGlGY040Qm03RzFoYkJSdUUvSEgzNENibHF0cEVjSjkKK2lnSXpud2ttaEE1VkkyMDlIdnZpWnAwSkRreE1aZyt0cVIwPQorLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnAyNTZfcHViLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwMjU2X3B1Yi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczODYyMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwMjU2X3B1Yi5wZW0KQEAgLTAsMCArMSw0IEBACistLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQorTUZvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUhBMElBQkhhTWpLNUt2S1l3YmJEdGdiREVwaUZjTjRCbQorN0cxaGJCUnVFL0hIMzRDYmxxdHBFY0o5aWdJem53a21oQTVWSTIwOUh2dmlacDBKRGt4TVpnK3RxUjA9CistLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwMzg0X3Bydi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19icDM4NF9wcnYucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTgyZGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19icDM4NF9wcnYucGVtCkBAIC0wLDAgKzEsNiBAQAorLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCitNSUdvQWdFQkJEQTkyUzUxRFpEWDA1L0JpRnpZclJMcWxFSHlLNU0wdE5sbElDcmJGRWpPSk1XQWlvWGRtdndpCittdkNqRWs5MVc4dWdDd1lKS3lRREF3SUlBUUVMb1dRRFlnQUVjWitkQ1RwaWZnMDFBNFhHWWM2L0FNWVpJMVp2Cis2UUJxTVFldkhZY2J4cnRvbUYvWEl1b3l2akZ2am5nN2ZOR1ZkNFgyYlB3TXNaWGRYSm1vNTZ1cWhJVlRwWVRmCiswclNPZHRSRi9nRGRpK1dRbHRoMzFHbHRJN1M4amJGSEpPWnEKKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwMzg0X3B1Yi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19icDM4NF9wdWIucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjAyZTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19icDM4NF9wdWIucGVtCkBAIC0wLDAgKzEsNSBAQAorLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KK01Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQTJJQUJIR2ZuUWs2WW40Tk5RT0Z4bUhPdndER0dTTlcKK2Ira0FhakVIcngySEc4YTdhSmhmMXlMcU1yNHhiNDU0TzN6UmxYZUY5bXo4RExHVjNWeVpxT2VycW9TRlU2V0UKKzM5SzBqbmJVUmY0QTNZdmxrSmJZZDlScGJTTzB2STJ4UnlUbWFnPT0KKy0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnA1MTJfcHJ2LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwNTEyX3Bydi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwYzYyMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwNTEyX3Bydi5wZW0KQEAgLTAsMCArMSw3IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01JSGFBZ0VCQkVBM0xKZDQ5cDl5Ykx5ajlLSm84V3ROWVgwUUtBMTVwcUFwelZHSG4rRUJLVFRmNVRsVVZUTjkKKzlwQnR4OWJTN3FUYnNnWmNBaWozT3o3WEZrZ09mWEhTb0FzR0NTc2tBd01DQ0FFQkRhR0JoUU9CZ2dBRU9MZnMKK2tyWWNYR3gvdkNpazdIV2RTUHpVNHVOMDN2MWNTV2lsVGI3M1VRNVJlSWI3L0RqcU9hcFNrMW5YQ25GV3cxMDgKK3VzZk9kMnZiSlIzV1M4NXhJMFFrN25CSjd0Qnk4TnZFMTVtVzRYWFZWK0pqZGpycGNKWEFnZWMrZmJMaml0dzkKK1RKb0VoN0h0NkhiY0g4cGh5UUxwb2RoeUs0WVNrbzhZb2toRldSbz0KKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwNTEyX3B1Yi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19icDUxMl9wdWIucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNWQwNzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19icDUxMl9wdWIucGVtCkBAIC0wLDAgKzEsNiBAQAorLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KK01JR2JNQlFHQnlxR1NNNDlBZ0VHQ1Nza0F3TUNDQUVCRFFPQmdnQUVPTGZza3JZY1hHeC92Q2lrN0hXZFNQelUKKzR1TjAzdjFjU1dpbFRiNzNVUTVSZUliNy9EanFPYXBTazFuWENuRld3MTA4dXNmT2QydmJKUjNXUzg1eEkwUWsKKzduQko3dEJ5OE52RTE1bVc0WFhWVitKamRqcnBjSlhBZ2VjK2ZiTGppdHc5VEpvRWg3SHQ2SGJjSDhwaHlRTHAKK29kaHlLNFlTa284WW9raEZXUm89CistLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5ub29wdC5kZXIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYubm9vcHQuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTE2YTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYubm9vcHQuZGVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5wazguZGVyIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiZDJhOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5wazguZGVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5wazgucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJlYWI3YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5wazgucGVtCkBAIC0wLDAgKzEsNSBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNRzhDQVFBd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRRUVWVEJUQWdFQkJCZ3pqb2FvZ2VJNDlVbTlid1ZUCitTVXR6NDlZUk1QM0d5VzJoTkFNeUFBUlJkYnpmTUtOdzg1MVRrK1lTY29qWUFXZTE5TFMzZHNaMDk4YnpWTGZTCitKQVlzSDJoVXRhZXZEK1Y0NnZKWThDYz0KKy0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5wazgucHcuZGVyIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5wdy5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwYjViZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5wazgucHcuZGVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5wazgucHcucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5wdy5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxM2QxZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5wazgucHcucGVtCkBAIC0wLDAgKzEsNiBAQAorLS0tLS1CRUdJTiBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLQorTUlHUk1Cd0dDaXFHU0liM0RRRU1BUUV3RGdRSUlybG1DQ1NwSnpjQ0FnZ0FCSEdtMkx5SjYwb2pmaWxSUnA4aAorWGYrc1dMM2xKcTZ3bGo0Tms0MVNIVm5aMlJpVnRQNU5WSzkwOC9XeG5Ya3JpZGQ2UXBqbnEvMTR3b1dWbVF4VAorSXpoS0ZWaTIyWW1ReUJzTmorYkVHREFFNGM5cWFieTh1NnpienM3UWoyOUY5MGYvUGlZc2FJRUdjTm4vVzg4ZQorWGFyTkR3PT0KKy0tLS0tRU5EIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYuc2VjMS5kZXIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYuc2VjMS5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzMzZiNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5zZWMxLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYuc2VjMS5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYuc2VjMS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhNzk5MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5zZWMxLnBlbQpAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUY4Q0FRRUVHRE9PaHFpQjRqajFTYjF2QlZOSlMzUGoxaEV3L2NiSmJhQUtCZ2dxaGtqT1BRTUJBYUUwQXpJQQorQkZGMXZOOHdvM0R6blZPVDVoSnlpTmdCWjdYMHRMZDJ4blQzeHZOVXQ5SWtCaXdmYUZTMXA2OFA1WGpxOGxqdworSnc9PQorLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnNlYzEucHcucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnNlYzEucHcucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYTA4NjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYuc2VjMS5wdy5wZW0KQEAgLTAsMCArMSw4IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK1Byb2MtVHlwZTogNCxFTkNSWVBURUQKK0RFSy1JbmZvOiBERVMtQ0JDLEFBOTQ4OTJBMTY5RkE0MjYKKworZ1NrRnVVRU5Oa2U1TXZrV0hjMTEvdzFOUVdCeGFJeEdUK2Q1b1JjcXM0NEQzdGx0Vk93dGRuWWV4b0Q5dVNJTAord01GRlJMTDZJNWlpMU5hYTM4blBPTWFhN2tMVTJKM2pZOFNlSUgxclE0M1g2dGxwdjlXRkdxRG4vbTZYN29LbworUk1NZkdkaWNQWmc9CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYuc3BlY2RvbS5kZXIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYuc3BlY2RvbS5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgwYTJlMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5zcGVjZG9tLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wdWIuZGVyIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHViLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGM1OTUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHViLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wdWIucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHViLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjc3ZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHViLnBlbQpAQCAtMCwwICsxLDQgQEAKKy0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCitNRWt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFFRE1nQUV2SGw5czY1L0NPdzlTV3RQdEJHejlpQ2xXS1VCCis0Q0l0Q00vZzNJcnNpeHA3OGt2cEtWSE1XNkcrdXlSMGtKcmcKKy0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZW5jby1jYS1wcnN0ci5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lbmNvLWNhLXByc3RyLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTAzMzE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZW5jby1jYS1wcnN0ci5wZW0KQEAgLTAsMCArMSwxNCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDRFRDQ0FYYWdBd0lCQWdJRVRadDhsekFOQmdrcWhraUc5dzBCQVFVRkFEQkNNVUF3UGdZRFZRUURFemRQCitjR1Z1VmxCT0lGZGxZaUJEUVNBeU1ERXhMakEwTGpBMUlESXdPak16T2pJM0lGVlVReUJoYzJSbGJXOHVlVzl1CitZVzR1Ym1WME1CNFhEVEV4TURNeU9USXdNek15TjFvWERUSXhNRFF3TWpJd016TXlOMW93UWpGQU1ENEdBMVVFCitBeE0zVDNCbGJsWlFUaUJYWldJZ1EwRWdNakF4TVM0d05DNHdOU0F5TURvek16b3lOeUJWVkVNZ1lYTmtaVzF2CitMbmx2Ym1GdUxtNWxkRENCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBMzhVM3dBL2VUR04vCisvQUpIbzJPc0VIakxkTzlrM01vNVFjU2h2Zys2SW9BVGhEN0hFeU9ZbTRJbGQ4czQrZUV5Mmk5ZWNXdk1LRzZNCitZU08rR3dHOXhPZDl3REZ0T0RwRit6NnJJdDhhNGJMYlFIY3NwOUNjdStabWp4a0prbXhPQ3o3NzRseEVUQXJYCitTYWtzQUI1UDZXZWIvTHdLVXYvSXk5Y3JSTTlIelNFQ0F3RUFBYU1RTUE0d0RBWURWUjBUQkFVd0F3RUIvekFOCitCZ2txaGtpRzl3MEJBUVVGQUFPQmdRQVJDREZZQ2I5bjE1MWhnd2l0eHpidWFjSVZEcUlIOEVvdVYyVkJxbE5SCit0ajhxMW1hbGlERTNwVzdXUkF3TWk1aTMrNWMwYXVLd2hUR0VTc0JQamFzZDVRbmpxWE9rUmJjWmhrZVZRMWxuCis2TkVuNnhDK00rSDJMR1ZIU1Nyb3BjR2E4b2xMbG85OExyc0Z1SFZITWV3VHM3U0sybGMrN3JVL0lMZWMzeW1qCitvZz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lbmNvLWNlcnQtdXRmOHN0ci5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lbmNvLWNlcnQtdXRmOHN0ci5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2MTNkOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VuY28tY2VydC11dGY4c3RyLnBlbQpAQCAtMCwwICsxLDEzIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUI4akNDQVZ1Z0F3SUJBZ0lFVFp0OCt6QU5CZ2txaGtpRzl3MEJBUVVGQURCQ01VQXdQZ1lEVlFRREREZFAKK2NHVnVWbEJPSUZkbFlpQkRRU0F5TURFeExqQTBMakExSURJd09qTXpPakkzSUZWVVF5QmhjMlJsYlc4dWVXOXUKK1lXNHVibVYwTUI0WERURTBNRGN5T1RBek5UTXpNMW9YRFRJME1EZ3dNakF6TlRNek0xb3dGekVWTUJNR0ExVUUKK0F3d01aSGN1ZVc5dVlXNHVibVYwTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FESFlXOHEKK1paL0hJSWxVOGovWUl5VGgzaDU5SmNKRjBFczdSc1BnMjVRVkprRGtmaE1uNmwxNWYybmVCMktQTEt4Q0xwTEQKK296WUQ0cy9JZjhhcTc0QTFDMnZ2T0xvL0dxMWVyTlM0YjlJUzV4THMzTHU2NDNYR3hTOTNSZjZqcnNHYThsZmIKK1dhN0RzUXJwN0ZMVDVHQXB3Q3A2Q2VibVpxN2pFSW1qMHBERlJ3SURBUUFCb3lBd0hqQUpCZ05WSFJNRUFqQUEKK01CRUdDV0NHU0FHRytFSUJBUVFFQXdJR1FEQU5CZ2txaGtpRzl3MEJBUVVGQUFPQmdRQVMxVWxvN2lCQUJwbS8KK1MyM21DbklGUlkxK2VGZllnNGg4RWlLOWY4a1dEd2R1WFNZR1ZVcVJIcWg0TGNOU2RUT0lhU0VHNFJHeVYvRUEKKzVSZlR2aWFROVB4UGlTRmVnTmphOC9hSGVsL25PUmZzRWs0cndCQ1BHS0R2ZUw1S1loQXR5QXM4NjVaekx0disKK2tFa2ZoYVRnckJJaWt3bG5xdW9YNVVIT2RML2lhdz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9mb3JtYXRfZ2VuLmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2Zvcm1hdF9nZW4ua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNDcyMzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9mb3JtYXRfZ2VuLmtleQpAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNkUUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQWw4d2dnSmJBZ0VBQW9HQkFNRFJTek9ORVNYNG1TVlQKK0o2OW8zeDl2UWFuWGNQTnZpbGpjd0tna3JYa0ZhaDZoUVVBaFcrNGpRTHh0R2IrTFU0N2dFMzIxSkd0R05iNUwKK3oxaHRqTFVMdmM5U0FwbEo2T09jUVVEaHlGeEk0bzZGbVV6b3J2NDl5dHpINngySU83VU9GNDRNeUpJV0dqRzMKKzRmb2hTOEVRYVFqa0JZVzdrd00vdkNWVDhCbDlBZ01CQUFFQ2dZQlRxajBjU0VpNWxpNDFrT2gyWjJYeGlPQVEKK0owaCtpTmFhQ21lYVRoZnJuRnJZb1pYamt0WUY5Y3dBTnNMbVp6bEJsSjlBZTVvcTVoTXAyRkZIQ0huMXoxVS8KK0JpRTN5RjJBWE5zbEwwcDhsTU80cUd4bXQyaVlkRTNaOGNvbWZreXR0VUo1azl0aExRelUvTldBVFA4RVpHbmcKK2lUZEVERk9XMzVjRzI2Y2NEUUpCQVBQb2FpdmVBVk4wSll4ZTJ0WVI4eGI1cXRhODlRR1U2SERkVFJpQ2xhcDEKKzVyZnBoNWQzME1RZ2dxZjF0QlRpRFJLT1NrN3VOMzl4d0diTXp6MTErTmNDUVFES1lIWFdBc04zUWxtRlFLVFgKK25tNEc1eHBsNTdQOVUyNXdTQytOWU9tRkVpZW9tRDdZbGJhQktCYzBWNUpOajJJcVV0MEV2WE5oM0xBNWN6ZDkKKzNwSExBa0Fpb1ZnWnZGNmgwN2JWRkU2cjRFYU1kNHhiQ3Q4YWgyTHRTMjU3MFdhZ21qYlUyL0psZmh5RkREeWcKK3psRHdPaHd6QzBMZnJCRHpKbHB6L2haYW1wcG5Ba0Jzd2pJUmRTSytzTFdUV3c0N29qVFhHTk9pK0VaT1djdjgKK0k0OEtsNDVucVQ0TzZPSzlXcGZlQ1VHUEs1REFoZEhubE9pYVo0WGVqYzlXMEloOTZHTEpBa0JPekpFOG5VVTUKK2dpVWpMQXhKb1llcEtsV2g1dFpzTkRvR0ZnNDYrYkhuOWwxTzZmWDd0YXUwK2pFejR0QzZhQThSM0h0VU9yWXYKK2hKNjFnSDh4M1U1SgorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZm9ybWF0X2dlbi5wdWIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9mb3JtYXRfZ2VuLnB1YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWE3YWIzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZm9ybWF0X2dlbi5wdWIKQEAgLTAsMCArMSw2IEBACistLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQorTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FEQTBVc3pqUkVsK0prbFV5ZXZhTjhmYjBHcAorMTNEemI0cFkzTUNvSksxNUJXb2VvVUZBSVZ2dUkwQzhiUm0vaTFPTzRCTjl0U1JyUmpXK1M4OVliWXkxQzczUAorVWdLWlNlampuRUZBNGNoY1NPS09oWmxNNks3K1BjcmN4K3NkaUR1MURoZU9ETWlTRmhveHQrSDZJVXZCRUdrSQorNUFXRnU1TURQN3dsVS9BWmZRSURBUUFCCistLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2Zvcm1hdF9wa2NzMTIuZm10IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZm9ybWF0X3BrY3MxMi5mbXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2ZDU5OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2Zvcm1hdF9wa2NzMTIuZm10CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2Zvcm1hdF9yc2Eua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZm9ybWF0X3JzYS5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4Y2I1NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2Zvcm1hdF9yc2Eua2V5CkBAIC0wLDAgKzEsMTUgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNXd0lCQUFLQmdRREEwVXN6alJFbCtKa2xVeWV2YU44ZmIwR3AxM0R6YjRwWTNNQ29KSzE1QldvZW9VRkEKK0lWdnVJMEM4YlJtL2kxT080Qk45dFNSclJqVytTODlZYll5MUM3M1BVZ0taU2Vqam5FRkE0Y2hjU09LT2habE0KKzZLNytQY3JjeCtzZGlEdTFEaGVPRE1pU0Zob3h0K0g2SVV2QkVHa0k1QVdGdTVNRFA3d2xVL0FaZlFJREFRQUIKK0FvR0FVNm85SEVoSXVaWXVOWkRvZG1kbDhZamdFQ2RJZm9qV21ncG5tazRYNjV4YTJLR1Y0NUxXQmZYTUFEYkMKKzVtYzVRWlNmUUh1YUt1WVRLZGhSUndoNTljOVZQd1loTjhoZGdGemJKUzlLZkpURHVLaHNacmRvbUhSTjJmSEsKK0puNU1yYlZDZVpQYllTME0xUHpWZ0V6L0JHUnA0SWszUkF4VGx0K1hCdHVuSEEwQ1FRRHo2R29yM2dGVGRDV00KK1h0cldFZk1XK2FyV3ZQVUJsT2h3M1UwWWdwV3FkZWEzNlllWGQ5REVJSUtuOWJRVTRnMFNqa3BPN2pkL2NjQm0KK3pNODlkZmpYQWtFQXltQjExZ0xEZDBKWmhVQ2sxNTV1QnVjYVplZXovVk51Y0VndmpXRHBoUklucUpnKzJKVzIKK2dTZ1hORmVTVFk5aUtsTGRCTDF6WWR5d09YTTNmZDZSeXdKQUlxRllHYnhlb2RPMjFSUk9xK0JHakhlTVd3cmYKK0dvZGk3VXR1ZTlGbW9KbzIxTnZ5Wlg0Y2hRdzhvTTVROERvY013dEMzNndROHlaYWMvNFdXcHFhWndKQWJNSXkKK0VYVWl2ckMxazFzT082STAxeGpUb3ZoR1RsbkwvQ09QQ3BlT1o2aytEdWppdlZxWDNnbEJqeXVRd0lYUjU1VG8KK21tZUYzbzNQVnRDSWZlaGl5UUpBVHN5UlBKMUZPWUlsSXl3TVNhR0hxU3BWb2ViV2JEUTZCaFlPT3ZteDUvWmQKK1R1bjErN1dydFBveE0rTFF1bWdQRWR4N1ZEcTJMNFNldFlCL01kMU9TUT09CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvaGFzaF9maWxlXzEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODFmYWQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvaGFzaF9maWxlXzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvaGFzaF9maWxlXzIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQ0ZWFjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvaGFzaF9maWxlXzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvaGFzaF9maWxlXzMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGJiMGJhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvaGFzaF9maWxlXzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvaGFzaF9maWxlXzQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvaGFzaF9maWxlXzQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2hhc2hfZmlsZV81IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvaGFzaF9maWxlXzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxZmJmMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2hhc2hfZmlsZV81CkBAIC0wLDAgKzEgQEAKK2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlVc2FnZS5kZWNpcGhlck9ubHkuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5VXNhZ2UuZGVjaXBoZXJPbmx5LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzM3OTc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5VXNhZ2UuZGVjaXBoZXJPbmx5LmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNGekNDQVlDZ0F3SUJBZ0lKQUpzVHpreWxiOTVTTUEwR0NTcUdTSWIzRFFFQkJRVUFNRDh4Q3pBSkJnTlYKK0JBWVRBa2RDTVJJd0VBWURWUVFIREFsRFlXMWljbWxrWjJVeEhEQWFCZ05WQkFvTUUwUmxabUYxYkhRZ1EyOXQKK2NHRnVlU0JNZEdRd0hoY05NVFV3TlRFeU1UQXpOalUxV2hjTk1UZ3dOVEV4TVRBek5qVTFXakEvTVFzd0NRWUQKK1ZRUUdFd0pIUWpFU01CQUdBMVVFQnd3SlEyRnRZbkpwWkdkbE1Sd3dHZ1lEVlFRS0RCTkVaV1poZFd4MElFTnYKK2JYQmhibmtnVEhSa01JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRQzlueFlPU2JoYS9BcDQKKzZyQUNyT01IN3pmREQrMFpFSGhiTzBiZ0dSamM1RWx2T2FOdUQzMjF5OVRueUF4K0pycVBwL2xGckFnTmlWbzEKK0hQdXJQSGZjSit0TkJVZ0JIYm9XR05FTk5hZjlvdndGUGF3c0J6RVpyYUduRGFxVlBFRmNJc1VRUFZxTzFsclEKK0NITFVqdHFvMWhNWkRxZS9XZWIwTXc5Y1pycU9hUUlEQVFBQm94c3dHVEFKQmdOVkhSTUVBakFBTUF3R0ExVWQKK0R3UUZBd01INElBd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQUowTlMyd1ViZ1JlbEswcUt4clIyVHM2alZZRUgKK2JteWt4M0dIakZ5S3BzY0RJbjJ2Tnl5Qjd5Z2ZGZ2xaUGN3KzJtbjN4dVZJd09WL21XeEZ2S0hrK2oyV3JUUUwKK3REcVNDNUJoRm9SMDF2ZUZ1MDdKZEVZdnorSStOQ0w1ejBJR1dYa1VyazIzNVdsNHc0V01aRG5YVHFuY01ORWsKK2ZMdHBvOXk3OVhEMDBRWT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NGQ0N2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlmaWxlCkBAIC0wLDAgKzEsMTUgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNYZ0lCQUFLQmdRRE1ZZm52V3RDOElkNWJQS2FlNXlYU3hRVHQrWnB1bDZBbm5aV2ZJMlR0SWFydmpIQkYKK1V0WFJvOTZ5N2hvTDRWV09QS0dDc1JxTUZEa3JiZVVqUnJ4OGlMOTE0L3NybnlmNnNoOWM4WmswNHhFT3BLMXkKK3B2QnorS3M0dVpPYnRqbm5pdGYwTkJHZGpNS3h2ZVRxK1ZFN0JXVUl5UWp0UThtYkRPc2lMTHZoN3dJREFRQUIKK0FvR0FlZlBJVDhNUHBBSk5qSUUvSnJma0FNVGdzU0xydkN1ck81Z3pEQmJ4aFBFKzd0c01yc0REcHVpeDNIQm8KK2lFZzNaYnpWM29iUXdWN2IwZ2NyMzRXNHQwQ011SmY1YjVpckhSRzhKY1p1bmNtb2ZEeTZ6N1M1VnM3NU84NXoKK2ZWelRJdVZVeXVIeTFyTTZyU0JZS2ZzTUxWeUltVWI0d3RJWEVNSFB6ZENMOUxFQ1FRRDNaZmdHcXVkTVdxOHYKKzNCbEtoc1E0ZnNSMHZ4ek5sTVpmb1JyWnpjdkJUMzM5QnAxVVE4YVVvOHhCdEhpUnd1VzFOYVBOZ1lLWDZYUTYKK3BwdVd1VGlKQWtFQTAzMGk0OTNLbkZQTFJ3V3lwcUYvczZaTmxWeWUrZXVGTjVORi9JZUpjdmIvR1VEUll2OU8KK3BSb3pSUzFqTng0WkIxSzJ4VDdOOU13c1BIRDZqNks0dHdKQkFMZGZIVGZUOVJ6akduYWU3U0FRUStDY0ZZRnoKK0ppWTYzODZCMnlVVkpMRmorajVSYU12TWNLUTd4R252R203dnh0TkpydC9qM3FnNm9hdlhVZnVsemdFQ1FRRFAKK0NFVkxoQ2QvK1plWm96NU1XUFRHVFJyT0NLbW9ScU5XMEZsRzZQZnBEMXFTd2gwNEtHNDR1ZmxPMHl1NUhVR3IKK0paRytiY2o0eDViV1pGTWtvVXJwQWtFQXlFZ1F6ZXNLRnFjYnQxY3F2M3BMWEpZUUJCdzZsZUZYZ0hrMTFhN2sKKytBa2V4aHJQWXlxLzR0WEZPMlRMazJoczd0cFlnTkRPcVpDdkV1N2p0TjNSdUE9PQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUuM2RlcyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUuM2RlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzhjMTlhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS4zZGVzCkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK1Byb2MtVHlwZTogNCxFTkNSWVBURUQKK0RFSy1JbmZvOiBERVMtRURFMy1DQkMsQkU4Mjc0RDY2OTJBRjJBNworCis5Wlhqb0Y1NUE5WGdKcGRhV21GL1pMMXNKZmJuRTFNNDJON0hIUkR3cHExL0srYWZDOXBvTTAvQWRDVWJSTDd3Cit1dlFFUmlldmJBWXBOZUxkYWgxRWZ0TTYwMzNlMW9UeFVNaXZkTDRvckRLY2JiM3FEcFNRMG8wVWJqYXZiVCtkCithcnVpbFc4elZQNGR6M21ZTXZHYmtnb3VqZ3pkVCs0d00wVDFtVFR1WWNSS1FzSGxnN1FEeTJRckJJTE51WEE0CitIbXllNEdsU1hWVVNPTjh2UFhUMTJWNG9ldWJFSVpWbG5rTFRSRkdSVkE0cXo1dGJ5OUdCeW1rZU5DQnUrTEN3CitKd0pMVGJRd01GcW96SHZpb3EvMllCYUhEY3lTcFRENFg1QXdyQ2ppZlVOTzlCbkxXTEFtdDhkT1dyMHorNDhFCitQL3lXcjV4WmwzRHJLaDlyOUVHYjl4YlR4aHVtM3lIVjdidlhMb1VIK3Q5Z293bWQ0THEzUWpqZjhqUVhsZTBQCit6b0NPVnh3TjFFMUlNaGxlRVVQVjdMOG1idDI2YjBKeXZyU1M1QnlyWGFoR3U5dkdReXk3cXF4OVpBTmt6Z1hGCiszaFBNRHV6UVhNSmlVZUc5MlZzTUVkR2RBMS84VjVybytjZUI1YzdaY2E1TWpNenZ4MnRpaGRhN0JVamo2ZFNFCitjQThWdmtzeS9OWC9ucUhTdDBhU2dwaHZCbVpQOGRONkdNY1oraFQ3cDBmaENxNG1TRkV5a1FxdWVLWGlGVWZ6CisweENVVlpDNld6T29Fa2M4azd4aUxXUURsc1paMTNaNHl4VTFJeEpwN2xsWlhwWjhHa3dTKzY3OC9OeDhoNTRBCittdjVabFNGV1dRcnZONUpQUUprYTdhVTJJVHUxTFVLNm1YQnUrRG9TRE9mUXVxUjR2UXl0a2pPcUhLMTg1aUhzCitKUXRCR2tGRmRFbGtXZ3ViUFgvUzgveHhvVDhNb1FZL2MrZHI2aXdjc3d5VW5TSlhoMzJLTFBHTkJvcVdDQ2JZCitqcC9WWW1lYjExN2dOcEVKS0poY05iclA3RG9RckMzL0Q3SkZYbk92VEEvejZGT3RVbXowclE9PQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUuYWVzMTI4IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS5hZXMxMjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3NDQzZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUuYWVzMTI4CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK1Byb2MtVHlwZTogNCxFTkNSWVBURUQKK0RFSy1JbmZvOiBBRVMtMTI4LUNCQyxCNUZBM0Y3MEMyQUY3OUVCOUQzREQyQzQwRTdBRTYxQQorCitpeWZPdnZ5VFBQUjdvbjRYUEZ4dTZDb0NnVHFoODhST2xzbE0rUkxKaHdNL3FHZXhiZ0RPemVJMkNQZjRYZnpJCit0eWV2S0QvcHFDYUNNZXNZSmgvSERRQ0lMZFcydEdid3pQYWpnNzJ4a2ZDRDYrMU5IT0dvRGJkUU44YWhHVm1nCitmbEFZVTBpWERNdnFzL2pudWNNN25sVEdwOElzdG43K3pkOUFSeXJrUXkrSThudk1oM2NoR0tXengvWHRKUit6CitJdjhwK24vbytmQ0h6R3Z0aitMV1llVWM0ZDBPVElqbkY2UVBUdFBPZXhYMjh6MGdYUk9EVC9pbmRnaWZOWHYzCitqNDVLTzJOWU9hVlRhQ3VpV0lIajd3V0Jva29MNGJDTUZjRlRKYmRKeDVCZ2ZMbURrVEVtQi82REVYdTZVT3NRCiszbFB6eUpoSVJ4bjdoTnEySTQ3VHpTQUZ2bWNYd204NHR4cHh0U3dIVGNsOUxnc3lJaUVNbUh2M2xQUEUxRzk0CitGNVZyQ3p6Rkh5VTduRlJkVUMwbXFMckNIY2pEbjVPNFNRV2ZIN0ovN0c0T0FyVTZsQTRaMk5DMDNJUHhFbXNRCis2NkZ1OEdkTWJtdEZPUmRsWlF0T2pMaTN6WndOOStOd2hpVXJOTmRWdkdOSklqSWNaNEZaUlp5c2J0NysraGZRCisvSk9BS2hWTkM4ZE5ST0pVbGVFWUlpcXgyM2U1bHplNndxY0lvc3ppcTN0YjYvU1E2Zkg1MzNEOCtQcGNaS3NDCitJbFdLQVF6c05WK25KdnQ3Q0kxcHBXYzZDdFY3VEtuMHNjWm0yb09DNDMzOWdkUjV4enhYZTlFSkRzTUJwY2c5CitkcklkQnIrM1V4ZUM2TGMvcldNN0lqU1EyWVVMQnJhM3RvRUY2VVlldm5nWGRVRDJZYWZycG9ZNXJLOUlIOTBHCitIamJmNjVJYUhMVFMwakE3bEF2SnNRRUJ1VUxRUW9XRU5PamhwOHYrVWZrTk0yY2N5T3VVazN4WkpOZVgxOVlQCisxWjA5VU1FS2JmNnVjb1JDYzAxU0JsMjA2T0FzcTFOWkVhb2RzelQrbURnOTkwSS85QUNWaTNMRVU2WEI1WlZzCistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS5hZXMxOTIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlmaWxlLmFlczE5MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjcwMmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS5hZXMxOTIKQEAgLTAsMCArMSwxOCBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRAorREVLLUluZm86IEFFUy0xOTItQ0JDLDcyRjg2OUY0MUI5ODlENzE3MzBCMjk4MzQ0ODI1MUI4CisKK1I2U1Q2SDlvVXlGV0JhdlVPKythemJuOWdhODdsZ2V1cU5NVlZTY09jWGpndXFRWmRudVpxOUF6d1FRRVRFdisKK1piVlBMOXcyaXN1WEtvYXZhUHhZeUNYYlorbDZKUmZXaVhpNkNtbmZOaHg0TWdZcGJIOUJFcUdiSVZ4QTNmdnUKK3pGdXRxaStSdTZRZUVSc2hETmtlNkhmRmpKOTFXa0JqTmpyWGNmRG10MHVSR3FGU1dkNURTRW5peWFQbXhDWXMKK21wUndyOVhFU0ZpQmtDSEwrL2lTa1cwRVpCandIVzAvL1JOc1pLdHVxVkpHVy9kWmhEeGVyT0dSbDBhMW9Xa2IKK0l2ZkVEN2FmclhNbHBIb2tNd3RVZHVrMlRCRTFBb2N6WjZEdjdSWkdpcGFCUjR5YjlrWWdJa2lxRms1M2xnNWgKKzdiM1dRdDZUWUVDSTdYM1EyckRnUFF0VUNoVnVkMHVVUVltUTUzMjhIUkU4emhsV3hIR21UUU1XVkJXNlgrRk0KK2lrRkxSVWVZQmVxMFVKdTIwRG12a2xaVjZpRHhzVUxMdStSYjBiOE5rVCtWMmZlU1hiclA5NzZvQ1NVem52VDYKKzNlMkVPSCtLQXFNeTVKWmhUc2pNN0h0a2xlTXdZUTl2K1duYm5uMU9zQjlkcllXVUp1aFFlWHQ2djhka20vZUQKKzltNmRaeml2Yy9oMVVUaEl1dVpQbys2UzdGb2x1SWx0NXV2MlVjbllZZFlPZ0tTZDFWbTB3enRHYUpuM0NTR3cKK0pFYmVidWNyKzVwdE9IeGZsVjVUeGduZmo2M3NKeVZkL3d5MFQ4c01STzJ6bms1dVZMV3hmODU1Zk5YZXY5TTMKK2dBMytNWEMyZUdhUjlEWU94ZmFrRlJ3TCtaMzBSbElrdGFxREs3NkJaUkQ0c1dCNmRJVnc1SmRDWHBOTUN1REgKK2R4bFRLY1A1OXVQQUVCMlZ5aER2bTVDTjNUK2JNMks2V0RaRk85NWhLS2ZFazVlYS9VQjdEQTJ1Y2ZvdmRheUUKK0hkNDZFVUtDNC9jZFVGaVN5Y2dEMDF6dGRkYTdoVTdoRnZPa0hUSzdPM0cxeXZFd0gwK2p4S05zdWROZmJieGMKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlmaWxlLmFlczI1NiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUuYWVzMjU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZjA5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlmaWxlLmFlczI1NgpAQCAtMCwwICsxLDE4IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitQcm9jLVR5cGU6IDQsRU5DUllQVEVECitERUstSW5mbzogQUVTLTI1Ni1DQkMsNTM1NzJFRUVFNzk0OTQ4QUM0OENCMEUwNzdDRTA3NUEKKworcDBZb2JwUW16SGIzTmdHbG9qcFlvSCtHNWYxWFg5c25ZdjJHUWUydEdUQlFwb0hoK2l2SGNPdDg1RVp1OXBDMQorMUtSZEFMRXdwN0NiNFJZZVFuY1Y5QmZwNXJJdHVwUzFUd2ZnS0FscDdQbG1iNHZEY0RWdytLTDNQYVluNTJCZAorcXE1VVNMeEN2S2NsOTFoWlh6aXR0dEgwNzJsRWoyTXpXMlFwWDIvMWhDUlBnTUR1OVBKbEJYMlMrR09hWVArOQorc1RXVENjMXl2SE1XNFhHRU00UDR5ZlJnOUVPVHhVNWdJWVdVRTJKcW1FR2QrOUkwaEsyWWV2QVBMTktIeHpweQora2xDQ0JZcURwbGNWVDV6RXlDbWRpQkhJanpvZGxGdW9jWkM4bmNpblZuc3VKdnBUZU1RK3pPWjVyYW84eG0yagordUNublZSaDd5Wmt0ZnNmNUIvWktCTUd5UFlSeUtONENDWWhGMEd6YmVoVHZCaXJnREVMcTRMSHlEZG5uT1R3VQorWUppcW8xN3g2UzRGVk5xNkF1YkFEVkFiQ09NRnlmcitURnNoSThzcE93cWZHRkZEczgvV1dMNU9uQlM4NVBkMQorZGdvcXd6SkF0NTVHeURVYkducDZoVUZsOWc5Nm52VjNzRTZYZTR4VkUyQ3BmMUJ0VWw5RHQzVXJyRHJiUzBkaworcEt4bDJGQTJIMEJWS3RmTkJIWHZXa09SaSt2K1habDM0clpaMzdCOHNuWUlOMmFPcUx1dnlNNGZkMUVhYmt5RworeW1NRVVISmNyYzV6bC83SUVDYUhyQ2FocVpJc0xwTGhHVGQwTU1HcmtHU3ZSTGlZNW5RNE1ONXRLSTBmVXcwUworNUtJak9BNlpYNW52aDRyWWdRY2dON0s2ZFhOQTJoT2o1MjU2VnYwSFZ3WHNWaFFGbUNHbnVvK2g4WHh1ZFJWSAorUnVJVWFUVXRsMjlhLzJuUFR6WEI2TU5aZTdXb2w4RWt6dVlFZ3lhaXpLcjduTzBKMXVtZytsajdpcFgvODBKaQorM0FEaTB5TDRGODMxTHNkQWlUWTYwTHUyZTNXQUJsZVpzdnVMTVdTb2RiOVd6SlhrbnNuRkVETEdPTStIR2o4UQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUuZGVzIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS5kZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzMjMwNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUuZGVzCkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK1Byb2MtVHlwZTogNCxFTkNSWVBURUQKK0RFSy1JbmZvOiBERVMtQ0JDLEY4N0ZFMUMwRkI5QjNFNzcKKworMU5iT3lSeDVrQldlWHk5M2VDWHlpZERwUjNwYmZnR1dJSWdYVkNWRTQvWlhnRXQxNEEyM1luZFplSTVPU3h2RworSldocVorVnVpUnN4ZUtBam8reGY0Ym5LTEFydmJzaGh6VUtDRVZzQ1AxZDJkMXhmZ2pzbnlyOHRxTmlKRTBGNgorN05pbWpjcnB3L3VkQ2syUkJWeXNoTjlraVBCYm5BK1hVZE9IZkVuYmRrcURzUzVER2pxN0gxa0JadUhoVFFhOAorWHY2dGEza2JJMUJHaXFLRGhIMkg5aUpsWk13cFZRdUpzK0hxY3FORWhzUG0wVjRrcDBTM1BaTWJZVktwRXRETwordmg5Q0hwclF5L25sSGZxN1pBczkvMkhONC9PVC81a3c0Sk05cVF5N2VvLzZGWDJ5aDM5THl6OHU3UFhMYVZnTQorcHdPaUZiK3p2ZWdZdHM1YUNYeU0xbkJVdTlORlBEUU5EeXRqWE9oYldMMGhFcjFSemdLNjdmNVFZSXhXZ0dDSworU3Q0bW9JbjdKNUJpZlZpTmRwN2ovUlhDb0NtZGEzWnY1UGlSdzgzeVNjU2x6Z0RkVE5wbS83MGpwOHBHU3hFbgorSWI3Njh6WUVjWWVlS3lQYXIyMTBOaDlhYnlTUHBrRkZhdWpONGRvNXd1amJvQzBWUHo3M002ZVRlWjZpT1VnUgorY1g5V3drZlJqNkc2VlFmTTZ4QVpkT2tRMmNqNk00WVJ6ZTFSS0xocW8wK2dyZTc2RkxuOEt6Zi9IanJwLzBpeQorMGZsci82QndMeEdWNDl2TVVDZXNKOW9xRS9mcnJ1OVk4OWNPd2JnY0h4S0oyNE96KzY0T1VQeWVTeERNRWxaOAorbFhpTmszYUJFdUxkQk9LSjhCOWt5S3V4TnF3RG9xaENzcmM3N0dqaW8rcTI0dytHMitLQXpCRXVwNFM5Y1lncAorRmlTdks4c2l6S0lOZkUxNGY5SEE2ME1KSnp5RWpUVXVMNytpb0w3eEhHdElrZFdicy9RcDdLeGxpSDZxb0lVdgorVlVzVDZWUzFuV0xEeVR5TWJjak14MW9kUnNXckx3THFJc3ZOSWNHR3dlK1A0c200TGl2Tm5RPT0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9tcGlfMTAgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9tcGlfMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1ZTBkMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL21waV8xMApAQCAtMCwwICsxIEBACitsYWJlbF8xMjM0NTY3ODkwPTY0MzgwODAwNjgwMzU1NDQzOTIzMDEyOTg1NDk2MTQ5MjY5OTE1MTM4NjEwNzUzNDAxMzQzMjkxODA3MzQzOTUyNDEzODI2NDg0MjM3MDYzMDA2MTM2OTcxNTM5NDczOTEzNDA5MDkyMjkzNzMzMjU5MDM4NDcyMDM5NzEzMzMzNTk2OTU0OTI1NjMyMjYyMDk3OTAzNjY4NjYzMzIxMzkwMzk1Mjk2NjE3NTEwNzA5Njc2OTE4MDAxNzY0NjE2MTg1MTU3MzE0NzU5NjM5MDE1MwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvbXBpX3Rvb19iaWcgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9tcGlfdG9vX2JpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTYyMzUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvbXBpX3Rvb19iaWcKQEAgLTAsMCArMSBAQAorbGFiZWxfMTIzNDU2Nzg5MD0xMDkwNzQ4MTM1NjE5NDE1OTI5NDYyOTg0MjQ0NzMzNzgyODYyNDQ4MjY0MTYxOTk2MjMyNjkyNDMxODMyNzg2MTg5NzIxMzMxODQ5MTE5Mjk1MjE2MjY0MjM0NTI1MjAxOTg3MjIzOTU3MjkxNzk2MTU3MDI1MjczMTA5ODcwODIwMTc3MTg0MDYzNjEwOTc5NzY1MDc3NTU0Nzk5MDc4OTA2Mjk4ODQyMTkyOTg5NTM4NjA5ODI1MjI4MDQ4MjA1MTU5Njk2ODUxNjEzNTkxNjM4MTk2NzcxODg2NTQyNjA5MzI0NTYwMTIxMjkwNTUzOTAxODg2MzAxMDE3OTAwMjUyNTM1Nzk5OTE3MjAwMDEwMDc5NjAwMDI2NTM1ODM2ODAwOTA1Mjk3ODA1ODgwOTUyMzUwNTAxNjMwMTk1NDc1NjUzOTExMDA1MzEyMzY0NTYwMDE0ODQ3NDI2MDM1MjkzNTUxMjQ1ODQzOTI4OTE4NzUyNzY4Njk2Mjc5MzQ0MDg4MDU1NjE3NTE1Njk0MzQ5OTQ1NDA2Njc3ODI1MTQwODE0OTAwNjE2MTA1OTIwMjU2NDM4NTA0NTc4MDEzMzI2NDkzNTY1ODM2MDQ3MjQyNDA3MzgyNDQyODEyMjQ1MTMxNTE3NzU3NTE5MTY0ODk5MjI2MzY1NzQzNzIyNDMyMjc3MzY4MDc1MDI3NjI3ODgzMDQ1MjA2NTAxNzkyNzYxNzAwOTQ1Njk5MTY4NDk3MjU3ODc5NjgzODUxNzM3MDQ5OTk2OTAwOTYxMTIwNTE1NjU1MDUwMTE1NTYxMjcxNDkxNDkyNTE1MzQyMTA1NzQ4OTY2NjI5NTQ3MDMyNzg2MzIxNTA1NzMwODI4NDMwMjIxNjY0OTcwMzI0Mzk2MTM4NjM1MjUxNjI2NDA5NTE2MTY4MDA1NDI3NjIzNDM1OTk2MzA4OTIxNjkxNDQ2MTgxMTg3NDA2Mzk1MzEwNjY1NDA0ODg1NzM5NDM0ODMyODc3NDI4MTY3NDA3NDk1MzcwOTkzNTExODY4NzU2MzU5OTcwMzkwMTE3MDIxODIzNjE2NzQ5NDU4NjIwOTY5ODU3MDA2MjYzNjEyMDgyNzA2NzE1NDA4MTU3MDY2NTc1MTM3MjgxMDI3MDIyMzEwOTI3NTY0OTEwMjc2NzU5MTYwNTIwODc4MzA0NjMyNDExMDQ5MzY0NTY4NzU0OTIwOTY3MzIyOTgyNDU5MTg0NzYzNDI3MzgzNzkwMjcyNDQ4NDM4MDE4NTI2OTc3NzY0OTQxMDcyNzE1NjExNTgwNDM0NjkwODI3NDU5MzM5OTkxOTYxNDE0MjQyNzQxNDEwNTk5MTE3NDI2MDYwNTU2NDgzNzYzNzU2MzE0NTI3NjExMzYyNjU4NjI4MzgzMzY4NjIxMTU3OTkzNjM4MDIwODc4NTM3Njc1NTQ1MzM2Nzg5OTE1Njk0MjM0NDMzOTU1NjY2MzE1MDcwMDg3MjEzNTM1NDcwMjU1NjcwMzEyMDA0MTMwNzI1NDk1ODM0NTA4MzU3NDM5NjUzODI4OTM2MDc3MDgwOTc4NTUwNTc4OTEyOTY3OTA3MzUyNzgwMDU0OTM1NjIxNTYxMDkwNzk1ODQ1MTcyOTU0MTE1OTcyOTI3NDc5ODc3NTI3NzM4NTYwMDA4MjA0MTE4NTU4OTMwMDA0Nzc3NzQ4NzI3NzYxODUzODEzNTEwNDkzODQwNTgxODYxNTk4NjUyMjExNjA1OTYwMzA4MzU2NDA1OTQxODIxMTg5NzE0MDM3ODY4NzI2MjE5NDgxNDk4NzI3NjAzNjUzNjE2Mjk4ODU2MTc0ODIyNDEzMDMzNDg1NDM4Nzg1MzI0MDI0NzUxNDE5NDE3MTgzMDEyMjgxMDc4MjA5NzI5MzAzNTM3MzcyODA0NTc0MzcyMDk1MjI4NzAzNjIyNzc2MzYzOTQ1MjkwODY5ODA2MjU4NDIyMzU1MTQ4NTA3NTcxMDM5NjE5Mzg3NDQ5NjI5ODY2ODA4MTg4NzY5NjYyODE1Nzc4MTUzMDc5MzkzMTc5MDkzMTQzNjQ4MzQwNzYxNzM4NTgxODE5NTYzMDAyOTk0NDIyNzkwNzU0OTU1MDYxMjg4ODE4MzA4NDMwMDc5NjQ4NjkzMjMyMTc5MTU4NzY1OTE4MDM1NTY1MjE2MTU3MTE1NDAyOTkyMTIwMjc2MTU1NjA3ODczMTA3OTM3NDc3NDY2ODQxNTI4MzYyOTg3NzA4Njk5NDUwMTUyMDMxMjMxODYyNTk0MjAzMDg1NjkzODM4OTQ0NjU3MDYxMzQ2MjM2NzA0MjM0MDI2ODIxMTAyOTU4OTU0OTUxMTk3MDg3MDc2NTQ2MTg2NjIyNzk2Mjk0NTM2NDUxNjIwNzU2NTA5MzUxMDE4OTA2MDIzNzczODIxNTM5NTMyNzc2MjA4Njc2OTc4NTg5NzMxOTY2MzMwMzA4ODkzMzA0NjY1MTY5NDM2MTg1MDc4MzUwNjQxNTY4MzM2OTQ0NTMwMDUxNDM3NDkxMzExMjk4ODM0MzY3MjY1MjM4NTk1NDA0OTA0MjczNDU1OTI4NzIzOTQ5NTI1MjI3MTg0NjE3NDA0MzY3ODU0NzU0NjEwNDc0Mzc3MDE5NzY4MDI1NTc2NjA1ODgxMDM4MDc3MjcwNzA3NzE3OTQyMjIxOTc3MDkwMzg1NDM4NTg1ODQ0MDk1NDkyMTE2MDk5ODUyNTM4OTAzOTc0NjU1NzAzOTQzOTczMDg2MDkwOTMwNTk2OTYzMzYwNzY3NTI5OTY0OTM4NDE0NTk4MTg1NzA1OTYzNzU0NTYxNDk3MzU1ODI3ODEzNjIzODMzMjg4OTA2MzA5MDA0Mjg4MDE3MzIxNDI0ODA4NjYzOTYyNjcxMzMzNTI4MDA5MjMyNzU4MzUwODczMDU5NjE0MTE4NzIzNzgxNDIyMTAxNDYwMTk4NjE1NzQ3Mzg2ODU1MDk2ODk2MDg5MTg5MTgwNDQxMzM5NTU4NTI0ODIyODY3NTQxMTEzMjEyNjM4NzkzNjc1NTY3NjUwMzQwMzYyOTcwMDMxOTMwMDIzMzk3ODI4NDY1MzE4NTQ3MjM4MjQ0MjMyMDI4MDE1MTg5Njg5NjYwNDE4ODIyOTc2MDAwODE1NDM3NjEwNjUyMjU0MjcwMTYzNTk1NjUwODc1NDMzODUxMTQ3MTIzMjE0MjI3MjY2NjA1NDAzNTgxNzgxNDY5MDkwODA2NTc2NDY4OTUwNTg3NjYxOTk3MTg2NTA1NjY1NDc1NzE1NzkyODk2CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wYXNzd2QucHNrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGFzc3dkLnBzawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ZlZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGFzc3dkLnBzawpAQCAtMCwwICsxIEBACitDbGllbnRfaWRlbnRpdHk6NjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExXzJkZXMua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfMmRlcy5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlN2FlYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExXzJkZXMua2V5CkBAIC0wLDAgKzEsMjkgQEAKKy0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KK01JSUU2akFjQmdvcWhraUc5dzBCREFFRU1BNEVDSlVPK2pKblRqcEtBZ0lJQUFTQ0JNaTlRRkZMZ0tHWU9TRFIKKzB6eVJNYzg3UmtydlNseVJpOEJpYnlLdlRORURxNzdqVHI2WkV1T0YxT2VaOWZ2ZFp3SmVJNEdrVGVLa1dxVHcKK1hEaldBVFhIYmdUWDgySTNUOFIyaUJudjZaYTl1YUZEdERINWdiVVlTclNOek1hb3lTOTBoYzlQVEoyK1RHL1kKK3hVZTk5a1N2emJoQWF0VlFFKzBUV3BnSCs4b0FDUnZHZWxuSFdvZnc0L0NLSlhKY3RVTzhsNkxkaExodDFrd2QKK1lYTlgweGp4cFkvZUxHbHNVYWlEQmRiMEQ5V0ZqZGk0ZmNaNDZJSHNwcVRmQlVoWWJwRGo4SVFUMXZqSDZ5am0KK2NQTlBzdEVleWZGbmlydmdGdUhnOUxYVEgwY2YwbUpnTHpnaWNsZ1JWRU9lbDg3TGVpNWljRUZJNGhEQXpXbmEKK3MzWWlUaWpjOTI2bUQ1QXFRNTVRWFBOOXY2Yi91QVYxUXlLZW5vWXpJV0MzWTRwaFRUZUFwQ3lWNDRmOW9NTUQKK3d6Y1lXTVpvSHpFSWlaai9paUNGMXVPU2FtSWp1bkNtcGlCWFRJN09HWGJ4WHZTU0ozYVU5bkpIcVZUODgva2UKK25qLy9FeldWWUFqTWROWWwwYk9zV29JT05sM2VFRW5MYVVyT1lPVFZNeEdhYzZ5eS9vSUtSN0dQMFIyNk40VjIKK2M0MzR5MGFRcG42b3BUK0pZYTgzTjFSd0VTMi9OeHdySHM0cGN4MldTaGJUamcxQ3cxWE1IazhuUVlObk00b0oKK2tYV3lucy9rMUJheS9TWGdwbDJOUnNvV3p4Q1I3QmF2QjJtUmN5TXozZGpiT1lzY3VUNFF3cEIvV2Y2a3I2cE4KK2dzemVnUnR3TG1WQmVod3ZHSndMMlNFeDJDREh2Sk5odm9EN3ZiTmlXZVRGbzF3VzF3RjRhRTdwL0VlN2dTUlgKK3oxNE9DOE5TYnVZVjY2MG50TlE5TEIrWjdORFQyZDZKVGpTbmhRSHh4TEJ3eTNPbk0yL3Z1MGVDZC81K01Hak4KK0M0c3ZnRnNBSDlxblQxVlFUem1wd0dCSkFiRDI5Q1Z2VVVlQkYzK3VwK01yK0lRVTlPV1dFdFVaMkZtMjlnczQKK2o0YXpZSlVJNCtSTHc3NXlOTFZneFM1cjRDYzRjS0dCL1A3cVZxZEgyQ21qckVrMGp4eVRGVC9QRTNEZjFjejkKK0Y4ZUVwcmRtbDJrdHJsUTNnQ0Q5Zncwa1hCc3A1dndlY3BRRFMzcjJ2OTgwdm5NeGI1Q203a01UTUZiNC9oTVkKK3oxeWFEa2Fya1NIUWszcUZZdE81RGtFVVhoRjZmd0FUeXFPZ0pZd2N5Lzl5bnpJdHFnYnNDSVlNanBYRjdZd3cKK0ZOYS9HUWxxSWJZUkNkNEtUNjRBaHVzN0kwMHZWUzNiM2dsY0MrS2xEa3dDSkowTStnbHpIckpzM0wrUGlKTWkKK2dtK1lULzVGdVNxSlovSkk1UVA3Vk1vdnFTTEV3Nnk2UVFIU0JDT3hoL0NHaEFML0JaOUE5YWZ2UFRSaUk5T0YKK2Z5eEFhZjhLSDFZUEkzdUtJdURjbXMwZDBnSnFRb0RtTGFmZGZnZ2Q2ZHd1TEYzaVFwRE9SZ3g4MG9QYmpmbDEKK0ZFYlU4TTVEcWlIK2VPeGdFdklMMEFoTW5QYTRtdjFiclZkbHhTM0N5b2pucXhQZmVjWHlFWHJoRVlKV0pkc0YKK2FZS1I1YlUxYlk5OTBhTjZUM0VEUmJsbUhzMjVGYzMyOHhTMlpKa0hOeGNKRHJ1d2k0RUZwUVZUK2Z1a096MDAKK2hPVzJCRU1GSkxSZmxFKzM3MkxOSWdTUlZOSTUzNlloRjhyNHI3TzFqcnc5TWNYM2h6YkpHQXRjc1hxeUlPL2sKK2h4QzN4NVZpcWdaYkRZZ0h6L0NKSmZQMlJDOHNwcDJSYlovdURKdTJZSTh6OHM5T1h2Y1l2MEVRbUJBSnhkdC8KK2x5Zmt6RXIvbjhvUnRESWtycTdsUjNyak1VejdBYkNmTkpwcXJFQkZvbDkrcUg4K2pubW93TDhMV0JsaDB2L0EKK3BjM3FXSXVsWE9SMXBid1h5QUVMbzh3R2huSldMNFdtWTI1MlMzaTBKbjhHZjJrWGV3TVJKc2l4U3RhaXJqV0QKKzFtMHdXVVZHU201Q084UmZvbjg9CistLS0tLUVORCBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfM2Rlcy5kZXIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8zZGVzLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmNlMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfM2Rlcy5kZXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfM2Rlcy5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8zZGVzLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWMxMWFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfM2Rlcy5rZXkKQEAgLTAsMCArMSwyOSBAQAorLS0tLS1CRUdJTiBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLQorTUlJRTZqQWNCZ29xaGtpRzl3MEJEQUVETUE0RUNHaE51UW9naWt0ckFnSUlBQVNDQk1oZmNiK0p0MFlPZ0duaQorSVdud21tdFlUNk52aW5hL2ozRkNHemNIQ0R5VVFEcWgxclBVdFpubVVkTTNmeUVHbFVKZFg5d21IaDNnVWtXeAorSkUwMFFNellEUXNVYkdydDhIM3JDUSthWGVnQ2ljWEF5QmdEaDBZVWhPN2JXbWdKTlN2Wk9kdUllQ0o4MW1uYgoreHRsM0NHZ2FZVk9Xc3ByNDU4Y3J0dm4xSGxocTBFR3M1NEVVSFdCRTg5UEhOeG9rR0hxa0ZRY2RwN1FITzlabQorWnZqVG4ra1IwSzVLUWJlUXdNZjNMY2JvdWVEVjcxdWVVWnNIbFRTWjVRczdXWk9SUnpNQm9vMlNXVitNaDdVLworeUFRdjRpNkNNYXVWaWZWcVRNYkx0ZmRUeVpDdHMzTjU3c0dzdHlxSXJ1RTFKd2c4bTNpK2NWL1FJaDlGY2dvOAorUitzblNsYk9aTXpDcFVJdmN1VmtFTUJQOCs4OS9CdElhYlhMOFNvVHNENnYvZi9ZSmZjdzlxcE9IK0FvQTNKRworVVpUKzBWeGZJazBKVWtYOFF2TTJxTVFZWTllZlgrRHErTjBPRFMxdnNkUDQzcEt4b3dPUWxRVVBLT3Nxb0RjaAorSVhXOXFERDN1VitjbGc1TDZCcURiWDFPOThvZWdjZzZMMjRaSzF5S1Z6b3RpVGovZWFaVnB6VHRyTll6V0IwKworcU85RlR3THFPbUlSY2R1S0t1NXpjdEM3UWxwRlkzVTJpa2JrWXBQc2FtLzlHU1hWZTBMdU1STGxlaU1QUVVkVQorWkpsa1pyMjIxT0dxNVRWaHlKNnpFd3VkMjZ3RXhCMTZ0TFUyNlp2RUZ3RXhvVVBib0gvVVF3WDhMOXZkOEJLcAorYTMydTM1bjVNT24rNTRSZmE0cWZwVSt1TEIwNTZDQ0tMOFB3VkxOOVh6ZWcrZ0pMZldxd0VhbFBtU3N5bGFrTworNytzdU9HYVVLeTFhL3VzekQ5N2RLazNBYndmb3liMHF2YmRGMTMxR1IwNE5ZSXprUWw3MkNCbHh1V3FWVXQ5bworcG13c1VEQXp3b0pXaTBzS3kwZFRtM0taSExKKzNPTUl5ZG9kM2JlUzl1UzZZcm82TkpCTjVFUHczUG9CeUJGNQorRFVrT2ZXNnRWMGRsSHlYT3V3VStKekJkNGl3SmdPNTNHVlBBYXA4YS9lT0dnTkNpdzcyZ1lNNGxjSG53U2hMMAorL3Y5NjlWcW50UFhiN1lGMWhNczZlZjN6VG1MRUI0eGFYY0FSeW5uTmtabnBRcHB4U1BlSGVYVStLeFpDamtMRQorYnJ6SEZuVU1yOFVKT3lyYTNDL2lYZmkvT0tKY0JJVVJjM29ZMjlRNDVHQmNWMHMvVzNuOFRWRjRxRXF0YnYzYworTmJFbWdjZHpMR0EyOFhpdXlVSCtwTHhLM3FQNTRqbHFoZDIycTVxb04vZ3o0TUtHK2hKTU1jTzAwSGo3KzRGYgorZm54eEdFNWZhcjN6akhMYXhmblJLSWZzZVU5RHJRVmg2Z1RnOGliZTBrZG9VWHJwdEliNTFlUmN1a0U3cy95YworMDFQbGF5OEdZaWs0eCtrY05BbVFUMjlFc2xCLzNSY3JXSDN0WkV4SmpqRGFDK1R5MmF0Q01tbExHeHQ3VkhPYQorQzNrMFFIWVNFL1RVTEJsZEI2NFMxdlZGclpnekxGVGxYS0dtMzhtT0dDRzN0L2xRUURUbzNJQXAwWUUrYXRNMworVkc2T04zU1NVMFFSUDFhRWtaWTh0OXJmMysvSjhObDhvRjRrRjlJU3pMTmhsUi9LSmxOa21EdkcvaWMwc2tKSworS1llenV1WUg4L2VFcjlaRmZCc2I5bVJzRkNNOWlCWmwvWHFlYkNDQzUva2ZYekwvSHBwNGYwTDdESDRDMGY2TAorTGJNQ0ZodnNDTkdoKzFwZElqTjloYkFrdi9yMk5OOCtNYVkyeEZrMHVrTGZLZ3BMcDBFZnBra2NNMEVaY3ZGbgorajFKcEI3cnNoQ0xqNFB6TTc3ZkxoOTlINGNmZkwycXl6WHFGRjJZN2lXMjhiVy9SUUZ4WXdweUVub3dyY1JILworMTFRaTUyNVNkS1dSa2I5UWxUSnFGSTZ3c1dlNWttWU8va0RxR1VwR1BHSzgrWFRSVEZqVGNpN05QTHFOK3MwdworWjQvYjVTTVZ1Y0JLcTlzVW02Zz0KKy0tLS0tRU5EIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV9yYzRfMTI4LmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExX3JjNF8xMjgua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NzVlZjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV9yYzRfMTI4LmtleQpAQCAtMCwwICsxLDI5IEBACistLS0tLUJFR0lOIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCitNSUlFNHpBY0Jnb3Foa2lHOXcwQkRBRUJNQTRFQ0NMaHpkd25PWElaQWdJSUFBU0NCTUc4V2dmbisrQ0ZSbDM3CitGZFFaOTBwSSt1Mzd5ajh2MGtGZDNyRGFETXVyRWZ0ZjEwZ1d3VGJtOFI4SjBlSzFlZElBSFFhYmtnc0Y4M2dECit5cnhLRnAxemhISTF0NjVnUEtIY2lyaHgwdDlYdUNseEFPekVtZS8vaU1hdy95Zi9JS1lvOU5ScXl2QTZCS0hXCisyaDNKNCtKU0dMU2FDc1JVeXpob0w2eE96RitWWDh6RThQSTExVGNxZkplN1RHcy85RzBQdjJYeEZwZnJHN3B6CituejVta0FZZGNrWUhjdTcrQ1FHSjA5WlVrYmxWM01ZS0VFYnE1eFhFbzRLa3UvbjFZTnJoNkJFV01MbzVYZ09VCitZSUFremhTZm5iVHQ2UXJ4TSs5MGI0cXdrNWFtckM0dzFqVXU3M1p6YUJRczdmaHgwMXBSMnkzelRQQkQyRHBrCitHM2lMcHJnRUZxc29HQ0NPcXFxRWlFRi94RFJFWkVQVzBlczJScnVROVRuMTRMYmdUajVYVkZJL3dCY3ZwOXVaCitwalM1Y2hDMC9DUmJHY1JpNDdBOXZ4OWJqZ3dpR0NEcHh4MC9LbjY4dUZDYUNlR09BUTY4N1h4QW4xVUhtQkQzCitlc2pqYjdTMTZsZDlyU0tWMG9YV3VnVVpLRmRvcTg3QUhZOE5qaGluKytiaXVBRWZ5U3UzaUg1YWp6WlY5ZEVqCis2SkhWd290dUwyZGlWdTdOVThtSXNmcjFrQ0pvVXhJQWJXRnZvZ2xXTm1UdGFJQmtjNWNoK2tVVHN6OXJEdFNwCitsTDlmVCt3empON1E3bHlSZkloTk9oZWcyeEY5aHV3RjZtcW5TbERmdnd2RUo4TnNRSTkrQ2Vvb0kyYzFaYzBhCitCaC92RHZDem92OFRFKzFNYThDbnJiYU0vYVNaMEZJcTZQY3BXU0JMWFNEWGJMd2FiRUVPTG9YUVhvZ09ac2M1Ciswc3o3MWw1YzhqSlBselh4RllZVzhDTnV4VHNVUCtoTjJvV3ZibUw1WUxxOFArMXR3NjhqY2RicWhUcW9xclcxCitwR0VYZDJpTVJVZkNURHVDTTZCbjRpSU44MHFVcXFCQXVvVEMrekNWSG5JNyt5Z21vdmhmL3lrZlZ6TmFEU0lXCitCa0RzbVpvSDZicTNGOUhwdk9XZ2doMHlLL2wxYjFFNFBEUTZocTdxV055Sk15allCSkViRWRkOU8zR1cycWV2CiszQVJoYjB5R3VseFlIL2gzeXAybUlmeEwrVVRmUk1jVVpEMlNvYkwrcGhMUi85VE1VaTZJYUhuQkFGODVzbkFiCityYnRBS0NwOW15Rkx3RzFCdWphUTE4ZktRRmdjTWpiSlkzZ0xJeiszQUM3MmlyTFNkZ0d0aTJkcmpQMmhER0twCitSSVRBRXlkWlhJd2Y2N0pNS2t2eXVrblZXTWY5cmk5dE1PWkV2b2huVTNiVzRnOXZrdjg5Q1V0Q0xXRjhpZWpNCitmS0lQNWhqSE9jS1JMdnZBQ0ZiZ2pZQ1B0OGlQQ2NRY2tZZStGWkk1VDd6WXN5UVE0N2Z5Z1MxZjdNV1pibFBKCitVS0FtOGp4V1V5eVN2RXpJTUhrb1phSHRDNzJPUy9MM2lDako3bWtLU1pLZUNEQXpTRUplZVFjT2wwa2xWQ1E4CiswUCttWHE1d3RHYWtXOU1LTGhtc09qVUlzeU4yZjNnQ08wbkVTWWhXRCszRUtGTFNXN1pzSGJEbXdxU0RoNmJuCitibEZ2bFFkN2NwZllGdGxtYnhaRmN2L2wyaWpRV1BIaTkzRy8wVkloRkh4STZMZWdLdDAwYklMNWl3eUYzTnBXCitkTnp1RTY5aHdlVFNLdk9QcVJzUm5XeUd2OWRWTElhUVB3VVMrZUVmc0dHTnpNOXJidHkwajVCdzZLWS91RGd0CitibFRmTjN5WkJjeUVzZFB3eWlWTGRpNjV6TXpOOGc0VlZRQkhGaFhXUGEyTjRnSlFWcSs2cTloUWtnRkZVN3kzCitmOE1YNEJyS3E4aWZ3V3hzakwyRmF3Y0FvRGNIVWRDWmp0L0haKzkvckwzaVF2S2VIYkRicXU0a3hsckUxRkpuCiswTEhJQjIxcVpJbys2cjNmZE5NVUZrdURSQlQ5ZUVoM1d4bGc4RzM1RllDSWlPdUl3QjJFRC9IZG5xdG5lbXhqCitralJYVTE3NkhRPT0KKy0tLS0tRU5EIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfM2Rlcy5kZXIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfM2Rlcy5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjNTczNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZXMyX3Bia2RmMl8zZGVzLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfM2Rlcy5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfM2Rlcy5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwM2RhYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZXMyX3Bia2RmMl8zZGVzLmtleQpAQCAtMCwwICsxLDMwIEBACistLS0tLUJFR0lOIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCitNSUlGRGpCQUJna3Foa2lHOXcwQkJRMHdNekFiQmdrcWhraUc5dzBCQlF3d0RnUUk0VzdHMXNWcUhKTUNBZ2dBCitNQlFHQ0NxR1NJYjNEUU1IQkFqWE9RL2tIYjlFVkFTQ0JNZzY4U3dyZEQvRExlS2NQdENrRTM2d0h2cks2d2k3CitDandGdjJVL2dJZk5DVU5YQlpQSTRHN3ZvTDFYT0xKOGgwV1dxbEVyYUhvN3pZV0k1S3k5OFNJNndPcERHRHpvCitVUnZhdk9WVDNSeS9RZkx0dDBHWnZFTG1KYjZxTzJBY0wxcUlEVUx4NHhYcWIzckkyOXhSL3hWYUNrQjhDR1NlCitKeFUrMVRiSkpHMFVkVkRtMjhkaE84SjRxZ0JwajlONk0vZThLMVRJdTh0eTZJa0ZQRnVtVE45ek1WOVZYUklvCitBanIxUkRJaUZYQ1o0YXlFbmphMlJJWndpODlybi9pQy9RemZzcVFGcjVheHc1OHd6KzAvRWZEL2k3OWdLb09YCitqS0JFd1dONDRMc3hKVy91Y3kzcG03eFJ1cndadk9RWkllWmNlY1ZWZWNBYUhtQ1JGZnErVnBTblU1aURaRURMCiswR1UrQ0tYVyt6RG51SWZVYy9seDdMV2pGeXFSMTJPdmlTMkNkcmthVEtTVkJBRVlDRlFkR1BDcDUxV29aTW5FCit1YUtrTHAweTU4ZTVKMG1IeDRrbWsyc2FBYWNkTy9Zb2xIamtoNXpOZTFaK3NPUndQRW80cnVaWS8rd2VtL1RHCitLRlFzVmpIL2pBc3lRRnN5WGFPclE0UXlPd3h3NTJWejZiN3ZyZmZhVGRuS2x5dkpUdmViRWJoTmlObXQyTmkrCit3YWMvMVZjZWRrTXBVck5tcEp5YWw2bHpXclZRbVcxUTlxQmlueEhlR25OSGsyUVdUR1pDUUNDbHhEVGZQb0UxCitIQzg1Y0Q0aDkxZUJWNGZpUW0vTUwvV21hR0FRR1VpVGxYNXZFU0pHMXBLWVhHcXYxY3IxcGorTVRqcWZqQXBsCitLT2o5M3lBdng0c3M0Mm9uV2U5RFBPQm9qU011SXpFVlpPZXE3bXQ3UWVOcE45dW5qc0RWcnZxL2Ztc3ZJQmIwCit0NUhGVlg0Smxab0Yyc2Zyd1AwakVreUh4bGswcFpaYzVyYnd0Vkk2MDFNb2xEempUTkJjWWJVQjBJVWxJajlmCittTTM1SUFGV1p0clhYdjNrNVpSRlFVMmpCN0RGUDl6SFdzYWk3cXVoaGR1dnQ0OThyTnhpV3U3WWxBUWZoYVUvCit3VksrM0ZjYTdBR3JsUThZbXpWMHVPd29UTXZLYkxOd2lpSUc2UXNnV1JobU9Jd0hkTmxSdmhhWmw2eWJSTHR5CitwcE1hcWxPZ0R1ODgvOFNNQ2NlOHlCZGVyWFcvMFF4Q1pqUTNnRUR1ZnF4akMySWVsT2ZFYkNoTUxJczZwKzlCCitxYVB0amkzVHhPc2NRWk1EOWc0allYVWF3SFNxNTVCL01lZ0Q1c2Z2VGwzcWwrcXNRbmxlWERVejJnSitNQmxICitRcDZIWk1zMndvQWJ2Rnl4QVhTVWVLQU9acm5XMVRtUk5tajZTd3RFOWFQbU13U1l4WnRUdWtlc2wrQ3B6RXFpCitCZEJaaWEzWXh1OVo1Njk0Q2cxZVhvUElpcjZ1NnN2WkE1T0lwRUlVRElVUG5NbUc5cGp4UTF4SzQwdnlqZE1aCisrOXVBVmRHWDExOG51d1o2QWw0YmZyUE9PbXdJSTJYMXhtZkZHRzNyYlZIVkQ5ZElHSjFIR1dQWmlvNEYvZWFpCitrZlNZSHIwNDEwSlJBT3ZkOUc0dnJINnJxL3pFNVFjTENtWHlINVc5dkYzUkpEQUs0QXJjYUxGNVJQWThzbEVKCitOY1o3WFRjS1VjL1RnNlZDTW8zYWdvenV6cnhLQ1g1eDZydm4wQ09ZZ2RVM296VE83MmRKbEZRWTJLcEpQMG4yCitSV1dqZGwycjdYWVZSb1FKZDVYYVozL21nSjdGdEw0MlJoNit2akVKTGV6V2dVVG8zQjRaMFdHOFdJcDR3ZkF3CitkNHFiQWE0bFZXdFArK0hadklxT1BhTCtuWmdGUzIyeWd0b0lWeVlEajdsY3FIOWNkTXNhTXJaRkF4aXNWUUsyCit6MkRueXNmTGc0ZGtkRHVKakZVSTA3UVVQd3FqZlJWS0M4TWVjNDVqOXpycHV6dTgyelE4RnViN2xkdEVDc2J5CitvcTBzbUJHMXZkK296TVBucjN5dlU3WDdqYWFNNHRvVytkRzNPUXhuVU8yR3lCL0JBRWFtT0I0Q1dXYktTZnkxCit0Zk09CistLS0tLUVORCBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlczJfcGJrZGYyX2Rlcy5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfZGVzLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2EyZDBjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlczJfcGJrZGYyX2Rlcy5rZXkKQEAgLTAsMCArMSwyOSBAQAorLS0tLS1CRUdJTiBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLQorTUlJRkN6QTlCZ2txaGtpRzl3MEJCUTB3TURBYkJna3Foa2lHOXcwQkJRd3dEZ1FJRStseDV6NzloVkFDQWdnQQorTUJFR0JTc09Bd0lIQkFqcldQMi9TaVI3Y3dTQ0JNZ1Vnbkk0L1pHM2ppZHQ4VFpTaHNiS3p4UTlidDlEMVVSbQorOEZCVEZNazhKUm93YVhaeU0yZngxL3ZFVWx2S0hJd3B5dE9ZTzQycHkwbERmMnFkbjhpSWUrOFYyR0xweUdjTAoraWZXR2JEdC9jdEVvMmpWZ1dUMDFxMlBmVUVpcndUUFRVYURSNUtCamZNakdNNVY1YzU4Zm5UUXp0QUZhWEZtSQorVk5raVFDQzZBS0NibWxibEVjakZHQmxSR2dWOHNPV0NXK0phUjVpSk5kVDZQaFZKekppUXJmUjgxOWZHU0lTagorME4wV3FwajNWQThWOUJlQVRaQWp2b2ZCQ3dSQUJETnNEcVJoamd4N1pFVno4QzZwTks3Q2s2WlhFalhhV2MxMgorWnZrempMdXVmWjVCN2tsdmdMemZ4RXR2WmJRSm1yUWRkRFhaUDlJQ3lrUDZEOFc4N0VxRWdrOHlveGVGaW9PbQorMC9lZGo3QVZaM3J4YnhwVVVISlVpWURMTlhhWlRrc2ZZaEwwWnNCM2NFTDhWb2ZVYTFLKzY2Ti8wVGlzbU5EUgorNEtTSWp1UmF1c1hmMVdKMW9oNUIxOHp2bmwyamt6Q3B3SVNmNThkN1VlT255My9aUjM4QjcxRXVhWE80cjIxZQorQnJHNmZpOVZld3VVZzFESFNZTElKRXJWY2ZOblZYSHVUMEV6UFRqcjB2ZFRVZ3V6RFV2NC9ZRmNwRURrNWpuUQoreEpzaEJlZ2pidDVXNWdZM0dUVlJseVdxR0t5T3NrYTNlMnU0Q2Y3dFp0UDBreXkzOEpITGtRUVhnajZkeHNlVAorbENJaXBCREpYM2dVN3lKSE1pWC9PcExjSnVFTWFrUnJwV0xyQjB2ZXpYOW9XMHdlRS9kRnpaZWlZeW8ySy9ESQorVElGaUw2RkR1TFVxcGNZamVCMU0rd2JxczBmNW5kWFRoVllpMi9qNzN6MGR3Q0kxV3dLWkgvV09kVHJqWUt4aQorMG9pTHo3cEhIYVBvTVJ5bVdDS1R3UWhZbnFpT1haSXBmZU9GY1VZNEpLRHpneUtkdlU3WExQbmJ0NHl4T2xKRAoreUF6WDBpK2JKallqdUc0NVhIVFM4dG9vMEdGRzJoNlZGdk9ZQVFzaXExcU9ueFZxVlV2WXBoWkJTejdEOFZxbAorbEhYV3A5NTRBaHBmVVFLNG1MSnEvZXhqVUlHSVpiL1F4Yk5XTnY3bVRNa0JReEdKNkIvMVZqa3Y5S0MwNEtMZQorL0pNbkVaRCtTdzVuKzVqOHFTNmY3WU9mVkorSHFtMDRNMVM4Y2M3SkQ0cU11ZkxXL1J2dUt5QkxiM3NDbjBVZQorRCt1aVRlZHhvSlI4bm02eUkwdVo0ZDlScFJyZWNhMFBQdDBvK0RoYnJEV3lxSDE5a2FmTjdJNlNyRFNiQk5VTword2lHQmJnTjRVcjlyUGJ6YXBBVEEvWDk1eStRM0NGTGUvd2NNTGNMSEozdG5SQ1VvMTdGeCtBUG1yQXN5QmlZZAorOXVsVXE1V2NaYXczcEVEcFRxTiswODMyVU95akl3cEx5VkRMVTVqZ1cwNHZiVzQxbzJTVzdmQ2E3L1F4VDk0cAorNFBFQVlpMk1sdFBZUUtSTzdFT2graVVPSEVzYzhVRGI2eDRpNzVCY0todUx3WjdubXJ3emc4Wk8rVFdNdXpZYgorTWNKMTFhWjQyaE45VTVINjVGUXphWmhBQWNPcXhUZmZRWElkQVJHbGZ2cjNsVFJuTy9SUWJ4eU9iRXFHZU1IUAorWGxEenZJTWRCNmIwUkc0RUJmcERGVXBXZjNNaHg0QUczYkdIUGpVWFhoTklDQ01EZEk0OWQwbE5KM25rRjBudgorSnNlaG1JT1kyVTZmUUJFblpobjVEMHJqVStuVWxIdmdLUUtoczl5SXltL0srS1ZVem5KVzR5Z3dGaUtYeXNWcQorUUdxZm43aGJCb25ZcUxrR0w5OU85SnlLZ3ovUmhFTUMwZEt0Z3U2RUxZSkpWV25rSkdUSU1rcDVhOElENDhxVworUm1GSlgrdjVyeXZNOWVQU1ViTGl6T1VkZHNYeWNKcEdzdStBbTVIMjBjVFBYa3d4WXROY3U0OWVMckdvWGY3RQorL21EL3pEcUZyeU1LM29VQkhuQkpmMGsvbU1uendmZ0hOdmVYQXBPU2JmbHZSeDM5NjUyV3VnZDdDeGNPcklBPQorLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3JzYTQwOTZfcHJ2LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3JzYTQwOTZfcHJ2LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjc0YWEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcnNhNDA5Nl9wcnYucGVtCkBAIC0wLDAgKzEsNTEgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUpLUUlCQUFLQ0FnRUE1RjJtcUVzZG50UEFFaWo2SGZDWW5LaUxNR25tNlBjZnNhRlllRllPMUV1Zk9qTjUKK1pKUDkwY3IzQ3JDbk45Sk9BZHBCYlRwekEwUmNJY0FkV0J6dk5OQXRJTXZTZmkyMldKWVZqekQwQnZzMnJDWUgKKzc2WWM2dmZ4N3k5elhaY2FuaDhTLzJ0N0I2NHhteE9XTDRSRStmOEhXVGlqQVdseVVGRGsrRHVKV3BRSzJvMGIKK2hFNFM4bVgrdVVsM2FmTlc1Q2lQc1JreTFOMXY0YTcvSjJiN2NHKzdwRFdVY2pudm1OQ044NHYrZ1N1Y1hmS2cKKy9MaUFuWmdZN3hpaDJlUEVoa2tJcW42a1UwY1ZCUWoxY1o3aFhHUmFaL01ucVoyeStLaml1Rm90MnNhTmsvdjAKK3ZqalcreE94NzZxSlY5OUx0Ti8xcXZDWW5PMVJxTXYyRU04V2hFckxjZ2lScmloemF6M2EyR2F1bUwzMENjTmkKK3hyRVhSeUVqRmFPL2tscWtwdVpSSFR0eVVua3ZoVWtQVUh1SG40NVhQeFo3YTJYUnlyU2JGeXlTMGFtVGpRd1EKK0N2ZVNSaUpGaks1VFo1NkNWR0tGL0RtdUxTSGVUWTN2d2krV1hWZEtNWVE2Wmk5andGSm8vUzRUUnB6cCtEVFMKK0g2OEZyRlJxRTErcUlWeVdRam1oV3h1dlBocVZrRzBJVDdDWjBNOGxXZXN5c3lJNzU5ZjVEOERoRXAvS2JXTEQKK2VYV0N6Y05TYmdXR0hXNUpBK2ZDVjcrOG0wUHFvZEl5NUQ4TGh3bTJ0STVkQTZRY3JvOFgxMjdSV1ZhVnNOOEwKK0l6ZGYxVEhYZm5aSW0xZkRCTlVmaFhhcEtmbkZWOEV2QUxGWDJHeThNM2taUTNzbGFHZWdJTGZxUktjQ0F3RUEKK0FRS0NBZ0JnOHoxZ3Ixc281YjdpTnRGUXlxY1B3eUlzY0psZWlDUEZkcmtuaFdtUVNYYVU3K3QyZnJuQVNrbXQKK0dTZzBzNno0Ymw5ZWJ2VUxDd2VPTUpDRXF1d0c0T1ozeVBCWkx6RDkxT0hjUTYwbUZacTFaUVB6Z3ZNOThmdWQKK1R1ak1iKzBWK2gxSG9LcS9yUDFVVi9GbnhPQy92Ynl4N1RDTzFlUjVJbzdDc0F2MUQycTRORFhkYW9QeXNzaDgKK2d5c1dLUC9YcHp5eHMvLzNqUGNGdWhTSzl0YUNlbjBRRHNzeDMxVFA3S0tISmdUcmM4ZFR2MEVIYVpENDF1eW0KKy9TOGhZT2c3Rm1CK2VYdHIrMzU1Lzc2citRYTJBY2k3M3VnVXcyV0syYkEvRWRIcjBtV2kwTkdydkZmUWlpRDkKK25jbm5LMTVwc0xjTVZrNkVPT0IxSi9vVVVzYThuNi9sUWlUSllSZkZsZjBocittYk1FZ2RmSW1NMlhuNHdGOFkKK092YXBwOEdqL1hPN0ZWVmFXVzhkSVZVcmd5ckN1T3o1U1cxMVBiMC9LRmViek9ReXRTVDBTM3oxajU1YlVsNUwKK21EeFIwckpVK2ZNdmJkSnZNZ0hnaTZZWUkxTUJiU0ZtSzcvVWU5SFphR3hmVVBCcVhKZXRPZ0FKbnVvV1VxTzQKK0F0cFliTGFJaXF2ZElEaTF4RjRqRE1HSW9PbDdDbkZ6VTlCM1BqQ2tYNGFHZEFScFhxUkFCd0ZUOWJwZjFsV2UKK0RzRWhiSWc0L3FUV0tjQTZEeElYYURoZ1A5ZUg2TkRXUzZXS2I4TDFTWjNtTXl0amFDeEtzVjZwN3A5RGpKUjEKK2R3T21ZMEh2N2VCWWhqVllVajN5YlpzNmRmRmxJZytNNVJ0YXJsT3NGaFpKOW5WaEVRS0NBUUVBL2wwRkhvczYKK2s1YzE3MjZibHg3emxSbTltT3QrclYxbmJFT1NaVW55KytvWEd5WHJVWXZYNU5YK3A4c29GMEltOWRDdWlndVEKK3NkS05LNkRaQ0lheWVubnd3RW5jaktXSCtPOVZhaFh4TVM5Und0YVJETldKUngzU1A2YjJzNFQxVzZQVlpkVGQKK0s3TWxNQjE4MmNrdnM2N1dRMmhNSE5jS3JUSHVUZGRwQVlTRDVMaC9RWUQ2SWRXcXM2bHdMQXRtTDcvV1RrTjcKK1hkUGh6VmZDWExqZUJCcXI3UGFrTk05cUk3ZHV3MjlRcFNmbkFyc2hEbXZ3aXVWT0dWR0NjbTRxQjFSVjBzUWcKK0tRSjVudDlYNVZvSzJTTURSMkl6WWJxNUkvd2V4aUhJYnI0a1RoYUdvazU1bEdpQ05SamthbmUrL3JTT2lyWlgKK1lvMHNKM1JUVXJCTHlRS0NBUUVBNWRYUEFZRjdsQW8zWHB3bzBRb3U5SUZjMHF0aUZLOXBBcDBxODFEU2JESkMKK2xrWk9NbS9vZnpFNnZGNmp4amEyc2tYY2NiRWhJRHU4NzZtOTM3MHVSVUFBbWZpbUFkbVJoVWsrSnpybEhYeE8KK3RGU3hieUcwaUNtd3RDU1ptaUJjTWZ2RkovNUhlcEJoeGJVREJJYzZQaThFT2dqY1FkbkpZcjYwS0p4Ym92SzAKK3dyOW1ud3dhSzdTckUrbVg1dk4yYU93R3BHOW42MWliVVQxYUVMUjlhbE9aOEg0U2xoTHRadmdQMDJZb09DU1cKK0JLS2U0NGZiT2svcVVsWkcxRDZPNi9IL09NVDRUTXlZZ2Fzd3kwUXVNSFRqT0JYcmtBbVZTY2g1ZHdvMGVveHgKK2RGaG4zMW5GOVM1ckJadC9QZEJQUjNpbXo3VTZNb0JoNi84b2xIRms3d0tDQVFFQXhiT1RHUXhxT1BEY2NQN3QKK1crWW91UWpLdnFLN1VSQTZKSUhZdFhWbXNMcGZ2ekFYMk1meXcrQTRFRDd0S0RhNGhYTHZWa2hxN0d1VVlnYWcKKzZlbVhxMjQvMjVVTklSdy90UktBdHZYYkE3bWR1T3lBelJMam9pemhqNnU4TUFmMWxJYWdoSWVRYURqVGZMUk8KK3FBK2hUZTFraC92MnZLdS9scUlxY01JdTBZa240b3dzRE1Pc3BzT2w3QUtVTndlZEl4dmQrL0tqWG1nakp6RkEKKzFrU3grMHFudW9SeFdNS2w0cURlTEhUR243ZUY3Qzk2SC9WeGZ1Ti9jbHBTSTVMUWcrWGUxdlN0Y25LRUNTSGEKKzlWNm84K0FzMmp6UFp2UjBsaTJOMWIzSVJacndLT21GTjMzN0xZaVZPNlBmVllsQklFTkNUem91YldFQW9xSGQKK2FYV3hVUUtDQVFFQXVNRFl1TE1uYmVlUWZ1TTFCR1VWUGNOSHBLblVIQ0N0WDBhTUlpK1VGeG1INFZqK3Z4aXEKK1lxUm1QTW92Q01VdXM3dm82eE9pTjFFT0hmSHJDaEgvUWZlakJDS1cvK0d2VXQ5L3NQVnMrL2pUSTY3NU93WnoKK0l3bXdXLzhYNG9lazFTRTRhVi9FZ2NmU2NLV0RtWDVDMlgzZC9mRGxiYUh1ZXd3bHNvZU9PankwQmVEcVUydmQKK0Zja1R4TndBR2MwWUlGdXJNei9DMzdMSWw5T2p0TTRDQ3hqTkpEK1VIVU4xeDFJZEZxaUdLQ3R3MUtVTTZJWnIKK09rTEhjQXlldnpyU2xPUmhiM2NXeWxXbE9vY3NvQmxjcitNbVRBMkM0TFJ6WjI1YUJkRVVRbmJuTk1sa0ptejUKKzdvK3p4RHd0V3JrN0lZN2hPUkxMaDVFZ0poOWt0WDg1elFLQ0FRQVpJTFNwMjFhelMzS3pLZEF2cTV1MktWQVYKK0d1bURmMWRvdU81bys1SGpWMktjZjV0a3pqNEExZmZWWkt0N2F1WkNOVVJBRzRqYU5JY2NTY1pCejMzRXRDdUIKK3d2UlFwNWY4RE45RVFINHlqYU5JYlBrRnJLemd6NUFZMDhuMTBQQm0rWDNjWTQ4UDI3b1IvSURmcjJ3VnRDQUUKK1V1ZmpMWkNrdVVqZENGRDF3SlNDajdMTndqWlVSdUNUb2N2dGFhN0hFcW5qVzlWQjRhQWJkdGY1M1dSc2JZd3QKK1pGRVdWcDhzWWM5MTdJNk9VSkZRY1Q3anhidjRrYlVBWElDTGFMdGFMVzJiV2ZkUnRGUVNvMDhwbVpBS3h4Q3YKKzZWdTVWTFo4TEdMVmtwaWU4RkVhWWQvODlnRXNIaDZIZ1k5THNKTjdXeG9hSm4xc0xtRXRteXc5eFJTVworLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3JzYTQwOTZfcHViLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3JzYTQwOTZfcHViLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQxM2QzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcnNhNDA5Nl9wdWIucGVtCkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCitNSUlDSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQWc4QU1JSUNDZ0tDQWdFQTVGMm1xRXNkbnRQQUVpajZIZkNZCituS2lMTUdubTZQY2ZzYUZZZUZZTzFFdWZPak41WkpQOTBjcjNDckNuTjlKT0FkcEJiVHB6QTBSY0ljQWRXQnp2CitOTkF0SU12U2ZpMjJXSllWanpEMEJ2czJyQ1lINzZZYzZ2Zng3eTl6WFpjYW5oOFMvMnQ3QjY0eG14T1dMNFJFCisrZjhIV1RpakFXbHlVRkRrK0R1SldwUUsybzBiaEU0UzhtWCt1VWwzYWZOVzVDaVBzUmt5MU4xdjRhNy9KMmI3CitjRys3cERXVWNqbnZtTkNOODR2K2dTdWNYZktnL0xpQW5aZ1k3eGloMmVQRWhra0lxbjZrVTBjVkJRajFjWjdoCitYR1JhWi9NbnFaMnkrS2ppdUZvdDJzYU5rL3YwdmpqVyt4T3g3NnFKVjk5THROLzFxdkNZbk8xUnFNdjJFTThXCitoRXJMY2dpUnJpaHphejNhMkdhdW1MMzBDY05peHJFWFJ5RWpGYU8va2xxa3B1WlJIVHR5VW5rdmhVa1BVSHVICituNDVYUHhaN2EyWFJ5clNiRnl5UzBhbVRqUXdRQ3ZlU1JpSkZqSzVUWjU2Q1ZHS0YvRG11TFNIZVRZM3Z3aStXCitYVmRLTVlRNlppOWp3RkpvL1M0VFJwenArRFRTSDY4RnJGUnFFMStxSVZ5V1FqbWhXeHV2UGhxVmtHMElUN0NaCiswTThsV2VzeXN5STc1OWY1RDhEaEVwL0tiV0xEZVhXQ3pjTlNiZ1dHSFc1SkErZkNWNys4bTBQcW9kSXk1RDhMCitod20ydEk1ZEE2UWNybzhYMTI3UldWYVZzTjhMSXpkZjFUSFhmblpJbTFmREJOVWZoWGFwS2ZuRlY4RXZBTEZYCisyR3k4TTNrWlEzc2xhR2VnSUxmcVJLY0NBd0VBQVE9PQorLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLW5vc3BhY2UuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS1ub3NwYWNlLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzJjMjM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS1ub3NwYWNlLmNydApAQCAtMCwwICsxLDIxIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURoRENDQW15Z0F3SUJBZ0lCSHpBTkJna3Foa2lHOXcwQkFRc0ZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01UUXdNekkyTURreU16RXlXaGNOTWpRd016SXpNRGt5TXpFeVdqQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUhCdmJHRnljM05zTG1WNFlXMXdiR1V3Z2dFaU1BMEcKK0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDcEFoODlRR3JWVlZPTC9UYnVnbVV1RldGZWliKzQKKzZFV1EyKzZJRmxMVDhVTlFSNVlTV1dTSGEvMHI0RWI1Yzc3ZHo1TGhrVnZ0WnFCdmlTbDVSWURRZzJyVlFVTjMKK1h6bDhDUVJIZ3JCWE9YRHRvK3dWR1I2b013aEh3UVZDcWYxTXc3VGYzUVlmVFJCUlFHZHpFdzlBK0cyQkpWOEsKK3NWUEdNSDRWT2F6NVd1NS9rcDZtQlZ2bkU1ZUZ0U09TMmRRa0J0VUpKWWwxQjkybUdvOC9DUm0rcldVc1pPdVYKK205eitRVjRYcHRwc1cybk1Bcm9VTEJZa25FcmN6ZEQzVW1kejhTMmdJLzErOURIS0xYREtpUXNFMnk2bVQzQnUKK25zNjlXSW5pVTFtZWJscVNaZUtJUHd5VUdhUGQ1ZWlkbFJQdEtkdXJjQkxjV3NwckY2dFNnbFN4QWdNQkFBR2oKK2daSXdnWTh3Q1FZRFZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVUgzVFdQeW5CZEhSRk93VVNMRDJvdlVOWkFxWXcKK1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZitoUDZROU1Ec3hDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnVkdWemRDQkQKK1FZSUJBREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBWHM0dlFxbElseHJNYkU2SXdBSExjR0p1ejE3UnUvZW4KK0g5YlVublNoMXB4YStOSE1LWkhCRzNHVDBpYXhzVnRYZjU2L3RYSDQrSEw3bnRKanJjekdOMVBiaE1HUHl0OTQKKzU1NlpnRHhrSFQ5azdLalBBSXM5QnJqRkh2bDlOeUlaemNid2tpQzBxR3ZkempTZmUzQWlTWXVoWEkvOS9Ib2cKK3VVd1JlSCtUMlUvSUNFSFE1TzhhVjVudnBncUwzRWVFbXl4M2J1K1lYdFpNV1FVWXpYK3lhNFRuS1ZQZHF3YmYKK2VicjZ2MWhMWHJVRmw2clozd0VKNk1xVVczU0daUmtDVk5aVU9ENkt5MytFaUx3WUZodUtHZEZxU1MwSkFBRDcKK1pPM3lQdTVodTNCaEFRWWF2SzRZeWZpOUlRbXViQnF4b3BQd3l6akcxSFB3MmxqK29hcEgwdz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLXYxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEtdjEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZjFmZmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLXYxLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURJVENDQWdrQ0RGT2l0c2NFelUyT3ZJQUx3VEFOQmdrcWhraUc5dzBCQVFzRkFEQlFNUnd3R2dZRFZRUUQKK0V4TlFiMnhoY2xOVFRDQlVaWE4wSUVOQklIWXhNUkF3RGdZRFZRUUxFd2QwWlhOMGFXNW5NUkV3RHdZRFZRUUsKK0V3aFFiMnhoY2xOVFRERUxNQWtHQTFVRUJoTUNUa3d3SWhnUE1qQXhOREEyTVRreE1EQTVNVEZhR0E4eU1ESTAKK01EWXhPREV3TURreE1Wb3dUakVhTUJnR0ExVUVBeE1SYzJWeWRtVnlNUzlwYm5RdFkyRXRkakV4RURBT0JnTlYKK0JBc1RCM1JsYzNScGJtY3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUXN3Q1FZRFZRUUdFd0pPVERDQ0FTSXcKK0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFLa0NIejFBYXRWVlU0djlOdTZDWlM0VllWNkoKK3Y3am9SWkRiN29nV1V0UHhRMUJIbGhKWlpJZHIvU3ZnUnZsenZ0M1BrdUdSVysxbW9HK0pLWGxGZ05DRGF0VkIKK1EzZGZPWHdKQkVlQ3NGYzVjTzJqN0JVWkhxZ3pDRWZCQlVLcC9VekR0Ti9kQmg5TkVGRkFaM01URDBENGJZRWwKK1h3cXhVOFl3ZmhVNXJQbGE3bitTbnFZRlcrY1RsNFcxSTVMWjFDUUcxUWtsaVhVSDNhWWFqejhKR2I2dFpTeGsKKzY1V2IzUDVCWGhlbTJteGJhY3dDdWhRc0ZpU2NTdHpOMFBkU1ozUHhMYUFqL1g3ME1jb3RjTXFKQ3dUYkxxWlAKK2NHNmV6cjFZaWVKVFdaNXVXcEpsNG9nL0RKUVpvOTNsNkoyVkUrMHAyNnR3RXR4YXltc1hxMUtDVkxFQ0F3RUEKK0FUQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFQSmwzZmJWZVRKNmdWQXZDb0xZTThKWTVVN1pockNDZEJnaHcKK1d1WkJTL1RXd2Y0V0xQMEcvWnRUeVRPRU5jVDBnV0hmMC9Wblh0TlB3Mi95QmpXc0x0VFh4TjJYUWxFVmYzai8KK1djUXhXZ1NFU1lkeC9zVC91VFc2cWlodU9OUFdrVFFpem14N09HNnZCdUd4M2c1NHM5L29lSktYT3JhTnF1ZDMKK0c0S0JyeXRPYXpsaU1mb0tPMmhuemFleWRwYUR0YjJ0Wlg4YXBOLzZLcVFwVEFjWHNXclpSVzlYRUhXcTJzTnoKK0lSMW5JRTFGLzlnbnFpOVh5MEhRcHJ0ZUxSVXZNNHRFUTM1bTRIMjBlUzVZOWdKbEUvRHFYbU1RN2FpVThEZ1AKK2tyaitaMThwY3Jzc08rRXR2MEJPaVBqbVU5VFdXcERNajM0ZWY3VS9PSDVxSnhrU3JBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEuY2VydF90eXBlLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEuY2VydF90eXBlLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWMzYTkwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5jZXJ0X3R5cGUuY3J0CkBAIC0wLDAgKzEsMjAgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFVqQ0NBanFnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBMldoY05NakV3TWpFeU1UUTBOREEyV2pBOE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHakFZQmdOVkJBTVRFVkJ2YkdGeVUxTk1JRk5sY25abGNpQXhNSUlCSWpBTgorQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcVFJZlBVQnExVlZUaS8wMjdvSmxMaFZoWG9tLwordU9oRmtOdnVpQlpTMC9GRFVFZVdFbGxraDJ2OUsrQkcrWE8rM2MrUzRaRmI3V2FnYjRrcGVVV0EwSU5xMVVGRAorZDE4NWZBa0VSNEt3VnpsdzdhUHNGUmtlcURNSVI4RUZRcW45VE1PMDM5MEdIMDBRVVVCbmN4TVBRUGh0Z1NWZgorQ3JGVHhqQitGVG1zK1ZydWY1S2VwZ1ZiNXhPWGhiVWprdG5VSkFiVkNTV0pkUWZkcGhxUFB3a1p2cTFsTEdUcgorbFp2Yy9rRmVGNmJhYkZ0cHpBSzZGQ3dXSkp4SzNNM1E5MUpuYy9FdG9DUDlmdlF4eWkxd3lva0xCTnN1cGs5dworYnA3T3ZWaUo0bE5abm01YWttWGlpRDhNbEJtajNlWG9uWlVUN1NuYnEzQVMzRnJLYXhlclVvSlVzUUlEQVFBQgorbzJBd1hqQUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlFmZE5ZL0tjRjBkRVU3QlJJc1BhaTlRMWtDcGpBZgorQmdOVkhTTUVHREFXZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS96QVJCZ2xnaGtnQmh2aENBUUVFQkFNQworQUVBd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFKMjhWdWt0akRHa1VXY1ZwTS9XK1lqb2hGRGF5Njc2WW96eAorQmJCTFUzUVppRGtjZFhaYlgvak9hS0tCR1dyaldpQjZ0eGNoVjRYcmx2RXRWdFBnUHJRTGlsMnhhRDIwTE9xSgorZS9aRUZJQUluZGYwNkNBY2ltZFFhUEQ2bXd3MDR2M2dadzNjd1BRZC9hTVFDdzl0bTkzdHlmNllVNHVJaC9vOAorZXZHMVpCck5IUnlpVzE4a2J1dWVMTloyZGFZUUlJU1JKU0lGckFFUmFjZk92QThyN3lYSkNxWm5CNkFVNWo5dQorVit5U05XM3NkWklPVGZzMW5XS1U2U0VDV283MmRkODlZdnM3d0NmM05TWk5NMlVlbUxlT2pRT21aSUhCaVI4TAorUEFoRHhocmE1Qi9RQkthV2VUVlFvaEV2S3o3NXBMQVdvdVVHSUtsZ0hpcUo0Y3ZCR2NnPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODFiMjZhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5jcnQKQEAgLTAsMCArMSwyMCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEUHpDQ0FpZWdBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREEyV2hjTk1qRXdNakV5TVRRME5EQTJXakE4TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdqQVlCZ05WQkFNVEVWQnZiR0Z5VTFOTUlGTmxjblpsY2lBeE1JSUJJakFOCitCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFxUUlmUFVCcTFWVlRpLzAyN29KbExoVmhYb20vCit1T2hGa052dWlCWlMwL0ZEVUVlV0VsbGtoMnY5SytCRytYTyszYytTNFpGYjdXYWdiNGtwZVVXQTBJTnExVUZECitkMTg1ZkFrRVI0S3dWemx3N2FQc0ZSa2VxRE1JUjhFRlFxbjlUTU8wMzkwR0gwMFFVVUJuY3hNUFFQaHRnU1ZmCitDckZUeGpCK0ZUbXMrVnJ1ZjVLZXBnVmI1eE9YaGJVamt0blVKQWJWQ1NXSmRRZmRwaHFQUHdrWnZxMWxMR1RyCitsWnZjL2tGZUY2YmFiRnRwekFLNkZDd1dKSnhLM00zUTkxSm5jL0V0b0NQOWZ2UXh5aTF3eW9rTEJOc3Vwazl3CiticDdPdlZpSjRsTlpubTVha21YaWlEOE1sQm1qM2VYb25aVVQ3U25icTNBUzNGcktheGVyVW9KVXNRSURBUUFCCitvMDB3U3pBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCUWZkTlkvS2NGMGRFVTdCUklzUGFpOVExa0NwakFmCitCZ05WSFNNRUdEQVdnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5L3pBTkJna3Foa2lHOXcwQkFRVUZBQU9DCitBUUVBdmMrV3daVWVtc0p1MklpSTJDcDZsaUErVUF2SXg5OGRRZTNrWnMyekFvRjlWd1FiWGNZeldRL0JJTGtqCitOSW1LYlBMOXgwZzJqSURuNFp2R1lGeXdNd0lPL2QrK1lid1lpUXc0Mi92N1JpTXk5NHpCUG56ZUhpODZkeS8wCitqcE9PSlV4M0lYUnNHTGR5amIvMVQxMWtsY0ZxR25BUmlLKzhWWW9sTVBQNmFmS3ZMWFg3SzRraVVwc0ZRaFVwCitFNVZlTTVwVjFNY2kyRVRPSmF1MmNPNDBGSnZJL0M5Vy93UitHQUFyTWF3MmZ4Rzc3RTNsYWFhMExBT2xleE02CitBNEtPYjVmNWNHVE01SWg2dEVGNUZWcTMvOXZ6TklZTWExRnF6YWNCTFpGOHpTSFlMRWltWEJkempCb040cURVCisvV3pSeVlSQlJqQUk0OW16SFg2cmFsZXFudz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLmV4dF9rdS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLmV4dF9rdS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0Zjg1NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEuZXh0X2t1LmNydApAQCAtMCwwICsxLDIyIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURwekNDQW8rZ0F3SUJBZ0lCSVRBTkJna3Foa2lHOXcwQkFRc0ZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01UUXdOREF4TVRRME5EUXpXaGNOTWpRd016STVNVFEwTkRReldqQThNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R2pBWUJnTlZCQU1URVZCdmJHRnlVMU5NSUZObGNuWmxjaUF4TUlJQklqQU4KK0Jna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXFRSWZQVUJxMVZWVGkvMDI3b0psTGhWaFhvbS8KK3VPaEZrTnZ1aUJaUzAvRkRVRWVXRWxsa2gydjlLK0JHK1hPKzNjK1M0WkZiN1dhZ2I0a3BlVVdBMElOcTFVRkQKK2QxODVmQWtFUjRLd1Z6bHc3YVBzRlJrZXFETUlSOEVGUXFuOVRNTzAzOTBHSDAwUVVVQm5jeE1QUVBodGdTVmYKK0NyRlR4akIrRlRtcytWcnVmNUtlcGdWYjV4T1hoYlVqa3RuVUpBYlZDU1dKZFFmZHBocVBQd2tadnExbExHVHIKK2xadmMva0ZlRjZiYWJGdHB6QUs2RkN3V0pKeEszTTNROTFKbmMvRXRvQ1A5ZnZReHlpMXd5b2tMQk5zdXBrOXcKK2JwN092VmlKNGxOWm5tNWFrbVhpaUQ4TWxCbWozZVhvblpVVDdTbmJxM0FTM0ZyS2F4ZXJVb0pVc1FJREFRQUIKK280RzBNSUd4TUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZCOTAxajhwd1hSMFJUc0ZFaXc5cUwxRFdRS20KK01HTUdBMVVkSXdSY01GcUFGTFJhNUtXejN0SlM5cm5WcHBVUDZ6Njh4LzMvb1Qra1BUQTdNUXN3Q1FZRFZRUUcKK0V3Sk9UREVSTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWcKK1EwR0NBUUF3Q3dZRFZSMFBCQVFEQWdYZ01CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUJNQTBHQ1NxR1NJYjMKK0RRRUJDd1VBQTRJQkFRQU50aVlSMlA2K2E3ckV0SkFSSWdwdXJ3MVVSWWVqQVRiYnAzWmhhSEJXNjAzV3liMisKK0tKdG0xS1BDem9qdS9xVFJ0NjVZWWt0K3R1MXdUemFteXJrUHh0OGJCS214aVdudTVqMUhMeGRqT3o4Vlc5bGYKK3ZUYjVlZ1I0ZFU5ZU5YbmkvNVFrenJka01PK29iNHB1RFhZN3l0UHVHWDZZZk5WaENrcmhCbFlESk5FNTdDa0sKK3ZwQ05qMytUZThQRWtXUEFFYVVocUNuUWs2cXZQdnBCZmMvaHFnd3psUk10M3U1TmtpVk91SDcyZHRyNGZPSTEKK25sQVU4RDJ3dXZEVnIzWDUyODFPTk5FdEhVNnJYZTk4dmxVelM5UVY5bEJEZHNPOW5SWUp6djJOYjFjalJJTTUKK0pabDBJTExSMnRjNkUvVzVZWGFsTnAzN2pmckZpaTFVOVdySgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjgxYTVmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5rZXkKQEAgLTAsMCArMSwyNyBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJRW9nSUJBQUtDQVFFQXFRSWZQVUJxMVZWVGkvMDI3b0psTGhWaFhvbS91T2hGa052dWlCWlMwL0ZEVUVlVworRWxsa2gydjlLK0JHK1hPKzNjK1M0WkZiN1dhZ2I0a3BlVVdBMElOcTFVRkRkMTg1ZkFrRVI0S3dWemx3N2FQcworRlJrZXFETUlSOEVGUXFuOVRNTzAzOTBHSDAwUVVVQm5jeE1QUVBodGdTVmZDckZUeGpCK0ZUbXMrVnJ1ZjVLZQorcGdWYjV4T1hoYlVqa3RuVUpBYlZDU1dKZFFmZHBocVBQd2tadnExbExHVHJsWnZjL2tGZUY2YmFiRnRwekFLNgorRkN3V0pKeEszTTNROTFKbmMvRXRvQ1A5ZnZReHlpMXd5b2tMQk5zdXBrOXdicDdPdlZpSjRsTlpubTVha21YaQoraUQ4TWxCbWozZVhvblpVVDdTbmJxM0FTM0ZyS2F4ZXJVb0pVc1FJREFRQUJBb0lCQUJhSjllaVJRcTRZcHYrdworVVRjVnBMQzBvVHVlV3pjcG9yMWkxempHNFZ6cWUvT2syRnF5R1RvR0tNbEZLN0h3d2ErTEV5ZUozeHlWNXlkNAordjFNdzliRFpGZEpDMWVDQmpvVUFIdFg2azlIT0UwVmQ2d29WUTRWaTZPUEkxZzdCNU1uci81OHJOcm5ONlRNcworeDU4TkY2ZXVlY3dUVTgxMVFKclp0TGJYN2oyQ3IyOHlCMlZzOHF5WWxId1Z3NWpiRE92NDNEN3ZVNWdtbElETgorMEpRUnVXQW5PdVB6Wk5vSnI0U2ZKS3FITkd4WVlZNnBIWjFzMGRPVExJRGIvQjhLUVdhcEEya1JtWnlpZDJFSAorbnd6Z0xiQXNISkNmK2JRbmhYalh1eHRVc3JjSUw4bm9aTGF6bE9NeHdORWFtbWdsVldXMjNVZC9RUm5GZ0pnNQorVWdjQWNSRUNnWUVBMTl1WWV0aHQ1cW13ZEorMTJvQzZ6ZU8rdlhMY3lEOWdvbjIzVDVKNncyWVRobGQ3L09XMAorb0FyUUpHZ2tBZGFxMHBjVHlPSWp0VFFWTUZ5Z2RWbUNFSm14aC8zUnV0UGNUZXlkcVc5ZnBoS0RNZWozMko4ZQorR25pR21OR2ljbGJjZk5PUzhFNVRHcDQ0NXlaYjlQMSs3QUhuZzE2YkdnM1lrajVFQTRHK0hDY0NnWUVBeUhBbAorLy9la2s4WWpRRWxtKzhpekx0Rmt5bUlLMGFDdEVlOUMvUklSaEZZQmVGYW90QzVkU3ROaEJPbmNuNG92TUFQRAorbFgvOTJ5RGk5T1A4UFBMTjNhNEI5WHBXM2svU1M1R3JiVDVjd09pdkJITmxsWlNtdS8ycXo1V1BHY2pWQ09yQgorTFlsM1lXcjJoM0VHS0lDVDAza0VvVGtpREJ2Q2VPcFc3Y0NHbDJjQ2dZQkQ1d2hvWEh6MStwdFBsSTRZVmpadAorWGg4NmFVK2FqcFZQaUV5Sjg0STZ4WG1PNFNaWHY4cTZMYXljUjBaTWJjTCt6QmVsTWI0WjJuQnY3ak5ydHVSNworWkYyOGNkUHYrWVZyM2VzYXliWkUvNzNWalh1cDRTUVBINnIzbDdxS1RWaSt5NitGZUo0YjJYbjgvTXdnblQyMworOEVGcnllN3dtenB0aHJqT2dablVNUUtCZ0U5TGhzei81SjBOaXM2WSsyUHFuM0NMS0V1a2c5RXd0cWRjdDJ5MAorNURjdGEwRjNUeUNSSXhsQ0RLVEwvQnNscU10ZkFkWTRIMjY4VU8wKzhJQVFNbjlib3F6QnJISWdzL3B2YzVreAorVGJLSG13Mnd0V1I2dlllcnNCS1ZnVnBiQ0dTUnNzRFlIR0Z1MW43NHFNNEhKL1JHY1Ixekk5UVVlMWdvcFNGRAoreER0TEFvR0FWQWRXdnJxRHdnb0wyaEhXM3NjR3B4ZEUveWdKRE93SG5mKzFCOWdvS0FPUDVsZjJGSmFpQXhmMworZWN0b1BPZ1piQ21tL2lpRG1pZ3U3MDNsZDNPK1ZvQ0xERDRxeDNSK0t5QUxMNzhndFZKWXpTUmlLaHpnQ1ozZworbUtzSVZSQnE0SWZ3aXd5TU5HMkJZWlFBd2JTRGpqUHRuL2tQQmR1UHpQajdlcmlCeWhJPQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEua2V5X3VzYWdlLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEua2V5X3VzYWdlLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjRlNTlmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5rZXlfdXNhZ2UuY3J0CkBAIC0wLDAgKzEsMjAgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFR6Q0NBamVnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBMldoY05NakV3TWpFeU1UUTBOREEyV2pBOE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHakFZQmdOVkJBTVRFVkJ2YkdGeVUxTk1JRk5sY25abGNpQXhNSUlCSWpBTgorQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcVFJZlBVQnExVlZUaS8wMjdvSmxMaFZoWG9tLwordU9oRmtOdnVpQlpTMC9GRFVFZVdFbGxraDJ2OUsrQkcrWE8rM2MrUzRaRmI3V2FnYjRrcGVVV0EwSU5xMVVGRAorZDE4NWZBa0VSNEt3VnpsdzdhUHNGUmtlcURNSVI4RUZRcW45VE1PMDM5MEdIMDBRVVVCbmN4TVBRUGh0Z1NWZgorQ3JGVHhqQitGVG1zK1ZydWY1S2VwZ1ZiNXhPWGhiVWprdG5VSkFiVkNTV0pkUWZkcGhxUFB3a1p2cTFsTEdUcgorbFp2Yy9rRmVGNmJhYkZ0cHpBSzZGQ3dXSkp4SzNNM1E5MUpuYy9FdG9DUDlmdlF4eWkxd3lva0xCTnN1cGs5dworYnA3T3ZWaUo0bE5abm01YWttWGlpRDhNbEJtajNlWG9uWlVUN1NuYnEzQVMzRnJLYXhlclVvSlVzUUlEQVFBQgorbzEwd1d6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlFmZE5ZL0tjRjBkRVU3QlJJc1BhaTlRMWtDcGpBZgorQmdOVkhTTUVHREFXZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS96QU9CZ05WSFE4QkFmOEVCQU1DQWVBdworRFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUJLQy8xeDBtNTdFWTRINDEydWUzZ2hDV2dnMDdWY1JLYW1uVVNUcwordG5xSTVUMG1TdnVQcnhoSU5kUUI2MzYwaWJjdEJrWFAzUzlyeEdIaVVkZUsvSnF4WXMyWWFtQ3M1MFRTV3BvbgorcDRIemNtanN3MVlnWHNRNnBtWXdrelUwM3pxczM2MWd0N0pTT3pMMmROMElqd0l5NDdxZkxRYi9BWGhYMkltcworN2dCdXFWcFlxSnVTSFIwcXNOL2M2V2dJRTNJcmJLMU1CNkNKVGt4QmZjU2M1RTRvVUlCSG13dytSU1ZMT2N6TQorbkdrM1UxM2RtZkcwbmRoTXRyTXl5eEJaWlNVd29aTGpSWjZKNW1IU3YrazhvbzFQWVFlaWl2TkVQNTNtZ1ZhWQoraGEwZ0xVSWs2ek5CUnBZMXVVbXhRK1JRU01JeVlQQmIxUmVkSG4yczhFbDJtbG89CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnB1YmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucHVia2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYzY2OWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnB1YmtleQpAQCAtMCwwICsxLDkgQEAKKy0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCitNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXFRSWZQVUJxMVZWVGkvMDI3b0psCitMaFZoWG9tL3VPaEZrTnZ1aUJaUzAvRkRVRWVXRWxsa2gydjlLK0JHK1hPKzNjK1M0WkZiN1dhZ2I0a3BlVVdBCiswSU5xMVVGRGQxODVmQWtFUjRLd1Z6bHc3YVBzRlJrZXFETUlSOEVGUXFuOVRNTzAzOTBHSDAwUVVVQm5jeE1QCitRUGh0Z1NWZkNyRlR4akIrRlRtcytWcnVmNUtlcGdWYjV4T1hoYlVqa3RuVUpBYlZDU1dKZFFmZHBocVBQd2taCit2cTFsTEdUcmxadmMva0ZlRjZiYWJGdHB6QUs2RkN3V0pKeEszTTNROTFKbmMvRXRvQ1A5ZnZReHlpMXd5b2tMCitCTnN1cGs5d2JwN092VmlKNGxOWm5tNWFrbVhpaUQ4TWxCbWozZVhvblpVVDdTbmJxM0FTM0ZyS2F4ZXJVb0pVCitzUUlEQVFBQgorLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5jZXJ0X3R5cGUgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5jZXJ0X3R5cGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3N2YzMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLmNlcnRfdHlwZQpAQCAtMCwwICsxLDE3IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ3BUQ0NBWTBDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUURFeEZRYjJ4aGNsTlRUQ0JUWlhKMlpYSWdNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQUtrQ0h6MUFhdFZWVTR2OU51NkNaUzRWWVY2SnY3am9SWkRiN29nV1V0UHhRMUJIbGhKWgorWklkci9TdmdSdmx6dnQzUGt1R1JXKzFtb0crSktYbEZnTkNEYXRWQlEzZGZPWHdKQkVlQ3NGYzVjTzJqN0JVWgorSHFnekNFZkJCVUtwL1V6RHROL2RCaDlORUZGQVozTVREMEQ0YllFbFh3cXhVOFl3ZmhVNXJQbGE3bitTbnFZRgorVytjVGw0VzFJNUxaMUNRRzFRa2xpWFVIM2FZYWp6OEpHYjZ0WlN4azY1V2IzUDVCWGhlbTJteGJhY3dDdWhRcworRmlTY1N0ek4wUGRTWjNQeExhQWovWDcwTWNvdGNNcUpDd1RiTHFaUGNHNmV6cjFZaWVKVFdaNXVXcEpsNG9nLworREpRWm85M2w2SjJWRSswcDI2dHdFdHhheW1zWHExS0NWTEVDQXdFQUFhQWtNQ0lHQ1NxR1NJYjNEUUVKRGpFVgorTUJNd0VRWUpZSVpJQVliNFFnRUJCQVFEQWdCQU1BMEdDU3FHU0liM0RRRUJCUVVBQTRJQkFRQjk1UGtqcGcvTgorSmJnbDVuWmNBazhtYUdNcFVGbHJoSlM0a0d1dFFLWnVnTlg5djhjZkFCVzkwNUlIWVhWMWRtNnp4VmN5ZXFaTQorRmlPZ2JWOTQzZnU1SmJ1Zm9hemRZWG5uUjIvaUtNaWdxWDRDelpySzNGNVp6ZWd4a2ZESWZEcm4vc2hDK3JXYgorU1M1V0JWTEozUU5qOXZ3bjMvYjY2SVJicC9WaU93SHg3KzlKVDRLL3JMSWQveW5qWWYyVDU3QXNtTmQvanB0YworWnMxOWZHZ3RyVVh3ZVdrbGlFWk4yekU0N0NjNTNqa3g2K0xpNFROczRCams1UC9hWHJDUDBmQndnR3QySzZZVworZFEvbnIwUHdJYlh6VmxnVXVrU1RIa0pKZmhGNFkvV3FjVWZPUHJSZHcrenhPTHVzSjluekpCUjBGT29oY0J4TQora1BCVm5hMGR6ZS9vCistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLmtleV91c2FnZSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLmtleV91c2FnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTNhZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEua2V5X3VzYWdlCkBAIC0wLDAgKzEsMTcgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlDbnpDQ0FZY0NBUUF3UERFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUm93CitHQVlEVlFRREV4RlFiMnhoY2xOVFRDQlRaWEoyWlhJZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCitBRENDQVFvQ2dnRUJBS2tDSHoxQWF0VlZVNHY5TnU2Q1pTNFZZVjZKdjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaCitaSWRyL1N2Z1J2bHp2dDNQa3VHUlcrMW1vRytKS1hsRmdOQ0RhdFZCUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaCitIcWd6Q0VmQkJVS3AvVXpEdE4vZEJoOU5FRkZBWjNNVEQwRDRiWUVsWHdxeFU4WXdmaFU1clBsYTduK1NucVlGCitXK2NUbDRXMUk1TFoxQ1FHMVFrbGlYVUgzYVlhano4SkdiNnRaU3hrNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzCitGaVNjU3R6TjBQZFNaM1B4TGFBai9YNzBNY290Y01xSkN3VGJMcVpQY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvCitESlFabzkzbDZKMlZFKzBwMjZ0d0V0eGF5bXNYcTFLQ1ZMRUNBd0VBQWFBZU1Cd0dDU3FHU0liM0RRRUpEakVQCitNQTB3Q3dZRFZSMFBCQVFEQWdIZ01BMEdDU3FHU0liM0RRRUJCUVVBQTRJQkFRQ2o2akN1MHdFNU9RMUpHUXdaCitGTndQcVpydktudFNxMnlMSWJnbUd4d2x2REx4T3puMEttaWRTRmlLUnFoMEtYd2o5c2lvZGx6NUMwZDl0VXFxCis3eFVYZytqK3dESHFVVjh6bzQySmtlK1VtV1hGUHBuWHgvZkRGR1RJVGRMU244WkR4a3QzMUVTTFRFVlp2UEZECitvZG0rQyt6V0p0S3B5TCs5b3A0S3Z5QlExTVo5bldacHdNYUs0ZzRtZHRPSXN6NzVnTWE3NHc4WlQ3VnpoR01ZCitjWkdtYWZzbDd4KytHRER0ZjBvQ1Bncmo5eHkrT3Z2L0d5VUJhQis2bHdlZmxUZlBEVFJTb04wbWVGbFA1eW5GCit2cWNCTTVKS0gyRlVRSWl6ZmM5bzZaOHRLeGU5RkNvdjN4OHN6QXVvTVJBN2JqaFZuZ2VRSXJFa1RjYVFCdkJZCitOYWxDCistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLmt1LWN0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEua3UtY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwNTdkNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLmt1LWN0CkBAIC0wLDAgKzEsMTcgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlDc2pDQ0Fab0NBUUF3UERFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUm93CitHQVlEVlFRREV4RlFiMnhoY2xOVFRDQlRaWEoyWlhJZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCitBRENDQVFvQ2dnRUJBS2tDSHoxQWF0VlZVNHY5TnU2Q1pTNFZZVjZKdjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaCitaSWRyL1N2Z1J2bHp2dDNQa3VHUlcrMW1vRytKS1hsRmdOQ0RhdFZCUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaCitIcWd6Q0VmQkJVS3AvVXpEdE4vZEJoOU5FRkZBWjNNVEQwRDRiWUVsWHdxeFU4WXdmaFU1clBsYTduK1NucVlGCitXK2NUbDRXMUk1TFoxQ1FHMVFrbGlYVUgzYVlhano4SkdiNnRaU3hrNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzCitGaVNjU3R6TjBQZFNaM1B4TGFBai9YNzBNY290Y01xSkN3VGJMcVpQY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvCitESlFabzkzbDZKMlZFKzBwMjZ0d0V0eGF5bXNYcTFLQ1ZMRUNBd0VBQWFBeE1DOEdDU3FHU0liM0RRRUpEakVpCitNQ0F3Q3dZRFZSMFBCQVFEQWdIZ01CRUdDV0NHU0FHRytFSUJBUVFFQXdJQVFEQU5CZ2txaGtpRzl3MEJBUVVGCitBQU9DQVFFQU5sTkc5aFc4NTJPelZLajJaOFR0VTlqeHN0QW9TQ0g5eWM5Q29qNFZ3MlRUanMxemN1QldzTWwxCisyYmYySTZadkVINlpoY1FZN2k3bnlIUXlQbHFFNGw2VTlEOGN0OTY3UU43c211QUhOWTJIaVEyKytlQ0JUSGNrCitQZHRHSkF6SXZObFhjb3FOaThVQzVmR2VwTnRJMXVzTm80MVNLTXZiZzZuR0E1Z2RjUUtrN0NWbGs4bHJEMHFJCitYbi9IdmpTUm9ERTRaR3hBdE52UFhXb3JHU3h0Z2N5OEVNUG9YVlVhYjVmTnQ4cS8veC9OUTR5RVFLUHJleG1SCitJdU9pUThWVzhRWnRrT1JHcFpiR1N2c2tVMFdmS0FOdWk0ekNjWFlSYzRtVlI0V2YwQytmeUhlaWhoanNsU25UCitSYkM3blFuNUhTSHAzMXFKbHI4MFFvZHl3YUsxRGc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5tZDQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5tZDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNTNkNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLm1kNApAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUURFeEZRYjJ4aGNsTlRUQ0JUWlhKMlpYSWdNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQUtrQ0h6MUFhdFZWVTR2OU51NkNaUzRWWVY2SnY3am9SWkRiN29nV1V0UHhRMUJIbGhKWgorWklkci9TdmdSdmx6dnQzUGt1R1JXKzFtb0crSktYbEZnTkNEYXRWQlEzZGZPWHdKQkVlQ3NGYzVjTzJqN0JVWgorSHFnekNFZkJCVUtwL1V6RHROL2RCaDlORUZGQVozTVREMEQ0YllFbFh3cXhVOFl3ZmhVNXJQbGE3bitTbnFZRgorVytjVGw0VzFJNUxaMUNRRzFRa2xpWFVIM2FZYWp6OEpHYjZ0WlN4azY1V2IzUDVCWGhlbTJteGJhY3dDdWhRcworRmlTY1N0ek4wUGRTWjNQeExhQWovWDcwTWNvdGNNcUpDd1RiTHFaUGNHNmV6cjFZaWVKVFdaNXVXcEpsNG9nLworREpRWm85M2w2SjJWRSswcDI2dHdFdHhheW1zWHExS0NWTEVDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCQXdVQQorQTRJQkFRQVBQVXpZdlVBK0hRVHRlTWhrR2N1RDZYdHNaM2kyZ1FkREdnTFV4dE1BVkZ3Ky81WlM2bCtXcVBncQorV1FJT3NFSU5QSG5qVUFNejVwamJGZEZxdTdYNUcyOVRIYTJkYTBVYTJiSk8vYnUzQ1o2RWtzR21jbHFhUTJabAordmZrV2FJM2JmUEZoOGVLSEYrRjVvYVZwMGdIdmlDYWtOcXhvdDRyclpkTDhwbkpDNUpKK2Y3Nnk2U2dIWU9hbworU0dDdjFnWVVSaElzWDBnV0NxbGRzQ3d4SlFGRWlnOUhJU1VjWFZpR0dWbkxkc2hVdHVLTDl5TlovSE5BT3VPaworN043YTd1cjhLTW12YXIxamtUcSt6S1NTdVNyem1VMkp2eEZkcVUwR3I3QTM1amduVkc4c2o2Nkw0bEFjd2RvRworc1A4T21DMWhXaDRVM2F2SDZFSGRFRzhsdzBVNworLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5tZDUgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5tZDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwZjVjNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLm1kNQpAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUURFeEZRYjJ4aGNsTlRUQ0JUWlhKMlpYSWdNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQUtrQ0h6MUFhdFZWVTR2OU51NkNaUzRWWVY2SnY3am9SWkRiN29nV1V0UHhRMUJIbGhKWgorWklkci9TdmdSdmx6dnQzUGt1R1JXKzFtb0crSktYbEZnTkNEYXRWQlEzZGZPWHdKQkVlQ3NGYzVjTzJqN0JVWgorSHFnekNFZkJCVUtwL1V6RHROL2RCaDlORUZGQVozTVREMEQ0YllFbFh3cXhVOFl3ZmhVNXJQbGE3bitTbnFZRgorVytjVGw0VzFJNUxaMUNRRzFRa2xpWFVIM2FZYWp6OEpHYjZ0WlN4azY1V2IzUDVCWGhlbTJteGJhY3dDdWhRcworRmlTY1N0ek4wUGRTWjNQeExhQWovWDcwTWNvdGNNcUpDd1RiTHFaUGNHNmV6cjFZaWVKVFdaNXVXcEpsNG9nLworREpRWm85M2w2SjJWRSswcDI2dHdFdHhheW1zWHExS0NWTEVDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCQkFVQQorQTRJQkFRQVF4K0Vqc1BVVVlhYzN0MXYyNGxQT1lxcktNNTJYWUR3U253VzVPa2puK1l4Sm93WnlkOGdmem1mcAordnA0Ky8vaDVQM1ZsUUR3YVhlTVRnS0NpempmK2pkQUNOSmU2MC9SeFlwWUZLcnZ5NjdaU3IvaDdmaGRtNTJKegorL3RTQ2JoNkZ3SDEwNzVsb0J1V0x1ekQ3UHZtMVgxRkptYnAyY2VhSm96RG5YVEFLRmRWVHFkaVJZd3lnNGlQbAora3JoT05HTmUxMzJhWVp0RnNzZGpTQ2ltK2JCKy9zYWdSM1N1SlBvUSs4RWpEWFlHNzVuNFpWYTRkQWNqVm9ZaworcGcwWUs1Y3VIMUZIQ1hPQk80TjErRzBza0w4QVp3bHYrcmhLUWs2bHBHdCtBUThMU2pDejJ6SFVuZnBhWFhXcAorczFkcTl1ZmpiSmRhSERqa0JZMWdaM0JNbVhQdworLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGExIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGM2MWJjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhMQpAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUURFeEZRYjJ4aGNsTlRUQ0JUWlhKMlpYSWdNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQUtrQ0h6MUFhdFZWVTR2OU51NkNaUzRWWVY2SnY3am9SWkRiN29nV1V0UHhRMUJIbGhKWgorWklkci9TdmdSdmx6dnQzUGt1R1JXKzFtb0crSktYbEZnTkNEYXRWQlEzZGZPWHdKQkVlQ3NGYzVjTzJqN0JVWgorSHFnekNFZkJCVUtwL1V6RHROL2RCaDlORUZGQVozTVREMEQ0YllFbFh3cXhVOFl3ZmhVNXJQbGE3bitTbnFZRgorVytjVGw0VzFJNUxaMUNRRzFRa2xpWFVIM2FZYWp6OEpHYjZ0WlN4azY1V2IzUDVCWGhlbTJteGJhY3dDdWhRcworRmlTY1N0ek4wUGRTWjNQeExhQWovWDcwTWNvdGNNcUpDd1RiTHFaUGNHNmV6cjFZaWVKVFdaNXVXcEpsNG9nLworREpRWm85M2w2SjJWRSswcDI2dHdFdHhheW1zWHExS0NWTEVDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCQlFVQQorQTRJQkFRQ0FDTzFHb0J4TWRHb1dMdGswVVNiWklKa0ppZHZyYVR5dXVWTU12VGFSSEFzZWVwTlpXdGJJMlZqWgorOEJZRktuWTl1U1g0dW96T0RpNVRrdjJkQ1N3QUZGSnM3YnNBTHFwanFmVTFrd1FTYmZMb1Q4dHdmN281MVp3OAorTEFFS1cwR3BpZmhJNE5KQWFJZWg1RXlmTWVYSDVSRkF6MzFUOTVFYXQ1NmVMY2V3REs1bldVZFF4L0tra1NJYgorQUZLcVBLejhGOUtTMXRFdHk1VVltQzFRVitxN05HMWFPcldjdXF2c3pweVVic3ovdTMyUUgwTHA3RTNsWE10MQordnlGZkFzQTZLQkxUVW15VFZRSHo0c25RQWI1Q0ZOTE9yWG5IYnRqZW03Wm1oRHpFMURTLzdvOE5LNDl6dVhVVworWVVNUFJwWkRTTlVwSUJtWnMyTkJUQVJTRWMwNAorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGEyMjQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGEyMjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyMTk2ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTIyNApAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUURFeEZRYjJ4aGNsTlRUQ0JUWlhKMlpYSWdNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQUtrQ0h6MUFhdFZWVTR2OU51NkNaUzRWWVY2SnY3am9SWkRiN29nV1V0UHhRMUJIbGhKWgorWklkci9TdmdSdmx6dnQzUGt1R1JXKzFtb0crSktYbEZnTkNEYXRWQlEzZGZPWHdKQkVlQ3NGYzVjTzJqN0JVWgorSHFnekNFZkJCVUtwL1V6RHROL2RCaDlORUZGQVozTVREMEQ0YllFbFh3cXhVOFl3ZmhVNXJQbGE3bitTbnFZRgorVytjVGw0VzFJNUxaMUNRRzFRa2xpWFVIM2FZYWp6OEpHYjZ0WlN4azY1V2IzUDVCWGhlbTJteGJhY3dDdWhRcworRmlTY1N0ek4wUGRTWjNQeExhQWovWDcwTWNvdGNNcUpDd1RiTHFaUGNHNmV6cjFZaWVKVFdaNXVXcEpsNG9nLworREpRWm85M2w2SjJWRSswcDI2dHdFdHhheW1zWHExS0NWTEVDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCRGdVQQorQTRJQkFRQWVkMmNZWTlQL3hKTkhCckhEeGplaDV1RnlEc2tDdncwNkt2eThGSnQ2Ry8wbmNuZmhTcFBuZXZhbworVVBmMmprMDdpTUlGaWFEREtjM3lnNEgyVWg0NCtVZDJZZEF4SFlXdHRLbnZqNDNYU29XU25tVURFaVVxZ1BBUAorQzRFbWdQRWZzeHRqK25JNWZ3SUdFdmZiM21KMzFGSnhuU0pSRWNhSDh1cXlYVzR2ZkY4ZTBvKzlnZE0rYVR3LworT0pqK2RZdmVwZklwQisxaklxMXNycjlOTEpqS2x2SEJoUUZiSWNJZ1FYSktjdzV6MDRoZ2pkb1N1UWNrTU81egorM2dWYWFIZmpDSlFUMXREV2ZqTFRDY2VEb0pQc2tlbzd4YkR2WG5DaG8rWkx0eU1lc29Ddk9FZVpMSmhEWVRsdworSDVqdzZmOUdXOFE5WFArRVFjZjZaaHRtWUxyVQorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGEyNTYgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGEyNTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA0YzRhNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTI1NgpAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUURFeEZRYjJ4aGNsTlRUQ0JUWlhKMlpYSWdNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQUtrQ0h6MUFhdFZWVTR2OU51NkNaUzRWWVY2SnY3am9SWkRiN29nV1V0UHhRMUJIbGhKWgorWklkci9TdmdSdmx6dnQzUGt1R1JXKzFtb0crSktYbEZnTkNEYXRWQlEzZGZPWHdKQkVlQ3NGYzVjTzJqN0JVWgorSHFnekNFZkJCVUtwL1V6RHROL2RCaDlORUZGQVozTVREMEQ0YllFbFh3cXhVOFl3ZmhVNXJQbGE3bitTbnFZRgorVytjVGw0VzFJNUxaMUNRRzFRa2xpWFVIM2FZYWp6OEpHYjZ0WlN4azY1V2IzUDVCWGhlbTJteGJhY3dDdWhRcworRmlTY1N0ek4wUGRTWjNQeExhQWovWDcwTWNvdGNNcUpDd1RiTHFaUGNHNmV6cjFZaWVKVFdaNXVXcEpsNG9nLworREpRWm85M2w2SjJWRSswcDI2dHdFdHhheW1zWHExS0NWTEVDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCQ3dVQQorQTRJQkFRQlkvMW5uWVEzVGhWeWVaYjFaMndMWW9IWjVyZmVKQ2VkeVA3Ti9nakpaamhyTWJ3aW9VZnQydUhwYgorK09aUWZ4UlhKVGJ0ai8xd3BSTUNvVU1MV3phcFM3L3hHeDNJam9QdGw0MmFNNE0reFZZdmJMakV4TDEza1VBcgorZUU0SldjTUliVEVQb2wyelNkWC9MdUIrbTI3akVwNVZzdk0ydHk5cU93L1Q0aUt3akZTZTZwY1laMnNwa3MxOQorM2x0Z2puYWFtd3FLY045elVBM0lFUlRzV2pyNWV4S1lnZlhtMk9lZXVTUDB0SHI3RGgrdy8yWEE5ZEdjTGhybQorVEE0UDhRaklnU0RseXptaFlZbXNyaW9GUHVDZmRpMXV6czhieG1iTFhiaUNHWjhURE15NW9McUxvMUsrajJwRgorb3grQVRIS3hRL1hwUlFQKzJPVGI5c3cxa001OQorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGEzODQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGEzODQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3NjRmNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTM4NApAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUURFeEZRYjJ4aGNsTlRUQ0JUWlhKMlpYSWdNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQUtrQ0h6MUFhdFZWVTR2OU51NkNaUzRWWVY2SnY3am9SWkRiN29nV1V0UHhRMUJIbGhKWgorWklkci9TdmdSdmx6dnQzUGt1R1JXKzFtb0crSktYbEZnTkNEYXRWQlEzZGZPWHdKQkVlQ3NGYzVjTzJqN0JVWgorSHFnekNFZkJCVUtwL1V6RHROL2RCaDlORUZGQVozTVREMEQ0YllFbFh3cXhVOFl3ZmhVNXJQbGE3bitTbnFZRgorVytjVGw0VzFJNUxaMUNRRzFRa2xpWFVIM2FZYWp6OEpHYjZ0WlN4azY1V2IzUDVCWGhlbTJteGJhY3dDdWhRcworRmlTY1N0ek4wUGRTWjNQeExhQWovWDcwTWNvdGNNcUpDd1RiTHFaUGNHNmV6cjFZaWVKVFdaNXVXcEpsNG9nLworREpRWm85M2w2SjJWRSswcDI2dHdFdHhheW1zWHExS0NWTEVDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCREFVQQorQTRJQkFRQS9YVll4aENXV1dFeHkrTzV5L3pJMTEyMUw1TVBqcmxMeXBnUCtaRFU4VFVxOGZ1c3J5WUFnVkFUbworbmpwZmY2UkY5UVRLWmhvdUZtZ3dpY0VuRTZYdXcxTFp0NFNXc2tFeUlTTXNUZW14M2VpWTNZU3U3dXFwTUlJaAoraDVodDFxR3hrRlphTEcwUkVJbFVXcVZUS2s5b1dMT2c2cHYrcWVlczAwU0FuMDMxVmMyQzMrK2N0UU9OVXJrbworZmM4YUFHQWk5RHZTdUZrZmpoWmtwOEZyNGQ3YnVIUVBtSmlZeFJwMjdLNU5iVnhycjBHQ0Izd2g3cnVHYzhNYworSytQTlF2b3o0MjVkSEszZEh6ZW9JV0QyS2EyNW1iamdsYlcxcnFBZFRrWlNZSDJRcVpUSHNLQ3IwdTVpUHRTRAorZ0Y3SzBBTXVUMkxJZVNzMXA4Mm4rY0xGNzhmegorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGE1MTIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGE1MTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkNzA5NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTUxMgpAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUURFeEZRYjJ4aGNsTlRUQ0JUWlhKMlpYSWdNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQUtrQ0h6MUFhdFZWVTR2OU51NkNaUzRWWVY2SnY3am9SWkRiN29nV1V0UHhRMUJIbGhKWgorWklkci9TdmdSdmx6dnQzUGt1R1JXKzFtb0crSktYbEZnTkNEYXRWQlEzZGZPWHdKQkVlQ3NGYzVjTzJqN0JVWgorSHFnekNFZkJCVUtwL1V6RHROL2RCaDlORUZGQVozTVREMEQ0YllFbFh3cXhVOFl3ZmhVNXJQbGE3bitTbnFZRgorVytjVGw0VzFJNUxaMUNRRzFRa2xpWFVIM2FZYWp6OEpHYjZ0WlN4azY1V2IzUDVCWGhlbTJteGJhY3dDdWhRcworRmlTY1N0ek4wUGRTWjNQeExhQWovWDcwTWNvdGNNcUpDd1RiTHFaUGNHNmV6cjFZaWVKVFdaNXVXcEpsNG9nLworREpRWm85M2w2SjJWRSswcDI2dHdFdHhheW1zWHExS0NWTEVDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCRFFVQQorQTRJQkFRQkg3OEpySWJvV1VsT2lVekV3eHVZa2FSQnIyMkRmZFNIbE5Wam5lbnJUc1NzU2RmUGVuZnJVYnM0MgorTmZ6aEp0dkxCbkRNczlvbHNpeVBOS1puUk9tamwvNERhNVNjVkJmZEE3b1NJbXdkc2FMMGtyQWp1OGxKb3N5NworeXBxTmVqUVFEZ2pMMDBIa2FWeXFqbkVXWTY4ZW5Ba2FLNjRzdVE0dzBwa0dtdGRaeWcwbkJpSDFWSTcyUGNQUgorRnUyd3hTa3Z2WWorQmNIVkFZL0dXUk1USHcxbWttc1FuYTdBc1oxTUZJRjN5Y0lXNUZvbTZkMHdwQjZjbEozTQordk5UQmM3a1pJUjFCUXlibHlVOTZhY2VzeEpVUkpuNXhPOVlmOU9Tc1RiZDdYbTV4SzZEcFFXeEZGRWdkVnRpcgoraFNBcXRwNTRuVm5MZTRRaWhtVkFsTTh6dDJPTgorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnYxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEudjEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNGIyYTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnYxLmNydApAQCAtMCwwICsxLDE4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUM5RENDQWR5Z0F3SUJBQUlCQVRBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQTJXaGNOTWpFd01qRXlNVFEwTkRBMldqQThNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R2pBWUJnTlZCQU1URVZCdmJHRnlVMU5NSUZObGNuWmxjaUF4TUlJQklqQU4KK0Jna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXFRSWZQVUJxMVZWVGkvMDI3b0psTGhWaFhvbS8KK3VPaEZrTnZ1aUJaUzAvRkRVRWVXRWxsa2gydjlLK0JHK1hPKzNjK1M0WkZiN1dhZ2I0a3BlVVdBMElOcTFVRkQKK2QxODVmQWtFUjRLd1Z6bHc3YVBzRlJrZXFETUlSOEVGUXFuOVRNTzAzOTBHSDAwUVVVQm5jeE1QUVBodGdTVmYKK0NyRlR4akIrRlRtcytWcnVmNUtlcGdWYjV4T1hoYlVqa3RuVUpBYlZDU1dKZFFmZHBocVBQd2tadnExbExHVHIKK2xadmMva0ZlRjZiYWJGdHB6QUs2RkN3V0pKeEszTTNROTFKbmMvRXRvQ1A5ZnZReHlpMXd5b2tMQk5zdXBrOXcKK2JwN092VmlKNGxOWm5tNWFrbVhpaUQ4TWxCbWozZVhvblpVVDdTbmJxM0FTM0ZyS2F4ZXJVb0pVc1FJREFRQUIKK293SXdBREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBb1pWdVZpN2JJc2xLZ01KaGVqU0ZYaU8rSUNNejFmbUsKK2IwdFBONjhtUlloSS9nc2pSVDBjbVg2R1VOcmcrVTVtY0JXaE13SGd5dngxQ0FSVTRZVG9LWnhjWEdOTDBEUGQKK1oxaEY4bkNySkNaQlF2TnVXRTdzMHVmdzkyeHo1WmZ1S2tWeGk5NFJZUjUyOUY2Z3pnbDRycFg4VVFWdTJ5bS8KKzlwVGxIS3I0TUtpOUxOcHB5Sk1TODl1UmNiMkZKRk1kaEFLYmhOdGJJakk5cUdaN3gvLzBiZWxBYVdocTM4OXUKKzZYV0ZuWnQzNVBVNlp6NlliQVE1cGpaWXNUYW9odXVmZ3JwT2xGUFV1YzR1UitSZkdISVE2aWQxMmxaYVFDMm0KK09GSUJEY1UweDFjRmZQZk1nVmRCTGY2a2xQdC92L3RENzdtd3gwZXp0U3AyOE5JZitBQ3c4QT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxMC5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxMC5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4ODMzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEwLmtleQpAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUhjQ0FRRUVJTEJETXM3YlJWeFZnNm92VHBmMnpCOW0rMjJqWTdSM0xOS1J2Q1BmYTZZSm9Bb0dDQ3FHU000OQorQXdFSG9VUURRZ0FFSEczMzZkcWw2cUdjc25JWnFBa2NjNjNlRmJ2ZXB1T3pUd1hvYlJBdU9tazNsNEE1d1hYLwordnM1d0Fhd0xYMXdVVFVNL0FFU0htQVpySks5dHE1U284Zz09CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxMF9pbnQzX2ludC1jYTIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMTBfaW50M19pbnQtY2EyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmU4ODlhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMTBfaW50M19pbnQtY2EyLmNydApAQCAtMCwwICsxLDgwIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUJXakNDQVFDZ0F3SUJBZ0lCU3pBS0JnZ3Foa2pPUFFRREFqQktNUXN3Q1FZRFZRUUdFd0pWU3pFUk1BOEcKK0ExVUVDaE1JYldKbFpDQlVURk14S0RBbUJnTlZCQU1USDIxaVpXUWdWRXhUSUZSbGMzUWdhVzUwWlhKdFpXUnAKK1lYUmxJRU5CSURNd0hoY05NVFV3T1RBeE1UTTBOelUxV2hjTk1qVXdPREk1TVRNME56VTFXakFVTVJJd0VBWUQKK1ZRUURFd2xzYjJOaGJHaHZjM1F3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFjYmZmcDJxWHEKK29aeXljaG1vQ1J4enJkNFZ1OTZtNDdOUEJlaHRFQzQ2YVRlWGdEbkJkZisrem5BQnJBdGZYQlJOUXo4QVJJZVkKK0Jtc2tyMjJybEtqeW93MHdDekFKQmdOVkhSTUVBakFBTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFETGMrSW8KK3JnOFZ4RWJDZ1Z2OGlIK2tPSUVuOU1qaHB2S3p2d1VvVis2cmpRSWdaVS9SWEF5YzFhK0gyK3NvR2ZORUlPQlEKK0F6TzNwSng3V0pBQXBadUJYMVE9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUJ3akNDQVVlZ0F3SUJBZ0lCU1RBS0JnZ3Foa2pPUFFRREFqQkxNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4S1RBbkJnTlZCQU1USUZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAKK1lYUmxJRVZESUVOQk1CNFhEVEUxTURrd01URXpOREl4T0ZvWERUSTFNRGd5T1RFek5ESXhPRm93U2pFTE1Ba0cKK0ExVUVCaE1DVlVzeEVUQVBCZ05WQkFvVENHMWlaV1FnVkV4VE1TZ3dKZ1lEVlFRREV4OXRZbVZrSUZSTVV5QlUKK1pYTjBJR2x1ZEdWeWJXVmthV0YwWlNCRFFTQXpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKKzczMmZXSExOUE1Qc1AxVTFpYlh2YjU1ZXJsRVZNbHBYQkdzaitLWXdWcVUxWENtVzlaOWhoUDdYLzVqcy9EWDkKKzJKL3V0b0h5alV0VnBRT3pkVHJic2FNZE1Cc3dEQVlEVlIwVEJBVXdBd0VCL3pBTEJnTlZIUThFQkFNQ0I0QXcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFKOVJYMzhiaHQrUk5zUUkyR1VwTmhDL1krVGIxT1U3NE80aUVhNisKK0NrakJXVHBMdEhSS1ZkWnE3U1Qwd2sxTHNRSXhBSVVpOEwxVng0RHVVUDBiSnhJWC9udUpxbEJuQkcrcVJoU2YKK1ZnSEtnU3lIaWRwWkFKcGFSaTRJa1k1MDRDWS9ZZz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUM2VENDQWRHZ0F3SUJBZ0lCRHpBTkJna3Foa2lHOXcwQkFRc0ZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01UTXdPVEkwTVRZd09EUXlXaGNOTWpNd09USXlNVFl3T0RReVdqQkxNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4S1RBbkJnTlZCQU1USUZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAKK1lYUmxJRVZESUVOQk1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFOE9paDNmWDVTTGVOMWRtRm5jUWwKK1dNdzkrWTZzWGJsaGxyWEJ4aFh4andkd3BDSEVObitmb1VWZHJxWVZZYTdTdXYzUVZlTzZuSjE5SDNRTml4VzgKK2lrMVAraHhzYmFxOGJ0YTc4dkF5SG1DNEVtWFFMZzF3N294YjlRODJxWDFZbzRHVk1JR1NNQjBHQTFVZERnUVcKK0JCUVBpYjFqUWV2TFhoY28vMmd3UGNHSTBKeFlPVEJqQmdOVkhTTUVYREJhZ0JTMFd1U2xzOTdTVXZhNTFhYVYKK0Qrcyt2TWY5LzZFL3BEMHdPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3cKK0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CZ2dFQU1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWkkKK2h2Y05BUUVMQlFBRGdnRUJBQWplYVRVYUNCaVhUMUNZTFZyNlVGU2VSTlpCckRQbmo2UHdxVVFUdmdCNUk1bjYKK3lYcW9FNFJZRGFFTDBMZzI0anVGeEkyNml0QnV5cHRvNnZzY2dHcTc3Y2ZyUC9hdlNkeFUreGVaNGJDV3ZoM00KK2RkajlsbWtvMlU4SThHaEJjSHBTdUlpVHZnS0RCOGVLa2plcTNBc0xHY2hIRHZpcDhwQjNJaGNOZkw3Vzk0WmYKKzcvbEg5VlFpRTMvcHg3YW1EMzJjaWRvUHZXTEE5VTNmMUZzUG1KRVNVejB3d05mSU5wRGptUHI4ZEdia0NOK00KK0NGaHhvNnNDZks4S0xZRzRuWVg4Rnd4VlI4NmtwU3JPOWU4NEFYMFlZYmR6eHByYmMyWE9hZWJKOCtCRG16dXQKK0FSa0Q3RFRYcm9kTjF3VjdqUUprclV1RXdQajlSaHZrK01GUmthdz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQldqQ0NBUUNnQXdJQkFnSUJTekFLQmdncWhrak9QUVFEQWpCS01Rc3dDUVlEVlFRR0V3SlZTekVSTUE4RworQTFVRUNoTUliV0psWkNCVVRGTXhLREFtQmdOVkJBTVRIMjFpWldRZ1ZFeFRJRlJsYzNRZ2FXNTBaWEp0WldScAorWVhSbElFTkJJRE13SGhjTk1UVXdPVEF4TVRNME56VTFXaGNOTWpVd09ESTVNVE0wTnpVMVdqQVVNUkl3RUFZRAorVlFRREV3bHNiMk5oYkdodmMzUXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUWNiZmZwMnFYcQorb1p5eWNobW9DUnh6cmQ0VnU5Nm00N05QQmVodEVDNDZhVGVYZ0RuQmRmKyt6bkFCckF0ZlhCUk5RejhBUkllWQorQm1za3IyMnJsS2p5b3cwd0N6QUpCZ05WSFJNRUFqQUFNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUURMYytJbworcmc4VnhFYkNnVnY4aUgra09JRW45TWpocHZLenZ3VW9WKzZyalFJZ1pVL1JYQXljMWErSDIrc29HZk5FSU9CUQorQXpPM3BKeDdXSkFBcFp1QlgxUT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQnREQ0NBVHFnQXdJQkFnSUJUVEFLQmdncWhrak9QUVFEQWpCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUI0WERURTFNRGt3TVRFME1EZzBNMW9YRFRJMU1EZ3lPVEUwTURnME0xb3dTakVMTUFrRworQTFVRUJoTUNWVXN4RVRBUEJnTlZCQW9UQ0cxaVpXUWdWRXhUTVNnd0pnWURWUVFERXg5dFltVmtJRlJNVXlCVQorWlhOMElHbHVkR1Z5YldWa2FXRjBaU0JEUVNBek1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRQorNzMyZldITE5QTVBzUDFVMWliWHZiNTVlcmxFVk1scFhCR3NqK0tZd1ZxVTFYQ21XOVo5aGhQN1gvNWpzL0RYOQorMkovdXRvSHlqVXRWcFFPemRUcmJzYU1RTUE0d0RBWURWUjBUQkFVd0F3RUIvekFLQmdncWhrak9QUVFEQWdObworQURCbEFqQUpSeGJHUmFzM05CbWs5TW5HV1hnN1BUMXhuUkVMSFJXV0l2ZkxkVlF0MDZsMS94RmczWnVQZFFkdAorUWg3Q0s4MENNUUQ3d2ExbzFhOHF5REtCZkxONjM2dUttS0dnYTBFK3ZZWEJlRkN5OW9BUkJhbmdHQ0IwQjJ2dAorcHo1OTBKdkdXZk09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUM2VENDQWRHZ0F3SUJBZ0lCRHpBTkJna3Foa2lHOXcwQkFRc0ZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01UTXdPVEkwTVRZd09EUXlXaGNOTWpNd09USXlNVFl3T0RReVdqQkxNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4S1RBbkJnTlZCQU1USUZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAKK1lYUmxJRVZESUVOQk1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFOE9paDNmWDVTTGVOMWRtRm5jUWwKK1dNdzkrWTZzWGJsaGxyWEJ4aFh4andkd3BDSEVObitmb1VWZHJxWVZZYTdTdXYzUVZlTzZuSjE5SDNRTml4VzgKK2lrMVAraHhzYmFxOGJ0YTc4dkF5SG1DNEVtWFFMZzF3N294YjlRODJxWDFZbzRHVk1JR1NNQjBHQTFVZERnUVcKK0JCUVBpYjFqUWV2TFhoY28vMmd3UGNHSTBKeFlPVEJqQmdOVkhTTUVYREJhZ0JTMFd1U2xzOTdTVXZhNTFhYVYKK0Qrcyt2TWY5LzZFL3BEMHdPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3cKK0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CZ2dFQU1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWkkKK2h2Y05BUUVMQlFBRGdnRUJBQWplYVRVYUNCaVhUMUNZTFZyNlVGU2VSTlpCckRQbmo2UHdxVVFUdmdCNUk1bjYKK3lYcW9FNFJZRGFFTDBMZzI0anVGeEkyNml0QnV5cHRvNnZzY2dHcTc3Y2ZyUC9hdlNkeFUreGVaNGJDV3ZoM00KK2RkajlsbWtvMlU4SThHaEJjSHBTdUlpVHZnS0RCOGVLa2plcTNBc0xHY2hIRHZpcDhwQjNJaGNOZkw3Vzk0WmYKKzcvbEg5VlFpRTMvcHg3YW1EMzJjaWRvUHZXTEE5VTNmMUZzUG1KRVNVejB3d05mSU5wRGptUHI4ZEdia0NOK00KK0NGaHhvNnNDZks4S0xZRzRuWVg4Rnd4VlI4NmtwU3JPOWU4NEFYMFlZYmR6eHByYmMyWE9hZWJKOCtCRG16dXQKK0FSa0Q3RFRYcm9kTjF3VjdqUUprclV1RXdQajlSaHZrK01GUmthdz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEwX2ludDNfaW50LWNhMl9jYS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxMF9pbnQzX2ludC1jYTJfY2EuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NWNjNGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxMF9pbnQzX2ludC1jYTJfY2EuY3J0CkBAIC0wLDAgKzEsMTYwIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUJXakNDQVFDZ0F3SUJBZ0lCU3pBS0JnZ3Foa2pPUFFRREFqQktNUXN3Q1FZRFZRUUdFd0pWU3pFUk1BOEcKK0ExVUVDaE1JYldKbFpDQlVURk14S0RBbUJnTlZCQU1USDIxaVpXUWdWRXhUSUZSbGMzUWdhVzUwWlhKdFpXUnAKK1lYUmxJRU5CSURNd0hoY05NVFV3T1RBeE1UTTBOelUxV2hjTk1qVXdPREk1TVRNME56VTFXakFVTVJJd0VBWUQKK1ZRUURFd2xzYjJOaGJHaHZjM1F3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFjYmZmcDJxWHEKK29aeXljaG1vQ1J4enJkNFZ1OTZtNDdOUEJlaHRFQzQ2YVRlWGdEbkJkZisrem5BQnJBdGZYQlJOUXo4QVJJZVkKK0Jtc2tyMjJybEtqeW93MHdDekFKQmdOVkhSTUVBakFBTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFETGMrSW8KK3JnOFZ4RWJDZ1Z2OGlIK2tPSUVuOU1qaHB2S3p2d1VvVis2cmpRSWdaVS9SWEF5YzFhK0gyK3NvR2ZORUlPQlEKK0F6TzNwSng3V0pBQXBadUJYMVE9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUJ3akNDQVVlZ0F3SUJBZ0lCU1RBS0JnZ3Foa2pPUFFRREFqQkxNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4S1RBbkJnTlZCQU1USUZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAKK1lYUmxJRVZESUVOQk1CNFhEVEUxTURrd01URXpOREl4T0ZvWERUSTFNRGd5T1RFek5ESXhPRm93U2pFTE1Ba0cKK0ExVUVCaE1DVlVzeEVUQVBCZ05WQkFvVENHMWlaV1FnVkV4VE1TZ3dKZ1lEVlFRREV4OXRZbVZrSUZSTVV5QlUKK1pYTjBJR2x1ZEdWeWJXVmthV0YwWlNCRFFTQXpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKKzczMmZXSExOUE1Qc1AxVTFpYlh2YjU1ZXJsRVZNbHBYQkdzaitLWXdWcVUxWENtVzlaOWhoUDdYLzVqcy9EWDkKKzJKL3V0b0h5alV0VnBRT3pkVHJic2FNZE1Cc3dEQVlEVlIwVEJBVXdBd0VCL3pBTEJnTlZIUThFQkFNQ0I0QXcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFKOVJYMzhiaHQrUk5zUUkyR1VwTmhDL1krVGIxT1U3NE80aUVhNisKK0NrakJXVHBMdEhSS1ZkWnE3U1Qwd2sxTHNRSXhBSVVpOEwxVng0RHVVUDBiSnhJWC9udUpxbEJuQkcrcVJoU2YKK1ZnSEtnU3lIaWRwWkFKcGFSaTRJa1k1MDRDWS9ZZz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUM2VENDQWRHZ0F3SUJBZ0lCRHpBTkJna3Foa2lHOXcwQkFRc0ZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01UTXdPVEkwTVRZd09EUXlXaGNOTWpNd09USXlNVFl3T0RReVdqQkxNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4S1RBbkJnTlZCQU1USUZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAKK1lYUmxJRVZESUVOQk1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFOE9paDNmWDVTTGVOMWRtRm5jUWwKK1dNdzkrWTZzWGJsaGxyWEJ4aFh4andkd3BDSEVObitmb1VWZHJxWVZZYTdTdXYzUVZlTzZuSjE5SDNRTml4VzgKK2lrMVAraHhzYmFxOGJ0YTc4dkF5SG1DNEVtWFFMZzF3N294YjlRODJxWDFZbzRHVk1JR1NNQjBHQTFVZERnUVcKK0JCUVBpYjFqUWV2TFhoY28vMmd3UGNHSTBKeFlPVEJqQmdOVkhTTUVYREJhZ0JTMFd1U2xzOTdTVXZhNTFhYVYKK0Qrcyt2TWY5LzZFL3BEMHdPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3cKK0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CZ2dFQU1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWkkKK2h2Y05BUUVMQlFBRGdnRUJBQWplYVRVYUNCaVhUMUNZTFZyNlVGU2VSTlpCckRQbmo2UHdxVVFUdmdCNUk1bjYKK3lYcW9FNFJZRGFFTDBMZzI0anVGeEkyNml0QnV5cHRvNnZzY2dHcTc3Y2ZyUC9hdlNkeFUreGVaNGJDV3ZoM00KK2RkajlsbWtvMlU4SThHaEJjSHBTdUlpVHZnS0RCOGVLa2plcTNBc0xHY2hIRHZpcDhwQjNJaGNOZkw3Vzk0WmYKKzcvbEg5VlFpRTMvcHg3YW1EMzJjaWRvUHZXTEE5VTNmMUZzUG1KRVNVejB3d05mSU5wRGptUHI4ZEdia0NOK00KK0NGaHhvNnNDZks4S0xZRzRuWVg4Rnd4VlI4NmtwU3JPOWU4NEFYMFlZYmR6eHByYmMyWE9hZWJKOCtCRG16dXQKK0FSa0Q3RFRYcm9kTjF3VjdqUUprclV1RXdQajlSaHZrK01GUmthdz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQldqQ0NBUUNnQXdJQkFnSUJTekFLQmdncWhrak9QUVFEQWpCS01Rc3dDUVlEVlFRR0V3SlZTekVSTUE4RworQTFVRUNoTUliV0psWkNCVVRGTXhLREFtQmdOVkJBTVRIMjFpWldRZ1ZFeFRJRlJsYzNRZ2FXNTBaWEp0WldScAorWVhSbElFTkJJRE13SGhjTk1UVXdPVEF4TVRNME56VTFXaGNOTWpVd09ESTVNVE0wTnpVMVdqQVVNUkl3RUFZRAorVlFRREV3bHNiMk5oYkdodmMzUXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUWNiZmZwMnFYcQorb1p5eWNobW9DUnh6cmQ0VnU5Nm00N05QQmVodEVDNDZhVGVYZ0RuQmRmKyt6bkFCckF0ZlhCUk5RejhBUkllWQorQm1za3IyMnJsS2p5b3cwd0N6QUpCZ05WSFJNRUFqQUFNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUURMYytJbworcmc4VnhFYkNnVnY4aUgra09JRW45TWpocHZLenZ3VW9WKzZyalFJZ1pVL1JYQXljMWErSDIrc29HZk5FSU9CUQorQXpPM3BKeDdXSkFBcFp1QlgxUT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQnREQ0NBVHFnQXdJQkFnSUJUVEFLQmdncWhrak9QUVFEQWpCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUI0WERURTFNRGt3TVRFME1EZzBNMW9YRFRJMU1EZ3lPVEUwTURnME0xb3dTakVMTUFrRworQTFVRUJoTUNWVXN4RVRBUEJnTlZCQW9UQ0cxaVpXUWdWRXhUTVNnd0pnWURWUVFERXg5dFltVmtJRlJNVXlCVQorWlhOMElHbHVkR1Z5YldWa2FXRjBaU0JEUVNBek1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRQorNzMyZldITE5QTVBzUDFVMWliWHZiNTVlcmxFVk1scFhCR3NqK0tZd1ZxVTFYQ21XOVo5aGhQN1gvNWpzL0RYOQorMkovdXRvSHlqVXRWcFFPemRUcmJzYU1RTUE0d0RBWURWUjBUQkFVd0F3RUIvekFLQmdncWhrak9QUVFEQWdObworQURCbEFqQUpSeGJHUmFzM05CbWs5TW5HV1hnN1BUMXhuUkVMSFJXV0l2ZkxkVlF0MDZsMS94RmczWnVQZFFkdAorUWg3Q0s4MENNUUQ3d2ExbzFhOHF5REtCZkxONjM2dUttS0dnYTBFK3ZZWEJlRkN5OW9BUkJhbmdHQ0IwQjJ2dAorcHo1OTBKdkdXZk09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUM2VENDQWRHZ0F3SUJBZ0lCRHpBTkJna3Foa2lHOXcwQkFRc0ZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01UTXdPVEkwTVRZd09EUXlXaGNOTWpNd09USXlNVFl3T0RReVdqQkxNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4S1RBbkJnTlZCQU1USUZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAKK1lYUmxJRVZESUVOQk1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFOE9paDNmWDVTTGVOMWRtRm5jUWwKK1dNdzkrWTZzWGJsaGxyWEJ4aFh4andkd3BDSEVObitmb1VWZHJxWVZZYTdTdXYzUVZlTzZuSjE5SDNRTml4VzgKK2lrMVAraHhzYmFxOGJ0YTc4dkF5SG1DNEVtWFFMZzF3N294YjlRODJxWDFZbzRHVk1JR1NNQjBHQTFVZERnUVcKK0JCUVBpYjFqUWV2TFhoY28vMmd3UGNHSTBKeFlPVEJqQmdOVkhTTUVYREJhZ0JTMFd1U2xzOTdTVXZhNTFhYVYKK0Qrcyt2TWY5LzZFL3BEMHdPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3cKK0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CZ2dFQU1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWkkKK2h2Y05BUUVMQlFBRGdnRUJBQWplYVRVYUNCaVhUMUNZTFZyNlVGU2VSTlpCckRQbmo2UHdxVVFUdmdCNUk1bjYKK3lYcW9FNFJZRGFFTDBMZzI0anVGeEkyNml0QnV5cHRvNnZzY2dHcTc3Y2ZyUC9hdlNkeFUreGVaNGJDV3ZoM00KK2RkajlsbWtvMlU4SThHaEJjSHBTdUlpVHZnS0RCOGVLa2plcTNBc0xHY2hIRHZpcDhwQjNJaGNOZkw3Vzk0WmYKKzcvbEg5VlFpRTMvcHg3YW1EMzJjaWRvUHZXTEE5VTNmMUZzUG1KRVNVejB3d05mSU5wRGptUHI4ZEdia0NOK00KK0NGaHhvNnNDZks4S0xZRzRuWVg4Rnd4VlI4NmtwU3JPOWU4NEFYMFlZYmR6eHByYmMyWE9hZWJKOCtCRG16dXQKK0FSa0Q3RFRYcm9kTjF3VjdqUUprclV1RXdQajlSaHZrK01GUmthdz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMCAoMHgwKQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBGZWIgMTIgMTQ6NDQ6MDAgMjAxMSBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEZlYiAxMiAxNDo0NDowMCAyMDIxIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgIFJTQSBQdWJsaWMgS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1cyAoMjA0OCBiaXQpOgorICAgICAgICAgICAgICAgICAgICAwMDpjMDpkZjozNzpmYzoxNzpiYjplMDo5Njo5ZDozZjo4NjpkZTo5NjozMjoKKyAgICAgICAgICAgICAgICAgICAgN2Q6NDQ6YTU6MTY6YTA6Y2Q6MjE6ZjE6OTk6ZDQ6ZWM6ZWE6Y2I6N2M6MTg6CisgICAgICAgICAgICAgICAgICAgIDU4OjA4Ojk0OmE1OmVjOjliOmM1OjhiOmRmOjFhOjFlOjk5OjM4Ojk5Ojg3OgorICAgICAgICAgICAgICAgICAgICAxZTo3YjpjMDo4ZDozOTpkZjozODo1ZDo3MDo3ODowNzpkMzo5ZTpkOTo5MzoKKyAgICAgICAgICAgICAgICAgICAgZTg6Yjk6NzI6NTE6YzU6Y2U6YTM6MzA6NTI6YTk6ZjI6ZTc6NDA6NzA6MTQ6CisgICAgICAgICAgICAgICAgICAgIGNiOjQ0OmEyOjcyOjBiOmMyOmU1OjQwOmY5OjNlOmU1OmE2OjBlOmIzOmY5OgorICAgICAgICAgICAgICAgICAgICBlYzo0YTo2MzpjMDpiODoyOTowMDo3NDo5Yzo1NzozYjphODphNTowNDo5MDoKKyAgICAgICAgICAgICAgICAgICAgNzE6ZjE6YmQ6ODM6ZDk6M2Y6ZDY6YTU6ZTI6M2M6MmE6OGY6ZWY6Mjc6NjA6CisgICAgICAgICAgICAgICAgICAgIGMzOmM2OjlmOmNiOmJhOmVjOjYwOjdkOmI3OmU2Ojg0OjMyOmJlOjRmOmZiOgorICAgICAgICAgICAgICAgICAgICA1ODoyNjoyMjowMzo1YjpkNDpiNDpkNTpmYjpmNTplMzo5NjoyZTo3MDpjMDoKKyAgICAgICAgICAgICAgICAgICAgZTQ6MmU6YmQ6ZmM6MmU6ZWU6ZTI6NDE6NTU6YzA6MzQ6MmU6N2Q6MjQ6NzI6CisgICAgICAgICAgICAgICAgICAgIDY5OmNiOjQ3OmIxOjE0OjQwOjgzOjdkOjY3OmY0Ojg2OmY2OjMxOmFiOmYxOgorICAgICAgICAgICAgICAgICAgICA3OTphNDpiMjpiNToyZToxMjpmOTo4NDoxNzpmMDo2Mjo2ZjoyNzozZToxMzoKKyAgICAgICAgICAgICAgICAgICAgNTg6YjE6NTQ6MGQ6MjE6OWE6NzM6Mzc6YTE6MzA6Y2Y6NmY6OTI6ZGM6ZjY6CisgICAgICAgICAgICAgICAgICAgIGU5OmZjOmFjOmRiOjJlOjI4OmQxOjdlOjAyOjRiOjIzOmEwOjE1OmYyOjM4OgorICAgICAgICAgICAgICAgICAgICA2NTo2NDowOTplYTowYzo2ZTo4ZToxYjoxNzphMDo3MTpjODpiMzo5YjpjOToKKyAgICAgICAgICAgICAgICAgICAgYWI6ZTk6YzM6ZjI6Y2Y6ODc6OTY6OGY6ODA6MDI6MzI6OWU6OTk6NTg6NmY6CisgICAgICAgICAgICAgICAgICAgIGEyOmQ1CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorICAgICAgICAgICAgICAgIERpck5hbWU6L0M9TkwvTz1Qb2xhclNTTC9DTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgICAgICAgICAgc2VyaWFsOjAwCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgYjg6ZmQ6NTQ6ZDg6MDA6NTQ6OTA6OGI6MjU6YjA6Mjc6ZGQ6OTU6Y2Q6YTI6Zjc6ODQ6MDc6CisgICAgICAgIDFkOjg3Ojg5OjRhOmM0Ojc4OjExOmQ4OjA3OmI1OmQ3OjIyOjUwOjhlOjQ4OmViOjYyOjdhOgorICAgICAgICAzMjo4OTpiZTo2Mzo0Nzo1MzpmZjpiNjpiZTpmMToyZTo4Yzo1NDpjMDo5OTozZjphMDpiOToKKyAgICAgICAgMzc6MjM6NzI6NWY6MGQ6NDY6NTk6OGY6ZDg6NDc6Y2Q6OTc6NGM6OWY6MDc6MGM6MTI6NjI6CisgICAgICAgIDA5OjNhOjI0OmU0OjM2OmQ5OmU5OjJjOmRhOjM4OmQwOjczOjc1OjYxOmQ3OmMxOjZjOjI2OgorICAgICAgICA4Yjo5YjplMDpkNTpkYzo2NzplZDo4Yzo2YjozMzpkNzo3NDoyMjozYzo0YzpkYjpiNTo4ZDoKKyAgICAgICAgMmE6Y2U6MmM6MGQ6MDg6NTk6MDU6MDk6MDU6YTY6Mzk6OWY6YjM6Njc6MWI6ZTI6ODM6ZTU6CisgICAgICAgIGUxOjhmOjUzOmY2OjY3OjkzOmM3OmY5OjZmOjc2OjQ0OjU4OjEyOmU4OjNhOmQ0Ojk3OmU3OgorICAgICAgICBlOTpjMDozZTphODo3YTo3MjozZDo4Nzo1MzoxZjplNToyYzo4NDo4NDplNzo5YTo5ZTo3ZjoKKyAgICAgICAgNjY6ZDk6MWY6OWI6ZjU6MTM6NDg6YjA6NGQ6MTQ6ZDE6ZGU6YjI6MjQ6ZDk6Nzg6N2Q6ZjU6CisgICAgICAgIDM1OmNjOjU4OjE5OmQxOmQyOjk5OmVmOjRkOjczOmY4OjFmOjg5OmQ0OjVhOmQwOjUyOmNlOgorICAgICAgICAwOTpmNTpiMTo0Njo1MTo2YTowMDo4ZTozYjpjYzo2Zjo2MzowMTowMDo5OTplZDo5ZDphNjoKKyAgICAgICAgMDg6NjA6Y2Q6MzI6MTg6ZDA6NzM6ZTA6NTg6NzE6ZDk6ZTU6ZDI6NTM6ZDc6OGQ6ZDA6Y2E6CisgICAgICAgIGU5OjVkOjJhOjBhOjBkOjVkOjU1OmVjOjIxOjUwOjE3OjE2OmU2OjA2OjRhOmNkOjVlOmRlOgorICAgICAgICBmNzplMDplOTo1NAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEaHpDQ0FtK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREF3V2hjTk1qRXdNakV5TVRRME5EQXdXakE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd2dnRWlNQTBHCitDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRREEzemY4Rjd2Z2xwMC9odDZXTW4xRXBSYWd6U0h4CittZFRzNnN0OEdGZ0lsS1hzbThXTDN4b2VtVGlaaHg1N3dJMDUzemhkY0hnSDA1N1prK2k1Y2xIRnpxTXdVcW55Cis1MEJ3Rk10RW9uSUx3dVZBK1Q3bHBnNnorZXhLWThDNEtRQjBuRmM3cUtVRWtISHh2WVBaUDlhbDRqd3FqKzhuCitZTVBHbjh1NjdHQjl0K2FFTXI1UCsxZ21JZ05iMUxUVisvWGpsaTV3d09RdXZmd3U3dUpCVmNBMExuMGtjbW5MCitSN0VVUUlOOVovU0c5akdyOFhta3NyVXVFdm1FRi9CaWJ5YytFMWl4VkEwaG1uTTNvVERQYjVMYzl1bjhyTnN1CitLTkYrQWtzam9CWHlPR1ZrQ2VvTWJvNGJGNkJ4eUxPYnlhdnB3L0xQaDVhUGdBSXlucGxZYjZMVkFnTUJBQUdqCitnWlV3Z1pJd0RBWURWUjBUQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpICisvZjh3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mK2hQNlE5TURzeEN6QUpCZ05WCitCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6CitkQ0JEUVlJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUF1UDFVMkFCVWtJc2xzQ2ZkbGMyaTk0UUhIWWVKCitTc1I0RWRnSHRkY2lVSTVJNjJKNk1vbStZMGRULzdhKzhTNk1WTUNaUDZDNU55TnlYdzFHV1kvWVI4MlhUSjhICitEQkppQ1RvazVEYlo2U3phT05CemRXSFh3V3dtaTV2ZzFkeG43WXhyTTlkMElqeE0yN1dOS3M0c0RRaFpCUWtGCitwam1mczJjYjRvUGw0WTlUOW1lVHgvbHZka1JZRXVnNjFKZm42Y0ErcUhweVBZZFRIK1VzaElUbm1wNS9adGtmCittL1VUU0xCTkZOSGVzaVRaZUgzMU5jeFlHZEhTbWU5TmMvZ2ZpZFJhMEZMT0NmV3hSbEZxQUk0N3pHOWpBUUNaCis3WjJtQ0dETk1oalFjK0JZY2RubDBsUFhqZERLNlYwcUNnMWRWZXdoVUJjVzVnWkt6VjdlOStEcFZBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjFfY2EuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMV9jYS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4ZDk0NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjFfY2EuY3J0CkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFB6Q0NBaWVnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBMldoY05NakV3TWpFeU1UUTBOREEyV2pBOE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHakFZQmdOVkJBTVRFVkJ2YkdGeVUxTk1JRk5sY25abGNpQXhNSUlCSWpBTgorQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcVFJZlBVQnExVlZUaS8wMjdvSmxMaFZoWG9tLwordU9oRmtOdnVpQlpTMC9GRFVFZVdFbGxraDJ2OUsrQkcrWE8rM2MrUzRaRmI3V2FnYjRrcGVVV0EwSU5xMVVGRAorZDE4NWZBa0VSNEt3VnpsdzdhUHNGUmtlcURNSVI4RUZRcW45VE1PMDM5MEdIMDBRVVVCbmN4TVBRUGh0Z1NWZgorQ3JGVHhqQitGVG1zK1ZydWY1S2VwZ1ZiNXhPWGhiVWprdG5VSkFiVkNTV0pkUWZkcGhxUFB3a1p2cTFsTEdUcgorbFp2Yy9rRmVGNmJhYkZ0cHpBSzZGQ3dXSkp4SzNNM1E5MUpuYy9FdG9DUDlmdlF4eWkxd3lva0xCTnN1cGs5dworYnA3T3ZWaUo0bE5abm01YWttWGlpRDhNbEJtajNlWG9uWlVUN1NuYnEzQVMzRnJLYXhlclVvSlVzUUlEQVFBQgorbzAwd1N6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlFmZE5ZL0tjRjBkRVU3QlJJc1BhaTlRMWtDcGpBZgorQmdOVkhTTUVHREFXZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS96QU5CZ2txaGtpRzl3MEJBUVVGQUFPQworQVFFQXZjK1d3WlVlbXNKdTJJaUkyQ3A2bGlBK1VBdkl4OThkUWUza1pzMnpBb0Y5VndRYlhjWXpXUS9CSUxragorTkltS2JQTDl4MGcyaklEbjRadkdZRnl3TXdJTy9kKytZYndZaVF3NDIvdjdSaU15OTR6QlBuemVIaTg2ZHkvMAoranBPT0pVeDNJWFJzR0xkeWpiLzFUMTFrbGNGcUduQVJpSys4VllvbE1QUDZhZkt2TFhYN0s0a2lVcHNGUWhVcAorRTVWZU01cFYxTWNpMkVUT0phdTJjTzQwRkp2SS9DOVcvd1IrR0FBck1hdzJmeEc3N0UzbGFhYTBMQU9sZXhNNgorQTRLT2I1ZjVjR1RNNUloNnRFRjVGVnEzLzl2ek5JWU1hMUZxemFjQkxaRjh6U0hZTEVpbVhCZHpqQm9ONHFEVQorL1d6UnlZUkJSakFJNDltekhYNnJhbGVxbnc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEaHpDQ0FtK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREF3V2hjTk1qRXdNakV5TVRRME5EQXdXakE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd2dnRWlNQTBHCitDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRREEzemY4Rjd2Z2xwMC9odDZXTW4xRXBSYWd6U0h4CittZFRzNnN0OEdGZ0lsS1hzbThXTDN4b2VtVGlaaHg1N3dJMDUzemhkY0hnSDA1N1prK2k1Y2xIRnpxTXdVcW55Cis1MEJ3Rk10RW9uSUx3dVZBK1Q3bHBnNnorZXhLWThDNEtRQjBuRmM3cUtVRWtISHh2WVBaUDlhbDRqd3FqKzhuCitZTVBHbjh1NjdHQjl0K2FFTXI1UCsxZ21JZ05iMUxUVisvWGpsaTV3d09RdXZmd3U3dUpCVmNBMExuMGtjbW5MCitSN0VVUUlOOVovU0c5akdyOFhta3NyVXVFdm1FRi9CaWJ5YytFMWl4VkEwaG1uTTNvVERQYjVMYzl1bjhyTnN1CitLTkYrQWtzam9CWHlPR1ZrQ2VvTWJvNGJGNkJ4eUxPYnlhdnB3L0xQaDVhUGdBSXlucGxZYjZMVkFnTUJBQUdqCitnWlV3Z1pJd0RBWURWUjBUQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpICisvZjh3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mK2hQNlE5TURzeEN6QUpCZ05WCitCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6CitkQ0JEUVlJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUF1UDFVMkFCVWtJc2xzQ2ZkbGMyaTk0UUhIWWVKCitTc1I0RWRnSHRkY2lVSTVJNjJKNk1vbStZMGRULzdhKzhTNk1WTUNaUDZDNU55TnlYdzFHV1kvWVI4MlhUSjhICitEQkppQ1RvazVEYlo2U3phT05CemRXSFh3V3dtaTV2ZzFkeG43WXhyTTlkMElqeE0yN1dOS3M0c0RRaFpCUWtGCitwam1mczJjYjRvUGw0WTlUOW1lVHgvbHZka1JZRXVnNjFKZm42Y0ErcUhweVBZZFRIK1VzaElUbm1wNS9adGtmCittL1VUU0xCTkZOSGVzaVRaZUgzMU5jeFlHZEhTbWU5TmMvZ2ZpZFJhMEZMT0NmV3hSbEZxQUk0N3pHOWpBUUNaCis3WjJtQ0dETk1oalFjK0JZY2RubDBsUFhqZERLNlYwcUNnMWRWZXdoVUJjVzVnWkt6VjdlOStEcFZBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjItYmFkc2lnbi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLWJhZHNpZ24uY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzJkM2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLWJhZHNpZ24uY3J0CkBAIC0wLDAgKzEsMjAgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRE56Q0NBaCtnQXdJQkFnSUJBakFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBMldoY05NakV3TWpFeU1UUTBOREEyV2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENDQVNJd0RRWUpLb1pJaHZjTgorQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU1GTm85M256UjNSQk5kSmNyaVpyQTU0NURvOFNzODZFeGJRV3VUTgorb3dDSXArNGVhNWFuVXJTUTd5MXllajRrbXZ5Mk5Ld2s5WGZnSm1TTW5MQW9mYUhhNm96bXlSeVd2UDdCQkZLegorTnRTait1R3hkdGlRd1dHMFpsSTJvaVpUcXF0MFhnZDlHWUxiS3RnZm9Oa05IQzFKWnZkYkpYTkc2QXVLVDJrTQordFFDUTRkcUNFR1o5cmxRcmkyVjVrYUhpWWNQTlFFa0k3bWdNOFl1RzBrYS8wTGlxRVFNZWYxYW9HaDVFR0E4UAoraFl2YWkwUmU0aGpHWWkvSFpvMzZYZGg5OHllSktRSEZrQTQvSi9Fd3lFb083OWJleDhjbmE4Y0ZQWHJFQWp5YQorSFQ0UDZEU1lXOHR6UzFLVzJCR2lMSUNJYVRsYTB3K3czbGt2RWNmMzZoSUJNSmNDQXdFQUFhTk5NRXN3Q1FZRAorVlIwVEJBSXdBREFkQmdOVkhRNEVGZ1FVcFFYb1pMamMzMkFQVUJKTllLaGtyMDJMUTVNd0h3WURWUjBqQkJndworRm9BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBSnhuWENsWQorb0hrYnA3MGNxQnJzR1hMeWJBNzRjemJPNVJkTEVnRnM3ckhWUzlyK2MyOTNsdVMvS2RsaUxTY1pxQXpZVnlsdworVWZSV3ZLTW9XaEhZS3AzZEVJUzR4VFhrNi81elh4aHY5Unc4U0djOHFuNnZJVEhrMVMxbVBldnRla2dhc1k1WQoraVdRdU0zaDRZVmxSSDNISEVNQUQxVG5BZXhmWEhIREZRR2UrQmQxaUFiejEvc0g5SDhsNFN0d1g2ZWd2VEszTQord1hSd2tLa3ZqS2FFREE5QVRiWngwbUk4TEdzeFN1Q3FlOXI5ZHlqbXR0ZDQ3SjFwMVJ1bHozQ0x6YVJjVkl1UworUlJRZmFEOG5lTTljMVMvaUovYW1UVnFKeEExS09kT1M1NzgwV2hQZlNBckErZzRxQW1TamVsYzNwNHdXcGhhOAoremh1WXdqVnVYNkpIRzA4PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi12MS1jaGFpbi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLXYxLWNoYWluLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGJiNmIyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi12MS1jaGFpbi5jcnQKQEAgLTAsMCArMSwzOCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlERlRDQ0FmMENERk9pdHRralhieEZjL20zYkRBTkJna3Foa2lHOXcwQkFRc0ZBREJPTVJvd0dBWURWUVFECitFeEZ6WlhKMlpYSXhMMmx1ZEMxallTMTJNVEVRTUE0R0ExVUVDeE1IZEdWemRHbHVaekVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hDekFKQmdOVkJBWVRBazVNTUNJWUR6SXdNVFF3TmpFNU1UQXdPVEk1V2hnUE1qQXlOREEyCitNVGd4TURBNU1qbGFNRVF4RURBT0JnTlZCQU1UQjNObGNuWmxjakl4RURBT0JnTlZCQXNUQjNSbGMzUnBibWN4CitFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUXN3Q1FZRFZRUUdFd0pPVERDQ0FTSXdEUVlKS29aSWh2Y05BUUVCCitCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNRk5vOTNuelIzUkJOZEpjcmlackE1NDVEbzhTczg2RXhiUVd1VE5vd0NJCitwKzRlYTVhblVyU1E3eTF5ZWo0a212eTJOS3drOVhmZ0ptU01uTEFvZmFIYTZvem15UnlXdlA3QkJGS3pOdFNqCisrdUd4ZHRpUXdXRzBabEkyb2laVHFxdDBYZ2Q5R1lMYkt0Z2ZvTmtOSEMxSlp2ZGJKWE5HNkF1S1Qya010UUNRCis0ZHFDRUdaOXJsUXJpMlY1a2FIaVljUE5RRWtJN21nTThZdUcwa2EvMExpcUVRTWVmMWFvR2g1RUdBOFBoWXZhCitpMFJlNGhqR1lpL0habzM2WGRoOTh5ZUpLUUhGa0E0L0ovRXd5RW9PNzliZXg4Y25hOGNGUFhyRUFqeWFIVDRQCis2RFNZVzh0elMxS1cyQkdpTElDSWFUbGEwdyt3M2xrdkVjZjM2aElCTUpjQ0F3RUFBVEFOQmdrcWhraUc5dzBCCitBUXNGQUFPQ0FRRUFpdkNDTUJmQzVZTmVvendwOHZBV3BpUlVha2h0Tzh5c3ZDZlFzWkQ0dFdMbFNrcmpvVXRHCiszUk5kOWdEVkRHYjg1Mkdzd3ROTUtISkMxQWVadVhkaDNlQm9EQk5UWG5SLzlVa0hnV05CeTVmK0pIMmlyWXJjCitwczVvZnBZSlplN0s2eFFqbCtSTGM4bmZVVWFWZlMzZEpueUxyOWs1a2c0aW40OHAraEVGNm9YREJ1MnpkdWZGCis1M2svVTk4RlR2RmtWaXNFREZ6TFh5S1gwZkFaeGZNazRxbkVvQmZsSDRmRVhma3V1YUJVVmRvR0dJTVJMTkFXCitHSXlSeHIremorT0pMK1pqakFrWTRKcXRFdVV1TGpPRG4vL0RISS9Na3FFMExBTk92YmI0YWtwZ1pzeXZTU08zCitvMzhkMXdRSHc1K2JPK1lEcWRmSWRRWGd1VTVtdFMxeEF3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRElUQ0NBZ2tDREZPaXRzY0V6VTJPdklBTHdUQU5CZ2txaGtpRzl3MEJBUXNGQURCUU1Sd3dHZ1lEVlFRRAorRXhOUWIyeGhjbE5UVENCVVpYTjBJRU5CSUhZeE1SQXdEZ1lEVlFRTEV3ZDBaWE4wYVc1bk1SRXdEd1lEVlFRSworRXdoUWIyeGhjbE5UVERFTE1Ba0dBMVVFQmhNQ1Rrd3dJaGdQTWpBeE5EQTJNVGt4TURBNU1URmFHQTh5TURJMAorTURZeE9ERXdNRGt4TVZvd1RqRWFNQmdHQTFVRUF4TVJjMlZ5ZG1WeU1TOXBiblF0WTJFdGRqRXhFREFPQmdOVgorQkFzVEIzUmxjM1JwYm1jeEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Rc3dDUVlEVlFRR0V3Sk9URENDQVNJdworRFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUtrQ0h6MUFhdFZWVTR2OU51NkNaUzRWWVY2Sgordjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaWklkci9TdmdSdmx6dnQzUGt1R1JXKzFtb0crSktYbEZnTkNEYXRWQgorUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaSHFnekNFZkJCVUtwL1V6RHROL2RCaDlORUZGQVozTVREMEQ0YllFbAorWHdxeFU4WXdmaFU1clBsYTduK1NucVlGVytjVGw0VzFJNUxaMUNRRzFRa2xpWFVIM2FZYWp6OEpHYjZ0WlN4aworNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzRmlTY1N0ek4wUGRTWjNQeExhQWovWDcwTWNvdGNNcUpDd1RiTHFaUAorY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvREpRWm85M2w2SjJWRSswcDI2dHdFdHhheW1zWHExS0NWTEVDQXdFQQorQVRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQVBKbDNmYlZlVEo2Z1ZBdkNvTFlNOEpZNVU3WmhyQ0NkQmdodworV3VaQlMvVFd3ZjRXTFAwRy9adFR5VE9FTmNUMGdXSGYwL1ZuWHROUHcyL3lCaldzTHRUWHhOMlhRbEVWZjNqLworV2NReFdnU0VTWWR4L3NUL3VUVzZxaWh1T05QV2tUUWl6bXg3T0c2dkJ1R3gzZzU0czkvb2VKS1hPcmFOcXVkMworRzRLQnJ5dE9hemxpTWZvS08yaG56YWV5ZHBhRHRiMnRaWDhhcE4vNktxUXBUQWNYc1dyWlJXOVhFSFdxMnNOegorSVIxbklFMUYvOWducWk5WHkwSFFwcnRlTFJVdk00dEVRMzVtNEgyMGVTNVk5Z0psRS9EcVhtTVE3YWlVOERnUAora3JqK1oxOHBjcnNzTytFdHYwQk9pUGptVTlUV1dwRE1qMzRlZjdVL09INXFKeGtTckE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi12MS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLXYxLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWY3OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi12MS5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlERlRDQ0FmMENERk9pdHRralhieEZjL20zYkRBTkJna3Foa2lHOXcwQkFRc0ZBREJPTVJvd0dBWURWUVFECitFeEZ6WlhKMlpYSXhMMmx1ZEMxallTMTJNVEVRTUE0R0ExVUVDeE1IZEdWemRHbHVaekVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hDekFKQmdOVkJBWVRBazVNTUNJWUR6SXdNVFF3TmpFNU1UQXdPVEk1V2hnUE1qQXlOREEyCitNVGd4TURBNU1qbGFNRVF4RURBT0JnTlZCQU1UQjNObGNuWmxjakl4RURBT0JnTlZCQXNUQjNSbGMzUnBibWN4CitFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUXN3Q1FZRFZRUUdFd0pPVERDQ0FTSXdEUVlKS29aSWh2Y05BUUVCCitCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNRk5vOTNuelIzUkJOZEpjcmlackE1NDVEbzhTczg2RXhiUVd1VE5vd0NJCitwKzRlYTVhblVyU1E3eTF5ZWo0a212eTJOS3drOVhmZ0ptU01uTEFvZmFIYTZvem15UnlXdlA3QkJGS3pOdFNqCisrdUd4ZHRpUXdXRzBabEkyb2laVHFxdDBYZ2Q5R1lMYkt0Z2ZvTmtOSEMxSlp2ZGJKWE5HNkF1S1Qya010UUNRCis0ZHFDRUdaOXJsUXJpMlY1a2FIaVljUE5RRWtJN21nTThZdUcwa2EvMExpcUVRTWVmMWFvR2g1RUdBOFBoWXZhCitpMFJlNGhqR1lpL0habzM2WGRoOTh5ZUpLUUhGa0E0L0ovRXd5RW9PNzliZXg4Y25hOGNGUFhyRUFqeWFIVDRQCis2RFNZVzh0elMxS1cyQkdpTElDSWFUbGEwdyt3M2xrdkVjZjM2aElCTUpjQ0F3RUFBVEFOQmdrcWhraUc5dzBCCitBUXNGQUFPQ0FRRUFpdkNDTUJmQzVZTmVvendwOHZBV3BpUlVha2h0Tzh5c3ZDZlFzWkQ0dFdMbFNrcmpvVXRHCiszUk5kOWdEVkRHYjg1Mkdzd3ROTUtISkMxQWVadVhkaDNlQm9EQk5UWG5SLzlVa0hnV05CeTVmK0pIMmlyWXJjCitwczVvZnBZSlplN0s2eFFqbCtSTGM4bmZVVWFWZlMzZEpueUxyOWs1a2c0aW40OHAraEVGNm9YREJ1MnpkdWZGCis1M2svVTk4RlR2RmtWaXNFREZ6TFh5S1gwZkFaeGZNazRxbkVvQmZsSDRmRVhma3V1YUJVVmRvR0dJTVJMTkFXCitHSXlSeHIremorT0pMK1pqakFrWTRKcXRFdVV1TGpPRG4vL0RISS9Na3FFMExBTk92YmI0YWtwZ1pzeXZTU08zCitvMzhkMXdRSHc1K2JPK1lEcWRmSWRRWGd1VTVtdFMxeEF3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhNGMyNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIuY3J0CkBAIC0wLDAgKzEsNzcgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMiAoMHgyKQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBGZWIgMTIgMTQ6NDQ6MDYgMjAxMSBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEZlYiAxMiAxNDo0NDowNiAyMDIxIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3QKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgyMDQ4IGJpdCk6CisgICAgICAgICAgICAgICAgICAgIDAwOmMxOjRkOmEzOmRkOmU3OmNkOjFkOmQxOjA0OmQ3OjQ5OjcyOmI4Ojk5OgorICAgICAgICAgICAgICAgICAgICBhYzowZTo3ODplNDozYTozYzo0YTpjZjozYToxMzoxNjpkMDo1YTplNDpjZDoKKyAgICAgICAgICAgICAgICAgICAgYTM6MDA6ODg6YTc6ZWU6MWU6NmI6OTY6YTc6NTI6YjQ6OTA6ZWY6MmQ6NzI6CisgICAgICAgICAgICAgICAgICAgIDdhOjNlOjI0OjlhOmZjOmI2OjM0OmFjOjI0OmY1Ojc3OmUwOjI2OjY0OjhjOgorICAgICAgICAgICAgICAgICAgICA5YzpiMDoyODo3ZDphMTpkYTplYTo4YzplNjpjOToxYzo5NjpiYzpmZTpjMToKKyAgICAgICAgICAgICAgICAgICAgMDQ6NTI6YjM6MzY6ZDQ6YTM6ZmE6ZTE6YjE6NzY6ZDg6OTA6YzE6NjE6YjQ6CisgICAgICAgICAgICAgICAgICAgIDY2OjUyOjM2OmEyOjI2OjUzOmFhOmFiOjc0OjVlOjA3OjdkOjE5OjgyOmRiOgorICAgICAgICAgICAgICAgICAgICAyYTpkODoxZjphMDpkOTowZDoxYzoyZDo0OTo2NjpmNzo1YjoyNTo3Mzo0NjoKKyAgICAgICAgICAgICAgICAgICAgZTg6MGI6OGE6NGY6Njk6MGM6YjU6MDA6OTA6ZTE6ZGE6ODI6MTA6NjY6N2Q6CisgICAgICAgICAgICAgICAgICAgIGFlOjU0OjJiOjhiOjY1Ojc5OjkxOmExOmUyOjYxOmMzOmNkOjQwOjQ5OjA4OgorICAgICAgICAgICAgICAgICAgICBlZTo2ODowYzpmMTo4Yjo4NjpkMjo0NjpiZjpkMDpiODphYToxMTowMzoxZToKKyAgICAgICAgICAgICAgICAgICAgN2Y6NTY6YTg6MWE6MWU6NDQ6MTg6MGY6MGY6ODU6OGI6ZGE6OGI6NDQ6NWU6CisgICAgICAgICAgICAgICAgICAgIGUyOjE4OmM2OjYyOjJmOmM3OjY2OjhkOmZhOjVkOmQ4OjdkOmYzOjI3Ojg5OgorICAgICAgICAgICAgICAgICAgICAyOTowMTpjNTo5MDowZTozZjoyNzpmMTozMDpjODo0YTowZTplZjpkNjpkZToKKyAgICAgICAgICAgICAgICAgICAgYzc6Yzc6Mjc6NmI6Yzc6MDU6M2Q6N2E6YzQ6MDI6M2M6OWE6MWQ6M2U6MGY6CisgICAgICAgICAgICAgICAgICAgIGU4OjM0Ojk4OjViOmNiOjczOjRiOjUyOjk2OmQ4OjExOmEyOjJjOjgwOjg4OgorICAgICAgICAgICAgICAgICAgICA2OTozOTo1YTpkMzowZjpiMDpkZTo1OToyZjoxMTpjNzpmNzplYToxMjowMToKKyAgICAgICAgICAgICAgICAgICAgMzA6OTcKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAgICAgICAgICAgICBDQTpGQUxTRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEE1OjA1OkU4OjY0OkI4OkRDOkRGOjYwOjBGOjUwOjEyOjREOjYwOkE4OjY0OkFGOjREOjhCOjQzOjkzCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIDljOjY3OjVjOjI5OjU4OmEwOjc5OjFiOmE3OmJkOjFjOmE4OjFhOmVjOjE5OjcyOmYyOjZjOgorICAgICAgICAwZTpmODo3MzozNjpjZTplNToxNzo0YjoxMjowMTo2YzplZTpiMTpkNTo0YjpkYTpmZTo3MzoKKyAgICAgICAgNmY6Nzc6OTY6ZTQ6YmY6Mjk6ZDk6NjI6MmQ6Mjc6MTk6YTg6MGM6ZDg6NTc6Mjk6NzA6NTE6CisgICAgICAgIGY0OjU2OmJjOmEzOjI4OjVhOjExOmQ4OjJhOjlkOmRkOjEwOjg0OmI4OmM1OjM1OmU0OmViOgorICAgICAgICBmZTo3Mzo1ZjoxODo2ZjpmNToxYzozYzo0ODo2NzozYzphYTo3ZTphZjoyMTozMTplNDpkNToKKyAgICAgICAgMmQ6NjY6M2Q6ZWI6ZWQ6N2E6NDg6MWE6YjE6OGU6NTg6ODk6NjQ6MmU6MzM6Nzg6Nzg6NjE6CisgICAgICAgIDU5OjUxOjFmOjcxOmM3OjEwOmMwOjAzOmQ1OjM5OmMwOjdiOjE3OmQ3OjFjOjcwOmM1OjQwOgorICAgICAgICA2NzpiZTowNTpkZDo2MjowMTpiYzpmNTpmZTpjMTpmZDoxZjpjOTo3ODo0YTpkYzoxNzplOToKKyAgICAgICAgZTg6MmY6NGM6YWQ6Y2M6YzE6NzQ6NzA6OTA6YTk6MmY6OGM6YTY6ODQ6MGM6MGY6NDA6NGQ6CisgICAgICAgIGI2OjcxOmQyOjYyOjNjOjJjOjZiOjMxOjRhOmUwOmFhOjdiOmRhOmZkOjc3OjI4OmU2OmI2OgorICAgICAgICBkNzo3ODplYzo5ZDo2OTpkNToxYjphNTpjZjo3MDo4YjpjZDphNDo1Yzo1NDo4Yjo5Mjo0NToKKyAgICAgICAgMTQ6MWY6Njg6M2Y6Mjc6Nzg6Y2Y6NWM6ZDU6MmY6ZTI6Mjc6ZjY6YTY6NGQ6NWE6ODk6YzQ6CisgICAgICAgIDBkOjRhOjM5OmQzOjkyOmU3OmJmOjM0OjVhOjEzOmRmOjQ4OjBhOmMwOmZhOjBlOjJhOjAyOgorICAgICAgICA2NDphMzo3YTo1NzozNzphNzo4YzoxNjphNjoxNjpiYzpjZToxYjo5ODpjMjozNTo2ZTo1ZjoKKyAgICAgICAgYTI6NDc6MWI6NDcKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRE56Q0NBaCtnQXdJQkFnSUJBakFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBMldoY05NakV3TWpFeU1UUTBOREEyV2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENDQVNJd0RRWUpLb1pJaHZjTgorQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU1GTm85M256UjNSQk5kSmNyaVpyQTU0NURvOFNzODZFeGJRV3VUTgorb3dDSXArNGVhNWFuVXJTUTd5MXllajRrbXZ5Mk5Ld2s5WGZnSm1TTW5MQW9mYUhhNm96bXlSeVd2UDdCQkZLegorTnRTait1R3hkdGlRd1dHMFpsSTJvaVpUcXF0MFhnZDlHWUxiS3RnZm9Oa05IQzFKWnZkYkpYTkc2QXVLVDJrTQordFFDUTRkcUNFR1o5cmxRcmkyVjVrYUhpWWNQTlFFa0k3bWdNOFl1RzBrYS8wTGlxRVFNZWYxYW9HaDVFR0E4UAoraFl2YWkwUmU0aGpHWWkvSFpvMzZYZGg5OHllSktRSEZrQTQvSi9Fd3lFb083OWJleDhjbmE4Y0ZQWHJFQWp5YQorSFQ0UDZEU1lXOHR6UzFLVzJCR2lMSUNJYVRsYTB3K3czbGt2RWNmMzZoSUJNSmNDQXdFQUFhTk5NRXN3Q1FZRAorVlIwVEJBSXdBREFkQmdOVkhRNEVGZ1FVcFFYb1pMamMzMkFQVUJKTllLaGtyMDJMUTVNd0h3WURWUjBqQkJndworRm9BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBSnhuWENsWQorb0hrYnA3MGNxQnJzR1hMeWJBNzRjemJPNVJkTEVnRnM3ckhWUzlyK2MyOTNsdVMvS2RsaUxTY1pxQXpZVnlsdworVWZSV3ZLTW9XaEhZS3AzZEVJUzR4VFhrNi81elh4aHY5Unc4U0djOHFuNnZJVEhrMVMxbVBldnRla2dhc1k1WQoraVdRdU0zaDRZVmxSSDNISEVNQUQxVG5BZXhmWEhIREZRR2UrQmQxaUFiejEvc0g5SDhsNFN0d1g2ZWd2VEszTQord1hSd2tLa3ZqS2FFREE5QVRiWngwbUk4TEdzeFN1Q3FlOXI5ZHlqbXR0ZDQ3SjFwMVJ1bHozQ0x6YVJjVkl1UworUlJRZmFEOG5lTTljMVMvaUovYW1UVnFKeEExS09kT1M1NzgwV2hQZlNBckErZzRxQW1TamVsYzNwNHdXcGhhOAoremh1WXdqVnVYNkpIRzBjPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGE3NjRhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5rZXkKQEAgLTAsMCArMSwyNyBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJRXBBSUJBQUtDQVFFQXdVMmozZWZOSGRFRTEwbHl1Sm1zRG5qa09qeEt6em9URnRCYTVNMmpBSWluN2g1cgorbHFkU3RKRHZMWEo2UGlTYS9MWTByQ1QxZCtBbVpJeWNzQ2g5b2RycWpPYkpISmE4L3NFRVVyTTIxS1A2NGJGMgorMkpEQlliUm1VamFpSmxPcXEzUmVCMzBaZ3RzcTJCK2cyUTBjTFVsbTkxc2xjMGJvQzRwUGFReTFBSkRoMm9JUQorWm4ydVZDdUxaWG1Sb2VKaHc4MUFTUWp1YUF6eGk0YlNSci9RdUtvUkF4NS9WcWdhSGtRWUR3K0ZpOXFMUkY3aQorR01aaUw4ZG1qZnBkMkgzeko0a3BBY1dRRGo4bjhURElTZzd2MXQ3SHh5ZHJ4d1U5ZXNRQ1BKb2RQZy9vTkpoYgoreTNOTFVwYllFYUlzZ0locE9WclREN0RlV1M4UngvZnFFZ0V3bHdJREFRQUJBb0lCQVFDWFIwUzhFSUhGR09SWgorKytBdE9nNmVFTnhEK3hWczBmMUllR3o1N1RqbzNRblhYN1ZCWk5kaitwMUVDdmhDRS9HN1hua2dVNWhMWlgrRworWjBqa3ovdHFKT0kwdlJTZExCYmlwSG5Xb3V5QlE0ZS9BMXlJSmRsQnRxWHhKMUtFL2l0dUhSYk5jNGo0a0w4WgorL3I2cHZ3blRJMFBTeDJFcXMwNDhZZFM5MkxUNnFBdjRmbGJORHhNbjJ1WTdzNHljUzRROHcxSlhuQ2VhQW5ZbQorV1lJNXd4TytidlJFTFIyTWN6NURtVm5MOGpSeW1sNmw2NTgyYlN2NW91ZlJlRklieVBaYlFXbFhnWW5wdTZIZQorR1RjN0UxektZUUdHLzkrRFFVbC8xdlF1Q1BxUXdueTB0UW9YMnc1dGRZcGRNZFZtK3prTHRiYWp6ZFR2aUpKYQorVFd6TDZsdDVBb0dCQU44NitTVmVKRGNtUUpjdjRFcTZVaHRScjRRR01pUU16MFNvZDZldHRZeFl6TWd4dHcyOAorQ0lyZ3BvekNjK1VhWkpMbzdVeHZDNmFuODVyMWIybktQQ0xRRmFnZ0owSDRRMEovc1pPaEJJWGFvQnpXeHZlSworbnVwY2VLZFZ4R3NGaThDRHk4NkRCZml5Rml2ZkJqKzQ3QmJhUXpQQmo3QzRySzdVbExqYWIyckRBb0dCQU4ydQorQU0yZ2Nob0ZpdTR2MUhGTDhEN2x3ZUVwaTZabk1Kam5FdS9kRWdHUUpGandkcExuUGJzajRjNzVvZFE0R3o4Zworc3c5bGFvOVZWemJ1c29SRS9KR0k0YVRkTzBwQVRYeUc3ZUcxUXUrNVljMVlHWGNDcmxpQTJ4TTl4eCtkN2YrcworbVB6TitXSUVnNUdKRFlaRGpBekhHNUJOdmkvRmZNMUM5ZE90anYyZEFvR0FGMHQ1S213YmpXSEJoY1ZxTzRJYworQlZ2TjNCSWxjMXVlMllSWEVEbHhZNWIwcjhONFhjZU1nS21XMThPSEFwWnhmbDh1UERhdVdaTFhPZ2w0dWVwdgord2haQzNFdVdyU3l5SUNOaExZMjFBaDdoYklFQlBGM0wzWnNPd0MrVUVyTCtkWFdMZEI1NkpneTNnWmFCZVc3YgordkRyRW5vY0picUNtN0l1a2hYSE9CSzhDZ1lFQXdxZEhCMGhxeU5TeklPR1k3djlhYnpCNnBVZEEzQlppUXZFcworM0xqSFZkNEhQSjJ4ME44Q2dyQklXT0UwcTgrMGhTTW1lRTk2V1cvN2pEM2ZQV3dDUjV6bFhrbnhCUXNmdjBnUAorM0JDNVBSMFFkeXB6K2QrOXpmTWY2MjVreWl0NFQvaHp3aER2ZVpVekhuazFDZitJRzdRK1RPRW5MbldBV0JFRAorSVNPV21yVUNnWUFGRW1SeGd3QWMvdStENnQwc3lDd0FZaDZQT3RzY3E5WTBpOUd5V2s4OU56Z0M0TmR3d2JCSAorNEFnYWhPeEl4WHgyZ3hKbnEzeWZrSmZJandmMHMyRHlQMGtZMnk2VWExT2VvbVBlWTltcklTNHRDdURRNkxyRQorVEI2bDlWR294Skw0ZnlIblpiOEw1Z0d2bkIxYmJEOGNMNllQYURpT2hjUnNlQzl2QmlFdVZnPT0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWRzLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIua3UtZHMuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZDA3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWRzLmNydApAQCAtMCwwICsxLDIxIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURpakNDQW5LZ0F3SUJBZ0lCTERBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01UUXdOREE1TURnME5EVXhXaGNOTWpRd05EQTJNRGcwTkRVeFdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERDQ0FTSXdEUVlKS29aSWh2Y04KK0FRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNRk5vOTNuelIzUkJOZEpjcmlackE1NDVEbzhTczg2RXhiUVd1VE4KK293Q0lwKzRlYTVhblVyU1E3eTF5ZWo0a212eTJOS3drOVhmZ0ptU01uTEFvZmFIYTZvem15UnlXdlA3QkJGS3oKK050U2ordUd4ZHRpUXdXRzBabEkyb2laVHFxdDBYZ2Q5R1lMYkt0Z2ZvTmtOSEMxSlp2ZGJKWE5HNkF1S1Qya00KK3RRQ1E0ZHFDRUdaOXJsUXJpMlY1a2FIaVljUE5RRWtJN21nTThZdUcwa2EvMExpcUVRTWVmMWFvR2g1RUdBOFAKK2hZdmFpMFJlNGhqR1lpL0habzM2WGRoOTh5ZUpLUUhGa0E0L0ovRXd5RW9PNzliZXg4Y25hOGNGUFhyRUFqeWEKK0hUNFA2RFNZVzh0elMxS1cyQkdpTElDSWFUbGEwdyt3M2xrdkVjZjM2aElCTUpjQ0F3RUFBYU9CbnpDQm5EQUoKK0JnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCU2xCZWhrdU56ZllBOVFFazFncUdTdlRZdERrekJqQmdOVkhTTUUKK1hEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5LzZFL3BEMHdPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVAKK0JnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CZ2dFQU1Bc0cKK0ExVWREd1FFQXdJSGdEQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFjNGt1YkFTckZYRnRwbGtZcDZGVWNuVW4KK1BmLzZsYVMxaHRJKzN5K3ExVUhXZTJQY2FnWnRDSFRDVUdCU1dMZVVJaWFJQmhlYUlScXYrNHNTRlZ1WEI3aFYKKzBQR1hwTzVidHRoNFI4Qkh6R3FDZE9iS3ZQdWpwNUJEcTN4Z2NBRmljQTNIVU1Oc0pvVER2L1JZWFk3amUxUTUKK250VnlWUGVqaTBBV01VWVFqY3FIVFFRUEdCZ2RKclJUTWFZZ2xaaDE1SWhKMTZJQ05kOXJXSWVCQTBoLytyMHkKK1F1RkVCejBuZmU3RHZwcWN0N2dKQ3YrNy81dEN1ang0TFQxN3o3b0s4QlpONVNlUEFHVTJ5a0pzVVhrOFpJQ1QKK29uZ2FRUVZRd1M2L0dKNkE1VjhlY2FVdkZyVGJ5MWg5KzJzT1c4bjJOUkdpYWFHNWdrdnhWZWF5ZW1jbU9RPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIua3UtZHNfa2UuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5rdS1kc19rZS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJlZTdlMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIua3UtZHNfa2UuY3J0CkBAIC0wLDAgKzEsMjEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGlqQ0NBbktnQXdJQkFnSUJNREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRRd05EQTVNVEF3TWpRNVdoY05NalF3TkRBMk1UQXdNalE1V2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENDQVNJd0RRWUpLb1pJaHZjTgorQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU1GTm85M256UjNSQk5kSmNyaVpyQTU0NURvOFNzODZFeGJRV3VUTgorb3dDSXArNGVhNWFuVXJTUTd5MXllajRrbXZ5Mk5Ld2s5WGZnSm1TTW5MQW9mYUhhNm96bXlSeVd2UDdCQkZLegorTnRTait1R3hkdGlRd1dHMFpsSTJvaVpUcXF0MFhnZDlHWUxiS3RnZm9Oa05IQzFKWnZkYkpYTkc2QXVLVDJrTQordFFDUTRkcUNFR1o5cmxRcmkyVjVrYUhpWWNQTlFFa0k3bWdNOFl1RzBrYS8wTGlxRVFNZWYxYW9HaDVFR0E4UAoraFl2YWkwUmU0aGpHWWkvSFpvMzZYZGg5OHllSktRSEZrQTQvSi9Fd3lFb083OWJleDhjbmE4Y0ZQWHJFQWp5YQorSFQ0UDZEU1lXOHR6UzFLVzJCR2lMSUNJYVRsYTB3K3czbGt2RWNmMzZoSUJNSmNDQXdFQUFhT0JuekNCbkRBSgorQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJTbEJlaGt1TnpmWUE5UUVrMWdxR1N2VFl0RGt6QmpCZ05WSFNNRQorWERCYWdCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvNkUvcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUAorQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUFzRworQTFVZER3UUVBd0lGb0RBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQW5XNytoODV4QlAyS0p6RlNwV2ZHaXJWZQorQXBkQzliWDBaMXNWTW1ENDg2Tit0eTlXNkJQNmtKUnhMRFgwZk91UmMzeDdtQ3k1cVpnL1lqNDAreVFTb0EwdworYlROd0pqdVI4aU1xV0lxTHc5aFdSK0U5VDRsWUxaV3lHSlZqbFZUa080aTV3aWZ3aG9KRTlEb29oaC82Y3JuNQorSW1XZ0VrZ1Qvd0RWSUhvYW1jaU82S1UzNmQwaUFFRVAyZVlneHYyL3NWSHZqanNzZVRkdlloM0QzVnVPbVF0UwordVV2RnhjNkg1a1lvcS95b2RKV0RhT24zUlM4cEVwRHNpVythYmNXeXhOVFB0SEZyb0pWN2U5YWFWbWhsUlN6dworc1lEeUQvWnlJbGF2b1BTRWlEM0xUVC9UcDZCSXB6K3piNFdIT0hMRXZVQ3NacHV0cXhQVmNOb0VBaTl4dUE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5rdS1rYS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWthLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGY3YzRhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5rdS1rYS5jcnQKQEAgLTAsMCArMSwyMSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEaWpDQ0FuS2dBd0lCQWdJQktqQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVFF3TkRBNU1EZzBOREl6V2hjTk1qUXdOREEyTURnME5ESXpXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0NBU0l3RFFZSktvWklodmNOCitBUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTUZObzkzbnpSM1JCTmRKY3JpWnJBNTQ1RG84U3M4NkV4YlFXdVROCitvd0NJcCs0ZWE1YW5VclNRN3kxeWVqNGttdnkyTkt3azlYZmdKbVNNbkxBb2ZhSGE2b3pteVJ5V3ZQN0JCRkt6CitOdFNqK3VHeGR0aVF3V0cwWmxJMm9pWlRxcXQwWGdkOUdZTGJLdGdmb05rTkhDMUpadmRiSlhORzZBdUtUMmtNCit0UUNRNGRxQ0VHWjlybFFyaTJWNWthSGlZY1BOUUVrSTdtZ004WXVHMGthLzBMaXFFUU1lZjFhb0doNUVHQThQCitoWXZhaTBSZTRoakdZaS9IWm8zNlhkaDk4eWVKS1FIRmtBNC9KL0V3eUVvTzc5YmV4OGNuYThjRlBYckVBanlhCitIVDRQNkRTWVc4dHpTMUtXMkJHaUxJQ0lhVGxhMHcrdzNsa3ZFY2YzNmhJQk1KY0NBd0VBQWFPQm56Q0JuREFKCitCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlNsQmVoa3VOemZZQTlRRWsxZ3FHU3ZUWXREa3pCakJnTlZIU01FCitYREJhZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS82RS9wRDB3T3pFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQCitCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3dGd1lEVlFRREV4QlFiMnhoY2xOVFRDQlVaWE4wSUVOQmdnRUFNQXNHCitBMVVkRHdRRUF3SURDREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBcmlQbG9JV2Z1N1U4ZDFobHM5N0M3T0JJCitPaUUyeEZoMlVtdU4vOWhUSzJDeVc2TXRCZjhhRzNsNGpRRHJzdXRITzBnVXlvUjY3dWc0eWorcyswUy96RVRaCitxNm1QbzdjQmJWd2poR2NpUVJpWWd1ZkZwZG5iWFIwNUhEZ09WUEs3cXFqTDZVT1puYnU1Y2FJRXZJSmdkd1huCituOFdCOXgvSWk0LzJTOXlzbVJkUmhEQllla3pnSDNBYzJVbkhKVE1oMVhhU0w4MTdNVzZCOUJES0h0NHhhN3BXCitjcGxEenJGS1libXhTU3h6QUxFNERyK3pSdm1EeDRiY1lwQmtSUmZPaG5uUjFjYVFCZ2FaelBjWC9WdSt2dzhlCitxczJueUJXNVJCdThNQkNCVTFEcHFPU282amwwUVRwdXEzTnpRWklvdUc5Znlja3FESlM1aWJyeFFUdXRQdz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWtlLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIua3Uta2UuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYWEwYzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWtlLmNydApAQCAtMCwwICsxLDIxIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURpakNDQW5LZ0F3SUJBZ0lCS3pBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01UUXdOREE1TURnME5ETTVXaGNOTWpRd05EQTJNRGcwTkRNNVdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERDQ0FTSXdEUVlKS29aSWh2Y04KK0FRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNRk5vOTNuelIzUkJOZEpjcmlackE1NDVEbzhTczg2RXhiUVd1VE4KK293Q0lwKzRlYTVhblVyU1E3eTF5ZWo0a212eTJOS3drOVhmZ0ptU01uTEFvZmFIYTZvem15UnlXdlA3QkJGS3oKK050U2ordUd4ZHRpUXdXRzBabEkyb2laVHFxdDBYZ2Q5R1lMYkt0Z2ZvTmtOSEMxSlp2ZGJKWE5HNkF1S1Qya00KK3RRQ1E0ZHFDRUdaOXJsUXJpMlY1a2FIaVljUE5RRWtJN21nTThZdUcwa2EvMExpcUVRTWVmMWFvR2g1RUdBOFAKK2hZdmFpMFJlNGhqR1lpL0habzM2WGRoOTh5ZUpLUUhGa0E0L0ovRXd5RW9PNzliZXg4Y25hOGNGUFhyRUFqeWEKK0hUNFA2RFNZVzh0elMxS1cyQkdpTElDSWFUbGEwdyt3M2xrdkVjZjM2aElCTUpjQ0F3RUFBYU9CbnpDQm5EQUoKK0JnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCU2xCZWhrdU56ZllBOVFFazFncUdTdlRZdERrekJqQmdOVkhTTUUKK1hEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5LzZFL3BEMHdPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVAKK0JnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CZ2dFQU1Bc0cKK0ExVWREd1FFQXdJRklEQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFxcmVMQUl1eGVMR0tiaG9FUk9ZUnFYeE8KK25kYUM2dURjcHhoZ21FVzdCMkRXNlp0WDgxNTV2M292NjFNdU1hczhmRVFqRDVTVERQOXFFUnhOVGVQbmhXM20KK2tEWmQyalVCRTNpb0hoVEJ2NDdpMVBZVStEUmU0MmtZNnowalVtTlBLOFRzVEtmZGJxVEdYZzlUSGUxS1lCN3EKK2hkbGpxR1MwOElnQmwvcTJsSzJPT1N5Y3UyN3hoZmI5TW8wQmNMQmFiOTJXZ3lCdStjRlBRc0tpTDRtRDdReUoKKys3M05kYjIxRXVBTlVqc1JEUTNOUGtsc3NKY3lKQjJ2ODVlZWt3azFhY1pVRzIxbm8zd2RUdmp4aFZFL1hyZHoKK3pVUDlXa3ZBVmZVcndHalV6RzRZSEU4d2tITzd4S2JLaXhOdCtuUW1EaGUrdEhWYnp0WmpWd0ZKODAxMGdnPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjMuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMy5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwZDY5NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjMuY3J0CkBAIC0wLDAgKzEsMTcgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ29qQ0NBWXFnQXdJQkFnSUJEVEFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRNd09EQTVNRGt4TnpBeldoY05Nak13T0RBM01Ea3hOekF6V2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJKTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VCQXpJQUJIMEFvUXlVaFBBQlMzOHk2N3VFVnM0TzNSWG1LS3JCZFVSNy9MMlFQQjhFQzJwNQorZlFjc2VqNkVGYXN2bFRkSi82T0JrakNCanpBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCVGtGMnMyc2dhSgorT3RsZVE3YmdaSDJIcTMzZU56QmpCZ05WSFNNRVhEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5LzZFLworcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUQorYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFCam1TSWpHS0QxZUg1VworNGJsMk1YZk5Jc1R3YzJ2di9NQUFoQnpCRWJUWGQzVDM3K3pBR1BHaktuY3ZUQitvdWZVVlJHa29LYmZvQzZKbQorRFlTRVV1eHRuVVpPa28vQy8vWGxDRXRLMFR1UzJhTEVxRjNnSmpCSlRDZnRoRWRBaEpDdG1QQVFEQ3plS3NkeAorQ29PdEgwTlF4NlhsNjRvRHQyd1lTUU5XVVRHTFBmUnBkc1ZFdkJIaEhZQVRRaWprbDJaSDhCRGpzWWNCaWNyUworcW1DZU4rMFQxQjl2ck9RVkVaZStmd2d6VkwzOG44bGtKWk5QSWJkb3ZBOVdMSHdYQUV6UHY0bGEzdzBxaDRUYgora1NiOEh0SUxsNEk0NzRReHJGeXd5bHlYUi9wMnpuUGxlUklSZ0I1SHRVcDl0TFNXa0IwYndNbHFRbGcyRUhYdQorQ0FRMXNYbVEKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjMua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMy5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVjZjQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjMua2V5CkBAIC0wLDAgKzEsNSBAQAorLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCitNRjhDQVFFRUdJdFRvZ3BFN0FPbmp2WXVUcW0rOU9hYm1zWDAyWEtJQXFBS0JnZ3Foa2pPUFFNQkFhRTBBeklBCitCSDBBb1F5VWhQQUJTMzh5Njd1RVZzNE8zUlhtS0tyQmRVUjcvTDJRUEI4RUMycDVmUWNzZWo2RUZhc3ZsVGRKCisvdz09CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjFhYTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI0LmNydApAQCAtMCwwICsxLDE4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUM2akNDQW5DZ0F3SUJBZ0lCQ0RBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UTXdPVEkwTVRVMU1qQTBXaGNOTWpNd09USXlNVFUxTWpBMFdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERDQ0FTSXdEUVlKS29aSWh2Y04KK0FRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFLdlhqTDVWZlljN0QvdHJ1cUVwWWNaY3ZsVWhudUNOREpjdFlESkwKK3ZnWVlqNXV4RHhMSEJYdm5FSExnTzVLK2xwczQycCtyL2RkNG9FNjR0dFJvZVpaVXZyKzdlQm5XMzVuMEVwUEEKK0lrOUd3dSt2ZzdHZnhtaWZnSVI4aFpuT1FrdDJPanZ2cENoUEN4dlVhaWx0QjQ1MEl6aCttRUsvaFlGcis3SmwKK05ueFIxWFFsYmJ5RE03RWN0MUh3WWN1UzNNQmxCcXEwNDhKKzBLRWtRWElDU2pLZUhGZ2E5ZURDcStKeWZxZTUKK2J0MEszMGhsMU4wMTY0Qjdhb2gwOEVvbW1lK2FTdUFzeitNc0ozbTdBTzJEVVlkckR4bHJreTFRcnZSV1dmWDAKK2Q4ZGpUTSt1SFRvMUR2aVJNNm85K1A5RGZvRmQ1My9aMEttMDNzVkxRV3ZVcmhFQ0F3RUFBYU9CblRDQm1qQUoKK0JnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCVEFsQW0xKzBMNDFtaHFZV2pGaWVqc1JWckdlVEJ1QmdOVkhTTUUKK1p6QmxnQlNkYlNBa1NRRS9LOHQ0dFJtOGZpVEoyL3MyZktGQ3BFQXdQakVMTUFrR0ExVUVCaE1DVGt3eEVUQVAKK0JnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJ3d0dnWURWUVFERXhOUWIyeGhjbk56YkNCVVpYTjBJRVZESUVOQmdna0EKK3dVUGlmbUpEek9nd0NnWUlLb1pJemowRUF3SURhQUF3WlFJeEFQV2x4bk1jakJheGFWaWVRWVNMQnF6aXpTMy8KK084TmE2b3dSR1BrMC9VSytqNU85TlRCSGsrdVhXL2ZRYmxLYW1RSXdVUWw0ZGw2Z2tSREU0ckJSL3lHalpaMVoKKzNkRXB2TDJXaW10M2tlRDdBY0xwWUIyRkoxbVZjWTFYUVVlSzFWZmMKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjQua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNC5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0ZGFlZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjQua2V5CkBAIC0wLDAgKzEsMjcgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUVwQUlCQUFLQ0FRRUFxOWVNdmxWOWh6c1ArMnU2b1NsaHhseStWU0dlNEkwTWx5MWdNa3UrQmhpUG03RVAKK0VzY0ZlK2NRY3VBN2tyNldtemphbjZ2OTEzaWdUcmkyMUdoNWxsUyt2N3Q0R2RiZm1mUVNrOEFpVDBiQzc2K0QKK3NaL0dhSitBaEh5Rm1jNUNTM1k2Tysra0tFOExHOVJxS1cwSGpuUWpPSDZZUXIrRmdXdjdzbVUyZkZIVmRDVnQKK3ZJTXpzUnkzVWZCaHk1TGN3R1VHcXJUanduN1FvU1JCY2dKS01wNGNXQnIxNE1LcjRuSitwN2x1M1FyZlNHWFUKKzNUWHJnSHRxaUhUd1NpYVo3NXBLNEN6UDR5d25lYnNBN1lOUmgyc1BHV3VUTFZDdTlGWlo5ZlIzeDJOTXo2NGQKK09qVU8rSkV6cWozNC8wTitnVjNuZjluUXFiVGV4VXRCYTlTdUVRSURBUUFCQW9JQkFIbnh0WXZnQ1B0dEcxTlUKK3lKVFRVL0k3SUVveldKYUxJWk1xZlNoVC9aNC8wYkV2ZmIzYWcvYkFLemtLRE54KzZVdHZsaDFYSlFUQ01paUwKK0JodEhwSGpjM0p3ZEFnWjhLQ01OUkIyYmEvMkwvb3V1cHFybThocU9qZG4ycjZ4TTVWaTlwbWVnRUlNV1RKRE0KK05TWCtuQzBvRjFKZzY5WDZLVmlGYzVET0tGTWhhY1NFd0xKa3YvRXFDZ2RXYUJvcU1sVHRUV0tkbTM0eFNOMkwKK1A1bzlrT2dpaFRCTlVVblZCVVdKaVQ3QzZiQkFGd2IxckVDcHZOT2s2aCtsdkcrZlNEWktZZHdCckFzS3NwSXkKKy9hWFpENHFhaWNlZkdibHJIY1p2Mm9nL3pZa0ZzNHJpV05PbWdseFp5cksvM3JGRmswQjhtQmsxbVdRdnJLNysKK0pxL1I0azBDZ1lFQTBoTzI5aEpqZVRCRGRPV2d6eVhyNXVwcG1SMVdVN2Z2L0p5OFBMUk12VXZtaU1RcVJESzMKK3p3R2M2SDkzOHdkc3VicGRUQ0xQaHEwcmhEQ1RxdHdJRUF1RmpaSVlKczR5WnpmeTZrbGFEMzUxNmlJZ2IrVzcKK2ZlMVJrWU1CcDl3VjB4MjcydnpQNFk1cC9menA1eGh2TjUyT2toUXNqSFJIZXdmRGFVd1NGU2NDZ1lFQTBXZ2kKK2tHVks2T3h6b01DZ2lXeC9MK3kzeXJZdUhkV0FOVElJYTVSdlprNFVRcUVGa0dZR1ZQMXJwYkIvZkFhMVlxZXYKK3FYa0xacWFkMmRoSkN1QlZyeUd0MjlDSHNibkVRL1F1VHdsR215WmoxVThObkpCZ05DUFRkbUdUQkltLzd3OVMKK0VTWjQ4YlVsY3F6c1puMUJpZy9BNkpYMWU1aTliLzFqeW96TlZnY0NnWUVBblJaYzQ5aVFSWmpQZUdRVlFaRUwKK3U1cGg2RHJGeU1oc1Rpc3Rudjc3dXprOFk5eTc5azh1bno2SGhGdDg2R0FPN3pycWRQbzYwR3hCZEJHVytsYWEKK09OVkV3cjRTRFVKMjhqUW1Fd2RTcnU5VFlRYXYxcnlrM045TzlVNVBPS1FjTmNld0oycVFVQXZjT2k2YkFWR0cKK0tNSktUL1dCOG0wbzNsakp5TDAzY0ZVQ2dZQm9IRlRxNDJGZDhvaitTQ2JJakNlajVSWHZjNm56N1R6anRhOVkKK0JTRnBoTEl2K2l4eEFUaHVzdHY5TVlZQVhMbDdoaEVndWV5QUthQmJPVnYvUzA5dVZkbEJheWk3cExjK2JiMUUKK1VFRkpTOG5ndUgvMDhoYlNkV2xoOXRzSUs1QkFRNmF5bmlVTlR0bUNiUlRQVThEczZpNG50TDZxcDJLdnRoUVMKK0ZQVFZxd0tCZ1FDOG0yc0phcE1tczAvN0VlR3BVd01PK1dOQ0hlUnl1am5yaVdZTDhLbXMwbG1BbjhOclFvQTUKK3dnYngwblovVnJYdExQR0h5OTE1anhEWE9VMVljMmdxRWY1UW0vR25CeVV1bWwxbVVTbGRpUGNpU0p2S3pNcVAKK0xlV25iNjJIRDYwdC96d3N0TjIwWXp0Nm1CTG9jbTFQUGRQaFB3ZUkvRUY2cFNndmx3NU5Udz09CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1iYWRzaWduLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtYmFkc2lnbi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2NTA3MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtYmFkc2lnbi5jcnQKQEAgLTAsMCArMSwxNCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDSHpDQ0FhV2dBd0lCQWdJQkNUQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVE13T1RJME1UVTFNakEwV2hjTk1qTXdPVEl5TVRVMU1qQTBXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHCitDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDJDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBCisyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY05WYzJLS2c3NkFjaTA3ZitqZ1owd2dab3dDUVlEVlIwVEJBSXdBREFkCitCZ05WSFE0RUZnUVVVR0dsajlRSDJkZUNBUXpsWlgrTVkwYW5FNzR3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCCitQeXZMZUxVWnZINGt5ZHY3Tm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoCitjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQW9HCitDQ3FHU000OUJBTUNBMmdBTUdVQ01RQ2FMRnpYcHR1aTVXUU44TGxPM2RkaDFoTXh4NnR6Z0x2VDAzTVRWSzJTCitDMTJyMEx6M3JpL21vU0VwTlpXcVBqa0NNQ0UyZjUzR1hjWUxxeWZ5SlIwNzhjL3hOU1VVNStYeGw3Vlo0MTRWCitmR2E1a0h2SEFSQlBjOFlBSVZJcUR2SEgxQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjAuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXIwLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGQ4ZGQzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXIwLmNydApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjFhLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyMWEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNTAxN2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjFhLmNydApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjFiLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyMWIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNDBkOWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjFiLmNydApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXIyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmUzMjBhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXIyLmNydApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXI0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWYwNWNjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXI0LmNydApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjguY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXI4LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWJlN2RjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXI4LmNydApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjkuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXI5LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQ3ZjFmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXI5LmNydApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWV4cGlyZWQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1leHBpcmVkLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzI2ZTVjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1leHBpcmVkLmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNIakNDQWFXZ0F3SUJBZ0lCSGpBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01EUXdNekV3TVRJd09UTXdXaGNOTVRRd016QTRNVEl3T1RNd1dqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pnWjB3Z1pvd0NRWURWUjBUQkFJd0FEQWQKK0JnTlZIUTRFRmdRVVVHR2xqOVFIMmRlQ0FRemxaWCtNWTBhbkU3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0IKK1B5dkxlTFVadkg0a3lkdjdObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGgKK2NsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bb0cKK0NDcUdTTTQ5QkFNQ0EyY0FNR1FDTUNEeHZEbWhsckVrMHI0aHFDd3ZRRHhXRW9YUGJiRDFnZ2xmTFQzQnNHcHUKK1hIVVExVzJId0Izby83TjVJMTNCQmdJd2NtRzE3enlOSU9rWWl5RXhZdFBDWkNwYm9mRU1wUlk1cVdHMEs2WUwKK2ZOMDhqU3p5RnQ2a2JPNGFrMEQ2dEM1UQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1mdXR1cmUuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1mdXR1cmUuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OWM4NGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWZ1dHVyZS5jcnQKQEAgLTAsMCArMSwxNCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDSGpDQ0FhV2dBd0lCQWdJQkhUQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNekl3TXpFd01URXdOREV4V2hjTk5ESXdNekE0TVRFd05ERXhXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHCitDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDJDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBCisyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY05WYzJLS2c3NkFjaTA3ZitqZ1owd2dab3dDUVlEVlIwVEJBSXdBREFkCitCZ05WSFE0RUZnUVVVR0dsajlRSDJkZUNBUXpsWlgrTVkwYW5FNzR3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCCitQeXZMZUxVWnZINGt5ZHY3Tm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoCitjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQW9HCitDQ3FHU000OUJBTUNBMmNBTUdRQ01BWldjYitOWXhGVksrVzZaNWVrbk0yVHJicVFHWkVZSFFYZVY5L1hGMHQ3CitUTERoQTZhL3BGRFRKVlp1bkZ6ZXNnSXdmcWtCWXV2TWtpTmxTNGxXY1Z5ZjhMNENaSUhDbjF5SG5PQ3h1OGl4Cit1cWdMYjRuYTNpOTR4OXVyZ2JaWllmVksKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2VsZnNpZ25lZC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LXNlbGZzaWduZWQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNTU2NDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LXNlbGZzaWduZWQuY3J0CkBAIC0wLDAgKzEsMTIgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQnpUQ0NBWEtnQXdJQkFnSU1VNkxMU3hKT3JZTjlxSlN5TUFvR0NDcUdTTTQ5QkFNQ01FY3hFekFSQmdOVgorQkFNVENuTmxiR1p6YVdkdVpXUXhFREFPQmdOVkJBc1RCM1JsYzNScGJtY3hFVEFQQmdOVkJBb1RDRkJ2YkdGeQorVTFOTU1Rc3dDUVlEVlFRR0V3Sk9UREFpR0E4eU1ERTBNRFl4T1RFeE16WTBNMW9ZRHpJd01qUXdOakU0TVRFegorTmpReldqQkhNUk13RVFZRFZRUURFd3B6Wld4bWMybG5ibVZrTVJBd0RnWURWUVFMRXdkMFpYTjBhVzVuTVJFdworRHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVMTUFrR0ExVUVCaE1DVGt3d1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqTworUFFNQkJ3TkNBQVEzekZiWmRna2VXbkkreDFrdC95QnU3bno1QnBGMDBLMFV0ZmRvSWxsaWtrN2xBTmdqRWYvcQorTDlJMFhWMFd2WXFJd210M0RWWE5paW9PK2dISXRPMy9vMEF3UGpBTUJnTlZIUk1CQWY4RUFqQUFNQThHQTFVZAorRHdFQi93UUZBd01IZ0FBd0hRWURWUjBPQkJZRUZMWnRVUmdYam1XcTh1elY4d0hrYkZMQ05CMWJNQW9HQ0NxRworU000OUJBTUNBMGtBTUVZQ0lRQ2YvYnpGb2dlMHBDT0lydEhyQUJnYzErQ2w5a2psc0lDcGR1WGhkSFVNT3dJaAorQU9KK25CSGZhRUd5RjRQUkp2bi9qTURlSWFIMXppc2luVnpDMnYrSlFPV3EKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTJkMTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTEuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ0hUQ0NBYVNnQXdJQkFnSUJFakFKQmdjcWhrak9QUVFCTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRAorVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRVEFlRncweAorTXpBNU1qUXhOakl4TWpkYUZ3MHlNekE1TWpJeE5qSXhNamRhTURReEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRAorVlFRS0V3aFFiMnhoY2xOVFRERVNNQkFHQTFVRUF4TUpiRzlqWVd4b2IzTjBNRmt3RXdZSEtvWkl6ajBDQVFZSQorS29aSXpqMERBUWNEUWdBRU44eFcyWFlKSGxweVBzZFpMZjhnYnU1OCtRYVJkTkN0RkxYM2FDSlpZcEpPNVFEWQorSXhILzZpL1NORjFkRnIyS2lNSnJkdzFWellvcUR2b0J5TFR0LzZPQm5UQ0JtakFKQmdOVkhSTUVBakFBTUIwRworQTFVZERnUVdCQlJRWWFXUDFBZloxNElCRE9WbGY0eGpScWNUdmpCdUJnTlZIU01FWnpCbGdCU2RiU0FrU1FFLworSzh0NHRSbThmaVRKMi9zMmZLRkNwRUF3UGpFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeQorVTFOTU1Sd3dHZ1lEVlFRREV4TlFiMnhoY25OemJDQlVaWE4wSUVWRElFTkJnZ2tBd1VQaWZtSkR6T2d3Q1FZSAorS29aSXpqMEVBUU5vQURCbEFqRUF5anZ6Uld0eGJYdmtvWVRZU1FZOWdGQnBQNy93VFoycTZGYlJpQXVaVUxGdAorbGMwUE1QRGZWWkNoZ0E2aURIK0JBakJka09iNzNmMnBPd1pwTVJxck9ncVN5bmJ0MnVXWTg3bUM1bFJsTkVvUgorV1hFdjFBekllQkN2KzgxRE4xSXV1NHc9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTIyNC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTIyNC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiMTE2OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMjI0LmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNJRENDQWFXZ0F3SUJBZ0lCRXpBS0JnZ3Foa2pPUFFRREFUQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UTXdPVEkwTVRZeU1USTNXaGNOTWpNd09USXlNVFl5TVRJM1dqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pnWjB3Z1pvd0NRWURWUjBUQkFJd0FEQWQKK0JnTlZIUTRFRmdRVVVHR2xqOVFIMmRlQ0FRemxaWCtNWTBhbkU3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0IKK1B5dkxlTFVadkg0a3lkdjdObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGgKK2NsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bb0cKK0NDcUdTTTQ5QkFNQkEya0FNR1lDTVFDajBFeUZVekRSbWZva1d6TFZFV04wZXBSNC9zWnl0Zkllb3pwNkJxV0gKK3FhVEJkQVIydnRoSUtDN2RLdVVrZzM0Q01RRDZZdEIyTzlWc283OWdielNlbjJxaDdnSzdWdkdFKzMxRVZQYlIKK0NlL29ORy8zT2ZoUlNkbjNGT3ZCQmcyVUVyTT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMzg0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMzg0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDZhNzliCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1zaGEzODQuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ0h6Q0NBYVdnQXdJQkFnSUJGREFLQmdncWhrak9QUVFEQXpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRNd09USTBNVFl5TVRJM1doY05Nak13T1RJeU1UWXlNVEkzV2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQQorMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOVmMyS0tnNzZBY2kwN2YramdaMHdnWm93Q1FZRFZSMFRCQUl3QURBZAorQmdOVkhRNEVGZ1FVVUdHbGo5UUgyZGVDQVF6bFpYK01ZMGFuRTc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQgorUHl2TGVMVVp2SDRreWR2N05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aAorY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUFvRworQ0NxR1NNNDlCQU1EQTJnQU1HVUNNUUNuc2QvNlZCMmtMSXFNUnNXZGtKdlJhUVJPeUFnNzhDUUV4RkVZM0NNdgorOXQwa1dSWFBjNG5DTUg2OVJqUVZ2QzRDTUI0bGs5QTdoblgyelF5M2JiVWhPQ092WGNzUWRFZThBTWdKQnZpegorNU5vYjJ3VGhScXNtMXdqQ0Y2MGZ5elhXdUE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1zaGE1MTIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1zaGE1MTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MTEyYWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTUxMi5jcnQKQEAgLTAsMCArMSwxNCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDSHpDQ0FhV2dBd0lCQWdJQkZUQUtCZ2dxaGtqT1BRUURCREErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVE13T1RJME1UWXlNVEkzV2hjTk1qTXdPVEl5TVRZeU1USTNXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHCitDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDJDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBCisyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY05WYzJLS2c3NkFjaTA3ZitqZ1owd2dab3dDUVlEVlIwVEJBSXdBREFkCitCZ05WSFE0RUZnUVVVR0dsajlRSDJkZUNBUXpsWlgrTVkwYW5FNzR3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCCitQeXZMZUxVWnZINGt5ZHY3Tm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoCitjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQW9HCitDQ3FHU000OUJBTUVBMmdBTUdVQ01GUEwyT0k4YXJjYlJsS0FiUmIvWWZHaWJvNE13dHM4S1gzZk91UkNiWEVuCitwRFdlYjgya0JxZlh3elBKd2FtRk93SXhBUEd6eWhXcnhuMHFFeW5XVjVuekZLMDJQWUJuWUZnQ2xJU3l5dWRICitISkdIdGJFVlJjNUpBOEFMbmdnYUxWcHV2Zz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTc0MjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNIekNDQWFXZ0F3SUJBZ0lCQ1RBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UTXdPVEkwTVRVMU1qQTBXaGNOTWpNd09USXlNVFUxTWpBMFdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pnWjB3Z1pvd0NRWURWUjBUQkFJd0FEQWQKK0JnTlZIUTRFRmdRVVVHR2xqOVFIMmRlQ0FRemxaWCtNWTBhbkU3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0IKK1B5dkxlTFVadkg0a3lkdjdObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGgKK2NsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bb0cKK0NDcUdTTTQ5QkFNQ0EyZ0FNR1VDTVFDYUxGelhwdHVpNVdRTjhMbE8zZGRoMWhNeHg2dHpnTHZUMDNNVFZLMlMKK0MxMnIwTHozcmkvbW9TRXBOWldxUGprQ01DRTJmNTNHWGNZTHF5ZnlKUjA3OGMveE5TVVU1K1h4bDdWWjQxNFYKK2ZHYTVrSHZIQVJCUGM4WUFJVklxRHZISDFRPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LWNsaS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jbGkuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYTJlNDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jbGkuY3J0CkBAIC0wLDAgKzEsMTMgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQjVEQ0NBV21nQXdJQkFnSUJQREFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRRd05ERXdNVGN5TVRJeFdoY05NalF3TkRBM01UY3lNVEl4V2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQQorMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOVmMyS0tnNzZBY2kwN2YrallqQmdNQWtHQTFVZEV3UUNNQUF3SFFZRAorVlIwT0JCWUVGRkJocFkvVUI5blhnZ0VNNVdWL2pHTkdweE8rTUI4R0ExVWRJd1FZTUJhQUZKMXRJQ1JKQVQ4cgoreTNpMUdieCtKTW5iK3paOE1CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUNNQW9HQ0NxR1NNNDlCQU1DQTJrQQorTUdZQ01RQ3pIeUV2ZDU2em0xQXpmREJpM3BzejNyREwvbTBSTjJXbmJSQlFKeElKcWp3RVhPckthemtvOW05cQorb3dnYXU4OENNUUR1STBmc3E1dG55aUhQYURTQUUyMS82aGxyQ1I2ZGVOYnd6Qjk0T3VQSWJ4MXdJYXM5RDFqYworLy9pU21LdGJsOFk9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jcy5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jcy5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5N2I0MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LWNzLmNydApAQCAtMCwwICsxLDEzIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUI0ekNDQVdtZ0F3SUJBZ0lCT2pBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UUXdOREV3TVRjeU1EUXhXaGNOTWpRd05EQTNNVGN5TURReFdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pZakJnTUFrR0ExVWRFd1FDTUFBd0hRWUQKK1ZSME9CQllFRkZCaHBZL1VCOW5YZ2dFTTVXVi9qR05HcHhPK01COEdBMVVkSXdRWU1CYUFGSjF0SUNSSkFUOHIKK3kzaTFHYngrSk1uYit6WjhNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01ETUFvR0NDcUdTTTQ5QkFNQ0EyZ0EKK01HVUNNUUMyOTRvVks2ZlVqSC9hYkkxeHp5dFR1c2k4ZGw3NTE4TDBZMTlxOHppOUsxOU90eHpQSzA5aDd4eXkKK2dhSlJ2cFVDTUZTNmhZaHJodDM4eXF3d2hTVmxubVRNVnRpcmE1OG1FVWhMNnY3UXp3MXN6L0RtNGFYa1czczYKK0pRVjFrcXFiUnc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5la3UtY3NfYW55LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LWNzX2FueS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhODYzMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LWNzX2FueS5jcnQKQEAgLTAsMCArMSwxMyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCNlRDQ0FXK2dBd0lCQWdJQk96QUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVFF3TkRFd01UY3lNRFU0V2hjTk1qUXdOREEzTVRjeU1EVTRXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHCitDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDJDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBCisyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY05WYzJLS2c3NkFjaTA3ZitqYURCbU1Ba0dBMVVkRXdRQ01BQXdIUVlECitWUjBPQkJZRUZGQmhwWS9VQjluWGdnRU01V1YvakdOR3B4TytNQjhHQTFVZEl3UVlNQmFBRkoxdElDUkpBVDhyCit5M2kxR2J4K0pNbmIrelo4TUJrR0ExVWRKUVFTTUJBR0NDc0dBUVVGQndNREJnUlZIU1VBTUFvR0NDcUdTTTQ5CitCQU1DQTJnQU1HVUNNUUNTWWFxLzlJS09Ua3pJclUvZU90cGhhLzNhZjNKd1Q2dktoNE4zY1NYNjJrc016MEdUCitVeG1xNFVHTUJ0NFZtQmtDTUJHcFlxb2Y2aFMxbzkybHROUnBEU0h1VlErbmtlMWxPc29RMXBsWnA0U0krYlkxCitiVUQvV3JVU0xsd2lrWkFlbmc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LXNydi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQzMTJmNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LXNydi5jcnQKQEAgLTAsMCArMSwxMyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCNURDQ0FXbWdBd0lCQWdJQlBqQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVFF3TkRFd01UY3lNVFUwV2hjTk1qUXdOREEzTVRjeU1UVTBXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHCitDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDJDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBCisyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY05WYzJLS2c3NkFjaTA3ZitqWWpCZ01Ba0dBMVVkRXdRQ01BQXdIUVlECitWUjBPQkJZRUZGQmhwWS9VQjluWGdnRU01V1YvakdOR3B4TytNQjhHQTFVZEl3UVlNQmFBRkoxdElDUkpBVDhyCit5M2kxR2J4K0pNbmIrelo4TUJNR0ExVWRKUVFNTUFvR0NDc0dBUVVGQndNQk1Bb0dDQ3FHU000OUJBTUNBMmtBCitNR1lDTVFEUXpqV0IweFpzLzhJc3FKYjdvd1lZdENpVDE3OTM5VXVjLzF5QkY2OXBKUnk3S1YvcUpsSE52bFZ1Citxd1dWVHgwQ01RRE5XLzBkbFgxZ1U2YXNoclp2NUx5NHNpamcvZzY0NWZGcGZNS0NOWHlzRWI5eGlCZUVqNWRlCisyeDVzWC8wT1N4ND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LXNydl9jbGkuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2X2NsaS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1OGZlZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LXNydl9jbGkuY3J0CkBAIC0wLDAgKzEsMTMgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQjdEQ0NBWE9nQXdJQkFnSUJQVEFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRRd05ERXdNVGN5TVRReVdoY05NalF3TkRBM01UY3lNVFF5V2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQQorMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOVmMyS0tnNzZBY2kwN2YramJEQnFNQWtHQTFVZEV3UUNNQUF3SFFZRAorVlIwT0JCWUVGRkJocFkvVUI5blhnZ0VNNVdWL2pHTkdweE8rTUI4R0ExVWRJd1FZTUJhQUZKMXRJQ1JKQVQ4cgoreTNpMUdieCtKTW5iK3paOE1CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFLQmdncQoraGtqT1BRUURBZ05uQURCa0FqQW1Rakp4eEM4MlpoQnBIL0dRa09RWERtYWFWL0pIUkhHb2sxY1duM2ozWGo4QQorZnFSWmtwOEppaHBHSU1zZTIwOENNRkNNZE5BZk5kMXR2K29QdXlub0s1T2g2L1lsQVNYL290SlQ2OHZvRUlBTgorU21zVDFtOVZQUU1JeVVvLzNSdFlqZz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NDU5ZWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LmtleQpAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUhjQ0FRRUVJUEVxRXlCMkFuQ29QTC85VS9ZREh2ZHFYWWJJb2dUeXd3eXA2L1VmRHc2bm9Bb0dDQ3FHU000OQorQXdFSG9VUURRZ0FFTjh4VzJYWUpIbHB5UHNkWkxmOGdidTU4K1FhUmROQ3RGTFgzYUNKWllwSk81UURZSXhILworNmkvU05GMWRGcjJLaU1KcmR3MVZ6WW9xRHZvQnlMVHQvdz09CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1Lmt1LWRzLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua3UtZHMuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZGQwNzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1Lmt1LWRzLmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNMVENDQWJLZ0F3SUJBZ0lCTFRBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UUXdOREE1TURnME9ETTFXaGNOTWpRd05EQTJNRGcwT0RNMVdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pnYW93Z2Fjd0NRWURWUjBUQkFJd0FEQWQKK0JnTlZIUTRFRmdRVVVHR2xqOVFIMmRlQ0FRemxaWCtNWTBhbkU3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0IKK1B5dkxlTFVadkg0a3lkdjdObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGgKK2NsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bc0cKK0ExVWREd1FFQXdJSGdEQUtCZ2dxaGtqT1BRUURBZ05wQURCbUFqRUF6cDREa0ZNcTdlREIweDVGZVM5Z1lEYUcKK09sOHJWbldsUlRMUXpIWkJRaktwK1RjQmRIWmFCUG9pOEx5WHRXQTRBakVBNk9XaHN1VGN2L3FYT3NjUVQwckwKK2VFaDh3Y0NRZUpLMXVOZDc4bE52eDNXMFBjeGRiNmNkN0FoYUFLZ1hMK3I0CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1Lmt1LWthLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua3Uta2EuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NDczMjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1Lmt1LWthLmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNLekNDQWJLZ0F3SUJBZ0lCTGpBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UUXdOREE1TURnME9EVXdXaGNOTWpRd05EQTJNRGcwT0RVd1dqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pnYW93Z2Fjd0NRWURWUjBUQkFJd0FEQWQKK0JnTlZIUTRFRmdRVVVHR2xqOVFIMmRlQ0FRemxaWCtNWTBhbkU3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0IKK1B5dkxlTFVadkg0a3lkdjdObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGgKK2NsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bc0cKK0ExVWREd1FFQXdJRENEQUtCZ2dxaGtqT1BRUURBZ05uQURCa0FqQUN6S1E4OC9Odm5nTVFCRmM5ckM0ODQrZ08KK0JSa1hQMjhCcVJjajhzQnQzRWZtRUdIMjNCdWhrWnVCMU9GWnVNSUNNQzQvcEhnYk9RdGFZOVdaUFVST1VWVloKK091TzZYc1ZiaGlFMHJiL211bXFtVXd1T3JDdEMvS0ZkdkZab2w0Qk5HQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1Lmt1LWtlLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua3Uta2UuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYWU1YWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1Lmt1LWtlLmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNLekNDQWJLZ0F3SUJBZ0lCTHpBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UUXdOREE1TURnME9UQTBXaGNOTWpRd05EQTJNRGcwT1RBMFdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pnYW93Z2Fjd0NRWURWUjBUQkFJd0FEQWQKK0JnTlZIUTRFRmdRVVVHR2xqOVFIMmRlQ0FRemxaWCtNWTBhbkU3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0IKK1B5dkxlTFVadkg0a3lkdjdObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGgKK2NsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bc0cKK0ExVWREd1FFQXdJRklEQUtCZ2dxaGtqT1BRUURBZ05uQURCa0FqQU1sMENqdjlmNDViSGVKVHVsNVhwWWVKZVQKKzUyWmFPTFRhL3VUTHk5NDhFbkVJaTZzajNuRmI5ZnZzVWJzT09qRUNNQVhBTVk2NEtPcXppeGVmejN5M1hTL2QKKzltaXllQXJQT21YVTJKSjNMR3VOYnFxajlJYkFCYXdCMU9EOHY4Z1JtZz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5rdS5zaGExIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEua3Uuc2hhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTU2ZDFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEua3Uuc2hhMQpAQCAtMCwwICsxLDggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlCRmpDQnZBSUJBREE4TVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHakFZCitCZ05WQkFNVEVWQnZiR0Z5VTFOTUlGTmxjblpsY2lBeE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNECitRZ0FFTjh4VzJYWUpIbHB5UHNkWkxmOGdidTU4K1FhUmROQ3RGTFgzYUNKWllwSk81UURZSXhILzZpL1NORjFkCitGcjJLaU1KcmR3MVZ6WW9xRHZvQnlMVHQvNkFlTUJ3R0NTcUdTSWIzRFFFSkRqRVBNQTB3Q3dZRFZSMFBCQVFECitBZ0hBTUFzR0J5cUdTTTQ5QkFFRkFBTklBREJGQWlCam5uRDdud3NGbkNMK01wUFBGSkUzSy9UZ2orNXJBZ1hqCitlNVVlakRYMkNBSWhBS2RiaWdXSkwvWmF0dkc5Q0ZIcTd5a3JSbnMyeDhKRVhlaFd1OERzWGR4OQorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGExIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTE0YTE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhMQpAQCAtMCwwICsxLDggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlCR0RDQnZ3SUJBREEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRCitCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyCitDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOCitWYzJLS2c3NkFjaTA3ZitnS1RBbkJna3Foa2lHOXcwQkNRNHhHakFZTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQCitCQVFEQWdYZ01Ba0dCeXFHU000OUJBRURTUUF3UmdJaEFMU2YyTWozZXIrb2NaQ04rK2FFb0lwNVBROUpDa1BZCitiODhnaHVUeVM3RENBaUVBK0NuVnpOTjBJMmtwbm1LVU9VY1h4TGNqb1BhTFJPZ3h0dWJEdkt2NWNrTT0KKy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhMjI0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhMjI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NjY4MzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGEyMjQKQEAgLTAsMCArMSw4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQkdEQ0J2d0lCQURBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUQorQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMgorQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQTJDTVIvK292MGpSZFhSYTlpb2pDYTNjTgorVmMyS0tnNzZBY2kwN2YrZ0tUQW5CZ2txaGtpRzl3MEJDUTR4R2pBWU1Ba0dBMVVkRXdRQ01BQXdDd1lEVlIwUAorQkFRREFnWGdNQW9HQ0NxR1NNNDlCQU1CQTBnQU1FVUNJRFlhTjFtOU1SazVtaFgxVThhWktkMGFseUdLV3FjUgorb2dsRjJNc0lpaS8yQWlFQWpGSHM4WFEwUTR5REY4b0x6dEN4bHEzbkF2cW1QZFF6OVQrVGtFZmgrUEE9CistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTI1NiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTI1NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTllMTVmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhMjU2CkBAIC0wLDAgKzEsOCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KK01JSUJGekNCdndJQkFEQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVEKK0JnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDIKK0NSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY04KK1ZjMktLZzc2QWNpMDdmK2dLVEFuQmdrcWhraUc5dzBCQ1E0eEdqQVlNQWtHQTFVZEV3UUNNQUF3Q3dZRFZSMFAKK0JBUURBZ1hnTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUdtUkZkampkNTNvTTJacHQzRTV2ZnF1am5BK0RIV2sKK3M5T3VkY1NXQmRqbUFpQTdCQVlqR25YeUw2QVRQcU03cW5MVkdUZjNKTVQrMXJYbDdlc0JtLzBBUEE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGEzODQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGEzODQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1NTZjNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTM4NApAQCAtMCwwICsxLDggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlCRnpDQnZ3SUJBREEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRCitCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyCitDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOCitWYzJLS2c3NkFjaTA3ZitnS1RBbkJna3Foa2lHOXcwQkNRNHhHakFZTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQCitCQVFEQWdYZ01Bb0dDQ3FHU000OUJBTURBMGNBTUVRQ0lEbk8rUElQWkpHcWlreTl1bnZxMTN1WHhhaHcxYnBrCitaYjVOUlYwYzA2UTVBaUFvNUI0OXRwM2tETi9uMEJETnQxQkJHTFVmaGNVK1FuMlNRZW5DeWZ1R0xnPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhNTEyIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhNTEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzc0MWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGE1MTIKQEAgLTAsMCArMSw4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQkdEQ0J2d0lCQURBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUQorQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMgorQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQTJDTVIvK292MGpSZFhSYTlpb2pDYTNjTgorVmMyS0tnNzZBY2kwN2YrZ0tUQW5CZ2txaGtpRzl3MEJDUTR4R2pBWU1Ba0dBMVVkRXdRQ01BQXdDd1lEVlIwUAorQkFRREFnWGdNQW9HQ0NxR1NNNDlCQU1FQTBnQU1FVUNJUUQ4eGR0bHVUaUJKTTUwZC9XdkRlVXZQYlhPVU1sTAorOHhFSlhVMldPSytSTEFJZ1M4VTZaOHRsSnBYTEVpc3ovajRnZEFCRzNZM2g0UEJKamxwc3pGaXNUTm89CistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjYtc3MtY2hpbGQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNi1zcy1jaGlsZC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M2ZmQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjYtc3MtY2hpbGQuY3J0CkBAIC0wLDAgKzEsMTMgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQjhqQ0NBWm1nQXdJQkFnSU1VNkxMV0NJNWxIU243SG5zTUFvR0NDcUdTTTQ5QkFNQ01FY3hFekFSQmdOVgorQkFNVENuTmxiR1p6YVdkdVpXUXhFREFPQmdOVkJBc1RCM1JsYzNScGJtY3hFVEFQQmdOVkJBb1RDRkJ2YkdGeQorVTFOTU1Rc3dDUVlEVlFRR0V3Sk9UREFpR0E4eU1ERTBNRFl4T1RFeE16WTFObG9ZRHpJd01qUXdOakU0TVRFegorTmpVMldqQk5NUmt3RndZRFZRUURFeEJ6Wld4bWMybG5ibVZrTFdOb2FXeGtNUkF3RGdZRFZRUUxFd2QwWlhOMAorYVc1bk1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERUxNQWtHQTFVRUJoTUNUa3d3V1RBVEJnY3Foa2pPUFFJQgorQmdncWhrak9QUU1CQndOQ0FBU0JXVEYyU1NUNkZhMnJvREZ1RHUwekVmcVJKVlhCc01HY0EzSSttTG90cEhJMworaVI5RE40MGZqanJZOEZmb0wwL0pBS1QzMjNNUHNzWUVsTkZBT3pqam8yRXdYekFNQmdOVkhSTUJBZjhFQWpBQQorTUE4R0ExVWREd0VCL3dRRkF3TUhnQUF3SFFZRFZSME9CQllFRkR4WnJFbytMdndDTmkvYWZjdkxuSHF5aVpsVAorTUI4R0ExVWRJd1FZTUJhQUZMWnRVUmdYam1XcTh1elY4d0hrYkZMQ05CMWJNQW9HQ0NxR1NNNDlCQU1DQTBjQQorTUVRQ0lBTWxRNTkvTlc3UzBoUDFjdTVPVEQyenFUMDg3YkVtbklmT1RCWWZqOFVGQWlCQnJyejJkaXBPRFZZeAordnZUc1FtU0N6anJtK0p0UVFvV2ErY2RuQUczdzVnPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjYuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmNjcxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjYuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ0lEQ0NBYVdnQXdJQkFnSUJDakFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRNd09USTBNVFUxTWpBMFdoY05Nak13T1RJeU1UVTFNakEwV2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VIQTBJQUJJRlpNWFpKSlBvVnJhdWdNVzRPN1RNUitwRWxWY0d3d1p3RGNqNll1aTJrY2plSgorSDBNM2pSK09PdGp3VitndlQ4a0FwUGZiY3creXhnU1UwVUE3T09PamdaMHdnWm93Q1FZRFZSMFRCQUl3QURBZAorQmdOVkhRNEVGZ1FVZm1XUFBqTURGT1hodm1DeTRJVi9qT2RnSzNzd2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQgorUHl2TGVMVVp2SDRreWR2N05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aAorY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUFvRworQ0NxR1NNNDlCQU1DQTJrQU1HWUNNUUNzWVR5bGVCRnVJNG5penV4by9pZTVkeEpuRDB5bndDblJKKzg0UFpQNAorQVFBM0hkVXowcU5ZczRDWjJhbTlHejBDTVFEcjJUTkxGQTNDM1MzcG1nWE1UMGVLelIxQ2ExL051bGYwbGxRWgorWGowOWtMYm94dWVtUDQwSUlxaFFucFlwdE1nPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNi5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI2LmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzExY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNi5rZXkKQEAgLTAsMCArMSw1IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01IY0NBUUVFSUVRWkc1ajhJa1JMeGE5T29aSnpEM0trclhxSWdpOWNIWk1WdjJzL1ZjUE9vQW9HQ0NxR1NNNDkKK0F3RUhvVVFEUWdBRWdWa3hka2trK2hXdHE2QXhiZzd0TXhINmtTVlZ3YkRCbkFOeVBwaTZMYVJ5TjRrZlF6ZU4KK0g0NDYyUEJYNkM5UHlRQ2s5OXR6RDdMR0JKVFJRRHM0NHc9PQorLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNy5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDA4N2VmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNy5jcnQKQEAgLTAsMCArMSwyMyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEd2pDQ0FhcWdBd0lCQWdJQkVEQU5CZ2txaGtpRzl3MEJBUXNGQURCSU1Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hKakFrQmdOVkJBTVRIVkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0CitaV1JwWVhSbElFTkJNQjRYRFRFek1Ea3lOREUyTVRJeU5Gb1hEVEl6TURreU1qRTJNVEl5TkZvd05ERUxNQWtHCitBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3CitXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUWNiZmZwMnFYcW9aeXljaG1vQ1J4enJkNFZ1OTZtCis0N05QQmVodEVDNDZhVGVYZ0RuQmRmKyt6bkFCckF0ZlhCUk5RejhBUkllWUJtc2tyMjJybEtqeW80R1ZNSUdTCitNQWtHQTFVZEV3UUNNQUF3SFFZRFZSME9CQllFRk5JSzA2VjNIODVWc0Z4R29vNXpiTCtoWUNhN01HWUdBMVVkCitJd1JmTUYyQUZEaDMyR3QzbkNoM2dvdE8yQnVwSHZlVUZyY09vVUtrUURBK01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEdDCitBUTR3RFFZSktvWklodmNOQVFFTEJRQURnZ0lCQURSb1E1ZkhLdyt2a2wwRDNhcUxYMVhyWmlkYisyNUFXYmhyCitGWVhkYXNrTjIxOVByWEJMM2NWOHg1dEs2cXNQS1N5eXcxbHVlODBPbWhYcy93N1BKa09ISFVTV1JubVR2N2xyCis4VXMzWnIveU9GL1ZWcXpkR3M3RGxPVHB5ekVCZHVnSTl1YXIvYUNxSERvbHROOHdPZHVPb1FCOWFvallwUk9qCisrZ2psRU8wbWd0Lzg3WHBqWU9pZzFvMGp2NDRRWURRWlF6cGoxemVJbjZXTWU2eGs5WUR3Q0xNalJJcGcrK2M3CitReXh2Y0VKVG44MHdYMVNhRUJNMmdhdTk3RzdiT1JMTXdCVmtNVDRvU1kraUtZZ3BQcGF3T25NSmJxVVA3M0RtCit5ZkpFeERkclcvQmJXWi92S0ljU3FTWklia0hka05qVURWSGN6eVZ3UXhaeHp2TEZ3L0IxazlzN2pZRnNpNWVLCitUTkFkWEZhNGV0MUgyc2QrdWh1MjRHeHNqbUppb0RyZnRpeGNnelBWQmpEQ2pIOFFXa0JFWDI5MldKNThvbjBlCitkZVdMcFpVbnpQZEUxQjRyc2lQdzFWZzI4bUdncjJPMXhnQlFyL2Z4NkErOEl0TlR6QVhiWmZFY3VsdDl5cHdNCiswYjZZRE5lNUl2ZEtrOGl3ejNtb2YwVk55NDdLNnhvQ2FFL2Z4eFdram9YSzh4Mndmc3dHZVAyUWdVelFFOTNiCitPdGpkSHBzRzFjN2dJVkZRbUtBVHlBUFV6NHZxbWV6Z05SbGVYVTBvTDBQWXRvQ21LUTUxVWpOTVVmbU85eENqCitWSmFOYTJpVFE1RGdpYytDVzRUWUFnajUvOWc5WDNXZnduRE54clowVXh4YXdHRWxjekhYcWJyTmxlVHRQYUtwCithOFNpNlVLNQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNy5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3LmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDg4MzMxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNy5rZXkKQEAgLTAsMCArMSw1IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01IY0NBUUVFSUxCRE1zN2JSVnhWZzZvdlRwZjJ6QjltKzIyalk3UjNMTktSdkNQZmE2WUpvQW9HQ0NxR1NNNDkKK0F3RUhvVVFEUWdBRUhHMzM2ZHFsNnFHY3NuSVpxQWtjYzYzZUZidmVwdU96VHdYb2JSQXVPbWszbDRBNXdYWC8KK3ZzNXdBYXdMWDF3VVRVTS9BRVNIbUFackpLOXRxNVNvOGc9PQorLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyN19hbGxfc3BhY2UuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyN19hbGxfc3BhY2UuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5Nzk4MzAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3X2FsbF9zcGFjZS5jcnQKQEAgLTAsMCArMSw0NyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEd2pDQ0FhcWdBd0lCQWdJQkVEQU5CZ2txaGtpRzl3MEJBUXNGQURCSU1Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hKakFrQmdOVkJBTVRIVkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0CitaV1JwWVhSbElFTkJNQjRYRFRFek1Ea3lOREUyTVRJeU5Gb1hEVEl6TURreU1qRTJNVEl5TkZvd05ERUxNQWsgRworQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJJd0VBWURWUVFERXdsc2IyTmhiR2h2YzNRdworV1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFjYmZmcDJxWHFvWnl5Y2htb0NSeHpyZDRWdTk2bQorNDdOUEJlaHRFQzQ2YVRlWGdEbkJkZisrem5BQnJBdGZYQlJOUXo4QVJJZVlCbXNrcjIycmxLanlvNEdWTUlHUworTUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZOSUswNlYzSDg1VnNGeEdvbzV6YkwraFlDYTdNR1lHQTFVZAorSXdSZk1GMkFGRGgzMkd0M25DaDNnb3RPMkJ1cEh2ZVVGcmNPb1VLa1FEQStNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBHQworQVE0d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFEUm9RNWZIS3crdmtsMEQzYXFMWDFYclppZGIrMjVBV2JocgorRllYZGFza04yMTlQclhCTDNjVjh4NXRLNnFzUEtTeXl3MWx1ZTgwT21oWHMvdzdQSmtPSEhVU1dSbm1UdjdscgorOFVzM1pyL3lPRi9WVnF6ZEdzN0RsT1RweXpFQmR1Z0k5dWFyL2FDcUhEb2x0Tjh3T2R1T29RQjlhb2pZcFJPagorK2dqbEVPMG1ndC84N1hwallPaWcxbzBqdjQ0UVlEUVpRenBqMXplSW42V01lNnhrOVlEd0NMTWpSSXBnKytjNworUXl4dmNFSlRuODB3WDFTYUVCTTJnYXU5N0c3Yk9STE13QlZrTVQ0b1NZK2lLWWdwUHBhd09uTUpicVVQNzNEbQoreWZKRXhEZHJXL0JiV1ovdktJY1NxU1pJYmtIZGtOalVEVkhjenlWd1F4Wnh6dkxGdy9CMWs5czdqWUZzaTVlSworVE5BZFhGYTRldDFIMnNkK3VodTI0R3hzam1KaW9EcmZ0aXhjZ3pQVkJqRENqSDhRV2tCRVgyOTJXSjU4b24wZQorZGVXTHBaVW56UGRFMUI0cnNpUHcxVmcyOG1HZ3IyTzF4Z0JRci9meDZBKzhJdE5UekFYYlpmRWN1bHQ5eXB3TQorMGI2WUROZTVJdmRLazhpd3ozbW9mMFZOeTQ3SzZ4b0NhRS9meHhXa2pvWEs4eDJ3ZnN3R2VQMlFnVXpRRTkzYgorT3RqZEhwc0cxYzdnSVZGUW1LQVR5QVBVejR2cW1lemdOUmxlWFUwb0wwUFl0b0NtS1E1MVVqTk1VZm1POXhDagorVkphTmEyaVRRNURnaWMrQ1c0VFlBZ2o1LzlnOVgzV2Z3bkROeHJaMFV4eGF3R0VsY3pIWHFick5sZVR0UGFLcAorYThTaTZVSzUKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRUFUQ0NBNGVnQXdJQkFnSUJEakFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRNd09USTBNVFUxTlRFMFdoY05Nak13T1RJeU1UVTFOVEUwV2pCSU1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hKakFrQmdOVkJBTVRIVkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFTkJNSUlDSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQWc4QU1JSUNDZ0tDQWdFQW8xT2M4bnI2Zk1UcQordm93VitDcEM1NWk1QlpHRkdjNTBFYjRSTEJTUlRIMWU3SmVwZEZqQVZiQnR5UVJKU2lZMWphMHRnTFFEREtaUgord2ZFSStiNGF6c2U0NjBJblBIdjdDMVROMHVwWGx4dWo2bTlCMUlsUCtzQmFNN1dCQzZkVmZQTytqVk1JeGdrRgorQ2FCQ0xoaGRLMUZqZjhIamtUL1BrY3RXbmhvOE5Ud2l2YzkrbnFSWmpYZS9lSWNxbTVId2pERGh1K2d6K28wZworVno5TWZaTmkxSnlDck95TlpjeStjcjJRZU5uTlZHbkZxOHhUeHR1NmRMdW5ocG1MRmoybW0wVmp3YTdZcGo1cQorQWpwcVRNdER2cWJSdVRveW95emFqaE1OY0NBZjdnd3pJdXBKSkZWZGpkdGdZQWNRd3ppa3dGNUhvSVRKenpKMgorcWd4RjdDbXZHWk5iN0c5OW1MZExkaHRjbEgzd0FRS0hZd0VHSm83WEt5TkV1SFBRZ0IrZTBjZzFTRDFIcWxBTQordUNmR0dUV1E2bWU3QmphbjN0ME56b1RkRHE2SXBLVGVzYmFZKy85ZTJ4bjhEQ3JoQktMWFFNWkZEWnFVb0xZQQora0dQT0VHZ3ZsUG5JSVhBYXdvdXhDYU5ZRWg1VXc4NzFZTVNQVDI4ckxkRnI0OWR3WU90RGc5Zm9BOGhESVcyUAorZDZLWGJyWnRlZXN2QTFuWXpFT3MrM0FqcmJUNzlNZDJXOEJ6OWJxQlZObE5PRVNTcW00a2lDSkZtc2xtLzZicgorTnAwTVNRZCtvMjJQUTR4UnRtUDZVc1RmVTB1ZWlNcFljOFRZWWhNYmZuZkZ5bzRtNzA3ZWJjZmxQYkJFTjJkZwordXBkUTY2Y3ZmQ0pCMFFKdDl1cGFmWTBscGRWMXFVa0NBd0VBQWFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVT0hmIFkKK2EzZWNLSGVDaTA3WUc2a2U5NVFXdHc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhQUF3WlFJeEFQeUUrdStlUDdnUnJTRmpRaWNtcFlnOGppRlVDWUVvd1dZMnp1T0cKK2kxSFhZd21wREhmYXNRM3JOU3VmL2dIdmp3SXdiU1NqdW1Eayt1WU5jaS9LTUVMRHNEME1GSHhaaGhCYzlIcDkKK0FmNWNOUjhLaHplZ3puTDZhbVJPYkdHS21YMUYKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjdfaW50LWNhLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjdfaW50LWNhLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2RkYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyN19pbnQtY2EuY3J0CkBAIC0wLDAgKzEsNDcgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRHdqQ0NBYXFnQXdJQkFnSUJFREFOQmdrcWhraUc5dzBCQVFzRkFEQklNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4SmpBa0JnTlZCQU1USFZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdAorWldScFlYUmxJRU5CTUI0WERURXpNRGt5TkRFMk1USXlORm9YRFRJek1Ea3lNakUyTVRJeU5Gb3dOREVMTUFrRworQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJJd0VBWURWUVFERXdsc2IyTmhiR2h2YzNRdworV1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFjYmZmcDJxWHFvWnl5Y2htb0NSeHpyZDRWdTk2bQorNDdOUEJlaHRFQzQ2YVRlWGdEbkJkZisrem5BQnJBdGZYQlJOUXo4QVJJZVlCbXNrcjIycmxLanlvNEdWTUlHUworTUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZOSUswNlYzSDg1VnNGeEdvbzV6YkwraFlDYTdNR1lHQTFVZAorSXdSZk1GMkFGRGgzMkd0M25DaDNnb3RPMkJ1cEh2ZVVGcmNPb1VLa1FEQStNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBHQworQVE0d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFEUm9RNWZIS3crdmtsMEQzYXFMWDFYclppZGIrMjVBV2JocgorRllYZGFza04yMTlQclhCTDNjVjh4NXRLNnFzUEtTeXl3MWx1ZTgwT21oWHMvdzdQSmtPSEhVU1dSbm1UdjdscgorOFVzM1pyL3lPRi9WVnF6ZEdzN0RsT1RweXpFQmR1Z0k5dWFyL2FDcUhEb2x0Tjh3T2R1T29RQjlhb2pZcFJPagorK2dqbEVPMG1ndC84N1hwallPaWcxbzBqdjQ0UVlEUVpRenBqMXplSW42V01lNnhrOVlEd0NMTWpSSXBnKytjNworUXl4dmNFSlRuODB3WDFTYUVCTTJnYXU5N0c3Yk9STE13QlZrTVQ0b1NZK2lLWWdwUHBhd09uTUpicVVQNzNEbQoreWZKRXhEZHJXL0JiV1ovdktJY1NxU1pJYmtIZGtOalVEVkhjenlWd1F4Wnh6dkxGdy9CMWs5czdqWUZzaTVlSworVE5BZFhGYTRldDFIMnNkK3VodTI0R3hzam1KaW9EcmZ0aXhjZ3pQVkJqRENqSDhRV2tCRVgyOTJXSjU4b24wZQorZGVXTHBaVW56UGRFMUI0cnNpUHcxVmcyOG1HZ3IyTzF4Z0JRci9meDZBKzhJdE5UekFYYlpmRWN1bHQ5eXB3TQorMGI2WUROZTVJdmRLazhpd3ozbW9mMFZOeTQ3SzZ4b0NhRS9meHhXa2pvWEs4eDJ3ZnN3R2VQMlFnVXpRRTkzYgorT3RqZEhwc0cxYzdnSVZGUW1LQVR5QVBVejR2cW1lemdOUmxlWFUwb0wwUFl0b0NtS1E1MVVqTk1VZm1POXhDagorVkphTmEyaVRRNURnaWMrQ1c0VFlBZ2o1LzlnOVgzV2Z3bkROeHJaMFV4eGF3R0VsY3pIWHFick5sZVR0UGFLcAorYThTaTZVSzUKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRUFUQ0NBNGVnQXdJQkFnSUJEakFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRNd09USTBNVFUxTlRFMFdoY05Nak13T1RJeU1UVTFOVEUwV2pCSU1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hKakFrQmdOVkJBTVRIVkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFTkJNSUlDSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQWc4QU1JSUNDZ0tDQWdFQW8xT2M4bnI2Zk1UcQordm93VitDcEM1NWk1QlpHRkdjNTBFYjRSTEJTUlRIMWU3SmVwZEZqQVZiQnR5UVJKU2lZMWphMHRnTFFEREtaUgord2ZFSStiNGF6c2U0NjBJblBIdjdDMVROMHVwWGx4dWo2bTlCMUlsUCtzQmFNN1dCQzZkVmZQTytqVk1JeGdrRgorQ2FCQ0xoaGRLMUZqZjhIamtUL1BrY3RXbmhvOE5Ud2l2YzkrbnFSWmpYZS9lSWNxbTVId2pERGh1K2d6K28wZworVno5TWZaTmkxSnlDck95TlpjeStjcjJRZU5uTlZHbkZxOHhUeHR1NmRMdW5ocG1MRmoybW0wVmp3YTdZcGo1cQorQWpwcVRNdER2cWJSdVRveW95emFqaE1OY0NBZjdnd3pJdXBKSkZWZGpkdGdZQWNRd3ppa3dGNUhvSVRKenpKMgorcWd4RjdDbXZHWk5iN0c5OW1MZExkaHRjbEgzd0FRS0hZd0VHSm83WEt5TkV1SFBRZ0IrZTBjZzFTRDFIcWxBTQordUNmR0dUV1E2bWU3QmphbjN0ME56b1RkRHE2SXBLVGVzYmFZKy85ZTJ4bjhEQ3JoQktMWFFNWkZEWnFVb0xZQQora0dQT0VHZ3ZsUG5JSVhBYXdvdXhDYU5ZRWg1VXc4NzFZTVNQVDI4ckxkRnI0OWR3WU90RGc5Zm9BOGhESVcyUAorZDZLWGJyWnRlZXN2QTFuWXpFT3MrM0FqcmJUNzlNZDJXOEJ6OWJxQlZObE5PRVNTcW00a2lDSkZtc2xtLzZicgorTnAwTVNRZCtvMjJQUTR4UnRtUDZVc1RmVTB1ZWlNcFljOFRZWWhNYmZuZkZ5bzRtNzA3ZWJjZmxQYkJFTjJkZwordXBkUTY2Y3ZmQ0pCMFFKdDl1cGFmWTBscGRWMXFVa0NBd0VBQWFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVT0hmWQorYTNlY0tIZUNpMDdZRzZrZTk1UVd0dzR3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2NworTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRQorQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4dworQ2dZSUtvWkl6ajBFQXdJRGFBQXdaUUl4QVB5RSt1K2VQN2dSclNGalFpY21wWWc4amlGVUNZRW93V1kyenVPRworaTFIWFl3bXBESGZhc1Ezck5TdWYvZ0h2andJd2JTU2p1bURrK3VZTmNpL0tNRUxEc0QwTUZIeFpoaEJjOUhwOQorQWY1Y05SOEtoemVnem5MNmFtUk9iR0dLbVgxRgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyN19pbnQtY2FfY2EyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjdfaW50LWNhX2NhMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4OWMwYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjdfaW50LWNhX2NhMi5jcnQKQEAgLTAsMCArMSw2MiBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEd2pDQ0FhcWdBd0lCQWdJQkVEQU5CZ2txaGtpRzl3MEJBUXNGQURCSU1Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hKakFrQmdOVkJBTVRIVkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0CitaV1JwWVhSbElFTkJNQjRYRFRFek1Ea3lOREUyTVRJeU5Gb1hEVEl6TURreU1qRTJNVEl5TkZvd05ERUxNQWtHCitBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3CitXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUWNiZmZwMnFYcW9aeXljaG1vQ1J4enJkNFZ1OTZtCis0N05QQmVodEVDNDZhVGVYZ0RuQmRmKyt6bkFCckF0ZlhCUk5RejhBUkllWUJtc2tyMjJybEtqeW80R1ZNSUdTCitNQWtHQTFVZEV3UUNNQUF3SFFZRFZSME9CQllFRk5JSzA2VjNIODVWc0Z4R29vNXpiTCtoWUNhN01HWUdBMVVkCitJd1JmTUYyQUZEaDMyR3QzbkNoM2dvdE8yQnVwSHZlVUZyY09vVUtrUURBK01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEdDCitBUTR3RFFZSktvWklodmNOQVFFTEJRQURnZ0lCQURSb1E1ZkhLdyt2a2wwRDNhcUxYMVhyWmlkYisyNUFXYmhyCitGWVhkYXNrTjIxOVByWEJMM2NWOHg1dEs2cXNQS1N5eXcxbHVlODBPbWhYcy93N1BKa09ISFVTV1JubVR2N2xyCis4VXMzWnIveU9GL1ZWcXpkR3M3RGxPVHB5ekVCZHVnSTl1YXIvYUNxSERvbHROOHdPZHVPb1FCOWFvallwUk9qCisrZ2psRU8wbWd0Lzg3WHBqWU9pZzFvMGp2NDRRWURRWlF6cGoxemVJbjZXTWU2eGs5WUR3Q0xNalJJcGcrK2M3CitReXh2Y0VKVG44MHdYMVNhRUJNMmdhdTk3RzdiT1JMTXdCVmtNVDRvU1kraUtZZ3BQcGF3T25NSmJxVVA3M0RtCit5ZkpFeERkclcvQmJXWi92S0ljU3FTWklia0hka05qVURWSGN6eVZ3UXhaeHp2TEZ3L0IxazlzN2pZRnNpNWVLCitUTkFkWEZhNGV0MUgyc2QrdWh1MjRHeHNqbUppb0RyZnRpeGNnelBWQmpEQ2pIOFFXa0JFWDI5MldKNThvbjBlCitkZVdMcFpVbnpQZEUxQjRyc2lQdzFWZzI4bUdncjJPMXhnQlFyL2Z4NkErOEl0TlR6QVhiWmZFY3VsdDl5cHdNCiswYjZZRE5lNUl2ZEtrOGl3ejNtb2YwVk55NDdLNnhvQ2FFL2Z4eFdram9YSzh4Mndmc3dHZVAyUWdVelFFOTNiCitPdGpkSHBzRzFjN2dJVkZRbUtBVHlBUFV6NHZxbWV6Z05SbGVYVTBvTDBQWXRvQ21LUTUxVWpOTVVmbU85eENqCitWSmFOYTJpVFE1RGdpYytDVzRUWUFnajUvOWc5WDNXZnduRE54clowVXh4YXdHRWxjekhYcWJyTmxlVHRQYUtwCithOFNpNlVLNQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFQVRDQ0E0ZWdBd0lCQWdJQkRqQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVE13T1RJME1UVTFOVEUwV2hjTk1qTXdPVEl5TVRVMU5URTBXakJJTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEpqQWtCZ05WQkFNVEhWQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnRaV1JwCitZWFJsSUVOQk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBbzFPYzhucjZmTVRxCit2b3dWK0NwQzU1aTVCWkdGR2M1MEViNFJMQlNSVEgxZTdKZXBkRmpBVmJCdHlRUkpTaVkxamEwdGdMUURES1pSCit3ZkVJK2I0YXpzZTQ2MEluUEh2N0MxVE4wdXBYbHh1ajZtOUIxSWxQK3NCYU03V0JDNmRWZlBPK2pWTUl4Z2tGCitDYUJDTGhoZEsxRmpmOEhqa1QvUGtjdFduaG84TlR3aXZjOStucVJaalhlL2VJY3FtNUh3akREaHUrZ3orbzBnCitWejlNZlpOaTFKeUNyT3lOWmN5K2NyMlFlTm5OVkduRnE4eFR4dHU2ZEx1bmhwbUxGajJtbTBWandhN1lwajVxCitBanBxVE10RHZxYlJ1VG95b3l6YWpoTU5jQ0FmN2d3ekl1cEpKRlZkamR0Z1lBY1F3emlrd0Y1SG9JVEp6ekoyCitxZ3hGN0NtdkdaTmI3Rzk5bUxkTGRodGNsSDN3QVFLSFl3RUdKbzdYS3lORXVIUFFnQitlMGNnMVNEMUhxbEFNCit1Q2ZHR1RXUTZtZTdCamFuM3QwTnpvVGREcTZJcEtUZXNiYVkrLzllMnhuOERDcmhCS0xYUU1aRkRacVVvTFlBCitrR1BPRUdndmxQbklJWEFhd291eENhTllFaDVVdzg3MVlNU1BUMjhyTGRGcjQ5ZHdZT3REZzlmb0E4aERJVzJQCitkNktYYnJadGVlc3ZBMW5ZekVPcyszQWpyYlQ3OU1kMlc4Qno5YnFCVk5sTk9FU1NxbTRraUNKRm1zbG0vNmJyCitOcDBNU1FkK28yMlBRNHhSdG1QNlVzVGZVMHVlaU1wWWM4VFlZaE1iZm5mRnlvNG03MDdlYmNmbFBiQkVOMmRnCit1cGRRNjZjdmZDSkIwUUp0OXVwYWZZMGxwZFYxcVVrQ0F3RUFBYU9Cb0RDQm5UQWRCZ05WSFE0RUZnUVVPSGZZCithM2VjS0hlQ2kwN1lHNmtlOTVRV3R3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0JQeXZMZUxVWnZINGt5ZHY3CitObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFCitBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bd0dBMVVkRXdRRk1BTUJBZjh3CitDZ1lJS29aSXpqMEVBd0lEYUFBd1pRSXhBUHlFK3UrZVA3Z1JyU0ZqUWljbXBZZzhqaUZVQ1lFb3dXWTJ6dU9HCitpMUhYWXdtcERIZmFzUTNyTlN1Zi9nSHZqd0l3YlNTanVtRGsrdVlOY2kvS01FTERzRDBNRkh4WmhoQmM5SHA5CitBZjVjTlI4S2h6ZWd6bkw2YW1ST2JHR0ttWDFGCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNVakNDQWRlZ0F3SUJBZ0lKQU1GRDRuNWlROHpvTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE16QTVNalF4TlRRNU5EaGFGdzB5TXpBNU1qSXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxT0JvRENCblRBZEJnTlZIUTRFRmdRVW5XMGcKK0pFa0JQeXZMZUxVWnZINGt5ZHY3Tm53d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFNTzBZbk5XS0pVQWZYZ1NKdEp4ZXhuNGlwZytrdjR6bnVSNTB2NTYKK3Q0ZDBQQ3U0MTJtVUM2Tm5kN2l6dnRFMk1nSXhBUDFubkpRalo4Qld1a3N6RlFERzQ4d3hDQ3ljaTlxcGRTTXYKK3VDam44cHdVT2tBQlhLOE1zczkwZnpDZkNFT3RJQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3X3BlbV9zcGFjZS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3X3BlbV9zcGFjZS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmMGZjNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjdfcGVtX3NwYWNlLmNydApAQCAtMCwwICsxLDQ3IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUR3akNDQWFxZ0F3SUJBZ0lCRURBTkJna3Foa2lHOXcwQkFRc0ZBREJJTVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEpqQWtCZ05WQkFNVEhWQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnQKK1pXUnBZWFJsSUVOQk1CNFhEVEV6TURreU5ERTJNVEl5TkZvWERUSXpNRGt5TWpFMk1USXlORm93TkRFTE1BayBHCitBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3CitXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUWNiZmZwMnFYcW9aeXljaG1vQ1J4enJkNFZ1OTZtCis0N05QQmVodEVDNDZhVGVYZ0RuQmRmKyt6bkFCckF0ZlhCUk5RejhBUkllWUJtc2tyMjJybEtqeW80R1ZNSUdTCitNQWtHQTFVZEV3UUNNQUF3SFFZRFZSME9CQllFRk5JSzA2VjNIODVWc0Z4R29vNXpiTCtoWUNhN01HWUdBMVVkCitJd1JmTUYyQUZEaDMyR3QzbkNoM2dvdE8yQnVwSHZlVUZyY09vVUtrUURBK01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEdDCitBUTR3RFFZSktvWklodmNOQVFFTEJRQURnZ0lCQURSb1E1ZkhLdyt2a2wwRDNhcUxYMVhyWmlkYisyNUFXYmhyCitGWVhkYXNrTjIxOVByWEJMM2NWOHg1dEs2cXNQS1N5eXcxbHVlODBPbWhYcy93N1BKa09ISFVTV1JubVR2N2xyCis4VXMzWnIveU9GL1ZWcXpkR3M3RGxPVHB5ekVCZHVnSTl1YXIvYUNxSERvbHROOHdPZHVPb1FCOWFvallwUk9qCisrZ2psRU8wbWd0Lzg3WHBqWU9pZzFvMGp2NDRRWURRWlF6cGoxemVJbjZXTWU2eGs5WUR3Q0xNalJJcGcrK2M3CitReXh2Y0VKVG44MHdYMVNhRUJNMmdhdTk3RzdiT1JMTXdCVmtNVDRvU1kraUtZZ3BQcGF3T25NSmJxVVA3M0RtCit5ZkpFeERkclcvQmJXWi92S0ljU3FTWklia0hka05qVURWSGN6eVZ3UXhaeHp2TEZ3L0IxazlzN2pZRnNpNWVLCitUTkFkWEZhNGV0MUgyc2QrdWh1MjRHeHNqbUppb0RyZnRpeGNnelBWQmpEQ2pIOFFXa0JFWDI5MldKNThvbjBlCitkZVdMcFpVbnpQZEUxQjRyc2lQdzFWZzI4bUdncjJPMXhnQlFyL2Z4NkErOEl0TlR6QVhiWmZFY3VsdDl5cHdNCiswYjZZRE5lNUl2ZEtrOGl3ejNtb2YwVk55NDdLNnhvQ2FFL2Z4eFdram9YSzh4Mndmc3dHZVAyUWdVelFFOTNiCitPdGpkSHBzRzFjN2dJVkZRbUtBVHlBUFV6NHZxbWV6Z05SbGVYVTBvTDBQWXRvQ21LUTUxVWpOTVVmbU85eENqCitWSmFOYTJpVFE1RGdpYytDVzRUWUFnajUvOWc5WDNXZnduRE54clowVXh4YXdHRWxjekhYcWJyTmxlVHRQYUtwCithOFNpNlVLNQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFQVRDQ0E0ZWdBd0lCQWdJQkRqQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVE13T1RJME1UVTFOVEUwV2hjTk1qTXdPVEl5TVRVMU5URTBXakJJTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEpqQWtCZ05WQkFNVEhWQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnRaV1JwCitZWFJsSUVOQk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBbzFPYzhucjZmTVRxCit2b3dWK0NwQzU1aTVCWkdGR2M1MEViNFJMQlNSVEgxZTdKZXBkRmpBVmJCdHlRUkpTaVkxamEwdGdMUURES1pSCit3ZkVJK2I0YXpzZTQ2MEluUEh2N0MxVE4wdXBYbHh1ajZtOUIxSWxQK3NCYU03V0JDNmRWZlBPK2pWTUl4Z2tGCitDYUJDTGhoZEsxRmpmOEhqa1QvUGtjdFduaG84TlR3aXZjOStucVJaalhlL2VJY3FtNUh3akREaHUrZ3orbzBnCitWejlNZlpOaTFKeUNyT3lOWmN5K2NyMlFlTm5OVkduRnE4eFR4dHU2ZEx1bmhwbUxGajJtbTBWandhN1lwajVxCitBanBxVE10RHZxYlJ1VG95b3l6YWpoTU5jQ0FmN2d3ekl1cEpKRlZkamR0Z1lBY1F3emlrd0Y1SG9JVEp6ekoyCitxZ3hGN0NtdkdaTmI3Rzk5bUxkTGRodGNsSDN3QVFLSFl3RUdKbzdYS3lORXVIUFFnQitlMGNnMVNEMUhxbEFNCit1Q2ZHR1RXUTZtZTdCamFuM3QwTnpvVGREcTZJcEtUZXNiYVkrLzllMnhuOERDcmhCS0xYUU1aRkRacVVvTFlBCitrR1BPRUdndmxQbklJWEFhd291eENhTllFaDVVdzg3MVlNU1BUMjhyTGRGcjQ5ZHdZT3REZzlmb0E4aERJVzJQCitkNktYYnJadGVlc3ZBMW5ZekVPcyszQWpyYlQ3OU1kMlc4Qno5YnFCVk5sTk9FU1NxbTRraUNKRm1zbG0vNmJyCitOcDBNU1FkK28yMlBRNHhSdG1QNlVzVGZVMHVlaU1wWWM4VFlZaE1iZm5mRnlvNG03MDdlYmNmbFBiQkVOMmRnCit1cGRRNjZjdmZDSkIwUUp0OXVwYWZZMGxwZFYxcVVrQ0F3RUFBYU9Cb0RDQm5UQWRCZ05WSFE0RUZnUVVPSGZZCithM2VjS0hlQ2kwN1lHNmtlOTVRV3R3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0JQeXZMZUxVWnZINGt5ZHY3CitObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFCitBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bd0dBMVVkRXdRRk1BTUJBZjh3CitDZ1lJS29aSXpqMEVBd0lEYUFBd1pRSXhBUHlFK3UrZVA3Z1JyU0ZqUWljbXBZZzhqaUZVQ1lFb3dXWTJ6dU9HCitpMUhYWXdtcERIZmFzUTNyTlN1Zi9nSHZqd0l3YlNTanVtRGsrdVlOY2kvS01FTERzRDBNRkh4WmhoQmM5SHA5CitBZjVjTlI4S2h6ZWd6bkw2YW1ST2JHR0ttWDFGCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3X3RyYWlsaW5nX3NwYWNlLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjdfdHJhaWxpbmdfc3BhY2UuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYWY4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3X3RyYWlsaW5nX3NwYWNlLmNydApAQCAtMCwwICsxLDQ3IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0gCitNSUlEd2pDQ0FhcWdBd0lCQWdJQkVEQU5CZ2txaGtpRzl3MEJBUXNGQURCSU1Rc3dDUVlEVlFRR0V3Sk9UREVSIAorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4SmpBa0JnTlZCQU1USFZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdCAKK1pXUnBZWFJsSUVOQk1CNFhEVEV6TURreU5ERTJNVEl5TkZvWERUSXpNRGt5TWpFMk1USXlORm93TkRFTE1Ba0cgCitBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3IAorV1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFjYmZmcDJxWHFvWnl5Y2htb0NSeHpyZDRWdTk2bSAKKzQ3TlBCZWh0RUM0NmFUZVhnRG5CZGYrK3puQUJyQXRmWEJSTlF6OEFSSWVZQm1za3IyMnJsS2p5bzRHVk1JR1MgCitNQWtHQTFVZEV3UUNNQUF3SFFZRFZSME9CQllFRk5JSzA2VjNIODVWc0Z4R29vNXpiTCtoWUNhN01HWUdBMVVkIAorSXdSZk1GMkFGRGgzMkd0M25DaDNnb3RPMkJ1cEh2ZVVGcmNPb1VLa1FEQStNUXN3Q1FZRFZRUUdFd0pPVERFUiAKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwR0MgCitBUTR3RFFZSktvWklodmNOQVFFTEJRQURnZ0lCQURSb1E1ZkhLdyt2a2wwRDNhcUxYMVhyWmlkYisyNUFXYmhyIAorRllYZGFza04yMTlQclhCTDNjVjh4NXRLNnFzUEtTeXl3MWx1ZTgwT21oWHMvdzdQSmtPSEhVU1dSbm1UdjdsciAKKzhVczNaci95T0YvVlZxemRHczdEbE9UcHl6RUJkdWdJOXVhci9hQ3FIRG9sdE44d09kdU9vUUI5YW9qWXBST2ogCisrZ2psRU8wbWd0Lzg3WHBqWU9pZzFvMGp2NDRRWURRWlF6cGoxemVJbjZXTWU2eGs5WUR3Q0xNalJJcGcrK2M3IAorUXl4dmNFSlRuODB3WDFTYUVCTTJnYXU5N0c3Yk9STE13QlZrTVQ0b1NZK2lLWWdwUHBhd09uTUpicVVQNzNEbSAKK3lmSkV4RGRyVy9CYldaL3ZLSWNTcVNaSWJrSGRrTmpVRFZIY3p5VndReFp4enZMRncvQjFrOXM3allGc2k1ZUsgCitUTkFkWEZhNGV0MUgyc2QrdWh1MjRHeHNqbUppb0RyZnRpeGNnelBWQmpEQ2pIOFFXa0JFWDI5MldKNThvbjBlIAorZGVXTHBaVW56UGRFMUI0cnNpUHcxVmcyOG1HZ3IyTzF4Z0JRci9meDZBKzhJdE5UekFYYlpmRWN1bHQ5eXB3TSAKKzBiNllETmU1SXZkS2s4aXd6M21vZjBWTnk0N0s2eG9DYUUvZnh4V2tqb1hLOHgyd2Zzd0dlUDJRZ1V6UUU5M2IgCitPdGpkSHBzRzFjN2dJVkZRbUtBVHlBUFV6NHZxbWV6Z05SbGVYVTBvTDBQWXRvQ21LUTUxVWpOTVVmbU85eENqIAorVkphTmEyaVRRNURnaWMrQ1c0VFlBZ2o1LzlnOVgzV2Z3bkROeHJaMFV4eGF3R0VsY3pIWHFick5sZVR0UGFLcCAKK2E4U2k2VUs1IAorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLSAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLSAKK01JSUVBVENDQTRlZ0F3SUJBZ0lCRGpBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcgCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOIAorTVRNd09USTBNVFUxTlRFMFdoY05Nak13T1RJeU1UVTFOVEUwV2pCSU1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RyAKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SmpBa0JnTlZCQU1USFZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAgCitZWFJsSUVOQk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBbzFPYzhucjZmTVRxIAordm93VitDcEM1NWk1QlpHRkdjNTBFYjRSTEJTUlRIMWU3SmVwZEZqQVZiQnR5UVJKU2lZMWphMHRnTFFEREtaUiAKK3dmRUkrYjRhenNlNDYwSW5QSHY3QzFUTjB1cFhseHVqNm05QjFJbFArc0JhTTdXQkM2ZFZmUE8ralZNSXhna0YgCitDYUJDTGhoZEsxRmpmOEhqa1QvUGtjdFduaG84TlR3aXZjOStucVJaalhlL2VJY3FtNUh3akREaHUrZ3orbzBnIAorVno5TWZaTmkxSnlDck95TlpjeStjcjJRZU5uTlZHbkZxOHhUeHR1NmRMdW5ocG1MRmoybW0wVmp3YTdZcGo1cSAKK0FqcHFUTXREdnFiUnVUb3lveXphamhNTmNDQWY3Z3d6SXVwSkpGVmRqZHRnWUFjUXd6aWt3RjVIb0lUSnp6SjIgCitxZ3hGN0NtdkdaTmI3Rzk5bUxkTGRodGNsSDN3QVFLSFl3RUdKbzdYS3lORXVIUFFnQitlMGNnMVNEMUhxbEFNIAordUNmR0dUV1E2bWU3QmphbjN0ME56b1RkRHE2SXBLVGVzYmFZKy85ZTJ4bjhEQ3JoQktMWFFNWkZEWnFVb0xZQSAKK2tHUE9FR2d2bFBuSUlYQWF3b3V4Q2FOWUVoNVV3ODcxWU1TUFQyOHJMZEZyNDlkd1lPdERnOWZvQThoRElXMlAgCitkNktYYnJadGVlc3ZBMW5ZekVPcyszQWpyYlQ3OU1kMlc4Qno5YnFCVk5sTk9FU1NxbTRraUNKRm1zbG0vNmJyIAorTnAwTVNRZCtvMjJQUTR4UnRtUDZVc1RmVTB1ZWlNcFljOFRZWWhNYmZuZkZ5bzRtNzA3ZWJjZmxQYkJFTjJkZyAKK3VwZFE2NmN2ZkNKQjBRSnQ5dXBhZlkwbHBkVjFxVWtDQXdFQUFhT0JvRENCblRBZEJnTlZIUTRFRmdRVU9IZlkgCithM2VjS0hlQ2kwN1lHNmtlOTVRV3R3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0JQeXZMZUxVWnZINGt5ZHY3IAorTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRSAKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcgCitDZ1lJS29aSXpqMEVBd0lEYUFBd1pRSXhBUHlFK3UrZVA3Z1JyU0ZqUWljbXBZZzhqaUZVQ1lFb3dXWTJ6dU9HIAoraTFIWFl3bXBESGZhc1Ezck5TdWYvZ0h2andJd2JTU2p1bURrK3VZTmNpL0tNRUxEc0QwTUZIeFpoaEJjOUhwOSAKK0FmNWNOUjhLaHplZ3puTDZhbVJPYkdHS21YMUYgCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI4LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDM1YjJkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOC5jcnQKQEAgLTAsMCArMSwxOCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDNnpDQ0FuS2dBd0lCQWdJQkVUQUtCZ2dxaGtqT1BRUURBakJMTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEtUQW5CZ05WQkFNVElGQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnRaV1JwCitZWFJsSUVWRElFTkJNQjRYRFRFek1Ea3lOREUyTVRJMU5sb1hEVEl6TURreU1qRTJNVEkxTmxvd05ERUxNQWtHCitBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3CitnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEYkhIOHVDODIvenRGMUVLQ2l1TTU5CitxdUlGNEhyWVJHT1B0YjNBc0JtNU43Z1pTZzd4WFhTQVowYUhCdDViZndZRHZjR05YZ2NWMUZ2MDNPWFBQZm5CCitFU3l1YXJtS3ZSMW5aaGZxVHIzYkZacUNoK1R3ZU1PamhZZXcvWitwbVYvak0rek02Z3UxWVY3eFNYNC9veTNxCitBUXpNUXBwMm04VFFOOU94RndGaEFSWlpmaHdYdzFQOTBYTExUR0FWMm4zaTZxMVE3NDdpaTlScWQxWFdjTmxyCit1L0h1T1FRNG83M2kwZUJtYStLY1I1bnBLT2EyL0M3S1owT0U2TldEMXAyWWF3RStnZHc4ZXNyNTg1ejMxaWdiCitKM2g4dzlEVlk2ZUJOSW10SldxOTh1cnQrbGY4NVRUR3dROXhMZElJRUJ1dFJFSGcvbm1nWTVPS3NWM3BzTzV2CitBZ01CQUFHamdaSXdnWTh3Q1FZRFZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVTRqL21MZlRudUthTTNHMFhweGhBCitKMkYyRHgwd1l3WURWUjBqQkZ3d1dvQVVENG05WTBIcnkxNFhLUDlvTUQzQmlOQ2NXRG1oUDZROU1Ec3hDekFKCitCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnCitWR1Z6ZENCRFFZSUJEekFLQmdncWhrak9QUVFEQWdObkFEQmtBakJrUDFiR2xadnhuWXlTWmpkQnE0bThsa3l6CisyY2pmcWpZczhDT0VrUmtPTmFWejc4ODhIdkZkR3BMOTh1UWVGdkVDTUhDeUNySHBya0d6dnEvTDlrVW54OUJoCisySUhiQ3piYmk5bW9ZQzFYY094Z2ZzRUttaHRWRi91UWRmOCszVnRHcUE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOC5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI4LmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTk5NDFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOC5rZXkKQEAgLTAsMCArMSwyNyBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJRW93SUJBQUtDQVFFQTJ4eC9MZ3ZOdjg3UmRSQ2dvcmpPZmFyaUJlQjYyRVJqajdXOXdMQVp1VGU0R1VvTworOFYxMGdHZEdod2JlVzM4R0E3M0JqVjRIRmRSYjlOemx6ejM1d1JFc3JtcTVpcjBkWjJZWDZrNjkyeFdhZ29maworOEhqRG80V0hzUDJmcVpsZjR6UHN6T29MdFdGZThVbCtQNk10NmdFTXpFS2FkcHZFMERmVHNSY0JZUUVXV1g0YworRjhOVC9kRnl5MHhnRmRwOTR1cXRVTytPNG92VWFuZFYxbkRaYTd2eDdqa0VPS085NHRIZ1ptdmluRWVaNlNqbQordHZ3dXltZERoT2pWZzlhZG1Hc0JQb0hjUEhySytmT2M5OVlvR3lkNGZNUFExV09uZ1RTSnJTVnF2ZkxxN2ZwWAorL09VMHhzRVBjUzNTQ0JBYnJVUkI0UDU1b0dPVGlyRmQ2YkR1YndJREFRQUJBb0lCQUZ2ZjN4UVhydlkyYW0yRAordzFkMzFsMnJRWXJsVFoxUlQ4MzZqczQxQ1JRNDRPRDV4THBBVFpGcHZKRHh1RnIxTURoeFlLOCtOZ3BaT1JXNworYWtFejQzMnBEZXMwcFFnZnRDeWZDbmdjL0U3WkNDaWpnc095WDVZNWIyUXZkTHRRckh4QVVaSzZzSjRsYmdJTworcHZsWUd2Qjc4RG5WMDU3WVFmWnM4ajdYUHFURllWTmxJeDZ4Q0Z4d2lNVGVVR1p2U3JOOENwS1QvNXpzU0U1ZAoreFgyYWxhWWlXbDJvU09JN2F4cnRwTUVYQUkwQS9PL04xbUkrbjNjczE1Y2ZBSmEvZk1qRU1tR3owUHFnNUlsUworSXdaV3ByNkJ6YmRIbGRPL1hsVkVyS01vNGxBRFVtc3IyZCtxM3ZmUW1MRUF5aXpwN09tVTl2YytEWGNLOWpIKworYURkMGdjRUNnWUVBN1NBVkEvYmFuWWVqTjdPdm44NHBKK21ndUlOTXdQRlpkOWVXOW9wMVBnUnJ5R0NwZGg3NworcVY2NFlJakZod3QxSlFRSWY1R0NQRDVVbTBaOG1ZNTlhNk1VK3NKR0dCN3h3VnVDdVhiREFLSkpGNi81OGY3LworTW9MenNvUUZ5NTBUcEE5MFQwV092TVdEbldTTFRZalJyMWZGVEtOV05jdlBvRk9ubUF5ZEdiVUNnWUVBN0kxWAorbUNGUlNHaXUwTmROMmo3bXd0VHVkSTRtL3F5WWZVUXhwU3Z2Z04yRFNIdEc1Nmg4RHoxdzdDcE5sTERIb2RQUAorZThvaVhNUy9iQkJOd1dIdTloeGhCcWRtdmo0QytLNUF4MEVLWXg3Q3NIV0s3Qko4dThBazh4d2F1Zk1pZWp0NQoraW9KaEk0cHl1a0JFcUpibnV6bXVEY3VvcXhQRjFaVG1NL1d6cmhNQ2dZQmk1VjkrY01VS3NGaEZVZjZzVXFwZAoraUJYTS9vM1RacFZlNHg2R0lvYjFYNWlvVUpBOHdIMUxUVUx1bC94eDd6aGpRTVJlbUF4T0hkemhpY3RMcTk3cAorTm5INGgyLytmV0ZzdUVMVUlSRUJRYTNrWURPSlYwV09Cb21tNldNVllhU2dad1dtVGlkUzJibWp1aHhUTVAzcQorK0Z0RU5GY3ZScHFJam5zMmNnUlBoUUtCZ1FEY2poaWE1bzJ6OXE3d1Y1N21HM25yTkwrMGV3b09zSHhwWjVqbQorU1NYQlFFZjAzOFJIb0ljemFuVU1MWkV5VHZXRGhFclRQNjkwVVptdE56SllXV2lGbmdZMVB3WUQ0U3ZDRkM2ZgorMlp2R3VWcUxUcjBkeVVyMWYzeTBFNE16MTJkUkVuMExVTzhqUlNZZFZHanZ5K3Y2WEJoV0VvcU1JQjU0T3FHOAorMXAwV2N3S0JnRjRLZnpCT2kxRGFyQ3V4YWE2aHVVZE5jOGVmb2c1R08xbG1OZW5LbFJ1UExwNXdwM3F2V3N5SAorYmxmYnRKUU5FMURoYkRHd216UENHTGMzd1h4MHQwZ0NyY01reG9SQVRGTU5PU0xvZEc3TWJrajlBb0VNeDk0WAorWFlmaTV2WWZ0YkVVbVplWnRIWkJJM28zdXAveHRQY3VHTmxiOEJTSUlPYVF0SVl5YnhLYQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjhfaW50LWNhMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI4X2ludC1jYTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOGRhNzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI4X2ludC1jYTIuY3J0CkBAIC0wLDAgKzEsMzYgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzZ6Q0NBbktnQXdJQkFnSUJFVEFLQmdncWhrak9QUVFEQWpCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUI0WERURXpNRGt5TkRFMk1USTFObG9YRFRJek1Ea3lNakUyTVRJMU5sb3dOREVMTUFrRworQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJJd0VBWURWUVFERXdsc2IyTmhiR2h2YzNRdworZ2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRGJISDh1QzgyL3p0RjFFS0NpdU01OQorcXVJRjRIcllSR09QdGIzQXNCbTVON2daU2c3eFhYU0FaMGFIQnQ1YmZ3WUR2Y0dOWGdjVjFGdjAzT1hQUGZuQgorRVN5dWFybUt2UjFuWmhmcVRyM2JGWnFDaCtUd2VNT2poWWV3L1orcG1WL2pNK3pNNmd1MVlWN3hTWDQvb3kzcQorQVF6TVFwcDJtOFRRTjlPeEZ3RmhBUlpaZmh3WHcxUDkwWExMVEdBVjJuM2k2cTFRNzQ3aWk5UnFkMVhXY05scgordS9IdU9RUTRvNzNpMGVCbWErS2NSNW5wS09hMi9DN0taME9FNk5XRDFwMllhd0UrZ2R3OGVzcjU4NXozMWlnYgorSjNoOHc5RFZZNmVCTkltdEpXcTk4dXJ0K2xmODVUVEd3UTl4TGRJSUVCdXRSRUhnL25tZ1k1T0tzVjNwc081dgorQWdNQkFBR2pnWkl3Z1k4d0NRWURWUjBUQkFJd0FEQWRCZ05WSFE0RUZnUVU0ai9tTGZUbnVLYU0zRzBYcHhoQQorSjJGMkR4MHdZd1lEVlIwakJGd3dXb0FVRDRtOVkwSHJ5MTRYS1A5b01EM0JpTkNjV0RtaFA2UTlNRHN4Q3pBSgorQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3ZworVkdWemRDQkRRWUlCRHpBS0JnZ3Foa2pPUFFRREFnTm5BREJrQWpCa1AxYkdsWnZ4bll5U1pqZEJxNG04bGt5egorMmNqZnFqWXM4Q09Fa1JrT05hVno3ODg4SHZGZEdwTDk4dVFlRnZFQ01IQ3lDckhwcmtHenZxL0w5a1VueDlCaAorMklIYkN6YmJpOW1vWUMxWGNPeGdmc0VLbWh0VkYvdVFkZjgrM1Z0R3FBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzZUQ0NBZEdnQXdJQkFnSUJEekFOQmdrcWhraUc5dzBCQVFzRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRNd09USTBNVFl3T0RReVdoY05Nak13T1RJeU1UWXdPRFF5V2pCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUU4T2loM2ZYNVNMZU4xZG1GbmNRbAorV013OStZNnNYYmxobHJYQnhoWHhqd2R3cENIRU5uK2ZvVVZkcnFZVllhN1N1djNRVmVPNm5KMTlIM1FOaXhXOAoraWsxUCtoeHNiYXE4YnRhNzh2QXlIbUM0RW1YUUxnMXc3b3hiOVE4MnFYMVlvNEdWTUlHU01CMEdBMVVkRGdRVworQkJRUGliMWpRZXZMWGhjby8yZ3dQY0dJMEp4WU9UQmpCZ05WSFNNRVhEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVgorRCtzK3ZNZjkvNkUvcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrdworRndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSQoraHZjTkFRRUxCUUFEZ2dFQkFBamVhVFVhQ0JpWFQxQ1lMVnI2VUZTZVJOWkJyRFBuajZQd3FVUVR2Z0I1STVuNgoreVhxb0U0UllEYUVMMExnMjRqdUZ4STI2aXRCdXlwdG82dnNjZ0dxNzdjZnJQL2F2U2R4VSt4ZVo0YkNXdmgzTQorZGRqOWxta28yVThJOEdoQmNIcFN1SWlUdmdLREI4ZUtramVxM0FzTEdjaEhEdmlwOHBCM0loY05mTDdXOTRaZgorNy9sSDlWUWlFMy9weDdhbUQzMmNpZG9QdldMQTlVM2YxRnNQbUpFU1V6MHd3TmZJTnBEam1QcjhkR2JrQ04rTQorQ0ZoeG82c0NmSzhLTFlHNG5ZWDhGd3hWUjg2a3BTck85ZTg0QVgwWVliZHp4cHJiYzJYT2FlYko4K0JEbXp1dAorQVJrRDdEVFhyb2ROMXdWN2pRSmtyVXVFd1BqOVJodmsrTUZSa2F3PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1iYWQtbWdmaGFzaC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LWJhZC1tZ2ZoYXNoLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGVmNjllCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1iYWQtbWdmaGFzaC5jcnQKQEAgLTAsMCArMSwyMCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEV3pDQ0FoS2dBd0lCQWdJQkdEQStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHU0FGbEF3UUNBYUVhCitNQmdHQ1NxR1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnU2lCQUlDQU40d096RUxNQWtHQTFVRUJoTUNUa3d4CitFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJNQjRYCitEVEUwTURFeU1ERXpOVGMwTlZvWERUSTBNREV4T0RFek5UYzBOVm93TkRFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQCitCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodmMzUXdnWjh3RFFZSktvWklodmNOCitBUUVCQlFBRGdZMEFNSUdKQW9HQkFOMFJpcCtadXJCb3lpcnFPMnB0V1pmdFRzbFU1QTN1enFCOW9CNnE2QTdDCit1eE5BMjRvU2pva1RKS1hGOWZyWTlaRFh5TXJMeGY2VEhhL2FFaU56VW5sR0dycWdWeXQyRmpHenFLL25PSnNJCitpMk9aT2dvbDdrWFNHRmk2dVpNYTdkUlltbU1iTi96M0ZBaWZoV1ZKODFreWJkSGc2RzNlVXUxbXRLa0wya0NWCitBZ01CQUFHamdaSXdnWTh3Q1FZRFZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVTd2UEg5UjhWcFUxSGljSFRJbU95CiszNmZPdlZFd1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZitoUDZROU1Ec3hDekFKCitCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnCitWR1Z6ZENCRFFZSUJBREErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDR1NBRmxBd1FDQWFFYU1CZ0dDU3FHCitTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ1NpQkFJQ0FONERnZ0VCQUlmbGlvaE5qejRDTEdiSFdnV1JCRlEzCitEaWZuMDI3Wm5VTFR2b2tUNjdpaTFzSnpFU3pxYUlha3l5dThHUndmb0ZSTmgvcmJHZmU0QzZlOVNrd0tibkRnCitXRTlTV2JLNnVrSVFiTXk2OUMrQ1ZxRmxSVUhiT053L2RtY25lQVd5WllHeC8yU2Y0RDVra3BJV05EQmVLdWFWCitINjlYUFpDZU4zUUFBQ21kQWZvNE5ZVzBJNjlhMU9TYVVyVHlHVDFuQk9yelE4WTBhSkJuQ0pBdGU0OWJoUUVXCitLSnYwa01qKzhaRzFYMFJvU2RrbGYzR3FkTFVic2ZKMnR4dTE0R0dBeHk0QzFnbDJKV3pvQkhONUxNTGYwY1o5Cit1RVl1aTdOLzVia1N2OEtYZGJHdlN6Z242elowTWlDSk1paUdFZjBMMUZ4QmlCQ1ZzSzRDMmlkcGlaSCtlMjg9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LWJhZC1zYWx0bGVuLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktYmFkLXNhbHRsZW4uY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZGE4ODMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LWJhZC1zYWx0bGVuLmNydApAQCAtMCwwICsxLDIwIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURXekNDQWhLZ0F3SUJBZ0lCR0RBK0Jna3Foa2lHOXcwQkFRb3dNYUFOTUFzR0NXQ0dTQUZsQXdRQ0FhRWEKK01CZ0dDU3FHU0liM0RRRUJDREFMQmdsZ2hrZ0JaUU1FQWdHaUJBSUNBTjR3T3pFTE1Ba0dBMVVFQmhNQ1Rrd3gKK0VUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3dGd1lEVlFRREV4QlFiMnhoY2xOVFRDQlVaWE4wSUVOQk1CNFgKK0RURTBNREV5TURFek5UYzBOVm9YRFRJME1ERXhPREV6TlRjME5Wb3dOREVMTUFrR0ExVUVCaE1DVGt3eEVUQVAKK0JnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJJd0VBWURWUVFERXdsc2IyTmhiR2h2YzNRd2daOHdEUVlKS29aSWh2Y04KK0FRRUJCUUFEZ1kwQU1JR0pBb0dCQU4wUmlwK1p1ckJveWlycU8ycHRXWmZ0VHNsVTVBM3V6cUI5b0I2cTZBN0MKK3V4TkEyNG9Tam9rVEpLWEY5ZnJZOVpEWHlNckx4ZjZUSGEvYUVpTnpVbmxHR3JxZ1Z5dDJGakd6cUsvbk9Kc0kKK2kyT1pPZ29sN2tYU0dGaTZ1Wk1hN2RSWW1tTWJOL3ozRkFpZmhXVko4MWt5YmRIZzZHM2VVdTFtdEtrTDJrQ1YKK0FnTUJBQUdqZ1pJd2dZOHdDUVlEVlIwVEJBSXdBREFkQmdOVkhRNEVGZ1FVN3ZQSDlSOFZwVTFIaWNIVEltT3kKKzM2Zk92VkV3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mK2hQNlE5TURzeEN6QUoKK0JnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2cKK1ZHVnpkQ0JEUVlJQkFEQStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHU0FGbEF3UUNBYUVhTUJnR0NTcUcKK1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnR2lCQUlDQU40RGdnRUJBRTdUNTRjeVVmMEJ5TnIzNEphb2pGYW0KK2hWMFQ5UVNjNHdKMTdzWDY3cnhZSW9yWFU4TXluYW5lSnpGeEQ5dXRPRDNkcTJUT04xOFZzd2hUMk1jRGdlZmwKK1hNd2l2Q0MwbldvZDhQazYzOFFhSHhiYXFDN1hTcTBRUkJmT01Yd1Y3a25MTnhJOHNtYzlVSmFjbzM5VkVjR0QKK3lDa3E0QnkvVkNXVHB2SisxaHg0elo4V29YcEZKRk01bTV5OW9FejRsZ052LzZXdTdJTHp0eU9rMnlKaVNSOHIKK1lvb0M0elZlVU9adURPNkF0L05YWnVTdm1LbXIrdGZGckZBMUFBLzd5UjVvZFFicUZWTlNKK3UweDFKdjhSYTYKK0pYQTRjWHNuYURhUmUrV20wTDBwKzJQdFFXWEU1bnBYWUliRkhBQTlFT0MzQWI4b2FQOU0vRjZ5UU1hLzJpcz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktYmFkc2lnbi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LWJhZHNpZ24uY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNTY1NDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LWJhZHNpZ24uY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJREJUQ0NBZWVnQXdJQkFnSUJGakFUQmdrcWhraUc5dzBCQVFvd0JxSUVBZ0lBNmpBN01Rc3dDUVlEVlFRRworRXdKT1RERVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZworUTBFd0hoY05NVFF3TVRJd01UTXpPREUyV2hjTk1qUXdNVEU0TVRNek9ERTJXakEwTVFzd0NRWURWUVFHRXdKTworVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0JuekFOQmdrcQoraGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQTNSR0tuNW02c0dqS0t1bzdhbTFabCsxT3lWVGtEZTdPb0gyZworSHFyb0RzSzdFMERiaWhLT2lSTWtwY1gxK3RqMWtOZkl5c3ZGL3BNZHI5b1NJM05TZVVZYXVxQlhLM1lXTWJPbworcitjNG13aUxZNWs2Q2lYdVJkSVlXTHE1a3hydDFGaWFZeHMzL1BjVUNKK0ZaVW56V1RKdDBlRG9iZDVTN1dhMAorcVF2YVFKVUNBd0VBQWFPQmtqQ0JqekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJUdTg4ZjFIeFdsVFVlSgord2RNaVk3TGZwODY5VVRCakJnTlZIU01FWERCYWdCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvNkUvcEQwdworT3pFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRYjJ4aAorY2xOVFRDQlVaWE4wSUVOQmdnRUFNQk1HQ1NxR1NJYjNEUUVCQ2pBR29nUUNBZ0RxQTRJQkFRREFvZy9qWHlkUgordkRJdWdUekJYdGZWSzBDRVg4aXlRNGNWelFtWFdTbmU4MjA0djk0M0s1RDJoa3RTQmtqZFFVZGNuVnZWZ0xSNgordGU1MGpWODlwdE4vTm9mWCtmbzlmaFNSTjl2R2dRVld6T09GaU8wemNUaHk3NDlwaXJKdTFLcTVPSmR0aEl5VworUHUwVUN6NUcwazNrVHAwSlBldkdsc05jOFM5QWsxdEZ1QjBJUEpqcmJmT0RXSFMyTER1TytkQjZncGtOVGRyagorODhvZ1l0QnNONEQ1Z3NYQlJVZm9iWG9rVXdlakJ3THJENlh3eVF4KzBiTXdTQ3hnSEVoeHZ1VWt4MXZkbFhHdworSkczYUY5MnU4bUl4b0tTQVBhUGRxeTkzMG1Rdm1wVVdjTjVZMUlNYnRFR29RQ0tNWWdvc0ZjYXpKcEpjam5YMQorbzRIbC9scWp3Q0ZHCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LWRlZmF1bHRzLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktZGVmYXVsdHMuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZTVjODcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LWRlZmF1bHRzLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURCakNDQWU2Z0F3SUJBZ0lCU0RBTkJna3Foa2lHOXcwQkFRb3dBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01UUXdOakExTVRVMU5qVXpXaGNOTWpRd05qQXlNVFUxTmpVeldqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERDQm56QU5CZ2txaGtpRzl3MEIKK0FRRUZBQU9CalFBd2dZa0NnWUVBM1JHS241bTZzR2pLS3VvN2FtMVpsKzFPeVZUa0RlN09vSDJnSHFyb0RzSzcKK0UwRGJpaEtPaVJNa3BjWDErdGoxa05mSXlzdkYvcE1kcjlvU0kzTlNlVVlhdXFCWEszWVdNYk9vcitjNG13aUwKK1k1azZDaVh1UmRJWVdMcTVreHJ0MUZpYVl4czMvUGNVQ0orRlpVbnpXVEp0MGVEb2JkNVM3V2EwcVF2YVFKVUMKK0F3RUFBYU9CbnpDQm5EQUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlR1ODhmMUh4V2xUVWVKd2RNaVk3TGYKK3A4NjlVVEJqQmdOVkhTTUVYREJhZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS82RS9wRDB3T3pFTE1Ba0cKK0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3dGd1lEVlFRREV4QlFiMnhoY2xOVFRDQlUKK1pYTjBJRU5CZ2dFQU1Bc0dBMVVkRHdRRUF3SUZvREFOQmdrcWhraUc5dzBCQVFvd0FBT0NBUUVBR1VkaW00dXkKKy9yQkRGTUY4cWhqSDFxc3YwbzhPTjRIZ1AzWVhiZEtkSU1mZCtwNUt0b3FIUW5ya2l4V3hhSXZmT1JuUjRtR20KK2Y4SDVCaW13SWtOTHh5N3pTODhUVkRPWWVsOGc3QjJ5bDBucTRiaWtpODNOU3ROQllaSmp4S1QwdWQ1TzVtR2QKK2pIZHk5dlRFYzdoOHErU0h6UmRncE5GWHlLWTVPUVluZzFMSGNvOGgxVVI4L25tUE11RHRvY0hNbm1NWHU2OGEKKzY5K1R0Wnh4OTAvVjRnSlpPb0wxaUNpOEhFc0tvSnptL0w4amk1NE9ZdDdGeGdGZkUzVm1Mc1hlTWFXWU84R1MKK0JVeGg1a3FaMjVPOGhRWEs1eXdmdVZLODNEby9Tc29DbGJneDltYm95YnNlR1ZGSUpheHM5ZTY2R0ZETW9JM0IKKzA5SnFXdjREb0xObndnPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktc2hhMjI0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktc2hhMjI0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjA1ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1zaGEyMjQuY3J0CkBAIC0wLDAgKzEsMjAgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFd6Q0NBaEtnQXdJQkFnSUJGekErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDR1NBRmxBd1FDQktFYQorTUJnR0NTcUdTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ1NpQkFJQ0FPSXdPekVMTUFrR0ExVUVCaE1DVGt3eAorRVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CTUI0WAorRFRFME1ERXlNREV6TlRjek5sb1hEVEkwTURFeE9ERXpOVGN6Tmxvd05ERUxNQWtHQTFVRUJoTUNUa3d4RVRBUAorQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3Z1o4d0RRWUpLb1pJaHZjTgorQVFFQkJRQURnWTBBTUlHSkFvR0JBTjBSaXArWnVyQm95aXJxTzJwdFdaZnRUc2xVNUEzdXpxQjlvQjZxNkE3QwordXhOQTI0b1Nqb2tUSktYRjlmclk5WkRYeU1yTHhmNlRIYS9hRWlOelVubEdHcnFnVnl0MkZqR3pxSy9uT0pzSQoraTJPWk9nb2w3a1hTR0ZpNnVaTWE3ZFJZbW1NYk4vejNGQWlmaFdWSjgxa3liZEhnNkczZVV1MW10S2tMMmtDVgorQWdNQkFBR2pnWkl3Z1k4d0NRWURWUjBUQkFJd0FEQWRCZ05WSFE0RUZnUVU3dlBIOVI4VnBVMUhpY0hUSW1PeQorMzZmT3ZWRXdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSgorQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3ZworVkdWemRDQkRRWUlCQURBK0Jna3Foa2lHOXcwQkFRb3dNYUFOTUFzR0NXQ0dTQUZsQXdRQ0JLRWFNQmdHQ1NxRworU0liM0RRRUJDREFMQmdsZ2hrZ0JaUU1FQWdTaUJBSUNBT0lEZ2dFQkFESkV4amZXV3ZMMjhsZ2orR0dndmlxbworUEhaTHhJMHBMUVVuRkpROUtwdTZqeGZJQ3NlQkYwMFo2QkpFL1JjWURwSWllNUdEdC84dS9pNnhCNkxpMjlQbQorZzVuQU5nZC9ZM2ZGblc3ZDB5ZFZqaVNuZXRsUHVmL2pUbFdRbDZtUVRIMnhxWXU4SjhkM0pSeFFkUmlEWWJWbQordXl3VzJkNnJrc2lxbTZkUEQ1bDRBNURjZW1jWW84Zi8xSWZqNVdORENWOC9PSGV4K0FuVzJjY0R2V0FuVmdTUgorQjJWcE9YSnpWRnVCc3VmNHRHVm0vMlRVTVNCNk5jdkZjNlRlSmsxa3piWnhpaTRRaktYdEgxU2ZyVlA1OWlFZQorbDE3TllBRVdBUmpCcFFXQml1dFJHK1FNMmV0MHNOaVVCdVd4VGt2ZDBlU2dlbmNOeXNWQU9zWnFycWFYM0NZPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1zaGEyNTYuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1zaGEyNTYuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMGFhMzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LXNoYTI1Ni5jcnQKQEAgLTAsMCArMSwyMCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEV3pDQ0FoS2dBd0lCQWdJQkdEQStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHU0FGbEF3UUNBYUVhCitNQmdHQ1NxR1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnR2lCQUlDQU40d096RUxNQWtHQTFVRUJoTUNUa3d4CitFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJNQjRYCitEVEUwTURFeU1ERXpOVGMwTlZvWERUSTBNREV4T0RFek5UYzBOVm93TkRFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQCitCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodmMzUXdnWjh3RFFZSktvWklodmNOCitBUUVCQlFBRGdZMEFNSUdKQW9HQkFOMFJpcCtadXJCb3lpcnFPMnB0V1pmdFRzbFU1QTN1enFCOW9CNnE2QTdDCit1eE5BMjRvU2pva1RKS1hGOWZyWTlaRFh5TXJMeGY2VEhhL2FFaU56VW5sR0dycWdWeXQyRmpHenFLL25PSnNJCitpMk9aT2dvbDdrWFNHRmk2dVpNYTdkUlltbU1iTi96M0ZBaWZoV1ZKODFreWJkSGc2RzNlVXUxbXRLa0wya0NWCitBZ01CQUFHamdaSXdnWTh3Q1FZRFZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVTd2UEg5UjhWcFUxSGljSFRJbU95CiszNmZPdlZFd1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZitoUDZROU1Ec3hDekFKCitCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnCitWR1Z6ZENCRFFZSUJBREErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDR1NBRmxBd1FDQWFFYU1CZ0dDU3FHCitTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ0dpQkFJQ0FONERnZ0VCQUgwK2tucWtjTGF4ZURrZW5CUWdkNFFnCiszWnlBaHRwaUxVNjg5bXcrM2NYQi91ekZyQ0l4RUw1YUdoMWVTaitEc3pCK0Z0c1owNnV4N0pWUXFWT0EyV205Cit5THhDNndGOE9PWWowbkJhOTFCV0xoUkFITGhtSWRXc1ZrN0hsOUtvalpkNFR3VjJOK1pFVi9CTHh5b1J2SzRICitWNHhDcHpnRFNpVFBlOEV0azRyKzBha2JyNmJzT1VCYXlQYjdNR0xIdWJaS3E4TnNGQW1teW5wK2ZQbUhkM1NFCiswb29KZGlaMU1tS1BLTEU1T2cvaFhDSThxZWlYUVVSNm9RN2IyWE9Oc3JJMkhJajJTQTlkQTVxbUh3RTVQYk11Cit6cXhRM1I4M2JvcUxYYmtGT1JuK1VpWUxtZmZxZG9XdU55MDBCSE1DcnhSQTlEVXYrV3lONG5wTE1GOHJPSnc9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LXNoYTM4NC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LXNoYTM4NC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhNjNlNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktc2hhMzg0LmNydApAQCAtMCwwICsxLDIwIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURXekNDQWhLZ0F3SUJBZ0lCR1RBK0Jna3Foa2lHOXcwQkFRb3dNYUFOTUFzR0NXQ0dTQUZsQXdRQ0FxRWEKK01CZ0dDU3FHU0liM0RRRUJDREFMQmdsZ2hrZ0JaUU1FQWdLaUJBSUNBTTR3T3pFTE1Ba0dBMVVFQmhNQ1Rrd3gKK0VUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3dGd1lEVlFRREV4QlFiMnhoY2xOVFRDQlVaWE4wSUVOQk1CNFgKK0RURTBNREV5TURFek5UYzFPRm9YRFRJME1ERXhPREV6TlRjMU9Gb3dOREVMTUFrR0ExVUVCaE1DVGt3eEVUQVAKK0JnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJJd0VBWURWUVFERXdsc2IyTmhiR2h2YzNRd2daOHdEUVlKS29aSWh2Y04KK0FRRUJCUUFEZ1kwQU1JR0pBb0dCQU4wUmlwK1p1ckJveWlycU8ycHRXWmZ0VHNsVTVBM3V6cUI5b0I2cTZBN0MKK3V4TkEyNG9Tam9rVEpLWEY5ZnJZOVpEWHlNckx4ZjZUSGEvYUVpTnpVbmxHR3JxZ1Z5dDJGakd6cUsvbk9Kc0kKK2kyT1pPZ29sN2tYU0dGaTZ1Wk1hN2RSWW1tTWJOL3ozRkFpZmhXVko4MWt5YmRIZzZHM2VVdTFtdEtrTDJrQ1YKK0FnTUJBQUdqZ1pJd2dZOHdDUVlEVlIwVEJBSXdBREFkQmdOVkhRNEVGZ1FVN3ZQSDlSOFZwVTFIaWNIVEltT3kKKzM2Zk92VkV3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mK2hQNlE5TURzeEN6QUoKK0JnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2cKK1ZHVnpkQ0JEUVlJQkFEQStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHU0FGbEF3UUNBcUVhTUJnR0NTcUcKK1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnS2lCQUlDQU00RGdnRUJBQmY4R3lxMlZZdU4xRUJXMW5PYXBEUXAKK0IvS3VhZk5XMkdFSjdGbVFLTnlBN01JajFZcW8yTXRKNi9PUW9qUlEzRjVybk80eWptdklQc1hlUWFNeEpCaUkKK2Fhb0FsTHBIKytGK29YTXEvMGFTMFdTWnJTTHJzaDJGcGF5OWNCREd3ZWsyckRPWDlrTStaY1B6R2l0VndXS1gKK1RuT1cyMmhwY2w3dTk1Q3BaSCtKWlRjdG81bkwzdFR5VjlwSXkrdFNLUVFmalBCK0cwVEFaQ3NPa2JDR1BMdWcKK3FkanZxRlF3T2YxNVZ4UU1qN05SaVhqbHFKdnN4K0k3QjJBSWhyczREelFNRXlpV3E5Uy9QenBRdUZVNXYvS2cKK3MyaU1MSjV5Z3Y1YU4zUFlxR2xFMVptdmd5UnA1aC9MYVRHSTJMNmx6UlRuZWNPaHRQdjMwTjJ0eWFEQUVmbz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktc2hhNTEyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktc2hhNTEyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjExYjkyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1zaGE1MTIuY3J0CkBAIC0wLDAgKzEsMjAgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFd6Q0NBaEtnQXdJQkFnSUJHakErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDR1NBRmxBd1FDQTZFYQorTUJnR0NTcUdTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ09pQkFJQ0FMNHdPekVMTUFrR0ExVUVCaE1DVGt3eAorRVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CTUI0WAorRFRFME1ERXlNREV6TlRneE1sb1hEVEkwTURFeE9ERXpOVGd4TWxvd05ERUxNQWtHQTFVRUJoTUNUa3d4RVRBUAorQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3Z1o4d0RRWUpLb1pJaHZjTgorQVFFQkJRQURnWTBBTUlHSkFvR0JBTjBSaXArWnVyQm95aXJxTzJwdFdaZnRUc2xVNUEzdXpxQjlvQjZxNkE3QwordXhOQTI0b1Nqb2tUSktYRjlmclk5WkRYeU1yTHhmNlRIYS9hRWlOelVubEdHcnFnVnl0MkZqR3pxSy9uT0pzSQoraTJPWk9nb2w3a1hTR0ZpNnVaTWE3ZFJZbW1NYk4vejNGQWlmaFdWSjgxa3liZEhnNkczZVV1MW10S2tMMmtDVgorQWdNQkFBR2pnWkl3Z1k4d0NRWURWUjBUQkFJd0FEQWRCZ05WSFE0RUZnUVU3dlBIOVI4VnBVMUhpY0hUSW1PeQorMzZmT3ZWRXdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSgorQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3ZworVkdWemRDQkRRWUlCQURBK0Jna3Foa2lHOXcwQkFRb3dNYUFOTUFzR0NXQ0dTQUZsQXdRQ0E2RWFNQmdHQ1NxRworU0liM0RRRUJDREFMQmdsZ2hrZ0JaUU1FQWdPaUJBSUNBTDREZ2dFQkFDZFZvekZxNnJVaVhvK2liNVkyb1BzUgorNnh4bDRZZG4zTHBVb1lyUHBUT3JoY1hKV1cvdE9MSEd1Q0YvbVNSZlV6S2FNSWZMNDE4Y1pIWW52dW12dXR0dQorNnozdHA1RTFWc2laQ1UyTVdKbnpqS1N4RkJPc3M0M0FtcEpISG9hcEdGWnUycHhPYkJQcWVnQUtIWWtLV09MawordEpEajQ3UHVyV2dFZWs5ajFuTDdQYzF0VmY1OWZtL3lTcDRmV2tYTEx2UWlLaWQxNTE2VmlvTHlhY1V2SzN6VQorNkVnejhqTXQ3RDVjOUtwYUV4TFJUQU5Wc1RocU81L2RtUjM2Yk93bTNIcGJkZTdETmRneHJ1NDF0aUxNcUpzLworNXBYM2NlYUoxWFEvbDBpZGo1LzlpcHZxSEhVZ3V5azdIMjJId1FIUWRTRDlvSWhhOGtFTTNQNkNqcGZFN3lZPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS13aXRoLWNhLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktd2l0aC1jYS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3OGNmZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktd2l0aC1jYS5jcnQKQEAgLTAsMCArMSw5OSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEQlRDQ0FlZWdBd0lCQWdJQkZqQVRCZ2txaGtpRzl3MEJBUW93QnFJRUFnSUE2akE3TVFzd0NRWURWUVFHCitFd0pPVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnCitRMEV3SGhjTk1UUXdNVEl3TVRNek9ERTJXaGNOTWpRd01URTRNVE16T0RFMldqQTBNUXN3Q1FZRFZRUUdFd0pPCitUREVSTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERDQm56QU5CZ2txCitoa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBM1JHS241bTZzR2pLS3VvN2FtMVpsKzFPeVZUa0RlN09vSDJnCitIcXJvRHNLN0UwRGJpaEtPaVJNa3BjWDErdGoxa05mSXlzdkYvcE1kcjlvU0kzTlNlVVlhdXFCWEszWVdNYk9vCityK2M0bXdpTFk1azZDaVh1UmRJWVdMcTVreHJ0MUZpYVl4czMvUGNVQ0orRlpVbnpXVEp0MGVEb2JkNVM3V2EwCitxUXZhUUpVQ0F3RUFBYU9Ca2pDQmp6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlR1ODhmMUh4V2xUVWVKCit3ZE1pWTdMZnA4NjlVVEJqQmdOVkhTTUVYREJhZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS82RS9wRDB3CitPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3dGd1lEVlFRREV4QlFiMnhoCitjbE5UVENCVVpYTjBJRU5CZ2dFQU1CTUdDU3FHU0liM0RRRUJDakFHb2dRQ0FnRHFBNElCQVFEQW9nL2pYeWRSCit2REl1Z1R6Qlh0ZlZLMENFWDhpeVE0Y1Z6UW1YV1NuZTgyMDR2OTQzSzVEMmhrdFNCa2pkUVVkY25WdlZnTFI2Cit0ZTUwalY4OXB0Ti9Ob2ZYK2ZvOWZoU1JOOXZHZ1FWV3pPT0ZpTzB6Y1RoeTc0OXBpckp1MUtxNU9KZHRoSXlXCitQdTBVQ3o1RzBrM2tUcDBKUGV2R2xzTmM4UzlBazF0RnVCMElQSmpyYmZPRFdIUzJMRHVPK2RCNmdwa05UZHJqCis4OG9nWXRCc040RDVnc1hCUlVmb2JYb2tVd2VqQndMckQ2WHd5UXgrMGJNd1NDeGdIRWh4dnVVa3gxdmRsWEd3CitKRzNhRjkydThtSXhvS1NBUGFQZHF5OTMwbVF2bXBVV2NONVkxSU1idEVHb1FDS01ZZ29zRmNhekpwSmNqblgxCitvNEhsL2xxandDRUcKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMCAoMHgwKQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBGZWIgMTIgMTQ6NDQ6MDAgMjAxMSBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEZlYiAxMiAxNDo0NDowMCAyMDIxIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgIFJTQSBQdWJsaWMgS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1cyAoMjA0OCBiaXQpOgorICAgICAgICAgICAgICAgICAgICAwMDpjMDpkZjozNzpmYzoxNzpiYjplMDo5Njo5ZDozZjo4NjpkZTo5NjozMjoKKyAgICAgICAgICAgICAgICAgICAgN2Q6NDQ6YTU6MTY6YTA6Y2Q6MjE6ZjE6OTk6ZDQ6ZWM6ZWE6Y2I6N2M6MTg6CisgICAgICAgICAgICAgICAgICAgIDU4OjA4Ojk0OmE1OmVjOjliOmM1OjhiOmRmOjFhOjFlOjk5OjM4Ojk5Ojg3OgorICAgICAgICAgICAgICAgICAgICAxZTo3YjpjMDo4ZDozOTpkZjozODo1ZDo3MDo3ODowNzpkMzo5ZTpkOTo5MzoKKyAgICAgICAgICAgICAgICAgICAgZTg6Yjk6NzI6NTE6YzU6Y2U6YTM6MzA6NTI6YTk6ZjI6ZTc6NDA6NzA6MTQ6CisgICAgICAgICAgICAgICAgICAgIGNiOjQ0OmEyOjcyOjBiOmMyOmU1OjQwOmY5OjNlOmU1OmE2OjBlOmIzOmY5OgorICAgICAgICAgICAgICAgICAgICBlYzo0YTo2MzpjMDpiODoyOTowMDo3NDo5Yzo1NzozYjphODphNTowNDo5MDoKKyAgICAgICAgICAgICAgICAgICAgNzE6ZjE6YmQ6ODM6ZDk6M2Y6ZDY6YTU6ZTI6M2M6MmE6OGY6ZWY6Mjc6NjA6CisgICAgICAgICAgICAgICAgICAgIGMzOmM2OjlmOmNiOmJhOmVjOjYwOjdkOmI3OmU2Ojg0OjMyOmJlOjRmOmZiOgorICAgICAgICAgICAgICAgICAgICA1ODoyNjoyMjowMzo1YjpkNDpiNDpkNTpmYjpmNTplMzo5NjoyZTo3MDpjMDoKKyAgICAgICAgICAgICAgICAgICAgZTQ6MmU6YmQ6ZmM6MmU6ZWU6ZTI6NDE6NTU6YzA6MzQ6MmU6N2Q6MjQ6NzI6CisgICAgICAgICAgICAgICAgICAgIDY5OmNiOjQ3OmIxOjE0OjQwOjgzOjdkOjY3OmY0Ojg2OmY2OjMxOmFiOmYxOgorICAgICAgICAgICAgICAgICAgICA3OTphNDpiMjpiNToyZToxMjpmOTo4NDoxNzpmMDo2Mjo2ZjoyNzozZToxMzoKKyAgICAgICAgICAgICAgICAgICAgNTg6YjE6NTQ6MGQ6MjE6OWE6NzM6Mzc6YTE6MzA6Y2Y6NmY6OTI6ZGM6ZjY6CisgICAgICAgICAgICAgICAgICAgIGU5OmZjOmFjOmRiOjJlOjI4OmQxOjdlOjAyOjRiOjIzOmEwOjE1OmYyOjM4OgorICAgICAgICAgICAgICAgICAgICA2NTo2NDowOTplYTowYzo2ZTo4ZToxYjoxNzphMDo3MTpjODpiMzo5YjpjOToKKyAgICAgICAgICAgICAgICAgICAgYWI6ZTk6YzM6ZjI6Y2Y6ODc6OTY6OGY6ODA6MDI6MzI6OWU6OTk6NTg6NmY6CisgICAgICAgICAgICAgICAgICAgIGEyOmQ1CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorICAgICAgICAgICAgICAgIERpck5hbWU6L0M9TkwvTz1Qb2xhclNTTC9DTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgICAgICAgICAgc2VyaWFsOjAwCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgYjg6ZmQ6NTQ6ZDg6MDA6NTQ6OTA6OGI6MjU6YjA6Mjc6ZGQ6OTU6Y2Q6YTI6Zjc6ODQ6MDc6CisgICAgICAgIDFkOjg3Ojg5OjRhOmM0Ojc4OjExOmQ4OjA3OmI1OmQ3OjIyOjUwOjhlOjQ4OmViOjYyOjdhOgorICAgICAgICAzMjo4OTpiZTo2Mzo0Nzo1MzpmZjpiNjpiZTpmMToyZTo4Yzo1NDpjMDo5OTozZjphMDpiOToKKyAgICAgICAgMzc6MjM6NzI6NWY6MGQ6NDY6NTk6OGY6ZDg6NDc6Y2Q6OTc6NGM6OWY6MDc6MGM6MTI6NjI6CisgICAgICAgIDA5OjNhOjI0OmU0OjM2OmQ5OmU5OjJjOmRhOjM4OmQwOjczOjc1OjYxOmQ3OmMxOjZjOjI2OgorICAgICAgICA4Yjo5YjplMDpkNTpkYzo2NzplZDo4Yzo2YjozMzpkNzo3NDoyMjozYzo0YzpkYjpiNTo4ZDoKKyAgICAgICAgMmE6Y2U6MmM6MGQ6MDg6NTk6MDU6MDk6MDU6YTY6Mzk6OWY6YjM6Njc6MWI6ZTI6ODM6ZTU6CisgICAgICAgIGUxOjhmOjUzOmY2OjY3OjkzOmM3OmY5OjZmOjc2OjQ0OjU4OjEyOmU4OjNhOmQ0Ojk3OmU3OgorICAgICAgICBlOTpjMDozZTphODo3YTo3MjozZDo4Nzo1MzoxZjplNToyYzo4NDo4NDplNzo5YTo5ZTo3ZjoKKyAgICAgICAgNjY6ZDk6MWY6OWI6ZjU6MTM6NDg6YjA6NGQ6MTQ6ZDE6ZGU6YjI6MjQ6ZDk6Nzg6N2Q6ZjU6CisgICAgICAgIDM1OmNjOjU4OjE5OmQxOmQyOjk5OmVmOjRkOjczOmY4OjFmOjg5OmQ0OjVhOmQwOjUyOmNlOgorICAgICAgICAwOTpmNTpiMTo0Njo1MTo2YTowMDo4ZTozYjpjYzo2Zjo2MzowMTowMDo5OTplZDo5ZDphNjoKKyAgICAgICAgMDg6NjA6Y2Q6MzI6MTg6ZDA6NzM6ZTA6NTg6NzE6ZDk6ZTU6ZDI6NTM6ZDc6OGQ6ZDA6Y2E6CisgICAgICAgIGU5OjVkOjJhOjBhOjBkOjVkOjU1OmVjOjIxOjUwOjE3OjE2OmU2OjA2OjRhOmNkOjVlOmRlOgorICAgICAgICBmNzplMDplOTo1NAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEaHpDQ0FtK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREF3V2hjTk1qRXdNakV5TVRRME5EQXdXakE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd2dnRWlNQTBHCitDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRREEzemY4Rjd2Z2xwMC9odDZXTW4xRXBSYWd6U0h4CittZFRzNnN0OEdGZ0lsS1hzbThXTDN4b2VtVGlaaHg1N3dJMDUzemhkY0hnSDA1N1prK2k1Y2xIRnpxTXdVcW55Cis1MEJ3Rk10RW9uSUx3dVZBK1Q3bHBnNnorZXhLWThDNEtRQjBuRmM3cUtVRWtISHh2WVBaUDlhbDRqd3FqKzhuCitZTVBHbjh1NjdHQjl0K2FFTXI1UCsxZ21JZ05iMUxUVisvWGpsaTV3d09RdXZmd3U3dUpCVmNBMExuMGtjbW5MCitSN0VVUUlOOVovU0c5akdyOFhta3NyVXVFdm1FRi9CaWJ5YytFMWl4VkEwaG1uTTNvVERQYjVMYzl1bjhyTnN1CitLTkYrQWtzam9CWHlPR1ZrQ2VvTWJvNGJGNkJ4eUxPYnlhdnB3L0xQaDVhUGdBSXlucGxZYjZMVkFnTUJBQUdqCitnWlV3Z1pJd0RBWURWUjBUQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpICisvZjh3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mK2hQNlE5TURzeEN6QUpCZ05WCitCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6CitkQ0JEUVlJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUF1UDFVMkFCVWtJc2xzQ2ZkbGMyaTk0UUhIWWVKCitTc1I0RWRnSHRkY2lVSTVJNjJKNk1vbStZMGRULzdhKzhTNk1WTUNaUDZDNU55TnlYdzFHV1kvWVI4MlhUSjhICitEQkppQ1RvazVEYlo2U3phT05CemRXSFh3V3dtaTV2ZzFkeG43WXhyTTlkMElqeE0yN1dOS3M0c0RRaFpCUWtGCitwam1mczJjYjRvUGw0WTlUOW1lVHgvbHZka1JZRXVnNjFKZm42Y0ErcUhweVBZZFRIK1VzaElUbm1wNS9adGtmCittL1VUU0xCTkZOSGVzaVRaZUgzMU5jeFlHZEhTbWU5TmMvZ2ZpZFJhMEZMT0NmV3hSbEZxQUk0N3pHOWpBUUNaCis3WjJtQ0dETk1oalFjK0JZY2RubDBsUFhqZERLNlYwcUNnMWRWZXdoVUJjVzVnWkt6VjdlOStEcFZBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZmOWZiYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJREJUQ0NBZWVnQXdJQkFnSUJGakFUQmdrcWhraUc5dzBCQVFvd0JxSUVBZ0lBNmpBN01Rc3dDUVlEVlFRRworRXdKT1RERVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZworUTBFd0hoY05NVFF3TVRJd01UTXpPREUyV2hjTk1qUXdNVEU0TVRNek9ERTJXakEwTVFzd0NRWURWUVFHRXdKTworVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0JuekFOQmdrcQoraGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQTNSR0tuNW02c0dqS0t1bzdhbTFabCsxT3lWVGtEZTdPb0gyZworSHFyb0RzSzdFMERiaWhLT2lSTWtwY1gxK3RqMWtOZkl5c3ZGL3BNZHI5b1NJM05TZVVZYXVxQlhLM1lXTWJPbworcitjNG13aUxZNWs2Q2lYdVJkSVlXTHE1a3hydDFGaWFZeHMzL1BjVUNKK0ZaVW56V1RKdDBlRG9iZDVTN1dhMAorcVF2YVFKVUNBd0VBQWFPQmtqQ0JqekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJUdTg4ZjFIeFdsVFVlSgord2RNaVk3TGZwODY5VVRCakJnTlZIU01FWERCYWdCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvNkUvcEQwdworT3pFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRYjJ4aAorY2xOVFRDQlVaWE4wSUVOQmdnRUFNQk1HQ1NxR1NJYjNEUUVCQ2pBR29nUUNBZ0RxQTRJQkFRREFvZy9qWHlkUgordkRJdWdUekJYdGZWSzBDRVg4aXlRNGNWelFtWFdTbmU4MjA0djk0M0s1RDJoa3RTQmtqZFFVZGNuVnZWZ0xSNgordGU1MGpWODlwdE4vTm9mWCtmbzlmaFNSTjl2R2dRVld6T09GaU8wemNUaHk3NDlwaXJKdTFLcTVPSmR0aEl5VworUHUwVUN6NUcwazNrVHAwSlBldkdsc05jOFM5QWsxdEZ1QjBJUEpqcmJmT0RXSFMyTER1TytkQjZncGtOVGRyagorODhvZ1l0QnNONEQ1Z3NYQlJVZm9iWG9rVXdlakJ3THJENlh3eVF4KzBiTXdTQ3hnSEVoeHZ1VWt4MXZkbFhHdworSkczYUY5MnU4bUl4b0tTQVBhUGRxeTkzMG1Rdm1wVVdjTjVZMUlNYnRFR29RQ0tNWWdvc0ZjYXpKcEpjam5YMQorbzRIbC9scWp3Q0VHCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LmtleQpAQCAtMCwwICsxLDE1IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlDWFFJQkFBS0JnUURkRVlxZm1icXdhTW9xNmp0cWJWbVg3VTdKVk9RTjdzNmdmYUFlcXVnT3dyc1RRTnVLCitFbzZKRXlTbHhmWDYyUFdRMThqS3k4WCtreDJ2MmhJamMxSjVSaHE2b0ZjcmRoWXhzNml2NXppYkNJdGptVG9LCitKZTVGMGhoWXVybVRHdTNVV0pwakd6Zjg5eFFJbjRWbFNmTlpNbTNSNE9odDNsTHRaclNwQzlwQWxRSURBUUFCCitBb0dBSEZDRTJ0QkwweEI0NUdvLzFlL1BpOS8vT1ZaQUozQ3cwbW1FdXFqVk5CN0k2enhoWWh2aVdiZ3o5MitWCitnOTJLQmxVOUNJeDAvWmhHTXlIUk5PMHVZTkVaVUp5TTh6SXRvby9ubVUzMStWYUhPR2dwZWkwNEhacm4xTm13CitRUzAxRlZybjl3ektSLzVxZUVCbXhFN3JWTURRbzhRTG5sbEMzalh6SVZVdFg0RUNRUUQyZzlkbGVXWWJxSVFlCitROXBhWHh6dk9EaEN6TnRRd0QwUG5PS2M1NE51NHptM0pJNDVSRXR1bm1HOGV0K05jbXM5UnljVGpObFdQR0pUCis2MmpnYUpleEFrRUE1Wk1OdjR1OU5OUmZacHJtbE55dmpTT2YrdzdmZEt6aGNua0hiR2tmTG5GZGM3dnEwWEZDCitud09Sc2RqcE92V1FVd3JWMkN3OFBsNHJLYTRCNGlxVUpRSkJBTVZ0aTZtYVUzdWROOHFoWHhQM2pzM0x3Y3RHCitFL09WTXBINWZNaGE1amw5dy9CNFYydG4xZDNPL01tZHdzS2V1MkpGUlBkMFcyK2tScitkRHM2REZkRUNRUUMxCiszZzlRSlJXWTJuMVJQWGxaaUpLU0R4elh1T3FROWJ3TUFaRTk4dkUreTVRcThUMk8rbGk2dkFzWmh5c05DQ2h6CitnT3Z6dXVkbXlSY01oOHI2THB6NUFrQVVLSzNnWXRKRmlWSDJhclJpZzNKalpKcWl4Z1NUb2xNVDFuK0hHNHVNCit0bkJxQmlFQlZ3QnhFcWFvaGxhL3JIUjVqb1pDZGNETjh4cTB5ZVRReUxIOQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDAwNTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGExCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlCb2pDQ0FRWUNBUUF3TkRFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3CitFQVlEVlFRREV3bHNiMk5oYkdodmMzUXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTjBSCitpcCtadXJCb3lpcnFPMnB0V1pmdFRzbFU1QTN1enFCOW9CNnE2QTdDdXhOQTI0b1Nqb2tUSktYRjlmclk5WkRYCit5TXJMeGY2VEhhL2FFaU56VW5sR0dycWdWeXQyRmpHenFLL25PSnNJaTJPWk9nb2w3a1hTR0ZpNnVaTWE3ZFJZCittbU1iTi96M0ZBaWZoV1ZKODFreWJkSGc2RzNlVXUxbXRLa0wya0NWQWdNQkFBR2dLVEFuQmdrcWhraUc5dzBCCitDUTR4R2pBWU1Ba0dBMVVkRXdRQ01BQXdDd1lEVlIwUEJBUURBZ1hnTUJJR0NTcUdTSWIzRFFFQkNqQUZvZ01DCitBV29EZ1lFQTJuOFNPb2lKQ3MrWXlIMlZYb1VWeGh1dGRYR1A0KzdjRUNha2wybW1WRUtoeFhETUVHN2hFRmtCCitta2s0YjFrUk5PUUhLcVVxM2NyZmkwT2tNY1BHa1BpTGxZTEtnVDUxQ2dzQmh1SmFNc2RDWW8vNVBPZ1RaRDR1CitGSTVnZnlPNzBYcHE5UW1yV0VxcVRkYWxSRzcrVW1HYTNWRVVWeVhURG5RWmZVMU4yUUU9CistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTIyNCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTIyNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTFjNzk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhMjI0CkBAIC0wLDAgKzEsMTIgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlCelRDQ0FRWUNBUUF3TkRFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3CitFQVlEVlFRREV3bHNiMk5oYkdodmMzUXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTjBSCitpcCtadXJCb3lpcnFPMnB0V1pmdFRzbFU1QTN1enFCOW9CNnE2QTdDdXhOQTI0b1Nqb2tUSktYRjlmclk5WkRYCit5TXJMeGY2VEhhL2FFaU56VW5sR0dycWdWeXQyRmpHenFLL25PSnNJaTJPWk9nb2w3a1hTR0ZpNnVaTWE3ZFJZCittbU1iTi96M0ZBaWZoV1ZKODFreWJkSGc2RzNlVXUxbXRLa0wya0NWQWdNQkFBR2dLVEFuQmdrcWhraUc5dzBCCitDUTR4R2pBWU1Ba0dBMVVkRXdRQ01BQXdDd1lEVlIwUEJBUURBZ1hnTUQwR0NTcUdTSWIzRFFFQkNqQXdvQTB3CitDd1lKWUlaSUFXVURCQUlFb1Jvd0dBWUpLb1pJaHZjTkFRRUlNQXNHQ1dDR1NBRmxBd1FDQktJREFnRmlBNEdCCitBTWxZWVpLcXBEcWc1VVpacTNOQjNRVVI5cWZ0WS81Mi8wZ1BmcnV3NXMyZ050Rm1HMXV5RUJKWC9vYzdDL2ZVCitseG83NEhEcmFXSnl2UDdjM01NaE91d3IvUmZQTlFoQTJIZ3d6OVJ1SklCaFFySmZpWnVIc0NmaUtWb2ZNdU1mCithci80RUtmeW9FTERkaWxoZzZpK2FiYWhHT2txeVhzamF2RnR5RFNlQ3BYSAorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGEyNTYgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGEyNTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmOWVmMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTI1NgpAQCAtMCwwICsxLDEyIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQnpUQ0NBUVlDQVFBd05ERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJJdworRUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU4wUgoraXArWnVyQm95aXJxTzJwdFdaZnRUc2xVNUEzdXpxQjlvQjZxNkE3Q3V4TkEyNG9Tam9rVEpLWEY5ZnJZOVpEWAoreU1yTHhmNlRIYS9hRWlOelVubEdHcnFnVnl0MkZqR3pxSy9uT0pzSWkyT1pPZ29sN2tYU0dGaTZ1Wk1hN2RSWQorbW1NYk4vejNGQWlmaFdWSjgxa3liZEhnNkczZVV1MW10S2tMMmtDVkFnTUJBQUdnS1RBbkJna3Foa2lHOXcwQgorQ1E0eEdqQVlNQWtHQTFVZEV3UUNNQUF3Q3dZRFZSMFBCQVFEQWdYZ01EMEdDU3FHU0liM0RRRUJDakF3b0EwdworQ3dZSllJWklBV1VEQkFJQm9Sb3dHQVlKS29aSWh2Y05BUUVJTUFzR0NXQ0dTQUZsQXdRQ0FhSURBZ0ZlQTRHQgorQUNVYUNUaWR2eldWSk5LbVJycml1ZlRoR1VmdzVYZ2RzYzNHYThDeCt2UmYrYlBabVIzTlZrYzBacTl1YzArOAorZDFXWGFMemJtZ2U2SWJjdlRQV0NMTkRBV0k5VXpvUTZXUzlteU0zZURFR2RydUNsWXdiNUJWTHgzTXZodm9vSworTC9INnNuRTFkSE5QWHlDTlZGVEpJbGwzYlJsVk1Sc2ZacERobXo4L0ltSjQKKy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhMzg0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhMzg0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMDM0NTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGEzODQKQEAgLTAsMCArMSwxMiBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KK01JSUJ6VENDQVFZQ0FRQXdOREVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXcKK0VBWURWUVFERXdsc2IyTmhiR2h2YzNRd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFOMFIKK2lwK1p1ckJveWlycU8ycHRXWmZ0VHNsVTVBM3V6cUI5b0I2cTZBN0N1eE5BMjRvU2pva1RKS1hGOWZyWTlaRFgKK3lNckx4ZjZUSGEvYUVpTnpVbmxHR3JxZ1Z5dDJGakd6cUsvbk9Kc0lpMk9aT2dvbDdrWFNHRmk2dVpNYTdkUlkKK21tTWJOL3ozRkFpZmhXVko4MWt5YmRIZzZHM2VVdTFtdEtrTDJrQ1ZBZ01CQUFHZ0tUQW5CZ2txaGtpRzl3MEIKK0NRNHhHakFZTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNRDBHQ1NxR1NJYjNEUUVCQ2pBd29BMHcKK0N3WUpZSVpJQVdVREJBSUNvUm93R0FZSktvWklodmNOQVFFSU1Bc0dDV0NHU0FGbEF3UUNBcUlEQWdGT0E0R0IKK0FOZlpHSzZuRS9DUDlQdUFMRnpiQS9tdk9uWWxJNjBwTW93c2NSZkNZcHZSMjVpUUpWaEFKZllWWEFEUk4zcWQKK05BaUZXTlZjakZNSWtSbHE3cWlmQk45N1ZIR2VZb1dJdXc5Z1lFYjNPcURHek9zWVAwS0lnTU50OC9BNHFDa2oKKzVNem9sT1l5VCtOK1FGR1YwcGRDTnBYN1FwcGZOZEZ5RkFtV1hhMTcxUnpHCistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTUxMiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTUxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzZiNWM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhNTEyCkBAIC0wLDAgKzEsMTIgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlCelRDQ0FRWUNBUUF3TkRFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3CitFQVlEVlFRREV3bHNiMk5oYkdodmMzUXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTjBSCitpcCtadXJCb3lpcnFPMnB0V1pmdFRzbFU1QTN1enFCOW9CNnE2QTdDdXhOQTI0b1Nqb2tUSktYRjlmclk5WkRYCit5TXJMeGY2VEhhL2FFaU56VW5sR0dycWdWeXQyRmpHenFLL25PSnNJaTJPWk9nb2w3a1hTR0ZpNnVaTWE3ZFJZCittbU1iTi96M0ZBaWZoV1ZKODFreWJkSGc2RzNlVXUxbXRLa0wya0NWQWdNQkFBR2dLVEFuQmdrcWhraUc5dzBCCitDUTR4R2pBWU1Ba0dBMVVkRXdRQ01BQXdDd1lEVlIwUEJBUURBZ1hnTUQwR0NTcUdTSWIzRFFFQkNqQXdvQTB3CitDd1lKWUlaSUFXVURCQUlEb1Jvd0dBWUpLb1pJaHZjTkFRRUlNQXNHQ1dDR1NBRmxBd1FDQTZJREFnRStBNEdCCitBQ3hXQmhQa2h5VmxCWS9td2tyVzdPallzYU4yL1psRlN2NzZ3NjNiNjFCcGlnUmVKc2dnTXV0NUVQT2dmR1lKCityenlnS0RsRi9OdG1NTjIyaldyRnVwOUxzWkpBWDBnWWJMbWxpaWFHOUhjaCtpLzhiNDJvYVFURFdHRlo5TGlZCitXN0Y3WDBmOWxwek5LT3RROGl4MHMrbllTMk9OeXpmdTU1K1JsemY4LzYzTQorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhLXYxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EtdjEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YTNiMWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhLXYxLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURJekNDQWdzQ0RGT2l0bzRGUUE1VlhKT1Y1VEFOQmdrcWhraUc5dzBCQVFzRkFEQlFNUnd3R2dZRFZRUUQKK0V4TlFiMnhoY2xOVFRDQlVaWE4wSUVOQklIWXhNUkF3RGdZRFZRUUxFd2QwWlhOMGFXNW5NUkV3RHdZRFZRUUsKK0V3aFFiMnhoY2xOVFRERUxNQWtHQTFVRUJoTUNUa3d3SWhnUE1qQXhOREEyTVRreE1EQTRNVFJhR0E4eU1ESTAKK01EWXhPREV3TURneE5Gb3dVREVjTUJvR0ExVUVBeE1UVUc5c1lYSlRVMHdnVkdWemRDQkRRU0IyTVRFUU1BNEcKK0ExVUVDeE1IZEdWemRHbHVaekVSTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4Q3pBSkJnTlZCQVlUQWs1TU1JSUIKK0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3TjgzL0JlNzRKYWRQNGJlbGpKOVJLVVcKK29NMGg4Wm5VN09yTGZCaFlDSlNsN0p2Rmk5OGFIcGs0bVljZWU4Q05PZDg0WFhCNEI5T2UyWlBvdVhKUnhjNmoKK01GS3A4dWRBY0JUTFJLSnlDOExsUVBrKzVhWU9zL25zU21QQXVDa0FkSnhYTzZpbEJKQng4YjJEMlQvV3BlSTgKK0tvL3ZKMkREeHAvTHV1eGdmYmZtaERLK1QvdFlKaUlEVzlTMDFmdjE0NVl1Y01Ea0xyMzhMdTdpUVZYQU5DNTkKK0pISnB5MGV4RkVDRGZXZjBodll4cS9GNXBMSzFMaEw1aEJmd1ltOG5QaE5Zc1ZRTklacHpONkV3ejIrUzNQYnAKKy9LemJMaWpSZmdKTEk2QVY4amhsWkFucURHNk9HeGVnY2Npem04bXI2Y1B5ejRlV2o0QUNNcDZaV0craTFRSUQKK0FRQUJNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUJvWEM1QWxYSTVhenlPUHZtTnNlMnFIaE83QnJYT0VqSCsKKzlnNVAvVnNyVkFEaHNVR3Y2eDBBMm9Mb1dYdE9qR0RJV1dINTNCV0hrQ1VDdTRUNUQ1QzYrSTQ3clhXbDRwQXIKK0oraCt0UVZabzZKMEFKeGZQc2UvTm5yanNib1VTV2h1bm1vL2lUclU2UzRLSkJndUlLUDZUMURab0QvOEVZZ1UKK3grZlhEbXZSTytNVGVzV0RpWStwK0ZIRXpzdTNiOUVCdEc5ZFVpUi96elhpL2t0RkNmcmdzdEtHU3VXNitqN20KK2xjZHVUeHNvZ2k2VWMzdFdLdG42cXBTR1IwdUJvQ3o2ZW1GTzdTbW15L3RJeVZBODhsSDArM1VueE92dTRUQUsKK3V2allrT2NacWhwckRpTWZoeEJCN3B4YmZpdmlFQU5UYmdTZkN0WmV3U056MlJVSjlvY3kKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlZWUyYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0CkBAIC0wLDAgKzEsODAgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMCAoMHgwKQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBGZWIgMTIgMTQ6NDQ6MDAgMjAxMSBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEZlYiAxMiAxNDo0NDowMCAyMDIxIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgIFJTQSBQdWJsaWMgS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1cyAoMjA0OCBiaXQpOgorICAgICAgICAgICAgICAgICAgICAwMDpjMDpkZjozNzpmYzoxNzpiYjplMDo5Njo5ZDozZjo4NjpkZTo5NjozMjoKKyAgICAgICAgICAgICAgICAgICAgN2Q6NDQ6YTU6MTY6YTA6Y2Q6MjE6ZjE6OTk6ZDQ6ZWM6ZWE6Y2I6N2M6MTg6CisgICAgICAgICAgICAgICAgICAgIDU4OjA4Ojk0OmE1OmVjOjliOmM1OjhiOmRmOjFhOjFlOjk5OjM4Ojk5Ojg3OgorICAgICAgICAgICAgICAgICAgICAxZTo3YjpjMDo4ZDozOTpkZjozODo1ZDo3MDo3ODowNzpkMzo5ZTpkOTo5MzoKKyAgICAgICAgICAgICAgICAgICAgZTg6Yjk6NzI6NTE6YzU6Y2U6YTM6MzA6NTI6YTk6ZjI6ZTc6NDA6NzA6MTQ6CisgICAgICAgICAgICAgICAgICAgIGNiOjQ0OmEyOjcyOjBiOmMyOmU1OjQwOmY5OjNlOmU1OmE2OjBlOmIzOmY5OgorICAgICAgICAgICAgICAgICAgICBlYzo0YTo2MzpjMDpiODoyOTowMDo3NDo5Yzo1NzozYjphODphNTowNDo5MDoKKyAgICAgICAgICAgICAgICAgICAgNzE6ZjE6YmQ6ODM6ZDk6M2Y6ZDY6YTU6ZTI6M2M6MmE6OGY6ZWY6Mjc6NjA6CisgICAgICAgICAgICAgICAgICAgIGMzOmM2OjlmOmNiOmJhOmVjOjYwOjdkOmI3OmU2Ojg0OjMyOmJlOjRmOmZiOgorICAgICAgICAgICAgICAgICAgICA1ODoyNjoyMjowMzo1YjpkNDpiNDpkNTpmYjpmNTplMzo5NjoyZTo3MDpjMDoKKyAgICAgICAgICAgICAgICAgICAgZTQ6MmU6YmQ6ZmM6MmU6ZWU6ZTI6NDE6NTU6YzA6MzQ6MmU6N2Q6MjQ6NzI6CisgICAgICAgICAgICAgICAgICAgIDY5OmNiOjQ3OmIxOjE0OjQwOjgzOjdkOjY3OmY0Ojg2OmY2OjMxOmFiOmYxOgorICAgICAgICAgICAgICAgICAgICA3OTphNDpiMjpiNToyZToxMjpmOTo4NDoxNzpmMDo2Mjo2ZjoyNzozZToxMzoKKyAgICAgICAgICAgICAgICAgICAgNTg6YjE6NTQ6MGQ6MjE6OWE6NzM6Mzc6YTE6MzA6Y2Y6NmY6OTI6ZGM6ZjY6CisgICAgICAgICAgICAgICAgICAgIGU5OmZjOmFjOmRiOjJlOjI4OmQxOjdlOjAyOjRiOjIzOmEwOjE1OmYyOjM4OgorICAgICAgICAgICAgICAgICAgICA2NTo2NDowOTplYTowYzo2ZTo4ZToxYjoxNzphMDo3MTpjODpiMzo5YjpjOToKKyAgICAgICAgICAgICAgICAgICAgYWI6ZTk6YzM6ZjI6Y2Y6ODc6OTY6OGY6ODA6MDI6MzI6OWU6OTk6NTg6NmY6CisgICAgICAgICAgICAgICAgICAgIGEyOmQ1CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorICAgICAgICAgICAgICAgIERpck5hbWU6L0M9TkwvTz1Qb2xhclNTTC9DTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgICAgICAgICAgc2VyaWFsOjAwCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgYjg6ZmQ6NTQ6ZDg6MDA6NTQ6OTA6OGI6MjU6YjA6Mjc6ZGQ6OTU6Y2Q6YTI6Zjc6ODQ6MDc6CisgICAgICAgIDFkOjg3Ojg5OjRhOmM0Ojc4OjExOmQ4OjA3OmI1OmQ3OjIyOjUwOjhlOjQ4OmViOjYyOjdhOgorICAgICAgICAzMjo4OTpiZTo2Mzo0Nzo1MzpmZjpiNjpiZTpmMToyZTo4Yzo1NDpjMDo5OTozZjphMDpiOToKKyAgICAgICAgMzc6MjM6NzI6NWY6MGQ6NDY6NTk6OGY6ZDg6NDc6Y2Q6OTc6NGM6OWY6MDc6MGM6MTI6NjI6CisgICAgICAgIDA5OjNhOjI0OmU0OjM2OmQ5OmU5OjJjOmRhOjM4OmQwOjczOjc1OjYxOmQ3OmMxOjZjOjI2OgorICAgICAgICA4Yjo5YjplMDpkNTpkYzo2NzplZDo4Yzo2YjozMzpkNzo3NDoyMjozYzo0YzpkYjpiNTo4ZDoKKyAgICAgICAgMmE6Y2U6MmM6MGQ6MDg6NTk6MDU6MDk6MDU6YTY6Mzk6OWY6YjM6Njc6MWI6ZTI6ODM6ZTU6CisgICAgICAgIGUxOjhmOjUzOmY2OjY3OjkzOmM3OmY5OjZmOjc2OjQ0OjU4OjEyOmU4OjNhOmQ0Ojk3OmU3OgorICAgICAgICBlOTpjMDozZTphODo3YTo3MjozZDo4Nzo1MzoxZjplNToyYzo4NDo4NDplNzo5YTo5ZTo3ZjoKKyAgICAgICAgNjY6ZDk6MWY6OWI6ZjU6MTM6NDg6YjA6NGQ6MTQ6ZDE6ZGU6YjI6MjQ6ZDk6Nzg6N2Q6ZjU6CisgICAgICAgIDM1OmNjOjU4OjE5OmQxOmQyOjk5OmVmOjRkOjczOmY4OjFmOjg5OmQ0OjVhOmQwOjUyOmNlOgorICAgICAgICAwOTpmNTpiMTo0Njo1MTo2YTowMDo4ZTozYjpjYzo2Zjo2MzowMTowMDo5OTplZDo5ZDphNjoKKyAgICAgICAgMDg6NjA6Y2Q6MzI6MTg6ZDA6NzM6ZTA6NTg6NzE6ZDk6ZTU6ZDI6NTM6ZDc6OGQ6ZDA6Y2E6CisgICAgICAgIGU5OjVkOjJhOjBhOjBkOjVkOjU1OmVjOjIxOjUwOjE3OjE2OmU2OjA2OjRhOmNkOjVlOmRlOgorICAgICAgICBmNzplMDplOTo1NAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEaHpDQ0FtK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREF3V2hjTk1qRXdNakV5TVRRME5EQXdXakE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd2dnRWlNQTBHCitDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRREEzemY4Rjd2Z2xwMC9odDZXTW4xRXBSYWd6U0h4CittZFRzNnN0OEdGZ0lsS1hzbThXTDN4b2VtVGlaaHg1N3dJMDUzemhkY0hnSDA1N1prK2k1Y2xIRnpxTXdVcW55Cis1MEJ3Rk10RW9uSUx3dVZBK1Q3bHBnNnorZXhLWThDNEtRQjBuRmM3cUtVRWtISHh2WVBaUDlhbDRqd3FqKzhuCitZTVBHbjh1NjdHQjl0K2FFTXI1UCsxZ21JZ05iMUxUVisvWGpsaTV3d09RdXZmd3U3dUpCVmNBMExuMGtjbW5MCitSN0VVUUlOOVovU0c5akdyOFhta3NyVXVFdm1FRi9CaWJ5YytFMWl4VkEwaG1uTTNvVERQYjVMYzl1bjhyTnN1CitLTkYrQWtzam9CWHlPR1ZrQ2VvTWJvNGJGNkJ4eUxPYnlhdnB3L0xQaDVhUGdBSXlucGxZYjZMVkFnTUJBQUdqCitnWlV3Z1pJd0RBWURWUjBUQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpICisvZjh3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mK2hQNlE5TURzeEN6QUpCZ05WCitCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6CitkQ0JEUVlJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUF1UDFVMkFCVWtJc2xzQ2ZkbGMyaTk0UUhIWWVKCitTc1I0RWRnSHRkY2lVSTVJNjJKNk1vbStZMGRULzdhKzhTNk1WTUNaUDZDNU55TnlYdzFHV1kvWVI4MlhUSjhICitEQkppQ1RvazVEYlo2U3phT05CemRXSFh3V3dtaTV2ZzFkeG43WXhyTTlkMElqeE0yN1dOS3M0c0RRaFpCUWtGCitwam1mczJjYjRvUGw0WTlUOW1lVHgvbHZka1JZRXVnNjFKZm42Y0ErcUhweVBZZFRIK1VzaElUbm1wNS9adGtmCittL1VUU0xCTkZOSGVzaVRaZUgzMU5jeFlHZEhTbWU5TmMvZ2ZpZFJhMEZMT0NmV3hSbEZxQUk0N3pHOWpBUUNaCis3WjJtQ0dETk1oalFjK0JZY2RubDBsUFhqZERLNlYwcUNnMWRWZXdoVUJjVzVnWkt6VjdlOStEcFZBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2Eua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYS5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxNGUyMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2Eua2V5CkBAIC0wLDAgKzEsMzAgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK1Byb2MtVHlwZTogNCxFTkNSWVBURUQKK0RFSy1JbmZvOiBERVMtRURFMy1DQkMsQThBOTVCMDVENUI3MjA2QgorCis5UWQ5R2VBcmVqbDFHRFZoMmxMVjFiSHQwY1B0ZmJoNWgvNXpWcEFWYUZwcXRTUE1yRWxwNTBSbnRuOWV0K0pBCis3Vk95Ym9SK0l5MnQvSFU0V3ZBNjg3azNCcHBlOUd3S0hqSGh0bC8vOHhGS3dacjNYYjV5TzVKVVA4QVVjdFFxCitOYjhDTGxaeXVVQys1MlJFQUF0aGRXZ3NYKzdkSk80eWFielVjUTIyVHA5SlNEMGhpTDQzQmxrV1lVTkszZEFvCitQWmxtaXB0am56VlRqZzFNeHNCU3lkWmluV09MQlY4L0pRZ3hTUG8yeUQ0dUVmaWcyOHFidlEyd05JbjBwbkFiCitHeG5TQU9hemtvbmdFR2Z2Y2pJSXMrTFpOOWdYRmh4Y09oNmtjNFEvYzk5QjdRV0VUd0xMa1lnWit6MWE5Vlk5CitnRVU3Q3dDeFlDRCtoOWhZNkZQbXNLMC9sQzRPN2FlUktwWXEwMHJQUHhzNmk3cGhpZXhnNmF4NnlUTW1BclFxCitRbUszVEFzSm04Vi9KNUFXcExFVjZqQUZnUkd5bUdHSG5vZjBEWHpWV1ppZHJjWkpXVE51R0VYOTBuQjNlZTJ3CitQWEpFRldLb0QzSzNhRmNTTGRIWXIzbUxHeFA3SDlUaFFhaTlWc3ljeFpLUzVrd3ZCS1EvL1lNcm1GZndQazh4Cit2VGVZNEtaTWFVcnZlRWVsNXRXWkM5NFJTTUtneFI2Y3lFMW5CWHlUUW5ET0diZnBOTmdCS3h5S2JJTldvT0pVCitXSlpBd2xzUW4rUXpDRHdwcmk3K3NWMW1TM2dCRTZVWTdhUW1ubWlpYUMyVjNIYnBoeGN0L2VuNVFzZkRPdDFYCitKY3pTZnBSV0xsYlB6blpnOE9RaC9WZ0NNQTU4TjVEak96VElLN3NKSjVyKzk0WkJUQ3BnQU1iRjU4OGYwTlRSCitLQ2U0eXJ4R0pSN1gwMk00bnZENEl3T2xwc1E4eFF4WnRPU2dYdjRMa3h2ZFU5WEpKS1daL1hOS0plV3p0eFNlCitaMXZkVGMyWWZzREJBMlNFdjMzdnhIeDJnMXZxdHc4U2pEUlQyUmFRU1MwUXVTYU1KaW1kT1g2bVRPQ0JLazFKCis5UTVtWFRyRVIrL0xuSzBqRW1Yc0JYV0E1YnFxVlpJeWFoWFN4NFZZWjdsN3cvUEhpVUR0RGd5UmhNTUtpNG4yCitpUXZRY1dTUVRqcnBubEpiY2ExL0RrcFJ0M1l3cnZKd2RxYjhhc1pVMlZyTkVUaDV4MFFWZWZEUkxGaVZwaWYvCit0VWFlQWUvUDFGOE9rUzdPSVpEczFTVWJ2L3NEMnZNYmhOa1VvQ21zMy9Qdk50ZG52Z0w0RjB6aGFEcEtDbWxUCitQOHZ4NDlFN3Y1Q3lSTm1FRDl6Wmc0bzN3bU1xclFPOTNQdFR1ZzNFdTlvVngxelBRTTFOVk15QmEyK2YyOURMCisxbnVUQ2VYZG85K25pNDV4eCtqQUk0REN3clJkaEo5dXpaeUM2OTYySDM3SDZEKzVuYU52Q2xGUjFzNmxpMUdiCitucVBvaXkvT0JzRXg5Q2FER2NxUUJwNVdtZS8zWFcrNnoxSVNPeCtpZ3dOVFZDVDE0bUhkQk1ieWEwZUlLZnQ1CitYK0dud3RnRU15Q1l5eVd1VWN0OGc0UnpFcmNZOSt5VzlPbTVIenB4NHpPdVc0TlBaZ1BEVGdLK3QyUlNML1lxCityRTFuanJnZUdZY1ZlRzNmK09mdEg0czZmUGJxN3QxQTVaZ1VzY2JMTUJxcjl0SytPcXlnUjRFZ0tCUHNINkN6CitMNnpsdi8yUlYwcUFIdlZ1REpjSURJZ3dZNXJKdElORW0zMnJoT2VGTkp3WlM1TU5JQzFjelhaeDUvL3VnWDdsCitJNHN5NW5iVmh3U2p0QWs4WGc1ZFpiZFRaNm1JcmI3eHFIK2ZkYWtab3Ixa2hHN2JDMnVJd2liRDNjU2wyWGtSCit3TjQ4bHNsYkhucXFhZ3I2WG0xbk5PU1ZsOEMvNmtiSkVzTXBMaEFlemZSdEd3dk91Y29hRStXYmVVTm9sR2RlCitQL2VRaWRkU2YwYnJucGlMSlJoN3Facmw5WHVxWWRwVXFub0VkTUFmb3RET0lEOE90VjdndDhhNDhhZDhWUFcyCistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MWE0MjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQKQEAgLTAsMCArMSwxNSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDVWpDQ0FkZWdBd0lCQWdJSkFNRkQ0bjVpUTh6b01Bb0dDQ3FHU000OUJBTUNNRDR4Q3pBSkJnTlZCQVlUCitBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGCitReUJEUVRBZUZ3MHhNekE1TWpReE5UUTVORGhhRncweU16QTVNakl4TlRRNU5EaGFNRDR4Q3pBSkJnTlZCQVlUCitBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGCitReUJEUVRCMk1CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCTVBhS3pSQk4xZ3ZoMWIrL0ltNktVTkxUdUJ1Cit3dzVYVXpNNVdOUlN0SkdWT1FzajMxOFhKR0pJL0JxVktjNHNMWWZDaUZLQXI5WnFxeUhkdU5NY2JsaTR5dWl5CithWTd6UWEwcHc3UmZkYWRIYjlVWktWVnBtbE03SUxSbUZtQXpIcU9Cb0RDQm5UQWRCZ05WSFE0RUZnUVVuVzBnCitKRWtCUHl2TGVMVVp2SDRreWR2N05ud3diZ1lEVlIwakJHY3daWUFVblcwZ0pFa0JQeXZMZUxVWnZINGt5ZHY3CitObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFCitBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bd0dBMVVkRXdRRk1BTUJBZjh3CitDZ1lJS29aSXpqMEVBd0lEYVFBd1pnSXhBTU8wWW5OV0tKVUFmWGdTSnRKeGV4bjRpcGcra3Y0em51UjUwdjU2Cit0NGQwUEN1NDEybVVDNk5uZDdpenZ0RTJNZ0l4QVAxbm5KUWpaOEJXdWtzekZRREc0OHd4Q0N5Y2k5cXBkU012Cit1Q2puOHB3VU9rQUJYSzhNc3M5MGZ6Q2ZDRU90SUE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTIua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTIua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYmJhM2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rZXkKQEAgLTAsMCArMSw2IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01JR2tBZ0VCQkRDRDJSVU9vSEh3VnhBem96aTRoc0dtRVYxdHRBUGhLWFpGMTRkdkk2dEVJT3BrZTRXeGR1ZUYKK2xhcDAxdEdrWHVxZ0J3WUZLNEVFQUNLaFpBTmlBQVREMmlzMFFUZFlMNGRXL3Z5SnVpbERTMDdnYnNNT1YxTXoKK09WalVVclNSbFRrTEk5OWZGeVJpU1B3YWxTbk9MQzJId29oU2dLL1dhcXNoM2JqVEhHNVl1TXJvc21tTzgwR3QKK0tjTzBYM1duUjIvVkdTbFZhWnBUT3lDMFpoWmdNeDQ9CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcmwuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTIua3UtY3JsLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmI0MDgzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTIua3UtY3JsLmNydApAQCAtMCwwICsxLDEyIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUJ6RENDQVZPZ0F3SUJBZ0lKQVA2bVpMemgwSVBTTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE5EQTBNRGt4TVRJek16aGFGdzB5TkRBME1EWXhNVEl6TXpoYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxTWRNQnN3REFZRFZSMFRCQVV3QXdFQi96QUwKK0JnTlZIUThFQkFNQ0FRSXdDZ1lJS29aSXpqMEVBd0lEWndBd1pBSXdaT0NLWTBFSFhZekk0Y1FzRm5mT3J4bTEKK3Vmdk5lWjRaY1NaV3JrVEJhelcyT0JDdUNQOVNMem5lYzNTRk9VdnZBakFLZS9xeWNmeGtIaXZqaWVDRUcxS3QKK20yRDRRS1NKRUxVaFRIcjR6ZGtlcWJ6Z3VpMHkzaW91YW95V3NLdmV0Tmc9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcnQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTIua3UtY3J0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGFjYzY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTIua3UtY3J0LmNydApAQCAtMCwwICsxLDEyIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUJ6VENDQVZPZ0F3SUJBZ0lKQU9EaDZQQWVEOS92TUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE5EQTBNRGt4TVRJek5UUmFGdzB5TkRBME1EWXhNVEl6TlRSYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxTWRNQnN3REFZRFZSMFRCQVV3QXdFQi96QUwKK0JnTlZIUThFQkFNQ0FnUXdDZ1lJS29aSXpqMEVBd0lEYUFBd1pRSXdHR2xieW5kMWpVM1drVXg2SXJoazlMb2IKK3oyQisxZUlPNitldTNFbjhCM3JoOElwZnhvMGUwaHBmYVJGWVAxTVVBakVBanh4QmNoUldKQXpaNi80N1dnLzcKK1VvYXNSSU5nUDVCL3VKaFRuZnRTMWJxeXVXSGFzdGI0TFc1L1lMT3ZQYk1RCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcnRfY3JsLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyLmt1LWNydF9jcmwuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNzRlNDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcnRfY3JsLmNydApAQCAtMCwwICsxLDEyIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUJ6RENDQVZPZ0F3SUJBZ0lKQVBlak91cENKUzY1TUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE5EQTBNRGt4TVRJeU1qVmFGdzB5TkRBME1EWXhNVEl5TWpWYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxTWRNQnN3REFZRFZSMFRCQVV3QXdFQi96QUwKK0JnTlZIUThFQkFNQ0FRWXdDZ1lJS29aSXpqMEVBd0lEWndBd1pBSXdNS0xWWEI0WUJRMEhhNGRFdkZQY0p0YXUKK1RTNVZkNFVxRzN4UTEwWWNKb2d3ZXVxYUdIU0ZnZG5FVWZvWCs0cDVBakFwTW5ZWEZmVWpTbWx5ZkptVGFzd08KK2dhUjVzVW5udzMzTkE5ajFlcmNlbTNhc0NZejZhOFQwem84L3JSMzNYVlU9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1kcy5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1kcy5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4ZTE3YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyLmt1LWRzLmNydApAQCAtMCwwICsxLDEyIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUJ6RENDQVZPZ0F3SUJBZ0lKQVBPa1BSM3dzdm01TUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE5EQTBNRGt4TVRJME1UTmFGdzB5TkRBME1EWXhNVEkwTVROYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxTWRNQnN3REFZRFZSMFRCQVV3QXdFQi96QUwKK0JnTlZIUThFQkFNQ0I0QXdDZ1lJS29aSXpqMEVBd0lEWndBd1pBSXdHUkNtVS9yV05qVzEzZzhJVHVxM3BNWGIKK2pnd1RGSkhWbGJNRGlGSndVclJ2eXRQVjlkb0pPZnpKOG5BUTBjWjFBakFiSjhRQVYyZStEbVlacFdjL3A2VWcKK25RZGFjNTllditsSCtqdTZ3RVQzak5EalV0aFVQcmRncWE1NCtVV1E1cjQ9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtZnV0dXJlLXByZXNlbnQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTJfY2F0LWZ1dHVyZS1wcmVzZW50LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzZlNzI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTJfY2F0LWZ1dHVyZS1wcmVzZW50LmNydApAQCAtMCwwICsxLDI4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUIrekNDQVlDZ0F3SUJBZ0lCQVRBTUJnZ3Foa2pPUFFRREFnVUFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXcKK0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFUQWUKK0Z3MHlNekE1TWpJeE5UUTVORGxhRncwek1ERXlNekV5TXpVNU5UbGFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXcKK0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFUQjIKK01CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCTVBhS3pSQk4xZ3ZoMWIrL0ltNktVTkxUdUJ1d3c1WFV6TTUKK1dOUlN0SkdWT1FzajMxOFhKR0pJL0JxVktjNHNMWWZDaUZLQXI5WnFxeUhkdU5NY2JsaTR5dWl5YVk3elFhMHAKK3c3UmZkYWRIYjlVWktWVnBtbE03SUxSbUZtQXpIcU5RTUU0d0RBWURWUjBUQkFVd0F3RUIvekFkQmdOVkhRNEUKK0ZnUVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3SHdZRFZSMGpCQmd3Rm9BVW5XMGdKRWtCUHl2TGVMVVoKK3ZINGt5ZHY3Tm53d0RBWUlLb1pJemowRUF3SUZBQU5uQURCa0FqQjFaTmRPTTdLUkppUG80NWhQMTdBMXNKU0gKK3FIRlBFSmJtbDZLZE5ldm9WWjFIcXZQOEFvRkdjUEpScFFWdHpDMENNRGE3SkVxbjBkT3NzOEVtVzlwVkYvTjIKKytYdnpOY3pqODltV01nUGhKSmxUK01PTlF4M0xGUU8rVE1TSTloTGRrdz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNVakNDQWRlZ0F3SUJBZ0lKQU1GRDRuNWlROHpvTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE16QTVNalF4TlRRNU5EaGFGdzB5TXpBNU1qSXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxT0JvRENCblRBZEJnTlZIUTRFRmdRVW5XMGcKK0pFa0JQeXZMZUxVWnZINGt5ZHY3Tm53d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFNTzBZbk5XS0pVQWZYZ1NKdEp4ZXhuNGlwZytrdjR6bnVSNTB2NTYKK3Q0ZDBQQ3U0MTJtVUM2Tm5kN2l6dnRFMk1nSXhBUDFubkpRalo4Qld1a3N6RlFERzQ4d3hDQ3ljaTlxcGRTTXYKK3VDam44cHdVT2tBQlhLOE1zczkwZnpDZkNFT3RJQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtcGFzdC1wcmVzZW50LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyX2NhdC1wYXN0LXByZXNlbnQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMWJhOWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtcGFzdC1wcmVzZW50LmNydApAQCAtMCwwICsxLDI4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUIvVENDQVlDZ0F3SUJBZ0lCQVRBTUJnZ3Foa2pPUFFRREFnVUFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXcKK0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFUQWUKK0Z3MHdNekE1TWpReE5UUTVORGhhRncweE16QTVNalF4TlRRNU5EaGFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXcKK0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFUQjIKK01CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCTVBhS3pSQk4xZ3ZoMWIrL0ltNktVTkxUdUJ1d3c1WFV6TTUKK1dOUlN0SkdWT1FzajMxOFhKR0pJL0JxVktjNHNMWWZDaUZLQXI5WnFxeUhkdU5NY2JsaTR5dWl5YVk3elFhMHAKK3c3UmZkYWRIYjlVWktWVnBtbE03SUxSbUZtQXpIcU5RTUU0d0RBWURWUjBUQkFVd0F3RUIvekFkQmdOVkhRNEUKK0ZnUVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3SHdZRFZSMGpCQmd3Rm9BVW5XMGdKRWtCUHl2TGVMVVoKK3ZINGt5ZHY3Tm53d0RBWUlLb1pJemowRUF3SUZBQU5wQURCbUFqRUF2US80OWxYWHJMWWRPSUd0VGFZV2pwWlAKK3RSQlhRaUdQTXpVdm1LQms3Z003YkY0aUZQc2RKaWt5WEhtdXd2M1JBakVBOHZ0VVg4ZkFBQjNmYmg1ZEVYUm0KK2w3dHowU3cvUlc2QUhGdGFJYXVHa2hIcWVLSWFLSWk2V1NnSHU2eDk3dXlnCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNVakNDQWRlZ0F3SUJBZ0lKQU1GRDRuNWlROHpvTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE16QTVNalF4TlRRNU5EaGFGdzB5TXpBNU1qSXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxT0JvRENCblRBZEJnTlZIUTRFRmdRVW5XMGcKK0pFa0JQeXZMZUxVWnZINGt5ZHY3Tm53d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFNTzBZbk5XS0pVQWZYZ1NKdEp4ZXhuNGlwZytrdjR6bnVSNTB2NTYKK3Q0ZDBQQ3U0MTJtVUM2Tm5kN2l6dnRFMk1nSXhBUDFubkpRalo4Qld1a3N6RlFERzQ4d3hDQ3ljaTlxcGRTTXYKK3VDam44cHdVT2tBQlhLOE1zczkwZnpDZkNFT3RJQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtcHJlc2VudC1mdXR1cmUuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTJfY2F0LXByZXNlbnQtZnV0dXJlLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjJlZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTJfY2F0LXByZXNlbnQtZnV0dXJlLmNydApAQCAtMCwwICsxLDI4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNVakNDQWRlZ0F3SUJBZ0lKQU1GRDRuNWlROHpvTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE16QTVNalF4TlRRNU5EaGFGdzB5TXpBNU1qSXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxT0JvRENCblRBZEJnTlZIUTRFRmdRVW5XMGcKK0pFa0JQeXZMZUxVWnZINGt5ZHY3Tm53d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFNTzBZbk5XS0pVQWZYZ1NKdEp4ZXhuNGlwZytrdjR6bnVSNTB2NTYKK3Q0ZDBQQ3U0MTJtVUM2Tm5kN2l6dnRFMk1nSXhBUDFubkpRalo4Qld1a3N6RlFERzQ4d3hDQ3ljaTlxcGRTTXYKK3VDam44cHdVT2tBQlhLOE1zczkwZnpDZkNFT3RJQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUIrekNDQVlDZ0F3SUJBZ0lCQVRBTUJnZ3Foa2pPUFFRREFnVUFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXcKK0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFUQWUKK0Z3MHlNekE1TWpJeE5UUTVORGxhRncwek1ERXlNekV5TXpVNU5UbGFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXcKK0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFUQjIKK01CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCTVBhS3pSQk4xZ3ZoMWIrL0ltNktVTkxUdUJ1d3c1WFV6TTUKK1dOUlN0SkdWT1FzajMxOFhKR0pJL0JxVktjNHNMWWZDaUZLQXI5WnFxeUhkdU5NY2JsaTR5dWl5YVk3elFhMHAKK3c3UmZkYWRIYjlVWktWVnBtbE03SUxSbUZtQXpIcU5RTUU0d0RBWURWUjBUQkFVd0F3RUIvekFkQmdOVkhRNEUKK0ZnUVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3SHdZRFZSMGpCQmd3Rm9BVW5XMGdKRWtCUHl2TGVMVVoKK3ZINGt5ZHY3Tm53d0RBWUlLb1pJemowRUF3SUZBQU5uQURCa0FqQjFaTmRPTTdLUkppUG80NWhQMTdBMXNKU0gKK3FIRlBFSmJtbDZLZE5ldm9WWjFIcXZQOEFvRkdjUEpScFFWdHpDMENNRGE3SkVxbjBkT3NzOEVtVzlwVkYvTjIKKytYdnpOY3pqODltV01nUGhKSmxUK01PTlF4M0xGUU8rVE1TSTloTGRrdz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtcHJlc2VudC1wYXN0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyX2NhdC1wcmVzZW50LXBhc3QuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjFkNWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtcHJlc2VudC1wYXN0LmNydApAQCAtMCwwICsxLDI4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNVakNDQWRlZ0F3SUJBZ0lKQU1GRDRuNWlROHpvTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE16QTVNalF4TlRRNU5EaGFGdzB5TXpBNU1qSXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxT0JvRENCblRBZEJnTlZIUTRFRmdRVW5XMGcKK0pFa0JQeXZMZUxVWnZINGt5ZHY3Tm53d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFNTzBZbk5XS0pVQWZYZ1NKdEp4ZXhuNGlwZytrdjR6bnVSNTB2NTYKK3Q0ZDBQQ3U0MTJtVUM2Tm5kN2l6dnRFMk1nSXhBUDFubkpRalo4Qld1a3N6RlFERzQ4d3hDQ3ljaTlxcGRTTXYKK3VDam44cHdVT2tBQlhLOE1zczkwZnpDZkNFT3RJQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUIvVENDQVlDZ0F3SUJBZ0lCQVRBTUJnZ3Foa2pPUFFRREFnVUFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXcKK0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFUQWUKK0Z3MHdNekE1TWpReE5UUTVORGhhRncweE16QTVNalF4TlRRNU5EaGFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXcKK0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFUQjIKK01CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCTVBhS3pSQk4xZ3ZoMWIrL0ltNktVTkxUdUJ1d3c1WFV6TTUKK1dOUlN0SkdWT1FzajMxOFhKR0pJL0JxVktjNHNMWWZDaUZLQXI5WnFxeUhkdU5NY2JsaTR5dWl5YVk3elFhMHAKK3c3UmZkYWRIYjlVWktWVnBtbE03SUxSbUZtQXpIcU5RTUU0d0RBWURWUjBUQkFVd0F3RUIvekFkQmdOVkhRNEUKK0ZnUVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3SHdZRFZSMGpCQmd3Rm9BVW5XMGdKRWtCUHl2TGVMVVoKK3ZINGt5ZHY3Tm53d0RBWUlLb1pJemowRUF3SUZBQU5wQURCbUFqRUF2US80OWxYWHJMWWRPSUd0VGFZV2pwWlAKK3RSQlhRaUdQTXpVdm1LQms3Z003YkY0aUZQc2RKaWt5WEhtdXd2M1JBakVBOHZ0VVg4ZkFBQjNmYmg1ZEVYUm0KK2w3dHowU3cvUlc2QUhGdGFJYXVHa2hIcWVLSWFLSWk2V1NnSHU2eDk3dXlnCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNGJmMDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydApAQCAtMCwwICsxLDk1IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDAgKDB4MCkKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogRmViIDEyIDE0OjQ0OjAwIDIwMTEgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBGZWIgMTIgMTQ6NDQ6MDAgMjAyMSBHTVQKKyAgICAgICAgU3ViamVjdDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6YzA6ZGY6Mzc6ZmM6MTc6YmI6ZTA6OTY6OWQ6M2Y6ODY6ZGU6OTY6MzI6CisgICAgICAgICAgICAgICAgICAgIDdkOjQ0OmE1OjE2OmEwOmNkOjIxOmYxOjk5OmQ0OmVjOmVhOmNiOjdjOjE4OgorICAgICAgICAgICAgICAgICAgICA1ODowODo5NDphNTplYzo5YjpjNTo4YjpkZjoxYToxZTo5OTozODo5OTo4NzoKKyAgICAgICAgICAgICAgICAgICAgMWU6N2I6YzA6OGQ6Mzk6ZGY6Mzg6NWQ6NzA6Nzg6MDc6ZDM6OWU6ZDk6OTM6CisgICAgICAgICAgICAgICAgICAgIGU4OmI5OjcyOjUxOmM1OmNlOmEzOjMwOjUyOmE5OmYyOmU3OjQwOjcwOjE0OgorICAgICAgICAgICAgICAgICAgICBjYjo0NDphMjo3MjowYjpjMjplNTo0MDpmOTozZTplNTphNjowZTpiMzpmOToKKyAgICAgICAgICAgICAgICAgICAgZWM6NGE6NjM6YzA6Yjg6Mjk6MDA6NzQ6OWM6NTc6M2I6YTg6YTU6MDQ6OTA6CisgICAgICAgICAgICAgICAgICAgIDcxOmYxOmJkOjgzOmQ5OjNmOmQ2OmE1OmUyOjNjOjJhOjhmOmVmOjI3OjYwOgorICAgICAgICAgICAgICAgICAgICBjMzpjNjo5ZjpjYjpiYTplYzo2MDo3ZDpiNzplNjo4NDozMjpiZTo0ZjpmYjoKKyAgICAgICAgICAgICAgICAgICAgNTg6MjY6MjI6MDM6NWI6ZDQ6YjQ6ZDU6ZmI6ZjU6ZTM6OTY6MmU6NzA6YzA6CisgICAgICAgICAgICAgICAgICAgIGU0OjJlOmJkOmZjOjJlOmVlOmUyOjQxOjU1OmMwOjM0OjJlOjdkOjI0OjcyOgorICAgICAgICAgICAgICAgICAgICA2OTpjYjo0NzpiMToxNDo0MDo4Mzo3ZDo2NzpmNDo4NjpmNjozMTphYjpmMToKKyAgICAgICAgICAgICAgICAgICAgNzk6YTQ6YjI6YjU6MmU6MTI6Zjk6ODQ6MTc6ZjA6NjI6NmY6Mjc6M2U6MTM6CisgICAgICAgICAgICAgICAgICAgIDU4OmIxOjU0OjBkOjIxOjlhOjczOjM3OmExOjMwOmNmOjZmOjkyOmRjOmY2OgorICAgICAgICAgICAgICAgICAgICBlOTpmYzphYzpkYjoyZToyODpkMTo3ZTowMjo0YjoyMzphMDoxNTpmMjozODoKKyAgICAgICAgICAgICAgICAgICAgNjU6NjQ6MDk6ZWE6MGM6NmU6OGU6MWI6MTc6YTA6NzE6Yzg6YjM6OWI6Yzk6CisgICAgICAgICAgICAgICAgICAgIGFiOmU5OmMzOmYyOmNmOjg3Ojk2OjhmOjgwOjAyOjMyOjllOjk5OjU4OjZmOgorICAgICAgICAgICAgICAgICAgICBhMjpkNQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6CisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgQjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6CisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgICAgICBEaXJOYW1lOi9DPU5ML089UG9sYXJTU0wvQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICAgICAgICAgIHNlcmlhbDowMAorCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIGI4OmZkOjU0OmQ4OjAwOjU0OjkwOjhiOjI1OmIwOjI3OmRkOjk1OmNkOmEyOmY3Ojg0OjA3OgorICAgICAgICAxZDo4Nzo4OTo0YTpjNDo3ODoxMTpkODowNzpiNTpkNzoyMjo1MDo4ZTo0ODplYjo2Mjo3YToKKyAgICAgICAgMzI6ODk6YmU6NjM6NDc6NTM6ZmY6YjY6YmU6ZjE6MmU6OGM6NTQ6YzA6OTk6M2Y6YTA6Yjk6CisgICAgICAgIDM3OjIzOjcyOjVmOjBkOjQ2OjU5OjhmOmQ4OjQ3OmNkOjk3OjRjOjlmOjA3OjBjOjEyOjYyOgorICAgICAgICAwOTozYToyNDplNDozNjpkOTplOToyYzpkYTozODpkMDo3Mzo3NTo2MTpkNzpjMTo2YzoyNjoKKyAgICAgICAgOGI6OWI6ZTA6ZDU6ZGM6Njc6ZWQ6OGM6NmI6MzM6ZDc6NzQ6MjI6M2M6NGM6ZGI6YjU6OGQ6CisgICAgICAgIDJhOmNlOjJjOjBkOjA4OjU5OjA1OjA5OjA1OmE2OjM5OjlmOmIzOjY3OjFiOmUyOjgzOmU1OgorICAgICAgICBlMTo4Zjo1MzpmNjo2Nzo5MzpjNzpmOTo2Zjo3Njo0NDo1ODoxMjplODozYTpkNDo5NzplNzoKKyAgICAgICAgZTk6YzA6M2U6YTg6N2E6NzI6M2Q6ODc6NTM6MWY6ZTU6MmM6ODQ6ODQ6ZTc6OWE6OWU6N2Y6CisgICAgICAgIDY2OmQ5OjFmOjliOmY1OjEzOjQ4OmIwOjRkOjE0OmQxOmRlOmIyOjI0OmQ5Ojc4OjdkOmY1OgorICAgICAgICAzNTpjYzo1ODoxOTpkMTpkMjo5OTplZjo0ZDo3MzpmODoxZjo4OTpkNDo1YTpkMDo1MjpjZToKKyAgICAgICAgMDk6ZjU6YjE6NDY6NTE6NmE6MDA6OGU6M2I6Y2M6NmY6NjM6MDE6MDA6OTk6ZWQ6OWQ6YTY6CisgICAgICAgIDA4OjYwOmNkOjMyOjE4OmQwOjczOmUwOjU4OjcxOmQ5OmU1OmQyOjUzOmQ3OjhkOmQwOmNhOgorICAgICAgICBlOTo1ZDoyYTowYTowZDo1ZDo1NTplYzoyMTo1MDoxNzoxNjplNjowNjo0YTpjZDo1ZTpkZToKKyAgICAgICAgZjc6ZTA6ZTk6NTQKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGh6Q0NBbStnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBd1doY05NakV3TWpFeU1UUTBOREF3V2pBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdnZ0VpTUEwRworQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURBM3pmOEY3dmdscDAvaHQ2V01uMUVwUmFnelNIeAorbWRUczZzdDhHRmdJbEtYc204V0wzeG9lbVRpWmh4NTd3STA1M3poZGNIZ0gwNTdaaytpNWNsSEZ6cU13VXFueQorNTBCd0ZNdEVvbklMd3VWQStUN2xwZzZ6K2V4S1k4QzRLUUIwbkZjN3FLVUVrSEh4dllQWlA5YWw0andxais4bgorWU1QR244dTY3R0I5dCthRU1yNVArMWdtSWdOYjFMVFYrL1hqbGk1d3dPUXV2Znd1N3VKQlZjQTBMbjBrY21uTAorUjdFVVFJTjlaL1NHOWpHcjhYbWtzclV1RXZtRUYvQmlieWMrRTFpeFZBMGhtbk0zb1REUGI1TGM5dW44ck5zdQorS05GK0Frc2pvQlh5T0dWa0Nlb01ibzRiRjZCeHlMT2J5YXZwdy9MUGg1YVBnQUl5bnBsWWI2TFZBZ01CQUFHagorZ1pVd2daSXdEQVlEVlIwVEJBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SAorL2Y4d1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZitoUDZROU1Ec3hDekFKQmdOVgorQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnVkdWegorZENCRFFZSUJBREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBdVAxVTJBQlVrSXNsc0NmZGxjMmk5NFFISFllSgorU3NSNEVkZ0h0ZGNpVUk1STYySjZNb20rWTBkVC83YSs4UzZNVk1DWlA2QzVOeU55WHcxR1dZL1lSODJYVEo4SAorREJKaUNUb2s1RGJaNlN6YU9OQnpkV0hYd1d3bWk1dmcxZHhuN1l4ck05ZDBJanhNMjdXTktzNHNEUWhaQlFrRgorcGptZnMyY2I0b1BsNFk5VDltZVR4L2x2ZGtSWUV1ZzYxSmZuNmNBK3FIcHlQWWRUSCtVc2hJVG5tcDUvWnRrZgorbS9VVFNMQk5GTkhlc2lUWmVIMzFOY3hZR2RIU21lOU5jL2dmaWRSYTBGTE9DZld4UmxGcUFJNDd6RzlqQVFDWgorN1oybUNHRE5NaGpRYytCWWNkbmwwbFBYamRESzZWMHFDZzFkVmV3aFVCY1c1Z1pLelY3ZTkrRHBWQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNVakNDQWRlZ0F3SUJBZ0lKQU1GRDRuNWlROHpvTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE16QTVNalF4TlRRNU5EaGFGdzB5TXpBNU1qSXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxT0JvRENCblRBZEJnTlZIUTRFRmdRVW5XMGcKK0pFa0JQeXZMZUxVWnZINGt5ZHY3Tm53d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFNTzBZbk5XS0pVQWZYZ1NKdEp4ZXhuNGlwZytrdjR6bnVSNTB2NTYKK3Q0ZDBQQ3U0MTJtVUM2Tm5kN2l6dnRFMk1nSXhBUDFubkpRalo4Qld1a3N6RlFERzQ4d3hDQ3ljaTlxcGRTTXYKK3VDam44cHdVT2tBQlhLOE1zczkwZnpDZkNFT3RJQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhX2NhdDIxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MjEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzA3ODkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhX2NhdDIxLmNydApAQCAtMCwwICsxLDk1IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNVakNDQWRlZ0F3SUJBZ0lKQU1GRDRuNWlROHpvTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE16QTVNalF4TlRRNU5EaGFGdzB5TXpBNU1qSXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxT0JvRENCblRBZEJnTlZIUTRFRmdRVW5XMGcKK0pFa0JQeXZMZUxVWnZINGt5ZHY3Tm53d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFNTzBZbk5XS0pVQWZYZ1NKdEp4ZXhuNGlwZytrdjR6bnVSNTB2NTYKK3Q0ZDBQQ3U0MTJtVUM2Tm5kN2l6dnRFMk1nSXhBUDFubkpRalo4Qld1a3N6RlFERzQ4d3hDQ3ljaTlxcGRTTXYKK3VDam44cHdVT2tBQlhLOE1zczkwZnpDZkNFT3RJQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDAgKDB4MCkKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogRmViIDEyIDE0OjQ0OjAwIDIwMTEgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBGZWIgMTIgMTQ6NDQ6MDAgMjAyMSBHTVQKKyAgICAgICAgU3ViamVjdDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6YzA6ZGY6Mzc6ZmM6MTc6YmI6ZTA6OTY6OWQ6M2Y6ODY6ZGU6OTY6MzI6CisgICAgICAgICAgICAgICAgICAgIDdkOjQ0OmE1OjE2OmEwOmNkOjIxOmYxOjk5OmQ0OmVjOmVhOmNiOjdjOjE4OgorICAgICAgICAgICAgICAgICAgICA1ODowODo5NDphNTplYzo5YjpjNTo4YjpkZjoxYToxZTo5OTozODo5OTo4NzoKKyAgICAgICAgICAgICAgICAgICAgMWU6N2I6YzA6OGQ6Mzk6ZGY6Mzg6NWQ6NzA6Nzg6MDc6ZDM6OWU6ZDk6OTM6CisgICAgICAgICAgICAgICAgICAgIGU4OmI5OjcyOjUxOmM1OmNlOmEzOjMwOjUyOmE5OmYyOmU3OjQwOjcwOjE0OgorICAgICAgICAgICAgICAgICAgICBjYjo0NDphMjo3MjowYjpjMjplNTo0MDpmOTozZTplNTphNjowZTpiMzpmOToKKyAgICAgICAgICAgICAgICAgICAgZWM6NGE6NjM6YzA6Yjg6Mjk6MDA6NzQ6OWM6NTc6M2I6YTg6YTU6MDQ6OTA6CisgICAgICAgICAgICAgICAgICAgIDcxOmYxOmJkOjgzOmQ5OjNmOmQ2OmE1OmUyOjNjOjJhOjhmOmVmOjI3OjYwOgorICAgICAgICAgICAgICAgICAgICBjMzpjNjo5ZjpjYjpiYTplYzo2MDo3ZDpiNzplNjo4NDozMjpiZTo0ZjpmYjoKKyAgICAgICAgICAgICAgICAgICAgNTg6MjY6MjI6MDM6NWI6ZDQ6YjQ6ZDU6ZmI6ZjU6ZTM6OTY6MmU6NzA6YzA6CisgICAgICAgICAgICAgICAgICAgIGU0OjJlOmJkOmZjOjJlOmVlOmUyOjQxOjU1OmMwOjM0OjJlOjdkOjI0OjcyOgorICAgICAgICAgICAgICAgICAgICA2OTpjYjo0NzpiMToxNDo0MDo4Mzo3ZDo2NzpmNDo4NjpmNjozMTphYjpmMToKKyAgICAgICAgICAgICAgICAgICAgNzk6YTQ6YjI6YjU6MmU6MTI6Zjk6ODQ6MTc6ZjA6NjI6NmY6Mjc6M2U6MTM6CisgICAgICAgICAgICAgICAgICAgIDU4OmIxOjU0OjBkOjIxOjlhOjczOjM3OmExOjMwOmNmOjZmOjkyOmRjOmY2OgorICAgICAgICAgICAgICAgICAgICBlOTpmYzphYzpkYjoyZToyODpkMTo3ZTowMjo0YjoyMzphMDoxNTpmMjozODoKKyAgICAgICAgICAgICAgICAgICAgNjU6NjQ6MDk6ZWE6MGM6NmU6OGU6MWI6MTc6YTA6NzE6Yzg6YjM6OWI6Yzk6CisgICAgICAgICAgICAgICAgICAgIGFiOmU5OmMzOmYyOmNmOjg3Ojk2OjhmOjgwOjAyOjMyOjllOjk5OjU4OjZmOgorICAgICAgICAgICAgICAgICAgICBhMjpkNQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6CisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgQjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6CisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgICAgICBEaXJOYW1lOi9DPU5ML089UG9sYXJTU0wvQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICAgICAgICAgIHNlcmlhbDowMAorCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIGI4OmZkOjU0OmQ4OjAwOjU0OjkwOjhiOjI1OmIwOjI3OmRkOjk1OmNkOmEyOmY3Ojg0OjA3OgorICAgICAgICAxZDo4Nzo4OTo0YTpjNDo3ODoxMTpkODowNzpiNTpkNzoyMjo1MDo4ZTo0ODplYjo2Mjo3YToKKyAgICAgICAgMzI6ODk6YmU6NjM6NDc6NTM6ZmY6YjY6YmU6ZjE6MmU6OGM6NTQ6YzA6OTk6M2Y6YTA6Yjk6CisgICAgICAgIDM3OjIzOjcyOjVmOjBkOjQ2OjU5OjhmOmQ4OjQ3OmNkOjk3OjRjOjlmOjA3OjBjOjEyOjYyOgorICAgICAgICAwOTozYToyNDplNDozNjpkOTplOToyYzpkYTozODpkMDo3Mzo3NTo2MTpkNzpjMTo2YzoyNjoKKyAgICAgICAgOGI6OWI6ZTA6ZDU6ZGM6Njc6ZWQ6OGM6NmI6MzM6ZDc6NzQ6MjI6M2M6NGM6ZGI6YjU6OGQ6CisgICAgICAgIDJhOmNlOjJjOjBkOjA4OjU5OjA1OjA5OjA1OmE2OjM5OjlmOmIzOjY3OjFiOmUyOjgzOmU1OgorICAgICAgICBlMTo4Zjo1MzpmNjo2Nzo5MzpjNzpmOTo2Zjo3Njo0NDo1ODoxMjplODozYTpkNDo5NzplNzoKKyAgICAgICAgZTk6YzA6M2U6YTg6N2E6NzI6M2Q6ODc6NTM6MWY6ZTU6MmM6ODQ6ODQ6ZTc6OWE6OWU6N2Y6CisgICAgICAgIDY2OmQ5OjFmOjliOmY1OjEzOjQ4OmIwOjRkOjE0OmQxOmRlOmIyOjI0OmQ5Ojc4OjdkOmY1OgorICAgICAgICAzNTpjYzo1ODoxOTpkMTpkMjo5OTplZjo0ZDo3MzpmODoxZjo4OTpkNDo1YTpkMDo1MjpjZToKKyAgICAgICAgMDk6ZjU6YjE6NDY6NTE6NmE6MDA6OGU6M2I6Y2M6NmY6NjM6MDE6MDA6OTk6ZWQ6OWQ6YTY6CisgICAgICAgIDA4OjYwOmNkOjMyOjE4OmQwOjczOmUwOjU4OjcxOmQ5OmU1OmQyOjUzOmQ3OjhkOmQwOmNhOgorICAgICAgICBlOTo1ZDoyYTowYTowZDo1ZDo1NTplYzoyMTo1MDoxNzoxNjplNjowNjo0YTpjZDo1ZTpkZToKKyAgICAgICAgZjc6ZTA6ZTk6NTQKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGh6Q0NBbStnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBd1doY05NakV3TWpFeU1UUTBOREF3V2pBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdnZ0VpTUEwRworQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURBM3pmOEY3dmdscDAvaHQ2V01uMUVwUmFnelNIeAorbWRUczZzdDhHRmdJbEtYc204V0wzeG9lbVRpWmh4NTd3STA1M3poZGNIZ0gwNTdaaytpNWNsSEZ6cU13VXFueQorNTBCd0ZNdEVvbklMd3VWQStUN2xwZzZ6K2V4S1k4QzRLUUIwbkZjN3FLVUVrSEh4dllQWlA5YWw0andxais4bgorWU1QR244dTY3R0I5dCthRU1yNVArMWdtSWdOYjFMVFYrL1hqbGk1d3dPUXV2Znd1N3VKQlZjQTBMbjBrY21uTAorUjdFVVFJTjlaL1NHOWpHcjhYbWtzclV1RXZtRUYvQmlieWMrRTFpeFZBMGhtbk0zb1REUGI1TGM5dW44ck5zdQorS05GK0Frc2pvQlh5T0dWa0Nlb01ibzRiRjZCeHlMT2J5YXZwdy9MUGg1YVBnQUl5bnBsWWI2TFZBZ01CQUFHagorZ1pVd2daSXdEQVlEVlIwVEJBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SAorL2Y4d1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZitoUDZROU1Ec3hDekFKQmdOVgorQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnVkdWegorZENCRFFZSUJBREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBdVAxVTJBQlVrSXNsc0NmZGxjMmk5NFFISFllSgorU3NSNEVkZ0h0ZGNpVUk1STYySjZNb20rWTBkVC83YSs4UzZNVk1DWlA2QzVOeU55WHcxR1dZL1lSODJYVEo4SAorREJKaUNUb2s1RGJaNlN6YU9OQnpkV0hYd1d3bWk1dmcxZHhuN1l4ck05ZDBJanhNMjdXTktzNHNEUWhaQlFrRgorcGptZnMyY2I0b1BsNFk5VDltZVR4L2x2ZGtSWUV1ZzYxSmZuNmNBK3FIcHlQWWRUSCtVc2hJVG5tcDUvWnRrZgorbS9VVFNMQk5GTkhlc2lUWmVIMzFOY3hZR2RIU21lOU5jL2dmaWRSYTBGTE9DZld4UmxGcUFJNDd6RzlqQVFDWgorN1oybUNHRE5NaGpRYytCWWNkbmwwbFBYamRESzZWMHFDZzFkVmV3aFVCY1c1Z1pLelY3ZTkrRHBWQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWludC1jYS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWludC1jYS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlOTllMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhLmNydApAQCAtMCwwICsxLDI0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUVBVENDQTRlZ0F3SUJBZ0lCRGpBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UTXdPVEkwTVRVMU5URTBXaGNOTWpNd09USXlNVFUxTlRFMFdqQklNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SmpBa0JnTlZCQU1USFZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAKK1lYUmxJRU5CTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFvMU9jOG5yNmZNVHEKK3Zvd1YrQ3BDNTVpNUJaR0ZHYzUwRWI0UkxCU1JUSDFlN0plcGRGakFWYkJ0eVFSSlNpWTFqYTB0Z0xRRERLWlIKK3dmRUkrYjRhenNlNDYwSW5QSHY3QzFUTjB1cFhseHVqNm05QjFJbFArc0JhTTdXQkM2ZFZmUE8ralZNSXhna0YKK0NhQkNMaGhkSzFGamY4SGprVC9Qa2N0V25obzhOVHdpdmM5K25xUlpqWGUvZUljcW01SHdqRERodStneitvMGcKK1Z6OU1mWk5pMUp5Q3JPeU5aY3krY3IyUWVObk5WR25GcTh4VHh0dTZkTHVuaHBtTEZqMm1tMFZqd2E3WXBqNXEKK0FqcHFUTXREdnFiUnVUb3lveXphamhNTmNDQWY3Z3d6SXVwSkpGVmRqZHRnWUFjUXd6aWt3RjVIb0lUSnp6SjIKK3FneEY3Q212R1pOYjdHOTltTGRMZGh0Y2xIM3dBUUtIWXdFR0pvN1hLeU5FdUhQUWdCK2UwY2cxU0QxSHFsQU0KK3VDZkdHVFdRNm1lN0JqYW4zdDBOem9UZERxNklwS1Rlc2JhWSsvOWUyeG44RENyaEJLTFhRTVpGRFpxVW9MWUEKK2tHUE9FR2d2bFBuSUlYQWF3b3V4Q2FOWUVoNVV3ODcxWU1TUFQyOHJMZEZyNDlkd1lPdERnOWZvQThoRElXMlAKK2Q2S1hiclp0ZWVzdkExbll6RU9zKzNBanJiVDc5TWQyVzhCejlicUJWTmxOT0VTU3FtNGtpQ0pGbXNsbS82YnIKK05wME1TUWQrbzIyUFE0eFJ0bVA2VXNUZlUwdWVpTXBZYzhUWVloTWJmbmZGeW80bTcwN2ViY2ZsUGJCRU4yZGcKK3VwZFE2NmN2ZkNKQjBRSnQ5dXBhZlkwbHBkVjFxVWtDQXdFQUFhT0JvRENCblRBZEJnTlZIUTRFRmdRVU9IZlkKK2EzZWNLSGVDaTA3WUc2a2U5NVFXdHc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhQUF3WlFJeEFQeUUrdStlUDdnUnJTRmpRaWNtcFlnOGppRlVDWUVvd1dZMnp1T0cKK2kxSFhZd21wREhmYXNRM3JOU3VmL2dIdmp3SXdiU1NqdW1Eayt1WU5jaS9LTUVMRHNEME1GSHhaaGhCYzlIcDkKK0FmNWNOUjhLaHplZ3puTDZhbVJPYkdHS21YMUYKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhLmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQ2MmYzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2Eua2V5CkBAIC0wLDAgKzEsNTEgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUpLUUlCQUFLQ0FnRUFvMU9jOG5yNmZNVHF2b3dWK0NwQzU1aTVCWkdGR2M1MEViNFJMQlNSVEgxZTdKZXAKK2RGakFWYkJ0eVFSSlNpWTFqYTB0Z0xRRERLWlJ3ZkVJK2I0YXpzZTQ2MEluUEh2N0MxVE4wdXBYbHh1ajZtOUIKKzFJbFArc0JhTTdXQkM2ZFZmUE8ralZNSXhna0ZDYUJDTGhoZEsxRmpmOEhqa1QvUGtjdFduaG84TlR3aXZjOSsKK25xUlpqWGUvZUljcW01SHdqRERodStneitvMGdWejlNZlpOaTFKeUNyT3lOWmN5K2NyMlFlTm5OVkduRnE4eFQKK3h0dTZkTHVuaHBtTEZqMm1tMFZqd2E3WXBqNXFBanBxVE10RHZxYlJ1VG95b3l6YWpoTU5jQ0FmN2d3ekl1cEoKK0pGVmRqZHRnWUFjUXd6aWt3RjVIb0lUSnp6SjJxZ3hGN0NtdkdaTmI3Rzk5bUxkTGRodGNsSDN3QVFLSFl3RUcKK0pvN1hLeU5FdUhQUWdCK2UwY2cxU0QxSHFsQU11Q2ZHR1RXUTZtZTdCamFuM3QwTnpvVGREcTZJcEtUZXNiYVkKKysvOWUyeG44RENyaEJLTFhRTVpGRFpxVW9MWUFrR1BPRUdndmxQbklJWEFhd291eENhTllFaDVVdzg3MVlNU1AKK1QyOHJMZEZyNDlkd1lPdERnOWZvQThoRElXMlBkNktYYnJadGVlc3ZBMW5ZekVPcyszQWpyYlQ3OU1kMlc4QnoKKzlicUJWTmxOT0VTU3FtNGtpQ0pGbXNsbS82YnJOcDBNU1FkK28yMlBRNHhSdG1QNlVzVGZVMHVlaU1wWWM4VFkKK1loTWJmbmZGeW80bTcwN2ViY2ZsUGJCRU4yZGd1cGRRNjZjdmZDSkIwUUp0OXVwYWZZMGxwZFYxcVVrQ0F3RUEKK0FRS0NBZ0VBZ3l1eHp1U0pyQThTWUxwdElvUCtlN1lpVXFDT2Z5MVo5cTNwYUxlVUFoUm1XaWxyeEs5S3VRY2IKK0JPaFdYQ0RYdmRNcHlrWElkUzVXVnlaWUNRdHV5RWVLOGhhTklIeUtJSTJaU0IxQS8zRUpja3lzV0I5M2huRloKK2dGSHpOQUxPRzY0K2lZMzRhK1B1a2M2Tm1DdWxHQmNqakFXUjJLT2c5dnlSc2lScjJtMVRrWkhGcFc5bEpNTFoKK21ka2tsUkRlV2hrZ0VpUHBLdjZRek1GZmt6TDltcmVnRTNWZ0VqUWZlRk5hWmxTMkhXZGRoQjV6NGkreVRmSXcKK0YxL1ZYcVZnMnk4ZGNQNFZyVjVQRVQ4TkJHUHpJbmtqMGxrMU5ldmVFMkNsMkRsVXE0Qk15V3ZVRmtRaEFMOEIKK1pkNEd6bUw5bmltWjZRYjhkVldZQy9ZVGFob0lMMytZVUNaQUdJZWN6QW82ZHJ5aGVVc2oxdzNwU0VyT0lZOVUKK2RHU3lxOUk5WFlYcWNSTmV5ZmtvTlZPWjd1Z3FrNER2TXl2NjR0dCtOSUl5OVNaR2NIdVdvM0dMMEZkS2lSNWMKK1hibjE4dEQrV3dya2EwTzFudHZ6WDFxa3dKY3B2dTUreE5WYm9ia000RGlsdW9pdk9xKzI5Q0dBTnRHMkV0N1MKK202S0NVd1NFbEtzdnBJNGROVzRuV2NiZGo4aThnY0xpS2pxUnU5bjJCZGt2QUhhTWhWYmw5eG5wOXN2ZUdMY1IKK2lGZzZtRHNDUXVWRUg4YkdQSU1JYXYvM1ZVankxd2JNQUE1NFBzcUtNMGFUQStESG5sZVhjaFZBaE1tOWVIRDgKK3lyVjhlYjgvYmNDYld2aEREaTgwa3VSSWFEU3NZVHdNV3B6ano2TVU5djhPdUZHWlphRUNnZ0VCQU5MNDRWUTcKKzd0b2s1WGVKSmduUlYvUEdObEhLa3NjdFBNait5ZThpU0RyUnZIVmxISHF2WjI2TVpKUGdYd0hDTy9OVklXdjYKK2hmQ1lsZm1QLzYzZloxV0pxRFVEeEhPZ2pJYlB0T0lLVHNKaTNQYmJPRFZyc3ljWjN5NU9qcGJqWEtHOTdjS00KKzZSWDZ6Ym5qdEdLUGZiVUp4K2t1QU94bWtGTGlMSkdObExxemFKYWZrZ1dqVUFWL25UNlFtMjY2M21zZlovTWQKKzd1REZETk9UYlBTNzRraTVKVGpsajh4bXhBUGNueGpOSjJpakRRN2VpQ0FtNkpvekpZeTlQWWl4bXVTY0ZGMngKK0QyTjZFOS9KV1VjWWV6eWJVZ09MemJ3enZKa0NSSm9CWGowOUY4Y2IzbTZaUTA0bjJwZVFnLzBibjZIVVZvdkYKK29wWkpXOXVaVFJtRmFlMENnZ0VCQU1ZdmVCbllSWHlXcUVOZjhQWjh4bHFpT3ZKQkFSYUlZUU9QeTF0NExlT3YKK3Q0c3N2a1NKUEVHMHRQMklUNnB0ZWNOTjlDVlJkUEpuN3RzZ3ZqZ1B2cWd5bUxsYXc4RGhlRlMzRUs0c0ZkMGEKK1NJd3JZY1hZOGZ5QUZ1R2JiY3gySlRmbXh3TEdZWGVXRzRNRGtjWWN0VWhYaU9iTWIwWUkyZVhsVHU0SlhxSkgKK3ExbXlsN3BpM2d1eDdKY0ZqcjBBTmg5bURPWVh6TDUyV3FaT2JhVlVVTm44cC9hTldwYXRpOVo5UEwydUpOeFkKK215WmJUcVdHVHBaOFhsWm5aWWc4YkhWSkdvYzcvc2VTREVuU3JlR1F0WGw2TXJuc045YkRVNlVodWZJMGlBaUgKK2ZDZUVMcHhqQnB2WmkyVHpZbmx0WCsyMWYzb1VYdXJYVDRlWVBKbTZZVTBDZ2dFQkFJckpVU3BodHZKb3ZVL1MKK3VHUlRCRUlJemVrbWswSldIeHUyaVU4NFJUMzBoYjdRd2xodkZXTGpGck0xTWlydEJSVkJscGY3R2F1NkpVY2sKK2xMVmtOdzFOWG90cHJBM0l1MGxnVUlVMjlMTHA2S1M0ZUJTa2dobWg2bkVER3NobVQ2VFRWaHJiS2ViY3RBT3EKK3FSc0JmRmZoVkZLd2dja0NlOFVhcHVrbHM0YlN5V1gxR1ZGK0t3RkMvMFdPU2NJaFNubzhFZDBjZnUzOGswQ0kKK1JuQUZQWXBMeWhIUTZyVXprWlZjeUlpL1JVS1BxT0owUUNhdWtld0c0NWZmVWlDZmZkOFFVbEdFVGpSSnRkTk4KK0dOOHRXcnozREkvcW8zQkF0THdQZ3VPeExMYXFmdjdyOVhyYWRpMXZDRjBXbzgyWkkzMkpPMW45ck1TakE3dkYKKzhMTnVVYzBDZ2dFQWVkQlBoOE13NHFWUGd5b0RWOTNWcFh1MXM1VlU3OTZma3FyZG1ibENxNElqMUwySnJXS1UKKzBPWWJvUUlaeFcxSXZFeTcxZnc5WDRtV2ZNV2haWi8zMWpaVFBRcVc2NFVxaXhlQ2Z5dkZ2SU1kT0ZxcDNBdSsKK29TNng0YlhCUlQwUkgwMFA0WnJCNmRrdnk5Vnowa3R1K2Fva0VZaHlsSjk0SHlCVTVXYUk3a0lUQmkwSnFaeC8KK1Vyem42T09YbW4vNHhFL2JlY29ESk1abWJYWWpXczE2YktJcE14Z3JLQlkvcjNTRzB5ZW9yRzhoM2UrZFpZd3AKKzNjRlAwdGYyeGtndGVlR1hGcXcvcTdjUEtvaitLM2pnc212enBlZVZZc0hvTmNXSEgySStncytUOWszK3dFejEKK2tQR2tCa2E2cmx3VjdHdjBrTHJZcEl2MjdDY2NpSGpRdVFLQ0FRQWN0UU0zRFRDM3B6RXd3UGVZTW5TWEw5L3MKK3VEcWJqM01WNkg4ZnhQSUdKV2ZwRHN0N25XWGhUODF1S0c2ZlltZWc1WjZuSlhmUDBkVUY1VHBXMXprNlZHd24KK3QvY2g2VTdIWXBzZVpzeXdkWlBWSW8vdXBna293WFNsNm1mcXl4ekduZ1h1T1JoNHpoUnBjbjRHVHd6SEcyVGUKK3hOcU1FYi9pL0lXbnZ0ZnZ5ZmhFQmV3SmNNcjlOcHdyZzYxNXBDaVo4eTNjanZKZi9nbDBjR1o1TEl1V0JRQjUKK0YxNkp4RjNtbTFYQ3VrVFhaTzkwdmczWTFKeGVCK1lZeUYrMWFRTCtEZ3ZoR1pOUnJHckJUL1F1WFFwaU1DTWYKK1ZNOW9aVnJJN2NZVk5uUEJFb0hWY3lQMjFOUTVBV29GVGFTcE1KaUhaNEZCaWUwQkdPNklrek1jRzIzcgorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWludC1jYTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZTQ0YzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWludC1jYTIuY3J0CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzZUQ0NBZEdnQXdJQkFnSUJEekFOQmdrcWhraUc5dzBCQVFzRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRNd09USTBNVFl3T0RReVdoY05Nak13T1RJeU1UWXdPRFF5V2pCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUU4T2loM2ZYNVNMZU4xZG1GbmNRbAorV013OStZNnNYYmxobHJYQnhoWHhqd2R3cENIRU5uK2ZvVVZkcnFZVllhN1N1djNRVmVPNm5KMTlIM1FOaXhXOAoraWsxUCtoeHNiYXE4YnRhNzh2QXlIbUM0RW1YUUxnMXc3b3hiOVE4MnFYMVlvNEdWTUlHU01CMEdBMVVkRGdRVworQkJRUGliMWpRZXZMWGhjby8yZ3dQY0dJMEp4WU9UQmpCZ05WSFNNRVhEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVgorRCtzK3ZNZjkvNkUvcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrdworRndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSQoraHZjTkFRRUxCUUFEZ2dFQkFBamVhVFVhQ0JpWFQxQ1lMVnI2VUZTZVJOWkJyRFBuajZQd3FVUVR2Z0I1STVuNgoreVhxb0U0UllEYUVMMExnMjRqdUZ4STI2aXRCdXlwdG82dnNjZ0dxNzdjZnJQL2F2U2R4VSt4ZVo0YkNXdmgzTQorZGRqOWxta28yVThJOEdoQmNIcFN1SWlUdmdLREI4ZUtramVxM0FzTEdjaEhEdmlwOHBCM0loY05mTDdXOTRaZgorNy9sSDlWUWlFMy9weDdhbUQzMmNpZG9QdldMQTlVM2YxRnNQbUpFU1V6MHd3TmZJTnBEam1QcjhkR2JrQ04rTQorQ0ZoeG82c0NmSzhLTFlHNG5ZWDhGd3hWUjg2a3BTck85ZTg0QVgwWVliZHp4cHJiYzJYT2FlYko4K0JEbXp1dAorQVJrRDdEVFhyb2ROMXdWN2pRSmtyVXVFd1BqOVJodmsrTUZSa2F3PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2EyLmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhMi5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRmNWI3YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhMi5rZXkKQEAgLTAsMCArMSw2IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01JR2tBZ0VCQkRBdHhPSFVWNGJlMU1kSDFmckJIenhJVEN5VVN4clZqSk44UVR2VFZrNTU4a2EwYTN6aGQ0UGIKK2VrV3Q3d0JQWFFlZ0J3WUZLNEVFQUNLaFpBTmlBQVR3NktIZDlmbEl0NDNWMllXZHhDVll6RDM1anF4ZHVXR1cKK3RjSEdGZkdQQjNDa0ljUTJmNStoUlYydXBoVmhydEs2L2RCVjQ3cWNuWDBmZEEyTEZieUtUVS82SEd4dHFyeHUKKzFydnk4REllWUxnU1pkQXVEWER1akZ2MUR6YXBmVmc9CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWludC1jYTMuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2EzLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTcyNGIyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2EzLmNydApAQCAtMCwwICsxLDEyIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUJ0RENDQVRxZ0F3SUJBZ0lCVFRBS0JnZ3Foa2pPUFFRREFqQkxNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4S1RBbkJnTlZCQU1USUZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAKK1lYUmxJRVZESUVOQk1CNFhEVEUxTURrd01URTBNRGcwTTFvWERUSTFNRGd5T1RFME1EZzBNMW93U2pFTE1Ba0cKK0ExVUVCaE1DVlVzeEVUQVBCZ05WQkFvVENHMWlaV1FnVkV4VE1TZ3dKZ1lEVlFRREV4OXRZbVZrSUZSTVV5QlUKK1pYTjBJR2x1ZEdWeWJXVmthV0YwWlNCRFFTQXpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKKzczMmZXSExOUE1Qc1AxVTFpYlh2YjU1ZXJsRVZNbHBYQkdzaitLWXdWcVUxWENtVzlaOWhoUDdYLzVqcy9EWDkKKzJKL3V0b0h5alV0VnBRT3pkVHJic2FNUU1BNHdEQVlEVlIwVEJBVXdBd0VCL3pBS0JnZ3Foa2pPUFFRREFnTm8KK0FEQmxBakFKUnhiR1JhczNOQm1rOU1uR1dYZzdQVDF4blJFTEhSV1dJdmZMZFZRdDA2bDEveEZnM1p1UGRRZHQKK1FoN0NLODBDTVFEN3dhMW8xYThxeURLQmZMTjYzNnVLbUtHZ2EwRSt2WVhCZUZDeTlvQVJCYW5nR0NCMEIydnQKK3B6NTkwSnZHV2ZNPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2EzLmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhMy5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJjYzcxMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhMy5rZXkKQEAgLTAsMCArMSw4IEBACistLS0tLUJFR0lOIEVDIFBBUkFNRVRFUlMtLS0tLQorQmdncWhrak9QUU1CQnc9PQorLS0tLS1FTkQgRUMgUEFSQU1FVEVSUy0tLS0tCistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01IY0NBUUVFSUM5elR0OGpnakJsYnErcUNzR2o2dWNsYUtMWUJxeFlTbVVpdUJkTTFLRzlvQW9HQ0NxR1NNNDkKK0F3RUhvVVFEUWdBRTczMmZXSExOUE1Qc1AxVTFpYlh2YjU1ZXJsRVZNbHBYQkdzaitLWXdWcVUxWENtVzlaOWgKK2hQN1gvNWpzL0RYOTJKL3V0b0h5alV0VnBRT3pkVHJic1E9PQorLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvYWxsLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvYWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiMzM5NjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9hbGwuc2gKQEAgLTAsMCArMSw1MDYgQEAKKyMhL2Jpbi9zaAorCisjIGFsbC5zaAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisjCisjIENvcHlyaWdodCAoYykgMjAxNC0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyBQdXJwb3NlCisjCisjIFRvIHJ1biBhbGwgdGVzdHMgcG9zc2libGUgb3IgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybS4KKyMKKyMgV2FybmluZzogdGhlIHRlc3QgaXMgZGVzdHJ1Y3RpdmUuIEl0IGluY2x1ZGVzIHZhcmlvdXMgYnVpbGQgbW9kZXMgYW5kCisjIGNvbmZpZ3VyYXRpb25zLCBhbmQgY2FuIGFuZCB3aWxsIGFyYml0cmFyaWx5IGNoYW5nZSB0aGUgY3VycmVudCBDTWFrZQorIyBjb25maWd1cmF0aW9uLiBBZnRlciB0aGlzIHNjcmlwdCBoYXMgYmVlbiBydW4sIHRoZSBDTWFrZSBjYWNoZSB3aWxsIGJlIGxvc3QKKyMgYW5kIENNYWtlIHdpbGwgbm8gbG9uZ2VyIGJlIGluaXRpYWxpc2VkLgorIworIyBUaGUgc2NyaXB0IGFzc3VtZXMgdGhlIHByZXNlbmNlIG9mIGdjYyBhbmQgY2xhbmcgKHJlY2VudCBlbm91Z2ggZm9yIHVzaW5nCisjIEFTYW4gd2l0aCBnY2MgYW5kIE1lbVNhbiB3aXRoIGNsYW5nLCBvciB2YWxncmluZCkgYXJlIGF2YWlsYWJsZSwgYXMgd2VsbCBhcworIyBjbWFrZSBhbmQgYSAiZ29vZCIgZmluZC4KKworIyBBYm9ydCBvbiBlcnJvcnMgKGFuZCB1bmluaXRpYWxpc2VkIHZhcmlhYmxlcykKK3NldCAtZXUKKworaWYgWyAtZCBsaWJyYXJ5IC1hIC1kIGluY2x1ZGUgLWEgLWQgdGVzdHMgXTsgdGhlbiA6OyBlbHNlCisgICAgZXJyX21zZyAiTXVzdCBiZSBydW4gZnJvbSBtYmVkIFRMUyByb290IgorICAgIGV4aXQgMQorZmkKKworQ09ORklHX0g9J2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCcKK0NPTkZJR19CQUs9IiRDT05GSUdfSC5iYWsiCisKK01FTU9SWT0wCitGT1JDRT0wCitSRUxFQVNFPTAKKworIyBEZWZhdWx0IGNvbW1hbmRzLCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBlbnZpcm9ubWVudAorOiAke09QRU5TU0w6PSJvcGVuc3NsIn0KKzogJHtPUEVOU1NMX0xFR0FDWTo9IiRPUEVOU1NMIn0KKzogJHtHTlVUTFNfQ0xJOj0iZ251dGxzLWNsaSJ9Cis6ICR7R05VVExTX1NFUlY6PSJnbnV0bHMtc2VydiJ9Cis6ICR7R05VVExTX0xFR0FDWV9DTEk6PSIkR05VVExTX0NMSSJ9Cis6ICR7R05VVExTX0xFR0FDWV9TRVJWOj0iJEdOVVRMU19TRVJWIn0KKzogJHtPVVRfT0ZfU09VUkNFX0RJUjo9Li9tYmVkdGxzX291dF9vZl9zb3VyY2VfYnVpbGR9CisKK3VzYWdlKCkKK3sKKyAgICBwcmludGYgIlVzYWdlOiAkMFxuIgorICAgIHByaW50ZiAiICAtaHwtLWhlbHBcdFx0UHJpbnQgdGhpcyBoZWxwLlxuIgorICAgIHByaW50ZiAiICAtbXwtLW1lbW9yeVx0XHRBZGRpdGlvbmFsIG9wdGlvbmFsIG1lbW9yeSB0ZXN0cy5cbiIKKyAgICBwcmludGYgIiAgLWZ8LS1mb3JjZVx0XHRGb3JjZSB0aGUgdGVzdHMgdG8gb3ZlcndyaXRlIGFueSBtb2RpZmllZCBmaWxlcy5cbiIKKyAgICBwcmludGYgIiAgLXN8LS1zZWVkXHRcdEludGVnZXIgc2VlZCB2YWx1ZSB0byB1c2UgZm9yIHRoaXMgdGVzdCBydW4uXG4iCisgICAgcHJpbnRmICIgIC1yfC0tcmVsZWFzZS10ZXN0XHRcdFJ1biB0aGlzIHNjcmlwdCBpbiByZWxlYXNlIG1vZGUuIFRoaXMgZml4ZXMgdGhlIHNlZWQgdmFsdWUgdG8gMS5cbiIKKyAgICBwcmludGYgIiAgICAgLS1vdXQtb2Ytc291cmNlLWRpcj08cGF0aD5cdFx0RGlyZWN0b3J5IHVzZWQgZm9yIENNYWtlIG91dC1vZi1zb3VyY2UgYnVpbGQgdGVzdHMuIgorICAgIHByaW50ZiAiICAgICAtLW9wZW5zc2w9PE9wZW5TU0xfcGF0aD5cdFx0UGF0aCB0byBPcGVuU1NMIGV4ZWN1dGFibGUgdG8gdXNlIGZvciBtb3N0IHRlc3RzLlxuIgorICAgIHByaW50ZiAiICAgICAtLW9wZW5zc2wtbGVnYWN5PTxPcGVuU1NMX3BhdGg+XHRcdFBhdGggdG8gT3BlblNTTCBleGVjdXRhYmxlIHRvIHVzZSBmb3IgbGVnYWN5IHRlc3RzIGUuZy4gU1NMdjMuXG4iCisgICAgcHJpbnRmICIgICAgIC0tZ251dGxzLWNsaT08R251VExTX2NsaV9wYXRoPlx0XHRQYXRoIHRvIEdudVRMUyBjbGllbnQgZXhlY3V0YWJsZSB0byB1c2UgZm9yIG1vc3QgdGVzdHMuXG4iCisgICAgcHJpbnRmICIgICAgIC0tZ251dGxzLXNlcnY9PEdudVRMU19zZXJ2X3BhdGg+XHRcdFBhdGggdG8gR251VExTIHNlcnZlciBleGVjdXRhYmxlIHRvIHVzZSBmb3IgbW9zdCB0ZXN0cy5cbiIKKyAgICBwcmludGYgIiAgICAgLS1nbnV0bHMtbGVnYWN5LWNsaT08R251VExTX2NsaV9wYXRoPlx0XHRQYXRoIHRvIEdudVRMUyBjbGllbnQgZXhlY3V0YWJsZSB0byB1c2UgZm9yIGxlZ2FjeSB0ZXN0cy5cbiIKKyAgICBwcmludGYgIiAgICAgLS1nbnV0bHMtbGVnYWN5LXNlcnY9PEdudVRMU19zZXJ2X3BhdGg+XHRcdFBhdGggdG8gR251VExTIHNlcnZlciBleGVjdXRhYmxlIHRvIHVzZSBmb3IgbGVnYWN5IHRlc3RzLlxuIgorfQorCisjIHJlbW92ZSBidWlsdCBmaWxlcyBhcyB3ZWxsIGFzIHRoZSBjbWFrZSBjYWNoZS9jb25maWcKK2NsZWFudXAoKQoreworICAgIG1ha2UgY2xlYW4KKworICAgIGZpbmQgLiAtbmFtZSB5b3R0YSAtcHJ1bmUgLW8gLWluYW1lICcqY21ha2UqJyAtbm90IC1uYW1lIENNYWtlTGlzdHMudHh0IC1leGVjIHJtIC1yZiB7fSBcKworICAgIHJtIC1mIGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9tYmVkdGxzL01ha2VmaWxlIHByb2dyYW1zLyovTWFrZWZpbGUKKyAgICBnaXQgdXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZSBNYWtlZmlsZSBsaWJyYXJ5L01ha2VmaWxlIHByb2dyYW1zL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlCisgICAgZ2l0IGNoZWNrb3V0IC0tIE1ha2VmaWxlIGxpYnJhcnkvTWFrZWZpbGUgcHJvZ3JhbXMvTWFrZWZpbGUgdGVzdHMvTWFrZWZpbGUKKworICAgIGlmIFsgLWYgIiRDT05GSUdfQkFLIiBdOyB0aGVuCisgICAgICAgIG12ICIkQ09ORklHX0JBSyIgIiRDT05GSUdfSCIKKyAgICBmaQorfQorCit0cmFwIGNsZWFudXAgSU5UIFRFUk0gSFVQCisKK21zZygpCit7CisgICAgZWNobyAiIgorICAgIGVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIKKyAgICBlY2hvICIqICQxICIKKyAgICBwcmludGYgIiogIjsgZGF0ZQorICAgIGVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIKK30KKworZXJyX21zZygpCit7CisgICAgZWNobyAiJDEiID4mMgorfQorCitjaGVja190b29scygpCit7CisgICAgZm9yIFRPT0wgaW4gIiRAIjsgZG8KKyAgICAgICAgaWYgISBgaGFzaCAiJFRPT0wiID4vZGV2L251bGwgMj4mMWA7IHRoZW4KKyAgICAgICAgICAgIGVycl9tc2cgIiRUT09MIG5vdCBmb3VuZCEiCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICBkb25lCit9CisKK3doaWxlIFsgJCMgLWd0IDAgXTsgZG8KKyAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgLS1tZW1vcnl8LW0qKQorICAgICAgICAgICAgTUVNT1JZPSR7MSMtbX0KKyAgICAgICAgICAgIDs7CisgICAgICAgIC0tZm9yY2V8LWYpCisgICAgICAgICAgICBGT1JDRT0xCisgICAgICAgICAgICA7OworICAgICAgICAtLXNlZWR8LXMpCisgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgU0VFRD0iJDEiCisgICAgICAgICAgICA7OworICAgICAgICAtLXJlbGVhc2UtdGVzdHwtcikKKyAgICAgICAgICAgIFJFTEVBU0U9MQorICAgICAgICAgICAgOzsKKyAgICAgICAgLS1vdXQtb2Ytc291cmNlLWRpcikKKyAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICBPVVRfT0ZfU09VUkNFX0RJUj0iJDEiCisgICAgICAgICAgICA7OworICAgICAgICAtLW9wZW5zc2wpCisgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgT1BFTlNTTD0iJDEiCisgICAgICAgICAgICA7OworICAgICAgICAtLW9wZW5zc2wtbGVnYWN5KQorICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgIE9QRU5TU0xfTEVHQUNZPSIkMSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIC0tZ251dGxzLWNsaSkKKyAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICBHTlVUTFNfQ0xJPSIkMSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIC0tZ251dGxzLXNlcnYpCisgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgR05VVExTX1NFUlY9IiQxIgorICAgICAgICAgICAgOzsKKyAgICAgICAgLS1nbnV0bHMtbGVnYWN5LWNsaSkKKyAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICBHTlVUTFNfTEVHQUNZX0NMST0iJDEiCisgICAgICAgICAgICA7OworICAgICAgICAtLWdudXRscy1sZWdhY3ktc2VydikKKyAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICBHTlVUTFNfTEVHQUNZX1NFUlY9IiQxIgorICAgICAgICAgICAgOzsKKyAgICAgICAgLS1oZWxwfC1ofCopCisgICAgICAgICAgICB1c2FnZQorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBzaGlmdAorZG9uZQorCitpZiBbICRGT1JDRSAtZXEgMSBdOyB0aGVuCisgICAgcm0gLXJmIHlvdHRhL21vZHVsZSAiJE9VVF9PRl9TT1VSQ0VfRElSIgorICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtcSAkQ09ORklHX0gKKyAgICBjbGVhbnVwCitlbHNlCisKKyAgICBpZiBbIC1kIHlvdHRhL21vZHVsZSBdOyB0aGVuCisgICAgICAgIGVycl9tc2cgIldhcm5pbmcgLSB0aGVyZSBpcyBhbiBleGlzdGluZyB5b3R0YSBtb2R1bGUgaW4gdGhlIGRpcmVjdG9yeSAneW90dGEvbW9kdWxlJyIKKyAgICAgICAgZWNobyAiWW91IGNhbiBlaXRoZXIgZGVsZXRlIHlvdXIgd29yayBhbmQgcmV0cnksIG9yIGZvcmNlIHRoZSB0ZXN0IHRvIG92ZXJ3cml0ZSB0aGUiCisgICAgICAgIGVjaG8gInRlc3QgYnkgcmVydW5uaW5nIHRoZSBzY3JpcHQgYXM6ICQwIC0tZm9yY2UiCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiBbIC1kICIkT1VUX09GX1NPVVJDRV9ESVIiIF07IHRoZW4KKyAgICAgICAgZWNobyAiV2FybmluZyAtIHRoZXJlIGlzIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSBhdCAnJE9VVF9PRl9TT1VSQ0VfRElSJyIgPiYyCisgICAgICAgIGVjaG8gIllvdSBjYW4gZWl0aGVyIGRlbGV0ZSB0aGlzIGRpcmVjdG9yeSBtYW51YWxseSwgb3IgZm9yY2UgdGhlIHRlc3QgYnkgcmVydW5uaW5nIgorICAgICAgICBlY2hvICJ0aGUgc2NyaXB0IGFzOiAkMCAtLWZvcmNlIC0tb3V0LW9mLXNvdXJjZS1kaXIgJE9VVF9PRl9TT1VSQ0VfRElSIgorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgaWYgISBnaXQgZGlmZi1maWxlcyAtLXF1aWV0IGluY2x1ZGUvbWJlZHRscy9jb25maWcuaDsgdGhlbgorICAgICAgICBlY2hvICQ/CisgICAgICAgIGVycl9tc2cgIldhcm5pbmcgLSB0aGUgY29uZmlndXJhdGlvbiBmaWxlICdpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgnIGhhcyBiZWVuIGVkaXRlZC4gIgorICAgICAgICBlY2hvICJZb3UgY2FuIGVpdGhlciBkZWxldGUgb3IgcHJlc2VydmUgeW91ciB3b3JrLCBvciBmb3JjZSB0aGUgdGVzdCBieSByZXJ1bm5pbmcgdGhlIgorICAgICAgICBlY2hvICJzY3JpcHQgYXM6ICQwIC0tZm9yY2UiCisgICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorCitpZiBbICRSRUxFQVNFIC1lcSAxIF07IHRoZW4KKyAgICAjIEZpeCB0aGUgc2VlZCB2YWx1ZSB0byAxIHRvIGVuc3VyZSB0aGF0IHRoZSB0ZXN0cyBhcmUgZGV0ZXJtaW5pc3RpYy4KKyAgICBTRUVEPTEKK2ZpCisKK21zZyAiaW5mbzogJDAgY29uZmlndXJhdGlvbiIKK2VjaG8gIk1FTU9SWTogJE1FTU9SWSIKK2VjaG8gIkZPUkNFOiAkRk9SQ0UiCitlY2hvICJTRUVEOiAke1NFRUQtIlVOU0VUIn0iCitlY2hvICJPUEVOU1NMOiAkT1BFTlNTTCIKK2VjaG8gIk9QRU5TU0xfTEVHQUNZOiAkT1BFTlNTTF9MRUdBQ1kiCitlY2hvICJHTlVUTFNfQ0xJOiAkR05VVExTX0NMSSIKK2VjaG8gIkdOVVRMU19TRVJWOiAkR05VVExTX1NFUlYiCitlY2hvICJHTlVUTFNfTEVHQUNZX0NMSTogJEdOVVRMU19MRUdBQ1lfQ0xJIgorZWNobyAiR05VVExTX0xFR0FDWV9TRVJWOiAkR05VVExTX0xFR0FDWV9TRVJWIgorCisjIFRvIGF2b2lkIHNldHRpbmcgT3BlblNTTCBhbmQgR251VExTIGZvciBlYWNoIGNhbGwgdG8gY29tcGF0LnNoIGFuZCBzc2wtb3B0LnNoCisjIHdlIGp1c3QgZXhwb3J0IHRoZSB2YXJpYWJsZXMgdGhleSByZXF1aXJlCitleHBvcnQgT1BFTlNTTF9DTUQ9IiRPUEVOU1NMIgorZXhwb3J0IEdOVVRMU19DTEk9IiRHTlVUTFNfQ0xJIgorZXhwb3J0IEdOVVRMU19TRVJWPSIkR05VVExTX1NFUlYiCisKKyMgQXZvaWQgcGFzc2luZyAtLXNlZWQgZmxhZyBpbiBldmVyeSBjYWxsIHRvIHNzbC1vcHQuc2gKK1sgISAteiAke1NFRUQrc2V0fSBdICYmIGV4cG9ydCBTRUVECisKKyMgTWFrZSBzdXJlIHRoZSB0b29scyB3ZSBuZWVkIGFyZSBhdmFpbGFibGUuCitjaGVja190b29scyAiJE9QRU5TU0wiICIkT1BFTlNTTF9MRUdBQ1kiICIkR05VVExTX0NMSSIgIiRHTlVUTFNfU0VSViIgXAorICAgICIkR05VVExTX0xFR0FDWV9DTEkiICIkR05VVExTX0xFR0FDWV9TRVJWIiAiZG94eWdlbiIgImRvdCIgXAorICAgICJhcm0tbm9uZS1lYWJpLWdjYyIgImFybWNjIgorCisjCisjIFRlc3QgU3VpdGVzIHRvIGJlIGV4ZWN1dGVkCisjCisjIFRoZSB0ZXN0IG9yZGVyaW5nIHRyaWVzIHRvIG9wdGltaXplIGZvciB0aGUgZm9sbG93aW5nIGNyaXRlcmlhOgorIyAxLiBDYXRjaCBwb3NzaWJsZSBwcm9ibGVtcyBlYXJseSwgYnkgcnVubmluZyBmaXJzdCB0ZXN0cyB0aGF0IHJ1biBxdWlja2x5CisjICAgIGFuZC9vciBhcmUgbW9yZSBsaWtlbHkgdG8gZmFpbCB0aGFuIG90aGVycyAoZWcgSSB1c2UgQ2xhbmcgbW9zdCBvZiB0aGUKKyMgICAgdGltZSwgc28gc3RhcnQgd2l0aCBhIEdDQyBidWlsZCkuCisjIDIuIE1pbmltaXplIHRvdGFsIHJ1bm5pbmcgdGltZSwgYnkgYXZvaWRpbmcgdXNlbGVzcyByZWJ1aWxkcworIworIyBJbmRpY2F0aXZlIHJ1bm5pbmcgdGltZXMgYXJlIGdpdmVuIGZvciByZWZlcmVuY2UuCisKK21zZyAiaW5mbzogb3V0cHV0X2Vudi5zaCIKK09QRU5TU0w9IiRPUEVOU1NMIiBPUEVOU1NMX0xFR0FDWT0iJE9QRU5TU0xfTEVHQUNZIiBHTlVUTFNfQ0xJPSIkR05VVExTX0NMSSIgXAorICAgIEdOVVRMU19TRVJWPSIkR05VVExTX1NFUlYiIEdOVVRMU19MRUdBQ1lfQ0xJPSIkR05VVExTX0xFR0FDWV9DTEkiIFwKKyAgICBHTlVUTFNfTEVHQUNZX1NFUlY9IiRHTlVUTFNfTEVHQUNZX1NFUlYiIHNjcmlwdHMvb3V0cHV0X2Vudi5zaAorCittc2cgInRlc3Q6IHJlY3Vyc2lvbi5wbCIgIyA8IDFzCit0ZXN0cy9zY3JpcHRzL3JlY3Vyc2lvbi5wbCBsaWJyYXJ5LyouYworCittc2cgInRlc3Q6IGZyZXNobmVzcyBvZiBnZW5lcmF0ZWQgc291cmNlIGZpbGVzIiAjIDwgMXMKK3Rlc3RzL3NjcmlwdHMvY2hlY2stZ2VuZXJhdGVkLWZpbGVzLnNoCisKK21zZyAidGVzdDogZG94eWdlbiBtYXJrdXAgb3V0c2lkZSBkb3h5Z2VuIGJsb2NrcyIgIyA8IDFzCit0ZXN0cy9zY3JpcHRzL2NoZWNrLWRveHktYmxvY2tzLnBsCisKK21zZyAidGVzdC9idWlsZDogZGVjbGFyZWQgYW5kIGV4cG9ydGVkIG5hbWVzIiAjIDwgM3MKK2NsZWFudXAKK3Rlc3RzL3NjcmlwdHMvY2hlY2stbmFtZXMuc2gKKworbXNnICJ0ZXN0OiBkb3h5Z2VuIHdhcm5pbmdzIiAjIH4gM3MKK2NsZWFudXAKK3Rlc3RzL3NjcmlwdHMvZG94eWdlbi5zaAorCittc2cgImJ1aWxkOiBjcmVhdGUgYW5kIGJ1aWxkIHlvdHRhIG1vZHVsZSIgIyB+IDMwcworY2xlYW51cAordGVzdHMvc2NyaXB0cy95b3R0YS1idWlsZC5zaAorCittc2cgImJ1aWxkOiBjbWFrZSwgZ2NjLCBBU2FuIiAjIH4gMSBtaW4gNTBzCitjbGVhbnVwCitDQz1nY2MgY21ha2UgLUQgQ01BS0VfQlVJTERfVFlQRTpTdHJpbmc9QXNhbiAuCittYWtlCisKK21zZyAidGVzdDogbWFpbiBzdWl0ZXMgKGluYy4gc2VsZnRlc3RzKSAoQVNhbiBidWlsZCkiICMgfiA1MHMKK21ha2UgdGVzdAorCittc2cgInRlc3Q6IHNzbC1vcHQuc2ggKEFTYW4gYnVpbGQpIiAjIH4gMSBtaW4KK3Rlc3RzL3NzbC1vcHQuc2gKKworbXNnICJ0ZXN0L2J1aWxkOiByZWYtY29uZmlncyAoQVNhbiBidWlsZCkiICMgfiA2IG1pbiAyMHMKK3Rlc3RzL3NjcmlwdHMvdGVzdC1yZWYtY29uZmlncy5wbAorCittc2cgImJ1aWxkOiB3aXRoIEFTYW4gKHJlYnVpbGQgYWZ0ZXIgcmVmLWNvbmZpZ3MpIiAjIH4gMSBtaW4KK21ha2UKKworbXNnICJ0ZXN0OiBjb21wYXQuc2ggKEFTYW4gYnVpbGQpIiAjIH4gNiBtaW4KK3Rlc3RzL2NvbXBhdC5zaAorCittc2cgImJ1aWxkOiBEZWZhdWx0ICsgU1NMdjMgKEFTYW4gYnVpbGQpIiAjIH4gNiBtaW4KK2NsZWFudXAKK2NwICIkQ09ORklHX0giICIkQ09ORklHX0JBSyIKK3NjcmlwdHMvY29uZmlnLnBsIHNldCBNQkVEVExTX1NTTF9QUk9UT19TU0wzCitDQz1nY2MgY21ha2UgLUQgQ01BS0VfQlVJTERfVFlQRTpTdHJpbmc9QXNhbiAuCittYWtlCisKK21zZyAidGVzdDogU1NMdjMgLSBtYWluIHN1aXRlcyAoaW5jLiBzZWxmdGVzdHMpIChBU2FuIGJ1aWxkKSIgIyB+IDUwcworbWFrZSB0ZXN0CisKK21zZyAiYnVpbGQ6IFNTTHYzIC0gY29tcGF0LnNoIChBU2FuIGJ1aWxkKSIgIyB+IDYgbWluCit0ZXN0cy9jb21wYXQuc2ggLW0gJ3RsczEgdGxzMV8xIHRsczFfMiBkdGxzMSBkdGxzMV8yJworT1BFTlNTTF9DTUQ9IiRPUEVOU1NMX0xFR0FDWSIgdGVzdHMvY29tcGF0LnNoIC1tICdzc2wzJworCittc2cgImJ1aWxkOiBTU0x2MyAtIHNzbC1vcHQuc2ggKEFTYW4gYnVpbGQpIiAjIH4gNiBtaW4KK3Rlc3RzL3NzbC1vcHQuc2gKKworbXNnICJidWlsZDogY21ha2UsIGZ1bGwgY29uZmlnLCBjbGFuZyIgIyB+IDUwcworY2xlYW51cAorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgZnVsbAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFICMgdG9vIHNsb3cgZm9yIHRlc3RzCitDQz1jbGFuZyBjbWFrZSAtRCBDTUFLRV9CVUlMRF9UWVBFOlN0cmluZz1DaGVjayAuCittYWtlCisKK21zZyAidGVzdDogbWFpbiBzdWl0ZXMgKGZ1bGwgY29uZmlnKSIgIyB+IDVzCittYWtlIHRlc3QKKworbXNnICJ0ZXN0OiBzc2wtb3B0LnNoIGRlZmF1bHQgKGZ1bGwgY29uZmlnKSIgIyB+IDFzCit0ZXN0cy9zc2wtb3B0LnNoIC1mIERlZmF1bHQKKworbXNnICJ0ZXN0OiBjb21wYXQuc2ggUkM0LCBERVMgJiBOVUxMIChmdWxsIGNvbmZpZykiICMgfiAyIG1pbgorT1BFTlNTTF9DTUQ9IiRPUEVOU1NMX0xFR0FDWSIgR05VVExTX0NMST0iJEdOVVRMU19MRUdBQ1lfQ0xJIiBHTlVUTFNfU0VSVj0iJEdOVVRMU19MRUdBQ1lfU0VSViIgdGVzdHMvY29tcGF0LnNoIC1lICczREVTXHxERVMtQ0JDMycgLWYgJ05VTExcfERFU1x8UkM0XHxBUkNGT1VSJworCittc2cgInRlc3QvYnVpbGQ6IGN1cnZlcy5wbCAoZ2NjKSIgIyB+IDQgbWluCitjbGVhbnVwCitjbWFrZSAtRCBDTUFLRV9CVUlMRF9UWVBFOlN0cmluZz1EZWJ1ZyAuCit0ZXN0cy9zY3JpcHRzL2N1cnZlcy5wbAorCittc2cgInRlc3QvYnVpbGQ6IGtleS1leGNoYW5nZXMgKGdjYykiICMgfiAxIG1pbgorY2xlYW51cAorY21ha2UgLUQgQ01BS0VfQlVJTERfVFlQRTpTdHJpbmc9Q2hlY2sgLgordGVzdHMvc2NyaXB0cy9rZXktZXhjaGFuZ2VzLnBsCisKK21zZyAiYnVpbGQ6IFVuaXggbWFrZSwgLU9zIChnY2MpIiAjIH4gMzBzCitjbGVhbnVwCitDQz1nY2MgQ0ZMQUdTPSctV2Vycm9yIC1PcycgbWFrZQorCisjIHRoaXMgaXMgbWVhbnQgdG8gY2F0aCBtaXNzaW5nICNkZWZpbmUgbWJlZHRsc19wcmludGYgZXRjCisjIGRpc2FibGUgZnNpbyB0byBjYXRjaCBzb21lIG1vcmUgbWlzc2luZyAjaW5jbHVkZSA8c3RkaW8uaD4KK21zZyAiYnVpbGQ6IGZ1bGwgY29uZmlnIGV4Y2VwdCBwbGF0Zm9ybS9mc2lvLCBtYWtlLCBnY2MiICMgfiAzMHMKK2NsZWFudXAKK2NwICIkQ09ORklHX0giICIkQ09ORklHX0JBSyIKK3NjcmlwdHMvY29uZmlnLnBsIGZ1bGwKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfUExBVEZPUk1fQworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19QTEFURk9STV9NRU1PUlkKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX0FMVAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX0FMVAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfRU5UUk9QWV9OVl9TRUVECitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19GU19JTworQ0M9Z2NjIENGTEFHUz0nLVdlcnJvciAtTzAnIG1ha2UKKworIyBjYXRjaCBjb21waWxlIGJ1Z3MgaW4gX3VuaW5pdCBmdW5jdGlvbnMKK21zZyAiYnVpbGQ6IGZ1bGwgY29uZmlnIHdpdGggTk9fU1REX0ZVTkNUSU9OLCBtYWtlLCBnY2MiICMgfiAzMHMKK2NsZWFudXAKK2NwICIkQ09ORklHX0giICIkQ09ORklHX0JBSyIKK3NjcmlwdHMvY29uZmlnLnBsIGZ1bGwKK3NjcmlwdHMvY29uZmlnLnBsIHNldCBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfRU5UUk9QWV9OVl9TRUVECitDQz1nY2MgQ0ZMQUdTPSctV2Vycm9yIC1PMCcgbWFrZQorCittc2cgImJ1aWxkOiBmdWxsIGNvbmZpZyBleGNlcHQgc3NsX3Nydi5jLCBtYWtlLCBnY2MiICMgfiAzMHMKK2NsZWFudXAKK2NwICIkQ09ORklHX0giICIkQ09ORklHX0JBSyIKK3NjcmlwdHMvY29uZmlnLnBsIGZ1bGwKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfU1NMX1NSVl9DCitDQz1nY2MgQ0ZMQUdTPSctV2Vycm9yIC1PMCcgbWFrZQorCittc2cgImJ1aWxkOiBmdWxsIGNvbmZpZyBleGNlcHQgc3NsX2NsaS5jLCBtYWtlLCBnY2MiICMgfiAzMHMKK2NsZWFudXAKK2NwICIkQ09ORklHX0giICIkQ09ORklHX0JBSyIKK3NjcmlwdHMvY29uZmlnLnBsIGZ1bGwKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfU1NMX0NMSV9DCitDQz1nY2MgQ0ZMQUdTPSctV2Vycm9yIC1PMCcgbWFrZQorCittc2cgImJ1aWxkOiBmdWxsIGNvbmZpZyBleGNlcHQgbmV0X3NvY2tldHMuYywgbWFrZSwgZ2NjIC1zdGQ9Yzk5IC1wZWRhbnRpYyIgIyB+IDMwcworY2xlYW51cAorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgZnVsbAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19ORVRfQyAjIGdldGFkZHJpbmZvKCkgdW5kZWNsYXJlZCwgZXRjLgorc2NyaXB0cy9jb25maWcucGwgc2V0IE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWSAjIHVzZXMgc3lzY2FsbCgpIG9uIEdOVS9MaW51eAorQ0M9Z2NjIENGTEFHUz0nLVdlcnJvciAtTzAgLXN0ZD1jOTkgLXBlZGFudGljJyBtYWtlIGxpYgorCittc2cgImJ1aWxkOiBkZWZhdWx0IGNvbmZpZyB3aXRoICBNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZIChBU2FuIGJ1aWxkKSIKK2NsZWFudXAKK2NwICIkQ09ORklHX0giICIkQ09ORklHX0JBSyIKK3NjcmlwdHMvY29uZmlnLnBsIHNldCBNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZCitzY3JpcHRzL2NvbmZpZy5wbCBzZXQgTUJFRFRMU19OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUworc2NyaXB0cy9jb25maWcucGwgc2V0IE1CRURUTFNfRU5UUk9QWV9DCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0VOVFJPUFlfTlZfU0VFRAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19IQVZFR0VfQworQ0M9Z2NjIGNtYWtlICAtRCBVTlNBRkVfQlVJTEQ9T04gLUQgQ01BS0VfQ19GTEFHUzpTdHJpbmc9Ii1mc2FuaXRpemU9YWRkcmVzcyAtZm5vLWNvbW1vbiAtTzMiIC4KK21ha2UKKworbXNnICJ0ZXN0OiBNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZIC0gbWFpbiBzdWl0ZXMgKGluYy4gc2VsZnRlc3RzKSAoQVNhbiBidWlsZCkiCittYWtlIHRlc3QKKworaWYgdW5hbWUgLWEgfCBncmVwIC1GIExpbnV4ID4vZGV2L251bGw7IHRoZW4KK21zZyAiYnVpbGQvdGVzdDogbWFrZSBzaGFyZWQiICMgfiA0MHMKK2NsZWFudXAKK21ha2UgU0hBUkVEPTEgYWxsIGNoZWNrCitmaQorCitpZiB1bmFtZSAtYSB8IGdyZXAgLUYgeDg2XzY0ID4vZGV2L251bGw7IHRoZW4KK21zZyAiYnVpbGQ6IGkzODYsIG1ha2UsIGdjYyIgIyB+IDMwcworY2xlYW51cAorQ0M9Z2NjIENGTEFHUz0nLVdlcnJvciAtbTMyJyBtYWtlCitmaSAjIHg4Nl82NAorCittc2cgImJ1aWxkOiBhcm0tbm9uZS1lYWJpLWdjYywgbWFrZSIgIyB+IDEwcworY2xlYW51cAorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgZnVsbAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19ORVRfQworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19USU1JTkdfQworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19GU19JTworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19FTlRST1BZX05WX1NFRUQKK3NjcmlwdHMvY29uZmlnLnBsIHNldCBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkKKyMgZm9sbG93aW5nIHRoaW5ncyBhcmUgbm90IGluIHRoZSBkZWZhdWx0IGNvbmZpZworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19IQVZFR0VfQyAjIGRlcGVuZHMgb24gdGltaW5nLmMKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfVEhSRUFESU5HX0MKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRSAjIGV4ZWNpbmZvLmgKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DICMgY2FsbHMgZXhpdAorQ0M9YXJtLW5vbmUtZWFiaS1nY2MgQVI9YXJtLW5vbmUtZWFiaS1hciBMRD1hcm0tbm9uZS1lYWJpLWxkIENGTEFHUz0tV2Vycm9yIG1ha2UgbGliCisKK21zZyAiYnVpbGQ6IGFybWNjLCBtYWtlIgorY2xlYW51cAorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgZnVsbAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19ORVRfQworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19USU1JTkdfQworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19GU19JTworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19FTlRST1BZX05WX1NFRUQKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfSEFWRV9USU1FCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0hBVkVfVElNRV9EQVRFCitzY3JpcHRzL2NvbmZpZy5wbCBzZXQgTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZCisjIGZvbGxvd2luZyB0aGluZ3MgYXJlIG5vdCBpbiB0aGUgZGVmYXVsdCBjb25maWcKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0hBVkVHRV9DICMgZGVwZW5kcyBvbiB0aW1pbmcuYworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19USFJFQURJTkdfQworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFICMgZXhlY2luZm8uaAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MgIyBjYWxscyBleGl0CitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUICMgZGVwZW5kcyBvbiBNQkVEVExTX0hBVkVfVElNRQorQ0M9YXJtY2MgQVI9YXJtYXIgV0FSTklOR19DRkxBR1M9IG1ha2UgbGliCisKK2lmIHdoaWNoIGk2ODYtdzY0LW1pbmd3MzItZ2NjID4vZGV2L251bGw7IHRoZW4KK21zZyAiYnVpbGQ6IGNyb3NzLW1pbmd3NjQsIG1ha2UiICMgfiAzMHMKK2NsZWFudXAKK0NDPWk2ODYtdzY0LW1pbmd3MzItZ2NjIEFSPWk2ODYtdzY0LW1pbmd3MzItYXIgTEQ9aTY4Ni13NjQtbWluZ2d3MzItbGQgQ0ZMQUdTPS1XZXJyb3IgV0lORE9XU19CVUlMRD0xIG1ha2UKK1dJTkRPV1NfQlVJTEQ9MSBtYWtlIGNsZWFuCitDQz1pNjg2LXc2NC1taW5ndzMyLWdjYyBBUj1pNjg2LXc2NC1taW5ndzMyLWFyIExEPWk2ODYtdzY0LW1pbmdndzMyLWxkIENGTEFHUz0tV2Vycm9yIFdJTkRPV1NfQlVJTEQ9MSBTSEFSRUQ9MSBtYWtlCitXSU5ET1dTX0JVSUxEPTEgbWFrZSBjbGVhbgorZmkKKworIyBNZW1TYW4gY3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIExpbnV4IDY0IGJpdHMKK2lmIHVuYW1lIC1hIHwgZ3JlcCAnTGludXguKng4Nl82NCcgPi9kZXYvbnVsbDsgdGhlbgorCittc2cgImJ1aWxkOiBNU2FuIChjbGFuZykiICMgfiAxIG1pbiAyMHMKK2NsZWFudXAKK2NwICIkQ09ORklHX0giICIkQ09ORklHX0JBSyIKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfQUVTTklfQyAjIG1lbXNhbiBkb2Vzbid0IGdyb2sgYXNtCitDQz1jbGFuZyBjbWFrZSAtRCBDTUFLRV9CVUlMRF9UWVBFOlN0cmluZz1NZW1TYW4gLgorbWFrZQorCittc2cgInRlc3Q6IG1haW4gc3VpdGVzIChNU2FuKSIgIyB+IDEwcworbWFrZSB0ZXN0CisKK21zZyAidGVzdDogc3NsLW9wdC5zaCAoTVNhbikiICMgfiAxIG1pbgordGVzdHMvc3NsLW9wdC5zaAorCisjIE9wdGlvbmFsIHBhcnQocykKKworaWYgWyAiJE1FTU9SWSIgLWd0IDAgXTsgdGhlbgorICAgIG1zZyAidGVzdDogY29tcGF0LnNoIChNU2FuKSIgIyB+IDYgbWluIDIwcworICAgIHRlc3RzL2NvbXBhdC5zaAorZmkKKworZWxzZSAjIG5vIE1lbVNhbgorCittc2cgImJ1aWxkOiBSZWxlYXNlIChjbGFuZykiCitjbGVhbnVwCitDQz1jbGFuZyBjbWFrZSAtRCBDTUFLRV9CVUlMRF9UWVBFOlN0cmluZz1SZWxlYXNlIC4KK21ha2UKKworbXNnICJ0ZXN0OiBtYWluIHN1aXRlcyB2YWxncmluZCAoUmVsZWFzZSkiCittYWtlIG1lbWNoZWNrCisKKyMgT3B0aW9uYWwgcGFydChzKQorIyBDdXJyZW50bHkgYnJva2VuLCBwcm9ncmFtcyBkb24ndCBzZWVtIHRvIHJlY2VpdmUgc2lnbmFscworIyB1bmRlciB2YWxncmluZCBvbiBPUyBYCisKK2lmIFsgIiRNRU1PUlkiIC1ndCAwIF07IHRoZW4KKyAgICBtc2cgInRlc3Q6IHNzbC1vcHQuc2ggLS1tZW1jaGVjayAoUmVsZWFzZSkiCisgICAgdGVzdHMvc3NsLW9wdC5zaCAtLW1lbWNoZWNrCitmaQorCitpZiBbICIkTUVNT1JZIiAtZ3QgMSBdOyB0aGVuCisgICAgbXNnICJ0ZXN0OiBjb21wYXQuc2ggLS1tZW1jaGVjayAoUmVsZWFzZSkiCisgICAgdGVzdHMvY29tcGF0LnNoIC0tbWVtY2hlY2sKK2ZpCisKK2ZpICMgTWVtU2FuCisKK21zZyAiYnVpbGQ6IGNtYWtlICdvdXQtb2Ytc291cmNlJyBidWlsZCIKK2NsZWFudXAKK01CRURUTFNfUk9PVF9ESVI9IiRQV0QiCitta2RpciAiJE9VVF9PRl9TT1VSQ0VfRElSIgorY2QgIiRPVVRfT0ZfU09VUkNFX0RJUiIKK2NtYWtlICIkTUJFRFRMU19ST09UX0RJUiIKK21ha2UKKworbXNnICJ0ZXN0OiBjbWFrZSAnb3V0LW9mLXNvdXJjZScgYnVpbGQiCittYWtlIHRlc3QKK2NkICIkTUJFRFRMU19ST09UX0RJUiIKK3JtIC1yZiAiJE9VVF9PRl9TT1VSQ0VfRElSIgorCittc2cgIkRvbmUsIGNsZWFuaW5nIHVwIgorY2xlYW51cAorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9iYXNpYy1idWlsZC10ZXN0LnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvYmFzaWMtYnVpbGQtdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNDA1ODcxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvYmFzaWMtYnVpbGQtdGVzdC5zaApAQCAtMCwwICsxLDIxOSBAQAorIyEvYmluL3NoCisKKyMgYmFzaWMtYnVpbGQtdGVzdHMuc2gKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjIFB1cnBvc2UKKyMKKyMgRXhlY3V0ZXMgdGhlIGJhc2ljIHRlc3Qgc3VpdGVzLCBjYXB0dXJlcyB0aGUgcmVzdWx0cywgYW5kIGdlbmVyYXRlcyBhIHNpbXBsZQorIyB0ZXN0IHJlcG9ydCBhbmQgY29kZSBjb3ZlcmFnZSByZXBvcnQuCisjCisjIFRoZSB0ZXN0cyBpbmNsdWRlOgorIyAgICogVW5pdCB0ZXN0cyAgICAgICAgICAgICAgICAtIGV4ZWN1dGVkIHVzaW5nIHRlc3RzL3NjcmlwdHMvcnVuLXRlc3Qtc3VpdGUucGwKKyMgICAqIFNlbGYtdGVzdHMgICAgICAgICAgICAgICAgLSBleGVjdXRlZCB1c2luZyB0aGUgdGVzdCBzdWl0ZXMgYWJvdmUKKyMgICAqIFN5c3RlbSB0ZXN0cyAgICAgICAgICAgICAgLSBleGVjdXRlZCB1c2luZyB0ZXN0cy9zc2wtb3B0LnNoCisjICAgKiBJbnRlcm9wZXJhYmlsaXR5IHRlc3RzICAgIC0gZXhlY3V0ZWQgdXNpbmcgdGVzdHMvY29tcGF0LnNoCisjCisjIFRoZSB0ZXN0cyBmb2N1cyBvbiBmdW5jdGlvbmFsaXR5IGFuZCBkbyBub3QgY29uc2lkZXIgcGVyZm9ybWFuY2UuCisjCisjIE5vdGUgdGhlIHRlc3RzIHNlbGYtYWRhcHQgZHVlIHRvIGNvbmZpZ3VyYXRpb25zIGluIGluY2x1ZGUvbWJlZHRscy9jb25maWcuaAorIyB3aGljaCBjYW4gbGVhZCB0byBzb21lIHRlc3RzIGJlaW5nIHNraXBwZWQsIGFuZCBjYW4gY2F1c2UgdGhlIG51bWJlciBvZgorIyBhdmFpbGFibGUgdGVzdHMgdG8gZmx1Y3R1YXRlLgorIworIyBUaGlzIHNjcmlwdCBoYXMgYmVlbiB3cml0dGVuIHRvIGJlIGdlbmVyaWMgYW5kIHNob3VsZCB3b3JrIG9uIGFueSBzaGVsbC4KKyMKKyMgVXNhZ2U6IGJhc2ljLWJ1aWxkLXRlc3RzLnNoCisjCisKKyMgQWJvcnQgb24gZXJyb3JzIChhbmQgdW5pbml0aWxpYXNlZCB2YXJpYWJsZXMpCitzZXQgLWV1CisKK2lmIFsgLWQgbGlicmFyeSAtYSAtZCBpbmNsdWRlIC1hIC1kIHRlc3RzIF07IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gIk11c3QgYmUgcnVuIGZyb20gbWJlZCBUTFMgcm9vdCIgPiYyCisgICAgZXhpdCAxCitmaQorCis6ICR7T1BFTlNTTDo9Im9wZW5zc2wifQorOiAke09QRU5TU0xfTEVHQUNZOj0iJE9QRU5TU0wifQorOiAke0dOVVRMU19DTEk6PSJnbnV0bHMtY2xpIn0KKzogJHtHTlVUTFNfU0VSVjo9ImdudXRscy1zZXJ2In0KKzogJHtHTlVUTFNfTEVHQUNZX0NMSTo9IiRHTlVUTFNfQ0xJIn0KKzogJHtHTlVUTFNfTEVHQUNZX1NFUlY6PSIkR05VVExTX1NFUlYifQorCisjIFRvIGF2b2lkIHNldHRpbmcgT3BlblNTTCBhbmQgR251VExTIGZvciBlYWNoIGNhbGwgdG8gY29tcGF0LnNoIGFuZCBzc2wtb3B0LnNoCisjIHdlIGp1c3QgZXhwb3J0IHRoZSB2YXJpYWJsZXMgdGhleSByZXF1aXJlCitleHBvcnQgT1BFTlNTTF9DTUQ9IiRPUEVOU1NMIgorZXhwb3J0IEdOVVRMU19DTEk9IiRHTlVUTFNfQ0xJIgorZXhwb3J0IEdOVVRMU19TRVJWPSIkR05VVExTX1NFUlYiCisKK0NPTkZJR19IPSdpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgnCitDT05GSUdfQkFLPSIkQ09ORklHX0guYmFrIgorCisjIFN0ZXAgMCAtIHByaW50IGJ1aWxkIGVudmlyb25tZW50IGluZm8KK09QRU5TU0w9IiRPUEVOU1NMIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBPUEVOU1NMX0xFR0FDWT0iJE9QRU5TU0xfTEVHQUNZIiAgICAgICAgIFwKKyAgICBHTlVUTFNfQ0xJPSIkR05VVExTX0NMSSIgICAgICAgICAgICAgICAgIFwKKyAgICBHTlVUTFNfU0VSVj0iJEdOVVRMU19TRVJWIiAgICAgICAgICAgICAgIFwKKyAgICBHTlVUTFNfTEVHQUNZX0NMST0iJEdOVVRMU19MRUdBQ1lfQ0xJIiAgIFwKKyAgICBHTlVUTFNfTEVHQUNZX1NFUlY9IiRHTlVUTFNfTEVHQUNZX1NFUlYiIFwKKyAgICBzY3JpcHRzL291dHB1dF9lbnYuc2gKK2VjaG8KKworIyBTdGVwIDEgLSBNYWtlIGFuZCBpbnN0cnVtZW50ZWQgYnVpbGQgZm9yIGNvZGUgY292ZXJhZ2UKK2V4cG9ydCBDRkxBR1M9JyAtLWNvdmVyYWdlIC1nMyAtTzAgJworbWFrZSBjbGVhbgorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgZnVsbAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFCittYWtlIC1qCisKKworIyBTdGVwIDIgLSBFeGVjdXRlIHRoZSB0ZXN0cworVEVTVF9PVVRQVVQ9b3V0XyR7UFBJRH0KK2NkIHRlc3RzCisKKyMgU3RlcCAyYSAtIFVuaXQgVGVzdHMKK3Blcmwgc2NyaXB0cy9ydW4tdGVzdC1zdWl0ZXMucGwgLXYgfHRlZSB1bml0LXRlc3QtJFRFU1RfT1VUUFVUCitlY2hvCisKKyMgU3RlcCAyYiAtIFN5c3RlbSBUZXN0cworc2ggc3NsLW9wdC5zaCB8dGVlIHN5cy10ZXN0LSRURVNUX09VVFBVVAorZWNobworCisjIFN0ZXAgMmMgLSBDb21wYXRpYmlsaXR5IHRlc3RzCitzaCBjb21wYXQuc2ggLW0gJ3RsczEgdGxzMV8xIHRsczFfMiBkdGxzMSBkdGxzMV8yJyB8IFwKKyAgICB0ZWUgY29tcGF0LXRlc3QtJFRFU1RfT1VUUFVUCitPUEVOU1NMX0NNRD0iJE9QRU5TU0xfTEVHQUNZIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc2ggY29tcGF0LnNoIC1tICdzc2wzJyB8dGVlIC1hIGNvbXBhdC10ZXN0LSRURVNUX09VVFBVVAorT1BFTlNTTF9DTUQ9IiRPUEVOU1NMX0xFR0FDWSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgR05VVExTX0NMST0iJEdOVVRMU19MRUdBQ1lfQ0xJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBHTlVUTFNfU0VSVj0iJEdOVVRMU19MRUdBQ1lfU0VSViIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNoIGNvbXBhdC5zaCAtZSAnM0RFU1x8REVTLUNCQzMnIC1mICdOVUxMXHxERVNcfFJDNFx8QVJDRk9VUicgfCBcCisgICAgdGVlIC1hIGNvbXBhdC10ZXN0LSRURVNUX09VVFBVVAorZWNobworCisjIFN0ZXAgMyAtIFByb2Nlc3MgdGhlIGNvdmVyYWdlIHJlcG9ydAorY2QgLi4KK21ha2UgbGNvdiB8dGVlIHRlc3RzL2Nvdi0kVEVTVF9PVVRQVVQKKworCisjIFN0ZXAgNCAtIFN1bW1hcmlzZSB0aGUgdGVzdCByZXBvcnQKK2VjaG8KK2VjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCitlY2hvICJUZXN0IFJlcG9ydCBTdW1tYXJ5IgorZWNobworCitjZCB0ZXN0cworCisjIFN0ZXAgNGEgLSBVbml0IHRlc3RzCitlY2hvICJVbml0IHRlc3RzIC0gdGVzdHMvc2NyaXB0cy9ydW4tdGVzdC1zdWl0ZXMucGwiCisKK1BBU1NFRF9URVNUUz0kKHRhaWwgLW42IHVuaXQtdGVzdC0kVEVTVF9PVVRQVVR8c2VkIC1uIC1lICdzL3Rlc3QgY2FzZXMgcGFzc2VkIDpbXHRdKlwoWzAtOV0qXCkvXDEvcCd8IHRyIC1kICcgJykKK1NLSVBQRURfVEVTVFM9JCh0YWlsIC1uNiB1bml0LXRlc3QtJFRFU1RfT1VUUFVUfHNlZCAtbiAtZSAncy9za2lwcGVkIDpbIFx0XSpcKFswLTldKlwpL1wxL3AnfCB0ciAtZCAnICcpCitUT1RBTF9TVUlURVM9JCh0YWlsIC1uNiB1bml0LXRlc3QtJFRFU1RfT1VUUFVUfHNlZCAtbiAtZSAncy8uKiAoXChbMC05XSpcKSAuKiwgWzAtOV0qIHRlc3RzIHJ1bikvXDEvcCd8IHRyIC1kICcgJykKK0ZBSUxFRF9URVNUUz0kKHRhaWwgLW42IHVuaXQtdGVzdC0kVEVTVF9PVVRQVVR8c2VkIC1uIC1lICdzL2ZhaWxlZCA6W1x0XSpcKFswLTldKlwpL1wxL3AnIHx0ciAtZCAnICcpCisKK2VjaG8gIk5vIHRlc3Qgc3VpdGVzICAgICA6ICRUT1RBTF9TVUlURVMiCitlY2hvICJQYXNzZWQgICAgICAgICAgICAgOiAkUEFTU0VEX1RFU1RTIgorZWNobyAiRmFpbGVkICAgICAgICAgICAgIDogJEZBSUxFRF9URVNUUyIKK2VjaG8gIlNraXBwZWQgICAgICAgICAgICA6ICRTS0lQUEVEX1RFU1RTIgorZWNobyAiVG90YWwgZXhlYydkIHRlc3RzIDogJCgoJFBBU1NFRF9URVNUUyArICRGQUlMRURfVEVTVFMpKSIKK2VjaG8gIlRvdGFsIGF2YWlsIHRlc3RzICA6ICQoKCRQQVNTRURfVEVTVFMgKyAkRkFJTEVEX1RFU1RTICsgJFNLSVBQRURfVEVTVFMpKSIKK2VjaG8KKworVE9UQUxfUEFTUz0kUEFTU0VEX1RFU1RTCitUT1RBTF9GQUlMPSRGQUlMRURfVEVTVFMKK1RPVEFMX1NLSVA9JFNLSVBQRURfVEVTVFMKK1RPVEFMX0FWQUlMPSQoKCRQQVNTRURfVEVTVFMgKyAkRkFJTEVEX1RFU1RTICsgJFNLSVBQRURfVEVTVFMpKQorVE9UQUxfRVhFRD0kKCgkUEFTU0VEX1RFU1RTICsgJEZBSUxFRF9URVNUUykpCisKKyMgU3RlcCA0YiAtIFRMUyBPcHRpb25zIHRlc3RzCitlY2hvICJUTFMgT3B0aW9ucyB0ZXN0cyAtIHRlc3RzL3NzbC1vcHQuc2giCisKK1BBU1NFRF9URVNUUz0kKHRhaWwgLW41IHN5cy10ZXN0LSRURVNUX09VVFBVVHxzZWQgLW4gLWUgJ3MvLiogKFwoWzAtOV0qXCkgXC8gWzAtOV0qIHRlc3RzIChbMC05XSogc2tpcHBlZCkpJC9cMS9wJykKK1NLSVBQRURfVEVTVFM9JCh0YWlsIC1uNSBzeXMtdGVzdC0kVEVTVF9PVVRQVVR8c2VkIC1uIC1lICdzLy4qIChbMC05XSogXC8gWzAtOV0qIHRlc3RzIChcKFswLTldKlwpIHNraXBwZWQpKSQvXDEvcCcpCitUT1RBTF9URVNUUz0kKHRhaWwgLW41IHN5cy10ZXN0LSRURVNUX09VVFBVVHxzZWQgLW4gLWUgJ3MvLiogKFswLTldKiBcLyBcKFswLTldKlwpIHRlc3RzIChbMC05XSogc2tpcHBlZCkpJC9cMS9wJykKK0ZBSUxFRF9URVNUUz0kKCgkVE9UQUxfVEVTVFMgLSAkUEFTU0VEX1RFU1RTKSkKKworZWNobyAiUGFzc2VkICAgICAgICAgICAgIDogJFBBU1NFRF9URVNUUyIKK2VjaG8gIkZhaWxlZCAgICAgICAgICAgICA6ICRGQUlMRURfVEVTVFMiCitlY2hvICJTa2lwcGVkICAgICAgICAgICAgOiAkU0tJUFBFRF9URVNUUyIKK2VjaG8gIlRvdGFsIGV4ZWMnZCB0ZXN0cyA6ICRUT1RBTF9URVNUUyIKK2VjaG8gIlRvdGFsIGF2YWlsIHRlc3RzICA6ICQoKCRUT1RBTF9URVNUUyArICRTS0lQUEVEX1RFU1RTKSkiCitlY2hvCisKK1RPVEFMX1BBU1M9JCgoJFRPVEFMX1BBU1MrJFBBU1NFRF9URVNUUykpCitUT1RBTF9GQUlMPSQoKCRUT1RBTF9GQUlMKyRGQUlMRURfVEVTVFMpKQorVE9UQUxfU0tJUD0kKCgkVE9UQUxfU0tJUCskU0tJUFBFRF9URVNUUykpCitUT1RBTF9BVkFJTD0kKCgkVE9UQUxfQVZBSUwgKyAkVE9UQUxfVEVTVFMgKyAkU0tJUFBFRF9URVNUUykpCitUT1RBTF9FWEVEPSQoKCRUT1RBTF9FWEVEICsgJFRPVEFMX1RFU1RTKSkKKworCisjIFN0ZXAgNGMgLSBTeXN0ZW0gQ29tcGF0aWJpbGl0eSB0ZXN0cworZWNobyAiU3lzdGVtL0NvbXBhdGliaWxpdHkgdGVzdHMgLSB0ZXN0cy9jb21wYXQuc2giCisKK1BBU1NFRF9URVNUUz0kKGNhdCBjb21wYXQtdGVzdC0kVEVTVF9PVVRQVVQgfCBzZWQgLW4gLWUgJ3MvLiogKFwoWzAtOV0qXCkgXC8gWzAtOV0qIHRlc3RzIChbMC05XSogc2tpcHBlZCkpJC9cMS9wJyB8IGF3ayAnQkVHSU57IHMgPSAwIH0geyBzICs9ICQxIH0gRU5EeyBwcmludCBzIH0nKQorU0tJUFBFRF9URVNUUz0kKGNhdCBjb21wYXQtdGVzdC0kVEVTVF9PVVRQVVQgfCBzZWQgLW4gLWUgJ3MvLiogKFswLTldKiBcLyBbMC05XSogdGVzdHMgKFwoWzAtOV0qXCkgc2tpcHBlZCkpJC9cMS9wJyB8IGF3ayAnQkVHSU57IHMgPSAwIH0geyBzICs9ICQxIH0gRU5EeyBwcmludCBzIH0nKQorRVhFRF9URVNUUz0kKGNhdCBjb21wYXQtdGVzdC0kVEVTVF9PVVRQVVQgfCBzZWQgLW4gLWUgJ3MvLiogKFswLTldKiBcLyBcKFswLTldKlwpIHRlc3RzIChbMC05XSogc2tpcHBlZCkpJC9cMS9wJyB8IGF3ayAnQkVHSU57IHMgPSAwIH0geyBzICs9ICQxIH0gRU5EeyBwcmludCBzIH0nKQorRkFJTEVEX1RFU1RTPSQoKCRFWEVEX1RFU1RTIC0gJFBBU1NFRF9URVNUUykpCisKK2VjaG8gIlBhc3NlZCAgICAgICAgICAgICA6ICRQQVNTRURfVEVTVFMiCitlY2hvICJGYWlsZWQgICAgICAgICAgICAgOiAkRkFJTEVEX1RFU1RTIgorZWNobyAiU2tpcHBlZCAgICAgICAgICAgIDogJFNLSVBQRURfVEVTVFMiCitlY2hvICJUb3RhbCBleGVjJ2QgdGVzdHMgOiAkRVhFRF9URVNUUyIKK2VjaG8gIlRvdGFsIGF2YWlsIHRlc3RzICA6ICQoKCRFWEVEX1RFU1RTICsgJFNLSVBQRURfVEVTVFMpKSIKK2VjaG8KKworVE9UQUxfUEFTUz0kKCgkVE9UQUxfUEFTUyskUEFTU0VEX1RFU1RTKSkKK1RPVEFMX0ZBSUw9JCgoJFRPVEFMX0ZBSUwrJEZBSUxFRF9URVNUUykpCitUT1RBTF9TS0lQPSQoKCRUT1RBTF9TS0lQKyRTS0lQUEVEX1RFU1RTKSkKK1RPVEFMX0FWQUlMPSQoKCRUT1RBTF9BVkFJTCArICRFWEVEX1RFU1RTICsgJFNLSVBQRURfVEVTVFMpKQorVE9UQUxfRVhFRD0kKCgkVE9UQUxfRVhFRCArICRFWEVEX1RFU1RTKSkKKworCisjIFN0ZXAgNGQgLSBHcmFuZCB0b3RhbHMKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitlY2hvICJUb3RhbCB0ZXN0cyIKKworZWNobyAiVG90YWwgUGFzc2VkICAgICAgIDogJFRPVEFMX1BBU1MiCitlY2hvICJUb3RhbCBGYWlsZWQgICAgICAgOiAkVE9UQUxfRkFJTCIKK2VjaG8gIlRvdGFsIFNraXBwZWQgICAgICA6ICRUT1RBTF9TS0lQIgorZWNobyAiVG90YWwgZXhlYydkIHRlc3RzIDogJFRPVEFMX0VYRUQiCitlY2hvICJUb3RhbCBhdmFpbCB0ZXN0cyAgOiAkVE9UQUxfQVZBSUwiCitlY2hvCisKKworIyBTdGVwIDRlIC0gQ292ZXJhZ2UKK2VjaG8gIkNvdmVyYWdlIgorCitMSU5FU19URVNURUQ9JCh0YWlsIC1uMyBjb3YtJFRFU1RfT1VUUFVUfHNlZCAtbiAtZSAncy8gIGxpbmVzLi4uLi4uOiBbMC05XSouWzAtOV0lIChcKFswLTldKlwpIG9mIFswLTldKiBsaW5lcykvXDEvcCcpCitMSU5FU19UT1RBTD0kKHRhaWwgLW4zIGNvdi0kVEVTVF9PVVRQVVR8c2VkIC1uIC1lICdzLyAgbGluZXMuLi4uLi46IFswLTldKi5bMC05XSUgKFswLTldKiBvZiBcKFswLTldKlwpIGxpbmVzKS9cMS9wJykKK0ZVTkNTX1RFU1RFRD0kKHRhaWwgLW4zIGNvdi0kVEVTVF9PVVRQVVR8c2VkIC1uIC1lICdzLyAgZnVuY3Rpb25zLi46IFswLTldKi5bMC05XSUgKFwoWzAtOV0qXCkgb2YgWzAtOV0qIGZ1bmN0aW9ucykkL1wxL3AnKQorRlVOQ1NfVE9UQUw9JCh0YWlsIC1uMyBjb3YtJFRFU1RfT1VUUFVUfHNlZCAtbiAtZSAncy8gIGZ1bmN0aW9ucy4uOiBbMC05XSouWzAtOV0lIChbMC05XSogb2YgXChbMC05XSpcKSBmdW5jdGlvbnMpJC9cMS9wJykKKworTElORVNfUEVSQ0VOVD0kKCgxMDAwKiRMSU5FU19URVNURUQvJExJTkVTX1RPVEFMKSkKK0xJTkVTX1BFUkNFTlQ9IiQoKCRMSU5FU19QRVJDRU5ULzEwKSkuJCgoJExJTkVTX1BFUkNFTlQtKCRMSU5FU19QRVJDRU5ULzEwKSoxMCkpIgorCitGVU5DU19QRVJDRU5UPSQoKDEwMDAqJEZVTkNTX1RFU1RFRC8kRlVOQ1NfVE9UQUwpKQorRlVOQ1NfUEVSQ0VOVD0iJCgoJEZVTkNTX1BFUkNFTlQvMTApKS4kKCgkRlVOQ1NfUEVSQ0VOVC0oJEZVTkNTX1BFUkNFTlQvMTApKjEwKSkiCisKK2VjaG8gIkxpbmVzIFRlc3RlZCAgICAgICA6ICRMSU5FU19URVNURUQgb2YgJExJTkVTX1RPVEFMICRMSU5FU19QRVJDRU5UJSIKK2VjaG8gIkZ1bmN0aW9ucyBUZXN0ZWQgICA6ICRGVU5DU19URVNURUQgb2YgJEZVTkNTX1RPVEFMICRGVU5DU19QRVJDRU5UJSIKK2VjaG8KKworCitybSB1bml0LXRlc3QtJFRFU1RfT1VUUFVUCitybSBzeXMtdGVzdC0kVEVTVF9PVVRQVVQKK3JtIGNvbXBhdC10ZXN0LSRURVNUX09VVFBVVAorcm0gY292LSRURVNUX09VVFBVVAorCitjZCAuLgorCittYWtlIGNsZWFuCisKK2lmIFsgLWYgIiRDT05GSUdfQkFLIiBdOyB0aGVuCisgICAgbXYgIiRDT05GSUdfQkFLIiAiJENPTkZJR19IIgorZmkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2NoZWNrLWRveHktYmxvY2tzLnBsIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvY2hlY2stZG94eS1ibG9ja3MucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWJkMjdhOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2NoZWNrLWRveHktYmxvY2tzLnBsCkBAIC0wLDAgKzEsNTcgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIERldGVjdCBjb21tZW50IGJsb2NrcyB0aGF0IGFyZSBsaWtlbHkgbWVhbnQgdG8gYmUgZG94eWdlbiBibG9ja3MgYnV0IGFyZW4ndC4KKyMKKyMgTW9yZSBwcmVjaXNlbHksIGxvb2sgZm9yIG5vcm1hbCBjb21tZW50IGJsb2NrIGNvbnRhaW5pbmcgJ1wnLgorIyBPZiBjb3Vyc2Ugb25lIGNvdWxkIHVzZSBkb3h5Z2VuIHdhcm5pbmdzLCBlZyB3aXRoOgorIyAgIHNlZCAtZSAnL0VYVFJBQ1Qvcy9ZRVMvTk8vJyBkb3h5Z2VuL21iZWR0bHMuZG94eWZpbGUgfCBkb3h5Z2VuIC0KKyMgYnV0IHRoYXQgd291bGQgd2FybiBhYm91dCBhbnkgdW5kb2N1bWVudGVkIGl0ZW0sIHdoaWxlIG91ciBnb2FsIGlzIHRvIGZpbmQKKyMgaXRlbXMgdGhhdCBhcmUgZG9jdW1lbnRlZCwgYnV0IG5vdCBtYXJrZWQgYXMgc3VjaCBieSBtaXN0YWtlLgorCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OwordXNlIEZpbGU6OkJhc2VuYW1lOworCisjIEMvaGVhZGVyIGZpbGVzIGluIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgd2lsbCBiZSBjaGVja2VkCitteSBAZGlyZWN0b3JpZXMgPSBxdyhpbmNsdWRlL21iZWR0bHMgbGlicmFyeSBkb3h5Z2VuL2lucHV0KTsKKworIyB2ZXJ5IG5haXZlIHBhdHRlcm4gdG8gZmluZCBkaXJlY3RpdmVzOgorIyBldmVyeXRoaW5nIHdpdGggYSBiYWNrc2xhY2ggZXhjZXB0ICdcMCcgYW5kIGJhY2tzbGFzaCBhdCBFT0wKK215ICRkb3h5X3JlID0gcXIvXFwoPyEwfFxuKS87CisKK3N1YiBjaGVja19maWxlIHsKKyAgICBteSAoJGZuYW1lKSA9IEBfOworICAgIG9wZW4gbXkgJGZoLCAnPCcsICRmbmFtZSBvciBkaWUgIkZhaWxlZCB0byBvcGVuICckZm5hbWUnOiAkIVxuIjsKKworICAgICMgZmlyc3QgbGluZSBvZiB0aGUgbGFzdCBub3JtYWwgY29tbWVudCBibG9jaywKKyAgICAjIG9yIDAgaWYgbm90IGluIGEgbm9ybWFsIGNvbW1lbnQgYmxvY2sKKyAgICBteSAkYmxvY2tfc3RhcnQgPSAwOworICAgIHdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisgICAgICAgICRibG9ja19zdGFydCA9ICQuICAgaWYgJGxpbmUgPX4gbS9cL1wqKD8hWyohXSkvOworICAgICAgICAkYmxvY2tfc3RhcnQgPSAwICAgIGlmICRsaW5lID1+IG0vXCpcLy87CisgICAgICAgIGlmICgkYmxvY2tfc3RhcnQgYW5kICRsaW5lID1+IG0vJGRveHlfcmUvKSB7CisgICAgICAgICAgICBwcmludCAiJGZuYW1lOiRibG9ja19zdGFydDogZGlyZWN0aXZlIG9uIGxpbmUgJC5cbiI7CisgICAgICAgICAgICAkYmxvY2tfc3RhcnQgPSAwOyAjIHJlcG9ydCBvbmx5IG9uZSBkaXJlY3RpdmUgcGVyIGJsb2NrCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbG9zZSAkZmg7Cit9CisKK3N1YiBjaGVja19kaXIgeworICAgIG15ICgkZGlybmFtZSkgPSBAXzsKKyAgICBmb3IgbXkgJGZpbGUgKDwkZGlybmFtZS8qLltjaF0+KSB7CisgICAgICAgIGNoZWNrX2ZpbGUoJGZpbGUpOworICAgIH0KK30KKworIyBsb2NhdGUgcm9vdCBkaXJlY3RvcnkgYmFzZWQgb24gaW52b2NhdGlvbiBuYW1lCitteSAkcm9vdCA9IGRpcm5hbWUoJDApIC4gJy8uLic7CitjaGRpciAkcm9vdCBvciBkaWUgIkNhbid0IGNoZGlyIHRvICckcm9vdCc6ICQhXG4iOworCisjIGp1c3QgZG8gaXQKK2ZvciBteSAkZGlyIChAZGlyZWN0b3JpZXMpIHsKKyAgICBjaGVja19kaXIoJGRpcikKK30KKworX19FTkRfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvY2hlY2stZ2VuZXJhdGVkLWZpbGVzLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvY2hlY2stZ2VuZXJhdGVkLWZpbGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0MDBiYzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9jaGVjay1nZW5lcmF0ZWQtZmlsZXMuc2gKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisKKyMgY2hlY2sgaWYgZ2VuZXJhdGVkIGZpbGVzIGFyZSB1cC10by1kYXRlCisKK3NldCAtZXUKKworaWYgWyAtZCBsaWJyYXJ5IC1hIC1kIGluY2x1ZGUgLWEgLWQgdGVzdHMgXTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiTXVzdCBiZSBydW4gZnJvbSBtYmVkIFRMUyByb290IiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK2NoZWNrKCkKK3sKKyAgICBGSUxFPSQxCisgICAgU0NSSVBUPSQyCisKKyAgICBjcCAkRklMRSAkRklMRS5iYWsKKyAgICAkU0NSSVBUCisgICAgZGlmZiAkRklMRSAkRklMRS5iYWsKKyAgICBtdiAkRklMRS5iYWsgJEZJTEUKK30KKworY2hlY2sgbGlicmFyeS9lcnJvci5jIHNjcmlwdHMvZ2VuZXJhdGVfZXJyb3JzLnBsCitjaGVjayBsaWJyYXJ5L3ZlcnNpb25fZmVhdHVyZXMuYyBzY3JpcHRzL2dlbmVyYXRlX2ZlYXR1cmVzLnBsCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9jaGVjay1uYW1lcy5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2NoZWNrLW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE5MTU5NGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9jaGVjay1uYW1lcy5zaApAQCAtMCwwICsxLDkzIEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBUaGlzIHNjcmlwdCBjb25maXJtcyB0aGF0IHRoZSBuYW1pbmcgb2YgYWxsIHN5bWJvbHMgYW5kIGlkZW50aWZpZXJzIGluIG1iZWQKKyMgVExTIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGhvdXNlIHN0eWxlIGFuZCBhcmUgYWxzbyBzZWxmLWNvbnNpc3RlbnQuCisjCitzZXQgLWV1CisKK2lmIGdyZXAgLS12ZXJzaW9ufGhlYWQgLW4xfGdyZXAgR05VID4vZGV2L251bGw7IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gIlRoaXMgc2NyaXB0IHJlcXVpcmVzIEdOVSBncmVwLiIKKyAgICBleGl0IDEKK2ZpCisKK3ByaW50ZiAiQW5hbHlzaW5nIHNvdXJjZSBjb2RlLi4uXG4iCisKK3Rlc3RzL3NjcmlwdHMvbGlzdC1tYWNyb3Muc2gKK3Rlc3RzL3NjcmlwdHMvbGlzdC1lbnVtLWNvbnN0cy5wbAordGVzdHMvc2NyaXB0cy9saXN0LWlkZW50aWZpZXJzLnNoCit0ZXN0cy9zY3JpcHRzL2xpc3Qtc3ltYm9scy5zaAorCitGQUlMPTAKKworcHJpbnRmICJcbkV4cG9ydGVkIHN5bWJvbHMgZGVjbGFyZWQgaW4gaGVhZGVyOiAiCitVTkRFQ0xBUkVEPSQoIGRpZmYgZXhwb3J0ZWQtc3ltYm9scyBpZGVudGlmaWVycyB8IHNlZCAtbiAtZSAncy9ePCAvL3AnICkKK2lmIFsgIngkVU5ERUNMQVJFRCIgPSAieCIgXTsgdGhlbgorICAgIGVjaG8gIlBBU1MiCitlbHNlCisgICAgZWNobyAiRkFJTCIKKyAgICBlY2hvICIkVU5ERUNMQVJFRCIKKyAgICBGQUlMPTEKK2ZpCisKK2RpZmYgbWFjcm9zIGlkZW50aWZpZXJzIHwgc2VkIC1uIC1lICdzLzwgLy9wJyA+IGFjdHVhbC1tYWNyb3MKKworZm9yIFRISU5HIGluIGFjdHVhbC1tYWNyb3MgZW51bS1jb25zdHM7IGRvCisgICAgcHJpbnRmICJOYW1lcyBvZiAkVEhJTkc6ICIKKyAgICB0ZXN0IC1yICRUSElORworICAgIEJBRD0kKCBncmVwIC12ICdeTUJFRFRMU19bMC05QS1aX10qWzAtOUEtWl0kXHxeWU9UVEFfWzAtOUEtWl9dKlswLTlBLVpdJCcgJFRISU5HIHx8IHRydWUgKQorICAgIGlmIFsgIngkQkFEIiA9ICJ4IiBdOyB0aGVuCisgICAgICAgIGVjaG8gIlBBU1MiCisgICAgZWxzZQorICAgICAgICBlY2hvICJGQUlMIgorICAgICAgICBlY2hvICIkQkFEIgorICAgICAgICBGQUlMPTEKKyAgICBmaQorZG9uZQorCitmb3IgVEhJTkcgaW4gaWRlbnRpZmllcnM7IGRvCisgICAgcHJpbnRmICJOYW1lcyBvZiAkVEhJTkc6ICIKKyAgICB0ZXN0IC1yICRUSElORworICAgIEJBRD0kKCBncmVwIC12ICdebWJlZHRsc19bMC05YS16X10qWzAtOWEtel0kJyAkVEhJTkcgfHwgdHJ1ZSApCisgICAgaWYgWyAieCRCQUQiID0gIngiIF07IHRoZW4KKyAgICAgICAgZWNobyAiUEFTUyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkZBSUwiCisgICAgICAgIGVjaG8gIiRCQUQiCisgICAgICAgIEZBSUw9MQorICAgIGZpCitkb25lCisKK3ByaW50ZiAiTGlrZWx5IHR5cG9zOiAiCitzb3J0IC11IGFjdHVhbC1tYWNyb3MgZW51bS1jb25zdHMgPiBfY2FwcworSEVBREVSUz0kKCBscyBpbmNsdWRlL21iZWR0bHMvKi5oIHwgZWdyZXAgLXYgJ2NvbXBhdC0xXC4zXC5oJyApCitOTD0nCisnCitzZWQgLW4gJ3MvTUJFRC4uLl9bQS1aMC05X10qL1wnIiROTCInJlwnIiROTCIvZ3AgXAorICAgICRIRUFERVJTIGxpYnJhcnkvKi5jIFwKKyAgICB8IGdyZXAgTUJFRFRMUyB8IHNvcnQgLXUgPiBfTUJFRFRMU19YWFgKK1RZUE9TPSQoIGRpZmYgX2NhcHMgX01CRURUTFNfWFhYIHwgc2VkIC1uICdzL14+IC8vcCcgXAorICAgICAgICAgICAgfCBlZ3JlcCAtdiAnWFhYfF9ffF8kfF5NQkVEVExTXy4qQ09ORklHX0ZJTEUkJyB8fCB0cnVlICkKK3JtIF9NQkVEVExTX1hYWCBfY2FwcworaWYgWyAieCRUWVBPUyIgPSAieCIgXTsgdGhlbgorICAgIGVjaG8gIlBBU1MiCitlbHNlCisgICAgZWNobyAiRkFJTCIKKyAgICBlY2hvICIkVFlQT1MiCisgICAgRkFJTD0xCitmaQorCitwcmludGYgIlxuT3ZlcmFsbDogIgoraWYgWyAiJEZBSUwiIC1lcSAwIF07IHRoZW4KKyAgICBybSBtYWNyb3MgYWN0dWFsLW1hY3JvcyBlbnVtLWNvbnN0cyBpZGVudGlmaWVycyBleHBvcnRlZC1zeW1ib2xzCisgICAgZWNobyAiUEFTU0VEIgorICAgIGV4aXQgMAorZWxzZQorICAgIGVjaG8gIkZBSUxFRCIKKyAgICBleGl0IDEKK2ZpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9jdXJ2ZXMucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9jdXJ2ZXMucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODVlYjdlNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2N1cnZlcy5wbApAQCAtMCwwICsxLDYwIEBACisjIS91c3IvYmluL3BlcmwKKworIyBjdXJ2ZXMucGwKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjIFB1cnBvc2UKKyMKKyMgVG8gdGVzdCB0aGUgY29kZSBkZXBlbmRlbmNpZXMgb24gaW5kaXZpZHVhbCBjdXJ2ZXMgaW4gZWFjaCB0ZXN0IHN1aXRlLiBUaGlzCisjIGlzIGEgdmVyaWZpY2F0aW9uIHN0ZXAgdG8gZW5zdXJlIHdlIGRvbid0IHNoaXAgdGVzdCBzdWl0ZXMgdGhhdCBkbyBub3Qgd29yaworIyBmb3Igc29tZSBidWlsZCBvcHRpb25zLgorIworIyBUaGUgcHJvY2VzcyBpczoKKyMgICAgICAgZm9yIGVhY2ggcG9zc2libGUgY3VydmUKKyMgICAgICAgICAgIGJ1aWxkIHRoZSBsaWJyYXJ5IGFuZCB0ZXN0IHN1aXRlcyB3aXRoIHRoZSBjdXJ2ZSBkaXNhYmxlZAorIyAgICAgICAgICAgZXhlY3V0ZSB0aGUgdGVzdCBzdWl0ZXMKKyMKKyMgQW5kIGFueSB0ZXN0IHN1aXRlIHdpdGggdGhlIHdyb25nIGRlcGVuZGVuY2llcyB3aWxsIGZhaWwuCisjCisjIFVzYWdlOiBjdXJ2ZXMucGwKKyMKKyMgVGhpcyBzY3JpcHQgc2hvdWxkIGJlIGV4ZWN1dGVkIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QgZGlyZWN0b3J5LgorCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OworCistZCAnbGlicmFyeScgJiYgLWQgJ2luY2x1ZGUnICYmIC1kICd0ZXN0cycgb3IgZGllICJNdXN0IGJlIHJ1biBmcm9tIHJvb3RcbiI7CisKK215ICRzZWRfY21kID0gJ3MvXiNkZWZpbmUgXChNQkVEVExTX0VDUF9EUC4qX0VOQUJMRURcKS9cMS9wJzsKK215ICRjb25maWdfaCA9ICdpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgnOworbXkgQGN1cnZlcyA9IHNwbGl0KCAvXHMrLywgYHNlZCAtbiAtZSAnJHNlZF9jbWQnICRjb25maWdfaGAgKTsKKworc3lzdGVtKCAiY3AgJGNvbmZpZ19oICRjb25maWdfaC5iYWsiICkgYW5kIGRpZTsKK3N1YiBhYm9ydCB7CisgICAgc3lzdGVtKCAibXYgJGNvbmZpZ19oLmJhayAkY29uZmlnX2giICkgYW5kIHdhcm4gIiRjb25maWdfaCBub3QgcmVzdG9yZWRcbiI7CisgICAgZGllICRfWzBdOworfQorCitmb3IgbXkgJGN1cnZlIChAY3VydmVzKSB7CisgICAgc3lzdGVtKCAiY3AgJGNvbmZpZ19oLmJhayAkY29uZmlnX2giICkgYW5kIGRpZSAiJGNvbmZpZ19oIG5vdCByZXN0b3JlZFxuIjsKKyAgICAjIGRlcGVuZHMgb24gYSBzcGVjaWZpYyBjdXJ2ZS4gQWxzbywgaWdub3JlIGVycm9yIGlmIGl0IHdhc24ndCBlbmFibGVkCisgICAgc3lzdGVtKCAic2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEIiApOworICAgIHN5c3RlbSggIm1ha2UgY2xlYW4iICkgYW5kIGRpZTsKKworICAgIHByaW50ICJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKKyAgICBwcmludCAiKiBUZXN0aW5nIHdpdGhvdXQgY3VydmU6ICRjdXJ2ZVxuIjsKKyAgICBwcmludCAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOworCisgICAgc3lzdGVtKCAic2NyaXB0cy9jb25maWcucGwgdW5zZXQgJGN1cnZlIiApCisgICAgICAgIGFuZCBhYm9ydCAiRmFpbGVkIHRvIGRpc2FibGUgJGN1cnZlXG4iOworCisgICAgc3lzdGVtKCAibWFrZSBsaWIiICkgYW5kIGFib3J0ICJGYWlsZWQgdG8gYnVpbGQgbGliOiAkY3VydmVcbiI7CisgICAgc3lzdGVtKCAiY2QgdGVzdHMgJiYgbWFrZSIgKSBhbmQgYWJvcnQgIkZhaWxlZCB0byBidWlsZCB0ZXN0czogJGN1cnZlXG4iOworICAgIHN5c3RlbSggIm1ha2UgdGVzdCIgKSBhbmQgYWJvcnQgIkZhaWxlZCB0ZXN0IHN1aXRlOiAkY3VydmVcbiI7CisKK30KKworc3lzdGVtKCAibXYgJGNvbmZpZ19oLmJhayAkY29uZmlnX2giICkgYW5kIGRpZSAiJGNvbmZpZ19oIG5vdCByZXN0b3JlZFxuIjsKK3N5c3RlbSggIm1ha2UgY2xlYW4iICkgYW5kIGRpZTsKK2V4aXQgMDsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2RveHlnZW4uc2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9kb3h5Z2VuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3NzU4YzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9kb3h5Z2VuLnNoCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCisjIE1ha2Ugc3VyZSB0aGUgZG94eWdlbiBkb2N1bWVudGF0aW9uIGJ1aWxkcyB3aXRob3V0IHdhcm5pbmdzCisKKyMgQWJvcnQgb24gZXJyb3JzIChhbmQgdW5pbml0aWxpYXNlZCB2YXJpYWJsZXMpCitzZXQgLWV1CisKK2lmIFsgLWQgbGlicmFyeSAtYSAtZCBpbmNsdWRlIC1hIC1kIHRlc3RzIF07IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gIk11c3QgYmUgcnVuIGZyb20gbWJlZCBUTFMgcm9vdCIgPiYyCisgICAgZXhpdCAxCitmaQorCitpZiBzY3JpcHRzL2FwaWRvY19mdWxsLnNoID4gZG9jLm91dCAyPmRvYy5lcnI7IHRoZW4gOjsgZWxzZQorICAgIGNhdCBkb2MuZXJyCisgICAgZWNobyAiRkFJTCIgPiYyCisgICAgZXhpdCAxOworZmkKKworY2F0IGRvYy5vdXQgZG9jLmVyciB8IFwKKyAgICBncmVwIC12ICJ3YXJuaW5nOiBpZ25vcmluZyB1bnN1cHBvcnRlZCB0YWciIFwKKyAgICA+IGRvYy5maWx0ZXJlZAorCitpZiBlZ3JlcCAiKHdhcm5pbmd8ZXJyb3IpOiIgZG9jLmZpbHRlcmVkOyB0aGVuCisgICAgZWNobyAiRkFJTCIgPiYyCisgICAgZXhpdCAxOworZmkKKworbWFrZSBhcGlkb2NfY2xlYW4KK3JtIC1mIGRvYy5vdXQgZG9jLmVyciBkb2MuZmlsdGVyZWQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbl9jdHJfZHJiZy5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbl9jdHJfZHJiZy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NmQ5YjNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuX2N0cl9kcmJnLnBsCkBAIC0wLDAgKzEsOTMgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBCYXNlZCBvbiBOSVNUIENUUl9EUkJHLnJzcCB2YWxpZGF0aW9uIGZpbGUKKyMgT25seSB1c2VzIEFFUy0yNTYtQ1RSIGNhc2VzIHRoYXQgdXNlIGEgRGVyaXZhdGlvbiBmdW5jdGlvbgorIyBhbmQgY29uY2F0cyBub25jZSBhbmQgcGVyc29uYWxpemF0aW9uIGZvciBpbml0aWFsaXphdGlvbi4KKwordXNlIHN0cmljdDsKKworbXkgJGZpbGUgPSBzaGlmdDsKKworb3BlbihURVNUX0RBVEEsICIkZmlsZSIpIG9yIGRpZSAiT3BlbmluZyB0ZXN0IGNhc2VzICckZmlsZSc6ICQhIjsKKworc3ViIGdldF9zdWl0ZV92YWwoJCkKK3sKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworICAgIG15ICR2YWwgPSAiIjsKKworICAgIG15ICRsaW5lID0gPFRFU1RfREFUQT47CisgICAgKCR2YWwpID0gKCRsaW5lID1+IC9cWyRuYW1lXHNcPVxzKFx3KylcXS8pOworCisgICAgcmV0dXJuICR2YWw7Cit9CisKK3N1YiBnZXRfdmFsKCQpCit7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAkdmFsID0gIiI7CisgICAgbXkgJGxpbmU7CisKKyAgICB3aGlsZSgkbGluZSA9IDxURVNUX0RBVEE+KQorICAgIHsKKyAgICAgICAgbmV4dCBpZigkbGluZSAhfiAvPS8pOworICAgICAgICBsYXN0OworICAgIH0KKworICAgICgkdmFsKSA9ICgkbGluZSA9fiAvXiRuYW1lID0gKFx3KykvKTsKKworICAgIHJldHVybiAkdmFsOworfQorCitteSAkY250ID0gMTs7Cit3aGlsZSAobXkgJGxpbmUgPSA8VEVTVF9EQVRBPikKK3sKKyAgICBuZXh0IGlmICgkbGluZSAhfiAvXlxbQUVTLTI1NiB1c2UgZGYvKTsKKworICAgIG15ICRQcmVkaWN0aW9uUmVzaXN0YW5jZVN0ciA9IGdldF9zdWl0ZV92YWwoIlByZWRpY3Rpb25SZXNpc3RhbmNlIik7CisgICAgbXkgJFByZWRpY3Rpb25SZXNpc3RhbmNlID0gMDsKKyAgICAkUHJlZGljdGlvblJlc2lzdGFuY2UgPSAxIGlmICgkUHJlZGljdGlvblJlc2lzdGFuY2VTdHIgZXEgJ1RydWUnKTsKKyAgICBteSAkRW50cm9weUlucHV0TGVuID0gZ2V0X3N1aXRlX3ZhbCgiRW50cm9weUlucHV0TGVuIik7CisgICAgbXkgJE5vbmNlTGVuID0gZ2V0X3N1aXRlX3ZhbCgiTm9uY2VMZW4iKTsKKyAgICBteSAkUGVyc29uYWxpemF0aW9uU3RyaW5nTGVuID0gZ2V0X3N1aXRlX3ZhbCgiUGVyc29uYWxpemF0aW9uU3RyaW5nTGVuIik7CisgICAgbXkgJEFkZGl0aW9uYWxJbnB1dExlbiA9IGdldF9zdWl0ZV92YWwoIkFkZGl0aW9uYWxJbnB1dExlbiIpOworCisgICAgZm9yICgkY250ID0gMDsgJGNudCA8IDE1OyAkY250KyspCisgICAgeworICAgICAgICBteSAkQ291bnQgPSBnZXRfdmFsKCJDT1VOVCIpOworICAgICAgICBteSAkRW50cm9weUlucHV0ID0gZ2V0X3ZhbCgiRW50cm9weUlucHV0Iik7CisgICAgICAgIG15ICROb25jZSA9IGdldF92YWwoIk5vbmNlIik7CisgICAgICAgIG15ICRQZXJzb25hbGl6YXRpb25TdHJpbmcgPSBnZXRfdmFsKCJQZXJzb25hbGl6YXRpb25TdHJpbmciKTsKKyAgICAgICAgbXkgJEFkZGl0aW9uYWxJbnB1dDEgPSBnZXRfdmFsKCJBZGRpdGlvbmFsSW5wdXQiKTsKKyAgICAgICAgbXkgJEVudHJvcHlJbnB1dFBSMSA9IGdldF92YWwoIkVudHJvcHlJbnB1dFBSIikgaWYgKCRQcmVkaWN0aW9uUmVzaXN0YW5jZSA9PSAxKTsKKyAgICAgICAgbXkgJEVudHJvcHlJbnB1dFJlc2VlZCA9IGdldF92YWwoIkVudHJvcHlJbnB1dFJlc2VlZCIpIGlmICgkUHJlZGljdGlvblJlc2lzdGFuY2UgPT0gMCk7CisgICAgICAgIG15ICRBZGRpdGlvbmFsSW5wdXRSZXNlZWQgPSBnZXRfdmFsKCJBZGRpdGlvbmFsSW5wdXRSZXNlZWQiKSBpZiAoJFByZWRpY3Rpb25SZXNpc3RhbmNlID09IDApOworICAgICAgICBteSAkQWRkaXRpb25hbElucHV0MiA9IGdldF92YWwoIkFkZGl0aW9uYWxJbnB1dCIpOworICAgICAgICBteSAkRW50cm9weUlucHV0UFIyID0gZ2V0X3ZhbCgiRW50cm9weUlucHV0UFIiKSBpZiAoJFByZWRpY3Rpb25SZXNpc3RhbmNlID09IDEpOworICAgICAgICBteSAkUmV0dXJuZWRCaXRzID0gZ2V0X3ZhbCgiUmV0dXJuZWRCaXRzIik7CisgICAgCisgICAgICAgIGlmICgkUHJlZGljdGlvblJlc2lzdGFuY2UgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQoIkNUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsJFByZWRpY3Rpb25SZXNpc3RhbmNlU3RyLCRFbnRyb3B5SW5wdXRMZW4sJE5vbmNlTGVuLCRQZXJzb25hbGl6YXRpb25TdHJpbmdMZW4sJEFkZGl0aW9uYWxJbnB1dExlbikgIyRDb3VudFxuIik7CisgICAgICAgICAgICBwcmludCgiY3RyX2RyYmdfdmFsaWRhdGVfcHIiKTsKKyAgICAgICAgICAgIHByaW50KCI6XCIkTm9uY2UkUGVyc29uYWxpemF0aW9uU3RyaW5nXCIiKTsKKyAgICAgICAgICAgIHByaW50KCI6XCIkRW50cm9weUlucHV0JEVudHJvcHlJbnB1dFBSMSRFbnRyb3B5SW5wdXRQUjJcIiIpOworICAgICAgICAgICAgcHJpbnQoIjpcIiRBZGRpdGlvbmFsSW5wdXQxXCIiKTsKKyAgICAgICAgICAgIHByaW50KCI6XCIkQWRkaXRpb25hbElucHV0MlwiIik7CisgICAgICAgICAgICBwcmludCgiOlwiJFJldHVybmVkQml0c1wiIik7CisgICAgICAgICAgICBwcmludCgiXG5cbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQoIkNUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsJFByZWRpY3Rpb25SZXNpc3RhbmNlU3RyLCRFbnRyb3B5SW5wdXRMZW4sJE5vbmNlTGVuLCRQZXJzb25hbGl6YXRpb25TdHJpbmdMZW4sJEFkZGl0aW9uYWxJbnB1dExlbikgIyRDb3VudFxuIik7CisgICAgICAgICAgICBwcmludCgiY3RyX2RyYmdfdmFsaWRhdGVfbm9wciIpOworICAgICAgICAgICAgcHJpbnQoIjpcIiROb25jZSRQZXJzb25hbGl6YXRpb25TdHJpbmdcIiIpOworICAgICAgICAgICAgcHJpbnQoIjpcIiRFbnRyb3B5SW5wdXQkRW50cm9weUlucHV0UmVzZWVkXCIiKTsKKyAgICAgICAgICAgIHByaW50KCI6XCIkQWRkaXRpb25hbElucHV0MVwiIik7CisgICAgICAgICAgICBwcmludCgiOlwiJEFkZGl0aW9uYWxJbnB1dFJlc2VlZFwiIik7CisgICAgICAgICAgICBwcmludCgiOlwiJEFkZGl0aW9uYWxJbnB1dDJcIiIpOworICAgICAgICAgICAgcHJpbnQoIjpcIiRSZXR1cm5lZEJpdHNcIiIpOworICAgICAgICAgICAgcHJpbnQoIlxuXG4iKTsKKyAgICAgICAgfQorICAgIH0KK30KK2Nsb3NlKFRFU1RfREFUQSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9nZW5fZ2NtX2RlY3J5cHQucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9nZW5fZ2NtX2RlY3J5cHQucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmRlY2FjMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbl9nY21fZGVjcnlwdC5wbApAQCAtMCwwICsxLDk4IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgQmFzZWQgb24gTklTVCBnY21EZWNyeXB0eHh4LnJzcCB2YWxpZGF0aW9uIGZpbGVzCisjIE9ubHkgZmlyc3QgMyBvZiBldmVyeSBzZXQgdXNlZCBmb3IgY29tcGlsZSB0aW1lIHNhdmluZworCit1c2Ugc3RyaWN0OworCitteSAkZmlsZSA9IHNoaWZ0OworCitvcGVuKFRFU1RfREFUQSwgIiRmaWxlIikgb3IgZGllICJPcGVuaW5nIHRlc3QgY2FzZXMgJyRmaWxlJzogJCEiOworCitzdWIgZ2V0X3N1aXRlX3ZhbCgkKQoreworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgJHZhbCA9ICIiOworCisgICAgd2hpbGUobXkgJGxpbmUgPSA8VEVTVF9EQVRBPikKKyAgICB7CisgICAgICAgIG5leHQgaWYgKCRsaW5lICF+IC9eXFsvKTsKKyAgICAgICAgKCR2YWwpID0gKCRsaW5lID1+IC9cWyRuYW1lXHNcPVxzKFx3KylcXS8pOworICAgICAgICBsYXN0OworICAgIH0KKworICAgIHJldHVybiAkdmFsOworfQorCitzdWIgZ2V0X3ZhbCgkKQoreworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgJHZhbCA9ICIiOworICAgIG15ICRsaW5lOworCisgICAgd2hpbGUoJGxpbmUgPSA8VEVTVF9EQVRBPikKKyAgICB7CisgICAgICAgIG5leHQgaWYoJGxpbmUgIX4gLz0vKTsKKyAgICAgICAgbGFzdDsKKyAgICB9CisKKyAgICAoJHZhbCkgPSAoJGxpbmUgPX4gL14kbmFtZSA9IChcdyspLyk7CisKKyAgICByZXR1cm4gJHZhbDsKK30KKworc3ViIGdldF92YWxfb3JfZmFpbCgkKQoreworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgJHZhbCA9ICJGQUlMIjsKKyAgICBteSAkbGluZTsKKworICAgIHdoaWxlKCRsaW5lID0gPFRFU1RfREFUQT4pCisgICAgeworICAgICAgICBuZXh0IGlmKCRsaW5lICF+IC89LyAmJiAkbGluZSAhfiAvRkFJTC8pOworICAgICAgICBsYXN0OworICAgIH0KKworICAgICgkdmFsKSA9ICgkbGluZSA9fiAvXiRuYW1lID0gKFx3KykvKSBpZiAoJGxpbmUgPX4gLz0vKTsKKworICAgIHJldHVybiAkdmFsOworfQorCitteSAkY250ID0gMTs7Cit3aGlsZSAobXkgJGxpbmUgPSA8VEVTVF9EQVRBPikKK3sKKyAgICBteSAka2V5X2xlbiA9IGdldF9zdWl0ZV92YWwoIktleWxlbiIpOworICAgIG5leHQgaWYgKCRrZXlfbGVuICF+IC9cZCsvKTsKKyAgICBteSAkaXZfbGVuID0gZ2V0X3N1aXRlX3ZhbCgiSVZsZW4iKTsKKyAgICBteSAkcHRfbGVuID0gZ2V0X3N1aXRlX3ZhbCgiUFRsZW4iKTsKKyAgICBteSAkYWRkX2xlbiA9IGdldF9zdWl0ZV92YWwoIkFBRGxlbiIpOworICAgIG15ICR0YWdfbGVuID0gZ2V0X3N1aXRlX3ZhbCgiVGFnbGVuIik7CisKKyAgICBmb3IgKCRjbnQgPSAwOyAkY250IDwgMzsgJGNudCsrKQorICAgIHsKKyAgICAgICAgbXkgJENvdW50ID0gZ2V0X3ZhbCgiQ291bnQiKTsKKyAgICAgICAgbXkgJGtleSA9IGdldF92YWwoIktleSIpOworICAgICAgICBteSAkaXYgPSBnZXRfdmFsKCJJViIpOworICAgICAgICBteSAkY3QgPSBnZXRfdmFsKCJDVCIpOworICAgICAgICBteSAkYWRkID0gZ2V0X3ZhbCgiQUFEIik7CisgICAgICAgIG15ICR0YWcgPSBnZXRfdmFsKCJUYWciKTsKKyAgICAgICAgbXkgJHB0ID0gZ2V0X3ZhbF9vcl9mYWlsKCJQVCIpOworCisgICAgICAgIHByaW50KCJHQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtJGtleV9sZW4sJGl2X2xlbiwkcHRfbGVuLCRhZGRfbGVuLCR0YWdfbGVuKSAjJENvdW50XG4iKTsKKyAgICAgICAgcHJpbnQoImdjbV9kZWNyeXB0X2FuZF92ZXJpZnkiKTsKKyAgICAgICAgcHJpbnQoIjpcIiRrZXlcIiIpOworICAgICAgICBwcmludCgiOlwiJGN0XCIiKTsKKyAgICAgICAgcHJpbnQoIjpcIiRpdlwiIik7CisgICAgICAgIHByaW50KCI6XCIkYWRkXCIiKTsKKyAgICAgICAgcHJpbnQoIjokdGFnX2xlbiIpOworICAgICAgICBwcmludCgiOlwiJHRhZ1wiIik7CisgICAgICAgIHByaW50KCI6XCIkcHRcIiIpOworICAgICAgICBwcmludCgiOjAiKTsKKyAgICAgICAgcHJpbnQoIlxuXG4iKTsKKyAgICB9Cit9CisKK3ByaW50KCJHQ00gU2VsZnRlc3RcbiIpOworcHJpbnQoImdjbV9zZWxmdGVzdDpcblxuIik7CisKK2Nsb3NlKFRFU1RfREFUQSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9nZW5fZ2NtX2VuY3J5cHQucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9nZW5fZ2NtX2VuY3J5cHQucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGFkYmJjZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbl9nY21fZW5jcnlwdC5wbApAQCAtMCwwICsxLDgxIEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgQmFzZWQgb24gTklTVCBnY21FbmNyeXB0SW50SVZ4eHgucnNwIHZhbGlkYXRpb24gZmlsZXMKKyMgT25seSBmaXJzdCAzIG9mIGV2ZXJ5IHNldCB1c2VkIGZvciBjb21waWxlIHRpbWUgc2F2aW5nCisKK3VzZSBzdHJpY3Q7CisKK215ICRmaWxlID0gc2hpZnQ7CisKK29wZW4oVEVTVF9EQVRBLCAiJGZpbGUiKSBvciBkaWUgIk9wZW5pbmcgdGVzdCBjYXNlcyAnJGZpbGUnOiAkISI7CisKK3N1YiBnZXRfc3VpdGVfdmFsKCQpCit7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAkdmFsID0gIiI7CisKKyAgICB3aGlsZShteSAkbGluZSA9IDxURVNUX0RBVEE+KQorICAgIHsKKyAgICAgICAgbmV4dCBpZiAoJGxpbmUgIX4gL15cWy8pOworICAgICAgICAoJHZhbCkgPSAoJGxpbmUgPX4gL1xbJG5hbWVcc1w9XHMoXHcrKVxdLyk7CisgICAgICAgIGxhc3Q7CisgICAgfQorCisgICAgcmV0dXJuICR2YWw7Cit9CisKK3N1YiBnZXRfdmFsKCQpCit7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAkdmFsID0gIiI7CisgICAgbXkgJGxpbmU7CisKKyAgICB3aGlsZSgkbGluZSA9IDxURVNUX0RBVEE+KQorICAgIHsKKyAgICAgICAgbmV4dCBpZigkbGluZSAhfiAvPS8pOworICAgICAgICBsYXN0OworICAgIH0KKworICAgICgkdmFsKSA9ICgkbGluZSA9fiAvXiRuYW1lID0gKFx3KykvKTsKKworICAgIHJldHVybiAkdmFsOworfQorCitteSAkY250ID0gMTs7Cit3aGlsZSAobXkgJGxpbmUgPSA8VEVTVF9EQVRBPikKK3sKKyAgICBteSAka2V5X2xlbiA9IGdldF9zdWl0ZV92YWwoIktleWxlbiIpOworICAgIG5leHQgaWYgKCRrZXlfbGVuICF+IC9cZCsvKTsKKyAgICBteSAkaXZfbGVuID0gZ2V0X3N1aXRlX3ZhbCgiSVZsZW4iKTsKKyAgICBteSAkcHRfbGVuID0gZ2V0X3N1aXRlX3ZhbCgiUFRsZW4iKTsKKyAgICBteSAkYWRkX2xlbiA9IGdldF9zdWl0ZV92YWwoIkFBRGxlbiIpOworICAgIG15ICR0YWdfbGVuID0gZ2V0X3N1aXRlX3ZhbCgiVGFnbGVuIik7CisKKyAgICBmb3IgKCRjbnQgPSAwOyAkY250IDwgMzsgJGNudCsrKQorICAgIHsKKyAgICAgICAgbXkgJENvdW50ID0gZ2V0X3ZhbCgiQ291bnQiKTsKKyAgICAgICAgbXkgJGtleSA9IGdldF92YWwoIktleSIpOworICAgICAgICBteSAkcHQgPSBnZXRfdmFsKCJQVCIpOworICAgICAgICBteSAkYWRkID0gZ2V0X3ZhbCgiQUFEIik7CisgICAgICAgIG15ICRpdiA9IGdldF92YWwoIklWIik7CisgICAgICAgIG15ICRjdCA9IGdldF92YWwoIkNUIik7CisgICAgICAgIG15ICR0YWcgPSBnZXRfdmFsKCJUYWciKTsKKworICAgICAgICBwcmludCgiR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLSRrZXlfbGVuLCRpdl9sZW4sJHB0X2xlbiwkYWRkX2xlbiwkdGFnX2xlbikgIyRDb3VudFxuIik7CisgICAgICAgIHByaW50KCJnY21fZW5jcnlwdF9hbmRfdGFnIik7CisgICAgICAgIHByaW50KCI6XCIka2V5XCIiKTsKKyAgICAgICAgcHJpbnQoIjpcIiRwdFwiIik7CisgICAgICAgIHByaW50KCI6XCIkaXZcIiIpOworICAgICAgICBwcmludCgiOlwiJGFkZFwiIik7CisgICAgICAgIHByaW50KCI6XCIkY3RcIiIpOworICAgICAgICBwcmludCgiOiR0YWdfbGVuIik7CisgICAgICAgIHByaW50KCI6XCIkdGFnXCIiKTsKKyAgICAgICAgcHJpbnQoIjowIik7CisgICAgICAgIHByaW50KCJcblxuIik7CisgICAgfQorfQorCitwcmludCgiR0NNIFNlbGZ0ZXN0XG4iKTsKK3ByaW50KCJnY21fc2VsZnRlc3Q6XG5cbiIpOworCitjbG9zZShURVNUX0RBVEEpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuX3BrY3MxX3YyMV9zaWduX3ZlcmlmeS5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbl9wa2NzMV92MjFfc2lnbl92ZXJpZnkucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQ3ZmM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbl9wa2NzMV92MjFfc2lnbl92ZXJpZnkucGwKQEAgLTAsMCArMSw3MiBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisKK3VzZSBzdHJpY3Q7CisKK215ICRmaWxlID0gc2hpZnQ7CisKK29wZW4oVEVTVF9EQVRBLCAiJGZpbGUiKSBvciBkaWUgIk9wZW5pbmcgdGVzdCBjYXNlcyAnJGZpbGUnOiAkISI7CisKK3N1YiBnZXRfdmFsKCQkKQoreworICAgIG15ICRzdHIgPSBzaGlmdDsKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworICAgIG15ICR2YWwgPSAiIjsKKworICAgIHdoaWxlKG15ICRsaW5lID0gPFRFU1RfREFUQT4pCisgICAgeworICAgICAgICBuZXh0IGlmKCRsaW5lICF+IC9eIyAkc3RyLyk7CisgICAgICAgIGxhc3Q7CisgICAgfQorICAgICAgICAKKyAgICB3aGlsZShteSAkbGluZSA9IDxURVNUX0RBVEE+KQorICAgIHsKKyAgICAgICAgbGFzdCBpZigkbGluZSBlcSAiXHJcbiIpOyAKKyAgICAgICAgJHZhbCAuPSAkbGluZTsKKyAgICB9CisKKyAgICAkdmFsID1+IHMvWyBcclxuXS8vZzsKKworICAgIHJldHVybiAkdmFsOworfQorCitteSAkc3RhdGUgPSAwOworbXkgJHZhbF9uID0gIiI7CitteSAkdmFsX2UgPSAiIjsKK215ICR2YWxfcCA9ICIiOworbXkgJHZhbF9xID0gIiI7CitteSAkbW9kID0gMDsKK215ICRjbnQgPSAxOword2hpbGUgKG15ICRsaW5lID0gPFRFU1RfREFUQT4pCit7CisgICAgbmV4dCBpZiAoJGxpbmUgIX4gL14jIEV4YW1wbGUvKTsKKworICAgICggJG1vZCApID0gKCRsaW5lID1+IC9BIChcZCspLyk7CisgICAgJHZhbF9uID0gZ2V0X3ZhbCgiUlNBIG1vZHVsdXMgbiIsICJOIik7CisgICAgJHZhbF9lID0gZ2V0X3ZhbCgiUlNBIHB1YmxpYyBleHBvbmVudCBlIiwgIkUiKTsKKyAgICAkdmFsX3AgPSBnZXRfdmFsKCJQcmltZSBwIiwgIlAiKTsKKyAgICAkdmFsX3EgPSBnZXRfdmFsKCJQcmltZSBxIiwgIlEiKTsKKworICAgIGZvcihteSAkaSA9IDE7ICRpIDw9IDY7ICRpKyspCisgICAgeworICAgICAgICBteSAkdmFsX20gPSBnZXRfdmFsKCJNZXNzYWdlIHRvIGJlIiwgIk0iKTsKKyAgICAgICAgbXkgJHZhbF9zYWx0ID0gZ2V0X3ZhbCgiU2FsdCIsICJTYWx0Iik7CisgICAgICAgIG15ICR2YWxfc2lnID0gZ2V0X3ZhbCgiU2lnbmF0dXJlIiwgIlNpZyIpOworCisgICAgICAgIHByaW50KCJSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlICR7Y250fV8ke2l9XG4iKTsKKyAgICAgICAgcHJpbnQoInBrY3MxX3JzYXNzYV9wc3Nfc2lnbjokbW9kOjE2OlwiJHZhbF9wXCI6MTY6XCIkdmFsX3FcIjoxNjpcIiR2YWxfblwiOjE2OlwiJHZhbF9lXCI6U0lHX1JTQV9TSEExOk1CRURUTFNfTURfU0hBMSIpOworICAgICAgICBwcmludCgiOlwiJHZhbF9tXCIiKTsKKyAgICAgICAgcHJpbnQoIjpcIiR2YWxfc2FsdFwiIik7CisgICAgICAgIHByaW50KCI6XCIkdmFsX3NpZ1wiOjAiKTsKKyAgICAgICAgcHJpbnQoIlxuXG4iKTsKKworICAgICAgICBwcmludCgiUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAke2NudH1fJHtpfSAodmVyaWZ5KVxuIik7CisgICAgICAgIHByaW50KCJwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeTokbW9kOjE2OlwiJHZhbF9uXCI6MTY6XCIkdmFsX2VcIjpTSUdfUlNBX1NIQTE6TUJFRFRMU19NRF9TSEExIik7CisgICAgICAgIHByaW50KCI6XCIkdmFsX21cIiIpOworICAgICAgICBwcmludCgiOlwiJHZhbF9zYWx0XCIiKTsKKyAgICAgICAgcHJpbnQoIjpcIiR2YWxfc2lnXCI6MCIpOworICAgICAgICBwcmludCgiXG5cbiIpOworICAgIH0gCisgICAgJGNudCsrOworfQorY2xvc2UoVEVTVF9EQVRBKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbmVyYXRlLWFmbC10ZXN0cy5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbmVyYXRlLWFmbC10ZXN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYmMyZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuZXJhdGUtYWZsLXRlc3RzLnNoCkBAIC0wLDAgKzEsNjggQEAKKyMhL2Jpbi9zaAorCisjIFRoaXMgc2NyaXB0IHNwbGl0cyB0aGUgZGF0YSB0ZXN0IGZpbGVzIGNvbnRhaW5pbmcgdGhlIHRlc3QgY2FzZXMgaW50bworIyBpbmRpdmlkdWFsIGZpbGVzIChvbmUgdGVzdCBjYXNlIHBlciBmaWxlKSBzdWl0YWJsZSBmb3IgdXNlIHdpdGggYWZsCisjIChBbWVyaWNhbiBGdXp6eSBMb3ApLiBodHRwOi8vbGNhbXR1Zi5jb3JlZHVtcC5jeC9hZmwvCisjCisjIFVzYWdlOiBnZW5lcmF0ZS1hZmwtdGVzdHMuc2ggPHRlc3QgZGF0YSBmaWxlIHBhdGg+CisjICA8dGVzdCBkYXRhIGZpbGUgcGF0aD4gLSBzaG91bGQgYmUgdGhlIHBhdGggdG8gb25lIG9mIHRoZSB0ZXN0IHN1aXRlIGZpbGVzCisjICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGFzICd0ZXN0X3N1aXRlX21waS5kYXRhJworCisjIEFib3J0IG9uIGVycm9ycworc2V0IC1lCisKK2lmIFsgLXogJDEgXQordGhlbgorICAgIGVjaG8gIiBbIV0gTm8gdGVzdCBmaWxlIHNwZWNpZmllZCIgPiYyCisgICAgZWNobyAiVXNhZ2U6ICQwIDx0ZXN0IGRhdGEgZmlsZT4iID4mMgorICAgIGV4aXQgMQorZmkKKworU1JDX0ZJTEVQQVRIPSQoZGlybmFtZSAkMSkvJChiYXNlbmFtZSAkMSkKK1RFU1RTVUlURT0kKGJhc2VuYW1lICQxIC5kYXRhKQorCitUSElTX0RJUj0kKGJhc2VuYW1lICRQV0QpCisKK2lmIFsgLWQgLi4vbGlicmFyeSAtYSAtZCAuLi9pbmNsdWRlIC1hIC1kIC4uL3Rlc3RzIC1hICRUSElTX0RJUiA9PSAidGVzdHMiIF07Cit0aGVuIDo7CitlbHNlCisgICAgZWNobyAiIFshXSBNdXN0IGJlIHJ1biBmcm9tIG1iZWQgVExTIHRlc3RzIGRpcmVjdG9yeSIgPiYyCisgICAgZXhpdCAxCitmaQorCitERVNUX1RFU1RDQVNFX0RJUj0kVEVTVFNVSVRFLWFmbC10ZXN0cworREVTVF9PVVRQVVRfRElSPSRURVNUU1VJVEUtYWZsLW91dAorCitlY2hvICIgWytdIENyZWF0aW5nIG91dHB1dCBkaXJlY3RvcmllcyIgPiYyCisKK2lmIFsgLWUgJERFU1RfT1VUUFVUX0RJUi8qIF07Cit0aGVuIDoKKyAgICBlY2hvICIgWyFdIFRlc3Qgb3V0cHV0IGZpbGVzIGFscmVhZHkgZXhpc3QuIiA+JjIKKyAgICBleGl0IDEKK2Vsc2UKKyAgICBta2RpciAtcCAkREVTVF9PVVRQVVRfRElSCitmaQorCitpZiBbIC1lICRERVNUX1RFU1RDQVNFX0RJUi8qIF07Cit0aGVuIDoKKyAgICBlY2hvICIgWyFdIFRlc3Qgb3V0cHV0IGZpbGVzIGFscmVhZHkgZXhpc3QuIiA+JjIKK2Vsc2UKKyAgICBta2RpciAtcCAkREVTVF9URVNUQ0FTRV9ESVIKK2ZpCisKK2VjaG8gIiBbK10gQ3JlYXRpbmcgdGVzdCBjYXNlcyIgPiYyCitjZCAkREVTVF9URVNUQ0FTRV9ESVIKKworc3BsaXQgLXAgJ15ccyokJyAuLi8kU1JDX0ZJTEVQQVRICisKK2ZvciBmIGluICo7CitkbworICAgICMgU3RyaXAgb3V0IGFueSBibGFuayBsaW5lcyAobm8gdHJpbSBvbiBPUyBYKQorICAgIHNlZCAnL15ccyokL2QnICRmID50ZXN0Y2FzZV8kZgorICAgIHJtICRmCitkb25lCisKK2NkIC4uCisKK2VjaG8gIiBbK10gVGVzdCBjYXNlcyBpbiAkREVTVF9URVNUQ0FTRV9ESVIiID4mMgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OWFmMmRiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbApAQCAtMCwwICsxLDM3MyBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjIGdlbmVyYXRlX2NvZGUucGwKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBHZW5lcmF0ZXMgdGhlIHRlc3Qgc3VpdGUgY29kZSBnaXZlbiBpbnB1dHMgb2YgdGhlIHRlc3Qgc3VpdGUgZGlyZWN0b3J5IHRoYXQKKyMgY29udGFpbiB0aGUgdGVzdCBzdWl0ZXMsIGFuZCB0aGUgdGVzdCBzdWl0ZSBmaWxlIG5hbWVzIGZvciB0aGUgdGVzdCBjb2RlIGFuZAorIyB0ZXN0IGRhdGEuCisjCisjIFVzYWdlOiBnZW5lcmF0ZV9jb2RlLnBsIDxzdWl0ZSBkaXI+IDxjb2RlIGZpbGU+IDxkYXRhIGZpbGU+IFttYWluIGNvZGUgZmlsZV0KKyMKKyMgU3RydWN0dXJlIG9mIGZpbGVzCisjCisjICAgLSBtYWluIGNvZGUgZmlsZSAtICdtYWluX3Rlc3QuZnVuY3Rpb24nCisjICAgICAgIFRlbXBsYXRlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbWFpbigpIGZ1bmN0aW9uIGZvciB0aGUgdGVzdCBzdWl0ZSwKKyMgICAgICAgdGVzdCBkaXNwYXRjaCBjb2RlIGFzIHdlbGwgYXMgc3VwcG9ydCBmdW5jdGlvbnMuIEl0IGNvbnRhaW5zIHRoZQorIyAgICAgICBmb2xsb3dpbmcgc3ltYm9scyB3aGljaCBhcmUgc3Vic3RpdHV0ZWQgYnkgdGhpcyBzY3JpcHQgZHVyaW5nCisjICAgICAgIHByb2Nlc3Npbmc6CisjICAgICAgICAgICBURVNUQ0FTRV9GSUxFTkFNRQorIyAgICAgICAgICAgVEVTVENPREVfRklMRU5BTUUKKyMgICAgICAgICAgIFNVSVRFX1BSRV9ERVAKKyMgICAgICAgICAgIE1BUFBJTkdfQ09ERQorIyAgICAgICAgICAgRlVOQ1RJT04gQ09ERQorIyAgICAgICAgICAgU1VJVEVfUE9TVF9ERVAKKyMgICAgICAgICAgIERFUF9DSEVDS19DT0RFCisjICAgICAgICAgICBESVNQQVRDSF9GVU5DVElPTgorIyAgICAgICAgICAgIUxJTkVfTk8hCisjCisjICAgLSBjb21tb24gaGVscGVyIGNvZGUgZmlsZSAtICdoZWxwZXJzLmZ1bmN0aW9uJworIyAgICAgICBDb21tb24gaGVscGVyIGZ1bmN0aW9ucworIworIyAgIC0gdGVzdCBzdWl0ZSBjb2RlIGZpbGUgLSBmaWxlIG5hbWUgaW4gdGhlIGZvcm0gJ3Rlc3Rfc3VpdGVfeHh4LmZ1bmN0aW9uJworIyAgICAgICBDb2RlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgYWN0dWFsIHRlc3QgY2FzZXMuIFRoZSBmaWxlIGNvbnRhaW5zIGEKKyMgICAgICAgc2VyaWVzIG9mIGNvZGUgc2VxdWVuY2VzIGRlbGltaXRlZCBieSB0aGUgZm9sbG93aW5nOgorIyAgICAgICAgICAgQkVHSU5fSEVBREVSIC8gRU5EX0hFQURFUiAtIGxpc3Qgb2YgaGVhZGVycyBmaWxlcworIyAgICAgICAgICAgQkVHSU5fU1VJVEVfSEVMUEVSUyAvIEVORF9TVUlURV9IRUxQRVJTIC0gaGVscGVyIGZ1bmN0aW9ucyBjb21tb24gdG8KKyMgICAgICAgICAgICAgICB0aGUgdGVzdCBzdWl0ZQorIyAgICAgICAgICAgQkVHSU5fQ0FTRSAvIEVORF9DQVNFIC0gdGhlIHRlc3QgY2FzZXMgaW4gdGhlIHRlc3Qgc3VpdGUuIEVhY2ggdGVzdAorIyAgICAgICAgICAgICAgIGNhc2UgY29udGFpbnMgYXQgbGVhc3Qgb25lIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlCisjICAgICAgICAgICAgICAgZGlzcGF0Y2ggY29kZS4KKyMKKyMgICAtIHRlc3QgZGF0YSBmaWxlIC0gZmlsZSBuYW1lIGluIHRoZSBmb3JtICd0ZXN0X3N1aXRlX3h4eHguZGF0YScKKyMgICAgICAgVGhlIHRlc3QgY2FzZSBwYXJhbWV0ZXJzIHRvIHRvIGJlIHVzZWQgaW4gZXhlY3V0aW9uIG9mIHRoZSB0ZXN0LiBUaGUKKyMgICAgICAgZmlsZSBuYW1lIGlzIHVzZWQgdG8gcmVwbGFjZSB0aGUgc3ltYm9sICdURVNUQ0FTRV9GSUxFTkFNRScgaW4gdGhlIG1haW4KKyMgICAgICAgY29kZSBmaWxlIGFib3ZlLgorIworCit1c2Ugc3RyaWN0OworCitteSAkc3VpdGVfZGlyID0gc2hpZnQgb3IgZGllICJNaXNzaW5nIHN1aXRlIGRpcmVjdG9yeSI7CitteSAkc3VpdGVfbmFtZSA9IHNoaWZ0IG9yIGRpZSAiTWlzc2luZyBzdWl0ZSBuYW1lIjsKK215ICRkYXRhX25hbWUgPSBzaGlmdCBvciBkaWUgIk1pc3NpbmcgZGF0YSBuYW1lIjsKK215ICR0ZXN0X21haW5fZmlsZSA9IGRvIHsgbXkgJGFyZyA9IHNoaWZ0OyBkZWZpbmVkKCRhcmcpID8gJGFyZyA6ICAkc3VpdGVfZGlyLiIvbWFpbl90ZXN0LmZ1bmN0aW9uIiB9OworbXkgJHRlc3RfZmlsZSA9ICRkYXRhX25hbWUuIi5jIjsKK215ICR0ZXN0X2NvbW1vbl9oZWxwZXJfZmlsZSA9ICRzdWl0ZV9kaXIuIi9oZWxwZXJzLmZ1bmN0aW9uIjsKK215ICR0ZXN0X2Nhc2VfZmlsZSA9ICRzdWl0ZV9kaXIuIi8iLiRzdWl0ZV9uYW1lLiIuZnVuY3Rpb24iOworbXkgJHRlc3RfY2FzZV9kYXRhID0gJHN1aXRlX2Rpci4iLyIuJGRhdGFfbmFtZS4iLmRhdGEiOworCitteSAkbGluZV9zZXBhcmF0b3IgPSAkLzsKK3VuZGVmICQvOworCisKKyMKKyMgT3BlbiBhbmQgcmVhZCBpbiB0aGUgaW5wdXQgZmlsZXMKKyMKKworb3BlbihURVNUX0hFTFBFUlMsICIkdGVzdF9jb21tb25faGVscGVyX2ZpbGUiKSBvciBkaWUgIk9wZW5pbmcgdGVzdCBoZWxwZXJzCisnJHRlc3RfY29tbW9uX2hlbHBlcl9maWxlJzogJCEiOworbXkgJHRlc3RfY29tbW9uX2hlbHBlcnMgPSA8VEVTVF9IRUxQRVJTPjsKK2Nsb3NlKFRFU1RfSEVMUEVSUyk7CisKK29wZW4oVEVTVF9NQUlOLCAiJHRlc3RfbWFpbl9maWxlIikgb3IgZGllICJPcGVuaW5nIHRlc3QgbWFpbiAnJHRlc3RfbWFpbl9maWxlJzogJCEiOworbXkgQHRlc3RfbWFpbl9saW5lcyA9IHNwbGl0L14vLCAgPFRFU1RfTUFJTj47CitteSAkdGVzdF9tYWluOworbXkgJGluZGV4ID0gMjsKK2ZvciBteSAkbGluZSAoQHRlc3RfbWFpbl9saW5lcykgeworICAgICRsaW5lID1+IHMvIUxJTkVfTk8hLyRpbmRleC87CisgICAgJHRlc3RfbWFpbiA9ICR0ZXN0X21haW4uJGxpbmU7CisgICAgJGluZGV4Kys7Cit9CitjbG9zZShURVNUX01BSU4pOworCitvcGVuKFRFU1RfQ0FTRVMsICIkdGVzdF9jYXNlX2ZpbGUiKSBvciBkaWUgIk9wZW5pbmcgdGVzdCBjYXNlcyAnJHRlc3RfY2FzZV9maWxlJzogJCEiOworbXkgQHRlc3RfY2FzZXNfbGluZXMgPSBzcGxpdC9eLywgIDxURVNUX0NBU0VTPjsKK215ICR0ZXN0X2Nhc2VzOworbXkgJGluZGV4ID0gMjsKK2ZvciBteSAkbGluZSAoQHRlc3RfY2FzZXNfbGluZXMpIHsKKyAgICBpZiAoJGxpbmUgPX4gL15cL1wqIEJFR0lOX1NVSVRFX0hFTFBFUlMgLipcKlwvLykKKyAgICB7CisgICAgICAgICRsaW5lID0gJGxpbmUuIiNsaW5lICRpbmRleCBcIiR0ZXN0X2Nhc2VfZmlsZVwiXG4iOworICAgIH0KKworICAgIGlmICgkbGluZSA9fiAvXlwvXCogQkVHSU5fQ0FTRSAuKlwqXC8vKQorICAgIHsKKyAgICAgICAgJGxpbmUgPSAkbGluZS4iI2xpbmUgJGluZGV4IFwiJHRlc3RfY2FzZV9maWxlXCJcbiI7CisgICAgfQorCisgICAgJGxpbmUgPX4gcy8hTElORV9OTyEvJGluZGV4LzsKKworICAgICR0ZXN0X2Nhc2VzID0gJHRlc3RfY2FzZXMuJGxpbmU7CisgICAgJGluZGV4Kys7Cit9CisKK2Nsb3NlKFRFU1RfQ0FTRVMpOworCitvcGVuKFRFU1RfREFUQSwgIiR0ZXN0X2Nhc2VfZGF0YSIpIG9yIGRpZSAiT3BlbmluZyB0ZXN0IGRhdGEgJyR0ZXN0X2Nhc2VfZGF0YSc6ICQhIjsKK215ICR0ZXN0X2RhdGEgPSA8VEVTVF9EQVRBPjsKK2Nsb3NlKFRFU1RfREFUQSk7CisKKworIworIyBGaW5kIHRoZSBoZWFkZXJzLCBkZXBlbmRlbmNpZXMsIGFuZCBzdWl0ZXMgaW4gdGhlIHRlc3QgY2FzZXMgZmlsZQorIworCitteSAoICRzdWl0ZV9oZWFkZXIgKSA9ICR0ZXN0X2Nhc2VzID1+IC9cL1wqIEJFR0lOX0hFQURFUiBcKlwvXG4oLio/KVxuXC9cKiBFTkRfSEVBREVSIFwqXC8vczsKK215ICggJHN1aXRlX2RlZmluZXMgKSA9ICR0ZXN0X2Nhc2VzID1+IC9cL1wqIEJFR0lOX0RFUEVOREVOQ0lFU1xuIFwqICguKj8pXG4gXCogRU5EX0RFUEVOREVOQ0lFUy9zOworbXkgKCAkc3VpdGVfaGVscGVycyApID0gJHRlc3RfY2FzZXMgPX4gL1wvXCogQkVHSU5fU1VJVEVfSEVMUEVSUyBcKlwvXG4oLio/KVxuXC9cKiBFTkRfU1VJVEVfSEVMUEVSUyBcKlwvL3M7CisKK215ICRyZXF1aXJlbWVudHM7CitpZiAoJHN1aXRlX2RlZmluZXMgPX4gL15kZXBlbmRzX29uOi8pCit7CisgICAgKCAkcmVxdWlyZW1lbnRzICkgPSAkc3VpdGVfZGVmaW5lcyA9fiAvXmRlcGVuZHNfb246KC4qKSQvOworfQorCitteSBAdmFyX3JlcV9hcnIgPSBzcGxpdCgvOi8sICRyZXF1aXJlbWVudHMpOworbXkgJHN1aXRlX3ByZV9jb2RlOworbXkgJHN1aXRlX3Bvc3RfY29kZTsKK215ICRkaXNwYXRjaF9jb2RlOworbXkgJG1hcHBpbmdfY29kZTsKK215ICVtYXBwaW5nX3ZhbHVlczsKKword2hpbGUgKEB2YXJfcmVxX2FycikKK3sKKyAgICBteSAkcmVxID0gc2hpZnQgQHZhcl9yZXFfYXJyOworICAgICRyZXEgPX4gcy8oIT8pKC4qKS8kMWRlZmluZWQoJDIpLzsKKworICAgICRzdWl0ZV9wcmVfY29kZSAuPSAiI2lmICRyZXFcbiI7CisgICAgJHN1aXRlX3Bvc3RfY29kZSAuPSAiI2VuZGlmIC8qICRyZXEgKi9cbiI7Cit9CisKKyQvID0gJGxpbmVfc2VwYXJhdG9yOworCitvcGVuKFRFU1RfRklMRSwgIj4kdGVzdF9maWxlIikgb3IgZGllICJPcGVuaW5nIGRlc3RpbmF0aW9uIGZpbGUgJyR0ZXN0X2ZpbGUnOiAkISI7CitwcmludCBURVNUX0ZJTEUgPDwgIkVORCI7CisvKgorICogKioqIFRISVMgRklMRSBIQVMgQkVFTiBNQUNISU5FIEdFTkVSQVRFRCAqKioKKyAqCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gbWFjaGluZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIHNjcmlwdDogJDAKKyAqCisgKiBUZXN0IGZpbGUgICAgICA6ICR0ZXN0X2ZpbGUKKyAqCisgKiBUaGUgZm9sbG93aW5nIGZpbGVzIHdlcmUgdXNlZCB0byBjcmVhdGUgdGhpcyBmaWxlLgorICoKKyAqICAgICAgTWFpbiBjb2RlIGZpbGUgIDogJHRlc3RfbWFpbl9maWxlCisgKiAgICAgIEhlbHBlciBmaWxlICAgICA6ICR0ZXN0X2NvbW1vbl9oZWxwZXJfZmlsZQorICogICAgICBUZXN0IHN1aXRlIGZpbGUgOiAkdGVzdF9jYXNlX2ZpbGUKKyAqICAgICAgVGVzdCBzdWl0ZSBkYXRhIDogJHRlc3RfY2FzZV9kYXRhCisgKgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSA8bWJlZHRscy9jb25maWcuaD4KKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQ29tbW9uIGhlbHBlciBjb2RlICovCisKKyR0ZXN0X2NvbW1vbl9oZWxwZXJzCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRlc3QgU3VpdGUgQ29kZSAqLworCiskc3VpdGVfcHJlX2NvZGUKKyRzdWl0ZV9oZWFkZXIKKyRzdWl0ZV9oZWxwZXJzCiskc3VpdGVfcG9zdF9jb2RlCisKK0VORAorCiskdGVzdF9tYWluID1+IHMvU1VJVEVfUFJFX0RFUC8kc3VpdGVfcHJlX2NvZGUvOworJHRlc3RfbWFpbiA9fiBzL1NVSVRFX1BPU1RfREVQLyRzdWl0ZV9wb3N0X2NvZGUvOworCit3aGlsZSgkdGVzdF9jYXNlcyA9fiAvXC9cKiBCRUdJTl9DQVNFICooW1x3Ol0qKSBcKlwvXG4oLio/KVxuXC9cKiBFTkRfQ0FTRSBcKlwvL21zZykKK3sKKyAgICBteSAkZnVuY3Rpb25fZGVwcyA9ICQxOworICAgIG15ICRmdW5jdGlvbl9kZWNsID0gJDI7CisKKyAgICAjIFNhbml0eSBjaGVja3Mgb2YgZnVuY3Rpb24KKyAgICBpZiAoJGZ1bmN0aW9uX2RlY2wgIX4gL14jbGluZVxzKi4qXG52b2lkIC8pCisgICAgeworICAgICAgICBkaWUgIlRlc3QgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSAndm9pZCcgYXMgcmV0dXJuIHR5cGUuXG4iIC4KKyAgICAgICAgICAgICJGdW5jdGlvbiBkZWNsYXJhdGlvbjpcbiIgLgorICAgICAgICAgICAgJGZ1bmN0aW9uX2RlY2w7CisgICAgfQorICAgIGlmICgkZnVuY3Rpb25fZGVjbCAhfiAvXigjbGluZVxzKi4qKVxudm9pZCAoXHcrKVwoXHMqKC4qPylccypcKVxzKnsoLiopfS9tcykKKyAgICB7CisgICAgICAgIGRpZSAiRnVuY3Rpb24gZGVjbGFyYXRpb24gbm90IGluIGV4cGVjdGVkIGZvcm1hdFxuIjsKKyAgICB9CisgICAgbXkgJGxpbmVfZGlyZWN0aXZlID0gJDE7CisgICAgbXkgJGZ1bmN0aW9uX25hbWUgPSAkMjsKKyAgICBteSAkZnVuY3Rpb25fcGFyYW1zID0gJDM7CisgICAgbXkgJGZ1bmN0aW9uX3ByZV9jb2RlOworICAgIG15ICRmdW5jdGlvbl9wb3N0X2NvZGU7CisgICAgbXkgJHBhcmFtX2RlZnM7CisgICAgbXkgJHBhcmFtX2NoZWNrczsKKyAgICBteSBAZGlzcGF0Y2hfcGFyYW1zOworICAgIG15IEB2YXJfZGVmX2FyciA9IHNwbGl0KC8sXHMqLywgJGZ1bmN0aW9uX3BhcmFtcyk7CisgICAgbXkgJGkgPSAxOworICAgIG15ICRtYXBwaW5nX3JlZ2V4ID0gIiIuJGZ1bmN0aW9uX25hbWU7CisgICAgbXkgJG1hcHBpbmdfY291bnQgPSAwOworCisgICAgJGZ1bmN0aW9uX2RlY2wgPX4gcy8oXiNsaW5lXHMqLiopXG52b2lkIC8kMVxudm9pZCB0ZXN0X3N1aXRlXy87CisKKyAgICAjIEFkZCBleGl0IGxhYmVsIGlmIG5vdCBwcmVzZW50CisgICAgaWYgKCRmdW5jdGlvbl9kZWNsICF+IC9eZXhpdDokL20pCisgICAgeworICAgICAgICAkZnVuY3Rpb25fZGVjbCA9fiBzL31ccyokL1xuZXhpdDpcbiAgICByZXR1cm47XG59LzsKKyAgICB9CisKKyAgICBpZiAoJGZ1bmN0aW9uX2RlcHMgPX4gL15kZXBlbmRzX29uOi8pCisgICAgeworICAgICAgICAoICRmdW5jdGlvbl9kZXBzICkgPSAkZnVuY3Rpb25fZGVwcyA9fiAvXmRlcGVuZHNfb246KC4qKSQvOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJHJlcSAoc3BsaXQoLzovLCAkZnVuY3Rpb25fZGVwcykpCisgICAgeworICAgICAgICAkZnVuY3Rpb25fcHJlX2NvZGUgLj0gIiNpZmRlZiAkcmVxXG4iOworICAgICAgICAkZnVuY3Rpb25fcG9zdF9jb2RlIC49ICIjZW5kaWYgLyogJHJlcSAqL1xuIjsKKyAgICB9CisKKyAgICBmb3JlYWNoIG15ICRkZWYgKEB2YXJfZGVmX2FycikKKyAgICB7CisgICAgICAgICMgSGFuZGxlIHRoZSBkaWZmZXJlbnQgcGFyYW1ldGVyIHR5cGVzCisgICAgICAgIGlmKCBzdWJzdHIoJGRlZiwgMCwgNCkgZXEgImludCAiICkKKyAgICAgICAgeworICAgICAgICAgICAgJHBhcmFtX2RlZnMgLj0gIiAgICBpbnQgcGFyYW0kaTtcbiI7CisgICAgICAgICAgICAkcGFyYW1fY2hlY2tzIC49ICIgICAgaWYoIHZlcmlmeV9pbnQoIHBhcmFtc1skaV0sICZwYXJhbSRpICkgIT0gMCApIHJldHVybiggRElTUEFUQ0hfSU5WQUxJRF9URVNUX0RBVEEgKTtcbiI7CisgICAgICAgICAgICBwdXNoIEBkaXNwYXRjaF9wYXJhbXMsICJwYXJhbSRpIjsKKworICAgICAgICAgICAgJG1hcHBpbmdfcmVnZXggLj0gIjooW1xcZFxcdyB8XFwrXFwtXFwoXFwpXSspIjsKKyAgICAgICAgICAgICRtYXBwaW5nX2NvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoIHN1YnN0cigkZGVmLCAwLCA2KSBlcSAiY2hhciAqIiApCisgICAgICAgIHsKKyAgICAgICAgICAgICRwYXJhbV9kZWZzIC49ICIgICAgY2hhciAqcGFyYW0kaSA9IHBhcmFtc1skaV07XG4iOworICAgICAgICAgICAgJHBhcmFtX2NoZWNrcyAuPSAiICAgIGlmKCB2ZXJpZnlfc3RyaW5nKCAmcGFyYW0kaSApICE9IDAgKSByZXR1cm4oIERJU1BBVENIX0lOVkFMSURfVEVTVF9EQVRBICk7XG4iOworICAgICAgICAgICAgcHVzaCBAZGlzcGF0Y2hfcGFyYW1zLCAicGFyYW0kaSI7CisgICAgICAgICAgICAkbWFwcGluZ19yZWdleCAuPSAiOlteOlxuXSsiOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGllICJQYXJhbWV0ZXIgZGVjbGFyYXRpb24gbm90IG9mIHN1cHBvcnRlZCB0eXBlIChpbnQsIGNoYXIgKilcbiI7CisgICAgICAgIH0KKyAgICAgICAgJGkrKzsKKworICAgIH0KKworICAgICMgRmluZCBub24taW50ZWdlciB2YWx1ZXMgd2Ugc2hvdWxkIG1hcCBmb3IgdGhpcyBmdW5jdGlvbgorICAgIGlmKCAkbWFwcGluZ19jb3VudCkKKyAgICB7CisgICAgICAgIG15IEByZXMgPSAkdGVzdF9kYXRhID1+IC9eJG1hcHBpbmdfcmVnZXgvbXNnOworICAgICAgICBmb3JlYWNoIG15ICR2YWx1ZSAoQHJlcykKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCR2YWx1ZSAhfiAvXlxkKyQvKTsKKyAgICAgICAgICAgIGlmICggJG1hcHBpbmdfdmFsdWVzeyR2YWx1ZX0gKSB7CisgICAgICAgICAgICAgICAgJHsgJG1hcHBpbmdfdmFsdWVzeyR2YWx1ZX0gfXskZnVuY3Rpb25fcHJlX2NvZGV9ID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJG1hcHBpbmdfdmFsdWVzeyR2YWx1ZX0gPSB7ICRmdW5jdGlvbl9wcmVfY29kZSA9PiAxIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBteSAkY2FsbF9wYXJhbXMgPSBqb2luICIsICIsIEBkaXNwYXRjaF9wYXJhbXM7CisgICAgbXkgJHBhcmFtX2NvdW50ID0gQHZhcl9kZWZfYXJyICsgMTsKKyAgICAkZGlzcGF0Y2hfY29kZSAuPSA8PCAiRU5EIjsKK2lmKCBzdHJjbXAoIHBhcmFtc1swXSwgIiRmdW5jdGlvbl9uYW1lIiApID09IDAgKQoreworJGZ1bmN0aW9uX3ByZV9jb2RlCiskcGFyYW1fZGVmcworICAgIGlmKCBjbnQgIT0gJHBhcmFtX2NvdW50ICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiXFxuSW5jb3JyZWN0IGFyZ3VtZW50IGNvdW50ICglZCAhPSAlZClcXG4iLCBjbnQsICRwYXJhbV9jb3VudCApOworICAgICAgICByZXR1cm4oIERJU1BBVENIX0lOVkFMSURfVEVTVF9EQVRBICk7CisgICAgfQorCiskcGFyYW1fY2hlY2tzCisgICAgdGVzdF9zdWl0ZV8kZnVuY3Rpb25fbmFtZSggJGNhbGxfcGFyYW1zICk7CisgICAgcmV0dXJuICggRElTUEFUQ0hfVEVTVF9TVUNDRVNTICk7CiskZnVuY3Rpb25fcG9zdF9jb2RlCisgICAgcmV0dXJuICggRElTUEFUQ0hfVU5TVVBQT1JURURfU1VJVEUgKTsKK30KK2Vsc2UKK0VORAorCisgICAgbXkgJGZ1bmN0aW9uX2NvZGUgPSAkZnVuY3Rpb25fcHJlX2NvZGUgLiAkZnVuY3Rpb25fZGVjbCAuICJcbiIgLgorICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uX3Bvc3RfY29kZTsKKyAgICAkdGVzdF9tYWluID1+IHMvRlVOQ1RJT05fQ09ERS8kZnVuY3Rpb25fY29kZVxuRlVOQ1RJT05fQ09ERS87Cit9CisKKyMgRmluZCBzcGVjaWZpYyBjYXNlIGRlcGVuZGVuY2llcyB0aGF0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGNoZWNrCisjIGFuZCBtYWtlIGNoZWNrIGNvZGUKK215ICRkZXBfY2hlY2tfY29kZTsKKworbXkgQHJlcyA9ICR0ZXN0X2RhdGEgPX4gL15kZXBlbmRzX29uOihbXHc6XSspL21zZzsKK215ICVjYXNlX2RlcHM7Citmb3JlYWNoIG15ICRkZXBzIChAcmVzKQoreworICAgIGZvcmVhY2ggbXkgJGRlcCAoc3BsaXQoLzovLCAkZGVwcykpCisgICAgeworICAgICAgICAkY2FzZV9kZXBzeyRkZXB9ID0gMTsKKyAgICB9Cit9Cit3aGlsZSggbXkgKCRrZXksICR2YWx1ZSkgPSBlYWNoKCVjYXNlX2RlcHMpICkKK3sKKyAgICAkZGVwX2NoZWNrX2NvZGUgLj0gPDwgIkVORCI7CisgICAgaWYoIHN0cmNtcCggc3RyLCAiJGtleSIgKSA9PSAwICkKKyAgICB7CisjaWYgZGVmaW5lZCgka2V5KQorICAgICAgICByZXR1cm4oIERFUEVOREVOQ1lfU1VQUE9SVEVEICk7CisjZWxzZQorICAgICAgICByZXR1cm4oIERFUEVOREVOQ1lfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmCisgICAgfQorRU5ECit9CisKKyMgTWFrZSBtYXBwaW5nIGNvZGUKK3doaWxlKCBteSAoJGtleSwgJHZhbHVlKSA9IGVhY2goJW1hcHBpbmdfdmFsdWVzKSApCit7CisgICAgbXkgJGtleV9tYXBwaW5nX2NvZGUgPSA8PCAiRU5EIjsKKyAgICBpZiggc3RyY21wKCBzdHIsICIka2V5IiApID09IDAgKQorICAgIHsKKyAgICAgICAgKnZhbHVlID0gKCAka2V5ICk7CisgICAgICAgIHJldHVybiggS0VZX1ZBTFVFX01BUFBJTkdfRk9VTkQgKTsKKyAgICB9CitFTkQKKworICAgICMgaGFuZGxlIGRlcGVuZW5jaWVzLCB1bmxlc3MgdXNlZCBhdCBsZWFzdCBvbmUgd2l0aG91dCBkZXBlbmRzCisgICAgaWYgKCR2YWx1ZS0+eyIifSkgeworICAgICAgICAkbWFwcGluZ19jb2RlIC49ICRrZXlfbWFwcGluZ19jb2RlOworICAgICAgICBuZXh0OworICAgIH0KKyAgICBmb3IgbXkgJGlmZGVmICgga2V5cyAlJHZhbHVlICkgeworICAgICAgICAobXkgJGVuZGlmID0gJGlmZGVmKSA9fiBzIWlmZGVmIWVuZGlmIC8vIWc7CisgICAgICAgICRtYXBwaW5nX2NvZGUgLj0gJGlmZGVmIC4gJGtleV9tYXBwaW5nX2NvZGUgLiAkZW5kaWY7CisgICAgfQorfQorCiskZGlzcGF0Y2hfY29kZSA9fiBzL14oLispLyAgICAkMS9tZzsKKworJHRlc3RfbWFpbiA9fiBzL1RFU1RDQVNFX0ZJTEVOQU1FLyR0ZXN0X2Nhc2VfZGF0YS9nOworJHRlc3RfbWFpbiA9fiBzL1RFU1RDT0RFX0ZJTEVOQU1FLyR0ZXN0X2Nhc2VfZmlsZS9nOworJHRlc3RfbWFpbiA9fiBzL0ZVTkNUSU9OX0NPREUvLzsKKyR0ZXN0X21haW4gPX4gcy9ERVBfQ0hFQ0tfQ09ERS8kZGVwX2NoZWNrX2NvZGUvOworJHRlc3RfbWFpbiA9fiBzL0RJU1BBVENIX0ZVTkNUSU9OLyRkaXNwYXRjaF9jb2RlLzsKKyR0ZXN0X21haW4gPX4gcy9NQVBQSU5HX0NPREUvJG1hcHBpbmdfY29kZS87CisKK3ByaW50IFRFU1RfRklMRSA8PCAiRU5EIjsKKyR0ZXN0X21haW4KK0VORAorCitjbG9zZShURVNUX0ZJTEUpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMva2V5LWV4Y2hhbmdlcy5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2tleS1leGNoYW5nZXMucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDY4MjZjMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2tleS1leGNoYW5nZXMucGwKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgdGVzdCB0aGF0IGFsbCBjb25maWdzIHdpdGggb25seSBhIHNpbmdsZSBrZXkgZXhjaGFuZ2UgZW5hYmxlZCBidWlsZAorIworIyBVc2FnZTogdGVzdHMvc2NyaXB0cy9rZXktZXhjaGFuZ2VzLnBsCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7CisKKy1kICdsaWJyYXJ5JyAmJiAtZCAnaW5jbHVkZScgJiYgLWQgJ3Rlc3RzJyBvciBkaWUgIk11c3QgYmUgcnVuIGZyb20gcm9vdFxuIjsKKworbXkgJHNlZF9jbWQgPSAncy9eI2RlZmluZSBcKE1CRURUTFNfS0VZX0VYQ0hBTkdFXy4qX0VOQUJMRURcKS9cMS9wJzsKK215ICRjb25maWdfaCA9ICdpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgnOworbXkgQGtleGVzID0gc3BsaXQoIC9ccysvLCBgc2VkIC1uIC1lICckc2VkX2NtZCcgJGNvbmZpZ19oYCApOworCitzeXN0ZW0oICJjcCAkY29uZmlnX2ggJGNvbmZpZ19oLmJhayIgKSBhbmQgZGllOworc3ViIGFib3J0IHsKKyAgICBzeXN0ZW0oICJtdiAkY29uZmlnX2guYmFrICRjb25maWdfaCIgKSBhbmQgd2FybiAiJGNvbmZpZ19oIG5vdCByZXN0b3JlZFxuIjsKKyAgICBkaWUgJF9bMF07Cit9CisKK2ZvciBteSAka2V4IChAa2V4ZXMpIHsKKyAgICBzeXN0ZW0oICJjcCAkY29uZmlnX2guYmFrICRjb25maWdfaCIgKSBhbmQgZGllICIkY29uZmlnX2ggbm90IHJlc3RvcmVkXG4iOworICAgIHN5c3RlbSggIm1ha2UgY2xlYW4iICkgYW5kIGRpZTsKKworICAgIHByaW50ICJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKKyAgICBwcmludCAiKiBUZXN0aW5nIHdpdGgga2V5IGV4Y2hhbmdlOiAka2V4XG4iOworICAgIHByaW50ICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7CisKKyAgICAjIGZ1bGwgY29uZmlnIHdpdGggYWxsIGtleSBleGNoYW5nZXMgZGlzYWJsZWQgZXhjZXB0IG9uZQorICAgIHN5c3RlbSggInNjcmlwdHMvY29uZmlnLnBsIGZ1bGwiICkgYW5kIGFib3J0ICJGYWlsZWQgY29uZmlnIGZ1bGxcbiI7CisgICAgZm9yIG15ICRrIChAa2V4ZXMpIHsKKyAgICAgICAgbmV4dCBpZiAkayBlcSAka2V4OworICAgICAgICBzeXN0ZW0oICJzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCAkayIgKQorICAgICAgICAgICAgYW5kIGFib3J0ICJGYWlsZWQgdG8gZGlzYWJsZSAka1xuIjsKKyAgICB9CisKKyAgICBzeXN0ZW0oICJtYWtlIGxpYiBDRkxBR1M9Jy1PcyAtV2Vycm9yJyIgKSBhbmQgYWJvcnQgIkZhaWxlZCB0byBidWlsZCBsaWI6ICRrZXhcbiI7Cit9CisKK3N5c3RlbSggIm12ICRjb25maWdfaC5iYWsgJGNvbmZpZ19oIiApIGFuZCBkaWUgIiRjb25maWdfaCBub3QgcmVzdG9yZWRcbiI7CitzeXN0ZW0oICJtYWtlIGNsZWFuIiApIGFuZCBkaWU7CitleGl0IDA7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9saXN0LWVudW0tY29uc3RzLnBsIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvbGlzdC1lbnVtLWNvbnN0cy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MzNlM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvbGlzdC1lbnVtLWNvbnN0cy5wbApAQCAtMCwwICsxLDM1IEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKKwordXNlIHV0Zjg7Cit1c2Ugb3BlbiBxdyg6c3RkIHV0ZjgpOworCistZCAnaW5jbHVkZS9tYmVkdGxzJyBvciBkaWUgIiQwOiBtdXN0IGJlIHJ1biBmcm9tIHJvb3RcbiI7CisKK0BBUkdWID0gZ3JlcCB7ICEgL2NvbXBhdC0xXC4zXC5oLyB9IDxpbmNsdWRlL21iZWR0bHMvKi5oPjsKKworbXkgQGNvbnN0czsKK215ICRzdGF0ZSA9ICdvdXQnOword2hpbGUgKDw+KQoreworICAgIGlmKCAkc3RhdGUgZXEgJ291dCcgYW5kIC9eKHR5cGVkZWYgKT9lbnVtIFx7LyApIHsKKyAgICAgICAgJHN0YXRlID0gJ2luJzsKKyAgICB9IGVsc2lmKCAkc3RhdGUgZXEgJ291dCcgYW5kIC9eKHR5cGVkZWYgKT9lbnVtLyApIHsKKyAgICAgICAgJHN0YXRlID0gJ3N0YXJ0JzsKKyAgICB9IGVsc2lmKCAkc3RhdGUgZXEgJ3N0YXJ0JyBhbmQgL3svICkgeworICAgICAgICAkc3RhdGUgPSAnaW4nOworICAgIH0gZWxzaWYoICRzdGF0ZSBlcSAnaW4nIGFuZCAvfS8gKSB7CisgICAgICAgICRzdGF0ZSA9ICdvdXQnOworICAgIH0gZWxzaWYoICRzdGF0ZSBlcSAnaW4nICkgeworICAgICAgICBzLz0uKi8vOyBzIS9cKi4qISE7IHMvLC4qLy87IHMvXHMrLy9nOyBjaG9tcDsKKyAgICAgICAgcHVzaCBAY29uc3RzLCAkXyBpZiAkXzsKKyAgICB9Cit9CisKK29wZW4gbXkgJGZoLCAnPicsICdlbnVtLWNvbnN0cycgb3IgZGllOworcHJpbnQgJGZoICIkX1xuIiBmb3Igc29ydCBAY29uc3RzOworY2xvc2UgJGZoIG9yIGRpZTsKKworcHJpbnRmICIlOGQgZW51bS1jb25zdHNcbiIsIHNjYWxhciBAY29uc3RzOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvbGlzdC1pZGVudGlmaWVycy5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2xpc3QtaWRlbnRpZmllcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTMwZDlkNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2xpc3QtaWRlbnRpZmllcnMuc2gKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK3NldCAtZXUKKworaWYgWyAtZCBpbmNsdWRlL21iZWR0bHMgXTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiJDA6IG11c3QgYmUgcnVuIGZyb20gcm9vdCIgPiYyCisgICAgZXhpdCAxCitmaQorCitIRUFERVJTPSQoIGxzIGluY2x1ZGUvbWJlZHRscy8qLmggfCBlZ3JlcCAtdiAnY29tcGF0LTFcLjNcLmh8Ym5fbXVsJyApCisKK3JtIC1mIGlkZW50aWZpZXJzCisKK2dyZXAgJ15bXiAvI3tdJyAkSEVBREVSUyB8IFwKKyAgICBzZWQgLWUgJ3MvXlteOl0qOi8vJyB8IFwKKyAgICBlZ3JlcCAtdiAnXihleHRlcm4gIkMifCh0eXBlZGVmICk/KHN0cnVjdHxlbnVtKSggeyk/JHx9Oz8kKScgXAorICAgID4gX2RlY2xzCisKK2lmIHRydWU7IHRoZW4KK3NlZCAtbiAtZSAncy8uKiBcKipcKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKSguKi9cMS9wJyBcCisgICAgICAgLWUgJ3MvLiooXCpcKC4qXCkpKC4qL1wxL3AnIF9kZWNscworZ3JlcCAtdiAnKCcgX2RlY2xzIHwgc2VkIC1lICdzL1woW2EtekEtWjAtOV9dKlwpWztbXS4qL1wxLycgLWUgJ3MvLiogXCoqLy8nCitmaSA+IF9pZGVudGlmaWVycworCitpZiBbICQoIHdjIC1sIDwgX2lkZW50aWZpZXJzICkgLWVxICQoIHdjIC1sIDwgX2RlY2xzICkgXTsgdGhlbgorICAgIHJtIF9kZWNscworICAgIGVncmVwIC12ICdeKHU/aW50KDE2fDMyfDY0KV90KSQnIF9pZGVudGlmaWVycyB8IHNvcnQgPiBpZGVudGlmaWVycworICAgIHJtIF9pZGVudGlmaWVycworZWxzZQorICAgIGVjaG8gIiQwOiBvb3BzLCBsb3N0IHNvbWUgaWRlbnRpZmllcnMiIDI+JjEKKyAgICBleGl0IDEKK2ZpCisKK3djIC1sIGlkZW50aWZpZXJzCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9saXN0LW1hY3Jvcy5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2xpc3QtbWFjcm9zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjODRhZGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9saXN0LW1hY3Jvcy5zaApAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworc2V0IC1ldQorCitpZiBbIC1kIGluY2x1ZGUvbWJlZHRscyBdOyB0aGVuIDo7IGVsc2UKKyAgICBlY2hvICIkMDogbXVzdCBiZSBydW4gZnJvbSByb290IiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK0hFQURFUlM9JCggbHMgaW5jbHVkZS9tYmVkdGxzLyouaCB8IGVncmVwIC12ICdjb21wYXQtMVwuM1wuaCcgKQorCitzZWQgLW4gLWUgJ3MvLiojZGVmaW5lIFwoW2EtekEtWjAtOV9dKlwpLiovXDEvcCcgJEhFQURFUlMgXAorICAgIHwgZWdyZXAgLXYgJ14oYXNtfGlubGluZXxFTUlUfF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSkkfF5NVUxBRERDXycgXAorICAgIHwgc29ydCAtdSA+IG1hY3JvcworCit3YyAtbCBtYWNyb3MKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2xpc3Qtc3ltYm9scy5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2xpc3Qtc3ltYm9scy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMjU4NzE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvbGlzdC1zeW1ib2xzLnNoCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWV1CisKK2lmIFsgLWQgaW5jbHVkZS9tYmVkdGxzIF07IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gIiQwOiBtdXN0IGJlIHJ1biBmcm9tIHJvb3QiID4mMgorICAgIGV4aXQgMQorZmkKKworaWYgZ3JlcCAtaSBjbWFrZSBNYWtlZmlsZSA+L2Rldi9udWxsOyB0aGVuCisgICAgZWNobyAiJDA6IG5vdCBjb21wYXRpYmxlIHdpdGggY21ha2UiID4mMgorICAgIGV4aXQgMQorZmkKKworY3AgaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oIGluY2x1ZGUvbWJlZHRscy9jb25maWcuaC5iYWsKK3NjcmlwdHMvY29uZmlnLnBsIGZ1bGwKK0NGTEFHUz0tZm5vLWFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIG1ha2UgY2xlYW4gbGliID4vZGV2L251bGwgMj4mMQorbXYgaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oLmJhayBpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgKK2lmIHVuYW1lIHwgZ3JlcCAtRiBEYXJ3aW4gPi9kZXYvbnVsbDsgdGhlbgorICAgIG5tIC1nVWogbGlicmFyeS9saWJtYmVkKi5hIDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICdzL15fLy9wJworZWxpZiB1bmFtZSB8IGdyZXAgLUYgTGludXggPi9kZXYvbnVsbDsgdGhlbgorICAgIG5tIC1vZyBsaWJyYXJ5L2xpYm1iZWQqLmEgfCBncmVwIC12ICdeW14gXSo6ICpVIFx8XiRcfF5bXiBdKjokJyB8IHNlZCAncy9eW14gXSogLiAvLycKK2ZpIHwgc29ydCA+IGV4cG9ydGVkLXN5bWJvbHMKK21ha2UgY2xlYW4KKword2MgLWwgZXhwb3J0ZWQtc3ltYm9scwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvcmVjdXJzaW9uLnBsIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvcmVjdXJzaW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNhZDQyYjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9yZWN1cnNpb24ucGwKQEAgLTAsMCArMSw0NCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgRmluZCBmdW5jdGlvbnMgbWFraW5nIHJlY3Vyc2l2ZSBjYWxscyB0byB0aGVtc2VsdmVzLgorIyAoTXVsdGlwbGUgcmVjdXJzaW9uIHdoZXJlIGEoKSBjYWxscyBiKCkgd2hpY2ggY2FsbHMgYSgpIG5vdCBjb3ZlcmVkLikKKyMKKyMgV2hlbiB0aGUgcmVjdXJzaW9uIGRlcHRoIG1pZ2h0IGRlcGVuZCBvbiBkYXRhIGNvbnRyb2xsZWQgYnkgdGhlIGF0dGFja2VyIGluCisjIGFuIHVuYm91bmRlZCB3YXksIHRob3NlIGZ1bmN0aW9ucyBzaG91bGQgdXNlIGludGVyYXRpb24gaW5zdGVhZC4KKyMKKyMgVHlwaWNhbCB1c2FnZTogc2NyaXB0cy9yZWN1cnNpb24ucGwgbGlicmFyeS8qLmMKKwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKKwordXNlIHV0Zjg7Cit1c2Ugb3BlbiBxdyg6c3RkIHV0ZjgpOworCisjIGV4Y2x1ZGUgZnVuY3Rpb25zIHRoYXQgYXJlIG9rOgorIyAtIG1waV93cml0ZV9obHA6IGJvdW5kZWQgYnkgc2l6ZSBvZiBtYmVkdGxzX21waSwgYSBjb21waWxlLXRpbWUgY29uc3RhbnQKKyMgLSB4NTA5X2NydF92ZXJpZnlfY2hpbGQ6IGJvdW5kZWQgYnkgTUJFRFRMU19YNTA5X01BWF9JTlRFUk1FRElBVEVfQ0EKK215ICRrbm93bl9vayA9IHFyL21waV93cml0ZV9obHB8eDUwOV9jcnRfdmVyaWZ5X2NoaWxkLzsKKworbXkgJGN1cl9uYW1lOworbXkgJGluc2lkZTsKK215IEBmdW5jczsKKworZGllICJVc2FnZTogJDAgZmlsZS5jIFsuLi5dXG4iIHVubGVzcyBAQVJHVjsKKword2hpbGUgKDw+KQoreworICAgIGlmKCAvXlteXC8je31cc10vICYmICEgL1xbLipdLyApIHsKKyAgICAgICAgY2hvbXAoICRjdXJfbmFtZSA9ICRfICkgdW5sZXNzICRpbnNpZGU7CisgICAgfSBlbHNpZiggL157LyAmJiAkY3VyX25hbWUgKSB7CisgICAgICAgICRpbnNpZGUgPSAxOworICAgICAgICAkY3VyX25hbWUgPX4gcy8uKiAoW14gXSopXCguKi8kMS87CisgICAgfSBlbHNpZiggL159LyAmJiAkaW5zaWRlICkgeworICAgICAgICB1bmRlZiAkaW5zaWRlOworICAgICAgICB1bmRlZiAkY3VyX25hbWU7CisgICAgfSBlbHNpZiggJGluc2lkZSAmJiAvXGJcUSRjdXJfbmFtZVxFXChbXildLyApIHsKKyAgICAgICAgcHVzaCBAZnVuY3MsICRjdXJfbmFtZSB1bmxlc3MgLyRrbm93bl9vay87CisgICAgfQorfQorCitwcmludCAiJF9cbiIgZm9yIEBmdW5jczsKK2V4aXQgQGZ1bmNzOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvcnVuLXRlc3Qtc3VpdGVzLnBsIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvcnVuLXRlc3Qtc3VpdGVzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4ZjgyN2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9ydW4tdGVzdC1zdWl0ZXMucGwKQEAgLTAsMCArMSw5NyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgcnVuLXRlc3Qtc3VpdGVzLnBsCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjIFB1cnBvc2UKKyMKKyMgRXhlY3V0ZXMgYWxsIHRoZSBhdmFpbGFibGUgdGVzdCBzdWl0ZXMsIGFuZCBwcm92aWRlcyBhIGJhc2ljIHN1bW1hcnkgb2YgdGhlCisjIHJlc3VsdHMuCisjCisjIFVzYWdlOiBydW4tdGVzdC1zdWl0ZXMucGwgWy12XQorIworIyBPcHRpb25zIDoKKyMgICAtdnwtLXZlcmJvc2UgICAgLSBQcm92aWRlIGEgcGFzcy9mYWlsL3NraXAgYnJlYWtkb3duIHBlciB0ZXN0IHN1aXRlIGFuZAorIyAgICAgICAgICAgICAgICAgICAgIGluIHRvdGFsCisjCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7CisKK3VzZSB1dGY4OwordXNlIG9wZW4gcXcoOnN0ZCB1dGY4KTsKKwordXNlIGNvbnN0YW50IEZBTFNFID0+IDA7Cit1c2UgY29uc3RhbnQgVFJVRSA9PiAxOworCitteSAkdmVyYm9zZTsKK215ICRzd2l0Y2ggPSBzaGlmdDsKK2lmICggZGVmaW5lZCgkc3dpdGNoKSAmJiAoICRzd2l0Y2ggZXEgIi12IiB8fCAkc3dpdGNoIGVxICItLXZlcmJvc2UiICkgKSB7CisgICAgJHZlcmJvc2UgPSBUUlVFOworfQorCitteSBAc3VpdGVzID0gZ3JlcCB7ICEgL1wuKD86Y3xnY25vfGdjZGF8ZFNZTSkkLyB9IGdsb2IgJ3Rlc3Rfc3VpdGVfKic7CitkaWUgIiQwOiBubyB0ZXN0IHN1aXRlIGZvdW5kXG4iIHVubGVzcyBAc3VpdGVzOworCisjIGluIGNhc2UgdGVzdCBzdWl0ZXMgYXJlIGxpbmtlZCBkeW5hbWljYWxseQorJEVOVnsnTERfTElCUkFSWV9QQVRIJ30gPSAnLi4vbGlicmFyeSc7CisKK215ICRwcmVmaXggPSAkXk8gZXEgIk1TV2luMzIiID8gJycgOiAnLi8nOworCitteSAoJGZhaWxlZF9zdWl0ZXMsICR0b3RhbF90ZXN0c19ydW4sICRmYWlsZWQsICRzdWl0ZV9jYXNlc19wYXNzZWQsCisgICAgJHN1aXRlX2Nhc2VzX2ZhaWxlZCwgJHN1aXRlX2Nhc2VzX3NraXBwZWQsICR0b3RhbF9jYXNlc19wYXNzZWQsCisgICAgJHRvdGFsX2Nhc2VzX2ZhaWxlZCwgJHRvdGFsX2Nhc2VzX3NraXBwZWQgKTsKKworZm9yIG15ICRzdWl0ZSAoQHN1aXRlcykKK3sKKyAgICBwcmludCAiJHN1aXRlICIsICIuIiB4ICggNzIgLSBsZW5ndGgoJHN1aXRlKSAtIDIgLSA0ICksICIgIjsKKyAgICBteSAkcmVzdWx0ID0gYCRwcmVmaXgkc3VpdGVgOworCisgICAgJHN1aXRlX2Nhc2VzX3Bhc3NlZCA9ICgpID0gJHJlc3VsdCA9fiAvLi4gUEFTUy9nOworICAgICRzdWl0ZV9jYXNlc19mYWlsZWQgPSAoKSA9ICRyZXN1bHQgPX4gLy4uIEZBSUxFRC9nOworICAgICRzdWl0ZV9jYXNlc19za2lwcGVkID0gKCkgPSAkcmVzdWx0ID1+IC8uLiAtLS0tL2c7CisKKyAgICBpZiggJHJlc3VsdCA9fiAvUEFTU0VELyApIHsKKyAgICAgICAgcHJpbnQgIlBBU1NcbiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJGZhaWxlZF9zdWl0ZXMrKzsKKyAgICAgICAgcHJpbnQgIkZBSUxcbiI7CisgICAgfQorCisgICAgbXkgKCRwYXNzZWQsICR0ZXN0cywgJHNraXBwZWQpID0gJHJlc3VsdCA9fiAvKFswLTldKikgXC8gKFswLTldKikgdGVzdHMuKj8oWzAtOV0qKSBza2lwcGVkLzsKKyAgICAkdG90YWxfdGVzdHNfcnVuICs9ICR0ZXN0cyAtICRza2lwcGVkOworCisgICAgaWYgKCAkdmVyYm9zZSApIHsKKyAgICAgICAgcHJpbnQgIih0ZXN0IGNhc2VzIHBhc3NlZDoiLCAkc3VpdGVfY2FzZXNfcGFzc2VkLAorICAgICAgICAgICAgICAgICIgZmFpbGVkOiIsICRzdWl0ZV9jYXNlc19mYWlsZWQsCisgICAgICAgICAgICAgICAgIiBza2lwcGVkOiIsICRzdWl0ZV9jYXNlc19za2lwcGVkLAorICAgICAgICAgICAgICAgICIgb2YgdG90YWw6IiwgKCRzdWl0ZV9jYXNlc19wYXNzZWQgKyAkc3VpdGVfY2FzZXNfZmFpbGVkICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3VpdGVfY2FzZXNfc2tpcHBlZCksCisgICAgICAgICAgICAgICAgIilcbiIKKyAgICB9CisKKyAgICAkdG90YWxfY2FzZXNfcGFzc2VkICs9ICRzdWl0ZV9jYXNlc19wYXNzZWQ7CisgICAgJHRvdGFsX2Nhc2VzX2ZhaWxlZCArPSAkc3VpdGVfY2FzZXNfZmFpbGVkOworICAgICR0b3RhbF9jYXNlc19za2lwcGVkICs9ICRzdWl0ZV9jYXNlc19za2lwcGVkOworfQorCitwcmludCAiLSIgeCA3MiwgIlxuIjsKK3ByaW50ICRmYWlsZWRfc3VpdGVzID8gIkZBSUxFRCIgOiAiUEFTU0VEIjsKK3ByaW50ZiAiICglZCBzdWl0ZXMsICVkIHRlc3RzIHJ1bilcbiIsIHNjYWxhciBAc3VpdGVzLCAkdG90YWxfdGVzdHNfcnVuOworCitpZiAoICR2ZXJib3NlICkgeworICAgIHByaW50ICIgIHRlc3QgY2FzZXMgcGFzc2VkIDoiLCAkdG90YWxfY2FzZXNfcGFzc2VkLCAiXG4iOworICAgIHByaW50ICIgICAgICAgICAgICAgZmFpbGVkIDoiLCAkdG90YWxfY2FzZXNfZmFpbGVkLCAiXG4iOworICAgIHByaW50ICIgICAgICAgICAgICBza2lwcGVkIDoiLCAkdG90YWxfY2FzZXNfc2tpcHBlZCwgIlxuIjsKKyAgICBwcmludCAiICBvZiB0ZXN0cyBleGVjdXRlZCA6IiwgKCAkdG90YWxfY2FzZXNfcGFzc2VkICsgJHRvdGFsX2Nhc2VzX2ZhaWxlZCApLAorICAgICAgICAgICAgIlxuIjsKKyAgICBwcmludCAiIG9mIGF2YWlsYWJsZSB0ZXN0cyA6IiwKKyAgICAgICAgICAgICggJHRvdGFsX2Nhc2VzX3Bhc3NlZCArICR0b3RhbF9jYXNlc19mYWlsZWQgKyAkdG90YWxfY2FzZXNfc2tpcHBlZCApLAorICAgICAgICAgICAgIlxuIgorICAgIH0KKworZXhpdCggJGZhaWxlZF9zdWl0ZXMgPyAxIDogMCApOworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy90ZXN0LXJlZi1jb25maWdzLnBsIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvdGVzdC1yZWYtY29uZmlncy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZjQ3MzhjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvdGVzdC1yZWYtY29uZmlncy5wbApAQCAtMCwwICsxLDk2IEBACisjIS91c3IvYmluL3BlcmwKKworIyB0ZXN0IHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zOgorIyAtIGJ1aWxkCisjIC0gcnVuIHRlc3Qgc3VpdGUKKyMgLSBydW4gY29tcGF0LnNoCisjCisjIFVzYWdlOiB0ZXN0cy9zY3JpcHRzL3Rlc3QtcmVmLWNvbmZpZ3MucGwgW2NvbmZpZy1uYW1lIFsuLi5dXQorCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OworCitteSAlY29uZmlncyA9ICgKKyAgICAnY29uZmlnLW1pbmktdGxzMV8xLmgnID0+IHsKKyAgICAgICAgJ2NvbXBhdCcgPT4gJy1tIHRsczFfMSAtZiBcJ15ERVMtQ0JDMy1TSEEkXHxeVExTLVJTQS1XSVRILTNERVMtRURFLUNCQy1TSEEkXCcnLAorICAgIH0sCisgICAgJ2NvbmZpZy1zdWl0ZS1iLmgnID0+IHsKKyAgICAgICAgJ2NvbXBhdCcgPT4gIi1tIHRsczFfMiAtZiAnRUNESEUtRUNEU0EuKkFFUy4qR0NNJyAtcCBtYmVkVExTIiwKKyAgICB9LAorICAgICdjb25maWctcGljb2NvaW4uaCcgPT4geworICAgIH0sCisgICAgJ2NvbmZpZy1jY20tcHNrLXRsczFfMi5oJyA9PiB7CisgICAgICAgICdjb21wYXQnID0+ICctbSB0bHMxXzIgLWYgXCdeVExTLVBTSy1XSVRILUFFUy0uLi4tQ0NNLThcJycsCisgICAgfSwKKyAgICAnY29uZmlnLXRocmVhZC5oJyA9PiB7CisgICAgICAgICdvcHQnID0+ICctZiBFQ0pQQUtFLipub2xvZycsCisgICAgfSwKKyk7CisKKyMgSWYgbm8gY29uZmlnLW5hbWUgaXMgcHJvdmlkZWQsIHVzZSBhbGwga25vd24gY29uZmlncy4KKyMgT3RoZXJ3aXNlLCB1c2UgdGhlIHByb3ZpZGVkIG5hbWVzIG9ubHkuCitpZiAoJCNBUkdWID49IDApIHsKKyAgICBteSAlY29uZmlnc19vcmkgPSAoICVjb25maWdzICk7CisgICAgJWNvbmZpZ3MgPSAoKTsKKworICAgIGZvcmVhY2ggbXkgJGNvbmZfbmFtZSAoQEFSR1YpIHsKKyAgICAgICAgaWYoICEgZXhpc3RzICRjb25maWdzX29yaXskY29uZl9uYW1lfSApIHsKKyAgICAgICAgICAgIGRpZSAiVW5rbm93biBjb25maWd1cmF0aW9uOiAkY29uZl9uYW1lXG4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGNvbmZpZ3N7JGNvbmZfbmFtZX0gPSAkY29uZmlnc19vcml7JGNvbmZfbmFtZX07CisgICAgICAgIH0KKyAgICB9Cit9CisKKy1kICdsaWJyYXJ5JyAmJiAtZCAnaW5jbHVkZScgJiYgLWQgJ3Rlc3RzJyBvciBkaWUgIk11c3QgYmUgcnVuIGZyb20gcm9vdFxuIjsKKworbXkgJGNvbmZpZ19oID0gJ2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCc7CisKK3N5c3RlbSggImNwICRjb25maWdfaCAkY29uZmlnX2guYmFrIiApIGFuZCBkaWU7CitzdWIgYWJvcnQgeworICAgIHN5c3RlbSggIm12ICRjb25maWdfaC5iYWsgJGNvbmZpZ19oIiApIGFuZCB3YXJuICIkY29uZmlnX2ggbm90IHJlc3RvcmVkXG4iOworICAgIGRpZSAkX1swXTsKK30KKword2hpbGUoIG15ICgkY29uZiwgJGRhdGEpID0gZWFjaCAlY29uZmlncyApIHsKKyAgICBzeXN0ZW0oICJjcCAkY29uZmlnX2guYmFrICRjb25maWdfaCIgKSBhbmQgZGllOworICAgIHN5c3RlbSggIm1ha2UgY2xlYW4iICkgYW5kIGRpZTsKKworICAgIHByaW50ICJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKKyAgICBwcmludCAiKiBUZXN0aW5nIGNvbmZpZ3VyYXRpb246ICRjb25mXG4iOworICAgIHByaW50ICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7CisKKyAgICBzeXN0ZW0oICJjcCBjb25maWdzLyRjb25mICRjb25maWdfaCIgKQorICAgICAgICBhbmQgYWJvcnQgIkZhaWxlZCB0byBhY3RpdmF0ZSAkY29uZlxuIjsKKworICAgIHN5c3RlbSggIm1ha2UgQ0ZMQUdTPSctT3MgLVdlcnJvciciICkgYW5kIGFib3J0ICJGYWlsZWQgdG8gYnVpbGQ6ICRjb25mXG4iOworICAgIHN5c3RlbSggIm1ha2UgdGVzdCIgKSBhbmQgYWJvcnQgIkZhaWxlZCB0ZXN0IHN1aXRlOiAkY29uZlxuIjsKKworICAgIG15ICRjb21wYXQgPSAkZGF0YS0+eydjb21wYXQnfTsKKyAgICBpZiggJGNvbXBhdCApCisgICAgeworICAgICAgICBwcmludCAiXG5ydW5uaW5nIGNvbXBhdC5zaCAkY29tcGF0XG4iOworICAgICAgICBzeXN0ZW0oICJ0ZXN0cy9jb21wYXQuc2ggJGNvbXBhdCIgKQorICAgICAgICAgICAgYW5kIGFib3J0ICJGYWlsZWQgY29tcGF0LnNoOiAkY29uZlxuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcHJpbnQgIlxuc2tpcHBpbmcgY29tcGF0LnNoXG4iOworICAgIH0KKworICAgIG15ICRvcHQgPSAkZGF0YS0+eydvcHQnfTsKKyAgICBpZiggJG9wdCApCisgICAgeworICAgICAgICBwcmludCAiXG5ydW5uaW5nIHNzbC1vcHQuc2ggJG9wdFxuIjsKKyAgICAgICAgc3lzdGVtKCAidGVzdHMvc3NsLW9wdC5zaCAkb3B0IiApCisgICAgICAgICAgICBhbmQgYWJvcnQgIkZhaWxlZCBzc2wtb3B0LnNoOiAkY29uZlxuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcHJpbnQgIlxuc2tpcHBpbmcgc3NsLW9wdC5zaFxuIjsKKyAgICB9Cit9CisKK3N5c3RlbSggIm12ICRjb25maWdfaC5iYWsgJGNvbmZpZ19oIiApIGFuZCB3YXJuICIkY29uZmlnX2ggbm90IHJlc3RvcmVkXG4iOworc3lzdGVtKCAibWFrZSBjbGVhbiIgKTsKK2V4aXQgMDsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL3RyYXZpcy1sb2ctZmFpbHVyZS5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL3RyYXZpcy1sb2ctZmFpbHVyZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODY2Y2E3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvdHJhdmlzLWxvZy1mYWlsdXJlLnNoCkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorCisjIHRyYXZpcy1sb2ctZmFpbHVyZS5zaAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBMaXN0IHRoZSBzZXJ2ZXIgYW5kIGNsaWVudCBsb2dzIG9uIGZhaWxlZCBzc2wtb3B0LnNoIGFuZCBjb21wYXQuc2ggdGVzdHMuCisjIFRoaXMgc2NyaXB0IGlzIHVzZWQgdG8gbWFrZSB0aGUgbG9ncyBzaG93IHVwIGluIHRoZSBUcmF2aXMgdGVzdCByZXN1bHRzLgorIworIyBTb21lIG9mIHRoZSBsb2dzIGNhbiBiZSB2ZXJ5IGxvbmc6IHRoaXMgbWVhbnMgdXN1YWxseSBhIGNvdXBsZSBvZiBtZWdhYnl0ZXMKKyMgYnV0IGl0IGNhbiBiZSBtdWNoIG1vcmUuIEZvciBleGFtcGxlLCB0aGUgY2xpZW50IGxvZyBvZiB0ZXN0IDI3MyBpbiBzc2wtb3B0LnNoCisjIGlzIG1vcmUgdGhhbiA2MzAgTWVnYWJ5dGVzIGxvbmcuCisKK2lmIFsgLWQgaW5jbHVkZS9tYmVkdGxzIF07IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gIiQwOiBtdXN0IGJlIHJ1biBmcm9tIHJvb3QiID4mMgorICAgIGV4aXQgMQorZmkKKworRklMRVM9Im8tc3J2LSoubG9nIG8tY2xpLSoubG9nIGMtc3J2LSoubG9nIGMtY2xpLSoubG9nIG8tcHh5LSoubG9nIgorTUFYX0xPR19TSVpFPTEwNDg1NzYKKworZm9yIFBBVFRFUk4gaW4gJEZJTEVTOyBkbworICAgIGZvciBMT0cgaW4gJCggbHMgdGVzdHMvJFBBVFRFUk4gMj4vZGV2L251bGwgKTsgZG8KKyAgICAgICAgZWNobworICAgICAgICBlY2hvICIqKioqKiogQkVHSU4gZmlsZTogJExPRyAqKioqKioiCisgICAgICAgIGVjaG8KKyAgICAgICAgdGFpbCAtYyAkTUFYX0xPR19TSVpFICRMT0cKKyAgICAgICAgZWNobyAiKioqKioqIEVORCBmaWxlOiAkTE9HICoqKioqKiIKKyAgICAgICAgZWNobworICAgICAgICBybSAkTE9HCisgICAgZG9uZQorZG9uZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMveW90dGEtYnVpbGQuc2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy95b3R0YS1idWlsZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YmFlMzRhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMveW90dGEtYnVpbGQuc2gKQEAgLTAsMCArMSw2MSBAQAorIyEvYmluL3NoCisKKyMgeW90dGEtYnVpbGQuc2gKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBUbyBydW4gdGVzdCBidWlsZHMgb2YgdGhlIHlvdHRhIG1vZHVsZSBmb3IgYWxsIHN1cHBvcnRlZCB0YXJnZXRzLgorCitzZXQgLWV1CisKK2NoZWNrX3Rvb2xzKCkKK3sKKyAgICBmb3IgVE9PTCBpbiAiJEAiOyBkbworICAgICAgICBpZiAhIGBoYXNoICIkVE9PTCIgPi9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgICAgICAgICAgZWNobyAiJFRPT0wgbm90IGZvdW5kISIgPiYyCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICBkb25lCit9CisKK3lvdHRhX2J1aWxkKCkKK3sKKyAgICBUQVJHRVQ9JDEKKworICAgIGVjaG87IGVjaG8gIioqKiAkVEFSR0VUIChyZWxlYXNlKSAqKioiCisgICAgeXQgLXQgJFRBUkdFVCBidWlsZAorCisgICAgZWNobzsgZWNobyAiKioqICRUQVJHRVQgKGRlYnVnKSAqKioiCisgICAgeXQgLXQgJFRBUkdFVCBidWlsZCAtZAorfQorCisjIE1ha2Ugc3VyZSB0aGUgdG9vbHMgd2UgbmVlZCBhcmUgYXZhaWxhYmxlLgorY2hlY2tfdG9vbHMgImFybS1ub25lLWVhYmktZ2NjIiAiYXJtY2MiICJ5b3R0YSIKKworeW90dGEvY3JlYXRlLW1vZHVsZS5zaAorY2QgeW90dGEvbW9kdWxlCit5dCB1cGRhdGUgfHwgdHJ1ZSAjIG5lZWRzIG5ldHdvcmsKKworaWYgdW5hbWUgLWEgfCBncmVwICdMaW51eC4qeDg2JyA+L2Rldi9udWxsOyB0aGVuCisgICAgeW90dGFfYnVpbGQgeDg2LWxpbnV4LW5hdGl2ZQorZmkKK2lmIHVuYW1lIC1hIHwgZ3JlcCAnRGFyd2luLip4ODYnID4vZGV2L251bGw7IHRoZW4KKyAgICB5b3R0YV9idWlsZCB4ODYtb3N4LW5hdGl2ZQorZmkKKworIyBhcm1jYyBidWlsZCB0ZXN0cy4KK3lvdHRhX2J1aWxkIGZyZG0tazY0Zi1hcm1jYworI3lvdHRhX2J1aWxkIG5vcmRpYy1ucmY1MTgyMi0xNmstYXJtY2MKKworIyBhcm0tbm9uZS1lYWJpLWdjYyBidWlsZCB0ZXN0cy4KK3lvdHRhX2J1aWxkIGZyZG0tazY0Zi1nY2MKKyN5b3R0YV9idWlsZCBzdC1udWNsZW8tZjQwMXJlLWdjYyAjIGRpcmVudAorI3lvdHRhX2J1aWxkIHN0bTMyZjQyOWktZGlzY28tZ2NjICMgZmFpbHMgaW4gbWJlZC1oYWwtc3Qtc3RtMzJmNAorI3lvdHRhX2J1aWxkIG5vcmRpYy1ucmY1MTgyMi0xNmstZ2NjICMgZmFpbHMgaW4gbWluYXItcGxhdGZvcm0KKyN5b3R0YV9idWlsZCBiYmMtbWljcm9iaXQtY2xhc3NpYy1nY2MgIyBmYWlscyBpbiBtaW5hci1wbGF0Zm9ybQorI3lvdHRhX2J1aWxkIHN0LXN0bTMyZjQzOXppLWdjYyAjIGZhaWxzIGluIG1iZWQtaGFsLXN0LXN0bTMyZjQKKyN5b3R0YV9idWlsZCBzdC1zdG0zMmY0MjlpLWRpc2NvLWdjYyAjIGZhaWxzIGluIG1iZWQtaGFsLXN0LXN0bTMyZjQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zc2wtb3B0LnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NzbC1vcHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTcxNTViOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zc2wtb3B0LnNoCkBAIC0wLDAgKzEsMzY2MSBAQAorIyEvYmluL3NoCisKKyMgc3NsLW9wdC5zaAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBFeGVjdXRlcyB0ZXN0cyB0byBwcm92ZSB2YXJpb3VzIFRMUy9TU0wgb3B0aW9ucyBhbmQgZXh0ZW5zaW9ucy4KKyMKKyMgVGhlIGdvYWwgaXMgbm90IHRvIGNvdmVyIGV2ZXJ5IGNpcGhlcnN1aXRlL3ZlcnNpb24sIGJ1dCBpbnN0ZWFkIHRvIGNvdmVyCisjIHNwZWNpZmljIG9wdGlvbnMgKG1heCBmcmFnbWVudCBsZW5ndGgsIHRydW5jYXRlZCBobWFjLCBldGMpIG9yIHByb2NlZHVyZXMKKyMgKHNlc3Npb24gcmVzdW1wdGlvbiBmcm9tIGNhY2hlIG9yIHRpY2tldCwgcmVuZWdvLCBldGMpLgorIworIyBUaGUgdGVzdHMgYXNzdW1lIGEgYnVpbGQgd2l0aCBkZWZhdWx0IG9wdGlvbnMsIHdpdGggZXhjZXB0aW9ucyBleHByZXNzZWQKKyMgd2l0aCBhIGRlcGVuZGVuY3kuICBUaGUgdGVzdHMgZm9jdXMgb24gZnVuY3Rpb25hbGl0eSBhbmQgZG8gbm90IGNvbnNpZGVyCisjIHBlcmZvcm1hbmNlLgorIworCitzZXQgLXUKKworIyBkZWZhdWx0IHZhbHVlcywgY2FuIGJlIG92ZXJyaWRlbiBieSB0aGUgZW52aXJvbm1lbnQKKzogJHtQX1NSVjo9Li4vcHJvZ3JhbXMvc3NsL3NzbF9zZXJ2ZXIyfQorOiAke1BfQ0xJOj0uLi9wcm9ncmFtcy9zc2wvc3NsX2NsaWVudDJ9Cis6ICR7UF9QWFk6PS4uL3Byb2dyYW1zL3Rlc3QvdWRwX3Byb3h5fQorOiAke09QRU5TU0xfQ01EOj1vcGVuc3NsfSAjIE9QRU5TU0wgd291bGQgY29uZmxpY3Qgd2l0aCB0aGUgYnVpbGQgc3lzdGVtCis6ICR7R05VVExTX0NMSTo9Z251dGxzLWNsaX0KKzogJHtHTlVUTFNfU0VSVjo9Z251dGxzLXNlcnZ9CisKK09fU1JWPSIkT1BFTlNTTF9DTUQgc19zZXJ2ZXIgLXd3dyAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIKK09fQ0xJPSJlY2hvICdHRVQgLyBIVFRQLzEuMCcgfCAkT1BFTlNTTF9DTUQgc19jbGllbnQiCitHX1NSVj0iJEdOVVRMU19TRVJWIC0teDUwOWNlcnRmaWxlIGRhdGFfZmlsZXMvc2VydmVyNS5jcnQgLS14NTA5a2V5ZmlsZSBkYXRhX2ZpbGVzL3NlcnZlcjUua2V5IgorR19DTEk9ImVjaG8gJ0dFVCAvIEhUVFAvMS4wJyB8ICRHTlVUTFNfQ0xJIC0teDUwOWNhZmlsZSBkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IgorCitURVNUUz0wCitGQUlMUz0wCitTS0lQUz0wCisKK0NPTkZJR19IPScuLi9pbmNsdWRlL21iZWR0bHMvY29uZmlnLmgnCisKK01FTUNIRUNLPTAKK0ZJTFRFUj0nLionCitFWENMVURFPSdeJCcKKworU0hPV19URVNUX05VTUJFUj0wCitSVU5fVEVTVF9OVU1CRVI9JycKKworUFJFU0VSVkVfTE9HUz0wCisKK3ByaW50X3VzYWdlKCkgeworICAgIGVjaG8gIlVzYWdlOiAkMCBbb3B0aW9uc10iCisgICAgcHJpbnRmICIgIC1ofC0taGVscFx0UHJpbnQgdGhpcyBoZWxwLlxuIgorICAgIHByaW50ZiAiICAtbXwtLW1lbWNoZWNrXHRDaGVjayBtZW1vcnkgbGVha3MgYW5kIGVycm9ycy5cbiIKKyAgICBwcmludGYgIiAgLWZ8LS1maWx0ZXJcdE9ubHkgbWF0Y2hpbmcgdGVzdHMgYXJlIGV4ZWN1dGVkIChkZWZhdWx0OiAnJEZJTFRFUicpXG4iCisgICAgcHJpbnRmICIgIC1lfC0tZXhjbHVkZVx0TWF0Y2hpbmcgdGVzdHMgYXJlIGV4Y2x1ZGVkIChkZWZhdWx0OiAnJEVYQ0xVREUnKVxuIgorICAgIHByaW50ZiAiICAtbnwtLW51bWJlclx0RXhlY3V0ZSBvbmx5IG51bWJlcmVkIHRlc3QgKGNvbW1hLXNlcGFyYXRlZCwgZS5nLiAnMjQ1LDI1NicpXG4iCisgICAgcHJpbnRmICIgIC1zfC0tc2hvdy1udW1iZXJzXHRTaG93IHRlc3QgbnVtYmVycyBpbiBmcm9udCBvZiB0ZXN0IG5hbWVzXG4iCisgICAgcHJpbnRmICIgIC1wfC0tcHJlc2VydmUtbG9nc1x0UHJlc2VydmUgbG9ncyBvZiBzdWNjZXNzZnVsIHRlc3RzIGFzIHdlbGxcbiIKKyAgICBwcmludGYgIiAgICAgLS1zZWVkXHRJbnRlZ2VyIHNlZWQgdmFsdWUgdG8gdXNlIGZvciB0aGlzIHRlc3QgcnVuXG4iCit9CisKK2dldF9vcHRpb25zKCkgeworICAgIHdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KKyAgICAgICAgY2FzZSAiJDEiIGluCisgICAgICAgICAgICAtZnwtLWZpbHRlcikKKyAgICAgICAgICAgICAgICBzaGlmdDsgRklMVEVSPSQxCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIC1lfC0tZXhjbHVkZSkKKyAgICAgICAgICAgICAgICBzaGlmdDsgRVhDTFVERT0kMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtbXwtLW1lbWNoZWNrKQorICAgICAgICAgICAgICAgIE1FTUNIRUNLPTEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgLW58LS1udW1iZXIpCisgICAgICAgICAgICAgICAgc2hpZnQ7IFJVTl9URVNUX05VTUJFUj0kMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtc3wtLXNob3ctbnVtYmVycykKKyAgICAgICAgICAgICAgICBTSE9XX1RFU1RfTlVNQkVSPTEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgLXB8LS1wcmVzZXJ2ZS1sb2dzKQorICAgICAgICAgICAgICAgIFBSRVNFUlZFX0xPR1M9MQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtLXNlZWQpCisgICAgICAgICAgICAgICAgc2hpZnQ7IFNFRUQ9IiQxIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtaHwtLWhlbHApCisgICAgICAgICAgICAgICAgcHJpbnRfdXNhZ2UKKyAgICAgICAgICAgICAgICBleGl0IDAKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBlY2hvICJVbmtub3duIGFyZ3VtZW50OiAnJDEnIgorICAgICAgICAgICAgICAgIHByaW50X3VzYWdlCisgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBzaGlmdAorICAgIGRvbmUKK30KKworIyBza2lwIG5leHQgdGVzdCBpZiB0aGUgZmxhZyBpcyBub3QgZW5hYmxlZCBpbiBjb25maWcuaAorcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQoKSB7CisgICAgaWYgZ3JlcCAiXiNkZWZpbmUgJDEiICRDT05GSUdfSCA+IC9kZXYvbnVsbDsgdGhlbiA6OyBlbHNlCisgICAgICAgIFNLSVBfTkVYVD0iWUVTIgorICAgIGZpCit9CisKKyMgc2tpcCBuZXh0IHRlc3QgaWYgT3BlblNTTCBkb2Vzbid0IHN1cHBvcnQgRkFMTEJBQ0tfU0NTVgorcmVxdWlyZXNfb3BlbnNzbF93aXRoX2ZhbGxiYWNrX3Njc3YoKSB7CisgICAgaWYgWyAteiAiJHtPUEVOU1NMX0hBU19GQlNDU1Y6LX0iIF07IHRoZW4KKyAgICAgICAgaWYgJE9QRU5TU0xfQ01EIHNfY2xpZW50IC1oZWxwIDI+JjEgfCBncmVwIGZhbGxiYWNrX3Njc3YgPi9kZXYvbnVsbAorICAgICAgICB0aGVuCisgICAgICAgICAgICBPUEVOU1NMX0hBU19GQlNDU1Y9IllFUyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgT1BFTlNTTF9IQVNfRkJTQ1NWPSJOTyIKKyAgICAgICAgZmkKKyAgICBmaQorICAgIGlmIFsgIiRPUEVOU1NMX0hBU19GQlNDU1YiID0gIk5PIiBdOyB0aGVuCisgICAgICAgIFNLSVBfTkVYVD0iWUVTIgorICAgIGZpCit9CisKKyMgc2tpcCBuZXh0IHRlc3QgaWYgR251VExTIGlzbid0IGF2YWlsYWJsZQorcmVxdWlyZXNfZ251dGxzKCkgeworICAgIGlmIFsgLXogIiR7R05VVExTX0FWQUlMQUJMRTotfSIgXTsgdGhlbgorICAgICAgICBpZiAoIHdoaWNoICIkR05VVExTX0NMSSIgJiYgd2hpY2ggIiRHTlVUTFNfU0VSViIgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICAgIEdOVVRMU19BVkFJTEFCTEU9IllFUyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgR05VVExTX0FWQUlMQUJMRT0iTk8iCisgICAgICAgIGZpCisgICAgZmkKKyAgICBpZiBbICIkR05VVExTX0FWQUlMQUJMRSIgPSAiTk8iIF07IHRoZW4KKyAgICAgICAgU0tJUF9ORVhUPSJZRVMiCisgICAgZmkKK30KKworIyBza2lwIG5leHQgdGVzdCBpZiBJUHY2IGlzbid0IGF2YWlsYWJsZSBvbiB0aGlzIGhvc3QKK3JlcXVpcmVzX2lwdjYoKSB7CisgICAgaWYgWyAteiAiJHtIQVNfSVBWNjotfSIgXTsgdGhlbgorICAgICAgICAkUF9TUlYgc2VydmVyX2FkZHI9Jzo6MScgPiAkU1JWX09VVCAyPiYxICYKKyAgICAgICAgU1JWX1BJRD0kIQorICAgICAgICBzbGVlcCAxCisgICAgICAgIGtpbGwgJFNSVl9QSUQgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgIGlmIGdyZXAgIk5FVCAtIEJpbmRpbmcgb2YgdGhlIHNvY2tldCBmYWlsZWQiICRTUlZfT1VUID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIEhBU19JUFY2PSJOTyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSEFTX0lQVjY9IllFUyIKKyAgICAgICAgZmkKKyAgICAgICAgcm0gLXIgJFNSVl9PVVQKKyAgICBmaQorCisgICAgaWYgWyAiJEhBU19JUFY2IiA9ICJOTyIgXTsgdGhlbgorICAgICAgICBTS0lQX05FWFQ9IllFUyIKKyAgICBmaQorfQorCisjIHNraXAgdGhlIG5leHQgdGVzdCBpZiB2YWxncmluZCBpcyBpbiB1c2UKK25vdF93aXRoX3ZhbGdyaW5kKCkgeworICAgIGlmIFsgIiRNRU1DSEVDSyIgLWd0IDAgXTsgdGhlbgorICAgICAgICBTS0lQX05FWFQ9IllFUyIKKyAgICBmaQorfQorCisjIHNraXAgdGhlIG5leHQgdGVzdCBpZiB2YWxncmluZCBpcyBOT1QgaW4gdXNlCitvbmx5X3dpdGhfdmFsZ3JpbmQoKSB7CisgICAgaWYgWyAiJE1FTUNIRUNLIiAtZXEgMCBdOyB0aGVuCisgICAgICAgIFNLSVBfTkVYVD0iWUVTIgorICAgIGZpCit9CisKKyMgbXVsdGlwbHkgdGhlIGNsaWVudCB0aW1lb3V0IGRlbGF5IGJ5IHRoZSBnaXZlbiBmYWN0b3IgZm9yIHRoZSBuZXh0IHRlc3QKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUoKSB7CisgICAgQ0xJX0RFTEFZX0ZBQ1RPUj0kMQorfQorCisjIHdhaXQgZm9yIHRoZSBnaXZlbiBzZWNvbmRzIGFmdGVyIHRoZSBjbGllbnQgZmluaXNoZWQgaW4gdGhlIG5leHQgdGVzdAorc2VydmVyX25lZWRzX21vcmVfdGltZSgpIHsKKyAgICBTUlZfREVMQVlfU0VDT05EUz0kMQorfQorCisjIHByaW50X25hbWUgPG5hbWU+CitwcmludF9uYW1lKCkgeworICAgIFRFU1RTPSQoKCAkVEVTVFMgKyAxICkpCisgICAgTElORT0iIgorCisgICAgaWYgWyAiJFNIT1dfVEVTVF9OVU1CRVIiIC1ndCAwIF07IHRoZW4KKyAgICAgICAgTElORT0iJFRFU1RTICIKKyAgICBmaQorCisgICAgTElORT0iJExJTkUkMSIKKyAgICBwcmludGYgIiRMSU5FICIKKyAgICBMRU49JCgoIDcyIC0gYGVjaG8gIiRMSU5FIiB8IHdjIC1jYCApKQorICAgIGZvciBpIGluIGBzZXEgMSAkTEVOYDsgZG8gcHJpbnRmICcuJzsgZG9uZQorICAgIHByaW50ZiAnICcKKworfQorCisjIGZhaWwgPG1lc3NhZ2U+CitmYWlsKCkgeworICAgIGVjaG8gIkZBSUwiCisgICAgZWNobyAiICAhICQxIgorCisgICAgbXYgJFNSVl9PVVQgby1zcnYtJHtURVNUU30ubG9nCisgICAgbXYgJENMSV9PVVQgby1jbGktJHtURVNUU30ubG9nCisgICAgaWYgWyAtbiAiJFBYWV9DTUQiIF07IHRoZW4KKyAgICAgICAgbXYgJFBYWV9PVVQgby1weHktJHtURVNUU30ubG9nCisgICAgZmkKKyAgICBlY2hvICIgICEgb3V0cHV0cyBzYXZlZCB0byBvLVhYWC0ke1RFU1RTfS5sb2ciCisKKyAgICBpZiBbICJYJHtVU0VSOi19IiA9IFhidWlsZGJvdCAtbyAiWCR7TE9HTkFNRTotfSIgPSBYYnVpbGRib3QgXTsgdGhlbgorICAgICAgICBlY2hvICIgICEgc2VydmVyIG91dHB1dDoiCisgICAgICAgIGNhdCBvLXNydi0ke1RFU1RTfS5sb2cKKyAgICAgICAgZWNobyAiICAhID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorICAgICAgICBlY2hvICIgICEgY2xpZW50IG91dHB1dDoiCisgICAgICAgIGNhdCBvLWNsaS0ke1RFU1RTfS5sb2cKKyAgICAgICAgaWYgWyAtbiAiJFBYWV9DTUQiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiAgISA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKyAgICAgICAgICAgIGVjaG8gIiAgISBwcm94eSBvdXRwdXQ6IgorICAgICAgICAgICAgY2F0IG8tcHh5LSR7VEVTVFN9LmxvZworICAgICAgICBmaQorICAgICAgICBlY2hvICIiCisgICAgZmkKKworICAgIEZBSUxTPSQoKCAkRkFJTFMgKyAxICkpCit9CisKKyMgaXNfcG9sYXIgPGNtZF9saW5lPgoraXNfcG9sYXIoKSB7CisgICAgZWNobyAiJDEiIHwgZ3JlcCAnc3NsX3NlcnZlcjJcfHNzbF9jbGllbnQyJyA+IC9kZXYvbnVsbAorfQorCisjIG9wZW5zc2wgc19zZXJ2ZXIgZG9lc24ndCBoYXZlIC13d3cgd2l0aCBEVExTCitjaGVja19vc3J2X2R0bHMoKSB7CisgICAgaWYgZWNobyAiJFNSVl9DTUQiIHwgZ3JlcCAnc19zZXJ2ZXIuKi1kdGxzJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIE5FRURTX0lOUFVUPTEKKyAgICAgICAgU1JWX0NNRD0iJCggZWNobyAkU1JWX0NNRCB8IHNlZCBzLy13d3cvLyApIgorICAgIGVsc2UKKyAgICAgICAgTkVFRFNfSU5QVVQ9MAorICAgIGZpCit9CisKKyMgcHJvdmlkZSBpbnB1dCB0byBjb21tYW5kcyB0aGF0IG5lZWQgaXQKK3Byb3ZpZGVfaW5wdXQoKSB7CisgICAgaWYgWyAkTkVFRFNfSU5QVVQgLWVxIDAgXTsgdGhlbgorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICAgICAgZWNobyAiSFRUUC8xLjAgMjAwIE9LIgorICAgICAgICBzbGVlcCAxCisgICAgZG9uZQorfQorCisjIGhhc19tZW1fZXJyIDxsb2dfZmlsZV9uYW1lPgoraGFzX21lbV9lcnIoKSB7CisgICAgaWYgKCBncmVwIC1GICdBbGwgaGVhcCBibG9ja3Mgd2VyZSBmcmVlZCAtLSBubyBsZWFrcyBhcmUgcG9zc2libGUnICIkMSIgJiYKKyAgICAgICAgIGdyZXAgLUYgJ0VSUk9SIFNVTU1BUlk6IDAgZXJyb3JzIGZyb20gMCBjb250ZXh0cycgIiQxIiApID4gL2Rldi9udWxsCisgICAgdGhlbgorICAgICAgICByZXR1cm4gMSAjIGZhbHNlOiBkb2VzIG5vdCBoYXZlIGVycm9ycworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDAgIyB0cnVlOiBoYXMgZXJyb3JzCisgICAgZmkKK30KKworIyB3YWl0IGZvciBzZXJ2ZXIgdG8gc3RhcnQ6IHR3byB2ZXJzaW9ucyBkZXBlbmRpbmcgb24gbHNvZiBhdmFpbGFiaWxpdHkKK3dhaXRfc2VydmVyX3N0YXJ0KCkgeworICAgIGlmIHdoaWNoIGxzb2YgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIFNUQVJUX1RJTUU9JCggZGF0ZSArJXMgKQorICAgICAgICBET05FPTAKKworICAgICAgICAjIG1ha2UgYSB0aWdodCBsb29wLCBzZXJ2ZXIgdXN1YWxseSB0YWtlcyBsZXNzIHRoYW4gMSBzZWMgdG8gc3RhcnQKKyAgICAgICAgaWYgWyAiJERUTFMiIC1lcSAxIF07IHRoZW4KKyAgICAgICAgICAgIHdoaWxlIFsgJERPTkUgLWVxIDAgXTsgZG8KKyAgICAgICAgICAgICAgICBpZiBsc29mIC1uYmkgVURQOiIkU1JWX1BPUlQiIDI+L2Rldi9udWxsIHwgZ3JlcCBVRFAgPi9kZXYvbnVsbAorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgRE9ORT0xCisgICAgICAgICAgICAgICAgZWxpZiBbICQoKCAkKCBkYXRlICslcyApIC0gJFNUQVJUX1RJTUUgKSkgLWd0ICRET0dfREVMQVkgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICJTRVJWRVJTVEFSVCBUSU1FT1VUIgorICAgICAgICAgICAgICAgICAgICBlY2hvICJTRVJWRVJTVEFSVCBUSU1FT1VUIiA+PiAkU1JWX09VVAorICAgICAgICAgICAgICAgICAgICBET05FPTEKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBlbHNlCisgICAgICAgICAgICB3aGlsZSBbICRET05FIC1lcSAwIF07IGRvCisgICAgICAgICAgICAgICAgaWYgbHNvZiAtbmJpIFRDUDoiJFNSVl9QT1JUIiAyPi9kZXYvbnVsbCB8IGdyZXAgTElTVEVOID4vZGV2L251bGwKKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgIERPTkU9MQorICAgICAgICAgICAgICAgIGVsaWYgWyAkKCggJCggZGF0ZSArJXMgKSAtICRTVEFSVF9USU1FICkpIC1ndCAkRE9HX0RFTEFZIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZWNobyAiU0VSVkVSU1RBUlQgVElNRU9VVCIKKyAgICAgICAgICAgICAgICAgICAgZWNobyAiU0VSVkVSU1RBUlQgVElNRU9VVCIgPj4gJFNSVl9PVVQKKyAgICAgICAgICAgICAgICAgICAgRE9ORT0xCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgIHNsZWVwICIkU1RBUlRfREVMQVkiCisgICAgZmkKK30KKworIyB3YWl0IGZvciBjbGllbnQgdG8gdGVybWluYXRlIGFuZCBzZXQgQ0xJX0VYSVQKKyMgbXVzdCBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgc3RhcnRpbmcgdGhlIGNsaWVudAord2FpdF9jbGllbnRfZG9uZSgpIHsKKyAgICBDTElfUElEPSQhCisKKyAgICBDTElfREVMQVk9JCgoICRET0dfREVMQVkgKiAkQ0xJX0RFTEFZX0ZBQ1RPUiApKQorICAgIENMSV9ERUxBWV9GQUNUT1I9MQorCisgICAgKCBzbGVlcCAkQ0xJX0RFTEFZOyBlY2hvICI9PT1DTElFTlRfVElNRU9VVD09PSIgPj4gJENMSV9PVVQ7IGtpbGwgJENMSV9QSUQgKSAmCisgICAgRE9HX1BJRD0kIQorCisgICAgd2FpdCAkQ0xJX1BJRAorICAgIENMSV9FWElUPSQ/CisKKyAgICBraWxsICRET0dfUElEID4vZGV2L251bGwgMj4mMQorICAgIHdhaXQgJERPR19QSUQKKworICAgIGVjaG8gIkVYSVQ6ICRDTElfRVhJVCIgPj4gJENMSV9PVVQKKworICAgIHNsZWVwICRTUlZfREVMQVlfU0VDT05EUworICAgIFNSVl9ERUxBWV9TRUNPTkRTPTAKK30KKworIyBjaGVjayBpZiB0aGUgZ2l2ZW4gY29tbWFuZCB1c2VzIGR0bHMgYW5kIHNldHMgZ2xvYmFsIHZhcmlhYmxlIERUTFMKK2RldGVjdF9kdGxzKCkgeworICAgIGlmIGVjaG8gIiQxIiB8IGdyZXAgJ2R0bHM9MVx8LWR0bHMxXHwtdScgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBEVExTPTEKKyAgICBlbHNlCisgICAgICAgIERUTFM9MAorICAgIGZpCit9CisKKyMgVXNhZ2U6IHJ1bl90ZXN0IG5hbWUgWy1wIHByb3h5X2NtZF0gc3J2X2NtZCBjbGlfY21kIGNsaV9leGl0IFtvcHRpb24gWy4uLl1dCisjIE9wdGlvbnM6ICAtcyBwYXR0ZXJuICBwYXR0ZXJuIHRoYXQgbXVzdCBiZSBwcmVzZW50IGluIHNlcnZlciBvdXRwdXQKKyMgICAgICAgICAgIC1jIHBhdHRlcm4gIHBhdHRlcm4gdGhhdCBtdXN0IGJlIHByZXNlbnQgaW4gY2xpZW50IG91dHB1dAorIyAgICAgICAgICAgLXUgcGF0dGVybiAgbGluZXMgYWZ0ZXIgcGF0dGVybiBtdXN0IGJlIHVuaXF1ZSBpbiBjbGllbnQgb3V0cHV0CisjICAgICAgICAgICAtUyBwYXR0ZXJuICBwYXR0ZXJuIHRoYXQgbXVzdCBiZSBhYnNlbnQgaW4gc2VydmVyIG91dHB1dAorIyAgICAgICAgICAgLUMgcGF0dGVybiAgcGF0dGVybiB0aGF0IG11c3QgYmUgYWJzZW50IGluIGNsaWVudCBvdXRwdXQKKyMgICAgICAgICAgIC1VIHBhdHRlcm4gIGxpbmVzIGFmdGVyIHBhdHRlcm4gbXVzdCBiZSB1bmlxdWUgaW4gc2VydmVyIG91dHB1dAorcnVuX3Rlc3QoKSB7CisgICAgTkFNRT0iJDEiCisgICAgc2hpZnQgMQorCisgICAgaWYgZWNobyAiJE5BTUUiIHwgZ3JlcCAiJEZJTFRFUiIgfCBncmVwIC12ICIkRVhDTFVERSIgPi9kZXYvbnVsbDsgdGhlbiA6CisgICAgZWxzZQorICAgICAgICBTS0lQX05FWFQ9Ik5PIgorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgcHJpbnRfbmFtZSAiJE5BTUUiCisKKyAgICAjIERvIHdlIG9ubHkgcnVuIG51bWJlcmVkIHRlc3RzPworICAgIGlmIFsgIlgkUlVOX1RFU1RfTlVNQkVSIiA9ICJYIiBdOyB0aGVuIDoKKyAgICBlbGlmIGVjaG8gIiwkUlVOX1RFU1RfTlVNQkVSLCIgfCBncmVwICIsJFRFU1RTLCIgPi9kZXYvbnVsbDsgdGhlbiA6CisgICAgZWxzZQorICAgICAgICBTS0lQX05FWFQ9IllFUyIKKyAgICBmaQorCisgICAgIyBzaG91bGQgd2Ugc2tpcD8KKyAgICBpZiBbICJYJFNLSVBfTkVYVCIgPSAiWFlFUyIgXTsgdGhlbgorICAgICAgICBTS0lQX05FWFQ9Ik5PIgorICAgICAgICBlY2hvICJTS0lQIgorICAgICAgICBTS0lQUz0kKCggJFNLSVBTICsgMSApKQorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgIyBkb2VzIHRoaXMgdGVzdCB1c2UgYSBwcm94eT8KKyAgICBpZiBbICJYJDEiID0gIlgtcCIgXTsgdGhlbgorICAgICAgICBQWFlfQ01EPSIkMiIKKyAgICAgICAgc2hpZnQgMgorICAgIGVsc2UKKyAgICAgICAgUFhZX0NNRD0iIgorICAgIGZpCisKKyAgICAjIGdldCBjb21tYW5kcyBhbmQgY2xpZW50IG91dHB1dAorICAgIFNSVl9DTUQ9IiQxIgorICAgIENMSV9DTUQ9IiQyIgorICAgIENMSV9FWFBFQ1Q9IiQzIgorICAgIHNoaWZ0IDMKKworICAgICMgZml4IGNsaWVudCBwb3J0CisgICAgaWYgWyAtbiAiJFBYWV9DTUQiIF07IHRoZW4KKyAgICAgICAgQ0xJX0NNRD0kKCBlY2hvICIkQ0xJX0NNRCIgfCBzZWQgcy8rU1JWX1BPUlQvJFBYWV9QT1JUL2cgKQorICAgIGVsc2UKKyAgICAgICAgQ0xJX0NNRD0kKCBlY2hvICIkQ0xJX0NNRCIgfCBzZWQgcy8rU1JWX1BPUlQvJFNSVl9QT1JUL2cgKQorICAgIGZpCisKKyAgICAjIHVwZGF0ZSBEVExTIHZhcmlhYmxlCisgICAgZGV0ZWN0X2R0bHMgIiRTUlZfQ01EIgorCisgICAgIyBwcmVwZW5kIHZhbGdyaW5kIHRvIG91ciBjb21tYW5kcyBpZiBhY3RpdmUKKyAgICBpZiBbICIkTUVNQ0hFQ0siIC1ndCAwIF07IHRoZW4KKyAgICAgICAgaWYgaXNfcG9sYXIgIiRTUlZfQ01EIjsgdGhlbgorICAgICAgICAgICAgU1JWX0NNRD0idmFsZ3JpbmQgLS1sZWFrLWNoZWNrPWZ1bGwgJFNSVl9DTUQiCisgICAgICAgIGZpCisgICAgICAgIGlmIGlzX3BvbGFyICIkQ0xJX0NNRCI7IHRoZW4KKyAgICAgICAgICAgIENMSV9DTUQ9InZhbGdyaW5kIC0tbGVhay1jaGVjaz1mdWxsICRDTElfQ01EIgorICAgICAgICBmaQorICAgIGZpCisKKyAgICBUSU1FU19MRUZUPTIKKyAgICB3aGlsZSBbICRUSU1FU19MRUZUIC1ndCAwIF07IGRvCisgICAgICAgIFRJTUVTX0xFRlQ9JCgoICRUSU1FU19MRUZUIC0gMSApKQorCisgICAgICAgICMgcnVuIHRoZSBjb21tYW5kcworICAgICAgICBpZiBbIC1uICIkUFhZX0NNRCIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiJFBYWV9DTUQiID4gJFBYWV9PVVQKKyAgICAgICAgICAgICRQWFlfQ01EID4+ICRQWFlfT1VUIDI+JjEgJgorICAgICAgICAgICAgUFhZX1BJRD0kIQorICAgICAgICAgICAgIyBhc3N1bWUgcHJveHkgc3RhcnRzIGZhc3RlciB0aGFuIHNlcnZlcgorICAgICAgICBmaQorCisgICAgICAgIGNoZWNrX29zcnZfZHRscworICAgICAgICBlY2hvICIkU1JWX0NNRCIgPiAkU1JWX09VVAorICAgICAgICBwcm92aWRlX2lucHV0IHwgJFNSVl9DTUQgPj4gJFNSVl9PVVQgMj4mMSAmCisgICAgICAgIFNSVl9QSUQ9JCEKKyAgICAgICAgd2FpdF9zZXJ2ZXJfc3RhcnQKKworICAgICAgICBlY2hvICIkQ0xJX0NNRCIgPiAkQ0xJX09VVAorICAgICAgICBldmFsICIkQ0xJX0NNRCIgPj4gJENMSV9PVVQgMj4mMSAmCisgICAgICAgIHdhaXRfY2xpZW50X2RvbmUKKworICAgICAgICAjIHRlcm1pbmF0ZSB0aGUgc2VydmVyIChhbmQgdGhlIHByb3h5KQorICAgICAgICBraWxsICRTUlZfUElECisgICAgICAgIHdhaXQgJFNSVl9QSUQKKyAgICAgICAgaWYgWyAtbiAiJFBYWV9DTUQiIF07IHRoZW4KKyAgICAgICAgICAgIGtpbGwgJFBYWV9QSUQgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgICAgICB3YWl0ICRQWFlfUElECisgICAgICAgIGZpCisKKyAgICAgICAgIyByZXRyeSBvbmx5IG9uIHRpbWVvdXRzCisgICAgICAgIGlmIGdyZXAgJz09PUNMSUVOVF9USU1FT1VUPT09JyAkQ0xJX09VVCA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBwcmludGYgIlJFVFJZICIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgVElNRVNfTEVGVD0wCisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgIyBjaGVjayBpZiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgd2VudCBhdCBsZWFzdCB0byB0aGUgaGFuZHNoYWtlIHN0YWdlCisgICAgIyAodXNlZnVsIHRvIGF2b2lkIHRlc3RzIHdpdGggb25seSBuZWdhdGl2ZSBhc3NlcnRpb25zIGFuZCBub24temVybworICAgICMgZXhwZWN0ZWQgY2xpZW50IGV4aXQgdG8gaW5jb3JyZWN0bHkgc3VjY2VlZCBpbiBjYXNlIG9mIGNhdGFzdHJvcGhpYworICAgICMgZmFpbHVyZSkKKyAgICBpZiBpc19wb2xhciAiJFNSVl9DTUQiOyB0aGVuCisgICAgICAgIGlmIGdyZXAgIlBlcmZvcm1pbmcgdGhlIFNTTC9UTFMgaGFuZHNoYWtlIiAkU1JWX09VVCA+L2Rldi9udWxsOyB0aGVuIDo7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZhaWwgInNlcnZlciBvciBjbGllbnQgZmFpbGVkIHRvIHJlYWNoIGhhbmRzaGFrZSBzdGFnZSIKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmaQorICAgIGZpCisgICAgaWYgaXNfcG9sYXIgIiRDTElfQ01EIjsgdGhlbgorICAgICAgICBpZiBncmVwICJQZXJmb3JtaW5nIHRoZSBTU0wvVExTIGhhbmRzaGFrZSIgJENMSV9PVVQgPi9kZXYvbnVsbDsgdGhlbiA6OworICAgICAgICBlbHNlCisgICAgICAgICAgICBmYWlsICJzZXJ2ZXIgb3IgY2xpZW50IGZhaWxlZCB0byByZWFjaCBoYW5kc2hha2Ugc3RhZ2UiCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyBjaGVjayBzZXJ2ZXIgZXhpdCBjb2RlCisgICAgaWYgWyAkPyAhPSAwIF07IHRoZW4KKyAgICAgICAgZmFpbCAic2VydmVyIGZhaWwiCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICAjIGNoZWNrIGNsaWVudCBleGl0IGNvZGUKKyAgICBpZiBbIFwoICIkQ0xJX0VYUEVDVCIgPSAwIC1hICIkQ0xJX0VYSVQiICE9IDAgXCkgLW8gXAorICAgICAgICAgXCggIiRDTElfRVhQRUNUIiAhPSAwIC1hICIkQ0xJX0VYSVQiID0gMCBcKSBdCisgICAgdGhlbgorICAgICAgICBmYWlsICJiYWQgY2xpZW50IGV4aXQgY29kZSAoZXhwZWN0ZWQgJENMSV9FWFBFQ1QsIGdvdCAkQ0xJX0VYSVQpIgorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgIyBjaGVjayBvdGhlciBhc3NlcnRpb25zCisgICAgIyBsaW5lcyBiZWdpbm5pbmcgd2l0aCA9PSBhcmUgYWRkZWQgYnkgdmFsZ3JpbmQsIGlnbm9yZSB0aGVtCisgICAgIyBsaW5lcyB3aXRoICdTZXJpb3VzIGVycm9yIHdoZW4gcmVhZGluZyBkZWJ1ZyBpbmZvJywgYXJlIHZhbGdyaW5kIGlzc3VlcyBhcyB3ZWxsCisgICAgd2hpbGUgWyAkIyAtZ3QgMCBdCisgICAgZG8KKyAgICAgICAgY2FzZSAkMSBpbgorICAgICAgICAgICAgIi1zIikKKyAgICAgICAgICAgICAgICBpZiBncmVwIC12ICdePT0nICRTUlZfT1VUIHwgZ3JlcCAtdiAnU2VyaW91cyBlcnJvciB3aGVuIHJlYWRpbmcgZGVidWcgaW5mbycgfCBncmVwICIkMiIgPi9kZXYvbnVsbDsgdGhlbiA6OyBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZhaWwgInBhdHRlcm4gJyQyJyBNVVNUIGJlIHByZXNlbnQgaW4gdGhlIFNlcnZlciBvdXRwdXQiCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgIi1jIikKKyAgICAgICAgICAgICAgICBpZiBncmVwIC12ICdePT0nICRDTElfT1VUIHwgZ3JlcCAtdiAnU2VyaW91cyBlcnJvciB3aGVuIHJlYWRpbmcgZGVidWcgaW5mbycgfCBncmVwICIkMiIgPi9kZXYvbnVsbDsgdGhlbiA6OyBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZhaWwgInBhdHRlcm4gJyQyJyBNVVNUIGJlIHByZXNlbnQgaW4gdGhlIENsaWVudCBvdXRwdXQiCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgIi1TIikKKyAgICAgICAgICAgICAgICBpZiBncmVwIC12ICdePT0nICRTUlZfT1VUIHwgZ3JlcCAtdiAnU2VyaW91cyBlcnJvciB3aGVuIHJlYWRpbmcgZGVidWcgaW5mbycgfCBncmVwICIkMiIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmYWlsICJwYXR0ZXJuICckMicgTVVTVCBOT1QgYmUgcHJlc2VudCBpbiB0aGUgU2VydmVyIG91dHB1dCIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAiLUMiKQorICAgICAgICAgICAgICAgIGlmIGdyZXAgLXYgJ149PScgJENMSV9PVVQgfCBncmVwIC12ICdTZXJpb3VzIGVycm9yIHdoZW4gcmVhZGluZyBkZWJ1ZyBpbmZvJyB8IGdyZXAgIiQyIiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGZhaWwgInBhdHRlcm4gJyQyJyBNVVNUIE5PVCBiZSBwcmVzZW50IGluIHRoZSBDbGllbnQgb3V0cHV0IgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAjIFRoZSBmaWx0ZXJpbmcgaW4gdGhlIGZvbGxvd2luZyB0d28gb3B0aW9ucyAoLXUgYW5kIC1VKSBkbyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgIyAgIC0gaWdub3JlIHZhbGdyaW5kIG91dHB1dAorICAgICAgICAgICAgICAgICMgICAtIGZpbHRlciBvdXQgZXZlcnl0aGluZyBidXQgbGluZXMgcmlnaHQgYWZ0ZXIgdGhlIHBhdHRlcm4gb2NjdXJhbmNlcworICAgICAgICAgICAgICAgICMgICAtIGtlZXAgb25lIG9mIGVhY2ggbm9uLXVuaXF1ZSBsaW5lCisgICAgICAgICAgICAgICAgIyAgIC0gY291bnQgaG93IG1hbnkgbGluZXMgcmVtYWluCisgICAgICAgICAgICAgICAgIyBBIGxpbmUgd2l0aCAnLS0nIHdpbGwgcmVtYWluIGluIHRoZSByZXN1bHQgZnJvbSBwcmV2aW91cyBvdXRwdXRzLCBzbyB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSByZXN1bHQgd2lsbCBiZSAxCisgICAgICAgICAgICAgICAgIyBpZiB0aGVyZSB3ZXJlIG5vIGR1cGxpY2F0ZXMuCisgICAgICAgICAgICAiLVUiKQorICAgICAgICAgICAgICAgIGlmIFsgJChncmVwIC12ICdePT0nICRTUlZfT1VUIHwgZ3JlcCAtdiAnU2VyaW91cyBlcnJvciB3aGVuIHJlYWRpbmcgZGVidWcgaW5mbycgfCBncmVwIC1BMSAiJDIiIHwgZ3JlcCAtdiAiJDIiIHwgc29ydCB8IHVuaXEgLWQgfCB3YyAtbCkgLWd0IDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmYWlsICJsaW5lcyBmb2xsb3dpbmcgcGF0dGVybiAnJDInIG11c3QgYmUgdW5pcXVlIGluIFNlcnZlciBvdXRwdXQiCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgIi11IikKKyAgICAgICAgICAgICAgICBpZiBbICQoZ3JlcCAtdiAnXj09JyAkQ0xJX09VVCB8IGdyZXAgLXYgJ1NlcmlvdXMgZXJyb3Igd2hlbiByZWFkaW5nIGRlYnVnIGluZm8nIHwgZ3JlcCAtQTEgIiQyIiB8IGdyZXAgLXYgIiQyIiB8IHNvcnQgfCB1bmlxIC1kIHwgd2MgLWwpIC1ndCAxIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZmFpbCAibGluZXMgZm9sbG93aW5nIHBhdHRlcm4gJyQyJyBtdXN0IGJlIHVuaXF1ZSBpbiBDbGllbnQgb3V0cHV0IgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgZWNobyAiVW5rbm93biB0ZXN0OiAkMSIgPiYyCisgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGVzYWMKKyAgICAgICAgc2hpZnQgMgorICAgIGRvbmUKKworICAgICMgY2hlY2sgdmFsZ3JpbmQncyByZXN1bHRzCisgICAgaWYgWyAiJE1FTUNIRUNLIiAtZ3QgMCBdOyB0aGVuCisgICAgICAgIGlmIGlzX3BvbGFyICIkU1JWX0NNRCIgJiYgaGFzX21lbV9lcnIgJFNSVl9PVVQ7IHRoZW4KKyAgICAgICAgICAgIGZhaWwgIlNlcnZlciBoYXMgbWVtb3J5IGVycm9ycyIKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmaQorICAgICAgICBpZiBpc19wb2xhciAiJENMSV9DTUQiICYmIGhhc19tZW1fZXJyICRDTElfT1VUOyB0aGVuCisgICAgICAgICAgICBmYWlsICJDbGllbnQgaGFzIG1lbW9yeSBlcnJvcnMiCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyBpZiB3ZSdyZSBoZXJlLCBldmVyeXRoaW5nIGlzIG9rCisgICAgZWNobyAiUEFTUyIKKyAgICBpZiBbICIkUFJFU0VSVkVfTE9HUyIgLWd0IDAgXTsgdGhlbgorICAgICAgICBtdiAkU1JWX09VVCBvLXNydi0ke1RFU1RTfS5sb2cKKyAgICAgICAgbXYgJENMSV9PVVQgby1jbGktJHtURVNUU30ubG9nCisgICAgZmkKKworICAgIHJtIC1mICRTUlZfT1VUICRDTElfT1VUICRQWFlfT1VUCit9CisKK2NsZWFudXAoKSB7CisgICAgcm0gLWYgJENMSV9PVVQgJFNSVl9PVVQgJFBYWV9PVVQgJFNFU1NJT04KKyAgICB0ZXN0IC1uICIke1NSVl9QSUQ6LX0iICYmIGtpbGwgJFNSVl9QSUQgPi9kZXYvbnVsbCAyPiYxCisgICAgdGVzdCAtbiAiJHtQWFlfUElEOi19IiAmJiBraWxsICRQWFlfUElEID4vZGV2L251bGwgMj4mMQorICAgIHRlc3QgLW4gIiR7Q0xJX1BJRDotfSIgJiYga2lsbCAkQ0xJX1BJRCA+L2Rldi9udWxsIDI+JjEKKyAgICB0ZXN0IC1uICIke0RPR19QSUQ6LX0iICYmIGtpbGwgJERPR19QSUQgPi9kZXYvbnVsbCAyPiYxCisgICAgZXhpdCAxCit9CisKKyMKKyMgTUFJTgorIworCitpZiBjZCAkKCBkaXJuYW1lICQwICk7IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gImNkICQoIGRpcm5hbWUgJDAgKSBmYWlsZWQiID4mMgorICAgIGV4aXQgMQorZmkKKworZ2V0X29wdGlvbnMgIiRAIgorCisjIHNhbml0eSBjaGVja3MsIGF2b2lkIGFuIGF2YWxhbmNoZSBvZiBlcnJvcnMKK2lmIFsgISAteCAiJFBfU1JWIiBdOyB0aGVuCisgICAgZWNobyAiQ29tbWFuZCAnJFBfU1JWJyBpcyBub3QgYW4gZXhlY3V0YWJsZSBmaWxlIgorICAgIGV4aXQgMQorZmkKK2lmIFsgISAteCAiJFBfQ0xJIiBdOyB0aGVuCisgICAgZWNobyAiQ29tbWFuZCAnJFBfQ0xJJyBpcyBub3QgYW4gZXhlY3V0YWJsZSBmaWxlIgorICAgIGV4aXQgMQorZmkKK2lmIFsgISAteCAiJFBfUFhZIiBdOyB0aGVuCisgICAgZWNobyAiQ29tbWFuZCAnJFBfUFhZJyBpcyBub3QgYW4gZXhlY3V0YWJsZSBmaWxlIgorICAgIGV4aXQgMQorZmkKK2lmIFsgIiRNRU1DSEVDSyIgLWd0IDAgXTsgdGhlbgorICAgIGlmIHdoaWNoIHZhbGdyaW5kID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGVjaG8gIk1lbWNoZWNrIG5vdCBwb3NzaWJsZS4gVmFsZ3JpbmQgbm90IGZvdW5kIgorICAgICAgICBleGl0IDEKKyAgICBmaQorZmkKK2lmIHdoaWNoICRPUEVOU1NMX0NNRCA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gIkNvbW1hbmQgJyRPUEVOU1NMX0NNRCcgbm90IGZvdW5kIgorICAgIGV4aXQgMQorZmkKKworIyB1c2VkIGJ5IHdhdGNoZG9nCitNQUlOX1BJRD0iJCQiCisKKyMgYmUgbW9yZSBwYXRpZW50IHdpdGggdmFsZ3JpbmQKK2lmIFsgIiRNRU1DSEVDSyIgLWd0IDAgXTsgdGhlbgorICAgIFNUQVJUX0RFTEFZPTMKKyAgICBET0dfREVMQVk9MzAKK2Vsc2UKKyAgICBTVEFSVF9ERUxBWT0xCisgICAgRE9HX0RFTEFZPTEwCitmaQorQ0xJX0RFTEFZX0ZBQ1RPUj0xCitTUlZfREVMQVlfU0VDT05EUz0wCisKKyMgUGljayBhICJ1bmlxdWUiIHNlcnZlciBwb3J0IGluIHRoZSByYW5nZSAxMDAwMC0xOTk5OSwgYW5kIGEgcHJveHkgcG9ydAorUE9SVF9CQVNFPSIwMDAwJCQiCitQT1JUX0JBU0U9IiQoIHByaW50ZiAkUE9SVF9CQVNFIHwgdGFpbCAtYyA0ICkiCitTUlZfUE9SVD0iMSRQT1JUX0JBU0UiCitQWFlfUE9SVD0iMiRQT1JUX0JBU0UiCit1bnNldCBQT1JUX0JBU0UKKworIyBmaXggY29tbWFuZHMgdG8gdXNlIHRoaXMgcG9ydCwgZm9yY2UgSVB2NCB3aGlsZSBhdCBpdAorIyArU1JWX1BPUlQgd2lsbCBiZSByZXBsYWNlZCBieSBlaXRoZXIgJFNSVl9QT1JUIG9yICRQWFlfUE9SVCBsYXRlcgorUF9TUlY9IiRQX1NSViBzZXJ2ZXJfYWRkcj0xMjcuMC4wLjEgc2VydmVyX3BvcnQ9JFNSVl9QT1JUIgorUF9DTEk9IiRQX0NMSSBzZXJ2ZXJfYWRkcj0xMjcuMC4wLjEgc2VydmVyX3BvcnQ9K1NSVl9QT1JUIgorUF9QWFk9IiRQX1BYWSBzZXJ2ZXJfYWRkcj0xMjcuMC4wLjEgc2VydmVyX3BvcnQ9JFNSVl9QT1JUIGxpc3Rlbl9hZGRyPTEyNy4wLjAuMSBsaXN0ZW5fcG9ydD0kUFhZX1BPUlQgJHtTRUVEOisic2VlZD0kU0VFRCJ9IgorT19TUlY9IiRPX1NSViAtYWNjZXB0ICRTUlZfUE9SVCAtZGhwYXJhbSBkYXRhX2ZpbGVzL2RocGFyYW1zLnBlbSIKK09fQ0xJPSIkT19DTEkgLWNvbm5lY3QgbG9jYWxob3N0OitTUlZfUE9SVCIKK0dfU1JWPSIkR19TUlYgLXAgJFNSVl9QT1JUIgorR19DTEk9IiRHX0NMSSAtcCArU1JWX1BPUlQgbG9jYWxob3N0IgorCisjIEFsc28gcGljayBhIHVuaXF1ZSBuYW1lIGZvciBpbnRlcm1lZGlhdGUgZmlsZXMKK1NSVl9PVVQ9InNydl9vdXQuJCQiCitDTElfT1VUPSJjbGlfb3V0LiQkIgorUFhZX09VVD0icHh5X291dC4kJCIKK1NFU1NJT049InNlc3Npb24uJCQiCisKK1NLSVBfTkVYVD0iTk8iCisKK3RyYXAgY2xlYW51cCBJTlQgVEVSTSBIVVAKKworIyBCYXNpYyB0ZXN0CisKKyMgQ2hlY2tzIHRoYXQ6CisjIC0gdGhpbmdzIHdvcmsgd2l0aCBhbGwgY2lwaGVyc3VpdGVzIGFjdGl2ZSAodXNlZCB3aXRoIGNvbmZpZy1mdWxsIGluIGFsbC5zaCkKKyMgLSB0aGUgZXhwZWN0ZWQgKGhpZ2hlc3Qgc2VjdXJpdHkpIHBhcmFtZXRlcnMgYXJlIHNlbGVjdGVkCisjICAgKCJzaWduYXR1cmVfYWxnb3JpdGhtIGV4dDogNiIgbWVhbnMgU0hBLTUxMiAoaGlnaGVzdCBjb21tb24gaGFzaCkpCitydW5fdGVzdCAgICAiRGVmYXVsdCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAiJFBfQ0xJIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJQcm90b2NvbCBpcyBUTFN2MS4yIiBcCisgICAgICAgICAgICAtcyAiQ2lwaGVyc3VpdGUgaXMgVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiBcCisgICAgICAgICAgICAtcyAiY2xpZW50IGhlbGxvIHYzLCBzaWduYXR1cmVfYWxnb3JpdGhtIGV4dDogNiIgXAorICAgICAgICAgICAgLXMgIkVDREhFIGN1cnZlOiBzZWNwNTIxcjEiIFwKKyAgICAgICAgICAgIC1TICJlcnJvciIgXAorICAgICAgICAgICAgLUMgImVycm9yIgorCitydW5fdGVzdCAgICAiRGVmYXVsdCwgRFRMUyIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJQcm90b2NvbCBpcyBEVExTdjEuMiIgXAorICAgICAgICAgICAgLXMgIkNpcGhlcnN1aXRlIGlzIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0yNTYtR0NNLVNIQTM4NCIKKworIyBUZXN0IGZvciB1bmlxdWVuZXNzIG9mIElWcyBpbiBBRUFEIGNpcGhlcnN1aXRlcworcnVuX3Rlc3QgICAgIlVuaXF1ZSBJViBpbiBHQ00iIFwKKyAgICAgICAgICAgICIkUF9TUlYgZXhjaGFuZ2VzPTIwIGRlYnVnX2xldmVsPTQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZXhjaGFuZ2VzPTIwIGRlYnVnX2xldmVsPTQgZm9yY2VfY2lwaGVyc3VpdGU9VExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC11ICJJViB1c2VkIiBcCisgICAgICAgICAgICAtVSAiSVYgdXNlZCIKKworIyBUZXN0cyBmb3IgcmM0IG9wdGlvbgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1JFTU9WRV9BUkM0X0NJUEhFUlNVSVRFUworcnVuX3Rlc3QgICAgIlJDNDogc2VydmVyIGRpc2FibGVkLCBjbGllbnQgZW5hYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLXMgIlNTTCAtIFRoZSBzZXJ2ZXIgaGFzIG5vIGNpcGhlcnN1aXRlcyBpbiBjb21tb24iCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTCitydW5fdGVzdCAgICAiUkM0OiBzZXJ2ZXIgaGFsZiwgY2xpZW50IGVuYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgYXJjND0xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtcyAiU1NMIC0gVGhlIHNlcnZlciBoYXMgbm8gY2lwaGVyc3VpdGVzIGluIGNvbW1vbiIKKworcnVuX3Rlc3QgICAgIlJDNDogc2VydmVyIGVuYWJsZWQsIGNsaWVudCBkaXNhYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLXMgIlNTTCAtIFRoZSBzZXJ2ZXIgaGFzIG5vIGNpcGhlcnN1aXRlcyBpbiBjb21tb24iCisKK3J1bl90ZXN0ICAgICJSQzQ6IGJvdGggZW5hYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBOb25lIG9mIHRoZSBjb21tb24gY2lwaGVyc3VpdGVzIGlzIHVzYWJsZSIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFRoZSBzZXJ2ZXIgaGFzIG5vIGNpcGhlcnN1aXRlcyBpbiBjb21tb24iCisKKyMgVGVzdHMgZm9yIFRydW5jYXRlZCBITUFDIGV4dGVuc2lvbgorCitydW5fdGVzdCAgICAiVHJ1bmNhdGVkIEhNQUM6IGNsaWVudCBkZWZhdWx0LCBzZXJ2ZXIgZGVmYXVsdCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD00IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImR1bXBpbmcgJ2NvbXB1dGVkIG1hYycgKDIwIGJ5dGVzKSIgXAorICAgICAgICAgICAgLVMgImR1bXBpbmcgJ2NvbXB1dGVkIG1hYycgKDEwIGJ5dGVzKSIKKworcnVuX3Rlc3QgICAgIlRydW5jYXRlZCBITUFDOiBjbGllbnQgZGlzYWJsZWQsIHNlcnZlciBkZWZhdWx0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgdHJ1bmNfaG1hYz0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJkdW1waW5nICdjb21wdXRlZCBtYWMnICgyMCBieXRlcykiIFwKKyAgICAgICAgICAgIC1TICJkdW1waW5nICdjb21wdXRlZCBtYWMnICgxMCBieXRlcykiCisKK3J1bl90ZXN0ICAgICJUcnVuY2F0ZWQgSE1BQzogY2xpZW50IGVuYWJsZWQsIHNlcnZlciBkZWZhdWx0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgdHJ1bmNfaG1hYz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJkdW1waW5nICdjb21wdXRlZCBtYWMnICgyMCBieXRlcykiIFwKKyAgICAgICAgICAgIC1TICJkdW1waW5nICdjb21wdXRlZCBtYWMnICgxMCBieXRlcykiCisKK3J1bl90ZXN0ICAgICJUcnVuY2F0ZWQgSE1BQzogY2xpZW50IGVuYWJsZWQsIHNlcnZlciBkaXNhYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD00IHRydW5jX2htYWM9MCIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImR1bXBpbmcgJ2NvbXB1dGVkIG1hYycgKDIwIGJ5dGVzKSIgXAorICAgICAgICAgICAgLVMgImR1bXBpbmcgJ2NvbXB1dGVkIG1hYycgKDEwIGJ5dGVzKSIKKworcnVuX3Rlc3QgICAgIlRydW5jYXRlZCBITUFDOiBjbGllbnQgZW5hYmxlZCwgc2VydmVyIGVuYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9NCB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgdHJ1bmNfaG1hYz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJkdW1waW5nICdjb21wdXRlZCBtYWMnICgyMCBieXRlcykiIFwKKyAgICAgICAgICAgIC1zICJkdW1waW5nICdjb21wdXRlZCBtYWMnICgxMCBieXRlcykiCisKKyMgVGVzdHMgZm9yIEVuY3J5cHQtdGhlbi1NQUMgZXh0ZW5zaW9uCisKK3J1bl90ZXN0ICAgICJFbmNyeXB0IHRoZW4gTUFDOiBkZWZhdWx0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgZW5jcnlwdF90aGVuX21hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBlbmNyeXB0IHRoZW4gbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIGVuY3J5cHQgdGhlbiBtYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgZW5jcnlwdF90aGVuX21hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJ1c2luZyBlbmNyeXB0IHRoZW4gbWFjIiBcCisgICAgICAgICAgICAtcyAidXNpbmcgZW5jcnlwdCB0aGVuIG1hYyIKKworcnVuX3Rlc3QgICAgIkVuY3J5cHQgdGhlbiBNQUM6IGNsaWVudCBlbmFibGVkLCBzZXJ2ZXIgZGlzYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBldG09MCBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV0bT0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBlbmNyeXB0X3RoZW5fbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIGVuY3J5cHQgdGhlbiBtYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgZW5jcnlwdCB0aGVuIG1hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBlbmNyeXB0X3RoZW5fbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgInVzaW5nIGVuY3J5cHQgdGhlbiBtYWMiIFwKKyAgICAgICAgICAgIC1TICJ1c2luZyBlbmNyeXB0IHRoZW4gbWFjIgorCitydW5fdGVzdCAgICAiRW5jcnlwdCB0aGVuIE1BQzogY2xpZW50IGVuYWJsZWQsIGFlYWQgY2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXRtPTEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBldG09MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgZW5jcnlwdF90aGVuX21hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBlbmNyeXB0IHRoZW4gbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIGVuY3J5cHQgdGhlbiBtYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgZW5jcnlwdF90aGVuX21hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJ1c2luZyBlbmNyeXB0IHRoZW4gbWFjIiBcCisgICAgICAgICAgICAtUyAidXNpbmcgZW5jcnlwdCB0aGVuIG1hYyIKKworcnVuX3Rlc3QgICAgIkVuY3J5cHQgdGhlbiBNQUM6IGNsaWVudCBlbmFibGVkLCBzdHJlYW0gY2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXRtPTEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV0bT0xIGFyYzQ9MSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIGVuY3J5cHRfdGhlbl9tYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgZW5jcnlwdCB0aGVuIG1hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBlbmNyeXB0IHRoZW4gbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIGVuY3J5cHRfdGhlbl9tYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAidXNpbmcgZW5jcnlwdCB0aGVuIG1hYyIgXAorICAgICAgICAgICAgLVMgInVzaW5nIGVuY3J5cHQgdGhlbiBtYWMiCisKK3J1bl90ZXN0ICAgICJFbmNyeXB0IHRoZW4gTUFDOiBjbGllbnQgZGlzYWJsZWQsIHNlcnZlciBlbmFibGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXRtPTEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBldG09MCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgZW5jcnlwdF90aGVuX21hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCBlbmNyeXB0IHRoZW4gbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIGVuY3J5cHQgdGhlbiBtYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgZW5jcnlwdF90aGVuX21hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJ1c2luZyBlbmNyeXB0IHRoZW4gbWFjIiBcCisgICAgICAgICAgICAtUyAidXNpbmcgZW5jcnlwdCB0aGVuIG1hYyIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworcnVuX3Rlc3QgICAgIkVuY3J5cHQgdGhlbiBNQUM6IGNsaWVudCBTU0x2Mywgc2VydmVyIGVuYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBtaW5fdmVyc2lvbj1zc2wzIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZm9yY2VfdmVyc2lvbj1zc2wzIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyBlbmNyeXB0X3RoZW5fbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImZvdW5kIGVuY3J5cHQgdGhlbiBtYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgZW5jcnlwdCB0aGVuIG1hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBlbmNyeXB0X3RoZW5fbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgInVzaW5nIGVuY3J5cHQgdGhlbiBtYWMiIFwKKyAgICAgICAgICAgIC1TICJ1c2luZyBlbmNyeXB0IHRoZW4gbWFjIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9QUk9UT19TU0wzCitydW5fdGVzdCAgICAiRW5jcnlwdCB0aGVuIE1BQzogY2xpZW50IGVuYWJsZWQsIHNlcnZlciBTU0x2MyIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGZvcmNlX3ZlcnNpb249c3NsMyBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIG1pbl92ZXJzaW9uPXNzbDMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIGVuY3J5cHRfdGhlbl9tYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgZW5jcnlwdCB0aGVuIG1hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBlbmNyeXB0IHRoZW4gbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIGVuY3J5cHRfdGhlbl9tYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAidXNpbmcgZW5jcnlwdCB0aGVuIG1hYyIgXAorICAgICAgICAgICAgLVMgInVzaW5nIGVuY3J5cHQgdGhlbiBtYWMiCisKKyMgVGVzdHMgZm9yIEV4dGVuZGVkIE1hc3RlciBTZWNyZXQgZXh0ZW5zaW9uCisKK3J1bl90ZXN0ICAgICJFeHRlbmRlZCBNYXN0ZXIgU2VjcmV0OiBkZWZhdWx0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJ1c2luZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IiBcCisgICAgICAgICAgICAtcyAidXNpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCIKKworcnVuX3Rlc3QgICAgIkV4dGVuZGVkIE1hc3RlciBTZWNyZXQ6IGNsaWVudCBlbmFibGVkLCBzZXJ2ZXIgZGlzYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleHRlbmRlZF9tcz0wIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXh0ZW5kZWRfbXM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJ1c2luZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IiBcCisgICAgICAgICAgICAtUyAidXNpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCIKKworcnVuX3Rlc3QgICAgIkV4dGVuZGVkIE1hc3RlciBTZWNyZXQ6IGNsaWVudCBkaXNhYmxlZCwgc2VydmVyIGVuYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleHRlbmRlZF9tcz0xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXh0ZW5kZWRfbXM9MCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJ1c2luZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IiBcCisgICAgICAgICAgICAtUyAidXNpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworcnVuX3Rlc3QgICAgIkV4dGVuZGVkIE1hc3RlciBTZWNyZXQ6IGNsaWVudCBTU0x2Mywgc2VydmVyIGVuYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBtaW5fdmVyc2lvbj1zc2wzIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZm9yY2VfdmVyc2lvbj1zc2wzIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyBleHRlbmRlZF9tYXN0ZXJfc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImZvdW5kIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBleHRlbmRlZF9tYXN0ZXJfc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgInVzaW5nIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQiIFwKKyAgICAgICAgICAgIC1TICJ1c2luZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9QUk9UT19TU0wzCitydW5fdGVzdCAgICAiRXh0ZW5kZWQgTWFzdGVyIFNlY3JldDogY2xpZW50IGVuYWJsZWQsIHNlcnZlciBTU0x2MyIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGZvcmNlX3ZlcnNpb249c3NsMyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIG1pbl92ZXJzaW9uPXNzbDMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIGV4dGVuZGVkX21hc3Rlcl9zZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIGV4dGVuZGVkX21hc3Rlcl9zZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAidXNpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCIgXAorICAgICAgICAgICAgLVMgInVzaW5nIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQiCisKKyMgVGVzdHMgZm9yIEZBTExCQUNLX1NDU1YKKworcnVuX3Rlc3QgICAgIkZhbGxiYWNrIFNDU1Y6IGRlZmF1bHQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGZvcmNlX3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJhZGRpbmcgRkFMTEJBQ0tfU0NTViIgXAorICAgICAgICAgICAgLVMgInJlY2VpdmVkIEZBTExCQUNLX1NDU1YiIFwKKyAgICAgICAgICAgIC1TICJpbmFwcm9wcmlhdGUgZmFsbGJhY2siIFwKKyAgICAgICAgICAgIC1DICJpcyBhIGZhdGFsIGFsZXJ0IG1lc3NhZ2UgKG1zZyA4NikiCisKK3J1bl90ZXN0ICAgICJGYWxsYmFjayBTQ1NWOiBleHBsaWNpdGx5IGRpc2FibGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBmb3JjZV92ZXJzaW9uPXRsczFfMSBmYWxsYmFjaz0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJhZGRpbmcgRkFMTEJBQ0tfU0NTViIgXAorICAgICAgICAgICAgLVMgInJlY2VpdmVkIEZBTExCQUNLX1NDU1YiIFwKKyAgICAgICAgICAgIC1TICJpbmFwcm9wcmlhdGUgZmFsbGJhY2siIFwKKyAgICAgICAgICAgIC1DICJpcyBhIGZhdGFsIGFsZXJ0IG1lc3NhZ2UgKG1zZyA4NikiCisKK3J1bl90ZXN0ICAgICJGYWxsYmFjayBTQ1NWOiBlbmFibGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBmb3JjZV92ZXJzaW9uPXRsczFfMSBmYWxsYmFjaz0xIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJhZGRpbmcgRkFMTEJBQ0tfU0NTViIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIEZBTExCQUNLX1NDU1YiIFwKKyAgICAgICAgICAgIC1zICJpbmFwcm9wcmlhdGUgZmFsbGJhY2siIFwKKyAgICAgICAgICAgIC1jICJpcyBhIGZhdGFsIGFsZXJ0IG1lc3NhZ2UgKG1zZyA4NikiCisKK3J1bl90ZXN0ICAgICJGYWxsYmFjayBTQ1NWOiBlbmFibGVkLCBtYXggdmVyc2lvbiIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZmFsbGJhY2s9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiYWRkaW5nIEZBTExCQUNLX1NDU1YiIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBGQUxMQkFDS19TQ1NWIiBcCisgICAgICAgICAgICAtUyAiaW5hcHJvcHJpYXRlIGZhbGxiYWNrIiBcCisgICAgICAgICAgICAtQyAiaXMgYSBmYXRhbCBhbGVydCBtZXNzYWdlIChtc2cgODYpIgorCityZXF1aXJlc19vcGVuc3NsX3dpdGhfZmFsbGJhY2tfc2NzdgorcnVuX3Rlc3QgICAgIkZhbGxiYWNrIFNDU1Y6IGRlZmF1bHQsIG9wZW5zc2wgc2VydmVyIiBcCisgICAgICAgICAgICAiJE9fU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZm9yY2VfdmVyc2lvbj10bHMxXzEgZmFsbGJhY2s9MCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiYWRkaW5nIEZBTExCQUNLX1NDU1YiIFwKKyAgICAgICAgICAgIC1DICJpcyBhIGZhdGFsIGFsZXJ0IG1lc3NhZ2UgKG1zZyA4NikiCisKK3JlcXVpcmVzX29wZW5zc2xfd2l0aF9mYWxsYmFja19zY3N2CitydW5fdGVzdCAgICAiRmFsbGJhY2sgU0NTVjogZW5hYmxlZCwgb3BlbnNzbCBzZXJ2ZXIiIFwKKyAgICAgICAgICAgICIkT19TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBmb3JjZV92ZXJzaW9uPXRsczFfMSBmYWxsYmFjaz0xIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJhZGRpbmcgRkFMTEJBQ0tfU0NTViIgXAorICAgICAgICAgICAgLWMgImlzIGEgZmF0YWwgYWxlcnQgbWVzc2FnZSAobXNnIDg2KSIKKworcmVxdWlyZXNfb3BlbnNzbF93aXRoX2ZhbGxiYWNrX3Njc3YKK3J1bl90ZXN0ICAgICJGYWxsYmFjayBTQ1NWOiBkaXNhYmxlZCwgb3BlbnNzbCBjbGllbnQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgIiRPX0NMSSAtdGxzMV8xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJyZWNlaXZlZCBGQUxMQkFDS19TQ1NWIiBcCisgICAgICAgICAgICAtUyAiaW5hcHJvcHJpYXRlIGZhbGxiYWNrIgorCityZXF1aXJlc19vcGVuc3NsX3dpdGhfZmFsbGJhY2tfc2NzdgorcnVuX3Rlc3QgICAgIkZhbGxiYWNrIFNDU1Y6IGVuYWJsZWQsIG9wZW5zc2wgY2xpZW50IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgICIkT19DTEkgLXRsczFfMSAtZmFsbGJhY2tfc2NzdiIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgRkFMTEJBQ0tfU0NTViIgXAorICAgICAgICAgICAgLXMgImluYXByb3ByaWF0ZSBmYWxsYmFjayIKKworcmVxdWlyZXNfb3BlbnNzbF93aXRoX2ZhbGxiYWNrX3Njc3YKK3J1bl90ZXN0ICAgICJGYWxsYmFjayBTQ1NWOiBlbmFibGVkLCBtYXggdmVyc2lvbiwgb3BlbnNzbCBjbGllbnQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgIiRPX0NMSSAtZmFsbGJhY2tfc2NzdiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgRkFMTEJBQ0tfU0NTViIgXAorICAgICAgICAgICAgLVMgImluYXByb3ByaWF0ZSBmYWxsYmFjayIKKworIyBUZXN0cyBmb3IgQ0JDIDEvbi0xIHJlY29yZCBzcGxpdHRpbmcKKworcnVuX3Rlc3QgICAgIkNCQyBSZWNvcmQgc3BsaXR0aW5nOiBUTFMgMS4yLCBubyBzcGxpdHRpbmciIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgcmVxdWVzdF9zaXplPTEyMyBmb3JjZV92ZXJzaW9uPXRsczFfMiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTIzIGJ5dGVzIHJlYWQiIFwKKyAgICAgICAgICAgIC1TICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiIFwKKyAgICAgICAgICAgIC1TICIxMjIgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkNCQyBSZWNvcmQgc3BsaXR0aW5nOiBUTFMgMS4xLCBubyBzcGxpdHRpbmciIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgcmVxdWVzdF9zaXplPTEyMyBmb3JjZV92ZXJzaW9uPXRsczFfMSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTIzIGJ5dGVzIHJlYWQiIFwKKyAgICAgICAgICAgIC1TICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiIFwKKyAgICAgICAgICAgIC1TICIxMjIgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkNCQyBSZWNvcmQgc3BsaXR0aW5nOiBUTFMgMS4wLCBzcGxpdHRpbmciIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgcmVxdWVzdF9zaXplPTEyMyBmb3JjZV92ZXJzaW9uPXRsczEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIlJlYWQgZnJvbSBjbGllbnQ6IDEyMyBieXRlcyByZWFkIiBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIiBcCisgICAgICAgICAgICAtcyAiMTIyIGJ5dGVzIHJlYWQiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKK3J1bl90ZXN0ICAgICJDQkMgUmVjb3JkIHNwbGl0dGluZzogU1NMdjMsIHNwbGl0dGluZyIgXAorICAgICAgICAgICAgIiRQX1NSViBtaW5fdmVyc2lvbj1zc2wzIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgIHJlcXVlc3Rfc2l6ZT0xMjMgZm9yY2VfdmVyc2lvbj1zc2wzIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJSZWFkIGZyb20gY2xpZW50OiAxMjMgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLXMgIjEyMiBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiQ0JDIFJlY29yZCBzcGxpdHRpbmc6IFRMUyAxLjAgUkM0LCBubyBzcGxpdHRpbmciIFwKKyAgICAgICAgICAgICIkUF9TUlYgYXJjND0xIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEgXAorICAgICAgICAgICAgIHJlcXVlc3Rfc2l6ZT0xMjMgZm9yY2VfdmVyc2lvbj10bHMxIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxMjMgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLVMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLVMgIjEyMiBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiQ0JDIFJlY29yZCBzcGxpdHRpbmc6IFRMUyAxLjAsIHNwbGl0dGluZyBkaXNhYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICByZXF1ZXN0X3NpemU9MTIzIGZvcmNlX3ZlcnNpb249dGxzMSByZWNzcGxpdD0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxMjMgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLVMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLVMgIjEyMiBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiQ0JDIFJlY29yZCBzcGxpdHRpbmc6IFRMUyAxLjAsIHNwbGl0dGluZywgbmJpbyIgXAorICAgICAgICAgICAgIiRQX1NSViBuYmlvPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgbmJpbz0yIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgIHJlcXVlc3Rfc2l6ZT0xMjMgZm9yY2VfdmVyc2lvbj10bHMxIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJSZWFkIGZyb20gY2xpZW50OiAxMjMgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLXMgIjEyMiBieXRlcyByZWFkIgorCisjIFRlc3RzIGZvciBTZXNzaW9uIFRpY2tldHMKKworcnVuX3Rlc3QgICAgIlNlc3Npb24gcmVzdW1lIHVzaW5nIHRpY2tldHM6IGJhc2ljIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgdGlja2V0cz0xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgdGlja2V0cz0xIHJlY29ubmVjdD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBzZXNzaW9uX3RpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJwYXJzZSBuZXcgc2Vzc2lvbiB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIGNhY2hlIiBcCisgICAgICAgICAgICAtcyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1zICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIgXAorICAgICAgICAgICAgLWMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIgorCitydW5fdGVzdCAgICAiU2Vzc2lvbiByZXN1bWUgdXNpbmcgdGlja2V0czogY2FjaGUgZGlzYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTEgY2FjaGVfbWF4PTAiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTEgcmVjb25uZWN0PTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHNlc3Npb25fdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgInBhcnNlIG5ldyBzZXNzaW9uIHRpY2tldCIgXAorICAgICAgICAgICAgLVMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gY2FjaGUiIFwKKyAgICAgICAgICAgIC1zICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIHRpY2tldCIgXAorICAgICAgICAgICAgLXMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtYyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyB0aWNrZXRzOiB0aW1lb3V0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgdGlja2V0cz0xIGNhY2hlX21heD0wIHRpY2tldF90aW1lb3V0PTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTEgcmVjb25uZWN0PTEgcmVjb19kZWxheT0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBzZXNzaW9uX3RpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJwYXJzZSBuZXcgc2Vzc2lvbiB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIGNhY2hlIiBcCisgICAgICAgICAgICAtUyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1TICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIgXAorICAgICAgICAgICAgLUMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIgorCitydW5fdGVzdCAgICAiU2Vzc2lvbiByZXN1bWUgdXNpbmcgdGlja2V0czogb3BlbnNzbCBzZXJ2ZXIiIFwKKyAgICAgICAgICAgICIkT19TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTEgcmVjb25uZWN0PTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHNlc3Npb25fdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgInBhcnNlIG5ldyBzZXNzaW9uIHRpY2tldCIgXAorICAgICAgICAgICAgLWMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIgorCitydW5fdGVzdCAgICAiU2Vzc2lvbiByZXN1bWUgdXNpbmcgdGlja2V0czogb3BlbnNzbCBjbGllbnQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTEiIFwKKyAgICAgICAgICAgICIoICRPX0NMSSAtc2Vzc19vdXQgJFNFU1NJT047IFwKKyAgICAgICAgICAgICAgICRPX0NMSSAtc2Vzc19pbiAkU0VTU0lPTjsgXAorICAgICAgICAgICAgICAgcm0gLWYgJFNFU1NJT04gKSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiZm91bmQgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSBjYWNoZSIgXAorICAgICAgICAgICAgLXMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gdGlja2V0IiBcCisgICAgICAgICAgICAtcyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKKyMgVGVzdHMgZm9yIFNlc3Npb24gUmVzdW1lIGJhc2VkIG9uIHNlc3Npb24tSUQgYW5kIGNhY2hlCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyBjYWNoZTogdGlja2V0cyBlbmFibGVkIG9uIGNsaWVudCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MSByZWNvbm5lY3Q9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgc2Vzc2lvbl90aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAicGFyc2UgbmV3IHNlc3Npb24gdGlja2V0IiBcCisgICAgICAgICAgICAtcyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSBjYWNoZSIgXAorICAgICAgICAgICAgLVMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gdGlja2V0IiBcCisgICAgICAgICAgICAtcyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiIFwKKyAgICAgICAgICAgIC1jICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIKKworcnVuX3Rlc3QgICAgIlNlc3Npb24gcmVzdW1lIHVzaW5nIGNhY2hlOiB0aWNrZXRzIGVuYWJsZWQgb24gc2VydmVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgdGlja2V0cz0xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIHJlY29ubmVjdD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBzZXNzaW9uX3RpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJwYXJzZSBuZXcgc2Vzc2lvbiB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1zICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIGNhY2hlIiBcCisgICAgICAgICAgICAtUyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1zICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIgXAorICAgICAgICAgICAgLWMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIgorCitydW5fdGVzdCAgICAiU2Vzc2lvbiByZXN1bWUgdXNpbmcgY2FjaGU6IGNhY2hlX21heD0wIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIGNhY2hlX21heD0wIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIHJlY29ubmVjdD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIGNhY2hlIiBcCisgICAgICAgICAgICAtUyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1TICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIgXAorICAgICAgICAgICAgLUMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIgorCitydW5fdGVzdCAgICAiU2Vzc2lvbiByZXN1bWUgdXNpbmcgY2FjaGU6IGNhY2hlX21heD0xIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIGNhY2hlX21heD0xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIHJlY29ubmVjdD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIGNhY2hlIiBcCisgICAgICAgICAgICAtUyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1zICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIgXAorICAgICAgICAgICAgLWMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIgorCitydW5fdGVzdCAgICAiU2Vzc2lvbiByZXN1bWUgdXNpbmcgY2FjaGU6IHRpbWVvdXQgPiBkZWxheSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MCByZWNvbm5lY3Q9MSByZWNvX2RlbGF5PTAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gY2FjaGUiIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIHRpY2tldCIgXAorICAgICAgICAgICAgLXMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtYyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyBjYWNoZTogdGltZW91dCA8IGRlbGF5IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIGNhY2hlX3RpbWVvdXQ9MSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MCByZWNvbm5lY3Q9MSByZWNvX2RlbGF5PTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gY2FjaGUiIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIHRpY2tldCIgXAorICAgICAgICAgICAgLVMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtQyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyBjYWNoZTogbm8gdGltZW91dCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MCBjYWNoZV90aW1lb3V0PTAiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTAgcmVjb25uZWN0PTEgcmVjb19kZWxheT0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIGNhY2hlIiBcCisgICAgICAgICAgICAtUyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1zICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIgXAorICAgICAgICAgICAgLWMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIgorCitydW5fdGVzdCAgICAiU2Vzc2lvbiByZXN1bWUgdXNpbmcgY2FjaGU6IG9wZW5zc2wgY2xpZW50IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIiBcCisgICAgICAgICAgICAiKCAkT19DTEkgLXNlc3Nfb3V0ICRTRVNTSU9OOyBcCisgICAgICAgICAgICAgICAkT19DTEkgLXNlc3NfaW4gJFNFU1NJT047IFwKKyAgICAgICAgICAgICAgIHJtIC1mICRTRVNTSU9OICkiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImZvdW5kIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gY2FjaGUiIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIHRpY2tldCIgXAorICAgICAgICAgICAgLXMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIgorCitydW5fdGVzdCAgICAiU2Vzc2lvbiByZXN1bWUgdXNpbmcgY2FjaGU6IG9wZW5zc2wgc2VydmVyIiBcCisgICAgICAgICAgICAiJE9fU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIHJlY29ubmVjdD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBzZXNzaW9uX3RpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJwYXJzZSBuZXcgc2Vzc2lvbiB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1jICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIKKworIyBUZXN0cyBmb3IgTWF4IEZyYWdtZW50IExlbmd0aCBleHRlbnNpb24KKworcnVuX3Rlc3QgICAgIk1heCBmcmFnbWVudCBsZW5ndGg6IG5vdCB1c2VkLCByZWZlcmVuY2UiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJNYXhpbXVtIGZyYWdtZW50IGxlbmd0aCBpcyAxNjM4NCIgXAorICAgICAgICAgICAgLXMgIk1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIGlzIDE2Mzg0IiBcCisgICAgICAgICAgICAtQyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCBtYXggZnJhZ21lbnQgbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIKKworcnVuX3Rlc3QgICAgIk1heCBmcmFnbWVudCBsZW5ndGg6IHVzZWQgYnkgY2xpZW50IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBtYXhfZnJhZ19sZW49NDA5NiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiTWF4aW11bSBmcmFnbWVudCBsZW5ndGggaXMgNDA5NiIgXAorICAgICAgICAgICAgLXMgIk1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIGlzIDQwOTYiIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIG1heCBmcmFnbWVudCBsZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIgorCitydW5fdGVzdCAgICAiTWF4IGZyYWdtZW50IGxlbmd0aDogdXNlZCBieSBzZXJ2ZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBtYXhfZnJhZ19sZW49NDA5NiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJNYXhpbXVtIGZyYWdtZW50IGxlbmd0aCBpcyAxNjM4NCIgXAorICAgICAgICAgICAgLXMgIk1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIGlzIDQwOTYiIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImZvdW5kIG1heCBmcmFnbWVudCBsZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJNYXggZnJhZ21lbnQgbGVuZ3RoOiBnbnV0bHMgc2VydmVyIiBcCisgICAgICAgICAgICAiJEdfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgbWF4X2ZyYWdfbGVuPTQwOTYiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIk1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIGlzIDQwOTYiIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIgorCitydW5fdGVzdCAgICAiTWF4IGZyYWdtZW50IGxlbmd0aDogY2xpZW50LCBtZXNzYWdlIGp1c3QgZml0cyIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgbWF4X2ZyYWdfbGVuPTIwNDggcmVxdWVzdF9zaXplPTIwNDgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIk1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIGlzIDIwNDgiIFwKKyAgICAgICAgICAgIC1zICJNYXhpbXVtIGZyYWdtZW50IGxlbmd0aCBpcyAyMDQ4IiBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBtYXggZnJhZ21lbnQgbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIjIwNDggYnl0ZXMgd3JpdHRlbiBpbiAxIGZyYWdtZW50cyIgXAorICAgICAgICAgICAgLXMgIjIwNDggYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIk1heCBmcmFnbWVudCBsZW5ndGg6IGNsaWVudCwgbGFyZ2VyIG1lc3NhZ2UiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIG1heF9mcmFnX2xlbj0yMDQ4IHJlcXVlc3Rfc2l6ZT0yMzQ1IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJNYXhpbXVtIGZyYWdtZW50IGxlbmd0aCBpcyAyMDQ4IiBcCisgICAgICAgICAgICAtcyAiTWF4aW11bSBmcmFnbWVudCBsZW5ndGggaXMgMjA0OCIgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgbWF4IGZyYWdtZW50IGxlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICIyMzQ1IGJ5dGVzIHdyaXR0ZW4gaW4gMiBmcmFnbWVudHMiIFwKKyAgICAgICAgICAgIC1zICIyMDQ4IGJ5dGVzIHJlYWQiIFwKKyAgICAgICAgICAgIC1zICIyOTcgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIk1heCBmcmFnbWVudCBsZW5ndGg6IERUTFMgY2xpZW50LCBsYXJnZXIgbWVzc2FnZSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGR0bHM9MSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGR0bHM9MSBtYXhfZnJhZ19sZW49MjA0OCByZXF1ZXN0X3NpemU9MjM0NSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtYyAiTWF4aW11bSBmcmFnbWVudCBsZW5ndGggaXMgMjA0OCIgXAorICAgICAgICAgICAgLXMgIk1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIGlzIDIwNDgiIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIG1heCBmcmFnbWVudCBsZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZnJhZ21lbnQgbGFyZ2VyIHRoYW4uKm1heGltdW0iCisKKyMgVGVzdHMgZm9yIHJlbmVnb3RpYXRpb24KKworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IG5vbmUsIGZvciByZWZlcmVuY2UiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1TICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLVMgIndyaXRlIGhlbGxvIHJlcXVlc3QiCisKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBjbGllbnQtaW5pdGlhdGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtUyAid3JpdGUgaGVsbG8gcmVxdWVzdCIKKworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IHNlcnZlci1pbml0aWF0ZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEgYXV0aF9tb2RlPW9wdGlvbmFsIHJlbmVnb3RpYXRlPTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLXMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJ3cml0ZSBoZWxsbyByZXF1ZXN0IgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogZG91YmxlIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIGF1dGhfbW9kZT1vcHRpb25hbCByZW5lZ290aWF0ZT0xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLXMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJ3cml0ZSBoZWxsbyByZXF1ZXN0IgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogY2xpZW50LWluaXRpYXRlZCwgc2VydmVyLXJlamVjdGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0wIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLVMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtUyAid3JpdGUgaGVsbG8gcmVxdWVzdCIgXAorICAgICAgICAgICAgLWMgIlNTTCAtIFVuZXhwZWN0ZWQgbWVzc2FnZSBhdCBTZXJ2ZXJIZWxsbyBpbiByZW5lZ290aWF0aW9uIiBcCisgICAgICAgICAgICAtYyAiZmFpbGVkIgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogc2VydmVyLWluaXRpYXRlZCwgY2xpZW50LXJlamVjdGVkLCBkZWZhdWx0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLVMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAid3JpdGUgaGVsbG8gcmVxdWVzdCIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIEFuIHVuZXhwZWN0ZWQgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBvdXIgcGVlciIgXAorICAgICAgICAgICAgLVMgImZhaWxlZCIKKworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IHNlcnZlci1pbml0aWF0ZWQsIGNsaWVudC1yZWplY3RlZCwgbm90IGVuZm9yY2VkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEgXAorICAgICAgICAgICAgIHJlbmVnb19kZWxheT0tMSBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLVMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtUyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJ3cml0ZSBoZWxsbyByZXF1ZXN0IiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gQW4gdW5leHBlY3RlZCBtZXNzYWdlIHdhcyByZWNlaXZlZCBmcm9tIG91ciBwZWVyIiBcCisgICAgICAgICAgICAtUyAiZmFpbGVkIgorCisjIGRlbGF5IDIgZm9yIDEgYWxlcnQgcmVjb3JkICsgMSBhcHBsaWNhdGlvbiBkYXRhIHJlY29yZAorcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IHNlcnZlci1pbml0aWF0ZWQsIGNsaWVudC1yZWplY3RlZCwgZGVsYXkgMiIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIFwKKyAgICAgICAgICAgICByZW5lZ29fZGVsYXk9MiBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLVMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtUyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJ3cml0ZSBoZWxsbyByZXF1ZXN0IiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gQW4gdW5leHBlY3RlZCBtZXNzYWdlIHdhcyByZWNlaXZlZCBmcm9tIG91ciBwZWVyIiBcCisgICAgICAgICAgICAtUyAiZmFpbGVkIgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogc2VydmVyLWluaXRpYXRlZCwgY2xpZW50LXJlamVjdGVkLCBkZWxheSAwIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEgXAorICAgICAgICAgICAgIHJlbmVnb19kZWxheT0wIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1TICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIndyaXRlIGhlbGxvIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1zICJTU0wgLSBBbiB1bmV4cGVjdGVkIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gb3VyIHBlZXIiCisKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBzZXJ2ZXItaW5pdGlhdGVkLCBjbGllbnQtYWNjZXB0ZWQsIGRlbGF5IDAiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSBcCisgICAgICAgICAgICAgcmVuZWdvX2RlbGF5PTAgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAid3JpdGUgaGVsbG8gcmVxdWVzdCIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIEFuIHVuZXhwZWN0ZWQgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBvdXIgcGVlciIgXAorICAgICAgICAgICAgLVMgImZhaWxlZCIKKworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IHBlcmlvZGljLCBqdXN0IGJlbG93IHBlcmlvZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz05IHJlbmVnb3RpYXRpb249MSByZW5lZ29fcGVyaW9kPTMgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJyZWNvcmQgY291bnRlciBsaW1pdCByZWFjaGVkOiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLUMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtUyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1TICJ3cml0ZSBoZWxsbyByZXF1ZXN0IiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gQW4gdW5leHBlY3RlZCBtZXNzYWdlIHdhcyByZWNlaXZlZCBmcm9tIG91ciBwZWVyIiBcCisgICAgICAgICAgICAtUyAiZmFpbGVkIgorCisjIG9uZSBleHRyYSBleGNoYW5nZSB0byBiZSBhYmxlIHRvIGNvbXBsZXRlIHJlbmVnbworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IHBlcmlvZGljLCBqdXN0IGFib3ZlIHBlcmlvZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz05IHJlbmVnb3RpYXRpb249MSByZW5lZ29fcGVyaW9kPTMgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTQgcmVuZWdvdGlhdGlvbj0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNvcmQgY291bnRlciBsaW1pdCByZWFjaGVkOiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJ3cml0ZSBoZWxsbyByZXF1ZXN0IiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gQW4gdW5leHBlY3RlZCBtZXNzYWdlIHdhcyByZWNlaXZlZCBmcm9tIG91ciBwZWVyIiBcCisgICAgICAgICAgICAtUyAiZmFpbGVkIgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogcGVyaW9kaWMsIHR3byB0aW1lcyBwZXJpb2QiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9OSByZW5lZ290aWF0aW9uPTEgcmVuZWdvX3BlcmlvZD0zIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz03IHJlbmVnb3RpYXRpb249MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjb3JkIGNvdW50ZXIgbGltaXQgcmVhY2hlZDogcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAid3JpdGUgaGVsbG8gcmVxdWVzdCIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIEFuIHVuZXhwZWN0ZWQgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBvdXIgcGVlciIgXAorICAgICAgICAgICAgLVMgImZhaWxlZCIKKworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IHBlcmlvZGljLCBhYm92ZSBwZXJpb2QsIGRpc2FibGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTkgcmVuZWdvdGlhdGlvbj0wIHJlbmVnb19wZXJpb2Q9MyBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9NCByZW5lZ290aWF0aW9uPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLVMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInJlY29yZCBjb3VudGVyIGxpbWl0IHJlYWNoZWQ6IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtQyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1TICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLVMgIndyaXRlIGhlbGxvIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBBbiB1bmV4cGVjdGVkIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gb3VyIHBlZXIiIFwKKyAgICAgICAgICAgIC1TICJmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBuYmlvLCBjbGllbnQtaW5pdGlhdGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgbmJpbz0yIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBuYmlvPTIgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLXMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1TICJ3cml0ZSBoZWxsbyByZXF1ZXN0IgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogbmJpbywgc2VydmVyLWluaXRpYXRlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIG5iaW89MiBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBuYmlvPTIgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAid3JpdGUgaGVsbG8gcmVxdWVzdCIKKworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IG9wZW5zc2wgc2VydmVyLCBjbGllbnQtaW5pdGlhdGVkIiBcCisgICAgICAgICAgICAiJE9fU1JWIC13d3ciIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MSByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtQyAic3NsX2hhbnNoYWtlKCkgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBbT29dW0trXSIKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogZ251dGxzIHNlcnZlciBzdHJpY3QsIGNsaWVudC1pbml0aWF0ZWQiIFwKKyAgICAgICAgICAgICIkR19TUlYgLS1wcmlvcml0eT1OT1JNQUw6JVNBRkVfUkVORUdPVElBVElPTiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0xIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1DICJzc2xfaGFuc2hha2UoKSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgImVycm9yIiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIFtPb11bS2tdIgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBnbnV0bHMgc2VydmVyIHVuc2FmZSwgY2xpZW50LWluaXRpYXRlZCBkZWZhdWx0IiBcCisgICAgICAgICAgICAiJEdfU1JWIC0tcHJpb3JpdHk9Tk9STUFMOiVESVNBQkxFX1NBRkVfUkVORUdPVElBVElPTiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0xIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1jICJtYmVkdGxzX3NzbF9oYW5kc2hha2UoKSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgImVycm9yIiBcCisgICAgICAgICAgICAtQyAiSFRUUC8xLjAgMjAwIFtPb11bS2tdIgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBnbnV0bHMgc2VydmVyIHVuc2FmZSwgY2xpZW50LWluaXRpdGF0ZWQgbm8gbGVnYWN5IiBcCisgICAgICAgICAgICAiJEdfU1JWIC0tcHJpb3JpdHk9Tk9STUFMOiVESVNBQkxFX1NBRkVfUkVORUdPVElBVElPTiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0xIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIFwKKyAgICAgICAgICAgICBhbGxvd19sZWdhY3k9MCIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtYyAibWJlZHRsc19zc2xfaGFuZHNoYWtlKCkgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1jICJlcnJvciIgXAorICAgICAgICAgICAgLUMgIkhUVFAvMS4wIDIwMCBbT29dW0trXSIKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogZ251dGxzIHNlcnZlciB1bnNhZmUsIGNsaWVudC1pbml0aXRhdGVkIGxlZ2FjeSIgXAorICAgICAgICAgICAgIiRHX1NSViAtLXByaW9yaXR5PU5PUk1BTDolRElTQUJMRV9TQUZFX1JFTkVHT1RJQVRJT04iIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MSByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSBcCisgICAgICAgICAgICAgYWxsb3dfbGVnYWN5PTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLUMgInNzbF9oYW5zaGFrZSgpIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAiZXJyb3IiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgW09vXVtLa10iCisKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBEVExTLCBjbGllbnQtaW5pdGlhdGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZHRscz0xIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGR0bHM9MSBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLVMgIndyaXRlIGhlbGxvIHJlcXVlc3QiCisKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBEVExTLCBzZXJ2ZXItaW5pdGlhdGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZHRscz0xIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZHRscz0xIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSBcCisgICAgICAgICAgICAgcmVhZF90aW1lb3V0PTEwMDAgbWF4X3Jlc2VuZD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAid3JpdGUgaGVsbG8gcmVxdWVzdCIKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogRFRMUywgZ251dGxzIHNlcnZlciwgY2xpZW50LWluaXRpYXRlZCIgXAorICAgICAgICAgICAgIiRHX1NSViAtdSAtLW10dSA0MDk2IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZHRscz0xIGV4Y2hhbmdlcz0xIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1DICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiCisKKyMgVGVzdCBmb3IgdGhlICJzZWN1cmUgcmVuZWdvdGF0aW9uIiBleHRlbnNpb24gb25seSAobm8gYWN0dWFsIHJlbmVnb3RpYXRpb24pCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIlJlbmVnbyBleHQ6IGdudXRscyBzZXJ2ZXIgc3RyaWN0LCBjbGllbnQgZGVmYXVsdCIgXAorICAgICAgICAgICAgIiRHX1NSViAtLXByaW9yaXR5PU5PUk1BTDolU0FGRV9SRU5FR09USUFUSU9OIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZXJyb3IiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgW09vXVtLa10iCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIlJlbmVnbyBleHQ6IGdudXRscyBzZXJ2ZXIgdW5zYWZlLCBjbGllbnQgZGVmYXVsdCIgXAorICAgICAgICAgICAgIiRHX1NSViAtLXByaW9yaXR5PU5PUk1BTDolRElTQUJMRV9TQUZFX1JFTkVHT1RJQVRJT04iIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBbT29dW0trXSIKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiUmVuZWdvIGV4dDogZ251dGxzIHNlcnZlciB1bnNhZmUsIGNsaWVudCBicmVhayBsZWdhY3kiIFwKKyAgICAgICAgICAgICIkR19TUlYgLS1wcmlvcml0eT1OT1JNQUw6JURJU0FCTEVfU0FGRV9SRU5FR09USUFUSU9OIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgYWxsb3dfbGVnYWN5PS0xIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImVycm9yIiBcCisgICAgICAgICAgICAtQyAiSFRUUC8xLjAgMjAwIFtPb11bS2tdIgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJSZW5lZ28gZXh0OiBnbnV0bHMgY2xpZW50IHN0cmljdCwgc2VydmVyIGRlZmF1bHQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRHX0NMSSAtLXByaW9yaXR5PU5PUk1BTDolU0FGRV9SRU5FR09USUFUSU9OIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPXHxmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJSZW5lZ28gZXh0OiBnbnV0bHMgY2xpZW50IHVuc2FmZSwgc2VydmVyIGRlZmF1bHQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRHX0NMSSAtLXByaW9yaXR5PU5PUk1BTDolRElTQUJMRV9TQUZFX1JFTkVHT1RJQVRJT04iIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk9cfGZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIlJlbmVnbyBleHQ6IGdudXRscyBjbGllbnQgdW5zYWZlLCBzZXJ2ZXIgYnJlYWsgbGVnYWN5IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYWxsb3dfbGVnYWN5PS0xIiBcCisgICAgICAgICAgICAiJEdfQ0xJIC0tcHJpb3JpdHk9Tk9STUFMOiVESVNBQkxFX1NBRkVfUkVORUdPVElBVElPTiIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtUyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GT1x8Zm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIKKworIyBUZXN0cyBmb3Igc2lsZW50bHkgZHJvcHBpbmcgdHJhaWxpbmcgZXh0cmEgYnl0ZXMgaW4gLmRlciBjZXJ0aWZpY2F0ZXMKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiREVSIGZvcm1hdDogbm8gdHJhaWxpbmcgYnl0ZXMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjAuY3J0IFwKKyAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAiJEdfQ0xJICIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiSGFuZHNoYWtlIHdhcyBjb21wbGV0ZWQiIFwKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiREVSIGZvcm1hdDogd2l0aCBhIHRyYWlsaW5nIHplcm8gYnl0ZSIgXAorICAgICAgICAgICAgIiRQX1NSViBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyMWEuY3J0IFwKKyAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAiJEdfQ0xJICIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiSGFuZHNoYWtlIHdhcyBjb21wbGV0ZWQiIFwKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiREVSIGZvcm1hdDogd2l0aCBhIHRyYWlsaW5nIHJhbmRvbSBieXRlIiBcCisgICAgICAgICAgICAiJFBfU1JWIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS1kZXIxYi5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgICIkR19DTEkgIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJIYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCIgXAorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJERVIgZm9ybWF0OiB3aXRoIDIgdHJhaWxpbmcgcmFuZG9tIGJ5dGVzIiBcCisgICAgICAgICAgICAiJFBfU1JWIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS1kZXIyLmNydCBcCisgICAgICAgICAgICAga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIgXAorICAgICAgICAgICAgIiRHX0NMSSAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkhhbmRzaGFrZSB3YXMgY29tcGxldGVkIiBcCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIkRFUiBmb3JtYXQ6IHdpdGggNCB0cmFpbGluZyByYW5kb20gYnl0ZXMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjQuY3J0IFwKKyAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAiJEdfQ0xJICIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiSGFuZHNoYWtlIHdhcyBjb21wbGV0ZWQiIFwKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiREVSIGZvcm1hdDogd2l0aCA4IHRyYWlsaW5nIHJhbmRvbSBieXRlcyIgXAorICAgICAgICAgICAgIiRQX1NSViBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyOC5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgICIkR19DTEkgIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJIYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCIgXAorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJERVIgZm9ybWF0OiB3aXRoIDkgdHJhaWxpbmcgcmFuZG9tIGJ5dGVzIiBcCisgICAgICAgICAgICAiJFBfU1JWIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS1kZXI5LmNydCBcCisgICAgICAgICAgICAga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIgXAorICAgICAgICAgICAgIiRHX0NMSSAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkhhbmRzaGFrZSB3YXMgY29tcGxldGVkIiBcCisKKyMgVGVzdHMgZm9yIGF1dGhfbW9kZQorCitydW5fdGVzdCAgICAiQXV0aGVudGljYXRpb246IHNlcnZlciBiYWRjZXJ0LCBjbGllbnQgcmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LWJhZHNpZ24uY3J0IFwKKyAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPXJlcXVpcmVkIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJ4NTA5X3ZlcmlmeV9jZXJ0KCkgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1jICIhIFRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgY29ycmVjdGx5IHNpZ25lZCBieSB0aGUgdHJ1c3RlZCBDQSIgXAorICAgICAgICAgICAgLWMgIiEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtYyAiWDUwOSAtIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJBdXRoZW50aWNhdGlvbjogc2VydmVyIGJhZGNlcnQsIGNsaWVudCBvcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX1NSViBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUtYmFkc2lnbi5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIng1MDlfdmVyaWZ5X2NlcnQoKSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIiEgVGhlIGNlcnRpZmljYXRlIGlzIG5vdCBjb3JyZWN0bHkgc2lnbmVkIGJ5IHRoZSB0cnVzdGVkIENBIiBcCisgICAgICAgICAgICAtQyAiISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJYNTA5IC0gQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgIkF1dGhlbnRpY2F0aW9uOiBzZXJ2ZXIgYmFkY2VydCwgY2xpZW50IG5vbmUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LWJhZHNpZ24uY3J0IFwKKyAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPW5vbmUiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgIng1MDlfdmVyaWZ5X2NlcnQoKSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIiEgVGhlIGNlcnRpZmljYXRlIGlzIG5vdCBjb3JyZWN0bHkgc2lnbmVkIGJ5IHRoZSB0cnVzdGVkIENBIiBcCisgICAgICAgICAgICAtQyAiISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJYNTA5IC0gQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgIkF1dGhlbnRpY2F0aW9uOiBjbGllbnQgU0hBMjU2LCBzZXJ2ZXIgcmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgYXV0aF9tb2RlPXJlcXVpcmVkIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCBcCisgICAgICAgICAgICAga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmtleSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJTdXBwb3J0ZWQgU2lnbmF0dXJlIEFsZ29yaXRobSBmb3VuZDogNCwiIFwKKyAgICAgICAgICAgIC1jICJTdXBwb3J0ZWQgU2lnbmF0dXJlIEFsZ29yaXRobSBmb3VuZDogNSwiCisKK3J1bl90ZXN0ICAgICJBdXRoZW50aWNhdGlvbjogY2xpZW50IFNIQTM4NCwgc2VydmVyIHJlcXVpcmVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGF1dGhfbW9kZT1yZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNi5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNi5rZXkgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiU3VwcG9ydGVkIFNpZ25hdHVyZSBBbGdvcml0aG0gZm91bmQ6IDQsIiBcCisgICAgICAgICAgICAtYyAiU3VwcG9ydGVkIFNpZ25hdHVyZSBBbGdvcml0aG0gZm91bmQ6IDUsIgorCitydW5fdGVzdCAgICAiQXV0aGVudGljYXRpb246IGNsaWVudCBiYWRjZXJ0LCBzZXJ2ZXIgcmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBhdXRoX21vZGU9cmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUtYmFkc2lnbi5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLVMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLWMgImdvdCBhIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIiBcCisgICAgICAgICAgICAtQyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiIFwKKyAgICAgICAgICAgIC1TICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLXMgIng1MDlfdmVyaWZ5X2NlcnQoKSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLXMgIiEgVGhlIGNlcnRpZmljYXRlIGlzIG5vdCBjb3JyZWN0bHkgc2lnbmVkIGJ5IHRoZSB0cnVzdGVkIENBIiBcCisgICAgICAgICAgICAtcyAiISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1jICIhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLXMgIlg1MDkgLSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZmFpbGVkIgorCitydW5fdGVzdCAgICAiQXV0aGVudGljYXRpb246IGNsaWVudCBiYWRjZXJ0LCBzZXJ2ZXIgb3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUtYmFkc2lnbi5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLWMgImdvdCBhIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIiBcCisgICAgICAgICAgICAtQyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiIFwKKyAgICAgICAgICAgIC1TICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLXMgIng1MDlfdmVyaWZ5X2NlcnQoKSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLXMgIiEgVGhlIGNlcnRpZmljYXRlIGlzIG5vdCBjb3JyZWN0bHkgc2lnbmVkIGJ5IHRoZSB0cnVzdGVkIENBIiBcCisgICAgICAgICAgICAtUyAiISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICIhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLVMgIlg1MDkgLSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZmFpbGVkIgorCitydW5fdGVzdCAgICAiQXV0aGVudGljYXRpb246IGNsaWVudCBiYWRjZXJ0LCBzZXJ2ZXIgbm9uZSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGF1dGhfbW9kZT1ub25lIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LWJhZHNpZ24uY3J0IFwKKyAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1jICJnb3Qgbm8gY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLWMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUiIFwKKyAgICAgICAgICAgIC1jICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLXMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtUyAieDUwOV92ZXJpZnlfY2VydCgpIHJldHVybmVkIiBcCisgICAgICAgICAgICAtUyAiISBUaGUgY2VydGlmaWNhdGUgaXMgbm90IGNvcnJlY3RseSBzaWduZWQgYnkgdGhlIHRydXN0ZWQgQ0EiIFwKKyAgICAgICAgICAgIC1TICIhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIiEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtUyAiWDUwOSAtIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJBdXRoZW50aWNhdGlvbjogY2xpZW50IG5vIGNlcnQsIHNlcnZlciBvcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGNydF9maWxlPW5vbmUga2V5X2ZpbGU9bm9uZSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtYyAiZ290IGEgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUkIiBcCisgICAgICAgICAgICAtQyAiZ290IG5vIGNlcnRpZmljYXRlIHRvIHNlbmQiIFwKKyAgICAgICAgICAgIC1TICJTU0x2MyBjbGllbnQgaGFzIG5vIGNlcnRpZmljYXRlIiBcCisgICAgICAgICAgICAtYyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiIFwKKyAgICAgICAgICAgIC1zICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLXMgIiEgQ2VydGlmaWNhdGUgd2FzIG1pc3NpbmciIFwKKyAgICAgICAgICAgIC1TICIhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIiEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtUyAiWDUwOSAtIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJBdXRoZW50aWNhdGlvbjogb3BlbnNzbCBjbGllbnQgbm8gY2VydCwgc2VydmVyIG9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJE9fQ0xJIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1zICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLXMgIiEgQ2VydGlmaWNhdGUgd2FzIG1pc3NpbmciIFwKKyAgICAgICAgICAgIC1TICIhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLVMgIlg1MDkgLSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZmFpbGVkIgorCitydW5fdGVzdCAgICAiQXV0aGVudGljYXRpb246IGNsaWVudCBubyBjZXJ0LCBvcGVuc3NsIHNlcnZlciBvcHRpb25hbCIgXAorICAgICAgICAgICAgIiRPX1NSViAtdmVyaWZ5IDEwIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgY3J0X2ZpbGU9bm9uZSBrZXlfZmlsZT1ub25lIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1jICJnb3QgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSQiIFwKKyAgICAgICAgICAgIC1jICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLUMgIiEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9QUk9UT19TU0wzCitydW5fdGVzdCAgICAiQXV0aGVudGljYXRpb246IGNsaWVudCBubyBjZXJ0LCBzc2wzIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYXV0aF9tb2RlPW9wdGlvbmFsIGZvcmNlX3ZlcnNpb249c3NsMyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGNydF9maWxlPW5vbmUga2V5X2ZpbGU9bm9uZSBtaW5fdmVyc2lvbj1zc2wzIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1jICJnb3QgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSQiIFwKKyAgICAgICAgICAgIC1jICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLWMgImdvdCBubyBjZXJ0aWZpY2F0ZSB0byBzZW5kIiBcCisgICAgICAgICAgICAtcyAiU1NMdjMgY2xpZW50IGhhcyBubyBjZXJ0aWZpY2F0ZSIgXAorICAgICAgICAgICAgLXMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtcyAiISBDZXJ0aWZpY2F0ZSB3YXMgbWlzc2luZyIgXAorICAgICAgICAgICAgLVMgIiEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAiISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1TICJYNTA5IC0gQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGZhaWxlZCIKKworIyBUZXN0cyBmb3IgY2VydGlmaWNhdGUgc2VsZWN0aW9uIGJhc2VkIG9uIFNIQSB2ZXJzb24KKworcnVuX3Rlc3QgICAgIkNlcnRpZmljYXRlIGhhc2g6IGNsaWVudCBUTFMgMS4yIC0+IFNIQS0yIiBcCisgICAgICAgICAgICAiJFBfU1JWIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5jcnQgXAorICAgICAgICAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICAgICAgICAgY3J0X2ZpbGUyPWRhdGFfZmlsZXMvc2VydmVyNS1zaGExLmNydCBcCisgICAgICAgICAgICAgICAgICAgIGtleV9maWxlMj1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX3ZlcnNpb249dGxzMV8yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJzaWduZWQgdXNpbmcuKkVDRFNBIHdpdGggU0hBMjU2IiBcCisgICAgICAgICAgICAtQyAic2lnbmVkIHVzaW5nLipFQ0RTQSB3aXRoIFNIQTEiCisKK3J1bl90ZXN0ICAgICJDZXJ0aWZpY2F0ZSBoYXNoOiBjbGllbnQgVExTIDEuMSAtPiBTSEEtMSIgXAorICAgICAgICAgICAgIiRQX1NSViBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IFwKKyAgICAgICAgICAgICAgICAgICAga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgICAgICAgIGNydF9maWxlMj1kYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMS5jcnQgXAorICAgICAgICAgICAgICAgICAgICBrZXlfZmlsZTI9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV92ZXJzaW9uPXRsczFfMSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAic2lnbmVkIHVzaW5nLipFQ0RTQSB3aXRoIFNIQTI1NiIgXAorICAgICAgICAgICAgLWMgInNpZ25lZCB1c2luZy4qRUNEU0Egd2l0aCBTSEExIgorCitydW5fdGVzdCAgICAiQ2VydGlmaWNhdGUgaGFzaDogY2xpZW50IFRMUyAxLjAgLT4gU0hBLTEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBcCisgICAgICAgICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgICAgICAgICBjcnRfZmlsZTI9ZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTEuY3J0IFwKKyAgICAgICAgICAgICAgICAgICAga2V5X2ZpbGUyPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfdmVyc2lvbj10bHMxIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJzaWduZWQgdXNpbmcuKkVDRFNBIHdpdGggU0hBMjU2IiBcCisgICAgICAgICAgICAtYyAic2lnbmVkIHVzaW5nLipFQ0RTQSB3aXRoIFNIQTEiCisKK3J1bl90ZXN0ICAgICJDZXJ0aWZpY2F0ZSBoYXNoOiBjbGllbnQgVExTIDEuMSwgbm8gU0hBLTEgLT4gU0hBLTIgKG9yZGVyIDEpIiBcCisgICAgICAgICAgICAiJFBfU1JWIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5jcnQgXAorICAgICAgICAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICAgICAgICAgY3J0X2ZpbGUyPWRhdGFfZmlsZXMvc2VydmVyNi5jcnQgXAorICAgICAgICAgICAgICAgICAgICBrZXlfZmlsZTI9ZGF0YV9maWxlcy9zZXJ2ZXI2LmtleSIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV92ZXJzaW9uPXRsczFfMSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAic2VyaWFsIG51bWJlci4qMDkiIFwKKyAgICAgICAgICAgIC1jICJzaWduZWQgdXNpbmcuKkVDRFNBIHdpdGggU0hBMjU2IiBcCisgICAgICAgICAgICAtQyAic2lnbmVkIHVzaW5nLipFQ0RTQSB3aXRoIFNIQTEiCisKK3J1bl90ZXN0ICAgICJDZXJ0aWZpY2F0ZSBoYXNoOiBjbGllbnQgVExTIDEuMSwgbm8gU0hBLTEgLT4gU0hBLTIgKG9yZGVyIDIpIiBcCisgICAgICAgICAgICAiJFBfU1JWIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNi5jcnQgXAorICAgICAgICAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjYua2V5IFwKKyAgICAgICAgICAgICAgICAgICAgY3J0X2ZpbGUyPWRhdGFfZmlsZXMvc2VydmVyNS5jcnQgXAorICAgICAgICAgICAgICAgICAgICBrZXlfZmlsZTI9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV92ZXJzaW9uPXRsczFfMSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAic2VyaWFsIG51bWJlci4qMEEiIFwKKyAgICAgICAgICAgIC1jICJzaWduZWQgdXNpbmcuKkVDRFNBIHdpdGggU0hBMjU2IiBcCisgICAgICAgICAgICAtQyAic2lnbmVkIHVzaW5nLipFQ0RTQSB3aXRoIFNIQTEiCisKKyMgdGVzdHMgZm9yIFNOSQorCitydW5fdGVzdCAgICAiU05JOiBubyBTTkkgY2FsbGJhY2siIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAiJFBfQ0xJIHNlcnZlcl9uYW1lPWxvY2FsaG9zdCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAicGFyc2UgU2VydmVyTmFtZSBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJpc3N1ZXIgbmFtZSAqOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBIiBcCisgICAgICAgICAgICAtYyAic3ViamVjdCBuYW1lICo6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdCIKKworcnVuX3Rlc3QgICAgIlNOSTogbWF0Y2hpbmcgY2VydCAxIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5jcnQga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgc25pPWxvY2FsaG9zdCxkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0LGRhdGFfZmlsZXMvc2VydmVyMi5rZXksLSwtLC0scG9sYXJzc2wuZXhhbXBsZSxkYXRhX2ZpbGVzL3NlcnZlcjEtbm9zcGFjZS5jcnQsZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSwtLC0sLSIgXAorICAgICAgICAgICAgIiRQX0NMSSBzZXJ2ZXJfbmFtZT1sb2NhbGhvc3QiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgInBhcnNlIFNlcnZlck5hbWUgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiaXNzdWVyIG5hbWUgKjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQSIgXAorICAgICAgICAgICAgLWMgInN1YmplY3QgbmFtZSAqOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3QiCisKK3J1bl90ZXN0ICAgICJTTkk6IG1hdGNoaW5nIGNlcnQgMiIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIHNuaT1sb2NhbGhvc3QsZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCxkYXRhX2ZpbGVzL3NlcnZlcjIua2V5LC0sLSwtLHBvbGFyc3NsLmV4YW1wbGUsZGF0YV9maWxlcy9zZXJ2ZXIxLW5vc3BhY2UuY3J0LGRhdGFfZmlsZXMvc2VydmVyMS5rZXksLSwtLC0iIFwKKyAgICAgICAgICAgICIkUF9DTEkgc2VydmVyX25hbWU9cG9sYXJzc2wuZXhhbXBsZSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAicGFyc2UgU2VydmVyTmFtZSBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJpc3N1ZXIgbmFtZSAqOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBIiBcCisgICAgICAgICAgICAtYyAic3ViamVjdCBuYW1lICo6IEM9TkwsIE89UG9sYXJTU0wsIENOPXBvbGFyc3NsLmV4YW1wbGUiCisKK3J1bl90ZXN0ICAgICJTTkk6IG5vIG1hdGNoaW5nIGNlcnQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBzbmk9bG9jYWxob3N0LGRhdGFfZmlsZXMvc2VydmVyMi5jcnQsZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSwtLC0sLSxwb2xhcnNzbC5leGFtcGxlLGRhdGFfZmlsZXMvc2VydmVyMS1ub3NwYWNlLmNydCxkYXRhX2ZpbGVzL3NlcnZlcjEua2V5LC0sLSwtIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHNlcnZlcl9uYW1lPW5vbmVzdWNoLmV4YW1wbGUiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLXMgInBhcnNlIFNlcnZlck5hbWUgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic3NsX3NuaV93cmFwcGVyKCkgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1zICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1jICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1jICJTU0wgLSBBIGZhdGFsIGFsZXJ0IG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gb3VyIHBlZXIiCisKK3J1bl90ZXN0ICAgICJTTkk6IGNsaWVudCBhdXRoIG5vIG92ZXJyaWRlOiBvcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGF1dGhfbW9kZT1vcHRpb25hbCBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBzbmk9bG9jYWxob3N0LGRhdGFfZmlsZXMvc2VydmVyMi5jcnQsZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSwtLC0sLSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHNlcnZlcl9uYW1lPWxvY2FsaG9zdCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtYyAiZ290IGEgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLVMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IgorCitydW5fdGVzdCAgICAiU05JOiBjbGllbnQgYXV0aCBvdmVycmlkZTogbm9uZSAtPiBvcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGF1dGhfbW9kZT1ub25lIFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIHNuaT1sb2NhbGhvc3QsZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCxkYXRhX2ZpbGVzL3NlcnZlcjIua2V5LC0sLSxvcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHNlcnZlcl9uYW1lPWxvY2FsaG9zdCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtYyAiZ290IGEgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLVMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IgorCitydW5fdGVzdCAgICAiU05JOiBjbGllbnQgYXV0aCBvdmVycmlkZTogb3B0aW9uYWwgLT4gbm9uZSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGF1dGhfbW9kZT1vcHRpb25hbCBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBzbmk9bG9jYWxob3N0LGRhdGFfZmlsZXMvc2VydmVyMi5jcnQsZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSwtLC0sbm9uZSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHNlcnZlcl9uYW1lPWxvY2FsaG9zdCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtYyAiZ290IG5vIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1jICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIiBcCisgICAgICAgICAgICAtYyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiIFwKKyAgICAgICAgICAgIC1zICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHZlcmlmeSIKKworcnVuX3Rlc3QgICAgIlNOSTogQ0Egbm8gb3ZlcnJpZGUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBhdXRoX21vZGU9b3B0aW9uYWwgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5jcnQga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgY2FfZmlsZT1kYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IFwKKyAgICAgICAgICAgICBzbmk9bG9jYWxob3N0LGRhdGFfZmlsZXMvc2VydmVyMi5jcnQsZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSwtLC0scmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBzZXJ2ZXJfbmFtZT1sb2NhbGhvc3QgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNi5jcnQga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmtleSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtUyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtYyAiZ290IGEgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLVMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtcyAieDUwOV92ZXJpZnlfY2VydCgpIHJldHVybmVkIiBcCisgICAgICAgICAgICAtcyAiISBUaGUgY2VydGlmaWNhdGUgaXMgbm90IGNvcnJlY3RseSBzaWduZWQgYnkgdGhlIHRydXN0ZWQgQ0EiIFwKKyAgICAgICAgICAgIC1TICJUaGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gcmV2b2tlZCAoaXMgb24gYSBDUkwpIgorCitydW5fdGVzdCAgICAiU05JOiBDQSBvdmVycmlkZSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGF1dGhfbW9kZT1vcHRpb25hbCBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBjYV9maWxlPWRhdGFfZmlsZXMvdGVzdC1jYS5jcnQgXAorICAgICAgICAgICAgIHNuaT1sb2NhbGhvc3QsZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCxkYXRhX2ZpbGVzL3NlcnZlcjIua2V5LGRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0LC0scmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBzZXJ2ZXJfbmFtZT1sb2NhbGhvc3QgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNi5jcnQga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmtleSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtYyAiZ290IGEgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLVMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtUyAieDUwOV92ZXJpZnlfY2VydCgpIHJldHVybmVkIiBcCisgICAgICAgICAgICAtUyAiISBUaGUgY2VydGlmaWNhdGUgaXMgbm90IGNvcnJlY3RseSBzaWduZWQgYnkgdGhlIHRydXN0ZWQgQ0EiIFwKKyAgICAgICAgICAgIC1TICJUaGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gcmV2b2tlZCAoaXMgb24gYSBDUkwpIgorCitydW5fdGVzdCAgICAiU05JOiBDQSBvdmVycmlkZSB3aXRoIENSTCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGF1dGhfbW9kZT1vcHRpb25hbCBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBjYV9maWxlPWRhdGFfZmlsZXMvdGVzdC1jYS5jcnQgXAorICAgICAgICAgICAgIHNuaT1sb2NhbGhvc3QsZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCxkYXRhX2ZpbGVzL3NlcnZlcjIua2V5LGRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0LGRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0scmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBzZXJ2ZXJfbmFtZT1sb2NhbGhvc3QgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNi5jcnQga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmtleSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtUyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtYyAiZ290IGEgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLVMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtcyAieDUwOV92ZXJpZnlfY2VydCgpIHJldHVybmVkIiBcCisgICAgICAgICAgICAtUyAiISBUaGUgY2VydGlmaWNhdGUgaXMgbm90IGNvcnJlY3RseSBzaWduZWQgYnkgdGhlIHRydXN0ZWQgQ0EiIFwKKyAgICAgICAgICAgIC1zICJUaGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gcmV2b2tlZCAoaXMgb24gYSBDUkwpIgorCisjIFRlc3RzIGZvciBub24tYmxvY2tpbmcgSS9POiBleGVyY2lzZSBhIHZhcmlldHkgb2YgaGFuZHNoYWtlIGZsb3dzCisKK3J1bl90ZXN0ICAgICJOb24tYmxvY2tpbmcgSS9POiBiYXNpYyBoYW5kc2hha2UiIFwKKyAgICAgICAgICAgICIkUF9TUlYgbmJpbz0yIHRpY2tldHM9MCBhdXRoX21vZGU9bm9uZSIgXAorICAgICAgICAgICAgIiRQX0NMSSBuYmlvPTIgdGlja2V0cz0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1jICJSZWFkIGZyb20gc2VydmVyOiAuKiBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTm9uLWJsb2NraW5nIEkvTzogY2xpZW50IGF1dGgiIFwKKyAgICAgICAgICAgICIkUF9TUlYgbmJpbz0yIHRpY2tldHM9MCBhdXRoX21vZGU9cmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgbmJpbz0yIHRpY2tldHM9MCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtYyAiUmVhZCBmcm9tIHNlcnZlcjogLiogYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIk5vbi1ibG9ja2luZyBJL086IHRpY2tldCIgXAorICAgICAgICAgICAgIiRQX1NSViBuYmlvPTIgdGlja2V0cz0xIGF1dGhfbW9kZT1ub25lIiBcCisgICAgICAgICAgICAiJFBfQ0xJIG5iaW89MiB0aWNrZXRzPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIlJlYWQgZnJvbSBzZXJ2ZXI6IC4qIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJOb24tYmxvY2tpbmcgSS9POiB0aWNrZXQgKyBjbGllbnQgYXV0aCIgXAorICAgICAgICAgICAgIiRQX1NSViBuYmlvPTIgdGlja2V0cz0xIGF1dGhfbW9kZT1yZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX0NMSSBuYmlvPTIgdGlja2V0cz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1jICJSZWFkIGZyb20gc2VydmVyOiAuKiBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTm9uLWJsb2NraW5nIEkvTzogdGlja2V0ICsgY2xpZW50IGF1dGggKyByZXN1bWUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgbmJpbz0yIHRpY2tldHM9MSBhdXRoX21vZGU9cmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgbmJpbz0yIHRpY2tldHM9MSByZWNvbm5lY3Q9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtYyAiUmVhZCBmcm9tIHNlcnZlcjogLiogYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIk5vbi1ibG9ja2luZyBJL086IHRpY2tldCArIHJlc3VtZSIgXAorICAgICAgICAgICAgIiRQX1NSViBuYmlvPTIgdGlja2V0cz0xIGF1dGhfbW9kZT1ub25lIiBcCisgICAgICAgICAgICAiJFBfQ0xJIG5iaW89MiB0aWNrZXRzPTEgcmVjb25uZWN0PTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIlJlYWQgZnJvbSBzZXJ2ZXI6IC4qIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJOb24tYmxvY2tpbmcgSS9POiBzZXNzaW9uLWlkIHJlc3VtZSIgXAorICAgICAgICAgICAgIiRQX1NSViBuYmlvPTIgdGlja2V0cz0wIGF1dGhfbW9kZT1ub25lIiBcCisgICAgICAgICAgICAiJFBfQ0xJIG5iaW89MiB0aWNrZXRzPTAgcmVjb25uZWN0PTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIlJlYWQgZnJvbSBzZXJ2ZXI6IC4qIGJ5dGVzIHJlYWQiCisKKyMgVGVzdHMgZm9yIHZlcnNpb24gbmVnb3RpYXRpb24KKworcnVuX3Rlc3QgICAgIlZlcnNpb24gY2hlY2s6IGFsbCAtPiAxLjIiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLXMgIlByb3RvY29sIGlzIFRMU3YxLjIiIFwKKyAgICAgICAgICAgIC1jICJQcm90b2NvbCBpcyBUTFN2MS4yIgorCitydW5fdGVzdCAgICAiVmVyc2lvbiBjaGVjazogY2xpIG1heCAxLjEgLT4gMS4xIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIG1heF92ZXJzaW9uPXRsczFfMSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtcyAiUHJvdG9jb2wgaXMgVExTdjEuMSIgXAorICAgICAgICAgICAgLWMgIlByb3RvY29sIGlzIFRMU3YxLjEiCisKK3J1bl90ZXN0ICAgICJWZXJzaW9uIGNoZWNrOiBzcnYgbWF4IDEuMSAtPiAxLjEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgbWF4X3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1zICJQcm90b2NvbCBpcyBUTFN2MS4xIiBcCisgICAgICAgICAgICAtYyAiUHJvdG9jb2wgaXMgVExTdjEuMSIKKworcnVuX3Rlc3QgICAgIlZlcnNpb24gY2hlY2s6IGNsaStzcnYgbWF4IDEuMSAtPiAxLjEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgbWF4X3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIG1heF92ZXJzaW9uPXRsczFfMSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtcyAiUHJvdG9jb2wgaXMgVExTdjEuMSIgXAorICAgICAgICAgICAgLWMgIlByb3RvY29sIGlzIFRMU3YxLjEiCisKK3J1bl90ZXN0ICAgICJWZXJzaW9uIGNoZWNrOiBjbGkgbWF4IDEuMSwgc3J2IG1pbiAxLjEgLT4gMS4xIiBcCisgICAgICAgICAgICAiJFBfU1JWIG1pbl92ZXJzaW9uPXRsczFfMSIgXAorICAgICAgICAgICAgIiRQX0NMSSBtYXhfdmVyc2lvbj10bHMxXzEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLXMgIlByb3RvY29sIGlzIFRMU3YxLjEiIFwKKyAgICAgICAgICAgIC1jICJQcm90b2NvbCBpcyBUTFN2MS4xIgorCitydW5fdGVzdCAgICAiVmVyc2lvbiBjaGVjazogY2xpIG1pbiAxLjEsIHNydiBtYXggMS4xIC0+IDEuMSIgXAorICAgICAgICAgICAgIiRQX1NSViBtYXhfdmVyc2lvbj10bHMxXzEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgbWluX3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1zICJQcm90b2NvbCBpcyBUTFN2MS4xIiBcCisgICAgICAgICAgICAtYyAiUHJvdG9jb2wgaXMgVExTdjEuMSIKKworcnVuX3Rlc3QgICAgIlZlcnNpb24gY2hlY2s6IGNsaSBtaW4gMS4yLCBzcnYgbWF4IDEuMSAtPiBmYWlsIiBcCisgICAgICAgICAgICAiJFBfU1JWIG1heF92ZXJzaW9uPXRsczFfMSIgXAorICAgICAgICAgICAgIiRQX0NMSSBtaW5fdmVyc2lvbj10bHMxXzIiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLXMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIlNTTCAtIEhhbmRzaGFrZSBwcm90b2NvbCBub3Qgd2l0aGluIG1pbi9tYXggYm91bmRhcmllcyIKKworcnVuX3Rlc3QgICAgIlZlcnNpb24gY2hlY2s6IHNydiBtaW4gMS4yLCBjbGkgbWF4IDEuMSAtPiBmYWlsIiBcCisgICAgICAgICAgICAiJFBfU1JWIG1pbl92ZXJzaW9uPXRsczFfMiIgXAorICAgICAgICAgICAgIiRQX0NMSSBtYXhfdmVyc2lvbj10bHMxXzEiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLXMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLXMgIlNTTCAtIEhhbmRzaGFrZSBwcm90b2NvbCBub3Qgd2l0aGluIG1pbi9tYXggYm91bmRhcmllcyIKKworIyBUZXN0cyBmb3IgQUxQTiBleHRlbnNpb24KKworcnVuX3Rlc3QgICAgIkFMUE46IG5vbmUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImZvdW5kIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZ290IGFuIGFsZXJ0IG1lc3NhZ2UsIHR5cGU6IFxcWzI6MTIwXSIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgYWxwbiBleHRlbnNpb24gIiBcCisgICAgICAgICAgICAtQyAiQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgaXMiIFwKKyAgICAgICAgICAgIC1TICJBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBpcyIKKworcnVuX3Rlc3QgICAgIkFMUE46IGNsaWVudCBvbmx5IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBhbHBuPWFiYywxMjM0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZ290IGFuIGFsZXJ0IG1lc3NhZ2UsIHR5cGU6IFxcWzI6MTIwXSIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgYWxwbiBleHRlbnNpb24gIiBcCisgICAgICAgICAgICAtYyAiQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgaXMgKG5vbmUpIiBcCisgICAgICAgICAgICAtUyAiQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgaXMiCisKK3J1bl90ZXN0ICAgICJBTFBOOiBzZXJ2ZXIgb25seSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGFscG49YWJjLDEyMzQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImdvdCBhbiBhbGVydCBtZXNzYWdlLCB0eXBlOiBcXFsyOjEyMF0iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIGFscG4gZXh0ZW5zaW9uICIgXAorICAgICAgICAgICAgLUMgIkFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sIGlzIiBcCisgICAgICAgICAgICAtcyAiQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgaXMgKG5vbmUpIgorCitydW5fdGVzdCAgICAiQUxQTjogYm90aCwgY29tbW9uIGNsaTEtc3J2MSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGFscG49YWJjLDEyMzQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBhbHBuPWFiYywxMjM0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZ290IGFuIGFsZXJ0IG1lc3NhZ2UsIHR5cGU6IFxcWzI6MTIwXSIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBpcyBhYmMiIFwKKyAgICAgICAgICAgIC1zICJBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBpcyBhYmMiCisKK3J1bl90ZXN0ICAgICJBTFBOOiBib3RoLCBjb21tb24gY2xpMi1zcnYxIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYWxwbj1hYmMsMTIzNCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGFscG49MTIzNCxhYmMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJnb3QgYW4gYWxlcnQgbWVzc2FnZSwgdHlwZTogXFxbMjoxMjBdIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIkFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sIGlzIGFiYyIgXAorICAgICAgICAgICAgLXMgIkFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sIGlzIGFiYyIKKworcnVuX3Rlc3QgICAgIkFMUE46IGJvdGgsIGNvbW1vbiBjbGkxLXNydjIiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBhbHBuPWFiYywxMjM0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgYWxwbj0xMjM0LGFiY2RlIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZ290IGFuIGFsZXJ0IG1lc3NhZ2UsIHR5cGU6IFxcWzI6MTIwXSIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBpcyAxMjM0IiBcCisgICAgICAgICAgICAtcyAiQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgaXMgMTIzNCIKKworcnVuX3Rlc3QgICAgIkFMUE46IGJvdGgsIG5vIGNvbW1vbiIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGFscG49YWJjLDEyMyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGFscG49MTIzNCxhYmNkZSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImdvdCBhbiBhbGVydCBtZXNzYWdlLCB0eXBlOiBcXFsyOjEyMF0iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgaXMgMTIzNCIgXAorICAgICAgICAgICAgLVMgIkFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sIGlzIDEyMzQiCisKKworIyBUZXN0cyBmb3Iga2V5VXNhZ2UgaW4gbGVhZiBjZXJ0aWZpY2F0ZXMsIHBhcnQgMToKKyMgc2VydmVyLXNpZGUgY2VydGlmaWNhdGUvc3VpdGUgc2VsZWN0aW9uCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBzcnY6IFJTQSwgZGlnaXRhbFNpZ25hdHVyZSAtPiAoRUMpREhFLVJTQSIgXAorICAgICAgICAgICAgIiRQX1NSViBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjIua2V5IFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjIua3UtZHMuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtW0VDXSpESEUtUlNBLVdJVEgtIgorCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBzcnY6IFJTQSwga2V5RW5jaXBoZXJtZW50IC0+IFJTQSIgXAorICAgICAgICAgICAgIiRQX1NSViBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjIua2V5IFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjIua3Uta2UuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtUlNBLVdJVEgtIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2Ugc3J2OiBSU0EsIGtleUFncmVlbWVudCAtPiBmYWlsIiBcCisgICAgICAgICAgICAiJFBfU1JWIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyMi5rdS1rYS5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLUMgIkNpcGhlcnN1aXRlIGlzICIKKworcnVuX3Rlc3QgICAgImtleVVzYWdlIHNydjogRUNEU0EsIGRpZ2l0YWxTaWduYXR1cmUgLT4gRUNESEUtRUNEU0EiIFwKKyAgICAgICAgICAgICIkUF9TUlYga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1Lmt1LWRzLmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiQ2lwaGVyc3VpdGUgaXMgVExTLUVDREhFLUVDRFNBLVdJVEgtIgorCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBzcnY6IEVDRFNBLCBrZXlBZ3JlZW1lbnQgLT4gRUNESC0iIFwKKyAgICAgICAgICAgICIkUF9TUlYga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1Lmt1LWthLmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiQ2lwaGVyc3VpdGUgaXMgVExTLUVDREgtIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2Ugc3J2OiBFQ0RTQSwga2V5RW5jaXBoZXJtZW50IC0+IGZhaWwiIFwKKyAgICAgICAgICAgICIkUF9TUlYga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1Lmt1LWtlLmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtQyAiQ2lwaGVyc3VpdGUgaXMgIgorCisjIFRlc3RzIGZvciBrZXlVc2FnZSBpbiBsZWFmIGNlcnRpZmljYXRlcywgcGFydCAyOgorIyBjbGllbnQtc2lkZSBjaGVja2luZyBvZiBzZXJ2ZXIgY2VydAorCitydW5fdGVzdCAgICAia2V5VXNhZ2UgY2xpOiBEaWdpdGFsU2lnbmF0dXJlK0tleUVuY2lwaGVybWVudCwgUlNBOiBPSyIgXAorICAgICAgICAgICAgIiRPX1NSViAta2V5IGRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyMi5rdS1kc19rZS5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLUMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy0iCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBjbGk6IERpZ2l0YWxTaWduYXR1cmUrS2V5RW5jaXBoZXJtZW50LCBESEUtUlNBOiBPSyIgXAorICAgICAgICAgICAgIiRPX1NSViAta2V5IGRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyMi5rdS1kc19rZS5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1DICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2UgY2xpOiBLZXlFbmNpcGhlcm1lbnQsIFJTQTogT0siIFwKKyAgICAgICAgICAgICIkT19TUlYgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjIua2V5IFwKKyAgICAgICAgICAgICAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjIua3Uta2UuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1DICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2UgY2xpOiBLZXlFbmNpcGhlcm1lbnQsIERIRS1SU0E6IGZhaWwiIFwKKyAgICAgICAgICAgICIkT19TUlYgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjIua2V5IFwKKyAgICAgICAgICAgICAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjIua3Uta2UuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtYyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiBcCisgICAgICAgICAgICAtQyAiQ2lwaGVyc3VpdGUgaXMgVExTLSIKKworcnVuX3Rlc3QgICAgImtleVVzYWdlIGNsaTogS2V5RW5jaXBoZXJtZW50LCBESEUtUlNBOiBmYWlsLCBzb2Z0IiBcCisgICAgICAgICAgICAiJE9fU1JWIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWtlLmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0xIGF1dGhfbW9kZT1vcHRpb25hbCBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1DICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtIiBcCisgICAgICAgICAgICAtYyAiISBVc2FnZSBkb2VzIG5vdCBtYXRjaCB0aGUga2V5VXNhZ2UgZXh0ZW5zaW9uIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2UgY2xpOiBEaWdpdGFsU2lnbmF0dXJlLCBESEUtUlNBOiBPSyIgXAorICAgICAgICAgICAgIiRPX1NSViAta2V5IGRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyMi5rdS1kcy5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1DICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2UgY2xpOiBEaWdpdGFsU2lnbmF0dXJlLCBSU0E6IGZhaWwiIFwKKyAgICAgICAgICAgICIkT19TUlYgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjIua2V5IFwKKyAgICAgICAgICAgICAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjIua3UtZHMuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLWMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1jICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiIFwKKyAgICAgICAgICAgIC1DICJDaXBoZXJzdWl0ZSBpcyBUTFMtIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2UgY2xpOiBEaWdpdGFsU2lnbmF0dXJlLCBSU0E6IGZhaWwsIHNvZnQiIFwKKyAgICAgICAgICAgICIkT19TUlYgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjIua2V5IFwKKyAgICAgICAgICAgICAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjIua3UtZHMuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPW9wdGlvbmFsIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtQyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiBcCisgICAgICAgICAgICAtYyAiQ2lwaGVyc3VpdGUgaXMgVExTLSIgXAorICAgICAgICAgICAgLWMgIiEgVXNhZ2UgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVVzYWdlIGV4dGVuc2lvbiIKKworIyBUZXN0cyBmb3Iga2V5VXNhZ2UgaW4gbGVhZiBjZXJ0aWZpY2F0ZXMsIHBhcnQgMzoKKyMgc2VydmVyLXNpZGUgY2hlY2tpbmcgb2YgY2xpZW50IGNlcnQKKworcnVuX3Rlc3QgICAgImtleVVzYWdlIGNsaS1hdXRoOiBSU0EsIERpZ2l0YWxTaWduYXR1cmU6IE9LIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJE9fQ0xJIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWRzLmNydCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLVMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgImtleVVzYWdlIGNsaS1hdXRoOiBSU0EsIEtleUVuY2lwaGVybWVudDogZmFpbCAoc29mdCkiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MSBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkT19DTEkgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjIua2V5IFwKKyAgICAgICAgICAgICAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjIua3Uta2UuY3J0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtUyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2UgY2xpLWF1dGg6IFJTQSwgS2V5RW5jaXBoZXJtZW50OiBmYWlsIChoYXJkKSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0xIGF1dGhfbW9kZT1yZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRPX0NMSSAta2V5IGRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyMi5rdS1rZS5jcnQiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLXMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1zICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBjbGktYXV0aDogRUNEU0EsIERpZ2l0YWxTaWduYXR1cmU6IE9LIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJE9fQ0xJIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXI1Lmt1LWRzLmNydCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLVMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgImtleVVzYWdlIGNsaS1hdXRoOiBFQ0RTQSwgS2V5QWdyZWVtZW50OiBmYWlsIChzb2Z0KSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRPX0NMSSAta2V5IGRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNS5rdS1rYS5jcnQiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1TICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiCisKKyMgVGVzdHMgZm9yIGV4dGVuZGVkS2V5VXNhZ2UsIHBhcnQgMTogc2VydmVyLXNpZGUgY2VydGlmaWNhdGUvc3VpdGUgc2VsZWN0aW9uCisKK3J1bl90ZXN0ICAgICJleHRLZXlVc2FnZSBzcnY6IHNlcnZlckF1dGggLT4gT0siIFwKKyAgICAgICAgICAgICIkUF9TUlYga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1zcnYuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIiBcCisgICAgICAgICAgICAwCisKK3J1bl90ZXN0ICAgICJleHRLZXlVc2FnZSBzcnY6IHNlcnZlckF1dGgsY2xpZW50QXV0aCAtPiBPSyIgXAorICAgICAgICAgICAgIiRQX1NSViBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LXNydi5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkiIFwKKyAgICAgICAgICAgIDAKKworcnVuX3Rlc3QgICAgImV4dEtleVVzYWdlIHNydjogY29kZVNpZ24sYW55RUtVIC0+IE9LIiBcCisgICAgICAgICAgICAiJFBfU1JWIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5la3UtY3NfYW55LmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSIgXAorICAgICAgICAgICAgMAorCitydW5fdGVzdCAgICAiZXh0S2V5VXNhZ2Ugc3J2OiBjb2RlU2lnbiAtPiBmYWlsIiBcCisgICAgICAgICAgICAiJFBfU1JWIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5la3UtY2xpLmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSIgXAorICAgICAgICAgICAgMQorCisjIFRlc3RzIGZvciBleHRlbmRlZEtleVVzYWdlLCBwYXJ0IDI6IGNsaWVudC1zaWRlIGNoZWNraW5nIG9mIHNlcnZlciBjZXJ0CisKK3J1bl90ZXN0ICAgICJleHRLZXlVc2FnZSBjbGk6IHNlcnZlckF1dGggLT4gT0siIFwKKyAgICAgICAgICAgICIkT19TUlYgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LXNydi5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLUMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy0iCisKK3J1bl90ZXN0ICAgICJleHRLZXlVc2FnZSBjbGk6IHNlcnZlckF1dGgsY2xpZW50QXV0aCAtPiBPSyIgXAorICAgICAgICAgICAgIiRPX1NSViAta2V5IGRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2X2NsaS5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLUMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy0iCisKK3J1bl90ZXN0ICAgICJleHRLZXlVc2FnZSBjbGk6IGNvZGVTaWduLGFueUVLVSAtPiBPSyIgXAorICAgICAgICAgICAgIiRPX1NSViAta2V5IGRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNS5la3UtY3NfYW55LmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtQyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiBcCisgICAgICAgICAgICAtYyAiQ2lwaGVyc3VpdGUgaXMgVExTLSIKKworcnVuX3Rlc3QgICAgImV4dEtleVVzYWdlIGNsaTogY29kZVNpZ24gLT4gZmFpbCIgXAorICAgICAgICAgICAgIiRPX1NSViAta2V5IGRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNS5la3UtY3MuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTEiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLWMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1jICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiIFwKKyAgICAgICAgICAgIC1DICJDaXBoZXJzdWl0ZSBpcyBUTFMtIgorCisjIFRlc3RzIGZvciBleHRlbmRlZEtleVVzYWdlLCBwYXJ0IDM6IHNlcnZlci1zaWRlIGNoZWNraW5nIG9mIGNsaWVudCBjZXJ0CisKK3J1bl90ZXN0ICAgICJleHRLZXlVc2FnZSBjbGktYXV0aDogY2xpZW50QXV0aCAtPiBPSyIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRPX0NMSSAta2V5IGRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNS5la3UtY2xpLmNydCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLVMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgImV4dEtleVVzYWdlIGNsaS1hdXRoOiBzZXJ2ZXJBdXRoLGNsaWVudEF1dGggLT4gT0siIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MSBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkT19DTEkgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LXNydl9jbGkuY3J0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtUyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIgorCitydW5fdGVzdCAgICAiZXh0S2V5VXNhZ2UgY2xpLWF1dGg6IGNvZGVTaWduLGFueUVLVSAtPiBPSyIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRPX0NMSSAta2V5IGRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNS5la3UtY3NfYW55LmNydCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLVMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgImV4dEtleVVzYWdlIGNsaS1hdXRoOiBjb2RlU2lnbiAtPiBmYWlsIChzb2Z0KSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRPX0NMSSAta2V5IGRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNS5la3UtY3MuY3J0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtUyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIgorCitydW5fdGVzdCAgICAiZXh0S2V5VXNhZ2UgY2xpLWF1dGg6IGNvZGVTaWduIC0+IGZhaWwgKGhhcmQpIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPXJlcXVpcmVkIiBcCisgICAgICAgICAgICAiJE9fQ0xJIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jcy5jcnQiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLXMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1zICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiCisKKyMgVGVzdHMgZm9yIERITSBwYXJhbWV0ZXJzIGxvYWRpbmcKKworcnVuX3Rlc3QgICAgIkRITSBwYXJhbWV0ZXJzOiByZWZlcmVuY2UiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgICAgICAgICBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJ2YWx1ZSBvZiAnREhNOiBQICcgKDIwNDggYml0cykiIFwKKyAgICAgICAgICAgIC1jICJ2YWx1ZSBvZiAnREhNOiBHICcgKDIwNDggYml0cykiCisKK3J1bl90ZXN0ICAgICJESE0gcGFyYW1ldGVyczogb3RoZXIgcGFyYW1ldGVycyIgXAorICAgICAgICAgICAgIiRQX1NSViBkaG1fZmlsZT1kYXRhX2ZpbGVzL2RocGFyYW1zLnBlbSIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgICAgICAgIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgInZhbHVlIG9mICdESE06IFAgJyAoMTAyNCBiaXRzKSIgXAorICAgICAgICAgICAgLWMgInZhbHVlIG9mICdESE06IEcgJyAoMiBiaXRzKSIKKworIyBUZXN0cyBmb3IgREhNIGNsaWVudC1zaWRlIHNpemUgY2hlY2tpbmcKKworcnVuX3Rlc3QgICAgIkRITSBzaXplOiBzZXJ2ZXIgZGVmYXVsdCwgY2xpZW50IGRlZmF1bHQsIE9LIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICAgICAgICAgZGVidWdfbGV2ZWw9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiREhNIHByaW1lIHRvbyBzaG9ydDoiCisKK3J1bl90ZXN0ICAgICJESE0gc2l6ZTogc2VydmVyIGRlZmF1bHQsIGNsaWVudCAyMDQ4LCBPSyIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgICAgICAgIGRlYnVnX2xldmVsPTEgZGhtbGVuPTIwNDgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgIkRITSBwcmltZSB0b28gc2hvcnQ6IgorCitydW5fdGVzdCAgICAiREhNIHNpemU6IHNlcnZlciAxMDI0LCBjbGllbnQgZGVmYXVsdCwgT0siIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGhtX2ZpbGU9ZGF0YV9maWxlcy9kaHBhcmFtcy5wZW0iIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgICAgICAgICBkZWJ1Z19sZXZlbD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJESE0gcHJpbWUgdG9vIHNob3J0OiIKKworcnVuX3Rlc3QgICAgIkRITSBzaXplOiBzZXJ2ZXIgMTAwMCwgY2xpZW50IGRlZmF1bHQsIHJlamVjdGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRobV9maWxlPWRhdGFfZmlsZXMvZGguMTAwMC5wZW0iIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgICAgICAgICBkZWJ1Z19sZXZlbD0xIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJESE0gcHJpbWUgdG9vIHNob3J0OiIKKworcnVuX3Rlc3QgICAgIkRITSBzaXplOiBzZXJ2ZXIgZGVmYXVsdCwgY2xpZW50IDIwNDksIHJlamVjdGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICAgICAgICAgZGVidWdfbGV2ZWw9MSBkaG1sZW49MjA0OSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtYyAiREhNIHByaW1lIHRvbyBzaG9ydDoiCisKKyMgVGVzdHMgZm9yIFBTSyBjYWxsYmFjaworCitydW5fdGVzdCAgICAiUFNLIGNhbGxiYWNrOiBwc2ssIG5vIGNhbGxiYWNrIiBcCisgICAgICAgICAgICAiJFBfU1JWIHBzaz1hYmMxMjMgcHNrX2lkZW50aXR5PWZvbyIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgIHBza19pZGVudGl0eT1mb28gcHNrPWFiYzEyMyIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAiU1NMIC0gTm9uZSBvZiB0aGUgY29tbW9uIGNpcGhlcnN1aXRlcyBpcyB1c2FibGUiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBVbmtub3duIGlkZW50aXR5IHJlY2VpdmVkIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVmVyaWZpY2F0aW9uIG9mIHRoZSBtZXNzYWdlIE1BQyBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJQU0sgY2FsbGJhY2s6IG5vIHBzaywgbm8gY2FsbGJhY2siIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICBwc2tfaWRlbnRpdHk9Zm9vIHBzaz1hYmMxMjMiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLXMgIlNTTCAtIE5vbmUgb2YgdGhlIGNvbW1vbiBjaXBoZXJzdWl0ZXMgaXMgdXNhYmxlIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVW5rbm93biBpZGVudGl0eSByZWNlaXZlZCIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCitydW5fdGVzdCAgICAiUFNLIGNhbGxiYWNrOiBjYWxsYmFjayBvdmVycmlkZXMgb3RoZXIgc2V0dGluZ3MiIFwKKyAgICAgICAgICAgICIkUF9TUlYgcHNrPWFiYzEyMyBwc2tfaWRlbnRpdHk9Zm9vIHBza19saXN0PWFiYyxkZWFkLGRlZixiZWVmIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgcHNrX2lkZW50aXR5PWZvbyBwc2s9YWJjMTIzIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBOb25lIG9mIHRoZSBjb21tb24gY2lwaGVyc3VpdGVzIGlzIHVzYWJsZSIgXAorICAgICAgICAgICAgLXMgIlNTTCAtIFVua25vd24gaWRlbnRpdHkgcmVjZWl2ZWQiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgIlBTSyBjYWxsYmFjazogZmlyc3QgaWQgbWF0Y2hlcyIgXAorICAgICAgICAgICAgIiRQX1NSViBwc2tfbGlzdD1hYmMsZGVhZCxkZWYsYmVlZiIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgIHBza19pZGVudGl0eT1hYmMgcHNrPWRlYWQiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIlNTTCAtIE5vbmUgb2YgdGhlIGNvbW1vbiBjaXBoZXJzdWl0ZXMgaXMgdXNhYmxlIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVW5rbm93biBpZGVudGl0eSByZWNlaXZlZCIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCitydW5fdGVzdCAgICAiUFNLIGNhbGxiYWNrOiBzZWNvbmQgaWQgbWF0Y2hlcyIgXAorICAgICAgICAgICAgIiRQX1NSViBwc2tfbGlzdD1hYmMsZGVhZCxkZWYsYmVlZiIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgIHBza19pZGVudGl0eT1kZWYgcHNrPWJlZWYiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIlNTTCAtIE5vbmUgb2YgdGhlIGNvbW1vbiBjaXBoZXJzdWl0ZXMgaXMgdXNhYmxlIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVW5rbm93biBpZGVudGl0eSByZWNlaXZlZCIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCitydW5fdGVzdCAgICAiUFNLIGNhbGxiYWNrOiBubyBtYXRjaCIgXAorICAgICAgICAgICAgIiRQX1NSViBwc2tfbGlzdD1hYmMsZGVhZCxkZWYsYmVlZiIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgIHBza19pZGVudGl0eT1naGkgcHNrPWJlZWYiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLVMgIlNTTCAtIE5vbmUgb2YgdGhlIGNvbW1vbiBjaXBoZXJzdWl0ZXMgaXMgdXNhYmxlIiBcCisgICAgICAgICAgICAtcyAiU1NMIC0gVW5rbm93biBpZGVudGl0eSByZWNlaXZlZCIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCitydW5fdGVzdCAgICAiUFNLIGNhbGxiYWNrOiB3cm9uZyBrZXkiIFwKKyAgICAgICAgICAgICIkUF9TUlYgcHNrX2xpc3Q9YWJjLGRlYWQsZGVmLGJlZWYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICBwc2tfaWRlbnRpdHk9YWJjIHBzaz1iZWVmIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBOb25lIG9mIHRoZSBjb21tb24gY2lwaGVyc3VpdGVzIGlzIHVzYWJsZSIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFVua25vd24gaWRlbnRpdHkgcmVjZWl2ZWQiIFwKKyAgICAgICAgICAgIC1zICJTU0wgLSBWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIKKworIyBUZXN0cyBmb3IgRUMgSi1QQUtFCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UKK3J1bl90ZXN0ICAgICJFQ0pQQUtFOiBjbGllbnQgbm90IGNvbmZpZ3VyZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJhZGQgY2lwaGVyc3VpdGU6IGMwZmYiIFwKKyAgICAgICAgICAgIC1DICJhZGRpbmcgZWNqcGFrZV9ra3BwIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImZvdW5kIGVjanBha2Uga2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJza2lwIGVjanBha2Uga2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJjaXBoZXJzdWl0ZSBtaXNtYXRjaDogZWNqcGFrZSBub3QgY29uZmlndXJlZCIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgZWNqcGFrZSBra3BwIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIGVjanBha2Vfa2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJOb25lIG9mIHRoZSBjb21tb24gY2lwaGVyc3VpdGVzIGlzIHVzYWJsZSIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRQorcnVuX3Rlc3QgICAgIkVDSlBBS0U6IHNlcnZlciBub3QgY29uZmlndXJlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZWNqcGFrZV9wdz1ibGEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1FQ0pQQUtFLVdJVEgtQUVTLTEyOC1DQ00tOCIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtYyAiYWRkIGNpcGhlcnN1aXRlOiBjMGZmIiBcCisgICAgICAgICAgICAtYyAiYWRkaW5nIGVjanBha2Vfa2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBlY2pwYWtlIGtrcHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2tpcCBlY2pwYWtlIGtrcHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiY2lwaGVyc3VpdGUgbWlzbWF0Y2g6IGVjanBha2Ugbm90IGNvbmZpZ3VyZWQiIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGVjanBha2Uga2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBlY2pwYWtlX2trcHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiTm9uZSBvZiB0aGUgY29tbW9uIGNpcGhlcnN1aXRlcyBpcyB1c2FibGUiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UKK3J1bl90ZXN0ICAgICJFQ0pQQUtFOiB3b3JraW5nLCBUTFMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBlY2pwYWtlX3B3PWJsYSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGVjanBha2VfcHc9YmxhIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtRUNKUEFLRS1XSVRILUFFUy0xMjgtQ0NNLTgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImFkZCBjaXBoZXJzdWl0ZTogYzBmZiIgXAorICAgICAgICAgICAgLWMgImFkZGluZyBlY2pwYWtlX2trcHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAicmUtdXNpbmcgY2FjaGVkIGVjanBha2UgcGFyYW1ldGVycyIgXAorICAgICAgICAgICAgLXMgImZvdW5kIGVjanBha2Uga2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJza2lwIGVjanBha2Uga2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJjaXBoZXJzdWl0ZSBtaXNtYXRjaDogZWNqcGFrZSBub3QgY29uZmlndXJlZCIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgZWNqcGFrZSBra3BwIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIGVjanBha2Vfa2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJOb25lIG9mIHRoZSBjb21tb24gY2lwaGVyc3VpdGVzIGlzIHVzYWJsZSIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCitzZXJ2ZXJfbmVlZHNfbW9yZV90aW1lIDEKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UKK3J1bl90ZXN0ICAgICJFQ0pQQUtFOiBwYXNzd29yZCBtaXNtYXRjaCwgVExTIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZWNqcGFrZV9wdz1ibGEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBlY2pwYWtlX3B3PWJhZCBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLUVDSlBBS0UtV0lUSC1BRVMtMTI4LUNDTS04IiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1DICJyZS11c2luZyBjYWNoZWQgZWNqcGFrZSBwYXJhbWV0ZXJzIiBcCisgICAgICAgICAgICAtcyAiU1NMIC0gVmVyaWZpY2F0aW9uIG9mIHRoZSBtZXNzYWdlIE1BQyBmYWlsZWQiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UKK3J1bl90ZXN0ICAgICJFQ0pQQUtFOiB3b3JraW5nLCBEVExTIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZHRscz0xIGVjanBha2VfcHc9YmxhIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZHRscz0xIGVjanBha2VfcHc9YmxhIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtRUNKUEFLRS1XSVRILUFFUy0xMjgtQ0NNLTgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgInJlLXVzaW5nIGNhY2hlZCBlY2pwYWtlIHBhcmFtZXRlcnMiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRQorcnVuX3Rlc3QgICAgIkVDSlBBS0U6IHdvcmtpbmcsIERUTFMsIG5vIGNvb2tpZSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGR0bHM9MSBlY2pwYWtlX3B3PWJsYSBjb29raWVzPTAiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBkdGxzPTEgZWNqcGFrZV9wdz1ibGEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1FQ0pQQUtFLVdJVEgtQUVTLTEyOC1DQ00tOCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAicmUtdXNpbmcgY2FjaGVkIGVjanBha2UgcGFyYW1ldGVycyIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCitzZXJ2ZXJfbmVlZHNfbW9yZV90aW1lIDEKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UKK3J1bl90ZXN0ICAgICJFQ0pQQUtFOiBwYXNzd29yZCBtaXNtYXRjaCwgRFRMUyIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGR0bHM9MSBlY2pwYWtlX3B3PWJsYSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGR0bHM9MSBlY2pwYWtlX3B3PWJhZCBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLUVDSlBBS0UtV0lUSC1BRVMtMTI4LUNDTS04IiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJyZS11c2luZyBjYWNoZWQgZWNqcGFrZSBwYXJhbWV0ZXJzIiBcCisgICAgICAgICAgICAtcyAiU1NMIC0gVmVyaWZpY2F0aW9uIG9mIHRoZSBtZXNzYWdlIE1BQyBmYWlsZWQiCisKKyMgZm9yIHRlc3RzIHdpdGggY29uZmlncy9jb25maWctdGhyZWFkLmgKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UKK3J1bl90ZXN0ICAgICJFQ0pQQUtFOiB3b3JraW5nLCBEVExTLCBub2xvZyIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgZWNqcGFrZV9wdz1ibGEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGVjanBha2VfcHc9YmxhIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtRUNKUEFLRS1XSVRILUFFUy0xMjgtQ0NNLTgiIFwKKyAgICAgICAgICAgIDAKKworIyBUZXN0cyBmb3IgY2lwaGVyc3VpdGVzIHBlciB2ZXJzaW9uCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKK3J1bl90ZXN0ICAgICJQZXItdmVyc2lvbiBzdWl0ZXM6IFNTTDMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgbWluX3ZlcnNpb249c3NsMyB2ZXJzaW9uX3N1aXRlcz1UTFMtUlNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSxUTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBLFRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEsVExTLVJTQS1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV92ZXJzaW9uPXNzbDMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBIgorCitydW5fdGVzdCAgICAiUGVyLXZlcnNpb24gc3VpdGVzOiBUTFMgMS4wIiBcCisgICAgICAgICAgICAiJFBfU1JWIGFyYzQ9MSB2ZXJzaW9uX3N1aXRlcz1UTFMtUlNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSxUTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBLFRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEsVExTLVJTQS1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV92ZXJzaW9uPXRsczEgYXJjND0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIgorCitydW5fdGVzdCAgICAiUGVyLXZlcnNpb24gc3VpdGVzOiBUTFMgMS4xIiBcCisgICAgICAgICAgICAiJFBfU1JWIHZlcnNpb25fc3VpdGVzPVRMUy1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBLFRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEsVExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSxUTFMtUlNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIgorCitydW5fdGVzdCAgICAiUGVyLXZlcnNpb24gc3VpdGVzOiBUTFMgMS4yIiBcCisgICAgICAgICAgICAiJFBfU1JWIHZlcnNpb25fc3VpdGVzPVRMUy1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBLFRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEsVExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSxUTFMtUlNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX3ZlcnNpb249dGxzMV8yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtUlNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IgorCisjIFRlc3QgZm9yIENsaWVudEhlbGxvIHdpdGhvdXQgZXh0ZW5zaW9ucworCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJDbGllbnRIZWxsbyB3aXRob3V0IGV4dGVuc2lvbnMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRHX0NMSSAtLXByaW9yaXR5PU5PUk1BTDolTk9fRVhURU5TSU9OUzolRElTQUJMRV9TQUZFX1JFTkVHT1RJQVRJT04iIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImR1bXBpbmcgJ2NsaWVudCBoZWxsbyBleHRlbnNpb25zJyAoMCBieXRlcykiCisKKyMgVGVzdHMgZm9yIG1iZWR0bHNfc3NsX2dldF9ieXRlc19hdmFpbCgpCisKK3J1bl90ZXN0ICAgICJtYmVkdGxzX3NzbF9nZXRfYnl0ZXNfYXZhaWw6IG5vIGV4dHJhIGRhdGEiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEwMCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTAwIGJ5dGVzIHJlYWQkIgorCitydW5fdGVzdCAgICAibWJlZHRsc19zc2xfZ2V0X2J5dGVzX2F2YWlsOiBleHRyYSBkYXRhIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT01MDAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDUwMCBieXRlcyByZWFkICguKisuKikiCisKKyMgVGVzdHMgZm9yIHNtYWxsIHBhY2tldHMKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBTU0x2MyBCbG9ja0NpcGhlciIgXAorICAgICAgICAgICAgIiRQX1NSViBtaW5fdmVyc2lvbj1zc2wzIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249c3NsMyBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9QUk9UT19TU0wzCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFNTTHYzIFN0cmVhbUNpcGhlciIgXAorICAgICAgICAgICAgIiRQX1NSViBtaW5fdmVyc2lvbj1zc2wzIGFyYzQ9MSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj1zc2wzIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4wIEJsb2NrQ2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFRMUyAxLjAgQmxvY2tDaXBoZXIgd2l0aG91dCBFdE0iIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxIGV0bT0wIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgVExTIDEuMCBCbG9ja0NpcGhlciB0cnVuY2F0ZWQgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSBcCisgICAgICAgICAgICAgdHJ1bmNfaG1hYz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgVExTIDEuMCBTdHJlYW1DaXBoZXIgdHJ1bmNhdGVkIE1BQyIgXAorICAgICAgICAgICAgIiRQX1NSViBhcmM0PTEgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4xIEJsb2NrQ2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMV8xIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgVExTIDEuMSBCbG9ja0NpcGhlciB3aXRob3V0IEV0TSIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MSBmb3JjZV92ZXJzaW9uPXRsczFfMSBldG09MCBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFRMUyAxLjEgU3RyZWFtQ2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIGFyYzQ9MSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxXzEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFRMUyAxLjEgQmxvY2tDaXBoZXIgdHJ1bmNhdGVkIE1BQyIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MSBmb3JjZV92ZXJzaW9uPXRsczFfMSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSBcCisgICAgICAgICAgICAgdHJ1bmNfaG1hYz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgVExTIDEuMSBTdHJlYW1DaXBoZXIgdHJ1bmNhdGVkIE1BQyIgXAorICAgICAgICAgICAgIiRQX1NSViBhcmM0PTEgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMV8xIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEgXAorICAgICAgICAgICAgIHRydW5jX2htYWM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFRMUyAxLjIgQmxvY2tDaXBoZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4yIEJsb2NrQ2lwaGVyIHdpdGhvdXQgRXRNIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMV8yIGV0bT0wIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgVExTIDEuMiBCbG9ja0NpcGhlciBsYXJnZXIgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMV8yIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtRUNESEUtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBMzg0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgVExTIDEuMiBCbG9ja0NpcGhlciB0cnVuY2F0ZWQgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMV8yIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4yIFN0cmVhbUNpcGhlciIgXAorICAgICAgICAgICAgIiRQX1NSViBhcmM0PTEgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMV8yIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4yIFN0cmVhbUNpcGhlciB0cnVuY2F0ZWQgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIGFyYzQ9MSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSBcCisgICAgICAgICAgICAgdHJ1bmNfaG1hYz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgVExTIDEuMiBBRUFEIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMV8yIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQ00iIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4yIEFFQUQgc2hvcnRlciB0YWciIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNDTS04IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKKyMgQSB0ZXN0IGZvciBleHRlbnNpb25zIGluIFNTTHYzCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKK3J1bl90ZXN0ICAgICJTU0x2MyB3aXRoIGV4dGVuc2lvbnMsIHNlcnZlciBzaWRlIiBcCisgICAgICAgICAgICAiJFBfU1JWIG1pbl92ZXJzaW9uPXNzbDMgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV92ZXJzaW9uPXNzbDMgdGlja2V0cz0xIG1heF9mcmFnX2xlbj00MDk2IGFscG49YWJjLDEyMzQiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgImR1bXBpbmcgJ2NsaWVudCBoZWxsbyBleHRlbnNpb25zJyIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgdG90YWwgZXh0ZW5zaW9uIGxlbmd0aDoiCisKKyMgVGVzdCBmb3IgbGFyZ2UgcGFja2V0cworCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9QUk9UT19TU0wzCitydW5fdGVzdCAgICAiTGFyZ2UgcGFja2V0IFNTTHYzIEJsb2NrQ2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIG1pbl92ZXJzaW9uPXNzbDMiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTE2Mzg0IGZvcmNlX3ZlcnNpb249c3NsMyByZWNzcGxpdD0wIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxNjM4NCBieXRlcyByZWFkIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9QUk9UT19TU0wzCitydW5fdGVzdCAgICAiTGFyZ2UgcGFja2V0IFNTTHYzIFN0cmVhbUNpcGhlciIgXAorICAgICAgICAgICAgIiRQX1NSViBtaW5fdmVyc2lvbj1zc2wzIGFyYzQ9MSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTE2Mzg0IGZvcmNlX3ZlcnNpb249c3NsMyBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxNjM4NCBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTGFyZ2UgcGFja2V0IFRMUyAxLjAgQmxvY2tDaXBoZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTE2Mzg0IGZvcmNlX3ZlcnNpb249dGxzMSByZWNzcGxpdD0wIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxNjM4NCBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTGFyZ2UgcGFja2V0IFRMUyAxLjAgQmxvY2tDaXBoZXIgdHJ1bmNhdGVkIE1BQyIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj10bHMxIHJlY3NwbGl0PTAgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEgXAorICAgICAgICAgICAgIHRydW5jX2htYWM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4wIFN0cmVhbUNpcGhlciB0cnVuY2F0ZWQgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIGFyYzQ9MSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTE2Mzg0IGZvcmNlX3ZlcnNpb249dGxzMSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDE2Mzg0IGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJMYXJnZSBwYWNrZXQgVExTIDEuMSBCbG9ja0NpcGhlciIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj10bHMxXzEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDE2Mzg0IGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJMYXJnZSBwYWNrZXQgVExTIDEuMSBTdHJlYW1DaXBoZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYgYXJjND0xIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj10bHMxXzEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4xIEJsb2NrQ2lwaGVyIHRydW5jYXRlZCBNQUMiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTE2Mzg0IGZvcmNlX3ZlcnNpb249dGxzMV8xIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDE2Mzg0IGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJMYXJnZSBwYWNrZXQgVExTIDEuMSBTdHJlYW1DaXBoZXIgdHJ1bmNhdGVkIE1BQyIgXAorICAgICAgICAgICAgIiRQX1NSViBhcmM0PTEgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xNjM4NCBmb3JjZV92ZXJzaW9uPXRsczFfMSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDE2Mzg0IGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJMYXJnZSBwYWNrZXQgVExTIDEuMiBCbG9ja0NpcGhlciIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDE2Mzg0IGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJMYXJnZSBwYWNrZXQgVExTIDEuMiBCbG9ja0NpcGhlciBsYXJnZXIgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xNjM4NCBmb3JjZV92ZXJzaW9uPXRsczFfMiBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLUVDREhFLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4yIEJsb2NrQ2lwaGVyIHRydW5jYXRlZCBNQUMiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTE2Mzg0IGZvcmNlX3ZlcnNpb249dGxzMV8yIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDE2Mzg0IGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJMYXJnZSBwYWNrZXQgVExTIDEuMiBTdHJlYW1DaXBoZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYgYXJjND0xIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4yIFN0cmVhbUNpcGhlciB0cnVuY2F0ZWQgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIGFyYzQ9MSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTE2Mzg0IGZvcmNlX3ZlcnNpb249dGxzMV8yIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEgXAorICAgICAgICAgICAgIHRydW5jX2htYWM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4yIEFFQUQiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTE2Mzg0IGZvcmNlX3ZlcnNpb249dGxzMV8yIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQ00iIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDE2Mzg0IGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJMYXJnZSBwYWNrZXQgVExTIDEuMiBBRUFEIHNob3J0ZXIgdGFnIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xNjM4NCBmb3JjZV92ZXJzaW9uPXRsczFfMiBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0yNTYtQ0NNLTgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDE2Mzg0IGJ5dGVzIHJlYWQiCisKKyMgVGVzdHMgZm9yIERUTFMgSGVsbG9WZXJpZnlSZXF1ZXN0CisKK3J1bl90ZXN0ICAgICJEVExTIGNvb2tpZTogZW5hYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiY29va2llIHZlcmlmaWNhdGlvbiBmYWlsZWQiIFwKKyAgICAgICAgICAgIC1zICJjb29raWUgdmVyaWZpY2F0aW9uIHBhc3NlZCIgXAorICAgICAgICAgICAgLVMgImNvb2tpZSB2ZXJpZmljYXRpb24gc2tpcHBlZCIgXAorICAgICAgICAgICAgLWMgInJlY2VpdmVkIGhlbGxvIHZlcmlmeSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtcyAiaGVsbG8gdmVyaWZpY2F0aW9uIHJlcXVlc3RlZCIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFRoZSByZXF1ZXN0ZWQgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIgorCitydW5fdGVzdCAgICAiRFRMUyBjb29raWU6IGRpc2FibGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIGNvb2tpZXM9MCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAiY29va2llIHZlcmlmaWNhdGlvbiBmYWlsZWQiIFwKKyAgICAgICAgICAgIC1TICJjb29raWUgdmVyaWZpY2F0aW9uIHBhc3NlZCIgXAorICAgICAgICAgICAgLXMgImNvb2tpZSB2ZXJpZmljYXRpb24gc2tpcHBlZCIgXAorICAgICAgICAgICAgLUMgInJlY2VpdmVkIGhlbGxvIHZlcmlmeSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtUyAiaGVsbG8gdmVyaWZpY2F0aW9uIHJlcXVlc3RlZCIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFRoZSByZXF1ZXN0ZWQgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIgorCitydW5fdGVzdCAgICAiRFRMUyBjb29raWU6IGRlZmF1bHQgKGZhaWxpbmcpIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIGNvb2tpZXM9LTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTIgaHNfdGltZW91dD0xMDAtNDAwIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1zICJjb29raWUgdmVyaWZpY2F0aW9uIGZhaWxlZCIgXAorICAgICAgICAgICAgLVMgImNvb2tpZSB2ZXJpZmljYXRpb24gcGFzc2VkIiBcCisgICAgICAgICAgICAtUyAiY29va2llIHZlcmlmaWNhdGlvbiBza2lwcGVkIiBcCisgICAgICAgICAgICAtQyAicmVjZWl2ZWQgaGVsbG8gdmVyaWZ5IHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1TICJoZWxsbyB2ZXJpZmljYXRpb24gcmVxdWVzdGVkIiBcCisgICAgICAgICAgICAtcyAiU1NMIC0gVGhlIHJlcXVlc3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUiCisKK3JlcXVpcmVzX2lwdjYKK3J1bl90ZXN0ICAgICJEVExTIGNvb2tpZTogZW5hYmxlZCwgSVB2NiIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgZGVidWdfbGV2ZWw9MiBzZXJ2ZXJfYWRkcj06OjEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTIgc2VydmVyX2FkZHI9OjoxIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJjb29raWUgdmVyaWZpY2F0aW9uIGZhaWxlZCIgXAorICAgICAgICAgICAgLXMgImNvb2tpZSB2ZXJpZmljYXRpb24gcGFzc2VkIiBcCisgICAgICAgICAgICAtUyAiY29va2llIHZlcmlmaWNhdGlvbiBza2lwcGVkIiBcCisgICAgICAgICAgICAtYyAicmVjZWl2ZWQgaGVsbG8gdmVyaWZ5IHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1zICJoZWxsbyB2ZXJpZmljYXRpb24gcmVxdWVzdGVkIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVGhlIHJlcXVlc3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUiCisKK3J1bl90ZXN0ICAgICJEVExTIGNvb2tpZTogZW5hYmxlZCwgbmJpbyIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgbmJpbz0yIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIG5iaW89MiBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJjb29raWUgdmVyaWZpY2F0aW9uIGZhaWxlZCIgXAorICAgICAgICAgICAgLXMgImNvb2tpZSB2ZXJpZmljYXRpb24gcGFzc2VkIiBcCisgICAgICAgICAgICAtUyAiY29va2llIHZlcmlmaWNhdGlvbiBza2lwcGVkIiBcCisgICAgICAgICAgICAtYyAicmVjZWl2ZWQgaGVsbG8gdmVyaWZ5IHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1zICJoZWxsbyB2ZXJpZmljYXRpb24gcmVxdWVzdGVkIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVGhlIHJlcXVlc3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUiCisKKyMgVGVzdHMgZm9yIGNsaWVudCByZWNvbm5lY3RpbmcgZnJvbSB0aGUgc2FtZSBwb3J0IHdpdGggRFRMUworCitub3Rfd2l0aF92YWxncmluZCAjIHNwdXJpb3VzIHJlc2VuZAorcnVuX3Rlc3QgICAgIkRUTFMgY2xpZW50IHJlY29ubmVjdCBmcm9tIHNhbWUgcG9ydDogcmVmZXJlbmNlIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBleGNoYW5nZXM9MiByZWFkX3RpbWVvdXQ9MTAwMCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZXhjaGFuZ2VzPTIgZGVidWdfbGV2ZWw9MiBoc190aW1lb3V0PTUwMC0xMDAwIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJyZXNlbmQiIFwKKyAgICAgICAgICAgIC1TICJUaGUgb3BlcmF0aW9uIHRpbWVkIG91dCIgXAorICAgICAgICAgICAgLVMgIkNsaWVudCBpbml0aWF0ZWQgcmVjb25uZWN0aW9uIGZyb20gc2FtZSBwb3J0IgorCitub3Rfd2l0aF92YWxncmluZCAjIHNwdXJpb3VzIHJlc2VuZAorcnVuX3Rlc3QgICAgIkRUTFMgY2xpZW50IHJlY29ubmVjdCBmcm9tIHNhbWUgcG9ydDogcmVjb25uZWN0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBleGNoYW5nZXM9MiByZWFkX3RpbWVvdXQ9MTAwMCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZXhjaGFuZ2VzPTIgZGVidWdfbGV2ZWw9MiBoc190aW1lb3V0PTUwMC0xMDAwIHJlY29ubmVjdF9oYXJkPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgInJlc2VuZCIgXAorICAgICAgICAgICAgLVMgIlRoZSBvcGVyYXRpb24gdGltZWQgb3V0IiBcCisgICAgICAgICAgICAtcyAiQ2xpZW50IGluaXRpYXRlZCByZWNvbm5lY3Rpb24gZnJvbSBzYW1lIHBvcnQiCisKK25vdF93aXRoX3ZhbGdyaW5kICMgc2VydmVyL2NsaWVudCB0b28gc2xvdyB0byByZXNwb25kIGluIHRpbWUgKG5leHQgdGVzdCBoYXMgaGlnaGVyIHRpbWVvdXRzKQorcnVuX3Rlc3QgICAgIkRUTFMgY2xpZW50IHJlY29ubmVjdCBmcm9tIHNhbWUgcG9ydDogcmVjb25uZWN0LCBuYmlvLCBubyB2YWxncmluZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgZXhjaGFuZ2VzPTIgcmVhZF90aW1lb3V0PTEwMDAgbmJpbz0yIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBleGNoYW5nZXM9MiBkZWJ1Z19sZXZlbD0yIGhzX3RpbWVvdXQ9NTAwLTEwMDAgcmVjb25uZWN0X2hhcmQ9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAiVGhlIG9wZXJhdGlvbiB0aW1lZCBvdXQiIFwKKyAgICAgICAgICAgIC1zICJDbGllbnQgaW5pdGlhdGVkIHJlY29ubmVjdGlvbiBmcm9tIHNhbWUgcG9ydCIKKworb25seV93aXRoX3ZhbGdyaW5kICMgT25seSB3aXRoIHZhbGdyaW5kLCBkbyBwcmV2aW91cyB0ZXN0IGJ1dCB3aXRoIGhpZ2hlciByZWFkX3RpbWVvdXQgYW5kIGhzX3RpbWVvdXQKK3J1bl90ZXN0ICAgICJEVExTIGNsaWVudCByZWNvbm5lY3QgZnJvbSBzYW1lIHBvcnQ6IHJlY29ubmVjdCwgbmJpbywgdmFsZ3JpbmQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGV4Y2hhbmdlcz0yIHJlYWRfdGltZW91dD0yMDAwIG5iaW89MiBoc190aW1lb3V0PTE1MDAtNjAwMCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZXhjaGFuZ2VzPTIgZGVidWdfbGV2ZWw9MiBoc190aW1lb3V0PTE1MDAtMzAwMCByZWNvbm5lY3RfaGFyZD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJUaGUgb3BlcmF0aW9uIHRpbWVkIG91dCIgXAorICAgICAgICAgICAgLXMgIkNsaWVudCBpbml0aWF0ZWQgcmVjb25uZWN0aW9uIGZyb20gc2FtZSBwb3J0IgorCitydW5fdGVzdCAgICAiRFRMUyBjbGllbnQgcmVjb25uZWN0IGZyb20gc2FtZSBwb3J0OiBubyBjb29raWVzIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBleGNoYW5nZXM9MiByZWFkX3RpbWVvdXQ9MTAwMCBjb29raWVzPTAiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGV4Y2hhbmdlcz0yIGRlYnVnX2xldmVsPTIgaHNfdGltZW91dD01MDAtODAwMCByZWNvbm5lY3RfaGFyZD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJUaGUgb3BlcmF0aW9uIHRpbWVkIG91dCIgXAorICAgICAgICAgICAgLVMgIkNsaWVudCBpbml0aWF0ZWQgcmVjb25uZWN0aW9uIGZyb20gc2FtZSBwb3J0IgorCisjIFRlc3RzIGZvciB2YXJpb3VzIGNhc2VzIG9mIGNsaWVudCBhdXRoZW50aWNhdGlvbiB3aXRoIERUTFMKKyMgKGZvY3VzZWQgb24gaGFuZHNoYWtlIGZsb3dzIGFuZCBtZXNzYWdlIHBhcnNpbmcpCisKK3J1bl90ZXN0ICAgICJEVExTIGNsaWVudCBhdXRoOiByZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgYXV0aF9tb2RlPXJlcXVpcmVkIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiVmVyaWZ5aW5nIHBlZXIgWC41MDkgY2VydGlmaWNhdGUuLi4gb2siCisKK3J1bl90ZXN0ICAgICJEVExTIGNsaWVudCBhdXRoOiBvcHRpb25hbCwgY2xpZW50IGhhcyBubyBjZXJ0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGNydF9maWxlPW5vbmUga2V5X2ZpbGU9bm9uZSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiISBDZXJ0aWZpY2F0ZSB3YXMgbWlzc2luZyIKKworcnVuX3Rlc3QgICAgIkRUTFMgY2xpZW50IGF1dGg6IG5vbmUsIGNsaWVudCBoYXMgbm8gY2VydCIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgYXV0aF9tb2RlPW5vbmUiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGNydF9maWxlPW5vbmUga2V5X2ZpbGU9bm9uZSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJza2lwIHdyaXRlIGNlcnRpZmljYXRlJCIgXAorICAgICAgICAgICAgLXMgIiEgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHdhcyBza2lwcGVkIgorCitydW5fdGVzdCAgICAiRFRMUyB3cm9uZyBQU0s6IGJhZG1hYyBhbGVydCIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgcHNrPWFiYzEyMyBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUFNLLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBwc2s9YWJjMTI0IiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1zICJTU0wgLSBWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIgXAorICAgICAgICAgICAgLWMgIlNTTCAtIEEgZmF0YWwgYWxlcnQgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBvdXIgcGVlciIKKworIyBUZXN0cyBmb3IgcmVjZWl2aW5nIGZyYWdtZW50ZWQgaGFuZHNoYWtlIG1lc3NhZ2VzIHdpdGggRFRMUworCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJEVExTIHJlYXNzZW1ibHk6IG5vIGZyYWdtZW50YXRpb24gKGdudXRscyBzZXJ2ZXIpIiBcCisgICAgICAgICAgICAiJEdfU1JWIC11IC0tbXR1IDIwNDggLWEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImZvdW5kIGZyYWdtZW50ZWQgRFRMUyBoYW5kc2hha2UgbWVzc2FnZSIgXAorICAgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJEVExTIHJlYXNzZW1ibHk6IHNvbWUgZnJhZ21lbnRhdGlvbiAoZ251dGxzIHNlcnZlcikiIFwKKyAgICAgICAgICAgICIkR19TUlYgLXUgLS1tdHUgNTEyIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBmcmFnbWVudGVkIERUTFMgaGFuZHNoYWtlIG1lc3NhZ2UiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiRFRMUyByZWFzc2VtYmx5OiBtb3JlIGZyYWdtZW50YXRpb24gKGdudXRscyBzZXJ2ZXIpIiBcCisgICAgICAgICAgICAiJEdfU1JWIC11IC0tbXR1IDEyOCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiZm91bmQgZnJhZ21lbnRlZCBEVExTIGhhbmRzaGFrZSBtZXNzYWdlIiBcCisgICAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIkRUTFMgcmVhc3NlbWJseTogbW9yZSBmcmFnbWVudGF0aW9uLCBuYmlvIChnbnV0bHMgc2VydmVyKSIgXAorICAgICAgICAgICAgIiRHX1NSViAtdSAtLW10dSAxMjgiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIG5iaW89MiBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBmcmFnbWVudGVkIERUTFMgaGFuZHNoYWtlIG1lc3NhZ2UiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiRFRMUyByZWFzc2VtYmx5OiBmcmFnbWVudGF0aW9uLCByZW5lZ28gKGdudXRscyBzZXJ2ZXIpIiBcCisgICAgICAgICAgICAiJEdfU1JWIC11IC0tbXR1IDI1NiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGR0bHM9MSByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiZm91bmQgZnJhZ21lbnRlZCBEVExTIGhhbmRzaGFrZSBtZXNzYWdlIiBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtQyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAiZXJyb3IiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJEVExTIHJlYXNzZW1ibHk6IGZyYWdtZW50YXRpb24sIG5iaW8sIHJlbmVnbyAoZ251dGxzIHNlcnZlcikiIFwKKyAgICAgICAgICAgICIkR19TUlYgLXUgLS1tdHUgMjU2IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgbmJpbz0yIGR0bHM9MSByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiZm91bmQgZnJhZ21lbnRlZCBEVExTIGhhbmRzaGFrZSBtZXNzYWdlIiBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtQyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAiZXJyb3IiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IgorCitydW5fdGVzdCAgICAiRFRMUyByZWFzc2VtYmx5OiBubyBmcmFnbWVudGF0aW9uIChvcGVuc3NsIHNlcnZlcikiIFwKKyAgICAgICAgICAgICIkT19TUlYgLWR0bHMxIC1tdHUgMjA0OCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiZm91bmQgZnJhZ21lbnRlZCBEVExTIGhhbmRzaGFrZSBtZXNzYWdlIiBcCisgICAgICAgICAgICAtQyAiZXJyb3IiCisKK3J1bl90ZXN0ICAgICJEVExTIHJlYXNzZW1ibHk6IHNvbWUgZnJhZ21lbnRhdGlvbiAob3BlbnNzbCBzZXJ2ZXIpIiBcCisgICAgICAgICAgICAiJE9fU1JWIC1kdGxzMSAtbXR1IDc2OCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiZm91bmQgZnJhZ21lbnRlZCBEVExTIGhhbmRzaGFrZSBtZXNzYWdlIiBcCisgICAgICAgICAgICAtQyAiZXJyb3IiCisKK3J1bl90ZXN0ICAgICJEVExTIHJlYXNzZW1ibHk6IG1vcmUgZnJhZ21lbnRhdGlvbiAob3BlbnNzbCBzZXJ2ZXIpIiBcCisgICAgICAgICAgICAiJE9fU1JWIC1kdGxzMSAtbXR1IDI1NiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiZm91bmQgZnJhZ21lbnRlZCBEVExTIGhhbmRzaGFrZSBtZXNzYWdlIiBcCisgICAgICAgICAgICAtQyAiZXJyb3IiCisKK3J1bl90ZXN0ICAgICJEVExTIHJlYXNzZW1ibHk6IGZyYWdtZW50YXRpb24sIG5iaW8gKG9wZW5zc2wgc2VydmVyKSIgXAorICAgICAgICAgICAgIiRPX1NSViAtZHRsczEgLW10dSAyNTYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIG5iaW89MiBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBmcmFnbWVudGVkIERUTFMgaGFuZHNoYWtlIG1lc3NhZ2UiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIKKworIyBUZXN0cyBmb3Igc3BlY2lmaWMgdGhpbmdzIHdpdGggInVucmVsaWFibGUiIFVEUCBjb25uZWN0aW9uCisKK25vdF93aXRoX3ZhbGdyaW5kICMgc3B1cmlvdXMgcmVzZW5kIGR1ZSB0byB0aW1lb3V0CitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogcmVmZXJlbmNlIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJyZXBsYXllZCByZWNvcmQiIFwKKyAgICAgICAgICAgIC1TICJyZXBsYXllZCByZWNvcmQiIFwKKyAgICAgICAgICAgIC1DICJyZWNvcmQgZnJvbSBhbm90aGVyIGVwb2NoIiBcCisgICAgICAgICAgICAtUyAicmVjb3JkIGZyb20gYW5vdGhlciBlcG9jaCIgXAorICAgICAgICAgICAgLUMgImRpc2NhcmRpbmcgaW52YWxpZCByZWNvcmQiIFwKKyAgICAgICAgICAgIC1TICJkaXNjYXJkaW5nIGludmFsaWQgcmVjb3JkIiBcCisgICAgICAgICAgICAtUyAicmVzZW5kIiBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworbm90X3dpdGhfdmFsZ3JpbmQgIyBzcHVyaW91cyByZXNlbmQgZHVlIHRvIHRpbWVvdXQKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiBkdXBsaWNhdGUgZXZlcnkgcGFja2V0IiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGR1cGxpY2F0ZT0xIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJyZXBsYXllZCByZWNvcmQiIFwKKyAgICAgICAgICAgIC1zICJyZXBsYXllZCByZWNvcmQiIFwKKyAgICAgICAgICAgIC1jICJkaXNjYXJkaW5nIGludmFsaWQgcmVjb3JkIiBcCisgICAgICAgICAgICAtcyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCIgXAorICAgICAgICAgICAgLVMgInJlc2VuZCIgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiBkdXBsaWNhdGUgZXZlcnkgcGFja2V0LCBzZXJ2ZXIgYW50aS1yZXBsYXkgb2ZmIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGR1cGxpY2F0ZT0xIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIGFudGlfcmVwbGF5PTAiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgInJlcGxheWVkIHJlY29yZCIgXAorICAgICAgICAgICAgLVMgInJlcGxheWVkIHJlY29yZCIgXAorICAgICAgICAgICAgLWMgImRpc2NhcmRpbmcgaW52YWxpZCByZWNvcmQiIFwKKyAgICAgICAgICAgIC1zICJkaXNjYXJkaW5nIGludmFsaWQgcmVjb3JkIiBcCisgICAgICAgICAgICAtYyAicmVzZW5kIiBcCisgICAgICAgICAgICAtcyAicmVzZW5kIiBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IGluamVjdCBpbnZhbGlkIEFEIHJlY29yZCwgZGVmYXVsdCBiYWRtYWNfbGltaXQiIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgYmFkX2FkPTEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTEgcmVhZF90aW1lb3V0PTEwMCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCAobWFjKSIgXAorICAgICAgICAgICAgLXMgImRpc2NhcmRpbmcgaW52YWxpZCByZWNvcmQgKG1hYykiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIiBcCisgICAgICAgICAgICAtUyAidG9vIG1hbnkgcmVjb3JkcyB3aXRoIGJhZCBNQUMiIFwKKyAgICAgICAgICAgIC1TICJWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IGluamVjdCBpbnZhbGlkIEFEIHJlY29yZCwgYmFkbWFjX2xpbWl0IDEiIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgYmFkX2FkPTEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTEgYmFkbWFjX2xpbWl0PTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTEgcmVhZF90aW1lb3V0PTEwMCIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtQyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCAobWFjKSIgXAorICAgICAgICAgICAgLVMgImRpc2NhcmRpbmcgaW52YWxpZCByZWNvcmQgKG1hYykiIFwKKyAgICAgICAgICAgIC1TICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtQyAiSFRUUC8xLjAgMjAwIE9LIiBcCisgICAgICAgICAgICAtcyAidG9vIG1hbnkgcmVjb3JkcyB3aXRoIGJhZCBNQUMiIFwKKyAgICAgICAgICAgIC1zICJWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IGluamVjdCBpbnZhbGlkIEFEIHJlY29yZCwgYmFkbWFjX2xpbWl0IDIiIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgYmFkX2FkPTEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTEgYmFkbWFjX2xpbWl0PTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTEgcmVhZF90aW1lb3V0PTEwMCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCAobWFjKSIgXAorICAgICAgICAgICAgLXMgImRpc2NhcmRpbmcgaW52YWxpZCByZWNvcmQgKG1hYykiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIiBcCisgICAgICAgICAgICAtUyAidG9vIG1hbnkgcmVjb3JkcyB3aXRoIGJhZCBNQUMiIFwKKyAgICAgICAgICAgIC1TICJWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IGluamVjdCBpbnZhbGlkIEFEIHJlY29yZCwgYmFkbWFjX2xpbWl0IDIsIGV4Y2hhbmdlcyAyIlwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgYmFkX2FkPTEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTEgYmFkbWFjX2xpbWl0PTIgZXhjaGFuZ2VzPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTEgcmVhZF90aW1lb3V0PTEwMCBleGNoYW5nZXM9MiIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtYyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCAobWFjKSIgXAorICAgICAgICAgICAgLXMgImRpc2NhcmRpbmcgaW52YWxpZCByZWNvcmQgKG1hYykiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIiBcCisgICAgICAgICAgICAtcyAidG9vIG1hbnkgcmVjb3JkcyB3aXRoIGJhZCBNQUMiIFwKKyAgICAgICAgICAgIC1zICJWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IGRlbGF5IENoYW5nZUNpcGhlclNwZWMiIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZGVsYXlfY2NzPTEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgInJlY29yZCBmcm9tIGFub3RoZXIgZXBvY2giIFwKKyAgICAgICAgICAgIC1zICJyZWNvcmQgZnJvbSBhbm90aGVyIGVwb2NoIiBcCisgICAgICAgICAgICAtYyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCIgXAorICAgICAgICAgICAgLXMgImRpc2NhcmRpbmcgaW52YWxpZCByZWNvcmQiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCisjIFRlc3RzIGZvciAicmFuZG9tbHkgdW5yZWxpYWJsZSBjb25uZWN0aW9uIjogdHJ5IGEgdmFyaWV0eSBvZiBmbG93cyBhbmQgcGVlcnMKKworY2xpZW50X25lZWRzX21vcmVfdGltZSAyCitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QgKGRyb3AsIGRlbGF5LCBkdXBsaWNhdGUpLCBcInNob3J0XCIgUFNLIGhhbmRzaGFrZSIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIGF1dGhfbW9kZT1ub25lIFwKKyAgICAgICAgICAgICBwc2s9YWJjMTIzIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTAgcHNrPWFiYzEyMyBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVBTSy1XSVRILUFFUy0xMjgtQ0NNLTgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgMgorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBcInNob3J0XCIgUlNBIGhhbmRzaGFrZSIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIGF1dGhfbW9kZT1ub25lIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTAgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgMgorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBcInNob3J0XCIgKG5vIHRpY2tldCwgbm8gY2xpX2F1dGgpIEZTIGhhbmRzaGFrZSIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIGF1dGhfbW9kZT1ub25lIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgMgorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBGUywgY2xpZW50IGF1dGgiIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZHJvcD01IGRlbGF5PTUgZHVwbGljYXRlPTUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBhdXRoX21vZGU9cmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworY2xpZW50X25lZWRzX21vcmVfdGltZSAyCitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIEZTLCB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZHJvcD01IGRlbGF5PTUgZHVwbGljYXRlPTUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MSBhdXRoX21vZGU9bm9uZSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDIKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgbWF4IGhhbmRzaGFrZSAoRlMsIHRpY2tldCArIGNsaWVudCBhdXRoKSIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0xIGF1dGhfbW9kZT1yZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDIKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgbWF4IGhhbmRzaGFrZSwgbmJpbyIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgbmJpbz0yIHRpY2tldHM9MSBcCisgICAgICAgICAgICAgYXV0aF9tb2RlPXJlcXVpcmVkIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCBuYmlvPTIgdGlja2V0cz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDQKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgbWluIGhhbmRzaGFrZSwgcmVzdW1wdGlvbiIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIGF1dGhfbW9kZT1ub25lIFwKKyAgICAgICAgICAgICBwc2s9YWJjMTIzIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBwc2s9YWJjMTIzIFwKKyAgICAgICAgICAgICBkZWJ1Z19sZXZlbD0zIHJlY29ubmVjdD0xIHJlYWRfdGltZW91dD0xMDAwIG1heF9yZXNlbmQ9MTAgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1QU0stV0lUSC1BRVMtMTI4LUNDTS04IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIgXAorICAgICAgICAgICAgLWMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworY2xpZW50X25lZWRzX21vcmVfdGltZSA0CitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIG1pbiBoYW5kc2hha2UsIHJlc3VtcHRpb24sIG5iaW8iIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZHJvcD01IGRlbGF5PTUgZHVwbGljYXRlPTUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBhdXRoX21vZGU9bm9uZSBcCisgICAgICAgICAgICAgcHNrPWFiYzEyMyBkZWJ1Z19sZXZlbD0zIG5iaW89MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIHBzaz1hYmMxMjMgXAorICAgICAgICAgICAgIGRlYnVnX2xldmVsPTMgcmVjb25uZWN0PTEgcmVhZF90aW1lb3V0PTEwMDAgbWF4X3Jlc2VuZD0xMCBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVBTSy1XSVRILUFFUy0xMjgtQ0NNLTggbmJpbz0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIgXAorICAgICAgICAgICAgLWMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworY2xpZW50X25lZWRzX21vcmVfdGltZSA0CitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIG1pbiBoYW5kc2hha2UsIGNsaWVudC1pbml0aWF0ZWQgcmVuZWdvIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTAgYXV0aF9tb2RlPW5vbmUgXAorICAgICAgICAgICAgIHBzaz1hYmMxMjMgcmVuZWdvdGlhdGlvbj0xIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBwc2s9YWJjMTIzIFwKKyAgICAgICAgICAgICByZW5lZ290aWF0ZT0xIGRlYnVnX2xldmVsPTIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1QU0stV0lUSC1BRVMtMTI4LUNDTS04IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworY2xpZW50X25lZWRzX21vcmVfdGltZSA0CitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIG1pbiBoYW5kc2hha2UsIGNsaWVudC1pbml0aWF0ZWQgcmVuZWdvLCBuYmlvIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTAgYXV0aF9tb2RlPW5vbmUgXAorICAgICAgICAgICAgIHBzaz1hYmMxMjMgcmVuZWdvdGlhdGlvbj0xIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBwc2s9YWJjMTIzIFwKKyAgICAgICAgICAgICByZW5lZ290aWF0ZT0xIGRlYnVnX2xldmVsPTIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1QU0stV0lUSC1BRVMtMTI4LUNDTS04IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworY2xpZW50X25lZWRzX21vcmVfdGltZSA0CitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIG1pbiBoYW5kc2hha2UsIHNlcnZlci1pbml0aWF0ZWQgcmVuZWdvIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTAgYXV0aF9tb2RlPW5vbmUgXAorICAgICAgICAgICAgIHBzaz1hYmMxMjMgcmVuZWdvdGlhdGU9MSByZW5lZ290aWF0aW9uPTEgZXhjaGFuZ2VzPTQgXAorICAgICAgICAgICAgIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBwc2s9YWJjMTIzIFwKKyAgICAgICAgICAgICByZW5lZ290aWF0aW9uPTEgZXhjaGFuZ2VzPTQgZGVidWdfbGV2ZWw9MiBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVBTSy1XSVRILUFFUy0xMjgtQ0NNLTgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDQKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgbWluIGhhbmRzaGFrZSwgc2VydmVyLWluaXRpYXRlZCByZW5lZ28sIG5iaW8iIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZHJvcD01IGRlbGF5PTUgZHVwbGljYXRlPTUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBhdXRoX21vZGU9bm9uZSBcCisgICAgICAgICAgICAgcHNrPWFiYzEyMyByZW5lZ290aWF0ZT0xIHJlbmVnb3RpYXRpb249MSBleGNoYW5nZXM9NCBcCisgICAgICAgICAgICAgZGVidWdfbGV2ZWw9MiBuYmlvPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBwc2s9YWJjMTIzIFwKKyAgICAgICAgICAgICByZW5lZ290aWF0aW9uPTEgZXhjaGFuZ2VzPTQgZGVidWdfbGV2ZWw9MiBuYmlvPTIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1QU0stV0lUSC1BRVMtMTI4LUNDTS04IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworY2xpZW50X25lZWRzX21vcmVfdGltZSA2Citub3Rfd2l0aF92YWxncmluZCAjIHJpc2sgb2Ygbm9uLW1iZWR0bHMgcGVlciB0aW1pbmcgb3V0CitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIG9wZW5zc2wgc2VydmVyIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IHByb3RlY3RfaHZyPTEiIFwKKyAgICAgICAgICAgICIkT19TUlYgLWR0bHMxIC1tdHUgMjA0OCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtNjAwMDAgdGlja2V0cz0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgOAorbm90X3dpdGhfdmFsZ3JpbmQgIyByaXNrIG9mIG5vbi1tYmVkdGxzIHBlZXIgdGltaW5nIG91dAorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBvcGVuc3NsIHNlcnZlciwgZnJhZ21lbnRhdGlvbiIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSBwcm90ZWN0X2h2cj0xIiBcCisgICAgICAgICAgICAiJE9fU1JWIC1kdGxzMSAtbXR1IDc2OCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtNjAwMDAgdGlja2V0cz0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgOAorbm90X3dpdGhfdmFsZ3JpbmQgIyByaXNrIG9mIG5vbi1tYmVkdGxzIHBlZXIgdGltaW5nIG91dAorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBvcGVuc3NsIHNlcnZlciwgZnJhZ21lbnRhdGlvbiwgbmJpbyIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSBwcm90ZWN0X2h2cj0xIiBcCisgICAgICAgICAgICAiJE9fU1JWIC1kdGxzMSAtbXR1IDc2OCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtNjAwMDAgbmJpbz0yIHRpY2tldHM9MCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCityZXF1aXJlc19nbnV0bHMKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgNgorbm90X3dpdGhfdmFsZ3JpbmQgIyByaXNrIG9mIG5vbi1tYmVkdGxzIHBlZXIgdGltaW5nIG91dAorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBnbnV0bHMgc2VydmVyIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJEdfU1JWIC11IC0tbXR1IDIwNDggLWEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTYwMDAwIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiRXh0cmEtaGVhZGVyOiIKKworcmVxdWlyZXNfZ251dGxzCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDgKK25vdF93aXRoX3ZhbGdyaW5kICMgcmlzayBvZiBub24tbWJlZHRscyBwZWVyIHRpbWluZyBvdXQKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgZ251dGxzIHNlcnZlciwgZnJhZ21lbnRhdGlvbiIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRHX1NSViAtdSAtLW10dSA1MTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTYwMDAwIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiRXh0cmEtaGVhZGVyOiIKKworcmVxdWlyZXNfZ251dGxzCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDgKK25vdF93aXRoX3ZhbGdyaW5kICMgcmlzayBvZiBub24tbWJlZHRscyBwZWVyIHRpbWluZyBvdXQKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgZ251dGxzIHNlcnZlciwgZnJhZ21lbnRhdGlvbiwgbmJpbyIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRHX1NSViAtdSAtLW10dSA1MTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTYwMDAwIG5iaW89MiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkV4dHJhLWhlYWRlcjoiCisKKyMgRmluYWwgcmVwb3J0CisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKworaWYgWyAkRkFJTFMgPSAwIF07IHRoZW4KKyAgICBwcmludGYgIlBBU1NFRCIKK2Vsc2UKKyAgICBwcmludGYgIkZBSUxFRCIKK2ZpCitQQVNTRVM9JCgoICRURVNUUyAtICRGQUlMUyApKQorZWNobyAiICgkUEFTU0VTIC8gJFRFU1RTIHRlc3RzICgkU0tJUFMgc2tpcHBlZCkpIgorCitleGl0ICRGQUlMUwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzODE1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24KQEAgLTAsMCArMSw0MDQgQEAKKyNsaW5lIDEgImhlbHBlcnMuZnVuY3Rpb24iCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogSGVhZGVycyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICBzbnByaW50ZgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZGVmaW5lIG1iZWR0bHNfZXhpdCAgICAgICBleGl0CisjZGVmaW5lIG1iZWR0bHNfdGltZSAgICAgICB0aW1lCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgICB0aW1lX3QKKyNkZWZpbmUgTUJFRFRMU19FWElUX1NVQ0NFU1MgRVhJVF9TVUNDRVNTCisjZGVmaW5lIE1CRURUTFNfRVhJVF9GQUlMVVJFIEVYSVRfRkFJTFVSRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorI2luY2x1ZGUgIm1iZWR0bHMvbWVtb3J5X2J1ZmZlcl9hbGxvYy5oIgorI2VuZGlmCisKKyNpZmRlZiBfTVNDX1ZFUgorI2luY2x1ZGUgPGJhc2V0c2QuaD4KK3R5cGVkZWYgVUlOVDMyIHVpbnQzMl90OworI2RlZmluZSBzdHJuY2FzZWNtcCBfc3RybmljbXAKKyNkZWZpbmUgc3RyY2FzZWNtcCBfc3RyaWNtcAorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKF9fdW5peF9fKSB8fCAoZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19NQUNIX18pKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBDb25zdGFudHMgKi8KKworI2RlZmluZSBERVBFTkRFTkNZX1NVUFBPUlRFRCAgICAgICAgMAorI2RlZmluZSBERVBFTkRFTkNZX05PVF9TVVBQT1JURUQgICAgMQorCisjZGVmaW5lIEtFWV9WQUxVRV9NQVBQSU5HX0ZPVU5EICAgICAwCisjZGVmaW5lIEtFWV9WQUxVRV9NQVBQSU5HX05PVF9GT1VORCAtMQorCisjZGVmaW5lIERJU1BBVENIX1RFU1RfU1VDQ0VTUyAgICAgICAwCisjZGVmaW5lIERJU1BBVENIX1RFU1RfRk5fTk9UX0ZPVU5EICAxCisjZGVmaW5lIERJU1BBVENIX0lOVkFMSURfVEVTVF9EQVRBICAyCisjZGVmaW5lIERJU1BBVENIX1VOU1VQUE9SVEVEX1NVSVRFICAzCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE1hY3JvcyAqLworCisjZGVmaW5lIFRFU1RfQVNTRVJUKCBURVNUICkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoICEgKFRFU1QpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGVzdF9mYWlsKCAjVEVTVCwgX19MSU5FX18sIF9fRklMRV9fICk7IFwKKyAgICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoIDAgKQorCisjZGVmaW5lIGFzc2VydChhKSBpZiggISggYSApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiQXNzZXJ0aW9uIEZhaWxlZCBhdCAlczolZCAtICVzXG4iLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAjYSApOyAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfZXhpdCggMSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyoKKyAqIDMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbiBtYWNyb3MgKGJpZyBlbmRpYW4pCisgKi8KKyNpZm5kZWYgR0VUX1VJTlQzMl9CRQorI2RlZmluZSBHRVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobikgPSAoICh1aW50MzJfdCkgKGIpWyhpKSAgICBdIDw8IDI0ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMV0gPDwgMTYgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAyXSA8PCAgOCApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDNdICAgICAgICk7ICAgICAgICAgICAgXAorfQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQzMl9CRQorI2RlZmluZSBQVVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoYilbKGkpICAgIF0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMjQgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAxNiApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDJdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+ICA4ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgM10gPSAodW5zaWduZWQgY2hhcikgKCAobikgICAgICAgKTsgICAgICAgXAorfQorI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KKworc3RhdGljIGludCB0ZXN0X2Vycm9ycyA9IDA7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEhlbHBlciBGdW5jdGlvbnMgKi8KKworI2lmIGRlZmluZWQoX191bml4X18pIHx8IChkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ0hfXykpCitzdGF0aWMgaW50IHJlZGlyZWN0X291dHB1dCggRklMRSoqIG91dF9zdHJlYW0sIGNvbnN0IGNoYXIqIHBhdGggKQoreworICAgIGludCBzdGRvdXRfZmQgPSBkdXAoIGZpbGVubyggKm91dF9zdHJlYW0gKSApOworCisgICAgaWYoIHN0ZG91dF9mZCA9PSAtMSApCisgICAgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZmZsdXNoKCAqb3V0X3N0cmVhbSApOworICAgIGZjbG9zZSggKm91dF9zdHJlYW0gKTsKKyAgICAqb3V0X3N0cmVhbSA9IGZvcGVuKCBwYXRoLCAidyIgKTsKKworICAgIGlmKCAqb3V0X3N0cmVhbSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gc3Rkb3V0X2ZkOworfQorCitzdGF0aWMgaW50IHJlc3RvcmVfb3V0cHV0KCBGSUxFKiogb3V0X3N0cmVhbSwgaW50IG9sZF9mZCApCit7CisgICAgZmZsdXNoKCAqb3V0X3N0cmVhbSApOworICAgIGZjbG9zZSggKm91dF9zdHJlYW0gKTsKKworICAgICpvdXRfc3RyZWFtID0gZmRvcGVuKCBvbGRfZmQsICJ3IiApOworICAgIGlmKCAqb3V0X3N0cmVhbSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xvc2Vfb3V0cHV0KCBGSUxFKiBvdXRfc3RyZWFtICkKK3sKKyAgICBmY2xvc2UoIG91dF9zdHJlYW0gKTsKK30KKyNlbmRpZiAvKiBfX3VuaXhfXyB8fCBfX0FQUExFX18gX19NQUNIX18gKi8KKworc3RhdGljIGludCB1bmhleGlmeSggdW5zaWduZWQgY2hhciAqb2J1ZiwgY29uc3QgY2hhciAqaWJ1ZiApCit7CisgICAgdW5zaWduZWQgY2hhciBjLCBjMjsKKyAgICBpbnQgbGVuID0gc3RybGVuKCBpYnVmICkgLyAyOworICAgIGFzc2VydCggc3RybGVuKCBpYnVmICkgJSAyID09IDAgKTsgLyogbXVzdCBiZSBldmVuIG51bWJlciBvZiBieXRlcyAqLworCisgICAgd2hpbGUoICppYnVmICE9IDAgKQorICAgIHsKKyAgICAgICAgYyA9ICppYnVmKys7CisgICAgICAgIGlmKCBjID49ICcwJyAmJiBjIDw9ICc5JyApCisgICAgICAgICAgICBjIC09ICcwJzsKKyAgICAgICAgZWxzZSBpZiggYyA+PSAnYScgJiYgYyA8PSAnZicgKQorICAgICAgICAgICAgYyAtPSAnYScgLSAxMDsKKyAgICAgICAgZWxzZSBpZiggYyA+PSAnQScgJiYgYyA8PSAnRicgKQorICAgICAgICAgICAgYyAtPSAnQScgLSAxMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNzZXJ0KCAwICk7CisKKyAgICAgICAgYzIgPSAqaWJ1ZisrOworICAgICAgICBpZiggYzIgPj0gJzAnICYmIGMyIDw9ICc5JyApCisgICAgICAgICAgICBjMiAtPSAnMCc7CisgICAgICAgIGVsc2UgaWYoIGMyID49ICdhJyAmJiBjMiA8PSAnZicgKQorICAgICAgICAgICAgYzIgLT0gJ2EnIC0gMTA7CisgICAgICAgIGVsc2UgaWYoIGMyID49ICdBJyAmJiBjMiA8PSAnRicgKQorICAgICAgICAgICAgYzIgLT0gJ0EnIC0gMTA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFzc2VydCggMCApOworCisgICAgICAgICpvYnVmKysgPSAoIGMgPDwgNCApIHwgYzI7CisgICAgfQorCisgICAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQgaGV4aWZ5KCB1bnNpZ25lZCBjaGFyICpvYnVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICppYnVmLCBpbnQgbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGwsIGg7CisKKyAgICB3aGlsZSggbGVuICE9IDAgKQorICAgIHsKKyAgICAgICAgaCA9ICppYnVmIC8gMTY7CisgICAgICAgIGwgPSAqaWJ1ZiAlIDE2OworCisgICAgICAgIGlmKCBoIDwgMTAgKQorICAgICAgICAgICAgKm9idWYrKyA9ICcwJyArIGg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpvYnVmKysgPSAnYScgKyBoIC0gMTA7CisKKyAgICAgICAgaWYoIGwgPCAxMCApCisgICAgICAgICAgICAqb2J1ZisrID0gJzAnICsgbDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKm9idWYrKyA9ICdhJyArIGwgLSAxMDsKKworICAgICAgICArK2lidWY7CisgICAgICAgIGxlbi0tOworICAgIH0KK30KKworLyoqCisgKiBBbGxvY2F0ZSBhbmQgemVyb2l6ZSBhIGJ1ZmZlci4KKyAqCisgKiBJZiB0aGUgc2l6ZSBpZiB6ZXJvLCBhIHBvaW50ZXIgdG8gYSB6ZXJvaXplZCAxLWJ5dGUgYnVmZmVyIGlzIHJldHVybmVkLgorICoKKyAqIEZvciBjb252ZW5pZW5jZSwgZGllcyBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqemVyb19hbGxvYyggc2l6ZV90IGxlbiApCit7CisgICAgdm9pZCAqcDsKKyAgICBzaXplX3QgYWN0dWFsX2xlbiA9ICggbGVuICE9IDAgKSA/IGxlbiA6IDE7CisKKyAgICBwID0gbWJlZHRsc19jYWxsb2MoIDEsIGFjdHVhbF9sZW4gKTsKKyAgICBhc3NlcnQoIHAgIT0gTlVMTCApOworCisgICAgbWVtc2V0KCBwLCAweDAwLCBhY3R1YWxfbGVuICk7CisKKyAgICByZXR1cm4oIHAgKTsKK30KKworLyoqCisgKiBBbGxvY2F0ZSBhbmQgZmlsbCBhIGJ1ZmZlciBmcm9tIGhleCBkYXRhLgorICoKKyAqIFRoZSBidWZmZXIgaXMgc2l6ZWQgZXhhY3RseSBhcyBuZWVkZWQuIFRoaXMgYWxsb3dzIHRvIGRldGVjdCBidWZmZXIKKyAqIG92ZXJydW5zIChpbmNsdWRpbmcgb3ZlcnJlYWRzKSB3aGVuIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUgdW5kZXIgdmFsZ3JpbmQuCisgKgorICogSWYgdGhlIHNpemUgaWYgemVybywgYSBwb2ludGVyIHRvIGEgemVyb2l6ZWQgMS1ieXRlIGJ1ZmZlciBpcyByZXR1cm5lZC4KKyAqCisgKiBGb3IgY29udmVuaWVuY2UsIGRpZXMgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnVuaGV4aWZ5X2FsbG9jKCBjb25zdCBjaGFyICppYnVmLCBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgKm9idWY7CisKKyAgICAqb2xlbiA9IHN0cmxlbiggaWJ1ZiApIC8gMjsKKworICAgIGlmKCAqb2xlbiA9PSAwICkKKyAgICAgICAgcmV0dXJuKCB6ZXJvX2FsbG9jKCAqb2xlbiApICk7CisKKyAgICBvYnVmID0gbWJlZHRsc19jYWxsb2MoIDEsICpvbGVuICk7CisgICAgYXNzZXJ0KCBvYnVmICE9IE5VTEwgKTsKKworICAgICh2b2lkKSB1bmhleGlmeSggb2J1ZiwgaWJ1ZiApOworCisgICAgcmV0dXJuKCBvYnVmICk7Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBqdXN0IHJldHVybnMgZGF0YSBmcm9tIHJhbmQoKS4KKyAqIEFsdGhvdWdoIHByZWRpY3RhYmxlIGFuZCBvZnRlbiBzaW1pbGFyIG9uIG11bHRpcGxlCisgKiBydW5zLCB0aGlzIGRvZXMgbm90IHJlc3VsdCBpbiBpZGVudGljYWwgcmFuZG9tIG9uCisgKiBlYWNoIHJ1bi4gU28gZG8gbm90IHVzZSB0aGlzIGlmIHRoZSByZXN1bHRzIG9mIGEKKyAqIHRlc3QgZGVwZW5kIG9uIHRoZSByYW5kb20gZGF0YSB0aGF0IGlzIGdlbmVyYXRlZC4KKyAqCisgKiBybmdfc3RhdGUgc2hhbGwgYmUgTlVMTC4KKyAqLworc3RhdGljIGludCBybmRfc3RkX3JhbmQoIHZvaWQgKnJuZ19zdGF0ZSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuICkKK3sKKyNpZiAhZGVmaW5lZChfX09wZW5CU0RfXykKKyAgICBzaXplX3QgaTsKKworICAgIGlmKCBybmdfc3RhdGUgIT0gTlVMTCApCisgICAgICAgIHJuZ19zdGF0ZSAgPSBOVUxMOworCisgICAgZm9yKCBpID0gMDsgaSA8IGxlbjsgKytpICkKKyAgICAgICAgb3V0cHV0W2ldID0gcmFuZCgpOworI2Vsc2UKKyAgICBpZiggcm5nX3N0YXRlICE9IE5VTEwgKQorICAgICAgICBybmdfc3RhdGUgPSBOVUxMOworCisgICAgYXJjNHJhbmRvbV9idWYoIG91dHB1dCwgbGVuICk7CisjZW5kaWYgLyogIU9wZW5CU0QgKi8KKworICAgIHJldHVybiggMCApOworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gb25seSByZXR1cm5zIHplcm9zCisgKgorICogcm5nX3N0YXRlIHNoYWxsIGJlIE5VTEwuCisgKi8KK3N0YXRpYyBpbnQgcm5kX3plcm9fcmFuZCggdm9pZCAqcm5nX3N0YXRlLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4gKQoreworICAgIGlmKCBybmdfc3RhdGUgIT0gTlVMTCApCisgICAgICAgIHJuZ19zdGF0ZSAgPSBOVUxMOworCisgICAgbWVtc2V0KCBvdXRwdXQsIDAsIGxlbiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdW5zaWduZWQgY2hhciAqYnVmOworICAgIHNpemVfdCBsZW5ndGg7Cit9IHJuZF9idWZfaW5mbzsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcmFuZG9tIGJhc2VkIG9uIGEgYnVmZmVyIGl0IHJlY2VpdmVzLgorICoKKyAqIHJuZ19zdGF0ZSBzaGFsbCBiZSBhIHBvaW50ZXIgdG8gYSBybmRfYnVmX2luZm8gc3RydWN0dXJlLgorICoKKyAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgcmVsZWFzZWQgZnJvbSB0aGUgYnVmZmVyIG9uIGVhY2ggY2FsbCB0bworICogdGhlIHJhbmRvbSBmdW5jdGlvbiBpcyBzcGVjaWZpZWQgYnkgcGVyX2NhbGwuIChDYW4gYmUgYmV0d2VlbgorICogMSBhbmQgNCkKKyAqCisgKiBBZnRlciB0aGUgYnVmZmVyIGlzIGVtcHR5IGl0IHdpbGwgcmV0dXJuIHJhbmQoKTsKKyAqLworc3RhdGljIGludCBybmRfYnVmZmVyX3JhbmQoIHZvaWQgKnJuZ19zdGF0ZSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuICkKK3sKKyAgICBybmRfYnVmX2luZm8gKmluZm8gPSAocm5kX2J1Zl9pbmZvICopIHJuZ19zdGF0ZTsKKyAgICBzaXplX3QgdXNlX2xlbjsKKworICAgIGlmKCBybmdfc3RhdGUgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggcm5kX3N0ZF9yYW5kKCBOVUxMLCBvdXRwdXQsIGxlbiApICk7CisKKyAgICB1c2VfbGVuID0gbGVuOworICAgIGlmKCBsZW4gPiBpbmZvLT5sZW5ndGggKQorICAgICAgICB1c2VfbGVuID0gaW5mby0+bGVuZ3RoOworCisgICAgaWYoIHVzZV9sZW4gKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCBvdXRwdXQsIGluZm8tPmJ1ZiwgdXNlX2xlbiApOworICAgICAgICBpbmZvLT5idWYgKz0gdXNlX2xlbjsKKyAgICAgICAgaW5mby0+bGVuZ3RoIC09IHVzZV9sZW47CisgICAgfQorCisgICAgaWYoIGxlbiAtIHVzZV9sZW4gPiAwICkKKyAgICAgICAgcmV0dXJuKCBybmRfc3RkX3JhbmQoIE5VTEwsIG91dHB1dCArIHVzZV9sZW4sIGxlbiAtIHVzZV9sZW4gKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qKgorICogSW5mbyBzdHJ1Y3R1cmUgZm9yIHRoZSBwc2V1ZG8gcmFuZG9tIGZ1bmN0aW9uCisgKgorICogS2V5IHNob3VsZCBiZSBzZXQgYXQgdGhlIHN0YXJ0IHRvIGEgdGVzdC11bmlxdWUgdmFsdWUuCisgKiBEbyBub3QgZm9yZ2V0IGVuZGlhbm5lc3MhCisgKiBTdGF0ZSggdjAsIHYxICkgc2hvdWxkIGJlIHNldCB0byB6ZXJvLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQzMl90IGtleVsxNl07CisgICAgdWludDMyX3QgdjAsIHYxOworfSBybmRfcHNldWRvX2luZm87CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHJhbmRvbSBiYXNlZCBvbiBhIHBzZXVkbyByYW5kb20gZnVuY3Rpb24uCisgKiBUaGlzIG1lYW5zIHRoZSByZXN1bHRzIHNob3VsZCBiZSBpZGVudGljYWwgb24gYWxsIHN5c3RlbXMuCisgKiBQc2V1ZG8gcmFuZG9tIGlzIGJhc2VkIG9uIHRoZSBYVEVBIGVuY3J5cHRpb24gYWxnb3JpdGhtIHRvCisgKiBnZW5lcmF0ZSBwc2V1ZG9yYW5kb20uCisgKgorICogcm5nX3N0YXRlIHNoYWxsIGJlIGEgcG9pbnRlciB0byBhIHJuZF9wc2V1ZG9faW5mbyBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbnQgcm5kX3BzZXVkb19yYW5kKCB2b2lkICpybmdfc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiApCit7CisgICAgcm5kX3BzZXVkb19pbmZvICppbmZvID0gKHJuZF9wc2V1ZG9faW5mbyAqKSBybmdfc3RhdGU7CisgICAgdWludDMyX3QgaSwgKmssIHN1bSwgZGVsdGE9MHg5RTM3NzlCOTsKKyAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdFs0XSwgKm91dCA9IG91dHB1dDsKKworICAgIGlmKCBybmdfc3RhdGUgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggcm5kX3N0ZF9yYW5kKCBOVUxMLCBvdXRwdXQsIGxlbiApICk7CisKKyAgICBrID0gaW5mby0+a2V5OworCisgICAgd2hpbGUoIGxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHVzZV9sZW4gPSAoIGxlbiA+IDQgKSA/IDQgOiBsZW47CisgICAgICAgIHN1bSA9IDA7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDMyOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBpbmZvLT52MCArPSAoICggKCBpbmZvLT52MSA8PCA0ICkgXiAoIGluZm8tPnYxID4+IDUgKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbmZvLT52MSApIF4gKCBzdW0gKyBrW3N1bSAmIDNdICk7CisgICAgICAgICAgICBzdW0gKz0gZGVsdGE7CisgICAgICAgICAgICBpbmZvLT52MSArPSAoICggKCBpbmZvLT52MCA8PCA0ICkgXiAoIGluZm8tPnYwID4+IDUgKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbmZvLT52MCApIF4gKCBzdW0gKyBrWyggc3VtPj4xMSApICYgM10gKTsKKyAgICAgICAgfQorCisgICAgICAgIFBVVF9VSU5UMzJfQkUoIGluZm8tPnYwLCByZXN1bHQsIDAgKTsKKyAgICAgICAgbWVtY3B5KCBvdXQsIHJlc3VsdCwgdXNlX2xlbiApOworICAgICAgICBsZW4gLT0gdXNlX2xlbjsKKyAgICAgICAgb3V0ICs9IDQ7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZmFpbCggY29uc3QgY2hhciAqdGVzdCwgaW50IGxpbmVfbm8sIGNvbnN0IGNoYXIqIGZpbGVuYW1lICkKK3sKKyAgICB0ZXN0X2Vycm9ycysrOworICAgIGlmKCB0ZXN0X2Vycm9ycyA9PSAxICkKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRvdXQsICJGQUlMRURcbiIgKTsKKyAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZG91dCwgIiAgJXNcbiAgYXQgbGluZSAlZCwgJXNcbiIsIHRlc3QsIGxpbmVfbm8sCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSApOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZmY1YTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgpAQCAtMCwwICsxLDUwOSBAQAorI2xpbmUgMSAibWFpbl90ZXN0LmZ1bmN0aW9uIgorU1VJVEVfUFJFX0RFUAorI2RlZmluZSBURVNUX1NVSVRFX0FDVElWRQorCitpbnQgdmVyaWZ5X3N0cmluZyggY2hhciAqKnN0ciApCit7CisgICAgaWYoICgqc3RyKVswXSAhPSAnIicgfHwKKyAgICAgICAgKCpzdHIpW3N0cmxlbiggKnN0ciApIC0gMV0gIT0gJyInICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLAorICAgICAgICAgICAgIkV4cGVjdGVkIHN0cmluZyAod2l0aCBcIlwiKSBmb3IgcGFyYW1ldGVyIGFuZCBnb3Q6ICVzXG4iLCAqc3RyICk7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICAoKnN0cikrKzsKKyAgICAoKnN0cilbc3RybGVuKCAqc3RyICkgLSAxXSA9ICdcMCc7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IHZlcmlmeV9pbnQoIGNoYXIgKnN0ciwgaW50ICp2YWx1ZSApCit7CisgICAgc2l6ZV90IGk7CisgICAgaW50IG1pbnVzID0gMDsKKyAgICBpbnQgZGlnaXRzID0gMTsKKyAgICBpbnQgaGV4ID0gMDsKKworICAgIGZvciggaSA9IDA7IGkgPCBzdHJsZW4oIHN0ciApOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIGkgPT0gMCAmJiBzdHJbaV0gPT0gJy0nICkKKyAgICAgICAgeworICAgICAgICAgICAgbWludXMgPSAxOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCAoIG1pbnVzICYmIGkgPT0gMiApIHx8ICggIW1pbnVzICYmIGkgPT0gMSApICkgJiYKKyAgICAgICAgICAgIHN0cltpIC0gMV0gPT0gJzAnICYmIHN0cltpXSA9PSAneCcgKQorICAgICAgICB7CisgICAgICAgICAgICBoZXggPSAxOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiggISAoICggc3RyW2ldID49ICcwJyAmJiBzdHJbaV0gPD0gJzknICkgfHwKKyAgICAgICAgICAgICAgICAoIGhleCAmJiAoICggc3RyW2ldID49ICdhJyAmJiBzdHJbaV0gPD0gJ2YnICkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3RyW2ldID49ICdBJyAmJiBzdHJbaV0gPD0gJ0YnICkgKSApICkgKQorICAgICAgICB7CisgICAgICAgICAgICBkaWdpdHMgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggZGlnaXRzICkKKyAgICB7CisgICAgICAgIGlmKCBoZXggKQorICAgICAgICAgICAgKnZhbHVlID0gc3RydG9sKCBzdHIsIE5VTEwsIDE2ICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICp2YWx1ZSA9IHN0cnRvbCggc3RyLCBOVUxMLCAxMCApOworCisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworTUFQUElOR19DT0RFCisKKyAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGludGVnZXIgZm9yIHBhcmFtZXRlciBhbmQgZ290OiAlc1xuIiwgc3RyICk7CisgICAgcmV0dXJuKCBLRVlfVkFMVUVfTUFQUElOR19OT1RfRk9VTkQgKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGVzdCBDYXNlIGNvZGUgKi8KKworRlVOQ1RJT05fQ09ERQorU1VJVEVfUE9TVF9ERVAKKworI2xpbmUgIUxJTkVfTk8hICJtYWluX3Rlc3QuZnVuY3Rpb24iCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRlc3QgZGlzcGF0Y2ggY29kZSAqLworCitpbnQgZGVwX2NoZWNrKCBjaGFyICpzdHIgKQoreworICAgIGlmKCBzdHIgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggMSApOworCitERVBfQ0hFQ0tfQ09ERQorI2xpbmUgIUxJTkVfTk8hICJtYWluX3Rlc3QuZnVuY3Rpb24iCisKKyAgICByZXR1cm4oIERFUEVOREVOQ1lfTk9UX1NVUFBPUlRFRCApOworfQorCitpbnQgZGlzcGF0Y2hfdGVzdChpbnQgY250LCBjaGFyICpwYXJhbXNbNTBdKQoreworICAgIGludCByZXQ7CisgICAgKCh2b2lkKSBjbnQpOworICAgICgodm9pZCkgcGFyYW1zKTsKKworI2lmIGRlZmluZWQoVEVTVF9TVUlURV9BQ1RJVkUpCisgICAgcmV0ID0gRElTUEFUQ0hfVEVTVF9TVUNDRVNTOworCisgICAgLy8gQ2FzdCB0byB2b2lkIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzCisgICAgKHZvaWQpcmV0OworCitESVNQQVRDSF9GVU5DVElPTgorICAgIHsKKyNsaW5lICFMSU5FX05PISAibWFpbl90ZXN0LmZ1bmN0aW9uIgorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTEVEXG5Ta2lwcGluZyB1bmtub3duIHRlc3QgZnVuY3Rpb24gJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMF0gKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKyAgICAgICAgcmV0ID0gRElTUEFUQ0hfVEVTVF9GTl9OT1RfRk9VTkQ7CisgICAgfQorI2Vsc2UKKyAgICByZXQgPSBESVNQQVRDSF9VTlNVUFBPUlRFRF9TVUlURTsKKyNlbmRpZgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE1haW4gVGVzdCBjb2RlICovCisKKyNsaW5lICFMSU5FX05PISAibWFpbl90ZXN0LmZ1bmN0aW9uIgorCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiVXNhZ2U6ICVzIFtPUFRJT05TXSBmaWxlcy4uLlxuXG4iIFwKKyAgICAiICAgQ29tbWFuZCBsaW5lIGFyZ3VtZW50czpcbiIgXAorICAgICIgICAgIGZpbGVzLi4uICAgICAgICAgIE9uZSBvciBtb3JlIHRlc3QgZGF0YSBmaWxlLiBJZiBubyBmaWxlIGlzIHNwZWNpZmllZFxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2ltZyBkZWZhdWx0IHRlc3QgY2FzZSBpcyB1c2VkOlxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICVzXG5cbiIgXAorICAgICIgICBPcHRpb25zOlxuIiBcCisgICAgIiAgICAgLXYgfCAtLXZlcmJvc2UgICAgRGlzcGxheSBmdWxsIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggdGVzdFxuIiBcCisgICAgIiAgICAgLWggfCAtLWhlbHAgICAgICAgRGlzcGxheSB0aGlzIGluZm9ybWF0aW9uXG5cbiIsIFwKKyAgICBhcmd2WzBdLCBcCisgICAgIlRFU1RDQVNFX0ZJTEVOQU1FIgorCisKK2ludCBnZXRfbGluZSggRklMRSAqZiwgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBjaGFyICpyZXQ7CisKKyAgICByZXQgPSBmZ2V0cyggYnVmLCBsZW4sIGYgKTsKKyAgICBpZiggcmV0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggc3RybGVuKCBidWYgKSAmJiBidWZbc3RybGVuKGJ1ZikgLSAxXSA9PSAnXG4nICkKKyAgICAgICAgYnVmW3N0cmxlbihidWYpIC0gMV0gPSAnXDAnOworICAgIGlmKCBzdHJsZW4oIGJ1ZiApICYmIGJ1ZltzdHJsZW4oYnVmKSAtIDFdID09ICdccicgKQorICAgICAgICBidWZbc3RybGVuKGJ1ZikgLSAxXSA9ICdcMCc7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IHBhcnNlX2FyZ3VtZW50cyggY2hhciAqYnVmLCBzaXplX3QgbGVuLCBjaGFyICpwYXJhbXNbNTBdICkKK3sKKyAgICBpbnQgY250ID0gMCwgaTsKKyAgICBjaGFyICpjdXIgPSBidWY7CisgICAgY2hhciAqcCA9IGJ1ZiwgKnE7CisKKyAgICBwYXJhbXNbY250KytdID0gY3VyOworCisgICAgd2hpbGUoICpwICE9ICdcMCcgJiYgcCA8IGJ1ZiArIGxlbiApCisgICAgeworICAgICAgICBpZiggKnAgPT0gJ1xcJyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmKCAqcCA9PSAnOicgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggcCArIDEgPCBidWYgKyBsZW4gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN1ciA9IHAgKyAxOworICAgICAgICAgICAgICAgIHBhcmFtc1tjbnQrK10gPSBjdXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqcCA9ICdcMCc7CisgICAgICAgIH0KKworICAgICAgICBwKys7CisgICAgfQorCisgICAgLyogUmVwbGFjZSBuZXdsaW5lcywgcXVlc3Rpb24gbWFya3MgYW5kIGNvbG9ucyBpbiBzdHJpbmdzICovCisgICAgZm9yKCBpID0gMDsgaSA8IGNudDsgaSsrICkKKyAgICB7CisgICAgICAgIHAgPSBwYXJhbXNbaV07CisgICAgICAgIHEgPSBwYXJhbXNbaV07CisKKyAgICAgICAgd2hpbGUoICpwICE9ICdcMCcgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKnAgPT0gJ1xcJyAmJiAqKHAgKyAxKSA9PSAnbicgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgICAgICAgICAqKHErKykgPSAnXG4nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggKnAgPT0gJ1xcJyAmJiAqKHAgKyAxKSA9PSAnOicgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgICAgICAgICAqKHErKykgPSAnOic7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCAqcCA9PSAnXFwnICYmICoocCArIDEpID09ICc/JyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcCArPSAyOworICAgICAgICAgICAgICAgICoocSsrKSA9ICc/JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqKHErKykgPSAqKHArKyk7CisgICAgICAgIH0KKyAgICAgICAgKnEgPSAnXDAnOworICAgIH0KKworICAgIHJldHVybiggY250ICk7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9zbnByaW50Ziggc2l6ZV90IG4sIGNvbnN0IGNoYXIgcmVmX2J1ZlsxMF0sIGludCByZWZfcmV0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNoYXIgYnVmWzEwXSA9ICJ4eHh4eHh4eHgiOworICAgIGNvbnN0IGNoYXIgcmVmWzEwXSA9ICJ4eHh4eHh4eHgiOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggYnVmLCBuLCAiJXMiLCAiMTIzIiApOworICAgIGlmKCByZXQgPCAwIHx8IChzaXplX3QpIHJldCA+PSBuICkKKyAgICAgICAgcmV0ID0gLTE7CisKKyAgICBpZiggc3RybmNtcCggcmVmX2J1ZiwgYnVmLCBzaXplb2YoIGJ1ZiApICkgIT0gMCB8fAorICAgICAgICByZWZfcmV0ICE9IHJldCB8fAorICAgICAgICBtZW1jbXAoIGJ1ZiArIG4sIHJlZiArIG4sIHNpemVvZiggYnVmICkgLSBuICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCBydW5fdGVzdF9zbnByaW50Ziggdm9pZCApCit7CisgICAgcmV0dXJuKCB0ZXN0X3NucHJpbnRmKCAwLCAieHh4eHh4eHh4IiwgIC0xICkgIT0gMCB8fAorICAgICAgICAgICAgdGVzdF9zbnByaW50ZiggMSwgIiIsICAgICAgICAgICAtMSApICE9IDAgfHwKKyAgICAgICAgICAgIHRlc3Rfc25wcmludGYoIDIsICIxIiwgICAgICAgICAgLTEgKSAhPSAwIHx8CisgICAgICAgICAgICB0ZXN0X3NucHJpbnRmKCAzLCAiMTIiLCAgICAgICAgIC0xICkgIT0gMCB8fAorICAgICAgICAgICAgdGVzdF9zbnByaW50ZiggNCwgIjEyMyIsICAgICAgICAgMyApICE9IDAgfHwKKyAgICAgICAgICAgIHRlc3Rfc25wcmludGYoIDUsICIxMjMiLCAgICAgICAgIDMgKSAhPSAwICk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCit7CisgICAgLyogTG9jYWwgQ29uZmlndXJhdGlvbnMgYW5kIG9wdGlvbnMgKi8KKyAgICBjb25zdCBjaGFyICpkZWZhdWx0X2ZpbGVuYW1lID0gIlRFU1RDQVNFX0ZJTEVOQU1FIjsKKyAgICBjb25zdCBjaGFyICp0ZXN0X2ZpbGVuYW1lID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICoqdGVzdF9maWxlcyA9IE5VTEw7CisgICAgaW50IHRlc3RmaWxlX2NvdW50ID0gMDsKKyAgICBpbnQgb3B0aW9uX3ZlcmJvc2UgPSAwOworCisgICAgLyogT3RoZXIgTG9jYWwgdmFyaWFibGVzICovCisgICAgaW50IGFyZ19pbmRleCA9IDE7CisgICAgY29uc3QgY2hhciAqbmV4dF9hcmc7CisgICAgaW50IHRlc3RmaWxlX2luZGV4LCByZXQsIGksIGNudDsKKyAgICBpbnQgdG90YWxfZXJyb3JzID0gMCwgdG90YWxfdGVzdHMgPSAwLCB0b3RhbF9za2lwcGVkID0gMDsKKyAgICBGSUxFICpmaWxlOworICAgIGNoYXIgYnVmWzUwMDBdOworICAgIGNoYXIgKnBhcmFtc1s1MF07CisgICAgdm9pZCAqcG9pbnRlcjsKKyAgICBpbnQgc3Rkb3V0X2ZkID0gLTE7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKSAmJiBcCisgICAgIWRlZmluZWQoVEVTVF9TVUlURV9NRU1PUllfQlVGRkVSX0FMTE9DKQorICAgIHVuc2lnbmVkIGNoYXIgYWxsb2NfYnVmWzEwMDAwMDBdOworICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19pbml0KCBhbGxvY19idWYsIHNpemVvZihhbGxvY19idWYpICk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogVGhlIEMgc3RhbmRhcmQgZG9lc24ndCBndWFyYW50ZWUgdGhhdCBhbGwtYml0cy0wIGlzIHRoZSByZXByZXNlbnRhdGlvbgorICAgICAqIG9mIGEgTlVMTCBwb2ludGVyLiBXZSBkbyBob3dldmVyIHVzZSB0aGF0IGluIG91ciBjb2RlIGZvciBpbml0aWFsaXppbmcKKyAgICAgKiBzdHJ1Y3R1cmVzLCB3aGljaCBzaG91bGQgd29yayBvbiBldmVyeSBtb2Rlcm4gcGxhdGZvcm0uIExldCdzIGJlIHN1cmUuCisgICAgICovCisgICAgbWVtc2V0KCAmcG9pbnRlciwgMCwgc2l6ZW9mKCB2b2lkICogKSApOworICAgIGlmKCBwb2ludGVyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJhbGwtYml0cy16ZXJvIGlzIG5vdCBhIE5VTEwgcG9pbnRlclxuIiApOworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgc25wcmludGYgdGhhdCBjb3JyZWN0bHkgemVyby10ZXJtaW5hdGVzCisgICAgICovCisgICAgaWYoIHJ1bl90ZXN0X3NucHJpbnRmKCkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgInRoZSBzbnByaW50ZiBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW5cbiIgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgd2hpbGUoIGFyZ19pbmRleCA8IGFyZ2MpCisgICAgeworICAgICAgICBuZXh0X2FyZyA9IGFyZ3ZbIGFyZ19pbmRleCBdOworCisgICAgICAgIGlmKCBzdHJjbXAobmV4dF9hcmcsICItLXZlcmJvc2UiICkgPT0gMCB8fAorICAgICAgICAgICAgICAgICBzdHJjbXAobmV4dF9hcmcsICItdiIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0aW9uX3ZlcmJvc2UgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcChuZXh0X2FyZywgIi0taGVscCIgKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgIHN0cmNtcChuZXh0X2FyZywgIi1oIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZG91dCwgVVNBR0UgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggRVhJVF9TVUNDRVNTICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBOb3QgYW4gb3B0aW9uLCB0aGVyZWZvcmUgdHJlYXQgYWxsIGZ1cnRoZXIgYXJndW1lbnRzIGFzIHRoZSBmaWxlCisgICAgICAgICAgICAgKiBsaXN0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICB0ZXN0X2ZpbGVzID0gJmFyZ3ZbIGFyZ19pbmRleCBdOworICAgICAgICAgICAgdGVzdGZpbGVfY291bnQgPSBhcmdjIC0gYXJnX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYXJnX2luZGV4Kys7CisgICAgfQorCisgICAgLyogSWYgbm8gZmlsZXMgd2VyZSBzcGVjaWZpZWQsIGFzc3VtZSBhIGRlZmF1bHQgKi8KKyAgICBpZiAoIHRlc3RfZmlsZXMgPT0gTlVMTCB8fCB0ZXN0ZmlsZV9jb3VudCA9PSAwICkKKyAgICB7CisgICAgICAgIHRlc3RfZmlsZXMgPSAmZGVmYXVsdF9maWxlbmFtZTsKKyAgICAgICAgdGVzdGZpbGVfY291bnQgPSAxOworICAgIH0KKworICAgIC8qIE5vdyBiZWdpbiB0byBleGVjdXRlIHRoZSB0ZXN0cyBpbiB0aGUgdGVzdGZpbGVzICovCisgICAgZm9yICggdGVzdGZpbGVfaW5kZXggPSAwOworICAgICAgICAgIHRlc3RmaWxlX2luZGV4IDwgdGVzdGZpbGVfY291bnQ7CisgICAgICAgICAgdGVzdGZpbGVfaW5kZXgrKyApCisgICAgeworICAgICAgICBpbnQgdW5tZXRfZGVwX2NvdW50ID0gMDsKKyAgICAgICAgY2hhciAqdW5tZXRfZGVwZW5kZW5jaWVzWzIwXTsKKworICAgICAgICB0ZXN0X2ZpbGVuYW1lID0gdGVzdF9maWxlc1sgdGVzdGZpbGVfaW5kZXggXTsKKworICAgICAgICBmaWxlID0gZm9wZW4oIHRlc3RfZmlsZW5hbWUsICJyIiApOworICAgICAgICBpZiggZmlsZSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiB0ZXN0IGZpbGU6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2ZpbGVuYW1lICk7CisgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlKCAhZmVvZiggZmlsZSApICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHVubWV0X2RlcF9jb3VudCA+IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiRkFUQUw6IERlcCBjb3VudCBsYXJnZXIgdGhhbiB6ZXJvIGF0IHN0YXJ0IG9mIGxvb3BcbiIgKTsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIE1CRURUTFNfRVhJVF9GQUlMVVJFICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1bm1ldF9kZXBfY291bnQgPSAwOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBnZXRfbGluZSggZmlsZSwgYnVmLCBzaXplb2YoYnVmKSApICkgIT0gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZG91dCwgIiVzJS42NnMiLCB0ZXN0X2Vycm9ycyA/ICJcbiIgOiAiIiwgYnVmICk7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZG91dCwgIiAiICk7CisgICAgICAgICAgICBmb3IoIGkgPSBzdHJsZW4oIGJ1ZiApICsgMTsgaSA8IDY3OyBpKysgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiLiIgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiICIgKTsKKyAgICAgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgICAgIHRvdGFsX3Rlc3RzKys7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IGdldF9saW5lKCBmaWxlLCBidWYsIHNpemVvZihidWYpICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNudCA9IHBhcnNlX2FyZ3VtZW50cyggYnVmLCBzdHJsZW4oYnVmKSwgcGFyYW1zICk7CisKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHBhcmFtc1swXSwgImRlcGVuZHNfb24iICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yKCBpID0gMTsgaSA8IGNudDsgaSsrICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKCBkZXBfY2hlY2soIHBhcmFtc1tpXSApICE9IERFUEVOREVOQ1lfU1VQUE9SVEVEICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIDAgPT0gb3B0aW9uX3ZlcmJvc2UgKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgb25lIGNvdW50IGlzIG5lZWRlZCBpZiBub3QgdmVyYm9zZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubWV0X2RlcF9jb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB1bm1ldF9kZXBlbmRlbmNpZXNbIHVubWV0X2RlcF9jb3VudCBdID0gc3RyZHVwKHBhcmFtc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiggIHVubWV0X2RlcGVuZGVuY2llc1sgdW5tZXRfZGVwX2NvdW50IF0gPT0gTlVMTCApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGQVRBTDogT3V0IG9mIG1lbW9yeVxuIiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggTUJFRFRMU19FWElUX0ZBSUxVUkUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVubWV0X2RlcF9jb3VudCsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYoICggcmV0ID0gZ2V0X2xpbmUoIGZpbGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikgKSApICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjbnQgPSBwYXJzZV9hcmd1bWVudHMoIGJ1Ziwgc3RybGVuKGJ1ZiksIHBhcmFtcyApOworICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHVubWV0IGRlcGVuZGVuY2llcyBleGVjdXRlIHRoZSB0ZXN0CisgICAgICAgICAgICBpZiggdW5tZXRfZGVwX2NvdW50ID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlc3RfZXJyb3JzID0gMDsKKworI2lmIGRlZmluZWQoX191bml4X18pIHx8IChkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ0hfXykpCisgICAgICAgICAgICAgICAgLyogU3VwcHJlc3MgYWxsIG91dHB1dCBmcm9tIHRoZSBsaWJyYXJ5IHVubGVzcyB3ZSdyZSB2ZXJib3NlCisgICAgICAgICAgICAgICAgICogbW9kZQorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmKCAhb3B0aW9uX3ZlcmJvc2UgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0X2ZkID0gcmVkaXJlY3Rfb3V0cHV0KCAmc3Rkb3V0LCAiL2Rldi9udWxsIiApOworICAgICAgICAgICAgICAgICAgICBpZiggc3Rkb3V0X2ZkID09IC0xICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVkaXJlY3Rpb24gaGFzIGZhaWxlZCB3aXRoIG5vIHN0ZG91dCBzbyBleGl0ICovCisgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCAxICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogX191bml4X18gfHwgX19BUFBMRV9fIF9fTUFDSF9fICovCisKKyAgICAgICAgICAgICAgICByZXQgPSBkaXNwYXRjaF90ZXN0KCBjbnQsIHBhcmFtcyApOworCisjaWYgZGVmaW5lZChfX3VuaXhfXykgfHwgKGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fTUFDSF9fKSkKKyAgICAgICAgICAgICAgICBpZiggIW9wdGlvbl92ZXJib3NlICYmIHJlc3RvcmVfb3V0cHV0KCAmc3Rkb3V0LCBzdGRvdXRfZmQgKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVkaXJlY3Rpb24gaGFzIGZhaWxlZCB3aXRoIG5vIHN0ZG91dCBzbyBleGl0ICovCisgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCAxICk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIF9fdW5peF9fIHx8IF9fQVBQTEVfXyBfX01BQ0hfXyAqLworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCB1bm1ldF9kZXBfY291bnQgPiAwIHx8IHJldCA9PSBESVNQQVRDSF9VTlNVUFBPUlRFRF9TVUlURSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdG90YWxfc2tpcHBlZCsrOworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiLS0tLVxuIiApOworCisgICAgICAgICAgICAgICAgaWYoIDEgPT0gb3B0aW9uX3ZlcmJvc2UgJiYgcmV0ID09IERJU1BBVENIX1VOU1VQUE9SVEVEX1NVSVRFICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiICAgVGVzdCBTdWl0ZSBub3QgZW5hYmxlZCIgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiggMSA9PSBvcHRpb25fdmVyYm9zZSAmJiB1bm1ldF9kZXBfY291bnQgPiAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiICAgVW5tZXQgZGVwZW5kZW5jaWVzOiAiICk7CisgICAgICAgICAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCB1bm1ldF9kZXBfY291bnQ7IGkrKyApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50ZihzdGRvdXQsICIlcyAgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1ldF9kZXBlbmRlbmNpZXNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSh1bm1ldF9kZXBlbmRlbmNpZXNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiXG4iICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgICAgICAgICB1bm1ldF9kZXBfY291bnQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggcmV0ID09IERJU1BBVENIX1RFU1RfU1VDQ0VTUyAmJiB0ZXN0X2Vycm9ycyA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZG91dCwgIlBBU1NcbiIgKTsKKyAgICAgICAgICAgICAgICBmZmx1c2goIHN0ZG91dCApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggcmV0ID09IERJU1BBVENIX0lOVkFMSURfVEVTVF9EQVRBICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZBSUxFRDogRkFUQUwgUEFSU0UgRVJST1JcbiIgKTsKKyAgICAgICAgICAgICAgICBmY2xvc2UoZmlsZSk7CisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KCAyICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdG90YWxfZXJyb3JzKys7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IGdldF9saW5lKCBmaWxlLCBidWYsIHNpemVvZihidWYpICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmKCBzdHJsZW4oYnVmKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIlNob3VsZCBiZSBlbXB0eSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIHN0cmxlbihidWYpICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZmNsb3NlKGZpbGUpOworCisgICAgICAgIC8qIEluIGNhc2Ugd2UgZW5jb3VudGVyIGVhcmx5IGVuZCBvZiBmaWxlICovCisgICAgICAgIGZvciggaSA9IDA7IGkgPCB1bm1ldF9kZXBfY291bnQ7IGkrKyApCisgICAgICAgICAgICBmcmVlKCB1bm1ldF9kZXBlbmRlbmNpZXNbaV0gKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZG91dCwgIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iKTsKKyAgICBpZiggdG90YWxfZXJyb3JzID09IDAgKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZG91dCwgIlBBU1NFRCIgKTsKKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiRkFJTEVEIiApOworCisgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRvdXQsICIgKCVkIC8gJWQgdGVzdHMgKCVkIHNraXBwZWQpKVxuIiwKKyAgICAgICAgICAgICB0b3RhbF90ZXN0cyAtIHRvdGFsX2Vycm9ycywgdG90YWxfdGVzdHMsIHRvdGFsX3NraXBwZWQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpICYmIFwKKyAgICAhZGVmaW5lZChURVNUX1NVSVRFX01FTU9SWV9CVUZGRVJfQUxMT0MpCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc3RhdHVzKCk7CisjZW5kaWYKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fdW5peF9fKSB8fCAoZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19NQUNIX18pKQorICAgIGlmKCBzdGRvdXRfZmQgIT0gLTEgKQorICAgICAgICBjbG9zZV9vdXRwdXQoIHN0ZG91dCApOworI2VuZGlmIC8qIF9fdW5peF9fIHx8IF9fQVBQTEVfXyBfX01BQ0hfXyAqLworCisgICAgcmV0dXJuKCB0b3RhbF9lcnJvcnMgIT0gMCApOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmNiYy5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5jYmMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWE5ZWVlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5jYmMuZGF0YQpAQCAtMCwwICsxLDIxNSBAQAorQUVTLTEyOC1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMQorYWVzX2VuY3J5cHRfY2JjOiJmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4YjUyN2E2YWViZGFlYzllYWVmOGVkYTJjYjc3ODNlNSI6MAorCitBRVMtMTI4LUNCQyBFbmNyeXB0IE5JU1QgS0FUICMyCithZXNfZW5jcnlwdF9jYmM6ImZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQzZmRhZjUzZWJiYzk4ODBjMjI4NjE3ZDZhOWI1NDhiIjowCisKK0FFUy0xMjgtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzMKK2Flc19lbmNyeXB0X2NiYzoiZmZmZmZmZmZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNTM3ODYxMDRiOTc0NGI5OGYwNTJjNDZmMWM4NTBkMGIiOjAKKworQUVTLTEyOC1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjNAorYWVzX2VuY3J5cHRfY2JjOiJlMzdiMWM2YWEyODQ2ZjZmZGI0MTNmMjM4YjA4OWYyMyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0M2M5ZjdlNjJmNWQyODhiYjI3YWE0MGVmOGZlMWVhOCI6MAorCitBRVMtMTI4LUNCQyBFbmNyeXB0IE5JU1QgS0FUICM1CithZXNfZW5jcnlwdF9jYmM6IjZjMDAyYjY4MjQ4M2UwY2FiY2M3MzFjMjUzYmU1Njc0IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjM1ODBkMTljZmY0NGYxMDE0YTdjOTY2YTY5MDU5ZGU1IjowCisKK0FFUy0xMjgtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzYKK2Flc19lbmNyeXB0X2NiYzoiMTQzYWU4ZWQ2NTU1YWJhOTYxMTBhYjU4ODkzYThhZTEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiODA2ZGE4NjRkZDI5ZDQ4ZGVhZmJlNzY0ZjgyMDJhZWYiOjAKKworQUVTLTEyOC1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjNworYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNmExMThhODc0NTE5ZTY0ZTk5NjM3OThhNTAzZjFkMzUiOiJkYzQzYmU0MGJlMGU1MzcxMmY3ZTJiZjVjYTcwNzIwOSI6MAorCitBRVMtMTI4LUNCQyBFbmNyeXB0IE5JU1QgS0FUICM4CithZXNfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJjYjlmY2VlYzgxMjg2Y2EzZTk4OWJkOTc5YjBjYjI4NCI6IjkyYmVlZGFiMTg5NWE5NGZhYTY5YjYzMmU1Y2M0N2NlIjowCisKK0FFUy0xMjgtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzkKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImIyNmFlYjE4NzRlNDdjYTgzNThmZjIyMzc4ZjA5MTQ0IjoiNDU5MjY0ZjQ3OThmNmE3OGJhY2I4OWMxNWVkM2Q2MDEiOjAKKworQUVTLTEyOC1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwIjoiOTA2ODRhMmFjNTVmZTFlYzJiOGViZDU2MjI1MjBiNzMiOjAKKworQUVTLTEyOC1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMTEKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwIjoiNzQ3MmY5YTc5ODg2MDdjYTc5NzA3Nzk1OTkxMDM1ZTYiOjAKKworQUVTLTEyOC1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMTIKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwIjoiNTZhZmYwODk4NzhiZjMzNTJmOGRmMTcyYTNhZTQ3ZDgiOjAKKworQUVTLTEyOC1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMQorYWVzX2RlY3J5cHRfY2JjOiJmZmZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMjNmNzEwODQyYjliYjljMzJmMjY2NDhjNzg2ODA3Y2EiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTI4LUNCQyBEZWNyeXB0IE5JU1QgS0FUICMyCithZXNfZGVjcnlwdF9jYmM6ImZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0NGE5OGJmMTFlMTYzZjYzMmM0N2VjNmE0OTY4M2E4OSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzMKK2Flc19kZWNyeXB0X2NiYzoiZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjBmMThhZmY5NDI3NDY5NmQ5YjYxODQ4YmQ1MGFjNWU1IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjNAorYWVzX2RlY3J5cHRfY2JjOiJlMjM0Y2RjYTI2MDZiODFmMjk0MDhkNWY2ZGEyMTIwNiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmNjBhNDc0MDA4NmIzYjljNTYxOTViOThkOTFhN2IiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTI4LUNCQyBEZWNyeXB0IE5JU1QgS0FUICM1CithZXNfZGVjcnlwdF9jYmM6IjEzMjM3YzQ5MDc0YTNkYTA3OGRjMWQ4MjhiYjc4YzZmIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4MTQ2YTA4ZTIzNTdmMGNhYTMwY2E4Yzk0ZDFhMDU0NCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzYKK2Flc19kZWNyeXB0X2NiYzoiMzA3MWEyYTQ4ZmU2Y2JkMDRmMWExMjkwOThlMzA4ZjgiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjRiOThlMDZkMzU2ZGViMDdlYmI4MjRlNTcxM2Y3YmUzIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjNworYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDMzNjc2M2U5NjZkOTI1OTVhNTY3Y2M5Y2U1MzdmNWUiOiJmMzQ0ODFlYzNjYzYyN2JhY2Q1ZGMzZmIwOGYyNzNlNiI6MAorCitBRVMtMTI4LUNCQyBEZWNyeXB0IE5JU1QgS0FUICM4CithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhOWExNjMxYmY0OTk2OTU0ZWJjMDkzOTU3YjIzNDU4OSI6Ijk3OThjNDY0MGJhZDc1YzdjMzIyN2RiOTEwMTc0ZTcyIjowCisKK0FFUy0xMjgtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzkKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmNGY4MzkxYTZhNDBjYTViMjVkMjNiZWRkNDRhNTk3IjoiOTZhYjVjMmZmNjEyZDlkZmFhZThjMzFmMzBjNDIxNjgiOjAKKworQUVTLTEyOC1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImY5YjBmZGEwYzRhODk4ZjViOWU2ZjY2MWM0Y2U0ZDA3IjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAiOjAKKworQUVTLTEyOC1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMTEKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhhZGU4OTU5MTM2ODVjNjdjNTI2OWY4YWFlNDI5ODNlIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjgiOjAKKworQUVTLTEyOC1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMTIKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjM5YmRlNjdkNWM4ZWQ4YThiMWMzN2ViOGZhOWY1YWMwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMiOjAKKworQUVTLTE5Mi1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMQorYWVzX2VuY3J5cHRfY2JjOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGRiNTA1ZTZjYzEzODRjYmFlYzFkZjkwYjgwYmViMjAiOjAKKworQUVTLTE5Mi1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMgorYWVzX2VuY3J5cHRfY2JjOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNTY3NGEzYmVkMjdiZjRiZDM2MjJmOWY1ZmUyMDgzMDYiOjAKKworQUVTLTE5Mi1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMworYWVzX2VuY3J5cHRfY2JjOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYjY4N2YyNmE4OWNmYmZiYjhlNWVlYWM1NDA1NTMxNWUiOjAKKworQUVTLTE5Mi1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjNAorYWVzX2VuY3J5cHRfY2JjOiIyNWEzOWRiZmQ4MDM0ZjcxYTgxZjljZWI1NTAyNmU0MDM3ZjhmNmFhMzBhYjQ0Y2UiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMzYwOGMzNDQ4NjhlOTQ1NTVkMjNhMTIwZjhhNTUwMmQiOjAKKworQUVTLTE5Mi1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjNQorYWVzX2VuY3J5cHRfY2JjOiJlMDhjMTU0MTE3NzRlYzRhOTA4YjY0ZWFkYzZhYzQxOTljN2NkNDUzZjNhYWVmNTMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNzdkYTIwMjE5MzViODQwYjdmNWRjYzM5MTMyZGE5ZTUiOjAKKworQUVTLTE5Mi1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjNgorYWVzX2VuY3J5cHRfY2JjOiIzYjM3NWExZmY3ZThkNDQ0MDk2OTZlNjMyNmVjOWRlYzg2MTM4ZTJhZTAxMGI5ODAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiM2I3YzI0ZjgyNWUzYmY5ODczYzlmMTRkMzlhMGU2ZjQiOjAKKworQUVTLTE5Mi1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjNworYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjUxNzE5NzgzZDMxODVhNTM1YmQ3NWFkYzY1MDcxY2UxIjoiNGYzNTQ1OTJmZjdjODg0N2QyZDA4NzBjYTk0ODFiN2MiOjAKKworQUVTLTE5Mi1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjOAorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjI2YWE0OWRjZmU3NjI5YTg5MDFhNjlhOTkxNGU2ZGZkIjoiZDVlMDhiZjlhMTgyZTg1N2NmNDBiM2EzNmVlMjQ4Y2MiOjAKKworQUVTLTE5Mi1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjOQorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijk0MWE0NzczMDU4MjI0ZTFlZjY2ZDEwZTBhNmVlNzgyIjoiMDY3Y2Q5ZDM3NDkyMDc3OTE4NDE1NjI1MDdmYTk2MjYiOjAKKworQUVTLTE5Mi1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAzMGQ3ZTViNjRmMzgwYTdlNGVhNTM4N2I1Y2Q3ZjQ5IjowCisKK0FFUy0xOTItQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzExCithZXNfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwZGM5YTI2MTAwMzcwMDliNjk4ZjExYmI3ZTg2YzgzZSI6MAorCitBRVMtMTkyLUNCQyBFbmNyeXB0IE5JU1QgS0FUICMxMgorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDA0NjYxMmM3NjZkMTg0MGMyMjYzNjRmMWZhN2VkNzIiOjAKKworQUVTLTE5Mi1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMQorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjkwMmQ4OGQxM2VhZTUyMDg5YWJkNjE0M2NmZTM5NGU5IjoiZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMgorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImQ0OWJjZWIzYjgyM2ZlZGQ2MDJjMzA1MzQ1NzM0YmQyIjoiZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMworYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjcwN2IxZGJiMGZmYTQwZWY3ZDk1ZGVmNDIxMjMzZmFlIjoiZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjNAorYWVzX2RlY3J5cHRfY2JjOiJmZmZmZmZmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhkZmQ5OTliZTVkMGNmYTM1NzMyYzBkZGM4OGZmNWE1IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjNQorYWVzX2RlY3J5cHRfY2JjOiJmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAyNjQ3Yzc2YTMwMGMzMTczYjg0MTQ4N2ViMmJhZTlmIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjNgorYWVzX2RlY3J5cHRfY2JjOiJmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjE3MmRmOGIwMmYwNGI1M2FkYWIwMjhiNGUwMWFjZDg3IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjNworYWVzX2RlY3J5cHRfY2JjOiJiM2FkNWNlYTFkZGRjMjE0Y2E5NjlhYzM1ZjM3ZGFlMWE5YTlkMTUyOGY4OWJiMzUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjNjZjVlMWQyMWExNzk1NmQxZGZmYWQ2YTdjNDFjNjU5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjOAorYWVzX2RlY3J5cHRfY2JjOiI0NTg5OTM2N2MzMTMyODQ5NzYzMDczYzQzNWE5Mjg4YTc2NmM4YjllYzIzMDg1MTYiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjY5ZmQxMmU4NTA1ZjhkZWQyZmRjYjE5N2ExMjFiMzYyIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjOQorYWVzX2RlY3J5cHRfY2JjOiJlYzI1MGUwNGMzOTAzZjYwMjY0N2I4NWE0MDFhMWFlN2NhMmYwMmY2N2ZhNDI1M2UiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhhYTU4NGUyY2M0ZDE3NDE3YTk3Y2I5YTI4YmEyOWM4IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJjOWI4MTM1ZmYxYjVhZGM0MTNkZmQwNTNiMjFiZDk2ZCI6IjljMmQ4ODQyZTVmNDhmNTc2NDgyMDVkMzlhMjM5YWYxIjowCisKK0FFUy0xOTItQ0JDIERlY3J5cHQgTklTVCBLQVQgIzExCithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNGEzNjUwYzMzNzFjZTJlYjM1ZTM4OWExNzE0Mjc0NDAiOiJiZmY1MjUxMDA5NWY1MThlY2NhNjBhZjQyMDU0NDRiYiI6MAorCitBRVMtMTkyLUNCQyBEZWNyeXB0IE5JU1QgS0FUICMxMgorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjRmMzU0NTkyZmY3Yzg4NDdkMmQwODcwY2E5NDgxYjdjIjoiNTE3MTk3ODNkMzE4NWE1MzViZDc1YWRjNjUwNzFjZTEiOjAKKworQUVTLTI1Ni1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMQorYWVzX2VuY3J5cHRfY2JjOiI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImUzNWE2ZGNiMTliMjAxYTAxZWJjZmE4YWEyMmI1NzU5IjowCisKK0FFUy0yNTYtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzIKK2Flc19lbmNyeXB0X2NiYzoiYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiMjkxNjljZGNmMmQ4M2U4MzgxMjVhMTJlZTZhYTQwMCI6MAorCitBRVMtMjU2LUNCQyBFbmNyeXB0IE5JU1QgS0FUICMzCithZXNfZW5jcnlwdF9jYmM6ImUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZDhmM2E3MmZjM2NkZjc0ZGZhZjZjM2U2Yjk3YjJmYTYiOjAKKworQUVTLTI1Ni1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjNAorYWVzX2VuY3J5cHRfY2JjOiJkYzBlYmExZjIyMzJhNzg3OWRlZDM0ZWQ4NDI4ZWViODc2OWIwNTZiYmFmOGFkNzdjYjY1YzM1NDE0MzBiNGNmIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZjNmFlYzkwNjMyMzQ4MDAwNWM1OGU3ZTFhYjAwNGFkIjowCisKK0FFUy0yNTYtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzUKK2Flc19lbmNyeXB0X2NiYzoiZjhiZTliYTYxNWM1YTk1MmNhYmJjYTI0ZjY4Zjg1OTMwMzk2MjRkNTI0YzgxNmFjZGEyYzkxODNiZDkxN2NiOSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhMzk0NGI5NWNhMGI1MjA0MzU4NGVmMDIxNTE5MjZhOCI6MAorCitBRVMtMjU2LUNCQyBFbmNyeXB0IE5JU1QgS0FUICM2CithZXNfZW5jcnlwdF9jYmM6Ijc5N2Y4YjNkMTc2ZGFjNWI3ZTM0YTJkNTM5YzRlZjM2N2ExNmY4NjM1ZjYyNjQ3Mzc1OTFjNWMwN2JmNTdhM2UiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYTc0Mjg5ZmU3M2E0YzEyM2NhMTg5ZWExZTFiNDlhZDUiOjAKKworQUVTLTI1Ni1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjNworYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3NjFjMWZlNDFhMThhY2YyMGQyNDE2NTA2MTFkOTBmMSI6IjYyM2E1MmZjZWE1ZDQ0M2U0OGQ5MTgxYWIzMmM3NDIxIjowCisKK0FFUy0yNTYtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzgKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGE1NjA3NjlkNjA1ODY4YWQ4MGQ4MTliZGJhMDM3NzEiOiIzOGYyYzdhZTEwNjEyNDE1ZDI3Y2ExOTBkMjdkYThiNCI6MAorCitBRVMtMjU2LUNCQyBFbmNyeXB0IE5JU1QgS0FUICM5CithZXNfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjkxZmJlZjJkMTVhOTc4MTYwNjBiZWUxZmVhYTQ5YWZlIjoiMWJjNzA0ZjFiY2UxMzVjZWI4MTAzNDFiMjE2ZDdhYmUiOjAKKworQUVTLTI1Ni1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAiOiIwZDlhYzc1NmViMjk3Njk1ZWVkNGQzODJlYjEyNmQyNiI6MAorCitBRVMtMjU2LUNCQyBFbmNyeXB0IE5JU1QgS0FUICMxMQorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMCI6IjU2ZWRlOWRkYTNmNmYxNDFiZmYxNzU3ZmE2ODljM2UxIjowCisKK0FFUy0yNTYtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzEyCithZXNfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwIjoiNzY4ZjUyMGVmZTBmMjNlNjFkM2VjOGFkOWNlOTE3NzQiOjAKKworQUVTLTI1Ni1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMQorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0OWFmNmIzNzIxMzVhY2VmMTAxMzJlNTQ4ZjIxN2IxNyI6ImZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzIKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGJjZDQwZjk0ZWJiNjNiOWY3OTA5Njc2ZTY2N2YxZTciOiJmZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUNCQyBEZWNyeXB0IE5JU1QgS0FUICMzCithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZlMWNmZmI4M2Y0NWRjZmIzOGIyOWJlNDM4ZGJkM2FiIjoiZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjNAorYWVzX2RlY3J5cHRfY2JjOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJjY2E3YzMwODZmNWY5NTExYjMxMjMzZGE3Y2FiOTE2MCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzUKK2Flc19kZWNyeXB0X2NiYzoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNWI0MGZmNGVjOWJlNTM2YmEyMzAzNWZhNGYwNjA2NGMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUNCQyBEZWNyeXB0IE5JU1QgS0FUICM2CithZXNfZGVjcnlwdF9jYmM6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjYwZWI1YWY4NDE2YjI1NzE0OTM3MjE5NGU4Yjg4NzQ5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjNworYWVzX2RlY3J5cHRfY2JjOiI5MDE0M2FlMjBjZDc4YzVkOGViZGQ2Y2I5ZGMxNzYyNDI3YTk2Yzc4YzYzOWJjY2M0MWE2MTQyNDU2NGVhZmUxIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3OThjN2MwMDVkZWU0MzJiMmM4ZWE1ZGZhMzgxZWNjMyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzgKK2Flc19kZWNyeXB0X2NiYzoiYjdhNTc5NGQ1MjczNzQ3NWQ1M2Q1YTM3NzIwMDg0OWJlMDI2MGE2N2EyYjIyY2VkOGJiZWYxMjg4MjI3MGQwNyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNjM3YzMxZGMyNTkxYTA3NjM2ZjY0NmI3MmRhYWJiZTciOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUNCQyBEZWNyeXB0IE5JU1QgS0FUICM5CithZXNfZGVjcnlwdF9jYmM6ImZjYTAyZjNkNTAxMWNmYzVjMWUyMzE2NWQ0MTNhMDQ5ZDQ1MjZhOTkxODI3NDI0ZDg5NmZlMzQzNWUwYmY2OGUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjE3OWE0OWM3MTIxNTRiYmZmYmU2ZTdhODRhMThlMjIwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNWM5ZDg0NGVkNDZmOTg4NTA4NWU1ZDZhNGY5NGM3ZDciOiIwMTQ3MzBmODBhYzYyNWZlODRmMDI2YzYwYmZkNTQ3ZCI6MAorCitBRVMtMjU2LUNCQyBEZWNyeXB0IE5JU1QgS0FUICMxMQorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhOWZmNzViZDdjZjY2MTNkMzczMWM3N2MzYjZkMGMwNCI6IjBiMjRhZjM2MTkzY2U0NjY1ZjI4MjVkN2I0NzQ5Yzk4IjowCisKK0FFUy0yNTYtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzEyCithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjYyM2E1MmZjZWE1ZDQ0M2U0OGQ5MTgxYWIzMmM3NDIxIjoiNzYxYzFmZTQxYTE4YWNmMjBkMjQxNjUwNjExZDkwZjEiOjAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuY2ZiLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmNmYi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNDk1M2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmNmYi5kYXRhCkBAIC0wLDAgKzEsNDY3IEBACitBRVMtMTI4LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6ImYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijk3MDAxNGQ2MzRlMmI3NjUwNzc3ZThlODRkMDNjY2Q4IgorCitBRVMtMTI4LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6ImY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImYxN2U3OWFlZDBkYjdlMjc5ZTk1NWI1ZjQ5Mzg3NWE3IgorCitBRVMtMTI4LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6ImZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjllZDVhNzUxMzZhOTQwZDA5NjNkYTM3OWRiNGFmMjZhIgorCitBRVMtMTI4LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjY0Y2Y5YzdhYmM1MGI4ODhhZjY1ZjQ5ZDUyMTk0NGIyIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImY3ZWZjODlkNWRiYTU3ODEwNDAxNmNlNWFkNjU5YzA1IgorCitBRVMtMTI4LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM1CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjQ3ZDY3NDJlZWZjYzA0NjVkYzk2MzU1ZTg1MWI2NGQ5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAzMDYxOTRmNjY2ZDE4MzYyNGFhMjMwYThiMjY0YWU3IgorCitBRVMtMTI4LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM2CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjNlYjM5NzkwNjc4YzU2YmVlMzRiYmNkZWNjZjZjZGI1IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijg1ODA3NWQ1MzZkNzljY2VlNTcxZjdkNzIwNGIxZjY3IgorCitBRVMtMTI4LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM3CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNmExMThhODc0NTE5ZTY0ZTk5NjM3OThhNTAzZjFkMzUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImRjNDNiZTQwYmUwZTUzNzEyZjdlMmJmNWNhNzA3MjA5IgorCitBRVMtMTI4LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM4CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiY2I5ZmNlZWM4MTI4NmNhM2U5ODliZDk3OWIwY2IyODQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjkyYmVlZGFiMTg5NWE5NGZhYTY5YjYzMmU1Y2M0N2NlIgorCitBRVMtMTI4LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM5CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYjI2YWViMTg3NGU0N2NhODM1OGZmMjIzNzhmMDkxNDQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQ1OTI2NGY0Nzk4ZjZhNzhiYWNiODljMTVlZDNkNjAxIgorCitBRVMtMTI4LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMxMAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmOWIwZmRhMGM0YTg5OGY1YjllNmY2NjFjNGNlNGQwNyIKKworQUVTLTEyOC1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGFkZTg5NTkxMzY4NWM2N2M1MjY5ZjhhYWU0Mjk4M2UiCisKK0FFUy0xMjgtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjM5YmRlNjdkNWM4ZWQ4YThiMWMzN2ViOGZhOWY1YWMwIgorCitBRVMtMTI4LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6ImZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIxMTE0YmMyMDI4MDA5YjkyM2YwYjAxOTE1Y2U1ZTdjNCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTI4LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6ImZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5YzI4NTI0YTE2YTFlMWMxNDUyOTcxY2FhOGQxMzQ3NiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTI4LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6ImZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJlZDYyZTE2MzYzNjM4MzYwZmRkNmFkNjIxMTI3OTRmMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTI4LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjMwNzFhMmE0OGZlNmNiZDA0ZjFhMTI5MDk4ZTMwOGY4IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0Yjk4ZTA2ZDM1NmRlYjA3ZWJiODI0ZTU3MTNmN2JlMyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTI4LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM1CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjkwZjQyZWMwZjY4Mzg1ZjJmZmM1ZGZjMDNhNjU0ZGNlIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3YTIwYTUzZDQ2MGZjOWNlMDQyM2E3YTA3NjRjNmNmMiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTI4LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM2CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6ImZlYmQ5YTI0ZDhiNjVjMWM3ODdkNTBhNGVkMzYxOWE5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmNGE3MGQ4YWY4NzdmOWIwMmI0YzQwZGY1N2Q0NWIxNyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTI4LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM3CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZjM0NDgxZWMzY2M2MjdiYWNkNWRjM2ZiMDhmMjczZTYiOiIwMzM2NzYzZTk2NmQ5MjU5NWE1NjdjYzljZTUzN2Y1ZSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTI4LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM4CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTc5OGM0NjQwYmFkNzVjN2MzMjI3ZGI5MTAxNzRlNzIiOiJhOWExNjMxYmY0OTk2OTU0ZWJjMDkzOTU3YjIzNDU4OSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTI4LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM5CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTZhYjVjMmZmNjEyZDlkZmFhZThjMzFmMzBjNDIxNjgiOiJmZjRmODM5MWE2YTQwY2E1YjI1ZDIzYmVkZDQ0YTU5NyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTI4LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMxMAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAwIjoiZjgwN2MzZTc5ODVmZTBmNWE1MGUyY2RiMjVjNTEwOWUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTEyOC1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMCI6IjQxZjk5MmE4NTZmYjI3OGIzODlhNjJmNWQyNzRkN2U5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xMjgtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAiOiIxMGQzZWQ3YTZmZTE1YWI0ZDkxYWNiYzdkMDc2N2FiMSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTkyLUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6ImZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4ZGZkOTk5YmU1ZDBjZmEzNTczMmMwZGRjODhmZjVhNSIKKworQUVTLTE5Mi1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiJmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDI2NDdjNzZhMzAwYzMxNzNiODQxNDg3ZWIyYmFlOWYiCisKK0FFUy0xOTItQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjE3MmRmOGIwMmYwNGI1M2FkYWIwMjhiNGUwMWFjZDg3IgorCitBRVMtMTkyLUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6ImQxODRjMzZjZjBkZGRmZWMzOWU2NTQxOTUwMDYwMjIyMzc4NzFhNDdjMzNkMzE5OCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIyZTE5ZmI2MGEzZTFkZTAxNjZmNDgzYzk3ODI0YTk3OCIKKworQUVTLTE5Mi1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjNQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiI0YzY5OTRmZmE5ZGNkYzgwNWI2MGMyYzAwOTUzMzRjNDJkOTVhOGZjMGNhNWIwODAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNzY1NjcwOTUzOGRkNWZlYzQxZTBjZTZhMGY4ZTIwN2QiCisKK0FFUy0xOTItQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzYKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiYzg4ZjViMDBhNGVmOWE2ODQwZTJhY2FmMzNmMDBhM2JkYzRlMjU4OTUzMDNmYTcyIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImE2N2NmMzMzYjMxNGQ0MTFkM2MwYWU2ZTFjZmNkOGY1IgorCitBRVMtMTkyLUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM3CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjljMmQ4ODQyZTVmNDhmNTc2NDgyMDVkMzlhMjM5YWYxIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJjOWI4MTM1ZmYxYjVhZGM0MTNkZmQwNTNiMjFiZDk2ZCIKKworQUVTLTE5Mi1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjOAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiZmY1MjUxMDA5NWY1MThlY2NhNjBhZjQyMDU0NDRiYiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNGEzNjUwYzMzNzFjZTJlYjM1ZTM4OWExNzE0Mjc0NDAiCisKK0FFUy0xOTItQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNTE3MTk3ODNkMzE4NWE1MzViZDc1YWRjNjUwNzFjZTEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjRmMzU0NTkyZmY3Yzg4NDdkMmQwODcwY2E5NDgxYjdjIgorCitBRVMtMTkyLUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMxMAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZjM0ZTRhNjMyNGVhNGE1YzM5YTY2MWM4ZmU1YWRhOGYiCisKK0FFUy0xOTItQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzExCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwODgyYTE2ZjQ0MDg4ZDQyNDQ3YTI5YWMwOTBlYzE3ZSIKKworQUVTLTE5Mi1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjNhM2MxNWJmYzExYTk1MzdjMTMwNjg3MDA0ZTEzNmVlIgorCitBRVMtMTkyLUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNjAxMzY3MDMzNzRmNjRlODYwYjQ4Y2UzMWY5MzA3MTYiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTE5Mi1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhkNjNhMjY5YjE0ZDUwNmNjYzQwMWFiOGE5ZjFiNTkxIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xOTItQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjgwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkMzE3ZjgxZGM2YWE0NTRhZWU0YmQ0YTVhNWNmZjRiZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTkyLUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6Ijk4YzZiOGUwMWUzNzlmYmQxNGU2MWFmNmFmODkxNTk2NTgzNTY1ZjJhMjdkNTllOSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMTljODBlYzRhNmRlYjdlNWVkMTAzM2RkYTkzMzQ5OGYiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTE5Mi1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjNQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiJiM2FkNWNlYTFkZGRjMjE0Y2E5NjlhYzM1ZjM3ZGFlMWE5YTlkMTUyOGY4OWJiMzUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjNjZjVlMWQyMWExNzk1NmQxZGZmYWQ2YTdjNDFjNjU5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xOTItQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzYKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiNDU4OTkzNjdjMzEzMjg0OTc2MzA3M2M0MzVhOTI4OGE3NjZjOGI5ZWMyMzA4NTE2IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2OWZkMTJlODUwNWY4ZGVkMmZkY2IxOTdhMTIxYjM2MiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTkyLUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM3CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjFiMDc3YTZhZjRiN2Y5ODIyOWRlNzg2ZDc1MTZiNjM5IjoiMjc1Y2ZjMDQxM2Q4Y2NiNzA1MTNjMzg1OWIxZDBmNzIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTE5Mi1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjOAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5YzJkODg0MmU1ZjQ4ZjU3NjQ4MjA1ZDM5YTIzOWFmMSI6ImM5YjgxMzVmZjFiNWFkYzQxM2RmZDA1M2IyMWJkOTZkIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xOTItQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYmZmNTI1MTAwOTVmNTE4ZWNjYTYwYWY0MjA1NDQ0YmIiOiI0YTM2NTBjMzM3MWNlMmViMzVlMzg5YTE3MTQyNzQ0MCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTkyLUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMxMAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMCI6IjU0ZDYzMmQwM2FiYTBiZDBmOTE4NzdlYmRkNGQwOWNiIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xOTItQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzExCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwIjoiZDM0MjdiZTdlNGQyN2NkNTRmNWZlMzdiMDNjZjA4OTciOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTE5Mi1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAiOiJiMjA5OTc5NWU4OGNjMTU4ZmQ3NWVhMTMzZDdlN2ZiZSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMjU2LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6ImZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYmJkMTA5N2E2MjQzM2Y3OTQ0OWZhOTdkNGVlODBkYmYiCisKK0FFUy0yNTYtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwNzA1OGU0MDhmNWI5OWIwZTBmMDYxYTE3NjFiNWIzYiIKKworQUVTLTI1Ni1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiJmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjVmZDFmMTNmYTBmMzFlMzdmYWJkZTMyOGY4OTRlYWMyIgorCitBRVMtMjU2LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjEzNDI4YjVlNGMwMDVlMDYzNmRkMzM4NDA1ZDE3M2FiMTM1ZGVjMmEyNWMyMmM1ZGYwNzIyZDY5ZGNjNDM4ODciOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNjQ5YTcxNTQ1Mzc4Yzc4M2UzNjhjOWFkZTcxMTRmNmMiCisKK0FFUy0yNTYtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzUKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDdlYjAzYTA4ZDI5MWQxYjA3NDA4YmYzNTEyYWI0MGM5MTA5N2FjNzc0NjFhYWQ0YmI4NTk2NDdmNzRmMDBlZSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0N2NiMDMwZGEyYWIwNTFkZmM2YzRiZjY5MTBkMTJiYiIKKworQUVTLTI1Ni1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjNgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiI5MDE0M2FlMjBjZDc4YzVkOGViZGQ2Y2I5ZGMxNzYyNDI3YTk2Yzc4YzYzOWJjY2M0MWE2MTQyNDU2NGVhZmUxIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijc5OGM3YzAwNWRlZTQzMmIyYzhlYTVkZmEzODFlY2MzIgorCitBRVMtMjU2LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM3CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwYjI0YWYzNjE5M2NlNDY2NWYyODI1ZDdiNDc0OWM5OCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYTlmZjc1YmQ3Y2Y2NjEzZDM3MzFjNzdjM2I2ZDBjMDQiCisKK0FFUy0yNTYtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzgKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijc2MWMxZmU0MWExOGFjZjIwZDI0MTY1MDYxMWQ5MGYxIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2MjNhNTJmY2VhNWQ0NDNlNDhkOTE4MWFiMzJjNzQyMSIKKworQUVTLTI1Ni1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjOQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGE1NjA3NjlkNjA1ODY4YWQ4MGQ4MTliZGJhMDM3NzEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjM4ZjJjN2FlMTA2MTI0MTVkMjdjYTE5MGQyN2RhOGI0IgorCitBRVMtMjU2LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMxMAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjJiZTFmYWU1MDQ4YTI1NTgyYTY3OWNhMTA5MDVlYjgwIgorCitBRVMtMjU2LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImRhODZmMjkyYzZmNDFlYTM0ZmIyMDY4ZGY3NWVjYzI5IgorCitBRVMtMjU2LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMxMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjgwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjIyMGRmMTlmODVkNjliMWI1NjJmYTY5YTNjNWJlY2E1IgorCitBRVMtMjU2LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6ImZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImJlNjZjZmVhMmZlY2Q2YmYwZWM3YjQzNTJjOTliY2FhIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0yNTYtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGYzMTE0NGY4N2EyZWY1MjNmYWNkY2YyMWE0Mjc4MDQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTI1Ni1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiJmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiNWJiMGY1NjI5ZmI2YWFlNWUxODM5YTNjMzYyNWQ2MyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMjU2LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjFkODVhMTgxYjU0Y2RlNTFmMGUwOTgwOTViMjk2MmZkYzkzYjUxZmU5Yjg4NjAyYjNmNTQxMzBiZjc2YTViZDkiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjUzMWMyYzM4MzQ0NTc4Yjg0ZDUwYjNjOTE3YmJiNmUxIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0yNTYtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzUKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiZGMwZWJhMWYyMjMyYTc4NzlkZWQzNGVkODQyOGVlYjg3NjliMDU2YmJhZjhhZDc3Y2I2NWMzNTQxNDMwYjRjZiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmM2YWVjOTA2MzIzNDgwMDA1YzU4ZTdlMWFiMDA0YWQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTI1Ni1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjNgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiJmOGJlOWJhNjE1YzVhOTUyY2FiYmNhMjRmNjhmODU5MzAzOTYyNGQ1MjRjODE2YWNkYTJjOTE4M2JkOTE3Y2I5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhMzk0NGI5NWNhMGI1MjA0MzU4NGVmMDIxNTE5MjZhOCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMjU2LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM3CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3NjFjMWZlNDFhMThhY2YyMGQyNDE2NTA2MTFkOTBmMSI6IjYyM2E1MmZjZWE1ZDQ0M2U0OGQ5MTgxYWIzMmM3NDIxIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0yNTYtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzgKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhhNTYwNzY5ZDYwNTg2OGFkODBkODE5YmRiYTAzNzcxIjoiMzhmMmM3YWUxMDYxMjQxNWQyN2NhMTkwZDI3ZGE4YjQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTI1Ni1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjOQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTFmYmVmMmQxNWE5NzgxNjA2MGJlZTFmZWFhNDlhZmUiOiIxYmM3MDRmMWJjZTEzNWNlYjgxMDM0MWIyMTZkN2FiZSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMjU2LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMxMAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5YjgwZWVmYjdlYmUyZDJiMTYyNDdhYTBlZmM3MmY1ZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMjU2LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3ZjJjNWVjZTA3YTk4ZDhiZWUxM2M1MTE3NzM5NWZmNyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMjU2LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMxMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3ODE4ZDgwMGRjZjZmNGJlMWUwZTk0ZjQwM2QxZTRjMiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTI4LUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjMAorYWVzX2VuY3J5cHRfY2ZiODoiYzU3ZDY5OWQ4OWRmN2NmYmVmNzFjMDgwYTZiMTBhYzMiOiJmY2IyYmM0YzAwNmI4NzQ4Mzk3ODc5NmEyYWUyYzQyZSI6IjYxIjoiMjQiCisKK0FFUy0xMjgtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICMxCithZXNfZW5jcnlwdF9jZmI4OiIwZDhmM2RjM2VkZWU2MGRiNjU4YmI5N2ZhZjQ2ZmJhMyI6ImU0ODFmZGM0MmU2MDZiOTZhMzgzYzBhMWE1NTIwZWJiIjoiYWFjZCI6IjUwNjYiCisKK0FFUy0xMjgtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICMyCithZXNfZW5jcnlwdF9jZmI4OiJjOGZlOWJmNzdiOTMwZjQ2ZDIwNzhiOGMwZTY1N2NkNCI6ImY0NzVjNjQ5OTFiMjBlYWVlMTgzYTIyNjI5ZTIxZTIyIjoiYzkwNjM1IjoiZDI3NjkxIgorCitBRVMtMTI4LUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjMworYWVzX2VuY3J5cHRfY2ZiODoiMjgwY2Y4MWFmNWNjN2U3MzYzNTc5YzFkYTAzMzkwZTYiOiI1ZDZjZjQ3MjJkMGUyMWYxZDljZWQ1M2EwZTM2YzM0MiI6ImIyYTIyY2VkIjoiNzNmM2FlYmYiCisKK0FFUy0xMjgtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICM0CithZXNfZW5jcnlwdF9jZmI4OiI1ZDVlN2YyMGUwYTY2ZDNlMDllMGU1YTk5MTJmOGE0NiI6IjA1MmQ3ZWEwYWQxZjI5NTZhMjNiMjdhZmUxZDg3YjZiIjoiYjg0YTkwZmM2ZCI6IjFhOWE2MWMzMDciCisKK0FFUy0xMjgtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICM1CithZXNfZW5jcnlwdF9jZmI4OiJlYzg5ZmIzNDg3ODdjZjkwMmNhOTczYzQ3MDgxNDM4ZCI6IjUyOGZlOTVjNzExYmQxM2YzN2JjNTJjYzllOTZkNDVjIjoiMTQyNTM0NzJlOTlkIjoiY2ZjMjQ3ZTMzYTNiIgorCitBRVMtMTI4LUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjNgorYWVzX2VuY3J5cHRfY2ZiODoiNjYwNzk4N2MzNTQ4MDljYmE4MTg2MzlkY2QxODUxNDciOiI1NTJjMTAxYTBiN2MwY2ExNDNhZjI1ODQ1MzkzN2ZhMyI6IjliMWE1YTEzNjkxNjZlIjoiYjdhYjJhNGNjNzE5MDQiCisKK0FFUy0xMjgtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICM3CithZXNfZW5jcnlwdF9jZmI4OiJjMDI4ZTZiZjJiNzQ5ZmZhODY3NTlmMmY4NGU5M2NiMCI6IjI4OGM3NTJkOWZhY2NmMzY3ZTVkMGNjYTFmYTZlYzNiIjoiMzI0MDE1ODc4Y2RjODJiZiI6Ijg3MzI1MDE1MmZjNmE1YmIiCisKK0FFUy0xMjgtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICM4CithZXNfZW5jcnlwdF9jZmI4OiJkMDFkYTk1ZDJjMmE2MWRhMDZlYTc4Y2ZiYTU5Y2MzMCI6ImY5YTM5M2FkOTA4MTRmYWYyNjJlM2E1YjFkOTc1OTJlIjoiNTdjMWEzMGU0ODE2NmQ5NjQwIjoiZTlhOGMzYjc3NmVkZDM5ZTNkIgorCitBRVMtMTI4LUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjOQorYWVzX2VuY3J5cHRfY2ZiODoiM2E2ZjkxNTkyNjNmYTZjZWYyYTA3NWNhZmFjZTU4MTciOiIwZmMyMzY2MmI3ZGJmNzM4MjdmMGM3ZGUzMjFjYTM2ZSI6Ijg3ZWZlYjhkNTU5ZWQzMzY3NzI4IjoiOGU5YzUwNDI1NjE0ZDU0MGNlMTEiCisKK0FFUy0xMjgtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICMwCithZXNfZGVjcnlwdF9jZmI4OiIwM2VkZmUwODI1NTBiZDVhYzhkZGY2NGY0MmEwNTQ3ZiI6IjUyYWNkOGRhYjYyYzk4MWRhMDhlNTE5MzljYzA4ZGFiIjoiMjEiOiIwOSIKKworQUVTLTEyOC1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzEKK2Flc19kZWNyeXB0X2NmYjg6IjM4Y2Y3NzY3NTAxNjJlZGM2M2MzYjVkYmUzMTFhYjlmIjoiOThmYmJkMjg4ODcyYzQwZjE5MjZiMTZlY2FlYzE1NjEiOiI0ODc4IjoiZWIyNCIKKworQUVTLTEyOC1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzIKK2Flc19kZWNyeXB0X2NmYjg6ImM5MDUzYzg3YzNlNTZiYzVlNTJiZDMxZjY1NDVmOTkxIjoiYjhmOTY0MGQwOTIzZGExM2ZlNmViODdiMDFmMGNmYTAiOiJhZWI2ZDIiOiI5MTA5NDkiCisKK0FFUy0xMjgtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICMzCithZXNfZGVjcnlwdF9jZmI4OiJlOTY3NzFmNWYyMGE4OWVlODcxMjYxZDJkMThlMWU0NiI6IjZlODY0MDNlMzMzOTY2NTU5MDdhZTA2ZWYxOTIyNjJmIjoiODNjYWIyZjMiOiIzYjdmMWYxYyIKKworQUVTLTEyOC1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzQKK2Flc19kZWNyeXB0X2NmYjg6IjkyYWQxM2VjYjYwYmRlMWJiM2IzNGNlMDc4Njc2NzJiIjoiZjk1YTQwNjBiOGY4MGUzZjgzOWQ0YzNjYTMzZGFkOTQiOiI0OWY3M2U2NTJiIjoiMTdiOWI5ZTE2ZCIKKworQUVTLTEyOC1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzUKK2Flc19kZWNyeXB0X2NmYjg6ImViNTdiOGRkMDc2ZTdiYmIzM2Q0YmZjNGQ3ZWNiMjdlIjoiNTExMzU5OTdhMDY3ZGNkMmUwMTZjNTcxMzRjNWZhNTIiOiJiMGVhY2JmMmNhNDYiOiJjYTk4OWZhNGU4MTgiCisKK0FFUy0xMjgtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICM2CithZXNfZGVjcnlwdF9jZmI4OiI3MGFiYzQ4YmIxYmU0OTAxODNmMGZlM2RmNTYxOTVmZiI6ImUyNTFmMTc5MTc0YjcxZWUxZTQ4OGFiM2RkMjAwNDgzIjoiMDhmYmVmOWIyYTM2OWEiOiI1NDA1ZGExMTg2YjdlMCIKKworQUVTLTEyOC1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzcKK2Flc19kZWNyeXB0X2NmYjg6IjEyNzNiOGUwZWVlMWExY2E4MjcwNTliNGQwYTNhNTVkIjoiNjIyY2FiNDkwOTJkMDI2ZjU1NGRkOThhNjQ0MWRjMjYiOiJiM2NiOWQ4ODkyNDIzYWViIjoiZDQ5N2RmNzNhZmI5Nzg3YyIKKworQUVTLTEyOC1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzgKK2Flc19kZWNyeXB0X2NmYjg6IjQ5NDM3ZTA2YjZmYWE1ZjIwZmQ5OGJmNzFmOGZmNTU0IjoiNjNjODE4ZTBkM2NiNWI3MDU0ZWYzZTFlODdkZjBlMTIiOiIwMTk5MmE5ODYyNzljMzY4NWUiOiJmMjAzYmNkNDAyYjY1OTE5ZGEiCisKK0FFUy0xMjgtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICM5CithZXNfZGVjcnlwdF9jZmI4OiI2Mzk5YzFkYzA2OGJhMzUwOTg0NTYyOGZhOWVkMWE5NiI6IjExNTdjMjc2NmM4NmI3NTRkZjQ4NWJlOWRkNTg1MWRmIjoiYzljMjg0ZTlhYmJmZTZmYjExZmUiOiJmZWZmNGUyZTI0NThhZGRmMmE1NCIKKworQUVTLTE5Mi1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzAKK2Flc19lbmNyeXB0X2NmYjg6IjMyYTFiMGUzZGEzNjhkYjU2M2Q3MzE2Yjk3NzlkMzMyN2U1M2Q5YTZkMjg3ZWQ5NyI6IjNkZDBlN2UyMWYwOWQ1ODQyZjNhNjk5ZGE5YjU3MzQ2IjoiNTQiOiI2ZCIKKworQUVTLTE5Mi1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzEKK2Flc19lbmNyeXB0X2NmYjg6ImE2MzgxZGNjMThkZDg1ZDc3MjljMWRjZTkwNzQzYmJlMWRmNTgwZDg1N2Y1YjljNCI6ImMwYWM1MDFmYWQ3ZjRhMTQ2NWRhZjMyZTE4ZmMxYTRmIjoiYTQ1NiI6IjhmYjYiCisKK0FFUy0xOTItQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICMyCithZXNfZW5jcnlwdF9jZmI4OiJkMDhkYmVlNDczMmM3ZmZjNTQ0YzE2OTViMjAxZDMwZTc5NTAzNzMyNWVmMGFhMTgiOiJhMWUzOWFlZWI5NzJhOGQ3MGFhMGZjN2Q2ZmFjNmVhYyI6ImZkMTE1ZCI6ImM0YzAxNiIKKworQUVTLTE5Mi1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzMKK2Flc19lbmNyeXB0X2NmYjg6IjI3NzE4NWE0YTQ0MDg2OTkyMGY1MjNjNGQ1NzhmYzViZWRkMzNhZWU4ZDJlYmFmNyI6IjY3YmUwMDU3MmY4MmFhYmMxM2Q2ZTVhMmU1MWQxZjA4IjoiODhlMDcwNjEiOiI4YmI2MzBiYSIKKworQUVTLTE5Mi1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzQKK2Flc19lbmNyeXB0X2NmYjg6IjgzZjcwZmRjZTQ3MzA2ZmNiYjhjMjFiNmE4YjMyMDlmN2VjMTg1ZmVmNGRlZWJkNCI6ImZmNzNiMzEwY2Y3ZTYyY2U2ZjUwMTA5MmZhNmNjODg4IjoiMzY2NjRlMjIyZCI6IjIwODU1NTU1ZDEiCisKK0FFUy0xOTItQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICM1CithZXNfZW5jcnlwdF9jZmI4OiJjNWJlMjcxYTI5ZjRhMjllMDg1ZThlOTgxOTY2MDFkY2I4OGNjYzAzZTU1OWEzMDQiOiI5ZjUxZmEyZWI4YTA4NDcxOGY3MjQwZTQ3ZDEzNWRjZSI6ImI1N2YxMjM0MmE2MiI6IjczZmY5YmYzZWM0YiIKKworQUVTLTE5Mi1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzYKK2Flc19lbmNyeXB0X2NmYjg6IjljNTUzMjJlNmQ0OTViZTAxMDc2ZDRiODAzNzFhZDE0NzlhZTU2MzZmZjk4NjFmNSI6IjJiNzljZmMxZmYzNzI1NGRlZGY1OTI0YTZiNjFlM2UwIjoiNmRjZWRlNDNjMmVlNjUiOiI3Yzg5NzY1ODI4MjIyMCIKKworQUVTLTE5Mi1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzcKK2Flc19lbmNyeXB0X2NmYjg6IjZlNzhjY2VjZTdkMWIyYTNjMDhjZjBkZTczOGJlZTMzY2JiYmY3OGQ5YmY0OTIyYyI6IjRiYmUxNWIxZTk0YTdiOTcyNTBhMjEzNmQ4ODA0ZTQ2IjoiY2VkYTQyNTI3ODcxZjgwMiI6ImQ5MmZmODkwNDViMTkxN2YiCisKK0FFUy0xOTItQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICM4CithZXNfZW5jcnlwdF9jZmI4OiIxM2M5ODY2NTc0NmY3ODI1YjM3YjQwNDkxNjI0MGFkYmQxZTQzNjRiZTFkMDVjNjMiOiIwZTQ3OWZiZDVmMzk2MWYzOGI4YTI2YmUxZjJkNjVjNSI6IjFiMGE2M2Q3MzQ2NGFiM2M4YSI6IjU0ODU4NDdlNWQzYzJlMmNjNCIKKworQUVTLTE5Mi1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzkKK2Flc19lbmNyeXB0X2NmYjg6IjUzN2U3YmY2NjFmZDQwMjRhMDI0NjEzZjE1YjEzNjkwZjdkMGM4NDdjMWUxODk2NSI6IjNhODFmOWQ5ZDNjMTU1YjBjYWFkNWQ3MzM0OTQ3NmZjIjoiZDNkOGI5Yjk4NGFkYzI0MjM3ZWUiOiIzODc5ZmVhNzJhYzk5OTI5ZTUzYSIKKworQUVTLTE5Mi1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzAKK2Flc19kZWNyeXB0X2NmYjg6IjdkYmRjMTVhZDQwMzRlZDgyOGRjODYyNzk5YjdhZGM5YWJkNjhlYWY5ZDUyNmQ1ZCI6IjQzNTk2ODNhZjVhM2E4NWMyNDhmYjdmNTUwNmYzMTdiIjoiMjUiOiIyZCIKKworQUVTLTE5Mi1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzEKK2Flc19kZWNyeXB0X2NmYjg6IjNhMmNkZjljOTYwOGMxZGQ2MjMzZDAzZGQ4NTUyOTNiMDg4NTkxNTExNGIyNTI3OSI6ImU3YTI4ZWUzNGFjYzUyMTI4ZGRhZTY1OGVjNjM5OGEyIjoiMDY3OCI6IjdiMDQiCisKK0FFUy0xOTItQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICMyCithZXNfZGVjcnlwdF9jZmI4OiJjOTg0Yjk5YTZjYzViYzg4MDAzMTQzY2JlNGI3NTVlNmUzMGJhOTQxMTRmN2FkMWUiOiI0MWUzYjhmZDEzOGY4YzM1OGRmZWVmNDIwMzAyZjYzNCI6IjAzN2NmNiI6IjY1OGQwYSIKKworQUVTLTE5Mi1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzMKK2Flc19kZWNyeXB0X2NmYjg6IjM5NzQ3ZGEyMjViZGMwYzUzYzM0NjNmZDY4NmRiZTE5ZDE0MTU3NTM1MTcxZjkxZCI6Ijc3ZDNhNWFkOGJiZGIxNjlmOGQyOWU1ZjIxNzk4NjUxIjoiMGZiMGNlZTIiOiIyZDE5MWYyZiIKKworQUVTLTE5Mi1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzQKK2Flc19kZWNyeXB0X2NmYjg6IjRjZDEzMTc5ZGZhMTZkMDFjNmE4NjMzZGZjODc4M2U3MjNlNzIxMTRjOWIwZDUwYSI6IjY2NTdjNDZjOTlkNjQyNDc0YzMzMGQ4MDE2YjcxZGJlIjoiMDlkOTE0Y2YwYiI6IjEwNWE2NGM4NzIiCisKK0FFUy0xOTItQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICM1CithZXNfZGVjcnlwdF9jZmI4OiI1ZGNjOWI4ZDhhNDU2ZTk5MTdjZDhkNTRkN2Y3MTAwYjM0OTY0YjRlZDJkMzk4YTAiOiI0ZmEyOTVhODk4N2YxYjAxMGNlNGUwMTFmYmY5NDE1NiI6IjI4OGM3NTJkOWZhYyI6Ijk4ZjMzMmQzN2I3OCIKKworQUVTLTE5Mi1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzYKK2Flc19kZWNyeXB0X2NmYjg6ImM4YmFmMDIwNGVmODBiOGUwMTI1ZWZlNDNhMGJjY2RmZDBmMzU2YjYyZTZjNzVmZSI6ImU5MTQ0YmYyY2JjNTcyMGExYjRjYjZmMzdkMTFlZGZmIjoiYzk5ODFhMzRiN2FhODkiOiI1NmJiNGMzY2FlNTNiMyIKKworQUVTLTE5Mi1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzcKK2Flc19kZWNyeXB0X2NmYjg6IjY0ZTQwNzYzZjM4YTYzYWUzNzhjMzIwNTJiMGFlM2FhNTM4YmI4NjhhMDRhYzk4NSI6ImFhY2Y2NTA4OWU0YjI4NTQzODQ1MWZmZGNkMGY2Mzg5IjoiZDhmY2Y4M2E4ODUxMGEwZCI6ImI1Njc0MTFiYzYxYjBhNzYiCisKK0FFUy0xOTItQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICM4CithZXNfZGVjcnlwdF9jZmI4OiI3YmZkY2E5NjA1ZjE3MjUzZjIwM2VmZmZjOTJkYTk2ZmRlMDIzMDA3ZDIyY2RhZDAiOiI0NWMwOWU0NDAzNjA3MGY4YTc3MzdhNTE3NmI4Y2YyNiI6IjljMTk1YjE5NDRjNGFmNWJmYiI6Ijg5MzU4ZGY2NWMzZWYxNGQyNiIKKworQUVTLTE5Mi1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzkKK2Flc19kZWNyeXB0X2NmYjg6ImJhZjA4Yjc2MzE3YTY1YzVmMDdhZTZmNTdlYjBlNjU0ODg2NTkzMjRkMjk3MDllMyI6IjBhMDI4NDZiNjJhYmI2OTNlZjMxZDc1NDg0MmVlZDI5IjoiNzI5YzBiNmRlYjc1ZmE2ZWI1ZTgiOiI5ODk1OTMyNDAyMzkzZGMzM2E2MCIKKworQUVTLTI1Ni1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzAKK2Flc19lbmNyeXB0X2NmYjg6IjM0ZTgwOTFjZWUwOWYxYmQzZWJmMWU4ZjA1ZjUxYmZiZDQ4OTllZjJhZTAwNmEzYTBmNzg3NTA1MmNkZDQ2YzgiOiI0M2ViNGRjYzRiMDRhODAyMTZhMjBlNGEwOWE3YWJiNSI6ImY5IjoiMjgiCisKK0FFUy0yNTYtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICMxCithZXNfZW5jcnlwdF9jZmI4OiJlMDRlNDMxNzMxMTMxMDllMTM0MzM5Mzg0MmZlNmNhZWYzZjhhMmU1MDZkN2Y1NWY4M2RjYjEwNDQ0YzZhZDIzIjoiYTM4Yjg4YTI5M2IwNzdmYjU1NDY2MzZhYWQ5MGQ2NjMiOiIyOTE0IjoiNjlhNiIKKworQUVTLTI1Ni1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzIKK2Flc19lbmNyeXB0X2NmYjg6IjA2NDg3NDA5MmY3YTEzY2M0NDYyMjQ3YWQ0MjNkMGU5NmVkZjQyZThiNjdhNWEyM2I3YTBhNjQ3N2IwOThlNjYiOiIzMzhjNTUyZmYxZWNhMTQ0MDhlMDVkOGNmOWYzYjMxYiI6ImI5NzRmYSI6IjFjZmY5NSIKKworQUVTLTI1Ni1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzMKK2Flc19lbmNyeXB0X2NmYjg6IjU2Nzk0YWRiMGVmMDRhZWRkZWFiZDY1MGRlNzM2NTMxZDQwODgzNzk1NGI5MTkwMDJjMzNlZGZkZmY5NzZjYzIiOiI3MWI1NTI2ZmFjZWE0MjM2ZDMzZjFmNDEwN2U0YjA0ZiI6ImRiNzc0OTEyIjoiZjA0ZDlkNGYiCisKK0FFUy0yNTYtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICM0CithZXNfZW5jcnlwdF9jZmI4OiJkZGRkN2YyMzRlN2QwZTZlYzY0NTYwYjk2NDMwOTg2YTg1NmYyZWU5ODA1NDQzYTc5NDZlMzE2MDFlZjY2NzlkIjoiZTIwZjM5ZGIwMDI1ZWIyNDQ5MWJkMDYwMTI4ODcxMDgiOiJhZDFkNTMxMWVhIjoiMTljYzk3YTY2MiIKKworQUVTLTI1Ni1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzUKK2Flc19lbmNyeXB0X2NmYjg6ImVjNzNhNzYwMjcyYzgzZjkxNzcxYjNhYjdiMTg4NzE1YzZkNmFmYjljNTU0ZmVhZTgzODU2ZTk2NmEzODYzZDAiOiJhZTdiZmEzOGZkMjU3NzhmY2Y2NmNlODE1N2Y2ZTQyZSI6IjAyZmU3MjRmYmM1ZCI6ImIwZWNhNjM0MDVmNCIKKworQUVTLTI1Ni1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzYKK2Flc19lbmNyeXB0X2NmYjg6ImE2Njg3NGNhMGI3MGZiOThiMzdjMDMzZWM5NjQxM2YzMzlhZGFlMDJhY2FkZTAxNWI5ZjAxNmI0NTlkYjMzMDkiOiI2ZWQ0ODBkOWU0ZWQwMzFjZjY2YmIxZTA3ZjhkNTUxNCI6ImI0Nzc3ZTZiY2Q5YTA1IjoiOGMwMTczOTdhZDViYWIiCisKK0FFUy0yNTYtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICM3CithZXNfZW5jcnlwdF9jZmI4OiJhM2RiYmI3NzVhZGE5MmIwYjhlZDE2MzI0NDRlMjFjMWM4NmZmM2ViYThmNjI4MzA3MzA2ZTc2NmI4YzE1YjVjIjoiNGVjNTZhOGU1NDFmNWNmZTdiOGFiOTQ3YmZhNGZkMDgiOiIxZDcwYTVhODJiYWRmNWVhIjoiMWUyMmJlYmViZWFjZDgxZCIKKworQUVTLTI1Ni1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzgKK2Flc19lbmNyeXB0X2NmYjg6IjY0MTM1ZTY3YzBjYTFhY2VmMzM2MGQ5MzBhZmNkNzI2YzViMDQ4NjFhNjljMWI2YTQ4YmRlMWRhZjIwZjNiMWYiOiI1Mzc3YTE1NGQ1Zjk0ODE4OWY5YWE1N2I0NjZjMTZiMiI6ImEzNmNhNWVhMzgyYTMyMmVlZiI6IjMxMDUwMTY1NjdkMzE3NGFlZCIKKworQUVTLTI1Ni1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzkKK2Flc19lbmNyeXB0X2NmYjg6ImViYmI0NTY2YjVlMTgyZTBmMDcyNDY2YjBiMzExZGYzOGY5MTc1YmMwMjEzYTU1MzBiY2UyZWM0ZDc0ZjQwMGQiOiIwOTU2YTQ4ZTAxMDAyYzllMTYzNzZkNmUzMDhkYmFkMSI6ImIwZmUyNWFjOGQzZDI4YTJmNDcxIjoiNjM4YzY4MjNlNzI1NmZiNTYyNmUiCisKK0FFUy0yNTYtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICMwCithZXNfZGVjcnlwdF9jZmI4OiIxNjg3ODMxNTgwY2I3NjQzMjFhOWQ2NzRkYmQwYTk2NDBmNjY4YjBmNThlZjAxYjg3YTcxMGIzMDk1ZDVmODU1IjoiNmNkNWJlYzZkNmUxZmQyM2FmYzU0M2I4ZjgwZDNmODkiOiI2ZiI6Ijk4IgorCitBRVMtMjU2LUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjMQorYWVzX2RlY3J5cHRfY2ZiODoiYjZiNTA0ZThiNzA2NTM3M2VhMzFjZDU0OWU1MmVkYTdjYjk2ZmQxZGIxNGVkZGFjYmM0MjAwODVhYjQ4Yjc0NyI6Ijg3MGVjZDQ1YjEyNDE4MDNkZGFmOGJhZDE1YTAyNWQ3IjoiMTdkNCI6IjM1NzIiCisKK0FFUy0yNTYtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICMyCithZXNfZGVjcnlwdF9jZmI4OiI2YWQzMTA1ZTE1ZmI1Yjc0MmJmNGZlMWViOGU5OGM2YzFmZmVhNjUzMTA3Yzg0ZjZiNDJlZDEyMzJhMGJiYzIxIjoiMTc1MzRjODljNGVhZTVkZWE2ZWEzNTNkZGU3YjE2MjMiOiJhOTg0MWUiOiJmOTQxMWEiCisKK0FFUy0yNTYtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICMzCithZXNfZGVjcnlwdF9jZmI4OiI3NThmM2ZhOGIyYjI4OWYxOWZkNTllNzMxNmJlNDBiOTA0ZWZmN2Y1NjVjYWFjNDU3MGY5NzIzNjBlMGRhNzg3IjoiYjIxMzM1YWU5ODA4OThmYTkyYzRiMzA2OWU1MzI5NzMiOiI4NGIzNWUyNSI6IjQ3ODg3ODcyIgorCitBRVMtMjU2LUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjNAorYWVzX2RlY3J5cHRfY2ZiODoiODAyZTg1NGViNzk5NTAwOTc1ZDk2MGE2Nzg4NTgyMGQxOTVlMDJhYjIzZDUxZjE1ZTVjZGJjZWU4NmExNTgwYyI6Ijk0NDc4YzRlNDRlMmZhOGQyZTZiYzQzZDM4NDU5N2U2IjoiZDFlOTZiZjFlOCI6ImVkNDE0YjU2ODkiCisKK0FFUy0yNTYtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICM1CithZXNfZGVjcnlwdF9jZmI4OiIzYTBjMDNjYTlkMWU1ZDQ5YmIzN2Y5MDQxZjg4ZDE1OWMzZjFkNWNlMjZjNzk4ZjU5ZWQ1NGE5M2YwYTBlNjAwIjoiOWFhZTM4YmE4MzJlNGIwOTNiNTA0NDQwNzQ1MTdkMjAiOiI3NDQxMGNjZDEyZGEiOiI4MjA3ZWVlMmE3YWIiCisKK0FFUy0yNTYtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICM2CithZXNfZGVjcnlwdF9jZmI4OiJlZTA1NDYyMTI4ZmVhNzVlOTE5ZjZmNDM2Y2IxOThmMjIyODQ3ZDY5OGEyODNmNTc2N2RmNjgyZDMzZDNjZTc3IjoiZDJhZDU1ZTQxODg3MDc1MTg0NjM1MTEyYTIyZmMwOTMiOiJmZjAzOWU4OTg3N2I0NCI6ImFmZjNhYTRjMjRlMzUzIgorCitBRVMtMjU2LUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjNworYWVzX2RlY3J5cHRfY2ZiODoiMDhhYmJkY2MzZWI5YzE3MTdkYjFmYWEzOGRjZDA4OTNhZmQ1ZTE2ZTI1OTY3NDdhZjU4ZjhkNjFlYmVkZjljZCI6ImI5MjVjOGRjOWE5YjU1YTQzNzJlYTZkMzdkMjFjMWViIjoiZTE3NmJhOTllYTYwMmZkOSI6ImI3MzcwMDUwMjg4YmY2MDAiCisKK0FFUy0yNTYtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICM4CithZXNfZGVjcnlwdF9jZmI4OiI1NmQ0MDRhODkzZmIzYjNmNTk0YWFiMTg5MzkyMzBiMDk2NjQ2YTM3YTc4MTYyOWZiZDkyNzBmMzg5MWE1Y2VhIjoiZTU5MDZiMzZmMmQ5N2U2ZjJkYjE5YjZjN2EzY2UzMTkiOiJjNTVhOWE5MTdhODA5YTc4NGIiOiJlNDQ5OTViYmIwZmZmNDBmZWUiCisKK0FFUy0yNTYtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICM5CithZXNfZGVjcnlwdF9jZmI4OiJlYzEzMDYyNTUxZTRkNzI5MWUzMjBmNTY1Yjc0OWVlYTE4MDliNjYzYjI2ZjJjNGQ1M2I1MjA1OGI4MzNlMGFkIjoiZmJmYTVhNTI4ZTIwODYzMDEyNzkwYzJhYmFmYjVhMGMiOiIyYmZjM2YwMjA5MzA3MTQwMTAxYSI6IjU0N2JmZDY0MmNmNmUxMmVkOTQyIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5lY2IuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuZWNiLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0OTAzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuZWNiLmRhdGEKQEAgLTAsMCArMSwyMzAgQEAKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzEKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmMzQ0ODFlYzNjYzYyN2JhY2Q1ZGMzZmIwOGYyNzNlNiI6IjAzMzY3NjNlOTY2ZDkyNTk1YTU2N2NjOWNlNTM3ZjVlIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzIKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5Nzk4YzQ2NDBiYWQ3NWM3YzMyMjdkYjkxMDE3NGU3MiI6ImE5YTE2MzFiZjQ5OTY5NTRlYmMwOTM5NTdiMjM0NTg5IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzMKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5NmFiNWMyZmY2MTJkOWRmYWFlOGMzMWYzMGM0MjE2OCI6ImZmNGY4MzkxYTZhNDBjYTViMjVkMjNiZWRkNDRhNTk3IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzQKK2Flc19lbmNyeXB0X2VjYjoiZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjcyYTFkYTc3MGY1ZDdhYzRjOWVmOTRkODIyYWZmZDk3IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzUKK2Flc19lbmNyeXB0X2VjYjoiZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijk3MDAxNGQ2MzRlMmI3NjUwNzc3ZThlODRkMDNjY2Q4IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzYKK2Flc19lbmNyeXB0X2VjYjoiZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImYxN2U3OWFlZDBkYjdlMjc5ZTk1NWI1ZjQ5Mzg3NWE3IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzcKK2Flc19lbmNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjdiOTA3ODUxMjU1MDVmYWQ1OWIxM2MxODZkZDY2Y2UzIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzgKK2Flc19lbmNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZjgwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhiNTI3YTZhZWJkYWVjOWVhZWY4ZWRhMmNiNzc4M2U1IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzkKK2Flc19lbmNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQzZmRhZjUzZWJiYzk4ODBjMjI4NjE3ZDZhOWI1NDhiIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzEwCithZXNfZW5jcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3MGM0NmJiMzA2OTJiZTY1N2Y3ZWFhOTNlYmFkOTg5NyI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMQorYWVzX2VuY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMzIzOTk0Y2ZiOWRhMjg1YTVkOTY0MmUxNzU5YjIyNGEiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTIKK2Flc19lbmNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjFkYmY1Nzg3N2I3YjE3Mzg1Yzg1ZDBiNTQ4NTFlMzcxIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzEzCithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMDAiOiIzYTRkMzU0ZjAyYmI1YTVlNDdkMzk2NjY4NjdmMjQ2YSI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxNAorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwIjoiZDQ1MWI4ZDZlMWUxYTBlYmIxNTVmYmJmNmU3YjdkYzMiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTUKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAwMCI6IjY4OThkNGY0MmZhN2JhNmExMGFjMDVlODdiOWYyMDgwIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzE2CithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAiOiIwODJlYjhiZTM1ZjQ0MmZiNTI2NjhlMTZhNTkxZDFkNiI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxNworYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwIjoiZTY1NmY5ZWNmNWZlMjdlYzNlNGE3M2QwMGMyODJmYjMiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTgKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMCI6IjJjYTgyMDlkNjMyNzRjZDlhMjliYjc0YmNkNzc2ODNhIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzEKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkYjRmMWFhNTMwOTY3ZDY3MzJjZTQ3MTVlYjBlZTI0YiI6ImZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzIKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhODE3MzgyNTI2MjFkZDE4MGEzNGYzNDU1YjRiYWEyZiI6ImZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzMKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3N2UyYjUwOGRiN2ZkODkyMzRjYWY3OTM5ZWU1NjIxYSI6ImZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzQKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkYzQzYmU0MGJlMGU1MzcxMmY3ZTJiZjVjYTcwNzIwOSI6IjZhMTE4YTg3NDUxOWU2NGU5OTYzNzk4YTUwM2YxZDM1IjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzUKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5MmJlZWRhYjE4OTVhOTRmYWE2OWI2MzJlNWNjNDdjZSI6ImNiOWZjZWVjODEyODZjYTNlOTg5YmQ5NzliMGNiMjg0IjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzYKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0NTkyNjRmNDc5OGY2YTc4YmFjYjg5YzE1ZWQzZDYwMSI6ImIyNmFlYjE4NzRlNDdjYTgzNThmZjIyMzc4ZjA5MTQ0IjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzcKK2Flc19kZWNyeXB0X2VjYjoiYjY5NDE4YTg1MzMyMjQwZGM4MjQ5MjM1Mzk1NmFlMGMiOiJhMzAzZDk0MGRlZDhmMGJhZmY2Zjc1NDE0Y2FjNTI0MyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzgKK2Flc19kZWNyeXB0X2VjYjoiNzFiNWMwOGExOTkzZTEzNjJlNGQwY2U5YjIyYjc4ZDUiOiJjMmRhYmQxMTdmOGEzZWNhYmZiYjExZDEyMTk0ZDlkMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzkKK2Flc19kZWNyeXB0X2VjYjoiZTIzNGNkY2EyNjA2YjgxZjI5NDA4ZDVmNmRhMjEyMDYiOiJmZmY2MGE0NzQwMDg2YjNiOWM1NjE5NWI5OGQ5MWE3YiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzEwCithZXNfZGVjcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAwIjoiODRiZTE5ZTA1MzYzNWYwOWYyNjY1ZTdiYWU4NWI0MmQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTI4LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMQorYWVzX2RlY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMCI6IjMyY2Q2NTI4NDI5MjZhZWE0YWE2MTM3YmIyYmUyYjVlIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMQorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMCI6IjE1NmYwNzc2N2E4NWE0MzEyMzIxZjYzOTY4MzM4YTAxIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzIKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAiOiIxNWVlYzllYmY0MmI5Y2E3Njg5N2QyY2Q2YzVhMTJlMiI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICMzCithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmUwMDAwMDAwMDAwIjoiZGIwZDNhNmZkY2MxM2Y5MTVlMmIzMDJjZWViNzBmZDgiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNAorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI1MTcxOTc4M2QzMTg1YTUzNWJkNzVhZGM2NTA3MWNlMSI6IjRmMzU0NTkyZmY3Yzg4NDdkMmQwODcwY2E5NDgxYjdjIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzUKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMjZhYTQ5ZGNmZTc2MjlhODkwMWE2OWE5OTE0ZTZkZmQiOiJkNWUwOGJmOWExODJlODU3Y2Y0MGIzYTM2ZWUyNDhjYyI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICM2CithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijk0MWE0NzczMDU4MjI0ZTFlZjY2ZDEwZTBhNmVlNzgyIjoiMDY3Y2Q5ZDM3NDkyMDc3OTE4NDE1NjI1MDdmYTk2MjYiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNworYWVzX2VuY3J5cHRfZWNiOiJkMjkyNjUyN2UwYWE5ZjM3YjQ1ZTJlYzJhZGU1ODUzZWY4MDc1NzYxMDRjN2FjZTMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImRkNjE5ZTFjZjIwNDQ0NjExMmUwYWYyYjlhZmE4ZjhjIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzgKK2Flc19lbmNyeXB0X2VjYjoiOTgyMjE1ZjRlMTczZGZhMGZjZmZlNWQzZGE0MWM0ODEyYzdiY2M4ZWQzNTQwZjkzIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkNGYwYWFlMTNjOGZlOTMzOWZiZjllNjllZDBhZDc0ZCI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICM5CithZXNfZW5jcnlwdF9lY2I6Ijk4YzZiOGUwMWUzNzlmYmQxNGU2MWFmNmFmODkxNTk2NTgzNTY1ZjJhMjdkNTllOSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMTljODBlYzRhNmRlYjdlNWVkMTAzM2RkYTkzMzQ5OGYiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19lbmNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4ZGQyNzRiZDBmMWI1OGFlMzQ1ZDllNzIzM2Y5YjhmMyI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMQorYWVzX2VuY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjlkNmJkYzhmNGNlNWZlYjBmM2JlZDJlNGI5YTliYjBiIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzEyCithZXNfZW5jcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmQ1NTQ4YmNmM2Y0MjU2NWY3ZWZhOTQ1NjI1MjhkNDYiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMQorYWVzX2RlY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAiOiJiYjI4NTJjODkxYzU5NDdkMmVkNDQwMzJjNDIxYjg1ZiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzIKK2Flc19kZWNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwIjoiMWI5ZjVmYmQ1ZThhNDI2NGMwYTg1YjgwNDA5YWZhNWUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICMzCithZXNfZGVjcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMCI6IjMwZGFiODA5Zjg1YTkxN2ZlOTI0NzMzZjQyNGFjNTg5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNAorYWVzX2RlY3J5cHRfZWNiOiI2MTI1NzEzNGE1MThhMGQ1N2Q5ZDI0NGQ0NWY2NDk4Y2JjMzJmMmJhZmM1MjJkNzkiOiJjZmU0ZDc0MDAyNjk2Y2NmN2Q4N2IxNGEyZjljYWZjOSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzUKK2Flc19kZWNyeXB0X2VjYjoiYjBhYjBhNmE4MThiYWVmMmQxMWZhMzNlYWM5NDcyODRmYjdkNzQ4Y2ZiNzVlNTcwIjoiZDJlYWZkODZmNjNiMTA5YjkxZjVkYmIzYTNmYjdlMTMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICM2CithZXNfZGVjcnlwdF9lY2I6ImVlMDUzYWEwMTFjOGI0MjhjZGNjMzYzNjMxM2M1NGQ2YTAzY2FjMDFjNzE1NzlkNiI6IjliOWZkZDFjNTk3NTY1NWY1Mzk5OThiMzA2YTMyNGFmIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNworYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIyNzVjZmMwNDEzZDhjY2I3MDUxM2MzODU5YjFkMGY3MiI6IjFiMDc3YTZhZjRiN2Y5ODIyOWRlNzg2ZDc1MTZiNjM5IjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzgKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYzliODEzNWZmMWI1YWRjNDEzZGZkMDUzYjIxYmQ5NmQiOiI5YzJkODg0MmU1ZjQ4ZjU3NjQ4MjA1ZDM5YTIzOWFmMSI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICM5CithZXNfZGVjcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjRhMzY1MGMzMzcxY2UyZWIzNWUzODlhMTcxNDI3NDQwIjoiYmZmNTI1MTAwOTVmNTE4ZWNjYTYwYWY0MjA1NDQ0YmIiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYjIwOTk3OTVlODhjYzE1OGZkNzVlYTEzM2Q3ZTdmYmUiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMQorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhNmNhZTQ2ZmI2ZmFkZmU3YTJjMzAyYTM0MjQyODE3YiI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzEyCithZXNfZGVjcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAyNmE3MDI0ZDZhOTAyZTBiM2ZmY2NiYWE5MTBjYzNmIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMQorYWVzX2VuY3J5cHRfZWNiOiJjMWNjMzU4YjQ0OTkwOWExOTQzNmNmYmIzZjg1MmVmOGJjYjVlZDEyYWM3MDU4MzI1ZjU2ZTYwOTlhYWIxYTFjIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzNTIwNjUyNzIxNjlhYmY5ODU2ODQzOTI3ZDA2NzRmZCI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMyCithZXNfZW5jcnlwdF9lY2I6Ijk4NGNhNzVmNGVlOGQ3MDZmNDZjMmQ5OGMwYmY0YTQ1ZjViMDBkNzkxYzJkZmViMTkxYjVlZDhlNDIwZmQ2MjciOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQzMDc0NTZhOWU2NzgxM2I0NTJlMTVmYThmZmZlMzk4IjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzMKK2Flc19lbmNyeXB0X2VjYjoiYjQzZDA4YTQ0N2FjODYwOWJhYWRhZTRmZjEyOTE4YjlmNjhmYzE2NTNmMTI2OTIyMmYxMjM5ODFkZWQ3YTkyZiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDY2MzQ0NjYwNzM1NDk4OTQ3N2E1YzZmMGYwMDdlZjQiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNAorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMGIyNGFmMzYxOTNjZTQ2NjVmMjgyNWQ3YjQ3NDljOTgiOiJhOWZmNzViZDdjZjY2MTNkMzczMWM3N2MzYjZkMGMwNCI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICM1CithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3NjFjMWZlNDFhMThhY2YyMGQyNDE2NTA2MTFkOTBmMSI6IjYyM2E1MmZjZWE1ZDQ0M2U0OGQ5MTgxYWIzMmM3NDIxIjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzYKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhhNTYwNzY5ZDYwNTg2OGFkODBkODE5YmRiYTAzNzcxIjoiMzhmMmM3YWUxMDYxMjQxNWQyN2NhMTkwZDI3ZGE4YjQiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNworYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzNmFmZjBlZjdiZjMyODA3NzJjZjRjYWM4MGEwZDJiMiI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICM4CithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjFmOGVlZGVhMGY2MmExNDA2ZDU4Y2ZjM2VjZWE3MmNmIjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzkKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYWJmNDE1NGEzMzc1YTFkM2U2YjFkNDU0NDM4Zjk1YTYiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19lbmNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDVkMDg5YzM2ZDVjNWE0ZWZjNjg5ZTNiMGRlMTBkZDUiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTEKK2Flc19lbmNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYjRkYTVkZjRiZWNiNTQ2MmUwM2EwZWQwMGQyOTU2MjkiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTIKK2Flc19lbmNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGNmNGUxMjkxMzZjMWE0YjdhMGYzODkzNWNjMzRiMmIiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMQorYWVzX2RlY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwIjoiZWRmNjFhZTM2MmU4ODJkZGMwMTY3NDc0YTdhNzdmM2EiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMyCithZXNfZGVjcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAiOiI2MTY4YjAwYmE3ODU5ZTA5NzBlY2ZkNzU3ZWZlY2Y3YyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzMKK2Flc19kZWNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMCI6ImQxNDE1NDQ3ODY2MjMwZDI4YmIxZWExOGE0Y2RmZDAyIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNAorYWVzX2RlY3J5cHRfZWNiOiJmOGJlOWJhNjE1YzVhOTUyY2FiYmNhMjRmNjhmODU5MzAzOTYyNGQ1MjRjODE2YWNkYTJjOTE4M2JkOTE3Y2I5IjoiYTM5NDRiOTVjYTBiNTIwNDM1ODRlZjAyMTUxOTI2YTgiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICM1CithZXNfZGVjcnlwdF9lY2I6Ijc5N2Y4YjNkMTc2ZGFjNWI3ZTM0YTJkNTM5YzRlZjM2N2ExNmY4NjM1ZjYyNjQ3Mzc1OTFjNWMwN2JmNTdhM2UiOiJhNzQyODlmZTczYTRjMTIzY2ExODllYTFlMWI0OWFkNSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzYKK2Flc19kZWNyeXB0X2VjYjoiNjgzOGQ0MGNhZjkyNzc0OWMxM2YwMzI5ZDMzMWY0NDhlMjAyYzczZWY1MmM1ZjczYTM3Y2E2MzVkNGM0NzcwNyI6ImI5MWQ0ZWE0NDg4NjQ0YjU2Y2YwODEyZmE3ZmNmNWZjIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNworYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNjIzYTUyZmNlYTVkNDQzZTQ4ZDkxODFhYjMyYzc0MjEiOiI3NjFjMWZlNDFhMThhY2YyMGQyNDE2NTA2MTFkOTBmMSI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICM4CithZXNfZGVjcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzOGYyYzdhZTEwNjEyNDE1ZDI3Y2ExOTBkMjdkYThiNCI6IjhhNTYwNzY5ZDYwNTg2OGFkODBkODE5YmRiYTAzNzcxIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzkKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjFiYzcwNGYxYmNlMTM1Y2ViODEwMzQxYjIxNmQ3YWJlIjoiOTFmYmVmMmQxNWE5NzgxNjA2MGJlZTFmZWFhNDlhZmUiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImRkYzZiZjc5MGMxNTc2MGQ4ZDlhZWI2ZjlhNzVmZDRlIjoiODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTEKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjBhNmJkYzZkNGMxZTYyODAzMDFmZDhlOTdkZGJlNjAxIjoiYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTIKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjliODBlZWZiN2ViZTJkMmIxNjI0N2FhMGVmYzcyZjVkIjoiZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjBlYWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMjk3IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2Flcy5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgYWVzX2VuY3J5cHRfZWNiKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2RzdF9zdHJpbmcsIGludCBzZXRrZXlfcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Flc19pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ciwga2V5X2xlbiAqIDggKSA9PSBzZXRrZXlfcmVzdWx0ICk7CisgICAgaWYoIHNldGtleV9yZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hZXNfY3J5cHRfZWNiKCAmY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCAxNiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2Flc19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGFlc19kZWNyeXB0X2VjYiggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9zcmNfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Flc19jb250ZXh0IGN0eDsKKyAgICBpbnQga2V5X2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19hZXNfaW5pdCggJmN0eCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX3NldGtleV9kZWMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICkgPT0gc2V0a2V5X3Jlc3VsdCApOworICAgIGlmKCBzZXRrZXlfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19BRVNfREVDUllQVCwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgICAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgMTYgKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19hZXNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCit2b2lkIGFlc19lbmNyeXB0X2NiYyggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgIGludCBjYmNfcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19hZXNfY29udGV4dCBjdHg7CisgICAgaW50IGtleV9sZW4sIGRhdGFfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfYWVzX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgZGF0YV9sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2NiYyggJmN0eCwgTUJFRFRMU19BRVNfRU5DUllQVCwgZGF0YV9sZW4sIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gY2JjX3Jlc3VsdCApOworICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIGRhdGFfbGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwordm9pZCBhZXNfZGVjcnlwdF9jYmMoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgY2JjX3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuLCBkYXRhX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Flc19pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGl2X3N0ciwgaGV4X2l2X3N0cmluZyApOworICAgIGRhdGFfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2Flc19zZXRrZXlfZGVjKCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jcnlwdF9jYmMoICZjdHgsIE1CRURUTFNfQUVTX0RFQ1JZUFQsIGRhdGFfbGVuLCBpdl9zdHIsIHNyY19zdHIsIG91dHB1dCApID09IGNiY19yZXN1bHQgKTsKKyAgICBpZiggY2JjX3Jlc3VsdCA9PSAwKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIGRhdGFfbGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwordm9pZCBhZXNfZW5jcnlwdF9jZmIxMjgoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBpdl9vZmZzZXQgPSAwOworICAgIGludCBrZXlfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfYWVzX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jcnlwdF9jZmIxMjgoICZjdHgsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIDE2LCAmaXZfb2Zmc2V0LCBpdl9zdHIsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgMTYgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwordm9pZCBhZXNfZGVjcnlwdF9jZmIxMjgoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBpdl9vZmZzZXQgPSAwOworICAgIGludCBrZXlfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfYWVzX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jcnlwdF9jZmIxMjgoICZjdHgsIE1CRURUTFNfQUVTX0RFQ1JZUFQsIDE2LCAmaXZfb2Zmc2V0LCBpdl9zdHIsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgMTYgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwordm9pZCBhZXNfZW5jcnlwdF9jZmI4KCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X2l2X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19hZXNfY29udGV4dCBjdHg7CisgICAgaW50IGtleV9sZW4sIHNyY19sZW47CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19hZXNfaW5pdCggJmN0eCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jcnlwdF9jZmI4KCAmY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBzcmNfbGVuLCBpdl9zdHIsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgc3JjX2xlbiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19hZXNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCit2b2lkIGFlc19kZWNyeXB0X2NmYjgoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Flc19jb250ZXh0IGN0eDsKKyAgICBpbnQga2V5X2xlbiwgc3JjX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Flc19pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGl2X3N0ciwgaGV4X2l2X3N0cmluZyApOworICAgIHNyY19sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2NmYjgoICZjdHgsIE1CRURUTFNfQUVTX0RFQ1JZUFQsIHNyY19sZW4sIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBzcmNfbGVuICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2Flc19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgYWVzX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hZXNfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMucmVzdC5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5yZXN0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJiMjIyZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMucmVzdC5kYXRhCkBAIC0wLDAgKzEsMTUgQEAKK0FFUy1FQ0IgRW5jcnlwdCAoSW52YWxpZCBrZXlsZW5ndGgpCithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImYzNDQ4MWVjM2NjNjI3YmFjZDVkYzNmYjA4ZjI3M2U2IjoiMDMzNjc2M2U5NjZkOTI1OTVhNTY3Y2M5Y2U1MzdmNWUiOk1CRURUTFNfRVJSX0FFU19JTlZBTElEX0tFWV9MRU5HVEgKKworQUVTLUVDQiBEZWNyeXB0IChJbnZhbGlkIGtleWxlbmd0aCkKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZjM0NDgxZWMzY2M2MjdiYWNkNWRjM2ZiMDhmMjczZTYiOiIwMzM2NzYzZTk2NmQ5MjU5NWE1NjdjYzljZTUzN2Y1ZSI6TUJFRFRMU19FUlJfQUVTX0lOVkFMSURfS0VZX0xFTkdUSAorCitBRVMtMjU2LUNCQyBFbmNyeXB0IChJbnZhbGlkIGlucHV0IGxlbmd0aCkKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwIjoiIjpNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKworQUVTLTI1Ni1DQkMgRGVjcnlwdCAoSW52YWxpZCBpbnB1dCBsZW5ndGgpCithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjYyM2E1MmZjZWE1ZDQ0M2U0OGQ5MTgxYWIzMmM3NCI6IiI6TUJFRFRMU19FUlJfQUVTX0lOVkFMSURfSU5QVVRfTEVOR1RICisKK0FFUyBTZWxmdGVzdAorZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVAorYWVzX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2FyYzQuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hcmM0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzMmM4NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hcmM0LmRhdGEKQEAgLTAsMCArMSwyNyBAQAorVGVzdCB2ZWN0b3IgQVJDNCBbQ3J5cHRsaWJdCittYmVkdGxzX2FyYzRfY3J5cHQ6IjAwMDAwMDAwMDAwMDAwMDAiOiIwMTIzNDU2Nzg5YWJjZGVmIjoiNzQ5NGMyZTcxMDRiMDg3OSIKKworVGVzdCB2ZWN0b3IgQVJDNCBbQ09NTUVSQ0VdCittYmVkdGxzX2FyYzRfY3J5cHQ6ImRjZWU0Y2Y5MmMiOiI2MThhNjNkMmZiIjoiZjEzODI5YzlkZSIKKworVGVzdCB2ZWN0b3IgQVJDNCBbU1NIIEFSQ0ZPVVJdCittYmVkdGxzX2FyYzRfY3J5cHQ6IjUyNzU2OTczNmM2OTZlNmU3NTZlMjA2YzYxNzU2Yzc1MjA2YjZmNzI3NjY5NzM3MzczNjE2ZTY5MmMyMDc0ZTQ2ODZiZTQ3MGU0Njk2NDY1NmUyMDcwZTRlNDZjNmNlNDIwNzRlNDc5NzM2OTZiNzU3NTJlMjA0YjY1NzNlNDc5ZjY2ZTIwNmY2ZTIwNmY2ZTZlNjkyMDZmNmQ2MTZlNjE2ZTY5MmMyMDZiNjE3MzZiNjk3MzYxNzY3NTc1NmUyMDZjNjE2MTZiNzM2Zjc0MjA3NjY1NzI2ODZmNzU3NTJlMjA0NTZlMjA2ZDYxMjA2OTZjNmY2OTc0NzM2NTJjMjA3Mzc1NzI2NTIwNjg3NTZmNmI2MTYxMmMyMDZkNzU3NDc0NjEyMDZkNjU3NDczZTQ2ZTIwNzQ3NTZkNmQ3NTc1NzMyMDZkNzU2YzZjNjUyMDc0NzU2ZjZiNjE2MTJlMjA1MDc1NzU2ZTc0NmYyMDcwNjk2Yzc2NjU2ZTJjMjA2ZDY5MjA2ODc1NmI2Yjc1NzUyYzIwNzM2OTY5NmU3NDZmMjA3NjYxNzI2MTZlMjA3NDc1NzU2YzY5NzM2NTZlMmMyMDZkNjkyMDZlNzU2YjZiNzU3NTJlMjA1NDc1NmY2YjczNzU3NDIwNzY2MTZlNjE2ZDZmNmUyMDZhNjEyMDc2NjE3MjZhNmY3NDIwNzY2NTY1NmUyYzIwNmU2OTY5NzM3NGU0MjA3Mzc5NjRlNDZkNjU2ZTY5MjA2YzYxNzU2Yzc1NmUyMDc0NjU2NTZlMmUyMDJkMjA0NTY5NmU2ZjIwNGM2NTY5NmU2ZiI6IjI5MDQxOTcyZmI0MmJhNWZjNzEyNzcxMmYxMzgyOWM5IjoiMzU4MTg2OTk5MDAxZTZiNWRhZjA1ZWNlZWI3ZWVlMjFlMDY4OWMxZjAwZWVhODFmN2RkMmNhYWVlMWQyNzYzZTY4YWYwZWFkMzNkNjZjMjY4YmM5NDZjNDg0ZmJlOTRjNWY1ZTBiODZhNTkyNzllNGY4MjRlN2E2NDBiZDIyMzIxMGIwYTYxMTYwYjdiY2U5ODZlYTY1Njg4MDAzNTk2YjYzMGE2YjkwZjhlMGNhZjY5MTJhOThlYjg3MjE3NmU4M2MyMDJjYWE2NDE2NmQyY2NlNTdmZjFiY2E1N2IyMTNmMGVkMWFhNzJmYjhlYTUyYjBiZTAxY2QxZTQxMjg2NzcyMGIzMjZlYjM4OWQwMTFiZDcwZDhhZjAzNWZiMGQ4NTg5ZGJjZTNjNjY2ZjVlYThkNGM3OTU0YzUwYzNmMzQwYjA0NjdmODFiNDI1OTYxYzExODQzMDc0ZGY2MjBmMjA4NDA0YjM5NGNmOWQzN2ZmNTRiNWYxYWQ4ZjZlYTdkYTNjNTYxZGZhNzI4MWY5NjQ0NjNkMmNjMzVhNGQxYjAzNDkwZGVjNTFiMDcxMWZiZDZmNTVmNzkyMzRkNWI3Yzc2NjYyMmE2NmRlOTJiZTk5NjQ2MWQ1ZTRkYzg3OGVmOWJjYTAzMDUyMWU4MzUxZTRiYWVkMmZkMDRmOTQ2NzM2OGM0YWQ2YWMxODZkMDgyNDViMjYzYTI2NjZkMWY2YzU0MjBmMTU5OWRmZDlmNDM4OTIxYzJmNWE0NjM5MzhjZTA5ODIyNjVlZWY3MDE3OWJjNTUzZjMzOWViMWE0YzFhZjVmNmE1NDdmIgorCitUZXN0IFZlY3RvciBBUkM0IFtSRkM2MjI5IDQwLWJpdF0KK21iZWR0bHNfYXJjNF9jcnlwdDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAxMDIwMzA0MDUiOiJiMjM5NjMwNWYwM2RjMDI3Y2NjMzUyNGEwYTExMThhODY5ODI5NDRmMThmYzgyZDU4OWM0MDNhNDdhMGQwOTE5IgorCitUZXN0IFZlY3RvciBBUkM0IFtSRkM2MjI5IDU2LWJpdF0KK21iZWR0bHNfYXJjNF9jcnlwdDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAxMDIwMzA0MDUwNjA3IjoiMjkzZjAyZDQ3ZjM3YzliNjMzZjJhZjUyODVmZWI0NmJlNjIwZjEzOTBkMTliZDg0ZTJlMGZkNzUyMDMxYWZjMSIKKworVGVzdCBWZWN0b3IgQVJDNCBbUkZDNjIyOSA2NC1iaXRdCittYmVkdGxzX2FyYzRfY3J5cHQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMTAyMDMwNDA1MDYwNzA4IjoiOTdhYjhhMWJmMGFmYjk2MTMyZjJmNjcyNThkYTE1YTg4MjYzZWZkYjQ1YzRhMTg2ODRlZjg3ZTZiMTllNWIwOSIKKworVGVzdCBWZWN0b3IgQVJDNCBbUkZDNjIyOSAxMjgtYml0XQorbWJlZHRsc19hcmM0X2NyeXB0OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAiOiI5YWM3Y2M5YTYwOWQxZWY3YjI5MzI4OTljZGU0MWI5NzUyNDhjNDk1OTAxNDEyNmE2ZThhODRmMTFkMWE5ZTFjIgorCitUTVAKK21iZWR0bHNfYXJjNF9jcnlwdDoiMTQwMDAwMjQzM2M5NmNmYTVjNTNhNjUxODRmY2JhODNkOTc5M2Y0MjUyMmY5NGU0OWJmMjVlZGNiN2EyM2M5ZWFhZTVjYTg0ZjZlZTZkYTgiOiI1ZTU4YjFhZDgwIjoiZTlhM2QwN2VhMWEzZWFjOWZkNzNkY2IxNGM0MDlmMmQ0MzRhNzJiNmFhMDc3ZTA5MjRiY2ZmYzIzNmY1NWQyZDM3MmIyODk3MDc1NzE1MzEiCisKK0FSQzQgU2VsZnRlc3QKK2RlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QKK2FyYzRfc2VsZnRlc3Q6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXJjNC5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hcmM0LmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YjQwMWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXJjNC5mdW5jdGlvbgpAQCAtMCwwICsxLDQ2IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2FyYzQuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2FyYzRfY3J5cHQoIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfa2V5X3N0cmluZywKKyAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X2hleHN0clsyMDAwXTsKKyAgICBpbnQgc3JjX2xlbiwga2V5X2xlbjsKKyAgICBtYmVkdGxzX2FyYzRfY29udGV4dCBjdHg7CisKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwMCk7CisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDAwKTsKKyAgICBtZW1zZXQoZHN0X2hleHN0ciwgMHgwMCwgMjAwMCk7CisgICAgbWJlZHRsc19hcmM0X2luaXQoICZjdHggKTsKKworICAgIHNyY19sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2FyYzRfc2V0dXAoJmN0eCwga2V5X3N0ciwga2V5X2xlbik7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYXJjNF9jcnlwdCgmY3R4LCBzcmNfbGVuLCBzcmNfc3RyLCBkc3Rfc3RyICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X2hleHN0ciwgZHN0X3N0ciwgc3JjX2xlbiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X2hleHN0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19hcmM0X2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBhcmM0X3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hcmM0X3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXNuMXdyaXRlLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXNuMXdyaXRlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhNzhiMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hc24xd3JpdGUuZGF0YQpAQCAtMCwwICsxLDkyIEBACitBU04uMSBXcml0ZSBPY3RldCBTdHJpbmcgIzAgKEVtcHR5IHN0cmluZykKK21iZWR0bHNfYXNuMV93cml0ZV9vY3RldF9zdHJpbmc6IiI6IjA0MDAiOjI6MgorCitBU04uMSBXcml0ZSBPY3RldCBTdHJpbmcgIzEgKExhcmdlIGJ1ZmZlcikKK21iZWR0bHNfYXNuMV93cml0ZV9vY3RldF9zdHJpbmc6IkFBQkJDQyI6IjA0MDNBQUJCQ0MiOjEwOjUKKworQVNOLjEgV3JpdGUgT2N0ZXQgU3RyaW5nICMyIChCdWZmZXIganVzdCBmaXRzKQorbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZzoiQUFCQkNDIjoiMDQwM0FBQkJDQyI6NTo1CisKK0FTTi4xIFdyaXRlIE9jdGV0IFN0cmluZyAjMyAoQnVmZmVyIHRvbyBzbWFsbCBmb3IgdGFnKQorbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZzoiQUFCQkNDIjoiMDQwM0FBQkJDQyI6NDpNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwKKworQVNOLjEgV3JpdGUgT2N0ZXQgU3RyaW5nICM0IChCdWZmZXIgdG9vIHNtYWxsIGZvciBsZW4pCittYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nOiJBQUJCQ0MiOiIwNDAzQUFCQkNDIjozOk1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorCitBU04uMSBXcml0ZSBPY3RldCBTdHJpbmcgIzUgKEJ1ZmZlciB0b28gc21hbGwgZm9yIHN0cmluZykKK21iZWR0bHNfYXNuMV93cml0ZV9vY3RldF9zdHJpbmc6IkFBQkJDQyI6IjA0MDNBQUJCQ0MiOjI6TUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMCisKK0FTTi4xIFdyaXRlIE9jdGV0IFN0cmluZyAjNiAobCA9IDEyOCwgbGFyZ2UgYnVmZmVyKQorbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZzoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6IjA0ODE4MDAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOjE0MDoxMzEKKworQVNOLjEgV3JpdGUgT2N0ZXQgU3RyaW5nICM3IChsID0gMTI4LCBidWZmZXIganVzdCBmaXRzKQorbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZzoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6IjA0ODE4MDAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOjEzMToxMzEKKworQVNOLjEgV3JpdGUgT2N0ZXQgU3RyaW5nICM4IChsID0gMTI4LCBidWZmZXIgdG9vIHNtYWxsIGZvciB0YWcpCittYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiIjoxMzA6TUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMCisKK0FTTi4xIFdyaXRlIE9jdGV0IFN0cmluZyAjOSAobCA9IDEyOCwgYnVmZmVyIHRvbyBzbWFsbCBmb3IgbGVuKQorbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZzoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6IiI6MTI5Ok1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorCitBU04uMSBXcml0ZSBPY3RldCBTdHJpbmcgIzkgKGwgPSAxMjgsIGJ1ZmZlciB0b28gc21hbGwgZm9yIHN0cmluZykKK21iZWR0bHNfYXNuMV93cml0ZV9vY3RldF9zdHJpbmc6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiIiOjEyNzpNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwKKworQVNOLjEgV3JpdGUgSUE1IFN0cmluZyAjMCAoRW1wdHkgc3RyaW5nKQorbWJlZHRsc19hc24xX3dyaXRlX2lhNV9zdHJpbmc6IiI6IjE2MDAiOjI6MgorCitBU04uMSBXcml0ZSBJQTUgU3RyaW5nICMxIChMYXJnZSBidWZmZXIpCittYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZzoiQUJDIjoiMTYwMzQxNDI0MyI6MTA6NQorCitBU04uMSBXcml0ZSBJQTUgU3RyaW5nICMyIChCdWZmZXIganVzdCBmaXRzKQorbWJlZHRsc19hc24xX3dyaXRlX2lhNV9zdHJpbmc6IkFCQyI6IjE2MDM0MTQyNDMiOjU6NQorCitBU04uMSBXcml0ZSBJQTUgU3RyaW5nICMzIChCdWZmZXIgdG9vIHNtYWxsIGZvciB0YWcpCittYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZzoiQUJDIjoiIjo0Ok1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorCitBU04uMSBXcml0ZSBJQTUgU3RyaW5nICM0IChCdWZmZXIgdG9vIHNtYWxsIGZvciBsZW4pCittYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZzoiQUJDIjoiIjozOk1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorCitBU04uMSBXcml0ZSBJQTUgU3RyaW5nICM1IChCdWZmZXIgdG9vIHNtYWxsIGZvciBzdHJpbmcpCittYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZzoiQUJDIjoiIjoyOk1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorCitBU04uMSBXcml0ZSAvIFJlYWQgTGVuZ3RoICMwIChMZW4gPSAwLCBzaG9ydCBmb3JtKQorbWJlZHRsc19hc24xX3dyaXRlX2xlbjowOiIwMCI6MToxCisKK0FTTi4xIFdyaXRlIC8gUmVhZCBMZW5ndGggIzEgKExlbiA9IDEyNywgc2hvcnQgZm9ybSkKK21iZWR0bHNfYXNuMV93cml0ZV9sZW46MTI3OiI3RiI6MToxCisKK0FTTi4xIFdyaXRlIC8gUmVhZCBMZW5ndGggIzIgKExlbiA9IDEyNywgYnVmZmVyIHRvbyBzbWFsbCkKK21iZWR0bHNfYXNuMV93cml0ZV9sZW46MTI3OiI3RiI6MDpNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwKKworQVNOLjEgV3JpdGUgLyBSZWFkIExlbmd0aCAjMyAoTGVuID0gMTI4LCBsb25nIGZvcm0pCittYmVkdGxzX2FzbjFfd3JpdGVfbGVuOjEyODoiODE4MCI6MjoyCisKK0FTTi4xIFdyaXRlIC8gUmVhZCBMZW5ndGggIzQgKExlbiA9IDI1NSwgbG9uZyBmb3JtKQorbWJlZHRsc19hc24xX3dyaXRlX2xlbjoyNTU6IjgxRkYiOjI6MgorCitBU04uMSBXcml0ZSAvIFJlYWQgTGVuZ3RoICM1IChMZW4gPSAyNTUsIGJ1ZmZlciB0b28gc21hbGwpCittYmVkdGxzX2FzbjFfd3JpdGVfbGVuOjI1NToiODFGRiI6MTpNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwKKworQVNOLjEgV3JpdGUgLyBSZWFkIExlbmd0aCAjNiAoTGVuID0gMjU4LCBieXRlIG9yZGVyKQorbWJlZHRsc19hc24xX3dyaXRlX2xlbjoyNTg6IjgyMDEwMiI6MzozCisKK0FTTi4xIFdyaXRlIC8gUmVhZCBMZW5ndGggIzcgKExlbiA9IDY1NTM1LCBsb25nIGZvcm0pCittYmVkdGxzX2FzbjFfd3JpdGVfbGVuOjY1NTM1OiI4MkZGRkYiOjM6MworCitBU04uMSBXcml0ZSAvIFJlYWQgTGVuZ3RoICM4IChMZW4gPSA2NTUzNSwgYnVmZmVyIHRvbyBzbWFsbCkKK21iZWR0bHNfYXNuMV93cml0ZV9sZW46NjU1MzU6IjgyRkZGRiI6MjpNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwKKworQVNOLjEgV3JpdGUgLyBSZWFkIExlbmd0aCAjOSAoTGVuID0gNjYwNTEsIGJ5dGUgb3JkZXIpCittYmVkdGxzX2FzbjFfd3JpdGVfbGVuOjY2MDUxOiI4MzAxMDIwMyI6NDo0CisKK0FTTi4xIFdyaXRlIC8gUmVhZCBMZW5ndGggIzEwIChMZW4gPSAxNjc3NzIxNSwgbG9uZyBmb3JtKQorbWJlZHRsc19hc24xX3dyaXRlX2xlbjoxNjc3NzIxNToiODNGRkZGRkYiOjQ6NAorCitBU04uMSBXcml0ZSAvIFJlYWQgTGVuZ3RoICMxMSAoTGVuID0gMTY3NzcyMTUsIGJ1ZmZlciB0b28gc21hbGwpCittYmVkdGxzX2FzbjFfd3JpdGVfbGVuOjE2Nzc3MjE1OiI4M0ZGRkZGRiI6MzpNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwKKworQVNOLjEgV3JpdGUgLyBSZWFkIExlbmd0aCAjMTIgKExlbiA9IDE2OTA5MDYwLCBieXRlIG9yZGVyKQorbWJlZHRsc19hc24xX3dyaXRlX2xlbjoxNjkwOTA2MDoiODQwMTAyMDMwNCI6NTo1CisKK0FTTi4xIFdyaXRlIC8gUmVhZCBMZW5ndGggIzEyIChMZW4gPSAxNjkwOTA2MCwgYnVmZmVyIHRvbyBzbWFsbCkKK21iZWR0bHNfYXNuMV93cml0ZV9sZW46MTY5MDkwNjA6Ijg0MDEwMjAzMDQiOjQ6TUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXNuMXdyaXRlLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2FzbjF3cml0ZS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzVmZDhhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2FzbjF3cml0ZS5mdW5jdGlvbgpAQCAtMCwwICsxLDEzOCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9hc24xd3JpdGUuaCIKKworI2RlZmluZSBHVUFSRF9MRU4gNAorI2RlZmluZSBHVUFSRF9WQUwgMHgyYQorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19BU04xX1dSSVRFX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfYXNuMV93cml0ZV9vY3RldF9zdHJpbmcoIGNoYXIgKmhleF9zdHIsIGNoYXIgKmhleF9hc24xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1Zl9sZW4sIGludCByZXN1bHQgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTUwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHN0clsxNTBdID0geyAwIH07CisgICAgdW5zaWduZWQgY2hhciBhc24xWzE1MF0gPSB7IDAgfTsKKyAgICBzaXplX3Qgc3RyX2xlbiwgYXNuMV9sZW4sIGk7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKworICAgIG1lbXNldCggYnVmLCBHVUFSRF9WQUwsIHNpemVvZiggYnVmICkgKTsKKworICAgIHN0cl9sZW4gPSB1bmhleGlmeSggc3RyLCBoZXhfc3RyICk7CisgICAgYXNuMV9sZW4gPSB1bmhleGlmeSggYXNuMSwgaGV4X2FzbjEgKTsKKworICAgIHAgPSBidWYgKyBHVUFSRF9MRU4gKyBidWZfbGVuOworCisgICAgcmV0ID0gbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZyggJnAsIGJ1ZiArIEdVQVJEX0xFTiwgc3RyLCBzdHJfbGVuICk7CisKKyAgICAvKiBDaGVjayBmb3IgYnVmZmVyIG92ZXJ3cml0ZSBvbiBib3RoIHNpZGVzICovCisgICAgZm9yKCBpID0gMDsgaSA8IEdVQVJEX0xFTjsgaSsrICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBidWZbaV0gPT0gR1VBUkRfVkFMICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBidWZbR1VBUkRfTEVOICsgYnVmX2xlbiArIGldID09IEdVQVJEX1ZBTCApOworICAgIH0KKworICAgIGlmKCByZXN1bHQgPj0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggKHNpemVfdCkgcmV0ID09IGFzbjFfbGVuICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBwICsgYXNuMV9sZW4gPT0gYnVmICsgR1VBUkRfTEVOICsgYnVmX2xlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIHAsIGFzbjEsIGFzbjFfbGVuICkgPT0gMCApOworICAgIH0KK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19hc24xX3dyaXRlX2lhNV9zdHJpbmcoIGNoYXIgKnN0ciwgY2hhciAqaGV4X2FzbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1Zl9sZW4sIGludCByZXN1bHQgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTUwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFzbjFbMTUwXSA9IHsgMCB9OworICAgIHNpemVfdCBzdHJfbGVuLCBhc24xX2xlbiwgaTsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworCisgICAgbWVtc2V0KCBidWYsIEdVQVJEX1ZBTCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgc3RyX2xlbiA9IHN0cmxlbiggc3RyICk7CisgICAgYXNuMV9sZW4gPSB1bmhleGlmeSggYXNuMSwgaGV4X2FzbjEgKTsKKworICAgIHAgPSBidWYgKyBHVUFSRF9MRU4gKyBidWZfbGVuOworCisgICAgcmV0ID0gbWJlZHRsc19hc24xX3dyaXRlX2lhNV9zdHJpbmcoICZwLCBidWYgKyBHVUFSRF9MRU4sIHN0ciwgc3RyX2xlbiApOworCisgICAgLyogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyd3JpdGUgb24gYm90aCBzaWRlcyAqLworICAgIGZvciggaSA9IDA7IGkgPCBHVUFSRF9MRU47IGkrKyApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggYnVmW2ldID09IEdVQVJEX1ZBTCApOworICAgICAgICBURVNUX0FTU0VSVCggYnVmW0dVQVJEX0xFTiArIGJ1Zl9sZW4gKyBpXSA9PSBHVUFSRF9WQUwgKTsKKyAgICB9CisKKyAgICBpZiggcmVzdWx0ID49IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIChzaXplX3QpIHJldCA9PSBhc24xX2xlbiApOworICAgICAgICBURVNUX0FTU0VSVCggcCArIGFzbjFfbGVuID09IGJ1ZiArIEdVQVJEX0xFTiArIGJ1Zl9sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggbWVtY21wKCBwLCBhc24xLCBhc24xX2xlbiApID09IDAgKTsKKyAgICB9Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIGludCBsZW4sIGNoYXIgKmNoZWNrX3N0ciwgaW50IGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTUwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFzbjFbMTUwXTsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworICAgIHNpemVfdCBhc24xX2xlbiwgaSwgcmVhZF9sZW47CisKKyAgICBtZW1zZXQoIGJ1ZiwgR1VBUkRfVkFMLCBzaXplb2YoIGJ1ZiApICk7CisgICAgbWVtc2V0KCBhc24xLCAwLCBzaXplb2YoIGFzbjEgKSApOworICAgIGFzbjFfbGVuID0gdW5oZXhpZnkoIGFzbjEsIGNoZWNrX3N0ciApOworCisgICAgcCA9IGJ1ZiArIEdVQVJEX0xFTiArIGJ1Zl9sZW47CisKKyAgICByZXQgPSBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmcCwgYnVmICsgR1VBUkRfTEVOLCAoc2l6ZV90KSBsZW4gKTsKKworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gcmVzdWx0ICk7CisKKyAgICAvKiBDaGVjayBmb3IgYnVmZmVyIG92ZXJ3cml0ZSBvbiBib3RoIHNpZGVzICovCisgICAgZm9yKCBpID0gMDsgaSA8IEdVQVJEX0xFTjsgaSsrICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBidWZbaV0gPT0gR1VBUkRfVkFMICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBidWZbR1VBUkRfTEVOICsgYnVmX2xlbiArIGldID09IEdVQVJEX1ZBTCApOworICAgIH0KKworICAgIGlmKCByZXN1bHQgPj0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggKHNpemVfdCkgcmV0ID09IGFzbjFfbGVuICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBwICsgYXNuMV9sZW4gPT0gYnVmICsgR1VBUkRfTEVOICsgYnVmX2xlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIHAsIGFzbjEsIGFzbjFfbGVuICkgPT0gMCApOworCisgICAgICAgIC8qIFJlYWQgYmFjayB3aXRoIG1iZWR0bHNfYXNuMV9nZXRfbGVuKCkgdG8gY2hlY2sgKi8KKyAgICAgICAgcmV0ID0gbWJlZHRsc19hc24xX2dldF9sZW4oICZwLCBidWYgKyBHVUFSRF9MRU4gKyBidWZfbGVuLCAmcmVhZF9sZW4gKTsKKworICAgICAgICBpZiggbGVuID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFJldHVybiB3aWxsIGJlIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgYmVjYXVzZSB0aGUgcmVzdCBvZgorICAgICAgICAgICAgICogdGhlIGJ1ZmZlciBpcyBtaXNzaW5nCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworICAgICAgICB9CisgICAgICAgIFRFU1RfQVNTRVJUKCByZWFkX2xlbiA9PSAoc2l6ZV90KSBsZW4gKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHAgPT0gYnVmICsgR1VBUkRfTEVOICsgYnVmX2xlbiApOworICAgIH0KK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYmFzZTY0LmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYmFzZTY0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5OWZmYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9iYXNlNjQuZGF0YQpAQCAtMCwwICsxLDE3MiBAQAorVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2VuY29kZSAjMSBidWZmZXIganVzdCByaWdodAorbWJlZHRsc19iYXNlNjRfZW5jb2RlOiIiOiIiOjA6MAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZW5jb2RlICMyIGJ1ZmZlciBqdXN0IHJpZ2h0CittYmVkdGxzX2Jhc2U2NF9lbmNvZGU6ImYiOiJaZz09Ijo1OjAKKworVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2VuY29kZSAjMiBidWZmZXIgdG9vIHNtYWxsCittYmVkdGxzX2Jhc2U2NF9lbmNvZGU6ImYiOiJaZz09Ijo0Ok1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUgIzMgYnVmZmVyIGp1c3QgcmlnaHQKK21iZWR0bHNfYmFzZTY0X2VuY29kZToiZm8iOiJabTg9Ijo1OjAKKworVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2VuY29kZSAjMyBidWZmZXIgdG9vIHNtYWxsCittYmVkdGxzX2Jhc2U2NF9lbmNvZGU6ImZvIjoiWm04PSI6NDpNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZW5jb2RlICM0IGJ1ZmZlciBqdXN0IHJpZ2h0CittYmVkdGxzX2Jhc2U2NF9lbmNvZGU6ImZvbyI6IlptOXYiOjU6MAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZW5jb2RlICM0IGJ1ZmZlciB0b28gc21hbGwKK21iZWR0bHNfYmFzZTY0X2VuY29kZToiZm9vIjoiWm05diI6NDpNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZW5jb2RlICM1IGJ1ZmZlciBqdXN0IHJpZ2h0CittYmVkdGxzX2Jhc2U2NF9lbmNvZGU6ImZvb2IiOiJabTl2WWc9PSI6OTowCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUgIzUgYnVmZmVyIHRvbyBzbWFsbAorbWJlZHRsc19iYXNlNjRfZW5jb2RlOiJmb29iIjoiWm05dllnPT0iOjg6TUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwKKworVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2VuY29kZSAjNiBidWZmZXIganVzdCByaWdodAorbWJlZHRsc19iYXNlNjRfZW5jb2RlOiJmb29iYSI6IlptOXZZbUU9Ijo5OjAKKworVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2VuY29kZSAjNiBidWZmZXIgdG9vIHNtYWxsCittYmVkdGxzX2Jhc2U2NF9lbmNvZGU6ImZvb2JhIjoiWm05dlltRT0iOjg6TUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwKKworVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2VuY29kZSAjNyBidWZmZXIganVzdCByaWdodAorbWJlZHRsc19iYXNlNjRfZW5jb2RlOiJmb29iYXIiOiJabTl2WW1GeSI6OTowCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUgIzcgYnVmZmVyIHRvbyBzbWFsbAorbWJlZHRsc19iYXNlNjRfZW5jb2RlOiJmb29iYXIiOiJabTl2WW1GeSI6ODpNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZGVjb2RlICMxCittYmVkdGxzX2Jhc2U2NF9kZWNvZGU6IiI6IiI6MAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZGVjb2RlICMyCittYmVkdGxzX2Jhc2U2NF9kZWNvZGU6IlpnPT0iOiJmIjowCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUgIzMKK21iZWR0bHNfYmFzZTY0X2RlY29kZToiWm04PSI6ImZvIjowCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUgIzQKK21iZWR0bHNfYmFzZTY0X2RlY29kZToiWm05diI6ImZvbyI6MAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZGVjb2RlICM1CittYmVkdGxzX2Jhc2U2NF9kZWNvZGU6IlptOXZZZz09IjoiZm9vYiI6MAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZGVjb2RlICM2CittYmVkdGxzX2Jhc2U2NF9kZWNvZGU6IlptOXZZbUU9IjoiZm9vYmEiOjAKKworVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2RlY29kZSAjNworbWJlZHRsc19iYXNlNjRfZGVjb2RlOiJabTl2WW1GeSI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlIChJbGxlZ2FsIGNoYXJhY3RlcikKK21iZWR0bHNfYmFzZTY0X2RlY29kZToiem0jPSI6IiI6TUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK0Jhc2U2NCBkZWNvZGUgKFRvbyBtdWNoIGVxdWFsIHNpZ25zKQorbWJlZHRsc19iYXNlNjRfZGVjb2RlOiJ6bT09PSI6IiI6TUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK0Jhc2U2NCBkZWNvZGUgKEludmFsaWQgY2hhciBhZnRlciBlcXVhbCBzaWducykKK21iZWR0bHNfYmFzZTY0X2RlY29kZToiem09bWFzZCI6IiI6TUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK0Jhc2U2NCBkZWNvZGUgKFNwYWNlIGluc2lkZSBzdHJpbmcpCittYmVkdGxzX2Jhc2U2NF9kZWNvZGU6InptIG1hc2QiOiIiOk1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUgorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GeSIgKG5vIG5ld2xpbmUgbm9yICdcMCcgYXQgZW5kKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0Njc5IjoiZm9vYmFyIjowCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUZ5XG4iIChMRiBhdCBlbmQpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2NzkwYSI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GeVxyXG4iIChDUkxGIGF0IGVuZCkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDY3OTBkMGEiOiJmb29iYXIiOjAKKworQmFzZTY0IGRlY29kZSAiWm05dlltRnlcciIgKENSIGF0IGVuZCkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDY3OTBkIjoiIjpNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIKKworQmFzZTY0IGRlY29kZSAiWm05dlltRnkgIiAoU1AgYXQgZW5kKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0Njc5MjAiOiJmb29iYXIiOjAKKworQmFzZTY0IGRlY29kZSAiWm05dlltRnkgXG4iIChTUCtMRiBhdCBlbmQpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2NzkyMDBhIjoiZm9vYmFyIjowCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUZ5IFxyXG4iIChTUCtDUkxGIGF0IGVuZCkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDY3OTIwMGQwYSI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GeSBcciIgKFNQK0NSIGF0IGVuZCkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDY3OTIwMGQiOiIiOk1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUgorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GeSAgIiAoMlNQIGF0IGVuZCkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDY3OTIwMjAiOiJmb29iYXIiOjAKKworQmFzZTY0IGRlY29kZSAiWm05dlltRnkgIFxuIiAoMlNQK0xGIGF0IGVuZCkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDY3OTIwMjAwYSI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GeSAgXHJcbiIgKDJTUCtDUkxGIGF0IGVuZCkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDY3OTIwMjAwZDBhIjoiZm9vYmFyIjowCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUZ5ICBcciIgKDJTUCtDUiBhdCBlbmQpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2NzkyMDIwMGQiOiIiOk1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUgorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GXG55IiAoTEYgaW5zaWRlKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0NjBhNzkiOiJmb29iYXIiOjAKKworQmFzZTY0IGRlY29kZSAiWm05dlltRlxyeSIgKENSTEYgaW5zaWRlKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0NjBkMGE3OSI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GXHJ5IiAoQ1IgaW5zaWRlKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0NjBkNzkiOiIiOk1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUgorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GIHkiIChTUCBpbnNpZGUpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2MjA3OSI6IiI6TUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUYgXG55IiAoU1ArTEYgaW5zaWRlKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0NjIwMGE3OSI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GIFxyeSIgKFNQK0NSTEYgaW5zaWRlKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0NjIwMGQwYTc5IjoiZm9vYmFyIjowCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUYgXHJ5IiAoU1ArQ1IgaW5zaWRlKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0NjIwMGQ3OSI6IiI6TUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUYgIHkiICgyU1AgaW5zaWRlKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0NjIwMjA3OSI6IiI6TUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUYgIFxueSIgKDJTUCtMRiBpbnNpZGUpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2MjAyMDBhNzkiOiJmb29iYXIiOjAKKworQmFzZTY0IGRlY29kZSAiWm05dlltRiAgXHJ5IiAoMlNQK0NSTEYgaW5zaWRlKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0NjIwMjAwZDBhNzkiOiJmb29iYXIiOjAKKworQmFzZTY0IGRlY29kZSAiWm05dlltRiAgXHJ5IiAoMlNQK0NSIGluc2lkZSkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDYyMDIwMGQ3OSI6IiI6TUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK0Jhc2U2NCBlbmNvZGUgaGV4ICMxCitiYXNlNjRfZW5jb2RlX2hleDoiMDEwMjAzMDQwNTA2MDcwODA5IjoiQVFJREJBVUdCd2dKIjoxMzowCisKK0Jhc2U2NCBlbmNvZGUgaGV4ICMyIChidWZmZXIgdG9vIHNtYWxsKQorYmFzZTY0X2VuY29kZV9oZXg6IjAxMDIwMzA0MDUwNjA3MDgwOSI6IkFRSURCQVVHQndnSiI6MTI6TUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwKKworQmFzZTY0IGVuY29kZSBoZXggIzMKK2Jhc2U2NF9lbmNvZGVfaGV4OiIwMTAyMDMwNDA1MDYwNzA4IjoiQVFJREJBVUdCd2c9IjoxMzowCisKK0Jhc2U2NCBlbmNvZGUgaGV4ICM0CitiYXNlNjRfZW5jb2RlX2hleDoiMDEwMjAzMDQwNTA2MDciOiJBUUlEQkFVR0J3PT0iOjEzOjAKKworQmFzZTY0IGRlY29kZSBoZXggIzEKK2Jhc2U2NF9kZWNvZGVfaGV4OiJBUUlEQkFVR0J3Z0oiOiIwMTAyMDMwNDA1MDYwNzA4MDkiOjk6MAorCitCYXNlNjQgZGVjb2RlIGhleCAjMiAoYnVmZmVyIHRvbyBzbWFsbCkKK2Jhc2U2NF9kZWNvZGVfaGV4OiJBUUlEQkFVR0J3Z0oiOiIwMTAyMDMwNDA1MDYwNzA4MDkiOjg6TUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwKKworQmFzZTY0IGRlY29kZSBoZXggIzMKK2Jhc2U2NF9kZWNvZGVfaGV4OiJBUUlEQkFVR0J3Zz0iOiIwMTAyMDMwNDA1MDYwNzA4Ijo4OjAKKworQmFzZTY0IGRlY29kZSBoZXggIzQKK2Jhc2U2NF9kZWNvZGVfaGV4OiJBUUlEQkFVR0J3PT0iOiIwMTAyMDMwNDA1MDYwNyI6NzowCisKK0Jhc2U2NCBkZWNvZGUgaGV4ICM1IChidWZmZXIgdG9vIHNtYWxsKQorYmFzZTY0X2RlY29kZV9oZXg6IkFRSURCQVVHQnc9PSI6IjAxMDIwMzA0MDUwNjA3Ijo2Ok1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMCisKK0Jhc2U2NCBTZWxmdGVzdAorZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVAorYmFzZTY0X3NlbGZ0ZXN0OgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYmFzZTY0LmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jhc2U2NC5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2ZhN2ZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jhc2U2NC5mdW5jdGlvbgpAQCAtMCwwICsxLDEyNCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9iYXNlNjQuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfQkFTRTY0X0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfYmFzZTY0X2VuY29kZSggY2hhciAqc3JjX3N0cmluZywgY2hhciAqZHN0X3N0cmluZywgaW50IGRzdF9idWZfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDAwXTsKKyAgICBzaXplX3QgbGVuOworCisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDAwKTsKKworICAgIHN0cm5jcHkoIChjaGFyICopIHNyY19zdHIsIHNyY19zdHJpbmcsIHNpemVvZihzcmNfc3RyKSAtIDEgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19iYXNlNjRfZW5jb2RlKCBkc3Rfc3RyLCBkc3RfYnVmX3NpemUsICZsZW4sIHNyY19zdHIsIHN0cmxlbiggKGNoYXIgKikgc3JjX3N0ciApICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGRzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgfQorfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUoIGNoYXIgKnNyY19zdHJpbmcsIGNoYXIgKmRzdF9zdHJpbmcsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwMF07CisgICAgc2l6ZV90IGxlbjsKKyAgICBpbnQgcmVzOworCisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDAwKTsKKworICAgIHN0cm5jcHkoIChjaGFyICopIHNyY19zdHIsIHNyY19zdHJpbmcsIHNpemVvZihzcmNfc3RyKSAtIDEgKTsKKyAgICByZXMgPSBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUoIGRzdF9zdHIsIHNpemVvZiggZHN0X3N0ciApLCAmbGVuLCBzcmNfc3RyLCBzdHJsZW4oIChjaGFyICopIHNyY19zdHIgKSApOworICAgIFRFU1RfQVNTRVJUKCByZXMgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGRzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgfQorfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBiYXNlNjRfZW5jb2RlX2hleCggY2hhciAqc3JjX2hleCwgY2hhciAqZHN0LCBpbnQgZHN0X2J1Zl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciAqc3JjID0gTlVMTCwgKnJlcyA9IE5VTEw7CisgICAgc2l6ZV90IGxlbiwgc3JjX2xlbjsKKworICAgIHNyYyA9IHVuaGV4aWZ5X2FsbG9jKCBzcmNfaGV4LCAmc3JjX2xlbiApOworICAgIHJlcyA9IHplcm9fYWxsb2MoIGRzdF9idWZfc2l6ZSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmFzZTY0X2VuY29kZSggcmVzLCBkc3RfYnVmX3NpemUsICZsZW4sIHNyYywgc3JjX2xlbiApID09IHJlc3VsdCApOworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbGVuID09IHN0cmxlbiggZHN0ICkgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggZHN0LCByZXMsIGxlbiApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19mcmVlKCBzcmMgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIHJlcyApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBiYXNlNjRfZGVjb2RlX2hleCggY2hhciAqc3JjLCBjaGFyICpkc3RfaGV4LCBpbnQgZHN0X2J1Zl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciAqZHN0ID0gTlVMTCwgKnJlcyA9IE5VTEw7CisgICAgc2l6ZV90IGxlbiwgZHN0X2xlbjsKKworICAgIGRzdCA9IHVuaGV4aWZ5X2FsbG9jKCBkc3RfaGV4LCAmZHN0X2xlbiApOworICAgIHJlcyA9IHplcm9fYWxsb2MoIGRzdF9idWZfc2l6ZSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmFzZTY0X2RlY29kZSggcmVzLCBkc3RfYnVmX3NpemUsICZsZW4sICh1bnNpZ25lZCBjaGFyICopIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBzcmMgKSApID09IHJlc3VsdCApOworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbGVuID09IGRzdF9sZW4gKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggZHN0LCByZXMsIGxlbiApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19mcmVlKCBkc3QgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIHJlcyApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBiYXNlNjRfZGVjb2RlX2hleF9zcmMoIGNoYXIgKnNyY19oZXgsIGNoYXIgKmRzdF9yZWYsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgZHN0WzEwMDBdID0geyAwIH07CisgICAgdW5zaWduZWQgY2hhciAqc3JjOworICAgIHNpemVfdCBzcmNfbGVuLCBsZW47CisKKyAgICBzcmMgPSB1bmhleGlmeV9hbGxvYyggc3JjX2hleCwgJnNyY19sZW4gKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUoIGRzdCwgc2l6ZW9mKCBkc3QgKSwgJmxlbiwgc3JjLCBzcmNfbGVuICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBsZW4gPT0gc3RybGVuKCBkc3RfcmVmICkgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggZHN0LCBkc3RfcmVmLCBsZW4gKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZnJlZSggc3JjICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgYmFzZTY0X3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19iYXNlNjRfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9ibG93ZmlzaC5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jsb3dmaXNoLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhMzExZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9ibG93ZmlzaC5kYXRhCkBAIC0wLDAgKzEsMzA4IEBACitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAiOiI0ZWY5OTc0NTYxOThkZDc4IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzIKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmIjoiZmZmZmZmZmZmZmZmZmZmZiI6IjUxODY2ZmQ1Yjg1ZWNiOGEiOjAKKworQkxPV0ZJU0gtRUNCIEVuY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjMworYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjMwMDAwMDAwMDAwMDAwMDAiOiIxMDAwMDAwMDAwMDAwMDAxIjoiN2Q4NTZmOWE2MTMwNjNmMiI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICM0CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMTExMTExMTExMTExMTExMSI6IjExMTExMTExMTExMTExMTEiOiIyNDY2ZGQ4NzhiOTYzYzlkIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzUKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiIwMTIzNDU2Nzg5YWJjZGVmIjoiMTExMTExMTExMTExMTExMSI6IjYxZjljMzgwMjI4MWIwOTYiOjAKKworQkxPV0ZJU0gtRUNCIEVuY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjNgorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjExMTExMTExMTExMTExMTEiOiIwMTIzNDU2Nzg5YWJjZGVmIjoiN2QwY2M2MzBhZmRhMWVjNyI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICM3CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAiOiI0ZWY5OTc0NTYxOThkZDc4IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzgKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmZWRjYmE5ODc2NTQzMjEwIjoiMDEyMzQ1Njc4OWFiY2RlZiI6IjBhY2VhYjBmYzZhMGEyOGQiOjAKKworQkxPV0ZJU0gtRUNCIEVuY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjOQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjdjYTExMDQ1NGExYTZlNTciOiIwMWExZDZkMDM5Nzc2NzQyIjoiNTljNjgyNDVlYjA1MjgyYiI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxMAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjAxMzFkOTYxOWRjMTM3NmUiOiI1Y2Q1NGNhODNkZWY1N2RhIjoiYjFiOGNjMGIyNTBmMDlhMCI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxMQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjA3YTExMzNlNGEwYjI2ODYiOiIwMjQ4ZDQzODA2ZjY3MTcyIjoiMTczMGU1Nzc4YmVhMWRhNCI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxMgorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjM4NDk2NzRjMjYwMjMxOWUiOiI1MTQ1NGI1ODJkZGY0NDBhIjoiYTI1ZTc4NTZjZjI2NTFlYiI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxMworYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjA0YjkxNWJhNDNmZWI1YjYiOiI0MmZkNDQzMDU5NTc3ZmEyIjoiMzUzODgyYjEwOWNlOGYxYSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxNAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjAxMTNiOTcwZmQzNGYyY2UiOiIwNTliNWUwODUxY2YxNDNhIjoiNDhmNGQwODg0YzM3OTkxOCI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxNQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjAxNzBmMTc1NDY4ZmI1ZTYiOiIwNzU2ZDhlMDc3NDc2MWQyIjoiNDMyMTkzYjc4OTUxZmM5OCI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxNgorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjQzMjk3ZmFkMzhlMzczZmUiOiI3NjI1MTRiODI5YmY0ODZhIjoiMTNmMDQxNTRkNjlkMWFlNSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxNworYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjA3YTcxMzcwNDVkYTJhMTYiOiIzYmRkMTE5MDQ5MzcyODAyIjoiMmVlZGRhOTNmZmQzOWM3OSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxOAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjA0Njg5MTA0YzJmZDNiMmYiOiIyNjk1NWY2ODM1YWY2MDlhIjoiZDg4N2UwMzkzYzJkYTZlMyI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxOQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjM3ZDA2YmI1MTZjYjc1NDYiOiIxNjRkNWU0MDRmMjc1MjMyIjoiNWY5OWQwNGY1YjE2Mzk2OSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyMAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjFmMDgyNjBkMWFjMjQ2NWUiOiI2YjA1NmUxODc1OWY1Y2NhIjoiNGEwNTdhM2IyNGQzOTc3YiI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyMQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjU4NDAyMzY0MWFiYTYxNzYiOiIwMDRiZDZlZjA5MTc2MDYyIjoiNDUyMDMxYzFlNGZhZGE4ZSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyMgorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjAyNTgxNjE2NDYyOWIwMDciOiI0ODBkMzkwMDZlZTc2MmYyIjoiNzU1NWFlMzlmNTliODdiZCI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyMworYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjQ5NzkzZWJjNzliMzI1OGYiOiI0Mzc1NDBjODY5OGYzY2ZhIjoiNTNjNTVmOWNiNDlmYzAxOSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyNAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjRmYjA1ZTE1MTVhYjczYTciOiIwNzJkNDNhMDc3MDc1MjkyIjoiN2E4ZTdiZmE5MzdlODlhMyI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyNQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjQ5ZTk1ZDZkNGNhMjI5YmYiOiIwMmZlNTU3NzgxMTdmMTJhIjoiY2Y5YzVkN2E0OTg2YWRiNSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyNgorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjAxODMxMGRjNDA5YjI2ZDYiOiIxZDlkNWM1MDE4ZjcyOGMyIjoiZDFhYmIyOTA2NThiYzc3OCI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyNworYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjFjNTg3ZjFjMTM5MjRmZWYiOiIzMDU1MzIyODZkNmYyOTVhIjoiNTVjYjM3NzRkMTNlZjIwMSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyOAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjAxMDEwMTAxMDEwMTAxMDEiOiIwMTIzNDU2Nzg5YWJjZGVmIjoiZmEzNGVjNDg0N2IyNjhiMiI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyOQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjFmMWYxZjFmMGUwZTBlMGUiOiIwMTIzNDU2Nzg5YWJjZGVmIjoiYTc5MDc5NTEwOGVhM2NhZSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzMAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImUwZmVlMGZlZjFmZWYxZmUiOiIwMTIzNDU2Nzg5YWJjZGVmIjoiYzM5ZTA3MmQ5ZmFjNjMxZCI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzMQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmIjoiMDE0OTMzZTBjZGFmZjZlNCI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzMgorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmYiOiIwMDAwMDAwMDAwMDAwMDAwIjoiZjIxZTlhNzdiNzFjNDliYyI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzMworYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjAxMjM0NTY3ODlhYmNkZWYiOiIwMDAwMDAwMDAwMDAwMDAwIjoiMjQ1OTQ2ODg1NzU0MzY5YSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzNAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImZlZGNiYTk4NzY1NDMyMTAiOiJmZmZmZmZmZmZmZmZmZmZmIjoiNmI1YzVhOWM1ZDllMGE1YSI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMCI6IjRlZjk5NzQ1NjE5OGRkNzgiOiIwMDAwMDAwMDAwMDAwMDAwIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzIKK2Jsb3dmaXNoX2RlY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmIjoiNTE4NjZmZDViODVlY2I4YSI6ImZmZmZmZmZmZmZmZmZmZmYiOjAKKworQkxPV0ZJU0gtRUNCIERlY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjMworYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjMwMDAwMDAwMDAwMDAwMDAiOiI3ZDg1NmY5YTYxMzA2M2YyIjoiMTAwMDAwMDAwMDAwMDAwMSI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICM0CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMTExMTExMTExMTExMTExMSI6IjI0NjZkZDg3OGI5NjNjOWQiOiIxMTExMTExMTExMTExMTExIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzUKK2Jsb3dmaXNoX2RlY3J5cHRfZWNiOiIwMTIzNDU2Nzg5YWJjZGVmIjoiNjFmOWMzODAyMjgxYjA5NiI6IjExMTExMTExMTExMTExMTEiOjAKKworQkxPV0ZJU0gtRUNCIERlY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjNgorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjExMTExMTExMTExMTExMTEiOiI3ZDBjYzYzMGFmZGExZWM3IjoiMDEyMzQ1Njc4OWFiY2RlZiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICM3CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMCI6IjRlZjk5NzQ1NjE5OGRkNzgiOiIwMDAwMDAwMDAwMDAwMDAwIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzgKK2Jsb3dmaXNoX2RlY3J5cHRfZWNiOiJmZWRjYmE5ODc2NTQzMjEwIjoiMGFjZWFiMGZjNmEwYTI4ZCI6IjAxMjM0NTY3ODlhYmNkZWYiOjAKKworQkxPV0ZJU0gtRUNCIERlY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjOQorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjdjYTExMDQ1NGExYTZlNTciOiI1OWM2ODI0NWViMDUyODJiIjoiMDFhMWQ2ZDAzOTc3Njc0MiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxMAorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjAxMzFkOTYxOWRjMTM3NmUiOiJiMWI4Y2MwYjI1MGYwOWEwIjoiNWNkNTRjYTgzZGVmNTdkYSI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxMQorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjA3YTExMzNlNGEwYjI2ODYiOiIxNzMwZTU3NzhiZWExZGE0IjoiMDI0OGQ0MzgwNmY2NzE3MiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxMgorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjM4NDk2NzRjMjYwMjMxOWUiOiJhMjVlNzg1NmNmMjY1MWViIjoiNTE0NTRiNTgyZGRmNDQwYSI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxMworYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjA0YjkxNWJhNDNmZWI1YjYiOiIzNTM4ODJiMTA5Y2U4ZjFhIjoiNDJmZDQ0MzA1OTU3N2ZhMiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxNAorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjAxMTNiOTcwZmQzNGYyY2UiOiI0OGY0ZDA4ODRjMzc5OTE4IjoiMDU5YjVlMDg1MWNmMTQzYSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxNQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjAxNzBmMTc1NDY4ZmI1ZTYiOiIwNzU2ZDhlMDc3NDc2MWQyIjoiNDMyMTkzYjc4OTUxZmM5OCI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxNgorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjQzMjk3ZmFkMzhlMzczZmUiOiIxM2YwNDE1NGQ2OWQxYWU1IjoiNzYyNTE0YjgyOWJmNDg2YSI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxNworYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjA3YTcxMzcwNDVkYTJhMTYiOiIyZWVkZGE5M2ZmZDM5Yzc5IjoiM2JkZDExOTA0OTM3MjgwMiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxOAorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjA0Njg5MTA0YzJmZDNiMmYiOiJkODg3ZTAzOTNjMmRhNmUzIjoiMjY5NTVmNjgzNWFmNjA5YSI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMxOQorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjM3ZDA2YmI1MTZjYjc1NDYiOiI1Zjk5ZDA0ZjViMTYzOTY5IjoiMTY0ZDVlNDA0ZjI3NTIzMiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyMAorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjFmMDgyNjBkMWFjMjQ2NWUiOiI0YTA1N2EzYjI0ZDM5NzdiIjoiNmIwNTZlMTg3NTlmNWNjYSI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyMQorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjU4NDAyMzY0MWFiYTYxNzYiOiI0NTIwMzFjMWU0ZmFkYThlIjoiMDA0YmQ2ZWYwOTE3NjA2MiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyMgorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjAyNTgxNjE2NDYyOWIwMDciOiI3NTU1YWUzOWY1OWI4N2JkIjoiNDgwZDM5MDA2ZWU3NjJmMiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyMworYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjQ5NzkzZWJjNzliMzI1OGYiOiI1M2M1NWY5Y2I0OWZjMDE5IjoiNDM3NTQwYzg2OThmM2NmYSI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyNAorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjRmYjA1ZTE1MTVhYjczYTciOiI3YThlN2JmYTkzN2U4OWEzIjoiMDcyZDQzYTA3NzA3NTI5MiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyNQorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjQ5ZTk1ZDZkNGNhMjI5YmYiOiJjZjljNWQ3YTQ5ODZhZGI1IjoiMDJmZTU1Nzc4MTE3ZjEyYSI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyNgorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjAxODMxMGRjNDA5YjI2ZDYiOiJkMWFiYjI5MDY1OGJjNzc4IjoiMWQ5ZDVjNTAxOGY3MjhjMiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyNworYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjFjNTg3ZjFjMTM5MjRmZWYiOiI1NWNiMzc3NGQxM2VmMjAxIjoiMzA1NTMyMjg2ZDZmMjk1YSI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyOAorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjAxMDEwMTAxMDEwMTAxMDEiOiJmYTM0ZWM0ODQ3YjI2OGIyIjoiMDEyMzQ1Njc4OWFiY2RlZiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMyOQorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjFmMWYxZjFmMGUwZTBlMGUiOiJhNzkwNzk1MTA4ZWEzY2FlIjoiMDEyMzQ1Njc4OWFiY2RlZiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzMAorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6ImUwZmVlMGZlZjFmZWYxZmUiOiJjMzllMDcyZDlmYWM2MzFkIjoiMDEyMzQ1Njc4OWFiY2RlZiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzMQorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAiOiIwMTQ5MzNlMGNkYWZmNmU0IjoiZmZmZmZmZmZmZmZmZmZmZiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzMgorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmYiOiJmMjFlOWE3N2I3MWM0OWJjIjoiMDAwMDAwMDAwMDAwMDAwMCI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzMworYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjAxMjM0NTY3ODlhYmNkZWYiOiIyNDU5NDY4ODU3NTQzNjlhIjoiMDAwMDAwMDAwMDAwMDAwMCI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzNAorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6ImZlZGNiYTk4NzY1NDMyMTAiOiI2YjVjNWE5YzVkOWUwYTVhIjoiZmZmZmZmZmZmZmZmZmZmZiI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzEKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMCI6ImZlZGNiYTk4NzY1NDMyMTAiOiIiOk1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfS0VZX0xFTkdUSAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzIKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxIjoiZmVkY2JhOTg3NjU0MzIxMCI6IiI6TUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9LRVlfTEVOR1RICisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMworYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMiI6ImZlZGNiYTk4NzY1NDMyMTAiOiIiOk1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfS0VZX0xFTkdUSAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzQKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjMyI6ImZlZGNiYTk4NzY1NDMyMTAiOiJiZTFlNjM5NDA4NjQwZjA1IjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjNQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzYjQiOiJmZWRjYmE5ODc2NTQzMjEwIjoiYjM5ZTQ0NDgxYmRiMWU2ZSI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzYKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTUiOiJmZWRjYmE5ODc2NTQzMjEwIjoiOTQ1N2FhODNiMTkyOGMwZCI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzcKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5NiI6ImZlZGNiYTk4NzY1NDMyMTAiOiI4YmI3NzAzMmY5NjA2MjlkIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjOAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzYjRhNTk2ODciOiJmZWRjYmE5ODc2NTQzMjEwIjoiZTg3YTI0NGUyY2M4NWU4MiI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzkKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3NzgiOiJmZWRjYmE5ODc2NTQzMjEwIjoiMTU3NTBlN2E0ZjRlYzU3NyI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzEwCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4NjkiOiJmZWRjYmE5ODc2NTQzMjEwIjoiMTIyYmE3MGIzYWI2NGFlMCI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzExCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4Njk1YSI6ImZlZGNiYTk4NzY1NDMyMTAiOiIzYTgzM2M5YWZmYzUzN2Y2IjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMTIKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIiOiJmZWRjYmE5ODc2NTQzMjEwIjoiOTQwOWRhODdhOTBmNmJmMiI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzEzCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4Njk1YTRiM2MiOiJmZWRjYmE5ODc2NTQzMjEwIjoiODg0ZjgwNjI1MDYwYjhiNCI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzE0CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4Njk1YTRiM2MyZCI6ImZlZGNiYTk4NzY1NDMyMTAiOiIxZjg1MDMxYzE5ZTExOTY4IjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMTUKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUiOiJmZWRjYmE5ODc2NTQzMjEwIjoiNzlkOTM3M2E3MTRjYTM0ZiI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzE2CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4Njk1YTRiM2MyZDFlMGYiOiJmZWRjYmE5ODc2NTQzMjEwIjoiOTMxNDI4ODdlZTNiZTE1YyI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzE3CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4Njk1YTRiM2MyZDFlMGYwMCI6ImZlZGNiYTk4NzY1NDMyMTAiOiIwMzQyOWU4MzhjZTJkMTRiIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMTgKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZjAwMTEiOiJmZWRjYmE5ODc2NTQzMjEwIjoiYTQyOTllMjc0NjlmZjY3YiI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzE5CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4Njk1YTRiM2MyZDFlMGYwMDExMjIiOiJmZWRjYmE5ODc2NTQzMjEwIjoiYWZkNWFlZDFjMWJjOTZhOCI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzIwCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4Njk1YTRiM2MyZDFlMGYwMDExMjIzMyI6ImZlZGNiYTk4NzY1NDMyMTAiOiIxMDg1MWMwZTM4NThkYTlmIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMjEKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZjAwMTEyMjMzNDQiOiJmZWRjYmE5ODc2NTQzMjEwIjoiZTZmNTFlZDc5YjlkYjIxZiI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzIyCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4Njk1YTRiM2MyZDFlMGYwMDExMjIzMzQ0NTUiOiJmZWRjYmE5ODc2NTQzMjEwIjoiNjRhNmUxNGFmZDM2YjQ2ZiI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IFNTTGVheSByZWZlcmVuY2UgIzIzCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4Njk1YTRiM2MyZDFlMGYwMDExMjIzMzQ0NTU2NiI6ImZlZGNiYTk4NzY1NDMyMTAiOiI4MGM3ZDdkNDVhNTQ3OWFkIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMjQKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZjAwMTEyMjMzNDQ1NTY2NzciOiJmZWRjYmE5ODc2NTQzMjEwIjoiMDUwNDRiNjJmYTUyZDA4MCI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IDQ0MCBiaXRzCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4Njk1YTRiM2MyZDFlMGYwMDExMjIzMzQ0NTU2Njc3ODg5OWFhYmJjY2RkZWVmZjAxMjM0NTY3ODlhYmNkZWYwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiJmZWRjYmE5ODc2NTQzMjEwIjoiOWEyYWI4ZjFiMDBjNzNkMiI6MAorCitCTE9XRklTSC1TRVRLRVkgU2V0a2V5IDQ0OCBiaXRzCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4Nzc4Njk1YTRiM2MyZDFlMGYwMDExMjIzMzQ0NTU2Njc3ODg5OWFhYmJjY2RkZWVmZjAxMjM0NTY3ODlhYmNkZWYwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGZmZiI6ImZlZGNiYTk4NzY1NDMyMTAiOiIyZmIzYWI3ZjBlZTkxYjY5IjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgNDU2IGJpdHMKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZjAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmMDEyMzQ1Njc4OWFiY2RlZjAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZmZmZmYiOiJmZWRjYmE5ODc2NTQzMjEwIjoiIjpNQkVEVExTX0VSUl9CTE9XRklTSF9JTlZBTElEX0tFWV9MRU5HVEgKKworQkxPV0ZJU0gtQ0JDIEVuY3J5cHQKK2Jsb3dmaXNoX2VuY3J5cHRfY2JjOiIwMTIzNDU2Nzg5QUJDREVGRjBFMUQyQzNCNEE1OTY4NyI6IkZFRENCQTk4NzY1NDMyMTAiOiIzNzM2MzUzNDMzMzIzMTIwNEU2Rjc3MjA2OTczMjA3NDY4NjUyMDc0Njk2RDY1MjA2NjZGNzIyMDAwMDAwMDAwIjoiNmI3N2I0ZDYzMDA2ZGVlNjA1YjE1NmUyNzQwMzk3OTM1OGRlYjllNzE1NDYxNmQ5NTlmMTY1MmJkNWZmOTJjYyI6MAorCitCTE9XRklTSC1DQkMgRGVjcnlwdAorYmxvd2Zpc2hfZGVjcnlwdF9jYmM6IjAxMjM0NTY3ODlBQkNERUZGMEUxRDJDM0I0QTU5Njg3IjoiRkVEQ0JBOTg3NjU0MzIxMCI6IjZCNzdCNEQ2MzAwNkRFRTYwNUIxNTZFMjc0MDM5NzkzNThERUI5RTcxNTQ2MTZEOTU5RjE2NTJCRDVGRjkyQ0MiOiIzNzM2MzUzNDMzMzIzMTIwNGU2Zjc3MjA2OTczMjA3NDY4NjUyMDc0Njk2ZDY1MjA2NjZmNzIyMDAwMDAwMDAwIjowCisKK0JMT1dGSVNILUNCQyBFbmNyeXB0CitibG93ZmlzaF9lbmNyeXB0X2NiYzoiMDEyMzQ1Njc4OUFCQ0RFRkYwRTFEMkMzQjRBNTk2ODciOiJGRURDQkE5ODc2NTQzMjEwIjoiMzczNjM1MzQzMzMyMzEyMDRFNkY3NzIwNjk3MzIwNzQ2ODY1MjA3NDY5NkQ2NTIwNjY2RjcyMjAwMDAwMDAiOiIiOk1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfSU5QVVRfTEVOR1RICisKK0JMT1dGSVNILUNCQyBEZWNyeXB0CitibG93ZmlzaF9kZWNyeXB0X2NiYzoiMDEyMzQ1Njc4OUFCQ0RFRkYwRTFEMkMzQjRBNTk2ODciOiJGRURDQkE5ODc2NTQzMjEwIjoiNkI3N0I0RDYzMDA2REVFNjA1QjE1NkUyNzQwMzk3OTM1OERFQjlFNzE1NDYxNkQ5NTlGMTY1MkJENUZGOTJDQzAwIjoiIjpNQkVEVExTX0VSUl9CTE9XRklTSF9JTlZBTElEX0lOUFVUX0xFTkdUSAorCitCTE9XRklTSC1DRkIgRW5jcnlwdAorYmxvd2Zpc2hfZW5jcnlwdF9jZmI2NDoiMDEyMzQ1Njc4OUFCQ0RFRkYwRTFEMkMzQjRBNTk2ODciOiJGRURDQkE5ODc2NTQzMjEwIjoiMzczNjM1MzQzMzMyMzEyMDRFNkY3NzIwNjk3MzIwNzQ2ODY1MjA3NDY5NkQ2NTIwNjY2RjcyMjAwMCI6ImU3MzIxNGEyODIyMTM5Y2FmMjZlY2Y2ZDJlYjllNzZlM2RhM2RlMDRkMTUxNzIwMDUxOWQ1N2E2YzMiCisKK0JMT1dGSVNILUNGQiBEZWNyeXB0CitibG93ZmlzaF9kZWNyeXB0X2NmYjY0OiIwMTIzNDU2Nzg5QUJDREVGRjBFMUQyQzNCNEE1OTY4NyI6IkZFRENCQTk4NzY1NDMyMTAiOiJFNzMyMTRBMjgyMjEzOUNBRjI2RUNGNkQyRUI5RTc2RTNEQTNERTA0RDE1MTcyMDA1MTlENTdBNkMzIjoiMzczNjM1MzQzMzMyMzEyMDRlNmY3NzIwNjk3MzIwNzQ2ODY1MjA3NDY5NmQ2NTIwNjY2ZjcyMjAwMCIKKworQkxPV0ZJU0gtQ1RSIEVuY3J5cHQKK2Jsb3dmaXNoX2VuY3J5cHRfY3RyOiIwMTIzNDU2Nzg5QUJDREVGRjBFMUQyQzNCNEE1OTY4NyI6IkZFRENCQTk4NzY1NDMyMTAiOiIzNzM2MzUzNDMzMzIzMTIwNEU2Rjc3MjA2OTczMjA3NDY4NjUyMDc0Njk2RDY1MjA2NjZGNzIyMDAwIjoiZTczMjE0YTI4MjIxMzljYTYwMjU0NzQwZGQ4YzViOGFjZjVlOTU2OWM0YWZmZWI5NDRiOGZjMDIwZSIKKworQkxPV0ZJU0gtQ1RSIERlY3J5cHQKK2Jsb3dmaXNoX2VuY3J5cHRfY3RyOiIwMTIzNDU2Nzg5QUJDREVGRjBFMUQyQzNCNEE1OTY4NyI6IkZFRENCQTk4NzY1NDMyMTAiOiJlNzMyMTRhMjgyMjEzOWNhNjAyNTQ3NDBkZDhjNWI4YWNmNWU5NTY5YzRhZmZlYjk0NGI4ZmMwMjBlIjoiMzczNjM1MzQzMzMyMzEyMDRlNmY3NzIwNjk3MzIwNzQ2ODY1MjA3NDY5NmQ2NTIwNjY2ZjcyMjAwMCIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9ibG93ZmlzaC5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9ibG93ZmlzaC5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2MyMjUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jsb3dmaXNoLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMjYwIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2Jsb3dmaXNoLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGJsb3dmaXNoX2VuY3J5cHRfZWNiKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZywgaW50IHNldGtleV9yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0IGN0eDsKKyAgICBpbnQga2V5X2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19ibG93ZmlzaF9pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICkgPT0gc2V0a2V5X3Jlc3VsdCApOworICAgIGlmKCBzZXRrZXlfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCAmY3R4LCBNQkVEVExTX0JMT1dGSVNIX0VOQ1JZUFQsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIDggKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGJsb3dmaXNoX2RlY3J5cHRfZWNiKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZywgaW50IHNldGtleV9yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0IGN0eDsKKyAgICBpbnQga2V5X2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19ibG93ZmlzaF9pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICkgPT0gc2V0a2V5X3Jlc3VsdCApOworICAgIGlmKCBzZXRrZXlfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCAmY3R4LCBNQkVEVExTX0JMT1dGSVNIX0RFQ1JZUFQsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIDggKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KK3ZvaWQgYmxvd2Zpc2hfZW5jcnlwdF9jYmMoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuLCBkYXRhX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgZGF0YV9sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfYmxvd2Zpc2hfc2V0a2V5KCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2JjKCAmY3R4LCBNQkVEVExTX0JMT1dGSVNIX0VOQ1JZUFQsIGRhdGFfbGVuICwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSBjYmNfcmVzdWx0ICk7CisgICAgaWYoIGNiY19yZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgZGF0YV9sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KK3ZvaWQgYmxvd2Zpc2hfZGVjcnlwdF9jYmMoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuLCBkYXRhX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgZGF0YV9sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfYmxvd2Zpc2hfc2V0a2V5KCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NiYyggJmN0eCwgTUJFRFRMU19CTE9XRklTSF9ERUNSWVBULCBkYXRhX2xlbiAsIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gY2JjX3Jlc3VsdCApOworICAgIGlmKCBjYmNfcmVzdWx0ID09IDApCisgICAgeworICAgICAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgZGF0YV9sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KK3ZvaWQgYmxvd2Zpc2hfZW5jcnlwdF9jZmI2NCggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCBjdHg7CisgICAgc2l6ZV90IGl2X29mZnNldCA9IDA7CisgICAgaW50IGtleV9sZW4sIHNyY19sZW47CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19ibG93ZmlzaF9pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGl2X3N0ciwgaGV4X2l2X3N0cmluZyApOworICAgIHNyY19sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfYmxvd2Zpc2hfc2V0a2V5KCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NmYjY0KCAmY3R4LCBNQkVEVExTX0JMT1dGSVNIX0VOQ1JZUFQsIHNyY19sZW4sICZpdl9vZmZzZXQsIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBzcmNfbGVuICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwordm9pZCBibG93ZmlzaF9kZWNyeXB0X2NmYjY0KCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X2l2X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgaXZfb2Zmc2V0ID0gMDsKKyAgICBpbnQga2V5X2xlbiwgc3JjX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2ZiNjQoICZjdHgsIE1CRURUTFNfQkxPV0ZJU0hfREVDUllQVCwgc3JjX2xlbiwgJml2X29mZnNldCwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19sZW4gKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfYmxvd2Zpc2hfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCit2b2lkIGJsb3dmaXNoX2VuY3J5cHRfY3RyKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X2l2X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHN0cmVhbV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCBjdHg7CisgICAgc2l6ZV90IGl2X29mZnNldCA9IDA7CisgICAgaW50IGtleV9sZW4sIHNyY19sZW47CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzdHJlYW1fc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19ibG93ZmlzaF9pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGl2X3N0ciwgaGV4X2l2X3N0cmluZyApOworICAgIHNyY19sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfYmxvd2Zpc2hfc2V0a2V5KCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2N0ciggJmN0eCwgc3JjX2xlbiwgJml2X29mZnNldCwgaXZfc3RyLCBzdHJlYW1fc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19sZW4gKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfYmxvd2Zpc2hfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jYW1lbGxpYS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NhbWVsbGlhLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyOTgzOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jYW1lbGxpYS5kYXRhCkBAIC0wLDAgKzEsMjAxIEBACitDYW1lbGxpYS0xMjgtRUNCIEVuY3J5cHQgUkZDMzcxMyAjMQorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwIjoiMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAiOiI2NzY3MzEzODU0OTY2OTczMDg1NzA2NTY0OGVhYmU0MyI6MAorCitDYW1lbGxpYS0xOTItRUNCIEVuY3J5cHQgUkZDMzcxMyAjMQorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwMDAxMTIyMzM0NDU1NjY3NyI6IjAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwIjoiYjQ5OTM0MDFiM2U5OTZmODRlZTVjZWU3ZDc5YjA5YjkiOjAKKworQ2FtZWxsaWEtMjU2LUVDQiBFbmNyeXB0IFJGQzM3MTMgIzEKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiIwMTIzNDU2Nzg5YWJjZGVmZmVkY2JhOTg3NjU0MzIxMDAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmIjoiMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAiOiI5YWNjMjM3ZGZmMTZkNzZjMjBlZjdjOTE5ZTNhNzUwOSI6MAorCitDYW1lbGxpYS0xMjgtRUNCIEVuY3J5cHQgUGVybCBFVlAgIzEKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6IjAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGIjoiNzdDRjQxMjA2N0FGODI3MDYxMzUyOTE0OTkxOTU0NkYiOjAKKworQ2FtZWxsaWEtMTkyLUVDQiBFbmNyeXB0IFBlcmwgRVZQICMxCitjYW1lbGxpYV9lbmNyeXB0X2VjYjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3IjoiMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYiOiJCMjJGM0MzNkI3MkQzMTMyOUVFRThBRERDMjkwNkM2OCI6MAorCitDYW1lbGxpYS0yNTYtRUNCIEVuY3J5cHQgUGVybCBFVlAgIzEKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGIjoiMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYiOiIyRURGMUYzNDE4RDUzQjg4ODQxRkM4OTg1RkIxRUNGMiI6MAorCitDYW1lbGxpYS0xMjgtRUNCIEVuY3J5cHQgUGVybCBFVlAgIzEKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IjZCQzFCRUUyMkU0MDlGOTZFOTNEN0UxMTczOTMxNzJBIjoiNDMyRkM1RENENjI4MTE1QjdDMzg4RDc3MEIyNzBDOTYiOjAKKworQ2FtZWxsaWEtMTI4LUVDQiBFbmNyeXB0IFBlcmwgRVZQICMyCitjYW1lbGxpYV9lbmNyeXB0X2VjYjoiMkI3RTE1MTYyOEFFRDJBNkFCRjcxNTg4MDlDRjRGM0MiOiJBRTJEOEE1NzFFMDNBQzlDOUVCNzZGQUM0NUFGOEU1MSI6IjBCRTFGMTQwMjM3ODJBMjJFODM4NEM1QUJCN0ZBQjJCIjowCisKK0NhbWVsbGlhLTEyOC1FQ0IgRW5jcnlwdCBQZXJsIEVWUCAjMworY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiMzBDODFDNDZBMzVDRTQxMUU1RkJDMTE5MUEwQTUyRUYiOiJBMEExQUJDRDE4OTNBQjZGRTBGRTVCNjVERjVGODYzNiI6MAorCitDYW1lbGxpYS0xMjgtRUNCIEVuY3J5cHQgUGVybCBFVlAgIzQKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IkY2OUYyNDQ1REY0RjlCMTdBRDJCNDE3QkU2NkMzNzEwIjoiRTYxOTI1RTBENURGQUE5QkIyOUY4MTVCMzA3NkU1MUEiOjAKKworQ2FtZWxsaWEtMTkyLUVDQiBFbmNyeXB0IFBlcmwgRVZQICMxCitjYW1lbGxpYV9lbmNyeXB0X2VjYjoiOEU3M0IwRjdEQTBFNjQ1MkM4MTBGMzJCODA5MDc5RTU2MkY4RUFEMjUyMkM2QjdCIjoiNkJDMUJFRTIyRTQwOUY5NkU5M0Q3RTExNzM5MzE3MkEiOiJDQ0NDNkM0RTEzOEI0NTg0ODUxNEQ0OEQwRDM0MzlEMyI6MAorCitDYW1lbGxpYS0xOTItRUNCIEVuY3J5cHQgUGVybCBFVlAgIzIKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiI4RTczQjBGN0RBMEU2NDUyQzgxMEYzMkI4MDkwNzlFNTYyRjhFQUQyNTIyQzZCN0IiOiJBRTJEOEE1NzFFMDNBQzlDOUVCNzZGQUM0NUFGOEU1MSI6IjU3MTNDNjJDMTRCMkVDMEY4MzkzQjZBRkQ2RjU3ODVBIjowCisKK0NhbWVsbGlhLTE5Mi1FQ0IgRW5jcnlwdCBQZXJsIEVWUCAjMworY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjhFNzNCMEY3REEwRTY0NTJDODEwRjMyQjgwOTA3OUU1NjJGOEVBRDI1MjJDNkI3QiI6IjMwQzgxQzQ2QTM1Q0U0MTFFNUZCQzExOTFBMEE1MkVGIjoiQjQwRUQyQjYwRUI1NEQwOUQwMzBDRjUxMUZFRUYzNjYiOjAKKworQ2FtZWxsaWEtMTkyLUVDQiBFbmNyeXB0IFBlcmwgRVZQICM0CitjYW1lbGxpYV9lbmNyeXB0X2VjYjoiOEU3M0IwRjdEQTBFNjQ1MkM4MTBGMzJCODA5MDc5RTU2MkY4RUFEMjUyMkM2QjdCIjoiRjY5RjI0NDVERjRGOUIxN0FEMkI0MTdCRTY2QzM3MTAiOiI5MDlEQkQ5NTc5OTA5Njc0OENCMjczNTdFNzNFMUQyNiI6MAorCitDYW1lbGxpYS0yNTYtRUNCIEVuY3J5cHQgUGVybCBFVlAgIzEKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiNkJDMUJFRTIyRTQwOUY5NkU5M0Q3RTExNzM5MzE3MkEiOiJCRUZEMjE5QjExMkZBMDAwOTg5MTlDRDEwMUM5Q0NGQSI6MAorCitDYW1lbGxpYS0yNTYtRUNCIEVuY3J5cHQgUGVybCBFVlAgIzIKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiQUUyRDhBNTcxRTAzQUM5QzlFQjc2RkFDNDVBRjhFNTEiOiJDOTFEM0E4RjFBRUEwOEE5Mzg2Q0Y0QjY2QzAxNjlFQSI6MAorCitDYW1lbGxpYS0yNTYtRUNCIEVuY3J5cHQgUGVybCBFVlAgIzMKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiMzBDODFDNDZBMzVDRTQxMUU1RkJDMTE5MUEwQTUyRUYiOiJBNjIzRDcxMURDNUYyNUE1MUJCOEE4MEQ1NjM5N0QyOCI6MAorCitDYW1lbGxpYS0yNTYtRUNCIEVuY3J5cHQgUGVybCBFVlAgIzQKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiRjY5RjI0NDVERjRGOUIxN0FEMkI0MTdCRTY2QzM3MTAiOiI3OTYwMTA5RkI2REM0Mjk0N0ZDRkU1OUVBM0M1RUI2QiI6MAorCitDYW1lbGxpYS0xMjgtQ0JDIEVuY3J5cHQgUGVybCBFVlAgIzEKK2NhbWVsbGlhX2VuY3J5cHRfY2JjOiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiNkJDMUJFRTIyRTQwOUY5NkU5M0Q3RTExNzM5MzE3MkEiOiIxNjA3Q0Y0OTRCMzZCQkYwMERBRUIwQjUwM0M4MzFBQiI6MAorCitDYW1lbGxpYS0xMjgtQ0JDIEVuY3J5cHQgUGVybCBFVlAgIzIKK2NhbWVsbGlhX2VuY3J5cHRfY2JjOiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IjE2MDdDRjQ5NEIzNkJCRjAwREFFQjBCNTAzQzgzMUFCIjoiQUUyRDhBNTcxRTAzQUM5QzlFQjc2RkFDNDVBRjhFNTEiOiJBMkYyQ0Y2NzE2MjlFRjc4NDBDNUE1REZCNTA3NDg4NyI6MAorCitDYW1lbGxpYS0xMjgtQ0JDIEVuY3J5cHQgUGVybCBFVlAgIzMKK2NhbWVsbGlhX2VuY3J5cHRfY2JjOiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IkEyRjJDRjY3MTYyOUVGNzg0MEM1QTVERkI1MDc0ODg3IjoiMzBDODFDNDZBMzVDRTQxMUU1RkJDMTE5MUEwQTUyRUYiOiIwRjA2MTY1MDA4Q0Y4QjhCNUE2MzU4NjM2MjU0M0U1NCI6MAorCitDYW1lbGxpYS0xMjgtQ0JDIEVuY3J5cHQgUGVybCBFVlAgIzQKK2NhbWVsbGlhX2VuY3J5cHRfY2JjOiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IjM2QTg0Q0RBRkQ1RjlBODVBREEwRjBBOTkzRDZENTc3IjoiRjY5RjI0NDVERjRGOUIxN0FEMkI0MTdCRTY2QzM3MTAiOiI3NEM2NDI2OENEQjhCOEZBRjVCMzRFOEFGMzczMjk4MCI6MAorCitDYW1lbGxpYS0xOTItQ0JDIEVuY3J5cHQgUGVybCBFVlAgIzEKK2NhbWVsbGlhX2VuY3J5cHRfY2JjOiI4RTczQjBGN0RBMEU2NDUyQzgxMEYzMkI4MDkwNzlFNTYyRjhFQUQyNTIyQzZCN0IiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6IjZCQzFCRUUyMkU0MDlGOTZFOTNEN0UxMTczOTMxNzJBIjoiMkE0ODMwQUI1QUM0QTFBMjQwNTk1NUZEMjE5NUNGOTMiOjAKKworQ2FtZWxsaWEtMTkyLUNCQyBFbmNyeXB0IFBlcmwgRVZQICMyCitjYW1lbGxpYV9lbmNyeXB0X2NiYzoiOEU3M0IwRjdEQTBFNjQ1MkM4MTBGMzJCODA5MDc5RTU2MkY4RUFEMjUyMkM2QjdCIjoiMkE0ODMwQUI1QUM0QTFBMjQwNTk1NUZEMjE5NUNGOTMiOiJBRTJEOEE1NzFFMDNBQzlDOUVCNzZGQUM0NUFGOEU1MSI6IjVENUE4NjlCRDE0Q0U1NDI2NEY4OTJBNkREMkVDM0Q1IjowCisKK0NhbWVsbGlhLTE5Mi1DQkMgRW5jcnlwdCBQZXJsIEVWUCAjMworY2FtZWxsaWFfZW5jcnlwdF9jYmM6IjhFNzNCMEY3REEwRTY0NTJDODEwRjMyQjgwOTA3OUU1NjJGOEVBRDI1MjJDNkI3QiI6IjVENUE4NjlCRDE0Q0U1NDI2NEY4OTJBNkREMkVDM0Q1IjoiMzBDODFDNDZBMzVDRTQxMUU1RkJDMTE5MUEwQTUyRUYiOiIzN0QzNTlDMzM0OTgzNkQ4ODRFMzEwQURERjY4QzQ0OSI6MAorCitDYW1lbGxpYS0xOTItQ0JDIEVuY3J5cHQgUGVybCBFVlAgIzQKK2NhbWVsbGlhX2VuY3J5cHRfY2JjOiI4RTczQjBGN0RBMEU2NDUyQzgxMEYzMkI4MDkwNzlFNTYyRjhFQUQyNTIyQzZCN0IiOiIzN0QzNTlDMzM0OTgzNkQ4ODRFMzEwQURERjY4QzQ0OSI6IkY2OUYyNDQ1REY0RjlCMTdBRDJCNDE3QkU2NkMzNzEwIjoiMDFGQUFBOTMwQjRBQjk5MTZFOTY2OEUxNDI4QzZCMDgiOjAKKworQ2FtZWxsaWEtMjU2LUNCQyBFbmNyeXB0IFBlcmwgRVZQICMxCitjYW1lbGxpYV9lbmNyeXB0X2NiYzoiNjAzREVCMTAxNUNBNzFCRTJCNzNBRUYwODU3RDc3ODExRjM1MkMwNzNCNjEwOEQ3MkQ5ODEwQTMwOTE0REZGNCI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiNkJDMUJFRTIyRTQwOUY5NkU5M0Q3RTExNzM5MzE3MkEiOiJFNkNGQTM1RkMwMkIxMzRBNEQyQzBCNjczN0FDM0VEQSI6MAorCitDYW1lbGxpYS0yNTYtQ0JDIEVuY3J5cHQgUGVybCBFVlAgIzIKK2NhbWVsbGlhX2VuY3J5cHRfY2JjOiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiRTZDRkEzNUZDMDJCMTM0QTREMkMwQjY3MzdBQzNFREEiOiJBRTJEOEE1NzFFMDNBQzlDOUVCNzZGQUM0NUFGOEU1MSI6IjM2Q0JFQjczQkQ1MDRCNDA3MEIxQjdERTJCMjFFQjUwIjowCisKK0NhbWVsbGlhLTI1Ni1DQkMgRW5jcnlwdCBQZXJsIEVWUCAjMworY2FtZWxsaWFfZW5jcnlwdF9jYmM6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiIzNkNCRUI3M0JENTA0QjQwNzBCMUI3REUyQjIxRUI1MCI6IjMwQzgxQzQ2QTM1Q0U0MTFFNUZCQzExOTFBMEE1MkVGIjoiRTMxQTYwNTUyOTdEOTZDQTMzMzBDREYxQjE4NjBBODMiOjAKKworQ2FtZWxsaWEtMjU2LUNCQyBFbmNyeXB0IFBlcmwgRVZQICM0CitjYW1lbGxpYV9lbmNyeXB0X2NiYzoiNjAzREVCMTAxNUNBNzFCRTJCNzNBRUYwODU3RDc3ODExRjM1MkMwNzNCNjEwOEQ3MkQ5ODEwQTMwOTE0REZGNCI6IkUzMUE2MDU1Mjk3RDk2Q0EzMzMwQ0RGMUIxODYwQTgzIjoiRjY5RjI0NDVERjRGOUIxN0FEMkI0MTdCRTY2QzM3MTAiOiI1RDU2M0Y2RDFDQ0NGMjM2MDUxQzBDNUMxQzU4RjI4RiI6MAorCitDYW1lbGxpYS0xMjgtQ0ZCMTI4IEVuY3J5cHQgUGVybCBFVlAgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2VuY3J5cHRfY2ZiMTI4OiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiNkJDMUJFRTIyRTQwOUY5NkU5M0Q3RTExNzM5MzE3MkEiOiIxNEY3NjQ2MTg3ODE3RUI1ODY1OTkxNDZCODJCRDcxOSIKKworQ2FtZWxsaWEtMTI4LUNGQjEyOCBFbmNyeXB0IFBlcmwgRVZQICMyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitjYW1lbGxpYV9lbmNyeXB0X2NmYjEyODoiMkI3RTE1MTYyOEFFRDJBNkFCRjcxNTg4MDlDRjRGM0MiOiIxNEY3NjQ2MTg3ODE3RUI1ODY1OTkxNDZCODJCRDcxOSI6IkFFMkQ4QTU3MUUwM0FDOUM5RUI3NkZBQzQ1QUY4RTUxIjoiQTUzRDI4QkI4MkRGNzQxMTAzRUE0RjkyMUE0NDg4MEIiCisKK0NhbWVsbGlhLTEyOC1DRkIxMjggRW5jcnlwdCBQZXJsIEVWUCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZW5jcnlwdF9jZmIxMjg6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiQTUzRDI4QkI4MkRGNzQxMTAzRUE0RjkyMUE0NDg4MEIiOiIzMEM4MUM0NkEzNUNFNDExRTVGQkMxMTkxQTBBNTJFRiI6IjlDMjE1N0E2NjQ2MjZEMURFRjlFQTQyMEZERTY5Qjk2IgorCitDYW1lbGxpYS0xMjgtQ0ZCMTI4IEVuY3J5cHQgUGVybCBFVlAgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2VuY3J5cHRfY2ZiMTI4OiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IjlDMjE1N0E2NjQ2MjZEMURFRjlFQTQyMEZERTY5Qjk2IjoiRjY5RjI0NDVERjRGOUIxN0FEMkI0MTdCRTY2QzM3MTAiOiI3NDJBMjVGMDU0MjM0MEM3QkFFRjI0Q0E4NDgyQkIwOSIKKworQ2FtZWxsaWEtMTI4LUNGQjEyOCBEZWNyeXB0IFBlcmwgRVZQICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitjYW1lbGxpYV9kZWNyeXB0X2NmYjEyODoiMkI3RTE1MTYyOEFFRDJBNkFCRjcxNTg4MDlDRjRGM0MiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6IjZCQzFCRUUyMkU0MDlGOTZFOTNEN0UxMTczOTMxNzJBIjoiMTRGNzY0NjE4NzgxN0VCNTg2NTk5MTQ2QjgyQkQ3MTkiCisKK0NhbWVsbGlhLTEyOC1DRkIxMjggRGVjcnlwdCBQZXJsIEVWUCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZGVjcnlwdF9jZmIxMjg6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiMTRGNzY0NjE4NzgxN0VCNTg2NTk5MTQ2QjgyQkQ3MTkiOiJBRTJEOEE1NzFFMDNBQzlDOUVCNzZGQUM0NUFGOEU1MSI6IkE1M0QyOEJCODJERjc0MTEwM0VBNEY5MjFBNDQ4ODBCIgorCitDYW1lbGxpYS0xMjgtQ0ZCMTI4IERlY3J5cHQgUGVybCBFVlAgIzMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4OiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IkE1M0QyOEJCODJERjc0MTEwM0VBNEY5MjFBNDQ4ODBCIjoiMzBDODFDNDZBMzVDRTQxMUU1RkJDMTE5MUEwQTUyRUYiOiI5QzIxNTdBNjY0NjI2RDFERUY5RUE0MjBGREU2OUI5NiIKKworQ2FtZWxsaWEtMTI4LUNGQjEyOCBEZWNyeXB0IFBlcmwgRVZQICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitjYW1lbGxpYV9kZWNyeXB0X2NmYjEyODoiMkI3RTE1MTYyOEFFRDJBNkFCRjcxNTg4MDlDRjRGM0MiOiI5QzIxNTdBNjY0NjI2RDFERUY5RUE0MjBGREU2OUI5NiI6IkY2OUYyNDQ1REY0RjlCMTdBRDJCNDE3QkU2NkMzNzEwIjoiNzQyQTI1RjA1NDIzNDBDN0JBRUYyNENBODQ4MkJCMDkiCisKK0NhbWVsbGlhLTE5Mi1DRkIxMjggRW5jcnlwdCBQZXJsIEVWUCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZW5jcnlwdF9jZmIxMjg6IjhFNzNCMEY3REEwRTY0NTJDODEwRjMyQjgwOTA3OUU1NjJGOEVBRDI1MjJDNkI3QiI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiNkJDMUJFRTIyRTQwOUY5NkU5M0Q3RTExNzM5MzE3MkEiOiJDODMyQkI5NzgwNjc3REFBODJEOUI2ODYwRENENTY1RSIKKworQ2FtZWxsaWEtMTkyLUNGQjEyOCBFbmNyeXB0IFBlcmwgRVZQICMyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitjYW1lbGxpYV9lbmNyeXB0X2NmYjEyODoiOEU3M0IwRjdEQTBFNjQ1MkM4MTBGMzJCODA5MDc5RTU2MkY4RUFEMjUyMkM2QjdCIjoiQzgzMkJCOTc4MDY3N0RBQTgyRDlCNjg2MERDRDU2NUUiOiJBRTJEOEE1NzFFMDNBQzlDOUVCNzZGQUM0NUFGOEU1MSI6Ijg2Rjg0OTE2Mjc5MDZENzgwQzdBNkQ0NkVBMzMxRjk4IgorCitDYW1lbGxpYS0xOTItQ0ZCMTI4IEVuY3J5cHQgUGVybCBFVlAgIzMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2VuY3J5cHRfY2ZiMTI4OiI4RTczQjBGN0RBMEU2NDUyQzgxMEYzMkI4MDkwNzlFNTYyRjhFQUQyNTIyQzZCN0IiOiI4NkY4NDkxNjI3OTA2RDc4MEM3QTZENDZFQTMzMUY5OCI6IjMwQzgxQzQ2QTM1Q0U0MTFFNUZCQzExOTFBMEE1MkVGIjoiNjk1MTFDQ0U1OTRDRjcxMENCOThCQjYzRDcyMjFGMDEiCisKK0NhbWVsbGlhLTE5Mi1DRkIxMjggRW5jcnlwdCBQZXJsIEVWUCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZW5jcnlwdF9jZmIxMjg6IjhFNzNCMEY3REEwRTY0NTJDODEwRjMyQjgwOTA3OUU1NjJGOEVBRDI1MjJDNkI3QiI6IjY5NTExQ0NFNTk0Q0Y3MTBDQjk4QkI2M0Q3MjIxRjAxIjoiRjY5RjI0NDVERjRGOUIxN0FEMkI0MTdCRTY2QzM3MTAiOiJENUI1Mzc4QTNBQkVENTU4MDNGMjU1NjVEODkwN0I4NCIKKworQ2FtZWxsaWEtMTkyLUNGQjEyOCBEZWNyeXB0IFBlcmwgRVZQICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitjYW1lbGxpYV9kZWNyeXB0X2NmYjEyODoiOEU3M0IwRjdEQTBFNjQ1MkM4MTBGMzJCODA5MDc5RTU2MkY4RUFEMjUyMkM2QjdCIjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiI2QkMxQkVFMjJFNDA5Rjk2RTkzRDdFMTE3MzkzMTcyQSI6IkM4MzJCQjk3ODA2NzdEQUE4MkQ5QjY4NjBEQ0Q1NjVFIgorCitDYW1lbGxpYS0xOTItQ0ZCMTI4IERlY3J5cHQgUGVybCBFVlAgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4OiI4RTczQjBGN0RBMEU2NDUyQzgxMEYzMkI4MDkwNzlFNTYyRjhFQUQyNTIyQzZCN0IiOiJDODMyQkI5NzgwNjc3REFBODJEOUI2ODYwRENENTY1RSI6IkFFMkQ4QTU3MUUwM0FDOUM5RUI3NkZBQzQ1QUY4RTUxIjoiODZGODQ5MTYyNzkwNkQ3ODBDN0E2RDQ2RUEzMzFGOTgiCisKK0NhbWVsbGlhLTE5Mi1DRkIxMjggRGVjcnlwdCBQZXJsIEVWUCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZGVjcnlwdF9jZmIxMjg6IjhFNzNCMEY3REEwRTY0NTJDODEwRjMyQjgwOTA3OUU1NjJGOEVBRDI1MjJDNkI3QiI6Ijg2Rjg0OTE2Mjc5MDZENzgwQzdBNkQ0NkVBMzMxRjk4IjoiMzBDODFDNDZBMzVDRTQxMUU1RkJDMTE5MUEwQTUyRUYiOiI2OTUxMUNDRTU5NENGNzEwQ0I5OEJCNjNENzIyMUYwMSIKKworQ2FtZWxsaWEtMTkyLUNGQjEyOCBEZWNyeXB0IFBlcmwgRVZQICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitjYW1lbGxpYV9kZWNyeXB0X2NmYjEyODoiOEU3M0IwRjdEQTBFNjQ1MkM4MTBGMzJCODA5MDc5RTU2MkY4RUFEMjUyMkM2QjdCIjoiNjk1MTFDQ0U1OTRDRjcxMENCOThCQjYzRDcyMjFGMDEiOiJGNjlGMjQ0NURGNEY5QjE3QUQyQjQxN0JFNjZDMzcxMCI6IkQ1QjUzNzhBM0FCRUQ1NTgwM0YyNTU2NUQ4OTA3Qjg0IgorCitDYW1lbGxpYS0yNTYtQ0ZCMTI4IEVuY3J5cHQgUGVybCBFVlAgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2VuY3J5cHRfY2ZiMTI4OiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiI2QkMxQkVFMjJFNDA5Rjk2RTkzRDdFMTE3MzkzMTcyQSI6IkNGNjEwN0JCMENFQTdEN0ZCMUJEMzFGNUU3QjA2QzkzIgorCitDYW1lbGxpYS0yNTYtQ0ZCMTI4IEVuY3J5cHQgUGVybCBFVlAgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2VuY3J5cHRfY2ZiMTI4OiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiQ0Y2MTA3QkIwQ0VBN0Q3RkIxQkQzMUY1RTdCMDZDOTMiOiJBRTJEOEE1NzFFMDNBQzlDOUVCNzZGQUM0NUFGOEU1MSI6Ijg5QkVEQjRDQ0REODY0RUExMUJBNENCRTg0OUI1RTJCIgorCitDYW1lbGxpYS0yNTYtQ0ZCMTI4IEVuY3J5cHQgUGVybCBFVlAgIzMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2VuY3J5cHRfY2ZiMTI4OiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiODlCRURCNENDREQ4NjRFQTExQkE0Q0JFODQ5QjVFMkIiOiIzMEM4MUM0NkEzNUNFNDExRTVGQkMxMTkxQTBBNTJFRiI6IjU1NUZDM0YzNEJERDJENTRDNjJEOUUzQkYzMzhDMUM0IgorCitDYW1lbGxpYS0yNTYtQ0ZCMTI4IEVuY3J5cHQgUGVybCBFVlAgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2VuY3J5cHRfY2ZiMTI4OiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiNTU1RkMzRjM0QkREMkQ1NEM2MkQ5RTNCRjMzOEMxQzQiOiJGNjlGMjQ0NURGNEY5QjE3QUQyQjQxN0JFNjZDMzcxMCI6IjU5NTNBRENFMTREQjhDN0YzOUYxQkQzOUYzNTlCRkZBIgorCitDYW1lbGxpYS0yNTYtQ0ZCMTI4IERlY3J5cHQgUGVybCBFVlAgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4OiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiI2QkMxQkVFMjJFNDA5Rjk2RTkzRDdFMTE3MzkzMTcyQSI6IkNGNjEwN0JCMENFQTdEN0ZCMUJEMzFGNUU3QjA2QzkzIgorCitDYW1lbGxpYS0yNTYtQ0ZCMTI4IERlY3J5cHQgUGVybCBFVlAgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4OiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiQ0Y2MTA3QkIwQ0VBN0Q3RkIxQkQzMUY1RTdCMDZDOTMiOiJBRTJEOEE1NzFFMDNBQzlDOUVCNzZGQUM0NUFGOEU1MSI6Ijg5QkVEQjRDQ0REODY0RUExMUJBNENCRTg0OUI1RTJCIgorCitDYW1lbGxpYS0yNTYtQ0ZCMTI4IERlY3J5cHQgUGVybCBFVlAgIzMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4OiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiODlCRURCNENDREQ4NjRFQTExQkE0Q0JFODQ5QjVFMkIiOiIzMEM4MUM0NkEzNUNFNDExRTVGQkMxMTkxQTBBNTJFRiI6IjU1NUZDM0YzNEJERDJENTRDNjJEOUUzQkYzMzhDMUM0IgorCitDYW1lbGxpYS0yNTYtQ0ZCMTI4IERlY3J5cHQgUGVybCBFVlAgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4OiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiNTU1RkMzRjM0QkREMkQ1NEM2MkQ5RTNCRjMzOEMxQzQiOiJGNjlGMjQ0NURGNEY5QjE3QUQyQjQxN0JFNjZDMzcxMCI6IjU5NTNBRENFMTREQjhDN0YzOUYxQkQzOUYzNTlCRkZBIgorCitDYW1lbGxpYS1FQ0IgRW5jcnlwdCAoSW52YWxpZCBrZXkgbGVuZ3RoKQorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMiI6IjAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwIjoiNjc2NzMxMzg1NDk2Njk3MzA4NTcwNjU2NDhlYWJlNDMiOk1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfS0VZX0xFTkdUSAorCitDYW1lbGxpYS1FQ0IgRGVjcnlwdCAoSW52YWxpZCBrZXkgbGVuZ3RoKQorY2FtZWxsaWFfZGVjcnlwdF9lY2I6IjAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMiI6IjAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwIjoiNjc2NzMxMzg1NDk2Njk3MzA4NTcwNjU2NDhlYWJlNDMiOk1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfS0VZX0xFTkdUSAorCitDYW1lbGxpYS0yNTYtQ0JDIEVuY3J5cHQgKEludmFsaWQgaW5wdXQgbGVuZ3RoKQorY2FtZWxsaWFfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMCI6IiI6TUJFRFRMU19FUlJfQ0FNRUxMSUFfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKworQ2FtZWxsaWEtMjU2LUNCQyBEZWNyeXB0IChJbnZhbGlkIGlucHV0IGxlbmd0aCkKK2NhbWVsbGlhX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2MjNhNTJmY2VhNWQ0NDNlNDhkOTE4MWFiMzJjNzQiOiIiOk1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfSU5QVVRfTEVOR1RICisKK0NhbWVsbGlhIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUCitjYW1lbGxpYV9zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jYW1lbGxpYS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jYW1lbGxpYS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGY2NDgyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NhbWVsbGlhLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMjI5IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2NhbWVsbGlhLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGNhbWVsbGlhX2VuY3J5cHRfZWNiKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZywgaW50IHNldGtleV9yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0IGN0eDsKKyAgICBpbnQga2V5X2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19jYW1lbGxpYV9pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApID09IHNldGtleV9yZXN1bHQgKTsKKyAgICBpZiggc2V0a2V5X3Jlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19DQU1FTExJQV9FTkNSWVBULCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCAxNiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19jYW1lbGxpYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGNhbWVsbGlhX2RlY3J5cHRfZWNiKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZywgaW50IHNldGtleV9yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0IGN0eDsKKyAgICBpbnQga2V5X2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19jYW1lbGxpYV9pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZGVjKCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApID09IHNldGtleV9yZXN1bHQgKTsKKyAgICBpZiggc2V0a2V5X3Jlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19DQU1FTExJQV9ERUNSWVBULCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCAxNiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19jYW1lbGxpYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KK3ZvaWQgY2FtZWxsaWFfZW5jcnlwdF9jYmMoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuLCBkYXRhX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgZGF0YV9sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ciwga2V5X2xlbiAqIDggKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jYmMoICZjdHgsIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCwgZGF0YV9sZW4sIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0KSA9PSBjYmNfcmVzdWx0ICk7CisgICAgaWYoIGNiY19yZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgZGF0YV9sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfY2FtZWxsaWFfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCit2b2lkIGNhbWVsbGlhX2RlY3J5cHRfY2JjKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X2l2X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYmNfcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0IGN0eDsKKyAgICBpbnQga2V5X2xlbiwgZGF0YV9sZW47CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19jYW1lbGxpYV9pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGl2X3N0ciwgaGV4X2l2X3N0cmluZyApOworICAgIGRhdGFfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9kZWMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2JjKCAmY3R4LCBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQsIGRhdGFfbGVuLCBpdl9zdHIsIHNyY19zdHIsIG91dHB1dCApID09IGNiY19yZXN1bHQgKTsKKyAgICBpZiggY2JjX3Jlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBkYXRhX2xlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19jYW1lbGxpYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KK3ZvaWQgY2FtZWxsaWFfZW5jcnlwdF9jZmIxMjgoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgaXZfb2Zmc2V0ID0gMDsKKyAgICBpbnQga2V5X2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2ZiMTI4KCAmY3R4LCBNQkVEVExTX0NBTUVMTElBX0VOQ1JZUFQsIDE2LCAmaXZfb2Zmc2V0LCBpdl9zdHIsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgMTYgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwordm9pZCBjYW1lbGxpYV9kZWNyeXB0X2NmYjEyOCggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBpdl9vZmZzZXQgPSAwOworICAgIGludCBrZXlfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfY2FtZWxsaWFfaW5pdCggJmN0eCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ciwga2V5X2xlbiAqIDggKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jZmIxMjgoICZjdHgsIE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCwgMTYsICZpdl9vZmZzZXQsIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCAxNiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfY2FtZWxsaWFfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIGNhbWVsbGlhX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYW1lbGxpYV9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NjbS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NjbS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYmE0MmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2NtLmRhdGEKQEAgLTAsMCArMSwxNDgyIEBACitDQ00gc2VsZiB0ZXN0CittYmVkdGxzX2NjbV9zZWxmX3Rlc3Q6CisKK0NDTSBpbml0ICMxIEFFUy0xMjg6IE9LCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX3NldGtleTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6MTI4OjAKKworQ0NNIGluaXQgIzIgQ0FNRUxMSUEtMjU2OiBPSworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX3NldGtleTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToyNTY6MAorCitDQ00gaW5pdCAjMyBBRVMtMjI0OiBiYWQga2V5IHNpemUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fc2V0a2V5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoyMjQ6TUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVAorCitDQ00gaW5pdCAjNCBCTE9XRklTSC0xMjg6IGJhZCBibG9jayBzaXplCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQworbWJlZHRsc19jY21fc2V0a2V5Ok1CRURUTFNfQ0lQSEVSX0lEX0JMT1dGSVNIOjEyODpNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCisKK0NDTSBsZW5ndGhzICMxIGFsbCBPSworY2NtX2xlbmd0aHM6NToxMDo1Ojg6MAorCitDQ00gbGVuZ3RocyAjMiBub25jZSB0b28gc2hvcnQKK2NjbV9sZW5ndGhzOjU6Njo1Ojg6TUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVAorCitDQ00gbGVuZ3RocyAjMyBub25jZSB0b28gbG9uZworY2NtX2xlbmd0aHM6NToxNDo1Ojg6TUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVAorCitDQ00gbGVuZ3RocyAjNCB0YWcgdG9vIHNob3J0CitjY21fbGVuZ3Roczo1OjEwOjU6MjpNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCisKK0NDTSBsZW5ndGhzICM1IHRhZyB0b28gbG9uZworY2NtX2xlbmd0aHM6NToxMDo1OjE4Ok1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQKKworQ0NNIGxlbmd0aHMgIzYgdGFnIGxlbmd0aCBub3QgZXZlbgorY2NtX2xlbmd0aHM6NToxMDo1Ojc6TUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVAorCitDQ00gbGVuZ2h0cyAjNyBBRCB0b28gbG9uZyAoMl4xNiAtIDJeOCArIDEpCitjY21fbGVuZ3Roczo1OjEwOjY1MjgxOjg6TUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVAorCitDQ00gbGVuZ3RocyAjOCBtc2cgdG9vIGxvbmcgZm9yIHRoaXMgSVYgbGVuZ3RoICgyXjE2LCBxID0gMikKK2NjbV9sZW5ndGhzOjY1NTM2OjEzOjU6ODpNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFIjoiMDAwMDAwMDMwMjAxMDBBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiNTg4Qzk3OUE2MUM2NjNEMkYwNjZEMEMyQzBGOTg5ODA2RDVGNkI2MURBQzM4NDE3RThEMTJDRkRGOTI2RTAiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYiOiIwMDAwMDAwNDAzMDIwMUEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiI3MkM5MUEzNkUxMzVGOENGMjkxQ0E4OTQwODVDODdFM0NDMTVDNDM5QzlFNDNBM0JBMDkxRDU2RTEwNDAwOTE2IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIFJGQyAzNjEwICMzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGMjAiOiIwMDAwMDAwNTA0MDMwMkEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiI1MUIxRTVGNDRBMTk3RDFEQTQ2QjBGOEUyRDI4MkFFODcxRTgzOEJCNjREQTg1OTY1NzRBREFBNzZGQkQ5RkIwQzUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRSI6IjAwMDAwMDA2MDUwNDAzQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCIjoiQTI4QzY4NjU5MzlBOUE3OUZBQUE1QzRDMkE5RDRBOTFDREFDOEM5NkM4NjFCOUM5RTYxRUYxIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIFJGQyAzNjEwICM1CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRiI6IjAwMDAwMDA3MDYwNTA0QTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCIjoiRENGMUZCN0I1RDlFMjNGQjlENEUxMzEyNTM2NThBRDg2RUJEQ0EzRTUxRTgzRjA3N0Q5QzJEOTMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzYKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGMjAiOiIwMDAwMDAwODA3MDYwNUEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQiI6IjZGQzFCMDExRjAwNjU2OEI1MTcxQTQyRDk1M0Q0NjlCMjU3MEE0QkQ4NzQwNUEwNDQzQUM5MUNCOTQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFIjoiMDAwMDAwMDkwODA3MDZBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiMDEzNUQxQjJDOTVGNDFENUQxRDRGRUMxODVEMTY2QjgwOTRFOTk5REZFRDk2QzA0OEM1NjYwMkM5N0FDQkI3NDkwIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIFJGQyAzNjEwICM4CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGIjoiMDAwMDAwMEEwOTA4MDdBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiN0I3NTM5OUFDMDgzMUREMkYwQkJENzU4NzlBMkZEOEY2Q0FFNkI2Q0Q5QjdEQjI0QzE3QjQ0MzNGNDM0OTYzRjM0QjQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCI6IjAwMDAwMDBCMEEwOTA4QTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IjgyNTMxQTYwQ0MyNDk0NUE0QjgyNzkxODFBQjVDODRERjIxQ0U3RjlCNzNGNDJFMTk3RUE5QzA3RTU2QjVFQjE3RTVGNEUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUiOiIwMDAwMDAwQzBCMEEwOUEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQiI6IjA3MzQyNTk0MTU3Nzg1MTUyQjA3NDA5ODMzMEFCQjE0MUI5NDdCNTY2QUE5NDA2QjREOTk5OTg4REQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzExCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRiI6IjAwMDAwMDBEMEMwQjBBQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCIjoiNjc2QkIyMDM4MEIwRTMwMUU4QUI3OTU5MEEzOTZEQTc4QjgzNDkzNEY1M0FBMkU5MTA3QThCNkMwMjJDIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIFJGQyAzNjEwICMxMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCI6IjAwMDAwMDBFMEQwQzBCQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCIjoiQzBGRkEwRDZGMDVCREI2N0YyNEQ0M0E0MzM4RDJBQTRCRUQ3QjIwRTQzQ0QxQUEzMTY2MkU3QUQ2NUQ2REIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkQ3ODI4RDEzQjJCMEJEQzMyNUE3NjIzNkRGOTNDQzZCIjoiMDhFOENGOTdEODIwRUEyNTg0NjBFOTZBRDlDRjUyODkwNTREODk1Q0VBQzQ3QyI6IjAwNDEyQjRFQTlDREJFM0M5Njk2NzY2Q0ZBIjoiMEJFMUE4OEJBQ0UwMThCMSI6IjRDQjk3Rjg2QTJBNDY4OUE4Nzc5NDdBQjgwOTFFRjUzODZBNkZGQkREMDgwRjhFNzhDRjdDQjBDREREN0IzIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIFJGQyAzNjEwICMxNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJENzgyOEQxM0IyQjBCREMzMjVBNzYyMzZERjkzQ0M2QiI6IjkwMjBFQTZGOTFCREQ4NUFGQTAwMzlCQTRCQUZGOUJGQjc5QzcwMjg5NDlDRDBFQyI6IjAwMzM1NjhFRjdCMjYzM0M5Njk2NzY2Q0ZBIjoiNjMwMThGNzZEQzhBMUJDQiI6IjRDQ0IxRTdDQTk4MUJFRkFBMDcyNkM1NUQzNzgwNjEyOThDODVDOTI4MTRBQkMzM0M1MkVFODFEN0Q3N0MwOEEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzE1CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkQ3ODI4RDEzQjJCMEJEQzMyNUE3NjIzNkRGOTNDQzZCIjoiQjkxNkUwRUFDQzFDMDBEN0RDRUM2OEVDMEIzQkJCMUEwMkRFOEEyRDFBQTM0NjEzMkUiOiIwMDEwM0ZFNDEzMzY3MTNDOTY5Njc2NkNGQSI6IkFBNkNGQTM2Q0FFODZCNDAiOiJCMUQyM0EyMjIwRERDMEFDOTAwRDlBQTAzQzYxRkNGNEE1NTlBNDQxNzc2NzA4OTcwOEE3NzY3OTZFREI3MjM1MDYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzE2CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkQ3ODI4RDEzQjJCMEJEQzMyNUE3NjIzNkRGOTNDQzZCIjoiMTJEQUFDNTYzMEVGQTUzOTZGNzcwQ0UxQTY2QjIxRjdCMjEwMUMiOiIwMDc2NEM2M0I4MDU4RTNDOTY5Njc2NkNGQSI6IkQwRDA3MzVDNTMxRTFCRUNGMDQ5QzI0NCI6IjE0RDI1M0MzOTY3QjcwNjA5QjdDQkI3QzQ5OTE2MDI4MzI0NTI2OUE2RjQ5OTc1QkNBREVBRiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMTcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiRDc4MjhEMTNCMkIwQkRDMzI1QTc2MjM2REY5M0NDNkIiOiJFODhCNkE0NkM3OEQ2M0U1MkVCOEM1NDZFRkI1REU2Rjc1RTlDQzBEIjoiMDBGOEI2NzgwOTRFM0IzQzk2OTY3NjZDRkEiOiI3N0I2MEYwMTFDMDNFMTUyNTg5OUJDQUUiOiI1NTQ1RkYxQTA4NUVFMkVGQkY1MkIyRTA0QkVFMUUyMzM2QzczRTNGNzYyQzBDNzc0NEZFN0UzQyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMTgKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiRDc4MjhEMTNCMkIwQkRDMzI1QTc2MjM2REY5M0NDNkIiOiI2NDM1QUNCQUZCMTFBODJFMkYwNzFEN0NBNEE1RUJEOTNBODAzQkE4N0YiOiIwMEQ1NjA5MTJEM0Y3MDNDOTY5Njc2NkNGQSI6IkNEOTA0NEQyQjcxRkRCODEyMEVBNjBDMCI6IjAwOTc2OUVDQUJERjQ4NjI1NTk0QzU5MjUxRTYwMzU3MjI2NzVFMDRDODQ3MDk5RTVBRTA3MDQ1NTEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzE5CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkQ3ODI4RDEzQjJCMEJEQzMyNUE3NjIzNkRGOTNDQzZCIjoiOEExOUI5NTBCQ0Y3MUEwMThFNUU2NzAxQzkxNzg3NjU5ODA5RDY3REJFREQxOCI6IjAwNDJGRkY4RjE5NTFDM0M5Njk2NzY2Q0ZBIjoiRDg1QkM3RTY5Rjk0NEZCOCI6IkJDMjE4REFBOTQ3NDI3QjZEQjM4NkE5OUFDMUFFRjIzQURFMEI1MjkzOUNCNkE2MzdDRjlCRUMyNDA4ODk3QzZCQSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMjAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiRDc4MjhEMTNCMkIwQkRDMzI1QTc2MjM2REY5M0NDNkIiOiIxNzYxNDMzQzM3QzVBMzVGQzFGMzlGNDA2MzAyRUI5MDdDNjE2M0JFMzhDOTg0MzciOiIwMDkyMEY0MEU1NkNEQzNDOTY5Njc2NkNGQSI6Ijc0QTBFQkM5MDY5RjVCMzciOiI1ODEwRTZGRDI1ODc0MDIyRTgwMzYxQTQ3OEUzRTlDRjQ4NEFCMDRGNDQ3RUZGRjZGMEE0NzdDQzJGQzlCRjU0ODk0NCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMjEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiRDc4MjhEMTNCMkIwQkRDMzI1QTc2MjM2REY5M0NDNkIiOiJBNDM0QThFNTg1MDBDNkU0MTUzMDUzODg2MkQ2ODZFQTlFODEzMDFCNUFFNDIyNkJGQSI6IjAwMjdDQTBDNzEyMEJDM0M5Njk2NzY2Q0ZBIjoiNDRBM0FBM0FBRTY0NzVDQSI6IkYyQkVFRDdCQzUwOThFODNGRUI1QjMxNjA4RjhFMjlDMzg4MTlBODlDOEU3NzZGMTU0NEQ0MTUxQTRFRDNBOEI4N0I5Q0UiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzIyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkQ3ODI4RDEzQjJCMEJEQzMyNUE3NjIzNkRGOTNDQzZCIjoiQjk2QjQ5RTIxRDYyMTc0MTYzMjg3NURCN0Y2QzkyNDNEMkQ3QzIiOiIwMDVCOENDQkNEOUFGODNDOTY5Njc2NkNGQSI6IkVDNDZCQjYzQjAyNTIwQzMzQzQ5RkQ3MCI6IjMxRDc1MEEwOURBM0VEN0ZEREQ0OUEyMDMyQUFCRjE3RUM4RUJGN0QyMkM4MDg4QzY2NkJFNUMxOTciCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzIzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkQ3ODI4RDEzQjJCMEJEQzMyNUE3NjIzNkRGOTNDQzZCIjoiRTJGQ0ZCQjg4MDQ0MkM3MzFCRjk1MTY3QzhGRkQ3ODk1RTMzNzA3NiI6IjAwM0VCRTk0MDQ0QjlBM0M5Njk2NzY2Q0ZBIjoiNDdBNjVBQzc4QjNENTk0MjI3RTg1RTcxIjoiRTg4MkYxREJEMzhDRTNFREE3QzIzRjA0REQ2NTA3MUVCNDEzNDJBQ0RGN0UwMERDQ0VDN0FFNTI5ODdEIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIFJGQyAzNjEwICMyNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJENzgyOEQxM0IyQjBCREMzMjVBNzYyMzZERjkzQ0M2QiI6IkFCRjIxQzBCMDJGRUI4OEY4NTZERjRBMzczODFCQ0UzQ0MxMjg1MTdENCI6IjAwOEQ0OTNCMzBBRThCM0M5Njk2NzY2Q0ZBIjoiNkUzN0E2RUY1NDZEOTU1RDM0QUI2MDU5IjoiRjMyOTA1Qjg4QTY0MUIwNEI5QzlGRkI1OENDMzkwOTAwRjNEQTEyQUIxNkRDRTlFODJFRkExNkRBNjIwNTkiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWVFQgQUVTLTEyOCAjMSAoUD0yNCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0M2IxYTZiYzhkMGQyMmQ2ZDFjYTk1YzE4NTkzY2NhNSI6ImEyYjM4MWM3ZDE1NDVjNDA4ZmUyOTgxN2EyMWRjNDM1YTE1NGM4NzI1NjM0NmIwNSI6Ijk4ODI1NzhlNzUwYjk2ODJjNmNhN2Y4Zjg2IjoiMjA4NGYzODYxYzlhZDBjY2VlN2M2M2E3ZTA1YWVjZTVkYjhiMzRiZDg3MjRjYzA2YjRjYTk5YTdmOWM0OTE0ZiI6ImNjNjllZDc2OTg1ZTBlZDRjODM2NWE3Mjc3NWU1YTE5YmZjY2M3MWFlYjExNmM4NWE4Yzc0Njc3IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0xMjggIzIgKFA9MjQsIE49MTMsIEE9MzIsIFQ9NikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDRlODkxODliODE1YjQ2NDljNGU5YjM4YzQyNzVhNWEiOiI4ZGI2YWUxZWI5NTk5NjM5MzFkMWM1MjI0ZjI5ZWY1MDAxOWQyYjBkYjdmNWY3NmYiOiIzNzRjODNlOTQzODQwNjFhYzAxOTYzZjg4ZCI6ImNkMTQ5ZDE3ZGJhN2VjNTAwMDBiOGM1MzkwZDExNDY5N2ZhZmI2MTAyNTMwMWY0ZTNlYWE5ZjQ1MzU3MThhMDgiOiJkZjk1MmRjZTBmODQzMzc0ZDMzZGE5NGM5NjllZmYwN2I3YmMyNDE4Y2E5ZWUwMWUzMmJjMmZmYTg2MDAiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWVFQgQUVTLTEyOCAjMyAoUD0yNCwgTj0xMywgQT0zMiwgVD04KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzNjhmMzVhMWY4MGVhYWFjZDZiYjEzNjYwOTM4OTcyNyI6IjFjY2NkNTU4MjUzMTZhOTRjNTk3OWUwNDkzMTBkMWQ3MTdjZGZiNzYyNDI4OWRhYyI6Ijg0MmE4NDQ1ODQ3NTAyZWE3NzM2M2ExNmI2IjoiMzQzOTZkZmNmYTZmNzQyYWVhNzA0MDk3NmJkNTk2NDk3YTdhNmZhNGZiODVlZThlNGNhMzk0ZDAyMDk1YjdiZiI6IjFhNTgwOTRmMGU4YzYwMzVhNTU4NGJmYThkMTAwOWM1Zjc4ZmQyY2E0ODdmZjIyMmY2ZDFkODk3ZDYwNTE2MTgiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWVFQgQUVTLTEyOCAjNCAoUD0yNCwgTj0xMywgQT0zMiwgVD0xMCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTk2YTA5YTY1MmZhNmM4MmVhZThiZTc4ODZkN2U3NWUiOiI4NGNkZDczODBmNDc1MjRiODYxNjhlZDk1Mzg2ZmFhNDAyODMxZjIyMDQ1MTgzZDAiOiJhOGIzZWI2OGYyMDVhNDZkOGY2MzJjMzM2NyI6ImM3MTYyMGQwNDc3YzgxMzdiNzdlYzVjNzJjZWQ0ZGYzYTFlOTg3ZmQ5YWY2YjViMTA4NTNmMDUyNmQ4NzZjZDUiOiJhN2ZiZjlkZDFiMDk5ZWQzYWNmNmJjYmQwYjZmN2NhZTU3YmVlOTlmOWQwODRmODI2ZDg2ZTY5YzA3ZjA1M2QxYTYwNyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMTI4ICM1IChQPTI0LCBOPTEzLCBBPTMyLCBUPTEyKQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZWUxODY1OTRmMTEwZmI3ODhhOGJmOGFhOGJlNWQ0YSI6ImQ3MTg2NDg3N2YyNTc4ZGIwOTJkYWJhMmQ2YTFmOWY0Njk4YTljMzU2Yzc4MzBhMSI6IjQ0ZjcwNWQ1MmFjZjI3YjdmMTcxOTZhYTliIjoiMmMxNjcyNDI5NmZmODVlMDc5NjI3YmUzMDUzZWE5NWFkZjM1NzIyYzIxODg2YmFiYTM0M2JkNmM3OWI1Y2I1NyI6ImI0ZGQ3NGU3YTBjYzUxYWVhNDVkZmI0MDFhNDFkNTgyMmM5NjkwMWE4MzI0N2VhMGQ2OTY1ZjVhYTZlMzEzMDJhOWNjMmIzNiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMTI4ICM2IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE0KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YjJkNTJhNTE4NmQ5MTJjZjZiODNhY2U3NzQwY2VkYSI6ImVhMzg0YjA4MWY2MGJiNDUwODA4ZTBjMjBkYzI5MTRhZTE0YTMyMDYxMmMzZTFlOCI6ImY0N2JlM2EyYjAxOWQxYmVlZGVkZjViODBjIjoiNzZjZjM1MjJhZmY5N2E0NGI0ZWRkMGVlZjNiODFlM2FiM2NkMWNjYzkzYTc2N2ExMzNhZmQ1MDgzMTVmMDVlZCI6Ijc5MDcwZjMzMTE0YTk4MGRmZDQ4MjE1MDUxZTIyNGRmZDAxNDcxYWMyOTMyNDJhZmRkYjM2ZTM3ZGExZWU4YTg4YTc3ZDdmMTJjYzYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWVFQgQUVTLTEyOCAjNyAoUD0yNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDE4OTM1MWI1Y2FlYTM3NWEwMjk5ZTgxYzYyMWJmNDMiOiI0NTM1ZDEyYjQzNzc5MjhhN2MwYTYxYzlmODI1YTQ4NjcxZWEwNTkxMDc0OGM4ZWYiOiI0OGMwOTA2OTMwNTYxZTBhYjBlZjRjZDk3MiI6IjQwYTI3YzFkMWUyM2VhM2RiZTgwNTZiMjc3NDg2MWE0YTIwMWNjZTQ5ZjE5OTk3ZDE5MjA2ZDhjOGEzNDM5NTEiOiIyNmM1Njk2MWMwMzVhN2U0NTJjY2U2MWJjNmVlMjIwZDc3YjNmOTRkMThmZDEwYjZkODBlOGJmODBmNGE0NmNhYjA2ZDQzMTNmMGRiOWJlOSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMTkyICMxIChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjExZmQ0NTc0M2Q5NDZlNmQzNzM0MWZlYzQ5OTQ3ZThjNzA0ODI0OTRhOGYwN2ZjYyI6ImVlN2U2MDc1YmE1Mjg0NmRlNWQ2MjU0OTU5YTE4YWZmYzRmYWY1OWM4ZWY2MzQ4OSI6ImM2YWVlYmNiMTQ2Y2ZhZmFhZTY2Zjc4YWFiIjoiN2RjOGM1MjE0NGE3Y2I2NWIzZTVhODQ2ZThmZDdlYWUzN2JmNjk5NmMyOTliNTZlNDkxNDRlYmY0M2ExNzcwZiI6IjEzN2Q5ZGE1OWJhZjVjYmZkNDY2MjBjNWYyOThmYzc2NmRlMTBhYzY4ZTc3NGVkZjFmMmM1YmFkIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0xOTIgIzIgKFA9MjQsIE49MTMsIEE9MzIsIFQ9NikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTQ2YTE2M2JiZjEwNzQ2ZTdjMTIwMTU0NmJhNDZkZTc2OWJlMjNmOWQ3Y2MyYzgwIjoiNDczYjY2MDA1NTlhZWZiNjdmNzk3NmYwYTVjYzc0NGZiNDU2ZWZkODZmNjE1NjQ4IjoiZjU4MjdlNTE3MDdkOGQ2NGJiNTIyOTg1YmIiOiI1OTliMTJlYmQzMzQ3YTVhZDA5ODc3MmM0NGM0OWVlZDk1NGVjMjdjM2JhNjIwNmQ4OTlkZGFhYmNhMjNhNzYyIjoiMjZkMmJlMzBlMTcxNDM5ZDU0YTBmZWMyOTFjNjAyNGQxZGUwOWQ2MWI0NGY1MzI1OGJhMTM2MDQwNmY5IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0xOTIgIzMgKFA9MjQsIE49MTMsIEE9MzIsIFQ9OCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmRmMjc3YWYyMjI2ZjAzZWMxYTBiYTdhODUzMmFkZTZhZWE5YjNkNTE5ZmUyZDM4IjoiMGZmODllZmY5MmE1MzBiNjY2ODRjZDc1YTM5NDgxZTdlMDY5YTdkMDVlODliNjkyIjoiY2MzYzU5NmJlODg0ZTdjYWVkNTAzMzE1YzAiOiI0ZDY1NDYxNjdiM2VkNTVmMDFjNjJiZDM4NGUwMmUxMDM5YzBkNjdlZjdhYmUzMzI5MWZlY2IxMzYyNzJmNzNiIjoiNmVmNjZhNTJjODY2YmQ1ZGYyMGVjNTA5NmRlOTIxNjdhZDgzY2FiMGUwOTVhZDBjNzc4YTI5OWYxMjI0ZjEwYyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMTkyICM0IChQPTI0LCBOPTEzLCBBPTMyLCBUPTEwKQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MmY4ZWJhMWMyYzVmNjYyMTU0OTNhNmZhNmFlMDA3YWFlNWJlOTJmNzg4MDMzNmEiOiJmNTUyMmUzNDA1ZDliNzdjYmYzMjU3ZGIyYjk2NzVlNjE4ZTg3NDRhMGVlMDNmMGYiOiIxNTc2OTc1M2Y1MDNhYTMyNGY0YjBlOGVlMCI6IjFiYzA1NDQwZWUzZTM0ZDBmMjVlOTBjYTFlY2JiNTU1ZDBmYjkyYjMxMTYyMWQxNzFiZTZmMmI3MTk5MjNkMjMiOiJiOTEwMzk0MmRiYmI5M2UxNTA4Njc1MWM5YmIwYTNkMzMxMTJiNTVmOTViN2Q0ZjMyZmYwYmI5MGE4ODc5ODEyNjgzZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMTkyICM1IChQPTI0LCBOPTEzLCBBPTMyLCBUPTEyKQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1YTU2NjcxOTdmNDZiODAyNzk4MGQwYTMxNjZjMGE0MTk3MTNkNGRmMDYyOWE4NjAiOiJkMGU0MDI0ZDZlMzNkYWFmYzAxMWZlNDYzNTQ1ZWQyMGYxNzI4NzJmNmYzM2NlZmEiOiI2MjM2YjAxMDc5ZDE4MGZjZTE1NmZiYWFiNCI6IjI5YmRmNjViMjkzOTRkMzYzZDUyNDNkNDI0OWJhZDA4NzUyMGY4ZDczM2E3NjNkYWExMzU2YmU0NThkNDg3ZTUiOiI0NzlmM2Q0MDhiZmEwMGQxY2QxYzhiZjExYTE2N2NlN2FlNGJjZGIwMTFmMDRlMzg3MzMwMTNiOGViZTVlOTJiMTkxNzY0MGMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWVFQgQUVTLTE5MiAjNiAoUD0yNCwgTj0xMywgQT0zMiwgVD0xNCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDJkNDQ4MmVhOGU5OGMxY2YzMDk2NzE4OTVhMTY2MTAxNTJjZTI4MzQzNGJjYTM4IjoiNzgxNjhlNWNjM2NkZGY0YjkwZDViYzExNjEzNDY1MDMwOTAzZTAxOTZmMWZlNDQzIjoiNmVlMTc3ZDQ4ZjU5YmQzNzA0NWVjMDM3MzEiOiI5ZWYyZDBkNTU2ZDA1Y2Y5ZDFlZTlkYWI5YjMyMmEzODljNzVjZDRlOWRlZTJjMGQwOGVlYTk2MWVmY2U4NjkwIjoiZTIzMjRhNmQ1NjQzZGZjOGFlYThjMDhjYmJjMjQ1NDk0YTNkY2JjYjgwMGM3OTdjM2FiY2RiMDU2Mzk3ODc4NWJmN2ZkNzFjNmMxZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMTkyICM3IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNzE3N2ZkMTI5Njc0YzZjOTFjMWM4OWY0NDA4MTM5YWZlMTg3MDI2YjgxMTQ4OTMiOiIyY2VhMGY3MzA0ODYwYTRmNDBhMjhjOGI4OTBkYjYwZjM4OTFiOTk4MjQ3ODQ5NWUiOiIzMWJiMjhmMGUxZTYzYzM2Y2EzOTU5ZGQxOCI6IjI1MjlhODM0NjY4MTg3MjEzZjUzNDJhMWYzZGVlYTBkYzI3NjU0NzhjN2Q3MWM5YzIxYjllYjEzNTFhNWY2Y2IiOiI1YmI3YWE2YWI5YzAyYTU3MTJkNjIzNDNmYmU2MWY3NzRlNTk4ZDZiODc1NDU2MTIzODBlYTIzZGNmZmM5NTc0ZjY3MmJjYTkyZTMwNjQxMSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMjU2ICMxIChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkwNzRiMWFlNGNhMzM0MmZlNWJmNmYxNGJjZjJmMjc5MDRmMGIxNTE3OWQ5NWE2NTRmNjFlNjk5NjkyZTZmNzEiOiIyMzkwMjlmMTUwYmNjYmQ2N2VkYmI2N2Y4YWU0NTZiNGVhMDY2YTRiZWVlMDY1ZjkiOiIyZTFlMDEzMjQ2ODUwMGQ0YmQ0Nzg2MjU2MyI6IjNjNWY1NDA0MzcwYWJkY2IxZWRkZTk5ZGU2MGQwNjgyYzYwMGIwMzRlMDYzYjdkMzIzNzcyM2RhNzBhYjc1NTIiOiI5YzhkNWRkMjI3ZmQ5ZjgxMjM3NjAxODMwYWZlZTRmMDExNTYzNmM4ZTVkNWZkNzQzY2I5YWZlZCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMjU2ICMyIChQPTI0LCBOPTEzLCBBPTMyLCBUPTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg1OTZhNjk4OTBiMGU0N2Q0M2FlZWNhNTRiNTIwMjkzMzFkYTA2ZmFlNjNhYTMyNDlmYWFjYTk0ZTI2MDVmZWIiOiJmMGIwNjVkYTZlY2I5ZGRjYWI4NTUxNTJkM2I0MTU1MDM3YWRmYTc1OGJhOTYwNzAiOiIyMDQ0MmUxYzNmM2M4ODkxOWMzOTk3OGI3OCI6IjRlMGQzYWE1MDJiZDAzZmUxNzYxYjE2N2M0ZTBkZjFkMjI4MzAxZDNlYmFhNGEwMjgxYmVjZDgxMzI2NmUyNTUiOiJkNmEwZjM3N2Y3YzFiMTRkY2RiYTcyOWNhZTUyNzFiMDI3ZTcxY2M3ODUwMTczZWMyNjU4NjdhMjllYjMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWVFQgQUVTLTI1NiAjMyAoUD0yNCwgTj0xMywgQT0zMiwgVD04KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiYWU3MzQ4M2RlMjdiNTgxYTdjMTNmMTc4YTZkN2JkYTE2OGMxYjRhMWNiOTE4MDUxMmExM2UzYWI5MTRlYjYxIjoiMjhlZjQwOGQ1NzkzMDA4NjAxMWIxNjdhYzA0Yjg2NmU1YjU4ZmU2NjkwYTBiOWMzIjoiZGFmNTRmYWVmNmU0ZmM3ODY3NjI0Yjc2ZjIiOiI3MDIyZWFhNTJjOWRhODIxZGE3MmQyZWRkOThmNmI5MWRmZTQ3NDk5OWI3NWIzNDY5OWFlYjM4NDY1ZjcwYzFjIjoiMzU2MzY3YzZjZWU0NDUzNjU4NDE4ZDk1MTdmN2M2ZmFkZGNkN2M2NWFlZjQ2MDEzOGNmMDUwZjQ4YzUwNTE1MSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMjU2ICM0IChQPTI0LCBOPTEzLCBBPTMyLCBUPTEwKQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkNWIzMjFiMGFjMmZlZGNlMDkzM2Q1N2QxMjE5NWM3Yjk5NDFmNGNhYTk1NTI5MTI1ZWQyMWM0MWZhYzQzMzc0IjoiNmFhNmVhNjY4ZGY2MGIwZGI4NTU5MmQwYTgxOWM5ZGY5ZTEwOTk5MTYyNzJhYWZiIjoiYjM1ZmIyMjYyZWRmYTE0OTM4YTBmYmEwM2UiOiJiYTc2MmJiZGE2MDFkNzExZTJkZmM5ZGJlMzAwM2QzOWRmMTA0M2NhODQ1NjEyYjhlOWRjOWZmNWM1ZDA2ZWM0IjoiOTcwMjdkZTVlZmZkODJjNThmOGRiZmI5MDlkNzY5NmZiZTJkNTQ5MTYyNjI5MTIwMDFhNGQ3NjViYzFjOTVjOTBhOTUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWVFQgQUVTLTI1NiAjNSAoUD0yNCwgTj0xMywgQT0zMiwgVD0xMikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2Y0YWY2NzY1Y2FkMWQ1MTFkYjA3ZTMzYWFhZmQ1NzY0NmVjMjc5ZGI2MjkwNDhhYTY3NzBhZjI0ODQ5YWEwZCI6IjdlYmVmMjZiZjRlY2Y2ZjBlYmIyZWI4NjBlZGJmOTAwZjI3Yjc1YjRhNjM0MGZkYiI6ImRkZTJhMzYyY2U4MWIyYjY5MTNhYmMzMDk1IjoiNDA0ZjVkZjk3ZWNlNzQzMTk4N2JjMDk4Y2NlOTk0ZmMzYzA2M2I1MTlmZmE0N2IwMzY1MjI2YTAwMTVlZjY5NSI6IjM1MzAyMmRiOWM1NjhiZDcxODNhMTNjNDBiMWJhMzBmY2M3NjhjNTQyNjRhYTJjZDI5MjdhMDUzYzkyNDRkMzIxN2E3YWQwNSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMjU2ICM2IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE0KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1YzhiNTlkM2U3OTg2YzI3N2Q1YWQ1MWU0YTIyMzMyNTEwNzY4MDllYmY1OTQ2M2Y0N2NkMTBiNGFhOTUxZjhjIjoiMTM4ZWU1M2IxOTE0ZDMzMjJjMmRkMGE0ZTAyZmFhYjIyMzY1NTUxMzFkNWVlYTA4IjoiMjFmZjg5MmI3NDNkNjYxMTg5ZTIwNWM3ZjMiOiJmMWUwYWYxODUxODBkMmViNjNlNTBlMzdiYTY5MjY0N2NhYzJjNmExNDlkNzBjODFkYmQzNDY4NWVkNzhmZWFhIjoiNWIyZjMwMjZmMzBmZGQ1MGFjY2M0MGRkZDA5M2I3OTk3ZjIzZDdjNmQzYzhiYzQyNWY4MmM4Mjg0MTM2NDNiODc5NDQ5NGNiNTIzNiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMjU2ICM3IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MDgyM2I2NGUwYjJkYTNhN2ViNzcyYmQ1OTQxYzUzNGU2ZmY5NGVhOTZiNTY0ZTJiMzhmODJjNzhiYjU0NTIyIjoiYThiZTc5NDYxMzgzNWM0MzY2ZTc1ODE3ZDIyODQzOGYwMTFhMmVjOGE4NmY5Nzk3IjoiNDg1MjZmMWJmZmM5N2RkNjVlNDI5MDY5ODMiOiJmYWI2MmIzZTVkZWRhN2E5YzExMjg2NjNjYzgxYzQ0Yjc0YWIxYmZlNzBiYzFjOWRlYzdjN2ZkMDgxNzNiODBhIjoiY2MzZWZlMDRkODRhNGVjNWNiNmE2YzI4ZGMyYzJkMzg2YTM1OWQ5NTUwZGJkZWM5NjNkZGQ1NjQ2NGFlZDZkMDYxMzE1OWQxYWExODFkY2IiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjMSAoUD0wLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZWJmNjBmMDk2OTAxM2E1NGEzZGVkYjE5ZDIwZjZjOCI6IiI6IjFkZThjNWUyMWY5ZGIzMzEyM2ZmODcwYWRkIjoiZTFkZTZjNjExOWQ3ZGI0NzExMzYyODVkMTBiNDdhNDUwMjIxYjE2OTc4NTY5MTkwZWY2YTIyYjA1NTI5NTYwMyI6IjBlYWQyOWVmMjA1ZmJiODZkMTFhYmU1ZWQ3MDRiODgwIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzIgKFA9MSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmFlN2E4ZTkwN2I4NzIwZjRiMGQ1NTA3YzFkMGRjNDEiOiIwZSI6IjdmMThhZDQ0MmU1MzZhMDE1OWU3YWE4YzBmIjoiOWM5YjBmMTFlMDIwYzY1MTJhNjNkZmExYTVlYzhkZjhiZDhlMmFkODNjZjg3YjgwYjM4NjM1NjIxYzVkYzBkNyI6IjRjMjAxNzg0YmRhYjE5ZTI1NTc4N2ZlY2QwMjAwMGM0OWQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjMyAoUD0yLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZDc0NmFlNmNhYzVjZWZkMDFmMDIxYzBiYmY0YmMzYyI6IjQzNjAiOiI1OTdiMzYxNGZmOWNkNTY3YWZkMWFhZDRlNSI6IjkwNDQ2MTkwZTFmZjVlNDhlOGEwOWQ2OTJiMjE3ZGUzYWQwYWI0YTY3MGU3ZjFiNDM3ZjljMDdhOTAyY2FkNjAiOiJlMzhmZGI3N2MxZjhiYmFjMjkwM2EyZWM3YmMwZjljNTY1NGQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjNCAoUD0zLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZTRmYTFjNmY4YjAwZjEyOTY5NTY3MzVlZTg2ZTMxMCI6IjNhNjczNCI6ImM2YTE3MDkzNjU2ODY1MTAyMGVkZmUxNWRmIjoiMDBkNTc4OTZkYTI0MzVhNDI3MWFmYjljOThmNjFhNjUwZTYzYTQ5NTUzNTdjNDdkMDczYzUxNjVkZDRlYTMxOCI6IjM4NGJlNjU3YmZjNWYzODViMTc5YmU3MzMzZWIzZjU3ZGY1NDZiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzUgKFA9NCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2NjYmI4NTU3ZjZlMDhmNDM2ZDA5NTdkNGJiZTdmZGYiOiI0Y2FiZWIwMiI6ImJiOGUyZWYyZWQ5NDg0ZjkwMjFjZGE3MDczIjoiZmJhMWQxOGE3NGEzYmIzODY3MWFiMjg0MmZmYWE0MzRjZDU3MmEwYjQ1MzIwZTQxNDU5MzBiMzAwOGQ4ZDM1MCI6IjMyNTAxZjQyMzVjNGRkOTZlODNkNWFiNGMzYzMxYzUyMzQ1M2MzMTciCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjNiAoUD01LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzNzI1Yzc5MDViZmFjYTQxNTkwOGM2MTdiNzhmOGRlZSI6ImY1NDk5YTcwODIiOiJjOThlYzQ0NzNlMDUxYTRkNGFjNTZmZDA4MiI6IjExYmM4N2YxYzJkMjA3NmJhNDdjNWNiNTMwZGQ2YzJhMjI0ZjdhMGY3ZjU1NGUyM2Q3ZDI5MDc3Yzc3ODc2ODAiOiJlMzc4Yjc3NjI0MjA2Njc1MWFmMjQ5ZDUyMWM2ZWFlYmRmZjQwYjI2NDIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjNyAoUD02LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MGJlYWQ5OGEwNWQxYmIxNzNjZDRmY2E0NjNiOGZhMyI6ImU0Nzk5OTBiZjA4MiI6IjhhMTRhNmQyNTVhYTQwMzJlYmZmMzdhM2Q3IjoiYmI0ZTcwNmU3M2QyMWRmNjZmNjQxNzM4NTlkNDdlMjQ3NTI3Y2Q5ODMyZTIwZGNjZmY4NTQ4ZWQ1ZjU1NDEwOCI6Ijg5YzkyNDYyMzg4Nzg0MjdmMzZiMWY2YzYzM2U0NTQyZjMyYjUwY2E4ZWRiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzggKFA9NywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGM4ZWM5MTE4NGJhMThlYWUzMWFjMmQzYjI1MjY3M2YiOiIyYTU3NzU5ODY1NTFjOCI6IjBkYTRjOTg4ZjUyMWY1NjQ4MjU5ZjJiZWMyIjoiNmQ1NTczYzkyNzk4OTdkN2QxNjAyZDhhOTVjMDRiYjVjYTNmYWQyZGJlODlhMDI0YjM2NTFlYjIyN2U3M2JiNSI6IjRmMjU5ZjJhNzE4ZmFlYTg1MmE3YzQzNThkZmE5ZjU0NjczNTc2MzhhY2FjOTAiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjOSAoUD04LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOWY5N2VmNTMxOGI4MDA1ZmM3MTMzZmEzMWRkMTIzNiI6IjZkOTcyYTY3M2ZiZTFjYTEiOiIwMWNlOTgxNGM2MzI5ZGJlZTFkMDJiMTMyMSI6Ijg1ODUzZjEyMDk4MWYzM2NmMWQ1MGZkZTZiOGJjODY1ZmU5ODhhOWYxMjU3OWFjZGIzMzZmOWY5OTJiMDhiODkiOiIyZjEyYTdlN2FjZWNhZTVkMjU2MzMwOWVmYzE5MzY4Y2RlZTgyNjY1MzhjYTg5ZDMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjMTAgKFA9OSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzE3OTQ0YmZhZWViODA4ZWVkNjZhZTcyNDJhYjU0NWYiOiI3Y2FhZTI2NDBlNzM0NTM5ZDMiOiI5MTBiM2RiNjRkZjM3MjhjYTk4MjE5ZTAxYiI6ImVkZjY0Zjk4YjNhYjU5M2NiY2Y2OGFiMzdhOGM5NDcyZTQ5Y2I4NDlkNGE3NDRkZWFlOTI1YTVhNDNmYWYyNjIiOiIwZGFlOGIzY2NmMGI0MzlmNmZmOGVlNGEyMzNkZmI3NzUzZjZiZmUzMjFiM2UyNjk1OSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMxMSAoUD0xMCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGZiOWRmNmY2Mzg4NDdmNWRlMzcxZjAwM2RkOTM4ZjQiOiJlMTBjYzM2YmMxYzVkM2M2NDZhYiI6ImM5ZGRmNjFjMDUyZjM1MDJhZDZiMjI5ODE5IjoiNGY5OTM4ZDViYzNkY2JlNDdmNmIyNTZkNWU5OTcyM2QwODkxZTUwYzYxNzVhYmE0MWIwMTFlNDY4NjExM2M0OSI6IjdmNzk3MzY3ZGU1MGJlNmRjMDRlNGNmMGQ4YzI0MTg5YWZmZDM1MDYwY2I3Y2EzZGQxMzYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjMTIgKFA9MTEsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjAwNmZmN2QzMTUzY2FmOTA2ZWM3OTI5ZjVhZWY5Mjc2IjoiMzFiZTFiMjQxY2FlNzljNTRjMjQ0NiI6IjU3ZGIxNTQxYTE4NWJkOWNkYzM0ZDYyMDI1IjoiN2Q5NjgxY2FjMzhlNzc4ZmJhMTFmNDQ2NGY2OWVkOWViZmVhMzFiN2ZmY2FmMjkyNWIzMzgxYzY1ZDk3NTk3NCI6IjlkZDhhNDI0NGZiZGIzMGI2MjQ1NzhhNjI1YzQzMjMzNDc2YmJiOTU5YWNkOWVkZWJlMjg4MyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMxMyAoUD0xMiwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDI2MzMxZTk4YWJhOWU4YzIzYTllOGE5MWQwYjBjOTciOiJhODIyMDBlZjNhMDhjMzkwZGVjNWNiZjkiOiJiY2NmZTY5YmJhMTY4YjgxY2JkZjdkMDE4YSI6IjI2ZTAxMTE0M2E2ODZhNzIyNGRkYjhjNWIxZTVkMzE3MTNmYTIyYzM4Njc4NWUyYzM0ZjQ5OGFlNTZkMDdlZDUiOiJhZGY0ZmM2ZjliZTExMzA2NmMwOTI0OGZjYjU2YTljMWExYzNiYjE2ZmJiOWZiYWVkYWNkYjEyYiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMxNCAoUD0xMywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDMyMDg4ZDUwZGY5YWJhMTRkOTAyMmM4NzBhMGNiODUiOiI0YjEwNzg4YzFhMDNiY2E2NTZmMDRmMWY5OCI6ImUxNmM2OTg2MWVmYzIwNmU4NWFhYjEyNTVlIjoiMGVmZjdkN2JjY2ViODczYzMyMDNhOGRmNzRmNGU5MWIwNGJkNjA3ZWMxMTIwMmY5NmNmZWI5OWY1YmNkYjdhYSI6Ijg5ZjE1YjFjYjY2NWE4ODUxZGEwM2I4NzRjYTZmNzMyNDJmMmYyMjczNTBjMDI3N2U0ZTcyY2RhYTYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjMTUgKFA9MTQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjczMDFjOTA3YjlkMmFhYWMzNTVjNTQxNmZmMjVjNTliIjoiNDg0MzAwYWEzYTUwNmFmY2QzMTNiNDllYWQ4ZCI6IjczMDRiNjViNmRhYjQ2NjI3Mzg2MmM4OGI5IjoiMmM1ZDExNGVmZjYyYzUyN2NjMmUwM2MzM2M1OTVhODBmZTYwOWJmYzBmZTEzY2UzMzgwZWZlMDVkODVjY2VhYyI6IjkyOGNhNThiMGQzNzNkYzUwYzUyYWZhYzc4N2NlOGVlYjVkNWI0OTM2NjEyNTlhOWQ5MWVhMzFhNWY3ZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMxNiAoUD0xNSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzhiZTQ2ZDI3MWJmODY4YzE5ODA1MjM5MWY4YTIxNDciOiI2MWJkMTM4NWJlOTIwOTdlODY2NTUwYTU1Mjc4ZjAiOiI2NzU4ZjY3ZGI5YmZlYTVmMGUwOTcyZTA4YiI6ImM2ZGUzYmU5N2YxMWQwZTJhYjg1YzkzNTNiNzgzZjI1YjM3MzY2YTc4YTIwMTJjZWNmNWI3YTg3MTM4YjNjODYiOiI3YzlmYThkOTliMzhmODI1MzE1ZWNlNmEyNjEzZjU1ZTkwMmYyOTZkY2NlODcwMjYzYWU1MGNkYTRmYWRhZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMxNyAoUD0xNiwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzAwMTBlZDkwZTYxODZlY2FkNDFmMGQzYzdjNDJmZjgiOiJiZTMyMmY1OGVmYTdmOGM2OGE2MzVlMGI5Y2NlNzdmMiI6ImE1ZjRmNDk4NmU5ODQ3Mjk2NWY1YWJjYzRiIjoiM2ZlYzBlNWNjMjRkNjcxMzk0MzdjYmM4MTEyNDE0ZmM4ZGFjY2QxYTk0YjQ5YTRjNzZlMmQzOTMwMzU0NzMxNyI6IjhlNDQyNWFlNTczOTc0ZjBmMDY5M2ExODhiNTI1ODEyZWVmMDhlM2ZiMTVmNDIyN2UwZDk4OWE0ZDU4N2E4Y2YiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjMTggKFA9MTcsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc5ZWFlNWJhZGRjNTg4N2JkZjMwMzFmZDFkNjUwODViIjoiMDAxMzQzZTYxOTFmNWYxNzM4ZTdkMTlkNGVlYzJiOTU5MiI6IjlkYTU5NjE0NTM1ZDFmYWQzNWYyZWNlMDBmIjoiNDY2MDM1MDBhZjllNGU3YTJmOTU0NTQxMWE1OGIyMWE2ZWZkMjFmMmI1ZjMxNWQwMmQ5NjRjMDkyNzAxNDViMyI6IjIxNjJlMjdiZmJmMWQwMGYyNDA0NzU0YTI1NDY2NWZkOTI3MGYwZWRiNDE1OTkzNTg4YjI1MzVlMmUwZTRmZDA4NiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMxOSAoUD0xOCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzE0ZWRhMGY5NTg0NjUyNDZmZTZhYjU0MWU1ZGZkNzUiOiI2MTc4NjhhZTkxZjcwNWM2YjU4M2I1ZmQ3ZTFlNDA4NmExYmIiOiIzMmI2M2NhN2UyNjkyMjNmODBhNTZiYWFhYSI6IjczM2Y4ZTc2NzBkZTM0NDYwMTY5MTY1MTBkZmU3MjJjZTY3MTU3MDEyMWQ5MTMzMWE2NGZlYjNkMDNmMjEwZTYiOiJiMmRjMWU1NDhiM2QzZjIyNWEzNDA4MmY0MzkxOTgwYTA3ODhiNGNjMzY4NTJmZDY0YTQyM2ZiOGU4NzIyNTJiMjQ4ZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMyMCAoUD0xOSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzVlNzE0N2Y1NmJhNDUzMGI4Nzk5YWJhYmViODI3NzIiOiIyZjNiZjBiNTY2NDQwOTEyYTFlNDdhMGMwN2YxY2ZkMzljYjQ0MCI6ImJkZDM4ZTE3M2ZiMjBiOTgxNjU5YzU5N2Q2IjoiM2EwNjlhMmJmZGE0NGFiYmIwYTgyYTk3ZTVlOTA0NzI1OGM4MDNkYTJjNjYxOTBkNzcxNDllMGYwMTBiM2FmOSI6ImJkNjI2NWRjYmE5ZTE0YzU5ZTUxNWUzOTVkYzYwYmQwNTMzNDVmYTZkNzU2OGM3MzhlM2E3ZmRmMTQyZDhmMmQxNTYyYzAiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjMjEgKFA9MjAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc4YzQ2ZTMyNDljYTI4ZTFlZjA1MzFkODBmZDM3YzEyIjoiNDgwMjQyMmM5YjNiNDQ1OWJhMjZlNzg2M2FkODdiMGMxNzJjZmU0YiI6IjVkZTQxYTg2Y2UzZjNmYjFiNjg1YjNjYTRkIjoiZTk4YTc3ZjJhOTQxYjM2MjMyNTg5NDg2YjA1ZjQyNzgyNzU1ODg2NjVhMDZkOThhZWM5ODkxNWNjNTYwN2UwNiI6ImRhZWEyMjM0ZWE0MzM1MzNiZjA3MTZhYmUxYWEzODQ0YjZkM2M1MWU5ZDVjYTNkOGVjNTA2NTYzMGQyZGUwNzE3Y2RlYjdkNSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMyMiAoUD0yMSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODg4MzAwMmJmMTNiM2E5NGIyNDY3MjI1OTcwZGY5MzgiOiJkNTE2YmJmZjQ1MmU3NzA2YzkxYzdhY2UzZTliYWE3NmQ2NWZmNzA1MGYiOiI4MThhNzAyZDVjOGVlOTczYjM0ZTlhY2RhMSI6IjU0NWFlYWM3MzdjMGNhMmEzZDVlMWZkOTY2ODQwYzNhMGQ3MWUwMzAxYWJiZTk5YzdhZjE4ZDI0Y2M3ZTk2MzMiOiJiODUyNDJmZGMwNjM0NGYyYmQ5YTk3YjQwODkwMmViY2QyMmFlY2UzZDQyZjJkYTRkZDRkODE3YzlmYTJkNDRiYzAyMTYzYTBhOSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMyMyAoUD0yMiwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWNlYTAwZWU0NGNmYjljZmJiNTk4ZDM4MTJlMzgwZWYiOiIzM2JmZDA3MTNmMzBmY2FjOGY3Zjk1OTIwYWM2ZDliODAzZGRkNTQ4MGRkOCI6Ijk0ODc4OGE5YzgxODhjYjk4ODQzMGE3ZWJkIjoiNTA0MjJjNWU2YTBmYjgyMzFiM2JiNmUyZjg5NjA3MDE5YmU2YWQ5MmE0ZGFlOGUwZmUzZjllNDg2NDc2MDA0YiI6ImIxNjg3NDdkZWEzYWUwZmJlZGU0NDAyYWY5YTNkYzMxODVkNmQxNjJmODU5ZDgyODEwMTY4MmRlMzI5MjM3ODhjNzAyNjJiODQ4MTQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjMjQgKFA9MjMsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNiODNmNzc3NTFlNzI3MTE0MDFjYmJmNGY2MWFhMGVkIjoiZWVkZTAxYjA4ZjlhMzAzY2RmMTRjOTlkN2E0NTczMjk3MmM2ZWZmMmExZGIwNiI6ImMwYjQ2MWIyZTE1YjhiMTE2ZWY5MjgxNzA0IjoiMmJkMTEyMjMxZjkwM2ZhMGRmZjA4NWRiNDhhMmUyYTk2ZWMwMTk5MjQ5YjAwNWQ1YWI0YzJlYWI3NTNmOWFkMCI6ImZlYjExNGI3YmQzYjQzNDk3YjYyNDU0YTY3NWE2MzJjMzU0NmQyODAyNDYyYzZhZjU3NjQ3ZWZkYTExOWM1OTg2MmNkNWRkMzkwNGVmYyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMyNSAoUD0yNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDNjMTE0Mjg3N2Q5ZjQ1MGUxMmQ3YjZkYjQ3YTg1YmEiOiJiNTA2YTZiYTkwMGMxMTQ3YzgwNjc3NTMyNGIzNmViMzc2YWEwMWQ0YzNlZWY2ZjUiOiI3NmJlY2Q5ZDI3Y2E4YTAyNjIxNWYzMjcxMiI6IjZhNTlhYWNhZGQ0MTZlNDY1MjY0YzE1ZTFhMWU5YmZhMDg0Njg3NDkyNzEwZjliZGE4MzJlMjU3MWU0NjgyMjQiOiIxNGIxNGZlNWIzMTc0MTEzOTI4NjE2MzhlYzM4M2FlNDBiYTk1ZmVmZTM0MjU1ZGMyZWMwNjc4ODcxMTRiYzM3MDI4MWRlNmYwMDgzNmNlNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTkyICMxIChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA4NmUyOTY3Y2RlOTllOTBmYWFlYThhOTRlMTY4YmYwZTA2NmM1MDNhODQ5YTlmMyI6IiI6IjkyOTU0MmNkNjkwZjFiYWJjZjE2OTZjYjAzIjoiNThmNzBiYWIyNGUwYTYxMzdlNWNkM2ViMTg2NTZmMmI1Y2NkZGMzZjUzOGEwMDAwYzY1MTkwZTRhMzY2OGU3MSI6IjNiZjlkOTNhZjZmZmFjOWFjODRjZDMyMDJkNGUwY2M4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzIgKFA9MSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTkyZDM4NzY4YjExYTIzNjk0NWJkNGIzMjdjMzcyOGZhYzI0YzA5MTIzOGI2NTUzIjoiMWMiOiJiMjQ4YTkwYjg0YjAxMjJhNWFkOGUxMjc2MCI6IjI3Y2FiYzQwZGEwZTFlZGEwZWE1ZjhhYmJiN2MxNzllMzA3NzYyNTBhN2IzMGQ3MTFiMGUxMDZjNWVlOWQ4NGEiOiIxYTk2ZjU4YzNmMzhjNDRkMWEzNDVmM2UyZGE2Njc5ZjIwIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzMgKFA9MiwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTAxMmRiNDBmZjZhZTIzYzFlMWNlNDM3NjhjNTkzNmM0NDAwYjBlNzlhZTc3ZjMwIjoiMGM2YyI6ImI2N2U1MDBiMzVkNjBhZDcyNjQyNDAwMjdjIjoiNDBhZmZkMzU1NDE2MjAwMTkxYmE2NGVkZWM4ZDdkMjdlYWQyMzVhN2IyZTAxYTEyNjYyMjczZGViMzYzNzliOCI6ImM5OTZlZjNkNmVmOWY5ODE1NTc1MDZlY2M4Nzk3YmJhYWFhNyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTkyICM0IChQPTMsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZhMTVjYzdmMGRlMjk0ZDczNDFiMWZkNzkzMjZjOGJlNzhlNjc4MjIzNDNjMTk5MiI6ImJjYjg5OCI6ImU1MjU3YWVkMmJkYTA0OTVhYTQ0NTkxZGI0IjoiMzFhMDMzOGMzODM5OTMxZmExZGQ1MTMxY2I3OTZjNGM2Y2ZkZTlmYjMzNmQ4YTgwYWMzNWRlYzQ2M2JlN2E5NCI6IjY4ZjA4Mjk4ZDlhMjE0Nzc3NmRjYTljMWE0MjM4MmJjZTMyM2IyIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzUgKFA9NCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjUzMzBhODQ0N2Q3NGE3OTg3ZmI3MThjZmFlMjQ2YjVjN2UwNTc5OTEwNjRlZWFmIjoiYjQ2YjM0M2UiOiIyZWYyOWQ2MmI0MGQ4NjQzODQ4Nzk3Y2RlOCI6IjEyMjViMDM2ZTYwNDRkZjUyMzE0MDE2NzYwZTkyNzUwZGUwOTM2MTIwMzk1ZGU3NTBhMmM1NGE3ZmEwY2VhODIiOiJjMmMzOWQ2ZjkzNDRlMmRlMDY0ZjI2OWQwNjVhMmE2MTA4NjA1OTE2IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzYgKFA9NSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzA0MTkxNDVhZTk2NjU5MWI0MDhjMjllNWZkMTRkOTExMjU0MjkwOWJlNTM2M2Y3IjoiOGNlYWViODlmZCI6IjI3ZTZiMmE0ODJiYmM2ZjEzNzAyMDA1NzA4IjoiZTA0ZTgxZTg2MGRhZjk2OTYwOThjNzIzMDg1ZDgwMjNjMjQwZWJlN2E2NDMxMzFlMzUzNTlhYjA0YmQ2NTBmZSI6ImVjOWQ1ZWQzNjI0M2RkZjc3YjMzZDhjZjI5NjNiYTc2ZmQ0ZTE5ZjNjNSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTkyICM3IChQPTYsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc0OGFkNTAzMzg4YTM0MDQxYTdiZGFlNjM2MWQ1Nzg5NDM1N2MzMzNiYWNmMDJjYSI6IjI0ZDY4ODBhZWQ3ZSI6IjUxOGI3OWQxOTQ1NzliMTlmMmQ4ODQ1YjcwIjoiNjkxZGQ5OGY2MWZkMjEzYjA4NDBlYzVhNmYwNmVmOWExNDIwYmUwZDU5YmRlNWU0MzU0NjM0N2EyYTg2NWE5NCI6IjI3MDEyMGY5NjM0ZWMxNTUzNmUyMWQ5NjFjNjc1MDcwZWM0Y2ZmOTAzN2JjIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzggKFA9NywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjkzMGNjYTMwYTNmZDIzMGMyMzdjOGYzY2M2NzkyZDBjNDA4NGRmZjVjMThkNzc1IjoiMmE3NTVlMzYyMzczZWYiOiI3NTc0ODAyZmQ4MmZlOTZjMDU0MzFhY2Q0MCI6IjFjZjgzOTI4YjZhOWU1MjVmZTU3OGM1YzBmNDBjMzIyYmU3MWIzMDkyMjM5YmZmOTU0ZGQ2ODgzNzM4ZDZkNzEiOiJmMDYyMzhiMDQ1MGZkMWY0YjZjYWIxMzgzYWRiNDIwYzQ3MjRhYTdiZGZlZmI3IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzkgKFA9OCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzE0YzEzNjk5OWU0MWQxMzdiZDdiYTE3MjAxYTlmYTQwNjAyNTg2ODMzNGUzOWIzIjoiNGQ1NGQ4YjA2YjIwNDQ0NSI6IjY1ZjdhMGY0YzBmNWJiYTlkMjZmN2UwZGRiIjoiNWM3Y2U0ODE5YjMwYjk3NWFlNmNlNThkY2MxYmZhMjlhOGI2ZGRhOGY0Yjc2YzdlMjM1MTY0ODc3NDVlODI5YyI6IjJiYWY5MGM0OTBiMTFmOTYwNzQ4MjM2MmFiM2YxNTdjNDJkMGU5YzZjNWNmZmNmMCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTkyICMxMCAoUD05LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMTlmNmJlMDYyZWMwYWFmMzMwNDZiZDUyNzM0ZjMzMzZjODVkODM2OGJlZjg2YWIiOiIxMzUxMWFlNWZmNmM2ODYwYTEiOiI3ZjJkMDdmODE2OWM1NjcyYjRkZjdmNmNhYyI6ImQ2OGQ1Zjc2M2RiNjExMWM1ZDYzMjRkNjk0Y2IwMjM2YmVhYjg3N2RhYWU4MTE1ZWNiNzVkNjA1MzA3NzdiNTgiOiJiMzg1OWI3NTc4MDJlYmQwNDg0NjdmZDhlMTM5ZWI5ZWU4ZmNkY2E0NWVkODdkYzFjOCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTkyICMxMSAoUD0xMCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGUxYzgyNjMzNDUwODFkMmRmYTlhZmRmMzc2NzU5NzExMzVlMTc4ZGY1NTRhNGQ4IjoiZjc3N2FiYTFmYTcwZjk0ZTZkZTkiOiJhMzAxYmI4MmY5MWE1ODJkYjAxMzU1YzM4OCI6IjlhZDUyYzA0MTM5MGQwZDRhYWY2NWE0NjY3YzMyMzljOTVlN2VhZTYxNzhhY2MyM2ZiNGU3MGE4NTJkNDgzYzYiOiI5ZDhiZmY2ZDJkY2RlNzcxMDRhYzZhYmEwMjVhYmMwMTQxNmE3Y2E5ZjA5NmFiMjUyOWNiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzEyIChQPTExLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNDhkMzZiZDE1ZjU4ZTQ3ZmNmMWM5NDgyNzIzNTU4MjFmODQ5MmU2ZTY5ZjM2NjEiOiIzMzcwOWQ5Yzc5MDZlMmY4MmRkOWUyIjoiOWU4ZDQ5MmMzMDRjZjZhZDU5MTAyYmNhMGUiOiI5ZWMwOGM3ZWQ2YjcwODIzZDgxOWU5YWIwMTllOTkyOTI0OWY5NjZmZGIyMDY5MzExYTBkZGM2ODBhYzQ2OGY1IjoiOTExNGQzNmI3OWIxOTE4YjI3MjBmNDBjZGRjZTY2ZGY5YjQ4MDJmNzM3YmVhNGJkOGY1Mzc4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzEzIChQPTEyLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3N2E2N2ZiNTA0Yjk2MTAyODYzMzMyMTExMWFhYzJjMzBlYjZkNzFhOGNmNzIwNTYiOiIxMDU1NGMwNjJkMjY5ZmY2ZGNkOTg0OTMiOiJhY2FkYzAzMzAxOTQ5MDZmOGM3NWFjMjg3ZiI6IjhjMTg0ODZkNTI1NzFmNzBmMmJhNmE3NDdhYWEzZDRiM2ViYzJlNDgxZWUxYjcwOTA3ZGRkYjk0YmRmYTBjYTYiOiI3ZjhiMGNhZDc5YjU0NWU1YWRkZjBiMDRmZjRiMGYyYjJhNTA2NzI4MzIxMGFiYTg2MzBkMDMwNiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTkyICMxNCAoUD0xMywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGQ0MjM1MTllNDExMGMwNjA2MzA2MTMyM2Y4YzdjOTUzODc3NzZiNmVlNGU0YjZlIjoiNDAyMWZmMTA0ZmYxZGJkOTFlNDZkYjI0OWYiOiIzOWFiZTUzODI2ZDliOGUzMDBmZTc0NzUzMyI6ImNkZDliZjFiNGY4NjVlOTIyYzY3OGVjNDk0N2VhMGNiMDJlNzhiZDVjMTUzOGYzM2FlYjgxOGFkM2Y0N2U1MTkiOiI3OTUzZDNjZDY2ZDA5Mzc4NWQxMjNmNjViYTM3ZjE2NzYxZGQ2YWVkYmZjNzg5YWQ5NmVkZjE0OTBkIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzE1IChQPTE0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNjBjZjdjZWI2MmJmMzExODUzMmJjNjFkYWEyNWNlOTQ2OTkxMDQ3Zjk1MWI1MzYiOiJkNjRmOTQyNmZlYmNlNmE4NGM5NTRkZDVkZWQ1IjoiNzQ5OTQ5NGZhYTQ0YTc1NzZmOWVkNTU4MGQiOiJiYWE0ODJjNjRlZWZkMDkxMTg1NDlhODk2OGY0NGNmZWE3YTQzNjkxM2E0MjhlMzBhYTRhYjQ0ODAyYTRiYTM1IjoiZjc1ODBmMTcyNjZkNjgyMzc3NDdiZjU3YzdlZDgyNDJhYzFhMTk3OWM1YTllN2JjNjdkNzY5OGM3ZWZhIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzE2IChQPTE1LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MmQ0YmM5YWFjMjk4YjA5MTEyMDczMjc3MjA1ZTFiZjQyMTc2ZDFlNjMzOWI3NmMiOiIyNWE1M2ZkM2U0NzZkYzA4NjBlZWVlYTI1ZmNiMGMiOiI3MDMyNWVmMTllNTgxYjc0MzA5NWNkNWViMSI6IjZkMTRiYjI2MzVjNWQwYWU4MzY4N2YxODI0Mjc5Y2YxNDExNzM1MjdlMWIzMmQxYmFmOGEyN2Y3ZmUzNGE1NDIiOiI0YTFjZmQwMDIzNTU3YTE4NGI5Mjk5NjViMGE0NDVjYjM5OTNjYTM1YWNmMzU0Y2IyYjQyNTRmZjY3MmU3ZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTkyICMxNyAoUD0xNiwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjg3M2YxYzZjMzA5NzVhZmY2ZjA4NDcwMjY0MzIxMTMwYTZlNTk4NGFkZTMyNGU5IjoiNTA1MWEwYjBiNjc2NmNkNmVhMjlhNjcyNzY5ZDQwZmUiOiI3YzRkMmY3Y2VjMDQzNjFmMTg3ZjA3MjZkNSI6Ijc3NzQzYjVkODNhMDBkMmM4ZDVmN2UxMDc4MTUzMWI0OTZlMDlmM2JjOTI5NWQ3YWU5Nzk5ZTY0NjY4ZWY4YzUiOiIwY2U1YWM4ZDZiMjU2ZmI3NTgwYmY2YWNjNzY0MjZhZjQwYmNlNThmZDRjZDY1NDhkZjkwYTAzMzdjODQyMDA0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzE4IChQPTE3LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzY2Y4ZGEyN2Q1YmUxYWYwMjQxNTg5ODVmNzI1ZmQ3YTYyNDJjYmUwMDQxZjJjMTciOiJmNmRkMmM2NGJmNTk3ZTYzMjYzY2NhZTFjNTRlMDgwNWZlIjoiMDdmNzdmMTE0ZDcyNjRhMTIyYTdlOWRiNGYiOiIzMDQ1N2U5OTYxNmYwMjQ3ZjEzMzliMTAxOTc0ZWEyMzE5MDRkMGVmN2JkMGQ1ZWU5YjU3YzZjMTY3NjFhMjgyIjoiY2UzMDMxYzNhNzA2MDBlOTM0MGIyZGRmZTU2YWE3MmNmZmRjNWU1M2U2OGM1MWVlNTViMjc2ZWIzZjg1ZDJjZjYzIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzE5IChQPTE4LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNDZhM2EyNGM2NmViODQ2Y2E2NDEzYzAwMTE1M2RjNjk5ODk3MGMxMmU3YWNkNWEiOiI1NmQxOGQzZTJlNDk2NDQwZDBhNWM5ZTFiY2I0NjRmYWY1YmMiOiJiNzljMzNjOTZhMGE5MDAzMDY5NDE2M2UyYSI6ImVhOTQwNWQ2YTQ2Y2FjOTc4M2E3YjQ4YWMyZTI1Y2M5YTNhNTE5YzQ2NThiMmE4NzcwYTM3MjQwZDQxNTg3ZmIiOiIwMWJhYmEyZTBkNWI0OWQ2MDBkMDNhN2VkODRlZTg3ODkyNmMwY2E0NzhmNDBhNmZiZGUwMWY1ODRkOTM4YTFjOTFiZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTkyICMyMCAoUD0xOSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2I3MTA0NWNjZWY3MzViZDBjNWJlYTNjZjNiN2UxNmU1OGQ5YzYyMDYxYTIwNGUwIjoiODkwZDA1NDIwZDU3ZTNiM2Q4ZGJlZjExN2ZlNjBjM2ZhNmEwOTUiOiIyYjllY2ZkMTc5MjQyYzI5NWZlNmM2ZmE1NSI6ImI4OTE2NmY5N2RlYjljYzdmZGViNjM2MzllZWFmYjE0NTg5NWIzMDc3NDllYzFhMjkzYjI3MTE1ZjNhYTgyMzIiOiJmODQyZmY2NjYyNjg0ZGU4Nzg1YWYyNzVmYTJkODJkNTg3ZGUwNjg3ZWJlMzVlODgzY2JkNTNiODJmMmE0NjI0YzAzODk0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzIxIChQPTIwLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkYzdjNjc3MTVmMjcwOWUxNTBjY2VmZjAyMGFhYWNmODhhMWU3NTY4MTkxYWNiY2YiOiJmMzgzYmQzZTYyNzA4NzZiNzRhYmJiNWQzNWU3ZDRmMTFkODM0MTJjIjoiZGE1NmVhMDQ2OTkwYzcwZmEyMTZlNWU2YzQiOiJmNzk5ODE4ZDkxYmU3YmFiNTU1YTJlMzlmMWY0NTgxMGE5NGQwNzE3OWY5NGZlMTE1MWQ5NWFiOTYzYzQ3NjExIjoiMzc3YjVkZjI2M2M1Yzc0ZjYzNjAzNjkyY2JiNjFlYTM3YjZkNjg2Yzc0M2Y3MWUxNTQ5MGNhNDFkMjQ1NzY4OTg4NzE5ZWRlIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzIyIChQPTIxLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmNDFlMzY5YTE1OTk2MjdlNzY5ODNlOWE0ZmMyZTk2M2RhYjQ5NjBiMDllYmUzOTAiOiI4MWFkM2YzODZiZWRjYmY2NTZmZjUzNWM2MzU4MGQxZjg3ZTNjNzIzMjYiOiI2OGVmODI4NWI5MGYyOGJjZDNjYjFiYWNlYSI6ImRiZTNlODJlNDk2MjRkOTY4ZjU0NjNjZWI4YWYxODlmYjNhZDhiM2I0MTIyMTQyYjExMGQ4NDhhMjg2ZGFlNzEiOiI5ZjYwMjgxNTNlMDZkMTRkMzBiODYyYTk5YTM1NDEzNDEzYzA0YTQ5ZGM2ZjY4YTAzYTExY2YwMGQ1OGYwNjJhN2IzNjQ2NWQxMyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTkyICMyMyAoUD0yMiwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzI4OWU1OWUzYTdiMjliZjRhMzA5YWZjMjUzMDMwYmJhNGI5YmRkNjRmMDcyMmY5IjoiNTM5MTFhNjdiNjU3MzhmODdmYzdjMjBkNmRiODA0NGJkZTFhZjk1ODM4ZDEiOiIzMDI1OWNlMTA2ZTliZDdhOGJhY2JhZjIxMiI6IjI4NzBiZDlhMjZjNTEwZTlhMjU2OTIwODk5YmJjNzdhNGViOWI1M2Y5MjcwNDVhOTQzZDVlZDZiMTM2MzhjZjMiOiI3MGNmMzdkNGI2ZjdlNzA3Mzc2YjE1NzRjZTE3YzA0MGI1MTQzZGE0N2FiYjJmZTlhZmFmYzJmY2NkOThjY2Y2M2IwZmRlYzMwZWFjIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzI0IChQPTIzLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0MGYxYWZmMmU0NGQwNWYxMjEyNjA5N2EwZjA3YWMwMzU5YmExYTYwOTM1NmE0ZTYiOiI4ZDk4YzU4MGZiMzY2ZjMzMGRiZmRhMjBmOTFkOTlhMDg3OGI0N2VmZDE0YzZkIjoiMGRmM2ZjNjM5NmY4NTE3ODVmY2E5YWE1ZmYiOiJlOTY5OWIyMGIwNTc0ZmNlOGI1Y2JjNGVmNzkyZWI5NmUyYzFjY2UzNmIxYjFmMDZlYTJhOTVmZTMwMDYzM2NjIjoiNTc5Y2RmOWRhNjJhMmRmNDcxZTAzNDUwNTE2YWRiNGNlOTlhZTBmNzBiMTc3NmEzOWMzYjQyOWExZjkyMmZhYzBiNTllMjlhMTIyZTQzIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzI1IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MWY5ZDYzNmEwNzFjM2FhZDE3NDMxMzdlMDY0NGE3M2RlOWU0N2JkNzZhY2Q5MTkiOiI0ZWFmOTM4NGNhZDk3NmY2NWY5ODA0MmQ1NjFkNzYwYjVhNzg3MzMwZGM2NThmNmMiOiIxYmY0OTFhYzMyMGQ2NjBlYjJkZDQ1YzZjMyI6IjNiZGZkN2YxOGQyYjZkMDgwNGQ3NzlmMDY3OWFhYTJkN2QzMjk3OGMyZGY4MDE1YWU0Yjc1OGQzMzdiZTgxZGQiOiI2MzU1MzBjYWIxNGUzZDBhMTM1YmI2ZWViYjU4Mjk0MTI2NzZlNmRkNDk5NWY5OWNiN2UxN2YyMzViZDY2MGU3ZTE3YjJjNjUzMjBlOWZkNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMxIChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM2YzE0YzY1NWU1MmM4YTRjN2U4ZDU0ZTk3NGQ2OThlMWYyMWVlM2JhNzE3YTBhZGZhNjEzNmQwMjY2OGM0NzYiOiIiOiIyOTFlOTFiMTlkZTUxOGNkNzgwNmRlNDRmNiI6ImI0ZjgzMjY5NDRhNDVkOTVmOTE4ODdjMmE2YWMzNmI2MGVlYTVlZGVmODRjMWMzNTgxNDZhNjY2YjY4NzgzMzUiOiJjYTQ4MmM2NzRiNTk5MDQ2Y2M3ZDdlZTBkMDBlZWMxZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMyIChQPTEsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNjNDlkNGEzOTc4ODdjYjU3YmM5MmM4YThjMjZhN2FhYzIwNWM2NTNlZjQwMTFjMWY0ODM5MGFkMzVmNWRmMTQiOiIxYSI6IjZkZjhjNWMyOGQxNzI4OTc1YTBiNzY2Y2Q3IjoiMDgwZjgyNDY5NTA1MTE4ODQyZTVmYTcwZGY1MzIzZGUxNzVhMzc2MDk5MDRlZTVlNzYyODhmOTRjYTg0YjNjNSI6ImE1ZjI0ZTg3YTExYTk1Mzc0ZDRjMTkwOTQ1YmYwOGVmMmYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMyAoUD0yLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzNmIwMTc1Mzc5ZTdhZTE5YzI3N2ZlNjU2YTIyNTJhODI3OTYzMDliZTBmMGQ0ZTFjMDdmZGRlODhhY2E0NTEwIjoiYmU4MCI6IjAyMWJkOGI1NTE5NDdiZTRjMThjZjFhNDU1IjoiYjVjNmU4MzEzYjljNjhlNmJiODRiZmZkNjVmYTQxMDhkMjQzZjU4MGVhYjk5YmI4MDU2M2VkMTA1MGM4MjY2YiI6ImVjYWNjMzE1MmU0M2Q5ZWZlYTI2ZTE2YzFkMTc5M2UyYThjNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICM0IChQPTMsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRkYjczOWFjZGE2YzU2ZWM5YWVmYzRmNGNiYzI1ODU4N2Y0NDNkYTRlNzZkZGZhODVkYmUwODEzYTg3ODQ5NDQiOiJkYjQ1N2MiOiIwYmRkZjM0MjEyMWI4MmY5MDYzNjhiMGQ3YiI6Ijg4NzQ4NmZmZjc5MjI3NjgxODYzNjNlZjE3ZWI3OGU1Y2YyZmFiOGY0N2E0ZWIzMjdkZThiMTZkNjNiMDJhY2IiOiI1NDQ3M2MzZjY1ZDZiZTQzMWU3OTcwMDM3ODA0OWFjMDZmMjU5OSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICM1IChQPTQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYyYjgyNjM3ZTU2N2FkMjdjMzA2NmQ1MzNlZDc2ZTMxNDUyMmFjNWM1Mzg1MWE4Yzk1OGNlNmM2NGI4MmZmZDAiOiI4NzI5NDA3OCI6IjViYzI4OTZkOGI4MTk5OTU0NmY4ODIzMmFiIjoiZmZmYjQwYjBkMThjYjIzMDE4YWFjMTA5YmY2MmQ4NDlhZGNhNDI2MjlkOGE5YWQxMjk5YjgzZmUyNzRmOWE2MyI6IjJiYzIyNzM1YWIyMWRmZGNmZTk1YmQ4MzU5MmZiNmI0MTY4ZDlhMjMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjNiAoUD01LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiYzI5YTE2ZTE5Y2ZiZTMyYmY0OTQ4ZThlNDQ4NDE1OWJjODE5YjdlZWM1MDRlNDQ0MWExYTk4Y2EyMTBlNTc2IjoiM2U4YzZkMWIxMiI6IjRmMThiY2M4ZWUwYmJiODBkZTMwYTllMDg2IjoiNTc0OTMxYWU0YjI0YmRmN2U5MjE3ZWNhNmNlMmEwNzI4Nzk5OWU1MjlmNmUxMDZlMzcyMWM0MmRhY2YwMGY1ZCI6IjQ1ZjM3OTVmY2Y5YzY2ZTFhNDMxMDNkOWExOGY1ZmJhNWZhYjgzZjk5NCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICM3IChQPTYsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVmNGI0Zjk3YjZhYTQ4YWRiMzMzNmM0NTFhYWMzNzdmZGU0YWRmNDc4OTdmZDljY2RmMTM5ZjMzYmU3NmIxOGMiOiIxYjYyYWQxOWRjYWMiOiI3YTc2ZWFjNDQ0ODZhZmRiMTEyZmM0YWFiOSI6ImE2NmM5ODBmNjYyMWUwM2ZmOTNiNTVkNWExNDg2MTVjNGFkMzZkNmNiZGQwYjIyYjE3M2I0YjE0NzlmYjhmZjciOiI0YWQxZmNmNTdjMTJiMTRlMGU2NTlhNjMwNWI0YWVmZmFlODJmOGE2NmM5NCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICM4IChQPTcsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY3YWFlZmYzYTFkYzBjYzVlY2YyMjBjNjdhZDlmNmRkYTA2MGI0ZjFiZTNjYzYwOWNiNGYxOGIyMzQyYTg4YTIiOiJkNDhkYWEyOTE5MzQ4ZCI6ImQwZDY4NzFiOWFkYzg2MjNhYzYzZmFmMDBmIjoiZTk3MTc1YzIzYzViNDdkYThjZTY3ODExYzZkNjBhNzQ5OWIzYjdlMTM0N2FkODYwNTE5Mjg1YjY3MjAxZmUzOCI6ImViMzJhYjE1M2E4ZTA5MmZhMzI1YmFmYzE3NmEwN2MzMWU2Y2MwYTg1MmQyODgiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjOSAoUD04LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0OTNlMTQ2MjNjZDI1MDA1OGE3ZmM2NmEzZmVlMGMyNGI2ZTM2M2I5NjZjMjMxNGFmZjUzYjI3NmI2YzJlYTdiIjoiZTU2NTNlNTEyZDhiMGI3MCI6ImZlMmQ4YWU4ZGE5NGE2ZGY1NjNmODljZTAwIjoiNTc5YTYzN2UzN2EwOTc0Y2QyZmMzYjczNWQ5ZWQwODhlOGU0ODhmZmUyMTBmMDQzZTBmOWQyMDc5YTAxNWFkNiI6Ijc1ZDMxZjhkNDdiZWU1YzRlMmJhNTM3MzU1YWU4YWIyNWNjOWVkMzUxMWZmNTA1MyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMxMCAoUD05LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMjMyNTUzNzI0NTVjNjkyNDRhMDIxMGU2YTllMTNiMTU1YTVlYzlkNmQwOTAwZTU0YThmNGQ5ZjdhMjU1ZTNhIjoiNjE1ZDcyNGFlOTRhNWRhZjhkIjoiMjc0ODQ2MTk2ZDc4ZjBhZjJkZjU4NjAyMzEiOiI2OWFkY2FlOGExZTlhM2YyZmU5ZTYyNTkxZjdiNGM1YjE5ZDNiNTBlNzY5NTIxZjY3ZTdlYThkN2I1OGQ5ZmM4IjoiZjAxOWFlNTEwNjMyMzkyODdkODk2ZTcxMjdmMTdkMTNmOTgwMTNiNDIwMjE5ZWI4NzciCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMTEgKFA9MTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRiZjA2MzY2Zjc2NmUyODExZWNkNWQ0Mzg0ZDZkMDgzMzZhZGMzN2UwODI0ZDYyMGNmMGQ5ZTdmZDFlN2FmYTkiOiIyZTNjZjBhZjhjOTZjN2IyMjcxOSI6ImIzNTAzZWQ0ZTI3N2VkOTc2OWIyMGMxMGMwIjoiOWFlNWEwNGJhYTlkMDJjODg1NGU2MDk4OTljNjI0MDg1MWNiYzgzZjgxZjc1MmJjMDRjNzFhZmZhNGVlZDM4NSI6ImUzMTdkZjQzYWI0NmViMzFiZTdlNzZmMjczMGQ3NzFkNTYwOTlhMGM4ZDI3MDNkN2EyNGUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMTIgKFA9MTEsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRkZDU1NWJkM2E1MjUzYTkwYjY4YjVkNGQ0NmJkMDUwMzQwZWUwN2RkYWQzYTcyMDQ4YzY1N2I1ZDc2YmIyMDciOiI4MDE1YzBmMDdhN2FjZDRiMWNiZGQyIjoiYmRiMWI4MmJhODY0ODkzYzJlZThmNzQyNmMiOiI5YmNjNTg0OGU5MjhiYTAwNjhmN2E4NjdlNzllODNhNmY5MzU5MzM1NGE4YmZjZmMzMDZhZWViOTgyMWMxZGExIjoiOGU5ZjgwYzcyNjk4MGIzZDQyZTQzYTY1MTJhMDQ4MTI1NWI3MjlhMTBmOWVkYjVmMDdjNjBjIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzEzIChQPTEyLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkM2FkOGNkYTlhMGQ5MWEyMDVjNGMwNTY2NTcyOGJiMjU1ZDUwYTgzNDAzYzlhYjkyNDNmY2JiZTk1YWU3OTA2IjoiYTIwM2FlYjYzNWUxOTViYzMzZmQ0MmZhIjoiMGI1ZjY5Njk3ZWIxYWYyNGU4ZTZmY2I2MDUiOiJlYTI2ZWE2OGZhY2RhYzNjNzViYTBjZGY3YjFhZDcwM2M5NDc0YWY4M2IzZmJmYzU4ZTU0OGQ3NzZiMjUyOWI5IjoiNjI2NjYyOTdhODA5Yzk4MmI1MDcyMmJkNTZiYzU1NTg5OTM0NWUwNDA0YjI5MzhlZGYzMzE2OGUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMTQgKFA9MTMsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUzMDBmYzdhNWI5NjgwNjM4MmMzNWFmNWIyYzJlOGUyNjM4Mjc1MWI1OTAxMGQ0YjFjZmM5MGE0YTljYjA2ZGYiOiI4NzE0ZWI5ZWNmOGJkYjEzZTkxOWRlNDBmOSI6IjU1YjU5ZWI0MzRkZDFiYTM3MjNlZTBkYzcyIjoiOWIxZDg1Mzg0Y2I2ZjQ3YzBiMTM1MTRhMzAzZDRlMWQ5NWFmNGM2NDQyNjkxZjMxNGE0MDExMzVmMDc4MjllYyI6ImJhNjA2MzgyNGQzMTRhYTNjYmFiMTRiOGM1NGM2NTIwZGFjMGYwNzM4NTZkOWI5MDEwYjc4NTc3MzYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMTUgKFA9MTQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNhZTViZTU5MDRiYWU2MjYwOWFjNTI1ZTJkMWNhZDkwMTMzNDQ3NTczZDdiNjA4OTc1YTZhMmIxNmNiMmVmYzAiOiI5NTk0MDNlMDc3MWMyMWE0MTZiZDAzZjM4OTgzIjoiNjFiZjA2YjlmYTVhNDUwZDA5NGYzZGRjYjUiOiIwMjQ1NDg0YmNkOTg3Nzg3ZmU5N2ZkYTZjOGZmYjZlNzA1OGQ3YjhmNzA2NGYyNzUxNGFmYWFjNDA0ODc2N2ZkIjoiMzdhMzQ2YmM0OTA5OTY1YzU0OTc4MzgyNTE4MjYzODVhNTJjNjg5MTRlOWQxZjYzZmQyOTdlZTZlN2VkIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzE2IChQPTE1LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmYWI2MmIzZTVkZWRhN2E5YzExMjg2NjNjYzgxYzQ0Yjc0YWIxYmZlNzBiYzFjOWRlYzdjN2ZkMDgxNzNiODBhIjoiNTRiZTcxNzA1ZTQ1MzE3N2I1M2M5MmJiZjJhYjEzIjoiYTVjMWIxNDZjODJjMzRiMmU2ZWJlY2ViNTgiOiI1ZTYwYjAyYjI2ZTJkNWY3NTJlYjU1ZWE1ZjUwYmIzNTRhNmYwMWI4MDBjZWE1YzgxNWZmMDAzMGI4YzdkNDc1IjoiNzg4ZGI5NDk2OTdiOGNkOWFiYmM3NGVkOWFhNDBjZDY4NTJkYzgyOTQ2OTM2ODQ5MTE0OWQ2YmIxNDAwNzEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMTcgKFA9MTYsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVlOGNlMTg3MTY5Nzc5ZDEzZTQ0M2Q2NDI4ZTM4YjM4YjU1ZGZiOTBmMDIyOGE4YTRlNjJmOGY1MzU4MDZlNjIiOiJkMTVmOThmMmM2ZDY3MGY1NWM3OGEwNjY0ODMzMmJjOSI6IjEyMTY0MmM0MjE4YjM5MWM5OGU2MjY5YzhhIjoiNzE4ZDEzZTQ3NTIyYWM0Y2RmM2Y4MjgwNjM5ODBiNmQ0NTJmY2RjZDZlMWExOTA0YmY4N2Y1NDhhNWZkNWEwNSI6ImNjMTdiZjg3OTRjODQzNDU3ZDg5OTM5MTg5OGVkMjJhNmY5ZDI4ZmNiNjQyMzRlMWNkNzkzYzQxNDRmMWRhNTAiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMTggKFA9MTcsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdkYTZlZjM1YWQ1OTRhMDljYjc0ZGFmMjdlNTBhNmIzMGQ2YjQxNjBjZjBkZTQxZWUzMmJiZjJhMjA4YjkxMWQiOiJiMDA1M2QxZjQ5MDgwOTc5NDI1MGQ4NTYwNjJkMGFhYTkyIjoiOThhMzJkN2ZlNjA2NTgzZTI5MDY0MjAyOTciOiIyMTdkMTMwNDA4YTczOGU2YTgzMzkzMWU2OWY4Njk2OTYwYzgxNzQwNzMwMTU2MGJiZTVmYmQ5MjM2MTQ4OGI0IjoiYTYzNDFlZTNkNjBlYjM0YThhOGJjMjgwNmQ1MGRkNTdhM2Y2MjhlZTQ5YThjMjAwNWM3ZDA3ZDM1NGJmODA5OTRkIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzE5IChQPTE4LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwNzg2NzA2ZjY4MGMyN2I3OTJkMDU0ZmFhNjNmNDk5YThlNmI1ZGRiOTA1MDI5NDYyMzViZjc0YzAyMmQ3NzJjIjoiNmEyNjY3NzgzNmQ2NWJkMGQzNWEwMjdkMjc4YjI1MzRlN2RmIjoiZjYxZWYxYzhjMTBhODYzZWZlYjRhMWRlODYiOiI2Nzg3NGM4MDg2MDBhMjdmY2FiMzRkNmY2OWNjNWM3MzA4MzFhZDQ1ODkwNzVkZDgyNDc5ODIzY2I5YjQxZGMzIjoiZDFjMWYzYzYwNjAzMzU5YzdkNmE3MDdmMDVlY2IyMjk2ZjhlNTJmMjIxMGI3YTc5OGFkNWM3NzhlZTdjZmQ3ZmU2ZTAiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMjAgKFA9MTksIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImJhYzU1Zjk4NDdkOTMzMjViZjUwNzFjMjIwYzBhM2RmZWIzOGYyMTQyOTJkNDdiNGFjYjdiMGE1OTdmZTA1NmYiOiJjMWE5OTRkYzE5OGY1Njc2ZWE4NTgwMWNkMjdjYzhmNDcyNjdlYyI6IjA1YjUwYzQ1OGFkYmJhMTZjNTVmY2M0NTRkIjoiODlhZDZhZTFlNTUwOTc1ZWFhOTE2YTYyNjE1ZTZiNmE2NjM2NmExN2E3ZTA2MzgwYTk1ZWE1Y2RjYzFkMzMwMiI6IjdjOWIxMzgxNzc1OTBlZGFhZmVjNDcyOGM0NjYzZTc3NDU4ZmZiZTMyNDNmYWVjMTc3ZGU0YTJlNGEyOTM5NTIwNzNlNDMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMjEgKFA9MjAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhiZWVkZWI4NWQ0MmMyYTdmYTZmNzIzN2IwNWFjYjE5N2RkOGUxNjcyNDcxYWM4NzgwNjRmZTUzMTllYWI4NzYiOiI3YjEyNWMzYjk2MTJhOGI1NTQ5MTNkMDM4NGY0Nzk1YzkwY2QzODdjIjoiODQ3OWJkZmFkMjhlYmU3ODFlOWMwMWEzZjYiOiI3YWViZGZkOTU1ZDZlOGExOWE3MDFkMzg3NDQ3YTRiZGQ1OWE5MzgyMTU2YWIwYzBkY2QzN2I4OTQxOWQ2ZWZmIjoiNmNjNjExZDgxNmIxOGM2ODQ3YjM0OGU0NmE0MTE5NDY1MTA0MjU0YTA0ZTJkZmVlZWFjOWMzMjU1ZjYyMjc3MDQ4NDhkNWIyIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzIyIChQPTIxLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjM2EwYzEyNmNhZDU4MTAxMjE1MWMyNWNmODVhNDQ0NzJjMjNmODNiNjA5NWI2MDA0ZjRmMzJjZDYwZWMyZGIyIjoiNzNiMDlkMTg1NTQ0NzEzMDkxNDFhYTMzYjY4N2Y5MjQ4YjUwZmUzMTU0IjoiOTRhYjUxY2U3NWRiOGIwNDZkNmFiOTI4MzAiOiIyYTI0MzI0NmJmZTViNWFiMDVmNTFiZjVmNDAxYWY1MmQ1YmJhYTI1NDljZjU3YTE4ZTE5NzU5N2ZlMTVkZDhjIjoiYjdlODI2NGNhNzBmZDJhNGZiNzZmMjBhOGFkNWRhM2MzN2Y1ODkzZmIxMmFiZWVhZWYxMTg3ZjgxNWNhNDgxZWQ4ZGRkM2RkMzciCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMjMgKFA9MjIsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjljZGViYWVlZTg2OTBiNjg3NTEwNzA2OTFmNDk1OTM2NjhhNmRlMTJkM2E5NDhiMzhkZGJkM2Y3NTIxOGIyZDQiOiIzY2JiMDhmMTMzMjcwZTQ0NTRiY2FhYTBmMjBmNmQ2M2MzOGI2NTcyZTc2NiI6ImFmMWE5N2Q0MzE1MWY1ZWE5YzQ4YWQzNmEzIjoiZjUzNTNmYjZiZmM4ZjA5ZDU1NjE1ODEzMmQ2Y2JiOTdkOTA0NWVhY2RjNzFmNzgyYmNlZjYyZDI1OGIxOTUwYSI6IjM5NjY5MzBhMmFlOGZkZDhmNDBlNzAwN2YzZmRlMGJkNmViNDhhNDZlNmQyNmVlZjgzZGE5ZjYzODRiMWEyYmRhMTA3OTBkYWRiM2YiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMjQgKFA9MjMsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQzNDI2NGExMmMzNWNkZDY3YWMxMDVlMjgyNmIwNzFlNDZmODEzMWQxZTMyNWY4ZTBhZTgwYTY0NDczNzUxMzUiOiI3OWFjMWE2YTllY2E1ZTA3Y2U2MzViZmQ2NjZlZjcyYjE2ZjNmMmUxNDBkNTZjIjoiMzg5MWUzMDhiOWY0NGM1YjVhOGI1OTAwNGEiOiIwY2RhMDAwZWQ3NTQ0NTZhODQ0YzllZDYxODQzZGVlYTlkYWRmNWU3MjNlYTE0NDgwNTc3MTI5OTZkNjYwZjhjIjoiMWFiY2M5YjE2NDlkZWFhMGJmYTdkY2QyMzUwODI4MmQ5YzUwY2E3ZmVlNzI0ODY5NTA2MDhkN2JjYjM5ZGNmMDNhMmNhYjAxNTg3ZjYxIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzI1IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YWQ5OGRiZWYwZmIyYTE4OGI2YzQ5YTg1OWM5MjA5NjcyMTRiOTk4NDM1YTAwYjkzZDkzMWI1YWNlY2FmOTc2IjoiOWNlYTNiMDYxZTVjNDAyZDQ4NDk3ZWE0OTQ4ZDc1YjhhZjc3NDZkNGU1NzBjODQ4IjoiMDBkNzcyYjA3Nzg4NTM2YjY4OGZmMmI4NGEiOiI1ZjhiMTQwMDkyMDg5MWU4MDU3NjM5NjE4MTgzYzljODQ3ODIxYzFhYWU3OWYyYTkwZDc1ZjExNGRiMjFlOTc1IjoiZjI4ZWM1MzVjMmQ4MzQ5NjNjODU4MTRlYzQxNzNjMGI4OTgzZGZmOGRjNGEyZDRlMGY3M2JmYjI4YWQ0MmFhOGY3NWY1NDlhOTM1OTRkZDQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWTlQgQUVTLTEyOCAjMSAoUD0yNCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjMDQyNWVkMjBjZDI4ZmRhNjdhMmJjYzBhYjM0MmE0OSI6IjRmMDY1YTIzZWVjYTZiMThkMTE4ZTFkZTRkN2U1Y2ExYTdjMGU1NTZkNzg2ZDQwNyI6IjM3NjY3ZjMzNGRjZTkwIjoiMGIzZThkOTc4NWM3NGM4ZjQxZWEyNTdkNGQ4NzQ5NWZmYmJiMzM1NTQyYjEyZTBkNjJiYjE3N2VjN2ExNjRkOSI6Ijc2OGZjY2RmNDg5OGJjYTA5OWUzM2MzZDQwNTY1NDk3ZGVjMjJkZDZlMzNkY2Y0Mzg0ZDcxYmU4NTY1YzIxYTQ1NWRiNDU4MTZkYTgxNThjIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0xMjggIzIgKFA9MjQsIE49OCwgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGI2MjU2YmQzMjhhNGNkYTI1MTBkNTI3YzBmNzNlZDQiOiI3OGEyOTI2NjJiOGUwNWFiYzJkNDRmYmVmZDA4NDA3OTVlNzQ5MzAyODAxNWQ5ZjIiOiIyMWZkOTAxMWQ2ZDk0ODRhIjoiNjZmZjM1YzRmODZhZDc3NTViMTQ5ZTE0ZTI5OTAzNDc2MzAyM2U3Mzg0ZjRhZjhjMzUyNzdkMmM3ZTFhN2RlMiI6IjVhMGJlODM0YzU3YjU5ZDQ3YTQ1OTBkOGQxOWExMjA2ZDNjMDZlOTM3YTliNTdmNzQwMzRkOWZkYjQzYzNmNDg5MzJhYTcyMTc3YjIzYmY2IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0xMjggIzMgKFA9MjQsIE49OSwgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWZkY2NjODRmMjU3Y2I3NjhiN2FkNzM1ZWRiZDE5OTAiOiI1NmQwOTQyNDkwZTU0Njc5OGYzMGQzYzYwYWQ0ZTNlMTEwZmMwNGY1YjFjMWZhODMiOiJiNzc3NmFhOTk4ZjRkMTE4OWIiOiI5ZjlhYzQ2NGRlNTA4Yjk4ZTc4OTI0M2ZkYjMyZGI0NTg1MzhmOGEyOTFlZDkzZGRmOGFlYWFjZmJmYzM3MWFhIjoiOTZmMTI0Yzc0ZmQ3Mzc4MTkwMDhkZGVmNDQwMzIwZjRhMzczM2QwMDYyYzgzYzg5M2UyNTlhZWNmMTJiYTA4ZjJhMmU5NjZhMzM0MWQ2ZDQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWTlQgQUVTLTEyOCAjNCAoUD0yNCwgTj0xMCwgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmNjYjY4ZDM4MzhkNGRkZjY2MGI5Y2Q5MDRjYWQ0MGYiOiI1ZWEzNWMwODJlMmIxOTBlOWQ5OGU2YjJkYWFkODY3MmY1ODdiNGYyOTY4MDcyZmMiOiJjNGZiNzUxOWExOWYxM2Q5ZDFmYyI6IjA5MmU2NGZlZjA4YjU2NTVhODZjZGI4ZGU2M2ZmYWE3NzcyZTg3MzA4NDRlOTAxNjE0MWFmOGJhZDIyMTYyNDYiOiJjZGE1ZmUzZDE1ZDAwMTUwYjk5MTIwYzdmMjA2Yjg4YTRjMmM0YTM5Y2E5MTQzNDI1NjAzYWIyODRhNzNhMzhjYzkxNmY4YjY1M2M5MmFiNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMTI4ICM1IChQPTI0LCBOPTExLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlNmFiOWU3MGE0ZmI1MWIwMWMyZTI2MjIzM2U2NGMwZCI6ImJhMTU5MTY3MzM1NTBkN2FhODJiMmY2YjExN2NkM2Y1NGM4M2RkYzE2Y2QwMjg4YSI6Ijc0ZTY4OWViNWFmOTQ0MWRkNjkwYTYiOiI0MmY2NTE4ZWUwZmJlNDJmMjhlMTNiNGJiMmViNjA1MTdiMzdjOTc0NDM5NGQ5MTQzMzkzYTg3OWMzZTEwN2M3IjoiZGNjMTUxNDQzMjg4ZjM1ZDM5ZWQ4ZmFlNmYwY2UxZDFlYjY1NmY0ZjdmZDY1YzBiMTZmMzIyY2U4NWQ3YzU0ZTcxYWM1NjBmZDRkYTk2NTEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWTlQgQUVTLTEyOCAjNiAoUD0yNCwgTj0xMiwgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDA1ZThmNGQ4ZTBjYmY0ZTFjZWViNWQ4N2EyNzU4NDgiOiJiNmYzNDUyMDQ1MjY0MzlkYWY4NDk5OGYzODBkY2ZiNGI0MTY3Yzk1OWMwNGZmNjUiOiIwZWMzYWM0NTJiNTQ3YjkwNjJhYWM4ZmEiOiIyZjE4MjFhYTU3ZTUyNzhmZmQzM2MxN2Q0NjYxNWI3NzM2MzE0OWRiYzk4NDcwNDEzZjY1NDNhNmI3NDlmMmNhIjoiOTU3NWUxNmYzNWRhM2M4OGExOWMyNmE3Yjc2MjA0NGY0ZDdiYmJhZmVmZjA1ZDc1NDgyOWUyYTc3NTJmYTNhMTQ4OTA5NzI4ODRiNTExZDgiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWTlQgQUVTLTEyOCAjNyAoUD0yNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWM4N2ZlZjNiNzZlNzI1ZDY2ZDkwNTYyNWEzODdlODIiOiI5NTk0MDNlMDc3MWMyMWE0MTZiZDAzZjM4OTgzOTBlOTBkMGEwODk5ZjY5Zjk1NTIiOiI2MWJmMDZiOWZhNWE0NTBkMDk0ZjNkZGNiNSI6IjAyNDU0ODRiY2Q5ODc3ODdmZTk3ZmRhNmM4ZmZiNmU3MDU4ZDdiOGY3MDY0ZjI3NTE0YWZhYWM0MDQ4NzY3ZmQiOiJjYWJmOGFhNjEzZDUzNTdhYTNlNzAxNzNkNDNmMWYyMDJiNjI4YTYxZDE4ZThiNTcyZWI2NmJiODIxM2E1MTVhYTYxZTVmMDk0NWNkNTdmNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMTkyICMxIChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNlYjAwOWFlYTQ0NTQ0NTFmZWFkZjBlNmIzNmY0NTU1NWRkMDQ3MjNiYWE0NDhlOCI6ImM4ZDI3NWY5MTllMTdkN2ZlNjljMmExZjU4OTM5ZGZlNGQ0MDM3OTFiNWRmMTMxMCI6Ijc2NDA0M2M0OTQ2MGI3IjoiNmU4MGRkN2YxYmFkZjNhMWM5YWIyNWM3NWYxMGJkZTc4YzIzZmEwZWI4ZjlhYWE1M2FkZWZiZjRjYmY3OGZlNCI6IjhhMGYzZDgyMjllNDhlNzQ4N2ZkOTVhMjhhZDM5MmM4MGIzNjgxZDRmYmM3YmJmZDJkZDZlZjFjNDVkNGNjYjcyM2RjMDc0NDE0ZGI1MDZkIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0xOTIgIzIgKFA9MjQsIE49OCwgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWRkNTY0NDJmYTA5YTQyODkwYjFiNDI3NGI5NTA3NzBlYThiZWVhMmUwNDgxOTNkIjoiYmQ5MmQ2NzQ0Y2RlNDQ2ZmM4NjIxNjI1NjU4ZmM0YmMwMGRjYjk3ZjA2MTk1YWQ3IjoiYWQ3NDlkNTk2ZDg4YTRiNCI6ImM2NzIxOTkwOTgyOGFkZWY2NDQyMjI4NjAwOGUxZTMwNjg2N2ExYzBiM2RhOTU0NDQ1MDdhNjhiNDVjOTUzZTQiOiIwNzZjZmZkMGNhOTc4ZmUyYmFkNDExY2VkNDVhMDkwYWJhZmIyMmE5OTg5NmY2YTc1YTE5NjkyNzZhYTJiMGNkYjM3Y2NhZjI4NDVkYmY2ZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMTkyICMzIChQPTI0LCBOPTksIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhjYzYyMjY0NTA2NWM3MmQwZDJhY2E3NTgwMmNmMWJiYmQ4MTA5NjcyMTYyN2MwOCI6IjU5N2IzNjE0ZmY5Y2Q1NjdhZmQxYWFkNGU1ZjUyY2MzZmE0Y2EzMmI5YjIxM2M1NSI6ImNkODRhY2JlOWFiYjZhOTkwYSI6IjQ0N2I2ZjM2YWNkYWQyZDFjZmQ2ZTlhOTJmNDA1NWFkOTAxNDJlNjFmNGExOTkyN2NhZWE5ZGJlNjM0ZDMyMDgiOiIyZDdmYjgzZTY2MjFlZWQ5MDczZTAzODZkMDMyYzY5NDFiZWYzN2IyY2YzNmE0YzZjNWUzNjIyMmQxN2M2ZmIwNjMxYzNmNTYwYTNjZTRhNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMTkyICM0IChQPTI0LCBOPTEwLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYjcyZWVmMmFiYTMwMjA1Yzk4NmUyMDUyZDZlMmM2Nzg4MWQyNGFlNWZjZWFhOGYiOiIyYTc5NGI4NGZjOWU0YTdlNmQ3MGE4MmI1MTQxZmQxMzIxNzdhODZiNGU4ZmMxM2EiOiJkN2E0NmU3MjZlZDQzZjE1ODBlYiI6ImJhYTg2ZjE0MjcxYjJiZTdkYmIzN2RkYzdjOTVjZTQ4NTdlNTdhYTk0NjI0ZDU5NGQ3YmQ2Y2VlYWFkYThkNWYiOiIyZDdmNzY0NjQ0MTc2MTNiYjYxZDM2NTc0ODEzNDZiNzRmYzlkNmFiYzZhM2JhYmQzOTM2NWRjZTg2ODU5Y2Q4MjM5NWQxMWJmYzhjZjE4OCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMTkyICM1IChQPTI0LCBOPTExLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZjg0YzZmMzAyYzU5YWVlZTZkNTcyOGVkNWRhMmUzYzY0YTVhNzgxYzUyYzRkMWIiOiI2ZGI0MWFlYjVmN2MyNGRmODkyOWRiYzMwNDgzYjNjNzkzNGIzYmQxY2RjZTViYjkiOiJkZjk5MGM0MmEyNjg5NTA2NzdjNDMzIjoiYTZhYjVkNzg0MjdmMjk3YTRiN2UyMWYxMDkxZmYzYTViMjBjYWEzZmUxY2JjYjA5NDU5ZDlkZjU5NmE2YzhlMSI6IjhjOTMyODI1OGJmNzE5NzBkMzNlMjNhM2ZmODFjYzFjOWNiZTE5NmExMjk0MjY0YmZkNmE3MjU1ZTQ4MDE5NjNiYjMwYTYzZGUzZmM1YjgyIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0xOTIgIzYgKFA9MjQsIE49MTIsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ0OWIyNTVhZWQ4YmUxYzAyZWI2ZDhhZTJiYWM2ZGNkNzkwMWYxZjYxZGYzYmJmNSI6IjA2MmVhZmIwY2QwOWQyNmU2NTEwOGMwZjU2ZmNjN2EzMDVmMzFjMzRlMGYzYTI0YyI6IjFhZjI5ZTcyMWM5OGU4MWZiNjI4NjM3MCI6IjY0ZjhhMGVlZTU0ODdhNDk1OGE0ODllZDM1ZjEzMjdlMjA5NjU0MmMxYmRiMjEzNGZiOTQyY2E5MTgwNGMyNzQiOiI3MjEzNDRlMmZkMDVkMmVlNTA3MTM1MzEwNTJkNzVlNDA3MTEwM2FiMDQzNmY2NWYwYWYyYTY2M2RhNTFiYWM2MjZjOWY0MTI4YmE1ZWMwYiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMTkyICM3IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzNmFkMWUzZmI2MzBkMWIxZmJjY2ZkNjg1ZjQ0ZWRkODk4NDQyN2I3OGRlYWU3YTkiOiI4YjlkYjFjOGY5YjQ4OTJhNTY1NGM4NTQ2N2JjZmZhMmUxNWUyODM5MmM5Mzg5NTIiOiIzYWY2MjVkZjhiZTlkNzY4NWE4NDJmMjYwZSI6IjMwODQ0MzAzM2VjZDRhODE0NDc1NjcyYjgxNGI3YzZkODEzZDBlYzJhMGNhZWVjYmNhYmExOGEyODQwY2RiNmMiOiI2YmM2ODkwZmVlMjk5YzcxMmZiOGQ5ZGY5YzE0MWYyNGVlMTU3MmI4ZjE1MTEyYzJmOGM5OWNjZjJkODI3ODhjZjYxM2E2MWQ2MGRhZTQ1OCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMjU2ICMxIChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU1MzUyMWE3NjVhYjBjM2ZkMjAzNjU0ZTk5MTYzMzBlMTg5YmRmOTUxZmVlZTliNDRiMTBkYTIwOGZlZTdhY2YiOiI2NDRlYjM0YjlhMTI2ZTQzN2I1ZTAxNWVlYTE0MWNhMWE4ODAyMGYyZDVkNmNjMmMiOiJhYWEyM2YxMDE2NDdkOCI6ImEzNTVkNGM2MTE4MTJlNWY5MjU4ZDcxODhiM2RmODg1MTQ3NzA5NGZmYzJhZjJjZjBjODY3MGRiOTAzZmJiZTAiOiIyN2VkOTA2NjgxNzRlYmY4MjQxYTNjNzRiMzVlMTI0NmI2NjE3ZTQxMjM1NzhmMTUzYmRiNjcwNjJhMTNlZjRlOTg2ZjViYjNkMGJiNDMwNyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMjU2ICMyIChQPTI0LCBOPTgsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ3MmJmNzk0NmJjZTFkM2M2ZjE2OGY0NDc1ZTViYjNhNjdkNWRmMmZhMDFlNjRiY2U4YmI2ZTQzYTZjOGIxNzciOiI1OWViNDViYmJlYjA1NGIwYjk3MzM0ZDUzNTgwY2UwM2Y2OTlhYzJhN2U0OTAxNDMiOiI3OTAxMzRhOGRiODNmMmRhIjoiYTdhODZhNDQwN2I3ZWNlYmM4OTQzNGJhYTY1ZWYxNzNlODhiZDJkYWQ5ODk5YjcxN2NhNTc4ODY3YzJkOTE2ZiI6ImRiNDk2MTA3MGY1MjhjY2QxYTVhMDY4MWVlNGQwY2UzNTE1ZmI4OTBiY2NlZGMyZGJjMDBiMWQ4YjJiYzM5M2E4ZDA5ZTg3YWY3ODExZjU1IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0yNTYgIzMgKFA9MjQsIE49OSwgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNThhZTc5NjVhNTA4ZThkZDJlZGE2OWI1ZDg4OGEyOGExY2IzNzgzYmFkNTVkNTlkNWIwZGE4NzEzN2I3MmU5MyI6ImU2MWJhZDE3NjQwZWNmZjkyNmQwYjAyMzgyNzFlZTRjOWY4ZTgwMWRkNzI0M2U5ZSI6ImNhYTNkOTI4ZDJiZjJiN2YyYyI6IjMwNDY3OGIzZmZkMzIwMGUzM2E4OTEyYmNiNTU2YjNjZmVjNTNjYTE3ZjcwZWNiYTAwZDM1OWY5ZjUxZDNlM2IiOiI3YmIxMTM3YzE0Y2I0ZDMyNGE0YThmMTExNWM2MTllYmY3NDkyN2YwYmVkNjBhOGQ1YTkxNDBmZjUwZGM0ZGEzNzVjN2QyZGU4MGRlMDk3ZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMjU2ICM0IChQPTI0LCBOPTEwLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZWNjNWUxODA4OGJmOWZkN2IxN2YwODliZGQ1NjA3YjY5OTAzYjA0YjcyNjM2MWY4YTgxZTIyMWIxYzkxODkxIjoiZDQyOTFjOTk5MDEzNDVhZmUyOWY1ODkxMmE0MTRhNzQ5OGYzN2I0NDM2MmJkZjNjIjoiYzUyN2QzMDlhYjI5ZWU5MWM1ZmMiOiI4ZjlhNzNlN2JjMWMxMWUyOTE5MDIwYmEzYTQwNGNiZGRmODYxZTllNzg0NzcyMThlM2JlMmNkNDMzN2IyNzhkIjoiMzkyNzg0YTllMGIxNGJjZDM3NjM5ZWM1NDA5ZDZlYWQzZTc1Zjg1NWU1YTkyYzMzZmZjMDQwZWYzOTc3ZTAwMzVjZTZlYTZkMTU3YzE4ZDMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWTlQgQUVTLTI1NiAjNSAoUD0yNCwgTj0xMSwgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTdiYzc0ODJhODdiYTAwNTQ3NWRmYTM0NDhmNTlkNGIzZjljNGM5NjlkMDhiMzliMWIyMWVmOTY1YzBmNTEyNSI6ImI5OWJmNGRjNzgxNzk1ZmM0ZDNhODQ2N2IwNmUxNjY1ZDRlNTQzNjU3ZjIzMTI5ZiI6IjBiY2Y3ODEwM2VjNTJkNmRmMjg4ODciOiIwNDljMTBmMGNiMzdhZTA4ZWFlMmQwNzY2NTYzYjdjNWE4NDU0Zjg0MWMyMDYxYTRmNzFhMGEyMTU4YWU2Y2U1IjoiMGQzODkxZmEwY2FhYzFmN2ViZTQxYjQ4MDkyMGZmZDM0ZDQxNTUwNjRjMjRmM2IxN2E0ODMxNjNkZDhmMjI4ZDFmMjBjZDRmODZjZjM4ZmQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWTlQgQUVTLTI1NiAjNiAoUD0yNCwgTj0xMiwgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDZmZjY3Mzc5YTJlYWQyY2E4N2FhNGYyOTUzNjI1OGY5ZmI5ZmMyZTkxYjBlZDE4ZTdiOWY1ZGYzMzJkZDFkYyI6Ijk4NjI2ZmZjNmM0NGYxM2M5NjRlN2ZjYjdkMTZlOTg4OTkwZDZkMDYzZDAxMmQzMyI6IjJmMWQwNzE3YTgyMmUyMGM3Y2QyOGYwYSI6ImQ1MDc0MWQzNGM4NTY0ZDkyZjM5NmI5N2JlNzgyOTIzZmYzYzg1NWVhOTc1N2JkZTQxOWY2MzJjODM5OTc2MzAiOiI1MGUyMmRiNzBhYzJiYWI2ZDZhZjcwNTljOTBkMDBmYmYwZmI1MmVlZTVlYjY1MGUwOGFjYTdkZWM2MzYxNzBmNDgxZGNiOWZlZmI4NWMwNSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMjU2ICM3IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YTc1ZmYyZjY2ZGFlMjkzNTQwM2NjZTI3ZTgyOWFkOGJlOTgxODVjNzNmOGJjNjFkM2NlOTUwYTgzMDA3ZTExIjoiMjA1ZjJhNjY0YTg1MTJlMTgzMjFhOTFjMTNlYzEzYjllNmI2MzMyMjhjNTdjYzFlIjoiNDZlYjM5MGIxNzVlNzVkYTYxOTNkN2VkYjYiOiIyODJmMDVmNzM0ZjI0OWMwNTM1ZWUzOTYyODIyMThiN2M0OTEzYzM5YjU5YWQyYTAzZmZhZjViMGU5YjBmNzgwIjoiNThmMTU4NGY3NjE5ODNiZWY0ZDAwNjA3NDZiNWQ1ZWU2MTBlY2ZkYTMxMTAxYTdmNTQ2MGU5Yjc4NTZkNjBhNWFkOTgwM2MwNzYyZjgxNzYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzEgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDI0YTNkM2RkZThjODQ4MzAyODBjYjg3YWJhZDBiYjMiOiI3Yzg2MTM1ZWQ5YzJhNTE1YWFhZTBlOWEyMDgxMzM4OTcyNjkyMjBmMzA4NzAwMDYiOiJmMTEwMDAzNWJiMjRhOGQyNjAwNGUwZTI0YiI6IiI6IjFmYWViMGVlMmNhMmNkNTJmMGFhMzk2NjU3ODM0NGYyNGU2OWI3NDJjNGFiMzdhYjExMjMzMDEyMTljNzA1OTliN2MzNzNhZDRiM2FkNjdiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMyIChQPTI0LCBOPTEzLCBBPTEsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA4YjBkYTI1NWQyMDgzODA4YTFiNGQzNjcwOTBiYWNjIjoiMWIxNTZkN2UyYmY3YzlhMjVhZDkxY2ZmN2IwYjAyMTYxY2I3OGZmOTE2MjI4NmIwIjoiNzc3ODI4YjEzNjc5YTllMmNhODk1NjgyMzMiOiJkZCI6ImU4YjgwYWY0OTYwZDU0MTdjMTU3MjY0MDZlMzQ1YzVjNDY4MzExOTJiMDM0MzJlZWQxNmI2MjgyMjgzZTE2NjAyMzMxYmNjYTlkNTFjZTc2IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMzIChQPTI0LCBOPTEzLCBBPTIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE1MzhjYzAzYjYwODgwYmYzZTdkMzg4ZTI5ZjI3NzM5IjoiZTdiODE5YTg1M2ZmZTc5YmFhYTcyMDk3ZmYwZDA0ZjAyNjQwYWU2MmJjZmQzZGE1IjoiOWU3MzRkZTMyNTAyNmI1ZDcxMjgxOTM5NzMiOiJjOTNjIjoiMWQ4ZjQyZjk3MzA0MjRmYTI3MjQwYmQ2Mjc3ZjQ4ODI2MDRmNDQwMzI0YjExYjAwM2NhMDFkODc0NDM5YjRlMWY3OWEyNmQ4YzZkYzQzM2EiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzQgKFA9MjQsIE49MTMsIEE9MywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjE0OWU0MWQ4NDhmNTkyNzZjZmRkZDc0M2JhZmE5YTkiOiI5NzU5ZTZmMjFmNWE1ODgwMTBmNTdlNmQ2ZWFlMTc4ZDhiMjBhYjU5Y2RhNjZmNDIiOiIxNGI3NTZkNjZmYzUxMTM0ZTIwM2QxYzZmOSI6ImY1ODI3ZSI6ImY2MzRiZjAwZjFmOWYxZjkzZjQxMDQ5ZDdmMzc5N2IwNWU4MDVmMGIxNDg1MGY0ZTc4ZTJhMjM0MTExNDdhNjE4N2RhNjgxODUwNjIzMmVlIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICM1IChQPTI0LCBOPTEzLCBBPTQsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjlhNTdhMjJjN2YyNmZlZmY4Y2E2Y2NlZmYyMTRlNGMyIjoiMDM1YzUxNjc3NmM3MDZhN2RkNWYxODFmYTZhYTg5MWIwNGRkNDIzMDQyZWEwNjY3IjoiODhmMzBmZDJiMDRmYjhkZGJjZThmYzI2ZTYiOiJhOTViZGZmNiI6ImI5MmY3ZWMyZWJlY2ViZGJkMjk3N2IzODc0ZTYxYmY0OTZhMzgyMTUzYjI1MjlmYzliNjQ0M2EzNWYzMjliMjA2ODkxNmZiNmFiODIyN2ViIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICM2IChQPTI0LCBOPTEzLCBBPTUsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU0Y2FmOTZlZjZkNDQ4NzM0NzAwYWFkYWI1MGZhZjdhIjoiYzY5ZjdjNWE1MGYzZTcyMTIzMzcxYmJmZDZiZGY1MzJiOTllZjc4NTAwNTA4ZGZlIjoiYTM4MDNlNzUyYWU4NDljOTEwZDhkYTM2YWYiOiI1ZjQ3NjM0OGRkIjoiMjBjNDNhZDgzNjEwODgwMjQ5ZjE2MzJkZDQxOGVjOWE1ZWQzMzNiNTBlOTk2ZDFhNGU1YTMyZmJlNzk2MWI4MzJiNzIyYmMwN2ExODU5NWIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzcgKFA9MjQsIE49MTMsIEE9NiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2MwYzA4NGQ3ZGUwMTFlMmYwMzE2MTZhMzAyZTdhMzEiOiIxNWIzNjk4ODk2OTliNmRlMWZhM2VlNzNlNWZlMTk4MTRlNDZmMTI5MDc0Yzk2NWIiOiJmMGI0NTIyODQ3ZjZmODMzNmZlNTM0YTRlNyI6ImRhODUzYTI3YWVlMiI6ImYzOTc1NWQxNjBhNjQ2MTEzNjhhOGVjY2Y2ZmNiYzQ1ZWY3ZjFmNTYyNDBlYjE5YTJlM2NhNGVjM2M3NzZhYjU4ODQzZjYxN2Q2MDVmZDcyIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICM4IChQPTI0LCBOPTEzLCBBPTcsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ3NTcyZWQwZTM3MjYxZWZhMDJmOGM4M2U2OTVlZmRjIjoiMWVkZWY4MGM1N2QxN2Y5NjlmOGJkZTEwYWIzOGExYTg4MTFhMTI0ZGU3MmM1MjZlIjoiZjRmOTZkN2I0Mzg0YTM5MzBiM2Q4MzBmODIiOiI5MjIzNDBlYzk0ODYxZiI6ImRlMTQ1NThjYzY4NmUxODM2ZjFmMTIxZWExYjk0MWE5ZWJkNGYwZmI5MTZkYzg3MGZkNTQxYjk4OGE4MDFjYjU3NTFjN2ZhYWY1YjBjMTY0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICM5IChQPTI0LCBOPTEzLCBBPTgsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk4YTQyZDdhMGM1OTE3ZGVhZjNiNGRlM2YwY2JlMGExIjoiOWFhOWM4MzU4MTE3NTY0MzcxMzY2YmVlZWM5MjMwNTFlZjQzMzI1MjE5N2FhYWQ1IjoiMDNkMzNhYjBjMmRmN2JmY2U4OGI1ZWU0YzQiOiIyZDU0MzhiNzI4Yjk1MGQ5IjoiOWZmOTQyYmFhNjBmNDQwYzE3YTc4ZTk1ODEyMTZiOWE5NDdhNjdmMDRkNTQ5MTFmZWVjZmZmOTcxZmRmYWE4NTYzMTBiMDE0YWE1OWM5NzgiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzEwIChQPTI0LCBOPTEzLCBBPTksIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJhNjhlM2ZlNzQ2ZjU5M2MxYjk3Y2I2MzcwNzljM2U1IjoiMTNiNGE4NzQ4ODhkYjBlNWQ4ZmQ4MTRiNWU3ZTA0ZjdmZGZiYzE2MDFjY2MwMmJjIjoiY2Q2MmQwZjI3YjdmNDg2NGRjN2MzNDNhY2QiOiJhYmU0ZjFkMzgxMmJmZTNjY2YiOiIwMzI4MzVhM2RiZjY4OGQwOWNmMmEzMmE5MmIxMDE5NTlkMzNmZjQ3NTAwZjkyZjRmZDQ5ODQwNDQwZjg2NmQxYTIyYjA4NTQ5OTYxMTFkOCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMTEgKFA9MjQsIE49MTMsIEE9MTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ2YjA2N2NmOWIxYTI4Y2YxODcwMDJlOTBiMTRlMTMwIjoiY2MwOTE1MTk0MjE4ZDQ1MzZlNDY3NDMzY2Q2ZDc5ZmYxZDllYjlmZjE2MGFiNjg0IjoiYmFkOGMwMzI5MmJmMDFjZmQ4ZDM0Zjg2MGMiOiI4ZDY1ODgwZWRkYjlmZDk2ZDI3NiI6ImJkNTZlZGMwMTU2OTJjNmFiOWJlYzQ5M2E5ODkzODYzNTk4NDE0YTNkMTFhNmEwZjI3ZWNkY2IyNTdkMGQzMDQ5MWU1YmYxYWE4ZjkwOTU4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMxMiAoUD0yNCwgTj0xMywgQT0xMSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTk0ZGFjOWM5MDk4NDc5MGE3YzBjODY3NTM2NjE1ZmYiOiI0ZDY0NDYxYzU1ZWIxNmJmN2I5MTIwZjIyYmUzNDk1OThmMmYzOTRkYTg0NjBkYzYiOiJjMTlmMDZmOTFlNjQ1ZDQxOTkzNjVmMThjMCI6IjUzNzAzOGI1MzU3ZTM1OGE5MzBiZDYiOiJlOWZjNTAwNGMyMzU5NzI0ZTFlNDQxMWFlNmY4MzRlZjZiZWEwNDZkNTQ5NzUzYzg4NzkwYzE2NDhmNDYxYTMxYzg0ZTYyZWE4NTkyYTA3NCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMTMgKFA9MjQsIE49MTMsIEE9MTIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY2YmI1ZDU5YjBmYTlkZTA4MjhiMTE1MzAzYmY5NGFhIjoiMDExZmM1MDMyOWJmZDYzYTg1ZWJkNGY3NjkzMzYzNjAyZjFhNDE0NzM3MTI3MGI3IjoiMDUzNThmMzNlMWZjNmE1M2FiNWE1Yzk4Y2UiOiIwNDBiMjU3NzEyMzljYzJhMzk0NDZlM2MiOiI0NDMyZDdlYjQyOTgwNzM0ZDM0ZjE5YzUwY2Y4YWJmNzFhYzFiMTllZDc1YTcyNzg1NGU1ZDA1MGE0MDVmNzU1MDQ3ZDA5Y2IwZjQ5NTQ2YSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMTQgKFA9MjQsIE49MTMsIEE9MTMsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQxZGEyZTk2MWU3ODA2M2FmOGRlNDE4NjViMjI2ODczIjoiOGU1ZmExYTY2NjJhODM3OGNkYTE1Njk3ZTkyNjg0MTU5NGYyZjM5NGZhNWEzNGFiIjoiMDM3MzlmNTQ3NDg1NzAwNjM0MGNjZTU1NGQiOiJlM2FmZDA5MWQyYjU4ODQ2NTg3MmE2MzAwZiI6ImNhMGQ5NWUzZmYxODZhZDZiODhkNDVmYzQwNzllNmI3YjRhNjE1ZTdlOGRkNWY0NzQyZDUyMmNjOWRjMTljNDdhNGZhMGIxNTI4MDY5Y2Y4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMxNSAoUD0yNCwgTj0xMywgQT0xNCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWVlZTY2NzI2N2VmMTBiMDM2MjRjZjljMzQxZTNmNzUiOiI3OThlMzFjY2UwYTgzNzAyYTk1MTcxZmIxMTYyYTE3YjljZTAwZWMzNTkyY2UyNjIiOiIwNjMwYTNlYWUyN2U1MDVjNjFjNTZlNjU2MCI6ImQyNDY1MWVmMDU2MTI4MmQzZTIwZTgzNDk2MGMiOiJmM2MzZTUyZjFhMWZmNTI4YThkMzc4M2VlNGU3NWYxMTRlM2U2NDE2MzM0ODE1ZDJkOTIzNmQ1YzVjOTMxOTA5MjA3ODQxMWI3MmM1MWJhOCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMTYgKFA9MjQsIE49MTMsIEE9MTUsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRiYmQyNmY1ZDllOTcwZTRlMzg0YjIyNzM5NjFiZTVhIjoiNTUzNzE0ZTE3YTIwOGEyZWNlYjg0N2E0YTJkOTUwODgzODhiMWFjOGQ4Y2E0M2UwIjoiMGIxZWFiZTUwNGVmNDgyMjU0MmUzOTdmZWMiOiI0Nzc5MzczMDFjODNiYTAyZDUwNzYwYjYwM2UwZWEiOiIxYzgwMjEzMjY4YmFkNTQwMmM0ZGM5YjVkODM2YWI3NDk5ODEwZDBkOGE5NzQ3MTZkZjlhMGU5ODZhYjI4OTA3MzY0MjNiYjM3NzJjZWMzZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMTcgKFA9MjQsIE49MTMsIEE9MTYsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjEwYTc3MjBmMmUxOGY3MzljMjY5MjQ5MjVhZjZiNjcwIjoiZTU5NzgyYTlhZWE0NWY0NjdiOTBlNTFhMGZkZjE2NmJhYmEwNTY2M2RlZjJkOGI2IjoiOGM0ZTc4MTNhYjliY2U5ZGFmZWUwMWM2MjgiOiJhMjA5OTQxZmFiNzEwZmRhMzhkMTFjNjhiMTNkOTMwZiI6ImUzNTdiMWNjZGFjYTZmMzUwNmRjNDUyNzljMmU0YzU5ZjUzMDdhNWZkNmE5OWNkNzIzNDFlYThjMDc4NTU2OTk3M2Y5MGVlOWVlNjQ1YWNjIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMxOCAoUD0yNCwgTj0xMywgQT0xNywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmJmZmFiMWY0ZjRjMWZmNjZiNGE2NjliNTE1YjJmOGQiOiJkOTFiMTJlODY1NWRkOTJiMTMzMmZjMWQ3MWMzOTFjOTZhMTcxMTE1NjJkOTBiYTMiOiJkZGIzNGQ1ZTAxNDBmYjk2ZDY5MGUxYTJiNyI6IjVjYmJhOWVhNzc4ZTAxYWYwMGFmYjJhOTM0ZjI4YzcyMTEiOiJkMzAyZTViMmQ1ZDkwNDMzMTg2YjgwNGNkNzcxN2UyZGIyZjIyY2RjMzRmYjI5NDJhYjMwNzgwYTJjNGYxMmFmOGYzNTM1MGQ2NTI4NGM1OSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMTkgKFA9MjQsIE49MTMsIEE9MTgsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFlNjEzNmRmOWFiNDM2MzFlZjE0MzUxNWRhY2VkYmU3IjoiNmE0OTNjNWVmMzc2OWNjYzQxMDFkYmIyZWIzNmUxZTViYmM1NzdhMDU3Y2UwNzMxIjoiYzVjNDQ1NzkyMjA4YTUwYzhlOTNkNjRhYTMiOiJlMDQwMDZiNjhjODNhNWRkNGNlYWMzY2RlMjM4ZTQ4ODk1YWUiOiJjNzU4NGMwMjAzYzI1MzVjNTcwMmM2YWU5M2I3Y2JmYjA2NmY0YTA1NWM2MjdhMTgwZDZkNjc2ZDExZmNlOTA3YjVjOTNmYTFlZDdiZmYyYiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMjAgKFA9MjQsIE49MTMsIEE9MTksIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYxOTA4MzI4ZWRmMjk5NmViZmM5NjU1NDcyY2E1YWQwIjoiZWVkZTAxYjA4ZjlhMzAzY2RmMTRjOTlkN2E0NTczMjk3MmM2ZWZmMmExZGIwNmViIjoiNGM2OTMzNjQ1NDY5MzBiNmM1MjUwZTI2OTkiOiI0YTM2MzRlNTAyOGRmOTdmYmUwMGViMDE2ZThlYTRmMTkxOGZhYSI6IjkwYzg1MDc5MGIwYjM4MGY1YWViMjQ4OGZkZjQzYzlkNWVmMTc1OTg2MWU4NmY2ZTUyNTcwZTc2OTYyOWRjYzJlNTY4NzM3YmE1M2ExMTk1IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMyMSAoUD0yNCwgTj0xMywgQT0yMCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjFjYjhlYjc5MmU5NWQwOTlhMTQ1NWZiNzg5ZDhkMTYiOiI2YWQ1NDE2OTVhMzdjMzJkNzNmZjZkNWY4NzBhYmQ1YjBmMzYyYTg5NjhjNGZjZTAiOiIxZjM3YjNlNTkxMzdmMmE2MGRjMDlkMTZhYyI6IjA5ZGIzZWZhYzk0NzNmNzEzZGE2MzBhZTkyYzJjODYwNGM2MWM1MWUiOiJlNjVmY2M5NzU4NjVjMTQ5OWIwODhiNThiYTE2MzI4MzA4NWQ4Y2E2OGRjM2IyMzVkODk3NTZlNWQ3ODc1M2VmMjJjMDEyYWUzNGIzOWEyMCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMjIgKFA9MjQsIE49MTMsIEE9MjEsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImJlMWVkNDllMmNiMGNhZjZiNmEwOTQwYzU4NDUzYjkzIjoiYTllZWMzODNmNjM4OTI1MjFlNDYxNmZjYmFkYzU0ODU5NDJmZmFmNDY2OWM0M2E3IjoiYjc4YWQxMjk0NTc2ODFmYTczNDY0MzViOTciOiIxNjFkOTJjN2RmMWViYjA5MjQ3MTllMDY2ZTA4Yjk1ZWI0OTE0YTVlZGEiOiI5NDliZTM0MDcyMGM0ZmRjNGFkYzA1Y2I3NzdkZDgxYTI1NDk2MjhkMzNmYmEwN2U2MmQyYjMzOGE3YjM0ZWJkOWQ4NWMyNDRjOTUyZDY4MSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMjMgKFA9MjQsIE49MTMsIEE9MjIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM0YWI2ZmQ3ZjU0YTJlMDI3NmZjYjdjZjFlMjAzYWJhIjoiOGQxNjRmNTk4ZWExNDEwODJiMTA2OTc3NmZjY2Q4N2JhZjZhMjU2M2NiZGJjOWQxIjoiNjA5MWFmYjYyYzFhOGVlZDRkYTU2MjRkZDciOiIxYWI1Y2MzZDdiMDFkYzc0ZTZjZjgzOGJiNTY1ZmVhMzE4N2QzM2Q1NTJhMiI6IjBkMzBhYjA3MTUzYjUxNTM2Mzc5NjllNmJkMzUzOTQ0OGM1NDFlNDJiM2Q0MzJmZDdlZjE0NjIyYTliNjIxZDE3MjFiOTQ0YzYwZjdmZDY3IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMyNCAoUD0yNCwgTj0xMywgQT0yMywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWE5NmY5MGZiYWUxMmE4NTdmNWM5N2UwY2JhNTc5NDMiOiI0OWRiODBmMjJiYzI2N2E3MGU1NjM2ZGZiYzhhMjFjODNkOTY5MWZlNGI5YzMwNTEiOiIyMWNjNDZkOWNlZDE1MzliMGFkOTQ2ZTYwMCI6IjEwNTI1OGQyZjI1ZjYyNjc1YWVlOTc1Y2ZkYjY2OGFmZjgzM2YwNWI2MWViMmEiOiJkMmZjYzhiNzgwOWI1ZmMwN2U0NDA4M2U0MzdkODE4MDE1N2YxNzgyYTljZTlmNjVjN2ZhOWVlMmU3Y2RjMWI3NTUyNThmMjIxMmE4YThmNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMjUgKFA9MjQsIE49MTMsIEE9MjQsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM1YjQwM2ExNTIxMjA5NzA4NWQ2ZTJiNzdlYzNkNGYyIjoiN2RkNzM5NmRiNjYxM2ViODA5MDlhM2I4YzAwMjliNjI0OTEyYWFiZWRkYTA2NTliIjoiZGFhNDIzYmY5MjU2YzNmY2MzNDdhMjkzYWEiOiJkM2MwZWQ3NGU1ZjI1ZTRjMWU0NzllMWE1MTE4MmJiMDE4Njk4ZWMyNjcyNjkxNDkiOiI1YjAwY2Y4YTY2YmFhN2ZlMjI1MDJlZDZmNDg2MWFmNzFmYTY0YjU1MGQ2NDNmOTVlZWU4MmMxOWVjYmEzNDI4MDYwNGI1OGQ5MmRhY2QzZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMjYgKFA9MjQsIE49MTMsIEE9MjUsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdhNDU5YWFkYjQ4ZjFhNTI4ZWRhZTcxZmNmNjk4Yjg0IjoiMGIzZDk0N2RlODYzMmRjOGZmNzUyZjYxOWJhN2M4NDcxNmZhYzdhMjNlMTAxNjQxIjoiZmE0NjE2YjcxNWVhODk4NzcyYjBlODlkZDQiOiIwYzBiNGE0NWRmNWMzOTE5YzFlMTY2OWM1YWY1ZDM5OGQ5NTQ1ZTQ0MzA3ZDk1YzQ4MSI6IjdkYjlmM2Y3ZGMyNmZjMmFkZjU4ZDQ1MjVkMjZkNTYwMWU5NzdkZTVhN2MzMzkxMWExMTM4Y2ZmN2I2MjRmOTkwOGI1YjRkN2U5MGE4MjRhIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMyNyAoUD0yNCwgTj0xMywgQT0yNiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2E3NDgyMjUwNTdmNzM1ZjcxMmVjYzY0NzkxMzY3ZjAiOiJlOTJjZDBjYjk3YWZlNGZiMDBjNGYxMmU5YjlhYmUxZDA4ZGI5OGY0OWEyN2Y0NjEiOiIxMzQxYTY5OThlYjFmNTBkNGI3MTBhMTNhYyI6IjVmYjk2YjA0NWY0OTQ4MDhjMDIwMTRmMDYwNzRiZDQ1YjhhOGFkMTJiNGNiNDQ4ZWMxNjIiOiI4MmI2NjY2OTQyMzJlODZlODIyOTViZWFlNjZhZTY3ZDU2YWNlYjVkNmIxNDg0Y2ViNGE2ODQzZWMxNjA3ODAzOGMxMGFmZWRjNDFmNTM2MiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMjggKFA9MjQsIE49MTMsIEE9MjcsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZkZjJiMmM3ZmNiMzc4OWI0ZTkwYWJlNjA3ZGNhMmFmIjoiZDdhYTRlZmE1ZDc1MTk1YTQwMDAxOGJkMzhmN2Q4Y2Q1M2ZkZmZlODhkZjE4MzdmIjoiYTY5ZGRjNjZlNjNhMzQxNWYyMTAwOWQ1M2EiOiJjNzY4NDZkYTQ5NmVkODdiOWMwZjY1YzYyNjZjOWE4MjIyMjRhY2RlOTc3NWVmYjE4NmE0YTUiOiIxNTBkOWE4Yjc4ZDljMDQyMzlkNjYyMDdhMWY5NTAyMWJiYjFiN2M3MGQ3YzM1NDgyNWQwNWU1YTJlNzZhOTBmNmZlNDg5ZmQ3NGNhYjJhMyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMjkgKFA9MjQsIE49MTMsIEE9MjgsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdkODcwZDdlNTJkMzA1M2M2NWVlZmFkNDc3NjRjZmViIjoiMTA5MzE3NTU2YzIxYzk2OWVkYTY1YTk0MTc2ZDdhMTE0NjJjOWFlMThhODY1YjZkIjoiMzdkODg4ZjRhYTQ1MmQ3YmYyMTdmNWE1MjkiOiI5NjEwOTQ5ZjZkMjNkNWIxZjM5ODliMmY0ZTUyNGZhYjRmMjk3YTViZWM4ZGRhZDRmMTZjYjYxNiI6IjRlNmI5NjdiMTU3MWM2ZDdiOWUxMThiMTEyYjdhYzk0OWE0YTE3NTY1MDMxNmEyNDJkZDU3OWNiMGQyMDFkMjJjODZiYmM3ZmJlNDdiZDBkIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMzMCAoUD0yNCwgTj0xMywgQT0yOSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGZjYWM0MDUyN2MwZTdjYThlYWZmMjY1Y2ExMmMwNTMiOiI3OGQxZTk2YWY4Y2ViZGNjN2U3ZTJhNGRkY2ZhMzRmNmNmOWEyNGZiODU2NzJhZDciOiJhZTlmMDEyZmQ5YWY2MGE0MDBlMjBiMTY5MCI6IjljZTY1NTk4Y2QxZjg2YWZjOWFhYWYxNzI4MDk1NzBjYzMwNjMzM2MyNTUyM2Y4NjNjNmQwZTAxNTQiOiI5YWRiOWE5NWE5Mzc5YWQ3OTVkOGQzZmZkNGUzN2EwNDUxNjBkNmQ3MjdmOTc0YTZjYjNiNTE1MWYzMjdlNjU0NDdlNTJjNzUyNTU2MmM5MSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMzEgKFA9MjQsIE49MTMsIEE9MzAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRkZjlmMTUwY2MzZjFjMTVlOGU3NzM2NjNjNWIwNjFjIjoiNzlkODg0MWFiODMyNzk3MjRjZTM1ZTFhOGFiZDRlMTU4MTY4ZGNmMzg4YWI0YzNkIjoiOThjNTAzNmI3ZDU0ZGE5YTExNzcxMDU2MDAiOiIyMGM1YWIyOTBlNmQ5N2Y1M2M3NDEyMTk1MWYzOWJhODY1YjNhY2M0NjVmYTNmMGZiOGE1OTE2MjIyNzciOiJkMDBkMjkzOTZmZmE5ZTY5MTI5MGQ3NDY1Mjc3NzdiZjk2YTg1MWYzMDZkNGRhMGIxODE2ZGYxZTBlODJiYjdiYzgxMDU5MzBhZDZhMjIzMiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMzIgKFA9MjQsIE49MTMsIEE9MzEsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIxZGM4MWQxMTZkOTRmNWVjZWQ1MjZiMzdjMDA0Yjk1IjoiNTQzOTA3MTViNmU3YzdiZDUxYTIzNGRiMDU5YTUxYmEwMzBjZjIyZWUwMGI3Mjc3IjoiOTdjOGY2OWZiOTFiMTcyOTk0NjFmZDhkNjMiOiJmOGIwOGFhODNiZWQwOWNhMzQyMjQ5YjJjZjllMmI0NWE4OWRjZmI4NzExYTEyMDM5NWU0NTU5MjFhZjQ4MSI6ImNiNjI5OTk0YzM0MThhNjYyYThjZGUxYjVmNGQ5OWFhN2RmNjZlMjRjNTNkYzZkZjExMjk3OTMwZmQ0NGM2MzY3NWI3Y2NhNzA2NzFlZjRkIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMzMyAoUD0yNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWEzMzk4MGU3MWU3ZDY3ZmQ2Y2YxNzE0NTRkYzk2ZTUiOiJhMzRkZmEyNDg0N2MzNjUyOTFjZTFiNTRiY2Y4ZDlhNzVkODYxZTUxMzNjYzNhNzQiOiIzM2FlNjhlYmI4MDEwYzZiM2RhNmI5Y2IyOSI6ImVjYTYyMmEzNzU3MGRmNjE5ZTEwZWJiMThiZWJhZGIyZjJiNDljNGQyYjJmZjcxNTg3M2JiNjcyZTMwZmMwZmYiOiI3YTYwZmE3ZWU4ODU5ZTI4M2NjZTM3OGZiNmI5NTUyMmFiOGI3MGVmY2RiMDI2NWY3YzRiNGZhNTk3NjY2Yjg2ZGQxMzUzZTQwMGYyODg2NCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMSAoUD0yNCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNjUxMWZiNTFmY2ZhNzVjYjRiNDRkYTc1YTZlNWEwZWI4ZDljOGYzYjkwNmY4ODYiOiIzOWYwOGEyYWYxZDhkYTYyMTI1NTA2MzliOTFmYjI1NzNlMzlhOGViNWQ4MDFkZTgiOiIxNWIzNjk4ODk2OTliNmRlMWZhM2VlNzNlNSI6IiI6IjYzNDJiODcwMGVkZWM5N2E5NjBlYjE2ZTdjYjFlYjQ0MTJmYjRlMjYzZGRkMjIwNmIwOTAxNTVkMzRhNzZjODMyNGU1NTUwYzNlZjQyNmVkIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMyIChQPTI0LCBOPTEzLCBBPTEsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk3NDg3OThjMGYzY2M3NjY3OTVjOGNlMGU0Yzk3OWMxOTMwZGZlN2ZhZWZlYTg0YSI6IjEwMGZhNzE0NjIyNzdkNzZjYTgxZjJjZmRiM2QzOWQzODk0YjBjYTI4MDc0YTBmMCI6ImNkZjRiYTY1NWFjZmU4ZTIxMzRmYTA1NDJmIjoiNjciOiIzNmUyNDE1YjRmODg4YTYwNzJmMjYwZDdlNzg2ZDgwM2JlMTZmOGI5Y2JlZTExMmQ3ZmY3NGUzYjA1YjdkN2MxMzI4NDU3M2JkM2U3ZTQ4MSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMyAoUD0yNCwgTj0xMywgQT0yLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzOTNkY2FjNWEyOGQ3NzI5Nzk0NmQ3YWI0NzFhZTAzYmQzMDNiYTM0OTllMmNlMjYiOiIyNjJmNGFjOTg4ODEyNTAwY2I0MzdmNTJmMGMxODIxNDhlODVhMGJlYzY3YTI3MzYiOiJmZTczMjlmMzQzZjZlNzI2YTkwYjExYWUzNyI6IjFjOGIiOiJlNmQ0M2Y4MjJhZDE2OGFhOWMyZTI5YzA3ZjQ1OTJkN2JiZWIwMjAzZjQxOGYzMDIwZWNkYmMyMDBiZTM1MzExMmZhZjIwZTJiZTcxMTkwOCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjNCAoUD0yNCwgTj0xMywgQT0zLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNzRhYmM0MzQ3ZTRiZTBhY2IwYTczYmI4ZjdkMjVjMzViYWUxM2I3N2Y4MDIzM2EiOiI2MzcyODI0YmY0MTZjZDA3MmE3YWQwYWU1ZjlmNTk2YzYxMjc1MjBjMWI2ODhhYjQiOiI2YTg1MGU5NDk0MGRhODc4MTE1OWJhOTdlZiI6ImE0NDkwZSI6ImIxNGEwN2JkYzExOWQ4NzYxMTM0MmM0YzY5MzVjNTc4NmZmMWY5YWUyZWI0OWU2MTkxYzg4YTNjYjRmYmFmY2I4YTRhMTU3ZDU4N2Q3ZTM5IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICM1IChQPTI0LCBOPTEzLCBBPTQsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRmMDUyZTk1YWVhMzc2OWE0MzNjZTRlNGU4MDBiODQxODY0OWJiZThjNjI5N2ViMCI6ImU4YzFhODkyMjhkODIxMmY3NWMxMzZiYWI3OTIzYTg5ZjlmZWExOGU3ODFjYjgzNiI6ImJhMzU2ZDM5MmMzZjcwMGY0ZjI3MDZhNGNhIjoiOGZmYzBlM2QiOiI2NmI1ZDc4MjMyMzkyNWUxYmQwYTg0MTNhOWE1YTg4MTM1NjQ1M2Q1ZGYyY2JlYjE5OWIyZTFlODAzNTUwZGNkZGU1NWZkNjZlY2I0NWVkZCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjNiAoUD0yNCwgTj0xMywgQT01LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNmQzNDU2MDZhMzE1YWQyNDA2YWJiY2I0M2NkOGNhYmU5NDgxMDdiYTZkMTdhNzIiOiJkM2JlZjQ2MDIyM2M4MWU0NTc5YzlkMWQ0NjNhYzVlMDg4MTY4NWRlMTQyMGE0MTEiOiJkNGVmM2U5ZTA0ZjFiN2YyMGZmYzVhMDIyZSI6ImE0NjhmMDhkMDciOiJhYmI4NWRiNDlhOWIxYzg3MjRlY2JjNzM0Y2M4MzczYmQyMDA4M2NmYTQwMDdiMWNmZTRkM2EzYmIyNWY4OWY2OTI4ODRiZTIzMGM2MDM1YyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjNyAoUD0yNCwgTj0xMywgQT02LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYzQ3NmNmZDdkZDMwMGQ5NjFmZDNmMjRhNmZlMGU4MDc0MmIwMDg1MTY3NmNhNjMiOiI2ZjM5Mzg5MzJiNWMxMjgwMzExZTg5MjI4MGQ4YTgyMmE4MjhhMGJlN2ZkYjFiY2QiOiJlMzAwZmM3YTViOTY4MDYzODJjMzVhZjViMiI6IjI4MTMwZjkzOGM0NSI6ImRmNDg2NjJmZTEzNGU3NWE4NWFiYzJjZWNlMmMzYjYyMzZjODhhNzBmYTc5MmU5YmVhZGM5NjAxYWRmOWZiZGY0ZTNlOTRiMzk1YjBhMzMyIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICM4IChQPTI0LCBOPTEzLCBBPTcsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc5ZDFlMzhhNzBkZjFjZjIzOWJlMTY4ODMzZGNkMDU3MGJjOGYzN2IzYWEyNmMzNyI6IjgzYzI0ZjNhNzdiODNiNGVmNDUyNzdiYTkwMjI1ZjNiYTE3MjIzMTJmNTJiMWEwNyI6IjgyMjlkNmQ3ZTllMjFmZGM3ODliZmY1ZGNmIjoiMDc2ODg3ZDJhYmU5MDAiOiIxOWQ4ODBmMWQ5NTlhNjhmMTYyZGUyNDNkNGE0NTc0N2FjZTcwNDYxMzM1OWIyNzIxOGQxNTMxYTA2NmRlNjBhOTVkMjkyNGE2OTEwZTk5MCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjOSAoUD0yNCwgTj0xMywgQT04LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MmU2Y2ViZGFmODgyMDVjNGU3NDQyODY2NGJjMGQ3ZWI0Njg3YTI3MjIxN2I3Y2EiOiI1NGJjN2UzYzIyN2RmNGU4MzI1MmE1ODQ4ZmVhMTJkZmRiMmQxNGI5ZTY3YzE2MjkiOiIzODIwZGI0NzVjN2NiMDRhMGY3NGQ4ZTQ0OSI6ImY0MjdjNDdlMTBjNDViYjMiOiI5MWU3YmFmZjJiNDJhZjYzZTI2Yzg3Y2U2OTkxYWYyMjQyMmMxZjgyOTA2ODU4YjE3MjE5NjFkZTVjNzY4ZjRkMTliZDMwMzRmNDRmMDhkMiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMTAgKFA9MjQsIE49MTMsIEE9OSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzljMDNhMGM4NjM0MDQ3YjE2MzUzNDhmMjg0ZDNkYzFlNzUyYWI0MDU0OGViMzM3IjoiMDY2MmU2M2M4OGU5NjNkM2UwY2YyYzQ2NTM1MTVhZTQ0NzRhMmM3OGFiMDM5NGMwIjoiOWUyZWE4ZWI3ZjU2MDg3ZWU1MDY5MjU2NDgiOiIyOGQxNTdmMDlhNzFkYTgwZGQiOiIwMWRjZDRkZDNiOGMxMzY5NTE4MTM2Y2U0NWU4YmI5ZGY1NjViMGFkMjMxYTg4N2IwMmFkYTM0YWRkZjBhYTJmNDc0NGVkMmUwNzk5NTQ5MSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMTEgKFA9MjQsIE49MTMsIEE9MTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUyYTkyZmZiYjBiNWViNjhjYjgyNjg3ZjEyNDQ5ZmFlNTE2N2QzNzUxMzFiMGIxMCI6IjA0OGM5YmE0NTk3YzNiYjU5NWJmZDUwNDhlNWU5YTEyOTZmMzBlNWMwMTE4YjE3NyI6IjQ0MWFkNWUxMzgyZTA4M2E5NTIyNGYzOTVkIjoiMjM1MjY0ODI5OWIwNDEzY2IyY2UiOiIyNTI0N2EyNThlNGFjMGE5ODhkOGRlZjYwY2MxNzRhOWQ0NTc4Y2Q1MzQ2ZmI1MTUwYzk2ZThhYjg3NzRiYWE0MjFmMzljNjRhMzg2YzQxOCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMTIgKFA9MjQsIE49MTMsIEE9MTEsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVmMWFkM2ViMGJkZTdkNDcyODM4OWRhMjI1NWQxZjhhNjZlY2I3MmU2ZjJmMWFjNCI6IjlmNTgwY2M2YzYyYTA1Y2UxMjVjNmJlYzEwOWE0OGNhNTI3ZWUyNmE2NGIxNGI2OCI6IjhlN2Q4YTQ0MjQ0ZGFhN2RmMmIzNDA5OTNlIjoiNTIxNTgzYzI1ZWI0YTNiMmU0NjEyMCI6ImZmMGZmOTViY2IwYmNjZDVlNGFhZGQ3N2FjNjc3MGY1MDEzNjU0ZWIzYzYzODZmZGVkMmM4NzEzNTg2MWI0M2E5OWYyNThiNjkzOGY2NmUzIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMxMyAoUD0yNCwgTj0xMywgQT0xMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDRjYmEyMGI3MjA0ZWQ4NTMyN2M5YzcxYzZmZWEwMGI0N2NlN2JkZGU5ZGVhNDkwIjoiNjMzM2JkZTIxOGI3ODRjY2Q4MzcwNDkyZjdjOGM3MjJmOGVmMTQzYWY2NmQ3MWQ3IjoiZjMzMjkxNTRkODkwOGY0ZTRhNWIwNzk5OTIiOiJmMWUwYWYxODUxODBkMmViNjNlNTBlMzciOiJiOTQwMWE0OTI3YjM0ZGMxNWU5MTkzZGIwMDIxMmY4NWYwYzMxOTc4MWVjOTBlM2I0NDg0ZDkzY2I0MjJjYjU2NGFjYzYzZDNkMThlMTY5YyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMTQgKFA9MjQsIE49MTMsIEE9MTMsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI1ZjQzZjNhZTM4YTYxNjVmMGY5OTBhYmU5ZWU1MGNkOWFkN2U4NDdhMGE1MTczMSI6IjM3MjZjMWFhZjg1ZWU4MDk5YTdlYmQzMjY4NzAwZTA3ZDRiM2YyOTJjNjViYmEzNCI6IjEzNTAxYWViZGExOWE5YmYxYjVmZmFhNDJhIjoiZWFkNGM0NWZmOWRiNTRmOTkwMmE2ZGUxODEiOiJmZDgwZTg4ZjA3ZGFkMDllZWQ1NTY5YTRmOWJiNjVjNDJlZjQyNmRkYTQwNDUwMTE5NTAzZDgxMTcwMTY0MjE0MzAxM2YyOGNlMzg0ZDkxMiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMTUgKFA9MjQsIE49MTMsIEE9MTQsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjEzZjE3OWFhMmEyM2JjOTBhODU2NjAzMDYzOTQ5NDBlOWJiMjI2Y2UzODg1ZWMwMSI6ImQzYjM2YzYyODlhZDZhZTdjNWQ4ODVmZTgzZDYyYTc2MjcwNjg5Y2UwNWZhM2I0OCI6ImFhYTUyYzYzY2ExZjc0YTIwM2QwOGMyMDc4IjoiNWNjOTI0MjIyNjkyOTc5YThlMjhhYjFlMDAxOCI6ImJjNGZjZWY0MDFjMmUxZDFjMzM1NzM0ZmYyM2VhNTJjMzQ3NGQyZTZmMzE2NDhhN2Y1ODY0OTQwMGFjOWU4MjViMDM4ZDY3ZjBjMmE2ZjFjIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMxNiAoUD0yNCwgTj0xMywgQT0xNSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzFkZmM0ODI3M2Q0MDZhM2E3YjkxNzZmODBiMmRjNGU5YTdmNjgxMzRiYWI2NmQyIjoiNjdkOTcyOGE4OGYxZmFjM2FmNDNlZDZkNjM0YmE5MDI4OTZiZDIyNjg1ODY5N2Q5IjoiMWFjNTNiYTk2NWNkYWVlZWY3MzI2YTM3ZTQiOiIzOWJhNTRhNDEwYTU4YTVkMTE2MTVhMjE2M2NjM2IiOiIzNjBmMGZjNzE0OTk0ZTNiNTk0NDhiNTBjZGQ2MWQ1MTFiNGYwOWUwZTVmYjVhYzgyNmE1MWZlNWI5YjU5OGExN2ViM2RhMTBmOTM2ODEzYiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMTcgKFA9MjQsIE49MTMsIEE9MTYsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ4YTY2MmFiODQ0OWJkMDM3ZGEwMzQ2YTI0NTY1NjgzYTNiYmJiZDE4MDBlM2MxYyI6IjYxZmRkMTA5Mzg1NTcwODAxOTFkMTNkZDZjMzAwMmRkNDQ1ZDlhZjk4ODAyOTE5OSI6IjE2NmZiOGQwZTExMDEyNGMwOTAxM2UwNTY4IjoiMWMxYzA4MmVlYjViODU0ODI4M2Q1MGNjMmFjZTFjMzUiOiIyM2MwNTkyNzUwMmE0ZWU2ZTYxZTRlMTA1NTJkNDliMDIwNjQzZWFiNDc2ZWVhY2M4Njc2MDFmZTc5YTEyMmE3ODE3ODE5NjU1MTgzMjgzZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMTggKFA9MjQsIE49MTMsIEE9MTcsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjExNmY0ODU1MTIxZDZhYTUzZThiOGI0M2EyZTIzZDQ2OGM4NTY4Yzc0NGY0OWRlNSI6IjFiZDNiNWRiMzkyNDAyNzkwYmUxNmU4ZDBhNzE1NDUzOTI4ZjE3ZjMzODRjMTNhNyI6IjkyNDMyMmEzZWYwYzY0NDEyZjQ2MGE5MWIyIjoiMDNjMmQyMmEzYmIwOGJiYjk2YjI4MTFjZTRiMTExMGE4MyI6ImFkNzM2NDAyNjI2ZGYwZjkzOTNmZTQ0OTFlYjgxMjcyNWFkMzlkNmZhY2YyMGI1YjJmOTM0MGIwZDQ4YTE3YWUxY2M3MWQ3NTE1ZTYxZWU5IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMxOSAoUD0yNCwgTj0xMywgQT0xOCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTY3ZjNiYTExMjgyZDYxZmUzNmUzOGNhYjdiNTU5YzJmZDljYmU4YmY3ZWI1ODYzIjoiZDdhOTU0ZGFlNTYzYjkzMzg1YzAyYzgyZTAxNDNiNmMxN2NlMzA2N2Q4YjU0MTIwIjoiYTcyN2VkMzczODg2ZGQ4NzI4NTliOTJjY2QiOiI2OGQxOTllOGZjZWQwMmI3YWViYTMxYWE5NDA2OGEyNWQyN2EiOiJjNmNmYWExZjU0ZDA0MTA4OWJkODFmODkxOTdlNTdhNTNiMjg4MGNlZmMzZjlkODc3ZTMwYjJiY2MzZjFlYTllYzJiOGYyOGJmMGFmNGVjZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMjAgKFA9MjQsIE49MTMsIEE9MTksIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUwYTI5YTJjNzg0MGNmOWI0MWRlNDk3ODBiOWVlOTJkNjQ2YTRiZmM1YjlkYTc0YSI6IjM0NGRjOGI2YmQ2NmExZmJiZTMzMGE5NWFmNWRkMmE4NzgzZGMyNjRkNmE5MjY3ZCI6ImZjOWZkODc2YjFlZGRlZDA5ZjcwYjE4ODI0IjoiMzZlMTViYWFmYTAwMDJlZmJiNGJiMjY1MDNiN2UzYjc5ZjZjNjgiOiI0M2IzYjk2YWE1YTU0Mzc4ZjNiYjU3M2ZmZGEzZTE1NGFhN2Y0MjVmYzMwMDgxNzViNjBhNzdiOWQzODc0MDM1NmI1NDRiMWMwZjI1OTA4NiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMjEgKFA9MjQsIE49MTMsIEE9MjAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI2ZDBhM2E4NTA5ZDk3ZjgxMzc5ZDIxOTgxZmUxYTAyYzU3OTEyMWFiNzM1NmNhMCI6IjM3YWIyYTBiN2I2OTk0MjI3OGUyMTAzMmZjODNlYmE2Y2RjMzRmNTI4NWE4YjcxMSI6IjgwMTVjMGYwN2E3YWNkNGIxY2JkZDIxYjU0IjoiMDkzZWQyNmFkYTU2MjhjZmI4Y2ZjMTM5MTUyNmIzYmNjNGFmOTdkOSI6ImEzYTYwYjQyMmViMDcwYjQ5OWNmNmRhMGE0MDRiMTNhMDVjZWRkYTU0OWM2YjkzZTZjYTBlMDdlMDQ2NzRmMjFhNDZkZjI2NTlhNTkwNWZiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMyMiAoUD0yNCwgTj0xMywgQT0yMSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWFjNjA4MzVjMzA5ZDgzN2FhY2M2MzU5MzFhZjk1NzAyYTQ3ODRjMjE0MjgzZWJiIjoiZTg2MTA3NTY1MjhmNzU2MDdiODM5MjY1OTdlZjUxNWY0YjMyYTgzODY0MzdlNmQ0IjoiMGUyMDYwMmQ0ZGMzOGJhYTFlYmY5NGRlZDUiOiI3OTZlNTVmYmU3YmVkNDZkMDI1NTk5YzI1ODk2NGE5OTU3NGM1MjNmNmEiOiJlMGEzZDVmNDNlNjg4Y2UxMDRmNGFlMWE0ZmNkODU1MDBhYTZiOGZkYmNkMWI4ZDMwMDNjMGMzYjczNjllNzkzMzk0MzNlMTc1NGMwOTM3ZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMjMgKFA9MjQsIE49MTMsIEE9MjIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY3MTU0NGJmMjk4ODA1NmY3ZjljY2Q1MjY4NjEzOTFhMjcyMzM3OTNhMjNmODExZiI6IjU3NmIwNjlhZTI3MTNmNTNkMjkyNGMxZmQ2OGY3ODZjYjJlZWM2ODg5MmY5ZTFiZSI6IjBhMjU5MTQ4YTFkMDgxZTBkZjM4MWVjZDBjIjoiNjFkYWZjMjM3Y2I1MmY4M2FiNzczYmE4YTg4NTQ2MmI2Zjc3ZDQ5MjQ2MTEiOiJjZTA2YjNkMDliMDI5MjFmMjkwNTQ0MDMyYTA4MWE3NzY2NjEyOTQwMDQ4ODY3MjgxYmIwODlhZjAyNDU3OTJjMTZlNjMyMGNmNWZmYTE5ZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMjQgKFA9MjQsIE49MTMsIEE9MjMsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkwZTJjNjNiNmU1Mzk0YjFhZWVjMDNmOTVhOWQxM2EwMWE3ZDRlOWQ1ODYxMDc4NiI6IjQ0ZGQwOThiMWY4NjlkNjcwYThhODQxOTAwYzRiZWYwMjNhMTk0NmEwYzI3ODM1NCI6ImRhZGE1NDY1ZWI5YjcyMjk4MDdhMzllNTU3IjoiZjU2MjljYTBlZWE1ODlmNmNmOTYzZDg3NWE3ZDJlZmI2NTY5ODNmMmRkMjIzMSI6IjZiMzhjYTg1NDUwZTA1ZTdiOTM2MmVkN2U2ZTI5MWExMzBmZjIzM2I1YTU2MWNkZWY3ZWM4NGRkOTkyZmRmOTg1MTRmODQ1ZGFjOGY2NTZlIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMyNSAoUD0yNCwgTj0xMywgQT0yNCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTNjZGFhYTRmNTcyMWM2ZDdlNzA5Y2MwNDgwNjNjZmI4YjlkOTJlNjQyNTkwM2U2IjoiZDdjODM3OTcxYjk3M2Y1ZjY1MTEwMmJmOGQwMzJlN2RjZDEwZTMwNjczOWEwZDZjIjoiZjk3YjUzMjI1OWJhYmFjNTMyMmU5ZDlhNzkiOiJhZDY2MjIyNzk4MzI1MDI4MzlhODIzNDg0ODZkNDJlOWIzODYyNmU4ZjA2MzE3YzQiOiI0NzA5NjAwNDE4ZjI4Mzk4NDFlNmQxMjYzNTlmNjk4MmJkYjUzYWNjN2ZmMjA5NjM1NjIzZDE1YjI0MTg0NDgxZWFkYzYzYmI4Yzg3OGZjNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMjYgKFA9MjQsIE49MTMsIEE9MjUsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkwODUxOTMzZDRkMzI1NzEzNzk4NGNkYjljYmEyY2E3MzczMjJkYWM0ZGJkNjRiYyI6ImJhMTc4NWExNDljYjhiNjlhNGUwMTFjMTFhM2ZmMDZmNmQ3MjE4ZjUyNWFjODFiNSI6ImJlMDJkZjNhODQwMzIyZGY4ZDQ0OGM2MDBjIjoiNjlhOWRkOWFjOGJlNDg5YzNhM2Y3ZjA3MGJkYWNhMTA2OTkxNzFmNjZhYjNkYTkzNTEiOiI4OWFiMmVmZWZhODQwNjMzNmQ5ZTIyNDUxOTlmYmM5NDU0ZjBlZjY1MGI5ZWQwZjQ0NmM3MjQ2YmQzMTMwODAzYmY4ZDcwM2VmNWJkZjE1YyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMjcgKFA9MjQsIE49MTMsIEE9MjYsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVjNWQwMmM5M2ZhYTc0YTg0OGU1MDQ2ZmM1MmYyMzYwNDllMjhjZDgwOTZkY2FjNiI6ImI0ZGE0M2ViZmU5Mzk2YjY4ZjQ2ODlmYmE4ODM3YzY4ZDAwNjQ4NDFjNmRkZDRhNyI6IjU0Y2JmMjg4OTQzNzY3M2I4ODc1YTBmNTY3IjoiMDlmYzIxYWM0YTFmNDNkZTI5NjIxY2FjZjNhZDg0ZTA1NWM2YjIyMDcyMWFmN2NlMzNiYiI6ImQ0MDcyNTM5NzIyOTAyMWExOGYzNDgxZTNhODVmNzA0NDU1NTdiYjJhODVlNGFlODEwMWEzNGM3NzdlOTE4ZTE2MTg2ZmRhMDVhMzg2NTcyIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMyOCAoUD0yNCwgTj0xMywgQT0yNywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDIzNGRhZTViZDdhZTY2YzY3ZmYwYzFhM2YxYTE5MWEwZDdiY2ViNDUxYmMyYjdkIjoiMGY5NjBhODlhN2U4MDZmODcwOTA0N2NiN2EyZTdjNDIxMWFkNzI0NjkyYzg4YTA1IjoiMTZkMzQ1NjA2YTMxNWFkMjQwNmFiYmNiNDMiOiJjMzdmZGY3NDQ5ZmQ3ZTk0MzU5NWQ3NWU5NzcwODljNjIzYmUwYTM5MjZlNjNmZGJiZmRmNGEiOiIzOTA3ODgwZDI1ZjkxMGVhYjEyZGQxNGU3MDRkMWIzM2VhN2M0NTM2MzRkNTRkYTJhNDYxZjQ0ZGFjMTExMmFlM2Y5YzY1NjcxYTkzMWQzZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMjkgKFA9MjQsIE49MTMsIEE9MjgsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYzNTFhNjdmZDZkYWFiZDJmZDQ5ZWU5NDRkZDQxZGQzNzMwMWY5NThkZDE3ZmNjMyI6IjBjMDY2M2RkNjljY2JmZmJiZDBjOGMyZTk0NzNkMDM1NDQ1MWFlN2EyMGZhMzY5NSI6ImI4ZDUxN2IwMzM3NTQwNTgxMjhkMTNkMTFhIjoiNTExYzY5MjRmYTk2ZGI3MTZmNmIwNTNiN2E0OGFlYmRjMTUwNDE0NWE1NmNkMDJkNmJlMjU5MGQiOiIxOWYyNzQ1ZGY1MDA3NjE5Yzc5Yzg0ZDE3NGU0NTIxYjk0Mjc3NjQ3OGEwNjAxZDk4MmM1NjBmZWRlNDc0MWUyZmQzYjU0YjNhNDhmM2UzOCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMzAgKFA9MjQsIE49MTMsIEE9MjksIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjlhNWE5NTYwYmFlZDNiOGUwZTkwYjkyNjU1ZDRlNWYzMzg4OWU1ZDcyNTNkOWY2YyI6IjViYmU5YzFmYjI1NjNlM2U4Mjk5OWZlMDk3YjI4ZGE0ZGM2ZmYyZTAyMGYzYjRmMyI6ImMwMDQ5MzgyY2RkODY0Njc1NmQ0ZTZiZmY1IjoiYzk1YTg2ZDUyMDg4YThiMDEwN2NjNWI0MzdhODkzOGIyYzllNzRlNDZlMmUwM2JiOWJjZWVjZGJlMyI6IjZkNTQwMWRiNDJiNWM0OGI3OTIwM2I2YWQ4MjgwNmQ3NDYwYWM0YzgyYWQwODA5YjgxMTAyMDQ4MGU4MzRmNmZlNTU5MDBhMTYyYTRlNjFhIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMzMSAoUD0yNCwgTj0xMywgQT0zMCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2U2MTA5NGM4MGRmMDA1M2U4NmQ0M2ZjY2Y0ZTFkM2VlMmNkYjg2MmQzMjM3YjBhIjoiMWZhZGE4ZjRjN2RhZWEwZDFjMzcwMTg0YzE2OTQ4NWI4MGEyNzg3MDhlZDQxNDUxIjoiNjNmMDBiMjQ4ODgwOWZkYzQ5Y2E1ZjA1ZDUiOiJhMDg3NjNjYTkzNmFiZGVlY2UwNjQ2N2JlZjhjM2M0N2MzYTQ3MzYzNmEwMzlkNGRiNTQwYzg2N2QzZTMiOiI2ODBkZDIyZjE2YTEyOTBiZGU0MmM5NzkyZGZhOTk3YWVkMjRkNWJkMjI2NWI2ZTA5NWFhNmI5OWQzZjg5NGQzNzkwYzJhYTJkYWUxYmEyYyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMzIgKFA9MjQsIE49MTMsIEE9MzEsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI1NjY0ZGQ2ZWQ0MzVkZjAwNjA1MmY2ZGVkNzRiYjdjZTk0ODJjYTkyMjk4ODZmNyI6IjBiNmRlNDliNTMwNzAzYWZmYzk0MDEwYzJiNzkzZGRjNmRlMGM0NGQ0ODAzN2ZmMiI6IjdhMTY0OTg5NmYzZTAzMGMxOGYwMjA1NTk5IjoiYzVmMWEyNjM1MWU1M2U2NTA5YzhiYmJlZDAzYzQyYzIzYWQ4MWM2NWZjY2VjN2ZmYTFjYjQ5NGM3ZjFmYzQiOiI1NmIwMmZlYTU5NWNjMjRlNzk4NjkxYWU5MDViZTNkNDY2Y2E2OGNhNzQ0MDA1ZGJhMjYwYjVlYTNiMDQ3MDIwYjczYjViYWZhMTdlNTA4NCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTE5MiAjMzMgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjUwOTI1ODUzYTg0YTMzZmYzOTIxNTRlNGU3MzdlZmMxOGRjZmM5OGY0ZDUyMzVhOSI6IjcxOGYwNjFlOGI5NzJhM2FkY2Y0NjVkNjZjNWIyOGU4NjYxZjA4MDEyN2Y2NzIyZiI6IjgwOTM0M2U5ODZmNmZmNDdmNTRkNGNhYzIyIjoiZDcwYWVmMzUzMmJkYzUyOTNhM2ViYjExNTg5YWMxZjgwMWM5ZjkzZWEwZDY1NmUxZDA0MDY4ZmFjZjlmNzY4YiI6ImJhZDNiMGU2NzcyZTljNGM5YzYzMWMwOTVlMjU5ZDk5NjkyMjkyOTMyZWZiNzJiODk2NmU5MWExOTYxN2JiNzQ4ZjM0OTVhYTQzMzU4NWJiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICMxIChQPTI0LCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI2NTExZmI1MWZjZmE3NWNiNGI0NGRhNzVhNmU1YTBlYjhkOWM4ZjNiOTA2Zjg4NmRmM2JhM2U2ZGEzYTEzODkiOiIzMGQ1NmZmMmEyNWI4M2ZlZTc5MTExMGZjYWVhNDhlNDFkYjdjN2YwOThhODEwMDAiOiI3MmE2MGYzNDVhMTk3OGZiNDBmMjhhMmZhNCI6IiI6IjU1ZjA2OGMwYmJiYThiNTk4MDEzZGQxODQxZmQ3NDBmZGEyOTAyMzIyMTQ4YWI1ZTkzNTc1M2U2MDFiNzlkYjRhZTczMGI2YWUzNTAwNzMxIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICMyIChQPTI0LCBOPTEzLCBBPTEsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE0NDkwZWQ2YWI1MWRiZmNjZDZmMzcwMmE4NTc1NzVkYWQ0NGRhM2EyN2VhZjMxMTc4YWJjOTdkYTYwZDFlNGIiOiIxYjVjYzZiMTY1MWRlYzRiYmJmNTEzMDM0Mzg1MmU5NzFjN2ZmMTc3NDEwMGQ5YmUiOiIyNmNlYWY2ZTNiMjgxOTBhMTdjNGYwYzM3OCI6IjllIjoiNzg5YmNlMDY5YTcyNWE5NmM0ODRlNjRhOWU1NGRjYjdhN2MyNjhjODVkZjQ3ODE1YTQ2MmZmMmRkOGJhNDRhMzgxZTFmNmVkYWIxMmI1YTkiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzMgKFA9MjQsIE49MTMsIEE9MiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGY1OTRkYjk0ZWY4ZWNhNTZhNDE3YWZlOTQ2MDg1ZWFlZDQ0NGM3Y2M2NDhkMDdkNTgxMzJlNmNiNWJjMmJjMyI6ImY0ZDc5NzhmYWQzNjIyMzYyM2NjYjViYjE4YTczNzNjYmE4YTZlM2IxYzkyMTI1OSI6ImMxYWQ4MTJiZjJiYmIyY2RhZWU0NjM2ZWU3IjoiYzBjMyI6ImJlYTc3ODU0MGE5MDAzM2IyYzBkMDg3ZTNjYzQ0NzcxMWVhMjVmN2VlYTk2ODU1NTA2ZWM5N2YyM2JkNmVhOTc4MzRmOTJmNzI2M2MzMTk1IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICM0IChQPTI0LCBOPTEzLCBBPTMsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ5ODE5M2FiMmE0NjVlM2ZjZDg1NjUxYWFlY2ExOGI4ZTkxNDg5YjczYjdjN2U5M2I1MThjNGI1YjgxZmM2YWMiOiJlZGJhN2Q2MzEyMTQ0ZTkwZWM5ZWFhY2U3NTc2MDQ1YTQ2ZTU1M2RjYjhlZTVhOTgiOiIyMjQ3ZGM3ZTI2NzRlOWUwYTYzZmU3MDYxMyI6IjRkYzJmNCI6IjQ0YjllYTcyN2M4NDczMzZmZDczOWFkMTFmNGI5MDZiMjkyZWRiODEwNDYyZjA2ZWY1OTYyNmFkNWNkYWMyZTRkNGNiMDdiNTM4YTFmZDhmIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICM1IChQPTI0LCBOPTEzLCBBPTQsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ1YzhhZmQ3MzczY2IwZjZiMDkyYWYzYTYzM2Q5ZmQ5N2M0Y2EzNzhlMTlkNzVmOWI3NGQwODk0Mjk3MjZjMjkiOiIwYjkyYWRiYjI1MWRjMjlhNjdmMGJiOTdmOGU3MTYwODYyYjZjNGU4NDNkMDdmZDkiOiJmZGIxZmEyMzBhZTBiMTcyZmY5OGZjNzQ5NiI6IjI3MDk4MWFmIjoiMjc0ZTJmYWVhMzI3MWVhNmZhMDQ5NGMxOTUxZjExNWI1NDkxYTg5MzA1NmMzZWU0Yzc2ZmMzNTBlNTg1Mjc3ZTM3M2U5MTE5YmY5NTk1Y2IiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzYgKFA9MjQsIE49MTMsIEE9NSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTJlNmJmMzllZmQxY2VkZGM5MmI0MzMzZWQ5MmQ2NWVmZWVhNmMwMzFjYTM0NWFkYjkzYTc3NzBhODAzOWJjZCI6ImQ4MjJmODRiMDIzZjEyZWE5ZTNjZTE2YjkwNDI3OGU0YWFhYjVlMTFjMmMyM2YzZiI6IjY5M2NiYjQ2YmM4MzY2MDg2ZWM3Y2Q3Nzc2IjoiM2JhMTEyODJkNiI6IjlmOTFmZDJmNjQ3MmUzM2IwMmIxZWFiYjlkNjY1NTcyOWQ0NGM0NGRhZDZiMzg4M2ZlMDY2N2JjYzU4MDZiMjI1MjI0YjA0YWRlOGIyMWMxIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICM3IChQPTI0LCBOPTEzLCBBPTYsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM1YTg1MDE2N2E1YmZkZjU2NjM2Y2U5ZTU2ZTI5NTI4NTU1MDRlMzVjYzRmNWQyNGVlNWUxNjg4NTNiZTgyZDgiOiJlNzU4Nzk2ZDdkYjczYmNjYjE2OTdjNDJkZjY5MWFjNTc5NzRiNDBjYTkxODZhNDMiOiJjNDViMTY1NDc3ZThiZmE5Y2EzYTFjZDNjYSI6IjQ3NTk1NTdlOWJhYiI6IjkzYWQ1OGJkNWY0Zjc3YWM0ZjkyYjBhZTE2YzYyNDg5ZTQwNzRjN2YxNTJlMmVkOGE4ODE3OWUwZDMyZjQ5MjhlZmYxM2I0Y2UyODczMzM4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICM4IChQPTI0LCBOPTEzLCBBPTcsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFlOGY5M2MzZWZlMzhlMmFmMDdlMjU2OTYxZGQzMzAyOGZhYTA3MTZlNTMyMGE3YWIzMTlhMTBkMmY0YzU1NDgiOiJiYzljYTkyYTljOTkxOWUzOTA5NWQzZTUzZmIxNDg2OTQ2MjBhZTYxMjI3ZTAwNjkiOiI2MzMzYmRlMjE4Yjc4NGNjZDgzNzA0OTJmNyI6IjBiMWZhYmRmMmE0MTA3IjoiNDU4MTFiMGM4Zjc1NGJmMDM5NTBlNTIwY2Q0YWZjODFjMmUzZWI4YTExZjRmZDM4NmQ1YTZlNGIxZmJlZTE1ZDM1OTM5YzcyMTAwNDUwMmUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzkgKFA9MjQsIE49MTMsIEE9OCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTQ4YzJkMWViN2Q5MWUwMDM2MzNkNGQ5ZmYxOTllNGE4NDQ3MTgwZWRkODlhYzc4NjdkMjVhMWRiMjg4YjVjZSI6IjQ5ZmQ1Y2JlNGFmZjg5ZGMzYjg3MThmOWNlNTQ1ZDYxMmNiYmViYjI4OWVjYmY0MiI6IjIzYjIwNWJkNmZmOGVkMGJhYjBjOTg5OTljIjoiYTY2MDExMTFjZDkyYzk0MyI6IjNjZmM2MjExZTM1OWFlMzIyODAyZmM5NTY2ZjM3N2IwZGZlMTdkMWRmZTA4NzhlYmYyYTkwNDdlMzdjYzBiZTFmYWIwMDA2YWY4ZGI4ZGM0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICMxMCAoUD0yNCwgTj0xMywgQT05LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYWI3OTNlMzc3YTEyNDg0ZGJkZDc0YzliM2E4NWM3NGMyODZlMWNjNDk4NjYzZmJkN2M3MThiNTYzM2JiOTFhIjoiN2MwODg5ODU0NjU4ZDM0MDhjNWQ4MDQzYWFkMmY0YWU0YTg5NDQ5YTM2ZjhhM2I4IjoiMTAwMjJjZGRiMzIzZTg4YjNjMDhmOTVhMGYiOiI4MmI4YzczNjAzN2NlMmYyZTgiOiIxMDQ0MjUwZjU4ODU3YzY5ZjcyYjVkMzQ1NGQ0Mzk0OWU1YzAyYjM4MjI5NzBiMjgwZGUxYTNmN2ZjNWQwNmNjMzBmMDYwNzVmNTUwNGVkNyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMTEgKFA9MjQsIE49MTMsIEE9MTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA2YWMzOTg5NjA3M2E0NDI4MzYxMWE2NmNjYWIwNjdlMmRkMmZhYThkYTgyZmY5YTQ1YmIyOWU1NGQyZTZlNzciOiIzMjE2ZGNlM2I4YjFjZTBlNzllNDBmZmZjYWM3MjhhYjE5MWFhYWYzMTlkOTcxZDMiOiI2Yzc5NDJjOTgxOWNmNjliODE3YmZjZGIwYSI6IjIxNWUyYTZjMjQzMjUzNDBmZGVjIjoiYzViM2I1MGVkOGE3YjdiOTZiMDJiYTk0NjRiNmEyZmY4MGU5MDU0ODYwNTY5OWE2M2Q3MGU2ZGZmYjMxYTM3NmExZWI3Zjk0NTI2ZGNhNDgiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzEyIChQPTI0LCBOPTEzLCBBPTExLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1MDQxMmM2NDQ0YmNmOTgyOTUwNmFiMDE5ZTk4MjM0YWYxNTQxMDYxNTU3NDEyNzQwYmMxMjBiNDU2MDUyNzYzIjoiNmNkYmQ2M2Y2ZDU5MWY1OTc3NmY4Mjg1MzNiMjhlMjQ1M2EyMTRkMWQwZGQ4YTM5IjoiODU2ODRmOTRjMzcwMmM1ZDg3MDMxMDE2NmQiOiJmNzA2YTNlMDlkZjk1ZDNlMjFkMmUwIjoiOGM4YjRhZTg1NGE1ZDVjMjY1YjI1ZTNiNTRiZGVkOTQ0NGNjNDU0YjNlMGU2YTI0ZDZjMDVlYWY0MDZhNWViZDU3OGUxOWVkZDUyMjczODAiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzEzIChQPTI0LCBOPTEzLCBBPTEyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4YTU2NTg4ZmU1ZTEyNTIzN2I2Y2RjMzBmOTQwYjhkODhiMjg2M2VjNTAxYTBjYjAwYjFhYmFkZTFiNWNlMGVkIjoiYzgyNTk1MjI5M2U0MzRlYTg2NmRiNTU4YWFmNDg2ZWYwOWE5MmJmMzY2OTg4ZjcxIjoiZDgwMjEwYjlmOTc3NmVhMzZkYzBlMGE3ODciOiJlNDI5NmQxYzhjZjRmZmM0YjI2MzUxMzUiOiJiOGIzYjE1ZmRmNmE0YTBiNWFiYzMxM2FmYzc2OWU0ZTg0MTNiZDg4NzU1MjU4M2VkZTNlZDk5NWQxYjcwNTYxYzhlMjhhN2IxYTdlM2RjOCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMTQgKFA9MjQsIE49MTMsIEE9MTMsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE0Y2M3ZTFjOTBmODY4NGU2YTVmOTVlNjg5OGFiNGUzYzE5NGNiNDZlMTk2ZDgyMjgwNjJiOWYzZmE3NDQ5MzAiOiIxMGQ0Y2ZmOTVlZjQ5MDkyM2M5ZTA5MDY4ODA3MjlkNGQwNTQxMmU3Njc1Y2NlNzYiOiJjZGMyNzEyZTUxYzdmMzMzZDZiYWQ3OGVlZSI6IjU2OWM1NmIyNzI2OGQzZGI1NGU3MjhhYWMwIjoiYmUzY2UzZTlkYzcyNDk5ODM5YTk4YWU1MmFiYjE3NDE1ZTg1NDc2ODdlOGEzYzdiOGFhYWFjMjBkNGM5Mjc2ZjI4NTFjYmJhMmIwNGQxODUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzE1IChQPTI0LCBOPTEzLCBBPTE0LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzNDdlMTJlZWM1NmU5NWFhZmNjN2QyNWJmMTBmYzc1NmI0ZTQyYmMyZTQzZGE3Zjk3ZGYyNDMzMWYyN2YxZjVjIjoiY2E4OGRkZGZjODc2YTEyZjQ1ZjE5NTYyYmM5Y2EyNTBmNDMyNjdhYjI1MWE3ZjM0IjoiYjhkNTE3YjAzMzc1NDA1ODEyOGQxM2QxMWEiOiI1MTFjNjkyNGZhOTZkYjcxNmY2YjA1M2I3YTQ4IjoiZWVlZGNmYThmNWI1YjQ4YzFkN2UyNzc1MjZlZWNiNzI5NDIxM2I5ZjU3ODUxNjdhZTk0OWI5MzAwM2RmZTYzYzk1YzFkNDllZGZiNGRlM2YiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzE2IChQPTI0LCBOPTEzLCBBPTE1LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1MjA5MDJhYTI3YzE2ZGVlMTEyODEyYjJlNjg1YWEyMDNhZWI4Yjg2MzNiZDFiZmM5OTcyOGE0ODJkOTZjMWZlIjoiNTMzZmVlN2QyYzc3NDBkYjU1NzcwZTQ4Y2IxYjU0MWQ5OTBlYTNmOGYwOGVkMWE2IjoiZGRmNTA1MDJmNDE0YzFiZjI0ODg4ZjEzMjgiOiIyMmI0ZjhmMWFhYzAyYTliMmVmNzg1ZDBmZjZmOTMiOiJmYzg2N2IzMTllMGU0YWI0NWVjNTE4YTFiNWRjZWM0ZjI5OTgyMTczZjNhYmZkNGQ4YThmOGQxNGQyYmRhYzg0YzM3MzdjZmJkNzViN2MwYiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMTcgKFA9MjQsIE49MTMsIEE9MTYsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU3ZGExYzI3MDQyMTllZDU5YWJmZGYwNDc0M2E5YTkzYzg3YTYzZDQ3MTgxOGRlMGYxNTY0YjJkYjY0MjE1NjIiOiJkZGMzYzFhYTczZmI2ZGU5MmJiNGRiMTM4ZTI2ZjNjMmUwNTQzYWI0ZjU5MjQ4NzEiOiI0YjYwYTQ3YjdlOTBmNjIyZmEwYmY4MDNlMSI6IjBhZThjMDEyZmYzOTc1MzUxMGRmM2VlODA3MDdlNGUyIjoiZGFhODI1NmQ0NzUzZmRmOWNmZWY4NzYyOTViYWRhYmE4OWI0NWNjNDk3ZjU0ZDIyMGVjMmM2ZmI2ODc3NTNiY2E0NTgwYWRjNmFhMmYyOTYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzE4IChQPTI0LCBOPTEzLCBBPTE3LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MjY3ZWJjOTljY2Y2NDhiMTQ2Y2JhM2MyNTExODdlMjRhOTk0N2Q4MDZjZWIwY2VkNjg5NDIxMTY0MWExZTBkIjoiOTY3ZGFmMTJmMTZmMTY2YjdiNTAzOGY4M2ExY2YwYjk4MGY1YWJmNGM3NzQ2ZjJhIjoiOWI3Mjk4OTUwMjgwZTg3NjJlY2RjOWJiZTQiOiI1ODI0Njg5NDUzYmM0MDZiZjg5MWI4NWU0NTc2ZTM4ZmU4IjoiN2NmZTJhN2E1NDMwNmViOGQ4YTYzZDNkMWFlODY3OTRmOWEyYzIyMTk4YjJjYjRmMTBjYTkyNmYxYTQzMGMwOGMxMmUyM2RiM2Q5MTNlOTMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzE5IChQPTI0LCBOPTEzLCBBPTE4LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YTg1NWUxNjkwZWU2MzhkZTAxZGI0M2IzNzQwMWRjZDU2OWMxYWUwM2RjNzNkZDBhOTE3ZDBjYWRiNWFiYzI5IjoiMzNhZTY4ZWJiODAxMGM2YjNkYTZiOWNiMjlmZTlmOGJkMDliNTllYzM5ZjRjZTRiIjoiOGYxNjBhODczYTExNjZjOGIzMmJjY2JiYTciOiI3MjY3NGFjYTdlYmEyZmMwZWVhZmJkMTQzYzJjNGQ4YWE2YzgiOiJiMjJhZmRmNGYxMmM0M2VjMjNlMDFhYzEyMTVhM2Y1Mjg2MDU5MjExMjA3ZTk1NzA1N2U5YTkyMDNkYTc0Mzg3YTk0NjhmOGFmNWUyNzU0NyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMjAgKFA9MjQsIE49MTMsIEE9MTksIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBlYmRjNmRkYjRjNTAyNzI1ZGQ2ZWU4ZGE5NWQ1NmEwZDEwNDRiNDY5NGQ2YmE4NDc1YTQ0MzRmMjNhODQ3NGYiOiJjNzM2MDI4MmM4NTQ4NGE1YTMzYWIxYzY4ZGQ3MDg3M2FiNGU3NGZmZDRhNjJjZDUiOiJmYjcxN2E4YzgyMTE0NDc3MjUzYWNjMTRmNiI6IjQxZTlkNjU2MzJmNzRmNDQ5YTY4NDJkNWU2YzRhODZlZjgzNzkxIjoiMmU5NjFiM2EyZmExNjA5YTRlNmZkMDRiZmY2YWM1ZTMwNmFlMjYzODcwNmY5OTdiNDJiZTJlMmJhMDVjNTRiNjE5ODUwZGI1YzlkNjg0ZmUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzIxIChQPTI0LCBOPTEzLCBBPTIwLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZmY2NGJiZWMxOTdhNjMzMTVjMmYzMjhkY2I0ODM3ZDBjZGMyMWE1ZDZmODlmZjFkOTdjYjUxMTk1MzMwY2Q4IjoiNGExNzUyMmRhNzA3YjRiMjU4N2EwYWUzNjdhMmNkMjgzMWJiNTkzYTE4ZWY0NDJhIjoiYTIzNWY4ZWUzZGU5ODk2YjcxOTEwYWMwMmMiOiIyYjQxMWJlYTU3YjUxZDEwYTRkMmZiMTdlZjBmMjA0YWE1M2NmMTEyIjoiMWJmMTIyNzk4YmQ4ZWU4ZTczMzkxZDU4OWJkMDQ2YTI5NGQxNjE1Nzk0ZTY5Y2I5ZTZmM2JhMzAxNDNhY2JjM2ExYzFjNmVjNzQzMzMxMDciCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzIyIChQPTI0LCBOPTEzLCBBPTIxLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNGU5ZjA4YTlhMDA3Zjk5NzY5MTllMTBkYzQzMjAwMmUyZTA3OGEzMzk2NzdmMDAxMDVjNzJlZDM1NjMzYTNmIjoiZDM0MTZhODFiNDI0NmViMGJmODExOWE3MmE4ODZiYmMwYWM5NDQ5YzY5ZjcxZDJmIjoiMTU5Nzc0MjRlZWVjMGVjN2Y2NDdlNmM3OTgiOiIyZDgzOGViNTFhNGJjNjlhMDAxYTE4YWRmMjA4NGE2ODBmMDJhM2M1ZmMiOiJlMDAxYThmYWUzOTBkYzVkNjcyY2RkMThmODZhMWY3MjgxNThlYzgzYTAwMjA1MGRlZjlhZjU2NzllZGJjYmI3ZGIyMGFiNmFmMzA2OThkYiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMjMgKFA9MjQsIE49MTMsIEE9MjIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBlYzFiMjJiOGRmMDVkYzkyMTM1ZDJkZmJlZmVkOGVhODE0NThmNWVhMWI4MDFlOGEyMThmYWY2Y2JkZjFhNzkiOiIyZjU5ZDk0ZDRhYjhlZWI4NGMyYTZmZWZiN2ZiMGEzYWMwNTljMWUxYTY1YWUzNGEiOiI5N2ViY2I4NTc1YmI1ODI2MDIwOGQ1YzIyNyI6ImEyZjYzMzdmODZkZDAwZDFhNTg0NDg4NTFlOTVkOGM5YmFjZTRhNWM4NzEwIjoiN2NhMGIxZGJlMzRiMDM5MWU1MjRiODY4YjBhZjA4YjNlMDk2OTE3NjY0ZDZhYTJjYWJjMWY5ZDAxMzIzOTQxNDljOTA2MmI3NGI4MmYwNGIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzI0IChQPTI0LCBOPTEzLCBBPTIzLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwODc1MDIwOTU5ZWQ5NjljZmIzODYzNmQxZDVhYWJjZTk2NThiMDAxNzFhNzYxNGVhOWU1Mzk1MzMxYzc2NTljIjoiMDY1ZWY5ZWVhZmJlMDc3YzFjNzA0OWY0M2ViMGQ4OTk5NzA4ZTg2MDlmMjE0ZDVjIjoiNDUxMTAxMjUwZWM2ZjI2NjUyMjQ5ZDU5ZGMiOiI3Y2M5YzUxYjY5Zjk4YTA2MzkxYWIzMjc0MmZiNjM2NWUxNTEwNmM4MTFmZThhIjoiOTkwMDY1MzIyYTQzOGUxMzY4NjBmN2IwMTk4MDdlOWZlZmY1MmE2NDJiZjNkNDRhOTE2M2ZhN2E4NjdmMDRjYWI2ZjUyZGMyNTAwNzBmMzEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzI1IChQPTI0LCBOPTEzLCBBPTI0LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlZjRjMWQyMzE0ZTY3MWY2NjZjYzY2Njc2NjBmMTQzOGEyOTMyMDhjN2NjMjliNDEyZDgxMjc3ZjBhNjM1YzkxIjoiYzk5YzNlNzkxMjViNmZkOTVlNzM3MzI2YTg0MjQyNGViNmM2ZWNlYTRjMDQ3NWM0IjoiNTBiMjNiMDUyOTIyMzY2YzI1ZGQ0MGUzNDgiOiJjZDA1MjJlYmUxZmVkODI0NjUyNzdkMWMxMGFlOTMxNmE5OGI0NDY5YmU2M2IxODAiOiI3NmRmNGJlNGVjODM3Mzg2NDM5OWFjZGExMTI5NGIyMjBiOWY3YzNhN2QyYjM2NjBiMjU3NjRlNDBhYzZhMTcxZTdlNmJhYjRmZGVlNDI4OCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMjYgKFA9MjQsIE49MTMsIEE9MjUsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg1NDQ4MDhlOGZiZjhjM2E1ZTFkNGNhNzUxZDRiNjAzYWY5ZmUxMTllYWJjNjkyMzIwNTgxNWUwZTc0OGI3ZTciOiI2MTdkNTRmYzZhMjM2MDFjNzllMzk4NGY5M2JmYzJkMTUxZmRlNDIwODYzMjA2YjMiOiJiNDRhNTg3MjQ1OTZiNGQ4ZGVhODI3YzFhMCI6ImY1YjJjODhmNTIzMmMzNzI3M2IxZTY2YWEzMWNmYTcyMDFlMzNjMjFkNjAwNTRkMDI1IjoiNTdiMzQxNGRiNDg5ODJjNjU2NzI2NWUxZTAxNzNiZjM4ZmRmYWZmZTQ0NjFmYmViYzE0MTFhZjgzMjM3YzBmOWViMGJmZThlZDkxNGRhNjYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzI3IChQPTI0LCBOPTEzLCBBPTI2LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlMTllYWRkZDlmMTU3NDQ0N2U3ZTY1MjVmN2ZkNjdlM2I0MjgwN2U0NGZiYjYwZTc1ZDhjM2U5OGFiYzE4MzYxIjoiYjNiMGRlMTBiN2MwOTk2NjYyZjFiMDY0ZTA0ZTUyOGI3ZDg1Y2ExMTY2OTg1ZDMzIjoiYThjNDU5Y2UwMjIzMzU4ODI2ZmIxZWMwZjAiOiJlZjg4ZjQzOTNkNmMxZTdiN2JlNTVhMTIxNDQyMDllZTA1MWJiNzc5ZTQ0MDQzMjcyMWVmIjoiZDYzZTYwODJjOTVjNmM1ZmYyYmMwNzcxMzIxYTRmODgzZWY2MWNmZjdiOTllMGVhOGEyMGExYWJlN2M4NDJlYmMwOGM4YzgxYTI3NDNjODEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzI4IChQPTI0LCBOPTEzLCBBPTI3LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5NDk4ZjAyZTUwNDg3Y2ZiZGExY2U2NDU5ZTI0MTIzM2JkNGM0Y2IxMDI4MWRjYjUxOTE1ZGJjN2ZiNjU0NWMwIjoiMGQxNmNjNjljYWE5ZjE5Yjg4YjA1ZTE1MWIzZDI2YWNjZDAxOGNhNGE1Nzg2YTgwIjoiZTNiZDRiYzNhNjBjZGRkMjZjMjBhYTg2MzYiOiI3MGNmY2I4MjhkNDgzMjE2YjQ2YzNjZDIyZTJmOWVlODc5ZTllMzA1OWI1NjYxNzliNmUxNmMiOiJmMWM0YmVkYjhkNmY5MTY3Njg4MWRhYTM3NjU2YTdlNjQwMmY0NzI3MzViMDRhMGYxZjgzMzJmNDIzNjQzNzczNzQzOGU3YWExYjUxMDBjNyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMjkgKFA9MjQsIE49MTMsIEE9MjgsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNhYzdkNWJjNDY5OGMwMjFlNDlhNjg1Y2Q3MTA1N2UwOTgyMTYzMzk1N2QxZDU5YzNjMzBjYmMzZjJkMWRiZjgiOiI4OTE5OGQzYWNjMzliOTUwZjBkNDExMTE5YzQ3OGM2MGIyNDIyZmZlN2UyNmUwMGIiOiI1NGM4ZmY1NDU5NzAyYWFjMDU4YmIzYmUwNCI6ImVjYmQ3MDkxNzMyZTQ5YzBmNGJkYTJlNjMyMzVlYTQzYmJmOGM4NzMwZjk1NWY5YzA0OWRkMWVjIjoiNzcxN2I4ZTQ0NDdhZmNlYTFlZWViZjNlMzlmZmRhYjJmNTI4MjhlNzkzMWVmMjdlNDc1YWNkMjc5MDA0NzhmMDlmZWMxZjQ3OWFiM2E3YzgiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzMwIChQPTI0LCBOPTEzLCBBPTI5LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5NDg4ODJjMzY2N2NhYTgxYzliOTAwOTk2ZTNkNTkxZTZmY2IzZDA4MzMzZWViMjk5MTFlOWM2MzM4NzEwYzE3IjoiOGI5MTMwYjBjM2MxNTM2NjgzMWJiYjE5ZjM3N2UzMjA5YThkYmY3NjE5Y2QwOWJkIjoiNDNiMGFjYTJmMGE5MDMwZjkwNTU5ZmE2ZDMiOiJhNTE2Y2E4NDA1ZTVjODg1NGU2Njc5MjFiNWM1ZTE5NjhiZGQwNTI5MTViNTVhYzk5ODRiN2VlZmIzIjoiNDY0NmIyYWNkZWIxMTE3NDE3MWRhMjM5OTljZDU0ZTI5N2RhYTMyYmJjMTNkMzA1MTJlNTdjNTc2YjMxNWY0OGMxMTg3NzE3ODM4OWFhYTAiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzMxIChQPTI0LCBOPTEzLCBBPTMwLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzYmY1MmNjNWVlODZiOWEwMTkwZjM5MGE1YzAzNjZhNTYwYjU1NzAwMGRiZTUxMTVmZDllZTExNjMwYTYyNzY5IjoiMDk0YjUzODExMDQ5NWU5MzhiMDhjZjc0OGE2YmNmM2UwYzgwZmY5YzY2NTcwMjM3IjoiZjlmYmQwMmYyOGVjYzkyOWQzNjkxODI3NTIiOiJlYmYwYjNlMzE5OWE1YzM3NzNjNzYxYzcyNWM3NjAwYWRkNWY5ZDgzMjFjOWY4ZTVlNWZkMWM3YTVkMmYiOiI0ZDhiNTMwMTZmYzhiYzk2NzcxODRjMGZhMTViYmQzZDY3MWI5MzY2ZDgyZWNiNjdmODU2MmVhZGNkY2JjZGJhZDEyOTliZWExNTIzZjVkMiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMzIgKFA9MjQsIE49MTMsIEE9MzEsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU0NWJiMTczMGQwZDUzOWFhYjM4MDUzNTBhYzk4NjU0MGRlOWYwZjZjMjM5ZWU3MDM5NWMyOTEzOTdiNzAzMDkiOiJiYzhiM2JjNDhjN2E4OGM5ZmFmZGUyNThiNmNjYWE5ZDRmMGQwMTg3MDNkNjM4NzEiOiJkNWM3ODI0YWY3MTViYjc4MjJiNmIzNDBmZSI6Ijg2MGY0YTA5YWQ4YjNkMzQ1YzJhYTE4ZmZiODAzZjBiYzNiNzM0YTRkMDQ3YTE0Mzc3MDFhNWUzZDk1Mjg4IjoiOTVmMDgzYWQ2YmJhZWU2YWI1NDBmZTAyMzg1OGY4YmFmMjVlMzMzZmQzZTg5YzAwZTY3OGEzOTJkMjI4YjIxMGRjNWM5OTE5MDVkYWNmM2YiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzMzIChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZTZlMzQwNzBjYWYxYjg4MjBlZDM5ZWRmYTgzNDU5YWJlMWMxNWExODI3ZjFjMzlmN2FjMzE2YzRjMjc5MTBmIjoiNzcxYTdiYWE5Y2Y4M2FhMjUzMzQ5ZjY0NzVkNWU3NGRiYTQ1MjUzMDdiMDIyYmE3IjoiYzQ5Y2NlZjg2OWJiODZkMjE5MzJjYjQ0M2IiOiJkMzdlMzVkN2NkY2NkOTgyNGExYWU0Yzc4NzgxOTczNWU0YWY3OThhM2JlYjQ5ZDQ3MDUzMzZkNjQ5Njg1M2FkIjoiZWViYWMyNDc1MDA0OTcwMDcxZGZhMmNmYjg1NWM0ZTc4YjFhZGQ4ZGNiY2NmYzBiZDZiMTQwMjczMjRiNjU3YTU2MjYzZGYxNDg2NjUzOTMiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMxIChQPTAsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRhZTcwMTEwM2M2M2RlY2E1YjVhMzkzOWQ3ZDA1OTkyIjoiMDIyMDlmNTUiOiI1YThhYTQ4NWMzMTZlOSI6IiI6NDoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMiAoUD0wLCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YWU3MDExMDNjNjNkZWNhNWI1YTM5MzlkN2QwNTk5MiI6IjlhMDRjMjQxIjoiMzc5NmNmNTFiODcyNjYiOiIiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMzIChQPTAsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiMyI6Ijc1ZDU4MmRiNDNjZTliMTNhYjRiNmY3ZjE0MzQxMzMwIjoiNWE4YWE0ODVjMzE2ZTkiOiIiOjE2OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICM0IChQPTAsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiMyI6IjNhNjVlMDNhZjM3YjgxZDA1YWNjN2VjMWJjMzlkZWIwIjoiMzc5NmNmNTFiODcyNjYiOiIiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjNSAoUD0wLCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjMiOiI5MDE1NmYzZiI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjo0OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICM2IChQPTAsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiMyI6Ijg4OTA5MDE2IjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODIiOiIiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICM3IChQPTAsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQiOiJmYjA0ZGM1YTQ0YzZiYjAwMGYyNDQwZjUxNTQzNjRiNCI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjoxNjoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjOCAoUD0wLCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5ZWJmZGUyZDU0NjhiYTBhMzAzMWJkZTYyOWIxMWZkIjoiNTQ0NzA3NWJmNDJhNTliOTFmMDgwNjQ3MzhiMDE1YWIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MiI6IiI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICM5IChQPTI0LCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOWViZmRlMmQ1NDY4YmEwYTMwMzFiZGU2MjliMTFmZCI6ImE5MGU4ZWE0NDA4NWNlZDc5MWIyZmRiN2ZkNDRiNWNmMGJkN2QyNzcxODAyOWJiNzAzZTFmYTZiIjoiNWE4YWE0ODVjMzE2ZTkiOiIiOjQ6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzEwIChQPTI0LCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOWViZmRlMmQ1NDY4YmEwYTMwMzFiZGU2MjliMTFmZCI6IjUwYWFmZTA1NzhjMTE1YzRhOGUxMjZmZjdiM2NjYjY0ZGNlOGNjYWE4Y2VkYTY5ZjIzZTVkODFjIjoiMzFmOGZhMjU4MjdkNDgiOiIiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMxMSAoUD0yNCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5N2FmYjAyZmZiZDhmNjk5ZGFjYWU4NzA5NGQ1MjQzIjoiMjRhYjllZWIwZTU1MDhjYWU4MDA3NGYxMDcwZWUxODhhNjM3MTcxODYwODgxZjFmMmQ5YTNmYmMyMTA1OTViN2I4YjFiNDE1MjMxMTFhOGUiOiI1YThhYTQ4NWMzMTZlOSI6IiI6MTY6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzEyIChQPTI0LCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTk3YWZiMDJmZmJkOGY2OTlkYWNhZTg3MDk0ZDUyNDMiOiI3ZWJmZGE2ZmE1ZGExZGJmZmQ4MmRjMjliODc1Nzk4ZmJjZWY4YmEwMDg0ZmJkMjQ2M2FmNzQ3Y2M4OGEwMDFmYTk0ZTA2MDI5MGYyMDljNCI6IjMxZjhmYTI1ODI3ZDQ4IjoiIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzEzIChQPTI0LCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTk3YWZiMDJmZmJkOGY2OTlkYWNhZTg3MDk0ZDUyNDMiOiI0YTU1MDEzNGY5NDQ1NTk3OWVjNGJmODlhZDJiZDgwZDI1YTc3YWU5NGU0NTYxMzRhM2UxMzhiOSI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjo0OiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTciCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMxNCAoUD0yNCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5N2FmYjAyZmZiZDhmNjk5ZGFjYWU4NzA5NGQ1MjQzIjoiMTE4ZWM1M2RkMWJmYmU1MmQ1YjlmZTVkZmViZWNmMmVlNjc0ZWM5ODNlYWRhNjU0MDkxYTVhZTkiOiI0OTAwNDkxMmZkZDcyNjkyNzliMWYwNmE4OSI6IiI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzE1IChQPTI0LCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkwOTI5YTRiMGFjNjViMzUwYWQxNTkxNjExZmU0ODI5IjoiNGJmZTRlMzU3ODRmMGE2NWI1NDU0NzdlNWUyZjRiYWUwZTFlNmZhNzE3ZWFmMmNiNmE5YTk3MGI5YmViMmFjMWJkNGZkNjIxNjhmODM3OGEiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6IiI6MTY6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5NyIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzE2IChQPTI0LCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkwOTI5YTRiMGFjNjViMzUwYWQxNTkxNjExZmU0ODI5IjoiMGM1NmE1MDNhYTJjMTJlODc0NTBkNDVhN2I3MTRkYjk4MGZkMzQ4ZjMyN2MwMDY1YTY1NjY2MTQ0OTk0YmFkMGM4MTk1YmNiNGFkZTEzMzciOiI0OTAwNDkxMmZkZDcyNjkyNzliMWYwNmE4OSI6IiI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMxNyAoUD0wLCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4MjkiOiI3ODJlNDMxOCI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6NDoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMTggKFA9MCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkwOTI5YTRiMGFjNjViMzUwYWQxNTkxNjExZmU0ODI5IjoiYTA0ZjI3MGEiOiJhMjY1NDgwY2E4OGQ1ZiI6ImEyMjQ4YTg4MmVjYmY4NTBkYWY5MTkzM2EzODllNzhlODE2MjNkMjMzZGZkNDdiZjgzMjEzNjFhMzhmMTM4ZmUiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMxOSAoUD0wLCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZhNzk4ZDdjNWUxYTcyYjQzZTIwYWQ1YzdiMDg1NjdiIjoiNDFiNDc2MDEzZjQ1ZTRhNzgxZjI1M2E2ZjNiMWU1MzAiOiI1YThhYTQ4NWMzMTZlOSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMmVjMjJiMWEyNjhmODhlMmMiOjE2OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMyMCAoUD0wLCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZhNzk4ZDdjNWUxYTcyYjQzZTIwYWQ1YzdiMDg1NjdiIjoiZjlmMDE4ZmNkMTI1ODIyNjE2MDgzZmZmZWJjNGM4ZTYiOiJhMjY1NDgwY2E4OGQ1ZiI6ImEyMjQ4YTg4MmVjYmY4NTBkYWY5MTkzM2EzODllNzhlODE2MjNkMjMzZGZkNDdiZjgzMjEzNjFhMzhmMTM4ZmUiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMjEgKFA9MCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YTc5OGQ3YzVlMWE3MmI0M2UyMGFkNWM3YjA4NTY3YiI6IjlmNjlmMjRmIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjo0OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMyMiAoUD0wLCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZhNzk4ZDdjNWUxYTcyYjQzZTIwYWQ1YzdiMDg1NjdiIjoiZTE3YWZhYTQiOiI4NzM5YjRiZWExYTA5OWZlNTQ3NDk5Y2JjNiI6ImY2MTA3Njk2ZWRiMzMyYjJlYTA1OWQ4ODYwZmVlMjZiZTQyZTVlMTJlMWE0Zjc5YThkMGVhZmNlMWIyMjc4YTciOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMyMyAoUD0wLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MSI6IjE4NTlhYzM2YTQwYTZiMjhiMzQyNjYyNTM2Mjc3OTdhIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjoxNjoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMjQgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjlmZGNhNGFjNjRmZTdmMDE0ZGUwZjQzMDM5Yzc1NzEiOiJlZGY4YjQ2ZWI2OWFjMDA0NDExNjAxOWRlYzE4MzA3MiI6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2IjoiZjYxMDc2OTZlZGIzMzJiMmVhMDU5ZDg4NjBmZWUyNmJlNDJlNWUxMmUxYTRmNzlhOGQwZWFmY2UxYjIyNzhhNyI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMyNSAoUD0yNCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY5ZmRjYTRhYzY0ZmU3ZjAxNGRlMGY0MzAzOWM3NTcxIjoiNmJlMzE4NjBjYTI3MWVmNDQ4ZGU4ZjhkOGIzOTM0NmRhZjRiODFkN2U5MmQ2NWIzMzhmMTI1ZmEiOiI1YThhYTQ4NWMzMTZlOSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMmVjMjJiMWEyNjhmODhlMmMiOjQ6ImEyNjU0ODBjYTg4ZDVmNTM2ZGIwZGM2YWJjNDBmYWYwZDA1YmU3YTk2Njk3Nzc2OCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzI2IChQPTI0LCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjlmZGNhNGFjNjRmZTdmMDE0ZGUwZjQzMDM5Yzc1NzEiOiI0Y2M1N2E5OTI3YTZiYzQwMTQ0MTg3MGQzMTkzYmY4OWViZDE2M2Y1YzAxNTAxYzcyOGE2NmI2OSI6ImZkZDJkNmY1MDNjOTE1IjoiNWI5MjM5NGYyMWRkYzNhZDQ5ZDliMDg4MWI4MjlhNTkzNWNiM2E0ZDIzZTI5MmE2MmZiNjZiNWU3YWI3MDIwZSI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzI3IChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjIjoiYjM1MWFiOTZiMmU0NTUxNTI1NDU1OGQ1MjEyNjczZWU2Yzc3NmQ0MmRiY2EzYjUxMmNmM2EyMGI3ZmQ3YzQ5ZTZlNzliZWY0NzVjMjkwNmYiOiI1YThhYTQ4NWMzMTZlOSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMmVjMjJiMWEyNjhmODhlMmMiOjE2OiJhMjY1NDgwY2E4OGQ1ZjUzNmRiMGRjNmFiYzQwZmFmMGQwNWJlN2E5NjY5Nzc3NjgiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMyOCAoUD0yNCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhN2FhNjM1ZWE1MWIwYmIyMGEwOTJiZDU1NzNlNzI4YyI6ImRmMWE1Mjg1Y2FhNDFiNGJiNDdmNmU1Y2VjZWJhNGU4MjcyMTgyOGQ2ODQyN2EzMDgxZDE4Y2ExNDlkNjc2NmJmYWNjZWM4OGYxOTRlYjViIjoiZmRkMmQ2ZjUwM2M5MTUiOiI1YjkyMzk0ZjIxZGRjM2FkNDlkOWIwODgxYjgyOWE1OTM1Y2IzYTRkMjNlMjkyYTYyZmI2NmI1ZTdhYjcwMjBlIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzI5IChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjIjoiOTM0Zjg5MzgyNGU4ODBmNzQzZDE5NmIyMmQxZjM0MGE1MjYwODE1NTA4N2JkMjhhYzI1ZTUzMjkiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5N2E3ZWU2NDEwMTg0Yzc5ODIiOjQ6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2ZDFiMTNkODQ5YjgwODRjOWI2YWNjNSIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzMwIChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjIjoiZjQzYmE5ZDgzNGFkODVkZmFiM2YxYzBjMjdjMzQ0MWZlNGU0MTFhMzhhMjYxYTY1NTliM2IzZWUiOiIwODEyNzU3YWQwY2M0ZDE3YzRjZmU3YTY0MiI6ImVjNmM0NGE3ZTk0ZTUxYTNjYTZkZWUyMjkwOTgzOTE1NzVlYzcyMTNjODUyNjdmYmY3NDkyZmRiZWVlNjFiMTAiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMzMSAoUD0yNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjY1MTFmYjUxZmNmYTc1Y2I0YjQ0ZGE3NWE2ZTVhMGUiOiI1MDAzOGI1ZmRkMzY0ZWU3NDdiNzBkMDBiZDM2ODQwZWNlNGVhMTk5OTgxMjMzNzVjMGE0NThiZmNhZmEzYjI2MDlhZmUwZjgyNWNiZjUwMyI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3YTdlZTY0MTAxODRjNzk4MiI6MTY6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2ZDFiMTNkODQ5YjgwODRjOWI2YWNjNSIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzMyIChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNjUxMWZiNTFmY2ZhNzVjYjRiNDRkYTc1YTZlNWEwZSI6Ijc4ZWQ4ZmY2YjVhMTI1NWQwZmJkMGE3MTlhOWMyN2IwNTlmZjVmODNkMGM0OTYyYzM5MDA0MmJhOGJiNWY2Nzk4ZGFiMDFjNWFmYWQ3MzA2IjoiMDgxMjc1N2FkMGNjNGQxN2M0Y2ZlN2E2NDIiOiJlYzZjNDRhN2U5NGU1MWEzY2E2ZGVlMjI5MDk4MzkxNTc1ZWM3MjEzYzg1MjY3ZmJmNzQ5MmZkYmVlZTYxYjEwIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzEgKFA9MCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzk4YWQ3ZjM4YjJjN2U5NzBjOWI5NjVlYzg3YTA4MjA4Mzg0NzE4Zjc4MjA2YzZjIjoiOWQ0YjdmM2IiOiI1YThhYTQ4NWMzMTZlOSI6IiI6NDoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMiAoUD0wLCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjOThhZDdmMzhiMmM3ZTk3MGM5Yjk2NWVjODdhMDgyMDgzODQ3MThmNzgyMDZjNmMiOiI4MDc0NWRlOSI6IjM3OTZjZjUxYjg3MjY2IjoiIjo0OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMyAoUD0wLCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjNkM2FkMWJjY2Y5MjgyYTY1IjoiMTcyMjMwMzhmYTk5ZDUzNjgxY2ExYmVhYmU3OGQxYjQiOiI1YThhYTQ4NWMzMTZlOSI6IiI6MTY6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzQgKFA9MCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRiYjNjNGE0Zjg5M2FkOGM5YmRjODMzYzMyNWQ2MmIzZDNhZDFiY2NmOTI4MmE2NSI6ImQwZTFlZWVmNGQyYTI2NDUzNmJiMWMyYzFiZGU3YzM1IjoiMzc5NmNmNTFiODcyNjYiOiIiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjNSAoUD0wLCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjNkM2FkMWJjY2Y5MjgyYTY1IjoiZmU2OWVkODQiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6IiI6NDoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjNiAoUD0wLCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjNkM2FkMWJjY2Y5MjgyYTY1IjoiZGI3ZmZjODIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MiI6IiI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzcgKFA9MCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOWViZmRlMmQ1NDY4YmEwYTMwMzFiZGU2MjliMTFmZDQwOTRhZmNiMjA1MzkzZmEiOiIwYzY2YThlNTQ3ZWQ0ZjhjMmM5YTlhMWViNWQ0NTViOSI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjoxNjoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjOCAoUD0wLCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5ZWJmZGUyZDU0NjhiYTBhMzAzMWJkZTYyOWIxMWZkNDA5NGFmY2IyMDUzOTNmYSI6IjM4NzU3YjNhNjFhNGRjOTdjYTNhYjg4YmYxMjQwNjk1IjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODIiOiIiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjOSAoUD0yNCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQ0MDk0YWZjYjIwNTM5M2ZhIjoiNDExOTg2ZDA0ZDY0NjMxMDBiZmYwM2Y3ZDBiZGU3ZWEyYzM0ODg3ODQzNzgxMzhjZGRjOTNhNTQiOiI1YThhYTQ4NWMzMTZlOSI6IiI6NDoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMTAgKFA9MjQsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5ZWJmZGUyZDU0NjhiYTBhMzAzMWJkZTYyOWIxMWZkNDA5NGFmY2IyMDUzOTNmYSI6IjMyYjY0OWFiNTYxNjJlNTVkNDE0OGExMjkyZDZhMjI1YTk4OGViMTMwODI5ODI3M2I2ODg5MDM2IjoiMzFmOGZhMjU4MjdkNDgiOiIiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMxMSAoUD0yNCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5N2FmYjAyZmZiZDhmNjk5ZGFjYWU4NzA5NGQ1MjQzMjQ1NzZiOTk4NDRmNzVlMSI6ImNiYTRiNGFlYjg1ZjA0OTJmZDhkOTA1YzRhNmQ4MjMzMTM5ODMzMzczZWYxODhhOGM1YTVlYmVjZjdhYzg2MDdmZTQxMjE4OWU4M2Q5ZDIwIjoiNWE4YWE0ODVjMzE2ZTkiOiIiOjE2OiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMxMiAoUD0yNCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5N2FmYjAyZmZiZDhmNjk5ZGFjYWU4NzA5NGQ1MjQzMjQ1NzZiOTk4NDRmNzVlMSI6ImNhNjI3MTM3MjhiNWM5ZDY1MjUwNGIwYWU4ZmQ0ZmVlNWQyOTdlZTZhOGQxOWNiNmU2OTlmMTVmMTRkMzRkY2FmOWJhOGVkNGI4NzdjOTdkIjoiMzFmOGZhMjU4MjdkNDgiOiIiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMTMgKFA9MjQsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOTdhZmIwMmZmYmQ4ZjY5OWRhY2FlODcwOTRkNTI0MzI0NTc2Yjk5ODQ0Zjc1ZTEiOiIwNDI2NTNjNjc0ZWYyYTkwZjdmYjExZDMwODQ4ZTUzMGFlNTk0NzhmMTA1MTYzM2EzNGZhZDI3NyI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjo0OiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTciCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMxNCAoUD0yNCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5N2FmYjAyZmZiZDhmNjk5ZGFjYWU4NzA5NGQ1MjQzMjQ1NzZiOTk4NDRmNzVlMSI6IjE5MDJkOTc2OWE3YmEzZDMyNjhlMTI1NzM5NWM4YzJlNWY5OGVlZjI5NWRjYmZhNWEzNWRmNzc1IjoiNDkwMDQ5MTJmZGQ3MjY5Mjc5YjFmMDZhODkiOiIiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMxNSAoUD0yNCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOTdlMDM5NTZmNjA4M2U0NTEiOiJhNWI3ZDhjY2EyMDY5OTA4ZDFlZDg4ZTZhOWZlMmM5YmVkZTMxMzFkYWQ1NDY3MWVhN2FkZTMwYTA3ZDE4NTY5MmFiMGViZGY0Yzc4Y2Y3YSI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjoxNjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3IgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMTYgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4Mjk3ZTAzOTU2ZjYwODNlNDUxIjoiOWE5ODYxN2ZiOTdhMGRmZTQ2NmJlNjkyMjcyZGNkYWVjMWM1NDQzYTNiNTEzMTJlZjA0MmM4NjM2M2NjMDVhZmI5OGM2NmUxNmJlOGE0NDUiOiI0OTAwNDkxMmZkZDcyNjkyNzliMWYwNmE4OSI6IiI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMxNyAoUD0wLCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4Mjk3ZTAzOTU2ZjYwODNlNDUxIjoiMWQwODlhNWYiOiI1YThhYTQ4NWMzMTZlOSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMmVjMjJiMWEyNjhmODhlMmMiOjQ6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzE4IChQPTAsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOTdlMDM5NTZmNjA4M2U0NTEiOiIyZjQ2MDIyYSI6ImEyNjU0ODBjYTg4ZDVmIjoiYTIyNDhhODgyZWNiZjg1MGRhZjkxOTMzYTM4OWU3OGU4MTYyM2QyMzNkZmQ0N2JmODMyMTM2MWEzOGYxMzhmZSI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzE5IChQPTAsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IxMmFiNzQ0YjYxYzA3MGUyIjoiNTI4MGEyMTM3ZmVlM2RlZWZjZmU5YjYzYTExOTlmYjMiOiI1YThhYTQ4NWMzMTZlOSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMmVjMjJiMWEyNjhmODhlMmMiOjE2OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMyMCAoUD0wLCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZhNzk4ZDdjNWUxYTcyYjQzZTIwYWQ1YzdiMDg1NjdiMTJhYjc0NGI2MWMwNzBlMiI6ImQ0MGE3MzE4YzVmMmQ4MmY4MzhjMGJlZWVmZTBkNTk4IjoiYTI2NTQ4MGNhODhkNWYiOiJhMjI0OGE4ODJlY2JmODUwZGFmOTE5MzNhMzg5ZTc4ZTgxNjIzZDIzM2RmZDQ3YmY4MzIxMzYxYTM4ZjEzOGZlIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzIxIChQPTAsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IxMmFiNzQ0YjYxYzA3MGUyIjoiNWUwZWFlYmQiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5N2E3ZWU2NDEwMTg0Yzc5ODIiOjQ6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzIyIChQPTAsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IxMmFiNzQ0YjYxYzA3MGUyIjoiNzFiN2ZjMzMiOiI4NzM5YjRiZWExYTA5OWZlNTQ3NDk5Y2JjNiI6ImY2MTA3Njk2ZWRiMzMyYjJlYTA1OWQ4ODYwZmVlMjZiZTQyZTVlMTJlMWE0Zjc5YThkMGVhZmNlMWIyMjc4YTciOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMyMyAoUD0wLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MTk0ZDU0NGNlNWQxNWVlZDQiOiJkMDdjY2Y5ZmRjM2QzM2FhOTRjZGEzZDIzMGRhNzA3YyI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3YTdlZTY0MTAxODRjNzk4MiI6MTY6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzI0IChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY5ZmRjYTRhYzY0ZmU3ZjAxNGRlMGY0MzAzOWM3NTcxOTRkNTQ0Y2U1ZDE1ZWVkNCI6IjY1ZmUzMmI2NDlkYzMyOGM5ZjUzMTU4NDg5N2U4NWIzIjoiODczOWI0YmVhMWEwOTlmZTU0NzQ5OWNiYzYiOiJmNjEwNzY5NmVkYjMzMmIyZWEwNTlkODg2MGZlZTI2YmU0MmU1ZTEyZTFhNGY3OWE4ZDBlYWZjZTFiMjI3OGE3IjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzI1IChQPTI0LCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjlmZGNhNGFjNjRmZTdmMDE0ZGUwZjQzMDM5Yzc1NzE5NGQ1NDRjZTVkMTVlZWQ0IjoiOWY2Y2E0YWY5YjE1OTE0OGM4ODlhNjU4NGQxMTgzZWEyNmUyNjE0ODc0YjA1MDQ1NzVkZWE4ZDEiOiI1YThhYTQ4NWMzMTZlOSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMmVjMjJiMWEyNjhmODhlMmMiOjQ6ImEyNjU0ODBjYTg4ZDVmNTM2ZGIwZGM2YWJjNDBmYWYwZDA1YmU3YTk2Njk3Nzc2OCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzI2IChQPTI0LCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjlmZGNhNGFjNjRmZTdmMDE0ZGUwZjQzMDM5Yzc1NzE5NGQ1NDRjZTVkMTVlZWQ0IjoiODRkODIxMmU5Y2ZjMjEyMTI1MmJhYTNiMDY1YjFlZGNmNTA0OTdiOTU5NGRiMWViZDc5NjU4MjUiOiJmZGQyZDZmNTAzYzkxNSI6IjViOTIzOTRmMjFkZGMzYWQ0OWQ5YjA4ODFiODI5YTU5MzVjYjNhNGQyM2UyOTJhNjJmYjY2YjVlN2FiNzAyMGUiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMyNyAoUD0yNCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhN2FhNjM1ZWE1MWIwYmIyMGEwOTJiZDU1NzNlNzI4Y2NkNGIzZThjZGQyYWIzM2QiOiI2YWFiNjRjNDc4NzU5OWQ4ZjIxMzQ0NmJlYWRiMTZlMDhkYmE2MGU5N2Y1NmRiZDE0ZDFkOTgwZDZmZTBmYjQ0YjQyMTk5MjY2MmI5Nzk3NSI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6MTY6ImEyNjU0ODBjYTg4ZDVmNTM2ZGIwZGM2YWJjNDBmYWYwZDA1YmU3YTk2Njk3Nzc2OCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzI4IChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjY2Q0YjNlOGNkZDJhYjMzZCI6IjQ5ODBiMmVlNDliMWFhZjM5MzE3NWY1YWI5YmFlOTVlYzc5MDQ1NTdkZmEyMDY2MDNjNTFkMzZjODI2ZjAxMzg0MTAwODg2MTk4YTdmNmEzIjoiZmRkMmQ2ZjUwM2M5MTUiOiI1YjkyMzk0ZjIxZGRjM2FkNDlkOWIwODgxYjgyOWE1OTM1Y2IzYTRkMjNlMjkyYTYyZmI2NmI1ZTdhYjcwMjBlIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzI5IChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjY2Q0YjNlOGNkZDJhYjMzZCI6IjE2ZTU0M2QwZTIwNjE1ZmYwZGYxNWFjZDk5MjdkZGZlNDA2NjhhNTRiYjg1NGNjY2MyNWU5ZmNlIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjo0OiI4NzM5YjRiZWExYTA5OWZlNTQ3NDk5Y2JjNmQxYjEzZDg0OWI4MDg0YzliNmFjYzUiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMzMCAoUD0yNCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhN2FhNjM1ZWE1MWIwYmIyMGEwOTJiZDU1NzNlNzI4Y2NkNGIzZThjZGQyYWIzM2QiOiJkZjM1YjEwOWNhZjY5MDY1NmFlMjc4YmJkOGY4YmJhNjg3YTJjZTExYjEwNWRhZTk4ZWNlZGIzZSI6IjA4MTI3NTdhZDBjYzRkMTdjNGNmZTdhNjQyIjoiZWM2YzQ0YTdlOTRlNTFhM2NhNmRlZTIyOTA5ODM5MTU3NWVjNzIxM2M4NTI2N2ZiZjc0OTJmZGJlZWU2MWIxMCI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzMxIChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNjUxMWZiNTFmY2ZhNzVjYjRiNDRkYTc1YTZlNWEwZWI4ZDljOGYzYjkwNmY4ODYiOiJjNWIwYjJlZjE3NDk4YzU1NzBlYjMzNWRmNDU4ODAzMjk1OGJhM2Q2OWJmNmYzMTc4NDY0YTZmN2ZhMmI3Njc0NGU4ZThkOTU2OTFjZWNiOCI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3YTdlZTY0MTAxODRjNzk4MiI6MTY6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2ZDFiMTNkODQ5YjgwODRjOWI2YWNjNSIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzMyIChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNjUxMWZiNTFmY2ZhNzVjYjRiNDRkYTc1YTZlNWEwZWI4ZDljOGYzYjkwNmY4ODYiOiJkMWYwNTE4OTI5ZjRhZTJmMDU0M2RlMmE3ZGZlNGJiMDExMGJiMzA1N2U1MjRhMWMwNmJkNmRjMmU2YmNjMzQzNmNmZmI5NjlhZTkwMDM4OCI6IjA4MTI3NTdhZDBjYzRkMTdjNGNmZTdhNjQyIjoiZWM2YzQ0YTdlOTRlNTFhM2NhNmRlZTIyOTA5ODM5MTU3NWVjNzIxM2M4NTI2N2ZiZjc0OTJmZGJlZWU2MWIxMCI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMxIChQPTAsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVkYTMyZjc1MTQ1NmUzMzE5NWYxZjQ5OWNmMmRjN2M5N2VhMTI3YjZkNDg4ZjIxMWNjYzUxMjZmYmIyNGFmYTYiOiI0NjljOTBiYiI6ImE1NDQyMThkYWRkM2MxIjoiIjo0OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMyIChQPTAsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVkYTMyZjc1MTQ1NmUzMzE5NWYxZjQ5OWNmMmRjN2M5N2VhMTI3YjZkNDg4ZjIxMWNjYzUxMjZmYmIyNGFmYTYiOiI0NmE5MDhlZCI6ImQzZDU0MjRlMjBmYmVjIjoiIjo0OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMyAoUD0wLCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTFiOGE5MjdhOTVlZmU5NDY1NjY3N2I2OTI2NjIwMDAyNzhiNDQxYzc5ZTg3OWRkNWMwZGRjNzU4YmRjOWVlOCI6IjgyMDdlYjE0ZDMzODU1YTUyYWNjZWVkMTdkYmNiZjZlIjoiYTU0NDIxOGRhZGQzYzEiOiIiOjE2OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICM0IChQPTAsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlMWI4YTkyN2E5NWVmZTk0NjU2Njc3YjY5MjY2MjAwMDI3OGI0NDFjNzllODc5ZGQ1YzBkZGM3NThiZGM5ZWU4IjoiNjBmOGUxMjdjYjRkMzBkYjZkZjA2MjIxNThjZDkzMWQiOiJkM2Q1NDI0ZTIwZmJlYyI6IiI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICM1IChQPTAsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlMWI4YTkyN2E5NWVmZTk0NjU2Njc3YjY5MjY2MjAwMDI3OGI0NDFjNzllODc5ZGQ1YzBkZGM3NThiZGM5ZWU4IjoiOGExOWExMzMiOiJhNTQ0MjE4ZGFkZDNjMTA1ODNkYjQ5Y2YzOSI6IiI6NDoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjNiAoUD0wLCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTFiOGE5MjdhOTVlZmU5NDY1NjY3N2I2OTI2NjIwMDAyNzhiNDQxYzc5ZTg3OWRkNWMwZGRjNzU4YmRjOWVlOCI6IjJlMzE3ZjFiIjoiM2MwZTI4MTVkMzdkODQ0ZjdhYzI0MGJhOWQiOiIiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICM3IChQPTAsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWYwNjM2MzllNjZjMjg0MDgzYzVjZjcyYjcwZDhiYzI3N2Y1OTc4ZTgwZDkzMjJkOTlmMmZkYzcxOGNkYTU2OSI6Ijk3ZTFhOGRkNDI1OWNjZDJlNDMxZTA1N2IwMzk3ZmNmIjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIiOjE2OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICM4IChQPTAsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWYwNjM2MzllNjZjMjg0MDgzYzVjZjcyYjcwZDhiYzI3N2Y1OTc4ZTgwZDkzMjJkOTlmMmZkYzcxOGNkYTU2OSI6IjVhOTU5NmM1MTFlYTZhODY3MWFkZWZjNGYyMTU3ZDhiIjoiM2MwZTI4MTVkMzdkODQ0ZjdhYzI0MGJhOWQiOiIiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjOSAoUD0yNCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWYwNjM2MzllNjZjMjg0MDgzYzVjZjcyYjcwZDhiYzI3N2Y1OTc4ZTgwZDkzMjJkOTlmMmZkYzcxOGNkYTU2OSI6IjY0YTEzNDE2Nzk5NzJkYzU4NjlmY2Y2OWIxOWQ1YzVlYTUwYWEwYjVlOTg1ZjViNzIyYWE4ZDU5IjoiYTU0NDIxOGRhZGQzYzEiOiIiOjQ6ImQzZDU0MjRlMjBmYmVjNDNhZTQ5NTM1M2VkODMwMjcxNTE1YWIxMDRmODg2MGM5OCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzEwIChQPTI0LCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZjA2MzYzOWU2NmMyODQwODNjNWNmNzJiNzBkOGJjMjc3ZjU5NzhlODBkOTMyMmQ5OWYyZmRjNzE4Y2RhNTY5IjoiYzViN2Y4MDJiZmZjNDk4YzE2MjZlMzc3NGYxZDlmOTQwNDVkZmQ4ZTFhMTBhMjAyNzdkMDBhNzUiOiJiZmNkYThiNWEyZDBkMiI6IiI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzExIChQPTI0LCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjcwNzlkZmEzYjVjN2IwNTYzNDdkN2U0MzdiY2RlZDY4M2FiZDZlMmM5ZTA2OWQzMzMyODQwODJjYmI1ZDQ1MyI6ImJjNTFjMzkyNWE5NjBlNzczMjUzM2U0ZWYzYTRmNjllZTY4MjZkZTk1MmJjYjBmZDM3NGYzYmI2ZGI4Mzc3ZWJmYzc5Njc0ODU4YzRmMzA1IjoiYTU0NDIxOGRhZGQzYzEiOiIiOjE2OiJkM2Q1NDI0ZTIwZmJlYzQzYWU0OTUzNTNlZDgzMDI3MTUxNWFiMTA0Zjg4NjBjOTgiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMxMiAoUD0yNCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY3MDc5ZGZhM2I1YzdiMDU2MzQ3ZDdlNDM3YmNkZWQ2ODNhYmQ2ZTJjOWUwNjlkMzMzMjg0MDgyY2JiNWQ0NTMiOiJhZmExZmE4ZThhNzBlMjZiMDIxNjExNTA1NTZkNjA0MTAxZmRmNDIzZjMzMmMzMzYzMjc1ZjJhNDkwN2Q1MWI3MzRmZTcyMzhjZWJiZDQ4ZiI6ImJmY2RhOGI1YTJkMGQyIjoiIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzEzIChQPTI0LCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjcwNzlkZmEzYjVjN2IwNTYzNDdkN2U0MzdiY2RlZDY4M2FiZDZlMmM5ZTA2OWQzMzMyODQwODJjYmI1ZDQ1MyI6IjYzZTAwZDMwZTRiMDhmZDJhMWNjOGQ3MGZhYjMyN2IyMzY4ZTc3YTkzYmU0ZjQxMjNkMTRmYjNmIjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIiOjQ6IjNjMGUyODE1ZDM3ZDg0NGY3YWMyNDBiYTlkNmUzYTBiMmE4NmY3MDZlODg1OTU5ZSIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzE0IChQPTI0LCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjcwNzlkZmEzYjVjN2IwNTYzNDdkN2U0MzdiY2RlZDY4M2FiZDZlMmM5ZTA2OWQzMzMyODQwODJjYmI1ZDQ1MyI6ImJiNTQyNWIzODY5Yjc2ODU2ZWM1OGUzOTg4NmZiNmY2ZjJhYzEzZmU0NGNiMTMyZDhkMGMwMDk5IjoiODk0ZGNhYTYxMDA4ZWI4ZmIwNTJjNjBkNDEiOiIiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMxNSAoUD0yNCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYjBlOGRmNjNjNTdmMDVkOWFjNDU3NTc1ZWE3NjQ1MjRiODYxMGFlNTE2NGU2MjE1ZjQyNmY1YTdhZTZlZGU0IjoiZjAwNTBhZDE2MzkyMDIxYTNmNDAyMDdiZWQzNTIxZmIxZTlmODA4ZjQ5ODMwYzQyM2E1NzhkMTc5OTAyZjkxMmY5ZWExYWZiY2UxMTIwYjMiOiJhNTQ0MjE4ZGFkZDNjMTA1ODNkYjQ5Y2YzOSI6IiI6MTY6IjNjMGUyODE1ZDM3ZDg0NGY3YWMyNDBiYTlkNmUzYTBiMmE4NmY3MDZlODg1OTU5ZSIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzE2IChQPTI0LCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFiMGU4ZGY2M2M1N2YwNWQ5YWM0NTc1NzVlYTc2NDUyNGI4NjEwYWU1MTY0ZTYyMTVmNDI2ZjVhN2FlNmVkZTQiOiJjNDA4MTkwZDBmYmY1MDM0ZjgzYjI0YThlZDk2NTczMzFhN2NlMTQxZGU0ZmFlNzY5MDg0NjA3YjgzYmQwNmU2NDQyZWFjOGRhY2Y1ODNjYyI6Ijg5NGRjYWE2MTAwOGViOGZiMDUyYzYwZDQxIjoiIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzE3IChQPTAsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYjBlOGRmNjNjNTdmMDVkOWFjNDU3NTc1ZWE3NjQ1MjRiODYxMGFlNTE2NGU2MjE1ZjQyNmY1YTdhZTZlZGU0IjoiOTJkMDBmYmUiOiJhNTQ0MjE4ZGFkZDNjMSI6ImQzZDU0MjRlMjBmYmVjNDNhZTQ5NTM1M2VkODMwMjcxNTE1YWIxMDRmODg2MGM5ODhkMTViNmQzNmMwMzhlYWIiOjQ6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzE4IChQPTAsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYjBlOGRmNjNjNTdmMDVkOWFjNDU3NTc1ZWE3NjQ1MjRiODYxMGFlNTE2NGU2MjE1ZjQyNmY1YTdhZTZlZGU0IjoiOTE0M2U1YzQiOiI3OGM0NmUzMjQ5Y2EyOCI6IjIzMmU5NTdjNjVmZmExMTk4OGU4MzBkNDYxN2Q1MDBmMWM0YTM1YzEyMjFmMzk2YzQxYWIyMTRmMDc0Y2EyZGMiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMxOSAoUD0wLCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE0YmMxMGIxYTYyYzk2ZDQ1OWZiYWYzYTVhYTNmYWNlNzMxM2JiOWUxMjUzZTY5NmY5NmE3YThlMzY4MDEwODgiOiI5M2FmMTFhMDgzNzllYjM3YTE2YWEyODM3ZjA5ZDY5ZCI6ImE1NDQyMThkYWRkM2MxIjoiZDNkNTQyNGUyMGZiZWM0M2FlNDk1MzUzZWQ4MzAyNzE1MTVhYjEwNGY4ODYwYzk4OGQxNWI2ZDM2YzAzOGVhYiI6MTY6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzIwIChQPTAsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTRiYzEwYjFhNjJjOTZkNDU5ZmJhZjNhNWFhM2ZhY2U3MzEzYmI5ZTEyNTNlNjk2Zjk2YTdhOGUzNjgwMTA4OCI6ImQxOWIwYzE0ZWM2ODZhNzk2MWNhN2MzODZkMTI1YTY1IjoiNzhjNDZlMzI0OWNhMjgiOiIyMzJlOTU3YzY1ZmZhMTE5ODhlODMwZDQ2MTdkNTAwZjFjNGEzNWMxMjIxZjM5NmM0MWFiMjE0ZjA3NGNhMmRjIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzIxIChQPTAsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTRiYzEwYjFhNjJjOTZkNDU5ZmJhZjNhNWFhM2ZhY2U3MzEzYmI5ZTEyNTNlNjk2Zjk2YTdhOGUzNjgwMTA4OCI6Ijg2NmQ0MjI3IjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZDZlM2EwYjJhODZmNzA2ZTg4NTk1OWUwOWExMDA1ZTAyNGY2OTA3Ijo0OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMyMiAoUD0wLCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE0YmMxMGIxYTYyYzk2ZDQ1OWZiYWYzYTVhYTNmYWNlNzMxM2JiOWUxMjUzZTY5NmY5NmE3YThlMzY4MDEwODgiOiI5NGNiMTEyNyI6ImU4ZGU5NzBmNmVlOGU4MGVkZTkzMzU4MWI1IjoiODlmOGIwNjhkMzRmNTZiYzQ5ZDgzOWQ4ZTQ3YjM0N2U2ZGFlNzM3YjkwM2IyNzg2MzI0NDdlNmMwNDg1ZDI2YSI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzIzIChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhjNWNmMzQ1N2ZmMjIyMjhjMzljMDUxYzRlMDVlZDQwOTM2NTdlYjMwM2Y4NTlhOWQ0YjBmOGJlMDEyN2Q4OGEiOiI4NjdiMGQ4N2NmNmUwZjcxODIwMGE5N2I0ZjZkNWFkNSI6ImE1NDQyMThkYWRkM2MxMDU4M2RiNDljZjM5IjoiM2MwZTI4MTVkMzdkODQ0ZjdhYzI0MGJhOWQ2ZTNhMGIyYTg2ZjcwNmU4ODU5NTllMDlhMTAwNWUwMjRmNjkwNyI6MTY6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzI0IChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhjNWNmMzQ1N2ZmMjIyMjhjMzljMDUxYzRlMDVlZDQwOTM2NTdlYjMwM2Y4NTlhOWQ0YjBmOGJlMDEyN2Q4OGEiOiI2NzdhMDQwZDQ2ZWUzZjJiNzgzODI3M2JkYWQxNGYxNiI6ImU4ZGU5NzBmNmVlOGU4MGVkZTkzMzU4MWI1IjoiODlmOGIwNjhkMzRmNTZiYzQ5ZDgzOWQ4ZTQ3YjM0N2U2ZGFlNzM3YjkwM2IyNzg2MzI0NDdlNmMwNDg1ZDI2YSI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMyNSAoUD0yNCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhjNWNmMzQ1N2ZmMjIyMjhjMzljMDUxYzRlMDVlZDQwOTM2NTdlYjMwM2Y4NTlhOWQ0YjBmOGJlMDEyN2Q4OGEiOiJjMmZlMTI2NTgxMzlmNWQwZGQyMmNhZGYyZTkwMTY5NWI1NzkzMDJhNzJmYzU2MDgzZWJjNzcyMCI6ImE1NDQyMThkYWRkM2MxIjoiZDNkNTQyNGUyMGZiZWM0M2FlNDk1MzUzZWQ4MzAyNzE1MTVhYjEwNGY4ODYwYzk4OGQxNWI2ZDM2YzAzOGVhYiI6NDoiNzhjNDZlMzI0OWNhMjhlMWVmMDUzMWQ4MGZkMzdjMTI0ZDlhZWNiN2JlNjY2OGUzIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMjYgKFA9MjQsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4YzVjZjM0NTdmZjIyMjI4YzM5YzA1MWM0ZTA1ZWQ0MDkzNjU3ZWIzMDNmODU5YTlkNGIwZjhiZTAxMjdkODhhIjoiOTQ3NDhiYTgxMjI5ZTUzYzM4NTgzYTg1NjRiMjNlYmJhZmM2ZjZlZmRmNGMyYTgxYzQ0ZGIyYzkiOiI2YmEwMDRmZDE3Njc5MSI6IjVhMDUzYjJhMWJiODdlODVkNTY1MjdiZmNkY2QzZWNhZmI5OTFiYjEwZTRjODYyYmIwNzUxYzcwMGEyOWY1NGIiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMyNyAoUD0yNCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MDUzMzRlMzBmNTNkZDJmOTJkMTkwZDJjMTQzN2M4NzcyZjk0MGM1NWFhMzVlNTYyMjE0ZWQ0NWJkNDU4ZmZlIjoiMzM0MTE2OGViOGM0ODQ2OGM0MTQzNDdmYjA4ZjcxZDIwODZmN2MyZDFiZDU4MWNlMWFjNjhiZDQyZjVlYzdmYTdlMDY4Y2MwZWNkNzljMmEiOiJhNTQ0MjE4ZGFkZDNjMSI6ImQzZDU0MjRlMjBmYmVjNDNhZTQ5NTM1M2VkODMwMjcxNTE1YWIxMDRmODg2MGM5ODhkMTViNmQzNmMwMzhlYWIiOjE2OiI3OGM0NmUzMjQ5Y2EyOGUxZWYwNTMxZDgwZmQzN2MxMjRkOWFlY2I3YmU2NjY4ZTMiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMyOCAoUD0yNCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MDUzMzRlMzBmNTNkZDJmOTJkMTkwZDJjMTQzN2M4NzcyZjk0MGM1NWFhMzVlNTYyMjE0ZWQ0NWJkNDU4ZmZlIjoiZDU0M2FjZGE3MTJiODk4Y2JiMjdiOGY1OThiMmU0NDM4Y2U1ODdhODM2ZTI3ODUxNDdjMzMzOGEyNDAwODA5ZTczOWI2M2JhODIyN2QyZjkiOiI2YmEwMDRmZDE3Njc5MSI6IjVhMDUzYjJhMWJiODdlODVkNTY1MjdiZmNkY2QzZWNhZmI5OTFiYjEwZTRjODYyYmIwNzUxYzcwMGEyOWY1NGIiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMjkgKFA9MjQsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzA1MzM0ZTMwZjUzZGQyZjkyZDE5MGQyYzE0MzdjODc3MmY5NDBjNTVhYTM1ZTU2MjIxNGVkNDViZDQ1OGZmZSI6ImMwZWE0MDBiNTk5NTYxZTc5MDViOTkyNjJiNDU2NWQ1YzNkYzQ5ZmFkODRkN2M2OWVmODkxMzM5IjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZDZlM2EwYjJhODZmNzA2ZTg4NTk1OWUwOWExMDA1ZTAyNGY2OTA3Ijo0OiJlOGRlOTcwZjZlZThlODBlZGU5MzM1ODFiNWJjZjRkODM3ZTJiNzJiYWE4YjAwYzMiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMzMCAoUD0yNCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MDUzMzRlMzBmNTNkZDJmOTJkMTkwZDJjMTQzN2M4NzcyZjk0MGM1NWFhMzVlNTYyMjE0ZWQ0NWJkNDU4ZmZlIjoiNjA4NzFlMDNlYTBlYjk2ODUzNmM5OWY5MjZlYTI0ZWY0M2Q0MTI3MmFkOWZiN2Y2M2Q0ODg2MjMiOiI4ZmE1MDFjNWRkOWFjOWI4NjgxNDRjOWZhNSI6IjViYjQwZTNiYjcyYjQ1MDkzMjRhN2VkYzg1MmY3MjUzNWYxZjYyODMxNTZlNjNmNjk1OWZmYWYzOWRjZGU4MDAiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMzMSAoUD0yNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzE0YTIwMmY4MzZmOWYyNTdlMjJkOGMxMTc1NzgzMmFlNTEzMWQzNTdhNzJkZjg4ZjNlZmYwZmZjZWUwZGE0ZSI6IjhkMzRjZGNhMzdjZTc3YmU2OGY2NWJhZjMzODJlMzFlZmE2OTNlNjNmOTE0YTc4MTM2N2YzMGYyZWFhZDhjMDYzY2E1MDc5NWFjZDkwMjAzIjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZDZlM2EwYjJhODZmNzA2ZTg4NTk1OWUwOWExMDA1ZTAyNGY2OTA3IjoxNjoiZThkZTk3MGY2ZWU4ZTgwZWRlOTMzNTgxYjViY2Y0ZDgzN2UyYjcyYmFhOGIwMGMzIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMzIgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMxNGEyMDJmODM2ZjlmMjU3ZTIyZDhjMTE3NTc4MzJhZTUxMzFkMzU3YTcyZGY4OGYzZWZmMGZmY2VlMGRhNGUiOiI1MTZjMDA5NWNjM2Q4NWZkNTVlNDhkYTE3YzU5MmUwYzcwMTRiOWRhYWZiODJiZGM0YjQxMDk2ZGZkYmU5Y2MxYWI2MTBmOGYzZTAzOGQxNiI6IjhmYTUwMWM1ZGQ5YWM5Yjg2ODE0NGM5ZmE1IjoiNWJiNDBlM2JiNzJiNDUwOTMyNGE3ZWRjODUyZjcyNTM1ZjFmNjI4MzE1NmU2M2Y2OTU5ZmZhZjM5ZGNkZTgwMCI6MTY6IkZBSUwiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRSI6IjAwMDAwMDAzMDIwMTAwQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IkJBNzM3MTg1RTcxOTMxMDQ5MkYzOEE1RjEyNTFEQTU1RkFGQkM5NDk4NDhBMERGQ0FFQ0U3NDZCM0RCOUFEIgorCitDQ00tQ2FtZWxsaWEgZW5jcnlwdCBhbmQgdGFnIFJGQyA1NTI4ICMyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRiI6IjAwMDAwMDA0MDMwMjAxQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IjVEMjU2NEJGOEVBRkUxRDk5NTI2RUMwMTZEMUJGMDQyNENGQkQyQ0Q2Mjg0OEYzMzYwQjIyOTVERjI0MjgzRTgiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGMjAiOiIwMDAwMDAwNTA0MDMwMkEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiI4MUY2NjNENkM3Nzg3ODE3RjkyMDM2MDhCOTgyQUQxNURDMkJCRDg3RDc1NkY3OTIwNEY1NTFENjY4MkYyM0FBNDYiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUiOiIwMDAwMDAwNjA1MDQwM0EwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQiI6IkNBRUYxRTgyNzIxMUIwOEY3QkQ5MEYwOEM3NzI4OEMwNzBBNEEwOEIzQTkzM0E2M0U0OTdBMCIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjNQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGIjoiMDAwMDAwMDcwNjA1MDRBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiIyQUQzQkFEOTRGQzUyRTkyQkU0MzhFODI3QzEwMjNCOTZBOEE3NzI1OEZBMTdCQTdGMzMxREIwOSIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjNgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGMjAiOiIwMDAwMDAwODA3MDYwNUEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQiI6IkZFQTU0ODBCQTUzRkE4RDNDMzQ0MjJBQUNFNERFNjdGRkEzQkI3M0JBQkFCMzZBMUVFNEZFMEZFMjgiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRSI6IjAwMDAwMDA5MDgwNzA2QTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IjU0NTMyMDI2RTU0QzExOUE4RDM2RDlFQzZFMUVEOTc0MTZDODcwOEM0QjVDMkNBQ0FGQTNCQ0NGN0E0RUJGOTU3MyIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjOAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYiOiIwMDAwMDAwQTA5MDgwN0EwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiI4QUQxOUIwMDFBODdEMTQ4RjREOTJCRUYzNDUyNUNDQ0UzQTYzQzY1MTJBNkY1NzU3Mzg4RTQ5MTNFRjE0NzAxRjQ0MSIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjOQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCI6IjAwMDAwMDBCMEEwOTA4QTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IjVEQjA4RDYyNDA3RTZFMzFENjBGOUNBMkM2MDQ3NDIxOUFDMEJFNTBDMEQ0QTU3Nzg3OTRENkUyMzBDRDI1QzlGRUJGODciCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzEwCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFIjoiMDAwMDAwMEMwQjBBMDlBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiJEQjExOENDRUMxQjg3NjFDODc3Q0Q4OTYzQTY3RDZGM0JCQkM1Q0QwOTI5OUVCMTFGMzEyRjIzMjM3IgorCitDQ00tQ2FtZWxsaWEgZW5jcnlwdCBhbmQgdGFnIFJGQyA1NTI4ICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGIjoiMDAwMDAwMEQwQzBCMEFBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiI3Q0M4M0Q4REM0OTEwMzUyNUI0ODNEQzVDQTdFQTlBQjgxMkI3MDU2MDc5REFGRkFEQTE2Q0NDRjJDNEUiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzEyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCI6IjAwMDAwMDBFMEQwQzBCQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCIjoiMkNEMzVCODgyMEQyM0U3QUEzNTFCMEU5MkZDNzkzNjcyMzhCMkNDNzQ4Q0JCOTRDMjk0Nzc5M0Q2NEFGNzUiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzEzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IkM2QjVGM0U2Q0EyMzExQUVGNzQ3MkIyMDNFNzM1RUE1NjFBREIxN0Q1NkM1QTMiOiIwMEE5NzAxMTBFMTkyN0IxNjBCNkEzMUMxQyI6IjZCN0Y0NjQ1MDdGQUU0OTYiOiJBNDM1RDcyNzM0OERERDIyOTA3RjdFQjhGNUZEQkI0RDkzOURBNjUyNERCNEY2NDU1OEMwMkQyNUIxMjdFRSIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMDFGNkNFNjc2NEM1NzQ0ODNCQjAyRTZCQkYxRTBBQkQyNkEyMjU3MkI0RDgwRUU3IjoiMDA4M0NEOENFMENCNDJCMTYwQjZBMzFDMUMiOiI5ODY2MDVCNDNERjE1REU3IjoiOEFFMDUyNTA4RkJFQ0E5MzJFMzQ2RjA1RTBEQzBERkJDRjkzOUVBRkZBM0U1ODdDODY3RDZFMUM0ODcwMzgwNiIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMTUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiQ0RGMUQ4NDA2RkMyRTkwMTQ5NTM4OTcwMDVGQkZCOEJBNTcyNzZGOTI0MDQ2MDhFMDgiOiIwMDVGNTQ5NTBCMThGMkIxNjBCNkEzMUMxQyI6IjQ4RjJFN0UxQTc2NzFBNTEiOiIwOEI2N0VFMjFDOEJGMjZFNDczRTQwODU5OUU5QzA4MzZENkFGMEJCMThERjU1NDY2Q0E4MDg3OEE3OTA0NzZERTUiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzE2CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IkIwMDVEQ0ZBMEI1OTE4MTQyNkE5NjE2ODVBOTkzRDhDNDMxODVCIjoiMDBFQzYwMDg2MzMxOUFCMTYwQjZBMzFDMUMiOiJERTk3REYzQjhDQkQ2RDhFNTAzMERBNEMiOiI2M0I3OEI0OTY3QjE5RURCQjczM0NEMTExNEY2NEVCMjI2MDg5MzY4QzM1NDgyOEQ5NTBDQzUiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzE3CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjJFMjAyMTEyOTgxMDVGMTI5RDVFRDk1QjkzRjcyRDMwQjJGQUNDRDciOiIwMDYwQ0ZGMUEzMUVBMUIxNjBCNkEzMUMxQyI6IkE1RUU5M0U0NTdERjA1NDY2RTc4MkRDRiI6IjBCQzZCQkUyQThCOTA5RjQ2MjlFRTZEQzE0OERBNDQ0MTBFMThBRjQzMTQ3MzgzMjc2RjY2QTlGIgorCitDQ00tQ2FtZWxsaWEgZW5jcnlwdCBhbmQgdGFnIFJGQyA1NTI4ICMxOAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiRDc1QzI3NzgwNzhDQTkzRDk3MUY5NkZERTcyMEY0Q0QiOiIyNjQ1OTQxRTc1NjMyRDM0OTFBRjBGQzBDOTg3NkMzQkU0QUE3NDY4QzkiOiIwMDBGODVDRDk5NUM5N0IxNjBCNkEzMUMxQyI6IjI0QUExQkY5QTVDRDg3NjE4MkEyNTA3NCI6IjIyMkFENjMyRkEzMUQ2QUY5NzBDMzQ1RjdFNzdDQTNCRDBEQzI1QjM0MEExQTNEMzFGOEQ0QjQ0QjciCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzE5CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjA3MDEzNUE2NDM3QzlEQjEyMENENjFEOEY2QzM5QzNFQTEyNUZEOTVBMEQyM0QiOiIwMEMyOUIyQ0FBQzRDREIxNjBCNkEzMUMxQyI6IjY5MTk0NkI5Q0EwN0JFODciOiIwNUI4RTFCOUM0OUNGRDU2Q0YxMzBBQTYyNTFEQzJFQ0MwNkNDQzUwOEZFNjk3QTAwNjZENTdDODRCRUMxODI3NjgiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzIwCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IkM4QzA4ODBFNkM2MzZFMjAwOTNERDY1OTQyMTdEMkUxODg3N0RCMjY0RTcxQTVDQyI6IjAwMkM2Qjc1OTVFRTYyQjE2MEI2QTMxQzFDIjoiRDBDNTRFQ0I4NDYyN0RDNCI6IjU0Q0VCOTY4REVFMjM2MTE1NzVFQzAwM0RGQUExQ0Q0ODg0OUJERjVBRTJFREI2QjdGQTc3NUIxNTBFRDQzODNDNUE5IgorCitDQ00tQ2FtZWxsaWEgZW5jcnlwdCBhbmQgdGFnIFJGQyA1NTI4ICMyMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiRDc1QzI3NzgwNzhDQTkzRDk3MUY5NkZERTcyMEY0Q0QiOiJGNzVEQUEwNzEwQzRFNjQyOTc3OTREQzJCN0QyQTIwNzU3QjFBQTRFNDQ4MDAyRkZBQiI6IjAwQzUzQ0Q0QzJBQTI0QjE2MEI2QTMxQzFDIjoiRTI4NUUwRTQ4MDhDREEzRCI6IkIxNDA0NTQ2QkY2NjcyMTBDQTI4RTMwOUIzOUJENkNBN0U5RkM4Mjg1RkU2OThENDNDRDIwQTAyRTBCRENBRUQyMDEwRDMiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzIyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IkMyMzg4MjJGQUM1Rjk4RkY5Mjk0MDVCMEFEMTI3QTRFNDE4NTRFIjoiMDBCRUU5MjY3RkJBRENCMTYwQjZBMzFDMUMiOiI2Q0FFRjk5NDExNDE1NzBEN0M4MTM0MDUiOiI5NEM4OTU5QzExNTY5QTI5NzgzMUE3MjEwMDU4NTdBQjYxQjg3QTJERUEwOTM2QjZFQjVGNjI1RjVEIgorCitDQ00tQ2FtZWxsaWEgZW5jcnlwdCBhbmQgdGFnIFJGQyA1NTI4ICMyMworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiRDc1QzI3NzgwNzhDQTkzRDk3MUY5NkZERTcyMEY0Q0QiOiI0REJGM0U3NzRBRDI0NUU1RDU4OTFGOUQxQzMyQTBBRTAyMkM4NUQ3IjoiMDBERkE4QjEyNDUwMDdCMTYwQjZBMzFDMUMiOiIzNkE1MkNGMTZCMTlBMjAzN0FCNzAxMUUiOiI1ODY5RTNBQUQyNDQ3Qzc0RTBGQzA1RjlBNEVBNzQ1NzdGNERFOENBODkyNDc2NDI5NkFEMDQxMTlDRTciCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzI0CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjlEQzlFREFFMkZGNURGODYzNkU4QzZERTBFRUQ1NUY3ODY3RTMzMzM3RCI6IjAwM0I4RkQ4RDNBOTM3QjE2MEI2QTMxQzFDIjoiQTRENDk5Rjc4NDE5NzI4QzE5MTc4QjBDIjoiNEIxOTgxNTYzOTNCMEY3Nzk2MDg2QUFGQjQ1NEY4QzNGMDM0Q0NBOTY2OTQ1RjFGQ0VBN0UxMUJFRTZBMkYiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2NtLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NjbS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjVjNzdjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NjbS5mdW5jdGlvbgpAQCAtMCwwICsxLDE4OSBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9jY20uaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfQ0NNX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1Q6TUJFRFRMU19BRVNfQyAqLwordm9pZCBtYmVkdGxzX2NjbV9zZWxmX3Rlc3QoICkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jY21fc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2NjbV9zZXRrZXkoIGludCBjaXBoZXJfaWQsIGludCBrZXlfc2l6ZSwgaW50IHJlc3VsdCApCit7CisgICAgbWJlZHRsc19jY21fY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdOworICAgIGludCByZXQ7CisKKyAgICBtYmVkdGxzX2NjbV9pbml0KCAmY3R4ICk7CisKKyAgICBtZW1zZXQoIGtleSwgMHgyQSwgc2l6ZW9mKCBrZXkgKSApOworICAgIFRFU1RfQVNTRVJUKCAodW5zaWduZWQpIGtleV9zaXplIDw9IDggKiBzaXplb2YoIGtleSApICk7CisKKyAgICByZXQgPSBtYmVkdGxzX2NjbV9zZXRrZXkoICZjdHgsIGNpcGhlcl9pZCwga2V5LCBrZXlfc2l6ZSApOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gcmVzdWx0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jY21fZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MgKi8KK3ZvaWQgY2NtX2xlbmd0aHMoIGludCBtc2dfbGVuLCBpbnQgaXZfbGVuLCBpbnQgYWRkX2xlbiwgaW50IHRhZ19sZW4sIGludCByZXMgKQoreworICAgIG1iZWR0bHNfY2NtX2NvbnRleHQgY3R4OworICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMF07CisgICAgdW5zaWduZWQgY2hhciBpdlsxNF07CisgICAgdW5zaWduZWQgY2hhciBhZGRbMTBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0WzEwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHRhZ1sxOF07CisgICAgaW50IGRlY3J5cHRfcmV0OworCisgICAgbWJlZHRsc19jY21faW5pdCggJmN0eCApOworCisgICAgbWVtc2V0KCBrZXksIDAsIHNpemVvZigga2V5ICkgKTsKKyAgICBtZW1zZXQoIG1zZywgMCwgc2l6ZW9mKCBtc2cgKSApOworICAgIG1lbXNldCggaXYsIDAsIHNpemVvZiggaXYgKSApOworICAgIG1lbXNldCggYWRkLCAwLCBzaXplb2YoIGFkZCApICk7CisgICAgbWVtc2V0KCBvdXQsIDAsIHNpemVvZiggb3V0ICkgKTsKKyAgICBtZW1zZXQoIHRhZywgMCwgc2l6ZW9mKCB0YWcgKSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2NtX3NldGtleSggJmN0eCwgTUJFRFRMU19DSVBIRVJfSURfQUVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCA4ICogc2l6ZW9mKCBrZXkgKSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWcoICZjdHgsIG1zZ19sZW4sIGl2LCBpdl9sZW4sIGFkZCwgYWRkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLCBvdXQsIHRhZywgdGFnX2xlbiApID09IHJlcyApOworCisgICAgZGVjcnlwdF9yZXQgPSBtYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQoICZjdHgsIG1zZ19sZW4sIGl2LCBpdl9sZW4sIGFkZCwgYWRkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZywgb3V0LCB0YWcsIHRhZ19sZW4gKTsKKworICAgIGlmKCByZXMgPT0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBkZWNyeXB0X3JldCA9PSBNQkVEVExTX0VSUl9DQ01fQVVUSF9GQUlMRUQgKTsKKyAgICBlbHNlCisgICAgICAgIFRFU1RfQVNTRVJUKCBkZWNyeXB0X3JldCA9PSByZXMgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2NjbV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZyggaW50IGNpcGhlcl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqa2V5X2hleCwgY2hhciAqbXNnX2hleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaXZfaGV4LCBjaGFyICphZGRfaGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZXN1bHRfaGV4ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleVszMl07CisgICAgdW5zaWduZWQgY2hhciBtc2dbNTBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZbMTNdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkWzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdFs1MF07CisgICAgbWJlZHRsc19jY21fY29udGV4dCBjdHg7CisgICAgc2l6ZV90IGtleV9sZW4sIG1zZ19sZW4sIGl2X2xlbiwgYWRkX2xlbiwgdGFnX2xlbiwgcmVzdWx0X2xlbjsKKworICAgIG1iZWR0bHNfY2NtX2luaXQoICZjdHggKTsKKworICAgIG1lbXNldCgga2V5LCAweDAwLCBzaXplb2YoIGtleSApICk7CisgICAgbWVtc2V0KCBtc2csIDB4MDAsIHNpemVvZiggbXNnICkgKTsKKyAgICBtZW1zZXQoIGl2LCAweDAwLCBzaXplb2YoIGl2ICkgKTsKKyAgICBtZW1zZXQoIGFkZCwgMHgwMCwgc2l6ZW9mKCBhZGQgKSApOworICAgIG1lbXNldCggcmVzdWx0LCAweDAwLCBzaXplb2YoIHJlc3VsdCApICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleSwga2V5X2hleCApOworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbXNnLCBtc2dfaGV4ICk7CisgICAgaXZfbGVuID0gdW5oZXhpZnkoIGl2LCBpdl9oZXggKTsKKyAgICBhZGRfbGVuID0gdW5oZXhpZnkoIGFkZCwgYWRkX2hleCApOworICAgIHJlc3VsdF9sZW4gPSB1bmhleGlmeSggcmVzdWx0LCByZXN1bHRfaGV4ICk7CisgICAgdGFnX2xlbiA9IHJlc3VsdF9sZW4gLSBtc2dfbGVuOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2NtX3NldGtleSggJmN0eCwgY2lwaGVyX2lkLCBrZXksIGtleV9sZW4gKiA4ICkgPT0gMCApOworCisgICAgLyogVGVzdCB3aXRoIGlucHV0ID09IG91dHB1dCAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWcoICZjdHgsIG1zZ19sZW4sIGl2LCBpdl9sZW4sIGFkZCwgYWRkX2xlbiwKKyAgICAgICAgICAgICAgICAgbXNnLCBtc2csIG1zZyArIG1zZ19sZW4sIHRhZ19sZW4gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBtc2csIHJlc3VsdCwgcmVzdWx0X2xlbiApID09IDAgKTsKKworICAgIC8qIENoZWNrIHdlIGRpZG4ndCB3cml0ZSBwYXN0IHRoZSBlbmQgKi8KKyAgICBURVNUX0FTU0VSVCggbXNnW3Jlc3VsdF9sZW5dID09IDAgJiYgbXNnW3Jlc3VsdF9sZW4gKyAxXSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jY21fZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQoIGludCBjaXBoZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmtleV9oZXgsIGNoYXIgKm1zZ19oZXgsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKml2X2hleCwgY2hhciAqYWRkX2hleCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZ19sZW4sIGNoYXIgKnJlc3VsdF9oZXggKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5WzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIG1zZ1s1MF07CisgICAgdW5zaWduZWQgY2hhciBpdlsxM107CisgICAgdW5zaWduZWQgY2hhciBhZGRbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgdGFnWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdFs1MF07CisgICAgbWJlZHRsc19jY21fY29udGV4dCBjdHg7CisgICAgc2l6ZV90IGtleV9sZW4sIG1zZ19sZW4sIGl2X2xlbiwgYWRkX2xlbiwgcmVzdWx0X2xlbjsKKyAgICBpbnQgcmV0OworCisgICAgbWJlZHRsc19jY21faW5pdCggJmN0eCApOworCisgICAgbWVtc2V0KCBrZXksIDB4MDAsIHNpemVvZigga2V5ICkgKTsKKyAgICBtZW1zZXQoIG1zZywgMHgwMCwgc2l6ZW9mKCBtc2cgKSApOworICAgIG1lbXNldCggaXYsIDB4MDAsIHNpemVvZiggaXYgKSApOworICAgIG1lbXNldCggYWRkLCAweDAwLCBzaXplb2YoIGFkZCApICk7CisgICAgbWVtc2V0KCB0YWcsIDB4MDAsIHNpemVvZiggdGFnICkgKTsKKyAgICBtZW1zZXQoIHJlc3VsdCwgMHgwMCwgc2l6ZW9mKCByZXN1bHQgKSApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXksIGtleV9oZXggKTsKKyAgICBtc2dfbGVuID0gdW5oZXhpZnkoIG1zZywgbXNnX2hleCApOworICAgIGl2X2xlbiA9IHVuaGV4aWZ5KCBpdiwgaXZfaGV4ICk7CisgICAgYWRkX2xlbiA9IHVuaGV4aWZ5KCBhZGQsIGFkZF9oZXggKTsKKyAgICBtc2dfbGVuIC09IHRhZ19sZW47CisgICAgbWVtY3B5KCB0YWcsIG1zZyArIG1zZ19sZW4sIHRhZ19sZW4gKTsKKworICAgIGlmKCBzdHJjbXAoICJGQUlMIiwgcmVzdWx0X2hleCApID09IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfQ0NNX0FVVEhfRkFJTEVEOworICAgICAgICByZXN1bHRfbGVuID0gLTE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldCA9IDA7CisgICAgICAgIHJlc3VsdF9sZW4gPSB1bmhleGlmeSggcmVzdWx0LCByZXN1bHRfaGV4ICk7CisgICAgfQorCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2NtX3NldGtleSggJmN0eCwgY2lwaGVyX2lkLCBrZXksIGtleV9sZW4gKiA4ICkgPT0gMCApOworCisgICAgLyogVGVzdCB3aXRoIGlucHV0ID09IG91dHB1dCAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQoICZjdHgsIG1zZ19sZW4sIGl2LCBpdl9sZW4sIGFkZCwgYWRkX2xlbiwKKyAgICAgICAgICAgICAgICAgbXNnLCBtc2csIG1zZyArIG1zZ19sZW4sIHRhZ19sZW4gKSA9PSByZXQgKTsKKworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWVtY21wKCBtc2csIHJlc3VsdCwgcmVzdWx0X2xlbiApID09IDAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6ZV90IGk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IG1zZ19sZW47IGkrKyApCisgICAgICAgICAgICBURVNUX0FTU0VSVCggbXNnW2ldID09IDAgKTsKKyAgICB9CisKKyAgICAvKiBDaGVjayB3ZSBkaWRuJ3Qgd3JpdGUgcGFzdCB0aGUgZW5kICh3aGVyZSB0aGUgb3JpZ2luYWwgdGFnIGlzKSAqLworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG1zZyArIG1zZ19sZW4sIHRhZywgdGFnX2xlbiApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2NjbV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5hZXMuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuYWVzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4NzhlYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuYWVzLmRhdGEKQEAgLTAsMCArMSwxMTAzIEBACitEZWNyeXB0IGVtcHR5IGJ1ZmZlcgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2RlY19lbXB0eV9idWY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODowOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjI6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4Ojc6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4Ojg6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4Ojk6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoxNTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE2Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTc6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODozMTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjMyOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMzIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MzM6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo0NzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjQ4Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6NDk6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MDpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MjpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo3Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4Ojg6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6OTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTU6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE2Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoxNzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MzE6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjMyOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMzIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODozMzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6NDc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjQ4Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo0OTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODowOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZSB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoyOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4Ojc6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6ODpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo5Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoxNTpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTY6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE3Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODozMTpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MzI6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzMgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjMzOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo0NzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6NDg6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjQ5Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MDpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MjpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo3Ok1CRURUTFNfUEFERElOR19aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4Ojg6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6OTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTU6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE2Ok1CRURUTFNfUEFERElOR19aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoxNzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MzE6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjMyOk1CRURUTFNfUEFERElOR19aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODozMzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6NDc6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjQ4Ok1CRURUTFNfUEFERElOR19aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo0OTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODowOk1CRURUTFNfUEFERElOR19OT05FCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE2Ok1CRURUTFNfUEFERElOR19OT05FCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjMyOk1CRURUTFNfUEFERElOR19OT05FCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjQ4Ok1CRURUTFNfUEFERElOR19OT05FCisKK0FFUyBUcnkgZW5jcnlwdGluZyAxIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODoxOk1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0FFUyBUcnkgZW5jcnlwdGluZyAyIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODoyOk1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0FFUyBUcnkgZW5jcnlwdGluZyA3IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODo3Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0FFUyBUcnkgZW5jcnlwdGluZyA4IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODo4Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0FFUyBUcnkgZW5jcnlwdGluZyA5IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODo5Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0FFUyBUcnkgZW5jcnlwdGluZyAxNSBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6MTU6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQUVTIFRyeSBlbmNyeXB0aW5nIDE3IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODoxNzpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitBRVMgVHJ5IGVuY3J5cHRpbmcgMzEgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjMxOk1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0FFUyBUcnkgZW5jcnlwdGluZyAzMyBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6MzM6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQUVTIFRyeSBlbmNyeXB0aW5nIDQ3IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODo0NzpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitBRVMgVHJ5IGVuY3J5cHRpbmcgNDkgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjQ5Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6MTI4OjA6MDoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOjEyODoxOjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoxMjg6MDoxOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOjEyODoxNjowOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOjEyODowOjE2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOjEyODoxOjE1OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyA0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOjEyODoxNToxOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOjEyODoxNTo3OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOjEyODoxNjo2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOjEyODoxNzo2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOjEyODoxNjoxNjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODowOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODoxOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6IkFFUy0xMjgtQ0ZCMTI4IjoxMjg6MjotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4Ojc6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODo4Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6IkFFUy0xMjgtQ0ZCMTI4IjoxMjg6OTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODoxNTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODoxNjotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODoxNzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODozMTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODozMjotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODozMzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODo0NzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODo0ODotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODo0OTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoxMjg6MDowOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OjEyODoxOjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6MTI4OjA6MToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6MTI4OjE2OjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OjEyODowOjE2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoxMjg6MToxNToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6MTI4OjE1OjE6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OjEyODoxNTo3OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoxMjg6MTY6NjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6MTI4OjE3OjY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OjEyODoxNjoxNjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODowOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODoxOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6IkFFUy0xMjgtQ1RSIjoxMjg6MjotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4Ojc6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODo4Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6IkFFUy0xMjgtQ1RSIjoxMjg6OTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODoxNTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODoxNjotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODoxNzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODozMTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODozMjotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODozMzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODo0NzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODo0ODotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODo0OTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoxMjg6MDowOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOjEyODoxOjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6MTI4OjA6MToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6MTI4OjE2OjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOjEyODowOjE2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoxMjg6MToxNToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6MTI4OjE1OjE6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOjEyODoxNTo3OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoxMjg6MTY6NjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6MTI4OjE3OjY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOjEyODoxNjoxNjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOiJBRVMtMTkyLUNCQyI6MTkyOjA6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6MTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6MjotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6NzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6ODotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6OTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOiJBRVMtMTkyLUNCQyI6MTkyOjE1Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6MTY6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoiQUVTLTE5Mi1DQkMiOjE5MjoxNzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOiJBRVMtMTkyLUNCQyI6MTkyOjMxOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6MzI6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzMgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoiQUVTLTE5Mi1DQkMiOjE5MjozMzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOiJBRVMtMTkyLUNCQyI6MTkyOjQ3Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6NDg6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoiQUVTLTE5Mi1DQkMiOjE5Mjo0OTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOjE5MjowOjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoxOTI6MTowOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6MTkyOjA6MToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoxOTI6MTY6MDoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoxOTI6MDoxNjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoxOTI6MToxNToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoxOTI6MTU6MToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoxOTI6MTU6NzoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoxOTI6MTY6NjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoxOTI6MTc6NjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoxOTI6MTY6MTY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoiQUVTLTI1Ni1DQkMiOjI1NjowOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2OjE6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2OjI6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2Ojc6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2Ojg6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2Ojk6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoiQUVTLTI1Ni1DQkMiOjI1NjoxNTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2OjE2Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6IkFFUy0yNTYtQ0JDIjoyNTY6MTc6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoiQUVTLTI1Ni1DQkMiOjI1NjozMTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2OjMyOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMzIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6IkFFUy0yNTYtQ0JDIjoyNTY6MzM6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoiQUVTLTI1Ni1DQkMiOjI1Njo0NzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2OjQ4Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6IkFFUy0yNTYtQ0JDIjoyNTY6NDk6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoyNTY6MDowOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6MjU2OjE6MDoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOjI1NjowOjE6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6MjU2OjE2OjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6MjU2OjA6MTY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6MjU2OjE6MTU6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6MjU2OjE1OjE6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6MjU2OjE1Ojc6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6MjU2OjE2OjY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6MjU2OjE3OjY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6MjU2OjE2OjE2OgorCitBRVMgRGVjcnlwdCB0ZXN0IHZlY3RvciAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzc6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfUEtDUzc6ImZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIyM2Y3MTA4NDJiOWJiOWMzMmYyNjY0OGM3ODY4MDdjYSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQUVTIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOiJmZmZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMjNmNzEwODQyYjliYjljMzJmMjY2NDhjNzg2ODA3Y2EiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IiI6MDowCisKK0FFUyBEZWNyeXB0IHRlc3QgdmVjdG9yICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3MDdiMWRiYjBmZmE0MGVmN2Q5NWRlZjQyMTIzM2ZhZSI6ImZmZmZmZmZmZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiIjowOjAKKworQUVTIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0OWFmNmIzNzIxMzVhY2VmMTAxMzJlNTQ4ZjIxN2IxNyI6ImZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiIjowOjAKKworQUVTIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODotMToiZmZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjExMTRiYzIwMjgwMDliOTIzZjBiMDE5MTVjZTVlN2M0IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIiOjA6MDoKKworQUVTIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NGQjEyODotMToiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2MDEzNjcwMzM3NGY2NGU4NjBiNDhjZTMxZjkzMDcxNiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiIjowOjAKKworQUVTIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzYKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NGQjEyODotMToiZmZmZmZmZmZmZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYmU2NmNmZWEyZmVjZDZiZjBlYzdiNDM1MmM5OWJjYWEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IiI6MDowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmMzQ0ODFlYzNjYzYyN2JhY2Q1ZGMzZmIwOGYyNzNlNiI6IjAzMzY3NjNlOTY2ZDkyNTk1YTU2N2NjOWNlNTM3ZjVlIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5Nzk4YzQ2NDBiYWQ3NWM3YzMyMjdkYjkxMDE3NGU3MiI6ImE5YTE2MzFiZjQ5OTY5NTRlYmMwOTM5NTdiMjM0NTg5IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5NmFiNWMyZmY2MTJkOWRmYWFlOGMzMWYzMGM0MjE2OCI6ImZmNGY4MzkxYTZhNDBjYTViMjVkMjNiZWRkNDRhNTk3IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjcyYTFkYTc3MGY1ZDdhYzRjOWVmOTRkODIyYWZmZDk3IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijk3MDAxNGQ2MzRlMmI3NjUwNzc3ZThlODRkMDNjY2Q4IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzYKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImYxN2U3OWFlZDBkYjdlMjc5ZTk1NWI1ZjQ5Mzg3NWE3IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjdiOTA3ODUxMjU1MDVmYWQ1OWIxM2MxODZkZDY2Y2UzIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzgKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiZmZmZmZmZmZmZmZmZjgwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhiNTI3YTZhZWJkYWVjOWVhZWY4ZWRhMmNiNzc4M2U1IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQzZmRhZjUzZWJiYzk4ODBjMjI4NjE3ZDZhOWI1NDhiIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjpNQkVEVExTX0VOQ1JZUFQ6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3MGM0NmJiMzA2OTJiZTY1N2Y3ZWFhOTNlYmFkOTg5NyI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMzIzOTk0Y2ZiOWRhMjg1YTVkOTY0MmUxNzU5YjIyNGEiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjFkYmY1Nzg3N2I3YjE3Mzg1Yzg1ZDBiNTQ4NTFlMzcxIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMDAiOiIzYTRkMzU0ZjAyYmI1YTVlNDdkMzk2NjY4NjdmMjQ2YSI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwIjoiZDQ1MWI4ZDZlMWUxYTBlYmIxNTVmYmJmNmU3YjdkYzMiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAwMCI6IjY4OThkNGY0MmZhN2JhNmExMGFjMDVlODdiOWYyMDgwIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzE2CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAiOiIwODJlYjhiZTM1ZjQ0MmZiNTI2NjhlMTZhNTkxZDFkNiI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxNworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwIjoiZTY1NmY5ZWNmNWZlMjdlYzNlNGE3M2QwMGMyODJmYjMiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTgKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMCI6IjJjYTgyMDlkNjMyNzRjZDlhMjliYjc0YmNkNzc2ODNhIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkYjRmMWFhNTMwOTY3ZDY3MzJjZTQ3MTVlYjBlZTI0YiI6ImZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhODE3MzgyNTI2MjFkZDE4MGEzNGYzNDU1YjRiYWEyZiI6ImZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3N2UyYjUwOGRiN2ZkODkyMzRjYWY3OTM5ZWU1NjIxYSI6ImZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkYzQzYmU0MGJlMGU1MzcxMmY3ZTJiZjVjYTcwNzIwOSI6IjZhMTE4YTg3NDUxOWU2NGU5OTYzNzk4YTUwM2YxZDM1IjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5MmJlZWRhYjE4OTVhOTRmYWE2OWI2MzJlNWNjNDdjZSI6ImNiOWZjZWVjODEyODZjYTNlOTg5YmQ5NzliMGNiMjg0IjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzYKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0NTkyNjRmNDc5OGY2YTc4YmFjYjg5YzE1ZWQzZDYwMSI6ImIyNmFlYjE4NzRlNDdjYTgzNThmZjIyMzc4ZjA5MTQ0IjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfREVDUllQVDoiYjY5NDE4YTg1MzMyMjQwZGM4MjQ5MjM1Mzk1NmFlMGMiOiJhMzAzZDk0MGRlZDhmMGJhZmY2Zjc1NDE0Y2FjNTI0MyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzgKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfREVDUllQVDoiNzFiNWMwOGExOTkzZTEzNjJlNGQwY2U5YjIyYjc4ZDUiOiJjMmRhYmQxMTdmOGEzZWNhYmZiYjExZDEyMTk0ZDlkMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfREVDUllQVDoiZTIzNGNkY2EyNjA2YjgxZjI5NDA4ZDVmNmRhMjEyMDYiOiJmZmY2MGE0NzQwMDg2YjNiOWM1NjE5NWI5OGQ5MWE3YiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjpNQkVEVExTX0RFQ1JZUFQ6ImZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAwIjoiODRiZTE5ZTA1MzYzNWYwOWYyNjY1ZTdiYWU4NWI0MmQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTI4LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19ERUNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMCI6IjMyY2Q2NTI4NDI5MjZhZWE0YWE2MTM3YmIyYmUyYjVlIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMCI6IjE1NmYwNzc2N2E4NWE0MzEyMzIxZjYzOTY4MzM4YTAxIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAiOiIxNWVlYzllYmY0MmI5Y2E3Njg5N2QyY2Q2YzVhMTJlMiI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICMzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmUwMDAwMDAwMDAwIjoiZGIwZDNhNmZkY2MxM2Y5MTVlMmIzMDJjZWViNzBmZDgiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI1MTcxOTc4M2QzMTg1YTUzNWJkNzVhZGM2NTA3MWNlMSI6IjRmMzU0NTkyZmY3Yzg4NDdkMmQwODcwY2E5NDgxYjdjIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMjZhYTQ5ZGNmZTc2MjlhODkwMWE2OWE5OTE0ZTZkZmQiOiJkNWUwOGJmOWExODJlODU3Y2Y0MGIzYTM2ZWUyNDhjYyI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICM2CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijk0MWE0NzczMDU4MjI0ZTFlZjY2ZDEwZTBhNmVlNzgyIjoiMDY3Y2Q5ZDM3NDkyMDc3OTE4NDE1NjI1MDdmYTk2MjYiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19FTkNSWVBUOiJkMjkyNjUyN2UwYWE5ZjM3YjQ1ZTJlYzJhZGU1ODUzZWY4MDc1NzYxMDRjN2FjZTMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImRkNjE5ZTFjZjIwNDQ0NjExMmUwYWYyYjlhZmE4ZjhjIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzgKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfRU5DUllQVDoiOTgyMjE1ZjRlMTczZGZhMGZjZmZlNWQzZGE0MWM0ODEyYzdiY2M4ZWQzNTQwZjkzIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkNGYwYWFlMTNjOGZlOTMzOWZiZjllNjllZDBhZDc0ZCI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICM5CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0VOQ1JZUFQ6Ijk4YzZiOGUwMWUzNzlmYmQxNGU2MWFmNmFmODkxNTk2NTgzNTY1ZjJhMjdkNTllOSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMTljODBlYzRhNmRlYjdlNWVkMTAzM2RkYTkzMzQ5OGYiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfRU5DUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4ZGQyNzRiZDBmMWI1OGFlMzQ1ZDllNzIzM2Y5YjhmMyI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjlkNmJkYzhmNGNlNWZlYjBmM2JlZDJlNGI5YTliYjBiIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0VOQ1JZUFQ6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmQ1NTQ4YmNmM2Y0MjU2NWY3ZWZhOTQ1NjI1MjhkNDYiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19ERUNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAiOiJiYjI4NTJjODkxYzU5NDdkMmVkNDQwMzJjNDIxYjg1ZiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfREVDUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwIjoiMWI5ZjVmYmQ1ZThhNDI2NGMwYTg1YjgwNDA5YWZhNWUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICMzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0RFQ1JZUFQ6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMCI6IjMwZGFiODA5Zjg1YTkxN2ZlOTI0NzMzZjQyNGFjNTg5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19ERUNSWVBUOiI2MTI1NzEzNGE1MThhMGQ1N2Q5ZDI0NGQ0NWY2NDk4Y2JjMzJmMmJhZmM1MjJkNzkiOiJjZmU0ZDc0MDAyNjk2Y2NmN2Q4N2IxNGEyZjljYWZjOSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfREVDUllQVDoiYjBhYjBhNmE4MThiYWVmMmQxMWZhMzNlYWM5NDcyODRmYjdkNzQ4Y2ZiNzVlNTcwIjoiZDJlYWZkODZmNjNiMTA5YjkxZjVkYmIzYTNmYjdlMTMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICM2CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0RFQ1JZUFQ6ImVlMDUzYWEwMTFjOGI0MjhjZGNjMzYzNjMxM2M1NGQ2YTAzY2FjMDFjNzE1NzlkNiI6IjliOWZkZDFjNTk3NTY1NWY1Mzk5OThiMzA2YTMyNGFmIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIyNzVjZmMwNDEzZDhjY2I3MDUxM2MzODU5YjFkMGY3MiI6IjFiMDc3YTZhZjRiN2Y5ODIyOWRlNzg2ZDc1MTZiNjM5IjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzgKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYzliODEzNWZmMWI1YWRjNDEzZGZkMDUzYjIxYmQ5NmQiOiI5YzJkODg0MmU1ZjQ4ZjU3NjQ4MjA1ZDM5YTIzOWFmMSI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICM5CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0RFQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjRhMzY1MGMzMzcxY2UyZWIzNWUzODlhMTcxNDI3NDQwIjoiYmZmNTI1MTAwOTVmNTE4ZWNjYTYwYWY0MjA1NDQ0YmIiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYjIwOTk3OTVlODhjYzE1OGZkNzVlYTEzM2Q3ZTdmYmUiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhNmNhZTQ2ZmI2ZmFkZmU3YTJjMzAyYTM0MjQyODE3YiI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0RFQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAyNmE3MDI0ZDZhOTAyZTBiM2ZmY2NiYWE5MTBjYzNmIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19FTkNSWVBUOiJjMWNjMzU4YjQ0OTkwOWExOTQzNmNmYmIzZjg1MmVmOGJjYjVlZDEyYWM3MDU4MzI1ZjU2ZTYwOTlhYWIxYTFjIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzNTIwNjUyNzIxNjlhYmY5ODU2ODQzOTI3ZDA2NzRmZCI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0VOQ1JZUFQ6Ijk4NGNhNzVmNGVlOGQ3MDZmNDZjMmQ5OGMwYmY0YTQ1ZjViMDBkNzkxYzJkZmViMTkxYjVlZDhlNDIwZmQ2MjciOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQzMDc0NTZhOWU2NzgxM2I0NTJlMTVmYThmZmZlMzk4IjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfRU5DUllQVDoiYjQzZDA4YTQ0N2FjODYwOWJhYWRhZTRmZjEyOTE4YjlmNjhmYzE2NTNmMTI2OTIyMmYxMjM5ODFkZWQ3YTkyZiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDY2MzQ0NjYwNzM1NDk4OTQ3N2E1YzZmMGYwMDdlZjQiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMGIyNGFmMzYxOTNjZTQ2NjVmMjgyNWQ3YjQ3NDljOTgiOiJhOWZmNzViZDdjZjY2MTNkMzczMWM3N2MzYjZkMGMwNCI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICM1CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3NjFjMWZlNDFhMThhY2YyMGQyNDE2NTA2MTFkOTBmMSI6IjYyM2E1MmZjZWE1ZDQ0M2U0OGQ5MTgxYWIzMmM3NDIxIjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzYKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhhNTYwNzY5ZDYwNTg2OGFkODBkODE5YmRiYTAzNzcxIjoiMzhmMmM3YWUxMDYxMjQxNWQyN2NhMTkwZDI3ZGE4YjQiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzNmFmZjBlZjdiZjMyODA3NzJjZjRjYWM4MGEwZDJiMiI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICM4CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjFmOGVlZGVhMGY2MmExNDA2ZDU4Y2ZjM2VjZWE3MmNmIjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYWJmNDE1NGEzMzc1YTFkM2U2YjFkNDU0NDM4Zjk1YTYiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfRU5DUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDVkMDg5YzM2ZDVjNWE0ZWZjNjg5ZTNiMGRlMTBkZDUiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfRU5DUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYjRkYTVkZjRiZWNiNTQ2MmUwM2EwZWQwMGQyOTU2MjkiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfRU5DUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGNmNGUxMjkxMzZjMWE0YjdhMGYzODkzNWNjMzRiMmIiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19ERUNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwIjoiZWRmNjFhZTM2MmU4ODJkZGMwMTY3NDc0YTdhNzdmM2EiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0RFQ1JZUFQ6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAiOiI2MTY4YjAwYmE3ODU5ZTA5NzBlY2ZkNzU3ZWZlY2Y3YyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfREVDUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMCI6ImQxNDE1NDQ3ODY2MjMwZDI4YmIxZWExOGE0Y2RmZDAyIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19ERUNSWVBUOiJmOGJlOWJhNjE1YzVhOTUyY2FiYmNhMjRmNjhmODU5MzAzOTYyNGQ1MjRjODE2YWNkYTJjOTE4M2JkOTE3Y2I5IjoiYTM5NDRiOTVjYTBiNTIwNDM1ODRlZjAyMTUxOTI2YTgiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICM1CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0RFQ1JZUFQ6Ijc5N2Y4YjNkMTc2ZGFjNWI3ZTM0YTJkNTM5YzRlZjM2N2ExNmY4NjM1ZjYyNjQ3Mzc1OTFjNWMwN2JmNTdhM2UiOiJhNzQyODlmZTczYTRjMTIzY2ExODllYTFlMWI0OWFkNSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzYKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfREVDUllQVDoiNjgzOGQ0MGNhZjkyNzc0OWMxM2YwMzI5ZDMzMWY0NDhlMjAyYzczZWY1MmM1ZjczYTM3Y2E2MzVkNGM0NzcwNyI6ImI5MWQ0ZWE0NDg4NjQ0YjU2Y2YwODEyZmE3ZmNmNWZjIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNjIzYTUyZmNlYTVkNDQzZTQ4ZDkxODFhYjMyYzc0MjEiOiI3NjFjMWZlNDFhMThhY2YyMGQyNDE2NTA2MTFkOTBmMSI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICM4CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0RFQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzOGYyYzdhZTEwNjEyNDE1ZDI3Y2ExOTBkMjdkYThiNCI6IjhhNTYwNzY5ZDYwNTg2OGFkODBkODE5YmRiYTAzNzcxIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjFiYzcwNGYxYmNlMTM1Y2ViODEwMzQxYjIxNmQ3YWJlIjoiOTFmYmVmMmQxNWE5NzgxNjA2MGJlZTFmZWFhNDlhZmUiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImRkYzZiZjc5MGMxNTc2MGQ4ZDlhZWI2ZjlhNzVmZDRlIjoiODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjBhNmJkYzZkNGMxZTYyODAzMDFmZDhlOTdkZGJlNjAxIjoiYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjliODBlZWZiN2ViZTJkMmIxNjI0N2FhMGVmYzcyZjVkIjoiZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQ2lwaGVyIENvcm5lciBDYXNlIGJlaGF2aW91cnMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworY2lwaGVyX3NwZWNpYWxfYmVoYXZpb3VyczoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuYXJjNC5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5hcmM0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRkMjMxMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuYXJjNC5kYXRhCkBAIC0wLDAgKzEsMTAzIEBACitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6IkFSQzQtMTI4IjoxMjg6MDotMQorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODoxOi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODoyOi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODo3Oi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODo4Oi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODo5Oi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6IkFSQzQtMTI4IjoxMjg6MTU6LTEKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODoxNjotMQorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OiJBUkM0LTEyOCI6MTI4OjE3Oi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6IkFSQzQtMTI4IjoxMjg6MzE6LTEKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODozMjotMQorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OiJBUkM0LTEyOCI6MTI4OjMzOi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6IkFSQzQtMTI4IjoxMjg6NDc6LTEKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODo0ODotMQorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OiJBUkM0LTEyOCI6MTI4OjQ5Oi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6MTI4OjA6MDoKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OjEyODoxOjA6CisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoxMjg6MDoxOgorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OjEyODoxNjowOgorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OjEyODowOjE2OgorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMworZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OjEyODoxOjE1OgorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OjEyODoxNToxOgorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OjEyODoxNTo3OgorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OjEyODoxNjo2OgorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OjEyODoxNzo2OgorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OjEyODoxNjoxNjoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuYmxvd2Zpc2guZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuYmxvd2Zpc2guZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU4NDZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5ibG93ZmlzaC5kYXRhCkBAIC0wLDAgKzEsNjAzIEBACitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MDotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoyOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo3Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo4Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo5Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MTU6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxNjotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjE3Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MzE6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODozMjotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjMzOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NDc6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo0ODotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjQ5Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODowOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjE6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjI6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4Ojc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4Ojg6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4Ojk6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxNTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjE2Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MTc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODozMTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjMyOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MzM6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo0NzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjQ4Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NDk6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjA6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MTpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MjpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6ODpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6OTpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjE1Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MTY6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxNzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjMxOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MzI6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODozMzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjQ3Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NDg6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo0OTpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjA6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxOk1CRURUTFNfUEFERElOR19aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjI6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo4Ok1CRURUTFNfUEFERElOR19aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4Ojk6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjE1Ok1CRURUTFNfUEFERElOR19aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxNjpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MTc6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjMxOk1CRURUTFNfUEFERElOR19aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODozMjpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MzM6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjQ3Ok1CRURUTFNfUEFERElOR19aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo0ODpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NDk6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MDpNQkVEVExTX1BBRERJTkdfTk9ORQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4Ojg6TUJFRFRMU19QQURESU5HX05PTkUKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MTY6TUJFRFRMU19QQURESU5HX05PTkUKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MzI6TUJFRFRMU19QQURESU5HX05PTkUKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NDg6TUJFRFRMU19QQURESU5HX05PTkUKKworQkxPV0ZJU0ggVHJ5IGVuY3J5cHRpbmcgMSBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6MTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitCTE9XRklTSCBUcnkgZW5jcnlwdGluZyAyIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODoyOk1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0JMT1dGSVNIIFRyeSBlbmNyeXB0aW5nIDcgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4Ojc6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQkxPV0ZJU0ggVHJ5IGVuY3J5cHRpbmcgOSBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6OTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitCTE9XRklTSCBUcnkgZW5jcnlwdGluZyAxNSBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6MTU6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQkxPV0ZJU0ggVHJ5IGVuY3J5cHRpbmcgMTcgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjE3Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0JMT1dGSVNIIFRyeSBlbmNyeXB0aW5nIDMxIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODozMTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitCTE9XRklTSCBUcnkgZW5jcnlwdGluZyAzMyBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6MzM6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQkxPV0ZJU0ggVHJ5IGVuY3J5cHRpbmcgNDcgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjQ3Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0JMT1dGSVNIIFRyeSBlbmNyeXB0aW5nIDQ5IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODo0OTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6MTI4OjA6MDoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6MTI4OjE6MDoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6MTI4OjA6MToKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOjEyODoxNjowOgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6MTI4OjA6MTY6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoxMjg6MToxNToKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyA0CitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOjEyODoxNToxOgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6MTI4OjE1Ojc6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoxMjg6MTY6NjoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOjEyODoxNzo2OgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6MTI4OjE2OjE2OgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjEyODowOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6IkJMT1dGSVNILUNGQjY0IjoxMjg6MTotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjEyODoyOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OiJCTE9XRklTSC1DRkI2NCI6MTI4Ojc6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6IkJMT1dGSVNILUNGQjY0IjoxMjg6ODotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjEyODo5Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjEyODoxNTotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6IkJMT1dGSVNILUNGQjY0IjoxMjg6MTY6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OiJCTE9XRklTSC1DRkI2NCI6MTI4OjE3Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjEyODozMTotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6IkJMT1dGSVNILUNGQjY0IjoxMjg6MzI6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OiJCTE9XRklTSC1DRkI2NCI6MTI4OjMzOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjEyODo0NzotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6IkJMT1dGSVNILUNGQjY0IjoxMjg6NDg6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OiJCTE9XRklTSC1DRkI2NCI6MTI4OjQ5Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoxMjg6MDowOgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoxMjg6MTowOgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoxMjg6MDoxOgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6MTI4OjE2OjA6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoxMjg6MDoxNjoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OjEyODoxOjE1OgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6MTI4OjE1OjE6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoxMjg6MTU6NzoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OjEyODoxNjo2OgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6MTI4OjE3OjY6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoxMjg6MTY6MTY6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6MDotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6MTotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6IkJMT1dGSVNILUNUUiI6MTI4OjI6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODo3Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6ODotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6IkJMT1dGSVNILUNUUiI6MTI4Ojk6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6MTU6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6MTY6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6MTc6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6MzE6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6MzI6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6MzM6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6NDc6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6NDg6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6NDk6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoxMjg6MDowOgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6MTI4OjE6MDoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOjEyODowOjE6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6MTI4OjE2OjA6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6MTI4OjA6MTY6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6MTI4OjE6MTU6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6MTI4OjE1OjE6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6MTI4OjE1Ojc6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6MTI4OjE2OjY6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6MTI4OjE3OjY6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6MTI4OjE2OjE2OgorCitCTE9XRklTSCBDQkMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzLCAxOTItYml0cyBrZXkKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxOTI6NzotMQorCitCTE9XRklTSCBDVFIgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzLCAxOTItYml0cyBrZXkKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6IkJMT1dGSVNILUNUUiI6MTkyOjc6LTEKKworQkxPV0ZJU0ggQ0ZCNjQgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzLCAxOTItYml0cyBrZXkKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjE5Mjo3Oi0xCisKK0JMT1dGSVNIIEVDQiBFbmNyeXB0IHRlc3QgdmVjdG9yIChTU0xlYXkpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMCI6IjRlZjk5NzQ1NjE5OGRkNzgiOjAKKworQkxPV0ZJU0ggRUNCIEVuY3J5cHQgdGVzdCB2ZWN0b3IgKFNTTGVheSkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfRUNCOk1CRURUTFNfRU5DUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiOiJmZmZmZmZmZmZmZmZmZmZmIjoiNTE4NjZmZDViODVlY2I4YSI6MAorCitCTE9XRklTSCBFQ0IgRW5jcnlwdCB0ZXN0IHZlY3RvciAoU1NMZWF5KSAjMworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZWRjYmE5ODc2NTQzMjEwZmVkY2JhOTg3NjU0MzIxMCI6IjAxMjM0NTY3ODlhYmNkZWYiOiIwYWNlYWIwZmM2YTBhMjhkIjowCisKK0JMT1dGSVNIIEVDQiBFbmNyeXB0IHRlc3QgdmVjdG9yIChTU0xlYXkpICMzLCA2NC1iaXQga2V5CitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQjpNQkVEVExTX0VOQ1JZUFQ6ImZlZGNiYTk4NzY1NDMyMTAiOiIwMTIzNDU2Nzg5YWJjZGVmIjoiMGFjZWFiMGZjNmEwYTI4ZCI6MAorCitCTE9XRklTSCBFQ0IgRW5jcnlwdCB0ZXN0IHZlY3RvciAoU1NMZWF5KSAjMywgMTkyLWJpdCBrZXkKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfRUNCOk1CRURUTFNfRU5DUllQVDoiZmVkY2JhOTg3NjU0MzIxMGZlZGNiYTk4NzY1NDMyMTBmZWRjYmE5ODc2NTQzMjEwIjoiMDEyMzQ1Njc4OWFiY2RlZiI6IjBhY2VhYjBmYzZhMGEyOGQiOjAKKworQkxPV0ZJU0ggRUNCIERlY3J5cHQgdGVzdCB2ZWN0b3IgKFNTTGVheSkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0ZWY5OTc0NTYxOThkZDc4IjoiMDAwMDAwMDAwMDAwMDAwMCI6MAorCitCTE9XRklTSCBFQ0IgRGVjcnlwdCB0ZXN0IHZlY3RvciAoU1NMZWF5KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9FQ0I6TUJFRFRMU19ERUNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiI6IjUxODY2ZmQ1Yjg1ZWNiOGEiOiJmZmZmZmZmZmZmZmZmZmZmIjowCisKK0JMT1dGSVNIIEVDQiBEZWNyeXB0IHRlc3QgdmVjdG9yIChTU0xlYXkpICMzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQjpNQkVEVExTX0RFQ1JZUFQ6IjM4NDk2NzRjMjYwMjMxOWUzODQ5Njc0YzI2MDIzMTllIjoiYTI1ZTc4NTZjZjI2NTFlYiI6IjUxNDU0YjU4MmRkZjQ0MGEiOjAKKworQkxPV0ZJU0ggRUNCIERlY3J5cHQgdGVzdCB2ZWN0b3IgKFNTTGVheSkgIzMsIDY0LWJpdCBrZXkKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfRUNCOk1CRURUTFNfREVDUllQVDoiMzg0OTY3NGMyNjAyMzE5ZSI6ImEyNWU3ODU2Y2YyNjUxZWIiOiI1MTQ1NGI1ODJkZGY0NDBhIjowCisKK0JMT1dGSVNIIEVDQiBEZWNyeXB0IHRlc3QgdmVjdG9yIChTU0xlYXkpICMzLCAxOTItYml0IGtleQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9FQ0I6TUJFRFRMU19ERUNSWVBUOiIzODQ5Njc0YzI2MDIzMTllMzg0OTY3NGMyNjAyMzE5ZTM4NDk2NzRjMjYwMjMxOWUiOiJhMjVlNzg1NmNmMjY1MWViIjoiNTE0NTRiNTgyZGRmNDQwYSI6MApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5jYW1lbGxpYS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5jYW1lbGxpYS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OWI3MGQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmNhbWVsbGlhLmRhdGEKQEAgLTAsMCArMSw3NTkgQEAKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjA6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjI6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6NzotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo4Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4Ojk6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE1Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxNjotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MTc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjMxOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODozMjotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MzM6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjQ3Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo0ODotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6NDk6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MDpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZSB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MjpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo3Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4Ojg6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6OTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MTU6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE2Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxNzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MzE6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjMyOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODozMzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6NDc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjQ4Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo0OTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODowOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MTpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoyOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4Ojc6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6ODpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo5Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxNTpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MTY6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE3Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODozMTpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MzI6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjMzOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo0NzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6NDg6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjQ5Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODowOk1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZSB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxOk1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MjpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4Ojc6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo4Ok1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6OTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxNTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxNjpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxNzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODozMTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODozMjpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODozMzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo0NzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo0ODpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo0OTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjA6TUJFRFRMU19QQURESU5HX05PTkUKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxNjpNQkVEVExTX1BBRERJTkdfTk9ORQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjMyOk1CRURUTFNfUEFERElOR19OT05FCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6NDg6TUJFRFRMU19QQURESU5HX05PTkUKKworQ0FNRUxMSUEgVHJ5IGVuY3J5cHRpbmcgMSBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjE6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQ0FNRUxMSUEgVHJ5IGVuY3J5cHRpbmcgMiBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjI6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQ0FNRUxMSUEgVHJ5IGVuY3J5cHRpbmcgNyBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4Ojc6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQ0FNRUxMSUEgVHJ5IGVuY3J5cHRpbmcgOCBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4Ojg6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQ0FNRUxMSUEgVHJ5IGVuY3J5cHRpbmcgOSBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4Ojk6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQ0FNRUxMSUEgVHJ5IGVuY3J5cHRpbmcgMTUgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODoxNTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitDQU1FTExJQSBUcnkgZW5jcnlwdGluZyAxNyBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjE3Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0NBTUVMTElBIFRyeSBlbmNyeXB0aW5nIDMxIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6MzE6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQ0FNRUxMSUEgVHJ5IGVuY3J5cHRpbmcgMzMgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODozMzpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitDQU1FTExJQSBUcnkgZW5jcnlwdGluZyA0NyBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjQ3Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0NBTUVMTElBIFRyeSBlbmNyeXB0aW5nIDQ5IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6NDk6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoxMjg6MDowOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6MTI4OjE6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOjEyODowOjE6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6MTI4OjE2OjA6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6MTI4OjA6MTY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6MTI4OjE6MTU6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6MTI4OjE1OjE6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6MTI4OjE1Ojc6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6MTI4OjE2OjY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6MTI4OjE3OjY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6MTI4OjE2OjE2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OiJDQU1FTExJQS0xMjgtQ0ZCMTI4IjoxMjg6MDotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODoxOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODoyOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODo3Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODo4Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODo5Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OiJDQU1FTExJQS0xMjgtQ0ZCMTI4IjoxMjg6MTU6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODoxNjotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoiQ0FNRUxMSUEtMTI4LUNGQjEyOCI6MTI4OjE3Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OiJDQU1FTExJQS0xMjgtQ0ZCMTI4IjoxMjg6MzE6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODozMjotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoiQ0FNRUxMSUEtMTI4LUNGQjEyOCI6MTI4OjMzOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OiJDQU1FTExJQS0xMjgtQ0ZCMTI4IjoxMjg6NDc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODo0ODotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoiQ0FNRUxMSUEtMTI4LUNGQjEyOCI6MTI4OjQ5Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OjEyODowOjA6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6MTI4OjE6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoxMjg6MDoxOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoxMjg6MTY6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6MTI4OjA6MTY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OjEyODoxOjE1OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoxMjg6MTU6MToKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6MTI4OjE1Ojc6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OjEyODoxNjo2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoxMjg6MTc6NjoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6MTI4OjE2OjE2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOiJDQU1FTExJQS0xMjgtQ1RSIjoxMjg6MDotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODoxOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODoyOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODo3Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODo4Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODo5Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOiJDQU1FTExJQS0xMjgtQ1RSIjoxMjg6MTU6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODoxNjotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoiQ0FNRUxMSUEtMTI4LUNUUiI6MTI4OjE3Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOiJDQU1FTExJQS0xMjgtQ1RSIjoxMjg6MzE6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODozMjotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoiQ0FNRUxMSUEtMTI4LUNUUiI6MTI4OjMzOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOiJDQU1FTExJQS0xMjgtQ1RSIjoxMjg6NDc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODo0ODotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoiQ0FNRUxMSUEtMTI4LUNUUiI6MTI4OjQ5Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOjEyODowOjA6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6MTI4OjE6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoxMjg6MDoxOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoxMjg6MTY6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6MTI4OjA6MTY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOjEyODoxOjE1OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoxMjg6MTU6MToKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6MTI4OjE1Ojc6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOjEyODoxNjo2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoxMjg6MTc6NjoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6MTI4OjE2OjE2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6IkNBTUVMTElBLTE5Mi1DQkMiOjE5MjowOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOiJDQU1FTExJQS0xOTItQ0JDIjoxOTI6MTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6IkNBTUVMTElBLTE5Mi1DQkMiOjE5MjoyOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoiQ0FNRUxMSUEtMTkyLUNCQyI6MTkyOjc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOiJDQU1FTExJQS0xOTItQ0JDIjoxOTI6ODotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6IkNBTUVMTElBLTE5Mi1DQkMiOjE5Mjo5Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6IkNBTUVMTElBLTE5Mi1DQkMiOjE5MjoxNTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOiJDQU1FTExJQS0xOTItQ0JDIjoxOTI6MTY6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoiQ0FNRUxMSUEtMTkyLUNCQyI6MTkyOjE3Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6IkNBTUVMTElBLTE5Mi1DQkMiOjE5MjozMTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOiJDQU1FTExJQS0xOTItQ0JDIjoxOTI6MzI6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoiQ0FNRUxMSUEtMTkyLUNCQyI6MTkyOjMzOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6IkNBTUVMTElBLTE5Mi1DQkMiOjE5Mjo0NzotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOiJDQU1FTExJQS0xOTItQ0JDIjoxOTI6NDg6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoiQ0FNRUxMSUEtMTkyLUNCQyI6MTkyOjQ5Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6MTkyOjA6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOjE5MjoxOjA6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoxOTI6MDoxOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOjE5MjoxNjowOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOjE5MjowOjE2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOjE5MjoxOjE1OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOjE5MjoxNToxOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOjE5MjoxNTo3OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOjE5MjoxNjo2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOjE5MjoxNzo2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOjE5MjoxNjoxNjoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOiJDQU1FTExJQS0yNTYtQ0JDIjoyNTY6MDotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoiQ0FNRUxMSUEtMjU2LUNCQyI6MjU2OjE6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOiJDQU1FTExJQS0yNTYtQ0JDIjoyNTY6MjotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6IkNBTUVMTElBLTI1Ni1DQkMiOjI1Njo3Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoiQ0FNRUxMSUEtMjU2LUNCQyI6MjU2Ojg6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOiJDQU1FTExJQS0yNTYtQ0JDIjoyNTY6OTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOiJDQU1FTExJQS0yNTYtQ0JDIjoyNTY6MTU6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoiQ0FNRUxMSUEtMjU2LUNCQyI6MjU2OjE2Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6IkNBTUVMTElBLTI1Ni1DQkMiOjI1NjoxNzotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOiJDQU1FTExJQS0yNTYtQ0JDIjoyNTY6MzE6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoiQ0FNRUxMSUEtMjU2LUNCQyI6MjU2OjMyOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6IkNBTUVMTElBLTI1Ni1DQkMiOjI1NjozMzotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOiJDQU1FTExJQS0yNTYtQ0JDIjoyNTY6NDc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoiQ0FNRUxMSUEtMjU2LUNCQyI6MjU2OjQ4Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6IkNBTUVMTElBLTI1Ni1DQkMiOjI1Njo0OTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOjI1NjowOjA6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoyNTY6MTowOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6MjU2OjA6MToKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoyNTY6MTY6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoyNTY6MDoxNjoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoyNTY6MToxNToKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyA0CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoyNTY6MTU6MToKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoyNTY6MTU6NzoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoyNTY6MTY6NjoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoyNTY6MTc6NjoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoyNTY6MTY6MTY6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmNjbS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5jY20uZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQ0MDkxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5jY20uZGF0YQpAQCAtMCwwICsxLDQ4MCBAQAorQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMSAoUD0wLCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjRhZTcwMTEwM2M2M2RlY2E1YjVhMzkzOWQ3ZDA1OTkyIjoiNWE4YWE0ODVjMzE2ZTkiOiIiOiIiOiIwMjIwOWY1NSI6IiIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMiAoUD0wLCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjRhZTcwMTEwM2M2M2RlY2E1YjVhMzkzOWQ3ZDA1OTkyIjoiMzc5NmNmNTFiODcyNjYiOiIiOiIiOiI5YTA0YzI0MSI6IkZBSUwiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzMgKFA9MCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjMiOiI1YThhYTQ4NWMzMTZlOSI6IiI6IiI6Ijc1ZDU4MmRiNDNjZTliMTNhYjRiNmY3ZjE0MzQxMzMwIjoiIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICM0IChQPTAsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjRiYjNjNGE0Zjg5M2FkOGM5YmRjODMzYzMyNWQ2MmIzIjoiMzc5NmNmNTFiODcyNjYiOiIiOiIiOiIzYTY1ZTAzYWYzN2I4MWQwNWFjYzdlYzFiYzM5ZGViMCI6IkZBSUwiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzUgKFA9MCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjMiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6IiI6IiI6IjkwMTU2ZjNmIjoiIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICM2IChQPTAsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjRiYjNjNGE0Zjg5M2FkOGM5YmRjODMzYzMyNWQ2MmIzIjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODIiOiIiOiIiOiI4ODkwOTAxNiI6IkZBSUwiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzcgKFA9MCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjE5ZWJmZGUyZDU0NjhiYTBhMzAzMWJkZTYyOWIxMWZkIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiIiOiIiOiJmYjA0ZGM1YTQ0YzZiYjAwMGYyNDQwZjUxNTQzNjRiNCI6IiIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjOCAoUD0wLCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MiI6IiI6IiI6IjU0NDcwNzViZjQyYTU5YjkxZjA4MDY0NzM4YjAxNWFiIjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjOSAoUD0yNCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiIxOWViZmRlMmQ1NDY4YmEwYTMwMzFiZGU2MjliMTFmZCI6IjVhOGFhNDg1YzMxNmU5IjoiIjoiYTkwZThlYTQ0MDg1Y2VkNzkxYjJmZGI3ZmQ0NGI1Y2YwYmQ3ZDI3NzE4MDI5YmI3IjoiMDNlMWZhNmIiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjIiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzEwIChQPTI0LCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjE5ZWJmZGUyZDU0NjhiYTBhMzAzMWJkZTYyOWIxMWZkIjoiMzFmOGZhMjU4MjdkNDgiOiIiOiI1MGFhZmUwNTc4YzExNWM0YThlMTI2ZmY3YjNjY2I2NGRjZThjY2FhOGNlZGE2OWYiOiIyM2U1ZDgxYyI6IkZBSUwiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzExIChQPTI0LCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiIxOTdhZmIwMmZmYmQ4ZjY5OWRhY2FlODcwOTRkNTI0MyI6IjVhOGFhNDg1YzMxNmU5IjoiIjoiMjRhYjllZWIwZTU1MDhjYWU4MDA3NGYxMDcwZWUxODhhNjM3MTcxODYwODgxZjFmIjoiMmQ5YTNmYmMyMTA1OTViN2I4YjFiNDE1MjMxMTFhOGUiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjIiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzEyIChQPTI0LCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiIxOTdhZmIwMmZmYmQ4ZjY5OWRhY2FlODcwOTRkNTI0MyI6IjMxZjhmYTI1ODI3ZDQ4IjoiIjoiN2ViZmRhNmZhNWRhMWRiZmZkODJkYzI5Yjg3NTc5OGZiY2VmOGJhMDA4NGZiZDI0IjoiNjNhZjc0N2NjODhhMDAxZmE5NGUwNjAyOTBmMjA5YzQiOiJGQUlMIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxMyAoUD0yNCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiMTk3YWZiMDJmZmJkOGY2OTlkYWNhZTg3MDk0ZDUyNDMiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6IiI6IjRhNTUwMTM0Zjk0NDU1OTc5ZWM0YmY4OWFkMmJkODBkMjVhNzdhZTk0ZTQ1NjEzNCI6ImEzZTEzOGI5IjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3IgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxNCAoUD0yNCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiMTk3YWZiMDJmZmJkOGY2OTlkYWNhZTg3MDk0ZDUyNDMiOiI0OTAwNDkxMmZkZDcyNjkyNzliMWYwNmE4OSI6IiI6IjExOGVjNTNkZDFiZmJlNTJkNWI5ZmU1ZGZlYmVjZjJlZTY3NGVjOTgzZWFkYTY1NCI6IjA5MWE1YWU5IjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTUgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOSI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjoiNGJmZTRlMzU3ODRmMGE2NWI1NDU0NzdlNWUyZjRiYWUwZTFlNmZhNzE3ZWFmMmNiIjoiNmE5YTk3MGI5YmViMmFjMWJkNGZkNjIxNjhmODM3OGEiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTciCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE2IChQPTI0LCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4MjkiOiI0OTAwNDkxMmZkZDcyNjkyNzliMWYwNmE4OSI6IiI6IjBjNTZhNTAzYWEyYzEyZTg3NDUwZDQ1YTdiNzE0ZGI5ODBmZDM0OGYzMjdjMDA2NSI6ImE2NTY2NjE0NDk5NGJhZDBjODE5NWJjYjRhZGUxMzM3IjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTcgKFA9MCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4MjkiOiI1YThhYTQ4NWMzMTZlOSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMmVjMjJiMWEyNjhmODhlMmMiOiIiOiI3ODJlNDMxOCI6IiIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTggKFA9MCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4MjkiOiJhMjY1NDgwY2E4OGQ1ZiI6ImEyMjQ4YTg4MmVjYmY4NTBkYWY5MTkzM2EzODllNzhlODE2MjNkMjMzZGZkNDdiZjgzMjEzNjFhMzhmMTM4ZmUiOiIiOiJhMDRmMjcwYSI6IkZBSUwiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE5IChQPTAsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiI2YTc5OGQ3YzVlMWE3MmI0M2UyMGFkNWM3YjA4NTY3YiI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6IiI6IjQxYjQ3NjAxM2Y0NWU0YTc4MWYyNTNhNmYzYjFlNTMwIjoiIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyMCAoUD0wLCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IiOiJhMjY1NDgwY2E4OGQ1ZiI6ImEyMjQ4YTg4MmVjYmY4NTBkYWY5MTkzM2EzODllNzhlODE2MjNkMjMzZGZkNDdiZjgzMjEzNjFhMzhmMTM4ZmUiOiIiOiJmOWYwMThmY2QxMjU4MjI2MTYwODNmZmZlYmM0YzhlNiI6IkZBSUwiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIxIChQPTAsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiI2YTc5OGQ3YzVlMWE3MmI0M2UyMGFkNWM3YjA4NTY3YiI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3YTdlZTY0MTAxODRjNzk4MiI6IiI6IjlmNjlmMjRmIjoiIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyMiAoUD0wLCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IiOiI4NzM5YjRiZWExYTA5OWZlNTQ3NDk5Y2JjNiI6ImY2MTA3Njk2ZWRiMzMyYjJlYTA1OWQ4ODYwZmVlMjZiZTQyZTVlMTJlMWE0Zjc5YThkMGVhZmNlMWIyMjc4YTciOiIiOiJlMTdhZmFhNCI6IkZBSUwiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIzIChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiZjlmZGNhNGFjNjRmZTdmMDE0ZGUwZjQzMDM5Yzc1NzEiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5N2E3ZWU2NDEwMTg0Yzc5ODIiOiIiOiIxODU5YWMzNmE0MGE2YjI4YjM0MjY2MjUzNjI3Nzk3YSI6IiIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjQgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MSI6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2IjoiZjYxMDc2OTZlZGIzMzJiMmVhMDU5ZDg4NjBmZWUyNmJlNDJlNWUxMmUxYTRmNzlhOGQwZWFmY2UxYjIyNzhhNyI6IiI6ImVkZjhiNDZlYjY5YWMwMDQ0MTE2MDE5ZGVjMTgzMDcyIjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjUgKFA9MjQsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006ImY5ZmRjYTRhYzY0ZmU3ZjAxNGRlMGY0MzAzOWM3NTcxIjoiNWE4YWE0ODVjMzE2ZTkiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjJlYzIyYjFhMjY4Zjg4ZTJjIjoiNmJlMzE4NjBjYTI3MWVmNDQ4ZGU4ZjhkOGIzOTM0NmRhZjRiODFkN2U5MmQ2NWIzIjoiMzhmMTI1ZmEiOiJhMjY1NDgwY2E4OGQ1ZjUzNmRiMGRjNmFiYzQwZmFmMGQwNWJlN2E5NjY5Nzc3NjgiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI2IChQPTI0LCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MSI6ImZkZDJkNmY1MDNjOTE1IjoiNWI5MjM5NGYyMWRkYzNhZDQ5ZDliMDg4MWI4MjlhNTkzNWNiM2E0ZDIzZTI5MmE2MmZiNjZiNWU3YWI3MDIwZSI6IjRjYzU3YTk5MjdhNmJjNDAxNDQxODcwZDMxOTNiZjg5ZWJkMTYzZjVjMDE1MDFjNyI6IjI4YTY2YjY5IjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjcgKFA9MjQsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiJhN2FhNjM1ZWE1MWIwYmIyMGEwOTJiZDU1NzNlNzI4YyI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6ImIzNTFhYjk2YjJlNDU1MTUyNTQ1NThkNTIxMjY3M2VlNmM3NzZkNDJkYmNhM2I1MSI6IjJjZjNhMjBiN2ZkN2M0OWU2ZTc5YmVmNDc1YzI5MDZmIjoiYTI2NTQ4MGNhODhkNWY1MzZkYjBkYzZhYmM0MGZhZjBkMDViZTdhOTY2OTc3NzY4IgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyOCAoUD0yNCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjIjoiZmRkMmQ2ZjUwM2M5MTUiOiI1YjkyMzk0ZjIxZGRjM2FkNDlkOWIwODgxYjgyOWE1OTM1Y2IzYTRkMjNlMjkyYTYyZmI2NmI1ZTdhYjcwMjBlIjoiZGYxYTUyODVjYWE0MWI0YmI0N2Y2ZTVjZWNlYmE0ZTgyNzIxODI4ZDY4NDI3YTMwIjoiODFkMThjYTE0OWQ2NzY2YmZhY2NlYzg4ZjE5NGViNWIiOiJGQUlMIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyOSAoUD0yNCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjoiOTM0Zjg5MzgyNGU4ODBmNzQzZDE5NmIyMmQxZjM0MGE1MjYwODE1NTA4N2JkMjhhIjoiYzI1ZTUzMjkiOiI4NzM5YjRiZWExYTA5OWZlNTQ3NDk5Y2JjNmQxYjEzZDg0OWI4MDg0YzliNmFjYzUiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzMwIChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGMiOiIwODEyNzU3YWQwY2M0ZDE3YzRjZmU3YTY0MiI6ImVjNmM0NGE3ZTk0ZTUxYTNjYTZkZWUyMjkwOTgzOTE1NzVlYzcyMTNjODUyNjdmYmY3NDkyZmRiZWVlNjFiMTAiOiJmNDNiYTlkODM0YWQ4NWRmYWIzZjFjMGMyN2MzNDQxZmU0ZTQxMWEzOGEyNjFhNjUiOiI1OWIzYjNlZSI6IkZBSUwiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzMxIChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjI2NTExZmI1MWZjZmE3NWNiNGI0NGRhNzVhNmU1YTBlIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjoiNTAwMzhiNWZkZDM2NGVlNzQ3YjcwZDAwYmQzNjg0MGVjZTRlYTE5OTk4MTIzMzc1IjoiYzBhNDU4YmZjYWZhM2IyNjA5YWZlMGY4MjVjYmY1MDMiOiI4NzM5YjRiZWExYTA5OWZlNTQ3NDk5Y2JjNmQxYjEzZDg0OWI4MDg0YzliNmFjYzUiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzMyIChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjI2NTExZmI1MWZjZmE3NWNiNGI0NGRhNzVhNmU1YTBlIjoiMDgxMjc1N2FkMGNjNGQxN2M0Y2ZlN2E2NDIiOiJlYzZjNDRhN2U5NGU1MWEzY2E2ZGVlMjI5MDk4MzkxNTc1ZWM3MjEzYzg1MjY3ZmJmNzQ5MmZkYmVlZTYxYjEwIjoiNzhlZDhmZjZiNWExMjU1ZDBmYmQwYTcxOWE5YzI3YjA1OWZmNWY4M2QwYzQ5NjJjIjoiMzkwMDQyYmE4YmI1ZjY3OThkYWIwMWM1YWZhZDczMDYiOiJGQUlMIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxIChQPTAsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiYzk4YWQ3ZjM4YjJjN2U5NzBjOWI5NjVlYzg3YTA4MjA4Mzg0NzE4Zjc4MjA2YzZjIjoiNWE4YWE0ODVjMzE2ZTkiOiIiOiIiOiI5ZDRiN2YzYiI6IiIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMiAoUD0wLCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006ImM5OGFkN2YzOGIyYzdlOTcwYzliOTY1ZWM4N2EwODIwODM4NDcxOGY3ODIwNmM2YyI6IjM3OTZjZjUxYjg3MjY2IjoiIjoiIjoiODA3NDVkZTkiOiJGQUlMIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMzIChQPTAsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006IjRiYjNjNGE0Zjg5M2FkOGM5YmRjODMzYzMyNWQ2MmIzZDNhZDFiY2NmOTI4MmE2NSI6IjVhOGFhNDg1YzMxNmU5IjoiIjoiIjoiMTcyMjMwMzhmYTk5ZDUzNjgxY2ExYmVhYmU3OGQxYjQiOiIiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzQgKFA9MCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjNkM2FkMWJjY2Y5MjgyYTY1IjoiMzc5NmNmNTFiODcyNjYiOiIiOiIiOiJkMGUxZWVlZjRkMmEyNjQ1MzZiYjFjMmMxYmRlN2MzNSI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzUgKFA9MCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjNkM2FkMWJjY2Y5MjgyYTY1IjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiIiOiIiOiJmZTY5ZWQ4NCI6IiIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjNiAoUD0wLCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiM2QzYWQxYmNjZjkyODJhNjUiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MiI6IiI6IiI6ImRiN2ZmYzgyIjoiRkFJTCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjNyAoUD0wLCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQ0MDk0YWZjYjIwNTM5M2ZhIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiIiOiIiOiIwYzY2YThlNTQ3ZWQ0ZjhjMmM5YTlhMWViNWQ0NTViOSI6IiIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjOCAoUD0wLCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQ0MDk0YWZjYjIwNTM5M2ZhIjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODIiOiIiOiIiOiIzODc1N2IzYTYxYTRkYzk3Y2EzYWI4OGJmMTI0MDY5NSI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzkgKFA9MjQsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQ0MDk0YWZjYjIwNTM5M2ZhIjoiNWE4YWE0ODVjMzE2ZTkiOiIiOiI0MTE5ODZkMDRkNjQ2MzEwMGJmZjAzZjdkMGJkZTdlYTJjMzQ4ODc4NDM3ODEzOGMiOiJkZGM5M2E1NCI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMiIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTAgKFA9MjQsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQ0MDk0YWZjYjIwNTM5M2ZhIjoiMzFmOGZhMjU4MjdkNDgiOiIiOiIzMmI2NDlhYjU2MTYyZTU1ZDQxNDhhMTI5MmQ2YTIyNWE5ODhlYjEzMDgyOTgyNzMiOiJiNjg4OTAzNiI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzExIChQPTI0LCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiIxOTdhZmIwMmZmYmQ4ZjY5OWRhY2FlODcwOTRkNTI0MzI0NTc2Yjk5ODQ0Zjc1ZTEiOiI1YThhYTQ4NWMzMTZlOSI6IiI6ImNiYTRiNGFlYjg1ZjA0OTJmZDhkOTA1YzRhNmQ4MjMzMTM5ODMzMzczZWYxODhhOCI6ImM1YTVlYmVjZjdhYzg2MDdmZTQxMjE4OWU4M2Q5ZDIwIjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxMiAoUD0yNCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiMTk3YWZiMDJmZmJkOGY2OTlkYWNhZTg3MDk0ZDUyNDMyNDU3NmI5OTg0NGY3NWUxIjoiMzFmOGZhMjU4MjdkNDgiOiIiOiJjYTYyNzEzNzI4YjVjOWQ2NTI1MDRiMGFlOGZkNGZlZTVkMjk3ZWU2YThkMTljYjYiOiJlNjk5ZjE1ZjE0ZDM0ZGNhZjliYThlZDRiODc3Yzk3ZCI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzEzIChQPTI0LCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiIxOTdhZmIwMmZmYmQ4ZjY5OWRhY2FlODcwOTRkNTI0MzI0NTc2Yjk5ODQ0Zjc1ZTEiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6IiI6IjA0MjY1M2M2NzRlZjJhOTBmN2ZiMTFkMzA4NDhlNTMwYWU1OTQ3OGYxMDUxNjMzYSI6IjM0ZmFkMjc3IjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3IgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxNCAoUD0yNCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiMTk3YWZiMDJmZmJkOGY2OTlkYWNhZTg3MDk0ZDUyNDMyNDU3NmI5OTg0NGY3NWUxIjoiNDkwMDQ5MTJmZGQ3MjY5Mjc5YjFmMDZhODkiOiIiOiIxOTAyZDk3NjlhN2JhM2QzMjY4ZTEyNTczOTVjOGMyZTVmOThlZWYyOTVkY2JmYTUiOiJhMzVkZjc3NSI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE1IChQPTI0LCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4Mjk3ZTAzOTU2ZjYwODNlNDUxIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiIiOiJhNWI3ZDhjY2EyMDY5OTA4ZDFlZDg4ZTZhOWZlMmM5YmVkZTMxMzFkYWQ1NDY3MWUiOiJhN2FkZTMwYTA3ZDE4NTY5MmFiMGViZGY0Yzc4Y2Y3YSI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5NyIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTYgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOTdlMDM5NTZmNjA4M2U0NTEiOiI0OTAwNDkxMmZkZDcyNjkyNzliMWYwNmE4OSI6IiI6IjlhOTg2MTdmYjk3YTBkZmU0NjZiZTY5MjI3MmRjZGFlYzFjNTQ0M2EzYjUxMzEyZSI6ImYwNDJjODYzNjNjYzA1YWZiOThjNjZlMTZiZThhNDQ1IjoiRkFJTCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTcgKFA9MCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4Mjk3ZTAzOTU2ZjYwODNlNDUxIjoiNWE4YWE0ODVjMzE2ZTkiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjJlYzIyYjFhMjY4Zjg4ZTJjIjoiIjoiMWQwODlhNWYiOiIiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE4IChQPTAsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006IjkwOTI5YTRiMGFjNjViMzUwYWQxNTkxNjExZmU0ODI5N2UwMzk1NmY2MDgzZTQ1MSI6ImEyNjU0ODBjYTg4ZDVmIjoiYTIyNDhhODgyZWNiZjg1MGRhZjkxOTMzYTM4OWU3OGU4MTYyM2QyMzNkZmQ0N2JmODMyMTM2MWEzOGYxMzhmZSI6IiI6IjJmNDYwMjJhIjoiRkFJTCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTkgKFA9MCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006IjZhNzk4ZDdjNWUxYTcyYjQzZTIwYWQ1YzdiMDg1NjdiMTJhYjc0NGI2MWMwNzBlMiI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6IiI6IjUyODBhMjEzN2ZlZTNkZWVmY2ZlOWI2M2ExMTk5ZmIzIjoiIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyMCAoUD0wLCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IxMmFiNzQ0YjYxYzA3MGUyIjoiYTI2NTQ4MGNhODhkNWYiOiJhMjI0OGE4ODJlY2JmODUwZGFmOTE5MzNhMzg5ZTc4ZTgxNjIzZDIzM2RmZDQ3YmY4MzIxMzYxYTM4ZjEzOGZlIjoiIjoiZDQwYTczMThjNWYyZDgyZjgzOGMwYmVlZWZlMGQ1OTgiOiJGQUlMIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyMSAoUD0wLCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IxMmFiNzQ0YjYxYzA3MGUyIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjoiIjoiNWUwZWFlYmQiOiIiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIyIChQPTAsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiI2YTc5OGQ3YzVlMWE3MmI0M2UyMGFkNWM3YjA4NTY3YjEyYWI3NDRiNjFjMDcwZTIiOiI4NzM5YjRiZWExYTA5OWZlNTQ3NDk5Y2JjNiI6ImY2MTA3Njk2ZWRiMzMyYjJlYTA1OWQ4ODYwZmVlMjZiZTQyZTVlMTJlMWE0Zjc5YThkMGVhZmNlMWIyMjc4YTciOiIiOiI3MWI3ZmMzMyI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIzIChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiZjlmZGNhNGFjNjRmZTdmMDE0ZGUwZjQzMDM5Yzc1NzE5NGQ1NDRjZTVkMTVlZWQ0IjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjoiIjoiZDA3Y2NmOWZkYzNkMzNhYTk0Y2RhM2QyMzBkYTcwN2MiOiIiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI0IChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiZjlmZGNhNGFjNjRmZTdmMDE0ZGUwZjQzMDM5Yzc1NzE5NGQ1NDRjZTVkMTVlZWQ0IjoiODczOWI0YmVhMWEwOTlmZTU0NzQ5OWNiYzYiOiJmNjEwNzY5NmVkYjMzMmIyZWEwNTlkODg2MGZlZTI2YmU0MmU1ZTEyZTFhNGY3OWE4ZDBlYWZjZTFiMjI3OGE3IjoiIjoiNjVmZTMyYjY0OWRjMzI4YzlmNTMxNTg0ODk3ZTg1YjMiOiJGQUlMIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyNSAoUD0yNCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiZjlmZGNhNGFjNjRmZTdmMDE0ZGUwZjQzMDM5Yzc1NzE5NGQ1NDRjZTVkMTVlZWQ0IjoiNWE4YWE0ODVjMzE2ZTkiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjJlYzIyYjFhMjY4Zjg4ZTJjIjoiOWY2Y2E0YWY5YjE1OTE0OGM4ODlhNjU4NGQxMTgzZWEyNmUyNjE0ODc0YjA1MDQ1IjoiNzVkZWE4ZDEiOiJhMjY1NDgwY2E4OGQ1ZjUzNmRiMGRjNmFiYzQwZmFmMGQwNWJlN2E5NjY5Nzc3NjgiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI2IChQPTI0LCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MTk0ZDU0NGNlNWQxNWVlZDQiOiJmZGQyZDZmNTAzYzkxNSI6IjViOTIzOTRmMjFkZGMzYWQ0OWQ5YjA4ODFiODI5YTU5MzVjYjNhNGQyM2UyOTJhNjJmYjY2YjVlN2FiNzAyMGUiOiI4NGQ4MjEyZTljZmMyMTIxMjUyYmFhM2IwNjViMWVkY2Y1MDQ5N2I5NTk0ZGIxZWIiOiJkNzk2NTgyNSI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI3IChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGNjZDRiM2U4Y2RkMmFiMzNkIjoiNWE4YWE0ODVjMzE2ZTkiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjJlYzIyYjFhMjY4Zjg4ZTJjIjoiNmFhYjY0YzQ3ODc1OTlkOGYyMTM0NDZiZWFkYjE2ZTA4ZGJhNjBlOTdmNTZkYmQxIjoiNGQxZDk4MGQ2ZmUwZmI0NGI0MjE5OTI2NjJiOTc5NzUiOiJhMjY1NDgwY2E4OGQ1ZjUzNmRiMGRjNmFiYzQwZmFmMGQwNWJlN2E5NjY5Nzc3NjgiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI4IChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGNjZDRiM2U4Y2RkMmFiMzNkIjoiZmRkMmQ2ZjUwM2M5MTUiOiI1YjkyMzk0ZjIxZGRjM2FkNDlkOWIwODgxYjgyOWE1OTM1Y2IzYTRkMjNlMjkyYTYyZmI2NmI1ZTdhYjcwMjBlIjoiNDk4MGIyZWU0OWIxYWFmMzkzMTc1ZjVhYjliYWU5NWVjNzkwNDU1N2RmYTIwNjYwIjoiM2M1MWQzNmM4MjZmMDEzODQxMDA4ODYxOThhN2Y2YTMiOiJGQUlMIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyOSAoUD0yNCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjY2Q0YjNlOGNkZDJhYjMzZCI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3YTdlZTY0MTAxODRjNzk4MiI6IjE2ZTU0M2QwZTIwNjE1ZmYwZGYxNWFjZDk5MjdkZGZlNDA2NjhhNTRiYjg1NGNjYyI6ImMyNWU5ZmNlIjoiODczOWI0YmVhMWEwOTlmZTU0NzQ5OWNiYzZkMWIxM2Q4NDliODA4NGM5YjZhY2M1IgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMzMCAoUD0yNCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjY2Q0YjNlOGNkZDJhYjMzZCI6IjA4MTI3NTdhZDBjYzRkMTdjNGNmZTdhNjQyIjoiZWM2YzQ0YTdlOTRlNTFhM2NhNmRlZTIyOTA5ODM5MTU3NWVjNzIxM2M4NTI2N2ZiZjc0OTJmZGJlZWU2MWIxMCI6ImRmMzViMTA5Y2FmNjkwNjU2YWUyNzhiYmQ4ZjhiYmE2ODdhMmNlMTFiMTA1ZGFlOSI6IjhlY2VkYjNlIjoiRkFJTCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMzEgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiMjY1MTFmYjUxZmNmYTc1Y2I0YjQ0ZGE3NWE2ZTVhMGViOGQ5YzhmM2I5MDZmODg2IjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjoiYzViMGIyZWYxNzQ5OGM1NTcwZWIzMzVkZjQ1ODgwMzI5NThiYTNkNjliZjZmMzE3IjoiODQ2NGE2ZjdmYTJiNzY3NDRlOGU4ZDk1NjkxY2VjYjgiOiI4NzM5YjRiZWExYTA5OWZlNTQ3NDk5Y2JjNmQxYjEzZDg0OWI4MDg0YzliNmFjYzUiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzMyIChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006IjI2NTExZmI1MWZjZmE3NWNiNGI0NGRhNzVhNmU1YTBlYjhkOWM4ZjNiOTA2Zjg4NiI6IjA4MTI3NTdhZDBjYzRkMTdjNGNmZTdhNjQyIjoiZWM2YzQ0YTdlOTRlNTFhM2NhNmRlZTIyOTA5ODM5MTU3NWVjNzIxM2M4NTI2N2ZiZjc0OTJmZGJlZWU2MWIxMCI6ImQxZjA1MTg5MjlmNGFlMmYwNTQzZGUyYTdkZmU0YmIwMTEwYmIzMDU3ZTUyNGExYyI6IjA2YmQ2ZGMyZTZiY2MzNDM2Y2ZmYjk2OWFlOTAwMzg4IjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMSAoUD0wLCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImVkYTMyZjc1MTQ1NmUzMzE5NWYxZjQ5OWNmMmRjN2M5N2VhMTI3YjZkNDg4ZjIxMWNjYzUxMjZmYmIyNGFmYTYiOiJhNTQ0MjE4ZGFkZDNjMSI6IiI6IiI6IjQ2OWM5MGJiIjoiIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyIChQPTAsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiZWRhMzJmNzUxNDU2ZTMzMTk1ZjFmNDk5Y2YyZGM3Yzk3ZWExMjdiNmQ0ODhmMjExY2NjNTEyNmZiYjI0YWZhNiI6ImQzZDU0MjRlMjBmYmVjIjoiIjoiIjoiNDZhOTA4ZWQiOiJGQUlMIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMzIChQPTAsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImUxYjhhOTI3YTk1ZWZlOTQ2NTY2NzdiNjkyNjYyMDAwMjc4YjQ0MWM3OWU4NzlkZDVjMGRkYzc1OGJkYzllZTgiOiJhNTQ0MjE4ZGFkZDNjMSI6IiI6IiI6IjgyMDdlYjE0ZDMzODU1YTUyYWNjZWVkMTdkYmNiZjZlIjoiIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICM0IChQPTAsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImUxYjhhOTI3YTk1ZWZlOTQ2NTY2NzdiNjkyNjYyMDAwMjc4YjQ0MWM3OWU4NzlkZDVjMGRkYzc1OGJkYzllZTgiOiJkM2Q1NDI0ZTIwZmJlYyI6IiI6IiI6IjYwZjhlMTI3Y2I0ZDMwZGI2ZGYwNjIyMTU4Y2Q5MzFkIjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjNSAoUD0wLCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJlMWI4YTkyN2E5NWVmZTk0NjU2Njc3YjY5MjY2MjAwMDI3OGI0NDFjNzllODc5ZGQ1YzBkZGM3NThiZGM5ZWU4IjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIiOiIiOiI4YTE5YTEzMyI6IiIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjNiAoUD0wLCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJlMWI4YTkyN2E5NWVmZTk0NjU2Njc3YjY5MjY2MjAwMDI3OGI0NDFjNzllODc5ZGQ1YzBkZGM3NThiZGM5ZWU4IjoiM2MwZTI4MTVkMzdkODQ0ZjdhYzI0MGJhOWQiOiIiOiIiOiIyZTMxN2YxYiI6IkZBSUwiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzcgKFA9MCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImFmMDYzNjM5ZTY2YzI4NDA4M2M1Y2Y3MmI3MGQ4YmMyNzdmNTk3OGU4MGQ5MzIyZDk5ZjJmZGM3MThjZGE1NjkiOiJhNTQ0MjE4ZGFkZDNjMTA1ODNkYjQ5Y2YzOSI6IiI6IiI6Ijk3ZTFhOGRkNDI1OWNjZDJlNDMxZTA1N2IwMzk3ZmNmIjoiIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICM4IChQPTAsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJhZjA2MzYzOWU2NmMyODQwODNjNWNmNzJiNzBkOGJjMjc3ZjU5NzhlODBkOTMyMmQ5OWYyZmRjNzE4Y2RhNTY5IjoiM2MwZTI4MTVkMzdkODQ0ZjdhYzI0MGJhOWQiOiIiOiIiOiI1YTk1OTZjNTExZWE2YTg2NzFhZGVmYzRmMjE1N2Q4YiI6IkZBSUwiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzkgKFA9MjQsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiYWYwNjM2MzllNjZjMjg0MDgzYzVjZjcyYjcwZDhiYzI3N2Y1OTc4ZTgwZDkzMjJkOTlmMmZkYzcxOGNkYTU2OSI6ImE1NDQyMThkYWRkM2MxIjoiIjoiNjRhMTM0MTY3OTk3MmRjNTg2OWZjZjY5YjE5ZDVjNWVhNTBhYTBiNWU5ODVmNWI3IjoiMjJhYThkNTkiOiJkM2Q1NDI0ZTIwZmJlYzQzYWU0OTUzNTNlZDgzMDI3MTUxNWFiMTA0Zjg4NjBjOTgiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzEwIChQPTI0LCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImFmMDYzNjM5ZTY2YzI4NDA4M2M1Y2Y3MmI3MGQ4YmMyNzdmNTk3OGU4MGQ5MzIyZDk5ZjJmZGM3MThjZGE1NjkiOiJiZmNkYThiNWEyZDBkMiI6IiI6ImM1YjdmODAyYmZmYzQ5OGMxNjI2ZTM3NzRmMWQ5Zjk0MDQ1ZGZkOGUxYTEwYTIwMiI6Ijc3ZDAwYTc1IjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTEgKFA9MjQsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImY3MDc5ZGZhM2I1YzdiMDU2MzQ3ZDdlNDM3YmNkZWQ2ODNhYmQ2ZTJjOWUwNjlkMzMzMjg0MDgyY2JiNWQ0NTMiOiJhNTQ0MjE4ZGFkZDNjMSI6IiI6ImJjNTFjMzkyNWE5NjBlNzczMjUzM2U0ZWYzYTRmNjllZTY4MjZkZTk1MmJjYjBmZCI6IjM3NGYzYmI2ZGI4Mzc3ZWJmYzc5Njc0ODU4YzRmMzA1IjoiZDNkNTQyNGUyMGZiZWM0M2FlNDk1MzUzZWQ4MzAyNzE1MTVhYjEwNGY4ODYwYzk4IgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxMiAoUD0yNCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiZjcwNzlkZmEzYjVjN2IwNTYzNDdkN2U0MzdiY2RlZDY4M2FiZDZlMmM5ZTA2OWQzMzMyODQwODJjYmI1ZDQ1MyI6ImJmY2RhOGI1YTJkMGQyIjoiIjoiYWZhMWZhOGU4YTcwZTI2YjAyMTYxMTUwNTU2ZDYwNDEwMWZkZjQyM2YzMzJjMzM2IjoiMzI3NWYyYTQ5MDdkNTFiNzM0ZmU3MjM4Y2ViYmQ0OGYiOiJGQUlMIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxMyAoUD0yNCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiZjcwNzlkZmEzYjVjN2IwNTYzNDdkN2U0MzdiY2RlZDY4M2FiZDZlMmM5ZTA2OWQzMzMyODQwODJjYmI1ZDQ1MyI6ImE1NDQyMThkYWRkM2MxMDU4M2RiNDljZjM5IjoiIjoiNjNlMDBkMzBlNGIwOGZkMmExY2M4ZDcwZmFiMzI3YjIzNjhlNzdhOTNiZTRmNDEyIjoiM2QxNGZiM2YiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZDZlM2EwYjJhODZmNzA2ZTg4NTk1OWUiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE0IChQPTI0LCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJmNzA3OWRmYTNiNWM3YjA1NjM0N2Q3ZTQzN2JjZGVkNjgzYWJkNmUyYzllMDY5ZDMzMzI4NDA4MmNiYjVkNDUzIjoiODk0ZGNhYTYxMDA4ZWI4ZmIwNTJjNjBkNDEiOiIiOiJiYjU0MjViMzg2OWI3Njg1NmVjNThlMzk4ODZmYjZmNmYyYWMxM2ZlNDRjYjEzMmQiOiI4ZDBjMDA5OSI6IkZBSUwiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE1IChQPTI0LCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiMWIwZThkZjYzYzU3ZjA1ZDlhYzQ1NzU3NWVhNzY0NTI0Yjg2MTBhZTUxNjRlNjIxNWY0MjZmNWE3YWU2ZWRlNCI6ImE1NDQyMThkYWRkM2MxMDU4M2RiNDljZjM5IjoiIjoiZjAwNTBhZDE2MzkyMDIxYTNmNDAyMDdiZWQzNTIxZmIxZTlmODA4ZjQ5ODMwYzQyIjoiM2E1NzhkMTc5OTAyZjkxMmY5ZWExYWZiY2UxMTIwYjMiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZDZlM2EwYjJhODZmNzA2ZTg4NTk1OWUiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE2IChQPTI0LCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiMWIwZThkZjYzYzU3ZjA1ZDlhYzQ1NzU3NWVhNzY0NTI0Yjg2MTBhZTUxNjRlNjIxNWY0MjZmNWE3YWU2ZWRlNCI6Ijg5NGRjYWE2MTAwOGViOGZiMDUyYzYwZDQxIjoiIjoiYzQwODE5MGQwZmJmNTAzNGY4M2IyNGE4ZWQ5NjU3MzMxYTdjZTE0MWRlNGZhZTc2IjoiOTA4NDYwN2I4M2JkMDZlNjQ0MmVhYzhkYWNmNTgzY2MiOiJGQUlMIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxNyAoUD0wLCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiIxYjBlOGRmNjNjNTdmMDVkOWFjNDU3NTc1ZWE3NjQ1MjRiODYxMGFlNTE2NGU2MjE1ZjQyNmY1YTdhZTZlZGU0IjoiYTU0NDIxOGRhZGQzYzEiOiJkM2Q1NDI0ZTIwZmJlYzQzYWU0OTUzNTNlZDgzMDI3MTUxNWFiMTA0Zjg4NjBjOTg4ZDE1YjZkMzZjMDM4ZWFiIjoiIjoiOTJkMDBmYmUiOiIiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE4IChQPTAsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006IjFiMGU4ZGY2M2M1N2YwNWQ5YWM0NTc1NzVlYTc2NDUyNGI4NjEwYWU1MTY0ZTYyMTVmNDI2ZjVhN2FlNmVkZTQiOiI3OGM0NmUzMjQ5Y2EyOCI6IjIzMmU5NTdjNjVmZmExMTk4OGU4MzBkNDYxN2Q1MDBmMWM0YTM1YzEyMjFmMzk2YzQxYWIyMTRmMDc0Y2EyZGMiOiIiOiI5MTQzZTVjNCI6IkZBSUwiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE5IChQPTAsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJhNGJjMTBiMWE2MmM5NmQ0NTlmYmFmM2E1YWEzZmFjZTczMTNiYjllMTI1M2U2OTZmOTZhN2E4ZTM2ODAxMDg4IjoiYTU0NDIxOGRhZGQzYzEiOiJkM2Q1NDI0ZTIwZmJlYzQzYWU0OTUzNTNlZDgzMDI3MTUxNWFiMTA0Zjg4NjBjOTg4ZDE1YjZkMzZjMDM4ZWFiIjoiIjoiOTNhZjExYTA4Mzc5ZWIzN2ExNmFhMjgzN2YwOWQ2OWQiOiIiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIwIChQPTAsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJhNGJjMTBiMWE2MmM5NmQ0NTlmYmFmM2E1YWEzZmFjZTczMTNiYjllMTI1M2U2OTZmOTZhN2E4ZTM2ODAxMDg4IjoiNzhjNDZlMzI0OWNhMjgiOiIyMzJlOTU3YzY1ZmZhMTE5ODhlODMwZDQ2MTdkNTAwZjFjNGEzNWMxMjIxZjM5NmM0MWFiMjE0ZjA3NGNhMmRjIjoiIjoiZDE5YjBjMTRlYzY4NmE3OTYxY2E3YzM4NmQxMjVhNjUiOiJGQUlMIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyMSAoUD0wLCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiYTRiYzEwYjFhNjJjOTZkNDU5ZmJhZjNhNWFhM2ZhY2U3MzEzYmI5ZTEyNTNlNjk2Zjk2YTdhOGUzNjgwMTA4OCI6ImE1NDQyMThkYWRkM2MxMDU4M2RiNDljZjM5IjoiM2MwZTI4MTVkMzdkODQ0ZjdhYzI0MGJhOWQ2ZTNhMGIyYTg2ZjcwNmU4ODU5NTllMDlhMTAwNWUwMjRmNjkwNyI6IiI6Ijg2NmQ0MjI3IjoiIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyMiAoUD0wLCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiYTRiYzEwYjFhNjJjOTZkNDU5ZmJhZjNhNWFhM2ZhY2U3MzEzYmI5ZTEyNTNlNjk2Zjk2YTdhOGUzNjgwMTA4OCI6ImU4ZGU5NzBmNmVlOGU4MGVkZTkzMzU4MWI1IjoiODlmOGIwNjhkMzRmNTZiYzQ5ZDgzOWQ4ZTQ3YjM0N2U2ZGFlNzM3YjkwM2IyNzg2MzI0NDdlNmMwNDg1ZDI2YSI6IiI6Ijk0Y2IxMTI3IjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjMgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiI4YzVjZjM0NTdmZjIyMjI4YzM5YzA1MWM0ZTA1ZWQ0MDkzNjU3ZWIzMDNmODU5YTlkNGIwZjhiZTAxMjdkODhhIjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZDZlM2EwYjJhODZmNzA2ZTg4NTk1OWUwOWExMDA1ZTAyNGY2OTA3IjoiIjoiODY3YjBkODdjZjZlMGY3MTgyMDBhOTdiNGY2ZDVhZDUiOiIiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI0IChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiOGM1Y2YzNDU3ZmYyMjIyOGMzOWMwNTFjNGUwNWVkNDA5MzY1N2ViMzAzZjg1OWE5ZDRiMGY4YmUwMTI3ZDg4YSI6ImU4ZGU5NzBmNmVlOGU4MGVkZTkzMzU4MWI1IjoiODlmOGIwNjhkMzRmNTZiYzQ5ZDgzOWQ4ZTQ3YjM0N2U2ZGFlNzM3YjkwM2IyNzg2MzI0NDdlNmMwNDg1ZDI2YSI6IiI6IjY3N2EwNDBkNDZlZTNmMmI3ODM4MjczYmRhZDE0ZjE2IjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjUgKFA9MjQsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006IjhjNWNmMzQ1N2ZmMjIyMjhjMzljMDUxYzRlMDVlZDQwOTM2NTdlYjMwM2Y4NTlhOWQ0YjBmOGJlMDEyN2Q4OGEiOiJhNTQ0MjE4ZGFkZDNjMSI6ImQzZDU0MjRlMjBmYmVjNDNhZTQ5NTM1M2VkODMwMjcxNTE1YWIxMDRmODg2MGM5ODhkMTViNmQzNmMwMzhlYWIiOiJjMmZlMTI2NTgxMzlmNWQwZGQyMmNhZGYyZTkwMTY5NWI1NzkzMDJhNzJmYzU2MDgiOiIzZWJjNzcyMCI6Ijc4YzQ2ZTMyNDljYTI4ZTFlZjA1MzFkODBmZDM3YzEyNGQ5YWVjYjdiZTY2NjhlMyIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjYgKFA9MjQsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006IjhjNWNmMzQ1N2ZmMjIyMjhjMzljMDUxYzRlMDVlZDQwOTM2NTdlYjMwM2Y4NTlhOWQ0YjBmOGJlMDEyN2Q4OGEiOiI2YmEwMDRmZDE3Njc5MSI6IjVhMDUzYjJhMWJiODdlODVkNTY1MjdiZmNkY2QzZWNhZmI5OTFiYjEwZTRjODYyYmIwNzUxYzcwMGEyOWY1NGIiOiI5NDc0OGJhODEyMjllNTNjMzg1ODNhODU2NGIyM2ViYmFmYzZmNmVmZGY0YzJhODEiOiJjNDRkYjJjOSI6IkZBSUwiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI3IChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiNzA1MzM0ZTMwZjUzZGQyZjkyZDE5MGQyYzE0MzdjODc3MmY5NDBjNTVhYTM1ZTU2MjIxNGVkNDViZDQ1OGZmZSI6ImE1NDQyMThkYWRkM2MxIjoiZDNkNTQyNGUyMGZiZWM0M2FlNDk1MzUzZWQ4MzAyNzE1MTVhYjEwNGY4ODYwYzk4OGQxNWI2ZDM2YzAzOGVhYiI6IjMzNDExNjhlYjhjNDg0NjhjNDE0MzQ3ZmIwOGY3MWQyMDg2ZjdjMmQxYmQ1ODFjZSI6IjFhYzY4YmQ0MmY1ZWM3ZmE3ZTA2OGNjMGVjZDc5YzJhIjoiNzhjNDZlMzI0OWNhMjhlMWVmMDUzMWQ4MGZkMzdjMTI0ZDlhZWNiN2JlNjY2OGUzIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyOCAoUD0yNCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006IjcwNTMzNGUzMGY1M2RkMmY5MmQxOTBkMmMxNDM3Yzg3NzJmOTQwYzU1YWEzNWU1NjIyMTRlZDQ1YmQ0NThmZmUiOiI2YmEwMDRmZDE3Njc5MSI6IjVhMDUzYjJhMWJiODdlODVkNTY1MjdiZmNkY2QzZWNhZmI5OTFiYjEwZTRjODYyYmIwNzUxYzcwMGEyOWY1NGIiOiJkNTQzYWNkYTcxMmI4OThjYmIyN2I4ZjU5OGIyZTQ0MzhjZTU4N2E4MzZlMjc4NTEiOiI0N2MzMzM4YTI0MDA4MDllNzM5YjYzYmE4MjI3ZDJmOSI6IkZBSUwiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI5IChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiNzA1MzM0ZTMwZjUzZGQyZjkyZDE5MGQyYzE0MzdjODc3MmY5NDBjNTVhYTM1ZTU2MjIxNGVkNDViZDQ1OGZmZSI6ImE1NDQyMThkYWRkM2MxMDU4M2RiNDljZjM5IjoiM2MwZTI4MTVkMzdkODQ0ZjdhYzI0MGJhOWQ2ZTNhMGIyYTg2ZjcwNmU4ODU5NTllMDlhMTAwNWUwMjRmNjkwNyI6ImMwZWE0MDBiNTk5NTYxZTc5MDViOTkyNjJiNDU2NWQ1YzNkYzQ5ZmFkODRkN2M2OSI6ImVmODkxMzM5IjoiZThkZTk3MGY2ZWU4ZTgwZWRlOTMzNTgxYjViY2Y0ZDgzN2UyYjcyYmFhOGIwMGMzIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMzMCAoUD0yNCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006IjcwNTMzNGUzMGY1M2RkMmY5MmQxOTBkMmMxNDM3Yzg3NzJmOTQwYzU1YWEzNWU1NjIyMTRlZDQ1YmQ0NThmZmUiOiI4ZmE1MDFjNWRkOWFjOWI4NjgxNDRjOWZhNSI6IjViYjQwZTNiYjcyYjQ1MDkzMjRhN2VkYzg1MmY3MjUzNWYxZjYyODMxNTZlNjNmNjk1OWZmYWYzOWRjZGU4MDAiOiI2MDg3MWUwM2VhMGViOTY4NTM2Yzk5ZjkyNmVhMjRlZjQzZDQxMjcyYWQ5ZmI3ZjYiOiIzZDQ4ODYyMyI6IkZBSUwiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzMxIChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006IjMxNGEyMDJmODM2ZjlmMjU3ZTIyZDhjMTE3NTc4MzJhZTUxMzFkMzU3YTcyZGY4OGYzZWZmMGZmY2VlMGRhNGUiOiJhNTQ0MjE4ZGFkZDNjMTA1ODNkYjQ5Y2YzOSI6IjNjMGUyODE1ZDM3ZDg0NGY3YWMyNDBiYTlkNmUzYTBiMmE4NmY3MDZlODg1OTU5ZTA5YTEwMDVlMDI0ZjY5MDciOiI4ZDM0Y2RjYTM3Y2U3N2JlNjhmNjViYWYzMzgyZTMxZWZhNjkzZTYzZjkxNGE3ODEiOiIzNjdmMzBmMmVhYWQ4YzA2M2NhNTA3OTVhY2Q5MDIwMyI6ImU4ZGU5NzBmNmVlOGU4MGVkZTkzMzU4MWI1YmNmNGQ4MzdlMmI3MmJhYThiMDBjMyIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMzIgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiMzE0YTIwMmY4MzZmOWYyNTdlMjJkOGMxMTc1NzgzMmFlNTEzMWQzNTdhNzJkZjg4ZjNlZmYwZmZjZWUwZGE0ZSI6IjhmYTUwMWM1ZGQ5YWM5Yjg2ODE0NGM5ZmE1IjoiNWJiNDBlM2JiNzJiNDUwOTMyNGE3ZWRjODUyZjcyNTM1ZjFmNjI4MzE1NmU2M2Y2OTU5ZmZhZjM5ZGNkZTgwMCI6IjUxNmMwMDk1Y2MzZDg1ZmQ1NWU0OGRhMTdjNTkyZTBjNzAxNGI5ZGFhZmI4MmJkYyI6IjRiNDEwOTZkZmRiZTljYzFhYjYxMGY4ZjNlMDM4ZDE2IjoiRkFJTCIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDAwMDAwMDMwMjAxMDBBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiQkE3MzcxODVFNzE5MzEwNDkyRjM4QTVGMTI1MURBNTVGQUZCQzk0OTg0OEEwRCI6IkZDQUVDRTc0NkIzREI5QUQiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwMDAwMDAwNDAzMDIwMUEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiI1RDI1NjRCRjhFQUZFMUQ5OTUyNkVDMDE2RDFCRjA0MjRDRkJEMkNENjI4NDhGMzMiOiI2MEIyMjk1REYyNDI4M0U4IjoiMDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwMDAwMDAwNTA0MDMwMkEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiI4MUY2NjNENkM3Nzg3ODE3RjkyMDM2MDhCOTgyQUQxNURDMkJCRDg3RDc1NkY3OTIwNCI6IkY1NTFENjY4MkYyM0FBNDYiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDAwMDAwMDYwNTA0MDNBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiJDQUVGMUU4MjcyMTFCMDhGN0JEOTBGMDhDNzcyODhDMDcwQTRBMCI6IjhCM0E5MzNBNjNFNDk3QTAiOiIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRSIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICM1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDAwMDAwMDcwNjA1MDRBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiIyQUQzQkFEOTRGQzUyRTkyQkU0MzhFODI3QzEwMjNCOTZBOEE3NzI1IjoiOEZBMTdCQTdGMzMxREIwOSI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYiCisKK0NhbWVsbGlhLUNDTSB0ZXN0IHZlY3RvciBSRkMgNTUyOCAjNgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjAwMDAwMDA4MDcwNjA1QTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCIjoiRkVBNTQ4MEJBNTNGQThEM0MzNDQyMkFBQ0U0REU2N0ZGQTNCQjczQkFCIjoiQUIzNkExRUU0RkUwRkUyOCI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICM3CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDAwMDAwMDkwODA3MDZBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiNTQ1MzIwMjZFNTRDMTE5QThEMzZEOUVDNkUxRUQ5NzQxNkM4NzA4QzRCNUMyQyI6IkFDQUZBM0JDQ0Y3QTRFQkY5NTczIjoiMDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRSIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICM4CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDAwMDAwMEEwOTA4MDdBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiOEFEMTlCMDAxQTg3RDE0OEY0RDkyQkVGMzQ1MjVDQ0NFM0E2M0M2NTEyQTZGNTc1IjoiNzM4OEU0OTEzRUYxNDcwMUY0NDEiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYiCisKK0NhbWVsbGlhLUNDTSB0ZXN0IHZlY3RvciBSRkMgNTUyOCAjOQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjAwMDAwMDBCMEEwOTA4QTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IjVEQjA4RDYyNDA3RTZFMzFENjBGOUNBMkM2MDQ3NDIxOUFDMEJFNTBDMEQ0QTU3Nzg3IjoiOTRENkUyMzBDRDI1QzlGRUJGODciOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMxMAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjAwMDAwMDBDMEIwQTA5QTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCIjoiREIxMThDQ0VDMUI4NzYxQzg3N0NEODk2M0E2N0Q2RjNCQkJDNUMiOiJEMDkyOTlFQjExRjMxMkYyMzIzNyI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzExCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDAwMDAwMEQwQzBCMEFBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiI3Q0M4M0Q4REM0OTEwMzUyNUI0ODNEQzVDQTdFQTlBQjgxMkI3MDU2IjoiMDc5REFGRkFEQTE2Q0NDRjJDNEUiOiIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzEyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDAwMDAwMEUwRDBDMEJBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiIyQ0QzNUI4ODIwRDIzRTdBQTM1MUIwRTkyRkM3OTM2NzIzOEIyQ0M3NDgiOiJDQkI5NEMyOTQ3NzkzRDY0QUY3NSI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMxMworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjAwQTk3MDExMEUxOTI3QjE2MEI2QTMxQzFDIjoiNkI3RjQ2NDUwN0ZBRTQ5NiI6IkE0MzVENzI3MzQ4REREMjI5MDdGN0VCOEY1RkRCQjREOTM5REE2NTI0REI0RjYiOiI0NTU4QzAyRDI1QjEyN0VFIjoiQzZCNUYzRTZDQTIzMTFBRUY3NDcyQjIwM0U3MzVFQTU2MUFEQjE3RDU2QzVBMyIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMxNAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjAwODNDRDhDRTBDQjQyQjE2MEI2QTMxQzFDIjoiOTg2NjA1QjQzREYxNURFNyI6IjhBRTA1MjUwOEZCRUNBOTMyRTM0NkYwNUUwREMwREZCQ0Y5MzlFQUZGQTNFNTg3QyI6Ijg2N0Q2RTFDNDg3MDM4MDYiOiIwMUY2Q0U2NzY0QzU3NDQ4M0JCMDJFNkJCRjFFMEFCRDI2QTIyNTcyQjREODBFRTciCisKK0NhbWVsbGlhLUNDTSB0ZXN0IHZlY3RvciBSRkMgNTUyOCAjMTUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiRDc1QzI3NzgwNzhDQTkzRDk3MUY5NkZERTcyMEY0Q0QiOiIwMDVGNTQ5NTBCMThGMkIxNjBCNkEzMUMxQyI6IjQ4RjJFN0UxQTc2NzFBNTEiOiIwOEI2N0VFMjFDOEJGMjZFNDczRTQwODU5OUU5QzA4MzZENkFGMEJCMThERjU1NDY2QyI6IkE4MDg3OEE3OTA0NzZERTUiOiJDREYxRDg0MDZGQzJFOTAxNDk1Mzg5NzAwNUZCRkI4QkE1NzI3NkY5MjQwNDYwOEUwOCIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMxNgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjAwRUM2MDA4NjMzMTlBQjE2MEI2QTMxQzFDIjoiREU5N0RGM0I4Q0JENkQ4RTUwMzBEQTRDIjoiNjNCNzhCNDk2N0IxOUVEQkI3MzNDRDExMTRGNjRFQjIyNjA4OTMiOiI2OEMzNTQ4MjhEOTUwQ0M1IjoiQjAwNURDRkEwQjU5MTgxNDI2QTk2MTY4NUE5OTNEOEM0MzE4NUIiCisKK0NhbWVsbGlhLUNDTSB0ZXN0IHZlY3RvciBSRkMgNTUyOCAjMTcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiRDc1QzI3NzgwNzhDQTkzRDk3MUY5NkZERTcyMEY0Q0QiOiIwMDYwQ0ZGMUEzMUVBMUIxNjBCNkEzMUMxQyI6IkE1RUU5M0U0NTdERjA1NDY2RTc4MkRDRiI6IjBCQzZCQkUyQThCOTA5RjQ2MjlFRTZEQzE0OERBNDQ0MTBFMThBRjQiOiIzMTQ3MzgzMjc2RjY2QTlGIjoiMkUyMDIxMTI5ODEwNUYxMjlENUVEOTVCOTNGNzJEMzBCMkZBQ0NENyIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMxOAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjAwMEY4NUNEOTk1Qzk3QjE2MEI2QTMxQzFDIjoiMjRBQTFCRjlBNUNEODc2MTgyQTI1MDc0IjoiMjIyQUQ2MzJGQTMxRDZBRjk3MEMzNDVGN0U3N0NBM0JEMERDMjVCMzQwIjoiQTFBM0QzMUY4RDRCNDRCNyI6IjI2NDU5NDFFNzU2MzJEMzQ5MUFGMEZDMEM5ODc2QzNCRTRBQTc0NjhDOSIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMxOQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjAwQzI5QjJDQUFDNENEQjE2MEI2QTMxQzFDIjoiNjkxOTQ2QjlDQTA3QkU4NyI6IjA1QjhFMUI5QzQ5Q0ZENTZDRjEzMEFBNjI1MURDMkVDQzA2Q0NDNTA4RkU2OTciOiJBMDA2NkQ1N0M4NEJFQzE4Mjc2OCI6IjA3MDEzNUE2NDM3QzlEQjEyMENENjFEOEY2QzM5QzNFQTEyNUZEOTVBMEQyM0QiCisKK0NhbWVsbGlhLUNDTSB0ZXN0IHZlY3RvciBSRkMgNTUyOCAjMjAKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiRDc1QzI3NzgwNzhDQTkzRDk3MUY5NkZERTcyMEY0Q0QiOiIwMDJDNkI3NTk1RUU2MkIxNjBCNkEzMUMxQyI6IkQwQzU0RUNCODQ2MjdEQzQiOiI1NENFQjk2OERFRTIzNjExNTc1RUMwMDNERkFBMUNENDg4NDlCREY1QUUyRURCNkIiOiI3RkE3NzVCMTUwRUQ0MzgzQzVBOSI6IkM4QzA4ODBFNkM2MzZFMjAwOTNERDY1OTQyMTdEMkUxODg3N0RCMjY0RTcxQTVDQyIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMyMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjAwQzUzQ0Q0QzJBQTI0QjE2MEI2QTMxQzFDIjoiRTI4NUUwRTQ4MDhDREEzRCI6IkIxNDA0NTQ2QkY2NjcyMTBDQTI4RTMwOUIzOUJENkNBN0U5RkM4Mjg1RkU2OThENDNDIjoiRDIwQTAyRTBCRENBRUQyMDEwRDMiOiJGNzVEQUEwNzEwQzRFNjQyOTc3OTREQzJCN0QyQTIwNzU3QjFBQTRFNDQ4MDAyRkZBQiIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMyMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjAwQkVFOTI2N0ZCQURDQjE2MEI2QTMxQzFDIjoiNkNBRUY5OTQxMTQxNTcwRDdDODEzNDA1IjoiOTRDODk1OUMxMTU2OUEyOTc4MzFBNzIxMDA1ODU3QUI2MUI4N0EiOiIyREVBMDkzNkI2RUI1RjYyNUY1RCI6IkMyMzg4MjJGQUM1Rjk4RkY5Mjk0MDVCMEFEMTI3QTRFNDE4NTRFIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzIzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMDBERkE4QjEyNDUwMDdCMTYwQjZBMzFDMUMiOiIzNkE1MkNGMTZCMTlBMjAzN0FCNzAxMUUiOiI1ODY5RTNBQUQyNDQ3Qzc0RTBGQzA1RjlBNEVBNzQ1NzdGNERFOENBIjoiODkyNDc2NDI5NkFEMDQxMTlDRTciOiI0REJGM0U3NzRBRDI0NUU1RDU4OTFGOUQxQzMyQTBBRTAyMkM4NUQ3IgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzI0CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMDAzQjhGRDhEM0E5MzdCMTYwQjZBMzFDMUMiOiJBNEQ0OTlGNzg0MTk3MjhDMTkxNzhCMEMiOiI0QjE5ODE1NjM5M0IwRjc3OTYwODZBQUZCNDU0RjhDM0YwMzRDQ0E5NjYiOiI5NDVGMUZDRUE3RTExQkVFNkEyRiI6IjlEQzlFREFFMkZGNURGODYzNkU4QzZERTBFRUQ1NUY3ODY3RTMzMzM3RCIKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5kZXMuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuZGVzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhYzkzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuZGVzLmRhdGEKQEAgLTAsMCArMSw1OTEgQEAKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDowOi0xCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjI6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0Ojc6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0Ojg6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0Ojk6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoxNTotMQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE2Oi0xCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MTc6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDozMTotMQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjMyOi0xCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MzM6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo0NzotMQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjQ4Oi0xCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6NDk6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjA6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MjpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6NzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6ODpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6OTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE1Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MTY6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoxNzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjMxOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MzI6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDozMzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjQ3Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6NDg6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo0OTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MDpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoxOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoyOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo3Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo4Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo5Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MTU6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoxNjpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE3Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MzE6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDozMjpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjMzOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6NDc6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo0ODpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjQ5Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MDpNQkVEVExTX1BBRERJTkdfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MjpNQkVEVExTX1BBRERJTkdfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo3Ok1CRURUTFNfUEFERElOR19aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0Ojg6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6OTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MTU6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE2Ok1CRURUTFNfUEFERElOR19aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoxNzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MzE6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjMyOk1CRURUTFNfUEFERElOR19aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDozMzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6NDc6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjQ4Ok1CRURUTFNfUEFERElOR19aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo0OTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDowOk1CRURUTFNfUEFERElOR19OT05FCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6ODpNQkVEVExTX1BBRERJTkdfTk9ORQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoxNjpNQkVEVExTX1BBRERJTkdfTk9ORQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDozMjpNQkVEVExTX1BBRERJTkdfTk9ORQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo0ODpNQkVEVExTX1BBRERJTkdfTk9ORQorCitERVMgVHJ5IGVuY3J5cHRpbmcgMSBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjY0OjE6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworREVTIFRyeSBlbmNyeXB0aW5nIDIgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfREVTX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORTo2NDoyOk1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0RFUyBUcnkgZW5jcnlwdGluZyA3IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6TUJFRFRMU19QQURESU5HX05PTkU6NjQ6NzpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitERVMgVHJ5IGVuY3J5cHRpbmcgOSBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjY0Ojk6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworREVTIFRyeSBlbmNyeXB0aW5nIDE1IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6TUJFRFRMU19QQURESU5HX05PTkU6NjQ6MTU6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworREVTIFRyeSBlbmNyeXB0aW5nIDE3IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6TUJFRFRMU19QQURESU5HX05PTkU6NjQ6MTc6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworREVTIFRyeSBlbmNyeXB0aW5nIDMxIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6TUJFRFRMU19QQURESU5HX05PTkU6NjQ6MzE6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworREVTIFRyeSBlbmNyeXB0aW5nIDMzIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6TUJFRFRMU19QQURESU5HX05PTkU6NjQ6MzM6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworREVTIFRyeSBlbmNyeXB0aW5nIDQ3IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6TUJFRFRMU19QQURESU5HX05PTkU6NjQ6NDc6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworREVTIFRyeSBlbmNyeXB0aW5nIDQ5IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6TUJFRFRMU19QQURESU5HX05PTkU6NjQ6NDk6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOjY0OjA6MDoKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19DQkM6NjQ6MTowOgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0NCQzo2NDowOjE6CisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0NCQzo2NDoxNjowOgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19DQkM6NjQ6MDoxNjoKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOjY0OjE6MTU6CisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0NCQzo2NDoxNToxOgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19DQkM6NjQ6MTU6NzoKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOjY0OjE2OjY6CisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0NCQzo2NDoxNzo2OgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19DQkM6NjQ6MTY6MTY6CisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODowOi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODoxOi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkM6IkRFUy1FREUtQ0JDIjoxMjg6MjotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4Ojc6LTEKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODo4Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkM6IkRFUy1FREUtQ0JDIjoxMjg6OTotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODoxNTotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODoxNjotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODoxNzotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODozMTotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODozMjotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODozMzotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODo0NzotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODo0ODotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODo0OTotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoxMjg6MDowOgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOjEyODoxOjA6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkM6MTI4OjA6MToKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkM6MTI4OjE2OjA6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOjEyODowOjE2OgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoxMjg6MToxNToKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkM6MTI4OjE1OjE6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOjEyODoxNTo3OgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoxMjg6MTY6NjoKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkM6MTI4OjE3OjY6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOjEyODoxNjoxNjoKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6IkRFUy1FREUzLUNCQyI6MTkyOjA6LTEKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6MTotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6MjotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6NzotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6ODotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6OTotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6IkRFUy1FREUzLUNCQyI6MTkyOjE1Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6MTY6LTEKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOiJERVMtRURFMy1DQkMiOjE5MjoxNzotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6IkRFUy1FREUzLUNCQyI6MTkyOjMxOi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6MzI6LTEKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOiJERVMtRURFMy1DQkMiOjE5MjozMzotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6IkRFUy1FREUzLUNCQyI6MTkyOjQ3Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6NDg6LTEKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOiJERVMtRURFMy1DQkMiOjE5Mjo0OTotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6MTkyOjA6MDoKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6MTkyOjE6MDoKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6MTkyOjA6MToKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOjE5MjoxNjowOgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6MTkyOjA6MTY6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoxOTI6MToxNToKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOjE5MjoxNToxOgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6MTkyOjE1Ojc6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoxOTI6MTY6NjoKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOjE5MjoxNzo2OgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6MTkyOjE2OjE2OgorCitERVMgRUNCIEVuY3J5cHQgdGVzdCB2ZWN0b3IgKE9wZW5TU0wpICMxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9ERVNfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAiOiI4Q0E2NERFOUMxQjEyM0E3IjowCisKK0RFUyBFQ0IgRW5jcnlwdCB0ZXN0IHZlY3RvciAoT3BlblNTTCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0RFU19FQ0I6TUJFRFRMU19FTkNSWVBUOiJGRkZGRkZGRkZGRkZGRkZGIjoiRkZGRkZGRkZGRkZGRkZGRiI6IjczNTlCMjE2M0U0RURDNTgiOjAKKworREVTIEVDQiBFbmNyeXB0IHRlc3QgdmVjdG9yIChPcGVuU1NMKSAjMworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfREVTX0VDQjpNQkVEVExTX0VOQ1JZUFQ6IkZFRENCQTk4NzY1NDMyMTAiOiIwMTIzNDU2Nzg5QUJDREVGIjoiRUQzOUQ5NTBGQTc0QkNDNCI6MAorCitERVMgRUNCIERlY3J5cHQgdGVzdCB2ZWN0b3IgKE9wZW5TU0wpICMxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9ERVNfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMCI6IjhDQTY0REU5QzFCMTIzQTciOiIwMDAwMDAwMDAwMDAwMDAwIjowCisKK0RFUyBFQ0IgRGVjcnlwdCB0ZXN0IHZlY3RvciAoT3BlblNTTCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0RFU19FQ0I6TUJFRFRMU19ERUNSWVBUOiJGRkZGRkZGRkZGRkZGRkZGIjoiNzM1OUIyMTYzRTRFREM1OCI6IkZGRkZGRkZGRkZGRkZGRkYiOjAKKworREVTIEVDQiBEZWNyeXB0IHRlc3QgdmVjdG9yIChPcGVuU1NMKSAjMworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfREVTX0VDQjpNQkVEVExTX0RFQ1JZUFQ6IjQzMjk3RkFEMzhFMzczRkUiOiJFQTY3NkIyQ0I3REIyQjdBIjoiNzYyNTE0QjgyOUJGNDg2QSI6MAorCitERVMzLUVERSBFQ0IgRW5jcnlwdCB0ZXN0IHZlY3RvciAoT3BlblNTTCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkYiOiIwMDAwMDAwMDAwMDAwMDAwIjoiOTI5NUI1OUJCMzg0NzM2RSI6MAorCitERVMzLUVERSBFQ0IgRW5jcnlwdCB0ZXN0IHZlY3RvciAoT3BlblNTTCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfRUNCOk1CRURUTFNfRU5DUllQVDoiRkZGRkZGRkZGRkZGRkZGRjMwMDAwMDAwMDAwMDAwMDAiOiJGRkZGRkZGRkZGRkZGRkZGIjoiMTk5RTlENkRGMzlBQTgxNiI6MAorCitERVMzLUVERSBFQ0IgRGVjcnlwdCB0ZXN0IHZlY3RvciAoT3BlblNTTCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkYiOiI5Mjk1QjU5QkIzODQ3MzZFIjoiMDAwMDAwMDAwMDAwMDAwMCI6MAorCitERVMzLUVERSBFQ0IgRGVjcnlwdCB0ZXN0IHZlY3RvciAoT3BlblNTTCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfRUNCOk1CRURUTFNfREVDUllQVDoiRkZGRkZGRkZGRkZGRkZGRjMwMDAwMDAwMDAwMDAwMDAiOiIxOTlFOUQ2REYzOUFBODE2IjoiRkZGRkZGRkZGRkZGRkZGRiI6MApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA3MzUyNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuZnVuY3Rpb24KQEAgLTAsMCArMSw3MTQgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvY2lwaGVyLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaW5jbHVkZSAibWJlZHRscy9nY20uaCIKKyNlbmRpZgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19jaXBoZXJfbGlzdCggKQoreworICAgIGNvbnN0IGludCAqY2lwaGVyX3R5cGU7CisKKyAgICBmb3IoIGNpcGhlcl90eXBlID0gbWJlZHRsc19jaXBoZXJfbGlzdCgpOyAqY2lwaGVyX3R5cGUgIT0gMDsgY2lwaGVyX3R5cGUrKyApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggKmNpcGhlcl90eXBlICkgIT0gTlVMTCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBjaXBoZXJfbnVsbF9hcmdzKCApCit7CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eDsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmluZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggKiggbWJlZHRsc19jaXBoZXJfbGlzdCgpICkgKTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxXSA9IHsgMCB9OworICAgIHNpemVfdCBvbGVuOworCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCBOVUxMICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmN0eCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9nZXRfY2lwaGVyX21vZGUoIE5VTEwgKSA9PSBNQkVEVExTX01PREVfTk9ORSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9nZXRfY2lwaGVyX21vZGUoICZjdHggKSA9PSBNQkVEVExTX01PREVfTk9ORSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2dldF9pdl9zaXplKCBOVUxMICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9nZXRfaXZfc2l6ZSggJmN0eCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fc3RyaW5nKCBOVUxMICkgPT0gTlVMTCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LCBOVUxMICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3NldHVwKCBOVUxMLCBpbmZvICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfc2V0a2V5KCBOVUxMLCBidWYsIDAsIE1CRURUTFNfRU5DUllQVCApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoICZjdHgsIGJ1ZiwgMCwgTUJFRFRMU19FTkNSWVBUICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfc2V0X2l2KCBOVUxMLCBidWYsIDAgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY3R4LCBidWYsIDAgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9yZXNldCggTlVMTCApID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9yZXNldCggJmN0eCApID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl91cGRhdGVfYWQoIE5VTEwsIGJ1ZiwgMCApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl91cGRhdGVfYWQoICZjdHgsIGJ1ZiwgMCApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworI2VuZGlmCisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfdXBkYXRlKCBOVUxMLCBidWYsIDAsIGJ1ZiwgJm9sZW4gKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY3R4LCBidWYsIDAsIGJ1ZiwgJm9sZW4gKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9maW5pc2goIE5VTEwsIGJ1ZiwgJm9sZW4gKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfZmluaXNoKCAmY3R4LCBidWYsICZvbGVuICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3dyaXRlX3RhZyggTlVMTCwgYnVmLCBvbGVuICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3dyaXRlX3RhZyggJmN0eCwgYnVmLCBvbGVuICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY2hlY2tfdGFnKCBOVUxMLCBidWYsIG9sZW4gKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY2hlY2tfdGFnKCAmY3R4LCBidWYsIG9sZW4gKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKyNlbmRpZgorfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MgKi8KK3ZvaWQgY2lwaGVyX3NwZWNpYWxfYmVoYXZpb3VycyggKQoreworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm87CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0WzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFszMl07CisgICAgdW5zaWduZWQgY2hhciBpdlszMl07CisgICAgc2l6ZV90IG9sZW4gPSAwOworCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eCApOworICAgIG1lbXNldCggaW5wdXQsIDAsIHNpemVvZiggaW5wdXQgKSApOworICAgIG1lbXNldCggb3V0cHV0LCAwLCBzaXplb2YoIG91dHB1dCApICk7CisgICAgbWVtc2V0KCBpdiwgMCwgc2l6ZW9mKCBpdiApICk7CisKKyAgICAvKiBDaGVjayBhbmQgZ2V0IGluZm8gc3RydWN0dXJlcyAqLworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCICk7CisgICAgVEVTVF9BU1NFUlQoIE5VTEwgIT0gY2lwaGVyX2luZm8gKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LCBjaXBoZXJfaW5mbyApICk7CisKKyAgICAvKiBJViB0b28gYmlnICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3NldF9pdiggJmN0eCwgaXYsIE1CRURUTFNfTUFYX0lWX0xFTkdUSCArIDEgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgLyogSVYgdG9vIHNtYWxsICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3NldF9pdiggJmN0eCwgaXYsIDAgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qIFVwZGF0ZSBFQ0Igd2l0aCBwYXJ0aWFsIGJsb2NrICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmN0eCwgaW5wdXQsIDEsIG91dHB1dCwgJm9sZW4gKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRCApOworCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZW5jX2RlY19idWYoIGludCBjaXBoZXJfaWQsIGNoYXIgKmNpcGhlcl9zdHJpbmcsIGludCBrZXlfbGVuLAorICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aF92YWwsIGludCBwYWRfbW9kZSApCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IGxlbmd0aF92YWwsIG91dGxlbiwgdG90YWxfbGVuLCBpLCBibG9ja19zaXplOworICAgIHVuc2lnbmVkIGNoYXIga2V5WzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkWzEzXTsKKyAgICB1bnNpZ25lZCBjaGFyIHRhZ1sxNl07CisgICAgdW5zaWduZWQgY2hhciBpbmJ1Zls2NF07CisgICAgdW5zaWduZWQgY2hhciBlbmNidWZbNjRdOworICAgIHVuc2lnbmVkIGNoYXIgZGVjYnVmWzY0XTsKKworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm87CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eF9kZWM7CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eF9lbmM7CisKKyAgICAvKgorICAgICAqIFByZXBhcmUgY29udGV4dHMKKyAgICAgKi8KKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4X2RlYyApOworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjdHhfZW5jICk7CisKKyAgICBtZW1zZXQoIGtleSwgMHgyYSwgc2l6ZW9mKCBrZXkgKSApOworCisgICAgLyogQ2hlY2sgYW5kIGdldCBpbmZvIHN0cnVjdHVyZXMgKi8KKyAgICBjaXBoZXJfaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCBjaXBoZXJfaWQgKTsKKyAgICBURVNUX0FTU0VSVCggTlVMTCAhPSBjaXBoZXJfaW5mbyApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fc3RyaW5nKCBjaXBoZXJfc3RyaW5nICkgPT0gY2lwaGVyX2luZm8gKTsKKworICAgIC8qIEluaXRpYWxpc2UgZW5jIGFuZCBkZWMgY29udGV4dHMgKi8KKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmN0eF9kZWMsIGNpcGhlcl9pbmZvICkgKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmN0eF9lbmMsIGNpcGhlcl9pbmZvICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eF9kZWMsIGtleSwga2V5X2xlbiwgTUJFRFRMU19ERUNSWVBUICkgKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoICZjdHhfZW5jLCBrZXksIGtleV9sZW4sIE1CRURUTFNfRU5DUllQVCApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HKQorICAgIGlmKCAtMSAhPSBwYWRfbW9kZSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlKCAmY3R4X2RlYywgcGFkX21vZGUgKSApOworICAgICAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlKCAmY3R4X2VuYywgcGFkX21vZGUgKSApOworICAgIH0KKyNlbHNlCisgICAgKHZvaWQpIHBhZF9tb2RlOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HICovCisKKyAgICAvKgorICAgICAqIERvIGEgZmV3IGVuY29kZS9kZWNvZGUgY3ljbGVzCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IDM7IGkrKyApCisgICAgeworICAgIG1lbXNldCggaXYgLCAweDAwICsgaSwgc2l6ZW9mKCBpdiApICk7CisgICAgbWVtc2V0KCBhZCwgMHgxMCArIGksIHNpemVvZiggYWQgKSApOworICAgIG1lbXNldCggaW5idWYsIDB4MjAgKyBpLCBzaXplb2YoIGluYnVmICkgKTsKKworICAgIG1lbXNldCggZW5jYnVmLCAwLCBzaXplb2YoIGVuY2J1ZiApICk7CisgICAgbWVtc2V0KCBkZWNidWYsIDAsIHNpemVvZiggZGVjYnVmICkgKTsKKyAgICBtZW1zZXQoIHRhZywgMCwgc2l6ZW9mKCB0YWcgKSApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY3R4X2RlYywgaXYsIHNpemVvZiggaXYgKSApICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY3R4X2VuYywgaXYsIHNpemVvZiggaXYgKSApICk7CisKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9yZXNldCggJmN0eF9kZWMgKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCAmY3R4X2VuYyApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfdXBkYXRlX2FkKCAmY3R4X2RlYywgYWQsIHNpemVvZiggYWQgKSAtIGkgKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZCggJmN0eF9lbmMsIGFkLCBzaXplb2YoIGFkICkgLSBpICkgKTsKKyNlbmRpZgorCisgICAgYmxvY2tfc2l6ZSA9IG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCAmY3R4X2VuYyApOworICAgIFRFU1RfQVNTRVJUKCBibG9ja19zaXplICE9IDAgKTsKKworICAgIC8qIGVuY29kZSBsZW5ndGggbnVtYmVyIG9mIGJ5dGVzIGZyb20gaW5idWYgKi8KKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjdHhfZW5jLCBpbmJ1ZiwgbGVuZ3RoLCBlbmNidWYsICZvdXRsZW4gKSApOworICAgIHRvdGFsX2xlbiA9IG91dGxlbjsKKworICAgIFRFU1RfQVNTRVJUKCB0b3RhbF9sZW4gPT0gbGVuZ3RoIHx8CisgICAgICAgICAgICAgICAgICggdG90YWxfbGVuICUgYmxvY2tfc2l6ZSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgdG90YWxfbGVuIDwgbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgICAgdG90YWxfbGVuICsgYmxvY2tfc2l6ZSA+IGxlbmd0aCApICk7CisKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9maW5pc2goICZjdHhfZW5jLCBlbmNidWYgKyBvdXRsZW4sICZvdXRsZW4gKSApOworICAgIHRvdGFsX2xlbiArPSBvdXRsZW47CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfd3JpdGVfdGFnKCAmY3R4X2VuYywgdGFnLCBzaXplb2YoIHRhZyApICkgKTsKKyNlbmRpZgorCisgICAgVEVTVF9BU1NFUlQoIHRvdGFsX2xlbiA9PSBsZW5ndGggfHwKKyAgICAgICAgICAgICAgICAgKCB0b3RhbF9sZW4gJSBibG9ja19zaXplID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICB0b3RhbF9sZW4gPiBsZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgICB0b3RhbF9sZW4gPD0gbGVuZ3RoICsgYmxvY2tfc2l6ZSApICk7CisKKyAgICAvKiBkZWNvZGUgdGhlIHByZXZpb3VzbHkgZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjdHhfZGVjLCBlbmNidWYsIHRvdGFsX2xlbiwgZGVjYnVmLCAmb3V0bGVuICkgKTsKKyAgICB0b3RhbF9sZW4gPSBvdXRsZW47CisKKyAgICBURVNUX0FTU0VSVCggdG90YWxfbGVuID09IGxlbmd0aCB8fAorICAgICAgICAgICAgICAgICAoIHRvdGFsX2xlbiAlIGJsb2NrX3NpemUgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgIHRvdGFsX2xlbiA8IGxlbmd0aCAmJgorICAgICAgICAgICAgICAgICAgIHRvdGFsX2xlbiArIGJsb2NrX3NpemUgPj0gbGVuZ3RoICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggJmN0eF9kZWMsIGRlY2J1ZiArIG91dGxlbiwgJm91dGxlbiApICk7CisgICAgdG90YWxfbGVuICs9IG91dGxlbjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9jaGVja190YWcoICZjdHhfZGVjLCB0YWcsIHNpemVvZiggdGFnICkgKSApOworI2VuZGlmCisKKyAgICAvKiBjaGVjayByZXN1bHQgKi8KKyAgICBURVNUX0FTU0VSVCggdG90YWxfbGVuID09IGxlbmd0aCApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1lbWNtcChpbmJ1ZiwgZGVjYnVmLCBsZW5ndGgpICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBEb25lCisgICAgICovCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHhfZGVjICk7CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eF9lbmMgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZW5jX2ZhaWwoIGludCBjaXBoZXJfaWQsIGludCBwYWRfbW9kZSwgaW50IGtleV9sZW4sCisgICAgICAgICAgICAgICBpbnQgbGVuZ3RoX3ZhbCwgaW50IHJldCApCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IGxlbmd0aF92YWw7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdOworCisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4OworCisgICAgdW5zaWduZWQgY2hhciBpbmJ1Zls2NF07CisgICAgdW5zaWduZWQgY2hhciBlbmNidWZbNjRdOworCisgICAgc2l6ZV90IG91dGxlbiA9IDA7CisKKyAgICBtZW1zZXQoIGtleSwgMCwgMzIgKTsKKyAgICBtZW1zZXQoIGl2ICwgMCwgMTYgKTsKKworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjdHggKTsKKworICAgIG1lbXNldCggaW5idWYsIDUsIDY0ICk7CisgICAgbWVtc2V0KCBlbmNidWYsIDAsIDY0ICk7CisKKyAgICAvKiBDaGVjayBhbmQgZ2V0IGluZm8gc3RydWN0dXJlcyAqLworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcl9pZCApOworICAgIFRFU1RfQVNTRVJUKCBOVUxMICE9IGNpcGhlcl9pbmZvICk7CisKKyAgICAvKiBJbml0aWFsaXNlIGNvbnRleHQgKi8KKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmN0eCwgY2lwaGVyX2luZm8gKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eCwga2V5LCBrZXlfbGVuLCBNQkVEVExTX0VOQ1JZUFQgKSApOworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcpCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0X3BhZGRpbmdfbW9kZSggJmN0eCwgcGFkX21vZGUgKSApOworI2Vsc2UKKyAgICAodm9pZCkgcGFkX21vZGU7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcgKi8KKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoICZjdHgsIGl2LCAxNiApICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfcmVzZXQoICZjdHggKSApOworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl91cGRhdGVfYWQoICZjdHgsIE5VTEwsIDAgKSApOworI2VuZGlmCisKKyAgICAvKiBlbmNvZGUgbGVuZ3RoIG51bWJlciBvZiBieXRlcyBmcm9tIGluYnVmICovCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY3R4LCBpbmJ1ZiwgbGVuZ3RoLCBlbmNidWYsICZvdXRsZW4gKSApOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gbWJlZHRsc19jaXBoZXJfZmluaXNoKCAmY3R4LCBlbmNidWYgKyBvdXRsZW4sICZvdXRsZW4gKSApOworCisgICAgLyogZG9uZSAqLworZXhpdDoKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGRlY19lbXB0eV9idWYoKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5WzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XTsKKworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHhfZGVjOworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm87CisKKyAgICB1bnNpZ25lZCBjaGFyIGVuY2J1Zls2NF07CisgICAgdW5zaWduZWQgY2hhciBkZWNidWZbNjRdOworCisgICAgc2l6ZV90IG91dGxlbiA9IDA7CisKKyAgICBtZW1zZXQoIGtleSwgMCwgMzIgKTsKKyAgICBtZW1zZXQoIGl2ICwgMCwgMTYgKTsKKworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjdHhfZGVjICk7CisKKyAgICBtZW1zZXQoIGVuY2J1ZiwgMCwgNjQgKTsKKyAgICBtZW1zZXQoIGRlY2J1ZiwgMCwgNjQgKTsKKworICAgIC8qIEluaXRpYWxpc2UgY29udGV4dCAqLworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDICk7CisgICAgVEVTVF9BU1NFUlQoIE5VTEwgIT0gY2lwaGVyX2luZm8pOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHhfZGVjLCBjaXBoZXJfaW5mbyApICk7CisKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoICZjdHhfZGVjLCBrZXksIDEyOCwgTUJFRFRMU19ERUNSWVBUICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldF9pdiggJmN0eF9kZWMsIGl2LCAxNiApICk7CisKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9yZXNldCggJmN0eF9kZWMgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZCggJmN0eF9kZWMsIE5VTEwsIDAgKSApOworI2VuZGlmCisKKyAgICAvKiBkZWNvZGUgMC1ieXRlIHN0cmluZyAqLworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmN0eF9kZWMsIGVuY2J1ZiwgMCwgZGVjYnVmLCAmb3V0bGVuICkgKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBvdXRsZW4gKTsKKyAgICBURVNUX0FTU0VSVCggTUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQgPT0gbWJlZHRsc19jaXBoZXJfZmluaXNoKAorICAgICAgICAgICAgICAgICAmY3R4X2RlYywgZGVjYnVmICsgb3V0bGVuLCAmb3V0bGVuICkgKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBvdXRsZW4gKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4X2RlYyApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlbmNfZGVjX2J1Zl9tdWx0aXBhcnQoIGludCBjaXBoZXJfaWQsIGludCBrZXlfbGVuLCBpbnQgZmlyc3RfbGVuZ3RoX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Vjb25kX2xlbmd0aF92YWwgKQoreworICAgIHNpemVfdCBmaXJzdF9sZW5ndGggPSBmaXJzdF9sZW5ndGhfdmFsOworICAgIHNpemVfdCBzZWNvbmRfbGVuZ3RoID0gc2Vjb25kX2xlbmd0aF92YWw7CisgICAgc2l6ZV90IGxlbmd0aCA9IGZpcnN0X2xlbmd0aCArIHNlY29uZF9sZW5ndGg7CisgICAgc2l6ZV90IGJsb2NrX3NpemU7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdOworCisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eF9kZWM7CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eF9lbmM7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKworICAgIHVuc2lnbmVkIGNoYXIgaW5idWZbNjRdOworICAgIHVuc2lnbmVkIGNoYXIgZW5jYnVmWzY0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGRlY2J1Zls2NF07CisKKyAgICBzaXplX3Qgb3V0bGVuID0gMDsKKyAgICBzaXplX3QgdG90YWxvdXRsZW4gPSAwOworCisgICAgbWVtc2V0KCBrZXksIDAsIDMyICk7CisgICAgbWVtc2V0KCBpdiAsIDAsIDE2ICk7CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4X2RlYyApOworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjdHhfZW5jICk7CisKKyAgICBtZW1zZXQoIGluYnVmLCA1LCA2NCApOworICAgIG1lbXNldCggZW5jYnVmLCAwLCA2NCApOworICAgIG1lbXNldCggZGVjYnVmLCAwLCA2NCApOworCisgICAgLyogSW5pdGlhbGlzZSBlbmMgYW5kIGRlYyBjb250ZXh0cyAqLworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcl9pZCApOworICAgIFRFU1RfQVNTRVJUKCBOVUxMICE9IGNpcGhlcl9pbmZvKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4X2RlYywgY2lwaGVyX2luZm8gKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4X2VuYywgY2lwaGVyX2luZm8gKSApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY3R4X2RlYywga2V5LCBrZXlfbGVuLCBNQkVEVExTX0RFQ1JZUFQgKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eF9lbmMsIGtleSwga2V5X2xlbiwgTUJFRFRMU19FTkNSWVBUICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldF9pdiggJmN0eF9kZWMsIGl2LCAxNiApICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY3R4X2VuYywgaXYsIDE2ICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCAmY3R4X2RlYyApICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfcmVzZXQoICZjdHhfZW5jICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl91cGRhdGVfYWQoICZjdHhfZGVjLCBOVUxMLCAwICkgKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl91cGRhdGVfYWQoICZjdHhfZW5jLCBOVUxMLCAwICkgKTsKKyNlbmRpZgorCisgICAgYmxvY2tfc2l6ZSA9IG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCAmY3R4X2VuYyApOworICAgIFRFU1RfQVNTRVJUKCBibG9ja19zaXplICE9IDAgKTsKKworICAgIC8qIGVuY29kZSBsZW5ndGggbnVtYmVyIG9mIGJ5dGVzIGZyb20gaW5idWYgKi8KKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjdHhfZW5jLCBpbmJ1ZiwgZmlyc3RfbGVuZ3RoLCBlbmNidWYsICZvdXRsZW4gKSApOworICAgIHRvdGFsb3V0bGVuID0gb3V0bGVuOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmN0eF9lbmMsIGluYnVmICsgZmlyc3RfbGVuZ3RoLCBzZWNvbmRfbGVuZ3RoLCBlbmNidWYgKyB0b3RhbG91dGxlbiwgJm91dGxlbiApICk7CisgICAgdG90YWxvdXRsZW4gKz0gb3V0bGVuOworICAgIFRFU1RfQVNTRVJUKCB0b3RhbG91dGxlbiA9PSBsZW5ndGggfHwKKyAgICAgICAgICAgICAgICAgKCB0b3RhbG91dGxlbiAlIGJsb2NrX3NpemUgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgIHRvdGFsb3V0bGVuIDwgbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgICAgdG90YWxvdXRsZW4gKyBibG9ja19zaXplID4gbGVuZ3RoICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggJmN0eF9lbmMsIGVuY2J1ZiArIHRvdGFsb3V0bGVuLCAmb3V0bGVuICkgKTsKKyAgICB0b3RhbG91dGxlbiArPSBvdXRsZW47CisgICAgVEVTVF9BU1NFUlQoIHRvdGFsb3V0bGVuID09IGxlbmd0aCB8fAorICAgICAgICAgICAgICAgICAoIHRvdGFsb3V0bGVuICUgYmxvY2tfc2l6ZSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgdG90YWxvdXRsZW4gPiBsZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgICB0b3RhbG91dGxlbiA8PSBsZW5ndGggKyBibG9ja19zaXplICkgKTsKKworICAgIC8qIGRlY29kZSB0aGUgcHJldmlvdXNseSBlbmNvZGVkIHN0cmluZyAqLworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmN0eF9kZWMsIGVuY2J1ZiwgdG90YWxvdXRsZW4sIGRlY2J1ZiwgJm91dGxlbiApICk7CisgICAgdG90YWxvdXRsZW4gPSBvdXRsZW47CisKKyAgICBURVNUX0FTU0VSVCggdG90YWxvdXRsZW4gPT0gbGVuZ3RoIHx8CisgICAgICAgICAgICAgICAgICggdG90YWxvdXRsZW4gJSBibG9ja19zaXplID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICB0b3RhbG91dGxlbiA8IGxlbmd0aCAmJgorICAgICAgICAgICAgICAgICAgIHRvdGFsb3V0bGVuICsgYmxvY2tfc2l6ZSA+PSBsZW5ndGggKSApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfZmluaXNoKCAmY3R4X2RlYywgZGVjYnVmICsgb3V0bGVuLCAmb3V0bGVuICkgKTsKKyAgICB0b3RhbG91dGxlbiArPSBvdXRsZW47CisKKyAgICBURVNUX0FTU0VSVCggdG90YWxvdXRsZW4gPT0gbGVuZ3RoICk7CisKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtZW1jbXAoaW5idWYsIGRlY2J1ZiwgbGVuZ3RoKSApOworCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHhfZGVjICk7CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eF9lbmMgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZGVjcnlwdF90ZXN0X3ZlYyggaW50IGNpcGhlcl9pZCwgaW50IHBhZF9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfa2V5LCBjaGFyICpoZXhfaXYsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9jaXBoZXIsIGNoYXIgKmhleF9jbGVhciwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2FkLCBjaGFyICpoZXhfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmluaXNoX3Jlc3VsdCwgaW50IHRhZ19yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5WzUwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2WzUwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlclsyMDBdOworICAgIHVuc2lnbmVkIGNoYXIgY2xlYXJbMjAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkWzIwMF07CisgICAgdW5zaWduZWQgY2hhciB0YWdbMjBdOworICAgIHNpemVfdCBrZXlfbGVuLCBpdl9sZW4sIGNpcGhlcl9sZW4sIGNsZWFyX2xlbjsKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgc2l6ZV90IGFkX2xlbiwgdGFnX2xlbjsKKyNlbmRpZgorICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjAwXTsKKyAgICBzaXplX3Qgb3V0bGVuLCB0b3RhbF9sZW47CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4ICk7CisKKyAgICBtZW1zZXQoIGtleSwgMHgwMCwgc2l6ZW9mKCBrZXkgKSApOworICAgIG1lbXNldCggaXYsIDB4MDAsIHNpemVvZiggaXYgKSApOworICAgIG1lbXNldCggY2lwaGVyLCAweDAwLCBzaXplb2YoIGNpcGhlciApICk7CisgICAgbWVtc2V0KCBjbGVhciwgMHgwMCwgc2l6ZW9mKCBjbGVhciApICk7CisgICAgbWVtc2V0KCBhZCwgMHgwMCwgc2l6ZW9mKCBhZCApICk7CisgICAgbWVtc2V0KCB0YWcsIDB4MDAsIHNpemVvZiggdGFnICkgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgc2l6ZW9mKCBvdXRwdXQgKSApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXksIGhleF9rZXkgKTsKKyAgICBpdl9sZW4gPSB1bmhleGlmeSggaXYsIGhleF9pdiApOworICAgIGNpcGhlcl9sZW4gPSB1bmhleGlmeSggY2lwaGVyLCBoZXhfY2lwaGVyICk7CisgICAgY2xlYXJfbGVuID0gdW5oZXhpZnkoIGNsZWFyLCBoZXhfY2xlYXIgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgYWRfbGVuID0gdW5oZXhpZnkoIGFkLCBoZXhfYWQgKTsKKyAgICB0YWdfbGVuID0gdW5oZXhpZnkoIHRhZywgaGV4X3RhZyApOworI2Vsc2UKKyAgICAoKHZvaWQpIGhleF9hZCk7CisgICAgKCh2b2lkKSBoZXhfdGFnKTsKKyNlbmRpZgorCisgICAgLyogUHJlcGFyZSBjb250ZXh0ICovCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyX2lkICkgKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eCwga2V5LCA4ICoga2V5X2xlbiwgTUJFRFRMU19ERUNSWVBUICkgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HKQorICAgIGlmKCBwYWRfbW9kZSAhPSAtMSApCisgICAgICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUoICZjdHgsIHBhZF9tb2RlICkgKTsKKyNlbHNlCisgICAgKHZvaWQpIHBhZF9tb2RlOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HICovCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY3R4LCBpdiwgaXZfbGVuICkgKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9yZXNldCggJmN0eCApICk7CisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZCggJmN0eCwgYWQsIGFkX2xlbiApICk7CisjZW5kaWYKKworICAgIC8qIGRlY29kZSBidWZmZXIgYW5kIGNoZWNrIHRhZyAqLworICAgIHRvdGFsX2xlbiA9IDA7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY3R4LCBjaXBoZXIsIGNpcGhlcl9sZW4sIG91dHB1dCwgJm91dGxlbiApICk7CisgICAgdG90YWxfbGVuICs9IG91dGxlbjsKKyAgICBURVNUX0FTU0VSVCggZmluaXNoX3Jlc3VsdCA9PSBtYmVkdGxzX2NpcGhlcl9maW5pc2goICZjdHgsIG91dHB1dCArIG91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0bGVuICkgKTsKKyAgICB0b3RhbF9sZW4gKz0gb3V0bGVuOworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBURVNUX0FTU0VSVCggdGFnX3Jlc3VsdCA9PSBtYmVkdGxzX2NpcGhlcl9jaGVja190YWcoICZjdHgsIHRhZywgdGFnX2xlbiApICk7CisjZW5kaWYKKworICAgIC8qIGNoZWNrIHBsYWludGV4dCBvbmx5IGlmIGV2ZXJ5dGhpbmcgd2VudCBmaW5lICovCisgICAgaWYoIDAgPT0gZmluaXNoX3Jlc3VsdCAmJiAwID09IHRhZ19yZXN1bHQgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHRvdGFsX2xlbiA9PSBjbGVhcl9sZW4gKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWVtY21wKCBvdXRwdXQsIGNsZWFyLCBjbGVhcl9sZW4gKSApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9BRUFEICovCit2b2lkIGF1dGhfY3J5cHRfdHYoIGludCBjaXBoZXJfaWQsIGNoYXIgKmhleF9rZXksIGNoYXIgKmhleF9pdiwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2FkLCBjaGFyICpoZXhfY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfdGFnLCBjaGFyICpoZXhfY2xlYXIgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBrZXlbNTBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZbNTBdOworICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVyWzIwMF07CisgICAgdW5zaWduZWQgY2hhciBjbGVhclsyMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYWRbMjAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHRhZ1syMF07CisgICAgdW5zaWduZWQgY2hhciBteV90YWdbMjBdOworICAgIHNpemVfdCBrZXlfbGVuLCBpdl9sZW4sIGNpcGhlcl9sZW4sIGNsZWFyX2xlbiwgYWRfbGVuLCB0YWdfbGVuOworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjAwXTsKKyAgICBzaXplX3Qgb3V0bGVuOworCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eCApOworCisgICAgbWVtc2V0KCBrZXksICAgIDB4MDAsIHNpemVvZigga2V5ICAgICkgKTsKKyAgICBtZW1zZXQoIGl2LCAgICAgMHgwMCwgc2l6ZW9mKCBpdiAgICAgKSApOworICAgIG1lbXNldCggY2lwaGVyLCAweDAwLCBzaXplb2YoIGNpcGhlciApICk7CisgICAgbWVtc2V0KCBjbGVhciwgIDB4MDAsIHNpemVvZiggY2xlYXIgICkgKTsKKyAgICBtZW1zZXQoIGFkLCAgICAgMHgwMCwgc2l6ZW9mKCBhZCAgICAgKSApOworICAgIG1lbXNldCggdGFnLCAgICAweDAwLCBzaXplb2YoIHRhZyAgICApICk7CisgICAgbWVtc2V0KCBteV90YWcsIDB4RkYsIHNpemVvZiggbXlfdGFnICkgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHhGRiwgc2l6ZW9mKCBvdXRwdXQgKSApOworCisgICAga2V5X2xlbiAgICAgPSB1bmhleGlmeSgga2V5LCAgICBoZXhfa2V5ICAgICApOworICAgIGl2X2xlbiAgICAgID0gdW5oZXhpZnkoIGl2LCAgICAgaGV4X2l2ICAgICAgKTsKKyAgICBjaXBoZXJfbGVuICA9IHVuaGV4aWZ5KCBjaXBoZXIsIGhleF9jaXBoZXIgICk7CisgICAgYWRfbGVuICAgICAgPSB1bmhleGlmeSggYWQsICAgICBoZXhfYWQgICAgICApOworICAgIHRhZ19sZW4gICAgID0gdW5oZXhpZnkoIHRhZywgICAgaGV4X3RhZyAgICAgKTsKKworICAgIC8qIFByZXBhcmUgY29udGV4dCAqLworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcl9pZCApICkgKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoICZjdHgsIGtleSwgOCAqIGtleV9sZW4sIE1CRURUTFNfREVDUllQVCApICk7CisKKyAgICAvKiBkZWNvZGUgYnVmZmVyIGFuZCBjaGVjayB0YWcgKi8KKyAgICByZXQgPSBtYmVkdGxzX2NpcGhlcl9hdXRoX2RlY3J5cHQoICZjdHgsIGl2LCBpdl9sZW4sIGFkLCBhZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyLCBjaXBoZXJfbGVuLCBvdXRwdXQsICZvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnLCB0YWdfbGVuICk7CisKKyAgICAvKiBtYWtlIHN1cmUgd2UgZGlkbid0IG92ZXJ3cml0ZSAqLworICAgIFRFU1RfQVNTRVJUKCBvdXRwdXRbb3V0bGVuICsgMF0gPT0gMHhGRiApOworICAgIFRFU1RfQVNTRVJUKCBvdXRwdXRbb3V0bGVuICsgMV0gPT0gMHhGRiApOworCisgICAgLyogbWFrZSBzdXJlIHRoZSBtZXNzYWdlIGlzIHJlamVjdGVkIGlmIGl0IHNob3VsZCBiZSAqLworICAgIGlmKCBzdHJjbXAoIGhleF9jbGVhciwgIkZBSUwiICkgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggcmV0ID09IE1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyogb3RoZXJ3aXNlLCBtYWtlIHN1cmUgaXQgd2FzIGRlY3J5cHRlZCBwcm9wZXJseSAqLworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworCisgICAgY2xlYXJfbGVuID0gdW5oZXhpZnkoIGNsZWFyLCAgaGV4X2NsZWFyICAgKTsKKyAgICBURVNUX0FTU0VSVCggb3V0bGVuID09IGNsZWFyX2xlbiApOworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG91dHB1dCwgY2xlYXIsIGNsZWFyX2xlbiApID09IDAgKTsKKworICAgIC8qIHRoZW4gZW5jcnlwdCB0aGUgY2xlYXIgYW5kIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHNhbWUgY2lwaGVydGV4dCBhbmQgdGFnICovCisgICAgbWVtc2V0KCBvdXRwdXQsIDB4RkYsIHNpemVvZiggb3V0cHV0ICkgKTsKKyAgICBvdXRsZW4gPSAwOworCisgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfYXV0aF9lbmNyeXB0KCAmY3R4LCBpdiwgaXZfbGVuLCBhZCwgYWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyLCBjbGVhcl9sZW4sIG91dHB1dCwgJm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteV90YWcsIHRhZ19sZW4gKTsKKyAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBvdXRsZW4gPT0gY2xlYXJfbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggb3V0cHV0LCBjaXBoZXIsIGNsZWFyX2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBteV90YWcsIHRhZywgdGFnX2xlbiApID09IDAgKTsKKworICAgIC8qIG1ha2Ugc3VyZSB3ZSBkaWRuJ3Qgb3ZlcndyaXRlICovCisgICAgVEVTVF9BU1NFUlQoIG91dHB1dFtvdXRsZW4gKyAwXSA9PSAweEZGICk7CisgICAgVEVTVF9BU1NFUlQoIG91dHB1dFtvdXRsZW4gKyAxXSA9PSAweEZGICk7CisgICAgVEVTVF9BU1NFUlQoIG15X3RhZ1t0YWdfbGVuICsgMF0gPT0gMHhGRiApOworICAgIFRFU1RfQVNTRVJUKCBteV90YWdbdGFnX2xlbiArIDFdID09IDB4RkYgKTsKKworCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgdGVzdF92ZWNfZWNiKCBpbnQgY2lwaGVyX2lkLCBpbnQgb3BlcmF0aW9uLCBjaGFyICpoZXhfa2V5LAorICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9pbnB1dCwgY2hhciAqaGV4X3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICBpbnQgZmluaXNoX3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlbNTBdOworICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzE2XTsKKyAgICBzaXplX3Qga2V5X2xlbjsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzMyXTsKKyAgICBzaXplX3Qgb3V0bGVuOworCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eCApOworCisgICAgbWVtc2V0KCBrZXksIDB4MDAsIHNpemVvZigga2V5ICkgKTsKKyAgICBtZW1zZXQoIGlucHV0LCAweDAwLCBzaXplb2YoIGlucHV0ICkgKTsKKyAgICBtZW1zZXQoIHJlc3VsdCwgMHgwMCwgc2l6ZW9mKCByZXN1bHQgKSApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2YoIG91dHB1dCApICk7CisKKyAgICAvKiBQcmVwYXJlIGNvbnRleHQgKi8KKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCBjaXBoZXJfaWQgKSApICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleSwgaGV4X2tleSApOworICAgIFRFU1RfQVNTRVJUKCB1bmhleGlmeSggaW5wdXQsIGhleF9pbnB1dCApID09CisgICAgICAgICAgICAgICAgIChpbnQpIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCAmY3R4ICkgKTsKKyAgICBURVNUX0FTU0VSVCggdW5oZXhpZnkoIHJlc3VsdCwgaGV4X3Jlc3VsdCApID09CisgICAgICAgICAgICAgICAgIChpbnQpIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCAmY3R4ICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eCwga2V5LCA4ICoga2V5X2xlbiwgb3BlcmF0aW9uICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmN0eCwgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjdHggKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvdXRsZW4gKSApOworICAgIFRFU1RfQVNTRVJUKCBvdXRsZW4gPT0gbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjdHggKSApOworICAgIFRFU1RfQVNTRVJUKCBmaW5pc2hfcmVzdWx0ID09IG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICsgb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRsZW4gKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG91dGxlbiApOworCisgICAgLyogY2hlY2sgcGxhaW50ZXh0IG9ubHkgaWYgZXZlcnl0aGluZyB3ZW50IGZpbmUgKi8KKyAgICBpZiggMCA9PSBmaW5pc2hfcmVzdWx0ICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWVtY21wKCBvdXRwdXQsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmN0eCApICkgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcgKi8KK3ZvaWQgc2V0X3BhZGRpbmcoIGludCBjaXBoZXJfaWQsIGludCBwYWRfbW9kZSwgaW50IHJldCApCit7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4OworCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eCApOworCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyX2lkICk7CisgICAgVEVTVF9BU1NFUlQoIE5VTEwgIT0gY2lwaGVyX2luZm8gKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmN0eCwgY2lwaGVyX2luZm8gKSApOworCisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlKCAmY3R4LCBwYWRfbW9kZSApICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCit2b2lkIGNoZWNrX3BhZGRpbmcoIGludCBwYWRfbW9kZSwgY2hhciAqaW5wdXRfc3RyLCBpbnQgcmV0LCBpbnQgZGxlbl9jaGVjayApCit7CisgICAgbWJlZHRsc19jaXBoZXJfaW5mb190IGNpcGhlcl9pbmZvOworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBpbnB1dFsxNl07CisgICAgc2l6ZV90IGlsZW4sIGRsZW47CisKKyAgICAvKiBidWlsZCBhIGZha2UgY29udGV4dCBqdXN0IGZvciBnZXR0aW5nIGFjY2VzcyB0byBnZXRfcGFkZGluZyAqLworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjdHggKTsKKyAgICBjaXBoZXJfaW5mby5tb2RlID0gTUJFRFRMU19NT0RFX0NCQzsKKyAgICBjdHguY2lwaGVyX2luZm8gPSAmY2lwaGVyX2luZm87CisKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlKCAmY3R4LCBwYWRfbW9kZSApICk7CisKKyAgICBpbGVuID0gdW5oZXhpZnkoIGlucHV0LCBpbnB1dF9zdHIgKTsKKworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gY3R4LmdldF9wYWRkaW5nKCBpbnB1dCwgaWxlbiwgJmRsZW4gKSApOworICAgIGlmKCAwID09IHJldCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBkbGVuID09IChzaXplX3QpIGRsZW5fY2hlY2sgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmdjbS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5nY20uZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGNjYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5nY20uZGF0YQpAQCAtMCwwICsxLDcwMyBAQAorQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006IkFFUy0xMjgtR0NNIjoxMjg6MDotMQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOiJBRVMtMTI4LUdDTSI6MTI4OjE6LTEKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006IkFFUy0xMjgtR0NNIjoxMjg6MjotMQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToiQUVTLTEyOC1HQ00iOjEyODo3Oi0xCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOiJBRVMtMTI4LUdDTSI6MTI4Ojg6LTEKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006IkFFUy0xMjgtR0NNIjoxMjg6OTotMQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006IkFFUy0xMjgtR0NNIjoxMjg6MTU6LTEKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOiJBRVMtMTI4LUdDTSI6MTI4OjE2Oi0xCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToiQUVTLTEyOC1HQ00iOjEyODoxNzotMQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006IkFFUy0xMjgtR0NNIjoxMjg6MzE6LTEKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOiJBRVMtMTI4LUdDTSI6MTI4OjMyOi0xCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToiQUVTLTEyOC1HQ00iOjEyODozMzotMQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006IkFFUy0xMjgtR0NNIjoxMjg6NDc6LTEKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOiJBRVMtMTI4LUdDTSI6MTI4OjQ4Oi0xCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToiQUVTLTEyOC1HQ00iOjEyODo0OTotMQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006MTI4OjA6MAorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToxMjg6MTowCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOjEyODowOjEKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOjEyODoxNjowCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToxMjg6MDoxNgorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006MTI4OjE2OjYKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOjEyODowOjIyCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToxMjg6MTY6MTYKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006LTE6ImQ3ODVkYWZlYTNlOTY2NzMxZWY2ZmM2MjAyMjYyNTg0IjoiZDkxYTQ2MjA1ZWU5NDA1OGIzYjg0MDM5OTc1OTJkZDIiOiIiOiIiOiIiOiIzYjkyYTE3YzFiOWMzNTc4YTY4Y2ZmZWE1YTViNjI0NSI6MDowCisKK0FFUyAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOi0xOiI5YWI1YzhjYTkwNWI1ZmU1MDQ2MWY0YTY4OTQxMTQ0YiI6Ijk2ZGQzOTI3YTk2ZTE2MTIzZjJlOWQ2YjM2N2QzMDNmIjoiIjoiIjoiIjoiNmUwYzUzZWYiOjA6MAorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICMzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTTotMToiYjVmYzdhZjYwNTcyMWE5Y2ZlNjFjMWVlNmE0YjNlMjIiOiI2Yjc1N2Q0MDU1ODIzZDEwMzVkMDEwNzc2NjYwMzdkNiI6IiI6IiI6IiI6ImU4YzA5ZGRkIjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTTotMToiMDNjMGI0YTZlNTA4YTg0OTBkYjBkMDg2YTgyYzlkYjciOiJhYzUyZjZjMWEwNTAzMDMyMWZhMzlmODdlODlmZGI1ZSI6IiI6IiI6IjMzMzE2Y2E3OWQxMGE3OWY0ZmQwMzg1OTNlOGVlZjA5NjI1MDg5ZGM0ZTBmZmU0YmMxZjI4NzE1NTRmYTY2NjZhYjNlN2ZlNzg4NWVkZWY2OTRiNDEwNDU2ZjNlYzBlNTEzYmIyNWYxYjQ4ZDk1ZTQ4MjBjNTk3MmMxYWFiYjI1Yzg0YzA4NTY2MDAyZGFkYzM2ZGYzMzRjMWNlODY4NDc5NjRhMTIyMDE2ZDM4OWFjODczYmNhOGMzMzVhN2E5OWJjZWY5MWUxYjk4NWFlNWQ0ODhhMmQ3Zjc4YjRiZjE0ZTBjMmRjNzE1ZTgxNGY0ZTI0Mjc2MDU3Y2Y2NjgxNzIiOiI3NTYyOTJkOGI0NjUzODg3ZWRlZjUxNjc5YjE2MTgxMiI6MDpNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006LTE6IjJiYzczZmJhOTQyZmYxMDU4MjNiNWRjY2Y2YmVmYjFjIjoiOTAyYzNlM2I2OWIxZWY4Mzk1ZDcyODFmZjc0Y2NlMzgiOiIiOiIiOiI0YWRlYzBiNGFjMDAzMjVhODYwMDQ0ZDlmOTUxOWRhYTRmN2MxNjMyMjlhNzU4MTliMGZkN2Q4ZTIzMzE5ZjAzMGU2MWRmYThlYWRhYmZmNDJlYTI3YmMzNmJkYjZjYWQyNDllODAxY2E2MzFiNjU2ODM2NDQ4YjcxNzJjMTExMjZiYWQyNzgxZTZhMWFhNGY2MmM0ZWRhNTM0MDk0MDhiMDA4YzA1N2UwYjgxMjE1Y2MxM2RkYWJiYjhmMTkxNWY0YmJhYjg1NGY4YjAwNzYzYTUzMGFkNTA1NWQyNjU3NzhjZDMwODBkMGJkMzViNzZhMzI5YmRkNWI1YTJkMjY4IjoiZWJkZDdjOGU4N2ZlNzMzMTM4YTQzMzU0MzU0MmQxIjowOjAKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006LTE6IjBkZDM1OGJjM2Y5OTJmMjZlODFlM2EyZjNhYTJkNTE3IjoiZDhjNzUwYmI0NDNlZTFhMTY5ZGZlOTdjZmU0ZDg1NWIiOiI4N2NjNGZkNzU3ODhjOWQ1Y2M4M2JhZTVkNzY0ZGQyNDlkMTc4YWIyMzIyNDA0OTc5NWQ0Mjg4YjVlZDllYTNmMzE3MDY4YTM5YTc1NzRiMzAwYzg1NDQyMjZlODdiMDhlMDA4ZmJlMjQxZDA5NDU0NWMyMTFkNTZhYzQ0NDM3ZDQxNDkxYTQzODI3MjczODk2OGM4ZDM3MWFhNzc4N2I1ZjYwNmM4NTQ5YTlkODY4ZDhhNzEzODBlOTY1N2QzYzAzMzc5NzlmZWIwMWRlNTk5MWZjMTQ3MGRmYzU5ZWIwMjUxMWVmYmJmZjNmY2I0NzlhODYyYmEzODQ0YTI1YWFhIjoiNzc5NDliMjlmMDg1YmIzYWJiNzFhNTM4NjAwMzgxMTIzMzA1NmQzMjk2ZWIwOTMzNzBmNzc3N2RhZGQzMDZkOTNkNTlkY2I5NzU0ZDM4NTdjZjI3NTgwOTFiYTY2MWY4NDVlZjA1ODJmNmFlMGUxMzQzMjgxMDZmMGQ1ZDE2YjU0MWNkNzRmZGM3NTZkYzdiNTNmNGY4YTE5NGRhZWVhOTM2OWViYjE2MzBjMDFjY2IzMDdiODQ4ZTk1MjdkYTIwYTM5ODk4ZDc0OGZkNTkyMDZmMGI3OWQwZWQ5NDZhODk1ODAzM2E0NWJkOWFlNjczNTE4YjMyNjA2NzQ4ZWI2NSI6IiI6ImE4MWQxMzk3M2JhYTIyYTc1MTgzM2Q3ZDNmOTRiM2IxIjowOjAKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006LTE6IjlhNDMzYzYxMmQ3ZTFiZGZmODgxZTRkNjNiYThiMTQxIjoiOGI2NzBjZjMxZjQ3MGY3OWE2YzBiNzllNzM4NjNjYTEiOiJjZTEwNzU4MzMyZjQyMzIyOGI1ZTRhZTMxZWZkYTc2Nzc1ODY5MzRhMWQ4ZjA1ZDliN2EwZGM0ZTIwMTBlYzNlYWFjYjcxYTUyN2E1ZmZmOGU3ODdkNzVlYmQyNGFkMTYzMzk0Yzg5MWIzMzQ3N2VkOWUyYTJkODUzYzM2NGNiMWM1ZDBiYzMxN2ZjYWY0MDEwODE3ZGJlNWYxZmQxMDM3YzcwMWIyOTFiM2E2NmIxNjRiYzgxOGJmNWMwMGE0YzIxMGExNjcxZmFhNTc0ZDc0YzdmMzU0M2Y2YzA5YWFmMTE3ZTEyZTJlYjNkYWU1NWVkYjFjYzViNDA4NmI2MTdkIjoiIjoiIjoiODUyNmZkMjVkYWY4OTBlNzk5NDZhMjA1YjY5OGYyODciOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0FFUyAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzgKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOi0xOiI2OWVlZGYzNzc3ZTU5NGMzMGU5NGU5YzVlMmJjZTQ2NyI6ImEzMzMwNjM4YTgwOWJhMzU4ZDZjMDk4ZTQzNDJiODFlIjoiNTExNGU5OTgzYzk2ZmVjZWMzZjczMDRjYTQyZjUyYWExNmNiN2M2YWFkZmI2MmFkNTM3YzkzYTMxODg4MzVjYTA3MDNkYWQzNGM3M2NmOTY0MzViNjY4YjY4YTdhMWQwNTY5MzE5NTkzMTZlOGQzYWI5NTZiZjY0YzRlMDc0NzljNzc2N2Y5ZDQ4OGIwYzBjMzUxMzMzY2NmNDAwYjdlMGJlMTlhMGZkMTczZTNmMmExYWUzMTNmMjdlNTE2OTUyMjYwZmQyZGE5YWI5ZGFjYTQ3OGViYjkzY2QwN2QwYjc1MDNiMzIzNjRkOGUzMDhkOTA0ZDk2NmM1OGYyMjZiYiI6IjIwOGU2MzIxMjM4YmY1YzZlMmVmNTVhNGI4ZjUzMWNiYmZiMGQ3NzM3NGZlMzJkZjZkZDY2MzQ4NmNmNzliZWVlZDM5YmI2OTEwYzNjNzhkZDBjYzMwNzA3YTBhMTJiMjI2YjJkMDYwMjRkYjI1ZGNkOGE0ZTYyMGYwMDljYWZhNTI0MjEyMWU4NjRjN2YzZjQzNjBhYWYxZTlkNGU1NDhkOTk2MTUxNTZmMTU2MDA4NDE4YzFjNDFmZjJiYmMwMDdjZWNmOGYyMDljNzMyMDNlNmRmODliMzI4NzFkZTYzN2IzZDZhZjJlMjc3ZDE0NmFlMDNmMzQwNGQzODdiNzciOiJkZjRlM2YyYjQ3Y2YwZTg1OTAyMjhmY2Y5OTEzZmI4YTVlYjk3NTFiYmEzMThmZDJkNTdiZTY4YzdlNzg4ZTA0ZmFiZjMwMzY5OWI5OWYyNjMxM2QxYzQ5NTYxMDVjZDI4MTdhYWQyMWI5MWMyOGYzYjkyNTFlOWMwYjM1NDQ5MGZhNWFiZmNlYTAwNjVhYTNjYzliOTY3NzJlYjhhZjA2YTFhOTA1NGJmMTJkM2FlNjk4ZGZiMDFhMTNmOTg5ZjhiOGE0YmI2MTY4NmNmM2FkZjU4ZjA1ODczYTI0ZDQwM2E2MmEwOTIyOTBjMjQ4MWU0MTU5NTg4ZmVhNmI5YTA5IjoiNWRlMzA2OGUxZTIwZWVkNDY5MjY1MDAwMDc3YjFkYjkiOjA6MAorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM5CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTTotMToiNDVjYzM1MzExZWVkZjBiYTA5M2JmOTAxOTMxYTcwMzYiOiJmZWQ1MDg0ZGUzYzM0OGY1YTBhZGY0YzJmZDRlODQ4YSI6IjVkYzhkNzUyNWVhYWQwMzVjMTk3MTRhZTFiMWU1MzhjYjY2YTQwODkwMjcyNDUzNTFlMGFkOTI5NzQxMGZiM2EwYzExNTU0MDdjMTBhOGJiOTVhOWNhNjI0YTljOTkyNWRhYzAwM2VlNzg5MjZjNmU5MGZmNGNjZGJhMTBlOGE3OGJkYTFjNDQ3ODE2MmEwZTMwMmRlNWZmMDVmYjBmOTRjODljM2M3NDI5ZmI5NDgyOGJkY2Q5N2QyMTMzM2MyZWU3Mjk2M2VlNmYwNTZjZTI3MmI4YmFiMDA3ZTY1M2E0MmIwMWQxZDIwNDFiYTYyN2YxNjljOGMwZDMyZTZkYWUiOiIiOiI2ZTIxMDkxNGU0YWVkMTg4ZDU3NmY1YWQ3ZmM3ZTRjZjdkZDhkODJmMzRlYTNiY2JkYjcyNjdjZmQ5MDQ1ZjgwNjk3OGRiZmYzNDYwYzRlOGZmOGM0ZWRiNmFkMmVkYmE0MDVhOGQ5MTU3MjlkODlhYWIyMTE2YjM2YTcwYjU0ZjU5MjBhOTdmNWE1NzE5NzdlMDMyOWVkYTZjNjk2NzQ5YmU5NDBlYWJmYzZkOGIwYmJkNmZiZGI4NzY1N2IzYTc2OTVkYTlmNWQzYTczODQyNTdmMjBlMGJlY2Q4NTEyZDM3MDVjYzI0NmVlNmNhMWU2MTA5MjFjZjkyNjAzZDc5IjoiMjY2YTg5NWZjMjFkYTUxNzZiNDRiNDQ2ZDdkMTkyMWQiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOiJBRVMtMTkyLUdDTSI6MTkyOjA6LTEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToiQUVTLTE5Mi1HQ00iOjE5MjoxOi0xCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOiJBRVMtMTkyLUdDTSI6MTkyOjI6LTEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006IkFFUy0xOTItR0NNIjoxOTI6NzotMQorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToiQUVTLTE5Mi1HQ00iOjE5Mjo4Oi0xCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOiJBRVMtMTkyLUdDTSI6MTkyOjk6LTEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOiJBRVMtMTkyLUdDTSI6MTkyOjE1Oi0xCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToiQUVTLTE5Mi1HQ00iOjE5MjoxNjotMQorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006IkFFUy0xOTItR0NNIjoxOTI6MTc6LTEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOiJBRVMtMTkyLUdDTSI6MTkyOjMxOi0xCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToiQUVTLTE5Mi1HQ00iOjE5MjozMjotMQorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006IkFFUy0xOTItR0NNIjoxOTI6MzM6LTEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOiJBRVMtMTkyLUdDTSI6MTkyOjQ3Oi0xCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToiQUVTLTE5Mi1HQ00iOjE5Mjo0ODotMQorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006IkFFUy0xOTItR0NNIjoxOTI6NDk6LTEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOjE5MjowOjAKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006MTkyOjE6MAorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToxOTI6MDoxCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToxOTI6MTY6MAorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006MTkyOjA6MTYKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOjE5MjoxNjo2CisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToxOTI6MDoyMgorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006MTkyOjE2OjE2CisKK0FFUyAxOTIgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOi0xOiI4MDY3NjZhNGQyYjY1MDdjYzQxMTNiYzBlNDZlZWJlMTIwZWFjZDk0OGMyNGRjN2YiOiI0ZjgwMWM3NzIzOTVjNDUxOWVjODMwOTgwYzhjYTVhNCI6IiI6IiI6IiI6IjhmYTE2NDUyYjEzMmJlYmM2YWE1MjFlOTJjYjNiMGVhIjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitBRVMgMTkyIEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTTotMToiYmUyZjBmNGFlNGFiODUxYjI1OGVjNTYwMjYyOGRmMjYxYjZhNjllMzA5ZmY5MDQzIjoiNjQ2YTkxZDgzYWU3MmI5YjllOWZjZTY0MTM1Y2JmNzMiOiIiOiIiOiIiOiIxNjllNzE3ZTJiYWU0MmUzZWI2MWQwYTFhMjliIjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitBRVMgMTkyIEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICMzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTTotMToiMWViNTNhYTU0OGI0MWJmZGM4NWM2NTdlYmRlYmRhZTBjN2U1MjVhNjQzMmJjMDEyIjoiMzdmZmM2NGQ0YjJkOWM4MmRkMTdkMWFkMzA3NmQ4MmIiOiIiOiIiOiIiOiIzNGI4ZTAzNzA4NGIzZjJkIjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitBRVMgMTkyIEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTTotMToiYzZhOTgxMDJhZjNkODc1YmNkZWJlNTk0NjYxZDNhNmIzNzY5NzBjMDJiMTFkMDE5IjoiYmVhOGNkODVhMjhhMmMwNWJmNzQwNmI4ZWVmMWVmY2MiOiIiOiIiOiJmMmY4MGUyYzA0MjA5MmNjNzI0MGI1OThhYjMwZmFkMDU1YmNlODU0MDhhYTBmOGNlZmFmOGE3MjA0ZjBlMmFjYjg3Yzc4ZjQ2YTU4NjdiMWYxYzE5NDYxY2JmNWVkNWQyY2EyMWM5NmE2M2ZiMWY0MmYxMGYzOTQ5NTJlNjM1MjA3OTVjNTZkZjc3ZDZhMDRjYjVhZDAwNmVlODY1YTQ3ZGMyMzQ5YTgxNGE2MzBiM2Q0YzRlMGZkMTQ5ZjUxZThmYTg0NjY1NmVhNTY5ZmQyOWExZWJhZmMwNjE0NDZlYjgwZWMxODJmODMzZjFmNmQ5MDgzNTQ1YWJmNTJmYTRjIjoiMDRiODBmMjVhZTlkMDdmNWZkODIyMDI2M2FjM2YyZjciOjA6MAorCitBRVMgMTkyIEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM1CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTTotMToiYTI0OTEzNWM5ZjJmNWE4YjFhZjY2NDQyYTRkNGUxMDE3NzFhOTE4ZWY4YWNlZTA1IjoiODBiNmU0OGZlNGEzYjA4ZDQwYzE2MzZiMjVkZmQyYzQiOiJjNjJiMzliOTM3ZWRiZGM5YjY0NDMyMWQ1ZDI4NGU2MmVhYTQxNTQwMTBjN2EzMjA4YzFlZjQ3MDZmYmE5MDIyM2RhMDRiMmY2ODZhMjhiOTc1ZWZmMTczODY1OThiYTc3ZTIxMjg1NTY5MmYzODQ3ODJjMWYzYzAwYmUwMTFlNDY2ZTE0NWY2ZjhiNjVjNDU4ZTQxNDA5ZTAxYTAxOWIyOTA3NzM5OTJlMTkzMzRmZmFjYTU0NGUyOGZjOTA0NGE1ZTg2YmNkMmZhNWFkMmU3NmYyYmUzZjAxNGQ4YzM4NzQ1NmE4ZmNmZGVkM2FlNGQxMTk0ZDBlM2U1M2EyMDMxIjoiYjg2NWY4ZGQ2NGE2ZjUxYTUwMGJjZmM4Y2FkYmM5ZTlmNWQ1NGQyZDI3ZDgxNWVjZmUzZDU3MzFlMWIyMzBjNTg3YjQ2OTU4YzYxODdlNDFiNTJmZjE4N2ExNGQyNmFhNDFjNWY5OTA5YTNiNzc4NTk0MjkyMzJlNWJkNmM2ZGMyMmNmNTU5MDQwMjQ3NmQwMzNhMzI2ODJlOGFiOGRjN2VkMGIwODljNWFiMjBhYjlhOGM1ZDZhM2JlOWVhN2FhNTZjOWQzYWIwOGRlNGE0YTAxOWFiYjQ0N2RiNDQ4MDYyZjE2YTUzM2Q0MTY5NTFhOGZmNmYxM2VkNTYwOGY3NyI6IiI6Ijk1MWMxYzg5YjZkOTU2NjE2MzBkNzM5ZGQ5MTIwYTczIjowOjAKKworQUVTIDE5MiBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006LTE6IjIzYzIwMTk2OGRlZjU1MTgxN2YyMGU0OWIwOWRiYjVhYWUwMDMzMzA1YmVmNjhhMCI6ImJkMjk1MmQyMTVhZWQ1ZTkxNWQ4NjNlN2Y3Njk2YjNlIjoiNzdiYzhhZjQyZDFiNjRlZTM5MDEyZGY1ZmMzM2M1NTRhZjMyYmZlZjZkOTE4MjgwNGRjZmUzNzBkZmM0YjlkMDU5YmRiYzU1ZjZiYTRlYWNiOGUzYTQ5MWQ5NmE2NTM2MGQ3OTA4NjRiYTYwYWNmMWE2MDVmNmIyOGE2NTkxNTEzZWEzY2ZkNzY4ZmY0N2FlZTI0MmE4ZTliZGZhYzM5OWI0NTIyMzFiZmQ1OWQ4MWM5YjkxZjhkYzU4OWFkNzUxZDhmOWZkYWQwMWRkMDA2MzFmMGNiNTFjYjAyNDgzMzJmMjQxOTRiNTc3ZTU1NzFjZWI1YzAzN2E2ZDBiY2ZlOCI6IjE3ZDkzYzkyMTAwOWM2YjBiM2VjZjI0M2QwOGI3MDE0MjI5ODNmMmRjYWVjOWM4ZDc2MDRhMmQ1NTY1ZWQ5NmNlNWNkZGNiMTgzY2Q1ODgyZjhkNjFkMzIwMmM5MDE1ZDIwN2ZlZDE2YTRjMTE5NWJhNzEyNDI4YzcyNzYwMTEzNTMxNWZjNTA0ZTgwYzI1M2MzYTJlNGE1NTkzZmM2YzRhMjA2ZWRjZTFmZDcxMDRlOGE4ODgzODViYmIzOTZkM2NkZjFlYjJiMmFhNGQwYzllNDU0NTFlOTk1NTBkOWNmYTA1YWFmZTZlN2I1MzE5YzczYzMzZmQ2Zjk4ZGIzYzUiOiIyM2YzNWZhYzU4Mzg5NzUxOWI5NDk5ODA4NGFkNmQ3NzY2NmUxMzU5NTEwOWU4NzQ2MjViYzZjY2M2ZDBjNzgxNmE2MmQ2NGIwMmU2NzBmYTY2NGUzYmI1MmMyNzZiMWJhZmJlYjQ0ZTVmOWNjM2FlMDI4ZGFmMWQ3ODczNDQ0ODJmMzFmY2U1ZDI4MDAwMjA3MzJiMzgxYThiMTFjNjgzN2Y0MjgyMDRiN2VkMmY0YzQ4MTAwNjdmMmQ0ZGE5OTk4N2I2NmU2NTI1ZmM2YjkyMTdhOGY2OTMzZjE2ODFiN2NmYTg1N2UxMDJmNjE2YTdjODRhZGMyZjY3NmUzYThmIjoiYmI5YmEzYTlhYzdkNjNlNjdiZDc4ZDcxZGMzMTMzYjMiOjA6MAorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToiQUVTLTI1Ni1HQ00iOjI1NjowOi0xCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006IkFFUy0yNTYtR0NNIjoyNTY6MTotMQorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToiQUVTLTI1Ni1HQ00iOjI1NjoyOi0xCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOiJBRVMtMjU2LUdDTSI6MjU2Ojc6LTEKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006IkFFUy0yNTYtR0NNIjoyNTY6ODotMQorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToiQUVTLTI1Ni1HQ00iOjI1Njo5Oi0xCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToiQUVTLTI1Ni1HQ00iOjI1NjoxNTotMQorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006IkFFUy0yNTYtR0NNIjoyNTY6MTY6LTEKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOiJBRVMtMjU2LUdDTSI6MjU2OjE3Oi0xCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToiQUVTLTI1Ni1HQ00iOjI1NjozMTotMQorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006IkFFUy0yNTYtR0NNIjoyNTY6MzI6LTEKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOiJBRVMtMjU2LUdDTSI6MjU2OjMzOi0xCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToiQUVTLTI1Ni1HQ00iOjI1Njo0NzotMQorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006IkFFUy0yNTYtR0NNIjoyNTY6NDg6LTEKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOiJBRVMtMjU2LUdDTSI6MjU2OjQ5Oi0xCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToyNTY6MDowCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOjI1NjoxOjAKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006MjU2OjA6MQorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006MjU2OjE2OjAKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOjI1NjowOjE2CisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToyNTY6MTY6NgorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006MjU2OjA6MjIKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOjI1NjoxNjoxNgorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTTotMToiMmMxODY2NTQ0MDZiMmI5MmM5NjM5YTcxODlkNGFiNWFiMGI5YmI4N2M0MzAwNTAyN2YzZmE4MzJmZDM1MDdiMSI6IjNhMDMyNGQ2M2E3MDQwMDQ5MGM5MmU3NjA0YTNiYTk3IjoiIjoiIjoiIjoiNGM2MWNkMmUyOGExM2Q3OGE0ZTg3ZWE3Mzc0ZGQwMWEiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0FFUyAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOi0xOiJjOGFlMDExNzk1YzlhNjBhZDc2NjBhMzFmZTM1NGZhNmY3ZTljMjcyNGQ3YTEyNjQzNjI5MTY4MGNkOTVjMDA3IjoiMWJkOWVhNjE4NjQ1MGY5Y2QyNTNjY2ZlZDI4MTJiMWMiOiIiOiIiOiIiOiIzNTIxNGJiYzUxMDQzMGUzIjowOjAKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006LTE6IjQ0OWQzOWY4NjNlNDkwOTk4NGIzN2YyZTVjMDllYTRkNGIzZTlmYWM2N2JkNTdjMjk5ZTRlMWQxZjA4NGFhYTMiOiJkOGU5MTE4ZjMzMWJiNWEzNTlmMGFhODg4Mjg2MWI3MiI6IiI6IiI6IjRkZGNhZTBiYzI0ZDYyMmUxMmJkZWFhYzczZThkMWFiNzk1N2FmMDUxZDI3ZGZhYWZjZTUzYWVlZDRjZGQzZjk4OWVhMjU5ODlhMmY0MWNmYjNjMzhkYmQ4NDFjNTU2MGIwYjVhYjE4NjFiMWZiY2QyMzY4NjVkMTNkYTU1YjUwMjE5NDYyZTAyMWY4YTIxODQ4YTY0YTg1MzI2MDMxZmNlYzhmZTQ3YTZlZjRhNDM1ZGQyYjJmZmY2Mzc2NDRmZmNmMzkxNGVmMmRmYTVkZDU1NjQyMWJmZDI5N2JlMTUwYjMxZGIwMzlmMGYyY2M0MjJiMjgyZTY1OWU3MGNjZWIiOiJjNTk1YjlkOTk0MTQ4OTEyMjhjOWZhNWVkYjVmY2NlMyI6MDowCisKK0FFUyAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOi0xOiIxYTFiYjkxMjJlNzYyZWNkN2ZmODYxYTFkNjVlNTI2MDdkOThlN2FlNWJkMWMzYTk0NGU0NDM3MTBmM2IwNTk5IjoiMzJmOTllYTRjYmY1MmMyNzAxYzIyNTJlNWU2Yzg2M2QiOiIiOiIiOiI5MWI3YTcwYzNhMDZjMWY3ZjJlYTU4NGFjYjVkZDc2MTc3YmEwNzMyM2M5NGYyZThmN2NiZTkzZmMwYmI3YzM4OWMzYzg4ZTE2YWE1MzE3NGYwZmMzNzNiYzc3OGE2Y2NmOTFiZjYxYjZlOTJjMjk2OWQzNDQxZWIxN2EwYTgzNWQzMGRjZjg4MjQ3MmE2ZDNjYjAzNjUzM2IwNGQ3OWYwNWViZmFhZGYyMjFhZTFjMTRhZjNmMDJmYTQxODY3YWNmZGZhMzVmODFlOGE5ZDExZDQyYjlhNjMyODhjNzU5MDYzYzBjMzA0MGMzZTZlZTY5Y2Y3Yzc1ZjljMzNmZWExIjoiYThlMjllMDg2MjNhM2VmZGJiZThiMTExZGUzMGE0IjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTTotMToiZjEwOTY1YTY2MjU1ZjBjMzUxNWFmNDk3Y2NiYjI1N2EwOWYyMmVjMmQ1N2M1ZWRhZTMyMmEzZTZkMmQxODhlZiI6ImM1NzFjZTBlOTExZGU1ZDg4M2RjNGEwNzg3NDgzMjM1IjoiOTE1OTg2OTBlZGYyZGU4YjI3ZjliYzc0NjFhODRlODA4MTFjZWU1NDRmMDU0MjkyMzg5ODMyOGNmMTU3NTkwMjUxZjAzNDJjYjgxZDM1OWI1ZGNjYzUzOTFhMTIzMjBkMTQ0NGMyNmYyNDE3ODk3N2RkNjcwNWMyYjM2NWRjMWVjZTAxNTJjNDJlMmYwZWUzMTYyY2Y4ODZlZjU1MjlmNGYxNmE3N2YzYmRkMmFlY2NkNDA1YjU5YWRkZjA5ODUyMWQwZDM4Y2MyNWYxOTkxZTExYmU3ZWNmMjRjYWVkYjQ4YTJhMjg2ZDJlNTYwYTM4ZmE5MDAxYzVhMjI4YzRkMSI6IjI4Njc5OTZlMzg5ZTA5ZWMwZGE5NGQ0MmU3N2IxZTQzNmI1MDA2NWIwOWNhNGFkZjFjZDAzMjQwNDQ0ZWU2OTlkYmI3YjNmYzA4MWExODY5Y2E2MDdkNzdkNWZmOTc1NGZjM2M5OTdmZjBhNGVlMTc1NDNhMmJhNzc4ODZiODhhNzEyOGJjYzUxZDM0NTBkZjU4ZmYzYTI2NjcxYjAyYzFkMjEzZGY2YWRiNmY3ZTg1MzA4MGViNDZiNTA0NTE3Y2JhZWExNjI3MTBhOWJiYzJkYThiNTUyZWI2YjBlMGNiOThlNDRmY2FiMGExNTczMTJiZTY3OTc0Njc4ZDE0M2UiOiIiOiI2ZDlkM2E1ZGJjOGRjZTM4NWYwOTJmZmYxNGJmZmZkYSI6MDowCisKK0FFUyAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOi0xOiI0MTAzYjFkZGZmODdhNTA4YTIxOWM4MDhhMDRhZDQ3NTA2Njg2ODhmNGMyZWU3NWI5MmQyOGQ3MGI5OGEyYzk0IjoiNWNlYTkwNjczNzUxOGMyY2I5MDEwMTZlMzAyMDYyNzYiOiJhMDBhMTk2MTkzZmYwNzAwNmI3ZGY1MjQ4MjRiZDA5NzFkNjNmNDQ3YTNhN2JiMWI3NWMxZTJkMTE3ODk0ODJjMTE1Y2ZmNjc3YjU0OTQ4ZDM2ZGM0ZGUzNDIwMGJjZTk3YmUwMTAxZDg4Y2VlMzliMTc3ODU3ZGQ1ZGEzY2IwZDJmOWQ2ZTExNTBmNzJhM2JkNjU1ZTBiYWNlMWQyNWE2NTdiYTlhN2Y4ZGZmMDgyYjQ0NjA0MzIwNzVhZmIyMDE3M2RhMjJiNDliZWViNmEwMzBkNzJiYTA3ODY5ZmY0Mzg5ZmMxYzI4ZDg3MDE4ZDdjMWE5ODI5YzIxOTMyMTk3IjoiIjoiIjoiM2EzYTc3MWRkNWYzMWM5NzdlMTU0ZWY1YzczYSI6MDpNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006LTE6ImRmODY3ZDFkZDhhMjg3ODIxYTU0NDc5Y2FiNmY4ODYzNmQyYWNhMzBlMWJmMDFhNWRmZmM3MzVlMTc1OTAzNTYiOiIzNTAxOTgyNmM1MWRkMWVmMDdmZjkxNWQ5YWM0ZWE5NiI6IjY1MTcyNzJjYWM4NWQ3ZjM4OTAyYmNiNGI5NmEwYzU5YzRiZGM0NmJmZWZhNmViYWNkN2YyZmIxNjI5Yjg3Y2E5MWRlMmZmZWZjNDJjZTNjZmQzNGRjYmYwMWIzZjdjYWRjZWEzZjk5ZTZhZGRmMzVkMzZjNTFmMmNlYjFmODVjMWY1NmEwNGVjOWM5ZmZmNjBjZDdmYzIzODY3NDk5MjE4M2VhM2RlNzJlZjc3ODU2MWI5MDYyMDJiN2I4M2ZlNjU2MmEwYmNhOWMxZTBhMTg2MzhlODY4NWI5OThiNDE5MmY1MTIwNDM1ODA5YWQ2ZTkzYTA0MjJkMDA3MjUyNjIiOiI3MjNiZTM5YmMxM2FkYmM0OGM4NjFiMDc3NTNmNjRmYWMxYWUyOGZjODkzM2FjYmE4ODhiNjUzODcyMWRmMGE4YjkxYzA0MGEyNjUyMmZlMGRiYjczMzVkOGY2M2QyMDllODlmN2NkZTIzYWZhOWNhM2M1ODRiMzM2ZDYzYTkxZTA3ZmRkODgwOGIxNGMzMjE0Yzk2YTIwMmU2NjViYmFhYTM0MjQ4ZmYzMDM0OGYzZDc5YzlmMTZlNjZhZDZjNTkwMzMwNWFjZDg4N2E4OWI2MjQ0ZWI3YzJkOTZlMThiMTNhNjg2ZGU5MzViZjM4MjE0NDRlZTIwZjQ4Njc4YmU1IjoiMDM3NWVkOTNmMjg3ZWVmZTQxNGFiMjk2ODg0NGJkMTAxNDg4NjBjNTI4ZGJmNTcxYTc3YWE3NGY5OGNjNjY5YTdmYzMxN2FkYzlmN2NmMmQ4MGRkYTI5YjE5ZGI2MzViMzBhMDQ0Mzk5ZjM2NjViNjE3NmVkNjY5MTQ2ZDI4ZjVhZGEwM2IzZDMyZDUzZmU0NjU3NWE4YWZjZDM3ZjIwMzg2ZDllMzZmN2UwOTBiNGZlZmFkZmFiN2YwMDhlMDJmMWI1MDIyYzBlZWI4MWQwMzQ0M2EyNzZlYWU0OGMwMzhlZDE3MzYzMTY4N2QyNDUwYjkxM2IwMmM5NzI0M2VkYiI6ImU0OWJlYjA4M2E5YjAwOGFlOTdhMTdlMzgyNTY5MmYwIjowOjAKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006LTE6Ijg4NmM3N2I4MGY1ZjNhMjFjMDE5MzI2ODVhNTQwYjIzNjI5ZjZkNDFkNTU3NGZjNTI3MjI3ZWQwYmRmMmUyMWIiOiI1ZWM1MDZlZGIxODkwYTVhNjNiNDY0NDkwNDUwZDQxOSI6IjUzYTE3ZDdiNjlmNjA3ZjA4Njc2ZDZmNmRkNGU4ZGIwOGUwMTMzM2E4MzU1ZDhjODc2MTZlODRjZGYxMGVmNWIwNDFmYzZkZGMzZjZhMjQ1YzBmNTM0YzJiMTY3MDY0YWY4MmY0NWU0NzAyYTVlOGRlZGU1OTU3OWZkZWNmNjcxMzM1MzM5MjQzMzk1MGM5Yjk3YzM4ZDllZTUxNWFjOTdkMDk3MGNjZjAzOTgxOTU0NTQwMDg4NTY3YTMwOTQxYmIyY2NhMDhjYmVkNjgwNTAwZjgzNDJmYWE3YWViYmM2YzE0M2UyZWE1N2JhNmI0YWMxZmQ5NzVkY2M1ZDA4NzEiOiI3OWVlMjdhZGZhOTY5OGE5N2QyMTdjNTAxMGVjODA3ODA2ZmVkYTM3ZGI4MTFlMzk4YzNiODJhYmY2OThhZWNlMDg1NjFmZmZjNmM2MDFkMjY5MTczOGUyNzllZWI1N2U1ODA0ZTE0MDVhOTkxMzgzMGUzYmEwZDdiOTc5MjEzZWY0MGQ3MzNhMTk0OTdkNGJiMWI4YjJjNjA5YThmOTA0ZTI5NzcxZmEyMzBjMzlhNDhlYmI4YzMzNzZmMDdjODAxM2ZmZjZlMzRmMTBmZTUzOTg4YTZlYzg3YTkyOTZjMGE3Y2ZiYTc2OWFkZWZlNTk5ZWM2NjcxMDEyOTY1OTczIjoiMDViOGQ4MjBjOWY0MzlkN2FlYWU1YzdkYTBlZTI1ZmIwZGFkNDdjYzNlNmYzYTQ3ZThiOTg0ZTg1NjIwMTU0Njk3NWY4MjE0NTMxZmMzYzJlNTA0ZDJhYzEwZmE0OWNiOTQ4NTk2YjlhOGZhYjAxYjk1YzQ5ZDZmMDRkMTU4OWY5M2I3N2I4OTllODAzZGQyMGUxZjAwYTUxYzBiNTk1M2U4NWJlNjM5MTA5YjE0YjEwMGUzNWNhMjZkODRlYTYyOTk2NGIwZGI4MjYwZGZhNWExNTBhNjYyNjFiZjM3ZTc5ZGUyZWM0OWU5ZjFiMDgyYTdjNThlY2QzZDM5YjZjOSI6ImZmZGY1NmUxYzFhNzI1MmI4ODQyMjc4NzUzNjQ4NCI6MDowCisKK0NBTUVMTElBIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6MDotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6MTotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTToiQ0FNRUxMSUEtMTI4LUdDTSI6MTI4OjI6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODo3Oi0xCisKK0NBTUVMTElBIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6ODotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTToiQ0FNRUxMSUEtMTI4LUdDTSI6MTI4Ojk6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6MTU6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6MTY6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6MTc6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6MzE6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6MzI6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6MzM6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6NDc6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6NDg6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6NDk6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOjEyODowOjAKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006MTI4OjE6MAorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTToxMjg6MDoxCisKK0NBTUVMTElBIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTToxMjg6MTY6MAorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006MTI4OjA6MTYKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOjEyODoxNjo2CisKK0NBTUVMTElBIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTToxMjg6MDoyMgorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006MTI4OjE2OjE2CisKK0NBTUVMTElBIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOi0xOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IiI6IiI6ImY1NTc0YWNjMzE0OGRmY2I5MDE1MjAwNjMxMDI0ZGY4IjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitDQU1FTExJQSAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTTotMToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkZWZlM2UwYjVjNTRjOTRiNGYyYTBmNWE0NmY2MjEwZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiZjY3MmI5NGQxOTIyNjZjN2M4YzhkYmI0MjdjYzk4OWEiOjA6MAorCitDQU1FTExJQSAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTTotMToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJjYWZlYmFiZWZhY2VkYmFkZGVjYWY4ODkiOiJkMGQ5NGExM2I2MzJmMzM3YTBjYzk5NTViOTRmYTAyMGM4MTVmOTAzYWFiMTJmMWVmYWYyZmU5ZDkwZjcyOWE2Y2NjYmZhOTg2ZWYyZmYyYzMzZGU0MThkOWEyNTI5MDkxY2YxOGZlNjUyYzFjZmRlMTNmODI2MDYxNGJhYjgxNSI6IiI6IiI6Ijg2ZTMxODAxMmRkODMyOWRjOWRhZTZhMTcwZjYxYjI0IjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitDQU1FTExJQSAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTTotMToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJjYWZlYmFiZWZhY2VkYmFkZGVjYWY4ODgiOiJkMGQ5NGExM2I2MzJmMzM3YTBjYzk5NTViOTRmYTAyMGM4MTVmOTAzYWFiMTJmMWVmYWYyZmU5ZDkwZjcyOWE2Y2NjYmZhOTg2ZWYyZmYyYzMzZGU0MThkOWEyNTI5MDkxY2YxOGZlNjUyYzFjZmRlMTNmODI2MDYiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoiOWY0NTg4Njk0MzE1NzZlYTZhMDk1NDU2ZWM2YjgxMDEiOjA6MAorCitDQU1FTExJQSAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTTotMToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJjYWZlYmFiZWZhY2VkYmFkIjoiMjhmZDc0MzRkNWNkNDI0YTUzNTM4MThmYzIxYTk4MjQ2MGQyMGNmNjMyZWIxZTZjNGZiZmNhMTdkNWFiY2Y2YTUyMTExMDg2MTYyZmU5NTcwZTc3NzRjN2E5MTJhY2EzZGZhMTAwNjdkZGFhZDQwNjg4NjQ1YmRkIjoiIjoiZmVlZGZhZGVkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6ImU4NmY4ZjJlNzMwYzQ5ZDUzNmYwMGZiNTIyNWQyOGIxIjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitDQU1FTExJQSAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjA6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjE6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006IkNBTUVMTElBLTE5Mi1HQ00iOjE5MjoyOi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6NzotMQorCitDQU1FTExJQSAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjg6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006IkNBTUVMTElBLTE5Mi1HQ00iOjE5Mjo5Oi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjE1Oi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjE2Oi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjE3Oi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjMxOi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjMyOi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjMzOi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjQ3Oi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjQ4Oi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjQ5Oi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToxOTI6MDowCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOjE5MjoxOjAKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006MTkyOjA6MQorCitDQU1FTExJQSAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006MTkyOjE2OjAKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOjE5MjowOjE2CisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToxOTI6MTY6NgorCitDQU1FTExJQSAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006MTkyOjA6MjIKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOjE5MjoxNjoxNgorCitDQU1FTExJQSAxOTIgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTTotMToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiIjoiIjoiYmE5YWU4OWZkZGNlNGI1MTEzMWUxN2M0ZDY1Y2U1ODciOjA6MAorCitDQU1FTExJQSAxOTIgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTTotMToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGY5YzBhYTI1NDk3MTRjODhiYjI2NjVlOGFmODZkNDIiOiIiOiIiOiI3ODNjZmY1YzVhY2E3MTk3MzIwNjU4YTc0Mjc5YWIzNyI6MDpNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQKKworQ0FNRUxMSUEgMTkyIEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICMzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006LTE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6IjBmMDA5ZTg4NDEwZDg0YWQ5M2M5MGQ1NWVmYmUyMGZmYTg1NTQ5MmY0ZGZkMGZiNDg1YzRmMDJmNTM2ZmVmZmJiNGQ5Njc3MjllNWM2N2YxZGUwNzUwMjU1Y2M1MDA3MTZiYTQ4M2ViM2IwYTJiZjYwN2FmMjhmNmE2MGJiMmU5IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5MWFhZmQyNTUiOiIiOiI4ZDY0NWEwYjBlNDhkM2MzYjYwYTAxNDE1N2NiNDliNCI6MDowCisKK0NBTUVMTElBIDE5MiBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOi0xOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiOiJjYWZlYmFiZWZhY2VkYmFkZGVjYWY4ODgiOiIwZjAwOWU4ODQxMGQ4NGFkOTNjOTBkNTVlZmJlMjBmZmE4NTU0OTJmNGRmZDBmYjQ4NWM0ZjAyZjUzNmZlZmZiYjRkOTY3NzI5ZTVjNjdmMWRlMDc1MDI1NWNjNTAwNzE2YmE0ODNlYjNiMGEyYmY2MDdhZjI4ZjYiOiIiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoiMTFiMTViYjVhYjZmYWMwYzQyMjAxNGU5MWVhY2JmMmIiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0NBTUVMTElBIDE5MiBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOi0xOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiOiJjYWZlYmFiZWZhY2VkYmFkIjoiNjc4YjNkY2IyNzBmYWEyMDZkYzVmNmZiYjUwMTQ5OTZlODZkNmYzZTM1Y2RjZGZlYjAzYjM3YjliMDZmZjRmZjI2ODIyNDg4MjNiZDNjODQxMjRkYzc2YWY3YmRlM2RkNDQwYzIyOGI1ZWZiYzc5NWRkODBkZmI2IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6ImY4NzYxNDNkOTMzMjE0YTUwMzVmZjBiYjk2ZmY2NTBiIjowOjAKKworQ0FNRUxMSUEgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1NjowOi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1NjoxOi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNOiJDQU1FTExJQS0yNTYtR0NNIjoyNTY6MjotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2Ojc6LTEKKworQ0FNRUxMSUEgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1Njo4Oi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNOiJDQU1FTExJQS0yNTYtR0NNIjoyNTY6OTotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1NjoxNTotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1NjoxNjotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1NjoxNzotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1NjozMTotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1NjozMjotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1NjozMzotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1Njo0NzotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1Njo0ODotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1Njo0OTotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006MjU2OjA6MAorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToyNTY6MTowCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNOjI1NjowOjEKKworQ0FNRUxMSUEgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNOjI1NjoxNjowCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToyNTY6MDoxNgorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006MjU2OjE2OjYKKworQ0FNRUxMSUEgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNOjI1NjowOjIyCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToyNTY6MTY6MTYKKworQ0FNRUxMSUEgMjU2IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006LTE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIiOiIiOiI5Y2RiMjY5YjVkMjkzYmM1ZGI5YzU1YjA1N2Q5YjU5MSI6MDpNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQKKworQ0FNRUxMSUEgMjU2IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICMyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006LTE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzZDRiMmNkZTY2Njc2MWJhNWRmYjMwNTE3OGU2NjdmYiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiMjg0YjYzYmIxNDNjNDBjZTEwMGZiNGRlYTZiYjYxN2IiOjA6MAorCitDQU1FTExJQSAyNTYgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTTotMToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6ImFkMTQyYzExNTc5ZGQ5NWU0MWYzYzFmMzI0ZGFiYzI1NTg2NGQ5MjBmMWI2NTc1OWQ4ZjU2MGQ0OTQ5ZDQ0Nzc1OGRmZGNmNzdhYTlmNjI1ODFjN2ZmNTcyYTAzN2Y4MTBjYjFhOWM0YjNjYTZlZDYzODE3OWI3NzY1NDllMDkyIjoiIjoiIjoiYzkxMjY4NjI3MGEyYjk5NjY0MTVmY2EzYmU3NWM0NjgiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0NBTUVMTElBIDI1NiBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNOi0xOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiYWQxNDJjMTE1NzlkZDk1ZTQxZjNjMWYzMjRkYWJjMjU1ODY0ZDkyMGYxYjY1NzU5ZDhmNTYwZDQ5NDhkNDQ3NzU4ZGZkY2Y3N2FhOWY2MjU4MWM3ZmY1NzJhMDM3ZjgxMGNiMWE5YzRiM2NhNmVkNjM4MTc5Yjc3IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6IjRlNGIxNzhkOGZlMjZmZGM5NWUyZTcyNDZkZDk0YmVjIjowOjAKKworQ0FNRUxMSUEgMjU2IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006LTE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJjYWZlYmFiZWZhY2VkYmFkIjoiNmNhOTVmYmI3ZDE2NTc3YTllZjJmZGVkOTRkYzg1YjVkNDBjNjI5ZjZiZWYyYzY0OTg4OGUzY2JiMGVkZWRjNzgxMGMwNGIxMmMyOTgzYmJiYmM0ODJlMTZlNDVjOTIxNWFlMTJjMTVjNTVmMmY0ODA5ZDA2NjUyIjoiIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6ImU2NDcyYjhlYmQzMzFiZmNjN2MwZmE2M2NlMDk0NDYyIjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5udWxsLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLm51bGwuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjVlOTcwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5udWxsLmRhdGEKQEAgLTAsMCArMSw5NSBAQAorTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX05VTEw6Ik5VTEwiOjA6MDotMQorCitOVUxMIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfTlVMTDoiTlVMTCI6MDoxOi0xCisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9OVUxMOiJOVUxMIjowOjI6LTEKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX05VTEw6Ik5VTEwiOjA6NzotMQorCitOVUxMIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfTlVMTDoiTlVMTCI6MDo4Oi0xCisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9OVUxMOiJOVUxMIjowOjk6LTEKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9OVUxMOiJOVUxMIjowOjE1Oi0xCisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfTlVMTDoiTlVMTCI6MDoxNjotMQorCitOVUxMIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX05VTEw6Ik5VTEwiOjA6MzE6LTEKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9OVUxMOiJOVUxMIjowOjMyOi0xCisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfTlVMTDoiTlVMTCI6MDozMzotMQorCitOVUxMIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX05VTEw6Ik5VTEwiOjA6NDc6LTEKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9OVUxMOiJOVUxMIjowOjQ4Oi0xCisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfTlVMTDoiTlVMTCI6MDo0OTotMQorCitOVUxMIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfTlVMTDowOjE6MDoKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX05VTEw6MDowOjE6CisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfTlVMTDowOjE2OjA6CisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfTlVMTDowOjA6MTY6CisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfTlVMTDowOjE6MTU6CisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyA0CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfTlVMTDowOjE1OjE6CisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfTlVMTDowOjE1Ojc6CisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfTlVMTDowOjE2OjY6CisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfTlVMTDowOjE3OjY6CisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfTlVMTDowOjE2OjE2OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5wYWRkaW5nLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLnBhZGRpbmcuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmZjMjY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5wYWRkaW5nLmRhdGEKQEAgLTAsMCArMSwyMzQgQEAKK0NpcGhlciBsaXN0CittYmVkdGxzX2NpcGhlcl9saXN0OgorCitDaXBoZXIgbnVsbC91bmluaXRpYWxpc2VkIGFyZ3VtZW50cworY2lwaGVyX251bGxfYXJnczoKKworU2V0IHBhZGRpbmcgd2l0aCBBRVMtQ0JDCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX1BLQ1M3OjAKKworU2V0IHBhZGRpbmcgd2l0aCBBRVMtQ0ZCCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK3NldF9wYWRkaW5nOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4Ok1CRURUTFNfUEFERElOR19QS0NTNzpNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKworU2V0IHBhZGRpbmcgd2l0aCBBRVMtQ1RSCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK3NldF9wYWRkaW5nOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOk1CRURUTFNfUEFERElOR19QS0NTNzpNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKworU2V0IHBhZGRpbmcgd2l0aCBDQU1FTExJQS1DQkMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK3NldF9wYWRkaW5nOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX1BLQ1M3OjAKKworU2V0IHBhZGRpbmcgd2l0aCBDQU1FTExJQS1DRkIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitzZXRfcGFkZGluZzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4Ok1CRURUTFNfUEFERElOR19QS0NTNzpNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKworU2V0IHBhZGRpbmcgd2l0aCBDQU1FTExJQS1DVFIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitzZXRfcGFkZGluZzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOk1CRURUTFNfUEFERElOR19QS0NTNzpNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKworU2V0IHBhZGRpbmcgd2l0aCBERVMtQ0JDCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfREVTX0NCQzpNQkVEVExTX1BBRERJTkdfUEtDUzc6MAorCitTZXQgcGFkZGluZyB3aXRoIEJMT1dGSVNILUNCQworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOk1CRURUTFNfUEFERElOR19QS0NTNzowCisKK1NldCBwYWRkaW5nIHdpdGggQkxPV0ZJU0gtQ0ZCCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6TUJFRFRMU19QQURESU5HX1BLQ1M3Ok1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQQorCitTZXQgcGFkZGluZyB3aXRoIEJMT1dGSVNILUNUUgorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK3NldF9wYWRkaW5nOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjpNQkVEVExTX1BBRERJTkdfUEtDUzc6TUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBCisKK1NldCBwYWRkaW5nIHdpdGggTlVMTAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfTlVMTDpNQkVEVExTX1BBRERJTkdfUEtDUzc6TUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBCisKK1NldCBub24tZXhpc3RlbnQgcGFkZGluZyB3aXRoIEFFUy1DQkMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6LTE6TUJFRFRMU19FUlJfQ0lQSEVSX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworU2V0IG5vbi1leGlzdGVudCBwYWRkaW5nIHdpdGggQ0FNRUxMSUEtQ0JDCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzotMTpNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRQorCitTZXQgbm9uLWV4aXN0ZW50IHBhZGRpbmcgd2l0aCBERVMtQ0JDCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK3NldF9wYWRkaW5nOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6LTE6TUJFRFRMU19FUlJfQ0lQSEVSX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworU2V0IG5vbi1leGlzdGVudCBwYWRkaW5nIHdpdGggQkxPV0ZJU0gtQ0JDCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOi0xOk1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFCisKK0NoZWNrIFBLQ1MgcGFkZGluZyAjMSAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDQwNDA0MDQiOjA6NAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzIgKGNvcnJlY3QpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1BLQ1M3OiJEQUJCQUQwMDAxIjowOjQKKworQ2hlY2sgUEtDUyBwYWRkaW5nICMzIChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAwMTAxIjowOjUKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM0IChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiMDMwMzAzIjowOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM1IChudWxsIHBhZGRpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1BLQ1M3OiJEQUJCQUQwMDAwIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM2ICh0b28gZmV3IHBhZGRpbmcgYnl0ZXMpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1BLQ1M3OiJEQUJCQUQwMDAyIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICMxKQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAwMzAyMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzIpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1BLQ1M3OiJEQUJCQUQwMDAzMDEwMyI6TUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORzowCisKK0NoZWNrIFBLQ1MgcGFkZGluZyAjNyAobm9uLXVuaWZvcm0gcGFkZGluZyBieXRlcyAjMykKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDMwNzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICM0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAwMzBiMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1BLQ1M3OiJEQUJCQUQwMDAzMTMwMyI6TUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORzowCisKK0NoZWNrIFBLQ1MgcGFkZGluZyAjNyAobm9uLXVuaWZvcm0gcGFkZGluZyBieXRlcyAjNikKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDMyMzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICM3KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAwMzQyMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzgpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1BLQ1M3OiJEQUJCQUQwMDAzODMwMyI6TUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORzowCisKK0NoZWNrIFBLQ1MgcGFkZGluZyAjNyAobm9uLXVuaWZvcm0gcGFkZGluZyBieXRlcyAjOSkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDIwMzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICMxMCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDEwMzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICMxMSkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDcwMzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICMxMikKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMGIwMzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICMxMykKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMTMwMzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICMxNCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMjMwMzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICMxNSkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwNDIwMzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICMxNikKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwODMwMzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM4IChvdmVybG9uZykKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IjA0MDQwNCI6TUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORzowCisKK0NoZWNrIG9uZSBhbmQgemVyb3MgcGFkZGluZyAjMSAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TOiJEQUJCQUQwMDgwIjowOjQKKworQ2hlY2sgb25lIGFuZCB6ZXJvcyBwYWRkaW5nICMyIChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1M6IkRBQkJBRDAwODAwMCI6MDo0CisKK0NoZWNrIG9uZSBhbmQgemVyb3MgcGFkZGluZyAjMyAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TOiJEQUJCQUQwMDgwMDAwMCI6MDo0CisKK0NoZWNrIG9uZSBhbmQgemVyb3MgcGFkZGluZyAjNCAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TOiJEQUJCQUQwMDgwODAwMCI6MDo1CisKK0NoZWNrIG9uZSBhbmQgemVyb3MgcGFkZGluZyAjNSAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TOiI4MDAwMDAiOjA6MAorCitDaGVjayBvbmUgYW5kIHplcm9zIHBhZGRpbmcgIzYgKG1pc3Npbmcgb25lKQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1M6IkRBQkJBRDAwMDAiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6NAorCitDaGVjayBvbmUgYW5kIHplcm9zIHBhZGRpbmcgIzcgKG92ZXJsb25nKQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1M6IjAwMDAwMDAwMDAiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6NAorCitDaGVjayB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcgIzEgKGNvcnJlY3QpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTjoiREFCQkFEMDAwMSI6MDo0CisKK0NoZWNrIHplcm9zIGFuZCBsZW4gcGFkZGluZyAjMiAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOOiJEQUJCQUQwMDAwMDIiOjA6NAorCitDaGVjayB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcgIzMgKGNvcnJlY3QpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTjoiREFCQkFEMDAwMDAzIjowOjMKKworQ2hlY2sgemVyb3MgYW5kIGxlbiBwYWRkaW5nICM0IChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU46IjAwMDAwMyI6MDowCisKK0NoZWNrIHplcm9zIGFuZCBsZW4gcGFkZGluZyAjNSAob3ZlcmxvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTjoiMDAwMDA0IjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgemVyb3MgYW5kIGxlbiBwYWRkaW5nICM2IChub3QgZW5vdWdoIHplcm9zKQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU46IkRBQkJBRDAwMDAwNCI6TUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORzowCisKK0NoZWNrIHplcm9zIHBhZGRpbmcgIzEgKGNvcnJlY3QpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1pFUk9TOiJEQUJCQUQwMCI6MDozCisKK0NoZWNrIHplcm9zIHBhZGRpbmcgIzIgKGNvcnJlY3QpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1pFUk9TOiJEQUJCQUQwMDAwIjowOjMKKworQ2hlY2sgemVyb3MgcGFkZGluZyAjMyAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfWkVST1M6IkRBQkJBRCI6MDozCisKK0NoZWNrIHplcm9zIHBhZGRpbmcgIzQgKGNvcnJlY3QpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1pFUk9TOiIwMDAwMDAiOjA6MAorCitDaGVjayBubyBwYWRkaW5nICMxIChjb3JyZWN0IGJ5IGRlZmluaXRpb24pCitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19OT05FOiJEQUJCQUQwMCI6MDo0CisKK0NoZWNrIG5vIHBhZGRpbmcgIzIgKGNvcnJlY3QgYnkgZGVmaW5pdGlvbikKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX05PTkU6IkRBQkJBRDAwMDEiOjA6NQorCitDaGVjayBubyBwYWRkaW5nICMzIChjb3JyZWN0IGJ5IGRlZmluaXRpb24pCitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19OT05FOiIiOjA6MApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NtYWMuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jbWFjLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiNzYwOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jbWFjLmRhdGEKQEAgLTAsMCArMSw2NCBAQAorQ01BQyBzZWxmIHRlc3QKK21iZWR0bHNfY21hY19zZWxmX3Rlc3Q6CisKK0NNQUMgbnVsbCBhcmd1bWVudHMKK21iZWR0bHNfY21hY19udWxsX2FyZ3M6CisKK0NNQUMgaW5pdCAjMSBBRVMtMTI4OiBPSworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NtYWNfc2V0a2V5Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOjEyODowCisKK0NNQUMgaW5pdCAjMiBBRVMtMTkyOiBPSworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NtYWNfc2V0a2V5Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOjE5MjowCisKK0NNQUMgaW5pdCAjMyBBRVMtMjU2OiBPSworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NtYWNfc2V0a2V5Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOjI1NjowCisKK0NNQUMgaW5pdCAjNCAzREVTIDogT0sKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQworbWJlZHRsc19jbWFjX3NldGtleTpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19FQ0I6MTkyOjAKKworQ01BQyBpbml0ICM1IEFFUy0yMjQ6IGJhZCBrZXkgc2l6ZQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NtYWNfc2V0a2V5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoyMjQ6TUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBCisKK0NNQUMgaW5pdCAjNiBBRVMtMDogYmFkIGtleSBzaXplCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY21hY19zZXRrZXk6TUJFRFRMU19DSVBIRVJfSURfQUVTOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBCisKK0NNQUMgaW5pdCAjNyBDYW1lbGxpYTogd3JvbmcgY2lwaGVyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jbWFjX3NldGtleTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToxMjg6TUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBCisKK0NNQUMgU2luZ2xlIEJsb2NrcyAjMSAtIEVtcHR5IGJsb2NrLCBubyB1cGRhdGVzCittYmVkdGxzX2NtYWNfbXVsdGlwbGVfYmxvY2tzOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6MTI4OjE2OiIiOi0xOiIiOi0xOiIiOi0xOiIiOi0xOiJiYjFkNjkyOWU5NTkzNzI4N2ZhMzdkMTI5Yjc1Njc0NiIKKworQ01BQyBTaW5nbGUgQmxvY2tzICMyIC0gU2luZ2xlIDE2IGJ5dGUgYmxvY2sKK21iZWR0bHNfY21hY19tdWx0aXBsZV9ibG9ja3M6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoxMjg6MTY6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhIjoxNjoiIjotMToiIjotMToiIjotMToiMDcwYTE2YjQ2YjRkNDE0NGY3OWJkZDlkZDA0YTI4N2MiCisKK0NNQUMgU2luZ2xlIEJsb2NrcyAjMyAtIFNpbmdsZSA2NCBieXRlIGJsb2NrCittYmVkdGxzX2NtYWNfbXVsdGlwbGVfYmxvY2tzOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6MTI4OjE2OiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYWFlMmQ4YTU3MWUwM2FjOWM5ZWI3NmZhYzQ1YWY4ZTUxMzBjODFjNDZhMzVjZTQxMWU1ZmJjMTE5MWEwYTUyZWZmNjlmMjQ0NWRmNGY5YjE3YWQyYjQxN2JlNjZjMzcxMCI6NjQ6IiI6LTE6IiI6LTE6IiI6LTE6IjUxZjBiZWJmN2UzYjlkOTJmYzQ5NzQxNzc5MzYzY2ZlIgorCitDTUFDIE11bHRpcGxlIEJsb2NrcyAjMSAtIE11bHRpcGxlIDggYnl0ZSBibG9ja3MKK21iZWR0bHNfY21hY19tdWx0aXBsZV9ibG9ja3M6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoxMjg6MTY6IjZiYzFiZWUyMmU0MDlmOTYiOjg6ImU5M2Q3ZTExNzM5MzE3MmEiOjg6IiI6LTE6IiI6LTE6IjA3MGExNmI0NmI0ZDQxNDRmNzliZGQ5ZGQwNGEyODdjIgorCitDTUFDIE11bHRpcGxlIEJsb2NrcyAjMiAtIE11bHRpcGxlIDE2IGJ5dGUgYmxvY2tzCittYmVkdGxzX2NtYWNfbXVsdGlwbGVfYmxvY2tzOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6MTI4OjE2OiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYSI6MTY6ImFlMmQ4YTU3MWUwM2FjOWM5ZWI3NmZhYzQ1YWY4ZTUxIjoxNjoiMzBjODFjNDZhMzVjZTQxMWU1ZmJjMTE5MWEwYTUyZWYiOjE2OiJmNjlmMjQ0NWRmNGY5YjE3YWQyYjQxN2JlNjZjMzcxMCI6MTY6IjUxZjBiZWJmN2UzYjlkOTJmYzQ5NzQxNzc5MzYzY2ZlIgorCitDTUFDIE11bHRpcGxlIEJsb2NrcyAjMyAtIE11bHRpcGxlIHZhcmlhYmxlIHNpemVkIGJsb2NrcworbWJlZHRsc19jbWFjX211bHRpcGxlX2Jsb2NrczpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOjEyODoxNjoiNmJjMWJlZTIyZTQwOWY5NiI6ODoiZTkzZDdlMTE3MzkzMTcyYWFlMmQ4YTU3MWUwM2FjOWMiOjE2OiI5ZWI3NmZhYzQ1YWY4ZTUxMzBjODFjNDZhMzVjZTQxMWU1ZmJjMTE5MWEwYTUyZWYiOjI0OiJmNjlmMjQ0NWRmNGY5YjE3YWQyYjQxN2JlNjZjMzcxMCI6MTY6IjUxZjBiZWJmN2UzYjlkOTJmYzQ5NzQxNzc5MzYzY2ZlIgorCitDTUFDIE11bHRpcGxlIEJsb2NrcyAjNCAtIE11bHRpcGxlIDggYnl0ZSBibG9ja3Mgd2l0aCBnYXBzCittYmVkdGxzX2NtYWNfbXVsdGlwbGVfYmxvY2tzOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6MTI4OjE2OiIiOjA6IjZiYzFiZWUyMmU0MDlmOTYiOjg6IiI6MDoiZTkzZDdlMTE3MzkzMTcyYSI6ODoiMDcwYTE2YjQ2YjRkNDE0NGY3OWJkZDlkZDA0YTI4N2MiCisKK0NNQUMgTXVsdGlwbGUgT3BlcmF0aW9ucywgc2FtZSBrZXkgIzEgLSBFbXB0eSwgZW1wdHkKK21iZWR0bHNfY21hY19tdWx0aXBsZV9vcGVyYXRpb25zX3NhbWVfa2V5Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOiI4ZTczYjBmN2RhMGU2NDUyYzgxMGYzMmI4MDkwNzllNTYyZjhlYWQyNTIyYzZiN2IiOjE5MjoxNjoiIjotMToiIjotMToiIjotMToiZDE3ZGRmNDZhZGFhY2RlNTMxY2FjNDgzZGU3YTkzNjciOiIiOi0xOiIiOi0xOiIiOi0xOiJkMTdkZGY0NmFkYWFjZGU1MzFjYWM0ODNkZTdhOTM2NyIKKworQ01BQyBNdWx0aXBsZSBPcGVyYXRpb25zLCBzYW1lIGtleSAjMiAtIEVtcHR5LCA2NCBieXRlIGJsb2NrCittYmVkdGxzX2NtYWNfbXVsdGlwbGVfb3BlcmF0aW9uc19zYW1lX2tleTpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjoiOGU3M2IwZjdkYTBlNjQ1MmM4MTBmMzJiODA5MDc5ZTU2MmY4ZWFkMjUyMmM2YjdiIjoxOTI6MTY6IiI6LTE6IiI6LTE6IiI6LTE6ImQxN2RkZjQ2YWRhYWNkZTUzMWNhYzQ4M2RlN2E5MzY3IjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmFhZTJkOGE1NzFlMDNhYzljOWViNzZmYWM0NWFmOGU1MTMwYzgxYzQ2YTM1Y2U0MTFlNWZiYzExOTFhMGE1MmVmZjY5ZjI0NDVkZjRmOWIxN2FkMmI0MTdiZTY2YzM3MTAiOjY0OiIiOi0xOiIiOi0xOiJhMWQ1ZGYwZWVkNzkwZjc5NGQ3NzU4OTY1OWYzOWExMSIKKworQ01BQyBNdWx0aXBsZSBPcGVyYXRpb25zLCBzYW1lIGtleSAjMyAtIHZhcmlhYmxlIGJ5dGUgYmxvY2tzCittYmVkdGxzX2NtYWNfbXVsdGlwbGVfb3BlcmF0aW9uc19zYW1lX2tleTpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjoiOGU3M2IwZjdkYTBlNjQ1MmM4MTBmMzJiODA5MDc5ZTU2MmY4ZWFkMjUyMmM2YjdiIjoxOTI6MTY6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEiOjMyOiIzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMzNzEwIjozMjoiIjotMToiYTFkNWRmMGVlZDc5MGY3OTRkNzc1ODk2NTlmMzlhMTEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYWFlMmQ4YTU3MWUwM2FjOWM5ZWI3NmZhYzQ1YWY4ZTUxIjozMjoiMzBjODFjNDZhMzVjZTQxMWU1ZmJjMTE5MWEwYTUyZWZmNjlmMjQ0NWRmNGY5YjE3YWQyYjQxN2JlNjZjMzcxMCI6MzI6IiI6LTE6ImExZDVkZjBlZWQ3OTBmNzk0ZDc3NTg5NjU5ZjM5YTExIgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY21hYy5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jbWFjLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMzFhYjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY21hYy5mdW5jdGlvbgpAQCAtMCwwICsxLDMxMCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9jaXBoZXIuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NtYWMuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfQ01BQ19DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIG1iZWR0bHNfY21hY19zZWxmX3Rlc3QoICkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jbWFjX3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19jbWFjX251bGxfYXJncyggKQoreworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHg7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICB1bnNpZ25lZCBjaGFyIHRlc3Rfa2V5W01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKyAgICB1bnNpZ25lZCBjaGFyIHRlc3RfZGF0YVtNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWF07CisgICAgdW5zaWduZWQgY2hhciB0ZXN0X291dHB1dFtNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWF07CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4ICk7CisKKyAgICAvKiBUZXN0IE5VTEwgY2lwaGVyIGluZm8gKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoICZjdHgsIHRlc3RfZGF0YSwgMTYgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LCBjaXBoZXJfaW5mbyApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX3N0YXJ0cyggTlVMTCwgdGVzdF9rZXksIDEyOCApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfc3RhcnRzKCAmY3R4LCBOVUxMLCAxMjggKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX3VwZGF0ZSggTlVMTCwgdGVzdF9kYXRhLCAxNiApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCAmY3R4LCBOVUxMLCAxNiApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfZmluaXNoKCBOVUxMLCB0ZXN0X291dHB1dCApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfZmluaXNoKCAmY3R4LCBOVUxMICkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY19yZXNldCggTlVMTCApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWMoIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfa2V5LCAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGF0YSwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0ICkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hYyggY2lwaGVyX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9kYXRhLCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjKCBjaXBoZXJfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9rZXksIDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0ICkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hYyggY2lwaGVyX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfa2V5LCAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGF0YSwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jbWFjX3ByZl8xMjgoIE5VTEwsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGF0YSwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NtYWNfcHJmXzEyOCggdGVzdF9rZXksIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0ICkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jbWFjX3ByZl8xMjgoIHRlc3Rfa2V5LCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2RhdGEsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19jbWFjX3NldGtleSggaW50IGNpcGhlcl90eXBlLCBpbnQga2V5X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgKQoreworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm87CisgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcFsxNl07CisKKyAgICBtZW1zZXQoIGtleSwgMHgyQSwgc2l6ZW9mKCBrZXkgKSApOworICAgIFRFU1RfQVNTRVJUKCAodW5zaWduZWQpIGtleV9zaXplIDw9IDggKiBzaXplb2YoIGtleSApICk7CisKKyAgICBURVNUX0FTU0VSVCggKCBjaXBoZXJfaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCBjaXBoZXJfdHlwZSApICkKKyAgICAgICAgICAgICAgICAgICAgIT0gTlVMTCApOworCisgICAgbWVtc2V0KCBidWYsIDB4MkEsIHNpemVvZiggYnVmICkgKTsKKyAgICBURVNUX0FTU0VSVCggKCByZXN1bHQgPT0gbWJlZHRsc19jaXBoZXJfY21hYyggY2lwaGVyX2luZm8sIGtleSwga2V5X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIDE2LCB0bXAgKSApICE9IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19jbWFjX211bHRpcGxlX2Jsb2NrcyggaW50IGNpcGhlcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICprZXlfc3RyaW5nLCBpbnQga2V5Yml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJsb2NrMV9zdHJpbmcsIGludCBibG9jazFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpibG9jazJfc3RyaW5nLCBpbnQgYmxvY2syX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmxvY2szX3N0cmluZywgaW50IGJsb2NrM19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJsb2NrNF9zdHJpbmcsIGludCBibG9jazRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpleHBlY3RlZF9yZXN1bHRfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYmxvY2sxWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBibG9jazJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJsb2NrM1sxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYmxvY2s0WzEwMF07CisgICAgdW5zaWduZWQgY2hhciBleHBlY3RlZF9yZXN1bHRbMTAwXTsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVhdOworCisgICAgLyogQ29udmVydCB0aGUgdGVzdCBwYXJhbWV0ZXJzIHRvIGJpbmFyeSBkYXRhICovCisgICAgdW5oZXhpZnkoIGtleSwga2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBibG9jazEsIGJsb2NrMV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggYmxvY2syLCBibG9jazJfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGJsb2NrMywgYmxvY2szX3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBibG9jazQsIGJsb2NrNF9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggZXhwZWN0ZWRfcmVzdWx0LCBleHBlY3RlZF9yZXN1bHRfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4ICk7CisKKyAgICAvKiBWYWxpZGF0ZSB0aGUgdGVzdCBpbnB1dHMgKi8KKyAgICBURVNUX0FTU0VSVCggYmxvY2sxX2xlbiA8PSAxMDAgKTsKKyAgICBURVNUX0FTU0VSVCggYmxvY2syX2xlbiA8PSAxMDAgKTsKKyAgICBURVNUX0FTU0VSVCggYmxvY2szX2xlbiA8PSAxMDAgKTsKKyAgICBURVNUX0FTU0VSVCggYmxvY2s0X2xlbiA8PSAxMDAgKTsKKworICAgIC8qIFNldCB1cCAqLworICAgIFRFU1RfQVNTRVJUKCAoIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcl90eXBlICkgKQorICAgICAgICAgICAgICAgICAgICAhPSBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgsIGNpcGhlcl9pbmZvICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfc3RhcnRzKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJpdHMgKSA9PSAwICk7CisKKyAgICAvKiBNdWx0aXBsZSBwYXJ0aWFsIGFuZCBjb21wbGV0ZSBibG9ja3MuIEEgbmVnYXRpdmUgbGVuZ3RoIG1lYW5zIHNraXAgdGhlCisgICAgICogdXBkYXRlIG9wZXJhdGlvbiAqLworICAgIGlmKCBibG9jazFfbGVuID49IDApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX3VwZGF0ZSggJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopYmxvY2sxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrMV9sZW4gKSA9PSAwKTsKKworICAgIGlmKCBibG9jazJfbGVuID49IDAgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKWJsb2NrMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jazJfbGVuICkgPT0gMCk7CisKKyAgICBpZiggYmxvY2szX2xlbiA+PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilibG9jazMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2szX2xlbiApID09IDApOworCisgICAgaWYoIGJsb2NrNF9sZW4gPj0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX3VwZGF0ZSggJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopYmxvY2s0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrNF9sZW4gKSA9PSAwKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggb3V0cHV0LCBleHBlY3RlZF9yZXN1bHQsIGJsb2NrX3NpemUgKSAgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19jbWFjX211bHRpcGxlX29wZXJhdGlvbnNfc2FtZV9rZXkoIGludCBjaXBoZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqa2V5X3N0cmluZywgaW50IGtleWJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpibG9ja19hMV9zdHJpbmcsIGludCBibG9ja19hMV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJsb2NrX2EyX3N0cmluZywgaW50IGJsb2NrX2EyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmxvY2tfYTNfc3RyaW5nLCBpbnQgYmxvY2tfYTNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpleHBlY3RlZF9yZXN1bHRfYV9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJsb2NrX2IxX3N0cmluZywgaW50IGJsb2NrX2IxX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmxvY2tfYjJfc3RyaW5nLCBpbnQgYmxvY2tfYjJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpibG9ja19iM19zdHJpbmcsIGludCBibG9ja19iM19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmV4cGVjdGVkX3Jlc3VsdF9iX3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJsb2NrX2ExWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBibG9ja19hMlsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYmxvY2tfYTNbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJsb2NrX2IxWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBibG9ja19iMlsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYmxvY2tfYjNbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGV4cGVjdGVkX3Jlc3VsdF9hWzEwMF0sIGV4cGVjdGVkX3Jlc3VsdF9iWzEwMF07CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0W01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKworICAgIC8qIENvbnZlcnQgdGhlIHRlc3QgcGFyYW1ldGVycyB0byBiaW5hcnkgZGF0YSAqLworICAgIHVuaGV4aWZ5KCBrZXksIGtleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggYmxvY2tfYTEsIGJsb2NrX2ExX3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBibG9ja19hMiwgYmxvY2tfYTJfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGJsb2NrX2EzLCBibG9ja19hM19zdHJpbmcgKTsKKworICAgIHVuaGV4aWZ5KCBibG9ja19iMSwgYmxvY2tfYjFfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGJsb2NrX2IyLCBibG9ja19iMl9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggYmxvY2tfYjMsIGJsb2NrX2IzX3N0cmluZyApOworCisgICAgdW5oZXhpZnkoIGV4cGVjdGVkX3Jlc3VsdF9hLCBleHBlY3RlZF9yZXN1bHRfYV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggZXhwZWN0ZWRfcmVzdWx0X2IsIGV4cGVjdGVkX3Jlc3VsdF9iX3N0cmluZyApOworCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eCApOworCisgICAgLyogVmFsaWRhdGUgdGhlIHRlc3QgaW5wdXRzICovCisgICAgVEVTVF9BU1NFUlQoIGJsb2NrX2ExX2xlbiA8PSAxMDAgKTsKKyAgICBURVNUX0FTU0VSVCggYmxvY2tfYTJfbGVuIDw9IDEwMCApOworICAgIFRFU1RfQVNTRVJUKCBibG9ja19hM19sZW4gPD0gMTAwICk7CisKKyAgICBURVNUX0FTU0VSVCggYmxvY2tfYjFfbGVuIDw9IDEwMCApOworICAgIFRFU1RfQVNTRVJUKCBibG9ja19iMl9sZW4gPD0gMTAwICk7CisgICAgVEVTVF9BU1NFUlQoIGJsb2NrX2IzX2xlbiA8PSAxMDAgKTsKKworICAgIC8qIFNldCB1cCAqLworICAgIFRFU1RfQVNTRVJUKCAoIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcl90eXBlICkgKQorICAgICAgICAgICAgICAgICAgICAhPSBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgsIGNpcGhlcl9pbmZvICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfc3RhcnRzKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJpdHMgKSA9PSAwICk7CisKKyAgICAvKiBTZXF1ZW5jZSBBICovCisKKyAgICAvKiBNdWx0aXBsZSBwYXJ0aWFsIGFuZCBjb21wbGV0ZSBibG9ja3MuIEEgbmVnYXRpdmUgbGVuZ3RoIG1lYW5zIHNraXAgdGhlCisgICAgICogdXBkYXRlIG9wZXJhdGlvbiAqLworICAgIGlmKCBibG9ja19hMV9sZW4gPj0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX3VwZGF0ZSggJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopYmxvY2tfYTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfYTFfbGVuICkgPT0gMCk7CisKKyAgICBpZiggYmxvY2tfYTJfbGVuID49IDAgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKWJsb2NrX2EyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrX2EyX2xlbiApID09IDApOworCisgICAgaWYoIGJsb2NrX2EzX2xlbiA+PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilibG9ja19hMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfYTNfbGVuICkgPT0gMCk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY19maW5pc2goICZjdHgsIG91dHB1dCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG91dHB1dCwgZXhwZWN0ZWRfcmVzdWx0X2EsIGJsb2NrX3NpemUgKSAgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfcmVzZXQoICZjdHggKSA9PSAwICk7CisKKyAgICAvKiBTZXF1ZW5jZSBCICovCisKKyAgICAvKiBNdWx0aXBsZSBwYXJ0aWFsIGFuZCBjb21wbGV0ZSBibG9ja3MuIEEgbmVnYXRpdmUgbGVuZ3RoIG1lYW5zIHNraXAgdGhlCisgICAgICogdXBkYXRlIG9wZXJhdGlvbiAqLworICAgIGlmKCBibG9ja19iMV9sZW4gPj0gMCkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilibG9ja19iMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja19iMV9sZW4gKSA9PSAwKTsKKworICAgIGlmKCBibG9ja19iMl9sZW4gPj0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX3VwZGF0ZSggJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopYmxvY2tfYjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfYjJfbGVuICkgPT0gMCk7CisKKyAgICBpZiggYmxvY2tfYjNfbGVuID49IDAgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKWJsb2NrX2IzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrX2IzX2xlbiApID09IDApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfZmluaXNoKCAmY3R4LCBvdXRwdXQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBvdXRwdXQsIGV4cGVjdGVkX3Jlc3VsdF9iLCBibG9ja19zaXplICkgID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY3RyX2RyYmcuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jdHJfZHJiZy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NjE2NTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY3RyX2RyYmcuZGF0YQpAQCAtMCwwICsxLDczNSBAQAorQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwwKSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImQyNTRmY2ZmMDIxZTY5ZDIyOWM5Y2ZhZDg1ZmE0ODZjIjoiYzE4MDgxYTY1ZDQ0MDIxNjE5YjNmMTgwYjFjOTIwMDI2YTU0NmYwYzcwODE0OThiNmVhNjYyNTI2ZDUxYjFjYjU4M2JmYWQ1Mzc1ZmZiYzlmZjQ2ZDIxOWM3MjIzZTk1NDU5ZDgyZTFlNzIyOWY2MzMxNjlkMjZiNTc0NzRmYTMzN2M5OTgxYzBiZmI5MTMxNGQ1NWI5ZTkxYzVhNWVlNDkzOTJjZmM1MjMxMmQ1NTYyYzRhNmVmZmRjMTBkMDY4IjoiIjoiIjoiMzQwMTE2NTZiNDI5MDA4ZjM1NjNlY2I1ZjI1OTA3MjMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMCkgIzEKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI3YmU4NzU0NTI2NmRhZGQxZDczNTQ2YzA5MjdhZmM4ZCI6ImE3ZjM4Yzc1MGJkNmZmNDFjNGU3OWY1YjdkZDMwMjRkNThjYTNmMWY0YzA5NjQ4NmM0YTczYzRmNzRhMjQxMGM0YzljNTE0M2ViOGMwOWRmODQyYmE0NDI3ZjM4NWJiZjY1YzM1MGIwYmYyYzg3MjQyYzdhMjNjOGMyZTBlNDE5ZTQ0ZTUwMGMyNTBmNmJjMGRjMjVlYzBjZTkyOWM0YWQ1ZmZiN2E4Nzk1MGM2MThmOGNlZTFhZjQ4MzFiNGI4ZSI6IiI6IiI6ImQ1YjFkYTc3ZjM2Y2U1ODUxMGI3NWRmZGU3MWRiZDVkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDApICMyCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiMzc3MTQxNmIxNjJmNGQ5YzVmNDhhMDViN2FhNzM5MzgiOiJkMjBhMGU1Y2RiNzE0ZjAxYjQ4ZTAwYmFlNTE5MDlmMzQ1YWYwNWRlMTMyMTdlNWQ1NWZjNmMyZDcwNWFlYTU1MDQyMGQ5YTQ1ODU5NGQ4MjViNzFlMTZiMzYxMzAwMjBjZjU5NDhmZTgxMzQ2MjA2MWMxYTIyMmQxZmYwZTFlNGIzZDIxYWU4ZWVlMzFkMzI2MDMzMGQ2NjhkMjRlZjNjODk0MWI4NzIwZTg1OTFiN2RlZWM0YmQzNWEzYTFmMWEiOiIiOiIiOiIzY2JkN2Q1M2FjMTc3MmM5NTkzMTE0MTlhZGFkODM2ZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwwKSAjMworY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImYyYmFkOGY3ZGFiM2Y1ODg2ZmFhMWNmNmUxZjUyYzg3IjoiNGRmNTRhNDgzYjQ1MTBlZDc2MDQ5ZmFhZTE0Yjk2MmZiYjE2NDU5ZDFmNmI0ZjRkYmVjYTg1ZGVkZWQ2MDE4MzYxMjIzYzg5M2Y5NDQyNzE5YzUxZWI1Njk1ZTEzMDRhMWMyYmU4YzA1ZDA4NDZiNjUxMGE5NTI1YTI4ODMxYThlZmNiZDgyYWE1MDU0MGQ3ZTc4NjRlMmI4YTQyZDQ0MzgwY2RjNmUwMmVlYmI0OGQwYjVhODQwYjdjZGQ2ZTA0IjoiIjoiIjoiMDA2MmQ4MjJiYzU0OWJlYTI5MmMzNzg0NjM0MDc4OWIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMCkgIzQKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiIxYzU3NjBhYTBmZDRjZTMwODczNWIyODY4MmI2NzI0NiI6Ijg5ZGVmZDQ0NDUwNjFjMDgwZTQ3NjJhZmFjMTk0YjlmNzljNGJiMWVkODhjOTYxYWY0MWQ5ZDM3YmQzODhhMWQ0NWM4MmNhNDZmNDA0MzQ4YTJhZTVlMjJjZTAwYWEzNWViYzdjNTA1MWQ4ODAwODkwZDQ0ZDI1Mjg0NDg5ZWZjYmQxZjVlMmIxNmU0MDNmNjkyMWY3MWJiZGZjZjdiOWFlZGRlZjY1YmM5MmZiZDFjYjllNGVhMzg5YWVlNTE3OSI6IiI6IiI6IjNiYWY4MTE1NTU0OGFmY2E2N2Q1N2M1MDNkMDBhNWI0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDApICM1CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiYjcyYjk0NTFhNWU4NjZlMjI2OTc4NjIzZDM2YjM0OTEiOiIyNzEzZDc0YWZmZWQ5OGUzNDMzNTU5ZTE3ZDI0MDI4OGJiMWExNzkwOTA0Y2Q3NzU0Y2FkOTcwMDdlMjA1YTE1N2I4ZGRjYTcwNGEzNjI0NDEzZjJlYzgzNjFjY2Q4NTQ0MmZiMGI3Y2M2MGEyNDdmMGZkMTAyY2VmNDQ2NzczMjE1MTRlYTQxODZkMDIwM2FiNzM4NzkyNWQwMjIyODAwY2UyMDc4YzQ1ODhiYzUwY2RmY2NiYzA0ZmJlY2Q1OTMiOiIiOiIiOiIwNDdhNTA4OTBjMjgyZTI2YmZlZGU0YzA5MDRmNTM2OSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwwKSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjkxYjk1NWEzZTdlY2NkN2YwNzI5MGNiYTQ0NjRiYWZmIjoiYjE2MDQ2NTQ0ODg5NGM3ZDVlZTE5NjNiYjNlMWEyZjNmNzVmY2QxNjdmZmEzMzJjNDFjNGM5MWMxODMwYjdjMDc0MTNiZDU4MDMwMjk1OGFhNmZhODE1ODhhZDJiMzE3MzY5OGE0YWZhZmRhNDY4YWNiMzY4ZGJiZDUyNDIwNzE5NmI5YTNiZTM3YWMyMWJhN2EwNzJiNGM4MjIzNDkyZWUxOGI0ODU1MTUyNGQ1YzM0NDljNWM4ZDM1MTcyMTJlIjoiIjoiIjoiYWYyYzA2MmZlZGI5OGVlNTk5YWUxZjQ3ZmMyMDIwNzEiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMCkgIzcKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJkMDgxMTQ2NzBjNGY2MDE2YTRjZjlkMmRhM2UzYTY3NCI6IjM4ZGZiZmI1MmMxODVhY2Y3NGRlMDBiNWE1MGYwY2Q5Njg4Mjg2NzQ3YWIzNDBjZmU5YWQzMGQzOGIzOTBmZDI0NDNiZmQ3ZWE5Mzk0MWQ4MjYyYWUwZjY2YjBlYWI0ZmY2NGJhNTlhMmZmOTQwYzNjMjZmZGExMDNlMGQ3OThkYmNhYTEzMThlODQyMTQzOTc1NjczYWY4NDA4YjVhZjQ4ZGZiYWE1NmNhNGY5ZGRjODcxMDAwMjhiNGE5NTU0OSI6IiI6IiI6IjU1MDMwZmVmNjVjNjc5ZWNhZmZiMGRjMDcwYmZkNGQyIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDApICM4CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiZTJhZjlhYmU4NzcwZTMzNzk4YTVmMDViMjIwNTdkMjQiOiI4OGZiMmE4MDIwZTYwNGVhNjRhNjIwZjQ3MDQwNzg4NTcwNjJjYzk3ZTI0NjA0YzMwZGU0YzcwY2JmNWU1YmVhMGYwZGI3OWQxNmY0ZGI2MzZhMmQ2Y2Q5OTJjNTg5MDM4OWE0MGNmZTkzOTY3ZWFjNjA5ZTViOWY2Njc4ODk0NDI4NTc1ODU0N2M3MTM2ZWYyZWUzYjM4NzI0ZWQzNDBkNjE3NjNkMGQ1OTkxZWNlNDkyNGJiNzI0ODNiOTY5NDUiOiIiOiIiOiJhNDRmMGNmYTM4MzkxNjgxMWZmZmIyZTBjZmM5YmZjMyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwwKSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImFlMzBmMTY0Mjc1M2M1Y2I2ZTExOGQ3ZmY1ZDU5ZjFkIjoiMzQwZGVmMzQyMGI2MDg0MjBkODFiNGVhODI1MmEzZDg2ZDNlMWRkNzU5N2U2MDYzZWQ5MjNhNzNhN2I4ZTk4MWU2MDc5ZjdmMGM0MmRlYjlmNGVmMTFkMmYzNTgxYWJhZGY0NGIwNmQ4ODJhZmRjNDc4OTY3NzdjZThkYWZkODVlYzA0MGY3ODczZDBlMjVjNGJlNzA5YzYxNGEyOGI3MDhlNTQ3MjY2YWM4ZjA3ZjVmZGI0NTBkNjNiYzBjOTk5IjoiIjoiIjoiYzdlNzY3MDE0NTU3MzU4MTg0MmJkMWYzZTBjNmU5MGIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMCkgIzEwCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiNzExZWNmZTQ2N2Q2ZjgzYmNjODJlNTY2NzI5NjY5YWYiOiIyMWQ2YzgyMjcwNmQxYWYwOWU0ZDIzM2MwZWJhYzdmNGVjNjBjN2JlMjUwMGRkNDFhODVhMTliMmRjNWM3ZGEyN2Y4YTgyMTY0YmQyYTY0NDIxOGNiNWFjMjgzYzU0N2RhMTA2NDc4NDQxM2VlZDVlY2YzMmZhZGQwMDM1N2FiYWFlODEyMjVhYzhkMDM5MWVhZDUzMzM2MmNmZjU2Nzk4ODI1NDQ1ZDYzOWIwYjQ1ZTAzMTJhYTcwNDdjMDBiNGQiOiIiOiIiOiJkM2EwZDJjNDU3ZjVlOWQxMzI4YTllMWQyMmI2ZWFmNiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwwKSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJmOWIyMjE1MmJjMGVmZjFlYmYwYmZhZmVlYTQwYWVjZiI6IjRlZTMyZjBhZWFkYjM5MzZlMTdmMWFhM2IxOGMxMGY3NzNkZWY1ZjgzNTAwYzJiYTk2Zjg0NDA4YTI1MjFjMTI1OGY2YmU5YWE1Y2VlNTI4NzQ2NjI5YWEyYjgxMThhYzQxZGQ5OGVmMWIzZGUzMWQyNmI4YzJhZDM0NDIwODEyMDNmNWVmMjFkZjQwOWRmMzM4MWZiZjJlMDY0ZmJhZWM2NGQ3MzFkYzkzYjMyMThlMzRiYjNiMDNiZmQ4ODM3MyI6IiI6IiI6Ijg2MDA5YjE0YzQ5MDZhNDA5YWJlNmNhOWIwNzE4Y2JlIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDApICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjUxNzRlNzZlOTA0ZmYxNDcxMzY3Y2NhY2U5YzY2ZWQ5IjoiZmE4MTUzNTY3MDI3NWU4YWI3NDEyMTM3N2NmODhhNDc0MmRkMGQ3YTk5Y2YwNmViOWMyYjRmZTJiMDM0MjNkYmU0NDEyMDExNDRjMjJhOWZjMGNhNDlmNWVmNjE0OTg3YTIyNzFjYzEwODlkMTBlZTAxYjI1MTYzYzA5MGExZjI2Mzc5N2U0ZjEzMDkyMGNkYzNiODkwYTA3OGU4YWJiYjA3MGRlZDJlOGZkNzE3ZjQzODlmMDZmZjJjMTBkMTgwIjoiIjoiIjoiMThkNmZjZDM1NDU3ZDI2NzgxNzVkZjM2ZGY1ZTIxNWQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMCkgIzEzCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiNzNjMzcyZjYwNTE5ZThlY2EzNzFlYWExM2ZiNTRmODgiOiI5MzBjMjkwYTc5N2I4NWQ1OGI1MmQwZDkyMzU2NDM2OTc3YjJmNjM2ZjA3ZDVhODBjOTg3ZmI3ZWVhNmI3NTBjY2ViOWViODc4NjA1NDdhYjQwMjk4NjVhNjgxMGZjNWMzNjYzYzRlMzY5ZjI5MDk5NDQ2MWQyZTljNzE2MGE4YjU5ODU4NTNiZDkwODhiM2U5NjlmOTg4ZmU2OTIzYjM5OTQwNDBlZWVlMDlhZDM1M2I5NjlkNTg5MzgyMzdjZmUiOiIiOiIiOiJmNjJjN2NmYmU3NDU1NTc0NDc5MGJjYzc5MzBlMDNjMyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwwKSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI3NWJhOGRkZWVmMjRmOWY1YjAwYjQyNmEzNjJjNGYwMiI6IjcwNjVkMTI4ZGRiMmZjNmVhMzFmNDExMGI2YzA5MzRlZDExMmM1MWQ3NGE0YTA3NDFhMDg0M2Q4YmVmYWMyMjkwMmEwMTM1MzMyMjY3NGMzZDU4OTM1MTQ0YTBmOGYxNzFhOTlkYmVhYjcxMjcyZmY3NTE4YzQ2Y2M3ZWJiNTczYWRiZjk1YmZmOGVjNjhlZWJhNWU4ZWMxMjIxNjU1YWVkODQyMDA4NmJkYTg5YzdkZTM0ZjIxN2RjZTczY2NhYiI6IiI6IiI6IjcwMDc2MTg1N2VhMjc2M2U4NzM5YjhmNmY2NDgxZDFjIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDI1NikgIzAKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiIxNDA1MWI1NzI3N2JjM2QzYmJhZTUxYmRlY2ZiOWY1ZCI6IjgyYzgwZDkyMmM0N2JiZWMwZjY2NGRkNjIzZTIyYTExYTNiODRkMzA4MzUxZTQ1ZTMwZWUyODZlODk1NDdkMjJjNDNlMTdiM2NhMGZhMDhmNzdlZWYxMDAxYmE2OTY5MzJlOWVlODkwZTdhYWM0NjYxYzEzOGU1YjVjZTM2NzczZDMxMjBjMzVmOGM5NGUwYTc4ZmZiZjQwN2E2M2NhNDM1MzkyZTE3YzA3NDYxNTIyZmRjMWY2M2YwMzdhYWNmZiI6ImI3MGU3YzFjNGI4ZTBmMTc3MGUwNWIyOWE5M2Y5ZDdhNjU0MGYyM2FiODQxMzZiMDViMTYxZDg1ZTVmMTkyNTEiOiI1YTczN2MxMjhiZDY5ZjkyN2Y4ZjNhZDY4ZjkzZjYzNTZkNWY0ZWMwZTM2YjZiNTBjZWQ0M2RjZDVjNDRkYmMyIjoiYTRlNmM3NTQxOTRhMDk2MTQ5OTRiMzZlY2NlMzNiNTUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjQ1MjZiMjY4MTI4ZWEzNWY4NTU4YjRlMWQwODM4OGYyIjoiOTUyZjNmMTc5Y2JiZGEyN2ViZDMwZjRmYzMxYmY5NmJhY2NiMmFkYmFhOWMwOTBiYzBmMzcwNDRhNDRlODViM2JjNjY4Y2QzNTMzZmFhZjU2YjVkYTkyNDI4NDRkNjU3MzNmN2FjMWY1NWMzOGIxNzU3NDliODhlMThkMTk2NzJiN2JkYWI1NGUwYWJhYmRkNDUxOWZiMDdlMGMyNTU3OGY2NGFkNDBkMGJlYjBhMjYyNzVkNWUyZjQ5MDZhYTcwIjoiNmIxNjdjN2NlYmVhMmU1ODVhYjk3NGI2MGM0ZDMwNWExMTMxMDJjYThjM2RjODc2NTE2NjU3MjhjNGM2NzVhZCI6ImEwMzhmMWNhMWY0MjBlYWU0NDk3OTFmMTNiZTQ5MDFiZmI5MWU0MWUwNTJlMDI2MzViMWYxODE3YmQ4OTY5YjEiOiI3NDVlYzM3NjI4MmUyMGZkMWY5MTUxZjcwNDBlZDk0YSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwyNTYpICMyCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiYzFhYWZhOTBmMzk0ZTBiYTlhNTI4MDMyZGM2NzgwZDMiOiI3NWZkMDQyYmZkOTk0ZGUyYzkyZTVhYTUwNTk0NWVjOTNiZDdjZjM2NmQ4NmEzNTY3MjNmY2EzYzk0NzllZTE3ZmI1OWM2Y2E4YmE4OTc4NGQ0M2YwNmNkYWQxMTNlNTA4MWUwMjQyN2VlMDcxNDQzOWQ4OGRjMWE2MjU3ZmM5MWQ5OWMxYTE1ZTkyNTI3ODQ3YWIxMDg4M2NjOGY0NzFjYWQ4Y2YwODgyZjViNmQzM2E4NDZhMDBkZWUxNTQwMTIiOiJjNzA0MTY0Y2U4MGE0MDBjYjJmNTRkMWIyZDdlZmEyMGYzMmI2OTlmYTg4MWJmYzdiNTZjZmQ3YzRiZWUxZWE2IjoiZjNiYWZmNGI2ZjQyYzhlNzViNzBjMmE3MmEwMjdiMTRhOTlhZTQ5YTVhNDdjN2FmMGY1Mzg4NDNjOTRlMWE2OSI6IjdhZjkxMTNjZDYwN2NkYjRjNjUzNGY0MDFmZTRlOTZjIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDI1NikgIzMKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJlNmU3MjZiNzJlN2IyNjRhMzZlYzBjZDYwZDQ1NzhiNSI6IjBjM2M2ZGQ3MDYwNzZkNjQ4NDQ3ODM0NzU1OWI0OTVkN2VlODk4YzM5Y2RlMDYwMjdiYzk5ZjdiZjY5Y2UxMTQwY2EwNDYwMjI2NWUxMzA4YWY2ZGQ2NDQ2YTFjZjE1MTc0OWIyMmE5OWU4YTA1ZDMwY2MzY2NkMDBlNjYzYmMxYmMzN2UwOGVlNjI4MzRmY2M1MmE0YmM4YzFkNjQ0MjU0NDE4NzQ4NGY4MWRjNzI5NDE3ZDViZWRmY2FiNWE1NCI6ImQ4NGI5Nzg0ODNjMGJkOGY4YzIzMWQ5MmVhODhhYzIxZTZlNjY3MjE1ODA0YjE1NzI1YTdlZDMyZjdmYzVkZDciOiI5YTg5NzFmNmM1NTlmN2YxOTdjNzNhOTRhOTJmOTU3ZDE5MTlhZDMwNWY0MTY3YzU2ZmU3MjlkNTBlNTc1NGE1IjoiZTE2ZWU1YmNlY2EzMGYxZmJjYWRiNWRlMmQ3Y2ZjNDIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjAyNzJkODZkYjI4MzI0NGViN2VlMGVkOGM4MDU0Yjg5IjoiYTA4Y2UzOWYyZjY3MWUxZjkzNDgyMWE4ZGI5MDcwZjM5YTczNGE3YTIwZTcwMzA3ZmNjY2ExN2RiMTViYjRlOGE0MjE2MDBkZjExZDFhNmU3ODA2YTE0ODI2NzM5MzIyYzgwNDM2NDllYTcwNzE4MGYxZDAwZGVhNzUyYzJjMzYzOTgwMzA1MTk0NjU4NjRjNGQzODE2M2Y1YjBkZDViZTA3ZGJjMGFlMjk2OTNhZDRhNjdjYTY5ZjI4NDE0NjM0IjoiYWE5NzA1NWNmNDZiYTI2NDY1ZGZiM2VmMWNmOTMxOTE2MjVjMzUyNzY4YjJkOGUzNDQ1OTQ5OWEyNzUwMmU1MCI6ImRkZGQwMDA3ZWIyOWZkZjk0MjIyMGU5MjBjYTA2MzdkYjRiOTFjYmY4OThlZmQyNjk2NTc2ZmY2YmZhY2I5ZDEiOiI5ZGIwMDU3ZTM5Y2E2ZTBmMTZlNzliNGY4YTBlZDVjNyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwyNTYpICM1CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiNGFkOGY3MmEwZDBlMjhhNzU4NzIyYjIwZTMwMTdkN2UiOiI4OWFmMzZhMWM1M2Y3MzBjMWI4MThiMjZhYTUxMDYyN2IxN2U2ZjlkYTUxYzhlNTM5MzBkZTg4M2I3Y2M3YTNlOGMzYzQ2M2M5MTA2NDZhYzNmZjA4ZjA1YmNhOGUzNDBkYWY5YTMyMmQxMzNhZTQ1M2ZkZjdlNjg2MGEyN2ZmNDQ5NWM4OTg3NTQzMWJhOWRlM2U0ZjMyNDdjZGE4YzYyYWNjODZmNzA2NjQ0OGY2MzlkOGJhOGI1MjQ5MzM3ZjgiOiI5ZDA2MGI3ZWQ2M2JkYjU5MjYzYzc1ZWJlNmE1NGJmM2E0YWM5Yzk5MjZjYThmYjQ5Y2FhOTA1YTI2NTFlZWFkIjoiMDE2MDk5MjMyZGM0NGJiN2NkYjQ5MmY0OTU1YWIxYWFiYzVkYzBiNTczMTQ0N2NlYTJlYjFkOTJlNDE0ODJkMSI6IjRiNjU4ZTk1YWRhZTRiZjBjNDE4ZmRlZDQ0MzFjMjdmIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDI1NikgIzYKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJhYTE5Yjk0NGMyZTFiOWQyNzkzM2JjODczMjJiZGYxNCI6ImRjOGM2MGRkNDJjODVmZWQ4NmNiMzJhZjAzNWJiZGU1NzM3NTI2ZWIwNzk5MTM5N2M4NTMyNTZmMmYwY2IzMTFiY2U3MGUxYzVlMzJmYzM1MTA0MDJkN2Q3ZTNkZTM2ZmE1ZTU4NDIzNGRhZjM5MWJjNTNjYzY1MWUwMDFhYjdmY2Y3NjA2NzliM2M4MjA1N2Y5ZDA5YmZkY2FiOGUxNThkNGRhYTYzYjIwYzBlMTEwMmY3YTA2YmY1YTI3ODhkZCI6IjZiOThmZWM1ZjdkZTgwOThmZjlkZjgwZjYyNDczYzczODMxZWRhY2U4MzJhNzY3YWJmNTk2NWVhOGJmNzg5YmEiOiJjYzk5OGJkNTc1MmY5Yzk2ZWMzNWQ5NjU4Y2M4YjM4MzNkZDZhYjgwYzdhY2NkNjc3N2MwNmMyY2Y3YzAxZTU5IjoiZmM1ODgzM2UwZTI3Zjc3MDVlNDkzN2RkMmFhZGIyMzgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjNworY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjEwYzhjMTdhMjUwNDFlMmVmMGQzY2M4MDY3MWU0Y2ZlIjoiNTEzZmI5NmI2MTY0ZWNlODAxZTUyODU1YWFkMjhjYjgwMTMxZTc4NzJkODQzMmQyN2E5NzRmYjYyZDhkMDEwMGJiN2ViY2I4ZjVjMDY2ZTIzMDM3N2E4ODQ3ZDY3OThjM2Q4MDkwNDY5Yjk3MTlhODBhYzk1NmFjMzMxODZiMDBlYjhjYTY0YzU1MzA0MjFmOTM5MzJiYzdjOThlZTkyNjUxZTg1ZGFiNTYyNDgzYmRiMTg5Njc2ODAyNzI2NjQ3IjoiMjQwZjM2YTBhNTk4ZmUyMTE2ZmZhNjgyODI0ZjI1YWNjMzUxMzJmMTM3ZjUyMjFiYzBmZjA1YjUwMWY1ZmQ5NyI6IjIyYTVlYjVhYTAwMzA5YTc2MmFiNjBhOGMyNjQ3ZWViZTEwODNmODkwNTEwNGI1ZDM3NWVkMTY2MWI0Yzg0NzgiOiIxNDVhMTYxMDllYzM5YjA2MTVhOTkxNmQwN2YwODU0ZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwyNTYpICM4CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiY2VhMGMzYzEyYmU2ODNjMGYyNzY5MzY1MGE2YTNkN2QiOiJkZjhiYzcwZTQ1ZmUxNGFiYjAyYzFiOWE5NzU0YzM3NDk3ZmMyZjY3NzA5ZWRkODU0MTk2ZmM0ZDA3NGIxMjc5N2NlN2NiMjkyZjE0Y2IxZDY5MDRhYmYzMmJmMjI5Mjk5ZGI1Y2NmNWE3OTFhM2I4Y2QzZTQwYTY0ZjM4ZjZiNTdkZjc1OWE4NjNlMDlkNzY3NmQyZjNmZjI3NjJjZGFiMjIxMTUxMDAwZGJhMzJhNjdmMzhjYWI5M2Q1YjdhNTUiOiJiZjJhYzU0NWQ5NGUzMTgwNjZmZjg4ZjM5NzkxYTgzODVlMWE4NTM5ZTk5YWM0ZmE1YTZiOTdhNGNhZWFkOWQ0IjoiODQ2ZWZlZjg2NzJkMjU2YzYzYWEwNWE2MWRlODZhMWJiYzY5NTBkZThiZmI5ODA4ZDFjMTA2NmFlZjdmN2Q3MCI6IjhkOGYwMzg5ZDQxYWRjYWM4Y2E3YjYxZmMwMjQwOWMzIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDI1NikgIzkKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiIxYjc4MmFmMjU0NTM1MjYzMTk4M2RjODk5NDVmZmMzNyI6IjUxOTMwZmI3MDk1ZWRlZjNmYzIwYWNhMmEyNDEyN2YwM2QzYzRiOTgzMzI5ZTAxM2FkOGEzNTAxNmY1ODFkZDdiMmQxMWJhZmJmOTcxYzFmZGVmZDk1YTAwMjQxOTVlNmU5MGE2MGVjMzliMWE4ZGJlMGNiMGMzYWFiZjljZjU2YjY2MmVmYzcyMmIyZGZmYTZjM2JlNjUxZjE5OWNiYzNkYTIzMTViNGQ1NWFlYWZkMTQ5MjI4Mzg4OWUxYzM0ZiI6IjFiNjI5NTk4NmY2ZmI1NWRjNGM0YzE5YTNkYmE0MTA2NmZkYzAyOTdkNTBmYjE0ZTk1MDFiYTQzNzhkNjYyZWQiOiI2ZTY2ZmY2M2ZjNDU3MDE0NTUwYjg1MjEwYTE4ZjAwYmVhYjc2NWY5ZTEyYWExNjgxOGYyOWQxNDQ5NjIwZDI4IjoiNzhkZmNiNjYyNzM2YTgzMWVmYWE1OTIxNTNhOWFmZjkiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI2NTgwZjZkZjVjOGRlN2M0YTEwNWMxMWVkNDQ0MzVjMiI6ImQzNzQwM2RiNmY4NGE3YmExNjJlMWNjMzUxZmUyZTQ0ZDY3NGFlODYwNjI4MGM5ZGFjM2UzOTc1ZjMwY2JlMWM5OTI1ZTUwMmE5ODA0YjkxYWFkYTVjYzk3YjI1OWI5MGNjYjViODEwMzM5NGQ5YTI4ZjA3MDlmYzliNWZmZTlkNzNhZDM2NzJlMDIwNjRlYTY4Y2ViZTNmYWNlNWQ4MjNlZTYwNWM0NmMxNzNkYjU5MTEzNWY1NjQ1NThkYWI0YyI6Ijk3NDg2YTVlNmNlNmM2Y2Y5ZDNmOWEzMTNkMzQ2Y2JjMzRiMmJkNTRkYjgwYzVmOGQ3NGQ2ZjY5MzlmODk1MTkiOiI4Mzc3ZmNiNTI1NTZmOTk3NGYxYWEzMjVkNmUxNDFkN2I4MTM1NWJkMTYwYWJiYzg2ZTAwMDc1NzFiM2MxOTA0IjoiNzcwMzFkMzQ3NDMwMzQ3MGRjYTkzMzZiMTY5MmM1MDQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJmNTMwM2YxNDhkNmQ2ZmFjYTkwYWE4OGIwN2FiMmJhOSI6ImEwZGU1MWI4ZWZhNDRiODI0NWRiYTMxZDc4Zjc4NDBiMmI3YWJjZWQ0ZTI2NWI0Y2Q5NjI4ZWFiYzZlYmJjY2IwZjExOGRkOGNjOTU4YjM2ZGM5NTllMjJjNGEwM2RhZmEyMTJlZWVkZWM3ZDI1ZWU2YzU5NjExODdiZWU4M2IxZWQzYTc1YzdiZGQ5ZDA3MTNiMTZjYzY3ZTY4MjMxZjRjYjI3NGM4ZjNkZmNjN2U1ZDI4OGM0MjZhMGQ0M2I4ZiI6IjhkMWZkZGMxMWRiYWQwMDdlOWIxNDY3OWE1NTk5ZTVlOGE4MzYxOTdmMTRkMDEwZjMzMjlkMTY0YzAyZDQ2ZDYiOiI5Y2ViNjU3MDU2ODQ1NWQ0MmE3Mzk3ZjhjYThiOGFmN2E5NjFhMzNhNzM3NzA1NDRjY2E1NjNjMDRiYzkxOWNhIjoiOTg4MmYwYmQxZjYxMjlhNzhiNTFkMTA4ZTc1MmIyZDkiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjMTIKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI1YTc5OWM1ODk4NWFhMjg5OGNjOGZlOGU1YmM0YTlmOCI6ImRiZGJlZjlkMjE3ZTkwNTEwMjVjMzIxYjYyOGMxY2M4MjNkNTA4ZmZkZDEzZmM0ZWRiZTg2Nzc2NThhNTdlZjViNjQzOTVhNmI3ZDYyYzBlOTNkYzA5NTZlZTAyMTdlYzQ4YWUwNTRmMWQ0NjgwMDIzY2MxYjJhZjY2NmVmYTllMTQ1OGNmNmIwZGFlNzJlZWYyMzkyZTkzNjg3YmQxZmI1ZjM2NmJiMmNkZDEyOTM3YWQwOTcyNGUzOWRiNDE4OSI6IjhjMTc5YjM1NzM5ZTc1NzE5ZTc0ZjdjM2UwMzhiYzA2ZWIzZTIxMmQ2YWRlODUyNzVjZmViZjEyYjJkY2UyYTIiOiJhZjYxN2YyZTIyOGFkZGUzZWRhZjUyYTdlNTk3OTQ3NmRiYjljZDI5NTZhMTczN2Q5M2ExNjU2M2JiYmI0ODg4IjoiNDlhMDRmM2I0ZWYwNTI3NDdjN2Y0ZTc3YzkxNjAzZTgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI4ZjViNTE5ODNhODE1NmE1MjlmNTU5YWMzYWZlYmJmMCI6ImJmMjJiMTgyZDM5NjIyZTk0MTAxNzI4NWFkYmRmZTQ0NmMzZDFhNzI2MDFkMGU1YTE1Njc0ZjNiMWIyNjAxNzBiMWIyYWI2YjU4OGEwMjY3ZDg2Nzc2YTVkNGNlODBlMTMyZDcxMzVhNTgxYWY3NWVhNmRlNjUxNTM2ODBlMjhjZTM1Y2U3OGQwOTE3YjQ5MzIwMDBkNjIyNjAxNDllNWEzYWU3MmJjMjUwNTQ4MzkwYjY2NGY1M2M2OTdkYWM0NSI6IjRjYmI1YjJkNmU2NjZkNWRkM2RkOTliOTUxZWE0MzVjYWU1YTc1ZDJlMWViNDFhNDhjNzc1ODI5Yjg2MGU5OGIiOiJhNGI0MTcxYzI1OTI1MTY0MDQ0MzQ5MzJhZDBhOGVlNjdiZDc3NmEwMzQ3OWI1MDdjNDA2NDA1YjNkODk2MmJjIjoiY2FiNDk2MzE3MzNmMDZlM2ZiM2UwODk4ZTVhZDIyZTciCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI5ZjMwNWE3N2NiYWVjMWFiNDA4Y2ZjMGViODljNmNiYiI6IjFlNTBmYWRhMWU3NmEwZDI0M2U2ZjY0YzM2YTE3M2RkYzFmNDdhMWRhYjgzNGY1Y2Q0OTI1Njg3OTI5NThkNWJlMjJjY2UzMTEwYzhlODk1OGI0N2YwN2I1YzYzZjg2YjI1NDk0MjM2MWQ0ZDU1M2U0N2QzNjEwM2Y0N2NkN2YwYmJlZTI3ZDJlMjM4YjFkODU2NzFhZmU4Mjg0ZWUxZmQyYTQzMWE1ZjY5YjJkZjczZTk1MzQxYzNhMmU0ZmU0YiI6ImMyNTRmM2I0MGU3NzNlYjA5MDUzYjIyNjgyMGY2OGNhZmEzNDU4YWQ0MDNhZDM2ZjcxNTI0NWE4NTQ3NTJhOTMiOiI2OTllMTc3YjdiZTMzNTNjNDVjZTdiN2EwZDU3M2IwMDA4N2Q3MDBhOWYyYzFjZDJlMzcwZTA1ZDRkZGFkYzg2IjoiYmI2YjAyYjI1YTQ5NmYyOTI0NTMxNWY1OGExNmZlYmMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwwKSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImUwOWY2NWRjZmZjMGQzYTRkODRiYWNjNDE2MTdhNGU0NmNlNTE4NGVjYTAxMTA0OWFiNjU3NTY2ZjcyOGU0YWEyODMxNWZmYWMxNjZlYmU1MGUxMjY5YjAxYzk1YjNhMiI6IjU0NWE3ODNhZTk3ZDgyN2VkMGI4MWQ5NzUyYWQwZjdlOTY1ZjUxMWIxZjVkYWUwZjg3MmU5ZWMzN2NmZTYzYWY4NmMxZDE1ZTE1Mzg4Nzk4OWI2MDU3NzNiMTZhZDU1MDVlNjVmNjE3Y2ZhOGVmNDY1NDdjNGMzZjlkMGM0ZmQwYjZlMWNmZjVjYTBmMTkyOTI2NmZlNDNiYThmNDVhZDY2NGNmZTVlOTA5MDNhOWNiNzIyYjQyYWU4OTg5YzE0OCI6IiI6IiI6IjFlNzdkN2NjMTg3NzVmZWY5YTNkM2UwMDkwM2RhMDFiIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMCkgIzEKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiIwNTZjZDQ0Yzg4NDdkODlkYTA1ZmJlZjk1ZTk2NjBkNTg5MDQ2YjBjMDJmOWI0MmMxN2ZkOGIwNjlmODMxYzczY2Q4OTYwMDVlYzA4MDExMzU4OWI2ZjA3YmU2ZTQyZWEiOiJkZGU2YzA4NTBmZTY0MjYwMmViMjIyY2E3MzcxMjEzYzU5OGNlZjhjM2U3MWUwNTkzZWE4ZWRiNTRlMWJlZDEzMGI5YjBhZWJlMDg5MzA5M2I5NTBjNTJmNTZlYjliMzM4YWE0YmQwMWRhZTAzMDUxNTcyNmVjZTFiZjc1MTY2MGI0YTM2MDJkYTY0MDBlNGI5NGVkZWJiYTY0NmI1YzNkNGU2NGNlZWExYzRmMTRiN2ExOWYwMTQyNzgzMjQ3ZGYiOiIiOiIiOiJhNzkwYWI5MzllNjM1NTVkMDJlYTFlOTY5NjA1MTcyNSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDApICMyCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiNzNjNzJjN2RmZTEzOGVmNGI5ODE3ZDQxYjk3MjJiMzk0MDc2MmI1OWJkYTI2YjNmNmJiOGIzMDU4M2UwMWQwODhhMjk3MjZiNzFkMzZmZmVlYmRiMzg3MDEwY2IxYmI2IjoiNmZlMDk1MjBlMjZmNWFiZWNlMGZjZWFkYzU0OTEzYzY1MGE5ZjU1NzI1YWY0NWE5YTVmMzczZDA5Yjk5NzBiODcwNmI5MDQxZDAxODlhMjA0ZjZhNGViNTI3ZGZhODY1ODRhM2JlZTMyNjViODA5YzM5MzJhZTVlNzIyODE5NGEzY2Y3NTkyZmM5MzAxYzgzM2I0NWE1M2JlMzJiOWNhZWM5ZjBmOTFiYTg2NTE5ZjEyYjBiMjM1ZjY4NDE5YzFlIjoiIjoiIjoiNzk4ZDk5N2Y0NmZmN2NjNDIwNjk5NDA4NTM0MDMyNWUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwwKSAjMworY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImNkYmE3YzcwMzNjMzQ4NTJiN2JjMWE2YjMzZWRhYjM2ZjQxZDU2M2JkMDM5NWQxMDAxYzAyZmZjMGM0MmVjODU5NWVkMmI1ZGRhYmM5MjMzNzJlM2I2YmI0NTc4MzNmYSI6IjUzMjk2MGMyM2M4YzhiMjE0NjU3NmRkZTUyZmFkYzk4NTEzNDkxNGFiZjQyY2ExYzVmNDcyMDY5MzdmZGE0MTI4OWFlNWQ5ZjkzNWRjNGNlNDVmNzdjYWQyMzBhNGYzNDU1OTllM2JhZTQwNzExODgzMjQ0ODNhMGI5MzU5M2M5NmQ4YjZhYzZjMGQ4YjUyZjg3OTVjNDQxNzFmMGQ4Y2QwYjFlODVkYzc1Y2U4YWJlNjVkNWYyNTQ2MDE2NmJhMCI6IiI6IiI6IjlkNDgxNjBhY2E2MGYxYTgyYmFhYThhN2Q4MDRhM2Q4IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMCkgIzQKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiIwMmNlZjAxYWNhOTkyZjYwYWExMmRiNGIyYzQ0MTY4OWU0OTcyYTZmOWRlYWYzNjYzMDgyYWZlZDY0MmMxNTAyYjY3YjQyZDQ5MGFmMWM1MmM3ZTZlYWY0NTk4ODJlY2EiOiI5MjE2YzlhODMzZjgxOTUzNzkyMjYwYTY4OGViN2MzZGZjODU1NjVhZTZhNjAzMzIwMzc0MWE3NjNkYjA1NjI0NzgwOGUwZWNkNWJhMWZjNDU0OWMzYTc1N2ViYTUzNWFkYzc4NmU4MTBkZGFhZTlhMjcxNGQzMWY1MTU0ZjJjM2VlODExMDg2NjlmMTIzOWY0ZjRlZmQ2ZTE4YWFiZmEyZDg4ZjBhYzI1ZjQ3NDAxMDhmNmNmZWJmZmViMmQ4NTciOiIiOiIiOiJkNjM3OGJjZjQzYmUxYWQ0MmRhODM3ODBjMWRhYjMxNCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDApICM1CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiZDdkODAwODRlOWQxZmJiOTMxNWMzYmNlMTUxMGRiZjIyY2YxMWZhNTQxNzdkOTEzYTNiMDRiNjRjYjMwOTU3Mzk1YmQ2ZjNkN2UzZDg2NmQxYmU0MWIyOWRiOWVkODFkIjoiODBkNDc0MWU0ZTY0Njc0OGJiNjVlMTI4OWYxZjliM2MyMWJmZmVjNGQwYTY2NmIzMDFmMTk5ZDc2YjRhODM0NjQ1ODMwNTcwNzliMDY5OTQ2YjAzZDZhYzgxZWJmOWU2ZmE4ZDQwODExMjBmMThiZjU4Mjg2YTBjNGRlNzU3NmYzNmYzYzdjMzUzMTI2ZjQ4MWEwNjVhYzI4YmRmMjhlMTNjZDBjMWU3OTExZGI2MzQzYzQ3ZDYxM2YxNzUwZGM2IjoiIjoiIjoiOTE2NWE5MmVkOTIyNDhiMmQyMzdkOWY0NmQzOWJkZTgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwwKSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImRmNWE2OGQzYmVkZTQ2N2ZkNjk3MTZmNWY4ZmJhYzI5NzU5NGI4NTczOTIxYWZiODY0YmE3NmFhYTZkZDg5ZTgzYjg5ZTM1OWE1YTBkZDFhYWM5YjRhY2I5NTczZDIxOCI6IjUyZGY2MzM2ZjkzNzgxMTE1YzJhNzdiZDhmOTljYjcxNzg3MWZlMTQ3MDc5NDdhMjFmNjA5M2RkOTIwNWJjMzc4YWNmNjEzMjlmODgzMTM2OWI0YjFhZjBhOWVkZmIyNWQ3NGY1ODYzZjI2ODU5YWQ5YzkyMDc2N2IxMTNjNDdlZDI2OTAwNTNiZjlhMmY3YzdhNjdhOGQ2ODBlMDg4NjU3MjBiOWU5ZjdiNmFlNjk3ZTNjOTNlNjZmMjRiNmRkYyI6IiI6IiI6ImM1NDJjZjI0OGExNjNiYmNlZWU3YjlmMTQ1M2JkOTBiIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMCkgIzcKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiIyOTQ1NTI3MzcyZmY3MWVkZmE1Nzc2ZjU1ZjdlNGEyNDc1NDRhYTZkZTk3NGU4MWIyZWJhNTU1Mjg0M2FiNmRmYTI0ODY5NWY0ZjMyMjVhNDNkNGJmMzY3MmMzYTZiMmUiOiJhYTU2MGFmMjEzMmNiZDA2MjRhNjljN2E3ZTczM2NkNTlhNGYyZDRlNjFkMmI4MzAwODdiZDg4ZjMwZmE3OTJjN2U0ZDMxNjhmYTg2YTEwZjc2MTlkNWI5ZGNmNGY3YmIwOGIzNTBiYTZhNmJmYzBmZGZiN2VlN2FjYTA3MjYwYzlhMTFhYmU0OTk2M2MzNmVmYWVmYTk0ZDI5NzhlZDA5NDcyYmY5M2NjODczZDBmMjRjMDAwNzYyYmIxNDAyY2QiOiIiOiIiOiIzM2FmMDEzNGVlY2EyNzlkY2U1ZTY5YzJjZGEzZjNmNCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDApICM4CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiYjMwY2I3NjcxMjU2NzRmNjA5OWE1Y2Y3Y2IyZTRmNWI2YzFjZDFlMzJmZmMxZTM5M2IxYzU2OThiNTJiMzdmOTcxZjEyNTIxYTdjMWZmYWFmMzIzM2Q1MzkxYmM0Yzg2IjoiMmQ0MmIwMDI0OGQ5NWQ5Mzc4YTJhZWNlNDBkNjM2YmMxYWIyMmVkYWFhNjRkYWEzNDMzNTE5NWE5ZWZhNGMxYjU4ZjEzYWMxODRjYTJiZTUyZTE1YzNhOTc3YWJkZTJhYTUwNTI0M2ZjMTA2YzRlYTZmMDY3MWZlMGYyMDliMTA2ZWE4OTY1NjQ1YWY3M2Q4ZWJiOGE4MDI1MWRiMjk2NzE0OWM3MDFjZmUxZDE1N2NjMTg5YjAzYmYxYmZmMWFjIjoiIjoiIjoiMWUxMGVmZjljZWViYzdlNWY2NmU1MjEzY2IwN2ZjYTQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwwKSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImM5NjJhMmRhNDUyNGYwOGFkY2RkNWNlZGRjMDRlNjY5YWQ2MTU0YWVlMDYxNjQ2NDVlODBjODMyNTA2Yjk4Zjk5MTk0NTFjN2VjMWQzYTZhOTcwNGY4M2RlZjhmNmUyZCI6ImExZmY2OGE4NWU0Mzc0NzViMWI1MTg4MjFkYmFhYzE3MzAwNzFhNGRkZDMyNTUzNjE3NzgxOTRmYjBjZmUzMjkzZTM4ZGY4MTUyN2Q4YjhkYTE1ZDAzYWNiMjY0NjdiNmI1M2Q3OTUyNDQxYjc5Zjk1YjYzM2Y0YTk3OWQ5OThmZDA0MTdiOTE5MzAyMzI4OGI2NTdkMzBjMGNiMmRhZGEyNjRhZGRmOWQxM2YxZjhlZDEwYjc0ZTJkZDJiNTZiMyI6IiI6IiI6IjU4OTkwMDY5YjcyYjc1NTdjMjM0ZDVjYWY0MzM0ODUzIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMCkgIzEwCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiYTNjYzFmZTU2MWQwM2EwNTVlOGVlZGFhMGU3MTNiZTQ5MGM0YmQ0YzY4MzlhNWI5OGMyYWMwMTM5YmYyMTViZGM0Njc4M2QyYTNlNmI5ZDE1ZDliN2E4YmZlMTUxMDRiIjoiMjA3MjY3OTExYzEyMTI1Y2IzMDEyMjMwZTRmYWZkMjU3Nzc3Y2NiZmI5MTY1M2Y3N2U0YzEyODc1NzRmOWI3OWQ4MWFmN2ZiMzA0NzkwMzQ5ZGQ0NTc5ODNjYzk5YjQ4ZDVmNDY3N2NjZDk3OWZjYzZlNTQ1Y2JmNWI1YzhiOTgxMDJjOWE4OWFlMzU0MzQ5ZGJkZWUzMWEzNjJkNDdjN2NkYWUxMjgwMzRjMGY0YzNlNzFlMjk4ZmUxYWYzM2M2IjoiIjoiIjoiZmZkMWQyNTlhY2Q3OTExMWE2ZmI1MDgxODEyNzI4MzEiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwwKSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJlY2YxODYwNzFiODFlMGVkMzg0ZDRlYmZiNWJmMjYxYjQwNTRlMmU2MDcyYjUxZDIxZGZiNjgxN2FkYzUxZmYxYzg5NTZmZjM2MTI3Njc1MzhjZGM4ZDczZmFkZTc4YjMiOiIzYjlhZWM5ZjhiZjg0OTUwMDRjNWU0ZTczMWU1YzM0Nzk4OGU3ODdjYWYwMDNmMDAxZTY4NTg0ZTM1MTBhNmFiZGVkZmZhMTU4OTU3MDJjMmQ1N2MzMDQzMDBmNGYwYWY4MGE4OWJjYzM2YjNjZWEyZjA4YTA3NDAyMzZiODBjZmQyZWE2ZTVjZmU0MTQ0YmM0YWUwOTI3MGZiNmJjNThjMzEzZGJhYWVkYzE2ZDY0M2ZjMDU2NTE3MWY5NjMyMjIiOiIiOiIiOiJhMmQ5MTdmNWVjMzlhMDkwYjU1ZDUxNzEzMDA2ZTQ5ZCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDApICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjNmY2VkYmE4NjA4OTcwOWFhNjM4ZDAwNzEzMTUwZGY3ODFkNGE5M2U4NWYxNTUzMzhlOTBmZjUzN2JjYmYwMTdmMzdhMmQ2MjI1OWY1ZDhjYzQwZGRmYjA0MTU5MjUzOSI6IjZiMWU5ZDQ1YzJlYzU5OGRlNzUyN2I2NDE0YTMzOWYyNjE5MmZjNGUzZjVlZmY0YjNhM2UyYTgwZWUwZjJlOTc0MzAzMTgwNGQxYmUxMmIzYzdmZjZmYmMyMjJkYjFkOTcyMjY4OTBhZGRlZWYwZTE1NzlhODYwZTIyNzkyOTJjMmY3Njk0MTZiNzA2OGY1ODJmNmZmYzE5MmFlNGM0ZjFlZWI0MWQ1Zjc3ZjBhNjEyYjA1OWM0N2FlZjhlM2Q4ZSI6IiI6IiI6ImFhNDE0Nzk5YzUxOTU3ZGU5N2MwMDcwZmIwMGViOTE5IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMCkgIzEzCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiZjRjNDVmYjhmNThiN2ViZjczYTBjZDgxYzZhMjY2ODY5Nzc1NThkNGI4YmYxY2VkZmM2YmQzNzU0ZGU2YWFlZDUwMDhmZDcyMjA4NDM3YzU0ZDhmZWI5YTE2Y2UzMjI0IjoiNmQxNzBjZjQ3MmVhMDdkYTYxNDZhNzA4N2VkMTVkM2Y1YjZhZDcyYjhjOTllNDZiYWUzYjg5ZTQ5YTZlNjM0NjcxOTllZTE2MDk2NTE2YzIzNjJkYmQxODFiZjUzNDNhMjlmZDA5MzJkNzJlZWIwMTlmYzNiZmVhM2EzYjAxZmZjMmI5ODVlMzQxY2ZiNjQ3OWQ5ZGM3MWUyMTk3YjVjZmZjNDAyNTg3MTgyZTVmZTkzYjVhOGNmNzVlYWMyZTQyIjoiIjoiIjoiZjU1N2Y2Mjc2ODhmZTYzYzExOWNmMGYyNTI3NGFhNzQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwwKSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI3MTIwNzQyYTc4MDdiNjZjNWE5YjUwOTk1ZDU0OTRhNWI5NDUxYmI3OTUzOTNjMGQ4YTMwYWU2NjU4NzkyNjk0MDhmODI5N2Q0OWFiODc0MTBhN2YxNmE2NWE1NGIxY2IiOiJjMDhhNmY5Nzk3ZWE2NjhjZDE0YmE2MzM4Y2I1ZDIzYzA5MjFlNjM3ZTY2YTk2MjU5Zjc4ZTMzZTQ1YWFmZDAzNWVkYjQ0Mzk0Y2I0NTk0NTNiOWI0OGJlYWMxZTMyZDNiNmYyODE0NzNjZGE0MmZiNmZkNmM2Yjk4NThlN2E0MTQzZDgxYmZjMmZhZjRlZjRiNjMyYzQ3M2JlNTBhODdiOTgyODE1YmU1ODlhOTFjYTc1MGRjODc1YTA4MDhiODkiOiIiOiIiOiI1MjE5NzNlYWMzOGU4MWRlNGU0MWNjYzM1ZGI2MTkzZCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDI1NikgIzAKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJhZGQyYmJiYWI3NjU4OWMzMjE2YzU1MzMyYjM2ZmZhNDZlY2FlNzIwNzJkMzg0NWEzMmQzNGIyNDcyYzQ2MzJiOWQxMjI0MGMyMzI2OGU4MzE2MzcwYmQxMDY0ZjY4NmQiOiI2MTY4ZmMxYWYwYjU5NTZiODUwOTliNzQzZjEzNzg0OTNiODVlYzkzMTMzYmE5NGY5NmFiMmNlNGM4OGZkZDZhMGIyM2FmZGZmMTYyZDdkMzQzOTdmODc3MDRhODQyMjBiZGY2MGZjMTE3MmY5ZjU0YmI1NjE3ODY2ODBlYmFhOWJmNmM1OTJhMGQ0NDBmYWU5YTVlMDM3M2Q4YTZlMWNmMjU2MTM4MjQ4NjllNTNlOGE0ZGY1NmY0MDYwNzljMGYiOiI3ZTA4NGFiYmUzMjE3Y2M5MjNkMmY4YjA3Mzk4YmE4NDc0MjNhYjA2OGFlMjIyZDM3YmNlOWJkMjRhNzZiOGRlIjoiOTQ2YmM5OWZhYjhkYzVlYzcxODgxZDAwOGM4OTY4ZTRjODA3NzczNjE3NmQ3OTc4YzcwNjRlOTkwNDI4MjljMyI6IjIyNGFiNGI4YjZlZTdkYjE5ZWM5ZjlhMGQ5ZTI5NzAwIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6Ijg5NjRlYmRlNjFmMGM0ZTIzZjhlOTEyNDRhZTk2ODJlZDBiMTdlNDI0ZWRkNGMwMjViNDYxYTJkMjA5YTUzODU4M2YyOTQ2NWRmM2Y4OWNmMDRmNzAzYjc3MWZmNWM5MCI6IjRkYjhlOGEyN2ZlN2EwMzc4ZTM3ZDRjYzAxYjZhNDY1ZDM0YmU5MWY0OGM1MmZkYzEwMjNlZjJlYTEyNDEwODJmNTIyODA1YmM4Nzc3ZmRhNmMxMGUzZDQ0MWI1OGY2NDhlZGNkN2Q0ZGYzZGY4YzhhMzk4ZDdiMDA1YzRmZDZmNDFjOWIwMzNiZDM4ZmM1ZjU3NzA2OTI1MTUyOWI1ODI3M2Y2YTkxNzVmZWIzOTc4Nzk4ZmRlYjc4YTA0MzIzMiI6IjVlYjNmYjQ0Nzg0ZjE4MTg1MmQ4MGZjZjdjMmUzYjg0MTRhZTc5N2Y3YjliMDEzYjU5Y2Y4NmI5ZDNhMTkwMDYiOiIzZWVjMzU4ZjdmOWU3ODllNGFkNWE3OGRkNzM5ODdhZGRiZjNhZTViMDZkODI2Y2VjMmQ1NDQyNTI4OWRjOWFmIjoiOWE2NmMwMTVkMjU1MGUzZjc4YzQ0YjkwMTA3NWZhYmIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwyNTYpICMyCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiOTg3ODRhYTc5NGRmNTQwMDg5MGU2ODAzZjA2ZDg4NmFlYjA4MzNiMWZlYTI4YTVmNzk1MjM5N2FhMjEwOTJjZWFmZGI5MTk0MDc5ZjM2MDliYzY4MjMzMTQ3Yzc3OGU3IjoiNzMzODUyMWU4ZTEyN2U3MGRhMjU5YjM3ZjVmNWNkZjgzMDc5YmRiNDAyNDIzNGI4Y2VlY2ZiYThkOGMzZjFjODUxMGZmOTFmM2JkMDhmMmM1NGYxMWI1MzQwNDhhMzIwYTE1YmEwZmNjZWM4ZGEzNGQ0ZWY3ZjQ5YWRlNDg0NzgxNGM4NTk4MzE5MDc5OTJkMGFkYWIyNzA0NjMyNGQ0ZDlhODUzZWI5ODZiOGRlMjViMzRlYTc0ZWIzZDExMDQ4IjoiYjE0YzUzMTRhYWMxMWNiNDNmNDU3MzBlNDc0Yjg0ZmJmNWQxNDgwZDk0ZDA2OTliODBlMzU3MGY2NjM2YWE3MiI6ImQ2MjA4OTEyMzQ4MjM2ZmVlZTFkMjU4MDkyMjgzZGQ5ZGI3NTg5OTc2OWRkMTA5Y2MyZjBmMjZkODhkY2M2YmYiOiI1ZWM3NWZkZDFlZDNhNzQyMzI4ZTExMzQ0Nzg0YjY4MSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDI1NikgIzMKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJmZTliN2RmMzA2YzRjY2QwMmFmZDYxNDJjNjY1MDQxODMyNTYxNzk0NTE0N2RlNDM2YTU1ZTc4YWE0NTg2NjExNmQ2Njc4ZTAxM2EwZTJjNWExM2UwZDAxZmJkODQwMzkiOiJjNGRhNTZmNDIzOWZkZTBiYzQ5YjFkODUyY2IzNmM4MDIwNWY5ZTk5ZTU5OTVhODBiZTA0YmJiYmExNWYyNWI4ZDA1NGMzOTdhMzRjZmYxMzI2YTcxZjBhY2M0Zjc5NDI3OTVjYWJjM2ZhNDYzMzlkYzU0YjRiZjdmMTFjMDk1YWY4NTAzMDA0ZDk3YzQ4NWFjZWM4ODE1ZDE0MDQ2NzQ1OTJjODk2ZWNmYWJlZmNiZjIyMmY0ZmU1YTNjZWQwYWYiOiIwODZkMDlhNmVlMjBjNjliZjVjMDU0ZWJjNjI1MGYwNjA5N2M4ZGExYTkzMmZiM2Q0YjFmYjVmNDBhZjYyNjhhIjoiNDRlNjRiMTRjNDllYmI3NWM1MzYzMjliYjQxYWIxOTg4NDg4NDljYTEyMWM5NjBkYjk5ZjdiMjYzMzBiMWY2ZCI6IjdhYTNhN2UxNTlkMTk0Mzk5ZmM4ZWY5ZWI1MzFhNzA0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImMwZDQ3ZWUyMzI4MTg1ZGYyYzI5OWQyNzBlMTFmZWUyNmRmNzUzYTViNGY4OTlmZGMwZGZmNzllYjUwNzQ4MjMyZjlmNzljZjNmNWU5YmQ0YTI2YTQ4ZTc0Mzg0M2IwMiI6ImE2YjVkZDVmMWJhZDk1MzMxY2FhZTU4NTJiZTUwYTI2MjY3YWY2NTVjOThmZWI4YjY2YzQ1YThhZTJkZGZjYTI3MGFiMGQ4MDIzZTQzZTZlMjJhN2I1OTA0ZDYzNDgyZjA0NWU4NTU1NmI5YzEwNWNkZTBmM2ViN2IxZmZmMTAyNjA4NmM4MGIxOTUxOTY4MDNiNWY2NjQzNjJiNjU5NTc4ODk0ZDY1NTFmYjdjNDU2NmVlYzAyMjAyZmRjMjk4ZiI6IjNiNTc1ZDAyODA0NmU3ZjYwMDVkZmNkZmNkY2YwM2ZmNzdhOWNhY2QyNTE2YmNkZmY3ZjM2MDFhOWE5NTEzMTciOiJmMTNiNThkYWVkNDZmNWJmM2M2MmI1MThhYjVjNTA4ZGQyYmMzZTMzZDEzMjkzOTA0OTQyMWZmMjljMzFjNGYwIjoiODQ2OWRmYTg5NDUzZDE0ODFhYmVkZDZjYzYyZTRlNDQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwyNTYpICM1CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiYTBkYjgxMmE5MzlmYmYzOTQyYjAwYmUwMThjZmY0NTc4YjlmYjYyNjI5Yzc2NmE1MGYzNTE4ZmU2MzQxMDBiMWNiYzQyNDRhZTg0M2ZlMzIxMjVjNTNiNjUzNzA1NDU3IjoiN2UzZGNhMjBhN2E5NzdiNjYxNmE2ODRlMzA5MDE1Y2Y2YTM3ZWRkMGQ4NTgxOWZlOTFkMDc0YzkxNWIwYzk1NDBhOGFhNDg2ZjU4Njg1YjA2NDg1MWQ2MTY0MTUwYjFjMWIwZTJlNTQ1YzYzNThkMjhiMmY1MjYzYjJmZDEyYzUwM2QyNzFhYjZkZTc2ZDRmYTRjNjA0Y2FlNDY5MzM1ODQwMzI4MDA4ZDhjZTU1NDU1ODZiOWVhNmIyMWRhNGY5IjoiNTU0YjI5N2JjMzI4NjZhNTI4ODRmYWJmYzZkODM3NjkwZGUzMDQ2N2I4ZjkxNThiMjU4ODY5ZTZmNGVkMDgzMSI6IjRmNjg4Y2JhNTkwOGUwNjk5YjMzYjUwODg0N2Y3ZGFjMzJmMjMzZTZmMDJjZjA5M2VmZGFjYWU3NDI1OWYzYjYiOiI5Njk2ZGQ2ZWQ1ODc1Y2RlZjRhOTE4YTY2ODY0NTVhOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDI1NikgIzYKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJmZjZjZDIwNDQzYTMyYzllOTM4ZjJhNjE3YmJiOTY5YmE1NDA0MGIxMjcyM2IwZDQ1MmE2NjliNTg0YmExNmZmYWFjYmUzOGFmNjJiNWE2MmUwYzY3ZDE2NWQwMjIzNDQiOiJlZmNmNzUzNmYzMjkzMjUyNmZlODJiM2EyMzMzNTA4NDA0NzI3ODc4NzIzZmMwOWNiZDkwMjU4MWQ4MjQ2M2NmNmFjZjFkZGY0MjE3ZWE2NDA0NDY5MTkzZThkYjBlN2U4Yzg2NGFlNjU1YjQ5YzZhMDk1ZjgwZjFhYjE2OTg1NDUzZjBmYjcyOWMxMTlkOGEzYjgyMDAzNDYyNmE5M2IxZjcwZWI5OWI2Y2Q4Yzk5MGRkYTM0YTFjNmE0YjZlZWEiOiI4ZDQxMjIwODA5MWI5ODdlZTA3ODFmZjY3OWM1MGRiYWI5ZWYzODkxNTZmNTcwZjI3YWFmM2U2OTliZGFkZTQ4IjoiNTAxMzgxY2U1ZTc3MThjOTJlZTczZTljMjQ3OTY1ZGQ1ZjBiYmRlMDEzYzRiNWU2MjVlOWFmODkwN2U0MDU2NiI6IjRmMzIzOTM0YWRiOGEyMDk2ZjE3ZDVjNGQ3NDQ0MDc4IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjNworY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImJkMTQ3NzkxNTNlZDk2OTZkM2U1MTQzYzUwYjIwNTBiNmFjZDNlYTJmOGI2NzBlZjBlNWY0YmVkZjAxNzA1NzI3YmY5ZTY0YWU4NTkyMTRhYmU2ZWY0OTcxNjNmMDIzNiI6ImJmYjA5MzFiMDVhM2ZlMjMyNjE0ZTFiMWMzMDYwYjNiMDdmYjc1ZDIzYWMxMDE5MGE0N2E3MjQ1YTZlY2FkNWYzODM0ZTY3MjdiNzVhY2MzN2U5ZDUxMmQwMWE0YTljZWY2Y2IxN2ViOTdlNGQxZDdjMWRmNTcyMjk2OTcyZjA0MzdhODljMTk4OTRmNzIxY2JlMDg1Y2YzYjg5NzY3MjkxYTgyYjk5OWJmMzkyNTM1N2Q4NjBmMTgxYTM2ODFjZSI6IjBiNWRjMWNkZmM0MGNmZGMyMjU3OThkYTc3MzQxMWRjOWE4Nzc5MzE2Y2ViMThkMWU4ZjEzODA5NDY2YzYzNjYiOiI4NDNlYjcyOTc1NzBlNTM2YjU3NjBjMzE1OGFkYjI3YzBjNDI2Yzc3ZDc5OGMwODMxNGY1M2I1OWFhNzJkMDhiIjoiMWU3MDNmMzEyMjQ1NWE0MDUzNmMzOWY5ZWEzY2VhYTYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwyNTYpICM4CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiNjRiMTU1ZmQ0Yjg2MzQ2NjNhN2U4YTYwMmUyYjlmZTI0NzdiZTc0NjkyNjQzY2NmZDBiMzE2YTAyNWVhNmYxZmMwZGZkMDgzMzI0OGNiMDExMDgyYmUzNmNiYTNjNWQxIjoiYTViMTVjYjFlMDM5ZDdiYmUyZGI4MGEzMmQ0ZjQwMmM3ZDNjNTlhNDViMDUyNTU0MDFkMTEyMjc3MGRiZGI5ODk0ODQxOTY0ZDVjYWRjOWFlOWFmMDA3ZDYzZTg3MGQwNTEwMDc4ODg1Y2E0MDJiZDIyMmYxNmQyZDI3ODkyZTIzMjkyYjY1Y2YzNzBiMTVkNWU1YTczOWRkZDEzZTNlMjdmN2MyZTJiOTQ1ZjhlMjE4OTdjM2JiZjA1ZDhiMDQzIjoiYWVhMmZlOTk1YmU3N2RmZGNhNmViYWExYzA1YmE0Yzg0ZDBlNmI5YTg3OTA1YzM5OGEzZGZlMDhhZWIyNmQzOCI6ImY0ZTllN2ViMGVlYTRlMmQ0MTlkZTZhZDI5MDlkMzZlYzA2Yzc5MDk3ODg0YmY5ODk4MWU4NmRlZGFlMzY2YmEiOiI0YTI4OTU1ZGM5NzkzNmIxYzBhZWQwNzUxYTFhZmVkNSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDI1NikgIzkKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJlNmMwOGU4YjhkOGU0MTg0NzcwODc5MTE2MTAwOTZmN2UwNDIyMDgzYTM3NmE3NzE5OGU5YzYwZmIyZGM4YzE0YWZmMzNkNzgzNTg3OGI2NTMyMmYxNTYxNzM4YjFlYmIiOiJkNGUwMzQ3YzIxNThiODgyZWIxZTE2NWY3ZjJhYTEzMjRkNjYwNmZlMjU5Y2E3MzBiMmEzMzY3NDM1Y2I5M2I4OTEwOGU0OWJkOTczNTUyMTUwNjNmNjNlNzhlODkyNmIyNjRjOGE5NzU3MWZkNGQ1NTg4MjM2NDkxNWI3YmQ1NDQyNTRjMjVjMmI2N2NkZDk3OTczN2M3ODExYmNkZWVmNWIwNTJkOGZlMDVhODliMzI5MWVmNjY5ZDU1NzlhNjEiOiI2NjA3NTQxMTc3YmMwYzVmMjc4YzExY2IyZGNiMTg3ZmM5ZjJjOWE5ZThlZWZhNjU3YmE5MmRlZTEyZDg0YjA3IjoiN2E0MzljODU5M2I5Mjc4NjdjZmE4NTM5NDllNTkyYmFlYTBlZWIzOTRiMGUyZmU5YWIwODc2MjQzYjdlMTFlMiI6IjQyMDg4ODEyMmYyZTAzMzQ3NTdjNGFmODdiYmMyOGE0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI0NDEzZmY3NzVjOWI3ZDlhMzAwM2UwYjcyN2UzNDU1NGUwZjYxNTQ3MWQ1MmFlYjRhMDU5Nzc3YjM3MmQ2MDMzMmExYTRiY2FmOTA2ZTU5ODU4MWJjNWEzNjliMmM5MzMiOiJhMjFjZjU2NzM2MmZlZDBlZGRkZmQwYjFjMmQ4NWZmNmQyZGI1NDg0ZmNhOGJmOTBhODJkYTJhYjc2ZWZjYWM5Mjg2ZTQxNzYyODQ5NmYzN2VmZmRhMTUwZWY0OTEyMTI1YWFjNjhhYWM3MmU2ZjkwMGE3MDE5MmQ0ZWYwYjRjYzRlOTQxOWM5M2ZmYjI0NTk2NWFlMzBjNWY4YWJlMjBmNzMyZDc2MDgwYmRlNWExYzZiM2YwNzVlYjM1NjIyZDEiOiJiOTI0ZDE0NWZjM2VjZDc2ZjAwMGYxMjYzOGVmMGE0OWE1ZDRjZjg4N2FhOTNmYzllNWM1MzZmZWJjNDU0ZjJkIjoiNzNkYmI0MGIyNTdlNjU5ODc0NGY5MTA3YzhlN2ZmNTFhMDgwNDA3ZmM5ZTgwZDM5ZDlhNGRiOTRmMTY3YzExNiI6Ijg0NDU3ZWE3NTM3NzFhZDdjOTdjZTljMDNhYjA4ZjQzIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI1ZTQwOWQ1NmFmYjY5NDBmOWZmYTQ1ZTBmOTJlZjQ5NzJhY2VkZDM1NTdiOGUwZjU0MThlMzAyZjI3MjBhZTUyODkyOTQxNzYwNDVhZDMwOTZlYTY4ZGI2MzRjZjU1OTciOiJjNWE2M2M4ODZhZjdlZDc0OTY0NzNhNmFlMmYyN2YwNTZjN2U2MWM5YWNhOGM1ZDA5NWFmMTFiMmVmZTFhNmI0MzM0NGY5MmIzN2M3YjY5NzdkZGJlZjEyNzNlOTUxMWQ5MzA1ZmNiZTdmMzJiYzZhNjJmMjhkMzQ4NDEzNTAzNjJkMjcxN2RkMDA0NjcyMjRhMzU5ODViOWZlY2MyNzM5YWNkMTk4NzQzODQ5ZGJmYTk3ZjQ1OGUyZTdkNmIxZGMiOiI3ZmRhMTMzYTIzZTkyOWIxNzU0OGEwNTAxM2ZmOWM3MDg1YzVhZjljOTc5MDU3YjhmOTYxYmE3NTE0NTA5ZmYzIjoiYmQwNjEyOTJiNmJjM2QzZTcxZWQwMWFmMDkxZjAxNjlmNzBmMjM4NjJlZmNjZDllNzYzNDVmZjYwN2RmZjNlYyI6Ijc1YjM1ZGFiM2FkNWUzNWMxMGVlMzk1MjlhN2Y4NDBmIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjMTIKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJlZDJhNTIxNjk3OTFkN2M3ZDMzMmNmMjU4ZWE0ODQ3YzM1OTMzNWY5YTY4MzllZTc2N2E4Zjc2ODAwYmEyOGU5NDg1OGNjOWI3ZjUyNmU2MmE5MzYwM2ZhMmIxY2FhNmIiOiIwYTYxNTVmZjQyMmZmNmFlOTgxNGY4MWJmMzUzYmQzNDU0ZDBjOTg5MmY5ZjNkNzMwZGNkOGM4NzYyNmY4MTNjYmUxZGZmMTkyMmZlNzNlNGEzMTliZTUzZjRlYzA1ZTk2NWMyN2YyMzliMWU1MTg2OTA2OWE3ZTdjZGQ5MTZmYzFmZDZmNjQwYmZlNGI3NjFhODA0MGY4ZGIzN2ZiNWVlNzUwOGU3ZDIyNmM3Njk1ZmIyYThiZDc5MWZlNDllZjIiOiIxNDA3M2ExYjRmMDdmM2I1OTRmYTQzZDBjODc4MWI4MDg5ZGQyZDliOGFkMjY2ZTAzMjFhYWE2YjcxYTBkMDU4IjoiNDI0N2ZjNjg4NmU4NjU3Yjg0MzY5Y2YxNDQ2OWI0MmFhMzcxZDU3ZDI3MDkzZWU3MjRmODdiZjIwZmE5ZTRlNiI6ImYyYWVhMmJjMjNlN2M3MGY0ZWUyZjdiNjBjNTlkMjRkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJmMGQzYTQ2NTAxZGE3YWIyM2Q4Njg4NzI1ZjUzZjQyODljZTNiZmE2Mjc2NDZmZTMwMTUzM2VjNTg1Zjg2NmNhYWZiODEzMWU5NTQ2MDU2NjI3MGY2OGNkMjVlMWYxNTMiOiIyMjNkNDlmOTlhNTZjZmNmMmViOGNjYTM5YThhODJlZTMwNmM2MjcyZDUyMTI1N2YzZDdkMmE4NzY5OTExMWU0NDJmYzU1YTM5OTk5NGQ1NzM3MzE0MWYyMjA3ZDQzYThiYmMxZTA4NmQ2NzM0M2I3ZGMyYTg5MTg1M2M4NjBmZTQzZmI2YmUzMmNmMDM1YWNhNTgyYmY1NTkwY2I1MDAxYjA5YjQ5NzZlYTYxN2ZhN2JkNTZkYTgxZmRlZjJkZjkiOiI3ZDEyNjczY2FkNWFkNTAwMzQwMGZiOTQ1NDdlMmI5ODdlOTM0YWNmNmI5MzBjMGU3YWVjNzI2MzRiZmI4Mzg4IjoiZTg1ODNiOTk4M2IzYWM1ODlhNmJiN2E4NDA1ZWRmYzA1ZDdhYTU4NzRhODY0M2Y5YWMzMGEzZDg5NDVhOWY5NiI6ImNlNzJjMGVhMGU3NmJlNmJjODIzMzFjOWJkZGQ3ZmZiIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiIxZTQ2NDRkZjFkMDFmOWEwZjMxZDFkMGM2N2JjOWZiOWExZWUyMjIzZmJmYjI1NTIwZDM4ODFjZGUyYjE4M2I3M2ZlMWE4Y2M1ZjE3Nzk2Y2YyMmFhYWVkNTc2MDc0MjAiOiJjZGFjNjJiNWU0Y2NlZTg2MDliMWY0YjdhODczM2U2OTA2OGM3MTIxOWI2MjkyZWNiMzE4YjlkMzQ3OTUxNjgwN2FmMjgwY2ZhMjBlNDU1ZDVlOTZlYjY3OTRhM2I5NjM5NTdmM2MwOTlmZDFlMTE5OTcwNmQzNmEwNjAxMTgzNmFmODkwZjNiN2IxNWNkYTYzNDZhMDZmZGQwZjE5NGRlNDBiZmJlYzEyYjAyMWIwMmVlYWJhYTM0ZDM1YjMwYTMiOiI4MTY5MjUxZWE1NWNjZTUzNGM2ZWZkMGU4YTI5NTZkMzJlZDczYmU3MWQxMjQ3N2NlYThlMGYxYWI4MjUxYjUwIjoiODY1ZDE0Y2IzN2RkMTYwYTNmMDJmNTZhYzMyNzM4ZjllMzUwZGE5ZTc4OWExZjI4MGVlN2I3OTYxZWM5MThhNyI6ImZmMTFiYTgzNDlkYWE5YjljODdjZjZhYjRjMmFkZmQ3IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMWI1NGI4ZmYwNjQyYmZmNTIxZjE1YzFjMGI2NjVmM2YiOiI1YTE5NGQ1ZTJiMzE1ODE0NTRkZWY2NzVmYjc5NThmZWM3ZGI4NzNlNTY4OWZjOWQwMzIxN2M2OGQ4MDMzODIwZjllNjVlMDRkODU2ZjNhOWM0NGE0Y2JkYzFkMDA4NDZmNTk4M2Q3NzFjMWIxMzdlNGUwZjlkOGVmNDA5ZjkyZSI6IiI6IiI6IiI6ImEwNTQzMDNkOGE3ZWE5ODg5ZDkwM2UwNzdjNmYyMThmIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiOTBiYzNiNTU1YjlkNmI2YWViMTc3NGE1ODNmOThjYWQiOiI5M2I3MDU1ZDc4ODhhZTIzNGJmYjQzMWUzNzkwNjlkMDBhZTgxMGZiZDQ4ZjJlMDZjMjA0YmVhZTNiMGJmYWYwOTFkMWQwZTg1MzUyNWVhZDBlN2Y3OWFiYjBmMGJmNjgwNjQ1NzYzMzljMzU4NWNmZDZkOWI1NWQ0ZjM5Mjc4ZCI6IiI6IiI6IiI6ImFhZjI3ZmMyYmY2NGIwMzIwZGQzNTY0YmI5YjAzMzc3IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNGEyYTdkY2JkZTU4YjhiM2MzZjQ2OTdiZWI2N2JiYTIiOiI1ODM2NGNlZWZhZDM3NTgxYzUxOGI3ZDQyYWM0ZjlhYWUyMmJlZmQ4NGNiYzk4NmMwOGQxZmIyMGQzYmQyNDAwYTg5OWJhZmQ0NzAyNzhmYWQ4ZjBhNTBmODQ5MGFmMjlmOTM4NDcxYjQwNzU2NTRmZGE1NzdkYWQyMGZhMDFjYSI6IiI6IiI6IiI6IjIwYzUxMTdhOGFjYTcyZWU1YWI5MTQ2OGRhZjQ0ZjI5IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiOTExZmFhYjEzNDdhZTJiMzA5M2E2MDdjOGJjNzdiZmUiOiIyZjA0NGI4NjUxZTFjOWQ5OTMxNzA4NGNjNmM0ZmExZjUwMmRkNjI0NjZhNTdkNGI4OGJjMGQ3MDNjYWJjNTYyNzA4MjAxYWMxOWNkYjVjZjkxOGZhZTI5YzAwOWZiMWEyY2Y0MmZkNzE0Y2M5YTUzY2E1YWNiNzE1NDgyNDU2YSI6IiI6IiI6IiI6ImFhZTBjMGFjOTdmNTNkMjIyYjgzNTc4YTJiM2RkMDVkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZjk1OWYxYmMxMDBhZTMwMDg4MDE3ZmFlNTEyODlkOGUiOiI3N2QwZjBlZmJjN2NhNzk0YTUxZGZmOTZlODViOGU3ZGZkNDg3NWZiZmI2ZTU1OTNhZTE3OTA4YmZiZGRjMzEzZTA1MWNiN2Q2NTljODM4MTgwZDgzNGZkZDk4N2FlM2M3ZjYwNWFhYTFiM2E5MzY1NzUzODRiMDAyYTM1ZGQ5OCI6IiI6IiI6IiI6IjVkODBiYzNmZmZhNDJiODljY2IzOTBlODQ0N2UzM2U1IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjNQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNDVhOGJiMzMwNjI3ODNlZWRlMDliMDVhMzViZDQ0ZGQiOiI2YmIxNGRjMzRmNjY5NzU5ZjhmYTU0NTNjNDg5OWViNWFjNGUzM2E2OWUzNWU4OWIxOWE0NmRiZDA4ODg0MjlkMTM2N2Y3ZjMxOTFlOTExYjNiMzU1YjZlM2IyNDI2ZTI0MmVmNDE0MGRkY2M5Njc2MzcxMTAxMjA5NjYyZjI1MyI6IiI6IiI6IiI6IjBkZmE5OTU1YTEzYTljNTdhMzU0NmEwNDEwOGI4ZTllIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMGFkYTEyOWY5OTQ4MDczZDYyOGMxMTI3NGNlYzNmNjkiOiJiM2QwMWJjYjFlYzc0N2ZkYjdmZWI1YTdkZTkyODA3YWZhNDMzOGFiYTFjODFjZTFlYjUwOTU1ZTEyNWFmNDZiMTlhZWQ4OTEzNjZlYzBmNzBiMDc5MDM3YTVhZWIzM2YwN2Y0Yzg5NGZkY2RhM2ZmNDFlMjg2N2FjZTFhYTA1YyI6IiI6IiI6IiI6ImYzNDcxMGM5ZWJmOWQ1YWFhNWY3OTdmZDg1YTFjNDEzIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjNworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMDUyYTVhZDRjZDM4ZGU5MGU1ZDNjMmZjNDMwZmE1MWUiOiI5ODQ4MmU1OGU0NGI4ZTRhNmIwOWZhMDJjMDVmY2M0OTFkYTAzYTQ3OWE3ZmFkMTNhODNiNjA4MGQzMGIzYjI1NWUwMWE0MzU2OGE5ZDZkZDVjZWNmOTliMGNlOWZkNTk0ZDY5ZWZmOGZhODgxNTliMmRhMjRjMzNiYTgxYTE0ZCI6IiI6IiI6IiI6IjNmNTUxNDRlZWMyNjNhZWQ1MGY5YzlhNjQxNTM4ZTU1IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjOAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMDA0Y2QyZjI4ZjA4M2QxY2VlNjg5NzVkNWNiYmJlNGYiOiI2MjM4ZDQ0ODAxNWU4NmFhMTZhZjYyY2RjMjg3ZjFjMTdiNzhhNzk4MDlmYTAwYjhjNjU1ZTA2NzE1Y2QyYjkzNWJmNGRmOTY2ZTNlYzFmMTRiMjhjYzFkMDgwZjg4MmE3MjE1ZTI1ODQzMGM5MWE0YTBhMmFhOThkN2NkODA1MyI6IiI6IiI6IiI6ImIxMzcxMTlkYmJkOWQ3NTJhOGRmY2VlYzA1Yjg4NGI2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZjk4NWIzZWEyZDhiMTVkYjI2YTcxODk1YTJmZjU3Y2QiOiI1MGQzYzRlY2IxZDZlOTVhZWJiODdlOWU4YTVjODY5YzExZmI5NDVkZmFkMmU0NWVlOTBmYjYxOTMxZmNlZGQ0N2Q2MDA1YWE1ZGYyNGJiOWVmYzExYmJiOTZiYjIxMDY1ZDQ0ZTI1MzJhMWUxNzQ5M2Y5NzRhNGJmOGY4YjU4MCI6IiI6IiI6IiI6ImViNDE5NjI4ZmJjNDQxYWU2YTAzZTI2YWVlY2IzNGE2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjEwMGYxOTY5OTFiNmU5NmY4Yjk2YTM0NTZmNmUyYmFmIjoiZDI3Y2JlYWMzOWE2Yzg5OTkzODE5N2YwZTYxZGM5MGJlM2EzYTIwZmE1YzVlMWY3YTc2YWRkZTAwNTk4ZTU5NTU1YzFlOWZkMTAyZDRiNTJlMWFlOWZiMDA0YmU4OTQ0YmFkODVjNThlMzQxZDFiZWUwMTQwNTdkYTk4ZWIzYmMiOiIiOiIiOiIiOiJlM2UwOWQwZWQ4MjdlNGYyNGEyMDU1M2ZkMTA4N2M5ZCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzExCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI4OGY1NWQ5YmE4ZmVmNzgyODQ4MzI5ODMyMTEzM2ZlYyI6IjE2ZjlmNTM1NGQ2MjRjNWFiMWY4MmM3NTBlMDVmNTFmMmEyZWVjYTdlNWI3NzRmZDk2MTQ4ZGRiYTNiMzhkMzRiYTdmMTQ3MjU2N2M1MjA4NzI1MjQ4MGQzMDVhZDFjNjllNGFhYzg0NzJhMTU0YWUwMzUxMWQwZThhYWM5MDVhIjoiIjoiIjoiIjoiMDdjZDgyMTAxMmVmMDNmMTZkODUxMGMyM2I4NmJhZjMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMTI2NDc5YWJkNzBiMjVhY2Q4OTFlMWM0YzkyMDQ0ZjkiOiI3MGFmYmM4M2JmOWZmMDk1MzVkNmYwZGRjNTEyNzhhZDc5MDlmMTFlNmYxOThiNTkxMzJjOWUyNjlkZWI0MWJhOTAxYzYyMzQ2MjgzZTI5M2I4NzE0ZmQzMjQxYWU4NzBmOTc0ZmYzM2MzNWY5YWZmMDUxNDRiZTAzOWQyNGU1MCI6IiI6IiI6IiI6IjBmOTBkZjM1MDc0MWQ4ODU1MmE1YjAzYjY0ODhlOWZiIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImE0NWYyZmNhNTUzMDg5ZmUwNGU3ODMyMDU5ZGM3OTc2IjoiNWU1YTllMWUzY2I4MDczOGMyMzg0NjRlZGUxYjZiNmEzMjEyNjFhM2IwMDZhOThhNzkyNjVhZDFmNjM1NTczYmJhNDhkY2NmMTdiMTJmNjg2ODQ3ODI1MmY1NTZiNzdjM2VjNTdhM2JmNmJiNjU5OTQyOTQ1M2RiMmQwNTAzNTIiOiIiOiIiOiIiOiI2ZWI4NWFlMjQwNmM0MzgxNGI2ODdmNzRmNGU5NDJiYyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzE0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI1MmRiYjQzMjQxMDAyNDE1OTY2ZWFlYzI2MTVhYmEyNyI6IjMxY2ZlNjBlNWVkMTJmZjM3ZDdmMjI3MDk2M2RlZjU5ODcyNjMyMGMwMmI5MTBiNWM2Yzc5NWUyMjA5YjRiNGE5NTg2NmM2NGNiMDk3YWYxZDY0MDRkMWU2MTgyZWRmOTYwMGUxODU1MzQ1Mzc1YjIwMTgwMWQ2ZjRjNGU0YjMyIjoiIjoiIjoiIjoiMmEyNzBmNWVmODE1NjY1ZGRkMDc1MjdjNDg3MTlhYjEiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjE3NjIwMGJiNDQ4MDhiNTQwMGIyNGUxYjVmNTZjZjczIjoiZjg0ZDM5NWIxNzM0ZWFjNDYwMGRiYzM2ZjZiMWUxNTk5YmM3ZjI2MDhkYzhlY2IzYTU1MzY5ZDdiMWIxMjJhMDlmNWFjOWMxNmQ5YTJiZTM3ZDJmZjcwYTliYmE3MzJmYzM3ODViMjNmZjRhZGUzYzg0MDRkYTNmMDlmOTVhOGYiOiJhZWYyOGM5MTY5ZTlhZjc0YzczNDMyZDRhYTZmNWRmZjllYTRhNTM0MzNkZTJlY2I5YmYzODBhODg2OGM4NmUxIjoiMDYyNmFlMTk3NjNjNTMxM2I2MjdhOGQ2NWNmMWNmYmE0NmRmZDY3NzMyNDI3MzhiOWI4MWZkZThkNTY2YWRlMSI6IjYzYzE2MGVkNmE2YzFmZmZkMDU4NmY1MmZhNDg4YTkwNTU1MzM5MzBiMzZkNGZhNWVhMzQ2N2NkYTlmZmUxOTgiOiJlOGY5MTYzMzcyNWQ3ODYwODE2MjVmYjk5MzM2YTk5MyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMTljM2QxNjE5N2FjOTNiZjU4YzQxMTBjOWU4NjQ4MDQiOiI1MDc1NWNjMDE3OGM2OGFlNzBiZWZkNzc0NGY2ZjFlM2Y2YTU5YjNiYmU0ODRhNzQ0NDM2MDc5YzdmYWU4ZDgzYzQ5NjU1MTZmYjk1MmM2M2UxZDA1NjFkOTJjY2NjNTYwMzc0NjU4MTVjOWU1NDljOWFkY2U0YTA2NDg3NzEyOCI6IjVjYjgyZDJjMjk3NDA0ZjNkYjE5MDk0ODBjNTk3ZGQwODFkOTRjYTI4MmJhOTM3MDc4NmE1MGYzY2JhYjZhOWIiOiI5NmQxMzBmYWYxYTk3MTkyMGMyYmY1N2JjZDZjMDJkNWE0YWY3ZDNjODQwNzA2MDgxZTRhNTBlNTVmMzhiZjk2IjoiMWIwZDA0ZjE3OTY5MGEzMGQ1MDFlOGY2ZjgyMjAxZGJhYjZkOTcyZWNlMmEwZWRmYjVjYTY2YThjOWJjZjQ3ZCI6IjQ2MjhiMjY0OTJlNWNiM2IyMTk1NmQ0MTYwZjBiOTExIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI0YjFlZGQwZjUzYmY0ZTAxMmRlZjgwZWZkNzQwMTQwYiI6ImU1MGMzMWViYmI3MzVjNGE1M2ZjMDUzNTY0N2FlMWZmZjdhNWFjNGZhNDA2OGJhOTBmMWZhMDNjYTRkZGVkZWNkNWIxODk4ZDVlMzgxODUwNTRiMGRlN2UzNDgwMzRiNTcwNjdhODJhNDc4YjAwNTdlMGM0NmRlNGE3MjgwY2Q5IjoiZTcxNTRlYzFmN2FjMzY5ZDBiZDQxMjM4ZjYwM2I1MzE1MzE0ZDFkYzgyZjcxMTkxZGU5ZTc0MzY0MjI2ZWIwOSI6Ijk0NDQyMzhiZDI3YzQ1MTI4YTI1ZDU1ZTA3MzRkM2FkYWZlY2NjYjJjMjRhYmRhYTUwYWMyY2E0NzljMzgzMGIiOiJhYjI0ODhjOGI3ZTgxOWQ4Y2U1ZWMxZmZiNzdlZmM3NzA0NTM5NzBkNmI4NTJiNDk2NDI2ZDVkYjA1YzAzOTQ3IjoiYTQ4OGE4N2MwNGViMWM3NTg2YjgxNDFlZDQ1ZTc3NjEiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjFmODljOTE0NjQ5YWU4YTIzNGMwZTkyMzBmMzQ2MGY5IjoiNWUwMjljMTczZGMyOGFiMTk4NTFhOGRiMDA4ZWZiY2Y4NjJmNDE4N2ZjYTg0ZTRlNmY1YmE2ODZlMzAwNWRiYTViOTVjNWEwYmNmNzhmYjM1YWRhMzQ3YWY1OGVjMGFjYTA5ZWQ0Nzk5Y2Q4YTczNDczOWYzYzQyNTI3M2U0NDEiOiJiNTFmNWZkNTg4ODU1MmFmMGU5YjY2N2MyNzUwYzc5MTA2Y2UzN2MwMGM4NTBhZmJlMzc3Njc0NmQ4YzNiY2UxIjoiOWIxMzJhMmNiZmZiODQwN2FhMDY5NTRhZTZlYmVlMjY1Zjk4NjY2Njc1N2I1NDUzNjAxMjA3ZTBjYmI0ODcxYiI6ImYxYzQzNWUyZWJmMDgzYTIyMjIxOGVlNDYwMjI2Mzg3MmEyZDNlMDk3YjUzNmE4Y2MzMmE1YTIyMjBiODA2NWYiOiJhMDY1Y2MyMDM4ODEyNTRjYTgxYmQ5NTk1NTE1ZTcwNSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMGVmMmJlMmQwMGExNjA1MTQwNGZjMmEwZmFhNzRmZGMiOiJiNjZjODgyYWUwMmM1MjE1ZWQzYmNkOWU5YTQwOTM0YjA5YmY0OGExNWZlNzU1OGM5ZDljZWIwZWJlYzYzNjI1ZWExOGY3YzNhYjM0MWQ5ZjdlZGQ4ZTFkODgxNmVkZWNiMzRkYmQ3MWFlMDI3NzEzMjdiNWViYzc0NjEzZGFkZCI6IjFlYmU5ODkzOTU3YTVjNGE3MDc3OTM5MDZkMzFiYjIwMWU4OGQ4OGEyMmFiZDZiYWE2NDYxZmM2MWRlZjdmZmIiOiJmODFlMjY3NDQ4MzQ0MTNjYjk1YWY4ZDQzOGQwMDUwYzdjOTY4ZjkyOWEzM2UzNWVlNWM2NzE1YTBhNTIwOTUwIjoiNjg3YTg0OGIyYjZjNzE1YTBlNjEzYjNmM2JiMTZjZjJmMDU2NTQzZWI5ZGQ2YjhhZWU4ZGU4YWE2ZmQ4YTFlNiI6ImE2YzRhN2U5OWQwOGNjODQ3YWMwYjhjOGJjZjIyZWMwIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM1CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJlYjI0MzlkMTU2YzRmNTFmYjE5NDNjMjZmMjdkZThhZiI6ImFkMTUzZmQyNjZkOWY3M2IyMWY0ZTVlODhkM2QxM2JhODMyNWFiZGVjNDI3ZDVkOGY2NzFjZmNjZGJkMzUxMGU5Nzc0ZDU5YTE0ZDliNTQ3MmIyMTdiN2JjZjM1NTQzNmE1MTk2NWQyZGZmN2M0YWM1ODZhYjgxMmYyMGQzMjZlIjoiZTI0YmQ2YjY5YTQwZmEwYTAyY2VmYmJhYTI4MmY4ZjYzYTgwZTE1NGJlMzM4ZDFiOTEzNDE4ZDRmZjdhODEwZCI6ImZkNDBiYWYxMWQ3Y2RkNzc2NDFhMmI0NjkxNmNiMGMxMjk4MGUwMjYxMmVmNTlmYjZmZTdkYWJiYmU3YTg1YzAiOiJhNDAwMTllM2I4NWQ3ZDU3NzVlNzkzZGQ0YzA5YjJiZGM4MjUzNjk0YjFkY2I3M2U2M2ExOGIwNjZhN2Y3ZDBjIjoiN2NkOGQyNzEwMTQ3YTBiN2YwNTNiYjI3MWVkZjA3YjUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzYKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImIyMzc5NmQ4OGVlNWFlNzVmZjJiYTRmYmJkNWUyZGU4IjoiYjI0OWQyZDliMjY5YjU4YzUzNTU3MTBhYWFlOThiZTEyZDhmYjJlNzkwNDZiNGU2ZGVlZWMyOGFkYWQ3ZTc4OTk5OTg0N2UyMGRlMTFmN2MzMjc3MjE2Mzc0ZjExN2UzZTAwNmJkZjk5YmI4NjMxYWE0YzRjNTQyY2Q0ODI4NDAiOiI3OWYwMjE0YjZiMGM1ZmZiMjFiMWQ1MjE0OThiNzFkMjJjNjdiZTQ2MDdjMTYzMDBhYjhkZGUzYjUyNDk4MDk3IjoiNTgyYmUxZTA4MDI2NGIzZTY4ZWMxODQzNDdhNWI2ZGIxZThiZTE4MTE1NzgyMDZlMTRhZDg0MDI5ZmUzOWY3MSI6ImY1ZTljMzM1NjgxMDc5M2Y0NjFmODg5ZDhjNTAwM2IxYzBiMjBhMjg0Y2IzNDgzMDFjZTdiMmRkN2ExYzdkZDciOiIxYWE4Y2Y1NDk5NGJlNmIzMjllOWViODk3MDA3YWJmMCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjNworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMDgxZGIwYjE2MjBhNTZhZmQ4N2MyZmQyYmViYjFkYjMiOiIzZjFlOTBkODg4NzBhMGJkMDMzNjQwMzZiNjU1NDk1ZTNlN2Q1MWJmNjdmYjY0YmEwY2JmMDAzNDMwYWY1NTg1ZjU5MzZiODRhYjNiOGE1NWMwMmI4YjZjNTRiZWEwOWNmMmQ3NzY5MTg1OGM1ODE4OTkxMzgzYWRkNWYwYzY0NCI6IjViOThiYzgzYWU4YmVkNWM0OWNiNzE2ODlkYzM5ZmVlMzhkNWQwOGJkZmEyYTAxY2VlOWQ2MWU5ZjNkMWUxMTUiOiJhYWQzZTU4ZmRkOThhYTYwZmMyY2FlMGRmM2ZjNzM0ZmZmMDFhMDdmMjlmNjljNWZmZWI5NmQyOTkyMDBkMGQ4IjoiYmFkOTAzOWViYjdjM2E0NDA2MTM1MzU0MmEyYjFjMWE4OWIzZTliNDkzZTlmNTllNDM4YmZjODBkZTNkMTgzNiI6IjhkMDFlM2RjNDhiMjhmMDE2ZmMzNDY1NWM1NGJlODFmIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM4CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJhODQyNzQ0M2Q5YzM0YWJjZGNjYTA2MWEyYmJjZmY1MiI6ImIwZTliMjE5MmFkYzg5MTI2NTNkOTBhNjM0ZDVkNDBjNTNjYTQzODMyOTBhODc2NGJkZjkyNjY3Zjg1OWQ4MzNjM2U3MmFkMGZmNDFlMDdmZTI1N2IxZWFkMTE2NDliZTY1NWM1OGE1ZGYyMzMxMTRlN2VkYTI1NThiNzIxNGQ3IjoiYzZjYWQ5ZmIxN2FkYTQzN2QxOTVkMWY4YjZhN2ZhNDYzZTIwMDUwZTk0MDI0MTcwZDJmZmMzNGI4MGE1MDEwOCI6ImJlNDYxYTljMWE3MmViYWYyOGVlNzMyMjE5ZTNjYTU0Y2JlZTM2OTIxZGFhYTk0NjkxN2E3YzYzMjc5YTZiMGUiOiJiNmQxMTBkNmI3NDZkN2NjZjdhNDhhNDMzN2JhMzQxZDUyNTA4ZDAzMzZkMDE3YWUyMDM3Nzk3NzE2M2MxYTIwIjoiMTZjY2Q2M2RiZjdiMjRiNmI0MjcxMjZiODYzZjdjODYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzkKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6Ijg2YmQwMjk3NmU2YzUwNjU2MzcyYjhjMjEyY2YwYTdhIjoiODk5MDBiMGZlYmY2YjRlMTlhYjhmYzViYWJiNDEyMmE4YWFkODZkNjU4ZDBjMmY5ODk4OGM5OWZiZDg1MzBmZjRhZDM2NWJkNWZkZGFhMTVmOTY1MzdiZDcyZGViNTM4NDQwNWI2MTBlNmViYWU4M2U4NDgzMDcwNTFmZDZjODIiOiI0MWJmMzc5NGVlNTQ2NDdhNDhhMjU4OGZkZmRlYTY4NmYxYWY2NzkyZTk1N2Q0MmYxODFmMjYzMWIyMDdhYzBjIjoiYzQ0NzhhZmJlYTRlZWNiMjI1NDQ4ZjA2OWIwMmE3NGMyYTIyMjY5OGM2OGUzN2ViMTQ0YWZmOWU0NTdmOTYxMCI6IjQxYTk5ZTBkM2Y1Yjc2N2Y5YmVkY2IyZjg3OGE1ZDk5ZDQyODU2YmVkMjkwNDJkNTY4YjA0ZTM0NzYyNGJmN2YiOiI4NjMzMzc1MjlhYWM5YWIxZTlmN2Y4MTg3ZWE3YWE3ZCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImU4MDllZjhkNGMzZDgyNTc1ODMzZDUxYWM2OTQ4MWIyIjoiM2U4MzFiNzcxNWNlMjAyYzk1ZWM4NTMzN2UyYzAwNjFkOTcyMTY5OTU1YmQ5NmZiZTFmNzU4NTA4YzAzMzZiMzIyNjI2MGVhNWU2NmY5NDNiNTM4ZWIxMTVmZmU0ZDVlNTM0Y2JlNTgyNjJhNjEwNTI4NjQxNjI5YmMxMmZjNzUiOiI0ZDQwYzZhOTYxMTY4NDQ1YzE2OTFmZWEwMmViZDY5M2NiNGIzZjc0YjAzZDQ1YTM1MGM2NWYwYWFjY2IxMThiIjoiYjA3ZGM1MGU2Y2E3NTQ0ZWQ2ZmRlYmQ4ZjAwZWQ1ZmE5YjFmMjIxM2I0NzdkZTg1NjhlYjkyZGRkYWFiZmUzZiI6ImNiYWM5ODJhYTlmMTgzMGQwZGM3MzczZDk5MDc2NzBmNTYxNjQyYWRiMTg4OGY2NmI0MTUwZDM0ODdiZjBiOGQiOiIyODE0YmU3NjdkNzk3NzhlYmI4MmEwOTY5NzZmMzBkYiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImFkNzFjYWE1MDQyMGQyMTNiMjVmNTU1OGUwZGMxMTcwIjoiNmEzZmQyM2U3ZGM5MzRlNmRlNmViNGNjODQ2YzBkYzNjZjM1ZWE0YmUzZjU2MWMzNDY2NmFlZDFiYmQ2MzMxMDA0YWZiYTVhNWI4M2ZmZjFlN2I4YTk1N2ZiZWU3Y2Q5ZjgxNDIzMjZjNzk2Y2ExMjllYzlmYmFjZjI5NWI4ODIiOiIzMDQyZGQwNDFiODlhYWE2MWYxODVmZGRhNzA2Yzc3NjY3NTE1YzAzN2YyYTg4YzZkNDdmMjNkZGFkYzgyOGFlIjoiOWIxZTNmNzJhYWFiNjZiMjAyZjE3YzVjYzA3NWNmYmE3MjQyODE3YjJiMzhjMTlmZTg5MjRjYTMyNWI4MjZlYSI6Ijg2NjBiNTAzMzI5YWFlYTU2YWNkYjczY2E4Mzc2MzI5OWJhYzBmMzAyNjQ3MDJjYjlkNTJjYmFmM2Q3MWQ2OWQiOiJjMjA0YTMxNzQ3ODRkODJiNjY0ZTlhMWMwYTEzZmZhNiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMTIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjVmZDY2MDZiMDhlN2U2MjVhZjc4ODgxNGJlZjdmMjYzIjoiYmFmODc1MGUwNzE5NGZjNzE3MmM3MzZlMGZkZWEwYTYzMjgxMGQ0NTYwMmRmZjE3Y2UzN2FkZjEwNmQ2NTJmODdlMzFiNmJkMjRkMjE0ODFjODY0NDRkODEwOTU4NjExODY3MmE2ZjkzNzMxYjc0MzhhM2YwZjM5NjQ4YjgzYTMiOiIzYzM3MTkzZDQwZTc5Y2U4ZDU2OWQ4YWE3ZWY4MGFhYmFhMjk0ZjFiNmQ1YTgzNDE4MDVmNWFjNjdhNmFiZjQyIjoiYzcwMzNiM2I2OGJlMTc4ZDEyMDM3OWU3MzY2OTgwZDA3NmM3MzI4MGU2MjlkZDZlODJmNWFmMWFmMjU4OTMxYiI6IjQ1MjIxOGE0MjZhNTg0NjM5NDA3ODVhNjdjYjM0Nzk5YTE3ODdmMzlkMzc2YzllNTZlNGEzZjIyMTU3ODVkYWQiOiI1NjFlMTZhOGIyOTdlNDU4YzRlYzM5YmE0M2YwYjY3ZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjA4ZGVmNzM0OTE0ZWNmNzRiOWVjY2I1ZGZhYTA0NWI4IjoiNjY5N2Y4ODlmY2Y2ZGFlMTY4ODFkYzFlNTQwZTVjMDdmOTQ2MWQ0MDlhY2VlMzE4NDJiMDRmOTNjMDBlZmJiYTY3MGRmYmY2MDQwYzFjMmUyOWFkODkwNjRlYWUyODNmZDZkNDMxODMyZjM1NmU0OTJiYzViMjA0OWYyMjk4OTIiOiJhNmFjODdhZjIxZWZkMzUwODk5MGFhYzUxZDM2MjQzZDQ2MjM3YjM3NTVhMGU2ODY4MGFkYjU5ZTE5ZThhZTIzIjoiMDA1MjE1Mjg3MmIyMTYxNTc3NTQzMWViNTE4ODlhMjY0ZmVkNmNhNDRmYTA0MzZiNzJhNDE5YjkxZjkyNjA0YyI6ImViYWRmNzE1NjVkOWE4Y2MyNjIxNDAzYzM2ZTY0MTFlN2JlZDY3MTkzYTg0M2I5MGNjZjJmN2FhOWYyMjljYTIiOiJjODNmYTVkZjIxMGI2M2Y0YmY0YTBhY2E2MzY1MGFhYiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjY0Mzc4NjJlOTMwNjBkZWYxOTkwMjlmZjIxODJmMWU1IjoiNzE5ZDFhZmNiNmRjOGNhMjZjYmE2YTdjMTBmNTljZjgyMzQ1YjJhMGM2MzFhNzg3OTgxMmQ2ZjJkMjY2M2I0OWY5ZTkyZGFlY2I4MWZmN2MwNzkwMjA1ZDY2Njk0NTI2NDc3ZDZkZTU0YTI2OWY1NDJjYjVlNzdmZTRiYzhkYjMiOiI1Yzk2MWRiMGFjMmVhOGNhZjYyYzlhY2M0NDQ2NWRjZmI0ZDcyMWZjYjJjZDNlMWM3NmNkY2I2MWJmYWE3ZTc1IjoiMjRlYWJkMzkyZDM3NDkzZTMwNjcwNWQwYjI4N2JlMTFhNGQ3MmRkNGI5NTc3YWM0MDk4ZWYwZGFlNjliMDAwMCI6IjllNGYwNWMxYjg1NjEzZTk3OTU4YmMzODYzZTUyMTMzMWIyYmQ3OGZkZjI1ODVmODQ2MDdiZjIyMzhlODI0MTUiOiIyMWFhYWU3NmRjOTdjOWJmN2NmODU4MDU0ODM5NjUzZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiY2Q3YTE5ODFjMWI3MDc5YzFjMzhmNWFlZWU4NmRiMjIyMDdjYjlmYWVkOGM1NzZiMTcyNGNhNzgxN2FhNmFiZmIyNmM0MmEwMTllYjRjMmY0MDY0ZjA1ODdlYTJiOTUyIjoiN2Y4OGMzODA1YWUwODU3YzVjYmIwODVhNWQ2MjU5ZDI2ZmIzYTg4ZGZlNzA4NDE3MmVjOTU5MDY2ZjI2Mjk2YTgwMDk1M2NlMTlhMjQ3ODViNmFjZWY0NTFjNGNlNGMyZGZiNTY1Y2JlMDU3ZjIxYjA1NGEyODYzM2FmYmRkOTciOiIiOiIiOiIiOiI3NmMxY2RiMGI5NWFmMjcxYjUyYWMzYjBjOTI4OTE0NiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMGNjZGFjMmZkNjVhODZiZjhmOGU5ZGRjYWJmZmI5ZDI5YTkzNTEzOWY2MjdjMTY1YTgxNWIyMzEzN2VlZWU5NGNiYjIxYmU4NmFjNTExNzM3OTE3N2QzNzcyOGRiNmZkIjoiNmY2MTcwM2Y5MmQzMTkyY2Q5ODJiMmU1MmE4NjgzZTBkNjI5MThkNTFiMTJlMDg0ZGVhZTA2YzRhOGUwOGVjZmIzZDJkMzBhOTgwYTcwYjA4MzcxMGJjNDVkOWQ0MDc5NjZiNTI4MjljZjM4MTNjYzk3MGI4NTlhYTRjODcxZmUiOiIiOiIiOiIiOiJlNmM3M2UxNTlkNzNjMmJhODk1MGNkNzdhY2IzOWMxMCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZmJiY2M0YWJmZDY3MTI5NmRlM2UwZGNmNDA5YTEzOWUzNWRlYWUxMjZjMTk0MWJmMWFmY2M4ZDNkYTNhMmQ2NWY1NGE2ZDMxN2JiNmQ2ODNhM2E3N2Y2MjY2YjAwN2ZmIjoiYzY2MmVkNzIzZTcwNDE4Nzc1NDJmZGNmNjI5NTMzZDRhNzQzOTNlYjRkYWU0ZjNlYzA2ZDJkMWMwZDM3ZWQ3ZjUxOTYwOWE4NDg1Y2I4ZGViNTc4YWU0Y2JiNDVjOThlZjdmMmYyZTY3NzM2M2U4OWZiMzc0NDI4NmRiNmJmYzEiOiIiOiIiOiIiOiI5ZDkzNGQzNDQxN2M2ZDA4NThmNGEzZmFhY2JlNzU5ZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMWI4MjQ3OTBiNmIyMmIyNDZiY2MxYmNmYmJiNjFhNzYwNDU0NzY2NzJmOTE3YjcyZTc5Y2NhMzU4ZTY1MGViMjllZDQ5ZmIwYTU3MzllMDk3ZjVmNTMzNmQ0NmZjNjE5IjoiYzU3YTU2ODY0ODZlYmFjYzI0MjIyMzZiMTkxMTBjNzU0Nzk1YTg2OWE4MTU3OTAxY2Y3MTMwM2RlMWFkYzZhZjE2YTk1MjE5MGEzOTVkNmMyMGUxNTVlNjkwZjQxOTIyZjZmNzIxZGM4ZTkzZGE4MWFmYjg0NGY2ODcxNGNiYTciOiIiOiIiOiIiOiIxM2U3YmYyM2Q4OGYzYmI1YTUxMDZhODIyN2M4YzQ1NiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMmVhNzg2MWUzNzQyMzJjYjhjZWVjYmJkOWExOGZjMWY2M2MzMWY4MzNmZTM5NGYxZTE5YzhlZjYxMDkyYTU2ZjI4MzQyZmE1YjU5MWY3Yjk1MTU4M2Q1MGMxMmVmMDgxIjoiNmEwODczNjM0MDk0YmU3MDI4Yjg4NWMzNDVjZDUwMTYyOTVlZWM1ZTUyNGYwNjlkZTY1MTBhZThhYzg0M2RiYTJjYzA1YzEwYmFhOGFhZDc1ZWFjOGU4ZDFhODU3MGY0ZDJhM2NmNzE4OTE0YTE5OWRlYjNlZGY4Yzk5M2E4MjIiOiIiOiIiOiIiOiJjMDA4ZjQ2YTI0MmFlMGJhYmFkMTcyNjhjOWUwODM5YSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjNQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMzljYWE5ODZiODJiNTMwM2Q5OGUwN2IyMTFkZGM1Y2U4OWE2NzUwNjA5NWNhZDFhZWVkNjNiOGJmZTBkOWMzZDNjOTA2ZjBjMDVjZmI2YjI2YmFiNGFmN2QwM2M5ZTFhIjoiZjIwNTlmN2ZiNzk3ZThlMjJkZTE0ZGFjNzgzYzU2OTQyYTMzZDA5MmMxYWI2OGE3NjI1MjhhZThkNzRiN2FkMDY5MDY5NGVkZTQ2MmVkYmQ2NTI3NTUwNjc3YjZkMDgwZDgwY2RhYmU1MWM5NjNkNWQ2ODMwYTRhZTA0Yzk5M2YiOiIiOiIiOiIiOiIyMDJkM2IyODcwYmU4ZjI5YjUxOGYyZTNlNTJmMTU2NCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYTRlMjUxMDJjMWIwNGJhZmQ2NmJmZTFjZTRhNGIzNDA3OTdmNzc2ZjU0YTJiM2FmZTM1MWVlZGU0NGU3NWMyOGUzNTI1MTU1ZjgzN2U3OTc0MjY5ZDM5ODA0OGM4M2MzIjoiMGEwM2I3ZDAyNmZhYjM3NzNlOTcyNGRhY2I0MzYxOTc5NTRiNzcwZWNhMzA2MDUzNWYyZjgxNTJhYTEzNjk0MjkxNTMwNGRlZGUxZGUwZjVlODliZDkxZDhlOTI1MzFiNWUzOTM3MzAxMzYyOGZlYTRlZTc2MjJiOTI1NWQxNzkiOiIiOiIiOiIiOiJiZTIxY2FiNjM3MjE4ZGRmZmEzNTEwYzg2MjcxZGI3ZiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjNworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNmRlMzNhMTE2NDI1ZWJmZTAxZjBhMDEyNGFkM2ZhZDM4MmNhMjg0NzNmNWZjNTM4ODU2Mzk3ODhmOWIxYTQ3MGFiNTIzYjY0OWJhZDg3ZTc2ZGVlNzY4ZjZhYmFjYjU1IjoiZDg4MzEyZGE2YWNiZTc5MmQwODcwMTJjMGJmM2M4M2YzNjNmYTZiN2E5ZGQ0NWMzNTAxMDA5ZmI0N2I0Y2ZjZmViN2IzMTM4NjE1NWZlM2I5NjdmNDZlMjg5OGEwMGVjZjUxZWMzOGI2ZTQyMDg1MmJlZjBhMTYwODFkNzc4Y2MiOiIiOiIiOiIiOiIyYzI4NWJmZDc1OGYwMTU2ZTc4MmJiNDQ2N2Y2ODMyYyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjOAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYjhhYjQyZmQzZjYzMDY0MjY2MDJjYWUwYzQ4ZWIwMmZmYTcwNTM5NDAzODk5MDBjMTc4NDZlMWQ5NzI2MjUxNzYyMDk1MzgzZjJlYzM0MDZiMzM4MWQ5NGE2ZDUzZGQ4IjoiNmE3ODczY2NiN2FmYjE0MGU5MjNhY2JlYzgyNTZmYTc4MjMyZjQwYzBjOGJhM2RjYmNmNzA3NGQyNmQ2ZDE4YTdlNzhmZmZkYTMyOGYwOTc3MDZiNmQzNTgwNDhlZTZhNDcyOGM5MmE2ZjYyYjNmMjczMGE3NTNiN2JmNWVjMWYiOiIiOiIiOiIiOiIxMzUwNGEyYjA5NDc0ZjkwZDJlOWVmNDBkMWYyZDBkNSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMDQyYjUyNDQ0NGI5OTAzYzFlY2I4MGFmMjFlZWYwZTg4NDExNTU2MWExNWExYWIyZjlmM2EzMjJlZGNiZjE0MTc0ZjU0ZDMxNTE5NmE2MzI5NDBjMmM2ZjU2NjEyYzA5IjoiMzFiYTVmODAxYWVhYWM3OTBmMjQ4MGZiZDIzNzNhNzZiYTE2ODVlYmViYzVhZTdjZDQ4NDQ3MzNlYzNjZmIxMTI2MzRiMzg5OTEwNGRjYzE2MDUwZTEyMDZmOGIzZmI3ODdkNDNkNTRkZTJjODA0ZmQzZDhlYjk4ZTUxMmJiMDAiOiIiOiIiOiIiOiIwYTA0ODRjMTRlNzg2ODE3OGU2OGQ2ZDVjNWY1N2M1YyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjYzMjc1OGY5MmVmYWNhMzk2MTU4NjIxNzdjMjY3OTA2YWIwNDI0MjMwZDQ4MWVlMGE1YWExYTVmNjY2OTdkMzkxOGQ0YWFiM2YzMTBiNzJhN2YyZDcxYzBhOTZiOTI0NyI6IjQ2ZGM4Mzc2MjA4NzJhNWZmYTY0MjM5OTIxM2I0ZWViZmIyOGNhMDY5YzVlYWFmMmE2MzZmNWJkNjQ3ZGUzNjVjMTE0MDJiMTBlY2Q3NzgwYzU2ZDQ2NGY1NmI2NTNlMTdhZjg1NTBiOTBhNTRhZGIzODE3M2EwYjJmOWUyZWE3IjoiIjoiIjoiIjoiOTA0MzJjZTNmN2I1ODA5NjFhYmVjZGUyNTlhYTVhZjYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzExCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI3YjM4OTExOGFmM2QwZjgzMzZiNDFjZjU4YzJkODEwZjBlNWY5OTQwNzAzZmQ1NmE0NmMxMGEzMTVmYjA5YWFmZDc2NzBjOWU5NmZmYTYxZTBjYjc1MGNiMmFhNmE3ZmUiOiI3NmU5MmU5ZjAwZmM3ZDBjNTI1YzQ4NzM5YThiMzYwMWM1MWY4ZjU5OTYxMTdhN2UwNzQ5N2FmZWUzNjgyOTYzNmU3MTRkYmNiODRjOGY4ZDU3ZTA4NTBhMzYxYTViZGZjMjEwODRhMWMzMGZiNzc5N2NlNjI4MGUwNTczMDliNyI6IiI6IiI6IiI6IjcyNDM5NjQwNTEwODJjMDYxN2UyMDBmY2JiZTdmZjQ1IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZTUwZDM4NDM0ZTlkZmUzNjAxZTdlYTE3NjVkOWZlNzc3ZDQ2N2Q5OTE4OTc0YjU1OTllYzE5ZjQyZDcwNTRiNzBmZjZkYjYzYTM0MDNkMmZkMDkzMzNlZGExN2E1ZTc2IjoiYzlhYTQ3MzkwMTFjNjBmOGU5OWRiMDU4MGIzY2FkNDI2OTg3NGQxZGRhMWM4MWZmYTg3MmYwMTY2OWU4Zjc1MjE1YWFhZDFjY2MzMDFjMTJmOTBjZDI0MGJmOTlhZDQyYmIwNjk2NWFmYjBhYTJiZDNmY2I2ODFjNzEwYWEzNzUiOiIiOiIiOiIiOiIyODQ5OTQ5NWM5NGM2Y2VlYzFiZDQ5NGUzNjRhZDk3YyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjMyNTNjYjA3NGQ2MTBkYjYwMmIwYTBkMjgzNmRmMWYyMGMzZWUxNjJkODBiOTBiMzE2NjBiYjg2ZWYzZjA3ODlmYTg1N2FmNGY0NWE1ODk3YmRkNzNjMjI5NWY4NzliNiI6ImIwNjk2MGE5MmQzMmE5ZTk2NThkOTgwMGRlODdhMzgwMGYzNTk1ZTE3M2ZkYzQ2YmVmMjI5NjYyNjQ5NTM2NzJlMmQ3YzYzOGNjN2IxY2FkYTc0NzAyNjcyNmJhZjZjZWE0YzY0YmE5NTZiZThiYjFkMTgwMTE1OGJlZTVlNWQ0IjoiIjoiIjoiIjoiYjY2MDhkNmU1ZmNiNDU5MWE3MThmOTE0OWI3OWY4ZjEiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzE0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI4M2U0NzMzNTY2ZjkwYzhkNjllNmJjYmU5ZmI1MjUyMWZmM2UyNmY4MDZkOWI3Yjg2ZTkzNDRjY2EwMzA1ZGJmMTA2ZGU4NTUyNDBmMWQzNTQ5MmNjNmQ2NTFiOGI2YWUiOiIwZTAxMDViMTJhZjM1YWM4N2NiMjNjZjljYThmYjZhNDQzMDdjM2RjZGM1YmM4OTBlYjUyNTNmNDAzNGMxNTMzMzkyYTE3NjBjOThiYTMwZDc3NTFhZjkzZGQ4NjVkNGJkNjZmYmJlYjIxNWQ3ZmYyMzliNzAwNTI3MjQ3Nzc1ZCI6IiI6IiI6IiI6IjY4ZDY0ZDE1MjJjMDlhODU5YjliODViNTI4ZDBkOTEyIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImE5NGRhNTVhZmRjNTBjZTUxYzlhM2I4YTRjNDQ4NDQwOGI1MmEyNGE5M2MzNGVhNzFlMWNhNzA1ZWI4MjliYTY1ZGU0ZDRlMDdmYTNkODZiMzc4NDVmZjFjN2Q1ZjZkMiI6ImE1M2UzNzEwMTc0MzkxOTM1OTFlNDc1MDg3YWFkZGQ1YzFjMzg2Y2RjYTBkZGI2OGUwMDJkODBmZGM0MDFhNDdkZDQwZTU5ODdiMjcxNjczMTU2OGQyNzZiZjBjNjcxNTc1NzkwM2QzZGVkZTkxNDY0MmRkZDQ2N2M4NzljODFlIjoiMjBmNDIyZWRmODVjYTE2YTAxY2ZiZTVmOGQ2Yzk0N2ZhZTEyYTg1N2RiMmFhOWJmYzdiMzY1ODE4MDhkMGQ0NiI6IjdmZDgxZmJkMmFiNTFjMTE1ZDgzNGU5OWY2NWNhNTQwMjBlZDM4OGVkNTllZTA3NTkzZmUxMjVlNWQ3M2ZiNzUiOiJjZDJjZmYxNDY5M2U0YzllZmRmZTI2MGRlOTg2MDA0OTMwYmFiMWM2NTA1Nzc3MmE2MjM5MmMzYjc0ZWJjOTBkIjoiNGY3OGJlYjk0ZDk3OGNlOWQwOTdmZWFkZmFmZDM1NWUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZTg2NDlkNGY4NmIzZGU4NWZlMzlmZjA0ZDdhZmU2ZTRkZDAwNzcwOTMxMzMwYjI3ZTk3NWE3YjFlN2I1MjA2ZWUyZjI0N2Q1MDQwMWEzNzJjM2EyNzE5N2ZlYzVkYTQ2IjoiNzhkN2Q2NWM0NTcyMThhNjNlMmViMWViYTI4N2YxMjFjNTQ2NjcyOGFjNGY5NjNhZWFhYmY1OTNiOWQ3MmI2Mzc2ZGFlYTY0MzZlNTU0MTVhZDA5N2RlZTEwYzQwYTFmZjYxZmNhMWMzMGI4YWI1MWVkMTFmZjA5MGQxOWVmOWEiOiJjYzU3YWRjOThiMjU0MDY2NDQwM2FkNmZkNTBjOTA0MmYwYmYwZTBiNTRlZDMzNTg0ZWUxODllMDcyZDBmYjhmIjoiYWIyZjk5ZTJkOTgzYWE4ZGQwNTMzNmEwOTA1ODRmNGY4NGQ0ODVhNDc2M2UwMGNlZDQyZGRkYTcyNDgzY2Q4NCI6IjBlY2Q3NjgwZTJlOWYwMjUwYTQzZTI4ZjJmODkzNmQ3ZWYxNmY0NWQ3OWMwZmEzZjY5ZTRmYWZjZTRhZWIzNjIiOiIwOGUzODYyNTYxMWJiMGZiODQ0ZjQzNDM5NTUwYmQ3YSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI2Yzc5ZTE1NTY4ODliM2MwNzRmYzA4M2ExMjBkNzM3ODRiODg4YzVhY2I4Nzc4OTlmMTdjZTUyZTQyNGI4NDE3OGQxNDQ0NDFhYTlmMzI4YzczMGE5NTFiMDJiMDQ4ZGYiOiJjNzhmZjZiOWZjOTFjYmNlMjQ2YzlmY2MyMzY2ZDVmN2RkNmQ5OWZiMTMyNWQ4OTk3ZjM2ODE5MjMyZDVmY2QxMmNjYWZkY2JlZmQwMTQwOWQ5MGFjZDBlMGZmYjc0MjdjODIwYjJkNzI5ZmU3ZTg0NWU2YTYxNjhmYzFhZjBiNSI6IjYwY2JhMTA4MjZkZTIyYzVlODVkMDYzNTdkZTYzZDZiMmZmMDcxOTY5NGRhZmNhNmFiMzMyODNmM2E0YWFjZGQiOiI4OTQzYzIyZmI2OGIzMDgxMTc5MGE5OWI5Y2JiMDU2ZTFhMmMzMjkxODVhMTk5Yzc2YmE1YWVjZWIyZmNkNzY5IjoiNzA2NzFhNTBlODM4N2JmMjMyOTg5ZDkwNGMxOTIxNWM3NTM1YWQyZDBjNWRlYzMwYTc0NGM4ZDI3MDZiZTZlYyI6ImY2Yjk0YjY3MWNhZThkZmE4Mzg3NzE5YmZkNzVlZTg0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImY1YWI3N2IyYThlMzcwNTQ4Yjg4ZmViZmQ3OTc3MjE0NGNkNWZjOGQ3ODA2MjU4MmFkZGQ0ZmYxZTVjMTAwOTRiMzkwZTY2YjNjNGVmYjA4NzUxMGRlMWI5ZDI1NzAzZiI6IjIxYTIxYzkzMTRiMzdkNGFkZTRhNTBhNWQ4NTk5NWUwYmUwN2UzNThlZDliY2ExOWRhYTg2N2E4ZDQ3ODQ3MTA1ZGNhN2E0MjRmMzJmNzE1YWRiOGZlYTVkM2E0MWNmZTM4ODg3MmE0MmFiMThhYTVjYmNkN2JkZTRhZGMzZjhiIjoiMDIzZDU4MjU2OWE3ZmYxNDA1ZTQ0Y2YwOWNlZWJiOWQzMjU0ZWVmNzIyODZlNGI4N2U2NTc3YThhYjA5MWEwNiI6IjM5NTk3NTE5ODcyZDQ5ZmJkMTg2NzA0MjQxYmExZGMxMGIxZjg0ZjkyOTZmYjYxZDU5N2RiZDY1NWExOGY5OTciOiIzMDkxYzlmZTk2MTA5YjQxZGE2M2FhNWZhMDBkNzE2YjVmYTIwZTk2ZDRmM2UwZjljOTc2NjZhNzA2ZmE1NmYxIjoiMWZiNTcwNThiM2JhODc1MWRmNWE5OWYwMTg3OTg5ODMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZjBiNzllMjkyZDBlMzkzZTc4YjZkNjExN2UwNmQyZTcyNTgyM2ZlMzViZGUxMTQ2NTAyOTY3YTc4ZDk5ZDZiY2E1NjRmMGUyZjMyNDI3MmY5NjhiZTViYWFiNGFlYjI5IjoiMTkyMDU0ZGRkYWMwMjE1N2EzNWViN2Y3NWFlOGViZGI0M2Q2Yjk2OWUzMzk0MmZiMTZmZjA2Y2Q2ZDhhNjAyNTA2YzQxZTRlNzQzYjgyMzBlODIzOWI3MWIzMWIyZDVlMzYxNGUzYTY1ZDc5ZTkxZDViOWZjOWQyYTY2Zjg1NTMiOiJiMTIyNDFlOTBkODBmMTI5MDA0Mjg3YzViOTkxMWE3MGY3MTU5Nzk0ZTZmOWMxMDIzYjNiNjhkYTkyMzdlOGI3IjoiNTllOWMzYzBmOTBlOTFmMjJjMzVhM2JlMGM2NWYxNjE1N2M1NjljN2UzYzc4YTU0NWQ5ODQwZjY0OGM2MDA2OSI6IjA4OWE1OWFmNjlmNDdkZGI0MTkxYmQyNzcyMGJiNGMyOTIxNmY3MzhjNDhjMGUxNGQyYjhhZmQ2OGRlNjNjMTciOiIxNTI4NzE1NmU1NDQ2MTc1MjllN2VlZGU0YWE5YzcwZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM1CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJlM2YzMzg0M2FlY2IzNWQwMTAwMWZmOTJhYjlhMGYxYTU0MzFiYTlkZTNlNGYzMjQ3Y2RhOGM2MmFjYzg2ZjcwNjY0NDhmNjM5ZDhiYThiNTI0OTMzN2Y4YzM1M2JiYmQiOiJlZjA4MWFmMWY2MjQwMGEzZDE5Mzk2OWQ2ODlhNDAyMzQ5OThhZmI2NDZkOTlhN2M0YjljYmJmNDdlNjUwY2RhOTNhOTBlNzU0YTE2ZmZmYTI1ZmMyYTJlZGFiMDk3MjBiNDUyMGM0NzMwOWVjNGY2ZDlmNzZmMDE2MmFmNmNhZSI6ImU3Y2M1NWI3Mjg2MjU0NGE4NjYxYjUwMzRlMTU1ODdiMWU1YTQ1ZWI1ZGM3NDRmNWZhMWRiOWIyNjdmMWMzZmYiOiI4ODJkMzBjODg4ZWI4ZTM0NGIxZDE3MDU3MDc0NjA2ZmUyMzJjZWI0MmViNzEwNTUyNjRlZGU3YmI2MzhmMmEyIjoiOWNlNjVlOTVjMWU3MzVmZTk1MGU1MmMzMjRlNzU1MTQwM2QwZWY3MGFkODY1YmQzMWZlZjFlMjJiMTI5ZmRkNiI6IjIwNWUzYTUzMzY3YzRhNTE4M2JlNzRiYjg3NWZhNzE3IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzYKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImYzMGExOGQ1OTdkODU5MWEyMmRlZTkwOGRlOTVjNWFmNzQ4ODRiMDI1ZjM5YjRmNjcwN2QyODQ0N2Q5ZDBhMzExNGE1N2JjMmQ5ZWVkOGU2MjFlYzc1ZThjZTM4OWExNiI6ImZhZTNkNTU0ZDEyYTE0ZTI5ZGUxYjYyMjkyMmYyNzU1OTU1OWNhMTUxOGM5ZjgwMDM3NWEzN2EyMTJlOGI5YTY1M2NjMzcwMDIyM2U5NDA0ZDViZjc4MWQxNWZjY2Y2MzgwNTBhMTM5NDU5MmNhYmEwMDFjZmM2NWQ2MWVmOTBiIjoiNTQyNDBlZGQ4OTAxNmVkMjdlM2JiMzk3N2EyMDY4MzZmNWVmMWZiYTBmMDAwYWY5NTMzN2Q3OWNhY2E5Y2Y3MSI6IjI1MDYxMWU1MTg1MmQ5MzNmZjFhMTc3YjUwOWMwNWUzMjI4Y2I5ZjQ2ZGZiN2IyNjg0OGE2OGFhZDJjZTQ3NzkiOiJmOGI2MDJkODlmYTFhMGJmYjMxZDBiZDQ5MjQ2YjQ1ODIwMGExYWRiMjhiNjRhNjhmN2MxOTdmMzM1ZDY5NzA2IjoiN2I2M2JmYjMyNWJhZmU3ZDllZjM0MmNkMTRlYTQwYTQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjNworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYzhkYmMzZDM5YmViNjEyODExYzUyZTJiNDZlZjc2ZDJiN2JkNWQzYTkwY2VkZGY5ZmI4NjRmZTZmNDRlMzY2ODdkODgxNThkNjEwMTRlMTkyZjlhM2NkNDc0MzM4ZTEzIjoiOGU2MDExNWI0YWY5YzhlNTYwNjIyMzc5MjUzOWU5YmE4N2U5ZWY0NmNkMTZmY2MwOTA0NmRiMWVmOGQzYzAzNjI0MWNhZTVkNjExNDE3MTE4MThlOWU4NjFkYmQ4MzM2MzIwNjllYmY1YWYxYmQ2ZDRlNTEzZjA1OWFiMWVmZDMiOiI5YjU2ZWJhMDgzODQ1N2Y3MzZmYzVlZmEyY2ZiZTY5ODkwODM0MGYwN2Q0NjgwZTI3OWQyMWRkNTMwZmRjOGM4IjoiNjJjNDdlY2U0NjlhN2E0MDllNGIyYjc2ZDFjNzkzYWFmMTE2NTRlMTc3Y2M4YmY2M2ZhZmYzZTZjNWE1Mzk1YyI6IjQyNTE1OTcwMTNkMGM5NDljNTNiYmQ5NDU0NzdiNzhhYTkxYmFhOTVmMWZmNzU3YzNhMDM5Y2NjNGUxZjQ3ODkiOiJhZjJmMzcxNjA5NDBmMGNjMjdkMTQ0YTA0M2RkZjc5YiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM4CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJhMzdmOWVkNmM0ZThmNzRmZjE2MDQ2YjA2NzhlZjdiZDI0ZmNkY2EyNDdiNzcxZWExY2UxZmQ0OGUzZjVkMjA2N2UzOGFhZjY0ZWM1OWYxZjQ5ZDk2ZmE4NWU2MGVmMDMiOiI5NWRhOTFmNDE4NWIyNTQzMjJlZjBmYzg1MjQ3M2E5YjllNGMyNzRiMjQyZGVkOGE0ZWFlNmYxZTJiYWRkZTA2NjRjZjU3ZjIxMjhhYTNkYzgzZTQzNmY3ZTgwOTI4YTAxZDkzYmYyNTAxMWVlZGYwMTkwZDBiZjM2MTljZDU1NSI6ImI0YTIyZjU1OThmNzlkMzRmMGI5NjAwNzYzYzA4MWIwMjAwYmE0ODlkYTcwMjhhZDAyODM4Mjg1NDVjNmQ1OTQiOiJmYTNlZGMwOTYyYjIwYTlkOWUxZDBhZmNhZDkwN2M4MDk3YzIxZDdhNjVjMGU0N2M2M2Q2NWNlYTk0YmY0M2JkIjoiNDliYTc5MWEyMjdlOWUzOTFlMDQyMjVhZDY3ZjQzZjY0NzU0ZGFhYzBiMGJiNGM2ZGI3NzMyMDk0MzIzMWVjMyI6IjMyZjMxM2RlZDIyNTI4OTc5M2MxNGE3MWQxZDMyYzlmIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzkKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6Ijg3Zjg1YjljMTllYmExZDk1M2I2NjEzY2Y1NTVjMjFiYzc0NDI4ZDlhOGZlZTE1ZTZjZDcxN2UyNDA1MDZmM2U4MDg2MDQyMzk3M2E2NmM2MTgyMGQ0Y2UxYzZiYjc3ZCI6ImYyMmRkMzUxNzM1MDE3NmUzNWUxYjdlY2M4YzAwYmVhNDc0N2YwYWMxN2JkYTFiMWRkZjhjZGY3YmU1M2ZmOGMzMjYyNjgzNjZlODljZjNiMDIzYTk2NDYxNzdhMGRjY2E5MDJmMGM5OGJmMzg0MGM5Y2JkZjVjMDQ5NGJlZTNjIjoiNjExY2FhMDBmOTNkNDQ1NmZkMmFiYjkwZGU0ZGJjZDkzNGFmYmYxYTU2YzJjNDYzM2I3MDRjOTk4ZjY0OTk2MCI6ImNiYTY4MzY3ZGMyZmM5MjI1MGUyM2UyYjFhNTQ3ZmIzMjMxYjJiZWFhYjVlNWEyZWUzOWM1Yzc0YzliYWI1ZjUiOiJmNDg5NWM5NjUzYjQ0YTk2MTUyYjg5M2I3Yzk0ZGI4MDA1N2ZiNjc4MjRkNjFjNWM0MTg2YjlkOGYxNmQzZDk4IjoiYTA1ZGU2NTMxYTFhYTFiMmJhM2ZhZWE4YWQ2YWMyMDkiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6Ijk2NzBkZWI3MDdjYWFiYzg4OGEzYjBkZjcyNzA5NDI5MzQ3MzJlMDJiZTcyOGE0YmVkYjVmYzljYTRkNjc1YjJmM2I0N2M3MTMyYzM2NGNlNjI5MmNlZjdjMTliNjBjNyI6ImJiYTM0ZTZmNGVlMjdlNWQ0ZTg4NWU1OWY4YmJiMGRjNzM1M2E4OTEyZTY2NjM3ZDc1MTVhNjZlNTM5OGQ5YThjYmQzMjhmZWQzMmY3MWJkZDM0YzczY2RmOTdlMGQyMTFiZTZkYWJmYjAxNDRlMTAxMWZkMTM2Y2YwMWVhNGU0IjoiOWY1NWRhMzZiYWJkNmVhNDIwODJmNWY1ZDQzMzBmMDIzNDQwYmI4NjRmOGFkNTQ5OGEyOWNmODk3NTdlYWVhYiI6IjgwMTNhMzA5MDU4YzkxYzgwZjRkOTY2Zjk4YmNlMWQ0MjkxMDAzYWQ1NDdlOTE1Nzc3YTNmY2U4YWUyZWFmNzciOiJjODMxMDYyNzJkNDRlODMyZTk0YzcwOTZjOWMxMWY2MzQyZTEyZWMwNmQ1ZGIzMzY0MjRhZjczZDEyNDUxNDA2IjoiYmM4ZDRkMDA2MDk2NjJjMTE2M2RjYTkzMDkwMTgyMWQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjZkOTg0YzhhYjkyM2E3ZTExODQ0N2ZkNTNhZDI4N2I4ZjAxZDFlNjExMmNmZjEyYmZiMzM4ZWNkM2VkMTZiYWZkZDYzNDY3N2M2MDBiZGQ2OGY4NTJhOTQ2ZjQ1YzNkOSI6ImVkMGU1MjRlZDI5OTBlZjM0OGRiYjE1YjNmOTY0YjEyYWQzMTA5OTc4ZDY5NTJhZTE5M2IyMWU5NDUxMGE0NzQwNjkyNjYyMDc5OGU3MWEwZmZjYmRkMmU1NGVjNDU1MDlkNzg0YThiZmM5ZDU5Y2I3MzNmOWYxMWZjNDc0YjVlIjoiMGEzYTMyMjYwZDA0ZGQ3YTgyZmIwODczZWNhZTdkYjVlNWE0YjZhNTFiMDlmNGJmOGE5ODllMWFmYWNiZGEzYiI6IjNjYmNhYmI4M2FhYjVhM2U1NDgzNmJiZjEyZDNhNzg2MmExOGUyZGZmZWViOGJkZDU3NzA5MzZkNjFmZDgzOWEiOiJmNjNiMzBhM2VmYzAyNzNlYmEwM2JmM2NmOTBiMWU0YWMyMGIwMGU1M2EzMTdkYmY3N2IwZmU3MDk2MGU3YzYwIjoiYWI5YWYxNDRlOGZhZDZhOTc4YTYzNmFkODRlMDQ2OWUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMTIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjJjNTk1MjBkNmY4Y2U5NDZkY2M1MjIyZjRmYzgwYmE4M2YzOGRmOWRjZTI4NjE0MTJlZWJiMTYxNDI0NTMzMTYyNmU3ZmI5M2VlZGJhZDMzYTEyZTk0YzI3NmRlZmYwYSI6IjI4ODJkNGEzMGIyMjY1OWI4N2FkMmQ3MWRiMWQ3Y2YwOTNmZmNhODAwNzlhNGVmMjE2NjBkZTkyMjM5NDA5NjlhZmVjNzBiMDM4NGE1NGIxZGU5YmNjYTZiNDNmYjE4MmU1OGQ4ZGZjYWQ4MmIwZGY5OWE4OTI5MjAxNDc2YWU5IjoiZDNjMTdhMmQ5YzVkYTA1MWIyZDE4MjUxMjA4MTRlYWVlMDdkZmNhNjVhYjRkZjAxMTk1YzhiMWZjZWEwZWQ0MSI6ImRjYzM5NTU1Yjg3ZjMxOTczYWUwODVmODNlYWY0OTc0NDFkMjJhYjZkODdiNjllNDcyOTZiMGFiNTE3MzM2ODciOiI5YThhMWI0Y2NmODIzMGUzZDNhMWJlNzllNjBhZTA2YzM5M2ZlNmIxY2EyNDUyODE4MjUzMTc0NjhjYTExNGM3IjoiZmJhNTIzYTA5YzU4N2VjYWQ0ZTdlN2ZkODFlNWNhMzkiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjFjMTIwN2Y1MGI2NDVhYWVkNWMxNmZlMzZmNmFhZTgzYWY0OTI0ZTZiOThhN2UyYTI1MzNhNTg0YzFiYWMxMjNmOGI2ZjBlMDUxMDllMDEzMjk1MGFlOTdiMzg5MDAxYSI6IjhhZTlhNTkwM2RhMzJhMzhiN2M2ZmVkOTJkZDBjNmEwMzVjYTUxMDRhMzUyOGQ3MWEzZWFjYzJmMTY4MTM3OTcyNDk5MWEwMDUzZThkYWM2NWUzNWYzZGVlZTA0MzVlOTlmODYzNjQ1NzdjOGViZGJhMzIxODcyOTczZGM5NzkwIjoiNTY4YmZlZTY4MWQ3ZjliZTIzYTE3NWEzY2JmNDQxYjUxMzgyOWE5Y2JkZjA3MDZjMTQ1ZmRjZDc4MDNjZTA5OSI6ImUzMmNiNWZlYzcyYzA2ODg5NGFhZWFiZmMxYjhkNWUwZGUwYjVhY2RmMjg3YTgyZTEzMGE0NmU4NDY3NzBkYzIiOiJkNDQxOGMzMzM2ODdhMWMxNWNhYzdkNDAyMWY3ZDg4MjNhMTE0YmI5OGY5MmM4YTZkY2NjNTlmZjhhZDUxYzFmIjoiMTk0ZTMwMTgzNzdjZWY3MTYxMDc5NDAwNmI5NWRlZjUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjI4MjU0MDE0YzVkNmViZjliZDllNWYzOTQ2ZmM5OGU1NWZlMzUxZGVlZThmYzcwMzMzZTRmMjBmMWY3NzE5YTUyMmIzZWE5YTQ0MjRhZmU2ODIwOGQxY2M2YzEyOGM0NyI6Ijk4YTBkYjk4NTU0NGMzMzk5MGFlZTBmNjk2NTVkYmE3MTk4ZTY3MjBjZTU2ZmY5ZDQ2NjJlMjZmMGM2YjRlZTdhYjU5OTkzMmMwNTI5NWY2YzVhNDAxMTA4NWM1YjJjODYxYTVhOGFlNGY1NzJjZTYxNGZmMmRhZmMwZmRkYjM0IjoiNjQyMTVjYmUzODRmMWY0Y2Y1NDgwNzhmZmQ1MWY5MWVlZTlhOGJhZTVhYWNkZDE5Y2ExNmJjYWFmMzU0ZjhhZCI6IjJlMjFkZjYzOGRhYmUyNGFlYmY2MmQ5N2UyNWY3MDFmNzgxZDEyZDAwNjRmMmY1YTRhNDRkMzIwYzkwYjcyNjAiOiI3ZjkzNjI3NGY3NGE0NjZjYmY2OWRiZmU0NmRiNzlmM2MzNDkzNzdkZjY4M2NiNDYxZjJkYTNiODQyYWQ0MzhlIjoiMjVjNDY5Y2M4NDA3YjgyZjQyZTM0ZjExZGIzZDg0NjIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJlMjZjOGExM2RhZTVjMmRhODEwMjNmMjdhYjEwYjg3OCI6ImZlYTEwNGY5MGM1ODgxZGY3YWQxYzg2MzMwN2JhZDIyYzk4NzcwZWNkMGQ3MTc1MTNhMjgwNzY4MjU4MmUzZTE4ZTgxZDc5MzVjOGE3YmFjZGRkNTE3NmU3Y2E0OTExYjlmOGY1YjFkOWMzNDkxNTJmYTIxNTM5M2ViMDA2Mzg0IjoiIjoiIjoiIjoiZmQ4NzMzN2MzMDVhMGE4ZWY4ZWVmNzk3NjAxNzMyYzIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI4ZDdkZGEyMGE5ODA3ODA0YmZjMzdiZDc0NzJkM2IwYyI6IjFkNzIzY2JjMmZmMmMxMTUxNjBlNzI0MDM0MGFkYmYzMWM3MTc2OTZkMGZkZmVjZjNlYzIxMTUwZmNhMDBjZGU0NzdkMzdlMmFiYmUzMmYzOTlhNTA1Yjc0ZDgyZTUwMmZiZmY5NGNlY2FjODdlODcxMjdkMTM5N2QzZDc2NTMyIjoiIjoiIjoiIjoiNzIyMTc2MWI5MTNiMWY1MDEyNWFiY2E2YzNiMmYyMjkiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJjMDJlM2I2ZmQ0ZmVhN2VjNTE3YTIzMmY0OGFhYThjYiI6IjA4MjBmYzIxY2VjYmE2YjJmZTA1M2EyNjlhMzRlNmE3NjM3ZGVkYWY1NWVmNDZkMjY2ZjY3MmNhN2NmZDljYzIxY2Q4MDdlMmI3ZjZhMWM2NDBiNGYwNTk5NTJhZTZkYTcyODJjNWMzMjk1OWZlZDM5ZjczNGE1ZTg4YTQwOGQyIjoiIjoiIjoiIjoiNjY3ZDRkYmVmZTkzOGQ2YTY2MjQ0MGExNzk2NWEzMzQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI5YWVlMDMyNmY5YjE2Zjg4YTQxMTRlOGQ0OWI4ZTI4MiI6ImVmMGFhZTNmOWM0MjUyNTMyMDUyMTVlNWJmMGFkNzBmMTQxYWQ4Y2M3MmEzMzIyNDdjZmU5ODk2MDFjYTRmYzUyYmE0OGI4MmRiNGQwMGZlMWYyNzk5NzliNWFlZDFhZTJlYzJiMDJkMmM5MjFlZTJkOWNiODllM2E5MDBiOTdkIjoiIjoiIjoiIjoiNjUxYWQ3ODNmZTNkZWY4MGE4NDU2NTUyZTQwNWI5OGQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxZTdhNDk2MWQxY2QyZmQzMGY1NzFiOTJhNzYzYzJjNSI6ImE5MjYyZWQ1YjU0ODgwY2M4ZWNkNDExOWNjZTlhZmUzZGU4ODc1ZDQwM2Y3Y2E2YjhlZDhjODg1NTk0NzBiMjllNjQ0ZmRkZDgzZTEyN2M1ZjkzOGJjOGE0MjVkYjE2OWMzM2M1YzJkMGIwYzUxMzNjOGY4N2JiYzBiMGE3ZDc5IjoiIjoiIjoiIjoiMTEyNGM1MDljYTUyNjkzOTc3Y2Y0NjFiMGYwYTBkYTkiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM1CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJhZTBiMGQyZTg0ZjQ4YzYzMmYwMzEzNTZjZGVhNjBhYyI6IjU1NGNmNmZhZDFjMzc2YWQ2MTQ4Y2Q0MGI1MzEwNWMxNmUyZjVkZDVmYTU2NDg2NWIyNmZhYThjMzE4MTUwYmZiMjI5NGU3MTE3MzVkZjVlYjg2ZmY0YjRlNzc4NTMxNzkzYmFkNDI0MDNkOTNhODBkMDVjNTQyMTIyOWE1M2RhIjoiIjoiIjoiIjoiMTIxMmU1ZDMwNzBiMWNkZjUyYzAyMTc4NjY0ODFjNTgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM2CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxNmI4Yzc0OTVkNDNjZDJmZjVmNjVhZDJhYjQ4ZWNlZiI6IjdjZmZlMmJlZjBkNDIzNzRmNzI2M2EzODZiNjdmYmE5OTFlNTljZWZkNzM1OTBjYmNkZTNhNGRjNjM1YTVhMzI4ZjFhOGU1ZWRkM2FkYTc1ODU0ZjI1MWVlOWYyZGU2Y2QyNDdmNjRjNmNhNGY2Yzk4MzgwNWFhMGZlOWQzMTA2IjoiIjoiIjoiIjoiZDM4NjlhOWM1MDA0YjhhNmFlOGQ4ZjBmNDYxYjYwMmIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM3CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJhMmQ1ZWZmNmY3M2Y5OGU1YjA0YzAxOTY3ZGZmYTY5YiI6IjU5NzU5YmI5MWIzYzRmZWIxOGMwZjA4NjI2OWVjNTJlMDk3YjY3Njk4ZjRkZmU5MWViZThiZWY4NTFjYWEzNWNhZGIzZmQyMmQxMzA5ZjEzNTEwZTEyNTI4NTZjNzEzOTRhOGUyMTBmZGJmM2M3YWFlNzk5ODg2NWY5OGU4NzQ0IjoiIjoiIjoiIjoiYTFmOTliZDk1MjIzNDJlOTYzYWYyZWM4ZWVkMjVjMDgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM4CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJlYTFmNDdmZTVlMjgxMTM2NzA2NDE5ZWE5YjY1Mjk2NyI6IjBlYzdjNjE3Zjg1YmVjNzQwNDQxMTEwMjBjOTc3YmUzMmFiODA1MGIzMjZlYmMwMzcxNWJiYmZmYTVhMzQ2MjJmMjI2NGQ0YjUxNDFiNzg4MzI4MWMyMWVhOTE5ODExNTVhNjRmYjdiOTAyZTY3NGU5YTQxYThhODZjMzIwNTJiIjoiIjoiIjoiIjoiZGFmNzViODI4OGZjNjY4MDJiMjNhZjVmZDA0YTk0MzQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM5CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI2ZjA3MmM2ODFhODJjMDBkY2QwZDlkZDViN2ZmYTJhZiI6ImNkN2NlOTBmMDE0MWU4MGY2YmQ2ZmYzZDk4MWQ4YTBhODc3ZDBkZGFlN2M5OGY5MDkxNzYzYjU5NDZmYzM4YjY0YzFlZjY5ODQ4NTAwN2Q1MzI1MWFkMjc4ZGFmNWQ0YWU5NGE3MjVkNjE3ZmM5YTQ1YTkxOWE5ZTc4NWE5ODQ5IjoiIjoiIjoiIjoiMzljMDE0NGYyOGM1YTQ5MGVmZjYyMjFiNjIzODQ2MDIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiOWQ3MzA2NTUzNjZlMmFhODllZTA5MzMyYmQwYTUwNTMiOiI4NTQ3NjZlODQyZWIxNjVhMzE1NTFmOTYwMDgzNTRiY2ExNjI4YTk1MjBkMjljM2NjNGY2YTQxMDY4YmY3NmQ4MDU0Yjc1YjdkNjlmNTg2NTI2NmMzMTBiNWU5ZjAyOTBhZjM3YzVkOTQ1MzVjYjVkYzljODU0ZWExY2IzNmViNyI6IiI6IiI6IiI6ImJhYTJhM2VkNmZkYzA0OWQwZjE1ODY5M2RiOGM3MGVmIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjMzNjM4ODE2MTFiZmQ1ZDE2ODE0MzYwZTgzZDg1NDRmIjoiNmFiZmFiMTRjYmYyMjJkNTUzZDBlOTMwYTM4OTQxZjZmMjcxYjQ4OTQzZWE2ZjY5ZTc5NmUzMDEzNWJjOWViMzAyMDRiNzdhYjQxNmFjMDY2ZGEwYTY0OWM4NTU4ZTVhMGVhYzYyZjU0ZjJmNmU2NmMyMDdjYWI0NjFjNzE1MTAiOiIiOiIiOiIiOiI1YmU0MTBjZTU0Mjg4ZTg4MWFjZDNlNTY2OTY0ZGY3OCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzEyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxNGU1ODkwNjU0MjM1MjhmZjg0YTFmODk1MDdhYjUxOSI6IjBkMmU0NDZjYWQzODdhOTYyZmYyMjE3YzdjZjQ4MjZkY2FiYjk5N2FiN2Y3NGY2NGFhMThmYmNiNjkxNTE5OTNmMjYzOTI1YWU3MWY5ZGZkZmYxMjJiYjYxODAyNDgwZjI4MDM5MzBlZmNlMDFhM2YzN2M5NzEwMTg5M2MxNDBmIjoiIjoiIjoiIjoiZmMyZDNkZjZjOWFhZTY4ZmIwMWQ4MzgyZmNkODIxMDQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiOTc0YzVhZTkwMzQ3ZDgzOTQ3NWYwZjk5NGYyYmYwMWQiOiJhYTA0ZDlmYzU2MzQ5ZmRkMzFkODY4ZTllZmMyOTM4ZjkxMDRjMDI5MWU1NWFjMGFhMGMyNGVjNDYwOTczMWI4ZTBhYzA0YjQyMTgwYmRlMWFmNmFkMWIyNmZhZmY4YTZkZTYwYThhNGE4MjhjZDZmODc1OGM1NGI2MDM3YTBlZSI6IiI6IiI6IiI6IjNjYWVjNDgyMDE1MDAzNjQzZDVhMzE5YTJhZjQ4ZmI0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImIzYTExMDU4N2ExNmMxZWFmZTUxMTI4YTY2ODE2ZWNmIjoiMjAzYmJhNjQ1ZmI1Y2NlZTMzODNjZjQwMmUwNGM3MTNiN2E2YjZjY2E4YjE1NGU4Mjc1MjBkYWFjNGVhM2EwMjQ3YmJkYzNiMmNkODUzZTE3MDU4N2QyMmM3MGZiOTZjMzIwZWE3MWNiODBjMDQ4MjYzMTZjNzMxN2M3OTdiOGEiOiIiOiIiOiIiOiI5YWY0ZjY3YTMwYTQzNDZlMGNmY2Y1MWM0NWZkMjU4OSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNTU1NDYwNjhjZDUyNGM1MTQ5NmM1ZmM5NjIyYjY0YzYiOiI5NTFlNzEyZDA1NzAyODE1ODgzMWNhOGM3NGQ0YWUzMDNjNmU0NjQxYzM0NGExYzgwMjkyMjYwYmRkOWQ4ZTJmNWI5NzYwNjM3MGU5NTkwM2UzMTI0NjU5ZGUzZTNmNmUwMjFjZDljY2M4NmFhNGE2MTljMGU5NGIyYTlhYTNjYyI6IjJkNmRlODY2MWM3YTMwYTBjYTZhMjBjMTNjNGMwNDQyMWJhMjAwZmJlZjRmNmViNDk5YzE3YWVlMTU2MWZhZjEiOiI0MTc5N2IyZWVhY2NiOGEwMDI1MzhkMzQ4MGNiMGI3NjA2MGVlNWJhOWQ3ZTRhMmJiMmIyMDExNTRmNjFjOTc1IjoiYjc0NDk4MGJiMDM3N2UxNzZiMDdmNDhlNzk5NGZmZmQ3YjBkOGE1MzllMWYwMmE1NTM1ZDJmNDA1MWYwNTRmMyI6IjY1YjlmNzM4MmVkNTc4YWYwM2VmYTIwMDhkYmRkNTZmIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJhMGM5MjU2NTY0MGEzMzE1Y2FjOGRhNmQwNDU4ZmIwNyI6IjZlOWIzMTc1NWMxZjQ1ZGY3ZDY4NWY4NjA0NGFiM2JjMjU0MzNhM2ZmMDhhYjVkZTcxNTRlMDZiMDg2N2Y0ZTM1MzFlZDJlMmExNWFiNjNjNjExZmMyODk0MjQwZmRhYzFkMzI5MmQxYjM2ZGE4N2NhYTIwODBkMWM0MWJjZjI0IjoiYzZjNzQ2OTBiZGVlMjYyODhkMmY4N2EwNjQzNWQ2NjQ0MzEyMDZiMjNiMjRmNDI2ZTg0N2ZiODkyZDQwZDVkNSI6IjRlN2RjMWFkYmM4YmMxNmJhN2I1ODRjMThhMGQ3ZTQzODNjNDcwYmZmMmYzMjBhZjU0YWQ1YWRlNWY0MzI2NWIiOiJjNmZiOGVlMTk0YTMzOTcyNmY1MDUxYjkxOTI1YzZhMjE0MDc5YTY2MWVjNzgzNThlOThmYzRmNDFlOGM0NzI0IjoiYzNmODQ5ZWU3ZDg3MjkxMzAxZTExYjQ2N2ZhMjE2MmYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjYzZTE0M2JkNmE4NzA2NWEwMGVlYTkzMDU5M2Y5YjI5IjoiNjJjMmM3OTBjYjU2NTE4ZWQyZDhkNjU5NTJiYmQ0YWI4NWE1NjQ2MzQ5NWM5NDBiOTRmNDAzYTkzMzM4YmRjOTYxMjlmZWVhOTMzNWIxYTNlMGFkYTdjZjRjMjA3ZjQ3MzIwMTNiYzZhNTJkYjQxNDA3YmY1ZDZmZTkxODNiM2MiOiI3YjRlOWZmMGM4ZjhjOTBmOGIzMjRjNzE4OTIyNmQzYWRjY2Q3OWRmMmQwYzIyYjUyZmIzMWRiYjVkZmVmYmE2IjoiNDllMWFlY2YyYjk2YTM2NjMyNWRjMTg5MmMwMTZhNTUzNWRkMjQ4MDM2MGEzODJlOWNjNzhiZjc1YjJiYmEzNyI6ImY0Y2UxZDI3ZTc1OWYzYmE0YTU2YWFhYjcxMzY0MmI0YzU2ODEwYzk5OTVmYmZjMDRjZTI4NTQyOWY5NWE4ZjQiOiI1MTMxMTFhYmFhZTMwNjllNTk5YjU2ZjdlNWZiOTFkMSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiOThkYzE2ZTk1Zjk3YjViOWQ4Mjg3ODc1Nzc0ZDlkMTkiOiIyZmFiNGE2MjllNGIyMWYyNzQ4OGEwYzllZDM2ZmM4ZTc1YmVlMGMzODYzNDZjNmVjNTlhNmYwNDU5NzVlMjk4MTg0NDBhNjYzOGViM2I5ZTk1MmUxOWRmODJkNmRjN2I4YjljMTg1MzBhZWY3NjNkMDcwOWIzYjU1NDMzZGRjNiI6IjJlOWQyZjUyYTU1ZGYwNWZiOGI5NTQ5OTQ3Zjg2OTBjOWNlNDEwMjY4ZDFkM2FhN2Q2OWU2M2NiYjI4ZTRlYjgiOiI1N2VjZGFkNzFkNzA5ZGNkYjFlYmE2Y2YzNmUwZWNmMDRhYWNjZDc1MjdjYTQ0YzZmOTY3Njg5NjgwMjcyNzRmIjoiN2IyZGEzZDFhZTI1MmE3MWJjY2JiMzE4ZTBlZWM5NTQ5M2EyMzZmMGRlYzk3ZjI2MDBkZTlmMDc0MzAzMDUyOSI6Ijg0MTg4MmU0ZDkzNDZiZWEzMmIxMjE2ZWViYzA2YWFjIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI1ZGJhYzVjMzEzNTI3ZDRkMGU1Y2E5YjZmNTU5NmVkNyI6ImMwMGIyOGM3OGRhNGY5Y2UxNTk3NDE0MzdmZTdmOTBlNGUyM2VjZDAxY2QyOTJmMTk3MjAyZGVjYmJjODIzZDljZTQ2YjgxOTFjMTFlOGY4ZDAwN2QzOGUyZWNkOTNiOGJkOWJiYWQ1ODEyYWFmNTQ3ZGRmNGM3YTY3MzhiNzc3IjoiNDYwYzU0ZjRjM2ZlNDlkOWIyNWIwNjlmZjY2NjQ1MTdlZDNiMjM0ODkwMTc1YTU5Y2RlNWMzYmMyMzBjMGE5ZSI6ImJmNTE4N2YxZjU1YWU2NzExYzJiYzE4ODQzMjQ0OTBiZjJkMjlkMjllOTVjYWQ3YTFjMjk1MDQ1ZWVkNWEzMTAiOiIyOGZkODI3N2RjYjgwNzc0MWQ0ZDVjYjI1NWE4ZDlhMzJlZjU2YTg4MGNjZjJiM2RjY2E1NDY0NWJkNmYxMDEzIjoiYjQ4OGY1YzEzYmIwMTdiMGQ5ZGUyMDkyZDU3N2M3NmUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjI1NGQ1ZjUwNDQ0MTVjNjk0YTg5MjQ5YjBiNmUxYTJjIjoiNGMxY2M5ZWJlN2EwM2NkZTMxODYwNjM3ZDgyMjJmYWVlZmE5Y2JmNzg5ZmFiNjJlOTlhOThkODMwODRmZWYyOWVhZmNmNzE3N2Q2MmQ1NTQzNWExYWNiNzdlN2E2MWFkODZjNDdkMTk1MGI4NjgzZTE2N2ZlM2VjZTNmOGM5ZTgiOiI3MWFmNTg0NjU3MTYwZjBmMGI4MTc0MGVmOTMwMTdhMzdjMTc0YmVlNWEwMmM4OTY3ZjA4N2ZkYmZkMzNiZmRlIjoiOTZlODUyMmY2ZWQ4ZThhOTc3MmZmYjE5ZTk0MTZhMWM2MjkzYWQ2ZDFlY2QzMTc5NzJlMmY2MjU4ZDdkNjhkZCI6IjNhYWE1ZTRkNmFmNzkwNTU3NDIxNTBlNjMwYzVlM2E0NjI4OGUyMTZkNjYwNzc5M2MwMjFkNjcwNTM0OWY5NmEiOiI2NjYyOWFmNGEwZTkwNTUwYjliZDM4MTEyNDNkNmI4NiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYjQ2ZmNlZWQwZmNjMjk2NjU4MTVjYzk0NTk5NzE5MTMiOiJmZjYyZDUyYWVkNTVkOGU5NjYwNDRmN2Y3YzUwMTNiNDkxNTE5N2M3MzY2OGUwMWI0NDg3YzMyNDNiYmY1ZjkyNDhhNGZkZDZlZjBmNjNiODdmYzhkMWM1ZDUxNGZmMjQzMzE5YjJmYmRmYTQ3NGQ1ZjgzYjkzNTM5OTY1NWUxNSI6Ijk5NGQ2YjUzOTNmYmYwMzUxZjBiY2ZiNDhlMWU3NjNiMzc3YjczMmM3M2JmOGUyOGRlYzcyMGEyY2FkY2I4YTUiOiIxMThiYjhjN2E0M2I5YzMwYWZhZjljZTRkYjNlNmE2MGEzZjlkMDFjMzBiOWFiMzU3MjY2Mjk1NTgwOGI0MWU0IjoiYmI0N2U0NDMwOTBhZmMzMmVlMzQ4NzNiZDEwNmJmODY3NjUwYWRmNWI1ZDkwYTJlN2QwZTU4ZWQwYWU4M2U4YSI6IjE4NjVmZWU2MDI0ZGI1MTA2OTA3MjVmMTZiOTM4NDg3IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM3CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJlMWE1ZGQzMmZjN2NlZmIyODFkNWQ2Y2UzMjAwZjRjYSI6ImJmMWJhNDE2NjAwN2I1M2ZjYWVlNDFmOWM1NDc3MWM4YTBiMzA5YTUyZWE3ODk0YTAwNTc4M2MxZTNlNDNlMmViOTg3MWQ3OTA5YTFjMzU2Nzk1M2FhYmRmNzVlMzhjOGY1NTc4YzUxYTY5MmQ4ODM3NTUxMDJhMGM4MmM3YzEyIjoiMzJlOTkyMmJkNzgwMzAzODI4MDkxYTE0MDI3NGQwNGY4NzljZDgyMWYzNTJiZDE4YmNhYTQ5ZmZlZjg0MDAxMCI6IjAxODMwZGRkMmYwZTMyM2M5MDgzMGJlZGRlZGYxNDgwZTZjMjNiMGQ5OWMyMjAxODcxZjE4Y2MzMDhhYjMxMzkiOiJmMzZkNzkyZGJkZTc2MDliOGJmNDcyNGQ3ZDcxMzYyODQwYjMwOWM1ZjI5NjFlMjUzN2M4YjU5NzlhNTY5YWU4IjoiNzA4MGU4Mzc5YTQzYzJlMjhlMDdkMGM3ZWQ5NzA1YTgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImQxYjdiZTg1N2E0MjJiNDI1YWU2MmM2MWU5MGExOTJhIjoiNmFjMzRjNGNlMjJiNjQ0NjMyMjgzYWIxM2UyOTRkZjIwOTNlOTM5ZDMyNDExMzQwYjA0NmMyNmZjYzQ0OWQwZmQ2ZDE0MTMyYzcyMDVkZjMwM2RiYjY2MzE5MGU2ZTg2YWQxMmUxNGUxNDViNjYwMzMwODI0MWYzOGQ5NGViNWQiOiJhYWNmZTg1NTNkNWZmZWY2YWJjM2ZkOGY5NGQ3OTZjYWUyMDc5ZmYwNGY3YWIxYjQxOTgyMDAzZjAyNDI3YzdhIjoiMDFkMmQxYmMyOWQ2YTZiNTJiYjI5YmQ2NjUyYmU3NzIwOTZjYTIzYzgzOGM0MDczMGQ1YjRhNGY4ZjczNWRhYSI6IjI3YWY3MjhlZTA3ZDNmNTkwMmY0ZTU2NDUzYjZhOWZlYjMwOGVmMTQ3OTVlYjU2MzBiMjY1MWRlYmRkMzZkNWIiOiJiMDNmYmNkMDNmYTFjYzY5ZGIwYTRlMzQ5MmE1MmJhZCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYTJjNDlhYTZmM2Y5MmUzNjI2NmJmMjY3YWY1ODc3ZWQiOiI1Njg0YzNlYjk5MzE0MTI3MDc4NDg0OTU5MzE0ZDUyYjNiYzUwY2IzNjE1YzBlZWY2YjQ4ODUwZDk4YWVlMDRjNTI4YjA2OTNiZTEzZWQxYmI0MDQwZThlOTZjYjEzYzMxNjE0M2YwODE1Y2Q2OGQxYmI3OTMxYTNkOWI4OGEzZCI6IjU2NjUyMjA4NTQyNmI3NmJkZWYxNTJhZGVmZDczZWYwZjc2ZWVlNDYxNGJjNWE0MzkxNjI5ZWM0OWUwYWNmZmIiOiIzMGVmOTU4NTE0OGRkMjI3MGM0MTU0MGE0MjM1MzI4ZGU4OTUyZjI4Y2Y1NDcyZGY0NjNlODhlODM3NDE5ZTk5IjoiYWRjNDZlMGFmY2Y2OTMwMmY2MmM4NGM1YzRiZmNiYjcxMzJmOGRiMTE4ZDFhODRkYzJiOTEwNzUzZmU4NmEyZCI6IjRlZGM0MzgzOTc3ZWU5MWFhYTJmNWI5YWM0MjU3NTcwIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNDM4NTJjNTMwNDFhM2E0ZjcxMDQzNWRiZDNlNDM4MmIiOiJhYjdiY2E1NTk1MDg0YmNjZGJhODBhZGU3YWMzZGYyYTBjZTE5OGZhNDlkMjk0MTRjMDI0OWVjM2QxYzUwZDI3MWNhNzRiYTVjMzUyMTU3NmE4OWExOTY0ZTZkZWRlZDJkNWJhN2ZmMjhhMzY0YThmOTIzNTk4MWJlYzFiZWRmYSI6ImM1NjEyYTk1NDBiNjRmYzEzNDA3NGNiMzZmNGM5ZWE2MmZmZjk5MzkzODcwOWI1ZDM1NGE5MTdlNTI2NWFkZWUiOiJlZWUyMjU4YWJhNjY1YWE2ZDNmNWI4YzIyMDdmMTM1Mjc2ZjU5N2FkYjJhMGZiZmIxNmEyMDQ2MGU4Y2MzYzY4IjoiYTZkNmQxMjZiZWQxM2RiY2YyYjMyN2FhODg0YjcyNjBhOWMzODhjYjAzNzUxZGJlOWZlYjI4YTNmZTM1MWQ2MiI6ImUwNGMzZGU1MWExZmZlOGNkYTg5ZTg4MWMzOTY1ODRiIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNTI2Mjg1NTFjZTkwYzMzOGVkOTRiNjU1ZDRmMDU4MTEiOiJiM2E0YTNjNGQzZDUzZmZhNDFiODVjZTNiOGYyOTJiMWNjOGU1YWY3NDg4Mjg2ZDRjNTgxMDA1ZjhjMDJjNTU0NWMwOWJiMDhkODQ3MGI4Y2ZmZGY2MjczMWIxZDRiNzVjMDM2YWY3ZGM0ZjJmMWZjN2U5YTQ5NmYzZDIzNWYyZCI6ImY1ZjlkNWI1MTA3NWIxMmFhMzAwYWZkYzdiOGVhMzk0NGZjOGNmNGQxZTk1NjI1Y2M0ZTQyZmRmZGNiZWIxNjkiOiI2MGJjY2JjNzM0NWYyMzczM2ZlOGY4ZWI5NzYwOTc1MDU3MjM4NzA1ZDljZWUzM2IzMjY5ZjliZmVkZDcyMjAyIjoiYzBmYTNhZmQ2ZTlkZWNmYmZmYTdlYTY2NzhkMjQ4MWM1ZjU1ZWMwYTM1MTcyZmY5MzIxNGI5OTc0MDBlOTdjMyI6IjVhMTEzOTA2ZTFlZjc2YjdiNzVmZWZiZjIwZDc4ZWY4IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMGU0ODczYzRjYmNkZTI4MGFiYzY3MTFhNjZkYmI4MWEiOiIxYWI3YzdkOGZlOGY1MDVlMWRkN2RkYjhlN2NkYTk2MjU3MmY3MDA0YjJhMTRjN2E3YzViY2YyNGJkMTY2MTZlMmM0MmM1MGFlNWRiOTk4MWNjZDdkMGM3OTA2MmFjNTcyZDM4OTM0ODZiZDBhZTFmOTljYmMxZDI4YTllNGMxZSI6ImU0Yjg5ZTI4NjYzZTg1M2Y4YjM4MGM4YTQ0OTFiNTQxMjFmZTY5MjczNDBhNzQzNDIzNjJjMzdkOGQ2MTViNjYiOiI2MTk3NzU4Nzg4NzllZmY5ZWUyMTg5NzkwZmY2ZjE4N2JhZWQ0ZWQxYjE1NjAyOWI4MGU3YTA3MGExMDcyYTA5IjoiYmEzZDY3M2U1ZTQxYmQxYWJiYzcxOTFjYzRiOWE5NDUyMDFiOGZlZjAwMTZlNDc3NDA0N2VlMmFiZjQ5OWU3NCI6IjQ3NThmZDAyMWMzNGE1Y2Y2YmVhNzYwYWQwOTQzOGEwIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMDY4NGU4ZWY5M2MzMzYzYmE1MzVjNGU1NzNhZjFjMjQiOiI3NDhhNWY1ZmRlMjcxYzU2M2E4ZjhkMTU1MjBkNjgxOGY3ZWQwZWZiOWI0MzRhZGYyZmY5NDcxYjM5MWRkMjI1YjM3ODY4MTc5ZmZhOWE2ZTU4ZGYzYjFiNzY1Yjg5NDU2ODVhMmY5NjZkMjk2NDhkZDg2YTQyMDc4MzM5NjUwYiI6ImU5MGM4MjE1M2QyMjgwZjFkZGI1NWJkNjVlNzc1MmJmNjcxN2ZiZTA4YzQ5NDE0ZjZjMTI5YmY2MDg1NzhkYjciOiJjMTdlOTdjOTNjZmFiZTBiOTI1Y2E1ZDIyNjE1YTA2NDMwYTIwMWI3NTk1YWQwZDk5NjdjYzg5YTQ3Nzc5NDdkIjoiM2Q1NTRjNDMwYzg5MjhkY2RiMWY2ZDVlNWE0MzA2YjMwOTg1NmE5Yjc4YzVmNDMxYzU1ZDdlYmQ1MTk0NDNiYiI6ImQzZGE3MWFmNzBlMTk2NDgzYzk1MWQ5NWViM2YwMTM1IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiODliODg1ZGRiMTJhYmM0Zjc0MjIzMzRmMjdjMDA0MzkiOiJlMjM2NmVlYzYyNmJmZDljYjkzMmJjYWEwNTY5ZGU2YTdhMzdjZjFkZmRlMWYyNWQwMGQxYTBjODlmZTI1ZmVhNTkyY2JkMmFmN2M4MjAyNTIxZmE0OGUxNWY3Y2M3ZTk3ZTQzMWIyMjJiNTE2YTNhZDJiYjdiNTViN2ZjZjdmNCI6ImM3N2VlOTJiZDE3OTM5ZWZlOWJlZTQ4YWY2NjU4OWFlZTFkOWZlNGNkNmM4YWUyNmI3NGIzNzk5ZTM1MzQyYTYiOiIyM2U4MGQzNmNhNzJlY2MzODU1MWU3ZTBhNGY5NTAyYmVkMGUxNjBmMzgyZDgwMmY0OGZiMjcxNGVjNmUzMzE1IjoiNmI4M2Y3NDU4ZGM4MTNjZTBiOTYzYjIzMWM0MjRlOGJjZWQ1OTlkMDAyYzBlZjkxYTljMjBkY2MzZjE3MmVhNSI6IjgxZDEzYTZiNzlmMDUxMzdlMjMzZTNjM2ExMDkxMzYwIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJmZjU2OGJlMDJhNDYzNDMxMTNmMDY5NDlhMTZjYzdkOWRhMzE1YWVmODJmNTY4MWYwNDU5NjUwZTVlMTgwZTY1ZDFkNzdiMDBlNWNlM2UzZjllYjZjMThlZmZmNGRiMzYiOiI3N2RlNGU1ZGIzYjMwOGMzOGM4MTQyMjg1ODNkZmQxZWI0MTU3NzFmNGFlMzBmOWNjMmQzNWI0ODA3NTI4NmE0ZThjMmM2ZjQ0MWQxYWFjNDk2ZDBkNGJlMzk1ZDA3ODUxOWUzMWNiNzdkMDZkNmY3ZmQ0YzAzM2JjNDBmZDY1OSI6IiI6IiI6IiI6IjQ0OGFjNzA3YmE5MzRjOTA5MzM1NDI1ZGU2Mjk0NGQ2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI2ZjA5MmI4NWViOWY5NjQyNzY0MmY2OTQ2NzkxMTE3MmNiYTZkZjg2ZTBkYjA4ZDA0ZTgyNGNkZTZmYjkxZDliOWFmMmNlYTUzZjQyZDUzYzQ1ZWUzZTY5YTIzMjcxNzIiOiI2NjdkM2VkOWY0MWExNTRlYTMzYjU1MTgyYjhiZWU0ZDdkNDZlZmY4ZTg5MGM3MDM2Y2Y3YzI2NjVkNDRjMjhmOWUzYThjZmYxNjZkYWJmYWYyNjI5MzNkMzM3ZTcyOWUwYjZhNjBhNTFkMDBiYTE4Zjg3N2JkYzlkMGNjNjU5ZSI6IiI6IiI6IiI6IjE2YTIwMGY2ODNhYjg2Mjk0N2UwNjFjZGRhYWM1NTk3IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIyNmU2MzVhNmEyYjY0MDJiOTY4YzFlZWExM2M2YTk4MGEwZWU5Yjg0OTdhYmMxNGZjY2RjNWJmODQzOTAwODg2MWY3NGRlMmMyMDA1MDUxODViZjU5MDdkM2FkYzlkZTIiOiI4MGU1NmY5ODkzYmViOWYyMmIyYjAzY2FhOGYxODYxZDViMzFiMzdmNjM2ZjJjY2JjN2U0MDQwYWQzMDczYWEyMGYyZjNjNmJmZWZjMDQxZGY4ZTU3ZTcxMDA3OTRjNDI3MzJiNmQ0YjYzZDhiYjUxMzI5Y2E5OTY3MWQ1M2M3YyI6IiI6IiI6IiI6IjgwNzU4NmM5NzdmZWJjZjJhZDI4ZmNkNDVlMWExZGViIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJiMjM5YzQ4NWQzMTljZTk2NGQ2OWJkM2RiYzViN2FiOWNjNzJhYzkxMzRhMjVlNjQxYmNkM2M4YjZmODllN2UwOGVmMmQwYTQ1Y2Y2NzY2N2E0ZTJlNjM0YjMyZDczZmYiOiJjOTYzZTE3ZWY0NmI3YjJjNjg3NTYwMTk3MDRlYzc0MzVlYzA5M2M0MjM2MDBiM2YyZjk5ZGQ4OTg5Zjg1MzlhMTFiMWIwNTk4ZTkzZTg0ZDUwYjY1ZTgxNmU3OTQ0MjFhYjU0NmIyMDJlNGIyMjRhODQ5NDUzOGRkYTg1ZGE4MiI6IiI6IiI6IiI6IjJhMzIxOGI0ZDU5Zjk5YmQzODI1NjMxYTZlZWZiMDljIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIwMjM5NTQ1YTIzNzM1YjgwM2FlN2NiNzc2NjE5NDkxN2Q2Y2NlMTY0ZjdlYzRmNjVjNmNjZDVlYzFkYjUyOTc3MjJkNGI3NDY2NTg5ZGE0ZDM5ZjQ1ODU4NTZiYzFkN2UiOiI3MWE0NDBiNzBhMmI1Y2U0MWI4NWRlMjdkOTg3ZmEyYTA2MjhkNzk5MGRkN2NkMTQ2MGZkZGM1NDEwY2U2ZTliYjBhZTRmOTAyMzFmNDViYzcxMTg4ZmQ5NGU0MTcwMzg5YThiYmU0YTdlNzgxYzk1YzlhOTdhZDc4YmE3ZDA3YiI6IiI6IiI6IiI6IjlkYWZhYThiNzI3YzQ4MjlkZGExMGE4MzFlNjc0MTlkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM1CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIyMzdlODkxNmVhZGQ2NWUzNDIyZmU1OWFiMjU3YjdlNjk1N2ZlMjRmNzYwYjQ5OWZiZDA1MjI0MTg3OWU4Mjk0YjAxZDIxNjllYzJiOThmNTI2NjBkOWY1MTcwZGVlMjIiOiJkODkwOGNmYzFlYTg1MThjMTQ0MmU0NjczMWYzMGZkYWQ4NTM5OTg5NGRiMjYyYjhmNGZkYzBkYmNiZjExYjYwYjYwYjI1ZDMxMDhmNGIxNjlmY2JlZjYyMWExNGM2MzU1MjVmYTNhZjhjY2VmNmI5MWY4MDg0Nzk1MDk5NjdmNCI6IiI6IiI6IiI6IjU5M2MzOWM1NmJiOWU0NzY1NTAyOTllZThkODVkMmZjIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM2CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIyOGI2NjM5YjQxNWM3OTAxMmM3NDlkYzJhMGQxODQzM2VjMzZlZGE1NTgxNWYwODQxMjQxNDUzZmExMWI5ZDU3MmI3YzI5MjA4ZTAxZGJiMGJlOTFlMTA3NWYzMDVkN2YiOiI2NzY3YzNlYjZiYTFiMTk0MTJjMzJiZmU0NGU0ZDAzMTdiZWJhMTBmM2FiZWEzMjhjZGE3YjdjMTQxMDliNzIwNDZjODY5MWMxYzdiMjg0ODcwMzdkMzgxZjc3YTNiYmM4NDY0YTUxYjg3ZGU2OGJkYzUwZWM5YzY1OGY5MTVhYiI6IiI6IiI6IiI6ImUzOTA4MDYyMTlmYTcyN2U3NGE5MDAxMWI0ODM1ZWQ2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM3CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJjZTczNWE4NTQ5ZmMzZjlkZmM3Yjk2YmYwZDQ4OTM2YTcxMTQzOWFjNzI3MWQ3MTVhMjc4NzE4YWNhOWUyZmUzYzgwMTAzMGJjNzRiMDQ4YWMxZTQwODUyMzQ1ZTg3Y2MiOiI1MTBiMGRjMDZlODRjZWI5MDFjNzE5NWMyZjAwYWQ3YTA0YmRkNzVlMGFiNTJiM2QyY2Q0N2RkZmNkODkyNDhkZDU4ZTNmMWFhOGMxZmZlMzA2ZjQ5MzkwNWY2NTM2OWVhZWQyYTViMzM3ZGZmOGFjODFjNGMxZTg5MDNhNmFkNSI6IiI6IiI6IiI6ImJhODcxYmE1ODQzMDgzYjU1M2E1N2NmOGRlZmEzOWQ3IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM4CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI4NDFlYTkyZmE0MmMwNjc2OWM1YzUyZmUxNTJkMDc4MzdiOGZmMDA0ODM5MmNhYTVkZDA0NTA1NDM1M2QzNjNiMjU0MzllYjU4ODVlOTY3NzFkZGVkNDAwNWYyYmFmNDIiOiI5NzUxMWFlNTI1OTBhMGI2NGI3NWMzN2UxMGI4OTY3MTg4MGQyZDZlOGY5MDc4MGFjMjcyNjNkYmMwZTMyZDA4MjRiZTVlODBhODhjZjhmYzNkNGM2MDdlYjg3M2MwMzIyZDA5YjljYTM0OThjNDAxNWM1M2NhNmZlZTg5MDA5MyI6IiI6IiI6IiI6ImE4ZmIzMTM2MmJkOTk3YWRmNGQ5MTE2ZTIzZGJhZjEwIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM5CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI1NWNkNzZmYTVmMDA0Yjk3YmI4ZTE0MTcwZjc5ZjUyNzE1ZDE4YzYwZjE0MmIwNmQxNmU4ZTA2YzI3NDc5ODE5MGE3OWM4YjMyNTE2Mzk4OWQ4NjMyM2MwM2RiZTBkNjgiOiJiYWZjMGJhNjQ2NjljOWEzNjUxNGJkZTYxNjkwMzQxMDFmMjllMmEwYTRiOWE1NWMwYWFlN2RmZjBjNWFjYTIzNzFiNTIzZTI2ZGM0NGJmNzU0OTNiZGFhMDIzZDE1NTUyOTQxNzgyODhiNzBmMWFlNzIxNTBkOWY3MjY1YjRlNiI6IiI6IiI6IiI6ImZhMTZkYmRhZjAxYjNjMjAyNDI2YWRhYmY2MWZhNjRhIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZmYzZjMwOThmYTNkMmIyM2IzOGVkOTgyZTdhZmI2MWQ0NmI0ODQ4Yzg3OGI5MjgwZjhlNWVkNmJkODExNzZlNzZmMGEyYTg1MDcxYTQxMTgyOWNmODQ0MjFjMjJmMjNlIjoiOTIxOTRlMmM3MDBmYTcyNDQ4OTY4M2QwYjZkZGNmNzJjODliOWMzZjNmZjU4NGU4MDJhZTQyNmJlNDkwOGIxYWRlMDkzYmNmOWJhZjc3MzhiOTg4ZGMwZmRlMTczOTQ5OGE5N2M5NjEwZGE4NTNhN2M4Mzk4MWM2YTdiNjgwOTYiOiIiOiIiOiIiOiJmODU0OTA0MjZkYzI0M2JhMDlmOTcxOWJmZjczNTQ1YSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjcyNDJjMTAyMGE2Mzc3MGNjY2Y2ZjgxMDA5NzA5OTAyMzJhOWQxMWQ2MWM5YjBkMzhmZTVlN2E1NjhhODYyNTJhNjY0ODEyMTJlNWQ1M2M4Njg1NjEyOThkZDViZGVlYyI6IjdjMzgwNmEzMmNjZjMyNTJhYzI3YTkyYTA3MjA5Y2Q3MDAwYjE2MGZhYTcwYjkwMjQ0MjBiOTAzNTg3ZDFkNzdmMDAyZDNhYmUyOGI1NjNkMzJjY2M1MDJiODhmODNiYzU5OTZmM2RiYmYwZjU3ODM1ODM5ZWFkZDk0NTYzYjlkIjoiIjoiIjoiIjoiMjIzMjE4MWYwOGMxNTY5ZWZhYWQxYTgyYmNiNWYzYmEiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzEyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJhMmU0NDUyOTBmZWQ4MTg3ZGY2ZDJhNTdlNjgzODViYjYyZDcwMGNiOGYxNDA0MTA3NjZiNTNlNjllNmEwZjI5MzliYmZhN2NlMDkxNTI1YzkwNTFmMDY0ZTM4M2EyZTEiOiJmZGFlNWYxZWEyNTMxMDhmY2IyNTVkMjE1YTNjZTFkYzFkMTAxYWNmODlkZTQ0MjNiNzVhNzQ2MTllOTVmM2ZlYWEzNWI1ZTBiZWM0MzBiMGFkOTU2N2RmODE4OTg5YzM2Yzc3NzQyMTI5YWYzMzVjOTBjZWI2ZGQ3OWM3ZDJjNCI6IiI6IiI6IiI6IjM4NDFlMmQ3OTViMTdjYjlhMjA4MWQ2MDE2YTFhNzFkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYmM4ODU0NTRlMzg1ZDkxMTMzNmRkYTliN2E2MDlhNmE3MDc5YTRhNWE4NjBmY2Q3MDQxNjFjMzQ2NThiZDk4Njg1YmIwMzQxOGI3ZjI0ZjJlZDk0NzVlYjhjZWIyMzJlIjoiNzdiZWY4ODRhOTExMjY1NjRiMzIxNDAyOWFjNjg0MmQ4NmU0YzFmYTI4M2UzM2Q2ODI4ZDQyODM3NzQxNmY2Njk0N2UzOWE0YTY3MDhlMTBiZmRhZTgzMzdhNmYzMDI0MjBhNjY0OWZjMTA5ZDBmMDk0YzE4YzFlOTM2MTM3NWEiOiIiOiIiOiIiOiJlYTIwNzgwZWQyODBkODEwOWY4MTFhNmEzOThjM2U3NiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImMxODI1Y2YwMGNkYzJkYTkzYWRiM2U3YTMzYzFmM2E3NmM0OTE2Njg4Nzg4Mzc0NGVhMjY4M2RkY2EyM2YzMTkwMGYyNWM0MzQzNjRjOTkyYTZkOTEzZjc1M2E5YzQyYSI6IjU2OTQwYTZmYzQ4MjNjOWU0MmU4ZmZlZDYzZmMzY2Y0NmQwYTJiMzA1YzIzNmE1MTFiMGI1ZWM3MDA1ZWNkODk4OWJmMjAwNmViZTUyZWQ1NTg0NWY3Y2MyNWQzZDAwODZjZWNlOTVmMGJmZjZmYTdlMTdkZGY0NzQ3MDRhYmZlIjoiIjoiIjoiIjoiYjAzN2M3ZjBmODVmNGQ3ZWFlZWIxN2Y0Yzg2NDNhNzQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMTliODNjMGRlZWE2NDYzYTM5MTJkMjFmZmM4ZDgwNDFhNWIzMDY0MDM1MmFiYzk2NTI3NzBjZmNhOTlkYzUzYzljMDk5NDJkZGQ2N2I5MWY0ZGE1MGE4NjE1NDYyY2U0IjoiNWQ4NWM1NmQwZDIwZWUzOTk1OGE5MGYzMDFkMmY4YmIxMzZmYTM0ZDA5YjQxYTBjOTM3NTExNGEwZGY5YzFkY2RiMmE2MmM0YmUzOThkOWVhZjI0NDA5NDliODA2ZjBlNWE5NzdkYTYwOGVlYjY1MmE0MTcxMWQxZTliNzI2NTUiOiI5YzFkYjkyOGI5NWM4NGNiNjc0MDYwYTZkMmY2YjdhNmE1ZDQzZTllZTk2N2U5ZjgyMWJmMzA5Y2E1Zjg4MjFmIjoiYTMxMTFjYjU3MzY1YzYxN2RmMGIwYmIzYTFhYWRhNDljYTc4OWJjNzU5MDNlZWIyMWU0MmE3ZDNkMGRkMDgyNSI6ImNlN2Y1NTdjNzA2NzY5ODdkMTNhY2E2MGJjNDU4NTE0N2VmZWVkOTdiZTEzOTg3MWExYjI5Y2FhMWUxODBhZjkiOiI0YTQ5NDMwMjc3ZDY0NDQ2ZTJmYTc1NzYzZWI3OWVjNiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIyMzlmMjFiZTZjZGEyM2U4NjYwYzhhNWUwNGM3OWY2ZGFkNmYzNjNhYzZkY2ZmZDkyMjg2OTlhZTQzZmJjZTVhYzNjNTE2NDU1MDBjYjNlYWU2OGYwYjYwNGRjNDQ3MmMiOiIyOTc1YTA5OWY3ZTY1MzBlNTU3NjUzNGMyNTE3MWYzOTEzMWQ2YmZmYjk5MjU5ZjdmMmJiZjdkNzdkZTlmYjFlODI5MDUyYjU0YTk2MzFhNzMzMTEzMDIxNjkyZWJhMTA5NzQzODM0N2M2ZGU4MjMwN2EwYzJiYjMwOGVkZjA2NSI6ImQ0NTFhNTQ1ODRlNmQxZDYzNDIxNzM3OWU3ZTYwZTY3MzAzZTE5ZGQ0YmE2M2IwOTc4OTljNzM0OWE1YTc0MzMiOiJhMzNkYzI0YzZhNjU2ZWIyNjI3NTQxNTU4MWQ1NjhiN2MyNDI0YTljNWZiOWUyOTQ0Y2EzNWVjYmY2NDFmNzEzIjoiOGRmY2NjNjIzNzlhZjQ2ODQ0ZGYxMzYxMjJiNzJhODc4ZDlkNjFiNDBjY2FhMDI5YjA5ZTZiOWYwYjRkMDE5MiI6IjAwNWU5MTc2MGQ4OWVjYjY0YjVmYzNiMGUyMjJmY2EzIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImUzMjZhYmJlMWRiM2VhZDM3MzhkMmNhNGQ5ZjFkNjIwODBjZDIzZmYzMzk2ZjQzYTBhZjk5MmJlZDI0MjBjZWM2NjYxZGZhYWM4M2MzYzRkODMzNDdhYzg0MGY3ZGMxNCI6IjM3Yzk0ZDExZWQwZTkzYjgxOTlkNDNkNmViMjQyMTY1ZGRkZDEyZmUzOWMwYmVhNGNkZWY2YmNmZWI1ZDE3YmI4NjZmMDgwYTlkYWVmMTI4ZjY4NWZiM2JjNTljOTQ1OTI3ZmIwYWEzZTE3MDY4NTE1YzNjOTJmYmRmMDRhMjI4IjoiMWZmNDE0MDVkYmIzYjEyYjhkZGM5NzMwNjllZGMyZDI4MDFhZjBlMGRjOWJkZTJjZGQzNWM1YjJkNDA5MTUwOSI6IjEzOGI2ZDJlYWJlZjRiMzIxNzRhZmIwMTU2YWQxZGY1NzBjZjZlNWY2ZWJkZTVkMTljYzMwZGFmZmQ5Y2E0ZjIiOiJmMjdjZjc0MjI4MDhjNTRjNThmY2RkZTFjZWNlOTJmNTM0MmM3YTEwYWM0M2FiM2IyZTUzMzYyYjIyNzJlM2FkIjoiNTA2ZDZmYWU2ZmZmOWYyMjJlNjVhYzg2ZGY2MWE4MzIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiY2IwMjI5ZDJiYjcyZDkxMGIwMTY5ZThmOTMzMTg5MDVhZWY4ZGQ5M2VkOTFhMmY4Mzg4NTQ1ZGIzMmRiM2YyNDg5ZTc5ODhiNTBkZTY0YzQ5YTlmN2ZlYjVhYmU4NjMwIjoiNTE0ZWM4YzAyNDM5MjkwODUzNDM0ZTc1ZTNkMGJkMTU5ZWFjZDVhYzEzYjhmMjAyY2ZkNWMzNmNkYzBmZTk5YjUzYTFiN2ExNjE5ZTk0ZWI2NjFhYzgyNWE0OGVhNWVmOGJiOTEyMGRkNmVmYzM1MWUzOWViN2NjNTIyM2Y2MzciOiJhNmVkNjljOTIxNmM1NTE3OTMxMDdmMWJkYWEwNDk0NGY2ZDc2ZmU0NDc0ZjY0YmIwOGIwZWJjMTBhMThmMzM3IjoiZTBiYzFjYzU2ZmRmZWVmNjg2ZTBjN2VjMzU5ZTJlOGJkNDhkNzZjODY0M2M0MGQxMjMyNTMyODE3MGJiZjcwMiI6Ijg3YzViMjNhYTNjMTAwZmY5ZTM2OGZjNDc1MzRmZjhmYTJmOWUyYmZkMzU5OTUxOWVlNmY2MDE2NDQ4NWNmNmQiOiJiZDQxOTk2OGY2MzZlMzc0MjY4Y2NkZDYyNDAzZjc5YyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJiZGQxNTZlZjNjNGUwOWI3N2ZlODc4MWM0NDZlYWM1NWI1NjJlNGVlMWI3ZDE1NTE1YTk2Njg4MmQ0YzdmYWRiMGZjN2IzNzU1NGJhMDM5MDg4MzhkYjQwNDk5ZGVkNWIiOiI5ZmFjZDlmNDU4NzgxOWFjYjM1OGU0OTM2ZDlmNDRiNjdkZGY4MjYxNmU3OWE0NGZmZDZhMjUxMGY2NTJmNmI5Y2ViYzE0MjRiNWM2NDIzNjJiMTlmNjNjNjE1ZjQ5Njg2ZGY2NmE4ZjgwZGRmZmI1NmNlMGMwZDg1NDAxNTBmYiI6IjM1ZWEzMTZmZTMwMjc4NmY2MjZlMzgzMTUzMDYyMmI2MmViMzNhMzYwOGQ0YWYzMzg0ZWNmY2JkMTk4ZjNmMDUiOiI4ZDRmYWUyMjI5MGI2ZWY4NjE4ZGVkMWMzNDEyZTg1ZmFiN2I4ZDE3ZmI5Y2JkMDlkYmM4N2Y5NzI3OWNjNzJkIjoiMmY1NDkyODM3MmU0Y2U0NDcyMDE0MjdhM2FlMDU3NjlhZTFjNTRiMmU4M2JkYzg2ZDM4MGE5MGIwN2YyODkwYyI6IjgwNDVlOGRhODhiMWJjMTI2Nzg1YzhhNzcxZGI1MzU0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjE1NDg3NjI5OGExYjYzMzM0NjI0YjM2N2RhOTg0ZWIzMWQ3MjYwYWJlNzljZWQ0MWRlMzViYTY4YTcxNjIzM2E1ZGYwOTM3YjkwZjg5ZGRlN2ZkNTVhOTY5M2M5MDMxZiI6IjM2ODk1ZjU3NGU5ZTlkMDhlNmM4ODVkMzA1ZWI0NzY0YzFlNTY4OWQxZjk5YzI0NjJiM2ViZGY2NTllOGNlNDM4MThkZmM4ODZlYzc5Nzg0M2JmZWUzNjFiNTU0Y2Q1Zjk2OWIwYzdiMDM4MWI1M2Y0YWZjMWJjYWRiZjdlYjFjIjoiYzNhNDYxMDVjNTBhMTY3YTViMDM5MTA1M2YzODE0YTA2YzkwY2VhMmMxZmE5MzI5ZDk3ZmRiYzYyODg3ZmY2ZCI6IjU0YzdkNjZjNjVkYmRkYjQ2NjU5ODFiZmYwZjUwM2RlMzdkNzI0MzYyYWViNjdhYmNlNmE4NzBmZDZhNzM5OGEiOiI1ODIwNGNhOTUzY2JkNDZkZDZjODg3MGIzNThjYmE3N2M0MzY4NzBkYjQ5YmNkM2UyZjkyNjk3YmI1ODBiNDYwIjoiY2Q5MDNjMGYxMWVhNzAxMjE0ZjkxNzE1Y2ZlYzExYTMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiOTRlMjczZmRlMWU2OTlmODRhZWVmMzQzZWIwMjc3YzUwZDE2OWJiNTQ5NjU3NTMwMTAyMWEyYmU1MGRmNmE1NTVkMTQyMmVhODhlMGU0ZDkwNTE1OGU5M2ZkOGQwMDg5IjoiMWNkOTdiNmU2ZTdmMTk0MDFlNDA5YWVhN2IzZWMzM2E4ZmFlZmQ3MTQwMmI4ZjM0YTczYzFjYjFhZjIxNWUwZTg3ZGViZTY4YmNlNTkwZDQxYzFmOTBjNmFkOWRiM2QzMGIzOTAxODYyZTA3NmQ3NjVmZmRmNTg3NzZlNWZiN2UiOiI2ZWU3NWU5ZjlhZWU2YWM5M2UyMGY3NDJmMjA0MjdlNWViOWI0YWQyZWQwNmZiYmE4YzdiNzg3MGE5Njk0MWFjIjoiMGJhNjAzOTk4OTNlZGUyODQzNzJiYzRlMGEzNzcwMmEyM2IxNmFhOGU1ZmU3MGVhOTU0MjlhZjg3ZmYyOTFhYSI6Ijk0YmQyYjUxYzMyZDI5Y2QxNGUyMTIzMjIxZTQ1ZWMwY2YxZjM4NzY2ZmI2YmIwNzE2ODU2ZDAxMzhmNmZhMzkiOiI4MzE3OTM2ODZhYmQ0MDZmN2IzODVjZDU5ZTQ5N2IxOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM3CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI1YTY5OTExM2ViZjk4YmZmOWNiNzgwY2UyOTc0N2E2MWJhMmQ3NTgxYTU3MTYwNjVkMDE4Yzg5MzQ4ZDdjMmVkM2Y1YmJhMzI0NDJjZDE5MmMxZTM3Yjc3Yjk4ZjU3OTEiOiJkZTZkMmEzYjZhZDlhZjA3MDU4ZDNiMWQxOTc2Y2Y2MWQ0OTU2NmI5NjVlYjRlOWI3NGE0Y2FkOGUyODZlN2E0MGIyNTRiODYwZTJlMjA5YThjYjRjZmYzYThlNjE1Yjg0ZjVhZTc1MDU5NTdhNzU4ZTI2NmE0YzNlOTE1ZDI1MSI6ImVkMThjMTZhNjFiYTVlY2MwNzU1Zjk0YzI4NjM5MGE2ZDQ2ZTZlMjY0MzlkYWRkMzZjODNlYmRlZTQyYjRiNGMiOiI3YzQ1NTBkMDU4Yjg1NTgwYmUyMDUzZmQ5ZDkzM2M4NzA0MWM1YzNmNjJhNWI2YjMwMzI1OWRhZmM5MGQ5MDQxIjoiZWJlYmZjYjliNGIzNTk1ZTUxNjkzOWNhMDY4ODQyMmJiZGZjNGI5ZjY3YjBkNjYxOTc1N2NiMzE1YjdkNzkwOCI6IjFhNWE0OTZhYTIyNjg0ODM0NDRiMzc0MGM5Y2M0MTA0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjQyNDUwZjI2ODliODdhM2RkOTQwZjNiOWUzYjMyZDQ2NTRjNzI1YTI0ZGRkMmMyMmYwMDY2OTQzMjFkYWNmMTk4MGI1MGY3YWMwNDAxNjI2NDUzZWM4MzYwMzliZmRjOSI6IjQ3NjUzOTljY2JiZjNkMzM0MzNiYjk5MmVlMjllNDM4MWYyOGQ4MDBiMDU0MzFmMWM1YjNlOTQ5YzVkYjcyYzU4MmJmZThiYTA4ZGIxNTc1Yjg2NjgxNmNhYmJlNWUxZDMxZDhhODcwY2VlZDQ5ZmI3NTY3NmM5NzAyMGQxZjIyIjoiNmVlNWE3NjEzYzI1ZWNlYzI2M2EyZmQyMjg4OTQ4YjJkZjlhMDVkNTAwNDBjNDAzMWIwNjUzODc4ZmRiMDY3ZiI6IjY4YTEwMzg0ODFiZTc0MTJkNmE3Yzg0NzRkNGIyYTI1MzVjOWI1NWVhMzAxZWU4MDBkNWE4NDYxMjdkMzQ1Y2IiOiI3YTE5MTVjZjc4ZTZkYTJkYzc4NDBjYmE0MDM5MGQ2NjhkMDc1NzE2MDhiNzc4NTdkMjIyNGM0NTMxYzE3YmI4IjoiODBhNmM2MjJlNjQ0OTVmOWEzOTFmNWE4YTljNzY4MTgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiODczODY5ZTE5NDIwMWI4MjJiMTQwYmRkNzc5N2RkMWVkNDA4ZjIxOTBiNzU5YzA2OGI3MDE5ZTY3MDdmNjA3NTFlMTAxZDM0NjVjNGVjNTdkYmY5ZDFlYTc1OTdmYTQ0IjoiZDJmOTI3MDZjYTNmYjljZWQ4MTgzYzc0NzA0NDQwZDdlZWRlZTE1NDJjMmU4MTJmNjVhZmM4M2Y0YjYyZGFkZjFjNTFmYTY4ZjhkNWY0NTdhODkzMjExYzhhZmM4MmM5M2U2YTFlMTU4MjJlZmYwZDRhZGE2ZWZkMjVkMjcxYTAiOiI4ZDAzOTNkMmExYWU4OTMwZWE4ODc3M2FkZmE0N2I0OTA2MGYwYmYyZDNkZWYyYWNjNTc3ODZiZmJkMWUyZDZmIjoiNWJjZjVmZjRmYmQ5ZWFhYmY4YmY4MmVjN2M1OWIwNDNmZDY0YjAwMjVhZDFhYjJiMzg0ZTM5OWI5ZTEzMTQ3YSI6IjZlMmQwNWUyODZjOTA1MDJhM2FiZjJlZTcyYWI3ZmZiNTIwY2U1ZmFjZmIyN2UwOTU3ODdhMDlhNDEyYWJlYzMiOiJlMWNlZGE3MWI4ZmViNGIwZDE0ZDM1YmJiNTdhNzlhMiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMWZlY2I1ZmU4N2MyYTIwOGI0ZjE5M2U5YzNmZjgxMDk1NGM1NTQxNTBkNTQ0YmFlYTE2ODVmYjQ3NzQzMjAzMTVkNWNiNjUxYmU0OTNlZjEyMGVmNjk2NmUzZTc1MThjIjoiMzRiYzI5MjgwOTY3NDM1MmZmYjYwNzg2ZGNhNTllYzc5OTE4OGFhNDAxYjM2NmE0OGNkZWRkZjM3YzEyZWU0YzY2NmY4ZmIzYTBkNTNkZjRjZDcxOTExNjZkNTBmZjAxZDk5MmY5NGNkOTJkYTdhMzg1ZmZlNTc5NWIxOTdjZWQiOiIzODI0OWZlZDM0YTkwNzc2OGVhYzQ5MjY3YzJjNjEzYTY1MTU0ZWVjNWI3M2I1NDFkN2Q3YjMxNGI1MDgwMDYxIjoiMTE1YmU5Y2I5MTRiNTA0ODBmZmZlMDc4ZDgxNzA4NzBiNTYxMjlhMGE3NDI3MWRlZTA2M2Y4YjIwNDllMWJlMyI6IjY5ZmE2ZmFmNzIyM2Y1YmIxYjU1ZjM1YTU0NGY3ODE4MTU3OWIxNzQ1OTkwMDUzMzU3OTE2ZmU1MDdlNTFkYjYiOiI2MGNjOTJkM2JhM2ZmMDcxNWY1NjI3MTgyMzM0ZWQxYiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNGQyODNlYjVlY2Q4NWExNjEzYzk3NWUyNDgzMjc3MDY0MzYxM2M5YTVhZWUwZDg2NDliYzBkNjhjODljZjFlYTZlYzNhMWEyMmVlZmQ5ZTIxMmQ2MDJjMzM4ZDY0YzZlIjoiNGFhNjkxN2E1YzlmMzcwNTkwZDcwNTM2ZmRkODljOTE2ZmVjNWU1YmNiYWRlOGM2YTZjZmNmNWIyMzJjOThhNmIzZTZiNzlhMmRmYjA3NzhmYmMzZjFkYTdiMDYwNDRkN2IwZmEyYzA0ZmZjM2I3MTMyNGFjYTFlZTE5ZjkzNmIiOiIwNWE3MDkyYTY4NGJhN2E3ZmJkMzM1MzNmOWJlNThhNDE0MGEzODU1ZDRjNWY0NGEzMWQ2NjVhMDcyMGMxNzM5IjoiNTU3ZWYxYmVkYzg5MGQxNTQzZGU2Y2ZlYjI1NjQyNzgyNjgzZDc3YTQ2YmM4YWEwODM2YjA3MTU3NTk5YzdjMyI6ImU4N2U0NTA3M2ZmOGUzNmMzOGIxMjhjZDIyNzVhMTYwZTQzMTc4N2I1ZTgxZjZjMmZkN2EzNzkwOWViNzJlYTUiOiIzMWVjZmIxYmNmMzI1M2JhNWY3MWIxODVhNjZjN2NmZiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYTZmNDg4MTA0YTZjMDNlMzU0ZDVkMTgwNWM2MmRjZDMwMTYzMjJkMjE4NzQ3ZmE4M2Y5MTk5ZTIwZjZhYjFjZmJjMmI4ODk1MzZiZGExMTg3ZjU5YjcyOTRkNTU3ZmYyIjoiMjJmOGFkNTdhMmRmYTgwMTBlMjg2NWFkNjI2MzgyMzY1MjkxN2I4NGRmZWE2MWY2MzllZmRiMGZkYmIzNWM2MzQxY2E3NzIxMDk1ZDY5Njg2MjEyZGZmZTc4NDEwYzBkMGRiOTRmMDQ3NTZkNTJlN2Q3NjE2NWQ1YTFkNTE2ZDkiOiJmYjk5NTFkNTYzZjdhYTg4ZGI1NDU4NzRiMWEzMDQ5YzVmNzk3NzRkNDg2ZTdhMjhhZWQxZWQ3NWY1OTIyNGE1IjoiYjFlYTdjNmI1M2U3OWU0ZTk0N2U2MzA4NmRlZTMyZGNjMTdiYzRmMjdmYmE2MTQyZjgyMTVlYzA4MWNkZDVjOSI6IjBkMTJjYzBhMzliZmJmODcxOTRlNDA3MGY2YjU0Y2FhYWJiZTQ4ZmExOTJiOTZjZmVkMmE3OTRkOTVmYTI5OWQiOiI2MmExYzU2NzhlNmU4ZmM3MzhkMzc1ZTJjYTQ4NzUxZiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiOWQ2N2UwMTdlMGFiZGQ3YzA3OWJjMDM1NGYzM2RhYjY5NmFkNjQxNDY4MDJmMDZkNmNlZmQ5Y2RlZmJmNTViMTk3ZjU4OTllNWVmYWEyNjljYzA0MzJjODc2NDhjZTE4IjoiZDhiZTBlYzExMTlmZjk1OWMzMmM5Y2YyOTkxNGUzZjdiZjJiMDFiZGJmODA2YzJkOWJhMTE5YWUyYTJjZmI1NjU4NzE3NjJiMDJlZTdiZjY4ZjFkMjgwNTMyZmQ3YWU3MzY4NTE3ZjZmNzUxNzM5YjIyOGQyM2RmMmYyMDdmMzUiOiI3NGE1ZTI0NDc3ZTg3NTliZWRmYmFhMTk2ZjM5ODc3NzEwODM5MmVmYjhjNjRjNjVjMGM5ZWNkNmNkM2I1ZjA0IjoiNzBjYmM2Y2ZlMWQ2YWI0YmMzMGQ2NmZhMTYyZDVkNGIzMDI5ZTRiMWI5ZDc1OWYzZWFlMTdmYjUwOGU5MWE0NiI6ImQzYzUzOGUwNDJmMGViNzk2YjRhZjliNGU2NWNkODUwNDI1YzcyZTJjODk2ZmNlYTc0MWMxNzE3MmZhZjI3ZDkiOiI1NTlhNWUwNGI3NWNlYzI1MGFhYzI0MzMxNzZhNzI1ZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMTA5MTQ2MDhhNmQzNzNhMjZjNTNhYjgzMDE0MjgzYjY3OGQ3M2RmZWE2NWI0YTM1NDBhZjE3ZjJmYWZhM2IzY2Y2OTg5MjViNDIzZWRiOWY5NDZiOTA2ZjQzMTEwNzk1IjoiOWRlZDg3ZDI4OTQxMmRmZGE4OTM1ZTViMDhlYzY2YjY4YWJkMWJhZTFmYzUzNjNlNDM0MWY1OGRiOTU0ZjFmOWJjNGI2ODFjMGQ5MzBiYTA4MGY4NWY4ZmQwNGMxNzNjYjJiNzc3MjNjZTY3NjkyZWZhN2FkZTQ4YjgyYjY5MjYiOiIyMjUxNTliNGM2NzkwOTRmMjc3NTE2YjIzMzViMWU4YjdkMGE3ZWEzM2ZkNTY4MjI5MDZkNDgxZmU0MTI1ODZkIjoiNDk2N2NkNDAxY2Q0NjZhYmEwYmU1ZjU1NjE1Y2EwZDlmYjhhZGJkZTVjYjRlNmFlM2EwMTU5ZmNkNmMzNmJmMCI6ImZlYzE0ZjMyNWI4YjQ1OGRkZjNlN2YyZTEwOTM4ZjRjMmQwNGM4ZDk4ODViYjViOTI3N2JkYzIyOWM3MGIzNTQiOiIxY2Q1YzBiZGViODdjNzkyMzViZWFkNDE2YzU2NWQzMiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImIwMjNmNmE2ZjczZDQ3NDliMzZlYjU0ODY3OTk0NDMyIjoiMjQ2MmFkNzYwZGRiY2E0ZTAxMzY4OGJmNjEzODFmMTkwYzdiMmRlNTdjYmVlZWM4MWQ2YWI3YjZmMDY3Yjc1YWRjMzU0NTg4N2Y4ZDJhYTVkOWI5ZGZjYmZhNDI1ZDYxMGZhYTljMjQ3ZWI1ZDcxMTQ1ZjMwMjkxOGU5MDhhZTUiOiIiOiIiOiIiOiJjMDYyMGM2ODUxNWE0NjE4ZTU3MmRiNmU0YzE0NDczZCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjdlMGZjZDk1M2MxYzhiYjhkMDNkN2EwZTkxOGZiNTlkIjoiNTZiMmUxMWQ1YzJkODdkMmM5YzkwYzI4NWUwMDQxYmViNDU5NGE2ZWZkZDU3NzU4MDA5NTYxMmU1MGNmNDdjMGI3NjIwODMzN2UxZTE4NDUzMDgyZDcyNTYyOTY2N2Q4NjIyNmFiMjI5NDRiYmZiNDBjMzhiNzk4NmU0ODlhZGIiOiIiOiIiOiIiOiI3MTk0ZWVlMGQzMzNmYTUyODJkYzQ0ZGI5NjRlY2Y1YiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjAxMzAyMTdkNGEzOTQ1NDAyZWQ5OWQ3Yjg1MDRmZTRiIjoiMjhlNTkyZmQ5ZGI3MmI0MGFlNDg4ODA3OGFlZGRlMjYwZjZkZTRmMDQ3MmE3NjAxMjU4ZTY5NGQ3YmI2YWY2ODEwZmY0ZWFiZGZmYjMzMjkzMjc2NWZhMWQ2NjY1MGZiNzhjYzJiZTQ4NGMwYmE4MDNlYjlhMjUwMjAyMGU4NjUiOiIiOiIiOiIiOiI0NjUyZjA1NDUzODVmZGJlMDJkMDVhZWMyMTY2ODYwOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjA3ODU0NDQ3ZTMzNTIxZDJkOTk3ZDkwYzA4ODdmNDJkIjoiYzU2MWFiNmFjZmJmYjk4ODc5OTgyYWM3YWRkOTJiODA0NzFlMDE1NGI3N2NjYzlmZDk4ZTdjMjAxM2M0MTFlODA3NTk0OGU5N2FiNGRiNzUwNTc5N2E5OWQ0NTZlNTRlNjU4NTA0MmVmZWZmN2UzOTcwZTM5OWVhMGQyNzUzN2MiOiIiOiIiOiIiOiIxYTE0YTgxMGMxMWI0ZjBhZjIzYzY0NjdjNDdiYmRlMCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjY4YThlYzAxNTgxZDYwNjYzOTFmM2U1OTc3NDY1MDI2IjoiNzQ3YzdlOWFhY2U2ZDRmODQwYzdiNTI2MWUwYWY3OTZjNTE2NDc3NDIxZDUyODUwYTcwNzJhMGFiMmM3NjhmY2M4MGM5YmE4ZDE4YjIyOGU3N2E3ZjYxMzFjNzg4YTc2NTE1ZmUzMWFlZjRlZDY3Mzc2NTY4MjMxYTQ3MDBmYWMiOiIiOiIiOiIiOiJhNTcyM2M0Mzc0MzQ0MmZhZTM2MzdiYjU1Mzg5MWFlYiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjE0NTkwMzhjNjBiNzBiYWU3YWYwZGE2Y2ZhYjcwN2EyIjoiOWY3ZDgzOTMxMDg0NmJkNDUyODI3YTE4NTUzOWMwZWIwZjEwNmFjYzdiYzRkZTgwZDM1MjFhOTcwYjIzNDgzZDU3ODI2YjE0ODRkMzI5YTJkMWMyZWNmZWFmOGVlZmZiYWE2ZTFhMzA1ZTNmMWU0N2I5NmFkNDhhNzExYWQxYWEiOiIiOiIiOiIiOiI1ZmNkNmJmMTA4ZmU2OGI4NWY2MWY4NWMwNTU2ZjVjMCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzYKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImEzMzU3ZGIxNzNkZjk4ZGE0ZGQwMmVlMjRjZTVjMzAzIjoiZjFjZTA4NTg3YWMwMzM4YjRkMGI4ZTA3NWI0MmI2NTAxZTc3NzU4YjMwMDg3ZGUwMjhhODYyMmZiN2FiZDdmNjVlM2I0ZjgwMmQxYTQ3MmRlZGI5YzFhNmRjOTI2M2M2NTkxOGQ4YjdmYWZkMGFlN2U5YzM5ZTJlODY4NGFmM2YiOiIiOiIiOiIiOiI4YTVmYTExZDhlNzhmYmYxY2E0ZTRjYTNlMWFlODJiOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzcKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjIxMmY0YzgwYzdlOTI4N2M4ZDI1ZTNiOTY1ZjkxYTNjIjoiYmYxZDcxNWIzZjU2YzQzMzgyN2M5Y2I0MjliZWU1Y2E2MWM4MGE4ZDliMmZkNDQ5OGUxYzg2Y2U3MDM2MzdmOGY3ZjM0MDU2YWIwMDM5ZTBiYWE2MzMyMGRmMGVjNjFkZTYwMzU0ZjJlY2UwNjM1NmQ5YmUzYzZkMWNkY2M0Y2YiOiIiOiIiOiIiOiIwNGFjMmY5NjllODI4ZjM3NWIwM2VlMTYzMTdlODU3MiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjQ2ZTg1NzUyZTBhZjgyZmM2MzkzMjk1MDEyMGU0YjVkIjoiYWU0MzE2NDI0ZmE3NjUxNzk0MDQxODhlYjg4MzljZTg0YWQ4ZGI5MmNiMTJmMzkwODlhOTNhMmRiZGMzNzFlMmZkYmVmMWFkMDgwZWIzNTRlZWNkZGEzYTEwZWE2NmVmNjQ3YWEwOTVhZmExNzg2YzAxYmQxYzlmNzBkOGRhNGYiOiIiOiIiOiIiOiJkZTU3NjI4NGQ4YWQzNmIzMWJkNGY4ZjNkYTYzM2UzNiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzkKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImVjMjQ1OWIxZGQ3ZjUwZGY2M2UxNGU0MGFhNGE0ZTY2IjoiYjk2NGEyNGJmOTgyNjQzMjdjMGI5ZTJlMWM5OWVkMWIzNWY1MzRiZTgwMWM5OTZmMzE4YmMyMDc0ZWQyNTAwYmE4NDg4YzRmZWI0NDJiNTA3YzMyMjA1MjNjMDA0MWM5NTQzMTMzMzc5MzY1ZTY1ZTA5Mjg1MGE1ZTNmOTZjYzkiOiIiOiIiOiIiOiI0ZDQ2NmUyZjM4OGFhZTQwZDFiMzFjZTFmOGRkYzVlOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzEwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJhY2Y0ODBkNTRmNGM2NmQ2MTE1MTliNzJmMmMwZGNhNiI6ImQ1YjMyNzdjZjhiYWRmNmJlODZhZjI3ZGQzNmYyM2ZmYzU4MDg0N2M1ZmNiNTZjNGQ4YTQyMzM5MzM2ZjE4NWMzOGZmYjg2ZjRkOGFhNzY0NmMxYWFlZDZjMmIwYzdhZTdlNGQ0MzVmNDgxZDYyYmIwMWU2MzJmNmJiYjJhYmY5IjoiIjoiIjoiIjoiNzQ2YWFhNTQyM2VmNzdlYTZiMWVkYTQ3NDEwMjYyZGQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZWRiODBmZGRjNTk1YjIzNGUzYzVjMDNiMmJlM2Q3MjEiOiI5NGFhZDhjNzcyMjAxNDM1NTQzZWZkOTAxM2M5ZjVmMDIyMDM4ZGI2ODY0ZTllZDQxNDFlYTc1YmViMjM2ODQ0ZGE2ZTZhMTcxMDkyNjJiYzgwZjUyODQyN2IzN2Q5ZGE2ZGYwM2M3ZGQyNWJlMjMzNzc0Mzg0YTdmNTMxOTdlYSI6IiI6IiI6IiI6IjUxMTkyN2YxMGY4MDA0NDViNzA1ZWEzY2ZlNmVjODIzIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMTIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImM3NzkwYzk4ODhiMGU3MzFjYTZjY2Q2MGMzMmJiOThhIjoiOTY3MDUwYzExMDUwYTZkOTlhNWRhNDI4ZDFmMGZjODA2OGIyOWJhNGM2Njk2NWFkZGJmZDMxYjc0NWNiMDdkMjQzOWQyNjhhYjMyYTVmYTJiMTkzNGJmMjc3ZmY1ODY1MDZhOTQxNzY4NDY4OTA1ZWQ5ODA1MzdkOGJhYTFkMDciOiIiOiIiOiIiOiI5Nzg0OTNmMGNlY2U2Zjk0ZDIxODYzYTUxOWUwNmRiZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzEzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI1OGM3NTYyNTc3MWRmNjFjNDhhODI1OTBlZWVkMzM3OCI6ImJlMzEyMGU4NTE1YTk4NzAxYjRiMmZiMDY2N2RlMmJhZDNmMzJiY2JmMTBmYjliODIwOTU2ZjlhYTdmZmExYmJiYWZiNzAwMDJhOWM3ZmRkMWNmN2U3NmE3MzUyNjE3OThkYzYwYTExNjM5MTlkNThlMzllZjBjMzhiNTRiMjdiIjoiIjoiIjoiIjoiOTBmNWM0ODZlN2VmZTkzMjI1ODYxMGU3NDQ1MDY0ODciCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZDNmNjRjMTFhYTIxYmIyZDEyMjc4ODQ3NTQ3ZmIxMWIiOiI4NTVjMGUzYTc1Njc3MzBiMTFlMTk3YzEzNmU1YzIyYjFkYzcyNzFkNGRiZTA0YmNkZmQyZmMwZWY4MDZiM2MwNWI0MjY0ZWU2YzYwZDUyNjUwNjYyMmViZjYxMzA3MzhkYmE0YmYzNWMxM2NlMzNkYjE5NDg3MzEyZWU2OTFmZSI6IiI6IiI6IiI6IjMzZWQ3MDg5ZWJhZTczOGM2YTdlNmUyMzkwZDU3M2U0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxMzJhZDFjNDBhZmIwNjY2MjBmMDA0ZjA4NDA5YzU5ZSI6IjJlNWJlYWRkODliNjYzYjM5MDNkM2E2M2MzYWI1NjA1YmZiMWEwMDQ1YTQyNDMwZTAyMjAyNDNjNTFhNjlmN2ZmNzY3OGMyZjhlZGI3YmI0YTI5YjY0NmYzZWRmYWNhMjQ2M2Y5ZGVmZDM0MmRhODdkMjJiMWI4ZmRiMDEyZmQ1IjoiMTUwZGViODQxZDFhNGQ5MGU2NmU4NWIwMzZkOWY1YTdlZmNhNzI2YjkwN2FlM2U4ZjA1ZTFkMTMzOGNkZmQzMiI6ImZiMTk5YmVlZWFmMzkzOWJlMmE1ZjllNmJhMjJmOTdjZGQyYzc1NzZlODFlY2NjNjg2ZmFjYmRmOGJiNGYyYWEiOiI0MjkzMzQxNzIxZjU3ZTQ1NDhjZThjMDAzNTMxZDM4NjIyNDQ2Yzg4MjU5MDRlMWI4NjhkY2RkYzYyNmM1MTY0IjoiNjZkOGYzYmZiNzgxODZiNTcxMzZlYzJjMTYwMmUxZWYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjFjMTUwMmNhOTdjMTA5Mzk5YTcyYTc3YzhkNmNjMjJiIjoiMWQzM2IxYjI1N2EzYWUxMjEwZmEyMDk5MzA3OTE2YTczZGQ5MjI3MDc2OTY5N2VhMmQ3OTAxZjU2ODY1ZTNjYWUxYmU5NGI1MDI0ZDBkYTM4ODBiY2UwNmYwYjMxMjMxYzVhODg5ZjhiYTNkOTJhMjA4NDRiNjEwMDlkYjY3MmQiOiIyM2VlZGU0NmVmZjRhMDRiMDhkY2MyMTMzZTQ1MzdiMzMyMzUxZjg0Njk2MzBmMTFiMGM4ODUzZmI3NjJhNGJjIjoiNmZkOWY5ZGExMDhlNjhhZWE5ZDFjZWNkODFjNDliY2QwZTdiZWRiMzQ4ODkwZjIyNDhjYjMxYzQyNzczNjlmNyI6Ijc2YmNjMTFiZDk1MjEyM2Y3OGRkMmJhNjBkZDkzMmQ0OTIwM2U0MThiYjgzMmQ2MGI0NWMwODNlMWUxMjk4MzQiOiJhMWVlZTQ2MDAxNjE2ZjJiZjg3NzI5ODk1ZGEwZDBkMSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYzc5YzBhMWRiNzVlODNhZjI1OGNkZjllYWQ4MTI2NGQiOiI1ZThjYzBmZGFkYzE3MGVkMGY1ZTEyZjc5YTZiOWU1ODVmOWQ3YzI5MjZjMTYzNjg2YTZhNzI0NDk1ZDg4ZmFiY2VjOTQwZDc1MjU0NWNhZTYzZjE3OTJkY2I5NjZhNzMyNWY2MTk5N2JhODg4MzU1OWFkNmY2ZjhmYzA5ODk4YSI6ImEyY2Y2YzFjOWU0NDg5ZjUwNGUxN2YzODVmMDhhYTgyNzc1YWEyYjBhODRhYmQwYjdlZTNjNmIzOTNkN2ZkNTAiOiJjNzUyOWI4NzRlMDdkNGI4NzYxOTY3ODZkNTEwY2MwMzhjOWUxYWI5M2M0NjFkZjI0NzRlYmE0ODRhZTY4NzZmIjoiNjNjNmU3ZjM1NDg1MjkzODZjOWY0N2M1YWVjZTUyY2U4NDU0ZGE1ZGI5YTgwN2ExYjk2MGY3NzMwYTYxNTgyYiI6IjQzYjc5MzFlMGIzYjM3NjllZjg5NzJkMDAyNjg5NmEzIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJiNDRkMWRkOTE0ZTg4ODQwYmM2NWE5NGVlMTk5YjNhYyI6ImMzZGFlMTg2M2QzMjNjYzc4ZjQzY2NiM2Y2MzJmZGUyOTEzMGU2YjIzYjg0M2ZmNWE4ZDc5ZmRkYzNjMWY5MmI1NWNkM2RjYWY3ODQ4ZDQwZDE4OWMwZGU3NzkwYmViYjg4OWUwMWJlMDU5ODBkY2RmMzBkMmIzMzMzNDI2YzUwIjoiNDFlMmZjZTliNDg2NDJhMWI5YmQxNjk1MzE0YWRjZGQzOGUxYThhZmU0ODkxZTYzM2M1MDg4YzY3NTM0MzhhMiI6IjFlYjNmOGJiYWNiMGM2YjkwMTcxOGJmZDdlYmEyOWY2Zjg3ZTFmZTA1NmFkNDQyZDZkMzhjMTM1MWE2ODRlMWYiOiI4NTU3MGRiNzczZjNmNTIwMjk2NzM3NmY5MWEwYTljMDljODljZDRlZGRkNThjZGM2MjEwMzM1ZmQ1ZTdhY2VmIjoiYmQ1MzAzNjUzOGQ5ZWQ5MDRhNDk5NjZiNTQyOGEyYTgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjVlZjk3ZjdhZjdkZjVjYzZmYTk0Zjg0MjhlYzdiZTVjIjoiYmU2NzQzNGFjNGQ3N2YwZjUwZWM1YmFjYzgxMTJkMTQ4MGJkOWYyMGQ2YjRlYTc2OGQ5YjUxYmI2OWMxZGZmY2Q4YzMwZTQ0MTIxMjc2NDRhYWE2ZmM0NTNlNTlmYjYzM2Y2YTVhOGMyZjY5ZTQwZDE4NjNlMzVkNGQ0YzAyMjciOiJhNjQxOTViMWU1NmNmOTdmZDgxZTk5ZmExODMzZDE5MWZhZjYyZjUzNGM4NzRkZWY0YjhiZWQwYWU3MTk1YWM3IjoiMzUzY2QzYThkOWNkOTJiY2U4MmNkOGQxY2MxOThiYWE5Mjc2ZGI0NzhiMGNmZTUwMjQ5ZTMwYzMwNDJlZTlkYiI6IjM5M2FiNDcyNmYwODhmZGZlYjRkZjc1MmUxYjJhZWM2NzhlNDFmYTYwNzgxYmM1ZTkxNDI5NjIyN2Q2YjNkZmMiOiIyNGJkYzJjYWQ1ZGNjZDIzMDk0MjVmMTFhMjRjOGMzOSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjNQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNTY3MTMwZGE0ZTdlY2M0ZGIwZjAzNWQ3ZWNiMTE4NzgiOiJjYzA3MGRmNmFhMzYyM2Y3NGFmZDg1YjU5ZDFiZWYyYjFmY2Q5YzgwOTMzNjI1MTJmZjEwOWViZmU5OTJlZDc1YmQ1OGI1YWUxNTYxZDcwMmI2OTA2NWViM2NjMGJkMzI4YWI2OThkNGM2Y2EyNzRlOTZkNjczMzA5YjVkZjVkZiI6IjQyMDMzMDU0Y2VmYTFmMjBiMzQ0M2Y4YWI3ZDk2MzVhZThmMDQ3YjgzM2M4NTI5MjQ1YmE4YjRhYTA3ZWRiYTMiOiI3Mjk3MmZiOTQ3YmZmNjBkZjI5MTg4OGRkYmZkOTFlNjk4ZTBjMWMyNmEzNDZiOTVmYzdjNWRhYzU5NmQwMDczIjoiYWYyOWI2YTEzNjAyYmE5YzZiMTFmOGRiZGViNmNiNTJlMjExZjljZDJmYzk2ZTYzYjYxZTNjMWVjNjMxZDJlYSI6ImIwODQ5ZjgzMTdlMDQzMjcxYTNmYzVmMmVhYWFhYmEyIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM2CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIyYzIwYWUzNmYxZTc0NTQyZWQ4YjBhMTc3YjgwNTBhYSI6ImM0YmY3YTM5Y2FmMjZkYzNmNjEzMTFmNTRhYjMwOTU0OTNjNjI2YTk4OGY1YWJlZTI4MjZjNjdhNGY0YjRkNmEwMjMyOWM5OWE2YmNiNWUzODdmYTE2MDc0MWM4NzFhY2MyOTI5YzFjYzA3ZjJmMGE3Y2UxNjE5ZWI3ZGExZWM0IjoiOTdjMTQ4ZGQxMGMzZGQ3MmIxZWFhYWZiZTM3YTkzMTBlZDE1YjIzODcyZTlmMmI2MmQxZmViOTFlYTgxZmZlMyI6IjIzZGYwYzMwYzY4YmYyZWViNTVkMjczYTU5NmYxZjU0ZWQ5MTYyNzE1OTViOTA2ZTRmNzc5M2I3YTUyZjI1NzMiOiIyMmYxMjBmYTA5MjE1MTA1MTE2OTE5YWFmOGVlYmNiNjllY2NkNWRhNDJmZWI3MzcwMThhMDUyNjhiZjA4ZTQ2IjoiYjdjNzNiOWNlZWEyZTZjYTBiZTZhMzc3M2NkZDY4ODYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzcKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjIwNzZmOWUxMTZhMjY0OGUxZTY2NGI4MTViMWIzNjc0IjoiOTc5YjVhZWFmZTU1NWFlYmExNTJlZDY2ZTMyZTMwZTExMGRmMjBlZTFmMjI3OTMyYTcyYWNmYjgyMThhZWM3Njc5NDFlZmFlZmEwOTFjMDEyOGRhZDliOTNiMDZiMjhmYzc2ZTAxZjI3NWU4Y2UxYzAyZjBlYjU2N2M5MTRmODkiOiJkMTJmYjEwYjlmYTZkMmZkMGYzOWNmNzYyOTRjZDQ0ZGNiZmE4MGRjYTdjMmY4NTM3Yzc1NDUzZDk4NWVmNTUxIjoiNDIyOGE5OWZhZjM1NTQ3YTU4YzFhNGQ4NDIzMDFkY2EzNzRmMWYxM2M2ZmQwNjdiN2MxYjgxNTg2M2I3MzE1OCI6ImEzYTdkNWYxZTJkY2Y5NWE5MDcxNWVjNWZkMzJlN2Y4OGMzOGIwYTQ1MmI2Y2NkMWYxMDc0NThkYjRmNzRmZDYiOiI4YTYzYTUwMDJhMzYzNmIyNDFmMGJlYzE0ZmQ5YzJhYyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjOAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYTcxMDE1Y2YwNmRkZDBhNmNkNzJmYTAxNGNmMGFlZTYiOiJjODEwY2I5ZGIwZjE2OWRiYzMwZmRhODVjY2I2ZDRjNDBkYjY4ZDQyOWVlYjM2NTMwNzBkYjc2NDFmYmJhYmE2MGVmMGZmOTcwZWFmNDA4ODdiN2UxNTRlMmVjZDUzMzFkZTcwMDQ2ODllYzYwNGU2OTkyN2RhNjMwYThkZDdhNyI6IjVmOTlmNDVkODc3MDA0MTcwM2U1YTE0NTIxYzUwMTkwNGZkMDVmZjMzNDA4MzVhYzBjNDFiODY0NDJlNDkzOWMiOiJlYjdlZmE2ZTQ2YWI5MjZlYTA0Yzg3ZWI5Y2U0NTRmNWIxMDcxN2JkOWQ4NTMwNWYyN2Q3MWJlYTFiYzk5MWIzIjoiY2JjODBjNjE3MWQwOThmYzgxMDIzNDg2ZDMyN2VmZTI0MTVhMGYzMmU1ZmE2ZjY3OTNjZTFkMGU5ODc4MzI1OCI6ImEzNTNmNmIzNTA0MDRmM2Y3YjRmYjcyNGY4NGE5NDhhIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM5CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIzOTU5MzE4Mzc2MTRjMzIyZDg0ODhlYzZhMmM0YzkxOSI6IjgzMWZjOGQ2MzU5MmI2Y2UzNThjMDhhZWFjMzlkNjdjM2U0OGI0YzI2MTc3MzViNmZlNWU5ZmE0NGQ3YWVlOWQ2MGYyZmNmNTQ5ZGIyMzlkNWJlZDljNjA4Yzk0ZThmOGMyM2IzMjkwMTQ0MmFjNTM0NDIxMjczNzdiZGNmMjA1IjoiZWIyNjFjNzM3YzBhMTdjOGNiMWFlMDU1YzE0M2Y3MDFiNzRjOTZjODUyZTRhNzZjYTNlYTA0NWU3ZWZkZjVlZSI6IjE1MzI3NjAwN2IzODQzYTg5N2VmYmYwMjJiZDFiY2FiY2Y2NTVjN2ViOGFjZWY5YmFhYzcxMGIzMzllY2ZkOTkiOiJhOGE1Y2IxN2EyOTQ1ZTViNDFmZjM3MGNjODhhYzQ5ODM4OWI4OWI2Y2Q4MmJiM2JiZGU4MWMyMTJmN2MxN2Q0IjoiNTM3ZmMyYjczMTgzZDJjMGMxMDY4ODY5MzdhNjYwOWMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzEwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI5YTE5ODM4NTlkZDZjNGNiNjAyOTcwZDcwNTk1MmIyYiI6IjY4YzVjZjMxZjc5NTlmZmFhODNhZjlkZDU1YTc1ZWMwMDFiZWZiZjgzNWU0MmE3ODlhYzQyZDM5ZDk2MTI4ZWI2ZDliM2YwN2NlZDE1ZTU3ZTM5NzYwMzkwYzA2NWZiNDQyNWMxOWVmNzE4NDYzNWMxOGU1ZWQyODI1NjkzN2UxIjoiZTA2NDk3YTE4MWE1MzYyOTgwNTc5YzkxZDI2M2Y2MzBhZDQ3OTQ1MTlhNjQyNjFlZGU4YjM2Y2YwYWM1ZTcxMyI6IjcxNGU0ZmM1MmFlYTc2M2UyM2ExZjViMTg5NDlhYjhmZDk0OWYxNzY4NTYwNTU5YmNjYjQ5ZDc4ZDUxZGZhYjUiOiI2YjZiN2Y2NWZkNDcyYWQ0MjhkZjJiYmI4NmI4NTA2N2QwYTZmODlkOTIzM2VlYTkyZjUxODlhOTE2M2QwNDE5IjoiZTMyYWY4YTgxYzU5ZGM0NDU0MGVkODg0NWI0NDdmZGIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzExCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIyMzA1NzZlOTUxOGZiOWE2YTgzOTFhODQ5MTliMGQ5NyI6IjYxOTNmMGU3YjMzY2UxOWZkZTkyMmFlYzljOTNmMTI3MWViY2RkMjk2ZDljOGM3NzAyOWI1OWFmYTIwNjRlMzE1OTA4OGUwN2U5MWMxNGE0YTNkYzIzYjYwMDVkZDhlZjE0MjVkN2QyYWU4MjgyYTViMzBiNzQ5OGI2NzU0MjM0IjoiZmZhY2EzMGEyNTZkMTg4MzZhMGQ0OWJiYWFkNTk5YTI4ZmM3ODIxZDcxYWE5MWI5NzE1OGE0OTJkODRhNjI4MCI6ImEzZGExMzg1MmQwNzE3YWZlZDdjNThjNTI1MzBkMmFlMDQ3YjY0NWE1ZTdhYThjZmFiYzExNDc4NDQ0MTUxYWMiOiJlMTVmZGFlZWEzMWM5NTU1NWZjNTA5ZDJhMjY2YWJmNzhkODZjYTExYWEyZjg3Y2UxMDQxMTQyZWI5ZjgyYmFlIjoiNzkwNmY4ZGExZTE0MDM0NWMxOTFkYmMyZGU1ZWFkMWIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzEyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJlMDhhM2EzM2FkYjQzOTlhOWJlNzJmZWFkMjI0MTU1ZiI6ImNmYmU4YjE0NjRiMDBiYjllMGQxOGIwNGQyMDQwZWQ5YmQ4MjI3NDExODg4MTJiOThhNDQwZmJjNjZmZjAxOGRkZjZjMGVhMjBjNjJkMDFiODIzN2JjN2MzZGE5ZTNmOWZiODc0ZmNhNzlhMzYwYjRmMGY5NjdkOGQwMjA4M2JhIjoiNTZmOTc1ODQ5MTk3ZTJlYWU1YTJlNmZiNDQ1YTkzYzFmYWRmNTcyODBhYzI3ZTI3YzdjYmVhMmNiMDBjMTBjYyI6IjBhNmQ5ZTJkNmUxODFhZGRhYjBlYTFlZTg5YzY1Y2U1NTdlMTBmYjhlOGQ0M2EyNGNkZDI3MDMzZDNmZmY1MDciOiI4MjNlOTQwMGE5ZjU2M2NjMWZhNWRhZjEwZjRmZjFhYjhhZmZhMThkODM3MWY5Y2QwZTA2N2ZjZGRjZThjYWVkIjoiNWRlZDI5OGY5OGNmZmIyZTdmNWVhOTdiZDUwYzdlM2UiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzEzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxMWMxM2I5MTdkOWY5NGZkN2EwMDg1NjZkODU5OGU4OSI6ImY1MzM0M2E1YTQ1NTEzMmRmM2QxYjAzZGIzOWU0NGQ5MzM4NTViMzc1ZDc0MjJhZDBkMDdkZmRmYjM1MmFmMjg5NDZlYjI5OTgwNzkzNDU2ZWM4NjM0YmYxMTNlNzU3ODMyNDZiYmQwNWFhOGE3Y2I1ODg2ZDM3MmZhMDEyZjU4IjoiZmYxZDhkMzMwODMwMjNmZmJlMjhmMTUzYmRkZmE5ZDlmM2MyMjFkYTE2ZjhmMjA5NjdkMjUwOGZhNzc1MmI1NSI6IjY2YTk4YzdkNzc4ZDc5ODYxN2UxZDMxZDRiZGZhYmY4ZDM4MWQzOGI4MjEyNTgzOGRkZjQzZmI3ZjViMjdkYzYiOiI0MDdjNzJkN2M4OTBjMDBiMjQ5YmUwMGE1M2FlNzIyZTVkODAzM2M4NGIxZTFhNmE2OWQ0YjI3OGJhNWRiOWViIjoiNjdhYjg4MTU2ZjIwZDAzYjNhMWJjMzYzZGFlZmMwYzYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzE0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI3Yjk1MzQzYTRhYzBmOGM4YjI2NDVjMzM3NTdhMzE0NiI6IjNkN2UyOTg3ODYwY2JjYmExNGExMjU5NGUxYTM5NGVlNzU0YzlhN2E2NWNlY2M5OTBiYzc5YjVlODZlNjcyZTEyZjhjMTQ0ZDg0M2UxYWJjYTQ2YjQ3NTlhMTFiM2QyOWY0ZTIxOTA3N2E4Njk2ZWZhZGVlNjE4ZjI1NGNiODBhIjoiMTYyOTc1MzRhNzljNGFlNzQ5MzE3ODIyNmIyOWU0MmE2ZjFlMDA2NmFlYWVlOGI1YWY2NWJjZWZhMmVlM2ViYiI6ImI0MjllZTk4NmYxNmZiMzVmZTJjNDdjMDNjMDkxODg3MGI0NTYwZjRlYzQ2NzhmOWRmNDcxY2JkN2NhNmE4ODciOiIyYjE0ZDYxMmViMDBjN2ZiYTBkOGUyM2JmOTFkZjkxZGFlZjZmOGUyNzllMDA1MGQ1NDk3ZGRmMGYzNDY2Yzc2IjoiOGY3MmMxNzQwNTE2MzA5MGZlMGJkNzk1YjY1ODExYzYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjMyNzI5MGRhMmU5YTE5Yzg0MGRlOGQzM2U0MjVlZmFhNWFhN2E3YWZhNGU1YTgxMjA2NTk2NTQ3OGQ2NDBmNzg1MjBjZjNjNjcwYjA5ODk0M2ZlYzE5MTRkNGM4YzQxMSI6IjgwYmRmMTgyODhjYjhhZGI2ZTNkYWNiMDljNTUzYWYyZTczMTdjMTk0ZDM3ZjQzM2VlYzI3ZTMyNGEwYmFkNzUyODk5YmRhOTFmZDQxZTVhMDhhY2RmZDc2MDA3YWVjYWJjMTljOTVhOGJjZWRlMzEwZjczMjBjZTk3YWFhZDBlIjoiIjoiIjoiIjoiYzI2MjIyNjYyZWQzYTY0OWExNzQ1ZGVlNWRmNGVlZjAiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImJlMTRmNDczNDcyZGIwN2E0M2I3ZjlhNTE3NzM1ZDdmN2VkZTJhYTcwZGJkYjcyOWJjNGY1NzhhMGRjZTlkN2ZlOWZkOTc5MzljZDFlZjczMTI2MjQxN2I1MjEzYmQ3ZiI6ImFjNzFmZjUzMTQwYzEzODNlYjM3OWU1MzExZTM3NjM3YWY5MzNkYjQ5NGU1ZTY4OWQwNjU2NjFlOTA5NWI4MzAyZTQxNzRjMzkyZjMyNGZhYzQzNjk1ZDkzODFlM2NmNDYyNmE1MzQ3OTM4ZWQ5ZTIxNTAyY2JkNzg5Y2NhMzYzIjoiIjoiIjoiIjoiNGJhYjk1ZjlmMDVmYzM2YTMzN2I2ZjI1ODJjMmNlOTgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6Ijg4YzMxZTI0ZjRmODU5YjY2ODk0NmNlNzNmODYwMDYyMWE3MDczMTQ0MDc2MmIzYzI2N2NlYWI1MmE5ZDc3YTIzZDZmNzBkZGJhMGU0NmE3ODY2OTdhOTA2Y2NiMThhMyI6ImJmOWJmMjVhOTQ5ZDQ0NzI3NGE4YzcyZjFhZTUxMzk5NTIxZjhhY2EzOWIxYjM3YmI3YjRkNWNmM2M2N2Q1NWVmOGRiYWNmYjcxYWE5YzU5NDk0MTZlMjg2OGI5Njg4ODNlNTE3MjE1YmMyMDI5Mjg5NGY4NDA2YWIzOWMxZWExIjoiIjoiIjoiIjoiODQxYWFhMGIxNzFkMTUyNmVmMzY1YjkyMDFhZGJmZjMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6Ijg1NDVhMGRlNWVhMDI4YzhlNTk3NmQ1YjU4ZmE1MDA3OWIyMGJhNzE2ZjA4NTZjYzFhZjdiOTg1MzdjODk1ZjAyNjZiOTU2NTQyZDJiOGNhNjYxYWVmNWRhMWY3ZjhjNSI6IjY4NmY0ZjllZTc0YzM0MDI4NDVmYmFkOTM1M2Q3ZGZlZmY3Mjc1ODRkODkyZWI2NGJkODRiNzY0MTEwY2JlNGFjODU4MWU3ZTIzYWNiOTVjYWYxMjk3OTk4M2U4OTQ3YzU3MDI2NGFlYzI5MmYxYzdiNzU2ZjcxODQwMDdkY2JhIjoiIjoiIjoiIjoiZjZkNmFlNjQ0OWIyOTg0ZGY4YmNiNjk1ODRmYjE2ZjMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImQ2Y2Q0YjRmYjkxMDUzNzQ2MDVkZWFjN2JiNDlhZDc5MmViMjI1ZGFhNTYwZjJhODZmNjYyNjliZjlhZmMyZWEwMWI2ZWU2ZjBlYjQ5MjZkMmYwOTMyOWRmNmU5MGQ3OSI6IjVkMWI4ZmEwY2EyZWUxMjdkMWJkNDE0MjNjMTdiOWE4YzczNjcxNWNjMjkwNjgxOGU5MjE2ZGZkODFiNzYzN2I2NmM4OWI3NzJiNTVhZTcwN2M2ZWZmYTJkOWNlNzQyNWRmMjZmOTY2NjQ2YWI2MTNkNTU5OTE0M2NmNTFlNWU4IjoiIjoiIjoiIjoiYzM2YWI0NTExMTZkNzMzZWI0Mzc3ZGUzNTExZGI1Y2UiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImU3M2ViYWUwZDA4MzRmZGZmMTgyOWFjM2Q5NzIyZmU5ZjFiYzY1YjVmNjUyZmFlNWY3NjE1YWYxMTY0NDBlM2Q1NzA5YjVjZGRkNjA2NWQ1NjhjMjQ2ODIwZGU0NmIwOSI6IjIwMjZjZjdjMWIxZmU5NjQ1YWI4NzU5OTU4YWMwNGZiMWQ4OTM4Yjk5MTNjM2I3ZjIyZGE4MWUzOThiMmMwMGIxOTIxZTFkNGVkYjVkMjFjNDUzMTUxNWNiMGY5NjQ0ZmU4MDY4Njg1YjlmY2E4MTMxNzZlNjc4MDc5NmU4ZGVkIjoiIjoiIjoiIjoiOThkMWRjZTMwNTkzZGU4YThkNWI0ZDk1NmY2YzY4NGIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzYKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImE1M2MxODEzYzA2YjYwOWVmZjlkZGM3NzIwNGIwODVjYTk4NWYyMjE3MGI4ZWNmY2JiZjQ1ZWExMWM0NWMyNGZjZjI1YmMzMzE1MGY5Zjk3Y2U0ODI0NGQ1YmViNjg1YyI6IjFkMGRkMWE4N2Q1OWM2OWYyOGUxMThlMTA4M2Q2NWYxZWUwZGYzMWY2MzA4YTkyZGNjNDc1MDNlYzRkMjBhMDE4ZDk4MjFjNmE3ZDY0Mzg1NzI0ZjBlOTQxMjMxNDI2ZTAyOGVmZTZkNzVlNTNmZjhlZGYwOTVlZjFiYWYyNjU2IjoiIjoiIjoiIjoiMDM1Y2VjM2EyNGJhN2M0NGU1YzE5NDM2YzI2ODlhNzUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzcKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjE2ZDViODI5MDY5M2E1YzQwYzVhNTI2ZGQ2ZDY1M2FjNTRjYWJiNTYwOGQ3N2JiMmNiN2Q2MjcwYjk2YzJmZTJkZTA3NjcxNmFlOGNmMGE1Yzc4MWVkYmRlODYxZGM3MCI6ImFhODJhNWVhMzM0MzlkMGMxNmExY2MxM2NiYWU1M2IxNjlmNGQzNjliY2JkYWU4MWE5YTM4MTI5YzY1YWUwZWE0ZjcyMDU3NmMwMTJmOGQ3ZWIxYzAyMDIwMDNjMzlkMjg0NTNhMjJlNTAyYjQ5NDljZjViYTIzYTcyNzcyMWJmIjoiIjoiIjoiIjoiZGU0ZWQ5ZDE2M2QxMWU5YjUyNDcwZDA3OGRmNGM4NjkiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjY4YmZhYmRiYjgyMWNiOTc4NTI3ZmYxOGNlMzdjOTZjNzlhZDc1MTc1NjU1MWYzNmI2OTkxOTgxMjg1YTY4ODU0ZWM3ZjcyZjU0OGMzMzk1YWQzZWU0MDQxMDA2NGQ0YiI6IjNkYTllOTUxOGViMWYxYjYyNjhlNDU5N2YxNTg4NDRmZjY3MmRkYjQxNGY3ZWMyM2ZhNjZkNmM4NmI5MGE3MzJhN2IzMDE2YTMzODdlYzNkYmVkMzRlYjQ3OTQxM2QwMTc5MzJlYmY5ZjJhMmZlYTBiMzVkMmJmNGUwNjcxOGY5IjoiIjoiIjoiIjoiZWM0ZTNlMmI2Yjg3NjNkZWIxN2I4NjExZDFmZTc5NTMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzkKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjE3MWE3NGFiNjk0YTdkN2MyYmFhM2NjZjEwM2FkOTRmMTEwOTRlMDdhOTU1YWU5YWMzYmFkMzcwZjE0NDg3NTNlOTliNjNjYzIzZDE4NzhhYjY2Zjk0MTM2ZWMyZWNhYyI6IjcyZWJlZGE3MzQyNzcwZDAzYmMwZTUzMTc1NGY5NDZjYTVjY2E2ODRjNDFmOWQwODlmZTkxNDdmYWQ5M2I2MTU0OTE5YzVjYjJlNmQxNjJmYmZkZTdiOWZmMGFhNTkwYTE3OTkzY2E2YzgwYmQ1OWVlZTQxMzRmYzJjZTk0NGQ4IjoiIjoiIjoiIjoiNTgyYWI0ZjEwNWMzZTFmZWQ5NTkzZjU4ZmMzMzVmYzMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzEwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJjYWVkMzAwMTViMzQwNjQ3NjI1OTFlYmE5YTU5ZjQ0MDU2NmE2NjIxODMyZjY1MDU3MjM2MjIyOWU4YTM4Y2QwZjVkNmQzMjJhZmQ4NDQ0MTMyMDU2NjkwZDZmYTU1NDAiOiI4ZTI3ZjBkYmVhZTQ2MTNiY2YwMDExMTA1ZjgyNGVkMmVjYjE1MGE4M2EwOTk0ZjhmNjYwNzgzMzc1NTIxNmUwMTZmYjE3NWU1MWQ0MjM3MGFmZTI3YjExYzE4NDc3ODg2YjUzMGM5NWJjMzFiZDFjMGY4ZmUwMGY2MWZjMTVhMCI6IiI6IiI6IiI6ImQ0Mjc4N2U5NzE0N2Q0NTdmMTU5MGM3NDI0NDNhZDkyIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYzU4ZDYyZjgxNDU2MjJjZDg2Y2ZiZGE2NmJjMjZkMmNlNGM1NjEwY2Q5Y2QxYzMyNmI5OWI2MDM1NWE2ZmU3NTE3ODNjMDdmMmNjMjFiYTY4ZjFmMjBjYTcwZjBhZDMxIjoiMzhhOGI2ODVlNmJiYWI2NzgyNGY0Y2M3Mjk5NTA0M2VhMjg1NGYwNjdmMmFmYWVjNzYyYzllNzhmZjlkNTg1YTI1YmM2M2M4ZDBkMDc1ZDA2ZDQzZjNmNjk0NzMzOTgyZDI2Y2JlMDY0OGIyZDBjZjgwNTM5MThiOTEyYzMwM2EiOiIiOiIiOiIiOiI4NDAwMTcwOWYxNWEyZmQxNjdjMTYxYjVkMzc2ZDg2ZCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMTIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImRjOTcxOTA1MGQ1MjU3MTUyZDhhN2Q2MGQzZWYxZmM1YjhjYjE3MDBiYWZjN2RlODYzYzAxOWYyNDQ3NzljNDY0YjYyMTRmMjFhMmY2ZDBhYTNjYTI4MjAwNzYxNWNlNSI6ImYxODhhMWJhMjFiMTc5MWViZjhhMDhkOGJhNTU1ZTQ5NDIzZDkxNzhhNTYxYmNjMTY3MjUzOWMzYTdiYTFkODU2ZWFlOTkyMmM0ZDk2YzE4MWVkMDQ1ZDZmMWQxNWU4NTU2OTBjZGFlNDUxZWRhYzYwZjFjYTIwMjFmMWZlYzU3IjoiIjoiIjoiIjoiNzU0MGZlZDMxM2M5NjI2MWNhYzI1NWJmODNiNWFlOTkiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzEzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJmZjA1Nzc4MWFmNGE0YTFlZWZlYjI2YWIzOGY4MmEyZWZiNmYwNjVkZTI5MGViZjIyNWJkNjkzZGZiMWY5NzQ1NWI0OTE0M2JkYjQzMDMyNGM5ZDk0NWM0ODgyNGY2Y2MiOiIwZGRkMGY0YTQzYTdiNTRkOWFiYjA5MjhhMjI0MmMzNzhkYjdhOTVhMGIyMDZiYWE2NDJhZmU1Y2Q1NTEwOGY0MTJmMWQ3MjdmZDU5MWJjYTJjNzYzNTVhYTYyYWE4NjM4Y2ZhMTkxNjczOWJjNjZlMDJiOTQ1OWNjZDA4ODFiYSI6IiI6IiI6IiI6IjhiNmU3NGE5NGZjYWMwZDJmMjEyZDM1OTQyMTNmYmI2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZWYwMjczMjdlNDdmYzU4NzVjMDFjYjE3ZDc5OGZkYzJiMjdhNWM3ODAwMDcyNzg0MmY4YTUxNmY0ZThkZDM0YWZjMTY3YWUxNDViMWU3NjNiZWJkY2E1MWUyZjQ2MWE3IjoiMTI4NTY2ZmU2YzViNTU5NTc0MjE5MDUxOTQ0NWMyNWRiODVlZTBjZTI5MzcxZjRjYWIyMTM0MDBkNDc5ZDJiZmUyNzY1NTE1NWJlMGZhMjM3MTczYWJiMjE0ZjAyMjZhMmYxNzcwODAyZGQ2OTQ4NWFkYjI1ZTZkODM3NDg1ZTEiOiIiOiIiOiIiOiI3NmNkMTU1M2IyYjczZDRlZjYwNDNhMDlmYjkwZDY3OSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI4ZTFhNTkyMTBmODc2ZDAxNzEwOWNiOTBjN2Q1ZGQ2NjliMzc1ZDk3MTI2NmI3MzIwYmE4ZGI5YmQ3OWIzNzNiY2M4OTU5NzQ0NjBlMDhlYWRkMDdhMDBjZTdiZGFkZTkiOiIyMzY3N2MwNGEyZDZhYjQ0NmI3YjNjNTgyYTgwNzE2NTRkMjc4NTk0NDFiMTA3OTlmMDhiNzg4Mzc4YjkyNmNhNDMwNmU3Y2I1YzBmOWYxMDRjNjA3ZmJmMGMzNzliZTQ5NDI2ZTUzYmY1NjM3MjI1YjU1MWYwY2M2OTRkNjU5MyI6IjE5ZTkxNGZmYmM2ZDg3MmJlMDEwZDY2YjE3ODc0MDEwZWM4YjAzNmEzZDYwZDdmN2RkYTVhY2NjNjk2MmE1NDIiOiJiZDdhMGMwOWU3ODBlMGFkNzgzZmQ3MDgzNTViOGRmNzdiNDQ1NGMzZDYwNmZiOGRlMDUzYmZmYTVlY2Y5MDIxIjoiZDI4NGRjMmNhZjZkMjE0Zjg5MDllZmM5YTc1Mjk3YmNjZmMwNDM1M2MyNzg4YTk2ZjhiNzUyNzQ5YzdmZWMwYyI6IjEyOWQyNTZlN2RiNjI2OWU1YTBhMTYwZDIyNzhmMzA1IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjAwNjc0ZTYzMzY3MGM5OTcxYmU3YWY3ODlkMzdkNWE0ZWY1NjdiM2NhNDc2NjcyMmNkOGY2N2UwOWQyMWNiYmZhMDhkNDNlYTFhYTI1OTk5OWM2YTMwN2FlNjM0N2Q2MiI6ImVjNDdiMDI5NjQzZjg1ZWExOTM4OGI2ZTlkZTZhYjIyNzA1YjA2MGFlMTBjZWU3MTI2MjAyN2QwYmRmZjVlZmQ3MzkzYWY2MTliYzY2NTg2MTJmYWJjNzg0MzlhMGJkNWEwMTI1NTU2M2E5NjAxM2ZhMTMwZGQwNmZkMGY1NDQyIjoiNWI5MmJjZTNmODc2NDUxMjZkYWE0NzA0ZmQ3ZGY5OGI4ODBhYTA3NzQzYTU3Mzk5Yjk4NWFkMWEwMGIxZjJmYyI6IjgxOTlkZTEzMzhjNjg4MjM0Yzc3MjYyZWYzNTQyM2Y0Njk1YjI3NzcyNmM3NmQ4YjVmNDI2Mzk5YzE0ZDgzYjUiOiJlYjk1ZjVhNGQ4NDAwY2VjMmQ0ZTBmNTQ4YjZlOTI2MzZiNWUyODRmYjZiNjE3NjZhMWYzNWJiOWNkYzVkZjBhIjoiOWZiZTk1ODE3NTc4ZWIyNzJhYTlkYTJmNTA5YzJhMDYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMjU1MzQyM2MzY2IwZmFlOGNhNTRhZjU2ZjQ5NmU5OTM1ZDVhZjQ3Mzg4OThmNzdmNzg5YTliZWU4NjdkZmJjNjAxMGM0ZTViYzY4ZGEyYjkyMmNkZDg0ZWVhNjhlMWRhIjoiYTliZWJkMTM3MTFjMGMyMmM5NGIzMjUyNjU0ODU0NTE1YTlkYzAxNWZlNjllNjg4ZmJhYzk2NzZiM2Q3N2FiNjdlMTliMDIwY2QyNDI3YWM3ODljYTE3ZjY1NmU0OTliZTNiYTNhYjIwNzVmZjk1MjQ3YzYzNTUxNTdlZWJjNzkiOiJlNzRlNDVmYTI4Njk3YTA2ZGFiMDg1NDVmZGUwY2MyNmU3ZWNhMzFjNDBhYTY4ZWU0MWM0ZGU0MDJmZGNjOTYxIjoiNWFhOGFiZjcwNjIwNzk5MjlkNmExMzFjZDM4NDRhNWZiNjUxNGMwNzA2MWUyNWNhZDY3Njc3ZDg2NzI5NzY4NSI6Ijg0ODE5MTA5YjJlMDliNDZiYTNmNTQ2NGMzNGIyOGNlMjVhMTg2ZjBlMGZkODNmZTVmYTBhYjAyNmMwMTI5MmEiOiIzODQ2ZjM0MDZlNDkwNDBjNDhiNWNmYzljYmM3NWQxYSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI4NTZmMTM3MTQ1NGJiOWFhMDZiZTg5N2RjZGE5YjI5NTgxN2M2ZWViODY1YTlhY2IzYTg5ZDE0NWJmZTI5Y2U1ZTFiM2IxMmI3MTQ1NzFhZmRmYWNhNzk1MWNkNDdlMzMiOiJhNjkxYjhiZjZhNDA3YzkzYTM2ZDE4YWVjZWQ0Yzc1Zjc2ZDgzOTdkNGVjYmNkNGU4ZjgyMGNiMzkzMTg2ODk3ZjA1YzFlZjY2OGIwMjdmYzc4YmE2ZGE5YmQ1NTRjYzMxYTQ2N2Q0N2I1ZTUzNGI1MzQwYzc3OTkzODNlYzA1YyI6IjJjODFkMWU5NGIzMzE2NGExNzdkMDE4M2QxODJmZTdkMjNlZjRmODg0NDQyNDY0NjRlNThiZGQwZGUzOGQ4MmMiOiIxYjVkYWU4MWM5Njc3MWJlYTA5MTUyMWMwOTczYzVhZjc2YTAzZTM2MjQxNjBlMjUxMWU1N2ZmNDNhMWQzMmE5IjoiYmY1ODc4ZTJiZDEzOWY4ZjA1OGYzZDgzNGFjZDc3MTUxNGRhNmQ0YzViOWVmODQ0NjZlNWE0ZTBlNGIyZWFhZiI6IjZhNWVhNzNhYWQ0NzZjZTIwMWUxNzNkNGQ1YTdmZmNjIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjA0MzYwNzVjZjhjZjYyY2U2MjNjMjMwMWViZDQ1MjAzYzk4MjgyNjExY2ZhNWExMmRkN2MwNDUyNWZmYTdlYjM0M2E2MDdhZjJmNTdmZWI3Y2UzYWY5N2UwYWJjMjI4NSI6IjFhYjlhZGE1ZWVlYmMzZmM4ZTUzZjM1OGI2NDM0NzZmY2ZkNGRkOWYwOTJmMjFkMmJjMWM0YmIxZmZkMDFhMGM1YjIwN2FhYTA5ZmY3NmE5Y2FiMGFhNmNlNjJiNmE2NWIyNjUwYWI0NDhiOGJiMmU4Njk2YTdhYTRiNmY0ZThkIjoiNjJmMDdkMWY0OWU0MGY3ZjQ3Mjk4NTk0N2FjNGQ4ZWYyZDU4MjE2ZDkxOGY3OTQyYjljNzBmNDNkYWZmODk3MiI6IjM3YWU3NTgxNDFmYmM4OTBlZTdlMWQwODU0NDI2YjI5ODRmYjFjMDk0Njc3ZTZhNjE1NDZlOTMxNWJhYjA4OTgiOiIzNTNkMWRkMGM4ZDg2NTZiYzQxOGE2YTNhY2UxMzhlY2Q2MjgxOWQ0ZTIxYjhiZDg3Njk0ZWE2ODNlYzBjYzM3IjoiYmZlZTZiYjRhZmMyMjhkYTk4MWJmZTdmMGQxNzU3OGIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjNQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZDAwNGEwODkzYmYzMjZkNTBlZTUyZTA0Y2IzZTY0NDA5ZjIwNGY0ZTlhZjc4MGQ1ZGQwOTJkMDQxNjJkMDg4Mzg1YjFmMjQzMDAwOTE0YzYyY2JhM2RhZGY5ODI3YzgxIjoiYzM2MDA0MDc1ZjVmZDA3ODEzN2VhMDhkZTZjYjE1ZjcxYWViOWVjYTIxYzg5MWNmZGY3YThjMGQyMTc5MGM5NGZmYTkzYmU1ZmEwNmJlYjVlODJkOWZiZjE3M2VmOWIyOWMxODUxMWZlZTI0NTVkYmJlNjFkNmIwMWJhZjAyNGEiOiI3ZDMxM2FkYTEzMTY1MGM3YTUwNmQyYzE5NDQ0NGVkMjAyZDU2ODU0NGNhYTc1YmJjNjBlNTdhMGI3NGM5YTEwIjoiNzkxZDYwMjM4Njc3ZmY1MzE1MGNmNzA3NDA2MWVhYzY4MzM1YzBhN2NlYzdkZTQzZWE2M2E1ZGYwZjMxMmNkOCI6IjY3NTQzNjZiZTI2NGRlYjllOTRmMzllOTJhYzI4OTRiZDkzYzFkN2UxMTk4ZDM5ZTZlZGRjY2IwZWE0ODZmNGQiOiIxYzI5Nzk1ZjAzZTNjNzcxNjAzMjkzNDczZTM0N2FiNCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM2CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI5YThjNzliNDhhZGE0MDkxODNmNzI2MGFhMTQxNWM5ZWU0ZTBiNjYyZTBmYjgxYjVjNTZmODVkNzZlZDc1ZWZhYzU3NTFkZDRkZTdlN2Y4YjUzYTM2ZWUwZGNlMmJjOWUiOiJjNGQ2OGI3NmRjMGU3ODU4MjNiZTJkYTlkMzM5ZGM5MDAxMzJmMTI3MjFlOGE2M2ViZTkyZTM2ZDc0MGM1YTVlNTU2NGMzNjdiZmY0YTUyYmM3MGIxYzYwYzg2ZjBiY2I3YzFkOTljNDE0OTU2YTI1OTk2MzIwNzE4NGYwMTI0NiI6IjA0YzcwNjBmMzY1NjlhNWQ5NTc4YzcxODYyN2ZjMjY5NWU4ZDc4M2MwYzhhZWZjYTI3NDRkYTY2NjRlNjdjOGMiOiIxZDRiN2Q1ODc0MjFkZWE0ZjdmM2U3N2ZjZjk5NzYwN2VjZmViNmU2NjVhOWExODQxMzhlYjU3MzZiMTZmNTE2IjoiOGNiOGRhZjljZGEyMzBkOGQzOWI4MjliOTY4YWFhNWY1ZDNlMzEwNmQ4YjY5MzIyN2FiMWI2MjAxYjc4YTdiOCI6ImZhYTE0NjA5ODUyNjU0NjkyN2E0M2ZhNGE1MDczZTQ2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzcKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImEwNzM2YTVhOGIwYTM5NDYyNWQ4OTg1YjA1ZTNhOWYyNzdjN2JhMDNiMjUzYzBlNzgzMzU5YThjNGMwODYxMjFjYjQ2ZWE0NjljNzc1NmQ1ZjA5OWY1ZWU4ZWQxNjI0MyI6ImVhN2EwNDZmYTE3NjA4NjZiY2IzN2ZlY2Y5YWRlN2JjZWE0NDQ0NjYyZWE3ODJkNmYyODIwYjIyYTk2YmFiOTdiNGM1YWRjYjBhNTBjZWQ4ODUxMjFiNmI4NWE1MDc0NDQ0YjE1NTVkOTY1NWY0ZjZkZWQzMWZlMTUyODFiMzBlIjoiNDdmMzY1NWRkMDVjNDI0NTRmYWQ2OGUzMzBhYWJjYTQ5ZjI3Yzc2YmEwNWVmMDdiNmQ3N2ZiYTQxMTUzYzBhYiI6ImE1ZDA3ZGEzZTM5OWNjNTFkMTM2MDk2NTk5ZmNiZDk3NzllODM5YjFmZDg2ZjIxZDdkMWUyM2FjZDkxZjlmYTciOiIxNTBiMDI4YjY0YTk4OGZjMWZmZGZjOWU2NmI0YzhkZmU0ZmNkODUzOGVlOTc2Yzg5OTIzNjM4ZWJhZDMzODAyIjoiNmZmZGM2ODUxNjliMTc0YWQwZGQ4NGNkZWVkMDUwYTciCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjOAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZDQ0NWEzZDkzMzJjODU3NzcxNWMxZTkzZjExOTUyMWJkMzFhNDY0ZGIwOGNkYmQ3M2Q1MDA4MGQ2MmQ1YTQ4ZmJhNGNlZjJkZDA5N2VjNzQ5OTczMDM3ZTMzZThkNmZhIjoiZGE1ZjliMmRiMTNkMDU1NTg0NmMwMGRhOTYxMTUwMzZiYjc1YWNlNjZkNTZmYzU4MmQ2Y2QwMTcxZTNlMjMzMzVjNWMyYjg2OTFlNThhZjg4OTllZDAyMDQzMTY0NzlmODQ5Y2E2ZjQ3MzA5Y2FlNTcxY2NiNDJkM2QzNWMxNjYiOiI3OTM0NjM5NGY3OTVmMDVjNWE1MTk5NDIzNjQ5YjhiNTM0NTM1NWVmMTFlYjQyMzlkYjFjNzY3YzY4YWZhNzBhIjoiYzIyODEwZGU5OTg3YjIyOGMxOTY4MGViMDQ0ZGEyMmEwODAzMjE0OGE2MDE1ZjM1ODg0OWQ2ZDYwOGEyMTRiOSI6Ijc3NDdkNjhjYThiY2I0MzkzMWYxZWRjZTRmOGM5NzI3ZGQ1NmMxZDFkMjYwMGFkMWZiNzY3ZWI0ZmJjN2IyZDYiOiJmNWM0MGJhYmJlYzk3Y2I2MGJhNjUyMDBlODJkN2E2OCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM5CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIyNzI4YmUwNjc5NmUyYTc3YzYwYTQwMTc1MmNkMzZlNGEwNTE3MjRhYTMyNzZhMTQ2YjRiMzUxMDE3ZWVlNzljODI1NzM5OGM2MTJmYzExMjljMGU3NGVjZWY0NTVjZDMiOiJkNjYzZDJjZmNkZGY0MGZmNjEzNzdjMzgxMTI2NmQ5MjdhNWRmYzdiNzNjZjU0OWU2NzNlNWExNWY0MDU2YWQxZjk3MzNjOGVkODc1ZmY3NzkyODI4NGRjMWNkYjMzYWNjYzQ3OTcxZDM2MjY2MTVhNDViOWExNmQ5YmFmNDI2ZSI6IjYyMzQ5ZWZiYWM0YTQ3NDdkMGU5MjcyN2M2N2E2YmM3Zjg0MDRjZjc0NjAwMmU3ZDNlZWZmYjlhOWJlMGJiZGMiOiIzODFjMGNmZmJkZmE2MWE2YWYzZjExY2NkMGU1NDMyMDhiNTg0YzNmNTIwMTMwZTMzNjE3NTY0ZWM3YTQ4Y2Y3IjoiNjk3NDA0MzM2MmY4MzRmZDc5M2RlMDdjZWViZDA1MTU5OTE2M2Q1MDQ4OTQ0MTAwNWFmYzlkYjA5YTlhYjQ0ZiI6ImRmNzg5NDc0NmM1OTllMDJkOTg1YjE5NWNhM2I0ODYzIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzEwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIyYjY1YjU2ZGU0MTBlZTgyZTU1YmQyYmY4MGU2Y2VlMzU2YTM3YzNhM2FhNzA0MmRmNDVmYTc1MGE3NGUwOTdiMDcxZmMxOGQ2ZWVkOTY1MjNkZDRmYmI2NzdiOGM3MjkiOiJiZjAzYTZiM2U4ZTIzZmY1MzM2OWI5NzEyMTdkYzNkM2Y0YzEyMTEzMjljOTQ4NDczNDdiM2FhNzdkYzdhM2UwNjcwMzgxNTczNTI3ODQ0YTFhZGU3ODZmMTg2MzE5NDQ1NThkZWZmZmI5YTAwOTAwY2E1NWY5N2VjNzI2MTI2YiI6IjU5MjU1ZTVjZDIyMjEzMTZjOTQ1YmQ2MTQ0NzFkZjc2ZDViMmYzOTRiODgyOWRlODJlNWMzMGJjMTc4NTY1ZTIiOiI1NzM5YmMxNGYwZjJlZjlkMzM5MzkyOGFlZTY3YjA5MDhhZGFmNTg3NjUwOTI4OTE2ZDhhZTc4YjAwNzdhM2IzIjoiNmIyMzZjZjBlZTBkYmEwYzkyYjI2YzYwMjM1ZDM4Njg3MTVhODBjMGVmYmMwYzg5OGI2ZjBiMWFjZTgxNDZlOSI6IjgzNzRiNTcxZDdmMmQ5NGNlMmJkYWRlYjlkODE1Mzk3IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzExCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI4NzU2ZWUyYzVlMzgxYzdjMWRjNTMwNzQ4Yjc2YTYyNzRlZjY1ODMwOTBlNTU1ZDg1MjEwZTIzNTZmZWIyOTc0YThmMTUxMTlhMDRlOWI0ODFjZDNiYzU1N2ExOTdiOGUiOiIxOTcwNTc0M2VhYWFhMGU4ODkwYTBmYWEyZTBkZjM3YzgyMGQ1NTZjN2E0NWYwNGQ3NjI3NmY5ZjljZTJlN2MxMzMyNThhZTZkMWJhOWNkZjc3NDVkMDE3NDU3NjNkMThkY2QxYWYyYzllOWIwYmVkMjgwNmU2MGYwZjliNjM2YyI6IjJiNGE5MmI2ODJlOWE1NTc0NjZhZjk3YjczNWUyZmZkYmFjM2JmYzMxZmQ1YmUyY2QyMTJjZmJkNGI4ZDY5MGEiOiJlODY1MDRmMTAzMTdiYmVhYjM0NmYzYjllNGIzMTBjYmU5ZmJkODFhNDIwNTRmMzU4ZWFjZDA4Y2NjYWI2ZWZmIjoiMTlmZmFkODU2YTY2NzUyNjhjYzQ2NGNhNmZkYjhhZmQwOTEyMTQzZTU1MjY2ODUyOGQxNDg0YzlhNTQ1OTJjZiI6ImYzNDdmZDU4YWZmMjk5OTUzMGUyNThiZTc3NTkxNzAxIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzEyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJmNThiZTU3ZTUwMzVkNWM0NTViMTdhNDFjY2Y3NTQyZmZkNzdmNWMwMDllMGE3MzcxMThlZDZjNDE4OGY3OGZjYmRiZTk0NmJmODJlMWZhNTBmZDgxNjkxZGU4MmRjZjMiOiJmOTkzOTU5MmFiMmIzMWQ5MmFjNzI2NzNkYTAxM2E1ODhlYTE3YmJmMDJjZmQ2ZTc5ZDc5ZjgyOTY2MDE2MzNkMDRjZWIwMDUxMTBmMjY2ZTYxMDAwNDBlZjMzMTk0ODU4ZGVmOGI1MzUzMTRjNzNjYWEwZTQ4ZmM0ZDJmNmUyZCI6ImJiMWNiMjFhMzE2ZDRiODgwOTNjYmZjNzkxN2Q2MTRkY2E5NzA5MGNkYzhiYjM0MGQ4NjQ1NDdjYjNlMWZlZjYiOiI3ZTQyZDU0MzlkODE2ODBjOGVkZjVjNTcxZDU0ODY5OTczMGNmYWRhMzNiNjUwYTRkNTEwMTcyYTQyYjI5OGJiIjoiZTllM2NmMTgwZjcyYmEyYzFhNDVkMGE5NGI4MjI5NDM2MTIxNDNlMGI2NDIzOTg3OTZiMDQyOGFlMWFmNmNmNSI6ImQwYzgzYTRiZjM1MTc2NDhiNDQxZDQxMWRkY2I4MDhjIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzEzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI4OTgwNjQyNDNlNDRmZjY3MTUxNzM2Y2U4YmI2ZjFjNzU5Y2FiNGFhY2E5Yjg3NTQzYTFhYzk4NGVmOTU1Y2Q1ZGI3NmMxYWE1NmFmZjgzZjFmNjc5OWYxOGZlNTMxY2MiOiJiOGQ2YmUzMDM2ZWViNTY1N2ZiMTA3NjYzNTRkNGJlODk3YmQyNzk3M2IzNTMwMjcwY2NjMDJhMDgxNjlhMmU0MzdiMzBhMzYzNWViNmNjYjMxMGYzMTkyNTdmNThkOGFhMDMwYzhhYWI2MTY0MThlMDkxNGE0NjEzMTMwNmEwYyI6IjM3NTcyNDI4ZGY1ODI2ZTZhZTVjZTk1ZGI0ZWY2M2Y0MWU5MDhmNjg1MjA0YTdiNjRlZGI5ZjQ3M2M0MWU0NWMiOiIyOGJlZGEwZTBlMzQ2YjQ0N2QzMjIwOGM2YjRjNDJkY2Q1NjdhY2ZlMWU0ODNmYjRhOTVlYTgyY2I4Y2U1NWE1IjoiN2EwZmZmYTU0MWQ3MjNlMTYzNDBlZWI5NjBiMWI5YzlhYWU5MTI0NzdlMGViZmFjMDNmOGYxYTNhOGJkYzUzMSI6IjYxMWM5ZjZmYzUxOTNkYmUzZGI5NmNiY2QyNzYxNjhhIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzE0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI1MGRlNzI5MDNiOWQ5OTc2NDEyM2ZmYWEwYzcyMWUxNGFkMWFiNWM0NmEzNGMwNDBmMjUzMjRiYTFkOTM3YjhlZjEwNDY3MTYxZmNmMjk3OGMyYTY4MGFjNTU3MGM2ZDIiOiI1Yzk5NTRmZDAxNDNlNjJjM2JmMmQ1NzM0MDUyZTNjOTM3MGY3YjlkNzVjNzBmNThmZTMzYjEyZTM5OTdlZTJjOGRiODRmODQ2N2FmZmQ3Y2ZkOWE5ZTdlYzYwZGE2ZjMxYmY5YmYzMmFlZGY2NDRlNDkzNGJkMWZjOTE2YmM4ZCI6ImQ1ZGM0YzlmYzcxNzFmY2JmZGFlYWQ1NThhNTY1ZmZkNTVkMjQ1YTU4YjIyYWQxNjY2ZWUwNTEzMWUzM2Y0OWUiOiJlYTMxMTRlOTJlNmExOWY1M2IyMDdhMGE1NGNkMzYzYTZkMDUzZmVkMGE4MjdmOTI1NTZmMGE4NTgwZjdhMzQyIjoiNTM2ODZmMDY5YjQ1NWFmNDY5Mjg4OGQxMWZhYzE1Y2Y3YjRiZDM4ZTE5OGRlNGU2MmI3MDk4Zjg3NTE5OGE3NSI6IjlmYjBkZjA1M2UwMzQ1ZTU2NDBhYTk3ZmVkZWY1MGE2IgorCitDVFJfRFJCRyBlbnRyb3B5IHVzYWdlCitjdHJfZHJiZ19lbnRyb3B5X3VzYWdlOgorCitDVFJfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlCitjdHJfZHJiZ19zZWVkX2ZpbGU6ImRhdGFfZmlsZXMvY3RyX2RyYmdfc2VlZCI6MAorCitDVFJfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlCitjdHJfZHJiZ19zZWVkX2ZpbGU6Im5vX3N1Y2hfZGlyL2ZpbGUiOk1CRURUTFNfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1IKKworQ1RSX0RSQkcgU3BlY2lhbCBCZWhhdmlvdXJzCitjdHJfZHJiZ19zcGVjaWFsX2JlaGF2aW91cnM6CisKK0NUUl9EUkJHIHNlbGYgdGVzdAorY3RyX2RyYmdfc2VsZnRlc3Q6CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jdHJfZHJiZy5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jdHJfZHJiZy5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWNmYjhiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2N0cl9kcmJnLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMjIxIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisKK2ludCB0ZXN0X29mZnNldF9pZHg7CitpbnQgbWJlZHRsc19lbnRyb3B5X2Z1bmMoIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopIGRhdGE7CisgICAgbWVtY3B5KCBidWYsIHAgKyB0ZXN0X29mZnNldF9pZHgsIGxlbiApOworICAgIHRlc3Rfb2Zmc2V0X2lkeCArPSBsZW47CisgICAgcmV0dXJuKCAwICk7Cit9CisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0NUUl9EUkJHX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGN0cl9kcmJnX3NwZWNpYWxfYmVoYXZpb3VycyggKQoreworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZGl0aW9uYWxbNTEyXTsKKworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0eCApOworICAgIG1lbXNldCggb3V0cHV0LCAwLCBzaXplb2YoIG91dHB1dCApICk7CisgICAgbWVtc2V0KCBhZGRpdGlvbmFsLCAwLCBzaXplb2YoIGFkZGl0aW9uYWwgKSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBNQkVEVExTX0NUUl9EUkJHX01BWF9SRVFVRVNUICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwsIDE2ICkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NUUl9EUkJHX1JFUVVFU1RfVE9PX0JJRyApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbV93aXRoX2FkZCggJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsLCBNQkVEVExTX0NUUl9EUkJHX01BWF9JTlBVVCArIDEgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ1RSX0RSQkdfSU5QVVRfVE9PX0JJRyApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmVzZWVkKCAmY3R4LCBhZGRpdGlvbmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19DVFJfRFJCR19NQVhfU0VFRF9JTlBVVCArIDEgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ1RSX0RSQkdfSU5QVVRfVE9PX0JJRyApOworZXhpdDoKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgY3RyX2RyYmdfdmFsaWRhdGVfcHIoIGNoYXIgKmFkZF9pbml0X3N0cmluZywgY2hhciAqZW50cm9weV9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphZGQxX3N0cmluZywgY2hhciAqYWRkMl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZXN1bHRfc3RyICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGVudHJvcHlbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZF9pbml0WzUxMl07CisgICAgdW5zaWduZWQgY2hhciBhZGQxWzUxMl07CisgICAgdW5zaWduZWQgY2hhciBhZGQyWzUxMl07CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X3N0cls1MTJdOworICAgIGludCBhZGRfaW5pdF9sZW4sIGFkZDFfbGVuLCBhZGQyX2xlbjsKKworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0eCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMCwgNTEyICk7CisKKyAgICB1bmhleGlmeSggZW50cm9weSwgZW50cm9weV9zdHJpbmcgKTsKKyAgICBhZGRfaW5pdF9sZW4gPSB1bmhleGlmeSggYWRkX2luaXQsIGFkZF9pbml0X3N0cmluZyApOworICAgIGFkZDFfbGVuID0gdW5oZXhpZnkoIGFkZDEsIGFkZDFfc3RyaW5nICk7CisgICAgYWRkMl9sZW4gPSB1bmhleGlmeSggYWRkMiwgYWRkMl9zdHJpbmcgKTsKKworICAgIHRlc3Rfb2Zmc2V0X2lkeCA9IDA7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfc2VlZF9lbnRyb3B5X2xlbiggJmN0eCwgbWJlZHRsc19lbnRyb3B5X2Z1bmMsIGVudHJvcHksIGFkZF9pbml0LCBhZGRfaW5pdF9sZW4sIDMyICkgPT0gMCApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSggJmN0eCwgTUJFRFRMU19DVFJfRFJCR19QUl9PTiApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LCBidWYsIDE2LCBhZGQxLCBhZGQxX2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsIGJ1ZiwgMTYsIGFkZDIsIGFkZDJfbGVuICkgPT0gMCApOworICAgIGhleGlmeSggb3V0cHV0X3N0ciwgYnVmLCAxNiApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIG91dHB1dF9zdHIsIHJlc3VsdF9zdHIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGN0cl9kcmJnX3ZhbGlkYXRlX25vcHIoIGNoYXIgKmFkZF9pbml0X3N0cmluZywgY2hhciAqZW50cm9weV9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFkZDFfc3RyaW5nLCBjaGFyICphZGRfcmVzZWVkX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYWRkMl9zdHJpbmcsIGNoYXIgKnJlc3VsdF9zdHIgKQoreworICAgIHVuc2lnbmVkIGNoYXIgZW50cm9weVs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkX2luaXRbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZDFbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZF9yZXNlZWRbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZDJbNTEyXTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzUxMl07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzUxMl07CisgICAgaW50IGFkZF9pbml0X2xlbiwgYWRkMV9sZW4sIGFkZF9yZXNlZWRfbGVuLCBhZGQyX2xlbjsKKworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0eCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMCwgNTEyICk7CisKKyAgICB1bmhleGlmeSggZW50cm9weSwgZW50cm9weV9zdHJpbmcgKTsKKyAgICBhZGRfaW5pdF9sZW4gPSB1bmhleGlmeSggYWRkX2luaXQsIGFkZF9pbml0X3N0cmluZyApOworICAgIGFkZDFfbGVuID0gdW5oZXhpZnkoIGFkZDEsIGFkZDFfc3RyaW5nICk7CisgICAgYWRkX3Jlc2VlZF9sZW4gPSB1bmhleGlmeSggYWRkX3Jlc2VlZCwgYWRkX3Jlc2VlZF9zdHJpbmcgKTsKKyAgICBhZGQyX2xlbiA9IHVuaGV4aWZ5KCBhZGQyLCBhZGQyX3N0cmluZyApOworCisgICAgdGVzdF9vZmZzZXRfaWR4ID0gMDsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19zZWVkX2VudHJvcHlfbGVuKCAmY3R4LCBtYmVkdGxzX2VudHJvcHlfZnVuYywgZW50cm9weSwgYWRkX2luaXQsIGFkZF9pbml0X2xlbiwgMzIgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsIGJ1ZiwgMTYsIGFkZDEsIGFkZDFfbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3Jlc2VlZCggJmN0eCwgYWRkX3Jlc2VlZCwgYWRkX3Jlc2VlZF9sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LCBidWYsIDE2LCBhZGQyLCBhZGQyX2xlbiApID09IDAgKTsKKyAgICBoZXhpZnkoIG91dHB1dF9zdHIsIGJ1ZiwgMTYgKTsKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBvdXRwdXRfc3RyLCByZXN1bHRfc3RyICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBjdHJfZHJiZ19lbnRyb3B5X3VzYWdlKCApCit7CisgICAgdW5zaWduZWQgY2hhciBvdXRbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGVudHJvcHlbMTAyNF07CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgaSwgcmVwcyA9IDEwOworICAgIGludCBsYXN0X2lkeDsKKworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0eCApOworICAgIHRlc3Rfb2Zmc2V0X2lkeCA9IDA7CisgICAgbWVtc2V0KCBlbnRyb3B5LCAwLCBzaXplb2YoIGVudHJvcHkgKSApOworICAgIG1lbXNldCggb3V0LCAwLCBzaXplb2YoIG91dCApICk7CisgICAgbWVtc2V0KCBhZGQsIDAsIHNpemVvZiggYWRkICkgKTsKKworICAgIC8qIEluaXQgbXVzdCB1c2UgZW50cm9weSAqLworICAgIGxhc3RfaWR4ID0gdGVzdF9vZmZzZXRfaWR4OworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHgsIG1iZWR0bHNfZW50cm9weV9mdW5jLCBlbnRyb3B5LCBOVUxMLCAwICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBsYXN0X2lkeCA8IHRlc3Rfb2Zmc2V0X2lkeCApOworCisgICAgLyogQnkgZGVmYXVsdCwgUFIgaXMgb2ZmIGFuZCByZXNlZWRfaW50ZXJ2YWwgaXMgbGFyZ2UsCisgICAgICogc28gdGhlIG5leHQgZmV3IGNhbGxzIHNob3VsZCBub3QgdXNlIGVudHJvcHkgKi8KKyAgICBsYXN0X2lkeCA9IHRlc3Rfb2Zmc2V0X2lkeDsKKyAgICBmb3IoIGkgPSAwOyBpIDwgcmVwczsgaSsrICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0eCwgb3V0LCBzaXplb2YoIG91dCApIC0gNCApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LCBvdXQsIHNpemVvZiggb3V0ICkgLSA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkLCBzaXplb2YoIGFkZCApICkgPT0gMCApOworICAgIH0KKyAgICBURVNUX0FTU0VSVCggbGFzdF9pZHggPT0gdGVzdF9vZmZzZXRfaWR4ICk7CisKKyAgICAvKiBXaGlsZSBhdCBpdCwgbWFrZSBzdXJlIHdlIGRpZG4ndCB3cml0ZSBwYXN0IHRoZSByZXF1ZXN0ZWQgbGVuZ3RoICovCisgICAgVEVTVF9BU1NFUlQoIG91dFtzaXplb2YoIG91dCApIC0gNF0gPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBvdXRbc2l6ZW9mKCBvdXQgKSAtIDNdID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggb3V0W3NpemVvZiggb3V0ICkgLSAyXSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG91dFtzaXplb2YoIG91dCApIC0gMV0gPT0gMCApOworCisgICAgLyogU2V0IHJlc2VlZF9pbnRlcnZhbCB0byB0aGUgbnVtYmVyIG9mIGNhbGxzIGRvbmUsCisgICAgICogc28gdGhlIG5leHQgY2FsbCBzaG91bGQgcmVzZWVkICovCisgICAgbWJlZHRsc19jdHJfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKCAmY3R4LCAyICogcmVwcyApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0eCwgb3V0LCBzaXplb2YoIG91dCApICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBsYXN0X2lkeCA8IHRlc3Rfb2Zmc2V0X2lkeCApOworCisgICAgLyogVGhlIG5ldyBmZXcgY2FsbHMgc2hvdWxkIG5vdCByZXNlZWQgKi8KKyAgICBsYXN0X2lkeCA9IHRlc3Rfb2Zmc2V0X2lkeDsKKyAgICBmb3IoIGkgPSAwOyBpIDwgcmVwcyAvIDI7IGkrKyApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19yYW5kb20oICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LCBvdXQsIHNpemVvZiggb3V0ICkgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkLCBzaXplb2YoIGFkZCApICkgPT0gMCApOworICAgIH0KKyAgICBURVNUX0FTU0VSVCggbGFzdF9pZHggPT0gdGVzdF9vZmZzZXRfaWR4ICk7CisKKyAgICAvKiBDYWxsIHVwZGF0ZSB3aXRoIHRvbyBtdWNoIGRhdGEgKHNpemVvZiBlbnRyb3B5ID4gTUFYKF9TRUVEKV9JTlBVVCkKKyAgICAgKiAoanVzdCBtYWtlIHN1cmUgaXQgZG9lc24ndCBjYXVzZSBtZW1vcnkgY29ycnVwdGlvbikgKi8KKyAgICBtYmVkdGxzX2N0cl9kcmJnX3VwZGF0ZSggJmN0eCwgZW50cm9weSwgc2l6ZW9mKCBlbnRyb3B5ICkgKTsKKworICAgIC8qIE5vdyBlbmFibGUgUFIsIHNvIHRoZSBuZXh0IGZldyBjYWxscyBzaG91bGQgYWxsIHJlc2VlZCAqLworICAgIG1iZWR0bHNfY3RyX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSggJmN0eCwgTUJFRFRMU19DVFJfRFJCR19QUl9PTiApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0eCwgb3V0LCBzaXplb2YoIG91dCApICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBsYXN0X2lkeCA8IHRlc3Rfb2Zmc2V0X2lkeCApOworCisgICAgLyogRmluYWxseSwgY2hlY2sgc2V0dGluZyBlbnRyb3B5X2xlbiAqLworICAgIG1iZWR0bHNfY3RyX2RyYmdfc2V0X2VudHJvcHlfbGVuKCAmY3R4LCA0MiApOworICAgIGxhc3RfaWR4ID0gdGVzdF9vZmZzZXRfaWR4OworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0eCwgb3V0LCBzaXplb2YoIG91dCApICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCB0ZXN0X29mZnNldF9pZHggLSBsYXN0X2lkeCA9PSA0MiApOworCisgICAgbWJlZHRsc19jdHJfZHJiZ19zZXRfZW50cm9weV9sZW4oICZjdHgsIDEzICk7CisgICAgbGFzdF9pZHggPSB0ZXN0X29mZnNldF9pZHg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3R4LCBvdXQsIHNpemVvZiggb3V0ICkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIHRlc3Rfb2Zmc2V0X2lkeCAtIGxhc3RfaWR4ID09IDEzICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTyAqLwordm9pZCBjdHJfZHJiZ19zZWVkX2ZpbGUoIGNoYXIgKnBhdGgsIGludCByZXQgKQoreworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHggKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHgsIHJuZF9zdGRfcmFuZCwgTlVMTCwgTlVMTCwgMCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ193cml0ZV9zZWVkX2ZpbGUoICZjdHgsIHBhdGggKSA9PSByZXQgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ191cGRhdGVfc2VlZF9maWxlKCAmY3R4LCBwYXRoICkgPT0gcmV0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgY3RyX2RyYmdfc2VsZnRlc3QoICkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2RlYnVnLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVidWcuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjhkNThkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2RlYnVnLmRhdGEKQEAgLTAsMCArMSw2NCBAQAorRGVidWcgcHJpbnQgbXNnICh0aHJlc2hvbGQgMSwgbGV2ZWwgMCkKK2RlYnVnX3ByaW50X21zZ190aHJlc2hvbGQ6MTowOiJNeUZpbGUiOjk5OToiTXlGaWxlKDA5OTkpXDogVGV4dCBtZXNzYWdlLCAyID09IDJcbiIKKworRGVidWcgcHJpbnQgbXNnICh0aHJlc2hvbGQgMSwgbGV2ZWwgMSkKK2RlYnVnX3ByaW50X21zZ190aHJlc2hvbGQ6MToxOiJNeUZpbGUiOjk5OToiTXlGaWxlKDA5OTkpXDogVGV4dCBtZXNzYWdlLCAyID09IDJcbiIKKworRGVidWcgcHJpbnQgbXNnICh0aHJlc2hvbGQgMSwgbGV2ZWwgMikKK2RlYnVnX3ByaW50X21zZ190aHJlc2hvbGQ6MToyOiJNeUZpbGUiOjk5OToiIgorCitEZWJ1ZyBwcmludCBtc2cgKHRocmVzaG9sZCAwLCBsZXZlbCAxKQorZGVidWdfcHJpbnRfbXNnX3RocmVzaG9sZDowOjE6Ik15RmlsZSI6OTk5OiIiCisKK0RlYnVnIHByaW50IG1zZyAodGhyZXNob2xkIDAsIGxldmVsIDUpCitkZWJ1Z19wcmludF9tc2dfdGhyZXNob2xkOjA6NToiTXlGaWxlIjo5OTk6IiIKKworRGVidWcgcHJpbnQgcmV0dXJuIHZhbHVlICMxCittYmVkdGxzX2RlYnVnX3ByaW50X3JldDoiTXlGaWxlIjo5OTk6IlRlc3QgcmV0dXJuIHZhbHVlIjowOiJNeUZpbGUoMDk5OSlcOiBUZXN0IHJldHVybiB2YWx1ZSgpIHJldHVybmVkIDAgKC0weDAwMDApXG4iCisKK0RlYnVnIHByaW50IHJldHVybiB2YWx1ZSAjMgorbWJlZHRsc19kZWJ1Z19wcmludF9yZXQ6Ik15RmlsZSI6OTk5OiJUZXN0IHJldHVybiB2YWx1ZSI6LTB4MTAwMDoiTXlGaWxlKDA5OTkpXDogVGVzdCByZXR1cm4gdmFsdWUoKSByZXR1cm5lZCAtNDA5NiAoLTB4MTAwMClcbiIKKworRGVidWcgcHJpbnQgcmV0dXJuIHZhbHVlICMzCittYmVkdGxzX2RlYnVnX3ByaW50X3JldDoiTXlGaWxlIjo5OTk6IlRlc3QgcmV0dXJuIHZhbHVlIjotMHhGRkZGOiJNeUZpbGUoMDk5OSlcOiBUZXN0IHJldHVybiB2YWx1ZSgpIHJldHVybmVkIC02NTUzNSAoLTB4ZmZmZilcbiIKKworRGVidWcgcHJpbnQgYnVmZmVyICMxCittYmVkdGxzX2RlYnVnX3ByaW50X2J1ZjoiTXlGaWxlIjo5OTk6IlRlc3QgcmV0dXJuIHZhbHVlIjoiIjoiTXlGaWxlKDA5OTkpXDogZHVtcGluZyAnVGVzdCByZXR1cm4gdmFsdWUnICgwIGJ5dGVzKVxuIgorCitEZWJ1ZyBwcmludCBidWZmZXIgIzIKK21iZWR0bHNfZGVidWdfcHJpbnRfYnVmOiJNeUZpbGUiOjk5OToiVGVzdCByZXR1cm4gdmFsdWUiOiIwMCI6Ik15RmlsZSgwOTk5KVw6IGR1bXBpbmcgJ1Rlc3QgcmV0dXJuIHZhbHVlJyAoMSBieXRlcylcbk15RmlsZSgwOTk5KVw6IDAwMDBcOiAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5cbiIKKworRGVidWcgcHJpbnQgYnVmZmVyICMzCittYmVkdGxzX2RlYnVnX3ByaW50X2J1ZjoiTXlGaWxlIjo5OTk6IlRlc3QgcmV0dXJuIHZhbHVlIjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiJNeUZpbGUoMDk5OSlcOiBkdW1waW5nICdUZXN0IHJldHVybiB2YWx1ZScgKDE2IGJ5dGVzKVxuTXlGaWxlKDA5OTkpXDogMDAwMFw6ICAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAwOCAwOSAwYSAwYiAwYyAwZCAwZSAwZiAgLi4uLi4uLi4uLi4uLi4uLlxuIgorCitEZWJ1ZyBwcmludCBidWZmZXIgIzQKK21iZWR0bHNfZGVidWdfcHJpbnRfYnVmOiJNeUZpbGUiOjk5OToiVGVzdCByZXR1cm4gdmFsdWUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwIjoiTXlGaWxlKDA5OTkpXDogZHVtcGluZyAnVGVzdCByZXR1cm4gdmFsdWUnICgxNyBieXRlcylcbk15RmlsZSgwOTk5KVw6IDAwMDBcOiAgMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMDggMDkgMGEgMGIgMGMgMGQgMGUgMGYgIC4uLi4uLi4uLi4uLi4uLi5cbk15RmlsZSgwOTk5KVw6IDAwMTBcOiAgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5cbiIKKworRGVidWcgcHJpbnQgYnVmZmVyICM1CittYmVkdGxzX2RlYnVnX3ByaW50X2J1ZjoiTXlGaWxlIjo5OTk6IlRlc3QgcmV0dXJuIHZhbHVlIjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjIwMjEyMjIzMjQyNTI2MjcyODI5MkEyQjJDMkQyRTJGMzAiOiJNeUZpbGUoMDk5OSlcOiBkdW1waW5nICdUZXN0IHJldHVybiB2YWx1ZScgKDQ5IGJ5dGVzKVxuTXlGaWxlKDA5OTkpXDogMDAwMFw6ICAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAwOCAwOSAwYSAwYiAwYyAwZCAwZSAwZiAgLi4uLi4uLi4uLi4uLi4uLlxuTXlGaWxlKDA5OTkpXDogMDAxMFw6ICAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAxYSAxYiAxYyAxZCAxZSAxZiAgLi4uLi4uLi4uLi4uLi4uLlxuTXlGaWxlKDA5OTkpXDogMDAyMFw6ICAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAyYSAyYiAyYyAyZCAyZSAyZiAgICEiIyQlJicoKSorLC0uL1xuTXlGaWxlKDA5OTkpXDogMDAzMFw6ICAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuIgorCitEZWJ1ZyBwcmludCBjZXJ0aWZpY2F0ZSAjMSAoUlNBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfQkFTRTY0X0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworbWJlZHRsc19kZWJ1Z19wcmludF9jcnQ6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJNeUZpbGUiOjk5OToiUFJFRklYXyI6Ik15RmlsZSgwOTk5KVw6IFBSRUZJWF8gIzFcOlxuTXlGaWxlKDA5OTkpXDogY2VydC4gdmVyc2lvbiAgICAgXDogM1xuTXlGaWxlKDA5OTkpXDogc2VyaWFsIG51bWJlciAgICAgXDogMDFcbk15RmlsZSgwOTk5KVw6IGlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0Fcbk15RmlsZSgwOTk5KVw6IHN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFNlcnZlciAxXG5NeUZpbGUoMDk5OSlcOiBpc3N1ZWQgIG9uICAgICAgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDZcbk15RmlsZSgwOTk5KVw6IGV4cGlyZXMgb24gICAgICAgIFw6IDIwMjEtMDItMTIgMTRcOjQ0XDowNlxuTXlGaWxlKDA5OTkpXDogc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuTXlGaWxlKDA5OTkpXDogUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5NeUZpbGUoMDk5OSlcOiBiYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuTXlGaWxlKDA5OTkpXDogdmFsdWUgb2YgJ2NydC0+cnNhLk4nICgyMDQ4IGJpdHMpIGlzXDpcbk15RmlsZSgwOTk5KVw6ICBhOSAwMiAxZiAzZCA0MCA2YSBkNSA1NSA1MyA4YiBmZCAzNiBlZSA4MiA2NSAyZVxuTXlGaWxlKDA5OTkpXDogIDE1IDYxIDVlIDg5IGJmIGI4IGU4IDQ1IDkwIGRiIGVlIDg4IDE2IDUyIGQzIGYxXG5NeUZpbGUoMDk5OSlcOiAgNDMgNTAgNDcgOTYgMTIgNTkgNjQgODcgNmIgZmQgMmIgZTAgNDYgZjkgNzMgYmVcbk15RmlsZSgwOTk5KVw6ICBkZCBjZiA5MiBlMSA5MSA1YiBlZCA2NiBhMCA2ZiA4OSAyOSA3OSA0NSA4MCBkMFxuTXlGaWxlKDA5OTkpXDogIDgzIDZhIGQ1IDQxIDQzIDc3IDVmIDM5IDdjIDA5IDA0IDQ3IDgyIGIwIDU3IDM5XG5NeUZpbGUoMDk5OSlcOiAgNzAgZWQgYTMgZWMgMTUgMTkgMWUgYTggMzMgMDggNDcgYzEgMDUgNDIgYTkgZmRcbk15RmlsZSgwOTk5KVw6ICA0YyBjMyBiNCBkZiBkZCAwNiAxZiA0ZCAxMCA1MSA0MCA2NyA3MyAxMyAwZiA0MFxuTXlGaWxlKDA5OTkpXDogIGY4IDZkIDgxIDI1IDVmIDBhIGIxIDUzIGM2IDMwIDdlIDE1IDM5IGFjIGY5IDVhXG5NeUZpbGUoMDk5OSlcOiAgZWUgN2YgOTIgOWUgYTYgMDUgNWIgZTcgMTMgOTcgODUgYjUgMjMgOTIgZDkgZDRcbk15RmlsZSgwOTk5KVw6ICAyNCAwNiBkNSAwOSAyNSA4OSA3NSAwNyBkZCBhNiAxYSA4ZiAzZiAwOSAxOSBiZVxuTXlGaWxlKDA5OTkpXDogIGFkIDY1IDJjIDY0IGViIDk1IDliIGRjIGZlIDQxIDVlIDE3IGE2IGRhIDZjIDViXG5NeUZpbGUoMDk5OSlcOiAgNjkgY2MgMDIgYmEgMTQgMmMgMTYgMjQgOWMgNGEgZGMgY2QgZDAgZjcgNTIgNjdcbk15RmlsZSgwOTk5KVw6ICA3MyBmMSAyZCBhMCAyMyBmZCA3ZSBmNCAzMSBjYSAyZCA3MCBjYSA4OSAwYiAwNFxuTXlGaWxlKDA5OTkpXDogIGRiIDJlIGE2IDRmIDcwIDZlIDllIGNlIGJkIDU4IDg5IGUyIDUzIDU5IDllIDZlXG5NeUZpbGUoMDk5OSlcOiAgNWEgOTIgNjUgZTIgODggM2YgMGMgOTQgMTkgYTMgZGQgZTUgZTggOWQgOTUgMTNcbk15RmlsZSgwOTk5KVw6ICBlZCAyOSBkYiBhYiA3MCAxMiBkYyA1YSBjYSA2YiAxNyBhYiA1MiA4MiA1NCBiMVxuTXlGaWxlKDA5OTkpXDogdmFsdWUgb2YgJ2NydC0+cnNhLkUnICgxNyBiaXRzKSBpc1w6XG5NeUZpbGUoMDk5OSlcOiAgMDEgMDAgMDFcbiIKKworRGVidWcgcHJpbnQgY2VydGlmaWNhdGUgIzIgKEVDKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfQkFTRTY0X0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX2RlYnVnX3ByaW50X2NydDoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJNeUZpbGUiOjk5OToiUFJFRklYXyI6Ik15RmlsZSgwOTk5KVw6IFBSRUZJWF8gIzFcOlxuTXlGaWxlKDA5OTkpXDogY2VydC4gdmVyc2lvbiAgICAgXDogM1xuTXlGaWxlKDA5OTkpXDogc2VyaWFsIG51bWJlciAgICAgXDogQzFcOjQzXDpFMlw6N0VcOjYyXDo0M1w6Q0NcOkU4XG5NeUZpbGUoMDk5OSlcOiBpc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBXG5NeUZpbGUoMDk5OSlcOiBzdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBXG5NeUZpbGUoMDk5OSlcOiBpc3N1ZWQgIG9uICAgICAgICBcOiAyMDEzLTA5LTI0IDE1XDo0OVw6NDhcbk15RmlsZSgwOTk5KVw6IGV4cGlyZXMgb24gICAgICAgIFw6IDIwMjMtMDktMjIgMTVcOjQ5XDo0OFxuTXlGaWxlKDA5OTkpXDogc2lnbmVkIHVzaW5nICAgICAgXDogRUNEU0Egd2l0aCBTSEEyNTZcbk15RmlsZSgwOTk5KVw6IEVDIGtleSBzaXplICAgICAgIFw6IDM4NCBiaXRzXG5NeUZpbGUoMDk5OSlcOiBiYXNpYyBjb25zdHJhaW50cyBcOiBDQT10cnVlXG5NeUZpbGUoMDk5OSlcOiB2YWx1ZSBvZiAnY3J0LT5lY2tleS5RKFgpJyAoMzg0IGJpdHMpIGlzXDpcbk15RmlsZSgwOTk5KVw6ICBjMyBkYSAyYiAzNCA0MSAzNyA1OCAyZiA4NyA1NiBmZSBmYyA4OSBiYSAyOSA0M1xuTXlGaWxlKDA5OTkpXDogIDRiIDRlIGUwIDZlIGMzIDBlIDU3IDUzIDMzIDM5IDU4IGQ0IDUyIGI0IDkxIDk1XG5NeUZpbGUoMDk5OSlcOiAgMzkgMGIgMjMgZGYgNWYgMTcgMjQgNjIgNDggZmMgMWEgOTUgMjkgY2UgMmMgMmRcbk15RmlsZSgwOTk5KVw6IHZhbHVlIG9mICdjcnQtPmVja2V5LlEoWSknICgzODQgYml0cykgaXNcOlxuTXlGaWxlKDA5OTkpXDogIDg3IGMyIDg4IDUyIDgwIGFmIGQ2IDZhIGFiIDIxIGRkIGI4IGQzIDFjIDZlIDU4XG5NeUZpbGUoMDk5OSlcOiAgYjggY2EgZTggYjIgNjkgOGUgZjMgNDEgYWQgMjkgYzMgYjQgNWYgNzUgYTcgNDdcbk15RmlsZSgwOTk5KVw6ICA2ZiBkNSAxOSAyOSA1NSA2OSA5YSA1MyAzYiAyMCBiNCA2NiAxNiA2MCAzMyAxZVxuIgorCitEZWJ1ZyBwcmludCBtYmVkdGxzX21waSAjMQorbWJlZHRsc19kZWJ1Z19wcmludF9tcGk6MTY6IjAxMDIwMzA0MDUwNjA3IjoiTXlGaWxlIjo5OTk6IlZBTFVFIjoiTXlGaWxlKDA5OTkpXDogdmFsdWUgb2YgJ1ZBTFVFJyAoNDkgYml0cykgaXNcOlxuTXlGaWxlKDA5OTkpXDogIDAxIDAyIDAzIDA0IDA1IDA2IDA3XG4iCisKK0RlYnVnIHByaW50IG1iZWR0bHNfbXBpICMyCittYmVkdGxzX2RlYnVnX3ByaW50X21waToxNjoiMDAwMDAwMDAwMDAwMDciOiJNeUZpbGUiOjk5OToiVkFMVUUiOiJNeUZpbGUoMDk5OSlcOiB2YWx1ZSBvZiAnVkFMVUUnICgzIGJpdHMpIGlzXDpcbk15RmlsZSgwOTk5KVw6ICAwN1xuIgorCitEZWJ1ZyBwcmludCBtYmVkdGxzX21waSAjMworbWJlZHRsc19kZWJ1Z19wcmludF9tcGk6MTY6IjAwMDAwMDAwMDAwMDAwIjoiTXlGaWxlIjo5OTk6IlZBTFVFIjoiTXlGaWxlKDA5OTkpXDogdmFsdWUgb2YgJ1ZBTFVFJyAoMCBiaXRzKSBpc1w6XG5NeUZpbGUoMDk5OSlcOiAgMDBcbiIKKworRGVidWcgcHJpbnQgbWJlZHRsc19tcGkgIzQKK21iZWR0bHNfZGVidWdfcHJpbnRfbXBpOjE2OiIwOTQxMzc5ZDAwZmVkMTQ5MWZlMTVkZjI4NGRmZGU0YTE0MmY2OGFhOGQ0MTIwMjMxOTVjZWU2Njg4M2U2MjkwZmZlNzAzZjRlYTU5NjNiZjIxMjcxM2NlZTQ2YjEwN2MwOTE4MmI1ZWRjZDk1NWFkYWM0MThiZjQ5MThlMjg4OWFmNDhlMTA5OWQ1MTM4MzBjZWM4NWMyNmFjMWUxNThiNTI2MjBlMzNiYTg2OTJmODkzZWZiYjJmOTU4YjQ0MjQiOiJNeUZpbGUiOjk5OToiVkFMVUUiOiJNeUZpbGUoMDk5OSlcOiB2YWx1ZSBvZiAnVkFMVUUnICg3NjQgYml0cykgaXNcOlxuTXlGaWxlKDA5OTkpXDogIDA5IDQxIDM3IDlkIDAwIGZlIGQxIDQ5IDFmIGUxIDVkIGYyIDg0IGRmIGRlIDRhXG5NeUZpbGUoMDk5OSlcOiAgMTQgMmYgNjggYWEgOGQgNDEgMjAgMjMgMTkgNWMgZWUgNjYgODggM2UgNjIgOTBcbk15RmlsZSgwOTk5KVw6ICBmZiBlNyAwMyBmNCBlYSA1OSA2MyBiZiAyMSAyNyAxMyBjZSBlNCA2YiAxMCA3Y1xuTXlGaWxlKDA5OTkpXDogIDA5IDE4IDJiIDVlIGRjIGQ5IDU1IGFkIGFjIDQxIDhiIGY0IDkxIDhlIDI4IDg5XG5NeUZpbGUoMDk5OSlcOiAgYWYgNDggZTEgMDkgOWQgNTEgMzggMzAgY2UgYzggNWMgMjYgYWMgMWUgMTUgOGJcbk15RmlsZSgwOTk5KVw6ICA1MiA2MiAwZSAzMyBiYSA4NiA5MiBmOCA5MyBlZiBiYiAyZiA5NSA4YiA0NCAyNFxuIgorCitEZWJ1ZyBwcmludCBtYmVkdGxzX21waSAjNQorbWJlZHRsc19kZWJ1Z19wcmludF9tcGk6MTY6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NDEzNzlkMDBmZWQxNDkxZmUxNWRmMjg0ZGZkZTRhMTQyZjY4YWE4ZDQxMjAyMzE5NWNlZTY2ODgzZTYyOTBmZmU3MDNmNGVhNTk2M2JmMjEyNzEzY2VlNDZiMTA3YzA5MTgyYjVlZGNkOTU1YWRhYzQxOGJmNDkxOGUyODg5YWY0OGUxMDk5ZDUxMzgzMGNlYzg1YzI2YWMxZTE1OGI1MjYyMGUzM2JhODY5MmY4OTNlZmJiMmY5NThiNDQyNCI6Ik15RmlsZSI6OTk5OiJWQUxVRSI6Ik15RmlsZSgwOTk5KVw6IHZhbHVlIG9mICdWQUxVRScgKDc2NCBiaXRzKSBpc1w6XG5NeUZpbGUoMDk5OSlcOiAgMDkgNDEgMzcgOWQgMDAgZmUgZDEgNDkgMWYgZTEgNWQgZjIgODQgZGYgZGUgNGFcbk15RmlsZSgwOTk5KVw6ICAxNCAyZiA2OCBhYSA4ZCA0MSAyMCAyMyAxOSA1YyBlZSA2NiA4OCAzZSA2MiA5MFxuTXlGaWxlKDA5OTkpXDogIGZmIGU3IDAzIGY0IGVhIDU5IDYzIGJmIDIxIDI3IDEzIGNlIGU0IDZiIDEwIDdjXG5NeUZpbGUoMDk5OSlcOiAgMDkgMTggMmIgNWUgZGMgZDkgNTUgYWQgYWMgNDEgOGIgZjQgOTEgOGUgMjggODlcbk15RmlsZSgwOTk5KVw6ICBhZiA0OCBlMSAwOSA5ZCA1MSAzOCAzMCBjZSBjOCA1YyAyNiBhYyAxZSAxNSA4YlxuTXlGaWxlKDA5OTkpXDogIDUyIDYyIDBlIDMzIGJhIDg2IDkyIGY4IDkzIGVmIGJiIDJmIDk1IDhiIDQ0IDI0XG4iCisKK0RlYnVnIHByaW50IG1iZWR0bHNfbXBpICM2CittYmVkdGxzX2RlYnVnX3ByaW50X21waToxNjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MTM3OWQwMGZlZDE0OTFmZTE1ZGYyODRkZmRlNGExNDJmNjhhYThkNDEyMDIzMTk1Y2VlNjY4ODNlNjI5MGZmZTcwM2Y0ZWE1OTYzYmYyMTI3MTNjZWU0NmIxMDdjMDkxODJiNWVkY2Q5NTVhZGFjNDE4YmY0OTE4ZTI4ODlhZjQ4ZTEwOTlkNTEzODMwY2VjODVjMjZhYzFlMTU4YjUyNjIwZTMzYmE4NjkyZjg5M2VmYmIyZjk1OGI0NDI0IjoiTXlGaWxlIjo5OTk6IlZBTFVFIjoiTXlGaWxlKDA5OTkpXDogdmFsdWUgb2YgJ1ZBTFVFJyAoNzU5IGJpdHMpIGlzXDpcbk15RmlsZSgwOTk5KVw6ICA0MSAzNyA5ZCAwMCBmZSBkMSA0OSAxZiBlMSA1ZCBmMiA4NCBkZiBkZSA0YSAxNFxuTXlGaWxlKDA5OTkpXDogIDJmIDY4IGFhIDhkIDQxIDIwIDIzIDE5IDVjIGVlIDY2IDg4IDNlIDYyIDkwIGZmXG5NeUZpbGUoMDk5OSlcOiAgZTcgMDMgZjQgZWEgNTkgNjMgYmYgMjEgMjcgMTMgY2UgZTQgNmIgMTAgN2MgMDlcbk15RmlsZSgwOTk5KVw6ICAxOCAyYiA1ZSBkYyBkOSA1NSBhZCBhYyA0MSA4YiBmNCA5MSA4ZSAyOCA4OSBhZlxuTXlGaWxlKDA5OTkpXDogIDQ4IGUxIDA5IDlkIDUxIDM4IDMwIGNlIGM4IDVjIDI2IGFjIDFlIDE1IDhiIDUyXG5NeUZpbGUoMDk5OSlcOiAgNjIgMGUgMzMgYmEgODYgOTIgZjggOTMgZWYgYmIgMmYgOTUgOGIgNDQgMjRcbiIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9kZWJ1Zy5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9kZWJ1Zy5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGY5OGIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2RlYnVnLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMTk4IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2RlYnVnLmgiCisKK3N0cnVjdCBidWZmZXJfZGF0YQoreworICAgIGNoYXIgYnVmWzIwMDBdOworICAgIGNoYXIgKnB0cjsKK307CisKK3ZvaWQgc3RyaW5nX2RlYnVnKHZvaWQgKmRhdGEsIGludCBsZXZlbCwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICBzdHJ1Y3QgYnVmZmVyX2RhdGEgKmJ1ZmZlciA9IChzdHJ1Y3QgYnVmZmVyX2RhdGEgKikgZGF0YTsKKyAgICBjaGFyICpwID0gYnVmZmVyLT5wdHI7CisgICAgKCh2b2lkKSBsZXZlbCk7CisKKyAgICBtZW1jcHkoIHAsIGZpbGUsIHN0cmxlbiggZmlsZSApICk7CisgICAgcCArPSBzdHJsZW4oIGZpbGUgKTsKKworICAgICpwKysgPSAnKCc7CisgICAgKnArKyA9ICcwJyArICggbGluZSAvIDEwMDAgKSAlIDEwOworICAgICpwKysgPSAnMCcgKyAoIGxpbmUgLyAxMDAgICkgJSAxMDsKKyAgICAqcCsrID0gJzAnICsgKCBsaW5lIC8gMTAgICApICUgMTA7CisgICAgKnArKyA9ICcwJyArICggbGluZSAvIDEgICAgKSAlIDEwOworICAgICpwKysgPSAnKSc7CisgICAgKnArKyA9ICc6JzsKKyAgICAqcCsrID0gJyAnOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIC8qIFNraXAgInRocmVhZCBJRCIgKHVwIHRvIHRoZSBmaXJzdCBzcGFjZSkgYXMgaXQgaXMgbm90IHByZWRpY3RhYmxlICovCisgICAgd2hpbGUoICpzdHIrKyAhPSAnICcgKTsKKyNlbmRpZgorCisgICAgbWVtY3B5KCBwLCBzdHIsIHN0cmxlbiggc3RyICkgKTsKKyAgICBwICs9IHN0cmxlbiggc3RyICk7CisKKyAgICAvKiBEZXRlY3QgaWYgZGVidWcgbWVzc2FnZXMgb3V0cHV0IHBhcnRpYWwgbGluZXMgYW5kIG1hcmsgdGhlbSAqLworICAgIGlmKCBwWy0xXSAhPSAnXG4nICkKKyAgICAgICAgKnArKyA9ICcqJzsKKworICAgIGJ1ZmZlci0+cHRyID0gcDsKK30KKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfREVCVUdfQzpNQkVEVExTX1NTTF9UTFNfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZGVidWdfcHJpbnRfbXNnX3RocmVzaG9sZCggaW50IHRocmVzaG9sZCwgaW50IGxldmVsLCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVzdWx0X3N0ciApCit7CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgc3RydWN0IGJ1ZmZlcl9kYXRhIGJ1ZmZlcjsKKworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyAgICBtZW1zZXQoIGJ1ZmZlci5idWYsIDAsIDIwMDAgKTsKKyAgICBidWZmZXIucHRyID0gYnVmZmVyLmJ1ZjsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NzbF9zZXR1cCggJnNzbCwgJmNvbmYgKSA9PSAwICk7CisKKyAgICBtYmVkdGxzX2RlYnVnX3NldF90aHJlc2hvbGQoIHRocmVzaG9sZCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgc3RyaW5nX2RlYnVnLCAmYnVmZmVyKTsKKworICAgIG1iZWR0bHNfZGVidWdfcHJpbnRfbXNnKCAmc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRleHQgbWVzc2FnZSwgMiA9PSAlZCIsIDIgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIGJ1ZmZlci5idWYsIHJlc3VsdF9zdHIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2RlYnVnX3ByaW50X3JldCggY2hhciAqZmlsZSwgaW50IGxpbmUsIGNoYXIgKnRleHQsIGludCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZXN1bHRfc3RyICkKK3sKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBzdHJ1Y3QgYnVmZmVyX2RhdGEgYnVmZmVyOworCisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworICAgIG1lbXNldCggYnVmZmVyLmJ1ZiwgMCwgMjAwMCApOworICAgIGJ1ZmZlci5wdHIgPSBidWZmZXIuYnVmOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApID09IDAgKTsKKworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgc3RyaW5nX2RlYnVnLCAmYnVmZmVyKTsKKworICAgIG1iZWR0bHNfZGVidWdfcHJpbnRfcmV0KCAmc3NsLCAwLCBmaWxlLCBsaW5lLCB0ZXh0LCB2YWx1ZSk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCBidWZmZXIuYnVmLCByZXN1bHRfc3RyICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfc3NsX2ZyZWUoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggJmNvbmYgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9idWYoIGNoYXIgKmZpbGUsIGludCBsaW5lLCBjaGFyICp0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRhdGFfc3RyaW5nLCBjaGFyICpyZXN1bHRfc3RyICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGFbMTAwMDBdOworICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgc3NsOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZyBjb25mOworICAgIHN0cnVjdCBidWZmZXJfZGF0YSBidWZmZXI7CisgICAgc2l6ZV90IGRhdGFfbGVuOworCisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworICAgIG1lbXNldCggJmRhdGEsIDAsIHNpemVvZiggZGF0YSApICk7CisgICAgbWVtc2V0KCBidWZmZXIuYnVmLCAwLCAyMDAwICk7CisgICAgYnVmZmVyLnB0ciA9IGJ1ZmZlci5idWY7CisKKyAgICBkYXRhX2xlbiA9IHVuaGV4aWZ5KCBkYXRhLCBkYXRhX3N0cmluZyApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApID09IDAgKTsKKworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgc3RyaW5nX2RlYnVnLCAmYnVmZmVyKTsKKworICAgIG1iZWR0bHNfZGVidWdfcHJpbnRfYnVmKCAmc3NsLCAwLCBmaWxlLCBsaW5lLCB0ZXh0LCBkYXRhLCBkYXRhX2xlbiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggYnVmZmVyLmJ1ZiwgcmVzdWx0X3N0ciApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3NzbF9mcmVlKCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoICZjb25mICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTzpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9jcnQoIGNoYXIgKmNydF9maWxlLCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwcmVmaXgsIGNoYXIgKnJlc3VsdF9zdHIgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgICBjcnQ7CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgc3RydWN0IGJ1ZmZlcl9kYXRhIGJ1ZmZlcjsKKworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjcnQgKTsKKyAgICBtZW1zZXQoIGJ1ZmZlci5idWYsIDAsIDIwMDAgKTsKKyAgICBidWZmZXIucHRyID0gYnVmZmVyLmJ1ZjsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NzbF9zZXR1cCggJnNzbCwgJmNvbmYgKSA9PSAwICk7CisKKyAgICBtYmVkdGxzX3NzbF9jb25mX2RiZyggJmNvbmYsIHN0cmluZ19kZWJ1ZywgJmJ1ZmZlcik7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY3J0LCBjcnRfZmlsZSApID09IDAgKTsKKyAgICBtYmVkdGxzX2RlYnVnX3ByaW50X2NydCggJnNzbCwgMCwgZmlsZSwgbGluZSwgcHJlZml4LCAmY3J0KTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIGJ1ZmZlci5idWYsIHJlc3VsdF9zdHIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY3J0ICk7CisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQklHTlVNX0MgKi8KK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9tcGkoIGludCByYWRpeCwgY2hhciAqdmFsdWUsIGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnByZWZpeCwgY2hhciAqcmVzdWx0X3N0ciApCit7CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgc3RydWN0IGJ1ZmZlcl9kYXRhIGJ1ZmZlcjsKKyAgICBtYmVkdGxzX21waSB2YWw7CisKKyAgICBtYmVkdGxzX3NzbF9pbml0KCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoICZjb25mICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnZhbCApOworICAgIG1lbXNldCggYnVmZmVyLmJ1ZiwgMCwgMjAwMCApOworICAgIGJ1ZmZlci5wdHIgPSBidWZmZXIuYnVmOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnZhbCwgcmFkaXgsIHZhbHVlICkgPT0gMCApOworCisgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBzdHJpbmdfZGVidWcsICZidWZmZXIpOworCisgICAgbWJlZHRsc19kZWJ1Z19wcmludF9tcGkoICZzc2wsIDAsIGZpbGUsIGxpbmUsIHByZWZpeCwgJnZhbCk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCBidWZmZXIuYnVmLCByZXN1bHRfc3RyICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZ2YWwgKTsKKyAgICBtYmVkdGxzX3NzbF9mcmVlKCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoICZjb25mICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Rlcy5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Rlcy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZWI2OTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVzLmRhdGEKQEAgLTAsMCArMSwyNTEgQEAKK0RFUyBjaGVjayB3ZWFrIGtleSAjMQorZGVzX2NoZWNrX3dlYWs6IjAxMDEwMTAxMDEwMTAxMDEiOjEKKworREVTIGNoZWNrIHdlYWsga2V5ICMyCitkZXNfY2hlY2tfd2VhazoiRkVFMEZFRTBGRUYxRkVGMSI6MQorCitERVMgY2hlY2sgd2VhayBrZXkgIzMKK2Rlc19jaGVja193ZWFrOiIwMTAxMDEwMTAxMDEwMTAwIjowCisKK0RFUyBjaGVjayB3ZWFrIGtleSAjNAorZGVzX2NoZWNrX3dlYWs6IkVFRTBGRUUwRkVGMUZFRjEiOjAKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMQorZGVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMCI6IjhDQTY0REU5QzFCMTIzQTciCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzIKK2Rlc19lbmNyeXB0X2VjYjoiRkZGRkZGRkZGRkZGRkZGRiI6IkZGRkZGRkZGRkZGRkZGRkYiOiI3MzU5QjIxNjNFNEVEQzU4IgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMzCitkZXNfZW5jcnlwdF9lY2I6IjMwMDAwMDAwMDAwMDAwMDAiOiIxMDAwMDAwMDAwMDAwMDAxIjoiOTU4RTZFNjI3QTA1NTU3QiIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjNAorZGVzX2VuY3J5cHRfZWNiOiIxMTExMTExMTExMTExMTExIjoiMTExMTExMTExMTExMTExMSI6IkY0MDM3OUFCOUUwRUM1MzMiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzUKK2Rlc19lbmNyeXB0X2VjYjoiMDEyMzQ1Njc4OUFCQ0RFRiI6IjExMTExMTExMTExMTExMTEiOiIxNzY2OERGQzcyOTI1MzJEIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICM2CitkZXNfZW5jcnlwdF9lY2I6IjExMTExMTExMTExMTExMTEiOiIwMTIzNDU2Nzg5QUJDREVGIjoiOEE1QUUxRjgxQUI4RjJERCIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjNworZGVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMCI6IjhDQTY0REU5QzFCMTIzQTciCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzgKK2Rlc19lbmNyeXB0X2VjYjoiRkVEQ0JBOTg3NjU0MzIxMCI6IjAxMjM0NTY3ODlBQkNERUYiOiJFRDM5RDk1MEZBNzRCQ0M0IgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICM5CitkZXNfZW5jcnlwdF9lY2I6IjdDQTExMDQ1NEExQTZFNTciOiIwMUExRDZEMDM5Nzc2NzQyIjoiNjkwRjVCMEQ5QTI2OTM5QiIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTAKK2Rlc19lbmNyeXB0X2VjYjoiMDEzMUQ5NjE5REMxMzc2RSI6IjVDRDU0Q0E4M0RFRjU3REEiOiI3QTM4OUQxMDM1NEJEMjcxIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxMQorZGVzX2VuY3J5cHRfZWNiOiIwN0ExMTMzRTRBMEIyNjg2IjoiMDI0OEQ0MzgwNkY2NzE3MiI6Ijg2OEVCQjUxQ0FCNDU5OUEiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzEyCitkZXNfZW5jcnlwdF9lY2I6IjM4NDk2NzRDMjYwMjMxOUUiOiI1MTQ1NEI1ODJEREY0NDBBIjoiNzE3ODg3NkUwMUYxOUIyQSIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTMKK2Rlc19lbmNyeXB0X2VjYjoiMDRCOTE1QkE0M0ZFQjVCNiI6IjQyRkQ0NDMwNTk1NzdGQTIiOiJBRjM3RkI0MjFGOEM0MDk1IgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxNAorZGVzX2VuY3J5cHRfZWNiOiIwMTEzQjk3MEZEMzRGMkNFIjoiMDU5QjVFMDg1MUNGMTQzQSI6Ijg2QTU2MEYxMEVDNkQ4NUIiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzE1CitkZXNfZW5jcnlwdF9lY2I6IjAxNzBGMTc1NDY4RkI1RTYiOiIwNzU2RDhFMDc3NDc2MUQyIjoiMENEM0RBMDIwMDIxREMwOSIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTYKK2Rlc19lbmNyeXB0X2VjYjoiNDMyOTdGQUQzOEUzNzNGRSI6Ijc2MjUxNEI4MjlCRjQ4NkEiOiJFQTY3NkIyQ0I3REIyQjdBIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxNworZGVzX2VuY3J5cHRfZWNiOiIwN0E3MTM3MDQ1REEyQTE2IjoiM0JERDExOTA0OTM3MjgwMiI6IkRGRDY0QTgxNUNBRjFBMEYiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzE4CitkZXNfZW5jcnlwdF9lY2I6IjA0Njg5MTA0QzJGRDNCMkYiOiIyNjk1NUY2ODM1QUY2MDlBIjoiNUM1MTNDOUM0ODg2QzA4OCIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTkKK2Rlc19lbmNyeXB0X2VjYjoiMzdEMDZCQjUxNkNCNzU0NiI6IjE2NEQ1RTQwNEYyNzUyMzIiOiIwQTJBRUVBRTNGRjRBQjc3IgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyMAorZGVzX2VuY3J5cHRfZWNiOiIxRjA4MjYwRDFBQzI0NjVFIjoiNkIwNTZFMTg3NTlGNUNDQSI6IkVGMUJGMDNFNURGQTU3NUEiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzIxCitkZXNfZW5jcnlwdF9lY2I6IjU4NDAyMzY0MUFCQTYxNzYiOiIwMDRCRDZFRjA5MTc2MDYyIjoiODhCRjBEQjZENzBERUU1NiIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjIKK2Rlc19lbmNyeXB0X2VjYjoiMDI1ODE2MTY0NjI5QjAwNyI6IjQ4MEQzOTAwNkVFNzYyRjIiOiJBMUY5OTE1NTQxMDIwQjU2IgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyMworZGVzX2VuY3J5cHRfZWNiOiI0OTc5M0VCQzc5QjMyNThGIjoiNDM3NTQwQzg2OThGM0NGQSI6IjZGQkYxQ0FGQ0ZGRDA1NTYiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzI0CitkZXNfZW5jcnlwdF9lY2I6IjRGQjA1RTE1MTVBQjczQTciOiIwNzJENDNBMDc3MDc1MjkyIjoiMkYyMkU0OUJBQjdDQTFBQyIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjUKK2Rlc19lbmNyeXB0X2VjYjoiNDlFOTVENkQ0Q0EyMjlCRiI6IjAyRkU1NTc3ODExN0YxMkEiOiI1QTZCNjEyQ0MyNkNDRTRBIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyNgorZGVzX2VuY3J5cHRfZWNiOiIwMTgzMTBEQzQwOUIyNkQ2IjoiMUQ5RDVDNTAxOEY3MjhDMiI6IjVGNEMwMzhFRDEyQjJFNDEiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzI3CitkZXNfZW5jcnlwdF9lY2I6IjFDNTg3RjFDMTM5MjRGRUYiOiIzMDU1MzIyODZENkYyOTVBIjoiNjNGQUMwRDAzNEQ5Rjc5MyIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjgKK2Rlc19lbmNyeXB0X2VjYjoiMDEwMTAxMDEwMTAxMDEwMSI6IjAxMjM0NTY3ODlBQkNERUYiOiI2MTdCM0EwQ0U4RjA3MTAwIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyOQorZGVzX2VuY3J5cHRfZWNiOiIxRjFGMUYxRjBFMEUwRTBFIjoiMDEyMzQ1Njc4OUFCQ0RFRiI6IkRCOTU4NjA1RjhDOEM2MDYiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzMwCitkZXNfZW5jcnlwdF9lY2I6IkUwRkVFMEZFRjFGRUYxRkUiOiIwMTIzNDU2Nzg5QUJDREVGIjoiRURCRkQxQzY2QzI5Q0NDNyIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMzEKK2Rlc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMCI6IkZGRkZGRkZGRkZGRkZGRkYiOiIzNTU1NTBCMjE1MEUyNDUxIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMzMgorZGVzX2VuY3J5cHRfZWNiOiJGRkZGRkZGRkZGRkZGRkZGIjoiMDAwMDAwMDAwMDAwMDAwMCI6IkNBQUFBRjRERUFGMURCQUUiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzMzCitkZXNfZW5jcnlwdF9lY2I6IjAxMjM0NTY3ODlBQkNERUYiOiIwMDAwMDAwMDAwMDAwMDAwIjoiRDVENDRGRjcyMDY4M0QwRCIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMzQKK2Rlc19lbmNyeXB0X2VjYjoiRkVEQ0JBOTg3NjU0MzIxMCI6IkZGRkZGRkZGRkZGRkZGRkYiOiIyQTJCQjAwOERGOTdDMkYyIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxCitkZXNfZGVjcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAiOiI4Q0E2NERFOUMxQjEyM0E3IjoiMDAwMDAwMDAwMDAwMDAwMCIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMgorZGVzX2RlY3J5cHRfZWNiOiJGRkZGRkZGRkZGRkZGRkZGIjoiNzM1OUIyMTYzRTRFREM1OCI6IkZGRkZGRkZGRkZGRkZGRkYiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzMKK2Rlc19kZWNyeXB0X2VjYjoiMzAwMDAwMDAwMDAwMDAwMCI6Ijk1OEU2RTYyN0EwNTU1N0IiOiIxMDAwMDAwMDAwMDAwMDAxIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICM0CitkZXNfZGVjcnlwdF9lY2I6IjExMTExMTExMTExMTExMTEiOiJGNDAzNzlBQjlFMEVDNTMzIjoiMTExMTExMTExMTExMTExMSIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjNQorZGVzX2RlY3J5cHRfZWNiOiIwMTIzNDU2Nzg5QUJDREVGIjoiMTc2NjhERkM3MjkyNTMyRCI6IjExMTExMTExMTExMTExMTEiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzYKK2Rlc19kZWNyeXB0X2VjYjoiMTExMTExMTExMTExMTExMSI6IjhBNUFFMUY4MUFCOEYyREQiOiIwMTIzNDU2Nzg5QUJDREVGIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICM3CitkZXNfZGVjcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAiOiI4Q0E2NERFOUMxQjEyM0E3IjoiMDAwMDAwMDAwMDAwMDAwMCIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjOAorZGVzX2RlY3J5cHRfZWNiOiJGRURDQkE5ODc2NTQzMjEwIjoiRUQzOUQ5NTBGQTc0QkNDNCI6IjAxMjM0NTY3ODlBQkNERUYiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzkKK2Rlc19kZWNyeXB0X2VjYjoiN0NBMTEwNDU0QTFBNkU1NyI6IjY5MEY1QjBEOUEyNjkzOUIiOiIwMUExRDZEMDM5Nzc2NzQyIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxMAorZGVzX2RlY3J5cHRfZWNiOiIwMTMxRDk2MTlEQzEzNzZFIjoiN0EzODlEMTAzNTRCRDI3MSI6IjVDRDU0Q0E4M0RFRjU3REEiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzExCitkZXNfZGVjcnlwdF9lY2I6IjA3QTExMzNFNEEwQjI2ODYiOiI4NjhFQkI1MUNBQjQ1OTlBIjoiMDI0OEQ0MzgwNkY2NzE3MiIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTIKK2Rlc19kZWNyeXB0X2VjYjoiMzg0OTY3NEMyNjAyMzE5RSI6IjcxNzg4NzZFMDFGMTlCMkEiOiI1MTQ1NEI1ODJEREY0NDBBIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxMworZGVzX2RlY3J5cHRfZWNiOiIwNEI5MTVCQTQzRkVCNUI2IjoiQUYzN0ZCNDIxRjhDNDA5NSI6IjQyRkQ0NDMwNTk1NzdGQTIiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzE0CitkZXNfZGVjcnlwdF9lY2I6IjAxMTNCOTcwRkQzNEYyQ0UiOiI4NkE1NjBGMTBFQzZEODVCIjoiMDU5QjVFMDg1MUNGMTQzQSIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTUKK2Rlc19kZWNyeXB0X2VjYjoiMDE3MEYxNzU0NjhGQjVFNiI6IjBDRDNEQTAyMDAyMURDMDkiOiIwNzU2RDhFMDc3NDc2MUQyIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxNgorZGVzX2RlY3J5cHRfZWNiOiI0MzI5N0ZBRDM4RTM3M0ZFIjoiRUE2NzZCMkNCN0RCMkI3QSI6Ijc2MjUxNEI4MjlCRjQ4NkEiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzE3CitkZXNfZGVjcnlwdF9lY2I6IjA3QTcxMzcwNDVEQTJBMTYiOiJERkQ2NEE4MTVDQUYxQTBGIjoiM0JERDExOTA0OTM3MjgwMiIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTgKK2Rlc19kZWNyeXB0X2VjYjoiMDQ2ODkxMDRDMkZEM0IyRiI6IjVDNTEzQzlDNDg4NkMwODgiOiIyNjk1NUY2ODM1QUY2MDlBIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxOQorZGVzX2RlY3J5cHRfZWNiOiIzN0QwNkJCNTE2Q0I3NTQ2IjoiMEEyQUVFQUUzRkY0QUI3NyI6IjE2NEQ1RTQwNEYyNzUyMzIiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzIwCitkZXNfZGVjcnlwdF9lY2I6IjFGMDgyNjBEMUFDMjQ2NUUiOiJFRjFCRjAzRTVERkE1NzVBIjoiNkIwNTZFMTg3NTlGNUNDQSIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjEKK2Rlc19kZWNyeXB0X2VjYjoiNTg0MDIzNjQxQUJBNjE3NiI6Ijg4QkYwREI2RDcwREVFNTYiOiIwMDRCRDZFRjA5MTc2MDYyIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyMgorZGVzX2RlY3J5cHRfZWNiOiIwMjU4MTYxNjQ2MjlCMDA3IjoiQTFGOTkxNTU0MTAyMEI1NiI6IjQ4MEQzOTAwNkVFNzYyRjIiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzIzCitkZXNfZGVjcnlwdF9lY2I6IjQ5NzkzRUJDNzlCMzI1OEYiOiI2RkJGMUNBRkNGRkQwNTU2IjoiNDM3NTQwQzg2OThGM0NGQSIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjQKK2Rlc19kZWNyeXB0X2VjYjoiNEZCMDVFMTUxNUFCNzNBNyI6IjJGMjJFNDlCQUI3Q0ExQUMiOiIwNzJENDNBMDc3MDc1MjkyIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyNQorZGVzX2RlY3J5cHRfZWNiOiI0OUU5NUQ2RDRDQTIyOUJGIjoiNUE2QjYxMkNDMjZDQ0U0QSI6IjAyRkU1NTc3ODExN0YxMkEiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzI2CitkZXNfZGVjcnlwdF9lY2I6IjAxODMxMERDNDA5QjI2RDYiOiI1RjRDMDM4RUQxMkIyRTQxIjoiMUQ5RDVDNTAxOEY3MjhDMiIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjcKK2Rlc19kZWNyeXB0X2VjYjoiMUM1ODdGMUMxMzkyNEZFRiI6IjYzRkFDMEQwMzREOUY3OTMiOiIzMDU1MzIyODZENkYyOTVBIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyOAorZGVzX2RlY3J5cHRfZWNiOiIwMTAxMDEwMTAxMDEwMTAxIjoiNjE3QjNBMENFOEYwNzEwMCI6IjAxMjM0NTY3ODlBQkNERUYiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzI5CitkZXNfZGVjcnlwdF9lY2I6IjFGMUYxRjFGMEUwRTBFMEUiOiJEQjk1ODYwNUY4QzhDNjA2IjoiMDEyMzQ1Njc4OUFCQ0RFRiIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMzAKK2Rlc19kZWNyeXB0X2VjYjoiRTBGRUUwRkVGMUZFRjFGRSI6IkVEQkZEMUM2NkMyOUNDQzciOiIwMTIzNDU2Nzg5QUJDREVGIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMzMQorZGVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwIjoiMzU1NTUwQjIxNTBFMjQ1MSI6IkZGRkZGRkZGRkZGRkZGRkYiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzMyCitkZXNfZGVjcnlwdF9lY2I6IkZGRkZGRkZGRkZGRkZGRkYiOiJDQUFBQUY0REVBRjFEQkFFIjoiMDAwMDAwMDAwMDAwMDAwMCIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMzMKK2Rlc19kZWNyeXB0X2VjYjoiMDEyMzQ1Njc4OUFCQ0RFRiI6IkQ1RDQ0RkY3MjA2ODNEMEQiOiIwMDAwMDAwMDAwMDAwMDAwIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMzNAorZGVzX2RlY3J5cHRfZWNiOiJGRURDQkE5ODc2NTQzMjEwIjoiMkEyQkIwMDhERjk3QzJGMiI6IkZGRkZGRkZGRkZGRkZGRkYiCisKK0RFUy1DQkMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxCitkZXNfZW5jcnlwdF9jYmM6IjAxMjM0NTY3ODlhYmNkZWYiOiJmZWRjYmE5ODc2NTQzMjEwIjoiMzczNjM1MzQzMzMyMzEyMDRFNkY3NzIwNjk3MzIwNzQ2ODY1MjA3NDY5NkQ2NTIwIjoiY2NkMTczZmZhYjIwMzlmNGFjZDhhZWZkZGZkOGExZWI0NjhlOTExNTc4ODhiYTY4IjowCisKK0RFUy1DQkMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxCitkZXNfZGVjcnlwdF9jYmM6IjAxMjM0NTY3ODlhYmNkZWYiOiJmZWRjYmE5ODc2NTQzMjEwIjoiY2NkMTczZmZhYjIwMzlmNGFjZDhhZWZkZGZkOGExZWI0NjhlOTExNTc4ODhiYTY4IjoiMzczNjM1MzQzMzMyMzEyMDRFNkY3NzIwNjk3MzIwNzQ2ODY1MjA3NDY5NkQ2NTIwIjowCisKKzNERVMtRUNCIDJLZXkgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxCitkZXMzX2VuY3J5cHRfZWNiOjI6IjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGIjoiMDAwMDAwMDAwMDAwMDAwMCI6IjkyOTVCNTlCQjM4NDczNkUiCisKKzNERVMtRUNCIDJLZXkgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyCitkZXMzX2VuY3J5cHRfZWNiOjI6IkZGRkZGRkZGRkZGRkZGRkYzMDAwMDAwMDAwMDAwMDAwIjoiRkZGRkZGRkZGRkZGRkZGRiI6IjE5OUU5RDZERjM5QUE4MTYiCisKKzNERVMtRUNCIDJLZXkgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxCitkZXMzX2RlY3J5cHRfZWNiOjI6IjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGIjoiOTI5NUI1OUJCMzg0NzM2RSI6IjAwMDAwMDAwMDAwMDAwMDAiCisKKzNERVMtRUNCIDJLZXkgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyCitkZXMzX2RlY3J5cHRfZWNiOjI6IkZGRkZGRkZGRkZGRkZGRkYzMDAwMDAwMDAwMDAwMDAwIjoiMTk5RTlENkRGMzlBQTgxNiI6IkZGRkZGRkZGRkZGRkZGRkYiCisKKzNERVMtQ0JDIDNLZXkgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxCitkZXMzX2VuY3J5cHRfY2JjOjM6IjAxMjM0NTY3ODlhYmNkZWZmMWUwZDNjMmI1YTQ5Nzg2ZmVkY2JhOTg3NjU0MzIxMCI6ImZlZGNiYTk4NzY1NDMyMTAiOiIzNzM2MzUzNDMzMzIzMTIwNEU2Rjc3MjA2OTczMjA3NDY4NjUyMDc0Njk2RDY1MjAiOiIzRkUzMDFDOTYyQUMwMUQwMjIxMzc2M0MxQ0JENENEQzc5OTY1N0MwNjRFQ0Y1RDQiOjAKKworM0RFUy1DQkMgM0tleSBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzEKK2RlczNfZGVjcnlwdF9jYmM6MzoiMDEyMzQ1Njc4OWFiY2RlZmYxZTBkM2MyYjVhNDk3ODZmZWRjYmE5ODc2NTQzMjEwIjoiZmVkY2JhOTg3NjU0MzIxMCI6IjNGRTMwMUM5NjJBQzAxRDAyMjEzNzYzQzFDQkQ0Q0RDNzk5NjU3QzA2NEVDRjVENCI6IjM3MzYzNTM0MzMzMjMxMjA0RTZGNzcyMDY5NzMyMDc0Njg2NTIwNzQ2OTZENjUyMCI6MAorCitERVMtQ0JDIEVuY3J5cHQgKEludmFsaWQgaW5wdXQgbGVuZ3RoKQorZGVzX2VuY3J5cHRfY2JjOiIwMTIzNDU2Nzg5YWJjZGVmIjoiZmVkY2JhOTg3NjU0MzIxMCI6IjM3MzYzNTM0MzMzMjMxMjA0RTZGNzcyMDY5NzMyMDc0Njg2NTIwNzQ2OTZENjUiOiIiOk1CRURUTFNfRVJSX0RFU19JTlZBTElEX0lOUFVUX0xFTkdUSAorCiszREVTLUNCQyAzS2V5IEVuY3J5cHQgKEludmFsaWQgaW5wdXQgbGVuZ3RoKQorZGVzM19lbmNyeXB0X2NiYzozOiIwMTIzNDU2Nzg5YWJjZGVmZjFlMGQzYzJiNWE0OTc4NmZlZGNiYTk4NzY1NDMyMTAiOiJmZWRjYmE5ODc2NTQzMjEwIjoiMzczNjM1MzQzMzMyMzEyMDRFNkY3NzIwNjk3MzIwNzQ2ODY1MjA3NDY5NkQ2NSI6IiI6TUJFRFRMU19FUlJfREVTX0lOVkFMSURfSU5QVVRfTEVOR1RICisKK1J1biB0aHJvdWdoIHBhcml0eSBiaXQgdGVzdHMKK2Rlc19rZXlfcGFyaXR5X3J1bjoKKworREVTIFNlbGZ0ZXN0CitkZXNfc2VsZnRlc3Q6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVzLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Rlcy5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTczYTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Rlcy5mdW5jdGlvbgpAQCAtMCwwICsxLDM2NyBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9kZXMuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfREVTX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGRlc19jaGVja193ZWFrKCBjaGFyICprZXlfaGV4LCBpbnQgcmV0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRV07CisKKyAgICBtZW1zZXQoIGtleSwgMCwgc2l6ZW9mIGtleSApOworCisgICAgdW5oZXhpZnkoIGtleSwga2V5X2hleCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzX2tleV9jaGVja193ZWFrKCBrZXkgKSA9PSByZXQgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZGVzX2VuY3J5cHRfZWNiKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19kZXNfY29udGV4dCBjdHg7CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfZGVzX2luaXQoICZjdHggKTsKKworICAgIHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19kZXNfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ciApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Rlc19jcnlwdF9lY2IoICZjdHgsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgOCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZGVzX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZGVzX2RlY3J5cHRfZWNiKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19kZXNfY29udGV4dCBjdHg7CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfZGVzX2luaXQoICZjdHggKTsKKworICAgIHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19kZXNfc2V0a2V5X2RlYyggJmN0eCwga2V5X3N0ciApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Rlc19jcnlwdF9lY2IoICZjdHgsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgOCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZGVzX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwordm9pZCBkZXNfZW5jcnlwdF9jYmMoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZywgaW50IGNiY19yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Rlc19jb250ZXh0IGN0eDsKKyAgICBpbnQgc3JjX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Rlc19pbml0KCAmY3R4ICk7CisKKyAgICB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19kZXNfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ciApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Rlc19jcnlwdF9jYmMoICZjdHgsIE1CRURUTFNfREVTX0VOQ1JZUFQsIHNyY19sZW4sIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gY2JjX3Jlc3VsdCApOworICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZGVzX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwordm9pZCBkZXNfZGVjcnlwdF9jYmMoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZywgaW50IGNiY19yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Rlc19jb250ZXh0IGN0eDsKKyAgICBpbnQgc3JjX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Rlc19pbml0KCAmY3R4ICk7CisKKyAgICB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19kZXNfc2V0a2V5X2RlYyggJmN0eCwga2V5X3N0ciApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Rlc19jcnlwdF9jYmMoICZjdHgsIE1CRURUTFNfREVTX0RFQ1JZUFQsIHNyY19sZW4sIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gY2JjX3Jlc3VsdCApOworICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZGVzX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZGVzM19lbmNyeXB0X2VjYiggaW50IGtleV9jb3VudCwgY2hhciAqaGV4X2tleV9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2RlczNfY29udGV4dCBjdHg7CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfZGVzM19pbml0KCAmY3R4ICk7CisKKyAgICB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIGlmKCBrZXlfY291bnQgPT0gMiApCisgICAgICAgIG1iZWR0bHNfZGVzM19zZXQya2V5X2VuYyggJmN0eCwga2V5X3N0ciApOworICAgIGVsc2UgaWYoIGtleV9jb3VudCA9PSAzICkKKyAgICAgICAgbWJlZHRsc19kZXMzX3NldDNrZXlfZW5jKCAmY3R4LCBrZXlfc3RyICk7CisgICAgZWxzZQorICAgICAgICBURVNUX0FTU0VSVCggMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzM19jcnlwdF9lY2IoICZjdHgsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgOCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZGVzM19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGRlczNfZGVjcnlwdF9lY2IoIGludCBrZXlfY291bnQsIGNoYXIgKmhleF9rZXlfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19kZXMzX2NvbnRleHQgY3R4OworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2RlczNfaW5pdCggJmN0eCApOworCisgICAgdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBpZigga2V5X2NvdW50ID09IDIgKQorICAgICAgICBtYmVkdGxzX2RlczNfc2V0MmtleV9kZWMoICZjdHgsIGtleV9zdHIgKTsKKyAgICBlbHNlIGlmKCBrZXlfY291bnQgPT0gMyApCisgICAgICAgIG1iZWR0bHNfZGVzM19zZXQza2V5X2RlYyggJmN0eCwga2V5X3N0ciApOworICAgIGVsc2UKKyAgICAgICAgVEVTVF9BU1NFUlQoIDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RlczNfY3J5cHRfZWNiKCAmY3R4LCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIDggKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2RlczNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCit2b2lkIGRlczNfZW5jcnlwdF9jYmMoIGludCBrZXlfY291bnQsIGNoYXIgKmhleF9rZXlfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfaXZfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2RzdF9zdHJpbmcsIGludCBjYmNfcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19kZXMzX2NvbnRleHQgY3R4OworICAgIGludCBzcmNfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfZGVzM19pbml0KCAmY3R4ICk7CisKKyAgICB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgaWYoIGtleV9jb3VudCA9PSAyICkKKyAgICAgICAgbWJlZHRsc19kZXMzX3NldDJrZXlfZW5jKCAmY3R4LCBrZXlfc3RyICk7CisgICAgZWxzZSBpZigga2V5X2NvdW50ID09IDMgKQorICAgICAgICBtYmVkdGxzX2RlczNfc2V0M2tleV9lbmMoICZjdHgsIGtleV9zdHIgKTsKKyAgICBlbHNlCisgICAgICAgIFRFU1RfQVNTRVJUKCAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kZXMzX2NyeXB0X2NiYyggJmN0eCwgTUJFRFRMU19ERVNfRU5DUllQVCwgc3JjX2xlbiwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSBjYmNfcmVzdWx0ICk7CisKKyAgICBpZiggY2JjX3Jlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBzcmNfbGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2RlczNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCit2b2lkIGRlczNfZGVjcnlwdF9jYmMoIGludCBrZXlfY291bnQsIGNoYXIgKmhleF9rZXlfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfaXZfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2RzdF9zdHJpbmcsIGludCBjYmNfcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19kZXMzX2NvbnRleHQgY3R4OworICAgIGludCBzcmNfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfZGVzM19pbml0KCAmY3R4ICk7CisKKyAgICB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgaWYoIGtleV9jb3VudCA9PSAyICkKKyAgICAgICAgbWJlZHRsc19kZXMzX3NldDJrZXlfZGVjKCAmY3R4LCBrZXlfc3RyICk7CisgICAgZWxzZSBpZigga2V5X2NvdW50ID09IDMgKQorICAgICAgICBtYmVkdGxzX2RlczNfc2V0M2tleV9kZWMoICZjdHgsIGtleV9zdHIgKTsKKyAgICBlbHNlCisgICAgICAgIFRFU1RfQVNTRVJUKCAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kZXMzX2NyeXB0X2NiYyggJmN0eCwgTUJFRFRMU19ERVNfREVDUllQVCwgc3JjX2xlbiwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSBjYmNfcmVzdWx0ICk7CisKKyAgICBpZiggY2JjX3Jlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBzcmNfbGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2RlczNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBkZXNfa2V5X3Bhcml0eV9ydW4oKQoreworICAgIGludCBpLCBqLCBjbnQ7CisgICAgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkVdOworICAgIHVuc2lnbmVkIGludCBwYXJpdHk7CisKKyAgICBtZW1zZXQoIGtleSwgMCwgTUJFRFRMU19ERVNfS0VZX1NJWkUgKTsKKyAgICBjbnQgPSAwOworCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBieXRlIHZhbHVlcworICAgIC8vCisgICAgZm9yKCBpID0gMDsgaSA8IDMyOyBpKysgKQorICAgIHsKKyAgICAgICAgZm9yKCBqID0gMDsgaiA8IDg7IGorKyApCisgICAgICAgICAgICBrZXlbal0gPSBjbnQrKzsKKworICAgICAgICAvLyBTZXQgdGhlIGtleSBwYXJpdHkgYWNjb3JkaW5nIHRvIHRoZSB0YWJsZQorICAgICAgICAvLworICAgICAgICBtYmVkdGxzX2Rlc19rZXlfc2V0X3Bhcml0eSgga2V5ICk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHBhcml0eSB3aXRoIGEgZnVuY3Rpb24KKyAgICAgICAgLy8KKyAgICAgICAgZm9yKCBqID0gMDsgaiA8IDg7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcml0eSA9IGtleVtqXSBeICgga2V5W2pdID4+IDQgKTsKKyAgICAgICAgICAgIHBhcml0eSA9IHBhcml0eSBeCisgICAgICAgICAgICAgICAgICAgICggcGFyaXR5ID4+IDEgKSBeCisgICAgICAgICAgICAgICAgICAgICggcGFyaXR5ID4+IDIgKSBeCisgICAgICAgICAgICAgICAgICAgICggcGFyaXR5ID4+IDMgKTsKKyAgICAgICAgICAgIHBhcml0eSAmPSAxOworCisgICAgICAgICAgICBpZiggcGFyaXR5ICE9IDEgKQorICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKCAwICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayB0aGUgcGFyaXR5IHdpdGggdGhlIHRhYmxlCisgICAgICAgIC8vCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Rlc19rZXlfY2hlY2tfa2V5X3Bhcml0eSgga2V5ICkgPT0gMCApOworICAgIH0KK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBkZXNfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Rlc19zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2RobS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2RobS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyY2RlZmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGhtLmRhdGEKQEAgLTAsMCArMSwxNyBAQAorRGlmZmllLUhlbGxtYW4gZnVsbCBleGNoYW5nZSAjMQorZGhtX2RvX2RobToxMDoiMjMiOjEwOiI1IgorCitEaWZmaWUtSGVsbG1hbiBmdWxsIGV4Y2hhbmdlICMyCitkaG1fZG9fZGhtOjEwOiI5MzQ1MDk4MzA5NDg1MDkzODQ1MDk4MzQwOTYyMyI6MTA6IjkzNDUwOTgzMDQ4NTA5Mzg0NTA5ODM0MDk2MjIiCisKK0RpZmZpZS1IZWxsbWFuIGZ1bGwgZXhjaGFuZ2UgIzMKK2RobV9kb19kaG06MTA6IjkzNDUwOTgzMDk0ODUwOTM4NDUwOTgzNDA5NjIzOTgyMzE3Mzk4MTcxMjk4NzE5ODczOTE4NzM5MTgyNzM5NzEyOTM4NzE5Mjg3MzkxODc5MzgxMjcxIjoxMDoiOTM0NTA5ODMwOTQ4NTA5Mzg0NTA5ODM0MDk2MjIyMzk4MTMyOTgxOTgxMjc5MjEzNzMxMjk3MzI5NzEyMzkxMjc5MTI3MSIKKworRGlmZmllLUhhbGxtYW4gbG9hZCBwYXJhbWV0ZXJzIGZyb20gZmlsZQorZGhtX2ZpbGU6ImRhdGFfZmlsZXMvZGhwYXJhbXMucGVtIjoiOWUzNWY0MzA0NDNhMDk5MDRmM2EzOWE5Nzk3OTdkMDcwZGY1MzM3OGU3OWMyNDM4YmVmNGU3NjFmM2M3MTQ1NTMzMjg1ODliMDQxYzgwOWJlMWQ2YzZiNWYxZmM5ZjQ3ZDNhMjU0NDMxODgyNTNhOTkyYTU2ODE4YjM3YmE5ZGU1YTQwZDM2MmU1NmVmZjBiZTU0MTc0NzRjMTI1YzE5OTI3MmM4ZmU0MWRlYTczM2RmNmY2NjJjOTJhZTc2NTU2ZTc1NWQxMGM2NGU2YTUwOTY4ZjY3ZmM2ZWE3M2QwZGNhODU2OWJlMmJhMjA0ZTIzNTgwZDhiY2EyZjQ5NzViMyI6IjAyIjoxMjgKKworRGlmZmllLUhhbGxtYW4gbG9hZCBwYXJhbWV0ZXJzIGZyb20gZmlsZQorZGhtX2ZpbGU6ImRhdGFfZmlsZXMvZGgub3B0bGVuLnBlbSI6ImIzMTI2YWVhZjQ3MTUzYzdkNjdmNDAzMDMwYjI5MmI1YmQ1YTZjOWVhZTFjMTM3YWYzNDA4N2ZjZTJhMzZhNTc4ZDcwYzVjNTYwYWQyYmRiOTI0YzRhNGRiZWUyMGExNjcxYmU3MTAzY2U4N2RlZmE3NjkwODkzNjgwM2RiZWNhNjBjMzNlMTI4OWMxYTAzYWMyYzZjNGU0OTQwNWU1OTAyZmEwNTk2YTFjYmFhODk1Y2M0MDJkNTIxM2VkNGE1ZjFmNWJhOGI1ZTFlZDNkYTk1MWE0YzQ3NWFmZWIwY2E2NjBiNzM2OGMzOGM4ZTgwOWYzODJkOTZhZTE5ZTYwZGM5ODRlNjFjYjQyYjVkZmQ3MjMzMjJhY2YzMjdmOWU0MTNjZGE2NDAwYzE1YzViMmVhMWZhMzQ0MDVkODM5ODJmYmE0MGU2ZDg1MmRhM2Q5MTAxOWJmMjM1MTEzMTQyNTRkYzIxMWE5MDgzM2U1YjE3OThlZTUyYTc4MTk4YzU1NTY0NDcyOWFkOTJmMDYwMzY3Yzc0ZGVkMzc3MDRhZGZjMjczYTRhMzNmZWM4MjFiZDJlYmQzYmMwNTE3MzBlOTdhNGRkMTRkMmI3NjYwNjI1OTJmNWVlYzA5ZDE2YmI1MGVmZWJmMmNjMDBkZDNlMGUzNDE4ZTYwZWM4NDg3MGY3IjoiODAwYWJmZTdkYzY2N2FhMTdiY2Q3YzA0NjE0YmMyMjFhNjU0ODJjY2MwNGI2MDQ2MDJiMGUxMzE5MDhhOTM4ZWExMWI0OGRjNTE1ZGFiN2FiY2JiMWUwYzdmZDY2NTExZWRjMGQ4NjU1MWI3NjMyNDk2ZTAzZGY5NDM1N2UxYzRlYTA3YTdjZTFlMzgxYTJmY2FmZGZmNWY1YmYwMGRmODI4ODA2MDIwZTg3NWMwMDkyNmU0ZDAxMWY4ODQ3N2ExYjAxOTI3ZDczODEzY2FkNDg0N2M2Mzk2YjkyNDQ2MjFiZTJiMDBiNjNjNjU5MjUzMzE4NDEzNDQzY2QyNDQyMTVjZDdmZDRjYmU3OTZlODJjNmNmNzBmODljYzBjNTI4ZmI4ZTM0NDgwOWIzMTg3NmU3ZWY3MzlkNTE2MGQwOTVjOTY4NDE4OGIwYzg3NTVjN2E0NjhkNDdmNTZkNmRiOWVhMDEyOTI0ZWNiMDU1NmZiNzEzMTJhOGQ3YzkzYmIyODk4ZWEwOGVlNTRlZWI1OTQ1NDgyODVmMDZhOTczY2JiZTJhMGNiMDJlOTBmMzIzZmUwNDU1MjFmMzRjNjgzNTRhNmQzZTk1ZGJmZmYxZWI2NDY5MmVkYzBhNDRmM2QzZTQwOGQwZTQ3OWE1NDFlNzc5YTYwNTQyNTllMmQ4NTQiOjI1NgorCitEaWZmaWUtSGVsbG1hbiBzZWxmdGVzdAorZGhtX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2RobS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9kaG0uZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliOGUxOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9kaG0uZnVuY3Rpb24KQEAgLTAsMCArMSwxMjggQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvZGhtLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0RITV9DOk1CRURUTFNfQklHTlVNX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGRobV9kb19kaG0oIGludCByYWRpeF9QLCBjaGFyICppbnB1dF9QLAorICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRywgY2hhciAqaW5wdXRfRyApCit7CisgICAgbWJlZHRsc19kaG1fY29udGV4dCBjdHhfc3J2OworICAgIG1iZWR0bHNfZGhtX2NvbnRleHQgY3R4X2NsaTsKKyAgICB1bnNpZ25lZCBjaGFyIHNrZVsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gc2tlOworICAgIHVuc2lnbmVkIGNoYXIgcHViX2NsaVsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNlY19zcnZbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBzZWNfY2xpWzEwMDBdOworICAgIHNpemVfdCBza2VfbGVuID0gMDsKKyAgICBzaXplX3QgcHViX2NsaV9sZW4gPSAwOworICAgIHNpemVfdCBzZWNfc3J2X2xlbjsKKyAgICBzaXplX3Qgc2VjX2NsaV9sZW47CisgICAgaW50IHhfc2l6ZSwgaTsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisKKyAgICBtYmVkdGxzX2RobV9pbml0KCAmY3R4X3NydiApOworICAgIG1iZWR0bHNfZGhtX2luaXQoICZjdHhfY2xpICk7CisgICAgbWVtc2V0KCBza2UsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIHB1Yl9jbGksIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIHNlY19zcnYsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIHNlY19jbGksIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMHgwMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworCisgICAgLyoKKyAgICAgKiBTZXQgcGFyYW1zCisgICAgICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4X3Nydi5QLCByYWRpeF9QLCBpbnB1dF9QICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eF9zcnYuRywgcmFkaXhfRywgaW5wdXRfRyApID09IDAgKTsKKyAgICB4X3NpemUgPSBtYmVkdGxzX21waV9zaXplKCAmY3R4X3Nydi5QICk7CisgICAgcHViX2NsaV9sZW4gPSB4X3NpemU7CisKKyAgICAvKgorICAgICAqIEZpcnN0IGtleSBleGNoYW5nZQorICAgICAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RobV9tYWtlX3BhcmFtcyggJmN0eF9zcnYsIHhfc2l6ZSwgc2tlLCAmc2tlX2xlbiwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIHNrZVtza2VfbGVuKytdID0gMDsKKyAgICBza2Vbc2tlX2xlbisrXSA9IDA7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGhtX3JlYWRfcGFyYW1zKCAmY3R4X2NsaSwgJnAsIHNrZSArIHNrZV9sZW4gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kaG1fbWFrZV9wdWJsaWMoICZjdHhfY2xpLCB4X3NpemUsIHB1Yl9jbGksIHB1Yl9jbGlfbGVuLCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGhtX3JlYWRfcHVibGljKCAmY3R4X3NydiwgcHViX2NsaSwgcHViX2NsaV9sZW4gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoICZjdHhfc3J2LCBzZWNfc3J2LCBzaXplb2YoIHNlY19zcnYgKSwgJnNlY19zcnZfbGVuLCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0KCAmY3R4X2NsaSwgc2VjX2NsaSwgc2l6ZW9mKCBzZWNfY2xpICksICZzZWNfY2xpX2xlbiwgTlVMTCwgTlVMTCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzZWNfc3J2X2xlbiA9PSBzZWNfY2xpX2xlbiApOworICAgIFRFU1RfQVNTRVJUKCBzZWNfc3J2X2xlbiAhPSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggc2VjX3Nydiwgc2VjX2NsaSwgc2VjX3Nydl9sZW4gKSA9PSAwICk7CisKKyAgICAvKiBSZS1kbyBjYWxjX3NlY3JldCBvbiBzZXJ2ZXIgYSBmZXcgdGltZXMgdG8gdGVzdCB1cGRhdGUgb2YgYmxpbmRpbmcgdmFsdWVzICovCisgICAgZm9yKCBpID0gMDsgaSA8IDM7IGkrKyApCisgICAgeworICAgICAgICBzZWNfc3J2X2xlbiA9IDEwMDA7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggJmN0eF9zcnYsIHNlY19zcnYsIHNpemVvZiggc2VjX3NydiApLCAmc2VjX3Nydl9sZW4sICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IDAgKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc2VjX3Nydl9sZW4gPT0gc2VjX2NsaV9sZW4gKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHNlY19zcnZfbGVuICE9IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggc2VjX3Nydiwgc2VjX2NsaSwgc2VjX3Nydl9sZW4gKSA9PSAwICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZWNvbmQga2V5IGV4Y2hhbmdlIHRvIHRlc3QgY2hhbmdlIG9mIGJsaW5kaW5nIHZhbHVlcyBvbiBzZXJ2ZXIKKyAgICAgKi8KKyAgICBwID0gc2tlOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGhtX21ha2VfcGFyYW1zKCAmY3R4X3NydiwgeF9zaXplLCBza2UsICZza2VfbGVuLCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgc2tlW3NrZV9sZW4rK10gPSAwOworICAgIHNrZVtza2VfbGVuKytdID0gMDsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kaG1fcmVhZF9wYXJhbXMoICZjdHhfY2xpLCAmcCwgc2tlICsgc2tlX2xlbiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RobV9tYWtlX3B1YmxpYyggJmN0eF9jbGksIHhfc2l6ZSwgcHViX2NsaSwgcHViX2NsaV9sZW4sICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kaG1fcmVhZF9wdWJsaWMoICZjdHhfc3J2LCBwdWJfY2xpLCBwdWJfY2xpX2xlbiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggJmN0eF9zcnYsIHNlY19zcnYsIHNpemVvZiggc2VjX3NydiApLCAmc2VjX3Nydl9sZW4sICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoICZjdHhfY2xpLCBzZWNfY2xpLCBzaXplb2YoIHNlY19jbGkgKSwgJnNlY19jbGlfbGVuLCBOVUxMLCBOVUxMICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIHNlY19zcnZfbGVuID09IHNlY19jbGlfbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIHNlY19zcnZfbGVuICE9IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBzZWNfc3J2LCBzZWNfY2xpLCBzZWNfc3J2X2xlbiApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2RobV9mcmVlKCAmY3R4X3NydiApOworICAgIG1iZWR0bHNfZGhtX2ZyZWUoICZjdHhfY2xpICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTyAqLwordm9pZCBkaG1fZmlsZSggY2hhciAqZmlsZW5hbWUsIGNoYXIgKnAsIGNoYXIgKmcsIGludCBsZW4gKQoreworICAgIG1iZWR0bHNfZGhtX2NvbnRleHQgY3R4OworICAgIG1iZWR0bHNfbXBpIFAsIEc7CisKKyAgICBtYmVkdGxzX2RobV9pbml0KCAmY3R4ICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlAgKTsgbWJlZHRsc19tcGlfaW5pdCggJkcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlAsIDE2LCBwICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkcsIDE2LCBnICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGhtX3BhcnNlX2RobWZpbGUoICZjdHgsIGZpbGVuYW1lICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIGN0eC5sZW4gPT0gKHNpemVfdCkgbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZjdHguUCwgJlAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZjdHguRywgJkcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlAgKTsgbWJlZHRsc19tcGlfZnJlZSggJkcgKTsKKyAgICBtYmVkdGxzX2RobV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgZGhtX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kaG1fc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2RoLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNkaC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MTE5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNkaC5kYXRhCkBAIC0wLDAgKzEsMzkgQEAKK0VDREggcHJpbWl0aXZlIHJhbmRvbSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNkaF9wcmltaXRpdmVfcmFuZG9tOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMQorCitFQ0RIIHByaW1pdGl2ZSByYW5kb20gIzIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKK2VjZGhfcHJpbWl0aXZlX3JhbmRvbTpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjEKKworRUNESCBwcmltaXRpdmUgcmFuZG9tICMzCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitlY2RoX3ByaW1pdGl2ZV9yYW5kb206TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxCisKK0VDREggcHJpbWl0aXZlIHJhbmRvbSAjNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorZWNkaF9wcmltaXRpdmVfcmFuZG9tOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMQorCitFQ0RIIHByaW1pdGl2ZSByYW5kb20gIzUKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK2VjZGhfcHJpbWl0aXZlX3JhbmRvbTpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjEKKworRUNESCBwcmltaXRpdmUgcmZjIDU5MDMgcDI1NgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorZWNkaF9wcmltaXRpdmVfdGVzdHZlYzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IkM4OEYwMUY1MTBEOUFDM0Y3MEEyOTJEQUEyMzE2REU1NDRFOUFBQjhBRkU4NDA0OUM2MkE5QzU3ODYyRDE0MzMiOiJEQUQwQjY1Mzk0MjIxQ0Y5QjA1MUUxRkVDQTU3ODdEMDk4REZFNjM3RkM5MEI5RUY5NDVEMEMzNzcyNTgxMTgwIjoiNTI3MUEwNDYxQ0RCODI1MkQ2MUYxQzQ1NkZBM0U1OUFCMUY0NUIzM0FDQ0Y1RjU4Mzg5RTA1NzdCODk5MEJCMyI6IkM2RUY5QzVENzhBRTAxMkEwMTExNjRBQ0IzOTdDRTIwODg2ODVEOEYwNkJGOUJFMEIyODNBQjQ2NDc2QkVFNTMiOiJEMTJERkI1Mjg5QzhENEY4MTIwOEI3MDI3MDM5OEMzNDIyOTY5NzBBMEJDQ0I3NEM3MzZGQzc1NTQ0OTRCRjYzIjoiNTZGQkYzQ0EzNjZDQzIzRTgxNTc4NTRDMTNDNThENkFBQzIzRjA0NkFEQTMwRjgzNTNFNzRGMzMwMzk4NzJBQiI6IkQ2ODQwRjZCNDJGNkVEQUZEMTMxMTZFMEUxMjU2NTIwMkZFRjhFOUVDRTdEQ0UwMzgxMjQ2NEQwNEI5NDQyREUiCisKK0VDREggcHJpbWl0aXZlIHJmYyA1OTAzIHAzODQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK2VjZGhfcHJpbWl0aXZlX3Rlc3R2ZWM6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiIwOTlGM0M3MDM0RDRBMkM2OTk4ODRENzNBMzc1QTY3Rjc2MjRFRjdDNkIzQzBGMTYwNjQ3QjY3NDE0RENFNjU1RTM1QjUzODA0MUU2NDlFRTNGQUVGODk2NzgzQUIxOTQiOiI2Njc4NDJEN0QxODBBQzJDREU2Rjc0RjM3NTUxRjU1NzU1Qzc2NDVDMjBFRjczRTMxNjM0RkU3MkI0QzU1RUU2REUzQUM4MDhBQ0I0QkRCNEM4ODczMkFFRTk1RjQxQUEiOiI5NDgyRUQxRkMwRUVCOUNBRkM0OTg0NjI1Q0NGQzIzRjY1MDMyMTQ5RTBFMTQ0QURBMDI0MTgxNTM1QTBGMzhFRUI5RkNGRjNDMkM5NDdEQUU2OUI0QzYzNDU3M0E4MUMiOiI0MUNCMDc3OUI0QkRCODVENDc4NDY3MjVGQkVDM0M5NDMwRkFCNDZDQzhEQzUwNjA4NTVDQzlCREEwQUEyOTQyRTAzMDgzMTI5MTZCOEVEMjk2MEU0QkQ1NUE3NDQ4RkMiOiJFNTU4REJFRjUzRUVDREUzRDNGQ0NGQzFBRUEwOEE4OUE5ODc0NzVEMTJGRDk1MEQ4M0NGQTQxNzMyQkM1MDlEMEQxQUM0M0EwMzM2REVGOTZGREE0MUQwNzc0QTM1NzEiOiJEQ0ZCRUM3QUFDRjMxOTY0NzIxNjlFODM4NDMwMzY3RjY2RUVCRTNDNkU3MEM0MTZERDVGMEM2ODc1OUREMUZGRjgzRkE0MDE0MjIwOURGRjVFQUFEOTZEQjlFNjM4NkMiOiIxMTE4NzMzMUMyNzk5NjJEOTNENjA0MjQzRkQ1OTJDQjlEMEE5MjZGNDIyRTQ3MTg3NTIxMjg3RTcxNTZDNUM0RDYwMzEzNTU2OUI5RTlEMDlDRjVENEEyNzBGNTk3NDYiCisKK0VDREggcHJpbWl0aXZlIHJmYyA1OTAzIHA1MjEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK2VjZGhfcHJpbWl0aXZlX3Rlc3R2ZWM6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOiIwMDM3QURFOTMxOUE4OUY0REFCREIzRUY0MTFBQUNDQ0E1MTIzQzYxQUNBQjU3QjUzOTNEQ0U0NzYwODE3MkEwOTVBQTg1QTMwRkUxQzI5NTJDNjc3MUQ5MzdCQTk3NzdGNTk1N0IyNjM5QkFCMDcyNDYyRjY4QzI3QTU3MzgyRDRBNTIiOiIwMDE1NDE3RTg0REJGMjhDMEFEM0MyNzg3MTMzNDlEQzdERjE1M0M4OTdBMTg5MUJEOThCQUI0MzU3QzlFQ0JFRTFFM0JGNDJFMDBCOEUzODBBRUFFNTdDMkQxMDc1NjQ5NDE4ODU5NDJBRjVBN0Y0NjAxNzIzQzQxOTVEMTc2Q0VEM0UiOiIwMTdDQUUyMEI2NjQxRDJFRUI2OTU3ODZEOEM5NDYxNDYyMzlEMDk5RTE4RTFENUE1MTRDNzM5RDdDQjRBMTBBRDhBNzg4MDE1QUM0MDVENzc5OURDNzVFN0I3RDVCNkNGMjI2MUE2QTdGMTUwNzQzOEJGMDFCRUI2Q0EzOTI2Rjk1ODIiOiIwMTQ1QkE5OUE4NDdBRjQzNzkzRkREMEU4NzJFN0NERkExNkJFMzBGREM3ODBGOTdCQ0NDM0YwNzgzODAyMDFFOUM2NzdENjAwQjM0Mzc1N0EzQkRCRjJBMzE2M0U0QzJGODY5Q0NBNzQ1OEFBNEE0RUZGQzMxMUY1Q0IxNTE2ODVFQjkiOiIwMEQwQjM5NzVBQzRCNzk5RjVCRUExNkQ1RTEzRTlBRjk3MUQ1RTlCOTg0QzlGMzk3MjhCNUU1NzM5NzM1QTIxOUI5N0MzNTY0MzZBREM2RTk1QkIwMzUyRjZCRTY0QTZDMjkxMkQ0RUYyRDA0MzNDRUQyQjYxNzE2NDAwMTJEOTQ2MEYiOiIwMTVDNjgyMjYzODM5NTZFM0JEMDY2RTc5N0I2MjNDMjdDRTBFQUMyRjU1MUExMEMyQzcyNEQ5ODUyMDc3Qjg3MjIwQjY1MzZDNUM0MDhBMUQyQUVCQjhFODZENjc4QUU0OUNCNTcwOTFGNDczMjI5NjU3OUFCNDRGQ0QxN0YwRkM1NkEiOiIwMTE0NEM3RDc5QUU2OTU2QkM4RURCOEU3Qzc4N0M0NTIxQ0IwODZGQTY0NDA3Rjk3ODk0RTVFNkIyRDc5QjA0RDE0MjdFNzNDQTRCQUEyNDBBMzQ3ODY4NTk4MTBDMDZCM0M3MTVBM0E4Q0MzMTUxRjJCRUU0MTc5OTZEMTlGM0RERUEiCisKK0VDREggZXhjaGFuZ2UgIzEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjZGhfZXhjaGFuZ2U6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxCisKK0VDREggZXhjaGFuZ2UgIzIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK2VjZGhfZXhjaGFuZ2U6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNkaC5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2RoLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNmE5N2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNkaC5mdW5jdGlvbgpAQCAtMCwwICsxLDE2MCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9lY2RoLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0VDREhfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZWNkaF9wcmltaXRpdmVfcmFuZG9tKCBpbnQgaWQgKQoreworICAgIG1iZWR0bHNfZWNwX2dyb3VwIGdycDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBxQSwgcUI7CisgICAgbWJlZHRsc19tcGkgZEEsIGRCLCB6QSwgekI7CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZxQSApOyBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmcUIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmZEEgKTsgbWJlZHRsc19tcGlfaW5pdCggJmRCICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnpBICk7IG1iZWR0bHNfbXBpX2luaXQoICZ6QiApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmdycCwgaWQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoICZncnAsICZkQSwgJnFBLCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKQorICAgICAgICAgICAgICAgICA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCAmZ3JwLCAmZEIsICZxQiwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkKKyAgICAgICAgICAgICAgICAgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoICZncnAsICZ6QSwgJnFCLCAmZEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkKCAmZ3JwLCAmekIsICZxQSwgJmRCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZ6QSwgJnpCICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmcUEgKTsgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJnFCICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmRBICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZkQiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZ6QSApOyBtYmVkdGxzX21waV9mcmVlKCAmekIgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZWNkaF9wcmltaXRpdmVfdGVzdHZlYyggaW50IGlkLCBjaGFyICpkQV9zdHIsIGNoYXIgKnhBX3N0ciwgY2hhciAqeUFfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkQl9zdHIsIGNoYXIgKnhCX3N0ciwgY2hhciAqeUJfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp6X3N0ciApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IHFBLCBxQjsKKyAgICBtYmVkdGxzX21waSBkQSwgZEIsIHpBLCB6QiwgY2hlY2s7CisgICAgdW5zaWduZWQgY2hhciBybmRfYnVmX0FbTUJFRFRMU19FQ1BfTUFYX0JZVEVTXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJuZF9idWZfQltNQkVEVExTX0VDUF9NQVhfQllURVNdOworICAgIHJuZF9idWZfaW5mbyBybmRfaW5mb19BLCBybmRfaW5mb19COworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZxQSApOyBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmcUIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmZEEgKTsgbWJlZHRsc19tcGlfaW5pdCggJmRCICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnpBICk7IG1iZWR0bHNfbXBpX2luaXQoICZ6QiApOyBtYmVkdGxzX21waV9pbml0KCAmY2hlY2sgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBpZCApID09IDAgKTsKKworICAgIHJuZF9pbmZvX0EuYnVmID0gcm5kX2J1Zl9BOworICAgIHJuZF9pbmZvX0EubGVuZ3RoID0gdW5oZXhpZnkoIHJuZF9idWZfQSwgZEFfc3RyICk7CisKKyAgICAvKiBGaXggcm5kX2J1Zl9BIGJ5IHNoaWZ0aW5nIGl0IGxlZnQgaWYgbmVjZXNzYXJ5ICovCisgICAgaWYoIGdycC5uYml0cyAlIDggIT0gMCApCisgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHNoaWZ0ID0gOCAtICggZ3JwLm5iaXRzICUgOCApOworICAgICAgICBzaXplX3QgaTsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgcm5kX2luZm9fQS5sZW5ndGggLSAxOyBpKysgKQorICAgICAgICAgICAgcm5kX2J1Zl9BW2ldID0gcm5kX2J1Zl9BW2ldIDw8IHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgICAgfCBybmRfYnVmX0FbaSsxXSA+PiAoIDggLSBzaGlmdCApOworCisgICAgICAgIHJuZF9idWZfQVtybmRfaW5mb19BLmxlbmd0aC0xXSA8PD0gc2hpZnQ7CisgICAgfQorCisgICAgcm5kX2luZm9fQi5idWYgPSBybmRfYnVmX0I7CisgICAgcm5kX2luZm9fQi5sZW5ndGggPSB1bmhleGlmeSggcm5kX2J1Zl9CLCBkQl9zdHIgKTsKKworICAgIC8qIEZpeCBybmRfYnVmX0IgYnkgc2hpZnRpbmcgaXQgbGVmdCBpZiBuZWNlc3NhcnkgKi8KKyAgICBpZiggZ3JwLm5iaXRzICUgOCAhPSAwICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc2hpZnQgPSA4IC0gKCBncnAubmJpdHMgJSA4ICk7CisgICAgICAgIHNpemVfdCBpOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCBybmRfaW5mb19CLmxlbmd0aCAtIDE7IGkrKyApCisgICAgICAgICAgICBybmRfYnVmX0JbaV0gPSBybmRfYnVmX0JbaV0gPDwgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IHJuZF9idWZfQltpKzFdID4+ICggOCAtIHNoaWZ0ICk7CisKKyAgICAgICAgcm5kX2J1Zl9CW3JuZF9pbmZvX0IubGVuZ3RoLTFdIDw8PSBzaGlmdDsKKyAgICB9CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoICZncnAsICZkQSwgJnFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJuZF9idWZmZXJfcmFuZCwgJnJuZF9pbmZvX0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoICEgbWJlZHRsc19lY3BfaXNfemVybyggJnFBICkgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjaGVjaywgMTYsIHhBX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJnFBLlgsICZjaGVjayApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjaGVjaywgMTYsIHlBX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJnFBLlksICZjaGVjayApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyggJmdycCwgJmRCLCAmcUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm5kX2J1ZmZlcl9yYW5kLCAmcm5kX2luZm9fQiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggISBtYmVkdGxzX2VjcF9pc196ZXJvKCAmcUIgKSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmNoZWNrLCAxNiwgeEJfc3RyICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmcUIuWCwgJmNoZWNrICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmNoZWNrLCAxNiwgeUJfc3RyICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmcUIuWSwgJmNoZWNrICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY2hlY2ssIDE2LCB6X3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkKCAmZ3JwLCAmekEsICZxQiwgJmRBLCBOVUxMLCBOVUxMICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmekEsICZjaGVjayApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkKCAmZ3JwLCAmekIsICZxQSwgJmRCLCBOVUxMLCBOVUxMICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmekIsICZjaGVjayApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJnFBICk7IG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZxQiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZkQSApOyBtYmVkdGxzX21waV9mcmVlKCAmZEIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmekEgKTsgbWJlZHRsc19tcGlfZnJlZSggJnpCICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZjaGVjayApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlY2RoX2V4Y2hhbmdlKCBpbnQgaWQgKQoreworICAgIG1iZWR0bHNfZWNkaF9jb250ZXh0IHNydiwgY2xpOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMDBdOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZidWY7CisgICAgc2l6ZV90IGxlbjsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisKKyAgICBtYmVkdGxzX2VjZGhfaW5pdCggJnNydiApOworICAgIG1iZWR0bHNfZWNkaF9pbml0KCAmY2xpICk7CisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDB4MDAsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmc3J2LmdycCwgaWQgKSA9PSAwICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMHgwMCwgc2l6ZW9mKCBidWYgKSApOyB2YnVmID0gYnVmOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZGhfbWFrZV9wYXJhbXMoICZzcnYsICZsZW4sIGJ1ZiwgMTAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZGhfcmVhZF9wYXJhbXMoICZjbGksICZ2YnVmLCBidWYgKyBsZW4gKSA9PSAwICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMHgwMCwgc2l6ZW9mKCBidWYgKSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMoICZjbGksICZsZW4sIGJ1ZiwgMTAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZGhfcmVhZF9wdWJsaWMoICZzcnYsIGJ1ZiwgbGVuICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldCggJnNydiwgJmxlbiwgYnVmLCAxMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldCggJmNsaSwgJmxlbiwgYnVmLCAxMDAwLCBOVUxMLCBOVUxMICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmc3J2LnosICZjbGkueiApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjZGhfZnJlZSggJnNydiApOworICAgIG1iZWR0bHNfZWNkaF9mcmVlKCAmY2xpICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VjZHNhLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNkc2EuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTY0MDc2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VjZHNhLmRhdGEKQEAgLTAsMCArMSwyNTIgQEAKK0VDRFNBIHByaW1pdGl2ZSByYW5kb20gIzEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjZHNhX3ByaW1fcmFuZG9tOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMQorCitFQ0RTQSBwcmltaXRpdmUgcmFuZG9tICMyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVECitlY2RzYV9wcmltX3JhbmRvbTpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjEKKworRUNEU0EgcHJpbWl0aXZlIHJhbmRvbSAjMworZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorZWNkc2FfcHJpbV9yYW5kb206TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxCisKK0VDRFNBIHByaW1pdGl2ZSByYW5kb20gIzQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK2VjZHNhX3ByaW1fcmFuZG9tOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMQorCitFQ0RTQSBwcmltaXRpdmUgcmFuZG9tICM1CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitlY2RzYV9wcmltX3JhbmRvbTpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjEKKworRUNEU0EgcHJpbWl0aXZlIHJmYyA0NzU0IHAyNTYKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK2VjZHNhX3ByaW1fdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiREM1MUQzODY2QTE1QkFDREUzM0Q5NkY5OTJGQ0E5OURBN0U2RUYwOTM0RTcwOTc1NTlDMjdGMTYxNEM4OEE3RiI6IjI0NDJBNUNDMEVDRDAxNUZBM0NBMzFEQzhFMkJCQzcwQkY0MkQ2MENCQ0EyMDA4NUUwODIyQ0IwNDIzNUU5NzAiOiI2RkM5OEJEN0U1MDIxMUE0QTI3MTAyRkEzNTQ5REY3OUVCQ0I0QkYyNDZCODA5NDVDRERGRTdENTA5QkJGRDdEIjoiOUU1NkY1MDkxOTY3ODREOTYzRDFDMEE0MDE1MTBFRTdBREEzRENDNURFRTA0QjE1NEJGNjFBRjFENUE2REVDRSI6IkJBNzgxNkJGOEYwMUNGRUE0MTQxNDBERTVEQUUyMjIzQjAwMzYxQTM5NjE3N0E5Q0I0MTBGRjYxRjIwMDE1QUQiOiJDQjI4RTA5OTlCOUM3NzE1RkQwQTgwRDhFNDdBNzcwNzk3MTZDQkJGOTE3REQ3MkU5NzU2NkVBMUMwNjY5NTdDIjoiODZGQTNCQjRFMjZDQUQ1QkY5MEI3RjgxODk5MjU2Q0U3NTk0QkIxRUEwQzg5MjEyNzQ4QkZGM0IzRDVCMDMxNSIKKworRUNEU0EgcHJpbWl0aXZlIHJmYyA0NzU0IHAzODQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK2VjZHNhX3ByaW1fdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMToiMEJFQjY0NjYzNEJBODc3MzVENzdBRTQ4MDlBMEVCRUE4NjU1MzVERTRDMUUxRENCNjkyRTg0NzA4RTgxQTVBRjYyRTUyOEMzOEIyQTgxQjM1MzA5NjY4RDczNTI0RDlGIjoiOTYyODFCRjhERDVFMDUyNUNBMDQ5QzA0OEQzNDVEMzA4Mjk2OEQxMEZFREY1QzVBQ0EwQzY0RTY0NjVBOTdFQTVDRTEwQzlERkVDMjE3OTc0MTU3MTA3MjFGNDM3OTIyIjoiNDQ3Njg4QkE5NDcwOEVCNkUyRTRENTlGNkFCNkQ3RURGRjkzMDFEMjQ5RkU0OUMzMzA5NjY1NUY1RDUwMkZBRDNEMzgzQjkxQzVFN0VEQUEyQjcxNENDOTlENTc0M0NBIjoiQjRCNzRFNDRENzFBMTNENTY4MDAzRDc0ODk5MDhENTY0Qzc3NjFFMjI5QzU4Q0JGQTE4OTUwMDk2RUI3NDYzQjg1NEQ3RkE5OTJGOTM0RDkyNzM3NjI4NUU2MzQxNEZBIjoiQ0IwMDc1M0Y0NUEzNUU4QkI1QTAzRDY5OUFDNjUwMDcyNzJDMzJBQjBFREVEMTYzMUE4QjYwNUE0M0ZGNUJFRDgwODYwNzJCQTFFN0NDMjM1OEJBRUNBMTM0QzgyNUE3IjoiRkIwMTdCOTE0RTI5MTQ5NDMyRDhCQUMyOUE1MTQ2NDBCNDZGNTNEREFCMkM2OTk0ODA4NEUyOTMwRjFDOEY3RTA4RTA3QzlDNjNGMkQyMUEwN0RDQjU2QTZBRjU2RUIzIjoiQjI2M0ExMzA1RTA1N0Y5ODREMzg3MjZBMUI0Njg3NDEwOUY0MTdCQ0ExMTI2NzRDNTI4MjYyQTQwQTYyOUFGMUNCQjlGNTE2Q0UwRkE3RDJGRjYzMDg2M0EwMEU4QjlGIgorCitFQ0RTQSBwcmltaXRpdmUgcmZjIDQ3NTQgcDUyMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorZWNkc2FfcHJpbV90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOiIwMDY1RkRBMzQwOTQ1MURDQUIwQTBFQUQ0NTQ5NTExMkEzRDgxM0MxN0JGRDM0QkRGOEMxMjA5RDdERjU4NDkxMjA1OTc3NzkwNjBBN0ZGOUQ3MDRBREY3OEI1NzBGRkFENkYwNjJFOTVDN0UwQzVENTQ4MUM1QjE1M0I0OEIzNzVGQTEiOiIwMTUxNTE4RjFBRjBGNTYzNTE3RURENTQ4NTE5MERGOTVBNEJGNTdCNUNCQTRDRjJBOUEzRjY0NzQ3MjVBMzVGN0FGRTBBNkRERUI4QkVEQkNENkExOTdFNTkyRDQwMTg4OTAxQ0VDRDY1MDY5OUM5QjVFNDU2QUVBNUFERDE5MDUyQTgiOiIwMDZGM0IxNDJFQTFCRkZGN0UyODM3QUQ0NEM5RTRGRjZEMkQzNEM3MzE4NEJCQUQ5MDAyNkRENUU2RTg1MzE3RDlERjQ1Q0FENzgwM0M2QzIwMDM1QjJGM0ZGNjNBRkY0RTFCQTY0RDFDMDc3NTc3REEzRjQyODZDNThGMEFFQUU2NDMiOiIwMEMxQzJCMzA1NDE5RjVBNDEzNDREN0U0MzU5OTMzRDczNDA5NkY1NTYxOTdBOUIyNDQzNDJCOEI2MkY0NkY5MzczNzc4RjlERTZCNjQ5N0IxRUY4MjVGRjI0RjQyRjlCNEE0QkQ3MzgyQ0ZDMzM3OEE1NDBCMUI3RjBDMUI5NTZDMkYiOiJEREFGMzVBMTkzNjE3QUJBQ0M0MTczNDlBRTIwNDEzMTEyRTZGQTRFODlBOTdFQTIwQTlFRUVFNjRCNTVEMzlBMjE5Mjk5MkEyNzRGQzFBODM2QkEzQzIzQTNGRUVCQkQ0NTRENDQyMzY0M0NFODBFMkE5QUM5NEZBNTRDQTQ5RiI6IjAxNTRGRDM4MzZBRjkyRDBEQ0E1N0RENTM0MUQzMDUzOTg4NTM0RkRFODMxOEZDNkFBQUFCNjhFMkU2RjQzMzlCMTlGMkYyODFBN0UwQjIyQzI2OUQ5M0NGODc5NEE5Mjc4ODgwRUQ3REJCOEQ5MzYyQ0FFQUNFRTU0NDMyMDU1MjI1MSI6IjAxNzcwNUE3MDMwMjkwRDFDRUI2MDVBOUExQkIwM0ZGOUNERDUyMUU4N0E2OTZFQzkyNkM4QzEwQzgzNjJERjQ5NzUzNjcxMDFGNjdEMUNGOUJDQ0JGMkYzRDIzOTUzNEZBNTA5RTcwQUFDODUxQUUwMUFBQzY4RDYyRjg2NjQ3MjY2MCIKKworRUNEU0Egd3JpdGUtcmVhZCByYW5kb20gIzEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjZHNhX3dyaXRlX3JlYWRfcmFuZG9tOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMQorCitFQ0RTQSB3cml0ZS1yZWFkIHJhbmRvbSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorZWNkc2Ffd3JpdGVfcmVhZF9yYW5kb206TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxCisKK0VDRFNBIHdyaXRlLXJlYWQgcmFuZG9tICMzCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitlY2RzYV93cml0ZV9yZWFkX3JhbmRvbTpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEKKworRUNEU0Egd3JpdGUtcmVhZCByYW5kb20gIzQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK2VjZHNhX3dyaXRlX3JlYWRfcmFuZG9tOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMQorCitFQ0RTQSB3cml0ZS1yZWFkIHJhbmRvbSAjNQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorZWNkc2Ffd3JpdGVfcmVhZF9yYW5kb206TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDE5MiBtYmVkdGxzX3NoYTEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI2RkFCMDM0OTM0RTRDMEZDOUFFNjdGNUI1NjU5QTlEN0QxRkVGRDE4N0VFMDlGRDQiOk1CRURUTFNfTURfU0hBMToic2FtcGxlIjoiOThDNkJEMTJCMjNFQUY1RTJBMjA0NTEzMjA4NkJFM0VCOEVCRDYyQUJGNjY5OEZGIjoiNTdBMjJCMDdERUE5NTMwRjhERTk0NzFCMURDNjYyNDQ3MkU4RTI4NDRCQzI1QjY0IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAxOTIgc2hhMjI0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI2RkFCMDM0OTM0RTRDMEZDOUFFNjdGNUI1NjU5QTlEN0QxRkVGRDE4N0VFMDlGRDQiOk1CRURUTFNfTURfU0hBMjI0OiJzYW1wbGUiOiJBMUYwMERBRDk3QUVFQzkxQzk1NTg1RjM2MjAwQzY1RjNDMDE4MTJBQTYwMzc4RjUiOiJFMDdFQzEzMDRDN0M2QzlERUJCRTk4MEI5NjkyNjY4RjgxRDRERTc5MjJBMEY5N0EiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDE5MiBtYmVkdGxzX3NoYTI1NgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiNkZBQjAzNDkzNEU0QzBGQzlBRTY3RjVCNTY1OUE5RDdEMUZFRkQxODdFRTA5RkQ0IjpNQkVEVExTX01EX1NIQTI1Njoic2FtcGxlIjoiNEIwQjhDRTk4QTkyODY2QTI4MjBFMjBBQTZCNzVCNTYzODJFMEY5QkZENUVDQjU1IjoiQ0NEQjAwNjkyNkVBOTU2NUNCQURDODQwODI5RDhDMzg0RTA2REUxRjFFMzgxQjg1IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAxOTIgc2hhMzg0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI2RkFCMDM0OTM0RTRDMEZDOUFFNjdGNUI1NjU5QTlEN0QxRkVGRDE4N0VFMDlGRDQiOk1CRURUTFNfTURfU0hBMzg0OiJzYW1wbGUiOiJEQTYzQkYwQjlBQkNGOTQ4RkJCMUU5MTY3RjEzNjE0NUY3QTIwNDI2RENDMjg3RDUiOiJDM0FBMkM5NjA5NzJCRDdBMjAwM0E1N0UxQzRDNzdGMDU3OEY4QUU5NUUzMUVDNUUiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDE5MiBtYmVkdGxzX3NoYTUxMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiNkZBQjAzNDkzNEU0QzBGQzlBRTY3RjVCNTY1OUE5RDdEMUZFRkQxODdFRTA5RkQ0IjpNQkVEVExTX01EX1NIQTUxMjoic2FtcGxlIjoiNEQ2MEM1QUIxOTk2QkQ4NDgzNDNCMzFDMDA4NTAyMDVFMkVBNjkyMkRBQzJFNEI4IjoiM0Y2RTgzNzQ0OEYwMjdBMUJGNEIzNEU3OTZFMzJBODExQ0JCNDA1MDkwOEQ4RjY3IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAxOTIgbWJlZHRsc19zaGExCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiNkZBQjAzNDkzNEU0QzBGQzlBRTY3RjVCNTY1OUE5RDdEMUZFRkQxODdFRTA5RkQ0IjpNQkVEVExTX01EX1NIQTE6InRlc3QiOiIwRjIxNDFBMEVCQkM0NEQyRTFBRjkwQTUwRUJDRkNFNUUxOTdCM0I3RDRERTAzNkQiOiJFQjE4QkM5RTFGM0Q3Mzg3NTAwQ0I5OUNGNUY3QzE1NzA3MEE4OTYxRTM4NzAwQjciCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDE5MiBzaGEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjZGQUIwMzQ5MzRFNEMwRkM5QUU2N0Y1QjU2NTlBOUQ3RDFGRUZEMTg3RUUwOUZENCI6TUJFRFRMU19NRF9TSEEyMjQ6InRlc3QiOiI2OTQ1QTFDMUQxQjIyMDZCODE0NTU0OEY2MzNCQjYxQ0VGMDQ4OTFCQUYyNkVEMzQiOiJCN0ZCN0ZERkMzMzlDMEI5QkQ2MUE5RjVBOEVBRjlCRTU4RkM1Q0JBMkNCMTUyOTMiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDE5MiBtYmVkdGxzX3NoYTI1NgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiNkZBQjAzNDkzNEU0QzBGQzlBRTY3RjVCNTY1OUE5RDdEMUZFRkQxODdFRTA5RkQ0IjpNQkVEVExTX01EX1NIQTI1NjoidGVzdCI6IjNBNzE4QkQ4QjQ5MjZDM0I1MkVFNkJCRTY3RUY3OUIxOENCNkVCNjJCMUFEOTdBRSI6IjU2NjJFNjg0OEE0QTE5QjFGMUFFMkY3MkFDRDRCOEJCRTUwRjFFQUM2NUQ5MTI0RiIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMTkyIHNoYTM4NAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiNkZBQjAzNDkzNEU0QzBGQzlBRTY3RjVCNTY1OUE5RDdEMUZFRkQxODdFRTA5RkQ0IjpNQkVEVExTX01EX1NIQTM4NDoidGVzdCI6IkIyMzRCNjBCNERCNzVBNzMzRTE5MjgwQTdBNjAzNEJENkIxRUU4OEFGNTMzMjM2NyI6Ijc5OTQwOTBCMkQ1OUJCNzgyQkU1N0U3NEE0NEM5QTFDNzAwNDEzRjhBQkVGRTc3QSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMTkyIG1iZWR0bHNfc2hhNTEyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI2RkFCMDM0OTM0RTRDMEZDOUFFNjdGNUI1NjU5QTlEN0QxRkVGRDE4N0VFMDlGRDQiOk1CRURUTFNfTURfU0hBNTEyOiJ0ZXN0IjoiRkU0RjRBRTg2QTU4QjY1MDc5NDY3MTU5MzRGRTJEOEZGOUQ5NUI2QjA5OEZFNzM5IjoiNzRDRjU2MDVDOThGQkEwRTFFRjM0RDRCNUExNTc3QTdEQ0Y1OTQ1N0NBRTUyMjkwIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyMjQgbWJlZHRsc19zaGExCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiRjIyMDI2NkUxMTA1QkZFMzA4M0UwM0VDN0EzQTY1NDY1MUY0NUUzNzE2N0U4ODYwMEJGMjU3QzEiOk1CRURUTFNfTURfU0hBMToic2FtcGxlIjoiMjIyMjZGOUQ0MEE5NkUxOUM0QTMwMUNFNUI3NEIxMTUzMDNDMEYzQTRGRDMwRkMyNTdGQjU3QUMiOiI2NkQxQ0REODNFM0FGNzU2MDVERDZFMkZFRkYxOTZEMzBBQTdFRDdBMkVERjdBRjQ3NTQwM0Q2OSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjI0IHNoYTIyNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiRjIyMDI2NkUxMTA1QkZFMzA4M0UwM0VDN0EzQTY1NDY1MUY0NUUzNzE2N0U4ODYwMEJGMjU3QzEiOk1CRURUTFNfTURfU0hBMjI0OiJzYW1wbGUiOiIxQ0RGRTY2NjJEREUxRTRBMUVDNENERURGNkExRjVBMkZCN0ZCRDkxNDVDMTIxMTNFNkFCRkQzRSI6IkE2Njk0RkQ3NzE4QTIxMDUzRjIyNUQzRjQ2MTk3Q0E2OTlENDUwMDZDMDZGODcxODA4RjQzRUJDIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyMjQgbWJlZHRsc19zaGEyNTYKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjE6IkYyMjAyNjZFMTEwNUJGRTMwODNFMDNFQzdBM0E2NTQ2NTFGNDVFMzcxNjdFODg2MDBCRjI1N0MxIjpNQkVEVExTX01EX1NIQTI1Njoic2FtcGxlIjoiNjFBQTNEQTAxMEU4RTg0MDZDNjU2QkM0NzdBN0E3MTg5ODk1RTdFODQwQ0RGRThGRjQyMzA3QkEiOiJCQzgxNDA1MERBQjVEMjM3NzA4Nzk0OTRGOUUwQTY4MERDMUFGNzE2MTk5MUJERTY5MkIxMDEwMSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjI0IHNoYTM4NAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiRjIyMDI2NkUxMTA1QkZFMzA4M0UwM0VDN0EzQTY1NDY1MUY0NUUzNzE2N0U4ODYwMEJGMjU3QzEiOk1CRURUTFNfTURfU0hBMzg0OiJzYW1wbGUiOiIwQjExNUU1RTM2RjBGOUVDODFGMTMyNUE1OTUyODc4RDc0NUUxOUQ3QkIzRUFCRkFCQTc3RTk1MyI6IjgzMEYzNENDREZFODI2Q0NGREM4MUVCNDEyOTc3MkUyMEUxMjIzNDhBMkJCRDg4OUExQjFBRjFEIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyMjQgbWJlZHRsc19zaGE1MTIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjE6IkYyMjAyNjZFMTEwNUJGRTMwODNFMDNFQzdBM0E2NTQ2NTFGNDVFMzcxNjdFODg2MDBCRjI1N0MxIjpNQkVEVExTX01EX1NIQTUxMjoic2FtcGxlIjoiMDc0QkQxRDk3OUQ1RjMyQkY5NThEREM2MUU0RkI0ODcyQURDQUZFQjIyNTY0OTdDREFDMzAzOTciOiJBNENFQ0ExOTZDM0Q1QTFGRjMxMDI3QjMzMTg1REM4RUU0M0YyODhCMjFBQjM0MkU1RDhFQjA4NCIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjI0IG1iZWR0bHNfc2hhMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjE6IkYyMjAyNjZFMTEwNUJGRTMwODNFMDNFQzdBM0E2NTQ2NTFGNDVFMzcxNjdFODg2MDBCRjI1N0MxIjpNQkVEVExTX01EX1NIQTE6InRlc3QiOiJERUFBNjQ2RUMyQUYyRUE4QUQ1M0VENjZCMkUyRERBQTQ5QTEyRUZEODM1NjU2MTQ1MUYzRTIxQyI6Ijk1OTg3Nzk2RjZDRjIwNjJBQjgxMzUyNzFERTU2QUU1NTM2NkMwNDVGNkQ5NTkzRjUzNzg3QkQyIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyMjQgc2hhMjI0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxOiJGMjIwMjY2RTExMDVCRkUzMDgzRTAzRUM3QTNBNjU0NjUxRjQ1RTM3MTY3RTg4NjAwQkYyNTdDMSI6TUJFRFRMU19NRF9TSEEyMjQ6InRlc3QiOiJDNDQxQ0U4RTI2MURFRDYzNEU0Q0Y4NDkxMEU0QzVEMUQyMkM1Q0YzQjczMkJCMjA0REJFRjAxOSI6IjkwMkY0Mjg0N0E2M0JEQzVGNjA0NkFEQTExNDk1MzEyMEY5OTQ0MkQ3NjUxMDE1MEYzNzJBM0Y0IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyMjQgbWJlZHRsc19zaGEyNTYKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjE6IkYyMjAyNjZFMTEwNUJGRTMwODNFMDNFQzdBM0E2NTQ2NTFGNDVFMzcxNjdFODg2MDBCRjI1N0MxIjpNQkVEVExTX01EX1NIQTI1NjoidGVzdCI6IkFEMDREREU4N0I4NDc0N0EyNDNBNjMxRUE0N0ExQkE2RDFGQUEwNTkxNDlBRDI0NDBERTZGQkE2IjoiMTc4RDQ5QjFBRTkwRTNEOEI2MjlCRTNEQjU2ODM5MTVGNEU4Qzk5RkRGNkU2NjZDRjM3QURDRkQiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDIyNCBzaGEzODQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjE6IkYyMjAyNjZFMTEwNUJGRTMwODNFMDNFQzdBM0E2NTQ2NTFGNDVFMzcxNjdFODg2MDBCRjI1N0MxIjpNQkVEVExTX01EX1NIQTM4NDoidGVzdCI6IjM4OUI5MjY4MkUzOTlCMjY1MThBOTU1MDZCNTJDMDNCQzkzNzlBOURBREYzMzkxQTIxRkIwRUE0IjoiNDE0QTcxOEVEMzI0OUZGNkRCQzVCNTBDMjdGNzFGMDFGMDcwOTQ0REEyMkFCMUY3OEY1NTlBQUIiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDIyNCBtYmVkdGxzX3NoYTUxMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiRjIyMDI2NkUxMTA1QkZFMzA4M0UwM0VDN0EzQTY1NDY1MUY0NUUzNzE2N0U4ODYwMEJGMjU3QzEiOk1CRURUTFNfTURfU0hBNTEyOiJ0ZXN0IjoiMDQ5RjA1MDQ3N0M1QUREODU4Q0FDNTYyMDgzOTRCNUE1NUJBRUJCRTg4N0ZERjc2NTA0N0MxN0MiOiIwNzdFQjEzRTcwMDU5MjlDRUZBM0NEMDQwM0M3Q0RDQzA3N0FERjRFNDRGM0M0MUIyRjYwRUNGRiIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjU2IG1iZWR0bHNfc2hhMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IkM5QUZBOUQ4NDVCQTc1MTY2QjVDMjE1NzY3QjFENjkzNEU1MEMzREIzNkU4OUIxMjdCOEE2MjJCMTIwRjY3MjEiOk1CRURUTFNfTURfU0hBMToic2FtcGxlIjoiNjEzNDBDODhDM0FBRUJFQjRGNkQ2NjdGNjcyQ0E5NzU5QTZDQ0FBOUZBODgxMTMxMzAzOUVFNEEzNTQ3MUQzMiI6IjZEN0YxNDdEQUMwODk0NDFCQjJFMkZFOEY3QTNGQTI2NEI5QzQ3NTA5OEZEQ0Y2RTAwRDdDOTk2RTFCOEI3RUIiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDI1NiBzaGEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IkM5QUZBOUQ4NDVCQTc1MTY2QjVDMjE1NzY3QjFENjkzNEU1MEMzREIzNkU4OUIxMjdCOEE2MjJCMTIwRjY3MjEiOk1CRURUTFNfTURfU0hBMjI0OiJzYW1wbGUiOiI1M0IyRkZGNUQxNzUyQjJDNjg5REYyNTdDMDRDNDBBNTg3RkFCQUJCM0Y2RkMyNzAyRjEzNDNBRjdDQTlBQTNGIjoiQjlBRkI2NEZEQzAzREMxQTEzMUM3RDIzODZEMTFFMzQ5RjA3MEFBNDMyQTRBQ0M5MThCRUE5ODhCRjc1Qzc0QyIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjU2IG1iZWR0bHNfc2hhMjU2CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiJDOUFGQTlEODQ1QkE3NTE2NkI1QzIxNTc2N0IxRDY5MzRFNTBDM0RCMzZFODlCMTI3QjhBNjIyQjEyMEY2NzIxIjpNQkVEVExTX01EX1NIQTI1Njoic2FtcGxlIjoiRUZENDhCMkFBQ0I2QThGRDExNDBERDlDRDQ1RTgxRDY5RDJDODc3QjU2QUFGOTkxQzM0RDBFQTg0RUFGMzcxNiI6IkY3Q0IxQzk0MkQ2NTdDNDFENDM2QzdBMUI2RTI5RjY1RjNFOTAwREJCOUFGRjQwNjREQzRBQjJGODQzQUNEQTgiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDI1NiBzaGEzODQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IkM5QUZBOUQ4NDVCQTc1MTY2QjVDMjE1NzY3QjFENjkzNEU1MEMzREIzNkU4OUIxMjdCOEE2MjJCMTIwRjY3MjEiOk1CRURUTFNfTURfU0hBMzg0OiJzYW1wbGUiOiIwRUFGRUEwMzlCMjBFOUI0MjMwOUZCMUQ4OUUyMTMwNTdDQkY5NzNEQzBDRkM4RjEyOUVERERDODAwRUY3NzE5IjoiNDg2MUYwNDkxRTY5OThCOTQ1NTE5M0UzNEU3QjBEMjg0RERENzE0OUE3NEI5NUI5MjYxRjEzQUJERTk0MDk1NCIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjU2IG1iZWR0bHNfc2hhNTEyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiJDOUFGQTlEODQ1QkE3NTE2NkI1QzIxNTc2N0IxRDY5MzRFNTBDM0RCMzZFODlCMTI3QjhBNjIyQjEyMEY2NzIxIjpNQkVEVExTX01EX1NIQTUxMjoic2FtcGxlIjoiODQ5NkE2MEI1RTlCNDdDODI1NDg4ODI3RTA0OTVCMEUzRkExMDlFQzQ1NjhGRDNGOEQxMDk3Njc4RUI5N0YwMCI6IjIzNjJBQjFBREJFMkI4QURGOUNCOUVEQUI3NDBFQTYwNDlDMDI4MTE0RjI0NjBGOTY1NTRGNjFGQUUzMzAyRkUiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDI1NiBtYmVkdGxzX3NoYTEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiJDOUFGQTlEODQ1QkE3NTE2NkI1QzIxNTc2N0IxRDY5MzRFNTBDM0RCMzZFODlCMTI3QjhBNjIyQjEyMEY2NzIxIjpNQkVEVExTX01EX1NIQTE6InRlc3QiOiIwQ0JDQzg2RkQ2QUJEMUQ5OUU3MDNFMUVDNTAwNjlFRTVDMEI0QkE0QjlBQzYwRTQwOUU4RUM1OTEwRDgxQTg5IjoiMDFCOUQ3QjczREZBQTYwRDU2NTFFQzQ1OTFBMDEzNkY4NzY1M0UwRkQ3ODBDM0IxQkM4NzJGRkRFQUU0NzlCMSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjU2IHNoYTIyNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiQzlBRkE5RDg0NUJBNzUxNjZCNUMyMTU3NjdCMUQ2OTM0RTUwQzNEQjM2RTg5QjEyN0I4QTYyMkIxMjBGNjcyMSI6TUJFRFRMU19NRF9TSEEyMjQ6InRlc3QiOiJDMzdFREI2RjBBRTc5RDQ3QzNDMjdFOTYyRkEyNjlCQjRGNDQxNzcwMzU3RTExNEVFNTExRjY2MkVDMzRBNjkyIjoiQzgyMDA1M0EwNTc5MUU1MjFGQ0FBRDYwNDJENDBBRUExRDZCMUE1NDAxMzg1NThGNDdEMDcxOTgwMEUxOEYyRCIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjU2IG1iZWR0bHNfc2hhMjU2CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiJDOUFGQTlEODQ1QkE3NTE2NkI1QzIxNTc2N0IxRDY5MzRFNTBDM0RCMzZFODlCMTI3QjhBNjIyQjEyMEY2NzIxIjpNQkVEVExTX01EX1NIQTI1NjoidGVzdCI6IkYxQUJCMDIzNTE4MzUxQ0Q3MUQ4ODE1NjdCMUVBNjYzRUQzRUZDRjZDNTEzMkIzNTRGMjhEM0IwQjdEMzgzNjciOiIwMTlGNDExMzc0MkEyQjE0QkQyNTkyNkI0OUM2NDkxNTVGMjY3RTYwRDM4MTRCNEMwQ0M4NDI1MEU0NkYwMDgzIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyNTYgc2hhMzg0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiJDOUFGQTlEODQ1QkE3NTE2NkI1QzIxNTc2N0IxRDY5MzRFNTBDM0RCMzZFODlCMTI3QjhBNjIyQjEyMEY2NzIxIjpNQkVEVExTX01EX1NIQTM4NDoidGVzdCI6IjgzOTEwRThCNDhCQjBDNzQyNDRFQkRGN0YwN0ExQzU0MTNENjE0NzJCRDk0MUVGMzkyMEU2MjNGQkNDRUJFQjYiOiI4RERCRUM1NENGOENENTg3NDg4Mzg0MUQ3MTIxNDJBNTZBOEQwRjIxOEY1MDAzQ0IwMjk2QjZCNTA5NjE5RjJDIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyNTYgbWJlZHRsc19zaGE1MTIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IkM5QUZBOUQ4NDVCQTc1MTY2QjVDMjE1NzY3QjFENjkzNEU1MEMzREIzNkU4OUIxMjdCOEE2MjJCMTIwRjY3MjEiOk1CRURUTFNfTURfU0hBNTEyOiJ0ZXN0IjoiNDYxRDkzRjMxQjY1NDA4OTQ3ODhGRDIwNkMwN0NGQTBDQzM1RjQ2RkEzQzkxODE2RkZGMTA0MEFEMTU4MUEwNCI6IjM5QUY5RjE1REUwREI4RDk3RTcyNzE5Qzc0ODIwRDMwNENFNTIyNkUzMkRFREFFNjc1MTlFODQwRDExOTRFNTUiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDM4NCBtYmVkdGxzX3NoYTEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiI2QjlEM0RBRDJFMUI4QzFDMDVCMTk4NzVCNjY1OUY0REUyM0MzQjY2N0JGMjk3QkE5QUE0Nzc0MDc4NzEzN0Q4OTZENTcyNEU0QzcwQTgyNUY4NzJDOUVBNjBEMkVERjUiOk1CRURUTFNfTURfU0hBMToic2FtcGxlIjoiRUM3NDhEODM5MjQzRDZGQkVGNEZDNUM0ODU5QTdERkZEN0YzQUJEREY3MjAxNDU0MEMxNkQ3MzMwOTgzNEZBMzdCOUJBMDAyODk5RjZGREEzQTRBOTM4Njc5MEQ0RUIyIjoiQTNCQ0ZBOTQ3QkVFRjQ3MzJCRjI0N0FDMTdGNzE2NzZDQjMxQTg0N0I5RkYwQ0JDOUM5RUQ0QzFBNUIzRkFDRjI2RjQ5Q0EwMzFENDg1NzU3MENDQjVDQTQ0MjRBNDQzIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAzODQgc2hhMjI0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiI2QjlEM0RBRDJFMUI4QzFDMDVCMTk4NzVCNjY1OUY0REUyM0MzQjY2N0JGMjk3QkE5QUE0Nzc0MDc4NzEzN0Q4OTZENTcyNEU0QzcwQTgyNUY4NzJDOUVBNjBEMkVERjUiOk1CRURUTFNfTURfU0hBMjI0OiJzYW1wbGUiOiI0MjM1NkU3NkI1NUE2RDlCNDYzMUM4NjU0NDVEQkU1NEUwNTZEM0IzNDMxNzY2RDA1MDkyNDQ3OTNDM0Y5MzY2NDUwRjc2RUUzREU0M0Y1QTEyNTMzM0E2QkUwNjAxMjIiOiI5REEwQzgxNzg3MDY0MDIxRTc4REY2NThGMkZCQjBCMDQyQkYzMDQ2NjVEQjcyMUYwNzdBNDI5OEIwOTVFNDgzNEMwODJDMDNEODMwMjhFRkJGOTNBM0MyMzk0MENBOEQiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDM4NCBtYmVkdGxzX3NoYTI1NgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMToiNkI5RDNEQUQyRTFCOEMxQzA1QjE5ODc1QjY2NTlGNERFMjNDM0I2NjdCRjI5N0JBOUFBNDc3NDA3ODcxMzdEODk2RDU3MjRFNEM3MEE4MjVGODcyQzlFQTYwRDJFREY1IjpNQkVEVExTX01EX1NIQTI1Njoic2FtcGxlIjoiMjFCMTNEMUUwMTNDN0ZBMTM5MkQwM0M1Rjk5QUY4QjMwQzU3MEM2Rjk4RDRFQThFMzU0QjYzQTIxRDNEQUEzM0JERTFFODg4RTYzMzU1RDkyRkEyQjNDMzZEOEZCMkNEIjoiRjNBQTQ0M0ZCMTA3NzQ1QkY0QkQ3N0NCMzg5MTY3NDYzMjA2OEExMENBNjdFM0Q0NURCMjI2NkZBN0QxRkVFQkVGREM2M0VDQ0QxQUM0MkVDMENCODY2OEE0RkEwQUIwIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAzODQgc2hhMzg0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiI2QjlEM0RBRDJFMUI4QzFDMDVCMTk4NzVCNjY1OUY0REUyM0MzQjY2N0JGMjk3QkE5QUE0Nzc0MDc4NzEzN0Q4OTZENTcyNEU0QzcwQTgyNUY4NzJDOUVBNjBEMkVERjUiOk1CRURUTFNfTURfU0hBMzg0OiJzYW1wbGUiOiI5NEVEQkI5MkE1RUNCOEFBRDQ3MzZFNTZDNjkxOTE2QjNGODgxNDA2NjZDRTlGQTczRDY0QzRFQTk1QUQxMzNDODFBNjQ4MTUyRTQ0QUNGOTZFMzZERDFFODBGQUJFNDYiOiI5OUVGNEFFQjE1RjE3OENFQTFGRTQwREIyNjAzMTM4RjEzMEU3NDBBMTk2MjQ1MjYyMDNCNjM1MUQwQTNBOTRGQTMyOUMxNDU3ODZFNjc5RTdCODJDNzFBMzg2MjhBQzgiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDM4NCBtYmVkdGxzX3NoYTUxMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMToiNkI5RDNEQUQyRTFCOEMxQzA1QjE5ODc1QjY2NTlGNERFMjNDM0I2NjdCRjI5N0JBOUFBNDc3NDA3ODcxMzdEODk2RDU3MjRFNEM3MEE4MjVGODcyQzlFQTYwRDJFREY1IjpNQkVEVExTX01EX1NIQTUxMjoic2FtcGxlIjoiRUQwOTU5RDU4ODBBQjJEODY5QUU3RjZDMjkxNUM2RDYwRjk2NTA3RjlDQjNFMDQ3QzAwNDY4NjFEQTRBNzk5Q0ZFMzBGMzVDQzkwMDA1NkQ3Qzk5Q0Q3ODgyNDMzNzA5IjoiNTEyQzhDQ0VFRTM4OTBBODQwNThDRTFFMjJEQkMyMTk4RjQyMzIzQ0U4QUNBOTEzNTMyOUYwM0MwNjhFNTExMkRDN0NDM0VGMzQ0NkRFRkNFQjAxQTQ1QzI2NjdGREQ1IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAzODQgbWJlZHRsc19zaGExCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMToiNkI5RDNEQUQyRTFCOEMxQzA1QjE5ODc1QjY2NTlGNERFMjNDM0I2NjdCRjI5N0JBOUFBNDc3NDA3ODcxMzdEODk2RDU3MjRFNEM3MEE4MjVGODcyQzlFQTYwRDJFREY1IjpNQkVEVExTX01EX1NIQTE6InRlc3QiOiI0QkMzNUQzQTUwRUY0RTMwNTc2RjU4Q0Q5NkNFNkJGNjM4MDI1RUU2MjQwMDRBMUY3Nzg5QThCOEU0M0QwNjc4QUNEOUQyOTg3NkRBRjQ2NjM4NjQ1RjdGNDA0QjExQzciOiJENUE2MzI2QzQ5NEVEM0ZGNjE0NzAzODc4OTYxQzBGREU3QjJDMjc4RjlBNjVGRDhDNEI3MTg2MjAxQTI5OTE2OTVCQTFDODQ1NDEzMjdFOTY2RkE3QjUwRjczODIyODIiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDM4NCBzaGEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjE6IjZCOUQzREFEMkUxQjhDMUMwNUIxOTg3NUI2NjU5RjRERTIzQzNCNjY3QkYyOTdCQTlBQTQ3NzQwNzg3MTM3RDg5NkQ1NzI0RTRDNzBBODI1Rjg3MkM5RUE2MEQyRURGNSI6TUJFRFRMU19NRF9TSEEyMjQ6InRlc3QiOiJFOEM5RDBCNkVBNzJBMEU3ODM3RkVBMUQxNEExQTk1NTdGMjlGQUE0NUQzRTdFRTg4OEZDNUJGOTU0QjVFNjI0NjRBOUE4MTdDNDdGRjc4QjhDMTEwNjZCMjQwODBFNzIiOiIwNzA0MUQ0QTdBMDM3OUFDNzIzMkZGNzJFNkY3N0I2RERCOEYwOUIxNkNDRTBFQzMyODZCMkJENDNGQThDNjE0MUM1M0VBNUFCRUYwRDgyMzEwNzdBMDQ1NDBBOTZCNjYiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDM4NCBtYmVkdGxzX3NoYTI1NgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMToiNkI5RDNEQUQyRTFCOEMxQzA1QjE5ODc1QjY2NTlGNERFMjNDM0I2NjdCRjI5N0JBOUFBNDc3NDA3ODcxMzdEODk2RDU3MjRFNEM3MEE4MjVGODcyQzlFQTYwRDJFREY1IjpNQkVEVExTX01EX1NIQTI1NjoidGVzdCI6IjZENkRFRkFDOUFCNjREQUJBRkUzNkM2QkY1MTAzNTJBNENDMjcwMDEyNjM2MzhFNUIxNkQ5QkI1MUQ0NTE1NTlGOTE4RUVEQUYyMjkzQkU1QjQ3NUNDOEYwMTg4NjM2QiI6IjJENDZGM0JFQ0JDQzUyM0Q1RjFBMTI1NkJGMEM5QjAyNEQ4NzlCQTlFODM4MTQ0QzhCQTZCQUVCNEI1M0I0N0Q1MUFCMzczRjk4NDVDMDUxNEVFRkIxNDAyNDc4NzI2NSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMzg0IHNoYTM4NAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMToiNkI5RDNEQUQyRTFCOEMxQzA1QjE5ODc1QjY2NTlGNERFMjNDM0I2NjdCRjI5N0JBOUFBNDc3NDA3ODcxMzdEODk2RDU3MjRFNEM3MEE4MjVGODcyQzlFQTYwRDJFREY1IjpNQkVEVExTX01EX1NIQTM4NDoidGVzdCI6IjgyMDNCNjNEM0M4NTNFOEQ3NzIyN0ZCMzc3QkNGN0I3Qjc3MkU5Nzg5MkE4MEYzNkFCNzc1RDUwOUQ3QTVGRUIwNTQyQTdGMDgxMjk5OERBOEYxREQzQ0EzQ0YwMjNEQiI6IkRERDA3NjA0NDhENDJEOEE0M0FGNDVBRjgzNkZDRTRERThCRTA2QjQ4NUU5QjYxQjgyN0MyRjEzMTczOTIzRTA2QTczOUYwNDA2NDlBNjY3QkYzQjgyODI0NkJBQTVBNSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMzg0IG1iZWR0bHNfc2hhNTEyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiI2QjlEM0RBRDJFMUI4QzFDMDVCMTk4NzVCNjY1OUY0REUyM0MzQjY2N0JGMjk3QkE5QUE0Nzc0MDc4NzEzN0Q4OTZENTcyNEU0QzcwQTgyNUY4NzJDOUVBNjBEMkVERjUiOk1CRURUTFNfTURfU0hBNTEyOiJ0ZXN0IjoiQTBENUQwOTBDOTk4MEZBRjNDMkNFNTdCN0FFOTUxRDMxOTc3REQxMUM3NzVEMzE0QUY1NUY3NkM2NzY0NDdEMDZGQjY0OTVDRDIxQjRCNkUzNDBGQzIzNjU4NEZCMjc3IjoiOTc2OTg0RTU5QjRDNzdCMEU4RTQ0NjBEQ0EzRDlGMjBFMDdCOUJCMUY2M0JFRUZBRjU3NkY2QjJFOEIyMjQ2MzRBMjA5MkNEMzc5MkUwMTU5QUQ5Q0VFMzc2NTlDNzM2IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHA1MjEgbWJlZHRsc19zaGExCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMEZBRDA2REFBNjJCQTNCMjVEMkZCNDAxMzNEQTc1NzIwNURFNjdGNUJCMDAxOEZFRThDODZFMUI2OEM3RTc1Q0FBODk2RUIzMkYxRjQ3QzcwODU1ODM2QTZEMTZGQ0MxNDY2RjZEOEZCRUM2N0RCODlFQzBDMDhCMEU5OTZCODM1MzgiOk1CRURUTFNfTURfU0hBMToic2FtcGxlIjoiMDM0M0I2RUM0NTcyODk3NUVBNUNCQTY2NTlCQkI2MDYyQTVGRjg5RUVBNThCRTNDODBCNjE5RjMyMkM4NzkxMEZFMDkyRjdENDVCQjBGOEVFRTAxRUQzRjIwQkFCRUMwNzlEMjAyQUU2NzdCMjQzQUI0MEI1NDMxRDQ5N0M1NUQ3NUQiOiIwRTdCMEU2NzVBOUIyNDQxM0Q0NDhCOENDMTE5RDJCRjdCMkQyREYwMzI3NDFDMDk2NjM0RDZENjVEMERCRTNENTY5NDYyNUZCOUU4MTA0RDNCODQyQzFCMEUyRDBCOThCRUExOTM0MUU4Njc2QUVGNjZBRTRFQkEzRDU0NzVENUQxNiIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwNTIxIHNoYTIyNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMEZBRDA2REFBNjJCQTNCMjVEMkZCNDAxMzNEQTc1NzIwNURFNjdGNUJCMDAxOEZFRThDODZFMUI2OEM3RTc1Q0FBODk2RUIzMkYxRjQ3QzcwODU1ODM2QTZEMTZGQ0MxNDY2RjZEOEZCRUM2N0RCODlFQzBDMDhCMEU5OTZCODM1MzgiOk1CRURUTFNfTURfU0hBMjI0OiJzYW1wbGUiOiIxNzc2MzMxQ0ZDREY5MjdENjY2RTAzMkUwMENGNzc2MTg3QkM5RkREOEU2OUQwREFCQjQxMDlGRkUxQjVFMkEzMDcxNUY0Q0M5MjNBNEE1RTk0RDI1MDNFOUFDRkVEOTI4NTdCN0YzMUQ3MTUyRTBGOEMwMEMxNUZGM0Q4N0UyRUQyRSI6IjA1MENCNTI2NTQxN0ZFMjMyMEJCQjVBMTIyQjhFMUEzMkJENjk5MDg5ODUxMTI4RTM2MEU2MjBBMzBDN0UxN0JBNDFBNjY2QUYxMjZDRTEwMEU1Nzk5QjE1M0I2MDUyOEQ1MzAwRDA4NDg5Q0E5MTc4RkI2MTBBMjAwNkMyNTRCNDFGIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHA1MjEgbWJlZHRsc19zaGEyNTYKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6IjBGQUQwNkRBQTYyQkEzQjI1RDJGQjQwMTMzREE3NTcyMDVERTY3RjVCQjAwMThGRUU4Qzg2RTFCNjhDN0U3NUNBQTg5NkVCMzJGMUY0N0M3MDg1NTgzNkE2RDE2RkNDMTQ2NkY2RDhGQkVDNjdEQjg5RUMwQzA4QjBFOTk2QjgzNTM4IjpNQkVEVExTX01EX1NIQTI1Njoic2FtcGxlIjoiMTUxMUJCNEQ2NzUxMTRGRTI2NkZDNDM3MkI4NzY4MkJBRUNDMDFEM0NDNjJDRjIzMDNDOTJCMzUyNjAxMjY1OUQxNjg3NkUyNUM3QzFFNTc2NDhGMjNCNzM1NjRENjdGNjFDNkYxNEQ1MjdENTQ5NzI4MTA0MjFFN0Q4NzU4OUUxQTciOiIwNEExNzExNDNBODMxNjNENkRGNDYwQUFGNjE1MjI2OTVGMjA3QTU4Qjk1QzA2NDREODdFNTJBQTFBMzQ3OTE2RTRGN0E3MjkzMEIxQkMwNkRCRTIyQ0UzRjU4MjY0QUZEMjM3MDRDQkI2M0IyOUI5MzFGN0RFNkM5RDk0OUE3RUNGQyIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwNTIxIHNoYTM4NAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMEZBRDA2REFBNjJCQTNCMjVEMkZCNDAxMzNEQTc1NzIwNURFNjdGNUJCMDAxOEZFRThDODZFMUI2OEM3RTc1Q0FBODk2RUIzMkYxRjQ3QzcwODU1ODM2QTZEMTZGQ0MxNDY2RjZEOEZCRUM2N0RCODlFQzBDMDhCMEU5OTZCODM1MzgiOk1CRURUTFNfTURfU0hBMzg0OiJzYW1wbGUiOiIxRUE4NDJBMEUxN0QyREU0RjkyQzE1MzE1QzYzRERGNzI2ODVDMTgxOTVDMkJCOTVFNTcyQjlDNTEzNkNBNEI0QjU3NkFENzEyQTUyQkU5NzMwNjI3RDE2MDU0QkE0MENDMEI4RDNGRjAzNUIxMkFFNzUxNjgzOTdGNUQ1MEM2NzQ1MSI6IjFGMjFBM0NFRTA2NkUxOTYxMDI1RkIwNDhCRDVGRTJCNzkyNEQwQ0Q3OTdCQUJFMEE4M0I2NkYxRTM1RUVBRjVGREUxNDNGQTg1REMzOTRBN0RFRTc2NjUyMzM5Mzc4NDQ4NEJERjNFMDAxMTRBMUM4NTdDREUxQUEyMDNEQjY1RDYxIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHA1MjEgbWJlZHRsc19zaGE1MTIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6IjBGQUQwNkRBQTYyQkEzQjI1RDJGQjQwMTMzREE3NTcyMDVERTY3RjVCQjAwMThGRUU4Qzg2RTFCNjhDN0U3NUNBQTg5NkVCMzJGMUY0N0M3MDg1NTgzNkE2RDE2RkNDMTQ2NkY2RDhGQkVDNjdEQjg5RUMwQzA4QjBFOTk2QjgzNTM4IjpNQkVEVExTX01EX1NIQTUxMjoic2FtcGxlIjoiMEMzMjhGQUZDQkQ3OURENzc4NTAzNzBDNDYzMjVEOTg3Q0I1MjU1NjlGQjYzQzVEM0JDNTM5NTBFNkQ0QzVGMTc0RTI1QTFFRTkwMTdCNUQ0NTA2MDZBREQxNTJCNTM0OTMxRDdENEU4NDU1Q0M5MUY5QjE1QkYwNUVDMzZFMzc3RkEiOiIwNjE3Q0NFN0NGNTA2NDgwNkM0NjdGNjc4RDNCNDA4MEQ2RjFDQzUwQUYyNkNBMjA5NDE3MzA4MjgxQjY4QUYyODI2MjNFQUE2M0U1QjVDMDcyM0Q4QjhDMzdGRjA3NzdCMUEyMEY4Q0NCMURDQ0M0Mzk5N0YxRUUwRTQ0REE0QTY3QSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwNTIxIG1iZWR0bHNfc2hhMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6IjBGQUQwNkRBQTYyQkEzQjI1RDJGQjQwMTMzREE3NTcyMDVERTY3RjVCQjAwMThGRUU4Qzg2RTFCNjhDN0U3NUNBQTg5NkVCMzJGMUY0N0M3MDg1NTgzNkE2RDE2RkNDMTQ2NkY2RDhGQkVDNjdEQjg5RUMwQzA4QjBFOTk2QjgzNTM4IjpNQkVEVExTX01EX1NIQTE6InRlc3QiOiIxM0JBRDlGMjlBQkUyMERFMzdFQkVCODIzQzI1MkNBMEY2MzM2MTI4NDAxNUEzQkY0MzBBNDZBQUE4MEI4N0IwNjkzRjA2OTRCRDg4QUZFNEU2NjFGQzMzQjA5NENEM0I3OTYzQkVENUE3MjdFRDhCRDZBM0EyMDJBQkUwMDlEMDM2NyI6IjFFOUJCODFGRjc5NDRDQTQwOUFEMTM4REJCRUUyMjhFMUFGQ0MwQzg5MEZDNzhFQzg2MDQ2MzlDQjBEQkRDOTBGNzE3QTk5RUFEOUQyNzI4NTVEMDAxNjJFRTk1Mjc1NjdERDZBOTJDQkQ2Mjk4MDVDMDQ0NTI4MkJCQzkxNjc5N0ZGIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHA1MjEgc2hhMjI0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOiIwRkFEMDZEQUE2MkJBM0IyNUQyRkI0MDEzM0RBNzU3MjA1REU2N0Y1QkIwMDE4RkVFOEM4NkUxQjY4QzdFNzVDQUE4OTZFQjMyRjFGNDdDNzA4NTU4MzZBNkQxNkZDQzE0NjZGNkQ4RkJFQzY3REI4OUVDMEMwOEIwRTk5NkI4MzUzOCI6TUJFRFRMU19NRF9TSEEyMjQ6InRlc3QiOiIxQzdFRDkwMkUxMjNFNjgxNTU0NjA2NUEyQzRBRjk3N0IyMkFBOEVBRERCNjhCMkMxMTEwRTdFQTQ0RDQyMDg2QkZFNEEzNEI2N0REQzBFMTdFOTY1MzZFMzU4MjE5QjIzQTcwNkM2QTZFMTZCQTc3QjY1RTFDNTk1RDQzQ0FFMTdGQiI6IjE3NzMzNjY3NjMwNEZDQjM0M0NFMDI4QjM4RTdCNEZCQTc2QzFDMUIyNzdEQTE4Q0FEMkE4NDc4QjJBOUE5RjVCRUMwRjNCQTA0RjM1REIzRTQyNjM1NjlFQzZBQURFOEM5Mjc0NkU0QzgyRjgyOTlBRTFCOEYxNzM5RjhGRDUxOUE0IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHA1MjEgbWJlZHRsc19zaGEyNTYKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6IjBGQUQwNkRBQTYyQkEzQjI1RDJGQjQwMTMzREE3NTcyMDVERTY3RjVCQjAwMThGRUU4Qzg2RTFCNjhDN0U3NUNBQTg5NkVCMzJGMUY0N0M3MDg1NTgzNkE2RDE2RkNDMTQ2NkY2RDhGQkVDNjdEQjg5RUMwQzA4QjBFOTk2QjgzNTM4IjpNQkVEVExTX01EX1NIQTI1NjoidGVzdCI6IjAwRTg3MUM0QTE0Rjk5M0M2QzczNjk1MDE5MDBDNEJDMUU5QzdCMEI0QkE0NEUwNDg2OEIzMEI0MUQ4MDcxMDQyRUIyOEM0QzI1MDQxMUQwQ0UwOENEMTk3RTQxODhFQTQ4NzZGMjc5RjkwQjNEOEQ3NEEzQzc2RTZGMUU0NjU2QUE4IjoiMENENTJEQkFBMzNCMDYzQzNBNkNEODA1OEExRkIwQTQ2QTQ3NTRCMDM0RkNDNjQ0NzY2Q0ExNERBOENBNUNBOUZERTAwRTg4QzFBRDYwQ0NCQTc1OTAyNTI5OTA3OUQ3QTQyN0VDM0NDNUI2MTlCRkJDODI4RTc3NjlCQ0Q2OTRFODYiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDUyMSBzaGEzODQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6IjBGQUQwNkRBQTYyQkEzQjI1RDJGQjQwMTMzREE3NTcyMDVERTY3RjVCQjAwMThGRUU4Qzg2RTFCNjhDN0U3NUNBQTg5NkVCMzJGMUY0N0M3MDg1NTgzNkE2RDE2RkNDMTQ2NkY2RDhGQkVDNjdEQjg5RUMwQzA4QjBFOTk2QjgzNTM4IjpNQkVEVExTX01EX1NIQTM4NDoidGVzdCI6IjE0QkVFMjFBMThCNkQ4QjNDOTNGQUIwOEQ0M0U3Mzk3MDc5NTMyNDRGREJFOTI0RkE5MjZENzY2NjlFN0FDOEM4OURGNjJFRDg5NzVDMkQ4Mzk3QTY1QTQ5RENDMDlGNkIwQUM2MjI3Mjc0MTkyNEQ0NzkzNTRENzRGRjYwNzU1NzhDIjoiMTMzMzMwODY1QzA2N0EwRUFGNzIzNjJBNjVFMkQ3QkM0RTQ2MUU4Qzg5OTVDM0I2MjI2QTIxQkQxQUE3OEYwRUQ5NEZFNTM2QTBEQ0EzNTUzNEYwQ0QxNTEwQzQxNTI1RDE2M0ZFOUQ3NEQxMzQ4ODFFMzUxNDFFRDVFOEU5NUI5NzkiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDUyMSBtYmVkdGxzX3NoYTUxMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMEZBRDA2REFBNjJCQTNCMjVEMkZCNDAxMzNEQTc1NzIwNURFNjdGNUJCMDAxOEZFRThDODZFMUI2OEM3RTc1Q0FBODk2RUIzMkYxRjQ3QzcwODU1ODM2QTZEMTZGQ0MxNDY2RjZEOEZCRUM2N0RCODlFQzBDMDhCMEU5OTZCODM1MzgiOk1CRURUTFNfTURfU0hBNTEyOiJ0ZXN0IjoiMTNFOTkwMjBBQkY1Q0VFNzUyNUQxNkI2OUIyMjk2NTJBQjZCREYyQUZGQ0FFRjM4NzczQjRCN0QwODcyNUYxMENEQjkzNDgyRkRDQzU0RURDRUU5MUVDQTQxNjZCMkE3QzYyNjVFRjBDRTJCRDcwNTFCN0NFRjk0NUJBQkQ0N0VFNkQiOiIxRkJEMDAxM0M2NzRBQTc5Q0IzOTg0OTUyNzkxNkNFMzAxQzY2RUE3Q0U4QjgwNjgyNzg2QUQ2MEY5OEY3RTc4QTE5Q0E2OUVGRjVDNTc0MDBFM0IzQTBBRDY2Q0UwOTc4MjE0RDEzQkFGNEU5QUM2MDc1MkY3QjE1NUUyREU0RENFMyIKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VjZHNhLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VjZHNhLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTA3YTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNkc2EuZnVuY3Rpb24KQEAgLTAsMCArMSwxOTQgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvZWNkc2EuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZWNkc2FfcHJpbV9yYW5kb20oIGludCBpZCApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFE7CisgICAgbWJlZHRsc19tcGkgZCwgciwgczsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisgICAgdW5zaWduZWQgY2hhciBidWZbNjZdOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZRICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJmQgKTsgbWJlZHRsc19tcGlfaW5pdCggJnIgKTsgbWJlZHRsc19tcGlfaW5pdCggJnMgKTsKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMHgwMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICAvKiBwcmVwYXJlIG1hdGVyaWFsIGZvciBzaWduYXR1cmUgKi8KKyAgICBURVNUX0FTU0VSVCggcm5kX3BzZXVkb19yYW5kKCAmcm5kX2luZm8sIGJ1Ziwgc2l6ZW9mKCBidWYgKSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmdycCwgaWQgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyKCAmZ3JwLCAmZCwgJlEsICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApCisgICAgICAgICAgICAgICAgID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZHNhX3NpZ24oICZncnAsICZyLCAmcywgJmQsIGJ1Ziwgc2l6ZW9mKCBidWYgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZHNhX3ZlcmlmeSggJmdycCwgYnVmLCBzaXplb2YoIGJ1ZiApLCAmUSwgJnIsICZzICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmUSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZkICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZyICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZzICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGVjZHNhX3ByaW1fdGVzdF92ZWN0b3JzKCBpbnQgaWQsIGNoYXIgKmRfc3RyLCBjaGFyICp4UV9zdHIsIGNoYXIgKnlRX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmtfc3RyLCBjaGFyICpoYXNoX3N0ciwgY2hhciAqcl9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzX3N0ciApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFE7CisgICAgbWJlZHRsc19tcGkgZCwgciwgcywgcl9jaGVjaywgc19jaGVjazsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbNjZdLCBybmRfYnVmWzY2XTsKKyAgICBzaXplX3QgaGxlbjsKKyAgICBybmRfYnVmX2luZm8gcm5kX2luZm87CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlEgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmZCApOyBtYmVkdGxzX21waV9pbml0KCAmciApOyBtYmVkdGxzX21waV9pbml0KCAmcyApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZyX2NoZWNrICk7IG1iZWR0bHNfbXBpX2luaXQoICZzX2NoZWNrICk7CisgICAgbWVtc2V0KCBoYXNoLCAwLCBzaXplb2YoIGhhc2ggKSApOworICAgIG1lbXNldCggcm5kX2J1ZiwgMCwgc2l6ZW9mKCBybmRfYnVmICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBpZCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9zdHJpbmcoICZRLCAxNiwgeFFfc3RyLCB5UV9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmZCwgMTYsIGRfc3RyICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnJfY2hlY2ssIDE2LCByX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZzX2NoZWNrLCAxNiwgc19zdHIgKSA9PSAwICk7CisgICAgaGxlbiA9IHVuaGV4aWZ5KGhhc2gsIGhhc2hfc3RyKTsKKyAgICBybmRfaW5mby5idWYgPSBybmRfYnVmOworICAgIHJuZF9pbmZvLmxlbmd0aCA9IHVuaGV4aWZ5KCBybmRfYnVmLCBrX3N0ciApOworCisgICAgLyogRml4IHJuZF9idWYgYnkgc2hpZnRpbmcgaXQgbGVmdCBpZiBuZWNlc3NhcnkgKi8KKyAgICBpZiggZ3JwLm5iaXRzICUgOCAhPSAwICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc2hpZnQgPSA4IC0gKCBncnAubmJpdHMgJSA4ICk7CisgICAgICAgIHNpemVfdCBpOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCBybmRfaW5mby5sZW5ndGggLSAxOyBpKysgKQorICAgICAgICAgICAgcm5kX2J1ZltpXSA9IHJuZF9idWZbaV0gPDwgc2hpZnQgfCBybmRfYnVmW2krMV0gPj4gKCA4IC0gc2hpZnQgKTsKKworICAgICAgICBybmRfYnVmW3JuZF9pbmZvLmxlbmd0aC0xXSA8PD0gc2hpZnQ7CisgICAgfQorCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkc2Ffc2lnbiggJmdycCwgJnIsICZzLCAmZCwgaGFzaCwgaGxlbiwKKyAgICAgICAgICAgICAgICAgcm5kX2J1ZmZlcl9yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJnIsICZyX2NoZWNrICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmcywgJnNfY2hlY2sgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RzYV92ZXJpZnkoICZncnAsIGhhc2gsIGhsZW4sICZRLCAmcl9jaGVjaywgJnNfY2hlY2sgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZRICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmQgKTsgbWJlZHRsc19tcGlfZnJlZSggJnIgKTsgbWJlZHRsc19tcGlfZnJlZSggJnMgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmcl9jaGVjayApOyBtYmVkdGxzX21waV9mcmVlKCAmc19jaGVjayApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQyAqLwordm9pZCBlY2RzYV9kZXRfdGVzdF92ZWN0b3JzKCBpbnQgaWQsIGNoYXIgKmRfc3RyLCBpbnQgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptc2csIGNoYXIgKnJfc3RyLCBjaGFyICpzX3N0ciApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfbXBpIGQsIHIsIHMsIHJfY2hlY2ssIHNfY2hlY2s7CisgICAgdW5zaWduZWQgY2hhciBoYXNoW01CRURUTFNfTURfTUFYX1NJWkVdOworICAgIHNpemVfdCBobGVuOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZkICk7IG1iZWR0bHNfbXBpX2luaXQoICZyICk7IG1iZWR0bHNfbXBpX2luaXQoICZzICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnJfY2hlY2sgKTsgbWJlZHRsc19tcGlfaW5pdCggJnNfY2hlY2sgKTsKKyAgICBtZW1zZXQoIGhhc2gsIDAsIHNpemVvZiggaGFzaCApICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmdycCwgaWQgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmZCwgMTYsIGRfc3RyICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnJfY2hlY2ssIDE2LCByX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZzX2NoZWNrLCAxNiwgc19zdHIgKSA9PSAwICk7CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICk7CisgICAgVEVTVF9BU1NFUlQoIG1kX2luZm8gIT0gTlVMTCApOworICAgIGhsZW4gPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7CisgICAgbWJlZHRsc19tZCggbWRfaW5mbywgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbXNnLCBzdHJsZW4oIG1zZyApLCBoYXNoICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RzYV9zaWduX2RldCggJmdycCwgJnIsICZzLCAmZCwgaGFzaCwgaGxlbiwgbWRfYWxnICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZyLCAmcl9jaGVjayApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJnMsICZzX2NoZWNrICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmZCApOyBtYmVkdGxzX21waV9mcmVlKCAmciApOyBtYmVkdGxzX21waV9mcmVlKCAmcyApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZyX2NoZWNrICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZzX2NoZWNrICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQyAqLwordm9pZCBlY2RzYV93cml0ZV9yZWFkX3JhbmRvbSggaW50IGlkICkKK3sKKyAgICBtYmVkdGxzX2VjZHNhX2NvbnRleHQgY3R4OworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgc2lnWzIwMF07CisgICAgc2l6ZV90IHNpZ19sZW4sIGk7CisKKyAgICBtYmVkdGxzX2VjZHNhX2luaXQoICZjdHggKTsKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMHgwMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworICAgIG1lbXNldCggaGFzaCwgMCwgc2l6ZW9mKCBoYXNoICkgKTsKKyAgICBtZW1zZXQoIHNpZywgMHgyYSwgc2l6ZW9mKCBzaWcgKSApOworCisgICAgLyogcHJlcGFyZSBtYXRlcmlhbCBmb3Igc2lnbmF0dXJlICovCisgICAgVEVTVF9BU1NFUlQoIHJuZF9wc2V1ZG9fcmFuZCggJnJuZF9pbmZvLCBoYXNoLCBzaXplb2YoIGhhc2ggKSApID09IDAgKTsKKworICAgIC8qIGdlbmVyYXRlIHNpZ25pbmcga2V5ICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkc2FfZ2Vua2V5KCAmY3R4LCBpZCwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworCisgICAgLyogZ2VuZXJhdGUgYW5kIHdyaXRlIHNpZ25hdHVyZSwgdGhlbiByZWFkIGFuZCB2ZXJpZnkgaXQgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RzYV93cml0ZV9zaWduYXR1cmUoICZjdHgsIE1CRURUTFNfTURfU0hBMjU2LAorICAgICAgICAgICAgICAgICBoYXNoLCBzaXplb2YoIGhhc2ggKSwKKyAgICAgICAgICAgICAgICAgc2lnLCAmc2lnX2xlbiwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZHNhX3JlYWRfc2lnbmF0dXJlKCAmY3R4LCBoYXNoLCBzaXplb2YoIGhhc2ggKSwKKyAgICAgICAgICAgICAgICAgc2lnLCBzaWdfbGVuICkgPT0gMCApOworCisgICAgLyogY2hlY2sgd2UgZGlkbid0IHdyaXRlIHBhc3QgdGhlIGFubm91bmNlZCBsZW5ndGggKi8KKyAgICBmb3IoIGkgPSBzaWdfbGVuOyBpIDwgc2l6ZW9mKCBzaWcgKTsgaSsrICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIHNpZ1tpXSA9PSAweDJhICk7CisKKyAgICAvKiB0cnkgdmVyaWZpY2F0aW9uIHdpdGggaW52YWxpZCBsZW5ndGggKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RzYV9yZWFkX3NpZ25hdHVyZSggJmN0eCwgaGFzaCwgc2l6ZW9mKCBoYXNoICksCisgICAgICAgICAgICAgICAgIHNpZywgc2lnX2xlbiAtIDEgKSAhPSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkc2FfcmVhZF9zaWduYXR1cmUoICZjdHgsIGhhc2gsIHNpemVvZiggaGFzaCApLAorICAgICAgICAgICAgICAgICBzaWcsIHNpZ19sZW4gKyAxICkgIT0gMCApOworCisgICAgLyogdHJ5IGludmFsaWQgc2VxdWVuY2UgdGFnICovCisgICAgc2lnWzBdKys7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkc2FfcmVhZF9zaWduYXR1cmUoICZjdHgsIGhhc2gsIHNpemVvZiggaGFzaCApLAorICAgICAgICAgICAgICAgICBzaWcsIHNpZ19sZW4gKSAhPSAwICk7CisgICAgc2lnWzBdLS07CisKKyAgICAvKiB0cnkgbW9kaWZ5aW5nIHIgKi8KKyAgICBzaWdbMTBdKys7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkc2FfcmVhZF9zaWduYXR1cmUoICZjdHgsIGhhc2gsIHNpemVvZiggaGFzaCApLAorICAgICAgICAgICAgICAgICBzaWcsIHNpZ19sZW4gKSAhPSAwICk7CisgICAgc2lnWzEwXS0tOworCisgICAgLyogdHJ5IG1vZGlmeWluZyBzICovCisgICAgc2lnW3NpZ19sZW4gLSAxXSsrOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZHNhX3JlYWRfc2lnbmF0dXJlKCAmY3R4LCBoYXNoLCBzaXplb2YoIGhhc2ggKSwKKyAgICAgICAgICAgICAgICAgc2lnLCBzaWdfbGVuICkgIT0gMCApOworICAgIHNpZ1tzaWdfbGVuIC0gMV0tLTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjZHNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2pwYWtlLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNqcGFrZS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNzcyYTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNqcGFrZS5kYXRhCkBAIC0wLDAgKzEsMjMwIEBACitFQ0pQQUtFIHNlbGZ0ZXN0CitlY2pwYWtlX3NlbGZ0ZXN0OgorCitFQ0pQQUtFIHJvdW5kIG9uZTogY2xpZW50LCB2YWxpZAorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiNDEwNDA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2MjA5MzRkNzRlYjQzZTU0ZGY0MjRmZDk2MzA2YzAxMTdiZjEzMWFmYWJmOTBhOWQzM2QxMTk4ZDkwNTE5MzczNTE0NDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyIjowCisKK0VDSlBBS0Ugcm91bmQgb25lOiBzZXJ2ZXIsIHZhbGlkCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfU0VSVkVSOiI0MTA0YWNjZjAxMDZlZjg1OGZhMmQ5MTkzMzEzNDY4MDVhNzhiNThiYmFkMGI4NDRlNWM3ODkyODc5MTQ2MTg3ZGQyNjY2YWRhNzgxYmI3ZjExMTM3MjI1MWE4OTEwNjIxZjYzNGRmMTI4YWM0OGUzODFmZDZlZjkwNjA3MzFmNjk0YTQ0MTA0MWRkMGJkNWQ0NTY2YzliZWQ5Y2U3ZGU3MDFiNWU4MmUwOGU4NGI3MzA0NjYwMThhYjkwM2M3OWViOTgyMTcyMjM2YzBjMTcyOGFlNGJmNzM2MTBkMzRkZTQ0MjQ2ZWYzZDljMDVhMjIzNmZiNjZhNjU4M2Q3NDQ5MzA4YmFiY2UyMDcyZmUxNjY2Mjk5MmU5MjM1YzI1MDAyZjExYjE1MDg3YjgyNzM4ZTAzYzk0NWJmN2EyOTk1ZGRhMWU5ODM0NTg0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmI0MTA0YTQ5NTU4ZDMyZWQxZWJmYzE4MTZhZjRmZjA5YjU1ZmNiNGNhNDdiMmEwMmQxZTdjYWYxMTc5ZWEzZmUxMzk1YjIyYjg2MTk2NDAxNmZhYmFmNzJjOTc1Njk1ZDkzZDRkZjBlNTE5N2ZlOWYwNDA2MzRlZDU5NzY0OTM3Nzg3YmUyMGJjNGRlZWJiZjliOGQ2MGEzMzVmMDQ2Y2EzYWE5NDFlNDU4NjRjN2NhZGVmOWNmNzViM2Q4YjAxMGU0NDNlZjAiOjAKKworRUNKUEFLRSByb3VuZCBvbmU6IHJvbGUgbWlzbWF0Y2gKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDRhY2NmMDEwNmVmODU4ZmEyZDkxOTMzMTM0NjgwNWE3OGI1OGJiYWQwYjg0NGU1Yzc4OTI4NzkxNDYxODdkZDI2NjZhZGE3ODFiYjdmMTExMzcyMjUxYTg5MTA2MjFmNjM0ZGYxMjhhYzQ4ZTM4MWZkNmVmOTA2MDczMWY2OTRhNDQxMDQxZGQwYmQ1ZDQ1NjZjOWJlZDljZTdkZTcwMWI1ZTgyZTA4ZTg0YjczMDQ2NjAxOGFiOTAzYzc5ZWI5ODIxNzIyMzZjMGMxNzI4YWU0YmY3MzYxMGQzNGRlNDQyNDZlZjNkOWMwNWEyMjM2ZmI2NmE2NTgzZDc0NDkzMDhiYWJjZTIwNzJmZTE2NjYyOTkyZTkyMzVjMjUwMDJmMTFiMTUwODdiODI3MzhlMDNjOTQ1YmY3YTI5OTVkZGExZTk4MzQ1ODQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjQxMDRhNDk1NThkMzJlZDFlYmZjMTgxNmFmNGZmMDliNTVmY2I0Y2E0N2IyYTAyZDFlN2NhZjExNzllYTNmZTEzOTViMjJiODYxOTY0MDE2ZmFiYWY3MmM5NzU2OTVkOTNkNGRmMGU1MTk3ZmU5ZjA0MDYzNGVkNTk3NjQ5Mzc3ODdiZTIwYmM0ZGVlYmJmOWI4ZDYwYTMzNWYwNDZjYTNhYTk0MWU0NTg2NGM3Y2FkZWY5Y2Y3NWIzZDhiMDEwZTQ0M2VmMCI6TUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQKKworRUNKUEFLRSByb3VuZCBvbmU6IHRyYWlsaW5nIGJ5dGUKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjQxMDQwOWY4NWIzZDIwZWJkNzg4NWNlNDY0YzA4ZDA1NmQ2NDI4ZmU0ZGQ5Mjg3YWEzNjVmMTMxZjQzNjBmZjM4NmQ4NDY4OThiYzRiNDE1ODNjMmE1MTk3ZjY1ZDc4NzQyNzQ2YzEyYTVlYzBhNGZmZTJmMjcwYTc1MGExZDhmYjUxNjIwOTM0ZDc0ZWI0M2U1NGRmNDI0ZmQ5NjMwNmMwMTE3YmYxMzFhZmFiZjkwYTlkMzNkMTE5OGQ5MDUxOTM3MzUxNDQxMDQxOTBhMDc3MDBmZmE0YmU2YWUxZDc5ZWUwZjA2YWViNTQ0Y2Q1YWRkYWFiZWRmNzBmODYyMzMyMTMzMmM1NGYzNTVmMGZiZmVjNzgzZWQzNTllNWQwYmY3Mzc3YTBmYzRlYTdhY2U0NzNjOWMxMTJiNDFjY2Q0MWFjNTZhNTYxMjQxMDQzNjBhMWNlYTMzZmNlNjQxMTU2NDU4ZTBhNGVhYzIxOWU5NjgzMWU2YWViYzg4YjNmMzc1MmY5M2EwMjgxZDFiZjFmYjEwNjA1MWRiOTY5NGE4ZDZlODYyYTVlZjEzMjRhM2Q5ZTI3ODk0ZjFlZTRmN2M1OTE5OTk2NWE4ZGQ0YTIwOTE4NDdkMmQyMmRmM2VlNTVmYWEyYTNmYjMzZmQyZDFlMDU1YTA3YTdjNjFlY2ZiOGQ4MGVjMDBjMmM5ZWIxMjAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDE6IG5vIGRhdGEKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AxOiBsZW5ndGggb2YgZmlyc3QgcG9pbnQgdG9vIHNtYWxsCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiIwMCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AxOiBsZW5ndGggb2YgZmlyc3QgcG9pbnQgdG9vIGJpZworcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiMDEiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogbm8gcG9pbnQgZGF0YQorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiMDEwNCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AxOiBmaXJzdCBwb2ludCBpcyB6ZXJvCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiIwMTAwIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDE6IHVua25vd24gZmlyc3QgcG9pbnQgZm9ybWF0CityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA1N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmIiOk1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AxOiBub3RoaW5nIGFmdGVyIGZpcnN0IHBvaW50CityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmIiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogbGVuZ3RoIG9mIHNlY29uZCBwb2ludCB0b28gc21hbGwKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDE6IGxlbmd0aCBvZiBzZWNvbmQgcG9pbnQgdG9vIGJpZworcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiMDEiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogbm8gc2Vjb25kIHBvaW50IGRhdGEKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjAxMDQiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogdW5rbm93IHNlY29uZCBwb2ludCBmb3JtYXQKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjQxMDUwOWY4NWIzZDIwZWJkNzg4NWNlNDY0YzA4ZDA1NmQ2NDI4ZmU0ZGQ5Mjg3YWEzNjVmMTMxZjQzNjBmZjM4NmQ4NDY4OThiYzRiNDE1ODNjMmE1MTk3ZjY1ZDc4NzQyNzQ2YzEyYTVlYzBhNGZmZTJmMjcwYTc1MGExZDhmYjUxNiI6TUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDE6IG5vdGhpbmcgYWZ0ZXIgc2Vjb25kIHBvaW50CityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmI0MTA0MDlmODViM2QyMGViZDc4ODVjZTQ2NGMwOGQwNTZkNjQyOGZlNGRkOTI4N2FhMzY1ZjEzMWY0MzYwZmYzODZkODQ2ODk4YmM0YjQxNTgzYzJhNTE5N2Y2NWQ3ODc0Mjc0NmMxMmE1ZWMwYTRmZmUyZjI3MGE3NTBhMWQ4ZmI1MTYiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogemVyby1sZW5ndGggcgorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiNDEwNDA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2MDAiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogbm8gZGF0YSBmb3IgcgorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiNDEwNDA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2MDEiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogY29ycnVwdGVkIHIKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjQxMDQwOWY4NWIzZDIwZWJkNzg4NWNlNDY0YzA4ZDA1NmQ2NDI4ZmU0ZGQ5Mjg3YWEzNjVmMTMxZjQzNjBmZjM4NmQ4NDY4OThiYzRiNDE1ODNjMmE1MTk3ZjY1ZDc4NzQyNzQ2YzEyYTVlYzBhNGZmZTJmMjcwYTc1MGExZDhmYjUxNjIwOTM0ZDc0ZWI0M2U1NGRmNDI0ZmQ5NjMwNmMwMTE3YmYxMzFhZmFiZjkwYTlkMzNkMTE5OGQ5MDUxOTM3MzUxNSI6TUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDE6IFggbm90IG9uIHRoZSBjdXJ2ZQorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJhNDEwNDA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2MjA5MzRkNzRlYjQzZTU0ZGY0MjRmZDk2MzA2YzAxMTdiZjEzMWFmYWJmOTBhOWQzM2QxMTk4ZDkwNTE5MzczNTE0IjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDI6IG5vIGRhdGEKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQxOTBhMDc3MDBmZmE0YmU2YWUxZDc5ZWUwZjA2YWViNTQ0Y2Q1YWRkYWFiZWRmNzBmODYyMzMyMTMzMmM1NGYzNTVmMGZiZmVjNzgzZWQzNTllNWQwYmY3Mzc3YTBmYzRlYTdhY2U0NzNjOWMxMTJiNDFjY2Q0MWFjNTZhNTYxMjQxMDQzNjBhMWNlYTMzZmNlNjQxMTU2NDU4ZTBhNGVhYzIxOWU5NjgzMWU2YWViYzg4YjNmMzc1MmY5M2EwMjgxZDFiZjFmYjEwNjA1MWRiOTY5NGE4ZDZlODYyYTVlZjEzMjRhM2Q5ZTI3ODk0ZjFlZTRmN2M1OTE5OTk2NWE4ZGQ0YTIwOTE4NDdkMmQyMmRmM2VlNTVmYWEyYTNmYjMzZmQyZDFlMDU1YTA3YTdjNjFlY2ZiOGQ4MGVjMDBjMmM5ZWIxMiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AyOiBsZW5ndGggb2YgZmlyc3QgcG9pbnQgdG9vIHNtYWxsCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTIwMCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AyOiBsZW5ndGggb2YgZmlyc3QgcG9pbnQgdG9vIGJpZworcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyMDEiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogbm8gcG9pbnQgZGF0YQorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyMDEwNCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AyOiBmaXJzdCBwb2ludCBpcyB6ZXJvCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTIwMTAwIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDI6IHVua25vd24gZmlyc3QgcG9pbnQgZm9ybWF0CityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTI0MTA1N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmIiOk1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AyOiBub3RoaW5nIGFmdGVyIGZpcnN0IHBvaW50CityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmIiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogbGVuZ3RoIG9mIHNlY29uZCBwb2ludCB0b28gc21hbGwKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQxOTBhMDc3MDBmZmE0YmU2YWUxZDc5ZWUwZjA2YWViNTQ0Y2Q1YWRkYWFiZWRmNzBmODYyMzMyMTMzMmM1NGYzNTVmMGZiZmVjNzgzZWQzNTllNWQwYmY3Mzc3YTBmYzRlYTdhY2U0NzNjOWMxMTJiNDFjY2Q0MWFjNTZhNTYxMjQxMDQzNjBhMWNlYTMzZmNlNjQxMTU2NDU4ZTBhNGVhYzIxOWU5NjgzMWU2YWViYzg4YjNmMzc1MmY5M2EwMjgxZDFiZjFmYjEwNjA1MWRiOTY5NGE4ZDZlODYyYTVlZjEzMjRhM2Q5ZTI3ODk0ZjFlZTRmN2M1OTE5OTk2NWE4ZGQ0YTIwOTE4NDdkMmQyMmRmM2VlNTVmYWEyYTNmYjMzZmQyZDFlMDU1YTA3YTdjNjFlY2ZiOGQ4MGVjMDBjMmM5ZWIxMjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDI6IGxlbmd0aCBvZiBzZWNvbmQgcG9pbnQgdG9vIGJpZworcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiMDEiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogbm8gc2Vjb25kIHBvaW50IGRhdGEKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQxOTBhMDc3MDBmZmE0YmU2YWUxZDc5ZWUwZjA2YWViNTQ0Y2Q1YWRkYWFiZWRmNzBmODYyMzMyMTMzMmM1NGYzNTVmMGZiZmVjNzgzZWQzNTllNWQwYmY3Mzc3YTBmYzRlYTdhY2U0NzNjOWMxMTJiNDFjY2Q0MWFjNTZhNTYxMjQxMDQzNjBhMWNlYTMzZmNlNjQxMTU2NDU4ZTBhNGVhYzIxOWU5NjgzMWU2YWViYzg4YjNmMzc1MmY5M2EwMjgxZDFiZjFmYjEwNjA1MWRiOTY5NGE4ZDZlODYyYTVlZjEzMjRhM2Q5ZTI3ODk0ZjFlZTRmN2M1OTE5OTk2NWE4ZGQ0YTIwOTE4NDdkMmQyMmRmM2VlNTVmYWEyYTNmYjMzZmQyZDFlMDU1YTA3YTdjNjFlY2ZiOGQ4MGVjMDBjMmM5ZWIxMjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjAxMDQiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogdW5rbm93IHNlY29uZCBwb2ludCBmb3JtYXQKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQxOTBhMDc3MDBmZmE0YmU2YWUxZDc5ZWUwZjA2YWViNTQ0Y2Q1YWRkYWFiZWRmNzBmODYyMzMyMTMzMmM1NGYzNTVmMGZiZmVjNzgzZWQzNTllNWQwYmY3Mzc3YTBmYzRlYTdhY2U0NzNjOWMxMTJiNDFjY2Q0MWFjNTZhNTYxMjQxMDQzNjBhMWNlYTMzZmNlNjQxMTU2NDU4ZTBhNGVhYzIxOWU5NjgzMWU2YWViYzg4YjNmMzc1MmY5M2EwMjgxZDFiZjFmYjEwNjA1MWRiOTY5NGE4ZDZlODYyYTVlZjEzMjRhM2Q5ZTI3ODk0ZjFlZTRmN2M1OTE5OTk2NWE4ZGQ0YTIwOTE4NDdkMmQyMmRmM2VlNTVmYWEyYTNmYjMzZmQyZDFlMDU1YTA3YTdjNjFlY2ZiOGQ4MGVjMDBjMmM5ZWIxMjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjQxMDUwOWY4NWIzZDIwZWJkNzg4NWNlNDY0YzA4ZDA1NmQ2NDI4ZmU0ZGQ5Mjg3YWEzNjVmMTMxZjQzNjBmZjM4NmQ4NDY4OThiYzRiNDE1ODNjMmE1MTk3ZjY1ZDc4NzQyNzQ2YzEyYTVlYzBhNGZmZTJmMjcwYTc1MGExZDhmYjUxNiI6TUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDI6IG5vdGhpbmcgYWZ0ZXIgc2Vjb25kIHBvaW50CityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmI0MTA0MDlmODViM2QyMGViZDc4ODVjZTQ2NGMwOGQwNTZkNjQyOGZlNGRkOTI4N2FhMzY1ZjEzMWY0MzYwZmYzODZkODQ2ODk4YmM0YjQxNTgzYzJhNTE5N2Y2NWQ3ODc0Mjc0NmMxMmE1ZWMwYTRmZmUyZjI3MGE3NTBhMWQ4ZmI1MTYiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogemVyby1sZW5ndGggcgorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiNDEwNDA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2MDAiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogbm8gZGF0YSBmb3IgcgorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiNDEwNDA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2MDEiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogY29ycnVwdGVkIHIKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQxOTBhMDc3MDBmZmE0YmU2YWUxZDc5ZWUwZjA2YWViNTQ0Y2Q1YWRkYWFiZWRmNzBmODYyMzMyMTMzMmM1NGYzNTVmMGZiZmVjNzgzZWQzNTllNWQwYmY3Mzc3YTBmYzRlYTdhY2U0NzNjOWMxMTJiNDFjY2Q0MWFjNTZhNTYxMjQxMDQzNjBhMWNlYTMzZmNlNjQxMTU2NDU4ZTBhNGVhYzIxOWU5NjgzMWU2YWViYzg4YjNmMzc1MmY5M2EwMjgxZDFiZjFmYjEwNjA1MWRiOTY5NGE4ZDZlODYyYTVlZjEzMjRhM2Q5ZTI3ODk0ZjFlZTRmN2M1OTE5OTk2NWE4ZGQ0YTIwOTE4NDdkMmQyMmRmM2VlNTVmYWEyYTNmYjMzZmQyZDFlMDU1YTA3YTdjNjFlY2ZiOGQ4MGVjMDBjMmM5ZWIxMjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjQxMDQwOWY4NWIzZDIwZWJkNzg4NWNlNDY0YzA4ZDA1NmQ2NDI4ZmU0ZGQ5Mjg3YWEzNjVmMTMxZjQzNjBmZjM4NmQ4NDY4OThiYzRiNDE1ODNjMmE1MTk3ZjY1ZDc4NzQyNzQ2YzEyYTVlYzBhNGZmZTJmMjcwYTc1MGExZDhmYjUxNjIwOTM0ZDc0ZWI0M2U1NGRmNDI0ZmQ5NjMwNmMwMTE3YmYxMzFhZmFiZjkwYTlkMzNkMTE5OGQ5MDUxOTM3MzUxNSI6TUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDI6IFggbm90IG9uIHRoZSBjdXJ2ZQorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJhNDEwNDA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2MjA5MzRkNzRlYjQzZTU0ZGY0MjRmZDk2MzA2YzAxMTdiZjEzMWFmYWJmOTBhOWQzM2QxMTk4ZDkwNTE5MzczNTE0IjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiB2YWxpZAorcmVhZF9yb3VuZF90d29fY2xpOiIwMzAwMTc0MTA0MGZiMjJiMWQ1ZDExMjNlMGVmOWZlYjlkOGEyZTU5MGExZjRkN2NlZDJjMmIwNjU4NmU4ZjJhMTZkNGViMmZkYTQzMjhhMjBiMDdkOGZkNjY3NjU0Y2ExOGM1NGUzMmEzMzNhMDg0NTQ1MWU5MjZlZTg4MDRmZDdhZjBhYWE3YTY0MTA0NTUxNmVhM2U1NGEwZDVkOGIyY2U3ODZiMzhkMzgzMzcwMDI5YTVkYmU0NDU5YzlkZDYwMWI0MDhhMjRhZTY0NjVjOGFjOTA1YjllYjAzYjVkMzY5MWMxMzllZjgzZjFjZDQyMDBmNmM5Y2Q0ZWMzOTIyMThhNTllZDI0M2QzYzgyMGZmNzI0YTlhNzBiODhjYjg2ZjIwYjQzNGM2ODY1YWExY2Q3OTA2ZGQ3YzliY2UzNTI1ZjUwODI3NmYyNjgzNmMiOjAKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiB0cmFpbGluZyBieXRlCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzQxMDQwZmIyMmIxZDVkMTEyM2UwZWY5ZmViOWQ4YTJlNTkwYTFmNGQ3Y2VkMmMyYjA2NTg2ZThmMmExNmQ0ZWIyZmRhNDMyOGEyMGIwN2Q4ZmQ2Njc2NTRjYTE4YzU0ZTMyYTMzM2EwODQ1NDUxZTkyNmVlODgwNGZkN2FmMGFhYTdhNjQxMDQ1NTE2ZWEzZTU0YTBkNWQ4YjJjZTc4NmIzOGQzODMzNzAwMjlhNWRiZTQ0NTljOWRkNjAxYjQwOGEyNGFlNjQ2NWM4YWM5MDViOWViMDNiNWQzNjkxYzEzOWVmODNmMWNkNDIwMGY2YzljZDRlYzM5MjIxOGE1OWVkMjQzZDNjODIwZmY3MjRhOWE3MGI4OGNiODZmMjBiNDM0YzY4NjVhYTFjZDc5MDZkZDdjOWJjZTM1MjVmNTA4Mjc2ZjI2ODM2YzAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBubyBkYXRhCityZWFkX3JvdW5kX3R3b19jbGk6IiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogRUNQYXJhbXMgdG9vIHNob3J0CityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IEVDUGFyYW1zIG5vdCBuYW1lZCBjdXJ2ZQorcmVhZF9yb3VuZF90d29fY2xpOiIwMTAwMTciOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IEVDUGFyYW1zIHdyb25nIGN1cnZlCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNiI6TUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBubyBkYXRhIGFmdGVyIEVDUGFyYW1zCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNyI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogbGVuZ3RoIG9mIGZpcnN0IHBvaW50IHRvbyBzbWFsbAorcmVhZF9yb3VuZF90d29fY2xpOiIwMzAwMTcwMCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogbGVuZ3RoIG9mIGZpcnN0IHBvaW50IHRvbyBiaWcKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE3MDEiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IG5vIGZpcnN0IHBvaW50IGRhdGEKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE3MDEwNCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogZmlyc3QgcG9pbnQgaXMgemVybworcmVhZF9yb3VuZF90d29fY2xpOiIwMzAwMTcwMTAwIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiB1bmtub3duIGZpcnN0IHBvaW50IGZvcm1hdAorcmVhZF9yb3VuZF90d29fY2xpOiIwMzAwMTc0MTA1MGZiMjJiMWQ1ZDExMjNlMGVmOWZlYjlkOGEyZTU5MGExZjRkN2NlZDJjMmIwNjU4NmU4ZjJhMTZkNGViMmZkYTQzMjhhMjBiMDdkOGZkNjY3NjU0Y2ExOGM1NGUzMmEzMzNhMDg0NTQ1MWU5MjZlZTg4MDRmZDdhZjBhYWE3YTYiOk1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogbm90aGluZyBhZnRlciBmaXJzdCBwb2ludAorcmVhZF9yb3VuZF90d29fY2xpOiIwMzAwMTc0MTA0MGZiMjJiMWQ1ZDExMjNlMGVmOWZlYjlkOGEyZTU5MGExZjRkN2NlZDJjMmIwNjU4NmU4ZjJhMTZkNGViMmZkYTQzMjhhMjBiMDdkOGZkNjY3NjU0Y2ExOGM1NGUzMmEzMzNhMDg0NTQ1MWU5MjZlZTg4MDRmZDdhZjBhYWE3YTYiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IGxlbmd0aCBvZiBzZWNvbmQgcG9pbnQgdG9vIHNtYWxsCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzQxMDQwZmIyMmIxZDVkMTEyM2UwZWY5ZmViOWQ4YTJlNTkwYTFmNGQ3Y2VkMmMyYjA2NTg2ZThmMmExNmQ0ZWIyZmRhNDMyOGEyMGIwN2Q4ZmQ2Njc2NTRjYTE4YzU0ZTMyYTMzM2EwODQ1NDUxZTkyNmVlODgwNGZkN2FmMGFhYTdhNjAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBsZW5ndGggb2Ygc2Vjb25kIHBvaW50IHRvbyBiaWcKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE3NDEwNDBmYjIyYjFkNWQxMTIzZTBlZjlmZWI5ZDhhMmU1OTBhMWY0ZDdjZWQyYzJiMDY1ODZlOGYyYTE2ZDRlYjJmZGE0MzI4YTIwYjA3ZDhmZDY2NzY1NGNhMThjNTRlMzJhMzMzYTA4NDU0NTFlOTI2ZWU4ODA0ZmQ3YWYwYWFhN2E2MDEiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IG5vIHNlY29uZCBwb2ludCBkYXRhCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzQxMDQwZmIyMmIxZDVkMTEyM2UwZWY5ZmViOWQ4YTJlNTkwYTFmNGQ3Y2VkMmMyYjA2NTg2ZThmMmExNmQ0ZWIyZmRhNDMyOGEyMGIwN2Q4ZmQ2Njc2NTRjYTE4YzU0ZTMyYTMzM2EwODQ1NDUxZTkyNmVlODgwNGZkN2FmMGFhYTdhNjAxMDQiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IHVua25vd24gc2Vjb25kIHBvaW50IGZvcm1hdAorcmVhZF9yb3VuZF90d29fY2xpOiIwMzAwMTc0MTA0MGZiMjJiMWQ1ZDExMjNlMGVmOWZlYjlkOGEyZTU5MGExZjRkN2NlZDJjMmIwNjU4NmU4ZjJhMTZkNGViMmZkYTQzMjhhMjBiMDdkOGZkNjY3NjU0Y2ExOGM1NGUzMmEzMzNhMDg0NTQ1MWU5MjZlZTg4MDRmZDdhZjBhYWE3YTY0MTA1NTUxNmVhM2U1NGEwZDVkOGIyY2U3ODZiMzhkMzgzMzcwMDI5YTVkYmU0NDU5YzlkZDYwMWI0MDhhMjRhZTY0NjVjOGFjOTA1YjllYjAzYjVkMzY5MWMxMzllZjgzZjFjZDQyMDBmNmM5Y2Q0ZWMzOTIyMThhNTllZDI0M2QzYzgiOk1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogbm90aGluZyBhZnRlciBzZWNvbmQgcG9pbnQKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE3NDEwNDBmYjIyYjFkNWQxMTIzZTBlZjlmZWI5ZDhhMmU1OTBhMWY0ZDdjZWQyYzJiMDY1ODZlOGYyYTE2ZDRlYjJmZGE0MzI4YTIwYjA3ZDhmZDY2NzY1NGNhMThjNTRlMzJhMzMzYTA4NDU0NTFlOTI2ZWU4ODA0ZmQ3YWYwYWFhN2E2NDEwNDU1MTZlYTNlNTRhMGQ1ZDhiMmNlNzg2YjM4ZDM4MzM3MDAyOWE1ZGJlNDQ1OWM5ZGQ2MDFiNDA4YTI0YWU2NDY1YzhhYzkwNWI5ZWIwM2I1ZDM2OTFjMTM5ZWY4M2YxY2Q0MjAwZjZjOWNkNGVjMzkyMjE4YTU5ZWQyNDNkM2M4IjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiB6ZXJvLWxlbmd0aCByCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzQxMDQwZmIyMmIxZDVkMTEyM2UwZWY5ZmViOWQ4YTJlNTkwYTFmNGQ3Y2VkMmMyYjA2NTg2ZThmMmExNmQ0ZWIyZmRhNDMyOGEyMGIwN2Q4ZmQ2Njc2NTRjYTE4YzU0ZTMyYTMzM2EwODQ1NDUxZTkyNmVlODgwNGZkN2FmMGFhYTdhNjQxMDQ1NTE2ZWEzZTU0YTBkNWQ4YjJjZTc4NmIzOGQzODMzNzAwMjlhNWRiZTQ0NTljOWRkNjAxYjQwOGEyNGFlNjQ2NWM4YWM5MDViOWViMDNiNWQzNjkxYzEzOWVmODNmMWNkNDIwMGY2YzljZDRlYzM5MjIxOGE1OWVkMjQzZDNjODAwIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBubyBkYXRhIGZvciByCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzQxMDQwZmIyMmIxZDVkMTEyM2UwZWY5ZmViOWQ4YTJlNTkwYTFmNGQ3Y2VkMmMyYjA2NTg2ZThmMmExNmQ0ZWIyZmRhNDMyOGEyMGIwN2Q4ZmQ2Njc2NTRjYTE4YzU0ZTMyYTMzM2EwODQ1NDUxZTkyNmVlODgwNGZkN2FmMGFhYTdhNjQxMDQ1NTE2ZWEzZTU0YTBkNWQ4YjJjZTc4NmIzOGQzODMzNzAwMjlhNWRiZTQ0NTljOWRkNjAxYjQwOGEyNGFlNjQ2NWM4YWM5MDViOWViMDNiNWQzNjkxYzEzOWVmODNmMWNkNDIwMGY2YzljZDRlYzM5MjIxOGE1OWVkMjQzZDNjODAxIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBjb3JydXB0ZWQgcgorcmVhZF9yb3VuZF90d29fY2xpOiIwMzAwMTc0MTA0MGZiMjJiMWQ1ZDExMjNlMGVmOWZlYjlkOGEyZTU5MGExZjRkN2NlZDJjMmIwNjU4NmU4ZjJhMTZkNGViMmZkYTQzMjhhMjBiMDdkOGZkNjY3NjU0Y2ExOGM1NGUzMmEzMzNhMDg0NTQ1MWU5MjZlZTg4MDRmZDdhZjBhYWE3YTY0MTA0NTUxNmVhM2U1NGEwZDVkOGIyY2U3ODZiMzhkMzgzMzcwMDI5YTVkYmU0NDU5YzlkZDYwMWI0MDhhMjRhZTY0NjVjOGFjOTA1YjllYjAzYjVkMzY5MWMxMzllZjgzZjFjZDQyMDBmNmM5Y2Q0ZWMzOTIyMThhNTllZDI0M2QzYzgyMGZmNzI0YTlhNzBiODhjYjg2ZjIwYjQzNGM2ODY1YWExY2Q3OTA2ZGQ3YzliY2UzNTI1ZjUwODI3NmYyNjgzNmQiOk1CRURUTFNfRVJSX0VDUF9WRVJJRllfRkFJTEVECisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogWCBub3Qgb24gdGhlIGN1cnZlCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzQxMDQwZmIyMmIxZDVkMTEyM2UwZWY5ZmViOWQ4YTJlNTkwYTFmNGQ3Y2VkMmMyYjA2NTg2ZThmMmExNmQ0ZWIyZmRhNDMyOGEyMGIwN2Q4ZmQ2Njc2NTRjYTE4YzU0ZTMyYTMzM2EwODQ1NDUxZTkyNmVlODgwNGZkN2FmMGFhYTdhNzQxMDQ1NTE2ZWEzZTU0YTBkNWQ4YjJjZTc4NmIzOGQzODMzNzAwMjlhNWRiZTQ0NTljOWRkNjAxYjQwOGEyNGFlNjQ2NWM4YWM5MDViOWViMDNiNWQzNjkxYzEzOWVmODNmMWNkNDIwMGY2YzljZDRlYzM5MjIxOGE1OWVkMjQzZDNjODIwZmY3MjRhOWE3MGI4OGNiODZmMjBiNDM0YzY4NjVhYTFjZDc5MDZkZDdjOWJjZTM1MjVmNTA4Mjc2ZjI2ODM2YyI6TUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogdmFsaWQKK3JlYWRfcm91bmRfdHdvX3NydjoiNDEwNDY5ZDU0ZWU4NWU5MGNlM2YxMjQ2NzQyZGU1MDdlOTM5ZTgxZDFkYzFjNWNiOTg4YjU4YzMxMGM5ZmRkOTUyNGQ5MzcyMGI0NTU0MWM4M2VlODg0MTE5MWRhN2NlZDg2ZTMzMTJkNDM2MjNjMWQ2M2U3NDk4OWFiYTRhZmZkMWVlNDEwNDA3N2U4YzMxZTIwZTZiZWRiNzYwYzEzNTkzZTY5ZjE1YmU4NWMyN2Q2OGNkMDljY2I4YzQxODM2MDg5MTdjNWMzZDQwOWZhYzM5ZmVmZWU4MmY3MjkyZDM2ZjBkMjNlMDU1OTEzZjQ1YTUyYjg1ZGQ4YTIwNTJlOWUxMjliYjRkMjAwZjAxMWYxOTQ4MzUzNWE2ZTg5YTU4MGM5YjAwMDNiYWYyMTQ2MmVjZTkxYTgyY2MzOGRiZGNhZTYwZDljNTRjIjowCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogdHJhaWxpbmcgYnl0ZQorcmVhZF9yb3VuZF90d29fc3J2OiI0MTA0NjlkNTRlZTg1ZTkwY2UzZjEyNDY3NDJkZTUwN2U5MzllODFkMWRjMWM1Y2I5ODhiNThjMzEwYzlmZGQ5NTI0ZDkzNzIwYjQ1NTQxYzgzZWU4ODQxMTkxZGE3Y2VkODZlMzMxMmQ0MzYyM2MxZDYzZTc0OTg5YWJhNGFmZmQxZWU0MTA0MDc3ZThjMzFlMjBlNmJlZGI3NjBjMTM1OTNlNjlmMTViZTg1YzI3ZDY4Y2QwOWNjYjhjNDE4MzYwODkxN2M1YzNkNDA5ZmFjMzlmZWZlZTgyZjcyOTJkMzZmMGQyM2UwNTU5MTNmNDVhNTJiODVkZDhhMjA1MmU5ZTEyOWJiNGQyMDBmMDExZjE5NDgzNTM1YTZlODlhNTgwYzliMDAwM2JhZjIxNDYyZWNlOTFhODJjYzM4ZGJkY2FlNjBkOWM1NGMwMCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogbm8gZGF0YQorcmVhZF9yb3VuZF90d29fc3J2OiIiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBzZXJ2ZXI6IGxlbmd0aCBvZiBmb3JzdCBwb2ludCB0b28gc21hbGwKK3JlYWRfcm91bmRfdHdvX3NydjoiMDAiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBzZXJ2ZXI6IGxlbmd0aCBvZiBmaXJzdCBwb2ludCB0b28gYmlnCityZWFkX3JvdW5kX3R3b19zcnY6IjAxIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiBubyBmaXJzdCBwb2ludCBkYXRhCityZWFkX3JvdW5kX3R3b19zcnY6IjAxMDQiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBzZXJ2ZXI6IGZpcnN0IHBvaW50IGlzIHplcm8KK3JlYWRfcm91bmRfdHdvX3NydjoiMDEwMCI6TUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogdW5rbm93biBmaXJzdCBwb2ludCBmb3JtYXQKK3JlYWRfcm91bmRfdHdvX3NydjoiNDEwNTY5ZDU0ZWU4NWU5MGNlM2YxMjQ2NzQyZGU1MDdlOTM5ZTgxZDFkYzFjNWNiOTg4YjU4YzMxMGM5ZmRkOTUyNGQ5MzcyMGI0NTU0MWM4M2VlODg0MTE5MWRhN2NlZDg2ZTMzMTJkNDM2MjNjMWQ2M2U3NDk4OWFiYTRhZmZkMWVlIjpNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRQorCitFQ0pQQUtFIHJvdW5kIHR3byBzZXJ2ZXI6IG5vdGhpbmcgYWZ0ZXIgZmlyc3QgcG9pbnQKK3JlYWRfcm91bmRfdHdvX3NydjoiNDEwNDY5ZDU0ZWU4NWU5MGNlM2YxMjQ2NzQyZGU1MDdlOTM5ZTgxZDFkYzFjNWNiOTg4YjU4YzMxMGM5ZmRkOTUyNGQ5MzcyMGI0NTU0MWM4M2VlODg0MTE5MWRhN2NlZDg2ZTMzMTJkNDM2MjNjMWQ2M2U3NDk4OWFiYTRhZmZkMWVlIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiBsZW5ndGggb2Ygc2Vjb25kIHBvaW50IHRvbyBzbWFsbAorcmVhZF9yb3VuZF90d29fc3J2OiI0MTA0NjlkNTRlZTg1ZTkwY2UzZjEyNDY3NDJkZTUwN2U5MzllODFkMWRjMWM1Y2I5ODhiNThjMzEwYzlmZGQ5NTI0ZDkzNzIwYjQ1NTQxYzgzZWU4ODQxMTkxZGE3Y2VkODZlMzMxMmQ0MzYyM2MxZDYzZTc0OTg5YWJhNGFmZmQxZWUwMCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogbGVuZ3RoIG9mIHNlY29uZCBwb2ludCB0b28gYmlnCityZWFkX3JvdW5kX3R3b19zcnY6IjQxMDQ2OWQ1NGVlODVlOTBjZTNmMTI0Njc0MmRlNTA3ZTkzOWU4MWQxZGMxYzVjYjk4OGI1OGMzMTBjOWZkZDk1MjRkOTM3MjBiNDU1NDFjODNlZTg4NDExOTFkYTdjZWQ4NmUzMzEyZDQzNjIzYzFkNjNlNzQ5ODlhYmE0YWZmZDFlZTAxIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiBubyBzZWNvbmQgcG9pbnQgZGF0YQorcmVhZF9yb3VuZF90d29fc3J2OiI0MTA0NjlkNTRlZTg1ZTkwY2UzZjEyNDY3NDJkZTUwN2U5MzllODFkMWRjMWM1Y2I5ODhiNThjMzEwYzlmZGQ5NTI0ZDkzNzIwYjQ1NTQxYzgzZWU4ODQxMTkxZGE3Y2VkODZlMzMxMmQ0MzYyM2MxZDYzZTc0OTg5YWJhNGFmZmQxZWUwMTA0IjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiB1bmtub3duIHNlY29uZCBwb2ludCBmb3JtYXQKK3JlYWRfcm91bmRfdHdvX3NydjoiNDEwNTY5ZDU0ZWU4NWU5MGNlM2YxMjQ2NzQyZGU1MDdlOTM5ZTgxZDFkYzFjNWNiOTg4YjU4YzMxMGM5ZmRkOTUyNGQ5MzcyMGI0NTU0MWM4M2VlODg0MTE5MWRhN2NlZDg2ZTMzMTJkNDM2MjNjMWQ2M2U3NDk4OWFiYTRhZmZkMWVlNDEwNDA3N2U4YzMxZTIwZTZiZWRiNzYwYzEzNTkzZTY5ZjE1YmU4NWMyN2Q2OGNkMDljY2I4YzQxODM2MDg5MTdjNWMzZDQwOWZhYzM5ZmVmZWU4MmY3MjkyZDM2ZjBkMjNlMDU1OTEzZjQ1YTUyYjg1ZGQ4YTIwNTJlOWUxMjliYjRkIjpNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRQorCitFQ0pQQUtFIHJvdW5kIHR3byBzZXJ2ZXI6IG5vdGhpbmcgYWZ0ZXIgc2Vjb25kIHBvaW50CityZWFkX3JvdW5kX3R3b19zcnY6IjQxMDQ2OWQ1NGVlODVlOTBjZTNmMTI0Njc0MmRlNTA3ZTkzOWU4MWQxZGMxYzVjYjk4OGI1OGMzMTBjOWZkZDk1MjRkOTM3MjBiNDU1NDFjODNlZTg4NDExOTFkYTdjZWQ4NmUzMzEyZDQzNjIzYzFkNjNlNzQ5ODlhYmE0YWZmZDFlZTQxMDQwNzdlOGMzMWUyMGU2YmVkYjc2MGMxMzU5M2U2OWYxNWJlODVjMjdkNjhjZDA5Y2NiOGM0MTgzNjA4OTE3YzVjM2Q0MDlmYWMzOWZlZmVlODJmNzI5MmQzNmYwZDIzZTA1NTkxM2Y0NWE1MmI4NWRkOGEyMDUyZTllMTI5YmI0ZCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogemVyby1sZW5ndGggcgorcmVhZF9yb3VuZF90d29fc3J2OiI0MTA0NjlkNTRlZTg1ZTkwY2UzZjEyNDY3NDJkZTUwN2U5MzllODFkMWRjMWM1Y2I5ODhiNThjMzEwYzlmZGQ5NTI0ZDkzNzIwYjQ1NTQxYzgzZWU4ODQxMTkxZGE3Y2VkODZlMzMxMmQ0MzYyM2MxZDYzZTc0OTg5YWJhNGFmZmQxZWU0MTA0MDc3ZThjMzFlMjBlNmJlZGI3NjBjMTM1OTNlNjlmMTViZTg1YzI3ZDY4Y2QwOWNjYjhjNDE4MzYwODkxN2M1YzNkNDA5ZmFjMzlmZWZlZTgyZjcyOTJkMzZmMGQyM2UwNTU5MTNmNDVhNTJiODVkZDhhMjA1MmU5ZTEyOWJiNGQwMCI6TUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogbm8gZGF0YSBmb3IgcgorcmVhZF9yb3VuZF90d29fc3J2OiI0MTA0NjlkNTRlZTg1ZTkwY2UzZjEyNDY3NDJkZTUwN2U5MzllODFkMWRjMWM1Y2I5ODhiNThjMzEwYzlmZGQ5NTI0ZDkzNzIwYjQ1NTQxYzgzZWU4ODQxMTkxZGE3Y2VkODZlMzMxMmQ0MzYyM2MxZDYzZTc0OTg5YWJhNGFmZmQxZWU0MTA0MDc3ZThjMzFlMjBlNmJlZGI3NjBjMTM1OTNlNjlmMTViZTg1YzI3ZDY4Y2QwOWNjYjhjNDE4MzYwODkxN2M1YzNkNDA5ZmFjMzlmZWZlZTgyZjcyOTJkMzZmMGQyM2UwNTU5MTNmNDVhNTJiODVkZDhhMjA1MmU5ZTEyOWJiNGQyMCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogY29ycnVwdGVkIHIKK3JlYWRfcm91bmRfdHdvX3NydjoiNDEwNDY5ZDU0ZWU4NWU5MGNlM2YxMjQ2NzQyZGU1MDdlOTM5ZTgxZDFkYzFjNWNiOTg4YjU4YzMxMGM5ZmRkOTUyNGQ5MzcyMGI0NTU0MWM4M2VlODg0MTE5MWRhN2NlZDg2ZTMzMTJkNDM2MjNjMWQ2M2U3NDk4OWFiYTRhZmZkMWVlNDEwNDA3N2U4YzMxZTIwZTZiZWRiNzYwYzEzNTkzZTY5ZjE1YmU4NWMyN2Q2OGNkMDljY2I4YzQxODM2MDg5MTdjNWMzZDQwOWZhYzM5ZmVmZWU4MmY3MjkyZDM2ZjBkMjNlMDU1OTEzZjQ1YTUyYjg1ZGQ4YTIwNTJlOWUxMjliYjRkMjAwZjAxMWYxOTQ4MzUzNWE2ZTg5YTU4MGM5YjAwMDNiYWYyMTQ2MmVjZTkxYTgyY2MzOGRiZGNhZTYwZDljNTRkIjpNQkVEVExTX0VSUl9FQ1BfVkVSSUZZX0ZBSUxFRAorCitFQ0pQQUtFIHJvdW5kIHR3byBzZXJ2ZXI6IFggbm90IG9uIGN1cnZlCityZWFkX3JvdW5kX3R3b19zcnY6IjQxMDQ2OWQ1NGVlODVlOTBjZTNmMTI0Njc0MmRlNTA3ZTkzOWU4MWQxZGMxYzVjYjk4OGI1OGMzMTBjOWZkZDk1MjRkOTM3MjBiNDU1NDFjODNlZTg4NDExOTFkYTdjZWQ4NmUzMzEyZDQzNjIzYzFkNjNlNzQ5ODlhYmE0YWZmZDFlZjQxMDQwNzdlOGMzMWUyMGU2YmVkYjc2MGMxMzU5M2U2OWYxNWJlODVjMjdkNjhjZDA5Y2NiOGM0MTgzNjA4OTE3YzVjM2Q0MDlmYWMzOWZlZmVlODJmNzI5MmQzNmYwZDIzZTA1NTkxM2Y0NWE1MmI4NWRkOGEyMDUyZTllMTI5YmI0ZDIwMGYwMTFmMTk0ODM1MzVhNmU4OWE1ODBjOWIwMDAzYmFmMjE0NjJlY2U5MWE4MmNjMzhkYmRjYWU2MGQ5YzU0YyI6TUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNqcGFrZS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2pwYWtlLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExY2Y4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNqcGFrZS5mdW5jdGlvbgpAQCAtMCwwICsxLDE5MCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9lY2pwYWtlLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEKSAmJiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3RfeDFbXSA9IHsKKyAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLAorICAgIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsCisgICAgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwgMHgyMQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWNqcGFrZV90ZXN0X3gyW10gPSB7CisgICAgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywKKyAgICAweDZkLCAweDZlLCAweDZmLCAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAorICAgIDB4NzksIDB4N2EsIDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4N2YsIDB4ODEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF94M1tdID0geworICAgIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsCisgICAgMHg2ZCwgMHg2ZSwgMHg2ZiwgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwKKyAgICAweDc5LCAweDdhLCAweDdiLCAweDdjLCAweDdkLCAweDdlLCAweDdmLCAweDgxCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3RfeDRbXSA9IHsKKyAgICAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LCAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLAorICAgIDB4Y2QsIDB4Y2UsIDB4Y2YsIDB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsCisgICAgMHhkOSwgMHhkYSwgMHhkYiwgMHhkYywgMHhkZCwgMHhkZSwgMHhkZiwgMHhlMQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWNqcGFrZV90ZXN0X1gxW10gPSB7CisgICAgMHgwNCwgMHhhYywgMHhjZiwgMHgwMSwgMHgwNiwgMHhlZiwgMHg4NSwgMHg4ZiwgMHhhMiwgMHhkOSwgMHgxOSwgMHgzMywKKyAgICAweDEzLCAweDQ2LCAweDgwLCAweDVhLCAweDc4LCAweGI1LCAweDhiLCAweGJhLCAweGQwLCAweGI4LCAweDQ0LCAweGU1LAorICAgIDB4YzcsIDB4ODksIDB4MjgsIDB4NzksIDB4MTQsIDB4NjEsIDB4ODcsIDB4ZGQsIDB4MjYsIDB4NjYsIDB4YWQsIDB4YTcsCisgICAgMHg4MSwgMHhiYiwgMHg3ZiwgMHgxMSwgMHgxMywgMHg3MiwgMHgyNSwgMHgxYSwgMHg4OSwgMHgxMCwgMHg2MiwgMHgxZiwKKyAgICAweDYzLCAweDRkLCAweGYxLCAweDI4LCAweGFjLCAweDQ4LCAweGUzLCAweDgxLCAweGZkLCAweDZlLCAweGY5LCAweDA2LAorICAgIDB4MDcsIDB4MzEsIDB4ZjYsIDB4OTQsIDB4YTQKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF9YMltdID0geworICAgIDB4MDQsIDB4N2UsIDB4YTYsIDB4ZTMsIDB4YTQsIDB4NDgsIDB4NzAsIDB4MzcsIDB4YTksIDB4ZTAsIDB4ZGIsIDB4ZDcsCisgICAgMHg5MiwgMHg2MiwgMHhiMiwgMHhjYywgMHgyNywgMHgzZSwgMHg3NywgMHg5OSwgMHgzMCwgMHhmYywgMHgxOCwgMHg0MCwKKyAgICAweDlhLCAweGM1LCAweDM2LCAweDFjLCAweDVmLCAweGU2LCAweDY5LCAweGQ3LCAweDAyLCAweGUxLCAweDQ3LCAweDc5LAorICAgIDB4MGEsIDB4ZWIsIDB4NGMsIDB4ZTcsIDB4ZmQsIDB4NjUsIDB4NzUsIDB4YWIsIDB4MGYsIDB4NmMsIDB4N2YsIDB4ZDEsCisgICAgMHhjMywgMHgzNSwgMHg5MywgMHg5YSwgMHhhOCwgMHg2MywgMHhiYSwgMHgzNywgMHhlYywgMHg5MSwgMHhiNywgMHhlMywKKyAgICAweDJiLCAweGIwLCAweDEzLCAweGJiLCAweDJiCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3RfWDNbXSA9IHsKKyAgICAweDA0LCAweDdlLCAweGE2LCAweGUzLCAweGE0LCAweDQ4LCAweDcwLCAweDM3LCAweGE5LCAweGUwLCAweGRiLCAweGQ3LAorICAgIDB4OTIsIDB4NjIsIDB4YjIsIDB4Y2MsIDB4MjcsIDB4M2UsIDB4NzcsIDB4OTksIDB4MzAsIDB4ZmMsIDB4MTgsIDB4NDAsCisgICAgMHg5YSwgMHhjNSwgMHgzNiwgMHgxYywgMHg1ZiwgMHhlNiwgMHg2OSwgMHhkNywgMHgwMiwgMHhlMSwgMHg0NywgMHg3OSwKKyAgICAweDBhLCAweGViLCAweDRjLCAweGU3LCAweGZkLCAweDY1LCAweDc1LCAweGFiLCAweDBmLCAweDZjLCAweDdmLCAweGQxLAorICAgIDB4YzMsIDB4MzUsIDB4OTMsIDB4OWEsIDB4YTgsIDB4NjMsIDB4YmEsIDB4MzcsIDB4ZWMsIDB4OTEsIDB4YjcsIDB4ZTMsCisgICAgMHgyYiwgMHhiMCwgMHgxMywgMHhiYiwgMHgyYgorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWNqcGFrZV90ZXN0X1g0W10gPSB7CisgICAgMHgwNCwgMHgxOSwgMHgwYSwgMHgwNywgMHg3MCwgMHgwZiwgMHhmYSwgMHg0YiwgMHhlNiwgMHhhZSwgMHgxZCwgMHg3OSwKKyAgICAweGVlLCAweDBmLCAweDA2LCAweGFlLCAweGI1LCAweDQ0LCAweGNkLCAweDVhLCAweGRkLCAweGFhLCAweGJlLCAweGRmLAorICAgIDB4NzAsIDB4ZjgsIDB4NjIsIDB4MzMsIDB4MjEsIDB4MzMsIDB4MmMsIDB4NTQsIDB4ZjMsIDB4NTUsIDB4ZjAsIDB4ZmIsCisgICAgMHhmZSwgMHhjNywgMHg4MywgMHhlZCwgMHgzNSwgMHg5ZSwgMHg1ZCwgMHgwYiwgMHhmNywgMHgzNywgMHg3YSwgMHgwZiwKKyAgICAweGM0LCAweGVhLCAweDdhLCAweGNlLCAweDQ3LCAweDNjLCAweDljLCAweDExLCAweDJiLCAweDQxLCAweGNjLCAweGQ0LAorICAgIDB4MWEsIDB4YzUsIDB4NmEsIDB4NTYsIDB4MTIKK307CisKKy8qIExvYWQgbXkgcHJpdmF0ZSBhbmQgcHVibGljIGtleXMsIGFuZCBwZWVyJ3MgcHVibGljIGtleXMgKi8KK3N0YXRpYyBpbnQgZWNqcGFrZV90ZXN0X2xvYWQoIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp4bTEsIHNpemVfdCBsZW5feG0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqeG0yLCBzaXplX3QgbGVuX3htMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKlhtMSwgc2l6ZV90IGxlbl9YbTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpYbTIsIHNpemVfdCBsZW5fWG0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqWHAxLCBzaXplX3QgbGVuX1hwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKlhwMiwgc2l6ZV90IGxlbl9YcDIgKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmY3R4LT54bTEsIHhtMSwgbGVuX3htMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJmN0eC0+eG0yLCB4bTIsIGxlbl94bTIgKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX2JpbmFyeSggJmN0eC0+Z3JwLAorICAgICAgICAgICAgICAgICAgICAgJmN0eC0+WG0xLCBYbTEsIGxlbl9YbTEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkoICZjdHgtPmdycCwKKyAgICAgICAgICAgICAgICAgICAgICZjdHgtPlhtMiwgWG0yLCBsZW5fWG0yICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfYmluYXJ5KCAmY3R4LT5ncnAsCisgICAgICAgICAgICAgICAgICAgICAmY3R4LT5YcDEsIFhwMSwgbGVuX1hwMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX2JpbmFyeSggJmN0eC0+Z3JwLAorICAgICAgICAgICAgICAgICAgICAgJmN0eC0+WHAyLCBYcDIsIGxlbl9YcDIgKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNkZWZpbmUgQUREX1NJWkUoIHggKSAgIHgsIHNpemVvZiggeCApCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQgJiYgTUJFRFRMU19TSEEyNTZfQyAqLworLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19FQ0pQQUtFX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgZWNqcGFrZV9zZWxmdGVzdCgpCit7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQyAqLwordm9pZCByZWFkX3JvdW5kX29uZSggaW50IHJvbGUsIGNoYXIgKmRhdGEsIGludCByZWZfcmV0ICkKK3sKKyAgICBtYmVkdGxzX2VjanBha2VfY29udGV4dCBjdHg7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBwd1tdID0ge307CisgICAgdW5zaWduZWQgY2hhciAqbXNnOworICAgIHNpemVfdCBsZW47CisKKyAgICBtYmVkdGxzX2VjanBha2VfaW5pdCggJmN0eCApOworCisgICAgbXNnID0gdW5oZXhpZnlfYWxsb2MoIGRhdGEsICZsZW4gKTsKKyAgICBURVNUX0FTU0VSVCggbXNnICE9IE5VTEwgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2Vfc2V0dXAoICZjdHgsIHJvbGUsCisgICAgICAgICAgICAgICAgIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEsIHB3LCAwICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX29uZSggJmN0eCwgbXNnLCBsZW4gKSA9PSByZWZfcmV0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY2pwYWtlX2ZyZWUoICZjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIG1zZyApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MgKi8KK3ZvaWQgcmVhZF9yb3VuZF90d29fY2xpKCBjaGFyICpkYXRhLCBpbnQgcmVmX3JldCApCit7CisgICAgbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgY3R4OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHdbXSA9IHt9OworICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsKKyAgICBzaXplX3QgbGVuOworCisgICAgbWJlZHRsc19lY2pwYWtlX2luaXQoICZjdHggKTsKKworICAgIG1zZyA9IHVuaGV4aWZ5X2FsbG9jKCBkYXRhLCAmbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIG1zZyAhPSBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3NldHVwKCAmY3R4LCBNQkVEVExTX0VDSlBBS0VfQ0xJRU5ULAorICAgICAgICAgICAgICAgICBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxLCBwdywgMCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBlY2pwYWtlX3Rlc3RfbG9hZCggJmN0eCwKKyAgICAgICAgICAgICAgICAgQUREX1NJWkUoIGVjanBha2VfdGVzdF94MSApLCBBRERfU0laRSggZWNqcGFrZV90ZXN0X3gyICksCisgICAgICAgICAgICAgICAgIEFERF9TSVpFKCBlY2pwYWtlX3Rlc3RfWDEgKSwgQUREX1NJWkUoIGVjanBha2VfdGVzdF9YMiApLAorICAgICAgICAgICAgICAgICBBRERfU0laRSggZWNqcGFrZV90ZXN0X1gzICksIEFERF9TSVpFKCBlY2pwYWtlX3Rlc3RfWDQgKSApCisgICAgICAgICAgICA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfdHdvKCAmY3R4LCBtc2csIGxlbiApID09IHJlZl9yZXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjanBha2VfZnJlZSggJmN0eCApOworICAgIG1iZWR0bHNfZnJlZSggbXNnICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQyAqLwordm9pZCByZWFkX3JvdW5kX3R3b19zcnYoIGNoYXIgKmRhdGEsIGludCByZWZfcmV0ICkKK3sKKyAgICBtYmVkdGxzX2VjanBha2VfY29udGV4dCBjdHg7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBwd1tdID0ge307CisgICAgdW5zaWduZWQgY2hhciAqbXNnOworICAgIHNpemVfdCBsZW47CisKKyAgICBtYmVkdGxzX2VjanBha2VfaW5pdCggJmN0eCApOworCisgICAgbXNnID0gdW5oZXhpZnlfYWxsb2MoIGRhdGEsICZsZW4gKTsKKyAgICBURVNUX0FTU0VSVCggbXNnICE9IE5VTEwgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2Vfc2V0dXAoICZjdHgsIE1CRURUTFNfRUNKUEFLRV9TRVJWRVIsCisgICAgICAgICAgICAgICAgIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEsIHB3LCAwICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIGVjanBha2VfdGVzdF9sb2FkKCAmY3R4LAorICAgICAgICAgICAgICAgICBBRERfU0laRSggZWNqcGFrZV90ZXN0X3gzICksIEFERF9TSVpFKCBlY2pwYWtlX3Rlc3RfeDQgKSwKKyAgICAgICAgICAgICAgICAgQUREX1NJWkUoIGVjanBha2VfdGVzdF9YMyApLCBBRERfU0laRSggZWNqcGFrZV90ZXN0X1g0ICksCisgICAgICAgICAgICAgICAgIEFERF9TSVpFKCBlY2pwYWtlX3Rlc3RfWDEgKSwgQUREX1NJWkUoIGVjanBha2VfdGVzdF9YMiApICkKKyAgICAgICAgICAgID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF90d28oICZjdHgsIG1zZywgbGVuICkgPT0gcmVmX3JldCApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNqcGFrZV9mcmVlKCAmY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBtc2cgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNwLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNwLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4NThiNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY3AuZGF0YQpAQCAtMCwwICsxLDMzOCBAQAorRUNQIGN1cnZlIGluZm8gIzEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvOk1CRURUTFNfRUNQX0RQX0JQNTEyUjE6Mjg6NTEyOiJicmFpbnBvb2xQNTEycjEiCisKK0VDUCBjdXJ2ZSBpbmZvICMyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY3VydmVfaW5mbzpNQkVEVExTX0VDUF9EUF9CUDM4NFIxOjI3OjM4NDoiYnJhaW5wb29sUDM4NHIxIgorCitFQ1AgY3VydmUgaW5mbyAjMworZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2N1cnZlX2luZm86TUJFRFRMU19FQ1BfRFBfQlAyNTZSMToyNjoyNTY6ImJyYWlucG9vbFAyNTZyMSIKKworRUNQIGN1cnZlIGluZm8gIzQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2N1cnZlX2luZm86TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOjI1OjUyMToic2VjcDUyMXIxIgorCitFQ1AgY3VydmUgaW5mbyAjNQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY3VydmVfaW5mbzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjE6MjQ6Mzg0OiJzZWNwMzg0cjEiCisKK0VDUCBjdXJ2ZSBpbmZvICM2CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToyMzoyNTY6InNlY3AyNTZyMSIKKworRUNQIGN1cnZlIGluZm8gIzcKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2N1cnZlX2luZm86TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxOjIxOjIyNDoic2VjcDIyNHIxIgorCitFQ1AgY3VydmUgaW5mbyAjOAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY3VydmVfaW5mbzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6MTk6MTkyOiJzZWNwMTkycjEiCisKK0VDUCBjaGVjayBwdWJrZXkgTW9udGdvbWVyeSAjMSAodG9vIGJpZykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECitlY3BfY2hlY2tfcHViX214Ok1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTk6IjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6TUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCisKK0VDUCBjaGVjayBwdWJrZXkgTW9udGdvbWVyeSAjMiAoYmlnZ2VzdCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECitlY3BfY2hlY2tfcHViX214Ok1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTk6IkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiOjAKKworRUNQIHdyaXRlIGJpbmFyeSAjMCAoemVybywgYmFkIGZvcm1hdCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF93cml0ZV9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwMSI6IjAxIjoiMDAiOkVDUF9QRl9VTktOT1dOOiIwMCI6MTpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNQIHdyaXRlIGJpbmFyeSAjMSAoemVybywgdW5jb21wcmVzc2VkLCBidWZmZXIganVzdCBmaXRzKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX3dyaXRlX2JpbmFyeTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjAxIjoiMDEiOiIwMCI6TUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VEOiIwMCI6MTowCisKK0VDUCB3cml0ZSBiaW5hcnkgIzIgKHplcm8sIGJ1ZmZlciB0b28gc21hbGwpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3Bfd3JpdGVfYmluYXJ5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDEiOiIwMSI6IjAwIjpNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQ6IjAwIjowOk1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMCisKK0VDUCB3cml0ZSBiaW5hcnkgIzMgKG5vbi16ZXJvLCB1bmNvbXByZXNzZWQsIGJ1ZmZlciBqdXN0IGZpdHMpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3Bfd3JpdGVfYmluYXJ5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiNDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzIjoiNmNlZWQ0ZDdjYmE0ODJlMjg4NjY5ZWUxYjY0MTU2MjZkNmYzNGQyODUwMWUwNjBjIjoiMDEiOk1CRURUTFNfRUNQX1BGX1VOQ09NUFJFU1NFRDoiMDQ0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzM2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOjQ5OjAKKworRUNQIHdyaXRlIGJpbmFyeSAjNCAobm9uLXplcm8sIHVuY29tcHJlc3NlZCwgYnVmZmVyIHRvbyBzbWFsbCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF93cml0ZV9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOiI2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiIwMSI6TUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VEOiIwNDQ4ZDgwODJhM2ExZTMxMTJiYzAzYThlZjJmNmQ0MGQwYTc3YTZmOGUwMGNjOTkzMzZjZWVkNGQ3Y2JhNDgyZTI4ODY2OWVlMWI2NDE1NjI2ZDZmMzRkMjg1MDFlMDYwYyI6NDg6TUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwKKworRUNQIHdyaXRlIGJpbmFyeSAjNSAoemVybywgY29tcHJlc3NlZCwgYnVmZmVyIGp1c3QgZml0cykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF93cml0ZV9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwMSI6IjAxIjoiMDAiOk1CRURUTFNfRUNQX1BGX0NPTVBSRVNTRUQ6IjAwIjoxOjAKKworRUNQIHdyaXRlIGJpbmFyeSAjNiAoemVybywgYnVmZmVyIHRvbyBzbWFsbCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF93cml0ZV9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwMSI6IjAxIjoiMDAiOk1CRURUTFNfRUNQX1BGX0NPTVBSRVNTRUQ6IjAwIjowOk1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMCisKK0VDUCB3cml0ZSBiaW5hcnkgIzcgKGV2ZW4sIGNvbXByZXNzZWQsIGJ1ZmZlciBqdXN0IGZpdHMpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3Bfd3JpdGVfYmluYXJ5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiNDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzIjoiNmNlZWQ0ZDdjYmE0ODJlMjg4NjY5ZWUxYjY0MTU2MjZkNmYzNGQyODUwMWUwNjBjIjoiMDEiOk1CRURUTFNfRUNQX1BGX0NPTVBSRVNTRUQ6IjAyNDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzIjoyNTowCisKK0VDUCB3cml0ZSBiaW5hcnkgIzggKGV2ZW4sIGNvbXByZXNzZWQsIGJ1ZmZlciB0b28gc21hbGwpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3Bfd3JpdGVfYmluYXJ5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiNDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzIjoiNmNlZWQ0ZDdjYmE0ODJlMjg4NjY5ZWUxYjY0MTU2MjZkNmYzNGQyODUwMWUwNjBjIjoiMDEiOk1CRURUTFNfRUNQX1BGX0NPTVBSRVNTRUQ6IjAyNDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzIjoyNDpNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTAorCitFQ1Agd3JpdGUgYmluYXJ5ICM5IChvZGQsIGNvbXByZXNzZWQsIGJ1ZmZlciBqdXN0IGZpdHMpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3Bfd3JpdGVfYmluYXJ5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiNDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzIjoiOTMxMTJiMjgzNDViN2QxZDc3OTk2MTFlNDliZWE5ZDgyOTBjYjJkN2FmZTFmOWYzIjoiMDEiOk1CRURUTFNfRUNQX1BGX0NPTVBSRVNTRUQ6IjAzNDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzIjoyNTowCisKK0VDUCByZWFkIGJpbmFyeSAjMSAoemVybywgaW52YWxpZCBpbGVuKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX3JlYWRfYmluYXJ5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDAwMCI6IjAxIjoiMDEiOiIwMCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDUCByZWFkIGJpbmFyeSAjMiAoemVybywgaW52YWxpZCBmaXJzdCBieXRlKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX3JlYWRfYmluYXJ5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDEiOiIwMSI6IjAxIjoiMDAiOk1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFCisKK0VDUCByZWFkIGJpbmFyeSAjMyAoemVybywgT0spCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3BfcmVhZF9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwMCI6IjAxIjoiMDEiOiIwMCI6MAorCitFQ1AgcmVhZCBiaW5hcnkgIzQgKG5vbi16ZXJvLCBpbnZhbGlkIGlsZW4pCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3BfcmVhZF9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwNDAwMTEyMiI6IjAxIjoiMDEiOiIwMCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDUCByZWFkIGJpbmFyeSAjNSAobm9uLXplcm8sIGludmFsaWQgZmlyc3QgYnl0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF9yZWFkX2JpbmFyeTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjA1NDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzNmNlZWQ0ZDdjYmE0ODJlMjg4NjY5ZWUxYjY0MTU2MjZkNmYzNGQyODUwMWUwNjBjIjoiNDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzIjoiNmNlZWQ0ZDdjYmE0ODJlMjg4NjY5ZWUxYjY0MTU2MjZkNmYzNGQyODUwMWUwNjBjIjoiMDEiOk1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFCisKK0VDUCByZWFkIGJpbmFyeSAjNiAobm9uLXplcm8sIE9LKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX3JlYWRfYmluYXJ5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDQ0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzM2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiI0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOiI2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiIwMSI6MAorCitFQ1AgdGxzIHJlYWQgcG9pbnQgIzEgKHplcm8sIGludmFsaWQgbGVuZ3RoIGJ5dGUpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECittYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludDpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjAyMDAiOiIwMSI6IjAxIjoiMDAiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ1AgdGxzIHJlYWQgcG9pbnQgIzIgKHplcm8sIE9LKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorbWJlZHRsc19lY3BfdGxzX3JlYWRfcG9pbnQ6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwMTAwIjoiMDEiOiIwMSI6IjAwIjowCisKK0VDUCB0bHMgcmVhZCBwb2ludCAjMyAobm9uLXplcm8sIGludmFsaWQgbGVuZ3RoIGJ5dGUpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECittYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludDpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjMwMDQ0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzM2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiI0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOiI2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiIwMSI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDUCB0bHMgcmVhZCBwb2ludCAjNCAobm9uLXplcm8sIE9LKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorbWJlZHRsc19lY3BfdGxzX3JlYWRfcG9pbnQ6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIzMTA0NDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzNmNlZWQ0ZDdjYmE0ODJlMjg4NjY5ZWUxYjY0MTU2MjZkNmYzNGQyODUwMWUwNjBjIjoiNDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzIjoiNmNlZWQ0ZDdjYmE0ODJlMjg4NjY5ZWUxYjY0MTU2MjZkNmYzNGQyODUwMWUwNjBjIjoiMDEiOjAKKworRUNQIHRscyB3cml0ZS1yZWFkIHBvaW50ICMxCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3BfdGxzX3dyaXRlX3JlYWRfcG9pbnQ6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxCisKK0VDUCB0bHMgd3JpdGUtcmVhZCBwb2ludCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorZWNwX3Rsc193cml0ZV9yZWFkX3BvaW50Ok1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMQorCitFQ1AgdGxzIHJlYWQgZ3JvdXAgIzEgKHJlY29yZCB0b28gc2hvcnQpCittYmVkdGxzX2VjcF90bHNfcmVhZF9ncm91cDoiMDMxMyI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBOjAKKworRUNQIHRscyByZWFkIGdyb3VwICMyIChiYWQgY3VydmVfdHlwZSkKK21iZWR0bHNfZWNwX3Rsc19yZWFkX2dyb3VwOiIwMTAwMTMiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQTowCisKK0VDUCB0bHMgcmVhZCBncm91cCAjMyAodW5rbm93biBjdXJ2ZSkKK21iZWR0bHNfZWNwX3Rsc19yZWFkX2dyb3VwOiIwMzAwMTAiOk1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFOjAKKworRUNQIHRscyByZWFkIGdyb3VwICM0IChPSywgYnVmZmVyIGp1c3QgZml0cykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX3Rsc19yZWFkX2dyb3VwOiIwMzAwMTciOjA6MjU2CisKK0VDUCB0bHMgcmVhZCBncm91cCAjNSAoT0ssIGJ1ZmZlciBjb250aW51ZXMpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECittYmVkdGxzX2VjcF90bHNfcmVhZF9ncm91cDoiMDMwMDE4MDAwMCI6MDozODQKKworRUNQIHRscyB3cml0ZS1yZWFkIGdyb3VwICMxCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3BfdGxzX3dyaXRlX3JlYWRfZ3JvdXA6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxCisKK0VDUCB0bHMgd3JpdGUtcmVhZCBncm91cCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorZWNwX3Rsc193cml0ZV9yZWFkX2dyb3VwOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMQorCitFQ1AgY2hlY2sgcHJpdmtleSAjMSAoc2hvcnQgd2VpZXJzdHJhc3MsIHRvbyBzbWFsbCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwMCI6TUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCisKK0VDUCBjaGVjayBwcml2a2V5ICMyIChzaG9ydCB3ZWllcnN0cmFzcywgc21hbGxlc3QpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wcml2a2V5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDEiOjAKKworRUNQIGNoZWNrIHByaXZrZXkgIzMgKHNob3J0IHdlaWVyc3RyYXNzLCBiaWdnZXN0KQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjk5REVGODM2MTQ2QkM5QjFCNEQyMjgzMCI6MAorCitFQ1AgY2hlY2sgcHJpdmtleSAjNCAoc2hvcnQgd2VpZXJzdHJhc3MsIHRvbyBiaWcpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wcml2a2V5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGOTlERUY4MzYxNDZCQzlCMUI0RDIyODMxIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNQIGNoZWNrIHByaXZrZXkgIzUgKG1vbnRnb21lcnksIHRvbyBiaWcpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleTpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5OiJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNQIGNoZWNrIHByaXZrZXkgIzYgKG1vbnRnb21lcnksIG5vdCBiaWcgZW5vdWdoKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKK21iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXk6TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOToiM0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMCI6TUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCisKK0VDUCBjaGVjayBwcml2a2V5ICM3IChtb250Z29tZXJ5LCBtc2IgT0spCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleTpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5OiI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0VDUCBjaGVjayBwcml2a2V5ICM4IChtb250Z29tZXJ5LCBiaXQgMCBzZXQpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleTpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5OiI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNQIGNoZWNrIHByaXZrZXkgIzkgKG1vbnRnb21lcnksIGJpdCAxIHNldCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wcml2a2V5Ok1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTk6IjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ1AgY2hlY2sgcHJpdmtleSAjMTAgKG1vbnRnb21lcnksIGJpdCAyIHNldCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wcml2a2V5Ok1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTk6IjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ1AgY2hlY2sgcHJpdmtleSAjMTEgKG1vbnRnb21lcnksIE9LKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKK21iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXk6TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOToiN0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGOCI6MAorCitFQ1AgY2hlY2sgcHVibGljLXByaXZhdGUgIzEgKE9LKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY2hlY2tfcHViX3ByaXY6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiIzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkyIjoiNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZiI6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiIwMGYxMmExMzIwNzYwMjcwYTgzY2JmZmQ1M2Y2MDMxZWY3NmE1ZDg2YzhhMjA0ZjJjMzBjYTllYmY1MWYwZjBlYTciOiIzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkyIjoiNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZiI6MAorCitFQ1AgY2hlY2sgcHVibGljLXByaXZhdGUgIzIgKGdyb3VwIG5vbmUpCittYmVkdGxzX2VjcF9jaGVja19wdWJfcHJpdjpNQkVEVExTX0VDUF9EUF9OT05FOiIzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkyIjoiNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZiI6TUJFRFRMU19FQ1BfRFBfTk9ORToiMDBmMTJhMTMyMDc2MDI3MGE4M2NiZmZkNTNmNjAzMWVmNzZhNWQ4NmM4YTIwNGYyYzMwY2E5ZWJmNTFmMGYwZWE3IjoiMzdjYzU2ZDk3NjA5MWU1YTcyM2VjNzU5MmRmZjIwNmVlZTdjZjkwNjkxNzRkMGFkMTRiNWY3NjgyMjU5NjI5MiI6IjRlZTUwMGQ4MjMxMWZmZWEyZmQyMzQ1ZDVkMTZiZDhhODhjMjZiNzcwZDU1Y2Q4YTJhMGVmYTAxYzhiNGVkZmYiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ1AgY2hlY2sgcHVibGljLXByaXZhdGUgIzMgKGdyb3VwIG1pc21hdGNoKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY2hlY2tfcHViX3ByaXY6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiIzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkyIjoiNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZiI6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiIwMGYxMmExMzIwNzYwMjcwYTgzY2JmZmQ1M2Y2MDMxZWY3NmE1ZDg2YzhhMjA0ZjJjMzBjYTllYmY1MWYwZjBlYTciOiIzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkyIjoiNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDUCBjaGVjayBwdWJsaWMtcHJpdmF0ZSAjNCAoUXggbWlzbWF0Y2gpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wdWJfcHJpdjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IjM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTMiOiI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZmIjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IjAwZjEyYTEzMjA3NjAyNzBhODNjYmZmZDUzZjYwMzFlZjc2YTVkODZjOGEyMDRmMmMzMGNhOWViZjUxZjBmMGVhNyI6IjM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTIiOiI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZmIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNQIGNoZWNrIHB1YmxpYy1wcml2YXRlICM1IChReSBtaXNtYXRjaCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2NoZWNrX3B1Yl9wcml2Ok1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiMzdjYzU2ZDk3NjA5MWU1YTcyM2VjNzU5MmRmZjIwNmVlZTdjZjkwNjkxNzRkMGFkMTRiNWY3NjgyMjU5NjI5MiI6IjRlZTUwMGQ4MjMxMWZmZWEyZmQyMzQ1ZDVkMTZiZDhhODhjMjZiNzcwZDU1Y2Q4YTJhMGVmYTAxYzhiNGVkZmUiOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiMDBmMTJhMTMyMDc2MDI3MGE4M2NiZmZkNTNmNjAzMWVmNzZhNWQ4NmM4YTIwNGYyYzMwY2E5ZWJmNTFmMGYwZWE3IjoiMzdjYzU2ZDk3NjA5MWU1YTcyM2VjNzU5MmRmZjIwNmVlZTdjZjkwNjkxNzRkMGFkMTRiNWY3NjgyMjU5NjI5MiI6IjRlZTUwMGQ4MjMxMWZmZWEyZmQyMzQ1ZDVkMTZiZDhhODhjMjZiNzcwZDU1Y2Q4YTJhMGVmYTAxYzhiNGVkZmYiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ1AgY2hlY2sgcHVibGljLXByaXZhdGUgIzYgKHdyb25nIFF4KQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY2hlY2tfcHViX3ByaXY6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiIzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkzIjoiNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZiI6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiIwMGYxMmExMzIwNzYwMjcwYTgzY2JmZmQ1M2Y2MDMxZWY3NmE1ZDg2YzhhMjA0ZjJjMzBjYTllYmY1MWYwZjBlYTciOiIzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkzIjoiNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDUCBjaGVjayBwdWJsaWMtcHJpdmF0ZSAjNyAod3JvbmcgUXkpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wdWJfcHJpdjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IjM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTIiOiI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZlIjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IjAwZjEyYTEzMjA3NjAyNzBhODNjYmZmZDUzZjYwMzFlZjc2YTVkODZjOGEyMDRmMmMzMGNhOWViZjUxZjBmMGVhNyI6IjM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTIiOiI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZlIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNQIGdlbiBrZXlwYWlyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECittYmVkdGxzX2VjcF9nZW5fa2V5cGFpcjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjEKKworRUNQIGdlbiBrZXlwYWlyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorbWJlZHRsc19lY3BfZ2VuX2tleXBhaXI6TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOQorCitFQ1AgZ2VuIGtleXBhaXIgd3JhcHBlcgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorbWJlZHRsc19lY3BfZ2VuX2tleTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjEKKworRUNQIG1vZCBwMTkyIHNtYWxsIChtb3JlIHRoYW4gMTkyIGJpdHMsIGxlc3MgbGltYnMgdGhhbiAyICogMTkyIGJpdHMpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3BfZmFzdF9tb2Q6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwMTAwMDAwMDAwMDAwMTAzMDEwMDAwMDAwMDAwMDEwMjAxMDAwMDAwMDAwMDAxMDEwMTAwMDAwMDAwMDAwMTAwIgorCitFQ1AgbW9kIHAxOTIgcmVhZGFibGUKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF9mYXN0X21vZDpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjAxMDAwMDAwMDAwMDAxMDUwMTAwMDAwMDAwMDAwMTA0MDEwMDAwMDAwMDAwMDEwMzAxMDAwMDAwMDAwMDAxMDIwMTAwMDAwMDAwMDAwMTAxMDEwMDAwMDAwMDAwMDEwMCIKKworRUNQIG1vZCBwMTkyIHJlYWRhYmxlIHdpdGggY2FycnkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF9mYXN0X21vZDpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IkZGMDAwMDAwMDAwMTA1MDBGRjAwMDAwMDAwMDEwNDAwRkYwMDAwMDAwMDAxMDMwMEZGMDAwMDAwMDAwMTAyMDBGRjAwMDAwMDAwMDEwMTAwRkYwMDAwMDAwMDAxMDAwMCIKKworRUNQIG1vZCBwMTkyIHJhbmRvbQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX2Zhc3RfbW9kOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMzZDRjk2QjQ1RDcwNkEwOTU0RDg5RTUyQ0U1RjM4NTE3QTIyNzBFMDE3NTg0OUI2RjM3NDAxNTFEMjM4Q0NBQkVGOTIxNDM3RTQ3NTg4MUQ4M0JCNjlFNEFBMjU4RUJEIgorCitFQ1AgbW9kIHAxOTIgKGZyb20gYSBwYXN0IGZhaWx1cmUgY2FzZSkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF9mYXN0X21vZDpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjFBQzJENkY5NkEyQTQyNUU5REQxNzc2REQ4MzY4RDRCQkM4NkJGNDk2NEU3OUZFQTcxMzU4M0JGOTQ4QkJFRkYwOTM5Rjk2RkIxOUVDNDhDNTg1QkRBNkEyRDM1Qzc1MCIKKworRUNQIG1vZCBwMjI0IHJlYWRhYmxlIHdpdGhvdXQgY2FycnkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKK2VjcF9mYXN0X21vZDpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjE6IjAwMDAwMDBEMDAwMDAwMEMwMDAwMDAwQjAwMDAwMDBBMDAwMDAwMDkwMDAwMDAwODAwMDAwMDA3MDAwMEZGMDYwMDAwRkYwNTAwMDBGRjA0MDAwMEZGMDMwMDBGRjAwMjAwMDBGRjAxMDAwMEZGMDAiCisKK0VDUCBtb2QgcDIyNCByZWFkYWJsZSB3aXRoIG5lZ2F0aXZlIGNhcnJ5CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVECitlY3BfZmFzdF9tb2Q6TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxOiIwMDAwMDAwRDAwMDAwMDBDMDAwMDAwMEIwMDAwMDAwQTAwMDAwMDA5MDAwMDAwMDgwMDAwMDAwNzAwMDAwMDA2MDAwMDAwMDUwMDAwMDAwNDAwMDAwMDAzMDAwMDAwMDIwMDAwMDAwMTAwMDAwMDAwIgorCitFQ1AgbW9kIHAyMjQgcmVhZGFibGUgd2l0aCBwb3NpdGl2ZSBjYXJyeQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorZWNwX2Zhc3RfbW9kOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiMDAwMDAwMEQwMDAwMDAwQzAwMDAwMDBCRkZGRkZGMEFGRkZGRkYwOUZGRkZGRjA4RkZGRkZGMDcwMDAwRkYwNjAwMDBGRjA1MDAwMEZGMDQwMDAwRkYwMzAwMEZGMDAyMDAwMEZGMDEwMDAwRkYwMCIKKworRUNQIG1vZCBwMjI0IHJlYWRhYmxlIHdpdGggZmluYWwgbmVnYXRpdmUgY2FycnkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKK2VjcF9mYXN0X21vZDpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjE6IkZGMDAwMDBEMDAwMDAwMEMwMDAwMDAwQjAwMDAwMDBBMDAwMDAwMDkwMDAwMDAwODAwMDAwMDA3MDAwMDAwMDYwMDAwMDAwNTAwMDAwMDA0MDAwMDAwMDMwMDAwMDAwMjAwMDAwMDAxMDAwMDAwMDAiCisKK0VDUCBtb2QgcDUyMSB2ZXJ5IHNtYWxsCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitlY3BfZmFzdF9tb2Q6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOiIwMSIKKworRUNQIG1vZCBwNTIxIHNtYWxsICg1MjIgYml0cykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK2VjcF9mYXN0X21vZDpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6IjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworRUNQIG1vZCBwNTIxIHJlYWRhYmxlCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitlY3BfZmFzdF9tb2Q6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOiIwM0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitFQ1AgbW9kIHA1MjEgcmVhZGFibGUgd2l0aCBjYXJyeQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorZWNwX2Zhc3RfbW9kOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMDNGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKKworRUNQIHRlc3QgdmVjdG9ycyBzZWNwMTkycjEgcmZjIDUxMTQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF90ZXN0X3ZlY3Q6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIzMjNGQTMxNjlEOEU5QzY1OTNGNTk0NzZCQzE0MjAwMEFCNUJFMEUyNDlDNDM0MjYiOiJDRDQ2NDg5RUNGRDZDMTA1RTdCM0QzMjU2NkUyQjEyMkUyNDlBQkFBREQ4NzA2MTIiOiI2ODg4N0I0ODc3REY1MURENERDM0Q2RkQxMUYwQTI2RjhGRDM4NDQzMTc5MTZFOUEiOiI2MzFGOTVCQjRBNjc2MzJDOUM0NzZFRUU5QUI2OTVBQjI0MEEwNDk5MzA3RkNGNjIiOiI1MTlBMTIxNjgwRTAwNDU0NjZCQTIxREYyRUVFNDdGNTk3M0I1MDA1NzdFRjEzRDUiOiJGRjYxM0FCNEQ2NENFRTNBMjA4NzVCREIxMEY5NTNGNkIzMENBMDcyQzYwQUE1N0YiOiJBRDQyMDE4MjYzM0Y4NTI2QkZFOTU0QUNEQTM3NkYwNUU1RkY0RjgzN0Y1NEZFQkUiOiI0MzcxNTQ1RUQ3NzJBNTk3NDFEMEVEQTMyQzY3MTExMkI3RkRERDUxNDYxRkNGMzIiCisKK0VDUCB0ZXN0IHZlY3RvcnMgc2VjcDIyNHIxIHJmYyA1MTE0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVECitlY3BfdGVzdF92ZWN0Ok1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiQjU1OEVCNkMyODhEQTcwN0JCQjRGOEZCQUUyQUI5RTlDQjYyRTNCQzVDNzU3M0UyMkUyNkQzN0YiOiI0OURGRUYzMDlGODE0ODhDMzA0Q0ZGNUFCM0VFNUEyMTU0MzY3REM3ODMzMTUwRTBBNTFGM0VFQiI6IjRGMkI1RUU0NTc2MkM0RjY1NEMxQTBDNjdGNTRDRjg4QjAxNkI1MUJDRTNEN0MyMjhENTdBREI0IjoiQUMzQjFBREQzRDk3NzBFNkY2QTcwOEVFOUYzQjhFMEFCM0I0ODBFOUYyN0Y4NUM4OEI1RTZEMTgiOiI2QjNBQzk2QThEMENERTZBNTU5OUJFODAzMkVERjEwQzE2MkQwQThBRDIxOTUwNkRDRDQyQTIwNyI6IkQ0OTFCRTk5QzIxM0E3RDFDQTM3MDZERUJGRTMwNUYzNjFBRkNCQjMzRTI2MDlDOEIxNjE4QUQ1IjoiNTIyNzJGNTBGNDZGNEVEQzkxNTE1NjkwOTJGNDZERjJEOTZFQ0MzQjZEQzE3MTRBNEVBOTQ5RkEiOiI1RjMwQzZBQTM2RERDNDAzQzBBQ0I3MTJCQjg4RjE3NjNDMzA0NkY2RDkxOUJEOUM1MjQzMjJCRiIKKworRUNQIHRlc3QgdmVjdG9ycyBzZWNwMjU2cjEgcmZjIDUxMTQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK2VjcF90ZXN0X3ZlY3Q6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiI4MTQyNjQxNDVGMkY1NkYyRTk2QThFMzM3QTEyODQ5OTNGQUY0MzJBNUFCQ0U1OUU4NjdCNzI5MUQ1MDdBM0FGIjoiMkFGNTAyRjNCRTg5NTJGMkM5QjVBOEQ0MTYwRDA5RTk3MTY1QkU1MEJDNDJBRTRBNUU4RDNCNEJBODNBRUIxNSI6IkVCMEZBRjRDQTk4NkM0RDM4NjgxQTBGOTg3MkQ3OUQ1Njc5NUJENEJGRjZFNkRFM0MwRjUwMTVFQ0U1RUZEODUiOiIyQ0UxNzg4RUMxOTdFMDk2REI5NUEyMDBDQzBBQjI2QTE5Q0U2QkNDQUQ1NjJCOEVFRTFCNTkzNzYxQ0Y3RjQxIjoiQjEyMERFNEFBMzY0OTI3OTUzNDZFOERFNkMyQzg2NDZBRTA2QUFFQTI3OUZBNzc1QjNBQjA3MTVGNkNFNTFCMCI6IjlGMUI3RUVDRTIwRDdCNUVEOEVDNjg1RkEzRjA3MUQ4MzcyNzAyNzA5MkE4NDExMzg1QzM0RERFNTcwOEIyQjYiOiJERDBGNTM5NjIxOUQxRUEzOTMzMTA0MTJEMTlBMDhGMUY1ODExRTlEQzhFQzhFRUE3RjgwRDIxQzgyMEMyNzg4IjoiMDM1N0RDQ0Q0QzgwNEQwRDhEMzNBQTQyQjg0ODgzNEFBNTYwNUY5QUIwRDM3MjM5QTExNUJCQjY0NzkzNkY1MCIKKworRUNQIHRlc3QgdmVjdG9ycyBzZWNwMzg0cjEgcmZjIDUxMTQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK2VjcF90ZXN0X3ZlY3Q6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiJEMjczMzVFQTcxNjY0QUYyNDRERDE0RTlGRDEyNjA3MTVERkQ4QTc5NjU1NzFDNDhENzA5RUU3QTc5NjJBMTU2RDcwNkE5MENCQ0I1REYyOTg2RjA1RkVBREI5Mzc2RjEiOiI3OTMxNDhGMTc4NzYzNEQ1REE0QzZEOTA3NDQxN0QwNUUwNTdBQjYyRjgyMDU0RDEwRUU2QjA0MDNENjI3OTU0N0U2QThFQTlEMUZENzc0MjdEMDE2RkUyN0E4QjhDNjYiOiJDNkM0MTI5NDMzMUQyM0U2RjQ4MEY0RkI0Q0Q0MDUwNEM5NDczOTJFOTRGNEMzRjA2QjhGMzk4QkIyOUU0MjM2OEY3QTY4NTkyM0RFM0I2N0JBQ0VEMjE0QTFBMUQxMjgiOiI1MkQxNzkxRkRCNEI3MEY4OUMwRjAwRDQ1NkMyRjcwMjNCNjEyNTI2MkMzNkE3REYxRjgwMjMxMTIxQ0NFM0QzOUJFNTJFMDBDMTk0QTQxMzJDNEE2Qzc2OEJDRDk0RDIiOiI1Q0Q0MkFCOUM0MUI1MzQ3Rjc0QjhENEVGQjcwOEIzRDVCMzZEQjY1OTE1MzU5QjQ0QUJDMTc2NDdCNkI5OTk5Nzg5RDcyQTg0ODY1QUUyRjIyM0YxMkI1QTFBQkMxMjAiOiJFMTcxNDU4RkVBQTkzOUFBQTNBOEJGQUM0NkI0MDRCRDhGNkQ1QjM0OEMwRkE0RDgwQ0VDQTE2MzU2Q0E5MzMyNDBCREU4NzIzNDE1QThFQ0UwMzVCMEVERjM2NzU1REUiOiI1RUExRkM0QUY3MjU2RDIwNTU5ODFCMTEwNTc1RTBBOENBRTUzMTYwMTM3RDkwNEM1OUQ5MjZFQjFCODQ1NkU0MjdBQThBNDU0MDg4NEMzN0RFMTU5QTU4MDI4QUJDMEUiOiIwQ0M1OUU0QjA0NjQxNEE4MUM4QTNCREZEQ0E5MjUyNkM0ODc2OUREOEQzMTI3Q0FBOTlCMzYzMkQxOTEzOTQyREUzNjJFQUZBQTk2MjM3OTM3NEQ5RjNGMDY2ODQxQ0EiCisKK0VDUCB0ZXN0IHZlY3RvcnMgc2VjcDUyMXIxIHJmYyA1MTE0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitlY3BfdGVzdF92ZWN0Ok1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMDExM0Y4MkRBODI1NzM1RTNEOTcyNzY2ODNCMkI3NDI3N0JBRDI3MzM1RUE3MTY2NEFGMjQzMENDNEYzMzQ1OUI5NjY5RUU3OEIzRkZCOUI4NjgzMDE1RDM0NERDQkZFRjZGQjlBRjRDNkM0NzBCRTI1NDUxNkNEM0MxQTFGQjQ3MzYyIjoiMDFFQkIzNERENzU3MjFBQkY4QURDOURCRUQxNzg4OUNCQjk3NjVEOTBBN0M2MEYyQ0VGMDA3QkIwRjJCMjZFMTQ4ODFGRDQ0NDJFNjg5RDYxQ0IyREQwNDZFRTMwRTNGRkQyMEY5QTQ1QkJERjY0MTNENTgzQTJEQkY1OTkyNEZEMzVDIjoiMDBGNkI2MzJEMTk0QzAzODhFMjJEODQzN0U1NThDNTUyQUUxOTVBREZEMTUzRjkyRDc0OTA4MzUxQjJGOEM0RURBOTRFREIwOTE2RDFCNTNDMDIwQjVFRUNBRUQxQTVGQzM4QTIzM0U0ODMwNTg3QkIyRUUzNDg5QjNCNDJBNUE4NkE0IjoiMDBDRUUzNDgwRDg2NDVBMTdEMjQ5RjI3NzZEMjhCQUU2MTY5NTJEMTc5MUZEQjRCNzBGN0MzMzc4NzMyQUExQjIyOTI4NDQ4QkNEMURDMjQ5NkQ0MzVCMDEwNDgwNjZFQkU0RjcyOTAzQzM2MUIxQTlEQzExOTNEQzJDOUQwODkxQjk2IjoiMDEwRUJGQUZDNkU4NUUwOEQyNEJGRkZDQzFBNDUxMURCMEU2MzRCRUVCMUI2REVDOEM1OTM5QUU0NDc2NjIwMUFGNjIwMDQzMEJBOTdDOEFDNkEwRTlGMDhCMzNDRTdFOUZFRUI1QkE0RUU1RTBEODE1MTBDMjQyOTVCOEEwOEQwMjM1IjoiMDBBNEE2RUMzMDBERjlFMjU3QjAzNzJCNUU3QUJGRUYwOTM0MzY3MTlBNzc4ODdFQkIwQjE4Q0Y4MDk5QjlGNDIxMkI2RTMwQTE0MTlDMThFMDI5RDM2ODYzQ0M5RDQ0OEY0REJBNEQyQTBFNjA3MTFCRTU3MjkxNUZCRDRGRUYyNjk1IjoiMDBDREVBODk2MjFDRkE0NkIxMzJGOUU0Q0ZFMjI2MUNERTJENDM2OEVCNTY1NjYzNEM3Q0M5OEM3QTAwQ0RFNTRFRDE4NjZBMEREM0U2MTI2QzlEMkY4NDVEQUZGODJDRUIxREEwOEY1RDg3NTIxQkIwRUJFQ0E3NzkxMTE2OUMyMENDIjoiMDBGOUE3MTY0MTAyOUI3RkMxQTgwOEFEMDdDRDQ4NjFFODY4NjE0Qjg2NUFGQkVDQUIxRjJCRDREOEI1NUVCQ0I1RTNBNTMxNDNDRUIyQzUxMUIxQUUwQUY1QUM4MjdGNjBGMkZEODcyNTY1QUM1Q0EwQTE2NDAzOEZFOTgwQTdFNEJEIgorCitFQ1AgdGVzdCB2ZWN0b3JzIGJyYWlucG9vbFAyNTZyMSByZmMgNzAyNworZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQKK2VjcF90ZXN0X3ZlY3Q6TUJFRFRMU19FQ1BfRFBfQlAyNTZSMToiODFEQjFFRTEwMDE1MEZGMkVBMzM4RDcwODI3MUJFMzgzMDBDQjU0MjQxRDc5OTUwRjc3QjA2MzAzOTgwNEYxRCI6IjQ0MTA2RTkxM0Y5MkJDMDJBMTcwNUQ5OTUzQTg0MTREQjk1RTFBQUE0OUU4MUQ5RTg1RjkyOUE4RTMxMDBCRTUiOiI4QUI0ODQ2RjExQ0FDQ0I3M0NFNDlDQkREMTIwRjVBOTAwQTY5RkQzMkMyNzIyMjNGNzg5RUYxMEVCMDg5QkRDIjoiNTVFNDBCQzQxRTM3RTNFMkFEMjVDM0M2NjU0NTExRkZBODQ3NEE5MUEwMDMyMDg3NTkzODUyRDNFN0Q3NkJEMyI6IjhEMkQ2ODhDNkNGOTNFMTE2MEFEMDRDQzQ0MjkxMTdEQzJDNDE4MjVFMUU5RkNBMEFEREQzNEU2RjFCMzlGN0IiOiI5OTBDNTc1MjA4MTJCRTUxMjY0MUU0NzAzNDgzMjEwNkJDN0QzRThERDBFNEM3RjExMzZENzAwNjU0N0NFQzZBIjoiODlBRkMzOUQ0MUQzQjMyNzgxNEI4MDk0MEIwNDI1OTBGOTY1NTZFQzkxRTZBRTc5MzlCQ0UzMUYzQTE4QkYyQiI6IjQ5QzI3ODY4RjRFQ0EyMTc5QkZEN0Q1OUIxRTNCRjM0QzFEQkRFNjFBRTEyOTMxNjQ4RjQzRTU5NjMyNTA0REUiCisKK0VDUCB0ZXN0IHZlY3RvcnMgYnJhaW5wb29sUDM4NHIxIHJmYyA3MDI3CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRAorZWNwX3Rlc3RfdmVjdDpNQkVEVExTX0VDUF9EUF9CUDM4NFIxOiIxRTIwRjVFMDQ4QTU4ODZGMUYxNTdDNzRFOTFCREUyQjk4QzhCNTJENThFNTAwM0Q1NzA1M0ZDNEIwQkQ2NUQ2RjE1RUI1RDFFRTE2MTBERjg3MDc5NTE0MzYyN0QwNDIiOiI2OEI2NjVERDkxQzE5NTgwMDY1MENERDM2M0M2MjVGNEU3NDJFODEzNDY2N0I3NjdCMUI0NzY3OTM1ODhGODg1QUI2OThDODUyRDRBNkU3N0EyNTJENjM4MEZDQUYwNjgiOiI1NUJDOTFBMzlDOUVDMDFERUUzNjAxN0I3RDY3M0E5MzEyMzZEMkYxRjVDODM5NDJEMDQ5RTNGQTIwNjA3NDkzRTBEMDM4RkYyRkQzMEMyQUI2N0QxNUM4NUY3RkFBNTkiOiIwMzI2NDBCQzYwMDNDNTkyNjBGNzI1MEMzREI1OENFNjQ3Rjk4RTEyNjBBQ0NFNEFDREEzREQ4NjlGNzRFMDFGOEJBNUUwMzI0MzA5REI2QTk4MzE0OTdBQkFDOTY2NzAiOiI0RDQ0MzI2RjI2OUE1OTdBNUI1OEJCQTU2NURBNTU1NkVEN0ZEOUE4QTlFQjc2QzI1RjQ2REI2OUQxOURDOENFNkFEMThFNDA0QjE1NzM4QjIwODZERjM3RTcxRDFFQjQiOiI2MkQ2OTIxMzZERTU2Q0JFOTNCRjVGQTMxODhFRjU4QkM4QTNBMEVDNkMxRTE1MUEyMTAzOEE0MkU5MTg1MzI5QjVCMjc1OTAzRDE5MkY4RDRFMUYzMkZFOUNDNzhDNDgiOiIwQkQ5RDNBN0VBMEIzRDUxOUQwOUQ4RTQ4RDA3ODVGQjc0NEE2QjM1NUU2MzA0QkM1MUMyMjlGQkJDRTIzOUJCQURGNjQwMzcxNUMzNUQ0RkIyQTU0NDRGNTc1RDRGNDIiOiIwREYyMTM0MTdFQkU0RDhFNDBBNUY3NkY2NkM1NjQ3MEM0ODlBMzQ3OEQxNDZERUNGNkRGMEQ5NEJBRTlFNTk4MTU3MjkwRjg3NTYwNjY5NzVGMURCMzRCMjMyNEI3QkQiCisKK0VDUCB0ZXN0IHZlY3RvcnMgYnJhaW5wb29sUDUxMnIxIHJmYyA3MDI3CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRAorZWNwX3Rlc3RfdmVjdDpNQkVEVExTX0VDUF9EUF9CUDUxMlIxOiIxNjMwMkZGMERCQkI1QThENzMzREFCNzE0MUMxQjQ1QUNCQzg3MTU5Mzk2NzdGNkE1Njg1MEEzOEJEODdCRDU5QjA5RTgwMjc5NjA5RkYzMzNFQjlENEMwNjEyMzFGQjI2RjkyRUVCMDQ5ODJBNUYxRDE3NjRDQUQ1NzY2NTQyMiI6IjBBNDIwNTE3RTQwNkFBQzBBQ0RDRTkwRkNENzE0ODc3MThEM0I5NTNFRkQ3RkJFQzVGN0YyN0UyOEM2MTQ5OTk5Mzk3RTkxRTAyOUUwNjQ1N0RCMkQzRTY0MDY2OEIzOTJDMkE3RTczN0E3RjBCRjA0NDM2RDExNjQwRkQwOUZEIjoiNzJFNjg4MkU4REIyOEFBRDM2MjM3Q0QyNUQ1ODBEQjIzNzgzOTYxQzhEQzUyREZBMkVDMTM4QUQ0NzJBMEZDRUYzODg3Q0Y2MkI2MjNCMkE4N0RFNUM1ODgzMDFFQTNFNUZDMjY5QjM3M0I2MDcyNEY1RTgyQTZBRDE0N0ZERTciOiIyMzBFMThFMUJDQzg4QTM2MkZBNTRFNEVBMzkwMjAwOTI5MkY3RjgwMzM2MjRGRDQ3MUI1RDhBQ0U0OUQxMkNGQUJCQzE5OTYzREFCOEUyRjFFQkEwMEJGRkIyOUU0RDcyRDEzRjIyMjQ1NjJGNDA1Q0I4MDUwMzY2NkIyNTQyOSI6IjlENDVGNjZERTVENjdFMkU2REI2RTkzQTU5Q0UwQkI0ODEwNjA5N0ZGNzhBMDgxREU3ODFDREIzMUZDRThDQ0JBQUVBOERENDMyMEM0MTE5RjFFOUNENDM3QTJFQUIzNzMxRkE5NjY4QUIyNjhEODcxREVEQTU1QTU0NzMxOTlGIjoiMkZEQzMxMzA5NUJDREQ1RkIzQTkxNjM2RjA3QTk1OUM4RTg2QjU2MzZBMUU5MzBFODM5NjA0OUNCNDgxOTYxRDM2NUNDMTE0NTNBMDZDNzE5ODM1NDc1QjEyQ0I1MkZDM0MzODNCQ0UzNUUyN0VGMTk0NTEyQjcxODc2Mjg1RkEiOiJBNzkyNzA5ODY1NUYxRjk5NzZGQTUwQTlENTY2ODY1REM1MzAzMzE4NDYzODFDODcyNTZCQUYzMjI2MjQ0Qjc2RDM2NDAzQzAyNEQ3QkJGMEFBMDgwM0VBRkY0MDVEM0QyNEYxMUE5QjVDMEJFRjY3OUZFMTQ1NEIyMUM0Q0QxRiI6IjdEQjcxQzNERUY2MzIxMjg0MUM0NjNFODgxQkRDRjA1NTUyM0JEMzY4MjQwRTZDMzE0M0JEOERFRjhCM0IzMjIzQjk1RTBGNTMwODJGRjVFNDEyRjQyMjI1MzdBNDNERjFDNkQyNTcyOUREQjUxNjIwQTgzMkJFNkEyNjY4MEEyIgorCitFQ1AgdGVzdCB2ZWN0b3JzIEN1cnZlMjU1MTkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECitlY3BfdGVzdF92ZWNfeDpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5OiI1QUM5OUYzMzYzMkU1QTc2OERFN0U4MUJGODU0QzI3QzQ2RTNGQkYyQUJCQUNEMjlFQzRBRkY1MTczNjlDNjYwIjoiMDU3RTIzRUE5RjFDQkU4QTI3MTY4RjZFNjk2QTc5MURFNjFERDNBRjdBQ0Q0RUVBQ0M2RTdCQTUxNEZEQTg2MyI6IjQ3REMzRDIxNDE3NDgyMEUxMTU0QjQ5QkM2Q0RCMkFCRDQ1RUU5NTgxNzA1NUQyNTVBQTM1ODMxQjcwRDMyNjAiOiI2RUI4OURBOTE5ODlBRTM3QzdFQUM3NjE4RDlFNUM0OTUxREJBMUQ3M0MyODVBRTFDRDI2QTg1NTAyMEVFRjA0IjoiNjE0NTBDRDk4RTM2MDE2QjU4Nzc2QTg5N0E5RjBBRUY3MzhCOTlGMDk0NjhCOEQ2Qjg1MTExODRENTM0OTRBQiIKKworRUNQIHRlc3QgdmVjdG9ycyBzZWNwMTkyazEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQKK2VjcF90ZXN0X3ZlY3Q6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxOiJEMUUxM0EzNTlGNkUwRjA2OTg3OTE5MzhFNkQ2MDI0NjAzMEFFNEIwRDhENEU5REUiOiIyODFCQ0E5ODJGMTg3RUQzMEFENUUwODg0NjFFQkUwQTVGQURCQjY4MjU0NkRGNzkiOiIzRjY4QThFOTQ0MUZCOTNBNERENDhDQjcwQjUwNEZDQzlBQTAxOTAyRUY1QkUwRjMiOiJCRTk3QzVEMkExQTk0RDA4MUUzRkFDRTUzRTY1QTI3MTA4Qjc0NjdCREY1OERFNDMiOiI1RUIzNUU5MjJDRDY5M0Y3OTQ3MTI0RjU5MjAwMjJDNDg5MUMwNEY2QThCOERDQjIiOiI2MEVDRjczRDBGQzQzRTBDNDJFOEUxNTVGRkUzOUY5RjBCNTMxRjg3QjM0QjZDM0MiOiIzNzJGNUM1RDBFMTgzMTNDODJBRUY5NDBFQzNBRkVFMjYwODdBNDZGMUVCQUU5MjMiOiJENUE5RjkxODJFQzA5Q0VBRUE1RjU3RUExMDIyNUVDNzdGQTQ0MTc0NTExOTg1RkQiCisKK0VDUCB0ZXN0IHZlY3RvcnMgc2VjcDIyNGsxCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVECitlY3BfdGVzdF92ZWN0Ok1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMToiOEVBRDlCMjgxOUEzQzI3NDZCM0VEQzFFMEQzMEYyMzI3MUNEQUMwNDhDMDYxNUM5NjFCMUE5RDMiOiJERUUwQTc1RUYyNkNGOEY1MDFEQjgwODA3QTNBMDkwOEU1Q0YwMTg1MjcwOUMxRDM1QjMxNDI4QiI6IjI3NkQyQjgxNzkxOEY3Q0QxREE1Q0NBMDgxRUM0QjYyQ0QyNTVFMEFDREM5Rjg1RkE4QzUyQ0FDIjoiQUI3RTcwQUVEQTY4QTE3NEVDQzFGMzgwMDU2MUIyRDRGQUJFOTdDNUQyQTFBOTREMDgxRTNGQUMiOiJEMkU5NEIwMEZEMzAyMDFDNDBFREY3M0IxMzc0Mjc5MTY2ODdBRUExOTM1QjI3N0E1OTYwREQxQyI6IkRFNzI4QTYxNEIxN0Q5MUVCM0NCMkMxN0RBMTk1NTYyQjYyODE1ODU5ODYzMzJCM0UxMkRBMEVEIjoiQjY2QjY3M0QyOTAzOEEzNDg3QTJEOUMxMENEQ0U2NzY0NkY3QzM5Qzk4NEVCRTlFODc5NUFEM0MiOiI5MjhDNjE0N0FGNUVFNEI1NEZBNkVDRjc3QjcwQ0EzRkVFNUY0MTgyREIwNTc4NzhGMTI5REYiOgorCitFQ1AgdGVzdCB2ZWN0b3JzIHNlY3AyNTZrMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRAorZWNwX3Rlc3RfdmVjdDpNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzE6IjkyM0M2RDQ3NTZDRDk0MENEMUUxM0EzNTlGNkUwRjA2OTg3OTE5MzhFNkQ2MDI0NjAzMEFFNEIwRDhENEU5REUiOiIyMEE4NjVCMjk1RTkzQzVCMDkwRjMyNEI4NEQ3QUM3NTI2QUExQ0ZFODZERDgwRTc5MkNFQ0NEMTZCNjU3RDU1IjoiMzhBQzg3MTQxQTQ4NTRBOERGRDg3MzMzRTEwN0I2MTY5MjMyMzcyMUZFMkVBRDZFNTIyMDZGRTQ3MUE0NzcxQiI6IjRGNTAzNkE4RUQ1ODA5QUI3RTcwQUVEQTY4QTE3NEVDQzFGMzgwMDU2MUIyRDRGQUJFOTdDNUQyQTFBOTREMDgiOiIwMjlGNUQyQ0M1QTJDN0U1MzhGQkEzMjE0MzlCNEVDOERENzlCN0ZFQjlDMEE4QTUxMTRFRUEzOTg1NkUyMkU4IjoiMTY1MTcxQUZDMzQxMUE0MjdGMjRGRERFMTE5MkE1NTFDOTA5ODNFQjQyMUJDOTgyQUI0Q0Y0RTIxRjE4RjA0QiI6IkU0QjVCNTM3RDNBQ0VBNzYyNEYyRTlDMTg1QkZGRDgwQkM3MDM1RTUxNUYzM0UwRDRDRkFFNzQ3RkQyMDAzOEUiOiIyQkM2ODVCN0RDREJDNjk0RjVFMDM2QzRFQUU5QkZCNDg5RDdCRjg5NDBDNDY4MUY3MzRCNzFENjg1MDE1MTRDIgorCitFQ1Agc2VsZnRlc3QKK2VjcF9zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY3AuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNwLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZTYxZWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNwLmZ1bmN0aW9uCkBAIC0wLDAgKzEsNTEyIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2VjcC5oIgorCisjZGVmaW5lIEVDUF9QRl9VTktOT1dOICAgICAtMQorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19FQ1BfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19lY3BfY3VydmVfaW5mbyggaW50IGlkLCBpbnQgdGxzX2lkLCBpbnQgc2l6ZSwgY2hhciAqbmFtZSApCit7CisgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqYnlfaWQsICpieV90bHMsICpieV9uYW1lOworCisgICAgYnlfaWQgICA9IG1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV9ncnBfaWQoIGlkICAgICApOworICAgIGJ5X3RscyAgPSBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fdGxzX2lkKCB0bHNfaWQgKTsKKyAgICBieV9uYW1lID0gbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX25hbWUoICAgbmFtZSAgICk7CisgICAgVEVTVF9BU1NFUlQoIGJ5X2lkICAgIT0gTlVMTCApOworICAgIFRFU1RfQVNTRVJUKCBieV90bHMgICE9IE5VTEwgKTsKKyAgICBURVNUX0FTU0VSVCggYnlfbmFtZSAhPSBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCggYnlfaWQgPT0gYnlfdGxzICApOworICAgIFRFU1RfQVNTRVJUKCBieV9pZCA9PSBieV9uYW1lICk7CisKKyAgICBURVNUX0FTU0VSVCggYnlfaWQtPmJpdF9zaXplID09IHNpemUgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZWNwX2NoZWNrX3B1Yl9teCggaW50IGdycF9pZCwgY2hhciAqa2V5X2hleCwgaW50IHJldCApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFA7CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBncnBfaWQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZQLlgsIDE2LCBrZXlfaGV4ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9sc2V0KCAmUC5aLCAxICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggJmdycCwgJlAgKSA9PSByZXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZWNwX3Rlc3RfdmVjdCggaW50IGlkLCBjaGFyICpkQV9zdHIsIGNoYXIgKnhBX3N0ciwgY2hhciAqeUFfc3RyLAorICAgICAgICAgICAgICAgICAgICBjaGFyICpkQl9zdHIsIGNoYXIgKnhCX3N0ciwgY2hhciAqeUJfc3RyLCBjaGFyICp4Wl9zdHIsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKnlaX3N0ciApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFI7CisgICAgbWJlZHRsc19tcGkgZEEsIHhBLCB5QSwgZEIsIHhCLCB5QiwgeFosIHlaOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmZEEgKTsgbWJlZHRsc19tcGlfaW5pdCggJnhBICk7IG1iZWR0bHNfbXBpX2luaXQoICZ5QSApOyBtYmVkdGxzX21waV9pbml0KCAmZEIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmeEIgKTsgbWJlZHRsc19tcGlfaW5pdCggJnlCICk7IG1iZWR0bHNfbXBpX2luaXQoICZ4WiApOyBtYmVkdGxzX21waV9pbml0KCAmeVogKTsKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMHgwMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZncnAsIGlkICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggJmdycCwgJmdycC5HICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmZEEsIDE2LCBkQV9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmeEEsIDE2LCB4QV9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmeUEsIDE2LCB5QV9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmZEIsIDE2LCBkQl9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmeEIsIDE2LCB4Ql9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmeUIsIDE2LCB5Ql9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmeFosIDE2LCB4Wl9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmeVosIDE2LCB5Wl9zdHIgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfbXVsKCAmZ3JwLCAmUiwgJmRBLCAmZ3JwLkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlIuWCwgJnhBICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUi5ZLCAmeUEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggJmdycCwgJlIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX211bCggJmdycCwgJlIsICZkQiwgJlIsIE5VTEwsIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLlgsICZ4WiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlIuWSwgJnlaICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoICZncnAsICZSICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX211bCggJmdycCwgJlIsICZkQiwgJmdycC5HLCBOVUxMLCBOVUxMICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUi5YLCAmeEIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLlksICZ5QiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCAmZ3JwLCAmUiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfbXVsKCAmZ3JwLCAmUiwgJmRBLCAmUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUi5YLCAmeFogKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLlksICZ5WiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCAmZ3JwLCAmUiApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7IG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZSICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmRBICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZ4QSApOyBtYmVkdGxzX21waV9mcmVlKCAmeUEgKTsgbWJlZHRsc19tcGlfZnJlZSggJmRCICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJnhCICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZ5QiApOyBtYmVkdGxzX21waV9mcmVlKCAmeFogKTsgbWJlZHRsc19tcGlfZnJlZSggJnlaICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGVjcF90ZXN0X3ZlY194KCBpbnQgaWQsIGNoYXIgKmRBX2hleCwgY2hhciAqeEFfaGV4LAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqZEJfaGV4LCBjaGFyICp4Ql9oZXgsIGNoYXIgKnhTX2hleCApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFI7CisgICAgbWJlZHRsc19tcGkgZEEsIHhBLCBkQiwgeEIsIHhTOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmZEEgKTsgbWJlZHRsc19tcGlfaW5pdCggJnhBICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJmRCICk7IG1iZWR0bHNfbXBpX2luaXQoICZ4QiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZ4UyApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmdycCwgaWQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCAmZ3JwLCAmZ3JwLkcgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZkQSwgMTYsIGRBX2hleCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZkQiwgMTYsIGRCX2hleCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZ4QSwgMTYsIHhBX2hleCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZ4QiwgMTYsIHhCX2hleCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZ4UywgMTYsIHhTX2hleCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9tdWwoICZncnAsICZSLCAmZEEsICZncnAuRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoICZncnAsICZSICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUi5YLCAmeEEgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfbXVsKCAmZ3JwLCAmUiwgJmRCLCAmUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoICZncnAsICZSICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUi5YLCAmeFMgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfbXVsKCAmZ3JwLCAmUiwgJmRCLCAmZ3JwLkcsIE5VTEwsIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggJmdycCwgJlIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLlgsICZ4QiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9tdWwoICZncnAsICZSLCAmZEEsICZSLCBOVUxMLCBOVUxMICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoICZncnAsICZSICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUi5YLCAmeFMgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOyBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmUiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZkQSApOyBtYmVkdGxzX21waV9mcmVlKCAmeEEgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmZEIgKTsgbWJlZHRsc19tcGlfZnJlZSggJnhCICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJnhTICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGVjcF9mYXN0X21vZCggaW50IGlkLCBjaGFyICpOX3N0ciApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfbXBpIE4sIFI7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmTiApOyBtYmVkdGxzX21waV9pbml0KCAmUiApOworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJk4sIDE2LCBOX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmdycCwgaWQgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIGdycC5tb2RwICE9IE5VTEwgKTsKKworICAgIC8qCisgICAgICogU3RvcmUgY29ycmVjdCByZXN1bHQgYmVmb3JlIHdlIHRvdWNoIE4KKyAgICAgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJlIsICZOLCAmZ3JwLlAgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggZ3JwLm1vZHAoICZOICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9iaXRsZW4oICZOICkgPD0gZ3JwLnBiaXRzICsgMyApOworCisgICAgLyoKKyAgICAgKiBVc2UgbW9kIHJhdGhlciB0aGFuIGFkZGl0aW9uL3N1YnRyYWN0aW9uIGluIGNhc2UgcHJldmlvdXMgdGVzdCBmYWlscworICAgICAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmTiwgJk4sICZncnAuUCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJk4sICZSICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZOICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZSICk7CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlY3Bfd3JpdGVfYmluYXJ5KCBpbnQgaWQsIGNoYXIgKngsIGNoYXIgKnksIGNoYXIgKnosIGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm91dCwgaW50IGJsZW4sIGludCByZXQgKQoreworICAgIG1iZWR0bHNfZWNwX2dyb3VwIGdycDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBQOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl0sIHN0cls1MTJdOworICAgIHNpemVfdCBvbGVuOworCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICBtZW1zZXQoIHN0ciwgMCwgc2l6ZW9mKCBzdHIgKSApOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOyBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZncnAsIGlkICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmUC5YLCAxNiwgeCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZQLlksIDE2LCB5ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlAuWiwgMTYsIHogKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfcG9pbnRfd3JpdGVfYmluYXJ5KCAmZ3JwLCAmUCwgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xlbiwgYnVmLCBibGVuICkgPT0gcmV0ICk7CisKKyAgICBpZiggcmV0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBzdHIsIGJ1Ziwgb2xlbiApOworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgc3RyLCBvdXQgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZWNwX3JlYWRfYmluYXJ5KCBpbnQgaWQsIGNoYXIgKmlucHV0LCBjaGFyICp4LCBjaGFyICp5LCBjaGFyICp6LAorICAgICAgICAgICAgICAgICAgICAgIGludCByZXQgKQoreworICAgIG1iZWR0bHNfZWNwX2dyb3VwIGdycDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBQOworICAgIG1iZWR0bHNfbXBpIFgsIFksIFo7CisgICAgaW50IGlsZW47CisgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKKworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7IG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZQICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsgbWJlZHRsc19tcGlfaW5pdCggJlogKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBpZCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIDE2LCB4ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIDE2LCB5ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlosIDE2LCB6ICkgPT0gMCApOworCisgICAgaWxlbiA9IHVuaGV4aWZ5KCBidWYsIGlucHV0ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkoICZncnAsICZQLCBidWYsIGlsZW4gKSA9PSByZXQgKTsKKworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlAuWCwgJlggKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUC5ZLCAmWSApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZQLlosICZaICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7IG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZQICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsgbWJlZHRsc19tcGlfZnJlZSggJlogKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19lY3BfdGxzX3JlYWRfcG9pbnQoIGludCBpZCwgY2hhciAqaW5wdXQsIGNoYXIgKngsIGNoYXIgKnksIGNoYXIgKnosCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldCApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFA7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgWjsKKyAgICBzaXplX3QgaWxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZidWYgPSBidWY7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOyBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUCApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZaICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmdycCwgaWQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCAxNiwgeCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCAxNiwgeSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZaLCAxNiwgeiApID09IDAgKTsKKworICAgIGlsZW4gPSB1bmhleGlmeSggYnVmLCBpbnB1dCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50KCAmZ3JwLCAmUCwgJnZidWYsIGlsZW4gKSA9PSByZXQgKTsKKworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlAuWCwgJlggKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUC5ZLCAmWSApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZQLlosICZaICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggKnZidWYgPT0gMHgwMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7IG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZQICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsgbWJlZHRsc19tcGlfZnJlZSggJlogKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZWNwX3Rsc193cml0ZV9yZWFkX3BvaW50KCBpbnQgaWQgKQoreworICAgIG1iZWR0bHNfZWNwX2dyb3VwIGdycDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBwdDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZidWY7CisgICAgc2l6ZV90IG9sZW47CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJnB0ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmdycCwgaWQgKSA9PSAwICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMHgwMCwgc2l6ZW9mKCBidWYgKSApOyB2YnVmID0gYnVmOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfcG9pbnQoICZncnAsICZncnAuRywKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRCwgJm9sZW4sIGJ1ZiwgMjU2ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludCggJmdycCwgJnB0LCAmdmJ1Ziwgb2xlbiApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisgICAgVEVTVF9BU1NFUlQoIHZidWYgPT0gYnVmICsgb2xlbiApOworCisgICAgbWVtc2V0KCBidWYsIDB4MDAsIHNpemVvZiggYnVmICkgKTsgdmJ1ZiA9IGJ1ZjsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfdGxzX3dyaXRlX3BvaW50KCAmZ3JwLCAmZ3JwLkcsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRUNQX1BGX1VOQ09NUFJFU1NFRCwgJm9sZW4sIGJ1ZiwgMjU2ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludCggJmdycCwgJnB0LCAmdmJ1Ziwgb2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJmdycC5HLlgsICZwdC5YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmZ3JwLkcuWSwgJnB0LlkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZncnAuRy5aLCAmcHQuWiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggdmJ1ZiA9PSBidWYgKyBvbGVuICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMHgwMCwgc2l6ZW9mKCBidWYgKSApOyB2YnVmID0gYnVmOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9zZXRfemVybyggJnB0ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfcG9pbnQoICZncnAsICZwdCwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRCwgJm9sZW4sIGJ1ZiwgMjU2ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludCggJmdycCwgJnB0LCAmdmJ1Ziwgb2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfaXNfemVybyggJnB0ICkgKTsKKyAgICBURVNUX0FTU0VSVCggdmJ1ZiA9PSBidWYgKyBvbGVuICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMHgwMCwgc2l6ZW9mKCBidWYgKSApOyB2YnVmID0gYnVmOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9zZXRfemVybyggJnB0ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfcG9pbnQoICZncnAsICZwdCwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VELCAmb2xlbiwgYnVmLCAyNTYgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50KCAmZ3JwLCAmcHQsICZ2YnVmLCBvbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9pc196ZXJvKCAmcHQgKSApOworICAgIFRFU1RfQVNTRVJUKCB2YnVmID09IGJ1ZiArIG9sZW4gKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJnB0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfZWNwX3Rsc19yZWFkX2dyb3VwKCBjaGFyICpyZWNvcmQsIGludCByZXN1bHQsIGludCBiaXRzICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTBdOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZidWYgPSBidWY7CisgICAgaW50IGxlbiwgcmV0OworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOworICAgIG1lbXNldCggYnVmLCAweDAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBsZW4gPSB1bmhleGlmeSggYnVmLCByZWNvcmQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfZWNwX3Rsc19yZWFkX2dyb3VwKCAmZ3JwLCAmdmJ1ZiwgbGVuICk7CisKKyAgICBURVNUX0FTU0VSVCggcmV0ID09IHJlc3VsdCApOworICAgIGlmKCByZXQgPT0gMCkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9iaXRsZW4oICZncnAuUCApID09IChzaXplX3QpIGJpdHMgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoICp2YnVmID09IDB4MDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlY3BfdGxzX3dyaXRlX3JlYWRfZ3JvdXAoIGludCBpZCApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwMSwgZ3JwMjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMF07CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmJ1ZiA9IGJ1ZjsKKyAgICBzaXplX3QgbGVuOworICAgIGludCByZXQ7CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwMSApOworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAyICk7CisgICAgbWVtc2V0KCBidWYsIDB4MDAsIHNpemVvZiggYnVmICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwMSwgaWQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfdGxzX3dyaXRlX2dyb3VwKCAmZ3JwMSwgJmxlbiwgYnVmLCAxMCApID09IDAgKTsKKyAgICByZXQgPSBtYmVkdGxzX2VjcF90bHNfcmVhZF9ncm91cCggJmdycDIsICZ2YnVmLCBsZW4gKTsKKyAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKKworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJmdycDEuTiwgJmdycDIuTiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIGdycDEuaWQgPT0gZ3JwMi5pZCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwMSApOworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAyICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXkoIGludCBpZCwgY2hhciAqa2V5X2hleCwgaW50IHJldCApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfbXBpIGQ7CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJmQgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBpZCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZkLCAxNiwga2V5X2hleCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wcml2a2V5KCAmZ3JwLCAmZCApID09IHJldCApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmZCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2VjcF9jaGVja19wdWJfcHJpdiggaW50IGlkX3B1YiwgY2hhciAqUXhfcHViLCBjaGFyICpReV9wdWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkLCBjaGFyICpkLCBjaGFyICpReCwgY2hhciAqUXksIGludCByZXQgKQoreworICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgcHViLCBwcnY7CisKKyAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2luaXQoICZwdWIgKTsKKyAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2luaXQoICZwcnYgKTsKKworICAgIGlmKCBpZF9wdWIgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORSApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmcHViLmdycCwgaWRfcHViICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX3N0cmluZyggJnB1Yi5RLCAxNiwgUXhfcHViLCBReV9wdWIgKSA9PSAwICk7CisKKyAgICBpZiggaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORSApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmcHJ2LmdycCwgaWQgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfc3RyaW5nKCAmcHJ2LlEsIDE2LCBReCwgUXkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcHJ2LmQsIDE2LCBkICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3B1Yl9wcml2KCAmcHViLCAmcHJ2ICkgPT0gcmV0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCAmcHViICk7CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCAmcHJ2ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyKCBpbnQgaWQgKQoreworICAgIG1iZWR0bHNfZWNwX2dyb3VwIGdycDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBROworICAgIG1iZWR0bHNfbXBpIGQ7CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZRICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJmQgKTsKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMHgwMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZncnAsIGlkICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyKCAmZ3JwLCAmZCwgJlEsICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApCisgICAgICAgICAgICAgICAgID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoICZncnAsICZRICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wcml2a2V5KCAmZ3JwLCAmZCApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlEgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmZCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2VjcF9nZW5fa2V5KCBpbnQgaWQgKQoreworICAgIG1iZWR0bHNfZWNwX2tleXBhaXIga2V5OworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKworICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfaW5pdCggJmtleSApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ2VuX2tleSggaWQsICZrZXksICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoICZrZXkuZ3JwLCAma2V5LlEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXkoICZrZXkuZ3JwLCAma2V5LmQgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCAma2V5ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgZWNwX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3Bfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lbnRyb3B5LmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZW50cm9weS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZGZhZTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZW50cm9weS5kYXRhCkBAIC0wLDAgKzEsNjEgQEAKK0NyZWF0ZSBOViBzZWVkX2ZpbGUKK252X3NlZWRfZmlsZV9jcmVhdGU6CisKK0VudHJvcHkgd3JpdGUvdXBkYXRlIHNlZWQgZmlsZQorZW50cm9weV9zZWVkX2ZpbGU6ImRhdGFfZmlsZXMvZW50cm9weV9zZWVkIjowCisKK0VudHJvcHkgd3JpdGUvdXBkYXRlIHNlZWQgZmlsZQorZW50cm9weV9zZWVkX2ZpbGU6Im5vX3N1Y2hfZGlyL2ZpbGUiOk1CRURUTFNfRVJSX0VOVFJPUFlfRklMRV9JT19FUlJPUgorCitFbnRyb3B5IHRvbyBtYW55IHNvdXJjZXMKK2VudHJvcHlfdG9vX21hbnlfc291cmNlczoKKworRW50cm9weSBvdXRwdXQgbGVuZ3RoICMxCitlbnRyb3B5X2Z1bmNfbGVuOjA6MAorCitFbnRyb3B5IG91dHB1dCBsZW5ndGggIzIKK2VudHJvcHlfZnVuY19sZW46MTowCisKK0VudHJvcHkgb3V0cHV0IGxlbmd0aCAjMworZW50cm9weV9mdW5jX2xlbjoyOjAKKworRW50cm9weSBvdXRwdXQgbGVuZ3RoICM0CitlbnRyb3B5X2Z1bmNfbGVuOjMxOjAKKworRW50cm9weSBvdXRwdXQgbGVuZ3RoICM1CitlbnRyb3B5X2Z1bmNfbGVuOjY1Ok1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorCitFbnRyb3B5IGZhaWxpbmcgc291cmNlCitlbnRyb3B5X3NvdXJjZV9mYWlsOiJkYXRhX2ZpbGVzL2VudHJvcHlfc2VlZCIKKworRW50cm9weSB0aHJlc2hvbGQgIzEKK2VudHJvcHlfdGhyZXNob2xkOjE2OjI6OAorCitFbnRyb3B5IHRocmVzaG9sZCAjMgorZW50cm9weV90aHJlc2hvbGQ6MzI6MTozMgorCitFbnRyb3B5IHRoZXJzaG9sZCAjMworZW50cm9weV90aHJlc2hvbGQ6MTY6MDpNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQKKworRW50cm9weSB0aGVyc2hvbGQgIzQKK2VudHJvcHlfdGhyZXNob2xkOjEwMjQ6MTpNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQKKworQ2hlY2sgTlYgc2VlZCBzdGFuZGFyZCBJTworZW50cm9weV9udl9zZWVkX3N0ZF9pbzoKKworQ2hlY2sgTlYgc2VlZCBtYW51YWxseSAjMQorZW50cm9weV9udl9zZWVkOiIwMDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRjAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYwMDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRiIKKworQ2hlY2sgTlYgc2VlZCBtYW51YWxseSAjMgorZW50cm9weV9udl9zZWVkOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQ2hlY2sgTlYgc2VlZCBtYW51YWxseSAjMworZW50cm9weV9udl9zZWVkOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIKKworRW50cm9weSBzZWxmIHRlc3QKK2RlcGVuZHNfb246IU1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkKK2VudHJvcHlfc2VsZnRlc3Q6MAorCitFbnRyb3B5IHNlbGYgdGVzdCAoTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSkKK2RlcGVuZHNfb246TUJFRFRMU19URVNUX05VTExfRU5UUk9QWQorZW50cm9weV9zZWxmdGVzdDoxCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZW50cm9weS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lbnRyb3B5LmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YTIxYmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZW50cm9weS5mdW5jdGlvbgpAQCAtMCwwICsxLDM4NSBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5X3BvbGwuaCIKKworLyoKKyAqIE51bWJlciBvZiBjYWxscyBtYWRlIHRvIGVudHJvcHlfZHVtbXlfc291cmNlKCkKKyAqLworc3RhdGljIHNpemVfdCBlbnRyb3B5X2R1bW15X2NhbGxzOworCisvKgorICogRHVtbXkgZW50cm9weSBzb3VyY2UKKyAqCisgKiBJZiBkYXRhIGlzIE5VTEwsIHdyaXRlIGV4YWN0bHkgdGhlIHJlcXVlc3RlZCBsZW5ndGguCisgKiBPdGhlcndpc2UsIHdyaXRlIHRoZSBsZW5ndGggaW5kaWNhdGVkIGJ5IGRhdGEgb3IgZXJyb3IgaWYgbmVnYXRpdmUKKyAqLworc3RhdGljIGludCBlbnRyb3B5X2R1bW15X3NvdXJjZSggdm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBlbnRyb3B5X2R1bW15X2NhbGxzKys7CisKKyAgICBpZiggZGF0YSA9PSBOVUxMICkKKyAgICAgICAgKm9sZW4gPSBsZW47CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50ICpkID0gKGludCAqKSBkYXRhOworCisgICAgICAgIGlmKCAqZCA8IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKm9sZW4gPSAqZDsKKyAgICB9CisKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgyYSwgKm9sZW4gKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKKy8qCisgKiBBYmlsaXR5IHRvIGNsZWFyIGVudHJvcHkgc291cmNlcyB0byBhbGxvdyB0ZXN0aW5nIHdpdGgganVzdCBwcmVkZWZpbmVkCisgKiBlbnRyb3B5IHNvdXJjZXMuIFRoaXMgZnVuY3Rpb24gb3IgdGVzdHMgZGVwZW5kaW5nIG9uIGl0IG1pZ2h0IGJyZWFrIGlmIHRoZXJlCisgKiBhcmUgaW50ZXJuYWwgY2hhbmdlcyB0byBob3cgZW50cm9weSBzb3VyY2VzIGFyZSByZWdpc3RlcmVkLgorICoKKyAqIFRvIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBtYmVkdGxzX2VudHJvcHlfaW5pdCgpLgorICoKKyAqIEp1c3QgcmVzZXR0aW5nIHRoZSBjb3VudGVyLiBOZXcgc291cmNlcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBvbmVzLgorICogVGhpcyBtaWdodCBicmVhayBtZW1vcnkgY2hlY2tzIGluIHRoZSBmdXR1cmUgaWYgc291cmNlcyBuZWVkICdmcmVlLWluZycgdGhlbgorICogYXMgd2VsbC4KKyAqLworc3RhdGljIHZvaWQgZW50cm9weV9jbGVhcl9zb3VyY2VzKCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4ICkKK3sKKyAgICBjdHgtPnNvdXJjZV9jb3VudCA9IDA7Cit9CisKKy8qCisgKiBOViBzZWVkIHJlYWQvd3JpdGUgZnVuY3Rpb25zIHRoYXQgdXNlIGEgYnVmZmVyIGluc3RlYWQgb2YgYSBmaWxlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJ1ZmZlcl9zZWVkW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXTsKKworc3RhdGljIGludCBidWZmZXJfbnZfc2VlZF9yZWFkKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICkKK3sKKyAgICBpZiggYnVmX2xlbiAhPSBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIG1lbWNweSggYnVmLCBidWZmZXJfc2VlZCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCBidWZmZXJfbnZfc2VlZF93cml0ZSggdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiApCit7CisgICAgaWYoIGJ1Zl9sZW4gIT0gTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBtZW1jcHkoIGJ1ZmZlcl9zZWVkLCBidWYsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBOViBzZWVkIHJlYWQvd3JpdGUgaGVscGVycyB0aGF0IGZpbGwgdGhlIGJhc2Ugc2VlZGZpbGUKKyAqLworc3RhdGljIGludCB3cml0ZV9udl9zZWVkKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICkKK3sKKyAgICBGSUxFICpmOworCisgICAgaWYoIGJ1Zl9sZW4gIT0gTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfRklMRSwgInciICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoIGZ3cml0ZSggYnVmLCAxLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSwgZiApICE9CisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgZmNsb3NlKCBmICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCByZWFkX252X3NlZWQoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKQoreworICAgIEZJTEUgKmY7CisKKyAgICBpZiggYnVmX2xlbiAhPSBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9GSUxFLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoIGZyZWFkKCBidWYsIDEsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFLCBmICkgIT0KKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEICovCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0VOVFJPUFlfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0VOVFJPUFlfTlZfU0VFRDpNQkVEVExTX0ZTX0lPICovCit2b2lkIGVudHJvcHlfc2VlZF9maWxlKCBjaGFyICpwYXRoLCBpbnQgcmV0ICkKK3sKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmN0eCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZW50cm9weV93cml0ZV9zZWVkX2ZpbGUoICZjdHgsIHBhdGggKSA9PSByZXQgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lbnRyb3B5X3VwZGF0ZV9zZWVkX2ZpbGUoICZjdHgsIHBhdGggKSA9PSByZXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlbnRyb3B5X3Rvb19tYW55X3NvdXJjZXMoICkKK3sKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBjdHg7CisgICAgc2l6ZV90IGk7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmN0eCApOworCisgICAgLyoKKyAgICAgKiBJdCdzIGhhcmQgdG8gdGVsbCBwcmVjaXNlbHkgd2hlbiB0aGUgZXJyb3Igd2lsbCBvY2N1ciwKKyAgICAgKiBzaW5jZSB3ZSBkb24ndCBrbm93IGhvdyBtYW55IHNvdXJjZXMgd2VyZSBhdXRvbWF0aWNhbGx5IGFkZGVkLgorICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCBNQkVEVExTX0VOVFJPUFlfTUFYX1NPVVJDRVM7IGkrKyApCisgICAgICAgICh2b2lkKSBtYmVkdGxzX2VudHJvcHlfYWRkX3NvdXJjZSggJmN0eCwgZW50cm9weV9kdW1teV9zb3VyY2UsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfV0VBSyApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCAmY3R4LCBlbnRyb3B5X2R1bW15X3NvdXJjZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCBNQkVEVExTX0VOVFJPUFlfU09VUkNFX1dFQUsgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9FTlRST1BZX01BWF9TT1VSQ0VTICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZW50cm9weV9mdW5jX2xlbiggaW50IGxlbiwgaW50IHJldCApCit7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICsgMTBdID0geyAwIH07CisgICAgdW5zaWduZWQgY2hhciBhY2NbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKyAxMF0gPSB7IDAgfTsKKyAgICBzaXplX3QgaSwgajsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmY3R4ICk7CisKKyAgICAvKgorICAgICAqIFNlZSBjb21tZW50cyBpbiBtYmVkdGxzX2VudHJvcHlfc2VsZl90ZXN0KCkKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VudHJvcHlfZnVuYyggJmN0eCwgYnVmLCBsZW4gKSA9PSByZXQgKTsKKyAgICAgICAgZm9yKCBqID0gMDsgaiA8IHNpemVvZiggYnVmICk7IGorKyApCisgICAgICAgICAgICBhY2Nbal0gfD0gYnVmW2pdOworICAgIH0KKworICAgIGlmKCByZXQgPT0gMCApCisgICAgICAgIGZvciggaiA9IDA7IGogPCAoc2l6ZV90KSBsZW47IGorKyApCisgICAgICAgICAgICBURVNUX0FTU0VSVCggYWNjW2pdICE9IDAgKTsKKworICAgIGZvciggaiA9IGxlbjsgaiA8IHNpemVvZiggYnVmICk7IGorKyApCisgICAgICAgIFRFU1RfQVNTRVJUKCBhY2Nbal0gPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlbnRyb3B5X3NvdXJjZV9mYWlsKCBjaGFyICpwYXRoICkKK3sKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBjdHg7CisgICAgaW50IGZhaWwgPSAtMTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl07CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmN0eCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCAmY3R4LCBlbnRyb3B5X2R1bW15X3NvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYWlsLCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfV0VBSyApCisgICAgICAgICAgICAgICAgID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VudHJvcHlfZnVuYyggJmN0eCwgYnVmLCBzaXplb2YoIGJ1ZiApICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZW50cm9weV9nYXRoZXIoICZjdHggKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pICYmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZW50cm9weV93cml0ZV9zZWVkX2ZpbGUoICZjdHgsIHBhdGggKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lbnRyb3B5X3VwZGF0ZV9zZWVkX2ZpbGUoICZjdHgsIHBhdGggKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKyNlbHNlCisgICAgKCh2b2lkKSBwYXRoKTsKKyNlbmRpZgorCitleGl0OgorICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGVudHJvcHlfdGhyZXNob2xkKCBpbnQgdGhyZXNob2xkLCBpbnQgY2h1bmtfc2l6ZSwgaW50IHJlc3VsdCApCit7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXSA9IHsgMCB9OworICAgIGludCByZXQ7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmN0eCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCAmY3R4LCBlbnRyb3B5X2R1bW15X3NvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2h1bmtfc2l6ZSwgdGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfV0VBSyApID09IDAgKTsKKworICAgIGVudHJvcHlfZHVtbXlfY2FsbHMgPSAwOworICAgIHJldCA9IG1iZWR0bHNfZW50cm9weV9mdW5jKCAmY3R4LCBidWYsIHNpemVvZiggYnVmICkgKTsKKworICAgIGlmKCByZXN1bHQgPj0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQorICAgICAgICAvLyBUd28gdGltZXMgYXMgbXVjaCBjYWxscyBkdWUgdG8gdGhlIE5WIHNlZWQgdXBkYXRlCisgICAgICAgIHJlc3VsdCAqPSAyOworI2VuZGlmCisgICAgICAgIFRFU1RfQVNTRVJUKCBlbnRyb3B5X2R1bW15X2NhbGxzID09IChzaXplX3QpIHJlc3VsdCApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggcmV0ID09IHJlc3VsdCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRU5UUk9QWV9OVl9TRUVEOk1CRURUTFNfRlNfSU8gKi8KK3ZvaWQgbnZfc2VlZF9maWxlX2NyZWF0ZSgpCit7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworCisgICAgbWVtc2V0KCBidWYsIDAsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisKKyAgICBURVNUX0FTU0VSVCggd3JpdGVfbnZfc2VlZCggYnVmLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0VOVFJPUFlfTlZfU0VFRDpNQkVEVExTX0ZTX0lPOk1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQgKi8KK3ZvaWQgZW50cm9weV9udl9zZWVkX3N0ZF9pbygpCit7CisgICAgdW5zaWduZWQgY2hhciBpb19zZWVkW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyIGNoZWNrX3NlZWRbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworCisgICAgbWVtc2V0KCBpb19zZWVkLCAxLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworICAgIG1lbXNldCggY2hlY2tfc2VlZCwgMCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIG1iZWR0bHNfcGxhdGZvcm1fc2V0X252X3NlZWQoIG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfcmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3dyaXRlICk7CisKKyAgICAvKiBDaGVjayBpZiBwbGF0Zm9ybSBOViByZWFkIGFuZCB3cml0ZSBtYW5pcHVsYXRlIHRoZSBzYW1lIGRhdGEgKi8KKyAgICBURVNUX0FTU0VSVCggd3JpdGVfbnZfc2VlZCggaW9fc2VlZCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbnZfc2VlZF9yZWFkKCBjaGVja19zZWVkLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApID09CisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBpb19zZWVkLCBjaGVja19zZWVkLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApID09IDAgKTsKKworICAgIG1lbXNldCggY2hlY2tfc2VlZCwgMCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIC8qIENoZWNrIGlmIHBsYXRmb3JtIE5WIHdyaXRlIGFuZCByYXcgcmVhZCBtYW5pcHVsYXRlIHRoZSBzYW1lIGRhdGEgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19udl9zZWVkX3dyaXRlKCBpb19zZWVkLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApID09CisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisgICAgVEVTVF9BU1NFUlQoIHJlYWRfbnZfc2VlZCggY2hlY2tfc2VlZCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBpb19zZWVkLCBjaGVja19zZWVkLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0VOVFJPUFlfTlZfU0VFRDpNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUOk1CRURUTFNfRU5UUk9QWV9TSEE1MTJfQUNDVU1VTEFUT1IgKi8KK3ZvaWQgZW50cm9weV9udl9zZWVkKCBjaGFyICpyZWFkX3NlZWRfc3RyICkKK3sKKyAgICBtYmVkdGxzX3NoYTUxMl9jb250ZXh0IGFjY3VtdWxhdG9yOworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGN0eDsKKworICAgIHVuc2lnbmVkIGNoYXIgaGVhZGVyWzJdOworICAgIHVuc2lnbmVkIGNoYXIgZW50cm9weVtNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRV07CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgZW1wdHlbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgcmVhZF9zZWVkW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyIGNoZWNrX3NlZWRbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tfZW50cm9weVtNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRV07CisKKyAgICBtZW1zZXQoIGVudHJvcHksIDAsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisgICAgbWVtc2V0KCBidWYsIDAsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisgICAgbWVtc2V0KCBidWZmZXJfc2VlZCwgMCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKyAgICBtZW1zZXQoIGVtcHR5LCAwLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworICAgIG1lbXNldCggY2hlY2tfc2VlZCwgMiwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKyAgICBtZW1zZXQoIGNoZWNrX2VudHJvcHksIDMsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisKKyAgICAvLyBTZXQgdGhlIGluaXRpYWwgTlYgc2VlZCB0byByZWFkCisgICAgdW5oZXhpZnkoIHJlYWRfc2VlZCwgcmVhZF9zZWVkX3N0ciApOworICAgIG1lbWNweSggYnVmZmVyX3NlZWQsIHJlYWRfc2VlZCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIC8vIE1ha2Ugc3VyZSB3ZSByZWFkL3dyaXRlIE5WIHNlZWQgZnJvbSBvdXIgYnVmZmVycworICAgIG1iZWR0bHNfcGxhdGZvcm1fc2V0X252X3NlZWQoIGJ1ZmZlcl9udl9zZWVkX3JlYWQsIGJ1ZmZlcl9udl9zZWVkX3dyaXRlICk7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmN0eCApOworICAgIGVudHJvcHlfY2xlYXJfc291cmNlcyggJmN0eCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCAmY3R4LCBtYmVkdGxzX252X3NlZWRfcG9sbCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9TVFJPTkcgKSA9PSAwICk7CisKKyAgICAvLyBEbyBhbiBlbnRyb3B5IHJ1bgorICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VudHJvcHlfZnVuYyggJmN0eCwgZW50cm9weSwgc2l6ZW9mKCBlbnRyb3B5ICkgKSA9PSAwICk7CisKKyAgICAvLyBEZXRlcm1pbmUgd2hhdCBzaG91bGQgaGF2ZSBoYXBwZW5lZCB3aXRoIG1hbnVhbCBlbnRyb3B5IGludGVybmFsIGxvZ2ljCisgICAgLy8gT25seSB1c2UgdGhlIFNIQS01MTIgdmVyc2lvbiB0byBjaGVjaworCisgICAgLy8gSW5pdCBhY2N1bXVsYXRvcgorICAgIGhlYWRlclsxXSA9IE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFOworICAgIG1iZWR0bHNfc2hhNTEyX3N0YXJ0cyggJmFjY3VtdWxhdG9yLCAwICk7CisKKyAgICAvLyBGaXJzdCBydW4gZm9yIHVwZGF0aW5nIHdyaXRlX3NlZWQKKyAgICBoZWFkZXJbMF0gPSAwOworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJmFjY3VtdWxhdG9yLCBoZWFkZXIsIDIgKTsKKyAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoICZhY2N1bXVsYXRvciwgcmVhZF9zZWVkLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworICAgIG1iZWR0bHNfc2hhNTEyX2ZpbmlzaCggJmFjY3VtdWxhdG9yLCBidWYgKTsKKworICAgIG1lbXNldCggJmFjY3VtdWxhdG9yLCAwLCBzaXplb2YoIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKSApOworICAgIG1iZWR0bHNfc2hhNTEyX3N0YXJ0cyggJmFjY3VtdWxhdG9yLCAwICk7CisgICAgbWJlZHRsc19zaGE1MTJfdXBkYXRlKCAmYWNjdW11bGF0b3IsIGJ1ZiwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIG1iZWR0bHNfc2hhNTEyKCBidWYsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFLCBjaGVja19zZWVkLCAwICk7CisKKyAgICAvLyBTZWNvbmQgcnVuIGZvciBhY3R1YWwgZW50cm9weSAodHJpZ2dlcnMgbWJlZHRsc19lbnRyb3B5X3VwZGF0ZV9udl9zZWVkKQorICAgIGhlYWRlclswXSA9IE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfTUFOVUFMOworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJmFjY3VtdWxhdG9yLCBoZWFkZXIsIDIgKTsKKyAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoICZhY2N1bXVsYXRvciwgZW1wdHksIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisKKyAgICBoZWFkZXJbMF0gPSAwOworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJmFjY3VtdWxhdG9yLCBoZWFkZXIsIDIgKTsKKyAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoICZhY2N1bXVsYXRvciwgY2hlY2tfc2VlZCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKyAgICBtYmVkdGxzX3NoYTUxMl9maW5pc2goICZhY2N1bXVsYXRvciwgYnVmICk7CisKKyAgICBtYmVkdGxzX3NoYTUxMiggYnVmLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSwgY2hlY2tfZW50cm9weSwgMCApOworCisgICAgLy8gQ2hlY2sgcmVzdWx0IG9mIGJvdGggTlYgZmlsZSBhbmQgZW50cm9weSByZWNlaXZlZCB3aXRoIHRoZSBtYW51YWwgY2FsY3VsYXRpb25zCisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggY2hlY2tfc2VlZCwgYnVmZmVyX3NlZWQsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIGNoZWNrX2VudHJvcHksIGVudHJvcHksIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkgPT0gMCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBlbnRyb3B5X3NlbGZ0ZXN0KCBpbnQgcmVzdWx0ICkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lbnRyb3B5X3NlbGZfdGVzdCggMSApID09IHJlc3VsdCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lcnJvci5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Vycm9yLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjNTYzOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lcnJvci5kYXRhCkBAIC0wLDAgKzEsMjEgQEAKK1NpbmdsZSBsb3cgZXJyb3IKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZXJyb3Jfc3RyZXJyb3I6LTB4MDAyMDoiQUVTIC0gSW52YWxpZCBrZXkgbGVuZ3RoIgorCitTaW5nbGUgaGlnaCBlcnJvcgorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DCitlcnJvcl9zdHJlcnJvcjotMHg0MDgwOiJSU0EgLSBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbiIKKworTG93IGFuZCBoaWdoIGVycm9yCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19SU0FfQworZXJyb3Jfc3RyZXJyb3I6LTB4NDBBMDoiUlNBIC0gQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24gXDogQUVTIC0gSW52YWxpZCBrZXkgbGVuZ3RoIgorCitOb24gZXhpc3RpbmcgaGlnaCBlcnJvcgorZXJyb3Jfc3RyZXJyb3I6LTB4ODg4MDoiVU5LTk9XTiBFUlJPUiBDT0RFICg4ODgwKSIKKworTm9uIGV4aXN0aW5nIGxvdyBlcnJvcgorZXJyb3Jfc3RyZXJyb3I6LTB4MDA3RjoiVU5LTk9XTiBFUlJPUiBDT0RFICgwMDdGKSIKKworTm9uIGV4aXN0aW5nIGxvdyBhbmQgaGlnaCBlcnJvcgorZXJyb3Jfc3RyZXJyb3I6LTB4ODhGRjoiVU5LTk9XTiBFUlJPUiBDT0RFICg4ODgwKSBcOiBVTktOT1dOIEVSUk9SIENPREUgKDAwN0YpIgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZXJyb3IuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZXJyb3IuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5YjFmZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lcnJvci5mdW5jdGlvbgpAQCAtMCwwICsxLDIxIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0VSUk9SX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGVycm9yX3N0cmVycm9yKCBpbnQgY29kZSwgY2hhciAqcmVzdWx0X3N0ciApCit7CisgICAgY2hhciBidWZbNTAwXTsKKworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBtYmVkdGxzX3N0cmVycm9yKCBjb2RlLCBidWYsIDUwMCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggYnVmLCByZXN1bHRfc3RyICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTI4X2RlLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczEyOF9kZS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYWE3MTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczEyOF9kZS5kYXRhCkBAIC0wLDAgKzEsNjc1IEBACitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ3ODVkYWZlYTNlOTY2NzMxZWY2ZmM2MjAyMjYyNTg0IjoiIjoiZDkxYTQ2MjA1ZWU5NDA1OGIzYjg0MDM5OTc1OTJkZDIiOiIiOjEyODoiM2I5MmExN2MxYjljMzU3OGE2OGNmZmVhNWE1YjYyNDUiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZWM5NjM4MzNiOTA5OGRlMWFiYWJjODUzYWI3NGQ5NiI6IiI6IjRlMGZmZDkzYmVmZmQ3MzJjNmY3ZDZhZDYwNmEyZDI0IjoiIjoxMjg6ImU5ZmNlZGMxNzZkZmU1ODdkYzYxYjIwMTEwMTBjZGYxIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzRmYjllMzM5MzY4MWRhOWNlYzVlYzk2Zjg3YzVjMzEiOiIiOiI4NDVlOTEwYmMwNTVkODk1ODc5ZjYyMTAxZDA4YjRjNyI6IiI6MTI4OiI5OWZiNzgzYzQ5NzQxNmU0YjZlMmE1ZGU3Yzc4MjA1NyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyYTkzMGYyZTA5YmVjZWFjZDk5MTljYjc2ZjJhYzhkMyI6IiI6IjM0MGQ5YWY0NGY2MzcwZWZmNTM0YzY1MzAzM2E3ODVhIjoiIjoxMjA6IjBjMWU1ZTljOGZlNWVkZmQxMWYxMTRmMzUwM2Q2MyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZlNzExNzdlMDIwNzNiMWM0MDdiNTcyNGUyMjYzYTVlIjoiIjoiODNjMjNkMjBkMmE5ZDRiOGY5MmRhOTY1ODdjOTZiMTgiOiIiOjEyMDoiNDNiMmNhNzk1NDIwZjM1ZjZjYjM5ZjVkZmE0N2EyIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjAyMzkyZmQ3ZjIyODg4OGMyODFlNTlkMWVhYTE1ZmIiOiIiOiIyNzI2MzQ0YmE4OTEyYzczN2UxOTU0MjRlMWU2Njc5ZSI6IiI6MTIwOiJhMTBiNjAxY2E4MDUzNTM2YTJhZjJjYzI1NWQyYjYiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMTg5NWNiYWZjMTZiN2I4YmY1ODY3ZTg4ZTA4NTNkNCI6IiI6ImY5ODdjZTEwMDVkOWJiZDMxZDI0NTJmYjgwOTU3NzUzIjoiIjoxMTI6Ijk1MmE3ZTI2NTgzMGQ1OGE2Nzc4ZDY4Yjk0NTAiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5YmI5NzQyYmY0N2Y2OGNhZjY0OTYzZDdjMTBhOTdiMCI6IiI6IjM0YTg1NjY5ZGU2NGUxY2Q0NDczMTkwNWZkZGJjYmM1IjoiIjoxMTI6ImU5YjZiZTkyOGFhNzdiMmRlMjhiNDgwYWU3NGMiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0ZTk3MDhlNGIzN2UyZTFiNWZlYWY0ZjVhYjU0ZTJhNiI6IiI6IjFjNTNhOWZkZDIzOTE5YjAzNmQ5OTU2MDYxOWE5OTM5IjoiIjoxMTI6IjY2MTFiNTBkNmZiY2E4MzA0N2Y5ZjVmZTE3NjgiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MmZlZGU3OWRiMjVmMDBiZTk2ZWIwNTBhMjJjZWE4NyI6IiI6ImU5YzUwYjUxN2FiMjZjODliODNjMWYwY2FjNTAxNjJjIjoiIjoxMDQ6ImQwYzBjZTlkYjYwYjc3YjBlMzFkMDVlMDQ4IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWQ5ODU2NmZjYTUyMDFhYmIxMjkxNDMxMWE4YmQ1MzIiOiIiOiI1OTBhZWY0YjQ2YTkwMjM0MDVkMDc1ZWRhYjdlNjg0OSI6IiI6MTA0OiJhMWNmZDFhMjdiMzQxZjQ5ZWRhMmNhODMwNSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMDM4NzcxODIwYzJlMTMxOWYwMmE3NGI4YTdhMGMwOCI6IiI6ImU1NTZkOWYwN2ZiNjlkN2U5YTY0NDI2MWM4MGZhYzkyIjoiIjoxMDQ6IjRkMmYwMDVkNjYyYjZhODc4N2YyMzFjNWUxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGZiN2VlZjUwZGU1OThkN2Q4YjUwOGQwMTlhMzBkNWEiOiIiOiJhMmEyNjE3MDQwMTE2YzJjN2U0MjM2ZDJkODI3ODIxMyI6IiI6OTY6IjY4NDEzYzU4ZGY3YmI1ZjA2NzE5N2NhMCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhjYzU4YjYwOTIwNDIxNWM4YWI0OTA4Mjg2ZTU2ZTVjIjoiIjoiZmI4M2VhNjM3Mjc5MzMyNjc3YjVmNjgwODExNzNlOTkiOiIiOjk2OiJhMmE5MTYwZDgyNzM5YTU1ZDhjZDQxOWYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MWE1ZmQxODQ3NDJhNDc4NDMyOTYzZjY0NzdlOGY5MiI6IiI6ImRhMjk3Y2JiNTNiMTFkN2MzNzllMDU2NjI5OWI0ZDVhIjoiIjo5NjoiMjAwYmVlNDk0NjZmZGRhMmYyMWYwMDYyIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjYwNGFjNjZkNjI2OTU5ZTU5NWNiYjdiNDEyOGUwOTYiOiIiOiIyNjlkMmE0OWQ1MzNjNmJiMzgwMDg3MTFmMzhlMGIzOSI6IiI6NjQ6IjQ2ODIwMGZhNDY4M2U4YmUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZTMwOGJhNzkwM2U5MjVmNzY4YzFkMDBmZjNlYjYyMyI6IiI6IjMzNWFjZDJhYTQ4YTQ3YTM3Y2ZlMjFlNDkxZjFiMTQxIjoiIjo2NDoiNDg3MmJmZDVlMmZmNTVmNiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTMwNGUyYTVhMzUyMDQ1NGE1MTA5ZGY2MWE2N2RhN2EiOiIiOiJkYmU4YjQ1MmFjZjRmYTE0NDRjMzY2OGU5ZWU3MmQyNiI6IiI6NjQ6IjgzYTBkMzQ0MDIwMGNhOTUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlY2YxZWMyYzlhOGYyZTljYzc5OWY5YjlmZGRiMzIzMiI6IiI6ImRkZjBiNjk1YWVmNWRmMmI1OTRmY2FhZTcyYjdlNDFjIjoiIjozMjoiMjgxOWFlZGYiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjlhYjVjOGNhOTA1YjVmZTUwNDYxZjRhNjg5NDExNDRiIjoiIjoiOTZkZDM5MjdhOTZlMTYxMjNmMmU5ZDZiMzY3ZDMwM2YiOiIiOjMyOiI2ZTBjNTNlZiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjVmYzdhZjYwNTcyMWE5Y2ZlNjFjMWVlNmE0YjNlMjIiOiIiOiI2Yjc1N2Q0MDU1ODIzZDEwMzVkMDEwNzc2NjYwMzdkNiI6IiI6MzI6ImU4YzA5ZGRkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjAzYzBiNGE2ZTUwOGE4NDkwZGIwZDA4NmE4MmM5ZGI3IjoiIjoiYWM1MmY2YzFhMDUwMzAzMjFmYTM5Zjg3ZTg5ZmRiNWUiOiIzMzMxNmNhNzlkMTBhNzlmNGZkMDM4NTkzZThlZWYwOTYyNTA4OWRjNGUwZmZlNGJjMWYyODcxNTU0ZmE2NjY2YWIzZTdmZTc4ODVlZGVmNjk0YjQxMDQ1NmYzZWMwZTUxM2JiMjVmMWI0OGQ5NWU0ODIwYzU5NzJjMWFhYmIyNWM4NGMwODU2NjAwMmRhZGMzNmRmMzM0YzFjZTg2ODQ3OTY0YTEyMjAxNmQzODlhYzg3M2JjYThjMzM1YTdhOTliY2VmOTFlMWI5ODVhZTVkNDg4YTJkN2Y3OGI0YmYxNGUwYzJkYzcxNWU4MTRmNGUyNDI3NjA1N2NmNjY4MTcyIjoxMjg6Ijc1NjI5MmQ4YjQ2NTM4ODdlZGVmNTE2NzliMTYxODEyIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIyMjhkM2QxNTIxOWVhOWFkNTY1MWZjZTAyYzgzNzRkIjoiIjoiNWM3ZWFmYWVhZDAyOWMzZmUzY2YzODM1ZmU3NThkMGUiOiI4YzM1ZGQ4MDVjMDg2ODZiOWI0ZDQ2MGY4MWI0ZGNiOGM0NmM2ZDU3ODQyZGMzZTcyYmE5MDk1MmUyYmViZjE3ZmU3MTg0NDQ1YjAyZjgwMTgwMGE5NDQ0ODZkNjYyYTEyN2QwMWQzYjdmNDI2NzkwNTJjZGM3M2NlNTMzMTI5YWY4ZDEzOTU3NDE1YzU0OTUxNDIxNTdkNmNlOGE2OGFhOTc3ZTU2ZjU2MmZlZDk4ZTQ2OGU0MjUyMjc2NzY1NmNlNTAzNjk0NzEwNjAzODFiYjc1MmRkNWU3N2M3OTY3N2E0Y2FkZmZhMzllNTE4ZTMwYTc4OWU3OTNiMDdlYTIxIjoxMjg6ImE0ZGRlMWFiOTNjODQ5MzdjM2JiYzNhZDUyMzc4MThkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc3NmFmY2JhYmVkZDU1NzdmZTY2MGE2MGY5MjBiNTM2IjoiIjoiNWJiYjdmMWIxNDA4NGU1MjA0MDhkZDg3Yjk3NzA1ZTkiOiI0NDYzMWZjOWQ0YTA3NDE2YjBkZmI0ZTJiNDIwNzFlM2UyYmU0NTUwMmM5ZGRmNzJiM2U2MTgxMGVlZGEzMWE3ZDY4NWViYjJlZTQzYTJjMDZhZjM3NDU2OWY0MzllZTE2NjhjNTUwMDY3ZGUyZGVjZTllYzQ2ZWU3MmIyNjA4NThkNjAzM2Y4MTRlODUyNzVjNWFlNjY5YjYwODAzYThjNTE2ZGUzMjgwNGZhMzRkM2EyMTNjY2ZhZjY2ODkwNDZlMjVlZWIzMGI5ZTE2MDhlNjg5ZjRkMzFjYzY2NGI4M2E0NjhhNTExNjVmNTYyNWYxMmYwOThhNmJmN2RkYWIyIjoxMjg6ImE1MzQ3ZDQxZDkzYjU4NzI0MDY1MWJjZDUyMzAyNjRmIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjIwYWJlYWZhMjVmYzRlYTdkMDU5MmNiM2U5YjRkNWZlIjoiIjoiM2FiYTc5YTU4YzVhYTY2NDg1NmI0MWQ1NTJjN2E4ZDMiOiI5OGNmZWNhYWU5ZWI5YTdjM2IxN2U2YmM1ZjgwZDhhNGJmN2E5ZjRmYTVlMDFiNzRjYWUxNWVlNmFmMTQ2MzMyMDVhYWZlM2IyOGZiN2I3OTE4ZTEyMzIyZWEyNzM1MjA1NmE2MDM3NDZkNzI4YTYxMzYxMTM0YTU2MTYxOTQwMGZmMmJmNjc5MDQ1YmFjMmUwZmJjMmMxZDQxZjhmYWJhNGIyN2M3ODI3YmNlZGE0ZTliZjUwNWRmNDE4NTUxNWRkM2E1ZTI2Zjc2MzljOGFkNWEzOGJjNTkwNmE0NGJlMDYyZjAyY2M1Mzg2MjY3OGFlMzZmYTNkZTNjMDJjOTgyIjoxMjA6IjJhNjdhZDE0NzFhNTIwZmUwOWEzMDRmMDk3NWYzMSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyYmM3M2ZiYTk0MmZmMTA1ODIzYjVkY2NmNmJlZmIxYyI6IiI6IjkwMmMzZTNiNjliMWVmODM5NWQ3MjgxZmY3NGNjZTM4IjoiNGFkZWMwYjRhYzAwMzI1YTg2MDA0NGQ5Zjk1MTlkYWE0ZjdjMTYzMjI5YTc1ODE5YjBmZDdkOGUyMzMxOWYwMzBlNjFkZmE4ZWFkYWJmZjQyZWEyN2JjMzZiZGI2Y2FkMjQ5ZTgwMWNhNjMxYjY1NjgzNjQ0OGI3MTcyYzExMTI2YmFkMjc4MWU2YTFhYTRmNjJjNGVkYTUzNDA5NDA4YjAwOGMwNTdlMGI4MTIxNWNjMTNkZGFiYmI4ZjE5MTVmNGJiYWI4NTRmOGIwMDc2M2E1MzBhZDUwNTVkMjY1Nzc4Y2QzMDgwZDBiZDM1Yjc2YTMyOWJkZDViNWEyZDI2OCI6MTIwOiJlYmRkN2M4ZTg3ZmU3MzMxMzhhNDMzNTQzNTQyZDEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzNTZhNGMyNDU4NjgyNDNkNjE3NTZjYWJlODZkYTg4NyI6IiI6ImI0NDJmMmVjNmQ0NWExNzE0NGMyNThmZDU5ZmU1YjNiIjoiMTJjY2NjM2M2MDQ3NGIwYTE1NzljNTAwNmMyMTM0ODUwNzI0ZmE2YzlkYTNhNzAyMmQ0ZjY1ZmQyMzhiMDUyYmRmMzRlYTM0YWE3ZGJhZGFkNjQ5OTYwNjVhY2VlNTg4YWI2YmQyOTcyNmQwN2VkMjRmZmFlMmQzM2FhZGYzZTY2ZWJiODdmNTdlNjg5ZmQ4NTEyOGJlMWM5ZTNkODM2MmZhZDFmODA5NmVlMzkxZjc1YjU3NmZiMjEzZDM5NGNlZjZmMDkxZmM1NDg4ZDlhYTE1MmJlNjk0NzViOTE2N2FiZDZkZDRmZDkzYmJiYzdiOGNhMzE2Yzk1MmViMTljNiI6MTIwOiJlZDI2MDgwZGNiNjcwNTkwNjEzZDk3ZDdjNDdjZjQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGZhN2U5M2FmZjczNjAwZmM1NTIzMjQyNTMwNjZlMmMiOiIiOiJjMjAwMDFlOTNmMWNkMDUyNTNjMjc3YTk0NDVkNjFlNCI6ImE2NGQxZTIwMDU4YTFmN2U2OTg2MjJhMDJmN2ZmOGRjMTE4ODY3MTdlZGUxN2JiZGMzYzQ2NDVhNjZhNzFkOGIwNDM0NmZiMzg5YTI1MWZmYjBhN2Y0NDVhMjVmYWY2NDJiYjdlNDY5N2QyY2FjZjkyNWU3OGM0YmU5ODQ1Nzk5NmFmYjI1YjA1MTZiNTBmMTc5NDQxZDE5MjMzMTIzNjQ5NDdmOGYxZTBmNTcxNWI0M2JkNTM3NzI3YmY5NDNkN2I0Njc5YjBiMGIyOGI5NGU1NmU3YmJmNTU0ZDljZjc5ZmNlZTQzODdmMzJiYjZmOTFlZmRkMjM2MjAwMzViZTYiOjExMjoiNmJhNWU0ZGFjZTlhNTRiNTBiOTAxZDliNzNhZCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJlY2VhODBiNDhkMmVjZDE5NGE3Njk5YWE3ZDhjY2ZjIjoiIjoiOGI0ZGIwOGJhZmMyM2I2NWFlNTBhMmQyMDY2MWQyNzAiOiJlZmMyY2ExYTNiNDFiOTBmOGRkZjc0MjkxZDY4ZjA3MmE2ZTAyNWQwYzkxYzNjZTJiMTMzNTI1OTQzYzczZWJhZGM3MWYxNTBiZTIwYWZlYjA5NzQ0MmZhNTFiZTMxYTY0MWRmNjVkOTBlYmQ4MWRjYmFmMzI3MTFlZDMxZjVlMDI3MTQyMTM3N2ZmZTE0ZGRhZmVhM2NhNjBhNjAwNTg4ZDQ4NDg1NmE5OGRlNzNmNTZhNzY2YWU2MGJhZTM4NGE0YWUwMWExYTA2ODIxY2YwYzdhNmI0ZWU0YzhmNDEzNzQ4NDU3YjM3NzcyODNkMzMxMDIxOGZiNTVjMTA3MjkzIjoxMTI6IjI0NmE5ZDM3NTUzMDg4YjY0MTFlYmI2MmFhMTYiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMzhmZWUzZmQzZDZkMDgyMjRjM2M4MzUyOWEyNWQwOCI6IiI6ImE5NDJjY2IxMWNmOTQ2ODE4NmZhYmZjMThjODk5ODAxIjoiMWM5MmE0Y2UwYTFkYWUyN2U3MjBkNmY5YjFlNDYwMjc2NTM4ZGU0MzdmMzgxMmFiMTE3N2NmMDI3M2IwNTkwOGYyOTZmMzNiYTBmNGM3OTBhYmUyY2U5NThiMWQ5MmI5MzBhMGQ4MTI0M2U2YWQwOWVmODZlZThlMzI3MDI0MzA5NTA5NjUzN2NiMTA1NGZjZmNmNTM3ZDgyOGI2NWFmOWI2Y2Y3YzUwZjViODQ3MGY3OTA4ZjMxNGQwODU5MTA3ZWVkNzcyZWUxNzMyYzc4ZThhMmUzNWIyNDkzZjNlOGMxZTYwMWIwOGFlYWI4ZDk3MjllMDI5NGRjYTE2OGM2MiI6MTEyOiI4MDNhMDg3MDBlYzg2ZmRlYjg4ZjdhMzg4OTIxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE4OTliMGNiYWU0MWQ3MDVjNmVlZDMyMjZhZmI1YmMwIjoiIjoiODJkMDkxMGFhNTNlMzAwYTQ4N2Q4ODBkMDE4ZDBkZWEiOiI2YmY1NTgzY2MxMDA3ZDc0ZjM1MjlkYjYzYjhkNGUwODU0MDBjY2YzNzI1ZWFiOGUxOWNiMTQ1ZjM5MTBjNjE0NjVhMjE0ODY3NDBhMjZmNzQ2OTE4NjZhOWY2MzJhZjlmYWU4MWY1ZjBiZmZlZGYwYzI4YTZjZTBmZDUyMGJiNGRiMDRhM2NkMWE3ZDI5ZDg4MDFlMDVlNGI5YzkzNzRmZDg5YmNiNTM5NDg5YzJmN2YxZjgwMWMyNTNhMWNjNzM3NDA4NjY5YmNkMTMzYjYyZGEzNTdmNzM5OWE1MjE3OTEyNWFhNTlmYWU2NzA3ZDM0MDg0Njg4NmQ3MzBhODM1IjoxMDQ6ImM1ZDU4ODcwZmVlOWNlMTU3ZjVlYzFmYThmIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGI5NTMyM2Q4NmQwMjc1NGY0YzI4NzRiNDJlYzZlYjAiOiIiOiI0Zjc2MDg0YWNiZGVmOTk5OWM3MWRjYzc5NDIzOGQ3YyI6ImViYzc1Nzg4Mzc3YzBiMjY0ODE4YTZmOTdjMTljZjkyYzI5ZjFjN2NkZWI2YjVmMGE5MmQyMzhmYTQ2MTRiYzM1ZDBjZmU0ZWM5ZDA0NWNkNjI4ZmY2MjYyYzQ2MDY3OWFjMTViMGM2MzY2ZDkyODliYmQyMTdlNTAxMjI3OWUwYWYwZmIyY2ZjYmRmNTFmZTE2OTM1OTY4Y2JiNzI3ZjcyNWZlNWJjZDQ0Mjg5MDU4NDk3NDZjODQ5MzYwMGNlOGIyY2ZjMWI2MWIwNGM4Yjc1MmI5MTVmZWQ2MTFkNmI1NGVmNzNlYzRlMzk1MGQ2ZGIxODA3YjFjZTdlZDFkY2MiOjEwNDoiYzQ3MjRmZjFkMmM1NzI5NWViNzMzZTljYWQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzBkYTU1NTU1OWViMTFjZjdlMGVmZjlkOTllOTYwN2QiOiIiOiI3Nzk5Mjc1YmYxMjMzNWYyODFlYzk0YTg3MGY5MGEwYiI6ImU3MzVkNTU2ZTE1YWVjNzhkOTczNjAxNmM4Yzk5ZGI3NTNlZDE0ZDRlNGFkYWFhMWRkN2VhYWQ3MDJlYTVkYzMzNzQzM2Y4YzJiNDVhZmRmMmYzODVmZGY2YzU1NTc0NDI1NTcxZTA3OWNhNzU5YjYyMzVmODc3ZWQxMTYxOGZmMjEyYmFmZDg2NWEyMmI4MGI3NmIzYjVjZjFhY2ZkMjRkOTJmZDQxNjA3YmJiNzM4MmYyNmNkNzAzNzU3MDg4ZDQ5N2IxNmIzMmRlODBlMTI1NmM3MzRhOWI4MzM1NmI2ZmNlZDIwNzE3N2RlNzU0NTg0ODFlYWVmNTlhNDMxZDciOjEwNDoiM2M4MjI3MjEzMGUxN2M0YTBhMDA3YTkwOGUiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVkMmFjNzRhZjg5NmM1MTkwYzI3MWNmYTZhZjAyZmQyIjoiIjoiZTAyMjZlMmQ4ZGE0N2JhZGFkMWZiNzhiOWE3OTdmMjciOiI4ZjExMzUzYWU0NzZmZjkyMzAxM2U2ZTczNmZmYzlkMjMxMDFhMWM0NzFjY2MwN2FkMzcyYTg0MzBkNjU1OWMzNzYwNzVlZmNlMmUzMThjZGY0Yzk0NDNkYmYxMzJlN2U2ZGE1NTI0MDQ1MDI4Yzk3ZTkwNDYzM2I0NGM0ZDE4OWE0YjY0MjM3YWM3NjkyZGQwM2MwZTc1MWNlOWYwNGQwZmRiZDhhOTYwNzRjZDdkZmEyZmQ0NDFhNTIzMjhiNGFjMzk3NGI0OTAyZGI0NTY2M2Y3YjZmMjQ5NDdkYmE2MThmOGI5NzY5ZTkyN2ZhZjg0YzlmNDlhZDgyMzliOWZiIjo5NjoiZGI4YWY3YTBkNTQ4ZmM1NGQ5NDU3YzczIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMjI1YjczZmU1ZmJiZTUyZjgzOGQ4NzMxNzM5NTlkOCI6IiI6IjAyYTA0ODc2NGY0OGQ5YWVkMTE0N2VlOTIyMzk1YmJmIjoiOWI0NmE1N2IwNmUxNTZjODc3ZTk0YzA4OTgxNDQ5M2VhZDg3OTM5N2RhYjNkZmNhYjJkYjM0OWVmMzg3ZWZjZDBjYzMzOWE3ZTc5MTMxYTJjNTgwMTg4ZmM3NDI5MDQ0YTQ2NWI4MzI5ZDc0Y2Q4ZjQ3MjcyYTRlZDMyNTgyYjFjNWM3ZTNkMzIzNDFhZTkwMmVhNDkyM2RjMzNkZjgwNjJiYzI0YmI1MWExMWQyZWNjODJmNDY0ZjYxNTA0MTM4N2Y5YzgyYmQyMTM1ZDRlMjQwZmU1NmZhOGE2OGU2YTlhNDE3ZTY3MDI0MzBhNDM0YjE0ZDcwY2YwMmRiMzE4MSI6OTY6ImUyYzJjZTQwMjJjNDlhOTVjOWFjOTAyNiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg5Y2EzNzcxYTBlZjMyODc1NjhiNGFjMDM2MTIwMTk4IjoiIjoiN2U4M2QyZmZhOGFmOGM1NTRjZmQ3MWEwZGI1NmVmNWIiOiIxYmQ3YTlkNjI2Mjg4MmJkMTJjNjJiZDUwOTQyOTY1YjNjZGNhZGY1ZTBmYWIyZGM0ZDBkYWYwZWU0YjE2ZTkyYzZlMjQ2NGMwY2FhNDIzY2RjZTg4ZTRkODQzNDkwNjA5NzE2ZWM1ZTQ0YzQxNjcyYzY1NmFjMGU0NDRkMzYyMjU1N2VhODQyMGM5NGRlYWUzYWQxOTBkZGFmODU5ZjZmOGMyM2U0ZTJlMzJhNDZkMjhkZjIzZGU0Zjk5YmQ2YzM0ZjY5ZTA2ZWRkZmRmYTVmMjYzZGJlOGJhZjlkNDI5NmIyYzU0M2U0YzQ4NDcyNzFlNzU5MDM3NGVkZjQ2MjM0Ijo5NjoiMDZiMmJmNjI1OTFkYzdlYzFiODE0NzA1IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNDFhMjk3YmQ5NmUyMjQ5NDI5OThmZTIxOTI5MzRhMSI6IiI6IjY4MjdmMmM1YTBiN2VjZDZiYmM2OTZhYmIwYWRmNTU2IjoiZjMyMDQxYWJkODU0MzQxNWNiYWM0MjNkOTQ1ZGRhNTM3OGExNmE3ZTk0ZDlhYjVkYmQyZDMyZWIxYzUwNDhjYzdjOGU0ZGYzY2E4NGVjNzI1ZjE4YzM0Y2ZkZWFhNzU5NTM5MmFhYmZkNjZkOWUyZjM3YzExNjUzNjljZDgwNmNkOWQyMTEwZGVmNmY1ZmFkNDM0NWU1YTZlMjMyNmM5MzAwMTk5NDM4ZmNjMDc4Y2Q5ZmNmNGQ3Njg3MmNhYzc3ZmM5YTBhOGFjN2U0ZDYzOTk1MDc4YTlhZGRlY2Y3OTg0NjBmZjU5MTA4NjFiNzZjNzFiY2NmYjZiNjI5ZDcyMiI6NjQ6IjQ5YTQ5MTdlZWY2MWY3OGUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhOTM3MmMwNThmNDJlMGExZDAxOWJkYjUyODMxMzkxOSI6IiI6IjhkMDNmNDIzMjMwYzhmMDBhNWI2YjcxMmQ0MjZhMmFmIjoiY2ZlZjRlNzBmY2MxODIxZWVjY2Y3YzdiNWViM2MwYzNiNWY3MmRjNzYyNDI2ZTBiZDI2MjQyZjhhYTY4YzViNzE2YWI5N2VkZWQ1ZTU3MjBjYWNjYzE5NjVkYTYwM2Q1NTZkODIxNGQ1ODI4ZjJjZjI3NmQ5NWJmNTUyZDQ3MzEzODc2Nzk2MjIxZjYyY2NiODE4YTZkODAxMDg4NzU1ZDU4Y2ZiNzUxYmZlZDBkNWExOTcxOGQ0ZTBmOTRiODUwZTAyNzliM2E2OTI5NWQxODM3Y2JhOTU4YTZjYzU2ZTc1OTQwODBiOWU1Yjk1NGExOTlmZGM5ZTU0ZGRjODU4MyI6NjQ6ImI4MmNkMTFjZDM1NzVjOGQiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYzMDJiNzMzOGY4ZmE4NDE5NWFkOWFiYmFjZDg5YjRlIjoiIjoiZTFiZWQ1YzUzNTQ3Y2JjODVmMzQxMWZiYjQzYmIwOGIiOiJiY2QzMjljMDc2ZThkYTI3OTdkNTBkY2RjZjI3MWNlY2YzY2UxMmYzYzEzNmVkNzQ2ZWRjNzIyZjkwN2JlNjEzMzI3NmVlMDk5MDM4ZmRjNWQ3M2VlYzgxMjczOWM3NDg5ZDRiY2MyNzVmOTU0NTFiNDQ4OTA0MTZlM2ZmZTVhMWI2ZmEzOTg2Yjg0ZWVlM2FkYWQ3NzRjNmZlYWVjYjFmNzg1MDUzZWVkYTJjZmMxODk1M2I4NTQ3ODY2ZDk4OTE4ZGJlMGE2YWJjMTY4YWM3ZDc3NDY3YTM2N2YxMWMyODQ5MjRkOWQxODZlZjY0ZWYwZmQ1NGVhY2Q3NTE1NmQyIjo2NDoiNTIyMmQwOTJlOWU4YmQ2YyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzhiNWMyOGQ2MmU0YjIwOTc4NzNhMTE4MGJkNWEzYTUiOiIiOiJjOTM5MDJjMjgxOWVlNDk0ZjBmYzRiMjU5ZWU2NWRkOCI6ImU2YjExOTI2NzRhMDIwODNhNmNmMzZkNGJhOTNiYTQwYTUzMzFmYWRmNjNmZDFlYjJlZmEyZWU5YzBkODgxODQ3MmFhYWYyYjQ3MDU3NDYwMTE3NTNmMzBmNDQ3YzhmNThkZDM0ZDI5NjA2ZGFmNTdlYWRjMTcyNTI5ODM3MDU4Y2I3OGEzNzhiMTlkYThkNjNjMzIxZjU1MGRmYTI1NmI1ZmQ5ZjMwZTkzZDhmMzc3NDQzYmZjZDEyNWY4NmEwNzlhMTc2NWQyMDEwYmU3M2QwNjBmMjRlZWJhZThkMDVlNjQ0Njg4YjIxNDliYzM5ZTE4YmQ1MjdiYzA2NmYyYmEiOjMyOiJlYWU0ODEzNyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2Q4NDEzMDU3ODA3MGUwMzZjOWUzZGY1YjU1MDk0NzMiOiIiOiIzYjliNDk1MDUyM2ExOWM2ODY2ZmQyYjBjZGU1NDFmZCI6ImE3NjQ5MzFlMWIyMWExNDBjNTRhODYxOWFhY2RiNDM1ODgzNDk4N2ZiNmUyNjNjZWM1MjVmODg4ZjllOTc2NGMxNjVhYWE3ZGI3NGYyYzQyMjczZjkxMmRhZWFlNmQ3MmIyMzJhODcyYWMyYzY1MmQ3Y2QzYWYzYTU3NTNmNTgzMzFjMTFiNmM4NjY0NzU2OTc4NzZkYmM0YzZjYTBlNTJhMDBiYTAxNWVlM2MzYjdmYjQ0NGM2ZTUwYTRiNGI5YmJlMTM1ZmMwNjMyZDMyYTNmNzlmMzMzZDhmNDg3NzcxZWQxMjUyMmU2NjRiOWNmOTBlNjZkYTI2N2Y0N2E3NGQiOjMyOiI3OTk4NzY5MiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDg0Mjg2MDVhYjQ3NDJhM2U4YTU1MzU0ZDQ3NjQ2MjAiOiIiOiIxMjhmNWY0YTgxN2U0YWYwNDExMzg0N2EyMjNhZGViMCI6IjQ2NGI0ODRlZDc5ZDkzYTQ4ZTBmODA0ZTA0ZGY2OWQ3Y2ExMGFkMDRiYTcxODhkNjllNjU0OWFiNTA1MDNiYWFlYzY3ZTBhY2JhNTUzN2QxMTYzYzg2OGZkM2UzNTBlOWQwYWU5MTIzMDQ2YmM3NjgxNWMyMDFhOTQ3YWE0YTdlNGVkMjM5Y2U4ODlkNGZmOWM4ZDA0Mzg3N2RlMDZkZjVmYzI3Y2Y2NzQ0MmI3MjliMDJlOWMzMDI4N2MwODIxZWY5ZmExNWQ0Y2NjYmM1M2E5NWZhOWVjM2VkNDMyY2E5NjBlYmJmNWExNjljY2FkYTk1YTViZjRjN2M5Njg4MzAiOjMyOiIzZWIzZTNhMiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBkZDM1OGJjM2Y5OTJmMjZlODFlM2EyZjNhYTJkNTE3IjoiODdjYzRmZDc1Nzg4YzlkNWNjODNiYWU1ZDc2NGRkMjQ5ZDE3OGFiMjMyMjQwNDk3OTVkNDI4OGI1ZWQ5ZWEzZjMxNzA2OGEzOWE3NTc0YjMwMGM4NTQ0MjI2ZTg3YjA4ZTAwOGZiZTI0MWQwOTQ1NDVjMjExZDU2YWM0NDQzN2Q0MTQ5MWE0MzgyNzI3Mzg5NjhjOGQzNzFhYTc3ODdiNWY2MDZjODU0OWE5ZDg2OGQ4YTcxMzgwZTk2NTdkM2MwMzM3OTc5ZmViMDFkZTU5OTFmYzE0NzBkZmM1OWViMDI1MTFlZmJiZmYzZmNiNDc5YTg2MmJhMzg0NGEyNWFhYSI6ImQ4Yzc1MGJiNDQzZWUxYTE2OWRmZTk3Y2ZlNGQ4NTViIjoiIjoxMjg6ImE4MWQxMzk3M2JhYTIyYTc1MTgzM2Q3ZDNmOTRiM2IxIjoiNzc5NDliMjlmMDg1YmIzYWJiNzFhNTM4NjAwMzgxMTIzMzA1NmQzMjk2ZWIwOTMzNzBmNzc3N2RhZGQzMDZkOTNkNTlkY2I5NzU0ZDM4NTdjZjI3NTgwOTFiYTY2MWY4NDVlZjA1ODJmNmFlMGUxMzQzMjgxMDZmMGQ1ZDE2YjU0MWNkNzRmZGM3NTZkYzdiNTNmNGY4YTE5NGRhZWVhOTM2OWViYjE2MzBjMDFjY2IzMDdiODQ4ZTk1MjdkYTIwYTM5ODk4ZDc0OGZkNTkyMDZmMGI3OWQwZWQ5NDZhODk1ODAzM2E0NWJkOWFlNjczNTE4YjMyNjA2NzQ4ZWI2NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQzYjVmMTgyMjdlNWM3NDI4OGRiZWZmMDM4MDFhY2Q2IjoiZjU4ZDYzMGYxMGNmY2E2MWQ0NjQ0ZDRmNjUwNWJhYjYyOWU4ZThmYWYxNjczZTY0NDE3ZjliNzllNjIyOTY2YTcwMTFjZmIzZmY3NGRiNWNlYmYwOWFkM2Y0MTY0M2Q0NDM3ZDIxMzIwNGE2YzgzOTdlN2Q1OWI4YTViMTk3MGFlZDJiNmJiNWVhMTkzM2M3MmMzNTFmNmJhOTZjMGIwYjk4MTg4ZjZlMzczZjVkYjZjNWViZWNlOTExZWM3YTE4NDhhYmQzYWUzMzU1MTVjNzc0ZTAwMjdkYWI3ZDFjMDdkMDQ3ZDNiODgyNWZmOTQyMjJkYmFmNmY5YWI1OTdlZSI6IjA4ZWUxMjI0NmNmN2VkYjgxZGEzZDYxMGYzZWJkMTY3IjoiIjoxMjg6IjgyZDgzYjJmN2RhMjE4ZDFkMTQ0MWE1YjM3YmNiMDY1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjlhNDMzYzYxMmQ3ZTFiZGZmODgxZTRkNjNiYThiMTQxIjoiY2UxMDc1ODMzMmY0MjMyMjhiNWU0YWUzMWVmZGE3Njc3NTg2OTM0YTFkOGYwNWQ5YjdhMGRjNGUyMDEwZWMzZWFhY2I3MWE1MjdhNWZmZjhlNzg3ZDc1ZWJkMjRhZDE2MzM5NGM4OTFiMzM0NzdlZDllMmEyZDg1M2MzNjRjYjFjNWQwYmMzMTdmY2FmNDAxMDgxN2RiZTVmMWZkMTAzN2M3MDFiMjkxYjNhNjZiMTY0YmM4MThiZjVjMDBhNGMyMTBhMTY3MWZhYTU3NGQ3NGM3ZjM1NDNmNmMwOWFhZjExN2UxMmUyZWIzZGFlNTVlZGIxY2M1YjQwODZiNjE3ZCI6IjhiNjcwY2YzMWY0NzBmNzlhNmMwYjc5ZTczODYzY2ExIjoiIjoxMjg6Ijg1MjZmZDI1ZGFmODkwZTc5OTQ2YTIwNWI2OThmMjg3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhlOWQ3NWM3ODFkNjNiMjlmMTgxNjg1OWY3YTBlMGEwIjoiYTlmMTg4M2Y1OGU0ZWY3ODM3Nzk5MjEwMWFiODZkYTBkYWZjZWZhODI3OTA0ZGQ5NGRmZjZmNjcwNGIxZTQ1NTE3MTY1YTM0YzU1NTVhNTViMDRjNjk5MmZiNmQwODQwYTcxYmQyNjJmZTU5ODE1ZTVjN2I4MGZlODAzYjQ3ZDViYTQ0OTgyYTNmNzJjYjQyZjU5MWQ4YjYyZGYzOGM5ZjU2YTU4NjhhZjhmNjgyNDJlM2ExNWY5N2JlOGVmMjM5OWRiYWNlMTI3M2Y1MDk2MjNiNmY5ZTRkMjdhOTc0MzZhZWJmMmQwNDRlNzVmMWM2MjY5NGRiNzdjZWFjMDVkZSI6Ijc0OGEzYjQ4NmI2MmExNjRjZWRjZjFiYWI5MzI1YWRkIjoiIjoxMjA6IjEzMWUwZTRjZTQ2ZDc2ODY3NGE3YmNhY2RjZWY5YyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmZTZiODU1MzAwMmM2OTM5NmQ5OTc2YmI0OGQzMDc3OSI6Ijc4NmY0ODAxYjE2ZGU3YTQ5MzFhYjE0M2IyNjljN2FjYzY4ZjFlZDliMTdhOTVlODkyOWNjZWM3ZDUzNDEzMDU5ZmQ0MjY3YmVkYmYwNzlkOWQ2OWU5MDMxNGMxMzQ1YmM5Y2I5MTMyZjFhZjY5MzIzMTU3ZGRmNzUzM2NlZDQyYjRiN2JkMzkwMDRmMTRkMzI2ZjViMDNiYzE5MDg0ZDIzMWQ5M2JjYWIzMjgzMTJkOTliNDI2YzFlODZlOGUwNDlkMzgwYmI0OTJlMmUzMmFkNjkwYWY0Y2Y4NjgzOGQ4OWEwZGZkY2JjMzBlOGM5ZTkwMzllNDIzYTIzNGUxMTMiOiI1OTViMTdkMGQ3NmI4Mzc4MDIzNWY1ZTBjOTJiZDIxZiI6IiI6MTIwOiI4ODc5ZGUwNzgxNWE4ODg3N2IwNjIzZGU5YmU0MTEiOiJiMTVkYzdjZDQ0YWRjYjA3ODNmMzBmNTkyZTVlMDNjY2Q0Nzg1MTcyNWFmOWZlNDViZmM1YjAxYWUzNTc3OWI5YThiM2YyNmZlYzQ2OGIxODhlYzNjYWQ0MDc4NWM2MDhkNmJmZDg2N2IwY2NmMDdhODM2ZWMyMGQyZDliODQ1MTYzNmRmMTUzYTMyYjYzN2U3ZGNkYmQ2MDY2MDNkOWU1M2Y2ZTRjNGNjODM5NjI4NmNlNjRiMGVhNjM4YzEwZTVhNTY3YzBiYzhlODA4MDgwYjcxYmU1MTM4MWUwNTEzMzZlNjBiZjE2NjNmNmQyZDc2NDBhNTc1ZTA3NTI1NTNiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTQ4OThjNTYwMDliNDU5MTcyZmVmOWMxNzk5M2I1NGYiOiJlN2JhNmVmNzIyMjczMjM4Yjk3NWQ1NTFmOTVkM2U3N2U5Yjc1YjI0YzU0N2I4NmVhZmI0NTdkNDA5ODAzYmRmNmUxNDQzODM5ZDg2MDRlZTQ5NzAyMGUxYTNkYmQ2ODdhODE5YjE3ZmRkZTBmY2YyNDBjZTIxMjk3OTI3OTJhNThiZmNkODI1NzczMDAxZWU5NTliZjllYzhkMjI4ZTI3Y2UxY2Q5M2Q3ZmI4Njc2OWEzNzkzMzYxYjZmODJiZjdkYWYyODRhZmMxZWNlNjU3YTFlZTYzNDZlYTkyOTQ4ODA3NTViOWI2MjM1NjNhZDI2NTdiYTIyODY0ODhhMmVmIjoiMDg2MmY4Zjg3Mjg5OTg4NzExYTg3N2QzMjMxZDQ0ZWIiOiIiOjEyMDoiMzY5Mzg5NzQzMDFhZTczMzc2MGY4MzQzOTQzN2M0IjoiM2ZkNTY4OTdhNjI3NDNlMGFiNGE0NjViY2M5Nzc3ZDVmZDIxYWQyYzlhNTlkN2U0ZTFhNjBmZWNjZGM3MjJiOTgyMGVjNjVjYjQ3ZTFkMTE2MGQxMmZmMmVhOTNhYmUxMWJjMTAxYjgyNTE0ZWFkN2Q1NDIwMDdmZWU3YjRlMmRkNjgyMjg0OWNkM2U4MmQ3NjFmZjdjZjVjZTRmNDBhZDlmZWM1NDA1MGE2MzJhNDAxNDUxYjQyNjgxMmNmMDNjMmIxNmE4NjY3YTg4YmIzZjc0OTdlMzMwOGE5MWRlNmZkNjQ2ZDZhMzU2MmM5MmMyNDI3MjQxMTIyOWE5MDgwMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZlNTI1M2Q0YjA3MTc5M2IwODFlYmMxMjJjYzJhNWY4IjoiYjU3YTBiZDc3MTRhZTk1ZTc3ZmE5NDUyZTExYTdlZDRhMmJlYzYwZjgxYWQ2ZGRiOTU2ZDRiMWNiNWRmYzI3N2RjYjQwMzRkNTAxODAxYjI2NzMzYjVlMDhjNzEwYzNjZmRjY2MxYjIwOGRjN2E5MmNkN2ViZTE2NjMyMDU4MmJjYWZmNjRjYzk0M2MzNmZiZTcwMDhmMDA0ZTVkYjcwYzQwZGUwNWZhNjhiMGM5ZDRjMTZjOGY5NzYxMzBmMjA3MDJiOTk2NzRjZDJmNGM5M2FlYWViM2FiY2E0YjExMTRkYmMzYTRiMzNlMTIyNmFkODAxYWEwZTIxZjdjYzQ5YiI6IjQ5ZTgyZDg2ODA0ZTE5NjQyMWVjMTlkZGM4NTQxMDY2IjoiIjoxMTI6ImU4YjhhZTM0Zjg0MjI3N2ZlOTI3MjllODkxZTMiOiJjNGEzMWM3ZWM4MjA0NjlmODk1ZDU3NTc5Zjk4NzczMzMzN2VjNjU0N2Q3OGQxN2M0NGExOGZhYjkxZjAzMjJjZmUwNWYyM2Y5YWZhZjAxOWNmOTUzMWRlYzJkNDIwZjM1OTFkMzM0ZjQwZDc4NjQzZmQ5NTdiOTFhYjU4OGE3ZTM5MjQ0N2JkNzAyNjUyMDE3ZWRlN2ZiMGQ2MWQ0NDRhM2IzY2M0MTM2ZTFkNGRmMTNkOTUzMmViNzFiY2YzZmYwYWU2NWU4NDdlMWM1NzJhMmY5MDYzMjM2MmJjNDI0ZGEyMjQ5YjM2YTg0YmUyYzJiYjIxNmFlNzcwOGY3NDVjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjM1MDJkNmYwZDE3MjI0NmUxNjUwM2NkZjU3OTMyOTYiOiIwOTI2OGI4MDQ2ZjE1NTg3OTRlMzVjZGM0OTQ1Yjk0MjI3YTE3NmRkOGNiNzdmOTJmODgzNTQyYjFjNGJlNjk4YzM3OTU0MWZkMWQ1NTdjMmEwN2M3MjA2YWZkZDQ5NTA2ZDZhMTU1OTEyM2RlMTc4M2M3YTYwMDA2ZGYwNmQ4N2Y5MTE5ZmIxMDVlOWIyNzhlYjkzZjgxZmQzMTZiNmZkYzM4ZWY3MDJhMmI5ZmVhYTg3OGEwZDFlYTk5OWRiNGM1OTM0MzhmMzJlMGY4NDlmM2FkYWJmMjc3YTE2MWFmYjVjMWMzNDYwMDM5MTU2ZWVjNzg5NDRkNTY2NmMyNTYzIjoiNmNlOTk0Njg5ZmY3MmY5ZGY2MmYzODZhMTg3YzFhMTMiOiIiOjExMjoiMjFjZGY0NGZmNDk5M2ViNTRiNTVkNThlNWE4ZiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ZmIzM2RkNzNkYjMwOWI5ZGZkM2FlZTYwNWNkOTRiZiI6ImY0ZTAxMWY4Yzk5MDM4YzQ2ODU0YjQyNzQ3NWYyMzQ4ODA3N2ViZjA1MWM0YjcwNWExYWRmZGQ0OTNhMGExMGFmN2E3ZTk0NTM5NjViOTRmNTJmNjFhZTYyY2U5MjQzYTgyYTJkYmY5YzVhMjg1ZGIzZmUzNGVkMzRlZDA4YjU5MjZmMzRjNDgxNzExOTVmNzA2MmQwMmE2ZTZlNzk1MzIyYTA0NzUwMTczNzFjYjhmNjQ1Y2RjYWM5NGFmYzY2ZGM0M2U3NTgzYmRmMWMyNTc5MGY0MjM1MDc2YTUzZGU2YzY0ZjNiYzUwMDRlNWE5Y2U0NzgzZmJmNjM5ZmFkOTciOiIzZjY0ODZmOWU5ZTY0NTI5MmUwZTQyNWJhYzIzMjI2OCI6IiI6MTEyOiI3ZWU1ZTBlMjA4MmIxOGQwOWFiZjE0MWY5MDJlIjoiMDUwM2NiNTMxZjFjOTY3ZGFlMjRmMTZkZDY1MWQ1NDQ5ODhhNzMyMDIwMTM0ODk2YTBmMTA5MjIyZTg2MzliZjI5ZmY2OTg3N2M2ZWY0YWMzZGYxYjI2MDg0MmY5MDkzODRlM2Q0NDA5Yjk5YTQ3MTEyNjgxYzRiMTc0MzAwNDFjYTQ0N2E5MDNhNmMxYjEzOGYwZWZiYjNiODUwZDgyOTBmY2VhYzk3MjNhMzJlZGJmOGUyZDZlODE0M2IxY2JjN2JmMmQyOGQxYjZjN2YzNDFhNjk5MTg3NThjYzgyYmJhYjVkODk4ZmEwZjU3MmQ0Y2VhYTExMjM0Y2I1MTFlYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE5NThmZTNiNTIwMDgxYjYzOGQ5ZTRjN2Q1ZGE3YWM3IjoiZGZhOTQ4NzM3OGM3ZDhhZjljOGRiZDllNTMzY2Q4MTUwM2Q5ZTRlN2RhYjQzMTMzYmFkMTFmZDMwNTBhNTNhODMzZGY5Y2MzMjA4YWYxYTg2MTEwNTY3ZDMxMWQ1ZmM1NGIwZDYyN2RlNDMzYzM4MWIxMGUxMTM4OTgyMDNhYzUyMjUxNDBmOTUxY2RiNjRjNjQ5NDU5MmI2NDUzZjliNmY5NTJlYzVlY2U3MzJmYjQ2YzA5YTMyNGYyNmIyN2NkYWQ2MzU4ODAwNmJiNWM2YzAwYjlhYTEwZDVkM2IyZjllYWFiNjliZWVkZGQ2ZjkzOTY2NjU0Zjk2NDI2MDAxOCI6ImMzOTYxMDllOTZhZmRlNmY2ODVkM2MzOGFhM2MyZmFlIjoiIjoxMDQ6IjA2Y2E5MTAwNGJlNDNjZjQ2ZWQ0NTk5ZTIzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVjMzE5ZmIxNDNlYWM4MjE1YjUxNTQxZGFlYzI2OGYyIjoiZDI5OGQ5ODhlNzQ5Mjc3MzYyMzdlYjhhYjA5ZDdhODZiODU0ZmEyZmQxZjdmM2JlODNiNDE3YWMxMGFhOTI5MWY0YWY1YjNmYmFmNzVhMjk2YWMzMjM2OWFkNTdkZWQzOTg0Yjg0NzExOTUzZTQ3N2RlMzAzNWJhNDMwYTMwZmZiODRjOTQxOTM2ZTZjOGQyY2FlOGQ4MDE1OTg3NmY4N2RkNjgyNzQ3ZjJkY2NjMzZkN2MzMmFiMjI3MDMyYjhhYzcwYjMxM2ZhNDIwMmVhMjM2ZTNlYzRkOWU0ZDhiNDhjZjNiOTBiMzc4ZWRjNWIxZGJlZWM5Mjk1NDkzNDRmOCI6IjhhNDY4NGY0MmExNzc1YjAzODA2NTc0ZjQwMWNmZjc4IjoiIjoxMDQ6ImU5MWFjYjFiZmRhMTkxNjMwYjU2MGRlYmM5IjoiMjdjZTRhNjIyOTU5OTMwZjQwNTlmMjQ3ZDI5ZDE0MzgyNTcwOTNjYzk3M2JmMWJhZTRlMDUxNWRhODhiOWE3ZTIxZWM1OWM3ZTRkMDYyMDM1Y2RmODhiOTEyNTRkODU2YjExYzhjMTk0NDg2NWZhMTI5MjIyMjdkZWQzZWVjY2NhYTM2MzQxZWNmNTQwNWM3MDhlOWVhMTczZjFlNmNkZjA5MDQ5OWQzYmIwNzk5MTA3NzEwODA4MTQ2MDdhMWVmZTYyZWM2ODM1ZGMwMzMzZDE5ZGQzOWRkOWVhOWYzMWNkMzYzMjEyODUzNjE0OWExMjIwNTBiYjkzNjViNTIxZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE0YTNlNjlmMzUxYWMzOWI0Mjk3NzQ5YTkwYzEzNjVjIjoiMDUxMjI0ZjdiMjA4NTQ5ZGNmZGE1ZjlkNTZjZTVmMGEwNzJlZjFmMjNmMzgxMGM2OTM1MTZjOTI2MjJiZTZlZDRkN2E5ZTBmOTQ1MDk4MGJhNDkwYjJlOWUzNDY4ZWE3ZWVmMTBiYzllYmQ2NzNkOTFmMzJiNzQ4YzFiZjJjNTBjYzRlYmI1OWZjNDA5YzZkNzgwYmJhMDA3MDBkNTYzY2UxZGM5OTI3YTZjODYwMDk1YTQyZWQwNTNmM2Q2NDBkZWJmYmZhN2E0ZTZkNWRlMjM0YWYxOTc1NTAwMGQ5NWU3ZjQxNGYxZjc4Mjg1ZWUxNjU0MTBjMDIwMDM4Mjg2YiI6ImViMWM2YzA0NDM3YWE1YTMyYmNjMjA4YmIzYzAxNzI0IjoiIjoxMDQ6ImU0MTg4MTU5NjA1NTlhZWZlZThlMGMzODMxIjoiNzk3MzEwYTZlZDljZTQ3Y2RjMjVmN2Y4OGY1ZGJiZjZmOGY0ODM3NzAxNzA0ZDdhZmNlZDI1MDU4NTkyMjc0NDU5OGQ2Zjk1YmEyZWVjZjg2ZTAzMGNjNWVlNzFiMzI4ZmMxYzRmMmQ0ZGY5NDVkMWI5MWEyODAzZDZhZThlYmE2ODgxYmU1ZmUwZjI5OGRkMGMwMjc5ZTEyNzIwZWRlNjBiOWU4NTdjY2NhNWFiZTliNGQ3ZWU3ZjI1MTA4YmVlYmJmZTMzZjA1YzBkOTkwM2JmNjEzYzJlN2VkNmE4N2I3MWI1ZTM4NmQ4MWIzYWU1M2VmZDAxMDU1YmJjY2NjMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzM0ODI3NzcxZmMzOTE4ZDFjZWUwOWJhOTQwMWI4MzIiOiJjZTc5NzAxYjY2MTA2NmU1MzE5MWM5YWNkYWY2NzdhZDQxNjIyMzE0ODk4ZDcyMTZlM2YxMTNlMmU2ZTIxNWQyNmQ4YmQxMzk4MjdmMDZhYjNlYTVjNDEwNTY5NGU4N2RiMWRkNmNlYzEwZTFmODZhODc0NGQ0YzU0MWYwOGU0MDMxOWUyMmFiNDJmYzFhNmM4OWVkZmQ0ODZiNmYxNDJjNmJiYmY4NGE3MzkxMmUwYjJlNTViNzlkYjMwNmNjYWJmODM5ODU1YWZkZDg4OWU1MmFlOTgxNTIwYzg5ZTdkYzI5YmIyYWRiMTkwNmNjYThjOTNmY2IyMTI5MGEwOTViIjoiMjM3OWJiZDM5YTFjMjJiYzkzYjliOWNjNDVmMzg0MGIiOiIiOjk2OiIyNmUxZjZjZjBkOWUwZjM2ZGZkNjY5ZWIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMWY5YmQyMDA2ZWM1NTBiN2I5OTEzZDM4MzIwMGI1ZCI6IjZkOWZjOGY1ODZkNTBkNmUwMTI4MTcyYWUxNDc4NDRlODAxMzY5MDVkM2EyOTc0OTdhOTU2NmNhN2M3NDQ1MDI5MDI4ZjE0Yzk5NTBhY2VlOTJhNWMxMmE5MTUwZjVlMDI0ZTAxYzc1MDVkZDgzOTM3NTQyYjBiMTI4OGRlOWMyOTJhZThhZDkxOGEwOWIyZWRmODQ5MzU0MGI3NGM3M2QyNzk0ZjJlYjZlZWQxOGViYTUyMGRkZWE5NTY3NDYyYzgzMzMwZjMzZDc4OTJmY2RlMGIxMGM3M2E0ZTI2YWIxYmVmMDM3Y2VjN2UwMTkwYjk1MTg4ZTlhNzUyZmVlNmYiOiJjYTI4ZmE2YjY0YmIzYjMyZWY3ZDIxMWYxYzhiZTc1OSI6IiI6OTY6ImM4N2FhYzdhZDBlODVkYmIxMDNjMDczMyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhiMmNlZjFhOTJhYTBhZjJiMDBmYjJhOTk4NTVkNWJjIjoiZmQwOTUyNWVmM2M2NWFiNTgyM2UxYjZjMzZiNGE5NDQ5YTM5NzVjNWQzYTllN2UzM2M2MWZiMzJlZGNiYjhlOGM5MTViNjIwMmUzZmJjZTg3ZDczY2MzYjY2ZDgzZDllYTdlMWUzNTNjYzc0NjhmMDg2MjY5MzJjZjAyMzU1NjNlMmEyODk1M2VlNWEwYWZhZGIxYzNjYjUxM2IxZjFmYzlhOGE2Y2YzMjYxNzRiODc3NDQ4NjcyZjc3MzFkZDY0MzBhNTE2MTlkYTFhMTY5YWIzMDJkYTVhZjViMzg4MDJmOGJiZjU4OTBiNWQ5YjQ1ZGVkYTc5OTY3OTUwMWRjNCI6IjA4ZDg3YjdhY2VlODdkODg0NjY3ZjZiMWUzMmUzNGQwIjoiIjo5NjoiM2JkNzY4NTMxODAxMGIwYzVmZTMzMDhiIjoiNTgzZTY0NjMxYzIxODU0OTkyM2U4YWQzM2I3MjhkMDdmMjNiMGYxOWQyYWZmMWFkN2UyMGQ1NjRjNTkxZGIwZTExN2NhYThmMjFlM2YzMzQ1ZTNkODRmMGNjYmIyNzI3NGNkZGY5Mjc0NDEwZmMzNDJjYjJhNWQ0YWVhNGU5MjVkMGRkNTM1MDM4OWVlMGRlYTIzYTg0MmZmM2Y1YzExOTgzNzRhOTZmNDFlMDU1Zjk5OWNmYmMyZjQ3Y2VhYTg4M2RhOGViNmZmNzI5ZjU4M2VmZjFmOTFiZDNmMzI1NGQ0ZTgxZTYwZDk5OTNiMzQ1NWU2N2Y0MDU3MDhlNDQyMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTc1YzMwNmY4NjQ0YjBjNGI4OTRhZTNkMDk3MTUwNWUiOiJmYmU3Y2VkNzA0OGY4M2UzYTA3NTY2MWM0OTI0ZWI3N2RhMWI0ZDYwMTlkNTA0YWZiOTQyZDcyOGIzMWZkM2IxNzU1N2JkMTAxYzA4NDUzNTQwYTVlMjhkMzUwNWFlYjg4MDFhNDQ4YWZhYzJkOWY2OGQyMGMwYTMxYzdlZjIyYmQ5NTQzODg1MTc4OWVlZjFiZWJlOGQ5NmFjMjk2MDcwMjViN2UxMzY2ZmVjZDM2OTBiYTkwYzMxNTUyOGRjNDM1ZDlhNzg2ZDM2YTE2ODA4ZDRiM2UyYzdjNTE3NWExMjc5NzkyZjFkYWNjZjUxYjJmOTFhYzgzOTQ2NWJiODlhIjoiOTg2MDI2OGNhMmUxMDk3NGYzNzI2YTBlNWI5YjMxMGYiOiIiOjY0OiJmODA5MTA1ZTVmYzViMTNjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDhjMGVkY2ZlMzQyYTY3NmNjZGMwNGJkZjg1NGI0YjAiOiIxZmM4ZWY4NDgwYzMyZDkwOGI0YmNiZmE3MDc0YTM4ZTkxNWMyMGVkN2ExYzYwODQyMjA4N2U4OTQ0MmQ3YzVhZjZmZTljOWE3MTZjNTU3OTMyNDgwNjJkOGU2YzZlOGU5MDRlMjgwNGRhM2E0MzcwMWU0Yzc4ZWNkYjY3ZTBiMjUzMDhhZmM2ZDliNDYzMzU2NDM5Y2QwOTVjZmYxYmRmMGZkOTFhYjMwMWM3OWZkMjU3MDQ2Y2JhNzlhNWQ1Y2Q5OWYyNTAyYWQ5Njg0MjBlNGQ0OTkxMTAxMDYwNzJkYzY4N2Y0MzRkYjA5NTVjNzU2YTE3NGE5MDI0MzczYzQ4IjoiNGE3YjcwNzUzOTMwZmU2NTlmOGNjMzhlNTgzM2YwYzciOiIiOjY0OiI5YWIxZTJmM2M0NjA2Mzc2IjoiOTgzNDU4YzNmMTk4YmM2ODVkOThjZWEyYjIzY2Y3MWYwZWIxMjZlOTA5MzdjYWIzNDkyYTQ2ZDlkYzg1ZDc2YmJiODAzNWM2ZTIwOWMzNGIyYTcxODdkZjAwN2ZhYWJlOWYzMDY0ZGM2M2YxY2IxNWJmNWExMDY1NWUzOWI5NDczMmUwYzY1ODNkNTYzMjdlOTcwMTM0NGUwNDg4ODdhODFiMjU2MTgxY2RmYTllYzQyZWJjOTkwODc1ZTQ4NTIyNDBkZGNiM2NiYzRlYTRlNjMwNzA3NWZkMzE0ZjcxOTBmMzU1MzI2N2JkNjhiMTllOTU0ZTMxMGVjM2Y4ZGJhYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjQxMDY3YTAzMDFlZGYwZjgyNWQ3OTNlMDMzODNlYTEiOiI2OTg0YmI5ODMwODQzNTI5ZmFkN2Y1ZTc3NjBkYjg5Yzc3OGQ2MmM3NjRmY2QyMTM2ZmZiMzVkN2Q4NjlmNjJmNjFkN2ZlZjY0ZjY1YjcxMzYzOThjMWI1YTc5Mjg0NDUyOGExOGExM2ZiYTQwYjE4NmFlMDhkMTE1M2I1MzgwMDdmYzQ2MDY4NGUyYWRkOGE5ZWQ4ZGQ4MmFjYmI4ZDM1NzI0MGRhYWEwYzRkZWI5NzllNTQ3MTU1NDVkYjAzZmUyMmU2ZDM5MDZlODliZGM4MWQ1MzVkYWU1MzA3NWE1OGY2NTA5OTQzNGJmZWVkOTQzZGJjNjAyNGE5MmFhMDZhIjoiYTMwOTk0MjYxZjQ4YTY2YmI2YzFmYzNkNjk2NTkyMjgiOiIiOjY0OiIzNmMzYjRhNzMyYmE3NWFlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDNjY2NiNTM1N2JkMjg0ODMzMmQxNjk2ZjJmZjkwY2IiOiI1ZTJmMThjYmMxZTc3M2RmOWYyOGJlMDhhYmIzZDBiNjRkNTQ1Yzg3MGM1Nzc4YWM4YmIzOTZiZWY4NTdkMmFjMTM0MmFlMWFmYjNiZjVkNjRlNjY3YmY4Mzc0NTg0MTVkNDgzOTYyMDRmZTU2MGUzYjYzNWViMTBlNTYwZTQzN2YyZDAzOTY5NTI5OThmZDM2ZTExNmNkMDQ3YzFkN2Y2ZmM5OTAxMDk0NDU0ZDI0MTY1YzU1N2E4ODE2ZTBkMGE4ZTBjZTQxZTA0MGJhNmYyNmNhNTY3Yzc0ZmM0N2Q5NzM4YjhjZDhkYWU1ZGZjODMxYzY1YmMxYmE5NjAzYTA3IjoiZTA3NTQwMjJkZmIxZjgxM2NjYWYzMjE1NTg3OTA4MDYiOiIiOjMyOiJjNzVmMDI0NiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRlNWU1M2M4NGEwNWQ1YTUzNDhiYWM3YjI2MTFjZjYyIjoiNDg5YzAwYzA1ZGVjMDZmMjgyOTI0YzY4MGY2MjFhYjk5YWM4N2Y3ZDMzZWJiYjRjYTBlZWUxODdlYzE3N2QzMGQyYjRhZmI0ZWU5ZjBkYzAxOWNmMWE0ZGExNmQ4NGI3ZjVmNWM3ZmNlNzJhMzI0NjFkYjExNWI1YTVhNDMzMDI0ZmQ1ZWQzZDQ3MTYxODM2YmIwNTdhMDE4OWVkNzY4Zjk1ZTQ1ZmE5NjdkMGNjNTEyZmM5MWI1NTU4MDhjNDAzM2M5NDVlOGYyZjdkMzY0MjhkY2I2MWY2OTdlNzkxYjc0ZTVjNzliMmJjYjljYjgxYmVjNzBkODExOWNkOGQ3NiI6IjQ3ZTQwNTQzYjdkMTZiYzkxMjJjNDBiMTA2ZDMxZDQzIjoiIjozMjoiODFlZWM3NWQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyYzk0MDA4YmYzNzdmOTBiN2ExYzBkMmVhMzhmNzMwYyI6IjdiM2Q2MTlkMTE1ZGU5OTcwYjJkZjRlMWYyNTE5NDk0MGIzZjNkYTA0YzY1MzIzMWU4ZTY5NDZkZTlkYzA4YWU1YmEzN2UyYTkzYzIzMmUxZjk0NDVmMzFjMDEzMzMwNDVmMjJiZDgzMmUzYjVmOTgzM2YzNzA3MGZhZmIwZWYxYzQ0Y2M1NjM3MDU4YWI2NGQ5ZTA3YmI4MWIzMjg1MmQ0Y2Y3NDlhM2RkYmZkYjQ5NGY4ZGU4YmI0ZTMxZjQ2MDMzZjhhMTZiYzIyZTI1OTVkMDIzODQ1NTA1ZWE1ZGI3NGRkNjlhYjRjYTk0MDA3OGIwOWVmYjRmZjE5YmRiNjYiOiJhYmZlOTI5MzFhODQxMWEzOTk4NmI3NDU2MGEzODIxMSI6IiI6MzI6IjQ3ZDQyZTc4IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY5ZWVkZjM3NzdlNTk0YzMwZTk0ZTljNWUyYmNlNDY3IjoiNTExNGU5OTgzYzk2ZmVjZWMzZjczMDRjYTQyZjUyYWExNmNiN2M2YWFkZmI2MmFkNTM3YzkzYTMxODg4MzVjYTA3MDNkYWQzNGM3M2NmOTY0MzViNjY4YjY4YTdhMWQwNTY5MzE5NTkzMTZlOGQzYWI5NTZiZjY0YzRlMDc0NzljNzc2N2Y5ZDQ4OGIwYzBjMzUxMzMzY2NmNDAwYjdlMGJlMTlhMGZkMTczZTNmMmExYWUzMTNmMjdlNTE2OTUyMjYwZmQyZGE5YWI5ZGFjYTQ3OGViYjkzY2QwN2QwYjc1MDNiMzIzNjRkOGUzMDhkOTA0ZDk2NmM1OGYyMjZiYiI6ImEzMzMwNjM4YTgwOWJhMzU4ZDZjMDk4ZTQzNDJiODFlIjoiZGY0ZTNmMmI0N2NmMGU4NTkwMjI4ZmNmOTkxM2ZiOGE1ZWI5NzUxYmJhMzE4ZmQyZDU3YmU2OGM3ZTc4OGUwNGZhYmYzMDM2OTliOTlmMjYzMTNkMWM0OTU2MTA1Y2QyODE3YWFkMjFiOTFjMjhmM2I5MjUxZTljMGIzNTQ0OTBmYTVhYmZjZWEwMDY1YWEzY2M5Yjk2NzcyZWI4YWYwNmExYTkwNTRiZjEyZDNhZTY5OGRmYjAxYTEzZjk4OWY4YjhhNGJiNjE2ODZjZjNhZGY1OGYwNTg3M2EyNGQ0MDNhNjJhMDkyMjkwYzI0ODFlNDE1OTU4OGZlYTZiOWEwOSI6MTI4OiI1ZGUzMDY4ZTFlMjBlZWQ0NjkyNjUwMDAwNzdiMWRiOSI6IjIwOGU2MzIxMjM4YmY1YzZlMmVmNTVhNGI4ZjUzMWNiYmZiMGQ3NzM3NGZlMzJkZjZkZDY2MzQ4NmNmNzliZWVlZDM5YmI2OTEwYzNjNzhkZDBjYzMwNzA3YTBhMTJiMjI2YjJkMDYwMjRkYjI1ZGNkOGE0ZTYyMGYwMDljYWZhNTI0MjEyMWU4NjRjN2YzZjQzNjBhYWYxZTlkNGU1NDhkOTk2MTUxNTZmMTU2MDA4NDE4YzFjNDFmZjJiYmMwMDdjZWNmOGYyMDljNzMyMDNlNmRmODliMzI4NzFkZTYzN2IzZDZhZjJlMjc3ZDE0NmFlMDNmMzQwNGQzODdiNzciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0NWNjMzUzMTFlZWRmMGJhMDkzYmY5MDE5MzFhNzAzNiI6IjVkYzhkNzUyNWVhYWQwMzVjMTk3MTRhZTFiMWU1MzhjYjY2YTQwODkwMjcyNDUzNTFlMGFkOTI5NzQxMGZiM2EwYzExNTU0MDdjMTBhOGJiOTVhOWNhNjI0YTljOTkyNWRhYzAwM2VlNzg5MjZjNmU5MGZmNGNjZGJhMTBlOGE3OGJkYTFjNDQ3ODE2MmEwZTMwMmRlNWZmMDVmYjBmOTRjODljM2M3NDI5ZmI5NDgyOGJkY2Q5N2QyMTMzM2MyZWU3Mjk2M2VlNmYwNTZjZTI3MmI4YmFiMDA3ZTY1M2E0MmIwMWQxZDIwNDFiYTYyN2YxNjljOGMwZDMyZTZkYWUiOiJmZWQ1MDg0ZGUzYzM0OGY1YTBhZGY0YzJmZDRlODQ4YSI6IjZlMjEwOTE0ZTRhZWQxODhkNTc2ZjVhZDdmYzdlNGNmN2RkOGQ4MmYzNGVhM2JjYmRiNzI2N2NmZDkwNDVmODA2OTc4ZGJmZjM0NjBjNGU4ZmY4YzRlZGI2YWQyZWRiYTQwNWE4ZDkxNTcyOWQ4OWFhYjIxMTZiMzZhNzBiNTRmNTkyMGE5N2Y1YTU3MTk3N2UwMzI5ZWRhNmM2OTY3NDliZTk0MGVhYmZjNmQ4YjBiYmQ2ZmJkYjg3NjU3YjNhNzY5NWRhOWY1ZDNhNzM4NDI1N2YyMGUwYmVjZDg1MTJkMzcwNWNjMjQ2ZWU2Y2ExZTYxMDkyMWNmOTI2MDNkNzkiOjEyODoiMjY2YTg5NWZjMjFkYTUxNzZiNDRiNDQ2ZDdkMTkyMWQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWVkYjUyMzFjYTRhMTM2YjRkZjRhZTIyYjg1ODhmOWYiOiI0OTNkZjgwMWM1N2Y4YmI1OTE5NTU3MTJkOTJkM2ZjMzQ1MThmMDU5OWZlYzg1MzNiMmI0NDczMzY0ZTFkZjRmNTYwYzEyNDQ0Y2Y1MGVlYjU4NDY3NmI3ZTk1NWM3NDIxODlkZTZiNTBiOGUwMTJkZmE2NjQyZjM2NzlmYjAyYmM2ZDhlMDhkMWRiODhjOGFlOTU1YTc5NDYyNjNlMDY0OTRlMTdmOGRmMjQ2YjY3Mjk0MjY2MWU1NTYzMzAyMjUyMjA4ZjJlMDBhMGQ3NzA2OGEwMjBlMjYwODJjMjkxYTc1YTA2ZjYzYzQxZTI4MzAyOTJhNDE4YjJiNWZkOWRkIjoiYzM0MmU5YmRhYmU3YmU5MjJiMjY5NWY1ODk0ZTAzMmMiOiJhNDVjN2Y4MDMyYWM1MTQ0ZGVlZjhkNTM4MGYwMzNhZWEyNzg2YjA1OTI3MjBhODY3ZjQ4MzFlYWNjYzZiODVkM2ZkNTY4YWVkYzZlNDcyZTAxNzQ1NWIwYjViMzBjZjdhMDhlYTQzY2E1ODdmMzVlMTY0NmVjZDliNGRjNzc0ZDExZTM1MGM4MmM2NTY5MmJlMWU5NTQxY2JkNzJhMjgzYmRjZjkzZGM3MTE1NTQ1ZjM3Mzc0N2I0ZjhkNTkxNWVkMGM0MmZiZWVmZDNlOWJkODYwMDNkNjVlZmMyMzYxZmRlNWI4NzRkZGFiY2Y4MjY1ZTZiODg0NjE1MTAyZWZmIjoxMjg6IjVlZDNlYTc1YzgxNzJmYTBlODc1NWZlZjdiNGM5MGYxIjoiNTY2OTZlNTAxZmFjMWU4ZDViODNlZjkxMWVkMTEzMzdkNWQ1MWZmNTM0MmE4Mjk5M2RkNTM0MGJiOTYzMmU2NjA2ZWVmNjhlYzVmZThjZWM2YjM0ZWJiYzU5NmMyNzllNmNiYzkyMjFjNGNkZTkzM2Y2ZDkzYWUwMTRlM2M0Y2E0OTU5M2YzNWVhYTYzODYwNmQwNTk1MTliYWMzYTMzNzM1MTllNjE4NGU3MjI3ZDJhYTYyMTcwYzM2NDc5ZmUyMzljYjY5OGJmY2E4NjM5MjVhNGM5ZmIxMzM4Njg1YTU1YTZkZmQzYmQ5YzUyZDhhZTEyYmU4NTUxZmNlNmUxYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ1ZmRjYjhmNTIyNTA5MGU2M2ZhZTliNjhmOTJjN2NiIjoiZDM5YjljYmE5NWUzYTNhYWI5YmMxZDAzZmY0NzVjMDRmYWViNWI3ZjA1MTA3NzdmMzllNWEwNTc1NjYwNmViN2RkZDE1NGFhYzAzNWQ5ZGRhZjM1MzU2Mjk4MjFkZDhmMDE0ZGVkZDUyY2QxODRmNTJmYzcwNmUzYzg5YTNhMjcxMzk4YzkxMjVkOWE2MjRkYWZiMjk3YTU2MDIyY2EyZWEzMzFlYTczNTlhYjVlNjVmOGUxNDgxNDc4OGU2NGUwYTg4NmE5YjFhMDE0NGJmMjY4ZmRjZjlkOTRjM2QxMGEwNDUyZjQwMTExZGE5ZGYxMDgyNTJlOTAzOWVhY2VhMyI6IjU4MWM4MTgyODJhMDkwNWRmNWZmZmY2NTJlNTYwNGU5IjoiZjFhZTZjZDdiMDdmMjYxMTA1ZjU1NWNmODEyYTFkNWJmOGRkOWFhYzA3NjY2MzE4YWNmZmExMWFiYjc3ZDAyMzgxNTY2NjNhY2JmNzU0MzgyNWI0NWM2ZTljZGRiNDgxYTQwOTk1ZWNkNzhiYjVmNGNiYTVkZjdjN2VmYjAwZmMxOWM3ZjQ1ZTk0ZDM3Njk3YWNhOGVmMzY4Yjk5MTY1MzkzYjYxMDdmOTAwMTk0Yzc5N2NkMzI4OWNiMDk3ZWI1OTE1ZjJhYmZkNmFhNTJkZDFlZmZmZmRkZTQ0OGUzMDA3NWExYzA1MzI0NmRiNTRiMGVjMTZlYWRjYTFjMDA3MSI6MTIwOiI4MjdlNjZiNWI3MGRjZTU2MjE1Y2ZiODZjOWE2NDIiOiJjZWMxMWExMmU0N2ZkNDQzZjg3OGU4ZTlmZTIzYzY1ZjI5ZGQyZDUzY2VjNTliNzk5YmNiMDkyOGRlOGUyZjkyZmU4NWMyN2NlYzVjODQyZWYzMDk2N2I5MTlhY2NhZmUwYzBkNzMxYjU3ZjBiYjU2ODVkOTBhMzA2MWNiNDczZTUwZThhZWNhMTM0NmQxZjQ3ZjdkYjA2OTQxZjgzZjIxYmE1OTc2ZDk3YzI4Y2FiNTQ3ZDhjMWYzODM4N2EwNGI4YTBiMjEyZGE1NWI3NWZiYWY5NTYyZWVlYWJkNzhlYWRjYmFiNjY0NTdmMGNkNGUwZDI4MTMzYTY0Y2IwNjNmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDM2MTk4Y2QzYTNhYjkzMTk2ODRkMGY4MTFjZjI5OTIiOiI2Yjk1YjllODJhNjk1ZmI3YjQ2NmNlM2FkYjUzNmY1MjVkODMxNGY5NWVhZGEzOWVmYjQ5YmFmMTIxMDkzY2U3ZDU0MzlmMGQ4MjIzZTAzNTMwYjg1YWNjZDM4OGE3MDY1MGNhOWY3ZTYzZWIzMmFmZWNiN2IxOTE2ZWQ5Yjc2MjEyOGNjNjQxY2FmM2UwOGUwMjdjM2Q4ODQ4MWQ2NTNiNmIxNTE3MmU5NzdkZmI5YjNmODg0NjU5MTFhZWUxNjI1MDFjYmY4NTAxY2UyYjY2ZWUxNTFiYmZkYzIzMjI1ZjYzOGYxODc1MGMyMzlkNjI0NzE2NjNlNWVlMmE1ODU2IjoiNDdkZmZjNmIzYjgwZmZlZjRiOTQzYmRlODdiOWNmM2MiOiJlYzRkZTQ3NmNkMzM3ZjU2NGEzZmFjYjU0NGQwZmYzMWNkODlhZjRjM2Q5YTI4NTQzZTQ1MTU2MTg5ZjhlZmY4ZjgwNDQ5NGRkYTgzYTFmYjJjMzBjZTg1ODg4NGEwMWVjNjNkYjU5MjY4NDUyYjFlZWEwZjBkNDgyODBiYjczNDBlYWFjYzg0NTA5NDY5ZGQ5NGQzMDM3NzRkMDUzZDdhYjRmYjVmNmMyNjU4MWVmZWIxOTE2NWY4Y2IwOWQ1OGVjMzE0ZDA5YWI4MzU2NzMxZTg3ZmQwODFmNjYxZTdiMmQxYTdjM2FhNGFmNTQ0OGExMmI3NDJlN2IyMTBiMGIwIjoxMjA6IjZjZjY4YTM3NGJlYTA4YTk3N2VjOGEwNGI5MmU4YiI6IjVjMmY3YzQwODE2N2JlM2QyNjZmZjYzNGUxOTkzZmUyOTFhZWY3ZWZhZTI0NWZhMGI2YjViZGU4ODZhODEwYzg2NmFlNmEwNzgyODY2ODRkMWI2NjExNmU2MzZlMjg1ZjAzNjQ2ZTA5ZjNjNGVkN2IxODRlN2MxNzFiYTg0ZjNiZmQ5NTAwYzZmMzU5NjRhNDA0ODkyYjRjZGNkZDNmNjk3ZmM1YjAxOTM0YTg2MDE5ODEwOTg3YTlmZWE3ZWZjYTAxNjA0OTg3M2YxMDcyZjYyZGYzYzE3ZjU3ZWExZDg4Y2NkODc1N2Y3ZTNjNWQ5NmU4YTE4ZDUzNjZhMzllYTkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjOWZiYmZmOGYyNWY5NTFiYTg3NGRmYzVmZjM4NTg0ZSI6ImNhNDAxMDcxMzk2ZGEwMDM3NmFkZDQ2NzQ5MGFiYzZlNmE3ZDhhODU4NTIwMjY5NzlmNzAxM2EwOWNmNjg5MTEzYzhkODMzNTYwY2Q2YzViOGZkYWE4ZmRkODE4ZTc3M2FjMTM5NTQ4MzlhMGEyYzkxZWZlYWY0ZTBlMTRkZTQzMzA4NDE5YThiODZmYTJhZTYwMGE4OGE2YmQzOWRmYWFiYzE2YTNjN2MxYjc3YTVjMmFhYjdmN2NhY2ViMmY4NTk1MzI0MTI1ZWZiYjdjOTZiYTE2YzQ3ZDBiZDEwNTY4YjI0YmY0NDVkNzJkNjgzMjY4NDY2ZTY4ZTQ2ZGY1MDAiOiIxYzFmYzc1MjY3M2JlNmQ0ZmY0Y2M3NDlmYzExZTBmZSI6ImFiZmRlMGI2MGFjZmUyNjViNjJlZDY4ZWJlYmMxZjVmNzI1ZjE1NWM0YjhhOGFlZWM4ZDcwNDcwMWM1MWZmNzgxNzA2MGMxYjBjZTZiODBkNmVmYzk4MzZjOWVhMmJjMDIyZWM2N2RiNGNkMzRlOTQ1ZTNhMWIxNTNmZDJlMGY3YWM4NGJiNGIwN2UwNGNiYjUyOWVlMjQwMTRiMTYwNjdmOWYwODJiOTQwYzlkNWU1NDAyNGQzZTVlOTEwMzEwNDU3NDc4NTYwNzIxNTg3ZGE3YjUzNDNkODllZWM1YThmY2UzODljMDExODVkYjE1ZTdmYWE5YTNmYTMyZThhYjkiOjEyMDoiZmYwYjJjMzg0ZTAzYjUwZTdlODI5YzdhOWY5NWFhIjoiMjM5NjM3ZmFjNmUxODBlNzFiMmM5ZmE2M2NlODgwNWY0NTNkODE0OTk2MjNlYzJkZWJhOWIwMzMzNTAyNTA2NjI4OTc4NjdiZmZhZjBjMzE0MjQ0YmFmOWUxZmUzZTFiYjdjNjI2ZDYxNmJmYmYzZTBhYzA5YTMyYWFmNzE4YjQzMjMzN2M5ZGM1N2MyZDZmYzRhMGEwOWJkYzA1YjkxODRkMWI5MGM3MTkzYjc4NjlmOTFlMmNhYThiM2IzNWMxMGM2NjIxZmZhZTRjNjA5YmRmNGU0ZTNmMDZlOTMwNTQxYzM4MTQ1MWVmNThmNGYzMGE1NTlkMmI3OWIwZTZiNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNhMzE0ZWMxNzhkYTk2MzExZTQyMzM0YTYxNmZiMzhiIjoiNTE4YjNmNTM4NGFiNTRmODA0OTdkNTViZTdhNWQ2OTAyYmM3NzE4Mzg2MjEyYzJlYzc1MzdkYjMzMTUxNGIzODM4ZjEwNGJmOTA1NGUwMzAzOWE0Y2ZiNzNmNDFlNWQwYTk2NDhlNTY5ZWQ3MzhjZWE4ZDMzOTE3NDMwZGZmNmFmYThmMDdhNzVlMzI0YjkyNjJmYTE5NmE0NDM5ZGNkNjZiMDUzNWVlNWJlYTBkMjkyNjAwMjI3YzJhNzllZDAzYmUwNjcxNzQwZTVjYjdiMzA2ZDg1NTYxMmJkM2FiY2JmMDJjZjdlN2NlY2JiNmNkYmIzM2Q1N2I0ZTMyMzRhMiI6ImQ3ZWEyN2M4MTllM2ViMjY2NjYxMWJiMWM3ZmMwNjhkIjoiZGI4ZGNjMzFhNTY4MWYxM2Q1NmFiZDUxYmQyZGNiMGQyYjE3MTYyODE4NmUyMTVhNjhiZjE2MTY3YjRhY2QwMGMzNDQxOTczYzNmYTYyZmEyNjk4ZWU1YzY3NDlmYzIwZTU0MjM2NGQ2M2M0MDc1NmQ4YmNmZjc4MDI2OWU1MjAxYmFmZGNlZDNjZGM5NzkzMWQ4MjAzODczNDMxODgyYzg0NTIyYzE1MWI3NzUyODVkMGEzYzVkNzY2NzI1NGM3NDcyNGZmMGVhOWQ0MTdhYTZjNjI4MzU4NjVkZmRlZDM0ZWRkMzMxYzBjMjM1YTA4OTQyNzY3MmM1YTkyMTFjOSI6MTEyOiIxZTc3NDY0N2IxY2E0MDZlMGVkNzE0MWE4ZTFlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU4MTgzNzJhNjNiN2UyYzIzYjUyNGUyOWJhNzUyYmRiIjoiYzFiZjFiNzAyYTk1Y2VhYTZiNDhhMWNkZDg4OGFlNTFmNThhOWZjMzIzMmJkNmM3ODQ1MjlhODMzMDFjNmQwY2RkYTZlNjA1YWQ5YTI1NjNmNTRhOGQ1OWY2MjRhZTdjNTg5ZTQ4Yjg1MDQxYTAxMGRjYjZmYjg3MzlkNDNlNzlhNDU2ZmMwZTg1NzRhZjA4NmRmNzg2ODA0NjBjM2NkYzRlMDBkYzNiOWQ0ZTc2YjBkZTI2ZTlhZWM1NDY3MDUyNDlmYTdlNzQ2NmMwMTAwMWMyNjY3ZWFmMjgxM2JlMWYwZjExNjkxNmYzNDg0M2EwNmIyMDFkNjUzYWExYjI3ZSI6IjM2ZTYxN2U3ODdjYjI1ZTE1NGY3M2FmMWRhNjhjYjA2IjoiNzE4MDFkNjk3OTZjMmNlMzZiMDQzYzE1N2FlYzlmZDJlMDZmZDFlYzU5NjEyNmQxMGMyNmI2ZDQ0ZTNkYzM2YzRmYTMwYTAzMGQ2NWMzODJiNmRkZmQ5NThlNzFmZTljMTY3MzJlNTk1MTM3YTNkNjc2NGMxNTQ4MGZjMzM1OGU5YTExM2JhNDkyYjMxMjc0NjYzZjU4NDJkZjVkMWNjNmJhZDcwZTgzYjM0Njc1YTQ0MTFlMmU3MDc1NWFlZGUwZmY1MDM1NjAxYmUxMzA1NjJlMjdhMjAyODNkNmYxNDRmZjFiZGI1Mjc2ZGVjMDVmYWQ4MGQ1MWIyOGQ1MDY4OCI6MTEyOiIzNzQ0MjYyYmM3NmYyODM5NjRjMWMxNWRjMDY5IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjlhMDRmMTY4ODJmZjQ1ODE2NzM5ZDFiNjY5N2NlOGI3IjoiNmE0ZjNkYmIzMzcxZjY0MjU4ZmQxZjgzMTM0OWU3NDVhNGUxOWEzM2FhZDc5NGIxZGUzNzg4NzI5NjE4YmVlZDYxOTU4NjA5MjEyMGU5ZTVkYzNhYzZlMGQ1MmY5OTFmN2JlNjFhZmJmYWE0Mzk5YWM3MTZhZDc5YTI3MzQ4MjcyNTRiMTYyNzc5MWRjOTJhMTI4YTZmNDM0MjZiODA4NWRlZTk0MjQyZTgzMTc2YTNkNzYyNjU4ZjE4ZWNjMWUzN2UzZTE1MzE2NDhjOWNhZWQyMTJlYTJjZjNiMzg0M2NiOTJjYjA3NzMwZjMwZmUyZGNhMzkyNTQ3MGZhZGQwNiI6IjY2ZjUwNGQ5YTkxMjhhZDdmYjdmMTQzMGQzN2M0Nzg0IjoiZjY0MWM1M2M4M2M0ZmIxZmY4MDQ0YmZhOTdjZGY2M2ZlNzVkODE1OWQ2NWIzZTVhZDU4NWI4OWMwODNhNTNjZjRhMmY3YTU4ZWFlYWY0NWZhNzFmMmMwN2JjNTcyNWE2YjAzMzA3ZDdmMzI4ODRhMTMzYTRjODAzNzAwYmYxZTEyNTY0Yjk4YjcxZjYzYjQzNGRkZjEzYWQyYzQ2N2RkYTI1ZmZhNmVmZmNhZmE3MjQ1MmIyMGMzNGNmYWU3MWU0NzA5NmY4NzQ1YjQ4N2U5ZjE5NDVmNWJlYzgzZjdlYzI3MDlhMTNiNTA0ZDkyMzE1YjFiNzI3YTc4OTAyYmU4NCI6MTEyOiJmYmIzNzA4NDM5NjM5NGZlY2Q5NTgxNzQxZjNjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM4Y2YwMjlhNGIyMDYwNzAzMDU4NmNkMmQ4MjE0NmU2IjoiZjRjOWY0NDc2NTYxYzllYmRhYzcxYjI4MmFlNmUyZjlmMDM1NDdkYTk4ZTY2ZDRkODU3NzIwZGIyZmNjOWVkMWYzNjM4NThkYjM0YzlkY2FjYTAxMDlkN2M4MWRiMjQxNTA0OTMxMTVmMmJiNjk4NWVmYTg2ODZlM2QyYWI3MTlkMzNiMjMwYWE0YzVjNzA2OTZiZjQyZjIyNWZiM2M2NzA0NzExYzA1NGE4ODJkODliMzIwODg0YTc4Y2I1OWNkMjEwMDQ5NmVkZjQwMTA0ODc1OTdmYjkxMzVkOGNhNzk2OTNhNDM4NDNlOTYyNmZkNmM2NGE4NzIyYjNhMjdkYyI6IjYzMzAwODQzMTllMmJmMzJjZDUyNDBmNDgyNjk0NGJjIjoiODA3NDZjZmIwMTI3YzU5MmY4MTY0ZDc1MWIwZTE0YTViMzc5MDU2YTg4NGNlY2U3ZWU0ZTliODA1MzhkN2ZmNmJlNTZhM2IxOWMxMzU3ODY3MjJhYWYzMTUxMjNiNDc2NzJiMDI1MWU4N2VhNDVmMGZkMzYwMWNmOTNmOWVmYTZjYmQ5YWQ1MzdmNTRkNTdmMWUxODdmODIxZmFhYzI0MDk2ZWNlYzE5ZDEzN2M5ZjRjZjE0NWMyNzhhZjRjZDhkZTAxYzc3NTg3ODRmZGEwNmYxY2M2MmQ5MmFlMTk3Nzc4NmYzZDA2NDU3MTRhYjRhYjZmNDhjODc5NGIxMmY3MyI6MTA0OiI3YjAyMWRlNWNkYTkxNWJhNThmOTBjZWVmNCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZjRkODFmYzU5OTdjNzQ0YTU3MmJlZDcxZjRhZTYwOSI6ImYzZDY1ZDcwMzI2ZTY0MWZiZTdmZDk0NWZlOWNmNjZjNzRmMTdkMGQxMDIwYWU4YWM0ODhmMzliNzI4NWM5OWQ4NjMyYmMyMjAxOTYwZjNkNzdkYWNjZmVjYzA0NDI4YWJlMDg1M2FhOGQ4MmI5MGE5MzEyN2M3MmIyZDJhZjUzZjdmMWJkMGFmYjk5ZDUwZjBiM2IyNGU5MzRlYzk4ZWRkYjI3OGIyYzY1ODY2NDQyY2ViZjEwMjA4YzdjZTFiN2VjZjc2NDg1ODQ4MGIyYTI2OWIxMDZmYTZkMjQyOGQ1YWQxNzYxMmU1M2U2MmNjYzdhZDExODQ2NjNhZWI5YTciOiJiYzRlMjBjNTY5MzFjOTY3Y2U4ZTNiOGY1ZjFjMzkyZiI6ImI2YjgyOTRhYmY3ZGE1NzAzZjg2NDcyMWY3OTA0ZDM4MjFmNTU2OGJmNGIyNjllNDRlZGVmNGYxYzk1ZGRjMTcyZDgzYTA2YzBhZDlmN2YxZmQyZTI5MmMxN2E4NzYzOTJiYzViYjcwNWQzNzBiMmYxNmZmNzIxYmVmNzY0OGY0MjMzNDZmZDNhNGQ3NjI2NzZlNmZjZjJkNjkwNTUzYTQ3MjI0YWYyOWFmZWQwZjQ1MmQyNjNiZTkwZWI4MTUwYTEzZDcyMGYxZGI2ZjFhYmMxYzJlYzE4Y2ZiZjkzYjhlZDNjNWFhN2NmYzFkY2I1MTRkNjlmOTA0MDk2ODdhNGQiOjEwNDoiMGE4NjE0MmEwYWY4MWM4ZGY2NGJhNjg5ZjQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDg4YWQ0MGI0MmVhZDc0NGYxYjdhMzY2ODU2NThiZTEiOiJlOTlkMjU2NmZlNmJjYjJhMDRkMTY3NjA1ZGI3YzBmMWU1NTY3ZmYyZDhkMzI5MmMxNWJiY2NjNWQxZTg3MmJjYjE1YTMwYjNiYjhiMWViNDVlMDJmYmExNTk0NmU2YmNhMzEwNTgzYTY3NDA4NDVhMGY3NGY0ZWJmZDVjNTljZWQ0Njg3NTgyM2UzNjllMDQ0N2NjM2U1ZDAzZGFlNTMwYWRmM2M5ODQ2MzYyYzk0ZTdmOWQxNzIwN2JmOTJkNGQ1OTk4MWQ4ZmQ5MDRlYjhiOTZhMGEyM2ViMGY4ZDdlN2E4N2U4ZTg4OTJhMjQ1MTUyNGRhNjg0MWNlNTc1YzI3IjoiNTJjMzE1OGY1YmQ2NWEwYTdjZTFjNWI1N2I5YjI5NWUiOiJkZGUyNjYzMzM1YzQwZTU1NTBhZTE5MmI4NDNmYTlmYjRlZjM1N2I1YzA5ZDlmMzlkYWZkYTMyOTZhNGQxNDAzMTgxN2VlNGRjMWEyMDFkNjc3NTk3ZDgxZTM3MDUwY2QzZGM4NmMyNWFkYmQ1NTFlOTQ3YTA4MGI2YzQ3ZWM3YmU4YTkyN2VmNzkyMGJkMWJiODFmMmM1OTgwMWEyYjlkNzQ1ZDMzMzQ0Y2JlNDgzOGJjZjJlYjhkY2U1M2FiODJjNzVjOWJiYWI4ZTQwNjU5N2Y2OTA4YWFhODFmYmJkZWYyNWFhNjkxMTZjOGY3YThjZGM5OTU4NDM1YWEzMmFjIjoxMDQ6Ijc2NDNiMzUzNGViNWNiMzgzMzFlZDJlNTcyIjoiNmY4N2Y2YmUyZjRlNzQyMWFhMjZmZTMyMTA0NWQxZTIzMDY2YTAyMTU4NjM0YmVmMzU4OTA1ODFjOTIzNjdkMGJjMjMyOTQwZGUzMDk3NGM3MGE2NmM2MDEzN2E5ZjM5MjRkMTJkYjFlNWJjMWIwZTcxMzFlYTM2MjBhMjVlYjgwNWI3ZDY3MDI2M2I4MmM4YmJmY2Q2ODM5MzA1MDI1MzkwZmMxN2Q0MmQ4MmRhZWJlMWIyNGY3M2ZmOWFhNDYxN2UzODY2Nzg1ZGRlZDg4ZjhiNTVlZjg5YjI3OThlYTI2NDFhNTkyYTQ2NDI4ZDkwMjBmOWJmODUzYzE5NDU3NiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzNjZTg2YTIxMmEzMGU3MjRiNGM2MjQwNTdkYjRlNzkiOiIzNTgyZWY3YTk1NjVjOWE4ZTQ0OTY3NTBlZTVjYTNlM2E4MGRmNjIzOGY3Yjc2MDhlMzM5NGVjNTZkMTM2MDc3NzkyMWRhMDM5ZWRlMzRhYmNlZGQwMTA4MWJhYmQ0OTZiYTRkZTc0YTdkZTUwMTE4MWQ2YmIyMDIyYTZjYzdmNzlkODlhNGM2YTk3Njc2ZmIwZjJiNDJmNzBlMmQwYmMxZWFhYzM2NGMzNjQ2ZGY0ZjYxMWMxZDZiMDk3Mzc0NTFiODFiNWE0ZGE3M2MwNWZiNTgzOTFjNzRlNDQ0OThiODBiMjZmMWMyOTU2MmQyM2MzOWI1ZDNmMDg2YjI4MGNiIjoiOWUwM2YwZGQ0Y2IyYjNkODMwYTY5MjVlNDQwMGVkODkiOiI5MmM0OGEzOWQ5M2VhMzMwOGY1NWY2NjUwZDMzZmRmMTdhOTAyMDc2ZDU4MmE5NGE4MmFjOTk0OTZkZTlmNjIzMTIyOTJiODQ0YmJjYTVhNjgzZWYwZjA3MTBiYmMxYzdmODljYmNjYThmOWMwMjk5ZjE1NDU5MGQzMjA1OWJkOTlmY2E1ZDc4YzQ1MGVkZTBkMTFkNTUwNzU5NDdjYWYyMTUxMjE4Y2U3YTA2YzFlODE5ODVhNzc4MWEzNDQ0MDU0MTcwYjQ1N2ZkN2JhODE2MDI2MzEwMTEyYWJiNDdjOGVkZGZkM2FiN2Y2NzlhMGY2MGVmYzZjNmRkM2I3NTllIjo5NjoiMzIzMGZlOTRiNmNjZDYzZTYwNWY4N2QwIjoiMDUyMzQ3YTQyNzNjZGRiYTY1YjJhMGI5NjE0NzdmMDdlZGVlNDQwYTkxMTdhYjIwNDM1OWQyZGQ0NWFkMmE2ZGFkM2I2MGVhZDg5MWU3ZGE2ZDc5ZjMwMTdhYzkwZjk1NzI1YTAwODlmMDRkMjVjZTUzN2JmNTNiN2VhOGUxZWE1ODY5MmQzNGMyMjFkYjE0MWUyYTlmZDcyMTFhZGNlZTAzZWY4YjViZjNjNWQzNjMxMWQyMGJiM2Q4MWY3MGY3ZTcyNzJkMGUyYjZkMTIyOTNiMWEyYzMxYjcwZjE0MGE4ZjA4ZDk4YzYyMzFhM2M0MjljM2QwYTEwYjJlMWMxYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTAxNTUzNjBiODQ0MjBiNWJmNGZiNDEwZWEwMmYzMWUiOiJlY2RiNTE1MjJmYzQ0MGY3NDcxZWE2YTMxZjdjMWVmMWVjMjE1M2U1YmNmNjMwMzI5N2RiZjhkZGIzODMwYjQ1ZWQ5ODY2MTU3Mzc1Y2U0YmRlYjVlMzJmY2JjNjYwNzk4NGZjY2Q3ZTY1NTI2Mjg3MzY2MDhhYjEzMDcyODU2ZDQzMmNlY2NkM2U5MGQxYmI1MmNhOWFkYTljZWU5MGViODlhYzEwZTg4N2ExOTc4ZmQwZmIzZDdiYjIwY2FhZjM1NTM5ZTE1MGJlODA0NGI3MjViODQyN2M0YzRhOTEwZjc5OTgwODY1ZDM2MzQ0YTg3ODRiY2MzZDU4NDYwYWNiIjoiNDZmMDM4NmJlNzM2Mzg4N2U3ZTM1NzM3NjMwNWVhYjUiOiI2MTFiYzI5MGY5MTc5OGFkODRmMGE1ZWNiNWE3Y2I4ZmEzNWU5YWI2YTVhNTFjOTg2OWE2OGEwNzZlOTZmOTJjOWMxMTc1OTVmOTJjYmFjNWQzMzM0M2ZhMmFjY2QyNTQxNDczOTA3Y2JjNTQ3OTJjNWUyMTVhZTg1NzQyNGM5MjFiMDRjYTRiODEzNzZiYmVkYmZjYzBlNTY1YzExOGYyYWNlZDA4ZjI0NzY5OGVlZDVlMmQyMDJjNDgyNDUxNjFjYWJlYWM5ZmExOTUyMTlmOTc5OWZhMjUzZTMzOTU2MWUxMzAxMjE2N2YxZDAyYjQwMTJiNzc5MWI3Yzg2M2JhIjo5NjoiYWM1YWRkY2MxMGNhZTZjMTM0NTUyMGYxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjk0ZjYyMWY1OTRkOTZiMTZjMzIyNTRmZjA2ZjNmOWMiOiJlNjE0NzZiOGI3ZjEwMWNhNjAwNWYyNWFmMmI5YmVlNzk1ZDYyNzIwYmJiZjU5MzU3MDU3Y2E3Y2Q0NzNlMDBmMGQ0NjUyNTVmY2U4ZDYxNjQ2NTc2MDMzMjM1NDlmYjRlM2QzM2ZhNTEwNTRiMWE3MGNjN2U0OTI5MTZkZWE4NTQ1M2U5MTA3ZmU3ODFiZmViNGE2MjJjNWIyMzA2YThkZGRlZjk5Mzg2ZGM1MDc0NTAwM2FhNzIyMGNkN2YzMmZiMGEwNjBmYTc2ODI1NzY3NjlhNDhmOTE2OWM3ZDExZmUwYThhNjFiOTVmNWQ2ZGZjZjIxNmY3ZDBjNjUyYTg0IjoiNTQyZGI0ZTEwNzQ4NWEzY2QyNGM3YWQzMzdhNGYxYjUiOiIyN2I3YmZhNWViMzRiYTM3NmU1MTVlNThhYjhiNjU1NmMzOTY4MjBkMDA3NGExZmUzYjk4NDk0NWRjZjUyNTFjYTQ1MDQ1NmNjYjRiYjY2ZWM3MzliMDNmZGM1ZjcyZDI0NTUzZTg0MzI1NWFkYzAxMmQxZjFjOTVhYTNjZGFjNWQxMjkyNjQ2NTM1NDIxNzIwMzA1MmNiZDQ4NjlhOGI1YmUyZTAxZDBmZTY2YjVhNmE4ZGEwYTJjZTM1MTU1N2UyOTkxY2U3N2JhYTgxMmI5YzY3YjhlMWM1YTFmYzM0ODcxMGUxYTczYTBmZDQ5YWNmZDUzOGI3ZGI2YmVmOGIzIjo5NjoiMGJkZWY0ZDc3MWExNzQwMzgxZTdkYjk3IjoiOGIyN2EzMzhmZDIxNTNkMzA0ZjA0NjU1ZTA5YmQ5YmRmNDQ2ODg5MGVjY2UxZTNiNTFkZTJjOWEyNWE4ZDkzMzZhOWFjZDc1M2NlMjcwYjFmZThkNTAxOTZmZWFjNjgxNDVlMGZkNTljOWNiM2FhN2MxZThhZjAzNDk0YmM0Mjc5YzZlMjg3Yzg0OWYzYzc3NWFkYTU4NGFlMTczMTAwOTQ2YWU2OTIxZWY3Yzk2YmJjNmYyMTYwOTM1NDg3MDJjZjE4NjdiYjFiZjFmNGM5ZTkwYTM0MjMwYTJiMmFlYjU4NDYyMmRkNjE1MDIzYTQzYTQwNmU2NDQyOGJkOTE3MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzg4MjZhNTIxNWExZDVlMWIzOWNhZDVhMDY4NjFmOGYiOiIwZmUyYzc5OGQ3MDE1ZDNlMmY4NzI1NjQ4ZDk1NzI5YzQ1ZDM1N2RjMGM4OWZjNjNiOWRmNWE2OGQzZTY1NDE5NTQwZjY2M2U5MTkwNzkzYTI5YzU4YzQ5NWQ1YzZhNzMxNzgyYWNmMTE5ZTJkZjhhOTZmYjE4MGFkNzcyYzMwMWQwOThkYmM1ZTM1NjBhYzQ1YjY2MzFhMDFjZWY3ZWVkNmRiNTFmMjIzNzc1ZDYwMWQyZTExYjliYWE1NWUyZjA2NTEzNDQ3NzdlNWEwM2Y2NzM4YTIwMTM2MjZhODkxYjVmMTM0ZjA3YjE2NTk4YjhjYmUzYWVhZWZhMWMyYTI2IjoiZmViOWQ3NDBmZDFlMjIxZTMyOGI1ZWY1ZWQxOWVmZjUiOiJjYTk0MTFiMzY4ZDgyOTUyMTBkN2EwNGRhMDVhMzUxZDI4N2YyZjY3ZDk3OGVmMWJiOTM2ZGU5ZjgwNjU0NzNmNmZhMTE0OTVkYTJlYWIxM2ExMDAyMjMxYzg2NDExZDU0MDliYmM3MThlMjA0MmVlOTllMDEzYjFkZjFlZjc4NmU5ZmMxZjJkNDMyOTNjODU0MTI4MTg0ZWZiOTMxN2M0ZWY4MmEwMDJlYWM4YjI4ZmNkOTFkOGE3MTRhM2FhMjVmYzNjMGFlNGFmOWY0YmNmNWFkMTlhMzBjZDhlYzRiMTc4NWRmNzBhYTkyMDc0ZGE0MTlhYmU0MzNkZDRjNDM1Ijo2NDoiYTcyNGJiYjI5NWEwMjg4MyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ0NTBmNTI1MzI1MTEyMTYwNmU1NjY4Nzk1MmJmMmYxIjoiNDc5YjRmNDIxYmQ4YWM3ZjYxNWM0YTUwN2RhMTg3Y2I1ZDRiMWYxZTJjNjExM2QxZjk2NzhjMWJhOTJkYzVlMTdjNWI1MjVkN2YzMjA4NzMzMjIzZWI4MmFmMDgyMGI4NDc2ZTliMDhjYTcxNGNlMDQ0NDE3YjI0ZDIyMzg3MjBjYjhmZmRjNjlkYjU1OGNiYWZmNTJlMzY1MWI0MDBlMTZjOWQ1YWM4ZWQ4OTQ5YTE5YzM1NTE2ZjgwMzk0YTA0YmQxY2ZkY2VkN2IyMDRmNzc5ZDc5MjA4NmUwMGIyZWJjYTJmNTVhMTE0MGU4NWY1ZWU5YWM3Y2ZjNWEzMTc0NyI6ImZlN2ZmOTBiMDIwZmM3N2Q3ZmNkOTBiYzU4Mzg1MGFjIjoiYTNiY2E5ZmYyNWE2MDAwNmViMThmOTkzZGNkYzk5NjgxZTQxNGUyNzYwNTI2NGRmZDI1NjUyMTk1ZDdmZTE0ODk1NTBhZmQwN2ZjNzM0NmI4OGQ5M2I1OWViNjY0MjkxMzY0NmU5M2JmNTBlZTFkYjVkZDMwMTA2Y2YxODExMjRkOGFkMDFjNzJlZDk5MDM4Yzk3OTg2MjBhYmRmNWM3OGM0MTliMDhjOTdmOTgyYjM0ZDllOTEwNWQ5YWE0NTM4YWZjZDM3ZjYyZTI0MTJmMTRmN2EyNDhmY2Q2MGFiYWYyYjY2Y2Q0NTU0NzY3Zjk5MDMwZjFhNDk1ZDU2YTVhZSI6NjQ6IjY0NDYzOThhZmY3M2VkMjMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MGE1OWY2YjBhYmY5MzIzMTFmMGI2NTYyM2MxNzc0MCI6ImJlNWE5NDhhNzcxYThkZjEyYWRhZjc0ZDcwMmYwNjRhNzVmNjQ4M2MwMzIwMzM2NWZiZGU3ZDE4NDg0NGZlNmRlZTBiODRjZjM0NGJlMDViMWQxNjM4MTdiYTE1MTZmY2I4N2I5MTY3ZWQ4MWY4ODRhZGE3M2IwMDU4ZTJiMzhjYmE1MTViYmJlNDYyZjRjMjFmOGRlMWQ0MWJjYTJjZjQzNDBhYTY1OWY5ZjA3ODg2YzJiYjYyMGQ5YzMyOTUzMThjMDdmYTNjMTdmZTgyNDI0MDkzNTljMDhiY2IzMzdlNWNmMjY4ODgwODM5YjZhMjBmNGVlNGIzZjA0ZTcwMjQiOiIyMDc3OGJlYTgyYTY3MTcwMzhlNzA2NGY0OGEzMTk4MSI6IjQwMjJkMDRmMTQ1NGE3MmQyZWZlNTc1MzNiZDMyNzU3NTk1MjIwYjIwZjNhMzdkMTY2Y2VjMDQxMmZiMWViMjU4OGY5MzllY2Q5MDZjODA1ZjQ4MjczMzg2Njk4ODhlOWY3MzA5MDUwMDFlYjFiMTM2Yjk1ZTMwNmVkZjcwZDliYTFlNWNkMGFhMTNhMjVhMWYyOGFiNTVjZmYzNmY5Y2Q3MDM2YzczNWUzYjI4NWQyNjAwMmFkMmVkMTA3NGI1NjZlMjUyZWEzZWM4YTljZTEwODgyMzc1ZGMzZjFkOTY3NmUzMDFkY2IxNzllYWFlOTkxMTIwYjc5NmNjMzU2NDgiOjY0OiJkYzc3YzFkN2UwOTAyZDQ4IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmJlNGVmNjI5ZjBiMzgxOTRjNzRmN2I2NjQxODkyMmQiOiJiNjdlYTIwYTMyMGY0ZWMwZTQxODVjNjJhNGFkNzlhM2M5N2E4MTg5YTVlNGQxZGVmZjlkM2VkZmYwZjlhOTMyMzUzMjg1M2MxYTJhMmMxZTYyZTRkMWFmZWJmY2RmMWQ4NDYxOTIxZWE2MDE3NTAzODBlNjNiOTEyZDhiNzM4OTE5OGY5NzY4NTFkODhhMTlmMWFhMzJjOTcxNDM2NjhhZDAwODM4ZDk4ZGExYzRmMmJlMGU2ZTJkYzk2NGQxNzBkN2Y3YWQyZTI5OTc5ODJlNWNhMTEwZTc0NGI2ZTEwYzI0Y2ExOGVhZGZmNmIxMjliMWYyOTBjOGE3ZTBhNTkzIjoiZmI3N2E0YjliMjQ2MjcxYWJmYzY1NjQzM2Y4NzYyOGMiOiJlNWQ1MjI3NzI1YTE5YTMwNTBmYmYyYTk3YTZlODU0YmMxMjE4Yjk0YTRhMzQwM2I3MjFhY2UzNDQ3ZGFmZjY4ZmZmNTU1M2EyNmVkZDQxMjE5ZTY4ZmI2MWZiOWU5NjRkMGEzYzI5Nzk2MjUxYWU0ZWI5NDIxODdjZGM1NWQxM2EwOWRmYjQ4N2U5M2Q5ZTIwNzJkNzI3MTQ1NmE3N2M2Y2NiODExNTQ0NDNlZWExNzYzMTRkNmUzYTA4NjE5YjUyY2Q4ODBmMWMyOGFlNTIxNGFjMDA5MGEzODU1ZGJkNzRmODczODlmZThhZmViZDQ2NDMzMGZiNjgzZGZmODFhIjozMjoiM2Q4ZmM2ZmIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNTBlMzcyNDQ5MzFlOGRlYmMxMmIzZDU2MWM4M2JhMiI6ImI5YWJmMDc5NmYyZDJmNzc0NzM1NTQ2Y2Y4MDkwMzBmNjVlZDBjN2Y2YmQ0NjllZjJmZTBlZjMyYWEwMjI1YjU3ZmJjZTA3YzM2MDE3YmJjMTgwNmE4MWZmMWE0MjkyNzgxNjBhMDc2NDNmODY0NDg1YjRlMGUzNWQ1NzU1M2RjMWExMzFlMzJhYTEwZjFmOTFkNjYzYjEwZjBhNDE4ZjQ3MmVkN2I0YmNhNTRmZDdmZmRiYjIyYzRkNzc2NGQ5NGE3ZmZkMDQ3MzA2MTQ0NTk0MzFlYjY0MzM1YjliNjUzNjNkZTI5MmMwNDI3NWQ0MGE3Yjk2OGMwZjVjNDg2ZTkiOiI2YzBiMWZkN2FiNDI0YTY4ODNjMzY0NTdkMWI1NTIxZiI6IjUxNmRjMjVmNjQ1MmFlMTY5Y2UyOTNjNWNlZTQ0MGRlNDczNTNjYTViYTc3MGRjYTBmMDQxNzU5NTBlODdhMmQ0YzNmODRmYmM2ZWVhY2FhYzQzNjg1MzQ5MjkyOTY4MDA2NmY5NTllNzRkZTRiNzM2YWI5MjRkODM2N2I5MGFhYTZlOTQ5MjU2MWFkNGI1YWE3OGI2NzM3ZDU2MmU5NjBlZGMzYjk4M2UyZTAxYTE4NmU5ZjIyODk2ZjQ4ZDhkZmNmYjZhNDJjZmUyYzYwMDZjNjg3YTI3NzcyODIwYTFlODg3NWJkZjA5ZTgxMDQyNDhjZTRkYjg4MzM3NmJjMDQiOjMyOiI3ZDQzOTNmMCI6Ijk2MjUwOWU0OTRmMTAyNjliNzBlYmFkMDJiMGNkNzk5ZDFkNDExOTFhNzM0ODYzZWY1MDJhZmYzZDNiYTQ4ZGMyYWNmOWRhOWEzZmMzZjQwYmU0ZDIxMGRjNWUxMjhiYzAwNDk5YWVjNTdhYTBhNDY2OTg2MzE2NTQyODY4N2I4OGQ0NmZhZDQxZTM2YWY4ZWE2NjA1NTg2ZWFhNWMwNzM2ZDBkNTNiOWQ1MjNlMGNiNWEwYjI4NTA0OGUwNjBhNzNjYmY0YjU4N2QyY2Q3ODdkZWJkYjJiNGM4Y2RhNzMxYTYxYTE1YjE5ZmU4YjU2MWZiZGQzYTczNzM4NTNhZTEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg1MzFkZGIwMzk3NzM4MzQwNWJhZjJlZTljYTdkNjRiIjoiZDkwYzllMjY1MDliZGJhOWIxZGVhOGQyYjk0ZjJiMTg4MWQyMmMyYmQ3NTZhZDIzY2Q2MTk0NDcxMGExYzFmMjgwNzE3MGVkNDdhNjg3MGFlNjU0ZTQ0NzU3ZmNiMzgyMmVmMjhiMzc5NDZjYWZjMDcyODRmOGEwYzIyYWUzNTUyOTU0ZjBkODdiOGQ4YzgyNWJkNTQ2OTM1YjQ5NGNhY2I0MjYyZDllMmE4OGYyNTRmMjAwYWQzMTM2N2Q4YjM3MTVhZmJhYmVhNWYzNDIxNGZmZWRiMTRkN2M4NDgwNjAyMmFiYTJkYzhmODhhMzE0ZmZiYjI0MDE3ZDFhOWI5ZiI6ImJhZjYyMzg2N2Q2YTI1ZmQ4NWQxZjA4ZTU5OWMwNTY2IjoiMThmOTJjZGQzN2RjZDdmOTliMDY4MzhmM2Y2ODc0OGFiYTM2N2JhYWJhZWJkMGRhOWVlNzg3ZDcwZTc1MmZhMDdkZWE1NTNhNDNiNjQzYjhkOGY0NjAxNzVjMDc0NjY3NTIwNWUyMGE3YTk4YWNmY2FjODY0ZDdjNGNmNWFiNGM0MWMwMzE3MzhjNzY4ODJhY2RhMDAzYzVhZjQ3YjFjNGRmODg5NGE4MjdhMzE3OTM1ZDk3MGQ0YWZhZWUxNzcxNWM5Y2ZkMTg4M2U4YzM0NWYxOWQxZjg5ZTIyOWI4ZWRiYTZiNGY1M2I4NmQ4ZGExYzBmMTU5YWZiODNiNmIzMyI6MzI6IjJmYzlkZTQ2IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg2MmRkNWIzNjJjZmE1NTZjYTM3ZTczY2ZmN2Y0YTBlIjoiIjoiODE1MzBhMjQzNjU1YTYwZDIyZDlhYjQwZDI1MjA0NDciOiIiOjEyODoiM2I5YjJhZjU0ZTYxMGVkMGIzZGRhOTY5NjFkZDg3ODMiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzNDUyYjdiYzEwMGMzMzQyOTJlMDgzNDNmMTM5YjlkMCI6IiI6IjhmOTI3MzlhMzBmZTRiYTI0MDc5ZjVkNDI3NTNkNmFjIjoiIjoxMjg6IjBlZWNhNjlmOGI5NWUxYTkwMmNjM2FiMWFhYThlMmFmIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzFhMGNiYWYyMWI5NDNmOGJhZGM5MzllOTRlYWM3ZWIiOiIiOiJkNWJiMmM0ZWFlYzQ3MDg4MjMwOTcyYWUzNGZjZGE5YyI6IiI6MTI4OiI1ODBlNzI4NTEyYzhlNDRmYmIzZmUyYzQ5OGUwNTMyMyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjllOGZjYTUzNzc0NmU3Y2JmZjk3ZjFkY2Q0MGEzMzkyIjoiIjoiNDNlOWYyYmYxODZiMmFmOGNjMDIyZTdjNzQxMmQ2NDEiOiIiOjEyMDoiNDQ2NWEzZjlkOTc1MTc4OWJjZWY1YzdjNThjYmM1IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzViNTg1NGNhODM3OTJhZDY5MWRiZGExYTY2NzkwZmIiOiIiOiJjZmY2MWNmOWIzMmVhMzBjZjdlMzY5MmFhNmU3NGJlZCI6IiI6MTIwOiI3MjY3OTMxOTlkZjUzM2RkOTA1NWIwYWM3YzkzOWQiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwNzI1OTI2N2MxYzZhMDE1NDM3YTVkOGNmYTkyZjllNiI6IiI6IjE4YjljZjJhZDdhY2U2ZWMxYzgzNjZiNzI4NzhjZjIwIjoiIjoxMjA6IjQzNDBmNjI2M2YwYmEyZDgyYzJlYjc5Y2IwY2M3ZSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZhMWRmODk1NWFhM2VmMTkxOTAwYjA2ZTdjMWI3ZDQ2IjoiIjoiNjkyOGMxMzhjOThhNDM1MGMzMThmYmRjY2QzZjQ0YmEiOiIiOjExMjoiN2M4OWQ5ZTc3NTE1ZDI3MWI2ZWQ1NGM5YzRlMyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjMDQyMDBjZTQxY2U3N2Q3NzJiYWJiMjA2MzE1ZWM3ZCI6IiI6ImE4ODVkNThmMGYzOGY5ZmYyNmQ5MDZmYTFiZmIxMmY0IjoiIjoxMTI6IjllZTBkMDI1NDIxZjJiZjE4Y2FmNTYzOTUzZmIiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2NTBkZjA0OTQ2MWJlMzQxYzMwOTliZDE2MTNkY2VhZCI6IiI6IjhhNGZmNjMyN2I0OWQyOTcyNDhjZTJkNWJkMzhhZmE4IjoiIjoxMTI6IjEzZjA2N2VmMGQ3YjQ0OGQ1NmU3MGQyODJmZWQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWU2MWI1YmY1MDYwZmNjNjM3ZGM4MzM5MjY4OTg1MDgiOiIiOiJiMmRjZjIxZjlmZmE0YTg4MzA0NGQyOWYwODdmOWI4NSI6IiI6MTA0OiI5YWIxZDY2NjY2ZDRkZWEzY2JiNTk4MjIzOCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjAxY2M1NmNhN2U2NGRiN2ZiZWY2NjIzNmE1YzQ5NDkzIjoiIjoiOGVhNWI2MzAwNDE4OTc5MmNjMDQwZWYxOGIzN2U1NTAiOiIiOjEwNDoiZDY4NWFlYjU0YWExMjlhMjFiZWQxNzc2NmUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTM0ZGQ3MmFjOGUyOGFiNDY3MjBjMmY0MjI4NGEzMDMiOiIiOiJjNjM2OGU0YzBiYTBlYzkwZmE3NDg4YWY5OTk3YTRjNyI6IiI6MTA0OiI0YWQ5Y2RmMTlmZjdkN2ZkN2UyNzNlZmNlZCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTgwYzA0YjJiZGU2OTAxZWRjZGE2NjA4NWY3M2VjZDkiOiIiOiI5MTkzYjIwNmJlYWRlNGNiMDM2ZjAxYTlkYjE4N2NiOCI6IiI6OTY6IjUzMGY1ZTllZDA4NzljY2VmM2E3YjM2MCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWFhYzg1NzQyYTU1ZmZhMDdlOTgxMDZkNmQ2YjEwMDQiOiIiOiI2MzBjZDhhYjg0OTI1M2M0ZGE5NWFjODAzMjRlY2MyOCI6IiI6OTY6IjM3OTExODIwYzgxMGUzNzAwYzNhOTMyMSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFiNjYzYzRmOGYyZmRjN2Q1ZWFiZjZlZjI2MTY5YjRlIjoiIjoiODZlNjEwMDY2OTkyOWUzMjlhMWQyNThjZDM1NTJkYzkiOiIiOjk2OiI5NThkNjE0MWY3ZmIyYjJkYzdkODUxYTYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwZGQ3NTZkNDlmZDI1MzgwYzQwMjZlYTAzY2FmYzJkYSI6IiI6IjZhNmY3ZTM5YjBkNzMwZWExNjcwZTEzZDE2YzEyYzI4IjoiIjo2NDoiODcyZWYwNWEyOGRhNWVhMSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmQ4YTgzNGIyODhiZGM3NTc4YjZjNmFiMzZmNWQwNjgiOiIiOiJhYTc3ZGUwYWY1ZmE0ZGQxZWQyYWRhNWNiOTQ4MTNhMCI6IiI6NjQ6ImM1YzA5NGU4Mzc1NWYyYjYiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjAyMGQyODBkYmQwNjkzOWJiYjVlNmVkYzZmNmQzOWM2IjoiIjoiMDlhZWE2ZjBlNTc1OTg0NTI3MTlkNmY2M2I2ZmU1YTAiOiIiOjY0OiIwNWQ2YzU2YmE2MDFlODViIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTQ3ZjQxYTI3YTI3MjJkZjI5M2MxNDMxYmFkYzBmOTAiOiIiOiIyMjdjMDM2ZmNhMDMxNzFhODkwODA2YjlmYTBjMjUwZCI6IiI6MzI6Ijg2YzIyMTg5IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWQzZTExMjExNGI5NGUyNmU5M2QzODU1ZDRiZTI2YmQiOiIiOiI5OWI5ODUyNTE2MGM0YmIyMDI5ZGE1NTUzZmY4MmI1OSI6IiI6MzI6IjMzYmVlNzE1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWI0Yjc2ODg1ODgxMjUzNDlmYmI2NjAwNGEzMGQ1ZDQiOiIiOiJiNGFlMzYzZWRiNTI5ZDhiOTI3YzA1MWNmMjFhMmQ5ZCI6IiI6MzI6IjZhOTIwNjE3IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzRiNmM1YjhlMjFjMzJmMzZiMGFlNGVmM2I3NWQ1Y2QiOiIiOiIzZDEwMzZiZjAwMDBlNmYxYjc3YTc5OWYyZWYzMmRlYyI6IjFjZjJiNmNiZTg2YTg3YjRiNWJiM2NjNTAwMjRhZWIyN2M0ODE0MzY1OGQ0N2I0MWYyZjIwYjg3ZWQ2N2JkNmZjM2I4NWEzYTgwM2Y2NmQzNTc2NjA4ZjVkNmNlNmNhZDExZTAyZmUxMmRlNTM5MDcyMmRjY2I4MjQyZTFkZDE0MDA1MWJlZjUxYWE5NzE2Yzg2MGQ0NWQ0NWJjYTZlZmZiYjFhNDc5N2U2ZTc0MDZhMDRkYjVkODIzNzY2YzBmMDExZWJjMjhlOWE4Y2Q0NDQ2ZWM4YTc1ZWE4YmRjMWIyZmRiYjVjYzM2NGZhOTg3Nzg4NmUzMDQwNDU5M2RmMzQiOjEyODoiYTQ5NzI1MDE0YzIxNGVmN2NjMmQyOGI5YjJiNTNkYTciOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjNjM2Y4MTUwMDc0NmVhZjM4M2ZlMzk3NWQ4NGY4NDkiOiIiOiIwNzk5ZDQxNTJmZDczYzE2MDRiNDYxMGNmNzE3MWZlMSI6ImNiODI0OGU1ZjkwNGNjOWNjY2NmNmYyNzNmZTYyMWVlZTFiNGQ3ZWQ5ODQ4MGY5ZTgwNmE0OGI4NGUyZDZhNzMzNzcyZWNmOGZiN2ZlOTE4MDU3MTVjZGRhYjJiNDYyYjg5ZjZlNmM3Y2Y4NzNmNjUwMzFmMTNjMzU3ZDVmNTdiMDBiN2MzOTFjMzllNzhhZDFlZDk0YmUyMzZjYTBhZTMxNmJjZTExYmMzM2M1ZDcwMWZkZmM1OGFiYmU5MThiOWM0MmY3YjNkNmU4OWQ0NmY5Nzg0YjM4OGE2ZTZkYWY0NzczMGI5ZmE2NjVkNzU1YTE3ZTg5OTMyZmE2NjljNDQiOjEyODoiYzUzZDAxZTUzZWU0YTZlYTEwNmVhNGE2NjUzODI2NWUiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMGM4OGIxOTFjZTZlOGU0YTM5NDFmNzk2MGI3ZWFlNSI6IiI6ImUyYTg5OTk2MWMzMzJjODE1Njg1YzU1MzM1MWZhNTE5IjoiMzA4YmYxMDU3MGFmNDhkNjMyOTExZjM2NDFkZWE2MGQ3ODA0NjIxMWMwMWE2M2JiOGU0ZTVjYmRkZmZmODg0MWQyZjJiMTFlMThjY2IyMTcwODA1ZWY0Y2FjZjc4MDRkNjRlMGZlZWY0MDczMWExNzA0OTA3ZjMzYjc3Nzg4YzE4Y2NmMzViMjI0ZWMzMDQ2YTY3NjY0YWM5YTM0ODFkMjM4NWI2ZGRlZWM2ZGE0ZjMyNDIzZjk0ZWE5NjYzYTVjNTFjYzM4OGNlZjMzNzQ0YTgxNTliNGZiNjU0ZGZkYjUwOTI3MThiZjkyNmM4MjRiZTMxMTk3ZjA3ZjI3NmI1ZiI6MTI4OiI5MjYwNGQzNzQwN2FmZjMzZjhiNjc3MzI2Y2JiOTRmYyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjODE4ZGZhMDg4NWEwOWY2NWVmNzg3MTJmNWNlNjYwOSI6IiI6ImNhMjc5Mjg0NzIzNTMwZmRkNjhhZTg4MGUwY2U3NzVjIjoiMmE1NjJhYmRiYjQ4M2NhNWYzNTVmOWNjMWM1ZTYwN2JkZDYyNGEwNzhhNzZiNzE3Y2UwZjhmMzVkMGQ0YzU0YjYyOWYzNzJmMTVkMjBjODQ4ZDAxNDIwYzZhZjVhNzA0MGQ0MjA2MzcwNGExN2I0NjI1OWRjYzUzNzIzY2FmMmQ0YmY1NTYxNDNmZjkxMTdjNzUyZmE0ZjIyYzljMTU1Yzk5YjdiZjU5NDlkMDg5Y2RhZmQ1NjIxNjViOWNiZjUzZmY1MWNlYzIxZjQ5MTI4YzhhNTk5NzE4YmJjZGI0YTVkNzA1ZDIwNTA5YzQ0Yzg5NDVlMmExMzMxNjRiOTk0MiI6MTIwOiIyMGU5YTNhOThkNzFkNDYwNzQzZTFlZmFhYjEzYzYiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMzU0YzZiNmFmYWE4ODNlN2NlOTFmYWNhNDk4MWY4YiI6IiI6IjYwNGYyNzMwYzc1NmM4YzM5YTA1MjcwOTNiYzJmZWI1IjoiOTU5YjRiMGI5Y2UyZTkxMjBiMzI3ZDJkMDkwMTE3NTUzOTk5ZWUxMGJkZDM4NGE1NDZmYzZkZTA5NTdlZjRiNDQ3ZGFmMDdiM2QwN2VmN2RiYzgxMWYzNmIwZmMwOWExNzVkMjZlNGQxMjYzY2I1ZTIxZWRhNWVjYWI4NWQ3NjM4MDdiYjIwYjNjYjZhYzNmMzFkNTQ4ZGZmMDBhYWUwNThkNDM0ZWJjZjZmN2UzYTM3ZjExMzI0MTM0ZjQ1M2RkMGVhN2Y1MTA5NDg2MzQ4NjQyNmZmMTcwNjEyOWE1YTkzYzUzZDhjNWNjYjU2Y2FmYTU4ODE5ODFmZTIzM2NiMCI6MTIwOiIzNTg4YzlhYTc2OTg5N2RmYTMyODU0OWZiYmQxMGEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMGFmNDhlNmFlYmJiNmZmNWI3YzkyYmQxNDBiMDg1ZiI6IiI6ImQyMTBkNjUwMmE1MjIxYWMxMjc0YTljN2Y1YTgxNzI1IjoiZDcyNTMxMWNhMTBlYjRiNGFhMjRlNmRkMTljNWU3MmRjMzRmYzFmZjUzZmViMjVkOTI0YTliN2Q4ZDcyMjA1NzkwY2E0YjEyNzViZDkzYWQ2MGMyN2E1NTg3YTQ1NjU5YmNhMDdjMTExZTk3NDhmYjY4M2EwMzQ2NTE1M2ZmZDczNWI3ZDEzNGI0Nzk2NzRhYjg1OTZmMDU5NjQ5NmZlMjA5MGY2MjNmZDFlNGRkNzMwYzUyODNkOGIxNzJkYjhhMjVkZjQyZDliMzRmMzg4ZWQzMjY3NmE1NmI4YmEwMzM0N2U0NzM3OTcwMjY1NDUwOGNjZDBhMjFmZjAzNTE2ZSI6MTIwOiJlNjIyMmYwNjhhMWUxOGYwOWJhNmM3NzFlYWJkODYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTA1ZmU0ODJmZTE2NGIyZWNhN2Y2YzNlMzc3YjM5ZDgiOiIiOiIxNDUzMjdiY2MxMDMzNWZjY2I5M2FmYmY0YjE3ZTZlNyI6ImVhNmYyZTkzYjVlMWJmMTI3ZDQwNDQwYjhkNjM5NzQwNTI0NmIxYjQ4ZWViZTE2OTY0ZjE4OTI4ZjZiNGI4ZWUyYzM2MzIyZDcxMjY5MDVjMWE1YjgxNjk5NmUzNDA0MDRiNTg2ZWRjMmQ3N2FmYWMxMWE2YzEyNjY1MTFmOWVmZjFhMzIwYjAzNTQ0MmQ0MDc4ZjhlNDJjYTYzY2YyNmQxMmE5NzFhN2FkZjQ2NDVkMWJkOWE4ZTRkMGEyMDcyMmY3YzJkNTI5YmVhZWNjNDAzM2Y3NzM4MDc1ZTFjZGM2ZDhhOTI5ZGE1NTgyNTQwNjc4OTM1YjgyZTdiN2JhNjgiOjExMjoiMzkwMGJkZTlmYTlhZTJjYmVlZTU0ZDA0ZjIyNCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRhY2JhZGY4MTllYjE2YTYzZjZmMDkxZDEzZWQwNGQ0IjoiIjoiYjllYmNlNzI0YjBkY2IwOTg5YWMyZDhlN2ZmOGFhZWMiOiI3ZGM2ZTIxODlkOGE5NmYzNTA3ZTM1MmUwNWU4ZmQxYjRiYWI5ODhjMmYxYzcwNjExNTg4NzExOWY2M2I3ODA4NGYwMTVkODVmNmI0NjA5MDFhMDI4ODAxMDNlNGQzNmU4ZjY1MjdkZmQ3NGU0YTNhY2QzZjU3OGMwY2M3MjZiNTI4ODc1ZjcwMWZmOGI2NmU1YzExYjQ2ODljMzQ2YTA5OGUxMjNiZWJmYTI1MzM2MmNiODY4MjliZTczYzJiODVhNjg4MWZhOTc2YWE3MzBmYWJiNzY3NzUwMjdmZWVjN2ZkOTIwYTZjODk2NWE0YTUwOWVhODEyZDdjNDEzYTk1IjoxMTI6Ijg5ODhmY2E4M2M4Y2ZiMWY4ZmVlZmFjNDZmMDQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTY5MjQ0Yzc0NDRmM2YzYmYxOTNiMjhmOGU4ZTk2ZGMiOiIiOiI0OWIyODQ1YTFhMWM4N2ZhNjZlYjhmNzhjMDVhYzAyOSI6IjE0MTRhMDdlODZkOGI2MWQxZWZmNDNlMWZmNGFiNDJjMWM5NWUxNTkwNThiNzRjNzMxZTMwMDdkMjFhNWViNzhiYzE3YjdlOTIwMzYzYTM5NzRhZWI4NjA4ODEzZGM5YTQ2NTUxOTliNjcwM2VkMzM3NDUwNzAyZDhhYjE2YTg5Nzc2ODMxYjJjN2M4MTFmZWMzYWNjMjM1OThhMGFhMDE2ODBhN2JmNDJhNGUyNTgxNDViZWIwOGM5ZjBlYWNmMmJiNWY1NmQyNmJlYTNhZDExZTFhOTU2YTYzMGI4MGYzZDIyYmYzNTU5MmI0NzA0ZjdjNDY0YjA4YjA2ZGQ3ZjgiOjExMjoiYTI5MWM3NTI3Mzg1ZjAzN2Y2MmU2MGZkOGE5NiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjUyNWFiZTQ5MGM4NDM0ODAyYjY5NDM5YzU5MGE1MjkwIjoiIjoiMTQxZjc5ZjA1MDEzMTZlNjY0NTFjNDFjN2FmMGYwY2QiOiJiZTQ0MGRiNjZkM2Y4MWJlNDY3NjA1YTdiMjgwNWVjMWRmNWU3MWUxYjFiMDRiZDdhNGQwNWU5MTJmNWFhMTkxMmJhMDhkZTcyZGYxODYxM2IzMmI3ZWRmNzg5NjNjNDhjODBjMjUxNzhiM2IxOTI2MmI4NWJiODI5ZjUzNzdlMGIzNjhiNTAwZDZkM2I0NDJmNTQxNzJkNGNhNDUwMGViNWI0ZDQ3OGI2MDJlNWRjMTFkMDkwNTM5NDU1MDg3Y2UxZTViOWVhNzQzNTVmYzA2ZTliNjBjYmYyNWE5ODA0ZDNmOGM2MjNmZmYxMzBhYmM0OGJjMmQ4ZDExNmI4MzY2IjoxMDQ6IjAzOGM3ZTk1Zjc5MGU2Y2E1Y2U3M2Y5NTUxIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTE2NDRlMDI1NjU5ZGU5ODNmNWM4MTU2NTE2YjgxMmUiOiIiOiI2MTQ4MzdjNzQzZDA5NzRlOWNjYTQ5N2YxMzAzOGMwMiI6IjYwYzVkMDYyYWRlMmM1YzJkZWM2OGI3MzRkZDNlNThlYzQ3NGE1ODZkMWM0Nzk3ZmRmYTIzMzc4MDA1MTAxMzRjYjI3YTEwZDUwMTkyNzYzMmFmM2MxZmViYzI3NTAxMGMwZDJlNWFiZWU2MzBjZDJiYzc5Mjk2M2ZhODJhNDIyODZhYjA0N2I5MzRhMjYxOTI3MzExYjQwZjVmOTUzYmZkNjYxNDI3OTIxMTQ3Y2FjNzYxM2Q5NWVlODZlMTYzMjZlZjY3YzFlZDA5N2U4ZmI4N2E3ODc1M2Q3ODVkZTM0ZTAzYTE4MjIzMjc4NjA3OWNiNmJlMDAxODJlNDFjOWUiOjEwNDoiNzdlM2RlYmEyYzdmOTM4NmY4NWJjNGE4MDEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwODU2NmNhNzMxMDMwMmRmYjg0ZDc2ZWEwNTI1YmEyMCI6IiI6IjVmMjBlYzljMzVjMDhhYTdmMWMwZThhMjBmZGJkMmIzIjoiNWQ4NGUzMjc2OGI4ZDFlN2UzYzQyNmIzMTE4ZDQ4ZTM1NDkxYmYxYmI0NTRiMzU5Yzg0MjkyMjAyMTZlZmQ4ODI2YmU5NGZlMTkxOTQwOWExMjhjY2Q4MTI1YTU5NGYxNjkxYzk0MjFmYzNkYmJiM2Y3NTdiZjIzNTViYjBkMDc0Y2VlYzE2NWViNzBlMjZlYjUzZmEyY2I1ZDg0ZGZhZTA2YmFiYjU1NzgwNWVmN2I4YzYxYzFiYzc2MTM3NTcxYmNjNWU4NGJmNTk4N2RjNDkwMTM4MzFkNzhiZDQ5N2NjYzQ5Y2RlN2RjYTJjYjc1ZTdhYjk2N2RhOGM2Y2U4MSI6MTA0OiI4NzNmMDM3ZmMwNTI1MmE0NGRjNzZmODE1NSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGZiNTRkYjk2MzgzZmE5MTFiZjViNGZhMTIxOGVmOWEiOiIiOiI3ZTg0OWUyNDk4M2Y2M2YxMTk0YjM5NmJiZDJkNTVlMCI6ImQzZmI2ODljNTgxODgxMGRkMTA0NjkzZjMzMDZhMTBiMjcxNzg0NDRhZjI2Nzk4YTE5NGY3YzJhYjMxZmYzYTE3MjkwNGI5NTE5NDJiMWEyNmM4YWU1YjViMWVlMmQ4NmRjNzhiYjcyYTMzNWZkZTM1MDc2NmQ3ZDlhZWY2ZjU0OTg3MWRkNDZiMDRiMmNjMzE5ZmNkZDQ3YmU0MzdkNDMxYWQxOGNhYjgyZDUxY2E5ZmE1N2Y0MTA4YThkZTYyMmE5MmY4N2QyOGMwMzQ5ZmFiMjc3NTdmZDc3MzQxM2Y1NTlhOGMwMGQzMGUyNThjMWY2Y2Q5NmY5NzU5YmQ5NTciOjk2OiJkYWRhN2ZjN2ZlZDU4ZGI0NjI4NTRlZjYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzODljZjg4ODQ3NGU5NDAzZTVmNGQwZTIyZmZlYzQzOSI6IiI6ImVmNTc3OTRjZjZmYWM5ZjljZWEzZTg0OTliNTNiMWQ2IjoiN2VhN2Y3ZjQ3NjNhZDIwOGViNjE5OTI4NWI2YjI4MTk3NTZjNGUzY2FmMmQwYWM2ZjUwNzZhZTY3ODVmZWNkY2M0YjEzOGE1MTg2MGZmOGI4N2FhYWMzYTE4YzJkZjc3OGE0ODE4MzA4ZDQ1OGRiYTI4ZjUwMTc1MTNlMTQ1NGY2MGJlMjBkYWU2ODczNmVhNmQ0OGIxZjlkZWFkYjUxN2RmNjMxNDBhY2JkMzI5ZmJmYmM5YjgyZjNjYTE4NjJjOWU5OThmMGZhZmYxZDNhZTYwYjAwNWJmNjY4MjlmNWNmMGM1ZmEwM2VmYmRkOTJkMzkzNTFlMzk1NGJlMDI1NyI6OTY6IjkyNzI2ZDkwYWQyNjEzMGU2NWYyYmViNCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU1NWFiYjJjYTM2YzgyMmJmMmEwMzBhYzcwM2NiOGI0IjoiIjoiZDg2ZjcxNzdlOGVjOTBmOWU5ZWRmMTAxNzVkNTAxMmQiOiI3NzdhOWQ5MzA5MWRlNTYzMjRjMTA3MTIyNDNmNTU0MTcyMmUwYjI3ZTFmMzAzZmVmNmZhYTM4N2E4NjY2MTYxYWIzNTRkYmVhNmM0M2M4MmEyNGU4NjIzYmZlYzM5YWFiMTMxNjRhZGQ2YmUwZGZkNTVkMjMyMDRjMDk3NWI0YmE2ZmJkYTUxMzYzYmVmZGU0ODJhOWNjYzFlYjlmMTUxZTZhZDU5Yzc3YTFlMjRkZDI2ODM4OWU0Njg2ZjE5OGE5MzZkZDYwMzA0NGEzZmI2NTNkNjNjZmY4MDU5N2Y1YTI5MTNjOGEyZWMxYjdkOWRjZTU3MjhkZDU2Yzc4YzJjIjo5NjoiNjUwMjUyNTAzNDNlZDhjMDliM2ZjZWVkIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ODYxMTRmM2IxZGMwODdlMWIyNzM5YjI4YzU5MmRmZSI6IiI6ImFlNWEzOGRkZDQ1NTUwNTI4NDQzNGE0YmNmZTgxZWYyIjoiNTMxZmY4YzI4NWU1MzJkOTYxZjQ5YmQyMTBhNTUyM2NkOWIxOWE2OTdhM2EzZmIyNmRiOTQwYTQ5NmYyNTM4NjI0MDViMWU4MjVkYWVkYTdlYjA0NDVjOTgwMjJiODM0MmM4ZjhlYTIwMzAxNjE4NDgzZjhhYjA0YjZlYmNjZDdlN2ZjNTc4NzhmYjU0NGE1YmY3OGZhODk2ZjUwYWMzMDEyNmZmOGFmY2E4YTg2Mzg4NjY2YjY0YzY0M2QxNjgxMjcyOWJmZDdlNWMwM2JhNTJmN2U2ZWE0YzZhNjg1NDA0ZjdiY2JkOTU2OTY0NDE3ZmEwZWE5YTZkNzI5MGM0MSI6NjQ6IjQ2N2E4MTU2MTBmYWViODIiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNiZmU4MDZiZGRiN2YwNmIzODI2YjA5NzU1MGM2OGY1IjoiIjoiMDRjMWI2YzlmZDJhYjc2ZmMyYWRmZTE1ZDM0MjFiYmIiOiJjZmE4NmQwMjU5OTY1MmNiNGZmZmYwMjdiOWM2ZWYyMzM2ZGM5ZmU5NDZmNjRmYTVjZTgzZjYyNGUxNDQ1NjNkNDczODM4MWJjNTM3MWMzY2I1NWNmNDFjZWRhMDdlNjJjYjYzNWZmMzcyNDZiZmE0Mjg3ODUyMjljNmU4NjlkNWRmNjlkNzk0OWE4NTc3ODg5YTI5ZTNkMDViNzg4ZGRkNDM2MDhkOWMxNGUzZjFiNTFjZTIwODViOWE5NzZmZTg0M2UzMzk2YTc0OTIyYmFiZTY3OTdkNWYwMWMzN2VhZDYyM2I1YjU4MjUwNWJjZDI5ZWRmOGE2ZWEzNmIwZmM3Ijo2NDoiMDY5N2FjMzcyYTlhY2FmZCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTZjZTNhMDk1YTkxZWZmZGQ5MWQ2MTZmMWYwMmRkY2QiOiIiOiI1NzlkNjYzM2VjNjY4N2FmYTI0ZWY4NzQ4OTliNThlMCI6IjNmZjNjMDAzODE0OGVkMzkxYjZhMTBhYWQ2MjNhODJmZTkyMDljNWJhNzQ0ODJmMTE1MDZkNTk3YjVmYzdhZjk3NzIzNWQ4ZWU5ZTI4Y2YyMTYwMzQ2ZGRkMGUzM2E1YmQxZmI2N2I4N2RhZDcxNjdmZGQ0YjJiNDAwMGQ4NDYwZWY3YjNlMWI1OWI5ZDYxZDA2Y2ZiZTc5NDUzNzllZDZiNjUwZGU4NmYzOTZhMzhjYzcwZDQ3YjhhMzQ5ZjA2N2QwMDE0NGM5MDNjMjc2YjMyM2JlNmE5MjlhN2Q3ZGQ4YWU3ZDI1NGQ2NDBjZGMxMTc2Zjk4ZTAxYTFkOGM4MmYiOjY0OiI1NWEwZjYxMDMyZTA0OGYzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjRlY2UxNjhjMjk3MWNmMmI0MDRlYTIwNmRjOWUyOWQiOiIiOiJlOWRiNjJhNDI0OTE2NjRhNmM0NmNiYjBiMmJhZmM5MiI6IjM1NzlmNmMwY2IzZDJhNWQwYzQ1NDg4NTVjN2MwNTJkMzZiNmE4ZGZjNjBmNGNhMWI0YmJlMjhlZDg3MzA2MTE5ZTcxOTgyZGQ4NGM0MjA1Y2ViYTkxOGQ2NzU0NzI3NTNkZjFiNTE5MmQzNjkzZGJmNmEwNjFjNjA1NmUzMTIxMzVmZmM1ZmY0MjY4OTVhN2UzMGY3ZjY3NWQyY2IyMWRlMDZlZWE1ZTM3NjFiOTRkZWVmNzUzN2I5ODVkMzI0ODY0YzlmZjZhYjZlMjMwYTEwMDY3MjBmOThjOTU4OTEyYjYwNGE2ZDAzZTM5Nzk4ODdjMDdiZTNjZWFhZmM3OGYiOjMyOiJkMmIxNWEyMyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQzYzNjZjk5M2Y2NzQwYTAxOWU2MWNlMTNjMjk5NTVjIjoiIjoiYWY5MDBhYzM0ODA4MmZmMzJkMmUwYWI4ODYwNzk1MTYiOiIyZGRkMGU4Yzk5NjYxZjA3NTdmMDRhYTc5YTFmZmEyNGFkNDhmYmU1ZGE2OGI5ZTcxZjdhMGNmMWI0ZjJjYTliNzU3Njk1OTAwYjc1NDlkNDg4NDdhZTQ5OTUwZGM5YjI3MGIxNTY5ZDI5ZGNiZWY0MTIyMTY3MzdiZDgzNTA5YzE3YWU0MWMzNGNjZGEzMTg5MzljYjM3YTBhMzgwNzYyOTkzYTc1NjhjMGIwNzc5NGU3ODc0NjE3M2RkNWMwZDkyMWNkNTBkZTRiNTQ4YzE1ODllMTQyYzNkYWRiYWQ0MjE2MWFhZWRhMjMxMGYzYzZkNWM3MjJkOWFjNjllOTZkIjozMjoiZjJkM2E2ZmYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ZjFlNWJkNDVlZThiYjIwN2ViYmQ3MzA1MTBmZjIxOCI6IiI6Ijg4NDY0MjRhMTk0ZjVkZTg1ODU1NmU2YmU1YjY1ZDdmIjoiZTk2ODk0N2ZjMGU0OTEzNmU3MzBiOTdmNmIxNmUzOTNkNWU0ZmRmM2U0ODAzYTIzYWY3OTIxMWVmNTlmMjkxNjdjNjBlYWQ3MmZkNDg5ZGEzMmQyZmZhNDNiMmJjYTIwNzRmOWQxYjRmNTM5NmNhNjUwMDRiMDgwNmNiN2M2ZGZhNzUxZmI2YWZiZWUzZTQ0M2YzYzliMGUzZGY2NzIyZTBkMTMyMDQ0MTQwMGM1Y2E1MDhhZmI2NTdjMmI3ZjE2NjliMGRlMjE3NjFkY2NhYjlhNDBmYzUxMzc2OGJkMWY1NTI2OTI2MjZjZTM1MDc4YTJlMGUxMmY1ZDkzMDY0NyI6MzI6IjBkNmMxNWRhIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzk5NzA1MDM3N2NmYmI4MDJjYzQzOGQ5NzM2NjE2ODgiOiJiMDJmMGRkMzczZTQyYzY1ZThlMWRiMmRkNzZhNDMyZTBiMmJmNmU2MzBjOGFhZjBkNDhhZjUxYjM3MDliMTc1ZGU5YTE5YjMyNDVhZTc1ODE4Mjc0Yzc3MWMwNmZhZTIyNWM0ZjhiMDAyMjM2NzEyMzM2ZTgwNWFiMDA2NDQ5ZWIyOWNjNWUyOWFiZDgyYjA2YzMyZDRjMzZlZTk5YWNiOWE2ZDdkOWVhZTZlYzZlYzI2M2MwMDJhMjJjNGE4OThjNzRmNmFiZDZkOTIxMTIzNjdjYTdmZmU4Mjc4N2M1YjM5ZTcwMTJiYTIyODI1ZDM2MTJhZjNkNDFlODAwOGE4IjoiYzk1Yzg0YzI2M2JkZmQ1ZjFkZTY2ZTdlNjE2Y2YzZmIiOiIiOjEyODoiYjM1YjNjZjZlZDU5Y2NiNjlkYmM5YjQ3YTNmMjg0YWUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzU4NTgzZjY0NzlkOWJjOWYxYmZmZGRlZmVlNjZlNTkiOiI1NjRhOWY3MDBjYmMxZjg5NWU0ZjRmYTY0MjZmNzNiNDk1Njg5NmExNWU2MTI3ZTc1NjBkNzRlM2ZkMGI5ODBkMmVlNDViN2E2YTM4ODRmYTYxM2Q5MWQxMzkyMWUzZjkwOTY3ZDcxMzJiZGFmY2QxNDZkZDhmZjcxNDdlZDE5NjRjMmJkYjNlMTJmNDEzM2QzZGJiYzNiZjAzMGZmMzdiMWQyMTQ3YzQ5M2NlODg1MDY4ZDliYTViZWJhZTI0OTAzYWFhYzAwNGFhMGFiNzNmZTc4OWU0MTUwZTc1ZGRjMmJkZTI3MDBkYjAyZTYzOThkNTNlODhhYzY1Mjk2NGFjIjoiY2VlNDQ4YjQ4ZDM1MDZmZjNlY2MyMjdhODc5ODc4NDYiOiIiOjEyODoiMzYxZmMyODk2ZDdlZTk4NmVjZWY3Y2JlNjY1YmM2MGMiOiI5Y2NlN2RiM2ZjMDg3ZDhjYjM4NGY2YjFhODFmMDNiM2ZhZmEyZTMyODFlOWYwZmNmMDhhODI4MzkyOWYzMjQzOWJiMGQzMDI1MTZmMGFiNjViNzkxODFmYzIyM2E0MjM0NWJhZDZlNDZmZjhiY2I1NWFkZDkwMjA3Zjc0NDgxMjI3ZjcxYTYyMzBhM2UxMzczOWVmMmQwMTVmNTAwMzYzODIzNGIwMWU1ODUzN2I3Y2ZhYjVhOGVkYWMxOTcyMWY0MWQ0Njk0ODk4N2QxYmIxYjFkOTQ4NWE2NzI2NDdiYjNiNWNiMjQ2YTFkNzUzYTBkMTA3YmZmMDM2YWM3ZDk1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGJjMmJkZTg3N2U4ODFhZWE1MTIwNjgxMDU2OTQ5NjgiOiIxYTYzNjlhNDVlOGVmMjg0NmM0MmQ1NGY5MmQwZDE0MGE5NGY5NjMzNDMyNzgyZGNiZjA5NGYxNDQ0YTFkMDA2YWNkMDdlZjYwNzZjZDBmYWVlMjI2ZjlmZjE0YWRjMWZiMjNlM2M2M2VkODE4YzlhNzQzZWZiZTE2NjI0OTgxNjYzZTVhNjRmMDNmNDExZGNkMzI2ZTBjMjU5YmNhZGNhM2IzZGQ3NjYwZWQ5ODVjMWI3N2YxM2EzYjIzMmE1OTM0ZjhiNTRlNDZmODM2OGM2ZTZlYjc1ZjkzMzE5NmZhOTczZTc0MTNlNGIxNDQyYjlkZWU1ZTI2NWI0NDI1NWVkIjoiMDVmMGMzNGFiMmU4ZTgwMjZiMGEyMzcxOTM0NGI3MWYiOiIiOjEyODoiNDZiYWI5ZmMyZGJlODdiOGY2Y2EwZWQ0ZDczZTUzNjgiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTE0ZjQ1YmE1ZDFlYjUyZTA0MTIyNDBkYTVkN2I1ZjkiOiI5YTg1ZmRhMTljZTkyM2YwOTNhMGMyNWIwYzUyZjVkOTUzNDgyOGFmN2M3Njg3ZDIyMzA3MDA0YWUyZDEwYzQ1OTIyNDJjMGYyNzA0MDcwMzA3YWI1NWIxMzc3ODBkMWUyMDEzYTE5Mzk2YWI0M2ZmNmEyOTViNjNmZGNmMzIzNDU2ZDE0OTc1OGY5YTJiYjM3ZjE0MThkNjJlYTYzNjhiMjRkNTA2N2I5YzYzZDI5NjhlMDZkNjU4NmM3ZTMyNzVmYWZmYTAwNWY3YzdiZmVmNTEzMDNlNGMyYjJlZDQ1NjRhY2QxN2Q1MGVmYWM5ZjVlM2U3ZjE2Y2U1ODljMzliIjoiZDdmOGVmMTJmNjZmOGI3YzYwYWVhMDJlZjZmZjY4OGYiOiIiOjEyMDoiYmVlZGUwNWU0OTI4YzgwOGJjNjYwZjNkZTk1NjM0IjoiNGFkNWI5YWNlMGMwYzdjMDdkZjI5MDBmYWYzN2E5MDI4OTk0NzFlN2FhNGEwYTFhZDUzODdmOGY1NmQ3M2Y3OGY2MTliZTc5YTRlMjUzZjk1YjE1ZDUyODk1YTA1YmFlOWVjZmZhOTE2ZDM1ZWZhY2Q4YmFmMWM3MDRkMmFhNGEzOGMyMzRlZmM0ZGNmYjE5MWVjMGZhMGI1MjIzMjhmYTViNWRmZjU1ZThjNDQzZmVlNjYwZWJlM2Q4YWQ4NWRlMTU3YTg4OWFlZmM4MjM3MjAwMzBhNGNkNmJhOTRhNjMwOWRkNjE4MDZmMGFiYjI3NzcyNDMyMDE4YmM2MTcwMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjlhNjQ1NzlmMzYwMWIwMDIyZDM1N2I2MDFjZDg3NmFiIjoiODhiZTFmNGJjOGM4MWI4YTlkN2FiYzA3M2NiMjc1MWUyMDlhYjZiOTEyYzE1ZGMwOTQwMDJmOTVhNTdhNjYwYjlmMDhiMWIzNGY1OTQ3MjIzMjA1YjU3OWU3MDRkNzBhOWVjYjU0NTIwY2UzNDkxZTUyOTY1YmU2NDNmNzI5NTE2ZjVjYjAxOGJlZWVkYzY4YTdkNjZjMGQ0MGEzZjM5MmVjNzcyOWM1NjZjZTFlOWY5NjRjNGMwYmQ2MWIyOTFjY2I5NmUzZDFmYWMxOGE0MDFhMzAyZjM3NzU2OTdjNzFlZGI4ZmY1YTgyNzVhODE1ZWJhOWRkM2I5MTJlMzc1OSI6IjUxNWVmYzZkMDM2Zjk1ZGI3ZGY1NmIxYmJlYzBhZmYyIjoiIjoxMjA6IjEzZWE5MmJhMzVmY2VkMzY2ZDFlNDdjOTdjYTVjOSI6IjdmYzg1NjU3NjBjMTY4ZDY0MGYyNDg5NmM2OTc1ODM1NWIxNzMxMGRiYzM1OWYzOGI3M2ZjN2I1N2ZlM2Y0YjZlY2FkM2YyOThiZTkzMWM5NmE2MzlkZjNjNTc0NGY3ZTkzMmIzMmQyMjJmNTUzNGVmYjhlYjVkNWI5OGQyMThkY2UzZWZlZjVjOGM3Y2U2NTczOGJmNjM0MTJkMGE4ZWQyMDkwNzEyMThhNmZhMmY3YmU3OWIzOGQwYjJmNWI1NzFlYzczZjFhOTE3MjFiZDQwOWIxNzIyYjMxMzY4M2U5N2Q1M2RmMTlkZWQ5NWZkNDcxMTI0ZmE1ZjI5NGE0YmIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYmRhNGFjZmQxMGFiNjM1ZjM1NzkzNWJiMGFiNzAyMCI6ImM5YWM4ZDRlZjdkODM4NDhmZGMwMzY2NDk1N2MyOGI5Yjc2NzEwNzk3ZDVkYjFjMjFlNzEzZTg1ZWIwODk4ODkyMjIzZTUyYmUxNjQ0ZmM3MzYyYzk1MDI2ZWJiOWM5Y2E3NGQ3ZDM3MzllZmYxMGNhYjFlZGEwMGMzNjYyOGRhZTBiOThkMTE5YTE0NjM1ODAwZTM3Y2QzNDBmYWE2ZmJiYTljM2Q0MWQ1MjcyMmNjMzk2OTYxMmIxYThjNWNhOWE2ODc3M2Y1ZWU2NTQ1MDZjYjg4ZWE2NWZiMWVkZGY1YWI2MzEyZDAxNzBkYzAzMzI0ZTQ4MzM0MjQ0OGI4NTQiOiI0OGI3N2M1ODc2MTZmZmFhNDQ5NTMzYTkxMjMwYjQ0OSI6IiI6MTIwOiI4MzI1ZTQzOTRjOTE3MTk2OTExNDVlNjhlNTY0MzkiOiIxMjg3YWQzNzE5NTA4YTliZTcwYzE5ZTNiMTM0YTJlYWE0NDE1ZDczNmM1NTkyMmU5YWJjZmQ3ZjYyMWVhMDdmZmI5Yjc4ZDhhOTY2OGM3NGJiZDU0OGI1ZTY1MTllYTEyNjA5ZDJkNjE5N2M4YmQzZGE5YzEzYzQ2NjI4ZjIxOGU3ZmY4MTg4NGZmN2ViMzQ2NjRhYjAwZjg2ZTA5Y2Q2MjNiZWMyNDhkODg5OGVmMDU0ZmNlOGY3MThhMGUwOTc4ZThiNWQwMzc3MDljNTI0MTE0ZWMzNzgwOWFjM2ZkMTYwNGUyMjNlMDhmNTk0ZTdhYTEyMDk3ZjdkYzE4NTBiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDIxY2YyNGJjNWJkMTc2YjRiMGZkNGM4NDc3YmI3MGQiOiIyZTcxMDhmZDI1Yzg4Yjc5OTI2Mzc5MTk0MDU5NGVjODBiMjZjY2Q1MzQ1NWM4MzdiMmU2Y2Y0ZTI3ZmNmOTcwN2FmM2YwZmUzMTEzNTVlMWIwM2FjM2I1ZWUwYWYwOWZiNmZiOWYwMzExZjg1NDVkNDBhNjU4MTE5ZTZhODdiYThiYTcyY2M1ZmRiMTM4NmJjNDU1YzhmZWM1MWE3YzBmZWM5NTdiZWQ0ZDY0NDExODA3NDExOTc5NjJkNTFiMTdjMzkzYjU3NTUzZTUzNjAyZjJhMzQzYTA4NzFlYTJkYzRiMTUwNjY2M2IyNzY4Y2UyNzFiODljNGVkOTllZWM2IjoiMjA4Y2I5ZGNlZDIwYjE4ZWRkZGI5MTU5NmU5MDIxMjQiOiIiOjExMjoiN2VkZmI5ZGFmOGNhMmJhYmNjMDI1Mzc0NjNlOSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZDAyZTJiMDIxNzA5ODY5NDQ0ODdjYmE4NDQ4Zjk5OCI6ImJjMWQ3NTUzZjRhMjg3NTRjZjU5ZWQ2ZjdhOTAxOTAxZjA0Y2U2MmE0NDlkYjJiNDVhZDYwMzI5ZDAzNDFiYjliYTQyMWM3ODNjMjhhOTIwMGI0MWRhOGFiNjMyOGQ4MjYyOTMxMzRhN2QwYzlhNTc3NWRkMjczNWU3NzY3ZWZkYTRhZDE4MzU2NmUwODQ3ZDZkOTc4YWJkMWE4YWIxM2IxNmI4MzIzYWNlZjA1Y2VkM2I1NzE2MzFlMWUyNGFkNDRkNjVlNmZmYTY0ZTAzYzk5NzBlOTRiYWNiOWY3MjFhYmEwNmNkYTZhMDg4MDZhM2JlNjNkZGRkODAyOTMwMWQiOiI2MzM2MDc3YmI4M2VmZjFjOWVhNzE1ZGU5OWIzNzJjZCI6IiI6MTEyOiIwNDY2YmIyOTU3MjgxZjY0YjU5ZWFmZWQzNTA5IjoiNWYzOTU5NThmMmY3YWNhZmIxYmNhNmQzYTZlYzQ4YjcxN2YyY2VlYWMxYjc3ZTFiMGVkYzA5YTA5ZTRhMjk5ZDJlYzcyMmNjN2RhZjM0YzhmNDEyMWE5M2M4MGIyYWRiMjBhMmZjOTVhZmQwOTMyMGY5MTA4NWM5M2M4YjA4MmRkNzAzODE0Yzk3Nzc1MDFkMjNiZjliMzI4ZjA3ZjA0NjUyNTkyZGM1YTNmNDMyMTYyNmE2OTViOGRiOGU2NWM4NjE3YzgwOWViMjk3OGQ4YzlhODgyZmZhODJhNGJiNzA3YzFhOGY5YTk2NWJkYWNjZTVjMDQxYmFmYzk0YTFjNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNkMWFkMWRlMDUyMWQ0MTY0NWQxM2M5N2ExOGY0YTIwIjoiNTg4YzI2MTc1MTczMjlmM2UxZTdiYTYyMDZhMTgzZGM5MjMyZTZhNGZhOGM4Yjg5NTMyZDQ2MjM1YWYxZTU0MmFjYWE3ZWFlNGQwMzRmMTM5YjAwNDQ5MDc2YmEyZWY5YTY5MmNhZTQyMjk5ODg3OGRhYmRhYzYwOTkzZGNlOTg4MGQyODBiZWMxNDE5ODAzYmE5MzczNjZlNTI4NWM0YTdmMzFhNWYyMzJmOGQzZWY3M2VmZTcyNjdiM2VmODJhMDJmOTdkMzIwZWJjOWRiNjIxOWZiZGYxYzdmNjExZThlNTE2NGU5ZWNmMjViMzJmOWMwN2RmYTEyYWE3MDVhZiI6IjQxMzg3M2EwYjA2M2FkMDM5ZGE1NTEzODk2MjMzMjg2IjoiIjoxMTI6ImQ0ZGJlOWNhZTExNjU1M2IwY2JlMTk4NGQxNzYiOiJiZDUxOWI3ZTY5MjFlNjAyNjc4NGNkN2I4MzZjODliYzFmYTk4ZTQwMTNiNDFkMmJmMDkxZWYwZDYwMmU0NGE3MGRmODk4MTZjMDY4ZDM3ZjBjNjM3N2FmNDZjOGJmYTczZWMwZDViYzBiNjE5NjZmMjNlNTVhMTVhODNjZWE0OWYzN2NjMDIyMTNiNDk5NmY5MzUzZWUyYjczYTc5OGI2MjZlNTI0YjljMTU5MzdlY2Y5OGE0ZWRlZDgzZmI2MmU2ZGVlYTFkZTMxZTBhN2YxZDIxMGY2ZDk2NGJjM2U2OWIyNjlkYTgzNDcyMGZkMzM0ODc4NzQ0ODliODkzMmE4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWNiMTIwZTljZDcxOGI1MTE5YjRhNThhZjA2NDRlZmYiOiI0YzhlOGZiOGM4N2ZmNmI5OTRhZTcxYmZiZjBmYTQ1MjlmMDNiYWQ4NmVkZjlkMjdjZjg5OWVhOTNhMzI5NzI2NDA2OTdlMDA1NDYxMzZjMWRiYzdlNjM2NjIyMDA5NTFiNjQ3OWM1OGFlMjZiMWJkOGMzYjRmNTA3YzBkOTQ1ZDYxNTE4MzE5Njg2OGVjNGY0ODY1ZDFkMDBiYjkxOWEwMDE4NGU5NjYzZjZjYjlhN2EwZGRmYzczZWUyOTAxZjdhNTZlZjIwNzRkNTU0ZjQ4Y2VmMjU0YmU1NThmY2EzNTY1MWJlNDA1ZjkxYzM5ZTAzNjc3NjJiNDcxNWQwNWZhIjoiNWE3MDg3OTg5YmZlMmY2ZWRkY2I1NmZkZTRkNzI1MjkiOiIiOjEwNDoiOTVkOGJkMTJhZjhhNWFiNjc3MzA5ZGYwZmIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzE1YjIwNjc3OGMyOGVkMGJmZGQ2ZTY2MDg4YTVjMzkiOiI2MTg2ZjU3YTg1YjY1ZjU0ZWZiZjk5NzRhMTkzMDEyYjEzOTZmYzBjYTg4NzIyN2UxODY1ZjFjOTE1YWMyYWY5YmJkNTU5NjlmN2RlNTdjZTlmYjg3NjA0Y2YxMWM3YmM4MjJiNTQyZjc0NWJlOGExMDE4NzdhODEwZWQ3MmJmNDU0NGQwYWNiOTFmMGY5ZDNjMzBiNmExOGM0OGI4MjU1NzQzM2QwZGI5MzBlMDNiY2VjYzZmYjUzNTMwYmZkOTllZTg5ZjllMTU0YWExYTNlMmEyYzJhN2E5ZTA4YzlhZWQxZGVhYjdmYWU4ZWE1YTMxMTU4YjUwYmNhMmY1ZTc5IjoiN2VjNmY0N2VjNTZkZGE1YjUyYmJkYWE2YWQyZWI2ZGEiOiIiOjEwNDoiOTMwNzUwYzUzZWZmYzdiODRhYTEwYjIyNzYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTg4NmRlMWM5MDdjOTdlN2RiOGVjODBhNzlkZjkwZjgiOiJjNjRjYzk1OTZkN2M3Mzg3NDZhYjgwMGY2ODhlZWMxOTBhNGM4MDJjNTViMjUyODkzMWQ3NGQyOTQ0OTY4OTJiODFmNTNkMzA3M2Q0OGY5YmVmMWQ1OGNlM2JlMjY1NDc0NzRjZGRhMjg2OGFiZWFiNzFhZmY1NjZmZmY2MTNiNGU1YmZlZDFiZTFkMmZmZjM1ZDhmZmEzMzMwMmQzZGExYzgyZTQyMWFhM2EyMzg0OGYzMWUyNmQ5MGMwY2IyYWMyYWUxMzZhZGE3MzQwNGVkM2UwZTFkM2U3Y2IzNTVhMTFjZDJhNGY5MzkzYjRkNWVhYzk4ODEwNGZlMWNmOTU5IjoiNjEyY2FjYmYzMzI2NjM1M2QwYTI5YTI0NTMyZjNjMGMiOiIiOjEwNDoiNzY2MzRlNThkOGYzYTQ4ZjE1ODc1YWMxZDYiOiI3MDAxZDczOTVlZmI0MzJlMjgwNGNjNjVjMGJhNWQ0NzE5Y2U4NDE3N2NlNDYyOTJjNGZkNjJhNTU5NmJkMmJhYjFkNWM0NDIxN2FjNDMyMzViZDk0NDg5YzQzZDAxNjE4YTExZjA0N2QyZTI0NzA2MmMzYjg4ZDZlNTlhZGFhMWY0NjUxNGZiMzNiNzg0MzQ4MzkyMGJlZTYwYTQxZjNjYjMxMjMyMmMzMDVkMjUyNTFiNDcwNGZiNjZkYTU4NjM3Yzk1YTlkNTM5NzMxNDM0ZjYwZWY0NGZlM2NkNmQzN2UyYzhlNzA4OTg4MGE1NjM5MzhkY2M5OGI0M2YwOGZkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzYjkzNmUwOWE2NDc3ZjNiZDUyMDMwYTI5ZGY1MDAxZCI6IjY1Y2YxMWQxYWZhZDE5YjM0ZjI4MmY5OGYxNDAzMTU5OTIzOTJmNWQ0ZWVkNDI2NTA4NWIyOWUxZTU1NTNmNDc4M2ZlYzY4MWJhMmQzNjg0ODZiYTZhNTRjMDBlNzFjODJjMDhjYTNkMDk3OTA0ZjAyMWNlNGIwYWNiYTJkMmE3MDA1ZTI4ZTVmODc1MGVhM2QxOGE0Zjc4MzYzYzM3NTgzZTg1MTA0MjM0NDk4OTQyYzYzOWEwNTY0YjBkODAwNTVjMjFjYjc3MzVkZDQ0MzQ4Mjk4MjkxYWI2MDJmMzQ1YjFkNzRkNjI0NzUwYzAxNzdmYmQ1Y2NhNmY5OTIyM2IiOiJmOTMxMDViZTgzZmE1ZTMxNWQ3M2FjZmRjZjU3OGRlNyI6IiI6OTY6IjkxYjU1YmI1ZTNmM2YxYWJjZjMzNWRiNSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRjOWUyMDk1ZGU3YjFiNDg0ODFiNTZiZjZhMzYwNGNkIjoiZWQ2MWZmOTRhM2Y4NGM3MjE0N2ZhZWZhNjE1ZTJkZjAwMzI0ZmIwMTc5MGNmOTc2NGM3MmMxYjhiYTQ3ZjE3ODY2YTFmZDY0ZWU1YzJmNTM4NjVkMWJjMjRlYzkzMTY1YTY3NzQ0NjZhNTk2MDMxOTllZTQ3NmMxZjJkYTdkOTMyYzg5NDNkMTI2YWExNzJkNTMyZDg0NzVhNDg0ZDQyYmI0NWZjZjkyNzY2ZmVhZmQ3ZjNlMmUzZDQyZDIyZjZmODRhOTBlN2U2ODgyMzJmNzk5ZDgwY2QyY2MxNTJkZGQyMWVjZmIxMzc3MDFlY2FmY2IyYjY1YWJlMmU0ZTZmNCI6IjllNTI2OGRiMTlhMWI1MWMwNDk2YTE2MGNhNzZmOGY3IjoiIjo5NjoiMGZhOTU4ODUzNmZjYTcxYmI0NDI2MGY3IjoiZWY1NjJlMzAxZmNmOTIzZmYxYTFhY2QzYWZmOWIxYzk2MzA1ODIyODY1NWZlOGE2NmNhYjAxMzk2NTQ3ZGJkMmFhMWY3OWEyMmVlZmM2Mjk0NGI4NmQxYTMxZWJlMmQxNzEzMDE3NWI4YzAwM2Q2NzU1YjBlYjhiNzk4OTViMGY3ZjgwNDZjNWFlODg4YTA2N2JhMTdiYzhlMTFhOGY2ZTUwMjNhOWNkNDJmNjQ2MTk2NmMyOGU1MDViMzcxYzBmNzJhMjYwNmJmZjQzMGE1ODAxNmU5OTcxM2QyNWNlMTFmMTAzOTFmYjRhOTIyZTI3OTg5NDIyYzZhNjRmOTEwNyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2Y5MzkwMWZkN2NjODhkYjNiYTc2YTE1OGQ2NThjN2IiOiIxNjQwMmZkZWQ4NzlmY2JmZTk0MDU5MDJhYTYzY2EyYTUyMDg4OWUwMDQ1ZjY4NzQ1NTQ2OWI3YmI4Njc4MjlhMDEyMDhiOGRjNWRjYzg1MmQ4ZWU0Nzg5OTNjMzBlNmQ5ZWM2NDA4NzczYjM2NzgyMTMxMGEwYWUxNzFkMzhkNzFlMDY5ODFmZjZlODQ1YWNmZmJjNzk0MTQyYjg3Yzc0OGUxMjQ4NGMwNjM2NDE5ZDc5YmUzZDc5OGNkZTU5ZTlkYWUwYTRhNGE0MzQ2NTk2NDI3ZTZiMjM1YWQ1MmU2YTFiMDJkNmY0ZGYwYzdkZTM1ZmMzOTBjYWUzNmFlZjE0IjoiN2U5OGRlNDYxZTZkOTZjMGNlNmM4ZDhiMzg1NGNmNDkiOiIiOjk2OiI4NmM5YTcwZTRiYWIzMDRhZTQ2ZTY1NDIiOiIxYjRjMDk1NjliNDJjNDY5YjNhYjZiMzkzMTJjMjE0NTAyZWMwOWY1ZmUyZmVkMWQxOTMzZDEzY2RjNmE3Yjc3YTVkMTM1MTIzZmE2OWQ5MjA3ZDY4NDRiMDM1N2IyNmI3YTJmNTNiMzNhNWNkMjE4ZGFjZGE4N2I3OGIwOWNmMjU5ZTQ4ZTc0MDc2ODEyYzQzMmUyZDA4MzNmYjI2OTcyMWY5MzQ3Yzk2ZTE1ODUwMGY5YjIyODMzNDJhMzVjOGRlMGEwMjJlZGNlNzExMTE4ZDcyZDhmYmFhMzU0YmZiMGZmZWU0NjU4NDRlZjJkMzdlMjRlYzJjZWE4NTU2NjQ4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0MjI4OWYzZDNjZDU4MzhlMjUwZWY1NGIxMjhlNjBkMSI6IjNlZGFlMWQ1NTRiNjdkMjAzNmY1ZmRiZGIyOTQ1Y2MxMTJmMTAwYWRjMWI0NzAwOWMyZTIzZjZhMmVhZWU3OGQxZjM5Y2U4YTk4ZjcxNTg1M2NjMjlmYzc5M2ZiNjk4MWVjMzAzNjgzNDE4OGRlYTdkNjY4MTg1Y2NjODY0MjA3MWIxNWRlMTMzMmY2YTU5YzhhOWI0Mzk5NzMzZWI0YjNkOGYyMjRhZjU3YmE2YjRhOGU2NDQ5NGJiNjYzMGI5ZDI4ZTdlYzMzNDkwNjQzNTBmZWJjZWY2YTNhZDFkNmNjYTFiMWRhNzRmM2QyOTIxYzJiMjhhMmRkMzk5YzM0MTYiOiJlNTU3Mzg5YTIxNmFkNzI0YWFmZGFiMDE4MGUxODkyZSI6IiI6NjQ6IjZmNzhiYzgwOWYzMTM5M2UiOiIyNWM0NzY2NTljYzdiMzQzYTY5MDg4YmFmODY4YTgxMWJhMzdkYWNhODVjNDA5MzEwNWJmOTgyMzVhOTBhZWNhMDE1YWIwMzRkYTAwOGFmMDk4MmY5YjJlODBkZjgwNGMxODZhOWIyZTk3Zjc0Y2ZmZDcwZWJiNzc3MWQ4NzRmY2FmMTJmNmQwMWM0NGE4YjBlYzI4OThjZjQ0OTNjZjA5YTE2YTg4YTY1Y2Q3NzkwOWJiZjA0MzBjOTYwMzg2OWJkNWYyMGQ1NmNiNTFkOGEzZjBhMDMyZmMzMGQ5MjVjOTY1OTlkMjk2YjFlYzQxYzI5MTJiZGE0MjZhZGVhNGZiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZDc3MmVhYmI3ZjE5NDc1NjY1Y2EyYTdlNjkzYmNmYyI6ImU5ZmM0ZDg2ZjViODU3ZmE2MDU3YjczZjk2NzM1MWUwNmY4NzI4OGM0MGE5NWI5ZTM3OGM4NGYxYTRjMGY0YjgwZWQwYTBiNDRmZjkwYTg5NzNiZTQxOTljMGM0MDA2ZmM0ZjVlYTE5ZDVmMWZlOGI5YzhjMDFmNDY3NWFiODVhZmFiMDU5MmJiM2RhYmEzNmJiNGZjN2VkOWVlYTg2N2U5ZDhjYzUwYzE5ZmI2MmE1YTU3OTU2ZTllZmFjZWJhYzVlOWY4NDk2NDlkMzVhMzI5YmQ2OGRlOTdiYjZlNWZmN2JlZjQ3N2E4Njc2NWMyYzllYzE1ZTI0Y2JiYTVjNmUiOiIwNzQ3Y2JiNDg2YTAxMzQ1M2ZkZTFjYTZhYmIxMWRiZSI6IiI6NjQ6IjhlNzYxZmZhZWE2OGY5NjciOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmYjdmZDc1M2VlNmVhYWYyODNhNDJhMTIxZGFiNGU0MyI6ImZkNWNlY2IyYzAyODdjYjgyMjllOTdkOWNjNGI5ODg1ZjQyODcxMDUyODg4NGNlNjYzZWQxNzI4Y2Q0NGNiMmRmOTNlNTZlZjE3YWNlMDY3OGQxZTM0MTM2NmM2NTJmNGJhN2VlNDU3OTdkMzliZTRhMDVjMTE1MWU1Y2RlNDk5ZTEzZTVkNDU1NDliNWQ5NWExNzRkMDM2MTZkMDZlZjk2ZTlkN2IyYjZiYjBkNzlhNzI2YjI1M2RkNjQyMjNhNWYwOTYxMTY3MWIyMzRjY2Y5YjM4Mzk1MmY4ODg4ODE0YjJjMTY3ZTc3NGNmYmY1NGU5YzZiOTlhNzUzZjRmYTkiOiI4MTY0OTI5ZmI1NDQ4NTM3N2VjY2NjOWI5NjIxYWY1ZSI6IiI6NjQ6IjQwYTJmYTdmNDM3MGFmYjIiOiI2MjA4ZDA2OGJlNjBmN2IwNGI4MGZjNjExMDYyZTZjYWFlZjlhNWNmNTlmODUwZDE3NGI3NDQ2Yzc4YzAzOWVhOWFlZmU0ODg1ZTE5YzJiMzM5MTFkMzJjZTFmZTNjNDhkZGZmYTRiMDNlNDUwZmQzNWRhMDNmNDBjNGU3YzViYjNiMWMzZjMwNDlkYmZhZDNhYzgxY2ExYjc5Y2FmYmFhMTcyZjQ5MDBlMzgyOWQzOGVkZWEzYjY0MDAwZjkzOTI0YTgwMTI1OWJjNGIyNTIzNDQ1YzY0YmMyM2JmZWUxOTBiOTUyNDY4NTA3ZmE0YmFmNmRjMmJlYzY2ZmNmMGQ4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMGQ3NTdmZDczYTBmZDVmYTQ5MTU5YWQwNjUzMjk2ZCI6IjE3ZDQ4NWIyNThmODBkODkyNGUzNTI5MTExOGNmZGNmZmQ4NmM0Nzg1MWI2NWYwYjA2YTdjMWY1MjAyZGU4MmYzZjQ2MGZjNjFiMWFhMzhmZGJhN2M4ZGVkMzc1YzkyY2YwMDVhZmU2M2U1OWQzNjJjMDk2MDA0NGFmMzkyNDFiODFjYTI0ZTg1YzVmYWE0MzkwMzIyOTM1NWI3MzEzZmVlMjFiOTkyZWYzOTMxZDlkMjQwN2IzMmIzY2Y3MmRkN2FjYmM3OTQ4Mzk1ZWI1MTNjYjJmZDQyOGIyMTViYTJiZDFlMjljNjJmNDVkMGNlMjMxODg0ZjYyNDgwYzZkOGYiOiJiMzViOGRmMGFlYmQwNjA4NTE3ZjI4MzBlMGU3MGNkMCI6IiI6MzI6Ijk1NGMwZTk5IjoiMDIyNjE4ZDI1OThmNzkxMDRlOTE4YTA5YzkzN2E4MmIzZGI1OTI0M2I1ZTEzZGU3MzFmY2I5MTJlNDM2NjEwNTc5N2NlNDdmNmRjZTdmMDgwNzNmMmY0MWU1YzE1ZmQ2YjFlYzRiNTg2MTQ2OWE0ODgwYzNiMGJkNzY5Yjc4YzY5NmZmMjljMjhjOTM0OWQ1YTQ2YTZlNWFkOTIxMWJkNGI3MDhhOGMwYjY5MjhlYmJiMGRhYzFjMGE1ZjVjZTZiMDVkZTZhNTAwNzMxMjg1NjZhMjNmMDljYzFiODI2YWE1ODAzZjlmNzUwYWE0ZGViZjU5ZjI0YWU5Zjk4YzliNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDlkM2NmZDU5MDBkZTVkNWUyMTA5ZTc3MjFjZmVlZjYiOiJlNDI0M2NjMzdjYzMyZGZjZWRmOWJiNzY4OTBlNzA2YWY2YWIxZTA2YjI5MGI4Y2NmZTJhNTVlNWRhYmU2OGNiMzkwZjc2MzZkYzk2NzZiNDMxZDRkYzhhZDNmNmQ5ODllNTEwMTk0Mjk0YWI3YWIwNTU2Nzg5MDQ2NzQzY2YzNzRkOGI2NDYyZjVmOTVhMTdmM2Y0NDMzN2Q2YzY5ZWU0N2IwZTFhZDdlNWNlNmY5YjIyNGM1NDA5OWExMDRlNzBkMmQwNmFmODY5YjkyMWVhNDdmZWJlMDhmOTBjNTkxZWQ0OWMxZjEyMDAzYWZjZWFiZDJjN2JiYTQ1OGEwMTExIjoiYjRiOWRmYjAxM2RlNmY3YzQ0Nzc5ZTVhOWRhYWY1ZTUiOiIiOjMyOiIyYjgxZThjZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY4ZGMxMzhmMTkzNTRkNzNlYWExY2YwZTc5MjMxZDc0IjoiY2UzNDU1NjdhNzZiYzMwZDhiNGZkMjIzOTc4ODIyMWNmYTc1ZTFhMzEwYWVlZWI4YzM1NWY4ZWVhNTdkODA5NjdmMzA0N2ZiZDRlNjE3M2ZhYzVjYWViMjIxNTFmYTYwNzA2NTk1M2M0YzM1ZTA1MzdiOWUzNzg4Y2M4MGRlOWVlZGYyYTM0MDY5OGJkZTk5YTZhMWJkYzgxMjY1MzE5ZGEzZTUyZjdhNTM4ODNiN2YyMTc0OTIzN2ZjZmQzY2Q0ZjE0OWJiMmJlN2E0ZGRkOWVmMDU0NGNmZTA3ODkwNDBkMWRjOTUxYjY0NDczMDQ5NDJmMDNhYjBiZWFlODg2NiI6ImU3MTQ3NzQ5NTYwZjQ5MTQyMGEyZDg5M2MwNzViYjc2IjoiIjozMjoiNzBhODNmNmYiOiI2NGIwMjE2MTJjNzhiM2UxOTJlODM0OWQ0OGI3N2QwMjkyN2U3ZmQ3MGM3MTYwZDM3Y2I4ZWY0NzJmNmJjZDlkZjlkOTM0MzE2MjdjMWM4MDg3NWUyMDg3MjRhZTA1Zjk0ZmRkMmUwMDVlOTcwN2I3OGExYmYzYmJjYTdiZWVjNGIwM2RkZDRkOWRlNjIzNWZmZDZkODRhOGI5YTE4NDJlMTA0YzFlMjJkZjQ1NjZmNmM0ZDNkNGUzZDk2YTU2YjliOGE1Y2RjZTlkYTcwYWEyMzYxMDliMjg5MjY2MDM2ZjI4NTU2NDA2MGIyMDRkZmQ3YWM5MTVlZWEwZGQwYjFlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzM2MmM4NjM0NGUwYWVmYjBjZjBkMDQ3NjhmOWMwNWQiOiI4YmFmZmM3ODM2MDA0ZGViODdjMDExMWQ0N2MxODI1MTJiZjg2MTg3NDAyMWRkZmNkNTU5YWNmMmM0YTUxY2Y1YmM0YmZkZWUyZDAzOWI5YzAwNWI2YWY5NWEyNjA3NjQzZGNmNGQ5Y2Q5ZDYyNDEyZjcwOTMzNDU1NmRiMjJmYzkxZDdiNDA0Mzg1MDVkNjgwNmNjYjJmMmMyMWFlNzMxYmMxZjFjODI1ZDI4YTcxYWIyNzA5NWEzOTk4NWU5NmNjZDA3Y2ZiMmU3NTI0M2NjYWZkNDc0NDk0YTIzMzhjMzI0ZWY1MzNjYTVmMTdkMmFjMWIxODgzMTQwMzQyY2VkIjoiN2U4ZDEyYzJmMGRjZjRmNzkyMjQ3MTM0MjM0YWM5NGIiOiI4NmQyYjVkZWJjM2IxMDQ5NWRhMzUzZDY4MjFmNmNhZDM4MDc3NmQ4MDViZDg2NjBiMDhkY2RiMWFjZDg3MDI2ZTRmMzQ0YjU0N2E0ZGI0N2I1ZjQ0Y2RlZDMxNGJlYzRjZTlhNDE3Y2U0MGEyYWNkNWEyMTQ2MGM0MmRmY2QyNzQ4M2FiZjNmMzhkZDhjYzVmYTUyM2I2NzY4YTI2NTEzZGY1ODk2NDM1YmFhOTc3ODFjZmYxOTY2ZTJlM2Q2ZWM2ZDBhOWNkYzAxM2RlNWE1MGU0ZDQ2ODMxNjY3MDU1YmFkMDRmNzg0MDI0YTgyZjljZDA4N2FlNGNkMzdkZDY0IjoxMjg6Ijk1OTRkYTQyOGZkOGMxYjEzZWNiMjNhZmEyYzFhZjJlIjoiZTJjNDI0ZjQyYWVkZDU2ZjBlMTdhMzlkNDNhZDE5YzhlMjczMWVmYzdhMjVmMDc3YWVmNTFkNTUyODBiMTBlNjY3ZTMzOGJkOTgxYjgyYTk3NWVmNjJiZjUzYmM1MjQ5NmI2OTk1ZDMzYzkwYzdhZTE0NzY3YzEyNjgyNmUzZjMyYmQyM2Y0NDRkZGNmZDdhMGRkMzIzYjBhZTJjMjJkZWZhZDA0Y2U2Mzg5MmI0NWMxNzZiZDBiODZmNWZhMDU3YTNkYzM3MTM1OTc0NGNiODBiYmZiNGExOTU3NTUxMzZhMGVhOTBiNDA0NGE0NWJjMWIwNjlmM2NiMzY5NWMwNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU4NzQ4YmIyMDRjY2I3YmRhZmRiZjczOWI2YzE5YTNlIjoiYjcyOTAyYzllYmI3MmE4NmJlNTM5YjE5YTUyZmQ5YWYwMGFhNGRlMDgxZDkwYzBkOGFkNTgwZWJiNTkwMDE3N2EwMzZmNDBhMWU5YjQzZTNhMDdkNzE1NDY2NTI2ZDZkNzU0NGU1YTU1NTE4MDViNjI0NjNmOTU2Y2Q1MTlmYzk5MTgyYzJkNTRiZDYyZmM3ZmZjNmU1ZWJmMTUwMzg1OWI3MDZkYTExYTFiNmM3MDdhNjdhNzA3ODlkYmZjMTBlZjcyNmJkMzYwZjlmMjM0NzMyNmUwNjhlNzU3Yzg0NDNkZGM5MzA4YTE3MWU2ODIzNTlhZTFiZmU4NzE5NGFiNSI6IjkzYWMyOThjNzNjODhlMTI3YTRkOWRkODFiZjI0ZTNkIjoiOGYxNjhmYzRkMWRhMTNiZGJlZmFlM2Y5ZDZhYzFkOGNiMTlmY2VjMWY0M2Y3Mjc5NTFhZjBhNDY2ZDg4MjY2NDlhNDZjM2NiNTBjMDQ1ZWE4Mzg0OWZjZTBlZWRiYzA0MmExYTQzNWU2ZDlkNTkwMTc5OTdhMmQ1NDU5Yjk0MDA3OGI4YTdmM2I2YjBmZjI3OWZmOGM1NjAyNDgyOTZhMTcyNDBmZjFiMDY0M2QxZjQzNmI2ZTNmMjA3OTM2M2ZjNDlmYjQ1ZjQxMGRlYmJkZGUwODNiOTIwNTc5MTYzNjhjYjgwN2Q2MDNjYjgyZTJjMGRjMDE2NThiZmY3ZjFhYiI6MTI4OiJlZmJhNDU4OWQ0YTAzNTU1NzY2YmJjM2I0MjFkZDYwZiI6ImQ1Yzk3YTY1OWYwMTY5MDRmZjc2Mjg2ZjgxMGU4ZTkyZGE2ZjhkYjJjNjNkOGE0MmU2MTc3NjA3ODA2MzdlMzIxMDU1MDM0NDBjZGYwNGQxZmU2NzgxMzMxMmYxNDc5ZmRhOGQ3NDZjOGIwYjA4MDU5MWViYTgzODUwMzgyZjYwMGU5ZDg2ODA1MTZjNjU3OTY2OWYwYjNkMGEzMDMyMzUxMGY5ZGUxYzkyNTEyNzkwYjgzNDc3NTE5OTRkMDIyMTU2Y2FlNjRkYTA4MDhhNjQ5ZDE2M2EwZTk5ZTg2OWZkZjIyNGI3YzFhNmE4ZmJjNjEzZDU5MTdlY2E4ZWUwOGMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2Y2MxM2NiZDYyNDI4YmI4NjU4ZGQzOTU0ZmU5MTgxZiI6IjJjOWVjOTgyZDFjZmI2NDRkZGJjNTNjMDc1OWIxMDQ5MzIwNmQ1MTg2YWZmYzY4ODJmYmIyYmEzYWE0MzBmOWJhZTEyMDlkYjJkNzhkY2MxMjVmM2M5MDlhNTRkZDg0ZmRmZjk2YzcxZTY3ODIxNmE1ODM5MGVmNDMwOGJkZDkwZjk0ZjcxMDljNGVkZWZhNzZhNzRmZGE2NGIyMDFiN2E0MzViYmFiYzI3Mjk4ZjNlYWE0YzJkMTM5M2JkNTg0ZjgxMWZmZjUyNjM4ZjZhZDJmNmQ4NmE4YzNjOWMwMzBkOWQ0MjY0YzhjMDc5NTkyYTM2MTc4ZDI1OTkxY2ZmMDkiOiI4Njc0MGRhN2NlNGVmYmVkNzBhZjU1ZTFkNmMxMGZkZiI6ImJlNTYxYWMxNWUzY2ZkYTYyNGI0MjJhZjk3YzI2NzE5YzE0MGJiNTBlNGE5OTNkNjM2ZWZlOWM3ZjE5NjNmYjkwNDdhMDc2MjE2OWI1NzFhNjk4ZmYzMTBiYzQxN2UzNGQ0MDM5Yjc1NjJhOTVhZjcxMGNjYzFiMTk3OTY0YTM3NmM5ODZmZDJlZDhhYzRiMGM3YjRlODQzYzM3YTQxMzY2ZjJmNDgzYzgyMWExODIzZjMxNzQxNmM3ZTRmMzJlZWQ5YjlkYzJhZTFhMmYzZWQzMmM0YjMxODczNThhMjMyOWFhNDIxOTFiN2MyZmU4N2I2ZTI3ZmYyMDMwM2NiMjkiOjEyODoiNzZiOTkwYTFlMDEwZTVmMDg4ZjZhZTkwYmVjNDBiMzIiOiIwYjlhNWY1ZDJlNjg1MmI3NWI5Y2YyNmMxYjMxMGIyMjAwZTU2ZGFmY2YzYzk0MTQ3ODg2MmNkZjk3MzdhYzhlMmNiOWIzOGQ0MWJkNGExODcyZWExYjRjZmQ1MWExYTBiOWI3NDNhY2E0MzllZWZhMTBkZTg0NTlhMGE3YTIyMWM1NDI5YjNkZWUzOTNmMTcwMzFjYTZjMzk5ZGY4ZTA1NjU3YzNkYjU1YmU5YzlkZDI5ZTY5MDA0MmE0ZWQ4ZGI3MzJlZmNlN2M1OGQ2YjIwYTJhMGY3Yzc5ZTQyZTVhZGE0M2I4N2FiMDBmNDgxYzIwY2FjMWIzNTUxNGRjZGM5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjg2ZDNmNTA4MGNmZTg4NTM4NTcxMTg4ZmJlYjJkZDUiOiI1NTEzNTkyODk5NzcxMTM2MDYyMmVkYTE4MjBjODE1YWEyMjExNTIwNGIxZTliYjU2N2UyMzFhYzZlYTI1OTRiNGQ2NTI2MjdiNjgxNmJkYzZjNDBhNDQxMWZkNmIxMmZhYjlhMWYxNjlkODFjNDc2ZGJmNzcxNTFiZmYxM2Y5OGNhMGQxZGMwYTY4ZWE2ODE2NTJiZTA4OWZhZGJjNjZjNjA0Mjg0ZWViZmM4Y2U0Y2YxMGY0Y2E2YmRhMGUwZjY2MzQwMjNkYjZlM2YwZjFkZTYyNmMzMjQ5YTI4YTY0MmVjYzllYzVmZjQwMWU5NDFmYThhM2M2OTE1NjZjMGFlIjoiZGE2MTQwYmQ0ZGM2NDU2ZGRhYjE5MDY5ZTg2ZWZiMzUiOiI1ZDM1MGEwNDU2MmE2MDVlOTA4MmViZDhmYWVjNmMyN2U1NjE0MjU4NDllN2YwZjA1ZjUwNDk4NTljMmMxYmQyYzQ2ODJlYmY5NzczZmFiNjE3N2QyNjAxZmQ1YTA4NmNlZmMzYWRlZjVhMmY4ZjZiNWRjOWU2NDllOThkZDBhM2QxYTI1MjQ0MTlmMDEzMDViZDBmY2ZmZjUyZDg0YTIwZDFiMTRkZWEyMTM4ZGNjNTRlZWEyYmYyNjNjNmZlMjdjM2U3MjU1ZjFmMzU5ZDBkMDBmYjFiMzUwZDdhMDQ5NjVhZjMwMDI3NjMyNTIwMTk3ZTg1ZWI0MWRlNmJiMjg2IjoxMjA6ImQ5MGQzNDA5NGQ3NDAyMTRkZDNkZTY4NTAxMGNlMyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MjZhZTExM2EwOTY3NjliNjU3Zjk3M2VhNmQyZDVkZCI6IjkwNjM2MDEyYmE4YzUxZDE2ZjhmNmRmM2QzYmNhYmMzZjA5YWVmZmJlMmE3NjJmNjJlNjc3OTEzMTg4MDQ1Yjg2MWIyZTdkOWE3YmQ5M2RjZWU0NmU5ZTQ4MzJlNDk3YTZmNzlkYjUyYjRlNDVjOGRhYjIwZmE1NjhmZjljNGFjZTU1YmUzMjE2ZjUxNGEzMjg0NzY4YTI1ZDg2YjFjN2RhNTM3NzYyMmYzZTkwZWQ0YzdiZDQ1NzE3MTVhZjRkMGEyYWI1MTgxZDA0NzVmNjk5MjAyZTQ0MDZiYjljZmRiZDRmYTdmMjJkMGRkNzQ0ZDM2YjMyMjMxMzQ2NTg0OTYiOiIyZjk5MDAyMjZjOTc1ODVkMjAwZGQyMGEyNzljMTU0YSI6Ijc2MTY2M2MzZmNiZjFkYjEyYmMyNTU0NmIyNDI1YjgyMjliMzE1M2U3NWY3OWZhNjM5NTg4MTljYWVlM2ZlYmZmNzQ2MDNkOTkyNjRiNWE4MmVmNTk4MDQzOWJlZjg5MzAxYWUzMjA2YTFkMDFhM2JiZDdhNmM5OWQyN2QxZTkzNGNjNzI1ZGFlYjQ4M2Y4MjZjMmM5ZDc4OGZkMWY2N2E2Mjc4NjRjZjhiNWY5NGRmNzc3YmI1OWVmOTBjYjY3ODFhMjAwMGU2ZjBiYWE0ZjFlYTQ3NTRiNDdiYjdjYmQyNjk5ZjgzNjM0ZTRkOGFiMTZiMzI1YjJjNDlmMTM0OTkiOjEyMDoiZDA5NWJmYjg5OTBkNGZkNjQ3NTJlZTI0ZjNkZTFlIjoiOWY3NzU5YzZkMjRmZDlhYTBkZjAyYTdjMGNjNWYxN2U2MTYyMmM2MzE5NWY4NWRmYWZhNWQ4MjBkM2FkMjE4YzcyODhlYzAxNzgyMTEwMGYxZmFkZTEwZjliYjQ0N2E0YTAxZTM2OThiMDQ1NTQ4Yzc2MTlhMDhmMjMwNGUyODE4YTliZjU1ZTcwYjQwZjhiOTk0YjdkY2YwY2IyNDM4NDhjZjNmNmZkZmVjM2ViYmIxNDdkMDFkZjg0YTNlYzYyY2Q4ZmE1ZDc4YWQ5ZjJmMjhjZDI4OGEzNWViNDlhNTE3MjMzOWU5ODcyZThlN2UzMzUwYjBkNjlmNTlhY2QwNyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjczYTllZWRhNzIxYzZmMjkyZTZiMzk5ZTI2NDdmOGE2IjoiMjE1ZmM3ZTUyYWJlNGM3NTFjYTJmN2Y5YTVjYmRlOWFiOGI0NGI4ZDQwNTRiYjYyZGNlYTZkZjViOTM2MTQ1Y2E2ZWM4M2EyYjc4YjA3MDYzOGZkNmU1ZWEzYmFkNWQwY2FmMWI4Zjc1NWYzOTFjM2UwOTYyYTkyMzM3ZTNlYmE1NzU1ODVlYjgzNjgwMDc1ZmM4MTg4NjAzODhjNTg3NzQ2YWY3OGQ1ZmM3NWNjZDBhNjNmMTYxMmFiYjFiYTBmMDRhMjIyOGNhMjdmYmRkYmE0ODc4ZjliMjY4MzY4M2Y1MTZiNmQ2ZmU0ZjY2MjJlNjAzYmQzYzVhZDQ1ZTMzMiI6ImMxZTgwZWI3MjM5NjAwNDljYzQ0NDhiNjY0MzNmMWNmIjoiZmIyYTBiMWY4MTc0MDRlNzRhZWUwYTZlYzhmMmNkODZmMGM5MTE0ZWQzNjdiMjY5MGM0NGFkODBmOWQzMzc3ZDdmZDUwNjZiZWFmMWRhYTczOWQyN2VkM2ZiYTk4Mzc5MTg4MDE2YjFmZTkwMTIwNGExNzRmOWZmY2EzNzBjMTgxYWVjZTVlNWQ0MDkzOWEwZDQ2MDkxM2I0MGI4OTVlNzhhM2I4MGRkZjNkNjEzYzA1ZTRlMjdiZmQxNjFlYTJlZjQyMjcxYTI2NzlmMmNkY2E1YjcyOGZmYjIzMTk3ODFjOTQ2YTRmM2VjYWNmNDg2Yjc1NGIzMGJiMDRlYTYwYiI6MTIwOiJlMDgxNjEyNjIyMzRkMGQ1YmUyMmYwOWU1NjQ2YmYiOiJiNWUyODYxODNmMTZkZDk0MDNiZWM2Nzg2YmQ0ODM2Y2M2YWRkNDc5NDdlZjExMWZiMWQ1NTAzYzE4YzMzM2M4ZmU2MDk1OTUwMmY1ODM5MGQwZTBmNjlmYmU1ZmVlMTNjNzJhZWQ2NWZlNmUzMmY2ZWE0NTg3N2ZlNDRmOGE1NTZhYTUxNTdiMTEyZTU3MjE5N2MxYzM1MGI3OTQzYzZjZjJlOTE0NjAxODU5OTUyNGQyNzU5OWYwOWM4NjAyN2YyYzU5MjdlNGEyMGM2MzgzMzg3MGU4MzY5YmFhMzZlY2MwN2NkYjNjZWQ1MjBiNWFlNDY4NjlmZjM1N2NhMDg5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTBkYmRhNzM5N2Q4ZmM0NjIxNWExMjE4YTZmZmQwZDgiOiI0ZjgyYTFlY2E2YzkxODQyNDBmNTBmN2UwY2ZlYzA3ZWM3NzJjYWQ1Mjc2ZDkzMDQzYzQ2MmQ4MzY0YWRkZDlhNjUyZWVkMzg1Y2NjNmIwZmFhNmNhNjc5YWIzYTRjM2QwYmU2YTc1OTQyNWZkMzgzMTZlZTZhMWIxYjBjNTJjMWJiM2I1N2E5YmQ3YzhhM2JlOTVjODJmMzc4MDBjMmUzYjQyZGRlMDMxODUxOTM3Mzk4ODExZjhmOGRjMmExNWJmZDJkNmJlOTlhNTcyZDU2ZjUzNmU2MmJjNWIwNDFkMzk0NGRhNjY2MDgxY2Q3NTVlYzM0N2Y0NjQyMTRiZjMzIjoiN2JlNDc3ZDE0ZGY1ZGMxNTg3N2FlNTM3YjYyZTFhNTYiOiI3MzU4ZGRmMTMxMGE1ODg3MWEyZjc2NzA1ZjFjZjY0MjIzYzAxNWM0ZDE1NzQxMDRkMmUzODc4M2JiODY2MjA1MDQyZjA1Yzg2ZTc2YzQ3YTI1MTZjZTI4NDkxMWYxZDJjYmVlMDc5OTgyZGQ3NzE2N2UzMjhiODMyNGVlYzQ3YzkyNDRjYzU2NjhjZjkwOGM2NzliYjU4NmQ0ZGQzMmM2Yzk5ZWQ5OWE2YjU3MWNmMThiMDA2ODk0NjNlN2E4OGNlYTZlYTMyZDI4ODMwMWExMGE5MTM5ZWQ2MDkyZmZlMjk4ZTI1YjhjZmI2YjRiZTgyMTdmMTYwNzZkY2QwYTkwIjoxMTI6Ijc3NmQ4NzE5NDQxNTljNTFiMmY1ZWMxOTgwYTYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGM4NTE3NGQ0MjhmYzFjN2M4OWNhNWQxYjhhYWJhMjUiOiIzNzM1Y2JmYjgwMDAyNjAwMjFkMTkzOGQyYTE4ZTc3MzdmMzc4ZWNkZGIxMWE0NmNlMzg3YmYwNGUyMGJiZmNjOTAyNDU3NjM3ZmQxNTJhYjg3MDE3MTg1NjAxZjMyYTdmOTA2MDU3MTIzYjZjMmRhMzFhMTA2OWM5M2UzY2FjYzU5YTM1OWFlYmQzZTMxYjMwMmUxYTFmN2Q1ZDhmMWIyOTE3YThmZTc5MTgxZmE2MzNiOTI1Y2UwM2ExMTk4ZGFjNDhmNGM5NTkwNzZiNTViYzZiM2Q1MDE4OGFmMmM2YWEzM2Q4MzY5OGFhOGRiMjI2NDlmMzk4MjViYTU0Nzc1IjoiYjNjOWRmYTRjNTUzODhhMTI4ZmJmNjJhYTU5MjczNjEiOiIzZjU1MmQ0NWI2MWNmMDVhZTJhYTkyNjY4ZTg5ZjMzMzhhMTVlYzdjNWI3MTEzYjY1NzFjZmNkOWU0YzRhOTYyMDQzY2NkOTMyM2Y4MjhkZDY0NWU4YTkxYjAwN2NlMjExMmI3Zjk3OGFkMjJlZTk4MjE2OThhNGYyNTU5ZDk4N2FlNDQyMTQ1MmFkMmU4ZDE4MDk1MzI5NzE1NjQyNmQ0NTQwYWZmMjEwNGQ4NjM3YjU2YjAzNGEzYTE4MjNjZjk2MmJmZmJjNDY1ZmU2MTQ4MDk3OTc1YTg4MjFjYTc0ODdlNmU2YzdmZjRlZTRkZTg5OWZlNjczNDU2NzZiYjFjIjoxMTI6IjFlN2RlYzgzODMwMTgzZDU2ZjQ0M2ExNjQ3MWQiOiIzZDk4Y2FiY2E0YWZiN2MxZjZiOGVlZWQ1MjFmNDY2NmFlMjUyYWMxMmQxN2ViZjRhNzEwYjlhMjJkODM5YjY5NDU4Mzg3YmE0YmJlYzJmNjQwMGUwY2ZmODBmYmU0NjgyYzI0ZWZjZDNiOGM1OTRkOWI1MTVjYTc4NDJjOWQ1OTg4YzQyYjU5YjY1MjZjMjlhOTkyNTY0NTFlMjkyN2Y1Yjk1NmVmMjYyZjk3YzczM2RmYThiZmY3MzY0NDQ3M2I5YTg1NjJiZGZjYTc0OGY0NzMzZGRjZTk0YTYwMDI0ZGZiZmNkZTYyZmIzY2JkN2MzZDk1NTAxMmQ1MzM4YjkxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDg5ZjA2ZWIwNzc0NGQ0M2Q0NDczNGZhZjk3NTFkMDciOiIzNmNjM2IyZjU2MzMwNTIwOGEwMzM3OGY3ZGMwMzYxMTlmN2RlM2ZlZTc3Y2VmYWMwNjUxNTg1M2QzNjYwOWE2MjIzODJlZDAyNmM1OTc4M2ZiYzBkOTkxMDc2Nzg3NGM1MTZlMTBjN2JmM2UzZDEwNGY3M2IzNDYzYzhkOTNhNjM0MThjNzZjYjBkMDVlNjJlOWM4NjQyY2I0ZjMyY2FjZWQyNjIwOTEyY2I2Yzc5ZTUxMTBhMjdkNWZiYTFlZjNiNGQwNTc4MDc3ODU4NTI2YzVlNDI1NDM2NWYyYjJhYjQ3YTQ1ZGY0YWYwODk4MGIzYjdhOWI2NmRmZjViMzhjIjoiMTg1ZjhkMDMzNzEzZWU2MjllOTM1NjFjZjhkNWFjYjgiOiI3NDNiY2I2NzFkMGFhMWM1NDdiNTQ0OGQ2NGQ3YzZiMjkwNzc3NjI1YmEyOGYyNWNhMGZiZjFmYzY2NDk1YTJmZGUwNjQ4YThkYjUxMDM5YjBlNzM0MGQ5OTNhZWY4YWZiNDgyNjllNjYwY2I1OTk4MzdkMWU0NmY3MjcyNzc2MmQ4ODdlZTg0YzA3M2Q2MTM2ZDFiMGJjN2Q0Yzc4ZjU2NzNhNGE2YjczMzc1OTM3ZThkNTRhNDczMDQ4NDVmMzhjYTZiNGY1MWNmMTQxMzZhMDgyNjAxNjUzNWRjNWVkMDAzZTM4YzNhYzM2MmI5ZDU4YmE4YjU1NWEwNWExNDEyIjoxMTI6ImZjYWQ0ODA3NmViMDNlYmU4NWM2ZDY0ZjYzNTciOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjE1MGYxNGRjNTNmMzkxZTgxNWFjZmFiZWQ5ZjllMjAiOiJmZDhmMzM3MDE3ZTFiNjBkNjYxOGU2ZTRhZDM3YzFmMjMwY2RlYjc4ODkxNTc5YzJjNjNkNGU2YTRmN2QyY2I3MjUyZTk5ZGUzMzNjNzNkYjQ1OTU4ODA4YzA4ZTkxMzU5Yzg4NWE3Mzg1YWI2ZjllZDk4YTI3OTI3YTViODNjM2E0NTZjZTJlMDE4Njk3MTI2NzVlNTI3MTU1YmExZTMzOWFjMTRhM2NjZDdhNGI4NzM2MDkwMmYyYjgzODEzMDhmZTVhNGVhYzVjOTBkMGI4NGRhNGJmNWI5MDdkZTZmZjMxMzljZmZkMjNiNDlhNzg3NTAwMDYxMDAxODMwMzJhIjoiN2U5MmRkNTU4YmQyNjYyYzNhNTM5ZGZlMjFhMzUyY2YiOiI5YjQ2MjRlOTExOGU2YWE1ZGM2NWI2OTg1NjYzOGY3N2ZkM2Y5ZjU2MjA0NmY1MGJhOTJhNjRlOTg4MjU4NjM3OTMyYWY3OTc5ZjAwMDUwNWI4NGE3MWZmNWRkN2I2MGJhZDYyNTg2YjFhODgzN2E2MWMxNWExYTFiYTdmMDY2NjgyNzJjMjgxNjk5MTVkN2YwNjI5N2I2YzJhOTZjOGM0NDIwM2E0MjJiZmQyNTUwMGM4MmUxMTI3NGZmZTA3NzA2MzY1YmZkM2RhMzRhZjRjNGRkOGFkN2I2MjBkZTcyODRhNWFmNzI5YmVhOWM0ZWQyNjMxYmRjYmEyZWJkYjdkIjoxMDQ6IjkyMmE3YjQ4YWQ1YmY2MWU2ZDcwNzUxY2ZlIjoiZjI3MmEzZWU5Yjk4MWY5Nzc4NWNjNmZhZDM1MGU1MTZkNzJkNDAyZGFlMGQ4YTUzMWMwNjRlYzY0NTk4YjJhNTc2MGY5YjI3OWMxMGFhMWZmNzFiZWMwNzMwMGFiMDM3MzE4NzEzOGU3YTEwM2ZjNDEzMDEwNWFmYTZiNjM0NmYzZDM2OGI0MGQ2ZjU0MjM3NWRlOTc4NzhhZDRkOTc2ZDY0YzVjNDk2OGExN2JlMmIxNzU3YTE3YzAzMTAwMjMxYzM0NzIxMjUwY2QzN2NjNTk2Njc4NzY0MDgzYWRlODlhZTNiMWEyMTUxZmY5MTUxZWRjZDdiYTBlYjhhNDY0OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNlODIxNjA3MmVkNmZjZGUwZmUwZjYzNmIyN2VkNzE4IjoiM2I1MGYyYThkY2E5ZjcwMTc4NTAzZDg2MWQ5ZTM3ZjVlZGZhZmM4MGVlMDIzYmZlZDM5MGE0NzczNzI5ODZlNDc5NDE3NWVjMjJhYzAzOGMzNDYxYWJhNTBjOWIyMzc5Y2FiNDg1MTI5NDZlZmRmZTJjYjljMTJhODU4YjM3M2E1MzA5MzI0ZjQxMGU2YTA1ZTg4YmE4OTI3NTlkYmVlNmU0ODZkYzk2NjVmNjZjYjU5NTBlYTdlNzEzMTdmYTk0YWJiZWJkNjdhMzk0ODc0NmE5OTgxNzNmYmJiNGYxNGY5ZWZmYmRmNjZkM2I2ZTM0NjA1MzQ5NmE0YjE5MzRjZSI6IjIzYTEyMmNmMzYzYzMxMTdiOGM2NjMzODhjNzYwZWU0IjoiMjhjZTBiNGE0NGZhODMzMjNlMDYwZjNmZjY0MzZiODgyOWQ0Zjg0MjA5MDI5NmJkYzk1MmI2ZDRhNmIxYjFhNjZiZTA2MTY4YzYzYzQ2NDNlNmFjMTg2ZjdmZmQ4ZDE0NGY2MDNiMmQ0YmMwZDY1YmU0ODEyMTY3NmY5ZmExZjM1OTAyOWM1MTJiZWJmZDc1MDc1ZmYzNTdiYzU1ZjIwZmM3NmQ5ZjI0NzdjOTkzMGYxNjQwOGY5ZjA5YzVhZTg2ZWZhMjUyOWQyZjE0NDljZWViNjM1YjgzY2ExMzY2Mjg2MGVmOWFjMDRhM2Q4YWI0NjA1ZWNjZDJkOWFlNWE3MSI6MTA0OiI1MzFhNjVjYzVkZmVjYTY3MWNjNjQwNzhkMSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYWY0MzRiNzNhMTIxMGIwODU5NWZmYTY4NjA3OTgzMiI6IjEzZjZjMWMyZDRlZGNmMTQzOGE3YjRlODViY2QxYzg0YTk4OTgzMWE2NGQyMDVlNzg1NGZjZTg4MTdkZGZjZWFiNjdkMTA1MDZjY2Y2ZWQ5Y2U1MDA4MGVmODA5ZTI4ZTQ2Y2JhN2IwYzk2YmU2YTgxMWY1OWNkMDljYjNiN2IzZmU1MDczZWU2NzYzZjQwYWVlNjFlM2U2NTM1NjA5M2Y5N2RlZWY1YTg3MjFkOTk1ZTcxZGIyN2E1MWY2MGE1MGUzNGFjMzM0ODg1MmM0NDUxODhjZmM2NDMzNzQ1NWYzMTdmODc1MzVkNDY1YzZmOTYwMDZmNDA3OTM5NmViYTMiOiJhZTMxOGYzY2I4ODFkMTY4MGY2YWZiZjY3MTNhOWEyZiI6IjM3NjNjOTI0MWJlMGQ5ZDlhOWU0NmU2NGIxMmUxMDdkMTZjY2EyNjdmZjg3ODQ0YzIzMjVhZjkxMGNjOWE0ODVjNzAxNWQ5NWJiZTYyMzk4ODY0ZDA3OWZiMmI1NzdiYTBjZmFkOTIzYzI0ZmEzMDY5MWFkN2Q3NjdkNjUxZWVkNGEzM2QwYmU4ZjA2ZmVkNDNmNThiMmUwYmIwNDk1OWYxMGI5ZThlNzNiZDgwZDNhNmE4YzhjZTYzN2JmYmRiOWQwMmMyYjBhM2RkODMxN2M0OTk3ODIyMDMxYTM1ZDM0YjNiNjE4MTliNDI1YzEwYzY0ZTgzOWIyOTg3NGRkZmIiOjEwNDoiMmFlNzM1MGRkM2QxOTA5YTczZjhkNjQyNTUiOiIzY2QyYTc3MDMwMGNlNGM4NTc0MDY2NjY0MDkzNmEwZmU0ODg4ODc4ODcwMmZjMzdlN2E4Mjk2YWRiNDBiODYyZWM3OTlmMjU3YTE2ODIxYWRhYTczMTViZDMxZThkZWM2MGU0YThmYWViOGJhMmVlNjA2MzQwZjAyMTlhNjQ0MGU5YzFkMzE2ODQyNWU1OGZhYzAyZThhODg4NjVmMzA2NDk5MTNkOTg4MzUzYWI4MWY0MmE1YWQ0M2Y5NjAwNTVmMDg3N2FjZGEyMGY0OTMyMDhjMmM0MDc1NGZiZjRjY2VlMDQwOTc1YWEzNThlYTNmZTYyY2JkMDI4YzE2MTFhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwNDAzNmQyZjUyNzNjNmZmNWI4MzY0YWE1OTUzNTljOSI6ImFjZjc5YjYwOTk0OTBhZjkzOGZiNWZkODkxMzI1NWIzZGFhMjI3ODZiMDMzNTZjZGYzZTBmZmFmNTcwZjlmODY2MDQ3YjhlMTVjOTk1M2Y4OTNkOTdlNzA5ODI2NTI5NzM5Njg2OGViYzM4M2JlODU0N2U4ZWM5ZDk3NGI2YTY1YjVkYzUxNDdjZGFkZWYyZTJhZDk2Njk2ZTg0ZTQ0ZjM2NGMyYmExOGM4YWFiZTIxZjk5NDg5OTU3YjJiNTQ4NGJmM2ZiNGZlY2FmNWRkYWExZDM3M2U5MTAwNTljOTc4OTE4YTNkMDFiOTU1ZGUyYWRiNDc1OTE0YmYyYzIwNjciOiJlZGM0MzNjMzgxMTQwZGZmOTI5ZDlkZjlmNjJmNGNiNiI6IjQwNGFjZmVlZWEzNDJhZWVhOGM4Yjc0NDlhZjllMjBkZGY1Yjg1ZGM3NzcwZDIxNDRhNGRkMDU5NTk2MTNkMDRkMGNmZWNlNWEyMWNiYjFhOTE3NWRkYzk0NDNmZmFjZDIwODUzMzJlYjRjMzM3YTEyYTdiYjI5NGM5NTk2MGU3YzBiZGU0YjhhYjMwYTkxZTUwMjY3YmJkMGI4ZDJhNGVkMzgxNDA5ZWEyZTRjODRmOWEyMDcwYTc5M2NlM2M5MGVhOGE0YjE0MDY1MWI0NTI2NzRmODVkNWI3NmQwMDU1ZGYxMTU2MDhiZjNhM2M2MDk5NjEwODAyM2ViYWJlNjUiOjk2OiI3MWY4MThmMWEyYjc4OWZhYmJkYThlYzEiOiI0NzI5Y2I2NDIzMDRkZTkyOGI5ZGNhMzJiYjNkN2I3ODM2ZGQzOTczYmJjY2YzZjAxM2M4ZmY0YjU5ZWNhNTZmNWQzNGQxYjhmMDMwYTdiNTgxYjJmOGZkYzFlMjJiNzZhNGNiYzEwMDk1NTU5ODc2NzM2ZDMxOGQ2Yzk2YzVjNjRjYmQ5ZmJkMWQ4ZWI0ZGYzOGEyZDU2NjQwZDY3ZDQ5MGQwM2FjYzFjZDMyZDNmMzc3ZWIxOTA3YmJkNjAwZjIxZDc0MGI1NzgwODBiYTljNmRkYzdkYzZjNTBjZGNlZTQxZmVjNTE0OTljYjk0NDcxM2MwOTYxZmM2NGY1YTcwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1OWZlNDRjNmUyOGQwMjViMmFkMDVlNmU4NjcwNTFhYiI6IjIwZTY2YmFlMTIxNWRlOWE4N2EwYjg3OGQzOTAxNWQxN2UwZDQ1NDJhMWFhYmEyMDAwY2VmYmQ1Zjg5MmMyNmE0MTBmNTVmMGQ3ZGMyZjZiNjY2OTBmMjk5NzAzMjk4NWU1NTE2ZTA2OGJmYzZlYzhhMzY2OWY1NjZlMjgwYjBjZWZkZWQ1MTkwMjNiNzM1ZWUzYmNiZmM1YjZjZTgyMDNiNzI3OTMzYTc1MGY5YmQ1MTVlYzQ0OGMxZjNhMDMwYWEwZjQwZTYwNzcyN2EzMjM5ZWJiZTY1NWQ0NmIzOGEzZDg2N2U0ODFjY2YwZmFkYmYwZDU5YjY2NWQyZWQ2YjUiOiJlYjBjMzAzMjAwMjk0MzNmNjZkMjliM2ZkNWM2NTYzYiI6IjQ5Yjc0MThiODczNzRiNDYyZDI1MzA5YjFjMDZlMzEzMmEzYzhmNGE0ZmNmMjlmZWQ1OGUwOTAyNTA5NDI2YmU3MTI2MzlkYjIxYzA3NmRmN2I4M2RjZmNjMmMyYzhmY2M4ODU3NmY0NjIyYTQzNjZlYjQyZjg0ZWJmNzYwZTNlYjIyYjE0ZjhiNWZmODNmMDZhNmYwNGE5MjRlYWFiMDViOTEyZTEyNmU4MGRhMjI0NjFhYmY3ZjE5MjVmZDcyZWJkZjJhZWEzMzVhMDQ0NzI2ZTdjMmViYmIyYjhhZWViYWI0ZjdkZTVlMTg2YjUwZjI3NWI3MDA3OTRkODk1ZDgiOjk2OiIyOTZjNGNkYWViOTRiZWIyODQ3ZGM1M2QiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjMzE0MjY0Y2VlMGU2ZGIzMGViZTliMmY2ZDQ5OTFiMiI6ImQ0MzZmZjlhYmZiMDQ0YTMzMmM0ZTAwOWI1OTE3MTlhNjdiMTJhNTM2NmRhMGE2NmVkZjE5NjA1YzM0ZGFhMzc1ODhlMTVkZDNkYTBkMWEwOTcyMTVlNDY5NDM5ZGU3OWNjYTc0ZTA0Y2Q0OTA0ZTViNGE2Y2I0ZTBlYTU0ZTZiYTRlNjI0ZWQ2YmQ0OGJlMzJkMWVmNjhmZmVhMTYzOWExNGU5MWE1OTE0YzIzNDZlYTUyNmRmOTVjYmQ0YWQxYjhlZTg0MmRhMjEwYjM1YjYzMTVjMzA3NWVjYzI2N2Q1MTY0M2M0YjM5MjAyZDBhZDc5M2NiYjAwNDVlYmRjMTkiOiI0Y2Q0NDMxYmI2ZGVhOGViMThhZTc0ZTRjMzVhNjY5OCI6IjBlZWFmYmZkMDRmOWEwZWExOGU1YmRjNjg4YzdkZjI3MTgzZjM0NjE4N2U5NTc0YjYxMjIyMDA2ZjJiM2UxMmU4ZDlkOWJmMWYwZjE1OTQ5ZWUxYTdlZThlNWM4MGVlOTAzYjhiYTI4NjBlMTVjY2I5OTk5MjlmMjgwMjAwYjE1OWMyYWRjYTQ4MTc0OGQwNjMyYTdiNDA2MDFjNDUwNTVmOGNiNTEyNjE0OGU2Y2JhYjJjNzZmNTQzNTM3YWI1NGViMjc2MTg4MzQzY2VhM2M0YWIwZDdiNjViODc1NGU1NWNmZTNmNmE1YzQxYjZlYTNjMDhiODFmY2VjYzk2OGEiOjk2OiJmZGExOGQyZjc5NWQ5MDBmMDU3ZmU4NzIiOiJjYjllMGZiMGFjMTNjYTczMGI3OWUzNDc0NTU4NGIzNjJkMDcxNmMzNDRlNGRlOTBkODM1MmIyMTExNzQ3MWJhMTJjOTdmMTkzMTUwYjMzNzc0YmFlZTVlNGEwZjExYjEwNDI4ZWFmMDEwNmM5NThlMTZhYTQ2YzVmNmYzZDk5ZWVkOTNkMWI5YmEzOTU3YmVkMDVhOGI5Y2M4YzU1MTFjZjgxM2E2NmRjN2Q3NzNjYjczNWIwNTIzZDhkNmIwYjgwNjM5YjAzMWRkYzM3NWY3MTRjNmRkNTAwNTUzMjBjZDdlZDQ0YTQ3MWM4ZDU2NDVjOTM4YTkwMDVkMGI1MDUwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNjA3MjAxOGJkMGJkYTUyNGI1YmViNjZhNjIyYzYzZSI6IjkxYzUyNGIzNTlkYWUzYmM0OTExN2VlYmZhNjEwNjcyYWYxZTc3NTQwNTQ2MDczMTdkNGM0MTdlN2IxYTY4NDUzZjcyZDM1NTQ2OGY4MjVhZWI3ZmRlMDQ0YjIwMDQ5YWVkMTk2ZWM2NjQ2Y2NlMWVlZWNjZjA2Y2IzOTQyODYyNzJiNTczMjIwY2RiODQ2NjEzZWJjNDY4MzQ0MmRjY2M3YTE5ZWM4NmVmMWVjOTcxYzExNTcyNjU4NGFlMWY0MDA4Zjk0ZTQ3ZDEyOTBkOGI2YjdhOTMyY2ZlMDcxNjVmZDJiOTRlOGY5NmQxNWY3M2JmNzI5MzljNzNmNGJkMTEiOiJjNzgzZDZkM2I4MzkyMTYwZTNiNjgwMzhiNDNjZjFmNCI6IjhhZTdjODA5YTlkYzQwYTY3MzJhNzM4NGUzYzY0YWJiMzU5YzFiMDlkY2I3NTJlNWE2YjU4NDg3M2UzODkwMjMwYzZmYzU3MmI5YWQyNGQ4NDk3NjZmODQ5YzczZjA2MGZjNDhmNjY0YzFhZjllNjcwN2UyMjM2OTFiNzdlMTcwOTY2ZWQxNjRlMGNjMjVlZGUzZmJjMzU0MWM0ODBmNzViNzFlN2JlODhmZTczMGQ4YjM2MWVhMjczM2M2ZjM3ZTZhNTk2MjFkZTYwMDRlMDIwODk0YjUxZGZiNTI1OTczZDY0MWVmZThkNWZkOTA3N2EwYmJjOWRjNzkzM2E1ZGUiOjY0OiJlZGZmZTU1YzYwMjM1NTU2IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjAxNzUxZDNkYTk4YmQzOWZmNGU1OTkwYTU2Y2ZlYTciOiIyOTY1YWYwYmRlMzU2NWEwMGU2MWNlYmJmZTBiNTFiNWI1ZWU5OGRiYmZmZjdiMWI1YmY2MWRhNWJhNTM3ZTZmNGNmNWZhMDdkMmIyMGU1MTgyMzJjNDk2MWU2YmMzYWUyNDdiNzk3NDI5ZGE1ZDdlZWUyZmM2NzViMDcwNjZhYzJlNjcwMjYxYzZlOWE5MWQ5MjBjNzA3NjEwMWQ4NmQ1ZWY0MjJiNThlNzRiZGMxZTBiMWQ1ODI5OGQzZWUwZjUxMGVlM2EzZjYzYTNiYmMyNGE1NWJlNTU2ZTQ2NWMyMDUyNWRkMTAwZTMzODE1YzJhMTI4YWM4OTU3NDg4NGMxIjoiNjE3MjQ2ODYzNGJmNGU1ZGRhOTZmNjdkNDMzMDYyZDciOiJhZTJkNzcwZjQwNzA2ZTFlYWEzNmUwODdiMDA5M2VjMTFlZDU4YWZiZGU0Njk1Nzk0NzQ1ZTc1MjNiZTBhMWU0ZTU0ZGFhZGUzOTNmNjhiYTc3MDk1NmQxY2ZiMjY3YjA4MzQzMTg1MWQ3MTMyNDlmZmU0YjYxMjI3ZjE3ODQ3NjljZThjOTEyN2Y1NDI3MTUyNmQ1NDE4MTUxM2FjYTY5ZGMwMTNiMmRmYjRhNTI3N2Y0Nzk4YjFmZjY3NGJjYTc5YjNkZWM0YTdhMjdmY2YyOTA1YWUwY2UwM2Y3MjdjMzE1NjYyY2Q5MDZlNTdhYTU1N2QxMDIzY2NlMmFjZDg0Ijo2NDoiNjZjMjQ3ZTVhZDRlMWQ2YSI6ImVmZDA2NGQ0YjRlZjRjMzdiNDhkZGYyZmE2ZjVmYWNjNWU5Y2M0YzMyNTViMjNhMWUzNzY1ZmFiYjVhMzM5ZmEwZWRhNzU0YTUzODFiNzI5ODlmYzEzMjNmZjlhNmJiYWVjZDkwNGViNDgzNWU1YTUxMWI5MjI5Mjc1NzQ2NzMwNjFlZDhkZTIzMjk5ZWExNDU2MDU0ZTdlYmI2Mjg2OTg3OGMzNGZiOTVlNDhjODM4NWI1ZWJjZWVjYjk2MjY1NGNmMTU4NmIzZjU0ZTc4ODdjZTMxODUwMzYzZTlhMjJiZTllNmZiYzIyZTY5NGRiODFhYTA1NTQ5MDQ5NWRiZjIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNiYzBkY2I1MjYxYTY0MWEwOGU2Y2IwMGQyM2U0ZGViIjoiZDUzM2FkODlhMWE1NzhkYjMzMGMwMWI0ZTA0ZDA4MjM4YjAyMGUzNmFlYmU4N2NmMmIwYmYwYjAxZjFjZTQxOTdiZThiMDU5NmU0NzVhOTU5NDY5MTgxNTJlOGIzMzRiYTg5ZjYwNDg2YzMxZjBiZDg3NzNjYTRmZjEzMTlmZTkyMTk3MDg4YjEzMWU3MjhkNjQ0MDU0NDFjNGZiNTQ2NjY0MWYwYjg2ODJlNmNiMzcxZjhhODkzNjE0MGIxNjY3N2Y2ZGVmOGIzZGQ5Y2JmNDdhNzNmNTUzZjFkY2E0MzIwYWQ3NmYzODdlOTJmOTEwZjk0MzQ1NDNmMGRmMDYyNiI6IjE2ZmExOWY2OWZjZWVkOWU5NzE3MzIwNzE1ODc1NWE1IjoiOTJkZGQzYjk4ZjA4ZmM4NTM4ZjYxMDZmNjQzNGExZWZhMGE3NDQxY2M3ZjZmZDA4NDExMDNjMmU0ZGQxODFlYTBjOWE0ODExYjNjYjFiYWQxOTg2YTQ0ZDhhZGRhYmMwMmRkNjk4MGRhZjdkNjA0MDViMzhkYWRjODM2YmIxZDA2MjBjZWFiODRlMDEzNGFjYTdjMzBmOWY5NDkwNDM2YjI3YWNmZDcwNTJmOWQ3ZjAzNzliOGU3MTE2NTcxMDE3YWRkNDZiOTk3NmY0YjQxNDMxZDQ3YmFlNmY1ZjM0ZGM0MjQxMDc5M2JjMjZjODRiZmU4NGZiNTNhZTEzOGM4NSI6NjQ6ImY1Mjg5ZTEyMDRhY2UzYjIiOiJiZTBjMzBkZWVmZmJlNTE3MDYyNDc5MjgxMzIwMDJiMjRkMjkyNzJlZWU2YjlkNjE4NDgzODY4ZTY3MjgwMjM2NjMyZmExYWUwNmYzZWY3OTNmNjdiZDAxYjFiMDFmNzBhODI3MzY3YzFjZDI4Zjc3ODkxMDQ1N2M3Y2JkOTc3ZGZlZmZmMWY4NGE1MjIyNDdlMTliMmZkMDFmYTIyY2U2N2NlZjk1MDNkNDVjODBhNTA4NDc0MWYwNDEwOGYyNDYyYjdjZGQwNmE4ZjFmMDQ0ZmVhMmIwNWU5MjBiY2MwNjFmYmM2OTEwMTc1ZDczMmY0NTEwMmE2M2M3NmFlNDhjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMzljMTU0OTJkNmRlZWM5NzllNzkyMzZiYWNhNDYzNSI6ImQ2NDg4NmNlNWY1YjRhZGI3ZmU4Zjk1OTA0YmMxNDYxNzQ5YzkzMTY1NWIwMjgxOWZmZGQwYWUzMWJhZDQxNzUxMjVhYTY4OTYyZjhlMzZlYzgzNGE3ZDUzYTE5MWE3NGM5MzdlODFlYzkzYWQ5Y2UwZDNiMjg2ZDNjMTFmZjE3MzNjMGI3NzgwMTMwNzY4YzEyMGIxODMzOTMzNTYxY2YwNzM5OWNhNDliOTEyMzcwYWUzNGYwZTQ5YjljOGNiOTkyMGVkZGM2ODE2YWIyYWUyNjFjNmQ3ZjcwMDU4YTliODNhNDk0MDI2ZjI0OWU1OGM0YzYxM2VlZmFmZTY5NzQiOiI5MTZiOGI1NDE3NTc4ZmE4M2QyZTllOWI4ZTJlN2Y2YiI6ImIzOWViNzMyYmMyOTZjNTU1Y2M5ZjAwY2Y0Y2FhZjM3ZDAxMjMyOWYzNDRhNmI3NGE4NzNiYWYwZDhkZGU5NjMxZjVlNTdiNDViOTU3ZDZhZWMwZjc5NzhlNTczZGQ3OGI0M2Q0NTliNzc3NTYwMzdjZDY0ZDEwZDQ5OTY2ZWIzYTJhMDhkMGY0ZDVlNGY1ZGNiODcxM2Y0ZTQ3NTZhY2RmOTkyNWM1ZmM2MTIwYzQ3N2Y2ZGZmYzU5YjBiNDdhM2Q1ZWZkMzJiOGM5MDUyYjMyMWJiOWI1MTI5ZTVjNmEwOTVkOGRlNTYzNjAxYjM0NjA4NDU2ZjU4ZDcyMjFmMmQiOjMyOiJmYzA4Y2JiZSI6Ijk1YzE2OTcyMWVhMDA3YzNmMjkyZTRlYzc1NjJhNDI2ZDliYWE3ZDM3NGZkODJlMWU0OGQxZWFjYTkzZDg5MWQ1ZmZhOWFjZjVlM2JkODJlNzEzYWM2MjcxNDFlMjZhOGI2NTQ5MjBiYWZmYWI5NDg0MDFjYzNjMzkwZDZlZWE5ZDdiNzhjNGZjYjA4MGIwYWE5MjIyZTRkNTFiZjIwMWNjZmQ5MzI4OTk1ODMxNDM1ZTA2NWQ5MmFkMzdlZTQxYzdjNDM2NmNjMWVmZTE1YzA3ZmMwNDcwNjA4ODY2YWVlYTk2OTk3NzcyZWNmOTI2OTM0YzVkMDJlZmUwNWYyNTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRiNjhhOTZlMjE2YjBkZDk5NDVmMTRiODc4NDg3ZTAzIjoiNTYzNDE5NmEzMmQ0Y2JmYTdhMmY4NzRhMWUwZjg2Mjg3ZDI5NDIwOTBlMGNjNmE4MmJkNWNhZjQwMTM2YTI3ZGRmNTI0YTE3NzEzY2U0YWYwNGNhNmNiNjQwYTcyMDVjY2U0YWM5Y2IyZDBhYjM4MGQ1MzNlMWU5NjgwODllYTU3NDBjMGZjYmZhNTFmMjQyNDAwOGUwYjg5ZGM3YjMzOTZiMjI0Y2ZhZWQ1M2IzYWMwNjA0ODc5OTgzZDNlNmU2ZDM2MDUzZGU0ODY2ZjUyOTc2ODkwZjcyYjhmNGI5NTA1ZTRlYmRkMDRjMDQ5NzA0OGMzY2UxOTMzNjEzM2VhNCI6IjhhMWE3MmU3YmI3NDBlYzM3ZWE0NjE5YzMwMDdmOGFlIjoiMWI0ZjM3MTkwYTU5YTRmZmY0MWQzNDg3OThkMTgyOTAzMTIwNGZkN2FjMmExYmU3YjVlYTM4NTU2N2U5NWUyYWNlMjViZjllMzI0NDg4ZGQzYWI4Y2U3ZjI5ZDRjOWE0ZjRiMWE4YTk3Zjc3NDg3MWVlODI1ZTJjMTc3MDAxMjhkM2M1NTkwOGQzYjY4NGExZjU1MGZkYjhiMzgxNDlmZjc1OWMyMWRlYmRkNTRlNDlkNjRkM2U4YWFjODAzZGZkODE2MDA0NjRlZDQ4NDc0OWJiOTkzZjg5ZDQyMjRiM2Q3ZDU1Yzc1NmI0NTQ0NjZmZjlmZDYwOTAxOWVkNWU4MyI6MzI6IjkyNTFkM2UzIjoiMGM2YmIzZWU1ZGU1Y2JiNGIzOWQ4NWQ1MDliY2FjYjNkZGE2M2ZhNTA4OTc5MzY1MzEzMzk4ODI5NjJlOGRjNTRjMjg1Yzg5NDQ3NjhkMTIwOTZkNGEzYzJiNDJmZmE5MjYwM2NlZTJkYTliNDM1ZWM1MjkwOGZjYTZkMzhlZDc0Zjg5OGZlMGZmYTc2MWY5NjAzOGZmN2RmZWNjYzY1YmI4NDFjMzQ1N2I4ZGUxZTk3ZDliZWU4MmUyOTExNjAyZWUyZGM1NTViMzNhMjI3NDI0ZGVhODZkNjEwZDM3YzQ0Nzc3NjI5NWI0MTJiNDEyOTAzYWQyY2VkZTUxNzBiNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjU5YjllNzI5ZDEyZjY4YjczZmRjMmY3MjYwYWIxMTQiOiJmZDA3MzJhMzgyMjRjM2YxNmY1OGRlM2E3ZjMzM2RhMmVjZGI2ZWVjOTJiNDY5NTQ0YTg5MTk2NmRkNGY4ZmI2NGE3MTFhNzkzZjFlZjZhOTBlNDk3NjVlYWNhY2NkZDhjYzQzOGMyYjU3YzUxOTAyZDI3YTgyZWU0ZjI0OTI1YTg2NGE5NTEzYTc0ZTczNGRkYmY3NzIwNGE5OWEzYzAwNjBmY2ZiYWNjYWU0OGZlNTA5YmM5NWMzZDZlMWIxNTkyODg5YzQ4OTgwMTI2NTcxNWU2ZTQzNTVhNDUzNTdjZTQ2N2MxY2FhMmYxYzMwNzFiZDNhOTE2OGE3ZDIyM2UzIjoiNDU5ZGYxOGUyZGZiZDY2ZDZhZDA0OTc4NDMyYTZkOTciOiJlZTBiMGI1MmE3MjljNDViODk5Y2M5MjRmNDZlYjE5MDhlNTVhYWFlZWFhMGM0Y2RhYWNmNTc5NDhhNzk5M2E2ZGViZDdiNmNkN2FhNDI2ZGMzYjNiNmY1NjUyMmJhM2Q1NzAwYTgyMGIxNjk3YjgxNzBiYWQ5Y2E3Y2FmMTA1MGYxM2Q1NGZiMWRkZWIxMTEwODZjYjY1MGUxYzVmNGExNGI2YTkyNzIwNWE4M2JmNDlmMzU3NTc2ZmQwZjg4NGE4M2IwNjgxNTQzNTIwNzZhNmUzNmE1MzY5NDM2ZDJjODM1MWYzZTZiZmVjNjViNDgxNmUzZWIzZjE0NGVkN2Y5IjozMjoiOGU1YTZhNzkiOiJGQUlMIjowCisKK0FFUy1HQ00gU2VsZnRlc3QKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMxMjhfZW4uZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTI4X2VuLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiZWU5ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTI4X2VuLmRhdGEKQEAgLTAsMCArMSw2NzUgQEAKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTAxNGY3NDMxMGQxNzE4ZDFjYzhmNjVmMDMzYWFmODMiOiIiOiI2YmI1NGM5ZmQ4M2MxMmY1YmE3NmNjODNmNzY1MGQyYyI6IiI6IiI6MTI4OiIwYjZiNTdkYjMwOWVmZjkyMGM4MTMzYjg2OTFlMGNhYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ4NzRhMjVmMjI2OWUzNTJjY2RkODNjYzJkNGU0NWI3IjoiIjoiOTcxN2FiYjllZDExNGYyNzYwYTA2NzI3OWMzODIxZTMiOiIiOiIiOjEyODoiMGUwOWU1M2U1ZmU4ZDgxOGM1Mzk3YzUxMTczZWRhOTciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3ZGFiNzdlMjNiOTAxYzkyNjQ1NGYyOTY3N2ViNjJkNCI6IiI6IjhhYWVjMTFjNGEwZjA1M2Q3ZjQwYmFkZDMxYTYzZTI3IjoiIjoiIjoxMjg6ImNlYzJlMzIzMGQ4Yjc2MmFjZWU1MjdlMTg0ZTRjMGRiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjM5N2YxNjNhMGNiNTBiMGU4Yzg1ZjkwOWI5NmFkYzEiOiIiOiI5N2E2MzFmNWY2ZmM5MjhmZmNlMzJlZTJjOTJmNWU1MCI6IiI6IiI6MTIwOiIzYjc0Y2NhN2JjZGMwN2M4ZjhkNDgxOGRlNzE0ZjIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhN2FkYzBkM2FhY2VmNDIzOTdiYmNhNzlkZDY1ZGJkZiI6IiI6ImM2ZDMxMTRjMTQyOWUzNzMxNDY4MzA4MWQ0ODRjODdjIjoiIjoiIjoxMjA6ImQ4ODE0MWQyN2ZlMTc0ODkxOTg0NWNmYTU5MzRiYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjEwMTcxODA1ZDdmN2E2ZDg3YjY0YmRhNTc0NzRkN2ZjIjoiIjoiZmFkNjViNTBjMTAwN2M0YjBjODNjN2E2NzIwY2FjYjgiOiIiOiIiOjEyMDoiYzNkM2YyNDBkM2YzZGEzMTdlYWU0MmEyMzhiY2MxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGFhYTBjODVkMjE0YzZjOWU5ZTI2MGU2MmY2OTU4MjciOiIiOiI4NGUyNWM5MTZmMzhkZDZmZGI3MzJjMGQ2ZDhmODZiYiI6IiI6IiI6MTEyOiJhNzc0ODE1YTJhODQzMmNhODkxZWY0MDAzMTI1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGVmOGI2YTU4YjhlNTgyZTU3NzAwYmFiNGYyYTQxMDkiOiIiOiIzNjE1NDM5ZTlmYjc3NzQzOWViODE0MjU2Yzg5NGZiMiI6IiI6IiI6MTEyOiI1MzdiZTljODhkM2E0Njg0NWU2Y2Y1ZjkxZTExIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTg5NDIzMWQ3NDNmNzk2Mzg2ODdjMDcwYjYwYmVlZTEiOiIiOiJlMzRjZDEzYjg5N2QxYzliODAxMWEwZTYzOTUwYzA5OSI6IiI6IiI6MTEyOiJkNTgyYzRiYzA4M2E4Y2YxYWY0ZDVjMmM5YjExIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmIyNWY5Y2JkYzNiY2QyN2ZkMjQ1YTFjNDExNTk0YmMiOiIiOiJhNjUyNmY4YzgwM2I2OWRkNWY1OWZlY2ExY2ZmNzhlMiI6IiI6IiI6MTA0OiJjN2UxOWUwOGEwOWE5YzFmYTY5ODIwMjg5MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIzMjM1NDIyODk3YjY0NTk3OThhOTdkZGQ3MDlkYjNkIjoiIjoiOTY2NzllOTM2MmY5MTkyMTdkNWU2NDA2ODk2OWQ5NTgiOiIiOiIiOjEwNDoiNDRlZDQxYmRhMGViMDk1OGQ0MDdiN2I3ODciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmNjViYzc5NTQzNGVmYmEzYzUzOTllZDNjOTlmZjA0NSI6IiI6IjJlNzI3YzE5YTg5Y2JhNmY5YzA0ZDk5MDI0NWZjZWVkIjoiIjoiIjoxMDQ6IjY0ODMwZWQ3Zjc3MmU4OTg4MDBmYzlhZTJhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNmM2NmQ1MGYyZjc2YzRlOTExYjNiMTdmY2RjYmExZCI6IiI6Ijc3YjQyMTU4YTRlZjVkYzMzMDM5ZDMzNjMxYmIwMTYxIjoiIjoiIjo5NjoiMWJjZTNiYTMzZjczZTc1MGFiMjg0ZDc4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxMzU1OGRiOWI3NDQxYzU4NWQzODFmZmMxNmIzMjUxNyI6IiI6ImFkZGY1ZGJlMDk3NWM1YWQzMjFlMTRkZDRiZGMyYWQyIjoiIjoiIjo5NjoiZjQxM2MzYmYxMjVjZTUzMTdjZDFjNmJkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NDYzODYyOGIxMzYxYzI5NTRjZTBhYzU0NTZhMTE1NSI6IiI6ImM1ODYxNTA3Yzg3OWU2ODY0ZDdjYjFmNzdjYzU1Y2M2IjoiIjoiIjo5NjoiOGE1MTRmZGM3ODM1NzExZTRmNDU4MTk5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3ODE1ZDIyYzVjMDgxZGY5YWMyMTE0YWFhMmMwY2JmOSI6IiI6IjgyMmY4M2NkOWYyNDlkZmMyMDRiNTk1N2YwYjBkZWFiIjoiIjoiIjo2NDoiYWExZjY5ZjVkM2JiNzllNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWE4NDdhNDc4MjNjYjljMjk4ZTQxMDdjNmFhZmY5NWMiOiIiOiIzOTM0OGY4MGM2YmM0ODlmOTMxNWJlN2E2ZmNiYjk2ZiI6IiI6IiI6NjQ6ImMzYjNmMzFlNTZjZjQ4OTUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE2ZTY3ZWEyNDhlYTZkYjA4YWYxZDgxMGNiMTA1NzRlIjoiIjoiNTAzODZlMjA3NWViMTVjYTNmM2U2ZGI2YmZmMDE5NjkiOiIiOiIiOjY0OiIzZDRmM2I4NTI2YTM3NmFlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNmE4MzAxNjM2YmE5M2U3ZjU2MzA5MTQzZjE4NDI0MSI6IiI6ImM3ZTMyYjFkMzEyOTcxYmRjMzQ0YWVmYWY0NTQ2MWJjIjoiIjoiIjozMjoiMjVmMWI0MWMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjEzMGEwN2M0NjcwNjcxNDhkYTI3OTBmOTBkNzNmZjMyIjoiIjoiODAwYjgxYzlkMmZmM2E4ZTE1NjkwZmZiNDExN2UyMTEiOiIiOiIiOjMyOiJhYmNjOGQ3MSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2NmYWFlNTljMzE5NmI4YzQwMzcxNjQyNGVhNjAxZjUiOiIiOiJmOWIwNTlkZTBlZmE0ZTNmMzY0NzYzZDYzZDA5ODQxMCI6IiI6IiI6MzI6Ijg5MzM0NDRmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjViZWVmYmRkMjMzNjBmMmRkMWU2ZTNjMWRkYmZlYmYiOiIiOiI4MWE4NDk0Zjg1YmU2MzVkNzFlNTY2Mzc4OTE2MjQ5NCI6ImY5ZWJmMjQyYjYxNmE0MmUyMDU3ZWRlM2I1NmI0YzI3MzQ5ZmVkMTQ4ODE3YTcxMDY1NGRlNzVkMWNmYzVmNjMwNDcwOWI0NmVmMWUyY2NiNDJmODc3YzUwZjQ4NGY4YThjNmIwYTI1Y2ZmNjFkOTUzN2MzZmQwYzY5YmJjNmVmMjFjYmVjODk4NmNiYzliNmU4Nzk2M2I4ZDlkYjkxYjcxMzRhZmU2OWQzZDlkZWMzYTc2YjZjNjQ1ZjljNTUyODk2OGYyNzM5NmNjOWU5ODlkNTg5MzY5YzkwYmJmZWZiMjQ5ZTNmYTQxNjQ1MWJjM2Q2NTkyY2M1ZmVlZmJkNzYiOiIiOjEyODoiMTU5YTY0MjE4NWUwNzU2ZDQ2ZjFkYjU3YWY5NzVmYTMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNDY1YWE4ZmU1ZDUzNGM5MTJlNjU0ZjVhYWVkNTg1NyI6IiI6IjVjMTU1ZjcxOTRiMGQwYTE3YjlhMGMyMzRkNjA5NDQzIjoiYTNmOGQ3MDViMjMzYjU3NDM5OWY3MjM1MGIyNTZjYjQ4OTNlMTMwNjg4OTEzY2UzZGVmOGU0NDY4NzY4OGMwMzUyZmY5ODdhZWEzNWRjNTNiYzk1Y2RiOWNkY2M2ZTZlYjI4MDI2NWQ5YTFhZjM4ZDUyNjM5MmFiNjNjOWIwNDNjMWIxYjQzZTE4MzIxZTg0ZWI3ZTA4ODg0ZjI0NjNjMzJiNTVlYjU4NTlmYjEwOTE4NTk1YTcyNGE2MWNmZGY5MzVlNGY5NmQwNzIxNjEyNzIwZDQ2YTk0NjQ4N2I1MjU3NzlmNmNlMGFiZjA0ZmM1NjA4MzUxMTE5Yjc0MjdkMiI6IiI6MTI4OiI5NTk1YTZkODc5Y2Q3YTk0OWZhMDhlOTVkMmI3NmM2OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc0NGI5ZTE2OTJkODk3NGQ3ZGVjMzQ5ZWJkN2ZlMWU4IjoiIjoiNjJhZDRiMDlmZDU1NGUwZDZiMzkzNzgzOWU2OTNlNWIiOiI2Zjk5NzhmNzA3OGYwMDMwYzQ1Y2FmNDkxMjhmZjcyOTQzYTIwOGEyMzk4ZDA4ZDEzMjIzOWYzYWI1YzE4NDcwOGU0MjIyZWM5Y2NkZTY5ZGM4NmQxNzAwYzJmZTBhZjkzOTQ1NGJiYjM5NjIzMjcxNTg1NTc4NjBiNmZhNDkyYWI4MjAxZGYyNjJhNjIwOTcwNWM3ZTMxMjk0MTliY2U4YjgyNzMyMDg5M2MxNTc5Y2EwNWIzMmM4MWIzOTYzYjg0OTQyOGY3MWZlNzUyOGU3MTA1NTdhMjcyMTE3MTk5MTYzYTM1ZWJmYmFiYTc4Zjc2NzZmN2U1NjZiMTYzMTFhIjoiIjoxMjg6IjYzNGY2ZmU5NjI1YmU4YjFhZjlmNDZiY2MwZmEzMTYyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDk3YzA1OTUzNTAzN2M2YjM1OGRiYjVhNjhiNWYyYjEiOiIiOiIwMGNhZWRmYTA3OGMyN2UzZDk1NTFlM2ZiOGQ5OGQ3NyI6IjZjNGJkZTExMTI5YTk1OWZjZDZhNDgyY2IxOWY1ZjFjNTgyYzA0MmIzMTRmNzk5N2IwNDUwMjQyZjllNjY5ZGMxY2JiMGEzYjdhMTg1YmY4YjAzNTI2N2U2ZjAzMjA2MjY4MDA4ZTJiOTc4NjRkNDRkNmE5YzZiMWI0YjA2N2Q2MjNjNGI0ZTljNjA4MDQyZWE5MTIwYWVkM2JlZTgwODg2MzUyNjgzODkxNDk2ZDg5ODBlNDBiODQ4MGM5OGMyZmUwOGY5NDVhYTFlZjYwMDdjNjUyMjAzMTlkZDg2NzgxODRhYjU0ZTgxMDgzYjc0NmVjNjQ0MWU4N2E1NjhlMGMiOiIiOjEyMDoiNTA3NWVmNDVjNjMyNjcyNjI2NDcwM2Y3MmJhZGRlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDI1ZGI1ZWNhNDZjMTY0OTAyOTQ0MjNjYTBjMzU2NjAiOiIiOiI2ZjM3ZjE1ZDZjN2VhODE2Mjc4YWI5NzdjMjlmYTQ1ZSI6ImJkNzZmZDQzMWNlYTcyYTI4OGU1ZDcyODljNjUxYzkzYjVmNDI5YTU0Zjg1MjQ5MDIxZDZiNTk1ZWI5Y2UyNmUxODkxNGEzODFhNmIwMjk5YWNjMzcyNTQzMWIzNTI2NzBmMjA2YjczMWJlNzE4YTU5OGVjMTIzZGNlMGEyYzVhYzBhYTQ2NDFiMDkyZTcwNGRhOWY5NjdiOTA5Y2E1NWMyNzIyMjk4MzY1YTUwZGNiNWI1ZWMwM2ExZDBjYmI2N2I4ZGUxZThiMDZlNzI0YWY5MTEzN2UwZDk4ZTdkYzFlODI1Mzg4N2RhNDUzY2RjYmQyZWNhMDNkZWFjYWFiYjgiOiIiOjEyMDoiMDA1MTA4NTFlOTY4MjIxM2Q0MTI0ZDU1MTdlYmFmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjNjNjI1OGE3MjZhZmY5NGE3YmNjNDE2NDZjNjgxNTciOiIiOiI3ZjViMzMxNWFmZTUxNjdhN2U5MDYxYWI4YjAwNTU4OCI6IjBlZjMzODQ4NjJjN2UwMGMyOTEyZTdmZGU5MTM0NWRjMzEzNGI1NDQ4ZTY4MzhmNDExMzViYTkxOTljMDNhN2YyMDg4ODdlNDY3NTYzYjM5YTZjMTMxNjU0MGMxNDAxZThmZjE0ODM4NmM1MGZjZjE1NzI0YTY1ZDMyMTBiMTc4MzJkNjNjZGNlNzZiZDJiNDU4MzQ4MzMyYjBiNTQyMTIyYTU3ZTM4MTQ3NWE1OTQ0MGYyODBkYjZlMWY0YjhkMGJhYmZkNDdlM2RiMTFhOWVmODljYmE1ZjMzNGYwZThlNzJiZTMwYWZiMmIxZWYyZGY4ZWI3ZjhkM2RhMDMzYzQiOiIiOjEyMDoiMTgwNDg5MDM5Y2NmNGE4NmM1ZjYzNDlmYzIyMzViIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzNjZDBhMWUyYjZlMTJmYmFhN2NiYWNlNzdkNTExOWMiOiIiOiJkODk3NjgxNzY0YmNjM2I2MmMyNmI0YWFmNDA3Y2VmYSI6IjhjNzczZTE0YTkwNmM3ZGVhZTM2MmQxYmYzZDdlNTRjNmJlNGM3NGM2OTFiN2YyZDI0ODY5M2IyNjE5MjE5ZmJhNmViNWJjNDVmNzdhZjFjZjdjMDVkM2RkNDYzMTU4Zjg4NGZlODIyOTBkMTQ1MTM1ODg5ZmQ4NTFiODZlZTI4MmFhMjBiYmRmNmFmNzhjN2Y5ZGI2MTI4YjhiOTllN2Y5YjI3MGZkMjIyZWZhMThmN2FjYTY5MzJhMTAyNGVmYjcyMTEzZTgxMmIzZjlkMmQ0Y2NjN2M4NWY1ODk4ZGRhY2NjYmYxYjQ0MWNkNzQwOTc3NDBkZDkyMmI1N2JhZGUiOiIiOjExMjoiZDg4MTFhODk5MDE5MWYxZTViZDE1YmU4NDk5NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImMxZGZkZGFmZTA3NmQwY2VlYmIwZjM3YmIyNWJjMGIxIjoiIjoiMjljNTZkYjEwY2VhODAyYzE5ZmI2MjMwMjI3YWIyYmYiOiIyODdiNzNjZGM2MmNlMDU4Y2RjZWZmOGU5YWY3YWZjMzIxNzE2ZjY5ZGE5ZWVmNjBjMmRlOTM2MzBiYTdkMGVkMGE5ZDMwM2NkMTU1MjFhMjY0NzE1OWI4NDc4NTkzZjNkZDNmNWI3YzUyMDgxZTUxNTRlNTVjY2JmZjM3MWQ3ZTVkZmMyZDA1ZTE0ZDY2NmEwMWVjMmNjNjAyOGFhY2FkZmQ3OGRmYzczYmY2MzlmYzRkZmEwYTBjNDY0MTU5MDJiYmRhMjQ0MzYyMGZhNWUwY2U0ZmNjZjFiODU5MWUzYTU0OGY5NTc1NTEwMmE4NDM4MzAwNzUzZWE1ZjYxYjlmIjoiIjoxMTI6IjMwOWZlZGFkMWYzYjgxZTUxZDY5ZTQxNjJlNmYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyYzQwODdjY2QyOGNlZGExNDdkMmZjZmMxODU3OWIxZSI6IiI6IjljYmRkNjdjNzlhYjQ2YmNiY2ZhOTZmYTJjM2Q3ZTg3IjoiMzUwODhkMThkZmYwYTlkMzkyOWNlMDg3NjY4YWFlMWQzNjRiMzdhOTcxMDJmM2Y0M2UxMTk1MGU2ZWM4Mjk2ZDBjOTliMDBjZDFjNWRmZjUzZDNhMzg0NzVlN2RhN2I5ZWU0Y2UwYzYzODhhOTVkM2Y4YjAzNjQxNGU0Yjc5Y2QwMmI1NDY4Y2JiMjc3ZjkzMGU3YzkyNDMyYTYwOWRiMWVmZmU2NWY2MGYxMTc0YjU4ZjcxM2UxOTk0OTFmOWUwYzI5YmExZjJlNDMzMDY3NzVkMThjMTEzNjI3NGFmNjE0ODhhMmY5MzJlOTVlY2VhZGZlM2ZlNGI4NTRmZTg5OSI6IiI6MTEyOiJiN2U4MzIwN2ViMzEzYjNjZWIyMzYwYmM4ZDRmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmI2NjU4NGM4YjE4ZjQ0YzExZjNiZDcxODBiOWIxMWQiOiIiOiIzOWM4MmFlZTAzY2UwODYyZmY5OWY4ODEyY2RiZGNmMCI6IjQ1ZWM4NThlMGE1YzZkODExNDRiYTg5M2UwMDAyODE4YTcwZTlhMTkwMDJhNTQ3MTk5MzA3NzI0MWIzZmNmYjRmZDk4NGYyNDUwODAzMjkzODgyZDFjN2VjYjY1NGU2MTE1NzhmZTdkMjU4ZjlhMmNhM2I1ZjBjMGYwZDBlYzQ4MjhiZGViOTI5OTkxNGZmMmFjNGNjOTk3Y2Y1NGZhOTA4YWZkYjNlYWU5ZjkxZDY3YzQ2MzdlMWY5ZWIxZWFlMmIzZjQ4MmRkZDU0Njc2NjhiYzM2OGI5NmJiYmZjMzNiOWFlMjY1OGU0Y2E0M2ZjZjRiNjZiYTJhMDc5ZDY1ZjEiOiIiOjEwNDoiMjQzMzJmZDM1YTgzYjFkZmI3NTk2OTgxOWIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YjJhMjMwYzg5NzhkNGUzOGZhNTA5NmRkYzE5ZDZmNSI6IiI6ImNkMjVlNzQ0YTc4YWY4NThlODI1ZTFmZDA3MDMyNGVlIjoiNjI4YmFhYzMzNjg2MjU3M2NlZTE1OGNkMzkzNWMzNGRmMzA1NWRhZGM5YzE2OTVlOWVhMTg3MjRmNjQ1N2YwZDE4MzNhYWIzMGI4NWE5OWUwNzkzZTU2MDAwZGU1ZDZkNWNiMjMyN2E0Y2M4YmVjNDBjZDE5ODQ1OWU3YjkzNjE3NzEzZTYzYmJkMTUzODFhMDY2YmM0NGE2OWM5YWQzZGZiMTk4NGY4YjMzYTk0MjllZGEzMDY4ZDNhYzVmYmJhYWVlMmI5NTJhNDg2ZTU4ZDY3NGZmY2E2NDFkOWVjMWQxMDI2MDBhZjExNjQxZmQ1ZmZmNzI1MjA0ZTZjMzRhOCI6IiI6MTA0OiI2OGQ0OWQ0OTVmZjA5MmNhOGU1YTJjMTZjYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjczYWE1NzZlMWRmYWQyYzk5M2FmY2MwODhiZDhkNjJiIjoiIjoiNzEyZTY2NWEwYTgzZThlY2FkOTdlOTJhZmViMzU3MDYiOiIzMTRlNWZlZTc3NmU5ZDVkMmExZmI2NGNlYjc4ZTJjOWE1NjBhMzQ3MjRlMzBkYTg2MGI1NTg4ZmU2M2Q1MDgzOGNiNDgwZmY4YWM2MWQ3OTU4YjQ3MGIxYmZkNGM4NDc5OWFmNmNiNzRjNGEzMzFiMTk4MjA0YTI1MWU3MzFmN2Q3ODViOTY2ZGE1OTViNzQ1ZDAxNzY5NjIzNDkyYzE4YjlkZDhiZDNjNzUyNDllZmZkMjAzMjY1OGM3MTU5MDZhNzFkYmJlZDg0NzAyN2VhNzVkNjQ3Zjk4MDMyOTZhNDE5MDZlMDkxNTI1MDg1NDU5N2ExNjMwMzVhOGQzZjQ1IjoiIjoxMDQ6ImE0MWY1YzljN2RlMjY5NGM3NTg1NjQ2MGQ0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4M2Y3NjMxYzRkNGM0NjZjOTI0NmNiYzQ4ZTJkZGU2ZiI6IiI6ImY1ZDZjOGMyNTJjYjY4N2E5MzFjMzhmNThmNzQ5NDNjIjoiMWYzNWU5NGEzNWQwZjQyNGJmNjkwYTE1MDM4MTI2YTQxNTAyNTkzNjEyZWZlNjMzM2NmOTRlYTA1NjVjYTZhY2RlZmFlOGQ3NGRhZTYyZGY5NWU5MjYxYzY1OTZjMzM5NzIyMGUwNDRjNWIwOGNmMzljY2NiMjczMTVkOWI3OTVkYTMyMTIwNDkxMDI3NGE5MzQzNmJjMDU3M2ZkYmEwNGFlNmJiMTRjNmNhOTU1Y2Y4YjllMTkzYTEyZTA1Nzk2ZDdmNGIzOTc1MDc2MTRkYWJjNDU3ZjFjZDNjZTE5ZTQzOWI2ZTYyNzAzZjIxODkzNzI5MzhiMjliN2E1NDJiOSI6IiI6OTY6ImJiODVkYmQ4NThhYjdiNzUyZGE3ZTUzYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzg0ZTAyM2IyZDRjOTc4MTUxZDA1ZWU3MTUzM2M1NmMiOiIiOiJmMTZkMDQxYjlmMGY0NTRkYjk5ODVjODU1OGVmOGE2MSI6IjkxZjZlMTA4YzI5NDY0MGM3YmM2NWQxMDJkM2QyNWE3YmZiYmUxMTRhY2VjOWI0OTU2MzY2ODlhZmQ2NWZmZjc5NDgzNzk0NjYwMmVmMDRkZTdkNDMwNGE4MTgwOWUwZjdkZGM0NWM0NzZjMjlmZDUyODZmY2Y0ZGQxYmE3NmVkM2NlODhhYmRiNTFjZDIxZTdhYWVlY2IxMzIzOGFjMDMxZGE4N2FiOTZiMmExMzE1NzI3OGJmNjY5ZDBlZmFlMjg4NTJlYzM1ODVkNTIwZDU0NTAyODgxMzIyZjc5NzdkMDM5NTRlMTdlN2MwYzBkOGY3NjJlMzRmNTljYTE0MWUiOiIiOjk2OiI1OTY5OWM2MzlkNjdiZTZhNmQ3Yzk3ODkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQzYTJlYzY2ZTRhNzJjYjM1NDBlODdmNGU2N2M3ZTU4IjoiIjoiMDdhOWNmOWY0NGIwN2UzMDY3ZDYwZTI3NjMyMmU5ZmIiOiJkN2U3MjJiODJlODYwN2E2NGZiZmVlZmM3ODg3MDA5Mjk4ZjA2YTYzN2ZlOTM3Mjc3ZTNhNzZlOGFkZGFlZWI0NjBiYTA3NDM5MTJjMDdiNTAwYjRiNTFlOWZlYzJiN2VkZGY2OTFkMTU1YmFmNjg5Zjc1OTY4MTYwYzE5YTgzMzBlMjU0MjIwMTQyYWU4NDNiZjA2ODdhYWJlYjc0YWI2MDcyMjdiMGE3NTM5ZWMzY2ZlYTcyYTVjMzVmMjM2NjIzYWY3OGJlZmZhZWU2ZTdiMWFkYzI4OTU3MzJmZmVkYjNmODUyMDcxMGYwNGViOWMyY2U5YjJjYWUyMTVlZDVjIjoiIjo5NjoiZjI5YWVjNzIzNjhiZmNmYTlhZTgxNWZkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4M2YzODJhOTAxNDY1NDRlZjQ4NzFiZGU4OTFhZWQyMiI6IiI6ImM2ZjY2NGY1Y2NmZDFhYWVmYjYwZjdmYTNiNjQyMzAyIjoiNjU2YTJmMjIxYTEzMzlkOGY1YzI2MzkzYTA4ZmEzMTg1OWY2MjZlZWM5YTY4YWZiNmVlMzBlNWI2ODU5ZDFjYmI1ZWQ3ZGVhNmNiYzRhNWQ1MzdkNzAyMjdkMDYwODE4NWRmNzFhMDI1MmZhMzEzYmU0ZDgwNDU2N2MxNjJiNzQzODE0ZjhiODMwNjE1NTkzMWZkZWNmMTM4MjJhNTI0ODY4Yjk5YTI3ZmQyZmY4Zjk4YzE2ZWRjY2Q2NDUyMGUyZGNlMWFkNjQ1ZmQ1MjU1YzdjNDM2ZDliODc2ZjU5MmVmNDY4Mzk3YjAwODU3YmE5NDhlZGYyMTIxNWQ2M2Q5OSI6IiI6NjQ6IjA5ZGY3OWRkOGI0NzZmNjkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY0MzM0ZjEwYTYyYzI2ZmVmNzlkOTAyNGQ0YmE3YzVmIjoiIjoiN2I4NTI1MTU1NGQ0ZjBmZjg5OTgwY2YzNTY4YzVjYWEiOiJkYWIyODkyMjYyYTE4MzJhNDczY2QzNDgxYWNiZDNkMTgyMGYxNDM2MWMyNzU1MTRlYzY5M2I0MGYyMTcwZWE1ZmY4MmM0ZjdlOTVhN2M3ODNlYTUyYzQzYTBhMzk5YzM3YjMxMzE5YTEyMmZkMWE3MjJlNjYzMWVmYTMzZjhiZmI2ZGMxOTM5ODY1ODBmMDM0NGQyODg0MmEzYTRhNWNhNjg4MDU1MjU1N2YzOTE1YTY1NTAxZjZlZTBjMWI2OGE0YzkwNDBmMGZhYzM4MWNiY2NiNmE2ZTliY2EyM2I5OWYyZWYxYWJiY2E3MWM2OWFhMjdhZjJkYjE3NmJmMzdkIjoiIjo2NDoiM2U4NDA2OTAwYTRjMjhiYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWM5OGNhNDk3MWMzYTYzMzNjMThiODhhZGRmMTMzNjgiOiIiOiI3ZjYxN2YwOGU4MjZhM2M2MTg4MmMzZTAwYzIwM2Q0YiI6ImFiMTUzMWZjZTBmMjc5ZDIxMDkxYzMzMzRiZDIwYWZhNTVjNzE1NWJmYzI3NTMzMGVkNDVmOTFjZmM5NTM3NzFjYmRlMjU4MmY0YmUyNzk5MThhYzhiOWFlMDdjYjNiMmVmZDE0MjkyZTA5NDg5MWQ0ODQxYmUzMjk2NzhhZDU4ZDcxNGZjOGNlNGJmZmU1MWY1MzlmNDI0MGMxNGJhODgzYjk1Y2RjMzJjZjRhOWZkNmJhNGZmZWFmYTBkNjcxODk4OWM0NjQ4M2M5NmNmY2EzZmU5MTAwMGY5ZjkyM2Q3Zjk2NzI1ZTk2NmRlMDY4YjVkYTY1NTQ2ZmUzOGY3MGUiOiIiOjY0OiI1OGNjNzU2ZDNiZjliNmY5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNDdkM2FiZWI4MDdiZGU5NTllNjhiNDBhMzc1MDA0NSI6IiI6IjNmNTM5MGNkNzkyMWZjYjQyYzU5ZjBkYjA1YThhNjJmIjoiODFhYmYzNzVkYTcxNTdhMWE1NjA2OGQwOTE4MDM3ZmVjYjcyOTZkOWIxNzcxYzU0YWU2MDMwYWJkYTRiOWQ3NmZlZmY4MThkZTgxNzQ3OTgwYjJjMWIwMDVlMzZiM2JlMzZhZmJmMTA5MmVkZWY2ZmQ4NzVkMjkwM2Q3MzYxMmFkZGYyMDZhNmFlNjU4ODY0MjEwNTljNzA5OTBhNmVlMzMxOTdmOTJiZWQ2NDk5MDFmZWQ2MmZkZDIwYzMwZDgxYmFmNjA5MGY1MGQ5ZjU5MjkwNTI4ZTU4YTBiNzQxMmFjZTBhMjkzMzY5ZjJiNGM4ZDcyYzJmYjBlMWM0MzJmNSI6IiI6MzI6IjM3YmI0ODU3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MjJiZThjZDNjNzU3ZGUwMGZiYjdhYjQ1NjNjZTE0ZiI6IiI6IjE2YzUzYTg0M2IxNTQ5NzE2ZDdjMDZiMTQxODYxODYyIjoiYTE1ZDEwMTU4MGQ1NDlmMjQwMWJmMGYzNmJlMGY4MzcyNDg3NTIwNWM5MTA5ZDJkNjlkMjYwOWNiZjY3NTA0YjkxOGYwODU5MzAzMTkyYjQwNzVmOTUyNDU0ZjNlNzE1MmY4OThmOTk3YjM2YWZjMDM1NjcxMmZjMDhkYjMzNDMwNTRiMjBlODhhZDEyNzRlMDE5YmY4ZmNjM2M5MjFkM2JjOGY5YzFkMWQyNGFkYzYxZjYwMzNhODNlZjQ2YTg0NzYyMzA0ZjE5MDM1NTM3NDhiMTNiMTY0N2M5NmViODcwMmViYjQxY2NlYTRkOWNmZWJjYjE3N2M0NTMyNzdmMiI6IiI6MzI6IjM1Nzc4NTk2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4YTY2MGFhMDE5MWY5ODE2MjYxMzg3ZDVhZWIyNjJmNiI6IiI6ImM3MjBjYjMxZTg0MTQ4MGRhNWJhNjU2ZTliOTNmMDY2IjoiZDk3OWFmZmUzOTViZDA0OGRiMjZkMjY5MDhhMWMyYTQzNTkwNTI5OTA4NmNjNTViYjY1ZWY3ODJmNWFlZDk5YzQxNzQzYzNhZTI1MmVhMDg3ZjU0NTNiZGM2MDVhYmQ3ODRiMzM3YjYwOTYwOTQ2MzU4ZGEyMjE4YjA3NjgyNjY1OWExZmFmYTU5MTI0YTAwYTM0MjRmY2UwZDAwYzM4ZWVhODVjZmIzZDFlMDFiY2IwOWQ5ODcwZDViM2ZlNzI4ZjM5NGUwZTUxMmY1YWE4NDlkMDU1MGQ0NWE3Y2MzODRmMWU0YzZiMmUxMzhlZmJjOGY1ODZiNWI1ZWQwOTIxMiI6IiI6MzI6ImNmNzk0NGIxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2UwZjhjZmU5ZDY0YzRmNGMwNDVkMTFiOTdjMmQ5MTgiOiJkZmZmMjUwZDM4MGYzNjM4ODA5NjNiNDJkNjkxM2MxYmExMWU4ZWRmN2M0YWI4Yjc2ZDc5Y2NiYWFjNjI4ZjU0OGVlNTQyZjQ4NzI4YTlhMjYyMGEwZDY5MzM5YzgyOTFlOGQzOTg0NDBkNzQwZTMxMDkwOGNkZWU3YzI3M2NjOTEyNzVjZTcyNzFiYTEyZjY5MjM3OTk4YjA3Yjc4OWIzOTkzYWFhYzhkYzRlYzE5MTQ0MzJhMzBmNTE3MmY3OWVhMDUzOWJkMWY3MGIzNmQ0MzdlNTE3MGJjNjMwMzlhNTI4MDgxNmMwNWUxZTQxNzYwYjU4ZTM1Njk2Y2ViZDU1IjoiYWQ0YzM2MjdhNDk0ZmM2MjgzMTZkYzAzZmFmODFkYjgiOiIiOiIwZGU3M2Q5NzAyZDkzNTdjOWU4NjE5Yjc5NDRlNDA3MzJhYzJmNGRkM2YxYjQyZDhkN2YzNmFjYjFmMTQ5Nzk5MGQwZWMzZDYyNjA4MmNkYjEzODRlYzcyYTRjMWQ5ODk1NWJhMmEzYWFlNmQ4MWIyNGU5Y2U1MzNlYjVlZGU3MjEwYWU0YTA2ZDQzZjc1MDEzOGI4OTE0ZDc1NGQ0M2JjZTQxNmZlZTc5OWNjNGRkMDM5NDlhY2VkYzM0ZGVmN2Q2YmRlNmJhNDFhNGNmMDNkMjA5Njg5YTNhZDE4MWYxYjZkY2Y3NmNhMjVjODdlYjFjNzQ1OWNjOWY5NWRkYzU3IjoxMjg6IjVmNmEzNjIwZTU5ZmU4OTc3Mjg2ZjUwMmQwZGE3NTE3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODEzNzFhY2Q1NTUzZmRhZGM2YWY5NmZkZWVlNGM2NGQiOiI5NDA4MDZmZDVkZGNhYjk5MzdiNGJhODc1ZTQ2YmI0YjdlOTY4OGQ2MTZkMTdmZDI0NjQ2ZjFlZjE0NTc4MTlmNTU4ODdmNTNiZDcwMDM5YmI4M2I0ZDM0NmFhYmU4MDUyODhhYjdhNTc1Njg3NGJkYzJiM2Q0ODk0MjE3ZDNhMDM2ZGE1ZTllMTYyZmEyZDk4MTljZWI1NjFlY2Y4MTdlZmM5NDkzYjlhNjA3OTZmNmRjNWU3MTdhYzk5YmM0YmEyOThlZWU0ZjNjZDU2YmJjMDdkZGU5NzBkNGYwN2JiZmExZjVmZTE4YzI5YTM5MjdhYmUxMTM2OTA5MWRmMjhmIjoiMzI2MjUwMWVkMjMwYmM0ZjVhMTkwYWIwNTBlMWJjZWUiOiIiOiJmZmViMTkwN2JkYmZlYTg3Nzg5MGE2ZTk3MmE1MzNhZTY2MWE5MDNhMjU3YjNiOTEyYzdjNzY4Y2M5ODhlMDVhZmQ3MWE5ZTYxMTdkOTBkMWUxYjU0ZjU1ZGU5YjEwY2JjZTdhMTA5NDUyNTY3NDgzY2M4ZDZhNjhiOWU1NmRhMTA4MDI2MzA1OTFmZGQ4ZDU1ZjllMTcyZjBmNThhN2UwYzU2YTczYTFhZTNjMzA2MmYwOTk3YjM2NGViMDg4NWQ0OGUwMzliMmJhMWJkMTRkYmI5Yzc0YTQxY2JkNGI1MjU2NGU0NzBkMWE4MDM4ZDE1MjA3YTc2NTBiZDNmMWQ2IjoxMjg6IjIyN2Q0MjJmODc5N2I1OGFhNmExODk2NThiNzcwZGE5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWY1Mjk1ZTlhZTc0NzI5ZTIyMmRmNmRhYjI1MTE1OGQiOiI1OTM3Mjg0ODQzMmY4NmY1NzQwNTAwMzkxZDJlNWQ1ZmJlMWY4MGVhODc2YTBlY2I5YTViMjk4ZDllYTdjZGMyODYyMGFlYjJmZGEwMTUzNDVhZTQ3NmYyNjUzNTFiMmM2YjZmY2Q2NmJjOGFhZTRkYzhhOTVjMTM1MGNkYTIwNGRhM2QyZDJmYzVlNmUxNDJkYzQ0ODI5NmQ1ZGYwY2MzNDlkMWViYTJmYTk4ZDJmNDY4NjYyNjE2Mjc0YTE0N2ZiZTA3OTI3NDQwYWZhMzk2N2FjMDlhMDNhOGRlMGIwM2YzMDM2YmRlNWUyNzJlM2M0YzVmZjE2OWRkNzMwMjM4IjoiMTk0ZDA4ZmNjM2MwOGFiOTZmYTcyNGMzODEyNzRkM2YiOiIiOiJmZGNlZWZmZGM4MzkwYmRlNmI5MTA1NDRkYjYxZGIyZjM0NWViYTA2NjRmNzhmNjVkOTRiOTBlM2UyYTUyNTFiZTM3NGIzYzVkODgxNDYwY2ZmZjM1NDlhMDFmODRlYjlkNTQwODczMDZhMjBmNTE1NmNkNTU1ZTQ2YmQyMTczMzg2YzkwZWE0Nzk4MzMyMGZjYmYyNGUwOWEwNWYyZWM0YjI1NzcyODdkMDVlMDUwYjU1YjMwMDJiNzUzZGU0OWFiZWY4OTVlZTk3MDE1ODEwYzA2ZDA5MjEyYjBjMDllNDkxMGM2NGFjMzk4MTc5NWExZTM2MDE5Nzc0MDM2MGZkIjoxMjg6ImU5NDYwM2RiZDhhZjk5YWIxZTE0YzYwMmEzOGEwMzI4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjZkYjAzNWYyZGRkOWY1NjcyYzZmNmFmMTU2ODM4ZDciOiI5MmMzMTU5MzY4NDc2NDk3NTZiMGIxYmI0YTM0NTNlNmU2ZGE4NjZmODA4OGQ5NmRhNDQ0MTJkOWY0N2EyMmRkYTBjZDgxNzI4N2JhNDIxNjNiZTU5YTY5ZjczOTYzMDU5MTM5ZmIzYmE0NGJjNWViZmQ5NWI2NzQyNTQ2ZGZiNGZlOTU2MDhkY2E3MTkxMWQxMzQ3YmU2ODE3OWQ5OWM5ZWJmN2VlMWQ1NmIxNzE5NWY4Nzk0ZjNhNjU4ZDdjYWQyMzE3ZWQxZDRiYzI0NmNkNDUzMGUxNzE0N2U5ZWNkZjQxMDkxYTQxMWE5OGJiNjA0N2VlZThiNGYxZTRhOWVmIjoiMzY4NmQ0OWJiOGM3YmQxNTU0NmQ0NTNmZGYzMGUxZjMiOiIiOiIxYWM5OGU5Y2NmZTYzYTJmMTJhMDExZTUxNGY0NDZjNGMwZTIyZGQ5MzYxM2IxYjliOGY1NmQxNDhiZThhMjRlMzY4MmRmYzFjZGUyYjY5ZTcyZDIwMGI1MTZhOTllNzQ2NmRhZThjYzY3OGM2MTE3ZGMxNGIyMzY0Y2QyYjk1MmFlZDU5NzIyMDU2ZDdkYWU0Y2ZkYjdkOWM0ZjcxNmFlZjJhYTkxYTRmMTYxZDAxYzk4ZDkyZDk3NDI0N2JiOTcyZGUwNTU3ZTE3NTE3N2NlMzQzNjFiZTQwYzMwYWI5YWM0NjI0MDAxNmU1YWQzNTBjM2I3MjMyYzU5MjBlMDUxIjoxMjA6ImI3NDQzMTY4ODBiMGRmM2Q0ZjkwYzNmZmE0NDE0NCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ1YzYzNzU3MTk3YTEzMmNiYjMzMzUxZmQyZDgxYTQ2IjoiZTk3MGI2MmNlNWYwNmIxNWY4NDQ4YWEyYTA5NWMyYjNjOGFkZjUzNWUxMTBlN2YzNzQ0MTFlZDUxZmExOWY5YzQ5MjYwNDVmNzk2YjdjZDhhOTQyYjZhMTk4MTFiN2FhZTU5ZmNlMzdlNTBkNmNhNWE0YTU3YmZiMDQxYTViNTFjMWVlODJiNTRkMDNiZTIyZDlkYzJiYjlhMmU3MDg1MDNiODVlMjQ3OWIwNDI1YTAzM2FlODI1YjRmMjMyY2EzNzNlMjgwZTNjYzk3Y2YwZDc5Mzk3YTgxZmIzMGQzYjQxY2RhYTNlNzg4NDcwY2RlODY3MzRlMTBhNThiMWUzYSI6ImE2NjlhNGQyZjg0MWY5YTBiOWVkZTFmYjYxZmVlOTExIjoiIjoiNTIyYmE3MjIwZDBkNGJlYTdhYjljYTc0YWQ4ZmE5NmJhMzM3ZjdhYTc0OWNkMjYxODY0OTkwODFiYTMyNWRmNmQ2YjkwYTgxYmQxYzdhZGRhMGNkMWNhMDY1ODk0ZjE0YTA3NGVjMTNlZmYxMTdiMmEwMDA0MjAzOGFlYTU1ODUwMDU2YTYzYWRmMDRmNThmY2Q3MjY5MDg1ZjVhZDFlZjE3Y2U3YjZjNDA4MDQxMjdmMTQ3NDdhMmFkOTNlYzMxZmFkYTgzNjYzYWYwMjVhM2I5MGMyMGE0YWU0MTViMWM5NjAwOTRlNWZkNTdkYjBkOTNhODFlZGNjZTY0ZjcyZCI6MTIwOiI3YmZjZTNjOGU1MTNhODlhNWVlMTQ4MGRiOTQ0MWYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMzgwZDNiZjBkNTVhMWNkNTZiN2U3ODM1OWViNmM2NiI6ImMwZTk3N2U5MWMxYzUwZWU3OGQ0YTU2YzUyN2IyZDMxYTFhMTRmMjYxYWE3N2U1MmQ5MTBmOGYyMzBkZTQ5MDhiNWNjNjk0M2UyOGI4YzZlN2FjNjFlZWJlMjcwZGNmZGU0OGQxNDBlYzEzNzkyMzcxOTMyZTU0NWI2ZWY0YjUyZDFkZmRmNTRjNjBmZjg5MmI3NDA5NWEzZjRhMmI5MDAwYWNkMmNhYzA0NjY2YTIzMDUzNDNiOGMwOWY4OWRjYzBjMjViYmUyYTM5YjE0NjI0MTE4ZGYwMjU5NjJlZGVjM2RmYzU4ZDM2ZmNhYzUzMWIyOTFlYzQ1YjUxNTllMjIiOiJiYTMzMDBmM2EwMWUwN2RkZTE3MDgzNDNmMDEzMDRkNCI6IiI6Ijc1MmYwOWI1MTg2MTZhOTFhODAyY2YxODE1MzJjN2VjNjViNTRjNTljMWJhYjM4NjBmMGFkMTk5NzFhOWU1YmM4ODQzNTI0YzVmZmFjODI3MDY3YjQ2MmViYjMyOGUyZWZmNGRkOTMxNzI4ZGU4ODIwNTUxMjk5OTcyMDRlNzg3MTdiZWNkNjZlMWY2YzllOGEyNzNjNDI1MTg5NjM0MzYwNGFjMjg5ZWIxODgwMjA3YThlYTAxMjYyNmUxOGU2OWFkNzU3M2VmNzMwNzFiOGUyZmIyMmM3NWM3ZmM3YmYyMjM4MmQ1NWE1ZDcwOWMxNWU0ZThmZjE0ZTJiZjgxZTQiOjEyMDoiZmJmODgxOGFlZTVjNzFlYmZkMTliMGJjZDk2YTdhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDdjODA3Y2QxY2YxODEwNDBhNGUzYjFkOTQ2NTlkYjgiOiJjNGE1MmMxZjFmMGQzMmMyMWZiODVmYmEyMWQxYjM1OGIzMzJlZmEwNjZjNzg5M2M1NjZiMmU4NTllZmRkZTk5ZmM2N2JiNjE2N2NkYjA0ODVhOGVkNTNkZDEwNjhkOTBiYzk5MGYzNjBiMDQ0MDM5NzkxYmU2MDQ4YmEwZWU0Y2UxMDkwYzlmY2U2MDJhZjU5ZDY5MDY5ZjViZmY4YjYyMTlhYWFlZDVhOWIxYmZjOGM1YjcyNTBjNWE2Y2ZlODY1ODZmYTgwNjQxMjRkNTUxZGEzOGQ0MjlhMTc2OTZlYjFhN2EwMzQxYzM2M2YwMTBlYWZkMjY2ODNlZWNkZjgyIjoiOTk2M2EzZmIxNTZiZWFjZDZkZDg4YzE1ZTgzOTI5ZGYiOiIiOiJlNzg0YWIwMDZkZThhNTJkZTFkMDRiYzJjNjgwZDg0N2M1ZGVjZGQ3NzdjYjI0NzVhZDRhYjFkYzUyOTg4MmQ5ZTUxY2ZmNTQ1MWIxNGVhNWZmOWE5YmFiNWM1NDc0ZThhMzMxZDc5NTY0YWNkYjJhYzgxNTllMGY0NmU5MDE5YmY4MDY1MGM0ODFmZGFmMTY4MGNhZGNiOGM1ZGU5ZjkyNDc2MGIzNzZjZTU3MzZjYzQ5NzBjYjg3MTViNTk5OWY1Nzc0MzYyODNhNGMyMTQ2OTMwNjg0MGFmMzZkMWUwNjk2MTYxNTdkMWI5Y2U3NWRlM2FkYjEzZDIwMWNkZjFiIjoxMTI6IjUxZThjZTIzZjQxNWEzOWJlNTk5MWE3YTkyNWIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMGIwMzNkMTRmZTkwMmFhMDg5MmIwZTg3Zjk2NmM0MSI6IjFjYzc1MWQ4OTBjZDEwMjQ4NmQ4MWM2MThjMjNmYTMzNTA2N2FjMzI0ZWYxMWY3ZWRkYzkzNzg1M2RiNmUxNmQwZjczNzI3NzI1YTVhNWJkNTgwNzA1NDE2ZWNkOTdlMzY4NDY0ZWQwYWVhOTIzZmZiNzFjMjNjMzdmOWNmOWM4YmQ4MWNkYmRjM2QwYWMzNGE4NzVkYjMxNjdlYzFkNTE5MDA0ZDRmYTRiYmEwNDFhZjY3YWYxZWQzZDRlMDljMzJiM2U4ZTEwYWJkOTFmNDY4MzZjZWM3NGIxZjljNWIwNmMwNWYzYjE4Y2FhNzhlN2ZmMTg1ZGIyMTJiNTJjZTAiOiJhZDRkZWUxOGU2YzE5NDMzYWQ1MjAyMTE2NGY4YWZiNyI6IiI6ImEzMDA0NDU4MmRhY2Y1NzMzMmIwNDQwMmU5OTM4MzFkZjBhNGMxMzY0YTgzYzliY2U3MzUzOTc5ZmI0NDRjZDFiM2ZlNzQ3ZTJjOTMzNDU3ZmYyMWYzOWU5NDNhMzhhODU0NTdiZmU5OWRjMDlhZjg4NjczNGQ2ZTQyMThmYzY1MTM4MDU1YWQ4ZWI1ZDMwNDRmNGVlZDY1OGUzMTJiNjE2NTE5OWU2ODJmZmEyMjY1NThkYzRiNTE2ZjhkNTE5ZjE0OWJiNWE0MGQyYmI3ZDU5ZWNlOWU1ZmQwNTM1OGM4OWU2MzU3OTJhZDIwYzczYzE3NDcxOWY5YjI4YzczNTgiOjExMjoiNmExOGE0Zjg4MGNlOWU2Nzk2ZTEwODZlZDA1YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM0MDMwY2E4NGYxMzJiZmFiYWY2NjBlMDM2ZjU2Mzc3IjoiYThmZTk4ZTJiNDg4MGQxMmM5OWM5ZDUxOTNiMzUzN2IzZmJjNTE2NWNjMTMyNzM5NTE3NGQ5ODliZTU3NDFmODY3MzMyMjcxY2RjNTJkZGIyOTVkZGJlYmEzMzY5ODA3MzA1NGM2ZDI0MTZmYWZhZWIwYTc2YWFkODcwYTZmYjYwOTdhMjlmYmE5OWY4NThkNDk0MTg1NzJjOGU0ZGMwZDA3NGNhOGFmNzcyN2M3NzNjODYxNzQ5NWIxMTk1ZDZiMjY4N2EyZTM3ZmFkMTE2ZGQ3MjFiNjBiY2I1NDcxZDU0OGM2ZGFmZTNlY2RjZjBjOTYyZTQ2NTlhNjFmNGRmMyI6Ijk3NWRmOWM5MzJhNDZkNTRkNjc3YWY4YTZjOWM5Y2MzIjoiIjoiODZiMjBmZWNlYmM0Y2Y4OGE2YTM4MmQ2OTMxMTdjZDJhM2M5ZWFiNzQ3YmY1ZGY1ZjFkMzVlMzQxZDIwNGQ4ZmVhNjY5NGI5MjU1MmUzNDdkYTY3NmJjOGQzMzUzOTg0ZTk2NDcyYTUwOWY1MjA4Y2UxMDBhMmE5MjMyNDc4NDE3OTQ3Zjg1ZjEwOTkzYzlkNjkzOWM4MTM4YmQ2MTUxYWVmOGUyMDM4NTM2ZThiYTFiYTg0NDQyZTI3NTg2YzFiNjQyZjk1MDU0NTVjNzM4ZTlmZDJjMWIyNTI3ZDFlY2QzYTJmNmVkNmUzODY5MDAwZWY2ODQxN2VjOTlmZjdhMiI6MTEyOiIzNTE2OTA5MTI0YzBjMWY5YzMwNDUzYzkwMDUyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmUyMTBkZTM2M2YxNzBhN2NjYjFiOWNlYzhkMzQ3MzciOiI4OTg1M2ZhMDAyOTg1YTQ1NjUxZjJhN2RiMmI0NWI3ZTdhN2QzM2NlNmM0MzhlYzQ1MzNjN2ZhMjU3ZTFhMzg0MTMwMzY5YTY4MTg0YTgwN2ZkMGQ5MmE3MGQ5MWQ3ZGRjNTZlNWM1MTcyYzg3MjI1NzIzMGQ3YWViOTI5M2Q3ODViMWI4ODM1ZGNkZTc1Mzc5OGNhZmY0YWJjZDhiYmM1Mzc4Y2Q1MDVkY2Y5MDRhYTY5OTAyZTRmMzg2OTliZTk3MjA5OWFkZmZjODc3OGJkODQ0YTlhMDNlNmI1OGE3MjFhNzMzMjRkOTU2ZjIwZjJmZmQwMGQzNDkxZjcyZjQyIjoiMzlmZTIwYjA1MWJhMjEzMTlhNzQ1MzQ5ZDkwOGM0YmYiOiIiOiJhYzlkNzRmOGY0MDVmZDQ4MjI4N2E0YTdmYTM1OWNhY2EwOTVjMGYxYjQ2NzQ0ZjE5YzNjMTFlMTNiMGM2MDViOTg1N2M4Y2M1YTE3NTRiOTViY2M2NTg0MTZmNDYzYmY4NzY0ZjM3MzIwNTk0MTg4NTk0ODI1OTkxNmVhYWJkOTY0ZjJkNmMyZDc4NGY5MjhkYzVlZWZlMzMxZjZjMDRiNDg2MmQ0YzhlOTY2NTMwZGU2YmY1MzNhMTA4MThkZTg1MmRlM2FmN2Y1MjFiMTY3Y2I0ZWI3MTQxYmE4YWU4YTE3YmUxZWI3MTRmZDI2YTQ3NGJiYmJlODcwYTY1OWRjIjoxMDQ6IjdhMmRmYzg4YWQzNGQ4ODlmNWUzNDRlZTBlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmJiZmVkYTIzZWE2NDRmYjM3NjY2YjA1ZGM0N2Y1OTAiOiJhODVlYzRjMmMxNjBkZWRhN2UzZGUwYWU0NDllZWE2ZWQxZDI0ZTJjOGYzZDUxNTFmMmFjMGZkODY5ZjVhNzYzOTgxNzMzYjY4ZjQ2YzUxOTdkNzZjMjZjY2U3ZGRjOGFmYzZjZGY0NTM2ZDc3MWNmM2U5Y2VmMDA5OGUyNzBjNWUxZmY3MmNiMGFkN2Y4NGFiZjQ0YjcyNmUwZWFlMDUyZDBjMTU1M2FmYzY3YzcyODlhNDM4NTFhNGQwNGMyODU2Y2M0NmI0MDM5MzgwNDM2NDY1YTNiMTlkZWI1NmU0MWI4NTlhZWNhZjIyYjkwNTc4YTIzMjg4ZDVmN2Q5YjBlIjoiOWQxNTRmM2NjMmM1YjBiZGQ3N2U4NmUzNTEyMjA5NjAiOiIiOiJkYmU1NzVlYTA0YjU4NDI5ZTY4YzczM2Q5OWQ3ZmIzYTU3ZTU2MDRkNmZjM2JhZjE3ZTBjNmY5ODFkNzhjMDcwMTQ0NzAyODYxMzE2Zjg5MjAyMzUxNWYyMGI2OTdhOGYzYTQwZDgyMTE2MmRjOTI1NWQ0Nzc1ZTc1NzgyODVhY2YyY2NhNjdlOTAyYzA2MGY4MGVhYWUyOWI5YzAxMWI2YzExMDM3MTQwOWQ5MTQ3ODJlMWU0MTE1ZGM1OTQzOWEyODIzNTA3MzMwODUyZjEwNDM2YjEyMTUzOGYyMmEzYjYxOTA3NTYxMGYxZGE4N2I2MDM1MTM4ZDc4Yzc1YTc5IjoxMDQ6Ijg2OTg3NjNjMTIxYmYzYzIyNjJiYTg3YTQwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2UxNDA3ZjY2NmYyYWExNDJlZDRlZjUwZWIyYTRmNjQiOiI1ODVmYzFlODY4MDkyNDc4MjZmODc0MjQ3NDFmNmNlMmNlN2M3MjI4ZmI5NjA4MDNiZTY0M2FjZDI4MzMyYjIwMzY3MTVlMmI2MzlmZTNmOGRlN2U0M2U4OGJkOGU2NWE2ZTIyNTkzOTEzNjBhYWY1MzRhZTc1NjZjYmQyYjM5NjFjODc0ZDA4NjM2ZmNhMTE3ZDQxMjNiMzA2MzkzMWQ3YTE2MWQwMDIyMDAxNDMzOWFlOWY0NDdmMzFiOGEyZDdkNTQ2NmZiMWZmMjUwODM5N2I1ZmE3MWY5YjRjZDI3OGM1NDE0NDJhMDUyYWU0MzY3ODg5ZGVhZWQ0MDk1MTI3IjoiMTIyNWEyNjYyZDY2NTJlM2Q0ZTljNTU1NmJjNTRhZjQiOiIiOiI4YmMxM2NjMWNiNTJmYmQxNTM5MGNiNTY2M2NlMzExMWMzZmI5NDNmOGVkM2M0ZjA3YjdhZWI3MjM2NDlmY2NiOTA4OTU5OTllYzVkYmRiNjk3MTJkOGUzNGFlM2YzMjVmZWZhNDllY2M3YzA3NGRlOGJiMmVhMDFmYTA1NTRkN2FkYmY0OTQ5OGYyZjZlNzhhYTBjZDI0NjIwYmFiMGYxMWJmOWIyYzczYWQwZWZmNzgwZWI2YzAzZWU5YzQ1Mzg5NTJhZjc1NGM1NjZhYmE3YzcxN2QxZWU2YWMyZjVmZmUyMWRhYjlhZmQ2NDljZDY1MzEzZWU2ODY1OTZmZWYwIjoxMDQ6IjlhMWYxMTM3ZjllZDIxNzgxNTU1MTY1N2JmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ZWNlYTFkYTc2ZDZkZjkwZmQwZDQwNzdlZjYzMWIxNyI6ImQ4N2U5YTBjNmE5Nzk2ZDYwZWQ3ODkyNGY3YThjNDA4ZDViOWZhYjAzZmM3Njc5MGU3NDAyOWYxMzM1OGZjYWUwMDM1YmQ5NzFhNDAwODQ1ZjUwOGMyYzJjZGMzOTQ5YmU0OTgxOTNhZmNjYTZkNzVmOGQyMTUyMWFjNjczYmQ0MWE5MzZhMTMzZmI1ZWQ2MTA5OGYzY2I4OWRmNTIzNGM1Y2E1YWQzZGJiZTQ4ODI0M2QyODI0MTI4NDRkZjBkODE2YzQzMGRlMzI4MGFiMDY4MGEyYTU2MjlkY2U1M2Y5NGU4ZWI2MGI3OTBmNDM4YTcwZmFmYjhhM2VkNzhhMWIiOiI3ZDdhZTJlZDFjZmM5NzJmNjAxMjJkZWM3OWZmMDZmYyI6IiI6IjFlYjE5ZGE3MTg1Nzg1NDQyMGMwYjE3MWYxZjA3MTQ5NzJmZTcwOTBkYjEyNWQ1MDlhZmY2ZDkyZTUxOTIzNTMxODdmMDkwNmUzZTgxODdmNzM3MDlkMWE2MGUwNzRhZjAxZTgzZDEzMDZkNTgyYTgyZWRiZGJlYmM3OTdhNzMzZDcyZTJkNDIwODY3NWVmOThlYTRlYWFkZGFlMjI5MmUzMzZmY2QzZmE4NWNkYzU3N2Y0YjhkM2YzMjRmMGM1Y2YzOTE5NzAxMjA4ZDY5NzhmODM0NjZhMDJhZTZjYzM2OGY1N2UxOGI5ZWUxNmUwNGNmNjAyNGIwYzdmYmFkMzMiOjk2OiJmNzRiMzYzNWVjM2Q3NTVkYzZkZWZiZDIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZkNmRlNTFjMzA2OTJkNzg2MzQ4MmNiYmFhNWNjYmMzIjoiOWYyNDJjMjMwYWU0NGFkOTFjYjBmNGZlMjU5Njg0ODgzOTY4ZjNjYTRmNTdhM2UwY2M0YjAzYWIwNjNhNGVhY2RmNjNmOWU3OTAwYTk4MDczZTM0NWQxYjQ5N2I5ODU4ODdlMWZmYjVmZTdkODhjZWZhNTdkZDQxMDc2ZjJkYTU1Y2U3YWIwODk5YmRjNTc5OWIyMzc3M2Y4ZjdhNGRmYmYxODYxY2Y0ZGUzNzcyODFmYWU5NzYzZGQ0ZWE4ZGM3YzBkNjMyYjg3NGM4NmFjOGU0YzkwMzM5ZWMzZjE0Y2M1MWJmOTI0MTY2MGFiODI4NjA1Y2M2MDI5ODRhMGYxMCI6ImM2YzBmYTNkYTk1MjU1YWY1ZjE1NzA2Mjc0ZmE1NGVlIjoiIjoiNTVlNzVkYWEzZGYzYjEzYTMzZjc4NGQ1YWRhY2IyZmY2ODYxY2FjYjI5N2Q1ZWFhNjE2OTM5ODViNmEwZjgyZTllMGIzYTI4ZDEwNjQ4MTkxYzZlNjJkNjI2MGQ4YThiYjQ3MWU2YjM3YWNhMDBkYWZkYjJmYjE3NDU0NjYwZjkwYzI4NDlhOWFkMTczM2Q3YmMyMjdkOTYyYjNjZDg2YWIzMmQ1YjAzMWViMmU3MTdlNDU1MWNiMjNkNDQ4ZTA2YmFjN2IyYTRjYWRiMDg4NmZkZTQ3MmQ0NWRlMzllY2EyZGY0NzRiYTc5ZWI1ODUwNDMxODIwNzMyNWM4MTgxMyI6OTY6IjhlYjkwODZhNTNjNDFjNmE2N2JhZDQ5MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzZiN2YyMzA3ZTljZjkyMjFjOGYzZmY3MTA1MzI3ZjkiOiJiYzA3NmJmZDFmZjdhOWZiMDQzYTM3MWU1YWY3MTEyYmIwYzljNDQyYmU0NGNhNjQ4NTY3OTM3YmNjMDkxYzEyN2YwMmFiNzBiODFjZTUxYjJmN2EzODk1NGRjYTNkOTRiMzcxNmM2MTE0ZjBiYTM0OWQ2Zjg3ZjVlZmQ4NDUwNmVkMjg5ZGZlOGExMjc3YTVkMTgyMWM1NmY5ZjI5N2NiNjQ3Y2RmMzZkMzA4ZTZhZDQxYzU1ZDY4YTViYWFhNTIwZDExZDE4ZjVkZGVhMDYxYzRiMWIxZWMxNjJiMmQ1YmNmN2M3NzE2MjM1ZGQzMWVkYTNkYzMwOTRjYjE1YjI2IjoiM2NkYWY3OTMyYTk1Mzk5OWE2Y2U1YzNjYmQwZGY3ZTgiOiIiOiI4OGM3MGQzY2Y1ODE3ZjlmYTY2OWFhZGY3MzFjMGViMDNjM2Q4ZTU1MmYyZGM3NjMwMDFhYzk0ODM3MzUzYWI3NWIwYzY1NTNiYjhiYTJmODNlZjA1NTZmNzNkYWU3OGY3NmJjMjJkZTlhOTE2N2Q3YmU4ZTMxZGE2ZTY4YjBmMGJkZjU1NjYwNTk5MDE3MjZiNmYyODkwYWM4NzQ1ZWQxNGY4ODk4YTkzN2U3ZDNlNDQ1NDI0NjE4NTEyNGY2NWNlYmQyNzhmOGMxMWZiMGRlMjJkYTcyNDhmMzNlZjZiYjgyY2IxYzA4MjU5OTcwNzE0ZGUzOWVhNDExNGY4NWFmIjo5NjoiNjAwNmZlNDhmNzRmMzBiYzQ2N2M3YzUwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiYWM4MzA0NGY5ZDhmZWZjZDI0NzY2NjQ0MzE3YzUzMyI6ImE3MmRhYmE5ZGU5NmJjMDNiNWNkNzQ0OWMyZTk3Yzg1ODM4NTQ3NTEyN2I5NjE0ZTM3YzE5NzIyNWQ1Nzg5NTM1YjY5ZjkxMjM5OTNjODlhNDgxNWMxYjQzOTNiZmUyMzc1NGRkYzZjMDFmYzQ0Y2QyMDA5YjVmODg2OTg4ZGM3MGE4Y2ViYjEyNjY0ZmE0YTY5MmRiODlhY2I5MWRlNmE5ZWRhNDg1NDJiMDQ0NTkxNDlmNTk1MzdlNzAzZTNlODlmNmQ2ODNlYmI3OTdmY2UzODc0YzgxOWQwODY3NmQ5MjZiZjJkYTJmODNhMjI0NDliODllMjA0YjVlY2U1OGEiOiIxMzA3Y2QwZTZmOWJhNTU3MGU5NzgxZmNhOWE0ZjU3NyI6IiI6IjQ3OWNkYjVmNjViOWJhZmY1MmE5NmM3NTc5MGUzYjdlMjM5MTI1Zjk0NTI1MDY4Y2QxZDczYTFiODQ3NTA4MGYzMzQ1MWVjODM3ODlkNzE4OWY1YWQ2YTkxMzBlN2FhNGRmMTBkNzFlY2FiYjVjY2Q5ODBkODRkMGZiZmIzNDI1MDZlZGNmNzI5OGNjYjMxMGMwZTI5N2RkNDQzZGVkNzdjZjFkOTZmYzQ5MDU1NTM0NDM5ZjFhZjU4MzIxN2E1ZGUzNmU0ZGYwMzZhM2I2NDBkMDIxMjY1ODM5OWI2MjkxOTMwODBkMzhhZmYwZDRlOGFlY2Q2YzhkOGY0OGI0NGYiOjY0OiJjYTE5MmY4MTUzYWE1ZmI3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2Mjc3NzZiMjBjZTliYjA3MGE4OGYxYTEzZDQ4NDU1MCI6IjFkYTRhMjRmYjEyNTM4YTcyNGY2MmIyNzc0MTBkNTBlOTE4YmQ2MjI0ZDRhNjFkZjZmYjc3MzQzMDA2NDMxOThkZWJlYTcxNjg2ZTAxOGJjZDg0NTVjMjA0MTI2NWQxMWY3ZjVkY2VjMDhjMzFmYzk0Nzg0NDA0NDIzYmNmMWRjOGU2MTUyMjdkMmIwODQwYmUxMjNhMWVmYjgyMDFhYWExNTI1NGExNGEyZDc2YTZkZGY1MzY3MDFjYjMzNzlkM2M2YjFiMGQ2ODllNTg5NjE4NmM4OGQ0YTJjNTNhNzBiYjQyMmVjYzhlMGE1YzNiOWYzZDg5Y2U0MDY3NmU0ZjkiOiI1N2YzZjkzODhlYTFlMmMxYzczZjYwYjdkNzExZjZlYSI6IiI6ImY4YTA2ZWVhNTI4ZGFkMTJiMTFlYWQ1MTc2M2FhNjhjYTA2MmY5ZjZjMWMxZjc0MGZiOTEwOTc0ZjdhZDlkMmFjODdjMTZmYjc0ZDA3YzNiZDNiNDVmMmUyNmFmNDE3ZTAwNDE2YmRmZWU3ZWQwYjY5Mjc0ZWFkNzBhNTIyMDFjMWZjMDU5Mzc0Mzg4NTVmNTU2NGVjM2U4MjRkYWEwYzU5ZGExYWE2ZjZjYjhhNDRhYjVmNzNkNjYxYjIxOTc2NmI4MDY1NmNkM2ZmMWUyZDY5MDljNmNlOTFmYjE0OTMxYWY4NTgwZTg1OWU5ZDc2NDI2NzhjMWMzNWQ5NDM1ZDQiOjY0OiIwNWI0MzI4MjZkZDliMDQ0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4OTU0ZTJjMGE3ZWE4MGZlM2M4ZTc1MjQ2Zjc1YmRiZCI6ImQ3N2UxMWE4MzdlZmY5NWM3N2RkNTZlOWNkOTdmMGZmY2VlMGFkY2NhNGEyMjAzZDIzY2U3NGM4MDRhNzVjZWYxYmRkNjliMTYyMjg0NzJhMjM5NTExOGRmY2U2MzZiODkxNjM3MmQ2YTI0MTA2ZjlhMTY4MDU1YzZkNGI0NDI2NDY3NGNlMzkwNWIzYjMwZjUxMDhlYmY5MzlmM2ZhOGY1NWMxMmUwMDFiNDU3YjczNjY5YWNkMjNjMWRjYWJlYTA1YWFiYTM0ZTJkMGY2NmE0ZDFjOTE2Mjc2NDIyOGViYzRkMzk3NGZkYjM4YjFhNjFhMjA3Nzg4YzVkZWI4NzgiOiIyYjVmOTQyMGIzYzU4MzQwM2Q5MmQ3NmEyZGQ2ODFjMyI6IiI6IjM1YjhhMDRkNjU1NzQyNmRlZjk5MTVlYjc5ODMxMmE3NTcyZTA0MGE2NTk5MGNlMTVhOGE2ZTVhY2Q2YjQxOWMzZmEyNjgyOGI2ZWZkMmYxZjUwZjkxZjY3MmZlZDBmZWFhMDlhNmNhNmI0ODQ0ZmFjNWQzZGI1NzFkYjhiYmNlMjUwMDg2YjhjODlhYTZmYTA3YmRjYThkZDBlMWZlNzZlMGY1YTgyMTE0NWJhZmExMWYzYTliMGIwMDNhZDA5ZGU3M2FkNzE4NDlhYzU4ZjdmZDUwODUxYWEwZmJiZWQxN2QyMjJhMGE1NjA3ZjlmNzVkZDNiMGQzZmE0NWExMzUiOjY0OiI5NjUxMWFkYzA5NzgzOGU2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3ZDBmOTEwOWRkODQ2YzQ3NTI3YTQyOWI5OGQ1MzMwMSI6IjUwNmVmYzI5YzBmMDI5MTBjYzlmNWIyZTY3N2JiODExZTM2NmI5ZTQ5MTBjMDBiMzZlNDhlNWQ1YjQyNzE4ZjNiNmQxYTA4YTJkZTljNmQ0Y2U0NGZjZTAwZmI3ZTEwY2Y4OTM5NmE4OGJkYjM4ZGNiMGRiYTY5NDQ5MTk1ZTE5YjcyZmY5ODk2NjZiMzY2ZjAzMTY2ZGQ0N2NmNGM3YmY3MmRiYTMwNDhmYTM0MzI5YmE4NmJiYmYzMjkzNGEwOTkyZDcyYzQ2M2ZmZmVlOTQ2NTMzNzlkMjNiOGJiNGRmZjAzZmQ4NmNmYzk3MWEyZjdjZGI5MDU4OWJiYmNiMjgiOiJmNThhNWJiNzdmNDQ4OGVlNjBkZDg1Y2E2NmZhZDU5YSI6IiI6IjJlMjc2MGM2NDlmMTdjMWI0YmE5MmIxZmM5Yjc4ZDE0OWE5ZmM4MzFmMGQwZmU0MTI1Y2JmYzcwZDUyMDQ3ZjMyYTdmMjVjNzE2NTMzZDE5OWFmNzdlZDA1ZTI1OWNjMzFkNTUxMTg3ZGJjMmU3ZDllODUzZDVmNjVhYjhhNDg4NDBmMjIzOTEwNzJjYmUyOWU4NTI5Y2QxMTc0MGYyN2QxMTUxM2M2OGFkNDFmNGFjYzZmYjM2MzQyODkzMGZlM2Q3YzBlNjk4Mzg3NTk0MTU2ZTZjYzc4OWQ0MzI4MTdjNzg4NDgwZjNiMzEzMjZmYTVmMDM0ZTUxZDJhZjhjNDQiOjMyOiI2Y2VkN2FhYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDM0YzgwNWI1ZTgzYjU5YWQ5ZDZhNjVhZGUzOTQwYTkiOiJlZmJlYzA5ZjgxODk0MDRmM2RiZTU2OWQzYmFiOWI4YmZhYmRlNDE5ZmM4MGFiYjNiMjFhMDdhNWZlNDIzMjZkMjNkMDIyNDA2OTgxYWJkNTU4ZTk0ZjRkZWJmMzhmMmMzNGMzYzMxNWNiMWFlMWQ1ZjJkNDhlYWUxMzM1YjUwYWY5ZGQwNWI2MGFlZTcyNGVkYjdkNGUxMjcwM2Q1ZWM4ODczYzU1ZTNhM2Q2ZDhkNWU0ZGFkZGQ1MjQwZmEzZWMyZDFmMzI0NDJjZTMyY2RlNjZkZmFjNzdlZDIxMzIwN2RjNDgzOGNhOTc4MmJlYjlhOThkNmRjNTI4Mzg4MzFiIjoiYjBjMTk0NDhiOWYyYTgxOGZkMjFiYTY0ODljMzRmYjAiOiIiOiJhNDViYTU4MzYwMTFmYzY1ODgyYmE4YjFkNmJmN2IwOGIxN2YyNmI5Y2Q5NzFlZWNlODZmYmI2YWFjNWNkZmQ0Mjc5MGE3YzczOTAwOTliMTBkZWU5OGNiOGU0YmQ4YjNjY2IzY2E1ZDBiOWQwMmY3NTk0MzFkZTY0MGFkN2Y1ZGZmYjkxOWE4YWFhNzQ2OTVmOTRkZjhlZmY0YzdjYjI0MmQ2NDNjNTVkNmY5YzgzMjMwMDZmM2JlNTk1YWE4Y2RiZmIwZDkyNjBhZDI0NzNiMjQ0Y2E2NWE1ZGY1M2QyZWRkNjlmNDdkZjYwOGUyMmE2OGIwNTYyMzE1MGI1NjY1IjozMjoiNDNlMjBlOTQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYzYmFkODllNzk2OTFhZTcyZjUzOTY0YjkyOGEwOWYzIjoiMDE5MTNlNGVmMTAyMjZkODBjNTAyNmJhOTI0M2ZhNDFlZGFmNWY1YzIzMmQxN2MwMzRkYjRjMGM4MzY5ZjQ4ZDg5YTFkNThiM2IyZGRhNDk2NTA2YzMwNDU3MzY1YmRkNzY3MTAxNzNhOTcwMjJkNjQ3Mjc2YTRhOGFjNzNmMGU5ZTIxMWNmZDdkNjQ4NDk0MDllZjYxY2NlNjE4Njc1ZWFmZmU4OGIzZjE0NDk2ZTVlYjAxM2MwZjhhMTIyZGJmMTZmMmM2NzVlZGY3ZjgxM2FiZTljNTYxMDFlNTcwZTIwOGU2NTFmZDk1NmU3MTBkYzA5ZjEzZWJkMjJiODFhYiI6ImFhYmY3NzExNmE3NTA0NmU3ZWNjNTFhNDY4YWEyMWZlIjoiIjoiZjc0NTM2NzA2MDRmZjYyODdlYmRhYTM1NzA1Y2Y3NTUzNDEwNDUyZmRiMTEyOWE3ZmNhZTkyNTY1YTQyMTdiMGQyOTI3ZGEyMWYzZDFiMmJkNWFlOWI3ZDRkY2MxNjk4ZmI5N2ZjOGI2NjIyZGRjMDQyOTlmZGViYWJhN2Y3MDkwOTE3Nzc2Yjg2YjJhZjQwMzFmZTA0ZmExYjYyOTg3ZmE5ZWM3OGZiYmMyYmFkYzNhMzE0NDliZTNhODU4YWM3ZjI3N2QzMzFiNzdjMGU5YjEyMjQwYmQ5ODQ4OGExMzFkYmQyNzViNmEwY2U5ODMwZmY3MzAxZDUxOTIxYmE4NSI6MzI6IjE1ODUyNjkwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODM5NjY0YmI2YzM1MmU2NDcxNDI1NGU0ZDU5MGZiMjgiOiI3NTJjN2U4Nzc2NjNkMTBmOTBlNWM5NmNjZTI2ODZmNGFhODQ2YTEyMjcyYTBhYmEzOTllODYwZjI4Mzg4MjdjN2M3MTgzNjVlNzA0MDg0ZmJlMWU2OGFkYjI3YWQxOGU5OTNjODAwZGEyZTA1YmNhZjQ0YjY1MTk0NGJkZTc2NmU3YjNhYzIyZjA2OGI1MjVkZDBiODBiNDkwYjM0OThkN2I3MTk5ZjYwZmFmNjlmZWUzMzgwODdmN2E3NTJmYjUyMTQ3MDM0ZGU4OTIyYTNlZDczYjUxMmQ5Yzc0MWY3YmFjMTIwNmU5YjA4NzFhOTcwMjcxZjUwNjg4MDM4YWI3IjoiNTQ4MmRiNzFkODUwMzkwNzZhNTQxYWFiYTI4N2U3ZjciOiI0ZDc1YTEwZmYyOTQxNGM3NGQ5NDVkYTA0NmVkNDVkYzAyNzgzZGEyOGMxZWU1OGI1OWNiYzZmOTUzZGQwOTc4OGI2ZDUxM2Y3MzY2YmU1MjNlNmMyZDg3N2MzNjc5NTk0MjY5MGNlOTU0MzA1MGY3YWI2ZjZmNjQ3ZDI2MjM2MDk5NGY3Zjg5MmU5ZjU5OTQxYThkNDQwNjE5ZmRhOGFhMjAzNTBiZTE0YzEzZDc5MjRjMDQ1MWMxNDg5ZGE5YTBjYWZkNzU5YzM3OTg3NzYyNDUxNzBhZDg4ZGJjZWIzY2FjZGU2YmExMjJiNjU2NjAxY2NiNzI2ZTk5ZDU0MTE1IjoiYzdlZTFjMzJmOGJjMDE4MWI1M2NlNTdmMTE2ZTg2MzQ4MWRiNmYyMTY2NmJhM2ZhMTliZDk5Y2U4M2VlZTJkNTczMzg4YTA0NTlkZmVkZTkyZTcwMTk4MmE5Y2M5M2Q2OTdmMzEzMDYyZGJlYTk4NjY1MjZmMWQ3MjBhMTI4YWI5NzQ1MmEzNWY0NTg2MzcxMTZmN2Q5Mjk0ZmZjNzYwNzk1MzkwNjFkZmVmZjk2NDJhMDQ5ZGI1M2Q4OWYyNDgwYTZkNzRhMDVmZjI1ZDQ2ZDcwNDhjYzE2ZDQzZjc4ODhiNWFmZjk5NTdiNWRjODI4OTczYWZjY2ZmNjNiZDQyYSI6MTI4OiI2M2M4YWE3MzFhNjAwNzY3MjVjZDVmOTk3M2VlYWRiNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVmMmFmMWIxNGNhOTU5OGMzNDE3ODUxODlhYzZlMDg1IjoiNzkwYmM5NzU4NjVmNDRlM2ExNTM0ZTk3OGU5MGIwNjQ1MzAzMjFhMjI4MGE5MTcyZGM3ZjM0NTE3NzNiMDFkNGE1NmMxODU3YWQwNDc0MzUwYjk0NWU0ZjM0Y2Q2NzdjMjJjYTg5NDQ1YTU2NGI0N2E4NTI2ZDMxZDE4MTYwYzM1ZDJiZTFlODk0MjhjMzU5M2I1Mzg3N2NlYTBkODhkODViMmE3ZWQwNTUyZTM5YTBlOTZlMzVhZTAzODRhNWQ3ODY4MjQzMDQ1ZGNiZmMyNDVhM2ViM2ZmOTlmNGRkODZjMGEzMTRmNjhkMTk3MWU3NzNjYWY5YzE2OGIwYWEwYiI6ImJiZjIzMzA3YWQyNzE4Mzk4YjI3OTFjMTZmNjljYzQ1IjoiMjZiMTYwNjk1ZGUyYmE0MGFmY2E2YmQ5M2YxYzI4OTVmOTJjYTkxMDg4NDdhOGFiNzFhZDM1Y2FjOWY5YzlmNTM3ZWYxOTZjNWQ0MWIxMGUzNzc3YzlhMDJhZDNjNzNjZDI5OWE4NWY2MGU1ZDAyNzk0YzNiZTI2NDNjM2U2M2YxMDViOTRkMzJjYjRlM2ViMTMxZDNmNDg3ZmE1ZDFkZTFhNGFkODBjYWQ3NDI3MDRlZDVjMTlhN2NmNGU1NTUzMWZhMGY0ZTQwYTRlMzgwOGZiNDg3NWI0YjVmZWFmNTc2YzQ2YTAzMDEzNjI1ZjA0MzMxODA2MTQ5ZTBmNjA1NyI6IjUyYzM3M2ExNWUxYmY4NmVkZmI0MjQyMDQ5ZjE4NjAyOWI0NThlMTU2ZGE1MDBjZTdhOGZjN2E1ZmQ4YTUyNjE5MWFjMzNlNmI0Yjc5YjM2ZmRhMTYwNTcwZTJiNjdkMDQwMmEwOWIwM2Y0NmM5YjE3MzE3YTA0YTRiOWZiZTJkZGNmYzEyOGJkMGUwMWIwYmUzZmUyM2U1MWI2OWMyOGJjZjg3MjViOGU0MjA4YWVmYjFjZjM0ZmU5MWEyYmI2ZDViZWY3YjkzNmJlYzYyNGE4ZjM4YzljZDRhYzUxYTAxODc2MzUxMzhkNTVkYTFmYjE3OTFhZGZiZjg0NTlkM2YiOjEyODoiZGIzYmJkZjU1NmM5YzFiZTliNzUwYTIwOGZlNTVjMzciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMjk4MGRmZjIwNWJmYTViMTgwMzc0ODY2MThlMWZiZCI6ImYwMzdhZTI4MWU0NWM1MGM5ZmE4NzVmMGVjOWViNDMyNTFkM2FlMWI2YWNkZTI3Y2I1ZWRkYTdhNGUzODRmNTAzMDFhNjhiYjZmNGNhZjQyNmFkYjMxNDU3YzVlZWFhNzg5ZWRjODRmZDkwMmNiODJlMDBkY2NiZWJlMjcyZDkwY2Y2OTBjYTgyZWU3NDg4ODVmMDJkYWYzNzc5NzBlOTg1ZDU1OTk0ZmE2NjhmYzVlM2UwNjc2M2U2ODI5MDU5ZmUwYzNlYjY3MDMzYjNmNTIyM2NkNGJiNjU0NDg0YzU3MzcwZDJiODU2ZDcxMTdlMzJlYWQzZDE3OTA2NDMxNWIiOiIyNzM1NGU2OGEwMDRiMjU1YTM4MGQ4NDgwZGM5YjE5ZSI6IjM3ZWVkODYyMDEzNjg0MjkzOGVlM2MzYzA4MzExZDEyOThkM2ZkM2YwNDU2YzA1NmUwODUxYTc1ZDg0NGZlNmM2MWFlYjIxOTFjMDI0ZmZjZTM4Njg2YzA5YWI0NTZmMGVjMjZiZDc2ZjkzNWQ3NDcwMDJhZjliNDc2NDg1MDI3MTMzMDFkNTYzMmMyZTBkNTk5Yjk1ZDU1NDNhYzEyMDYxNzBlZTZjN2IzNjU3MjljNGQwNGVhMDQyZjA0MzYzODU3ZjliOGVhMzRlNTRkZjg5ZTk4ZmVmMGRmM2U2N2VhZjI0MWVkN2ViYmM3ZDAyOTMxOTM0YzE0YmI3YTcxYWQiOiJmODA5MGQwYTk2ZmM5OWFjYjhmODJiYmJlNTgzNDNmZTIyN2QzZjQzZmNlZWNlNTQ5MjAzNmI1MWFjMmZhNmRiNGJmOGM5OGJmMjhiNDAxMzJiMWFiNDY1MTdkNDg4YjE0N2UxMmNlYjVlNmIyNjliYjQ3NmE2NDhkOGExMTMzZDVlOTdkNGY0ZmJkZmEzODY2YTA0OTQ4ODUxY2ZiNjY0ZjM0MzJkZTIyM2YzMzMzMjQ4YTFhZmZhNjcxMDk2NzA4Y2U2ZTJjOWI0ZjhlNzlkNDRjNTA0ZmYzY2Q3NGU4ZGZmZDRkZGZmNDkwYmNiYTNhYmZmYmFkZTBhNGUyMDlkIjoxMjg6ImI1NzYyYjQxMjQxY2JlZTQ1NTdmNGJlNmQxNGQ1NWQ0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWZjOWJjYzVhZWUzNTBmMWVmMTYwMzQ2YjY0MmNjMjAiOiJlMGZiMDhjZjdkYzkwMWJmNjk4Mzg1YTM4ZTFhODFhY2Q0MTE4ZjA4M2U1MmFhNTJlMWRlZDE2YWIxZTg0MGNjNDlmYTFlYWQzMjkyY2UyMTA5NmNjNzVjODlkYzM3MDExMDJiMDk4MmZkM2E2YmZhNTVhNzc5OWU1NzlhYTczMzZlZGYzNjU1NzRhOTA0YmFkOTI0ZWMwODBiMDkzYTYwNDk5NGRiNGRjZDgzMjNkN2QzOWMzYzM1NzUwYjA3NDFiMTcwNDgxNTM5ZDIyNTUxODcxZDZhMGUyZWExN2U0YmViZThjZTE5ZWMzYmMzYmY0ZjZlZGFlOWNkN2FiMTIzIjoiOTEwYTgxYTUyMTFjZTBmNTQyZjExODNjMDhiYTk2YTciOiIyZGNmNzQ5MmM0NTM5ZDZhYmMzZDI1OWJhNTk3MDAzM2ViYzJlN2RkZmExYWY4YmUxMWY4MWI0NTlkNzQ3N2YzMTBiZTIxNzEyOTBiZWMyZjJhZTJjYzUxMjY2ZjQ2ZTk4Yzg3OGRkMjQ0NGFmZWZkYmRiNzNhNDE3NTE4ZjVmZDRjMTE2NTQ3YmY0NDJmYTlhOGNiMjMwMGM1ZmY1NjMxMTdiMjY0MWRjZDY1MDE4MDgxZTYyYTdjZTVjNGQ4MjI1NjM4MjRlNWVhZmVhOTBjYmNlZWU3ODhlZDQ0ZTZjNGYyM2ZlODkyNjYwM2ExNWFkZmRiNTU2ZjExYTBiZTlhIjoiNTE0ZDI3Zjg0MTNkN2VkNTlkOTZjMTRlN2U3NGI5ZjNkNDUxODQ4Njg3NmM0NjliMzY5ZjhjNTczNDE0NWY0YWE1MjUwNmM4ZjgzMmQ0ODExZTVmOTgxY2FhZGVkY2YwOTg3NTAzM2M1YjI4YTAwZjM1NjA1ZDc3M2M3ZjllMWFmN2YwYzc5NWUzZGYxZmE5YjVhNTI0ZjFmNzUzODM2YzFlMmRjOWVkZjE2MDJkMzdhYzEyMGYzZDhhNWMwOTNhNTI4NWRiZTkzOTU3NjQzYTY1ZjIyOTk1YTI3ODJiYjQ1NWQyMzMxOGYwMWJkMThhZTBkMDgxM2IwMWQyMzNlNSI6MTIwOiJmZWI3YTI1YTY4YjVmNjgwMDBjZjYyNDUwNTZhMWYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5Y2YzMjlkYzEwYmNlYmI0ODQ0MjRjNzdlYjc4NWFhMiI6IjkyNzI4YTY5NmIwNzcwNGZiMWRlYjY0OGM1MDM2YTFjODYwMmI0MDA2ZmIyZmQyZDQwMWM0YjY2OTJlMjUyYzdmNjY5MTgwNzg1NDJjYzBiMWE5NzQ4Njk2NDI3NmQ2ZTZjNzdiYmI4OGE5ZmZmMDI4NWFlZjcwNzgzZDlmMmJlM2I3YjIyZjhhOGMwMjc3MTQ5MjE1MDEyMmZlMDIyNzIyYmY2NDI2M2Y1ZDI0MDY4ODQxMDhkOGQ2MDgyNzNiYzAyYTkxMjdmZTRkYmNiMzIxYWM0NGE3ZDIwOTBjZmY3MDE3ZDU5ZDczZWNmOTI3YjhiMDU5Njg2NzVhNjNjYTAiOiJhNDMwYjk3OTE2OGY1ZGY1YmEyMTk2MmQxYmQ2ZGQxNSI6IjRkOTRiNzY1MDI5N2M2NmI0MzIxMGM4NGU2ZTdiMDkzODUxMTdlZDhmYjkxYWRmNjQzYjIzMzlmMzlhNWQ4ZGQwYjBkNzVhNzkzZTJhNjY5ZTQyYzVkZGIwODczNzE0ZTAxY2I2NWRhOWViNzNmZDk3NmE0OWFlOWE0NzYyYmNiYzA2YmU1MDUyZjc1MGQxMTBhNDA3NzY0MjgwYjUxMGRhNWZkMGZkY2U5NjlmODZlYTZiZjUyYWQ0ZmQ5ZTJkODFlYzVjYjg0YWYwYTFkNDA2NTA0YTM0YzUxYzc1MWRhZWJiNDQyMWZlMTk5NGJmNmRiNjQyZTY0YmQ0NzFkOWEiOiJjMTNkYmZjNjBiMzRkNzVmOGE4NGRiMWY2YWE5NDZkYmZjMTk0NzlkNjM5MDA0NTAzODk3NTZjZDFhZGE4ZjZkMmQwNzc2NjA3ZjcwNTNkYjZiZmE2NzUyYzRiODQ1NmYwYWNlMzE0ZmYzZmQ0ODkwZDYwOTNhNGE1ZDQ3ZGQ4ZmJmOTAyZTNlMzAwMGY1ZTAyYmE5M2EwMDk4NWYyOWFkNjUxY2I2OTdjYzA2MWQ4ZjNjYzc0ZTZkOGQwNzQzYTE5ODg5NDdjOWRjMjMwNWUyYjdjNWE3OGIyOTQwMGQ3MzZhY2MyMzgxMzE3MDBhZjM4ZTcyZDhjOThiYTAwN2ViIjoxMjA6IjgyZjFkZDU4NDI1ZWI5ODIxZmNmNjdhNmIzNTIwNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNmNDNmZjZhMWVmMzVjMzc4NjJhZTNiODcxNzFhMTczIjoiYTFlNjcwYjNmZDYyMDM5Y2YyOWVkYjYxYjI2NTU1YmNkMGY5MTg0YmU0NTkzYmY2YjIwY2VhYjI2M2JkYzc2Y2RlZjM0OTkyZmUwY2U0ZDQzYmQ5M2JkOTc5Yjc4YmIyNTJjMTIwZmJhYWZlNDk0N2ZjMGVjMDVjY2U0MzU4YTUwODlhODQxYzc0NzZiMGViZmNhNjQ3NmU2OTBjYjllZTBiNzNjNjcwMGFhODJhYThmNDA1MGYyYzk4NTAwMDUyYTJkMzI3NGIzMGIwYmU2NzU0OWQ3NTZlZmQxNjNjNDM2OWI2ZGYwMjM2ZDYwOGJmYmVjZDc4NDQ2N2RiMjQ4OCI6IjZjNTY1NDBiM2E5NTk1ZjNjNDNmNTU5NWFjZTkyNmJjIjoiNWMwYmM2ZTQ0MzYyMjk5NjQyZjM3NTZhY2YwOTg3OGJiMDU1NDllYjZjZDZjNDk0MmQzOWZlNTg2Y2VhYzIyOGQyYWE5YzkyZjgzOTNlNTAxN2U3M2VlNDEwMDJlNjBhYThiOTkzYzQ4YTc2MzhjZTJhZTBhZTBlYWE1MzZiZDc0OWIwN2E4NjcyZmM2MjBhNTExMGFmNjEyMzJiNmEzZDUyN2IzNmM4NjYzN2NjMWZhOTJjODQwMDg0NjVmZDg2MTkyMDg4NGQ4YTc4NGUxOTRlYzUyZmNiYjc2N2E2OGNhNmZhYmI2NGFiMGEwZDY4MDk2MzE0MGQ1Y2ZkOTQyMSI6IjhhZDM2NTIyZTRhZDQ3ZDRhNTRjNWVhZTBhOGI5ZmY0OTExYWE1YjliMTNiODhiMDA0ODhhN2I2NzhmNjNjZjg1OTQ1YjhkNDk5OGQxMDA3ZTI3NTI5YjU2ZjUwYjllM2IzNzNiYjZmZDg2MWE5OTA1MTQ3NDNiOTcwN2Q1MzViNDBkMWJkYmMzZjU4YTYzYjhjYTMwZGQ3OTM0ZWU5OGVjMzMyNWQ4MGFmYWEzN2UzOGI0ZTgyZDg4NTExNjY1ODkwMjdkOTEzNDc3MjdiMzE0ZTAyZWQwOGE3ODQ2ZTI5ZmNkMGM3NjQ4MzRkMTI0MjlkOWY1NjhiMzEyMDgxZjMiOjEyMDoiZjViZjIxZDVlYWRlZWJkZWYzMTA0ZDM5MzYyYjg1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTBlYzdiMDA1MjU0MWQ5ZTljMDkxZmI3ZmM0ODE0MDkiOiI1NDMxZDkzMjc4YzM1Y2ZjZDdmZmE5Y2UyZGU1YzZiOTIyZWRmZmQ1MDU1YTllYWE1YjU0Y2FlMDg4ZGIwMDdjZjJkMjhlZmFmOWVkZDE1NjkzNDE4ODkwNzNlODdjMGE4ODQ2MmQ3NzAxNjc0NGJlNjIxMzJmZDE0YTI0M2VkNmUzMGUxMmNkMmY3ZDA4YThkYWVlYzE2MTY5MWYzYjI3ZDQ5OTZkZjg3NDVkNzQ0MDJlZTIwOGU0MDU1NjE1YThjYjA2OWQ0OTVjZjUxNDYyMjY0OTBhYzYxNWQ3YjE3YWIzOWZiNGZkZDA5OGU0ZTdlZTI5NGQzNGMxMzEyODI2IjoiMDBlNDQwODQ2ZGI3M2E0OTA1NzNkZWFmMzcyOGM5NGYiOiJhM2NmY2I4MzJlOTM1ZWI1YmMzODEyNTgzYjNhMWIyZTgyOTIwYzA3ZmRhMzY2OGEzNWQ5MzlkOGYxMTM3OWJiNjA2ZDM5ZTY0MTZiMmVmMzM2ZmZmYjE1YWVjM2Y0N2E3MWUxOTFmNGZmNmM1NmZmMTU5MTM1NjI2MTk3NjViMjZhZTA5NDcxM2Q2MGJhYjZhYjgyYmZjMzZlZGFhZjhjN2NlMmNmNTkwNjU1NGRjYzU5MzNhY2RiOWNiNDJjMWQyNDcxOGVmZGM0YTA5MjU2MDIwYjAyNGIyMjRjZmU2MDI3NzJiZDY4OGM2YzhmMTA0MWE0NmY3ZWM3ZDUxMjA4IjoiM2I2ZGU1MmY2ZTU4MmQzMTdmOTA0ZWU3Njg4OTViZDRkMDc5MDkxMmVmY2YyN2I1ODY1MWQwZWI3ZWIwYjJmMDcyMjJjNmZmZTlmN2UxMjdkOThjY2IxMzIwMjViMDk4YTY3ZGMwZWMwMDgzMjM1ZTlmODNhZjFhZTEyOTdkZjQzMTk1NDdjYmNiNzQ1Y2ViZWQzNmFiYzFmMzJhMDU5YTA1ZWRlNmMwMGUwZGEwOTc1MjFlYWQ5MDFhZDZhNzNiZTIwMDE4YmRhNGMzMjNmYWExMzUxNjllMjE1ODFlNTEwNmFjMjA4NTM2NDJlOWQ2YjE3ZjFkZDkyNWM4NzI4MSI6MTEyOiI0MzY1ODQ3ZmUwYjdiN2ZiZWQzMjU5NTNkZjM0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjliYTA1Mzc3NmFmYjAxZDE1OTE1ZTdmODJhMDRmMjEiOiJmYjU5ODU4NDIxZmZiZjQzZDA5NDE1YTc3MzIwY2M5MjUwZGY4NjFlNDQxNDgxN2U3Yjc4Y2FiOTE4ZmE4OTBlYTA0MDBkNDIzN2Y3ZWJmNTIyZDk3MzE4ZWE3OWY5OTc5YTczOTcwMjk2ODI3YTFhOTY5MGEwMzllNmM2MDVhMGEzZWZjMDA3NzE1NmUxYjE1ZjE0ZDg4Njg1ODMzZTA5ZjZjZDZmNzgzZDBmNTA1NzlkZTdhMzA5MDdiOWQ4ZWZjNGM2NTBlYzU3ZGJmN2I0MjVmZmFmOWE5MDBlYzkxMDg3ZDQ3MDQwOWRhNGQ2N2NhZTczMjhjMTVhNWRiMWZiIjoiZGYyNmIxMDkyNDRmNWE4MDhmM2VhNzEzN2YyZjQ5ZmEiOiJiMjFjODEwMWFjOTZjNDFiYWQyOTI1YjliNmM4NjNmNTQ4ODhmMzZlNDk5NTgyMGViZDUxZjUzZTMyM2U0NmY1MjhkOTFmNDMxODE4M2JlMDI4MjMxMmNjZGU4ZGEwNzVmYzJlODIwNDFjYjQxYTc5ZTk5MzMwMTJhNGNiNmU5Zjg5NzE3NDQ0YmM3MzRkYTNiN2U0MGU5MDNlNThkZDBmMzhiY2IxMTU2ODQyMjdlYzUzM2MwOWE5M2M4OWMyYzI1ODRiYmFjODNhNDY0OGY4MmI0YzkyMDdmNDNiNjFlNWVjNDcwNjAyMDc2ZWQ0NzMxNzU2Yzg3ZDRlMGUyNGFmIjoiMmMzMDZmYzYwYmZmNTgzMDhmMmI5ZjA4ZDUyMzY5ZTg3MTE5ZDdmNmRlMjI3OWZjZGVhMGM0NmM5MDFjOGRjNWI0ZjgzNTc4YjE3YTAwNzg2MDE0YTE3ZDNlMzgwZTFhZjRiOWYzMmZhNThiOWFjNzYzYmRmODZmZjBjNjA4NGFmZTQxM2E1ZGNiNzYxN2Y5NGQ3NmU1OWUzNzBlYWU0ODI5ZTY5YmNiNzBmMTA1NDViMDRlZDVmZDEzN2UxMTU5ZjM5NjFiMmMwMTA4OWViYmUyZjE2YTkxYzc4MmQ0ZjM4M2ZiZDRkNjFiNjYxMzgzMTliNjNkNzljZTlmZGVjMyI6MTEyOiJkNmRiNWFhNTM5YTZlMmU3MDg4NTUwOGQ2MzdkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmJiYzQwNmE2NjliOTQzNzRjNzk3MGYyYWMxMGM5MWMiOiJhOWYzMzRkMWFlN2QyOTYwZjM5ZGE0ZjFkZjg1ODMwZDI3YzBmMTNmYTBiZDIzZDYwN2FjZTRjZjU4YjM1OTU4NDEyMGU3YzkwZDMwNjJiMWIyM2IxYTllODVhNzQwYzkwNjNmZjgwNDIzYjU4NDYyNTdlNDQyNmMxNzRlOGNkNzdhM2RiY2ZlMTI5NzBlYmRkYWFhMDBhOGZmYjU1NGIyYTgwZGVjYzgxZjk5MTdmNWExMzY5ZThiZjcyODhlZDg2ODQ1Nzk5M2Y0ODBkOGFmZjBiOTJiM2RiMmZkYTIzM2UzMmZhYmVjMWE0NTE0NzE1MzY0ZDRmNzBmOThkNjJjIjoiNDYxNTJmNWE2OGMwM2RiZTJmMjhlNjlmNWI1MmUyZmMiOiIxMDUyZjhiMmQzZTExZGE1M2JhOWVmZTAyY2U5ODUwOThkMTcxZGZmOWI5OGNiYzJmNjc1NWZkODgyMTRkZGI4NjYwMjI1YTYzYTFjOGJjYWY0M2ZmMzkzMGUyMzk4MjRhZThlMTIyMDY4Yjg5ZDdmZTczYzY1OGNlMDMwY2I1MWRhZTk4MzZhYWZiNjhmYWQ3N2IxY2I1YmZmOGQ3ZDljOTIwZWM0NDkxODFlMTBlYTY0M2NjNzNhYmI5NjIwZGJkZmEzMmUwNmMyOWNmYmQ4YzdjYjhiMTEwMzc2MzYxNmFlNmY5YjE5YzRhNmUxZWVkODhjMzk3MWM0Nzc4YzJiIjoiN2IxNjQyNGM1MDhkYTNmZWQxNGJiNTM0NjJkMTgwNWYwZjlkMDlmODAzZDRlMTY2ZmRhZGJhYzc2ZjlmYzU2NjY2NTU1NDMxNzQzMTY0MmY2ZTUyNzEyM2VhNmMxYzBkZGNmNDUwMDUyMTNiMGYyNzQ3MzIxZmExMTJkN2I4OTNjZGNmNGMxYTU5ZThiZDFjNDhiN2Q3Nzg4MWM2ZDc5ZGUzZDg1MGJjZTQ0OTk2OTMwNTc5NzE5NmQxODcxOTZkMGQ4MWRjMzQyMzI5NWY1NTJkM2MyN2Q2ZDcwZTQyYzlhMWE3NDRhMDM5MTgxZTczMzQ1MGM5OTg1Yzk0YWU5NCI6MTEyOiJiNTFkY2E4ZTAwOTg4YWYwOTg3ODYwYTY2M2FkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmU5NmVhYjEwZmY0OGM3OTQyMDI1NDIyNTgzZDAzNzciOiIxOTRjOGJiYmZhZTRhNjcxMzg2YjhjZDM4ZjM5MGY0NmY5ZGY2Yjg2NjFiNDcwYzMxMDkyMWExYzg1OGE5MzgwNDU4MzRiYjEwMzgwMDM3ZmJmNWY1ZTAwNjg4NTU0NTM3YmUwZmNhZmU4MjcwYjliNTkwNjhmYTA1NmFiMTI2OGZjMTY2YzJkNzI5MjQzYTA2NjUwYTE3MWM5MjljNzg0NWM4NTMzMGMwNDU2OGQ2Mjk3N2VlZGYzYjFiYTlkY2ExM2JkYjhmOTUyMjgxN2M4Y2I5OWU2MzVlMzc0NjVlYzFjOWY2ZjE0OGQ1MTQzN2FhOWY5OTRhNjJlMWJkMDEzIjoiOTdjZTNmODQ4Mjc2NzgzNTk5YzY4NzVkZTMyNDM2MWUiOiIxMjc2MjhiNmRjYmNlNmZjOGE4ZWY2MDc5OGViNjdiMjA4ODQxNTYzNTExOTY5N2QyMGJiODc4YzI0ZDljNmY5YzI5ZTE0ODUyMWNiNWUwZmVmZjg5MmM3ODU1ZDRmMWMwYmZiMzJhZDMzNDIwOTc2NzE0ZGNlODdhMGJiYzE4ZTQzNzhiZDFlZjM1MTk3ZDBjYTczMDUxMTQ4ZjExOTkwMTBmNjNjYWYxMjJkZjVmNzFhZDhkOWM3MWRmM2ViMmZiZTNiMjUyOWQwYmE2NTc1NzAzNThkMzc3NmY2ODdiZGI5Yzk2ZDVlMGU5ZTAwYzRiNDJkNWQ3YTI2OGQ2YTA4IjoiMTI0OTUxMjAwNTZjYTNjYWM3MGQ1ODM2MDNhNDc2ODIxYmFjNmM1N2M5NzMzYjgxY2ZiODM1MzhkYzllODUwZjhiZGY0NjA2NTA2OTU5MWMyM2ViY2JjNmQxZTI1MjMzNzVmYjdlZmM4MGMwOTUwN2ZhMjU0NzdlZDA3Y2VlNTRmYzRlYjkwMTY4YjNlZjk4OGY2NTFmYzQwNjUyNDc0YTY0NGIxYjMxMWRlY2Y4OTk2NjBhZWYyMzQ3YmIwODFhZjQ4OTUwZjA2ZWJmNzk5OTExZTM3MTIwZGU5NGM1NWMyMGU1ZjBhNzcxMTliZTA2ZTJiNmU1NTdmODcyZmEwZiI6MTA0OiI2YmFjNzkzYmRjMjE5MGExOTUxMjJjOTg1NCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYyOTU2Mzg0YTY1Zjk2MjdkY2NmNTEyNjE0MWM3YmNhIjoiODlkZmQxODViYzMzYWRiZWEwYzY5YjU1ZDM3MDg3ZGUzZmE3ZmQ2OWE5ZmE3NmFhMTU2OGFjMzYzYzVmMjEyYWU5MmQyMDJiOTMzOGVmMzk3MjY2ZGQ4YmQxZWYzNmNhYjZkMTM2OGZlYWZlYzY5YTRlM2UxMWUxYmYxYmViYTM1ZDk2ZTA0MGQ5MWU5ZDNhODM4OTY2YmFlNjJhMTViMThkNjIxZjMzZWZkOWVjNTExZGU0YmQyODdjNzIyY2QzOWI0YmE0M2U3YTZmOGM4YWI2NzJkNjllYWM2YjIxYThkMzU0NGFiMWQ2NGY5ZGUzMTk1NmI5M2IxMTA0NDMxZSI6IjJmNjFmNzZiY2YwNzRhM2QwMmY1MTgxNmMwNDExMDUyIjoiYmRlMTUwODgyM2JlNzk4NGQ1OTIxZGI0Y2FiMWVkMzAxN2MwZDczY2I5YmZmOTg3NGYzOWE2ZjViYzQ0OTcxOWMxYzQzZDhmYjRlNzZmNjgxM2IwOTg1ZDRiMTI0NTE3ZjllNGUyZDNjNTUyYjJmNzU4NzY1NjNjOTNhNDRjMThmYjY1MjNlZTczMmVhNWI2ZDEzNDE3ZGI0NTEyMDY1M2RmMzgyMGEzMmViZGI0MmQ1NDQ3Njg0NjFiMWQwYjU1YjQ2YjA5ZjY4OGU0NzI0MDg4MDkzMGZjYTcwOTdkZGZhZTM1Zjg1NDg5MWUyMTg5MWRiYWQxM2Y2NjFhMjUzNCI6IjAyM2E5YzNhYjNlZDAxODFlYzg5MjZlNGJmYmMwZmE2M2UzOGVjODk4MGVhYmQyZWQ3NWUyOWI2ODFiM2VjMDRjYzhiMjdmYWQzYTdjZTZkYzFlZmQ2ODA0NzlhNzhmMDJkZTdiYTkyZjQ1ZGMwM2RlMDI4NTJhMmU2N2IzNWJiMWRkMTU0NTY4ZGY3YWNmNTkwODFkZmMwNWFjYTAyYzBhYTlmM2Y3YjRmZDRkYmRiNjcxYjFiOTczYTQ4YWYwYzMyNWEyMzQ2N2JhNWNiNTkxODM1NDBmNmVkZjRjMDAzNzZiZTM5YTNhNjcyZmViOWU3OTVkMWJkYTk2ZjAwMTciOjEwNDoiNjEzZWVjYTNkZWNiZTA5ZTk3N2UwYmVlZGEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZTliYjMwZWEyNWY1MGIzZTc3MTFmYWMwNWY5ZDQ0YSI6IjE3YTUyZjRmYWE2MDhkYzk4NTNkNDUxMWZlYjNkZDlkMmZiOTJkN2EzZGViM2Y4YTdhNmRmM2ZhMmE5MDliN2RiMzBiYWJlZjEyZDlkYTcxYWFkZmFkMTZiZmQyYmNiNTcwNmVmMmFkZGM1OGVlYjhkOGQxM2YzMTMyNmY3YWIxZDBhYWJmZTU1MjUwMTRmMDVjZDhmYjgwZTFlY2IwNjU0ZTYyMDc4NDQwMTU3ZGY2NmY2MThmMDc4Y2RmMmIzMjJiMGY4ODc4YmNkOTI0NjA5YzMzZTQyMDU5YWE2OWZlMGRkY2E2NTlhZWE0MmFiOTA3YjQ4M2FhNTVhYWNjNjMiOiI5NjY4ZThiMWNlOTYyM2FkNTI0Njg0MzFkZmJlZDYzMiI6ImY3NzZjNmU4OTJlMzczZWM4NmNjZjcwNjcwNGQ0N2NkODlmYTQ1YzJhYmRlYjBmOWY2ZjMyY2RlODhjMjJmMDAxMTUwY2M2NmYwZmQ4M2U5Yjc1Yjk3YmNlYjk4OTEzY2YxNDNjZDhhNjhiZjA2ZTExMjUwMzFlM2U3ZjA5ZGZlZmJjYWVmNGYwNGQ3YmYyOGFjYTE5OTJhN2U0MjI4ZmQ0MDE3YTViMzJmYzQ4MTAxYzhmNWE2MDllYWVlOTQ4OWQwMjIwMGU4YTEzZWZlZGE2MGI1N2RmNTNjY2YyZmUyNjMwOWExYzFlMWQ0MGRiNmViODQzMWRiZmU4ZDQzZWEiOiI0MDcxNzFkYjFkZmI3ZmYyMGQ1Yzk3NDA3Mzc1NTc0MjIwNTM0ZWY3NWJhMThkYzYxNjQwMGU1ZTk2N2U3MmRiMjM3ODNhNmViOTUwNmI2MTFkMGM2N2E4M2Y1YzQyMzM4MGNlYWU2NmQ1ZGNkZmZjMzFlMzEyMzkzNTdiOTE3OTQwMThlOWM0YzM2YzI4NmY3YjE3ZWU5MTExMzZkOWNhY2Y1NjRiYWY1ZjliOTgzMTc3OTM3NWU2M2FhYWRlODczNGE5MWJkNDAwMGU1M2U1ZTQxMmIzZjkyZjhiNjhlMGI3YWQzYmY2ZjI3NDc0NGUyYzVhNjM1ODk0YmY5MThlIjoxMDQ6IjI3NDFlYmMzM2E0ZDRjMTU2YzIxMzg1YTIzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYTcwNWVlNzAyOTdlOTIxMmY3MDU4NWQ5MmY0MmFhNCI6IjVlNGI0N2Q5ODZkNTVmNDk3MDhjYjNlNGQyNzA3MmE3ZTg1MDkzNmIyN2IyNDcyMzg1NmFjZWM3YjJlMDNjYWNjZDk4YzJhMDAyYTJkZDFkM2Y0ZGFkODgyN2E1OTEwYjQyOTg2Y2IwMGJlN2JmZjQ3ZWI0MDFiZTVmMzI0Y2QyY2QzZWEyZmE0MWY0ZWY2MWY5NzcxYTRjMDE4NGQ4NWQ2MDIzZjM3ZjNmNTRiYjlkN2NkNjIxZmUzNmNlMTFhODI2NzhhMDc1NGEzMzA0OTEwNmJlNTk3YzUzZjI4NzY5MmFjNWE0MmU1OWYwOWEyYTExN2ZhZDZjMDM0YTkxYjkiOiI4OTgyMmM5ZGI2OTIyOWQxZTQ4ODBhZmQxOTk2NTkwOCI6ImZkZDY1NTU4NGE5MmUyOWExNGEzNjhmMjhhNzNmOWRjNjA4ZTVjMmZmZDMwOGQ0YWVmZjczMjZiYmVmNWVhNThmODQ2MjBjOWFkNDNjMGI1OThjMjcxNTI3YWU2MGRhZTZkYjRmZmQzZjU5MGU1MDNhZTcwNTdkOGM0OGU5YjFiZDhmOGE4ODMyNjI5YmJmYzEzOTFiOTU0YTRmY2VlNzdkNDAwOTZlYjVkY2VjNWUwNDM5Mzc1ZWQ0NTUzNzhkNzE2ZWU4ZjhiMDRjY2RlMzI5MWU1ODAwNjhkZDdkYmVmNGJhMzY4NWI1MTk0MDQ3MWYyNDg1OWY4ZTkzYjY1OWIiOiIwZjM0YmI0ZTJhNDAxNmJhNDFlYjIzZTc2ODhlZGQ0NTVmMmQ0NmE1MDk3MjM2ZDlhMTI0YWUwYmQ0NzM0OTg3NjMxOTk3NmFhNGMzYWE0MTY4MGE2M2NlYTg1ZjQzM2UzYTFiNDM3NmY3OWQwMDQ3MTBkNDg2YTNmYjVhZmJiN2RiMmM0MWFjYTQwMGUwNGY3NWJhOTE2NjBiYjY4MzU0MDI5ZGVmZWFhZTE4NTM0NDdmOGZhMGQ0NzBiMjUzNzFkYTczYzllOGVlODQxYmE5NWZjMjczZjg4YzJlNDYwNGZmMjlhMTMxYTdkNzNlNjBhMDAzNDBlODg2ZGY1MzU5Ijo5NjoiYTI0N2U4OGFjYmQ0ZTM1NGQ3YzhhODBkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkZGVlYzc4YTBjMjNlOGM1YzMyZDNkNGY5ODMwZjkyNyI6IjEzNGZkNmJlMWE5MzQwNTNhNTM5Mzk4YWVhZjVkM2FjZWRhM2VmNzIyYTZiMzU2OGFmNjk1OGE0YjEyMDdmN2U5YjllODM1Y2ZkNDZhN2YzZDRmYWVkODI5YWQyMzU1NGZjN2MwZDFhOWIzMmJhZDk0NzdkOWRkMzk3YTI1OWNmYjBiZWEzMDI2OGFiYTdiOGNmNGEzNWRiZjk5YTZiMmNhOTY4NjQ5ODQ3ZjcxNzc0OWJjNWY0MTM3NGUxNTc0YWQ2YzM1N2Y3YjYwYjBjZmZjYjgyMmJkMzkyNDIwOGQwNDcyYTk3M2FlOTc1NTBiOTIxMzM4NzkyY2E4OGZkZTYiOiJhZTQyOGViYjk3NGNjZmJiZGJjZjYyMDMxMDU3MjRmMSI6ImUzZDVjZTc2OGM2ODhlODgxZTcyZjAzNjM0MWIyZDkxOTQ3ZTAyYjczMjdlYjUzMjQwYzg1YjBiOTNhNDBlYjBmMzM0NjgxN2UyYzllMTI2MjA5YjMxYjU3NjMzYzQzODRmN2FmNDY4NDZkOWJiZTZmZDBkNmJhYmM1N2I4NGQwZjViZTJhOGE3YjE0NmIzODkxNGE0Y2VhNzAyNzNkNTQ2MTEyNmNmZDc1MjdhYjM5NzUxMDE3NmU3OTAzMDBhMDYwNjY2NTU5MDdkNDk5YmRlZDc5ZjViYjM5ZjZmZGIwM2Y4NWE0MTVjMmNjMmFkMWYyNTA3OGYwZGE3ZGYyMTUiOiI4NjVkNjE0OGM5ODIwYjY3YzA4YzE3YzkyMTRkZTYxMmFkYTZlMjRlZDY3OTMzZDEzYzNiM2VjNDM2MzdmYTMwNTY3M2Q4ZDUyZDE1YTE5NWIyN2E2YjI1NjM2ODJhOWY5ODkxMjkwODY2OGUzMzM1MTkyYjFkYWFiZjI2ZTFlNzNkN2QzNDc2NGFmMDA2YjBjMTRhMGZmYWQzYjZhMGRlZjU5OTY0YjExZWI1MmU4MjlhZDc5MDA2OTk5NzkzMWQwOWJlODhiOGQ2MGFlZjkwZTM5ZGZjYjBkZjRmZDU0YjcxNTk3YjhhYzY0NjcwZTcwM2U3Y2I4M2VmYTNmMmNiIjo5NjoiNjRiMjQ1OGE2ZWFhNmYxMjkzN2E4NjQzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MjkwMDgzMzllOTgzOTE4YjhkMTQyMDkxZjg0ZWUyOCI6IjZmMzA2MDRkOGMyZmFlMjE2YjFlZDNkNjc0ODU2MzFlYWFkYTY4ZmU4OWE3MDIwZDZlMjlmNDJiOTM3ZTc2NDBmYzFmMjNjMDBiYTQ4YmYyMzk3NDBmNjQ2ODI4OWVkMjExYmE4MWU4MDljZGE1NWZlMDY3YmRmYTE5OGJmMDQ2MWRhZjg2ZDRhNzk2OWRlOWE2Mjk1MTM4MDliMzU4NjMwY2U3ZWI1MGE3ODNiOGM5OGVjMWJkNWU1NmNiNDcwMzJlZThmYzY0YTkzOWRmYzRhODcwZWE5NDE5YjE2MTc4MTA5ZjE5NjZhYjk2NGRhMzRkZWJjZjAwY2M0OWY1N2UiOiJkYzYyY2YxMmI2ZDA0Mzk1NzhiNDU3ZTUxNmQ4MjA1ZSI6ImU3MDBjZDkxNzkyM2IxNmM5Njg3MTJiMmZkYmYwOGJlMWI1YzNiNWQ5ZTQyY2M0NTQ2NTU0OTg5OGRhYTA3YzQ0YjRjZDMyMWJhMTZhMzhhZWI2NzIwZTIxN2E1ODQyOGUzYTRjYzEyNTkyMGNiM2ZjOTJmMDM5YjY2NzE2NTQzYmFiNzFiNjRlYmVkYmIxZTVlM2U4ZmJiZWNmZjMzODVhYjBhYjE2YjdmNjU1NGI3ZmJiM2I0YzkyMzA3YzY1NDM2MWY5ODRkNWE2Y2I2OWI4NzA4Njg0ZDkwYmIxZmRmYWJjMGNiNTlmNDJjMmIzNzA3YjM3NTVhOGM3YWJmMzQiOiJhZGY2MGM0YWZmYjJhYzc2Y2NlMjBjZjlmMzAyYjkwOWJmZGExYmVkYzYwYmUyMWI1M2Y2NWQwYjgxYmZmMDhmN2U5MGVjYWFmMTJlZTFmOWQ5MjE5MjZiNzVlMjQ0YjdlODM1N2MxY2ZjMjYwMTNhNmQxYzg3NGVkMmU1Y2QwY2NlMDEyYmJmZmYwZGZmODViMzcyZDkyYzE4ZGNlODg3YzE2NTFiNjQ2N2YxNzNhNjdhYzhjZWExOTRhNmM0MWU3Nzg0MjY3NWY2MGNhY2ZiYzljODE1OTdhMDg5NTlkMTlhZjYzMmQzYzE5MWJmNjk1MDU2MjBlNDI5MGJiMDQwIjo5NjoiNjIwOWMwOWRkMWI3ZWE4NWQwMmViOWZiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YWVjNTVjN2U0YmIzNmMzMmNiNTQzYjU3Y2ZiYTNmYyI6IjRjZjE0NDNhNTQ0OGZkMDllMDllOTFiN2NjNWY4ZTAwZjUzZjBiNzVhNmIxN2RiNWFiOWE3MjExNjdkZTVmN2JjNWRlMWZiNzExYWNjZGFmYjdmM2YxYmY2Yjk4MzkzZTVmMDllOTA5MWUyNmQxMzQwMTIyZWRjOTFmN2U2MGY2MmNhYTIxOGYxOTI3YzhmMDAzMmJlMDc1MjUyMGFhNjUwZjZmMWRkZjQwNDEyYzk2ZDQ5ZGNjMjI4N2VlMTc4MzQ1MDRmMWRkYTNmNGE3MjNlMmZjZTA2NGYwYjhkYWUwNzg5ZWM0NTU5MjJhMTQ0ODg2MjNlM2FjMTBiNmUzMTIiOiI2NjY5YzMwMjJlMDgyMDYzNGE5NWVmYTJiNTU3OGU5MyI6ImY2YWU5YjFhYWJhMThhY2I3NDFjOWZjNjRjZmJhMzg0MWY1MTI3YjFjZGE1Y2JjZDQ4YWY1OTg3NDI4ZGFhNTc4MmQyNjc2YmMzZTJlZjIzOTM2ZWMyOWE4MGQ2YjUzMTAyODJiMzliNzcxODFkYzY4MDc5OWFjOWM4MTI1ZmM0OGFmZDE4NWNiYTJjYTg5MDBiZDlhMDAzOTc4N2I0ZjNhNjg0NmYzZWRmNWY3YjkyMWRlYzI2MDhmZDNkZjY3NjAwYWUwYWJhOTM3OGRhMDAxNWJkNTdkNjZkMjk5OWJmNzUxODA2ZDFiODkyMTQzMzJiYWM1MGY3MjFjYTk0NzQiOiI3MjBjMzJiMGQ0NTRmMDg2YWYzNmEzMmNjNzI3NGUyZjJmZTA4ZGI5Y2YxY2VmZWNjMTRiNDJiM2U1YzU3M2FlZmE3ZTllMWVlMDA0MmVlZTIxMTA0ZGMzZTRkMTliMDEyMDk5MjgwYzVhNTNlNDBhMGJmNjYyZDgyOTVkZGU3NDMxNDNhMjhiZTczMDU3Mjk3NjdhMzdjYmRmMDhmYjNjODc2Njc5MzlhOGZmZTQ0Yzk2YWQyNzJlMzBiNzVhYWZhZGEyOTYzYmI5NjM2ZjE4OWMzN2Q5NzZlZDFjNDU4Mjk1ZmU4NWVkMTk2NjJjNDYzZDdjODE1NWU5ZjA0MTE1Ijo2NDoiNGIzMzQzYjYyNzA5NWY2MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODYyOWU4MDY0YjNiYTJiOTViYzIwZGQwNzVmOGU5MzEiOiI4NTg5NmRlNGI2NDU0YWNmODU2OGNjZjk1YWI2OGE2MzIzMzBjZTcxY2E4YjRlN2JmZTI2YWQ4ZDdlMmU2YjYzZjIwMzJlMmNkMzY1OTk5ZmZkMjRlY2UwZGYxNjkwNGQ3NDlkMDZlODI5YTI5MWYzZDA3ZmNjZWUyN2Q5YzZmM2ZmM2ExMzlkOWUzM2YwNjYwODAzZGU4ZmU3OWRjNmFkMjkxZmFkNDdjOTM1NDM1MjJhMWMzOGU0MDY5NzQyNmE5ODU1MjU1ZTNlMGFiY2I4NGQ0NzRlYWQxNTM0MWM2YjIzNWNjZDc1NWU1OGZlNmU4Nzg5OGQyMTZkNjVhYmFjIjoiZGM0YmNlZmUyODRjZmM2MDZmMzliMDU3YjdkZjQxMWIiOiJhYmZkMGNiNmZlZTg1ODhhYTY4NjA2YjdlNDg3YmI5YzBkMmJkMTEyMDU2MTFhNmYzMGE3OGQ5Y2NmMjhlODI3Y2VmNGU5NjZmYTI0NWU0YjdiMzk1MzNhNGJkMDAxNzZjZTNjOTc4NThiMGM4YWJkZmY0YzU0OGM4MzViZjE5NjJhNjExNWM0Y2U3YzA1YjFjZTVhYTI5YjQxMmU4MTZhYmM5MjViOGNiOTk4ZWI0YjY5YzQzYTdkZGExYjNjZjBkNzI4MDcyZDQyY2I1YTQ4OWRiNTIxNjk4YzVkYWZmYzMwMTM1MzdiYmY2MjJlZjc2YTJlOTYwODliN2Q0Yjk2IjoiYjI5NWNhMGQ3NzA3ODkyZmIwODUzN2Y0MmQyOGE4NDRmNTg3NzE3N2YxMzZiNDYyMGY2OWIwNWM4M2Y0M2JmMmU2MTMyM2U4MDA3NmM4ODY2MGY1Mzg1MDYwMjI4YmRiOTFkODY2Njg2ZTY5MWNjN2U5NmZkYWZmNDFmMmNhNWY1YjVkOTNlY2VjN2JiYTgyNTE1YTZlMGJkNjA0Yzk5ZWY5M2QzZWEwMTNkODk5NDY0NTU4YmM4MjJiZDc2NWViMWNhMmI4YjhhN2Q5NjFhNmEzMTZiZjEzNWMyMmQyZWU1NTJlNjJkOGJiYzViNjBjYTMxYmI1M2NkZTgyZmI1ZiI6NjQ6ImQyNmNiYTExZjY4YTVlMWEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRkOTAxZTU5YTQ5MWM4NmJmNTM4ZjdiMzgyNDdiYjIxIjoiNGMzNzBhOWYzMTZkMjU3MDIxOTU0MDlkOGU3M2JiZmE0MGFhMTVjMmIwZWE1NWRiOTI1N2E5YWU0ZThkY2NhZDE0NTg5NzE4NzQxYTc4ZTVhNzRjMjZhODAxODU3ZTM4OGM5ZjE0MWVmN2RmMDhiYzAxMzg0YjJiMjMzOGMzOGFiY2U1MWQ1NDcwNTZmNGJiYWY3NDg0ZjllZGM5NmRmMTIyZTcxZjEzMmI3YmNiNjQ4NDIyOGMzYWUyZjc0MWEyYzhiOWIyMDhiNmY0OWIwNzA4MTMzNGI5M2M1MDE5Mzg4MDhjZGJkMmU0MGNmOTVhZTRmMjdhMjllMTEyMTQ4MCI6IjM5ZTI3ODhjOTY5N2U4MmNhZTBlMjIyYTllNDEzZDhmIjoiNDhkN2QyMGU0MjRkZjNjM2VmY2VkMjllODYwNzcxNjQ3YWUwMTMxMmE5NmU2OGQzM2Y5ODJjNTQwZTc0MTYwYTdmYmRiNjIzZDRiMTlhYmIxODcxZDc0YzZkYWRjNTYwMzg5NTRiMTU0Mzg5Yjc1MmJlYmM0MGNmNGVlMTUwNWVjOGQ4NDRlMWEwNGRjYWU0MzBiZWZkYjA4MWNjODQyNTJlMDg0MGY1ZjUxNDZmZmU1Yjk1OTRmODU2YWZjMmVkYjMzYjNjNmY5MDQxYzk2MzFjNWUzZDgxMjk1OWM1NTA0OTM4NjM1ZjcyYzZmZTI5YTI1YmJmNjZhNGVjZDIxMSI6IjI2MjcxODY3MWRkMGUyYzlhNDBiOWQ3Mjk3YzdmNmEyNmNkNWZlNGYzMDE5OTlhMzIwNTk4MTI3MTk4OTZkM2EyZjUzNTBmNmVjMjBkOTk5ZmM4MGI4ZDdhZjVhNDIxNTQ1YjMyNWRlOTE4MGYxNDUwNWYwYzcyMjUwNjU4YTUwMTQ3NjhmZWQ2M2FiNTUzZGUwZmIwMWFiMTM2ODM1NjA0M2Y2ZDFhNmM5OTUwYzgwZTNkOWQ0NjM3YmJlZWE0NGM5ZDU4YTQxNDhiYjEwOTc0ZDUwN2M2MmI2N2NjNGUzN2VhZWJkN2ViOGU2NzA3Nzg1NmNjNWQxNzAyZjhlMmQiOjY0OiJiZDgxNGI0NTg0OTQxNjgxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZjU0MjI5MTY3ODYyMDM0ZWY2YzVmZjRhMTI0NjY5NyI6ImFmMmM4OWQzNjAwMzI5Nzc5YWJmYmNmNWJlOGJiODNjMzU3ZDRkMjQzNWZjOGY0YzQxM2I5NTZiODk4ZDIyYThhODg5ZGI5ZTJmZjVlNzIyOWQ3NDk1NTc2OTg5Njk1YTBiNTJkNzk2ZjlhMjNlOTU3MGI3Y2FlYzZiNDYwNTk3NDljMjlhMjkzZDMxYTYyMjRiYWFmNzM3MTFiYzBlNGE1ODdhYmU5ZDAzNzlhZGVjNmRlMDRjZTQ0NDY3NmRmZDg2NzJlNjY2MGNmYzc5ZDdlZTJlNzYyNWNlNTdkZDQ2ODFiYWQ2NmFhMjliZWEyYmFmOTM2MTIyYzNkYjE3ZTciOiI4MTY4ZWY4ZWYyNzhjODMyZmMwZWM4NDZiYzlmNjJlOSI6ImFiYjllZDI0MTM3OTE1MjY1YmRkYmQ0YjYzZjFkMDJlZmEyYTk5YzhjMzczZjE5MDc3YzdlMWMzODlmZWFlMzZhN2FmNDJjNjYxYjBhZGM1ZGM4ZTRiNTUyMGQzMzRlOGUwZTExMmQ0MmMyOTc3ZmEyMzQ4NWMwYTg1YWVmODNmMWU1MmQ2NzQ5YmQyOWNiZWJlMTRhZWE2ZWUxYzEwOThhYTk2YzYzNjBiMDE5Mjg5NGJiMjAwMWM3YzBmZWQ3ZjAwYmI4NDk1M2MyM2JmZGRhMDA4MThkMTU2OGZiOTRjMWJkOTcxOTgyZDZjMDFjMTJhMzVlZjdhZjM0Zjk0N2YiOiJjZDZkZWRlMjU0MzNmZDNkYTYxMzcwMDEyMTliNTdhYTU0YmRmNjAzOWE1YThkNjYxMzgxNzFiMDA2MTk0ZmUzZTEzZDQ4NGU1Y2Y1N2ExYWNkYWE4ZTc2ZjAwMWRmN2JmNDFjYmVkMmM1NTYxYTM3YTMyMTEzZmExMTZkMDkxODE2N2MyOWRkOWU3ZDQ2ZjdjMThkOWRiMzNkN2YxYmMzM2FjMjFkMTU5ZGRlYzU3YTJlMTU4ZjBjMDk5M2MxNmRiZjUwNTgyMzcxMTAwYThkN2M1NWNkNDdjMDM0NzNjNTc3MGFkNTYyMjQwZjc1NGM5OWQ5NWVjNTkzZGNhMjg0IjozMjoiNGFiNjMzNDkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI3YjUyZmU3NGM1YzMyNjZlZGY3MzE1NzhkMjhhNzJlIjoiMDFhNGI3ZGE1N2MwZjdkOWFlYTUxMjgzMDA0YjIzZjg5OTY2OWRjY2Q2ZGJhZWM5Y2Q2ZTc0N2M3YWRiNTI0MzJjN2MyOWQxNDExZWMxZGY0ZTVlMzMzMTFhZDg0MjE4MDc1ZGFiZTE3ZjczYzk1NTExY2U3OTUwZjA4YjYxOGZlZmY1NmJkNDUyYjMzNDU1YTFhMDNjYWE4MzcxZGM3ZmI5YWViZWRiM2NiNjUyZDk0ZTA2YmQwMGE5OGJiMDZkMzBiNTA2ZDQxY2I1MTZjNzU5ZjZkN2Y3OTM0NzJlNmQ2ZGM5YWU1MGNmM2RjOGIxYWQzZDA1MTdjNGY1NTVhMyI6ImEwMDU3NTBlOWY4YzY4YWUyMzg2NjhmMGE4ZjAxNWJhIjoiODA1Y2YzNjM1ZjlkODRjNzYwOGMyNDJlZTIzYTQ4MzdkZDNmMjYwZGU5YWZkNjE2NmIwODE2NGEwMjU2MjAwYmU5YjUyZTUyNTlhNGE1NDE4NmVjMDY3ZGRmYWQ5MGY1YzRmOTJhZmQxYzdlNGYyZDg0NDMzMTJiYTNjNDgxOGI2NjQ0MzlhMDI2NDRlNTU0NjcwNDUwNzFhYTJjYzc5MzlhOTQwZTg5Y2M1MmM4YTUzNjIzYmM2NDczYmY4NDNhNGUwZjAwMTQ5YjJjZTE1NDNhNjU0MGFhMGQ5YzJjNWI2OGJhMmJkNTc5MTA3OGRlZWQxZGUzYjVmNDgyNTdjNSI6ImQ2MTI0ZGEwODk2ZDk5ZmM3ZjJjMzY4OGZiY2ExNjRmOGZlY2Q3NWI2MjYwMTYyYzRkYzJkMjc3M2NlNzVjZjQxYThjN2E1Nzk5OGUwYTdlNDljYzcxZTVhZDZhMDRjNzQxNWY4ZDRmZDExZjEwMzVkM2EwMmVkNzQ0MzQ1ZDc0ZWJjOWM0ZjIwMmY2NWJmYTg4ZDU1Yzc0N2ZlNzc3MjI1ZTIxOGYyMTQ5ZGEyMmI1M2U2NTg0ODIzZGJkYTQyY2MyZGRhNTZmYzcyYjc1M2YzOTIzYzQ0M2ViNWM2NTY1MTVkZDgyNGQ4YzA4Y2M3ODE1MjIyNmVkOGMxODA4ZGIiOjMyOiI2MGQ4NjI4NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2EzNTAxZDlmYmI4NmFiODBmNWZhZWFmODg3NmI3YzEiOiI0ZjBkZmJkMmFlYWI3MGM4MDgxNGExZjI2MWExZmU0NDJlYWNmZjVkMjY3ZmQwYzBmOTM3NTc5MTk4MTBmNjYxMDExM2YxYjQ0MjI3MGFmY2M0N2YyZmEwMWFiMDE3OTc2ODNlYzkyNjc2OTFhMGRlYzQ1MDMzYzU3ZjVjYmRmY2FmZGYxNTRmYzk5ZTYxNDAxNzZlZWE5MjUwM2IzZjZmZWU1ZGZhNWFhZDA1ZjgwMmUwOGEwOGYxMGU0OWE4YjMyYTUwYzAyOGYyYmM3YWE0NTFiZTM3NDdkMTBiOTZiM2ExMTA1YzY3YzUxNjdlY2NkYzE4YjRhOWIwNjEyZDAzIjoiNmQ1OWJlMTgzM2U3NWNlN2Y1NGRkYzkxYWQ2ZjUxODciOiIzZTU1NmIxYjMzYzQyZjFhZDZjY2E2N2RhYmM2ZmY3OWQ2Y2I2Njc1MjczMzU4NThlMjZjYjRmNmEzZDg1MDNlYzQxNTk2OGJhOTdkMmQ3OWEzZjgwYzFhMTBkNzUxNzRlYjUyOTRjY2U4Yjg5MjI0ZWJhN2RmYjI1OGZiMTdjYjVjNWRiN2E5MTRhY2UwNmU5NGNkMmYyY2FmZTNmZWJjOGFkYzRjMjI2NGFmYTJkYjJjNjM1NmU0YzNlODY2NzM5M2E3N2EwYWZjMzZiZTY3OGQ1YzBhNGI2M2FlODJkOTkyMmJiYmM2MDU1OWYzMzFlY2U5OTQ3YjY3NDY5NDY5IjoiNjE1ZWE0NTM1ZjFlNTc5ZDdhYTQ1YzAxMTAxOGYyNzJjMmUyMzRjM2VhOWUyZDEwMmNmYWE0YTQzN2M0MWU2NGJkZWY3YTIxMWVhNGQ4NThiZGI2NTYyMTVlNjAwOTExNDM1ZWY5YzhkYTY4ZTgyMzllNDc4MmNlZDdlN2FkZDA2M2YzM2Y1YmM2MmI4NWQ5YWU0NGVkMWIxMzk1ODAxMThjNWZjMDU0ZWFkMDgyNTdiMGE5NzYzMmU4YzUwM2M2MjE5Mjk0YWY0MjNmMGRlYjM2NzU4ZTA1ODU3ZWJiMDVjNjgzNTk3MjQ4ODMwNmViZmVkZDJjYTRjZTNiMmM0OCI6MzI6Ijc0YzZiZjBlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTk1ZGRhZDJiMGRhMTk1ZWE1NGE5ZGFkMGY4NmMxNjEiOiIiOiIyNjVhYjE5OTVmYWM0ZmNhN2MyYjI2Yzg0ZTRhMmRiYyI6IiI6IiI6MTI4OiI5MzBmNzE5MDM0Yjc2YzIzMjYxOWVmMjc5MmZlNmU2NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjEyYmU0OGU5MGM4NDkwNjM2MzdiMWMyYWIwZjJiNDY3IjoiIjoiMDAyMGMzZGZmMmY2ZjNhY2FhYWU5ODJjZTM4ZjYzYzMiOiIiOiIiOjEyODoiYzg4OTFmMzJiODAxNTAyNGNhNDI1MzZkNjMzYjE4NjMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4ZTc5MmZjOTE2NzVkNWVmZDRkODBkNWEwNjM3OGQyNCI6IiI6IjE1YWQ2M2I5NjlmOGUzMTNlYWMzYzcxN2ZmOWE5OTRkIjoiIjoiIjoxMjg6ImRlOWEwNGIwMzA5NTRiMDE0MWRkNzhmZmM2NzMyM2Q2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTY2OGNmZDQ1YjZlZjhiNzY2YTRiYjE4N2QwODI0ZDEiOiIiOiJhMTExZTk0YTY0MjZhZDliNDM2MjEzMjA1MmVhZGY0YSI6IiI6IiI6MTIwOiIzYTMzMzFlNmE0MWNhZGEyY2NhOGU4NTYxMzU1NDkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMzZlMDdmMjY4OTgzMmI5MTRlMGI4MTcwMTBjNTI4YyI6IiI6IjY1NDEwNGY5ZDE2MzQ4MjMxZTZiYTZmZDMwYzFmMDJjIjoiIjoiIjoxMjA6ImJlODk3NTgzYmFlMDczZjQyMTM4ZDY0ZTYyMmMzNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI1ZDgzOWE3MDlkOThlZjljMGM5ZTc4ZWNlOTYxZWJhIjoiIjoiYjY0NTM3NjA5MDQwNzkwZmY2NDhkNTE0MDY3MTBiOWEiOiIiOiIiOjEyMDoiNGQ1ODU0YzY5Y2M5NzNiZThkZTQxZDU1ODQ0MDdjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTU3ZGQ2MTlmOWYxOTQ0NWMzNzRjZWRhOWU5YWMwODIiOiIiOiIzNDg4N2JlMDNiNGQ0Y2E4ZWEyMjYxYjYwMGFiMGIwZSI6IiI6IiI6MTEyOiI2MGUyZDUwYWRmZjcwN2Q4YjI3OWJkZWRiMjc3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTVjOWEyZGNhZjU3NmU2NzgyOGU4MDYwODJkOGU3ODAiOiIiOiJmOTM3MzJhYWM5NDQ4YzRhNDI3ZTYzNDA4OWQ3ZWRjYyI6IiI6IiI6MTEyOiJmNjdlZDFjOThiZDJjNWYzYTczOGU3NWYxNWFjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGEzMGE4MTZlOGQ0ZDg1ZDQwYzhlNGQ3YzkzYjc3N2UiOiIiOiJiZjFmMzMyYWExOTY4MmQwNWNmOTVmMmIwM2QyNmFmOSI6IiI6IiI6MTEyOiJhY2ZiMmY3ODg0YmM0OTZmMzA4OWU1MGRiZjQyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjQ1YTE2YmJhNWZiYTM2MjcwNDE0OWRjNTZiYThhMTMiOiIiOiI2NGNjYTg1MDQxMjA5MWJmNGUxMjBjY2Q2MTJkZjM1MyI6IiI6IiI6MTA0OiI3YjFhZGMyM2FmOWJlMTg1ZTVhZTBiMGYwZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBjYmNiYzFjNzJhYTkwZTNlYTdlMmZlMzI4ZDc5NzIzIjoiIjoiMmZjNWZkOTY0YjQ1MDgyNTQ2NjM2YWUxZTIwOGE5MzciOiIiOiIiOjEwNDoiZmUwOTFhNzY4YzczMWU1NGUyMjM3YmZkYzQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5NDI5N2ExYWQzZjBjMzMzY2Q5YjA4N2IxZWZkNDNjMCI6IiI6IjUyZWM5ZGM4MjEzMWQ3YjFjNjljMDFmZWQ2YWFkYTEwIjoiIjoiIjoxMDQ6IjVjOTI3ZGRhODU1Yjc2YWI4ZmMwNzcyMDNiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxZThjZjMyMDA4YmRmODY3ZjBmZjc2ZTdkN2VjMjFiZCI6IiI6IjM4NTRiNzQxMmRlNzJmZWZjYzRiMGMyMTU1ZjY5MTBlIjoiIjoiIjo5NjoiY2M4ZTdlY2NjMDU2YjA2Y2ZmYzMwN2UwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyY2UxYTliZDkzZmRkZTJhZGZkOGMyYzE2YTM5NWI5NSI6IiI6IjY0MDcyMzEzZWQzNmVlZjgyMDlmMDc5ZmE2MjJkN2YwIjoiIjoiIjo5NjoiY2Q5ZThmZmMxNDIzMjcwMDE1YmY4ZThiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMTUzNTRhZDNkODc0ZmU0NzI3MTllYmNjZDQ1ZjEyMyI6IiI6IjFiMjAxMzE1MzI5MGVkZWY2MGE2YTQzOGJkNzUxN2RlIjoiIjoiIjo5NjoiZjY1YTg0MWVkNTEwYmVjZjUyYjFlYWU3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNGVmMTI5Nzg0Nzc2NjQ3ZWIzZmI4ODk3OTE1YWI5ZSI6IiI6ImY3YmJlOWY2OTkxNTY1NDk5MzVmMmI5MmMxZGRhMTYzIjoiIjoiIjo2NDoiZGQxMGZhNjRmZDUxMjMxZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWQ0NDcwMDUzYzQ2YTU3N2JiYTcwMDAwNzVlOWJmMmMiOiIiOiI4NTRiNzY4ZmRkNzQ5MmMyMTYxOGNhNzE2YmM4NzkwZCI6IiI6IiI6NjQ6IjFmM2M3MzcyMjAwNjAyM2EiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVhODdkNjc1YTBkNDA2YzU3Zjc4YTI1MzFiZmMwYzlhIjoiIjoiMDkwNzUwM2ZjYjA2ZWUzODQ1MjZmNzIwNjE4MGEwODAiOiIiOiIiOjY0OiI2NWQ1NDY2MzkyYjYzYmY2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkM2U4ZTI3NTY4ZTZlMTdmZjgwN2NjMjA3ZTVkNGVlYSI6IiI6IjE4ZTUxY2RmYjRhM2E1ZWJjN2IwZDdiMTc3MjdhYTk1IjoiIjoiIjozMjoiYTdlM2Y2MzciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU5NmE2MDIxNjRiMWEwYmI1MGVmOTFiY2UzYTk4Nzk2IjoiIjoiMjAyNWU3MmJkNmE1MTE5ODBhOGRkY2UzNDU2NWQxNmEiOiIiOiIiOjMyOiJmODRmOTJkZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDAxOTRiNmVlNjhmMGVkOGFkYzRiMjJlZDE1ZGJmMTQiOiIiOiIzMmVhODk3MGE4Y2I3MGQ2ZmZiMzk3MmExNDZjNjk4NCI6IiI6IiI6MzI6ImVlZjRiOTdhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODY5Y2U2NWU1ZTVlMTJjNjIwMDc2MzY1ZjE0OTc4NGYiOiIiOiIzMTdiZjA3ZTgzYzJlOTcxNzg4MGI3ZDA4MDk1N2ZlMSI6ImVlMTg1ZDczODI2MGRlNjdmMTc5MmE3ZDU0OGVhNzMyNjdmYmJiNjU0M2JjMDgxZmFjNDNlMDBlNmNjYTkyZDdkNjQ2ZjI3MDU0ODk0NjY0ZmZkY2JlNjM1ZTM0Y2ZhODAwOTEyYjU5ZmRhYTYyNGIzNmM0NGM5ZmY0ZjE5M2QzYmUyZjk3YTc4MjBhNmQ0Y2VhYmU5NjcwOTFlZjY3MjA5OGJhZjgyZGQzYjY3MWNhYzRmZDRmNGIxNGU0ZWUzODhmYmRhYWZiNGRhYjIzODVkZjRmY2EyM2E3OGQzMWYxMWJjYTE1ZWVkZDdjYWM3Nzg0ODQyNTg3NzgxMDZhMDciOiIiOjEyODoiYWRkNmM4OTE1M2M0YzBlZWFkMDNkZjQ0NDg3NzQyYTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwYTA1YmFlZTkyN2JmMjNkZDJmNGI1N2I5MGZiNjQzNCI6IiI6IjgxNDdlOTlkYzllNDYyZWZlYTljMWQ3ZjMwYmRmNDVjIjoiNjQyNGNhN2ZiZjI0YzZjM2IwYjVlYjlkNzY5YjI2YTk3OTJjOTZhODU4NWRjNTk2MjA4YWU2Y2ZjMGIyNjViZDhkMjZhZjMxMDI3ZjI3OGJiOTJhOWUzYjM2NWJlYWU4ZDk2NGVjN2E0MDk2NTEzZjg0ZmE3M2Y4NzM5ZmE3ZTExZDU0ZDY3OGJlZDE5NTQ2ZDJiNzFiM2QwMTY2YjI1YjQ3YWQ3Y2ZhNjlkNzQwNTdkODg5MjU4YTc5NmE2NWYyYmY4ZDNiYjE1MWY0ZTcyMWQzOThlNzQ1OTRhMTg2ZTYxODJjMTZmZTRjODgxM2RmZWM2NzIxNWIzYzRhOTRjMCI6IiI6MTI4OiIwNWZhYzU1MjBhOTlhZDdmYjQwN2M0ODk5NWEyYzMzMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUyOGM0MzUyMTE3NDNhNzg3MmU0YTBiZDc2MDIzMzZhIjoiIjoiMmRkYmVlOTRmY2JmYWNlYTA4MGRlZDQ2OGY2NzE4MGMiOiI2MzE5MGVmNTQyNjU2Y2MyYjY5YTliMGRhZjhkYmQyZDM4Y2Q3NWYxN2I5MmQ2ZDg5MWMxN2IwMzM3YWQ0ZmU0NTM5ZDkxNTQ3MjJmYTQzMDc4MmExZDc5NjIwZTk3NDY2MTkxODE2NmUzOWM0NTNjNWE5ODc1OWExM2QyNzY2MTM4Yzc3NTBlNmNiZGM3YjZkN2NiZTQ0ZjNmNGRlN2JiNTYyZDliY2U2ZTZlMmU4MTU0NDQ4NDJiODliYThiNzM0NTQyMThjNDgzZTU3NGNhODg2YTg0ZThjOWFhNmY1NmRkMTU0MWE3ZTM1YTRhNWI4ZjZhMDVhZDViYjAxM2U5IjoiIjoxMjg6IjJjZTZkNzRjZGE0NjYzNTRhNzM2NjM2YmYxOGFjZmMwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmIyYmVjMTZjN2QzMjZhMzVhOGU0YzBiOGMyZTM2NzQiOiIiOiI0NTczZWI1NDQ5MWVkOTFiZmEyMTg1Yjc2MjExNWJjOCI6IjdhNGE2YjMxMTRkYWJjNTBiMjAxNDcyYzVjYjEzYTc5NDMwZjc4ZWVkYjJiYTg0OTJjMDFjZTEwYTc0ZDA4NTY1YjliZjk4NzRiYjhmYjcyZjY5NGEyM2JhYmRkMDg2ODRjYjY4ZDdlMDllNjU4MTM3MjhhYWE1YzQxZjljMmIxMGQ5MjFmODI3MWUyMDBlMGM1MTljN2M0NmY1NzJiYzlmZTNmMjdlMTNkMWU2ZDdiZGE0YmQ2NmMxYzRiMGZlYzhjNjhhMWIwZWQ3YjA2NTkwMDlkYzg5NGFkNTVlMDcxMmRkZDA4MzczMTU3MzRmMmJjM2I3NTcyNDFhZjM1YmEiOiIiOjEyMDoiNWY1ZDQ2OTU3OTViODU4MGIwYmM0MTRhODFiMDAyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODg2ZmIxMjU1NGIwNzVkZDk2NjNlZmQwNzZhY2JlNTYiOiIiOiI3ZTdhNzM1NDI4NjhmYzI3YTAxODY1YzNhYTYzNWFkNSI6ImNiMjVjMmYwMjljN2E4NzdhMGFhNTY1YzdmNzM0N2IzMTdhZDUzNDgyMWVkZWVlYTgzODk5NmRmYzQyYjEzNzg3ZTViYjIzNzUyNWFjOTI2Y2E4YTZjNTA3ODIxMGY0YTI3ODYzZTgxMTRjNzI4ZDA5NjUzZmE5M2FlOTkwZTk5ZjBjODU2YmM4MDk3YzJjZDMzY2RjYTFhNDA3ODk3ZTJmNDk1ZDJlNzUzNTZhYWJkODkxNzAyZjI1ZmYyMGU2YjZjOGE3ODVkNzRiNzhhNzM0ZTMxMWZkMjM2ZjllOTcwMjAyNjc0MDA0ZWU0MTUxODc5ZDU5MzQwYjIwYWEyM2IiOiIiOjEyMDoiODI1NTExNmVlMWUzY2Y5MzY2MzMwMTdjNGRlYzNhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTIwZmRmNGIzOWM2Mzk0N2Q1N2EwN2VhYmJmM2YyZjUiOiIiOiI3NzQzMWViYWFkNTNlNDJjYTdlZWFkMGQ0NWU1YmQxOCI6IjExZjgyZjllZjdjMjE2MWJhNzNjZjdkYTgyYzUzOTdkYTVlODI3OGRhMTgwYTk3NmY0MzIyMjQwMmU5ODNiMDU3MTcxZjc5MzY0MWE4MzQzZDYzNjZkNmNjOTI2MGRmZThiZWNiODM5NmI1YmNmYTBmNDY5MDhiZDgwOWJkYWI2MTEyNmNiYjhkNjNmNjAxOTY1ZmI5ZTRiM2FmZDY2YzU5NGRmZDM5NGQ0Y2YwNmY3OWYzNjE3NzFhODVkY2VhZDZmNDVkYzdkZjEwZmE0MzQ3MzZlYjEwOWE3NmZlNmNkYTMyYzU3NzNkNGRiNjQ0OTQ5NGYyYTNmNmM4ODRiZmUiOiIiOjEyMDoiMTI5MWNiZWExYTlmOGIxNjZjNzMwNmZmOWViMjgxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTE0MDYwNTM0ZjUyNjg5NWYzMGRmYjQwMDczNTZlYTciOiIiOiI1ZWQ3ZmI1OTYxOGVjM2QwODFlNjBkODI1OWEzZjE4NCI6ImE1NjU2NmE5OGQ5ZDRmZGNlYmM5MzJhZGM0MDVlMGI4MTkwZDUzN2Y5MzE5ODMxNjgyODNkMDQzMWU3NTg5MzMzZDQyZjJhM2Q2ZTQxZjI2OGU3YjU2NmNmNDg2OTRjZGNmZTAxZmJiOTE5ODgwNGFkMzllN2QzODcwMzk1NzVjNWRlNzg3NjEwYTIzZWMyNjU1MDVhNDQ4YzNhNjRkZGFjMWIwZDhjNTY3ZWVmZTVjM2MyZGMxYmIxNWFmNDViNGJkOGZjMmUxNTA2ZGRlYjJlMzllMDRmNzJmZDI0YTY0Y2JiYmM5Mjk4MDBlMDY4N2I1M2ViODliMzA0OWYyNzEiOiIiOjExMjoiNjJmNzcwYjM5ODUzODhhYzM3ZTE0ZThkNDY5NiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY5N2NhNGU5ZGU1ODBiNTI1ZDcxNDllOGI2OWU4MDkzIjoiIjoiZTg0NDE1MzczNGVhZWJkODY5ODNhYTNiZjUwMDY4ZGYiOiJjZWRjZDVmZmViNzk4ODgzN2MzOGEwYmU0MjM0YWIxYjAzZjE0MzY3YTFhMzg1NGI2ZGM5ZjMzZWI5YTg3YzQxMTMyNmU1Y2I3ZDEyZGM3MzBjYjZmMzYzZGEyYmE2OGFmZmRmYjY1MWZlNDk3OTQyZTBkZDU5NjY4ZjU2YzIzZGFlODBiN2JiZjkwNWQzNmI1MDFmZjAzN2ZjZGZmYTQ3MmVmYTRiY2MxYzk3NWI2N2U1ZDdmMzQ4ZGI3M2UwY2U2NDhiNDRlY2M1YjViYmJkZjMxMDFiZjMyZWE5OWUzYzhlODk5MWM5NGZhNjA5YzkzZDRiMzc1YTQzODkwMjNiIjoiIjoxMTI6Ijk1YmVjYjA0Y2QzOWM4NjhjOWRiZDFkNGU1OWIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZmE5MmNjOTdlZjQ2OWVmZWIyYzI1ODM4MTkzNDM1YSI6IiI6IjA3ZTY0OTJmMjM3N2MwNGE4NTA0NWQyNDk0MGZiZThmIjoiMGYwMjFmYjc4N2M2ZGUyYmUwNTRiZGIyNzQxYWVmODJjZTM1ZDk1MWRlMjk4NmM4NmMzZGFjNzdlZTA4MDRkZmJkMDEwZDMzYTVkY2MxMDk3NjlkNGI4ZmYxNDcxZWI5OGZlOTE3YzdiMGIzNzRlODA1MzlmMmY0NDMyZjkyYWE1NWQ4Mzk4YTcxNTEwYzJhY2Y4NWM1NDk3NWZiMDlmZjU2MzhiOTM2MjgzZWZhM2MxZDNiMDU0ODY1Zjk3Njg1ZDZiZmEwZGZjZmZkZTNhMjA1MjViNTMyNDU3M2I2OWRkZTIzMGVhODdjNjg1ZTRmNmI1YzNjNGM1NTgyOGE4NiI6IiI6MTEyOiIzOTdiMmIwZGFkN2YxOTI2YmZjMjVhM2JhMGNhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTYxZjhhNTc3N2VjM2RhMGMzZTI1N2Q0MjEyODY2OTYiOiIiOiIxNDg5NGNjNGZmNzFlMjQ5ZjAwNTNiYmMxNjgwMzMxZiI6IjlkZjQ2ZGRlMjU3MDU0MTYwODU0MjQ4ZTcwNjI1MTgzYmY5NTdlY2VjMzZmYTRmNWE3OWExNjUwZTA0YjUwMGY3ZjJmYWI0YmI4NzNmMGU4MTNmMGQ2YjE3NjEwYmRlMGRlOTU0MjdhOGUyZDEyOTNkY2RkZTA1M2Y1YjFhNWE4MWFmMjVkNTUzMjg5ZTg5ZTc3ZTRhZDdkMGExMTkwMTUxNzI0NzMwMTQ5MDUwYmQwMjFlYzYxYTA4Y2UyMjcxMzkwMTYxYzc1MmRmOGI1ZjYxYzMzZWUzOTM2NmRlNGMxZGI0MWQwODVhYjlkZDg4ZTE3MGU4YzQxYzU3MWUyY2YiOiIiOjEwNDoiZTA2MmFiNzk4NDIyMWVkMjI2YmUzNTM3MzEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYTJkMDRmNGY1MjU4YzYzNjNiMTIxMGM5MWFmZjdkMSI6IiI6IjZiMjRjMDMyNzNkY2ZkNTA4Y2VhZDJkZjBjNjVlZjJkIjoiODFhMWIzMjZmOGYyMmJmZWNkZjFmMzg2YmY4ZmU2NzhhNDI3ZTM4ODY4MDFiODIzYTM3ODYwYjlhODMyMzU2NzI0YjFkMzUyZDYyNTBjZjhlOGY4OWQwYmYyMzE0ZmQxMTQ2NGMzYjQ4NzE0NzhmMGJjMjkwZWUxMDk2YzhmNmNiNTQ4NDE3NmQ3MDc2MjI4OWI0NDMwOWQ2YTg4ZTQ3NTAxODVhYmYzMDkwMWJjZjhkOTUyZGE5YWJhYWY5ODA3YzBjMGVlOGJlMmIyNDdkYmJmZDE4MmI4M2Y5YmZhNjdjYTNiZjQ0OGMzZjVhM2RlM2MzMWIwNThjM2Y5NDRhOSI6IiI6MTA0OiI4MGRlZTA5ZmVkNTE4M2Q2NDA1YmVlYjI2OCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNmMjIxZTZjYWRlOWY2Y2Y1MDlhZmE2OTc5Y2MxZmI5IjoiIjoiZDM1NDMzYmU0MWEyNTlkZmFmNThhYWMxZDgyYWY0NjIiOiJiMzFjNDc3NDkwZTU2MjRjNGFhYzhlNTkwNzI1YmZhOGIzZWZjYTYxOGUyMzY5ZTliOTgwZDZhNDYzYTAxNGQ1NWFhODMxN2E5ZTcwY2U2ZGU3YzU3NGNkMTUyNDJjZjRlYjNlYjA3OGNkMmY0OWZkODJkMWE1NmM2YzQyNDEzNDJlNjJhMmU5ZDk0ZjBhYWEwMjQwNTVjYjQ0MWQ2NTBmMGE2ZWNhYmZlOWVmNTYzZDZiZDg3ZDRjYjFiZWQzNDhhZWU0MjQ4N2MxM2I3M2U1MmZiNzBmMGNhNmVkODE5MjRmZDUxOTgwNmUwNGJhYmZkMDhkZjFhMDAxOTFjYWExIjoiIjoxMDQ6ImYxNzc2YjFlZTdhM2M0OWY5OWYzNGY1ODJkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjOThlYjYzNGM3Y2FmNTJkM2YzZDlmMzQ0ZTE0MTk4OCI6IiI6ImEwZTU4MTc2ODI2OTEwYTY5YzJkNjhhZTFjNmEwNWMwIjoiNmU1NTkyNzhiYzQ2OWNjNjcwYzRkOTEwNWMzYzJmOGZhMzA4ZTExYjRhNjBmNzU2NjRhOWJmYWZmNGYwMTc2MTc1ZGRkM2M2YzE3ZmY5MWEyMDhkYmJjN2M0OWVmZmYwOTlmYTg3M2Y2MDg0OWZmYWEzYTMwMDM0MTljYWRhYTA2YjkyYTY3OGI4MGJmNmM5NTJiYmJlNTk2ZGQwYTJlZWQzNTUwN2M1NWM0OGE5ZTYxMzFiY2JkYTA2MjFjZmY4N2UwMmJlNWQwODI5NDRmMmM4ZTI3MjExNTI3NzE3MjcyODM5NjAxYjBlMjZjYjVhYTIzMDFhZmQwNWFlMWIzNSI6IiI6OTY6IjNkODYxN2IyZGI1MzZiYTdkMzY3MDEzYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzUwMThmNGE4ZTJhODUwOTc5YjAwNmQwNDk4ZGQwZmUiOiIiOiI3NWU0YmViZGQxNzAxNTljZmY1OWY4OTVlYmRlYjExOCI6IjI1ZWQyODMxZmVmMjA1NjkwMzgxYzczZTkyNWVmN2JhMjBkNWYyZTNhNGI1ZDdiZWFiZDc0OWZhZmEwOGE2OTQxYWNiMTM4NWFlZDk3N2VhODI0MzIyZDM3ODY0OWY2NDZhODEyZTZjODdkZWQ2YWU0MzdjNjhmZmRkNGZhZTkzN2E4NDk4YWU4MjVkNzUyMzc0NjczMGFmODRkNTYzODBiZThmNTc1YzYwZTdmODM2YTg2MjM0MzkxNmU5OGNjMmFhNWEyN2NkNjNjZDkyZGY2M2I4YmI0N2M4MWZhNmE1Mzc0MGExMjViYjljYmIyNDdjOTE2MzYzZTYwZjVmNjUiOiIiOjk2OiIwYWE1YWNlZDkzZTAyMzdiZWE5YTAwMTUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNlZmQ0MGFlYWMyOGZiZWE2ZTMzNDNhMTI1ZmUxYzlhIjoiIjoiMzI0Yjk3MjIxNjZlZGMzODMxYmQxOWMxZGI1YmZiZjIiOiI3MmI3YTQyODliZjdmNWE3NTI2NjU4MzlhZGRlOGY3OTY0NDQyNDgzOWRiMDU5Y2U0MGRlMzI2NDE0YzA5NjkxZDVjNzA3MWU0MzcyMjEwNGE5NGU0MzBlMjYzYmM5NzRiOThmMTY3YzUwYjk3NDkwYmNkNDI4NmI1MDJmNjA3ZGRjZWM1Mzg3Njk1NDYzMTU0YmQ5NTk4Y2U4ZmZiNjEwNGQxZjcwMTBiYzE5NmVhMmRjYmZiZjQ1MmQ2MjU3YjFkYTAwMjcxZmUxZTZmYjU2YzQzNjU2ZDU1NzBiOTY1ZTAzNjk1MDI0NDM1MzZjYzQ2ZDRjMDViMWU4NjNlZDhmIjoiIjo5NjoiMGM2YjI4ZGUyMmUwMmZlNmE0NTk1ZDVmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1OGNiN2NiNTg1MThmZjNmZWNlYTRiNDRhZDlmZGVmMSI6IiI6ImZlNjE5ZWZiMWM5NTAyYzAzY2I4YTcwNzkyZjllMDQ2IjoiMWE3YzQ0NGE4NDI2N2Y1MmMzNmYzYzA5ZjhjNGE4OGI2ZmZlMzMwOWI4ZWRhYWQ5M2EwOGQzOTYxYWYyOGI3YzJiYWJhNTE2NWYwYTllZmUxM2ZhNmEwYWM1OTVkYTE1Njc0MWRjN2Y3MjhjMTFlZGJkOGFiMDJmMDNlNDU3MTZiZTUwNDc3OGE3NTM3NGVlODgyYWY0ODhiZmJjNmNkZDU4ZmQ4MWQzYWM1ZjM2OWY4NWJhNDJjNmZkN2Y5ZGY0YjI1ZmRkMmZkMzI2MDdlYTgwMDA0N2UwNjA1ODM4OGM0ZjcxYTVlYjRkODI1ZTg1NzgxMDYwNDFjODRjMjVhMSI6IiI6NjQ6IjgyNDNmMzIwMDJkMzNjZGQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE1Y2M0Y2I5NzlhMzQzZjRhZGZiODIxZDZmNmU5YzY2IjoiIjoiNjg0NjRlN2ViNjQzNjBjN2MwYTg1NDBhYzM0NzM1MTMiOiJkNjlmNGE5NTk1YTQ4YTUwZWMzM2FjMTg0OGRmM2Q5OTRlZmY4MzhiMjhlYTdjOGIyYzQyODc2ZGFkZDYwYTNmOTc2OWJkNGY2MWQ4MDA3YzlkZDRmZGU1NWVkY2VjOGY1YWMzYmYyM2IxYTk1OGZhNzE0ZGQ4OGNkNTI2MWVkYjY5YjdiMDg2ZWYwZjQ0MjE3OTk0M2YwODcxYTYyNTNhYWU5OWQzMWZkY2E0NDhiYzNlZmVmMzUzYjVjYzU1Y2ZjNTc2ZTRhN2ZiNzNhNWFiNmI1YWY1OGRiZDM4MWJmN2Y5ZDY5YTVjMmJmYzkwMjkwMWZkNDg1OTY3YjIzYmQ5IjoiIjo2NDoiYzBmNDMwMmQ4Mjc2YzNkMyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjM5OGRlOTEwZmY4ZjNhY2RjMjIxNzgxMWExZGEyYTEiOiIiOiJmYzY5YjIxZWMxODE5NTkwMWZmYTYyMjYwZmEyMDQ1NCI6IjAyMWYyMjUyNDBjYzlhNjhjNDg4NjgyNGQzNzNmM2E3MGZhMzJiM2E5MjZjNzgxNjQ2NDI0NTAyODdkMjY5ZDM5ZGJkNDljOGM3MWNlN2I5MTRmODNlOGI1M2JjNjFjNjc3M2Y5ODMxODU1N2I0NWYwY2MyZWYyNTM5OTM5ZGY3YTFlNjc2NTExN2Y3NTYzMWRjNTY0MDI5MWQyMGU2NDAyZDIyY2QyZTIzMWY5YzJjNjdjYjI0YWI1ZDhhNjk5MzNjNDliODljOWZiMmVhNTcxMzZhNmJmMWJmZmU4ZTA0ZDhkNmM4MTMwNDAyMTVmMDUxYzY1NGQ5MzIyNGVkZmMiOiIiOjY0OiIzMTRkMWEzMzJkM2M1OTBiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzODJkODY4NjhjY2QwOGQ0MTdkOTRmM2I3MzcyOWUwOSI6IiI6IjA2OTA2OWMzNzc5NTgyMzUxNzE0MzdiMzRlMGZjZTc2IjoiMDQ5YWYzNzJlMzRlZjdhOTJkMGQ0OWNmMmRkMDMwNTJkYWJhY2YyOTgyZWFlNmE4MTdlNjE0NmFkNzk5OTcxYmUyMzllZjU4MTBlYzNmNmNjNjk5MGU5NjQxYTdiNjk2MzkyYWQzZmFlZTM4YmI1MDc0NmMxZTkzOTEzYzAyZGJiY2JjNmJmNTRmMGQwNjJmMTc2Nzc5YjdjMGRkNWQ3ZWM3NzUyNjAxYzk4MTJmYTgwNTA4YTc4YmJkMjY5MjJiZWQ0ZjY0YjFmZjJhODM0MGNlMWMwMWUzMTdlMzUyNmNkODIxOGFjMjRhZjg3YjA3Zjg3OTI4NDlmNjQ3OWI4ZSI6IiI6MzI6ImZmYTU5ZmEyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMTA1MmIyZmM3YmM3YTY2MmFhOWRjNGI2YTA0ZjI1ZCI6IiI6ImQ3ZTU0MzJkZWY2YTI0ZDQ4NmE2MDhlNWM1YzkxOWE4IjoiMTk3MGVkNDAwMDNiY2NhYmY3ZjNjNTdiYmU1YmEyN2U0MjU0YzE1MTE0MTNlZDQyMWNlZjNhNmZmYjlmMDE5Mjk4N2RlODNhZTk2NTQ3OGMzZTk5Nzk2MzdmOGIzZmE1ZDEwZDY5YjkxNmYwM2ZkYzkyYWNlNzczNmYxNzE2NjAxNTZkODgwMTE0YWVmZGNjMTY0YWRiNmY4YzAzOTQwZDliNDNjZTg4ODE0NDFiNDFjYWZlZTMzNTFhNTZmY2I2MzJhYTRiMDllYTgxYWRlYTI2ZmIwZDhjNmUxYWUzODBkZjkyMmE0MjlhZTFmNWI4MmIzOGQ5YmRhNDMyM2M1MSI6IiI6MzI6ImZmMzQyZjRiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNmM1M2FhOTFhMTE1ZGI2NDY1MzAxNjM3NWJkNzQ3ZSI6IiI6IjgxNjNhNGZkOWMyYzcwMTBiYzg1Yzg2MTc3YjE5NGFiIjoiOTNjZGRkMzE4Yjk5OTI2MmM3Y2RlMjgzOGNiNWM0ZDc4ZjNlYjFlNzhkMzA1ZTVmODA4ZmE1NjEzNTI2ZDcyNGU4NGEwMTg4ZmY0MmEyYzM0YmRmM2I1ZmZmNzBlODJiM2MzMDM0NmUxNzlmYjNmYWYzNzhiYzRlMjA3ZTMzNWE0NGRhNTNhNWFlMzM3NzAxMDRiOTUzOTdmYjVhY2I3NDZlNjQxOGQwZGZjNzM2OGIwMzVhZjUzYjQ3MGZjNjZiZDBjMjEwYjY4Y2UxYjI3NjgyMGI2MjFlOTE5ZjA0NGU1Y2ZmNWNlZDdlMDdkYmI4ODI1YmNhNmI0ZGRkOGVlMiI6IiI6MzI6IjUwYjhhY2NlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjI1MTgxNWY1YmRmZTExMTFjN2Y5Y2EyNDY2NjJmOTMiOiIyMjQ3ZTc4MTc2M2VkYjEzNDlkYjJjZGE1M2U1ODUzYjcyNmM2OTdiMzQ0OTc3NjEzNzNjM2I2YTFjNDQ5MzkyMDdlNTcwZTE0ZWE5NGJkNWY5YmY5Yjc5ZGU5Y2FmZWRlYWJjOTI0MWU5MTQ3NDUzNjQ4MDcxZjIyNDBlMTA0ODhjNmUzZDcwNzc3NTBhNmY3ZWRlMjM1ZDQ0YzVhOTYzOTI3NzhlYzUxZjhhZWIxYTE3ZmFiZTliNmM5NWZiYzQ3OWZmZjk1NGE2NzY4MTNhZDNkMmY3MWM3NmI5ZDA5NmEwNTI3ZjJlMWIxNTFhYTg5NzIxNDc1ODJjMGZkMmJmIjoiNTg5NzMyODBjMmE3MTIyZGRmY2IyNWViMzNlNzI3MGMiOiIiOiJiMjAyZWIyNDMzMzg4NDk2MDBlMmZlYmE3ZjI1YTA1ZmU5ODMyM2JkN2NiNzIxYWM0OWQ1YTgxMzY0MjI1NjQzOTE0NjI0MzlmZDkyY2FhZDk1ZmM4Y2RjYWE5YTc5N2UxZGYzZWY2YmE3YWY2Yzc2MWNlYWY4OTIyNDM2ZGQ1YzhiMWIyNTdmODAxYzQwOTE0YzEzMzFkZWIyNzRjNThlZWQxMDJmZDVmYTYzMTYxYzY5N2U2M2RjOWRmZTYwYmQ4M2NlYTg4NWQyNDE5ODNhN2U1ZjBkNmE4ZmQwMjc2MjA4NGQ1MmJmODhlYzM1ZjE1NjkzNGU1M2RmZmMwMzk1IjoxMjg6ImMzNzAxY2UzMjg0ZDA4MTQ1YWQ4YzZkNDhlNGNlZDhjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzE5OWI3MGU3MTE1Yzc0ZTNhYTM3NDVjMThmY2U4ZDEiOiI0ZmEwYjA5MDY1MmQ1YThkY2Q5YjVmMmNlYWFhMmRjODdhNDBiMzBlMmQ1OWJkZmYwOWUxZjIwNGQxYjkwMzcxZGU3MDkzNWMzODVjZjViNGQ3ZTBjNGU4ODY2MWY0MTg3MDUzNzBiOTAxYjk3YmYxOTliMzY2ZTY2OWJjNzI3ODgyZDRhZWRmODE3MWE4YzM5NDMxZjExYWY4MzAzNThjZDBkOWUxMTBkYTFhMGNjNmVmNzBlZmIyNTVlZmRhYzFkYzYxZTcyMmEyZDhiN2ZiNGNkNzUyYzYzNTBkNTU4YWUxY2NkMWM4OWY4YmE0NGFiNjk3ZGY5NjY4MWVlMzAxIjoiODA4YTAxOWY3ZmI3NjFlOTcwMWMwYzRmMWExNjkwZTQiOiIiOiI4ZDVlZDQxNDZmYjQ5MWRiOTQ1NmU5MmY3NTNhYTRmNjg4YTliYzI3NmU2YWViYjc4MmEwY2RmN2ZlNTc4ZDc0Y2EzOTQ2ZmE3Yjc4OTNlZmY2MzQ1ZTY0MjUxY2IxYjE0NjQ0MmFjYjY0MDQxMzI0ZTI4NDc0ODFmZDQzODhiMTdmODMyMDY5NDhlNjdjMWU2NmI4OTRkNWQ0MGVjYWMwYmJlNGRiMGM2ZjU4YjY1YTFmMTlmMjk0MjlhOWU3NmY3OGVmNWRiYTBjOTRkODhkZmMwNmU2MjIyYTUwNmYwMDRkMjRjZGIzZmUyNmQ2ZWI2ZTA4ZTRmZGY2Mjg5NjUxIjoxMjg6IjkwODgwNmQ2Njg0NTFkODQ5YmEwMjY4NTIzZWIwZTRhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjM4MDVjZWY4NGNhN2ZjZjI4MWIyMjZjM2FlMzcyMzAiOiI1NDNmZDY0ZDE0NTRlZjZjMDA3ZWU5NmIzZmY1ZDJlNGI3ZjVkMTVjMjNlNzU0OGRmZDFkZmFkNGRhNzc3NGI4Nzk1ZTgxN2ZhYjNiZTdmYmY4ZTRkMGQzNTFhNzQzZWE3OTNkOWQwMTM4NWE1NTJmNzhlZGUwNTRiZTA3OWFlYmQxNTExMDEzZGUyMDk2NDU2ZTlmYzFiODM0NTdmYTEyNDBjZDM5YzE3NDQwZDRiNTVjNGUzOTAxMTlhNzU5MDU1YWM4NTFhMDJlYTQ4MWViODNlMjk0OTIyZDM1ZjY4N2E1NmQ4MDFlZWQ2MzhkMjg5MzUwZTE0MTExNmZmYmE4IjoiMWFhOWU3NWQ3ODU0NTA5YTg1ZDk5NWVlNDgyYjhlY2EiOiIiOiI5OGRiOWU4ZTNmZjIzZjA5ZTU4NWU1MzI2ZjUyNWU0ZjgzNTBhMWYyMzNhMGFlYmQ2MGQ1OTUxNTgzZWFmNTIyMGYxNjkwZWUzNjA3YmE5OGNmOGNjOTlhOTBlZmI3MTk3ODM1OTU3ZjJiZGE5MThhMzJlNTI4ZjU1ZDU0OGUzYzgzZDY1OTEwYjk1NjYzNDIyNGNkNTQxNWZmMDMzMmMxNjVkMTI0MWY3YTkzOTc2NjQ5ZWJlZDJjYzdlNjJhZGRiNzYyMzFiYjczOGVlOGEyOTFiNjIzNjU5NjUzOTJhZWI3MmFjYzVmMGZiZDJmODhmNTYxM2ZjZjQ0YTFiMDc0IjoxMjg6IjliMWJhYTBiMzE4ZTFmNmU5NTNhOWY5MGIyMWNkOTE0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmVjOTI0NWU4ZjU2N2UxY2M4Nzk1YmJmNzJmMjk5OWIiOiJmMjY2ZDAwNjBkMjkwMzM5ZGVmNWY2ZDhkYmY3ZDEyMGE0YzY0NWFhOTA0NzBlMTY4YjRmMzUzNDJhMDBiOGM3YjcyMzAwMDM2NTdkMzc3ZDg1NjhkMjUyNzY1ZGYxNDJlOTdhOWRiZmI5NzExZDljY2YzOTZmM2Q1MWJkOTE2NzNmMTI5ZDU4ZWZkODBhYjgzYTA2NzgzMDNlMjlhMGRiZWIxZmE5ZmRiN2ZiZGU1ODZhMTdhY2U2NWU4OTQzNzRlYzhkYTFjY2QzZTIxODUxYWI5OTg1MzRkZTQ2Y2I0M2IzOGUyNDFlZGMwNGI1YzU3MWRmYzBhYTAwNzRkNGZhIjoiNDEzNjI4ZDlmZjNlNDA2N2Q4NDBiMGFiYzJjZGEwZWIiOiIiOiIxNDVkODMwOTJhMjY5YzhhZmVhNjA0ZTkxOTJiOGJiNTUwYjliZWE4NWY4NDJmY2M0OTk3YzJiMDBjNmYzY2E0NjEwMGU4MTRlODIzODlmMjdhNjlhMTJkMjkzNDBjNTgyN2U2MDc2NTdhMDBmYzcyYzRkZTMwMDc5ZTIzNzYwNzY5ZTgwMGVlNGNlNDY5NTdmODJkNjE5MzVkMDdkMWM3MGRjYTgzNmMxOTk2OWRmZDBmZTBlYTc0MGE1MmUyZDA5YjFjOWFhMTM3YjVlODUyNzc1NmZiMmMyMjk4Zjg0MDA5NDliYTI0YTgzNTFjMTA5MzYyNjcyM2E2OGE3OWY1IjoxMjA6ImFkMTc0ZDFlZGM3MTNjMTg3YTU4NTlhMzkwZmZmOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIwOGRmNGFjZDI1M2Y5ZGQ0YWJjNTJjNGJlNDg4MDE1IjoiODJmNjY1OTEwZDg1M2ZkMmI3NzViZjY2YTE3MDc5MzU0NDM1NzRjOTA0ODNmYzMzYmEwMmQ2NDc5ZmFmZDk5YzVmODE2YmM1OGExMzkzYTQ0ZmIzMjcxMWZiZWIwZDY5MzZlZmViMzU4MGYxNDdjMzAxOWU5ZjJlMmVmNDhiMjAyYmRkMzY5YzI3Nzc5MWJjZTUyNGYzYjIyY2ViNzRjNjY0MTQzYzRiMWRhODE5YjIyOWE1YjQ4MGFhOTU0YmUxMTBjYTAwNjYxNWQ5Y2ZmNWExNTgzNDJhNDdjYjZkMDRmYmI4MTdhZTRkZGZmNmQ0Zjg2Yjc0MjA1Nzk5YzljMCI6ImUxYzI3ZDM1NTIwZWE1MjdmOWEyY2Q5YjBmNzE3ODQxIjoiIjoiZjViMGZjZDgxMjA2MWJlOTk5OTAxNTk1YjM1NDdlNzBmNzE0NGNjOWUwYjAwOTgyNjJiZTRjNDQwZTg2MzdhZjc4MmY1MzZmNTcxNTM0YTY1OGFkMWZiNDQzNjBkOWM0NTRkMTAwMGQ2OTU3ZjI2MTQwMWUwOWMwZjE5ZjUxNDZlZTU0MzNlMzc4NDIzZjljOTRhOTBhZjIxODVkMzhjYmUyOTQwYTQ1OWQ4NDA5ZDk4N2QwNGExZjNlNjg2YzJiOTFkNGZhZTFmM2UzYmRjNWEzMDU2OTgzODIwMWI3ZDMwYzczMjBkN2NiZDc4N2JmZDZjZDQwZTdlMmQwNzFhMSI6MTIwOiJmYTMxZTU4ZmEzMmQxMjA4ZGQ4YTY3ZmVkNDQwMzMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5YzA4ZDZlZmIxNjdiZWIwMzVmNzE1NTRmNjRjMTJjZCI6IjcwNGY1OWQ1MjAyMTA4Yjk0OTE3MDUzMmFjMWU3OGVkYjBlMDZmYTMyM2MxYzY5MjAyZDdkMjJkZWE0ZDczNDIxOTljZWJlOTQ5ZTk4MGEyMWZmMGZhYzI4MmI4NjhjYzMxZmY0ZjY2NzRjMzkzYzBmMmNhZTIzNzQ2NjQzMTRhZmFmNzc5MTk3NGI2YmQ2YWYyNmFkZTdmYzI2NmE2Y2QyZGU0ZjNjMWY0NzlmODk1ZmY1OTc5OThjYzhiOTI5YzFmMDVkYjEzZDliOWE0ZDk4YzliYzYwNmVlZTMyOTE1YmJkYWVlYzY1NzZlMWZhNmU4YjIyZTBiYjEwOTgwNzQiOiI2MDhkNTZmNmRlYTJmZGYxNzVlYWUxODlkNDJhODVmYiI6IiI6IjJjN2QyNjE4ODA4YWRjZjhlZGY1YTU0MTE5NDcxYjkzMGUwNzQ4OGQ1ZmFjM2RjYjUzZjRhZGU0MzY3NGQxNjI4ODFiZWUxZjI3ZGVhNmQxNThiMjU0ZDRiNDMyZTE3ZjIxMTUxNWJmNTk1YTk4NzRkODlmOGNmNzQ4ZGRhZjIzMjQwNzgwMjljNjQ2MzMxMmFkMzJlYjBhYTVlYmVmYzMxYzdmYmZkMDRiMzdiYTZiNzY2Mzc1OTUyYzIxMWQxNjBiOTQzZTlkM2M1ZTE0NGI1ODExNTdiZmY5MDcxZDMxY2ZjMDgyYjU1YzRhMGZjZWQzODZlZjJmYzc1ZTFhN2IiOjEyMDoiN2ExYWUwM2UyODM4Mjk0ZTI4NmRjYTRmYmJkOWYxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTkyZGJmZGY4NmU0OGJmMTg3MTBlNzA2ZGM5MGUzNTYiOiIxZDdjNDVjOGVmNmY5ZjA3M2M3ZjE4NmU0Yzg3NmMyYjhmYmYyMmZlZWVjZGMxMTFhMTkwNzFmMjc2ZTgzOGFiMDU3MmM5YTY4ZTlhZDQ2NGZhODhiYThkOGExNjJlOWY1ZWUxYzQ5ODMzOTVhODkwOTkwMzU3NjczNDY3OTg4YzA1N2ViOGEwMzQyYzQxODY3YmFhYjQxNDU2ZWRjMzkzMjUzMWQxYzRhYTBiNDJjZTJiMzg4ZDJiZTU3OWRmZTMzMmY0MGE5Yjg2NGM1ZTMzZTJiM2NmZDczYjY4ZDY1YzRkYjllYzQ2ZDNiYTE1ODdhNTZjYjc4ODdkY2IzYzVlIjoiMWE1MTFmODVlMGUxMzhmNDI0MTg4MmMyMDY4OWY4ODEiOiIiOiIzZTUwZTgyMWZiZjgzNDMzMTU1ZGU3YjRlYjNjOWEyYzE0OGIwOGQ5ZDM5OThhMzQ4NmY1MTdmYjVkMGExMzM4ZmFhYmJmOTVlODVmYTkxODYzODViY2I5ZTI2YWFhNWU0NzNkM2NjN2FmODY5ODcyZTRmYjM2YWQxNmM1NDY4ZDk5NGU5YzcxYTA5ZGQyODY4OTc3ZjNmOTA2NDY2NGY2ZmZjYmFjMWJkMzEzYTc4MDNjMzA0MjczZDY5YWQyMDM2OWJhZDM2YWRlYjM4NDgwNTYzYmM2ZGI5YWEwZDExYTBlMDNkMDk3MzExNzFjMTIyOWE3NTYwMzdiMmMyODVjIjoxMTI6IjkzOTNlZGYwOTM0Nzk2ZWI5N2E4YzUxM2JiZmMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkYWY5NDU1YmFkOGJlZTkwNWM2Y2Q0NjQ2NzdiODAzZiI6ImFmMDQyMjZjYzZlYjg0ZjgxNjdhNjhjMmNmZGUzM2ExNTIxZGNiZTc4MWU3Yjk3YTNmYWU3MzJiY2Q4YzA2MTZhNTg4MjAwMzI4OTAyZmFhNWE2NWEyN2U3NjlhNzIwZDdlYTIzMzMzY2MxYzY2YzRkNGU0YzUzZmFjY2E1ZDZhZjA2YWVhN2ZiNDliMTJiMDRjZDZhZTM4ZmUyOGQ3MWNkNjZmNzY5ZDY0MGJlZWIwN2Y1MDhhMGUzZjg1NjkwMmNiZmRlNjkxOTA3N2RlMzc4Y2YwNDg2Y2YxNzdmODk3Y2QwYTU2YjY5ZGIzYTMxYjQ0OGViYmY4ZmRmNjM3MzYiOiI2Y2ZlODQ5MGU4OTJmNWRkYmE4YmJkMWNkNTIyYmEwYiI6IiI6ImU1NjIyY2E3MzYwMjcyYTMzZTMwZjdmYmVhYTAwOTU2ZThhZjBkODcxYzQzM2MwNzBjODg1NGQ4MThlYWI5NzE3MjkzZTg0NTEwNjc3MGVjMDdkYTM3MmM3NTI2NjIzOWEyMjVhZDc0NDY1ZTI1NTUyMDIxOGM2NzM2ZTUxMDcwNDc3ZDcwOTc2YWE3ZDQ0OWMzMmE1Yzg1YmJkNjkzMWM3NmU5ZTQzNTVmOTY5N2JhZDJlYTNiY2MwYmUwMDVkYTE1YzYyZGIyMTliMDc0YjcxZmU0YTU1MTIxNTcxNDNkZjJjMWY3MGJiMTdjNmQzNzQwZDhkMjBlZWY4ODUzNWYiOjExMjoiMjVmZTZjOWIyMzAzYjQwZWQzMWQxYmVlYTM5YSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgyZDE2NmRkZGNiZjRmN2Y2NmFhNWFjNmIxMjUxNmJjIjoiNzg4M2Y0Zjk2YzBlZjdmNmQ5ZmQ3YzJlYWFkMjU5OTU5NDMwNzg1NTllYjI0YTNlNjY1MDEyNmRkYWEzMjMwMWIwNGY3MzdkYzI3YjY0OGQ2MTE1Y2UwOGZlYWM4NjJjYjg4ODA3M2IyMmFhNjQ4Yzc1MjkzNGJiN2Y5YzU2NjIwOWE5NzQ5OTIzNmY3ODI3NThkNmY2ZjlhMDEyYTJmYjY4ODVjYTkxODU4Zjk3NzljYzkzOTUwYmFhNzMxZjE4NzQ2MjkzNTFlNjE4NjkzNTQ3NWEyMDU5M2Y2NmNkZGVmZmY4OWJlMGZjMGY5YjU3Njk1YjE0N2Q5YWNkODE1NyI6IjU0MGMyYTA3Njg5YmYzMTRiYzhlZGU3MWRmM2Y0MzU4IjoiIjoiNDQ4MDZlNzZhNDBiYmJjMmRlODYwY2QzNmU5M2Q2NGM5ZjRjMTE5OTRmNzU0ZGI2YTI3OWQ2ZWFlY2ZkZjE5OTY2NTEyZGU1MjIzZDgzMzJhNDA3MzgxMTE0ZDUwZmFkYjAzZTMzZTM0N2E1ZjRkODdjM2ZiZjM1ZjJkNTk2N2JhMjk1MDAzYTJjNmMxMmZiYTgzOTRhYTViN2EzMTM2NTc5MWM2MzA3MzRhNmIyZWY4NGVlZDA3MzhjYjRiYzIyOWU5M2M0ZTg1MjlhYWVhZGVjZmY3YWI5Mzg4N2I5ZmFkNWYwNWE4OGE1YmE5ZmI0NDkwNTNjZTRjNjM3NWQxZiI6MTEyOiI3NTZkNjVjMWI4YTA0NDg1YzM5NDRlMmEzY2JjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODFjMWZjYTM3MTk2ODUxM2E2OGFjMDlhNzQ1OTA0MmQiOiIxODJjYjg5Yzk0MTcxYjY4NTAxNmJhZDc2YzQ0NWNjNDU2MWFmZjhlMzE3MGRkMjUxZjYyZWZiZDQ0OTEwZGRmOGViYThhNjdkZDFhMjM3ZjJmNzMzNmY0MzZlZGNmYmRmOTkyOGU5NGMzNDg4MTg5MTEwZDY3MjQ4OGM2YzRlMGRjNGExZmI2ZTY3ZGVlOWExYmZjM2Y0OWQyZjkzNGYzMDVmMTM5ZTk4ZjBiYTljMWFiNTZiNWNlOWRkY2U0YWI1NGI2OTcwYmY2NDk5ZTVlODI1YWJiYjIzZjllMzIwZWUwNWFhZjBkNzEyYzA5YjAxMzQ4MzljNTYwOWUxNzhhIjoiN2M5NjJhOTJiOGRhYTI5NGI0OTYyY2MzMDIwZGNkMGIiOiIiOiJmOTFlMzZjNzlkYjY3ODlhM2FjZWM5ZTgyZWM3NzdlZmMxOTU4ZTdlNTYzNGQzMGE2MDIzOWViN2NhZTFiNDhmNDA1NTc5NjVlOGE2ZjY5OTNkYjNmNGFlNDQzYmExNjc3NTNjODlmNTJmNjEwYWI2OTE1OWZmNjAyMzMzMTBjMWJiMmJhY2NiOTM2NDMzMjcwZjg4Mzk3NThiYzg1YzUzNjA0ZTc3MWUzYWIwZGY2ZDZiYjAyZTg2MGQwZWIyN2Y0MjVjN2QzMGZiNzU2NmFmZjk4MmQyODkyMjhkYTVjZTVhNDU4NDJlMTBmZmJlOTAxNmM5ZTkyNmQ3ZjY5ODYzIjoxMDQ6IjAxMTRjMmRlOGY3MzNmYzE4ZjIwMzE1MGEwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDljZTczZTczM2U4ODBjNmQ3YmU5MmJlMzE0NGRiNDAiOiJhMjgzZTIwYWRiNmVmZWRjNTUzMGY0ZWZkNzE4NDBkNWZlNjFjOTAyYTc1MTFjZGFhOTM5ZjUwMzA4ODBmMzY3NTk1OWVlOTZlMzlhYmUwODJhNjZlYmEyYTVhOTMyMTRiMjJjMjQ5ZDcxNjdiN2EwZmRhMzYwZDAyZGY4NTVkNTA4YzdlYmFlNzAxNjEzN2U1NDI5MDkwNDkwOWIyZDQxYTU5OTQyYWJlYzc2NjEyYjE3ZWE3NmZmZDFlZTcxNWFhMmIwNWIxMzE0YzBhYjI4NjMxZjM5MzRkMGU5ZWZlMmFlZjBjNzExZTc1YTVjNjI3MDFiMzM1OGE0MTQ5NThkIjoiZjcyYTJmYzkxMGZkZWVlZmU4NzQzZjU3MjkwZTgwYWYiOiIiOiJmZTlhN2Y1OWFiYzM3MjA3MDZjMzNmYTQwZTEwNjY2M2QyNmMwZjhkYTBkMjVkZWI5MGFkYTgxMzBiNmY5NWFhZWMwN2Y0YTdkYjM0MmI2NzhkMTAyYjJjODE0NjRlNGNhOTQ1ODczMjc4M2NkYzNhOWQ1MDQyMzJmNDRlMjg3OGIwYWFlZWMwZjg4ZWZhNWQ3ZTVmYjE0NjkxMWRjZGI0NTY5ZGU3ZjExNGUxODU0YWQ3YTk1ODk0NTYxYmQwZmM0ZDlhNWI1OGI1MTY0ODcyODMzMjgzZWQ4OGZkYjQ5MDBiMmE1OTZkYjRlODM3OWVlZDRlM2E1YzA4ZDVmYWRmIjoxMDQ6IjlkZTk3YmZlYzEzMjU5MzZiZDE3MWM5OTZhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTYxZDQxNWRiNzhkOWYyNjk1MzQ0MzUwZTBhODI5MWUiOiI3MzBjM2ZhOWUwN2VlYTczYTczNGIxN2ZjYmM1YTk2OWRjMmMwNGY0NDhmNDRjN2Y2Mjc2ZTMyYWUzNTA0ZTliMTVmYjY2NDkwOGY1MzBlODNhNzRlMjVhNDUyNWY3NGQzMTVhYjg1ZDdiODUwMDU0MDEzNzBkYzUwZmRiODZlOTdiYWYzZTdhY2I0MDNlNDc2MTkzNTI3YTFhNWQ2NDJmZmFkNmNmMjU1NWQxNmQyOGNmNGM0MTI3MTg5MDU2Mzg5MzY4Yjc2YWVhODA2OTA2YjBhMzhiODA4Y2IwMjM3OGVlYTQ4ZWRjMDA1Y2YyYzIxZTY1NDc1MDJlMzFkMmNiIjoiZTA5ZGVlOTM0NjZhM2YzNTYwNWI2NDdkMTZiNDg0NTIiOiIiOiJhZTg3ZTc1NGMxYWYxMTc1YjQ3NGIwNzE4ZTM1NjAyNDBmNTUxOTRkOTQ2ZDEwMWU3YzBiYzdhZjE4ZDkwYTUwZmE0MWQ2ODUxNmU0NWRjMmE0ZGJhNDhkNDU3ZWJmZjE4YTY1N2E4NzNlMTU2MjBlZDdjZjZlZDNhMjYxOTViOWQzNTRlYTI3OWIyNGVjNzgwMmU0ZTk1ZDNmMzc2NTE4OGE2NGQ3YjhkNGI3YzIxNWU3ZDY3Mzg1ZWZjNjI4ODcyNGEzM2ExYTc5OTRmMjFlMGRjMjk3MDA3NmFmN2NmMzFlOWFkMTA5ODUzNzU0MzA1MmEyYjBmNjJlNGU4YTg3IjoxMDQ6IjVkZTNjNTcxNjczNWQ3ZDFiODU5ZGViYjZlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOWJmMDBiMjI4ZGRiNmU4ZjFmYTRiYTg1Zjg2NjQ3NSI6IjEwNzQyYWVkYTU5MDAyNGJhYzI2OTZhZjg0MDI1ODBkMmVjNmJhM2Y1MWNjNmY3OWI2Y2ZiYjMwNTc2MzRjZWQ2MDMzZmE0M2RiYWVjOWFmOGNlN2U5NzA2Y2E2OTllZGU4OGQ4OWNhZWQ4OWVhMDIzZDE0NzYxYmVjNDlkYTcyNDUzOGI0Zjk2NzIxNjNhNWJiNWRiZjkyZjUyNzhmYzAwMTRlYWZjZTQwMmNiNDA4YTFlYWFkNmJjMTdlYzBlODM1ZDZiODBmNDcwMWY5NDY2NjE3NTdiOWIyZDU0ZDFiMTM3ODQxNTE5ZGQzOGQ3MjgzNTg5M2VhNmQ1MmEyN2YiOiI3NjBjNWI5MjlhYzNkMzNiZWU0ZGFlMDA4OGE4OTRmOSI6IiI6ImIwM2QyN2JjN2Y0YzlkNDhkNTU1YTM4MDkxMzQ3ZjM3MWQwNTIyYWQ0YzM0N2I0YTIzMTk0YzIzNGM3ODc3Y2QzNjIxY2U1YTdjMmZjMjZiMzhjN2U2ZjFjMmJmMjI4Y2NlYzQ5MWY1YmMzNTI1NTZjMDhlNGUxOWRkYzRlNGIyYzAzNmY0NWE0MmFhNDI1YTVmZjlhMmU5YzllNTU4MGI1MzhlZTU2ZmE4MDRhODZkOWIxYjU5YjZmYjBkMDAyMTZhOTY5MzY3NTU0NjI5NzlkYzE0OTkwOTM1OTE5MDI2ZmI1MWNkZmVmMDViOGRhZDAzMzIwYTgxMTJiN2FkYTUiOjk2OiIyZjFjYzc5NDA4Yzg1YTk4NjcyMTQwNjEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY1YmQ5ZTdkOTAwOWRkNjExMGRjYTY1N2NjZmU2MDNlIjoiYzFiNTM5MzI0YTAwMTkwMWMyNDYxYjk3NDdmNjA1YTJmNDA0M2I5YjBmNTRkMTM1NzA0OWZkMTgxOWRlMDZkZjZlMjk4ODBkNjJlZjdkOTFmOWNkZDExMDhmM2NjZTMyM2Y2YzMyY2VjMTZmN2JkNDM0ZTUzOWZkMDBhZGE0NzZlZjQxZWZlN2M2OTA3YWQxY2I3MjY3MTdhYjU2ZDZlMmQzMjA0MmVlMmRmM2Y5MGQxNWUxNTE1ZjBhMTVhNWYwNjcwM2UwNmUxNDIyOWQxODMyODExNjE0OGIzY2MzOTY4MzkxOGU0MjkyN2Y2MmFlYzQ5ZWU5YmNjMTliZTM4ZCI6IjNmZGRmN2U5NDMzMjZlNDMxYmU1NDBjNDliYjkxN2M2IjoiIjoiMjgxM2Q2ZWVmMDcwY2JkZWU5ZDVkNzFjYWE4YTg4YzYzMWYwYjcxYzQxODEzYzYyMTlhNzY1ZTRmYjNlNmVmZjlhZmU4ZjhmNDM5NGZiZDU2NDZmZTgwYmFiNzg4MDZlZGRmNzU0OWQ2Y2EzZDBkMTZkNDdlZjYzZGI5M2NiNTYyMGUzODE0ZWZkODZiZTE1MWIzMzhlZTZlMmM2ODFiZDM3YmU0MDM5YjJlYTRhMTkwZmVjY2Q3ZDY1Y2JkNTZlYmRhODFmNGI2NmNlMTJjYzNlMmNlY2U3MzFjMzdkNDIzN2E5ZGQwYTJjMWE3Njk3YmFlNDIxNzZhNjczZDYyYSI6OTY6Ijk2MjAwYmQzZTY0ZDVlZWE3NDY2OTNiYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjliOGFjOTIxNTI4OWFhMDAzY2VjZDUzYTkwZTA0MDciOiI4YTZmYmQwNjcxNDRiNmQ1MGVhNzNhMmE3YWJiYTNlZTk2NzdiYmYwMDMxMmM3MGQ4MDhmZDEyNDU0MWFiOTM2MjI5ZDU5ODQyYzg4NDY1NjlhMDYzZmVjYjhiZDE5NDU4ODJhYmQ5ODdhOTM2OTkxZDVjZGJlYzA4NzkzN2Y5MWM0ZjU1MTNmZWZmYTE5ODRhNmI4ZDA0YTdiNjllYjRlOTNlOTBiNjgyNTc3OGNkMmNlOWEwY2U1NGQ0YTQ2OGM5Mzg4NDYxOWY4NTFkMjI5NGJlMGJiYmVlZjVmYzBjMDVkMjM4NDEyNjI4OTI4M2Q1ZGRhYWNjZDg5NzExZDczIjoiMjdkMzY3ZjNmMGM2MGFjZjkyMWY4ZDhiMjI4YTBiMmYiOiIiOiI0MmQ5OGVjZmI0ZjcwN2VjMjMzYzdmOTkwYjBjYWQ4ZjM5NTQ2Yjg2MWIxMWQ4Y2I5ZDkzOWIyOWZmNWFiMzE1MjI5ZDk0NmZmNTU5MjdkYmRlODJjMDNhYTczZmQ3ODU3YjJhZDM4ZmE1NWE4MjdkZGE1NGQyNzI2YmNlZTY2MzQ3Y2U0MmM5Y2ZkMTNiYTE1MDdkMjA5ZmYyMzg4YzBlYTI0NzRlMTdlMzFkODA1NjU5M2I3MjJkM2MyYTMwMmE3MTZhMjg4NTkyYjBhMzY1NDdjN2ZkNDdmNzU5NWZlZTlkMzBmNWJjMDlhOTU1NWQ3ZjMxNjllMjZhOTI0ZGIxIjo5NjoiZDY2OTc0Yzk1OTE3YWUxYmY3OWI2Njg1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjY2JjYzM5NTEyNDI1YmMzMjM1MDU4N2YwZmMzZThmZCI6IjU3ZDZjY2RhMzE3YjdlYTE1MGIxOGQ5NTU4YjM5ZmQ3OGQ5Y2I1MjUwOWFhNWMwOTVjNWI0NmRhODliNzk5MThjODVkNDY5ZmZhYzcyMjZjYWRkZDY3MGFjOGY1YWRkNDdmYzM4MmRmMWYzMmI0ZGU5Y2MxYjJjYTdjMmFjZmJkY2FhMDg0MjliOTdlNzdlZWRlYTU1YzhkZGM3ODE0ZmU0YzNjYzFlMjFmOTVkOTQzMDFhYjc3YjRkZjc1NzJkMGI4Nzc4Y2IyYmVmYzBmNGM0YTVlOTM0MjlhZDUyZDZjMmE3NTQ4MWYzOGQ5MmVkYjFkYWM1NjMxNTRiZjkwYjIiOiIwODYyZWJmZWI0MGZmMjRiZmM2NWQzY2M2MDBmMjg5NyI6IiI6ImU2YTc3ZTkwNzUwY2YwZTRjMjc2YzUwYzM4ODBiM2Y2ZmEzNTcxNzljYmQ4NGUyMmY1YjQzY2QxMGFiY2JlMDRiNDNmMTkxZWQzZmFiZjgzZWFjYTg4NmY0YTdmNDg0OTBmYjFmZDkyZWJkYWNiNjhjNTE1OGU5ZjgxMjQzZjdjYWRjN2E4YmEzOTcyMWRmNjhkYmYyNDA2ZmNiNWRhYjgyMzIwMmNlZWE3MTEyZTVkMjU5NTJkZTFiOTIyYmVkYTI3MWU3Njc3NDIxZmRlMjVmOGNkZTQ1MGM0MDY2NzM4N2U1YWJmOGRhNDJkZmU4OTFjNTJiZGQ5ZjUwNjBkYmEiOjY0OiI5MjdkMTNjYjkwZWU1ZjQ0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzOTZiNTNhNjk0YjI4YjcxN2MxMDQxMTFjNDc1MjA3NCI6ImJiYzNiODE4ZjRmZjEwYjY4MjJlYTQxZjYzY2E1M2MyNzU3OGE4MTI2ZjUxNjNhNTAxNGM2MGUxYmM4YzFhOWJiYTY3YTM4MDhjOGFlZWUwOWJhOWU1ODRhMzU4NGU5Yjg2ODk1YTNmMGRiMmU2NGU3MWJiMThiODQzYjEyZjRlYmJmYWExZGZmMzczNDE5NmY3MGM1YTZkOTcwMjc3YWI1MzM3ZThiOTQwYWU3Yzk1NzY0NmY4ZTk2YzZiNWQ4NGU5ZTk3YjYyMGE5MjZlNjU1ODUwZDA5YmMyZDk0Njc4NzA0YWE0NWQxNzg4ZTdjMjNlY2YzN2UyOTA0YTA3ODYiOiIwOTgxYTE1MWM2ZjY4NjdkMzgzMGMxZjllZjk5YzQzMyI6IiI6IjcyYTU1ODcwNzZhMTA1MGIyYjUxNGYwNDdjY2RmNzE3NmMxMThkYjkyMzZjMGY3MjA5MTUxM2RhMzlkNzQxNjczNGFjNTBlMGEzNWIyOTA1NDIwMjE0YmU4NDI2YTM2ZTg2ODYzYzk5NTc2OTMyOTJiZmM1YmZjMmU5M2QyMzRhMDllODBmNTE3ZWRiN2NmOGU1ZDIxZDVhZTZjMjM2MmI3NzlhOWI2MmI0YzY2MjAyODk0ZDM2OWQyMTllZjBlNGI1MmEzNDJiNzFmMjQ4YzE4ZmZjMzQ1ZGM3ZWIwYjQ3YjNiYzgzZmZkZWY5MjFlYjQyYjZkNTFhYmQ4ODllZjQiOjY0OiJhZjk5Zjg3OTc0OTVkZDE2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZjA5MDYxOGNiNDU0MzI0YTgyYTc1YTkxOTQ0ZGQ2ZiI6IjNlYmNhNmZmMTM4YzUyN2I4NTFiMjdiOWUzOTE3YmI5YTA3MjgyMTk3ODY4MzUxZGQ1OTliNzRiMzMyNjEwYmQ2MzQ0MjI5MTEzOTMxNzEzMDVjYWE0ZmUzZjZlODlhYjZjMDMzY2E3NTllMTE4YzJkODY4NGI5MDM5NjY5OTkxMjVjNzQ4ZTA0MzEyZWNkMmMxYWMzMTM1YzNiZTJkZjljOGM2N2JlNGQ4MzAzYWM3YWE2YzIxY2E3YjdjMjBiMTEwOGY1NjIyZDhlNjA3OWY0MWU0YmU0YWJkYTk5Zjc4MmFkMzVhMDg1YjdkYjgzNDgyZGM3MWI4ZTVkOGU3MWMiOiIzMzgwYTZmMjA4NzViN2Q1NjFjNGExMzc1MTljY2NkMyI6IiI6IjZiZThlZWJlN2FmNzhjMDYyODEyNTEzNzg1ZTk4MDNmMzAyYzc3MWU4MjE1ZTRjNjA2ZmM1ZWRkYzNlZmQ4YjEyYzk2ZTAyOWI0Mjg3ZGE1NWQ4NjI2NTgzZTU4Y2UwZTUwYzRhYzVhMzlhMWIwZjMwOWQ1ODAzMzg2NzM4Mzk3Mzc2YzBhZTE1NTA4N2YzNmZkODZmZGRhNGI1YzhkZDA3OTAxMWZhOWExMzRjYThhNzZkZTU3MGVmMTY1YjIwZDdkODAzNTQ0Y2QyZjNhMGZmZWRlOWIzNWNhMWM5ODI5NzhiZjk1YWMxMDBhZjc1NTU1M2ZkYWMzOGQ5ODhmZTkiOjY0OiIzZTg2OWRjYWMwODdhYTZjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwNDFjYWU1MWQ5ZTYzMWVmNzAxMTViZTU4Zjg4MThlZiI6ImY2NzQ4ZjRhMjYxZDg3NmUzN2ZlNDRhNDE5Y2ZlOTY1ODg4YWE1ZWUxOTVhZTEyMjM3MzIyZjZlN2FjNGJmYWFmMTZlOGUyOWJlNTA3ZTI5NzgzMzlhMTg1NWFiOTE4NDg1MDExZmQ1MmY4MzRiZjA4NzZiYThkODlkZmMwMTkyN2UwOTMwZDAzYzBhYzdkYzdiYTE1NTRhODc5YTIwNTEwMTFiY2IzNGE1ZTRjN2NlYTRkNGZiNWVkNTNiNDFlYzhkMTdiZDUyYjJlMWI5ZGQ0MTdhODRhYzU5MTNjZTNmOWZiMDRkYWY0ZDE0YmU2NWY0OWQwNzY3Yjk0MzFiNDciOiJjMzJmMjI3NjU5ZTA1NjZmYWEwOWViNzJkOTlmODljMiI6IiI6ImYzMGZlNmM4NzY1YzhjMGFmNTc5Yzk1YmMyZDE4MmNjYzM0NmU1ODdhNTdhYTIyNmVhZmI2OTI2NzUzNzdhODVlOWVlMDgzMzlhMDQ3YjljYjY3NGRhYmY1YTI1MzAxZDJjOGMyNjRiYzA2NTczZTM2ZTU1Y2VhZWUzOTIzOWUzNjdiOGYxYTNkNzgxYTIwMjBlNTQ4MDAxZjlmOTg4NTA5OTRjM2FhNzliMTNkZmM5M2MxZDcyOTFiZWZkOTFlMDQ0YjJmNWQyNTgzZDFhOWY4NjhmYWI0YWZlY2Q0NmZlYzdkMzE1YjBjYmY4YTczMzFlZjhmNTg4ZDc1Zjk3ZTIiOjMyOiI1NjI5ZTFhNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjA1NzdkOWE3ZGJmN2I0YWRhNWI5NzU4ZWVjNGM4NDciOiI1YjU1OTczODYzNDgyNTkyMWI1Y2I2MjBiNWI5ZjYzN2Y4YjdjZTMzOTk4Y2NlMWVkMWEyM2ZmMDFmODRlNTgyNTVkODUyYTAyZTU5ZTQzOTQ3NTI0MDVlY2MxNTI0OGY3NjE2YTMzZTY0OTM2ZjcyNmRlNmZjNmQxMGMzZmNlOWFjMGIzZmNmZmJkNzU1ZjE2YmZmODQ2MmIzYmUyNGY3Y2YzNDJjOGQwYmYxY2E3OWIxY2I0ZWE4OGQ2OTA2NDQ5OThhOGFjM2NhZmM4YzE4YzhjYjczN2UzOGE2ODEwMjZkNDY5NjZiODljN2Q2YzdhNGNlN2ExZTFmYWVjZGQ1IjoiYjQzMjQ3M2FlNjcyMDViYzdhOTlmNWFiMmEyNzIxZTYiOiIiOiJkZGZlNjY0ZTI4YzVmYWNlMzc2MWRlZGExYWIyZGFjNmUzNmNmZWQ1MzhlM2ZhZjlkNzljNTRlM2M4NWI0YmFlYTllZWRjZWY3ZjhmMjhjMmZlZWRlYzcyYWIyY2M2YWFhZTEwMWI5OTUxMmVmMThlNzU5Yjc4MjgzNjRlNGRhZjlhNTcyZjhjNmFkODhlYjgyZjczMDQ5ODkzNDVhYTQ5ODVlNDk4ZGZlYmM1OGNiYzQ1YWEzMWMxOGMwZGRhNWIxOTkxZmQ5OTg5MDFjNjU4MDdjOGNmZjYwNThiMWQ1ZGZkNTgzMjk3ZGE4NDUxY2VmMTNmMjQ2NTQ3YWQxMWRmIjozMjoiY2U1NWFjMDAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZjYTFkNmFlOWI1ZGRkNmUzZDY4NjU2YzUwOGRmMzE4IjoiZDE2MDc0MGFlZDk1NWUzMGMxZjk0NjA4OGI1YmM1YmJhZjVjODRmMjgyYzMyZjY1ZDA5OTUwOTk5MzYyOGJhNWE1MWI0MTFjNmViZjU3ZDU4ZTkxNzZiNDkwYWI5MGZhOGRiOGEzY2RjNjdhNWY4MzIyZDA2ZDcxOWQ5MWYwMGNhMDdhYTJhMzk3N2RkMDgzODQ4N2YyZTlkNGRkMjg1MDY3YTFmNzJiYjhhNmM5ZGZjYTEwN2FjZjFmNDA0OTk1YmI2OGVkOWQ3ZTEyNDIzZWZlNTcwZjE0NGUwNTMzZmEzNGI4ZDBiNzE1NjExMmI4NWM5NGE4ZmEzM2Q3YTZkOSI6IjY4YTQ5NGM5MDAyZGFkZjRmMDMwM2RkMGViZDYwMGMwIjoiIjoiMjc2ZTM2MmNiNzNiNDA1YjEwYTk4NzMxMzMzZjZhY2NmMGQxOWNiOTZjMjE0MTlkNmQ1NmIzMGRjZjczZjcyMDg5MDZiMGUzZWIxMDNiNzIxY2RiYjdlYjFkNGZmMjllYzNiN2U5ZDQzMzIwNWJkOWVjNDhjNTlkMDA3NWExNTA3ZGRmMDkyNzU0MjZjMGNlOWE1OGI5NzNlMDZkNmZjZWVlNzA1NGJhOTJiMWRmNzcxMDExYWM3M2UzOWU0NTFkOWFjMzM3NWM1OTU2MzEwOTBhMjI5NmQ0MjNlM2VmODA2YWMyMDc3MGFiZjc4YWQwNDExNGY2NTY2MTgwNGZhZSI6MzI6IjhmZjlhMjZlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWEzZTU3Nzc0M2I0NTgxNTE5Yjg0Yjc1MzhmYjMyZTciOiIxNzJhMGExNDgyMDQ0OGU1ZmZkMDE3YzE4ZWUwMjIxOTkwNmY3MjFjOTE1YzRmMGZmMTNiN2I3ODg5ODEyYzBlZGI4OWYyOGJlMGMyMmRlZmY3NmJjOTc1ZDFlZjhlZjNmYzQwYjEwY2NlMGQ3ODkzM2FhMjJlNmFkZjJkNGI3ZWU0ZWQ2ZWY0ODdlYWRkYjY2NmFmZDg2NzE0MjdmNzUyNWViOTlhZjU0YTU1ZDk4MTU5ZmM1ZDY1MTI2NmM2NWNjZDkxNWNiYmE2MGZiNmUyYzQwOGVmMTc3ZDY4MjI1M2MwYjU0MTBkNzdkMDhiZTFkOGYxNzVjYTM2MGJlY2QwIjoiMWUxNTVhZGE1MmUyNTBjZWUxNDVkNjliNGEzMDdiYzAiOiJiOWJlMjE0NWI4NDJkMmY1YzNkMTVhYzAzMjAxMDQwMGJmZmUzMTg1NjQ0MWNiNDg0ZDVjOTNlNjcxMDE5NGIxM2UxNDA3N2UxMzJjZmUwMzk4NWQ0YjkzNmJkYTkzODNjMjJjMzkyOTY4Yzc0OGY3MjY1MjEzYThlYWM1ODRhYWExMWVlYTM1NTg5ZTM1MzZlMzliM2U0NDE4MjQ4OTI3ZmE5ZmNjMDI3YzU1MTZlNDAyNDQ1MDY4ZWY3OTNkMzQ5ZWI3NzhiNzdmYjBiMzdmNTFiZmNjM2MyMWRmOTk5OWNhOTk4NWNjNWJlYzY1MDI0NDViMDY4YzJkMDYxZjQxIjoiYjViZDIyNDE0MGQ2YjgyNjA2MmU1NTc1NDI5OWE0M2E4N2NiZTg2MTM2MDMzNDg5N2U4MmI3YTYwMjNhYjAwNDE3MzY0NzljOWFhY2E3YzczZjI3ZTIzOWE2M2U3NDMzZTA0OGE4ZDJjMmQyNmYwYjE4NDc2YWNhN2FjMjA4MzdhZmZhY2RmZmI1N2M2MThjZTU5ODJiYTYxZmUxNzkyYzhhM2E4NTY5NzBjMDk1YjBjNDY5NWRjZTk2MWEzNTQxMzUwNzVlMGE3ODYxOTJkNTg3NWQxNjc5M2EzYWQwZTM1NzJhODFlZmEyNDA5OWY1ZWQ5YzkyZGY1NWMxNWRkMSI6MTI4OiI3NGRmNThmZDRhMmE2ODY1N2NlMzVhM2VmMTFhOWMwYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRlYjBhYjZlOGIwZjM5MmFmNmI4OWQyNTNlOTIzZjFhIjoiMTRhODZjNDMxYmRlNWMwODYxZTZiZDJjYjc0OGExM2I5YmZiMmE0YTY3YTBiY2YwNjc5NjBiM2E5YzdhNzVmYzdlYTMyMTg2M2M4MzY5M2M3MDA3NjQ2MmVjMzE3OWY0ZDgyZWQ0YTExNTVhNGI1MDA0ODQyZmI0NzQ4MmJkNmE4MzgwNGEwNWFmMjUwNGY2ZjUzNWViOWJkYzk1YTlhMmViODBjN2RjZDdkZmY1NGUzYzAwNDM3ZTRkYTljNDMzYzg4ZjZkMjQ4ZTQ3NTQ2NTZhY2RmOGVhN2Q2ODEwNmIwNGViYjJmMWNkYjI0N2ZkZGIwYmNhMWY4ZTllZDZhNSI6ImMxYmM1ODdjMzQ0MGYxZjVkZWE1YjBhNGI1ZWU4ZGZkIjoiNjAyY2ZiMDllOGJmMjUwYzNhMmMyNDhjNGU5MTIzNDYyOWE0ZmU5YTE4YzVmOGI1OWRmMjE1ZTk3ZGQ4NzNhN2MxMjA0YmQwNjk1Nzk2OTA4ZGFhMjhiNzczNTNlMGU1YjM3ODc3YTc0NDFkMzU2MzMxMTljMGFlZTlhYTgyYzNjMThhN2Y1NzdkMDkyOTNmYWZjZTE4OTVkYWZlYTQyZjk3MjIyYTMzYjAwMTkwN2I5NzhmMTE0NzFjYzBhZGM0NjI0M2U4ZjdmY2U5NDgwM2Q0ZDA1OTViYzlmY2NiOWI5Mzk2YjUyZGViOTQzMjgwZWFjMmM0ZWRhNTQ4NDFiYyI6ImE3MmQyNzEzNmQwYjRlZmMwYWEyMTI2YTI0NmFlNDk0NmUyYzYyY2Y1MDU1ZjdiZGUyNjNlNzUxNmFjZTJiN2UxMjE3OTk4MGY4ZGNmZjE4ZGM0ZmNkNjYyZjM4ZDNiOWRjN2Y4YTA1NzgyN2ViZjI3ZTVkYWI4NTI2NGQ5MzI1ZTBlZWEzYjEyZjhlOWUzOWFkNjg2MjYzZGY3NWIwNzU4Y2M4YWYwYmU4OTg4MmJiMTU5Yzk1YjhkZTM5MmIzZTI5NWMwMzlhNTIwZDJlNTZiNTBhNjM3MGFmYTU3YWRjOTY3ZjdlNGZmNjcwZGFiNDcxYTU3ZmI2YzgxNDAxZWIiOjEyODoiZWIyNmNkZjg3OWUwY2IxMzIwZDc4NmE2NDJjNGRmYzAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZGY2MDA2ZmIxY2ZlYTBmOTY0MWE0YzM1Yjg2NDEwMSI6ImQyMTc3N2UxZmFiNjMyYmZmZDgyYTU4Y2I3MzI3OTRmMTEyY2Q4OGJkZGE1YTdhOGQxOWM2OGFjZTM0M2ZkNzg2ZTVlNTEyMDEzODg3MTA1YzIxMjk5ZjJkNmFlMjNjYWU0ZjAzMDQ3YzY4ZjAxOWQ5OGU3NmQyYWExYjNhMjA0ZjEzZjRjYmExM2Y1YTg5NTdiOWFhM2ViYjQ0YjgwMjRiMjZjYjYxMzlhM2JjYTNhZGEwNTIwYTY4Yjg1NzFhZTg5NTAxYjIxMmExZjhlZGU1NzUzZDU1N2FkMmYzOGQ5NDY1ZGJiMDliNTU1MzAwYjEzMTk0YmY3ODE3MzIxZjciOiJhMzQ5ZDk3ZmM2NzdkOGJhNmY3MmU4Y2M3MTkxYWI3OCI6IjU3MTdiZWU4YjMxNjQwZjM5OTllZmRhNDYzZDRiNjA0YzFjZWY2MmZjMGRjYzg1NmVmYjRjNTBhOGM2YjkwMjAxOWM2NjMyNzllMWJmNjZmYjUyZDgyZjg1NzBiOWEzMTQ2NDdmNGIxZWQ4NmViODlmNGJlODk4MTIyNWY5NGQ0Mjg1ZjVjYTkxNjc0MzRhMTU2OWI1MjBiMDcxZWU0NDQ4ZDA4Y2I4NjIzYjRjZGE2ZDFmN2FkMjhlNTFhMmRmOTgwYjVhOTk5MDI1ZTliYTY0NjcwNzA3NWE2Y2IyNDY0YzJhMGQ1ZmM4MDRjOThhNzk5NDZmYWUwYjRmYTYxZmQiOiIzNDVhZjBkODA0NDkwNTg2YzlmZmJhZGEwNDA0MTc2ZjRjYjEzMzFmYzc3NzA1MTc1NjE5ZjI3ZDEwNzUxMmQzZTYwNjgzMjNiMjc2NzQzMjg0ZmViOTM4YzU3MThhNWIwMTMzMDVmYjQyMjgyYTg5ZTI3MGQyNDU4NTIzNmZhMTgyNjVkYzdlOGRkZDJiM2VmZTkzYTJlYTA1YWIzNTkzMjNjNzUyMTFmMjEzM2FhOTcwMjJjOWE5MzdhNDY3YWYzN2M5MmE3OTVjNjgyYTMwZjJiYTFjNGFiMmRjNDVlNjNjNTZjZDNiMjliMGVmYWMyY2FhMzE1MGU2YTcyYWEzIjoxMjg6ImFlN2QyODI3YzRmMTQyMmI3MjhhOWZkMzFkOGQxOTE4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTdjODNkNDYyOGI2NWQ5NDM0MTk4NGJiYzI2NmRjN2EiOiJlOTk4Y2MwYjc2NzdmYTJlNTA0OTk0ZTk5Y2Y3YmJkODRiYTdlMzU2ZDdkYTE3OGY4ZmY0MGRkZGMwNDZjNzA1NTRkZGVjMWQyOGFhMjNmOWM0ZTZmY2I5ZWZmZWI4ZTI4YTg4M2FkMDViZDBhNjA0MWI4YTI0ZDBmY2VmZjIwMGE0ZTMzOTk2ZTI3OWNiZjAyOWIxMWQ1ODE4NWFkZWI1ZTVlNzk3YTc0ZDBkOGIxN2FkY2YwNmRmYmUzZWUxMWQ4ZTZiYzNiNmE4NDM0ZGU2ZTBkZGZhMGZkMDhjOTEzZjlmYjkxMWNlZmNhNzJiYzNmNjE2YjRhYzk4MjFmNTNjIjoiNjcxZGNjNTAwMWMyMTQ2YmY4YTRlNTIyYWQ3MDJiZDgiOiI5ZWIxMmE0MmQyY2EwNmE3ZGEzN2ZiYzIzZDIxM2Y1ZTNmNWUxNTU4MGYwMWIwZWE4MGViNGI2YmQyODNlMzA3ZGVjOTY1NzQ1ZWEzYjM1MDlkMzI2OWNmMjU4MDhmYzZhOTIzZTk3ZDg3ZDBjMWEzMGI0NDdhNWEyN2EwNmQwYzg4YTk2Y2Q5MGQ5OTBiZjIwOGYxYWJjNDkzNGY2YTBhZTM0YTY5NDc1MGE3NGZmYjI3ZjRiYjY2YmM3OTlkNDM1NzBiMDE4OTdiOThiMDBlNmEwMWI5NWIzNTZiMTFkMzNlODUyYjIwMTBkYTU3ODVhNjkxMjQ2ZDBiZTJiY2ZiIjoiNWE2ZDg5MzBlNDczZTI5MmU2NzQyNTc0OGU4NjE4NTY5YjdhNDc4ZjFlMTgzYmE0ZTRhNjQzODVhYzRiNzVkM2Q0MmIxYWZjMzRjYzZkYWZmMzQxZjEwYzFhZDhmMDNkNzcxNzlmNTJhNzIzOWFiMzI2MWY1ZmNkNWEwYjQyODJkMjZmYTRkMDhiZjBjOGE1Yzk2NzgyYzA3M2FkNjNhZDIzM2RmZTNhYTAyOTBhMDNkNzNkZTE0ZDQ0NWI5Y2U0ZWEwZTNiMTBhNGFlZjcxYzU5MTk5NjliNzA4NjM1M2M5NDJjNDc5YTFjMDUyYTc0OWFmZGUyMzI1ZWY0NmY3ZiI6MTIwOiJiODFjYjdiZmQwYWFmMjJiNzIzM2JjZmUzNjNiOTUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZGNkNWM5NzRjNWQ3OGNkZTBkM2E2NzdkMGIxYWNkYyI6IjIxYjYxMDM1Y2EzYzE0OWQ2NjYwOGQ3N2VkZDk3NzA0MTFlMGVmNzNhOTdkNGJlOWRjZGU5NWVkNzk5N2JhOTcxMTdhZTZjMTk3OTE5NWE1ZDkxNmZmN2ExZDQzZGRjZWQ1Mjg3MDA0ZmI2MGEyYzgxYzgyYjVmN2M4YTMzNmE2MDNjM2ViN2NiMTYwYmJmMjFiNDU0ZjgxMDY4MTQ1MGQ2NWRlYjY0ZTdjZDIyOTMzM2ZjNWU4NWRjMjkwNDBkN2RhNDg1MTFiNmIyNTI0ZjAyZWFlYWI0MjJiNWNhODE3Nzk2YzQ3YjlmMmQ3ZDQ5OGFiYzYxOWIyY2UyOTEyYmYiOiI3NDU1ZmVhMWJiYmZlOTQ3OTgzMGQ0MDNlMzNjOWQxYyI6ImQ2ODRkMzhmMmIxMjExMTE5N2NhNTEyYzU0YzhlMjllZjFjM2I5YjA4OWE2OTIzY2RiMzI3Yzc2M2YwYWM4YzJlYzA5MDBjNzE2ZTIxMWU3Y2JhMWQ3YzEzYTYwZmU4N2Y1ZDc4ZTVkNTIxNWQ5MmU1N2EwNjQ1ZDliMmVhYjRiMTE4NzBiNWY3YmZhOWYyYzllNGI5ZmNmNzU5NmU3NzE5YjdkMGMwZTZjYzE2ZWZlNzFkOGJjOTJlMTZhODNkNDc4MmYwOGU5Yjk3ZGM4NWExOGM0MzViNTFjOTQwMTg5YTNjMjYwODM3OWEyMWE4YzQ2NjMzMDIwYjliNmNkMTAiOiJlYjAzOWQ4Y2YwYmYyMTdlM2YyYWE1MjliYTg3MmMzODVmMjc3MGVkZTZjYTRlZDMyZmQyMmNkM2ZjYmZkZGZiOTJkNjgxZjAwZGY2ZmJmMTcwYTVkYWQ3MWM5OTg4ZDU1NmNkNzRiYzk5ZTE4YTY4NjgzZTBlYTdiNmVmOTBiMjFmZjQyY2VmOGM0NjI3ZTQwNTFiZmYwZGEwMDA1NDM5MGUxMDAzNmY0MzBkYmUyMTdlNWJkOTM5Mjk1ZDljOWY2NGMyNjE0ZDQyYmE2MmVmZTc4NzYzY2M0MjcwMjdlZGJkMGI3ZjcyZWNlYWE4YjQ3NzZiYTYzM2YyYzNkNTAwIjoxMjA6IjE4ZTdiNTBmY2VjMTFjOThmZTU0MzhhNDBhNDE2NCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU1YjEzMmJiN2FjYTNlMDExMDU4NDhmOWIzN2ZmNTE2IjoiM2I2ZDFhNDMyYjdmZGI0MDIyZmMzNWQ2Yjc5ZWEwM2I2YWExNGQ0ZGRmNjBhMTYwZTk3NjkwOWNhMDY5MjQyZmIyZTdkNDE0ZDRlMzRmZmRmOTQxNjgyM2M0YjNmNGUwMThhYzhjYTY4OTQ0NjY0N2VkYTZhMTIwMjlmODg2YmNjOWQxOGJlMTUwYjQ1MWQ3OGZhNzJiOWM0ZGMxMzMxNDA3N2E1YjA0Y2ZmZWIxNjcwMDVjN2U4Mzc5OTQwZTZiOTk4MzE2YmVmOWJmOGI1YTc0MmUzMzc2NjNjMGVkOTFkODhkMDlkMGMzZWJlYzM3YWVjYWViODI3N2IxMzY2MSI6IjI0YzFiYTc3ZDM3Zjk5MjUzNTc2ZjQ5NjM3NzlmZDU5IjoiZGVkZjc4ZjA1OTU3YmRlOTA2NjM5YmQzNWVhY2Q4ZmJhODU4MmQyODhjOWYxNGEyNWViODUxYTBhMzRjODJmZDkxZjJiNzg2MTRmZjQ2Y2ExN2ZlNzc4MWQxNTVjYzMwZjNhNjI3NjRiMDYxNGQ1N2M4OWZkZGZkZDQ2YWY0ZmE1ZmM1NDBiOWVlOTA3NjgwNWQ0ZDEyMWFhMGRhZDI0NDlkMjI4ZjFmYzNjMDdkNDY2YzA1MWMwNmRiNjg0NmI5MDEyZThkMjY4YzZlMWUzMzYxMjFkMjcyY2E3MGQ5NjUzODlhNTM4MmZiZmVjMGE0MzllOTc5ZjE2ZmFiMDI4MyI6Ijk5NzZkMmYzZTE2NDg1YjZiMzY5OWE1NDFiNmRmMzg2NTYyYjVlYTRmNmY5ZmY0MWQyNjViMTZlMmQ3ZDNjNWYxMzFiYjU4NzRjZGZmYTg3ZTcwNGFlM2NjMjRmMWRjY2I2MmJhYmFiZGNkZWRmOGJhYzI3N2E3Mjc3Y2E1M2E0ZDM4ZmQzMWY5ZmM4M2Y4NmExMDU2NjNmMDQ1YjcwZGFiZDU1MzEzN2I2ZDYyMjJhYmIzMzRiN2JlNzY4OWE0YWZhMjgxMDM2MTlmMTFiOGI2MWFhOTJhNjMxMzZhZDU2MzlmMTFiYWU2NGIyNWYwOWYxZTJkYjcwMTkzOGZhNWUiOjEyMDoiMjlkMWI4YTY4NDcyZjJkYTI3YWE4NGJlNzE0MTA4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjM2Mjg1MTlhMGYwMTA2MjBjYmFlMzdmOGFkMzQ1NzAiOiI2ZGIyOTE5MjA4YjA5YThhYmU1ZTk1ZGNmZTBmOTU3ZGNlMWFlMGU1YjI5ZjA2YmYzMjFkYzgxNWNlY2EwOTRmMzhjNWM4MTJmNTkxYWVkYmM5ZmMyOGNjMDMxN2JkMWQ4OWQ0YTNiYTE0ZjdiM2U1ZmIyZTAzNzc4OTkwYTYwMDZlMGVjMmNlYjQ3YzkyM2YzYjE3NDczZjk5NTIxNDkxYTRjYjJmOWJkNDM1ZTMxMzNkYzkwZTEyOWRlZDlkMTVkNzhlNzViZmIzNDkyNDU4Y2UwOTY0ZDU2MTQ1MDhlZjJhMzhlYTAyZWM4NjY0YmE5MDE4OTFhN2NjODZhNjJiIjoiY2UwYWQ3NWI5NGFiMmQzOTE4YWJmMjU1Yzg1NGVjZjYiOiJjMjkzODRiZDdjZDAxM2ZhMDI0ODc4Njc1OTVkNzM5ZDk5ODg2YTNiYmVkN2ZkNWFjZDY4OWYzYTc0ZjI0MGYxNGM4ZmZmZDBiZGVhMWY4M2JmZWY3YjU4Y2U1MTI4NDllM2E5ODZmMzdhZmE1NGRkYzExNzE5MTY5YTQ5YmQ3ZTcxMzhhNzQ1MDUzNDE3ZmY4MGNhYjFhMzJhZTliZTQ3NmNjYjYxYWUwNTViMzE5ZmRlZTVkY2FiNjI5YmIyMzdhZWI3ZDk5OGNlMzZkZDljNjkwODQ1MWMzYmNhOWQzNTgyZjdmZDYwZTY5ZjYyOThkNDNhM2I5NTgzNDFiNjExIjoiNjIwNWQzN2Q3MjBjYmI2MjhkYmQ1MDY5ZjM4ZGVkOGU1NjYwMzBlYWRiN2ZiZGYyZWQ4MjdkNWY1YTAxMTdhMjFjNzVhZGU4OTc4MmIzZGM0ZTczMDdkOWE3YWU0MDZlYWQwMTQ1YWVhMWI2Y2NlMjg2MTAzYTU1Y2UxOTU5OTkyMTRiODRiYzI1MjgxYmQ3ZmU1MTE4NjhhNjk5NDRkNDgzZTA1ZWE2YjM5YjExNTU4YWI0NmEzM2QyMjc3MzRlYjNhMzg2ZTMwZDU4YzMwMjllZjBjYjQwNDZjMDg1NjA3OGQ1N2E2ZGYxOTRhYThjMGUxMGY5YjZlZDhmYjQwYiI6MTEyOiI0MjNmZDU0MjQ5ODgyNWNjNTQ1MDFjYjQyYjJjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2MwZTFjNmJkZTc5MzE1Zjc5ZjIyZWJjNzcxMDcyMjgiOiI5Y2Q1NmIxNmFhNGUxMzBjM2RiZjMwZTcwMWU4Nzg0ZmYzOWY4NjYwMzFlNzc4ZTlhYjcyYjg1OGMzZTMzM2U5NTg5YjRiNmNkODlkNjU0NmU1MmE0NzhkOTJiZDU5ZDBlNDc1NmQ2YjUwMzdhYjE4NzNkODgyNDJlZjMxYmU2NDM3NDVkMjYzOTUzODViNzEwMzRmNmYwYzBjODQ4MTZmMGM2NzU1OTY1ZmM4YTc3MThmODkxZDYxOGYyMjY2ODRiY2M3N2Y4N2ZlMTY4ZTE3OGIzMzBkNGI0YzBlYjQ3OTEwMjgwMTdmZTZjNDJlNjhiMGUxOTU2NTRhNWQ2NWU1IjoiOTAxMWRlZTU3YzNiOGUxMTJlZmE0ZDJiODE2Y2YxODkiOiI1N2JmY2NjYzZmMDBjMGFiYmM1ZjMwNTg5ZGJiNDc1OTc4MzhmZGQ1MGRkNjIyZWVlZGVlMzM4MjRlNjNiYTc4NzUzYzA1ZDI1NDM2ODdmNjBkZGU1MDE3NTdiNmZiNzRjMTdmZTM0YjNlOWM0NTVlYjM4Y2YwNzhjOGM3N2VmZjY4ZDNlM2I4YzI0NGNkZTcwZGRmNjE3MDM2NjRkMzQxNTlhMTE3ODVjYzY2MjZlYjFjYWQ3MGFiOTQ0MDU2MTZmZmY1MmMwZjc4MWVlNmI0M2VmMmE0NDk5MjRhNzZiNzYyMDM1ZmY0NzljZDYwMDZjMjFhNjJhNTZhMTQ2NTBmIjoiMmMxZWY5OTg3NDcxNjMxMDRlNWE3ZDJhNDQwYTFhMWNjMmMyMDQ0NmE5ZDBjZjVmMTM4Zjg1YzFmNWFmZDkwZmRjM2ZhNDkzMjg0NWMxNTA1MThmNDBiZmQ1NjU2OWE1NDc5MTI2YzQ5MDYxZWYzNTBiNGZhZTg5NTE3MGI0ZWI5NGRhZDdiNDU2ODkwYTgyMmUxYmNiNTdmOWJkZTViZWE3NDdkMTdiZTNkMThlYTIwMWNkOTliYzQ2ZmVlMjExMzJjNjkxOGZmYjAxMTc3NDRmNmJhM2YyNWJjOGE1MGY5NzE5ODU0MzE0YjkzNGMzYTMyMzBmNDc1N2E0OTExMyI6MTEyOiI0ZWY5YWViYjcyMWRhYmUyZDA5MTAxMDM3YTYzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTNmM2ZhODVkYmRiMjc4NGZiMDc4YTM0YjExMTZlYjEiOiJlN2EwZmFmZGEwYjkwY2FkYTY3MWY1ZTJhZGZkMmUyYTVmMTRlNDYxM2VhNzZhYWQ1N2U3OWUyY2I1MzJmNjU1MjEwNjE0ZTIwMzZkN2FjMDA1ZWQ1ZTUxNjgxNGQ4NjY3ZWQ3MWUwZjI5YjljN2I0NzBmNDcyMjMyNzQwN2NkNmNlNmRiZDI5OGNlZTM3YmZmMzNjMzVlMzRjZGZlYmJiZjMzOTM0NjczNDY5ZDZiOThiZWNkNmQyNjg2ODk3N2U2OWUwNmRlZWU5OWMxMThmZDRkYTM1MzBkMzY3ZDIwZDE1MTA3YzAzZWZlMGQ3ZTdiMzg3MTAyMzFlMGRjZGYwIjoiZjVhN2IwYjI2ZDFlODZmNGZjNjlmODFjOWVlZmYyY2QiOiIzZDJhMWRhZGNjYzU5N2I1ZTdiNmNlNDg3NjAxNTBkZWUwMWM4NTUwYjUyNWM1ODdhYmNjZThjMmM3ZmI2MjkxNjgzYTU4YzJlNDJlN2I3YmE2YTNjMmExMTdkZGI3ZTY3ZWEwNThhNzg5ODlkNjc5NDZmZDk1NTFlMzBmY2I1MjYxOGRjYjlmYWUwNzljYTU2Yjc0NTcyZDdiNmE3YjZhNWM2MGU5MDZlOTYzOWVhYzVlZTFhNWEyZGI4NjQ3MjExMTlkYTJjNGM1MTEwYzJiOGQ0ODdlNzkyY2Y2OTI5NjAwZjE1ODdjYjJkNDhlZmU2ODY0MDE5YWZjMzJhZjZlIjoiNjBkYTNmNGIzYTI2M2JjMDE3ODM3OTY0NmJjZTM5MWJmNTUyZjYwZDI4MzMyNjE5NjIzNzVkMjk2MGM2MjlkZWRhYzY4MWQ4NmY3OTE1ZWEzY2ZmZGFkMGYzN2U0MDk2NjhmOTIzZDdjODYwNTI1Yjk5NGIzMjUzOTY1MzE5OTRhMmZiYjJkNGU5MDlkMGIxZGNlMzIyZTA3OGI0YjhjZDk5ODIwYTM5ZmZkN2I0NjhiZDNlNzNiNDE4YjlhMmNkNTc1N2I3ZDQ1ZjAzNjM1NzRjOTI1YmMyMmQ2NjY0NWFiZDk1YTZiMjllYTYzNjZkOGMyMjUyZDFjNTcxMGQ0NSI6MTEyOiI4MzNkMmM1NWY1ZWU0OTMwNjA1NDBkNmI1MzQ5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTYzYzA1ZjY5Y2RjNGU1MThmZjY0NDU5MTFkMWVkZTAiOiI4NGQ4YTE4NTU0MjMyOTNkZTM3ZWJmZDk3MTVhOWI0NmIxNzViYzZkNDRlOTRhYzhhM2U3ZDQwOWU4YTIyN2E1N2E2Yjg1MTQ0YThlZTIzNTY0ZmFkYzI4NzQyYjY5ZTg5YzBkNGFhZGYwYTc4NmY5YTVkNWY5MTk4OTIzNjQzZmZjMGJmZDBmOTZlNDNiMDhmMTQzNWQ0YWZjMGU0OWMwZTIyNDFkOTM4NzgwOTc1YmM3YTMxY2RmMzhmMzAzODA3NTNiZGQ2NmJlNzJiNGRmZjI2MGEzNWRjMTBiOWJhMzUwNTliYTYxYjBiZWFiMTZlMzUwNjg3MjFiZDk1MGUzIjoiNGIxNjE4ODI0OTA5NjY4MmI4OGFhNWU0YTEzZjYyYzEiOiJhMjM4ZDExMTFlZmI3ODExZjY4MzhjM2NiNmYzYmYzZTBlY2VlNmQ4ZWZiMjY4NDUzOTFmOGFkYjUxZTQ5N2U4NDBlYTQwMzE4YmY4ZTNjZjA2ODFjM2I2OTk1MWM0ZjAzZDVhNGI1ZWRmNzExOWExNTBlYWZlNmRjMTZiNjhmM2QyYjkxZTE0NTQ2MzcxMzUxNDhmNGZlYzEzMmJmZDk2Y2EwODgxNjlhMzU5NjFkNGM2NjM1MzViOTg1MmYxMmEwMGVjNGMwODA4MjU1M2EwOWVhMDQ2Mzc5Y2U3NDdjNzE3MDM2MTU0ZDA2M2Q4NzZhMmI5NWNkN2JkYjQyZGFhIjoiM2JmNzUxY2Y2M2JjMWI0MzNiZTYwNzUzMDM5ODZhYzFkMDU5MmRlZTQwMDc3NGQwYmI3YTllNzIyMjQ0MTc2MzllMWU4M2U2OWYzNDIyNmI4NzMzNjVmNDFmZGFjOTI1NjI4ZjMyZWQ0YjU3MmIzNzQzMTBlZGZkODkyYzVlMGMzMTk3ZTU5ZWZiYzIyZWUxMWYwZDRhNjZiZDczYTZmNWIwZGU3YzFjYmIwNjEyYTYzYTI2MmFmNTFkNDE4NTc3YTliYWUwYTg1NzdlNTQ3MzgyODc4ZjEzMDQ3YTkyZjUxYTg2N2Y4YjdkMjgzZDIwOTljMzRjMjM2OTE4ZjcxOCI6MTA0OiIwZDc3ODI5OWM0ZGMwNDE1Y2E3ODlkZDViMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImEyZmY3Y2I5ZmUzM2IwNGEwODdkOWVlNmRiNThlYzBlIjoiZWQ3YzIyMjE4MDA5Y2ViNWIzMjIwNDVmZWNjMWZkNzQ4ZjI3NjU1Mzk3YTA5YzJjMjk4MTNlYmE5YTVjYmVlYmU4OGQ0YTM1ZGZkNzQxZWYwYWMxZDExYzRhZGJjNmJmYWU4MjRhZjg4ZTNjZTA5ZjY4ZDhjYTc2NzFkZTkxZWM5ZTJiZDVmNzkwZDFjYjE3NDhlMzRiMzU2MGM5YjEwNzI2ZWE0Yjg1YjEyNzczMWQ4YTdmZGZkMGRkYmVkMTFhYWYxODE3OTlmNzFhNjhlNTQyYjQzZWQ5ODg5MjM3ZDJmZmZlMzcwZjQxMDY0YjgxMGMyZTE0ZDFhYjY2MTUxNyI6IjZjNThlYjhmMWY1NjFiMTgwZjA3ZWRlMGQzYWUzMzU4IjoiMDBjYjYzZmEwY2Y1MjZjNmRiMzdlMzNjZjA5MmYzZjQyMWZkMjU4ZDI4NDQ2YzlhN2M2ODdiOTQxYzdlYjVlMWM1YmUyNjdkYjk5MmQwZDkzZWRlMGIwOTAzMGY5NzlkNDUxZWNiZGJiYmIzODZjZjFkNzRiMjNkNTViNzRmNWY0ZDUyMGMwMDBjOWE0MTkyMmY1NDU2N2NhN2RmY2Q4NGM2ODg4M2EyM2M3YWNjM2RiM2NkOGQzNDAyMTdlZTdjNWVhMzliNDFjZjJjMGU1OGMyNzBhMTllZTllMTQ2ZDJkYmZkYWY4YmEzZTI0ZmRhN2YyYzVlNGJhNjU2M2VmNCI6ImYwZjExOWJkZGY1ZGRmMTQ3ZmUwNmRhOWQ0NTEwZDk3MzY5ZDhlMzQ1NTE5ZGYyMTg4YjhkMmRiYWY4YjdkM2UwMWYzYzI2NDc1MTQxYWFlMjI0ZTVjZTFiMTMxYzgwOTZmMGUyYTE3YzRjMmRmNjJmNzZmMDA5Y2ZjOGFhMjBkZGNkNzVhNmE0MjgxY2ZhMjIyNTQ4NWNhMjJhYWJjYjYwZmYxMTI2NWFjYjkyYTE5ZWQ2Njc5N2ZjMmI0MThhZTRiOGM3MGZiZWNmMGZkNjNmNmMyMmFkNjJiZmQ2ZjQwZDhkMGUyYWJlYjYyMGI3YjRmNWQ4YjNlMDQxYTUzZTYiOjEwNDoiNzg4NWNhMjJjNGFmZDdkYzZjYjQ0MGVhMzUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZTczOWE0ODViNjI5M2I0MzUzNTM3OWUzYjMwOWZlOCI6IjY5OWI5YTU2NjgwNDJjNDhjNjNmZmIzMjNjMGZhYjE4NDQ2NTQ2NDE3YjJmMzNhNjlhZGRjZTYxNzhmOWQ1YjdkZmE4OTFmZjIwMDRlYjU3YTk4Y2EwMTJjMjY2OGUwNjE0Mjc2ZDg5YjIxYjdiZmE0MzZiMmFhMTU4MmRhYWE4MWE2YTc3MjIxODZlOTlkZDE2YTU3ODZmZDBlOGIwOWIxOTQ3NDYyMzJmZDQxMzk4NDQ4NDUyNDc5M2EzNzkxMTJlMjk3ZDczM2RjZTA2MzQwOGZlNTkzNjdmNTkyOWM1MDg2YmMyMTkxYThmZGQ2MGEzNDYwNTJjMGQxMDlkNTciOiJjNGRlY2EzZWVlYTgwMzUyNjI0YzkzNTIzZjM1ZTBhZSI6IjcwNGFhMzZhODJkMDJjNTZmNDk5MjQ2OWJiN2U4YTNmN2RkYTEzMjYwNjhiZjYwMTdlNGEwYzgxMDM1MmI0NzZhZWExMjljMWJhMWQ0OTc0YmMwZDA1MDNkY2Y4MTZiODljMGRjOGU2ZDA2Njc3NGNlOTdjZWE2NWI1ZmI1YzdiNWE3ZjkzZTVlMmM3MTI2ZGQzYjI0MWI5NThlNDdkODE1MGI0MjJiYjkxYzRhZmM0N2Q1M2NmYzJkMjAxNzZjMmVhMGM4NWIzNzZkYzQ2YTg2YmJhYTUzYzU4NGFhNTYxZjY2NjJkMTFkZTRlMzllNTBmMWEwOTViODU1NTEzN2IiOiIzMGI4ZmEyZTUyNTc3YTdlNWNkYzEyYTdjNjE5NjE1YjEzNGFkNGI0MTg5M2JhOTEyMDY1MWNkMzVjNmYyZDQ4ZWM2YjhiOWZhOTkzNjZjNGQ2MGU2NDNhOGNjYjJjYmIzNTY4Zjc2NDdmNGFkMWExMmQxNGRlYjhhYWMwMGRjNGVmNzgwMTMzZWU4ZGY4ZjQ5NDY3NWRlYjdmNjc4ZmVkNTRlNzBkNmJmNDM0NzY4NTRlYjAyODZhNDljZDMyMmNjMThkYWEyMzhkNDU4MGVlNjY1ZmJjNzU5Mjk1YTNlMTI1NjdiZWZmM2U4MjM4MTEwOTNjZjBmMDJkMDA4MjBiIjoxMDQ6ImZmODllZTUyZmE0ZWFlYjc0OGM4Njc2NDkwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YmJiMTIzNjFjOTU5NTNhOGQ3NTdiY2JiOTI1NjhlYiI6ImMzZmNjYzU2OTNhYmU1M2ExM2U1MjA5ZjgwNjExZmFkMWU4MWU3Y2UxOWE0NjEyNjY2ZDk1NGI0YjZkMjA2MmJlZTc2NDE4MTcxNmQ1ZmUwZmUxZGU0ODViYjczOWQ2ZTg2MjVkNWI2Y2VkY2FhZjZlNGU1ZWMzNTBiYzIxNjhjMjRkNzc2NGU3NWIwY2YwNzlkN2FkMWI1ZmMyNGRiZWQxNGM1YWU0NzE0NzM0ZjQyNGIzNjExZGUwZjcwYTBhOGQ3NTJmYjE0M2UxYjdlNTFlYmM5NjVhMDYwMjFkZTM3MThhZjMwYjA2N2RkZTI3MGQ4MDRmYjViODdmZmIyOWYiOiI0OGNhODIxZTVlNDNmZDU4NjY4MzgwNDkxZDU4Y2RmYiI6ImU5NzI4MGZkNzhlYjhiZDY5NTIyN2ZjNzk0MjA5NzEwODFkZThmMjRiYzk1ZDlhMTc5NGVkMmJlYmY1YjY4ZDhiNDNhZTgyODhlYjVjZTcyZGIwNzQwMzM0ZmY5YmM5YjRlNjYwNDE4ZDNjZmY4YzM0NGU1MGM3OTYyYzM2N2MyNjI0NzgwNmQwYjVjMmFlMDQyMGE3MjQyMDNkY2Y0ZmRlZmQ2NTEzZjgyNjNkOTk1YWZhNDc4MGE5YzRlOTJjMjU0OTYxMDZmZWMzNzBkMDQ1MGQ5MDcyMjUxOTBlY2NjZmFlNjM0ZjExZjhmNzRmNjQyMmE2NTJiMmI5YWY5ZTUiOiI2MWNmYzVhNmFiNjg0N2JmMDEyN2IzNWNlMDcxMmNiZmE5Y2QyOGRmYjNmMGI0Y2FjMjYyNGM1MmNmNTVmMzExZTU1ZTlhYmZmMmQ0NTE0YzZmZWZmODAxZWE4NzM5Zjg3NGRlZDJlZmNlNGE0NDBmMmFjZDk1ZWJhNmM3NWUwOWJjZDkxYjg5OGM5ODU2M2EyNmIzZGY0MTU2NThjNGQwNGE2YWFmNTQ3YTkwYjAzZDE3ODliZGY3YWI4ZjA5ZjZkOWYyMjJmNTY3NDYxMzgwMzcyYTk3NjI0MGI3YjE4MGMzZmE3YjQ1MDdlNTM4MTVhZjNmNmI0YTQ2OTczODA2Ijo5NjoiZjg2ZDUzNzRkMWFkMjY5Y2MzZjM2NzU2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYTBhOWIyZGQxYWUzMWIzZTQ3YjZkZjk3OWRkMmZiZiI6IjM1Mzc4NmY5NjYyMGFlN2RmYTdhZWUxNjNjN2JiMzAzODRiYjMyNGI1MTZjYWQxMzg3MmY0OGU3MjUxZjZmNGM1OTA2NzQ4YmYyYTJmNjE2N2JjMTQ0NTNiMmIyZjUxMzgwNDMwOGJhOTJkNjk2MzliZWFjMmYyNTI3NGJkNTQ3Nzc0NDI4MWI3ZWY3ZDA2NjFiMzY3MmNkNDVhYmQ1YmQzMGQ5OGRlYWM0YWQwYTU2NTMwOGMwMjI0ZGZmNTllMzE5MGM4NmRmNmE1YzUyMDU1ZjhlMGY3M2ZhMDI0Zjk5MTYyMjE5ODM3Yzk5OWE5YzBhMTJjODA2ZjAxMjI3YWYiOiJiMzljODYxNWZhMDYyNDEyZmQ5YjZhYzNhN2U2MjZmNiI6ImRlYTc1YjE3Y2QxM2RkMzNiNTAxNmRlNTQ5YzQ0ZmE5Yzg4YmFmNDI0YWM4MGM0ODM1ZTg2OGFjYjU4MDgyZmZjNDI1NWM2NTU4NzhhMWM2MjdhNDQxNjBkNWU1MDU0YTBhMDRmNjVmZGZiNTQyY2QzNDJiZTJhYTJlMDAwMTE3YmY4Y2Q2N2IwMmYzYTM3MDA3NTU1MDhmOWFmODM3OWMyMjZhZGVkNDA0MTE3YTVjYTNmYTcwOTY4NDk1ZWFiMjg3MDY0ZWU1ODRiNGNlNTk2NjEyZjJjNDY1ZDk5NzUxOGM2OTk1NTE4ZTNiYjg4MTk2N2FiNmI5OWQ3ZjYyZDciOiI4NDMwYjg3MzVmMGIwMDJlMDk4ZDUxM2VlYzdiM2E4NDMxYTNmZGFjMmI3ZmFmMjU2YTdiY2YwOGYzZGNkNmZhNTQ5ZjAyOTI0MGFjYWU0ZGJkNGFkNTQ3NTJiYTM1OGMxNDg5M2FhYTY3YTAwMzI2MWMyNTIwMjBkMTRiNTIxOTA2YjIzYzM3ZGQ4MGFmNzAzYzI5NjRjZTEzNzczZGQ3MmZhNTZjMzg5NzY4YzZlZmJkNDg1OTUzOTAwYjU2ZjZiYmFhODM3ZjE2NjhmNDc4Njc3NjIxYTI5N2Q0YjVhMmMxYTg2ZjY4OWQ4NjQ0Y2FlYzUxNDM1YjBkZDY2Yzc3Ijo5NjoiZjAwMGYyZDM5OGRmMTg1MzQ0MjhmMzgyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0ZGE3MzZmYmEyYjcyMDJlYTJiYTYwNzkzZGEzMzQ0ZCI6IjRmMDA0ODUyZWRkNWRjZGUxMzUwNzI1MmVkOGMyYjIwYTA5M2FjOTA4MWNlMmE4MTMzYzQ4ZDI4MDdlNWY5NjhjMDRhMjBkZDUyYzA3MGQ2YzQzYzcwNGI4NjUwZGE3Zjk0ZTU0NTBlMGQzNGNmYzJiMmQyYmE3Y2I1MzQzZTZiNDI4MTYzM2M2YzA2NWRhZTI3ZmFiMThjYTcxYmVhMDE4ZWJhOTRkMjBlNzhjNWUzMjIzYzcwZjUwY2I3NzM5OWMxYTg5NDM2ZjFlNzIxMzY3M2FlODI1ZDRmYzU1MjM2NDUwMzE2OTZkZjEwZjliNTIzOGMwM2Y3MzNiNGRmY2YiOiI4NTcyYWY0NDJjOWFmOTY1MmExOTJkODkzYzE4YjhjMyI6IjQyOTkxNWMzMzA5ZmJhMmE0MmI4ZTg5ZjQyYTkzNzZhMmYzMjk4MDVhNGQ2ZGFhZTExZTlhMjBjMmY5ODI2NzFlZjhhNzUzOWE5NjU3Nzc3ZDAzY2JmNzU1ZWY5M2JlMGQ4ZTQyNmVkMDA4OTlhNTllOGI5NjNmZDQ0MjY5ZDY0NjkyZWQwN2IyMzFjZGU5M2U4NTM5N2NmMTI1YTc1MDMyY2EzNzI2ZWExZmYxYjA1ZDc5ZjIwNDBjMTEzNTAxMmI5MDU5NzE4NmMxZGIyZTE2Y2QxMjhkNDVhN2I5ZDkzNGVjMDEzNDFkOTAzMGU5NzIxYzYyZjYyMDAzMDU5YjgiOiJmZjRlNDZjNDIzNjMwNGI4ZDUyYmEyZDZkYjI2OWY5NWQyY2Q1ZmU0MzE4Y2U5MzBkNDA3MDUxNDY5YzdlMzZlNDRiYmNjOTA5YzQ5NjYyNzZmNWEyZWM3MDAyMTk4MmZlY2JlYWUzNGRmMjM1YTNlOWUwMzcwYWZhNWEyNjljYTg4NDdhODRiODQ3N2Y3ZGRkNjA1NWQwZjgwMGZmNGQ0MTNmNjNkYjUxN2M5NmQxNWRiZTc4NjU1NzQ4ZWRkODIwZjJlZTc5ZGY1ZWNhMzE3MTE4NzAwMjJmMWY1Mzk0Yjg0ZjA1YmZlZjk3Zjk5Y2JkNjIwNWY4ZTUyMmIzZDVlIjo5NjoiNjI0YjBiNWI2Mzc0YzUxNTM4MzViOGU1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1YmNjODc0MTE0YjlkNzhjM2ViNzQ4YTc4M2QxNDQ4YyI6IjdkNTc0MThiY2VhMDA3MjQ3ZjVlMThjMTdhMmU0NjAxYzNlYjhjODlmNjFlZDM2NWQ1YWViZWU3NTkzY2RkNjM4NzFkOTY0YTI1ZmM5ZDcyM2YyOTFkMzllMGM0Zjc1MDEyNDcxZmFmOGUwNmRiNjBjNGFkOGEyNmNmNDM0YmQ4MmEyOWE4YjY1M2ZkZGExYjg2YTdlNDgwMGMxZDcwY2I1ZDhiOGExZDFhZjUyODk0MDgyYmIyODJmZmRkZThmMDEyOGE0YWJiNjhhZWRjZmNiNTkxNjBmNmI1YWFmNDUyODEyZjRkMDA0NzJkMjg2MmE4YjIyNDgwZTcxMjMxYjMiOiI1ZjRmZGU0NDBmYWE5NTM3ZDYyZTYyOTk0YWIyMGZiNSI6ImI1ZGZlMGQ5NzFmMjkyMGJhNGMwMjlkNGMzNDZhNDk3ODhiNDk5ZmFhY2RiMThiOGY5MDVmMTQ1N2E4YjlmYTQ4NzA5ODkzNTE2YTdiNDhiYzYwMTcxMGJmZDczYzEyZGEwOTRjMjlkZjU3NzZkNDkxYzk5NzhmOGFiMjM3ZjYwNTc4NWIwMzA0NDg4ZjFjMjBiZjVhNzY3YmE2ZDVlMWUyOTYxOTU3YWExMDdiZGJhMjM1OGI4MWVmMWUwNjU3NmRiOTg1YjNlZjgxOTQ3MjViNzVkNDlkZTFkZTNhNTdmMTYxZGVkZTUwOGUzN2FkMzM1NjEzNGZhMGExYWE0OGUiOiI2YmMwZGVjOThiZWNlNmM0ZTI0NWZlOTc4ZjZkYjExM2RlY2E3NWUxYjQ3NWJjMzFmMWRhMGM3NDU3YTg1ZWU3YWFjOGJlNWYyMTIxYzA2MTBiOTlhMmM2NDUxOWZjMjUxNGI2NDNjMzc5YjRmNTNjNTQzMmI5NzI5YWVhOWZjZWNiODhhMmUyZDBhNmU3NGJlMDQ4NTlhNjZmNTVmYjJhZjE1OThiY2IwMzkxMDhlZjdmY2ZkOTlkOTRlNzkyODdlYzFmNjJiZDFiZjVmZjlkZDUxYWIxMmZhZTRmNmUyMWI5NWNhNTAwMzJmOWE2NWJkODVmOWExYWEwNTI0OTUwIjo2NDoiMzU0ZmI4YmNkMzhmMmEyNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDI3Yzg5MTQ2ZWI3ZDc2NTc4ZGMxNzNiZDllMTVjZGEiOiIxZDM5MjQ5MTMwNDA0ZDYwZWQ0MDI0MWNmMzM1NDQ1OGUwNmYxNDc0YjM3MjM1NjlkODgyMzVmMDMwOTgwNTNmYzk5MDEwZjM5NDM1NjIwYWNjNzEwYTRlMzg2YjJlY2JmOWIzMjdhOGRjZmJlZGRjMDg0MzUzZmZmMDI5ZDI0Nzg3Y2U4MWU3NGE1ZTFhYzFlZjA5NmUwYTJhZTg4MmE2NjljYTE2ODI3NTgwNmJiN2Y0NjJlNjZjOTQxZmZmYzZlZDQ0Yjk2Mjg0NTBlMDNhNTAzMjY3NmMxZWU0YWVkZmNiMTc2NzE1MGQ1NmM3ZDczYThhNDdmNmQxOTg1NGZhIjoiMDA5MmU3NmNkODg4MmU1Zjc3ZjRjODUxNDQ5MTcwNWQiOiIwYWM0NjMxMzU4YmI5Mzc1ZTA3NzU2NjkyYmRlNTlkMjcwMTJlOTIxZjA1NGZkZmVhMGRkYjI0MmM0MzQyMWY0YzcyNDFjYjIxMGNiNWMxNzJkMDUzZGUyNzYzZWZkNTY1ZjExMzhmYmU3ZjljZDk5OGQ4MjVhYjgwMGRmOTAwODQzNDc0ZWJmODU3YjMzNzFjNTU1Yjg5NjcwZTg2MzU0ZmU0MzBmNzE1ZWJiZDBlY2FkOTc0ZmVhMzRlM2JiYWU0M2QzY2EzY2ExNzhmMzM2MWYwYTExZmQ3NWY2MGU5MTQwZjQ0MzY0YjAyYTA3M2RjY2U4MzM5ZmEyOGNiNWFkIjoiMmIzODVlOWRmNGVkNDFjZGNhNTNhNGFjOGNiM2UwYWY3NWVkZGQ1MThiNjcyNzM4MDcxMjk1MGQ5NmMzNGJjNmEwYTZhYzAyMTg0YzE5ODc1NDg5MzJiMTE2ZWM5YWU3YWJmMDExNTdhNTBlNDIyYjNlNmFhNjJkZWIwY2IyZDgxYmY3ZmUwYzI1MDQxYTM1NWNjYWFlYjA0OWFiYjAzOTNhY2ZlOTBkODY5ZTllZGZkZmI2NDY5NzFiYmIxYmE5ZTU5ODNjZDBlMjczOTE1OGZhYjMxYmUyNmNmZGY5Mjg2ZDM0N2I1OGIwMGY3NWQ5ZjQ4ZWNlMTM1MzMwOGE5MSI6NjQ6IjkwNWNkZjIyOGE2OGJlYmIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJlMDk2NjA5MDlhOWFhMGE1MDk1ODAxNmMzZTA3ODk1IjoiZDdiMmNlYjE4MmQ0YThlZDU3NTcyYzQyMzdiYTk5YmJkZDU4OTA5M2RiMGY3MTczMmY5ZTY3NTU5ZDMwNTRmYTFhZjE5NWFhNDg2NGZkZTQxMzU0OWQyNzQ2OGZmZTdjNWMyM2UyNDJjYWI0YWU0YmI5ZTI2NTc0MjJkYzNmYzc4ZmJkY2RlODkyZWQyMDJiZTFlNDdmMDk1YjA5Y2ZjNTNjZmU4NmNiMTZlMmU5NTQ0NDQ5MmFkNWQwZWVmMDUzMTc4ZDZiMDQ4NTczMWJlN2E1MTkzNTYzYmY1NmY2M2NjMDY4N2ZjMDE2NzkyNTRkNzRlOWVkNzg4NjQ1MDA0YyI6ImM0Zjg2NWJlOGI1MDYyZTQ4OGIxNzI1NzQ5YTg3OTQ1IjoiMjZmNTBhY2RlZmRlNGQ1ODVmYzZkZTZjNjIzNGM5ZWFkNDA2ODQzNDlhMmJmZDAyMmRmOTNkOTc3NGM5ZjViOGY1MDQ3NDAzMmE0MTdiZGNjMjFhNzRkYTcyYzAyOTc0MzdhMGNlZjhmNTI3YzkyMDU3OTdmNzdiNDIyN2MyNzJlMDhhZDBiMTIwYTJhMzFlZjEzZTM3MmNhZDIzODdjY2MxYmNlZmM4OGRkNTg4OTk4MjFkNjhmM2JlNmE0YjJjZDA4Njk3ZDE4OTdlZmNkNmVkM2EwZDc4NDlmNmNiYjUwZTQ2ODAwNjI3Y2ZkMjY5NjRlMmNmZTlmMzY2MjRkOSI6IjMyMWY2ZDc5YTY2NThjN2MyYjY3ZmUzYzkzMjIzNzU5M2E2ZWM3ZTZmZDgxOThhYmM2YjBiNmJhNWQ0ZGFjOWUwNjk1ZjBjNjRkZGUxYzk0YzAzODM4MzllZTM3ZjhiYmZjYzUxNmYyNDg3MWZkNzlhOWI5MTM1Y2VlZjg0MWU0YzhkZGY2YjU3OTYyYzBlOGFkN2FhZjIxMGU5N2E0MzQ4OTA5NzI3MDc1NjQwNGZkZGRlNjM3ZGU0NjFiODY0NGZlZjI0NDE0MjgyMGUxYWYxMmI5MGYxNjc0OGIwOTE1YTZiNzczZGZiYmRmNmIxNmYxYmVhY2NiNGNkNWVkYmEiOjY0OiJiMjk0ZGI3ZWQ2OTkxMmRjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ZTQ1ZDU3OTgxZjY1YTZiMTcwZWZhNzU4Y2Y0NTUzZCI6ImJjOGQ0YzQxODQ0Mjc0M2YyZmRiYWY5NWI4Zjg3YjdjMTVhMzE3NjA4NWUzNGFkZGY0Y2YwZmIzYzJkZjE1NTg3NTI2NjkxYjA3ZTY0MDdiYTE2OTk5YjcyMzgyNjM1YTJhZWJiNjJkMDVjMTU0N2E3ZDA3NGM4NTdhMjMxMDdjNzU3Nzg2NGU3ZjdiY2RiNWI2ZDFmYjUwMTM2MzkxZjg5YzQyZDNmMDI3NTRiMGU0ZWQwZmNiMGMwMzU3NmI5ODZhZjVjMTJjZjliZjVlMGM1ODVkNmFhZjQ5ZDBjNmZiMmVjMzBlYWU5N2IyYjg1MGEzNTQ3NGJmYjlhMmMwNjkiOiJiNDM0MDNiNjI3ZmU5ZTAxMzUxOTJkMWEwNDhjNmZhYSI6IjdhMjdlYTI2Yzc2MDdlNGU3ZTYyN2YzMTYxYmRmMTVmMjFmM2Q2MmRjMzNkZjE0OTUxOTcxNzEyZjk2MGQzYjIwODJkNzUzOTVjNTAwOGU1ZWEwMGQyODJkMzUwZjg2ZGFjOGM2MWY1YzBmOTBlNzc5N2E1YjYxZWU5NmY3ZTMzMmVjNWRlNTFjYjEzNzdlNDdjNjQxZjMyNmQxZTU4ODE3YzhjOTVmZWI1YjI5MjM3NThlMzNiMjc5MTkxZDBhOWZmZDA5Yjc2MTliMDMxOGE3MDc3NWUzNmFiZjVmN2FiNTk0MjJmZjY4OTE0ZTdiNDc4YzQ0OGE3YjE0MWM0YmYiOiI5MGQ4YTYyMThkYTA2M2MzOGUwZjA2ZDU0OGEzZDU2ODVmZDNlMGZiYWY2MDljNzdiZGQ1NzNiYjljNjNmMzA1OTBlYWY4YjE4MWEyZmViODFjOGIzZjVmMzRhOTRkYzk0YjkwNTAzNmE2YzY5Yjk3MjYzMzAyYjg2NzRkOWUwOTMyNTA2NTU4OGU5N2MwYjViMzMxMTY5ODFmMWYzNjJhN2M1YmIxZTk5NmMxMjZjMzFmYmQ2Mzc5MTc3MmY0ZDU5NDYzMmY0MDhmZGYwMTFiM2YyY2M3NTBiMDYwNDUyYzE4MWU4ZTA5Njk3Yzg2NjJjMDBjOGQ0ZjI5ZDg3NWE3IjozMjoiNjExYWJlZjciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjAwZDRiZjIwNTA5YTYxYmM3NjQzMGZmYTVmMDEzNTg5IjoiMDM2YTE5MWEzODhjZjNjNTdjOWU2ZjBlMmY1YzhiYzNkNWMyNWVlOGUyZmVkZmFkYjdiNzQzMzE1NWM3ZTc5MzA0ZjA5MDVhYjJhMTdlMWYwNGYyZjJkYWNkNGE0MTUyMWQ2Y2UyMTM5NjFkZjlkYzkxMDFkNDFkZjRlNDQyNDY0ODhmYmVkYjc1YTAxMjU2ZmJjNzc4NDc2OWViOGY5OWQ0NGQ1ZWFiZjkzY2Y2NjdlYmFlMjQzN2NjZWRjNzllZmE1OGMwNzUxODNkNDZhNWMyMGJmNGM4MWUwZjk3NTRhZDM1YWY2NWY3YzhhYWZlN2RhYTM0NjBjNjg5MmIxYSI6IjI1YjEwMjZhMDA5NDcwYTVjYThjYWVlYjY3MjAwNzkyIjoiZmQ3NWFjZmQ1YWEyNWZiOGJjY2I1MzY3MmU1ZDZhODA4MDA4MTUwNmNmMDNkZjJiYWIwNzQ2YTM1MzUxMDk5NmUwMjM3ZDYzNTRlZTAyMTBhNDFmMjBmODhlYzY1NjlmMmIyMDBiMjhjNmEzMTQ2NGEwNTMzYTZiYzQ1YWZlZjNhZTM4MTQyNWEzNjA2ZGUyODY2ZGJhNjk0MTI0ZDk2ZGE5ZDBhMmIwNjFiNzg3NTI0ZWU2ZTVkM2IxZWY1YzRiY2YxNjg4MTBhYTE3NzY2MGI3ZTEzNzlhYzhhNDgwY2U0M2Q3M2RmY2M2OTY4NzNjZWEyZGY0MTlmMzcyNjUxZSI6ImNhYjgwNjE1YjY2NmM0N2ZjYWJmMGQ5ODA1ODQyYWIyODA1MTUwYWJhZDRkZTBhZThiMTIzMDZiZWQ1MDRkNGE3ZjkxZjUyMzc5ZGY2NWNiOTU4NzU3N2U1OWRhZmNkNDIwM2QyZWQyNzQzZDM1NDcyMjg1ZTk1MjJkYjBjZTNkZDAyN2EwMWM3OWFjNjRjYWVlMjllZjM3NTJhMDc3MjU0YjBkY2EyNjlmNmYyMDZmNmNjNTc1ZThmZWRiMGJhNTI1ZGNmNjI1MmZhNmY3YjY4ODU1NjkzM2YxZGVlODRiMmFkMzZhMjY2Njk1Y2U4NjcyMjI5Y2VkZDgyZjIwYTEiOjMyOiIzMjg3NDc4YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmU0ODE0NzZmY2U3NmVmY2ZjNzhlZDE0NGIwNzU2ZjEiOiIyNDZlMWYyYmFiYWI4ZGE5OGIxN2NjOTI4YmQ0OTUwNGQ3ZDg3ZWEyY2MxNzRmOWZmYjdkYmFmZTU5NjlmZjgyNGEwYmNiNTJmMzU0NDFkMjJmM2VkY2QxMGZhYjBlYzA0YzBiZGU1YWJkMzYyNGNhMjVjYmI0NTQxYjVkNjJhM2RlYjUyYzAwYjc1ZDY4YWFmMDUwNGQ1MWY5NWI4ZGNiZWJkZDg0MzNmNDk2NmM1ODRhYzdmOGMxOTQwN2NhOTI3YTc5ZmE0ZWFkMjY4OGM0YTdiYWFmYjRjMzFlZjgzYzA1ZTg4NDhlYzJiNGY2NTdhYWI4NGMxMDljOTFjMjc3IjoiMWEyYzE4YzZiZjEzYjNiMjc4NTYxMGM3MWNjZDk4Y2EiOiJiMGFiM2NiNTI1NjU3NTc3NGI4MjQyYjg5YmFkZmJlMGRmZGZkMDRmNWRkNzVhOGU1ZjIxOGIyOGQzZjZiYzA4NWEwMTNkZWZhNWY1YjE1ZGZiNDYxMzJkYjU4ZWQ3YTlkZGI4MTJkMjhlZTJmOTYyNzk2YWQ5ODg1NjFhMzgxYzAyZDFjZjM3ZGNhNWZkMzNlMDgxZDYxY2M3YjNhYjBiNDc3OTQ3NTI0YTRjYTRjYjQ4YzM2ZjQ4YjMwMmM0NDBiZTZmNTc3NzUxOGE2MDU4NWE4YTE2Y2VhNTEwZGJmYzU1ODBiMGRhYWM0OWEyYjEyNDJmZjU1ZTkxYThlYWU4IjoiNTU4NzYyMGJiYjc3ZjcwYWZkZjNjZGI3YWUzOTBlZGQwNDczMjg2ZDg2ZDNmODYyYWQ3MDkwMmQ5MGZmMWQzMTU5NDdjOTU5ZjAxNjI1N2E4ZmUxZjUyY2MyMmE1NGYyMWRlOGNiNjBiNzQ4MDhhYzdiMjJlYTdhMTU5NDUzNzFlMThiNzdjOTU3MWFhZDYzMWFhMDgwYzYwYzFlNDcyMDE5ZmE4NTYyNWZjODBlZDMyYTUxZDA1ZTM5N2E4OTg3YzhmZWNlMTk3YTU2NjY4OWQyNGQwNTM2MWI2ZjNhNzU2MTZjODlkYjYxMjNiZjU5MDI5NjBiMjFhMThiYzAzYSI6MzI6ImJkNDI2NWE4IjowCisKK0FFUy1HQ00gU2VsZnRlc3QKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMxOTJfZGUuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTkyX2RlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxYzZmYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTkyX2RlLmRhdGEKQEAgLTAsMCArMSw2NzUgQEAKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODA2NzY2YTRkMmI2NTA3Y2M0MTEzYmMwZTQ2ZWViZTEyMGVhY2Q5NDhjMjRkYzdmIjoiIjoiNGY4MDFjNzcyMzk1YzQ1MTllYzgzMDk4MGM4Y2E1YTQiOiIiOjEyODoiOGZhMTY0NTJiMTMyYmViYzZhYTUyMWU5MmNiM2IwZWEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGMyYWJkY2QyZTRhZTQxMzc1MDk3NjFhMzhlNmNhNDM2Yjk5YzIxYjE0MWYyOGY1IjoiIjoiMzM1Y2EwMWEwNzA4MWZlYTRlNjA1ZWI1ZjIzYTc3OGUiOiIiOjEyODoiZDdmNDc1ZGZjYjkyYTc1YmM4NTIxYzEyYmIyZThiODYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWVmNDkwYTBjMmVjYjMyNDcyZTE2NTQxODQzNDBjYzc0MzNjMzRkYTk4MWMwNjJkIjoiIjoiZDkxNzJjMzM0NGQzN2ZmOTNkMmRjYjIxNzBlYTVkMDEiOiIiOjEyODoiMDE3ZmVmMDUyNjBhNDk2NjU0ODk2ZDQ3MDNkYjM4ODgiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmUwYzM0OTBmMWYwZGJhMjNjZjVjNjRlNmUxNzQwZDA2Zjg1ZTBhZmVjNjc3MmYzIjoiIjoiZjQ3ZTkxNTE2M2ZhM2RmN2Y2YzE1YjlkNjlmNTM5MDciOiIiOjEyMDoiMTRlMWEwNTdhMmU3ZmZiZDIyMDhlOWMyNWRiYmExIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQzNTZiM2IxZjMwOGRmMzU3MzUwOTk0NWFmZTUyNjg5ODRmOWQ5NTNmMDEwOTZkZSI6IiI6ImEzNWIzOTdiMzRhMTRhOGUyNGQwNWEzN2JlNGQxODIyIjoiIjoxMjA6ImUwNDVlY2JhMjIwZDIyYzgwODI2Yjc3YTIxYjAxMyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUyODk4OTM3Y2M1NzVjOGJiNzQ0NDQxMzg4NGRlYWZlOGVhZjMyNmJlODg0OWU0MiI6IiI6IjE2OWE0NDljY2IzZWIyOTgwNWIxNTMwNGQ2MDNiMTMyIjoiIjoxMjA6IjNhODA3MjUxZjNkNjI0Mjg0OWE2OTk3MmIxNGY2ZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NTY4M2M3ZGYwNDQyZTEwYjUzNjhmY2Q2YmI0ODFmMGJmZjhkOTVhYWU5MDQ4N2UiOiIiOiI1Mzg2NDFmN2QxY2M1YzY4NzE1OTcxY2VlNjA3ZGE3MyI6IiI6MTEyOiIwN2Q2OGZmZmU0MTdhZGMzMzk3NzA2ZDczYjk1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA3MjRlZTFmMzE3OTk3Y2U3N2JiNjU5NDQ2ZmNiNWE1NTc0OTBmNDA1OTczNDFjNyI6IiI6IjBkOGViNzgwMzJkODNjNjc2ODIwYjJlZjVjY2MyY2M4IjoiIjoxMTI6IjdkYTE4MTU2M2IyNmM3YWVmZWIyOWU3MWNjNjkiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmUyZjBmNGFlNGFiODUxYjI1OGVjNTYwMjYyOGRmMjYxYjZhNjllMzA5ZmY5MDQzIjoiIjoiNjQ2YTkxZDgzYWU3MmI5YjllOWZjZTY0MTM1Y2JmNzMiOiIiOjExMjoiMTY5ZTcxN2UyYmFlNDJlM2ViNjFkMGExYTI5YiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ODNjMzI4ZGFlY2QxOGMyYWM1YzgzYTBjMjYzZGUxOTRhNGM3M2FhNDcwMGZlNzYiOiIiOiI1NWUxMGQ1ZTliNDM4YjAyNTA1ZDMwZjIxMWIxNmZlYSI6IiI6MTA0OiI5NWMwYTRlYTllODBmOTFhNGFjY2U1MDBmNyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNDA4NTdlN2U2ZjI2MDUwZjFlOWE2Y2JlMDVlMTVhMGJhMDdjMjA1NTYzNGFkNDciOiIiOiJlMjVlZjE2MmE0Mjk1ZDdkMjRkZTc1YTY3MzE3MjM0NiI6IiI6MTA0OiI4OWVhNGQxZjM0ZWRiNzE2YjMyMmVhN2Y2ZiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MjcwMDg5NTZlMzFmZWE0OTdmYjEyMGI0MzhhMmEwNDNjMjNiMWIzOGRjNmJjMTAiOiIiOiIwOGVhNDY0YmFhYzU0NDY5YjA0OTg0MTlkODM4MjBlNiI6IiI6MTA0OiJhYjA2NGE4ZDM4MGZlMmNkYTM4ZTYxZjllMSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhjMzg2ZDY3ZDdjMmJmZDQ2Yjg1NzFkODY4NWIzNTc0MWU4N2EzZWQ0YTQ2YzlkYiI6IiI6Ijc2Njk5NmZiNjdhY2U5ZTZhMjJkN2Y4MDI0NTVkNGVmIjoiIjo5NjoiOWE2NDFiZTE3M2RjMzU1N2VhMDE1MzcyIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MTFiYzVhYTZiOTRmYTMyODdmYWQwMTY3YWMxYTllZjVlOGUwMWMxNmE3OWU5NWEiOiIiOiI3NWNkYjhiODMwMTdmM2RjNWFjODczMzAxNmFiNDdjNyI6IiI6OTY6IjgxZTNhNTU4MDIzNGQ4ZTBiMjIwNGJjMyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM3NDYyMDgyODQwMmUwYmRmM2Y3YTUzNTM2Njg1MDVkYzE1NTBhMzFkZWJjZTU5YSI6IiI6ImNmYmVmZTI2NTU4M2FiM2EyMjg1ZTgwODAxNDFiYTQ4IjoiIjo5NjoiMzU1YTQzYmNlYmJlN2Y3MmI2Y2QyN2VhIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWViNTNhYTU0OGI0MWJmZGM4NWM2NTdlYmRlYmRhZTBjN2U1MjVhNjQzMmJjMDEyIjoiIjoiMzdmZmM2NGQ0YjJkOWM4MmRkMTdkMWFkMzA3NmQ4MmIiOiIiOjY0OiIzNGI4ZTAzNzA4NGIzZjJkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTBkMDc3NTc1ZjZkYjkxMDI0YThlNTY0ZGI4MzMyNDUzOWU5YjdhZGQ3YmI5OGU0IjoiIjoiMTE4ZDAyODMyOTRkNDA4NDEyN2NjZTRiMGNkNWI1ZmEiOiIiOjY0OiI1MDdhMzYxZDhhYzU5ODgyIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDlkZGNhMDgwNzMwNTAyNWQ2MTkxOWVkNzg5M2Q3ZDVjNWEzYzlmMDEyZjQ4NDJmIjoiIjoiYjc4ZDUxOGI2YzQxYTllMDMxYTAwYjEwZmIxNzgzMjciOiIiOjY0OiJmNDAxZDU0NmM4YjczOWZmIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ZWQ4ZDhhZmRlNGRjMzg3MmNiYzI3NGQ3YzQ3YjcxOTIwNTUxODQ5NmRkNzk1MWQiOiIiOiIxNGViMjgwMjg4NzQwZDQ2NGUzYjhmMjk2YzY0MmRhYSI6IiI6MzI6IjM5ZTY0ZDdhIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MGFhY2U1YWI3NGYyNjFiYzA5YWM2ZjY2ODk4ZjY5ZTdmMzQ4ZjgwNWQ1MjQwNGQiOiIiOiJmNTRiZjRhYWM4ZmI2MzFjOGI2ZmY1ZTk2NDY1ZmFlNiI6IiI6MzI6IjFlYzFjMWExIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyM2I3NmVmZDBkYmM4ZDUwMTg4NWFiN2Q0M2E3ZGFjZGU5MWVkZDljZGUxZTEwNDgiOiIiOiI3NTUzMmQxNWU1ODJlNmM0NzdiNDExZTcyN2Q0MTcxZSI6IiI6MzI6Ijc2YTBlMDE3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk0YzUwNDUzZGQzZWY3ZjdlYTc2M2FlMTNmYTM0ZGViYjljMTE5OGFiYmYzMjMyNiI6IiI6IjFhZmU5NjJiYzQ2ZTM2MDk5MTY1NTUyZGRiMzI5YWM2IjoiYjI5MjBkZDliMDMyNWE4N2U4ZWRkYThkYjU2MGJmZTI4N2U0NGRmNzljZjYxZWRiYTNiMmM5NWUzNDYyOTYzOGVjYjg2NTg0ZjA1YTMwMzYwMzA2NWU2MzMyMzUyM2Y2Y2NjNWI2MDU2NzlkMTcyMmNkZTU1NjFmODlkMjY4ZDVmOGRiOGU2YmRmZmRhNDgzOWM0YTA0OTgyZTgzMTRkYTc4ZTg5ZjhmOGFkOWMwZmVlODYzMzI5MDZiZjc4ZDJmMjBhZmNhYWJkYzI4MjAwOGM2ZDA5ZGYyYmZlOWJlMmM5MDI3YmI0OTI2OGI4YmU4OTM2YmUzOWZhOGIxYWUwMyI6MTI4OiI1MWUxZjE5YTdkZWE1Y2ZlOWI5Y2E5ZDA5MDk2YzNlNyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNmE5ODEwMmFmM2Q4NzViY2RlYmU1OTQ2NjFkM2E2YjM3Njk3MGMwMmIxMWQwMTkiOiIiOiJiZWE4Y2Q4NWEyOGEyYzA1YmY3NDA2YjhlZWYxZWZjYyI6ImYyZjgwZTJjMDQyMDkyY2M3MjQwYjU5OGFiMzBmYWQwNTViY2U4NTQwOGFhMGY4Y2VmYWY4YTcyMDRmMGUyYWNiODdjNzhmNDZhNTg2N2IxZjFjMTk0NjFjYmY1ZWQ1ZDJjYTIxYzk2YTYzZmIxZjQyZjEwZjM5NDk1MmU2MzUyMDc5NWM1NmRmNzdkNmEwNGNiNWFkMDA2ZWU4NjVhNDdkYzIzNDlhODE0YTYzMGIzZDRjNGUwZmQxNDlmNTFlOGZhODQ2NjU2ZWE1NjlmZDI5YTFlYmFmYzA2MTQ0NmViODBlYzE4MmY4MzNmMWY2ZDkwODM1NDVhYmY1MmZhNGMiOjEyODoiMDRiODBmMjVhZTlkMDdmNWZkODIyMDI2M2FjM2YyZjciOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlYzNjYzQ1YTIyZmRjN2NjNzllZDY1OGQ5ZTlkYmMxMzhkY2M3ZDZlNzk1Y2JhMWEiOiIiOiJiMTBkOWM3MDIwNWUxNDI3MDRmOWQxZjc0Y2FlZTBmNiI6IjcxNDk5NDAxN2MxNjljNTc0YWFmZjJmOGJhZDE1ZjhmYTZhMzg1MTE3ZjU0MDVmNzQ4NDZlY2E4NzNjYTRhOGY0ODc2YWRmNzA0ZjJmY2FmZjJkZmE3NWMxN2FmZWZkMDhhNDcwNzI5MmRlYmM2ZDlmYWZkYTYyNDRjYTUwOWJjNTJiMGM2YjcwZjA5YjE0YzBkN2M2Njc1ODNjMDkxZDQwNjRlMjQxYmExZjgyZGQ0M2RjM2VhNGI4OTIyYmU2NWZhZjU1ODNmNmIyMWZmNWIyMmQzNjMyZWI0YTQyNjY3NTY0ODI1MGU0YjNlMzdjNjg4ZDYxMjliOTU0ZWY2YTgiOjEyODoiZDIyNDA3ZmQzYWUxOTIxZDFiMzgwNDYxZDJlNjAyMTAiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1YTMyZWJjN2EyMzM4MDM4Y2VkMzZkMmI4NWNiYzZjNDVjY2E5ODQ1YTdjNWFhOTkiOiIiOiI5YWZlMDg4MmU0MThjOWFmMjA1ZWViOTBlMTMxZDIxMiI6IjYxZmY4YThiYzIyODAzZjE3ZThlOWYwMWFmZjg2NWJjN2QzMDgzZmY0MTNjZTM5MmE5ODllNDZlYmVkNTExNDg5NGRlOTA2ZjdkMzY0MzkwMjRkOGYyZTY5Y2M4MTVhYzA0M2ZmZjJmNzUxNjlmNmM5YWE5NzYxZmYzMmQxMGExMzUzMjEzYWM3NTZjYjg0YmQzNjEzZjgyNjFlZjM5MGUxZDAwYzNhOGZiODI3NjRiMGNkYTRlMDA0OTIxOWU4N2QyZTkyYzM4Zjc4ZmZhYzI0MjM5MWY4MzhhMjQ4ZjYwOGJiMmI1NmIzMWJiYjQ1M2QxMDk4ZTk5ZDA3OWVhMWIiOjEyMDoiZmNiYjkzMmRkYjAxMjhkZjc4YTcxOTcxYzUyODM4IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjliZjIyODg1ZTdmMTNiY2M2M2JiMGEyY2E5MGMyMGU1Yzg2MDAxZjA1ZWRmODVkOCI6IiI6Ijk5ZGVjMjFmNDc4MTI4NDcyMmI1MDc0ZWE1NjdjMTcxIjoiOWY0MTc2ZGFjZjI2ZTI3YWEwZTY2OWNkNGQ0NGJjYTQxZjgzNDY4YzcwYjU0Yzc0NWE2MDE0MDhhMjE0YmY4NzY5NDFhZTJhZTRkMjY5MjkxMTNmNWRlMmU3ZDE1YTdiYjY1NjU0MTI5MjEzN2JmMjEyOWZkYzMxZjA2ZjA3MGUzY2ZhZjBhN2IzMGQ5M2Q4ZDNjNzZhOTgxZDc1Y2QwZmZhMGJjYWNiMzQ1OTdkNWJlMWEwNTVjMzVlZWZlZGRjMDdlZTA5ODYwM2U0OGFkODhlYjdhMmVjMTljMWFlZmM1YzdiZTlhMjM3Nzk3Mzk3YWEyNzU5MGQ1MjYxZjY3YSI6MTIwOiIxOGZkMWZlZWM1ZTNiYmYwOTg1MzEyZGQ2MTAwZDEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2ZkNzVhOWQzNzg4ZDk2NTg5NTU1M2FiNWZiN2E4ZmYwYWEzODNiNzU5NDg1MGE2IjoiIjoiYTZkZjY5ZTVmNzdmNGQ5OWQ1MzE4YzQ1Yzg3NDUxYjIiOiIwNDFhZWIyZmEwZjdkZjAyN2NkNzcwOWE5OTJlMDQxMTc5ZDQ5OWY1ZGJjY2QzODkwMzViZjdlNTE0YTM4YjVmODM2ODM3OWQyZDdiNTAxNWQ0ZmE2ZmFkZmQ3Yzc1YWJkMmQ4NTVmNWVhNDIyMDMxNWZhZDJjMmQ0MzVkOTEwMjUzYmY3NmYyNTJhMjFjNTdmZTc0ZjcyNDdkYWMzMmY0Mjc2ZDc5M2QzMGQ0OGRkNjFkMGUxNGE0YjdmMDdhNTZjOTRkMzc5OWQwNDMyNGRmYjJiMjdhMjJhNTA3N2UyODA0MjJkNGYwMTRmMjUzZDEzOGU3NGM5YWMzNDI4YTdiIjoxMjA6ImZkNzhiOTk1NmU0ZTQ1MjI2MDVkYjQxMGY5N2U4NCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMGIyMWFlMTM4NDg1NTkxYzZiZWY3YjNkNWEwYWEwZTk3NjJjMzBhNTBlNGJiYTIiOiIiOiI1NmRjOTgwZTFjYmExYmMyZTNiNGEwNzMzZDc4OTdjYSI6ImEzODQ1OGU1Y2M3MWYyMmY2ZjU4ODBkYzAxOGM1Nzc3YzBlNmM4YTEzMDFlN2QwMzAwYzAyYzk3NjQyM2MyYjY1ZjUyMmRiNGE5MDQwMTAzNTM0NmQ4NTVjODkyY2JmMjcwOTJjODFiOTY5ZTk5Y2IyYjYxOThlNDUwYTk1YzU0N2JiMDE0NTY1MmM5NzIwYWFmNzJhOTc1ZTRjYjUxMjRiNDgzYTQyZjg0YjVjZDAyMjM2NzgwMmM1ZjE2N2E3ZGZjODg1YzFmOTgzYmI0NTI1YTg4YzgyNTdkZjMwNjdiNmQzNmQyZGJmNjMyM2RmODBjM2VhZWZmYzJkMTc2YTUiOjExMjoiYjExZjVjMGU4Y2I2ZmVhMWExNzBjOTM0MjQzNyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg3NzU2NjVhYmEzNDViMWMzZTYyNjEyOGI1YWZhM2QwZGE4ZjRkMzZiOGNmMWNhNiI6IiI6ImNkMTdmNzYxNjcwZTFmMTA0ZjhlYTRmYjBjZWM3MTY2IjoiMmVlMDhhNTFjZWFjYTFkYmJiM2VlMDliNzJmNTc0MjdmZDM0YmQ5NWRhNWI0YzA5MzNjYmIwZmMyZjcyNzBjZmZkMzQ3NmFhMDVkZWViODkyYTdlNmE4YTM0MDdlNjFmODYzMWQxYTAwZTQ3ZDQ2ZWZiOTE4MzkzZWU1MDk5ZGY3ZDY1YzEyYWI4Yzk2NDBiZmNiM2E2Y2NlMDBjMzI0M2QwYjNmMzE2ZjA4MjJjZmVhZTA1ZWU2N2I0MTkzOTNjYzgxODQ2YjYwYzQyYWViNWM1M2YwZWRlMTI4MGRjMzZhYThlZjU5YWRkZDEwNjY4ZGQ2MTU1N2NlNzYwYzU0NCI6MTEyOiI2Y2RmNjBlNjJjOTFhNmE5NDRmYTgwZGExODU0IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2M5OTIyMjk5YjQ3NzI1OTUyZjA2MjcyMTY4YjcyODIxOGQyNDQzMDI4ZDgxNTk3IjoiIjoiOWIyZjFhNDA3MTdhZmNkYmI2YTk1ZDZlMzM1YzllNGQiOiJiY2ZjYTg0MjBiYzdiOWRmMDI5MGQ4YzFiY2Y0ZTNlNjZkM2E0YmUxYzk0N2FmODJkZDU0MTMzNmU0NGUyYzRmYTdjNmI0NTY5ODBiMTc0OTQ4ZGUzMGI2OTQyMzJiMDNmOGViOTkwZjg0OWI1ZjU3NzYyODg2YjQ0OTY3MWU0ZjBiNWU3YTE3M2YxMjkxMDM5M2JkZjVjMTYyMTYzNTg0Yzc3NGFkM2JiYTM5Nzk0NzY3YTRjYzQ1ZjRhNTgyZDMwNzUwMzk2MDQ1NDYzMWNkZjU1MWU1MjhhODYzZjJlMDE0YjFmY2E0OTU1YTc4YmQ1NDVkZWM4MzFlNGQ3MWM3IjoxMTI6ImRkNTE1ZTVhOGI0MWVjYzQ0MTQ0M2E3NDliMzEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1YTI3ZDcxOGYyMWM1Y2JkYzUyYTc0NWI5MzFiYzc3YmQxYWZhOGIxMjMxZjg4MTUiOiIiOiI1OTY2MTA1MTkxMmZiYTQ1MDIzYWVmNGU2ZjkzODBhNSI6IjJiN2NlNWNlYTgxMzAwZWQyMzUwMTQ5MzMxMGYxMzE2NTgxZWY4YTUwZTM3ZWFhZGQ0YmI1ZjUyN2FkZDZkZWIwOWU3ZGNjNjc2NTJlNDRhYzg4OWI0ODcyNmQ4YzBhZTgwZTJiM2E4OWRkMzQyMzJlYjFkYTMyZjdmNGZjZDViZjhlOTIwZDI4NmRiODYwNGYyM2FiMDZlYWIzZTZmOTliZWI1NWZlMzcyNTEwN2U5ZDY3YTQ5MWNkYWRhMTU4MDcxN2JiZjY0YzI4Nzk5YzlhYjY3OTIyZGE5MTk0NzQ3ZjMyZmQ4NDE5NzA3MGE4NjgzOGQxYzllYmFlMzc5YjciOjEwNDoiZjMzZThmNDJiNThmNDVhMDQ1NmY4M2ExM2UiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjgzZTkzM2NmNTRhYzU4ZjhjN2U1ZWQxOGU0ZWQyMjEzMDU5MTU4ZWQ5Y2IyYzMwIjoiIjoiODcxMGFmNTVkZDc5ZGE0NWE0YjI0ZjZlOTcyYmM2MGEiOiJiN2E0MjhiYzY4Njk2Y2VlMDZmMmY4YjQzZjYzYjQ3OTE0ZTI5ZjA0YTRhNDBjMGVlYzYxOTNhOWEyNGJiZTAxMmQ2OGJlYTU1NzMzODJkZDU3OWJlZWIwNTY1YjBlMDMzNGNjZTY3MjQ5OTcxMzhiMTk4ZmNlODMyNWYwNzA2OWQ2ODkwYWM0YzA1MmUxMjdhYTZlNzBhNjI0OGU2NTM2ZDFkM2M2YWM2MGQ4Y2QxNGQ5YTQ1MjAwZjY1NDAzMDVmODgyZGY1ZmNhMmNhYzQ4Mjc4Zjk0ZmU1MDJiNWFiZTI5OTJmYTI3MTliMGNlOThiN2VmMWI1NTgyZTAxNTFjIjoxMDQ6IjM4MDEyOGFkN2YzNWJlODdhMTdjOTU5MGZhIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQyZjg1ZjkyMDkyMzg1ZjE1ZGE0M2EwODZjZmY2NGM3NDQ4YjRlZTVhODNlZDcyZSI6IiI6IjkwMjZkZmQwOWU0NTUzY2Q1MWM0YzEzY2U3MDgzMGRlIjoiM2M4ZGU2NGMxNGRmNzNjMWI0NzBhOWQ4YWE2OTNhZjk2ZTQ4N2Q1NDhkMDNhOTJjZTU5YzBiYWVjODU3NjEyOTk0NWM3MjI1ODZhNjZmMDNkZWI1MDI5Y2JkYTAyOWZiMjJkMzU1OTUyYzNkYWRmZGVkZTIwYjYzZjQyMjFmMjdjOGU1ZDcxMGUyYjMzNWMyZDlhOWI3Y2E4OTk1OTdhMDNjNDFlZTY1MDhlNDBhNmQ3NDgxNDQ0MWFjM2FjYjY0YTIwZjQ4YTYxZThhMThmNGJiY2JkM2U3ZTU5YmIzY2QyYmU0MDVhZmQ2YWM4MGQ0N2NlNjQ5NmM0YjliMjk0YyI6MTA0OiJlOWU1YmVlYTdkMzljOTI1MDM0N2EyYTMzZCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGU3ZGY0NGNlMDA3Yzk5ZjdiYWFkNmE2OTU1MTk1ZjE0ZTYwOTk5ZWQ5ODE4NzA3IjoiIjoiNGQyMDllNDE0OTY1ZmU5OTYzNmMxYzY0OTNiYmEzYTMiOiJkYTNiYzZiZGQ0MTRhMWUwN2UwMDk4MWNmOTE5OTM3MTE5MmExZmIyZWFhZTIwZjcwOTFlNWZlNTM2OGUyNmQ2MWI5ODFmN2YxZDI5ZjFhOTA4NWFkMjc4OWQxMDExNTVhOTgwZGU5OGQ5NjFjMDkzOTQxNTAyMjY4YWRiNzA1MzdhZDk3ODNlNmM3ZDUxNTdjOTM5ZjU5YjhhZDQ3NGMzZDdmYzFmY2M5MTE2NWNkZjhkZDlkNmVjNzBkNjQwMDA4NmQ1NjRiNjhlYmVhZDBkMDNlYmQzYWE2NmRlZDU1NTY5MmI4ZGUwYmFmNDNiYzBkZGVmNDJlM2E5ZWIzNGFiIjo5NjoiMjQ0ODNhNTdjMjA4MjZhNzA5YjdkMTBhIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWRmYTVmZjIwMDQ2Yzc3NWI1ZTc2OGMyYmQ5Nzc1MDY2YWU3NjYzNDViN2JlZmMzIjoiIjoiMmQ0OTQwOWI4NjliOGI5ZmM1YjY3NzY3OTc5Y2E4Y2QiOiJlMzVkMzQ0NzhiMjI4YmM5MDNlYTI0MjM2OTdlNjAzY2MwNzc5NjdkN2NmYjA2MmU5NWJjMTFkODlmYmUwYTFmMWQ0NTY5Zjg5YjJhNzA0NzMwMGMxZjUxMzFkOTE1NjRlYzliY2UwMTRkMThiYTYwNWExYzFlNGUxNWUzZTVjMTg0MTNiOGI1OWNiYjI1YWI4ZjA4ODg4NTIyNWRlMTIzNWMxNmM3ZDlhOGQwNmEyM2NiMGIzOGZkMWQ1YzZjMTk2MTdmZTA4ZmQ2YmYwMWM5NjVlZDU5MzE0OWExYzYyOTU0MzVlOTg0NjNlNGYwM2E1MTFkMWE3ZTgyYzExZjAxIjo5NjoiMjMwMTI1MDNmZWJiZjI2ZGMyZDg3MmRjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmRmM2VlM2E2NDg0YzQ4ZmRkMGQzN2JhYjQ0MzIyOGM3ZDg3M2M5ODQ1MjlkZmI0IjoiIjoiZGM2YWViNDE0MTVjMTE1ZDY2NDQzZmJkN2FjZGZjOGYiOiJlYWZjNjAwN2ZhZmI0NjFkM2IxNTFiZGZmNDU5ZTU2ZGQwOWI3YjQ4YjkzZWE3MzBjODVlNTQyNGY3NjJiNGE5MDgwZGU0NDQ5N2E3YzU2ZGQ3ODU1NjI4ZmZjNjFjN2I0ZmFlYjdkNmY0MTNkNDY0ZmU1ZWM2NDAxZjMwMjg0MjdhZTNlNjJkYjNmZjM5Y2QwZjUzMzNhNjY0ZDM1MDVmZjQyY2FhODg5OWI5NmE5MmVjMDE5MzRkNGI1OTU1NmZlYjkwNTVlOGRmYjgxZjU1ZTYwMTM1MzQ1YmZjZTNlNDE5OWJmY2RiM2NlNDI1MjNlN2QyNGJlMmEwNGNkYjY3Ijo5NjoiZThlODBiZjZlNWM0YTU1ZTc5NjRmNDU1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2UwNzg3ZjY1ZTZjMjRhMWM0NDRjMzVkY2QzODE5NTE5NzUzMGFhMjBmMWY2ZjNiIjoiIjoiNTUzMDA0MzFiMWVhYWMwMzc1NjgxZDc4MjFlMWViN2EiOiI4NGE2OTlhMzRhMWU1OTcwNjFlZjk1ZThlYzNjMjFiNTkyZTkyMzZkZGI5OGM2OGQ3ZTA1ZjFlNzA5OTM3YjQ4ZWMzNGE0Yjg4ZDk5NzA4ZDEzM2EyY2MzM2Y1Y2Y2ODE5ZDVlN2I4Mjg4OGU0OWZhYTVkNTQxNDdkMzZjOWU0ODY2MzBhYTY4ZmVmODhkNTU1MzcxMTlkYjFkNTdkZjA0MDJmNTZlMjE5ZjdlY2U3YjRiYjVmOTk2ZGJlMWM2NjRhNzUxNzRjODgwYTAwYjBmMmE1NmUzNWQxN2I2OWM1NTA5MjE5NjE1MDVhZmFiZjRiZmQ2NmNmMDRkYzU5NmQxIjo2NDoiNzQyNjQxNjMxMzFkMTZhYyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNhMTU1NDFiNTg1N2E2NjhkYzk4OTliMmUxOThkMjQxNmU4M2JhYzEzMjgyY2E0NiI6IiI6Ijg5YmY4YWIwY2VhNmY1OTYxNmVlYjliMzE0ZDdjMzMzIjoiNGQyODQzZjM0ZjllYTEzYTFhYzUyMTQ3OTQ1NzAwNTE3OGJjZjhiMmViZWFlYjA5MDk3ZWE0NDcxZGE5ZjZjYzYwYTUzMmJjZGExYzE4Y2FiODIyYWY1NDFkZTNiODdkZTYwNjk5OWU5OTRhY2UzOTUxZjU4YTAyZGUwZDY2MjBjOWFlMDQ1NDkzMjZkYTQ0OWEzZTkwMzY0YTE3YjkwYjZiMTdkZWJjMGY0NTRiYjBlN2U5OGFlZjU2YTFjYWNjZjhjOTE2MTRkMTYxNmRiMzBmYzgyMjNkYmNkOGU3N2JmNTVkODI1M2VmZTAzNGZkNjZmNzE5MWUwMzAzYzUyZiI6NjQ6IjhmNDg3NzgwNmRhZmYxMGUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNjFjZGZkMTljMTM2ZWUyYWNiZTA5Yjc5OTNhNDY4M2E3MTM0Mjc1MThmOGU1NTkiOiIiOiI0MDY2MTE4MDYxYzkwNGVkMWU4NjZkNGYzMWQxMTIzNCI6IjE1M2MwNzVlY2RkMTg0ZmQ4YTBmY2EyNWNhZThmNzIwMjAxMzYxZWY4NGYzYzYzOGIxNDhjYTMyYzUxZDA5MWEwZTM5NDIzNmQwYjUxYzFkMmVlNjAxOTE0MTIwYzU2ZGZlYTEyODlhZjQ3MGRiYzllZjQ2MmVjNWY5NzRlNDU1ZTZhODNlMjE1YTJjOGUyN2MwYzViNWI0NWI2NjJiN2Y1ODYzNWEyOTg2NmU4Zjc2YWI0MWVlNjI4YzEyYTI0YWI0ZDVmNzk1NDY2NWMzZTRhM2EzNDY3MzlmMjAzOTNmYzU3MDBlYzc5ZDJlM2MyNzIyYzNmYjNjNzczMDUzMzciOjY0OiI0ZWZmNzIyN2I0MmY5YTdkIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZTE3NWE3ZGY3ZTQyOWZjYzIzMzU0MGU2Yjg1MjQzMjNlOTFmNDBmNTkyYmExNDQiOiIiOiJjMzQ0ODRiNDg1N2I5M2UzMDlkZjhlMWEwZTFlYzlhMyI6ImNlOGQ4Nzc1ZjA0N2I1NDNhNmNjMGQ5ZWY5YmMwZGI1YWM1ZDYxMGRjM2ZmNmUxMmUwYWQ3Y2QzYTM5OWViYjc2MjMzMWUzYzExMDFhMTg5YjM0MzNhN2ZmNGNkODgwYTA2MzlkMjU4MWI3MWUzOThkZDk4MmY1NWExMWJmMGY0ZTZlZTk1YmFjZDg5N2U4ZWMzNDY0OWUxYzI1NmVlNmNjZWNiMzNlMzZjNzY5MjdjYzUxMjRiYzI5NjI3MTNhZDQ0Y2JkNDM1YWUzYzExNDM3OTZkMzAzN2ZhMWQ2NTllNWRhZDdlYmYzYzhjYmRiNWI2MTkxMTNkN2NlOGM0ODMiOjMyOiJmZjM1NWYxMCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWY2NTllZDIzNmJhNjA0OTRlOWJmMWVlMmNiNDBlZGNmM2YyNWEyYmFjMmU1YmM1IjoiIjoiYWQ0OWYxMmYyMDIzMjAyNTU0MDZjMmY0MGU1NWIwMzQiOiI2ZGE2Mjg5MmY0MzZkZmU5NzkwZTcyZDI2ZjQ4NThjYTE1NmQxZDY1NWM5Y2M0MzM2ZmNmMjgyYjBmM2YwYjIwMWU0N2Y3OTljMzAxOTEwOWFmODllZjVmZDQ4YTQ4MTE5ODA5MzBlODJjZDk1Zjg2YjE5OTVkOTc3Yzg0N2JiYjA2ZWNkY2M5OGIxYWFlMTAwYjIzYzljMmYwZGNmMzE3YTFmYjM2ZjE0ZTkwZTM5NmU2YzBjNTk0YmNjMGRjNWYzZWJmODZjZTdlY2Q0YjA2ZDFjNDMyMDI3MzRkNTNmNTU3NTFhNmU2YmJkYTk4MjEwNDEwMmFmMjQwZGVmNGViIjozMjoiY2I0ZDhjMWQiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3M2YzMThiMWUyOThiYTRhYzBhYjJhZWQ3NGY3MzU0M2IxMDE3Y2NjYmQxYjI0MCI6IiI6ImFiZTMzYjdlOGQ4OGJkMzBkZWI5NmQxZTkwYzRlOTUxIjoiNmRlNjE2YjAwMDA0N2IxNGI2NzU5MDE1MTgzZGQ3NTNjNjE0OTljMGU2NjVkMDZhODllNGZiMGNkMGRkMzA2NGZmODY1MTU4MmU5MDFlZjVkMGNkZjMzNDRjMjljNzBjM2FhYmMyYWFmODNjYjNmMjg0YzZmZTQxMDQ5MDZkMzg5YjAyN2U3ZDljYTYwZDAxMGYwNmVmOGNkOWU1NWRiMjQ4M2QwNjU1MmRkYmUzZmM0M2IyNGM1NTA4NWNkOTk4ZWFlM2VkZWMzNjY3MzQ0NWJmNjI2ZTkzM2MxNWI2YWYwOGVhMjFjYmFjZTQ3MjBiMGI2OGZlMWEzNzQ4NzdkNSI6MzI6IjRhMjhlYzk3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjczZDViZTc0NjE1YmM1YjYyN2VlZGZiOTU3NDZmYjVmMTdjYmYyNWI1MDBhNTk3ZiI6ImZjNDA5OTNlYjg1NTllNmIxMjczMTVjMDMxMDNjZTMxYjcwZmMwZTA3YTc2NmQ5ZWVjZjJlNGU4ZDk3M2ZhYTRhZmQzMDUzYzllYmVmMDI4MmM5ZTNkMjI4OWQyMWI2YzMzOTc0ODI3M2ZhMWVkZjZkNmVmNWM4ZjFlMWU5MzAxYjI1MDI5NzA5MmQ5YWM0ZjQ4NDMxMjVlYTcyOTlkNTM3MGY3ZjQ5YzI1OGVhYzJhNThjYzlkZjE0YzE2MjYwNGJhMDgwMTcyODk5NGRjODJjYjYyNTk4MTEzMGMzY2E4Y2RiMzM5MTY1OGQ0ZTAzNDY5MWU2MmVjZTBhNmU0MDciOiJlYjE2ZWQ4ZGU4MWVmZGUyOTE1YTkwMWY1NTdmYmE5NSI6IiI6MTI4OiI4MDQwNTZkY2E5ZjEwMmM0YTEzYTkzMGM4MWQ3N2VjYSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMjQ5MTM1YzlmMmY1YThiMWFmNjY0NDJhNGQ0ZTEwMTc3MWE5MThlZjhhY2VlMDUiOiJjNjJiMzliOTM3ZWRiZGM5YjY0NDMyMWQ1ZDI4NGU2MmVhYTQxNTQwMTBjN2EzMjA4YzFlZjQ3MDZmYmE5MDIyM2RhMDRiMmY2ODZhMjhiOTc1ZWZmMTczODY1OThiYTc3ZTIxMjg1NTY5MmYzODQ3ODJjMWYzYzAwYmUwMTFlNDY2ZTE0NWY2ZjhiNjVjNDU4ZTQxNDA5ZTAxYTAxOWIyOTA3NzM5OTJlMTkzMzRmZmFjYTU0NGUyOGZjOTA0NGE1ZTg2YmNkMmZhNWFkMmU3NmYyYmUzZjAxNGQ4YzM4NzQ1NmE4ZmNmZGVkM2FlNGQxMTk0ZDBlM2U1M2EyMDMxIjoiODBiNmU0OGZlNGEzYjA4ZDQwYzE2MzZiMjVkZmQyYzQiOiIiOjEyODoiOTUxYzFjODliNmQ5NTY2MTYzMGQ3MzlkZDkxMjBhNzMiOiJiODY1ZjhkZDY0YTZmNTFhNTAwYmNmYzhjYWRiYzllOWY1ZDU0ZDJkMjdkODE1ZWNmZTNkNTczMWUxYjIzMGM1ODdiNDY5NThjNjE4N2U0MWI1MmZmMTg3YTE0ZDI2YWE0MWM1Zjk5MDlhM2I3Nzg1OTQyOTIzMmU1YmQ2YzZkYzIyY2Y1NTkwNDAyNDc2ZDAzM2EzMjY4MmU4YWI4ZGM3ZWQwYjA4OWM1YWIyMGFiOWE4YzVkNmEzYmU5ZWE3YWE1NmM5ZDNhYjA4ZGU0YTRhMDE5YWJiNDQ3ZGI0NDgwNjJmMTZhNTMzZDQxNjk1MWE4ZmY2ZjEzZWQ1NjA4Zjc3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmE4MzJhNGIzN2RjYjNjMDg3OWE3NzFiYjhhZTczNGYwZDg4YjliZTQ5Nzc5N2E4IjoiMGYxMTA1ZjllYzI0MTIxMjMyYjYwYjZlZjNjM2U4Y2E5ZWVjMWEzZDc2MjUwMDRiODU3ZDFkNzdmMjkyYjZlYzA2NWQ5MmY1YmI5N2UwZGMyZmRmZGY4MjNhNWRiMjc1MTA5YTk0NzI2OTBjYWVhMDQ3MzBlNGJkNzMyYzMzNTQ4NzE4ZTlmNzY1OGJiZjNlMzBiOGQwNzc5MGNkNTQwYzU3NTQ0ODZlZDhlNGQ2OTIwY2VmYWViMWMxODJjNGQ2N2ViZWQwZDIwNWJhMGJkOTQ0MWE1OTlkNTVlNDUwOTRiMzgwZjM0NzhiY2ZjYTk2NDZhMGQ3YWExOGQwOGU1MiI6IjcwODM1YWJhYjlmOTQ1Yzg0ZWY0ZTk3Y2RjZjJhNjk0IjoiIjoxMjg6ImE0NTliZTBiMzQ5ZjZlODM5MmMyYTg2ZWRkOGE5ZGE1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRkYTIxNjI4NzkxMGQxZjVjMGEzMTJmNjNjMjQzNjEyMzg4YmM1MTBjYjc2YzViYSI6ImQ2NjE3ZDU4MzM0NGQ0ZmU0NzIwOTlkMmE2ODgyOTc4NTcyMTVhM2UzMWI0N2QxYmYzNTVjY2ZlOWNmMjM5OGEzZWJhMzYyYzY3MGM4OGY4YzcxNjI5MDMyNzVkZmQ0NzYxZDA5NTkwMGJkOTdlYmE3MjIwMGQ0MDQ1ZDcyYmQyMzliZGExNTY4MjljMzZiMzhiMWZmNWU0MjMwMTI1ZTU2OTVmNjIzZTEyOTgyOTcyMWU4ODlkYTIzNWJiN2Q0YjlkYTA3Y2NlOGMzY2ViOTY5NjRmZDJmOWRkMWZmMDk5N2UxYTNlMjUzYTY4OGNlYjFiZmVjNzZhN2M1NjcyNjYiOiI3Zjc3MDE0MGRmNWI4Njc4YmM5YzRiOTYyYjhjOTAzNCI6IiI6MTIwOiI5ODIzZTMyNDJiM2Y4OTBjNmE0NTZmMTgzN2UwMzkiOiJiNDkxMDI3NzIyNDAyNWY1OGE1ZDBmMzczODViMDNmY2Q0ODhkZmVmNzU4MGViNWMyNzBjMTBiZDdhNmY2ZDljN2RkYzJkMTM2OGQ2OGQ0ZTA0ZjkwZTNkZjAyOWVkMDI4NDMyYTA5ZjcxMGJlMTYxMGIyYTc1YmQwNWYzMWJhZTgzOTIwNTczOTI5NTczYWZmZDBlYjAzYzYzZTBjZWM3YTAyN2RlYWI3OTJmNDNlZTYzMDdmZDNjNTA3OGQ0M2Q1YjE0MDdhYzAyMzgyNGQ0MWM5NDM3ZDY2ZWVlYzE3MjQ4OGYyOGQ3MDBhYTRiNTQ5MzFhYWQ3Y2Q0NTg0NTZmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzVhZmExZTYxZDQ1OTRiMWMyZmE2MzdmNjRmMThkZDU1N2U0ZGYzMjU1YjQ3ZjI0IjoiNWM3NzJjZGYxOTU3MWNkNTFkNzFmYzE2NmQzM2EwYjg5MmZiY2E0ZWFlMzZhYjBhYzk0ZTYxNjRkNTFhY2IyZDRlNjBkNGYzYTE5YzM3NTdhOTM5NjBlN2ZkOTBiOWE2Y2RmOThiZGYyNTliMzcwZWQ2YzdlZjhjYjk2ZGJhN2UzYTg3NWU2ZTdmZTZhYmM3NmFhYmFkMzBjODc0M2IzZTQ3YzhkZTVkNjA0Yzc0OGVlYjE2ODA2YzJlNzUxODBhOTZhZjc3NDE5MDRlY2E2MTc2OWQzOWU5NDNlYjRjNGMyNWYyYWZkNjhlOTQ3MjA0M2RlMmJiMDNlOWVkYWUyMCI6IjE1MWZkM2JhMzJmNWJkZTcyYWRjZTYyOTFiY2Y2M2VhIjoiIjoxMjA6ImYwNjI2Y2MwN2YyZWQxYTc1NzAzODZhNDExMGZjMSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmZWJkNGZmMGZlZGQ5ZjE2YmNjYjYyMzgwZDU5Y2Q0MWI4ZWZmMTgzNDM0N2Q4ZmEiOiJkYzk3MWM4ZjY1ZWNlMmVhNDEzMGFmZDRkYjM4ZmM2NTdjMDg1ZWExOWM3NmZlZjUwZjViZDBmOGRkMzY0Y2MyMjQ3MWMyZmEzNmJlOGNkZTc4NTI5ZjU4YTc4ODg4ZTlkZTEwOTYxNzYwYTAxYWYwMDVlNDJmYzViMDNlNmY2NDk2MmU2YjE4ZWFlZGVhOTc5ZDMzZDFiMDZlMjAzOGIxYWFkODk5M2U1YjIwY2FlNmNjOTNmM2Y3Y2YyYWQ2NThmYmJhNjMzZDc0ZjIxYTIwMDNkZGVkNWY1ZGRhM2I0NmVkNzQyNDg0NWMxMWJhYjQzOWZiYjk4N2YwYmUwOWY4IjoiNzQzNjk5ZDM3NTk3ODFlODJhM2QyMWM3Y2Q3OTkxYzgiOiIiOjEyMDoiMWRhMzQ3ZjliNjM0MTA0OWU2MzE0MDM5NWFkNDQ1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQyODBkMDc5MTEwYzFjODI2Y2M3N2Y0OTBkODA3ZGQ4ZDUwOGViNTc5YTE2MGM0OSI6ImEyODZkMTk2MTBhOTkwZDY0ZjNhY2NkMzI5ZmMwMDVkNDY4NDY1YTk4Y2ZhMmYzNjA2YzZkMGZiZWI5NzMyODc5YmFkM2NhODA5NDMyMmEzMzRhNDMxNTViYWVkMDJkOGUxM2EyZmJmMjU5ZDgwMDY2YzZmNDE4YTFhNzRiMjNlMGY2MjM4ZjUwNWIyYjNkYzkwNmZmY2I0OTEwY2U2Yzg3OGI1OTViYjRlNWY4ZjNlMmVkZTkxMmIzOGRiYWZkZjQ2NTlhOTNiMDU2YTFhNjdjYjBlYzFkYmYwMGQ5MzIyM2YzYjIwYjNmNjRhMTU3MTA1YzU0NDViNjE2MjhhYmYiOiI4NWIyNDFkNTE2Yjk0NzU5YzllZjk3NWY1NTdiY2NlYSI6IiI6MTEyOiJiYmYyODlkZjUzOWY3OGMzYTkxMmIxNDFkYTNhIjoiYjkyODZhYjkxNjQ1YzIwZGUwNDBhODA1MDIwZmVkNTNjNjEyZDQ5M2E4Y2U5YzcxNjQ5YWUxNmJkNTBlYWI2ZmI3ZjNhOTE4MGUxNjUxZDU0MTNhYTU0MjYwOGQ3ZWNiZjlmYzczNzhjMGJlZjRkNDM5YmMzNTQzNGI2Y2Y4MDM5NzZiODc4M2FlY2M4M2E5MWU5NWNlYTcyYzJhMjZhODgzYjcxMDI1MmUwYzJhNmJhYTExNTczOWEwNjkyYzg1ZjZkMzRmZjA2MjM0ZmJkYzc5YjhjNGE4ZWEwYTcwNTZmYjQ4YzE4ZjczYWFmNTA4NDg2OGFiYjBkZmFhMjg3ZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVlODBmODdmYTIxNTZjNjJkZjdiZTJhZDE2YzQ4OTBkZTVlZTU4NjhhNjg0ZmNmOSI6ImM4MjkwNzNlZmQ1YzUxNTBkMmI3ZTJjZGFlZmY5Nzk4MzBkMWFhOTgzYzc0NzcyNGFkZTY0NzJjNjQ3YTZlOGU1MDMzMDQ2ZTAzNTllYTYyZmMyNmI0Yzk1YmNjYjNhYzQxNmZkZjU0ZTk1ODE1YzM1YmY4NmQzZmRkNzg1NmFiYmI2MThmZThmY2QzNWE5Mjk1MTE0OTI2YTBjOWRmOTIzMTdkNDRiYTE4ODVhMGM2N2MxMGI5YmEyNGI4YjJmM2E0NjQzMDhjNTU3ODkzMjI0N2JmOWM3OWQ5MzlhYTM1NzYzNzZkMmQ2YjRmMTRhMzc4YWI3NzU1MzFmZThhYmYiOiI5NzY5ZjcxYzc2YjViNmM2MDQ2MmE4NDVkMmMxMjNhZCI6IiI6MTEyOiIzOTRiNmM2MzFhNjliZTNlZDhjOTA3NzBmM2Q0IjoiZjg4NmJkOTJjYTlkNzNhNTJlNjI2YjBjNjNhM2RhYTEzOGZhYWFjZjc4MDkwODZkMDRmNWMwYzg5OTM2MmFhMjJlMjVkODY1OTY1M2I1OWMzMTAzNjY4NDYxZDk3ODViYjQyNWM2YzEwMjZhZDljOTI0MjcxY2VjOWYyN2E5YjM0MWY3MDhjYTg2ZjFkODJhNzdhYWU4OGIyNWRhOTA2MWI3OGI5NzI3NmYzMjE2NzIwMzUyNjI5YmQxYTI3ZWJmODkwZGE2ZjQyZDhjNjNkNjgzNDJhOTNjMzgyNDQyZDQ5ZGQ0YjYyMjE5NTA0Nzg1Y2VlODlkZmZkYzM2Zjg2OCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ4YTdiOTllNTNmNWU1YjE5NzM2NGQ0NTE2Y2FjZTRiOTI4ZGU1MGU1NzEzMTVlMyI6ImQwZGIwYWM1ZTE0YmYwMzcyOTEyNWYzMTM3ZDQ4NTRiNGQ4Y2UyZDI2NGY4NjQ2ZGExNzQwMmJkYWQ3MDM0YzBkODRkN2E4MGYxMDdlYjIwMmFlYWRiZmRmMDYzOTA0YWU5NzkzYzZhZTkxZWU4YmNjMGZjMDY3NGQ4MTExZjZhZWE2NjA3NjMzZjkyZTRiZTNjZmJiNjQ0MTgxMDFkYjhiMGE5MjI1YzgzZTYwZmZjZjdhN2Y3MWY3NzE0OWExM2Y4YzUyMjdjZDkyODU1MjQxZTExZWUzNjMwNjJhODkzYTc2YWMyODJmYjQ3YjUyM2IzMDZjZDgyMzVjZDgxYzIiOiI0YjEyYzY3MDE1MzQwOThlMjNlMWI0NjU5ZjY4NGQ2ZiI6IiI6MTEyOiI3MjliMzFjNjVkODY5OWM5M2Q3NDFjYWFjOGUzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM4NzRiNDI3YjcxODFiMGM5MGI4ODcxNDdjMzZmMjQyODI3MTQ5MzI0ZmQ1Yzk0NSI6ImJkZDkwMTkwZDU4N2E1NjRhZjAyMmYwNmM4YmQxYTY4NzM1YjZmMThmMDQxMTNmZGNlYzI0YzYwMjdhYWYwMjcxYjE4MzMzNmZiNzEzZDI0N2ExNzNkOWUwOTVkYWU2ZTliYWRiMGFiMDY5NzEyMzAyODc1NDA2ZjE0MzIwMTUxZmQ0M2I5MGEzZDZmMzVjYzg1NjYzNmIxYTZmOThhZmM3OTdjYjUyNTk1NjdlMmU5YjdjZTYyZDdiMzM3MGI1ZWU4NTI3MjJmYWY3NDBlZGY4MTViM2FmNDYwY2RkN2RlOTBjYTZhYjZjZDE3Mzg0NDIxNmMwNjRiMTZlYTM2OTYiOiI0YjhkZGEwNDZhNWI3YzQ2YWJlZWNhMmYyZjliY2FmOCI6IiI6MTA0OiJmZTFlNDI3YmNiMTVjZTAyNjQxM2EwZGE4NyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1NjU0M2NkNmUyZWJiMWUzZGMxMzZhODI2YmZjMzdlZGRiMTJmN2EyNjQzMGExYjQiOiJkNTQxZGQzYWNlYzJkYTA0MmU2ZWEyNmZiOTBmZjlhMzg2MTE5MTkyNjQyM2I2ZGM5OWM1MTEwYjNiZjE1MGIzNjIwMTcxNTlkMGI4NWZmZWEzOTcxMDZhMGQ4Mjk5ZWMyMjc5MWNiMDYxMDNjZDQ0MDM2ZWVkMGQ2ZDlmOTUzNzI0ZmIwMDMwNjhiM2MzZDk3ZGExMjljMjhkOTdmMDllNjMwMGNiZWEwNmJhNjZmNDEwY2E2MWMzMzExY2UzMzRjNTVmMDc3YzM3YWNiM2I3MTI5YzQ4MTc0OGY3OWM5NThiYzNiYmViMmQzZmY0NDVhZDM2MWVkNGJiYzc5ZjBhIjoiOTI3Y2U4YTU5NmVkMjhjODVkOWNiOGU2ODhhODI5ZTYiOiIiOjEwNDoiM2E5OGY0NzExMTJhOGE2NDY0NjBlOGVmZDAiOiJhNjAyZDYxZTdhMzVjYmUwZTQ2MzExOWJiNjZmZDRiYjZjNzVkMWZlMGIyMTFiOWQ2YTBhNmU5ZTg0YjA3OTQyODIzMThmMGQzM2VjMDUzZjJjZmJhMTYyM2U4NjU2ODFhZmZlYWYyOWYzZGEzMTEzOTk1ZTg3ZDUxYTVhYjQ4NzJiYjA1YjViZThlZjJiMTRkZmMzZGY1YTQ4Y2JjOWIxMDg1M2E3MDhlZTQ4ODZhNzM5MGU4ZTRkMjg2NzQwYTBkZDQxYzAyNWM4ZDcyZWRhM2Y3M2YzY2VjNWMzM2Q1ZTUwYjY0M2FmZDc2OTEyMTNjY2NjY2MyYzQxYjliZDdhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2FhZjgxY2QzODBmM2FmNzg4NWVmMGQ2MTk2YTE2ODhjOTM3MmM1ODUwZGM1YjBiIjoiNmYyNjk5MjliOTJjNjI4MWUwMDY3MmVhZWMxODNmMTg3YjJkZGVjYzExYzkwNDUzMTk1MjFkMjQ1YjU5NWFiMTU0ZGQ1MGYwNDVhNjYwYzRkNTNhZTA3ZDFiN2E3ZmQ2YjIxZGExMDk3NmViNWZmY2RkZGEwOGMxZTkwNzVhM2I0ZDc4NWZhYTAwM2I0ZGQyNDNmMzc5ZTA2NTQ3NDBiNDY2NzA0ZDkxNzNiYzQzMjkyYWUwZTI3OWE5MDNhOTU1Y2UzM2IyOTliZjI4NDJiMzQ2MWY3YzlhMmJkMzExZjNlODcyNTRiNTQxM2QzNzJlYzU0M2Q2ZWZhMjM3Yjk1YSI6IjUwOGM1NWYxNzI2ODk2ZjViOWYwYTcwMjRmZTJmYWQwIjoiIjoxMDQ6IjNiODAyNjI2OGNhZjU5OWVlNjc3ZWNmZDcwIjoiYzRhOTZmYjA4ZDdjMmVlYmQxNzA0NjE3MmI5ODU2OWJjMjQ0MTkyOWZjMGQ2ODc2YWExZjM4OWI4MGMwNWUyZWRlNzRkYzZmOGMzODk2YTJjY2Y1MThlMWIzNzVlZTc1ZTQ5NjdmN2NjYTIxZmE4MWVlMTc2ZjhmYjg3NTMzODFjZTAzYjJkZjg3Mzg5NzEzMWFkYzYyYTBjYmViZjcxOGM4ZTBiYjhlZWVkMzEwNDUzNWYxN2E5YzcwNmQxNzhkOTVhMWIyMzJlOWRhYzMxZjJkMWJkYjNhMWIwOThmMzA1NmYwZTNkMThiZTM2YmQ3NDY2NzU3NzljMGY4MGExMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmZjOWQ5YWM4NDY5Y2ZjNzE4YWRkMmIwM2E0ZDhjOGRjYzJlZWNhMDhlNWZmN2JjIjoiYmM4NGQ4YTk2MmE5Y2ZkMTc5ZDI0Mjc4ODQ3M2Q5ODBkMTc3YWJkMGFmOWVkY2NiMTRjNmRjNDE1MzU0MzlhMTc2ODk3ODE1OGVlZWQ5OTQ2NjU3NGVhODIwZGJlZGVhNjhjODE5ZmZkOWY5OTE1Y2E4MzkyYzJlMDMwNDlkNzE5OGJhZWNhMWQzNDkxZmUyMzQ1ZTY0YzEwMTJhZmYwMzk4NWI4NmM4MzFhZDUxNmQ0ZjVlYjUzODEwOWZmZjI1MzgzYzdiMGZhNmI5NDBhZTE5YjA5ODdkOGMzZTRhMzdjY2JiZDIwMzQ2MzNjMWViMGRmMWU5ZGRmM2E4MjM5ZSI6ImIyYTdjMGQ1MmZjNjBiYWNjM2QxYTk0ZjMzMDg3MDk1IjoiIjo5NjoiMGE3YTM2ZWMxMjhkMGRlYjYwODY5ODkzIjoiZmMzY2Q2NDg2ZGZlOTQ0ZjdjYjAzNTc4NzU3M2E1NTRmNGZlMDEwYzE1YmQwOGQ2YjA5ZjczMDY2ZjZmMjcyZmY4NDQ3NGYzODQ1MzM3YjZlNDI5Yzk0N2Q0MTljNTExYzI5NDVmZmIxODE0OTJjNTQ2NTk0MGNlZjg1MDc3ZThhNmEyNzJhMDdlMzEwYTJmMzgwOGYxMWJlMDNkOTYxNjI5MTNjNjEzZDljM2YyNWMzODkzYzJiZDJhNThhNjE5YTk3NTdmZDE2Y2MyMGMxMzA4ZjIxNDA1NTczMzAzNzlmMDdkYmZkODk3OWIyNmIwNzU5Nzc4MDVmMTg4NWFjYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODFmZjcyOWVmYTRhOWFhMmVjY2MzN2M1Zjg0NjIzNWI1M2QzYjkzYzc5YzcwOWM4IjoiMzk5MmFkMjllZWI5N2QxN2JkNWMwZjA0ZDg1ODk5MDNlZTIzY2NiMmIxYWRjMjk5MmE0OGEyZWI2MmMyNjQ0YzBkZjUzYjRhZmU0YWNlNjBkYzVlYzI0OWMwYzA4MzQ3M2ViYWMzMzIzNTM5YTU3NWMxNGZhNzRjODM4MWQxYWM5MGNiNTAxMjQwZjk2ZDE3NzliMjg3ZjdkOGJhODc3NTI4MWQ0NTNhYWUzN2M4MDMxODVmMjcxMWQyMWY1YzAwZWI0NWNhZDM3NTg3ZWQxOTZkMTYzM2YxZWIwYjMzYWJlZjMzNzQ0N2QwM2VjMDljMGUzZjdmZDMyZThjNjlmMCI6IjFiZDE3ZjA0ZDFkYzJlNDQ3YjQxNjY1OTUyYWQ5MDMxIjoiIjo5NjoiMDFiMGE4MTVkYzZkYTNlMzI4NTFlMWZiIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDY4NTAwZThkNGY4ZDRhZjkwMzVjZGFhOGUwMDVhNjQ4MzUyZThmMjhiZGFmYzhhIjoiOThlMzI0MjhkOWQyMWM0YjYwZTY5MGEyY2UxY2Y3MGJlZTkwZGYzMTMwMmQxODE5YjdkMjdmZDU3N2RkOTkwZjdmZmU2YmE1ZWYxMTdjYWFjNzE4Y2MxODgwYjRjYTk4ZjcyZGIyODFjOTYwOWUxODkzMDczMDJkYzI4NjZmMjBiZTNhNTQ1YTU2NTUyMTM2OGE2ODgxZTI2NDJjYmE2M2IzY2Y0YzhiNWU1YThlYWJlYjNlOGIwMDQ2MThiOGY3NzY2N2MxMTFlNTQwMmM1ZDdjNjZhZmQyOTdjNTc1Y2U1MDkyZTg5OGQ1ODMxMDMxZDIyNWNlZTY2OGMxODZhMSI6IjVlYTkxOThiODYwNjc5NzU5MzU3YmVmZGJiMTA2YjYyIjoiIjo5NjoiZDU4NzUyZjY2YjJjYjliYjJiYzM4OGViIjoiMmVmM2ExN2ZjZGIxNTRmNjBkNWU4MDI2M2I3MzAxYTg1MjZkMmRlNDUxZWE0OWFkYjQ0MWFhMjU0MTk4NmI4NjhkYWIyNDAyNzE3OGY0ODc1OWRiZTg3NGFlN2FhN2IyN2ZiMTk0NjFjNjY3OGEwYmE4NGJiY2Q4NTY3YmEyNDEyYTU1MTc5ZTE1ZTdjMWExMzkyNzMwYWMzOTJiNTljNTFkNDhmODM2NmQ0NWI5MzM4ODAwOTU4MDBlMWYzNmZmMWFjMDA3NTNmNjM2M2IwZTg1NGY0OTQ1NTJmMWYyZWZlMDI4ZDk2OWU2YjFhODA4MDE0OWRkODUzYWE2NzUxZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzQ3NGQ5YjA3NzM5MDAxYjI1YmFmNjg2NzI1NDk5NGUwNmU1NGM1Nzg1MDgyMzJmIjoiMWNiYWIyYjZlNDI3NGNhYTgwOTg3MDcyOTE0ZjY2N2I4ODcxOThmN2FhZjQ1NzQ2MDhiOTFiNTI3NGY1YWZjM2ViMDVhNDU3NTU0ZmY1ZDM0NmQ0NjBmOTJjMDY4YmM2MjZmZDMwMWQwYmIxNWNiMzcyNjUwNGIzZDg4ZWNkNDZhMTUwNzc3MjhkZGMyYjY5OGEyZThjNWVhNTg4NWZjNTM0YWMyMjdiOGYxMDNkMTkzZjE5NzdiYWRmNGY4NTNhMDkzMTM5OGRhMDFmODAxOWE5YjFmZjI3MWIzYTc4M2ZmMGZhZTZmNTRkYjQyNWFmNmUzYTM0NWJhNzUxMmNiZiI6IjNhZGU2YzkyZmUyZGM1NzVjMTM2ZTNmYmJiYTVjNDg0IjoiIjo2NDoiNjdjMjUyNDBiOGUzOWI2MyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ1MGQ0YzdkNDQyZDhhOTJkMDQ4OWE5NmU4OTdkNTBkZGE2ZmJlNDdjYTc3MTNlZSI6ImIzNmI0Y2FmMWQ0N2IwZDEwNjUyODI0YmQ1N2I2MDNlYzFjMTZmNDcyMGNlN2Q0M2VkZGU4YWYxYjk3MzdmNjFiNjhiODgyNTY2ZTA0ZGE1MDEzNmYyN2Q5YWY0YzRjNTdmZmY0Yzg0NjVjOGE4NWYwYWVhZGMxN2UwMjcwOWNjOWJhODE4ZDlhMjcyNzA5ZTVmYjY1ZGQ1NjEyYTVjNWQ3MDBkYTM5OWIzNjY4YTAwMDQxYTUxYzIzZGU2MTZlYTNmNzIwOTNkODVlY2JmZDlkZDBiNWQwMmI1NDFmYjYwNWRjZmZlODFlOWY0NWE1YzBjMTkxY2MwYjkyYWM1NmQiOiI0MWIzN2MwNGFiOGE4MGY1YThkOWQ4MmEzYTQ0NDc3MiI6IiI6NjQ6IjRlZTU0ZDI4MDgyOWU2ZWYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzOGYzZWMzZWM3NzVkYWM3NmFlNDg0ZDViNmNhNjFjNjk1YzdiZWFmYmE0NjA2Y2EiOiI0OTcyNmI4Y2VmYzg0MmEwMmYyZDdiZWYwOTk4NzFmMzgyNTdjYzhlYTA5NmM5YWM1MGJhY2VkNmQ5NDBhY2I0ZThiYWY5MzJiZWMzNzlhOTczYTJjM2EzYmM0OWY2MGY3ZTllZWY0NWVhZmRkMTViZGExZGQxNTU3ZjA2OGU4MTIyNmFmNTAzOTM0ZWI5NjU2NGQxNGMwM2YwZjM1MTk3NGM4YTU0ZmIxMDRmYjA3NDE3ZmU3OTI3MmU0YjBjMDA3MmI5Zjg5Yjc3MDMyNjU2MmU0ZTFiMTRjYWQ3ODRhMmNkMWI0YWUxZGM0MzYyM2VjNDUxYTFjYWU1NWY2Zjg0IjoiOWFmNTNjZjY4OTFhNzQ5YWIyODZmNWMzNDIzODA4OGEiOiIiOjY0OiI2ZjZmMzQ0ZGQ0M2IwZDIwIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmRiNGVmMDYxNTEzZWY2NjkwZDU3YWVmNTBkODAxMWUwZGQ3ZWI0NDMyZDgyMzc0IjoiYjdmOTIwNjk5NWJjOTczMTE4NTVlZTgzMmUyYjQwYzQxYWIyZDFhNDBkOTI2MzY4M2M5NWIxNGRjYzUxYzc0ZDJkZTdiNjE5OGY5ZDQ3NjZjNjU5ZTc2MTlmZTI2OTNhNWIxODhmYWM0NjRjY2JkNWU2MzJjNWZkMjQ4Y2VkYmE0MDI4YTkyZGUxMmVkOTE0MTUwNzdlOTRjZmU3YTYwZjExNzA1MmRlYTg5MTZkZmUwYTUxZDkyYzFjMDM5MjdlOTMwMTJkYmFjZDI5YmJiYzUwY2U1MzdhODE3MzM0OGNhOTA0YWM4NmRmNTU5NDBlOTM5NGMyODk1YTlmZTU2MyI6IjYyM2RmNWEwOTIyZDFlOGM4ODNkZWJiMmUwZTVlMGIxIjoiIjozMjoiMTRmNjkwZDciOiJhNjQxNGRhYTliZTY5M2U3ZWJiMzI0ODBhNzgzYzU0MjkyZTU3ZmVlZjRhYmJiMzYzNmJlYmJjMzA3NGJmYzYwOGFkNTU4OTZmZTliZDVhYjg3NWU1MmE0M2Y3MTViOThmNTJjMDdmYzlmYTYxOTRlYTBjZDhlZDc4NDA0ZjI1MTYzOTA2OWM1YTMxM2NjZmM2Yjk0ZmIxNjU3MTUzZmY0OGYxNmY2ZTIyYjNjNGEwYjdmODhlMTg4YzkwMTc2NDQ3ZmUyN2ZhN2RkYzJiYWMzZDJiN2VkZWNhZDVmNzYwNTA5M2FjNDI4MGIzOGFlNmE0YzA0MGQyZDRkNDkxYjQyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4OTAxYmVjNGQzYzY0MDcxZDhjMzBjNzIwYzA5MzIyMWUwNWVmZWQ3MWRhMjgwYmYiOiI3YzQ0N2U3MDBkYjczNjcyNjBkZmZhNDIwNTBlNjEyZWZmMDYyZWIwYzhhNmI0ZmUzNDg1ODgwMGJjYjhlYzJmNjIyY2I1MjEzNzY3YjU3NzE0MzM3ODNlOWIwZmE2MTdjOWZmYjdmZGUwOTg0NWRhZmMxNmRmYzBkZjYxMjE1YzBjYTExOTFlYWJmNDMyOTNkYjY2MDNkNTI4NTg1OWRlN2VmMzMyOWY1ZTcxMjAxNTg2ZmIwMTg4ZjA4NDBlZDViODc3MDQzY2EwNjAzOTc2OGM3N2ZmODY4N2M1Y2ZjMmZkMDEzYTBiOGRhNDgzNDRjNTY4ZmNlNmIzOWUyYjE5IjoiOTI2NWFiZTk2NmNiODM4MzhkN2ZkOTMwMjkzOGY0OWQiOiIiOjMyOiI2ZjZjMzhiYyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJjNTdlYjc2M2Y4ODYxNTRkMzg0NmNjMzMzZmM4YWU4YjNjN2M5YzM3MDVmOTg3MiI6IjlmZTdkMjEwMjIxNzczYmE0YTE2Mzg1MGJhYjI5MGJhOWI3YmY1ZTgyNTc2MGFjOTQwYzI5MGExYjQwY2Q2ZGQ1YjlmYjYzODVhZTFhNzlkMzVlZTdiMzU1YjM0Mjc1ODU3ZDViODQ3YmVmNGFjN2E1OGY2ZjBlOWRlNjg2ODc4MDcwMDlmNWRjMjYyNDQ5MzVkN2JjYWZjN2FlZDE4MzE2Y2U2YzM3NTE5MmQyYTdiZjBiZWU4YTYzMmZlNGY0MTI0NDAyOTJlMzkzMzliOTRiMjgyODE2MjI4NDJmODgwNDhiZTQ2NDA0ODZmMmIyMWExMTk2NThjMjk0Y2UzMmUiOiI5YjM3ODExNjVlN2ZmMTEzZWNkMWQ4M2QxZGYyMzY2ZCI6IiI6MzI6IjYyZjMyZDRlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMwN2QzMWE1OTRlNTRmNjczYmVhMmY5Nzc4MzU2NzBhY2E0ZjNkNDVjOWMzNzZjYyI6ImQ3Mzg1YTdiZDBjYjc2ZTFlMjQyZmE1NDdjNDc0MzcwYmNjN2NjN2NmM2UzZmEzN2IwMGZlMDhhNTYzODNjYTMxZDAyM2Q4YzQ5M2Y2ZDQyZTQ4MmIwZjMyZTRmMjQ0ZGQxMDBlYTA4ZWVlNjUzNWU1YmI4ZDI3Zjc2ZGJiN2VlYWQ2YmE4ZTAzMWNjZDBlYWViNjQ5ZWRlZTkyYWVhZjBmMDI3ZDU5ZWZkNGUzOWIxZjM0YjE1Y2ViOGI1OTJlZTBmMTcxYjE3NzNiMzA4YzBlNzQ3NzkwYjBlNmFjZTkwZmM2NjFjYWE1Zjk0MmJkYzE5NzA2N2YyOGZiZTg3ZDEiOiIwYmRhYTM1M2M0OTA0ZDMyNDMyOTI2ZjI3NTM0YzczYyI6ImFhMzlmMDQ1NTljY2MyY2FlM2Q1NjNkZGE4MzFmYjIzOGIyNTgyY2IyYzJiYjI4Y2ZmMjBjYzIwMjAwNzI0Yzg3NzFiOTgwNWVmNzQ2NGI4ZmMwNmM3YjgwNjBjNjkyMGZkMjc3OWZiYzgwN2MyMjkyYzhjMWY4OGY4MDg4NzU1NjA5YTE3MzJmZjhjMGIwNjYwNjQ1MmI5NzBjNzk5OTdiOTg1ODg5NDA0ZmQ5MDdjNDY2OGEwYmNjMTFiYTYxNzE3NWY0NTI1NTIzNDk0YTI0NGRhNjBiMjM4NDY4Yzg2MzA1NWYwNGRiMjBlYTQ4OWFkZjU0NWQ1NmMwYTcxZDgiOjEyODoiMmRkZGE3OTBhYWUyY2E0MjdmNWZiMDMyYzI5NjczZTYiOiIwYjkyMjYyNzU5ODk3ZjRiZDU2MjRhODkxMTg3ZWJhNjA0MGQ3OTMyMmEyYTVhNjBmYjc1YzZjNmE1YmFkZDExN2FiZTQwYzZkOTYzOTMxYmJjNzJkY2ExYTFiZjFmNTM4ODAzMGZlMzIzYjNiMjRiZDQwODMzNGI5NTkwODE3N2ZiNTlhZjU3YzVjYzZiMzE4MjViYzcwOTdlZWM3ZmVjMTlmOWNkYjQxYzAyNjRmZDIyZjcxODkzYmNmODgxYzE1MTBmZWI4MDU3ZTY0ODgwZjFlYTJkZjhkYzYwYmIzMDBmZDA2YjBhNTgyZjdiZTUzNGU1MjJjYWFkYzRhMmM3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjNjMjAxOTY4ZGVmNTUxODE3ZjIwZTQ5YjA5ZGJiNWFhZTAwMzMzMDViZWY2OGEwIjoiNzdiYzhhZjQyZDFiNjRlZTM5MDEyZGY1ZmMzM2M1NTRhZjMyYmZlZjZkOTE4MjgwNGRjZmUzNzBkZmM0YjlkMDU5YmRiYzU1ZjZiYTRlYWNiOGUzYTQ5MWQ5NmE2NTM2MGQ3OTA4NjRiYTYwYWNmMWE2MDVmNmIyOGE2NTkxNTEzZWEzY2ZkNzY4ZmY0N2FlZTI0MmE4ZTliZGZhYzM5OWI0NTIyMzFiZmQ1OWQ4MWM5YjkxZjhkYzU4OWFkNzUxZDhmOWZkYWQwMWRkMDA2MzFmMGNiNTFjYjAyNDgzMzJmMjQxOTRiNTc3ZTU1NzFjZWI1YzAzN2E2ZDBiY2ZlOCI6ImJkMjk1MmQyMTVhZWQ1ZTkxNWQ4NjNlN2Y3Njk2YjNlIjoiMjNmMzVmYWM1ODM4OTc1MTliOTQ5OTgwODRhZDZkNzc2NjZlMTM1OTUxMDllODc0NjI1YmM2Y2NjNmQwYzc4MTZhNjJkNjRiMDJlNjcwZmE2NjRlM2JiNTJjMjc2YjFiYWZiZWI0NGU1ZjljYzNhZTAyOGRhZjFkNzg3MzQ0NDgyZjMxZmNlNWQyODAwMDIwNzMyYjM4MWE4YjExYzY4MzdmNDI4MjA0YjdlZDJmNGM0ODEwMDY3ZjJkNGRhOTk5ODdiNjZlNjUyNWZjNmI5MjE3YThmNjkzM2YxNjgxYjdjZmE4NTdlMTAyZjYxNmE3Yzg0YWRjMmY2NzZlM2E4ZiI6MTI4OiJiYjliYTNhOWFjN2Q2M2U2N2JkNzhkNzFkYzMxMzNiMyI6IjE3ZDkzYzkyMTAwOWM2YjBiM2VjZjI0M2QwOGI3MDE0MjI5ODNmMmRjYWVjOWM4ZDc2MDRhMmQ1NTY1ZWQ5NmNlNWNkZGNiMTgzY2Q1ODgyZjhkNjFkMzIwMmM5MDE1ZDIwN2ZlZDE2YTRjMTE5NWJhNzEyNDI4YzcyNzYwMTEzNTMxNWZjNTA0ZTgwYzI1M2MzYTJlNGE1NTkzZmM2YzRhMjA2ZWRjZTFmZDcxMDRlOGE4ODgzODViYmIzOTZkM2NkZjFlYjJiMmFhNGQwYzllNDU0NTFlOTk1NTBkOWNmYTA1YWFmZTZlN2I1MzE5YzczYzMzZmQ2Zjk4ZGIzYzUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YmFlYzA2NjlhZGQzMGFjYjhmNjc4Y2U0NzdhMmIxNzFmODlkMWY0MTkzNWM0OTEiOiI1NzEyYjg0YzRjOTdkNzVmODRlZGQ1MDU2MWJjMWQzZjFiYTQ1MWNjM2IzNThiMjQwM2I1ZTUyODI5MDk1NDM0OGNmN2EyMzViNGRjMTFhNzJkZGJjNTAzMTkxMjA0ZTk4YTk3NDRkODU0MTk1MDhjOGNhNzY0MzhjMTMzMDVmNzE2ZjFlMjM5YTZkOWY2NDIzYzI3MjE3YTAwNTdhYTc1ZjZkN2UyZmIzNTZlNzE5NGYyNzE0NTlhYjU0ODI1ODllYTMxMWIzM2UzZDM4NDU5NTJmZjQwNjdkZDJiOWJjYzJlOGY4MzYzMGIwYTIxOWU5MDQwNDBhYmQ2NDNkODM5IjoiYjE0NzJmOTJmNTUyY2EwZDYyNDk2YjhmYTYyMmM1NjkiOiI1YWU2NGVkZjExYjRkYmM3Mjk0ZDNkMDFiYzlmYWYzMTBkYzA4YTkyYjI4ZTY2NGUwYTc1MjVmOTM4ZDMyZWYwMzMwMzNmMWRlODkzMWYzOWE1OGRmMGVhYmM4Nzg0NDIzZjBhNjM1NWVmY2ZmMDA4Y2FlNjJjMWQ4ZTViN2JhZWZkMzYwYTVhMmFhMWI3MDY4NTIyZmFmOGU0MzdlNjQxOWJlMzA1YWRhMDU3MTViZjIxZDczYmQyMjc1MzFmZWE0YmMzMWE2Y2UxNjYyYWVjNDlmMTk2MWVlMjhlMzNhZTAwZWIyMDAxM2ZkODRiNTFjZmUwZDVhZGJkYWZmNTkyIjoxMjg6IjI5YTJkNjA3YjJkMmQ5Yzk2ZDA5MzAwMGI0MDFhOTRmIjoiYmViNjg3ZjA2MmFlN2Y1MTU5ZDA3NjA5ZGQ1OGQ3YjgxYzQ3OGQxODBiYzBiNGMwN2FlNzk5NjI2ZmYxZGEyYmUyZTBkNzhiMmEyYTFmNTYzMjU3ZjE2MTQ5MWE1YWM1MDBjZDcxOWRhNjM3OWUzMGQwZjZkMGE3YTMzMjAzMzgxZTA1OGY0ODdmYzYwOTg5OTIzYWZiZWU3NmU3MDNjMDNhYmM3M2JiMDFiZDI2MmZmNmYwYWM5MzFmNzcxZTliNGYyOTgwZTdkOGMwYTllOTM5ZmE2ZTEwOTQ3OTY4OTRmMmM3OGY0NTNlNGFiZTY0Y2IyODUwMTY0MzVlZjBlOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdiODgyYTJkZjgxZmRiOTI3NWZiMDVkMTIwZjMyNDE3ZThmZmVkZDA3NDU3ZTkzOCI6IjBhYWU3MjEzZGEyNzliMzRkNmRjZjJhNjkxYjJkMDMzMzExMmVhMjJkZTBjM2M2OGQ0N2NmOWY5ZjRlZDhhZDRlMDNkNGE2MGVjMThjM2EwNGFjOWMyYWJiNzNlMTAyMzA1MTAyOWI1ZTg3MDViYjY5YzRjNTBhZmM4NGRlYjAzNzlkYjUwNzdiZTFmNjYzNjUyZjhiZDg5NTgyNzFhZjJjMWFjNGE4N2UwOGNiNTI2YmFiOGEwMzA2NTJmMmEyOWFmODA1NWQwZjMxZTM1NDc1Y2FlZTI3Zjg0YzE1NmVmODY0MmU1YmZlZjg5MTkyZjViZGUzYzU0Mjc5ZmZlMDYiOiI1YzA2NGQzNDE4Yjg5Mzg4ZmIyMWM2MWQ4Yzc0ZDJjNSI6IjViZmE3MTEzZDM0ZTAwZjM0NzEzY2YwN2MzODZkMDU1ZTg4OWJiNDJkN2Y2Yzg2MzFmZmNlNTY2OGU5OGNiMTliZWQ4ODIwYjkwZWNiMmIzNWRmNzEzNGY5NzU3MDAzNDdlNTUxNDI4N2NmZWY3ZmZhMmIwZmY0OGIxZGUwNzY5YjAzZGNhNjYxMDk5NWQ2N2NiODAwNTJjYjJlNTkxNGViNGVkNDNlZjU4NjFmNGI5MzY0MzE0ZmRlNmFkMmI4MmZiYmE3ZmQ4NDlkZmE2ZTQ2ZWNjMTJlZGM4Y2FiZmZmMjhkOWJkMjNjMmJjYzhhYjM2NjFjOWJhNGQ1ZmVlMDYiOjEyMDoiMDk0M2FiYjg1YWRlZTQ3NzQxNTQwOTAwY2M4MzNmIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjUxZDk0ZDIxNDgyYzAwYmI1YmM3ZTdlMDNhYTAxN2JhNThmNWEyMzQ5NGI3MmMyYSI6IjNhOWM2OWMxZWQyMzQwYmZkZTE0OTU2NThkYmY0ZjU0NzMxYTE5YjM5MjJhMWQ1MzVkZjhkMGIyNTgyZjVlODAzYjU4OTFlOGFkMWFhMjU2YzkyMzk1NmRjZGEyNDMwZDBjMDY5NmJjZTYzMjk1ZmI2MTE4M2UwNDA1NjZlNDU5MzM4ZjkwOGQyM2FlNTFmNjQwMjBjMWVmM2QxOTI0MjhmMjMzMTJiMjg1ZmM0MTExZDUwZDFhZGQ1OGY0YTQ5MDA4YTIyYzkwZDMzNjUyMzBlOTE1OGNkNTZmOWQ4NGYwNzliZGQ2NzM1NTVkNGRjNzZjNzRiMDJmYTk5MjBlN2QiOiJmYjIxY2Q3NjNlNmYyNTU0MGY4YWQ0NTVkZWFjY2RmMCI6IjAxOWQxZGI1NTY5ZWVmZjgzMzA2ZjY1ZDY1M2IwMTA2NDg1NGMxYmU4NDQ2Y2QyNTE2MzM2NjY3YzY1NTdlNzg0NGZjMzQ5YWRlYTY0YTEyZGMxOWFjN2U4ZTQwYjA1MjBhNDhmYWM2NDU3MWE5M2Q2NjkwNDU2MDcwODVhYzlmYTc4ZmVkOTliYmY2NDQ5MDhkNzc2M2ZlNWY3ZjUwMzk0N2E5ZmU4NjYxYjdjNmFlZjhkYTEwMWFjY2EwYWVkNzU4Y2ExNTgwZWViMmYyNmFlM2JmMmRlMDZjZTg4MjdhOTFhNjk0MTc5OTkxYTk5M2NkZjgxNGVmYmNjNjFjYTUiOjEyMDoiYTkzYmQ2ODJiNTdlMWQxYmY0YWY5N2U5M2I4OTI3IjoiNzA5M2Y0NDcwM2YyY2JiM2QxMmQ5ODcyYjA3YThjZDQ0ZGViNjJkYWU0OGJjNTczYjExYTFlZTFjOWYzMTA1MjIzNDIzZmFjMzE4MWMzMTJhOGE2MTc1N2E0MzJkOTI3MTlmNDg2YzIxZTMxMWI4NDBhYTYzY2Y1MzA3MTBjODczZGYyN2ZlY2RhMDk1NjA3NTkyM2YxZWNjMzliZmZiODYyNzA2ZjQ4YmRlMmRlMTU2MTI5MzBmYzg2MzBkMjAzNmU5ZTRjZmMxYzY5Nzc5MTcxYmQyM2Q5ZTFkNWRlNTBhOWUwYTBkZTRiZDgyZWQzZWZjNDUyOTk5ODBiYjRjYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU2NzU2NDcwOTM3ZjVkOWFmNzZmMmFiZTZkZjJkMGJjMTVmZjhlMzliNTE1NDA3MSI6ImFmYWU5MmJkNTZjNDI2YzA5NWQ3NjYzMzcwMWFhOWJlYTVjZTA1NDkwNDgyYzZjNjRhYzI0NDY4YzNlMWFmNmU2MDMwYTZiYjY2NDk3NDViMDExYzY3MjliZGU5ODViOTI0MmUyMjEwNTMyMmZiYjg4NTNkY2FiYmQwMDE2NWQwYjA3ZDdiNDk5ZTAyMzhiNjUxM2JmNjM1MWViNDA2MzVhNzk4ZjdlNmUyZDMxMTI1ZGRhNDVmZmU4OTY0NTk2ZmRiZmY1NWRmMjJkNGU5MDI1YmQ0ZjM5ZTdjOWI5MGU3NGIzZWU1OGQ2OTAxZjExMzkwMGVlNDdhNGRmNWFmZDciOiI0NTAwMTkzNzExYTVkODE3YTlmNDhkZWFmZGEzOTc3MiI6IjkyZmEyMmRiYTBlZWU2YjFkZTFkZGQyNDcxM2IxYmU0NGM3MTA1ZGY5MGU2ZTdhNTRkY2JmMTkwMjVlNTYwZWI0OTg2ZWUwODBjZjYxMzg5OGExYTY5ZDVhYjQ2MGEzYjhhYTI3MjNhOTVhYzRhNGFmNDgyMjRiMDExYjU1ZmI3NTgyYWUxOGY2NzQ2NTkxZWFiMmJkMzNkODJhOGRiYmFlM2Y3ODc3ZTI4YWZlZjk4NTdhNjIzNTMwYjMxZDgxOThiMmRmNDNmOTAzZDZlNDhkZGFlMDg0ODc0MWY5ZWFhZTdiNTUwNGM2N2FkMTM3OTE4MThmM2M1NWM5YjNkMWUiOjEyMDoiN2Q5Zjk3Yzk3YzM0MjRjNzk5NjZmNWI0NWFmMDkwIjoiNjIyNThkNjBmMDEzOGMwNDA1ZGY0YjJlYzFlMzA4YjM3NDYwM2E5ZWFjZTQ1OTMyZmRjMjk5OWU5ZTIyNjFkZThiMTA5OTQ3M2QxZmM3NDFjNDZjMzM0MDIzYWE1ZDkzNTlmN2VmOTY2MjQwYWFmN2UzMTBkODc0YjU5NTZmZDE4MGZiMTEyNGNiZWI5MWNmODYwMjBjNzhhMWEwMzM1ZjVmMDI5YmQzNDY3N2RkMmQ1MDc2NDgyZjNiM2U4NTgwOGY1NDk5OGY0YmFjOGI4ZmE5NjhmZWJjZWVjMzQ1OGZiODgyZmMwNTMwMjcxZjE0NGZiM2UyYWI4YzFhNjI4OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMwZGI3M2Q0NmI1MTg2NjljNDViODFiYzY3YjkzYmVkM2QwODY0ZjdlOWU4ZTc4OSI6Ijc1MGJjMWQyZjkxZDc4NmJiMWU2MjExOTJhMzc2ZjU1MjUzOGJhOGMwN2Q1MGQ5ZTEwYjkzNDVmMzFiM2U1ZjlkOGFkN2M3MTljMDNkODU0OGEzYjE4NGI3NDFjZDA2YzQ5ZDdmYjZmZTgwMjU4ZDYwYzAxYzI5ODdjMzM3YzgyMzIxMWNlZTdjMWNmODIwNzcyNjY4ODliYzc3Njc0NzVlMGVlYWJiMmVmNmI1YTFkZTIwODlhYWVmNzc1NjVkNDBhMWMyYzQ3MGE4ODBjOTExZTc3YTE4NmVhY2NhMTczYjI1OTcwNTc0ZjA1YzBiZGNkNTQyOGIzOWI1MmFmN2YiOiI1MDY5ZTJkMmY4MmIzNmRlOGMyZWIxNzFmMzAxMTM1ZCI6ImVmNzgxZGNlNTU2Yjg0MTg4YWRlZTJiNmUxZDY0ZGFjMjc1MWRkODU5MmFiYzZjNzJhZjdiOTk4ZGZhZTQwY2JlNjkyYTRjYWUwYjRhYTJjOTU5MTBlMjcwNjAwNTUwZmNhMWU4MzY0MGM2NGVmYjFlYjBlMGE5MGE2ZmM0NzVhZTFkYjg2M2E2NGNlOWNjMjcyZjAwYWJhYzhhNjNkNDhkZDlmMWMwYTVmNDU4NjIyNGJlZmVkMDViZTRhZmFlNWJkOTIyNDk4MzNkNTY1Y2M2YjY1ZmQ4OTU1Y2I4YTdkN2JkOWY0YjZhMjI5ZTM4ODEyMTI4NzFhNTJjMTVkMWMiOjExMjoiYTUxMDBjNWU5YTE2YWVkZjBlMWJkODYwNDMzNSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMDlmMDQ3OGYxYTYyY2I1NGM1NTExODFjYmQ0ZDI0Yjc5NmU5NWYzYTA2YjZjYjkiOiI2NmRiN2NjOTdiNGE4MjY2YzBhMjIyOGU4MDI4ZTM4ZDg5ODZlNzlmY2JjYzNjYWZmMzA1MGZkZDJkZTg3YjdmZjdhNjg5NWI5ODhiMGJkYjdmY2M0ZDZlMmQ1MzhkY2ZhYWQ0M2NlMmY5OGI2ZDMyNTAwZjVhNmU2MTgzZDg0Y2IxOTE1N2E2OTljZGRlMTI2NmQ2ZDc1YTI1MWVlMWEyZWI5N2JmZTY0MDVkNTBiZTJiMTdhNThiYTZlYWZhZWUwYTAyM2EyOGQ1NjhmZDFjOTE0ZjA2MDQxYTQ5Yzc5YjlkZjllZmU2M2Q1Njg4M2NiYmJlYWJhODA5MjczZDJlIjoiN2JlMTc2OGY2ZmZiMzE1OTllYjZkZWY3ZDFkYWE0MWMiOiI5Y2I0OTM1NzUzNmViZTA4N2UxNDc1YTUzODc5MDdhOWU1MWFkMTU1MDY5N2YxM2M2Y2MwNDM4NGVjOGE2N2RlYTEzMzc2YmRkNWUyNmI4MTVjODRhNzhmOTIxYjUwNmI5ZTIwODZkZTUwZjg0OTE4NWYwNWJhN2MzMDQxZTQ5ZTQyYzA2NzNkZjg1NmRhMTA5YTc4YjhlMGNlOTE4YzI1ODM2ZjdlNzgxZTZiMTYxNjhlNGU1OTc2ZDI3ZWJjODNmMjBiN2JmNGJlYWRlY2I5YjRmMTdhN2EwZDNhM2RiMjdmYzY1Mjg4YTc1NGI1MDMxYTJmNWExMzk0ODAxZTZlIjoxMTI6IjRkMmFjMDViZmQ0YjU5YjE1YTZmNzBlYTdjZDAiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWJmYTMwYjMxNWU3YjkwODI2MzMzMDE0MGZhMmQ2NmVkNTcxMDQ3ODRhNDNjYzcwIjoiOGVlZWU5ODY1ZTIzZmE1MWRiYmYxOTdmYTQxNzc2YjdlZGJkYjkzODFhMjJjOTM1Mjk5Y2Q5NTlhNDYxOTA3ODhhZTgyZjRlNjQ1YjAzNjJkZjg5YmZjMDAyNDE5NjQ3ODRiYzdlZjcwZjZmOTdlODE2ODdkNTJlNTUyYTMzYWYyMGFlMzRhMzAwNWUwYTdiODVkMDk0MzY4ZDcwN2MzYzRjZDNlZjMxYzBkYWYzY2NhYTE2NzY2MDllZDE5OTMyN2Y0MTM5ZDBjMTIwOTc3ZTZiYWJjZWVkMjg4OTZkMmNiMzEyOTYzMGYzZWUxMzU1NzJkYzM5NDMzMDU3ZTI2YSI6ImI3MDgxYTMwMTBiNTI0MjE4MzkwYmE2ZGQ0NjBhMWVjIjoiOGMxZjQyYjU5MzFkNjlhZTM1MWZjZGU3ZDJiNDEzNmQ0ODk4YTRmYThiYTYyZDU1Y2VmNzIxZGFkZjE5YmVhYWJmOWQxOTAwYmRmMmU1OGVlNTY4YjgwODY4NGVlY2JmN2FhM2M4OTBmNjVjNTRiOTY3Yjk0NDg0YmUwODIxOTNiMmQ4MzkzMDA3Mzg5YWJhYTlkZWJiYjQ5ZDcyN2EyYWMxNmI0ZGFiMmM4ZjI3Njg0MGU5YzY1YTQ3OTc0ZDliMDRmMmU2M2FkZjM4YjZhYWQ3NjNmMGQ3Y2RiMmMzZDU4NjkxYWRkZTZlNTFlMGE4NTA5M2E0YzQ5NDRmNWJmMiI6MTEyOiI0ZGE4NWI4ZWM4NjFkZDhiZTU0Nzg3YmI4M2YxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZjNDcxNTZhNjkzZTU5YTFkZWEwNjE4YzQxNDQxZmU2NjlmYzY1ZGNmYjdkMDcyNiI6IjNlNGYwYTU4NmJhZDUzMmEwOGM4ODYzZWJiYTAxZmQyNTAxNGJhYTkwN2U2MDMyZWU0M2Q0YTdkZmM3YzMxNzE5MTZkY2RmOWZhZWUwNTMxZjI3NTI3ODcyYWU0ZTEyN2I2YjlhYWVlOTNmNWU3NGQwYWIyM2YzODc0YWEwZTI5MTU2NGJjOTdmMTcwODVkZDdkNWViOWE4NWQ5ZjQ0NTc0ZTU5NTI5MjllZGEwODg2M2I2NGM4NWRkMzk1YzkxYjAxZmU1YmVmNjZlM2ZhOGY5ZWU1YmY2MmMyNWQ4MGRjODRmYmUwMDJlY2ZkMjE4NDMwYjI2ZjM1NDlmNzM0YTEiOiJlYTE5MzVlZDAxNDg4M2NjNDI3OTgzZDc5NjJkOTk5MiI6IjBkODViODUxM2JlY2ZlOGM5MWQwZjZmZmI2NWVjMzFmMmNmNDA2YzUxYzBkYTg4ODkzYzQzZDEzMjdmZDhhZDFmNGJhYjJkN2I1ZTI3NDM4ZDY0MzM5NzAzNGE3MmY4NjY2YmY2NDFiNjc4MWJjOTBmNzY0ZGIzODdlYWU2NzIwYjU3MjNkNTEwMTk0NTcwY2NkNzczZTFiM2JlYmZjMzMzY2MwOTlkMDc4NTgzZThkYWM2MGQxNzRkMzMyOTI1YTI0YTQ1MTEwYzhkMmFiZTg5MjRlYTY3N2FjNzRkYjY2ZWE3ODllMjgzOGVmYzk2Yzc4YmNlYWE2MjM2YzBhNjciOjEwNDoiODc4MWIwNDVhNTA5YzQyMzliOWY0NDYyNGUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjVmY2Q3ODBhMDNiYTgwMzQxMDgxZWY5NmI0NDBjMGU0MzQ4YWZkZTRkNjBjMWQ1IjoiNjMxNmYzYmViMzJmNmYzYmY4ZjJmZjZhMmMxNjBiNDMyYmFmZDMwMzZkM2VlZmExZTRlYzIwNGYyNDg5MmUzN2RjNGQ3NWM3Y2U5YTI0YjVjNDlmYjRkZjkwMWYzNWVmOWQ1OTU1ZjdkYzI4OWM1NmNiNzQ3NTNmNGQ2YjI5ODIyNjdkNTI2OWQxMjIzN2UyMTIwMmE2NTA2MTg0OWM2NWU5MGU2NzAyZGRhMDNhMzVhY2UzYTNhMDk4ZDE2YjRiZmJiODViNzIzMjQwNGJhZWUzNzc3NmE5YjUxYWY2YjMwNTlhNWYxNzBmNGViZTRlY2YxMTA2MWNhM2MxZjFmMyI6ImFkMjBjY2UwNTZlNzRlYzVkMGE3NmQ2MjgwOTk4ZjE1IjoiMjhmOGZjZjIzYjljMWJhNDBjMTlmZmMxMDkyNjMyZTM1ZjIzNGMxZThiODJiY2Q1MzA5ZDM3YmY4NDlhMmNlNDAxNDEzZDFmMjQyY2YyNTVlZDU5N2Y5YTkzYTFkNmU1MDY3Njk5N2Y5NWFhNjEyZTU4MGQ4ODIzNGE4NmRkYzQwNDI5Mjc0NmYwYjJmNWNmMTVhYmViY2VhNjY1OWY5OThlYzZhMWNiNWE5OTE0ZmVlNWFhMWFhNWQwNGIzYzIwOTE0ZTQ1MDk1ZTQxNDFjZTljMTczNjUzZGQ5MWMzZWJlNGVkNGE5YTI4ZjM5MTVkN2IyZWRiYTM0YzJhNThkOCI6MTA0OiIyYWQ0NTIwZGRjM2I5MDc0MTRkOTM0Y2MxZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0MzgyNTA3ZGRkY2NmMTM4NWZjODMxZGE4OTI0MTQ3NTYzNDE2ZDA2NTZlMTY4ZWMiOiJlNWM1NDMwYjk2MGFhMzVkYzg1NDAyMTVjMjc3MmQ2NjgxMTI3MDg1OWUzM2RkNDQ3NzkwNDc1OWU3ZTVlYjI5ODZhNTJhNGNjYzlmNTkyZTYxNDE0N2I1ZWEyZWFkNjYzNmExNWM2NDI2MzM2YjI5OTVkOWEzMWFiMzZkNzY1NzhjMzU0MGJjNjY5Mzg0MmE0YmMwNDkxYzc5NjNlZTljZGEyMzE3OTUxY2Y5MzI0NGJkMzBiY2RmZWM2OWE0NzY3MDA0NjM2ZmU3ZDFiZTczMDBjMzVlODA2MjdiYWI5MjM2YTA3NWE4MDNlOWUxMDgwYjkxNTkwNjBjNjQzYTc4IjoiYTM3Njg3YzljZDRiZGMxZWFkNGU2YjhmNzhiZWU3ZjUiOiJmYTlhZTMwNTA5Y2JiNmZlMTA0YzIxNDgwYWU3YjhlYzlmMTJmMWFmYjE3MzIwZDc3Yjc3Y2RmMzJjZThjNWEzZjdmOTI3ZTUwMTExOGM3Y2NkNjk3NWI3OTIyNTA1OWNlZjUzMGE0ZmNiMGE5NzE5ZjVlMmQzYmViZTdiYjZlYzA4NTVlNDk1YTMxZTUwNzVlYjUwYWE2YzEyMjdlNDhiMDNlM2ZkZjc4MDA4NGFjNDkxMmViM2E1Njc0Y2NhOWRkNmFjMDM3MzY2YjIzMGFlNjMxYTg1ODBkMmQxMTc5NDJkZWU1ZDVkZGJiYjIyMzNhZmVjYTUzMjg5Y2M0ZjY4IjoxMDQ6IjQyMjE4MThkNGJlNDUzMDZlMjA1ODEzNzg5IjoiYjViMzY3MTliYzRkMTNhNWZiZjM3MTg4ZWE4MTRjZGYzYzk3YTQzMDc4NDMzMDU0MDMyNWM4OTk1NzBlMTU0ODIzMDBiYzgyYzViODE2MzA3NGUwNTQ0YzUxMzJlM2NlOTNiYmE2OGJkN2E4ZDJkYjgxZDE0MzFiNDI0YjY5N2MxMTU4YzRkNzA2MjU2NjZkNWZmOTkxNDVjYTM0ODU2ODE1YzkwNWI1YTBmZDk1ODA2ZGY1NmI5Y2Q1YjM4NGJkYTNlMzk0YjQwOTA0OGViMTAzNzE0NGNjMDcxNTM5YzAyMzk3ZTkzMWRhMjhhNDNjYzM1NGQ1ODQ2NDNhZmQ0ZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2E2NmRiMzQ1MGRhYzlhMWU2M2QyNjM5ZjM0YzVjNmEzZmJmYjNjOGU4MjMwMTk5IjoiNjQ2M2E3ZWIyNDk2Mzc5YmM4YTU2MzU1NDE1MjU5MjZhNmY5ZmE3MThlMzM4MjIxOTUyMTE4YWU0Y2YwM2E4NWYyMDc0YjRlYmFmMTA4YjljNzI1ODA5YmUxZTYzMDljM2E0NDRiNjZmMTIyODZmNmVhOWQ4MGMzNDEzNzA2YjIzNGIyNjM3MmU4ZjAwNzgzODE5MzE0YTk5NGM5ZTNlY2Y2YWJkZDI1NWNiZmUwMWIzODY1ZTEzOTBhMzVkY2QyODUzYTNkOTllZDk5MmU4MmVjNjdiYTI0NWYwODhjYjA5MGFkYWRlNzRiZGJjOGExYmFkMGYwNmNiZWE3NjZhNiI6IjIxZjgzNDE1MjliMjEwYWRlN2YyYzYwNTVlMTMwMDdhIjoiMTY5OWJjOGMxOThhYjAzZTIyZDliYzRmMzY4MmFhZDMzNWM2ZTM1ZjNmNjE2YmI2OTc2OWE5ZDVhMjAyNTExNzk3ZTc3MGFlMGQ4ZDg1MjhlZjdiMmJiMjViNDI5NGQ0NzQyN2I0M2YwNTgwZmE3MWQ5M2ZkZWY2NjdmNGY0MTk2Zjg0ZTQxYzBiMTk3ODc5NmQwZGU3NGE5NDQyMGZiODU3MWJmZjM5MTM3ZmEyMzFjNTcyYjMxYmU5YWU3MjMzODI4OGJlZjVmOGM5OTIxMjFkYzkxODUzODU1MWYzNDZlMjc5YTkwNDdkZjE0ZWM5ZmMwZmQzOTljZDNiZDhkOCI6OTY6IjRhZjAyYjgxYjI2MTA0ZDFkMzFlMjk1YSI6IjUzZmU2YTM0ZDI4MGYyYzk2ZDFhZTJiMmU4YmFmNmFiZDY3Y2VkZjdkMjE0MzEyZjc1ZGQ0YTFiZWMyOGE2NDFkZGEzZTcxYWEzOTg3MjZiMmIwYjFmNTE1ZTFmNDI1OWVlOTdhY2FmMTdmMTIyZGI5ZWM3ODE0YzJkZTZhODhkMzZjM2FjMTA2Mzk2YWQwM2QzMzdjMmNkMmQyYjliNGI3MTcwZTIzYTU4NDhjYTdlYTEyOTgzOGY5NjdkZmRmZTgzYjQ1ZmYyYTliZTY5OWJmYjIzNDYxMTU0NjVkNTlmMDc0ZjA5ZTI0ZDhmY2JkOWVjZTAwMThjOTI3NzZjNDMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFmNWM4MThmMjRkMjAxZjlmYjIzZmNjYTIxMWIwNTQ1ZWVlNWM1YzliNDQwODEwZCI6IjlhNzU2NjgxN2EwNmY3OTJlOTZhNmEyYmE4ZTBhMDFmODgzN2UyZGUwNjc5NmU2OGIwNzgyY2M1NGVkMGIwNGZjNWUyNGExYWQzN2Q1ZmZiMDM1NTQ4Yjg4MmQ4ODE1MGU4OTkxNWI4OWY1N2NkZTJiZjNjNDNhYjlkYWUzNTY5MjdkYWVmNmJkNjFjYzllZGQ1ZTFiN2E0YWJlYTJmNzEzMTM2NzdmMWIyZmRmM2Q4ZDRhN2U5ODE0ZWE4MjBmYmMzZTVjODM5NDdkYjk2MTgzOWE5ODVhNTdjZWQ3ZjVlNGExZWZmZmNmZDE3YTJjODA2ZDRjZGMxZTc5MTYyZGEiOiIzYTE2MzA2N2JkZDkwZmNlMDQwNmQxYzE5OGE4ODc3MSI6ImE1ZTk0ZTIzM2QwNGZlMGM0YjZjNDY4NGIzODY5MDJmZTA1MDk2NzAyMjM3ZGZiZTc2ZjczYmVmYTY5YjZmMzAzOTRjZjlmZTMzNTg5OTc5NDJkZjY1ODQyNzQ4ZmI0ZjA3NWEzZGMwNmUxNDdiZDhkNjdmYzQzNzExMTNhNGQ3NWM3MDIxOTI1N2M2NTBhNmYzOGExMzY2NTllMjBhMWNmM2ExMTkzOTc4MzVjMzA0ZTBmYjJhMzNhYTNjMzAxOTE3NWM4NjQ2MzA0M2Q1ZWRjNjk5Mjg3NGY2MWU4MWNkMGQyNmFmOGI2MmNmOGM4NjI2OTAxZDRmMTZkODQyMzYiOjk2OiJiMTI0ZWVhOTI3ZTJhNjJhODc1NDk0YTEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5YTMwMWY3ZWRmODNkYTYzYmNmMzcyMTZhM2EzM2Q3NjEzMzMxYzMyMTAyODFkZDciOiJlMDljYzg1NDNkYjc4MDQ4NzAwMDQ3MDZhMjZlOTRiNDU3YzEyNWJkNjQ4YjU4MWExOTZmOTYyZjJhZThmYTU1ZDliYzY2NTMwYmE1MDIwZTIyZDI4MjA4MGI0NzIwZGM5YTIwOTZhMTFjMGZjYzNkOWE2N2NkMWNmOTVjZDdjZDI0MTdiYTMwOGM3NjFlNjRiZTI0MzQ3YTE0Yzk0MjM0NDcwOTRhNWM3MmEwMDQzYzI4OGIzNWU3NTNiYTBhYTc0OGYyMDgzODEyNDlmYjFjOGQxOTVhNDcyMTkyNDA0YjZjODE3MjY2M2VlNGI0ZDRlY2ZhNDI2ZTFmYjAwM2YyIjoiZDczYTU0NmIwZmEzMDc2MzNhYzg5NTA2ZmE4NjEzOGIiOiJmNTdmZTU0OGNmNGE1NTFhMjE2ZmZiMjRhMWRjZjFiNzljOTVmOWFiZjA2NDQzZmQ1OGFmMDQyZDI4N2MyMTY1ZGIzNzNjODJhOTQxNzJkYjUxNzg0MGYyMmU0NWU5NjZlM2VhZDkxY2UxZGRhZDEzMmJjYjg0NGU0MDZlODRiNzZhMGI1YjBlZTIzMDY0YjY2YTIyOWYzMmEyZDNiOWM3MTEwM2YwMjBjNGJhNTdmYzBmMDYwOGI3MTE0OTE0Y2YyYWRhMGM1YTliYzRhZmJmYTljZTVkYTMyMGYzNGJlYjIyMTFkNTY5YTE0MmY1M2JmZDI2MmY2ZDE0OWM0MzUwIjo5NjoiZjUzNmEzYjhjMzMzYjFhYTUyMGQ2NDQwIjoiMTI0YTMyN2E4YzIyYjc2NTI4ODZkYWMyYzg0Yjg5OTdjYThhNmY2MWM5YmE5YzA5NGI1YWVhNDFlYWEwNTBhNmRmNmNiZjI4MDI1OWU1NDY2MDcxYmNmYTUzYjRlYmM3NmMzY2M0YWZjOGMwMzg1MTg5YTUzODI5MzNhYTU3Yzg5YWFiNzhkY2E4NDMzMWUwZmU4ZjBhYWIzYTc4NTdkM2UxM2YwOGRjZDkwZWM1ZjA2ODRmODIwODhlZjhlYjdmZDY3ZTc1ZGU0M2I2N2FmYzNhMGJlYjQ1OGY1ZWJkNjFiMmM3NzllNmM1MzlkNzk1YzY2N2JiN2RjYzJiNzYyZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmQ0MGU4MjI2ZmQxM2NiOTViYTUwYjdjZGYwZjA3ZjdhYjcwMzdjZjg3MDVjYTUwIjoiNzVhYTdkZjVjM2M0NDNkNDhlZTk5ODA2NGI2ZmQxMTJjMjBkMmQ5MGM5OGUwMGQwMjVlZjA4ZDFhZDM1OTUzODViZTk5ZGU0N2ZhNjI3NTQ5YjgyN2M0OGJjNzllYjFkY2FmMmYxYmU5NWE0NWY3ZTU1NzU1Yjk1MmFlZTVhZTA3NDhlNjhiZWUxYjAxNGE2MjhmM2Y3ZGM4OGUwZWJhYzFkMWQwMGUyNjgzNTVmNTEwMTgzOGNlMTI1YzU3MDAzYWViYzAyYTFjOWQ2YWUyY2Q2ZTI1OTJmNTJjMGJlMzhjZWYyMWE2ODBhZTM1YzkwOWNhYjk5ZGNlOTgzN2FlZiI6IjM0MDZlNzBjYmUxNmIwNDdmZWRhYTUzN2ViODkyMjc5IjoiMzkwYjE4ZDIyZDVlY2MwYjVhNTI0YWU5YWZhYzZmZDk0OGFjNzJkMTM2MDc3NWE4OGIzODVhYTg2MmNjZThhMjdmM2U0YjQyMGU1MzliZWM2ZTg5NThmOGMxYjU0MTZjMzEzZmEwYTE2ZjkyMTE0OWEyYmZlYWUyOWFkMjM0ODk0OWIyOWE3Mzk3MGU1YmU5MjVlYzBjMzUyMThiODJhMDIwY2YyMWJiNjhjNjkzMWY4NmIyOWUwMWI4NTUwMGE3M2YzZWU3ZWI3OGRhNjAwNzhmNDI1NTBkYTgzYjJlMzAxZDE1MWQ2OWIyNzNhMDUwZjg5ZTU3ZGZjNDc4N2NiZiI6NjQ6IjY5ZTA2YzcyZWFkNjk1MDEiOiI2ZThkNjYxY2QzMjBiMWIzOWY4NDk0ODM2ZmNmNzM4YjBhYjgyODczZDM5MDNjOWVlMzRkNzRmNjE4YWVhMzYwOTk5MjZiNTRjMTU4OTIyNWVjOWE5ZDQ4Y2E1MzY1N2YxMGQ5Mjg5YzMxZjE5OWMzN2M0OGZiOWNiZTFjZGExZTc5MGFhZWVkZjczODcxZjY2YTM3NjE2MjVjY2EzYzRmNjQyYmM0ZjI1NDg2OGY2YjkwM2U4MGNlZWViMDE1NTY5YWNlMjMzNzY1NjdkMzcxMmFkMTZkMTI4OWRjNTA0ZjE1ZDliMjc1MWIyM2U3NzIyYjllNmQ4ZTA4Mjc4NTlmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhODVhYjg3NTYzYjgwOWIwMTcyNTc2NGQ2NGJhNGNjNmExNDNlMmUwMzYyZjBjNTIiOiJlZjQzNjI5NzIxYjUwYmQzNjU2YjdhZTMxYjZlNGI0YmExY2YyYzcyZWQwNDYwZWU3ZDlmYjQxNjYzMWRkYzU5N2U1ZjlhZWJiY2Y0NDQyYjk1Y2M0NmUyODQ3NmE0NjRkZDg3Y2FmOWMxYzFkNmM5OWQzZTNlMDU5ZGMyM2Y4ZDJmZTE1NWZmNWU1OWM1MGQ2NDBiYzA1MmM2MmFkZWUzYWExMjk1YjM4NzMyZTM0NThmMzc5ZTk4YThkYmRmZWQwNGMyMmE1NzYxNzkyZTg3ZmE2N2VjYmNiZjNiOTBlYjFiY2QxZDNmNDllNjAxMzI0NTJmMjhhZmVjZTgzZTkwIjoiOWY5OTFmZjE2YTNlM2ViMTY0YTRmODE5YzlmMTgyMWEiOiJkZjI4OTUxMWY3OGQ4ZmEyNTA1YWZjNGM3MWFiMWQ3YzMxYThkMTVkMWU1ZmNiYjI5ZDcwZjBlNTZmODljNGQ3YjMwZjFiM2I0NzQ1YjVkMmNjN2FmMzRmYjRjOTU0NjEzNzJiZjUxNmVjMTkyYjQwMGRjOGZkYjBjYTlmZTFmMzBmNTMyMGQwZmFkZjIwMTU1Y2ZjZGRjZjA5MjMzYzZmNTkxYzFjODk5MTdlMzhhMDAzZjU2Yjk0YTFlMjQyOWQxZjJiNjI5N2RiNzkwZDdkY2U4NGQ5ZmExM2QyZDg2YTBlNGQxMDBlMTU0MDUwYjA3MTc4YmVlNGNkZjE4MTI2Ijo2NDoiZGM0Yzk3ZmU4Y2M1MzM1MCI6ImZmMGU1MzFjNzM0NGYwNDI1ZDYyZDVmYmVkZjRiYzhkM2Q1Y2M4MDY0N2U2N2I4NTJjMWE1OGFkMTUxNmQzNzZkOTU0Y2I4ZGRhNzM5ZjZhNGRmM2NmMTUwN2U1OTY5NjYxMGJjYjZiMzQzNDBkNjMxMzAyOGUwMGQ3MTk3ODQ1ZDM5MmU3MzMzMWFhZjE2OGI0NzRhNjczNjRkOGY5ZGFiNzQwNTA5ZmFiZjkyYWY3NTA0NWYwYWZhYmMxYjU4MjkyNjRkMTM4ODIwOTUyYmJjNDg0ZDExMDBkMDU4YTRkZTMyYjRlY2U4Mjc0NmIyYjRhODVmYjI5OTNkNGFkZDgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY0ZjFlMDNhYmI5MjdmZmQwYjA4MWI5ZGNlODNhNTZhNmRkNDE5YTYzMTNhYzM0ZiI6IjBlNzA0MjE0OTliYzRiY2IzODUxYWZhMzRjZGY1YmUzNzQ3MjI4MTVhYmRkOWJjZWU1ZjMzMmRiZTg5MGJkYzFjMDIxMGFiMTA2NjdlNWJiOTI0YmYzYzExMjBlMjVhMGMwNzRkYTYyMDA3NmYxNDM5NDA5ODllMjIyMDg2ZDFiMzRhMTIwMGQwOWFlYTFmODEwZWY2ZGU3ZDg1MjBjNjVlZWY5NTM5ZmRlNWE2NDIyNjA2YzU4OGZjZTYyNjRlNWY5MWY5MzRlZGU2Mzk3YzRiMzA3ZDJkN2UwN2E1MThmY2U1NzdhNDI3ZmE5MjkyM2NiYmE2MzdhZTQ5NWFmYWQiOiJkMWUyOWJiNTFhM2M0ZTg3MWQxNWJiMGNkODYyNTdlMiI6ImFlMjkxMWNkYWFhZDExOTRjNWQ3ODY4YjZkOGYzMDI4NzEwNWRmMTMyZWIwY2VjY2ExNGI2ZTIzZWM3YWMzOWNjMDFkYTFjNTY3YTAyMTljY2E3YjkwMmNjMmU4MjVlMzBmOTUyNGE0NzNlYjZlMWQ0ZDFiZWZmNWFiNGYyOTEwM2IyYzc1MjJhMzNkZDMzMTgyZmE5NTVjNGYwOWE3NTE5NmIxMDcyYTZmMDM0MGZjNTVhODAyZDI5YzcwNjdmMDUyMTljMjE4NTdlYmZmODlhZGExMWY2NDhjMWYyOGRmYmZkYWFiNTYwMjhmMDU1MDlkZTE3ZTIzODE0NTdlYmMiOjY0OiI0NGY3NjA3ODdmN2JjM2MwIjoiMjE5OWZhNTA1MTQ2MWI2NzU4MTQyOWFiMTlkZTJjY2I1MGI4YjAyZTEyYzBlMWQ4MWE4YTE0OTI5Zjg0ZTA5ZDk3MTViN2QxOThlNzdlNjMyZGU0YWYxYzA4YzUwNDEyNzYyMDRhN2VkNzY2NDYzODVlMjg4ZTk2ZTFhNGIwYjBmMmIxYTlkZjdmMDg5MmJlYWVhM2NiNThkOTYzMjcyMDE1OGY2ZGFhNGNiYmZjMGViZGM1NmZmNmE1MTc1NzY4ZmYyYWJkMjRjYjc2NjliYzNmZTQwZjhhYmE3ODY5ZDJkZDdkYWM4NmI2ZWJjNGU0Y2UyNjFlZGJlYzg4ZGIxNyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzNlZmUyMDQzM2M2YTFhZDI2MWExZmVkNDk0OTYxNzQ5ZTViZjlkMzU4MDliNTlkIjoiY2ZiZWI2MWJlNTBkZWYyNWY1MTMzNDY0OThmNzU5ODRiZmU3OTdhOGFkNTZiZTM0ZjI0NjFlMmQ2NzNmNmNlMTRlNzQ3OWE1OTc3NzI2N2I3NWRhZGM2Yjk1MjI1OTllYmU1ZDdiMDc5NDk1YTU4Y2ExODdlYzQ3Nzk2ZjZlZThjMzIyMjc4YWQ3NDUxYjAzOGM5Mzg5MjhhZGNmZjYxMDVhOGVhMzc4MGFlZGM0NWI2YTMzMjNkM2FlNmZiY2U1ZGE0ZmI1OWNhNWVjMGExNmE3MDQ5NGMzYzQ4NTk2NzIzNDg1MzI1MDVlNDRmOTE1ZTBiOWI4YTI5NmVmNTIyNSI6ImRjOTQ2NzNiMGM0OWM2ZDNiNDYxMWUyNzgyMTJjNzQ4IjoiOTE5ZjczOTdhNmQwMzgzNjQyM2I3Y2FjNTMxNzdmY2ZiZTQ1N2Q0YWE0MzQ4NjQ2ZjY0NmFhZTFiYzVhMTU1NjhjZGI4Yzk2ZmFiZWYyNzhhY2UyNDhhY2E1MzExMTBhNGY0ZjllOGFiMGMzMjUyNWFkODE2YWUzZmFjZjAzMTc1MjMyZGM4NGFkZGNkNjA2NWY5Y2MxZjUxMzk2NmI2M2ZkMjdlOTFhMDlmMTkyMWI5NWQ2YmQ4ZjA4ZjFkYmNlMDczYmNmODI3ODQ3Zjc3NDUxNGI0NzhiOWQ3ZmI1NDI2ODQ3ZGQ0ZGVlNmYzOWI1NzY4YzFmYjcyOWIzMmQwMyI6MzI6ImM1MDk4MzQwIjoiYzVlNDdkOGM2MGIwNGRmMTk3NGI2OGExNDA5NWQ5YmM4NDI5YTQxM2QyMTk2MGIxNWJhZTRmZDczNTZiZjc4NzJlMGRhMGExYTM4NWNhMjk4MmQzYWEzMTgyZTYzZWE0YmI4Y2EwMTQxMGNkNGU3MWRkYWQzNGFhMWYxMmMxMzg3OTAyYjNkNTY2MzRmODljNjE5YTJlNjc1NjY0OGFiM2JmOTBlOWJjOTQ1YWZjOTE0MGViOTM1YjYzM2JhZTk2YmIwNjdlOWVlNDIxNjk3YmNmODBiMTRiMWI4OGRiZjEzZTAxMGI0NzJhN2NhNTQxMWRiMzY4NDhiOWM3YTM3ZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2VkNWRhZGVmYTBmNmQxNGZlZGQxYTNjZGJhYjEwOWY2NjYwODk2YTk1MmFjNWFiIjoiYWVmNjE3ZjY5NzI0ZTAyMDMwOWVjMzlkOTU4NzUyMGVmZGE2OGE4ZTMwMzY4NmMzYTQxZWY3MDBjYmEwNWI3YzZlNDNlOTVhYWRiMWE1NjZmNjE2NTBjODc4NDU4MzVlNzg5ZWIyMzY2OTQxZTNiZmVmNmQ5ODQ2YWYwZTBkYmM0MzI0OTExN2FkNmYyOTliYmM0MDY2OWFjMzgzY2RmNzkyODlhZGE2Y2NkOGNjZmUzMjlhMGRjNmEzOGVlYTFhOTk1NTA0NTcxMDJkMTBmNjQxY2RhNTBjMjFmNTMzYjFmOTgxNjYzZjc0YTBhN2M2NTdjMDRkOWZjNjY5NmZmNCI6IjU1M2ExNGYxZTE2MTlmOWQ3YmQwN2NkODIzOTYxZjI1IjoiZWI4ZWE4MWQzZTMyOGExMTEzOTQyY2Q1ZWZkMGYyYjVlN2YwODg3OTFjOGZjMDU2OTBhMzQ1ODQxMDFjNGQ0OTM2MjhlZTdkMDA5OWEyODY1YWMxOTRiOTEyNGMzZmI5MjRkZTBjNDQyOGQwYTFjMjZlYTNhZDlhMGJjODkxODdhMTY2NzNlM2I2ZjdlMzcwZGZiMmRjMjZlOGE1NmE5Y2Y5MWY5YzIwODhjMDIwYTc2NmVmZTBkMGM5MTY4OTc0M2E2MDNmMmNkMWUzMDBhNmE4NDgyOGIzYjUxNWE0YjlhMDZlNmJiMjA0NTdiZjEyNGNkNmNlNGFjOGI4M2Q1MSI6MzI6ImRjNDEzYzRjIjoiYmMxZjM0OTkxYTQ4YWFiYjBmZWE1MTNmNzkwZjBkMjIzZTlmZWFjNGM5OWZhMWU4NDI3ZjAxYWI4YjRiMjgyN2NmYWYyMzkzNDJkZTM2MDUxYTg0NmFmMDMwNmEzZjgyZTdhZWQ5OGRkMDQxNmZiMDc4YmM3ZjNiNjE3YjAwY2ViMmNlYTRkZGFmYzIyZGQwMjJlZmE4MzAzZTk4MDQ1MTBlMGU4ODgwNjVkODQyNzM0NTE1NmQ4MjNmNzk2Zjc0MTMwYzA2ZGI5Zjk5MzQ0MzU1NTJiNGZlZmQwNTE5NTNlMjBlY2JhM2E0NTE0YWMxMjFkN2QyMDk3ZDU5NzQzOSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmQ5N2U4YmZmMzkyM2E3Nzg1MDRmYjkxN2RiYzE0MjhhMTMyODU4NzA0NzY5N2Q5IjoiZGMxYTgxZWZkNTFlOTY3NzY3ZjViZGQ3ZTJlNDI1NzMyYzFkMjg0NTFmMmJmNWJkZjNmNWE2NDkyMjc5MzMwNTk0ZDM2MGRkOGExOTNlNWRiZGUxYmU0OWJmMTQzYTM1YzM4YmNkMDU5Zjc2MmFkYTY1YzUxMTllMDk3ZjA5NzY4OTEzNDdmNGQ4MjliMDg3YmQ3MmRhYTM0OTRiMzQ0Y2JkMzM3MGM0NDU5Y2EyNDNiZDU3YWVkYTRjYjg2Y2RkMGJmMjc0ZjA3ODMwY2RiZjVlNWJlNGViOWI3NDJkZGZmZWY4YWEzNTYyNmQyYjllYTBhMjlkM2MzZDA1OGIyOCI6IjBjMjhkYzRjZDUzNzI1MDkxYzJmYjY4YTQ3NmMyZTQwIjoiZjM5MzJmNWU4MmQ3NWExZTNlYmExNTkxYzE3NzY5ZTFhNDU4MTljY2YwNTdjMzFlNzZmYTgxMGI5MzY3ODc2NmQyNTkwNWU4NTk3NzVjMjQ0ZTk2YmNhZmJjNzVjNGEyZDk1ZTdkMDI4NjhjY2IyZjY1ZTQ5Mjc2ZjBiNjQ1YWM4Y2Y2ZTM3NTg0MDIzMDRhM2MyNWNlMmRlMGE0OWY0MDFiMWFjYWRhZmY4YjU3NTg5YjQ1Y2M3OTEzMGRkYzgzODdmNDFjYzM4M2UzM2VmMzhlZWMwMTkxNTIwNTFjNzU2MTk4ZDZmNzgyY2NmNTYyOTdiOWZlOTQ0MjY5YTY1YSI6MzI6ImU2ZDZkZjdhIjoiMzkzMjc4MzZlOWQ4Y2ZiNTkzOTdhZGNmMDQ1YTg1NjQ0YzUyYzM1NjMyOTA3OTU4MTFmMjYzNTBjOGJjZThmNTVjYTc3OWNiY2QxNTQ3OWVmZDgxNDRiOGEzOWVmNjExMTUzOTU1YzcwYmYzYTdkYTlkNGQ5NDRjMjQwN2EwZDczNTc4NGZjYjY4ZGUxMDgzZWViZjY5NDBlYmM5Y2Y5MmY5ZjEzOWMwMTQwNGI1MDNmZjY0ZTYxMTI2YTk0ZTg4MTM1MTQ3MzUwNzg4NDM1NzA0MGZkMzI3MTRiODcyYzI1NDM0OTA3MTA2OTY0NGUyYmQ2NDI5MDU1MjFiOTQ0ZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJjNzhlMjk5NzFlOTBhMDFiYjY1OTczZjgxMjYwYjkzNDRmYTgzNTc1MWY1ZjE0MiI6IiI6ImYxYTIzY2U2ZTJiYzkwODhhNjJjODg3YWJlY2QzMGFlIjoiIjoxMjg6ImQ0ZDVjMjJmOTkzYzhjNjEwMTQ1ZmNiZTRlMDIxNjg3IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGM1ODJkNWI2YTQwZWYwZTQwNDhlYzIwZjAyNjM1NzJkN2NjODI3MDRlMzgwODUxIjoiIjoiZWYyMjFhMWM2NmZkYTE3OTA2MTkwYjdjOTlhYjYwYjgiOiIiOjEyODoiNjMyN2RjYjQ2ZmZiM2QwZmQ4ZmJmM2QyODQ4YThmMDEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzYTU4YWJhZGQyOWU5NDZlMjNjYTllYjA5YWYwNTk5MTNkNTM5NDk3MWJkYTZhNGYiOiIiOiI3YzI5YjMxOTZkNDRkZjc4ZmE1MTRhMTk2N2ZjZDNhNiI6IiI6MTI4OiJmYzEyMzk0NGJiZWE2YzUwNzVhNWY5ODdhZWQ5Y2Y5OSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwNGJkZGU0YzM1YzM4NTc4MzcxNWQ4YTg4MzY0MDg1MWI4NjBjZTBlODQzNmVjMTkiOiIiOiI3ODNmOWEzYzM2YjZkMGM5ZmQ1N2MxNTEwNTMxNjUzNSI6IiI6MTIwOiIyM2UyMWE4MDNjYWM1MjM3Nzc3MDE0Njg2NTY0ZjIiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YmE1ZmJhMGMyMmZiZTEwYzJkMTY5MGM1ZDk5OTM4NTIyZGU5YzUxODY3MjFiYWMiOiIiOiIyYWNjMjA3MzA4OWEzNGQ0NjUxZWVlMzlhMjYyZThhZSI6IiI6MTIwOiI3YWM3NDJjODU5YTAyYTU0M2I1MDQ2NGM2NmRjZjUiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMTI4OTBiMGE4ODE5ZmFhNWE4ZTBlNDg3ZjdmMDY0YWY0MmZhNmQ1NTE5ZDAwOWYiOiIiOiJjOTM3NjE1Njc1NzM4ZjRiMzIyN2M3OTk4MzNkMWU2MSI6IiI6MTIwOiI4ODMwMGJkNjViMTJkY2IzNDFmMWY2ZDhhMTU1ODQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTE4NzhmMzYzMDI5OGE4MTI5N2Y0YTIxNTE0ZmVhNjM3ZmFhMzgxNWQ0ZjI2ZmFlIjoiIjoiMWY5MzkyMjZmZWFiMDEyZGFiZmMyMTkzNjM3ZDE1YjEiOiIiOjExMjoiZWVkNWZjYjc2MDdjMDM4YjM1NDc0NmQ5MWM1YiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZTU5NmU3NDg0MGE2MDA1NTZhMDZmOTdiMTNiODllMzhmNjdjMTUyZjFhMWI5MzAiOiIiOiJlMjA3NmUxMDUwMDcwZDQ2ODY1OTg4NWVhNzdlODhkMCI6IiI6MTEyOiJiNDU4NmJkYmQ0YjZiODk5NjQ4ZjIzMzNlZWUwIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmQzM2I3YTBlZmFlMzQzMzljYTk4N2I1ZWI4MDc1Mzg1ZmQxMjc2ZTYzY2M4NTMwIjoiIjoiMmQwN2JiODYxNmZjMGJiYjcxNzU1YTFiZDI1NmU3ZmIiOiIiOjExMjoiNmI2MGQ2NDUyMjBjZmRlNDJkODgyOTZhYzE5MyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1Njg1YjEyYTY2MTdkNTU0YzM2YjYyYWY1YjhmZjIyMzljYjNmZmIxZDJjNDBlMTQiOiIiOiI2YzMxMTk0ZGY5OWQwODg4MWZhNWIxZGQzM2I0NWE5MiI6IiI6MTA0OiI2OTQzMTU5M2MzNzZjOWY4MDUyYmYxMDc0NyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMzZhZTAzNzQxMGRhZTlmMDc0MTYwODUxNmQwM2I4NTVjOWMxODUxZGY4YzU0YTQiOiIiOiI3MzU5OTI3NWY4MjM3ZjE0YzRhNTJiMjgzYzA3Mjc1ZCI6IiI6MTA0OiI2ZjcyNDlkMjVjOWYyNzM0MzRjNDcyMDI3NSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFjMTQ0ZjM5ZWJkNjEyNGJhZDg1YzljN2ZiNGY3NWJmZjM4OWVjZTJlODA4NWQ4MyI6IiI6ImQwODcxYmZjMzY5MzI0NWJlNDc4ZTZhMjU3Yzc5ZWZiIjoiIjoxMDQ6IjVhOTlkNTk2MzFkMGUxMmY1OGI3Yjk1Y2NkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYThhNTQxZmYxMWExYjg1NDhlODMyZDllMDE1ZWRlY2NjOTRiODdkYWRjMTU2MDY1IjoiIjoiYzcyYmIzMDBiNjI0YzI3Y2RlZDg2M2ViYTU2ZTc1ODciOiIiOjk2OiJlYTI1MjhlNzQzOWJlMmVkMGEwZDZiMmEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMwZGQ4ZjQwMDMzNWU5YzY4OGUxM2NjMGIxMDA3YmQyMTczNmE2ZDM5NWQxNTJlMiI6IiI6IjI4ODk5NjAxZmE5NWY1MzJiMDMwZjExYmJlYjg3MDExIjoiIjo5NjoiMzU2MjU2Mzg1ODliYjdmNmNjZGIwMjIyIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYjhmNjcyYjA0ZDcwNmQ3ZDQxMjVkNjgzMGZmZjVkMmVjMDY5NTY5YmVhMDUwY2UiOiIiOiIzNzVkNDEzNGU4NjQ5MzY3ZjRkYjliZGIwN2FhODU5NCI6IiI6OTY6IjcwNjEwYmYzMjk2ODNlMTVlY2Y4Yzc5ZiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImJmNzFlNWIxY2Q2ZWIzNjNlY2Q4OWE0OTU4Njc1YTExNjZjMTA3NDllMWZmMWY0NCI6IiI6IjlmNTAyZmI1YWM5MGZmNWY1NjE2ZGQxZmE4MzczODdkIjoiIjo2NDoiYTRiNTEzODEyMmUxMjA5ZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjViOWQxZGZiMjMwM2I2Njg0OGUzNjM3OTNiZGNhMGU1YWRhODU5OWNiMmMwOWUyNCI6IiI6IjJlZTk2Mzg0ZGQyOWY4YTRjNGE2MTAyNTQ5YTAyNmFiIjoiIjo2NDoiM2IzM2ExMDE4OTMzOGMzYiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImEzNWFlMjcxZjcwZWJhY2IyODE3M2IzN2I5MjFmNWFiY2FkMTcxMmExY2Y1ZDVkYiI6IiI6IjhkOTdmMzU0NTY0ZDgxODViNTdmNzcyNzYyNjg1MGEwIjoiIjo2NDoiODEzZDJmOThhNzYwMTMwYyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWJkZDBjYjgyNmQ1ZDI4YzJhYjk3NzdkNWEwYzE1NThlN2M4MjI3YzUzZWQ0YzRmIjoiIjoiZGFmMTM1MDFhNDdlZTczYzAxOTdkOGI3NzRlZWMzOTkiOiIiOjMyOiJhNmQxMDhjMCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODFiNGQ1ZWU0ZTFjYmVlMWQ4OTY2ZmIzOTQ2NDA5ZTZlNjQzMTlhNGI4MzIzMWY1IjoiIjoiYmMyZjkzMjBkNmI2MmVlYTI5ZWJjOWNmN2ZjOWYwNGEiOiIiOjMyOiJhNDdjZGFkZCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTgxMzYyN2QyNmQ1NjhkZmU1YTBmODE4NGNmNTYxZmU0NTVlYjk4Yjk4ODQxZmUwIjoiIjoiODE3MTk5MjU0YTkxMjg4MDQwNWM5NzI5ZDc1ZWQzOTEiOiIiOjMyOiJkODFkOWI0MSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk0ZjE2MGUyMzI1ZGEyMzMwZmJlNGUxNTkxMGQzM2MyMDE0ZjAxYWNlNThlNWIyNCI6IiI6IjgwYTFiOTk3NTA5ODBiZjJiZTg0YTE3MDMyZmMyNzIxIjoiMDY2ZmRkOTgwY2YwNDNhNzMyNDAzZWU1ZjY1YzgyY2E4MWUzZmM4NThhZDNjZmEzNDMwMTRhODQyNmZkMzgwNjc3MGYxMjdlMjA0MWVmYjQyZTMxNTA2Y2U4MzM5MGFjNWQ3NmRlMmZlMTgwNmRmMjRjZTZlNGJiODk0OTcyYTEwN2VmOTllNTFlNGFjZmIwZTMyNWFiMDUzZjk4MjQ1MTRiNTk0MWFiMWVjNTk4ZmJiNTdhNWQxOGVkMzRkNzI5OTJhMTkyMTVkOTE0ZTM0YWQxYTIyMzI2ZTQ5M2QxZmYyZGE3YmMyNzFjOTZhZDNhYjY2ZDBjMzJiZDcxMTI5MyI6MTI4OiJkZDE1M2NmZDdhYTk0NjI4MDY2MGM0NDVmNTg2ZmEyOCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0Nzg1ODQ2ZjdjMDUyNGU3OGYzZWIxMzdmZDQzM2UxODA4YWY2NDU0OWFmNjkxODMiOiIiOiI1MzM0NDc2YTVmYTNmYTUwZGNjNGIxMmY4YWMwMGI1MSI6ImU3MGY4MmQxZTMzNjFhYzVhNWM5YTA4N2U0Nzk4NGQ1NTMzYmEyOTZmOWI3ZTRhMTkyYTRhYjI4YTgzM2NkYmJkNWNlY2UzNDE1Y2Y2ZmJiMmY4MDU1NTYwYjVjMzFjOThkODNkMTM5OTU0ZTFjMDNhNDY0NzM5ZjFlYjVhZDk4MmM0MzcxY2YyMGI4OTg0YmJkOTdkNWY0MGIzMzZmNWU5NmRmM2QyNzJiOTVmNzU0N2JlMTVjM2JjMDViM2NhYWM3ZDA4YzVlYjVkZThiZGQyNDZlNzRmNmNhYTZiZmY3NmVhMDQxNzczMGNlNzJiOTExODY3Zjg4ZmRjZjczYTAiOjEyODoiYzU5MjMxZGRhYWU5OGUwZThkYjZiM2ZlOGY0ZDM0MjciOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0OWIwODVmZTFhOGUxYWU3NjllZDA5ZmM1ODVkMjllYjI0ZDU4OTY4OTk5MmU2YzUiOiIiOiI4OTk4NzhiMDY4NGZiODY1ZDMwMTkwODIxODE3Yjg4YyI6ImY3ODllYWZlM2QwMjgyNmI2MTljYTRmYmNhN2JiMTkxOWU1YzZmN2MzMzgyNGEyZjdmODE1ZGM1MGUzMjk5Nzk3MDVmN2VmNjFlOWFkZjc4OTlkMzRmMWI4ODQwMzg0ZmY2MmVmNmQyOWVlYTM4YzQ1ZDEyYmU5MjQ5YWNhNjlhMDIyMjJjZDc0NGQ4MTk1OGM2ODE2MzA0ZmYwZDgxZDY3MTRhMjAyM2IzZGQ5ZDk0MGRiNWM1MGFmZDg5YzUyNzc0ZDI4ZDZhZmRlMmI2YzY4NDI1YjZhY2JlMzQ2ODI1MzFhMmU1N2UyYjlhNzcyOWIzZThkOTZhNzI5YjE1Y2MiOjEyODoiMmM4NGJmN2E4OTQ3YWI5M2IxMGFlNDA4MjQzYjQ5OTMiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NTg0NzU4ODc2MGVjYjZjYTU0ODc0N2I3NDM5MTRjODlmZWEzNjdhNWNjYjgxYjYiOiIiOiI3ZDhhOWZkMjU0ZTIwNjFjMDFlMzllYjU3NDk1MTkyNCI6ImIwM2M1N2RmZDQ5MTUyNDAxYTIyNTM1N2YxZDZlNTMzZjNhNDIzZTVjZmNlMDdiOGFlN2NhOWRhZjY4NjQ1ZTViZDY3YjNjYTI0MjFlYWM0NDc1MzBiMjdjNmRjNmJkOWM3ZjFiMjI0NDFiOGNjOGM0YWMyNmNlYzJjOWMwZDY2NWEzNWI2NmQ3NzlhMzc3MmQ3MTRmODAyZDZiNjI3Mjk4NDgwOGQwNzQwMzQ0YjZhYmRiNjNlNjI2ZWY0ZTFhYjA0NjlkYTUyMWM3OTA4YjJjOTVhMGZkMDc0MzdjMGU5ZDRkMjQ1MWFlMTg5YWQ2MWZmMTlmNGVmYjQwNTEyN2MiOjEyMDoiZThhYWMxNGI1M2NkYmMyMDI4ZDMzMGZjOGQ5MmE3IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTNhMThhOTZkMmU0NWQyZjYwNzgwZGMzOWNlZTcxNjBlMjhjYjgxMGJmMDk4NThjIjoiIjoiMjZhNGQ2NTk2NjVkZWQzOWI3YTE1ODNkZTc1NmQwYWQiOiI4M2Y4ZDljNTgxNjliNGM2ODAzMjMyMTE5NzA3N2ZmNWM4ZWU0ZWJiNzMyYjA0MDc0OGUxYjU1ZGNmNTMzNzVhZTg2ZmI5NjQ2YTY3MmI1YzViYzgwNWE5MmM0NzVjYmI2ZDBlZDY4OWE1OGFiZGYyMjMwMjUwYTdkM2ZiZDhjZmFiMDc4MzVmYTg1ZTczOGE3Zjc0YmMzZTkzNjE2ZDg0NGIxZWM2MWI3OWYyM2RmZWE2MmUxODE1ZjI5NWQ0M2Y2MWQ3YjU5NTYxMDNiMzFjYTg4YWZiMGIzZDM3ZWI0MmNmNzcyMzJkYmYyMjU4MDY1MjMyOTcxYzM5N2RjYmNiIjoxMjA6ImRjMDM0NTY0ZDRiZTdkZTI0M2ZmMDU5YjVmOTE2MCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YmUzOTA5MTcwZWE3YTJmZjc2ZjlmMjgyNDFkOGNjNDhkZGVhZmE4NTE3YzZmOGMiOiIiOiI4ZGVlN2UyOTM1MGM2MGM1YmNmZWM4OWRhNjYxN2QyZSI6ImY2ZTllN2E3Zjk3MTY3NjBlYjQzMDYwZDVjODAyMzZhMGYxMThiMGY3NTBlYmQ1ZGYwMWZkMmRiYTk1YzU1NmVjZDJlNTRhM2YzMzc3NjczMjFhYmY1NjljODEzN2E4ZTQ4YzViNDQwMzdiYTYyOTUxZTlmOWY3MDllNmU0NTQwYTM2ZDc2OWYzOTQ1ZDAxYTIwYTJlZDE4OTFjNDE1YTE2ZDk1Y2FiN2RkZjliY2ViZjE4ODQyYzgzMDA2NzUwOWEyYTVkNDlhOTY4NDMyNGM0MzNkNTM4MjRkMmY4ZmQzMjZiMTQ5YWYxN2Y0MGU1YmY1ZTQ5MTg1NzM4ZmJhNjAiOjEyMDoiOTQyYjUyMjc3ZTlkYzBhMzBkNzM3ZDAwZjVlNTk3IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWZlNDEzYmFmYzQ3NTNlMTUxMWI1ODBjODMwNDQ5YmVlNTZlMGU1YjlhY2I4NTJjIjoiIjoiZTMwODI5ZjY0ZjNlZGExM2JmYjJhYzU3MmFjZWIzZGUiOiI2Yzc3MmQwOGI0ZDc1MDdlMzU4MDQ1NzJmYTY5N2M2NDZjNzczMDE5NTRjYzVjMTYwOTQxZTQ5ZTIzMDY5N2VkOGMyMzMzOGI5ZjMwYzNlYWQ2OWIxYzFhMjMyOWZmMDI1ZGNkM2MwZDBhOWNjODNmZWU0OTc5NDQ4YWE3MWRkYjlkNTY5YmVkYzhjNDk3YTJhNGFjM2I2MGQwODdkNzg3MmYwYTExMGJmOTA0OTNhZTdkYTAzYjA5NTM3MzQyMjMxNTZjZDJkNmM1NjJlNGE5NzhhNmRkNWNkYjIyOWRkNThkZDRkMGY1MGFjMDE1ZjJmNWU4OWRhYzRhYTI5YTE5IjoxMTI6Ijg3NzM3ODczYjgyNTg2YmIyOWI0MDY5NDZjYWUiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNGJjNDM3OGQ0MjM5MzFmOWIzMjBiYjU3ZGY1ODRjNjQxNDA2YzFkYWE3NDQ4YWQiOiIiOiJlY2E3MGUxMGMwMzU4ODM4YTNmNGE0NWM0YjAxNmNjZCI6IjY4ZDFjMDQ1YzE2MDRlM2MzZGQ0ZjdjNzU0MzI0MGFjYThkYmM1MjY2ZGMxOGM1YTgwNzFlOGIwOWUzNzAwYjdjZjgxOTA0NGIyNzIyZDhkYjkyMDIxZjQyYTBhZmIyOTVkN2IxNmVjZjRlNDcwNGE1MGE1MjdhMmU3MmQ3ZjUzNjE3YzM1OGUzYjdiZTNkN2ZlY2RhNjEyY2U2ODQyZmNmYWE2OGYyZDFiOGE1OWQ4YjgzOTE3NzlmMmZhYjk5ZjgyMDg2MmM5NDAyOWY0NDRhYmU2MjM2N2M1ZGUwYTRiZWNjMzU5NjYwZTRhNTM2NmY3ZDQ4MmJkYzM2MmI4NjYiOjExMjoiMDZmOTVjYTY5YzIyMmE4OTg1ODg3OTI1YjE1ZSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFjZDQ0MTRmZmQyNGU4MzBlMmRjNDk3MjdlZmE1OTJlNDMwYTZhNzUzOTFjZjExMSI6IiI6ImEwOGUzMmFkN2Q2M2Y5NzVkZTMxNGFkMmMwZmExM2ZjIjoiMjBhMjcxZjFmNGM2YmVhOGYxNTg0YWIzOWE3MTc5ZWM0NDg2NTBlMmZmNjdhNzMzOGQxYmM5ZmFiN2Y3M2IyY2U1MjIyY2QwN2RlZDk0N2QxMzVkOWQwNjcwZGMzNjhmMGE0YjUwZWNlODVjYmY2NDE4NzdmOWZlMGFjNmE3ZTZhZmIzMmZkYjFiM2NkMzUzNjBiYjgwY2ZmZmMzNGNmYjk0ZGJjYmVlOWNhNWJlOThhMGNhODQ2Mzk0YTEzNTg2MGZiYTU3YzZmMDEyNWRjYjlmYjhiNjFiZTY4MWFkYTMxYTk5NzYzOGVlMTcyNTI1YzAzZGQxMzE3MTUzNGE5MSI6MTEyOiJjNjg4NDJjYWZjNTAwNzA3OTlmN2M4YWNkNjJhIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWUwZWY5ZWQ1ZTZmMDBhNzIxYTk4OTNlMWYwZDkwNzljNWFhNjY3YTRjZGQyYTUyIjoiIjoiNWYwMTVmZDU1NmU4N2ZmMGQwZGY1ODZmYjQ1MjMwNmQiOiJiODI5ODYxMzVlNDllMDNmNmY4ZjNjZTQwNDhkZWQyZTYzZWUwYzMxZGRjODQ5MjllMDIyZWU4NTYxMTU5MTc5YjNiYjQ0MDNlYmRhZmRmNmJlYWU1MWFjNWJmNGFiZWQ0ZGJjMjUxNDMzNDE3ZWNlMzIyOGIyNjBlY2E1MTM0ZTUzOTBjYmE0OWEwYjZmY2JiYmFiYjA4NTM3ODM3NGU0ZTY3MWQ5YmEyNjUyOThlOTg2NGJmY2UyNTY4ODQyNDdjMzZmOWJkZGNlYjc5YjZhM2U3MDBjYjNkZDQwMDg4YmE3YmI2YWI2YWExMWI2YmUyNjFhN2U1MzQ4ZjRhN2QxIjoxMDQ6ImVjOWE3OWE4OGExNjRlMWE2MjUzZDgzMTJlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjliYzhmMTVkOThlMDg5ZDYwZDRkYjAwODA4NzAwMDUzZjc4YjMzYzMxNjUyYzNlNCI6IiI6IjVjYzBmZjliYjdkNWI5YjJhYTA2ZjZlY2Y2NjlkNWJiIjoiMjRhYzk1YTZlZDJmNzg4NTNmOWFiMjBmNTNkZTQ3ZTdmNjYyZjcyYWVhNDU0MTQxZTIxMzFhYWNlN2VkMmRhZWIzOTViYmNjZGJmMDA0ZTIzY2UwNGFkODU5MDlmMzAxNTFiNjUyNmMxY2U3OTM0NzI2Zjk5OTk3YmJhYjI3MDU1YjM3OWU1ZTQzYjgwYWQ1NDZlMmQxNjU1ZDFhZGFkNGNiZTUxMjgyNjQzYmI0ZGYwODZkZWIxYjQ4YzFiZDNhYzNiNTNjNGE0MDZiZTI2ODcxNzQwMjhlY2Y3ZTc5NzZlNWM3YTExYzlhMzgyNzgxM2FkZTMyYmFlZjlmMTVlYyI6MTA0OiI5Nzc5YjdjM2VjZTZjMjNkNTgxM2UyNDNlYyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5YWZjNDNhNDQ4MWY3OTZkNzc1NjFmODBiNWIyZTE1MTRjOTZjNWQxZDg2ZTY0YyI6IiI6ImQ0YzA2NTk1ZmVmZDRhODFiYmJkNGI0MGMyZTE5ODlkIjoiOThmY2NhNTEzNTI5OThkMDEyNmI1NTM5ZTNmYjlhMjM4YWMzMWMwNTk1NGZjMjA2ZDM4MTkwOWFlZTcwOTgzYjZhYjk5ZDNmM2VmZTg1MzBhMWMzY2ZlM2I2Mjc1NjMyMWIxZDA3NzFhNTk0MDA1NWViYTFlNzFmYTY0ZjI5MjkxYWE1ZTViMGFmMGZjYzhlNmY1YTAyNjg4ZDllOTM0MTcyMjVlZGVkNzkxYTM1MjE3ODIyZmZiMzQ2ZDNmYTI4MDliNjVhYmU3Mjk0NDgzMTZiZTMwY2Y2NjExMzdkM2MwZTQ5ODQ2Y2IwZGY1OThkOTBlZGE1NDVhZmI2NGE1ZSI6MTA0OiJjYTgyNDQ4NDI5MTA2MDA5MDk0YzIxZDcwYiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI0ZmMzMWRjZmVmNjIwM2ZkYjI5NmNjOTI4YzEzYjdkZjU2YmZlNmYzMjU4MzA1NyI6IiI6IjYzMDhhNzhkYzhmM2M5MDQ0MmRjNTIxOTY2NDljMzhlIjoiMjU2N2Q4MGMyNTNiMDgwYzAxNTgxMDI1NTg1NTE0NDVkOGNlNGQ1ZGRlZTIwMTRhMmJlNWNiYWQ2MmUxNzE3YTBmZDRkMjA1OTQ0N2MzMTUxMTkyOTUxZWIxMWE0YTdiMTlhOTUyZjZiYTI2MWM4N2YxMGY0YzkwMzIwMjhkZTNjYzVhMmE1NzNhNGU5OTNhNjkwZmM4OTU0ZGFhM2VjOTI3NDNlNzM0M2U3NWI2NDZjNGZhOWNiYzNmY2ViNGY1ZDU5YmI0MzljMjM3NTRjNGQ5NjY2ZmJjMTZjOTBjMGNhYzkxNjc5YjZhZDFiZmU1ZGNmNmJkMWE4YTY3YzZiNSI6OTY6IjlkMTYwMzc5OWUyNDg1YTAzZTdiMDVhMCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFjMmQ5NDEyNDg2YzM4MTQ0MDIxM2UxNTg4YjZiYjU4YjBkYTUzMzAwYjlkMzA4OSI6IiI6IjcyN2VkODg0NmRhYWI4NzRkNWE5OTE4YjQ3ZDAxNmY0IjoiNjU2NDMwZjBjMTQyMzAxOGI1ZTJlZmJiMWUzMmE1Mzg1YzFhOWExNzc5YzRkYmQ1ODVkZWE5MWVkYzM5ZWE4NzUyZWJmYzJkODA2NDI1MWE4YTVhZTcxZTE4NDVmMjRhN2U0MmM2MzcxYzJlY2IzMWUyMjI5ZDVmNDkyM2JmZmMyMWQ0ODA0NTc1YTg0ODM2ZjNjZjkwZWM2MDQ3YmIzNjBiNTU4YTQxYTk3NWVjZTExMWI1Mjg0ZGZhMjQ0MTcwNWE2ZGY1NGZjNjZjYTZjYzFhZjkxNjNlY2M0NjkwMmZhYzMzN2Q1ZjY3ZjU2M2ZkZThlOGU3ZTY0Yjg1ODhiNyI6OTY6IjA1ZWU2Y2UxMzcxMTUzNTg2NDY3NGE1YiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWJmN2E5NzU2OTQyNzIyNWE0YmQ1MTQzYzcxNmEyMmU2MmY4NGMxNDViYjUxNTExIjoiIjoiZTI1NTA4OGNkZmU4YWU1YzlmZWE4NmQ3NGQyZjFiN2QiOiJiODUwOTkzMzAwZjU0ZDA3OGY4M2NlYjlhZWY3MzQ1YmJmNzU4ZjkyMzY1YjY2MjVjMjEwZjYxZGFkNGYyYTIzMTlmNTFkODgzYTM4M2E3MDYzOTJkM2RmY2ExNzA2ZWJhNTg1YTZmYWM4YmQ0Mjk0YzBiYjJjYjNmNmI0NTRkNWM5NzgxOWU4ZTVjOTI2NzU0ODQwMjYxYjA3ZWM0ZWYxZjg3Y2YyODFkNzVjMTg3ODM5Njg5OTQ0MjMwMzA2ZTE5MDMwNDc5MTVlMDg2MDQzOTkwNzQ1ODY0ODE5YWQ3MTNkMzRhMjQ0YWE0ZTlkNzU1ZmRiMTM3MTA1ZDdlZWQ4Ijo5NjoiMGM5YzE3Mzg4ZDA2MTBmOTlkMGEwOTNmIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0NWE2ZGY2NTVlODhiYzg4MGFjZmY0MTUyMGFhZmQwY2M4YWE4YWViODk1MmZkMDYiOiIiOiIxMTI1ZTFkZTk0OTcwYzllN2JlNzBlNThlNzYyNmVmNCI6ImZlOTgzOGE0NDViOGVkZWYxOWIzZTlmMzNjOGMwYzI2NWIzYTEyYzk3YjhlYzU3Y2ViOTRmNjVhZTUyMjcxNzdkZTM4ZjFlMzM4ZGNjYjJiMjRlNWJkMGYwZWI4MTI3ZjgzZWJhMGYxZGRmYTU1MTk4Nzg5ZGYwY2RkMWQ5NzdmY2I5ODVhZDljN2Q1MWI5NmU3NDlkMmNmM2NjN2ExZWM0ZGZjYmM2NDFhMWEwMjJkNTVkZWYzMjhlMDgxYWY4OTBhN2U2OTlmMmRiYWZkZjUwNjM4OWUwNDVhYTEyMTkyMzlkNTg2OGJhNjc1YTM5MjU2MDJiNmZiNmY2ZTZkMzciOjY0OiIxYzNiZDFlMGQ0OTE4ZTM2IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjc5ZjRmMmFiNGI3MDc3OGZkYjljYTc4MDBjZDIwZTMyMzYwMWQ3YWEyYzc1MzY2IjoiIjoiMGY3YjQwMjU2MDczNWNmMDNkNWRhNThkZTViNmM2ODUiOiI3ZGQ5YThjODQ4YmJjZjUxMjcxNjFjOGE0MTlhNDM2YTBkYWQ1NTlmN2MxNjEzY2RmNDE1OTRlMTc3MDE2YWNiMWNjZjQ0YmU4NTIxODVjNDJlNzEyMDkwMmE0MmVmZTgzODU1OTk1YWI1MmNmNWMxOTBkNDk5ZmNmZDY5OGM2NzFmZDcyOTQ5ZGMzZWE3ZGRiODc0ZTU4NmEzYWE0NTVhMDIxY2VjN2I1Zjg2MDg0NjJjYTY2ZjkyNmFiYTc2ZTYwYTU4NDZkNGViMjA0MTU1Y2QzYzEzMjhkYTUxYmEzNWMzMDA3YjhiYjM5NGYzNGUzYThiODFkZGQyZWExMTE1Ijo2NDoiZGFiNjEyMzUxZjc1ZTJjYiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjcxNmFiOTM3NzU1Njg0YWY3NDAzZTZmYmE1NDUyYzFiMTE1NjhhOTA0N2JiNTBmIjoiIjoiMmZkNWE0NDZkZDU2NDYxOWVmNzViNmUwMDkwNWZmZTAiOiIyMGQyNjFkMzE5Mjk5NmMyMWRhNjllOTc5YzI2ZjVmOTM3ZTZlYTRjYjdiMDVjNmVmNTU2Y2U0ZDg2Y2EwZmU4NWVjMjQyNWQyNzRjNDNiNTIxMmZlOWQyN2JiNDhiMDRlODg3NDYxYTlmNDVmNTI0MDU5Yjg3ZWFlYTJlMjg3YThkNDUzN2YzMzhiMDIxMjAxMmE5ZDRiNjYxMGU4Yzk3ZGQ1NTRlMGIzYzMxMzNlMDVjMTRkMGRkYWIzNTI0YzkzZmQ1MjdlMjIzYjE5OTZiNGNmZjBhNGE3NDM4ZjFkNTQ4OTBiZjU3M2NkODAzOTQxYjY5ZTVmYzYyMTJjNWQyIjo2NDoiZjFkNzQzYjdlMWI3M2FmNSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdkYzk0YjViYmQ2MzE1YWQ4ZDJiNjdmMGM2ODNkMTBjZjQ1NmY4MjJhM2ViYjAyNCI6IiI6IjZmM2VlZGViNTdkY2YxMmJmYjNjZDgwODQ5ODkzYzkwIjoiZWUxZmYzNjdmNGIyM2MxNTZlM2RjY2ZmODRhZTRiZjJiOGVjZWMxZmI1ZmZkMjVjY2FhOTNiNmM2ODM0Mzg5YmQ3OTY1NWJkNGJhYzc1MjM4ZWIwZjY1ZDM2MDNlY2M1N2M4Nzc0Nzk4MzA5ZTg1YjY2NzdlNzhlZDIwNzdiNzEyY2YyODc5NWQwZGM4ZmVlOTk0Zjk3MzczYTgyMzM4ZWY2N2M2MjM3ODEzNmE3OWE5OTBlY2JjZDYzNjc0NDVlODA1ZWZhOThmOTE2ODgyNmU1N2NiOGRkN2U3YjFkNWM4OWFkOTgzNTg2NDZmYTU2ZGQyYTcxYzQwZTAyNzVhMSI6MzI6IjRkYzc0OTcxIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzYmJlMjIzZTI1M2JmMjcyNTk5ZTI4YWY2ODYxMDEzZWNkMGM4ODcxMDk0N2VkNDEiOiIiOiI0ZmJmMDlmZmFmZmI2MDBmMGRlMzhmYjEyMzE1Y2FiNSI6IjUzODgxNDZmNjQ3OWY3YjNiMjgwZjQ1NjU1YTk1Yjg0N2VlMjdjNzM0ZmIyZmQ5MWY2YzAwOWIxYWIxODEwYzc3MmM3NDM1ZDMyMjEwNjlmOTQ5MGQyNTFiNzZlNzQwMTQ3OTA2YWMxZGIxYzIwOWMxNzViMjFhYTEwODgxYzQ0ZmIzMDdkNGQyOTAwYWEzYjFkNTZmYjBlZGI5ZjJhNTg1MDU2NTNhMTdmZWUzNTBlMTI3NTViOTY1NmJjNjVjNzhjMTU5M2Q1Y2I3MTc4ZTI5ZjgyMjA5Y2FmNTNlNjBmZGRmNzI1ZjY5NTdjYzk3MThiZjQxMGM0YTAyMjllZDQiOjMyOiJmYjg0NWFiNyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ2MTg3NzgxM2FjZmU2ZTk5NzllYWI3MjliNTJlM2QxOTJiMzIzNjc1OGJiNjU2MyI6IiI6IjY5ODVjZjc3Yjc1YTQ3YTM5NzhkZDY0MTJkNTkyMDBiIjoiMzg1NTUxODU0YTg5YWIzNzA2M2JhMGVkOTExNTAxYjNkNjMyMTUzYzVjMjk5MmUxNTRjMGEzMzRiYzM2NjIwNDc2ZjExNDk1NDM3Yjg0MjQwOWUwOTU0ZjczNTJjYmYyODhkMTU4YmRiYmFmNzI2MjFlYTJjZTc1YjcwOGJjMjc2Zjc5NmM1YWE3ZmQwMDcxZTUyMmM1ZjE3NWE5ZTc3ODdkZWVmNzlmNjM2MjEwMWFhMzYwN2I0NTg4ZjJlMWRmNzEyN2Y2MTdjNjA3MzU5M2ExYzc5MmI5NTllMjAxZTRhN2E0M2VhOGIxYzNhZjAyNjM3NjQzOWVmNjI5MjY2YyI6MzI6ImM4NDBkOTk0IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA5NzcwZjkxMTQxMjBhMmMxYzNjYzQxNmZlMGViODY5OWUwNzE0MTE1OGE1YmRmZiI6Ijg3NWUyZTViNWMwMmUwYTMzZTcxYjY3OGFhMjljMTVjZTE4ZWMyNTljZjRiNDE4NzQ4OTNlZDMxMTJkYWE1NmZmMmE3NDc1NjgxYjhiM2Q5MDI4ZWYxODRkMzA2NThlODgxYzkwOGYzNTg4ZjY5ODk5OTYyMDc0ZGI0ZGRmYzA1OTdmOGRlYmI2NmM4Mzg4YTFiY2NmMGZmZTJjZjlmMDc4ZGMxYzkzZjgxOTFmOTIwNzU0NDQyYWQ0YTMyNTk4NWM2MmRlMWE1N2EyNWRlNGU5ZWQ1YzJmZDBmMmM4YWYzM2YzYjE0MGJhYzEyYmY2MGZkYjMzZTBlYzU1Nzk1NWIiOiJjZmYyOTFkMjM2NGZjMDZhM2E4OWU4NjdiMGU2N2U1NiI6IiI6MTI4OiI4MWYxZWI1NjhkMGFmMjk2ODA1MThkZjczNzhiYTNlOCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0ZmJmMWM3ODVjMDg3YWQwNmI0M2Q0MTYzY2Y5YjkzOTZkZWZmZDM3MTI4NTYzNzkiOiI5NmE2OTBlNTMxOWM5NGQ5NDkyMzk4ODAyNTMwN2U1NDNmMTZmZDk3MGFlYzI0NTI0Y2Y5ODA4ZGM2MmIwOTMzNTkyODcyNTE1MDNmNDIzMWJmNTJjZDFhMTZhODBiZmE4MmQ4ZjU4NWQ5Njg1NWRjMTkzMmY0OTE5YTkyZGEyNjE4ZDY0NDhmYzE4YTIzNGY5YWNiMzg2YWI0YWI0YTllMzhlYTM0MWU3YzU0ZmFjZWZmMzhjMTYyZDc0ZTdmYWJiY2ExM2FhZGI3MWU5YzhhZTYwNzJlN2JlZjQwNzNjZjA4YWE3ZmFhYTZkNjM5Zjk4ZDE1YmFkNGVkMTgzY2VkIjoiMWM4ZjQxNDI0YWNhZjAwOTk5NmNlYWE4MTViMjRhZDQiOiIiOjEyODoiOWYzYzAzNDljNWE0YTc0MGE4MmQ2ZDYzYmYwMGZiMTciOiI2MTAwYjA5MWU1MjM2NmZiNDIyMjUxZDliNjg5NzRiNmM2NjZhNjJhOGJiNzdhMWZmZDdjN2QxYWU1ODZhNmVlNzYzYjg0ZGMxMWFhY2UwMmEyNWFmOTFkMTk0YjcwYjMyNjVlYzQ2ODcyZmRlZDU0Mjc1YjdkZGIyNmVlMWYyMGM4NTczMjhmNDZhNjk0ZmIxZGNlNjhiY2FlY2JkNTg3ZWNlNWI1MDVkNjU4ZDU3ZDUwMzMzZTMwYjYzOWVlYTFmNjUzN2IzN2MxNzVmNjI0OTdjNmM4NGUzY2ZkZGFlMjE0Mjg1ZDJkNjhkOTBkZDVjZDhjZTIyNzNkMjVjOGNhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2UwY2U0ZmI0ZmU0YmIyZmRmOTdiMjMwODRmZjU2NzFiOWI4OTk2MjQxODRhY2VmIjoiZGY4OTk3NGIxNTM0ZjBiYTI2MmJiZWE1ZWZlMzlkOGI3MjgyMGNjOGE3MjBjYzk5NTIwZmVkYmY2Njc1MTVjM2Y2ZDhjM2UyNWM3MmM0OGMxY2ZmMDQyMTcxZGY1ODQyMTc0MWFhY2IyYTQ5ZjIzMTY3MjU3YmU3ZDcwMDRkNTZiMTQ5MDFiMjA3NWVhY2E4NTk0NmU5ZmJmMWJiZjRhZTk4MjI3ZWZjNjJiZjI1NWEyNWRkMDQwMmQzN2M2N2JhNTUzNTMxYzY5OWRkODlmZjc5N2U3YTViNWI5YTlhYTUxZTczY2EyZGFjZmRhMGY4MTQxNTJhYThlZDhjNzlmOSI6ImE5NTBhYjBkZDg0MTE1ZTM4MjlhYjBhZDNiYmIxMTkzIjoiIjoxMjg6IjI1Y2ZkZTczZTdhMjkxMTU4MjhkZmUxNjE3ZjhiNTNlIjoiODQ3YjU0ZTE3NmNjYzgzMDgxY2I5NjZlZmM0YjRhM2JmNzgwOWNlMGI0ODg1MDA5ZjYyMGY2MWZhZmNhYTc4ZmVlZTkxYTgzNWFlNmMxYTk0MjU3MTgxMTEwOGIxZTgxYjRjNGRkYWM0NmFhZmY1OTljMTQ5ODhjOWExZmI5ZjM4N2FiN2YxMzU3YjU4MTU2OGI3YjM0ZTE2N2FjMmM4YzJiMmI4YTRkZjNmZDdhZDg5NDdhMzYzYzFjMGNiNzgyZWM1NGIxOTAxZTkyODgyMWNmMzE5NjY5ZGQ3N2ViMzdiMTVjNjdmMTNhZDc4N2ZmNzQzMTI4MTI3MzFjYTNlNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZiZTNjNjZiMjBlNWU2NmFiYWJiZmJhMWIzOGU1YTcxNmVhZmNlMjNhMTc2N2I2OSI6ImRlMWNkOTc4MzU0YTQ5OTQxNTE3NmYyNjAwMjFhYmUwYThjNWJjMzRkMTY2ZjUzZDIwZTAyZTQxM2UxMzc3Y2U0ZWY1ZDdmNTgzMzdjNjIyNTFhM2I0ZGRlYTBkZWEyM2M0MGU1ZGUwMzdmZDVkZDhhNTU4ZWI1M2JmZmE0ZThjZTk0ODk5YWZhODI4NGFmYWI1MDNjMWE0ODU5OTlhMTU0ZDIzNzc3ZjlkOGEwMzFiN2FkNWM2ZDIzZDZhYmJlM2I3NzVjNzc4NzZhZDUwZjZiZWQxNGFjMGIyYjg4ZmIxOWM0MzhlNGI3ZWIwM2Y3ZDRkM2ZjY2E5MGRkMDEyNjAiOiIzYTJhY2Y2OWJiYTE5ZjVkMWQxOTQ3YWYyY2ZkYTc4MSI6IiI6MTIwOiJmODI2ZDIxMmY3YzEyMTJmYjhhOGJmMjM5OTY4MjYiOiJmZDFmN2I1NmU1NjY0Y2Y0YzkxZTU4ZjdjNTBmNmM1ZTk4ZTQyY2EyZTRhZGNjMDAzNDhjZWU2ZjY2MmIzODJhZDQwMjJkYTU0YTQ3ZDhmYWViOWI3NmEyNGRmYzRmNDkzYzI3ZmMwYmM0MjFhNDY0OGZhZDdiMTRiMGRmOTVkODc1MjAxM2ZlYjAzM2IxZmQ5NzFkYWEyYzlhNWRmODk4YmVjZTZhM2I4ZmEwNzhkZDEzMDA3MWRmMjBhNjhjZDBmMzk0YmUyNWRjYmIzZTg1YmRmYTBkZjQ3OTdmYTZmMDFmNWYwZGE3YTZlODYzMjAyMDdkZGI1YjNiZTUzYWUwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDE2YWJiOWY1YjM4ZDdmNWFiYmE5ZGMzNjk5NWNlNmNlOTI4ZWQ4MjJhMDdiN2M0IjoiZTcyZjI5YjFmYzFkYmZjMmQ5M2EwZjNiNzllYTRiOTgwNmNlOWIyYzRkNDkwYWM1YzBjM2M3OTNkZjlkYzdkZjU0NzFlODM0Yjg0ZDE4YWZhNWE3NTE2ZjlhNmE4MTNhOWI2NWFlMmYwODNhODU0NzMwNTQ3ZTI4YTFmNjBmZTk3ZDhkYmExZDJkNDMzZTExODQ3YjliZmZkODg3M2VjNjM0ZTY0MzY1NTMwYzkwNWRkNmYyNzRlNDVjOTc5NWFjMTI3YTZmMzU2ZjYzY2M2YzExNmM1ZGQ4YzYyOGU3ZTE3ZTFmYWRjNThmODQ1MmJmMjFmNTNjNDEzMzE5ODExOCI6IjNjZDk1NDI5YzZkZTFkMzI3YjllYjNjNDU0MjRhODdjIjoiIjoxMjA6IjEzNTIxMjM2ZjE5MGY3OGU3NWMwODk3YzVmYjIzNyI6ImNkOGJiOTdjMjhkZjA5MmI2NzgzZWY2NTNmZDI2ZjJiZGMyN2M0NDJiYWIwYTRjN2JlZTI3ODlmMzg5ZGNkMWIyODBjMDIzMTY3MjcyMWJmYmJjOTM5YTA0NDk1NTc2NzhlYzYxYmEwYWZiMmU1ODE3ZTZmN2Q5NDM4N2Y4NGVjYWZiZmExMjE2ZDY1ZTdmNTAyNWY0N2IwZDI5MDVjZmY3Yzk5YWRmODMwNmEzZDk4NTBjNTkwOGJlMDVmODdjYjFkMzZhNDgzN2RiYTQyOGFhYzk3ZDdmYmMxOGUzNzc4ZjhkODFhMzE5MjU5NTA0Yzg3ZmM5NGJkMDc2NmVkOTMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwYmMzNDRiMWE0MDc4ODA3ZTVmNTNhNmU3ZTFlMzZmYTgzMTA4NDczYWUyZmI0YzIiOiI4YmQ3M2Y5NGM3MWUzNzY1YmM3ZDE3ZmRjOTBhOWJhNmFmZjk2NDhiNDYzMDBlNDA0ODk4NWZiYmQ3YzYwYzM5YzM3NjZmN2M1MjQ3ODBiZmMyMjk2ZGMxMWUxMTMyMTM0OTIxNzYwYTM3MzEwNGVkYzM3NmVhYjZlOTFlOWE2MGE1YzRhNTk3MjkzNWRmMTJlYWRhZTA3NDcyMmJkYzAxNDdjM2NhZjZhNjJmZDQ0OWVmMzdkNzZiNjVmNmQyMTAyODNjOTRhYzUyNGNmMTMxODZlNDQ0ZDgwYTcwYjAxZTQzNzNjYzA0NjI1NDZmMWNhZWU2YjQ5ZTczOGE3NDJjIjoiYmQ1MDVmY2JhNDY0ZTZlMmM1OGZkZjI5ZjU2OTVmYjkiOiIiOjEyMDoiODUxMGZmZjcxYmI4NzlmNTZlYTJmZTQzZjZmZjUwIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM4MDk3Mzk4ZmMyMWY5M2VlYTZhOTVhYTkzYTMyMzEwOTY4MTdiNjU1MjBiYzU0OSI6IjgwYjBhYmJhZWJiZDUzN2EwODEwZWQ3NWNkMTcyZDI5ZDUwZjU5ODJlNGQwMWY4NjY0ZGRiMmRmZGE4ZjU3ZmEwZWQ4N2U2NGE3NzlhMWQ3ZjVlNTY4YjZhY2ZkYzczOTU3MmE3MTc2NzUyMzA3YjQzMGZiMWZhMWMzYzJjMzQ2NDc3Y2ViZTdkMDFiMTY3NDVjYTZjODkyOWE3ZjQ0NmMwM2FkOWE5ZThhNWE5MzVkZTc4Y2E2YzcwMWU4YzFjNWU2ZDI1NTBjNDI5NDljZjUzNDJmYjVlZjRjNmFiOWJiMDJhY2U4Mzg4YjE2ZWRmNzJhMTIzN2U1ZDFkMGU4MjAiOiI3NzYyNDgzODE5NDFlMTY5MDhmNTJkMTkyMDc4ODFmNSI6IiI6MTEyOiI3ZmM0Mzg4YjJmOGVhYjBmMGMyZDZhMDg1MjdlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc2ZDRiYjU2OTRmYWFmMzQ0ZGI4M2JjNmQ2YzQ3ZDU2YmI2YWI1MjcwMDgyNmYyZCI6IjllMzFmZGE2YTE3MWYwZDRhNWYyYWYyYzRmODI3YjEzMTJkOWRkYTVkNzhmYTMyOWI4ZjFiNjM3M2I5YjI5YmUzNTg2MDFlNWJiMGQwYzYxNWFlZjRiOWU0NDFjODExMjE5ZjFmMmZmMmQwYWIyM2UwY2Q4MjlhODhiNWI2MTVlZTcyZTVlM2VhNjA0ZmEyNmNjNjQzOGVjNGMzMGU5MGY3MzQ4ZTkxMTZhZGY4ZThlZmI3NDk4MzIwZDJkYTE2Njc5ZmE1NDZiMWFhOWFmYzc3MjBiMDc0YzRlNDhlMDY4NjJkNDE0MjhjOWU3MWE0NzcyYzJlMTk1YTZmMzY5NzgiOiI2MDM5Nzc4NDVkODJmYWNjYjQwMTgxN2VjY2U2ZTJmZSI6IiI6MTEyOiJjOTU1YTNiYzMxNjg0MWJlMDdlNDA2ZDI4OWM4IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImEzZTUwMjA2OTU1ODc5ODQwNzRkNzhkOWM5OGI4ZTFhNTcxOWU1Zjg4MzcyNzQwZSI6ImMwYmZlM2IyZGM0ZGFkMTdlYzVhNzY2MmQ4Njg0N2ZiNjdlNTgyY2MwYmFmNDY5YmM5YmFhN2EwNzVkNDhhOGI5NzUyMWExMDcyYzI3OThiZmJkYWU1Y2EzNzUyZWRhMWNiOTZmZTVjZjI0YWY5ODllYjc3YTI5NDhhYWUzZDhiNzBkODNkOTNmODRjNDkzNDdmNzg4NDgwZjM0MDUxNjIxYzM1OGMwM2NmODE1OWE3MGZjNzJjYjhiYzAyODc2MjM0ZmZlNzZiMTgxZGE4YjIyYjg3OTZjODdiMDkwNGRhMWFmNDZkZTUxOWMyMGQ4ZDFiMWRjN2NjMjRlMzliYTUiOiI0Y2Q1NmRlNTRlNTE0MGE1ODdiZTdkZmQwMmQzYTM5ZSI6IiI6MTEyOiIxYTI5NTI3YTQxMzMwMjU5ZjkxOGQ5OWQ3NTA5IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFmZTk4NmVhZDc5OTcyNzA2Mzk1OGUyY2UxM2NhODQ2Zjc2YzUxNjA1NDM5ZjgzOSI6IjdjMWIzNTRhNWJiMjE0YmQ5NTE0N2UzMmQ4MWU2NTg3MDUwODljMzgwMzVkMGVhNDIzZWIxYTVjODJmOTc0NDNjNjkwM2QyY2YxYmE3YTAwN2VlYzdjOGZmOThiOGY4MmIwNzNkOTYzNmE3OWJkNDdjN2YyZjYzOWE4ZWI0ZTkyMDc2ZjllZDYxNTc2NmY0M2FjM2E0ZjE2ODczMDFlZDdkNTA3NzY2NjA1ZTBlMzMyODgwYWU3NDBhYjcyZTg2MWEyY2I2ZGNlMWRmMWZmOGJlMTg3M2QyNTg0NWVlN2M2NjVlNzEyYzViYmUwMjlhMTc4ODYzNGJjZTEyMjgzNmMiOiJmODVhOTVlZDEwYjY5NjIzMTYyYWI2OGQxMDk4ZGU5NCI6IiI6MTA0OiIzY2YxY2RiNGE0ZmRjNDhkYTc4YThiNGU4MSI6ImE3ZjI1MmFkNzk4M2U3MDgzMjYwNTk4MDUxYmZmZDgzZjQwZjRkNGE4YjU4MGNjMjM4OGQ3MjBhMDk3OWRkZTcxNTQ5ZGRjYjg2YjBhNjJjNDk2NGZjYTU5MWQwOTgyZjNhMjAzZjJmODg4NGZmNDk5MWYxN2UyMGY3NTllYTcxMjViYTJiYjRkOTkzNzIyZjIzOTM4OTk0ZWIyNzA5Yzg1MGYzM2VkOTg4OWU1YTM5NjZmOWQ3Yjc2YWRkNDZhZWRmMjMwZThmNDE3NDI1ZjlkYjc5Y2NkNDZiNTY2MDM2MWRlN2M1ZDg3ZjcxYTlkODJjNDkxYzBjM2RhYWY1NmMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyY2ZhYTIxNTg0MTgyNmE5NzdhZTZhZGZkZDk5MzM0NjIxMGM0OWRkMDRkNWQ0OTMiOiJlOGViM2I2ZWRkMGNhNDIwMWI0OWE2YTgzMDM2NDQ1YWJhMWExZGIwNDBmM2U3NDUxMTM2M2JjZTc2OTc2MGE5OTE0ZTA1YTA2N2Y1NTVjYTE1YTU3YzZlMDJlNjZmYmU0ZTA0ZGQ4YzhkYjhkNmQxNGViYzAxY2M3ZDg0YTIwZmYwYWFjYjY5YmIzNjc5ZDZiN2Q5ZDJlMDdkZWRhN2MyZDRmZTRjNTg0ZmUxMTY2ZTc4ZDIxZGM1NmI5Y2RhZDkzNzA5YzAzYjkxNDViODg3Zjg3YjRmNjA1ZjI0Zjk4OWQ1ZTA1MzRmYzcxYTU4ZThhODYxOWVlOTlmNjllNWY1IjoiNTM3YTRlZTMwN2FmMzA3MmU3NDU1NzBhYWFhZGNlMzQiOiIiOjEwNDoiZGYwMWNmZmJkMzk3ODg1MGUwNzMyOGU2YjgiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTI4ZGRjODNkMjE3MGM0MDNhNTE3NjE1MDU2ZGNlZWMwZDE5ZDZmZDc2MzJlNzM4IjoiY2ZlOWY3Nzk3ZWUzN2JmYzRmNTY0NDE5YmYyMjY4Yzk2NDQ3OWVmYTc0MzU5NzA4NzQxNTQ0MzI5MzBmM2IyNzM2NDM4ZGE0ZGM5Yzc2MjAwMDA5NjUxMzQwZTIzMDQ0YmM5ZDIwMGEzMmFjZmQ0ZGYyZTFiOThiMGJhZTNlOWZmOWQ2ZTgxODFkOTI2ZDJkMDNmODk3NjhlZGMzNWI5NjNkMzQxOTMxYWM1N2QyNzM5YjI3MGNlMjU0ZjA0MmI2NGNlYWM0Yjc1MjIzYjIzMzYwMmM5YTRiZGM5MjU5NjdiMDUxNDQwYzI4ODA1ZDgxNmFiZTc2ZmM5ZDU5M2Y1YSI6IjUxMjRiNDEwYzQzZDg3NWVjYTZjZTI5OGM0NTk5NGE3IjoiIjoxMDQ6IjU2YWQ5YzE2NTNmMTFhNDFmZDY0OWNjY2Q4IjoiY2Y5MWYwODdmZDdmYWYzNjJjYWFjZjRhNjhjZmY1MWVjNTdiMzA3NTU2M2U0YWQwOTU1ZGYyMGIzNjZlOTJiZDc1YzM3NjJjZjRhNmYwZWI4NTk4NzI2NjdhNWM1NWFhNWQ5NGY1YWM5NDc5YjFiOWM5MzQ1YjUwZjgyMzc5ZDU1MTUwNmEyYWIwMmIwNDQxYjE0YjI4Yjc4YTEyYjM4NTAwZDcwM2E4YzE5ODg4ZmU2MTJkNDcxMGVlYzdjZDE4YzE2ZDZhNGI1NWQzYzY5NzYwZTJiZWQ5OWVmYzhiNTUxZGJlMmFjOWI5YjY0NzE1Zjg3MTgwYjhlMTRkMTc5NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTg1ODFjMjg5ODNjNGRhMzIxY2UwYzQxOWNjMGQ0NzZkNTM5ZTc3ZGE1MTNjODk0IjoiYmRlZjViNjViNTExMWIyOWU3ODFhNmI3MWEwMTYwMTc5YzUyYjViY2NiMWFjNWMwMzc3YjI2Y2YzZjYxNDMyZjNjY2Q2NzYzM2E4MzYzNTdjMjRiNTA5OWRiMDUxMGE3ZjgxMTBmNTllODIyN2NhY2QxMWYxN2VhMTc5OGI1ZDRkNjg5MDJjYTZjNmVjY2QzMTlmZWYxNDU0NWVkZDEzNTA3OGIzOGQ0M2I2MWM5YWYyNjlmYzcyZjdhMjA5YmE3ODk3ZTRjNmRiZDIxYmI3MWQ3ZTkzZDJkMjQyNmZmYTE1NTdjYWUyOGU3NDA1OWQzYmFmMDZiYTQxOWE0N2IzOSI6ImZmMTAyMzQ1MjQ0MzNiODcxMjAyYzJjY2E2YWNiMTk0IjoiIjo5NjoiOTg0OTQzMzU1YTdhZWYxNWM0ZmI4MDMzIjoiODA4ZTI4YmZkNDQxY2I4ODkwNDE2YTc1N2QyNTJjOTg2ZGFhOGQ2MDdhYzljYWRkMmY0ZmQyOWVkZGJjZjNiODU5YmEyOThlMTRhNGNjZWZlMmMyNzUyYjEyM2Y4N2I5OGQ2NzA4ZmRlNDhmYWNhNGJjN2RkODE4YTdlYTc2Y2ZhNDM1NzkzMmU1OWNiNmJlMGU5MjgzYmRmYjQ5NDU0Yjg2YjlmZDA0YWE4Y2RlZjUwM2M2NWQxM2ZjZmY0MmU5Y2Q4ZjE0MmY4YzA2Y2Y3ZGFhNmQ4ZWY4YjljOWQ2OWMzOWU4YWZkOTgwMDQ4ZmVjZjczMWZkNjc0YjJhODE0YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTY3YjhiNmRmODAxNGM4ZjNkZTkxMmI3N2Y1YTBjMTEzNTgwYWE0MmQ3ODUyOThmIjoiNGY3ODdkZTEyYmE5MDdhNTg5ZWRmNzRjOGU3YTZjZGFhYWJlYmRkZDQ2NWE4NmUxNzBlMWVmYzI4OTI0MDI5OGI1MTZmZGRjNDNjN2ZkOWJiMWM1MTcyMGE0NDU1ZGI0ZGQ2MzBiNTlhZWJhYTgyYmQ1NzhlYjNjYjE5ZjhiMjNlZTY4OTdjMWZlZmFlZjgyMDQzMGVmYTZlYjdkNmZmMDRkZTRkOGIwNzk2MDVmYjUyMGIwZDMzZTk2YzI4ZjBjZDcxOTgzYzRjZTc2YzBlYTYyZmQ3MjA5ZDIxZWM3YjQxNjg4MWQ1NDU4MjRhNzNkMWY5ZjhkMzMyM2ZkYjkwYyI6IjQ5ZGE5MWU5MjYwOTFhNDQ4ZDU3ZDUyMWNjOTBmM2MwIjoiIjo5NjoiOTkxOThmNTVmOWZhNzYzNjUxYmJhNThlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzFmNWY4NTA1ZmJhNjJmMDhmYTA1NTdkZDU0MDdmYzgzYTg1MmM2MDA3Y2NlY2M4IjoiM2UxOWVjMDIzNjVlNDUwZTk0NjEyM2EzMzYyZjk4NTkzNTJlYjUyOTAyYTZiY2I4YTc4MjI4NWRmYWM5ZDJiMjgyZjU2MzAyYjYwZDZlOWY1M2ZkZGQxNmJiZjA0OTc2Y2Y0ZWI4NGVmM2I2NTgzZTlkYzJmODA1Mjc2YTdiNzM0MGRlYzdhYmRlNDkxNmZiOTRiMGVkOWM5YWY2ZDQ5MTdiMjdlNDRkMjVmMzk1MmQwNDQ0Y2QzMmE0YTU3NGUxNjVhMjNmYThjOTMyMjljZWI0ODM0NTE3MWE0ZjIwZDYxMGI1YmU3ZDllNDBkY2Y3MjA5MTI4ZjAyOWZlZDZiZiI6ImI1ZWZiOWZlYWUzZGU0MWI1Y2U5YWE3NTU4M2I4ZDIxIjoiIjo5NjoiOTYwNGQwMzFmYTQzZGNkMDg1M2U2NDFjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGNkYjM4ZjgxODVhNDE4NmZjOTgzZTU4YTc3NmE2NDU0YjkyZWNmMGJmZmVmZTk4IjoiMWNhNzJjNTBhMDkzMDc2ZTlhOWRmYTA5ODg4YjljODllYjM2YTk0MjA3MmZjNTM2YTgxNzEzZjA1YTI2NjliMzlmZGIyODcxYjgyY2E0N2RjYWYxODM5M2NhODFkY2I0OTlhYWZjYzRlZDU3ZWE3OWY4ZDRmOWJkNjM1NDA2MTAyMTViMmM2NTQ4MWIyOTQ2MzhjZWM0MTI2NGE3ZmRjYTQyMzBkZjVmZTFlN2UzZDhkMjZkY2QwYzQzNWZlYzhlOWJmNzc4ZjllNmYxMzQ4MjE1N2E5NzIyNzYxNjAxZTA4NDI1ZjYxNjBkM2JiNjI2YWUzOWVlMTExN2IwMzUzYyI6ImFlZjI1N2RkNDRkMTRkMGJjNzVmOTMxMWVmMjRlODVhIjoiIjo2NDoiZDk1MWJlY2IwZDU1ZjlmYiI6IjJlYWE3ZTkyMmRiZDg5NjNlMjA3OGFhZTIxNjYzNjI3NmYzZjdjYjVkN2YzNWZhNzU5ZTkxYmRkYjZlMjQ3YTkzYzM4ODI0MWJhMWQwZDM3MDQwYzBiOWU0NDdjNjdkMzViNDk5MWMxYWNjZTk3OTE0ZjNiYzIyZWU1MDE3MWJjNTkyMjI5OTk4M2VlNzBhZjc5MzAzMjY1YmMxYWUxZTczMzQyMDI0NjA2MThiNGE4ODkxZDFhN2VhYWFjNWNhYzFlNGRjZTAyNGNlNjYyZDE0ODQ5OTkzZjg5ZTc3MWZiODczNjQ0YjU1MjEyMGZkMzQ2MjUwZGYzOWFhYWE0MDMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVlOGQzYWNlZDNhYTNjYjIxNjZhYTY2YzRhMjUyYzEyZGMwOTc4ODMwZDBiYzc1YiI6ImVlNjliMjQyMWQ0M2E5ZjM4M2Q5OWY5ODAyYmE0ZDZjZjFjNTM3YjQyMDQxYzg2Y2NlNjgxMDQ5YmI0NzVlNTA5OGQ0MTgxZjE5MDJiMGE0OWMyMDJiZjM0ZWY3MGVhN2I3ODdmYTY4NWFiOGY4MjRmY2MyNzI4MjE0NmQ4MTU4OTI1YmZlZjQ3Y2NiYTg5YWE4MWMwNTY1ZWFjYjA4N2I0NmI4NzA2YzlmODg2YjdlZGY4NjM3MDEwMDMwNTFkNmZiNTdlNDVlNjFkMzM0MTI1OTFlYzgxOGQwMTZlZWM3ZGVlNDI1NDYzNjYxNWE0M2RhY2I0ZjFlNmVjMzU3MDIiOiJjMTVjOWMwYjBiNzBjNzMyMWRmMDQ0YmZkZTJiMTVmYiI6IiI6NjQ6ImM1Yzk4NTFhNmJmNjg2ZDAiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YTg1MzhkNjA5NDQ0ZTMxOTdhYjc0MGNkMzNiNjZkYjFjZjUzNjAwMDk2Yjk0ZTAiOiI4YzJiOGZiNzc1ZDFiMjFjNDFhM2RjZjQ4YWQ2ZDY4YWIwNWJlMzg3OWY5Yjk0YjMwNWE2Y2U0ZDc5OWUzYTk5MmMxYzNhNjVhM2U0ZWFiNTYzZWRiNTc0MjQ5MjdjOTBjNzZlNDkzODZlMjlkZDVlN2RlMjgwMGZjYzBlZWZiYzhiNGY5NzdmNzFiZTM3NTRjMDA2ZWU5M2RjMDliMWNmYTU5YzQyNGI2YjM5ODdhZWI1NmZlZWZjMjEwMDRjNjNlODI4NGI2ODQ1ZTM5NWJjODg0M2NjYTA5MTcyNjdmYjRhOGYyZGIxZjdkYWFmZTdhOWRhOTUwODNhNDRkZTcwIjoiMGJkNjRkMjIyNTMyZGFlOGFiNjNkYzI5OTM1NWJmMmEiOiIiOjY0OiIzNDc3Y2FkMWZkNDA5OGIyIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDQ3ZjBmMDY1NzcxYjYxMjk5NTJlNTIyMDZhNjRmZTA4NDQ2NThlZDY4NWUzOWNkIjoiZmVhNWQyMjc4NjllNTI3ODgyYzYzYTY4YTY2MjNmNGE2OTlkZjgyYjNkYzcxNWM3MjYwYTU1NTQzMzZkZjgzNzY3NDRjMDVhZTg5ZWMyN2Q0MGRhMDJkOWYxYzVlOWUyOTQwNTU3OWZkNDEzMjE0M2NiMjFjZGJlM2VkZmFhYWI2MjEyOGVjYzI4MDE4NzI1YzhkZDMwOWQyMzc2MjIzZDJlMmVkZmVhOTc2NTY5OWIyNjMwZmY1ZDlmZTliZWM0MTZjMGNhNjQxOGI5MzhkMTk1ZDMxYTA4ZTQwMzRjNDlkNzllM2EyNDllZGQ2NWY5ODUyMzBiMzNjNDQ0ZGQwMiI6IjM3ZTNhMzAwNTQyZDljYWYzOTc1YzY0MjljYjhhMmU4IjoiIjozMjoiMDZiZmNhMjkiOiJlMWJkZDFjMjEyYjE1OWI4N2U0MWE1ZjY0ZGNiYTZiMjdhYTBmNWM4ODcxZmFiZmI1ODhkZjBlMDZiZDc3MzBlYzFiZWIwZTMzODhmOTZjOTkyYTU3M2ZmNjliMzQ4NzBmODNjNTNmYjY1YjQyMGMxYzZmOTJlMmFhNmYwMzkxN2U4MjAzZDc3YzdmNWVlMDhiYWY5ZmFiMTJmOWQzOGZjMGZmYjgzODA3YmE3ODFjM2RkN2I2MmVkY2EyMTIxZjY4ZWYyMzBiNDJiOGFkYmQ0Y2VhMDcyMjA5ZDAyNzEzNzg5ZWQ1NTliODM3MzlhNTRjZmRlNjllNjhiZGM0MTI4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmNDY1ZTk1ZjZmYzE5ZmU2OTY4Yjk4MzE5YjU0NzEwNGQwYzAxYzE3MTA1ZjhmYzAiOiIyNDI2ZjEwODM2OGEwMGQyYTQ5NjcwYTNiNjRiNGYwNTY5YzZkYTk2NjAxNjNlN2IyMDllYzNmOGQwNThlZTExZjc4MThhOGM1MDMwYzVmNGNlNmUxZTVhOTNmYWEzZTVhZTNkMGJkNWQ3MTJmYmM4OTFjZmViMjA4NDU3MDdlZGNmNWUyOTcxOWE1MjQ2YTNiMDI0ZmIxMmQzN2JkMWI4MWRmMzgxMmZkNTBiMWRmYjNlOTQ4Y2U1NDZkZDE2NWNjNzdmOTAzYzA3ZmUzMmJjN2RhN2ZiYzI1MDM2Njc5MDE3MzE3Y2U5NGNkOGEwMGMxYmNlNzM3OTc3NGYxNzE0IjoiNmNiYTRlZmM4ZDQ4NDBhYTA0NGE5MmQwM2Q2YjRkNjkiOiIiOjMyOiI5Mjc1MGFjOSI6IjJlNTliMTA0YzFhNmY2ZDY1MTAwMDM5NmFkYmZhMDA5YmY0Y2Y4Y2JmNzE0ZGE4ZTRkM2I0YTYyYmQ3ZjUyMmQ2MTRkZWNmMDkwYzc1NTJhNGI5ZThkN2VlNDU3YmE2NDJkNTEwMGMwYzgxYzE0Y2JiYThjOGZmNDliMTI4MjdmNmViZDQxNTA0Y2NiNmRmYzk3Y2RmODUzMmQxZjdmN2U2MDNjNjA5ZWZhNzJkMmFlMGRjZTAzNmVjNGFiMzY4NDlhMGMwNmY4NzM3ZDk3MTAwNzVhMWRhYWVkMzg2N2NhMGE3ZTIyMTExYzBlN2FmYWU5MWY1NTNiNmZkNjZjNmUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYwOGUzZTlmN2IzYTIwY2NkYzRkOThiNTZmMmI1NjczOTlhMjhhNmIzOTA4ZGVhYiI6ImE5ODZlODE2ZjFlYWZiNTMyYzcxNmE1NTVjY2ExODM5YTFiMDUyMzQxMDEzNGVhMDQyNmFiMzA5NTIwYjMzOWZjMWZkZWI0MDQ3OGFlNzY4MjNjZWU0ZTAzYjhkMzQ1MGU2YmU5MmQ1ZmYxN2IyZjc4NDAwZjAxNzZlNmQ2YTM5MzBiZDA3NmE3YTNjODdjMzM5N2RjYzA1MjBjNmI3YjRmZjkwNTllYTIxZTcxYzkxOTEyYTc0YWFjMmNhNzBlZWM0MjJiNTA3Y2M1YzYwODYwYmI4YmFjYTAxZWVjMmEzMDAzOTcwYmE4NDAxMWVmZTU3NjgwNGIyODIwZTMwNmMiOiI0ZjQ2MzZkMWIyODNiZmE3MmM4MjgwOWViNGYxMjUxOSI6IiI6MzI6IjE2YzgwYTYyIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg3YjUzNzI1NzFmYjI0NDY0ODA1M2M5OTQwNTk5OTEzMGY4N2E3YzE3ODA1MjI5NyI6ImFlMDc4ZDE1NTRmYzZhMTQ0NDdhMjhjM2RkNzUzZTc5MGY3ZWY5YjUzZTM1YzNlMGZlNjNhN2IxYjMyNmJjNTYwMzQ4NDdmOGEzMWMyZDYzNTgwNDlhYWU5OTBiZmU3NTc1YjQzOWRiMzcwYWE1MTVlMjI1ZTBlYzczMDQ4OGM3MDBhN2IwYTk2YTdiOGU0ZThlNGM2YWZlYzIwZGVjZDE2ZmUzYzBmM2Y4ZDdhNmNmN2E4NzExZDE3MDgyOWQxNGM3MDZjY2ViMDBlMTMzYjhjNjVjOGUwOGNkOTg0Yjg4NDY2MmVkZGQyMjU4Y2U2MjlhYmY2YjlkZDI4Njg4YzkiOiJhMWNjODFiODdiZDM2YWZmZTNhZjUwNTQ2ZTM2MWM5ZSI6IjY4NGNlMjNmNTk2MzIzMDhkN2RiMTRmN2Y2ZWRkYWY0ZDgzMjcxZmIwYzI3NDAxYjA5NTE4YTc3NWIzNjI1MjU0MGYxNDMwNWYwZGFlMTNmZjZjMGRjNTY1YzllNTcwNzU5ZTA3MGM4YWM3M2RmYjk3YWJkMzI4NTY4OWE3Y2RjZmM5NDFmNjI3MWJlM2I0MTg3NDBiNDJiYTRhMTE0NDIxMDY1YTc4NWJlM2RmYTk0NGM4NmFmNTZkYTgyMDk3NzllODczNmU2MjUyOWM0MThiNTA3YzZkOGFlMDAyY2JjMDQzMTc0NzcyMmFmZDY0NTIxNzM0Zjk5MjczZGU0NTUiOjEyODoiOTgxNzdiMzQyOGU2NGJjOTg2MzEzNzU5MDVjMDEwMGYiOiI4YmU3ZGYzM2E4NmIxMTYyNDY0YWY3MzhkZTU4MmEzNTdkMGNlOGUyMTNiYmExYjc5MTNjMGQxM2FkNzU5ZDYyYzNiZjQzNjZmNTEzMGIzYWYyYjI1NWI3YWQ1MzBiNDk3NzYyN2Y5ZTc2YjA3ZTM2MGMwNzlkMGY3NjNkYWJiZDIyZTk3NmI5OGNkNTQ5NWM2MTgyZjk1YmM5NjNhYWQ0YjcxOTQ0NmY0OWQzYTQ0OGQxMWNhYzViZmNiYTRiNjc1YjhlNGQ4OGEzODllMjU4MGU4ZjM4M2Y5NWJmODVjNzJlNjk4NjgwZDJhMmJjOTkzYzllZTFjZTBkMWYxYWMzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTJkMDY5YjgyNjQ1NWQ1ZTc5ZTY1ZGI0ZjFkMmI2YTI5YWU5ZjQwMWJjNjIzOTE3IjoiYWNkNjIyNWRjNWI5MTA5ZDU2ZWE1NjVhYjM4ZGQ0ZGI0MzJhN2VjMDhmMGRiMDRmMWM2YjY5MWM5NmQyZWFhYTZiZTYyZGE3Y2M3ZmQ3NWY5MzE3MTZjN2YzOTcwNWVhN2NmODI4ZjFhNWEzMjU5NTVlOWIyYzc3ZTdmYjJkNTYyYmU2YTg5YjMzNTFiMWIzZDEzNTViNDNiNzNlZDQyNTA0OTQzMDMxNGMxNmJmMDgzNmVkNTgwZTkzOTBhM2I4ZTJhNjUyZmRkYmZhOTM5Y2E0YzNjOTk3NjViMDlkYjdmMzBiZjJlZjg4ZTFhYTAzMGU2ODk1ODcyMmNiMGRhMyI6IjZkNDBhMGM3ODEzYmMwNDEwZmY3M2YxOWJiNWQ4OWM5IjoiOTk2MDM3NmIxODk4NjE4ZDk4YzMyN2MxNzYxOTU5ZDA0NTQ4OGNjNjE5ODIzOGJiZTcyNjYyZjI3NmQ0N2I0MWU4YWViYzA2ZGJjZTYzZGE1YWRjYjMwMmE2MWFkZTE0MGM3MmI5Y2Y5ZjZkZmFkNmVjZWRkNzQwMWM5NTA5ZmFlMzQ5ZDNjN2RlYmUzNTExNzc3NjIyN2JhMTY3ZjJiNzU5MjFkNzMyMWQ3OWY0ZWJjYTEzZDIwYWYxNjM4YTE1NjcwNDMzNjVmMTc5ZjQxNjI3OTVmZTRmZDgwYjVkODMyZTRjYTcwZTdiZjk4MzBiYzI3MmI4MjE4MmY3MGQyZSI6MTI4OiIwMTAxOTUwOTFkNGUxNjg0MDI5ZTU4NDM5MDM5ZDkxZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMzI1MjM1MWZlOGU3YzYyOGM0MThjMWE0OTcwOWJmMWY4ZTIwYWRkODI1Mzk5NDgiOiI3ZThkMjgxNmQyODBjOTFkMjMyYmFkNDNiNjYxMGUyZDA1MzJhOWY2NzBmMjIxYTNhOTc1ZmIxNjQ3MmMyZTgzYjE2ODExNWU4N2E0ODdiY2QxNGIzN2YwNzVlMWZhYTU5YzQyNTE1YzM1M2NkZWZjNzI4YWM2MTdiN2QyNzNmYTk2Nzc4ZTNmYjVmN2ExMTMyZjhlMmFkZDRhNTcwMTViMTVkMTk4NDMzOGI3ODYyMzU2MjQzZDFjNWFhNjI4NDA2ZjRhNTA3NDk4ZWRhMTJkMmY2NTJjNTVlOGU1ODExM2VkODI4NzgzYjgyNTA1NzkwNjU0ZjAzNmI2MTBmODlhIjoiZWFjZDJiMWMzY2YwMWJmNGVhNzU4MmQ4ZWUyNjc1ZDUiOiIxNDFjYjM5YTJmYjhlNzM1ZTBjOTcyMDdmMWI2MThhNGI5OGY2YjliZjhjNDRhMWM4ZTllYTU3NWE3NzU5Y2MyYTAyMzAxMjc0NTUzZTc3NDQ0MDhiMmM1NzdiNGM4YzJhMDBlMThmODcxN2ZkOGE2ZDJmNDZhNDRlZWIwNWQ2ODVmYmVmN2VkZWI0MjI5ZTdlYTliOGU0MTlmZmNiNTA0ZDMzNTgzYjNhZTQyMWM4NGNhZWNhOWY5Nzg5MDQ3ZGQ3YjE4MTAzMThkMzc2NTMwNzIzMzU2N2JjNDBlMDAzNDAxYzlmNGUxYjA3YTJhNzE2Mjg4OWUxYTA5MmFlZGMxIjoxMjg6IjYzYTMxMGI0ZjQzYjQyMWE4NjNmYjAwZmFmZDdlYWM0IjoiNjk5YzE0NjkyN2FlMjkwMjVlNWIyMDA4OGIyMGFmMjdiYzc1NDQ5ZTQ3MjVlZTZiN2Q1ZGM2MGI0NGJhOGEwNmY3ZDI2NTMzMGMxNjA2MGZiZDZkZWYyNDQ2MzBkMDU2YzgyNjc2YmUyZGM4NWQ4OTFjNjNkMDA1ODA0MDg1YzkzY2U4OGYzZjU3YzJkMmMwMzcxYzMxMDI3ZDBhNGEwMDMxZTNmNDczY2IzNzNkYjYzZDRmZjhmNjViZTllYmU3NDA0NWRlODEzYTRlNmM2ODgxMTBkMDAwZjZiMTI0MDY4ODFjMDgwODVjOTM0OGUxZjAzMTUwMzg5MDdlMzNmNyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU0NjI5NTdmMmM1MDBiZjJkNmJmYTlhZjk3OTM4ZmRkODkzMGUzNjBlYTQxNzVlNyI6IjgyYTdhNmRkODJhNWVhM2Q5YThlOTU0MWQ4NTQ5Nzg0ODdlZGEyOThiNDgzZGYwMmI0NWM3NmI4YjM4YmFjOThmZmQ5NjlkZDE2MGEyNzY1NTk1YjE5ZDRlYTNlNjQzNTFjZTk1NzY0YTkwM2Y1OTVkZDY3M2QxM2ZhY2Y1YTU1OTRlMDFiZTFkNjBhMGM2ZDI4Yjg2NmExZjkzYTYzYTc0ZmVjYjZkNzNhYzZmYjI2YjIwYzAwOGI5M2RiNTNlOWRjMWQzZTM5MDIzNTlmZDQ3NzM0ZmUyMmE1YzY5NThmOTdlOTAwMWNjNGU4YjY0ODRkOTU0MmRiYmRmY2ZjZGMiOiJiMzgwNTg0YTNmNGUwZTU5YWRkNDc1M2MyODJmMmNmNyI6IjY4MmIwYWY2NTkyZWVmMTczZTU1OTQwN2U3ZjU2NTc0YzA2OTI1MWI5MjA5MjU3MGNiYjdmNWEyZjA1ZTg4YmVkMGFmNDhkY2RhNDViMjkzMGIxZWU3ZDVkYTc4ZGM0M2VjMzU5OGEzODU5M2RmN2M1NDgwNThlZGEzYzkyNzVjMTMwNDQ4OWFmZjk1ZjMzYTZjZDc5ZTcyNGU4ZDEyY2EwYWU5MmIyMDI3M2ViMzczNmVmY2Q1MGRjNDllODAzYWQ2MzFkY2JmNjQzNzZhNDVhNjg3ZWI0ZTQxN2FlZjA4YTNmNWY4MjMwZDNmMGIyNjZlYTczMmMyMWVkMmVlZDciOjEyMDoiMjhhNDMyNTNkOGIzNzc5NTQzMzE0MDY0MWU5ZmZkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRhNjJkZGQ4N2Y0MWM2ZGY3NTZlOGRhMDk4NWRjZDhjOTFlNzNiYTM5NWIzZDc5YiI6IjM3YTgzZWU2ZGJkZWNlMjEyNDQ2NzM5ZWEzNTNjYjk1N2I5YWE0MDljODhiZWUwNDJiYmMzYTZlNTE5OWFlYjI4ZjJiNGIwMGZmNDMzYzBjNjhkNmRiNWExOTc1NjYwMTlkYjhhNGM3YTc5MmUyODM5YTE5YTMwMmVlMDJiZWUwNDZhZGNlMDRjMWZiYmQ1YjBjNDU3ZDdjYmUyNzc5OTJjZTJjMTUzZDEzMjI2OWUyZDFmMTJiMDg0Y2YzMDI2YTIwMmI0NjY0YmM5ZDExODMyZTliOTljN2NjNTAzNWRjZmRlNTk5MWRkNDFhZWI0ZmJmOGJlYzUxMjZhOWY1MjQiOiIxZDE4NDNlMjExODc3MmQ3NmEwMjQ0YTJjMzNjNjBiZCI6IjAyOGI5MjcyN2I3NWIxNGNiOGRmZWI3YTg2YTdmZWM1MGNkNWRlNDZhYTRhMzQ2NDU3NTQ5MThiODYwNjgxOWQ0YmY4YTJlNzUzMWEwNWFlNTUwNTQ5MmNhNmNiYzhjMGU2ZDZhYjJkZWEyM2JmZjFmZGY1ODFiYjc4MGI0YTMzMTJhYTM5NjM5MzgzZmQxMGJjZjkyNDg5ODAxOTU0NzMzZjE2YjAyMWMyZTg0ODA5MzQ1MjE2ZjhmMjhhOTk3NzMzNDFlNDBjNGE2NDMwNWEyMDk4ZWFhMzlmMjZhOTNiZDU1NmM5N2YwMjA5MGUxYTZjMTgxYTRlMTNlMTdkM2EiOjEyMDoiYWI3MzgwNzMyMjhiZGYxZThmZDQ0MzBiNWM3ZDc5IjoiZTcwMmYxYmI5YTFmMzk1Yzc0ZmNhMGNlOWNkZjI5ZTczMzJjMTRhY2FjYTQ1MjAwY2Q0MzJhNTc2N2JlMzg5MjllZjhkZTQzZDBlMWE1ZTczMDBjMWViNjY5YWMxYWI5OTdiMzFjYjE0MDNhZjg0NTFlNzdlNjM1MDU5MjBhZjBmOGMzYWJmNWE5NDUwZWE0NzM3MTAzOWJhMWNmMmQ2NWExNGZhNWYwMTNiN2NlMWQxNzU4NTk0MDRkY2Y2NDYxYTM2ZThiYzI2MGU3YWJmNzM5ZDg5NTFkZGYxYTM3NTRlMmQ2NWUwYWEzMTMyMGE1ZmZjYTgyMjAyM2JjMDkwNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZjNDY5NzZkMzhhNTgxYTcwNDJhOTRlYTRiNWJmZTM1ODdkZGM2NWQxMTYyZDcxZSI6IjRiOWU4NThmYzhmMDE5MDNlNDI2MTEyMTkyZDRhZTQ2ODZiMWFlNGQ2ODNiNzVhZmIyYjhjNjM1OTAyNzU5NDNkMGQ2ZDZhMjNiNmQzNTc5NmEyZjEwMTIwM2FjYmExMDc0NzRjYTZmNGZmNmRkODdkNmI3Nzc4NWFkMWQxNjBlZjI3NTVkODQwOTJkYzcwYzg2ZGI1ZTYzOWI2ODk5NDNiMTVlZmE2NDZhZmY0NGIzZjUxZjVkM2Y0Y2Y2YzhmN2ZjNWFkZmU3YmYyZDcyZjc1YjkzYjhlZTk0ZWYzZmE2OWVhMGZjMGJiNzdiMzk4MzkwMWZkY2QzMGJjZDM2ZjUiOiJiNWU5MjU2M2RkMDMzOWRmMDBiN2ZmYTIyMzlkMjFiYyI6IjdiNmY2ZTEwNGFjYmNkNzE4ODE2MTQ3N2Q4ZTQyNWZmOTlhZGQyMmRmNGQyMmRlN2YyOGQwYTAwNzVjYTRlZjg0OGY2OGQwN2VkMjJkMzE2NWMwOGU0MDg5MGNlMDRkMWJkMDViMWE2Y2NiMmZlYzgxOTNkNWY3ZGZmYzkzZDk3YTBjMDM2YjM3NDhmNzA4YjAxMWI2ODI0N2EwMjQ5YjllMWE2MGI2NTIxNjRlNWMyZmQ3MjEwMzc3ZGU4MDRhYzAxMGM4YWEwOGExMWY0MGFmOTdlODM3MGE1OWY5MzZjZDE0YzIyZWE3YTIzNmQ5MDQxNDVhZGMwNGEyNDFmYzAiOjEyMDoiZDQzNTZjYjQxNzk1M2IwMWY3YjExMTBjOGFhM2ViIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQwM2U0OWZlYWRkNGRiNzYzNjUyZWQ1YzRiMWUxMjY4MGNmZTBhYmMzMGY0Njk2ZCI6IjIyMWM2MWQ3NjlmZWJjZTM5MTNiZmVhZDlhMjAxYTgwNWYxMTAwNWRkY2FjMTg1Y2JhZTAwY2U3NDlkZTljNDM2Mjg4OWIxYjBkOTU0NmU5MTU5OGUwZGRlZGI4OGI2NzNhOTBhY2NhNjVkN2U3MWE4NTYzNmJlMDUyZjM2MTgzOWE2NDZkYzhiODM0YzAyZjNlMjI2MWQzNzBlNmJhYzk2MzZiNzUzNjIyNWI1ZWE3Nzg4MTIwMGM4YTM0NTBkMjFiZmQxZTExYWZiM2E0NzBlMTc4ZWNmZTk0NGEyNWE3Y2QwMjU0ZTA0YTQyYjY3NzIzYWFjOGFmZmZkNTZmZWUiOiIxYTYwMjU4YTU2ZTE1ZjkyODE0YjRkMzcyMjU1YTgwZCI6ImE0ZmZhOWUzYzYxMjEwMzIyNGM4NjUxNWRhZDQzNDNjYmNhN2E3ZGFmMjc3ZjU4Mjg2NzA4MzRmNGQ5YWY2N2I5YTkzNWM3MWIyMTMwZGZiYzkyOWM0NDA5YmZmYjc5NzRmZmE4NzUyM2I1ODg5MDc3MDQzOWMzMzM0Mjg4MGIzMzMxOWM2MjZiZjc3NmMxYzBhZWI5YzJhMzQ4YTc2ODE1NzJmNGZmNzExZDk0YzE5MmYzNDUwZThiMTI3NWY5ZDAyYzc0MmEyYzlmMWRhMzE2ZTk5MThiZjc4N2YyMjY5OTE3Mjk4NmNiOWIxMGZjNTZkNWY2YjgzOTJmZjkyYjgiOjExMjoiNjI2NDZmYzhiZmUzOGIzYmE2ZDYyZjkwMTFlMyI6IjVjNzZjOTBkZWE3ZDY1OTgwNGFkODczOTYwOTA2MjU5ZmJkZGEzNjE0Mjc3ZWM1NzVkOWVlYzczMGU3NDdhMmU3YjlkZjY3MTZiNGMzOGQzNDUxZTMxOWVlZWNlZTc0ZDFmNDkxODI2NmZjOTIzOWRlODcwODBmMWFkNDM3YjQ3YzY5MDRlZDJkNTUxNDE2MWFkMjVlM2UyMzc2NTVlMDBlNTNmZTE4ZDQ1MjU3NjU4MGU4OWIyZjFmMGY2YWE3ZTQwYTMzN2ZkOGM0OGQ2OTBmZTAxM2E2NzI2NGE4MGU5YjVkZmQwMDlhOTE1MmQ1NTlhYTAyYTY4ZjQwMWEwOWIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjMzQ3MTI1OTUxMmQxZjAzY2U0NGMxZGRhYzE4NmU5YTU2YzE0MzRhNmFjNTY3YzYiOiJkZDViOThiM2IzY2YwM2ZiOTJiZTU3OTA2OGE4ODVhZmQ5ODQ2MzA2OTJlYjVmMTU1ZmE2YjQ5ZjJiMTY5MGI4MDNkMzRiOTBlOGRlM2NjMzljMmU2MTY1MGZmZmZiNTFlN2VmMzZkMzVhZDE3ZGM0ZDkxZjMzNjM2M2IwNzM0OTk2YjE2MmI1MDljOTk1NGNhYjNkZDk1OWJkZTdlNDM3ZTkxMDBkODRjNDQxMDRjNjFlMjlkYmUxMjQ5MmEwMjcyY2U2ZWVhMjkwNmQzOTBkZTc4MDhkMzM3ZThjNjUwYjMzMDFhZjA0YTllZDUyYWI5ZWEyMDhmM2M3NDM5ZDZjIjoiNTAxNjRjNjNkNDY2MTQ4YWIzNzEzNzZkNWMyYjZiNzIiOiIxMWQxZjUyMzg4OGJlYTFmYmM2ODBkMzRiYzliNjY5NTdkNjUxZWZhNTllNzg4ZGIzZDNmNmY1MGU3MjE4NGI5ZDE0ZTlmZjliYzA1ZmI2ODc1MjBjZjQyM2Q2ODE4MTJlMDA3MDI1ZWVkZjBlNzhlN2U4MTkxZTZiNjI0MDRlOGViNDAwY2Y4MzdkNzYyYTMxYWEyNDg1NTMzNjcyNjNkNmRlMDkxZmNmN2FiZWRjM2U2OWZjMTE4YjdlZmIwNTk0Yzg5Yjk2YzM4N2I3YzI4ZWQ5YTdiNzVkYjYwYjZiNTEzMzk0OWI4OTFmZjgxZWNhNTc5MGEyNjVmMTJhNThjIjoxMTI6IjZjNWYzODIzMmU4YTQzODcxYWI3MmEzNDE5YWQiOiI1MDQzOGVlNzEyNzIwYWJmMjA4OTMzMWU0YzA1OGIzMGMzMGMzZDE3ODM0YzUwN2MwMDEwYWMzZjk3NGEyNTZkMDFiMTRhNDVlOWNlNTE5M2M1Y2VkZTQxMzMwY2YzMWUxYTA3YTFmNWUzY2VjYTUxNWNjOTcxYmZkYTBmYmUwYjgyMzQ1MGVmYzMwNTYzZThlZDk0MWIwMzUwZjE0NmVjNzVjZDMxYTJjN2UxZTQ2OWMyZGQ4NjBjMGZkNWIyODYyMTkwMThkNGZiYWNkYTE2NGE0MGQyOTgwYWEzYTI3YWE5NWY4YjhlMmNkOGUyZjVmMjBkNzlhMjJjM2ZmMDI4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWMzMjZhMWUwZmU2YTk5NDIxMzk4ZGY0ZmM3ZDhmZWE2N2I2N2U1ZjVmY2Q1MGFkIjoiNmQ1MDE2YzQzNGEwZjRiNGE1ZDllMGI2YjhlMmQ4NDhhOTRmMTMyZjA1NWQyZDg0N2U1NDYwMWE0YzljZmM1OTY2YTY1NGQ2OTZmOGEzNTI5YTQ4YTkwYjQ5MWVhMGQzMWMwOGVhZThlZjM2NGY3MWY4ZWM3YWU3ZjdlMzliYjljMzMxMTM3YjI1NzgzNjJmZjE2NTYyODA5OTk0NGJhOGRlYjBkOTlhYzY2MGQ1ZWQyMjE1YjlhNzYyNmZmMWZhNjE3M2NkOGRkNjc2Yzk4OGQxNmM5Y2Y3NTBhMGQ3OTNmNTg0YzNjOGY1ZmQ1ZDE2N2JjMjc4ZjRkNzdhNjI5YyI6ImM5NGFhNGJhYTg0MGEwNDRkYmQ1OTQyNzg3YTBjOTUxIjoiZjg0MDFjNTc4ZjIwZDljMjUwZWE4NmViOTQ1MTg0ZTAwN2EwMTkwNDYyYzdhYmRkZjIzOGNlMWNlZGRjYzIzMDc1NmFhMjIyMzg2ZDhiYTY2ZWJiYmExM2RlMDA4Y2VkMTQwODk2YWM1NWJjNDdjMjMxY2M4MTM3MGNhOWZlYWRjMjI1ZTAxN2Q1OTg5MGU2MjkxY2M0Y2NhMjdkYjMwNzhjMGNkNmNiYjUxYWZiNjIyMTAyMjZhNzY4MzdjNTQ1NDcyOGNiNWNlM2FmZTczNTJlN2ZlNzU0MjFmOTQ5ODZlNmI3YjI2MzIxYmJjYTE1Yzc1YWM3YzEzZGMxNWY1MCI6MTEyOiIzMjY5OTIyYWZmYjlkNzY3ZjVhYmUwNDFjYzhlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3ZWY4MTY1MmY2MDRlODhhNzI0MTY5MjRjNTM5NzlkYzczY2FkZDM1NzVlZGExYyI6IjllY2QxOWE4ZWJhOWZiYTg0MzQ4NmUxYmJmYjhkOTA1M2M1ZTA0YjI0ZTMwMTc0ZDRhYTg5ZDgzMDc0MzlkNjUzZjg2MzBlZGRkYWZkNTE3MTljNzQ0YmNiNGJjZTNlNDQ0ODQ3NTY3YmQyY2RkZTI5OTU4NzBkMDYzNGNjMGJhMmJkZTRiNmJjMmJjNTgzMDYyZmI4Mzg3NGExYzI1YjUwYWViOTQ1YmQxMDlhMTUxNzcyYzA3NzQzOGM0ZDFjYWFlYjViMGM1NjM5MGFjMjNjNmQxMTdmM2EwMGZkNjE2MzA2ZmMyZmZjNGMxZTc2ZjkzNGIzMGZiYmM1MmVlYzIiOiIwY2M5YWU1NGM5YTg1ZjNlOTMyNWM1ZjM2NThhYjNiMiI6ImQwMTk1Yjc0NDM1MWFhMjVhNTdhOTlkZjk1NzNkZmEzY2ViZTk4NTAxMzkxNDliNjRmN2U0YWYzNzc1NmE0MzBkZGE4YWY5OGU0ZWQ0ODBlOTEzYWE4MjgyMWMwMWMxZjc1YjE4N2UxMDVhOGYzOTYyMTc1N2Q1MjJjMDgzYThkODFkN2Q4YmZlNmNmMTVjNDM5ZDA2OTJiNmFmZmQ2NTVhMTFiY2QyNDU3MDQ2ZmFlOTk2YTEwNzVjNjYwMjk4NjdiODhjZDIzYzUwM2FlMDQwMzdkZDQxZjI3YmFmZDUwMDBkMWY1MTYwMDJmOWZjYzBmMjUwMGU4YzFiMjdkZTAiOjEwNDoiMjJjMmVmZWRkZmQ1ZDljYjUyODg2MWM0ZWIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjA1MjcxYTQxZTI2M2M5MmRjMTRmZTlkZjUyMDNlNzlkNThjYzJkMTI4OWRjMzYxIjoiMmJkYTM0NDhhMjgzZWNiYTMxZTAyOTljMGE5ZTQ0NjI4Y2IyYjQxZmE3YjFhNDExMDdlMTA3Y2FiYzM4MTA4M2JkYmUwNDhmMjgwNDU2OGZkZDVmZTAxNmY0ZDYwN2Y2OTQwNDJhNDU5YmEwM2EyZGVkYTRjY2NjOGNiZTQ2MTJkOGVkMGQ0NTc1ZTQ4YmM5ZjU5ODQzMzY5ZGJlMmFmNmQwNDhlNjVmZjQyNTBlMWVlZjYxZDdiMWIzNzhmZTJmMzMwNWIxMzNkZGM3ZTM3ZDk1Y2E2ZGU4OWE5NzE3MzBmYzgwZGE5NDNhNzY3ZmYxMzc3MDdhOGQ4YTI0MzI5YyI6IjdmMTI4MDkyYTc3N2ZjNTAzYWRjN2Y2Yjg1ZWIyMDA2IjoiYWVmOWY5ODRmYjY0NWUwOGQ1ZjBhYTA3YTMxYzExNGQyZjhlOWVjYTA0N2U0YThkNTQ3MTM3OGNmYzJjZWQxMTU5ZGMwOTNkMTc0Nzg4ZTU4NDQ3YTg1NGJlNTg5NDJlZDlhM2ZkNDVmM2Y0YTFhZjczNTFlMDg3MzY5YTI2Nzc5N2M1MjVmMTM0ZTc5NzA5MDk3ZTczM2I5MDAzYjliZTBjNTY5ZmM3MGVlMzQ2MmI4MTViNjQxMGUxOTk1NGNlMmVmYWMxMjEzMDBjMDZmZDllMDA1NDJhOWM2YTVhNjgyZmUxMDEwYzE0NWFjYmJiOGI4MjMzM2JkYjVkZGZkOSI6MTA0OiI2NzNhZmVhNTkyYjJjZTE2YmQwNTg0NjlmMSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmYTA3NmYzNmNiNjc4ZTIyNzU1NjFlOTU1M2ViZGYzOTczNjBlNWE1ZTQ0NzkxYzQiOiI1MTMzMDVlODZjMGNiMDQ2YzVkMzcyMGIyNWE0MDYzOTI3NjZiZDFmYjdkZTI3NThkZTM3MGZmMmU2ODI4MWUyMTE5MjI4OTBjNjFmMzY1OTQ2MGYyMmM0NWE1Nzg5NWI0MjQ0NDEyNjJhM2JhMDYwNmRmNGUyNzAxZjM4MjgxZmQzNDM2YTRkMGUwZjhlZmVjZDIzMTgwOGE5ZWEwNjNkZmI3MjUwMTVhOTFmMjdjYWRmZTc5MDlhMGVlMTA5ZWFjMzkxYWM4MDdhZmVkMTc2N2FlMDUxNWI5YzFiNTFhZTlhNDhiMzhmZTdmZWM3ZmUwZGRlZTU2MmM5NDVlNWFlIjoiMWVjZDUzZDk0ZmUyODcwNDdmZjE4NGU4YjliNzFhMjYiOiI1ZmYyNWY3YmFjNWY3NmY1MzNmOWVkZmZkZmQyYjI5OTFkN2ZjNGNkNWEwNDUyYTEwMzFkYTYwOTRjZDQ5ODI5N2ZiMmEwNWFlOGRiNzFjYjM0NTFlNGFjMzNhMDExNzI2MTkwMzVhOTYyMWQyZDU0ZjgxMmVmNTM0M2UxNGI5ZGVkYzkzODM4ZTRjZjMwZTIyM2QyMTViNGQyNDc2ZWE5NjFhMTdhYzcyOTUwNjlmMjViMmExMmQ2ZTJlZmU3NmQ5MWY0NTYzMmM2ZDRlNjFmZjE5YTk1ZDVhZTM2YWY5NjBkOTUwNTBjZTk4YjU3OTFkZjBiN2UzMjI0MTFjODg0IjoxMDQ6IjA3OWU4ZGI5YzNlNmVkZGIwMzM1YjFjZjY0IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2U5ZGFmYTBlN2U1M2E4NzY2ZmMwYmMzOGZiYTgwN2QwNGUxNGU1ZWQ2MWJjMjM0IjoiYjU4NWI4YmY2MzQ3NTdkYWMwMTVmMmY2OWYyYWU2NzQzNzJhNjY0ZjIxMTVhZDJkMDNiZDNlMGMzMzUzMDZiMDJkMDk0N2QzY2RhNTk5MWY1YzBjMjVmMTJlYWQyYzNjYzJkNjVkNTc1ZmQ2NzA5MWM3MGJjOTNkZGI0YjFlMjFmN2IwZmM2ZTZhZTY1MmRlYTkzYTY1NjRmZjEzNDg5ZjkyNzk0MmU2NGRkOTRiZjhmODIxYzdmZmRlZjE2ZGY1OGJkODMwNmE5NTc4MjFhYzI1NmRhNmYxOWM5ZDk2ZTQ4ZWVlODdmODhhY2I4M2JhZTA1ZDY5M2I3MGI5MzM3YiI6ImZkMDc1MWFmNDk4MTRlZTk4YjJiMGNkZjczMGFkYWE2IjoiMWNiYTQ4OGEwZmM4YTAxMmY5YTMzNmNjN2IwMWNiY2M1MDQxNzhlZWIwODIzN2RiZWRiYzZjN2FjNjhmZGYzYTY3NDI3NTFhMjA3ZTQzZDQzMDY4YWJmNmVmNGUxMmE1ZTNjMTdlNWEyZjkzOThmYzA0Y2VkNjczNzdjYmI4NThmZDYwMjBmYWQ2NzVhODgwYWRiMjQ5ZTRhYmE5NGI5NmVmYTUxNWQxY2RmNWMwYzMwNzFhMjdhMzI0NTk2ODg2N2VhOTRiMmJmYzIwMjhhNjdiZTM0Yzg0YzNmNDc1OTQ0NDk3YWE4Y2ExYWIwMDlmOGU0YjExYzgzMDhjMTk5NiI6OTY6ImU1ZGM5MmY0YWQ0MDAwZTliNjJmYjYzNyI6Ijk1ZjQzMjRiMDY1NmJlZjE5ZWNhNTU3MDU0OGZjNmE3YTk5MjNmNGUyYTdlNDIwNjY4OTFiYzEzMmZkNzNiYzFjOTA4OTc1NWQ5OTY3NTZkZTAwNzI4MjRlNjljNDNmMmRiOGJhMmJmNmY5MGQzYzRlYWZjMDcyMWNlYWNjY2UxYWY4OTZmOWZiMTVmYjE5YzQ3NDY5NzliNmQ5NDVmNTkzZmFkNjFkNTUwZjgxZDEyYjU5NDVlZDcyOGMwMjkzMWQ3ZjhkOTE3Mjg1YzIyYTNhZjc0OGQ3NWE2YmYxNjNmZGRkODRiOTQxZDg1NjRjMWE2MzE5MmM4MTZhZDZkNmQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhhMzI4NTU0ZmVkNjhkYzQ4MzhmYmM4OWZkMTYyYzk5ZWMxMDViMzY2NTFhYmJjOSI6Ijc1OTg2ZjU2OTcyYzA0NWM4NTBlZDY4YWViMjI5ZjIwM2IyMjhmZGZjMzZjYWQ2YjE2ZDliZDEyMDM3YzQ4NzAwZDIwZDgwNjJhOTgzZmZlY2E3NmI4ZDM2YTY3ZWY1MWJjODg1MzcwNmU4M2EzNGU0ZTIzZmY0ZjRhNGViOTQzZjE5ZGJlODVlNDU0MDQzZDc5MDZiZTY1ODdhODUwNzlmOWNjZDI3OTYyZDI5MDUxMTdkMmRiZWFmNzI1ZDZmZmU4N2JlZjUyYjIxMzhkYTE1M2VmMjliMTgwNjViMzM0MmIzZjlkMDc4MzdkNTdiOGJjNWYyNTk3ZGUwNmM1NGYiOiJlNGY3YzY5YTFkMDI2ZWVlYmZjNDVlNzdiZDdiMzUzOCI6ImUzNDlkY2VkYjBiZmNjNzcxYzgyMGYwZDUxMGI4MGNlZjMyYWUzMzI2NDg0ZTI1YWExODMwMTU5NDFlNzg0NGJjNDZmNjE3ZDVlNjFmZDY0ZmE3MTc1OWU5MGZjYjcyYWUyMjBiY2Q1MDdmMGZiMzg5YjY4OWRkM2ZhMjliM2I5MzdlZGVkODVmMjZhZGE5ZTBmM2Y1MTA5ZjgyZmVmNDdjN2ViYTczMTMwNDk3NTBhZDE3OTY5ZTc1NTBjMGQ0MDkzZWQxOGVlMjc4NDNkMDgyYmNlZThiZjNmYzc4MzNkNTY5Yjc3MjM5OTg1OTVhNWExZDg3MTA4OWZkMjM4ZGEiOjk2OiI4ZTgzMjA5MTJmZmY2MjhmNDdlOTI0MzAiOiJhMWVkNjVjZmM3ZTFhZWNjZDA1MzFiY2UxZGM3NDljN2FhODQ0NTFlYzBmMjk4NTZmMTJmMjJjNDEwNTg4OGM3ZDYyZTJlMmZjOGFkN2E2Mjc0ODYxMGIxNmU1NzQ5MGYwNjFhZDA2M2M4ODgwMDAzN2Q3MjQ0ZWU1OWUxMDlkNDQ1MjA1MjgwNDczMzkwMzM2ZDdiNjA4OWYzYTc4MjE4NDQ3YjFiMjM5OGM0ZDBiM2FhYzhiNTdhMzU4OTFhZDYwZGMxYjY5YWQ3NWUyZTg2MjQ4Y2VhYzdiYjRjZjNjYWFkZTRhODk2ZTVlZThjNzY4OTNlZjk5MGY2ZjY1MjY2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ZTdmNmZlYjQwMjIzMTJkZTVjODA0ZWQxZDdhMzc1ODBkNzQ0OTkxMDdmOGNjOGIiOiI0ZjViYmRmNTc1YWI4Zjc3ODU0OWY3NDlmMjI2NWUxN2RjNzIyNTcxM2U3M2VlNmQ3YmUxNjNmZjcwNzE1NTdkY2MyMjQwYjA3MDVjMDc5MDA4NjA1ZjgxMzk2NDE0YWM2NGYwNmIxYjYzNzg3NmUwNGMzZmNhOGQwZmE1NzZjZWY0ZGQzZGM1NTNmZDY4MDhlYWYxMjBmODM3ZjliYjFkOWRiYmQ1Y2Y2N2VkNDk3MTY3ZmM3ZGI4OWQzYTg0MTUxYjgxYWVhYjBlOTIxMDU3ZjEyMTU4M2RmNWVkN2Y5NzZiMjA2ZWNlMTdhOTEzZjIzNDg1Mzg1ZjY0YzQ2MmE4IjoiNmNlMTM0ODVmZmJjODA1NjdiMDJkZDU0MjM0NGQ3ZWYiOiJjNjgwNGEyYmQ4YzM0ZGUxNGZlNDg1YzhiN2NhYTI1NjRhZGFmOWZjYmI3NTRiZDJjYzFkODhiYTkxODNmMTNkMTEwYzc2MmEzYzVkMmFmYzBmYmM4MGFlZGNiOTFlNDVlZmU0M2Q5MzIwMDc1NDIwZWU4NWFiMjI1MDVmMjBlNzdmYTQ2MjRiMDM4NzM0NmMxYmQ5NDRlOWNkNTQwNTViNTEzNWM3ZmM5MmU4NTM5MGVjZjQ1YTcwOTExMzZiNDdlM2Q2OGQ5MDc2NTk0Y2ZhZDM2YzM2MDQ3NTM4ZTY1MjE3OGMzNzVhMmZlNTlhMjQ2YTc5Nzg0NTc3ODYwMTg5Ijo5NjoiOTc0YmQwYzRhOGNhYzE1NjNhMGUwY2UwIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDZkNmU5ODJmZWZmMGU3ZDA0YTg0Mzg0YzU2NzM5YjY5NjI2ZGRlNTAwZTRiN2ZiIjoiYTUxNjBmYjJkMzk3YjU1YTdlYmEwMmRmMzNhMDQyNDA0MTg4ZjAyZjQ0OTJkNDZmNGVkYzAzZmM2NzcyM2Q2NGY1ZjdmZWQzYTYwNzI4NDM4NzAzYzYwNDU0YTMwZjQ3M2FjOTE4ZmZjOGY5OGJlNWM1ZTk3NzllZTk4NDQxNWU0MTVjZTNjNzFmOWFjYzNmODA4ZDIxNWJlNTg1MzVkMzE0NGNlYmU3OTgyYjliNTI3ZWRiZTQxNDQ2MTYxMDk0ZDZmYzc0ZGVjMmUwYTFjNjQ0YmJjMmNmNTc3OWEyMmJkNDExN2E3ZWRiMTFkMTNlMzVlOTVmZWViNDE4ZDNmMCI6IjcxYTZkMWUwMjJhNmJkZmY2NDYwYzY3NGZiMGNmMDQ4IjoiNjdhODQ1NWM3ZDNmYmZkYmEzYzVlYzVmNDBlMGJlOTM1ZmJiOTQxN2U4MDU3NzE4MzJmZmFkMDZiYTM4YTYxYjgzNzc5OTdhZjFmNTg2ZGMwZmExZTNkYTBiMzlmYWNkNTIwZGIxZjBlYzJiZGYxOTA0YTNhODk3ZjBiNTA3YzkwMWZhYjMwYTg1ZGU1MWVmZmE5ZjdkNDcwM2NlZWIyY2E3MmFiZTBiZDE0NmJhMGJkM2ZmZGVlMTE2MjgzMTBkYjdkNjVlYTEzNDNiMDE4MDg0ZWEyNDE0OTk1Zjg2ZmVmYjQ1YmE5MWE5ZGMyMjM2ZDkyMDc4YjQzMDU2NzFiNSI6NjQ6Ijg0ZjFlZmQzNGZmODRlODMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5OTFkY2FhMmU4ZmRhZDJiNGU2ZTQ2MmEzYzA2Yzk2MDY3ZWY1ZTlmYjEzMzQ5NmEiOiI5Y2QwYzI3ZjBjMjAxMWMxYWI5NDc0MDBkMjg1MTZjN2Y0NmQyMmE0MDlhMThmZDM1YzFiYWJmNjkzYjgwMzBkZmQ3ODIyZDliYTAzYmI4ZmQ1NmEwMGY5YzcxNDljMDU2NjQwZGRlNjkwODg5ZDJmMjM5NzhlZWViMjhjY2MyNmUyZmMyNTEyMjBhMzY4MmM5NjNmNTU4MGM2NTRjMWE2NzM2Y2NjYjFiOGVkMTA0ZWM3MzkwMDIxZDI0NGJkOWY5MmFiZGU4OWUzOWE0YjgzZWZmODIxMWM4YTYyNTliZDZhYzJhZjFkYTdkZmI4Y2YxMzU1MjM4MDU2YzYwMzgxIjoiOTc4OTEzZDJjODIyYmE3Y2M3NTgwNDFkNWVlNDY3NTkiOiI1YTk0ZGM4MWFmMDExYThhZjI2MzMxOGI2MDIxNWI5NzUyMjkyYjE5NGI4OWY2ZmMwMTNiMGZlOGUyOTEzM2RlNjMxZDk4MTg2MmYyYzEzMWVlMzQ5MDViZDkzY2FmZmMzYjhmOTFhZWIwMjY0YjI3YTUwOWU1YzZhNDFhZTc4MTIwOWY4YzU4OTVkMGQzNWIzYzVlMWFlMzRhMWE5MmEyYjk3OWUwZTYyMTMyMDUxMzk0OTQwZWE0ZDliZmZmYjhkODliYTFlODMzMWIxNWJkZjA1YzQxZGI4M2E1Nzc0NWE0YTY1MWE3NTdjYzg2NDhhY2RjZjg1MGEyZjI1MzY3Ijo2NDoiMTVkNDU2ZGE3NjQ1YWJmMiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYyOWNmZjAwNzgxZjU5MTY5MzBmMTI1NDg5Yzg3ZDIxZjY1OTMzMjRkMTUwNmY2NSI6ImEzZTg1OTU3NDdiNzE0N2Q0NzFhYzRmZTM4MDE0YmY0YTQwOTkzMWUzZjQxOWZmODhhZTI0OWJhN2E3ZjUxYmQwZWRlMzcxYmYxNTNiYWI0YjI4MDIwYjdhODJhOGNhMzBiNzVmMWUzYmNmZWUzYzEzZGI4MTNjYmM4NTEzOGVmMDU4NzRkZWRiMTRhNmU1YjZkMDZkNzU4OWE4M2JkNWUwNTJkYzY0NDMzYThlMjRjMTE4OGI5NDcwZGRiMjUzNmQxM2I0YjdiZmYwYzVhZmNmYWE5YWEwMTU3YzNhYWUzYjE3NzRkZjJkZjE0Zjk2NWQ2ZGVlNDMzMmVkYmE2N2UiOiI1MGRiN2VlMjVhOWY4MTVjNzg0MjM2ZjkwOGJmZDdmMiI6ImVjMTQ4MmUxODY5MmJjZDY4OTRhMzY0YzRhNmFiYjljM2I5ODE4YmIxN2U1ZTFmYzllYzBiNDE3MDJjNDIzZjNhNjA5MDdlOTRjODg4ZmFkOGU3OGY1MWUxZjcyNGIzOTk2OWJhN2IxMWQzMWI1MDM1MDRiMzA0ZDVjNGI0Y2JkNDI2MzRmNGVjNTA4MGE5ZmU1MWM4MmUxMjFhZTE5MTI3MGRkMmMzMDdhZjg0YzgyZDg5MmQ5ODI0MTNhNTBjY2NlMzM2OTgwNTRmNzYxYTNmYTkzZGE5YTFmY2EzMjEyOTZiMzc4YTUwZDQ1OGJhNzhlNTdhNzBkYTQ2NzYxNTAiOjY0OiJhMWUxOWVmMmYwZDRiOWYxIjoiZWVhMTgyNjFhNGRlMzFkODYxOWU3NzAwNWViYmIzOTk4YzVkY2ZhYzJiYzEyMGFlNDY1ZTI5ZDZiNGM0NmRlN2U2YzA0NGM4YjE0OGZmZTRlZGE3NjI5YzI0M2RmOGFmNGU3Y2ViNTEyZDU3NTFhM2VlNThkZWZiMDY5MGI2ZjI2YjUxMDg2ZGVkZmRlMzg3NDhmNmYwYmJlNmI0OTVmNDMwNDM3MzE4OGU1ZDJkYzkzNDYxYmQ1MWJmNzIwMTQ5YTdkM2FhNTQzNjIzYjEyMmI5YWYwMTIzYjJjZGM5MDIwMTM2YjA0MWE0OTQ5OGVjNGFhNjk2YzJkM2M0NmQwNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjA4N2UxNDA5MmRhZDZkZjg5OTY3MTVjYjFjZmNhOTAwOTRmMDMwMzI4MDgwZmZkIjoiNmQwMzk1MTMwNjE5ODBmYjE5NWJkZjJmN2M3MDc5Y2E0YjdlMGZkZDUwZDk0OGNiZmFiNWJhMTBiOTllM2FlYTI3ZjA4YWJkMDAwYzQyODg1MWRlODJjYWNiMGQ2NGMxNDZjZDk1NjdlOWQ1NWI4OTgxOTg3NmQ2YTYzNWJkNjhiY2FmNDdmZmE0MWUwMmQ5ZWU5N2Y1YTIzNjNiZmU2MTMxYWU3YTIxZWE1MTMwYWU5NTNhNjRkNTdkNmNiZmQ0NTI2MGM1ZjE5NDYzODhkNDQ1Y2U5N2QyM2FiN2JhMzFhNTA2OWE0ODk2YmM5NDBhNzFkZTMyYmRlMDJiYzE4ZCI6ImQzMDUwNGFmYjZmOGI2YWM0NDRiNGE3NjExNWQ3OWQxIjoiZDk1ODQ1ZDI2OGM4ZDhmOTEzNWQzMTBjMzllMzBmNTVmODNlZjdmZmVlNjllNmJhMWY4MGQwOGU5MmVkNDczYjVhYzEyY2M4ZjdhODcyYmZjOGIzMjVlNmI4ZTM3NDYwOWM5MGJlYWY1MmQ5NzVmNzFjYWVlZjVlZTRjMTNkZTA4ZGNlODBkMzU4ZWUxY2QwOTFmYWVhMjA5YTI0ZTMzOTJhZGNmZTAxYWViMmIyZTE3MzhiYzc1ZDRhOWI3Y2QzMWRmN2Y4NzgxNDFjZjI3OGQxNTBmNmZhYTgzZmIzYTJmZDEyMjU1NDJhMzljOTAwNjA2YzYwMmYxNWMwNmE0ZiI6MzI6IjU0MTJmMjVjIjoiMWU4MWE0YzEwYTM0NDBkMDAwMmRkYzFiZmE0MmViYjA4ZTUwNGZjYzhmMDQ5NzkxNWM1MWI2ZjVmNzVmZWUzZjBjZDNlOWM1YTgxZmY2NTI4ZTBmZWNkNjhhMzYxOTIxMTRmMTdmYTFhNGNmZTIxOTE4ZGFjNDZlM2JhMTM4M2MyNjc4YzdhNjg4OWE5ODAwMjRlZTJhMjFiY2Y3MzdmNzcyM2I1NzM1ZTFlYmU3ODk5NmY3YzdlYWNlMjgwMmViYjgyODQyMTY4NjdkNzNiNTNhMzcwYTU3ZDViNTg3ZDA3MGE5NmRiMzRiNWI0ZjVhZmU3ZjM5ODMwNDk4YzExMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2ZjNzZkNjI3Yzc3NWRlMmY3ODkyNzlkYzdiNjc5NzlhOWYxY2MyM2M4ZGNhYmM5IjoiOTJhNjBkMzhmYzY4N2I5MmQ0NDYzNWFhZmVlNDE2YTE0MmQxMWEwMjU2ODBlNWFhNDJlOWJhNWFhMDEwNDYyOTkxYWQzZGQ3MzI4Y2E0YTY5MzY3MzQxMGY5YmJhMzdmMDVhNTUxYjk0OWFiMGQ0M2ZjNjFlZjNiODk5NmRkM2ZjMWIzMjVlNjZlZWM2Y2M2MWVhNjY3NTAwZjgyYTgzZTY5OTc1NmExMzlkMTRiZTZjYTk3NDdlZDM4Y2Q5YjFkOWRhMDMyZWNlMzExMzMxYmRjZDY5ODY2NmRkYzk3MGI4YmUyYjc0NmVjNTVmZTYwZTY1ZDdhZTQ3YzZmODUzYyI6IjhmNmZkNTNlYjk3ZTEyZGNkNGQ0MGYyODQzZTI1MzY1IjoiZTU2OTk1ZGY3M2U1MjYwNmExMWRlOWRmNmM3YmZiMGVmOTNiODZiZjY3NjZlMzE5YWVhNTkzNzIwNjAyOTRiMGUxYjEzYzYyODhjMjMxMGE0YmVmNzI1YTJkZGRiMTc0ZjNlMTIyODY0OTg2MTc1NzkwM2M0NDk3YTBlZWM5YzE0MTQ1NGZjNzVmMTAxNDM5YTIxNTBlMzY4ODU3YzRmMGY2ZTUxNjFjNDJjNzdmNjMyYmYxYzIyOWE1MjU5NWNiZjE2ZTkwMThkZTlhOGY2YTFlNmI4YjE4YmQyNDRmOTNmMDAxZWIyZWIzMTU0MDVkMjIzYzBkMjdlY2U5ZDRkOSI6MzI6IjYxM2JhNDg2IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjEwOTc5Nzk3ZmI4ZjQxOGExMjYxMjBkNDUxMDZlMTc3OWI0NTM4NzUxYTE5YmY2IjoiZTNkYzY0ZTNjMDI3MzFmZTZlNmVjMGU4OTkxODMwMThkYTM0N2JmOGJkNDc2YWE3NzQ2ZDdhNzcyOWQ4M2E5NWY2NGJiNzMyYmE5ODc0NjhkMGNlZGUxNTRlMjgxNjlmN2JhZmEzNjU1OTIwMDc5NTAzN2VlMzgyNzllMGU0Y2E0MGY5Y2ZhODVhYTBjODAzNWRmOTY0OTM0NWM4ZmRmZmQxYzMxNTI4YjQ4NWRmZTQ0M2MxOTIzMTgwY2M4ZmFlNTE5NmQxNmY4MjJiZTRhZDA3ZTNmMTIzNGUxZDIxOGU3YzhmYjM3YTBlNDQ4MGRjNjcxN2M5YzA5ZmY1YzQ1ZiI6ImNhMzYyZTYxNTAyNGExZmUxMTI4NjY2ODY0NmNjMWRlIjoiMjM3ZDk1ZDg2YTVhZDQ2MDM1ODcwZjU3NmExNzU3ZWRlZDYzNmM3MjM0ZDVlZDBmODAzOWY2ZjU5ZjEzMzNjYzMxY2I4OTMxNzBkMWJhYTk4YmQ0ZTc5NTc2ZGU5MjAxMjBlYWQwZmRlY2ZiMzQzZWRiYzJmY2M1NTY1NDBhOTE2MDczODhhMDVkNDNiZGI4YjU1ZjEzMjc1NTJmZWVkM2I2MjA2MTRkZmNjY2IyYjM0MjA4Mzg5NmNiYzgxZGM5NjcwYjc2MWFkZDk5ODkxM2NhODEzMTYzNzA4YTQ1OTc0ZTZkN2I1NmRmZDA1MTFhNzJlYjg3OWYyMzlkNmE2ZCI6MzI6IjI4ZDczMGVhIjoiZGFmZGUyN2FhOGIzMDc2YmZhMTZhYjFkODkyMDdkMzM5YzQ5OTdmOGE3NTZjYzNlYjYyYzBiMDIzOTc2ZGU4MDhhYjY0MGJhNDQ2N2YyYjJlYTgzZDIzODg2MTIyOWM3MzM4NzU5NGNkNDM3NzAzODY1MTJlYTU5NWE3MDg4OGI0YzM4ODYzNDcyMjc5ZTA2YjkyM2U3Y2YzMjQzODE5OWIzZTA1NGFjNGJjMjFiYWE4ZGYzOWRkYWEyMDdlYmIxN2ZhNGNhZDZlODNlYTU4YzNhOTJlYzc0ZTZlMDFiMGE4OTc5YWYxNDVkZDMxZDVkZjI5NzUwYmI5MWI0MmQ0NSI6MAorCitBRVMtR0NNIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTkyX2VuLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczE5Ml9lbi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZTU2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczE5Ml9lbi5kYXRhCkBAIC0wLDAgKzEsNjc1IEBACitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY4MDIyYjg5ODgzODNkNWNmZDdkOWUwZTIwODE0NmU3ODY4ZDNkNzE0ZmU4NTc0NCI6IiI6IjVmY2NkOGNiNTUxY2ZjOWMyMDk5OGRhNGNiOTgxZDQ5IjoiIjoiIjoxMjg6IjFiNWM2YzlhMjhmNWVkZmE0Y2Y5OTE3NmIwZjE0MDc3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTdkNDQ1NmI4ZTE2YjgyMjgzYjY3N2JkOGM0YjFmNTZkYzdmMTUzYjVjZmE3NDZmIjoiIjoiMDgxZGU0YTNmNzFmNWQ2ZmRmNzgwMWZmNmM2NjdmN2QiOiIiOiIiOjEyODoiOTBjMjcyOWM1YmEwNGY4ZjVjNzM3MjZjOTEwNjQwYWEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1Nzc5YjYwYjUzNmIwOTZjOTM0OGNkOGRhZmIzNDUxMjgwNzkxZTMxOWI3MTk4YzIiOiIiOiI2MmY4ZTE5NWJjNzk5NTdjYThjZTk5YTg4ZGVkMWEwMiI6IiI6IiI6MTI4OiI2OTlkNzFiYjYzYzY2OGI1MzNjMzU3NjYyZjg2MTUxMyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk2NmNmYjA3OGY2OTVjOGFkODRlZGUyZmI5NmZiODk0ODhmYTI3MWRkM2I1MDM0NiI6IiI6IjRhN2I3MDlkNDU3NDVkOTRjNTQzM2IwMWZjOWQ1N2ZiIjoiIjoiIjoxMjA6IjRhOWJkMjEzNDIwNjI5YTVmNmU0NzE2NTAwNjBlMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNjNjllZDY4NGFmMmMyYmQyYjNlMmQyZjlmYWY5OGFjZjgwNzFhNjg2YzMxZThlMyI6IiI6IjBiZDQxOTdlNWFiMjk0YWI3YWIxZTZlYzc1ZGIyYWMwIjoiIjoiIjoxMjA6IjY2MzJiNjE4YjRjYWI5NjNkZDY3MWZkNTNkMjA3NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk5ZGVhZmM1ZWM2MTU1MDQzYjUzYTg2ZDQ2NmMyYjY1MmQ1OWI3Mjc0YmI4NDRlZiI6IiI6IjA5ZDE4ZTg1ZTVlZDM4ZjUxZTA0YTcyNGZhZjMzYTBlIjoiIjoiIjoxMjA6IjkwYmZhZGUyZjA3ZjM4YjIxOTJlMjQ2ODliNjFjYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVjMGM3MDZhMWZkNDgwMDVlMGZkMGVkOTFiNGQ5ZjAwMjhjNTAwZGNjYjI4Y2E3MyI6IiI6IjU5NTcxNmUxNTQ5ODQ1NDU3N2QzNTgxZTk0ZjVjNzdlIjoiIjoiIjoxMTI6IjhiMTBlYWNiMWYxMjdmNGM1OGNiYjhjMzUxNmMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZThlMTI1NTA3ZWExNmQ1MjgyZmU4YmFjNDJkM2NiNDkwOGI3MTdmMzQ1ZTZhMzgiOiIiOiIwYTdmNjRlZGI4Y2Q4MDUyZmNkNWI5MmUyMGMwYmMyZCI6IiI6IiI6MTEyOiI0NjdhMmMwYmExZDI0YzQxNGY3NTgyMDBiOGE0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDIxNzZhNWE1ZDhjYjhmNWNjZWUzZjY2YTIyMTgxNzY1Y2U3MzA3NTFjMTM1MTk4IjoiIjoiYzE5ZWQxZjUyZjVlYmJjZjg5YWIxOTA3YjllYmM3ZjciOiIiOiIiOjExMjoiNjUyNWJlYjU4NTZkNmYyOTEwNTc3N2UzMTQ1NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ0MzRkNmJjZTNhMzM1NTE3MzNkN2FmZThjZDQ3N2E3OWJlOGVlYWMxOWJjMGEwNSI6IiI6ImIwZWFmZGYzMjY4ODZlYWFjYjc1MGRjZjJjMTA0YWJlIjoiIjoiIjoxMDQ6ImFiOWY3OTIzYTNiOTIyOGNiOWVjZDdmOTA3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzk5OTRjMjUyMGE2MTk2Y2MzZjNlOGM2ZTQ4MzMyODZjZTM3Mzk5ZTAzNzk1NjNiIjoiIjoiZGJmOWM0MDI2NmQ5NTE5MWQ3MDczOWU5MzJjZDg1NzIiOiIiOiIiOjEwNDoiYjI5YWNhZjVhZGRkNmIzNzkzMTU1MzUzNzUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxZjI3ZDA1NDExNGEyNjRiMzdlZTE4MjFhMDc3NzczNzUwY2M3OWQyODU5NGY1MDYiOiIiOiI2NzM5ZDQzMDkyNjIwZjQ0YjU3ZTY1MDM1Y2UxNDU2NSI6IiI6IiI6MTA0OiIyNWUwNDM0YTM2NjA3MDRlZWU0YmI4Mjk2MiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGU5N2QxNWY0OTkyYTYzNTRlNDM5NDRmZDM0NmRhNjVhYzFmMGYxMjI5MTg5NDQyIjoiIjoiMzJhNjRlODI2YjUwMGQ3ZTg1ZjRjNDJhNzg0ZjdjMTkiOiIiOiIiOjk2OiJkYThmM2UwYTZmMTU2ZWMyNjBhYTM0ZmQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI3NTA0ZmM0N2E5ZTlhODVlYWRlZDM3ODJjYjViMDg4MzU5ZWExYzBhYmJmMjczMCI6IiI6ImM1NWM4ZGMzZDZkMjk3MGM4MTY1OWYyZjg3YmY4NDlkIjoiIjoiIjo5NjoiMTEzZTYzNzUzOGRlMjkxZTI0NjNhYmNmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkNWZjNjdmNzNkZTczNjc2OGU1YzY0YzM3NDU5YzVlZWMzZDI3ZjdlMzM3YzM0NmMiOiIiOiIyNjkxNDMyZDM5MzVkNGVhOGNiOGY3YzE3YmVmMzU1OCI6IiI6IiI6OTY6ImMwYWY3NmQ2ZjYyNDMwMTA2Y2E1NDkyOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjI4MjkyZWUyYzU0MTE5NTExYTY3ZGIwZDIzMTc0MzNhYmFlY2NhYmZkZDVkMWYxIjoiIjoiY2Y5MzMxYTFiYjM4NTFiMmZjM2FlZWQyZDFhMzNlYjgiOiIiOiIiOjY0OiI4ZTE0Yjg2OWE5NWViMTJlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMDQyZjkyNDQwNzk3MzYyOTFiYTdmZTFmMDMwY2JhOTk2NzJhOTdjZTM2MWRjMTQiOiIiOiJhYWRmYTYxOWJhZmIyMWI1YzczOGI2NWQ2MzJiYjhiMiI6IiI6IiI6NjQ6ImFkNmY1MmYyNWFlYTFjNTUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ5YjRlYjAwYWMwM2ZhYmI1MzA0YWMzODQxNGY3NzgyY2IwMTg2NDM2YTRiOTAzNiI6IiI6IjgwOTkzOTI2MDExN2I3NTlkOGRhYzFhNjljMjdjMTJhIjoiIjoiIjo2NDoiMWY3ZDBiMzEwNGFhZTUwYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjUxMjhmNGNmOTFkNTNiM2E1MGU5Yjc2YjBiMjdkYTMzY2JkNGI5MzQ5ZDg5NDEzIjoiIjoiNjQ0OTA5ZjVmYmNkNjFkODUwZTQzZmJlZjFmYjQ1NGYiOiIiOiIiOjMyOiIyZGRiZjcwOSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2FjN2FiMmFkZTdhOGUzOTdkNjZiZTZkYzc2NzFmMTljZDM5YWQ2NTQ5MGYxNzEyIjoiIjoiZDE1MjM1OWQ3NjVmNDFkZDljYWJmNWM4ZjM3Y2ZkOGEiOiIiOiIiOjMyOiJhNmU0ZTMwZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjljMmRlN2UzYzc0YjdlMzE4NDEzYTMyODkyZDRmZDA3MGRlOTg4MjE1OGJiYzgyIjoiIjoiNjM0MTBjODNmYTM2M2E2M2ZhNzgzMDNiOTk5NGI2YzYiOiIiOiIiOjMyOiI0OWM1MTRhYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY2ZWJkYzIzMzIyNzY3ODRhNjliNmJiMTM3MTYxMjEwYmFjOWYxZDZhMzZkNmE0YyI6IiI6IjY0N2Y0MWI2MGM2YTU3OTA4NmJhODg1NGQwNDM0OTVjIjoiZGEyNmVlYmQwNGMyN2JiZTdmYTdiNTRiODdkM2I3MjI3ZjA1NmRkOWMwODVmYWJmY2I1OWVjNjY1YTI1N2M2ZGU2OGZkMmMxYzUxYWFkNWU2MTg4ZTAyYTU2ZjcwYWFjNDliYTQ4OTgwMjI0N2NhMzI3ZGU1N2VhM2NmYTg3ZTcyY2FlN2RkODJiNTAzNDFhMjEzM2IwM2NkMDAyNzIxNmZjZDk0Y2Y0M2VjOGE0OGUxYzA0MTQ1YjU5NzkyNGIzN2Y3OTc3ZGIzZmYyM2I4ZWRjOTEzMzU3MDM3ZDBmZTAyYWZlMmJiYTZiOTFlMjc1NTRlZGJmYjc3ZjUxY2M0MSI6IiI6MTI4OiI0MjBiMzIwYzJkNjE2YTBiMTFhNzYwNWE4NGY4OGUyNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI2YjA0ZDg0Mjc1ODJiMDQzMThmZWZlYmFjMmEyMjk4ZWMzY2U2MTE0NmYzOWEzNSI6IiI6Ijk5ZjM0NDljODUzODQxNGU3YWI1OTViOTJhN2U2ZTEwIjoiZWRmYzJhYThlZDkxY2ZjMGUxMTdmYzllMmQxYmZlODQzYzdjZjM2NWEyYjZjYWJkNDI1OTY4NmNkN2FlZGU5Yzc0NTM2MjM5NjdhMzBmZmJkNTJiMzBmYzIwNTIwOGJiMzQ2ZmZjNzA1ODQ0NzhmNWYzOWE3OWQ0OTcxZWQ3MWNjM2RkMDIwMGE4OWFlZjZhZWNkYTBhMWYzYTRiZjI5MjliN2I5ZTE0MWJlMGRkZDM2NzFmNzI3ZTVlNzkzZWYwODVmNTJlY2I3N2EyNjZiOWEwMmEyYzcwMGI2M2Q4YzQzZGEwYjU2OTUxMDI4NWU5OGI1MzBhYmNkYmY3NzM5ZCI6IiI6MTI4OiIwOTFjZmMzOGIyNDg0NjBlYWZiMTgxYWI1ODYzNGEzOSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgyYzgxOTdlNjY0MWQwODMyNjM5ZTJiMWQ3NjkxZmJhYzc5NjE4YjJmNWRiNDViZiI6IiI6IjY5ZTFhM2U1ZWVkNTRiZWRjOTQxNjQ2ZTNhZDI1YTZjIjoiZDBmY2I0ZjRkNzY0ZWZjMGZiNTJjODEwOGU2MWI2N2ExMzg2ZjFhMTNjMTc2MTk0MWNjOWEyOGM2YWQxNWU3ODQ3NGNkMmE2NWFlOTQ3NWQ3MGQ5Yzg0NWYxNGJmNGQyYmQyYmM0NmMyOWU1MDdhMzQ3MzkxODI5ZTBmMjQ0OTViMDI2ZjY4MWMzODdiM2U2YWVjOGFjZmE1ZWNhZjRjM2NmZTc5NmMyMjQ2OTQ3OGVlNjc0NGNmMDRhMjJlNmFlYzgyNDg5ZjUzMTA5NTUxZjU4Y2M2NjAyOTMzZDE3ODBiOGI0NWI5MzNmNzZhOTRlZjY1MmE4Y2U4YmFjMmNjNiI6IiI6MTI4OiI4ZTc0MzQzYWU4Y2YxY2RkYTQ5NjljMWE5NGFhYjVjYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFhMzQ5YmE5NjBiMmM4ZjQ5YjdlNTMxNDkxMWJhOGRlMzU4ZjJlNzRjZWRkZjEyNiI6IiI6ImY1OTk4YTYyZWM1MDdjNWZlNWIyODBmOWM1N2FjNjI2IjoiNzg0NDVlY2VlY2YyZTZkMmVjZjI1ODlmZDI0ZTg1NGJlZDNhZWNjNjNhZWY5MzRhZWM5YWVhOTNkY2E5NWQ1ODYyOTAwMmE0YmE5MWU5YmY2ZDEyZTEzZjBhODQ0OTc3YjNjMjcwMDY0NTI4MWRiNWRlMzgxYWRiY2NkMzRhODQzNDZhOTlmMzQ4ODliZDQ2Yzc1YjE5NTZlMjFhYTlmODc2ODRhZjU1ZDdmZDBkZTZkYTA3ZTg1NmQ5Yjc5MWMwYTQ1ZTllMzc4ODEwOTJmNjA0MGE5YWU5ZDg3NzU3MTQyZDNjOWM3ZmM2ZjI1ZGIwZTViNWQzNzc4NjVlYzRkYSI6IiI6MTIwOiI0ZDdlYWIwYTM3MTlmYTUzZTU1MmI5ZTVhODViZGQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMTlhZjAzZDIzMzQyZjc5MTZlMzI5YjY4NDMxNjFlNTY2YWE4NTk0MDJjYjA3ZmYiOiIiOiJjNWZkOTY3NjVmY2Y2ZDUxZTIzYWM2ZDIwNjc0NGFmMCI6ImY5ODA4YWYzNDAzMDUxYTUyYjY2NTJkZjAzYjZiMzdkOTBhNDcxYmMyNDJjNDM2Y2FiNmJhNjk5MTM5ZWFhZDE2ODQ3NjY1MDkzNzk4NzMxYjk5Njk3MDkyODcxOTkyMzNjNWU3NzM1MWM1ZTQyYjE1NDUzYjQxNzEyMzdhNmQxNmFlZTYzNzczYzhjMGQ3MzZiM2E4YmYzOGNjZjkyMmU1NjFjNDU2NjgyZmJjMmM3MTYxZGEzYjg5NTI2ZDlkZTIyMjM1MWJiZDA0ZWNkNGU4NjgwZjI2ZDcwZmU1N2Q1NzdlYTI4N2IxOTliZTFiYmI4Yjc2MzI4ZGRlZTNkMzMiOiIiOjEyMDoiZmQzNmZhZmU0ZjU1NzFmYWZiNmVjZTU5Yjc3MzgxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmFiMzlhZDI5NDZiMmEzNDNkNzZiMWNjYzE5MzljY2U3YWUzY2Q3YjZlYTE4N2JjIjoiIjoiMjQ3YmM3MTQ0NjQ4OWRkMzQ5NWM0ZGVlOGEwNzFjNzYiOiJjYjJjMDZmYTVhYTU0YWQwNzk3NDFhZmM1NmRiZWQ3OTA2MWEwMjA0NWI2YzA5OWQwYWUyZDc4ODNiNzhjNWZlMDk2MzZjYzhhNWRiYmEwYzBjNzZlYmZkYjgxMjE3NTI2YWZiYmUwNGZhNGIyYjc4ZjMzNTcwMjU5MzBiMGY5NDg4MzY5YmYzYWEwODhhMjEwN2JmYjZjNGJhNzE0ZjFjMjZkMDM4MGQ2NDdhZGE1ODUyZDJjNTM5MzAwYTQ3NzkyOTU0MTJiMjAyYzNjYjk3N2E3Yjk0YzI0YzRkZDJhODkxYTIwMzVmMzg4MjU3Yjg0ZTViMzFiZGM4OTVmMDYyIjoiIjoxMjA6IjY1ZTFhYWQyMTRmNDk4ODFhMDY3ZDhiMzcyYWI2ZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU3YjUyNjk3ZjcyYWUyZGY2MzU0NDEwYTY5ZGMzYzVmMjhiMzFlNjYxN2JkNzhjMSI6IiI6IjBkOTY3MjA1MjY0OTFkMTk2ZWNhNjY0NTdlM2M5ZTcxIjoiY2JkZmRiM2NjNzNhZWQ0Mjk3ZmY5YWJhNzZkZDhjYTRkOGVmZTExYjBmNTIxZmQ3MTcwZjA3NDYxYzc4ODUyNTI4NzRiMmZmOGZkMDVhMzk0M2VjZGM4MjRmZmNlZjAzOTY5ODBlYmJkZGMwYTUzYzZjOTkwODZjMTRmYzgwNmQ5MGQzNTM0N2Q0NWU1NTZlOWE1NWVjYzNhOWZkNzRjOGU1ZGJkMTllZDhiNDUyZWFlYjY3MzgxOGRkYzA2OTVmNTZkZGYzYjEzOWEzZGYzNzhmY2ZlNWI2Y2NmYTM1OGY1YTViY2QxNTUwZjFkOWQ1ZjMyNWYxNWY5ZGNkMDA3ZiI6IiI6MTEyOiJmMGM0OTk2MGU2MGZiNjNlZGJiNTBiZmViZDk4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2JmNjllZDA2MjcxMTA3ZTExZmRmMDE2ZWRjNGFhZmIwZTJkMmFjMDViZGJjNDZmIjoiIjoiNTBlNjVhYTMzOGNmZTg1NmM4MGNiZTEzMzFiNDZhYmQiOiJhN2NhYjRlMWU1NmY0YjlmY2NjYTA4ZDM3OTE1NjBlNGI2YzdjZWI0MGExMGFkZWMwNTM2ODYxYzVjNDZmYzNmZDA2YzBhOGViMzJjOWYxOGM0MDQ2M2IwZjA2Y2QwMDUzZTYxNWRmZDdjYWViMmIzNTNiMDhhZDZkYTFmOGEyM2ViZGRmMTY1MjRkMmVhZWQ3MGQ0ZDdlNTY1NDEyZGNjOTU5OGRmN2UxMDdiZWI0NjRiMTAzY2Q4ZGU5MzAxY2FmZThiMDQyMGYwYzE1NjAyNWQ3MmI3M2Q2ZTAxNWVkMjMxMjUzNWQzNTg5OWFlZDczYWE1NDM3NDY3NGQ3ZjAyIjoiIjoxMTI6ImQ3ZmI5ZDc4ZmVkZTc3OTgxOTQ4ZWIwMTNlYTEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYWE3ODFiYmVkNDFkN2ExYzU2ZDQ3NjczZjc0ZDQzMTBhM2JmOGIxMjc1MDMxZDYiOiIiOiI3Nzk1ZGMwNDI2MWQ5NDMzMzY3ZjUxYzNiODdiZjE4ZCI6ImY0NGQ3N2JkNTQxZTAyYTczN2M2OTNmZjNlYTBhZGMwOTFmZmYxOTY2YTU5MzUyNGU2ODk1NGEyZDdkNjZhNDgxOTkzNjZhNWE2MDAzMzFjZjM5Mjk2NWI1ZWJlZGJmOTQ5MjAzOTc1ZmE5ZGI1M2I3MjU4NjYxNTk3NWU4YTdiODRlMDYzM2M2Y2Y2OWNhZjQ4MmRkNzJiMjZiMGE1Njg3ZWM3MTY2N2U3ZjZlNWFiZWE4OWMzZDY5ZDJkYzQyYTI0MmVmOTU5ZTQwMzliYTViMmQyMmEzZTQ4NDI0YTQzMWE3N2U4MTY2MDQ3NjlkMTNiN2Y4OTJlMmIzM2ZjZDIiOiIiOjExMjoiMzg2OTMwY2VkOWE0NjA5N2MwZDFmNmU2NWM2MiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFiMjY4ZGU0ZmY2NDRjZmE0MzYxZjgwMTQ2NTZkNWQ0ZGVjYmNmOWNlZGU4NjA1YyI6IiI6IjQwMDliYjAwYWZhZDAyNmNiYWQxMTdjNjA0N2Y0ZWQ4IjoiMTQwYzVhOTMyOTM1OThmYWI4NWIzOTQ4YjUzZTBiYTE1NDM4YTBiOTQ4ZTkxMDQxYTEzMTA0ZjBhZDI2M2M4YTEwNjEzZTIwZTg3ZWYyNjE5OTlhNTRkNDY5YmE2ZjFhYmU1NmVjMzk3OTYyM2RmODUyMGEwNDc2ODAxOTg3YzE1NDEwZWMyNGY1YTliZTcyYWNmY2E3MWU4YzU5MDRlMmVhNWY4YjIyYjhjZjQwNGI5ZmQ1MzNhYTM3ZTMzYjNkNGNmOTE1OTljYmIzYjg1ZWNkYTRhZWJhYTI3YWMwMzY1ZGY4MzEyYzM5OWJhMTc2N2M0N2ZlMDkyM2YyYzUzZSI6IiI6MTA0OiJhZjM2YmNlZTc1NjFjZDdkMDg2MTA4NWQ1NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImMyODQzYmQ2ODljY2JiYTYwY2U5NjFiN2RkNTA2MTlhNTkyMzRkYWQ5NzU2N2UzOSI6IiI6IjU1YTY4Y2JhYTU3NTVkOGM2N2JmMjZmMDNjNTg2M2M2IjoiZDc5ODBhYjg2Y2ViOWI2NmFiMjY1YjY4ZTA3OGRlZGRmN2JhMDg0Yjg5NjdjMzIyNzgzOWU4ZjMxY2RjZmJiZmZhMDA0OTUzZjM1ODJlYTkyNzRkY2Y0NmUzYWQ3ZTc3NDRhNTc2ZGVjMzdlMGNiMzZmY2VkMmIyYzJmY2Y0MzI4ZjUwNjMwMmY1NzQxZTY5NmNlMjVjNDk0OTJlMzNjNmEwYzhhZWQ1YWYwM2NkYzFhMjY2MzUyNjIzYzZhNTJhNTU1Y2U5MDZmNjg0YmZkNTk3YjVlMzdmNjBiNTE3NWE5ODEwODhiOWQ4YjhiNTQ5M2U0ZmMxYmZlY2E2NGY5NSI6IiI6MTA0OiI2NmNjY2I3ZDI4ZDNmYTcwYmNlMjkwMGE4NCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY0NTFjNWVkZjk4NDlhMzkwNDg2ZGZlY2FkNDM3Y2I4MDljMzNkMzFmNjg5OGJhMCI6IiI6IjllMmRkNTJjMDQ2NTFjZWVhODhjYWY0YWRmYjJlOGVlIjoiODdiODA0ZDRhODFkYzIwM2Q2N2E5MmI0ZmRlYWI5NTljMjA1NmRjZWRiMjhkMjlmMjE2ZjkxNzI4MTdiY2ZiM2QyMjU2YmMxYzhhYWMyM2ZlYjIyYjcxZjFmZDAyZWEyOGNkZjkxNzg1OTMxNzUwYmE0ODY1ZDY3MjM0NWI1MDAxYjFhYWRlNGY2YWNjN2VkYjAzNzU4ZDI1NDBlNjQ3MmFmZjUwYWIzZWE2MWEwYjlmZjM3ZmY3YTg3YjkxMDEzYjE0ODY3YzNlNDNjYjA5N2E5MjNlNmQ4ZGRiMWY1MmU0YmQ5NDBiNjBkNTAwYTRlMzViZmE5MTkzNTA2NWYyNiI6IiI6MTA0OiJlMTkyYTQ5ZjVmMmIyMmZhMzlkY2ZhNTRjOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmQwMmZmOGNiNTQwYmE1NzJhZjM0MzE1OTdiZGYzZjIzZTYxNjY1Zjk2YTE5YjRmIjoiIjoiNzE5OGFmM2Y1OTRhNGYwNTk3ZjQ1ZmI1OTJlZGVmNTAiOiJlZjA2ZGU0OGJkMzRmMzYyZmRiNDI1YzZlMzVlMzdkMGRmYTFlYTg3NGRmN2QyMDFiNmExYzI1YjczNmM5NmUzY2M4ZWQwOTE1ODA3ZmI3ZWQ3NTk0ODJjYTcwMWQyOGMwOGNiZjk1NWJlMjQ0YmY4ODdkZjM3Mzk0ZDFjYTRkMmU3ZWFjZTBkYzYxYzgwN2I3MTRmMzE2MWY5ZDdmNTU0YzlmODdhZDY3NDg0OWMxMzYxMDhjZmQ4Zjc3Nzk5NzY1NjQ4OWQzZTk5M2FhZDRhNTFiNjg2MTYwODM4NzY4MzJiMzA4NWE1ZjhmMTU0YjgzZWE0NDcwMmM3MGYyOTgwIjoiIjo5NjoiNDMyOTgyODFjZDI3YTM2ZTVjYmFjNGI5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5ZWNhYjRhNGE5ZGRhNDM0NzdjOTkzZDYzODgzODc0NDNjNjZhYzI1MzA3MWM1MDQiOiIiOiI5NTIzYjI3MjJiOTI3ZGMzYWZjYzVmN2RhYjJiZjAzMyI6ImZiODRlMzhhODQyMjVjOGViYjMwN2RmODgzMjVkMDIwYTU4NTNiYjA1YWM3YTc1ZWUzODU1MmM0MGMzMDJkMjYzMTgxMDgxYjA1OTE4Nzc1Y2Y5Y2Q2OTA1Yjk5ODJiMmFlOWVmNzk5M2YyOGZkODcxNGU4NzhjOWE0YTgxMDFjMDhlOWYxMzU4MWRjZjRmMTZkYWJmY2I5ZDNjNDcxYzAwNTY4MDVmNTFlNjdlOWI3NTU3MjYzOWMzZDZjZTYyZDJmOGFiZDY0ZTFlNjZmZmIyOTIzNjBjMjAxNTVlNGQ1MjgzNzRhNWEyMmQ4NDUzNDBkNmYxYWM2OGQzMzA0MGUiOiIiOjk2OiI2OTZiYjY3NGU0M2NkYzdkNjkzNDY1NTUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjczM2RmOGM0MmNjMmU3MGFjMTk1NjE1ZDQ5MTFmZmJlY2JlMjcxMjIzMGM1YzI5MiI6IiI6ImY3NjEzNWVhYjVkNDJlODJhZWRmZjMwOTBhMWJhNjA2IjoiMGM4YWVhNzQ3Y2FjZjJmMGZkZmFmMzY4Y2YzMmIxMmRjNDlmNWRhOWEyOWJlZTM4MGQyZDY0MDM1YjczZWZiNTZmZWYxM2FhMjBjMGI2MTJkOTYxNWNlZmI5NGYyNjk3OGZhMGIzNzFhNDdkZDIwMDUxYTE2MDViOWY1ZTEzM2I1MmRjNTE0NTc3YzUzMzE5YzllMmJkNGFjN2NkZjM3ZDU2YTllNzE1ZTI3ODYwYTA5ZDg2Y2MyMWQwYjlmMGYzMDJmNmFjZjA2ZjJmZjAwY2M2Yzg3OGRhY2I4YmRlNTEwODJmNzAxMzE0ZGU3ZWZkMzZhMjQ2ZjgwZjhhOGZiNiI6IiI6OTY6IjgyZTZkMGMwNzZjN2Q4YWMwODM5ZmUxOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmEzM2MyNGM0MWJmOTgzNjYwN2I2ZGQwNWU2NmEzZDE2Mjk4Yzg5N2RkMWQ3MGFlIjoiIjoiNGIzMDQyM2RmNmRlNzZkZDY4NDI3NGFmYmVhMDg5ZDgiOiI3MWY1ZjZlZTdiYmQ3NzRmYTY5MWEzZDdlMGY2OTRhNmM4ZGZlOGFhZjljZDcyMGUxNjNlZjZkNWNkOTQ5Yzc5OGY5ZTljOTkzYWRiNmQ2NGU3MjIwYWEwZjE3MzMxYmZhOWE0M2I2NTliZTEwMTcyNmE4MGU1NTI5ZTgyN2MzZTRiMDVjZmI0ZDc4ZGI5OTUyZTU4ZWViZTY0ZGZiYzBkMWJhZjIwZTdlNDg5MDIyMTUyNzdhNDllZTk1MzEwODUyNmE3MGVlMTUwZWRhODVlNmEwZTQ5OTU1ZjhjNjMyMzc2NmFlMTBlMTNlY2ZkYmU0ODE1ZjRiYjRiYTQzNzg2IjoiIjo2NDoiNzNlODAwMTgyMzVkZWQ3MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTcxMTU1Mzk4MGUzZmM1YzE0Yzk4NjExZGRiZGY0MjY0NjNmODJjNjZkZjgzYTcwIjoiIjoiMzM5NmJkOTZiODNiYTYxMWVkMjJlMTJlOGE1ZWM5MTEiOiI5NTA2ZjM0YzkwNjExYWNkNmVjZWEzODVhNzgyYTU3MzlmODhiNGZkMTNiNzc1NzBjNGQ3ZTA2MTcyODNlN2IyMTU2OGUzMmM0MmFkYTFjZjZhY2ExYTJlMmJhMTg0ZDQxMDEzMDZmZjIxYzlkMDNlMGZmZGE0ODU0NzczYzI2YTg4YTUxNzNkNTI5NjAyODZjMTg3NTNkZjE3MzYxYmI3MDQ2ZDI4ODRlZTYwMGY1ODc3NTMwNGY0OWNmNGU3ODJhYzcwY2IwMGIzZDljMzQ1Y2ZjYjM4ZTM4ODA3NDMwMzQ2NDBiYmNhZTgzMTEyNTQzY2QxNjIyZWJhZWRiMjIxIjoiIjo2NDoiNWQ1MWEwODY4YTIxNjFhNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWQ2OWRiZWM3ZWJlODBmMmI1YjhmNjFmZGZmMWY0NDEzZjVmNjYyNDAxMGZiNzk1IjoiIjoiYTJlYjNiYTUwZGQ5M2ZhMzc1Y2Y2ODJkYjdiMmJjN2IiOiJhMGY5YzBkZTg2YjU0ZDNjMTc2ZWNlMzMwNTQ2MzIzN2UxZjcwYmUzYzUyZTJhYjFjNzczYTlkMjdkNmZjNWRhZGY2MWNlN2EzZDEwZGJhODczMGQxMmMzMDZmY2E4OTUyNDAzOTgzYmYyNDJmYzFiNmVmYWFhMTUzY2E0NDZhMDdkMTZhNzBhZjRjYjFhYTRkNGMwYzkzZDY0NmRjM2E1NjMwZjVhNjEwYWE5ZTZlZWI4NzNmOWEwNmQzMjM0NjQyYmM4NmIwM2M1OTYyMzVlYzAzMDE5ZTc2MjQ1OGFiZTE3ZDM3NDA5YTE4Y2E1YjdlMGUwMDg4MzkxZGQzYWNiIjoiIjo2NDoiMWE4Mjc4NTVlZTk4ZDY3OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2FhNzMyODc5ZjI5MGFhNDQyMjE3MjEyMTU2OTIwYzY5NDU3YjhlYzQxZWFiMTUzIjoiIjoiY2I1OTMyMjFjNTk4NDZkYzgyZmMwZDBjZDA0YWYzZjAiOiIxNWQ3ZWJmOTQ5ODVjMzRiNzJiNjY3NWQ3MzQ2ZjBiMDViZGI4ZmQzYTI3ODU1NTkzOWQyOTk5MDI4ZTQxNzllNjkzNTJkMzk4YTVkZDBlNWIzNzBiZGQ5Y2JkMjRkNTc2Yjg5NzA5Yzk4YjYxNDJmNzFmNWIxYmEyMjQyMjJhZmI2NzU5OWZjNThmZTA0M2QxYTkxZDdlYTk1YjU2ZGJkMDg2ZGI4ZTNhMDYxYjFiZmM2ZTgyZGM5YWM3MjgxNzRmZDM2NjlkNjVkYjYyYTA2MzgwYTVmNzJjM2QwOTFiN2ExYjY5OTgwNDFkNTUwMWU5ZmJhOGJmOTFhN2QyNzhjIjoiIjozMjoiNTViODZkMjIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk2MWEzZTc4ZjZhNzU5NDQ0NTVmOWQ5ZDAzNDVlMDhmNDY2OTk3MmYzZDVjMjAyYyI6IiI6ImNlNDNhMTlhYzY0OGU2MmRkYzQ5ZDI0M2ZiMzRlMjlmIjoiMzkzNzM2NTU4MTMzMDc4YTAzNjdiODI0OGJjMThjODM1MmY5MmE5MjEyZTkwMzE4YTViNjNhZDNjNDIyY2NkYTdjMTgxYzU2NTYyOWFjZjRmYzczYjJkZTg1YmM5Y2YzODMxMGZlNzAzYTg3N2IzZTdkM2IyZDQxNmFlYjk2MmYxMDI3MDc3MjMyY2ZhMzljNWU1Mjg0YTFiMzIzMjY0MTc1NTQ2ZGRmYjI1MGNlNjkzZTJkYzc4YTA0NzliZDg5YTdhYjQ0YjYzZTUwNDg2NmQyZWM2YjUxNTNjZmQ1MWYyOWE5MWNkNGZhMmI4ZTA5ODc4NzQ3YWU1Mzk4MTg3NSI6IiI6MzI6ImFjNzAxMzczIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNGQ0OTI5MDRiZWNkZTRlNDZjMjU1N2FjODMzMjY1YzcxNWJiNTdmMThjZDA0MGQiOiIiOiJkZjQxYjIyYjkyZDQzYTk2YTc1MDQ1MTRiOTJlNjQ0ZiI6ImM0ZGQ0NmNlM2U0ODZkODk5MDM0ODJkZTI0N2MxZTdkZjA1ODA5YTI0NzMwMmRiM2NhODQ1N2I5M2Q2ODg2YzBhM2QxYmU0MGE5MGY2NTAyZWM1OGQwZGRkNzE1ODk2Y2VlMzczMjJkNDhlYzNmMGMzYWQ3MTZmMWJiNjc5YWZkY2MwZTRjNzllNWUyZTM0NjcwMmQzNDllYzdiMzkxZWY3ZWFmZGU2MThiYmFkY2U1ZDE0ZDIyMTIzZGU2MTFjMDY1NzgwYTRkMDVlOTI4ZTg3ZDEyYjc0OTg4OGQ2MDA0MjI0YzNlNDU3YWNhMDE5MGJmMWE3ZmJhMjQ1MzY4MGIiOiIiOjMyOiI3YTI1OWJkYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMxNjY2MGYwMTNjZWQ3OGExNjcwMWIzNTQ3OWZmYjFmN2M4YzRlOTY0YzFiNTJiOCI6ImQyNjJjMTVkMDhhZWE0NmY2MTRjN2Y4ZjZhNTQ2MzEyODllNTRjYTk3ZDY5ODc3NzM4OGUxMzdmNDMxYmI3ODM2MDFlNzk5OWU3YWY5ODc3NWQ3Yjg3Y2UwNjFkOWJhNTY1NzBlZDhjNThiNmJiYWM1ZjEyZjc1MWZjMzc2YWIwZjE0YjM2YjQwYjJiNTUzMzcyN2JlM2JiYzlhNTExODM0MDVkNWZkMDEyMTIwMWZmNTkyODE3ZDA2NjEzYjUwNGEzNDQwYjBlMWE1N2U5ZWQxNzcxNzY2YTlhNWI3ODkwNTRmNzAzMmQyMGIyM2M1YzM3ZDc3ZjI5M2M2NzdmZDgiOiI5MTljZWIxNzJkMmNiNDYwYmRiM2IzZTU4ZGViZTg4OSI6IiI6IjVmNTEyOGY3Zjk0OGYwY2M5ZmIyNDhhMjRiMDdjNTQyNDdlNDAwODBhOTkyYWNkZGIyNjE1ZDkwZWY5MzI4YTE3YmQ1ZTlhNjk4YjAwMTAzODU1NzM4YWVhNTVjNDk0NGNkZTRhOTE0OGJmYThkYjEyMjMzMjMxODYxYzQ1NWU1MmM5ODg5MTE5Y2E0MDJlYWJjOGY0MWIyNzAwMDE1NmRkMjliOTAxMDI0MzM2Y2IyYjcwODhlYjVmZDUzNGJhNThmMjNjYWYxNDBhOGIyNTQ5NDg2MDc0ZTRlZGJmYzI2MmVkOWM3YzdjY2FhZTI0YmU4ZGU4NzNhZDQzY2QxM2UiOjEyODoiYWUyMmVjNGMxOWU3NjE2YTViODc3ZjE2OGZlYmQyMDIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYmRiNzA3YzMyODMwNDgwOWJmMDYwODg3NGM5ZGIzNzNkZjNjNzEwNGE1YTcwNDkiOiJjYTI0M2NhYTE0NTEyNDk5N2Y1ZTJlNmJiMjVkMDIxYTM4ZDU4ZDBhYjFiYmYwNmQwODZjMjQxNmMwOGUzNTEyYWE4ODdjYzIxNWZkYjM0ZDBmMmQ3OGY2YTQ1ODg1NzY3ZjE1ZmMwMGI2OGE0ZGYxMTMwNTg3ZGU3NzdlZmI5Y2ZkNTljYWZhMDc3NDc3ZTk3ZWRhYmYyYmYwNGM5YTZjZTAyOWMyMzAzODVjYTVmOTkyOGJjYTdmZTU1MDNiMTg3NzQ4NDkxOTlkMmEzOWEzNzhhMmQzMTQ0YWVmNDQxNmMxNzE4MzE5ZmYxYmVkODAyMWRkNzdhMDdmNjFlYWE2IjoiYjdlN2ZjMGQ1YWRhZWQxNjMyYzVmN2QxZjU2NDU4ZjEiOiIiOiI5MWM3OTU0YmRkNmE0OTM2MGZkY2UxMWMxYmM3MTA1MTJiZjVhNTdiY2VmMjQxZmI2M2U1Y2VhYmNkYzk2OTlkMGMwZGRiMDI1Yzc1MTk1ZWMyNWU2MzE1MDdmMTNlMTg3OTllNmJlOTc5OGU1NjM5YWQ4NDAxZjYyNDRjNWIwYWNlMzkwNWFlMGRlMDhlMmQwZmNkMTlkMTkzZGU4Mzk0M2ZlNDQ5YWY0YjUwM2E0NTRjMjQ4ZTY3N2QyZjUxMTAwZmQ5YjhiN2U1Mzg4ZDUwOTEwODkzNjlhN2MyZmYzOGJkMzUzZTk3NTdlZjg3M2E4N2YxNWYzMDIzMmJhZmI0IjoxMjg6IjcyMzM3YmRiMmJmZGQxZjFlYmUwZGJhNmY5YjdiNjQ5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTZkZDBkN2U5ZDZhZDFhZDdjNzM5NGQ1M2U5ZTA4MWM0MzZkMzRjODE1OGJiYzk1IjoiMmQ5NWQ2NGVkM2JlODU3YTVjNzljN2FmMjBhZWUwMGYxNDI1NTdlMTBkNzgwMzgzZmVmMmQ0NWYxNmM3ZTI4MjNmZmVlNDk1YjIyMGM4Nzk3MTYxMGU1NjUwZjdjM2U4ZDI5NmIzZjAzZmM4ODNjMDAzNTFkZjQ4ZDk3NzE3NDI3MTAxYWEwYzA4YTIzYzQwOGIyNDUxMTYyMWI2NDBjMjEwYjMxNmNmMTdlM2RmZDcxNGYwYzlhYTlkZGQ5NzQ2OTJkMWMyYWUyN2I5YmIwZmJiNDI4ZTdhOWRhM2IzY2Y5YmQ4NjllNzMwY2NhYTNhYTRiZDA4ZjAxZjg0MDM5YSI6IjYwYjRiOWM3N2QwMTIzMmM1ZDNkNGFmODFiZWNiMGRjIjoiIjoiNDQ5NDQ2MGVlNzNkMzUxMzgxNGUxZjc3OWJmZTNhMjI5YjQ5MzQ4ZDc2NDFlOWVkNGRkOTU5YjU4Mjk2MDA5N2VmMDhiOTEyOTJiYjlkYjg3YjRlNzI4ZDAxYjkyNjgzZjRjZGM4MTE1MWE2OWJlZDIwOTZiZjZmYjJlNDVkMDE0ODQwNDQyMGVhMTZiNjMxYjQyMWU2ZjRjNjY2NWZlMzNjMmQxMWU3YjIyYjZhYTgyYjYxMGI4MzIxNGFlNGQxN2U2ODE5NzJlM2ExZjc3MzA2ZDNjNTRkOTZjNDdkOGJlMWZiMmM4Y2FlODMwMGFjOWRiOTkwMTNmMjVhNjVhMSI6MTI4OiJkNDBhMjQ2YzE4NTE4ZWE5ZjhkNzMzYjQyMTgxMTIzYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU5ZWQ3OGNiNWMxMGRmMDVhZDAwYzZmMWZiMzViNGQyOGU2ZGRmY2MxNjQ1NjgwNyI6ImU0NjVlNTdjYmFjMGRjZDFlOGNjZGEyMjA0MmFiZWNkOWQ4OWM0YWM5MWIwZTgyYTQxZmQ1MTEwN2E3OTIwOTllNjNmN2NmMjNhODg5ZDhjMDRlZGFlMmMyYjNhOWU1MWRiZWU2YzNiNzFhY2UzZGUwOGFiMzU0YTI5NTg4OGJiOTlhZTBmZTQyOGRkNjliYzAxM2Q0OWE3MDUxMWVmNjA1MjQyODIzNDc3ODdhNTQyZmU5NTAxYjY0NTJiNWZhYWQyZjEyOWE5Nzk1YzJjNGNjMDg4MWVjNGFmOGYwZTBkMmQ0YTdhNjI4Y2IwNTEwNTVmZTgzMWI1MWUyNTA2MDgiOiIzYThhZDk4OWM2MjFhZTFlODJiOGQyNTVhM2M5NTAyOCI6IiI6IjY4NTVlNDcwMmYxZWE1OTNiZmUzMGVlNjViM2ZhYjgzMjc3OGQ2YjExYTBhZDkwMmRkMzczNjFiOGQ4NWFiNzZkMWYyY2NmNzkyN2Q2OTVlYjMxMjkyODZjMjY3MzdiOTU3M2UyNmJmNjRiMzFkZTI2Zjk3NTI1Zjg0MzQ1ZjczYmRhMjg4OGExZjUzYzliNDA1YWQ2MjdiYmU1ZGVhMTIzYzlmYjBhNGI3ZjE5M2NkOGZiYzhmYTRhNWU1ZjY0ZTljMDgzZjVjMDQ4ZDYxZmQxZDM0N2I0OWFmZGM2OWUwY2E2YTgyZTNiMDY0YzQ5ZDViZmZhMjgwMGI1Y2ZjZGYiOjEyMDoiOTY2MWY1YzNiMGQ5OWQ0Zjc2MmJkY2FiZDQ4ZGYyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzZhNWJjOWE4ZDdjNmUyODIyNDU2MTU2Y2VhN2Q0OTM3MDJkNjFlN2Q1MDRlM2MzIjoiMGE3ZmJjYTg3NWZkNjIwYzNkOGRlNzg4ZTVjMjc1MzQxNjBmNjhkNjBkNzBmYTQxNjdhZGYwYzE4ZWEyNWZhMWYyY2M1NTFmZGY0NDdhYTE2Njc4ZDNmODIxOTNjZjQyMWE2ZmE5NTM1MzJhMzc2NWJjYjU0MTgzYmYwZTk2NTI3YWU1ZTY5NWVkM2JiYTVkOTkxMWYzNmMxYWE3MzEzMmNkNDNiMjY5ODk5NmViNDNmZjg0NDIwZTMxNWEwNmQ3ZGIwMmFlZTgxNTQ2MTg5MmM3YWI5MDI2OTUzYzRiYzI1ZjQ3MTUzZDVjYjdiOTY2YjcxYjI0ZGFkNjlmYTU2NSI6IjA5YjY4MWRlNjY4Mzc1MTMwMGMyYWRhODRhMjE0ZDAyIjoiIjoiZGQ2NmUwOGZjNTAwNDI2ZmViNDk3YzM5YzU4NTNiMjYzNzYyNzJkZmFiYjgyYWI1OTc4MTY3ZmFhOTFhZGIwMjVhNmNhMGU4ZmUzZDA0YTBkOTcwNjJlZWU4Y2E2NTMwYzM3ODhiZWJlNDQzNmVjZGQzZDllYWI5NmQzOGEwY2Y5YjhjYzZhNTg0YTBmYWNhZWEzM2VjMmY0YTZlNjFmNzgwYzNkYWQ1MjRkZjkwMmY0MjFlMzIwNGNlYzdjOWE0YmIzZjA4NjBlMDE3ZWRkZWI5MzljZGZiZTZmOTI0ZTFlZWJmYmJmOGVjNjNjNTViNjIxMzdkOWY4ODQ1ZjM4ZiI6MTIwOiI0YWNjNDBhNDg4MmQ3NzMzZDhmNTI2MzY1ZjI1NjAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmNWNiNTY0Y2RkNjk3NDIxOWU4N2Y5M2EwMzBmZGNhZDM1MzEzZDRhZGY5ZDdhOTciOiIyMTBhNzk5ZDQ4MGI0OTMzZTE2ZmNiZWQ2MzI1NzliZWI2YjAwYWVjNzRjMjA1ZGJhZjY0ZTJjYjE1MmMxMmY5YjY5NjkxMjJmMjk2ZWZjZmUzMjhmNTQyMDI0NDY1MTQwNjY1OTQ4NDhmNDJhMzAzMTQyNTAyMGI1NmQwNjVkNmVhZjJjYWY1MDdkNWY1MWRmNDkzYzExNTE0NDAwYjg4OWYzM2QwYjk5NmU3MjFlYjYxMzU2OTM5NmRmMDUyOGFhMTRlYWVkMTE3ZGJiN2MwMWQ5YzNhYzM5NTA3ZTQyYTE1ODQxM2RhYjgwYWE2ODc3NzI0NzUxMDVlYWJjYmJmIjoiOTBmOTFkYTUyMzk2NDBhNzBlZWM2MGQ4NDlkOWFlNzAiOiIiOiI2OWEzZGNmNWI5NGE1MDdhNTNmYTVlNjJjZmNhMjY5NDUzNjIzY2NkM2E1MzdkOTcxMTMwYTIxYmVlODg0Y2YyNzFiOTgzM2RlYzE5ODYyYWIwZGZlNzA1MmU3ZGMwN2IyMGYzNGFhYzQyYmMzOWJmMWQ0OTUzNjBjMWQ3MDFlYTUzYTliYmE2NGIwMjk2MmI0ZWY2NGZiMWM5MGExYTJmM2E2ZjgxYTZiYTc4MWQ1ZjI4Yjc4NmVmYzM2NWVjNmEzNWM4MjY1NDRhYWI5NGI1M2I5NjYxM2ZkZGI2NTY2MGRkMzM2YWNjMzRhMjE3OTYwZjZjMjJiOWZlNjBkZGUxIjoxMjA6ImI2NzQ5NWE4NjNmZmZjYzc3MzAyMWRjNzg2NTMwNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRjMmM1YTAyMGQzZWE3MzEzNjJjMjlkNTU5Y2IxNGFhNGY4ZTNmNmE1NTRhNWZlZSI6IjhjZjA5OGNiNmFkNzllMGYwZWI0Y2E4ODhkYTAwNGRmZTY0MzFiNTk4MmJmMTQ5MGM1ZjJkMTQ4NmMyODhiNWQ1MGVhMGE1YTYzY2Y5ZDA5N2E3MTM0ODYzMjM5MWI0YmY5NjJiZjQ2NDQxOWMyYzk3MWU3NmMwM2VlZGQwOWQwNjlhMDcwYzg2ODM3ZTE2YTJjMzlhMmNiOGRlM2UyZDNmMjc0ZTAzOTk4YTg3NGZhOThkZTA5MzNiMDg1NmUwNzZlN2Y1NzVmMzUxZDdlY2QwMjQ3NTM3ODFmNTFlZjYwMDQwNWIzMDRlMzdmMzI2ODQ2Yjg0NjkyNDQ4ZDNmMmYiOiJiZDRkNDVkOTcwMDg1ZTBiMmJmYzk0NzdmNWNkMDI0NCI6IiI6ImQ0NGE0ZmQzMDNlNjU3NjcwNjMyZGE4ZGRkYjZhMTE3ZjNlMzVkOGFmY2UyNDVlN2U2NTc2NzExYzY2M2YzNjgwNmI4MTNiYTY0MjFlZjk3ODg2ODFkOTcxN2EzNmQzZWZmNGFlMTc4OWMyNDJmNjg2ZDhjZjRhZTgxMTY1MTkxMjIwZTMzOGJmMjA0NzQ0YzlmYzcwNTYwNjgzZWMwN2MyMTI4NDZkMjU3ZDkyNGQ1ZmM0M2EzZDQyOTdhYzU0NDI4YTMyYzhiYjlkNTEzN2UwZjRhYWE0MmRmOGRlYzM3NzkzZjM5NjVjYTY1OGYyMmM4NjZlMjU5YzgwYmNjNTkiOjExMjoiOWMxZDZjNzBlMTQ1N2E4ZDY3ZjgxY2IzZGM4ZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE2N2NiMTg0YWI2YWQxNWJlMzY1MzZmNTA1ZWE1NDQ3ZmQ5OTZiMWQ5YTA5MmVmMyI6IjBiNmVjMDg2ODViNWE5ZDMyMzQ2YTVmYTI1ZDIwODEzNjQzMzIwNGYzYjg2MTgyYmQxZDk1NzhmMDYzNGRjYmI1YjU5OTM3ZmI4N2RmMDY3OTMzNGQ3ZjQxZWI4YmVjNjBhZTFiODc5OTRlZDJjZmRkY2I1NmU5NWE2ZmI0ZTNhYjc4NDViMDI5NGU0YWZhNWFkNDZlYjVhNDMxY2JkN2FkMGViMDQ3M2M0MmMwNmYzZjYyZGUwM2QxMGRkZGE0NDlkNDExMzdjODAxMGFmNWM3YzBlYWM3YTVmZGU1YTM5YjU0MzdhMjM4MjYzOWZlMzM4OGNlMDI5YTdkNDQ2NWMiOiJiNWNjODlhMWMxMDMyOWJiNDE3ZTZiNTE5MDkxY2VlNCI6IiI6IjdlYmU0YTk1NDdmYjExNWIzOWIwOTg4MGQ2ZjM2ZjhjZDQwMmJiNzk4YzZkOWRiMDM2YjFlYmQ4Yjg3YThlOWQ1NmZjMjNiN2FlNGU4Y2FjMzUwMGJmMmY3Mzk1MmMzN2EwNjhmMWU0NzIzNjliNjIzMTlhOGIxYmMwODVhNTFmYmU0N2UxYzMyMWRkMWJhMmE0MDY5MmVjZDY4NzYyYTYzNDY3ZDVlY2FkNjZhM2Q3MjBhOGE4MWUwMmRhYzBlYmU4ZGY4NjdlMmY3YWZhMzY3YWEyNjg4Y2E3MzU2NWU1NWNmMmIwMDcyZmEzNjgxNzUwZDYxZThlNjAyNzVhYWQiOjExMjoiMzA0NTRkYWU3OGYxNGI5NjE2YjU3ZmRjODFiYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjliYzdhYWQ0ZjRiZDczYWNmNzU2MzExZmYxYjcyYjQxNjMxMzQ0YjliNTdjZjQ0NyI6IjdjZGYwN2UxN2Y2NjcyMjdlZGM5ODY4MjdkNTViYjgwM2M2ZTUxZjkzZTcyZDk4YTFjYmQxNjFiNTgxNTVhMWMxNGNhNTRkNTIyNTRlNWY4OGYyYTA4NjE0ZGY2OGNjMzdmNmU5ZmFjODg4OTViNTMwOTBmNjk1NDRiMThhZWU0Y2MwMzc2M2QzNWU3ZGQ5NGVkODJkMTQzNTMxNmU3ZTAyMzY3YjFjNDM1MDZiM2NjZDMxZTI0OGRjZTgxZmU2MmZkYWVhM2EwYmZiYTAzNDc3ZDVjMTUxYjBmNzZmMDk3OTkwNDhkOGIyMzY5OWQwMDBhOWRhMTEyODFlZmZmYzEiOiJmZmE4ZTcxOWYyOTEzOWQxMmY3NDFmMDIyOGUxMWRmZSI6IiI6IjZhYjMwNGNiOWQxZWQ2NzUzODNmZjk1ZjdmNjFmZmMyYWE3M2FiMWI5YTY5MWJiODQ3NzdiMTRjNzAxNGU5ODZmZmI5MWRhNjg0N2QzYWJjMDM0OWE3YWEwOWVkMWQ4NmYyZGFiYzA5ZTBlMjVhMDU4MDBiZDVkNjE2YzFhNjY1YmRiMTE5ZWY3MWJhZTA2NWVkMDE5YWVkMjBhZDNiMTMyNjJhOTAyZjI0Y2NiNDgxOWRjNzE0MTk5OTRhOGI0Nzc0YTNiOWY0ZjY3MmQzMWFhZWM5OTdjZmUzNDBkMmFiZGMzOTU4YzQxMzczZDAzMTUwNzZkMjIxODllYjUwNjUiOjExMjoiMjYwY2NlN2Q1ZWQ2YTg2NjZjOWZlYWFkNzA1OCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjViZDQ3YmVhMDhlYWI4Njk0ZGVmYzJiNjZlNjBkYTFiZTQwZmMxZTM5ODIyNGY5YiI6IjA4M2FkM2ZlOTI3M2I4MDYzZTE0NGEwM2Y4OGZiMTc5YjE4MzI3YWJhMzcyNTlkN2Y4NTMyMzAzMzA2YWM5ZDE4Y2ZjYjc0NmNhYjNmOTM4NWI1YmI2ODVmYmM0YTI1MmRkYTI2ODA0NDY0MmY1ZGJlMzNlYTZlMTYzNDQ0NTMxMWU0NDBjNTUwN2ZhNmJlYWVkMzQzYzgzYWViMGZmYzRmMWNiYTIxYjM5ZjBmZjZlZGZmZjk2MWFlZDNhZTE3OTZmOGJmZWViY2QzMzkyZDkyZTI2ZGQyNmExOWE3YjdjMmU1OTEwZjIyNTU3ZmFkNjAwZjhjY2E4YWJhOTg4ZDQiOiJlNDVhNTJjNWU1ZWNjODdiNDMyMDg2NGIzODY4Mzc3NyI6IiI6IjhmYTNjZDkxZmI5M2EzNDZlMWY5NTk1MDg4YzU1MDNhODQwYzdkN2MzM2FhMWJlMTQ3ZTQ4NGUyYWVmMmE4YmRhNzcyNzUzNDhjYTU5ODEwYWJlZjZlMTc5ODg4ZjY3ODE4NjI5OTBiYThlNmQ5NmFmNzBmZWJkMmY2NzFhM2E4ZDZkY2U5YmU0NmMxY2M2ZGJmYWFlMzVjMzVhNzA3MzIwNTQxMWNjOGFiNGRkZDI2NmIzMWI2NGVkYWI0ZmZlYTA3NmIyOTgwMzE0OTg1MGNjYTQxYzg1N2IwNWMxMDE0ODE4MmY4ZTcyNTJlNjcwNjllNzUxN2RhNWZjMDhlZTEiOjEwNDoiOWZhMzM3MjE5OWEyNDg0ZjgyYzMzMDA5M2YiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4NTBhODExY2ExODA0NGRlZTQ0ODc3MjllNjE5Y2NhNzFmMDVhNWIxNjRkZDEyNTAiOiI2ZWU3NjcxMmQwYjFmYzAwZTQzYzIzMTI3NDNhODgxZWQ5NWEwYjA2Mjc2YzVhNGQ5M2UzZDU2NzMyYWY2YjEyYzdjMGQxYWE2ZmZhZWM1NjIyMjliNjQ0M2U1NzZjYWVjZmZlYWRkOWE2NWI5MWVmYTFiZmU0OGFiMWVjYzYzYzM4MWQwMGZlOGRjN2YxMTM2NWYyYjI4OTQ1ZTg0NGU3YzZjYTYwOTcyZjczM2E5NmYyOWNjMTJlMjU5YzdjZjI5ZTJjN2JiZjhmNTcyZTE1ODc4MmE0NjA5M2M1NzU0NjU2ZDBmMmUxZTFlYTJhMGIzMTViNWZhMDJkYWRmNDA4IjoiNmY3OWUwZjYyMjM2NzkwYzg5MTU2YzE0YmQ5NTQwYTkiOiIiOiJlYjFlYmQ3OGQ3YWM4OGU2ZjkyN2UwOWZlY2Y3ZmViMWFhNjRkNzQzNWFhZTc2Y2M5MTdlZGQ5ZTA2MjRhOTZlOTQ1ZGY2NzY0OGMxODdlMzk3OTU0ZGE3YjA4ODgwMDVmN2EwZDA1ZDA5ZGU0MjRjMWEwNjQ4YjU2NzA3YjkwZGE0MDIxZDVhMzYxNzU1MDAzMzdlNzM0MWQxYTQ3NGZiYWE5NGU1NmQ3ZWE1MjE1NTgyOWViNmJiOWQ5NTQ1N2MxMzg4NzVmMDczODAzNDkyNGQ1OTY4MWU3YzJkZmZmYjdkYzA5NTk2OTc0NjhlYTJiNjVhODg0Yzg5NzIwOGFiIjoxMDQ6IjkxYzc0YTMwZTViZmY1YjI1ODVhYzc2OTllIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTE0Njk4MjhkYWZkMzBkZTQxNTA2NzIzNmQ1ZjQ5ZWExNGU4MTM2MzdmMWVlMGMzIjoiZTNhYWMwMGJkMDVjZTNjOWI4NzcyMGRiODIxMDQzNjRjOGVmNmVmMjVkNmYzYzhiY2Y1ZjczZjFhMjZmODYxOWU4MzFiZjdiYjI4YzRkY2JhYzcwMTNkYzYyODJkMDdjYzIyNWJkOTY5YzU4MmEyNmFjY2Q3Y2ZmZmU4NzhhMzE1OWE1YWQzY2I2YzhiODkxMzFhYWRhNjFlMjk2MGNjNTQzMWY0ZWY5NDM5NDYzNGU0YzhiMjkzODQwOWJjZDJlNzY2ODk4NmM3YzVjZDJlZDVmMmM1MjVmYTAyMTI5OTY5NjBhYjg0MmE0Mzg2OWVkNDMwZDMyOTE3OTlhMmExZSI6ImNiNTQwOWFhZDlkMjI3YTNjZjBlMmM1ZjEwMzE4NzNlIjoiIjoiNGFhODJiMWM4MWE5MTFjYmU4NDIzMWNlN2FmYjk1MTg4ZjIxNzdiNTM5ZmI3N2RlNjhmM2Q0ODAxYTJiZDA5ZjVlZTJmN2U1OWI1ZDllNzliZTVmN2EyM2YwNjEyYWUzOWQ1OTI1OWRhYmM4YjFiZjdkYmQ0YWRjMGRiNTIwYmY3ZTcxYjk4OGZhOTZkNmI0ZGZjNzZhZmRjMjJlYTMxZjY0YzY0Mzg4ZGQ5M2IyNzUxOGIzMjYzYjBhMTkwMDc0MDVmYzA4NjQ1MzUwYTY5ZTg2M2E5N2RkOTUyYzhkODg2YjVlMGY0NDRhNmU3N2E5ZWY3YzdkZTU0ZjQwNWEwNCI6MTA0OiIyYTZiMTRjNzhiY2I2ZTI3MThkOGEyOGU0MiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2I2OTA3ODUzYjdkNGM0YTE5NDY4MTExZDk2YzVkZTA0ODIwMGI1NDQxYjk0MTFkIjoiMzYyMmJhMjUyYzA2N2NlN2Q2Y2FlMWQxZjUwNjhlNDU3YTBjZjkzYmUwMWZkY2U2ZGM4NjUyYTUzMTM1ZDVlZDQ0NTM4ODY3OWUzZjM4OGVlNmE4MTIyMGIxOTM1NmIyNzU4NzhmYmNjMmE2NzUxYmVlN2UyYTUwYWRiN2M0MzBlNGM4Y2FlMDNlODg0NjVmOTdiY2FlYjE1MWQ0ZjAwMDdiZWU2YmI5ODY0YjMzMDIwNzE3YWRjNDJkNmY4YTI4M2EyMGY2YjYyZWM3OWZiODA2MGUzZTVlY2MxZTkxYTJlYWVmNTdlOWRhYmQzYjM2MzQyMzZmMTJkNGJmZjQ3NSI6ImE2NmVlNjRjMTUwOTRiZTA3OTA4NGM4OWNiMTczOWMxIjoiIjoiMmI4YzE0OTBlMTM4ODFhYjNiYWM4NzVjYmRiODZiYWFiZTdmYTMwNDQ1YmNiMzkzMTVkMDU3MTcxZTgwZDAyYWE4NDcxMzU1ZTgwYmE4OTFiMjZkODBiMzc1NTA4YmEyNzU2MTYyY2M2ODg1NzhiZTMxM2E1MDA5NmQ3Y2Q2MjUzYTgwOTQ5NzA4OThmYjk5Y2QyOTY3ZTc4YTU3ZDEyYjhiM2UzYzEwNTAyNjM0YmVhZDViZmUyYzlkYWQzMzJmY2JkYTBjMWJjYTE2ZmQ1Y2FjNzhlYmNiYzdmMTVhYWQ4YjI4YWJmM2VkNzRhMjQ1YThlN2E4NWNmYWE3MTJhYiI6OTY6ImU1MmFmMzM5ODg4NTVkMWEzMTE1OGM3OCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmU2M2UyNDdlOGRlODM4YTE5N2E5ZTkzN2UzNGMwZjVhMGIyODI1MzNkNDQ1MDE1IjoiMTdjNWQ3NDhiODU5NjkwMWU5N2RmNjYwY2E5NGZjOTcwZjdlYmI3NjlhZmY4OGY2MGFjYzQyNWY1MGViZmI2NzQ0YzZkODc3OGMyMjZjNWQ2MzY1M2Q5Mzg4ZDNmYTBkNGQ2MzBmOTRkNjY4ZjM0NzhjODllMjcwODUwMWVkYjEyMzA3YTliMjE4OTU3NmNiYzc5Mzg4ZDI5MTM1NGNiOWE1ZDFlYWNlNGNhMWQ5ZjczNGZjNzhlNTVlY2JmODYzMzhhMzFlYmU1ODNjYWNlNzUyZThiYWZkMGE4MjAzODQxMzY5NjNlYjJkMmY0ZWVhN2IyZjY5NTk3NzM3YTFjYSI6IjhlMDE4MzA1Njc1YzI4N2Y4MDJmMjhmZTU2YWU1YzRiIjoiIjoiYzNkMzRlMmNmMWMzYWQ2Mjk0OTBkNzBhMGZlYzFhNjNjODhkMDI1ZmZlZDQ2ZmY4ZjVkOGMwODc5YzE2NmFkNzE2YjcwMjY4MmNkMGE0MzdiZGFhMDNhOWIyZTY5YTMyZmI3MjU5YjBmYTkzMGNhN2EzNDRhZWEzNzg4NmNjOTg1MGU0NGRlMGFhMDQ5YjhiYzMwMGNhZWU4MmUyNmIyYTFlNWFiNDVjNGM3Y2M2YTE1ZjVmNTk1MTk5OTk5YTBjYWNhYTU5ZGExYjJiZTJhMjA0ZmUxMzAwNWI5MmNlNzIyYTAwMDIyODU0NWFlOGE2MWIyYzY2N2EzODZmNDMxYiI6OTY6ImQ3YTZhOTE3YTI4NmQ4ZWRmMTI4OTE4MyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzczOWRhZTgzYTVlNjRiZDk4ZmZhZjY4YjViY2JjZDAxNTVkODEwOWU5ZmYyNTE4IjoiNTZkYWZjMDZiMzU0ZTg0Y2UzY2UzMWI3Zjg4MTkzMTI0Y2E3ZTcwNDkyNzJiZWI5M2ZiZWRjYjNlZGU4ZTAxN2JkYjllZTVkMzE0ZWM1MTY4NDQzZmUwMTI1OGQ5YWJjNGM0YzI3NTgwZjYyOTliMjAwODJiNGNhODdlYjI1ODliZWRjNDU5ZjEzMmRmYWVmYWZmZmRkMTNmODJlMTUzYTIxNjVkY2FiOWE5YjZjMTBmMWQwZDEzYjEyNzMxMmE2ZjVmM2Q2NWE3M2I4ZmQwNTdmMWQ4ODAzOGM1MTM3MjU0MTExZjdhZWRmMjFhZjA3YTM1ZTM0Y2Y0ZDIxNjZkOSI6ImQ4MGFjNGRhY2IwZjE0NDE4MzllMjA2ODAxM2RkZTNmIjoiIjoiOWFlNTEwN2Y0Mzk0YzkwNTBmOGNhOGFlNmQxZWI2NjA5OWNjZDAxNjZmMzhlNDVjMWNiYzE3YjMwZTIxOGZjZjYwMTVhYzkyZGQ3YWI0OGJiYjA5NWEwNTIzOTA0YzcyNzEwYTg2ZTUwNTE4ZDZhYWRlMjY5YzgyYmM1ZWNkZmE3Mjk4MDI0NDFlMDlhZWI5MzlhYmI0M2Y1OTYwNTQyYWQ4Nzk2MWUyMTQxZjk2N2QxMmY3MTkwYjA3ZGU5OTgxMWIyNjRkYzYyY2I4ZjA2Nzg3MmY4NGQyMWI2NjE1NThjZWVhZTQ5MjI5MDBmZmQ3NjA4NGU0NTA2NTBkZTc5YiI6OTY6IjZhMTgwZWQ0ZjNhOWQ1NzM5ZTU1OWQwMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGMyM2VkNjQzNzVkNDJjM2E0MDJmZGFkZDE0MzMzNmQyZjZiYWJmNGQ0ZWJjMTc2IjoiNTU0MWEyMTkxMDhjZTNjZTU5M2NjYThjNmFhNjUwNGM4NDk4M2E5ODg1MWJmODYxMGQ3MWY3OWEzOGJkYzIxZDUyMTkyNjZhZDU2ZTEwY2NiYTQ4OThlYTk2OTgxNWVkMGQ2ZGY3NTMxMmQ2NTc2MzFlMWUyMmU0NmY3MjdhNDk5Njk2Mzk5YTA5NTVkOTQ5NDJhNjQxMzgzY2FkZWJjNTMyOGRhMmFjNzViZjBkYjcwOTAwMGJhMzI3NzU4MWUxMzE4Y2I1ODI1YmExMTJkZjNlYTljNDUzYWQwNGQwM2ViMjlkMTcxNTQxMmNjMDNkYmNlNmM4ZTM4MGIzNjE2NyI6ImRhYTZmNjhiM2NlMjk4MzEwYmNjMmE3ZTBiMmY5ZmVjIjoiIjoiMmE0ZTA0MTAxZDRjODIyZWJhMDI0ZGNlYTI3ZDY3ZWNhN2JhN2YwZWE2ZDUyOTBjZWQ5Mzc2MDQ5YWUwODVjY2FlM2VjYjYyNGMwM2ViNWIyODA4OTgyYzg4ZjBhNWM0MzYzYTcyNzE2MTBiNjc0MzE3YmJkZjE1Mzg3NzZmMWZhMjQ1NGMyNDlhMWIwZDZjM2U2NGJkNGEzNTZhYzJhYTJmZDYwMWE4M2Q0ZmE3NjI5MWYzZWYxYTliZmM4NThjYzBhZWExMGNmZjM0YWI5ZWI1NTQxMWVmZWMyYTgyYTkwYWYzZmM4MGYzZDhlMmI1NjE4MTYzMDIzMDg5MGFjYyI6NjQ6ImQ0MDgyMDlmYWJmODJhMzUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY5NWRmZGUzNGYwYWYxOTJmYWE1MDI0NGFiOTVhNjA1OWUyZTYzN2UyMzdlYjYwZCI6IjMzY2EyYzYxYTA0NDY3YWQyYmJkMmJhODE0NDU3M2YwYzI1MDRhNGU5OTQ1ZmJhZTI1MDM4NTQwNmVkMTc1N2FkYjcwNTM0YmQ2ZWQ4NTRmMjI3ZDkzZWVlNTdjNzNhMzE0ZjU5NTUyMDhlMWJhNWFmOGNjMWU4YjViYjA3Y2I2MzAzMGUzYWU1ZjBhZDI4NzUzNmY0OWI1NzY0MThiYjFkMmRlYzQwNTYyZjZiZGRhNTljMzczZDY2NjhhYWE5Yjc5MTI4NTcxNjMyNWZjY2JkYTIxODBlMzM5NTVjOGJlMTlkMDVlMzg5ODIwZWQ2OTI1OGM5YjkzZTNjODJlOTYiOiJhNmE1Nzc5MmI1YTczODI4NmZiNTc1Yjg0ZWVhMmFhYSI6IiI6ImIyY2U0NDlmYzgwNmRmYjkzY2Q3Yzk3YzAxOGMyYmE3ZDcwMjIxNmFlMjlhNTMwYThmMjJkMDcyNzljNzU3MGM2Mjg4ZmMwMWZhOTkxNWI0MmE2YmU3YTdkOTU2OWY3MWI4ZmMyNDExZGQ5NzQ3YjVjOWM3YjVjMGE1OTJiY2Q3ZThmNDUzMGViYWVlMzdlOWM3ZDQ4ZDdhNTZiZTdlMmRmMWQ5MWNlY2ZkMTFiZWMwOWJiY2E3Y2U3MTA2OTQyOTg5NTk0ZTc5MWUwMGUyMzU1N2M4NDNhY2Y1MTY0ZjM4NjNkOTBmNjA2YWQ4MzI4Njk2ZjRjYTUxZmQyOTM0NmMiOjY0OiIwNTBiZDcyMGRlMWIxMzUwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYTg5YTUxNjIwNDgzN2JjNzgwYWQ5YjI2NzE3ZTUxY2NmNDI1OTFiZjU4Yzc1YzEiOiJjNzJhMWI4NzA3NTIyNDQyYjk5MmNiMjFhNzUyNmRmZDM0MWUyN2ExMWU3NjFmNTk0YWJiZmFjYzJhYzI2ZWE0ODUyM2QwMTEzZTM4YWRiZmMwNmQ0YWY4ODA5Y2I2MDY0NTQ0NjdmZDI1M2NhNDQyMjQxZTg5MjFiOTA2ZDZjMDA3ZGQwOWUxMzllNTY4MTk0NjY2ZDVkYTBiMzNjN2NhNjc4NzY4NTZjZjUwNGU4ZGZhYjRhNWIwYTc3Y2ZiMTg4M2Q1MzJlZjdjNzBiMzViMDgzODg4MmYxNDQ5OTFjMjVhMjMzMTg2M2VhYWFhMjA1OTQwMWY2MTM3ODc1MGU1IjoiYTliMWVmNzc0NDA3NWNkNmNjMDI0ZjhjN2IzYjBiNmUiOiIiOiIwZWM1MDE1MDU5MGJiNDE5ZGYwZDZjNDEwZWRmYzJmODgwNWE2MDJmZjI0N2UzYjUwODgxYWQzZWZiNTk4ZWQwNTNkOGRkMWRlZmY4NjQ2MGRiMDA4MWMwZWIzZWZmZTllYTk0NTY0Zjc0MDAwMTY2ZjA4ZGIyNGRhNmNmY2JhOTFhOWVlMWU5OGI4NjcxZGI5OWVkYmU4ZmRlMTFkMGU4OThiYjEzMGUxYjI3MzU4ZmM0MmJlMDNmYjMzNDhhZjdkZTkzNzZhZjQ5NWMwZWM3MWFlZDU2ZDY4MDYzMjE5NTUzOWIyZDFkNWJmODA0MzI4ZDA5MjhhNDRjOTczMWNlIjo2NDoiNmM5ZjU1ZTY3NTMzODI4YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDEwN2Q1MWY3ZDZlMjRhYTYwNTk1OWQ1ZDQ2YjRjN2UxNzQzYjdkNWUzYWUwN2I2IjoiZTUwNzRmZmJhZjVlNzcxZTEyZjllN2NjOGU3NzAxYjk3MGFhNzg5NzkyODY4MTM4M2VhMGY5MWJjZTgyMDBlYzY3ODJkYzk2MThlMDY1ZTE0MmM0ZWYyZjcwMTk3OTFlNzRlZGZlMjA0MGIwOGJkZjMyOGQ3ZDk2NThlNzQ3M2JlYWI2NTM1OWQzNWVkMTY4YTJiYjM5ZjNjM2Y1OTg5MDM1MzQwNWE4MmY0OGUxNmQzODhlYjhmMjE0NWVkOWJmZjAxNmU3MjU3OTFjYWJjYTkxMzgxM2U3NDg1ZjM4NzIyMzcxMWMxYWQwOThmZmEwZjcyZjc0YTA0OGVjMTdlYSI6Ijk0YTg4ZjY4NzI5OTViMjZkYTM5ZWZiNWUzZjkzMzM0IjoiIjoiYmYzMmE3MTdjOTQ1ZTFlMmZlOTFmZDM4ZjNjNzA4NDIxMGE3OTY2Y2I4MzIzNWQyOGY3MDFlYmNhZTZiMjA0MjIyNmU5MzJlNDYwMWViM2VkNDcyOGNhMzJiZjcwNjVmY2RjOTgwMTdkYWJjYWMyM2YwZjgwYzY1ZTkyNTE4ZGI2Yzc4YmY0Y2Q5MWY4MTdiNjlmM2MzYTg4OTE3ODZkNDMzZjZjM2MxYTAyNWMxZDM3YmQxYzU4N2JhNjAwNDA4NTU3MTI0NTU5MWQ2MTU5MDZmNWMxODk5NGYwOWEwM2YzZWVmMTgwZDdhZjM0ZjAwZWNmZTE1M2Q1YWI3MzkzMyI6MzI6IjhkNDM0MjZkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwZmE2MjcwYTQ0YzhkMTQ5MzdjYzNmZjRjYzJkMmM5OTcyNTRhNDJjYThhMDllYWYiOiIyMjUyZDFjNDcwNmNjNDZhZDNlNGY4YzQ5YTkyY2RjN2QxYWYyNGRlYWY3YjA4YWI3MzA0ZWY4MDRjZmUyNjFhY2MzYTIwMmJlYzBkOGRmNDJjYzM2YTVhM2FjZTllZDdhOTQ2NWNkZWMzNTEzZDMxZGU5YWU3ODIxZjk0NDQyMjY0MzljOGY5OGE5YTdkOTliMzZiOTFiMWIwMGVhYzcxMDgwZDdlYjU1MDIwOWFmNWZiN2IzZjI4ZDA5ZjUwNjAwNzBkYTczYTQwNDU2ZDYwYzA0NzA3NzNhZjk1ZDE2YzBiMzNkMGI1MzI3ZDQ0MTg4NjE5Yjk1MDU5MGVhODYyIjoiYjVmM2ZkZTg0MTE1NmJjNDA4ZWMzZGU5ZWYzNDM4ZmMiOiIiOiI0ZmNmYzU2ZmE3MjJhZjMyZTgwNGRlZTBmNGI2N2Y1ZmVhNTQyYjM4MWJjNDdjNDE0NTE4NDRjODJlNTQyN2Y2Y2Q5MGMzN2UwODhkYmFmZjcyMmQ4NzAwYTExZDVkZmI0MjgyZTU2NWYzMmUwNTUzMjRlNTA2OTkzMWM4NmI2MmZlYjJjZGY4MmNhMWY2MmFlZTAyYTcwZTRlMjc0YjJiOTU3NjUwYTVjYzc3MmJlODZjMWIxY2ZjNDFiMDFkMjBkOWJlOGIwNWI5ZTNmZjY1NDEzNTIwNzg5Y2EwZjE5OGZlMDBkODM0ODNhMWQ4NWFlYjEzMDk0YzlhODI3ZTdkIjozMjoiMWFlOGY5YzMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjEwNGMxOGJkMmEwNjQxZmQ0NmMyZDc1OTBkNjBkNmQ4ZWVhNzRhMjc1OGVkMGY0ZCI6IjQ0MzRjZjVkMTJkMDc2MTQyMjdjZmMxMjcxNmE4YWRmYzY1MWZmZTVjNjQ3NmNmNDQ4OWFmYWE2OThkOWQxOTk0NzAxNmJkYmNiNWI2MjU3NzMyNTI3NDVkZmVhZjliMTAwMjFhNWIzOGY3NDJlYThhMGZjNWY5MjZjODBjZWY2NTY4YWI4NjM5Y2RkY2Y4ZmVlOTY3OGQ0NWFkNDkzN2Q2ZTZiMDU0YjY1NTEyZjkyOWU4OTdlZDVmOTY1Y2QxNGNhZDkzOTczMmM1M2E4NDdiYjI3NThkODE4ZDVkMTMxOTc3NjQ5ZGI1YjU5YTBjNWViYWMzN2RiOTYxZjlkNjkiOiIyOTAyZmFlYzYwZjc1NGYwZmJiMTk4MWFlYmEyNzdmZiI6IiI6IjE3ODk1MjQ4NDVhMWUzNjMyMmM0NGRkMWU5MzhlZTVkMGZlNmRmMjQ0Yjc1MWYzMDIzZDVkNjRkNDBhNzI1OThkMzUyZDlkMmZhYmE2OGJlNGUwMzVjMjU4YjY4NzgyMjczOTI1YTk0NTI3ZmNkYjk3N2E0MWMxZTBhOTZmNTMxMTliNTkwOWIyM2IwMzI3YzgyMGU4ZjZkYTA0OWE1ZDE0NGE5ODAxOWM0OTUzYWFmZDQ4MTE5MDExNzU3Mzg2OTEwOWMyNjUwMTJhNDJmNzZiYjRjMzM1M2Y2NjEzY2NiYzQwYTRhZjJmOWUxNDhiZjBhMDMyNGJiNDMzMzdmYjciOjMyOiJkMzZkMmQwNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI2MzQ1MWYxODdiNmRjYWI5ZDhkYzQzNjQyMTdhNDgzZGQ4MGMxZDc1ZjI0ZmNlYSI6IjVlMjM2YzI4MmViNDY0NmZiZDE2YTk1ZWZmMmIyNzg3M2Y2MjVhN2U5MTkyMzdkNzU5ODlhOGExMTJlYTgwY2U4ZGIwYjRhZWFmNWRhNTljM2IyMjY0OWRhYmI1ODQyODRhYjk2NzNiYTdlZGVmNTkwNDNlYjhlOTk3NjM2NDM5NDFhNDc4OGU3Y2YxMWJhZDYzZTEzYzllZjA4NjQ0MDQ0Yjc2YmVlZjY4OTI4ZGFjMjI5NzU0ODFkYTRhZmM3MjNiM2FiM2I0OTgxODk1NDJjYmRmZmJjM2Y0NjdkMTkwY2QwMmU5YjM2YjY5ODExMjJhYTgwY2ZhM2FhMzU2MWYiOiI2YzQ1NTJiM2EwMzE1MmFhNDY0ZTg4ZmQ1YjE0MzU2ZCI6IjQzNTQ1M2EzMDRmY2QzYzRiZDZhYjkwZDZlZDhjNTRlNmQyMWY3NWI5ZTU2YzlkNDgwMzA0OTliMDRmNjc1NGNmZjYyOGM0YzkyMTZmN2Q4YTBhYmVkNWI4YjdjYTEyOGMwOTlhN2RlYWI3NGVjZmUyYzRhNDk0YjMwZDc0ODMzZjgzN2QyNTRhYTAwZDc1YWE5NjNjZTljMDQxZjE5MTZlYjYzZDY3M2E0YWYzZjg4ODE3YzY1ZDRjODZmNWEzYzI4YTY3ZGUyYWFmNzVmMDhkMWI2MjhhZjMzM2U1MThhN2U5OWQ5ODA1NzFkYjYwODQwN2QzZjQ0NzU2M2YyZGYiOiIxMmRlYTVlYTliNTQ5NTdjNjg5YzdjOWM2YTcxMWUyODgwNjQ1MTA5YTQwNTdmYWZlM2IzMjcyN2E2MGVlMWUyNGY4NDUwMzEwZDZiODQwMmMyNmIzMDdiYjBiZjNjYjdjNjQwNzI3MGQ5NTU5MGVmYjkzOGU2ZDc3MzU5NjY2YjExYTdhMzgzM2E3MTIyNjk3ZTk1OTY0NWQ4ZTlkODM1ZTBiZDM5YmRjMzAzOTcxMTViNGMzNDhlYTgyNWM4NTBjMWU1NGE2MGEyNTIyYTYzMjFlNGI5OWZhMmFkOTIxNTIwNTYyOGM1OTViMDdjNmZmZWQ5MzljNzc5ZDIzYWIyIjoxMjg6IjU4NTY3N2UwZjM3YWUxM2Q4ODZjMzgyMDJjMzg2MGI3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGJjZjczNWQ3Yzg3MDFmNTM3MDkwZDNkY2Y5MTRjNzQxZWQ3ODNjMjRiZDgyNjViIjoiMThlYjcwZGZmNzMzNDEyOThjZTMzZmY0MDQ5ZmE2MzFmMmM3MmMxNThmY2RlYTU1ZDEyMzFjNDZjOTViYTQwMTMwMTJiNzEzYmM5NWJhMjVhMjExNGQwMzgwYzI5N2FjZDA1YzMyMzY5NmRiNDY2ODc0MDgzZTE4YmY1NDRkYWJmZmJjNzBiZTQ2NDljZmU3ZThiZjQ0OWFlYjk3ODlkNmZhNDEyYTFhZGY1N2NlNzMyNzAyYWI5NjI1NjFmOWUxZmE4NTA3MzNjOTdiOGE0MTU4Nzg2ZThjY2YzMmFmMGZjMmIwNDkwNzEyNGU3MzFmZmFmM2ZhN2VhY2FhNjRiMiI6IjA5ZWNjZWQ4NDYwYWY2MzVlNDZiYzgyNDUwMzUyYmU1IjoiY2M1YjhmODJmY2UzNzk3MDA5ZmJkMzhkZmFkNzA1NWE1ZTJhYzI0MTM2M2Y2NzczMTkxZDBlNTM0ZTJiNDU5MmE2ODA1YzE5MWRhYWQzNzcyNDVjNDE0ZGY4ZWRjNGQzZDllY2QxOTFhNTBjZjk3NDdkZGU2NTE4NzQ4NDgwMmUxNTc5N2Q3YzdlMWRiNDllYTRlNDIzZTk0ZDlhZDNiOTlhZWE2YmYyOTI4Y2U2YWRkZmMwMDg0ODU1MGI0ZDJlNDY2ZTg1YTI4MmNjMDIyYzdjNDQ2OWQyY2IxNjE1MWU4MWJmNjNkZjM3OGUwYzY3NjAzNjE5N2Q5NDcwZjQyYSI6IjgyOThmNzk2NDI4ZmFmZmE2MDg1ZTQ1OGYxNDk2NzVkNmM2ZTJjZGZiYzc5OTRlZTZmMTlhZjQwZmU4OTI2YzI4OTA0ZmQ1YWMwYjliZGJkMmRlM2YxNjE0NTAwYTNlYWIxZjk4MGY4MmFjMjNjYWU4MGYzZTZiYTcxNTM5ZDE3MjNlOWYzNDEyZGYzNDU1MzZmNzUxN2Q4NDdhYWU3OWE4M2VlOWFkNWZlMzhkNjBjNjYxOGQ4NzBjYjFmMjAzYTNlMTg0N2QxNGQ4ZGU1Mjk1MjA5YzBlMDVhYTE5NmZlYzBlYWI4Mzg5ZTRlYjY2YmRmM2RkNDlkMDgwMGZmYWQiOjEyODoiZTUzY2EyNjZkZDkzZGVmNWJlZTVkYWY3MGM5NTNkZDIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ZjhkODQ5MDhhOGI3ZjVlMTE4NDgyYmI4NjcxMDJhMjQ0YmNiZjQ4YjcyMjkxMTUiOiI5Y2QyYTRlMmFjYmVlYTZhNzNiNWJmZmMxMTkxZDgwNDVmNjNmM2ExNGFhNzYyZWI3NzZmMzU1MThmNzJiZGU0ZjljOGRlY2Q2MWE5MzE5ZTNkZmNhODJlNjgyOTEwYTQzZGUyNzE5NDUxZTFhMzI4MzliMjliMjdjM2ViMWM4ZjYxMTg1MTJkNmExOWNmMTg5ZTJkMDRjZjRlMjI0NTkzOTc5MzZkNjBmNzU1MTI0NDM4NzI5NGE3OTk0MzIwNTQ2ZjA3MGU1NGYxNjZjZDdjMjQzZDEzZjMwMTdiNzg2ZjdkZjZhN2ZhNGVjZTA1YTJmZTQ5ZmMzOWUyMjI1YjkyIjoiNWJhOTg2ZjUxMTVkNDBjMmNmZTQwNDAwN2ExZTI0MDMiOiIwNmY5OGQ0ODA3ZWZlY2ZjODYzMzA5ZjNiYzY0YjBmMDRlNGMxNmMzMjY3NWZmOTdhMzI5NWQ1NjU3ZDQ0NDNmNmM4YjBhMzk0ZDNmOTQyNzA1YmRjMTljMjJiOGZmNThlOWI3YzIwOWI1MjhiNzQ1ZmEwNDI0ZDU4OThlZjBlNDJlMDkwOWFhNWFkMGIwMWY4NTQ5ZTM2NzQxMDJkZGFmNDc4NGYwZmY4OTA4Y2Y5ZjlhMjVlN2U0ZGQ5YWY0ZGE3YmQxM2FlMGNkODdiNmFhYTZiMTMyZGM1MThmNGE5NWFmNDAzZTYxMmVkY2U2M2UxNDI0ZGFjZjhlMzQ5MzcyIjoiMmYxNjhmZDFjODE5YjE1OTczOWE3Y2M3ODNlY2RiMGVmOTYzOWI3OTY1OTE4ZTM0M2UyYTU1ZjE5NmRhZjU4NGY3ZjE0YmI2ZTQyZDM3YjUwNGJmYzJjYzA4YzIxOGM1Yjg0MWIyZDJhYmNlMDViYmYxNTMxNWY0NzFlNTZmMDRmN2Q1NGQ2ZjFkYzdiN2E2OGI4YmM3MDI2YTE0NDExMDUwMTViY2VlMmMzOWQ4M2JlMzVkMjVmMGQ1MTRiZDFmZmU3NTQxMWIzMjg2N2ViZjJkNTMyYTc2NmY5YmZjZTllNTVlYTNlMDI0MGQyYTM3MTNkZGMyYmE3OTBiYWQyMSI6MTI4OiI3ZjEyMWVhMzZiMzY0NDllMWRiODVlOGE5MWFiMTZmMyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY2YzMwMzdhNTllOThhOWE4MTA5NGQ2NWNhNTI3NTJhZDkyZjkzYmNmYTY3MTgyMSI6IjI2NjQ3ZjhmNDA5MmY4MGZjMTlmODFmMDI5YzM1NGM1ODJiNTgyNTE2ZThlMjdlOTdkNTA4NjZlOGZmNzU1ZjUwYThhZTY0MjJmNGU5OTZmMGNmNTA4MjZhNjhjMDA3YTViMTZmZDU5MDAyZDM2OGVkMzI4NWJiZDA0ZjhmOWE1YTUyNDI0M2NiOGQ1YjNmZmExODRiYTczODQ3NzFiZmM1MDhmMmU5M2FiZDJhMWU3MTcwZDY5NGQzNWNjMGZmN2YyNDdlODRjYTg4ODllZmM4MjBjM2Y2ZDljZDQwYWZkNTZjNTc5OTk3MmQ3NTU2YzkxY2RlNTBhYzgwODY1MmMiOiI0M2I0ZjE1YmJlNTI1OTEzYTMxYTlhZGYyM2QxOTcxZSI6IjYwODI2Yzk3ZjBhOTliODhlN2FlYWI3NzRhM2YyMjc4ZjlkMzViNmMxYTVmY2U0OWQ5Mzg5YTQyMTU0M2M5OWY2ODc5NzIyNDUzNWRjYTRkNzA0MDMxMzM0MGRhNzM5ODIyMjAwNDBhMDYzYjA0NTg0M2ExNGY1ZDM4NzYzZjk1YmRkMjZlZjgxOGY2ZTUxNzFjOGQ1YjQ3ZjE4MzU4OWFmZDZhY2QzNmU1OWI5OTQ2YzFlZGYwMzhhZTI4NWY1MDAxNzFlOTg1MDYwM2NkYTM2MDQzYzI5ODYwZTc1YmZlMDNjMjFlMGVmMTFhOWFlY2M1ZDVjNTFiYjIyMDFkMjkiOiJlNThkZjk5Y2NlNWIyNTQ4Y2YzOTY4NGRmNmEyNmI4ZjliNzk2OTE2OGZmMjFjNDEwYmM0MGI3NjM4NDJhYjNiMzBjYmIzYzgyZTBiNDIwYzgxMDBkYTYxYzkwMzdhOWYxMTJkYjk1NjNhM2QwNjljZGYyOTk3ZTdmNGRiYjBiNWQ3OWI1NmYwZTk4NWNkOGNiNzAzNTUzNjZmN2FmZDIxMWJkOTkwOWM0OGIxNDJjNjU1NjMyNjA2MmQyN2Y3ZjgyZDc2YjgzYzQzM2YwMGYxNzE2ZWJjOTUwMzhjYjU3YzU1MGI1ODEwYjc3Nzg4YzhiZjFlNjg2YThhMTRiNjEwIjoxMjA6ImJhNmFhNmQ2OGE1NjA2NDJjMjY2YmY0NDY5ZWFhYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhmZDliMDgyMzJhMWQzZmJlMzE5ZDA4OTdjNzQwOThmNzViM2U4MDFkMTBlMTgzYSI6ImE2NzdhMTNhZTI2YjdhMDVjZWNmZDE1M2FhYWVhMDJjY2I1MGRiNjAxMjIxYTNkZjU0NTE2NGJiNWZlNjM4ZjZlZDI3NmQ0YmQxNzJiOWU3NDBhODJhNjkwYWVjNGYxOGY0ZjNhMGFmYjgwYzlhMzIxODg5NThlMWNiMzY1MTA2NGY1NWNhMTIxMTY0NzkwM2Y2MzAxM2U0NmI0NmM3ZjRmOTU1ODkwMTJlYjRjY2QyNDUxZDhlOGRhY2MzY2QwNjYyODFmMWYwYzcxZjY5ZjFjNDlmM2Y5NDEzNmE1MjJmZmYwZDAyNDI3ZTRiY2NhYjA1NmU2MTVmZjZmZGUxZDYiOiIzMDRjNzU5ODAwYjhlMjc1ZGZjZmQzZTVlM2M2MWE3ZSI6IjVkMmRmZmIwMGEyNTc4ODU0OGZmMWIyYzk0NzQ1ZTViZmNjMDVlZWIxMWU2MzUwMTAwNzMzNWQ0YmQwNmJmYjMyMjNkNDY4MmU3ZTgzZWNhMGUxNjNkMWE4ZjJhNzYwOTZhYjI4MzlhZDE0YjQ1ZWI1OWVhOWIyOWZlYjc2ZjQwYjBkOGRhYzU1MjQ3YzY1ZTVkYmU2YmIyZDUxNTVkZGNmMmIyZjkyNGM0OGUxYzE2Yzk5MGI2OWFjNDhlZjIzNTA4NzNjMWVkNTI0Y2UxYjhlZjZjOTJhMTFjOGU0NjEzMDNmN2MzMmI1ZDY1YjU3MTU0MTk3ZTQ1ZjFjNmI3OTIiOiIwNzc5ZTUwNTBkZDE3ODM3ZDQwZmUzNDI3MzIyZTcxN2YwNzQzMTJmMTYwYzE5NTFlNTU2MDc5N2MxM2U0ZmJlNDdmMzIwZGM4MDUzYTM5ZDJkZWY0ZDNjYzIwZTIxNTk3ODY0N2Q5MTdkZGY5M2ZkZjllZWU1ZTU0YTk3NDA2MGRiYWMyYTQ3OGFmZTVmNWFjYmY2NWFmNGRjY2JkMzk0MmQxMzBkZGRmZDkwY2ZjOTY5ZGEwYzdmNGI0MDUwZTM0Y2UyZTA0OWMzYmIwMDQ3ODJhYmY0NzQ0YzlhM2NhMjcxM2ViZmM1ZGZhMTZkMDExYmMwYjMzZDAzNjhjMTA4IjoxMjA6IjU0YzhhMWRkZGZhYTFjYWZiY2MxODgzNTg3YjRjZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5ZDM4NDY3YzEwMjQ2MTE0MzNhMGIyNzgwOTgwNTM4ZDg4ZjNlODkwN2E4NmU0MiI6IjI2MjNjZDBlYjQ2YTczNjY4NzcxNDljZTAyMDRkN2RjMDhhNWU2NGExYWRiM2I2NzU5MTc4YzRlYWIyNmNhMTgwNmZjMjVmYzBmYzk5ZGZjNzdkMTgxMWU2MWFjMWUwNGVlODJlYjY5ZWY3NTI3OTYyZGYxNzA3NzM0ZTRhY2E5NzBiOGE0OTllYjcwYzJiMDM4Njk0MjkwNjk0NWFiY2Q5MjM0YjkyZTdiZWMzMzAwOWU3MDc4NmMzOWJkMjQxZGEzOTA1ZDk2MTQ3M2U1MDM2N2NiNzcyNmRmOGRhMjY2MmZiMzIxMDFkMTNiNzUwMzI4MzhmMDFhZDc5NDY2NzAiOiI4ZDU2YTllNGJlZDY3YTdlYjBmN2I4YzVlNmJiZjA0ZSI6IjFjN2QyNzQ0YTU2ZjUxODViOWNkZjE0ZWI5Nzc2ZmZkMzE1MjE0NTQwZGFmZmM2OWMyMTdkZDY0YzdkMGZiNGE5ZjdiMWNjYzRjMWUzMjVmYzA0NmVlYzRmZWI4ZGYzNWQzMmY0OTJhMjhkMzU4NThhZDFlOWJmYWY5NTIxMWYxMTE0NzNjMmZmNzk5YTEyNGIzMDhmYmE5OTZiMDhmMTg1MTAzNjA3NjA1OTIyYmFkMzE5YzZiN2ZkMjExZjk3Yzg2MTU2NWJlYTM0OTQ4YmZkNzUxZTRjZTI1OTFhZTc3N2FiMWRmOGRjOWU4MjBjZGFkMTMwNjZlZDc0MzAzYzYiOiJlZGZkZmEzNWI0MWM1NjQyZTViNGRkMTc2OWI2MzU4MTFhNDhlY2YyMTkxNWNiZWYzYzllMmY4MjMwOTUzZjJlZDRmZGE4OTAzZWM3NjM0ZjEwZDU1YWE1OGM5NzVhNmM2MTMzYTE3M2MyYWViODNkNmQ3ZmM2NTM0ZWExNzgxZGZjNjI0MDhlN2ExN2QyNTVhOTgzYmQxYzMzZDJmNDIzYzM2NDg5M2RiODEyOGE1OTljZDAzN2IyZGIzMThmODZmMWZiZDg5NWE2NGE5ZmIyMDk0OTBiN2U5YTMwZGI4Y2RmNDJlMzQ4Y2ZjZmE3OTg0ZTE1YzE3ZGI4MTBlYzE5IjoxMjA6IjE3ZGZmNzhmNjFkMjFkZTRjMDc0NGU1NzE3NGY3MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ2OWJkYzlkMzU1ODllMzNlYTljMmI5NTY3ODBjZDk2MThlMGRmNzlkMTA4M2U2OSI6ImQ4YTc1ZGUyMmZkM2UyZDUwMTI3YzZmZGVhYmMwOWZhYjExNzg4NzU5OTgzMTllMWVhODNjOTc0NWExZDU4MzNjNmJhOWRmMDgxNzdjMzQ5ZGZhNDEyZTEzZTE5MjdiYmQ0Y2RmYjU0YTIxYzg2YzE0OWJlMWZlYjRkOWRlOTlmZmQ1OTA4NTA4NzVhM2Q5YzhkOTMwNjk3MWE5ODAyYWQ0Y2E0OGY3M2QwNTE3MzIyNTI1YWM4NDYzZTNkNTlhZTk4OTVjOWIzNjNiNmYwNzI4ZDc1ODVkZTc4Y2JiNDk3NTdiZDE5MTliYTJmMmQ2YmEwNDJkMDc4MWU3YTc5ZDciOiJhYmQ0Yjk0MzYyNTAxYjhmMzA3ZmNhMDc2ZmNjYzYwZCI6IjFhZDlhYTk5YTRjODE1OGVjMDhkMjFlYmZiNjI2MDRhMDQzZmMwYzI0OGZlMDhkYWExNWE4OWY0YTc4NTU5MTZhZjhhZWI2ODFhYzY2MDBjMDI2OGFkZTIzMWY5MThmZTUwOGY0OGM5Y2ZhOTk4ZWZmYzM1MGZhMTE3ZTI3NzJmMDQ4MzlmOGZhMWE1M2JjYTAwNjkzZWNkMjhkYjI3YzY1MDc3NTA0MDRiZDg5YWYwNzQ1MWQ2NmZiN2RmYTQ3MDY1ZTlkM2ZlMjRhOTEwZWIyNzkxMTU5MWU0ZjRlNDc0NmIzNTM1OWFmYWRhNDM1NjY3NmIzYzczMzFjNjEwYWIiOiI1MmU4OGI1NGI0MTBkYmZiNGQ4ODA5MmRmNTI2ODhiYTk1MDJiOTA2NzUyYjQ4MDJhY2E1NDI4NDM3ZDc5NWRlMGQzNTM5OTQ1YmViZGYyYmFiMDcwZGY0YTdlNjMwNDY5YjkyZmUyZGRlMDk5OGQ0NDA5NGNhZTdmMjFmODRlYTc4MDY2MzdmYTVjNzNiMTM4ZTg3ZDA0MDA1ZWYxMjA2ZGRmMzBhMjFmNDZjMGFhNzE4NjY1ZTgwOWZmYzBiNDJiNTI1MDE0MzYwNGIyMDIyNWVjNDYwZGVmYWY1NTRhOGJmYjVmNjllZjQyNDRlMDJlOTU2M2MzNzRhNDRmMGE5IjoxMTI6IjEwMjRmOGU5OTk3ZjVmYTQ2ODQ5MzBkMTc0MzEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2OTYwYmU4ZmU4MjA2MWU5Y2Q3ODNjZDFjMDNmNjNhMDBkNjBjZTlmYzQ3ZWE0OTYiOiJlMGY1NzRkZGJiMDQ4MzFiNWE4NmY0MDE4MmY1ZjEwZDg2NjdmZTEzYzcwNjViNDcxZGYxNTdmNjcyMzBjNDFiOGMwNjljMDIxOGNlYWI5M2Q2Mzk2NGJlOGVlODUzYzU2N2FkZDJjM2VhYjE2NzBiMDNhNTFmOTE3NWU4ZTc2M2JlNzc4ZWM0MzgzM2NkNzE2ZTFjOGZlNWNmYjFkNjYzMTQ5YjIxZTA2ZGY3NzJhMzk3M2ZlMTI5N2Q2NTE4ODIwMWNkYjBjMzUzM2Y1ZTlkNDBiYjA2NjRhOTdkYjYwZmM5OWQ3ZTQ4ZWVkZWJmMjY0MDI0MDA2Y2EzNjM2MWFjIjoiNjcyZjQzNzg4NjJjODI3MzgwNTUyNzNjNzI1NTViMzkiOiJlM2E0ZGJjZTg3ZWRhYzUxOWNlODYzNDllZWQyZGJhMGQzNzFjZWYwZDhmMjBiNGRkYTNlMWNkOWY1Nzk5YzlmZDBiNzQ5NGRhZWM1YmM5OTVhNjkzNmM1MDEyMTJlYjk1N2NjYzlkZGQ0YzliOGEyMDVjYWMxMjJiYTg3YjVjNWEwZWViYTZiMmFmMmNiYzIzMjZkOTUzZDYxZDA4OWI2MzM0Y2UwMzI1NzIwMzA3MmY4ZTA2YjhjNmYzNzY5Mjc0OGExM2U2ODEwODI5MDBmZDMyZjBkZjZhMzA3MmYzYThiOWJiZWIzZWE1NThlOTdhNDNkNjY1NjA5M2Q3Yzc1IjoiMmEzYzRiNzliYmNmYTRhZjA0YmFhODQxM2Y2ZjFkMThjOWM1NzkwNjBlY2QwY2MzNTlmY2RjZmMwNTY2Njk3ZmY4MzRmN2RmZmVjODRiMjI5MmU4NTgzZWNiNTljOWU1ZTVkODc5MTNhNmNjYWFjZWJmMzcxZjFmZmY2N2YwYmU3NDlkNGVhNWY1YzZmNGM5NTllOWQ5MzI0MTRhNTRhOGUyNWJmMmY0ODVlY2NlOWU3MDk5MGJiYzRlNjIxY2UyYzhmY2MzY2FhNjZiMDczMGM2NjM5ZGUxYmZhMDEyNGFmZTM1MTkxMjI3OWJjM2NhMzYzZjRlNjAxMzQ5NmNmMSI6MTEyOiJkYmRkNmFmMTk0ZjI1NzhhMGQwODMyZDBjYmExIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmI3ZDAxMTU2MTJjNTZhMWYyOGM2YjNjYjNkNTFjMmI0YmJkNGNkMzZjY2YzZGRhIjoiM2E4OGVmYTUyNGE5MGIzMTg3M2NiYTE3N2E3ZTZlMDUwZGM1OWY0MmM5MzQ5MjNkYjFlNzVmZWM5MjQ5MDgzNzBhZDBjOWMzYjBiM2MwNWFkZjEyYzZlZjI2MjdkOGQxNmY4MzIwNzFjMDU1YWVmNWY1ODFhMzlhOGU3ZDliZWQyNjI5ZTI2ZDVlM2VjYWVkMjQwNDhkNzQ0ZmJhMDhkOGQxMjEzMmRlZjYyMDU5ZjFhNTQ5MDQ0YzFkYjEyMWY0N2YxMGIzZGM0YTAyODQ5MTUwYWVmNTNiZDI1OWQ2ODE0MTYyNzYxY2JjOWUxYTg3MzFkODIxMDE2OTZlMzJkNCI6IjMxN2E2MGMzYzI5NDQwYjhiYTA0ZGFmOTgwOTk0YzQ2IjoiODBkODE2YmY0MDA4YWU1MWI5ZGQ5YTI1YzMwY2Q3NDgyZjIyODlmNTYxNmM0MWQ5OTg4MWFhOGY3OGI1ZWZmZjg0ZWZlMzA3YTgyMjE3NGYzYTVjMDhiMzgxYmM5OWIxNjliOTIwNTc2MjdmMjFkZGRjMzY3NzIzZWFjYTI1NDVjZTNhNGZiYTJiNDYzM2ZkOTk0NTlmYjAzZTg1ZDZkMTFlZDA0MWI2MzE4NWYzYjk0ZjYwMDRiZGNlNTU2ZTJhMGFhZjgxMWZhZjAxNTNiMzk3NGQwYmFlM2VhYmFkY2NmYzk1NDc0Yzk0MGVjYWQ1YjRkNWVhODhmODhiOGM0YSI6ImYxOTMzMDNiYjc4MTE2NGU0MmIzZDRkMjU1NjlhNDQ2Yzg2NjQ2YmMwZmJjOTMwNTk2MDNjMGI0NmVjNzM3ZGRmY2Q1NWRmOGM5MGU2ZDgwNmJkOWZlZjkwZjJiMTIyYTE3NThiZWY1Yzc1ZmNkZmY5NWNlNDQyMTdkOWI2YjBlNzVlNzc2NTZjYzdmOGE4Y2M0NzcyOWM3NGZhZjQzY2JmMDgyMDJlOWFkMTZjN2VmOGM4MzJjZTVmOTdmNTExNTNlMTc4Y2NjM2MxNjg5MjhmM2MzMjhjZDViNGMzNDFiYjA0ODJmNmEyOTJjZmEyZmE4NWUwM2Q5NWJjZDRjYjEiOjExMjoiNDIzMDhmZmM3NmNiNmFiM2M3NzBlMDZmNzhiYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc1NzM3ZTAxYTk1YzJhZDljODYwZTcyYTU3ZGE2NDZlMDFjMjI4NmExNGRmZWM3NSI6ImZhNzQ5Nzk5YWZjZjIyNDJhNjAwMGM0ZmUxZTA2MjhkYjUzOTMzZGRlOTlkNjcyZTNjN2IyNGIwY2Q2NTMzYjgwMDJiYjdhYTg2MzMzMjJmNGVlMmUzNDNkYjNhMDA2N2FkNDRlZGFhMzk4Y2Q5MGViZGI1MGM3MzJlOGJmOTVhY2ViNGFhYTRkZmQxZWFjYTYxN2MzMGMzMGMxYTE4NzYxYTZkMjRjMmRlMDc5MGY1NGY3M2UwODAyZWI4MmZmYzAxMjQ1MTdkZGFmZTgzMzZmNGVjNjE5NzIxOTM0NmRlZWY0Y2U5MzBlOGFlMjAxMTdlNmViZTQ5YTI1ODIzNDYiOiIxMDYwZDc4NTQzYmUzODRlN2E5ZGMzMmEwNmJjZDUyNCI6IjUyOGE2YzM0YzNjYjNhYmE0MDJiODU2ZGQ3Yzk2NzdkMGQ4ODgyMTY4NmVkZDg2Mjg3ZTc0ODRiNzIyNDhmOTQ5YmJkZmI2NDBkZjI3ZTNkMWQ2YjZkYzEyOTNlYTZjODRiZTcyYzg1ZTVmZjQ5N2Y1ZGE3NGQ3OTZhMjFmMjUxMzM4NWExNzdmMjlmMjE1NGIyMzYyZDVhYzgzYzM4OTdmMzY4ZDA2NTEzMzMzZjI5OTViNzAxZmIzZTVhYWJhYzU1OWY2MDE4ZmZmZDAyY2Q2YjY1ZWJhOWNkYzYyOTA2N2YxNWQxYWU0MzFkNmEyMjgxMTUwOGNkOTEzMDA5ZjgiOiI3ZTg3NzRjYjczNDY4YWQ5NjQ3ZjY5NDZhZWEzMGU5NDY4ZmFjMzg1MGI1ZmYxNzNjN2IzNDY4OTFlY2RhMzJhNzhiNThkZjhkODM1MzI4NjE1ZjM2YTEyYzE4MzcwZjNhYmNmMDIxZWQ3MjM4MzBiMDg2Mjc3NjcyNzJmNzY5YTIxMDVlNDc4NjQ1MWRiMDUxMjAyN2NlMGUzZjc3MGZiYjBlZTBlMTg1MGE1ZmM0NzlkZjRhZDVjZWZmNGZhM2IyYjkxMjRjMzMwYzJlNzlkNzcwZTZmNWU4OWFjZGM4ZDBjYTljNzU4OTgwZGZlZmFhYWM0MWFhZjZkNDcyZjhhIjoxMDQ6IjZiYzY2MzJiYjViMzI5NmVkZTllMWM1ZmNkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTMyNjIyNmIyNDIyMmIzMzg5ZDc5M2I2MWI3MjNlOWFjNzA1OTQ5NWExYjU5N2Y1IjoiMWNjMjZlNDUzYTU0Yzk0YzFjZjkwMmZlMTIzMDdjY2UyZmJhNGQ1ZjBmYzNiYjYzY2RiYWMwZGQwYjViYTMxZDA4ZGFlMmI0ZjA1NGM4NmYzYTNlZTkyMGQ4YjlmN2FkOGFlOGI0ZWNhMDkwYzg3ODNjZjM1ZGI1ZGUzYjk1ODg5YTg0ZjA5ZmYzZjcwMjYzYzYxNjgxZjAwYTQ1NGIwODEzODEzZjBmZTNlYzM4YTZkMzBjYzNjNmE5M2M5MWE0MjI3NDNlN2E3MjM0MGNiMDEyNzE4YjhhNGEzYjY2YTc1ZjEzZTAxNjVhYTUxZWU0YjAwMDQ2Y2JhMTJlOTY2ZCI6IjMyNzk3MmQwYzJlYmMyMGVkNWJkZWRjOGEzYTdhZWU1IjoiMmVkYjE0NTViZjQ1NzNhNTRhYjkyMWQzMWI3ZmM5ZTUzNGJjZTA4NzBlYjZlOTczYWZjY2MzYjFmOTNkZDJjMWE0NzZkZDg4ZTcwNTkxOWNhZWI1ZDRmNGE4NTE2YTcxOGNmZjg4NThlYjQ0M2NhNzc4NTU3OTAzNmNjNzI3MzU3MGU3YmYyNDg5Y2U3MWE1MmFkNjIzYmY3MjIzY2UzMTIzMmQ4YzliMThlNTJhMmRkNDUxOWJiMDhkODczMDFmM2FlNjlkY2MzNmM2ZGNiM2IwM2Q4ZmMzOWI2NjIxZjZiNDQ3MTA5MmU5NDFlZjA5MGM5ODIxYTA1ZGY4NTc1YSI6IjVhMjE5YTBkOTk3ZTg3OWZmZWI1NDhkNDNkZThlNGYzMmE5YWQxOTZkYzQyNWM4M2Y3NjYxMzQ3MzVhZDJjOWZmNWQ5NjY1YmQ1NGFjM2VmZGM1MGJiNGE3YTA0YmE1OTgyNWYzMWEwZjNlNTMwYWVmNDViYmEwMGNkNjQ3OWVmYWExOWM4NWVkYjQ3MzRmOTFmZGFkNjY4NmU1MGY5Y2M1MzFmY2FiY2U5ZTgzOTczODFiNGQ2OTFkYTRhMjdiN2M0ODdlOTNkZTNlM2E5ZTc2OWU4MzFjNjliMDc2OTdlNGJhYjQ3MGViZmY2MjhlNzEwZWZhMTdlNGMxODRlMGYiOjEwNDoiMmI5YWMyNzNjMDU5ODY1ZmFiNDZmMDVhZTMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZjVmMmQ4NDMwNDJhYjk0ZmM0NTE5ZDU3ZDkyMjllYTdlODE3MmFjZjUxNWZhYjciOiIwZTIwZjVhMmFmZmZhNGE1ZjkyMTkzMjA3MTZjOGEyNmUzNWExOWM1MjVkZGRkNTI4ZTVmNWYwNmYwZGEwODJmNDMyNzIzNjFmMDdjZmRmNTc0MjNmNjdhZDNjZmRkYTljZjE3NDdjNjAyYTkzNzQ3Y2M1NzFhZGZhYmNjOWQxZWMxYTgxMjg5MDhkZjQ1ZmUwZWRlMGUxNGZmNDAxNjlkZDFlY2JmZjdmNDA2MmVlN2JlMGExYWZiMzcwYzlkNTEwMzEzMmMxZmJlZTkyNjIzMDljYjA1ZWExNTBmYTg2MmQ2MzAzYWY3MTY3N2QyZGU5Y2FmZGI0ZWNkYWI4ZDViIjoiOTViMDZjM2NlMWEzZGU3M2NmNTFlNzgxYjk0MTA5N2EiOiI3NjVjM2ZhZTc0YjZmYTRiNmVkNGNhN2FiOWI4MjlkNzZhNzc1OWM1MDg3NGEzOGQyZWNmZGRhY2EyMzY1ZjdhMTQzYzk1ODRlMjU1NjA4YmU4Mjk5NTAzOTNlNWY5NDEzMWNhZjRjYWEwNGFlZWViOWQ1OTVlMzllZjNmOTgzMDI0NmQ2MDY2OTk1YjJkNDA0MzhmN2ViMDk0NGJkNDUyYWI0OTNiNDIyZTkzYTNlMGRjM2MwZmMyYTRiODM3MTFhYzY2OTNmMDdmMDM1ZmQ5ZDAzMTI0MmI2ZWE0NWJlYjI1OWRjMDIwM2Y0OTdhNzcxMDYzOTJlNGRhOTNjMjg1IjoiZjQzNjI4YTIyN2RjODUyZTBhZDkzMWUyMzU0OGZlZGZkNTcwMjBhMjY2MzhjZWI5NWRjNTYwMTgyN2EwNjkxYzQ0MjA5ZDE0MTEzZGE1NmU2YTFlNDRjNzI4NDVlNDJlYmJjN2ZmYmJjMWNmMThjMWQzM2NhNDU5YmY5NGIxMzkzYTQ3MjU2ODJmOTExZjkzM2UzZmIyMWYyZjhjZDFhYzQ4YmM1YWZiNmNiODUzYTA5ZTEwOWRhZGNiNzQwYTk4ZTVlN2VjODc1Y2VhOTBiZTE2YmNkZmVjNWY3ZGUxNzZlZWViMDdhMzc2OGI4NGIwOTFjNjYxZjY1ZTJiOTA1ZSI6MTA0OiI3Nzk2NGI1Y2U1MzIwOWVlNTMwNzA2NWQ0OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTFjZjE4YmJiYzFkODc3OGZhZjQwMzkxYzMwY2E0MTc3MzlmZjhlMmE1MjE5MjZjIjoiYTJlMTFhYzA5M2FiNjQ4MTE4NzU5MTgzY2Q1MmNhN2Q1NzI4Y2E4N2ZlMmYzMWVjYTI4Y2ZiMTMzMjVlM2U2ZTk1OTc0NDU2ODU3ODY2ZGRhNzgzNTkwMjNlMmM5OThkMmM5M2M2ZGZlOGY3MmM2ZDRhYzM5Y2EwNTg1YTUzZmMwNzRiZjExMjRjM2FkYTkyZTc4NDYyYTQ0NWRhMjNlNjUwYmY1MmUyNmI3ODJmZjUwMzEyZWUyYmViNzQxMGU5M2M4NDM1ZjdiODhkZmIwZWQ2M2Q5YTM4MjM5OTJkNzk2YmYzYWIxNDdjMzM1OTNjNWU2MTkzZWYzMmY3YTYyMCI6ImJkZDlhMmI3MGU0ZWUwY2M1MDFmZWNhMmE1MjA5YzNiIjoiMDUxYzY4ZmUwY2Q4MWI1MmZlZGUxMzdkMDEwNWU2OWM3NDc3MWI3NzBlYTliNTczYWQ5MmVjYWU4NmY0MjA5NTNmNDU5NzU1NTk3ZjY4YzI5ZjZmY2EzOWEyNzIzOWZhYTk0MGNlNmM5NDljY2Q0NGM5ZjEyYTAxNjBjZjc0YTU3NTc1MzMxMGY1MmVjNWM1YmI5YzQ0NzRiODUyNjY0OTRlNjNiNjgxMGRkZjdhNmFiZDFjZjgyNDRjZWJiZjY5ZDMxOThjNGEwOWU4ZGNjYmM5NDI5ZjgxNzkxZjVjMDI2MjhlOTQ3N2I5ODhlMmJkMTBmOWJkNWQ2NzMxYWQwMSI6ImNhODk5YTAwNjU0NzMwZDY4MjE5Y2EyZWQ5YjIzMDU4YTVmNDAxNTBjMjM3MTQzYjI0MjQ1ZGUxZTQ0MDMyOWU1MTM2OTBmMDBjMGM1MmJiZDBkZTgwNzRmZTVkN2E1MGZlNDIwNDcwMjQ5MjI3Zjk2NzM0MGVmZWViNjRjNDI0ODgxYzdmM2EyMGM0MDVkNThlYTgxZjIzMDljN2Y3NGFlNTcyYjMwMzEzZTJkNGI0MTlmYmY1ZjJjZjkwYzY3MDZhMWFlMWE4MDBhODgzZThiMDBmYmJjOWRjMjhiZjVhYTRhMzI5MjQ2YmJlOTRkZjVjMmQ0NTI0ZjU3MzcwZDkiOjk2OiJkZDQ1NTAzY2MyMDQ5M2VjNjFmNTRmMDEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgxMjQ4MWY4OTgyYjQyYjJmYjg2Mjk3YzRiN2M3Mzk2NTI5MDhkYzQ5ODE3MWM2OSI6IjMyYjI3MTI3NTgyY2VhYzIxZjk2OGY1NDE4ZTI0ZWM4Yjg0NjE3ZjRkYWFiMGViMDA3ZjAyZDQ1ODEyZTgxZDQ4NmRjNTA5MDlkNzkyMjFjNDM4ZGVmNTM1YjhhNTU5NDZmNTAyOTc5NjMxMzlhNmIyMWUxMzllODEwZDE5YmMxNTY2YjM3NGQwODBhMzg3YTY0NmJiNTgyZGM3MzhjNDQxNTZlYjZjOGRhZDYxMzU4NjY2MjQxOGVkY2JiMThmZTY4OGQyNzExMDgzMThkZTcxNzM0Y2I1NzFkNDQyZTRkOTUzN2IwZmNiMmY1Yzc2M2IzZmJjYWMwMTBmNWM0ZTEiOiIwZGFkNjU4YzczYzljODhkZDkyN2E1MDJkN2IxNGU4YiI6ImFmNDRmNzQ3ZDc3YTgzZWYwOTQ0ZjNiYWM4ZTgzNWQ3NTJiYjU1NzcyYTdmYmQzYzZhZjI3Y2EwZWFhZGQxMjJjOWFmMWUyYTlmMzdjMmJhNDI3NzllZDhjZGUyMTk5MTI1Mzc4ZmM4OGM3ZDZkNThlZGMwMWM2NTQ5MWM1ZWZjNmJlZTU4ZTdlOGJmNzJmMWE2OWQzZGJhNDdiMzhhNTAwNzcxMzBjYmQ3MWFjY2QzZGQ0ZjE5M2E1M2M2ZjJkMWRmNjk0NDc2NzY3Zjc5ZjhiNzFmZDQyNzQ1ZWU1YmQ0MWU5MGE3ZGQ1MGExNTk3NDQ1MjUxYjMyZGUzMDMxNjkiOiIwMDNhZTQ3OThmNmEwYjk3OTkwZDQxMzczNjIzZTUyODYxOGY5Mjk5Y2ViZGIwZDIzZTM3OTlmNjJiYjA2M2U1NTMwZWVmN2ZjNDBjMDZhZjE2OTY1ZmY2ODk1ZjY3NWZmYjgxYzAwNGQ4MjZjYmQzNmI1ZWVjOWJkM2Q5MGQ3ODVhZjAzYjY0ZDEyZDMxMWI2ZjkwYmNkNzVhNDA0OTdkMGZhZDVlNTRmODI5YTA5N2IyNWY3YTk2MDRmNmZhZDQ3NWM5MjM5YTBmOGQ1NTg5YjhhNzZjNmY3YmM4NTJhM2I4MjA3MzRiNDI2ZjU5ZWU4NDVlYzNmMDlkZDdkM2QxIjo5NjoiYjgwYmJjMDAyY2JlYmZiNGVjNWQ0OGMwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNjY1N2E3YTlkZGM2YjQ1OTVkZjk0ZDdjNmJlZTlkMTNhZDIzMWNkYzQ2YWU1YjQiOiIzNjg1N2VjY2I1YjNjMjIwMjY1YTQwOTgwZTg5NDkxMzVlODQwZWYyNzA2MDI5NDBkMzM5NGYzZjY3OWFlZDU1MjE3YzFkZTE3NWY2YjQ4YTE2ZjdiMzk0YWQ3ZDI4OGJjNDI1NzYyZjk3MWI3NTJkMTM3MmIzNjlmYjFjM2E2NDk3MGM4ZDE4YWQ2ZGUyZTFhOWE1NjFhNzQ5ZTNjZjlhODUyNGUyMzlmMzEyMWU4NjQzYmViZWU0NzFlNTVmYjVkNTRhMzQ1M2M1MWIxNzQ3ZGVmYWM5OGVhZDhiMjU4NTRlZDFjYWU3YWM0NGZkMjhjZjRiMWVkODk4ODg3NWMxIjoiNjg2MjFlYTdjNmFhZjFlODZhM2I4NDFkZjljNDNhYTgiOiJiYzI1YzM4ZDNhMjAwZmMxN2Y2MjA0NDRlNDA0ZjNiMzk5OWY1MWVkNWI4NjBjMDQxODY3NTBmNTVjYzUzYzY0MjNjNDRkMGVlZTAyYTgzYWYyN2QxNmI5NjUyYTdjYjNkMzRhNWNiMTk2OTRlNTM5OWEyNzJkYWNkNTZjNGIxNzg3MmZkMjNmZGNhMTI5YTQyOTliOWM4N2JhZjIwOWRkMWNkMWYzNTUwODhlM2Y5MzhlNmQ1MDUzYTg0N2I1OTEzZjBiOTEzNWQ2ZjI5MGUzNjU1MDhiZWQ3M2M2MTE2MGExMWEyYzIzYWFlZDc1NTFiMzI4ODJjNzlhODA3MjMwIjoiZGU4YmI4ZTY5ZjlmZjEzMjJmMGE2YzMwY2JhNWE2ZmNjZDdkMTdhMjE3M2E4NmNmZjU0NzhhYzhlYTRhZDZmNGU5OWRkZDQxNDllNmE5YjI0ODY1Y2M4ZmQ2Mzk0MDY2ZTI0YTU1NmYzZjZkNDhjNTk5NTkyYzU2ZjA2YTk0NmM2YjM0MTRlMmZiNDdlMTRkMWYxMjhlZjI2YjM4NTkxMjM2N2YzNTA4MjA5OWMxZjNkNGVhODY2ODdmMTlmMDU5YzU2ZGFjMjE5MjNlOWExNTE1NjcyOTk0MTZlYjMxMWY1YmJmOWEyODk2OGIwODBiMGIyMDAwNDQ2NjhmMDkxOSI6OTY6IjA2NWY2YzJiODY4OTFjNzE5ZWE3Njk4NCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjBjZjhjMmM0N2NkNTgzMjg2MTU3YjQ1YjU3NWQ0ZDY5Yzc5M2I0MjUwMjc0ZmU0IjoiYTY0YzIxMzFjOTRmYTgyN2MzYTUxMGIyM2IyMGZiNmQwNDU3OWJjMjkyZDJlYzMzZWZjOWViMzE0NTkxMTVkYTE0M2Y3M2ZiYTliZDhiMDNiNjdlNTkxNDk3ZDEwOGY5MDBhNzI3OTU0MmI0ODBiZDNhMTNlYTU4OGEyOWVmZTY2Njg4YjUyYzNmZDU4NTk4YzY2ZDg1OTU4ODhlODdiMjc3MzRlNmM1YjI3OTZjYzYwYWIyYWEzZGQwNmEyOWM1NzdkZTViZGJmMGI2YzY5YzcwMzRmMDE4MTA1MGYyODZiOTMwMGQyMTRmNTQ5MTY1YTBiNWI1NmJhOGU0MDY0MSI6ImFiNThkMmUxOGViODNjMjBkZjk0Y2Q2YjU2OWM2NWZlIjoiOTNmZjYwNTdlYWFhOTU1OWQ4N2UzMjc2ZDRkOTAwODg4Y2IxZjU2NDM0Y2UyNjc3ZWUxNDg2YTBhYThmNGU4ZDAyYzQ3ZDA2ZTY4NDFmM2ZiZTViZDcyZGQzN2ZhOWQ4MWJiZWY4MDdkY2E2OTYxOTEwODQ0ZWI5NjExNDE5OTM2MzEwZDcxN2UxODQzZTdiMjc4ZjQ4YWU0NGE1N2MxZjIyN2E3NWZhOGNiYzdmZDU3YzhjYzNiMTAxZTAzNmM4ZWYzMDQzNjQyYzgxZjM4MTU2MWI2MWRhN2M5ZDc5YjZkYTllYzQ2ZjdjZjA5M2MyOWMxOTMwYjI3YzE0Zjk5MSI6ImEzZjYyMTI2MWFmMTdlYzQ3NTYyNDU0MTQyODAwMTdmZDM2MTMzZjJmOWZmODllYjg5NzlkNDQxN2I4ZjkzODkyYmJmN2IwOGJhYjc4NTM0MWJmMGM3YjVlMzY0M2YwZTMzZjAzNjYzM2U1ZWJlYWU3YTc1MGZmZGZjZmJhYjY5MDI5MTczMWU5MjIzOGJhNmI0NTg1OWIzMDk2MjkyMjRmYTdlZmM3MjI5OGQzY2YxYWUzYjZhOWU5NDc5NzU1MmFmYzRlM2E0NjIwNWY5YmFiN2ViNjRlNGE0MWFlZTBlNDUyODk3MDRhOTcyMjFiNzExOGQyMDllMGIyNjdhNjgiOjY0OiJhZTUzNTY0MjcxZDVkZTVkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4YTMxMWJmMzU2Y2IxZDFmNThlYWI0MTFiNDViOGQ3OGI4ODA1MmYzYzhhYjgyMWQiOiIzZTkxNWU5MmYxODZmZGUwNWFkNTVhMjU5N2NlYWI4MTQ5NWFiYmFhMGJlMTA3ZGJmNmEzNzU1MjVkMTE1N2EzMjJiMWY2NTQ2MGRjZTBjM2FhMmJjMDhmYTg5Zjc3N2RhYzRkMmZjM2U1ZjdmMjBhMGQ1ZTMzMzczYzdmMWMzNTUxMzY5NzM3MTI0YzcwMjkyODcyNmJkOWRiOTZhMzNiYWNiNTZmMWQ2NDVmYTAyY2ExZDg4NjI5YzU0N2MwZWFmOTU4NWVlMjNiNTMwZWE5NzFiZjQzOWM2N2UzYjc1MmFmODgyNjY4ZWJlMGM3MzliMjZjODM3ODg3YjlkMmJlIjoiMDU2OWQwNWYzODI1ZDE2YWFhODllODY4MTJmODA2MjgiOiIyODQ5NGExMjAyNmViODliNDZiNjEzOTU3M2RjZGEwODM2YTYxN2UwMGUyNWUyZGFhOTJmOTM3MmQ4NmMzYzE2MmNmZWMzNGQ2MzRlYTQ4Mjk0Yzc4NDgyNTYxNWY0MWUwNmU1NTVjZjkxNjk4MzkzMWUzZDZhN2NjYmI0NDQ4NjcwMTM5NjE2ZTNiYmY3MTA5Mzg3YTg1MjcwM2IwYjlkMTJjMWZiZDk2NmY3MmJmNDlhN2UxNDYxY2E3MTQ4NzJjY2RjNTlkYzc3NWMyNGE4NWU5ODY0NDYxMTIzNzEwZmQ4ZGNjMjY4MTU4OTRlZThjZjJjYTQ4YTRlYzczYjNiIjoiOWJhNzc2NjUzZThkOWQyNDBkOWMxZWMzNTUwMjdhMTg3MzFjNTAwOTI4OTI1ZTdjNTBlZjgzYzZmMzY5NTcwNzNhODM4NmVjYmZhZjQzMDYzNGNkNTU3YjFkYTFiZjEyMmYzNzQ1NmZlYTNlOWI1OGE2ZTk5NDEzZDlkMTZhMmYxYjQwZGZmODQzZmUxNmEyZmEwMjE5YWQ1ZGQ4YWU0NjExZGU1M2Q3YWFiYmVmN2E4N2NlNDAyZTYyMjc2YWRkYzdmNDRlMDlhZTllNjJjNWNjZTRkZGNlNTY5NWRiOTg3MDg0Mzg1YWU5YTk4ODg0ZWM5N2U2N2I1NDlhZDQ0MCI6NjQ6ImM2NjljYTgyMWI2ZWY1ODQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgyZmM0NzYzOGNmYjM2MWVjZjc5MjRjMDM5MjVkNjAwNmNiOTk0NTllZjU2OTFlOCI6ImQxNGE1NTBkNDE5YjhlMDM3NjI0MjlhN2FiZGEzYjE3YWQ3YTEzMDVlNWZjNjM5ZTcxNTM4Mjg1Y2Q3MGQ3OGZhMzBlMGMwNDhlMmMzMmQyYTdmZDdmODJjODc0ZDYzYWU5MjJkYjVhNzcxMTFiNDZjYWVmYmZlNGZlZWY0ZGYxOTc4NmU1ZmVjNmE0ZGY4NGY3NmRmNDEyYjFmMDZiZWExNDlmMTk5NmI0MWIxMTdkMDBkNDIyYmJhNTU2NmQzYWY1Mjg5Y2E5Mzc3ZjMyNWNhMWU3MmY3ZDZhMzJkZjY2MDdiZGUxOTRjZjRhYzUyYzI4ZThhYTFlOGYxYzlhNjciOiIyYThlMWNhZGQyZjI2NGYyYWQ3YmU5ZTdiZGZhMjRhMiI6IjgwODgzNThkN2MzY2E4OTUxZDdlOGNkNmNhZTE1ODQ0ZWRhYmNjYzhkMGZjZjhmMTY5YTQ4Y2Y0MzRkNDgxNGYxZDdkOWFlNDEwZTU1ODFkNDE0Zjk1MmY1MmI4NTJlYjEwZmNmMGYyYTY3YmVhODI2ZWEyZTI4MzMxZjA1OTcxNTJlNjI0ZTE0ODQ2MmQ1OTUyZjEwZmEzNjM2NjZkNTdlYmZlMDM2Njk1ZTFlNjhmNzkxNjFiOTkxZTIwYzhhZTYwOTUyMzJlNjNmZGUwNzNjNzk2MDMxMzU4NDljNjJmOGQ5OGExZDgwNjA4ZmMwODExNzExMTRkYjQxODgzZjYiOiJlNTRjYzk1ZTg0NWY0ZDFiMjg4ODVlOWI5MGQxZDlkM2NjNTFmZDlkOGZlYzliY2U1N2RlODc4MWEyOGI0ZTViN2FiNDQ2MDc0ZTg0NDcxZDdhOWEyMzc0OGI2ODljMzU0ZTQwMmJlNzdmOTg5MGE5YzUyYTJlYjkwMjJhNmE0MTVlMDEyODVkYjFjNmViNjZkNWUxNWY0MjE2YTRmM2Y0NTc4MjY3N2I2Y2NiZjIwYWM3YjM1YmQxNTNmNTJhNTk5NzEyZDA5NzEyZWYxNDU0Y2NmNzJlZTQ4Y2NhOTY3ZjQ5MTdmMWFlYWVhYTZlYWFmODQ5M2VjN2ZmMmRjMWQ0Ijo2NDoiMDkzMzQzZTQ5YjcwYzkzOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDMxODA3MDNlMWVjOTNiMjBkMWFjNGQ2NGU4NWQ1NDYxZDc1Zjc4M2JjZDJmNGZhIjoiYjdiMzUwZGI2ZmMwNzk2ZTlmZDBjYjIzOWY1NjFiZjdlMjdiMmFhMjZiOGUzZTc2ZDhiNzM3Y2FhMWMxYzVhZDYyNGEzMmY1NzA5ZTRiNzUxZjhjMjExNzJkNGQwZjRiYTM4Y2E0ZDFkMGUyNTcwYzA4NGNhYmRkMGU4ODgwYjM1MTQwYzg0Zjc3NWMzYzMwMWE5YjI2MDgyNWUxZmQ3NWY5ODM1Nzc3ZDZjMGUyM2QzNTlhZjFhNWY3Y2FlZjkzNGI5MWJlZTUyMTUzMTU4MmI2MzliZTJjY2E4N2MyOTkxZjU1MjVmNGEyZjY0YzMwYTE0NTMwMTNkNzNjMTZjZiI6IjkxNmQ3MmQ1MTVkMzI0N2JhNDg4MjhkNDExM2JkYTNiIjoiMTAwMjUxMzAzNWNiMWQ3ZThiMjcxMGZmOGM5M2NlYzU1ZTJlMmMyYjU2MDAwZDRjMTE4MmI1Mjg2NzM2YWNkMmQ2ZjJmYzliODJmNzExNTZkYmE2Zjc3NDYzODA1NjI3ZTRiYzM4Yzk2ZTA5MWVjZDk0NWRmN2U5OTZlN2ZjM2JiZmRhZTNkODVlZjEzMzdmYmNlOTYwZmQxZDYwZDA2OTYyYTE2NjllOWU4ZDIwYmUxNTFmNjMyM2NiMzhlZjY4YWI1ZTgzOGYwMmEwZjM3OTU2N2Y1MThmMTVkODFiMTkyY2IyNWE0MjM1NjgwN2MxYjljMDJiZWY4MzA5ZmY0NCI6ImQ1OTBmMmFmY2Q2NGM1NzRlY2UxMmM2NzVmNTA5ZWZkZmZjMDFlMTQwNGNiYWZiYzkyM2M0YjQ0MzkwZWZmNjZkZDgzOWU2ZDgwMGRmNjdiYzA2ZjQ5Zjc2OTExZGYzY2VjMzZhM2ExNTIxNzYyZDZkNGE4ZWU2MDJlYmVmZGUwMTc4ODYzNDQzZjkxODY2OGZjZGU4YTUzMWYzYjVlZTBlNGMzNzllY2YzZTc1ZTdjNTlmNzUzZTQxZjRlMzk4MTFiZDNlN2RkM2Q2YmJhYTFlODFmZGJmOGJkOTc2Mzg0YTZjNDUwNWY3ZTQyNzAzMjFjNzMyOWJiYTdmMTU1MDYiOjMyOiIyMmU1MGVkMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDJiYzBhOGFiNTQ2ODEyMzAwOWIyYzY5YWFmZmQwYTIwYTFmYjA4MmI1NWE3ZWNiIjoiOGJmMzJhZjE2MzJhNzkwM2YwMGU4MDFlZTZlNWM2OTAxNDdjMDIxYmU2ODg2Y2YyNDYyYjIxNzI3ODZhYjI5NmUwZmViOTY2NDhlNGE2MDJhZTZkYzQ1ZTJhYTYwZTY2MTAzNTZjZGUyNmIxZGRlM2FhMTE0YzU0NDkyMTZhNDY3ZmNkZTE4MzMyYTZkNDgyZDI0YTFlZTk1MjM3OTM0MGQwMzZhNDhiNjNlZmEwOTJkYjRjMzBhOTVmNDAyZDU3YjljODM3MTgzZTkwMGI0NzgwNWYxNzBjZmU5ZTY5YmFlYTJiOTM5Nzk5ZTk4M2Y3NDcwYmIxMjk3ZjkzN2JiZiI6ImJjZmMxNTMwOGU4OTFmMzI1MDZhNTBjNGVkNDFiZmY2IjoiMDFiZmY1ZTYwNmE1MzZlOTUxMjEzYjIzNjcyZGI5MDc0ZmE4YmJmOTQ3ZTgxNWQzMmNiZmUzMGFkYzFlNzM2NTE3Zjg2MTM5ODQwYTRhYTBhNjcxYjRlOWJiZDZhNTlkMjkyZGIzNGNjODc3NDJjMGRmZDJkNjU4ZWYxNTc3MzRjNWZkZWJiM2U1NzcyZDQ5OTBhZDFiMjY3NWMyM2RkZjE0NzJlODkyZGFmZTdiZjE0MGQ2MTRjNTBjZjkzNzkyMzQ5MTY2MjI5OWFiOTU3NjA2ZjRjYTVlZWQyZmFjZGM1YzY1Nzc4NGJhYzg3MWZhYjA0ZDZjZDNjY2IxODMzMiI6ImI4ZGZmMDMxNDE4MzI5NzBjOTI1ZTdmZjAwMzgzOTRhMGRmN2YzNWFkZDMwNDZjYzU2ZjczZTNlZmY1OWUxODkzMmFhYzY5NzQ1NjEwN2I2ZGE3ZGEzMjQ5MDQ5YzNiZTVjMDk4ZGQ3MzBjZDRiZjY4Y2RmNzk4YzNhOTMyYjJjNTFmMThkMjllNDM4NmNiZjFiNzk5OGE4MWI2MDMzNzIzMzc3ODQzMDdiMGJlYjU5MjM1ZWJhNGQzZTQ4MTA4OTlmNmQ3MWE5OTRiYTk3NDJhZWExODc1ODc4Y2NlZjFiZjY3NGVlNjU1YTA3MjBiZDM3ZTQ0YjMzY2FmZTU3NDIiOjMyOiJiZDBiZTg2OCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2MwN2Q1Y2NhYWRiOWUzYmE1YjVkZGYzODBhN2EyYTE3NTUyMmI5OGUzMWUxZDM0IjoiMDRkM2U2YmNkNWViZjY5NmZlODRhNzAyZmZkNWY3NmRjYmU5Njc5YzkwOWIzNmQ0MWNlNjM2MmYyMjkzMDRhZWIxOTg5NmM2Mzc2Y2IzYzI1MDgxZjcwOWFmNTdkMzZmMzlmNDIxZWNkYjcwYmVkOWY4Mjk1NThiZWM2ZTc4ODIzMjc1ZmMxMWY5YTJkNWY3NzNkMjcxMzZkOTAzZmYwOGU1OTI2MzM4ZGZkY2JjMTgyODI1Nzk0ZTVmNzM5ZWZjMWYwZWNkYThlNTM3NTFlZGJlMGQwODk2MzQ3MWZiNTA5OWYyZmYzMWY3NmI0Nzk2NzdiZDZkMTg2YTQwOTUyNSI6ImU0ZGI1YzY0MDNhMDNkYWE3MDM1MTY3NjMwNTJiY2UwIjoiYjc0N2Q5N2YyNjNkMGZmNjExOWRmMWI1MzMyNjQwZDJlNDU2ODgxM2FkYzEyZWQ3NjE3NWZkZmZmYWZkMDg3NDU2NzQ4YWJiMjY3MTk1Njg4ZDJkYjQxY2FlZjMwMTExNzk3OWRmZDJkYjk3MTRiMzUyMzk4NTk0MDA1YmViYjQ0OWVhMjA0MTVmY2ZiMjY3MTI1M2Y2OWJmNjQ2N2NlN2Y1YmNlMzUwYTgzNGM0NTg2ZWIwM2U3NjZjMTkzMGU3ZTZjY2YwMTI4M2VhMzFiOGM3M2Q3OTY3Y2RlMGYyYTUzY2M0NmIxYjUwYzQ4NjQ5MDQ0ZDZmNzUzZjFkNTRiNSI6ImY1ZmFmN2JkZDk5YzYyZWM4N2Y5M2RhMmNhM2NlMzFlNjk0ZGYwYTBmZDA0ZDYxOTE0ZjlhN2E0MjM1ZGUyMGUwYTQwNmUyOTdiYTEwOTlmZmY4YzE0ZThmZDM3YTlkNmNiZTJjNWM1NzJjOTg4Y2IxZmY4N2ZmZTc4MjVlMTk0N2VhM2RhNzNiOGIzNjMzNzIxZmI0ZTA4ZGViM2Y4ZmNhZTI0MDdkNzNiZDRjMDdmMzJiNGY5YWQwYjEzNjQwMDNiMTFmODQwMzdhMjgyMzllOTZjMzk5Njg3NGJhOGU0ZWM3MjcwYmYwNDQxZDY0OGY1MmYzNzMwZDMwZTM1MzYiOjMyOiJlMDgyMGM0ZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRkMDFkNDg3ODllZjdmMDdmODBhNzM4NWU0ZDFiMTczNDkwM2JjNmVjNzY4YzlmMiI6IiI6Ijk0NGVkNzc0M2JlOWNlMzcwY2JhN2I3YzliN2RlY2UyIjoiIjoiIjoxMjg6ImRmYTBhYjM4OWMzYTc4MGY1OThhZjgwMjAwYzg0ZGE4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDM4Mzg0OWVkMGRiM2U1Mjc0M2FhODJmZThjZDkxNzNiNDU3NzU1YmU4YmJkNDZjIjoiIjoiYzZiODUxODM0NmVjNTJjMDAxNjk3YjdiZDM4ZGM3OTUiOiIiOiIiOjEyODoiNDhhMTk5MjU0OWI2MjdjODYyMWU4ZmJhYWRhY2IxNmMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MzYzODgwNTNlZTAxMTZiM2Y3ODNhZTM0ZjAwMGQ1ZmUyYzVkNzEyODQyZDQ2ZjkiOiIiOiJjNTQyNmIyMGMwMTRlNDcyYzdiODViZTJlZDBmNjRjOCI6IiI6IiI6MTI4OiI0Y2YwZjZhNDVmMzU0NGUzZDM5MTM3NWM4ZmUxNzZiMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQwZGZjYjMxNTFhOGRhYjFjYjc5YTZhMWU2YTI0ZmI1NTAyNGQwZTI1NmJkNGIwNyI6IiI6ImI4NDk1Y2M1NDY1M2U3YWQ3NDIwNjE1M2VhNjRjM2NiIjoiIjoiIjoxMjA6IjFkMzc4NjQxMmUwY2ViMzgzZGUzODk4ZWYyY2ZmZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgzY2E0MWQ4YjMzYzYxMzRhMTRkOGIzMGIwYzM2ZDViNzk5NTc0ZGQ5MjVmM2I4YiI6IiI6ImZiOWFjYTViNDkzMjAzNWM2NWI1NzFkMTcwZmRmNTI0IjoiIjoiIjoxMjA6Ijk3ODdmN2Q2OGQyNjQ4OTYzY2I0OWZkNzQ1OTEyMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg4NmU2NDY2ODhkNTczYzJkY2M4Y2EyMjlhMTFiMzk0YjM0MDA0MDhkZDgwMTUwMyI6IiI6ImMwNzQ0Njg1NzIyY2I4NzcxN2M3NmZkMDlhNzIxZGFjIjoiIjoiIjoxMjA6Ijc5NGZlNGRmMDA4NGMyMWZmZWFmOTU5ZTViMDM4MiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBiODQ1ZGMyYzRlOWU1YTk0YmQzZTg5NjkzMDBiMTZiNDVkM2FkNWVhZGIyZTgwYSI6IiI6IjA5MDBiM2ZhM2NjOTgzM2Q3MDI2NTVkMjg1ZjkwNGVkIjoiIjoiIjoxMTI6ImRjNjcwNTE4ZTE1MGQzMjY5MjFiZDVmNDNlODAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYzlmYWMyZTMyYWI0NGEwNzc0OTQ5ZDUzYTYyYzFjZGEwNGIxMzJhM2IwN2EyMTEiOiIiOiI4Y2Y2YTgxYmZhMjE2MzNhZDk1ZmZjNjkwYzczNzUxMSI6IiI6IiI6MTEyOiI0Y2Q3YTZlNGYzZWMzZDQxZDA4NmU2YWJmMTRjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWY5NzIxZWY3ODQ5ODBkMDMxNDA0OTBmNzYwMzEzY2M4YTU2NDI0YWZmYjAxNjcyIjoiIjoiYzEwNGJkODQ4MmUzZmU3MzU5Yzg1ZTBlOTRmZDQwNzAiOiIiOiIiOjExMjoiM2Y2ODJmYzcxOTg5ODA0YmE3NGJkYWQwNGE5NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY3YzkzNWY1Njk3MDY3OGFiODlmNmQ5NzMxNWEzM2VmYWU3NjE0ODI2M2U5NWYxZSI6IiI6IjFhOTE5NjVjNTQ1OGY0YTFmZGUzMDljZDQyYTNmMjc3IjoiIjoiIjoxMDQ6ImNlMjY2YzZmMDQ0NzYyM2EzZWYxZjZmNTdjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzBlY2VhNmNhYzcwYTlkZTRmNGY3ZjQ0MWQ2YjliNTYwOGNjYTM5ZDA3YzBkZWQ1IjoiIjoiMzYxZTVjZDIxYzY3MGRlMzliNWYwYjJiODk0MzdmOTkiOiIiOiIiOjEwNDoiNDhhOTYyMTUyMmE5OGJjNmMwYWNmMDM0MjkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0ZmI4MGM0ZmQwMjZjM2Y2OGFiOGZjYjhlMjhlMTQ0ZmRiM2JhMDBkNzAyOTVlYmYiOiIiOiJlZTU1MmZiOTRhNTI3ZDE4ZDI4NWQ2YzE5NWNhN2IyZiI6IiI6IiI6MTA0OiI1ZWM5NzYzMGNlNTkzZTlkNTYwMTM2Nzc0YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzAyNjEwMjNlZTlmNjgyNzg5Y2U5YWU5NzBmYjc2MDFmMDc1NTEyNTllZjkxOTQ1IjoiIjoiYmZmZTRhZjc2ZGI3NWJjNGEzZDQyYjU3YzczYzUxYjYiOiIiOiIiOjk2OiJiZjgyN2I0NTI2ZGE3N2FiMmUyMTkwOGMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRmYjRhYjIwNzFiZmY0ZWMyMzlhYzA1YzA0ODAwODA2ZGYyYzI1NmE0ODQ1YjEzYSI6IiI6IjNlZTBlMmU3MmVlYTQzN2U0NmE4NzNiZDY1OWIxYzRhIjoiIjoiIjo5NjoiNTcyZDNlYzI2NTBhZDU3ZWVjODRmZTAwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOTNkNWViZWI0NjZkM2ZlNjg3NTRiYmE0MTNjNjUxMTJhZTI5YzVjYTVlNDUwYzQiOiIiOiIwNGU5ZDMxYjNiMTIwNWNhZTM3YzQzNWQ1YTU1NzlkZiI6IiI6IiI6OTY6IjcxMDA0MzU2ZjI2NjY4ODM3NDQzN2FlZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWE0NTVlYTFkOWE3ODQyNWE0MWQ0M2UyOTNlODhkZTQwZGQ2YWQ5YWIyYTYzZWYwIjoiIjoiYzEwOGM1NmExYjMyNjEwNDJhZGM4OTA0NmFkMWVjZjgiOiIiOiIiOjY0OiIyMTNkNzdlZDA1MzRjYzIwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkNmZmZjg3OTdkYjJmMTg4NGI3ZDcxZTNlZjNlNTk4MzIzNGE4MzdkYmQwYzJjZDYiOiIiOiI2YmU0NDE3ZDdjMDBmZTljNzMxZTA5MzJhNzAzN2E3MSI6IiI6IiI6NjQ6IjY4YjZjMjg3ODZhMDE3ZTciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg2ZTZjNDUxZWEwZWNhZWM5ZTM2NWJjNDgzMWU3YTZjMDkyYjY1ZWU5YmNmMWI4NiI6IiI6IjYyNTgxNjhkYTQwN2NlNDNjYzE4ZDY5MzE0OTdjMWYzIjoiIjoiIjo2NDoiY2JmMjAxNzJlNzVhNjMxNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTI5NWNjNjQ1OGQ5MDdkYTVlN2MzNTZhN2RlNTFlYjhlOGQzMDMxZjcyYTA1ZmI3IjoiIjoiYzdlYWFkMzM4OWZjMjRhNGVmOTZhNzExZmZiZmZmOWUiOiIiOiIiOjMyOiIxMjUwOGUzNyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzA4YjZlZTk1OGY4MWE3ZmJmM2JjMzg2ZTE2NzQ1OTIwNmRmOWMxY2I5OTlkOTA0IjoiIjoiMmM2MWI5OTFjZTQ3OGQ5YWFjODE4ZDdhYTc1YWRhMzYiOiIiOiIiOjMyOiIzMmVhZDE3MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODczZDAzMzc3MzIxODM4NzY5MGMyODcxNDQ4NTc4ZDg0NDBlZjM2NTUzNTgzOTI4IjoiIjoiMDIwNzJlYzc0NWM4NTZjNmU4Njg3M2EwNTIzZDYwM2EiOiIiOiIiOjMyOiJlNmE1NzI2YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNmZDljMTM3NWRmZDE5ZTY0YjVlNGI3NTAyMmZhYmFhMDQ5NjI3ZDUyMzhjYmEzYSI6IiI6IjBhNzQ1YzY5MTBiMjNjNzhiMWI0NGMwMmYxY2UxMWIyIjoiMGNjNjcyNGI5ZjM2NzU2MTlmYmM3MDExN2JmY2ZiNTg3MWU5MDNiMGYwMTM4MmU0MDQ3OTNjMWRmYWZmNWE1YjQxMzFhN2ZjMzA0MTAxNDk0MWRjMmM1Mzg3MWJlZTNmZjE4YzA4ZTlhYmJiMTNhOGVhMjIwY2I4OWNmNjViZWExNTgxZWI4YWM0M2QxNDgyMDM1MzJkYWQ4ODU0NjE2MjEwZWQ3ZjFmOTQ2N2U2YjIyMDcxY2NjOGJiN2UzYmQ4OWEwZWQwMmE3MDU4NDAxYWE0ZjJiNWQwY2UwNTAwOTJiNjUwNTkxMjgyZTY2ZWU3ODliYmYwMzJkYzEwNTUwMyI6IiI6MTI4OiI4ZWM0MWU5Yzc2ZTk2YzAzMWMxODYyMWIwMGMzM2ExMyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZjOWYxNmM1ZGZmNGJkOGQxODU1OTk1ZGNhZDFjNDI1Mzc1OWI2ZTJhODMzOTk1YiI6IiI6IjNmMjVlMzIxMGQ2ZDljYWE4NzI1ZWI1NWM2ODEzY2VmIjoiN2M2YTY2ZDkzMGM5NWNlMTAyODMxMGNmYTM2NzBiNzdmZmViNWU5YjYyN2E2Njc4NTk2NjVjMWRlZThlNjk5MzBjMjg3ZmIxZjFhMzcwNmVkMWEwZDM1ZWI2ZDFiZWNiMjM2MzUyYTIyNmE1YjY4NmJjMjdlMWUxZGNlNGFjNmQ1OTc0ZDg4Yjk4MTJiMzliYTI4OWIyNDkwODIxMzE5YjVmZDY3N2RhMjNmYWIzYWRiYWU0ZmIzNjMwZTI1NzFhYzg4N2VkOTUxYTQ5MDUxYjBjYzU1MWU3ZWJlOTI0YzBjYmIxYzUxNmY3MWRiNjBlMjQ3NzM0MzBkYzM0ZjQ3YiI6IiI6MTI4OiI1ZTAwMDQ3OGI1NWVjYjA4MGMxYjY4NWYyNGYyNTVhOSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE4ZTM5M2UwMDcxNGNkOTRkZTAzNDczNTFiOTI0ZWJkNTU1MDAzZjNhMjk3NDkzZiI6IiI6IjljN2VhZjczMGZhODA3NGFjZDM3MmZkYzUzYjcyNmMwIjoiY2U0Y2I0NmU2N2Q4NWM1ZTY4YWZlNjFkZGVjYjFhMzZkYTRkZTQyNzc0ZDQ1MjUwZDBkNTJiMzI4ODM0Mzg1Y2UxY2ViYTk2ZjcwM2RhYWI4MWQ3YTk4MWNkODBjNDY5ODU1ZTE0ZDgzNGRmNDFlNGMwYzk4ODczZjNkYmI3NzdmYzA1NjJmMjg0YzQ2NmI3MDFhNTMwZjI3ZmM0ZTY4MzhjZWNiZDE2MmRiMzRiOGU4YTIzMTMxZDYwZDFmOWRhYzZjMTRkMzJhMjE0MTE3M2Y1OWYwNTdmMzhhZjUxYTg5YTljNzgzYWZkMzQxMGRlM2YyYmJkMDdiOTBhNGViMiI6IiI6MTI4OiI2NmJiNDZhZGY3Yjk4MWY3YzdlMzljZmZmYzUzMzkwZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImJkMzU2YThhY2QxMmIwNmRlOWY2MzgyNWU5MzY2NGNhYjFiZWFlN2Y0MTEyY2M3MCI6IiI6IjcyZWFmNDU5YjhhZjBmNzg3ZTkxZDExNzkzMWUzY2RkIjoiOTI5NWIyMjdiZTNlMWZhZjRlOTY5YmU2YzdmMjBkNTA3NDMxY2Y1ZGE5ZTJhNTc3YzliMzE1MzgwNTg0NzI2ODNiZDUyZjBhZDNmMmZhOWY2ODE1OWMxZGY4OGU3ZGRlNDBkNjYxMmY4YWJiMGYxMWEwMDc4NDE5YjM0YjU1OGQ5MTQ0ZWE2NTk2YTA5ZTVkNTU0OGIyNzU2MjBlNWEzMDk2ZGNlYjI3NjhkMmY3N2EwYjc5ZTBiOTYzMzg3ZDMwMTZlY2MyZjE1NWQ5MTgyZTMyMDlkOTdjNzYzMjliODMwYmI2MmRmMTk1Y2IyYmUxMTIyMzU2NWY0OTZlNzUxYSI6IiI6MTIwOiIyZmY0YWVjYzkwZTJkZTlhN2QzZDE1ZWIzMTRjYzgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MGVjYzk1ODdiYzJjZWMxYmE4N2FiNDMxYzdlZDAzOTI2MTY5YzAxZWJhMTk3MjkiOiIiOiI1YTY1ZjI3OWY0NTM1NzJlMTY5ZGIzMzgwN2Q5YjUyZCI6IjI5NTIwZDkwMjBlZmExZWNmNTE0ZTM5YTI4NmYzOThjNzIyNWI5NDU2MDhkNGI1N2VjODczYWU4YmZiZGQ0MGU0Y2JkNzViOWI1MzVjOWYxNzFjZDc5MTNlZDRiMjFlMDlkNmJiMDMwZWFhMjdjYTU4YjA4MTMxODE3MTEzYzg1MmI2Y2JkZjU1MGQ5NGRkZGZkZTg1OTVlNjg5NDcwY2Y5MmY5YzIwOTYwYjkzNmFjMDY5MjE3MTE1OGU1NDA0MTE1NTQ4MmYyOWU0YWNhZTQxNTY1ZDg3ZjU2NDFkMWFhYzk2YjhjYjc2M2I3ZjEyNjdjY2RiY2UyMzRkMDY3ZDQiOiIiOjEyMDoiODNkZWMwZmIzNjQ2M2I4NjI3MDY1NjY4MTQ1NWEwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTQzNDUyOTNmYjc3MzNmZWE5YzhiOTRiZTJmNGZjMjZmOGMzNjU1ZjU4M2UyYjBlIjoiIjoiOGJhZDRmM2YyODliOWY0MDYzYmEzOTYyMmJhMmI3ZWUiOiI3ZTJiNjUyMGQ3YTU1NGU2MTJkMDFmNDYyNjA2YzBlNmQwMTgxYmFmZWNlMWRhZjU0ZjQzMTZkNzA3NDgzYTVkY2Q0Mjc1YTA4Y2FlY2MxYzIwZjNlMzI4NzJmZTNlNTdmYTYyZDU5ODk0OWY1ZTQ5ZWYwZWZkNTNlOTE4NjE3ZTBhMTQwMzM4YzAwNzAyNTQ5M2YyZTBmOGRiZTVmY2E0YTU3ZDFkYjYzMzM1NTFiYmNhNzkyNDNhNzNhZThhNjhkYWZiMzA4OTk5ODM1OTE1OWRmOTE2ZWU2YmE0ZjkyOGE2YTE3MzM5MGYxNWYyZWU2MDQ1ZDU3OGRkNzU3YmIxIjoiIjoxMjA6ImRhMzA1MTgxYTEyNTE3NDIwYzZmMGQ3MWZkM2VlMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImEzOTE1NTIzMDMxYzNjYWE1OGNlMDJjMmIxZTZlZTJlYjQyY2RhZjMxMzMyNDMyYyI6IiI6ImQ1NDE2OTg2YmViMzEzMWFmZDZiNzk2NzgzNmQyNDNiIjoiYmE0ZTg4MzE0N2M4ZjA3YWZjMDg3MzVlNmU0Mzk3OThiZWM2MGUwMGVkM2Y1OTgyZjY2ZDZiODJhOWFmNzU4MDkzNDExMmE5ODU4ZjgzYWJiZDcxMTkzMTkwMjk4ZjA2ODM0NTNkM2Y4Mzg4YzQ3NWZiYmM4ZjliNmEzZDJjNzcwNDZiNzM5ODZhNTRjYzQ1NTljNTdjYmI4NjMzMDI2N2UwNGJjZjVmZDU4M2M2ZDI5NjhhNzk3MWRhNjRjOTlkOTg2MjM2NzYxNTRiMGVlNDEzYmE1MzFlYmYxMmZjZTVlMDZiNGVlMDYxN2U0M2JkYWViNDA4YjU0ZDFiNDQ0NSI6IiI6MTEyOiJmMjczZmU2NjRlNTE5MGE1MDZkYTI4ZWE4MzA3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzk5ZDNmZjI2NjY0NDEyOGYzMzBjZWI4YzAyODI5Nzk5MWIyYTU1OTNlNGFmYTNiIjoiIjoiOWQyNzA2MWRkOWQ1MDgxN2IzMDg2ZjQ1M2YxZjQwMWEiOiJkM2I1YzQyMGFjNTk3ZGFhYWM3NTAzY2QxN2Y1ODBlOTRhZDc3OWZhZTBkNDE5OWFkYTJjN2RhN2M0YTYxMTIyODc1MjM3NTY0N2EwMzI0MWYyOWY4MTBkM2E2YTc0YTE0MGVmOTY1MWU0YTYwOTkyNTlmN2Q0MWVjNGU1MWEwMjkxN2U4Y2MzNWVkZjdmNjBmZmM0NzM4MDVmNTZmMGFkNTFmY2M3Njc2NzAxNTdjMDUwYzMyMTRkMzZmODMxYTU0YmZlYjdhYjIwMzljYjEwZjc5MTliODliMGY2MjNhNTcyYWFlZDMxMzk4M2IxMDVmZGZmNDk1ZDk3OWI4YTg0IjoiIjoxMTI6ImU2OTBjOWFmZGVjZWEyNDk0YjZjZjVhNTc2YmQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NDgwOTA1Y2VlOGJlN2Y0MmI5NDkwOTM2MDQxYTE5YjA2MDMzMTcxMjg4MmRhNTUiOiIiOiIyNzUwMGEwOTUwNmUwMTMzYzg4ZjY1ZTc3NzIxYjU0NyI6IjUyODMyZDQxMThmZGRmMTgyYjIxNTEzZGIyNWQ1NGExOTIyMDMzNWY4Njc2ZWEzNWMwOTQxZDJhMzhhM2FhNTM2YjhjOWNiZjA5M2RlODNjNmIyNGRhMzM3MmJhYmEyODI2Mjg5YmIzY2FjNDE1Nzk1YjliZDNlYTYyYmI5YjQ4NDUwOTc4ZTc5YjkzNmNkNzBjZDU1MWU1ODBhNmRlMzQxOGEyYmUwZjRjMWYwNjI5NTRhZWQ2YWRjOTRkODA1ZTU5ZmY3MDNkMjM5ZmMyMzE4YjgwY2VlNDVjNTdmOTE2OTc3YjMxOWE5Y2U4ODRkN2UwMjcyNmZkYjcxYzMyODciOiIiOjExMjoiNTJhNTcyMWU5OGJhMWE1NTNkOGU1NTBmMTM3YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA0MmRiM2Y4YWY5NWFkNjg5NjZiY2U5Y2EwMjk3ZWQ0MWI2MDg2ODNhMzc0NTdmNSI6IiI6IjMyZDNlOTdlZGQzZjM5M2RhNWFiYzM4MjdjYWUxZTY3IjoiNGQ3YzJlZTZlMDI0ZTk1YTZlNjg0ZGVkOTg5OGY1YzdmYWU3ZGE4NjU4YmRiNDA1NjBkYWM2NDk1ZTQ2YTY5MWU5N2MwNDdlNjYwNDZiNTVlOGNmOWIwMmQzMWQzY2FlZWJlM2E5ZjhhZWVkNzU2ZDZiMGRhMWFjNWQ0YmEyYzVlN2I1NGFkZDIyZjY4MWFiMWQ1YTJhYzE0NjNlODQ0N2UwODU5MmUwYzJmMzI2MDViZDAyZjJmMDNjOTI1YTIxNTllNWJkZDg4MDMyM2Y0Y2UxOGE4MjZhMDA5NjJjZTQxOGRiYmQ1YzI3NmUzZmYzMGYxY2JhYTQ3OTVkMWNlNSI6IiI6MTA0OiJlMmFmYmI5NWE0OTQ0MzUzZWQyMTg1MWYxMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdmNWVhOTBmOTlmYzc2NTk0ZjBmMDY0NDgzMjFiZDRiYjVlNDk0YTVlMzUxZTQxYiI6IiI6IjAwMmE1ZGEzYzU0M2NhNTZkZDdlNWIwMTNiMDk0ZjcwIjoiYjgxNTBiNTBlMzZkZTg1MTU4YTk2ZDIwOTY2NzhmMzFmMTc5Yzg3NjVhZTZiYTU3MjNjYTY1NWU4OTA1MjhlYWU5NmQ0MzhmOWQ5MzY1NTc1ZGFkZWEzY2ViYjRkN2RmM2E5ZDUzMjNmOTM2OTZjNDA3ODFhNjY2MWRkNDg0OTUzMWU2NzJmNWNlZTdjZGZjNTI5NDE2YzljM2ZhYTg4OWQwZjY2ZWU0MDQ5Yzk0OWMzYzg0NTk2ODBmNDkwYmJiMGEyNWU1MGFmNTRkZTU3ZDllMzI0MWUwZGZmNzI2MDRhZjU1ODI3YjljNGQ2MWI3ZDFhODlmNTUxY2VhMjk1NiI6IiI6MTA0OiJkYjlmZDkwYTBiZTM1YTI5ZjgwNTk4OTQxMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRhMjg3ZDM0Mzc5ZDU2ZjU0MmVkYjAyZWE2NzNiYWMwOTcxNTBmODc2NDhhNTdiOSI6IiI6IjY2OTYwMzRiMWIzNjI5MjdiODlhZTFiN2FiNTI5N2Q3IjoiNDU4MThiN2I2OWIwNWExMjFmZTVjNTczYzk5MDNjYjExNDc3ODczYjI0YTU0NGJhOTE5YmFlYzc4ZDE1NjVmNGFkMDc2NmRhNThiZmFiZmFhMTdhYzNjNjI4MjM4YTRkMzhiNWMwYjE0YjUyZTM5N2JjYWM5OTE0MDhkZDdiMzIyZmY2MTRiZDY5N2NlMmI1Yjk0Y2ExNTVhNDQ0MmRkZDllNTAyYzRhNWY4MTIxMGMzMmRmZjMzNDgxZjQyMTE4OTdkYjM4ZjYxOWIzMDhmMzcwOGQ1NTRiZGI2YzdiOGE0ZDJhODBjY2RmZDVmNzA1MDFjODM1MDJhMzEyY2E4YSI6IiI6MTA0OiI4ZTY1ZDg2ZWRjMDcxNDQ2NDU0YTFiZWYzNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTc4MmFjMzM0Y2JmZmM5Mjc2OWExNzBjM2NkNDM5MTVmNzM1YjQ0MjNlYmI0ZGMzIjoiIjoiNzM2ZjJmMjRjZDA0ZTI2ZDM4ZTY5YzU1YjM4Y2NhN2EiOiI1ODI3ZDM5MWVmZWMyZjhmMTAyZTVmMDUzYWM0OTZlMjkxMDI0OGEwZWI3MmU4YTBiM2JmMzc3YzYzNDlkZjAyYWIwNDEwYTNkMjhiYzI3YWJjN2NiZTU4MmEwMzAwMGRiNTc4NDM1NjVlNGZiMDZjNDA3OGRlNzVjM2YxYTIxMTMwZDU1YmVmYjdlY2I5MTlhZDc4OWE0ZGUyODE2YzNhNDJkNGU5YjMyZTM4ZDk4MGMwNjA0NTk4N2QwMzczOWNiZTc3MTBkODM5YzQyZjA0ZjUwODgwNzJjMWExMDQ0YzNiODk4MDliNzgwZTc0ZTU0ZWMxMzVmYmU0MTI5ZWUwIjoiIjo5NjoiYzZkYzNjNGFlNTJmMzk0ODUwM2Q4NGE0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMDUyOWMzNzRmMjFjOTdiMGE4Zjk2ZjdiZDViZGViM2ZjZDJiMTJkYjMwYjNlZTQiOiIiOiJlNmU0NWI3YzI4ZjdmYmNhZTY1OGFjYjUzMzYxNGU0OCI6ImI0MTI5MDAzMTkwNjcwOWVjODA0OGY0NTBhOTQwZWZmMDQyMmE2ZWJjN2I0NDY2NmMwNWYxN2FlYzlkZWJjMWJmZWNjZTYyZDg5NmQ1ZGY0NjE4NTE3ZmI1N2NlN2IwNGVmMTU3OWViYjI2MzZkYTBlZWFkMDYzYmM3NGVjMTg0YjBhNjljYTNlYmE2NzVmYzcxMDdiYjUyYTQ5ZjkzNzgzNjA4Njc3NTY1MjA1YWRhN2JmNWE3MzE0NDFlNDRjZWRlNzgxMTIwYTAyNmNjOTNjZmUwNmEwNmZiMzEwNGE1MjFjNjk4N2YxMDcwODIzZTVhODgwY2JiM2E4ZWNjODgiOiIiOjk2OiJlOWVjNWFkNTc4OTJjZTE4YmFiZmRlNzMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU2MzQ3ODliMjllMzczNzYwZWNiOTk1MmY0Yjk0Y2E3NmY0MGRkYTU3YmEzNjNkZCI6IiI6IjdjZDFkMmQ2YmVlZjQ0YTZkNjE1NTE4MWRmY2EzZGM2IjoiMDEzMGE2NzkzNWUyZGYwODJhOTVkMGJjNmRhYjE3MDkzZmIwODc0NmE4MDljYzgyZGE3ODkzYzk3YzVlZmMwMDY1Mzg4YmI4NWM5YzI5ODZhNDgxY2M0YmJkZWI2ZTBmNjJkNmNkMjJiNzc4NWExNjYyYzcwY2E5MmE3OTYzNDFlOTBhNTM4ZmU2ZTA3Mjk3NmQ0MWYyZjU5Nzg3ZDVhMjNjMjRkOTVhNGNhNzNjZTkyYTEwNDhmMGIxYzc5ZTQ1NGZiNDQ2ZDE2NTg3NzM3ZjdjYzMzNTEyNGIwYThmYjMyMjA1ZTY2YjkzYmMxMzVhZDMxMGIzNWVlYTBmNjcwZSI6IiI6OTY6IjQwMDY2ODVlMmQzMTdhMWM3NGVmNTAyNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjAwNzIxMTA1NzIzMjFhZDk4MDRlZmI1YmNiYzJhZTdiMjcxYjFjYmIwZjQ4OTdiIjoiIjoiNjA0ZWQ4MDU2NjY2YjE3ZmQyN2IxMTFhZmQ0MTkzNzUiOiI5N2Y2OGMwMDUxM2IyMjQ3YmM4OGEzMzFhM2ZmYTEyMDgwMzg3MzZkNjc2MWIzYjA4MDg4NGE4ZGQ0NmUwNTk2ZjJjMDBjMWE5M2JjZWVlZWU4MTQyMTBlNTdkN2YxY2JkYjRlMGMyZWE2YTA4MzRiYWY3MTY5NDVhZjlhYTk4ZTI4MjZhZTBlYjU3MTdiMjQxZWRlMmI5ZTg3M2Y5NGMxZGI5ZWI1ZTFiMjVmNzU4MjdjMjU4NDlhMmM3YjkyMDk4YjU0ODQ1ZWQ4MWY1Mjg3MWEyYjBkMTJkMzE3ODQ2Y2VjMzRkZWZhYWFmYzNiZDNjYzUzYTZhYjgxMmJkMjUwIjoiIjo2NDoiNjQ4ODFlYWY3OGFlYWE3ZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTkxZThjMmQ2OTI4YmJhZjg3MGUxNDFlZTM0ZDNhNTZkMDBkYWNjOGM3ZTUwNTE0IjoiIjoiNmYzZDY2MWEzZTMyMTg0NGQxZmMxMmQ1ZWMyYmVjZjYiOiJmYzhlNWI0NWFkMTY0N2Y5ZGJkYmI2YjQzN2FiZWNmMGE4YWM2NjA2NWQwZTI1MGFhMmFlNzU1MjU0NTVlZTEzYWRjZThjNTlkNjQzYjk2ZGU5MDAyZDc4MGRiNjRmMWViOWQ4MjNjNmI5YTQyMzgxNzFkYjI2YmY1ZDA1MTUzZDFlM2M4MzliOTM0OTUwODQzNjNiODQ1ZmVkNzU2NzFhY2UwYzAwOTgwMDQ1NDU5NjY3NDIxN2IxOTgzMjc1MTI1MmYwNTFmMzk5NTc3NmE4OTIwOWMxNjM2YjRmNGIyOGEzNjRiY2NkZWRiNzhhZDM2ODc2NzQ1YzFhNDM4NDA2IjoiIjo2NDoiMWY0ZjQ5NWFkZmVkNmMxZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTM4ZmY5YzhjNTU2ZmZlNzYzN2Y3NjAyY2FlNDI4ZDdlMjBkZmY4ODJkNDRkZGMzIjoiIjoiMzhkNzAwNWZhZGVlNTViNWEwNDM0ZDkyNGQ5NzE0OTEiOiIzZmFjY2ViMDQ3ZTQ4Njk5OGM5NDU4MzllZTVlZGRkNjcwNTRiYmIyODMwODM2NWIyOTA5ZGFiYWVkMjlmZDViN2IzNDY0NDA0M2ZhNDQzMTY1ZTA3YjIwMjE0NzEwY2Q2NTJmZWNkODE2ZDkyNzNjNzAwZDY4MjhkMjE2ZGI4ZjNjZWFhOWVlZDBlMjUxNTg1ZjRlZTViYTRiZWIzYzA1ODJiODEyOGEzZWNjMDFmNGIyOWNhYjA5OWJhMmE4OTMxZTU2MTIwODAyZmRmNjAwNGE2YzAyZTZkZDAwMjU3YTgzYWRjOTViM2FjYjI3MGU4MDAwZmQyMTI2YjhlYjgzIjoiIjo2NDoiZmE4YWVkMTk4Nzg2ODM4OCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTE4N2EzNGNjYjc1ZmMwNmRhZmVjYTAyMzUxODZjNjRiYTkyOWFkYWM2Y2Y2ZTQ5IjoiIjoiOWRkNTE1ZDM0ODFmMjFlZmJlNDMxOThmNjIzYjM0ZjciOiI4YTFiMDBlYTVkMWY0ZTQ1MWNlYTcxYjNkMmZjOWJiMDNiOTc5MGE4YWU4YWUyNjJiM2U5N2ViZjM0OTExZjlkODY1Yzg4MTBiOWZlNzc5ZmZmNzAxYzcyZjM2Mzk2NTRlNjA4OThkMWY1N2ViOTMzODE3NDlmMGUyY2VjYjRlZTM0MmY1ZjM0NDczMjE1ZDVjNDY4MTgzMzhmZjY4ODYzNzIxN2ZkZmE4YjdlZTU1MmRiMDE5NzNmZGI2MDg0YzNjMjBiNTMwODYzZWViMWNlNzk4MDQ2ODkwOTk0ZjU2MjVkZjJhNTYwNDJkNjI3NDIwOTdjYzEwZDUxMmE1NDNhIjoiIjozMjoiODNmNDU1MjkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRjMTA1MjYxMGQwNWZiNzc1NDNiNmI1MTdlYjY0YjQ4N2VkOTAyZjk5NjlhNDIwZiI6IiI6IjkwZjRjOTMzMDEzNzExNTgyNzFhOGY0NmRmMWM4NmM5IjoiODNkMDA5YTEyMzhmOGFhNDBlMzZjYmRkZjA4YTVmM2Q5NjQwM2EwM2Y3ZDA3OTM1OWNkNmQzZDBjNzE5YmY3OWM5MDg2NTQ4ODI5MTlkYmM2YzI3ZGIzNDAwN2I2NzMyY2IzNDRhMGY0YmFiZDI2YjEyMDljZTZiMTM0YThkMjMxOGY5YTM4YWYwMzRiMjY1NTYyMDk3YjYzNzk0ZDdlZmVlMzA2ZTk3YzZhYzBhOTkxYjM3NjRlY2Q5MzZjODcwMDBmYTU4ZTY2ODllMzAyZjEyYzI4NTFiMWZmYzk1MGRhZDdhNTUzYzhjNjdlMDFhMjI3MGUxZTVlOWNhZjMwYSI6IiI6MzI6IjMwYjNmZDg1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZGM2MmU1NDk1N2JkZDE5NjhiZTcxYjdkMjA1ZmVkYWEyOTEzNDlkNjlmMjg1NGYiOiIiOiJiOGJjZTBmOTI2MzY4OGNhNDFjNGNlZmIyNmU3OTQ1MyI6IjIyYjZkOTJkODkwOGJiZGJjZDBmZjM1Mjk5ZWRkYWYwY2ZiMDM5YmVmYTJkMmQ4M2M4OTZmMzczYjkyMDkxZDE0NWYxNzcxYzU4ZDYwZjk0ZDM1NDhkMGNiYmVhYmViNzk2ZDc2MzJiNWRhM2M2NmVmNzVjYjQxYTM1ZTdkMWIwMzJjY2ZiZGRiYjk0MjNlMGVlMDU0YmQ1NmI2Mjg4YmRmMWI2MTY0OTJjODUzOTNlNDEzNGZmOWMwNjZiMjNmM2Y2MjZlYWM2M2E1ZmUxOTFjZTYxODEwMzc5YzY5OGRlNjI5MjJkM2JkYmUzMDY5N2EzZTNlNzgxOTA3NTZjM2QiOiIiOjMyOiI2Nzg4N2FlYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYxNzBhNmE3NjEwOTAzNTU1OTI5NjhkNjdmYjM1MTRiOGJmZGI0MWNiZjEyMTM0MSI6ImEwNTBmODU4Yzg3ZDU2ZGZjYmEzYWMxY2NmNWJhNjA2MjhiM2FiMWI4OTg0NTY4MmE5NWI3ZjI5MWM4MGY2ZWIxY2JjZWQ0ZmEyMWUzNTg0ZTIxNTI4NzQ2MjMxZTczMTFlYzMxOWEwZmNlY2MzMjllMWE3YWFlZDBhODU0OGU2MTNlNTFkYjc4Yzg2YzhkMGNlZmExNWUzMGI3NDViOTUyODA5Zjg3ZDhhNGE3YmJlZmM3NmE4ZWI4MjQ4MjdkNDMzNDIwMWJkYTc3NDNkYzQ5N2VmNWZmZmEyODEyZTY3ZjJhMDRlNWMxMGJmNDY0MTc5YzYxNzhkYjkzMmVjZDMiOiJlMDJlZjczYWVlNDE0MDQxYjEzN2RkM2NhZThmMjc2NSI6IiI6ImMwOGM5YmNjZjI5OGM4YTM1MmNkNzJlOTE3NGY1N2RjOWJmNjRkNjUxOTFhOWU5N2I0M2NlNzBhZmFjZmU3NmZlYjViMjY5NWQ3MmVhNDYzNWZhOTQxNDRkZTAyYTU0MzMzYTc3YzdkNGFkY2RlMTdjMTY2YjMwM2YxZDY2NGU2ZWRiMDgxYTg1NDMzYTc0OTZmOTFjZTY0MGYxMTM5MzVjZGQ0ZTdhZDE0Yzk1MjQ3NTA2ZGRjNjYyMDkxM2I1YzY3NDIyZjU5OWNhMDBiOTVkNjJhOTM3MWU0NGM1YWY1Mjk1YmY5Njc0M2QwZjEyMjhjOTZlOTVhZjNiNGQzNjYiOjEyODoiZDY0ZDlhYzkxNTQ4ZGMxYmFkNjE4NTA5NjMzZTBjMjUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyY2U1YTQwNjE4YjhiYjJkOWZjMWQ4N2EzMzMzYTljZDQ5NDVjZmE4MzhjOGUwYzYiOiI0YWQ0ZDEwM2RhM2ZiMmVmOGFkY2QxZTBlODIzZjRhODU3ZjFkNmZhNjI3M2JiNjY1NzQwMzNjMThiYTJmNzYwOTUxZWUwZmRiZTA2YzVjZDNhMGEzMGJkMTExNDI0NTBmMmQ3ZTcxYWYyZmE3Yjk1NTZiNjYzZmMzMDc2NjUwOGFhMjRlMWZiMjIxOWYzMGVjMjNhNmNkNDhiNTg5NDQ1NDFkMWYzZTNmYmY1OTZlMmVmMjYzYmRkZjc4OWU3YTY2NmE2ODYzODA4MWYwZWMxYTZjYjNjYjdmZWIwZmRkYmUzMjNiMzA3Njc1MzI0ZWJjZWIyNWNiYTZkOTAwMmQ0IjoiMGM0YjZjOTQwZDA5MWVmZWU5OGJmMjdmYWQ3OWIwNGUiOiIiOiJhZDYxMWRkNmViYWViNWE2MzRkNGJmYmE5Zjk2NTk0OGVhNzlkMTYyOTRiOTc2YjdjOGJiNTcyNDBjNWQxM2UxMGE5ZmU3YTViNWQzOTE0MzAwMGI0ZjI0ZmMzMzFjYzQ5ODg2ODVjOGQ2NDAxNTkzYTQyMGMxMmU2Y2JkN2NkZWQwNjUwNGQ2YTEwMzRmNzAxNTNmN2I1MDE5MDg0YTY2Y2U4MTg3NjE4NDFjYWI1MmQ1YmNiMmE1NzlhNGFjZDlkZjUwY2FmNTgyYmM2ZGEyYjk0ZDRiM2I3ODkyMjg1MDk5M2NjZWM1NjA3OTU0MTcwMTZlNTVjZmFiNjUxNDczIjoxMjg6IjMxNzU5NmVlZmRjMDExMDgxZjFkZGE2ZGFlNzQ4YTUzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjcxZDc4OWE2MzIxM2JiZTE3YWExNGYyOTU2ZTlkYTI0OTZhMWVmZDFhNjNmNmE1IjoiZjViZjIwZGM2YTExY2U1MTQyZmYzNGQ2YzQ3NzFkYmVlNGU3NDc5MGM0Y2NkM2NiNWFmNDA4YTVjN2JkNzA2YmFjNTUwZDdlZDU2ODA1ZjU1MGVmYzc2NDhhYjUwMWZiYmM2M2ExMDcwNDAyNjI2YzU3ODhmMDc2YWU0MGU2YmVmMmI5YWFiOWE0YmQ4NTUwZmUzOGY3Y2RiMGZjY2EyNjU3Y2EyNmYxZjcyOTA3NDMyNmY0NWFlOTMyMTgyOTA1ZDg0OWIxNTM0ZDNlZmZlMjBkYmZjM2ZjMjZkYzY0NTNkNjU0NGQ0ODFlNTg4OTE0MDVkYmY4NzZkMGYyNTRlOCI6IjE3MzI3OTk2ZjE4YzcwOTZmYzViOGUzNzVlZDg2ZjQ3IjoiIjoiZmVkOTYxYTQ5NzUwMmIyZTQ5MDQzZmYyOWI5NDI2YTFlODY0YTdmZTBhODgyODFhMTU3MmZiZTYyMjAzZjA3MTcxMGVhMWQ3Nzg3MzkwNjM2OWIxOTU5MTlhN2JkNWI0NGNiYWJhYjZlZWUyM2MzNjkyY2I4YjllNGRiN2VlNTk1YjhkNGIwNjNkMjA5YjExZDY0MTUwYzQ1NTQ1YjdlZGE5ODQxNDRlMWQzMzZhM2JkM2YxODc4MzRiYmM2OTUwYjNlN2NkODQ4OTVhM2E1ZTI3ZjgzOTRhOWFhOWI2NTdmYmE3NzE4MWM5MDQwYjc0MWMxMmZjNDBlODQ5YmE0YiI6MTI4OiI5ZGJhOGZhZjlkMTI5MDU5NzBiYTBlMjliYzdlOWRjNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgzMTgyYmE3NTNhYzE2NTU0ZTg3MzI4MTU5OTExM2I3NjIwYmRiMDQyNzA0YmNlOCI6IjY5MTVkNDYxODlmY2IwZjlhYjliODM4ZGEyMTI0Y2UwNjM5OGQ2MzhmZWM5YzFjNTNmMDdhNDNmYTBlYTA5ZmViMmJmODY4ZmQxZGQ1MjFmMzAxZjlmMzhlMmU3NjcxNjAzOGYzNGNjMGQxOGFiOWJmMjdhYzI4MmRjMzQ5MDAyNDI3Y2E3NzRlMjExMDI3YmFhY2I5ZjZiZmFkNmZkNzg4NWE2NjVlNTA4ZjY1NGJiMDE4ZjAzMjMyMTUxNTNjZDNhNWIzZTdiODM0ODJjMDhjZjA3ZWU1ZWY5MWQ2NGE2NzFiM2VmMjI4MDFmZjIxY2ZhZTk1ZDY4NDNjY2RjMTYiOiI4MDVjNmI3MzZkNjJmNjlhNGMyY2Q0YWEzNzQ1YTYxNSI6IiI6Ijc2ZGNlZmNhNjMwNWRlZDY5N2JlNDQ4ODUxM2NjM2ZkM2Q5ZjA4ZjA2YTdjMWE5MTMzYjliM2ZiMGY0NGJhZGY1Yzc1NDQ4ODFiNWJhYmNiODczY2FiOTEyY2M4YTAwMzM3ZmMzNjEwMGU2YTVhZDk5OGVhYzVkODU2ODc5NWI0MTE2NjM3N2M1MTE0NzU3MDQ0YjliNzMyMDZkMTlmYzM0YjYzNzhhMDZkNTViNWQ1ZTk0OThjNzY5M2U4MThkZDk2MmFmOWI5ZGEyMzQ1ZjRlYmYxNTJmMzNmZTg1ZjMzOThhNjVhZDdkZWM4MjNhMWIxMTU1YzM4Y2Y2N2RmODQiOjEyMDoiNzQ2Yzk5NzJhYTg0ODEyNTNkMGQ1NGRiNzczOThhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjE3NmU3YTY4ZGE0Yzc0YWViOTE3NjA0NDhjMDI1N2IxZTE3MTAxMjk5ZTE0MDVjIjoiNjkxYzQzNjgxMWY4MmU3NDc0Njg1NzFmODBmYTg1MDJlZjVmMjU5MzZmY2E1OGE4ZmI2YjYxOWE3YTk1ZjQ5MzhkYTU1OGEzYjI2YTJmMDljOGZjMWY1YmQzNDdjNzcyNGQ5ZmEzNzdkMGE1MjA5NGJmYWFjODhmM2ZhOWIzZGFjYzJmNTZkODgwZTgyNTgwOTUzM2RhNTk4MGE2M2UwMWQ2MTk5ZmJlYTA3ZjNkMDcwZTI5YzVkNTBlMTAxMzIyNGYwZWE4NmU3YzAwOGUzYTJlNjNkZjM5NGVmNmFkOTNlYTk3ZDczZmQ0NDI5ZmVlZTQ5NWIxNDRlZjNhMGQ2YyI6IjQyZTJlNzBiMDA5NmViZDQ4OWJmY2Y0ZDZhYzBmMmE0IjoiIjoiODFmOWMzNGM1YjA2NjhmZDU4ZWM4ODIyYzZiYTc1YmQ3ZWIwZDE3NDEyNjBmYWQ2YWQ1ZTYzNzkwM2FhMjlkNWY1ZmFjYWNjYjRiODg1ZjYyZTEwYjczNzFmOWI2YjQzZTNhZWI2OWJjNTA5M2JjY2NkNDlmM2VlNzQ0ZTQ5Zjg3Y2QyYTJjMzZjODA4YzQ3ZTQ2ODcxOTRjYmZkNGZhZWM0ZGE2NmI5OWUzZDRjZWQ5Y2I4YWM2ZmZiOTRkN2ZlZjNhZTJiOTJiOWY2MTNmMmJkYTNjYTZjOGVmYTljNmRmOGJlYzk5OGU0NTVmNmViNDg1MTllOGY4Y2U0ZTUyNiI6MTIwOiIyNmQwOTIxZGJiNzk4N2VmNGViNDI4YzA0YTU4M2QiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4YmFiNWJmMWNkOGYyNTkxMjljZTM1OGNjNTZhY2UyYmJiYmFlZmE3OTcyN2Y2NmUiOiI1NzM4NTk1NWI5OTA5YTA4NTZiZjU0YWQyNWQwMDc3OWNkN2QzZGVhNzhlMWFlODk2NWM0YjdhNTY4OTM0ZDE1YmExYTdiMmFiODk5ZjY5ZmIxYjg2NGJkNGQ1MjkzMTliNTFiZjg1YTliNjNkZTljZDUxOTk3ZWU0YjJmMDE1MzA3Y2M0MmJlOTI1N2UxYjBhODRlMWM5ZTU1YTM3MDQ3NmJmZjBhNTMyNWIyMTg1MGY1YjY4NmEzYmQ0ZjE1OTlmMzZkMDc3MmM0MDYwNDdiOGVmMjkyNDVjNDJhZGU4NjJjYjlkMjViMWUxMDhkYjRmMzNhNDJkY2NmNDVjOTg1IjoiY2E1YmVlYTdkYWMyZDlkMjRkNTQ4NDYzOTc3ZDU5NTYiOiIiOiI2N2RlZmYxYWNjYzRmMjc5ZWMyZWI0YzJhNTE1YzE3ODg2MzcxYmM0ODQ3YmRhZmY0YWE3MGUxNzA3NzViNjQ4NTVhNmZiMGQzNDdiYWYzOWJiNTNkNzIzOWI3YTYzY2U0NTFlZmZjNjllOGQ4YzNlNTQ0Yjc3Yzc1MTcwYTY4Y2JjNDVkYzk2YWQyMzhhYWJlYjVlYmVjMTU5ZjM4MDg5YjA4ZGZiYmU5NGUxZDM5MzRhOTViZDcwZjBiNzk5ZmQ4NGE4ZjU2M2Q2MjlhNWJmYmI0ZWIzZDQ4ODZiMDRlN2RiYTUxMzdkOTI1NTI2OGRhYzM2Y2JiNWI1YzhkMzVhIjoxMjA6ImYyMTJlYWFkMGUyNjE2YTAyYzFlYzQ3NWMwMzllMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImJkMGUwZDBjNzkwN2JkYjRiNGU2MDUxMGY3M2Q4YWIyYTMwNzAwMzQ5MjA2Y2UyMiI6ImU2ODM1YTY1MDA0NzAzM2E0OTQwZjcyMDI5ODU3ZmFlNmZmZjI3NzNmMmFhMGU0ZjdjYjBhNGFiZTg2YjZlOGNiMGMzZTQ2ODYzNzA1N2Y3ZWIyMGQxZDMwNzIzZTNjMzEwN2QwZjU3OWUzMWE0YzNlNmZhODEzM2UxYjFiNTFmZDIxYThhYTgwZWM2NTdjNGY2NzRjMDMyYmM0YTJkM2UxMzg5Y2I4Nzc4ODMzMTdjNDQ1MWFiOTA2OTIzMzdiZDhhYTZlOTMxMjM4OGEwYWNkZGI1MDhmYTQ3N2NjMzBlYjMzYTg4NmU4ZmJjZWQ5NzQ5MmM5ZDM3MzNjZjNmYzIiOiIxZjE4M2VlYTY3NmM3ZWQyZWFkOWEzMTkyOGY0ZGY1YyI6IiI6IjlmMWEzMDE3ZDE2MDI0ZGJmZWE0YmE5ZGY1MTU0YTZhMmM3OTRmMDBkYTA3MDA0M2MxN2YwMjA0ZjA2ZjYzN2M4ZmZmYzc2MDQyNDE4N2RjZTRmZWYwNDRmYWNjYWRlZmExYjFiZDgxODUyMjkxNWUzODlkMzA3Y2FhNDgxYWYwZjFmNzY3YzM4MjE2ZmEwNDhmNjIxZDQ2ODgwYWZjYTVjOGZjNTgyODUzZGVjOTVkMTlkMTljYzk0M2U5YTE4NjE1OTdjOTkwNDFjNTllOGJmOGU3MjQ1ZjllMzBiMWY2NjA3ODQzYTk3OGQwYWU3YTRlMGY3MTZkYWJjOWQ5ZjYiOjExMjoiNGNlZWEyMGJmOTYxNmViNzNjYWMxNWZlN2UyZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ1OWM0NzZkY2VmNjBhNDViZTI1M2Q1Y2ZiYjI0NzQyZGU5ZTM4NzliZGZlNjk0OSI6IjE0NDY5NmQ4NTEyNmM2ODJmODQ0NmZjYzI3MjRmYWJlNGI4ODQwZDQ2ZjNkZTZhZTJjZWFjYjJmMDZhMWE4MGZlZDQzMGUzYTAyNDJmNGY3YzMwODYxMWM4MDJjOGI4ZTljOTkyYjc4YTVjZjQwMWZlN2E0NjcxYmYwODFmOTc1MjA5MTlmMDJiNjZlOGJmZmQ0ZmUzZjRhNjljZjNkMTY2NjdlNzcyNDg5MGNjNGI2NmM2YWU0ODdkMmQ5ODdiZmFjZWM0MjRmZGM5ODY1YWY0NDc0YjA0Y2NlMDNmZmZjODI4YjJkZjY2ZDk5MDg3ZTYzZjM1ZWNhNTJhYmU4NjQiOiI5YmNhODA4ZjAyMjk1NDc3ZjJhYTdmNmFjMWE3YmZlNSI6IiI6IjlkMjM5ODllZGQ4ZGQ5OTExYTNmNWE4MGRlMDUxZWM3ODEyYzZjZTAxOGU2ODM3NTEzODBmZjk5MGEwNzlmMzUwMmVjMGZhYmZjZGFjZjZjMWZiMjUwMzA5NDEyNGMzOWVjNTMxYjVkMjllZThlNGU0NmMzMjRmYzEwZGJlMGYzMWU5YWE1NjUyMmJjYzcwODVjY2Y3Njg0MjUyMjdjYmFiNmRiNDEyNzY3MWE0Y2FiN2JjNjVkYzFkM2Q5ZDgxNDY5NDkzMzI5ZTI5YTlhMWNiN2U1ZTA4OGU4NGViMjQzNDkzY2RmMWE0OWIxNmZjOGQ0ZWEyZjE0MmFhOWFkMjMiOjExMjoiZDhiMjBkNzJkOTVhNDRkZmI4OTliYzZhZWEyNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJmMTU5NGU4NDAzNzU0MDVhNjgyZGJjMTgzNjM0NGJlOGM2YjNmMzE5OWVlN2ZkNiI6IjliYzZiNzE1YzY1MzQ3YTM4M2Y3NzAwMGIzZWZiMzNiMTYwMTlkMDE2MDUxNTllMDljMTE2ZGVkNTJkMjA3MjFiY2RkZTM3OTZiNmY0ZGMzM2NiMjljZTFjNDg0MzhlOTVkNGRiNjEwMjQ2NTQ0MGNlY2FhNTBjYTMzZWJjZTQ3MGQ4OTg2NjYzNjUyZTA2OTA3OWY5ZDkyZmYxNjdiM2Y3YWU1NjgyMThmYzYyZmY1YTdiZTUwYjNiOTg3ZGFiNGZjNzk3OWU1OTY3YmIwNTc0ZGU0YmM1MWU3NzRiYTA1Zjk3ODBhNDlhYzdiM2VhNDZmZGYzNTgwNGU3NDA4MTIiOiI3ZjFmNGE4MDIxMGJjYzI0Mzg3N2ZjY2QzZTdjZDQyZSI6IiI6Ijc3M2Q2OTAxZWE2NGQ2ODQwZGVkOWEwNWE3MzUxYzBjNzQ3MzdhZDI3ZTdjM2RiZDM4ZGVkY2RlZGU5NDcyMmFlNjdlODg4NTFlZTQ3MWFlZmMxZjgwYjI5YTczMTJmYTJhNmYxNzhlZjJjOWRkZTcyOTcxNzk3N2U4NTc4M2UyZTQ5YTFmYTJlODQ3ZDgzMGZhYzE4MWU5NWZlMzAwNzdiMzM4YjlhYzVkMmNmYTIyZmY5MzQ4YTA3NzEwNTQzMjJiYzcxNzM0M2I5YTY4NmRhZmRhMDJkNjM1NGNmOWI1M2M5MzJkYTE3MTJiOWJiMzUyYjIzODBkZTMyMDg1MzAiOjExMjoiZmMzZTBjYTdkZThmYjc5ZWI2ODUxYjdiY2ExNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg4YTZkNDQxYzFiNzQ3MmFlY2Y5MmMyOTRmNTZmM2MxZGExNzAyZDE3NGVmZjQzMSI6ImVlY2MxMmZiZDAwYzYzNmE3ZmY4OTdjMjQ0NTkzMjM5ZDJkYmNhOWQxZjM3MDY2MGM5YmY5NzU5Y2M0MWRjNmU5NTA3NTUxNmY4ZDdmYzA2ZmE5MWZmNjg3MDE3Nzc3MjUxNzFjMmRjMDc2N2ExOTUzZmFjMTMwMDhkNzcwNjVjY2U4ZWUzMjkyODNkM2Y2NGFkYjhhMjk4YWExMDBjNDJlNzVkNjJlNDdmYmY1MTM0YTIxYjgyNmZjYzg5ZWJiMTg3MDdjMGY0ZDU0ZjZlOTMyMjA0ODQ3MDZhMjNhNzM3MzQxYzYwMWI1NmY2YTI4Y2M4NjU5ZGE1NmI2YjUxYjEiOiIwNThhMzdlYWVlMDUyZGFmN2QxY2QwZTYxOGY2OWE2YyI6IiI6IjBmNWU4ODlkZWZmMzcwODEwZWQyOTExZjM0OTQ4MWRmYjM0ZThhOTYyM2FiZDY1N2E5YTJkYzE0ZGY0M2RjODkxNzQ1MWRkZWVlNWY5NjdhZjgzMjI5NmIxNDhkNmE1ZDI2N2JlNDQ0M2U1NGNlZjJlMjFjMDZkYTc0ZjlhNjE0Y2YyOWVhZDNjYTRmMjY3MDY4NzE2YTlmZDIwOGFlZmE2YTlmNGE4YTQwZGVlZThjOWZhN2RhNzZhNzBmY2I0ZTZkYjhhYmM1NjZjY2RmOTc2ODhhYWFkMWE4ODlhYzUwNTc5MmI1ZWRlOTVjNTc0MjJkZmVjNzg1YzVlNDcxYjAiOjEwNDoiNWZhNzUxNDg4ODZlMjU1YTQ4MzM4NTBkN2YiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYmI0YzRmOGQzYzQ0ZjA3ZDVhNTdhY2JhNmNjZjc4NTIwMzBkYWE4NGQwOWUxM2EiOiIyNGQ4MjkwM2U1MDc0YmViOWE3NjlmMjRhOTliMThjN2I1M2MxNjBhM2MzYWU0MDY1MzM1YmVjMWM0MTcwYWE0YzY1NmJkN2M4N2E4YTEzYzBmZmM2NjUzYzA0NTQ0NWJmOGExMzVkMjVhMTNiMmQ0NGEzMmMyMTlhZGM2ZWEyNjk1ZmI5ZThjNjVmM2M0NTRkYzBlMjc3MmY0YTRjZTUxZmY2MmFkMzQwNjRiMzFiMGY2NjRmNjM1ZGUwYzQ2NTMwYzk2NmI1NGU4YTA4MTA0MjMwOWFmYjhjZjFmMzM3NjI1ZmEyN2MwY2M5ZTYyOGM0YWU0MDJjYmY1N2I4MTNhIjoiYzk0ODlhNTExNTJlZWMyZjhmMTY5OWY3MzNkYzk4ZjUiOiIiOiIzZTU1MjhhYjE2YWVkNWJlOGQwMTZmZTA3ZjJmZjdhYzRkMzkzNDM5YzRmZTBkNTU0MzdhNjg5NjdkNjg1ODE1ZTM1OWZkYjhmNzdkNjgyNDE5NDBjZTdiMTk0N2M1YTk4ZjUxNTIxNjI1NGFjMjk5NzdjYzJhNTkxZmM4ZTU4MDI0MTQ0MmQwOGZhY2JkYmVlOWE5ZmY3Y2ZiZGU3MDA0MzQ2NzcyYjQ2MDdkYWZiOTFjOGY2NmY3MTJhYmVlNTU3ZDNkYTY3NWJiMzEzMGU5NzhhMWU2OTJmYTc1MjM2Njc2YjkyMDUzNDFlYWQ1Mjc3Y2MzMDZmMDVlNGVhZWEwIjoxMDQ6ImZlY2NhOTUxYmE0NWY1YTc4MjliZTg0MjFlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2JjZTVlNmQwZmRjZDNhYjA4Y2NkODYxMTUxNDliNTU2OTU4NGRmYWRmNDAyNTZkIjoiMzk3NDMzOWExYjkwYjE5ZmQzODU3ZDgxMmEwZTU5ZGNmNDNmOWIwZjM2MDgzOTk0MGI5OTgzNGRkZWRlYWQ3OTc4NTM5NmFiOGZkMGZjMGU1MjNjMDZmMDU1NTM3MWZkNWJjODU3YTk1YzNlYWQyNjUzNmU2ZGViMWZhYWJkYzc3NmFjN2NmZWM0YjYwZDljMjRiMDg1NmVjZjM4MWVmZDk4Zjk0MWQ1YjJhMzgxMDg5MjJkOWNmMTExM2QxZTQ4NDM1NGI1NWY5YzBmMDlkOTVhNzdmZDMwZWM5Y2MwNGQxOTE5OTkzMWUxODdjNTZmZDIzMWY5NmZjZTVlMWViNCI6ImFlM2EyNWJlNzM4NzZiNmU5ZGM4ODU3M2Q2MTc2NTNhIjoiIjoiNGY1N2JlMGRlMDBjYTJjN2M1MmM1NGI5MzFjMjM1ZmVjYjRlZTFlNWEzMGUyOWJmNjhmNTcyNDhiYWZhZDg3ZTQ4NGNjNjg0NjVkOWY2NGJiZjUwMmNlZmQyYzg0ZTU1OTZjM2M4ZTU4YTlmYjUxYThjOGIxMzI1NzlhOTRiYzMyZTkyZjdjNzI0N2RjNWY2OWZkYTk4NzI3YzQyM2RlNTQzMGYwMWIzN2Q3N2UzYWU2YmNkMDZlYWY1NjI1ZTVjN2M5YzIyOGI5ZGNhNWFhZDhmNTcxMzY5ZmUwOTY0NzMxYmYxZjE0M2YyZjcwOWM3ZWQ1MTY0MWVjZmM4OGViYyI6MTA0OiIzMzM3NWUyMWZkOGRmOWYwMTk2MTk4YjRiMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTY3NzllYWE4Njk5NDY5ZTJhM2JmYWU4YTAzZmQ0YmZmN2FiYzYyZDQyN2ZmOTg1IjoiYTM0M2ZkMzJmYzUxM2UwZTk3NzJhY2JmOTlmZWFmZTlkZTRiNTRlNDA0ODA3OTk5YjAyZTkyMWUwOTE0YjJkNjRkMGQ0MDJlZjA2ZjMxZTFkYjg1Mjg5OWZiNmRiMjMxYWQ0NDY1YWYwMTViMGMxNjQwN2ZhMzY2NmVmNWMyYTZkNTJkNWI0ZjYwYjBmN2ZiY2IxMzU3NGIyYWE1MTgzMzkzZjNhOTFiNDU1YTg1YjNlZDk5ZDYxOWJjOWM1YzJkYmNjNGYwYTYxYTdiMDNlNWFiOThhOTljZWUwODZiZTQwOGNlMzk0MjAzZjAyZDZkMjNhMWU3NWRmNDRhNGEyMCI6ImNkN2RjYTI5Njk4NzI1ODFkNTFiMjRhZjQwZjIyYzZmIjoiIjoiNzQ0MjJhYmJkZTZlNGFiNjc0MDI1NzM1ODc0ZDk1ZDlmZTMwMTU2MjBhOGY3NDhkYmVkNjNlZjBlMjI3MTA2M2I2YzBkNjVlMDBkNDFiY2Y0ZWE4NmFjOGI5MjJiNGQ0NzVmOTA0YzA3MjRmMGFkZWJjMmVlZjRhM2FiZDBmOWVmZDc1NDA4Y2MwNTRjYmQ0MDA0MzZlMDU0NWUwOWU2YjBiYzgzYTljN2QxYzE3MTc1ODlkMTgwYzdiMWQ0ZmU0Y2ExOGJkZTRkOWI2YmM5ODQ4MWI3OTcxYzdlYjgxYzM5MWFjNGRkNzljZGVmZWFiYjViYmMyMTBkOTE0ZDMwYyI6OTY6ImIwZTQyNTQzNWZkMmM4YTkxMTgwOGJhNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzliZmI0Y2Y1MzNkNzFjMDI5MzJlMWNkN2I4MDBkY2E5Y2U5YmNhODQzODg2OTYyIjoiZGU3NmY2M2VjZjljOGQ0NjQzNTk5ZjRkYzNmOWVkODM3OTI0OTE1Y2U0MjE2NzU5MDEzY2RiNDZkYWEwYTUwOGUwNmJjZGI3NzQzN2IwYTU4YzQwYTBiZDMwYTA1Y2E0MTQzMzIxOGM2ODY5ZjFlY2QyNjMxOGFmZjI3OTk5YTJlYmJiNjUxZGU4ZTAzMDYxYjhmZmUzZTE0MDYwNzIwZWIzNWE4ZTRkZmQ4Yzg3MGFhNDU2MjI5MWUzNzU4Y2MxZWE2YzRiMGZhZmNmMjEwZTEwYjMxZjg1MjFiYjBmNmIyOWU4NDUwYjBjZDZmOGM4MTk2Y2EyZjdhY2I4MDdhMyI6ImQyYjkzN2JiNWQyZWE3ZDU0ZDJiOTY4MjY0MzNmMjk3IjoiIjoiMGIwYjRjOTJmMDZiMTcxMDNlZDU4MWZiMzJkNDZlODc0ZmVhMmEyMTcxZDMyYWFjMzMxZGFhNGQ2Yzg2M2Y4NDRmYmJhZDcyZTQ1NWNkNWEzZWY5NDFkOGNmNjY3ZmVkNTg1NWRhNmRmMGNjZDBjNjFkOTliMmU0MGEwZDY5NzM2ODEzOGJlNTEwYTJiZjJlMDhhNzY0ODg1MGQyNDEwZTRhMTc5YTZkMDE5M2U0OWExMzU1MjQwOTJhYjFmODQyZWQ0MDU3NjExZGFhZWI5M2U3YWE0NmU1NjE4YjM1NGExMDkxYTllNzdmYjkyYThjM2MwZThlMDE3ZjcyZGViMyI6OTY6ImExODgxMDdlNTA2YzkxNDg0ZTYzMjIyOSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDFiN2Q4MGFlNDg3YWMzNWFhNDk4ZTU5MzlhMGYyN2JhZWVkZjQ4YTQ5NGM4ZTkxIjoiYzI2ZDRiOTE4YTBjOTY3MTQxZmI1NzEyYTI4Njk4ZDE2NjQwZDIwMGIyOTM0MTg3YjgxZWM1ODQ4NmI3MDZlYTFjYWFlYjY1NGU1ZmJiYzBkMDc4MjE1YWNlZWQ3ZDY2OTM5ZTBmYjU0ZDYxMzFkODk0OGNmNThlYzk1NzE2NDZjYTc1YTA1MWMyYjVjOThmZTE2Zjc3MzNkNDJlNTg5N2IwMjYzMjcyMDE1MDQyZjMxMzQxNDNlYTNiMDhiYzY1MjkyZDhkMzFmMzBmMmVkOTgzMGNjYmZjYTJkMzNkMjkwYzI4ZjRkYWQwN2M3MTM3YTRjYTA1ZjQzMmE0NTdjMiI6IjYyNmUxZDkzNmIzOGNmOWM0YzNhNDRlZTY2OTkzNmVkIjoiIjoiODk5OGU3OTk5ODU4OTBkMGY3ZThiMGZjMTJhOGE5YzYzMTcxZTQ1NmVmNWNiMjExZjgzNmEyZGM3YzllM2Y0ZDFjZDYyODBmOWIwYzQ2OWI3MDNjNTU4NzZiNTdjZDFkOGNlZjcwZGM3NDVlM2FmODQzOGQ4NzhjYjJmZTlmYjFjNWIyZDlhMmQ5MGVkZjNiYzU3MDJlZjM2MzBkMzE2NTc0YzA3YjU2MjlmMGRiMTUxMDQ2MGFmOGU1MzdkY2YyOGQ5YzViNWNlYzY5OTZlYWEzZGNkZTMzNTRlMzlmNjBkNWQ4OTZkOGJiOTI3MThhNzU4YWRiNWNiOWNjMTdkNSI6OTY6IjY5OTAxY2JhZmU2MzdkZTU5NjNlNzMzMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmVjY2U4ZmI1MGEyOGEwODVhZjc0NGI0NGJjMGVhNTlkNmJjMmM4ZmYxZjJmZjhlIjoiNTQzMDBiZmQ1NWIyMjdiNDc1OGNmNjRkOGEzZjU2Y2I0OWI0MzZhZGI0YjkyN2FmYThjNGI3MGQyNTg0YTZjYmE0MjVhZjRmYmMzODQwZGQ2ZjJlMzEzZjc5M2NiYzdhY2E4MjE5ZjE3MWM4MDljZjFlYjliNGFlOGE5ZDBjZjFhN2FhMjAzZDM4ZDY3Y2Y3NzE5Y2UyMjQ4ZDc1MWU4NjA1NTQ4MTE4ZTViYjljZTM2NDM0OTk0NGEyMjA1ZTFiNzcxMzcyNzBiODM1NTVkNWQ4MDRlZGJhMmY3NDQwMGYyNmQyZDBkMjhlYjI5ZDdiZWI5MWU4MGFkNjZiNjBiZSI6ImI3ZTQzZDg1OTY5N2VmZTY2ODFlOGQwYzY2MDk2ZDUwIjoiIjoiNDVkYWMwNzhjMDVlNmEyYzQ4MDU0M2Q0MDZjMjNmM2RkYTYzZjJiNjE2MDA3ZDA4ZmJmYjA3NWE5MGVlZmFiOGRmYmMyNmQzMzQyNjZmNWQ3MmZiYzUyODAwY2Y0NTdmMmJiYzgwNjJhODk1Zjc1ZTg2ZGY3YjhkODcxMTIzODZjOWJhZDg1NTczNDMxY2NmY2VmNmE1ZTk2ZDcxN2ZjMzdiMDg2NzNiZjRhNWVlY2VkZjFhODIxNWE4NTM4ZTFkZGIxMWQzMWEyNGNiMTQ5N2M3YjViYTM4MDU3NmFjYjlkNjQxZDcxNDEyYTY3NWYyOWQ3YWJkNzUwZDg0ZGZkMSI6NjQ6IjJkZmUxNjJjNTc3ZGM0MTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY3NzNlNjI3ZjZjNDlhMTY4N2EzYTc1ZDJlZTY3NTRlYmZjMjYyOGJkZmNlYmEyOCI6ImViMGE2NGFkNTEwOTY4YzY4YTgxNjU1MGQ5ZmUyZWNjYWIzYmQ4NDA5YWI1YTY4NWE4NjM4ZjgxYjRiNTBhOWE5NjMxOGJmZjRlODZmN2Y2ZTkwNzY5NjBiZThlZWY2MGU3MmNlZTRlYTgxZjNiYTI2OWQ4YWI0Yzk1ODFhNTQ2Mzg0MjE1MjBhNjQxMWE4M2U5ZGM4M2I2OTgxYTlkY2RkOWU0YTM2N2Q1N2YxNTZkMTMxY2YzODVjMDFhNzM2YjMyNzIxOGU2YjY0NjhkMzE3ZmY3OGEwMWYxNTg4YzM1OWEzYTliMTg4YmJlNWQzZmZhZDZiNTc0ODNhOTc2ZDAiOiJhZDg1YmVjYjAzYTA1Y2FhNDUzM2I4ODk0MGNhMTQxYSI6IiI6Ijk1OTY1OGZkZmY1ZmQ4MDJmY2E1YzVhNzlkNTk1MzZiYThlZjEzNTlhYzdiZmZmODEyNjRjNzgyN2JkMzFiOGYwMmVjYjU0ZjMwOWI0NDJhNTRhNWE1N2M1ODhhY2U0YjQ5NDYzZjAzMGIzMjU4ODBlN2UzMzRiNDNhYjZhMmZjZTQ2OTkwNzA1NWU1NDhjYWZmYTJmZTQ2NzllZGJlMjkxMzc3YzE2YzcwOTZhNDhhZWY1NjU5YWQzNzcwMmFlZDc3NDE4OGNiNDQyNmMzYjcyNzg3ODc1NWQ2ODNlZDhjMTYzYTk4YTA1ZjA2OWEwYTNjMjIwODU2MDA3NTkxNzAiOjY0OiI0YzBmNDYyMWIwNGI1NjY3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYzA4NmY3NDA0YzE0MTYwZjMzZDZlZmRlMjMxZWRhNjEwZjkyZmE1NWFjMTQ3YjQiOiJmYzhlNWNkODE3NTVlNDg5ZGU3ZTNkZGQyYjU4NzE0OWVlMDEzYmZmYTJjZTE5OGM1MTQ2NDFiMGUxNjU5MjYxZWRkNjBiZGJmZDg3M2UzMGUzOTk4Njk3NDhiZmU1NmJhNTQzY2ViOWJmNWZkMGU3YmEyYjRkYzE3NWM1MmYyOGE4YTAyYjQ4MTZmMjA1NjY0OGU5MGZhZjY1NDM2OGM2NGY1NGZkNTBiNDFlYTdjYTE5OWQ3NjY3Mjg5ODBlMmViZDExMjQ2YzI4Y2ZjOWEwYTFlMTFjZjBkZjc3NjU4MTlhZjIzYzcwZjkyMGMzZWZiNWUyNjYzOTQ5YWFhMzAxIjoiNzFmMTU0ZjFkYzE5YmFlMzRiNThmM2QxNjBiYjQzMmEiOiIiOiI2ZDYwZGEyZmQwNjBkMmFlYzM1ZmFmOTg5ZDhkZjMzZjI0MTNiYTE0ODQyYjA0MDZlMzhhNmE4NDdlMTkxZWFjOWY0NTcwY2VhNjQ3YzM5ODhmYWFhNTUwNWVhMjBmOTkxMzJkZjJhODc5OWNmMDU0M2UyMDQ5NjJkYTFmZDRmNjA1MjNkNzE0OWUwZGVlNzdjMTY1OTBkN2UxMTRhYzVkOGY4OGZhMzcxZGNkZDI1NGVjY2FhODMxNmVlOTIyYmEyM2EwYTA3YjI4OTczOTQxM2RkZmZjMmM3MDljMzkxYWZlZTkyODkyNTJkZGYzZGRiNjJhNDUzMmE1NTE1ZTM1Ijo2NDoiZjQ3YmFlNjQ4OGYwMzhmZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmFlMWIzZWVmOTFiYTc5MDMyMTE3YzYwZmI4NDdkNDZmMTgxNzU1NjVkMGVkMTBjIjoiOWI3MWVlY2NkYzkxY2I1ZjdhNTY3YTkxODk3NzRmNGMzMGQ5NjQ3N2I4OGFjNTUzZGY2NmI3OGE1NmU1YzllMDk4NmExN2Q4MGM4MTExMTZkMzE5ODVhY2ZiZjlkN2E5YmVkMjkxYWEyZmI2MzI5NDU3YTgzNmIzZjhmMTFjMTY0MTZmMGEzYjg2ZGQ5YzcxN2M4YTA1MGM2Y2ViNWMyN2Q4ZTJlZTBkYmU2M2YzZTFlNGYwYWZmNDgwOWUxZjZmNmVkNjRkMzFkNDk0YjczOTljZmEwZGQ5NDQ2MzIxYmQ0MjU2YTQ5ZDA3OTNhMTBhNjcwZTNmMDg2NDA4NDI4ZSI6ImNlYzhiNjZhNjU3ZTRiZGY2OTNmNDhhYzUyZTYwNzcwIjoiIjoiMDE1YTMxOGFjYjYxOTgxODljZTkwOGFiMWFmMjg1NzhhMzdhNDhiZWVlZDc3MmM2ZWQ0ZGNlYjBhM2JjYjA5MmRmODVmNjUzMjM0YzU2YTI1YzA3NWM4ZTAyOGQ0YThkOTBkOTc0ZmIwNDc3ODM0YWUyZGU4ZDVkZjUzZDBkMDNhOTc5NDUwYjZlN2E2NmZkYzliMTFmODc5ZWE5MDcyNjk5ODM3ZjJkZTcxOTIxNTZmOGU1ZDk0MTFmZDgzZDk3ZDMxZmU2M2VjZTRlNDMyNmZmNTBhMjRmYzc1MDA0YTViYTJiZDQ4NDViMjllMDc5NDY5Njk0M2RmZjFlNWQ2ZSI6MzI6IjljZjZmOTBhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YzE1ODIyNDBhZDMwMWY4MzE5MDJjNjYzMzQ1NDZkZDY4MWMxMjMwOGFkZDA4NzAiOiJkNGI3MTZiNDk4NThhMjNhYWQ0Nzg1ODFjYmI2ZGZkMDE1YWU1NTBkNzY0OTcyMjliNWIxNzc2ZTgzZjJkZWQ4NTQyNjc1YzYzY2E2YTAwN2EyMDRiNDk3ZWQyZWY3MWNhMTI1ZDkxZjM4NmJlOWI0MjEzY2QzNTJhNzk3YTVkNzhhMTM3M2YwMDkxNmJiOTkzZGUxNGUxYTBhZjY3NTI0YWNmY2M5ZmQ3MWRhYTMyZTVkZWY5YTNmMmRhYjViM2JiYTRkMmY5ZjJjZmM1ZjUyNzY4YjQxMTU3ZmU3OWQ5NTIyOWQwNjExOTQ0ZTgzMDhlYzc2NDI1YTk2NmIyMWVjIjoiYjZmNGYzOTU5OTE0ZGY0MTNiODQ5ZDU1OWRkNDMwNTUiOiIiOiI3OTk2NGY4Nzc1Yzc4MDA5YmNhMWIyMThjMDMwNTZiNjU5ZTUzODJlMjVlNDM3NTljOGFkZmE3OGFlYzQ4ZDcwYjMyZmZkNTZiMjMwZmMxY2U4YzIxNjM2YTgwYThjMTUwZTVkYmIyYmQzZjUxNjA3ZDk3ZWQwOTc2MTc5NjNkYzZlNzY1MzEyNmZlNDBjYjM2YTdmNzEwNTFkNzdlNGYzYjc2OGE4NWVlNzA3YzQ1ZDMzY2M2NzQ3M2Y5NGMzMWRhM2U4YjRjMjE4NTkwMDIzMzFiNWY3MzUwZTNlOGY5ODA2MjA5MjU1Y2VhYzcwODkxNzZlOWQ2YjcwYWJkNDg0IjozMjoiNzllNWEwMGIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZkNTVhMzU2OTQzODI0ZDIwNjMwYjE1Mzk2MjdhZDFhOWRjZDhlZTJjYjRkYmY0OSI6ImI4ZDhkNmRkMDYzMWY5MTgzY2E4NTgwMzNhMzFkZDU4M2QzZWUzYjk1MTBmY2M2OWQ4Y2Q0MTIwMTZiZjg1NGI5ZWRjZjY1YzI4MzFlNjNkNzJmNGNiNjFhOTlmNmY0ZTZkYWIwYzJjZTljNWE4Y2RiYzE3OWFlOTNhYWNhMmM4YTViODQ4YTE1MzA5YmU5YjM0ZTUyMjZhYTlhNTkwOGY1NDNmZGRhOTgzZmVjMDJlNDA3M2VkY2MzOTg1ZGE1MjIyYjUzZjhjODRiOWM1NGM3OGRkOGIyNzEyYjU5MjA5NDYzNTk1Yzc1NTJlMjhmMmE0NWY1MWNiODgyYzAzNTQiOiJhYTg5YTEyMmM2OGU5OTdkMDMyNjk4NGZhNWJlZjgwNSI6IiI6IjEwN2E5ZWQ1NjFlNmM0NWMzNzVkMzFkZWEzMjFjN2I0YTRiNzY0MTAyNGQyYzllZWY2YTEwM2E3NTBiYTE1ZTFhY2FjYmNhZTEyMTUxMGI0ZjU2ZjE5ZDI5ZTZmYjNlNmZjMDY5NTBiMWRhYTUyMTUyOGY0MjI4NDEzMGE0MGU1YTZjMWI1OGIzYjI4MDAzNjczNTExYWJjZjU5YTRiOWRmMTU0OGEwMGY3NjlkODY4MTk3OGI2MzJmNzVlNWRhMmNmMjFiNDk5YTI0ZmJkZDRmN2VmZTA1M2Q0YTFiMjBiMjQwODU2ZDNhZTI3OTQ4ZTM1MDk4YWE2MTdkZWY1YmQiOjMyOiI3ZjljODg2YSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRjZGRjOGY1MjU2NDBmYzBhMDg3NWM2NWI3ODhlYTc1YzY3M2Y4NGY0YWFjYWVkNCI6IjU1ZTNjY2I4NTVjMWZkNmQzM2UyOGQzMDg0ODVmZDg1YWJiZDhhZGUxMjk5OTM2OTk2ODUxZDQ0ZGRlMDYzZGRjMzc5NjJmOWY2N2U5NWRmMDJlYWYzZDg3NzUxNjI0MDc3MWM0NjliZTJhYmYyZWY2YzhkY2JiNzllYjE5NzZmODI1YjEwOWY3NTIwNzk5NTdhN2M5ODFmYWEyZmNlYTU5OWNjNTJlMjYyYjg0ZjRjMjAzMTgyMTYxOWYwYmU2ZmEzYzM4ZDY2MGU5ZWIzZTBkNWRlMmRhNmI4M2RlOTg2NmViM2VmYmM2YTJkZmYyN2U1MjU4N2M2Zjc5ZTFjMjYiOiIxYjg4M2E4OTQxM2Y2MmRkNmQ1MDdjZDcwYzA0ODg1NSI6ImVlYWYyMWJjMzE3NjYwYjBlMmFmYjljZDViZDQ1MGZmMGJmYTZjZmE3ZTQ5ZWRhZDYwMGY3MWI5NzEzNDdlOTNiOTcxMmE2ZTg5NTU0MGM2NjVhMWQ4MzM4ZjYxYjUxZGE5ZTBhNGE5MTIyNDA5ODI0Mjg3YmE0YmMwNmJkYmJhMTAyOTBhNDBiMzFiNWVhZTlkZmViNjQ3MWY0YTBhMGMxNWM1MmEyYzY3N2M0ZDQ3MjYzMGQ0MDc4ZWNmMzZkYzYwMDhmYWEwMjM1YTY4OGViYmUyNjYyZTQ2YTQ5YjFkZDU4Y2JlZTgyZjI4NWYzY2RlYmRhMWRjNTQ2NzMxOTUiOiIxOGQxMTUxMzY2MTI5NjAzNWY2ZjQyZDI2NGUwYjRjYzdlYzQ3ZjQzYjc1OGM2ZGFjOTVlNWUzYjM4MzQzNjJlYjY0NDQ3ZDkyM2UxMDdhNjBjZDY2YWMzNTljZjNhMjAzZjkwNzBlYWI5ZmU2MWFlNjRhODY2MDZjOWI1MGE5N2ExOWUxMmY3MzFkZTI4NzE5ZmUxNzhjOTcxM2VkYmI0NTI1YjIyMWY2NTZhMzQwYzg2NzQwNWM0MWJlZDNiYmNiOWM2ZGE1Y2M2YTRkMzdhY2Q3YTU1ZjI1MWE1MGZhMTVlYThmOWI4OTU1NjA2ZWFhNjQ1Yzc1OWVmMjQ4MWU4IjoxMjg6ImRlYzNlZGMxOWZkMzlmMjllNjdjOWU3ODIxMWM3MWNlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2I4YzMxODMwYjExMzlhNjA0MjVmNmEzNDM4N2Y1Y2EyYmU2ZjVhNTA3NGFkZjEzIjoiOTVmNGVhOTA3MjlkZTBmMGI4OTBmZGY2OTc5NDgwNTNmNjU2YmRkZjU3ZTNkNDYxZTdlZTE3NzAxNjE5MDRiYjJjYmM4YzJmODAxNDgxYmI1NDE0NWFmNzYwZTkxYzhiMzBjYjIyZmFhODdlZmNjNmYwMWUzZjc5OGFmMGJkNDYwNDc1NzU0NzI2NTE0ZDUzZjQxOWFmMmYyYzM3M2M3NmYwNWJmNTdkM2ZjMWI3NjNmNzJiYTBmZDI2ODJkOWQxZDc2ZjZjZThkNTViNTZmYzdiYTg4M2ZhZDk0ZjU5ZDUwMjI0NDgwNGJiODdiZDA2ZjEyMTdhNGE2YzUwNTViNSI6ImFiNWJmMzE3YWQxZDZiZWM5Y2FjOGJjNTIwYTM3YjFkIjoiNWE0N2Q3NDc0YmU2YzQ4ZmE0YmRiYjA5MGY0YjZkYTQ5NGYxNTNhNGM5Yzg1NjFjYWU0ZmU4ODMwMDBiODE3NjliNDZjZDY1ZjRjZTM0YWJjM2U1YzY4ODBhMjFkMTJjMTg2OTc0YjBjOTMzYTE2YmEzM2Q1MTFlNzliNWY5OTRjMzhlMzgzYjkzZWVhMTI1OWQzOGY5ZmI5NTU0ODA3OTIyMDY0NjFkZDI5ZDZkM2I4ZmYyMzllYTY3ODhjOGUwOWMxNWJlOTlmMDk0ZDJkNTk4MGM2YzFhOGVmZTBmOTdmNThmNzcyNWE5NzIxMTFkYWViODdkODYyYTkwYTdkMCI6IjFkMDIxMWQ3ZDdiYzg5MWU0ZmJhMWJhN2Q0N2FjNWE0ZjNiN2JhNDlkZjY5ZmNmZGU2NGJmODY4OWIwZWFiMzc5ZDJmNTU2N2ZjZmY2OTE4MzY2MDFiOTZjMGEzYjBlYzE0YzAzYmMwMGU5NjgyZWYwMDQzMDcxNTA3OTg4Y2YxNDUzNjAzZDJhYTNkYzlmYTQ5MGNkYjBkZDI2M2IxMjczM2FkYjRkNjhhMDk4ZTFjY2QyN2M5MmZlMWJiODJmYTRhOTRmOGExY2MwNDVhOTc1YWMzNjhlMzIyNGJhOGY1NzgwMDQ1NWNjNDA0NzkwMWJiYTZiZjY3ZDZlNDFmOTQiOjEyODoiMjM2ODEyMjhjNzIyMjk1YzQ4MDM5N2ZjMDRjODQ4YTEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5YzIzODZiOTQ4ZjU5Y2U2NTE4ODg0NTEwMjE3NzIyODdmMTRhOTJkODA3ZDg4YTgiOiI0NGYwMGM4YTdjODRlODIwN2VjMTVhN2JlMGI3OWM4OGZhMzQ3ZTJjM2Q1ZThkMDcyMzQ1MzZkODY1MTNiYzM5YmViZmZmMDJlZmI5ZmYyNzI4MGViMzdmN2U4YTYwYTQyNjUzOGJjMWUzODMwYmNhMGU3NmZhYTMzYjMwNzE5ZmFiNTE1NzhkMTVkZjc3ODkzYmNlODc0MGY1MGM0OTFiOGI5ZjE3MzlhNjk1Yzc4NDA2YjVlZTRkNTZmODBkOGQ1NjRiNTg2YjBmMjJmZmE4NmVjYTQ2YTlkODEzNGE5NTA3YzViOWFkODI3NTdlYzUxYjE4NzQxYWJjNjFmMjNiIjoiN2ExZjdkMGJlNGM3Zjg4Njk0MzJjYjhiMTM1Mjc2NzAiOiJmNzZlYTlkNmU5NzY2MTY2ODk3MDk3MDBhOTYzODIwNGU2MTZmNGMxYzNhNTRhMjdmYjBkYzg1Mjk5MGQ4MWRmZDY3ODdhYTVhODNiOWJlNTA4N2QzZjdkZmNkNTIyMDQ0OTExZmE0MTg2NTExZGUxOTU3YjgwMzM4MDI1YzZjNGFhNzIwNThhYTMxNjAwNDdjZjQyMTY2YWEwMDg5ZTJlYzFhYzhlYTZkOWY1ZjJjMDU3ZjlmODM4YTcyMzE5ZGJkN2JiNDk0OGRhM2JjODdmYzIwMzZhMGU3YjVlOGNlZTdmMDQ1NDYzMTUyZmY4MGExNzExZWYxMDk2ZTc1NDYzIjoiNjY2YzRkNmQzZjFiZWM0OWJhOTM2ZWVhOTBkODY0ZThlY2JlMGNjYzdiMjM4NzJhNGFkNzU5NmFmYWVjNjI4YTgxNjVhNzAzOTcyODlhMTBjNjdkNjI5NDJlMWMxNThmMTQ4OWE5ZGU0NDQ0M2FjNDE4MWU3NGViZjI1NjI5OTVjOTE4MmI1N2JjOTYwZjRiNWQzZTMzZmI3Y2Y3YTBjMzJhNTljNzE2ZGUyMzYzOWRlOWJjNDMwNzEyNTI0ZDc0YTA4NzY0N2UyN2ZmMWFmODdhMmFhMGNmMGI1ODk3OGFkOGVkNjE2YjU2NjIyNWQzYWVmMmVmNDYwYmU3MzkzZCI6MTI4OiI1M2Q5MjZhZjdiYmY3ZmJhOTc5OGY4OTVkMTgyYjA5ZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU4NTJiNGJiZmE2MjNlNWUyZjgzYjg4OGY1ZWI2Y2JlMDZiNTcyOTllMjlhNTE4YyI6IjhjYzg1ZTUyMGI0NWE4NWM2OWNkODAwNzI2NDJlZjE1MDBiMWUwYTQwOWM0MzVkNjg1NTQ0YTZiOTZkMzIyNGNjNDBlNWZlOGEyMWM0OTU5YjI4OTFkNGE1M2JiZmYwM2RiOTkzOWM2NTVlNmU5MjIyMmM2YjQ0Yzk1MjA0ODI3YmQ4MDBjNzQ2NjZkYjY0OTA3ODk0YmM0ZTMwNDNmYWIzMThhYTU1YTAxMWFiOTM5NzU5MmNlZDczZjA3YTA2MjgyYzIyZDlhNTdkZDdhMzdlYWRiMDJmNTliODc5YjAzMGQwYTUwMDUyMjZjNDYxMjgxY2UzMDYxYmYyNmRlNTYiOiJiOTZmNGJkYTI1ODU3YzI4ZmRmYTQyYmZlNTk4ZjExYSI6IjBiZmRjMWIxNmVlYWU4NWQ1NTBhOTdhMjAyMTEyMTZhNjZiNDk2YzhjMTkwMzBhMjYzZjg5Njk1OGU0ZDFkZWNjMzEwYjk1NTUyM2UzMTQ2NDdlZGNiZTNmNjk5NzBjZGE4ZTA3ZjhiODFmOTA3NDQzNGZkODZiOGVjNWIzZmE4YjE1NTM3N2FkMjgwNTBiNTA1MjNkM2QxODVlNTg2OWJjOTY1MWQ5N2M1NmVjNmI4MDQ3YzIwZDY3MWY2ZGM2NTdmNGNkZjczZmQ3ZDNjYWY0Yjg3MmYzZmI2Mzc2ZWRhMTFiODBkOTljZjBlODVjNDk1NzYwN2E3Njc2NDJkYTYiOiJiMTQ4MzEyMDc0ZWNmYzhmMTE4ZTM4MDBkYmQxNzIyNmQ1NWZjMmM5MWJjYmNlZWFlMmE3Y2EzYjM3NmY2ZDU2OGRkN2ZjYjVjMGQwOWNlNDI0ODY4ZjE1NDQwOTdhMGY5NjZkMzU0NDU1ZTEyOTA5NmVjODAzYTk0MzViYmJmOGYxNjQzMmQzMDk5MTM4NGI4OGQxNGJjYWQxMTkxYjgyMjczMTU3ZDY0NmY3YTk4NTA3ZGMwYzk1YzMzZDIyZTBiNzIxYzA0NmYxYzEzNTQ1ZjRlZDJkZjYzMWZkMmI4ZmM0OTQwZTEwZTNlNjZjMGE0YWYwODk5NDFhOGFkOTRhIjoxMjA6ImUzZjU0OGUyNGExODlkYmJmZDZhZTZiOWVlNDRjMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJiZDg5N2U5NjljY2VlNDA1YmE5YmVjZjI0Nzg3YTFlMWJlMTdhNTcxNDQyYzZkYSI6IjUwYjhhZGU1ZTY1NDdjMzUwYzNmNDNhMzVhM2NiNjQxNDU5YzVlZjkwMmFmYzcwNmNlMmZiOTgwYjI3NWZkYTYyZTg5NzRkMTU3N2VmNjVjZTlmZDg1NGQ4OGNhYTEwMjk1ZDEwNDVlZDc1NjNlOTM5MWQ2MDcwMGI1ZDJhNGE3YmE1ZjNkZTdhN2QxNTQxNzgwYjk1YTA4ZWIzZjA5OTZkOTZhYWM3ZWU4MzhiNjdlZTg2OTQ0NzYxNzY4NGMwODU2NjY0N2E0OTkxZTMxODI5OTA3ZWJlNGIzMmNmYTQ2YzA0MzNhNjRmODY0YjhiOTMxNmNiMGVjMjU3OGNjZWUiOiJmZWY2YTA4ZDkyYjViOWJkYWU0YzM2OGZjZDBjZjllOCI6ImZiMzE0NGVjNmQ5MzcwNGQ2MjVhYTllOTViZTk2MzUxYzZlMjViY2NmMWVhYWFmOWExZDQwNWU2NzllZmUwZjJkYTA3NTEwYWIwNzUzMzI5NWE1MmNkYzFmNWExNWVmNWJlYzllNzJiMTk5NjI1NzMwZTFiYWY1YzE0ODJmMzYyZjQ4NWQ3NDIzM2ZiZjc2NGQwYjYzNjMwNzVjZWJkNjc2OTIwYTBiMzE1ZDY4MGU4OTk3MzNkNmRhMDVkNzg3NjVkYjE1OWM0Zjk0MmEzMWQxMTVkNTNmMWQ4OWNkOTQ4YmM5OWMwM2FkYWQxZWVlOGFkY2VmNzU0M2Y5ZGVhMzkiOiJlNjVlZDViNmQwZjUxZjg4NzZmNDgzZjNkOGFiOGZlZDc4YWI2YzJlMWNmNTA2OTNjODUxMWUxY2M5ODIzZTEwMzA3NDBhYzMzZjA1YTVhYTBkODgyMDViYjMwNzFhMDg3NjU1ZjI4ZWVlN2QwYTA3OTQ1ZDI1ZTNkYzAwMjIxYTFkYWRlNDE3MGNhYjkwODRjNDdiODIzNzZkNWQ0MzliZWQ5OTE1MDgxMTg0M2IxNzY1NDNmNzk0NGIxZGQ5Njg0ZmE5YTUyMTE3YzIzMzVkZGE3NTBkOWRlMGQ5YjNlZjcxODEyM2I2NTM0Y2IwMTIwODBmNmVmOGVkYThkNGQ2IjoxMjA6IjQ2ODU0NmQ0MTk5YjlkOTIzYTYwN2E3OGZhNGI0MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjEyMTQxZDU4MzRiOGNhNDhiNTdlMDg5MmI2MDI3Yzk5NzY2OWRhYzEyZmU2MDQxMSI6ImNmNDc1YjUwNjcyZmQ4Y2M0YmE4NGQxN2FiMWI3MzNmZWUyMDczYTU4NGQ1NDI3MTU1ZjE0NGRkZDk0NWQ0OTAxZDVhOWQ3NmUzZDZhZTU1YWIzZjk1MTQ4NjFjODNiY2E3ZDUzODY4ZjM1YmRjODYwNmExNjdhYzgzNTkxYmUzMGRkYjk1NGVlMTczZWUxNzJlOGQ3NzQyYTcxYzBmZWUwNGNjZDE2ZmI1ZDU0YTQ1ODIwNjQwNDA1MjA5ZTIwZjg0OTRmMDhkNzkxYTJhMTVmNWNiODQ4ZGY2ODkyOTZhMDRlNGIwMWUyYzE5YmQ4ZDljYThiNDUyNTg1MzU0OWEiOiJiNmRjYjM5OTM5YTMxZGYxNzZkY2VjODdlYjhkYjkwZiI6ImRhZjRlMGNkMGIyOTM0M2RlZmI2NTU2MjU5NGIyYjZmZDNmMDA1ZTYyNTU1MDAzMzBmNzdhMDU1MGMxY2ZiYWRlNWY1OTczZTgzNmNlNzA0NmJjMmIyYWI4YmI3OTgzODMwY2U2Y2UxNDhkMDk5ODExNjE4M2QxYWVkMzIwZDI4YWRlZjlmZmFiNDhlMGY2ZDY0NTFjOThlYjgzZmFmYzc1ZmIwNTQ5OTFkMTIzOTY1ZGJkZGNmNzRhMmMwMWM3NDZiYmJjODI3NmI3N2Y2NzMyY2YzNjRkOGE0YTVkYmY1YWVkYmJlMTY3OTNlOGM0MDZiYTYwOWM5MGYwZTc2NjkiOiI0YzJkOTc5YjljMmRjOWNiYmQ2ZDRlZDA0MDk0Mjg1YTQ0ZGY5MmU3ZWJjZGVlN2ZlY2NmMDRjNjZjNDUxMzdhN2RmMTIxMTBiOGFmODA1ZjVjYWU5YjRhMjI1YzNmOGRjZmQ4ZjQwMWUwNWM2Y2U5MzdjYmZjNTYyMGFjZGYzYTQ5MTdjNWI4NTdiZmY3NmYzZDcyOGNmNmE4MmE1YjM1NmZiOTVkMTQ0MTI1ZDUzZTU2OGIzMTNjZWYxMWMxMTU4NWQzMTBjYTBmN2YxMjM0MDkwYjFiNjI1MzY4ODVlOWUzOWI5NjkwNjBhZDM4OTNlNDc2ZTg4OTQxZmUyY2RkIjoxMjA6Ijk5Y2VjOTRhNjhkM2UyZDIxZTMwY2IyNWQwM2NkMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE0YjkxOTdiNzk4MGQ5NWI3MWNlMWExZGU2NTc3Y2U3NjlkNmFmNGNiNDVmN2M4ZiI6IjAzYjM3OTQyZjEyNDM1ZjFjMTlkYmNmZjQ5NjczODIwN2RjOTJlZGYxYWI2OTM1YjU2NGU2OTNkYTE4NjVkYTY3ZmI1MWU4YTgzODU1OWFlMTY0MGRhNDQxZjIyZWU3OTc4N2YxZTkwOWNmM2MzMjE4N2I0MWE0OGZiYzU5NWRmMWMwOTdmYjM3ODgxYjMyOWZkN2IzMGRkMWUwNWQ2MDUyZmU4MWVkZjJlMTA3ODZhY2M4YWVlYjRmYWM2MzZhYWM5NDMyYzNiZTNkYWZiNTVjNzZlYzg1Y2MxMzg4MTczNTYwOTc3MzM1MGI5NWVlZGJkYjY5NWIyZGUwNzFhMDMiOiJjYWQwY2ZhNzkyNGUxZTVjZmY5MGQ3NDljZmFkZjlmOCI6IjI4M2M4YTM4YzdmYzlkY2UwNzFkNGZmOWVkNzkwMDJhNjg2MmY5NzE4Njc4YjQzNTUzNGU0MzY1N2E5NDE3ODM1M2I5ZWM3ZTViYjg3N2RiNWU0ZjYyYTJjYTZiZDU1NzU2Mjk4OTM2M2M2ZmRlZGJkN2YwZjNlZWVjNTQ0NWM0MWEyYThiYzk4MTE3YTE0NDNhZDRkNWRkNjNhMDc4MDY2MjJjY2E4ZWE2ZjlmNjAxOWJkNTExNjM0ZGIyODY1MWI5MTZlMjM5OWJiZDg0YjAzZjhlYzY5NmVkNTg0NmYzMDMyMGFkZWYyMmFlNmQxNjRhZWQwOWVkY2ZhMjUwMjciOiI4Mzk0MDA5NzMwMWU5ODY3NjIzYzEwN2Q0NDQ3YjI1MGJmNmRiN2QwNmY5ZTA3YjhkOGJjNmI3MmIwNzliNzI1ZWExZjRiNWY3OWJiODBjNTE4YmM2OWEyYmQ3M2NmM2FhN2I4ODE2Mjc3M2FjNWIyN2EyZGNjY2VjY2U2NmUxNThlYzA4NzU5Mzc5MTBlMGI2ZjM5NmNjN2Q3Y2FjNWQ1M2IwZmRkZjNjZDcwYjU3MGE2NDcyNDVhNTI2NDkyN2JlMWIyZDljNDZmYmM2YTYzMGIyMWZlYWQ0NmM0ZjM1YWYxZDE2MzI2OGU0OWExNjA4MzU5MDg5M2U2ZGY0NjcxIjoxMTI6IjNlM2Y2NzdlNjgyMDgyMDhlNTMxNWI2ODFiNzMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MGUyZWFhNzAzNjIyMDNiNzU2MWIxMzVkYjU4MWNmMzJlOWNkODE2NDY0ZjBiMmUiOiI2MmNjMmRiMzI1ODRhOGQ5MGYzNDhiZTMyMjI0YmZkY2VmZDFmZDI1YzVjYjA1YzdlNzRiZWNiNGI0MGVhMDlkNjQ5NWY3M2FkYzFmZDIzZDE0OGMxMTg0OWJkODI1ZWZkZjE1ZTE0NDU4N2Y3ODU3NzBkMmFlZjI3ODhiNzQ4YzMzODM3M2EwZWE0Mzg4MjE0MWJjOWY3YzY5M2EyOTFjNTEyY2RjZGVhNmQ1ZGVmYjJlZmEyMzI0NzM2ZGY3ZmM0YjQzNGQ3ZjRkNDIzZmIxYjg4NTNlYzNmZGYyYzFjMjg4MTYxMGE4ZDgxZGE1ZGU1ZTc2MWY4MTRlZDM4ZTM1IjoiM2Q3ZTk5ZGRlYTBiYWE0NWUyZjlmMjI4OWQyMTgyYTMiOiI3MTY2M2ZhYjcxN2VjNGQ5ZGEzNGQ0ODUxNDM3ZjQ1MDRkYmQ3MWI2NWIwZDA0ZWNjYzUxMzI4MmMzNTE5MjVjMjM4OTI5NThiNGM5ZGMwMjNjNWEzNDk0NGVmNTA3ZTBiNDA4NTdkOGI1MDhhYjcxMDRkMTNjMmZiZmNlMmQwODZkNDY2MjkxYWFhNDQ5YWQzNjk3NzgzNzIxNmE0OTZmZjM3NTk1OWFmZTRkZDUwZGMyNjIwYTA2MmM5MjZiOTM5ZmZkYjE0NGE2NTZiYzA0YmNjYThkMWQ0ZmEwYTljYjBhNWQ3MTM3MjFhY2NlZjJkMmM5Njg4YTc3YmI0MmJjIjoiMWM1NmI0OTJmNTBmYzM2MmM1YmY3MDYyMmY4MTdlMTgxNGFlMGI2OWRiN2UzMDU1ZmM5ZTY5MGQyYWRiOTQwZjlhNzhjZmQ3ZTA4MDQ0NjcxOTEzYmFlYzY2M2Q5ZjlhZjZkZWRlNDJmZTE2ZDIwMGU4NDIxZDIyMDY2MDA5NTM1NzA0YjA1YjM3NzVhYzQxMzU5ZDdjMjY5N2UyZjRiZWM0MGRmNjliMjQyMzkyZWIzMGUyZDhhNjY0ZDg0Y2Y5NWVjMjE3OTdmMWNjZGRiNzI5MjZjZmRmZjIyODQ4ZDE0ZTM3M2Y1ZTZjM2RkMzQ5MTk2NDY0Yzk4ZGMzODM2NSI6MTEyOiJlMGMxYjE0MGNkN2JjNGRlZDkxNmFhYjg3ODBlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGI3YWE2NDljYjE0ODhhNjU4YjQzODc0NTFiZjU5ODUyZTg0NWVjN2QyMjczYzY5IjoiMjQ1MjUxNTk1ZDEwZDcxOWQ4ZDAwNjEwZDM5MTczNWZhZDM3N2I2MGQ3NDMwYzdkYjQ4ODQ4OGMxZWMyNWMxMmVlMGRlZTNhYWMzZDdkYzE5YWE2MDI5MjRhMWYyN2EyY2ZhOGY2MzU0MzE1ZGI5M2I1ZTRkMmI2ZTg0MDJjNDI1NDkyMWU2ODNjYTY4MWRmYjNjN2Y0MzNhOTdmMTE5ZTAxZjJhY2IyMDk4OGRjZWQ4NDk0ZTA4NjM5NTM1MWYyYWYzNTZiMTE4MzI0NzJjYmNiMTA5YzEzZmY5MmYxMGE0YzhmZTY5YmQyNjRjODkzM2NkZWQxOWE5ODBiZGJkMiI6IjA3YjUwYjFhYWNkYWRlYjAzZTc0ODg0NThkYjAzYWFmIjoiMmE3OTcwZWU5N2Q2MTJiNjNkMmEwYzI5ZTUwNDVkZGZjNjYyMWMyMzdiYzI3MGIzMTQ3ZmMwMTkxZGUxOTliNjkyMzk0N2UzYmQzNzUwZGU1MTU1ZTFkZjI5Y2FmOTZhYzcwMmY5NDhjMzg2MTllMjE4MTM4OTQ1NTk1MTU2Y2M1ZjFkY2ZkZTBkMWQ2YTVhZWM0OGZmMzdjOWZmMmIyMjA5YTkwNGM1OTU5Mzc3OTgyMGVhNjhhZDk1ODk4YzdjYTBkMGQ4MTU4M2M0NGZlYjBmZWMzMDY2NWNjNTY2MjBhOGM5NDA4ZTQyNzVlNjBmNTI4NGVkN2MwZTU4Mjg1ZCI6IjZiZDUzZTQ0MTU3NjVmMzg3MjM5YzY2NjRmODM3MzcxYjM5ZjZkN2ZmMjI0NTMyMTFlOTFkZTVkZDE0MjcyNzg0ZmZmYjRmNmIyYzBiYjhjNmI3ZDFjYWZjNTUxMzNhYTBkNTRkNDEwYWUzODMwMDhmZGQ4NzY0NTY1NTA2MjMyMmZiYWEwNmRmMGEyZDdjY2Y0Y2MxNzBkMWY5OGVjNmE3YWQ1MjRhM2U1YjA3NzYxZjhhZTUzYzljODI5N2ZhYTViNTYyMWMzODU0NjQzZTAwODU0MTBkYWY1YmY2YzdlMWY5MmJiYmZjMzY5MWVlZmYxYzUyNDFkMjMwN2JiYzIiOjExMjoiNzhkMzcyMTUyMzRmOWEzMjU3MWQwZDhiMWU1MSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjUxMmJiYjQ5MGQwNjJmZTVlY2M4ZTVhZDk1OTIwYTllOWI3OGJlYzZhNzY5NGRjMiI6Ijg2MmYyNzI0YWQ4MmE1M2UwNTc0YzBhMmEwNTE1YmQ4NmM1ZWQwYjVhZTkyMjc4YTc4ZWExYTkwYzAzMDU5ZDA4YTkxZDFhNDY2NzhhZWY4NjJiNTZkMDMyMGU5NzBiN2Y5NDFiNzg0ODQxYjRkOGEzOGQwNTZmMmJkMzUyZDQ4YzAwMjgwODZhMzY0MjZiYmMxNDM2ZGE5ZTAyMWRjYWM3MDViNmUwMzY0OWI0MjZjZWJkN2EyMzVmNmQwNjBhYjYzMDJkNzc3ZmM5MzE2ZGI0YTg1ZThjMTM4NzY0OGE4ZjVjZTIzOThhMjQ3NDEzY2I5Mzc0MTI0NDQ5ZTQ5OGQiOiIyZDE0ZmIzZTA1OGY5N2I3YzllOWVkZDFkOTdjYWM3ZSI6IjI5MDA3OGU2M2M4MWFiZmU5OTAxMGI4MzQ0ZmYxYTAzZGFjMDk1ZTI0NzNkN2EzMTg4ODEwMmU4Mzg3Njg4OTJlODIxNjQzOWRjMzM1NWFlZGQwNzM4OTJmNDQ0OWQ5ZDRkM2VhNmMyNWE5MTUyYzMyOWQyNGNjNzNlYWEwMDA0ODMyNjkxNzQwZTYwZjE3NTgxMjAxYzhmN2Y0MDIzZDhlNTVmYWEzOTQyYWQ3MjVkMjFkYWRlNGMwM2M3OTBiNTM3MGQ0Y2FkMzkyMzUyN2MyMGNhOTI1YTJjZTUzNGE2NTJlZDdlMDMyY2IxYzc5MDZhZWJiZGMyNGU2YjM5YTQiOiI0NGU3OGNmM2EyY2U0YTVlNDk4MzE1Y2I4ZDVlODQxZjkyNjQwODkyMWYzNjY1ZDUzM2NhZWJlMGE3ZmE2YzE2NGIzZDJjMGIyMWZmM2E2MDhhNzE5NGUzMTk0ZmRhMTY1YWRhOGQ1ZmMyZTkyNDMxNmFhNGNlMjAxNTMxYjg1Nzg3N2M1NTE5Zjg3NWViNDllNTkwOGQ4ZDgxYjY5NDcyZDAzZDA4Yzc4NWVlMzc0YzVmZTkxYjE2YWVlMTczNzYxYWY3ZmYyNDQ1NzFmZDQwYWFkYWJiMzYwZjM4ZDMwMTQ2M2U5ZGE4Y2Y4ZGM0NGQyMDg0ODY4OGFiM2JlNDdiIjoxMDQ6IjYwMzdjYjE4Zjg0Nzg2MzBiYzlkODA5MGUyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDM5NjRlZTAzZWM1ZTUwMGYyZjhjMDUzMTNiNzg2MTU0MjAxODNmZTI5NTBiZTMyIjoiYjk0MjRlNGE3OWEwOGE3OTM3ZGExZGExNTA2MWMxZWI5YTg3Mzc0ODY5MWVjOWMxZmM3NmFhYTE2NGJkMzQ4NzNkMDc0MzdkMjAzYzkyYzBlODljMGM1YmVmZWRmYmIxN2Y3MjFmNTc2NDczMjUzNjE3NTQ3MjA2ZmIyYjM0MDk0NTUzNmNkN2EwNDk4NjRkMDk5NDE5Y2YzZjdhOTE1NGMwYWM4ZDY3NmIwZTllYzAyOTQ3Y2FhNDA1NzU2MGFmMzQ3ZGRiNDYwMDI3MDNmMzUzMWYyN2IyMTk3NzkwYmExMzVlM2QzYzA3MDljODZmNDc4MTg5MGRlYjUwZjNiYSI6ImQzZDRlNWZkZjZlMzZhYzc1YjRkNTFjNDdjZTViOGY5IjoiNjE0NmE5N2EyYTFjNzA5NDU4YmVmNTA0OTA4OGZkZjMzOWU0ZmUyOWNiZGY1MTljOTNkNTI1YjcxYzlmYjUwMWM0YjU4YmVmNDlkNDNjYzc2OTliMThmYzg5Y2VlMWE0YTQ1ODM0ZjUxNzIxNGE3N2ZiM2I5MWQ3NDE5NzczMDhlMTU4NWM0NzQyNDU4MDIxMThkMGUyYzcwMDMwNTdjNGExOTc1MmExNDMxOTVlYzJhNTcxMDJjYjJhMTI3ZDJkYmVmZTExNjg0OTJlMDcyZTc0YzVmNmVlMTAyYTBjMzcxYjFmZTJkZGZkOGVjYmMwNGM2ZjQyYmVmZWNkN2Q0NiI6ImEyYWUzMzRiYWM5NjkwNzJlNzU0YzBlMzc3NjVjYTYyNTM3NDQ5NDFhMzU1ODdiYjRmZWRhNTQyMzNhN2E1OWYwMzdlOTcxZDI1NGM2Nzk0OGIxNmU0YzM1ZjMwNmMwOTg0ZjAwNDY1Mzk5NDA1Y2U3MDFiYTU1NDQxOWE3MzZjZGZmNWExYjRhZTVhYjA1ZTYyNWM5MTY1MWY3NGFhNjRjOTZhYjYyODI0M2QzMTAyMWFkNTZmNTM1ZWFlMzNhODg1YjQ1NzMwMjY4ZjkwMGI2ZGYwYWZmMThhNDMzZTI4MjNkZGIwNjI4YTcwMjZiODZiMzgzNTE2MGU1MTIxYjAiOjEwNDoiODE3YmU3ZGNmN2FkZWYwNjQxNjFiNmM0MmQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YTgwNDlmNTIxZmU5YTAwZjdiZjU2NjM2OWU1NDBhNDhhYjU5ZDgzMzA1ZTI4MjkiOiI2NzI0M2EzMzZhMTBiODJhMGE4NjM4YjM1ZGMxNDdjMTRhYzYzYjIwOTc3OTIyYTEzZGU0NTlhZTJjZmJkYjI2MmE3OTAwNGMzYTY1NmRmYmMwNzNlYzg4Nzg1OTVlMjQ5OThkYzQ0Yjk0MzU0MzlhZjExN2M5NjM1YzQ3OTY3NmY2ZWRiOGY1MjJjZjAxNTcxYmU1YWE1YjViYzdkMWNjMzI2NDQzNjU2NmY4ZDNjNjg0OTczZDFlODhkNDYyODJiNTM4MzZhMWFiNWE2OTg1NjBlNWJmNzYyOWVjMTJjYjE0MTg2N2Y2ODRiMzY5NTQ2YTFkOGJmNDgzMTViNmM3IjoiZTRkODFmNzFlMWRlOGNmNDY4OWJmZTY2YTQ2NDdmMTUiOiI0Y2Y2NzMzNDgyYzIxOGFmODMyZTk5OTcwZDA3MTdhYzk0MmViYWNlMGZlZDRjZTRkZmExZjcxMGI5ZTEzMWEyMWNjMDNkZDNjZWQyNWI3OGJjY2QxOTkxYTMwYmI1M2I0NjNjMTQ0MGI2NTQzYjE5YWY5MWUzMWMxODg2NmMyYWNlYmI3OGMyYTM0MGI5MzA1MThlNjFhNjNmZjhkNmE2ZThlNzk2MDUyM2RlNDBhMTc4NjE0ZGFkNGNlNWFiMjUzZTEwOTBhMDk3ZjhlYzAwZGZlZWNiNDZhYTBlOGY3NzJmMDFjNGU3MDZkZTdlODI0Mzg2YTEzOTQ0NjAwNTQyIjoiY2ZhOGJhMjQ3YWRhOWU2YjNlNWFiN2RkMGE3MTA4NTc0Y2M4MTFjMjk4NmNhZDk1MTE2ODU1OWZmNjk3Yjc3Njg0ODgwZWMyNjZmMGI3ZDg3YTJmZjU1OWUzNjhhODU4NDZiZWNlZTMxMmJiMjk5MTY5MmQ5MjhhN2MxOTFjZmRiN2YxNDY4ZjhiODRiZTRiYjU5MmVhNjQwNzQzNDQzYmQ0OTQxYThiODU2YzU3YmUyMWViMjJmY2IzZjZjMGE4MDcyOGRkYzlkYzVmYWIxYzc3ZGZjZWI5MTY5OTAwOTA1NGM1YTRlYjA3MTRhMTBiNzRjZjBlMDlmYTYzMDI5OSI6MTA0OiIxZGNlZTI1MWNkYTEwYjJlYThmMmJmZTZhMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjU3NTY3YTU2ZTU4NWM4NGU0MDMzMjY4ZjA4ZjcxMmFhMjgwMDE1Yjc3Y2Q2NTdmIjoiOTZkODg5NjUxYzRmM2Y1MTIwYmVlMjMzZjYzOTVmYTBiYmJhMWY2NTQ4YjEwOWJlNTY4ZmY5NmYxMWQyNGUzNGQ2N2JlYjZjMjAyNjhmZWJhODkyNDA2NzRiMGI0NTUyZDBhNjQ1NWQ0M2U4ZWRmOTQzZGEzZDhkNzg1YTUyMjFkZjhkZGIzYTk4ZDJmYzYxMWFjNzM2MmFlZjcxZjhmMDA0ZWI0NTVhMTZkMWRjYWM0ODhlZTgzZDRmMTFjNGEwMGMyOWQ5OTkwYzVhMmE5N2I4OTdkNjdlNTFmYWE0MDk5OWIxZTUxMGFjNjJmYTQ4NTkxMjNjZGIzN2QyMDJhZSI6Ijk0ZGM3NTdiNmJkYmZlOTI1Yjc2MjkyM2NkMGEwOGVkIjoiYTJjNTRlOGRhN2RjYTQ5YzczNTUwYmQxZjVlNjg0NDkyOTVmMDYyZDVkZmU1YWE0MjAxYmRmMzUzYTJhMWFjOWMzYzYxZjJiNTQ4MjE4NGNlZjQ4MWZhMzc4YTFlYTk5MGNlMjAzYzJjN2Q3Njk5M2M2MmI0MTVlY2UwNmI5YjdjYWFjZWMwYzQxNDdjMGNiZjI5MmU1MjhkOTdjMWExNzZmY2IxY2E2MTQ3Y2ZhNGJjY2U5MmNiZGZlNjE3NzM4YTkyMjczMjgyYzdhNjVmY2I5OTdiY2ViODY3Y2UwMWVjNzQ1NDE1ODJkMzk2MWRkZGYzYTJhZjIxY2FkM2NlNiI6IjU1YTVkMDdhNzdmYzM3MDkwYzQyMDZmMTk0ODNhYTNjYzAzODE1MTk0ZGVkNzFjMmIyODA2YWQ5NTYzZWRmZWJmY2Y5NjI4MDZiYTgyOTM3Mzk0N2UzZTkzZjRmMzk3OTQ1MTRhZDdiNmRiYzYyNmUyOWZiYzM1ZjkwZjU3M2RhMzNhYjZhZmI1Yzk0MzgzZmQwZmRkMWVlMDc0ZDY1MGQxOTJmNmQwOGZiZDFlMjRhNjk2NmE4MWEyZmZkODNmYWI2NDRlZTkxNDk1MmRlNzdlOTQyNzI2MjMxNGFjNDdjMTFhNDRiZjdkMjg5MGY5Yjk5ODA0OTliYjZhMWY2OTIiOjk2OiI0MWM3MjA0M2Y2MTE2ZWU2ZjdjMTE5ODYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYxMTU5MjQyZDQ4YzJjYTBjMzAzNzdlYzJhZDcwMTEzNWFkYjYyZDExM2M5ZjliYSI6IjhhZTQwNjAzZjZjZGFlNGI2M2FjN2IxOGI0YmNiYjgzYzY1ODY3YzJhZTI3MDEwMmVmYjZmMDBhYThhZjVkMDQwMGRjOTUwODU5MTBhNTBhMTZjYmNmNzFmMDZjM2YzZWFiNzEzNDVkNTljNjA1NGFhYWMwMjk3MTExMWM3MTQ2YWRkOGMwNzIxNThlMGIzNzRkNDgxYmI1NDAwMzZhMTM2Y2NiOTE1MjNmOTZmMjRlYTIzNzk0MGFiMDExYWQzOGYyYTMwOTVjMDc4NWRmOTE2MDRiZTFmZTc3MzRjYzQxMTliMjdhYTc4NDg3NWQwYTI1MWM2Nzg5MDAzMzRhMGIiOiI0ZmRhNzIzNmJkNmViZTBiMzE2ZmVlZWEzMWNiNWViYyI6ImVkMjhlOTk1NDYzNGVjMmM5ZTJkZjQ5MzA2MmFiZjNlYTNlMTk5Mjk5MDUzYTE1Y2U4ZDZmZTA1MWQxMDc2Mjg3ZTRlN2MwYjJiYWIwYTU5OWI3NjNhMjlkMGFhYjY4MDYyNmYyODBjNGY1YWQ5NGI3NzkyZDlhZjUzMjY4MWY2ZTRlYjI2NzI3ODFmMjM0MjMwNGRhZmY5MDJkMDNiMzk2ODUzZWFmNTg1YWY0ZDNiZjUwNzhkMDY0ZTllZWE2ZTk0ZTY2NzcyMmYxNWMwMDRmNGNmNTIyNTNhNWM2NWI3NTMxOWIwN2JhNTM5NTU4ZDhhMmI1NTIzOTBhMjE1NzciOiJkYmEyNTFlMzU0MjJmNjBmOTAyZjU5NGJiNThkY2UzNzEzMWU4YWUwNmI1ZjQwYWQyM2M0YTcwYTVlMjVmZTI0Yzc2OTgyYzliYzExYTdmNGUzY2M2MmQ4YzEzMjYxNzA0MzI2MzNlYmExNjM0OTcyYTliY2QwOTNiMDhlMWM2M2VjZTA3YzRiZTc5Y2FkYzg4OGIwNDA4ZTQwYzA5NjM2ZTFjZjFlNWU5YTZmMmVhNDRlZWE1NDA5YTJmZmU5YzNhYzlhMThhZDdhYTkwNDFmMDhlYjEwOWMwMWVkOTA3MzJhOGFmZTA2OTQzMTllZjk4YTAyNjk2ODViNGQxNmIxIjo5NjoiYjBmZWViZmM4MzI0ZmQxZTllNDBmN2YwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1YjRjMzcxNTBmOGJmMGUxNGUwYmZkMzdhYzE0ZTYwNmRkMjczNTc3MDA3ZjI0YjQiOiI0OGM2NDg2YjI2OTFiODZmNWYxMDdlOGZlMDEyMmE4MjEyNDgyMDZkMmRkM2NlODk4YTJiYjM3NzIyMDJmZmU5NzI5Mjg1MmJjNjE1MTM1MjlhZDk1ZmFmNjM4M2I1ZjZjNWE3YzE2YzRjYmUzM2NiMDJlNWU1MGYzMmRiOTVlZTI5NjJhYWUxYzljMGY1NDcwYjNiYWEyMTZjYzE5YmU1YWI4NmI1MzMxNmJlZWYxNDM5N2VmZmI4YWZiYTViNTE1OTA3NGUyNmJmNWRkM2I3MDBmNGVhNWFiZDQzZTkzY2ExODQ5NGUxNzc5YjhjNDhmY2Q1MWY0NjY2NGRkMjYyIjoiNjY0ZjU1M2ExNGRjZDRkY2JhNDJmMDZlMTBiMTg2YWEiOiI0Mzg2ZTI4ZWJkMTZkODI3NmM2ZTg0ZTFkN2EzZDlmMTI4M2UxMmNiMTc3NDc4YWI0NmFjYjI1NmI3MWRmNWEyZGE4NjgxMzRlZDcyZWY0M2Y3M2U4MjI2ZGYxZjM0ZTM1MGI3ZjkzNmJkNDNjYWZmODRhMzE3YjFlNWIyZTlhMmI5MmNjYWIxZTNlODE3ZjkzMjIyZGQxZTJjZjg3MGQ0NWE4NDU4ZTU3OTQ4YTY0OTM2MGM2ZTI0MzliYmNjNjgyMzgzYjUwYmNkM2Q4YjAwMDU5MmMzY2E1OTllNTk4YTAzYjk5NTNhZjQ4NWYxZWNjMjI1MDFkY2FjYjcxMTBlIjoiMDVmZGJiNWFkNDAzZDY0MDExZTE1ZDI3Y2Q2ZjVhMjI0N2UwMThlNDc5ZTU4YWQzZmVlMWUwZThkZGQ5ZTExNGMwZTgyZjJjOTQ3ZmY5YWY1MjVjZTc1MmY0YWVhOTU5NDYzODk5NTQyYjg1YzliNDEzZDA2NWVhMTc1MTAzYzNiM2MzNWY1NmVlYTUyYWYyYzU0ZWMwOGExZDViN2NkNWVlNGY1OWRlOGJlODY1MTJiNzcwZTQyYWIxNzZiNmI3MGNjYmNkMjY0ZDZkNWNmZGQyZTUyZTYxOGRjMjQyNTFhYzMzOWVhMzhjZGM0NDZjNzc4ZDJkYjNjN2MzZTkzZCI6OTY6Ijc3ZjMyNDAxZGIyMWFkYjc3NWU3ZjFkMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTMxYTM4MGIxMDkwOThlYWZkOTk3YmQyNWJmZGU0ODY4ZDJhMWNhNzgxNzk1ZTlhIjoiNDY2MjM3ZGI3OGQ0Yzc3MGE2NThiOTY5MzQyMGEyZTA4N2M5NzhmY2M0MzRjOWFjODJmM2UyNDQ3YjJmYTA4YmUzMmQyY2U2ZGEyNTg0NjU1NWZmZTU3NjQyMzRiMDdiMzVkZDFkMWJjYjcxMGU4YTQ5ZjkxOGYyYzg3MzY4MWYzMjc2NWIwOTJhODM2ZTk0MThmYWJhNjFkYzU5YTI1NGM5MjMxNTliZTE2ZjU4NWU1MjY2MTZmZWRkM2FjZmUyNzQ4Y2UxOWVlMDM4NjhlYTk4MzZiZWUyYzZhY2IxYjgyMWUyMzFlYjJkMzBkMzAwMzg3YzkzMzkwZDUxZTNhNSI6ImFkMDc5ZDBiOTU4ZjA5NzMyYWFhMjE1OGY2MjE1NTczIjoiMDllMDAyYzJjNDhiZWFmMTEyMjQxMWU4NjI0NTIyYTllOTBjYzNmMmEwNDBjNTJmZmNiOTExMzY1MTkyNzdjMzlmZDZhNzkyOTJiODgzNWUwZmJjYWVmMjI3OTIxODEwNmFhZjc1MDM2NTkwZjhhNDZmNmI2OTEyMDUzYTNiMzkxODQ5ZjdlMjA0ZjA5NjI4OGQ2MTQxZDVmODBjN2Y5MWRkMmYyYjZlYmMxY2VkNmFmODIxNmUwYTU5NDgxNGI1NmJkNTkyZGY4MDAyOTliMjllMjZlZDc0NjFiYTNmNmYzY2YxNTFiOWMxMGFkNjM0YTAxZDljNWU1NzhhYTM3MiI6ImQxZjQ5Zjk0ZTZmYmVmN2UyMWFiYWQyM2UxNmMwNmZjZGZhNzVhOGMzNDJiZTY3YmFlYThlMGU1N2RiY2QyOTcxMjc2ZTk5M2ZhYTEyNGFjODFlNmJlMThmNjhhZjMwMzUxOGVmZDkyNjUxM2NlZTlkYmNjNWVmNmNmNWU5YzA2OGExMjEwZTUzZmRkNTY3NzYxNDhkNTE1OTdlMzU5ZGJhYTA1NzBiNGZlMTU0NzZjY2M5YWE3OWY3Yzc2NTc1NWI2ZjY5NGFmNDI2OWI5ZTE4ZmM2MmEwZDQ3NzA4YmNhNjdkY2YwODBlMjAwNzE4YzIyYmFjMjU2ZjY0MWU3YTIiOjY0OiIwMWVjMzk1Yzk5YTE3ZGI2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmYmQ3YTkyMTIwZmY5NzNlYzY5YjZhODE4OWM2ZWE4MjdjYTIwNzQzYTg3ODE1MTgiOiIxNTgzYzE1NzhhOGM4ZDI3MmE5NzBmMDVkODc1ZjE5OWU0OTdjNTVmMDNmMTBmN2JjOTM0ZmVlMjFjMzAzNzlkYWQzYzU4MGIzZjk5MzA0YTU3NDdiNjFmZDQzNDI4NTA2NDM5ZWRlMmM1N2Y1MjI5ZTEzZGE5Y2I3Y2Q2MTc0Y2NjYmIzOTdlOThmYjkwNDU1Y2NmM2VhM2IxMzA0ZjQzMmEwNzBhMmViNTIwNWVkODYzMzI2YjNiODZkNGViN2Y1NGVlMmZmY2Q1MGVkNmVmMDFiM2VlMjE2YzUzZjRmMjY1OWE4OGZiNjM0MzM5NmIyZGVkMGIzODljNjI2NmM1IjoiNTc2NThjNzFiMmM0NWY2YWUyZDFiNjc3NWE5NzMxY2YiOiI0NWNhOGExNjhlY2NhN2E0Mjg0N2I3NzllZjE1Mjc2NmI5MDIxOTJkYjYyMWQyNzcwYjU2YzdkNTkyMjA3YWZhZjUyZDE5YTYwNTlmZWI3NmU5NmI5MDYyODk5NWJkNjUxN2FmM2YxMTRlOTdhZjhkNjAyYTQ5M2I3NzQwNWU5MzA5NWZlZTY3NjE4NzdkYzI5MmZhYjY5NmE0MzAzMTAyZGVjZTYwOTUxY2NhMjBjYWNiMTcxYWJkY2ZkMGVmNmRhNmM5MGI0NGVkYmE2M2I5YjYwODdkODc2YjNmZmYyNGRlYTkwOTg5OWViZDBkMDM3MWM0MjRmNTFhOWE4NGI4IjoiNThhMjkwY2YwZTc3NDI5M2QxYjU1ZjVlZjhhMzA1ZjY4NjA1YzBjODE2NjhiOGExYmE5NWZjZWVhYTY1MjI5NDA0ZTE4ZmE1NGRkODExYTZhZjA4NWM5OGI4ODU0ZDBmOTU2YWRjMmFhYWQ3NDJjYWZhOWVkNTNkN2NiNDQ1NDUxZWU3YTRkYzFlODM5OWVjN2U1YjRkMDA0ZWNkMjI0OTY1NjViZjQ0NGIyZTNkODJkZGY2YTZkNWU2MjU2YzUwOTVhNjk5ZDdmZjNmOGNmMmFkZGVjNzNlMjEwMTNlZTZmM2RmYzBhM2FiZjMxNmVhNWVlMWQ2OTQzYmMzOTRlMSI6NjQ6ImFmNzM3ZWMzNTEyZGEyYjQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU0YmZjODM3OWUwYTgxODBiOTMxYzUxODhjOTVhYjNlZDM0NjFkNmU5MDA0ZDE4MiI6IjkzMzI3NjY0ZWI1NzZiYmI2NGU0ZmYwNjE4NzQzNDZiNGU4MGE3NzljZGViMWZiZTYzMGJmNWU0MzA3ZDRmMmM1ZDVlY2M5NGFhOGJkZWE3NTVjMWFmMTY1ZmM4OTI1YmZjZGYxMjhjMWVlNjU3MWU5ZjgzNDRiMjJkZmM5MGVkODkzMzE2MDMxNjYxYTk0MzhiMzA1Mzk2ZjNhODA0NTJjOWIxMTkyNDE2M2I3ZmM0NDIyYjAwZGM1OGVlMGU2NzQ3MTAyMzk5NzVhMmNmMzI1M2JmMjYwMWNkMTU1ZTA5NTQ3YTVmM2JlMWFkZGE4NGE0YjI5NjMxYThlMTMxNjEiOiI5ZDE1ZGY4ZGU0MTUwZjQ0ZDM0MmYyMDMxZGUzNjExYyI6IjYzMzMxOTM2ZDI5NzJhYmQ0NGMxYzlmNjJlNDJiZmE5MzJkZmY4Y2M3NWQ5ZjU1NWY1YTc4NDdkMDg1NThlNzZmNTM5M2UwODkwOTc2MGVkYmVmOGQyOTIyYTdjYThlMWMwYzUwNWNhNjI3YzAyYWY3MzI1Mzc5MWJiMzVmZjA4MGI0ZGI3ZGRkZjRjOGIzMDQ5OTlmZjY0NTIyN2NkNzlmMTNhYzg3ZjljOTYzYjkzYTc5YTBlOTQ2ZTU3ODFjZGJmMWI0YjE5NjdhNzUzMTRmMTljNzIxOWUzYjY5ZGMyYzI0YmEwOWZiYmRmNzE4NDI3OGY4MjgxOGJkZDA5NTgiOiIxOGZmODdkY2NiYzI0YzM5NjE5MGM3YjM3YzRhNzdmODZlNjA5ZGI3ZmIyYjMyNjgwMjcxNGQwZjE5NmIwMGI4NGFmODg3ZjFiM2JkMzBlZTBiMGIxOTJkMDgwMWFjNGU1OWFjNDBlNWM2NTJiM2RhMzJhYTAyNGRhM2FjZjY0OGRhMDI1MzY3NGMzOTFkMjYwYzA2NzQ4NTNjNzgyMTg2MTA1OTc3MmM5YTdmMjc3NWE3ZWY3N2QxZDMxYTZlYzFjNTFjNWYzMDg5YmI1MTZmOGNmNTJkNWExNTcyNDI4MTA4NmFiZDkyYTc0ZDI1NWI3Y2M4NGI1MDUxYmU0ZTViIjo2NDoiYmYwZjdmODA4NGU3OWRhNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjFiNzc1ZWY4YzQwYTUzODdkNmM4ZWRhNGU5MGQwYTAwYzc5NTY4MWEyODg3ZGZjIjoiNjM0NmY4NDMwMWQ2ZDgzZTFjNWJhZDQ0ZmE3ZTA4MjFmMzU3MjM3MTNlZThkNGE5ZTJiZjE1YWJmOTUzNDI1YjA5YmQ3N2IyMzYwZjRlNjJlODJiZjllMTRlMmI1NmJlNTFkMDMyYWE4YTk2ZTg5NGYxOWYzZTg0NjMwZjllYWU4MzFiMzI5Zjc2MzhiMDlkZTcyMTBjZDI5Nzc4MDU5ZWYxZDBiYzAzOWMxZTEwNDA1ZjNhZTVlNGNhMzMyMTZhZGNmYzIxODY5ZDlmODI1MzQ0ZDYyYjUwYmFiMDNmN2FhN2I5MmZkYjk0OTUxYTY4YWNkMDFmMWRlZTc1ZTQyOCI6Ijk3NjNlNjE4N2Q0Yjk2YjE4MDFkMWY2ZWZlN2U4MGE1IjoiM2JkNTIzYzE2YTAwMjJiNzgwYWU4MzE4YTI4ZjAwMTUwMjEyMGJiMjZlMmY2NWY0ZmU5NDAxOTY4NmY5ZDFkZjMzMGU3MGNlZjFiMmJhNGI2Y2UxZjdlZjM3NzUwZjQ3ZTYwMjg0M2NiYzVmMTNmZjJjZWFkYzUwOTFlYjM2MDE2MDRiNzBiZDRhY2FkM2Q2MTk1MGI5ZGQyY2JmZDgzYTM5MTIyM2M4ZTA5ZmRkZDQwMjBjMGY4YThhNzA1NzEzOWZkOTJmM2JiZTAzNGYwM2NjNDhhZmRkZTA2NGM4YjEzZWE5NDJlYzBkNjIxZGI5NTllYzlkNWZhOTVhZmU0NSI6ImYyNTQwODg0OGJjMjdhYjA4N2IzZWEwNTM3NjI4MzdhNTM0YzM3MDJkZDhiZTAxZDc5ZjA3NWY2MWQ3NmFjMWQ2NTU3ZDM5MmUxZmFiNDc1Y2M3ZDEzYTVmNmJlNmYwNzE4YmFkNzFjM2M4NWI1OTk2YmQzYzAxNTllMjY0OTMwOTg4ZTNlZDUwNmJjYzk0ZmFiZWNmYjU4Y2FhZjU2ZTJlNDMxNWJiNTA4MTdjYmE3NjU2MzZkMWZhYTkxMTQ3YjM4ODA4MTVlZWI5MGQwOTM0MTgwZTQ5MTMyODMzYWJmYTYyNzkyNDdkOWRkNDA0OGRmZjg1MWU5YTU1MWVlMWMiOjMyOiJkMWZiOWFlZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGE3ZDgxOTdkOWNlZWJkOGUzZjZiM2JmYjc0ODc3Y2NmNjQ5YWM5MWQ3MDU3YWY1IjoiMzdiMDFkZjM1NzU2MWY1YWE0M2I1YjRiMDA4MTE0ODIxM2Y3Yjc0YmFiYzgwZjRiM2M2ZGQ3OGFkMTc2ODdmMTE0NDNjZDRhNTdmOGQ3YTc0Y2EzMDgwZTJhMjI5Zjc4ZDhlNmRiMjc2YzExNDJkNWY0ZWU3NjRlYWYwOWNmZDcwYzU5NmQ3YTJjYWQ1MzYwYzJkZTIwZDVlMTdlYzZlMDZhOWIwNDliYjEwZjg3NDJhMzBhOTQyNzBjYzZkNzcwOWIyZjA5ZjNjYjgzNDdlNDExMTdiN2RkYjk5ZTRhOTM5ZjMwOTRjMDE2MzMwYThmMTcwY2NjY2I5ZDM2NTFmYiI6ImRiNTE0NDk1MWE5ZjE3MjEzOTdiNzMyMTcxM2E3MjNlIjoiYWQ3MmZhNWEwNWFkYzQwZmIzODI0NWRhMDE5Y2JmNTA5NThjY2ZlMjZhYmY2N2RmZGQ0OWY0YzRhZjZiZGE4YmZjOTlkNTU3OTEzYjI2MzRjNWM2NWQzM2NhOTA5MzYwYWRmNTk4YjcwM2RiMWRiY2MyOTQ4MWIxN2NhNDJmY2UzMzE1ZWExNDU0NjkzYjU4NDNlNzUxZmFmZDc4MTU4ZmMwNDBjMWNiZTYwNzA2M2JhOWMwYWMwMmFlNGI4ODk4OWUzY2M2M2FkZGE4NDI3MDMyYzcwNTYwMzQ5ZTFhOGVjODQ3OTA2YTlhN2IwNDIyYTY5NGExZjllYjJiM2I3MiI6IjY5ODVlYzUyNWNmZTg2OWUxNzA5NzUxZWI2ZjFmZjBhYWJjYjM5YWUzYWE3MDhhZGM0NTJjZTFhOGNhZDhhYjRmMTczOWY2NjBiMjg0MTU2NmYxZjVjOWUxNWU4NDZkZTdmODZjYTFkYzA4NTE4OGZjYWE0YTNmODM5YWIyYTVmMGNmZDM2ZTM2OTY1YWU1MTlmZTE0Zjk4ODk5Y2NiMDdhM2NhMTVlYzcwNWUzMTYwZGY2ZGJjMzdhYjg5Yzg4MjAxMmVlZmU1MWU0ZGE4ZDZkNmI4NGIzMTQ0Y2E4N2E5MDg2NGZmNTM5MGFiZmI5Mjk5MmU0NGM0NjgwN2IzYzgiOjMyOiJjNTE2MDRmNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzEzMzU4ZTc0NmRkODRhYjI3YjhhZGIzYjE3ZWE1OWNkNzVmYTZjYjBjMTNkMWE4IjoiMzViOGI2NTVlZmRmMmQwOWY1ZWQwMjMzYzllZWIwYjZmODVlNTEzODM0ODQ4Y2Q1OTRkYmEzYzZlNjRmNzhlN2FmNGE3YTZkNTNiYmE3YjQzNzY0MzM0ZDYzNzMzNjBhZTNiNzNiMWU3NjU5NzhkZmZhN2RiZDgwNWZkYTc4MjViOGUzMTdlOGQzZjEzMTRhYTk3Zjg3N2JlODE1NDM5YzVkYTg0NTAyOGQxNjg2MjgzNzM1YWVmYWM3OWNkYjllMDJlYzM1OTAwOTFjYjUwNzA4OWI5MTc0Y2Q5YTYxMTFmNDQ2ZmVlYWQ5MWYxOWI4MGZkMjIyZmM2Mjk5ZmQxYyI6IjI2ZWQ5MDlmNTg1MTk2MWRkNTdmYTk1MGI0MzdlMTdjIjoiYzk0NjlhZDQwODc2NGNiN2Q0MTdmODAwZDNkODRmMDMwODBjZWU5YmJkNTNmNjUyNzYzYWNjZGU1ZmJhMTNhNTNhMTJkOTkwMDk0ZDU4NzM0NWRhMmNkYzk5MzU3YjlhZmQ2Mzk0NWNhMDdiNzYwYTJjMmQ0OTQ4ZGJhZGIxMzEyNjcwY2NkZTg3NjU1YTZhNjhlZGI1OTgyZDJmY2Y3MzNiYjQxMDFkMzhjZGIxYTQ5NDJhNWQ0MTBmNGM0NWY1ZGRmMDA4ODliYzFmZTVlYzY5YjQwYWU4YWFlZTYwZWU5N2JlYTA5NmVlZWYwZWE3MTczNmVmZGIwZDhhNWVjOSI6ImNjM2Y5OTgzZTFkNjczZWMyYzg2YWU0YzFlMWIwNGUzMGY5ZjM5NWY2N2MzNjgzOGUxNWNlODI1YjA1ZDM3ZTljZDQwMDQxNDcwMjI0ZGEzNDVhYTJkYTVkZmIzZTBjNTYxZGQwNWJhNzk4NGExMzMyNTQxZDU4ZThmOTE2MGU3ZTg0NTdlNzE3YmFiMjAzZGUzMTYxYTcyYjdhZWRmYTUzNjE2YjE2Y2E3N2ZkMjhkNTY2ZmJmNzQzMWJlNTU5Y2FhMWExMjliMmYyOWI5YzViYmYzZWFiYTU5NGQ2NjUwYzYyOTA3ZWIyOGUxNzZmMjdjM2JlN2EzYWEyNGNlZjYiOjMyOiI1YmU3NjExYiI6MAorCitBRVMtR0NNIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMjU2X2RlLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9kZS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZTg0ODkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9kZS5kYXRhCkBAIC0wLDAgKzEsNjc1IEBACitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJjMTg2NjU0NDA2YjJiOTJjOTYzOWE3MTg5ZDRhYjVhYjBiOWJiODdjNDMwMDUwMjdmM2ZhODMyZmQzNTA3YjEiOiIiOiIzYTAzMjRkNjNhNzA0MDA0OTBjOTJlNzYwNGEzYmE5NyI6IiI6MTI4OiI0YzYxY2QyZTI4YTEzZDc4YTRlODdlYTczNzRkZDAxYSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NDdkMDFkODJkNzM4MmI0MjYzZTdjYmYyNWJkMTk4YThhOTJmYWFiZjhkNzM2NzU4NGM3ZTJmYTUwNmU5YzVmIjoiIjoiNzE1NjM1OGIyMDNhNDRlZjE3MzcwNmZkYzgxOTAwZjgiOiIiOjEyODoiOTY4N2ZiMjMxYzQ3NDJhNzRkNmJmNzhjNjJiOGFjNTMiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxY2JlMzAyMTYxMzZiN2VhZjIyM2U2YTdiNDZjMDY2MjUxNzZkOWEwODE4MmZhODA2YTYzZDhiMTQzYWE3NjhiIjoiIjoiNGZlNmFjZTU4MmM0ZTI2Y2U3MWVlN2Y3NTZmYjdhODgiOiIiOjEyODoiZDViZGY4ZWMyODk2YWNhZmI3MDIyNzA4ZDc0NjQ2YzciOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMzExOTRjODNiYjhkYTk3OWExZWFiYjMzMzdjZWIzZDM4YTY2Mzc5MGRhNzQzODBkOGY5NDE0MmFiOGI4Nzk3IjoiIjoiNDA0ZWZkMjZiNjY1Yzk3ZWE3NTQzNzg5MmNmNjc2YjYiOiIiOjEyMDoiZTQ5MTA3NTg1MWVlYzI4YzcyMzE1OWNjMWIyYzc2IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGFlZWQ1MmFlNGJmNWNiZTFhZDU4YWU0Y2NiM2RhODFmYjljMGI2Zjc2MTljYTIxOTc5MzEzYWQ5ZDNlODNjMSI6IiI6IjQwMzdlYWRiMTEyNDk4ODRiNmIzOGI1NTI1YmEyZGY0IjoiIjoxMjA6IjM2MGM2ZWY0MWNiZDljZDRhNGU2NDk3MTJkMjkzMCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNhZDgxYzM0Mzg5NDA2YTk2NWM2MGVkYjMyMTQ2NjNhYzRhNmJkNWNmZDE1NGFlOGQ5ZGM4NmRhZTkzZGVmNjQiOiIiOiJjZWJiY2UwNmE4ODg1MmQzYmIyOTc4ZGJlMmI1OTk1YSI6IiI6MTIwOiJiZDdjYTlmNmJkMTA5OWNkZTg3YzBmMGQ3Y2M4ODciOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YzE1MmJhMzBhZWZhNWIyYTA4YjBiNGQ5YmYzZjE2ZmMyMDhiYjBiYzRjNGVjYTk0MTFkYzI2MmQ5Mjc2YmFkIjoiIjoiMDA4ZDA0MGZiZDczNDI0NjQyMDlmMzMwY2Y1NjcyMmMiOiIiOjExMjoiYzg3MTA3NTg1NzUxZTY2NmJlZGFlMmIxYjdlOCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5YWVkNGFlNmIxZDg1N2ZkY2JlNWFlYzZkYjM4NDQwNjEzZGNjNDlmMjRhYTMxZmJhMWYzMDBiMjU4NTcyM2YxIjoiIjoiOTQ3YzVmMDQzMjcyM2YyZDdiNTYwZWNhOTA4NDJkZjEiOiIiOjExMjoiN2QzMzFmZWRjZWEwZmQxZTllNmE4NDM4NTQ2NyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYzgwYmMwMzE2NzZlZmY1ZjM0ZGQwNzYzODhhNTEzMGU5ODVmOWUwNmRmNGI0YmY4NDkwZmY5ZmYyMGFhZTczIjoiIjoiNTFmNjM5NDY3MDgzMzc3Nzk1MTExZDQ0ZjdkMTY1OTIiOiIiOjExMjoiMDJkMzFmMjllMTVmNjBhZTNiZWUxYWQ3ZWE2NSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRiN2E0MDIxM2I1YjRiMDdlOTkwMGRjMjhmNTk5NDAzYjA1NzljYmNlMTNmY2Q0NGRmZjA5MDA2MmY5NTI2ODYiOiIiOiJhZWE2Zjg2OTBmODY1YmNhOWY3N2E1ZmY4NDNkMjM2NSI6IiI6MTA0OiI3ZjIyODA3NzZkNmNkNjgwMmIzYzg1MDgzYyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyOTliODc0ZWFhOGI3YmFmNzY5ZjgxZjQ5ODhhNDFlMjcwOGFlOTI4ZTY5YTViYTdiODkzZThlNmIyZGI1YzNiIjoiIjoiMmFhMDRkODVkMmMwZGM2ZjUyOTRjYjcxYzBkODlhYzEiOiIiOjEwNDoiZWEwMTcyM2EyMjgzOGVkNjVjZWI4MGIxY2YiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNmM3YjRjODE3NWRiNGNmMjNkMDU5M2VkOGVhOTQ5MDQzODgwZmMwMmUyNzI1ZjBhYjkwYWU2MzhmOWRjZmNlIjoiIjoiYWUwN2Y4YzdhYzgyYzRmNGMwODZlMDRhMjBkYjEyYmMiOiIiOjEwNDoiMTEzMmU0ZmZmMDZkYjUxZmYxMzVlZDljZWQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiOThlMWJmNzY4MjhiNjVhODEwMDU0NDk5NzFmZGM4YjExYmU1NDZkMzFkZTY2MTZjZDczYzU4MTMwNTBjMzI2IjoiIjoiOTI5YjAwNmViMzBkNjliNDlhN2Y1MjM5MmQ3ZDNmMTEiOiIiOjk2OiIzMzk0MGQzMzBmN2MwMTlhNTdiNzRmMmQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwOWNjZWY2NGFlNzYxYTcwZmUxNjc3MmNiYTQ2MmIwNThhNjk0NzdjOTE1OTVkZTI2YTVmMWJkNjM3YzM4MTZmIjoiIjoiZTM0YjE5MzgxZjA1NjkzZjc2MDZjZTA0MzYyNjY2NGQiOiIiOjk2OiIyYWRjMmM0NTk0N2JmYTdmYWE1YzQ2NGEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2NTRjZjQ2NTk4ZTVhZDNlMjQzNDcyYTQ1OWJjZDgwZjFlMDI2YTY1NDI5MzUyZGJkNTZlNzNmY2M1ODk1ZDFjIjoiIjoiYTU2ZjI3NzA5ZTY3MGI4NWU1OTE3ZDVjMWQ1YjBjYzIiOiIiOjk2OiIxNzdiOWE1ZTZkOTczMTQxOWRkMzNjNWMiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg0YmNhMWIyNzY4YjkyMDJiZjE5NGYyZDVlNWEwYTVmNTFmZDhiYjcyNWYyYmFiOGEzZmNjYmRiNjRhNGVhNzAiOiIiOiJjNDViMjcwOGM1YmRmNjVlYzZjYzY2YjZkZmIzNjIzYiI6IiI6NjQ6ImZlODIzMDBhZGZmZDhjMTciOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjOGFlMDExNzk1YzlhNjBhZDc2NjBhMzFmZTM1NGZhNmY3ZTljMjcyNGQ3YTEyNjQzNjI5MTY4MGNkOTVjMDA3IjoiIjoiMWJkOWVhNjE4NjQ1MGY5Y2QyNTNjY2ZlZDI4MTJiMWMiOiIiOjY0OiIzNTIxNGJiYzUxMDQzMGUzIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkZjJmMGE4YTM4NDlmNDk3ZDEyYmRhNDRlMTJjZTMwYTY5NTdmM2ZlYmNkNWVjOWJjMTM0MTcxMzI2Y2E2NmQzIjoiIjoiNzI4Y2I5NjA4YjY3YTQ4OWEzODJhYTY3N2IxZjRmNWIiOiIiOjY0OiJlMmVmNWQ5Y2M1NzkxYzAxIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3OGU4YThhZDFlY2QxNzQ0NmNmOWNkOWM1NmZhY2ZkNGUxMGZhZjU3NjJkYTBmZDBkYTE3N2Y2YTliOWMzYTcxIjoiIjoiZjE2OWNlNmYzY2NjNThmNjQzNGFlMmI4YWQxYTYzYTEiOiIiOjMyOiIwZmU1NzU3MiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDJjYTZkOGE4NjJlMjVkYjlkNjhlNDQwNGFiYzEwN2U3MDAxMzVkZjQxNTdjZmIxMzVjZTk4ZWFhMzMxNTFjOSI6IiI6IjdiNzIyZmRkNDNjZmYyMDgzMjgxMmY5YmFmMmQ2NzkxIjoiIjozMjoiNzJkZWE2Y2MiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5YTJiNzA5ZGJjYzNhNGZiMTViM2FkNTQxZmIwMDhjMzgxYjdlOTg1YjU3ZGY1MmYwN2NhN2NkMjZhYjFlY2M0IjoiIjoiNzI5YmFhNGMwZWY3NWVkOGFhZTc0NjM3NmIzOWZlM2MiOiIiOjMyOiIyYTBkNjA3YyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0NDlkMzlmODYzZTQ5MDk5ODRiMzdmMmU1YzA5ZWE0ZDRiM2U5ZmFjNjdiZDU3YzI5OWU0ZTFkMWYwODRhYWEzIjoiIjoiZDhlOTExOGYzMzFiYjVhMzU5ZjBhYTg4ODI4NjFiNzIiOiI0ZGRjYWUwYmMyNGQ2MjJlMTJiZGVhYWM3M2U4ZDFhYjc5NTdhZjA1MWQyN2RmYWFmY2U1M2FlZWQ0Y2RkM2Y5ODllYTI1OTg5YTJmNDFjZmIzYzM4ZGJkODQxYzU1NjBiMGI1YWIxODYxYjFmYmNkMjM2ODY1ZDEzZGE1NWI1MDIxOTQ2MmUwMjFmOGEyMTg0OGE2NGE4NTMyNjAzMWZjZWM4ZmU0N2E2ZWY0YTQzNWRkMmIyZmZmNjM3NjQ0ZmZjZjM5MTRlZjJkZmE1ZGQ1NTY0MjFiZmQyOTdiZTE1MGIzMWRiMDM5ZjBmMmNjNDIyYjI4MmU2NTllNzBjY2ViIjoxMjg6ImM1OTViOWQ5OTQxNDg5MTIyOGM5ZmE1ZWRiNWZjY2UzIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2U3MGU2NjgxM2ZjNDhmOTg0ZGNkYTRkMWM5YzI0ZjFkNWQxYjcxZWNmYzhiYjk1ODE3ODJlN2NjYTVhNWNjNiI6IiI6ImQ4MDRmMTA1MWU3MmM5YjcxMTcwMDJiODYyZWI0NWZmIjoiMGIxYWIyYjdhODdjZWJhYzY2OGM3YTUzMmZhOGZhNTZhMjJjYWJmMGM0MWZjMWU2NzQ0ZmZlMDdjODU3YzY4NjVkNjIzZjUwODM1MWY5OGYzZjBjNTc3ZDFlYjk0MzAwYTMwYTQ0NTQ3MjIxOGM4YWM2MjZiMGJlZTdkNGMxMjJkMzNmODEzMDQzNmE4OWFkZDM0MWU4ZWY3ZTAwNjk0YWZiNGFkODBkMzE0ZDg3YWQzZjkyMWM3MTA1ZWVkMDU0MzFiODE1MWRmN2NmZjJjOGUzNzkwZWZkNGFjZDNmNjAzMzJkYzdmMzRmZGQ5MGJlZWY3MGY5MDkzMzYxZDY1YiI6MTI4OiJjMDljMmUzZmRmZWZhMjIyZjczNDVhZTRlZmI5NzhmYyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4ZTUzNDA0MTA5MGI0NWI4MGYyODdkYzVmYTIwZWJkYTAxN2FkODFiMDUzMGU2ODBmNjJjNjI4MGZkODg4MWFmIjoiIjoiZWFkNjc1YjAxOWVmNWM2YmJmNDk4NWYyYTM4MmQ2YzEiOiJiMWRiMjIwMDUyYzRiZWJjZWYyN2VlZDZkYjBkYzkxYmU0ODExNzlkNzExNjBjNWEyZGRiMmZlNDk3YTA1NDg0ODQwYjA0Y2NlNDg5ODAwNTdkNzcwZmJiZDBkNWYzZDVjNjMzYjU1NDcwNjE3YWQyY2FiNTc2NzE4ODI4MzMxMDMzNzgyNWM0YjBlYWZlMTNiNWIxMTI5M2RlYzIzMGRhZDQzYjIyMDg4NTEwNTc2NzkzOGM3ZWM0NjAwZmUwNjNmOThhYTE0YmM2YWZiODg2ZmM4NzRjMTA1NDY3NDlkYTI5NWY1NzFlNjk2MzA1YmQ5MTY1NDg2ZTI5ZjQzZjUyIjoxMjg6IjlhYTBjZGFkNTY4NmNhNTE1Y2Q1OGFlZDk0OTM4ZWY0IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJkZTE4ODc0NDcwYzA5ZGI2ODNjZjQ1Y2Q3NTJiZGZhOGJmMzNlNzk2NzIyMGIxYTY5ZjQxZjJhMDJkYTFkODAiOiIiOiJhZjMwZWIyZDBhMGMyYTUwZWE0MTNmMzI4NWFhODhkNCI6IjIyODg5Yjg2OGQ4Y2NjOWY0ODg0MDY4MTNjYWVkMTk5YjIzMDkxZGRkNzk2Yzg2MzJmNTY0ZTdjZjVhMzlkZmI3MjUyNjZhOTMxZmVjOTU4NjU5YjZmYzViNmI5MzQzYjgyMTdlZGIwYWNiMDEwYWZjOTQxNjYwMTE1NTI2MmI1N2JkMzk4ZDYyZjU1NTk1M2YwZTE1OTU4ZTE5YWUwMDRmYmM5Y2IyNWUwMjY5YTllYWEzOGE0NjM1YTI3YmZhNzE5ZmIyNDlmYTQ5MzM3Nzk2YmNmNWY0MTZiYmE4N2ZiZjNiMTlmMGQ4YzExMjkwYzI1Y2E1MGJiZGM4MjJmMDEiOjEyMDoiNjQ2YmJjOWIxNDY4MWFmNjViMGQxYzRjOWYxZDBkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFhMWJiOTEyMmU3NjJlY2Q3ZmY4NjFhMWQ2NWU1MjYwN2Q5OGU3YWU1YmQxYzNhOTQ0ZTQ0MzcxMGYzYjA1OTkiOiIiOiIzMmY5OWVhNGNiZjUyYzI3MDFjMjI1MmU1ZTZjODYzZCI6IjkxYjdhNzBjM2EwNmMxZjdmMmVhNTg0YWNiNWRkNzYxNzdiYTA3MzIzYzk0ZjJlOGY3Y2JlOTNmYzBiYjdjMzg5YzNjODhlMTZhYTUzMTc0ZjBmYzM3M2JjNzc4YTZjY2Y5MWJmNjFiNmU5MmMyOTY5ZDM0NDFlYjE3YTBhODM1ZDMwZGNmODgyNDcyYTZkM2NiMDM2NTMzYjA0ZDc5ZjA1ZWJmYWFkZjIyMWFlMWMxNGFmM2YwMmZhNDE4NjdhY2ZkZmEzNWY4MWU4YTlkMTFkNDJiOWE2MzI4OGM3NTkwNjNjMGMzMDQwYzNlNmVlNjljZjdjNzVmOWMzM2ZlYTEiOjEyMDoiYThlMjllMDg2MjNhM2VmZGJiZThiMTExZGUzMGE0IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNiZmFkMWU4Zjk4NTA1NzdmOWJhM2YyOTBlOWE1ZTkxYjQ5NGMyZDk5NTM0MjIwMzYyZTE3MWE3NTQzMTc3YWMiOiIiOiI4NDEwODg2YjcwYzU3ZDdkZWQ4NTk2NDQzYmQxYjE1NyI6ImNhODAxYzgzNTk2Nzk1NTE1ZWE5MzFlZGJhMDBlMDZlMzMyYmY4NDI0NmI3MDM2ZTEwYjMxN2UyZDA5YTUxYjI5ODFmY2I2NjRlZTNiZjQxODBiYjBiMTJlZDFjZGEyMjFhYmM2NzkwYjI3YzI2OTE0ZjVlZjljZWE5NTM2ZTI0NTNjZDViMjQ3Y2IwNTRlMjk1YzI2ODdiNzI1YTk3Y2JjNDg0YjhlYjg2YzZjZWVlMDNiZDA3YTU0YTkzMDFhM2FjMGRkYjIzYWVjYjgyNWEyMzgyNTJlNzU3NTMyOTA1OGI0MGU3NTU3NWE3ZjE2NDM5ZWRmNWJlMTYzY2U1ZjUiOjEyMDoiZTM2NDVkYjBjNjAwZGJhNTIwNDRlZmNlY2ZjMzMxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY1ZGViZGYyZjIxOTFhNmNkOGRlOGFkNGQ1ZDRkMGQ4ZjczMWY2Nzc0NGUyNTQ1ZGY2YjJhN2NiYTg5YzFlZTAiOiIiOiJmZGFiMmVlNTQ3ZGQ4YjZmNWE0ZWEyZGQxOTY5N2IzZSI6ImQyYjBhMDQzOGVlMGYxNDVhZWM5YTdjYTQ1MmI3ODhlY2I0NzMxNTJiNzhmYjc1ZjZhY2U3MjFhZmM3YjBhZTE5NDIwNDliNzkwZjNhNWI2MjIxYTg3NjAyOTU2NTk3NTZkMzUzNDdjYzA0MDI5YmUwMzQ1OWYzZTIzYTcxMjA5YjRlMGJiZTEzYTI1M2E4ODhjODNkYjIzMzc2ZDNhNmQ5YTUzOWY3YzlmYTRhMTJkYzY0Mjk3ZTdjOTNkZmEwYWI1M2VmNzZiNmUxZDk1YmY2ZjNkNWU2ZWU4ZjA4NjYyZmMwM2VjOWQ0MGVmZjBhNDNmMjNhYzMxMzY3MWJmZDkiOjExMjoiYzI1ZmMxNTdjM2YyNDc0ODg1ZTJlZWE0OGFlYSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ5NmFlODEwMzgwNDYwZDQwY2QyZmRhZThjMDczOWYxNmI4NzIwNWNjN2Y1N2RiMGE3MWE0NzNlYjM2MWQ1NzAiOiIiOiI3NzIzM2RlOTZmNWUxNzQ0MzM3Nzc4MjEyYjQxMWJkNSI6Ijg1ZjViNTRiNGM0YWY1YzgwODEyMGJkMjhkOThlNDRlOTZmNDEyNjYyM2U1NzY4NDk1N2U5ZmM0ZmQxYTJkMDU4Mzk0MGI4ZmM4MzE0YTI0OTMyNTQ3NmU4ZDA1MjQ3ODMxYjA0NzA5NTgwYWU3MTRlODE4N2NkMzhmOTU1OTQxOWUxNGM5ZmM0ZjhjNDU0ZWMxOTFiOGVmMmEzNjEwOTg4ZmUzMzM5ZDBkYzZiNzJmNTk3OGY5ZWZmOWQ1OTZkZmFiZjI3MDU2ZTNhOTA4YzY0OTcyNjc0NjEzODZlODYwZjZiOWQ2NTUyNjI5NGJjYjkyOTA4YjU2NjFiMDZiNWEiOjExMjoiNGVkOTFhZjYzNDBlNzBiMGMyYjk0YWI2ZjgyZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhY2ExODgxODNiNDYxMzljYzdjZmZjODJhNmFhYWViMmZkNzNjZWNhZDE0ZTc1YzY2M2JkNjJkYWYxZWM3MTFkIjoiIjoiN2JiZjdmYjU1ZWI3MGNjZTk0Y2M2YTJiNjdkZTU1YmEiOiIwMTVjZmJhOTBmMDY5NTQ1ZmVkNjBmMzE5OTJmZjNkM2MzNTkyZWI5MWU3YTUzZGY1OTc4ZGVkNjQyOTE5NTRjYjk5YTU3ZGU4MmQ1Mzk4Y2U3ODJiNjhkMTRhYzA0YThiNDI1Mzk1YmQwNzZlYWQ1OWViNDQ1NzIxYmRiMmY0NWUxOWZhMDg5MTE3ODAwY2JiYWM3YjgzMTNmYjE2NWNjYjExMjJhY2I2NTRlMTI0MmRjN2ZlNjg4NWVhMWNiYjcyODFiMTI3MGNmYTE1NDljZGZlOWI0N2NhZjQ3YjRhYzM4MDdlNTYyZTQ4YzA2NjU2NmY1ZTYwNmI1MDIzYjQ3IjoxMTI6IjNiY2I1YzJhNDI2MWQ3NWJmYTEwNmZiMjVlZTEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4Y2Q2ODE1ZjZlYzE1ZjAzYjdhNTNmMTU5ZTg3N2E1OTgxZTBhYjdmNmU2YzI2MWRkZGU0YjQ3Y2JiMmYyMzY2IjoiIjoiYzQzMWMwN2Q5YWRmNWY2MTIwNGEwMTcyNTljZGRkNzUiOiI0ZTFhODM1NDAyYmRlNGY1MjI3ZTY0YjQ2YTFmOGQwZjIzYTk0MzRlMTg5Mzc3ZmNkZjFiOTYyMWJhMTk4N2ViODZhN2YzYjk3ZWQwYmFiZmQ2NzRlNzRjNTYwNGEwM2RkMDE2ZDcxMDAwYTcyYmJiZDAwYTdmN2ZlNTZhZDBmY2IzNmEzZTI0ZGQwZmRiNjNiZDY2ZDRkYjQxNWYzNTAxMjQxNmVkNTk5Nzk2Y2EzZjY3OGRmN2ViNWExYjE3Zjc1YWJiMzQ4ZGRkM2IzNjYzNjlhN2IzNjJjOTQ4OGFlZGFiODM2YjYxZjlhMTU4ZjBiMTI5YzhjYTBhNTNhODFlIjoxMDQ6IjBlNDYzODA2ZmYzNGUyMDZmNzAzZGQ5NmIzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhmMGE3MmFiY2RhMTA0YWE3ZmFlNTAxZjlhM2I2ODZkMDBkM2Y2ZmU5ODQ3MzFkYjhhMjg2NWJmZWM1ODcwNzMiOiIiOiJhYjhhY2QwNjM3NzVkMWIxMzE0ZjE0ZTkwZmRkZDFiZSI6IjAyYzZkNDI2ZTdmMjBiNzI1ZDhjZGUwYTYzODJlNDliMDI5YjUyMTI2ODg5MDEzZWY0NTI1MWYyN2IyZmFkYjk1Y2E0YTlhM2IxNmFkMDY5OTllZWNhNGE0NzNlODEzMDQ1ZGI0OTQyZTliOWZmMmU1YTVlNDI5ZDliYWMyOTgzNzIzNDRkMWI3ODFkNWZhY2FiZjZkNzc5NjQzZjMxYWRhNjEyNGViNTBhYWQ1OTkwNDRiNTQyNzllYzliMjU3MTRhYzhhM2I5YWQyNDg3Y2VjN2Y0YjFlZTI0NWQ3YmUzZDQ5NmQ2YWYxZDRjYmVlMWM4MjAxMzEyNTQxZjMwNjQiOjEwNDoiM2YwY2NjMTM0MDkxZTBjMDQyNTg4N2IxYjkiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0MTcxMzVjYWQ3NDI4MGU2Zjg1OTdkYzc5MTQzMWM5NWNiOGZhNjNiYmY3MTk3ZTNhYjM3YzRiMWQ2ZDk0MzhhIjoiIjoiMGZlMjJkOWJhMWQwZTMyNjU2ZTNhOWYwN2E1MTdhMjciOiJhMGIyNzEyZTgxZDMyOWQ1YjA3NmE0YmUyYWQ2ODIzY2VlNmRiZDE3ZDlhNTkyZDA2NWJkZWJiOTJiMWZmMzdhNTZiZjJmNWU1MzQxZjM5YzU3NDI0NmNjZGExOWU1ZjM1ZmVkZTQ5YzliYTk1OGYzOTIwY2M1NDQwZmI0MDRmYWI3ODQ2ODg0Y2EwYzJhM2FmNWI1MWY0ZmU5N2ExMzk1NTcxMzE5Y2M1YjQwZjhhYWM5ODZkNzdkZTI4MGRiODIzNDM5ODM5ODI2MzgzMjZlZjAwM2UwYzAxM2FmMTljMzQ2NzI5NzVkYzk5Y2NjMDg1M2ExYWNmN2M2MTdkOTY1IjoxMDQ6Ijg4OGI4MzZjOTExMTA3MzkyNGE5YjQzMDY5IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMDQ4MjQ5MTRlMzJlYTBlZmQ2MWJlNjk3MjU4NjA5MzM0OWJkMmNjMmNmMGNmZjQ0YmU5NDM2ODJiMmRiZmY1IjoiIjoiYjZkOTI3YTcxOTI5MDI5ZjY3NjZiZTQyNzQ2ZjdjYjEiOiI3MjgxYzgxYzc1MTRmNGIxN2NiMTI1YzQ2NDkwMDZlZjg5NTlhNDAwYTFlNGQ2MDlkMjc3ZTM2M2U0MzM3MjVmYTMyMzQ2YTEwYmNiZDgyNmI2YWZjODIyMjE1ODkyMGQwYTJkYjFlNmZjOTE1ZTgxMjMxYzM0YzM5NDFlY2YzYzZmOTRmZmUyMTM2MTkwY2FlM2RjMzlhNDI3N2FjYmMyNDdmMzYyOTFiNTYxNGE4NDMzYjFhMDc4MDQzNGE2YzUwNTIxYjcyZWMyNTE0NWJiZDNiMTkyNjQ3MTU1ZDVkZDlkZjllNjY3NjJkMzk1OTI2MDJlYTk5YmY5YmZmZjQ5Ijo5NjoiYjYwNDRjNGQ3ZjU5NDkxZjY4YjJjNjFlIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4YTEwZTlhYmU5Mzg5NzM4ZTEyYTRiYjZmNTUzYWU4MWU4YmQzMjBlMGRmYmMwNWZiYWUyMTI4YzFmZGU3YTIzIjoiIjoiNmRhNDQzNTRlMTk4ZTNiZWI1NDc5MjcxOGJlY2JjYzEiOiIxOTlkNzU0NjMwMTM1YjY2OWJmMmVjNTgxZDMwMjdhNTY5NDEyYWIzOWE3OGRkOWQ0ODJlODdiNzc4ZWM2NWM2NDczNjU2MjYwYzI3ODI3ZTAwZTU2NmYxZTM3MjhmZDdiYzE4NTNhMzlkMDBlNDM3NTJjNmY2MmM2ZjliNTQyYTMwMmVlYTRmZDMxNDQ3MzY3NGY2OTI2YTg3OGVjMWU0YjQ3NWQ4ODkxMjZjZTYzMTcxMTVhZWE3NjYwYjg2YWI3Zjc1OTU2OTU3ODdmNjk1NDkwM2Y3MjM2MWM5MTc1MjM2MTVhODZkNmNlNzI0YmQ0YTIwYzkyNTc5ODRjMGM2Ijo5NjoiNWM1NjgzZTU4N2JhZjJiZDMyZGUzZGY1IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMTY0ZmZkZTVkZDY4NGJlY2FmNzNlOTY2N2UzZTZhY2IzMTY2ODJjNDFhZWEyNDc4OTllMTA0YTU0ZGQ3YTdmIjoiIjoiMWQzODhlMTllOWQ3YTk3NTBlMmZjMTE4N2Q0YjA3NWEiOiJmMTY2YTViNmY5MTI2MWNkYTU2ZjFhNTM3ZjQyZmZiOGFlZDEwYWY1ZTAyNDhmODkxMDAzNGI5MmRiYzU4ZDI1OTUzZjE0OTdmNTcxZDMxZmJmNWVjMzBkOTIyMzRiNDQwMTYxNzAzODUxZjBlNDM1MzA0MTgxNDdjZTYyNzBmYmNiNWRiMzNhYjgxOWJhODk3MzA1MTkwODcwNGI2YmVhOGFhY2EwNzE4OTQ3ZTZhYTgyNDk4YTZlMjZhODEzOTgxNzgzZWQ5YmY5ZDAyZWIxZWE2MDkyNzUzMGM0NzAwZmYyMWYwMDE3OTAwMmIyNzkwM2RkNDEwM2JiYzVjNjQ1Ijo5NjoiNTJlMTA0OTUxMDU3OTllYWQ5OTE1NDdiIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyODU0MTg4YzI4YjE1YWY0YjhlNTI4YWIyNWMwOTUwZmMxMzg0OTc2ZjI0MjcxNmM5MWJkZGVlYzA2ZjJmZGVhIjoiIjoiMDc1YWY5YzMxZjUyNTJiODkyMDA5MmNiZDk5OWU3YTAiOiJlOTQ1MmY3MTA5Mzg0M2EwMjViYjVmNjU1ZWI2YTRlODMxNmFiNTk0NjQ4NGIxMTgxOGYyMmI2MmY0ZGY3NWQ1ODkxZmEzMzk3NTM3MDkzYTI2MWRjOWE3NjQ4Yjc0NzdlYTFmNWZjNzYxNzE2ZTMwMjc2MzM2NGJjYWI3OTkyNTk1ZWRkMGZjMWM3ZjdhYzcxOWM4NzllNjYxNmUyMDA3OTQ4ZWI4NTMwMDY1YTZjY2NmNzNkMGZlNGEwNTk4ODE5YjQ3MWIwODU2ZTZkOTBlYTBmYzBlNWQzNmEzMGVlOTI1YjZiOGU1ZGJmNDBlNzdmMDFlZmU3ODJjMGJiNGY3Ijo2NDoiNmZmOGZkODdlNWEzMWViNiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJiZmM0NDVhYzAzNjVhZTZjM2MzODE1ZmQxOGJiZDBjNjBlYTIyNGY2NjIwZDliNmFjNDQyYTUwMDIyMWYxMDQiOiIiOiI0M2M1ZjMzNjdhOTk1NWFhZWUxYTBjNGQ0YTMzMDA1OSI6ImRiMGJhZThjZTdjNjZhOGJhMmZlZGVjMjJmMjM2MjEyZTlhN2FkNzJiMzcxZGUyODVjN2RjNmQyZjZjMjJkZjBjZTQ5MjBlMGYwM2Y5MWViMTY1M2M0NDkwMDUwYjlmMThhMmEwNDcxMTU3OTZmMGFkYzQxNzA3ZDFmZmNiZjE0OGFlZDVjODIwMTNmNTU3ZTZjMjhmNDk0MzRmYzRlYjIwMTEyZjQzNTY2ZjIxMmM0OGNlYzk4OTRhYzQwNzcyZmNkOWI2MTFlZTk0NDRkZjdiNzNlMzViOGEzODQyOGNjYjA2NGM5YzUwNDkxZDI1MzVlMGI1MzlmNDI0ZGI4M2UiOjY0OiI0OWFhYTgwNmNiMmVlYWRkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2I4MjhmOTlhYWY3NTFiZjIyZDk5M2VkNjgyZTQ4ODU5NTYxN2E2MDdlZDc0YWFhY2JiNmI2MDQ1NzQ1MzA4MCI6IiI6ImQ0OGRhYzFkOGQ3N2UyNDU0MjBmZWIyNTk4ODEyNDE4IjoiZjUwZjc4NWY0ZTdjODQ4YTU1YTYxNmVjZjRiNmIxZTFjYTg1ZTE2ZGU3MTAwYzdlNDI3M2Q0MTFiZDk1YzEzODBlZTE1N2JhNTAxYmE5NjE2OTgwMTk1ZjM0ZTM5ZjQzZTMzNWYzMzI1MzM0MmZlYjhlZDY0NDQzNDgzYzcyMWI4NTI0MWEwMzIwYjNjYWM4MzEwNGRlMmRiNDcxODhjNjFhMzczZmJhNTkyZWExNmZlZWVmZGVlMWYyYmI0MzkyNzM5NmY1ODE1MTQxODY3MmViYjc0YWZmZjVjMDI5NTAzYTBkMGJlODE0MzBlODFlZDQ0M2UwOGI3NGMwMzE4MyI6NjQ6ImE1YjcxZWNmODQ1YjI1ZDAiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YjZkYTExZDY5ZmNhM2U0YzkwNzYyOGQzZWI2M2Q5NWM3ZTUwMmZjOTAxMzcyZmQwOTdlMDY0ZTcwODMxNDMyIjoiIjoiNmZlMjE0OGYyNTBlYTE3OGQ0YzhjYTg0MjNlYWQ4N2QiOiJhODA5N2JiNzRkZWQ3NzZmNTc4ZWI3NTg4ZjVlZjg5MTVkYjliZmE3MjYyYWY3MDBjOGU3NmVlMTE0ZTA3NTU3YjY3ODZkZDVhNjBhNjZiMjcwM2U3YzlkZTVkNmI0MmFjYTkyNTY4YWVjNWQxZWNjMjk4ZGJkMGVkYjE1MGI4Y2MxM2M5YTc4Njk4Zjc2NzRjYWE5NGRhNmNhY2QxZjNlZjRjYTQyMzhjNTk4MzBlYTcyNWFiM2E2Mjg0ZTI4OTY2YzhjMzJkOWJjY2ZiMGNmZDY1ODNhNWNhMzA5ZGViZTg2NTQ5YTZmMzE3ZDE1YzVmOTI4Y2JjN2Y0NzMzMTBjIjozMjoiZTljZGJjNTIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNWFlOTMyOGJlNDllNzYxMDY0MDgwZmMyMTNlNTNlMzczZmQ4NjM1OWEwOWQwMzU1ZTJkNDM4ZDliOGU2OGYxIjoiIjoiYTdlM2Y4NjYwZmY5MjVkNWM4OGM1YWNlZmZiZDcwMjYiOiIyZGRkZGJhN2E1NmNjODA4YWVjNDYwMmYwOWFlOWJkNzg4ODc4MjdiZjAzMTVkOGRiZTE2ODIxNjA2ZWY5ZDExNzc0NmRkMTM4YmYxZjIzNTY1ZDFhYjhmNGNlZTM2ZDUzZmUzNzMwNjMyYzVkZjlmMTIxMDliMTZlZGJlYWUyODViYjQ5ZGZkZDE1NWY1ZGM5N2IzMTlhODUzNjJkNTNjYzg2ODE3YjdjMWMzMWU1ZTg3YzlmMzc0MjJmMTMzZDAwZGQwNzc2YmQ5MmFiMDVjZTY4NjA1NzNjZDkxMTY0NWNmZTNmYmU1MTVlODVmNzQ0ODk5YTQ0N2ZlNDQzNjUzIjozMjoiZTM1ZGJhYzgiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlNGY4Y2ExM2JhODZjNjU4Y2M3ZjQyZDRmMDI5NDIyMjA5ZWZiZDEwMWJjMTBhMWRmODFhNDJjZmIzYTBmNzlmIjoiIjoiMWEzNjJmYTBlNDA1NGJhMTFlNGIwNmQ1OWM4YmM5Y2YiOiJlN2FkNWM3NWFhMTM2NTlmOGNlNGIxNjUwYzQ2MzgyNjQ1ZWM2NzQxODE5OWI4NGVhNDQ1YjhjZWVmNjE5ZWYzZmJkZTU5ZWQzZDMxM2M0NTllMzZmY2Y4N2QyNmVmMmI0NTM0MDliMzJmMTA4NjkzNGMzMDcyYzFlZjBhYWM4Mzc2MmQyOGIxMTkzYjlhZmZmMmMwODNjZTQzMDBiNzY4YjBhZTIzZmY5ZDNkY2Y2NWJjMTY5M2YxMzUwZGE2NTE4MDYyMGFhYjIwNWFjZWFjZmM2ODNjOGJlNTNhMzMyZTJkMDMzN2E3NTE4ZDJhNTIwNGY5YzhkNzMyNWE0Nzk5IjozMjoiZTdhMzdmMTUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDAwNTBhMjFjYTFlNzJjZDA5MjRiZTMxYjk0M2M2MDg1NGJlNjc0NDU3N2RlM2RkOWQxZjRmYWRhNGExOWVhNiI6IjY5M2ZmZDNkOTIyOTQ4NTdhOTljNzAyYTA3OTllZWNhMjhhYjA2NmRkOTA5MTdiOWVhNWVmOGY2NTQ3ZjFkOTBiMTA2Y2JlYzhlZjJjMjJhZjlmOGVmYTZjNjUyZjJmOTdjMmJhZjMzYWYxNGZlOWRlZjIzMGQ0OTUyNGJkNjU5MDljM2RmMTQ5MGY2MzdmOTllNzg4ZGNjMDQyYjQwZTAwYmQ1MjRjOTFlMjQyN2VmOTkxYmY3N2U3YjJmNzcwY2RhNmU5MDA3NmM1ZGFjNGNhYzdlZTM5NThiNTNmZjhjZTg0NmMzYTk2MjgxZjUzYzJjNTJmNWYzZTUyMzUzNmYiOiIyZmMxYWZjMTM5NWQ4NDA5OTE5MjQ4NzA5ZjQ2ODQ5NiI6IiI6MTI4OiJlMzliNmE3ZmQ1YWM2N2EyYTFjYzI0ZDVlYjlkOWM3NCI6ImNmY2Q2YjlmZjc2NDE4MjljYmFkZWFhMmU1NmYxZjE1MGEwOTllY2NmM2UzNzhmYTRkYTU5Nzk0ZGNjNDQ5MGFhNGY5YzVkYjBhYjI0NWJlYzM2YTdkNDU1N2E1NzIwMDhlNDJmMDNiYzFiYWZmM2M5NDZmMjNmNTRhNGRjOTgyOGYxMDZjZjQyNjRlNGFiNDAxNjU4MzlkMTA4NWU3Nzk1YjFhZTA5NTBmMGVlNGEwOGU0NmFkYTUwMWI2YjUxZGVlMGU1MTgxMjljOTQyNmU1YmQ0NGM2NjY3NGE5Zjk5Y2ZlNjc2ZjAwMmNmZDM0NGM1YmJkMjJkM2Q5MWU2MDAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMTA5NjVhNjYyNTVmMGMzNTE1YWY0OTdjY2JiMjU3YTA5ZjIyZWMyZDU3YzVlZGFlMzIyYTNlNmQyZDE4OGVmIjoiOTE1OTg2OTBlZGYyZGU4YjI3ZjliYzc0NjFhODRlODA4MTFjZWU1NDRmMDU0MjkyMzg5ODMyOGNmMTU3NTkwMjUxZjAzNDJjYjgxZDM1OWI1ZGNjYzUzOTFhMTIzMjBkMTQ0NGMyNmYyNDE3ODk3N2RkNjcwNWMyYjM2NWRjMWVjZTAxNTJjNDJlMmYwZWUzMTYyY2Y4ODZlZjU1MjlmNGYxNmE3N2YzYmRkMmFlY2NkNDA1YjU5YWRkZjA5ODUyMWQwZDM4Y2MyNWYxOTkxZTExYmU3ZWNmMjRjYWVkYjQ4YTJhMjg2ZDJlNTYwYTM4ZmE5MDAxYzVhMjI4YzRkMSI6ImM1NzFjZTBlOTExZGU1ZDg4M2RjNGEwNzg3NDgzMjM1IjoiIjoxMjg6IjZkOWQzYTVkYmM4ZGNlMzg1ZjA5MmZmZjE0YmZmZmRhIjoiMjg2Nzk5NmUzODllMDllYzBkYTk0ZDQyZTc3YjFlNDM2YjUwMDY1YjA5Y2E0YWRmMWNkMDMyNDA0NDRlZTY5OWRiYjdiM2ZjMDgxYTE4NjljYTYwN2Q3N2Q1ZmY5NzU0ZmMzYzk5N2ZmMGE0ZWUxNzU0M2EyYmE3Nzg4NmI4OGE3MTI4YmNjNTFkMzQ1MGRmNThmZjNhMjY2NzFiMDJjMWQyMTNkZjZhZGI2ZjdlODUzMDgwZWI0NmI1MDQ1MTdjYmFlYTE2MjcxMGE5YmJjMmRhOGI1NTJlYjZiMGUwY2I5OGU0NGZjYWIwYTE1NzMxMmJlNjc5NzQ2NzhkMTQzZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ0MzdlZTdkMTZkOGMzY2ExYWEwMWUyMGI2Njc0OWVmYTkwMTYxNGQ0YmI0YmVlNzg2YWQ1YTVmMWJmZGUyZTYiOiJmZjgwNzI3YTM0ODVjZGJjN2ZhYjRlZTlmYWRmZGM2MjFjNTM4ZTIwNTU3MDY2MjkwNDYwNzhmMWFhM2ZiNjg3ZmM3MjhkM2E3ZmZhNTJhZTQ1N2I3YjU2NDk2MTNlYWI3YmFmYTQ2NGJiNDM1MzE0YzQ5ZTU5MDA3NTBmN2FkMzljYTliNzVkZjZiMmVhYTc1NTQzOWUxMDFmNjdiN2FlNGNkODBkYzRhOWRlYTAwMjcwNDgyNTNmMmQwYTYwMTQwNTZjYTY5YjhjODU2MDViMDBjZjc1ZmE3NjM0YTBkZGY0NjQyNzBhOGM3OWNlMWExMzI0YzRhNGM1MTNiMjRiIjoiMjc1MzkzMjc2NzQ1YmM0M2JhZTRhZjFlNWQ0M2EzMWUiOiIiOjEyODoiYTgyZmYxZTg3ZDI2ZTRkNmU0MTdiNjBmYjJkM2NlMjMiOiI4OGY5OTRkMjc2ZWQyMGJlMzkzMmQxNmY1NTFjNGI3ZTJlZDgwNDExZjJlNzJjZTA5OGZhMGI3MGMyMjE1N2E1OWVkYWIzMDY0OWZlYzQ0N2RkNjNmMGM4N2RjZWNhNzIzOGVmMGQ5NTYxYjU4NDg5YmE3YmQ4NmYyODkyNzQzMDk5ZjQwYWY2M2M0MzJmNzhhYzBhZDBiNWMyYmU0N2I5ZTMwNDVlNzIzN2IwOTZlZTQwMGY0MzBhZjYzYTZmMzA5ZGU3ODVjYWYxOTBmM2Y0YWFiYmU3OWY3MjdhNzQxNTkwZGU1NDJiZDM0M2RmNjhkMTNkYjU1YTVmOGJhYjQxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmU0ZWMwMzdjZTU2M2RhZGVlNDM1Y2ZjYjJiZjA5MGYxZjdjY2M3ZDFiNWI0ZmFiMmYxYjczODM0OGY4ZWQyZiI6IjY0ZWI4YTRiZGE5ODA0YzA5YjA0Y2ZjZDg5MDk0OTI4YzIxNDgwOTA4YjgxZWUxOWQ2YzI5YzJhMzYzMWIxYTViZGM4ZTdmOGVhNTZmN2I4YjhlMTRhNTIwODI5NjAyNjc4NWNhYzNhNmFmYTU0YmU4YWY0ZDVmYWVkY2QxMmI2NjIxYmRlMGY4ZWM1YTI2MzVmZTcyYTg5NDY4Y2E3NzA0YzczYWE0MGNkMmJhOTdhZWYwODg4NmIyN2E2OTRkMzM5YjAwZTdkMTJhMzEzMDg2NzJmODdjMDZhNzM4OGExNDMyZjg2OWViNGNjMWRhODY0MTQwYjFiMzM5MzE5MjUiOiI0N2Y1MjY0ZjdhNWI2NWI2NzE4OTJhMDVmYTU1NmY2MyI6IiI6MTIwOiI2NjA0NjJiNDA4OGY2NjI4YTYzMGYyZTQxNzBiMjEiOiI0YTMxMGUwMzUzNjFmOThiOGM1NGZiNGNlZjcwYjFhOWM5MTA1NTJlY2UwNTZjYThmZGFiNTRjNTIzMDhlYzBhZDdmZTlkZDFkYWU5MmJhZGFiNTAxMDU3N2RlNTIyMDg4NzY4ZmE2NDY2ZmJjY2NlMjJlMTRjNTFjYTc5ODZjNDA2M2QwZjA2YmY1NzhkYWIxNmE5MTg1NjcxMzE5OGE3MTM4Mzk1YzQ5Yzc4YjYzMTRiNTdhYjcyZmQwNzkwMjhjOGRjMzUxOTUyZDkwYjA0YTdjZDJiMjQ1ZGYwYzA1MjI0NDdjZGI3ZDMzMjlmZDk0MjVmZTVjYjQwYThlN2M5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTZlMWFkYTYyOGNhNzZlYjk4MzJjYzZiNWVmYzVjOWQyNjg2YmI1ODczNjZhNmRlMmQ3MzQyMzNmYTk1Mjc5ZSI6ImEwYWM3MzhlMGZiMzUyNDZiODRhNmZiZTMxOWY4MjcwMzk1MTVkZjI1ZDBjMGZjNmRlN2MwNDgyNTNhZTYzZDNjNTYxZTQ0YTEyNjcyZmZlYWUxY2I5MjU2MTBiNDgyYWE0MjJiYmVlMGUxNzg0ZmM2OWJhYWMzYTk3ZDY5ZjUxZTZkMmExNzk1N2I0NGIzMTg2MjRlYTdlYzY4MGE1NTlmNGQzZjI3NjFkMDliZWU2NmVmYjNhMzEyYWU2YjNlY2I2NzNlNzU2YjJhMGY2NTQ2NzFlODI1MDBlN2FjZTkxZjJiZTJhNzRiYzNiYzFlYzFhNGI2ODc3YTUzYzI3YzgiOiI1YTEwMGI0NTFlM2E2M2EzZTZkNGI4YTllNTljNmJjZSI6IiI6MTIwOiI4OGRmOWExZWE1NGU1YmQyZWYyNGRhNjg4MGI3OWQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2Q1YzFlOTBkNzgyMTMxNTVjNTE3NjdjNTJjMjkwYjNkNjU3ZGI4NDE0ZWUwYTc2MDRhMmVjN2I0ODEwNTY2NyI6IjhlOTg3NjkzZGEwZmI3N2I2ZDEyODJlZWJkM2EwM2UwNWQ5OTU1ZmY4MTkyOWIxYTJjNzIxNTc0ODYyYTA2N2RkZWUzOTJjN2VjZTUyY2ExNDUxZjNlNmUzMjFkNzIwODg4MmQ5N2I0MTQ5YWY2ZDc4ZDY1YzA1NGUxYmZjZGZhNjJiZDIyMDJkZTMyZGVhODM2M2Y4ZDdmMDQxODkxY2UyODE4NDBmM2NkOTA2YWI0NmNhNzQ4ZTViM2IxMTg5MGI0MDE0YmYwMjcxYzk0MjdjODc0MDk3NzgyZDFjMTNkYmI0MGU3OGZjODI3NmZjMTM0ZjNjMjk5MjNhNDNhMDEiOiI0ZTAyMmQ4ZDg2ZWZiZDM0N2U4Y2JhYjdlOTc5NzcxZiI6IiI6MTIwOiJlN2RmNzlhZjBhZWYwMTEyOTljM2I4ODJlM2E0NWIiOiIzYjIwNDczZDliNTAxOGQwODllN2Y3NGQzZmVmMjJlYzI4MDU5NDhhOWUwNzY4OTgzMTk3M2M3MDRhNmQ4ZGI0ZDA5MGFmODhkNjk2YWI4YzNhYWU5NzQwYTJiYmQ3ZjAzZTBiMThiMmI1OTFlNTljMzM1YzEwNDNhMjU3OGE4OWIxYTlmMjBmZDBkZDUzZjEyZTAwZTliZmRiMjdkZThjYWFjNzcyYmJmYzRkZTllNGEyNTVhNWQxYjA0ZTU5NjI1YTg3YjgyNzliYWJlNjEzZGVmNThkODkwZDU1MDJhYmYyZjcwOWFhYjYyNWRjYzIwYzU4NzcyODMyYzdiYmFiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmUzZGZjMDcwMDNiYjZhMmQ4MmJkNTI2M2IyODMyZjQ3ZGI0ZTczMjc5MjY2YzdhOWVhMjFmNGYxOGVkZGY4MyI6ImE5NjBkYTIyMmFmOWQ0ZGE1Nzk3ZTY5NTdkNTliMDBmNmQzODkzNTk5YzcwZTk1YzA5ODRiNTZlYjMzMjliMTkxNzAzYzI1MzJmMzI4OGIxNWViZjY1NWI5YjVlZTQ2MTc0ODRlNWFjOWMzOWJiMDY3MzFkMDNlYmU0ZmVmOTQ5NWQwMDNiMGVkNjk0Y2Y1NDBiNGRjNzU5ZDMyNjI5ZTU1NTEyNjgwYmFkZDgxMjM0YmQ3MWZmZDU1ZmNiNWU2YTg1MDMxYzFkYzMxZWUxZWQxOTg5Mzk1ODJkODMzNmM5MDU3MTdjYzg3MTAxZGNmY2Y5ZDgzM2ZhYzgxNWM4ZWEiOiI3YzBmNDlmYjU0ZjVlNjhjODRlODFhZGQwMDkyODRlNiI6IiI6MTEyOiJiMmVjMGYzZGEwMmE5ZWIzMTMyZmI0ZWJlM2I4IjoiYTQwYjZmNzBmMDU3MmZlMGJjNzBkODMzNjhlN2MxNTRmN2RiZDUwMWY1MjUwMTYzMGEyZTUyM2QxOGUyMTZlMDczNjg1MjFmNjA0MGQ4MDYyOTkzOTc3MjJiOTliY2Y3Zjg1ZDM2YjhiZWQ5MzRiNDlhYTFmYTc2ZDM4NzgzZTZhMmUzOTJkNmQwNzg2ZDQ2N2Y3YmM4OTRhNzM5ZWNmOTRmMGZlODg0YTljMzkxMTU0ZjgzMjZiZjMxZWE1MjQyYTE4YWEyNjNkMDRkYTRiNjNiMTFkZTIzYjQyZDNlMTBhMmQ1NDYwY2IzMjcwMGNkZjUwYTBkODkxNjViYTIyYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQxMDNiMWRkZmY4N2E1MDhhMjE5YzgwOGEwNGFkNDc1MDY2ODY4OGY0YzJlZTc1YjkyZDI4ZDcwYjk4YTJjOTQiOiJhMDBhMTk2MTkzZmYwNzAwNmI3ZGY1MjQ4MjRiZDA5NzFkNjNmNDQ3YTNhN2JiMWI3NWMxZTJkMTE3ODk0ODJjMTE1Y2ZmNjc3YjU0OTQ4ZDM2ZGM0ZGUzNDIwMGJjZTk3YmUwMTAxZDg4Y2VlMzliMTc3ODU3ZGQ1ZGEzY2IwZDJmOWQ2ZTExNTBmNzJhM2JkNjU1ZTBiYWNlMWQyNWE2NTdiYTlhN2Y4ZGZmMDgyYjQ0NjA0MzIwNzVhZmIyMDE3M2RhMjJiNDliZWViNmEwMzBkNzJiYTA3ODY5ZmY0Mzg5ZmMxYzI4ZDg3MDE4ZDdjMWE5ODI5YzIxOTMyMTk3IjoiNWNlYTkwNjczNzUxOGMyY2I5MDEwMTZlMzAyMDYyNzYiOiIiOjExMjoiM2EzYTc3MWRkNWYzMWM5NzdlMTU0ZWY1YzczYSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZDhjMmYwYzMzMGQ1ZGIzMTZkYWU3YTE2YjU3ZDY4MWNhMDU4ODY0ZjdiZDYwZjNkMGRlMTc0NDQyMjgzZjc3IjoiZTJhNWFkMjk1ZDM1MDMxNTM1YmYxM2MyOTkzYmQwYjI5MmU4YTk0NjViOWRhYjczOGU1OWJhMDM2NzAyNDhhMWVjYzkyYjM4YTU1YmFlMzQ3MjkxNjIyNzFjYzE1NzJjMzVmY2NjYjI3NDE3YjQ4ZGZjYmZmODUyYTdhODg0NWNjODI5YTQ0NjEwNjFiNTU4YWM4YjU5MzBhNWM2NDkxZmZiYTA0YTlkMGRmZjIyMGIzY2Q1ZTRmYzJlMGYzZGIzYjJkZGQ5MDMyOGYyY2FkODE5NTczYTc4NTYyOTk2MjBiMDJmNWVlMDI2N2YzYjU2OTgxYWZiZjFiN2Q5ZTNlMSI6IjM4N2VlOGMxZTdmMDQ3ZTk0ZDA2ZDAzMjJlZWMwMmZjIjoiIjoxMTI6IjYyMzU2ODUwZDEyYjU0ZTM5ODcyMzU3Y2ZhMDMiOiIxN2I3ZjZiZGZjMTk5M2M1NmRkOWJkNjc0Y2MyNzZhNTVhNDZmZGQ5ZmQ1ZmU0MzViOWU0YjdlYmM3MDUyYTlkYzc2YTk5ZTRlNDNhYmE3ZDQ4NjYwMzE4OWM5MGQxMGEyMWFkMzcyMmM4NmJmNWJjODU2YTBmOTMwZmY1YmNhNjViZTcwOGI3NmJiOGEyOTEwNWRhNjdmMzFlZWJjZWM4MWYyOGFhZjUyNmQyZjhmMGZlYWMzOTNhMjQ5NTlkY2Q2MTJlMmI5M2I0NDYzZjYxOTU3ZDJiMzA0NmJjZGY4NTVlMzQ2NjAxZTRjNzc2MGMwY2E2MThlZTdiZjU1MzgxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2UxOWU0MDA4NzJlZWQ3MjFkNTYwMjAyY2Q3NTdkM2ViOTk3Mjk0OTZiNmUzYTZkMzhkZDhhZmUxMDY2MDQ1YSI6IjNmYjlhYmM3YWJhNjU0ZGZiMTc0ZTg4OTljMTdkYjIyMmZmYmIzODdiNzI2MGZjNmYwMTViNTRmMWNkNzQyODRjNTE2ZTIxYWFlM2I3MjMzOGU1ZThkYzY0M2NmYWZjYTA2NzhmNWJkYTNhNzUzOWYxNjEyZGRkYjA0MzY2MDMxYjVhM2VkYTU1ZjMyMzJjMWIxNzZjYzliZTdjYzA3ZTBlYmNhNjc0YTI3MjIyNDkyOWM0MDFhMjUzMGVmYzZkNGVlZDAwODdiNTQ0YjEyZDE3MmEwMWJjODM0MGQ5YzJhMmViY2I1YWY4YjA3ZDk2MDczYTg3OWZkYTE0MGMxOTYiOiJkMmIyNzdmNzhlOThmMWZhMTZmOTc3Y2U3MmVlMjJhNyI6IiI6MTA0OiI0YzgxYzA0NDEwMWY0NThmZGZhYzljYTNiOSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMDY1MzkzNGExNmZkMzZjMjdkNTQ0ODhhMTgyOTMwMmI5MzFiZWQ2ZTI2Y2EyNjA0NzI0MmI4NWI1MGJmYjYxIjoiYzAyMzQ3ZTFhZGQ5MTc4ZDgzMGQ4YmFhYWQ5YWVlZTM3ZTk1OGJlZGYyY2M4NDZlMjU2MWZlOGM4MzQ4MWQwYThhODU5MTFlN2YxZjZlNDQ0YjI4ZjMwYmQ5NmMxM2MzOTBlODBmNjE2ZmViNjg0NGVlNmZhNDg2NTQzYTJlM2YzOGMxMzhmNDViNDQwNWUzZmIzMzFiNjQ2NDgyMTlhYWYxZDU3NGJlOTQ4Y2NmY2E2YWZjMThkMTI0ODhkYjE5YzM1YjA1NjAxZTQ3YzBhZjVkNDlhOTNhNWRkNDQyMGYzODU4NWMxZWIwMzNlMTczMzc2ZmEzOTBkM2Y5NDhkZiI6Ijk0ODg2YTE4NDVhZWJiYTVlZDZiODZmNTgwYmU0N2Y5IjoiIjoxMDQ6IjRiZTM0ZmY0MjA4NWVmNDQ0M2M4YjYwNDJkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQwZjBjY2I4OGM3Y2VjOTQ5NmYyNmE1OWRkYzY3ZGM1OWViZTQ5YWUzZGQ4OWVmM2JlMDA4NTk4NzI3ZTIxNGMiOiI3ODQ1ZTE1NWY0ZjI4MDIxMjkxZTdjODE0YTFhY2U4ZjQyYjIzOTk5MDgzMWFhODI3NThmYzFlMzc2Y2FjZTBiNmY2NjhmN2YyZjIyNGRlZGUxZWY1YjFkZjdhZTc0YjJjMDE0ODM3MDEwNDRhY2JiYjcyYTkyMTZlZWM2YjdlZjAxOTBmMTE0YjNjNzNjNjk4NWM0NjUzZjExNjAxYzc3NGQxMGI3ZjlkZjFmMWUxZjNmZjRmYWZhMjBkNjUyNWVkYjM3ZDllNWFjZmFmZTZkMzQ2OGVlMDY4ZDQwN2ZkYjU2ZGM3MThjOTg0MjU5MjY4MzEyNTM5NzhkNzI3ODU0IjoiZTVjYTg0YjkwN2FjNzYxYTVlNjhhOTA4MGRhMGE4OGEiOiIiOjEwNDoiYzhmNzhlNDEzOWRkM2VhZjJiYWVmOGFhZmIiOiIwY2MzZWRlNTBiMGQzZmI5YWRhMTEzMDBhMzIzOWEzODNjOThmOTY4YWQ2NTI2NmQ1N2ExOTViYjE4ZDNlNTY4ZmU2Y2FiYmEyNThkYTRiZWU5ZTkyM2M3YzgzOGUwNmRjODg3YTZjNDljYzE0NTNlYTZhMjI3YzZhODNlNjUxYTg3NDJlMDMxNmNhZDVlZmM5MzczOTM5M2UzNjAzNDQ2YjVjOTIwYTIwNmRiMTQzNGFkYmI4ZWJkZTRkMWE3YTg2OTljN2Y2YzYxYjJkNTdjOTcwOWI1NjQzMzg0MjNiNGY1MjZkNmMxNTc2NDdhNmM0NWRhOWRkNTIxMDYxZjA1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlMzVkY2VhMTdjYmYzOTE0OTFhZTViYTYwNTZkMGRkMTNiMzQ4MTgzNDc0ZGQ0YjYxNDc0Mjc1MWJkZWJmYzMyIjoiNTIxMzU0MmJlYjA0NDkxMGQ3ZmRlZWM4YmI4OWRlOTNmMzUwNzYwZTQ5MzI4NmVhZWYxMTQwNDg1MzgwZDQyOWY3NGE0Mjc5YzE4NDJhNWM2NGYzY2EzMzgxY2I1ZGJiMDYyMWRlNDg4MjFiZGVkNjUwY2I1OTcwM2UwY2E4OGY0ZTljM2QxNTg3NWY5ZGM4N2Q4NWJhN2U0YmFlOTk4NmVmOGMyMDNmY2U2ZjBjZTUyYzI4ZTNhOTNiZWZiNGNjNGJhM2Q5NjNkMjI4M2NkMzBmOWJmNmFiOTlkOTJmMmY0ZjNhZmYwYjAyMmYxNzUxYjg5ZDQzZWExMGJiYjI4YSI6ImZhNTQ5YjMzYjVhNDNkODVmMDEyOTI5YTQ4MTYyOTdhIjoiIjo5NjoiYWZhNjFlODQzY2VlNjE1Yzk3ZGU0MmE3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODQ0YzUwZGRjMGFjMWQ5MzY0YjIxMDAzMjg3ZDZhZTYzNjBkMTJiYmIxN2E4NTM1MTM2MjQyMGVlNGNhNTg4ZSI6IjNhM2JmNGNjYWYwNWY3YzAyZjVlMTU4ZGQyYzVjYjA4YzZhZWQ0YjFiYTQwNGE2ZDhlZjlhMDczN2ZlMmYzNTBiM2UyMjE4OGZjMzMwZWE2M2UzNWRmODJmOTk2ZTNjZjk0ZDMzMWM0MjQ2Y2RiMjViYjJjNDA5NzYyZTA1ZGRjMjFmMzM3ZWRlZTUxYjY0ZjE3NjZhZDE4ZjUyMGIzZjM0NzM1YjI0Mjc4ZDlkNjQ3YzUzM2E3NDNlMGMxZTljODFlOWRlZTk3NWNkYzQ3ZTg1ODIxMTNmZDI1MGVmNTkzNTM2MDViNjRhY2I3YzAyNWE5Nzg1NGMxYTVjMDMyMzciOiIyZjg1MTJiYjdlMjE0ZGI3NzRhMjE3YTQ2MTUxMzllMSI6IiI6OTY6ImYxZGExY2ViZTAwZDgwZWI0ZTAyNWZlYiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJhYWUxYWEwNDdhMjBlZDJkNmQ4MzM2ZDkyMzg2NGNlZTk0MDRmOTI0MDMxYWUzMjdmYmZlMmQyOTNlMWQ5M2MiOiI4ZTViNmI5ZTRlN2QwMWRlOWE5MTlkZDMzYzBjMWViOTRkY2ZlYmYyODg0N2M3NTRjNjJjMWMwMDY0MmQ5ZTk2ZjE1YjVkMjhhZDEwM2ZmNjk2OWJlNzUwYWFkZmQwMmZjMTQ2OTM1NTYyYzgzZWM0NTlhOTMyYTJmZDVmZGEzMmViODUxZTZjZmYzMzMzNWFiZDVjMjQzNGFlNGY1NTI0ZDZiYzc0YTM4MDk0Y2VkMzYwZjQ2MDZhMWExNzA5NmZmMDY2MDQ5NTJjOGNhOTRhOWE2ZGM0YTI1MWUxM2IwZTBjNTRiZDhhNmRmZjVmMzk3YTFlYjFjZjE4NmZhNTE4IjoiM2RhOWFmMzU2N2Q3MDU1M2NhM2E5NjM2ZjBiMjY0NzAiOiIiOjk2OiJlMTAyNmIzZDE1ZDI2MWIyZmI0NzYzMmUiOiI1OGM1MmVhOWYzYjE2MjUxMTE2MGVlZDFhNjhiNmY1MmIzYzRmNTgzNGFmNzI4ZGU5N2EzZDllNGJhMzM3YjI5YWFkMTI2MzYwMDNjZjViZTlmZmJlYWUwZjM4M2Y3Y2YzMmY2NDVhOGY2ZmM1Y2RjMWNkZTkxYzYyNWM2OWE5MmJjNDM0ZWQ2NzFlNTJhMDA0NGE0OGYzZmNlNTVjYWU0OWE3ZDA2NWMyYTcyNjAzYTdlZmU1OGI1YTdiMThhYzUwMGQxYTUxNDIwZTgyMDM1N2U3YTQzOWIxYzAyMTk4ZWJlM2Q0ZTYyZDU1NzNhM2FhNWY0MDkwMGEyMWUzYjQxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmM2Q2OTIwOGNiMGQyNzQ3NGU5YTIzMWNkNDZlYWM3YzE1NzRmZmY5NTBjNDhiYmQxYmEwM2ZhZDE2ZjU2M2RmIjoiMGQxZjA2ZWVmNWU4ZjJjODFkMWE3M2JiMWRjYTkzYzIyY2ZiNmU0MGU5OTQ4YmM3NWIwZDg0ODMwZmI5MjE2MzMwNDI0ZjU4MGI4OTA1MGMzZmIzZjYyMGVjYThmOWZkMDlmYjg2ZDJlOGIzYTA4NjljNjAyMmQ4YTcwNWZjMjgwZDY2ZmQxNmQzYWJhNzM5NWQ2YmU0YmVkNDQxNDVkNTFkNDJkNTYyODVmMzY3NTcyNmQ2MmQ5NGMwODEzNjRhNmQ0NDA1MTFkZTgzYTYxM2M1OThiMDMwNzhlMmVjNzY0OGM2MzAyZGVmYmJlYTY2YWFmZDMzZTFhNGIxNjg2YyI6ImI5NTdmMDU5MjFkMjFmMjE5MmY1ODc3NjhkYzEyYjRmIjoiIjo2NDoiMzIyMzc0ZmJiMTkyYWJiYyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNiMmNkZWIxN2ZhNmJjYjAwNmM3ZmM2MDg1OGExMmE0MTE4MDQ0NjQ0NThkYjM1MTk1N2U4Y2FmNDJmMWVlNmMiOiIyOTY1MDQxMzEzNTRiMmMxOTI4OTgyZjEyZDQwOGJhMjM3N2YyZDRiYmU4N2U0YzY5ZjkyYTE1YmY2MDAzOTEwYTQzYmRhNmM4OTI5ZGY2NmIzYWIxZDIwMmE1MjU4Y2FkMTk5ZjMyZjM2Y2MzMGQyZGMwNjE5OWMyYTUyZjdjY2FkYWQxZmNlNTAxMjNjNWY4NDM0ZGVjNTdjYzYwY2M3ODAyNjNkN2FhY2U4ZjU5Y2M4YTZjNTRiZGRiYWRlZDNhZGIxMmFlMmVlMGJhY2Y2YThkYTYzNWZmODViNTFhNGU4YTFiM2RjNDA0ODYzYjkwMDU5ZGU0YWQwZjE1OGRkIjoiMzFiZDdjOTcxYTZkMzMwYjU2NjU2N2FiMTk1OTA1NDUiOiIiOjY0OiJlZmM1YTFhY2Y0MzNhYWEzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjk0MTcwNzkwZmFkYWIzMjQwZGY1NjgxOTdmOWQ2ZjY4NTVhZmFlZDhkMDdlY2VlYWEyMzgwMTIxODcyNTI5ZiI6ImVkMjMxYjc4ZGIwODJmNjUyYmM2MzEwYzM5Njk5M2I1MmRlODA0YTgyNDY0ZmEzZmFjNjAyYTEyODY1MzVmNTljNjdmYzJiMWI0MjBjNzMyMWViNDJiOTcxZWRkZTI0Y2Q0Y2I5ZTc1Yzg0M2YyYWM2ZmI4ZWNkYWQ2MTJkMmU1MDQ5Y2YzOTMyN2FhN2E4ZDQzZWM4MjExNjFjMzg1ZjNmZGM5MjI4NGE3NjRhNWQxY2JhZTg4NmYwN2Y5MzAxN2Y4M2ExMDViYjdjM2NjNGZjNTFlMjc4MTUxNmEyNDcxYjY1Yzk0MGRkYWU2YjU1MGFkMzdiMzVmNTNkN2NjNjQiOiIyZjljMDY0N2E0YWY3ZjYxY2VkNDVmMjhkNDVjNDNmMSI6IiI6NjQ6ImFiNzQ4NzdhMGIyMjNlMWMiOiIxY2I1ZWQwYzEwY2VlOThmZjhlY2ZhNWExYjY1OTIzOTFiYmQ5ZjliMWRjMWZmMzUxZTBhZjIzOTIwZDU0NmI1ZTI3ZDYyYjk0ZGFhYmQzMmY3Zjk2YTI2MzJkYzlmZDdjMTliZjU1ZjNiOWI3Y2Q0OTJlNzZmNGQ2YjBmNWI0MzdjMTU1YzE0YTc1ZTY1YmZjNDEyMGJlZjE4NmRhMDVlMDZhMmZkMzY5NmYyMTAyOTJlZTQyMmRkYmNlNmU2M2Q5OWVlNzY2YjY4MzYzMTM5NDM4NzMzYzVlNTY3MTc3ZjcyZTUyZWYyZGY2YTdkZDMzZmMwMzc2ZDEyZWMzMDA1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3OTdjMDA5MWZmODc4N2ZlN2NkMDQyN2MwMjkyMjYyMGU3ZjZmYjcxYzUyZGRjYzAzYTlmMjVjODliYTMzNDkwIjoiMmQzZWZjODkwMDMxNWMzNjkxYThlM2M5ZGUzMzE5ZDRkZWFmNTM4ZmNmNDFhYTBlMjk1Yjg2MWQwYWM4NWJhZjU2ZDE0OWE2NDM3NzQ3ZGQ2OTc2ZjQ0MDE2ZTAxMmI4OGRlNTQyZmI4ZTViOWU0YWQxMGMxOWRlZWM0YjdjMGI2OWJjMWIyZTMzZDQ0YTk4MWRlZDY2MTI3ZGVhMzU0YjA3MjAxMGI4ZGMyNGI4NWVkMmZmZWVhM2I5YzBlOTMxNjE5ZGJiZjIyNjc3NjkxZjBkNTRmYzAzZWFhMTYyZTBhYjBkNzYwYWQ0MTAyMWY2NzA1N2MwZDZhYzE5Y2E4ZiI6IjY5ZDgxYzczMDA4YTY4MjdhNjkyZmE2MzZmYmFiOGJiIjoiIjozMjoiYmUyZGRhNWMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MGNlMWFmYjU1MDA0ODliOWVkYmFkOTg3ZjQwMDk1MDljODQ3YjNlNTVjZGYwYzc2NGVmMmZiMDg1ZTNkMDMzIjoiOTg0ODJiNTRlZGNlMmJhYzFjZDY0ZDQ0OTE3ZGNmMTE3ZWJmYmZlMjZhZDE3YTliMjYzNDQ3MDI4MzA0ZjFjZjVhNjk1NTljMDViNWQ4MzM0MjBmNGZkZGI2ZTMwODI3N2QwMWViNGIzMjM1ZjFjNGI0N2QzM2QzODk5MzI1YjU1ZTdiZTE5ZDQzMTg3YTViMWIxMzU0Y2UwMmE1MjliM2RmMWMxM2I0ODgzOTAyYWU5ZmM1NjUwNzlkZWU4MjVlNzA1ZjNlNTgwMzcxZTRmZDg2YzNiMGQzMWJhZTk4YWRiNTI5OTAxZjM0NmNhMDcxMjczMTQxNTJiNDM3MGVkZCI6ImUxMTllMTY2NDcxZWNmNDRiYzNhMDcwNjM5NjE5OTMxIjoiIjozMjoiYjJmNTRiM2EiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyOTI2NGE5MGYxMTRhODAwYzBmYzMyNDdiM2JkYTAwOTgxYTEyYThmODVjZjNhMTllYTRjN2ZmZGQwMDVmNGJiIjoiNTg3YzhlNTNhYjVhZThjMzFlMTYxNjBiNGE0MWQ4ODc5OGUyN2Y0YWQ2MWM1NzNjMDIzYzYyZDRkYmIzOTUyZWVmNTAyNmFkN2I0NTNmYTllMDY5NDM0N2FiOGZlNTBhNmNmMjBkYTU2NjIwMmI4MWUzMjVjZWU5YzA3YWIyZDRkNTNlZDQ1YjNlYzJkMjEzNTkzNjUxNWY4YTI0ZjJhODExNjgwN2RjZTlkZjNjNDRlZGY2NGMzMjY0NzE0NTE1MmZmMjQxZDllMDE4ZTQxMDFlNDAwYWYwNzAxOTJkYzNiNDk4YjVhMjEzZDI2NWI0Y2ZjOGM4ZDRkN2RlY2NiNSI6ImNmMjk2YWE0M2NiN2IzMjhlMDljODk3NWUwNjc0MDRlIjoiIjozMjoiNTYwMTVjMWUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODRmZjlhODc3MjgxNWI5MjlkNTVmNjA1MmMwMzU0Y2YzZTAyYmNjODMzNmZjZmU1Nzk0OTUyYjRjNDVkNWQ5NiI6ImE4N2RlNTZkNDk3MjVhMTYyNWJhZjEyZmQxNTkzMWZlMWE2NzgzZGNlNWQxZTc0NGViYTEwOGY0NWUwYzEwNWQ4MTQxZGMwMjdkMGUzM2FkN2VmYjY3NTJiNDM3Mjk3MTVlMmYzZTJjNDJlYmRhYjRkNWY3MmY4ODZiZDgyMWM0MzcyMjQ0Njk5ZGRkZWQ5OWE2M2RiZTc3NjNhNWEzYmMyMWNiZmMyNTNjZGMyNTE0ZWJhMmE0ZjU0ZTI0ZGNhN2MyMDdjYjNmNmFlODAxNTNkNzdmZTA2NDFmMzU3ZDVhMDczZGNkNDI1YzM4ZGViNzdjNDVmMjc0MjczNDU1MTYiOiI1YzA0NGE2NmU0ODhiODUzYmFmNDc5ZjdkZWUyYWFkYiI6IjAwMzA0ZTNkNDBjYmM2ZDJiZWUwNzc4NDYyODg0ZjRlYzA0N2E4Yzc0YmIzZGQ3ZTEwMGYyYjlkMGU1MjlmZDI0NzMwMDYzOTg2MTE3YjU2Y2E4NzZiMjA4YTM2OTE0MjVhYzYzYWZjM2Q1MDRjY2I0OTljNzY2MjJlYWRlMDk3MTcwMjNmY2I3ZDk1NmIwMWNlMjRhM2U1M2NiNWRhNDcyYmUzZmNmNWIyNzhiNWQ5ZTM3N2RlMjJmYWI3NWJjNzRhZmE5NjcwZjVmZTk2OTFhYTBlZDc3ZTQzZjZhYmM2N2E2MWVjNDA5ZWMzOWZkNjZhYzAzMDdiZjE5NWYzNmYiOjEyODoiNzJkZGQ5OTY2ZWRlOWI2ODRiYzk4MWNiYjIxMTMzMTMiOiJhYWRiODUzNzMwOTk0MDQyMmY2N2NhMzkzYWE2MTgyZDY3ZmU3YzUyMDkyNTM4YTE1ZTk4YTQyNTRmMGE5MDg3YzdmMTA5MDNkNWU3ODA3OGMyZTU1ZGU5MTRkZWM4YjZiMzVjYjcyMGUzZTU1OTYzYzBhYzk5MDFlNDRiODNhMGU3YzViMmQzZjAwMmFlYzBhNGEwODM1NGZlYmU0N2IyYWJiOTU1ZjJhMjExMDc2MjZlZjBiOGUxZTA5OTY1MDgxMmE2ZmVjZjM2OTA4ZmNlMmQwNzhjMjczNWNmN2MyYjk3MGEzMDllNWM2ZDZmZjI5YzI2YTA1NzIwYzU3MTA1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjVjYTM5OTFkMDE2MGIxNzI5YWUxYTYyMmRjZjRiMDNiMWY0YmE4NjE1MGJkNjZiZjM1Y2JiZWU5MjU4YWYxMCI6IjYyYWFkNTg1NGEyMzhmMDk2YmRkZTA3MTFhYzZmNTc2M2U3ZmVhMjlkYjA2OGVhOGM5MTFmMTdiYTkxZTZkNzgwNzg4M2U2ZmM1YmE3ZGIxN2FmMzNkYTJiMDA5NzMwMDhhMzQyNWU2NWNjNzg2Y2UxYjk3MzYwMDE5ZWUyY2VmNzQ1NjNkNTQ3NTJiZTQzNmI5MDU3MDViNTA3YzNkNjI2ODlkZjRlZGYwMzU2ZDI2YjY5M2ViNDNkOGEyYTkyN2E5ZjM4NjZiN2UwZTE5ZTg0YTkwNDQ3YmQ2ZjQ3ZTMxMDcwZmE3YzJhNzFlM2Y3ODIyOWVlMTlmYTQ3ZTg0OGYiOiJmODQwMjE4NGQxY2MzNmRmMDdiNjhlY2IxYWI0MjA0NyI6ImQzNzhjZmQyOTc1OGJjYmQyMWUyNmEzMjQyMzljNDJjOTkyOTQxYjNhZDY4ZDlmMmIzZDJkZWYzYTA1MWZkMTcyZWU4ODI1NjI5NzBlZjU5Nzk4ZmY4ZDllYjVmNzI0ZmYxNzYyNjE1NmY0Y2Y1ZDkzZTQxZmZlZjZlNTI1OTE5YWY2MTk0ZWE5YmJiNThjNjc1NjNkM2ZmZDkwZTVhNmUyYTNhMzNiZDFmYTNkNTVlZmY1ZGJhN2NkNDM5ZDU3MWY3ZTA4MDE0YzQ3ODBlM2QxMDkwNGVmMjJiNjYwODk3ZTc4MjU4ZGEyMGIyNjAwZTg4ZDcxYzM1ZWNiNjMyOWEiOjEyODoiOWU4YjU5YjQ5NzExMzA1NTdhYTg0ZWMzYWM3ZTQxMzMiOiI1NTZkZDMyZWRjMGFmM2M2NDE4NmZlOGMwMDBkZGFkMTUxNmNkMTQ3MjFjOTNjMjI4ZTM3OWQ0Zjg3ZTMyYzc5ZTczNDUzOWNlYzkzMDMyMjA0OGYzNGEyYjM0OTMxYzU4NWQ0NGYwOTk2NmNhZjE4N2VjNGI5MjQ0Yzk5MWE4YTVmMjYzZTlkYTFkMDhkNjA4NmU1MjUzNWFmZGIzNmM3NjYyMzA3NTIxY2JjZWI5ZWNiNDcwYTc2OTcwMjQzNzIzZmJjMTYxM2I2ZWJiY2FlMjYxYWMyZjE5MzZlNjZjZTI5ZWM3MzUwYjJlNmIyZjczYTkxMGFkZTY0NTE1NGY3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGY4NjdkMWRkOGEyODc4MjFhNTQ0NzljYWI2Zjg4NjM2ZDJhY2EzMGUxYmYwMWE1ZGZmYzczNWUxNzU5MDM1NiI6IjY1MTcyNzJjYWM4NWQ3ZjM4OTAyYmNiNGI5NmEwYzU5YzRiZGM0NmJmZWZhNmViYWNkN2YyZmIxNjI5Yjg3Y2E5MWRlMmZmZWZjNDJjZTNjZmQzNGRjYmYwMWIzZjdjYWRjZWEzZjk5ZTZhZGRmMzVkMzZjNTFmMmNlYjFmODVjMWY1NmEwNGVjOWM5ZmZmNjBjZDdmYzIzODY3NDk5MjE4M2VhM2RlNzJlZjc3ODU2MWI5MDYyMDJiN2I4M2ZlNjU2MmEwYmNhOWMxZTBhMTg2MzhlODY4NWI5OThiNDE5MmY1MTIwNDM1ODA5YWQ2ZTkzYTA0MjJkMDA3MjUyNjIiOiIzNTAxOTgyNmM1MWRkMWVmMDdmZjkxNWQ5YWM0ZWE5NiI6IjAzNzVlZDkzZjI4N2VlZmU0MTRhYjI5Njg4NDRiZDEwMTQ4ODYwYzUyOGRiZjU3MWE3N2FhNzRmOThjYzY2OWE3ZmMzMTdhZGM5ZjdjZjJkODBkZGEyOWIxOWRiNjM1YjMwYTA0NDM5OWYzNjY1YjYxNzZlZDY2OTE0NmQyOGY1YWRhMDNiM2QzMmQ1M2ZlNDY1NzVhOGFmY2QzN2YyMDM4NmQ5ZTM2ZjdlMDkwYjRmZWZhZGZhYjdmMDA4ZTAyZjFiNTAyMmMwZWViODFkMDM0NDNhMjc2ZWFlNDhjMDM4ZWQxNzM2MzE2ODdkMjQ1MGI5MTNiMDJjOTcyNDNlZGIiOjEyODoiZTQ5YmViMDgzYTliMDA4YWU5N2ExN2UzODI1NjkyZjAiOiI3MjNiZTM5YmMxM2FkYmM0OGM4NjFiMDc3NTNmNjRmYWMxYWUyOGZjODkzM2FjYmE4ODhiNjUzODcyMWRmMGE4YjkxYzA0MGEyNjUyMmZlMGRiYjczMzVkOGY2M2QyMDllODlmN2NkZTIzYWZhOWNhM2M1ODRiMzM2ZDYzYTkxZTA3ZmRkODgwOGIxNGMzMjE0Yzk2YTIwMmU2NjViYmFhYTM0MjQ4ZmYzMDM0OGYzZDc5YzlmMTZlNjZhZDZjNTkwMzMwNWFjZDg4N2E4OWI2MjQ0ZWI3YzJkOTZlMThiMTNhNjg2ZGU5MzViZjM4MjE0NDRlZTIwZjQ4Njc4YmU1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGU4ZTljZTYyOTRiN2ZiYzUzNGE5NmJkZDA2MDEyMDk3NmE2ZTA4MzE1ZDJlYTczYWM2MWQwODVjZDQ2MmE0NCI6Ijk4NTVmMTg2YjUxMzU4ZjBlMjExMWMwNmJmYWFlYWVjOWJmOTVjNTVlMjQ2Mzc1YzYxNGZhZDk4ODNkODZjODJhMjBjODY1MzhkYzVmNDJhMGVhNjk2NzdkNTlhMjBjNTExMmQxNWQyYTgzOTZmMTIwOTYyNDJhZDVkN2I4MzhkMTZlZTA2NzlmYzQwMTdhZjc1YmMxNWU4YWQyZjc3YjBlODAyYzg2NDAzMWNiZmIwYmFjZDk1YzgyOGQxZGI0YjdiYWIwNzEzNjE5ZTllNWU4ZmU2OTAyYWFjN2E5ZTZjNDJlYjA1ZjViMTU2ZjdlNjYzZWU0M2U2ZmRiNjI0ODAiOiI0ZWRjNmJlMjBmOTA0YjQ3ODllNWJlZTBhODBhM2ZjOCI6ImRiMjhjZTA3NmIzNjA4MTZjZDFlMDRiNzcyOWY4YWIwODBlMGEwN2YzNTIwNDM1MGYzYmQwNTY5NDVhYWI4NjM4YzBlODMxMWFiMDU2ZjNlNWRlYmRiZmJiMDNmYWU3MDA3NzAyNjRmYWY3M2UwZjNhMDVhNTgxMmFlZTg0YWI2MTNjODJmNGE3NmRhMjc2MjUwNjc1ZjZhNjYzZjg1ZTJjMjZkNGY0YTg2NjZhN2Y0Y2VkYWZmYzFhNzIxOGRlYzExY2E0ZTcyYjhiNWQ1YjYyMGQxZWZiZDNkM2I5NGE1YWUwZDExOGI5ODYwZGZkNTQzYjA0Yzc4ZDEzYTk0YzMiOjEyMDoiMDNjZmU2YzM2YzNmNTRiMzE4OGE2ZWYzODY2Yjg0IjoiZTEwMTQyZjg1MmEwZDY4MGM5ODNhYWQyYjQ2MDljY2JkMzVmZjYxYmIzZWI2NjQ0MmFlZTZlMDFkNGNjMWNkNzBmNDUyMTBhY2JkNTA2Mzk1ZDZjYTBjZmViYzE5NWExOTZjOTRiOTRmYzJhZmI5ZmZhM2IxNzE0NjUzZTA3ZTA0ODgwNDc0Njk1NWUyMDcwZTFlOTZiZmY1OGY5YmM1NmYzODYyYWFhNWZlMjNhNmE1N2I1ZTc2NDY2NmRkZWM5ZTNlNWE2YWYwNjNmMmMxNTA4ODkyNjg2MTlkMDEyOGIzYjU1NjJkMjcwNzBlNThlNDFhYWRkNDcxZDkyZDA3ZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg4NmM3N2I4MGY1ZjNhMjFjMDE5MzI2ODVhNTQwYjIzNjI5ZjZkNDFkNTU3NGZjNTI3MjI3ZWQwYmRmMmUyMWIiOiI1M2ExN2Q3YjY5ZjYwN2YwODY3NmQ2ZjZkZDRlOGRiMDhlMDEzMzNhODM1NWQ4Yzg3NjE2ZTg0Y2RmMTBlZjViMDQxZmM2ZGRjM2Y2YTI0NWMwZjUzNGMyYjE2NzA2NGFmODJmNDVlNDcwMmE1ZThkZWRlNTk1NzlmZGVjZjY3MTMzNTMzOTI0MzM5NTBjOWI5N2MzOGQ5ZWU1MTVhYzk3ZDA5NzBjY2YwMzk4MTk1NDU0MDA4ODU2N2EzMDk0MWJiMmNjYTA4Y2JlZDY4MDUwMGY4MzQyZmFhN2FlYmJjNmMxNDNlMmVhNTdiYTZiNGFjMWZkOTc1ZGNjNWQwODcxIjoiNWVjNTA2ZWRiMTg5MGE1YTYzYjQ2NDQ5MDQ1MGQ0MTkiOiIwNWI4ZDgyMGM5ZjQzOWQ3YWVhZTVjN2RhMGVlMjVmYjBkYWQ0N2NjM2U2ZjNhNDdlOGI5ODRlODU2MjAxNTQ2OTc1ZjgyMTQ1MzFmYzNjMmU1MDRkMmFjMTBmYTQ5Y2I5NDg1OTZiOWE4ZmFiMDFiOTVjNDlkNmYwNGQxNTg5ZjkzYjc3Yjg5OWU4MDNkZDIwZTFmMDBhNTFjMGI1OTUzZTg1YmU2MzkxMDliMTRiMTAwZTM1Y2EyNmQ4NGVhNjI5OTY0YjBkYjgyNjBkZmE1YTE1MGE2NjI2MWJmMzdlNzlkZTJlYzQ5ZTlmMWIwODJhN2M1OGVjZDNkMzliNmM5IjoxMjA6ImZmZGY1NmUxYzFhNzI1MmI4ODQyMjc4NzUzNjQ4NCI6Ijc5ZWUyN2FkZmE5Njk4YTk3ZDIxN2M1MDEwZWM4MDc4MDZmZWRhMzdkYjgxMWUzOThjM2I4MmFiZjY5OGFlY2UwODU2MWZmZmM2YzYwMWQyNjkxNzM4ZTI3OWVlYjU3ZTU4MDRlMTQwNWE5OTEzODMwZTNiYTBkN2I5NzkyMTNlZjQwZDczM2ExOTQ5N2Q0YmIxYjhiMmM2MDlhOGY5MDRlMjk3NzFmYTIzMGMzOWE0OGViYjhjMzM3NmYwN2M4MDEzZmZmNmUzNGYxMGZlNTM5ODhhNmVjODdhOTI5NmMwYTdjZmJhNzY5YWRlZmU1OTllYzY2NzEwMTI5NjU5NzMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1MjMxY2E2ZDc3MmVkZDllYTJkMjUxZTIyZDdkNDU1OTI4YzIyNDc0YjRiNDQxMzBkYWQ1N2U2NTExZmVkNmVlIjoiMjc2N2M4MDg0MTBlZTEzMjI5MTU4NWVhNzRhNDhhZDMxMDJmODgzZjA3ZDA2MGM5MWM1ZjEwYWJkMzdmZTA5OTZkMjIxMGRjNDkwMjYwMjM4YWUxNWY1ZDc0YzdiZTJhMWUxNWQ4MGRiMDkwNzljNTIwMDQ3Zjg4NDg4YTc4MDI4NTdhM2ZjM2I4MWQ4NWE5Njk0OTk5NzQzMGE4ODAxNzc4ODBhMzFkNGQwYzljOTA0NTI0NzgwNGYwNTdhNGYyNzU2ZDZlNDAzNzVhNGEzMTg3YzQzNzZkNmJmNTczY2UzMzRjZGExZWQ4OGQ4YTUwZGI0OTllN2NkYjg5ZDhkYiI6IjA0ODY5OGE0YTBmZWFiYzFmMzM2MTEyZTI3OTQ3OTVhIjoiM2E4MWI2YjBiNzIyODk5ZmY5MzFjYjczYzM5MjIyZDU1NWI4M2FlM2Y4ODgwYjk4MjU5M2NiYzFhYjhiZTkwZDFlZTMyZmQ3ZGZlNjk3Y2YyNGM5NWI3MzA5ZDgyYzNmZWQzYWE2YjNkNTc0MGNjODZhMjgxNzRhYzhmMTdkODYwZWJiMjUxYWMwZDcxNzUxYzJmZjQ3YjQ4YmZiMGIzYmViNGY1MTQ5NDQ2NGNkYTM0ZmVhZWNkZGIxZGJiZTVmYTM2YzY4MWFkYTA3ODdkNmVkNzI4YWZjNDAwOGI5NTkyOWExOTA1Nzg3OTE3YWRjOTVmMTAzNGZlZGNkODE3YSI6MTIwOiJiYTYxZWRlYjdiODk2NjE4ODg1NGZjNzkyNmFhZDIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWEzZjUxNmE3ODk4ZTA0ZTVkYTRlZmQ2YzdjNTk4OWI3NzU1MmQxOTU0NjQ2MjBjMmIzNWI5YTRmZGEyOWNjZSI6IjVjYzI4YjYxYWU5NzU1Nzc3NGJkY2Q3ZmY2NTNmNGFhMzQ5ZGY2OGQ1M2M3ZTVhNjUyNjM4ODNlZjFmZTIyNGFkNDBlODZiZmZjMmQzOGYyOGEyZWQ5YWUxZmMwODU2M2UyYTFlNDYyNDYxMDY1NDZlYjhlNjA2NGMwNmJhYTAwNDZmYTEzNzQyMTczNGI3ZjBmOTQ2NTZhNGY0NTlkOWQ5ODE3MTc1NTdkODQzNzAwZDExNmI2ZTVlMmRkM2FmNWY2N2MzNGVkZjMxYjQwYjcxZmQzYzZmMjQ3NWY5MzEwZmViNzBiY2I5NzNiZTUyZDQxZTg2NzkyYzQ5ZDU0YzAiOiI5MzEwYWY2OTc0ODkwYzBhMDM2NDIzMWY5Y2M4MTAzZCI6IjIxMDNhZjgzNTZiY2I5ZGZjMmE0ZjFkNGVkMDljYmNkOGUxOTkwZDIzODY1NjA1ZTE5Zjg3ZmViNTBiZjhkMTBkMDI1Nzc0MGU1NTU3YTkyOTdmMDQ5OWMwMWUyOWExYTUxM2NhMThlNmY0M2Y3NDA2Yzg2NWNiZTM5NTFhNzc3MTEyOGYzMTEwYzhkYTNiZDY5NjM2ODkwMTk0NDU0OTU1Mjg0MmExZjZmZDk2Y2M2ODFiNDVkYTA5OGYzYzFhY2IzZDIzN2QyMzYzMjg1ZjUyMGQwYjY3MTRiNjk4NzkwYjc2NjBjNTJhYzg0YTQyYzk3MjFhYzdlOWQzOGEyZWYiOjExMjoiOTkzZmM4ZTcxNzY1NTdlZTllYjhkZDk0NDY5MSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1OWM5MjU4NTU0MzYzZDhhODg1ZmMwZjVkMTEyZmVlMDhlYWRmYzdjZTUyYTBlN2U3M2UzZDBkNDFkOWEwMjkwIjoiNzljNDkxNDExNDAyZWE3ODc4ZTQ4MDUxOWZkOTg0ZGRlNDRiY2U2NDU5MzAzYmI3NmQ0ZWFmOTdkNGUzNDVkMWFhZmFhNjhjZWIwNTkwYjQxY2ZlZDBmNDExYjY3NWQ5MzQ0YzdlODg4Y2NjZmM5ZWI2ZmU2YjIyOWQxOThmOTRiYTUxNmVlODUwZWU3ZjA3OGE0ZjVmMzJhMjNmOTJmNzIyNjRlM2E3NmEzMWViZDA0MjU2NDMxNWFjNGYyZWMwYmI0OWJhNmQwOGNmZDJkM2E2MzA4Njg4ZTM5ZjI4ZTNlY2Q2NjljNTg4MzY4Y2VlODIxMGVkZjVkYmVmYjkyNSI6Ijc3ZTUxZTg5ZGM0N2JiY2FjNzljY2EyMWU4MWE2MWRlIjoiMjVhNmY4ODAwYTliOTE0YzBlYmY5YTQ1ZDcyMzU1YzAzZWU3MmExMzhlYjgxYjI5ODBmMzMyNjQ1Y2UxZDdhYTQ2NTk4MDU4MjE4NjZhZWUyYjI3NmUyYzAzMjc3NmI0ZWFmMzZmOTNiNWY5YTcyYjc5MWJlMjRlMzFlZmYxMDVjYTZkMDcwMGUzMDY5ZWUzMjc5ODNkZDdmZTFjNzQ2NWQ2YzZkNzc4MzdhZmY2OTA1NTE0OTk4OGU3MTk5ODQ3ZmFkOTg2MDVjMzc3ZDk5N2RiZDQwZjNlMmZmMWE0Zjk3OGE0OTM2ODRlNDAxMjQ5ZTY5NTQwZmJkZTk2MzIzYyI6MTEyOiJlZTZkODVkM2YzNzAzYjQ1YWRiNGY5YjJmMTU1IjoiNDRjYTY4ZGVlZDU0NzgwNzRhZGZkZGM5N2YwNmY0NGMwOGJmN2JjYTRkZWU4NzA3ZDYyMWZjNzM5NmZlMmVmY2RhZDBhMTY3ZDE3MDhhOWZmNTljZTRjZGRiODY5MjBiZjFkYmRmNDFiMjEwOWExODE1ZmZjNGU1OTY3ODczMTkxMTRjYWQ4YWRhYjQ2Y2Y3ZjA4MGM5ZWYyMGJjZjY3YTg0NDFiYTU1ZWFjNDQ5Zjk3OTI4MDMxOTUyNGM3NGNmMjQ3ODE4YThjNTQ3OGVhNmY2NzcwOTk2MDI2YTQzNzgxMjg1ZGQ4OWMzNjIxMjA1MGFmYzg4ZmFhNTYxMzVmYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVlOWVhZTU5NGNiNTRjODA4OTMzMGU0NDA0ZmY3OWFiYjFjMDg0MWIwYmU1MzQ3YTE0NjMzYWQxZTFmZjQ0ZmEiOiIzMmFiYzFlYjYwNzc1NTVhODVhMGE2ZmQxYzc4Y2NjY2E2YzhiMzc1ODQyZTJlYjhlZWU0NWVlNmMzOGRjMDgzNzQ0M2QxNmM2NDcyNTJlODEyNDYzOWRkMDFjODA4YWM1ZTg1N2EyNWQ5MjdjMmE3NWUyZmE4OTU1Y2FkNWJlYjVjMjA2ZmMwNTBjZDkzM2ZjNDYyMWY1NzE4OTM2ZjAxZjM5ZGQ3MDBhZTFhZWU3NTM3Y2M1OTVkZjg3ODljNWQxYTZlMWU4N2IxYzdhNjBlM2NlNWQ1N2M4MGRkNjVkZWUzODAxNzk4ZTE0ODFiMTk2M2JjYzc4Y2M2OWY4YzUwIjoiMDkxN2I0ODZkYTc1NGY0OGJiNDNlY2M4NzY2YTdjZTMiOiIyYWExZWYyZjkxYWViYTVkYTEwYjQ4YTg4MmRiZDQ1NzRkZjRlOTE1N2ExOGFiZjhjZWNkMDNlNDE3NjcxMmJhMTcxYjZlY2IwZTc0NTg0MWZmODRlMzUwNjNlNDdiMDgxMDFhZmM0NGNmZDljZWRlZGI5MTNhODJmMDBiOWQ0YmFjOTIyZjIzYTIyZjIwMDY0MjI3MDM5OTg5NjQwNWQwMGZhNTI3MTcxOGVlZmI0Y2Q1ZmU3ZTVmMzIwOTc3NjZlYmZmMzZmZjE4OThhMWM4YTFhMDFjYzE4ZTYxMjFlNDcwODA1YzM3ZmYyOThmYzY1ZWYyZmIxYjMzNmQwOWZkIjoxMTI6IjkyMjgyYjAyMmUzOTM5MjRhYjljNjViMjU4YzIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWFmMDNjMzA1NWEzNTM2MjIxMmI5YjA1OTkzMWU3YTI0ZmM3MWUzMmJjOWE1MzM0MjhjOWRjMzEwNzdmMmViYyI6ImMwZTEyY2RkODIzMzg3ODUwNWUwMjVkNTI0Mjc1MzZiZTdiNmJmMTg4N2QyZGQyMGVhYzcwOTJkYjgwYjIyNDE3YTNhNGNhODNjZGY1YmM1ZTM2MTYxYmUxZmY5YjczZjdjZWIyOTdjNmQwN2M5Y2IyYTc1MDM1YTVkYzA3OWU0ODI4M2RhZWE2MDU5NmY0YjM1NmNhMjhjMjQzZTYyOGNiZTQ1OWYwNjk3MDlmZTE5MzM5NGM5YjFhMzFkOGNjYzVhM2E0ZWJhMzAwNTZjNDE1ZTY4NTcxYTJjMzRiYjVjMzJlZmZmMTJlOWFhNDgzYzRhNjhiZTVlNzZhYmE0Y2QiOiI3ZGZjY2QwNzdiMjllNmVkNTcyMDI0NGJiNzZiZGU5ZiI6IjIxZWRkMWM2MDU2ZjUxZmQ1ZjMxNGU1YzI2NzI4MTgyZWRjZDlkZjkyODc3ZjMwNDk4OTQ5MDk4ZGNkZTgwODllZWQ4NGU3NmQ3NzRlZjg4NzRkNzcxMjU2NjlhMzAyZDI2OGI5OWRjZDY2YjM0OWQwMjcxZGRlNmY4Y2M5NGRjNGYyZGYzNzg3ODg3YjExNzNjYWQ5NGQwNjdlMzQ2ODQ2YmVmYjEwODAwNTM4NzEwMjg1NGQ5Mzg3ZDJjMGZiYzk2MzZjZGY3M2ExMGQxNDVmNGI2MTJjMjAxYjQ2ZTFmZjQ0NjVmNmE3NjU0Y2UzZGE1NzkyZGFmOWEyN2ZiMzUiOjEwNDoiNjE1NGM2Nzk5YWQ3Y2RjMmQ4OTgwMTk0M2EiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjBjNzc1OTcxYTllYWM3OTUwZWQyYmRkODViZDYwZmU5NDhiYTA0YzQxOWY2NzQzZmI2N2YzNzU1N2U0NmM2ZSI6IjhhYmIyZTY2YTRkMDgwNzQ5MTYwNTZiYjhlOTI1NTUxMzcyZjczN2YwZTFiNTk3YzVkMDhlZTEwMjk4OTc0M2EyNzNiMjlkNzI4MTAxM2Y4YjNhZWUyOTM0Mzk5Y2I0MjczNzBkNzAzNzBlZTg2ZWI0MTU4NGI2NTM2NjBjNjMzNTA2YTUzY2FlNzQ3ODI2YmI3ZDkzOTA5ZjA2OWQ1YWFjZjA1OGI3ZjJiYmRjNThlYTA4NjUzZGI4NTdiZGE4M2E5NzlmYzIyYTRmMTI2ZGZlZjdhYWM0NTE3N2Y0Y2RiODAyZmFiMGM4MTJmYjM1ZDEyYTgxNzZlYzIxMzM2ZDciOiI5YjkyYWQ3MDc5YjBkZTA5Yzk0MDkxMzg2NTc3MzM4YiI6IjFmNmE4NGIwZGY3NWJkOTlhMmE2NDg0OWU5Njg2OTU3YzZhNjA5MzJlYmU4OThkMDMzMTI4YmU5Yjc1N2U5ODkwMjI1OTI1ZDg1NmJmZGMzM2ZmNTE0YzYzMTQ1ZjM1NzczMGJiMDQzNWM2NTM0MmJjNWUwMjUyNjdiNDEwYWY2ZmQzODhhNWVjYTAxYjdlZmM4N2ZkM2IxYjc5MWRmNzkxYmQ0N2RmYWI3MzYzNTBkN2I3ZjM2OGI0MTAwZTA0YzkzOWQ1YWY5NTdiYWI5NWVkNTAyZGFjOTA0ZTk2OTg3NjY3NDYwMmEwZjA3OTBkYTJkNzM1MWI2ODZlNDY1OTAiOjEwNDoiMWQ2Y2Q0YWIzOTE0ZTEwOWYyMjY2ODg2N2YiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2I0MjZlNDQ5MzM3YTE0YmMwNjYzMjQ2YWI2MWI2NzFiNTIzYzlhMzEzMGMyMWVkNTljOTNmYTZhNWFhNWFlMyI6IjI5MWJkNWEwMGQ3MWViN2Q1NDdiN2M5NGU3MDMwYmE0YTk0NzQxOGVhZWIzNzhhM2JhY2QzMDRiMDhjNmY5MmY2OTU4ZWFiYTk2OGFjNmFhMjNlMDUxMmEyYThhZDdjMWNhMmY4ZmNmNjIzYmZjMTI4MWY1YjdiNTk4YzA4ZDJhZWJjZDQ0NzY2OGIyMzIzOGM1ZTMzOGI0YzJhYzdmOGZkMzgxNzE0YzU5NmVhM2UwYzE3YWNhNDMxN2EwODU2M2U1OGYwZjUyYThhZjA4ZTA3OGRjMjQyYWU1NGVlMGZlMzg2OWY4Yzk2ODdiMDA0YTRkZWQwYWEyN2Q4ZjRjNWQiOiJlNmVmYzk2YWNkMTA1ZmU0YTQ4ZDFhYzkzMWVlYTA5NiI6IjA5MDJjZjdhMDY4NTQ0NDEyNjM2OTcxMmFjNDc5NjJiYzJmN2EzYTU4MzdmMWI2MTkwZDlhYjFhZGI0Y2QzNWU3ZjA4OTJlZWU2MjhiOGUwN2ZjZjJiNTk4Y2ViZTFlYzA3ZDhjNDgyMzE3MmFlNjZhMTM1YmI1MWNjNzE1OTA3MDdiNjkxYTY2YjU2YWYxZmZlMzg3NzI5MTFkMTE2ODVkYTM1NTcyOGVhZGRkODM3NTJkMjFjMTE5ZDdiNTlmNGMxN2MyNDAzNjI5ZmE1NWNkNzBjZDMzMWFlZDdiMGRlNjczYzg1ZjI1YzJlOWUwMjY3ZjUzZjBiNzQ4MGM4Y2EiOjEwNDoiY2E0YmZlZWRjZDE5ZDMwMWQzZjA4Y2I3MjkiOiJiY2VmM2YyZmQxMDFiODI4ZDM2Y2IzODUzMGNmOWEwYTdhMjg1YWMxYzU1ZWUxMDY5Y2M3ODQ2NjMyN2U4NTg4NzUzNGM5OGE4ODkxZDU3OWVmZmQ4MzJjMGY3ZDZlN2U4MjJmYjFlZWE4NWEzOTMxN2E1NDc1OTFkZWY0YWVlZDY2NjA4NzI4NTlmYzlkMWRmOTcyNWQzYzQwZTljY2FhOTAwZTBmMTQyNmE1NWQyMGFjNGYyZThlMDdiZDNiYmM2ODdmOGUwNTlhYjkzZTc2MDRjOTdlNzVhYzk0YmUxYzhjMjRmNGM0ZGEwMDgwYTRkNzc5NTNmYjA5MGNiYjYyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZWFmMjA0ZmY1MDRlYThlN2ZhZGUxYTIwOTdmMmI1MjdhNDQ3NjY4NjA0NDczMjJmYTVhZDM0NmNkODEwMjE3IjoiMWM4ZTRjZjYwMTgyMTE1MTg0OTRkNDZjMmUwNjA3ZmE0MmUyMzZhYmMyOGQ1OGY4MTc1YzUzMGY4NGIxZjAzMDU3MmY1ZjZhNzRjYjU1MTdlMWZiOTk5YTYzN2QzNTJhZmNiZWFkZWE5MTIxZTY5NTY3NTg1OWI2NmI0OTlhM2EzNTFlY2JhNTIyNmU1OGViYmI1OWZlMTJlMzU5ZTRjODljZDUxYzg3MDNkNDY0M2M0OTkyMWFlNDk1ODAxYzczNjI3ZGY0MDRiOTFlODI4ZTFkMGUwM2FlMDlhMzlkZWZiNWFhNWYyYzgxMDY5NTM3NzJiYTA3MTNkMzI2MTMyOSI6ImNmZGI4MTgzMjUxZjRiNjFjNjRlNzMyNDM1OTRmZGM2IjoiYTYwZjM5NjlmZDFiMTQ3OTNkZDE0MjVhYTBiMWY3NDJhNDg2MWUwYjUwZWFmZmQxNTI1Y2QyMDliYTZkMTI1MjE3Njc2M2JiNWJlZTU5YWFhNTVmOTIzNDFjZGMwNzA1ODk5YWJhNDRjZjBlYzA1Y2JmODAyNzRlYmVmNjVjZDk1MDdmZDQyMjRiMjVjYWMxOTYxMDk2OGQ2YTM3ZTJkYWY5ZGRmMDQ2ZWYxNThlZjUxMjQwMWY4ZmQwZTRmOTU2NjJlZWJkZWUwOWRkNGE3ODk0Y2M4YzQwOWJlMDg2ZDQxMjgwYmQ3OGQ2YmMwNGMzNWE0ZThjZDNhMmU4M2JlMyI6OTY6IjllNDUwMjlmNGYxM2E0NzY3ZWUwNWNlYyI6IjVjZGM2NmI1ODdlZDVlZWJiMDRmNDJiODNhNmFiNzAxNzA5MzUxNDg4MWM1OThjY2UzMzJkNzRmYTNmYWI5Mjc0OTNhYzE1YmZmMjY4MzUyOTZlMDgwYjViNDVlZjkwN2MwNTI5ZmMyZjRlZDJmYzA5ZGIxNzllZjU5OGU1ZDE5M2VhNjBjMzAxZDNmOGQ4MjM0MDQ4MTRlM2U3NGRlMGUxZDI0MTdjOTYzZTkyNDZjMzUzMjAxYzdhNDI2NTlkNDQ3Mzc2ZTdkMDVjNTc5ZGQ0YzNhZTUxYzI0MzY0MDdiOGVmZjE2ZWMzMWY1OTJmMDRiODAxM2VmY2ZkMGYzNjciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE1NjUyYWJlMzhjZDA5Nzc3YmJhMjFkMGRiMDQ2MzdmNTczN2QzY2IzOTIyMTgxYjlmMmQwN2JmZGFmZDMyN2EiOiIxZDZjMTUzZGVjM2I0NzM4YTA5YzlmYmRmZTMxYTA5M2ViN2VhNzliOGZhNDlmODNlNWUxZjQ2ODkzNTkwZjA3NGZiMTcxZmI2NmUzMGVmODg3NzY3MDE0ZTNhMTBhM2FhMDVkYTJiZDUwZGQ3Yjc5MzZlMWQ3ZjZmMzFhZjkwMzBlMzFlNzZiZGYxNDdmNDM5NjQ2NGRiMGY2YTcyNTExYzQ4ODVjNmMyMzA1ZDMzOTkwNmUzYzc2MWEzMjQ5ZDdlYmVhM2JmNDYzZThiNzljMzcwNmU2ODQ1NzU1NTBlOTY0YjgwNDc5NzlmN2FlZDZlYTA1MDU2YzRiNTg0MGIxIjoiM2E1ZTBkMjIzYWU5ODFlZmI0MDU1NjYyNjRlM2U3NzYiOiJjZDc1NTQzN2NiNjFiNTM5OTA4ZTBjZmFhYTM2YzAxMjNmOGYxN2QxZTY1Mzk3ODNjYjYxZDRiNTZjYWMzYmMxZTk3MWMxZWE1NThiMTI2NjliMDI1Y2I2YjlhZDU1OTkxYzZlMmY4ZWU4YjBiNzkwMTc5MDE5M2UyMjZhMGZiYmZmZjdmZjBiZWU2YTU1NDY2MGI5ZjMyZTA2MWI2YzA0YmYwNDg0ODRmZjllYmQ0OTJmN2U1MGU3NDRlZGQ3MmQwMmM4ZmQzMmY4N2Y5NDIxYmYxOGE1YTIwZWJiNGQ5ZGJlMzlhMTNjMzRiNzI5NjIzMjQ3MGU4YmU1ODdiYTA5Ijo5NjoiMDFhNTczZDhlOTljODg0NTYzMzEwOTU0IjoiMTYyNDMwYzIzZjdhZGNmOTg1NzVhMmQ5MjQ5YjRiNWNlYzQyZWZhZTMzNzc2MzYwZWJmYTZhMTljOGVlZTRiZDZiMDdjYmQyNzRkZWFkYzMyOTJiN2NkYmI3ODAzZTk5ZDlmNjdjY2M1MDc3ZjNhZDU4MDhmMzM5YTA1YjMyMTNkYmZkMTEzNzc2NzNkNGY5YjQ4NmE2N2E3MmE5YWM4ZWE5YmE2OTk4NjFkY2UwZGU3ZTJmZDgzZDNiYTJhMmVjN2ZhYmYxOGI5NWEyYmJlMjE4NGZmN2JkZGQ2MzExMWI1NjBiM2FmZTdmMmM3NjgwNzYxNGJhMzZjMWIwMTFmYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTQzZjZkMDcwNDJhMTVjZDQ5ZjZmNTJhMmEzYTY3YzZjMmZmNDIwZDk1YmI5NGI5ZmUwM2IyODdjM2FiY2FmOCI6ImI2N2U1OGM4YjYwODcyNGZkMjBhYTA5N2VlNDgzYmM0YzgwNDQ5MGNjNzlkZTYzNTE3MDk0NGFmNzVjODdhZTBhZDgyNjEzNjVjMWRjODBkODUyNTUzYmNiYTE4ZGE5ZmJjM2ZiZTYxZDI3NTUwYTAzMDAzZWYwYzYwMjAyMDU0NjI2NjU1NTA5YTllMWFiNTQ2NzdlNTM3YTRlNzYxZGYwMTFkNmM2ZGQwNDFjNzk1NDQ2YjM4NDE2MWFlOWVhYjQ0MWFmZDI0ZDE5YjU4ZWI0ZmU1MTE2Y2Q3YjExYjc1MWViYmQwYTJhZGJhN2FmYzM4MGQ5ZDc3NTE3NzA5OWEiOiIzYjZmYWQyMWYwMDM0YmJhOGIxZjdhMzQ0ZWRmN2EzYyI6IjJlMDFjMDUyM2M4MjkzZmM1MTM4ODI4MWRjY2RiOGQwYTJkMjE1ZDcyOTI4OWRlYjMyN2I4MTQyZDcxNmMyYmI4NDllOTQ3NjU0NWI4MmYzODgyYmE3OTYxYjcwYzVkYTJhOTI1YmExOGI2YjEyMWU5MjE1ZDUyYWM0NzljOTEyOWM5Y2QyOGY4MTU4NGZmODQ1MDlkNWY5ZGNiN2VhYWU2NjkxMWIzMDNjYzM4OGVmYTUwMjBhYzI2YTljZDllYTk1M2Y2MTk5MmEzMDZlYjRiMzViY2Q4NDQ3ZWVhNjNjZWYzN2JiMGM5NWMxZTM3ODExMTE1Y2YyNmM1M2U4YzUiOjk2OiI0MzQ3MGJjM2Q3YzU3M2NiM2E1MjMwZjUiOiJlMTcyMGQ0NTFmYTdhYjlkYjQ5ODg1NjcxODcyNDRiMTViNmZlNzk1ZGQ0ZmVmNTc5ZmI3MmU0MWIyMWFhYTQzNmQyZTVkODczNWE0YWJkMjMyYTNmYjkxODhjNzVjMjQ3ZjYwMzRjZGViYjA3ZmQ3ZjI2MGY4ZTU0ZWZlZmE0ZjI5ODFjYWZhNTEwZGQ1YzQ4MmEyNzc1M2E3YzAxNWIzY2FlMWMxOGM3Yzk5YTZkNmRhYTQ3ODFiODBmMThiYmU2NjIwYmZjMTUxOGEzMjUzMTAxN2ExYTUyYWFkYjk2YTc3OTQ4ODdjMTFhZDZiZGQ2ODE4N2JhMTRmNzJhNGI1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxZjBmMDE5MWUxOGRiMDdjMDUwMWRiYWI0ZWQ5NTJjNTYwM2E0Y2QyNDlkMmQ4ZDE3ZTYyZTEwYjk2YWU3MTNmIjoiYWFkNDBlNzg2NmMyNmU0ODZiNmY2ZThlYjE0YTEzMGQ1Zjg4ODkxYmYwZDA5YWE4ZmUzMmY0NDdhYjhkZWE3YmVlNWQzZWRhNDQ5OWMwMTAzYTAxMDQ4M2YyYjY0ZmRmMTE1NTQ5OWQzMWRlY2Y1MjhjNzdkZDc2Mjc4ODRmOTk5NWMyMTNjZjc0MDIxNDNkYmI3NTYxZDY5Yzg2ODg2NzM0MjYwYWM5NGZmYWM3ZWIzMzU5OGQyNTcxNDIyOGVmNDNmNzQ0ZWMxYWYyYTg3ZTc4OWYxZTVkNmZmZjBmYmQ1MDgyZGNjNDkzMjhmMTk0ZThmOGExNGE1YmZjOTYyZCI6ImFiOGJlMTZiNGRiODA5YzgxYmU0Njg0YjcyNmMwNWFiIjoiYTVhNmU4MjgzNTJhNDRiZDQzOGFkNThkZTgwMDExYmUwNDA4ZDQxMGY2ZTc2MmUzMTQ1ZjhiMjY0YTcwYzU5MzQ3NmI0MWJiODc4NzU3NDZjOTdkZTdkNWZhYjEyMGJkMmY3MTZiMzdjMzQzNjA4ZWU0OGQxOTdhNDZjNzU0NmZhZmNkYmUzZTc2ODhiN2U5ZDJmNWI2MzE5YzkxZDM4ODFkODA0NTQ2YjVmM2RiZTQ4MDk5Njk2OGRkMDQ2ZjQwNmMxMWYwZGM2NzFiZTA0MjFjYmM4YjRlYTY4MTFkZDUwNDI4MTUxOGJiOTYxNDhkZGRmOWYwZGM0ZTJlMjQzNiI6NjQ6ImQ4YmQ3ZDg3NzM4OTM1MTkiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNmNmN2Q4MzEzN2Y1N2YyMzEwZWU2YmYzMWU4ODgzOTUyYmIwN2NjZGMxMmY1MTYyMzNlZDUzM2VhOTY3ZTVkIjoiODNhYjIwNjk4ZmQ3NTczZmQxMjE5NzZhNzJiNDVhN2YwM2FhZDg0NzAyZmM4YWM3M2Q2OTI2ZWFiZDhhNTQ2ODk1YWVmZmU0YmE4MWQxMTc1MDdlMmNkMzdkNThlZWZmNzFjYzNhZmE4YTQ0NDliZTg1ZjIyOGVhNTJmNmRjNjM5NWJiNDNjMWM5Zjc5NTM0MzcyMDg0MTY4MmQ5YjJmMDA2MDJlYWZhNGQ0Y2JlMjk3YmZjNjI0NjdlNTI2YjlkODIzY2M4ZWVlY2Q5ZTVmOGRiYzJmNjU2MTA2NjNjNmYzN2IzZDg5NjY1MWIyNTRiZDYwMjE1NjI5YWRlM2IyYSI6ImYxN2UzN2U3M2EyOGM2ODIzNjZiZmU2MTljYzY3M2JiIjoiMGY0ZGQyMDFiMThlMjAyMzBiNjIzM2UwZDdhZGQ2Zjk2NTM3ZGQ0ZTgyZDNkMDcwNGMwNDdmYWI0MWFmNWZhZjZiZDUyYmQxNGZhOWEwNzJmODFkOTJhMmNlMDQzNTJmMGI2NmYwODhjNjcxMDJkMmQxMjdhOTg1MGIwOWZmNjA4N2YxOTRhNmU4Y2NhYmEyNDA5MWZlYjMwM2VlYmI2NWYxMjAzYjJkMjJhZjQ0ZTdiZTRkZTcxZjAzZTZmNmNiYWRmMjhlMTVhZjU4ZjU4ZWI2MmU1YmRkZmFlMDZkZjc3M2NjM2YwOTQyNTIwZGUyMDA3OGRkYTc1MmUzMjcwZiI6NjQ6Ijc0MTEwNDcxY2NkNzU5MTIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMGM4NWFjNmIzODg3NjM5ODM4ZGRjYTk0YzVjNjlmMzgxMTVhYTAwMTIyMzIyYzgxMTQ2NDJkMTJlYTFiOGZlIjoiMDIxMGZjZTQxOGU3ZTIxOTljYjhmODk5YzgxYjliZTc0YTYzMGQwMDI2OTc1NWY4ODJmYzRkYjI3NjMyZTk5Njg1Y2MxMmM0MjZhNzUwMzQ3MzY0NmRmMTI4OGQwZWRlMjg0MDhiZTlhZGQ1NzEzNjI4NzAwZjhlMmIyZTI3ZDc1MjI1MjBlZDAwYWM0NzIzOTA4NDY1MWViOTllN2QwM2UxNTIwYWFlMTM3Yjc2OGYzMTQ0MjMyYzE2YjcyMTU4ZmQ1ZGE0YTI2YTI1MjViOWIyNzc5MWJmMDZkMWViMmU2NzFjNTRkYWY2NGZkZGMxNDIwYmMyYTMwYTMyNGJhNSI6IjE0ZjY4ZTUzM2VjZjAyYmNlYjlhNTA0ZDQ1MmU3OGM3IjoiNzk2YTQ2MjM2ZmQwZmY2NTcyYjFkNjI1N2M4NzQwMzhmODcwYWE3MWNiYjA2YjM5MDQ2ZDBmYjY0ODlkNmFlODYyMmI1MTU0MjkyYWU1YzRlMWQ1ZmY3MDZkYWVkYjJlODEyNTMzYWUzYTYzNWQzMzlhN2ZiZTUzNzgwZTNlODIwNDkyNGE1ZGViNGI2ODU2NjE4ZjRjNzQ2NWQxMjVhM2VkZmZlMWFiOGY4OGIzMWQ0OTUzNzc5MWMwZjMxNzFmMDhkYmI1ZWQxZDllZDg2M2RhZmJhZTRlY2I0NjgyNGE0OTIyODYyZmUwOTU0ZWUyY2FhMDlhYjBlNzdlZDhmYyI6NjQ6IjZmYjBiNWM4M2I1MjEyYmYiOiI1ZTZjMzYyZjc1ODc5MzZiY2IzMDY2NzM3MTNhNmYxZmIwODA3ODNhMjBlOWJiYjkwNjQ1Njk3M2U1MjljZmEwMjk4MjA2MTg0NTA5YzMwZTFkMzc5M2VhYWE1ZDU2NGVkZDQ0ODhmMDQzMTE4MjFlYjY1MmUwYTFmNGFkYWY2OTcxNTA1Y2EwMTQ3ODhjOGNlMDg1Y2ViMzUyM2Q3MDI4NGVkMmJiMGFlYmViYTdhZjgzZDQ4NGRmNjljODdmNTVhOTNiM2Q4N2JhYTQzYmQzMDFjNGU1NWViOGM0NWRjZjNlNDYxMjUzNWVhMWJkNWZkYjRjM2I5MDU2ZDBjYWU5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlNjFiMWE2YjQwZTJhYjEyNDVmZjY1ZGNmYjk5NDgzMThhYzRmZTU1ZTllZDYwMGNlYzMwMWRhZTMyYWUwZTkzIjoiOGQ2N2ZhOWZjZjA3OGU0MjFjYjYzYWJlYjI1ZGJhNzM5YWIwZTA5YTA5MWRkMDZiMGM2MTZlMWU4ODhmMzUwZWRiMmQ3M2E0MmY1N2YxMTUyNjZlYTIwYzdmOGZjMTQzYWM3NDY2NDk2MTJkZjA2YTVlMjliNGExNTkzNGRjMDQ5YmUxYWI0OWQwMThhYjg2YzRmMzdkOGMzZDljNzE0ZjAzODAyOWU3NGQ4ZWUzZGJlNjFkODFhZGM2MzcxMmVhNDEzYjM3Zjc2MDRkYTEyMTA3YWExNjk1ZDliMDk4MWU1YTkyY2RmYWE1ZmJkYTBlMzFiMjJjNmZkNmYzYjQ5OSI6ImMzNTYyNDRiMzAzNGQyODhlNGQ0ZmU5MDFiOGUyN2MxIjoiYmRjZmViMDlkNWI5N2JhYjA1YTdhY2Q5ODQ5ZTdkZTJjNWJlYjdhNGRjNTczYzdlMWMxZDBjMDQwOTI0NWE2NTg0MDIzMTE0ZmRjYzY0MTNjODAwY2ExNjg0N2JkZTc1MGIyN2M0ZDU5MDI0OGUyY2U0NTdjMTliMGY2MTRmNmFmZjRkNzhkNGExOWIzMjUxNTMxZTVlODUyZmJiMDVkMDk0MTJjYzFmZjg5ODhkMTk1NWNhNmY1ZmUyZDgyMGYyMGE3NjQyZTNhZTY5ZTgxMjJiMDZiYTA5MThlODA2NDAwYjliNjE1ZTFhYmU2ZmRkNGY1NmE3ZDAyZDY0OTA4MyI6MzI6Ijg2YWNjMDJmIjoiN2M3MzE4MmVjYTk3ZDk2MTdhYmI0NzhhNmNlNjJlMzQ5MWE3ZTk5NTE5ODFjODljMzA3MWIxNjFhNGM4MDQ0MDYxNGMzZjI0ZDAxNTUwNzNlMjhkY2NjZWU5NmJjODMwM2RhYjQ5MDFlZjc3MzE4ZGY1MjJkMTZkOWRhNDc3NzBlZjAyMjM5NWQ2MTA0Y2Q2MjNkOTNkNjcwOTBhMjc1MDdmYzhjYTA0MTU3ZTc5MzllNjM5YzYyY2QwZTdkOGE0NzIzMTQ4MzNjMGVhYTliYTJmZDU0YTI1YjAyODU0ZTNiZmYyNWNjY2Q2Mzg4ODVjMDgyMzc0YWU1MjBlZDM5MiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGY1YTAyZTk4NDNkMjhjOGMyMjZlZDcwZDQ0YjhmY2VkOGZiNzU3YWI2ZWNlNGQ0ZjA2ZTNjM2NlYzc5ZTQ0ZiI6IjNlYzEzOTUwZDMyOWYyNDA3NDcxNGM1ODNiZGMzNTY4NmI4MTFmNzc1Yjc2YjBhOGZjZmE2NmZjNTY0MjZjOWQwMjJmOGFiMGFmMzhmOGQyZjcxYTA2ODU0ODMzMGNkYmU4OTE2NzAxODFlZDc0OTFiZjQwYzczOWVmNGRkOTM2ODlmZDM1OTI5YjIyNTA4OWQyYjE1MWY4M2Q5YjNjZDc2NzMwMDYxMTE0NDU4Njc2NzM1NGMwNDkxMTEyYzIwNTQwOWYzMTY4MDkyZDI3ZjliOWY0MzNhZmI3OTgyMGEyODExOTg0ZDQ4ZTcwYzFmYjJhMTNiYmIzZGRiYzUzZmIiOiIwOTllNWQ5YWFlODlmYjYzOTFhMThhZGY4NDRhNzU4ZSI6ImFkOTNlODY2MmMzMTk2ZTQ4Y2ZkYjVhYTNiYzkyM2NkMjA0MTUxYWE5ODBjYmVjNzhmMGQ1OTJiNzAxZjc3OWMxYzQ5ZjllODY4NmQ3ZTIzODVhNDE0NmIyMWE2NDNhNTljMThjOGI4MjIxNGY0MjU2MGJjZDY4NmZhZDdjN2M4ZThjMTk0NGNlNmIyMGVjOTUzN2RkMTRiNmNmMjU5Mjc0MGNhMTEyZjRjZDU4MjI1MGQ2OWYyNDBkM2U5NTcwNDBlMWY3ZTE5YzYwYjNjOGYyYmQwMGNiNjY2NjA0YzM4OTQ2ZWI5YjJmMTczMzZkMjgxYjQ3OTRmNzFlNTM4YTIiOjMyOiIzMDI5ODg4NSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFjZGIyMThlMGJkMGUwMjE1NmU1YjQ4MTgyOTkwZjc3ODg4OTc5M2VmNjAxOGE4OTI4ZTYxMTY0YWMwNDdjOGUiOiI0ZDAzOTYxOGEwZWI2NDAzMjlmOTBmZTk3ZGUxOGJjOTI4ZmMzZmM3YTBkYjQyYzk3Nzc0YmVjMmU4ODJlODcyZmMxMDk3YzgzMTlmNzgzN2ExNjUxNmJmMzg3YjFiYWUzMjFjNTY1ZThmYzFjYjg0ODBmMDUxMTU4ZTQ2ODVmMGFkYmEzMTBkMmM2MjUzYmMxMzAwNDAzY2JkM2Y3ZGRjYjI3OTZhNjlmOGJmOWU3M2Q0N2FhZGE5YTAyNjczYzFhM2Q1ZWNkYWM4MzhhYmYyMmIzODU5MDYyMzY1MjlhMWI3ZGQ1YjhhZjI2MTFhMDRjZjRmODNiMTViYTQxY2ZjIjoiZDJmZmJiMTc2Zjg2YmVlOTU4ZTA4ZTVjN2M2MzU3YzciOiJiYzU4MGM0MjIzZjM0ZTRmODY3ZDk3ZmViZjliMDM2MjlkMWMwMGM3M2RmOTQ0MzY4NTJjYWZkMTQwOGM5NDVjNTQ3NGM1NTRjYjBmYWYyYmFlMzVkMzE2MGM4MjNkMzM5YTY0ZWJkNjA3Y2Y3NjVmYTkxZjQxNmZjNmRiMDQyYmMyYmQ3NDQ1YzEyOWI0YTBlMDRiNmY5MmE3YjdiNjY5ZWI3MGJlOWY5YjI1NjllNzc0ZGI3Y2I3YWU4Mzk0M2UzYTEyZDI5MjIxMzU2ZTA4ZTViZjFiMDllNjVmMTkzZDAwZDlmZTg5ZjgyYjg0YjNiOGIwNjJlNjQ5MTYzZGM4IjozMjoiMTk5N2RhYTkiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGMxYTE0NWMxOGJkYmNhNzYwZjM1ZWVhMGQ0YTU5OTJkZTA0YTA2MTU5NjRlYzhiNDE5YzgyODhhYjE0NzBmMCI6IiI6IjdmODM2ODI1NDk1NWUxYjZkNTViNWM2NDQ1OGYzZTY2IjoiIjoxMjg6IjhkZGFhMmMzZWQwOWQ1MzczMTgzNGZhOTMyZDlkM2FmIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdiNDc2NmQzYTY2MTVlZTU4YjM5MGRhYTIyOGFlN2E1NDFjNDZjZTgwYTFlZmUyMjdjYzQzY2I3NzdkZjMyMzIiOiIiOiIyNzQzNjdmMzFlYzE2NjAxZmU4N2E4ZTM1YjdhMjJkZCI6IiI6MTI4OiI1ZjNhNzU3YjU5NmUwNmU5YjI0NmVkOWJhYzkzOTdmOSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMTliMDQwNTViZjZlN2ZmODJlODlkYWVmNjZjOWQ4MzE5YWIyNWY5MTk3ZTU1OTQ0NGM1NzI5YjkyYzRmMzM4IjoiIjoiNzk2ZWZhZmY0ZjE3MmJlZjc4NDUzZDM2YTIzN2NkMzYiOiIiOjEyODoiM2I0NDVmMzhiZjRkYjk0ZjFhOWVjNzcxMTczYTI5ZTgiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2NhNjhlMzAwNTM0YTkwYTdhODdjYTk5MDZlNGFjNjE0YTZhYTUxZjc2OWI2ZTYxMjk3NTNhNGY4M2QxMDMxNyI6IiI6IjQ1ZTZiMjNmOGIzZmVlZmQ0YjBlYTA2ODgwYjJjMzI0IjoiIjoxMjA6IjZjMGExYzljMmNmNWE0MDQwN2JmYTFkNTk1ODYxMiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMmI3Y2Q2OTMyMzliYmM5MzU5OWQzZDEyYzk4NzZlNzMwM2IyMjdiOGFlNzE4ZTJjNjJlNjg5ZTFmZDYyOTAzIjoiIjoiNTQ4YzljOGZjYzE2NDE2YTlkMmIzNWMyOWYwZGFjYjMiOiIiOjEyMDoiM2FhMjFmMjIxMjY2ZTc3NzNlZWJhNDQ0MGQxZDAxIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTU2Yjg1NGJlYjBjMjc2YTVlNzI0ZjVkYTcyZjBkMWNhNGFlN2NiZDVmOTNhMjI1N2Q5NWMyZTViZmQ3OGFkNCI6IiI6ImE1MTI5ZTI1MzBmNDdiY2FkNDJmYzU3NzRlZTA5ZmU3IjoiIjoxMjA6IjZiYjA5ZWQxODM1MjdjNWQ1ZWQ0NmY1NjhhZjM1ZiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkODI0MzMwYzYwMTQxMjY0ZTFmNzA5ZDYzMjI3YTlhNzMxYmNjNDJiNGFkZWMxZDhmMDE2MWIxMGI0ZmRiMmFiIjoiIjoiYzVhZmFhNDUzMTJjNjRhYjNjM2NmOWQ2YzRlMGNjNDciOiIiOjExMjoiNTU5NTJhMDFlZWUyOWQ4YTE3MzRiYmRmM2Y4ZiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI1NTE3NTg5OTQ4ZDhhZWE3NzhkZjZmZDY2YzE3YTE3MGQzMjdmNjllNTA0ZjBhNGJkNTA0YzQyODZhOWY1NzgiOiIiOiI2NDA0YjExMWM2Mjg5ZWVmYTBkODhlZDYxMTdiYjczMCI6IiI6MTEyOiI2MzdmODJlNTkyODMxNTMxYThlODc3YWRmYzJjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY2MTM3YjJiY2JkMzI3ZmJjYzdmMzEzZWZhMTBmNmZmYWVkMzBlNDc4MmUyMjJlMTIyNWM4NzEwM2ZjYWU5MDUiOiIiOiIzYjg3YjA4MzM3YTgyMjcyYjE5MmJkMDY3ZTMyNDVlYyI6IiI6MTEyOiIxZjJkZGEzNzJmMjBmZmRkZDlkZDQ4MTBlMDVmIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjVlNzBkMWI3OGU5MzFhYmY0NGJiYTNmOTM3ZGJjMzQ0ODU4NTE2YThhOGFmZTYwNTgxOGRjNjdkMGMzZTRjNCI6IiI6IjU4ZTcwMDk1YzZmM2EwY2RhMmNkYzc3NzVlMmYzODNkIjoiIjoxMDQ6IjE3NjM1NzNmN2RhYjhiNDZiYzE3N2U2MTQ3IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTBkZTBjMDQ3ZDFkZDAxZDUyMWYyZGVkZWM3ZWI4MWJjMGFjZTdhNWE2OTNhNzg2OWVhYWZiYjZlNzI1YWQ3YiI6IiI6ImQ1NjVjOWNkZmI1ZDBhMjVjNDA4M2I1MTcyOTYyNmJkIjoiIjoxMDQ6Ijc4NzM4ZDNlOWY1ZTAwYjQ5NjM1YWM5YTJkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM0M2U4ZGJlYWZiMDc5NjkyNDgzYTlmY2JhYjk2NGI3NmZjY2NhNmNhOTllMTM4OGExYWE5YmY3OGRmZDJmMDIiOiIiOiJmMmJkNGZlMGQzMGMwZThkNDI5Y2FjOTBjOGE3YjFjOCI6IiI6MTA0OiJlYTdiNTI0OTA5NDMzODBjY2M5MDJjYTVhZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjEzNTQwOTE5ZmRiOTU1NTllMzdiNTM1YTQyN2VmZWVlMzM0MzA5ZTM0YzQ2MDg0NTllMjA0ZDkzMWI4MDg3ZTciOiIiOiJjOTkzYzE4MDJkZjBmMDc1Y2U5Mjk2M2ViOWJmZjliZCI6IiI6OTY6ImVkZmFiMDEzMjEzNTkxYmViNTNlNjQxOSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJhN2IyZTA3YzE0OGZmMGY2MjdhZTI4YzI0MWEzOTU4NzZiYmVkMGMyMGYzZmQ2MzczMzBlOTg2ZGIwMjU3MTQiOiIiOiI4ZjdlMTYyMWMyMjI3ODM5ZGE0ZWE2MDU0ODI5MGZmYSI6IiI6OTY6ImY5ZGE2MmY1OWMwODAxNjBlYzMwYjQzZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIzZTc4MzdhNzViMzhhZTZkNDI5OWExYWU0YWYzYzI0NjBkZmNhNTU4NzA4ZGUwODc0ZDZiMWE1Njg5YjgzNjAiOiIiOiIwNWQzNjNiMjQ1MmJlZmY0YjQ3YWZiMDUyYWMzYzk3MyI6IiI6OTY6IjZiNGExNmQxZWExYzIxYjIyYmRjYjIzNSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjlkZjNjY2Q5NWY3NTcwZjZlY2Y1ZTUzMjlkY2I3OWJjZDQ2Y2JjZjA4M2ZlMDNhYThmNWJkMGY2NDVjNmE2MDciOiIiOiI3NzRmNGU3MGE3NTc3YjUxMDFjMGMzZDAxOTY1NWQzZSI6IiI6NjQ6Ijk4ZmY4OWE4ZTI4YzAzZmQiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFjNzEyM2UyZThkMzc3NGM4ZjFiZGJiMjI3MmYxOTEyOWUwNGYyOWI0MzUxYWUxOWMzYjlkMjRlNmVhMWZlODciOiIiOiI5OWYyNWNlYmQ2Y2ZhN2Y0MTM5MGI0MmRmNmE2NWY0OCI6IiI6NjQ6IjhlMTRhMGE0ODUzYTE1NmEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0OTAwOTAzMjNlOTI1NzUxN2UyNDUzNDY5Y2FhMzQxNDA0NWNhY2I0ZDA1ZDVjZWJjNmI5YzA2ZmE2ZDE5MjkxIjoiIjoiYzFiZWZmMWZmNmNkZDYyMzM5YWEyMTE0OWM0ZGExZTYiOiIiOjY0OiJmOTk4ZDdjMDhkNjA5YjNhIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzNjBlNDhkZDM4ZDllN2Y1YmYyOWEyOTk0YWI1YjNjOWM3MDI0NzEwMmQ5NDA0OWFlNzkxODUwODA3YTRjODQ1IjoiIjoiODgxMjZjMzUwZGZjMDc5YzU2OTIxMGVlNDRhMGUzMWEiOiIiOjMyOiJmMmViZTVlNCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE1NjJiMzJlNGRkODQzZWRhZjQ0NzRiNjJjYWRkOGY0NmQ1MDQ2MWY1YjIyYzlmMWE4ZWFlNzM2N2QzNWQ3MWIiOiIiOiJhZjI5ZmRiOTZmNzI2Yzc2Zjc2YzQ3M2M4NzNiOWUwOCI6IiI6MzI6IjEzZmQ2ZGZkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDUxNjBkMGM5OGZmY2IxYzI2YWFkNzU1ZjY3NTg5MDAwZTJiYjI1ZmE5NDBlNmIxZDgxZDc4MGY0MjEzNTNkOSI6IiI6IjE1NTI2MDQ3NjM0NTNiNDhhNTdjZWExYWVkODExM2Y0IjoiIjozMjoiNjYwYzUxNzUiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjM2EzZWEzYTA5N2MwYzJiM2E0Y2I3ODQ2MmQ4N2ZkNWE4ZjM0ODY4N2M0MTUwZTlkMzM1NGIzODhhYjEzZDE3IjoiIjoiZjc3OTQ1OTc5MjQxZmIzYTQ1NGQ4ZTNkYTE5M2UxNjkiOiJhNjliYWMzMTI0MWEyYzA3ZDNmN2UzMzFiNzdmNjYyYjFlNjdjY2I4MWMwN2Y1MjU3OGIwMWY1Nzg1ZGU5NDM3ZjAyZWI3NjI3Y2E3YjlhZjA5YzFjYjQyOGZlOTNkNmRlYjMxZjRkNmRkMmYwNzI5Zjg3NDgwYmRlYjkyZDk4NWRlMWFhYWQ0YmNlYmM2ZmJhZDgzYmVkZTlhNWRkMWNhNmExNWJmNWQ4YTk2ZDRlZGI1YmVlMWY3ZDE5NWU5YjJlNWZiMjIyMWE1OTZkNjlmMjU3YzE4YTE0M2VkYTg3MGUyMmQzZjJlZDIwYzliM2IwZDhjOGEyMjljNDYyZmZmIjoxMjg6IjZiNGIxYTg0ZjQ5YmVmZTM4OTdkNTljZTg1NTk4YTlmIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTE2MjYzMjdkOTg3MzQyY2JhNWM4YzYzYjc1YjRlZDY1NDYzYTJiOWM4MzFmNGY5ZjgwMzI1ZmE4NjdkMWQ3MyI6IiI6IjRlMjU4MDBkZWFiN2VjZWMyYTIzMTFmOGZiNDRlYjdkIjoiZWJhZmZkNTU4ZjI0ZGFlMDMxMTdjNjlhYzRiMmI0YWFlYWZmZTdlMGU3NTk5ZWFiYTY3OGJmY2UyM2E5OTE0ZGM5ZjgwYjY5ZjRhMWM4MzdhNTU0NGNiYTA4MDY0YThmOTI0MDY0Y2JhNGQ3ODM2MjM2MDBkOGI2MTgzN2EwOGI0ZTBkNGViOTIxOGMyOWJjM2VkYjhkZDBlNzhjMTUzNGFiNTIzMzFmOTQ5YjA5YjI1ZmJmNzNiZWNlNzA1NDE3OTgxN2JjMTViNGU4NjljNWRmMWFmNTY5YzJiMTljYjZkMDYwODU1YmU5YTE1ZjJjZjQ5N2MxNjhjNGU2ODNmMiI6MTI4OiI4ZmFhMGZmYjkxMzExYTFhMjgyN2I4NmZlYzAxNzg4ZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MzhkYTY0YjgzNzI3NWIwYzgwYzQ0MmJkZjIzMDFhYTc1ZTM4N2ZlNjVhNzc1ZDEwYThlYzg0MGY2MmZmNDI5IjoiIjoiZGVjNmFkZWI2MDIxNmNiYjhhNmMzYWZiYTQ5ZmEyMDEiOiI0YWMxNDRiZDk1ZjQwNTY0OTQ0NGYwMWFiNjdlZjNlNGMwYTU0ZmRiZDkzM2I2YmEwMDUxOGM3OWRiNDVjMjJjOTAwMzBjNDVhYWRjZmRiNTNlYzgxOTliZTBjYmIyMmRiYjlhYjkzOGE4NzFmNGIzYjBjOThlZDMyNTkwYTA1MWFiYjk0NmM0MjcyNmIzZTk3MDFmMTgzYjIwOTI5ODVlMzQ1Nzk0M2E2MzUwZmJjYWVjZTJlNmIxMTFiMTc5ZWEzZmQxMGFjMDgwYTU3N2ExNDgxNzg1MTExZDVmMjk0YmMyODUxOWM0NzBmZjk0MzkyYTUxYTJjNDBhNDJkOGI1IjoxMjg6IjIyMTFjYTkxYTgwOWFkYjhjZjU1ZjAwMTc0NWMwNTYzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUyNDM2NDg0ZWExZjQ1NGQ2NDUxYWQ4ZGJkMTU3NGIyMDhkN2EzYWI0ZmEzNDg2OTI5OWI4NWMyNDM0OGI0M2QiOiIiOiI5NzA0MGQyZWMwOTRmZTFjNjRmYTM1YjM1Yjc0NTFhNyI6ImJjMTk4Njc3NTEzY2UwZTY2Njk3ZGZlNTJiMjIzMTVmYTVkOGY5MjA0MmYzNGNjOWYzNzNhMDFmOTQ2MDdkZjFhNTk5MTMyZjYwYWYwMTBlZDliNWU1MjE2MmRkN2IxNjI5MTJiNjhiMTE3MDBlMDhmNWZkYWZkODRkMTBmNzYwZmMwNWVjOTdjMDViODNlNTUxNTUxOTRmMzk5NTk0MDE1YjkwYTE5YzA0ZmI5OTJlMjI4OTQwZmUxYjU0YmE1OWM0YmI4MzE4YjMzY2MwZGYxY2IxZDcxYzM4OTQ3M2RmYjNlZWZhYmZlMjY5Y2E5NWRiNTlhN2JjMDIwMWMyNTMiOjEyMDoiMmUwODBiYTE2MDExZTIyYTc3OWRhMTkyMjM0NWMyIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2ZiM2ZjNzJlYjhhM2FhNWIxMDJmOTAwMzlmODUyY2MzZmQ2NGY0NjkxNWY1ZTQ5ZjFkOWUwMmZlOWNjMTNiMSI6IiI6ImY2MTIwZmVhMzEzMzYyNTI0OTE3YzUzZDkwYmFmYjRmIjoiNjBjMmJlN2ZiZDE1ZmFmODk1ZmQxOWE5Y2U3NzVmZTJiMTgzYjQ1Y2ZmYWZlNGZjYmY1MGQ0MjFiZWE5NzM0N2U0MWE5NDE4Y2ZhMTI5YjJkZGE2M2I4ODlhNzAwNjMwMTAyMTVkYmUzOGMzN2ZlYWUxOGJjMzFiMzRmMzFiNzI2ZjIyMTc3ZjJiNGI5ZDY0OGRkNGFhODBlZGZkMTJkYWZhZWUxMGJhYTgzMjI0MzU0NDMyZDFjYjYyY2NhYmUzOGJiODQ0OGQxNjJjZDBkMzBlOTg4ZDJlMWEyNDU4ZmZkYWZhYWNiZGZmOTI4NzU2MzkwZjY2ZGM2MGQ3ZWE0NSI6MTIwOiI4M2RlM2Y1MjFmY2ZkYWZmOTAyMzg2ZjM1OWU2ODMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjk3Yzk2ZDgwZDBhM2ZhOWFmMzViODZmMzFmYjcxYTE3YWVkMzBjZTg0MWM3OTg5NmJiYzg4NjNiM2IzZWUwNCI6IiI6IjNhNTE2M2VjN2UwMDcwNjE4MzhkNzU1YWMyMTk4NTVlIjoiZGU1MGMxMmRhNjMyMzI3NjhkNWViOTkyMGQ0OTY4M2I1YjcxMTRjYjc3NDQ4ZmExMGI5ZDYzNTUyZWM1ZDljMmVhYzk0YjM3NWQxMWY5NDQ5NTlmOTAzYmIyMGM2OTY2MzliNmU3ZjEwOGVjMWU4NzM4NzAwOThjNjMxZGRhY2IyYzI1MjY4Y2ZjMjZkMmE0Y2FjZmI3ZGRhNzM4MzM3NGM1NDU2YmNmNGRhYTg4N2E4ODdmNDI5M2Y4Y2FhMTQ0MTk0NzJhOGJmN2ZmZDIxNGRmYjI3NDMwOTEyMzhiNmQxMTQyYjExNmMyYjlmNDM2MGM2ZmUwMDE1Y2Q3ZGU4MSI6MTIwOiJjZDQ1NDJiMjYwOTRhMWM4ZTA1ODY0ODg3NGYwNmYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjZjMWQ5Y2UzZmViMGU5NjZjMzNlM2ZkNTQyZWMxMWNjMzJmMThjMjUxNGI5NTMxMDNkMzJhYmNkYzcyNjMzYSI6IiI6IjQ2ZmRiODhmZGRlOWI3ZDc0ZTg5MzgwMmEwMzAzMjU2IjoiNTVkMmYyNjNkMmUzY2YwYjM5MGZjZTFkZDFlYmQ1ZjY2NjA4NmYyNmUxY2UyZjA4MDAyYmVkYmI4MTBhZGEzOTIyYzZiZmNmNmE2YWRhYTU1NmU5ZTMyNmM5NzY2ZjAyYjNlYjZlMjc4ZGEyZmEzYmFhN2RiZGI2MzczYmUzYzZlY2ZiZTY0NmIxYTM5ZTI3YzVhNDQ5ZGI5YjU1OWU3ZWEzNDk2MzY2YjhjZGJjYTAwZWU3YTNkZWE3ZmRmYmVhMTY2NWJiZjU4YmQ2OWJiOTYxYzMzYTBmZDdkMzdiNTgwYjZhODI4MDRmMzk0ZjlkNWQ0MzY2NzcyY2VlMzExNSI6MTEyOiI5NmNhNDAyYjE2YjBmMmNkMGNkZmY3NzkzNWQzIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDdjOTQ5NDIwZGM5NDk3MjMyY2Q1ODEwZjMxNmQxMWY5ZTg1ZDM2YzQzMGI1OTQzYmE3OTgzNmQ4OGMxZWI5MiI6IiI6IjdlZjk3ODhmZjA5Y2JlZWRkOTU2OWQ0OTA4M2E0MDk3IjoiY2ExZGU1Y2MzZmNkZTI2MzhlYjcyMjEwZTU1MWU5YzBlMGEzZjU1NzBkNWJlODNhOWE0NDA2YjU0NWQ4NTRiZjE3ZTc1YjljZDBmNGM0NTcyMmZiZDcxMzE5YTMxN2I3MmE4Nzk4NDg1ZTkzMTZhMWM4MTAyNDMyYjgzYmM5NWFmNDJmNmQ1MDcwMGJhNjhmNmYyZTE5YjZhZjYwOWI3M2FkNjQzZGZhNDNkYTk0YmUzMmNjMDliMDI0ZTA4N2MxMjBlNGQyYzIwZjk2ZjhlOWRkZmU3ZWFlMTg2YTU0MGEyMjEzMWNlZGZlNTU2ZDFlYmQ5MzA2Njg0ZTM0NWZkMSI6MTEyOiI4MjMzNTg4ZmNhM2FkMTY5OGQwN2IyNWZhM2M0IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmZlN2M3MDgxNWFhMTIzMjZjZGNiYjJkMmQzZTA4OGJiYWFlZjk4YjczMGY4N2ZlODUxMGIzM2QzMGUxMmFmZSI6IiI6ImUwMjUzYmQxZjE5ZTk5YTdmODg0ODIwNmZiOGFjNGE0IjoiMzk3ODk3ZWNhNDg1NmY5MGQxNGMzY2RmZTFhZDNjYmE0N2UyMzE3NGFlMmRhYjdkMmE2MzIwODk4NTg0ZTAzYmZmYTNmZmQ1MjZmNDE2ZDdiM2M1NzliMGYzNjI4NzQ0ZTM2ZWViYjVkZjUxOTI0MGM4MWQ4YmJiZjVjNTk2NjUxOWM1ZGEwODNhYjMwYTdhYTQyZGVhZTYxODBlNTE3Y2RkNzY0YjdmNzdkMTljYzFhODQxNDE4MTc3NTg4ODdhOGQ3MjY1ZTdlNjIyNzliOWQzM2NkMmYxYmExMGZkNTRjNmM5NmQ0YjhhNWRiZTIzMThmZWY2MjljOGUyYWYwZiI6MTEyOiI0NzdiMGE4ODRkNzg4ZDE5MDU2NDZiZDY2MDg0IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2JlZWZiMzgxN2NiMDJkNjE3ZjM4NWNmMjM3MWQ1MmM4YmNiYzI5ZTVlN2E1NWNkMmRhMTMxY2ExODRjNmU4OSI6IiI6ImY3NDE1NmQ2NDAwYWU0NmI2MTI1MzE4NDhiZmZlMThmIjoiMWFiZTJhYjA1Y2VjY2YyMzkxMjczMTI2ZmU0YTQ0MjZiOTRkMmMzYjk3YTdmMWNkMmVlNmJiOTUyYmY0YTU0NmU5NzJiNWExNzAxZDVkZGIwZTViYjdhMjQ4ZmNiNDcxMDdhOWZjNzdlNGI5ODA2YjY4YTExODUwMTE5YWEyMzlmYThiZTEzNzBlM2EyZTFhOGIxNjhmNzMyM2FmZGZjNGI4OTE3ZDkyNTcwMTY3ODQ4YTU2MTMyZDY4ODc2YWJjMzg2YzI1OGE5MjMzZGM4YTllYjczNDQzYjA1MmU4NDJjM2Q2M2U4YjUzNjlhY2RkMDM4NDA0ZTRlOWE0YjAzOCI6MTA0OiIwY2I2N2NlYzE4MjAzMzlmYTA1NTI3MDJkZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlNmY1ZjY1Y2UyZmM4ZWMzZjYwMmY1ZGY5MGViN2Q1MDZkZDc3MTMzNzkxMzY4MGFjMTZiZGNkMTVjNTY1ODNkIjoiIjoiOTIxMmE1NDhjNTk3Njc3ZDE3NDdlOThjZTZmYjE4YTQiOiI1NWNhNDg2YzAxODNkMDEzNDkyNTg4MGQyZTIxZGRlMGFmNTFjNGM3N2M2MDM4YTVhOWMwNDk3ODg0ZTBhYTQ3MTViZGI1YjRiYjg2NGFjYzcwOGFjMDBiNTExYTI0ZmEwODQ5NmRmNmEwY2E4MzI1OTExMGU5N2EwMTFiODc2ZTc0OGExZDBlYWUyOTUxY2U3YzIyNjYxYTNlMmVjZjUwNjMzYzUwZTNkMjZmYTMzYzIzMTljMTM5YjI4ODgyNWI3YWE1ZWZiZDEzM2E1Y2U3NDgzZmVlY2IxMTE2NzA5OTU2NWUzMTMxZDVmMGNiMzYwZjIxNzRmNDZjYjZiMzdjIjoxMDQ6IjA4ZDdjYzUyZDE2MzdkYjJhNDNjMzk5MzEwIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGU5YTAzOTE0MzVhY2I1N2VhZTJlNjIxN2UwOTQxYzc5YTNmZjkzOGVjNmExOWI4YTdkYjJlYTk3MmU0OWY1NCI6IiI6IjI3Y2QxZDdhZjdlNDkxZTMwYzgxMTBjYzAxMzkyNTI5IjoiNzkxNDBkMzJiYjMyZGFjZTA3NzllMmQzN2EwZjc0NGQ2ZDk3M2U5OWEyNzk5NjJiNDNhNmMwYWY2Mzc3MmU4YTBhMjFkNWQ5ZGQzYzMzZDRiMjE4Y2IyZjZmMjRkZDhkOTNiYjRlMWU2YTc4OGNiOTMxMzUzMjFlY2ZlZDQ1NWU3NDdmYTkxOWI4NWI2M2I5ZTk4YjQ5ODBhOGNjYjNiMTlkNTBkNzM1NzQyY2I1ODUzNzIwYzJhZDM3ZmE1YjBlNjU1MTQ5NTgzNTg1ODMwZjhkNzk5YzBkMmU2N2MwZGMyNGZjOTI3M2Q5NzMwZjNiYjM2N2M0ODdhNWY4OWEyNSI6MTA0OiJmYmI0NzdkZDRiOTg5OGE5YWJjNWE0NWM2MyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU1YTEyZWVjYTYzNzY1NDI1MmUzZTQwYjM3MTY2N2UzZjMwOGIwMGYyZmQyYWY2OTYyMjNlNGNkODllM2ZkNGUiOiIiOiI4YTM3OTNiNjQ0MTI1ODM2MGY3ZjQ4MDFiMDNkMGIyNiI6ImY1ODEwZGM1ZjI1ZTQ5YmQ2ZDk0YmM2M2MyNDk0YWE3YTU3OWE0MDU2YTI1ZjFkZDliMjczNGQwYjg3MzFlZTUyNTIzZWRkNTRmZjQ3NTY1MWQ0NWMyMTNlMWJmMjU0MzI3ZmIwZTJjNDFhN2Q4NTM0NWIwMmJjYzlkMjdiMDg5MTVkMzMyZTE2NTk2NzE5OTFhNGJiNzQwNTU5NjdiZWJiYmE2ZWNjZWIxODJmNTc5NzcxMzA2MjNkNWE3YjIxNzVmYTVhODRiMzM0ODY4NjYxYzFmNDUwYjk1NTYyOTI4YjQ3OTE3NTk3OTZhMTc3ZDU5ZWQxOGJiZjE0MWUyYWQiOjk2OiI5OTIzMDAxOTYzMDY0N2FlZGViYmIyNGIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZDM1M2Y4NzBhOWMwODhkZTU2NzRlZmQ5NzY0NmI5YzU0MjBiMmJjZGZjZmZlZmNhZGQ4MTY4Mjg0N2U1MzMxIjoiIjoiZjI2N2ZhOTgyYWY1Yzg1MzU5YjY0NDdmOWI3NzE1ZWEiOiI3Y2Y1NTYzMDg2N2FmNWRmZjc0N2M4ZGQyNWJjYzUzMWQ5NGE3NzMwYTIwYjZjMDNkNDYwNTllYTkzZmNhYTAwZDA3ZWUxN2RhZDBlMGRmZjgxNGIwMmRmZWYwY2JlMDBiMzdmZDJmNWY5NWVhZDdjNzJiZTYwMDE2ZjI5MzRkNzY4M2ZjMWU0NzE4NWM3MjExYzQ5Y2IwM2UyMDliMDg4ZWRiMTRlNTMzZGJjYjc5MmFiNzAzMzcyODkwNGY3ZmYxMjM4MWEyMzZkYmE5Nzg5NGVjMWZhZmNmODUzYWIxNWZmZjM0M2Y5MjY1ZDAyODNhY2VmMTAxNjhmZmQxMjcxIjo5NjoiOTU1M2I1ODNkNGY5YTFhODk0NmZlMDUzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDIyN2M5ZmY1ZDE3YTk4NDk4MzA1NmZiOTZmMzk5MTkzMmFlODEzMjM3NzUyOWMyOTIzOGNmN2RiOTRhMzU5ZCI6IiI6ImI4ZjY1MzZmMzc2YTdlZmUwZTY4NGFjZjM1MGJhZTcwIjoiMWNjMjVkYTMxZjkwZGU3ZmE0N2ViY2U5Mjc1NGQzZmFhOTlmODhkNGUyNWNjYWI0NTY0NWMxYWNkZjg1MGQ1NWQ3ZjAyZjYxYTBiZmRjMzEyNWYyOTI1OWQ3ZGE4YWJlZjUzMmZlMDk2NmM2M2QzNDg2NzUzYzhhMmNiNjNhMzkzNDlhMDY0MWIyZjJiOTUyNmEwM2I5N2Q1OGNhNjBmYmIwNTRjNmMxNjRmZjI4MzY2ODhiMGNhZDU0ZGYyYjE2NWJjMDgyZWVhZTY2MGU3NjhkZGU1MTMwZTMwZjhlZGM4NjM0NDY2NjFjNzRkYTY5YjllNTZkZThhZTM4OGRhMCI6OTY6IjQ0Yjk1YTM3ZmFiMjMyYzJlZmIxMTIzMSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjJhNTdlZjg1ZmZjZjA1NDhjM2QwODcwMTJiMzM2YzQ2ZjY1NzRjZjFkOTdjYTA4N2JmYWQwNDJlZTgzZWVjMiI6IiI6IjNkNTgwNDAyZDJhOGRjNGQ3NDY2ZTVkY2I0NTZiZTdhIjoiYzJiOWU5NWMxNmU1NTAyODc5NGE2M2VmODJkMTFmYjgzYTJhNzVkYzM0YTgxZjIzOGU0NzJjMzMyNjQ1MzRiZGQ1NGNkMDdkMDJhMGVjZjkwMTlhZDFhNmQ2Yzc3OWYzMzlkZDQ3OWUzNzk0MDQ4Njk1MGYxODNiYWRlMjRmY2EyZjI0ZjA2ZDQwMzdiMzU1NWIwOWZjODAyNzllYTMxMTc2OTQ3M2ViMDYzMGI2OTRhMjk4MjMzMjRjZGY3ODBkN2QxYTUwZDg5ZjdhMjNiMDVmN2E4YzNhZDA0Yjc5NDlhYTllNmE1NTk3OGJhNDhkODA3OGI1YTJmZDNjMWJiYiI6NjQ6IjA3MmQ0MTE4ZTcwY2Q1YWIiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYzODg5ZWQ1YmYyYzI3ZDUxOGE2OTZiNzFjMGY4NTU5MmUzMzM3YWFlOTViNWJmMDcyODllNGM1ZGZkYzA4OGQiOiIiOiIxYWQ1MzQyODBhMGZhYzdkY2UzMWYyYWU0ZmI3M2Y1YSI6ImJlMWI5ZGFiZWEzM2JiOTQ0M2UyN2Y2NzRiMjc5MzFjMGZiYTY5OWEzM2RjODZmYWIyOWU1MGI3NmE5NDQxMDMwNDQ0YjQ2NTMxN2JiZjI5NDlmYWY5MDhiYzFiNTAxZDExYTVlYTIwNDJlNGI0NjBhODVmM2JlNTgzNjcyOWU1MjNkOTliNTZlZjM5MjMxZDVjNmQ4YWUyYzJhYjM2ZWY0NGUyYWEwMmExZjJjNTU5YzZlMzMzMjE2YzdmOWVkNWY5Yjg4MGE4OGU5MjAyMTkyMDRjOTlhM2FlOGY5MGFmZDEzOTY1NjNiYzU5YTY5MWE5M2UwMDcwYjBiNWZkOTAiOjY0OiIxYmNlYTBhYzJjMWEwYzczIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5NGUzZTJjMTdjZmI2ZjUyZDRmZGJhM2JhNmQxOGJiYTg5MWI2NjYyZTg1ZGYxNGQ3ZTYxZjA0YWRiNjllMGU1IjoiIjoiOGE4MGVmYjNiZmUyMjA1MjY5OTc1NDM0MDlmZGRiNGQiOiIwNWRhMWIwZjdhYzZlZWY0ODhkM2YwODdlY2FlN2YzNWFiZTNlZjM2ZDMzOTcwOWRjM2ZjYjViNDcxOTc5MjY4ZWU4OTRjM2I2YzdmOTg0MzAwZDcwYmM1ZWE1ZmJhOTIzYmZiNDFkODg2NTJiZGFlY2M3MTA5NjRjNTFmM2UyYWUyYzI4MGI3ZDZjOGUzYjlhOGE4OTkxZDE5ZDkyZDQ2YzhhMTU4MTIzMTg3ZjE5Mzk3YWQxYWQ5MDgwYjRmZmQwNGI4MmI1ZDY4ZDg5ZGFjZDNlNzY0MzkwMTM3MjhjMTM5NTI2M2U3MjJiMjhlNDVkYWJmMWVmNDZiOGU3MGI1Ijo2NDoiZmFhNWMxM2Q4OTlmMTdlYSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmU1ZTQ3OWFkMGQ3OWRiZjcxN2ExZjUxZjUyNTBkNDY3ODE5ZTQ0NGI3OWNiM2RlZjFlMDAzM2M4MGRkYWRkOCI6IiI6IjQ3Y2U4MzgwODNmZDA3MGQ4NTQ0YzBhZDUzMzdjZGM2IjoiOTg0NzZiZjA1YTE4YzRmZjFiNjAyNGRkNzc5YzFhYzA2ZDgzODcwNWEwYTgzZmU0MmJlZTVmYzZlYmYzYjJhMWE1MDQ5YjY3ZjRhYWJjODIzOWNkNmZmNTY1MDRiY2JhZDFlMjQ5OGMxNTliYmVjMmE2NjM1OTMzOTQ1ZjZlYTQ5ZTViYzc2M2RjZjk0ZjRiMzY0M2QzODg4ZjE2MTA1YWJiMDk2NWUyNGY1MWNiNDk0OTQwNjEyNDE0NWU5YWUzMWNjNzY1MzViNDE3ODQ5MmYzOGIzMTEwOTlkZjI3NTFmNjc0MzYzYWU3YTU4ZjZmOTMwMTk2NTNiN2U2YTZmMCI6MzI6ImEzOTU4NTAwIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyN2Q0ZGVkYjcxYThmNjhjYTVjZTJiOWU1NmRhNzcyYmY1YTA5Yjc5ODFkNDFjZDI5ZjQ4NWJkMmQxYWRiOGQ0IjoiIjoiN2U2ZjAzNDNjNTQ1Mzk3MTdhOTdiNmM4YjlmN2RlYzQiOiJkMzg2ZGI3ODA0M2Y3MTliN2UxMzdjYmY3OWE3ZjUzZGRhMmZlM2JhY2NiZWJiNTdkNDk5ZjZlYjE2OGU1MTUxZjEwMDgxZDc2YjcyYWUwZjMwMTY1ZWZiZGRhNDY5ZTgyNmY5MjQ2ZTU5ZGJjYWQ1YzBiMjc2OTFjMDBkNmMxOTJjMjQwNzNlOTljMTljZjhjMTQyMDg3YzBiODNjNGNlMmZjN2JhMWU2OTYzOTRlNTYyMGFiMmQxMTdkNWRjZDJhYzIyOTg5OTc0MDdmZDVkZTA3ZDAwOGRlOGY5OTQxYTRhNWY4MDc0NzM2YTU5NDA0MTE4YWZhYzA3MDBiZTZjIjozMjoiNTBmZDE3OTgiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVhN2FhODM2YTQ2OWQyODU0MmQwZDI0ZDMyMzJmYWQyNjZkYThmYzg4OWM2YjYwMzhiNzI2ZDNkYTI1ZjdiMjAiOiIiOiI5ZmFmN2NkODA1ODAzZTE0M2VjOGYzZjEzNDc1ZWZkMiI6IjEwMDZjNzA3ZjYwODcyOGIyYmY2NDczNDA2MmIxMmE1NjI1MDYyYmNkY2I4MGEzY2UyMDU4MzUyYTI5MjJkNWU2ZmJlMTk2ODFiNGYwZDc5YWQzYzgzN2Y4MWU3MmYyZmJmOGRmNjY5ODk0ZTgwMmEzOTA3MmIyNmMyODZmNGIwNTE4OGM3MDhmN2M2ZWRkNWY1YmI5MGI4N2ZmYTk1Yjg2ZDg0ZDZjMWM0NTkxYjExZDIyYzc3MmE4YWQ3ZjJmZTZiZDhiNDZiZTBlOTM2NzJkZjJlOGJmZjhiYTgwNjI5ZTE4NDZjZmQ0NjAzZTc1ZjJkOTg4NzQ2NjVjMWEwODkiOjMyOiIwNzc2NDE0MyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE5NDQ0ZmQxNzZhY2JlMDYxZDAyMjFmZGUzZGRmY2M0ZmY3NGU5OTVkOTgxYTgzMTI5N2M0Y2JkYTUxYzIyYTEiOiJjMTQ2ZmY1YTk4ODQ5NmNhZDdlY2VkN2EyZWE0NzFlMDExN2Q1ZDZiZDI1NjJjMjNjZTlkYjRiZjM2ZDgzYmEzZmMyMmU5MDQ4NmVjMjg4YTYyN2QyMDhlMGIyZmQzYjY1ZjgzMDFjZjdmYzQxZDk3OTU5OTgxYTk1Y2QxY2YzN2VmZmM0NmRiOTliOTRiMjFjOTQxYzM2MTNjMjZhMTBiMWE2Yjc3OTNmNDY3ZDU4ZmY1MTM0NjEyMjMwZjFjNDlkN2UxZmNmNjY0ZmU1MmZjNmVjYTQ2MjczOTgyZjZmZTcyOWIwMDlkOTBlYjhkOGU0YTBiMGRiZTkwN2I3NmRhIjoiNTcxNDczMjE0NTQ3MGRhMWM0MjQ1MmUxMGNkMjc0YjUiOiIiOjEyODoiZGI4NWI4MzBhMDMzNTdmNDA4NTg3NDEwZWJhZmQxMGQiOiJhM2NhZDlhNTdmYTI4ZTZmNmFhYTM3MTUwYTgwM2JmOGI3N2U3NjVmMDcwMmU0OTJjNGU1ZWJiMzFhZTZiMTJkNzkxMTQ5MTUzZTQ2OWE5MmJiNjI1Nzg0YTY5OWZkN2NhNTE3NTAwZWUzZjI4NTE4NDBiYTY3MDYzYjI4YjQ4MWUyNGJhNDQxMzE0ZThiNzEyOGY1YWFjY2FmNGM0ZTJjOTIyNThlYjI3MzEwYmYwMzE0MjJiN2ZjMmYyMjBmNjIxZDRjNjQ4MzdjOTM3NzIyMmFjZWQyNDExNjI4MDE4YTQwOWE3NDQ5MDJjOWU5NWMxNGI3N2Q1YmI3ZjU4NDZiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjg2ZDNiZDA3MWUzZjQ2ZjE4MDYxMWJjNGVjOGQ3NzI2ZmU3MmI2YzYxN2U3ZDQyYjMzMzlmNTM5MThjOWUzNiI6IjIxOTgzYWQ2NjQ0OWM1NTcyNjNhZWYyOTlkYTZlZWY4ZjMxZDU3NmZjMTdlZDJkYWMzZTgzNmY3YzJjZWFmZjMwOTRiMjY5NTQ1MjY4MGUxODhkZjEwYzE3NDgxMGVmZDFmYmFhNmM4MzJiYWVkY2UwYjkyZTRjNzEyMTQ0N2Y2NDYxYWM5MDliNDMwMmNkZjY1ODA5NWIxZGU1MzJiNTM2ZmFhNGZiMzhjZmRmNDE5MmViNWMzZmUwOTBkOTc5YTM0MzQ5MmY4NDFiMWVkYzZlYjI0YjI0YmRjYjkwYmJiZTM2ZDVmODQwOWNlN2QyNzE5NGE3YmI5OTVlY2MzODciOiJhNzE0ZTUxZTQzYWVjZmUyZmRhOGY4MjRlYTFkYzRiNyI6IiI6MTI4OiJjZDMwYzM2MThjMTBkNTdlOWE0NDc3YjRhNDRjNWMzNiI6Ijk2MTA5MDhhMGViMmVlODg1OTgxYzllNTEyZTFhNTUwNzVhMjEyZDMxMTA3M2JiYjJmYjkyNDhjY2UwN2FmMTZlZTRjNThiZGM4ZGJlODA2ZDI4NDgwZjkwNjU4MzgxNDZmM2UxZWIzYWU5NzAxMmNmZTUzODYzYTEzZDQ4N2YwNjFhNDlhNmM3OGNhMjJhMzIxZmEyNTE1N2RiZTY4YzQ3ZDc4ZjIzNTk1NDBjYzkwMzFlZTQyZDc4ODU1ZWQ5MGU2YjhlYTNkNjc3MjViZmZmY2I2ZGIzZDQzOGM5ODJiNWY4OGQ5YjY2MGY3ZDgyY2IzMDBjMWZhMWVkZWJiNmIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ZmU4MWYxNWEwMmUyZWNmNDZlNjExOTljMDU3MTAyZDE2MGU2YjVkNDQ3ZDRhMjc1OTcyMzIzZmZmOTA4YzNlIjoiMGI0ZWUwMzg1ZTY2NjVkYThmZDJhZTQ3ZjJkMGNmMWM1YmQzOTVhM2JiNDQ3MDQ3YWI1YTNhZTBiOTUzNTViZjgzZDAzODExMTlhOGQ0YzAxYWNiZTYwY2Q3ODg1ZGE2NTA1MDJmNzM0OThhNjgyZmRjOTRmN2IxNGY0Yzc1MzIyNjA2NGZhMTVlM2E5MGE2MDgzZTA1M2Y1MmY0MDRiMGQyMjM5NGUyNDNiMTg3ZjkxM2VlMmM2YmIxNmMzMDMzZjc5ZDc5NDg1MjA3MTk3MDUyM2E2NzQ2N2NlNjNjMzUzOTBjMTYzNzc1ZGUyYmU2OGI1MDVhNjNmNjAyNDVlOCI6IjkxZDU1Y2ZkY2RjZDdkNzM1ZDQ4MTAwZmY4MjIyN2MzIjoiIjoxMjg6ImNkN2RhODJlODkwYjZkNzQ4MGM3MTg2YjJlYTdlNmYxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRjMjA5NWUxMzc5Mzg5ZGMzODEwZTg4MTkzMTRmNWEyZjg3ZDE0OTQyMTNjNWIxZGUxYTQwMmY3ZjRmNzQ2YzQiOiIyNmVjOGViYWMwNTYwNTM4YTk0OGFmYmMxOGZiNzMwZTlhOTFmMjEzOTJiZGUyNGI4OGIyMDBmOTYxMTRiMjI5YTViNTdmYTlkMDJjZjEwZTY1OTJkNGRmYjI4YmYwZjAwNzQwYzYxMTU3Y2UyODc4NGU5MDY2ZWEzYWZkNDRlY2YzYTQ5NDcyMzYxMGNiNTkzYzBmZWZmYzY4OTdlMzQzNWM2ZjQ0ODY5N2FkM2UyNDE2ODVjNGUxMzNlZmY1M2JkZDBmZTQ0ZGQ4YTAzM2NmYjFlMWVhMzdhNDkzOTM0ZWI1MzAzYWU2ZWY0N2NlNjQ3OGY3NjdlZjllMzMwMWFiIjoiMTk3ODhiMmUwYmQ3NTc5NDc1OTY2NzY0MzZlMjJkZjEiOiIiOjEyMDoiZjI2YTIwYmVhNTYxMDA0MjY3YTBiZmJmMDE2NzRlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImJlNTM1MWVmYzAyNzdhZmM5NzU5ZWMyNDY0YTIyY2I0NDAxZjdhMTdlZmQxYTIwNWU3YWYwMjNjN2VkMzBlZTEiOiIxZWNhOTE0MDZmMzM4ZmMwOWMyOTg4YjFkN2RjOGM0MDlkNzE5MzAwYzAzODQwYTQ5N2Q3YjY4MGNkZDVlMDliMTQ0OTAzNDc3ZjcxMTZhOTM0ZTFkOTMxY2YzNjhhZjFmYzJhMGEwZTdjYWE5NTQ3NWEzY2Q3YmY1ODVhMTZmZGEzMWViM2Y4MjAxZGIwMjE2YjM3YTE2MzVjMWMwMzA4MzZiM2RkMDVjYTViMDE5NDM4OGZhMTk4ZTcxNzgyMjEzMWQ1ZDQzMTg2OTBlZjgyZDM1YWM4MGIyN2ZmZjE5YWVjOGYwMjBkYzZjNmNlMjhmMDgxM2JiYmY4MjMwYWQ5IjoiYzZiMjYxMTdkOWRiZDgwYzFjMjQyYWQ0MWFiZTJhY2MiOiIiOjEyMDoiNjEwNTFkNmMwODAxYjRhNmI2Y2EwMTI0YzAxOWYzIjoiOTU0NDdhZGVkMzM2ZDZjMjBkNDgzYTZmMDYyZDUzM2VmZWQwMjYxYWQzMjFkMzdiZjhiNzMyMWI5OGY1NWMwZjAwODJjZTdmM2QzNDFiMThmZWEyOWE3MmZjOTA5ZDMwY2Q4Yzg0YTE2NDAyMjcyMjcyODc2NzRhOWIyZjE2YTgxYjE5MWVjZjNiNjIzMmQ2NTZjMzJkN2IzOGJlYTgyYTFiMjdkNTg5NzY5NGEyYmU1NmQ3ZTM5YWExZTcyNWYzMjZiOTFiYWQyMDQ1NWY1OGE5NGE1NDUxNzBjYjQzZDEzZDRiOTFlMWNlZTgyYWJiNmE2ZTBkOTVkNGRlMDU2NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgxNGMyY2RmZGVlY2YzOWQ0M2JiMTQxZmJmYzYyZGFjNDRmNzU1MmM1ZTVkYWMyZDQ5MTMzMDNmYzg2MDExOWIiOiIwZDMwMTNhMWQ3MTMyZjY4NWQwMDE0MjBkYWE2YzdiNjQzYmMzNmI4ODc1MTFhY2M0NTg4MjM3ZDNiNDEyYzc5ZTRlYmJhMjljMDgyNDhhZDQ2YzcyMzllOGRhYTIzMmI3NDgzYzljNGUzZDFjMGJiZWJjNjk2NDAxZWZlMjFmN2ZkNmZjMDUyNWE0YWI4MWJkOWE4OTNkNWY3YWIyM2I3MGVkMDdjMDBmMzM2NDliOGE5OTZhMDA2ZGU2Yzk0Zjc3OTNmNzI4NDg3OTNmNGQ1YjMxMzExYzY4YWFlMWU3MTViMzc0MDlmYmU1MDZkYWMwMzhhMDk1MGYwNWZlODJiIjoiMGRiM2FkZTE1Y2IwZGVhOThhNDdkMTM3N2UwMzRkNjMiOiIiOjEyMDoiZTYyZjkxMGI2MDQ2YmE0ZTkzNGQzY2ZjNmUwMjRjIjoiMzc0ZDAzY2ZlNGRhY2Y2NjhkZjVlNzAzOTAyY2M3ODRmMDExZjQxOGI0Mzg4NzcwMjk3MmRjYzNmMDIxYmNiOWJkZDYxZWQ1NDI1ZjI5NzViNmRhNzA1MmM0ODU5NTAxZWIyZjI5NWViOTVkMTBiYTZiMmQ3NGU3ZGVjYzFhY2FjZWJmODU2OGU5M2E3MGE3ZjQwYmU0MWFjMzhkYjZmNzUxNTE4YzJmNDRhNjljMDFjNDQ3NDVjNTFhZDlhMzMzZWRhOWM4OWQwMDFhYTY0NGYxZTQwNjNhOGViMmEzNTkyZTIxYzZhYmM1MTViNWFhY2FlYzhjMzJiY2YxZDNjNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFhZTQ1NDExMTBmMmJjNGY4M2NkNzIwYjVjNDBjODMxNTQxM2Q4OTZlMDM0Yjc1MDA3ZjE3MmJhYTEzZDI5ZWMiOiI1ZWE4MTFlN2ZiZmMwZTAwYmYyYTZhYmZhYzUwY2FkOWVmZDkwMDQxYzVmN2ZiOGYwNDZhMGZlY2JkMTkzYjcwYTJkZThhNzc0ZDAxZGQzY2Q1NGY4NDhjYjNlOWY1MTUyZWUxYjA1MmJhNjk4YmViZmJhMWZiYmRhZTQ0YTI2MDQ0N2Q2ZTY0ODI2NDBhZTRkMDFjOWNhYzNkMzdkNGZmZTlhMGRlMGI2MDAxZGU1MDRhMzNlZjc2MjBlZmUzY2U0OGVjZDZmNWIxYjNhODkxODVjODZkNGQ2NjJhODQzZmY3MzBlMDQwZTM2NjhkNjE3MGJlNGNjZWQ4YTE4YTFjIjoiODNmOThlZWM1MWVlNGNhZTRjYjdmZTI4YjY0ZDEzNTUiOiIiOjExMjoiZGY0N2VlZjY5YmEyZmFhYjg4N2FhOGY0OGU0YiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMGM5YjY2MmVjNGJkMTNiZjU4ZDY0Y2IwYTcxNTliMGU3ZmVlNDcwM2FmNjYyOTJiZjc1YzhiZDZlNDJlOGRjIjoiNDViNjRmMmVkNWFjNzA3ODkwYzBjMTcyNmFkZjMzODc3MGNlNmE3MjhmZTg2YmIzNzJjNGM0OTQwOWEzMjcwNWY4ODFiYzRkMzFhMjdjNDU1YzdjN2RmOWRkMmM1NDE3NDM1MjNlN2QzMmY4ODkzMGQ5ODg4NTc4NDdmMDExYmU1ZjVmMzFhMzFlODgxMjc0NTE0N2NiZmY1YzEyOTRkMGZkNGE3Mjg1ZGI0ODMzZjIyYmYxOTc1MjUwZGE5OWM0ZDBkZDJjOTY4OGQ3ZjgwMDFiYjZlZjJiYzg5OGNlNGQ0MmM1Yjc4ZTc0NjQ1YjU2Y2U5OTIzMzhmNDlkNDE4MyI6IjJiYzA4NDdkNDZmM2QxMDY0YmJmOGZlODU2N2Y1NGEyIjoiIjoxMTI6IjVhMWJmMjVhYThkNWMzZmU1Y2YxYmU4ZTU0YTEiOiI5MDc5ZDYyNzVkYjA3NjYyNWU4NDc0YzI5MTRmZTQ4M2Q0MTNkNTMzOTIwMmY5OGYwNmMzYjBlZjA2M2Q4ZjNkMzEwMjlkZWFmN2Y5MzQ5YmZlYzU3ZTVjZjExZjQ2ZjAyZDVhNjUyMGM3OTkyZWZjOTUxYWRiYmVhNmQwOGU1M2ZhZWIxMGRmZThiNjdlZTQ2ODVkYTllYTRmZTkzMjU1MWE2NTgyMTE0N2QwNmQ0YzQ2MjMzOGU2ZGRkYTUyMDE3YzJiYzE4N2ZkNmQwMmI3ZDUxOTNmNzdkYTgwOWQ0ZTU5YTkwNjFlZmFkMmY5Y2FkYmM0Y2Q5YjI5NzI4ZDMyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGExNTU0ZGIzN2YyZTI3NTczMmE3N2U1MjFjYmQ4MTcwNzI5ZDg2NzdhODVkYjczZmVhY2YzYzY2YTg5ZDY4OSI6IjU0MjFkOTNiN2U2ZTAwOTE5NzhjNjczZGY0ZjNhNDA2YWVmNWYxM2ViNWU2Zjk1ZGExOWIwNzgzMzA4Y2JlMjZkNGZkNmM2NjljYzRhOWYwNjlkN2U2MmU0YzZmYWQxNGI4MGU5MThmZTkxNTU2YTlhOTQxYTI4YjNkYmY3NzZhNjhhYzdjNDJkZjcwNTliNWVkNzEzZTc4MTIwYWVjODRlN2I2OGU5NjIyNmMyYjVlMTFhOTk0ODY0ZWQ2MWIxMjJlN2U0MmVmNmNmZGFlMjc4ZmFkYmFlMWIzZWEzMzYyZjRlNmRjNjhlZWY2YTcwNDc3YjhhM2ZmY2ZiYTBkZjkiOiJiOTE5NGE0ZDQyYjEzOWYwNGMyOTE3ODQ2Nzk1NWYxZCI6IiI6MTEyOiIwNTk0OWQ1OTE3OTNjYTUyZTY3OWJmZGY2NGYzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNhYjFkOWJiNTcxYzRiZGM5ZjNlZjM0MDkxNGJkZGNmZTBjOGU3NzE4ZDRhMjUzMDMzNDM3MmNlYzg2ZTVmY2IiOiI4MGJjZWEzMDdlMDA5NzQ1NzI0ZDVmMTVkMjFmM2I2MWE1ZDVhODQwMTUzMDM0NmIzNGEyYWRmYTEzZTNlOGM5YzkzMjdkNmZhZDkxNGIwODFlNTU0ZmJlNmMxYzZmZTA3MGI1NjY2MjBlNTU5NTU1YzcwMmMwYWI1YmVjZjYxZWExZDlkZTY0MzUxY2U0M2IyMjc2ZWY0ZTIwYjVhZjdjZTQzZGI2ZDIxMjg2YWY0ZTc0MGVmMDBjNmQ3OTA3MDVhZmNmMGVlNDg1MGZmZmMxMmM2NjJmMmJkODIxMmZlYjIxZGIzMTA2NWFiOGY3MTdhNzUwOWMyMTMzNTJiODY5IjoiNmE1MzM1OTAxMjg0ZGQzYjY0ZGM0YTdmODEwYmFiOTYiOiIiOjEwNDoiMDRiOGU1NDIzYWVlOGMwNjUzOWY0MzVlZGQiOiIzNmI5NjAyZWVlMjBiOGYxOGRjZTA3ODNjZDFlMDFhNzk5ZjgxYWUwYTFjZTZkMjkzYTI2YzYyZjQ3ZTdkYWQ4NWM4NDQ2Njk3Y2MwOWM4MWQzZDllYWQ2ZjllNTVjNDE0NzIxMTY2MGM4YWVhOTUzNmNjNTUxNmU5ODgzYzdkNjg1NGJlNTgwYWY4Y2Q0N2JhMzhmYTg0NTFmMGRhZDljOTA0ZTBlN2Y5OTk3ZWZmN2UyOWJmODgwY2Q3Y2VkZDc5NDkzYTBlMjk5ZWZlNjQ0MDQ2ZTRhNDZiZjY2NDVkZmIyMzk3YjNhNDgyYTM0NmIyMTVkZWI3NzhjOWI3NjM2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2RkZGJkNTY1N2UyMjc1MGJmZTZiYWE3MGExZjRhYzQ2YzFlZjhiZWU1NzNhNTdjZmNlZjUwYjY2Zjg1ZTU5MyI6IjJiZjVhYmE4M2E4MTYxYjlkMjFmZjI5MjUxZmIwZWZhNjk3YjFlYTljMWIzZGU4NDgxZDVmZDRkNmI1N2FmZGEwYjA5OGRlY2RjODI3OGNjODU1ZjI1ZGE0MTE2ZWQ1NThmYzRlNjY1YTQ5YThmZmYzYWVmMTExMTU3NTdhOTljMTBiNWE3M2IxZjc5NGY5NTAyMTg2YzEzZGM3OTQ0MmY5MjI2YmJmNGRmMTlhNjQ0MDI4MWY3NjE4NDkzM2FlYWU0MzhhMjVmODVkYmQwNzgxZTAyMGE5ZjdlMjlmYjhlNTE3ZjU5NzcxOWU2MzljYmQ2MDYxZWEzYjRiNjdmYjAiOiJmY2I5NjJjMzllNDg1MGVmYzhmZmQ0M2Q5Y2Q5NjBhNiI6IiI6MTA0OiIxZDhjZGFkY2YxODcyZmIyYjY5N2U4MmVmNiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2OTE2YjkzYjI3MTI0MjFmMWY0NTgyZGU3ZWM0MjM3YzRlNDJlMmIzMmM3ZGNlZDJmOGJiNWJkMmUwNTk4MzEyIjoiMzczOWNjYTIwMjc5YTM2ZGRiODU3YWMyMmJlYWU5MDFhNDk1MjliMzE4MjQ2M2FiODFhN2M0NmU0MzdlYjBiMDU3MWU4YzE2ZjdiNjI2ZWNkOWYyY2EwY2Q4M2RlYmUzZjgzZTVkNThlZDM3Mzg4OTlmNGI2MTY3NTVlYjU3ZmI5NjUyMDhmMjYxNzM2YmRmNzY0OGIxZjg1OTVjNmI2YTc3OTc2ODExNWUzMDc3ZGZlZTdhNDJkNDRiNTU1YTUxNjc1ZmIxY2U5OTYxZDBlMjFiMmI5YjQ3N2MwNTQxMTg0MzUwZTcwZGVjZjdjMTRhNGMyNGI4YTZjZDVmZWQ4ZSI6ImI0ZDkyNDhiYjUwMGU0MGRlOTljYTJhMTNlNzQzZjFjIjoiIjoxMDQ6IjA5MGQwMzQ0NmQ2NWFkY2MwYTQyMzg3ZThlIjoiMDI1NWJlN2FjN2FjNmZlYjNhMjFmNTcyZjZhNTkzY2M4YTk3ZjE3YWY3MDY0YzgwZTQ3OGY0YTZjNDY5Y2Y5NGQ2MDRiYzAxNGIwMDNiZjI4NGQyMTYxNjFhOWM4YTQ5M2FmNDNjNmEwZDhjYWY4MTNhOWU2ZjgzYzdlZDU2ZGQ1NzU0Mzg3NmIxMWY3NmFhMmJlODBkY2Q3OWQxOWFjNjFmMDBmYTQyM2FjMmY1MmZhZTdhODMyN2NkOTE0OTRjYTQxMTZmZWI3MzU5ODBhZDBhNGIxNDQ1Y2I3ZjM4Y2M3MTJiOGFlZTcyMTc5ZTY1Yjk3ZmNhMzg2OTRlMzY3MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjc1MWM4YjcyNDE2NTAwOWE4YmQ5N2E5ZDJhMGUyMmNhZTVhOTVjNDc0M2M1NWVlZWVmMGE2ZmU3ZDk0NmJlYyI6ImU4NTQ2YTVhZjFlMzgxMTQ4MjJlNjBlNzU1NjNhOTM5OWM4ODc5NmYzMDNjOTljNjlkMWYzYzUwMzc5ZGE4MWUxY2Q1YjVhNGE3MjFlMjNjNTlkYTU4ZWE0MzYxYjdmZjU4NDA4ZTUwNmEyN2ZlYTI0ZjlhMjM1YzZhZjdmN2E1YmQ5M2ZhMzFlOTBlZGZjMzIyODIxYzA4ZDYzMjQxMzQ4MzBiN2ZlMTYwYjRhM2U2ZDI3ODY2YTEwZTZlNjA3NjJhMzE2MThlZjkyZjVjNjdjY2IxZGViMWYxYjE4OGYwZTY4NzE2NWU3YzM2NmM3NDE4OTIwZGY0ZjRmY2RjYWUiOiIxNjBjNTBjMDYyMWMwM2ZkMTU3MmRmNmJhNDlmMGQxZSI6IiI6OTY6IjlmZWY5YmVjZjIxOTAxNDk2NzcyOTk2ZiI6IjE3NWZhNmI3Y2Q3ODFlYzA1N2ZmNzhiYTQxMGYyODk3YTkyMDczOWI1ZmM0ZjA0YmM5Yjk5OGZiYzdjYzE4ZTMyN2FkNDRkNTliMTY3ZTQ2MjcyNTZhYWVjZDk3ZGMzZTRhN2M5YmFhZjUxZDE3Nzc4N2E3ZjRhMGEyZDIwN2E4NTU3NTNjNDc1NGQ0MTM0ODk4MmQ5NDE4YjZiMjRiNTkwNjMyZDUxMTVkYzE4NmIwYmEzYmVjMTZiNDFmYTQ3YzAwNzdjNWQwOTFlYzcwNWU1NTQ0NzUwMjQ4MTRjNTE2NzEyMWRkMjI0YzU0NDY4NjM5OGRmM2YzM2MyMTBlODIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBmYWYzMmMyMmMyYTRlZTM4ZmU0YjVjZTA4Zjk4ZmRmNmY4M2I1MDM4ZGNiYTVlYzgzMzJiM2VlYjVjNzEwYzciOiI4YTU1NmNjMzAwNzU3NTNjNmU5NGMyZjY2OWJjYTIwNThmZjZhYmNiZmZmZmM4MmRhN2NmY2EwYTQ1YWY4MmRmYjRjZjQ4N2NlYjRlZGU3MmJlODdlZTRjOGI3MmRiMWU5NjQ1OWRlMWRjOTY3MjE0NjRjNTQ0YzAwMWQ3ODVmMjE4OGI5ZmNjYWVjNGIxYTM3OTcwZDM4YjMyNmYzMDE2M2QyZmRmZGY4YTJjZTc0YWVjNTVhYmNkODIzNzcyYjU0ZjgwODFkMDg2YTJlN2IxN2I0MDg2ZDZjNGE1ZWE2NzgyOGVmMGI1OTNlYTEzODdiMmM2MWY1ZGZlOGYyYmIwIjoiMDQ4ODVhNTg0NmY1Zjc1YTc2MDE5M2RlN2YwNzg1M2MiOiIiOjk2OiIwYzEzNTA2ZWQ5ZjA4MmRkMDg0MzQzNDIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwZGRkYzNkMmY4MmJkY2RiYzM3NjQ4YTZiOWI0MTZhZjI4NzUzNzQwZjhlOTk4Y2QxYTUyYTBiNjY1MzY5ZjFjIjoiMDdiZjg0YjE1YjIxOTUxZmQyMjA0OWJlNjk5MWE2NzI1MDNhZTI0M2I4ZDI4NWZiMWU1MTVlMWQyYzM2YmZkNWIwZDBiY2NlODU3OTFmMmNlYThmNjE2YWVkNjhhN2Q5Y2Y0ZWFmNzY0MThlOGIxZWMyNzc1MWRlNjdjYmZkOWQ5Zjc5MDViMjY2NzkwNGYxMGQ1OTg1MDNmMDRjMDRlYTAwYTY4MWZmODlhOWM0NDZkNTc2Mzg5ODQzMGJkN2E5ZGZlYmZlNTQ0ZTNlZDNlNjM5YjM2MjY4M2E2NTFlMDg3NjI2ZmZhNjNjMGMyYjNlMGRkMDg4YjgxYjA3Zjc1ZSI6IjBhOTNiODgzY2JkNDI5OThhZTJlMzlhYWIzNDJjYjI4IjoiIjo5NjoiNWMzNzkxOGVkYjdhYTY1YjI0NmZkNWE2IjoiZmY3YjdiMmY4OGI4YzZmOWY5YmFkNzE1Mjg3NGU5OTVlZWEwZmYxY2UxZWNkOWI4ZDU2MzY0MmEzN2EzMTQ5OWYxNGQ3MGYwZGQ4MzViN2FkZjgwOTI4NDk3Zjg0NWZkOGMyNzg2Y2Q1M2FmMjVmOGM5ZmUxYmJhMjRlM2MzODYwMTYyNjM1YmJlZDU4ZjA2Y2Y2Yzk5NjZiYjliNTcwOTg3YTQ4MzI5Mjc5YmI4NGFmYjllNDY0YmI0YWQxOWFlNjYwMDE3NTA4NmUyODkyOTU2OTAyN2M1Mjg1ZDJlZDk3NjE1ZTVhN2RhZGE0MGJhMDNjNDQwODYxZjUyNDQ3NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTBiMWE2MmU0NmU3NzEyMjc3ZmM3MTFlMTlkMGMwYzg2NWVlNzdiNDJhYzk2NGI3MjAyZGJjYWY0MjgwODZjMiI6IjdkZDdjMDc4N2ZkYmVhNGFhY2Y5MjkzNDE2NTlkY2Y0Yjc1Y2JjYThmOTIwMDFlOGI2MmE0ZDdiNDAyNzJjNTc1NWZhOWM0NDU4NTdkYjA1MzI4ZGMxMWNlNTIyMWYwNDRmNGIzZGFmYmYwZTJkNzJhMWFkMGQzZTRjODA0MTQ4ZGI1NzgyMTg2OTBjY2M2MjBkOGI5N2I0NDUwZmY4MzQwMGE2Y2FhYTk1OTYxNzYxMTQ0NmE2NjI3MTM4YTQwNjdiZTllYTQxMGQ0YjA1ODEwMjJhYjYyMTkyODIwNWI0YTQ0ODA1NjBmYzRjMmMzYjM5YTI4MDU2ODQwMDZmMzUiOiJlMjA5NTdhNDlhMjdlMjQ3ZDAwMzc5ODUwZjkzNGQ2YyI6IiI6NjQ6ImM5OTc1MTUxNjYyMGJmODkiOiI5MzA3NjIwNDc5ZjA3NmMzOWY1Mzk2NWM4N2QyMGMyYWZmMTFjNzM2YzA0MGRiYTc0Y2Q2OTBkMjc1NTkxYTVkZWZjNTdhMDJmNjgwNmRlODJlYjcwNTE1NDg1ODk0ODQzNjRmNmM5YjkxZjIzM2E4NzI1OGVkZTFlZTI3NmNiMmM5M2I0ZmM3NmY0ZDdlNjBjYmQyOWJhMmM1NGNiNDc5YzE3OGZhNDYyYzFjMmZiNmVlYjNmMWRmMGVkZmI4OTRjOTIyMmI5OTRjNDkzMWRlZGY3YzZlOGRkZWNiZGUzODVkZGY0NDgxODA3ZjUyMzIyYTQ3YmY1ZmY3MjcyOTkxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmZmNjMWM4OGZiYTE3MjNiM2FiNTdiNDU4ZDliZmZiOThiODc4Yzk2N2ZiNDNiOWRiMmFlMDc1M2QzMmEzYmIxIjoiMTliNmRlYzg2ZDkzYzQ2NjMwN2RlM2EzNmMwNzkxZWQxMDEwYjFiOWNmOGQzMDM0N2FlNDZlMGY5MjgzYzlmZGE0M2RhOGNiNDkxZGQxN2NjNDI5OGIxZjBiODc2ZDZhMGY0YmNiYzk2NjdmZTM0NTY0YmMwOGY4ZjdiNjcwNDUwNTdkMTlmNGJmMDI3YmM4MzllNTkwODIyZmEwOWE1Y2VmMWFmMThlNjRhMDExNmFhMmEwMWEzZjI0NmMyYjUyNzJjMThjOWFhMjNlZmU2NzRiYTUzZDUzM2FlOGYwNjk1Y2I3OGMxMTU1Y2RjN2E5ZDdmYWUyYzQ1NjdkYzA3YyI6ImQ1MzNjMjE3MGM1ZGMyMDM1MTJjODFjMzRlZmY0MDc3IjoiIjo2NDoiMTY3ZWM4Njc1ZTdmOWUxMiI6IjA1MzkyODdhYzU0NmZlNTM0MmU0YzNjMGVjMDcxMjdkY2QyMjg5OWFiZmU4Y2RkNmU4OWQwOGYxMzc0ZDc2ZTg3N2JlYzQ4NDRkMDZlMGE5ZjMyZDE4MWM4ZDk0NWJhMTZhNTRjZTM3MjVmYWUyMWQ4MjQ1YzA3MGE0ZGEwYzY0NjIwM2Q2YjkxMzI1YjY2NWFiOThjMzAyOTU4NTFjNTkyNjViNGFiNTY3Yjk2OGI2ZTk4NTM2Yjc4NTA3MzhkOTJlOTYyN2I0YzljNmY1ZDlhZTI1MjA5NDQ3ODNkOGY3ODhhMWFhMTFmM2Y1MjQ1NjYwZDQxZjM4OGUyNmUwYTEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU1ZTk0YjMzOWMzYmFmZTA2OGVmOWNjMzA3ODdjYzY3MDU4NTAxMTQ5NzY4NDM3NzdjOTJiNGIzMzE4MDE2NTAiOiIxNDdjYzdiYzQwMDhkYWRmMTk1NjUyMGI1OTk4ZDk2MTQ5OWJkZjNkOGIxNjg1OTFhZGJmZDk5NDExYWQ3YjM0ZWI0YjJhNWMxYmIwNTIyYjgxMGZlYzEyZGQ3Yzc3NTc4NGQ3ZWNkYzc0MWU2ZGVjODE5MTM2MWU2YWJmNDczYjIxOTIyMTgwMTk1MWI0ZDVmZmU5NTVhYjUwZWVmOWNmZmRmZWU2NWJhMjlkZGZhOTQzZmI1MmQ3MjI4MjUzMzhjMzA3ODcwYTQ4YTM1ZjUxZGIzNDBhYTk0NmM3MTkwNGQwMzE3NGIxZTRhNDk4MjM4YjlkNjMxYTY5ODJjNjhkIjoiMmUyYjMxMjE0ZDYxMjc2YTU0ZGFmMmNjYjk4YmFhMzYiOiIiOjY0OiI1MjY2ZTljNjdjMjUyMTY0IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTNjOTU3MmJkZWY2MjUxMGQ4NGYyZDQxNWNjNDgxY2QxZTcxYjljMTEzMmI0M2U2M2IyMWJhNGUxNmRlOWIzOSI6IjdjNzhlNjM0ZGVjODExMTczZmYzYzRhOWE0OGFlM2FlNzk0ZmJkMmFlZmQ0YjMxNzAxNzc3ZmY2ZmNiNjcwNzQ0YzU5MmExZDI5OGQzMTk3MTc4NzBkY2EzNjRiMmEzNTYyYTRmZmE0MjJiZjcxNzNjNGY3ZWE5YjBlZGY2NzVlOTQ4ZjgzNzBmZmQwZmQwZDU3MDNhOWQzM2U4ZjlmMzc1YjhiNjQxYTFiMWVlY2QxNjkyYWQxZDQ2MWE2OGQ5N2Y5MWY5MDg3ZjIxM2FmZjIzZGIxMjQ2ZWUxNmY0MDM5NjljMjM4Zjk5ZWVkODk0NjU4Mjc3ZGEyM2NlZDExZWUiOiJhODMzOWJhNTA1YTE0Nzg2YWQwNWVkZmU4Y2ViYjhkMCI6IiI6MzI6ImRmM2NhYjA4IjoiOTFmOTc4MGRhZWZkMmMxMDEwYzQ1ODA1NGFjNmUzNWJhYTg4NWNkZDJjOTVlMjhlMTNmODQ0NTEwNjRlMzFlMDczOWYyN2JmMjU5Y2IzNzZhYjk1MWUxYzcwNDhlMTI1MmYwODQ5Y2NiNTQ1M2ZjOTdiMzE5NjY2ZWJiZmJjN2VmMzA1NTIxMmE2MTU4MmQxYjY5MTU4ZjNiMTYyOTk1MGE0MWJjNzU2YmRlZDIwNDk4NDkyZWJjNDlhMTUzNWQxYmQ5MTVlNTljNDliODdmZmViZWEyZjRhZDQ1MTZlY2RkNjNmYTVhZmRhOWNjZTlkYzczMGQ2YWIyNzU3Mzg0YSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzBhMTRjYTUzOTEzYWNiYjIxNWI0ZTQxNTkwODMxMDZkYjNmZmY4M2NiZWRkMWU1NDI1ZjY1YWYxZTk0ZjVkZCI6IjhjNWY3M2VlMTU0NDU1M2I3MTJhZDdhMTRmMzEzNzljOGQ1NGE0ZTQzMmZiNmM1MTEyNDM2OTg4ZDgzYzRlOTQ5NTRiMDI0OWI0NzA1MzhmYjk3N2I3NTZmYmVlNzBiODExZDRkYzA0N2E4NjllMjA3YmIwYjQ5NWYxZTI3MWQwMDM0ZTkxMjAwMGU5NzU5NDAzM2UwZGVkZGUwNTkxYjI5N2Y4YTg0YmFmY2M5M2E0NjI2OGE1YmJhMTE3YjU1OGYxYzczNTEzZTk3MWM4MGE3MDgzZTE3MThmYzEyZDBjYzBkOTk2YThlMDk2MDNkNTY0ZjBiOGU4MWVlYTI4YmMiOiI0ZjIzZjA0OTA0ZGU3NmQ2ZGVjZDRiZDM4MGZmNTZiMSI6IiI6MzI6IjE4ZTkyYjk2IjoiYmI0YjNmODA2MWVkZDZmYTQxOGRkNzFmZTIyZWIwNTI4NTQ3MDUwYjNiZmJhYTFjNzRlODIxNDg0NzBkNTU3NDk5Y2U4NTZkZTNlOTg4Mzg0YzBhNzM2NzFiZjM3MGU1NjBkOGZkYTk2ZGFiZTQ3MjhiNWY3MmE2ZjllZmQ1MDIzYjA3YTk2YTYzMWNhZmRmMmM4NzhiMjU2NzEwNGM0NjZmODJiODlmNDI5OTE1Y2YzMzMxODQ1ZmViY2ZmMDA4NTU4ZjgzNmI0YzEyZDUzZTk0ZDM2M2VhZTQzYTUwZmM2Y2IzNmY0Y2ExODNiZTkyY2E1ZjI5OTcwNGUyYzhjZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTY5ZjQxOTE0MDI4OWFjMjVmYjBlMmVmOWNjNGY3ZTA2Nzc3YWMyMGY3ZDYzMTkxOGQxYWYwYzg4ODNiN2Q2YSI6ImZmOGRmYTRlNzA0OTBlYTljODRjYjg5NGRjNWQ3ZTFiOTM1ZWJjZGVhODBhMzljNDE2MWQ0ZGI0MmNiYjI2OWNjODZhYmQzODFhZjE1ZWM5YTRhNDJlZDE4YzFlZWQ1NDBkZWNlYzE5NzIyZGY0NmYyMmFhMDY4ODMyOTdjYjM5M2ZiMjNlNGJiMzFhODE3ZTg4MzU3YWE5MjNjN2VjYmNmMjRjMjhhMDlmNjIyZGQyMWZhNzBjMGEwMjE5MzAyNGZkY2VmZWFhOTZjYzFiNTBmODFhNjVkZmE5ZTFiYjUxMjZmMGM5NzY2YTg2MWVlZDA5NmVjMTVmYjA3YjBmODEiOiI1MzEyNDhhZmRhYWYxYjg2Y2YzNGQyMzk0OTAwYWZkOSI6IiI6MzI6ImM2ODg1Y2RkIjoiZjc1Mjk5ZTBlYWQzODM0ZmM3ZWJkNGIyMDUxNTQxYjU5OGFkNTdjYzkwOGZkY2Q0MzI0Y2Y0Y2NmN2RjZjdiM2YwNzM3YWQ2YzAyNjM5OWE4YjFiNmQzZDUwMDExYjNjNDhlYTJjODk4MzNiNGI0NGM0Mzc2NzdmMjMwYjc1ZDM2ODQ4NzgxZDRhZjE0NTQ2ODk0ZWVjZDg3M2EyYjFjM2QyZmNkZDY3NmIxMGJkNTUxMTIwMzhjMGZkYWE3YjU1OThmZTRkYjI3M2ExYjY3NDRjYmE0NzE4OWI3ZTJhOTczNjUxYmZjMmFhYTllOWFiZWE0NDk0MDQ3Yjk1N2E4MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQwNGE1ZDFhYzllMzJmOWNhYWJmZmJmYTQ4NWNlOWMyN2VkYzllNWNkZTBmMmFhYjRmMzJjZTMxMjE0NDliODgiOiJiNjNlYzRkMjg4NTRiN2ZlMmQ0ZDEzOTczZjViY2IxNmY3ODQ5NGNlMjVjYzI4MjBkZTlkMGRjMWQ4ZDkxZGIxZjE5YmM5ZTAxY2VlODQxOGM5ZTg4YTY5YjJmMzBjZGJiMGRiZGJiNTBiZTcxZTFlNjY2YzExMWMxMjZmMmI3MTk3YzAyZjY5YTFiMmVjNWUxYmY0MDYyYjJkMGIyMmZiMGZhMTU4NWI0ZTYyODZiMjlmNmFjOThkMWIxMzE5ZGQ5OTg1MWZhNjkyMTYwNzA3N2QyOTQ3MTQwZmRlZWVhMTQ1YjU2ZWE3YjZhZjI3NmM5ZjY1MzkzYmM0M2VkZTMzIjoiYjZlNmMwNzhlNjg2OWRmMTU2ZmFhOWFjMzJmMDU3YzMiOiI2ZWJjNzVmYzkzMDRmMmIxMzlhYmM3ZDNmNjhiMjUzMjI4MDA5YzUwM2EwOGI3YmU3Nzg1MmRhOWUxYWZiZTcyYzlhYjM3NDc0MGIwZGMzOTFmYTRkN2UxN2RlNmEwYWEwOGM2OWU2ZjVjNWYwNTQxMWU3MWU3MGM2OWRmYmNmNjkzZGY4NGMzMGY3YThlNmM3OTQ5ZWExZTczNDI5N2MwZWEzZGY5YjdlOTA1ZmFhNmJiZGNhZjFmZjI2MjVhMzkzNjMzMDgzMzFkNzQ4OTJjZjUzMWNiM2Y2ZDdkYjMxYmJlOWEwMzlmY2E4NzEwMDM2Nzc0NzAyNGY2OGM1Yjc3IjoxMjg6Ijk0YzFiOWI3MGY5YzQ4ZTdlZmQ0MGVjYWIzMjBjMmQzIjoiNTZhMGFjOTRmM2VjN2JlMjYwODE1NGY3NzljNDM0ZWU5NmRiNWVkNGY1YTZlMWFjZmIzMjM2MWNlMDRlMTZlMTMzN2JlNTk3OGRmMDZkN2M0ZjYwMTIzODVmYjlkNDViYjM5N2RjMDBmMTY1ODgzNzE0YjRhNWIyZjcyZjY5YzAxOGZmYTZkNDQyMGFkMWI3NzJlOTQ1NzVmMDM1YWQyMDNiZTNkMzRiNWI3ODlhOTkzODlmMjk1YjQzZjAwNGRlM2RhYWVmN2ZhOTE4NzEyZDNhMjNjYTQ0MzI5NTk1ZTA4ZGExOTBlMzY3OGJjNmFkOWI1MDBiOWY4ODVhYmUyMyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI1NmYwYzk4MGFjZjc4NzVjZjdmMjdkNTNhZDRhMjc2YWRjMTI2ZDBiOTNhNTc3NGFjNDI3N2VlY2FkNDMwOWUiOiIyYzk0Mjk5ZTM2YjdjNGE4MjVlY2JjNWE3ODA5MDYxZTBhNjc2MTc2NGE1YTY1NWZmZGIwYzIwZTVjM2ZjYjEwZjRlOTNjNjhhYTBhMzhjMmFjYzVkMDZmMmI3YzRmZjRmY2Y4MTRiNTUxYmZlZmEyNDhkYmUwNmEwOWEwZjE1MzIxMzUzOGEzMWZhN2NmN2Q2NDZiNWI1MzkwOGQ4OTc4ZjUxNGM5YzRkNmQ2NmYyYjM3MzgwMjRiNWY5YzNmZDg2YjZkYTBjODE4MjAzMTgzZjQyMDVmMTg2ZWE0NGE1NGVkYjkxMWIxYTE3YzQyNGM5NTg1MmM4ZDI3MWIyZTkzIjoiYjAwNGMwNDlkZWNmYjQzZDZmM2VjMTNjNTZmODM5ZWYiOiJiMjA0NWI5N2ZiYjUyYTVmYzZmZjAzZDc0ZTU5ZGQ2OTZmM2Y0NDJjMGI1NTVhZGQ4ZTZkMTExZjgzNWRmNDIwZjQ1ZTk3MGM0YjMyYTg0ZjBjNDViYTM3MTBiNWNkNTc0MDAxODYyYjA3M2VmYTVjOWM0YmQ1MDEyN2IyY2U3MmQyYzczNmM1ZTI3MjM5NTZkYTVhMGFjYjgyMDQxYTYwOTM4NmQwN2I1MDU1MWMxZDFmYTQ2Nzg4ODZiYWM1NGIwYmQwODBjYzVlZjYwN2RjYTJhMGQ2YTFlNzFmMGUzODMzNjc4YmY4NTYwYmMwNTlkYWUzNzBlYzk0ZDQzYWY2IjoxMjg6ImZjZTcyMzRmN2Y3NmI1ZDUwMmZkMmI5NmZjOWIxY2U3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFjNTAyN2MzNmU2Y2FhMWIzZTVlNDVmZWFkMzJiNWUzMTI2YWM0MWYxMDZjNDkxYjBiM2E3YzE2NTAyZjRmZTYiOiI1OGYwY2VhYTMxYzAwMjVkMmU2YmI1ODcyMGNjZTRiNjRmNWY2YzY1N2M4NDdhZTQyOTM2ZWIxZTM0M2ZlYTM5N2M4YThjZjJmNWVmMDJmZmFlYzI1ZjQzMTkwMGRjYjA5MTBjZjMyY2VhOWVjYTNiNzhhZWQxYzQ1MWM3YWY1MTA2NjQ4OWY4N2IyYTVmOGNmMjhkNmZkYjZjZTQ5ZDg5OGI2MTY3YjU5MGEzOTA3YmU3NjE4YmUxMWZiMDkyMmEzY2ZkMThlNzNlZmVmMTllNWNkYzI1MGZhMzNmNjFlMzk0MGM2NDgyYWUzNWYzMzllOGMwYTg1YTE3Mzc5YTRlIjoiM2VlNjYwZjAzODU4NjY5ZTU1N2UzZWZmZGQ3ZGY2YmQiOiI5M2U4MDNjNzlkZTZhZDY1MmRlZjYyY2YzY2QzNGY5YWRkYzlkZDE3NzQ5NjdhMGY2OWUxZDI4MzYxZWIyY2FjYzE3N2M2M2MwNzY1NzM4OWNlMjNiYmU2NWQ3M2UwNDYwOTQ2ZDMxYmU0OTU0MjQ2NTVjNzcyNGVhYzA0NGNhZmFmZTE1NDBmY2JkNDIxODkyMTM2NzA1NGU0M2UzZDIxZTBmYTZhMGRhOWY4YjIwYzVjZGJkMDE5Yzk0NGEyZDJlZTZhYTY3NjBlZTExMzFlNThmZWM5ZGEzMDc5MGY1YTg3M2U3OTIwOThhODJkZGYxOGMzODEzNjExZDkyNDJhIjoxMjg6ImFjMzNmNWZmY2E5ZGY0ZWZjMDkyNzFmZjdhNGY1OGUyIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM0YzMwMTk4MTBkNzJiNWU1ODRmMDc1OGYyZjU4ODhhNDI3MjlhMzM2MTBhYWZhOTgyNGJhZGFkZTQxMzZiYmQiOiIyMmRlZWY2NmNiYjdkYjI0MGMzOTliNmM4MzQwN2YwOTBkNjk5OWJhMjVlNTYwYjIwODdmZWQwNDY3OTA0YmI1YzQwY2JhYTA1YjhiZjBmZjVhNzdjNTNmYTIyOTQ3OGQ4ZTA3MzY0MTRkYWY5YzQyMDQxN2MzOTFjOWE1MjNmZDg1OTU0NTMzZjEzMDRkODEzNTliZGNjMmM0YWM5MGQ5ZjVmOGE2N2E1MTdkN2YwNWJhMDQwOWI3MTgxNTliYWYxMWNkOTE1NGU4MTVkNTc0NTE3OWJlYjU5OTU0YTQ1YTg2NzZhMzc1ZDVhZjdmYWU0ZDBkYTA1YzRlYTkxYTEzIjoiZjMxNWVhMzZjMTdmYzU3ZGFiM2EyNzM3ZDY4N2NkNGYiOiJmMzNjNWEzYTllNTQ2YWQ1YjM1ZTRmZWJmMmFlNTU3Y2E3NjdiNTVkOTNiYjNjMWNmNjJkODYyZDExMmRiZDI2ZjhmZTJhM2Y1NGQzNDdjMWJjMzAwMjllNTUxMThiYWIyNjYyYjk5Yjk4NGI4YjhlMmQ3NjgzMWY5NGU0ODU4N2RlMjcwOWUzMmYxNmMyNjY5NWYwN2U2NTRiNzAzZWJhNjQyOGYzMDA3MGUyM2VkNDBiNjFkMDRkZDE0MzBlMzNjNjI5MTE3ZDk0NWQ5YzBlNGQzNmM3OWE4YjhhYjU1NWQ4NTA4M2E4OThlN2U3ZmJlYjY0YTQ1Y2MzNTExZDk5IjoxMjA6IjBiYWU5NDAzODg4ZWZiNGQ4ZWM5N2RmNjA0Y2Q1ZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyOTM5N2Q5OGZjNWE3ZjA0YjVjOGI2YWEzYTFkZDk3NWI2ZTQ2Nzg0NTdhZTdmMDY5MWVlZTQwYjUzOTc1MDNhIjoiMGJiZjEwNzljYjU1NjljMzIyNTdiYzdlNTIzNzFkYjQ2ZjM5NjFiNDU3NDAyYjgxNjU4ODI0M2I0NTIzNTQzNDMwZDVjYTU2YjUyZGU2NjMyNzI0YzUxZTZjM2FmMzEwYjI4ODIyYzc0OWExMmJkZDU4ZGVlNThiYmMzMjY2NjMxNTYyYTk5OGVjM2FjZGM4YTI1NjdhOWYwN2Y3Zjk3NTljM2Y1MGIxZDFkY2RkNTI5MjU2YjgwYzBkMjI3ZmMxZmU4YjU4YzYyZDFjNjQzZjFhYzI5OTY4MDlmZDA2MWFmY2Y0YTlhZjE4NGMxNGRiOWU2M2VjODg1YzQ5ZGU2MSI6Ijg4NTU0M2E0NWZkMTE2M2UzNGVmOTI3NjE0NWIwZjhjIjoiZDg4YmVhYTA2NjRiY2VmMTc4Y2JkYmZhYjE3ZmY1MjZiNWMwZjhhZDk1NDNjNmEzMTJkOTNjMzM2NzA3ZmJmODdjMDQ0OGIwN2E1NTA1ODA5NTMyNzlmNTUyZjM2ODIyNWNjNjk3MWYxZWVjYzcxOGQ2YWFkMTcyOWM4ZDg4NzMwODEzNTc3NTJiZDA5ZDc3MDc1ZmE2ODBjYjJkYzQxMzkxNzFlNGEwYWFhNTBiMjhjMjYyYzE0ZmQxMGI4ZDc5OWNhMWM2NjQxYmI3ZGZkZmRmM2RlYTY5YWEyYjllNGU0NzI2ZGMxOGIwNzg0YWZhNDIyOGU1Y2NiMWViMjQyMiI6MTIwOiI3YjMzNGQ3YWY1NGI5MTY4MjFmNjEzNmU5NzdhMWYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzU1NWRmY2YzNTRkYTA3ZmQ3MGY5NTFkOTRlYzFkODZhNjM1ZWRmZGI3OTI5NDYwMjA3YjJhMzljYzBjZjRhMyI6ImExMzUxY2ZmZmQxYjBjYmY4MGMzMzE4Y2M0MzJkMzIzOGNiNjQ3ZTk5NmI3YjUzYzUyNzc4MzU5NDY4M2Y1MzU5NTBjZDA4Nzg4Njg3Yzc3MjI2YjJkM2YwOTU5NTU4ODRhZGMyZTQ3NWNhMWUxZWFiMDRlMzdkNWU5MDFhZTg5MzRhOWQzYTBjYjM3YjgwNjEyY2EyNWQ5ODk4NTZkZmE3NjA3YjAzMDM5YjY0ZDdkY2Q0NjgyMDRmMDNlMGYyYzU1Y2I0MWM1MzY3YzU2Y2E2YzU2MTQyNTk5MmI0MGUyZDRmMzgwYjNkODQxOWY2ODFlODhlYmUyZDRiZGFkMzYiOiJlMWIzMGI2YTQ3ZThjMjEyMjhlNDFhMjFiMWEwMDRmMCI6ImJmOTg2ZDM4NDIzNzg0NDBmODkyNGJiN2YxMTdkMWE4Njg4OGE2NjY5MTVhOTNiYTY1ZDQ4NmQxNGM1ODA1MDFlNzM2ZDM0MThjZWJlZTU3MjQzOTMxOGIyMWI2ZTRlNTA0YTdiMDc1YjhjMjMwMGMwMTRlODdlMDRmYTg0MmI2YTJhM2ViZDllNjEzNGI5ZGRkNzhlMGE2OTYyMjNiMWRjNzc1ZjMyODhhNmE5NTY5YzY0YjRkOGZjNWUwNGYyMDQ3YzcwMTE1ZjY5MmQyYzJjZWZlNzQ4OGRlNDJmZjg2MmQ3YzBmNTQyZTU4ZDY5ZjBmOGM5YmY2N2VmNDhhZWEiOjEyMDoiZDhlZjU0MzhiN2NmNWRjMTEyMDlhNjM1Y2UxMDk1IjoiOTVlOGRiN2M4ZWNhYjhhNjBjZWI0OTcyNjE1M2E3YzU1NTNjZjU3MWJjNDA1MTU5NDRkODMzNDg1ZTE5YmYzM2NiOTU0ZTI1NTU5NDM3NzgwNDAxNjVhNmNmZmZlY2VmNzllYjdkODJmZWY1YTJmMTM2ZjAwNGJiNWU3YzM1YWU4MjdmYWMzZGEyOTJhMTg1YjViOGZjMjYyMDEyYzA1Y2FlZGE1NDUzZWRlMzMwM2NmZWIwYzg5MGRiMWZhY2FkYWEyODk1YmRiYjMzMjY1YWRhMGJiNDYwMzA2MDdiNmNmOTRmODY5NjExNzhlMmUyZGVlYjUzYzYzOTAwZjFlYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImJiZWFmZTg2YzcyYWIwMzU0YjczM2I2OWIwOWU0ZDM0NjJmZWIxNjU4ZmU0MDQwMDRkODE1MDNmM2E2ZTEzMmYiOiJhMDMzYzIwNTFlNDI1ZDAxZDk3ZDU2MzU3MmU0MmM1MTEzODYwZTVkZWRjZDI0Yzc2ZTNlMzU3NTU5YmEzMjUwZjFmYzVkNGE5MzFhOWQwOTAwYWMwMjU0MDBmMDE1ODYyMWYwYjEyMTViMjkwNzQ2N2JmYzg3NGJjYWJiYjI4ZTI4ZGU4MWZlMWVlNWI3OTk4NTI2MWM1MTJhZmVjMjMyN2M4YzU5NTdkZjkwYzllYjc3OTUwZGU0YTQ4NjBiNTdhOWU2ZTE0NWVhMTVlYjUyZGE2M2YyMTdmOTRhNWM4ZTVmY2I1ZDM2MWI4NmUwZTY3NjM3YTQ1MGNkYmNiMDZmIjoiZWUxY2FiYTkzY2I1NDkwNTRjYTI5NzE1YTUzNjM5M2UiOiJlNDRiMGUwZDI3NWFlN2MzOGE3ZGMyZjc2OGU4OTljMWMxMWE0YzRjYjViNWJkMjVjZDIxMzJlM2VjYmFhNWE2MzY1NDMxMjYwM2UxYzViMzkzYzBjZTYyNTNjNTU5ODZlZTQ1YmIxZGFhYzc4YTI2NzQ5ZDg4OTI4ZjliOTkwODY5MGZjMTQ4YTY1NmI3OGUzNTk1MzE5NDMyNzYzZWZiY2Y2OTU3YzliMjE1MGNjYWJmZDQ4MzNkMGRjZWUwMTc1OGM1ZWZiNDczMjFhOTQ4YjM3OWEyZWMwYWJjZDZiNmNiZjQxYTg4ODNmMGY1ZDViZjdiMjQwY2IzNWYwNzc3IjoxMTI6ImE0ODA5ZTA3MmY5M2RlYjdiNzdjNTI0MjcwOTUiOiJlNjJhZGY5YmJkOTJkZDAzY2M1MjUwMjUxNjkxZjcyNGM2ZWNlMWNiODlkOGM0ZGFmMzFjYzczMmE1NDIwZjZiZWRhYjcxYWFiMDIzOGJhMjNiZDcxNjVlZDFmNjkyNTYxZWY0NTdmZDFkNDc0MTM5NDk0MDViNmZjOGUxNzkyMmIxNzAyNmQ4OWQ1ODMwYjM4MzU0NmVhNTE2YTU2ZjNhMWM0NWVjMTI1MTU4M2FlODgwZmE4OTg1YmQzZGNjMWQ2YTU3Yjc0Njk3MTkzN2JmMzcwZTc2NDgyMjM4Y2MwOGMyYzNiMTMyNTgxNTFlMGE2NDc1Y2MwMTdmOGEzZDBlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmFkMDZjODhkZDRmM2JlY2YzNWVlZDk1YmI4NTliZTI0MDZhMTgwM2E2NmU0MzMyYTc0YzVmNzVjMDliOWEwMSI6IjIyMTljMTE2NzI4ODRiOTNkMDI5MGI2YTcxNDBmZWFmZTQxNjQ2MWYxY2RhZjBiM2FhNjQ2OTNkN2RiMmViMTBmZWFlNDZhYWM3YWY1NDlmYTFiMGFiYzc4YzExZjhkZjdlZTgwM2VmNzAzMTBmYzNlNjc3NjlmOGI0YmM2NGY4MTE0M2E2ZWJmOGJlZTlkMzg2YThlZGU1ZDJjYzBlZDE3OTg1YTNiN2JiOTUxOTFlZjU1ZTY4NDY5MGNjZGM1Y2E1MDRiYzZlYjI4NDQyYjM1Mzg2MWEwMzRhNDM1MzJjMDI1ZjY2NmU4MGJlOTY3YTZiMDViOWRkM2E5MWZmNTgiOiIwN2Q4YjRhNmU3N2FlZjkwMTg4MjhiNjFlMGZkZjJhNCI6ImNjYTFmZDAyNzgwNDVkZGE4MGI4NDdmMDk3NWI2Y2JmMzFlMTkxMGQyYzk5YjRlYjc4YzM2MGQ4OTEzM2ExYzUyZTY2YzVjMzgwMTgyNGFmYzFmMDc5ZDJiMmIxYzgyNzE5OWU4M2Y2ODBlNTliOWE3ZGU5YjE1ZmE3YjY4NDhiNWJmNGUxNmExMmFjMWFmNGNmMmI0ZDdiYjQ1NjczYzVlMTI0MWU5OTk2NDQwODYwYTkyMDRmYzI3Y2FlNDZhOTkxNjA3YmM1ZTcxMjBkNmMxMTVkZGNiZGQwMmMwMjJiMjYyNjAyMTM5MDgxZTYxZWVlNGFiYTcxOTNmMTM5OTIiOjExMjoiZTNlZGUxNzAzODZlNzYzMjFhNTc1YzA5NTk2NiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4N2JiZjdjMTU2ODllOGM5OWE1YTMyYThiYTBkZmViY2ZlMTk4OTE1OTgwNzQyOGNkZDFmMzgyYzNlYTk1MTc4IjoiYjc3ZDNiZjNiMzBiM2U2ZTVjODZjYmZiN2U1NDU1ZjY0ODBmNDIzY2M3NjgzNGI0NjYzZDI4ZDlmMWViNWM0MDIxMjYzNGUzMzQ3NjY4NDI3Zjc4NDgzNTJhYjc4OTg4NmY5NjY4MmE1NjgyNjBiZGFlYjdkZTBhYWUyYWYzNmY1YWUwNGYwNmMzMzJiMTU4ZDkyMzcwNmMxYzYyNTVjNjczZmVlYWRiNmQzMGJmYzkwMWU2MGI5MmFjZDlkZGQ4M2VmOTg2ODZjNGQ0OTJmNGE2MGU5N2FmMjU0MWQ0NzBhNmE2YjIxOTAzNDQxMDIwZWE3NjE5Y2YyOGEwNjk4NiI6IjJmMTlhYTFmM2E4MmE3Mzk4NzA2OTUzZjAxNzM5ZGE3IjoiNTkwZGJkMjMwODU0YWEyYjVhYzE5ZmMzZGM5NDUzZTViYjk2MzdlNDdkOTdiOTI0ODZhNTk5YmRhZmRmYjI3YzM4NTJlM2QwNmE5MTQyOWJiODIwZWIxMmE1MzE4ZWQ4ODYxZmZlODdkNjU5YzQ2MmVmMTY3YmUyMjYwNGZhY2ZhM2FmYjYwMWIyMTY3OTg5YjllM2IyZTViNTllN2QwN2ZkYTI3ZmZjY2Q0NTA4NjlkNTI4NDEwYjBhZmY0NjhmNzBjYzEwZWY2NzIzYTc0YWY2ZWViYzE1NzJjMTIzYTliNWE5YWFiNzQ4YTMxZmE3NjQ3MTZkMzI5M2ZmNWRlNyI6MTEyOiI1YzQzZmM0ZGM5NTlmYWJlZWJiMTg4ZGJmM2E1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI0MDk1YTY2YjZlYjAzMjBjYTc1ZTJhYjc4ZTg0OTZhNDVmNGIwMDBmYzQzNDM2OTA0YzNlMzg2ZmI4NTJlZDIiOiI0NjkwZWRjODQzZTIzZDlkOWI5YTRkYWI4ZmE4MTkzZjhiZjAzODk3ZDNkMjk3NTllOWRjOWUwZjhhOTcwYzBmNWQ0Mzk5YjlmNjA0NjFmZTVjZjQzOWY5YjBkNTRiYmMwNzU2OTVlNGQ3NmI3NjI5OGNjMmI3NWJiM2UwYjUxNmVlOWFkYTkzZjc3YzRjMDAyYmE5ZmQxNjNhMWU0YjM3N2JlZmI3NmMxZTVhYjhiMzkwMWYyMTRjMGE0YzQ4YmQyYWEyZjMzNTYwZDQ2ZTI3MjFhMDYwZDQ2NzFkYzk3NjMzZmY5YmNkNzAzYmIwZmJlZDlhNGEyYzI1OWI1M2YzIjoiMDk1NWMxZjBlMjcxZWRjYTI3OWUwMTYwNzQ4ODZmNjAiOiJmNTE2MGM3NWM0NDllNmJiOTcxZTczYjdkMDRhYjliOWE4NTg3OWY2ZWIyZDY3MzU0YWY5NGE0ZjBjYTMzOWMwYTAzYTViOWVkZTg3YTRmZjY4MjNiNjk4MTEzYTM4YWU1MzI3ZTY4NzhjM2NjYzBlMzZkNzRmZTA3YWE1MWMwMjdjM2IzMzQ4MTI4NjJiYzY2MDE3OGY1ZDBmM2U3NjRjMGI4MjhhNWUzZjJlN2Q3YTExODViN2U3OTgyODMwNGE3YWQzZGRjZDcyNDMwNTQ4NDE3N2U2NmY0ZjgxZTY2YWZkYzViYmVlMGVjMTc0YmZmNWViMzcxOTQ4MmJkMmQ4IjoxMDQ6Ijc1YTMxMzQ3NTk4ZjA5ZmNlZWVhNjczNmZlIjoiMGRkMmRjYTI2MDMyNTk2NzI2NzY2N2ZmM2NjZGM2ZDZiMzU2NDg4MjFhNDIwOTBhYmJhNDYyODI4NjliYWM0YmRjMjBhOGJlZTAyNGJlYTE4YTA3Mzk2YzM4ZGJiNDVkOTQ4MWZlZGNjNDIzYTM5MjhjZmE3OGEyZjBhZThlZWRiMDYyYWRkODEwYmRiZWU3N2RkYzI2YzI5ZTRmOWZkYTFhYjMzNmQwNGVmNDI5NDdiMDVmYmRiOWJjNGRmNzllMzdhZjk1MWQxOWQ2YmY1ZTVjYjM0ZWVmODk4ZjIzNjQyYTljNGE5MTExZWQwYjdhMDhhYmVlZWZiYmQ0NWMyMyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA4NmI3N2I1NzMxZjk3MWYwYmY1YjgyMjczNjFiMjE2NzQ2ZGFmOGIwOGM1ODNhZDM4ZjExNGE2NGFhNzg3N2IiOiI2MjkzMTcyMTJmZjhiZDhhNzY3NmU0YzAwYjgxYTk1NzdkZTYzOTdjODMyZjk5YWM5NzRmYTJiYmJjY2I2ZTNiOGFhNzc2ZGI2OTIyZWVkMGIwMTRiZjM5MjM3OTlkYTdkOWQwODU0Yzg4MTc0NzBlMWUyZjdmYzdhNTcyZjlkMDMxNmVlNjBjZGU3ZWYwMjVkNTliODk3ZDI5YTZmZWU3MjFhZWIyZjdiYjQ0ZjlhZmI0NzFlOGE3YjBiNDNhMzliNTQ5N2EzYjRkNmJlYjRiNTExZjBjZWZhMTJjZTVlNmQ4NDM2MDlkM2UwNjk5OWFjZmJlZTUwYTIyY2ExZWVlIjoiMTY0MDU4ZTVlNDI1ZjlkYTQwZDIyYzkwOThhMTYyMDQiOiI2NjMzZWFlMDhhMWRmODVmMmQzNmUxNjJmMmQ3ZGRkOTJiMGM1NmI3NDc3ZjNjNmNkYjk5MTlkMGU0YjFlNTRlYTc2MzVjMjAyZGNmNTJkMWM2ODhhZmJiYjE1NTUyYWRkYTMyYjRjZDMwYWE0NjJiMzY3ZjAyZGVkMDJlMGQ2NGVlZWUyYTZiOTU0NjJiMTkxNzg0MTQzYzI1NjA3ZmQwOGEyM2EyZmJjNzVjZjZiZWUyOTRkYWYyMDQyNTg3ZmRkOGZlM2QyMmMzYTI0MmM2MjRjZjBhNTFhN2MxNGRiNGYwZjc2NmVjNDM3ZGU0YzgzYjY0ZjIzNzA2YTI0NDM3IjoxMDQ6IjJlYjZlYjZkNTE2ZWQ0Y2YxNzc4YjRlMzc4IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBmOWU4MDZiMGQ5MzcyNjg1NjFjMGVhZmJiZGQxNGVjNzE1YjdlOWNlZjQxMThkNmViMjhhYmJiOTEyNjY3NDUiOiIyYWU0YmFlZjIyYWNlMjZmNDY0YTliMGM3NTgwMjMwM2YyZDdjMGY5YTFlZDFkMDE4MDEzNTE4OTc2NWJkZDM0N2ZlYTBjYzJiNzNlZTdmYmJmOTVlYTFmZGEyMjU5N2I4YWFkODI2ZjYzZTc0NDA2OWE5YzM0OTQ4OGIyY2MxY2Y5MzcyZjQyM2NjNjUwMzAyMDgyMTI1NzI0NzMwYWU1YTRkODc4ZTA3Mzg1ZGRjOTkwMzRjNmI2YjQ2NzQ4ZjAyYzgwYjE3OWZlNjQwNmIxZDMzNTgxOTUwY2I5YmNkMWQxZWExZWM3YjViZWNmZDZjMWY1YjI3OTQxMmM0MzNhIjoiODY1Nzk5NjYzNGU3NGQ0Njg5ZjI5MjY0NWYxMDNhMmUiOiIyY2EyNTMzNTVlODkzZTU4Y2IxYTkwMGZiYjYyZDYxNTk1ZGU1YzQxODZkYzhhOTEyOWRhMzY1N2E5MmI0YTYzMWJiZGMzZDVmODYzOTUzODVhOWFhODU1N2I2N2Y4ODZlM2JiODA3NjIwZTU1OGM5M2FlYThlNjU4MjZlYWRlYjIxNTQ0NDE4ZWU0MGY1NDIwYzJkMmI4MjcwNDkxYmU2ZmMyZGNiZmQxMjg0N2ZhMzUwOTEwZGQ2MTVlOWExODgxYmMyY2VkM2IwYWMzYmRlNDQ1YjczNWU0M2MwYzg0ZjlkMTIwY2E1ZWRkNjU1Nzc5ZmMxM2M2Zjg4YjQ4NGY3IjoxMDQ6IjgzMTU1ZWJiMWE0MjExMmRkMWM0NzRmMzdiIjoiODdkNjlmYzNjYmM3NTdiMmI1N2IxODBjNmJhMzRkYjRlMjBkZGUxOTk3NmJmYjNkMjc0ZDMyZTdjZWExM2YwYzdkOWU4NDBkNTljZTg1NzcxOGM5ODU3NjNiNzYzOWU0NDg1MTZkZGJiZGE1NTk0NTdjZDhjYjM2NGZhOTlhZGRkNWJhNDRlZjQ1YzExMDYwZDliZTgyYjRlYmUxZjA3MTFhYzk1NDMzMDc0NjQ5YjZjMDhlZWFiNTM5ZmRmYzk5Yzc3NDk4YjQyMDQyN2U0ZDcwZTMxNjExMTg0NTc5M2RlMWY2N2ZiMGQwNGUzMzg5YTg4NjJmNDZmNDU4MmRjOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzI0YzE3OTExZjZkYjRiM2UzN2M0NmJjYzZmYTM1ZWZjMWE1NWY3NzU0ZjBiYjk5ZjJlZWE5MzM5ODExNjQ0NyI6IjBiZDkyY2IxMDY4NjdlMjVhZDQyN2ZmNmU1ZjM4NGQyZDBmNDMyZmMzODk4NTIxODdmY2M3YjBiZjlmNmQxMWExMDJhODcyYjk5ZWQxYWQ5YTA1ZGFiMGY3OWZhNjM0NzQ1NTM1ZWZlZDgwNGZmNDJiMGFmOGRhZDIwYmE0NDcwOTM5MWZiMjYzZjI0NWU1YTJjNTJkOWNlOTA0MTc5NjMzMjgyZjU3YTEyMjliMGE5YzQ1NTdhNWMwYWVkYTI5YmJjNWE3YTg3MWZhOGI2MmQ1ODEwMGMzNzIyYzIxZTUxZTNiM2U5MTMxODUyMzU1MjZlN2E1YTkxYzU1OTcxN2QiOiI1MDk4Y2M1MmE2OWVlMDQ0MTk3ZTJjMDAwYzJkNGFiOCI6IjlhZDRkZWUzMTFkODU0OTI1ZmM3ZjEwZWNhNGY1ZGQ0ZTY5OTBjYjJkNDMyNWRhMmVmMjVhOWEyMzY5MGY1YzU1OTBiZTI4NWQzM2FhZWJhNzY1MDZjNTllZGVjNjRiOGMzZmY4ZTYyNzE2ZDFjMzg1ZmJjZTJhNDJiYzdiZDVkOGU4NTg0ZGUxOTQ0NTQzYWI2ZjM0MGMyMDkxMWY4YjdiM2JlMWExZGIxOGE0YmI5NDExOTMzMzMzOWRlOTU4MTVjYWUwOTM2NWIwMTZlZGMxODRlMTFmM2M1Yjg1MWYxZmE5MmIxYjYzY2ZhMzg3MmExMjcxMDljMTI5NGI2NzciOjk2OiJmNzkzMGUzZmFiNzRhOTFjYjY1NDNlNzIiOiI2MTI0ZWRlNjA4ZDQxNmJhYTVlNjUzYTg5OGNhNzZlOWY0N2YwODQwM2MxOTg0ZmVlYzExMmU2NzBkZWQyMjI2ZTAwNzNmODg4MWFiMjE2MWNmZGE1NDFkY2NhZTE5NjkxMjg1ZjczOTFhNzI5ZjA3YWJhMThmMzQwYmI0NTJjMWRhMzljYmU4M2NmNDc2Y2ZjMTA1YjY0MTg3ZTBkMjIyN2RkMjgzZGNiYThiNmEzNTBmOTk1NmIxODg2MWZhMTMxZDNmMDBjMDM0NDQzZThmNjBlMGZkZmNmYWFiYmVkOTMzODFhZTM3NGE4YmY2NjUyM2QzMzY0NjE4M2UxMzc5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMjY3YTgzNzkyNjAwMzZmZjNkMWVjMDdhN2IwODZmZjc1NzA2YmFkMTJkMzdkOTY1NmYwNDc3NmYzZDhiODVjIjoiODBjNjhhMzMwZWY1MGUzZTUxNjY4MWYxZTUzNTg2OGIwMzQ2NmU3ZWRiYjg2Y2IzODVkMDFkYjQ4N2RhM2RkM2VkYWQ5NDBmZGM5OGQ5MThiN2RiOWI1OWY4ZDYxMzY5ZWVlMjkyOGM4ODU1NzMwNmM0YTEzZTM2NmFmMDcwOGQ5NGNiOTBhMTVmMWMzYmM0NTU0NGJkYjA1ZmY5NjRkYTVlMDZjNWFlOTY1ZjIwYWRiNTA0NjIwYWVkN2JjZTJlODJmNGU0MDhkMDAyMTljMTVlZjg1ZmFlMWZmMTNmZWE1M2RlYjc4YWZhNWYyYTUwZWRiZDYyMjQ0NmU0YTg5NCI6IjY3NGRjMzRlOGM3NGM1MWZhNDJhYWNkNjI1YTFiZDViIjoiNmE5YThhZjczMmFlOTZkMGI1YTk3MzBhZDc5MmUyOTYxNTBkNTk3NzBhMjBhM2ZkYmJjMmEzYTAzNWE4OGFjNDQ1ZDY0ZjM3ZDY4NGUyMjAwM2MyMTRiNzcxYzE5OTU3MTlkYTcyZjNlZDI0YTk2NjE4Mjg0ZGQ0MTRmMGNhYzM2NDY0MGIyM2M2ODBkYzgwNDkyYTQzNWM4ZWMxMGFkZDUzYjBkOWUzMzc0ZjFjZjViZmM2NjNlMzUyOGZhMmY2MjA5ODQ2NDIxZWE2ZjQ4MWI3ZWNmNTc3MTRmN2JjMjUyN2VkYzRlMDQ2NmIxM2U3NTBkZDRkNGMwY2MwY2RmYyI6OTY6ImJlYTY2MGU5NjNiMDhmYzY1Nzc0MWJjOCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM4NmNiNjM3NzUzMDEwZjYzOWZhM2FhM2JmZjdjMjhiNzRmMDEyYWQ2MDkwZjJhMzFiMDgwMWQwODZmMTgzYWQiOiI2Yjc4NTg1NTdlMGZkMGY5NTc4NDJmYjMwZThkNTRkZWRiYzEyN2ViNGJiZjlkZTMxOWY3MzFmYTI4YTYwNmRmMmMwNDZhMGJjZThlY2RhNGU3NWQzNTk2ZTRlOTg4ZWZkNmJjMjc5YWEwMDViYzUyZmFkOTJiYTA3ZjViMWRmZGE0Y2M0MTcwMjlmOTc3OGM4OGQ2ZmU1MzQxYTBmZDQ4ODkzZGNiN2M2OGQwZGYzMTBhMDYwZjJhNTIzNWFlZTQyMmQzODBmNzIwOWJjMDkwOWIyYWE3ZTg3NjA0NDA1NmYwYjkxNWRhYjBiYzEzY2JlYTVhM2I4NmQ0MGNhODAyIjoiODdmZjZlMGJiMzEzNTAyZmVkZjNkMjY5NmJmZjk5YjUiOiIyODE2ZjExMzI3MjRmNDJlNDBkZWFiYWIyNWUzMjViMjgyZjhjNjE1YTc5ZTBjOThjMDBkNDg4ZWU1NjIzNzUzNzI0MDIzNDk2NjU2NWU0NmJmYjBjNTBmMmIxMDM2NmQxNTg5NjIwZTZlNzhiZDkwYWRlMjRkMzhhMjcyZjNmZmY1M2MwOTQ2NmFhMmQzZWY3OTNkN2Y4MTRhMDY0YjcxMzgyMTg1MGE2ZTZhMDU4ZjUxMzlhMTA4ODM0N2E5ZmEwZjU0ZTM4YWJkNTFkZGZjN2VmMDQwYmY0MWQxODhmM2Y4NmM5NzM1NTFjZWQwMTk4MTJjMWZjNjY4NjQ5NjIxIjo5NjoiNzg1OWYwNDdmMzJiNTE4MzMzMzNhY2NmIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmMzMWNhMGNhYzNlZmU0NjcxNjgxOThmMDZiZWFjZjM5NTY1YTZmNTdmODJlMTA0OGE1YzA2YTIzMTMxNTg4MiI6IjY1MjYxZDZlMjliMjM2OWIxODI4YTdjZWYyZGY5ODczZDZlNjA1N2M0OTkzMDFhZmVkZDZjYjY1YjUwMzZkZGI5NWY5ZTM1M2ZiZjM4ZTU0YzRmNDZmODgxNjQzMjViMzM2MjBjZTE4M2JlYjJlNDExZmJiODlhMGUwMDAyZTU0MmZjMTYxY2FkMzJhNjFlZTZmMWUxNzE3ZTBiNGRjZDAzNDBiMTE2Zjc5NWJjMTAwOWRiYmM2NWJjMzFjOWI1NDliZjAzYzQwYmMyMDRjZDBkMDJlYzg4NGJlOTA3Nzc3ZWJlZWQ4YjUyN2VjM2FmN2NiYjUwODE5M2MwNzQ1ZGUiOiI5NWNhZTZlODVmMzNmMzA0MzE4MjQ2MDU4OWJlMzYzOSI6IjY3NTIzNzUxYTliMWI2NDNkMDBkZTQ1MTFiNTVlNDI2OGNiMmQxOGU3OWUwMWE1NWZjN2I2NzdkNTI5YmQ2NDAwOTQwZmIyNWVhNmFlMTM1YzFhODE2ZTYxYjY5ZTkwYjk2Njk4MWFlZGE2ODU5MzRiMTA3MDY2ZTE0NjdkYjc4OTczNDkyYWQ3OTFlMjBhZWY0MzBkYjNhMDQ3NDQ3MTQxZGVmOGJlNmU2YTlhMTUwODk2MDdjM2FmOTM2OGNkYjExYjdiNWZiZjkwNjkxNTA1ZDBjMzM2NjQ3NjY5NDVkMzg3OTA0ZTcwODliOTE1YTNjMjg4ODZiYTE3NjNiYjUiOjY0OiIyMTMwOWQwMzUxY2FjNDVlIjoiMWQ1ZjJjYjkyMWY1NGFlYjU1MmI0MzA0MTQyZmFjZDQ5NDk3ODM3ZGViMWYwMGQyNmZiZWRkYmFiOTIyZmQ4MGIwMGRiYTc4Mjk2MWY4ZmNlODRmMWY3OTczZTgxZWVkNmVlMTY4YjE3NjBjNTc1Yzg5MWY0MGExZGFlMGZhMWEwODczODAyNWQxM2VmNmUwYjMwYmU0ZjA1NGQ4NzRmMWI4YTI0MjdhMTllYmIwNzFkOTgzNjVjMzIzMTZhODhhNjhjMmI0MGRhZjFlYTgzMWE2NDUxOWFjMzY3OWFjYjRlMDQ5ODZlY2M2MTRlYzY3M2M0OThjNmZlZTQ1OWU0MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2E5ZmEzNmNhMjE1OWRmZjk3MjNmNmNmZGIxMzI4MDQ0NmViNmJjMzY4ODA0M2M3ZTJlMjUwNDE4NDc5MTU5NiI6ImFjMDRjNDI5MzU1NGNkODMyYWE0MDBjODExY2IyMDJkODE1ZDYxNzhhYTEzNDNiNDYyODU5MmI3ZjNhZTQ1ZGM1ZjEyZWE0N2JlNGI0M2UxODY1ZjQwYjA2YWI2N2IzYTlmYjM2NDQyNDhhOWIzZWZlMTMxYThhZGRiNzQ0Nzk3OGJiNTFjY2Y3NDllNzU1NzRmZWE2MGU4NzgxNjc3MjAwYWYwMjNiMmY4YzQxNWY0ZTZkOGM1NzVhOWUzNzQ5MTZkOWVjM2E2MTJiMTZlMzdiZWI1ODk0NDRiNTg4ZTBiNzcwZDlmOGU4MThhZDgzZjgzYWE0ZWNmMzg2ZDE3YTciOiJkMTNjYTczMzY1ZTU3MTE0ZmM2OThlZTYwYmEwYWQ4NCI6IjJhYTUxMGI3ZjE2MjBiZmNlOTAwODBlMGUyNWY1NDY4ZGJjNTMxNGI1MDkxNGU3OTNiNTI3ODM2OWM1MWFjMDE3ZWFjZTlmZDE1MTI3ZmNhNWE3MjZhZDllNjdiZGVlNWFmMjk4OTg4ZDlhNTdlYzRiYmM0M2Q0ZWI4NDk1MzVlYjEwNTIxYWM3Y2Q3ZWQ2NDc0NzlhNDI4NzZhZjJlYmM5ZTIxMDhiNTM5ZmViZGFhOTEyN2M0OWJkYTFiZGE4MDBmNjAzNDA1MGI4NTc2ZTk0NDMxMWRmYmNhNTlkNjRkMjU5NTcxYjZkMmVkNWIyZmMwNzEyNzIzOWIwM2Y0YjciOjY0OiIyMTExZDU1ZDk2YTRkODRkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmY4MDJlODM4MjUwMDY0YzE1ZmRlZTI4ZDdiZDQ4NzI4NTAzNTU4NzA4NDc3MDFhZDk3NDJiMmQ2ZWI0YjBjMCI6ImUyY2E4YzhkMTcyZmY5MDIzMjg3OWY1MTBkMTIyNWFmOTFiYzMyM2JkZjYzNjM2M2MyOTAzZmNkMTc5MDY5MmM4YmNiMDNhMWNjY2IxODgxNDY3ODg1MmM2YjNhNDQxNTUyZTU0MWI4NDNlZTVlNGY4NmExNTJmYTczZDA1YWVhNjU5ZmUwOGFhNjQyOGJiMjU3ZWFhMmE3YjU3OWZkYzQwMjJjMWRlYzM1OWE4NTQyNTNjMWFlZmM5ODNjNWVkZThjOTc1MTdlYTY5ZmM0NjA2ZTI1ZjEzZmZiMGY1ZjQ5MTYwNjkxNDU0ZmJiNzRlNzA0MzI2NzM4MzUzNTI1ZjciOiIyZGQ1NTBjZmQ5N2Y4ZTFkOGQzMWJhNTUzN2FlNDcxMCI6IjcyYjk2MzBkZGE0MDMwNmU3ODViOTYxOTM0YzU2ZTIwOTQ4ZjhlYWMwZTk4MWY0OTc4N2ViM2RiZDZlNDYwN2Y3ZDA4ZDEwY2E2NDM3NDZiZjFlZmE3ZTUwNjY5OTM2ODNkNTI3YTkwZjJkNDVlYzljZjczMTEzZjFmMTdiYjY3OTU4YmU2NjlhY2Q0ZTI5MjdmMWRhY2ZkZTkwMmNkMzA0ODA1NmQ3ZjZkZmRkODYzMGZmMDU0ZWZjZTQ1MjZkYjdjOTMyMWQ2ZDJiZTIyMzZmNGQ2MGUyN2I4OWQ4ZWM5NGY2NWEwNmRjMDk1M2M4YzQ1MzNhNTFiNmEyOWJkMmMiOjY0OiJiZDZjODgyM2M5MDA1Yzg1IjoiZjZkZDBiNWYzZDFhMzkzYTE4MzcxMTI5NjJkYmExNzVhMTNjMmQxZTUyNWVmOTU3MzRjYWYzNDk0OWQ4YjJkNjNiNGZlNTYwMzIyNmI1ZjYzMmYyZDdmOTI3MzYxYmE2MzlkYzBlM2M2MzQxNGY0NTQ2MjM0MjY5NTkxNmQ1NzkyMTMzYjRhMjRjN2M0Y2JlMmI5N2M3MTJiZjI3YWI2MmQzZDY4YjM4NzVkNThmZmU0YjdjMzBhODE3MWJmZjFhOWUyZjM5OTU3NjhmYWFjZGEyZWE5MjEzZmYzNTc5OGI5ZTQ1MTNmNmE4N2JkM2Y1YTlkOTNlODQ3ZTc2ODM1OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODRkZDUzY2UwMTQ2Y2I3MWMzMjc3NjAzM2JiMjQzMDk4ZDc4YTIyYWMxN2Y1MmE2MmExMjJmNTY1M2ZiNGUzMyI6IjY4MjIyYmZmYTc4MmRjZmU0ZjMyOGZjMjBlYjUyMGU3NWE5YTVmZWRiZTEzZWM3ZmNmMGU4MmZiYTA4YmI4N2E4YThlMDI5MDI2MzhlMzJmZTBlMjI5NDM0NGIzODA3OTdmODAyODQyNmZmY2MwNTMxYzczOWM4ODQ4OTIzOTRjNDhmZjA3NzljNWY1ZWRmMGEzNmEzZmI4YWE5MTIxMzM0Nzc3NGVjNGJmMGZlMTA0OWJkNTM3NDZiMTNiZWVmM2M2MzcxNjk4MjZjMzY3MDU2Y2IxYWEwYTM4NjhlMjNmODg2YTljN2I4MDE1YzI2YWY5ZTQwNzk0NjYyZjZiMjEiOiJmMGM5MGExYmNhNTJmMzBmYWIzNjcwZGYwZDNiZWFiMCI6ImEzZWE4MDMyZjM2YTVjYTNkN2ExMDg4ZmQwOGFjNTBhZTZiZGMwNmFkM2E1MzRiNzczYWMzZTNkNGEzZDUyNDQ5OWU1NjI3NGEwMDYyYzU4YzNiMDY4NWNjODUwZjQ3MjVlNWMyMjFhZjhmNTFjNmRmMmJiZDVmYmNmZjRhOTNiYTRjMTA1NGY3ZjljNjdmZDkyODU1MTFhMDhkMzI4ZDc2YTY0MmYwNjcyMjdkMzc4Zjk1YTFlNjc1ODdiOTAyNTFmOTEwM2VkM2NhY2RiNmJmNjllMDc5NGUzNjZkOGI5MmQ4ZGUzN2I0ZTAyOGRlMDc3ODg0MWYzNTZhYzA0NGQiOjMyOiJiMWVjZTlmYiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjliYjM2ZmUyNWU5NjZhMDc1YWUyYzNiYjQzYjU4Nzc2NzllYmMzNzlkNTEyM2M4ZWRhM2ZhMGUzMGI5NWNhZTAiOiJmYjNhNGJlNjQzYzEwMzQzMjUxYzZmMDc0NWFhYTU0MzQ5NDYzZjYyMmNhMDRhNzkyZTliNDc4MDg2Njg0NGIzMGFlZWYzMjY5ZmM2MGNhYzBlYTAzMWM1ZjM3ODBiNTM1ZTE1MTU0ZjdjNzZlYjRhMzcxYjhhZTM2ODU1MGYzZmEyY2U2OTNjMzQ1MTFlYzk2YjgzOWNhYzU2N2YxYjBkZTBlN2UzMTE2ZDcyOWI0NWQxYjE2ZTQ1MzcwM2E0M2RiNzNmNWQwYzNlNDMwZjE2YjE0MjQyMGI1ZjBkMjZkNzJhYzNkYmE1NDNkN2Q4MTM2MDNiMGJmZGNhM2RkNjNlIjoiNTk4NjlkZjRlZjU3NTRiNDA2NDc4YTJmYjYwOGVlOTkiOiJlY2QxMjU2ODJlOGE4ZTI2NzU3Yzg4OGIwYzhiOTVkZWM1ZTdlZDdhYzk5MTc2OGY5M2U4YWY1YmNmNmYyMWVkNGQ0ZDM4Njk5ZWU3OTg0ZWQxMzYzNWZmZjcyZjkzODE1MDE1N2M5YTI3ZmNkYTEyMWZmY2VkN2I0OTJkMmIxOGRhZDI5OWNiNjQ5NWVkNWY2ODQ0MWFlZmM4MjE5ZDJjZjcxN2QxNWQ1Y2QyZGJjZTQ2MDZmY2Y5MGZlNDVmMzYwMTEyN2NmNmFjZWUyMTBiZDdkZjk3MzA5Zjc3Mzk3NGEzNWJlZjFkMzNkZjk4NDEwMWMyZmM5ZDRiNTUyNTllIjozMjoiY2IzZjUzMzgiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYTI2NGU3Y2FlY2FkNTZlZTMxYzhiZjhkZGU5NTkyZjc1M2E2Mjk5ZTc2YzYwYWMxZTkzY2ZmM2IzZGU4Y2U5IjoiOGQwM2NmNmZhYzMxMTgyYWQzZTZmMzJlNGM4MjNlM2I0MjFhZWY3ODZkNTY1MWFmYWZiZjcwZWYxNGMwMDUyNGFiODE0YmM0MjFiMWQ0MTgxYjRkM2Q4MmQ2YWU0ZTgwMzJlNDNhNmM0ZTA2OTExODQ0MjViMzczMjA3OThmODY1Yzg4YjliMzA2NDY2MzExZDc5ZTNlNDIwNzY4Mzc0NzRjMzdjOWY2MzM2ZWQ3NzdmMDVmNzBiMGM3ZDcyYmQ0MzQ4YTRjZDc1NGQwZjBjM2U0NTg3ZjlhMTgzMTNlYTJkMmJhY2U1MDJhMjRlYTQxN2QzMDQxYjcwOWEwNDcxZiI6IjQ3NjNhNGUzN2I4MDZhNWY0NTEwZjY5ZmQ4YzYzNTcxIjoiMDdkYWViYTM3YTY2ZWJlMTVmM2Q2NDUxZDExNzZmM2E3MTA3YTMwMmRhNjk2NjY4MGM0MjUzNzdlNjIxZmQ3MTYxMGQxZmM5Yzk1MTIyZGE1YmY4NWY4M2IyNGM0Yjc4M2IxZGNkNmI1MDhkNDFlMjJjMDliNWM0MzY5M2QwNzI4Njk2MDFmYzdlM2Y1YTUxZGJkM2JjNjUwOGU4ZDA5NWI5MTMwZmI2YTdmMmEwNDNmM2E0MzJlN2NlNjhiN2RlMDZjMTM3OWU2YmFiNWExYTQ4ODIzYjc2NzYyMDUxYjRlNzA3ZGRjMzIwMWViMzY0NTZlMzg2MjQyNWNiMDExYSI6MzI6IjMxMDVkZGRiIjoiRkFJTCI6MAorCitBRVMtR0NNIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMjU2X2VuLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9lbi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZDE2ODkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9lbi5kYXRhCkBAIC0wLDAgKzEsNjc1IEBACitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZiODA5NGRkMmVkZGIzZDgwMDRiYjc5MTM0MDIzY2EyYmU0ZGU5YjY2OGE5ZTQ2MDhhYmRmMjEzMGU4YmVjYjgiOiIiOiI0OTFhMTRlMTNiNTkxY2YyZjM5ZGE5NmI2ODgyYjVlNSI6IiI6IiI6MTI4OiI4MDg4M2YyYzkyNTQzNGE1ZWRmY2VmZDViMTIzZDUyMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjcyNTMxM2Y0Y2IzZjZhMGQyOWNlZmMxNzRiN2U0ZjQzY2VmMTFiNzYxZWY3NWUxOTk1Y2I2NGMxMzA2Nzk1ZjEiOiIiOiIyN2QxZWQwOGFiYTIzZDc5ZmM0OWFkOGQ5MmEyYTBlYSI6IiI6IiI6MTI4OiJkNWQ2NjM3YmEzNWVmMmFkODhlOTcyNWY5MzhkM2QyZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRlNzY2NTg0Y2UwZTg4NWUxYmJhMTMyN2U1MzM1Nzk2ZGUwODMxYTQwZjc0YTVjZWMxNzgwODFkZDE1YmZkMTAiOiIiOiJjZWNlMGRlYTAyNGZmNDc4NTFhZjA1MDBkMTQ2Y2JmZSI6IiI6IiI6MTI4OiIxYWJlMTZlZWFiNTZiZDBmYjFhYjkwOWI4ZDUyODc3MSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNlN2YyMjA3ZjgzYTk1MjQ1MWU3MTRiYTM4MDdkZGIzZWQ2N2MyNzM5YTYyODk4MDQxMWFhNjgzNjZiMWYyZjUiOiIiOiI2NTJmZDk1MWFjZTI4OGRiMzk3MDIwNjg3MTM1YTVkMSI6IiI6IiI6MTIwOiI5ODUyMjdiMTRkZTE2NzIyOTg3YTNkMzQ5NzY0NDIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4NTVmOGZhNGVjNmExMjA2MTczNTA5ZDUwNGQwYjI5ZGZiZmJmYTlhYTUyODI1NGIxODljZDcyZTZlYmMxYzFmIjoiIjoiMWFkMTUwN2U2NDYzZTRlMmUxYTYzMTU1YWMwZTYzOGYiOiIiOiIiOjEyMDoiNjkzMTQ2YThiODMzZjMyNGMxZDRjYmVlYjhjMTQ2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWY4ZGQxMjk0YTg1ZGQzOWUzNjZmNjVlMTA3NmQ1M2UwNDYxODhjMDZjOTZiMmM5ZTg0ZWJjODFmNWM5ZjU1MCI6IiI6Ijk2OThhMDc0NDc1NTJkMWE0ZWNkMmI0YzQ3ODU4ZjA2IjoiIjoiIjoxMjA6ImIwMDU5MGNhYzZlMzk4ZWViM2RjYjk4YWJlMTkxMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI1ODk2ZTU4NzU3MGZmMTgyMzYzOWUxZTUxZTljODkxOTJkNTUxYjU3M2RkNzQ3ZTdjMGMxYzEwOTE2ZWNlNGMiOiIiOiJmMDUxNjQ1N2MwOWMzNzJjMzU4MDY0ZWI2YjQ3MDE0NiI6IiI6IiI6MTEyOiI1YTdjYWRlYzYwMGExODBlNjk2ZDk0NjQyNWIwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDJmYzljZmZmYmU3MmU3OTU0MTgyOTkzMDg4ZTA5ZDI0ZWE4Y2FkOTFhOGNhOWEzMzZkOWYxZmU0MTU2NDg2ZCI6IiI6IjBlMTg5ZTE2MmUwOTdlYjIwNjBiMzBjNDZkOWFmYTcwIjoiIjoiIjoxMTI6IjdkM2Q1Y2M1NWU2MTgyZWM1NDEzZWY2MjJkNGYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMjRlM2Q2MzFkODk2MWQzZDRiOTkxMmQ0ZmE3YTMxN2RiODM3YTdiODFjZDUyZjkwYzcwM2E0ODM1YzYzMmUyIjoiIjoiNTEwNzQwYmZhMjU2MmNlOTljYTM4MzkyMjkxNDVhNDYiOiIiOiIiOjExMjoiMTQwMmRkYzE4NTRlNWFkYjMzNjY0YmU4NWFkMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjcyMGFiNWFjZWI4MGZmMWY4NjQzNzlhZGQ5YjBkNjM2MDcyMjdmN2MzZjU4NDI1ZGQ2ZWMzZDRjZWEzZmUyZWEiOiIiOiI1OGYyMzE3YWZiNjRkODk0MjQzYzE5MmVmNTE5MTMwMCI6IiI6IiI6MTA0OiJlOGU3NzI0MDJjYzZiZmQ5NmExNDBiMjRjMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY1N2RkMTZmYTkyYThmOGMwOWQ4ZjEzY2I1YjY2MzNhNDNiODc2MmU5MGM2NzAyMzJmNTU5NDljZGZkZjcwMGMiOiIiOiIzYjdjMTRlZTM1N2IzYzZiMGRjMDllMzIwOWFiNjlmMiI6IiI6IiI6MTA0OiI0M2U2MDk2NjRlNDhhZDFmNTQ3ODA4N2YyNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg3YzE3YWI5MTlhNGJjMGQ1MDM0M2MwYmIyODJhOTY5MjgzYzJhZGEyNWY5YTk2ZDI4NThjN2Y4OWJjNTEzOWEiOiIiOiIwMjgxM2QzZmFmMzBkM2UxODZkMTE5ZTg5ZmUzNjU3NCI6IiI6IiI6MTA0OiJkMWExZjgyYTg0NjJjNzgzYjE1YzkyYjU3ZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGQ4ZDViNmM1YzkzOGM5MDVjMTdlYWI5ZjVhYjdjZDY4ZDI3ZjNmMDlkNzUxNzcxMTkwMTBkMDcwYjkxZTY0NiI6IiI6IjFkZjFjM2FkMzYzYzk3M2JmZmUyOTk3NTU3NGZmZGY2IjoiIjoiIjo5NjoiNzQ5YWM3ZmZkYTgyNWZjOTczNDc1YjgzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0ZDYwYTE0Y2I3ODkwOTljNzdiODk5MWU3YjBiNDBmNzg3ZDM0NThmNDQ4NTAxZTgxMDhlNGQ3NjExMGY5NGVmIjoiIjoiY2E2YjM0ODVlYjVkY2Q5ZGJmYTdjZmZjZGIyMmRhYTUiOiIiOiIiOjk2OiIzZjg2OGI2NTEwZDY0MDk4YWRjMWQ2NDAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQwNWI2OTA3MTdkZTk5M2FkOTQ1ZDgwMTU5YzI4MDA4NDgwNjBkZTBiN2QyYjI3N2VmZDAzNTBhOTliYTYwOWEiOiIiOiI2MzczMGFjYjk1Nzg2OWYwYzA5MWYyMmQ5NjRjYzZhMyI6IiI6IiI6OTY6IjczOTY4ODM2MjMzN2Q2MWRhYjI1OTFmMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWI1NTYzYTM4N2U3MmQ3ZDEwNDY4Yzk5ZGY1OTBlMWRlMjVlYzEwMzYzYWE5MGQxNDQ4YTlmZmNkMWRlNjg2NyI6IiI6ImM1MTE0MDY3MDFiYWQyMGEyZmEyOWIxZTc2OTI0ZDJmIjoiIjoiIjo2NDoiMzkwMjkxZWQxNDJiYTc2MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWJlZjdjMjRkYWFhMjFmMzA4YTVhZjAzZGY5MzZiYTNmNzBhYTUyNTE5MGFmMGQ5NTlkNmU1MGQ4MzZmNDYyNCI6IiI6ImU5ZjE1OTUwMTMwYjk1MjRlMmIwOWY3N2JlMzkxMDlhIjoiIjoiIjo2NDoiZGIyZmIyYjAwNGJjOGRjNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmNhNjMwYjBiNjc3OWE4ZGU3YTE5ZTUyNzllYWM5NGJmMjlmNzZmOGIwY2Y4ZWNmOGYxMWM0ZjhlYjA0YWEwZCI6IiI6IjczNzNiZWZjMmM4MDA3ZjQyZWVmNDdiZTEwODY4NDJmIjoiIjoiIjo2NDoiZTJiODYyMGJjYzc0NzJhOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWNlYTc4MThhNzFkZjJjOTg0MGFlZjFjMTBlY2JlMmJhYzdlOTIyMTYzODg0MTZhMmYzNjExOWEwNzQ1ZDg4MyI6IiI6IjZkNDZhYTM5ZmI1YTYxMTdlOWFkZjdlZTcyYmM1MGZmIjoiIjoiIjozMjoiZmQ1ZmYxN2IiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIzMDEwMzZkNGIyYjI4YjhhNDUwMjkyNTk4Njg2MWViYTJiNjdjMjRjYjBjNzljNjNmZDYyMTk1ZDliNjc1MDYiOiIiOiJiYjZmMzk4ZTVhZWQ1MTU5MGUzZGYwMmY1NDE5ZTQ0ZCI6IiI6IiI6MzI6IjQ3ZjNhOTA2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4OTU3NmQyYWFjNTU0Yzg5ODJjN2RmMDA1M2JlOWFiMTlmNGJkODBiYTlmM2RkNDMzYzFjMDU0ZDY4ZTY4Nzk1IjoiIjoiYWVkYmQ0ODJhNDAxYTdjMTJkNDc1NTA3N2M4ZGQyNmUiOiIiOiIiOjMyOiI1MDZmYTE4ZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQzYzllMjA5ZGEzYzE5NzFkOTg2YTQ1YjkyZjJmYTBkMmQxNTUxODM3MzBkMjFkNzFlZDhlMjI4NGVjMzA4ZTMiOiIiOiI3OGJlZjY1NWRmZDg5OTBiMDRkMmEyNTY3OGQ3MDg2ZCI6IjlkOGM2NzM0NTQ2Nzk3YzU4MWI5YjFkMGQ0ZjA1YjI3ZmUwNTM5YmQwMTY1NWQyZDFhOGExNDg5Y2RmODA0MjI4NzUzZDc3MjcyYmY2ZGVkMTlkNDdhNmFiZDYyODFlYTk1OTFkNGJjYzFiZTIyMjMwNWZkZjY4OWM1ZmFhNGMxMTMzMWNmZmJmNDIyMTU0NjliODFmNjFiNDA0MTVkODFjYzM3MTYxZTVjMDI1OGE2NzY0MmI5YjhhYzYyN2Q2ZTM5ZjQzZTQ4NWUxZmY1MjJhYzc0MmEwN2RlZmEzNTY5YWViNTk5OTBjYjQ0YzRmM2Q5NTJmODExOWZmMTExMWQiOiIiOjEyODoiZjE1ZGRmOTM4YmJmNTJjMjk3N2FkYWJhZjQxMjBkZTgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmYmUyZDUyYjdmNTBiZjIzYTE2ZmY4Y2Q4NjQyMTUwMzRmZGZiZjRkMTUwNmNhM2MxZmZiMDE1NjUzZWZlMzNhIjoiIjoiYjE1NWY4YWIxYThjMDMyNzc4OWNmYjgzMTAwNTFmMTkiOiJlZDhkMTRhZGYxYzM2MmJiYWYwZDU2OWM4MDgzMjc4ZTgyMjVmODgzZDc1ZDIzN2E0YWJjZDc3NWE0OTc4MDYwM2U1MGMwMGExYjViNTk0NmMwODVlNTdhNzQ5YjQ5NDZmNmFjYTk2ZWRhMDRhYzk5NDRhN2QzZDQ3YWRjODgzMjZlZDMwYTM0ZDg3OWRkMDJmYjg4MTgyZjllMmRlZWZhZWVlMWMzMDZiODk3NTM5ZmE5MDc1YmRhMDNiYTA3YjRmZmZmNzFjZTczMmVmM2M0YmVmYWMwZjE4Yzg1YTA2NTJkMzQ1MjRjY2IxYTQ3NDdhYjhmNzJlZDFjMjRkOGZjIjoiIjoxMjg6ImM1ZmUyN2NhOTBlNWM4YjMyMWNjMzkxZWU3ZjFmNzk2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGU4ODg3MjE1MTRmZDAxZmI2NzUxM2NiNTZiZmQyOWFmNjdhOWNlNTI1ZTNlNjk3YWY0NzQ1MGYwMjA1MzE2MSI6IiI6IjlmNmJkNGE5M2U0ZjNmMmY1ZjRhN2MyYzViNDc5MGJmIjoiODY3ZDUwOTIzOTY3NTM1Y2U2ZjAwMzk1OTMwMDgzNTIzYzIyZjM3M2NmYjZjODgxNzc2NGY1NjIzY2Q2MGI1NTU1NzI0MDRlNTRmMmZlNzA4M2VmMzJiOWE0NTkzYTFmNzBhNzM2ZDZlOGZlNjFiNzdkZWY1MWYzYjFkOGY2NzlkM2E4ZDUwZDBhYWQ0OWU1MWVjMWViNGQ0YTI1ZjEzZDE0ZjNlNTI1MzU1NWM3M2VhYzc1OWU0ODRjNjEzMWNjODY4YjQ2YzE4YjI2YWNkMDQwYzNlMWNiMjdhZmVjYmE3YjdmYzNmNWZmNDg4M2Y0ZWFmYzI2YzdmMzA4NDc1MSI6IiI6MTI4OiJlYTI2OTA5NDMzMGI2OTI2NjI3ODg5ZmNkYjA2YWFiNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ4ZjgyYjA3ZTczMTljYTYwN2M5YWEwMzUyMDcwY2E4ODNkZDdiMzJhZjM3MGE3NzRmNjNiMDI3MGY0NDgzNWEiOiIiOiJlODllNDQ4NDQ5N2NiNzI4Zjg2NTg1ZDg5MThiN2ZhZSI6IjQyMzQwZDk2ZTE4NTJkZTNlZDVlMzBlYjRhMDVlMWZiMjIyNDgwYjQ1MGUyYmY0ZTJjZjBmYjJhNTI1ZWI2NjAyZWY0M2E4OTZhZGM1YzUyZWE1MzgxYzY0MmIyMTc1NjkxYzAxNGU3YTZkYWU5MWZhNmZmNWI5NWMxOGEyZGQyZTg4MzhkM2FiZDQ2YWNlMGIzMDVmM2YyMmQzMGEwYmQ4MmE4MWJiZjY3NTMzNjJiNTRiMDYyNGM3NmMwZDc1M2UzMGViNjM2MzY1ZjBkZjdlMWJmOGJmMTMwY2YzNjA2MmVjMjNmNThhM2Y3ZWQwYWU3YmZiYmQ2ODQ2MGNkNzYiOiIiOjEyMDoiYjIzNGIyODkxNzM3MjM3NGU3ZjMwNGYxNDYyYjQ5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjQ5YjA0YTU0YTA4ZDI4YjA3N2VhNTRjMThiZmE1M2U5MTY3MjNlOTE0NTNiNDdmODhlMzk5MDQ2YjliNGRjYyI6IiI6IjYyNzZjNTc3YzUzMGY5MWI0MzRjZTU3MTllMWM1OWRlIjoiNmI3M2Y5OTZjNDllMzY4ZmM0ZDIxODE2MTUzYWVmYjA4MTUwOWY5ZGMwOTE2ZGJlNGZkZjc3ZjM5ODY3YTJiZDYxN2I4YTc1ZjM5ZjUxNWIxYmMxNDU0MDA5ZDUyNDdlZmNkOTBiYTBkNGE2NzQzYzZmMTJhOTI5YjY2NjU4NGYzYjU1MjU0YzMyZTJiYWIyMzIxZjk0ZmE4NDNkYzUxMjRjMzQxZGQ1MDk3ODhhMTU4MTkxZWUxNDFlYjBiYzRlMWI5NmY2OTg3YmFmZTY2NGEwZjlhYzZkODVjNTljZWU5NTY0YTI3YmNjMzdkZmZhZTgwYzU3ZmJmN2U3NDhjZSI6IiI6MTIwOiI2OWRkNWJkZWIxNWZkYmMzYTcwYzQ0YjE1MGY3MGUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzOThiYjM3YmI5OTE4OThjN2RhZDdiZjU5MzBkYmFkMjBkMTIxZjY4ZDVlYzZjNTZmZmU2NmYyM2MwYzM3ZjhlIjoiIjoiMGMzYmQ1NWI1NGMxMjIxYjBjZjI1ZDg4ZWE0ZGZlMjQiOiI0YzQ4YjkyOWYzMTE4MGU2OTdlYTYxOTljZDk2YzQ3Y2VjYzk1YzllZDRjNDQyZDZhMjNjYTNhMjNkNGI0ODMzNjAxYWM0YmJjZGJjMzMzY2QxYjNhMGNkOTAzMzhlMWM4OGVmODU2MWZlZDdhZDBmNGY1NDEyMGI3NjI4MTk1ODk5NWM5NWU0YzlkYWFiZmY3NWQ3MWUyZDU3NzA0MjAyMTFjMzQxYzZiMDYyYjZjOGIzMWI4ZmU4OTkwNTg4ZmJhZDFlNjUxYTQ5YjBiYWRkOWE4ZDgwNDIyMDYzMzdhMWYyYWE5ODBiM2JhM2I1ZWU4ZTMzOTZhMmI5MTUwYTM0IjoiIjoxMjA6Ijg1Mjg5NTBiZDUzNzE2ODFhNzgxNzZhZTFlYTVkYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhlOGY3YzMxN2IyMmRlYThlYWJlN2VhYTg3NDEzYTk4ZmY1NjU3MDcyMDk4NWI2NzQzYTVmOWFmNTYzODdjY2EiOiIiOiIzYTlhNWE4MzkwNDU3MjNhZmRmYjJkNWRmOTY4YmZjYiI6ImE4N2Q5NWY4ZjQ3ZTQ1YTFjN2M1YzU4ZDE2MDU1YjUyYjMyNTZjNTI3MTNmZDA5MmJjZDZjYmM0NGUyYzg0NjY5ZjIzY2EyYTE5ZTM0MTYzZWUyOTdmNTkyZjYwNTRkYmM4ODg2M2E4OTZjMjIxN2U5M2E2NjBkNTVhNmNkOTU4OGE3Mjc1ZDA1NjQ5OTQwZDk2ODE1YzdkZGZhNWZjNDM5NGM3NTM0OWYwNWYxYmNhZmY4MDQwOTU3ODM3MjZjMGVjZWI3OTgzM2E0OGNlZmQzNDZiMjIzZjRlNTQwMTc4OTY4NGU1Y2FlZGExODdhMzIzOTYyYTFmMzJmNjNmMDIiOiIiOjExMjoiZmFhZDZhOTczMTQzMGUxNDhhY2UyNzIxNGU2OCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY3Yzk1ZTU3MTk3ZjBlMGJiYWFhODY2ZDMzN2ZjYzM3ZjNhMTBkYzU1YTA1OWY1ZWE0OThkZTIwNGQyZmZmNjEiOiIiOiI1ZjE3MWQyMDNjNjUzYTMxNmNhYzQzZGY5OWY0MDMzYSI6Ijg0ZjI4MWIzODhjYTE4YmM5NzMyMzY1N2E3MjNhNTYyNjA3MzEyMzQ3MjBiMDJiNmRkZTAwZWExMzRiZDg0YTE4OTNiZWMzOGFmODAyMTRjNGRhMDFiOTM5NThhYjAwZjNiNjQ4Yzk3NTM3MWU1NjVkNWI2YmYyYThmNjNjMGYzY2ZjZDU1N2M5ZjYzNTc0MzkwYjZhZTUzMzA4NWFjYTUxZmE5ZDQ2Y2QyNDc4Yjc2NDhiNmRjYmJhYzdlNjExOTdhNDI1Nzc4ZGViZTM1MWFjMjExMGJhNTEwYTE3ZTJjMzUxYmE3NWQ1YTc1NWVmNTQ3Y2Y5YWNjNTQ2NTAyMjIiOiIiOjExMjoiOWVhOWM3MTZlMDZhMjc0ZDE1YTM1OTVhMGM0MSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkxNDNmMDBlMzFjNzJiZDlmY2VkMzE1ODVkMDQ3ZjY3ZjEwMDRlNjI0NGMzZDljMTBjOGFlMDA1ZmVlYWJjODQiOiIiOiJlNDljZDZhZjlhMmYwZGEyYTcxOTgzMTdkYTkyYWIyZiI6ImFiOTE5M2ExNTUxNDBkMjY1YWFiZmUyZGQ1ZWZjYTdkM2ZhNjEyOTQ5ODUzMmJjY2Q3N2YwOWZhMWE0ODA3MDI2MjBiM2FiNTNkZjkxYjAxMjYyMTIyZjFhNmZjMzg3YjVmYzU1ZGFkZmNkYjk5YWRhODNkNGE1YjA2NjZjODUyNmRlMzA5ZjQxZWI1NGQ2OWI1MjU5NWM0MzU1MGE2YmY3YjRiOGYwZTBjNDgzMTFiNTIxNzYyZWFhNTY3NzQ0YzRjNDcwNGRkOTc3Zjg0MDY4YjU5ZGI5OGE2N2UzM2NjNjUzMDJiYTU5MzYwZDYwMGEyMjEzOGM1YWQzMzE3ZjMiOiIiOjExMjoiODI5M2UzNjFmZTAzMDhhMDY3Zjg5YWVhMzkzZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQwYmExODAwNzVjMzczMTE2YmIwMzc5MDdiNTEyYWRkMDBiYTlhNDY5M2E4ZWNjMTRjYTBkNzlhZGFkYTkwZTMiOiIiOiI1YzE1MDFiMTljY2U1NDA0ZGNjYzkyMTdhYzgyNTNiNyI6IjNhMTYxNjA1ZWMwMDU1YzQ3OWRkNDhjZGFlZWQ1OTgxYjhiNjBmYjdiNzc4MWNjNGU1ODAyMThjNzAxNGMzMDYwYTlmNzA2ZTZlMTZjZjQwMjFlNGQzOGRlYjUxMjUzNGI0ODRmZjIzYjcwMTk3NWJkZjkwMTE0NmNjYWVjZTljM2ZmYmJlZWIxNzJjZmI2NGE5MTVhZTBkYmU3YTA4MmI5MDc3Nzc2YTM4N2I1ODU1OWE4ODFiOWI3OWI5MGFhMjhhZDFhYzBmMmJlY2UzMTQxNjlhMmY3OWVhNGMwODM4OWY3ZjdkZDEwZWUyZDlhODQ0ZmVlNzllN2JmMzhiY2YiOiIiOjEwNDoiMDU0MTI2MmZkZGZkNWQwMWZmMGYzYzJmYjQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjOTc1YzdlNTkxMzNjMjMxZDFiODRjNjk2NzYxYzQxM2JhMjBhZmY3ZmI3ZDg1NGM2OTQ3ZTY1ZGIzY2M1N2I0IjoiIjoiZDhmZWRkYTRjY2NhZjZiMDgxOGVkY2ZhN2IxZjAzZmEiOiJjYjRjYzkxNzEzNjdkNjQyMmFiZmFmMmI0NDUyZGEyNjdlYjljY2YxYzRjOTdkMjFhMGExMjVkZTQ4Njk5NzgzMmQxNmM3ZTQxMmNiMTA5ZWI5YWM5MGM4MWRmZTFhMWRkOWY3OWFmN2ExNGU5MTY2OWI0N2Y5NGUwN2Q0ZTliZDY0NWQ5ZGFhNzAzYjQ5MzE3OWNhMDVkZGQ0NTQzM2RlZjk4Y2Y0OTlmZjExODQ5Y2M4OGI1OGJlZmJkZDM4ODcyODYzMjQ2OWQ4YjI4ZGY0NDUxZmM2NzFmNGEzZDY5NTI2YTgwYzJlNTNlNGZkZWU2MzAwZDI3ZDk3YmFmNWY0IjoiIjoxMDQ6Ijc3YWMyMDVkOTU5ZWMxMGFlOGNlZTEzZWVkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTg2ZWM2ODgyMjJjNTBjMDcyNzRlZDJkMmM4YWU2Zjg4M2UyNWY4Zjk1ZDQwNGE3NTM4ZmQ4MzIyNDE5OTMyNyI6IiI6Ijk5YzczZmRiOGY5N2YyMjVmN2ExN2NmNzljMDExMTEyIjoiY2Y1ZjcwN2RlMDM1NzI2MmMwOTk3ZmEzZWJmZTZlMDcxOTJkZjhkYjVmMDI5ZTQxODk4OWU4NWU2YjcxZTE4NmIwMGM2MTJlY2VkYmZlM2M4NDdlNTgwODE4NDdmMzk2OTczMzdhZTdjODE1ZDJjZDAyNjM5ODZkMDZiZjNhNWQyZGI0ZTk4NmRiZTY5MDcxZmQ0YjgwYTU4MGY1YTJjZjczNGZjNTZjNmQ3MDIwMmVhMzQ5NGY2NzUzOTc5NzI1MmQ4N2NkNzY0NjI5NjkzMjk1OWM5OTc5N2EwNDQ2NTMyZjI2NGQzMDg5ZGQ1ZjRiY2NlYWFhNzI4OWE1NDM4MCI6IiI6MTA0OiJjMjA5M2FkNDcwNWU2MTNiMDllZWU3NDA1NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDM5ODFmMGFhMWVkOGNiMzY5ZDliMGQ3YjBlNTI5ZWM2MDg5ZmYyZDIyNmM1NDI4ODViMWJmZjU1Mjc2ZTg5MSI6IiI6IjczMzFmOTFiZDFhNjdjMjFjOWRkMzM2YTJhOTIyODM5IjoiNDA2ZDljZjQ1ZmM4NjE4ZDU2NDE1NDI0MWRjOWMwMDZlY2RjZDg0NzQwNmU1YTZlNzEyN2FjOTZlN2JiOTNmNGMzMzlmZjYxMmM1MTRiNmY2NmRmOTVhMDg0NTAzNWQ3NTM1MjEyYTJhYWVlYjBlZTUxMmQxZjQzNzVjOWE1MjdlNGU0OTkzODljMmQ3ZjdmNzQzOWM5MTNlYTkxNTgwZTczMDM3NjdiOTg5YzRkNjE5ZGY3ODg4YmFmNzg5ZWZkNDg5YjA4ZWRhMjIzZjI3ZGE1ZTE3N2NkNzA0YzYzOGY1ZmM4YmYxZmVjZmNkMWNhYjRmNGFkZmJjOWQxZDhiYSI6IiI6OTY6ImRiYjdlYzg1MmM2OTJjOWEwZTFhNWFjZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODQzNjk2N2Y5N2M1OWNhNzNiNzYwYjczYzZlMDg4ZDFkYTRlNzZiNzEyMTg4YWI0NzgxZDhkODQ5NTA1YWU0NyI6IiI6Ijk0MDFkZDA5OTg5MTQ2NDU2NjhkMDZkNTE4YmZlN2Q3IjoiYTVmNDA5MDYxNzc0MTcwOTdjMTlhMGEyMWRiYjQ1N2E2OTRlMTczMTQxODM3ZjY5NWIwOWM4ZWI1OGFjMmNlMjhhYWNlNGU1OTI3NWI2MjY2ZGE5MzY5YTk5MDViMzg5ZTk2OGFlZmM2NGQ3OGM3ZTFkMmYwMzRlZjQxM2QzNDU4ZWRjYjk1NWY1Y2Q3OTcxYzI4Y2Q2N2RjOTkwMWVmM2EyYWJjNjEyMTcwNGJiNWVjZDg3YTY1NjhkMDUwNmFiYmM4N2EyZjEwMjA1ZGM4ZWIwY2QxYjUxMDkxNThkMGU3NDNjMmMzYTM0MmQ2MGI4ZDU1YmJjYjhkODUwN2VkMSI6IiI6OTY6ImRkNmQ5ODhkMzUyZGVjYzRlNzAzNzVkOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2U2Yjg0NmJjZWRjNmFlNzQ3ZTY2ZTcyY2Q5Zjc2NjRlNmNhZDk2MjdiYTVmMWYxOTIzZjNkM2E2ZWQ1OTBkMSI6IiI6ImFjODY1ZmY4YTYyNTVlNTAxYjM0N2E2NjUwNTEwZDA1IjoiMTY1OGI5Zjg0NjlhZjFkZmE2MDQ1OGNmODEwN2RiMWVkZDFlNGJiYTcwYTBiZDIzZTEzZTFiYmEwZDM5N2FiZjUxYWY4MzQ4Zjk4M2ZjZGZjYzgzMTVlZjFmZmM5YTI2MzcxMzc3YzYyZGRiYTA4MzYzYmQyYmYwZmY3ZDBjM2I2MDNmYWQxMGJlMjRlY2VlOTdiMzZkMjI1NWE4YjJlZmM2M2YwMzcxMjNjZWY0YmI0ZmUzODRhYTBjNTg1NDhiMmYzMTdjMzZlZjNlZjIwNGIyNDc2OWRlNmJhM2U5ZDg5ZTE1OWUyYmYxZjlkNzlhZWIzZWI4MGM0MmViMjU1ZSI6IiI6OTY6IjdlZTg3YWNkMTM4YzU1ODQ1NWZmZjA2MyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDAzOGVjZjE0MDdiYmYwZDczYWZhNWUwMTA3NjliNzFlODY0OWM0MjQ5MzQ1ZGNmOTIzZWY5ZGEwMjU0YzZhZiI6IiI6Ijc0YzZiOThmYzZjZWQzYTU5YmQ5YzQyZDMxZDcxMDk1IjoiNDY3ZjQ4M2M3MWMzNDA0ZmU3ZjA5ZDZmNmI2YjY0YzNiNzYxM2EwZGQzMjQ3MGNmMjRiYzU5MGQzOTk0YTQ4ZjNlOGNkNWRjMTllYThjYTdkNTM2NmFkN2M1YWQzMWNjOTYxMmRhZmVkYWVhMTA5ZGRlMmFlZGZlNWZjMmEwZGIyYzkwM2RkMWRjMWExMzk0OTcyMGExMGJhYmYzN2ZiYTVhMGVkN2NiNWYzZGM5ZWI1YTRkODMzMWYyMThlOTg3NjNlNzc5NGIzZTYzNzA1ZDQxNGVmMzMyMTYwYjBiMTc5OWYxZmY1Y2JlMTI5YTc1ZTVjNGUwYTRlZDM1ZTM4MiI6IiI6NjQ6IjYyZmUwODhkOTEyOTQ1MGIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5ZmM0YzIyMTUxZWU4NTE1MDM2YzM4YmM1OTI2YzBlMGJiZDkzZGI1ZDBmYzUyMmIyYTZiZjYyOThmZWQzOTEiOiIiOiI5NTQ3ZjA1NmM2ZmI5ZWY3MmI5MDhmNTI3Y2I1MDBjMSI6IjUxMWIxNWMyNWIyYTMyNDE1OWU3MWMzYjhlNDdmNTJkM2U3MWU1YmMzNWU3NzRjMzkwNjcyNTBmNDQ5NGM5YzRlYjE4NGVjYmU4NjM4ZGU5NDE4NjcyZDlhZTJjNmEwZTdmNTRjMDE3ODc5ZmZiMmEzNzFkZTE2Mzk2OTNkNjU0YTQzY2I4NmU5NGE3MzUwNTA4NDkwMTkxNzkwZDEyNjViOTllN2IzMjUzODM4YjMwMmFhZTMzNTkwOTQ5YTg3NjFhM2JiMmFlYjFiYTc5OGNkZGViMDBhNTNkYWFkMDVhMzMzODlkNGExOTI2OWQ2NTExNmE4NGYxMmRiYTU4MzAiOiIiOjY0OiIwNDYyMzkxMmJiNzA4MTBlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzYjVkM2IxOTIwYjVhMTA1YjE0ODE1M2FlMWYxMDI3YzZkNDhiYzk5NjQwZWE4NTNmNTk1NWZlZDRlYjNkNjI1IjoiIjoiOWE0MDkxYzJlYjdlODg3NTliZDkxNjlmZWUzMDM0ODUiOiJhYTY4MGQwNzE0M2JhNDlhOTA5OWQ1NTUxMDVmYzNjZmNiODk4Y2VjMTFhZGU5Njc3NmRjOTc3OGNjNTBmZTk3MmUxZTgzYzUyYzgzN2I3MWUyN2Y4MWQxNTc3ZjliZDA5YWZlMjI2MGRmZDlhNWQ5ZGZiZDNiOGIwOWEzNDZhMmFiNDg2NDdmNWRkMmZmNDM3MDBhZWNjZTdmYTZmNGFlZWE2ZWEwMWIyNDYzYzRlODJlYzExNmU0ZDkyYjMwOWM1ODc5ZmI0ZTJjYTgyMGQwMTgzYTIwNTdhZTRhZDk2ZjM4YTdkNTA2NDNhODM1NTExYWVkZDA0NDJiMjkwYmUzIjoiIjo2NDoiMDMzYmZlZTZiMjI4ZDU5YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjZjNGFkOGUyNzc2NDE1Nzc4OTI1MmY0YmM0YTA0MTQ1Y2I5NzIxOTU1MzMwYTJmNmEyYTNiNjVjYWNmMjJiYyI6IiI6IjNkZTEzNmNiZDc1MDYxYzg4ODIyNmVmYWIxMzY4NDlkIjoiMGY2OTUxYzEyN2Q2YmM4OTcwZTJhZDI3OTllMjZjN2ZiOWNhMzFkMjIzMTU1Zjg4Mzc0OTg0YjU2NjA2MjZjODMyNzZmZmE2YzE2MGY3NWUwZTFiY2ZhOTY2MTYxODhmMzk0NWIxNWZjMWI4MmE0ZTBlZTQ0MDAwYTY4NGIzYzM4NDA0NjVhZWJlMDUxMjA4Mzc5ZWYzYWZlOWY1NjllZTk0OTczZDE1ZjBhNDBjNmY1NjRmYTRiYTExZDZlMzNjZjhhZTE3ODU0YTllMTIzNjBhMmI4NDk1ZTJjY2VlYzQ2M2Y1ZTM3MDVjNzQwNjliYTM3YmE2ZDcyNWY0NThjMCI6IiI6MzI6ImY2NThjNjg5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMGNkOTlmZWQ5NzA2YzQwOWUzNjZkNDdmZWZjMTkxZjc5YmNjNDdhMjhiZTc4Zjk4OTBmZDkwZDQ4NjRlYjg1IjoiIjoiOGM3Y2UzNDY5MTUwM2JmMTRjNzc2Zjg4MDlmMjRlNjEiOiI0YjZiMTBjMmUyOTA1YWIzNTY3NjliNjQ1M2RkMTYwYTA4ZTg2MjNiMDg3OGZjYzFjMWQ2NDgyMmYwYWVhMWY0ZjViNDY5OGRlZDVkMjNlYmFmYTExYmMxZTRjZTllNWNkN2Q3YzdiMTNkZTAyZDExYTk0NWJhODM2MWIxMDJiYTQ5Y2RjZmQ2YTQxNmUzZGI3NzRjZDdiZGEwMjRmY2NkMWFkMzA4NzU2MGRjMTViYmZlOWIxYTVjNmM3MWZhZTE3YTMyOWYxMDRmNmMyY2JhN2ViNmE3NDU5NTM1Y2EzMjgxNDZkMGNjYzBhOWJkMjhhM2QxYzk2MTk0N2EzODc2IjoiIjozMjoiNzc3N2MyMjQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk0NzJmMjQ1MjkzM2RjZmFjNGJiMjI4MzFjZTgzYzZhMWRkZjI1ZWY4ZDJkM2JhNTlkNzJiMGQxNzNhOTg2ZTgiOiIiOiIxOGZiMmMzNGIwOTU1ZDcxMjk2MDAwOTYxN2QzMDBlZiI6ImQyODNkZDc1Y2Q0Njg5YzI2NmM4ZTBiNGI2NTg2Mjc4YWEyNTgzYzdjNDFiZjEyYmQxY2ZkZWYyMWQzNDlhY2JiYWJjMGEyMjA0ZGM0MTMwZjkyMjk0OTIwNmM0ZmJkY2UzNzg2YWI4NjE0ZTMyOTA4ODM4YTEzYjY5OTA0NTNhYmYxNGI4NGY1ODEyZTYwOTM2NDRhY2NkZDM1ZjdhZDYxMWVhMTVhZWZhZTI4YjNjZjFmYzVkYTQxMGJjZWE0ZjBhNTBkMzc3ZmRjY2VmZmU0ODg4MDViYzVhNzFmYWIwMTliMTJmYTg3MjVkNmU3YzkxZTZmYWYxMmZiYWY0OTMiOiIiOjMyOiJjNTNiMTZhMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUwNmQ1MzE5MjEwZjQxMDdlYTcyNjdmYTJlODE4M2ZjYmY3NGZkM2IwNTc5Yjg1NjU3NzE3N2Q5Y2IzMDdkNDIiOiIyYjkxNzlkMjFjYjg4NDU4MWIwZTRmNDYyNDU1MTY3ZjFmNzg5OTcxNzI0NWQ0YWVkM2Q4ZGI1OTgzZGFjY2NjZWJmYzIxMzBhMjBjMjg0NTYzYmVhNTk5N2NjMDQzOGM4M2Q4ZmE3YmI5ZTM1ODhlZmVkMjg1YTBmY2MzMTQ1NmRjOWEzMTIyYjk3YmIyMmY3ZWRjMzY5NzM0NzU5MjU4MjhjMzIzNTY1ZTQxN2VjOTUxOTBkYjYzYjIxODgxMDE2YjUzMzJmMmU0MDBiYjQ3MjRjODZhOGVlMDI0NzE0OTM3MGVlNTQxMmY3NDNkYzZiZjdjYTViY2MzMWFmYTBmIjoiZjJiMDU2NDcwNTQzMGJjNjcyOTY0YjA0OTExNWUxMjIiOiIiOiIzZmEzNDJhNzZjYjVkNTAxZTZhNmZhZGUxNGFhYjU0YTc2NjIwZTRlYTIyODcxNDdkNGNhMmI5ZDYyZDJhNjQzNTkxZTVkZjU3MGVmNDc0ZWU4OGFkMjI0MDFjMTA1OWUzMTMwYTkwNGU5YmYzNTljNGE2MTUxZmYyZjNlNGY3OGVmMjdhNjdkNTI3ZGE4ZTQ0OGIwZWY1Y2RjZmVjODVmMzUyNWUzNWY4ZDAyNDU0MDM4N2U0Y2RjYjEwMThjMjgxYTFhZjdkNGEzNjg4YTBmZWM0ZDlmNDczYzgxNmY3ZDRjNGMzNjlmNzBkN2RmZThmMWI3ZmE0ZjU4MTA5OGExIjoxMjg6IjE4ZjE4NmVkMWVlMWY0ZjhiMjlkYjQ5NTU4N2QwYWIwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGRmYTgzNGU5OGI2YzUxZWU5MjVkZDllZGM5YmU3MmMyMDlkZGNkOTA5OWRlZDU3YjUzM2YyMjM2ODk1YTIyOSI6IjdmNGU0ZjExMDkxYmY1MTk3NmMwZmM3MWVjYmNkMDk4NWNkYWQyMTM1NTQ5YzgxOGMwOTU2NzgwMWQ4YTlhNDJjNzE5YWFiN2RjMmNiNThhMTBiNTA2N2QxNGM1MmNhYmU2YmI5YjkzOWU3YjljZDM5NWVhZjEwYmE2YTUzZmQyZTY0NDZlMWU1MDE0NDAxMzRlMDRlNjYyZWY3ZWJiMWM5Yzc4YmJkM2ZkN2NiOWRlOGI5ODU0MThiZTFiNDNlYmI1ZDc5MDJjY2I0YzI5OWMzMjVjOGE3Y2MxZGU5MTc0ZjU0NGJjNjA4MjhjMWVlYmFkNDkyODdjYWE0MTA4YTAiOiJhMTAxYjEzYjIzOGNmYWM2OTY0ZmQ2YTQzZGFlYTVhNyI6IiI6ImJjNjBkMjA0N2ZkODcxMjE0NGU5NWNiOGRlMWZmZDlmMTNkZTdmZGE5OTVmODQ1YjFhNDI0NmE0NDAzZjYxY2E4OTZiZDYzNWExNTcwZDJlYjViODc0MGQzNjUyMjVjMzMxMGJmOGNlYTNmNTU5NzgyNmM2NTg3NmIwY2JjZmEwZTIxODE1NzViZThlNGRkMjIyZDIzNmQ4YTgwNjRhMTBhNTYyNjIwNTY5MDZjMWFjM2M0ZTcxMDBhOTJmM2YwMGRhYjVhOWJhMTM5YzcyNTE5YjEzNmQzODdkYTcxZmVmZTI1NjRkOWYxYWE4NWIyMDZhMjA1MjY3YjRjZmE1MzgiOjEyODoiYzRjYzFkYmQxYjdmZjJlMzZmOWY5ZjY0ZTIzODViOWUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZTU5MTQ0YjExNGFjNTU4N2E3YTgwNzlkYzBlMjZmMWIyMDMzMzhiYjNlNGIxZDFkOTg3YmRkYzI0MTUwYTgyIjoiYmM3YWExYjczNWE1ZjQ2NWNmZmVjY2Q4ZGQ0YjBhMzNhNTcxZTlmMDA2ZGM2M2IyYTZmNGRmMjcyYTY3M2JiMmNjMDBlNjAzMjQ4YWI2YmU1NjI3ZWViYzEwOTM0ZmU0ZDFkYzVjZDEyMGE0NzU5MzZlZWZhMmM3YmRkZWE5ZjM2YzZjNzk0ZDJjNmJkMjU5NDA5NGU1NmNhYzEyZDhmMDNlMzhmMjIyYTdlZTRmYzZjMmFkZmZlNzFjOWMxMzAwM2UzMDFjMzFmZjNhMDQwNWRkZTg5YmIyMTMwNDRkNDE3ODJjNGJiNGViM2MyNjI1OTVkMWMwZTAwNTIyMDQ3YyI6ImZkYzVhNDA2NzcxMTA3MzdmZWJhZTQ0NjViMWE3NmNjIjoiIjoiMDg0YzMxYzhhZWY4YzA4OTg2N2Y2ZTBjZTZlMGFhZGFmYTMwMTZjMzNjMDBjYTUyMGYyOGQ0NWFhYzhmNGQwMmE1MTliOGViYWZkMTNiOTYwNmFiOWRiNGYyNTcyZjM5NjA5MWJjNWExZDk5MTAxMTljYTY2MmQ0NzZjMmQ4NzVhNGFiNjJkMzFmZjVmODc1Njc4ZjI1YTQ3NzVmYTdmYzg1YjFhM2Q0NDJmYjJjNTA0N2EzZDM0OWQ1NmQ4NWY4NWYxNzI5NjVlNjQ3NzQzOTA0NTg0OWEwYjU4MDE0ZDlkNDQyZTJjYWU3NDcwOWVkODU5NGYwZWMxMTlkMWQzOSI6MTI4OiI0YzM5ZTBkMTcwMzBhNWYwNmVjZDVmNGMyNmU3OWIzMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU3YTZiNDU5YTUzNzBjZWVjNGQ0MjliYmE5NDcyYTQ5ZGIwNzY5N2RjNjZkYmMyZjI5NGQzZTYyZmZjOGFhYzEiOiJjYjk1OWU1NjExYTYzNjMxN2ZlYjUyNjVkMzNiMzE1YzJmNWFmNjQxNTkwMjlmMDAzMmUzMzhiYWJiZGIwYTUyNWJhNmI5MmNiM2JlN2RiOWYwMDc3NTYxZTZjZmZlMTI0N2JhZDMyZGVhODkxOGY1NjJkYzNjZDgzMjI1Y2RiY2FlZDY1MmI4N2M2MmZlYThlZmYxNTM2MzhhM2ExNGVmOWY5YTg4YmNjOGM5YTZiNjVmYTlkY2M1M2Y2M2QxYjE0ZmI5YmIwYmFmMTdlN2JmYjk1NjkwYzI1Y2NhMmMzMDk3NDk3ZTQxZjdlMjI5OWE4NTE4ZDVkMWM1ZjYyNjRlIjoiOTI0NjhkNDJhZDM3N2FmZmE3ZTgwOGQ5NWQ4YzY3M2EiOiIiOiI1OTlkYmM0N2UyZjJlM2IwNmI2NDFjNTEwYjIzODQxN2IwMTg2OWYwZTdkMDg2MTk3NTJmNmQ5ZjRiMDg1ODU3MzFkZWFlYjQzOWZmMjZlMDJkN2U1MWI0NWNhNWUzZDRhNzc5ZmU0Y2ZjOTU3MmQxZDY0MDdmOThkZTY5YThmY2E2MGJmMDFkMWE3NjkxMzBiYjM4YTY3OTMzYTJiZTNhYTNlYTE0NzBkOGYzMmEzNGRjODYzZGM4MDBmZWI3ZWY3MTU4OGVkZDk0ODliZDU5YTIzNjg1ZmY1MzU4ZjliNTYyZmMwYmJhZDllMTFkYjdhNmZlZGJkNzkyMjU1MzlkIjoxMjA6ImU4NTMyNjJlZDQzZTRkNDBmZWE2ZjM4MzVkNDM4MSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk4MTg5MDRhOTllM2Q4MGM5NWRjNzFhMTY0ODNhZGUxYjliOGU3ZGY2MzhjZTZhNGMxZDcwOWEyNDQxNmNiZTkiOiIyYzA3M2NkYzExYThkNThmYjU1ZTFkYWRiYmMwMzcyZGRlODZjMzg3ZmE5OWM5MjQ5YmQwNGNiMmYyZDIzOWRlMDFiZWM4Yzg3NzFhOWZiMzM2NjRlZTA2ZWE4MWMzN2E4MjQ1MjU2NjQwNTQxNzNiNjNhMjg5NGQ4ZDdmZmM2MGI5ZTkzMDUyODAyNDc4YTE4OWJlNTgzNWQ5NzlhMjhjZTcwMjViMjE5YWRkMDYyMmY5N2M5YmNmM2VjZjYyOWI1NjQwOGVkMDAyYTE0MTA2MTMyMDQwMDQwOTM0NWU5NGE3YTdlMzkwNjYxMTMwNWY5NmYyYWJjOWQ2MmNjNDM1IjoiOTZhMzAxYWI2YmMwMzA5YmU5NzM1YmQyMWNjOWUxMGQiOiIiOiI0ODc2ZTQ0OWIwY2FjMDlhMzdiYjdlNGI4ZGEyMzhmNGM2OTlhZjk3MTRlYzRmY2YyMWEwN2M1YWVlODc4MzMxMWExMzE0OWQ4MzdhOTQ5YzU5NGE0NzJkZGEwMWU4YjZjMDY0NzU1YjYzMjhlM2VmOGQ2MDYzZjhkOGYxOWNmZGEzMTQ3YjU2M2IwZjVmYjg1NTZhY2U0OWNiMGY4NzI4MjJhNjNiMDZmMjYxYjY5NzBmN2MxOGJlMTkzNzJhODUyYmVhZGYwMjI4OGMwYjQwNzk1ODdjMGY4ZWFiMTg1OGVlZWMxMWM2YmE4ZDY0NDQ4MjgyMDY4ZmRkZDhhNjNkIjoxMjA6ImUxZThiNjJjZTQyN2U1MTkyMzQ4YjFmMDkxODNjOSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjliMzRmMTM3ZTNmMzdhZGRhZDhhNjU3M2I4YjZkYWM5YTI5ZTk3ZGI1M2MwYTc2MTBmMzdjNzJhMGVmYWViZmEiOiJjMWUwOWM0MzJjNjhhMmMxMTlhZWIzYjE5YzIxMTgwZTNjOGU0MjhlMTIwMzNmNDE2YTkyODYyMDM2ZjVlOGEzOWE4ODkzYjEwZmU1NDc2ZTM4OGQwNzkxNDNlZTBiNzliMTgzYTM0MDBkYjc3OWNmYmYxNDY3ZDY5ODg3MzA2YjEyNGE4NTc4YzE3M2NkNTMwOGQ0NDQ4ZWVmY2YxZDU3ZjExN2ViMTJiYzI4YmQxZDBmZjVjMzcwMjEzOTY1NTE5N2Q3MzA1YmRhNzAxODFjODUzNzZlMWE5MGZiMmM1YjAzNmQ5ZWE1ZDMxOGQzMjE5MTMyZWE2YzVlZGY3YjdkIjoiNTBkZGRiMmViZTRmODc2MzUwOWE2M2QwNzMyMjI3N2UiOiIiOiI3OTNlMWIwNmUxNTkzYjhjMGJhMTNhMzhmZjIzYWZhYTYwMDc0ODIyNjJiYzJkMGRlOWZiOTEwZjM0OWVmZjg4ZDNkZDA1ZDU2ZWI5YTA4OWVlZDgwMWVhZTg1MTY3NmI3YTQwMTk5MWI3MmJmNDVhYzAwNWM4OWU5MDZhMzdlZDcyMzFkZjRhZWVlYjFmY2YyMDZjYTEzMTExMTdlN2U3MzQ4ZmFmMWQ1OGFjYzY5YzU3MDJmODAyMjg3MDgzZDNlZDllMTZjZjg3YWRjZGZhMWJiMGMyMWM0MGMyMTAyZmQwZGVmOTE5ODVmOTIyODVlNmVhMWNkZDU1MGU3ZjUwIjoxMjA6ImIzYzZhZTE3Mjc0ZmFhY2E2NTdkY2IxNzJkYzFmYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY2YjQwZTJlNjcxYmRmMjQ0YjQ1NjQ0ZDFhNWFkYzYzMDExYjMyMTU2YmE5ZjVlMDNkZmZhY2MxYTkxNjUwNjEiOiI5ODU1NDZlZTEyYmE4OWQ5NTk4OGFkOGE0MTUzYzRmOWQzYzkxYzBlMzYzM2E5NWI0ZjliNTg4YmJhMDAzMjAwNmM5MzIxMDUxNDM1N2M5MWQ1NzRiNDM2ZGExM2RjOWY2ODE5NGE5ODFlN2I2NWViNzllNTZiZTljZjFkYWJmZGY1MzE0MDc3MjdjMDM0YTNjNzc0M2JiMjJhYTAyYjI2ZjE1OWMyZWZmM2M3ZWQ1MjAyN2RlMmU4YjhiMmZlZmI3MmMwNGZiZjIwYTFmZmUxMGQ2ZGRhNzkwYTk4MTJjZGJlOWYyZWQ2NzA2ZDdhMjYzOWU4NTFhNDI4NzBlZmI4IjoiNGUwOTA4NzFlODg5YjRiZTM2ZGI1ZTFkZjFlYTI4M2QiOiIiOiJmOTNlZWJmZmVkZGZkMTZiNDYxOGI4OTNkNTdiNDU5YjcwNGI4OTRiMzhhNWVhZjZjY2U1NDAyNmM4MDA5MGJlODMyOGUxMjI2MWUxYjEwZTgxYzczYWM4MjYxYzI5ODJiYjI1NjAzYzEyZjVmZmZmNWM3MGIyMTk5NTE1YzE3MjAwZGIyZDk1MGEzZjIwNjRkN2IzNjI2MDdhZGJmMzY4NmYyNzQyMGVjMTVlMTg0NjdlODZmYWExZWZhOTQ2YTczYzg4ODhiOGZkYzgyNTc0MmI4ZmJlYzZlNDhjZGFiYmI0NWYzY2QyYjZiNmU1MzZiNmZiZjM0MjlhZWJlOTM0IjoxMTI6ImVkODhjODU2YzQxY2FjNDlmNDc2NzkwOWFjNzkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOGM1MTA1YTk2NTExNDRjZTk2NWI0MjcwMzk4Yjk4MjEyMGI4ODU4NTAxMTQ1NzFlZjhlMmNiYzVkMmY1ZTA0IjoiMDBjNWVhM2Q5MTI0OGJmZTMwYzVhNmQyNmRiZGYwNjA5Zjk3N2FmY2ZhODQyYjYwM2MxMDYxYjJhNDczYzlhNzliNDIxYjI1MDk1NTAzMDllNGJlOWM1MDE1YzUxYzZkZWY5ZWU2OGMyNDJmNmUyMDZiMzAyN2NlOGU1OGI3YWI5NmFhYTUwY2VkMWQ3OGMyZGZjYmMyNTg5NTc1YmVjMmNlM2I2YTUwNjYyNzZmZTdkY2E0ZjExMTg4MDhkMWU1Y2FjMDYyNjY3MDUzYzE1MzUwMjg5ZGEwM2NkMDczMzc3YzJkNjZjMDFlMzA5OGVkMDFiNzU3ODhjN2UxZjllNyI6ImEzYTVmODI3NDhhY2M4ODdlMzMzMjhmZDdmNGNlMWZkIjoiIjoiZDkxZWQ2ODg2YTI2OWRjMWViMDc0NWRjNGI5N2ZjNTRjYmVhNWU2ODU3ZDEwYTMwM2EzY2FmODI4YjRlMGUyMGJiNzQyYmNhMTcwMjFiNzg1MmQwOWE2ZDdkM2E1NmFkODIyOThjMTVhMjA4MmZlZDBlMGUzMjZiYjE2ZGQ2NzdlZTI2MmVhZDkzYTI0MTQ3ZGUzYzA3ZWI4YTk1YjEwOGFiZjE3MzU3MTU1ZjFkZTc5MTcxNjg5NDA3YjY1NDVjOWZkZjhhYjQ0ODY1NzY0OTA0MzBjMGUwNDNlMjFlN2M0MGNlODhlNzUyY2IwMDZjYjNjNTk0NzlhN2U1NmNmNyI6MTEyOiJhZGQ0ZTA4NmQ2MTJhMTE5YzZhYWU0NmJhOWU1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDY2N2NhYmViM2E2NDRlMzcxY2JiZTkxOTU0MTNkYWFiMDI1Y2M2ZWZjMTIyOThiZmFlYTBkZDliYzAyOGY5ZiI6Ijk3NzJlYzQ3ZjNjZDI2ZjA5MWJmMTE3ZTA4NWYyMzk0ZGIyNThjMmM0NjBkYzNiMTQwMmVkY2I2MGE4ZjcwNTE3ZjgyYWE2Njk2MDdiNzhjMmFkNzljNjYyYzNiMzc2Y2VlMWI5ZjM0YzRlYzVkMTUzMTljMzNkZTc4YTQ0MGU3ZjJhNDEwOGMzYzlkYTUxNjA0YWRkZTIwMjVmZjFkYzMzNmM0OTI3OWMxM2E3MTUzOTMxZGY2NzVkZjBlNzhmMTdhNGQ3Mjk3MzMxMWFmNzRmZTc1NWM4NWM3ODY5YmFmMzg5NmJiNzM4OTI1OTQyZGM2N2YxYjZlNjkwYzlkNDgiOiI3ZTg5MjdjNjk5NTFkOTAxNDk0NTM5YWI5NWFjNTkwNiI6IiI6IjVkNjJmYTY5Y2ZiZmRlYzMwMTkzNDA4ZGFkMTVjZjk4M2FkNzA3ZWU5MjEwNjhiODE3Njc2ZWNhOWY3MGY5Y2E0NjIzYThjMTEzZGY1ZmJhODYxMzE0MTVmNGVjNTQ2YzdmMWE5NGZmOWQwMmNiOGRkY2Y0MjFjN2NjODVlZDg3Y2U3MTJmY2Q4ZDVmNDU0NjA3NDljZWQwZDkwMGZlMDM2OGM1OWIxYzA4MmJkNTgxMWMxYTY0OGE1MTc2OGQ1ZTRiZmJjMjNjYWRhMzc5MWYyODlkOGI2MWZkNDk0Mzk4YmUxYWQ5ZWU5ZmY0NzFhYmI1NDcwMDBhYzJjMWE1ZDEiOjExMjoiMGFlNmJkNWU4YzI1ZDE1ODVlNGQ0YzI2NjA0OCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNkNThjZDUxNGRlMzZjYTc4NDhhYWQxYmY0ZDMxNGIzYjM0MTVjYWUxY2U5YTE2OTAyMWFlODRhNjdkNGFiNjkiOiJlMWMyZTc5ZTNmNjRjNWM2NGY4NTNhYzliYTFhODUzZmJmMWJmZDMwMDFkNDhmN2U3M2UwZTk3YWExYjhlZDFmMWE3MDY2MTc4ZTc1ZGY2ODhjNWVkYjFjNDJlMjcwZWEzOGFiMGUyNDZjNmE0N2ZkZTRjMzE0MTQzNmZlNGIzNGJlYjkwMzNiYTdlZWJmYzUzY2YxZjZjOGFlMTc5NGU5YmI1MzYxNTJkMTk2ZTFiOTY4MDMzMTZhMDVmMWRjYjkwMTZjOGIzNWJmNGRhMDZjZDE4ZGE2MjQzYWNjM2EzZGM2NDFkM2ExMzMyYjE5MTU5MzJjYTg5OTM3Y2IwMzI3IjoiNGExYzJlN2EzZjk3ODhjM2MyZmRkMGRjYzBjZmU4NGIiOiIiOiI1MGQ2M2M2NjBhMmI0ZjhlODcyNzZjNWY1ODU1NmNkZjE1ZDBmYmIyYzhlYTVlMzI2NmQyOGM1MTU2NDMxMDlhYTdmYzk1MGQ2ZDQ4ZjUwNGRhZDUyNDU3ZTE2NTc2YjU4MWQzNzU3NDU3NGNkOGI3YWMxMmI3ZDU5YjgxOTk5MmM5NDFhMjdlMjNlZjlmMjU3ZWQwYzRlYTRlZGE2YzFmM2IyOGI0NGRlY2I2M2E5MmZhZTg0YzM1NTZkY2I5ZDY0NThlNzI5ZGFkNmE3ZGI5Zjc0MTE2OTBmY2U5NzFiM2IyNDBmOGY5OTc5ZWQ5OTJmODdkNzZlMjI3ZmQ3Mzg0IjoxMDQ6ImFjODQyNTc5YmRkMWFjNzdjODRkZmZhYzJkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjdlNGNkODBmMDNhN2VkMDkyYzc3NmIyNDNkZmFkNzc3NmQ5Y2FmM2U2Nzk5MzkwMzhlMzNhYzk0ZDg5MzFkZSI6IjEwMmUyZDJjMGQwMWRiYzY5NzMzZDI0NTFkMWFjMTgxN2Q2MDQxODY4NWQ0YWU4YWE0NGUxZWRlMWMxZTA4ZDJmNzFmMGFlZjQxYTcyYmQ5ZjA1MmVhNGE5YTA1NzMzMGM5NWQ5NjRmOGMzNjc5YjgwZmM5YzA5NTJiNDZmMzhlMmVmMDU1Y2IzMzcwM2Q2ODY3NTc0MDAyMTBmYTVhMzliYzdlM2JiOWI4YjljYzIwYzk1ZDU2MDdlMmYxMGJiNTUwMTUwNzY4MGVmM2FhYWQ5NjU1MzMzM2IxZDI3YmYyZjdhYzEwMmM5ODNlZWRlMjI2MmE1YzYyMzdjMWQ3NTQiOiJhZjE2MGE5ODNkNjc0YjdkMTkyOTRmODljM2M5MzA3ZCI6IiI6IjZiZGZhZTI5OWQ3OTZlZjM2ODUwMzI3YjA5MWJhN2JiMDJlMjliNjQzY2E0YzhiYzE5OWViOTFlY2JhZjg4NDI2NDEyY2ZkNTU3MGUwMDQyY2FiNzM1Y2M0NmVjNjQ4YjA4Nzc5NTViM2Y5YTU3MDdkNTZjNDc4YWE3N2FlNTUxMDc0OWJlYjFlNDRkYmJiMzc3OTFmMTg0NzcxMjM0MzZhOTg1ZTVlOWY3OWZkYTBhMDU3NTA0ODQ3ZTRlY2FlODQxZjI0ZTFiNTMwNzZkM2VmYzZiZGVhMmViYjMzNmVlMGU0YjVlNmVhOTczZTNlNTBhMjdiNWMyZTZmZWUzZTIiOjEwNDoiZmRmMjFlMmFjMzU2ZTUwNzc0NWEwN2ZjOTYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzYTBjNDZlYWNmZTg1Y2JjMGM1ZjUyN2I4N2NkMDc1YmRlYjM4NmQwY2E2ZGU4MTZhODdjZmRkY2I4YTg3YWU4IjoiNmQxMjAzZGM4Mzk1ZTM1YTM1ZTIzNDIwMzYyNWVhOWQzN2QxYzAwOWRiMmFjOGIxZDViMjkwMjE5OTdiNTQyMWYxZDE3MmY0YzlhN2ViN2RiYjY3ZjAwMDI3MjBmYzQxMmY1YjE1NTBjNzM5YTJkN2JhNDM4N2ExZjk3OGJkNTQ4ZmU2MTY5ZDk0NzM4OTM3ODJiMTBmYWI5OTE5OGNiOGI0NTUzZGZlMjc1ODNjMDE3MTM2ZmQ4Yzk1MDcwZDhkN2Y5YTYwMmQxNTI0OGQzOGQ3MjgxNTdhMGIyNjQwNGU2NjJmOWE1NTU0ZDNlMTU4MmJjMGUxMmYwMDU0NzkyZiI6ImIxY2RlNjNhZDJhZDRiOGE3YmZiMzZhYjc4Mzg1YzNkIjoiIjoiOWRlM2E0NWM5NzZkMzJlZDJhZjUwNzRlZjEzYjFmODZmMzViMTY4OWIxYzY5OGIyZTQyN2Q1ZGQ2MjU1NmViMTQ0MzlmNzdjZDhmY2JlNjg2YTlhMDhhOTIyZTNmNTRhNzhlODZmZDI4NGRlNDkzYTc0MDU4NjM2MGI2M2RhMDliYzFkMDAxNzc3NTgyOTY5YzY3OWRiNTRhMGRkYjhkN2RmZGI0Njc1MGVkYzg4MjgwNGExYzAwZTQxNzkxMmI3MmI0Y2FkNTRkZmZhMTg5N2ViYTYxODhiM2U2MWViZjBjM2RmYWIyOTJjMjY4NmRjYjlkYjMwMTJlMDc4OGM3ZiI6MTA0OiI2NDE4OTZkYWFiOTE3ZWEzYzgyNTI0YzE5NCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGQ1NDBlMGJhMjcxMDM2NjdlYjQ1MTFjZTlkMjQzNTkyYmNjYjg1MTVhYjU5ODk2Yzk5MjJjYjVmMWI0N2EwMiI6ImQ3OWY5YjFjNzRlMzE0MWYxODg3MDRjOGQ1YmRhYWY2MDgzNjQyYmU1MGQwMGYyMGM5N2I1NjY0Njg2Mzg5NTI1MGQxMzFlMDBkYjBlY2Y0ZjAzNWQ0MmYwOGNmZTIwZjQwMWMyZDMwNjJhMzhkYWEwYjllN2MxOWZhN2M1ZDM0NDY4MGFmZjQ4ZDUwNmRhYTE4MTQ1MWY2YjM0ZWQ5MDk5YjlhNWIzOWMwMTY2ZTkzYWM0NDYzYzlhZDUxZjQ4ZTMwNjNiMWMxNjc5MzYxNTMzNmY1NWQ1MTZkMDc5ZjZjNTEwYzI4OTFiOTdhYWE5NWU1ZjYyMWUzYjUyMDI2MjAiOiJhMmVkMzdkYWE3OTc1MjJhMzliMDFkZDIwNmQwNjUxNCI6IiI6IjZhODkxYmQyODllYzA1OTkwNDI0YTI3NzUyODdmNDcyNWFlY2VmZTFhYjIxZmEwY2E2NDNmMzc4MjljYWU5ZmNiYmY4MDViODgzZjgwNzEwMmZmMTJmMWE4NTk2NGRmODE4MDU3ZGFlZGQ0MWM3MzQ5ZWYzMmIyNDY0MjE4NmM0NWQyODU4YzMyNjBkNWI5MDU5NDk2OWUyNmI2OTE5NjNhYzdmYmQyZWI0ZWVmNDY2YWU2OTBjYTI3NGQ5MTk0ZGZjNGRmMWMzYmFlYzAyYWJjMzhmYmZjMGUyYzdjNGZjYWZlZDIyN2Q0ZjY2MDczMjlmNTdlZTQzOTQzNWM3MTQiOjk2OiI5MDc0ZWNmNjZiYmQ1ODIzMTg0OTUxNTgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE1MWQ3ZTRkYjllMjFjODdiZWY2NWMyYWM2YWFiNWI2YjA0NWI3ZGFkYWY2NDI0NjQ0YTkxZTA0YmE4MTA1ODUiOiIwOTg0YzVkM2Y2OGJlYmExZGI0ZTZhZGU0MjljYjg5NTRjY2NhYmE5ZmNmNGQ4NTI4OTdlZjY5Zjg0ODM0Mjg5MzJjOGYxOGE4OTFmNTRiNjhmN2Q0OWEwM2M1N2Y3MTQ0ZDgwMmViOTk2ZDIzM2NlYzkzMGQ1ZWIxOWY0M2QwZmFmOWM5NGEyZDdhYWNhNDBjODA2NmEyODgyNDgxZjUyMWJiNWY2YmExNWIyMTM4MTBkYTM3MzgxN2VhYjNkNTJiNWRkMTQzYTE1MjEyMzk0ODJmYmY0YTA3ZmU2OGMzZDM1YzkwYzZjZTI3YjU1ZTQwYWJjZjQzMmEyNjFkYzU4IjoiNDllMGUwZDA4OWUzNTc0ZmE1YTMzYzk2M2I0MDNjY2QiOiIiOiI2OTM4ZDhhNzYyNWQxMjkxZjI0OWVmMWUwODZiYjAzMGNjZGM4NDRhOTI3MWZlZTE2ZGI2MGU3YWNmZTRhZWRkNzIwZGU3NjM0NTEwOWQ1ZTY4NDlmZDE1NzZjMGZlMGMzNGU3M2RjYTQwMTFmODU2NWNmZmNjZWY0MjcxOThjOTI3ZjE5ZjYzYjgyMWY0Mzg0NGQwMDhjZWVlMDU2NmYwZDgwNjJkNzg2MGU5MmViZGYyMWRjZGU4MDAzOWEwNDUwNGNkOGVlOTQ4NzRiMmVlYjAzODk2MmE3NGFjOTkwMmQ5ZDdjZTA5YWZkYWM3YWE3MDZiZjM4OTJkZTE5NTMxIjo5NjoiNDhkM2E4MTE2MjEzZjkyYmZiZTg2YmZlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZTk2MTU1MTVjYTQ1MTA5MzE2Y2MwMmJiZjNhMjM0MDZlZWVhYjIwOTJkYzY2MTRkYjc2ZTRlMDQ3YTNiMDIzIjoiNDZjNGM2YmFkMGYyMTE3MjA5NGFlMDdhNDdmZDc2NDc3YjY5Y2E3NWNjMDg5NzBlOGRiZjdiODY0NGQ0YmNkY2U5NmY5ZDE1ZGQzZmJhNWZiYTNmODUxYWYxNDU2NTJhZDAwNGVlNTI1ZDE4MGQyZjNlMDNiYzBlYzFjMGU4ZmZlYmMxNDc0YzM0MjczMmI3MjQ3ZjY1N2JhODdmZmNlZjkzMzM4NTcxMjNmMjljNDk3NmIwNDhjODljMjQxMDc1MjlkYzVkZDY5MDA0ZmQxNzZlYjBjYTZkZGFlMWRmN2JlN2QyOGIzYjlkYTk3NjQxMzU4OGYyMGMxZmZmNDg4YSI6ImMxZmFjZjczZGE2NGUxNmU0YWNlZTNmZGMzY2M2YjEwIjoiIjoiNDQxNWRjOTZkM2RhZjcwM2QzOTJiYTEzMTgyNTQxNDNhNTg4NzBlNjkxNTcwY2E2YjFiZTYwNzRkZDljMWZlYWUxMmM3MmY5MzE0ZmMzZDE5YjZhZmZiNTliNjQyYWRlNmM0ZTY0YjdjOTlmODUwYmZmNzgxZGUxOTNjYzBhMzIxYTI5MzU2YWRkY2IwOTE4YTI4MmU1MzgwMTU0MWI1YjAxMzgzZmE3NjI0YzM2ZDFmNjc0MjNmMDJkMmI1NGY1OGRlY2E1ODJiNzAzMWQxOTJhNGQzMmJjMTU0YWUxMTQ5Y2IzYzViNDg1MzhjODAzYThkMDFmYTdjZmMxNjgzZiI6OTY6IjMyMmQ4ZDFiNDc1YTdmZDNkMGM0NTYwOSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTJjMWExNGI0ZWQ1N2NiZmEzMTdmZTBkYjg3NTI4ZjRjNTU1MWRlYjlmZmM4ODkzMjU4OWUzMjU1YjFkMzQ3NyI6ImViOTA4MWUxOWI2M2M5NGI1ZjNhNjk2YzVmYzJjMGI3ZjQzNGUxNTc0Mzk0ZDBiNDFkZDY3ZGZhYzI4YTczZDRiYTI2Yzg2YjM3MjhiMjgwMmZiOWQwOTMwYzg5NTg2YjA5NjAyOTAwZDMzZWRkYzVhMDBhNGU5ODg4MWI1YWNkNTU5N2FhZTliODBiMTU2OWVkZTc0MDQyOTQ4ZjJjZDY2YzNlZWFlMjI3YWUxMDI0MWRmMDAxYzg1ZGZlOGE1ZmRhMGFhMjExNDJlY2FkZTc2MjkwZGZkZDRhMjdiNmZmM2E5MzJkYWNjMGI1ZjQ2MTUwMTIzOWFlOGQ2ZDVmNDEiOiIzNmQwMjYwNGI1YjI0ZjQ5YjA4YmIwMTA1M2EyMzQyNSI6IiI6IjEyZmJlYTllMjgzMGJhMjg1NTFiNjgxYzNjMGIwNGFjMjQyZGJiZGUzMThmNzllMWNiNTJkYmE2YmRkZTU4ZjI4Zjc1ZjJmYjM3OGI4OWY1M2NlZjI1MzRhNzI4NzBhMWY1MjZiNDE2MTljNGI5ZjgxMTMzM2U4ZWU2MzliZTEyNTBhNWM3ZTQ3ZWNiZWUyMTViNjkyN2VjZmZhZjdkNzE0MzI3YjJjNGU4YjM2MmIxYTRmMDE4ZmY5NmY2NzU1N2NhMjU3OTlhZGZhYzA0ZGQ5ODBlOGUzM2Y5OTMwNTFmOTc1ZjE0ZTA1YmU4YjczNDI1NzhkMGM5ZDQ1YjIzN2EiOjY0OiIwMWU2YWYyNzIzODZjZjFhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0ZDA4YTA3YjNlOTQwMjU1MjNhNGE2NDE1MDI5YzhmOWUxMWZiYmZkNzI1NjQ5NjRjNTNiOGY1NmY4NjVhZjBkIjoiNGFjN2MyN2IwN2E0YWViZTVjYWYxZGUwNTM4ZDEzYTU2ZThjMTFiYzczNzEzYmY3OGM3YWJiYWQzYjlmNmQ2OTBlMDA0ODcyNjdkYTEwOGUyZjJhZTY3YzI0YjQ2NTdlNzdiYjgzZTJkNWU0YjI0NGNmMzRlOTI0Y2Y3YmRiNDQzZjg3YWM4Y2RiMzc0MTQ3NDQ5ZjhkMDZlYjUxN2EyNWRjODZmMDNhMzg5ZjM0MTkwYWVkNWE3ZmFhY2UwM2ViZjY0NmZlYzJiMTczYjJjMTVmZDVjYmU3YzVhZmZiNmMzZWU2ZDFjYWNlOGIwMGRkOGY2NjhhMjMzNmRhNWJmYyI6Ijk4Yjc0NWM3ZjIzMWJhMzUxNWVkZGY2OGY3ZGM4MGY0IjoiIjoiMzM3NjkzYzVjNzQ2ZDhmY2RmN2NkNDRkOGY3NmE0ZGI4OTk0MDJiODkxMTc2ZTg1YjRjNTQ5YzM2NmFkNzA5MzIyODc0ZTk4NmQ2YjkzOWEzNTBkMmEwZTNiNzc5MjRkNmQxNTQ1NGQ4ODJkMWQzYzk0NDY5ZDc0OWEyMGQ4ZjAxMTY1MDRjYjMxODg4YTFlODFkM2FiZjI1ZGJiN2E3ZjllN2RlZjI2YjkxNTFlZTY0OWMwNTlkYTE5NTVmMTcxNjQyM2M3MzRkY2QyNmE1NDg4NDRhYmI2YjY0YzQ0MzgzZWM2OThlNTkzNjFiNjU4MmM2ODgzYjc3YzMzODM0MiI6NjQ6IjdhOTI2NmM0ZTVhZTQ4ZjEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI5ZDlmYzQyYjU4ZGVhZmU5YmM5NzM0ZjQxMjlkY2FkMzRhMmU1NWVlNWFkOGFiY2MzZjdiYzQyZGQyYzBlMDUiOiIxMWRiY2Q2Y2Q1M2QyYWY3NjZhMWI2ZTRhZjJiYzhiYWMyODExZWY4MThkYTJkMWY4MWMxNDBhYjZlMDI5OGU5NThmZWYwMzM3MzZiYzZlMGRjY2Q2NjBiOWEzZTQyMjJiZGYzZjg5YTk1YjIwNjc4NWQyMjg1MjIwMWU2ZGQwMGI0NDIzMmVmM2MwMzM5Mzg5MzgxM2RjY2YxOTYwNDEwYjUwY2Y1MDYwMmVhZDhiZDI0NmZhZDg4ZTY2Yzg4YjUwODIxNTc4MDA0Nzc5YjZjNDVjMTNkODIxMWRmMWNmYzBmYjJkN2EzNDJmNThlNGYyZjM2MjNmZDMxYjEyYzMwIjoiNjc5MzE0OTMwOTZmNDU1MDYzM2MzMjI2MjJiYzEzNzYiOiIiOiI2NmFiNmU3YTU0NzcwNWQ4YWU4YWMzY2I5YmM1ZmJiYzE4Y2QyMjBmODlhZWM3ZGZiZjRmNzJlN2JjNTliNDgzYzUwYzk0NzE1MjNjMzc3MmVmYzVkZWVlM2E5YzM0Yzk2YjA5ODg0MmNjNDJmOWI3ZDdjMGQyNTMwZjQ1OTAwZWViOTUwMmU0ZGQxNTM2M2IwNTQzYzkxNzY1MTIxZmQ4MmZjYzlkYjg4ZmU2YTUzMWI3MThjMWZlOTRiOTZhMjc4NTZkMDc3MDdmY2VkMzAyMWNjYTljZjQ3NDA4MzNkNDcwOTE3OTdjYzg3ZjU3ZjUzODhiNDhlMjI5NmZmMzUyIjo2NDoiMGRlNjBkNDEyNjczMzQwNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTdlNzM2YTYzODcwNTQ2ZWM5YzIzMjVhOGUzNjdjOGVhMTdhN2ZmYTcxZjZjYWRkNjkwOWE1YmI5ZWIxMjgxNCI6IjYwODI4MGE5ZGNiZDZkZDY2MTAwYTlmZGQwMGU2ZGFjMjE4M2UzMmM5NDViMmI0ZDI1NWMwNDgyNDNiZmVhMTVhYWQxYTEwZmYzZWVjMGJhNzljNTMxMjM5YjQ4OWE1ZGMxNTVkYzI3NzU1MTlmOGQzZDJlZDgyZmE3YWM2NTNmYjdjNzdlMGRmYWQxYzE3NWI2YzY5OTYzZjVjMTJmZjk4NDBmMThlMDIwMjUwMmU5ZDFlM2IxNzA5NjVjZDg2YWU0MTFhZjIwZTZkNjlhNjA4Yzk5Y2E4ZGFlM2NiM2JjY2U2NjY4NDExMzJhOTk0MjliY2RlNDkwZDlmMGI2YjUiOiJkMzUxOTJiNGQyMzM1MDdiNzBjNmQzMmY4ZTIyNDU3NyI6IiI6IjU2OGEwZDU4NGZjNjZjODc2YjdiZWI5ZWY4NzA5OTU0YTJjNDI2ZmI4YzE5MzZiOTAyNDE4MWNhMmNkM2E3Njg0YzQxMjcxNWMxMWVhYjgwYTE4MWJlMDIzOGUzMmEyYjY4OWU5ZGIzNmEyYWM4N2RiNjUxMDU4MDgwNTMxZTdiMTExMDkzOGRjYjA5NjE1ZTM4NWQ3YjIyNGIxMTIyMjQ2OTE0NWY2ZmI1ZjRjMGU4N2IwOGJiMzAwNmJjNWI2ZDJjZTBhMTViZTdmYzI5YjI3YzEwYzY0NWFmZDlkODI1M2MwOTRmYzBmNzc1MDg2YmRmMmFkYWMyNjViNDc0ZDciOjMyOiJhZjE4YzA2NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmQwNTE5M2NjMDg4NWY3Yjc0MDU3ZWFkM2EwNzM4Yjc0ZWIzMTE4YjFhN2U3NGM1Yzk0MWNlMDAxMTE5NzEyMiI6ImM1OGY1MWJhZDgxNWE0M2E1NzA1YzMxMWRlNGE4NDZlYTJhNzBjYmRkMmMzMGQ3MDlhMmFlMGRkZjgyYjdjODg5ZGM1OTlmYjZlMDMyOGZhZDIxNTU1YTk5NTMwYmU2ZGVlZWI1YjFiZWIzMzMzMjJjMmI3NDcyODhlNTJmYWQwMDg1MTNmODA0MGE0NzM1Y2FiM2M4Y2YzMmM0ZTE4YmQ1NzMzOWM4NWNmNWRkNzFlMzgyMDY3YmVlN2U5Y2NhZjY4ZTc2N2Q3N2ZiMDA1YTNiNzNhNTFhY2Y5NDJmYzNiMmM1YzllZWM2MTg5ZDAxYTI2YzZmZmIwNzAxNjU4NzQiOiI1MTYwYjY1YmY3YTJjY2Y3N2ZhMmUzZTBiMzg2NmYyNiI6IiI6IjY0ZGM1ODM0YTYzYmU0MTRjMzcxNGYxYjM0ZmVkZGJhY2Q1NjhjNjQ2NmNiZDA2ZjY2NWFhMjY5MTg3YTE2MGRiNzkzMDZhNTNiNjI5ZmVkYzEyNDdiZDg5Mjk5OGZlMzIwOGIzMTA1ZjYyNzM2NzZiYmRiZmY2ZTI1NGRlMzMyZDAyYmM4ODQyZWY5OGQ2Yjc5OTk0NzkyZWViNWJlM2E4MDc0NTJiMTRhZTViNTAyN2RiODE0MjFjYzIyOTM2Y2NhYTdhZTFiNzdhMTQ1NDYyNjM0ZTQyNGNjZjJkZmFmMDAxZWQ0NDc3YjgwNGUyMDQxMjBhMTQxNmI0NDliOGMiOjMyOiIzNjRlZjBiNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmU4MDA2OTgzNzEyZGRmZWRmZWJmOTVlNmNjM2IwYWFkYzIzMDc3MDU1ZTUwMGFlNDlmYWU3NzA1Nzg3ZjJlMyI6ImUzYmExNGM0ZTM5ZWJhZDkyNTk5NzY0OTg3MmI4MzMxZjE3MDBjOGY5OGY4MGU1OGQ5MmM4NWE4NGYyYTQyNzA5NGQ5ZDc3MWIyNzZhMGQzNWIxN2MwYzAzMDczNDM5OTA3MGE1NzM0NWQ0ZGNmMDgyYjk2YzdlYjU4MDYxOGY3YWY4YmRmMDM2Mjk2ZTIwMzc5ZTc0ZTI5ZjkwNWI1MmEwYzQ2ZmU3ZDQ2MjAxYTA3NWU3ZGU3ZTFhNTIzYTA0OTJjMWYyMjgxMDJmZGI4OWYwMTliY2Q0NTcxZTA0MWM1ZDM3MTU5ZGM0ODdlYzEzOWZhMzdkMzMxNDJmYzgwODIiOiJlMzZlMzlkNzg3Mzk0ZjE0MDFmYzRiMTczZTI0N2RiMCI6IiI6IjRkNWRiNGI2NWExY2EzMWYzZDk4MGNjMzAwMzdiNWQ3OWQyODI4MGEzMWNjNWQwMjc0YmU3N2RhZDcwZGNkMzdmNjUyZjJjYTk5OWM5YWVjZjA4ZmQyYTAyZDM4MjQ1N2EyNzcwMDJhMWEyODZhYjY2ZjllNDM3YWRlZTAwYzNiYWIwNGY4MzFkZDUyMTQ3MDA1YTk4OTYwNjE3MWI2MDE3ZDI4OTcwYzg5ODY4OTlmYjU4OTAwZTIzZDFiYzZhOWFjMGJkNGQ4YjVkNmUzZmNhZWJjOTkwMzkyM2U2OGFkYWU3ZDYxY2Y5MjkzODhlMGUzNTdjNzIyMzUyM2QxZmYiOjMyOiJkMjE2MzdjMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNkOGVjMjM3MDA5ZWFiNTkwZGJkOWIzMWU3NjUxM2RmYTM1MDE3MDFiMWE3MDY5ODI5NDQ0NDFkOTk2ZTE4MzkiOiI5ZWVmN2M5YTBmYTNlOWE3ZmNjNGIyZjlkMjEwYTk3ZDY2NTNkZWQ3OTEzZjJmYjJkZTgyNWEwZGZkNzhhZTFjY2E2OGMwNDBmMjMyODAwOWZmZmU2MjkzN2Q2MzBlZTlkNmUwZTY3YmMxMmMzOGMwYjNkMDM1Njk3ZDRjMjMxMTM3MWFhY2Y0MWNjZTBkNTIzMDE2ZWU0MzZhNDdkOTNhZjBkZjc3MDExMTMxODU2ZDA3MmM3MThjMzEwZjA5OTViNzE1MzBkNzBhM2RhODgxNDgxZjQ2ZjIxZGRhNjJlM2U0Yzg5OGJiOWY4MTliMjJmODE2YjdjNGUyZmI2NzI5IjoiYTNjYWU3YWE1OWVkYjVmOTFlZTIxMjMxMDAyZGI4ZTIiOiI0NWZhNTJhMGU4MzIxZDgyY2FlYTk1YmQ5NTA2ZjczMzE5MjNlMmFhOTVlOTIzODkwOGYzZmYzMGUxN2E5NjM4OWRmZWE3NWUyMjVlMzRlMTYwNTM1NGVhYWY5OTlhOTUwZjQ2OWM2ZTJlODcyMmRhNWFkOWRhZGVkNjcyMmJhY2EwMGU1ZDFiOGU2MzI2NmFkMWI0MmNhZTE2MWI5YzA4OWY0ZmZkZmJiYWEyZjFmYjAyNDVkMWE0YzMwNmQ0NmUyMTVlOGM2YzZhZTM3NjUyYThmNjAxNmY5MmFkYjc2OTVkNDBiZGU4YzIwMmFiOWMyZDcwYTk2MjIwYjRiMDFiIjoiODMzZDU4ZjBiYmQ3MzVjNjE2NGVjYWEyOTVlOTVhZDExNDNjNTY0ZDI0ODE3ZDVmNmRkZWQ1ZDJkOWIyYmVkMmRjMDVkYTRhOGExNmUyMGZkZjkwZjgzOTM3MDgzMmY5ZGRjOTRlNGU1NjRkYjNhZTY0NzA2ODUzNzY2OWIxNjhjYzQxOGVhN2QwZTU1YjJiYjhmZDg2MWY5Zjg5M2EzZmRiYTZhYWNlNDk4YmM2YWZlNDAwZmVhNmIyYThjNTg5MjRjNzFjZTVkYjk4Y2ZjZTgzNTE2MWE1Y2Y2MTg3ODcwYWEzMmY1MjJkNDA2YzUyZjkxYzMwNTQzZWE2YWExNiI6MTI4OiJjMWRmNGVlNjBiMTBmNzkxNzMwMzJlOWJhYWYwNGQzZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVmMGIyNGYwNTRmNzQ1NWY1ODIxZmRjNmU5Y2E3MjhkNjgwZTgwMDRmZTU5YjEzMWJiOWM3Y2RkYjBlZmZhNTEiOiJkNDA2MTM4NTg3ZmJjYjQ5OGU4ZWMzN2YwZjNkN2Y2YjJmYWEwMmU2ODgwNDI0ZTc0Y2RiYTY3YWUzNDY4YjY4MjNkMzdmZDkxN2E3ZmVkZTZiMzRhMmYwZmM0N2M1MjBlNDA4ODc2NmJhODJhOTg5ZjBkODA1MWEzYTgwY2M4YjFlM2UxZTJiMWM2NjIwYjkwZTk5YjI3ZTY1OTUxYWViMzkzNjI2M2ZjMmY3NmMxYzhlZmZhNzQyZjUzOTg3ZjhhMzhjNzMxYTQxMWZhNTNiOWY2YzgxMzQwZTBkN2NlMzk1YzQxOTBiMzY0ZDkxODhkYzU5MjNmMzEyNjU0NmMzIjoiZjUyZjdhMjA1MTA0N2Y0NWVjNjE4M2I3YzY2ZThiOTgiOiI3NTZjZjQ4NWI2YThlNjcyZDkwZDkzMGE2NTNjNjlmZGJmMjYwZDNlYTE4Y2QzZDBjMDIxNzVkMzk2NmE4OGI3MGFiODIzNWQ5OThiNzQ1YTBlYjZhNWM5Mjg5OWY0MWU4YzBiN2FhNGVjMTMyYzhjYmIxYmFjOTdhNDU3NjZhMDM5MjNjOWI5M2MyYTA1NWFiZDAxMjdhODNmODFlNmRmNjAzYTM3NWNhOGNjMWEyZWUwYThiN2ZkMjI2MjI2YjBiMTliZDJlODFmNzNjMzRkZmFmYTRmY2VhMDhkZDkzZGQ0YWI3ZTRiNDM3NDA4YWY5MWJmZjU2NjA2OGE1ZjM0IjoiZTU4YTAzZjY2NDAwM2QwZWY1YmRiMjg5MzFhZmQxNmU3NzQ3Y2ZmNjJkY2M4NWJmNGVlZDZlNTczZWE5NzNjZjYxNWU0ZWJlZTQwZjM1ZDQ0ZTE4ZTM5MWIzOTFlOThkY2E1NjY5YTViMGFiYmZhNjc4MzQ4MzZiMTIyZDE5MDliNTNhY2Q1MGUwNTNkNWNhODM2ODk0NDE0YmI4NjViMWZiODExZDhhZjY4Yjg4YjRhMzAyZmRlZGYyN2ZkZDI3NDU2ZTlhYWYzNGE4ZDUzYzljODU4N2U3NTg0M2UwOTc3NjM5MmRiYjA1MDFlZjQxMzU5YzAxZTg5ODBlNTIyMSI6MTI4OiIyNTg0OTJiOWY1NDlkMWI5MDU1NWVhZmJlNTI5MjgwNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZmNTBlZmIzOTQ2ZjZhNmRmZTYzZjEyNzgwZjc2NGJiNmViY2YyMTI3ZDM4MDQ2MTBlMTFmMGJkOWI2OGNlMGYiOiJiZmM4OWQ1MDQ5YTViNDAxNWM5ZWI2NGZkYWY5ZmU5ZjRiZTcyMjllNjdjNzEzYTdiMzY4ZjA1NTBiM2E1ZTEyYmEzYTQzOTljNjRmNjBiNzE1N2UxYjI4OWIxNTRhNDk0ZGVhZGVjZmYwZDA2ODZhYjQ0ZmFlMmEzNGFlNGNiMTIwYTdmMDAyNjhhYjU1MWY0MWMxNmEwNWY4OTk5MTU3YmUxMTAzNDY0MTI3YThhOWJjY2Y3MzZjMzJkYjA0NTEyNDE3OGM5MDQ3MmU2NjRkOGU2N2EyYWRlMGVmZTlhM2IwNDhjNDUzZDJmYjUyOTJkZDhkMjllNjJkNTJjNWI1IjoiNjNjMTE5MmFiN2ZjNzVjMTdlNzgxMmZkOTYwZjI5NmUiOiIzMzVjYzVjOGZiNTkyMGIwOWUwMjYzMTMzZWI0ODFmZDk3ZjhkOWYyOWRiODY4OWZiNjMwMzRiYzQwOTU5YTE3NmNjZGNhNjcyNWUxZjk0ZjgyMmU0ZDg3MTEzOGZjMzk3NzZmYmUwNjJmMDdiZjgwZTVjODg5MWMyZTEwMDdlZmViNzdjMTU4Y2VkOGQ2YzAwMmIwNDQ0MmVkMzVjNDBhMjE4N2E1OWMwMjMzOWMwNTc2Mjk0MjIwOGUzYmU5NjQ3MzZhNDMxMDE3ZjQ3MmRmZDVmZGFmOGZiOGM2NDVjZGI2ODRmOTYzMjA1N2I5ZWI3NTUyNTNiNGI3NWUzNjg4IjoiY2E5NzQ5NDJhZTBmNDk1NWNhMDczNjIxOGU0ZTM1NjE0NWMxZWY0MjEzNWIxMTQyYjU1Y2NiM2ZjNWNhZWVjNjMwZWI1MGU2OWI1YTZmOTdjMTFkNGI2MDQxODliMjc0OTY2MjNiYjAzNjVhZTY5ZjQxNTBlMjAxZTcyYmFkOGU3Yjg4MzE4NTU4OGQwYTMxYzQ0MjczYmFlODcxOTRiMTYxMDExNGE4M2VjNDdiYTY4YTAyZTI5ODkxZGU0MzIwNDk3N2ZjZDBkNTUxNzc4MzM1ZmM3N2ZjZmRmM2ZkNjNlOWU1ZTBjMDI5MzBhMDMyMWZmYjA5M2M1MjFjZDBlZCI6MTI4OiIyZjExYTAxY2IwZWY4ZGNlZmFkOTIzM2JlYzQ0ZDZmMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVjNTY2MzI0YWQ5ZDRjZDAxNTgyMWUyY2Q0ZWQ0ZDNkNTA3YmRiM2M2NWJkNTBhY2M4NWY2OTBlZjA2NzQwZmEiOiIzNDhkMzU3NjhkNzE5MjQxNWNiYjkyYzU2MjVmMTBlZGQ3OWYyNGM1NmQ0YjgyMWFhZjgwZDdkYzgzZTkwMWVkZTZiZTk0ZDFlZmUxMWEzYWNkMTZhYzAwYWVhOGQwZDQ4NzVjNDc1MjIzMzJmZWQxMWNkZjA4MTZiMjY5NzhkZTQzMWM4OWQyZmU2ZDEyMmIyZDQ5ODBmMWQ1M2E5N2VkYzE1ZTQ5MGE0NGU3M2NiYTkzOTRjYTRiYmI4NzE2NzVjNzI5YzM5ZGU4MGQ2Njc4YzcxYjFiZDIyMGU0NjQ3YmZkMjBhN2RkYmVmZTJiN2VlYzcyNzZiODdjOTJiYTc3IjoiOTVjOGE1NDRjNGI5NGU5ZmJmZDc2ZTY2ZjQwYmI5NzUiOiJmYTZmMzhmOGU1NjJhNTRiYjIyODFkYzlhN2NiZTBiOTgxMjkyZmIwMGRjMDA1MzE4NTU1MGEzMDA2NjE4NTIxNzlkMGYyYmViNGU3NzU5YjgxMzE2ZmJmZWFkNWM4NThlNmZjZTczZjNjZDJjMjQ2MjkyNWRiYjE5OWE0ZTZjMTIxZDA1MWIxYjVlYmY2MGUxNmQxZTMwZjY5NzNiMTljZjMxODMwZGEzMDU4OGZkZmZmNjExNWE0YTFmNmQ5NzdhNzI1ODMzNzlhNTYwNTU3MjQ1ODFiZTUyMzJiMGQxYjBhZTg4YmFiNWQ0YTAzMWIwNThiYzhkMDMwNzhkY2Q1IjoiOGI0ZGE3OWYzYWUxZWEzNWE4MGFmMmY1MmZjNjQwMDU1ZTZhM2I5MjYxN2RkZmE3OWZlNWQ4YTQ5ZjI4ZGRmMzZhODJhMTdjYTBiM2NkZjE3MjY3MDBmN2ZmYzA5YWU1YjQxMmQwNjRmZDUyYTkwYTc2YmFjYzc0YTBiODllMzhkYzQ3NGU4ODBhMmI3NjhmZmE5MWZlZjM0YzQ3NzU5YTdiOGZkN2ZhYTMyYTRmY2IyNTgzNDk0OTVlNDQzOGM3YjIwNTVhOGY0NjI3MjlmYTRlNzIyM2FhOWI0NzA4NzY5NWUzYWFiZjQzYWZiMzJlMjcyZDUzNmIyNTdiNzQ4YSI6MTIwOiJiMWZhZWMyNzc2OTdhZGQ4Zjc1NjM5MWRkOWM3ZjQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkZDZhYTRmZjYzZWZhZDUzNzcyZTA3ZTBmYTdkNmVkYTVlNzNiZTE2NzYyMGZkN2M5ZjM5OTdjZjQ2Y2QyNWE5IjoiNTkyYjNhNmYwOTg0MTQ4Mzc3MGI3NjdiZWQ3MzQ5OGMyODY4OTZkMmFkM2Q4YmQ5MWY4M2Y5MmY0ODliMWU4M2IwNDU2YTU0ZTA2N2E3OWUxYmY1OWVlZmMxZDNiZDM1Y2VjZmJhOTQwODExZDA2YTA2ZTliOGY3NzRiZmVmZjU1N2JkN2UzZjA4NjRjYjZiZDNmODY3ZWZiZTNmMDQwZDIzODRhZThlMWEwZTIwZWQzOGNhYTY2ODE1OWQzZTMzYzQ2Njk0NzhkMDA5NjNhMTE1MjMwNWFhMjAzN2E1ZTA2Y2FjNTJkODQwMjEyMzRhN2Y1ZDQ2YWIwNjBiZDAzYSI6IjYzODZlMDNiY2I2YWM5ODE0MGVlMDcwNmI1NGM4NDkyIjoiMGNjZGFhNGY1NGNmZWExMDI2YTRkMjYzMzhiMWU2ZDUwYTcwYjAwYzQ2MTQ3ZmU5MDZjOTVmMGEyZmI1ZDkyNDU2Y2EzYWEyOGEyNTdjMDc5ZWNlYjg1MmI4MTllNDY2NDY5OTdkZjg3Yjg3M2JjNTY3ZjY5YTJmYWU0NzFkZjAzYjBlNWI5NDUxMTE4OWVhZWVkZDIzOGE5OTFiMzI2OTYzYzQ2ZDUzMDgwZjQyMGVjOWZkMWE3NDE0NWEwYjE1NWNiY2MwYjVlNDdmYTY5NDUwYzdlYjQ0NzA4MGUzNDg2OGQ2NDBmOTIzOTIzYjkxYTllMTNhMDVjNzM1NTBjYSI6ImMxYmU1NDA0NDhmMWUzZjQzMmExMGIzY2MxYTkxM2NjNDA0NjU5NWY1YTU3YmY1N2M5ZDg1NmNkZjM4MTgzMmU5MTQwODhkMzM4ODE5OTAxOGZmMjYzMjdlMzAwMTY3OGFiMzYzZGE5NDU3YmEyMDg0ZjVhYTgxMzIwZjFhMDM0MzQ5MWUwYjQ0NDI0MDE4NzY1ODYxYzVkYjkxN2NlMTRlOTFhNzdmN2U4MDVkN2E5N2ExN2EyODhlZTY2NTY3YzVjMDFlZTYxZGM0NmE5YWE4YjI4MTQzOGVkMzc3Yjc5MmU5NTM5ZTMxMTY3NmY4MWM1NjczMzljZjkyYjhlMWUiOjEyMDoiY2U3ZTM2MTcxMzYzMGVjYWZmODE4NjZjMjBmY2U2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWQzOTkwY2Q1N2NlNGU5NTM0MmNkY2E0ZjA3ZDdlMzVkNTc1ZWIxOWYyMjRhN2M4MjFiMWY1YThjNTRkNGJjMyI6IjczMjgwOWMyOWI1ZWVkYTk3NDAzOWIxMjJiODc1YWVjMjgyM2UwODJlZjYzNzI5NDY1OGNjNTRmOWJjYTg4ZWI3ZWVhODdhMzY2MjM0Zjg5OTE5OTc1ZDBlN2RkMmY4ZWE4MzE5OGQ1YTZlMzQ5MTQ5YTAxNmE0YjE3N2JhNDNkZjJmM2NhMjhlMjdiODU2NjU5MWQyMjVhYzI1ZGZkOWVhNDMxY2YxZmIzZWE1MzBkNjVkYWM5M2FhZDQ3NzY0YTZhZWY4ZWM2OTAzYjZkMTQ1ZWE5YTI2NjMwMzRkMmEzMjA2OTBiOTJhZmQ4MDMyMDg0Yjc1NGJlOTc2MDQzODIiOiJmZDRlZDc1ZDg2MWRhMmNjMTRmZDEwNTQ5NzZjODU2NiI6ImFiNDQ2ODk4MzlmZGY0N2U4ODdiNzBmYzFiMDQyMmRiYmU1YzFiNTBmNGU3MDRmOWE0MzU5NjdiYThiNzBjZjFlMTQ0YTAyNWQzNzI5MmY2MjhmOWY3ZGQ5ZDA1NTU3YjY1MzQwMDkwNTAzMjAxZThjZjJjZWEyZDZhNzNlYTQ4NTBiZDA5MzFiOTBmZDRhNDMwNmJhODRiOGFlYzk5ZmVkNDdjYTFiMTZkYWVlNmM5NWM5N2U0YmEwZGQxZmIxMzBjZDEzZjVlZjc3YzVhZjk2ZjYxZmEwNTMwNWEzYWNhMzc3NWU5MjdmNzJmMDhmYzM0YmM5OTRlNjlhYmFhZDgiOiJmNDg3MjFiMDgxMDFiMzVjZGUxYzRjZTA4YThiYTAwNDkxODViOWRkNDhiNjZhYjk5NzFmZDY3ZGVlMjRmODliNDU2ZTljYTE5YWM4YTliNWIzYjA4OGNiZDUzODk4YThjMmFjMTEyOTc1MmZiN2ZjNTVhMGMzZTJlNzI2NmZmNDBmN2E5ZDYzZWJjNGFiNjVmNDc0MjJmYzE3Y2JlMDdmY2ZkYTU4MmZkMWI4ZjUwZTg0MGFlODk4MzdlODRhZGQ4YmUxN2Q0Y2FjM2QyYmUyNmJlZjRhYTg0MzhkYWVjOWQyYjEzOWU0NDJmOTljMzJmMjc4OTM3OGM4MDI5YWQ5IjoxMjA6ImRhNmRhMmFmMGZjMTRiNTkxYTg2MzU5YjU1MmUyMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMwODIzMzk2YWM5MGRiNTczYjY1ODc2NzY1NjRkMDlmYTY4MDkwNmJkNmVhYTZiODU5N2UyZTc1NDljOWQ4NDgiOiJjNTViZTVhMGI4NTU5ZTAyZGU0NjY3YmE1NjU2ZjdlNDZmNTYyN2FmMTNmZDM0ZDMyN2Y2ZmJmYzRmM2E5MjczMDM2ZmNlMmZiMjEyMzJmOGUyZWQxMTViMzliMGVjYjlhMTE5YzhmYzE3MDcwYmJlNGUzNGQzNTQ0ZDcxMTdmZmRhNWUxZWYwNWUwNjNiNWE4ZmNlYjIzMTU4ZDc4MjRkNmExZWI0ZDkwYTFkMDM2MGM2YmQ3OGZiMjRmZGQ0Y2ZhMzU5MjRiZWI0ZTA5MDg5MWQwNmY1M2ZjNTJjZGNhYTZiOGJiYTY3NzJkNTQ5ZWI5NWI2NGViZjM3NTZhZTQ1IjoiNDk2YWM3MzRhZmFkY2Q1NGYxYTQzNzJjZWI1NjQ1ZmMiOiIyZDU4MjEzMWY3MDcxZTgwY2RlMWIxMTEwNmI3ZDc5YmIyMDg3NDNkZTc1OWQ0MGI4OTdlZmRhYjAxOGY0ZWZmMWY5MWQyZmU2N2UyN2FmMjVhMTNmMjAxYmJlNDQ0NmYyMGFjNmI5NDJmZjdiMzJjZjEwYWQxY2VhMzY5NDViNjdhYzA4YjExNGZjNjE2MTc1YTg3NDM3ZWUwNWYzYThiNjU2NmU5ZWRmYmMxYmVlYzBlZDg2OTZiNWQ1YzQxYTI1YWM0M2JmM2NlMjkyMGRkMjYyMjMzYWIzNDA1ZDQ2ZjUyMzg5NGRjYmZiNmM5MGI2ZTkxMWNlYjkzYmI3ZmE2IjoiYzlkYTNkZjY2MTExZGNiYWJmNzMxYzY4OTFlYjY5OGFjMzI4Mzc4MGY1MjZlODEzODNlMjAxMjQ0ZWZlNGVjYTdhMWM4NGEzYmZhOWJhNTYxNmFmYjE1YzFmMWFmMGYzYWYyZTA3MWRmNmMxZDM0YTM0M2MzZTM0NDBmMWEzZTFiNjYyMDI0M2Q5ZTdkOWE0ZGJkYTU5ODFjM2U4NzZmZDA3ZjM5MmQ0NGJmM2UwYTRlZGJkODg0NDYyZWMyZjcxZDM2YmRlNGExYjU3OTI2MjlkYTA5YTFmYjAxYmZkYmQ1MzJmYmFjNzE4ODdhMDVhNzA3N2ZjMTE5YTQ2MzhkNCI6MTEyOiJjZWM5NzNhMjdjNDJlMzFiNzc5YTZhOTFhYTM0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODE1ZjJiMmYwYjE2MjFhYTE5OGVlZjI3NjEzODBmMTBhYzk4NzJhNWFkYmRmNjI4NmJkZjMzODZlNTZhYWU0ZSI6ImQxNjkzMGM1NzA0MTRiYjYyMGUwZWFhMmU5YjVkOTZlNDQyNDEyN2UxNjQ2MWFhYTU4ODVjNjE2YTAyYWU5NzRmYjI4OTBlNzNiYWRlOWZmYTUwNjZlYjg4YTQ2YWM3ZmNmMjU4ZDU1NzMzZDMxNTk1MWIxYjcxYzVlM2MxM2Q3OGQ2MDM0NGNlOTIxOTY2Mjk3YTBmNjM2MWNmZWFiMDNiMzQ2YTdmYTRmODNhN2EwZWFmMzc1NzZmYTMzYTQ5NjEwMjQ0NmY5ZjMxYjA2ZWQ5MWI1MTY3MmM4NzljYjE4ZDRlMzhmYTg2ZTE1NmQ1YjFkYmZmMjc5MjU5MjI0NzAiOiIwODQzOTg0YmJhYTU2NWNhMjRmMTQ4ZTU3YTdkOWM1NyI6IjE1MTRiOTljMGFkMzQ5M2MzNmZlMTIxNmQxYTg4N2E2OWVhMDM0MDEwMWFlYmIwM2Y2MGQ3ZWQyNjg5MzExOWU4MWU4YjhjM2YwYmI0YWY1ZTEwYTNiZjRlZGNmMjU3NDczYmU5ZGNlYmI0NGE5ZDkxMmYwNGQ5N2E1NTZlY2YwMjBjMGJlZDdjY2VmMmJmZDU1ODBmMWZjNzRiNzA2ZmVhNDVmOGM2M2Q4ZGU2ZjhkZWNjYzQ3YTAyZGM4NmQzZjA2MjRlNTJmNmYxZGNkMDlkZTgwMDBmMmQ5OGE0Y2MwODk2ZGE2YTU2NGI5MjI2MzY3M2FkZjM5MGVkOTA5ZmEiOiI3NTA2MTc1YWNkNjQyMjRiMzlmODkwZTQ5OGVlNTAxM2JiNDZmYzU3MWRjMmIxMjVlZDU4OTFiOGNlOGJjZjQyMzQyZjAxNWZkMmRmNWY0YjljYzIyMGFhYjUyMzg2YmYyMjQ3ZDQxNjM5NTFlODY0Njc2MzNmOTZjMjhiZGRhMTY2ZDc3ODg1NWE3ZjYwNDY1ZGQyOTgzMjMyYzllNTNkNWY4OTQzMjQwNzgwN2IwNDAyYTEwZjE1NWY4MDA1NWMzMzk0NTFhMTA2YWM1NDQzOGFlNGE5NDVlNjBkNTMyMGVhYjBhZGFkOWExZTY2ZDU5YjlkM2NjNTM4ODc4MTFkIjoxMTI6IjI4ZDlkNzgwMDUyYjM2ZGJlODBhMjVkNDFkNWIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMTMyNWVjZWRiOGZjMGZlNDQ5ZGU1NThmYmMxMWRkZWJlZjY2MGU0N2FhYmI4NGVkZmU2OTgzN2E2YTkwNjZjIjoiZjlhNGY3MDI5ZmVhZTVjZjViZGI4Mzg1ZDZhZDdkN2RhNmEyNDNjNTAyNjgxOGU1YTc5NGM2Y2ZmYjhkYWQzMjI3OTY0NTAxYzVhMDQ5YjVhOTRhN2VhMmUyNDQzNGUwODY4MDAwOTQxMTg0NDRjNWE5NzFiYmU1NzUzMjRmYjZiNTFjNTkzOWY4MWU3OGJiMTFkODVkMzI0NzQyYjQ2MmNlOGQxMzU4NGIzODgyNjE3ZDBjOTQ3NzZmMzI4YTU1NGY5ZDUzMmI2NTE1YWRlOWZiYmQyZGUxYzEyYWI1MzY3MWI3ZjdlZGFhN2UyMDIyM2Y0YzM3MWMxZjIyOTU2OCI6IjhhZmY3MDJjNDBhOGM5NzRjZjI0YmYzYzY0NTE2OWE1IjoiOWVjMmU4NTFkZWUzODM0ZDQ4NDNhYWZhNzQwZjNhYWM0Y2ZiMWU0ZDNhN2UzZTc3MzQ5MTEzZjUyMDA3NjhjM2U5ZGMzNzQ4MWQ2MjkyZWJlZWJkMjM3MmRiMDJlZjhhYzcxODA4MzBjNzE4Nzk5NWM4MTVkMWQxNTIwYzNlMmY4Y2YyYTk0OTkzYjE4YzgyOGI1MzQ4NTA3M2M4YTg0NTA2Njc3MjYxNWIyNmQ3YTNkN2QzZTdkODFhZDE3MjU3OTcxNTNmN2JhNWUzMTNiZGVjNTgyYzU0ODJhZGY3NmIzMWM4NzFjZDQyYTMxMzAxOGY0MGQ3ZTIzZjFhN2YzMyI6IjNhOTM2NjNhYWI5M2M2Y2QyMzZjYmE0ZGIyYzAzOTQyZDllYmM2Njk2MzM5MzYzNzBjMjgzNDM1N2U3NmY2NTU1YzM0ZDQwZGZhYWIxZTc4YTEwNWRhOTA5MmFjZGJhOGJlODllMmRiZjcyZTg5NTE4ZDU1ZTA5ZWIyZmExZWE3ZGE1MDU0ODRhZDQ1MzFkYmEzZWI4NTNkMWFlMWE0NzczNTVlYTk0NDgwNjdiMGFkYmM3ODJkNjRlYzM0MmM3Y2I3ODFkOWRkOGRjMmIxNGRjMWM5YWI1NTQyYjY3OTc4MmI4YmI5YjQ1ZmY2YTRlMzZjNTEzZGYxNjljOGVkZGMiOjExMjoiN2U2ODJiMGRkYmU2YzU1MDkxODM4NjE2YzM1MiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRiOTIyNDIyNjhlNTk4ZGRjZjNhNWEwZGUyNmQ3NDM1NjY5M2M0ZGJjYTM1NGU0NGJlNDAxZjNkNjgwNGVhMWUiOiI3MmRjNzViYzRjOGY1YmJiZDljNjM5ZmJkYjM0YWZiYjg0NzA2NDA0YzllNjdlYWVlMTk1OWFhNGI1MWVhYzBkYjRmOTc1Y2IzZWQ4ZDhjYTI3ZjcyZjYxYzg1NjJlYzk1M2E3Yjg3NDU4MjYxMjFhNzAxNmU2MGU4NzdkY2RiMDQ2ZjIzNmFmMzgyNmMxZGRmNWI5MjljNWJkOWE5MmIwZDVjMjNjZjg5ODNiZjI0NTljZWQ2NTk1ODgyYjNkZDBjZDI1ZGE3ZWJhOTgxYmJhMTIyNjIzZGFlMjJkYmRjZTA1Y2Y0ZTVkODJkMmNjNTRlYjRmNjhlOWU4ZWZmMDJiIjoiM2MyOTJiYmNjMTZjOTRiMGEyNjNmNGQyMmYzMjg5MTUiOiIxNjdkZmFiMDhhYWM4MzUwNTc0NjkzYjMxMjEwMTM4ZjZiOTljZmI2MWJhN2FkZTJlMmFiZmZlMjI1NTgzN2E5MTNjOWFmZTMzMmU4ZmM0YjI0NjMzMTBkZjQ2NDkyZTdkOTgyZGNiNzBmZGRhMmE4YjAzOTExZTZiZTlhNWM1NjIxZDBhZThlY2QxY2IzOTA5MTBiNjcwMmFhZDMzMzk0YzI1ZDExNjBiODY2ODdlMjViYjZjZGM0ODExZTMxNThiYjg1YmE3NTU0ODMyOWRhY2MxOTI4N2Q5YzAwNGEwNDczMDI5Yjc3Y2EyOTBmYzQ3YzFmOTZkOTU4M2JjZDY3IjoiYzJkZDQyYWI5YmYzZmRhNzgwMzJmNzNjYmY3ZDI4ZGQ4ZTMyYzU4MmEzYjdlZTc5Nzk1NTUxZjEzMzIzNGQ2MmVhNjU3MWE0NjZiOGUxYWYwYjNkMzU0YjcxYTY1ODJjOWM4MDEzZDVmOGEyYzM0ZWIzZTg0ODM2MGFkYWMxZDUwMDVjZWRlNThlYWU3Nzg0ZjMyYTMxYzQwZWVjNWEzZjAzY2MxZTcyNjNkODUxNWIzNjIyNWIzNTE1ZWJjZjhkY2EyYTc3MTcyYzc5N2QzNDdlZDM5MjFjYTBiYzczZThhZTU2MzQ3MTM0YTZhMmEwNmFlMDg0ZjFlYmI3YjBmZSI6MTA0OiIwMmZiMDAyZDhlNGExZDExYmIwZjBiNjRkNyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM1YzUwMDU5YTYxNjkyYThmMWZmYWUxYzYxNjE1OGM2N2QyNzZkY2Q0YTAyOWNlMTk3ZWQ0ODU2N2U1ZmY4ODkiOiJhYjdlMTM5MjNlNjZkMGY2MDBhY2NkMjQ2MmFmNzQxOTJjM2RlNmM3MThhMjcwNTJlZjdjMTMwMjIzOWM3ZmIyNDEzZGY3YzY2MjY1N2NhMTgyMjg1NzVlZDEzOGJjNTRmMzE2NjNkZjU0ODYxOGU5OGQ2NDQwMmZlYWI1MjlkNWJmNmE2Nzg0MzFjNzE0ZGYxZmUyNGVhODAwMTdmNDU1YTgzMTJiYjViNzEwZGY4ZGQzNTcxOTcwNDA0YTgwNmVjNDkzZGNiMWYzZjFhYzk4MDY2M2YwYjljOTgyM2UwZDAzMDRlZDkwNjg5ZjcwZDRhMjRkYTdkODUwNGM1YjBiIjoiOTIwZDgyYzZiOTdhN2JlYTEyMWY2NGY4M2I3NWRjNjUiOiJhOWJkNTdkYjJiYmU4MzE3NzI4N2U1ZjYxNGRhYjk3NzA3MWFiZmUwYjUzODA2N2Y3ZDBjNWFjZDU5YmZiYTk1ZGZiNzI1YjhlMWFmNDU3M2ZmMTBjZTEzNTE0OGEzYmFiMDQ0NTUyMzQ4Mzc4ZDVmZjBjNGY4YmUxYWVmN2VkNjBiYjlhMzc0YTZjN2I4MDk3ZDdjMTgwNGZkZjA3OGYyMTJlNjNlOWYxMWQ3NDA0YWQwZDFhOWNiMjhkNWJhMTk5YWVjM2E2YzQxYjllNTIzYjU0MWFkMzhjZWE3NjMxNTk4MzZlZGU2MzcxMzU3YWIxYWVhZWRhYWY0NDgxYzI5IjoiOGY3ZTg3ZTNmZjRmN2NjZDFjZWRjMWRmMTI1MTk5Y2ZiNTg4MzM5MTE5YTVlYTVmOWJkYjkxOGY4OWNhMzVmOWRjMTZjNjQ2NWZiMjVlYTI1MGVhYWE4ZTdmMDBhY2EyMTk5ZjkyYTJjMjQ0NjQyYmQxNWNiYzliNjJjYWE1ODExNWVmMDFkMGI0YTllMDI1MjdlMDM1NzQ0YjIwODkyZjc5YjA3YWE0N2I2YzZkYjEzMzJmODI0MzQ3NjRjNDMxMjRiMjcxNDhmMmY2MTE3NjY3ODFkZjhlNGNjMGI1YmE5OWI4NThjMTNjMjMzNjQ2ZGNiMmI4NzQ5YTE5NGYwOCI6MTA0OiI2NWRhODg2NzZkMmFiM2Y5YzZkNTkwZWI4MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRjN2NjMzU4ODQzNmFkOWU4NzdkZTcyNTc4ZDMwMDI2ZDMyNzQ2ODE3Y2E3YThmYjdkZjk4NzA2NTBhYTQ4ZDgiOiIwMGMyODQ1ZmM0OTViODlmODcwYmNlNzE0Zjg2MDRhN2U3YTk2ZWRlOTJjNGI5YmRjZjA0NGM5YTE3NmY2NmEyODc2MTA4OWMwODNkNWUyZDYxM2M3NDY3MTEyMzg0NzdjMGVmZGY0NzVlMThhZjk5ZTg4Y2Y3NmQwNGQ0ZTQwNDk1ZWExNmM0NjI4MDE0NDNjZDdmNjljNWQzNmFjOWYzMzdlODI4YzMwOGYxZDE5MzhiMWZhYzczMjI3NDQ1OTgyN2NmOTgwNmMxNjYxYTI0NzE2Nzk0OGE5M2ViNmU5OThhNGNlYTc2YmI4MjViYWEyN2U0MTgwZTUyNjMzYmIzIjoiNWU4MjI4NWEzYjMzMmM2OTNlNDI3Zjk0MTA1NjQ0ODkiOiI5OTcxYjhlMjM0ZmMzZTFlOTY0NDU0NWUzODNlYjA2NWUxODY2ZTJmYWE2NTEzMjc4ZDM5NzJhZGQ1ZWMwZTcxYjE1NTgzMjlmZTFlZTAzOGEyNzkxOWU0M2JmZGFjOGNmMDgxNDFhYjU0MDUyOGY3NGY5ZDViYzhjNDAwYmI2ZWU3ODY3ZTRkYmMyYWEwODFkOTEyNmFjMzc0ZGM2MmIxMDAwNGQwZTIzM2RjOTMzNzZiOTNjMGRhNDE1ZTdkM2UwOTg1MWYyMDg0YTk5ZmVlYjI1OTM5ZTIxODkzMDU2ODcwY2VmZTdjZGZhZjQ5ZjcyOGE5MWVhMGVlZjYwNWFmIjoiYWI3YmFjNGRkZWRlNzk2NTc2ZTFmYzI2NWMzYzU5ODA1NTgyN2JlNzRkYzdlZDhlZjE3MmQwMGE2NDhkYTU2NzI3NzY3ZDY4ZmNiZTZjNDRlNzI3MmRjOGNiMTVmMDNhMjZkYzQzOTE3ODg0OWIwZTlhZDZjNzQxMGRkNGNjYTNmOWVmNDBlYzdjMjgwMDQyYmJjMTk5MTU1YzczNDFlODhkMzVlNWU4ZDBiNDI4NTZlNjE4YzZjMzBlNDNkNDk1MDZjY2MzNTE4NTg1Yzk1MWEzODk4NDA5MzE1ZThiM2I0ZDBhZGNjZGI1NjFkZGNmMWI5ZDNiMmNmM2RlOTc1MCI6MTA0OiIyNDc0YzgzMGM2ZWJlOWM2ZGNiMzkzYTMyZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWQ3M2FlYzUwNmUwMjJjMDY5Mjg5MmY2ZGJjM2I0ZDQxZTg2Yjk3ZmIzNzdjMTk1NmVlMjdiOWM5YWIzYjMyYSI6ImYwMmJmNjBmMTBlZDg3NmE4MDNhOTZlNzVmM2ZlMTdiNGUzNTUyNDYxMzVhMGNkNTQ5N2JhYWQyYTQwYTUyM2MyN2UyN2JmODQ4ZjBjYjVkMGM2NDI4ZDA4YmVjOTU5MGIxN2ZjYTVlNjk3OTkwZDJhNmY3ZDIxMDgwYWI2MTRmMzc4YTA3NDYxZTdhNjIwNzIyOWUwYTA4N2UyODU4NDFlZjJmMTE5Y2FjN2Q4YTJkM2FiYmIxZTcyNzJhMGQ3ZGQ0OTNjOGM0Zjc5N2UxNjBjMzZlMDg2MjI3Y2VhZTQ5MjM2NTgzNjViMmQzYTNmYmVhMTFhYTJmYWIzNDk5Y2IiOiJiYmFjYzA4MWE2MTA3MzY0ZGNkYWM4M2FiY2VkZGJmYiI6Ijc3ZTFkYTA5MGU0ZDNhODkyYmFmMWFmYmMxMmE1NjIwMWE0MzYyZDhmMDljZGE1ZTliZGIyMzQxMWU2OTA4OTE1MzAxZDY2NDAzYWNiMzUyNDg5OGMxYzUxZDY5NzBhNzE4NzhhY2NkMDA0OGNiNmNmYmQ0YmY5NDFjMTc0ZWUwNWVjYTJjNGEyOWYxYzI0ZTkzNmQzYTYzY2I2Y2ZhNzEwNjE3YWYxYmJiNDFkNzU1YjJmNzllMTM1ZGI5MTRhN2RkMDBjNTkwY2Y3NDEwNzhlYjcyYzNhYjU1OTc4NzIxMzIwMmRjYzBhNDczNGJkZDYxMmI5MTdlMzcyZjBlNjEiOiJkNzhmYTQwMjRiOGQwNzM4OTlhYzA5YjgxNTFjMjliMTBhMzc3OTNiNzZmMDQ5MjFiZGM3ZGQzZDJlZjUzMGE4MzFlNTNjZjZhN2RkZWVjMGUwMzNjZWVhYmI1MjViZjVlZjU3YmY5YjM2NjFmZmI1N2QzYmQ0MDI0MjUyZmExMWRkNTY5MTAyYzc4N2MyZDg0ODlhMWFkMTI5MGRjYTJlOGVkZjgyZmJlNmI1ZjgzYmNjMGU4ODgwNDViODk1ZTIwYzg1NTZlZTgwNDMwY2M4NjQwZmMwNzA0OTFkMmJiODFhMTIwOTQyODkzOGNkOGU3YTI3ZTBlODU4MDI5NDIxIjo5NjoiMjIzNWQwMGE0N2Q1N2NmYmQzODNiNjlkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MzE5OGRmZDkyZDI2MjgzNjM3ZTQ1MWFmNmUyNmZmNTZlM2I3ZDM1NWVkN2FiOGIyMDU5YzEwMjJlMGVhOTA0IjoiMjQ3MWIzYzRjYzFkNjg4NGQzMzNkMWM5OThjN2M0NDE4MDhjYTg4NGNiODgxNzNhMjI1NTY5ZTE2ODllZjM5ZTI2NmU5YWQzODE5MjZhZGVhZmMyZGFjY2JkZDNjOTQ1N2VhMWJkYzNiYjA1MTY4ZWYxZWVhZDE1MDRkMWQ0NGRkZTM0Zjk2ZTFhN2YyYTVkM2ZiMzNjZjUyOTJkNTJmYTk0MTI4MDA0MTk1NzBkYjBlYjI0ZmI3NGQ1NWRlMjAyZjVkZjc0MDczYzVhMmViOWViNzI2MzkzOTk2ZWFlYjMyMDcyYmViYjAwNTkzZGU0MWI5N2VjYmFiMjU1NDE4NiI6ImUzNjQwM2NlMWFjYzYzYmY1MGI0NzM4NzI1MGVmNTMzIjoiY2FkMDIzY2ZiNzNkMDhlNWIwODJjMzA2MWYzYTY1MDJhMWMxZDUzMDM4Y2ZiMTkwNzRkMGVjMjZjOWIyNzJkYjkzMDk0MTQ3ZWYwYWIyYmRjZTQ0MGEyYjMyMzNiYjA0MjlhZGQ0NzYwMWYwMTFkZjY3OTY5ODI2NGMwZjgxNDQ0YWJhMTQ1NzZhMWE1NjVlNWMxNjlmOTY3Yzc1NzFiZmIzMmEyYTRkN2ZjYWU4OTc4NjNkNzg5NjRjNWIxYTA0MGNjODQ1NDk0YzBhZDhmZjQzNTMzMTdiMjhjYTM3OThlNjI1MmQ1MDE1YjU4ZTk5MzU0Y2U2ZGZiZThiN2E5NSI6IjMyYWZkNmQ2ZmRhYjIwMTljZTQwNzcxYjUyOThhYWFkZjc1M2QxYzRjYjIyMWYwMWU0ZGZjOGIxOTY4Zjg5ODE4OGZhNGQ0NDhkODM2NDUxMGE3ZTY4YzczOTMxNjhlZmI0YjRlYWQxZGIxYzI1NGM1Y2VhNTY4YTg0YTk5N2E3NmRiYzkyNWE2YzE5YTkwOTIwMDI2MjlmMWQ5YzUyNzM3MDA1MjMyZTVjNzYyMGI5NWVkNjQ3NDE1OThhNjVhOWVjOTVmMmM5N2I2Yjc4YmQ4NTM4MDgxMWMxMTM4NjA3NGIxZTFlNjNiOWE3ZTk5ZDFjYjI4MDdiZmFhMTdmMGUiOjk2OiJlMjJkZWIxMjc2YTczZTA1ZmViMWM2YTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFkY2JkMjc4NDgwNDM0MTM1ZmI4MzhmZmNkYzhlNzcxNmU5NWVhOTlhMWNjMzZkNTQ0MDk2ZGZmOWU5YWViYTAiOiJkYTNiOGM5ZTRhYTg0NDM1MzViMzIxYzNlOWJkZTNjNjc0MmNkOWYyMjhjOTcxMjU3NDMwYjI3MjkzZWJlYjYzNTkxN2Q2Y2JhOTc2YzgxOTM0YzMwNzc5MDI5MTExNjllOGM2MTk3YjJkNTZhMDQ2YjdmZjAzYjQ4MmMzODE3MmFjY2FjOThhYWNjOTAwNzYzNzBkZjI4YmM4YTIwNDRjMzkzYzc1NDFiN2I2OWIwZmI4NTI3NDZkY2YzMTQwYWNlNGU3Njg2MTk3NTgxNGQyYjU5NjZmNzcxNGZiNmNmZTNlNDI5OWQ3OTE4MmZjNjNhMzQ1MDY3YTBhYTU0ZDhiIjoiYjczN2JjZGVlNGVmODNhYTgzZjEyNGNmNzIwOGE2NzEiOiI0OWE1NDRhYWU3NmIwNGU2MjIxMTQyOGEyY2MzNzE5ZTQ0NTFmM2RiZjlhMjNiNmFjODI0ZmM0NzJlOTVlMzgzODZkMjY3NDE1YzE0NzJhOGIwNzA3YjA1NzNiOWViMmEzOWE1ZDVhMTM0NjQ5NDdjYzNhN2E3ZGQzYjcxOTZmMTFlODdhYjUyMzM5NDRmN2NlYTNmNGQ2MmIwODhmZWJmOGI4MmE0NGQ0Y2E2MTQ4YmUxYmEyNDkwNTQzMmI3YWMyYmI0ZWJhZjIyZDNiY2U5N2FjMmJkMzQxNThiNjAxMWZiYWM3N2VlMWZhOTZjYTBjOWM5ZTAyMDcwNDRmYmJkIjoiMDYxYjQ5MWI3M2Y5MjUwNzk4YTBmYjFmZGNkNzJhNzBlZGRjOWNiNDhjMWYxMDExOTM4N2Q0NWM1MGQ1ZmJiOGI4NTU5MmE3OTc3NDg3ZTQ1MzQyZmRkZWI4ZDQ4MWVlZjNiOTk0NjM5NzJmNjZhY2IzOGZlMDQ5NTNjMjIzYzVmM2UwMjYxMWM4ZjMzY2I5YWQ3NDY2ODYwODk1ZmFlNTg1ZDQwYmM3OGVjMTRkMWNmMTdiNGM1Yjc1ZTRkOGM2MzQxZjFlYWY4MGRhNGE3OGFhYWEzMGQzYmM4YmZmMTVmMjM0YWFjYmVlNDA2N2E5NDdlNDIyNzViMTJlMGJkYiI6OTY6ImI4OTdkYTMwNjFjNzdhYWI1ZWI1NDYyMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmUwMDQ2N2YxODUzNmVhNmI0ZDU4MmIyNDgwZWJlZTg4M2U0ZjU2YmQ5MWFmM2FkN2E0N2NlZWEzZWNlOWFjYyI6ImQ1MzM0Mzk4MzE4YWRlNTllNmJkYTVjZmNlOGUxMWIyNWM5Y2NlZmEyZjY1MWViMTZmNjZjMDNkODRkY2M5MDBkYzdjODVlNmQyYjc3OGIxNTVhZTQ1OTFhZjA2OThkZjdmM2I4YjlmNjRkNDQ0MmVjYzgyMDM1ZjdkOGU3MWE1ZjYxYzUxNWE5NjNmMmZiYTA3N2YzY2I4Mjc2ZTkxYjMxYjNmOGFhMTkzOTg4YTE2YTg2Y2NhZWM0YTY4OGFkNjhiNTE0NjkyNWVjMjFkNTVkZWQ0MDc3MDlkMzRkMTQwZjM3ZTFmODdkOTU1NjE5NDUzYzM3MDRlODM5MTgwODgiOiJhYTY3MTZlNmI3MTA3ODc2YTMzMjFkODA3YTgxMGUxMSI6IjU2MDZhMGI3N2NjOTAyMDk1NWM3ZWZkYTMzYjcwODBlOWMwZTlmZDM3NGM0MjAxYjQzMjRiM2U2NTIzYjA0MDcxNzExNDFlODI0NmQwMTI5MmEzNGRjNjkzMzFmNzE3N2Q2YjcyMzhlMTZlMDMwM2U4NTc0MWY5Y2VhNTY5OGU0MmZjNzkyMTdkOWUxNDE0NzQwNjhkNmMxOTI3MTNjMDRiMWJhMzU3M2U5MzQ4MGY2OWU0Y2JmNzIwOTBkNDZkNjJkNWI1MmU0YTc2MTNhZjhmY2YwMDEwZDAwMjRlYTExYzE5Y2IwNDU3MWM2ZDcwNDVhMTE1N2NmODFkZjE4ZDEiOiIyNDkxMTlhY2U0ZTI5MmZmZGZlYmI0MzNkNWI1N2ZhMTUxOGFmMzM4OWViODMyMTQ2YzNhZGMyZGM2MmZjYzkxMjFkN2Y2NDYxYTUzZWUxMDdjZTdlZGYzNjJiMzY1ZDhiYzE4ZTUwY2Y5YzMyOGNiN2M3YWE3YjRlOGJmYTA3YzM0ZGM4MWMzOGZlMDk4MmJiYzNiNTQzNDg1ZWE0YjBjZTVhNzZjOTg4Y2RmY2QyNDE5MTFjZDY2ZjVhNWY5ZTBjOTczMzJiYjBmMzkyNjExN2MwNDM3NDcwNzE3YzYzOTU3YWViYTFjNTVkOTZiMWZmMGY0ZDYwNDVmOTA4Y2Q0Ijo2NDoiNzBlOTg2ZmNlZDAzYWU2NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTE4MjQwZjYxMzVlN2I2ZWFjMDcxNTQ2ZWU1OGJiNTIzOTRiYzM0YWQ0ZTkxZWU2NzhiNzJlNDUxNGZkZGNmNyI6IjAyZjI4OGVlYTU1ODhlN2EwMTFmNGQ5MWVjYTIzMmFmNzBmNjBhZTNkOTMwMmNhZTVhOGE1ODc5OGMxYjRlOTczZTNiMWQwNzY5NTkzNGFlODcxMjAxNjgyNTU0ZWY2YTViOTQ5NzZjNmExYWE3M2QzNTRmMWQ2NWUzZjAyNWJiMmEzZjFlOTMwMDllODIyYTg3NTkwZGJmZDE5NjU5MDQyMjMwNDljNWFjMGRhODU5Njk1NTE5OWZmNzY3YjkyZGYxMGQxZjljMDVjNDBiZDgyMDQ4NDZjNzE5YzU1OTQwMDBjYWJkODczNDJmMDQ0N2U0ZTQ2NmMzNzg4NzIzZjgiOiIxNDlkYTgxODZjYTczOTQxNTgyNTMyZWRlMTZlZGYzZCI6IjRkNDZlMWU4NzMyMmNhODRkNWJiOTJkNTg2NzBmNjQ0MDgzZGIwNmJkZmZkOTlmYWIwMDU1YTYyYjY0YTMwYjVhNTY3M2ExMDhmMGI5ZjExNGQzNzlkM2ZlNjNhMWY2MzQwNzg4MWM1YjVjYjAzMTQyMTA5YzE1OGFmNDJhMDBlYjI0ZDNiMTg3M2VkZDIyODRhOTRhMDZiNzlkNjcyYmM4ZjEzMzU4ZjMyNGFmMjYyMmU5YWEwZGEyYjExZTMzNTY3OTI3ZTgxYWVhMjRmMzYwNTE2OGU2MDJiNTMyZmEyY2Y5YmRlNWY4Y2MwYjUxMzI5ZTA5MzBjZjIyZTM3NTIiOiIzNmNkZGFjOTllMjY3MzU4OGJhNzgzZDNjMDg1Yjk5MzU2MjY2ODdhMmRiYWM5YWQxMGRlYjQ4NjdjNTc3ZDZmODA0NTMyNjZiMjQwMGFmZDc3M2U0ZWRlYjc0M2MzMjU2MmU4NWY3ZjhmNDNkZmQ4N2IxMGEyZGQ3OWVkZGY2ZTU4MGFlYjRjZWE5MmFjMjFjZjQ5Y2E5NzM5OGNjMjNjMDJiMGNhNTkyNTc2NDNmYjJiYzY0NjJiOWNmMDQ2NTgzNTJkNTNjMmVlNTBkODdjYzVjYTJlY2I3MjJkOTUwZjBkYWVjZmEwYjdjMzNhYWEyYzkxZGQ4YjA5MzkxNmNiIjo2NDoiNzNjYmU0MGRmMzkyN2U4MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGI2NGJkZWQ2YzY1ODA5MGE4NWI1ZDg4OTY3OWM2YTAwNTc5NDk4YWE4MmJlMWUzYTYyOGExY2QwMDFlNTJhNiI6IjE4MmNkNTlkYzE5MzQxOTlkMmQyYTI3MTIxNTc0MzhjMzQ3ZTI4NmY2NmI1YTJiOGI1MTQ5YWE0MWZmN2JhODJhZGMzNzUxYmUzNzk3NDExMjRkZmNmMDVjNTMxNDE2YTY0ZjI1ZjBkMjhhYmI2ZjdiZjk4YzgwNzYyZjBmYTM2M2RhNjc5NDM3NjIxZGNmNjFiY2U0M2VmNGQ2MzE3ODc3OWQxYTNlYmZmYjgyMDQ0ZDQyN2VmNTIyY2JkMjY0M2NmMWY1NjE3YTBmMjMxMDNjZDJhMTY0YTU5ZjE4MmIxNTFmNDdiMzAzYzRlYjczODdlZTVjYjk3Y2FiZGY5ODUiOiI5OWFhNmYzNTk1MzRkYTQwOWExODU0MGQ4MmZiMzAyNiI6ImY1NWZkNjI1NWQ4YTE4OGNlOWE0YTI3Mjc2OTljZTE2YzhiYzVjNmFkYmE4OGQ5NDEwNjAzOGI3NGRlYjc5YzlkNDNiZmFhNDczNzUxNDhkODQzYTVjZTI0OGQ3MDE5M2M4MDE3MTk2OTQxYjJkOWUyZGZkNDM3NWEzMzkwYzE5ZDJmODMzYjBiMjY1ZGFiMzBmMjZhZGVlMDdhYjBhZWViOTMwZGMzYTlmYmNmNzE5YTcwN2ZhYzcyNGRlYjI4ZGVlMmE2Nzg4YjE3ZmEzNTA1MjkwYzI3OTdjNmRiZjkzMGI0MWVjYTFmNmQ1NGQ3NWI4MjBlNjJlYzcwMjNlOTMiOiI1YTEyMTEyMTgxNzRlNjA2OTAzMzQ4NTY0ODNhMzA2NmUyZThkOTk2ZmU4YWI4NmQwZjhmZWYwOWFiYTllZjBhY2ZmOWQzZTFlNWNjMjdlZmI1NDY0YmMyM2JlYTljNzc4ZmM3NDIwNmFlM2ExNmU1ZmRiZjk5Njk0YWI3MDk2ZjIzYzRiMzk1ZDdhN2I4ZDY2NzVlNTZiNTUwNWZmNjJmNTJiZjE4M2JjYzQ0MzMyOTgyOTZlNDE2NjJkNjUxOWQ5YzFmMGE1ZmIzMTQwMzc2Yzg4OTA1NDdlYWU3MmFmZTc1YzMzOGJhOTdmYWQ5ZjAxODRkZDMxMWJiZGFmM2NjIjo2NDoiOGRiZGMwNzQ2MDc0YjQ4NiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2FkZWYzNTMxMjJjZWMxZmRiYzIzNmMwYWIxOTVmYzRkNzMyNjU1Y2VmNDQ0YzAwYjZjYmE1YzYxZTAxYzYxNCI6ImEzZDVlNTVmYTMxMTBhMjY4Y2YxNDE0YTQ4M2FkYWI2ZDU4ZWM4NzYyYTZlNmJlODEyNjljMDM2OWU4ODQwMzMzNTAzYmMzNjg4YzdiZTAwMWNkYjg0ZDE2M2ZhMWRmYjA1ZjNiMDFmZmZmMzExNTFmMWFmNzgwYzc5NjgyMmUzZDU2NGY3ODU5NjRhNTQ2YmNjMmEzMjBkODFhMmJjNjEwNTg2NTJhODU5NGFlOWI5YjA5MTc0MDBlMDhkNGE5OWZhMTYxMzc2YWM1M2NiYTU0YzkyODg5ZmQzNDk3ZTIzM2FmZjRlMTJjZDg1ZDU3Mzc1YzdjODllOTJjZGY1ZjUiOiJkNzY1YjU5NTRlNWI0ODY4ODVkYzc4Y2U2ODAxNTE2ZSI6ImJhMDQwNTc0NTk3MWVhZWM1ZDMzN2ZkMjJlMGFkMjg3NTUxZTcwODRmMWM5YzM4MjMxZDY3NTcxOWUzOTgwMzU2ZTE4M2E5OWEzYzc2MGVjZjdhOGVkZTVlMGRhYzhkMmJjMTNlMTM1NTcwZmY2ZTkxYTg1NGVhM2I0NTcyNjNiMGU3Nzg5NmZkZjdiZGYwYjUzYzgyNzZjZmQxZWEzZThlMjI0NTBmZjI2NjVlYWNkMjRlNWZiMmJlODkzNzMzNDlmYzllMjk2Nzc2M2Q0M2NiZDdhZGM5YTM3NmIxYjRhYjk1NmRkZjhiMWE1NmQ5Mzg1ZmI3ZTg2MWJjMzRkZjciOiI5Yjk5Zjk4NGFlMjZmOWNhZDViM2M4MDU4NzU3YTBhNWNhZWYwZmI4NmI4ZWNlZjBjMWJjYTZiOTliYzcyYjBkNTM0NWEwMGFlNzVlMzdkNGU2NTEwMDhiYjczMzEwNWQyMTcyZWRhYWY1YmRhNGFkOTUwYTQ5ZGU1NWE1MTRlODgyYTQ3MGRjYTdjN2JiZmRkZGU0MGQzOGZlZjRlMWYzODY0ZmQ3ZTIxMmJiYzAzODNkMGJjMjlhYjIzMDNjODkzNWQ0OWMzNWQ3ZDczZGYyZmJhMGRhZWI1ZjM3ZjlhYjBkNTQxNzY2ZGE3MWIzM2RhMTAxOGEzZjI4N2JhMzEyIjozMjoiYzM3NGNkNzciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBjZmM0Mjc3M2ZlMmQxNmE1OWRhNTIyMzRhZjUwMTUyNzEzMzIzNDQ0NDhjMjE0YTJiNGEwYmI1M2IwN2EwYTAiOiJkZmJmOWVhYTQ2YzM2OGIyOGVmNTAyMjdkYjk3ZjI5YjVkOWVkNTk5NzYwYmI4M2Y1ZDUyZjkyZWY1NTIyODE1ZDY5NTJlYmIwZDliNGVmZTg4NDQyMTZkMzc1MTA3NDZjYWY4Yzc3NWQyYzg2MmJhZDhkNjdlZmZlMTA5YTBjYmNkZDE0YmE4ZTMxZmE0MjBhNDc1ZTU1YWM2YjAyOTA4MzQ2YWQxYjA2NGQ1YjZiODY5NTAzZTA4ZDA1N2FlNjVlOWRjMmEyYTI2MzQ1OTE3YjE4ZDFiNzE1YTIzNzJlOGUxMTRhMDcxZWNlZDBjMjljYzk5NjZkNzIwNWFlMDEwIjoiNDVhZmIzYmEyZGI5Mjg3ZjA2Y2Y0ODQwNTc2NGE5NTUiOiIxNmQzYWQ1NTNjYzBmZGUzZjMyMTEyYmRiNDc4NDUwYzY1Yzg1NDkyN2IxOTg5MTQ2NDlhMjgyMGE5ZTNkMDExMzFiNjkzNzY1ZDQwYmQyYmI3NGE1MGViNGNkN2JjOGRkOGRiYWM5YzZhNjFhY2FmNWU0Y2Y4MTU3MDgxNGIzMGE2YTExODc3YThmOWM1ZGYzNDJmNzAwMDhjYmYwNTc2YmQyN2E1MGJmYWY2ZTIyYTQwYmQ3NzQzNWRhMTZiNjY2YTA2ZDE3MmFhOTgxYmRjYWUwZDI1YjhhYjAwMmM2YzE5OTRhMzU2ZDNjM2I3ZTRkZDdiOTk4OTJiMDc4NGY2IjoiZTI5ZGIyYzRiY2NlZjJkZGE4MjhjZTY1Mjc5MWQ0MjRhODZjZDU3OTBlNmVjZTY3YmMwMjliYTk1MjBiZDhmMzVhMjE0YTczZDhiODY1NjRkZjBlY2NkYjYwZWFmZWU0MTcwZGEyNjk0ZWI1NjNlNWE4NTRiMjVkN2JhMGE0YzUzNDY1ZmRjMTVjNmUyNjdiZTJlNTQyNjNmOTdhYTNlZGJlMjM1OGYzZDliOGQyODk5NzM4OGE1N2FhNDI3YTIzOWE3NDUzNDM5MzU5MzE5NjI1M2RlMWMyOTQ2YjdhNDM3YTAwNDgwZWNiMmViMDhkYmU1NWNhMmIzNjQxYzM2ZiI6MzI6IjM5ZTAxZmEwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyYTg0MGRmNGJlMjJjNzA3ODZjODczMDU4ZDJhNmUxNmRkOTg5NWNiZmI1NWI5YzllOThmOTU4Y2ZlNjJlNjVkIjoiMzEzZWRkYzUzZjM5ODY5MjdhMjYxZjQ5ODI4M2I2ZGM0YTM5ZDI2Zjk4Yzc0MjgxMjcyMzdkNzlhMTFjNWU2MjZlMmU5Y2RiNjhmNzJhYTMxNjhhYjIzZGZhMmY1ZTAzYmM2NWE2OGQ3ODFmMjNmYjllMjk1OTA5Y2Q5ZjBmM2U1NjQ4Y2Y4MmYzZjZiM2I1MDliMGEzMzNjYjdkOWYyYjZlNDQ0YzM1MWEzMThmOGYyMDBhOTIxY2NiNDA5ZGVmMjFiODdiYzU1ZWMyMTFhNzZhNTE4MzUwZTZlZTIxZDczNzllZGQwMDRiM2JmZDFjZTkwODZiOWM2NmQ4MGVjMSI6ImViZjE1NWY3Y2Y1NWU2YWFiZGMxMTcxYzk1YzQ1MjkzIjoiOGFiYjg4NDNkZTE3NjZjZmI4ZDY0NzQ0OTZhY2RhMmY3YTE0ZTc4YTVlNGM3ODdhYzg5ZTZiYzA2Y2ZkNDIxNzNjMzViM2E3NWRkZmY2NDRmNGE1OGFhNzUwMmZlZGFkYTM4YTcxNTY0NTczNjViNGMzYzA3YmMxMmE4ZjkwNjEzMzExMzliOWEyYjhkODQwODI5Yjg3NmJlYjg0ZjI3ZDVhNjQwOTNjMjcwZmU2YzMxMGNhM2FmZTk4N2JiYzVlYzRkYzA2MzU4ZDViZjc3YzdiNGU0ZmU0MDc4YzZkM2VjMjhlOWEyODEzMThkYTg4OTQ5YzQ3ODA5NGMwMDY1YiI6Ijc2OTg2OWE1NTc1NGViNWQ2ZDQyZTIyYTJiNTI3MWIzODUzM2ZjMGM3OTY0MmUyNTAzNDdkMzQ1NjZlZWNhNzMyZTA1NjVmODA2NzIwNTRiZDEwY2JkMzA2NzczMGRiYzU2NzAzOWM3MzBkOGJjMzJhMmJkYWFkMDk4ODU2NTE1MzNhNGYwMzE3NGQ0ZTY1MTA1NDdjMWUxZGQ1MWJlNjA3MGFiMGNhMGNjZWVhY2NmNjRhNDZkMGVmODdjMDMxMWJkMDk5NzNmM2I1ODhhNGRmYjM5Yzg1MDg2ZWE1ZDY3ZGM1MzFjMjg3YjgzYzE2MWRjYjI1ZTA3YjY3MTM0M2YiOjMyOiJjMzY0YzA4OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ2MTU2NmNhYzc0ZjkyMjBkZjk3YzFhYjJmOGJiNzQxODlhNjM0YmM3NTJmN2YwNDUyNjkyM2QzMDUwNjk0OWMiOiIiOiI1NDZkODIxZTQzNzM3MTA2MWNmMzIwN2YzZDg2NmMxNSI6IiI6IiI6MTI4OiI0NDE5MzA3Mjc5MWM0MzVkNmU4ZWE3NzU2YTBiZDdiZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc3MzZkYmIzOGYxZmUzNTFhN2ZhMTAxZDkxZGE2MjEyNGMyMmFjMDJlZTA2Yjk0MTNmNTY2OTEwNjc1NzJmNzMiOiIiOiI1ZjAxNzc5ZTVlNDQ3MWNkOTVhNTkxZjA4NDQ1ZWI1YiI6IiI6IiI6MTI4OiIxYTFmMDhjOGY0MGI5M2U3YjVhNjMwMDhkZmY1NDc3NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVlZGNhZTkyNDEwNWM4NjE5MDAzMjY1MGUyZDY2Y2Y2OTI3ZGQzMTRkZTk2YTMzOWRiNDhlMjA4MWQxOWFkNGEiOiIiOiJhMzlkNDAwZWU3NjNhMjJkMmE5N2MxOTgzYThhMDZhNiI6IiI6IiI6MTI4OiIzYjQyOTRkMzQzNTI3NDNjNGI0OGM0MDc5NDA0N2JlYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjcxNGRmNGI2OWRjMDAwNjdjNGFiNTUwZjM3ZmY3MjM1OGIwYTkwNWRlYTJjMDFmMDBiZTI4Y2VjMTMwMzEzYzIiOiIiOiJjNDZkNjNkNmZlYWQyY2VlMDNiZDAzM2ZiYzJlNjQ3OCI6IiI6IiI6MTIwOiIyYTAyNzFiMDY2Njg4OWQyZDBiMzRlODJiZjE3ZDgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0NTQwMjFlY2U5YTg3YTk1NDNhMTYyNjgyMGQzOWVkZDFlZmYzZGNhMzhhMjg3ZDhmYjY4YmQzMTVhN2EyNjc3IjoiIjoiNTFkZTU0YjYzM2E3YzlmM2I3YjJjMWU0YjQ3ZDI2YTQiOiIiOiIiOjEyMDoiMTE0NzA4MTAyYTQzNGUzYTMwMDg4YjU5NDRjMjcyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDdlOTBiNTM5Yzk5ZThjMjE4N2VkNzI4MjMyNThjMTE0OTg5MGE2OWE5YzAwODFmZjhjNjZlMWNkZWE5ZjJmNiI6IiI6IjZkYmEzMjczNTYwZjMwZjExOGEyZTAyNTFmN2I3ZDc2IjoiIjoiIjoxMjA6IjVmNDVlMDAxODFjZDJkN2ZlYjQ3MjNlMGNkY2EyNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI5NDgyMzNlZWM5YmY4YWRmNzI1MGIyMGQ2MmRmOTIxOWQzMGUzMTRjNTkzMjM4MzIwMzgwNWZmOWYzZGM1Y2YiOiIiOiJkNmI4ZTcyMzI3MmUyNjkyMmI3ODc1NmQ2NmUwMzQzMiI6IiI6IiI6MTEyOiIxNGM5YTlhMjE3YTMzZDRjMGI4ZTYyNzY0MWZlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzczZmI1ZTczMmViYzFkYzdjOTFhYzI1ZGUwZDAxZDQyN2RlMTJiYWYwNWZmMjUxYzA0ZDMyOTBkNzdjMzRkMSI6IiI6ImMzMTIyMDgzNWIxMWQ2MTkyMGFlMmM5MWUzMzU5MDdlIjoiIjoiIjoxMTI6IjllYjE4MDk3ZDNlNmI2YjdkNWUxNjFhZTRlOTYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNDZhZmYyMTIxODI1ODE0YzYwM2IyNThmNzFkNDdiZDljOWQzZGI0YzZmZTBmOTAwZTBlOTlkMzZjOGY4ZDY2IjoiIjoiN2NiNTU1MGEyMGQ5NTg0OTA3MzliZThhNWM3MjQ0MGYiOiIiOiIiOjExMjoiOGM3NmVlYmRhMGYxZmQ1N2YwNWE2MmM1ZjkzZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYxYTYxMmM3NmRlNTUxZjc5NGExNDY5NjJkOTEzZjYwZmJkNDQzMTM2NWI3MTEyMTdhYWE0YmVhYTExNWY3MjYiOiIiOiIyZDI1NDYyYzkwYWQ5YTIxMDczNzI5ZTVlZmM5OTk1NyI6IiI6IiI6MTA0OiJlNGQzYjI3N2RjOWExMDdjMDM5MmNhMWU1YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRiMjMzNDgwMjM5ZmFiZDIwMzVhN2M5MjA3YThlMWFiMmRhNDVhOTBhNDcyYjMwODQ4ZmU0YjQ3NTdjNjI4ZGIiOiIiOiI1MGQ0NTA5NmFmZDA1NzFlMTcxZTFhYjFmZmIzNzIwZiI6IiI6IiI6MTA0OiI1MzkzYmMwNmI4YzVlY2VmMTI2NGZkNjA4NCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRjMDUxYWM2M2U2YjA1MTU5NDE1ODM5OTI5MWVkMTAxYTNlZmJiMTcwMWI5ODgxOWM0ODM1YTQ4NjM3MzQzNzEiOiIiOiIxZjMwNGQ0ZDdmODRhYjU2MDM2NjIxNTY0OWIwYTA2NCI6IiI6IiI6MTA0OiIxMDgxZGRhOWUwYTc5MzkxNmRjODJmNzg0OCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzVmNzZkZjc3MmFmOGUzMDE5YTRjMTU4OGE3ZDU5OTI1ZjgwY2UwZDU2NDcwMzBmMjk1NDgzNzRlN2JjYzllOCI6IiI6ImQ0MDcyNjRlMDlmYmM4NTNiMTMxYzhhOWY4MDhmMWRlIjoiIjoiIjo5NjoiZDUxNTUyMmRiNTJiYjg3MmE0ZDNmOWQxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MDhkNzU5MmMwOTQzMjJiMzFkNDU4M2E0MzA5ODZiZGY2YWE2MzljYzRiNGEwYjM5MDNlNTg4YjQ1YzM4ZDM4IjoiIjoiNmE2MzE5NTJlNDk5MGFlNmJkZDUxMDUyZWI0MDcxNjgiOiIiOiIiOjk2OiJlYjg4NTFjZmRkNGZjODQxMTczYzQ5ODUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg2YTkwNjMxZTUzNDFlNjdkZmE1NWU2OGIwNzUyMjUwN2I0MzdmYmFiN2YzZTJlMjZjZmM2ZTg5ZWY5ZDI0MTAiOiIiOiI2Nzc2M2VlMTg5MGU0YmI0MzBhYzNjMGRiYzJhZjk5NyI6IiI6IiI6OTY6ImM2ZDExOTAxYjUzY2Y2YjEzYWMwM2NjNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjhkMTI3ODNiYTI1NDhiNDk5ZWE1NmU3NzQ5MWQyNzk0MDU3ZTA1ZmQ3YWY3ZGE1OTcyNDFkOTFkODMyYjMzYSI6IiI6IjAzNjU0MzYwOTlmZTU3YjRjMDI3YzdlNTgxODJlMGI5IjoiIjoiIjo2NDoiNDFmYzQyZDhjOTk5OWQ4YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWIxN2MxYmJjZDM1NjA3MGNhNThmYzM4OTliYjM3NTFlZWE1YjlmMzY2M2M4ZTUxZDMyYzFmYzMwNjBiN2FjMiI6IiI6ImFjYTc2YjIzNTc1ZDRlYzFhNTJhM2Q3MjE0YTRkYTJmIjoiIjoiIjo2NDoiZmJjZmQxM2EyMTI2YjJhZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTE2YWVhN2MzMjgzYWFkYjYwOTA4ZWM3NDdiY2Y4MjM2NGMxODI3ZWMyOWJlZGNiYWRhY2JiOWI5MzUyMjFjMSI6IiI6ImU0YWVmZTZmODE4NzI3MjlmZjVhM2FjZjE2NDkyMmFhIjoiIjoiIjo2NDoiMjAzNWE3Y2U4MThiMWViNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDdiNGI3ZmViOTE1ODJhMmY2MTIxZDEyZmQ0NjU5NjczNTJlNThkOWYzZDFiZjI3NDc4ZGEzOTUxNDUxMDA1NSI6IiI6IjEzN2JjMzE2MzlhOGE1ZDZiM2M0MTAxNTEwNzhjNjYyIjoiIjoiIjozMjoiODIyOTU1YmEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg5NTVjZGRjZTY1OTc4YmQ2NGVmNTIyODMwODMxN2ExYmE2YTlmYmI1YTgwY2Y1OTA1ZjNhZWQwMzA1OGI3OTciOiIiOiIxMzcwZTcyYjU2ZDk3YjliOTUzMWVjMDJlMmE1YTkzNyI6IiI6IiI6MzI6ImIyZjc3OWU4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3Nzk1ZDYzMWY3ZTk4OGJmNTMwMjBkMmI0NjA3YzA0ZDFmYWIzMzhhNThiMDk0ODRmZTY2NTljNTAwZmQ4NDZiIjoiIjoiZjNmNWNjN2MxZWMwYjdiMTEzNDQyMjY5ZTQ3OGVkODEiOiIiOiIiOjMyOiJlNGU2ZGZjYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY5YWFiNWQyZWEwMWI5ZGMzNWM3MjhhZTI0ZTA3YzU0ZTZkMTQ1MmU0OWQ5NjQ0Nzc2ZjY1ODc4MTk5YmM1ZTQiOiIiOiI5NmVjMjI1MmU1MWViZmI3MzFiNjgwNzI5YmU3MzI5NyI6Ijk4M2ExMDJhNjczNTlmNGVlY2FjNDY1YjBkNjU5MDhhNDg3Yzk4YzU5M2JlODk0OTRhMzliNzIxNzI4ZWRjOTkxNzI2ZTFmYmE0OTYwN2VlZDFmOGJhNzVhZTlhYjgyYTFhOTViNjVlYmRmNDhkN2VlM2M0YTJiNTY4MzJmMjFhNDgzZDQ4Yzg0MDBkZWE3MTUzN2Y0YzQ1OWQxY2ZjZjlkMmNjOTdiMzJlYjdjNTE0NmNiZjQ0ZDdlNWFjNzc5ZTliZTBhZTc1OGVhZmZmMjEzOGQ0YzUzNzBiOGNiNjJkNzBlYmI3MTNkZmQyZmQ3NzcyZmEyNTA1OTA2MDk4NDQiOiIiOjEyODoiNzY2YjZkY2Y0OTFhNTgzNmVmOTBmNDdhYzZhYjkxZWMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkNzEzYjMzYWY1Nzc2MmY5MzNkNmFiZmVjYmFjN2ZiMGRjMWU1NDVkZDdjMDE2MzhiMGUxNTEwYWY3MTk3NjlhIjoiIjoiNWRhNTI4MzNiNmZjNzNjMGU0YjE0MDNlMWMzYzEwYTIiOiIzNzRkZDRlYmRmZTc0NDUwYWJlMjZkOWU1MzU1NjA5MmFiZTM2ZjQ3YmJiNTc0ZTgxODRiNGUwZjY0ZDE2ZDk5ZWFmMDY2NmZhM2Q5YjA3MjNjODY4Y2Y2Zjc3ZTY0MWM0N2FjNjBmMGVlMTNkZDBjMTA0NmVmMjAyZTY1MmI2NTJmNGI1ZGU2MTE5ODkyMjNiMGFjZjFlYWQ5YjM1MzdiYmExN2NjZjg2NWE0YTBmZGExYTIwYjAwZTNjODI4Yjk3MjZiYmQwYjBlOTJmYThlZDk3MGVlZDUwYzg4NWU2ZDY5NjA0Mjc4Mzc1YWY3YjlhZTQ3ZmJjZTRmZWQ3ZDAzIjoiIjoxMjg6IjYxNTE5NTYxNjIzNDhlYjM5N2UyYjEwNzdiNjFlZTI1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzdhMWU0ZGRmYmU3N2EwY2EzNTEzZmM2NTRlN2M0MTYwOWNiOTc0YTMwNjIzNGFkZDJmYzc3NzcwYTRhOWUxNiI6IiI6IjMwZDZlYzg4NDMzYTZiZGQ3Nzg2ZGM0ZDM2OTNiZGU4IjoiNjliZWVmNGRiZGNkZjRlOGVlYjliZjhhZTZjYWZmODQzMzk0OWFmYzJmZmVmNzc3ZTJiNzFhOTlmZGU5NzQ3OTdkZmVkMjI1NGI5NTk0MzBlY2M0OGRiNzJjZWUxNmM3ZWY0MWZhNDE2NWNlNGEwNjM2YWQ0ZTQwODc1ZDE5M2EzYzZjNTZhNmJjYTVhNTViY2UzYTA1N2EyZDNhYzIyM2ViYTc2ZTMwZTc0MTVmMDBlNmE3NjQzZmRhOWExYmY0ZDRiOTZjZTU5N2ZmZTMwYzNmNzgwZGQ3NjdjYjU2ODFiYjdhM2ZkMTE2NjgzODBlMjcyYmRkNzBlNjZmMThiNiI6IiI6MTI4OiJkNGEzYzkxZTAyYTk0ZmQxODNjYjBjOWRlMjQxYzdkMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMwMzkzMGI4YmE1MGY2NWE1MGMzM2VjY2Q4Nzk5OTBkNWQ4N2I1NjllNDZmMWE1OWRiNTQzNzFmY2JkYTdmZDYiOiIiOiIyYjJiMjhkOGE1Yzk0YjZmN2VlNTBlMTMwMjY4YTA3OCI6ImMyZmYyMDQ0MWQ5NmJhZTRkMmQ3NjBkY2JhZTYzNmNhN2UwMWQyNjNjMjhkYjVmYWVkMjAxYmRiMzliY2FjYzgyZWJkYzk0Mzk2OGFhMGFjY2Q5MjBkMjU4NzA5YzI3MGRmNjVkNDZkM2YwOTkxMGQyZWE3MDFjMDE4ZWM5YTY4YWY3ZmIzZDc2YTliMzYwZGUyNjZiMmFjMDVlOTVjNTM4NDE3ZmVjNTljZWMxZjA3ZDQ3YzAzNTExNzUxOTc4YmFlYmQyZTBlNGY3NDgzZjczNTFiNWU2MWMyYTYwMTM4Yzk3Yjc1MWY2YThjODMyMzk3MGY2YmUwNTM1N2FlYjIiOiIiOjEyMDoiYjU5NzQ5MWRmZTU5OWVhYTQxNGI3MWM1NDA2M2VkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWUzYjk0ZjU4ODMyMzljNDVlZDRkZjY5MzBjNDUzYzlmZmQ3MGIxYzZjZWU4NDViYmNmZTZmMjlhNzYyNzEzYiI6IiI6IjYxMTU1ZjI3YzYyOWRjYjZjZjQ5YjE5MmIwYjUwNWQ2IjoiNWI3NDgyZTliNjM4Y2IyM2RiYTMyN2NjMDgzMDliZGI0MGQzODEwMGE0MDdjMzYwOTE0NTc5NzFiYWQzYWIyNjNlZmE4ZjM2ZDhkMDRmZGM0ZGVhMzgzNjllZmU3YWU1ZThiOWMxOTBkYWQyNjg4YmRhODU3ZTQ4ZGZkNDAwNzQ4YTM1OWNmZTFiMmEzZjNkNWJlN2FlMGY2NGEzZjQ0NzM4YTdjN2NmODQwYTJlNmI5MGVjNDNmOGM5MzIyYzYwZGQ5MWU0ZjI3ZmExMjE5N2ZhYjdlZDA5Mjk5MDg3OWU5NjRjZTAxNGY2YmUyYTFlZjcwYmZlZmU4ODBhNzVkNSI6IiI6MTIwOiI3MDAzZjA0ZDZiNmQ5ZGM3OTRiZTI3YjljNWQ1ZTUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MDgwZWZmYjI3OTk0ZWY4MzE2ODlkYTEwNjAwZTdhMjE5ZGI5M2Q2OTA2NDc0NTc3MDJjMjE3YjA4MDU3ZWIzIjoiIjoiZjQ1NTE0Njk2ZmY1ZWUxZTZlNTc5N2Y3YmNmZjA1YzAiOiI1MjUxZjgwMGY3YzcxMDZjMDA4YzAxMjI5NzFmMDA3MGQ2MzI1YjczNDNhODJmYzM1ZjM4NTNkMjVjODc4MjE1ZTdhOTI5YmY2M2NjODk5NmYwZmZiODE3MTc0YTM1MWI3MWQ2OTFmMjMwMjFmNTg3NzdmOTYyZmQxZDQ1ZmY4NDllNDYxMmUzMzA0YWUzMzAzYWNlN2I4Y2ExYTQzZjU0ZTY2MjA3MWMxODNhMTY5NTg3M2Y1NTY3Mzk3NTg3MjgzNDMzZDFlNzZjZWMxMTAzZWU3NmY4ZTA0NzI4MTQ0MjRiODk4MWNhZWExZjYyNDEzMWZiNzM1M2FmY2QyY2QyIjoiIjoxMjA6ImNmYjZkOWJjY2YwMzc4ZmFiYWUwOGZkMjMwZWRjMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhjMjkxZjBhZDc4OTA4Mzc3MDM5ZjU5NTkxZDBlMzA1YmRjOTE1YTNlNWJmYjBiNDM2NGUxYWY5OTQ2MzM5YzAiOiIiOiJhOTgzMGQ1NjYzNDE4YWRkNWYzYzBiMTE0MDk2N2IwNiI6ImU0M2MwNGUxZjczMDRjMWQ4MzIzNTEyMGUyNDQyOWFmOGRjMjlkYzk0Mzk5NDc0ZDA2MDQ3ZmQwOWQ2MWRkYzY4MjY4NDc3NmM4MWVmMDhkOTdmMDZkYjZlNGNmYjAyZGFlYTcyOGVjNmFjNjM3ZTFlY2ZkYjVkNDhmMDQ0MGQ4ZDhmZmVlNDMxNDZmNThhMzk2ZTUxNTE3MDFiMGQ2MWQ1ZjcxM2IyODE2ZDNmNTZkNmVlMTlmMDM4Y2NjMzY0OTNkOWFkMTgwOWE0OWFhNTc5OGUxODE2NzlkODJjYmEyMmIwYjRlMDY0ZjU2YWY1ZWMwNWMwMTJiMTMyYmRhODciOiIiOjExMjoiMjc1NDgwODg5ZWZlNTVjNGI5YTA4Y2VmNzIwYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk2Yzc3YzExYTMzMzZhNDFiNjFmZmRjMTcyNGE4MDczNWJiZTkxZGQ0Yzc0MWZkYmNjMzZlMjFjNTMzMzU4NTIiOiIiOiI2NTU1MDJkNzAxMTkzMjY0MDVkOGNjMGEyYzdhNTcyYyI6ImMwMTAzNGZjNmI3NzA4MTI4ZmJmNGQ2ZmZhNGI0YjI4MGExNDkzYjllMWRkMDcwNzlmNTA5NDc5YjM2NWY1NWFlOTI5MDY4OWYxYzRiZGZhNDM5MzQ0ZTNhYmIxN2YzZmQzZDVlMmY4YjMxNzUxNzc0NzcxNGE4MmYwYTlhY2UwNDkzODU5MWQzYWRlNmQ2MDk1NDkxYTQ0MDMyMmQzNDdlODYzNDAwOGNjNGZkOGFkZDdjMWM0NzY0YWZkYjJiMDk4YjNmNTYwNGU0NDllODA0OWE0NmI2MTkyNjQ3ZDE5Y2Y4OGZhNWVkMWFiYWI3ZjMxM2I0Mjg1NTYwY2JhNDQiOiIiOjExMjoiYjRkNTgxNDY0YzRiYjIzNDMzNjk5YzQxOGRkYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUyYTM5NTczOTM2NjkyNzhmMDUyZmYyZGY0ZTY1OGUxN2YyZmUzMjgxMWUzMmIzZjYyYTMxYTM5Mzg5MzA3NjQiOiIiOiJhNmY1YTFmMWYxYWM3N2ExY2IwMTBkMmRkNDMyNWNiZSI6ImNlOWMyNjg0MjljYTljMzVjOTU4Y2EzZTgxOTM1ZWM2MDE2NmFlYTBiZTE1OTc1YmFmNjkxMDMyNTFlZmFmZDU0Y2JjYzBiZWQ3NmE4YjQ0YTViOTQ3MTk5Y2QzYzJkZWU2ODc4ZGQxNGE1YTQ5MWE0YTNkNDU3ODg0MDVkMDEyOTM1NGU1OWMwNDdiNTM2N2YxMTU4YmNmNGUwNjZhMjc2OTUxZDI1ODZiYWZjM2MxMWY4YTk4MmNhN2MzYmE0Njc3YTkzODQ5OGJkNTExNzE1NTJlYTAzMmZlMWJkODVjZmVhZWI4N2U4NzE2OGY3YTI4ZTk3OWIwODM1OGY4NDEiOiIiOjExMjoiY2Q1OTg2ZGY4ZTk3NjFkNTJjYjU3OGU5NmIxYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJiMTc2NTJmN2YwNDA3M2FmZTlkOWViOGIyNjE1Yzc1NTA5NjhiOTc3NmIxMzlmY2M0ZjliMDMwMDkxMmNiZGIiOiIiOiI5YThhYzIzZWE3NGIyOTJiNzM4NjEzODY2NmEwZmI2MCI6IjI3MzIxMDcyNDFlNjEzNmYxZGQyOGQyMzMzNzMwNzlkNzVkNmFjMTM4MjhhZTdhZmM3NTFiNmY5YzU3ZTc3MjY4YzUyYWU5MWY0YWIzMDE2YWYyNzY0NTk3OTk0NTczY2Q2YjQxZjcyZTIxYjYwZmZiYjNhYWZjOTQ4N2FjMTlkMGZmZThkYjJhZTJjNzUwNWFlNTk2M2IwMzJkMWVlMWJmZmI0YzViZDg4YmIwYzlhMzUwYmEyNmVlM2ViOGRjMGExNTc5NTUzMzNlNGYyOGM1ZWM3MzQ5YzM5MjI5ZGZmOWY0NDBkYTcyOTA5ZjI4NzBhZWE4NzNhNzY1NDVlZTgiOiIiOjEwNDoiZjdiOTQyMjk0MzkwODgxNDI2MTlhMWE2YmMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNmZlNTAyZTIwZDY0NzNlZDlhMjc1NjliNjNhNzY4ZWNkNDI4NzM4OTA0Y2YwYjMzN2RmNTEwNzc1ODA0NjE5IjoiIjoiNDMxYThkNzhiOTE0MTQ3MzdlN2M2MTg4MzI4YTZkMzciOiI5MzRiY2FjYmFjMTBlYTRmZjZlZTk0YjE3YmQ3Mzc5Yjg4NDg5ZmJmMTIzYmY0OTZjNzhjOWI2YjAyZWU5N2RkNjJlZWRkMDViOGY0NGY0OTEyNzY0OTIwMTI5ZTcxMTcwMTYyODk5MWEwMDA5ZWJjNzAxN2ExYTE5YjE3N2VjOWJjM2IwZjI4MGVlZWZhZGZhMzEwNzA4ZGZlMjE0NDI4YTE4NDE0N2I0NTIzZTY2ZjJkNjI2MzBkNGExMmZkM2UzNjZkMjdjM2I3ZDE1NjY1NTNjOWI0MzRlZDE5M2RiMDgzMTYwZGExZjI0MWRlMTkwYmNiZDM2ZjQzNWUzMGY0IjoiIjoxMDQ6IjFkZDNlNmQ2MTBmMzU5Y2M0ZTk4ZDM2MjQ0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2NjNTQ1ZmQzMzBjZjE3ZTI3ZDc1NTgyZGIyODgwN2VjOTcyYjg5N2Y4MTJkNmVkNDcyNmQyYTE4ZGFhYzc2YSI6IiI6ImNhZjJmNTY1ODRhNTljNDJhNTFmZGJmZTRhZDc4ZjNjIjoiZTg1YWU2YjI3Nzc4ODkzZjM2ZjEzMDY5NGFmMGI0MGY2MmEwNWFhMzg2YjMwZmM0MTVlMjkyNzYxY2FiMzZmZGMzOWJmNTY4N2E1MTNlMjVlZDE0OTQxNGYwNTllNzA2ZDhhNzE5YjcxNjUwNDRmY2JkNDhjNzczZWFlNTQ2MzgwYjhlNjY3YjU2ODI0ZTIzNjg1MTczYWQ5MDE1YTk0NDliYzFjZDBiNzY3OTgxZWZlMDlkYTQzYTA3YmYxYWVlZTA4YmEwNWQzODdiOGEwMDE5OWUxOGM4NzRmYjNhOTFmNzdiYTQ0OGMzYmZmOTcxNTkzZjk0NzQ3ZmNlOWNiZCI6IiI6MTA0OiI1Y2Y1YzdjYTZmYmZlZTYzODU0ZjNiY2QxNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODM0MGQ2MDQ3NzBjNzc4ZWU4M2QwZmRkNTcwM2IxZmIzMDRjM2JmZmViNmY0YzY1ZTJkZDBlMTJjMTliZGRjYyI6IiI6ImMwYTU4MDQ2NWIxYjJlODM0NGY3OTVhNjU3OGE1MTUxIjoiNzk5ZjIyODk2MmVmODc4NjVkZmNmYTBhZGRkZTczNjZkZTJlNGFhNzgwMjlkYmM4ZDU3ZDdlNTBmYTdjNzQzNDM0NThkZjM0NjUxMDM1NTZhM2JmYzVjZTIxN2ZiYmI1YjI4MzVjOWY3NmI3MDI0MGI0MGZkNjA1YmNmYTZiNzkwZDU5ODVhOGJhNTQzNTRlMDYyNTI2M2M2MjhlODc0NmM0NTE1MDRmYzU4YTE3OWY5MGY3N2YyYjI5M2Q4ZGJmNTU4MmIwMzEwODIwMjVjODA2ZTYwMTQzZGE5ZWJiNjEzM2FjODM2NzM3NmQwNTcyYjMyNTY5ZWU3OTk1NDBhZSI6IiI6OTY6IjMxOGY1NmJkMGYzODMyZDA0M2VmNzAwYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzRkZTQ1MjYyZmUwOWUxMmM5ZWU3MTAwMDMwMzUyMTEyYTY1MzJkMTg3NGNjNjc5MmI0ZGE2OTUwNjc3ZWIyYSI6IiI6IjlmN2ZjNzM2N2Y5YWZkYjY3ZmQxYWZmZmFjMDU4ZTJhIjoiMjg5YWM2ZjViZWVjYmJjYmRlNWNiM2IwZmRmNGEyN2JhMjM3ZmNhMzM3MTlmNzc0ZWQzM2E1ZmQzNWQ3ZTQ5Zjc2ZDNlODhjNTNmZDM1NTYxNjU1YzM1NDY5ZjNlZWZiNWIyZjc3NmZmMjc5OWFhYjM0NjUyMmQzZjAwMzE1NGU1M2Y0ZWYwNzVmMDE2YWFhNTAwYzc2ODcwZTY2NTlhNWY5YWYxOTdjOWE4ZjViOWUwNDE2ZWQ4OTRlODY4NDYzY2M0Mzg2YTc0NDJiYjBjMDg5YTlhYjg0OTgxMzEzYzAxZmVjNGZjMGJhMzU4MjliM2NmNDljNjQ0N2Y1NmE0YiI6IiI6OTY6ImJjMWI4Yjk0ZmY0NzhkOWUxOTc1NTFjZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDQxZWM4YWZjZTYzMDgwNWQwY2U5OGIyMDBlNTlmNTY1NmE1Y2UxOWU1ZWY1ODI0MWU2ZWYxNmNhYzc2NDZiOSI6IiI6ImExY2JlZmZhZjU1NzA4YzM3NWRjZmViNDk2YjIxZjRlIjoiNWE2YmE1ZDNmNWE3YTRiMzE3YzZjNzE2NTY0YzY0OGYwZTZiYzZiMGY5YTRjMjdhZmZjYTZkNWFmMDRiN2IxM2Q5ODliN2EyY2I0MmNlOGVlZGQ3MTBiZTcwYzA0YzBlNDA5NzdjYTFjMmY1MzZhYTcwNjc3MDM4ZTczNzA2NGZiMGUyM2QzZGQ0OGJjMDBlYmRkN2Y5ODhmNTcxNDFlMTY0ZTNjMThkYjgxZTk1NjVhNjJlMjhjNzM3NzA2NjZmZjNiZmQ3MjVlZWJkOTg5NDZmZWQwMmYzMWQ1MDBiMGI3YWI0ZGFmZWIxNGU4Y2M4NTczMWE4N2Y1MGQ5NWZhZSI6IiI6OTY6ImFhNGJiM2Q1NTVkYWJhYWViNGQ4MWZjZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDY0MzExMWM5NzNmZmI3ZjU2YmZiZjM5NGVlZGFjNTRiZTJjNTU2OTYzYjE4MWNmNjYxYmExNDRmNzg5M2E2MiI6IiI6IjQ1NzViMDBiOWFmMjE5NWEwY2M3NTg1NWQzOTZlNGU4IjoiYjJjNTNlZmU1OWM4NGM2NTE5NzliY2MxYmM3NmIwYmJmNWU1MmI1YzMxMTU4NDlhYmRiYzQ2OWEwNjNlMmIxNjk5YmQyOTJlNWZjYjM0NzZlODQ5YzllZGJlNmVhMTRjMmFiOTQ4ZWQ3ZDIxYTIxZjY5NDA2NjIxZDNkNDEyYjA0M2VhZjgxM2JlNzIyZDkyNzM5YTMzYTM2MWVkODA4MWMwZWIwMDQwMGMzYzdkNGUzMjlmNWJhNGY3Yjc1ZDUzNDUwMGY0MmYxNzgwNDhjZjJlOTViNzY4ZmZlZDc5YzM1MGYyZmY3MmNiMzU1YWJkYjMwYWYwYTEzNjNjMGI0YSI6IiI6NjQ6IjlkMWQxODI2MzBkN2FlZWUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkxMzAxZWUwY2E2OTRhZTY5NzFlZTcwNWY1M2M3ZWM0NjdmNGM4ODI1N2Q2NDY2ZjZmODE1OWE4OTcwMzg0YjkiOiIiOiIzNDVmYjU3ZTg4MTI0YTQxNDgyODczMGE4NWY1Nzg3MSI6ImMxMzYyMzgyNGEyMDQzODVmMzUyMzg4MDk4ZjVlMmRiMjM0MjZmMDBhNzNjNjBjMWJmMTA0N2NlMmM3Y2RmN2Y3Y2M4NDc1NzgxZmU3MDc1ZDEyMjZhZDE4ODcxZTEyZjAxNTZmMzVlNmNlNzAzMmVmZTNiYWRlMWM4MDdmOWVlZGM3MjBmZmY3YTI3YTJmNDY5MGY5MDRiZTljOTliNTRhNjU1MDllYWI2MGU5N2M0MjgzNTk2ZWVlZmEyYjI1MTdlOTVkZTc2MjAzODJlM2Y3ODBlZmExZGJmNWQzOTA4MzczYWRmZTc4NGE0ZmFmMjk4NjgxZTE3MWJhZGU0YjMiOiIiOjY0OiIzMjVkMDhjNWI5NjA2OGMxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNmJhNWMxMWRhZWQ3Zjg2OGRhOWJmZDc3NTRkNTU1YTE0N2ExZmZkOThjOTQwYzFjZDVkMTM2NjgwZTA1YzEwIjoiIjoiYjBjOTJiNzlkNzg1NDc0OTZkNzcwNjc4ZTFjZTE1NTIiOiI1YjFhYzhmZjY4N2Y2ZmQyNDI5ZGM5MGE4OTEzZjU4MjZkMTQzYTE2YTM3MmNjYTc4Nzg0NWNlYTg2ZDliNDc3ODcwOGJjMGFhNTM4Zjk4ZTEwMzE4NTBmN2MxZDk3ZmI2NGZlMjlhZGNlNmUxZDUxY2E3ZjUyMDNmYzAzNThmZTBiYzU0MzQ3ZTc3N2RkZGZlMDRlM2Q3YTY2YTFkMWUyYmRiOGI4OTI5ZTIxMDBkYWYwNzM4NDVkYjVkYzBiMjQzODE5NzU0YzRjMDhmNGZjMzYzMWQxY2JkNzlhYzc2MDQ3NDZkNjc3ZmYwMzU5MzBmY2Q2YmQ2NTJlNzg2NGRiIjoiIjo2NDoiYjE4MTliNmYyZDc4ODYxNiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWZjYWUxNzU5MjA5ZTc4NGRhZTVhODI3OGIyNjdjNDE0YTAzY2U3YzgwM2RmMWRiNzgxNWIyOTEwZDEwY2UxOSI6IiI6IjI0YzVjMzQ5YjNlZmZlYmZkMDc2Yzg4YTU5MWI4MzAxIjoiY2EyNzc4ZTM5ZmZmY2U3ZmJlOGY5MTJlNjlkNTU5MzE4NDhkZDVhYjBkMWJkMzJlN2I5NGFmNDUzMjUxYTQ3ZjU0MDhlYmFjZDdiNTBkZGQxMTAzZmFiMWM3MmFjYzBhMDJmNDA0YzU2NjFkODQ1MDc0NmQ3ODFlMmMwODYxYjY5NzRhZGU5ZWUyNTE1ZGE4OGI0NzBmMTZkNWYwNjAwN2YzNWNlOTdjZmMxN2ZkMDE1ZTQzOGFmMzljYTYxMjdkYjI0MGJhYmU5YzQyZWQ1NzE3NzE1ZjE0ZTcyZjBlZjZmZjRjZTUxMmRlOTVhMTc5ZTYwZDYzOTNlNzNmMjE2YSI6IiI6MzI6IjhlNTlmMzBiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4ZDcxYTcwZmQ1ODEyNWIwZGE4ZGRkZjhkMjNkZGJlMGJjNDQ3NDM3NTNiZGYyNTk0NDhkNThhYWU1NDc3NWE2IjoiIjoiZDE1YjAyNTcyZGVjOTgzOThiYTllNjhlMWE0NjM3MzgiOiI4MTMxM2JlMWVkYTlmMjdlMDFiMzA4NzdjYTkwZTgyNWY1NWVmNjBiMTU1NDhjNDVjNzg2YzQ0YjAyNGU3MTk4ZjMzM2JlN2RkZDJjM2Y1OTNhOWI3N2I2OGU2YTdhYzRjZmMwMTVhZWVjNjZmNDgyM2Q5YmU3MTUyZjAyYTUzM2YzNzU1NTQzMDlhNGRiMGZlYThlNzYyNTUxNDQ0NThlNDg4ZmQxOTEwNmQ5YTk2MTRlODI4YWUzMDZmZTgyYWY4OWU3OTgxMzY5YjIyNTljNDliYWU3N2Y4ZWMyYjFmMTY5ZWYwNDQ5YWQwODNkMTE5MDcyMzRiNzJlZDJlNDY0IjoiIjozMjoiOTlkZjFiOGQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI1MjM5OGM3Yzc1ZTFiMTQ2Y2M5OTk4ZWIyMDMxNTk5MjVjZjZmYzBiMWM5OTNiYTQ2NTI4ZTJmOGU4MDg3ZjAiOiIiOiJhZmM5YTYwYWI4NDQ4Yjc3ZmIwNWU4NDEwZDBhMjZlOCI6Ijc3MGIzNzgyZjBlM2ExOWQ3ZDZiYjk4ZmEzZWIwYjkxNjkyOGEyOTcwNzAxYzBmNGEzNzJhMGVjZDYzNDk5NDQ0YWUwMmZkMjY5ZGRiN2Q5MmUxMWE5ZTExZDBlMGI4YmM2MDA5NmE0YmU3OWExZTA2MzE3NGI3MTBjNWQ3MzlkOGQwNWFiNWM4YmExMTlmZjQwODQzY2Y4YzVkYzRlMWJkNmZjYWQ4Mzg5ZGUzYjYwNjI4NGM5MDI0MjIxMDhkODVlYjM1ODk1MjQ3NzY2NDFiMTc1OTQ2YzlhZGUxNDY1ZTBkMTA2NGM1YWUwNzNiZTkwZTMyNjE4NzhhOWFmOTgiOiIiOjMyOiIzMmQ2Yjc1NiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY3OTM4Njk1MTNhYzg4NmVkNjZlNTg5N2JjZmEyNjM4NzdkODQ2NWZjNzYyYjFlZDkyOWJhM2QwODYxNWZkZDUiOiJjZGE0NWUyOWY0ODdmMjFiODIwZTFhZjJjOGU2ZDM0YThiZGYzZjcyZDU2NGE0NjI1YTZlMDZmOWJhZTFjMmVhYzNiYmQ1YzU5NThmZDc1Y2YzODlhMWEzMTM5MTIxMTc0NTAyOWRjZDRjYjI1NzVmNDBhYjA0NzEwYTkwOWI4OGMyZDQzMGNkZWUyNzlmNTRjZjdjMGZmNjYzOGQxZTBlNjMxZjUyNmVlMTk4Y2ZkNmU1Y2RmNzNkMWExMWI2OWRlMDFkNjQwZjM4NWZkODI5NjE2Y2QyYzBlNzhmMDliNWY2NDAxMmU0MmRlZTllYjAyNDViNzJhYmExNDA0ZTBjIjoiYTQzZGUxNWRhZTI1YzYwNmRhMWU3YTQxNTJmMGRmNzEiOiIiOiIzODU4MzRjODUzNzcyYWY3MDY3NWI2YmUyZDUwODdkZjg0Zjg4YjZhMzAzZWE1OTRhMTcwZTZkZDAzOThhZTI3MGZjZWM2MTY2MWNhMzczZjQ2NTNkOGRjYzllNzE3Njc1NjhjMGZiMDMwMjNiMTYzYmRjOWFlOGEwOGVhODU4Y2JiMDNiODE4MmI0Njc0MTQ3Y2IzNWZmZGExNGEyZjUwZWQ5ZWI0OGQ1MzUxZjAwZWIyZmE0MzNmZGZlZDZmOTQ4MzNiY2Y2NTZhN2UzNTBlYjk3OGEwYWFmN2E5MTY3NDE0NWYyOGY2NDY5MzE5N2ExMTZiMjEzMjhlMjczZGNhIjoxMjg6IjE1OWZmZGIwNTYxNTk0MWUxMWYwZGI0NmFjOGYyM2RlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWY3N2MxNDFiMjM0OTA3YjM4ZmI0NWYxYjM2MDJmM2MyOWRlMWVkODM5YmI3YmE1MWY2MTkyYWE4YmFhYTI4NyI6Ijk2ZGNiNzRhNzhlOTk2NzZhNzE2NzNlM2M5Zjk0YzM0YjM0ZGFkMjc0OGE2ZTQyY2M3MGVhNTBlNDFlZjhiODZiNTk5MjI5NWQyY2JjOGQ2MjFmZWZjZTA5ZTg5NDhkZTdlNjk2Yjk3ODgzNzdkNTk4Nzk2YWZkMDAyYTgyYjYyOGQ5ODkwZGI3ODM1OWUxZWRjMDc1Y2JjMGQzZjExZDU0NGJmZGY1YzhhODM4MzkwY2I4NTY3MzU5NDJkZmYyNjAxODljMDBhY2NmYWJmNzIwZTVmZWYxZDliNzEzMWE2YjJiNzY5ZjY3Mzc0NjAyZDFhN2VkOWI4OTliMmMzOTgiOiIxYjQ5MDA1Nzg4MTQ4NjY1Y2VmMjBkOGRjZGU0MTg4OSI6IiI6ImI0Y2E1OWNhYWE5NDc0OTMxNzc4OWI5MjI1N2YyZWYxZGQzZDliMWY0ZWU5NTQwOTI3YTZhZTdiZjViYjBiMzQ4ZmNmMjViYThkZGRhNzlhODlkMzE3NGFjMTcxMzQyMTI5MTkxMGM4OTI2Y2ZiYjRlYzFlNTliZTdkZDUwZTgxNmZmNTg2ZjE2NWM2MDUzNzFlZTYwNzdiYTRhYzBjZTEwNDk5ZjlhMmE0NDg2NmNlNjMxOWZjZTIyNjUyMjI2MTY0Y2MwYTgxM2MzMTQ3YzQ0NjFkZDA0MTBlMzcwMWQ0NjQ3ZDVhMDAzMDkwMDgyZTM2N2NiOTI0OWNmMWJlNDciOjEyODoiODA0OGFlMGMzNWE2NTZmY2FhMmY0YzFiNmJlMjUwZTIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNDE5ZmQ5ZGJlNTg2NTUxMjJhYzEwMjI5NTZhMDIzNDQ2YjdmNDc1NjE2Mzc2OWZjMWI5OWVhZjhmYmExNDc0IjoiOTNiYzMzZGM2NDdjNzMyMTE1MmIxMjMwM2YzODkzN2JkMTkxYWIzY2UzYjNhNDNhMjlmNjg1M2IzM2U0MTU2NjdkOTcxOTJmY2FiMmQxYmFhMDE3MDQyYjMwMWQwM2JhZTJmNjU3NTA1Y2M1OGUzYWE0YmQ4NDlkMWNlODVlZGUwZTE5MmEzNzNhMzg5NGM0MWM1NGVkYmFlMjlhMjA5ZTE2Yzg3YzgxNDQ1ZDQzOTY4NTk1Mjk3YjUwYjU1NjU5ZjhiOTJkNzI4MmEyYjNjYTg1ZTRiNWQ0YWM0ZmY1MDYyNjM1MTAzZjJjNzgwNmZjYzczNzhkNWMyMDEzYmU3MiI6Ijk0ZWYxM2RiZmU5ZjM2MmRhMzUyMDlmNmQ2MmIzOGE0IjoiIjoiM2RiMjNjMTYxY2YzNTJiYTI2N2RhYjZhNTVmNjExZWI1ZmZmNzhhNzUyODg3NzlhMTY3Y2QwZTRkYjZlNzVkMjFmMTFmNGZmMjkyOGFiY2IxYjQ2ZDgyYzJhMGIxZjY0N2M2MGRhNjFmOWE3MjU2NWY2MjliMDZhN2IzZmU5NmU0MTQxYTY4ODY0MzY4NTlmNjEwNzI0YmJlNDNmYjk5ZmFjOWI3OGIxZTAxMzhlMmQ1N2NlNWZjZmFjMTU5OWJkYmE1NzAxY2I0MjQ1MzVmYWQ5YWM0ODJhYjM4MWVhZGNhMDc0ZTczNzYxMDFiNGI0MzZmOWM0M2VkNzYwYTBhNiI6MTI4OiJlY2Q0YTczNzAwOTZkYzc4MWMzZWIzZjdlNTk4NWVmMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA4ZTExYThiNGIyNGU2MzA2MGM1MDAyNzEzNzI1YmI1YjRhNDEyZjFkNzZlYWMxMzk4OTczOGNlOTRlMTk2NDIiOiJkNTU5OGY0ZTM3Mjc0ZjNiNjE3YWE0ZjljZjZiODU0N2I0ZWIxZTBlYWM3OWY2ZWVkZDZjZDUzNjRmODg5MWY2NmI4ZDBjYjA5ZjU0Nzc3ZDQ2MWJiZjkyZDZmZDc0YjNmYWM0MTJiNzdmMmM0OGUxMDI0Y2YwOWI4M2MxZTcxYmI4NmYwYTIwZjgyZDI5Njg4M2ZmZWU2MmE0YTE5MmIxODRiYzZkN2JhMDQ0OGMxNTE5MzEwYzgzYjE4YzAwZTcxMTUzMTM3YWZhZDE0ZjA5NmI0M2Q0NTRmMjA1YmE2YjZjMmVjMTYyYWE5OTJjZWJmNTA3MzVkZDliYjM3YzdjIjoiYzZmMWU2YTM5Y2FiZGExMDg5MDQ4YjUzNmUzOWNmNjciOiIiOiIxZmRhZjAxNTY0NTZiNmIyYTY4ZDY2MDkxYmYyMjYwNzkyNzQ4YWNmM2U3YmJiNzkwNmFmOGUwZGYzYjU2OWE3YzAzZWUzYTQ4YmRmZGZmN2NjZDUyNDMzZDBiYmU4YzVmZTMwZDkzNjMzYmI5ZDU5MWRmYWQ3ZDgxYmY4ZWZkNGQ0YTNjNWMwYmYyYWM5ODMyZjBhODY4N2YxNmJlNjQwZmNmOWIxOTE2OWMyNTFmNDZiOTcxNjdkOTUxMTVhY2RlZTNkNDQ0M2RmNDE2Mjc1ZjU1OTdhNTJjMTdhNGI4YzRiNzIzZDRiMzVhN2ZkMGIzODBmZGViZDQ0ZGY4YmQ1IjoxMjA6ImNiOWY0ZDQ2MTBjNjdhY2ZlNjEyYWY1NTA4YmI4YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRhMmRhZTAxMDdjMjg0ZWMyYWFmNmU3MzA2OTU5ZGYxZTkyZDM5MzJiODg5NTRmMTE5YWI2NzdjNmI5ZGNkYjUiOiIyNzc2NzUwNDRjYWYxNzEzMTA5ZDRkM2FiZjUwYzZmYjY3ZGM2N2Y3ZmE1ODRmYjFhNDFjODMzZmVlYWQwMzE3N2NmNGI0MmVkYWMxMzk4MDdlZGUxNmViMWQ5YmVkMjdkYjc0MWY5NTQyZDQzNzc4MTQwNTYwOGRlMTg0MThjOWY3MjY5YWIzZmQ4OGY2YTkyMmEzMWVhYjVhM2I4YjJhYTc1ZWU0MzE1ZmNlYTgwYzQ5NTRlYTY2MTNiMTM2MGIxYzdjNmI2ZGE4MTVlM2Y2ZTUwZjcyYjdlNjljM2I2Y2IzZDE1NDg1NWUzZjgzY2JkMTk0N2ViNTQwMTgxNTVhIjoiMjAwNWY3OWQ1NWIxMmU2ZGZiYWI3ZmVkZWNjNTBlMmQiOiIiOiJjMmFhYWI1MjRkMTczOGI1MjQ0YWY2NDJiYmQxNmIzMmJhOTU0ZTY5YWU1MWFjYzgwNGE2YjBmODlmNmNiNzdiYTJkYjJiMGUxMDljZGE2MDM2Nzg2ZjljZWM1NTg3YjAxZTMwNmVlOGIzZDU4ODc0OGM2MWFkN2ZjZTEyNjYxNjU3MjlkMDE1M2VlMTg5NzQ2YjEwN2NlMTVjZWQ2NjcyNzlhNDg0Mjk0NzI1ZTEyMGRjMTgwM2QyYzc1MTc4NDQzNmFiOGZmMWQ1YTUzNzYyOGVlMzU3NDJkMTkxN2RjNTFmOGNiNDZjMmQ2Yjk4M2JkZWM1MDJlOTliODVlNWI1IjoxMjA6IjUyYjRkN2YyY2M0NGYwNzI1ZWU5MDM1NTFmNjgxZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYzNzgwN2IzZTQ3MmUyMjg3YjA5ZDVhM2VlNjJmNzkxYTQxNjQxOWJhMzVlMTFjNDliMjRkYmFkYzIwOWYwYmEiOiJlOTFhMGE3MzIwMzI5ZGFiYjBkMGZkN2YwOTlhNGQzMTM3MjRhZWVlYmNmZmU2ZmNlYTViMDBhZjI3ZDI1OGNmOTc3NDg0NWQyOWFhZjVkYWQ2MzRjNmYwODdjMzMxMWIxYzkyNzc1ZmRhOGRmODgyMGM5MTE4NmRhMzBkYzc5NzQ3YmU2ZWM2MjMwZjJjMjYxMDYzMTQzZjRmYzg5ZDk0YzdlZmMxNDVlNjhiZmRiZDU4ZmIxNGU4NTY1NzhlZDU3ZWU1YjNjYmEyY2M2N2RkNjQ5N2YwNWQxNTcwZWZhNDk2YjQ2ZjViY2JmODJmZjljNmE0MTRmNzZmY2YzZjVjIjoiNDY5MDlkOGRiYTZjODJiODZjN2EyYWNhM2M5ZTcxZTAiOiIiOiIxM2I0YWQ5YzUxMDYzYTdmNjk3ZjNmYzY4MDMwMTQ0YWVlMGFlZWYwYjVhNTJjOWQ0OTIwYTcxODViMDQ1MjE1OWNmMTNlNjRjYTIxNmZmMTY2MzdkMDk0NmE3NWZiNWRhMjgzZmNkMjYzZGQ3ZWYyYzhmMTRjZjc1NTM3NzQyZDFmMGU0ODg0NmZjZGJmMDNiYzM0MzIwM2Y3YzMxY2Y2MWIzNjM3NDAzMzQ2MmE3YjgxM2Y0ZGJlOTM4NmU1Nzg3NDU5MWZkZTYwNmZiYzE1MGQ0OTE2YzMzOWYxOTUwYjA5YjE5MTFiMWI5MTE5YzNmZjQwNTNlMDU5MTBmZmIyIjoxMjA6IjZhNWM4M2Y4MDc0MDFkMWE5YTNhMjY4ODI4OWY2MSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMzNjEzZGM2ZTAyOWRmMGYzYWI5Y2E2NmZhOTZjZGVhYTg0YzEyNjFkZDU4NjcyM2IxY2U4NzM1NDU1NjVmN2EiOiI3NzU4NjJiMzljMmE1MDlhZmQzNDcwYTU2ODkxZmJiNzliZGI3ZGFjZmRiOWFjNzJiYTQ3MzBjYjkzNmQzNjRlMWFlZDNjOTJjMDFhMDE4Y2ZjZDc5NTNmNzUxMDAzOTM0YzE1YmRmZGYyODI2ZTk5NDdlYThlNTIxZjU1ZmQyYTA0Yzc1MTU2ZTQ5MTBmMzg5MzJjOTczMmViM2U2MDQyM2U4NDlkMzRjNTVlM2ZkMDBiNDhkODMwMjhlM2I0ZjM1Njg2MDE2MTI2ZmYxNmM5NDJlYzg1OWQzYzNhYTJlZTZkMzIyYTkyZGM5ZmE5YjAyNDc0MjM0MTZmNWE0YjQ3IjoiNTk0ODRmYmMyN2NkYmQ5MTdiYjU1ZjgxNWY5ZmFhYjYiOiIiOiIwNjlmODA4MjZkYmVlMDNlNmEzNDM3ZTdjNmQxNmViNjAyMmJkMTQ4MjdiOGU0NWJkNDQwZDliMWE4ZGRhZTA5OTk5Mzg4YmEwYjFiZTBhNmJhZmRiOTZmMjZkYWQ1MjNhMzU5MmZhNjEwZDUwOTFmNjgzODBmNGMxYzNmYTllZjdhMDc5NmFiMTgzZThhODJjMmJmMWY3NjMwMGY5OGNlOTgzZWFiN2E5M2RkYjE4ZjFjMTA1MzRmZGI2MWFjZTgzY2FlMzdlMjI1OTMwYWI4NzBhNDYyODVlNzMzNzg4ZTkwNzI1NWNhMzkxOTQ1ZDQwOWQyZTUzZGQ4YTI4MzkwIjoxMTI6IjlmMzFmOGY4NDU5ZWIwM2RjMzY1NGNhYmE1YzIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NWQ4MTMyZjcwZWYzZjJkODk0NmQyOTZjODMwMTQ2ODNlYjJhNGE1OGI1NTVjMGY0OGU0YmZhNTc3NGQ2NjcyIjoiYTViZTg4ZmQ0M2RjNzYxODM4ZjNhOWM3ZDYyOTIzYzM4NDE0ZmE2MWIzNjc4MzEzY2JjOGZhOWMyZTVlZmZiNmNhZDdkNWJlNWYzOWE3MWEyOGZmMzI3YjY4YTY5ZjdlNmE2YmNiOTBlY2NhY2FmM2E4NjU5YWViOTA1ZGQzZTM4ZWZlNTdmMmJkMGQxOWRhYWNhZTIzOGJhYTAxYTcwNTEwODRkYTY1OThmYzVhMzc4M2ExOGRlY2VmYzhlZmM4ZDQ2YzdiMTg4N2Y4N2Q2ZDcwYzkwOWRmNDkzNDBiY2M2ODA4MzJmYWFjM2RkMjNjYWI1YmNkODA1NTNkZDQ4NSI6IjVmZjQxZjNlNzVjMjVjZWRkYTFiMDhhNDFiODljNGI0IjoiIjoiOTU5Mzk2Yjg2OTEzMzM3ZjJiMWZiMTk3NjdiNzg3YzE4ZjAwNjYxYzVkNjAxYmM2NWU4ODRlMTVhYzgwNDMwODE0NTllODg5NDUzZTkwNmVlMjY3Y2I1ZDA0ZmJhZjI1MDE0NGE1NmM4MjBlY2EzNDQ2OTk2N2M3M2RhZjUwNzk2MTg0ZWNmNzRmM2MwNTRiZmE2M2JkZDBjMzI0MjVhOGUxMDU0NmFjMzQyYmI4ZTM4YTE4NmU0MmE0MDNjYjgwMTEwYWVmZDVmMmQwYmNkZDM1M2RhYTQ0MzBiOGU3ZWMyMTM0OTI1YzQ1NDc0NWUyZjcwOGNkMGI5MGQ5ZDY3MiI6MTEyOiJjYTA4ODlhMGViMTI5OTUwNzljZjliYTc3MDE5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGQ0NDM0NGQyZmY5YTAyYjFjNzU3ODViYzg0ZjE2ZTRkMjM2MTRiZjQzYjJiOWE4Nzc5OGI0MThlOTA1YzUzMiI6ImU1Njg5Y2VmOWY4MjU4YTc0OGE2MTUwNzBmY2JmNDBlZDBiMjRjMDc3ZTJmOWEzNjJjYjUzNjczN2ZmYmM1MzgzYmNhZmVkMjc4ZDRjNWUwZjNjODNmZGQ1Y2RlNzk0ODNjMmMxNzhmNmZlZjA1YWI1MGYyYjhkYjY4MDAyN2ExNzViYzZkNzAyZDI0OWVmY2Q2Y2JjNDI1YjczNmYxOTA1MzA3YzkzMDNhNGJkOGFjYTYyMGI1N2UzYmI0YjY4ZjJhNTE1MjU5YjA2Y2Y1MzY1YjY3NWVkZmYzNDU3ZTJlOTE1ZDdkYTFlMDgwMmY3MzAwYjNkNTZjNDY0NGY0YWQiOiIyNTZhOTgzY2Q2ZDZlYjRlODBiNWMxZDFjZDJhOWYyMSI6IiI6IjEzZWVhZGJlY2M0Yzk5OTFlMmFhMGIxY2E4MTk1NzJlZjI4NTE3NTI4MzIwZGI5NzA3MzlhMTY5OTRmODJjZDhiNWJiNTNkODg5ZjI5OGY2NWM2M2RjYzA3MDg5ZGJmN2U5ZDAwNjEyZDJjYzgyMjBiNTYzMGNhMDI2MmE2OTg4MzZkOTA2MjU2ODk2ZWVhNDQ2ZjZkZTQ1MDZlNTU4YjRmMjA5NTA1MjhjOGMzOTdiNmI1YjA0ODkwMjA0Yjc3YTE2M2U0NmM4MGM5NmIzZTI2OGZkMjc1NGUwMzgwZTczMzA3ODJkNjA2Yzc3MWQ2MDg1YjM0MjAwYTgwMzM1ZjAiOjExMjoiYjMzYWIxZTQwMjk5OThlMjU2NjU4M2RkNTUwZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM5OTlhNmEzOTQ5NDNiZTNkNmU1NzMyYWY1ZmFmMjZjYWY0ODNhM2ZkNDJjMTNiN2Y0ZjAyMTMyZTkzYTk5MGQiOiI4OTA3ZTg4MzI1NTMyNjRkN2U5MmFmYTE1OTU4NDJhYzY2MWRkZmVjM2Y0Mjk0NTY3ZmFhMGFmNjFiM2QwZmRmNzZhOTIyYTJmM2FmZmIzNmIzYjNiOTdmMThkNTE3MmFlYzBiOGY2ZjAxMjM5YmI3NTBjMGZkZDVkYTFlMTI0NDQ3M2NkZmFkZTgzNzk3MDM3Y2E0NmQ4MzEyM2U2MTA1YzVjNTQwNzE5NzFmMTkwZGEwYzU5ODIxYjBiZjg3MjQyNTAyYmQxOWQxOWM3ZjQ2MzE0NWJhYjBlNjg3YTE4ZmZiMjIxNmM0YTJhZDJjYWY5NDg4ODAxYzMzYzc4YzAzIjoiNzZlMmE1MTQxZDA5NGIzYTc3NzY1YmEzMjhmMzM1NzYiOiIiOiI5OTUxODlhMzk2NDg2YjQ1MWRiMDE2N2NmNjk5MDU1NzI4NzA3NGRlZjQ2ZWVmODcyZTZjZmUxYTI5N2UyNTZiZGZmMmI3MTY2OGZmMDE4NGVlZGYwMGZmMWEzZWM5MTM1ODg3NDcxOGYwYWY4OGFjZjJiZGIxOTFlOTczMzJkYzU0NGQ5NDA0MTIzNjM4NDBkNGMwM2M3YjIyMzE4NTIzOTNjNjJkNjI1MDkzMDExZWYzMTRlNGY3NTViMWQwZWUzNzY5MGI0ZGZiNTUxOTRhMTQ2NTcxNGNjM2NiY2RmOTNhZjM5ZTY2NmJlMDQwNzUwOGI4NzY0ZjdlZTk1ZDNjIjoxMDQ6Ijg3YzhmNjFmNDU5ZmQ0YTA5ZDllZThiMzMxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDM1OWE2MmQ1NGM0Mzc3MGMzYTBkNTFkYTI1Y2MzMmZkOTg1ZDliNDFjMjgyODg3Mjk5ZDJlMzQ4YWEyNWEzNiI6ImYwMjBjOWNhZmJhMzk5MDA5YmQ5MjBjM2ZmYzE2NWQ0ZGI0N2E5ZWUxNWNhOGMxZjUxYzY1ZTMwNmNjY2NkM2YxZDY5NDA3MWEzYzc2NWI1MjU1ZWJhNmVmNmEyODBmNjA5NWY4YzE5NWViZGZiZWU2OTY4YjU3MzY2ZTYyZTE2ZDA1YjE3Njg4MjVhYjdmZTY2MzAwOTQxMjcwYWExMjFiNGZjMDJhYjk3MGNhNmUzMjE3MGNkYmNjYjQ2ZmM1NDg2MjBmYTE3NzcwNDkzNDNiMTYwMGJmYjFiZGVjZWM2NjgyZjBhYTcyNDRhMDg1MmFkYmM3YWFjZWRmYmE0NDYiOiI1ZmVmYTg1Yzk1ODQxN2I2YmM4YTYxYjU0OTZmZWE5MyI6IiI6IjNiOGY4MjlhYTFjYzE1MzJhNDM0YmZiYmQyNWY0MjQ4MDMxMTY1NzIxNTk0NmI5MjE2ODQ2NzA0ZmQ1ZGE1ZTg4NmNhOWQxMzBkZjQ2NmMzYjU4ZjUyNTkxMDJlYTZiOWFkNzU2ZTlmNDg0YTM4ZGQwZWQyODlmZWEwODNhYjk5ZmVmYmMyNzQ3MTAwMDcxNzQ0ZjEwZTM2MjM1MWQ0ZmZhYzZjN2MxZjVhNDllZjNjNzhlMmRjNjY3ZjZiM2JmZDBmZWM0NTRjNGUzMTM5NDQzZGE3MWU1MTQ1NDBkN2EyMjhkYjE5M2E0YzM1ZDYzOWVjMTNjMTE5OGVlN2Y4MWUiOjEwNDoiNTkxZGI4NjFiOTA2MDg2OWVkYjIyOGEzMjQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwZDc5OGEzNTdkZTVhNjg2ZDA2YzMyOWU0NTFkNzM4NGJmYmQ0NjIwNjNmYjhlYTdkNzdhMTNkZmExZjJhYWMyIjoiZDkyMDc4NWJkN2Q3YjFhMmM5YzIwMTM5MzgwYTZhYzVmMjdhMTFiNjE0YWUxMTBkYTE0MjAzMTQ2YzI2MTVkODFlOTc2NDllOTVlZGIwZWRhNzFhMGZhMTU4OTI0NGVkNDJmZDk0NDk5NjJhOTI5NDJlMzgwMDFhYzY0YjIxMmM3ZTA2YzExMzEyOTcxMmEwMTU1NjU3N2FlMDIzMjVhMjZlYjkyNTgxYzBhNjkwYTg5NDIyNWU4M2ZmMWUzNjc3NmYyMmI2MDA1MDhkNmQ5NmEwZDFjNTUzMTZiNTE4ZGY4ZDA5NzY5ZGY1ZTgzNDBjYmVhYmFhMGJmNzc1Mjg3MCI6IjUwYTAwM2MwY2I1MGFlOGEzMTgzY2Q2NDBlYTRjNmY2IjoiIjoiOWFmNmE1MzQxY2RlNGI3ZTFiODgzNDZlYzQ4MTAyNGI0MGFkOTVhNTE1MzNjZGQ4ZTA5ZTQ4MDlhMjA2ODRmMThlYWYyNDNlMWRmNTZmMDJhY2U5NjY3MjY0Y2MxYzZhZjZiMDkxNGYxNTRiMzMyMjM0ZjY0NjhjYzQ3MWVjYjIwNzhhOWY4MWMxN2Y0YWRlODNkMzI2YjY3MDc5NTQ1OGQxMTBlNGM0YjRjZDdmZTdmOWY1ZjRkNGZiMjNhMDM4OTY5ZTRmZjRmNzQ4MzliMWVkYzI3MGZjODFmY2RjOGEwYjE1YjljMmYwNTYxNTY3YzQ3MWI3ODNiNDMyMmViZiI6MTA0OiI2YzJmMDEyNjRmOWRiZjI5OTYyMTIyZGFmZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjliMDFiNmQxNWY2ZTY4ZmMyZTcwNzk0MjlkZGU1MzYzODg4YTY0MTAxOTFkNjAzOTQxYmVkMjcyZGFlZjdlZCI6IjEyM2I2ZGEzMDY5NzhmNzQ1ZDFkZDg2ZDdkZjMyZDk0MjE1MjNhN2YzMjlkZDI5YWQ5OGQyYzMwOTE0NTg0NDAxMDI5NWVmNDQzYTE4ZDM3ZmZlMDkzMDgwNjgyZmI5NmJhOWMyYzkyMTA1ZDM1ZDc3ODk3YjU4OWUyYWJjNzI2OWFiYTg3NTJjMmE0OGM4NDNiZWJhZDJjMGZhMjgxMDE1YmE4NWY1ZjcwOWY2YWVlOWIxZDQ5MjM2ZDU2OTVmN2Y3ZDAxNTU0YjE5M2M4OWFkY2QxYTkxNzQ5MTM4OTUyY2IzZjBlYzhiNWYwNDYzMjhiMzExM2FhYTA3MTVlZjQiOiJjYjRhYzgzNzNiY2JmMWIxNGNmMmE2YTZhMTZhNDIyYSI6IiI6ImNhZjcxZTA5Mzk1ZDU5NmQ1YTdiMDkxYzllODdiYTZkNTIyZTk3NDQ1MWU0MWYzM2YzZTdkZWQ1NTRmMjRkYWE5ZGE3MTllODc3OTM0MjRlY2E5YTNlYjM5NzI5ODMzNTQwNDEwOTFiYTRiMTZjNWM4YzE0OTEzZTFmNmNiZGEwOTc3OTE4OGU5YjU1MTI5MTdhMGFkZjRiNDM0NGYxMTk3MzZiYTYzMjg4OTc3MjZhMzE3OTg5Y2RkYzY2ZjE2YmFiNjQ3MDc1NjRiYjAwNjRmZTZhYjdiMmI1Y2NlMTQzZTk0ZDRiNmQ3MzlmNThjNDdiNmQ0ODUwNjk3ZjgxMDEiOjk2OiJmNjM1ZmYzZDhiZmJmYjQ5Njk0ZTA1ZWMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY5NmQ4Y2RjYzIxODg0ZTA1MGY3NjJjMDQ5OTMwZDc4MzYwYjU2Y2VmNWI5OWFlMjMyYzlhOGM2ZThmYTg5ZjciOiI5Y2YwNWU1MDY1NTMxZDI1MzlkOTJhZTc2YTQzZGExZmEzNjE0ZmZhNGIxYzczZGRjMjM1OGY4ZDcxMzQ1YzAxMjYwMDYwMjM5ZWRmNjI5ZWZjMzY1MGUwZDEzMTc0YWY0Mjk0YjZkYTBmMzljYzdmYmVjZmEzMjRhZmZmODlkZDdkMjAzNDE2YmQxNDRjNWUwM2RmNjBhMjg3ZmQ0YThkNTRlZjliNGI0NGIzZDZkZTFkOWRlMDc0MThiOGEzNGVjNWMyOGNlYzNjNWIyZmI4NjE1ODMxNzhhNjhlYTBhZjg5ZjJkZmJmYmQ4NmY3Y2YxZTU3MmUxYzhkNGIwNjc1IjoiNWE3ZWI5NjRiNmJjOWU3NTQ1MGI3MjFiNGQxZjhmOTIiOiIiOiI1NjZhYmFhMjNiOGQ0NjRkNmYxMDc2OTk0NTM3NDBlOWUxODkyNTQxNDVjNTEzMmZlNDY5ODlhNjY1NGRlMjk3Mzk4OTEzZGFhY2I0MDgzYjI5ZjdiMzE4MzIwNzk2MTZlOWE0M2M5YzI4NzhkZjFkZjQ1MWU0OWYxZTYyOWM4YjlkZTJmYjBlNGFlOWRmNDhlM2U4ODgwZjNmMWZmNWFjZTg4NDJkMjY5NWU3MDJkZDFiN2JmYTdjMjViMDUzOWI4YzgwZDMxYWM5MTg1Njc5NmJlY2VkMDgyYzIxM2U4YmU1NmVmZDY0NmRhZTkzMmY1YmY1MDNhZjQ2ZjQ5MWQ4Ijo5NjoiYzA0OWNjZTI5YzQwMWQzZDE5ODc3M2I2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNTMyMzRjM2RjOWNiM2Q1MGE4MDU5OGM1Y2RlMGUzN2I2YjEzYmY4MzRmMzU5NWE5NDU4ZGVlNjk4YTZkMTliIjoiNjg2YWQyNzQwYmRhZDUwN2ViZTk3YWE1YmRiZWYyNWI4YjAzMGM0Y2RjYWNjYjBkM2I2NzVjYTkxMjc5ZGIzZWE3NWFhMjIyYzBhZTk4Zjg2YzI0YjEwMDM4Y2JiNGZlOWY4OTdlMTE0NWIyZjU4Y2QzZTkxMjBmOWE1NjIwZjM4YWExZTFmNjM5MDZmNTU3ZmY0YTRjMzIyM2Y1YmIxM2RjYTM0ZjhhMWM2NDE5ZTI0ZWE1N2QxMTRjNjJmZWM2ZmI5ZWVlNThhMTZiOWU2YTZiZDkzMGFhNmZlZGNmYzU5MTMxMTI1MGU3MTY3ZDQzY2NhNTkxNmQ1YmVlYWQyNyI6IjlkMTU2NDE0YWNiNjNkMTFjYjM0ODcwYjkzN2M4MzdkIjoiIjoiOTZhYmQ1NmQyZjhhZWZlNmM2ODdmMDM1ZGY0NmMzZjk1MmE5OTMzYjhhNTE2OThlNDdkOTczYjdkNDdjNjVjYTNiYTI0NzRjYjQxOWM4NGE0YzNjZWZiNDllNzhjZWUxNDQzYThmYmJkYWFlY2Y3M2U5MDU5ZWYzNGFjNWEwZGYzZmMxNTJlY2RlMjI4NmRhODg0MGFkNDYxN2ZkNmViYzFlMTI2MzE0MjA0YmRjMGExN2I5NTg0MzBlYjlmNzI3NDk4ZmYxZGIxN2FhYmJkYWY0M2FjY2EwOTQ1MzQyZDJiYTkzNDZkYTUzNzNiMjM3MmIzMDgxNjA1ZTg5NWM5OSI6OTY6IjNkOTk4ZTViZTlkZjQzM2RhMDAxYTY4NiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTA1NGQ0OGQ1MjY5M2QyNzk3YzgwZDNmMTA1MDlkMWM4MDhmMzZhNGQ2NWU4ZmQ5NjhlNWQ1NjIzOWY4NTZiYyI6ImE3MDhlOWQyZDI3ZWQ0MjI4ZTViMjNkMzU4NTYxYTc3ZDY4NGQ4NTVkYjk4MjdiZTJiYzEwMmYyMjc4ZjE5NjFkM2YwNTZmYjc2Zjc2MjA0YjJjOTZiOTE2ZWI1ZTQwN2Y5OGU1OGVkZmVkMDZkZTIzODg1MjE4MzJkOTcyMTFkODUxZDNlMjk2NThkZjczOGUzYTE1NTkzYjlkYjAxNmQ5ZTQ2ZmU5ZGY5OGNlOTcyZDU5ZjcwNThkNDg0ODg2ZmZhZWM3YjlmZDk3M2M1NTY0NDgzMTI0MWMxY2U4NWJiNDc4ZTgzY2NlZmQyNmI5NzE4YmZlOTEwYWMzMTFlY2MiOiI4NzYxMWI5MzY4NzNiNjNhYmVhZWE5OTBkNjYzN2EyMiI6IiI6Ijk0NDczZTg0NjU5YmMxOGVkZGNlYmUzMTEyZjU1NDI2ZjQ4Y2E0ZDY3MDI5MWZkZWRkNDJjYzE1YTc0MTVhYTY3OTVmYjc1YjM5NDM0ODg0ZWIyNjY2NzdlMWZhN2Y1MzBjNmYzYWFhNzMzYzBkOWMwNjI5MWJkN2RmZjRjNGU1ODU3YjJlZTllOWYxZjYxYTg1NTcxYWQzMmRjOWEzMjU5MDE3YWJlOWViNTExMWU1NmRmMjkxMzUzNTY2OWYzYjJkNzIyYmQzNWZjZGJkNjU0MTkxODg4NWQ5Njc3Y2NjYWE5MDJiOWQzNTk5Y2Q0ZjBkZjFmMzVmNGQxMWI4Y2YiOjY0OiI5YmQ3Y2ZlMTAyMzQ0OGFjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhOTVkYzUxMjdiOWNiMWM4MmQ1NThkNWIyNGFlMDQ5ZTI0NDQ3ZmQ2NzZhNDkzNTAwODk5NTFhZmUwMWRjNzk3IjoiNDVmODFmYTQ3ODBhMjU2YzQwYTBlZmVjOTU0NzMxMDQwNjkwNGQ4OTkxYmNmOTY0YWEzNWVjOWFmNDU3ZTJhNjQyYzEzNDM4Mjc4MzlmMWY0YjQyZjJiMjI2ZGEzNTE3MzFmNDE2YTRiNDE1MWYwNzkyN2MyNzhiMzcxNDA0ZjAyN2JiMjA1OGUxNzY1YjM2N2Y1NDMzYTQzZmE0MTUzODgzMzUxMDQxZGIzZjA2NmVmMjg0YTNlYWJkNTg0ZDFkMGIxZDU5NGI0Y2U3YjViY2ExNzA4ZmJjNjYxZDk1YTlhYzBkNzdkYzI5NTQ3ZjAyMmVlZGM1ODJmYzcxNThjMyI6IjBiMTc3ZDAxOTkzZWM3MjZmZmYwODJlYzg4YzY0YTMxIjoiIjoiMTZjNzdiN2Y1NDFkMmRjNGU4ZDMxZGEyM2UwNGYxOGY0MjU0YWEyODNlOGNlZTViNzc2ZjNkOWEyNzU4NGY0NTlkMDc0Nzk1NWVmZmY4OTQ1ZjgwNzIwOWRkYWE2NDIxODQ2NjQ3ZDQxOTg1MzRiMjQ0NDk4ZmUxM2E5MDczZDM3MjE3MWQxYjJmYzM4YWY2NjIwNGYzZGUwNDAwMGMwOTNlYmU2NTkxNzNiOGQ3OGRjZmI4Y2E5MDAzZDJjZDQ0ZWQxNjhlNmFhZjU1YTA2ZjI5ZTgzY2ViMzJiOThiYWZiNTlmMTA5NTk5Zjg4YjVjMGYwNTU3YmQyYjI4ZjAzZiI6NjQ6IjE5ZWI1ZjgwOGQ2NTk4OWQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjUzZDYzOTNkZDdlY2M0MGYyZDUyNDYwZWNkYjA2MDcxMzNhZDg0M2VmNTNmMzgwY2QzYTI3NTViZmE1NjdhYmUiOiI3MjE5OWM1NGRkNWVmYjI4YzEwNGUzYjcyMTA4NTU1MDZmNjU3N2QxNWM0ZWNjZGFhNmE2MjFhNTcyZTE1ZjU4NDVkNjQ4Y2Y3MWI5ZmFmZWYzNDExZjZjMWE2NjRjNzk3NGZlNzExMjZhNWNiYWI5MDdlMmNhYTM0MmQ4ZDdhMDViYzY4YTcyYzgyNDg5NmVjNDBlNTIwZTkwYjcwNGRlYTQ0MWQyMmM1OTE4Zjk4ODAzYTg4MjkzMzg0ZjY0ZjkyZjExNjUwYzJjZjRkM2IwNjJkMzBlMTRkMTQ5MTYwNzQyZjU5YTQ3M2ZhZjhmZTAwZjRiZGFiOTEyOGMzMjgxIjoiZGI3ZTkzZGEyMWYwYzk4NDBjNTRjNTZlOWM2Y2ViYTMiOiIiOiI1ZTgzZjU1OWZhNTQ5MjZiNzMxMzM0ZjgxNTc4MzkxNDUzMGJiY2M0NzJkNGJiZDVlNjU5MDhmYjFjNDIxNDQyY2I0YzU3MzI5ZjJlNGJhM2QxNDZhNjQ5OWYzNGQ4ZjFlYzZkNDNlMGNmOThiZGJhOTIzZjQwNGI5MTQ3MDBlZGIyMzViMDhiMDMzMDA5N2VhNDE2MmZkMGJhYTFiNzE3N2VmMGIyOWQ1YTY2ODliYzU2YjhmOTc1ZDZiNjA2N2FkZTRiOGJhZjFkNDdhMmVlYjViMmVkMjhlYmVkZWQzODFkNTVkMjgwY2IyZmI2NWNlNGQ4MmI2OWNjZTA1OTRkIjo2NDoiNGU2NWRkZTg1N2EwZjVjNyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWE0YTUzYzc3NjRhMjU0YjA2ZTFkODAwMzgxMDMwMGI3MGY1NzI5MzA2ZWZmYmE5ZmI2MjEwZjk3NjQ4YTQ5OSI6IjE5ZjNhOGMyOTg0NzhkNjg2OGJmM2IzMTc4NWViNjJlODQ0YzM3MjAwNjcyZTZlZjFlY2MwNWM2MTZkOTgxZTAyYzMzM2RiYzNmODZkYmI3YWI5YmE0MGU5ZTU3ZTEzM2U2ZDFkNTk1ZmNjNmQ4ZTk4ODZhODQ1MTcyMTI2NjlkNWQ3Y2UwZjEzODNjYjU4NjgxYjkyZGMxODBjMDZjYWExYTdhYzFlYzk3NGRjZDdmMmJjYTdhZDJhYjI3ODljOWEzYTQ4N2Q2NGM0ODQzMTliZmZhNTZkODU0YTZkNDBjNjJiMDJkMGM3ODk4ZjY0MWYxMDZmZjUwZDIyYTEyZTciOiJjMzIyODhmOTdhZjliNmUzMWFhN2U0MGQ5ZWY4ZDAxNiI6IiI6IjFmYTZhZWM3YTI4NzY3Yzg5NjEzNjNkYzQyNjRlNmFiOTcwMTQyNjRmNmZlMWRkYTdlOWRiODY0NmNlOWE1NDYzZjY5ZTkxYWFkMmZjZTY5NmY5YjY0MWQ3NTYzNWJmYjBmOTdlZDJkN2JlYWNhOTQ0Y2Y4YmQ5ZGJmZmZlNzdiNWFlOWZkMDMyNTc1ZTUzMzNjN2NlMjc1MzhjNjA5OTIyODQzZGU4N2I5NjBlYmNhN2MyYTJlZjk3MDJkZDBjMzJmNzg3YjRkN2RmMjQ4ZmRmNTI2ZDU5NGE5MGJhZDBkNmE4ZGZmZTIxMjI0NmMzNmRiNzFlMmQzNDgzMjY2MjQiOjMyOiIxNjk5NDQ0ZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjQyMGI2ZWY5NmQ5YmZlNDZkY2YxODI0NmVlMjMwNzkwYTZmYzg1NGU3MzBmMWRkMmQxZmZkMGU4YjVjNDc3NiI6IjY1OGE5NTRkNmM2MWQwZDZmMGU4MWEzYzFjYzY1Njg0NDgzZmRjOTVmMjgwYjZkNGM5NjQzNTg1OTZjMjVjYTQxYzM4OTkzMmQ3NGExYTNhMTdkMDQxZTg5YjcxMTBlYTMxNWZhZGIzMTI4YzJjNDY5YzM1MGJmOWI0NzIzYWE5YzhhYmQ5MDY1ZWJiZDEyYzMxN2JmYjcwOTBmMDk2MzNmOGMxMTg0ZjBjNGZiZTEwZjU0ODZkYmZiODQ3NTM2Yzg4NmY3ZDE0NGVkMDcyNzJhN2U2MmZiNTIzYTA0MTExZTVlYTllMWFiNDE1ZmQxN2U3MjE0MzAwNmRiMTRlOWUiOiI0OTgyZjUwMmEzN2VlYThiY2YzMTZjZWQ0NjZjOWZiMSI6IiI6Ijg2MzBhYTc4YWFiZTM1ZDkzNjBhNDRiYjIwOTQyMDliNmY3MGQ0NmQ3MWUzOTQ5ODAzY2Y1NGUzM2RhZmQ1NGM2ZTQ5ZWRhOWUyNmRjNWMwYzFlMzQ5MDhmNTI4MWM4Y2IyYTFhZWVlODExODZjZjQ1ZDNlYjIyZjQ4NjMyMGM3ZWUwZmI3YmYzYzIxMWIyMzJhODQyNmU3ZTgyZjNlMDU4ODFiZjdkOTQ1NGNkZGVjN2YyOGU1MzU4Y2QwZTllYTJlOWNmZjkzOGJlMDQ0YzFiMjE5MTFkNTBiMmFlMjNhYjFhZWYzNzc1MTFlYTY1N2FkY2I1NjBjMzQyMDlmOGIiOjMyOiIzYWE5MWI3MyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTBmM2I4MjJkZmM3MDM4MmQ4Njk1ODExZTZiMGEyODk2ZWEyYmNkNGQ1MjY4Nzc4Y2Q0ODQwNTNjOGExOTI4OCI6IjE1YmZiM2E1NjJjZWQ2M2M5MjU2MWE3ODM3NGFmNDBjODhhMDhjZTAyMzkyNDE5ZTAzZDc1NDMzNjVjNWI2NTI1OTUxZWYyZGVjNTkyNzQ3NGEwZWY4NWY1MTllNWVmNzk1ODgxZGIzZWFmYTc2NWVjMzhlNmJlN2I1NjVhODc4YzEzZDkwYzAyODg5ZGM1MGNiZTg3MDgxZDkyMjVhNTE1NTA0YzdiZTE1YmY5N2Y1ZDcyYTRkODFmMjE4YTE0OGE0NmZiZDQyOTgzYWIwMDJmY2UwYTU0NzE5YmZlMzAxYmI3NjE3NTNjYjMzMGRjMjViZTUxN2I4N2QwNDI4ZDkiOiI5ODA4MTBjMTFhYmQzYWZmNDM0MDhlYzlhNjlhYmNiMyI6IiI6IjEyNjMyMjk2ZjI3ZWIyNDM5MDA5ZjYwMzJhM2Y2NDgzNzAzMDNkY2ViYWFjMzExYjY4NGRlMjQ5NmYzOTliMjcxMzQ3YjE5ZTA0NWMxMDYwODAyZjNmNzQyYjZjNzgwZDIwYjlkNTg5Y2MwODJkN2QwZDU4MGRmYjcyMzExNzFjZmI2MTIyMjdmY2RlZTdmZWFlNGY4ZGVmZDM0Yzg5ZmIwZDY4NTcwZTc4MjE5MmE3YmRkOWE1NDY0ZjM1ZGM2YTQyODJjZjljYzNmZGZhYzk4OGQxMjllZGRmOGUwNzk1Y2NjMjRhMTEzZjg3MmFkYTg4ODM0Yzk3NGRmOGJjNjkiOjMyOiIzMmMxYzRjNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI5MDcyYWI1YmFkMmMxNDI1Y2E4ZGQwYWU1NmYyN2U5M2Y4ZDI2YjMyMGIwOGY3N2I4YmQzZmE5ZDAzZWRjNmMiOiIzYzdhZmM1Y2ZjNWExZTE0MTU4N2U5M2ZlZjg0MjdkNGYyMWQ4OTJiOTgzYjdjOWI2ZTlkZTNlZTE2ODgzN2ExNTMzODQ3YzhhMmUyYWIwNzA2YWMxNDc0ZTlhYTU0YWI1N2U3ODYwYmNhOWViYjgzYmQ2ZDNhZTI2Y2E1Mzg3YWJkYjlhNjBjNGE5OTI4NDg0NzQyYTkxMjk0YjEzYWI4ZjUxZWI0ZjU5OWEzMGU5Y2IxODk0YWNhMzJhNjJhNGMyNzkzZWU2NzkzZGY0NzNmNDMyMzRjOWVhZmI0NGQ1ODVhN2Q5MmE1MGFlYmVmODBjNzNjODZlZjY3ZjViNWE0IjoiMDIwMWVkZjgwNDc1ZDJmOTY5YTkwODQ4ZjYzOTUyOGMiOiI0YzhmZjNlZGVhYTY4ZTQ3YmJjODcyNGIzNzgyMjIxNmQ0MmUyNjY5Y2ExMjdkYTE0YjdiNDg4ZmRlMzFhNDljN2QzNTdmYjlhZWNjMTk5MWIzYzZmNjNhNGNlNDM5NTlhMjJkZTcwNTQ1ZTZhZWU4Njc0ZDgxMmVjYWFlZjkzYWQwM2I1ZDRjOTliZGVmNmQ1MmYyMWZjN2ZkYmViMWM1NjI5YTc2ZGY1OTYyMGFhZWZkYTgxYThlNzNjZWJlNGM2NDZiZWZmZDdmNGE5OGE1MjgzY2M3YmM1ZTc4YjJhNzBmNDNlMGNhYjBiNzc3MmUwM2E1ZjA0OGVjNzUwODFhIjoiZjM3NTVhYWU2ODEzZTRlNGI4NGEwODljYTE0OTY1NjQ2NzY2NTViYTNjOTRlNTljNWY2ODJhZGJiZmVkMjFlNzZhZWQwZGI3ODM5MDI1OGNmNWZiZjE1ZjA2YzZiNjQ2ODQxNGNiNjQ5M2M4YjliOTUzYjQ5NTRlY2FmMDdlY2FmODU4NmFlMDAxNzEwZDQwNjlkYTZkMjE4MTBiY2RjYmI4MzFmNzA0MWNkYmI5ODRiN2M1NTg3ODU5OGE2NjU4ODgzMTc4ZGNjMGZhMDMzOTQ1MTliOGI5YzNiZWQwZTVjMDczNDI5ZjVkZDA3MWE5MTg0YjAxNWNiYmJjNjJlMSI6MTI4OiIwNTQ5ZGQ5ZjJhMTIzYmQ2ZDU4ZTVjZDE2YzA2MjRhMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFhOTk5OWFmNTM3MjBkMGMxMjg4ZmQzZmUzMDdhNDcxMTYwNjM1Mjg3ZWViZjQxZGQ3N2M4MmQxZjljYzlkNjEiOiI2Y2U2ZjJkYzIwMjc1MDIxOWUxNWEyNGUxZmYwNjc4ZmZkZGU1NWIyN2NkY2FiNmRhMTg4YmQ1MjM1YTNiZGM2NzdmNzJmMTA2NTc5ZDAyYzI5NzBkNDU0MmU0ZTIzNzI4ODZlMWE2ZDc0YzU5NmNlNzM1ZjUxZjJlZTZhZmY0ZDYyYmQyNDExMmVjN2NkMWFkYzdjNjYwNTYxZjE2MzE3MGNkZjA0N2MyNDFjNTNiOGE1YjJlMDNmZGU0OGMyNDlhMzE5YmI5MGMyNjkzYzQ2OGM5ZGQxMzZlOTRlMDVmMDY3Y2QxZDY4MjQ0Y2U1MGJlMzE4YWUwNDY0Yjc5YWNkIjoiNjI5OWQ2NTFhMDMyYmRmM2E3ZTZiMjVhY2U2NjBlMzAiOiJhZmFiMGEzZDE5NjBhYzk3M2VlMmY0NDYxZGFjZDEwZDE4OTQxMmIzN2U1NzJjYWQ3ODg4YmI0ZDI0NTNmMWVlZmJkNjcyNWFhZGQ1Zjk4MjM5M2RmYTU5YzNjZjFlZTM0MmRkOTFlMWZiZmFiMTBhODAyZTNhMGVkYTIyNmZkZTI2ODZlN2RiMTAxNTQwNWEzZDMzYzkyMWU1YWE4NTdiZmRhNTNjYTNhZWQzZmYwZTE4YzI4OTQwNjc0MGE3YzVkOWY4NmNlNDNkYjQwYzkwMzJlOThhYjEyNmM3YzAzNjRlMmVmYzAwODMxMmI3NjQxZDM2NTAzZDE4M2ZhNWE1IjoiYTgwNTlmZTZmZjcxMTYxNmFmYjU5MWI1ZTVkZTQ5N2IzYjc4MTNmOWRlNjU4YzdiNDdjYzNlN2IwN2QwODA1YzFiYTA1ODU2ZDk4MzQxODY5YjgzOTRmM2I1ZGYyODc2YWUxOTgzN2VkYjM5MzFlZWJlYjBmMjZlYjZjNGEyZWE3ODAwM2Q4MmE5ODExMTMwNTIwOGNjYWNlYWY3N2U1ZDcxOTk2Y2NhNGY5YTVlYjcxMmRkOTE2YjcxNDU1Zjc0MWVjMmRkZTUxZjU2ODI4NjY3YjdhMmRhMDE1ZTE4ODZmYmE3MWU0OTZhNTQyZDk0YTM4ZWZiY2I1MzUzZmI4OSI6MTI4OiIyZmY0ZDhkMDA0MDBhZDYzYTZhZTc4NDJlZWZiMTZlYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMxNzIxZTVlM2E3NDhhN2Y3MzY5ZjNkZmZjMWNiYjU3MGNlYWM4NjhlZjlkMWYyOWI5NDRiN2U4NmEyNmQyNzMiOiI2YWZjMWQyMjIzM2E2MGMzZTY4NTE0NDdkZTg5MTUyYTBkYmFkY2Q4N2UzNWZjOTQ3Y2E0YmM4ODZmMWY4NzU0OWVhMTA2YjA5N2UyNjU1MTM2ODMzZDA2ZGZiODc5YTg1NzMyMjk4ODYwYzE0OWM1ZTVmZjAzYmIyYTk1ZDljZDNkZWViOGZmZGY5NTFlYTVmOTdlMzJjMWVkNzUyNzFkMmVhNThkMTU4YWU2ZDU2OGJmMTk3ZDY5MTMwOTc3ZTMzMGViZmVmMzNmMjIyYmZkNWI1NmJjNmIwMzgyZGM5OWM0ZjBlNDJiMGFhN2ExMTdiNDNmOTZkNDNmNmUwMmRkIjoiNTIzMjQ3ZDU2Y2M2N2M3NTJiMjBlYWI3YTI4Zjg1ZmUiOiIxMWViNDFhZWFlMzYxMWYwZGU3N2JmYTEyMjFlZjViN2QyNTRmYWY4OTNkYmRhZWFkOTI2YTYxNjA1ZjhhODZmMjBmMWZiODRlMGM1YWNkMTk1MTQzYmM1YTRmMjk3YmY3MjkxMjlmODk4YTIwMTMxNzViM2RiNzAwNDExNWE2MTIwMTM0ZDhlMzU0YWZlMzY2OTlhNmM2NjE4ZDczOWM4MDViNWI5MTczOWRmNjdkZTc2Njc3MjlmMWQ2ZWFlMWEwNjA5ODk3OTk5ZDQ3NGJlNGQ4YjgyNmRmOTAxYzZmMzlkNTIyNTcwZDM4ZDJkMWFhODI4MzgyOTMyYTE3N2IxIjoiMzllN2YzMmJiM2U4NDM2ZDk3YTFkODZhMjI3NTA3NjgwMDFmZTNhODA1NTE2ZDNmODAwMzUyMzIzYWZkMjIxOTkxMTA1ZDEyZGE2OWNlNzQzMDQwMmZhNzkyMzk1OGFkNWVkODU1MDZiOTY4YzRkZDg5NTE2ZDZlM2QwMmU3MjJkYjM5NTRjZTA5OGVjMzI5OWVmNGYyZWQ0YTg5ZjM4MzQwOGRjZWNhOWRhYmM2ZjhlZWZlNWExZjgwMDkzOTYxYzI5YTk0YjIyMmQxYTA0ZDJjMWU0NTNkMmUwMjk3N2YzZGQ3N2E0NjU5ZTJiZGUyZmRiYmE4ZTI4MjlkYjRmMSI6MTI4OiI1MDY4ODNkYjY3NGZhMDQxN2UwODMyZWZjMDQwMjI3YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjEwMGJkMmJmOWM4YjI0Y2MyZThkNTc2OTdjZDEzMWM4NDZiNTVhZDZmZjBiMjE0YzBkZTE0MTA0YjQ2NWI1OGIiOiI4MWMzMzcwZGE5ODlmNzc0YzE5NjJmNjBjNTcyOTk3NDc0ODFiZWEwZTZiOTFkZjg0NmU2ZWY5M2NhZGE5NzdiYzc0MmVlMzNjZTA4NWFlMzNlYjlmNzM5M2EwOTQzYjY0NzIwNWE3ZTFmZmIyYTZhODAzYTFjZTdhODg5MDI0NTZkNjY2MTIzNjI5NjJiOTdjNzE1MmI1N2YxZDU0ZGU5NGEzOWYwN2MxYTgwOThkYTRlYTVlNDk4ZDQyNmI3MDM2YzY0MmZiZWViZWZkYTUwYjhjNDIxYTdhMzNiMWE4NDk5ZGMzNTAxMWQ4MGE1MWQzNDI4NTgyNGQ2ZjAxNzIyIjoiMzYzZThhZjZmMzgzMDdlYzEyNmU0NjZlNzA1NmNjNDUiOiI0NzFmN2U5YTBiNTA1YjEyOTk2NzQ3ZWM5ZTMyNzMxZjExOTExZWU5NWQ3MDc5NWJiZDFiYmEzNGNmNzgyZDQxMDBjZTMwYTg1YjIzZjlmODE3ZjMwZThmMzE0ZTFhMjNlMTAxMjAxYzkyMGNlMTJjZTczMmNjM2ZlMDFjNzRhOWVlOGQzZTE1OTlhYTIyZjIzOThjMzI2NWQ0ZGJkYTYyNmE4ZmY0MjYyODg5MDA5ZTA4N2ZiZWY2YmFiZTMzZDczMDBlNWNmYzRjMDA1NmYzNTYyYTkxM2QyNTk0ZmVlOGU0NDk1OWNmNzI4NTk5YTlkM2U3ZWU0YTllY2Q2Njk0IjoiOTQ5NGQwMTk2NmFjODg3YjgyOTViZGU2MWYwZTdkMDA2ZWE3YjVjOTg0YTI5Y2Y1ZDg0OTE5NGYzNWQ3YjBmNmRkYjNiYmQ5NjQ2ZDdiOWI5NjFjNTE1MTc5OTAxZDJiMDRjYjdjZjdiNmM4NzM2ZDFkNDcyYWU4YmI5YTZkYzkxOTRiMDNiM2Y1MzczNTUxYTVhZTBjMGYwMjM5Njc2NjljODczZjBhY2ZiMDJjMGFlM2EzODRlNzBmN2E3Y2EwNTg2MWYyNTdmMzZhMmFkNWZiYjU5MTQ3M2RmYzNhZTEyNjRkY2EwZTg4OWUwZGRiZjkzZGFkZjc1ZGIyMDU5YiI6MTIwOiI1Yzc4ZDkxNGNhYzc4YzUxNGUyNzVhMjQ0ZDBlYTQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MTRkZDE3NjJkZWI1YzcyNmVhZGYwZTY1ODdmOWYzOGZhNjNkMTZiY2ExOTI2OTU1NDA0ZjFiOWY4M2UyNDFhIjoiMWFlODI4YTE2OTNkM2MyNDY1MWFiOGJhNTlmYjExODVkMDhlNmNjNGE5NjRmMzBkYWM1OWNkODFmZjRiZGZjZTgwMjNhYjFiNmRmZmI1OTRhNDI1MGQyNWY2MTE3NjNlZmI0MTUyY2QzNWI5MzdjYTExMzczZDIzN2YxZjhiM2MwZTIxYjk0MmJlYjFmNGZmZTUwMTQxOThjOWZmNTk4OTZkZGZiYjU1ZTY5OTYzZTNlZjZiMDNkM2ZhMTM0OTc3ODcwY2Q2ZjNhYzEwYmJmNTliZGNjOWYxMDNjYzJkNThmMjk0ZWY1ZjAwN2E5ZjkwM2M3YmFkYTA4Y2I0NTRlNiI6IjEwZDA3OWE4Njg5NGIwYzE3YmZjYzhmZmM0ZWNmN2JjIjoiYzQwMzVmODBiNmQyZWEyODhhZmQ0ZGRhZWMxZWIyMzJiNzhiZTVhODY1ODNmYTg1Zjc5MWQ1NDYxMDJjOTdhY2U5NzE2YzI3MDI0ODNkNzYyYzhlNGVkYTEyZjNkZDEwYTlhNDlhMmQ3MmNkNDY5NGZhNzk0NDc3YjU0YjQzNjdiZTZiNTQ4Njc1YWVlNGMzNTFlM2Y2NmM3ZTExM2FlY2ZiY2M1N2I4YmJhYjRhMDM5ZjI4NDg4MjM3Yzc1MzEzZTYyNjEyODQ3YjkxNWVmOWI1ODJlMTQ2YjJiZmFiYmZjZTU3NmE5ODRmNWNlNGJlMGU2YmZmNTQ4MDU4NGZjMyI6ImJmNWZiMDQ0NWFhYjQ2YWJhNTA0ODAxZDUzNTY0NTVmMjhjOThmMzAwNjcwYTczMWJkZDBjOTAxYTFkNTU2NGFhMzFmNWQ0NjdlNWY4MGRhZGJmZWNhNjFkMmJmNzJiNTcwZjM5MzViYTA0YzQ1YTJmZjc5OTRiYWM2Y2FiZjg0ZGIyYTQyY2Q1ZGIyYTRmMTYwYzk3Yzc2ODE3Y2M1Y2I2MmQ0MDA2ZDg5NWZjZGIyMThjMTQ2NGI1Y2FhYWRiZDFmNjE3Nzk5MzhlOWE4NDQ0MDYxNWVhZTA1MGNkNmYxNzEzY2ZiZDY5NWQ3ODgxOGIyYWY3ODE1NzMzOWU5ZDkiOjEyMDoiNmQ4MTVlZTEyODEzODc1Y2U3NGUzYWVkM2M3YjczIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTJlOTdmYWZmZjdkMzk3ZWEzNGVmYzBhODUyOGFmY2Q1MWMxYjJjY2RhNjgwYWU5MDQ5ZWRjODM1OWI3OGVjMCI6IjlmYmYwMTQxY2Q1MGJkMWIzY2NhZjEzN2I4MDhiNjk4NTcwNjQyYWIyMGMzMjEyMDkwMTYyMmIzNDE3M2Q3YWQxMTlhYmNhM2M2MWJiZjFlNmRkNWNiMTgyYTA3OWYzZTAxYjBlNTI2M2Q5ODRjNjE4NmYwMTc5MjEyNWRkNmM0N2MzMDAzMzAwOGNhMmUwMzc3Zjk5MDI4NTA5NGY2NTJjNTVhMzQ4MjQyZGZhYTU5Zjc2OTg5ZmNmODYwMzNjOGQ5YzBiMmE1MjZiZjQ2Y2NhMjA3ZTA1NWUxZGJjN2NmM2QwYjdhODQwYzhmYjVmODU3ODRjOWU0NTYzZjcxZGUiOiI4ZWIxMWFiZmUzNTBjMGQ1YTZiMDI0NzdiNDQ4NjdlOSI6IjBhODMwMDI5ZDQ1MGUyMGFhZWY0ODRkNGFiZWU5ZGFkZWFiYmQ2ZmVhZjgwMGIzYTY5M2I0NzQ2ZGIwNTllZmI3ZDExMDQwNWI0NWU0NWE5ZTVhY2Y5MDk1N2MxNTQ2NzRkZmIyYzFjZDc4N2FmMzcxZTAxYmFmYzRlODQ3NWQwMjY4Yjk2OWQyNTc1NmExMTIxYTUxOWFmYTYxZjNkNmVjZGVkNGUwNjQwZjBkZGQ0NzFmNWI4ZTgyMDI5ZmQyODg3ZGY0ZTY1YWY5NTgwMzkwYjY5MjQwMjJlMzlhY2ZlZGU3NTMwZTVmMGU1NGYwMjg1YmE1NjVmZjQ5YWY1NDIiOiIwNjdjZDZmZjg0NjFhYzgwMjE3ZWY3MGE5MWRjZjZlZGIyZmJkZDMxODU2ODE1Y2YzNTZmZmZhNjNiYTNmNWNiMjkzZDdmMWVkMzJhZTQwMjQ4NjkzNjE3ZjI3ODM5YTM0ZTg3MWZkZGU2MzVjMDRkMWU2Njc0M2Y3MzBhMDZlMmJlMjVjYWZlMWQ2N2Q4MDQ4NzlmZTM4ZTAwOTI2OGVjNTBhMDI5NGRhNDQ1Yzc5NTc0MmZmMWU5MjQxNzBlNGMyZTBlOWVmM2JkYzI2YzI1MWY1NTM3MjE4ZDI5NWQ5M2Q1N2JhY2NjNGRlZTYxODVjMjM1ZDdlYzVjOTkyNmE2IjoxMjA6IjkzMWY0NGYxMDk5M2M4MzZlNTM0YTU5YzFhZWI5OCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM3MzJkYTAwMDI2MmRlNTU4YmQzZWE2NWU2NmUyMGUxMTYwNTE3MGM5MGI2NzcwOGJkYTQzZjQwYWJlZDc0ZmUiOiI3ZDZjOTgxYzMwZWY4N2E0NmY1M2FlY2I0Yzk3MTI0ZmI5NGI0NTA1NzYzNWQ1YmYxZDRmM2EzYmRiNTM0ZTlhYjYyYjRhNDI1ZGU5ZGM1MjUzNzU3NWVkOWZmNDA2Y2ZiZjc1NDAzZDNkOWNkYmQ5ZmNkNTIwZDYyMDY1ZjgxNDgzNDI3ZmEyNzk2NDY0MmNjMWEwNzgyMmRhMGY2MjM0YTY4OWViMzBlODQyNWQ3NzA5YWJmZDE4NjY2Yzc2Yzk2M2VlY2VmMjA1MDNlZTc3Yzk2ODAyYzEyMGFiZWExNDI4Y2M2NGEwOGZjMjA4NjA1Mjc4NTRmZWNjNTcxYTZjIjoiNTIzZGQzNGVhMjYzYzMxYzIyMTUwNTM5ODY2MjZkMDIiOiJmMTcwNTU2YWM1ZDM4ZjA2NjFiYWUzM2UwODI2MzU2Yzg0ODgyMTg5MDNlYmExYmZhNDliMTY4ODI1MzdlZjc4MjgzZmQ5MzUxZjM3ZjQ0YTc2ODcwNDlhNjA4YzNkZGNjODI4MTdkNGJhOTZhNDBkMDU4MDdhMzhlZTNmMmQ1Y2I4YjExMjFkYjYxMzE4ZmUyMmJmZDNhZmIzMTllODRjNGUyZjk0NTcwYTkyNDMzZGIyOWJkMjE5MzQ4NTQ0OWM3MTlhMmM2MDMwNjk2ZjUzYWM3MjlkZjkwNjc4ZWIwMTg3ODNiMjU3NDBkODA2ZDFlZjY5ODBlMTBkMzk2NTk1IjoiMzQ3MGQ0NTQ0ZjdiZmEzYWMwNjI3YTU2ZTY2YzU2ZmEwNjIxODg0NDA4MzRiOTIzOGJkMjBlODlkZmM3MDFmZTZjZmUwYmY0ZWEyMzg3MDE0YmQ4M2M2M2FiN2M5MTJlMWMwZGNlN2MyZDkyZWFlYTE1NWY4ODZiNTc0YmM5NGE4ZjRmMjc1ZGZmZTJkODQxNzNhMDViOTlkODAyOWMzNmRkM2MzNWMxMjcwOWQzM2Y1NWMzYmNkOTZlOWE4MTVmNzdhNGZlOGU1MDYzOWQ4ZjE5NWE1MjY0ODZmMTIwOWQ3YmY3ZTg2YWMzZGZjNGExZDJjYmRkYjZkMzMwZTVkYiI6MTEyOiI1OTI0ZjNjZWZmMDIwN2ZjOGJhODE3OWE5OTI1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjY4NGJjY2YyYjg0NTMxNGEwYzRiOGI1YTc4MGY5MWFhN2VkMTE3NzUzOTEyMmRjODcxN2MxNGJiNTBlMmRmZiI6IjFhNDE3NGQ0ZTE4YWUwYjY0MzRmMzVkY2Q5Yzg2Y2YxNThjNDJjZTAwY2ViMTJmNDM1NmVjMTE4ZDY1OTgyMDUxOGMzMjZhMWIyYWI5MjI3OWQ5NDlmNzRjNDUyMTljNjYwY2I4NGZiNmIxMGIxNGQ1NmE1MDExNzNmZDNiMTI5YWM4OWRiMGRlMjI4NzRkOTJiZWM3MjRlOTQ3NTFmOTFhODE3YTQyYTI4ZThlMTU2NzIxNzJjMGIwZGI0ZWFkNDZiMTRkNGJjMjFhZDhmNWJhMWY5ZTdlMGZjYzg2NzcwMDY4MTM0OWI4MTAyYTIwOGQ3NmFlNGVmN2RmNWI1NmUiOiI4NDMzYjU5YjQxZmUwY2RjNWIzMGU0ZTg3YzUwMjhlYyI6IjI4MDAyNmVlZWJmMDVlMjZlODQ5NTVlNGEzNjM1MmQ0Zjk3ZjMxOTNkY2UwNzk1ZDUyNmQwNTY0NWJmNWQyZWVjNGI5MmVlOGRjZTU0ZDc4ZmQzZmMzZTM2YmM3OWQ1YmY5ZWUzYjI2OTkzMTBhNzVkYmM1MDA3YmRhY2I0ZGM4OGQwNjUxNTk5NWY4ZjViMWFhOTBjYjhmYzAzNmI3NjNhNWU4MTlkYjcwYzA5MTgwMmZiN2YyNGI5YzJhNjhmZjE5NDAzMmZmZmM0ZWY3OTg5MzZhYWJjY2JiNDNmMjJhMmJiZDdlMWFiOWQwNDM0ZDQ0M2RhYzQ5MjliODQxOTMiOiJjYzE1NWUwNDQ3MmMwODcyZDVjY2Y4OTEwZDM0NDk2ZjM4MDk1NGRhNzY1M2ExZTFkM2M0NjBmYmJjNzkxYzliODJlMzUxNzZlOTM4YjdlMjFlYjQ2OTBlZDlmY2E3NGJhNDVhMDNkYWM0YWJjNGY2MjVmZmRmYWQwMmUxYWNjY2YxOGI1YTE4NzhmOTExZmI2ZjZlMDljZTBkNGM2YTBiYjg3MjI2ZTkxNDg3OWExYjMwODVjMzBlODMyOGFhNmUwZDFjNDljMjFiNzYwYjgyZTQ2OTk4MWI0MGVhMTAyZjM5OThjODFkZDk3OTlmNDg0YWI4OWIxOTM5NmFiN2UxIjoxMTI6IjVhODAwMDhlNmRhNDBjNzFiMzE2Yjg0YWUyODQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0ODRhMzNiYTBiOTdjMjg4N2E4NmExNDc2ZjI3NGUyMzZlYjM3YTcyZTA1ZjllNzQzNDgyNDg4NzdlYTk5ZTk4IjoiNGQ4MWNlYzE0YjM5ODI1N2EzMWFkMWUzNTgxYzAwZDA1ZTEyYjM3YjcxMjYwYmRkOTViYzBiNjk4MWI2MTQ1OThmZmJiYjNlYzRiYjdkZWI1NjczYTEwMjAxMzk4NzcxMjJmODg1MDRjOWM1MzI2NTcwNmZlNzY2MjNhOWI0ODhhM2RmZGQ0Y2JjMWI3YjQ2YzdmY2U5ZDczNzhlMTY0OTY0YzBhMzc3MzM3YTVjMTcyZTVlNGRlNjIwNjM3NTE2NGNkN2JlYjAzMDVkN2E5MGY1YzczZTEyZjQ0NTMyNmUxYmM5YWM1YWNkMWJkNGJjYmU0NjYyNTI0ODkxYTJlOSI6ImMzYTVjYzE5YWVmNmQ2NGI2NTZkNjZmYWQ2OTdiODI5IjoiMzBmMjc2Zjk2YTUwZTE3YjQ1MmRjYjVlMWI0YWI2NjZkYzdjNGM3MmQwZDlhYjJhYmFmNzdlYWUyZTNiYWI3ZGJlNWFjMDA1ZDdlYWM1NDgwZTFiYWUxMzY0NmI1OTE1NTUyOGFiZGMxNDhiM2I3MWYwNmQwMTdjNGIxMmQ2NGFhMzk5MGNjOTY5NDFlYWFjMTRiNjBlYjM0N2UwYmU4NzNkZTJiNmZlMmI4NmUyYzJmYzA2M2IyOTUxMWI3MDE0NGVjZDMxNWI5NDkxMDAxYjEyMjcwMWI5YzhjYzFkODU0MjdiNmM2MDY2M2NjZDlkMWZhODRlMWMyZjYwOWYzNiI6IjU3OWZkOGZiNTBkNzk1YjViMjA4YzJkNWIwYThiMTgwNGY3NTRhMzBhMTAwMzAyNTMwMTY1NWFlYmNkYTJkMmZmMzBkMjlhMTZkMGZiMTdhMjg0MDExMjc3NTBmYzg3YzllM2FhMDg1NDA4MTcyMjhiMDQ5YzM4NzI1M2VhMjM1OTAzNWI4MDYzYWI0YmY1NDUwNGNhNWFkOTNiNTRiOGFjNWJkMGMxZWYzYzY3NjlmYjFlZDIzOWJiNzZmM2UwYmM1MWQzNTZhYTkxYjQ5NGQyMjc0OWM4ZTRjZGIxNjI5ZTkzZjdjNmU0NmZmOTE0NTkxNmMxMjc1NjY5YWU1YmEiOjExMjoiMWMzOWFhYzFkNWZmZTc5MTZhMDhhYjJjZTI3OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRhNWY1MzIxYjUxNWNmY2RlNDkzMTQ4ZWU0YzQ0YzY5M2IxOTc5YjNhM2JhNTIyYTJhODBlNWQyN2M5M2ZkMWIiOiI5NjJiODUwNGZlYjU3YWU3M2U5M2MyZTg5NjJjOTU2MmY0MDljOTA4ZTUxZjk5MDRkZjE2MjNlYWEwYzZiOTk4ZGI2ZWU4OTE5ZDgwNWI2ZmZjYzM3ZGE1MTMwMGMxYWUxNmJjYTIxZjhmNmY2M2FmOTg5YTgxM2FlOGZlMjhjM2ZiMDEyZjAwM2RhYjdlNzFiMDhkNzU3Nzk5MjA4ODA2MDYyZDYyYjRhYzkzNzcxMjQwOWY5ZmFmZmYzZTM1NzlhNGQ5MmQ0NDM3YTZmMGIyNjNlMWRhN2U0NjUxZTBhNTIxYmU1ZjZmNDlmZjVhMDc3OGYwN2JkNWQzZGFjNjk2IjoiYzJjYjAxNjYwNDZiYWQwY2YwYTEwN2FmODM5MjFkN2EiOiJlNDhhYmZiNjU3YWIzM2Y1OGVlZGE4YzU4YTIwZTdlMjk5YmMzZTc0ODFmNzA0YzMyNjUyOTQwODU4MGY5YTUxMzBjZjZmNzM2ODUwMmQyMGIwM2JhNmMzYjhmNmYyOGMwNzZhM2VmN2I4ZTk4Nzc1MGRjOTcyYmU5NTNlNzEyNDgzZTZmMzI4ZGE1N2U0YjVjNTAxZmE3YzcyMDU5M2ViODlmZjk2NDRmYmRjNDU0NzhmODBlZTg5ZjA5NjY5NGRjYjQ0YTliM2E2YWNhMDkwNGQ0YWE0ZTQ3NWI0YjI0NzcxZGY5ZmQ2ZWY5NTU3ZjRmNWM4NDJhYzI0MWIyMTJmIjoiMTFiZDU1ZDk2OTYwM2ZmM2Q0NjM1NWNiMTljNjk1NTdiOTk4MjVhNGMyM2VlYWZjOGVlZDg0MjJkYWI1MzdjMGZhOTc1MzE5MWM0OWE2ZmQ5ZTBkNjc2MGVkODE2YTQ5ZTdmNTcwNGI1OTM2YTQ5ODU0NGUyYmJiYTc4NzVjNTEzYzAzMWYxMTUyN2NhMWI5YjU3OTk2MGJlNjk2NGZiYTkxMTlkY2VjZTgyMDVjMTc0YmUwN2ViZmZhZGE4MzM3NTY3OGRlNzZmYzAxMmIwZWUxNzk3ODdiNGFhOWZiNmUyYjQ1OTU3NTI2MGViMDFmMjM3ODZkYzI0ZDFkNDVlZiI6MTA0OiIzNjg1M2EwMjliNTE2M2NhNzZjNzJkNGZlYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM4ZjdiN2U2Mjk1ZmM4ZTMzNzQwYmYyODA3Y2FlYWY0YjkwODE3Y2MzZWYzZDlmMzhmNzA0ZDlmNjE2NGU0MWQiOiI0YzI2ZTQ4OTA2OWI0ODdjZTlkYzBlMjk1ZDVlODk3NjA0MDExODUzNzQwNDFiMGVmY2E1YmJmNzU4ZTdkMDEwY2NiZmU1OTk5ZTJhODE3Nzc2YWE4ZjQ5YzFlNWQ0M2JjZGFkZTI5ODlmZTViZTYzNWRhYjU0Y2IwZTM5MGEyMWI4MzJiMzBmNjg4ODU3YjllMDljMzQ2YmNjNTM5N2U1MWNmNzFhY2JlMWJmY2FhMWVjZDdlODdmZTVkZmRlMTgwZDk1MTkyMmU2MGRkODIwM2ZmMjEwYzk5NWViNTRiYjk4MWY3ZTkzMWYwYjFmNTJkY2UwY2YxYjJlYmE1MDNmIjoiOTAzYjJlZWI5ZDBiMzc5NGFjYjc0MzlkMzQxY2ZlMGQiOiI4M2U5OTQ5N2JmYmU5MzkzYjA2NWIwYjE4YzEzZjk5YjY3ZjFmZGQ3MjRmZDVkNzBjZGNjZDJiOGRkNjU4NDk5Y2I5ZjU3ZTFhMWZlMzk2MzRhYjA4NjkxODJkZTA4NTcyMmE3OWVhYWJmMDU3YWFjN2IzZjMyMzBmNTFhMmY5YjQ4YjQ5ZDU5MmYwMjI0NmRhY2JlOTE1ZmY5ZDlhNTNmN2U1MzMyZjdhOWQ4OTY0OTA1MGIwNzVjMDdlNWU3NGYyODFjYTFhMGRiZTYzMmMwYWVjZjNiMTkxMWNkNmVjNGY4ZmFjYzI3NzdkMGQxNDc4NGJmNTk1MWExYzYyYzMzIjoiNjNlMjk0MWJmNGExMzM3NDYyN2JlNjZiZGQ0ZTU3MTE5MTQ5ZjgxZjRjMWE4YTMyMWQyN2E0YTc5ZTdkNjFlMmRjZWM5ZDdiMTNmY2NjZjEyZjViMDU5Y2MyMDlmODQxNGFlODE5NjY0NjJhMjY2ZTkyYjRiM2MyNTE5OGVlMjQwZTBiYzZmNjE5N2RmMWUyNGU4ZDQzNzlmY2FlODllNjI0MGE3ZjljN2JhYjg4NmU3OTk5MGI4NDZlOThlNGJhY2I4YjNiMTc0MjIyNDk5NDNlOTk3M2RlNDJkYTVlMzhlNGViNTI4MzBiMWZhY2NlNzY2YjMzODlhNTMxMjQ3NiI6MTA0OiI2ZTMxYzVkYjMxNDZhZTQ1ZWY1ZDUwNDg1ZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRlYzA2MmVmYzFiZDI1NTZiODdhODExNDNkMDI1YWJiYWE1MzJjNTg2ZDVlYmIwNjU4NTlhMjA3MWY4ZjA3ZTQiOiIwMjE5MWJjYjA2MGU2MTgyN2RiZGRhYzZjMjk2MWRiYWI4ODEyY2RjMmFjNzdiZjAyNzU2MjhlOGUzNmJhZTE4YWQ0ZGViNzdiMjY4MmFkZTBhZWY3NmFmZDQ1OTIxNzNiYTI5ZGFlNGQwNzM1OTYzYzgwMzg1NmVhYTZmNjBhNmMyMTc4NTM1OGU4N2YzYzRhOTFlMzIxYzU5ZTA0YzE1MDI5N2RlODczNjc5MTk0YmE1Y2E4NTdmN2Q5MWZmYzM1OGU3MzgxMGQ1NTVlYmQ0ZGJkMWZlNGZiYzRmZmE0ZmYzOGU0YjQxZGI5YWYwYTg0ZmU5ODI4NzA4NjMxNDY5IjoiMTlhYmQwMzYxNDQzYzNhYzJhNDZmMjYwNmVlYjFhNjkiOiJjMzc4NWU3YzAwOTU3MjZmZDFmM2NhODQyMDU3YjBlYTJiYWY5YzNmZTExMTljMjE0NzYwOTE1OGEyMDM5ZjI2Y2VkZjhhNDRlMDQ2OTU1YmE3ZTdjYWQ5ZjQ4Y2I0OTI3NGZjNTNiMTA5ZDc4OTdlMDgwYWYyNTJlN2RjNjQ4MDdjMjc2YmNmNjY4ZDJjZDUwNWM5Y2U4ZTU4NDYwOWQyOTNlYmQyYTQ1MTViZmJhZjc4YzQxM2Q2ZTI5ZGM5MDk3NGRiMzhiNTY0ZmZlOWE0MGQzOTU1ZGJhOWYxOWI2ZjM5YmY5NDI2NjljZjgwZTQ2NzZkNmMxMGRmNTY2Y2ExIjoiOTFhMTZjN2ZlMDI5ZTNmZGRhY2YwODA5ZGRlN2QwNDFjNDM4OTc3Yjg5MTkyZTZmZWQ3NjA1ZDAxMzNmM2Q5ZTgxMDM1NWQxODY0MzJmNjUyOWJkMmM0Y2I5ZGFkYjRmZWRmNTEyOGNiNDVlMjVhM2E0NmJmNzRlZDkzZjMxMzQ5ZjY0YTY5ZGJlODY1OTJkNzZlNDM3OTQ3ZjFjMWQ3MjcwZDFjZmZlODBhZmUxMGFlODUyMzU0MTk2MWVhY2VlMTgzOGMxNjhhMmFiNzY3MDNlYTQ2NzRhNjhhOTZiOGEyOThhNjcyZmZjMTQwZTk4ZTQ1MmQ1MDFmZDU3ZjAwMCI6MTA0OiI1YjQwNzFhNGJlMDU0M2FhYTU5YjU2ZGUzNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWI3YjcwMGQ5NzhlMzNhZTkzMTFiMjA2MzQ3ZjQ4OGUyODMyZmFkNWNlN2U2MDI2YWQ1ZTI0ZmI0NzEwNGZjYiI6IjM3YWVmNmU0MjAwYzZhYmMzZDE2MWRhYWY5ZGQ2ZWRlMDAyY2U4YzYzZDllZDU0ZThhYzU2YmRjOGQzNjkwNmJlYTY2M2QyODU3ZDhkNTQzMTY2YmExNTA4Mjc3MzVlYzc4ZTM3ZjkyZTY4MjI3NWUyNjhkMzc3YjE4ODA5NzBkZjIzMjE2MmU1NWM5MzExODgyZjg4OWU3ZDE4M2U1Y2Y0OTcyNjkxYzg1ZjgxYzQ3ZTEyMjRiOWM5N2VlMzk2M2Q3NWM2YTAzMjI3MGFkNmQ3MTNjOTk5OTEzZjBiNThhMmQ0ZjQyYjg1YTNiMGI0MDU0MWEzMTM5OGNkZmI0YjAiOiJkMGJiYzI4NGFmNzY3YWY5YTMxYjg2M2Q2NmNiNjEzOCI6ImRmYjg3YTY1YWIyZDk5ZDdkNzUzMDQyYWE0NzQ0OGFkODMwZTU0NmQyOThkNmFkNTJiODUyMDdiYmIwY2JlOGNmM2NkYjEyYjM1NDRmMWZjMjI4ZmRhZTA0YTI0MWFiZjllNzFkZThhZTE0ZjJkZTJjMjYxNDY5YzM4M2M2ODJlMTM1ODJlMDdjZGRiMWVkOWJmZjFmZDJhYTBiZTc5NzgwOTZhOTE0Njc2ZGZiZTdiZWM2ZWRkOTI3MzYyZjY1NmNlMWRlODYyMjliYzUxMWNmZWM0Y2RhNzdhMWU3NjFlN2FiODY2NGU0ZGYwOGNiODIwZWJkYjYwNGMyY2RiYjAiOiJkY2Q1NTc1ZDk0ZmZmYzY0N2Q0YzA4MWUzY2UwMzkyODY1MTQxOWEzMmFkYTJhZjAyZGUyZjU4ZDY4ZmE5OGViMWZkNWVmNjcxODc1NzE5YTljNjViOWVjYzY5NTEzNDA4YTc5YTBhNWQ1N2NhYmQwNGY4ZTY1MWY1YjhmYzFmZjQyY2U1OGQ4YTIxMmFjMmJjYjgzYzVjNTNjNTQyYzI4MjU1M2E2MmI0ZTNkN2Q0ZjA0OWFiMTMxNzI3MzlhMGY0NmUwYTJmZDlhZWM1NGViMGM4NDE0MWM2YjM0MTc4Mzc1NDM3MmRmNjlkMzllNDhjYzI0ZWIzZDlkZGIyMWE5Ijo5NjoiNGE3YWM3OWRiOTRiMjc0NjliOTIzNDNhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZTE1ZTYxZWRkOTMyMGNlYWNiZjM5ODRkODdjNzA3MTU5Y2FhNzM4ZTdlNzYyODViZTAwYjVhOTU5NTRiNTIzIjoiOGFmNGE3ZDkyNDQxY2U5MzE4MTVmYTRlMjRkNjlmNjYyNTZmZWM3ZTYyZjc5YTAyOWI2ODRiNWRiMzA0YTQ2YjJhM2QzYTdlZThkNmI3YWUzOGNhYTdkZTUyNmQ1YzBmMjhkYzY1YTA5MTNhMzgzYjdlZTE2NDBjYmUyNDk5N2JhOTViOWIxMmZhMWU5Y2U5ZjkxMDBkODgzYzE2YjYyODZkY2UxN2UzODFhZjE1MTEzZjU2MTk3Yzk3ZmU2YjQ1YmUwMGEzZGYwNTA0NWY0NzY4MjlkN2IzMDMyMTFhYzk3Y2Y5ODlhMThjMTZlMjdmYmYyMzU3MGQ5ZDE4ZjA0YiI6ImIxMjY5Yzg0OTVlYTE0NjlmZjQxZDgxNTRhZTY3NjVlIjoiMGFkMjZhMDhhNWNjMmVjODI1MzQ3ZDdmZmQ1YWFjNzk1ZWI2OGFhN2UyMjk3MGQ5OTFjODYzZmE2ZDFmYTcyMDEzN2FhNWNkZTRlMzgyNjI1YTAwMzhlNmVkNzJkYTNiNTAwM2MxYjJhOTUzYzJiMjEzOGUwY2Y4NzBjY2E0YWZiNTk1YzA0NTFhYTc5M2ZiMGEyYmM0MzgzNGEwYWNhMWU3NjA1OTBjY2E3NjVhZDY3MmVhZDk3NTk5M2Y4MmFlNjc2NWM1YWZiZGRjNjA2MmQ3YzRiYWJlYmY2NTBhYjA5N2RiMWExZDlhMmE5OWU4ZmQyZTBlYjhhN2I5MTZmNiI6ImFkMGFiNGU3NzI1Nzg2NmU0YTU3Y2Y0NGZhNDA0OTQyOGU1NmE2ZThiOGZkNDdiNGNkMDBiZmNlODRmYThmNWE0M2YxZGYyMDYxYjBhMzczMTFiNGExNDM2YmFkMGQ2MWQ1MmNlZDVlMjYyZWQ0MWE3ZWIxMjVkNjFjZWMyZTNmYmFhOTVlNTMzYjQzZjMxODA0ODA5NmViYzg0NjZmMGNkNjA5YmI1ZTdjM2ZjNmU1NzAxYWFjZTU0NjYxOGExNzBmODhjMGI3ZWQ3NmI2Mzc1OWNhNGU0YjkzMWE4NmFjMzc5ZGQxMmFkMmNiYTdkNDdhMTlhM2FlN2MyNDJmYjAiOjk2OiJmYjFlOTg4ZjljOTczNThhMTdlMzVlNmYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFlZjI0YjgyMDVkNDA4NWQ5Nzg1MDVmMDQ3MjQyOTNjMjgxOWVmOWYzZjAzYTZjNzU4MDc4NjkwZmM0YmY3YzgiOiJkYjI2NDUzMTcwZGIyZjk4NDMxMmUwY2Y5NjFkMWE3ZGYxMTU0ZjA1MjVjMzFmMTY2YmU1YzlmNTE2NzM2NTAxZjlmMmRkODA5NmE2OWI2NDQxODg4Y2UyN2FhY2VhY2IwYjM2NWEzOGU0ZTAxZTJlMzQwMjdjMDIzMjA2ZTgxNGYyMmQ0NmZkMmZhNjlmODc1MDlkZGNlZDRiODg1MmE3NmIyNTMyYjkyZjA2OWI4YzkyMmFjMTNiMmI3ZjE5Y2I3YzUyNDY1N2E0ZWU2ZTk4OWNmMjU5OGJlZjY3NGFhMzE1NzY3NzY4NTNmYjdmOWEyNzA0ZDZiM2VlN2ZiY2JiIjoiODE0NTZiYWEzMzdjM2RmZDE2MmQ5YzVmNzJhMmUyMTYiOiI0ODRhNWY0NzcyNjQzY2Y3NGNjZGNlZDBlNWQ4MDg2MmY5MzAwZjI2YWUzMTM5OTY4NjQ5ZDNkN2JiNzYxYjMxM2YyYmE2Mzc5OGIyMDQwZDM5N2MzZDE1NjkyODVmZWU4NDk4ZmQ5MjU0ODUxYzE1Yjk4YWY1YmQzNTFmYTcyZTdkNTc0YzYyZWRlMGQ3MjhlMTI3OWU4YjRlNDc4NGZkNjNlYTc4NTFlOTlkMWQyMzU2YmNiZjg2ODUyOGY4ZDBhOTBmYzNiODg0ZWNlNjMxNjQ4ZDkxNmVjOTdhYmFkY2ExYjBkZDc2NzBlNmFkNDIyNDUwMjE1NzA1ODJlYzdjIjoiZGE5NWM2MWNkMmJiODhmZWE3OGMwNTljMjU0ZDJiOTQ5ZDRmYzI5MWM3M2FjMTc4YWNlNDRjMWU2YTMzOWY2NDkzMWM4NTdkM2E3Y2IyNzZhMDQ5OTM2MjBhZGI2OTE4ZGZkM2Y5MDgzZWRhZDM4NGE4ZTZjMWQ0Nzk5ZDUyNmExYzk2OWQ4ZGViMGUyNjY3ZDZkMDZmNTU5YmFmOTE0YjQ5ZmM0NjMyNDQ1MjhhYTY1MjJkMTk2OTkwNjU0MzhkOTM5NTIxZDdkN2JiMTQ5ODM1Mjk4ZjIwNTRiY2FhZTZkNzg2ZjZkZGUxMzNiNjQwNjk3YTNkMzdjNjk3NTc5YSI6OTY6ImJjMWMxY2JjYWQyZTFhNjZhY2UwNzlhMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTY4NWFlYTlhYWViYmQ2OTFlNjc5Nzc5MDM0NzI5MzA2ZDU4ODdiZWU0YzFmOTBmNmVlM2EzOTdhMGZmM2VjZSI6ImFlM2IyZmExZTIwOWY3MmMxNjdlYjE2YmMxNWI3NjY5Yjg3ZDRhYjUxNmU0MjgxNTc4MTBiODdhODNlOTBkNTZlMjY3YmQ0OTk2NTIyYjViMjJjMmEzNDlkMzc2NWNhMjdlYTI3MDU3ZGQ3MWY3YzE4ZGRkMDUzMDMzYmQ3ODBiNmNiNjg5ZjQ4YzM4M2U5YzcxN2I5YjI2NWNiOWUzMmM3MGM0YTdkOGZiOTMzZTk4NmQ5OTZiNWFkOTE0Y2Q2NDViNzRjNDdhYzNhMGRlOTUyZWUzZmM3M2FkYTgzZDg5NmRhN2NhMGIyYTBiMTBlNGY3MDFmYTEzY2JhOWVjNTAiOiJiMWJjMTQwNTMxYWU4YzY5ZTJmZmM3ODRlMDk4ODAzOCI6IjI5NGZmODU4ZmE2ZWZjODJjYTNiZTRkMDUzMzJiYmI5NTFhNzFhN2RkZmE0Yjc4NDcyZTE1ODJiNDQ1MzEyZWVjMTE3OTNkOGQ2ZTFlODU4ZDljYjA3OGI1ZmM5MDgzYWM4YTNlM2JkODI5NjRjYjA3YzA4NDUwNTY3OTIyMjk5ZjY4ZmQ0NzY2M2M3YTc3YzI5ZjJiNTM0N2YyMjkzMDE0MzNkNWE3NTI2MzE1OGEwZDgwMDk1ODU5ZTdlNDU0NzZiOTliMjM0MTIwNDZiZmJlNGVhZmZmOWY3ODIwYmE0OTkxOWQyYzk4N2NmMDBjMjg2Yzc4NGU3NjY5ZDhmZTgiOiI2NTc1MTI4YjU3NmU2OGY3YjM3MDllMzI1YjNkNjE2NzgzYjQyZmY3Zjc2MzFlYjYyYjkwY2IwYzhhODZiZDMyNDc1NmY0M2FmNTNjMzNjYmRhZjljZjY0ZWE5NGNmMWI3ZmFiNTAwM2YwMGMxZDA3ZjNmYzhlYjE5MzFkNzU5ZjljNDM0NzdiYTIyMzExYTExMTQ4ODA5MmM0MmI3Nzg2ZmFjZjQyYjg2MWE4MjRjZDFiY2RjNjAzYTc3ZDExMjUzZjE1MjA2YTkyOWEzZTE2ZTg3MzdkMDgwYjhlNWYwZGE4ODk2MjI2OTg5YTk5NjRkNzJlNDkxMTg3MjUwNDcyIjo2NDoiZjc4YzRkZDM3YzA2YjE5NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2FkZjBkYTI0Mzk0YTk4YzdiZWFlMDFkMjhmMjYxYTljYmQ4ODdhZWVlY2MwYzI5ZTg0NTQwMjY0ZDVhNmJhZCI6IjhjZjAyM2Q3MTdiMGY4MmYyYjgxNzUwYjUzZmI2NjVjMWM5MGY0NzQwYWY0YTM1MzRiMzZiODQ3ZGYzM2JhNWVlYzE5ZWIyNGVhZDcwYTRiNjEzYTgyNTcyODc4MjE2MTgxZDU5YjBjNGM0ZGY5OWJlMDhkMDIxY2YxODI3MjRkOGZmNWVjNGU4NTg4NGQwZjY5YzE2MjM4ZmJiZGJjNTUyOWZmY2M0ZTQxODQwNWU0ZTk1MTM5Zjc5ZDMxMTVhMWFjNTY4MjBjZDM5ZmM0MTNhYjcyZjdkNDQ3Zjk0N2NiMDU0MWZjMmJlMjYxZjEyNDZjMGE3ODYxOTkwMTNiMjIiOiJhZDQxMjg4ODE3NTc3MzE2ZGYyZDg4MWFjOTNmY2RlZiI6ImFkMzNjZTkyMjM3MmZiZTM1MzFjMGRlY2U2OWY4NWYxOGViMWJiZmIwOWExNzg0MDM4MzIzMDhkZTBlNTRiMTAxMGRiMjYzNmM0YjdkOWNhYTQ3ODEzOGY2MWRiNTE0OWM5ZmQ3ZjNiNDViN2ExODc2NzI5ZmU2NzYyMmEzN2YwYjMyMmVmOWNmNjA0M2IzMDFhNWQ0YzgxZTZmMzQ3ZDIyYmQzZTQwNzIyMDU5ZDNiZTk0NTg0NWM2YjA2MjlmYmNmY2FmODg1YzdmMzkzYWE4MWYyNDJjNDhjNjFhNDM5NTc0NzYxZWY2YjY3MTk3MmNhYzY2NDQwMzI1MDc1MGUiOiI5ZDQ2NWU5YzQyMjgzMjM5NDZiMTI2MTg5MjI0M2Q4NDU1ZWRiOWViODYzM2QwMjZkNDAzM2ZhMzk2NWQyMDczMDk3OWJhNjk1MmMwZjZmMmM1NzY4ZjAzYzE5MjU2YjY0YmM3NTlkMmU3YjkyNDI0YmJjNjY4MzA4NTA0YmEzNDM4NGMyYmIzN2JhYWY5MWEzYTRmMDk1MmEwNTBhM2Q2OTg1MzE0MWI0OWU4NmVkYTNiZjBjNGRiNGViY2QxYzQxZTdmMTNlY2EyMGJmNTc0YTQ3ZWM0NWI4Yzk4ZGVmMTdjMDc0MTgwNWJmOGYzNzkyM2JhMmI1MjIxNDI4NTc4Ijo2NDoiNTA3NjE4Y2VjNmQwMzk2NCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWVmNjRiNDEzMmRiNTQ2Njg1NjhlMmFlNjZhYjYxZjYyYTgyMGM3MDAyYTY3YTdlNDIwMDYyODBhMzczZmViYSI6IjRiOTZkY2U3NTMyNzMxODhjNGNjYTMzODZhNzQxNWQ1ZDkyNjM3NTczNzZlMWYzMjc5N2RmNDc5OTJlOTJlMWJjMGFiMDgzMzM2M2IzYWNmZmRlMjI2MDJkNGU0NzMwN2JjOGYyNTI5NDQ0MTRhMTVlMTM5ODY5M2ZkM2I4YmY0ZDgxMDFjZGNmNzBjZTJjOWRlOGNiN2Y1YmIxN2NkODNmMDliMWJjNzhiYTA3YzM0YjkyMTRlMjUwYzU5NDBlOTc5NDE5OWNiMzkyMzA5MDI3ZDVhYjRmMzJiNTFjNTMzZGI2NzMyMDI0YmQ0MTJmMmNiMGM1MTc4ZDUyOTZhYTUiOiIwN2E4NmRiZTJjY2UwNDBlY2NkYWQ3OWIzZDIxMWVjYyI6ImFmN2E3NTc0OGVlMjkzMDE1YjYwMGNhODJjY2M3NzE4ZjRlY2MyMGMzYTIzNTdlZTAyZmI3MjYzMzBhMGQ3OWNhOGJiOTc5NzliYzBjODlmNGM2MGQ3MTU0ZjhiZDI5YmE2ZWM1ZjJmNGJlMjg2ZWE4YTI1OGNmNmJkMzliNGY0MmQ2ZGI4ZTcwYzk5ZWMzYWYyNmJiNGQ4MDAzZGM2ZmQwZmRmYmJjNjIwZDUxMWQ0ZDVmMDlkZGY5NzVhMTY2M2FjMjk3OWFlMDk3OGIwYmMxZTdiZmNkNjYwYWU0YWM3ZjFhOGY2ZDhlZTM1NzUyZWQ1OWE2MDRmMDdkZmRhNTMiOiJlM2U4NjIxNDZiNmZiNDhiMDFhYmFiYzQ2MmRkNTYwMjk4ZWVhN2JmZTVmMzI0OGUyOGE5MDhkMWRlMDhjN2U5MWZjZjYzOTIyYzM5NGU3YTUxYjY0ZjQzODIyMjUwOTNlNzg1OThjMDUwZTU4OGZmNGFkMzhmM2U4M2RjMDdiNzdjZTU2OWM2YWI4ZjhhOWNiMDA1NmIzMTU1YWExNTAzY2ViZWI2NGM4NmQ2ZDljZGJiMTc4ZWE5YTAxYThiYTMzYTFjNDhiZWI5MmVlNGNmNjBlN2RlZGY5ODYwMTllMTkwODljZDE4NmM5OGMyMjliMGZmNDJjOWUxYWNhNTcxIjo2NDoiODYxNGMyMTYwNTVjMDY2MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjE0YWM3OWYzNWJjNWE2ODU0MzNlZWE1YmI3ZmQ2OWZjOTU5YWFiZGEyNGNiZDhiNzc5NWZiMmU0MWY5MGFiMCI6IjhhMjBkYTE0ODE5MDc5OTYwYjc3ZWQ1ZTU0OGQwYWEwYmRjZmZiNzUyODE3YzFhYmU0MTk1ZTYxMmNmYmI1OGM4ZTVhOGFmNjlmNzViYWQxMGVlOGFmZGYwYjBkNWM0NmM0ZGMxMWMzMmJmZjE2ZDVlN2U4MmU3N2ZkODBlNDc1YzZhNWEwYmUzNjcxOGFmMjMyNjk3YWIyMjMxNDMwNmI4ZWUzMjQ4NGIzNDYxZGE2NTc3MTBjMDYxNzBlODBhNmE4ODQ0Zjg5OGMyYmUyOTM2NmM4NDMwZjIzOTJkMTAwZmZkNDE5NjAzY2JjZTQwNmRjNzMxNTU3N2U2ZTllZTIiOiIzNTNlMWQwOGVkY2U0NGM5NjY0MzA1MTNjYjdhMDM4MyI6ImNiMWRkZTRmZjVhNjg2NzAzOGMxNzAxOTJmYzJkMjkyZjViYjM0OWQ1YjlhOTAzY2YzZDg4YzA5Y2U3OGZiMWY0YTc3NmZmNzU4OGEyNWFiYjVlNWY2YTQ0NzkxZDcyOTZhZmVmM2YzMmVkMzFkYjFkZWYzN2RkMjViZTA1NzBhMjA0OTU1MTIxZjljNjViNzlhM2VhODhmYzQ1MmRiY2I4MjcxOTI0M2MxMWJjMjdlMzQwOGFkZjgwMmI2ZThiNGU3MDFlZTRlOWRmZDE0MGNiMzI3N2JmNjA1YmQ1ZmI3NTdkMjMyNWY3ODA1ZmM2ZjBkMWVhNWE2MjA3ZmFjNWYiOiI0OWI1ZTRlYTA0MjEwMzRjMDc0Y2RlNjdkZDM5YTAzMTBjM2YzMWU4MTM4NjcyYmEyZWNjMDc3N2JlNTQyZjFjNjUyOTgzNmQ1MjA2Yjc5ZGFjODNkOTZhYWI1Njc4N2EzNWM1ODRiMzEyMjhmMDA3ZjExNjMwMzI4YzNmNDBhNTdiZTM3NDg3Njg5ZWU1YmFiYjU3NmU3ZDE0ZmYwZjFmMWJhNmU0YmUxMTYzNzM1MmE0MzM2MzI3NjgxMDU4Yjk5ZGYyZTQ0Zjk3NzJkZTRlMGU0NTZkMmUzNGRlYzVlZWIzMzViMjM4ZTg2Mjg0MWQxNjZlMDYxMmNjMGYxOGYzIjozMjoiODhhZWQ2NDMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI1NWFjOTA5ZTczOTg5ZTMxMGFlMzdkMTNjNTRiYmQ1YTEyNmY0MTlhM2IwMWEyYWQ4OTYxZDg5YmQyNDdmODEiOiI4YTY2M2U4YjIxYTAyN2M0YTk1NDVkMTQ1ZDQyZDljNjdiNGZjZDVkMGUzOWFhNjg4MjJhZWRiZDYwOWUyYzY4MWY2MGU2MzE1MDM1MzIxZGU3Mzk4NThiMmIwODJiYzA1NTUxZmU5Yjg0NTZjMmU4OWM2MTUxMjgyYzYwNjhiOTE1ZWFlNTc2MmU0ZDZkNzY1ZDY2N2RlNThhMzE1ZTA2MWIzZDYwMDM1YWRhNTBmNTkyNThlYjZlMmExY2Q2YjUyZWVhN2ViOWQ0MDRmZDk2ZTcxZjE5ZmVmZjY1Yjc0YTRiNGYwNzA2MWFkZjdjMWIwZTU0ZTJlY2U3YTJjZDQ5IjoiOTMyOGFiYWIwZDNmNjNjNzVkZGFmZDg1NTlkOTZiNGYiOiJjYmFlMjBhYTE5OTZhYmI2MjQ3MWFhYzkxY2Q3ODA4MDk1M2ZiZTNiMTY1ZDRjOTQzNTgzMmVmMTEwNmU3ZTM0MjRkYjg4NTBmNDRhNDMxYzI4OWFiNGYyYmJiZWE5ZTVjMGM3YWFmMmU4ZGU2OWMwY2VkMTc2MjgzNjYyY2FkZDI4MGQ4ZmRhMGM4NTk1NTFmMGY5MDg5M2NhNTc2OTVjOTU4MDNhMTU0NjgyNjkyMmFjNzg3MDNkN2NjYWUyODViN2NjZDRiYmFiNTUxNzU2Y2NjYzY4NjlkY2YzNGI2YWY4ZDhiODBjMjVjNmZiMWQyY2FhN2YyODE2MWZiODU0IjoiNDU3ZTEzZmY0ZWVhYWFlNzVkMTRiYmYxYmZmOTE3MDZjMzE2OGI5YjE0NmFlZDI5ZGJlMzFiMTJhZDkwYzFjMTU4ODMzYmU5NTcwMTIyOWFjNmU0YTEzOTk3ZTBhMmQ5NjFkNGEwMDIxYzRkODkyMGVjNTRhOWE5MzVlNWVhNzNiMTdlOGZhNjA1NTlkZjc2YmQwN2Q5NjZkZmE3ZDg2ZDFhNzdhMzEzMjI4YjJhZTdmNjZiNWI2OTY3MjZjMDJhZjJjODA4YmY3NWUwYjk1OTFhMjIwZTc2MmY1N2M2ODBjYTY4ZjIwYjJiNTQxM2IwNzczMWJiZDQ5ZGUwMzliZiI6MzI6IjVkZTA0MzRhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNDc3ZTE4OWZiMzU0NmVmYWM1Y2MxNDRmMjVlMTMyZmZkMDA4MWJlNzZlOTEyZTI1Y2JjZTdhZDYzZjFjMmM0IjoiN2JkM2VhOTU2ZjRiOTM4ZWJlODNlZjlhNzVkZGJkYTE2NzE3ZTkyNGRkNGU0NTIwMjU2MGJmNWYwY2ZmYmZmY2RkMjNiZTNhZTA4ZmYzMDUwM2Q2OThlZDA4NTY4ZmY2YjNmNmI5ZmRjOWVhNzljOGU1M2E4MzhjYzg1NjZhOGI1MmNlN2MyMWIyYjA2N2U3Nzg5MjVhMDY2Yzk3MGE2YzM3YjhhNmNmYzUzMTQ1ZjI0YmY2OThjMzUyMDc4YTdmMDQwOWI1MzE5NmUwMGM2MTkyMzc0NTRjMTkwYjk3MDg0MmJiNjYyOWMwZGVmN2YxNjZkMTk1NjUxMjdjYmNlMCI6ImMxMDlmMzU4OTNhZmYxMzlkYjhlZDUxYzg1ZmVlMjM3IjoiOGY3ZjlmNzFhNGIyYmIwYWFmNTVmY2VkNGViNDNjNTc0MTU1MjYxNjIwNzA5MTliNWY4YzA4OTA0OTQyMTgxODIwZDU4NDdkZmQ1NGQ5YmE3MDdjNWU4OTNhODg4ZDVhMzhkMDEzMGY3ZjUyYzFmNjM4YjAxMTljZjdiYzVmMmI2OGY1MWZmNTE2ODgwMmU1NjFkZmYyY2Y5YzUzMTAwMTFjODA5ZWJhMDAyYjJmYTM0ODcxOGU4YTVjYjczMjA1NjI3M2NjN2QwMWNjZTVmNTgzN2FiMGIwOWI2YzRjNTMyMWE3ZjMwYTNhM2NkMjFmMjlkYTc5ZmNlM2YzNzI4YiI6Ijc4NDFlM2Q3ODc0NmYwN2U1NjE0MjMzZGY3MTc1OTMxZTNjMjU3ZTA5ZWJkN2I3ODU0NWZhZTQ4NGQ4MzVmZmUzZGIzODI1ZDNhYTFlNWNjMTU0MWZlNmNhYzkwNzY5ZGM1YWFlZGVkMGMxNDhiNWI0ZjM5Nzk5MGViMzRiMzllZTc4ODE4MDRlNWE2NmNjYzhkNGFmZTkwNzk0ODc4MGM0ZTY0NmNjMjY0NzllMWRhODc0Mzk0Y2IzNTM3YThmMzAzZTBhYTEzYmQzY2MzNmY2Y2M0MDQzOGJjZDQxZWY4YjZhMWNkZWU0MjUxNzVkY2QxN2VlNjI2MTFkMDliMDIiOjMyOiJjYjEzY2U1OSI6MAorCitBRVMtR0NNIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uY2FtZWxsaWEuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uY2FtZWxsaWEuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjczOWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5jYW1lbGxpYS5kYXRhCkBAIC0wLDAgKzEsMjE1IEBACitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxICgxMjgtZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIiOjEyODoiZjU1NzRhY2MzMTQ4ZGZjYjkwMTUyMDA2MzEwMjRkZjkiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMiAoMTI4LWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiJkZWZlM2UwYjVjNTRjOTRiNGYyYTBmNWE0NmY2MjEwZCI6MTI4OiJmNjcyYjk0ZDE5MjI2NmM3YzhjOGRiYjQyN2NjOTg5YSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMzICgxMjgtZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkxYWFmZDI1NSI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6IiI6ImQwZDk0YTEzYjYzMmYzMzdhMGNjOTk1NWI5NGZhMDIwYzgxNWY5MDNhYWIxMmYxZWZhZjJmZTlkOTBmNzI5YTZjY2NiZmE5ODZlZjJmZjJjMzNkZTQxOGQ5YTI1MjkwOTFjZjE4ZmU2NTJjMWNmZGUxM2Y4MjYwNjE0YmFiODE1IjoxMjg6Ijg2ZTMxODAxMmRkODMyOWRjOWRhZTZhMTcwZjYxYjI0IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzQgKDEyOC1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOiJkMGQ5NGExM2I2MzJmMzM3YTBjYzk5NTViOTRmYTAyMGM4MTVmOTAzYWFiMTJmMWVmYWYyZmU5ZDkwZjcyOWE2Y2NjYmZhOTg2ZWYyZmYyYzMzZGU0MThkOWEyNTI5MDkxY2YxOGZlNjUyYzFjZmRlMTNmODI2MDYiOjEyODoiOWY0NTg4Njk0MzE1NzZlYTZhMDk1NDU2ZWM2YjgxMDEiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjNSAoMTI4LWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjoiY2FmZWJhYmVmYWNlZGJhZCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOiIyOGZkNzQzNGQ1Y2Q0MjRhNTM1MzgxOGZjMjFhOTgyNDYwZDIwY2Y2MzJlYjFlNmM0ZmJmY2ExN2Q1YWJjZjZhNTIxMTEwODYxNjJmZTk1NzBlNzc3NGM3YTkxMmFjYTNkZmExMDA2N2RkYWFkNDA2ODg2NDViZGQiOjEyODoiZTg2ZjhmMmU3MzBjNDlkNTM2ZjAwZmI1MjI1ZDI4YjEiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjNiAoMTI4LWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjoiOTMxMzIyNWRmODg0MDZlNTU1OTA5YzVhZmY1MjY5YWE2YTdhOTUzODUzNGY3ZGExZTRjMzAzZDJhMzE4YTcyOGMzYzBjOTUxNTY4MDk1MzlmY2YwZTI0MjlhNmI1MjU0MTZhZWRiZjVhMGRlNmE1N2E2MzdiMzliIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6IjJlNTgyYjg0MTdjOTNmMmZmNGY2ZjdlZTNjMzYxZTQ0OTZlNzEwZWUxMjQzM2JhYTk2NDk4N2QwMmY0Mjk1M2U0MDJlNmY0YWY0MDdmZTA4Y2QyZjM1MTIzNjk2MDE0YzM0ZGIxOTEyOGRmNDA1NmZhZWJjZDY0NyI6MTI4OiJjZWFlNTU2OWIyYWY4NjQxNTcyNjIyNzMxYWVkM2U1MyI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICM3ICgxOTItZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiIjoxMjg6ImJhOWFlODlmZGRjZTRiNTExMzFlMTdjNGQ2NWNlNTg3IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzggKDE5Mi1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IjhmOWMwYWEyNTQ5NzE0Yzg4YmIyNjY1ZThhZjg2ZDQxIjoxMjg6Ijc4M2NmZjVjNWFjYTcxOTczMjA2NThhNzQyNzlhYjM3IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzkgKDE5Mi1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkxYWFmZDI1NSI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6IiI6IjBmMDA5ZTg4NDEwZDg0YWQ5M2M5MGQ1NWVmYmUyMGZmYTg1NTQ5MmY0ZGZkMGZiNDg1YzRmMDJmNTM2ZmVmZmJiNGQ5Njc3MjllNWM2N2YxZGUwNzUwMjU1Y2M1MDA3MTZiYTQ4M2ViM2IwYTJiZjYwN2FmMjhmNmE2MGJiMmU5IjoxMjg6IjhkNjQ1YTBiMGU0OGQzYzNiNjBhMDE0MTU3Y2I0OWI0IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzEwICgxOTItZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjIjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6IjBmMDA5ZTg4NDEwZDg0YWQ5M2M5MGQ1NWVmYmUyMGZmYTg1NTQ5MmY0ZGZkMGZiNDg1YzRmMDJmNTM2ZmVmZmJiNGQ5Njc3MjllNWM2N2YxZGUwNzUwMjU1Y2M1MDA3MTZiYTQ4M2ViM2IwYTJiZjYwN2FmMjhmNiI6MTI4OiIwMWIxNWJiNWFiNmZhYzBjNDIyMDE0ZTkxZWFjYmYyYiI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxMSAoMTkyLWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6ImNhZmViYWJlZmFjZWRiYWQiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoiNjc4YjNkY2IyNzBmYWEyMDZkYzVmNmZiYjUwMTQ5OTZlODZkNmYzZTM1Y2RjZGZlYjAzYjM3YjliMDZmZjRmZjI2ODIyNDg4MjNiZDNjODQxMjRkYzc2YWY3YmRlM2RkNDQwYzIyOGI1ZWZiYzc5NWRkODBkZmI2IjoxMjg6ImY4NzYxNDNkOTMzMjE0YTUwMzVmZjBiYjk2ZmY2NTBiIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzEyICgxOTItZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjIjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjoiOTMxMzIyNWRmODg0MDZlNTU1OTA5YzVhZmY1MjY5YWE2YTdhOTUzODUzNGY3ZGExZTRjMzAzZDJhMzE4YTcyOGMzYzBjOTUxNTY4MDk1MzlmY2YwZTI0MjlhNmI1MjU0MTZhZWRiZjVhMGRlNmE1N2E2MzdiMzliIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6Ijk3MzNlYTU2N2MzYmFkMjI1OWNjZDYzZWY3MDEyZjVkZTcwOWU1MGIxZmRjMzFmMWExNmRiMDJlZGUxYjY2ZjExZGNjNGQ5NTNmMmQ0ZDQ2NzE1ODdiNjU4ODJhZmJmOTU0NWZkYjZkZWFiMjI0MTNkMDkxYjcwMyI6MTI4OiI0YjcyZTUyMGIyNTIxZTYzZDI0MGVkNWM5MDMyMTZmYSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxMyAoMjU2LWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIiOjEyODoiOWNkYjI2OWI1ZDI5M2JjNWRiOWM1NWIwNTdkOWI1OTEiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTQgKDI1Ni1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIzZDRiMmNkZTY2Njc2MWJhNWRmYjMwNTE3OGU2NjdmYiI6MTI4OiIyODRiNjNiYjE0M2M0MGNlMTAwZmI0ZGVhNmJiNjE3YiI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxNSAoMjU2LWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkxYWFmZDI1NSI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6IiI6ImFkMTQyYzExNTc5ZGQ5NWU0MWYzYzFmMzI0ZGFiYzI1NTg2NGQ5MjBmMWI2NTc1OWQ4ZjU2MGQ0OTQ4ZDQ0Nzc1OGRmZGNmNzdhYTlmNjI1ODFjN2ZmNTcyYTAzN2Y4MTBjYjFhOWM0YjNjYTZlZDYzODE3OWI3NzY1NDllMDkyIjoxMjg6ImM5MTI2ODYyNzBhMmI5OTY2NDE1ZmNhM2JlNzVjNDY4IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzE2ICgyNTYtZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOiJhZDE0MmMxMTU3OWRkOTVlNDFmM2MxZjMyNGRhYmMyNTU4NjRkOTIwZjFiNjU3NTlkOGY1NjBkNDk0OGQ0NDc3NThkZmRjZjc3YWE5ZjYyNTgxYzdmZjU3MmEwMzdmODEwY2IxYTljNGIzY2E2ZWQ2MzgxNzliNzciOjEyODoiNGU0YjE3OGQ4ZmUyNmZkYzk1ZTJlNzI0NmRkOTRiZWMiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTcgKDI1Ni1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjoiY2FmZWJhYmVmYWNlZGJhZCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOiI2Y2E5NWZiYjdkMTY1NzdhOWVmMmZkZWQ5NGRjODViNWQ0MGM2MjlmNmJlZjJjNjQ5ODg4ZTNjYmIwZWRlZGM3ODEwYzA0YjEyYzI5ODNiYmJiYzQ4MmUxNmU0NWM5MjE1YWUxMmMxNWM1NWYyZjQ4MDlkMDY2NTIiOjEyODoiZTY0NzJiOGViZDMzMWJmY2M3YzBmYTYzY2UwOTQ0NjEiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTggKDI1Ni1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjoiOTMxMzIyNWRmODg0MDZlNTU1OTA5YzVhZmY1MjY5YWE2YTdhOTUzODUzNGY3ZGExZTRjMzAzZDJhMzE4YTcyOGMzYzBjOTUxNTY4MDk1MzlmY2YwZTI0MjlhNmI1MjU0MTZhZWRiZjVhMGRlNmE1N2E2MzdiMzliIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6ImUwY2RkZDc1NjRkMDljNGRjNTIyZGQ2NTk0OTI2MmJiZjlkY2RiMDc0MjFjZjY3ZjMwMzJiZWNiNzI1M2MyODRhMTZlNWJmMGY1NTZhMzA4MDQzZjUzZmFiOWVlYmI1MjZiZTdmN2FkMzNkNjk3YWM3N2M2Nzg2MiI6MTI4OiI1NzkxODgzZjgyMjAxM2Y4YmQxMzZmYzM2ZmI5OTQ2YiI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxICgxMjgtZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOjEyODoiZjU1NzRhY2MzMTQ4ZGZjYjkwMTUyMDA2MzEwMjRkZjkiOiIiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMiAoMTI4LWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGVmZTNlMGI1YzU0Yzk0YjRmMmEwZjVhNDZmNjIxMGQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOjEyODoiZjY3MmI5NGQxOTIyNjZjN2M4YzhkYmI0MjdjYzk4OWEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMzICgxMjgtZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJkMGQ5NGExM2I2MzJmMzM3YTBjYzk5NTViOTRmYTAyMGM4MTVmOTAzYWFiMTJmMWVmYWYyZmU5ZDkwZjcyOWE2Y2NjYmZhOTg2ZWYyZmYyYzMzZGU0MThkOWEyNTI5MDkxY2YxOGZlNjUyYzFjZmRlMTNmODI2MDYxNGJhYjgxNSI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6IiI6MTI4OiI4NmUzMTgwMTJkZDgzMjlkYzlkYWU2YTE3MGY2MWIyNCI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOTFhYWZkMjU1IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzQgKDEyOC1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImQwZDk0YTEzYjYzMmYzMzdhMGNjOTk1NWI5NGZhMDIwYzgxNWY5MDNhYWIxMmYxZWZhZjJmZTlkOTBmNzI5YTZjY2NiZmE5ODZlZjJmZjJjMzNkZTQxOGQ5YTI1MjkwOTFjZjE4ZmU2NTJjMWNmZGUxM2Y4MjYwNiI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOjEyODoiOWY0NTg4Njk0MzE1NzZlYTZhMDk1NDU2ZWM2YjgxMDEiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjNSAoMTI4LWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiMjhmZDc0MzRkNWNkNDI0YTUzNTM4MThmYzIxYTk4MjQ2MGQyMGNmNjMyZWIxZTZjNGZiZmNhMTdkNWFiY2Y2YTUyMTExMDg2MTYyZmU5NTcwZTc3NzRjN2E5MTJhY2EzZGZhMTAwNjdkZGFhZDQwNjg4NjQ1YmRkIjoiY2FmZWJhYmVmYWNlZGJhZCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOjEyODoiZTg2ZjhmMmU3MzBjNDlkNTM2ZjAwZmI1MjI1ZDI4YjEiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjNiAoMTI4LWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiMmU1ODJiODQxN2M5M2YyZmY0ZjZmN2VlM2MzNjFlNDQ5NmU3MTBlZTEyNDMzYmFhOTY0OTg3ZDAyZjQyOTUzZTQwMmU2ZjRhZjQwN2ZlMDhjZDJmMzUxMjM2OTYwMTRjMzRkYjE5MTI4ZGY0MDU2ZmFlYmNkNjQ3IjoiOTMxMzIyNWRmODg0MDZlNTU1OTA5YzVhZmY1MjY5YWE2YTdhOTUzODUzNGY3ZGExZTRjMzAzZDJhMzE4YTcyOGMzYzBjOTUxNTY4MDk1MzlmY2YwZTI0MjlhNmI1MjU0MTZhZWRiZjVhMGRlNmE1N2E2MzdiMzliIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiJjZWFlNTU2OWIyYWY4NjQxNTcyNjIyNzMxYWVkM2U1MyI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICM3ICgxOTItZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoxMjg6ImJhOWFlODlmZGRjZTRiNTExMzFlMTdjNGQ2NWNlNTg3IjoiIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzggKDE5Mi1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4ZjljMGFhMjU0OTcxNGM4OGJiMjY2NWU4YWY4NmQ0MSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6MTI4OiI3ODNjZmY1YzVhY2E3MTk3MzIwNjU4YTc0Mjc5YWIzNyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzkgKDE5Mi1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiOiIwZjAwOWU4ODQxMGQ4NGFkOTNjOTBkNTVlZmJlMjBmZmE4NTU0OTJmNGRmZDBmYjQ4NWM0ZjAyZjUzNmZlZmZiYjRkOTY3NzI5ZTVjNjdmMWRlMDc1MDI1NWNjNTAwNzE2YmE0ODNlYjNiMGEyYmY2MDdhZjI4ZjZhNjBiYjJlOSI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6IiI6MTI4OiI4ZDY0NWEwYjBlNDhkM2MzYjYwYTAxNDE1N2NiNDliNCI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOTFhYWZkMjU1IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzEwICgxOTItZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjIjoiMGYwMDllODg0MTBkODRhZDkzYzkwZDU1ZWZiZTIwZmZhODU1NDkyZjRkZmQwZmI0ODVjNGYwMmY1MzZmZWZmYmI0ZDk2NzcyOWU1YzY3ZjFkZTA3NTAyNTVjYzUwMDcxNmJhNDgzZWIzYjBhMmJmNjA3YWYyOGY2IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiIwMWIxNWJiNWFiNmZhYzBjNDIyMDE0ZTkxZWFjYmYyYiI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxMSAoMTkyLWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyI6IjY3OGIzZGNiMjcwZmFhMjA2ZGM1ZjZmYmI1MDE0OTk2ZTg2ZDZmM2UzNWNkY2RmZWIwM2IzN2I5YjA2ZmY0ZmYyNjgyMjQ4ODIzYmQzYzg0MTI0ZGM3NmFmN2JkZTNkZDQ0MGMyMjhiNWVmYmM3OTVkZDgwZGZiNiI6ImNhZmViYWJlZmFjZWRiYWQiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoxMjg6ImY4NzYxNDNkOTMzMjE0YTUwMzVmZjBiYjk2ZmY2NTBiIjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzEyICgxOTItZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjIjoiOTczM2VhNTY3YzNiYWQyMjU5Y2NkNjNlZjcwMTJmNWRlNzA5ZTUwYjFmZGMzMWYxYTE2ZGIwMmVkZTFiNjZmMTFkY2M0ZDk1M2YyZDRkNDY3MTU4N2I2NTg4MmFmYmY5NTQ1ZmRiNmRlYWIyMjQxM2QwOTFiNzAzIjoiOTMxMzIyNWRmODg0MDZlNTU1OTA5YzVhZmY1MjY5YWE2YTdhOTUzODUzNGY3ZGExZTRjMzAzZDJhMzE4YTcyOGMzYzBjOTUxNTY4MDk1MzlmY2YwZTI0MjlhNmI1MjU0MTZhZWRiZjVhMGRlNmE1N2E2MzdiMzliIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiI0YjcyZTUyMGIyNTIxZTYzZDI0MGVkNWM5MDMyMTZmYSI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxMyAoMjU2LWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOjEyODoiOWNkYjI2OWI1ZDI5M2JjNWRiOWM1NWIwNTdkOWI1OTEiOiIiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTQgKDI1Ni1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiM2Q0YjJjZGU2NjY3NjFiYTVkZmIzMDUxNzhlNjY3ZmIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOjEyODoiMjg0YjYzYmIxNDNjNDBjZTEwMGZiNGRlYTZiYjYxN2IiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxNSAoMjU2LWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJhZDE0MmMxMTU3OWRkOTVlNDFmM2MxZjMyNGRhYmMyNTU4NjRkOTIwZjFiNjU3NTlkOGY1NjBkNDk0OGQ0NDc3NThkZmRjZjc3YWE5ZjYyNTgxYzdmZjU3MmEwMzdmODEwY2IxYTljNGIzY2E2ZWQ2MzgxNzliNzc2NTQ5ZTA5MiI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6IiI6MTI4OiJjOTEyNjg2MjcwYTJiOTk2NjQxNWZjYTNiZTc1YzQ2OCI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOTFhYWZkMjU1IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzE2ICgyNTYtZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImFkMTQyYzExNTc5ZGQ5NWU0MWYzYzFmMzI0ZGFiYzI1NTg2NGQ5MjBmMWI2NTc1OWQ4ZjU2MGQ0OTQ4ZDQ0Nzc1OGRmZGNmNzdhYTlmNjI1ODFjN2ZmNTcyYTAzN2Y4MTBjYjFhOWM0YjNjYTZlZDYzODE3OWI3NyI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOjEyODoiNGU0YjE3OGQ4ZmUyNmZkYzk1ZTJlNzI0NmRkOTRiZWMiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTcgKDI1Ni1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiNmNhOTVmYmI3ZDE2NTc3YTllZjJmZGVkOTRkYzg1YjVkNDBjNjI5ZjZiZWYyYzY0OTg4OGUzY2JiMGVkZWRjNzgxMGMwNGIxMmMyOTgzYmJiYmM0ODJlMTZlNDVjOTIxNWFlMTJjMTVjNTVmMmY0ODA5ZDA2NjUyIjoiY2FmZWJhYmVmYWNlZGJhZCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOjEyODoiZTY0NzJiOGViZDMzMWJmY2M3YzBmYTYzY2UwOTQ0NjEiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTggKDI1Ni1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiZTBjZGRkNzU2NGQwOWM0ZGM1MjJkZDY1OTQ5MjYyYmJmOWRjZGIwNzQyMWNmNjdmMzAzMmJlY2I3MjUzYzI4NGExNmU1YmYwZjU1NmEzMDgwNDNmNTNmYWI5ZWViYjUyNmJlN2Y3YWQzM2Q2OTdhYzc3YzY3ODYyIjoiOTMxMzIyNWRmODg0MDZlNTU1OTA5YzVhZmY1MjY5YWE2YTdhOTUzODUzNGY3ZGExZTRjMzAzZDJhMzE4YTcyOGMzYzBjOTUxNTY4MDk1MzlmY2YwZTI0MjlhNmI1MjU0MTZhZWRiZjVhMGRlNmE1N2E2MzdiMzliIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiI1NzkxODgzZjgyMjAxM2Y4YmQxMzZmYzM2ZmI5OTQ2YiI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxICgxMjgtYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoxMjg6ImY1NTc0YWNjMzE0OGRmY2I5MDE1MjAwNjMxMDI0ZGY4IjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMyICgxMjgtYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGVmZTNlMGI1YzU0Yzk0YjRmMmEwZjVhNDZmNzIxMGQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOjEyODoiZjY3MmI5NGQxOTIyNjZjN2M4YzhkYmI0MjdjYzk4OWEiOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzMgKDEyOC1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJkMGQ5NGExM2I2MzJmMzM3YTBjYzk5NTViOTRmYTAyMGM4MTVmOTAzYWFiMTJmMWVmYWYyZmU5ZDkwZjcyOWE2Y2NjYmZhOTg2ZWYyZmYyYzMzZGU0MThkOWEyNTI5MDkxY2YxOGZlNjUyYzFjZmRlMTNmODI2MDYxNGJhYjgxNSI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OSI6IiI6MTI4OiI4NmUzMTgwMTJkZDgzMjlkYzlkYWU2YTE3MGY2MWIyNCI6IkZBSUwiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjNCAoMTI4LWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImQwZDk0YTEzYjYzMmYzMzdhMGNjOTk1NWI5NGZhMDIwYzgxNWY5MDNhYWIxMmYxZWZhZjJmZTlkOTBmNzI5YTZjY2NiZmE5ODZlZjJmZjJjMzNkZTQxOGQ5YTI1MjkwOTFjZjE4ZmU2NTJjMWNmZGUxM2Y4MjYwNiI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOjEyODoiOWY0NTg4Njk0MzE1NzZlYTZhMDk1NDU2ZWM2YjgxMDAiOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzUgKDEyOC1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiIyOGZkNzQzNGQ1Y2Q0MjRhNTM1MzgxOGZjMjFhOTgyNDYwZDIwY2Y2MzJlYjFlNmM0ZmJmY2ExN2Q1YWJjZjZhNTIxMTEwODYxNjJmZTk1NzBlNzc3NGM3YTkxMmFjYTNkZmExMDA2N2RkYWFkNDA2ODg2NDViZGQiOiJjYWZlYmFiZWZhY2VkYmFkIjoiZmVlZGZhZGVkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiJlODZmOGYyZTczMGM0OWQ1MzZmMDBmYjUyMjVkMjhiMSI6IkZBSUwiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjNiAoMTI4LWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6IjJlNTgyYjg0MTdjODNmMmZmNGY2ZjdlZTNjMzYxZTQ0OTZlNzEwZWUxMjQzM2JhYTk2NDk4N2QwMmY0Mjk1M2U0MDJlNmY0YWY0MDdmZTA4Y2QyZjM1MTIzNjk2MDE0YzM0ZGIxOTEyOGRmNDA1NmZhZWJjZDY0NyI6IjkzMTMyMjVkZjg4NDA2ZTU1NTkwOWM1YWZmNTI2OWFhNmE3YTk1Mzg1MzRmN2RhMWU0YzMwM2QyYTMxOGE3MjhjM2MwYzk1MTU2ODA5NTM5ZmNmMGUyNDI5YTZiNTI1NDE2YWVkYmY1YTBkZTZhNTdhNjM3YjM5YiI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOjEyODoiY2VhZTU1NjliMmFmODY0MTU3MjYyMjczMWFlZDNlNTMiOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzcgKDE5Mi1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoxMjg6ImJhOWFlODlmZGRjZTRiNTExMzFlMTdjNGQ2NWNlNTg2IjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICM4ICgxOTItYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhmOWMwYWEyNTQ5NzE0Yzg4YmIyNjY1ZThhZjg2ZDQyIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoxMjg6Ijc4M2NmZjVjNWFjYTcxOTczMjA2NThhNzQyNzlhYjM3IjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICM5ICgxOTItYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZmZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyI6IjBmMDA5ZTg4NDEwZDg0YWQ5M2M5MGQ1NWVmYmUyMGZmYTg1NTQ5MmY0ZGZkMGZiNDg1YzRmMDJmNTM2ZmVmZmJiNGQ5Njc3MjllNWM2N2YxZGUwNzUwMjU1Y2M1MDA3MTZiYTQ4M2ViM2IwYTJiZjYwN2FmMjhmNmE2MGJiMmU5IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiIjoxMjg6IjhkNjQ1YTBiMGU0OGQzYzNiNjBhMDE0MTU3Y2I0OWI0IjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxMCAoMTkyLWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiOiIwZjAwOWU4ODQxMGQ4NGFkOTNjOTBkNTVlZmJlMjBmZmE4NTU0OTJmNGRmZDBmYjQ4NWM0ZjAyZjUzNmZlZmZiYjRkOTY3NzI5ZTVjNjdmMWRlMDc1MDI1NWNjNTAwNzE2YmE0ODNlYjNiMGEyYmY2MDdhZjI4ZjYiOiJjYWZlYmFiZWZhY2VkYmFkZGVjYWY4ODgiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoxMjg6IjExYjE1YmI1YWI2ZmFjMGM0MjIwMTRlOTFlYWNiZjJiIjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxMSAoMTkyLWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiOiI2NzhiM2RjYjI3MGZhYTIwNmRjNWY2ZmJiNTAxNDk5NmU4NmQ2ZjNlMzVjZGNkZmViMDNiMzdiOWIwNmZmNGZmMjY4MjI0ODgyM2JkM2M4NDEyNGRjNzZhZjdiZGUzZGQ0NDBjMjI4YjVlZmJjNzk1ZGQ4MGRmYjYiOiJjYWZlYmFiZWZhY2VkYmFkIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMyI6MTI4OiJmODc2MTQzZDkzMzIxNGE1MDM1ZmYwYmI5NmZmNjUwYiI6IkZBSUwiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTIgKDE5Mi1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjIjoiOTczM2VhNTY3YzNiYWQyMjU5Y2NkNjNlZjcwMTJmNWRlNzA5ZTUwYjFmZGMzMWYxYTE2ZGIwMmVkZTFiNjZmMTFkY2M0ZDk1M2YyZDRkNDY3MTU4N2I2NTg4MmFmYmY5NTQ1ZmRiNmRlYWIyMjQxM2QwOTFiNzAzIjoiOTMxMzIyNWRmODg0MDZlNTU1OTA5YzVhZmY1MjY5YWE2YTdhOTUzODUzNGY3ZGExZTRjMzAzZDJhMzI4YTcyOGMzYzBjOTUxNTY4MDk1MzlmY2YwZTI0MjlhNmI1MjU0MTZhZWRiZjVhMGRlNmE1N2E2MzdiMzliIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiI0YjcyZTUyMGIyNTIxZTYzZDI0MGVkNWM5MDMyMTZmYSI6IkZBSUwiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTMgKDI1Ni1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSI6IiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6MTI4OiI5Y2RiMjY5YjVkMjkzYmM1ZGI5YzU1YjA1N2Q5YjU5MSI6IkZBSUwiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTQgKDI1Ni1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjNkNGIyY2RlNjY2NzYxYmE1ZGZiMzA1MTc4ZTY2N2ZiIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIjoiIjoxMjg6IjI4NGI2M2JiMTQzYzQwY2UxMDBmYjRkZWE2YmI2MTdiIjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxNSAoMjU2LWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiYWQxNDJjMTE1NzlkZDk1ZTQxZjNjMWYzMjRkYWJjMjU1ODY0ZDkyMGYxYjY1NzU5ZDhmNTYwZDQ5NDlkNDQ3NzU4ZGZkY2Y3N2FhOWY2MjU4MWM3ZmY1NzJhMDM3ZjgxMGNiMWE5YzRiM2NhNmVkNjM4MTc5Yjc3NjU0OWUwOTIiOiJjYWZlYmFiZWZhY2VkYmFkZGVjYWY4ODgiOiIiOjEyODoiYzkxMjY4NjI3MGEyYjk5NjY0MTVmY2EzYmU3NWM0NjgiOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzE2ICgyNTYtYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJhZDE0MmMxMTU3OWRkOTVlNDFmM2MxZjMyNGRhYmMyNTU4NjRkOTIwZjFiNjU3NTlkOGY1NjBkNDk0OGQ0NDc3NThkZmRjZjc3YWE5ZjYyNTgxYzdmZjU3MmEwMzdmODEwY2IxYTljNGIzY2E2ZWQ2MzgxNzliNzciOiJjYWZlYmFiZWZhY2VkYmFkZGVjYWY4ODgiOiJmZmVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoxMjg6IjRlNGIxNzhkOGZlMjZmZGM5NWUyZTcyNDZkZDk0YmVjIjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxNyAoMjU2LWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiNmNhOTVmYmI3ZDE2NTc3YTllZjJmZGVkOTRkYzg1YjVkNDBjNjI5ZjZiZWYyYzY0OTg4OGUzY2JiMGVkZWRjNzgxMGMwNGIxMmMyOTgzYmJiYmM0ODJlMTZlNDVjOTIxNWFlMTJjMTVjNTVmMmY0ODA5ZDA2NjUyIjoiY2FmZWJhYmVmYWNlZGJhZCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOjEyODoiZTY0NzJiOGViZDMzMWJmY2M3YzBmYTYzY2UwOTQ0NjIiOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzE4ICgyNTYtYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOWY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJlMGNkZGQ3NTY0ZDA5YzRkYzUyMmRkNjU5NDkyNjJiYmY5ZGNkYjA3NDIxY2Y2N2YzMDMyYmVjYjcyNTNjMjg0YTE2ZTViZjBmNTU2YTMwODA0M2Y1M2ZhYjllZWJiNTI2YmU3ZjdhZDMzZDY5N2FjNzdjNjc4NjIiOiI5MzEzMjI1ZGY4ODQwNmU1NTU5MDljNWFmZjUyNjlhYTZhN2E5NTM4NTM0ZjdkYTFlNGMzMDNkMmEzMThhNzI4YzNjMGM5NTE1NjgwOTUzOWZjZjBlMjQyOWE2YjUyNTQxNmFlZGJmNWEwZGU2YTU3YTYzN2IzOWIiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoxMjg6IjU3OTE4ODNmODIyMDEzZjhiZDEzNmZjMzZmYjk5NDZiIjoiRkFJTCI6MApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjN2UxOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uZnVuY3Rpb24KQEAgLTAsMCArMSwxMjQgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvZ2NtLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0dDTV9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBnY21fZW5jcnlwdF9hbmRfdGFnKCBpbnQgY2lwaGVyX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9pdl9zdHJpbmcsIGNoYXIgKmhleF9hZGRfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZywgaW50IHRhZ19sZW5fYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3RhZ19zdHJpbmcsIGludCAgaW5pdF9yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMjhdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMjhdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsyNTddOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEyOF07CisgICAgdW5zaWduZWQgY2hhciBhZGRfc3RyWzEyOF07CisgICAgdW5zaWduZWQgY2hhciB0YWdfc3RyWzEyOF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTI4XTsKKyAgICB1bnNpZ25lZCBjaGFyIHRhZ19vdXRwdXRbMTZdOworICAgIG1iZWR0bHNfZ2NtX2NvbnRleHQgY3R4OworICAgIHVuc2lnbmVkIGludCBrZXlfbGVuOworICAgIHNpemVfdCBwdF9sZW4sIGl2X2xlbiwgYWRkX2xlbiwgdGFnX2xlbiA9IHRhZ19sZW5fYml0cyAvIDg7CisKKyAgICBtYmVkdGxzX2djbV9pbml0KCAmY3R4ICk7CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTI4KTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTI4KTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMjU3KTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMjgpOworICAgIG1lbXNldChhZGRfc3RyLCAweDAwLCAxMjgpOworICAgIG1lbXNldCh0YWdfc3RyLCAweDAwLCAxMjgpOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEyOCk7CisgICAgbWVtc2V0KHRhZ19vdXRwdXQsIDB4MDAsIDE2KTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICBwdF9sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKyAgICBpdl9sZW4gPSB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgYWRkX2xlbiA9IHVuaGV4aWZ5KCBhZGRfc3RyLCBoZXhfYWRkX3N0cmluZyApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZ2NtX3NldGtleSggJmN0eCwgY2lwaGVyX2lkLCBrZXlfc3RyLCBrZXlfbGVuICogOCApID09IGluaXRfcmVzdWx0ICk7CisgICAgaWYoIGluaXRfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZ2NtX2NyeXB0X2FuZF90YWcoICZjdHgsIE1CRURUTFNfR0NNX0VOQ1JZUFQsIHB0X2xlbiwgaXZfc3RyLCBpdl9sZW4sIGFkZF9zdHIsIGFkZF9sZW4sIHNyY19zdHIsIG91dHB1dCwgdGFnX2xlbiwgdGFnX291dHB1dCApID09IDAgKTsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHB0X2xlbiApOworICAgICAgICBoZXhpZnkoIHRhZ19zdHIsIHRhZ19vdXRwdXQsIHRhZ19sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgdGFnX3N0ciwgaGV4X3RhZ19zdHJpbmcgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZ2NtX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeSggaW50IGNpcGhlcl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9zcmNfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfaXZfc3RyaW5nLCBjaGFyICpoZXhfYWRkX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZ19sZW5fYml0cywgY2hhciAqaGV4X3RhZ19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnB0X3Jlc3VsdCwgaW50IGluaXRfcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTI4XTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTI4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMjU3XTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMjhdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkX3N0clsxMjhdOworICAgIHVuc2lnbmVkIGNoYXIgdGFnX3N0clsxMjhdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEyOF07CisgICAgbWJlZHRsc19nY21fY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgaW50IGtleV9sZW47CisgICAgc2l6ZV90IHB0X2xlbiwgaXZfbGVuLCBhZGRfbGVuLCB0YWdfbGVuID0gdGFnX2xlbl9iaXRzIC8gODsKKyAgICBpbnQgcmV0OworCisgICAgbWJlZHRsc19nY21faW5pdCggJmN0eCApOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEyOCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEyOCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDI1Nyk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTI4KTsKKyAgICBtZW1zZXQoYWRkX3N0ciwgMHgwMCwgMTI4KTsKKyAgICBtZW1zZXQodGFnX3N0ciwgMHgwMCwgMTI4KTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMjgpOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHB0X2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworICAgIGl2X2xlbiA9IHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBhZGRfbGVuID0gdW5oZXhpZnkoIGFkZF9zdHIsIGhleF9hZGRfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHRhZ19zdHIsIGhleF90YWdfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19nY21fc2V0a2V5KCAmY3R4LCBjaXBoZXJfaWQsIGtleV9zdHIsIGtleV9sZW4gKiA4ICkgPT0gaW5pdF9yZXN1bHQgKTsKKyAgICBpZiggaW5pdF9yZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX2djbV9hdXRoX2RlY3J5cHQoICZjdHgsIHB0X2xlbiwgaXZfc3RyLCBpdl9sZW4sIGFkZF9zdHIsIGFkZF9sZW4sIHRhZ19zdHIsIHRhZ19sZW4sIHNyY19zdHIsIG91dHB1dCApOworCisgICAgICAgIGlmKCBzdHJjbXAoICJGQUlMIiwgcHRfcmVzdWx0ICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gTUJFRFRMU19FUlJfR0NNX0FVVEhfRkFJTEVEICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKKyAgICAgICAgICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBwdF9sZW4gKTsKKworICAgICAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgcHRfcmVzdWx0ICkgPT0gMCApOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZ2NtX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBnY21fc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2djbV9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIwOTQ3MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcuZnVuY3Rpb24KQEAgLTAsMCArMSwzMTkgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvaG1hY19kcmJnLmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICBzaXplX3QgbGVuOworfSBlbnRyb3B5X2N0eDsKKworaW50IG1iZWR0bHNfZW50cm9weV9mdW5jKCB2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIGVudHJvcHlfY3R4ICpjdHggPSAoZW50cm9weV9jdHggKikgZGF0YTsKKworICAgIGlmKCBsZW4gPiBjdHgtPmxlbiApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIG1lbWNweSggYnVmLCBjdHgtPnAsIGxlbiApOworCisgICAgY3R4LT5wICs9IGxlbjsKKyAgICBjdHgtPmxlbiAtPSBsZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfSE1BQ19EUkJHX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGhtYWNfZHJiZ19lbnRyb3B5X3VzYWdlKCBpbnQgbWRfYWxnICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG91dFsxNl07CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCBjdHg7CisgICAgZW50cm9weV9jdHggZW50cm9weTsKKyAgICBzaXplX3QgbGFzdF9sZW4sIGksIHJlcHMgPSAxMDsKKworICAgIG1iZWR0bHNfaG1hY19kcmJnX2luaXQoICZjdHggKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgIG1lbXNldCggb3V0LCAwLCBzaXplb2YoIG91dCApICk7CisKKyAgICBlbnRyb3B5LmxlbiA9IHNpemVvZiggYnVmICk7CisgICAgZW50cm9weS5wID0gYnVmOworCisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApOworICAgIFRFU1RfQVNTRVJUKCBtZF9pbmZvICE9IE5VTEwgKTsKKworICAgIC8qIEluaXQgbXVzdCB1c2UgZW50cm9weSAqLworICAgIGxhc3RfbGVuID0gZW50cm9weS5sZW47CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZjdHgsIG1kX2luZm8sIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIGVudHJvcHkubGVuIDwgbGFzdF9sZW4gKTsKKworICAgIC8qIEJ5IGRlZmF1bHQsIFBSIGlzIG9mZiBhbmQgcmVzZWVkX2ludGVydmFsIGlzIGxhcmdlLAorICAgICAqIHNvIHRoZSBuZXh0IGZldyBjYWxscyBzaG91bGQgbm90IHVzZSBlbnRyb3B5ICovCisgICAgbGFzdF9sZW4gPSBlbnRyb3B5LmxlbjsKKyAgICBmb3IoIGkgPSAwOyBpIDwgcmVwczsgaSsrICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSAtIDQgKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSAtIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIDE2ICkgPT0gMCApOworICAgIH0KKyAgICBURVNUX0FTU0VSVCggZW50cm9weS5sZW4gPT0gbGFzdF9sZW4gKTsKKworICAgIC8qIFdoaWxlIGF0IGl0LCBtYWtlIHN1cmUgd2UgZGlkbid0IHdyaXRlIHBhc3QgdGhlIHJlcXVlc3RlZCBsZW5ndGggKi8KKyAgICBURVNUX0FTU0VSVCggb3V0W3NpemVvZiggb3V0ICkgLSA0XSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG91dFtzaXplb2YoIG91dCApIC0gM10gPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBvdXRbc2l6ZW9mKCBvdXQgKSAtIDJdID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggb3V0W3NpemVvZiggb3V0ICkgLSAxXSA9PSAwICk7CisKKyAgICAvKiBTZXQgcmVzZWVkX2ludGVydmFsIHRvIHRoZSBudW1iZXIgb2YgY2FsbHMgZG9uZSwKKyAgICAgKiBzbyB0aGUgbmV4dCBjYWxsIHNob3VsZCByZXNlZWQgKi8KKyAgICBtYmVkdGxzX2htYWNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKCAmY3R4LCAyICogcmVwcyApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggZW50cm9weS5sZW4gPCBsYXN0X2xlbiApOworCisgICAgLyogVGhlIG5ldyBmZXcgY2FsbHMgc2hvdWxkIG5vdCByZXNlZWQgKi8KKyAgICBsYXN0X2xlbiA9IGVudHJvcHkubGVuOworICAgIGZvciggaSA9IDA7IGkgPCByZXBzIC8gMjsgaSsrICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCggJmN0eCwgb3V0LCBzaXplb2YoIG91dCApICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgMTYgKSA9PSAwICk7CisgICAgfQorICAgIFRFU1RfQVNTRVJUKCBlbnRyb3B5LmxlbiA9PSBsYXN0X2xlbiApOworCisgICAgLyogTm93IGVuYWJsZSBQUiwgc28gdGhlIG5leHQgZmV3IGNhbGxzIHNob3VsZCBhbGwgcmVzZWVkICovCisgICAgbWJlZHRsc19obWFjX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSggJmN0eCwgTUJFRFRMU19ITUFDX0RSQkdfUFJfT04gKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmY3R4LCBvdXQsIHNpemVvZiggb3V0ICkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIGVudHJvcHkubGVuIDwgbGFzdF9sZW4gKTsKKworICAgIC8qIEZpbmFsbHksIGNoZWNrIHNldHRpbmcgZW50cm9weV9sZW4gKi8KKyAgICBtYmVkdGxzX2htYWNfZHJiZ19zZXRfZW50cm9weV9sZW4oICZjdHgsIDQyICk7CisgICAgbGFzdF9sZW4gPSBlbnRyb3B5LmxlbjsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmY3R4LCBvdXQsIHNpemVvZiggb3V0ICkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIChpbnQpIGxhc3RfbGVuIC0gZW50cm9weS5sZW4gPT0gNDIgKTsKKworICAgIG1iZWR0bHNfaG1hY19kcmJnX3NldF9lbnRyb3B5X2xlbiggJmN0eCwgMTMgKTsKKyAgICBsYXN0X2xlbiA9IGVudHJvcHkubGVuOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggKGludCkgbGFzdF9sZW4gLSBlbnRyb3B5LmxlbiA9PSAxMyApOworCitleGl0OgorICAgIG1iZWR0bHNfaG1hY19kcmJnX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPICovCit2b2lkIGhtYWNfZHJiZ19zZWVkX2ZpbGUoIGludCBtZF9hbGcsIGNoYXIgKnBhdGgsIGludCByZXQgKQoreworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgY3R4OworCisgICAgbWJlZHRsc19obWFjX2RyYmdfaW5pdCggJmN0eCApOworCisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApOworICAgIFRFU1RfQVNTRVJUKCBtZF9pbmZvICE9IE5VTEwgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19zZWVkKCAmY3R4LCBtZF9pbmZvLCBybmRfc3RkX3JhbmQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3dyaXRlX3NlZWRfZmlsZSggJmN0eCwgcGF0aCApID09IHJldCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ191cGRhdGVfc2VlZF9maWxlKCAmY3R4LCBwYXRoICkgPT0gcmV0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBobWFjX2RyYmdfYnVmKCBpbnQgbWRfYWxnICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG91dFsxNl07CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAwXTsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgaTsKKworICAgIG1iZWR0bHNfaG1hY19kcmJnX2luaXQoICZjdHggKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgIG1lbXNldCggb3V0LCAwLCBzaXplb2YoIG91dCApICk7CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICk7CisgICAgVEVTVF9BU1NFUlQoIG1kX2luZm8gIT0gTlVMTCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19zZWVkX2J1ZiggJmN0eCwgbWRfaW5mbywgYnVmLCBzaXplb2YoIGJ1ZiApICkgPT0gMCApOworCisgICAgLyogTWFrZSBzdXJlIGl0IG5ldmVyIHRyaWVzIHRvIHJlc2VlZCAod291bGQgc2VnZmF1bHQgb3RoZXJ3aXNlKSAqLworICAgIG1iZWR0bHNfaG1hY19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoICZjdHgsIDMgKTsKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmY3R4LCBNQkVEVExTX0hNQUNfRFJCR19QUl9PTiApOworCisgICAgZm9yKCBpID0gMDsgaSA8IDMwOyBpKysgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmY3R4LCBvdXQsIHNpemVvZiggb3V0ICkgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBobWFjX2RyYmdfbm9fcmVzZWVkKCBpbnQgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICplbnRyb3B5X2hleCwgY2hhciAqY3VzdG9tX2hleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYWRkMV9oZXgsIGNoYXIgKmFkZDJfaGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpvdXRwdXRfaGV4ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGFbMTAyNF07CisgICAgdW5zaWduZWQgY2hhciBlbnRyb3B5WzUxMl07CisgICAgdW5zaWduZWQgY2hhciBjdXN0b21bNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZDFbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZDJbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgbXlfb3V0cHV0WzUxMl07CisgICAgc2l6ZV90IGN1c3RvbV9sZW4sIGFkZDFfbGVuLCBhZGQyX2xlbiwgb3V0X2xlbjsKKyAgICBlbnRyb3B5X2N0eCBwX2VudHJvcHk7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19pbml0KCAmY3R4ICk7CisgICAgbWVtc2V0KCBteV9vdXRwdXQsIDAsIHNpemVvZiBteV9vdXRwdXQgKTsKKworICAgIGN1c3RvbV9sZW4gPSB1bmhleGlmeSggY3VzdG9tLCBjdXN0b21faGV4ICk7CisgICAgYWRkMV9sZW4gPSB1bmhleGlmeSggYWRkMSwgYWRkMV9oZXggKTsKKyAgICBhZGQyX2xlbiA9IHVuaGV4aWZ5KCBhZGQyLCBhZGQyX2hleCApOworICAgIG91dF9sZW4gPSB1bmhleGlmeSggb3V0cHV0LCBvdXRwdXRfaGV4ICk7CisgICAgcF9lbnRyb3B5LmxlbiA9IHVuaGV4aWZ5KCBlbnRyb3B5LCBlbnRyb3B5X2hleCApOworICAgIHBfZW50cm9weS5wID0gZW50cm9weTsKKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisKKyAgICAvKiBUZXN0IHRoZSBzaW1wbGlmaWVkIGJ1ZmZlci1iYXNlZCB2YXJpYW50ICovCisgICAgbWVtY3B5KCBkYXRhLCBlbnRyb3B5LCBwX2VudHJvcHkubGVuICk7CisgICAgbWVtY3B5KCBkYXRhICsgcF9lbnRyb3B5LmxlbiwgY3VzdG9tLCBjdXN0b21fbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWRfYnVmKCAmY3R4LCBtZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHBfZW50cm9weS5sZW4gKyBjdXN0b21fbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsIG15X291dHB1dCwgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkMSwgYWRkMV9sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCggJmN0eCwgbXlfb3V0cHV0LCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQyLCBhZGQyX2xlbiApID09IDAgKTsKKworICAgIC8qIGNsZWFyIGZvciBzZWNvbmQgcnVuICovCisgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmN0eCApOworCisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggbXlfb3V0cHV0LCBvdXRwdXQsIG91dF9sZW4gKSA9PSAwICk7CisKKyAgICAvKiBBbmQgbm93IHRoZSBub3JtYWwgZW50cm9weS1iYXNlZCB2YXJpYW50ICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZjdHgsIG1kX2luZm8sIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmcF9lbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tLCBjdXN0b21fbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsIG15X291dHB1dCwgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkMSwgYWRkMV9sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCggJmN0eCwgbXlfb3V0cHV0LCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQyLCBhZGQyX2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBteV9vdXRwdXQsIG91dHB1dCwgb3V0X2xlbiApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGhtYWNfZHJiZ19ub3ByKCBpbnQgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqZW50cm9weV9oZXgsIGNoYXIgKmN1c3RvbV9oZXgsCisgICAgICAgICAgICAgICAgICAgICBjaGFyICphZGQxX2hleCwgY2hhciAqYWRkMl9oZXgsIGNoYXIgKmFkZDNfaGV4LAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3V0cHV0X2hleCApCit7CisgICAgdW5zaWduZWQgY2hhciBlbnRyb3B5WzUxMl07CisgICAgdW5zaWduZWQgY2hhciBjdXN0b21bNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZDFbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZDJbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZDNbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgbXlfb3V0cHV0WzUxMl07CisgICAgc2l6ZV90IGN1c3RvbV9sZW4sIGFkZDFfbGVuLCBhZGQyX2xlbiwgYWRkM19sZW4sIG91dF9sZW47CisgICAgZW50cm9weV9jdHggcF9lbnRyb3B5OworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgY3R4OworCisgICAgbWJlZHRsc19obWFjX2RyYmdfaW5pdCggJmN0eCApOworICAgIG1lbXNldCggbXlfb3V0cHV0LCAwLCBzaXplb2YgbXlfb3V0cHV0ICk7CisKKyAgICBjdXN0b21fbGVuID0gdW5oZXhpZnkoIGN1c3RvbSwgY3VzdG9tX2hleCApOworICAgIGFkZDFfbGVuID0gdW5oZXhpZnkoIGFkZDEsIGFkZDFfaGV4ICk7CisgICAgYWRkMl9sZW4gPSB1bmhleGlmeSggYWRkMiwgYWRkMl9oZXggKTsKKyAgICBhZGQzX2xlbiA9IHVuaGV4aWZ5KCBhZGQzLCBhZGQzX2hleCApOworICAgIG91dF9sZW4gPSB1bmhleGlmeSggb3V0cHV0LCBvdXRwdXRfaGV4ICk7CisgICAgcF9lbnRyb3B5LmxlbiA9IHVuaGV4aWZ5KCBlbnRyb3B5LCBlbnRyb3B5X2hleCApOworICAgIHBfZW50cm9weS5wID0gZW50cm9weTsKKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfc2VlZCggJmN0eCwgbWRfaW5mbywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZwX2VudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20sIGN1c3RvbV9sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3Jlc2VlZCggJmN0eCwgYWRkMSwgYWRkMV9sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCggJmN0eCwgbXlfb3V0cHV0LCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQyLCBhZGQyX2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LCBteV9vdXRwdXQsIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZDMsIGFkZDNfbGVuICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggbXlfb3V0cHV0LCBvdXRwdXQsIG91dF9sZW4gKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBobWFjX2RyYmdfcHIoIGludCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgY2hhciAqZW50cm9weV9oZXgsIGNoYXIgKmN1c3RvbV9oZXgsCisgICAgICAgICAgICAgICAgICAgY2hhciAqYWRkMV9oZXgsIGNoYXIgKmFkZDJfaGV4LAorICAgICAgICAgICAgICAgICAgIGNoYXIgKm91dHB1dF9oZXggKQoreworICAgIHVuc2lnbmVkIGNoYXIgZW50cm9weVs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgY3VzdG9tWzUxMl07CisgICAgdW5zaWduZWQgY2hhciBhZGQxWzUxMl07CisgICAgdW5zaWduZWQgY2hhciBhZGQyWzUxMl07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIG15X291dHB1dFs1MTJdOworICAgIHNpemVfdCBjdXN0b21fbGVuLCBhZGQxX2xlbiwgYWRkMl9sZW4sIG91dF9sZW47CisgICAgZW50cm9weV9jdHggcF9lbnRyb3B5OworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgY3R4OworCisgICAgbWJlZHRsc19obWFjX2RyYmdfaW5pdCggJmN0eCApOworICAgIG1lbXNldCggbXlfb3V0cHV0LCAwLCBzaXplb2YgbXlfb3V0cHV0ICk7CisKKyAgICBjdXN0b21fbGVuID0gdW5oZXhpZnkoIGN1c3RvbSwgY3VzdG9tX2hleCApOworICAgIGFkZDFfbGVuID0gdW5oZXhpZnkoIGFkZDEsIGFkZDFfaGV4ICk7CisgICAgYWRkMl9sZW4gPSB1bmhleGlmeSggYWRkMiwgYWRkMl9oZXggKTsKKyAgICBvdXRfbGVuID0gdW5oZXhpZnkoIG91dHB1dCwgb3V0cHV0X2hleCApOworICAgIHBfZW50cm9weS5sZW4gPSB1bmhleGlmeSggZW50cm9weSwgZW50cm9weV9oZXggKTsKKyAgICBwX2VudHJvcHkucCA9IGVudHJvcHk7CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICk7CisgICAgVEVTVF9BU1NFUlQoIG1kX2luZm8gIT0gTlVMTCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZjdHgsIG1kX2luZm8sIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmcF9lbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tLCBjdXN0b21fbGVuICkgPT0gMCApOworICAgIG1iZWR0bHNfaG1hY19kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UoICZjdHgsIE1CRURUTFNfSE1BQ19EUkJHX1BSX09OICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCggJmN0eCwgbXlfb3V0cHV0LCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQxLCBhZGQxX2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LCBteV9vdXRwdXQsIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZDIsIGFkZDJfbGVuICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggbXlfb3V0cHV0LCBvdXRwdXQsIG91dF9sZW4gKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIGhtYWNfZHJiZ19zZWxmdGVzdCggKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5taXNjLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm1pc2MuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGJjZTAzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5taXNjLmRhdGEKQEAgLTAsMCArMSw4MiBAQAorSE1BQ19EUkJHIGVudHJvcHkgdXNhZ2UgU0hBLTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19lbnRyb3B5X3VzYWdlOk1CRURUTFNfTURfU0hBMQorCitITUFDX0RSQkcgZW50cm9weSB1c2FnZSBTSEEtMjI0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19lbnRyb3B5X3VzYWdlOk1CRURUTFNfTURfU0hBMjI0CisKK0hNQUNfRFJCRyBlbnRyb3B5IHVzYWdlIFNIQS0yNTYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX2VudHJvcHlfdXNhZ2U6TUJFRFRMU19NRF9TSEEyNTYKKworSE1BQ19EUkJHIGVudHJvcHkgdXNhZ2UgU0hBLTM4NAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfZW50cm9weV91c2FnZTpNQkVEVExTX01EX1NIQTM4NAorCitITUFDX0RSQkcgZW50cm9weSB1c2FnZSBTSEEtNTEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19lbnRyb3B5X3VzYWdlOk1CRURUTFNfTURfU0hBNTEyCisKK0hNQUNfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlIFNIQS0xCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfc2VlZF9maWxlOk1CRURUTFNfTURfU0hBMToiZGF0YV9maWxlcy9obWFjX2RyYmdfc2VlZCI6MAorCitITUFDX0RSQkcgd3JpdGUvdXBkYXRlIHNlZWQgZmlsZSBTSEEtMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3NlZWRfZmlsZTpNQkVEVExTX01EX1NIQTE6Im5vX3N1Y2hfZGlyL2ZpbGUiOk1CRURUTFNfRVJSX0hNQUNfRFJCR19GSUxFX0lPX0VSUk9SCisKK0hNQUNfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlIFNIQS0yMjQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3NlZWRfZmlsZTpNQkVEVExTX01EX1NIQTIyNDoiZGF0YV9maWxlcy9obWFjX2RyYmdfc2VlZCI6MAorCitITUFDX0RSQkcgd3JpdGUvdXBkYXRlIHNlZWQgZmlsZSBTSEEtMjI0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19zZWVkX2ZpbGU6TUJFRFRMU19NRF9TSEEyMjQ6Im5vX3N1Y2hfZGlyL2ZpbGUiOk1CRURUTFNfRVJSX0hNQUNfRFJCR19GSUxFX0lPX0VSUk9SCisKK0hNQUNfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlIFNIQS0yNTYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3NlZWRfZmlsZTpNQkVEVExTX01EX1NIQTI1NjoiZGF0YV9maWxlcy9obWFjX2RyYmdfc2VlZCI6MAorCitITUFDX0RSQkcgd3JpdGUvdXBkYXRlIHNlZWQgZmlsZSBTSEEtMjU2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19zZWVkX2ZpbGU6TUJFRFRMU19NRF9TSEEyNTY6Im5vX3N1Y2hfZGlyL2ZpbGUiOk1CRURUTFNfRVJSX0hNQUNfRFJCR19GSUxFX0lPX0VSUk9SCisKK0hNQUNfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlIFNIQS0zODQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3NlZWRfZmlsZTpNQkVEVExTX01EX1NIQTM4NDoiZGF0YV9maWxlcy9obWFjX2RyYmdfc2VlZCI6MAorCitITUFDX0RSQkcgd3JpdGUvdXBkYXRlIHNlZWQgZmlsZSBTSEEtMzg0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19zZWVkX2ZpbGU6TUJFRFRMU19NRF9TSEEzODQ6Im5vX3N1Y2hfZGlyL2ZpbGUiOk1CRURUTFNfRVJSX0hNQUNfRFJCR19GSUxFX0lPX0VSUk9SCisKK0hNQUNfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlIFNIQS01MTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3NlZWRfZmlsZTpNQkVEVExTX01EX1NIQTUxMjoiZGF0YV9maWxlcy9obWFjX2RyYmdfc2VlZCI6MAorCitITUFDX0RSQkcgd3JpdGUvdXBkYXRlIHNlZWQgZmlsZSBTSEEtNTEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19zZWVkX2ZpbGU6TUJFRFRMU19NRF9TSEE1MTI6Im5vX3N1Y2hfZGlyL2ZpbGUiOk1CRURUTFNfRVJSX0hNQUNfRFJCR19GSUxFX0lPX0VSUk9SCisKK0hNQUNfRFJCRyBmcm9tIGJ1ZmZlciBTSEEtMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX2J1ZjpNQkVEVExTX01EX1NIQTEKKworSE1BQ19EUkJHIGZyb20gYnVmZmVyIFNIQS0yMjQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX2J1ZjpNQkVEVExTX01EX1NIQTIyNAorCitITUFDX0RSQkcgZnJvbSBidWZmZXIgU0hBLTI1NgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfYnVmOk1CRURUTFNfTURfU0hBMjU2CisKK0hNQUNfRFJCRyBmcm9tIGJ1ZmZlciBTSEEtMzg0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19idWY6TUJFRFRMU19NRF9TSEEzODQKKworSE1BQ19EUkJHIGZyb20gYnVmZmVyIFNIQS01MTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX2J1ZjpNQkVEVExTX01EX1NIQTUxMgorCitITUFDX0RSQkcgc2VsZiB0ZXN0CitobWFjX2RyYmdfc2VsZnRlc3Q6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm5vX3Jlc2VlZC5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5ub19yZXNlZWQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2U2MmExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5ub19yZXNlZWQuZGF0YQpAQCAtMCwwICsxLDEyMDAgQEAKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiZTkxYjYzMzA5ZTkzZDFkMDhlMzBlOGQ1NTY5MDY4NzVmNTk3NDdjNDY4YjBkMGRhIjoiIjoiIjoiIjoiYjc5MjhmOTUwM2E0MTcxMTA3ODhmOWQwYzI1ODVmOGFlZTZmYjczYjIyMGE2MjZiM2FiOTgyNWI3YTlmYWNjNzk3MjNkN2UxYmE5MjU1ZTQwZTY1YzI0OWI2MDgyYTdiYzVlM2YxMjlkM2Q4ZjY5YjA0ZWQxMTgzNDE5ZDZjNGYyYTEzYjMwNGQyYzU3NDNmNDFjOGIwZWU3MzIyNTM0NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiJkMGM1N2Y3ZGMwMzA4MTE1YjFlYTMwZTJlYTJmNzcwMjg5Y2ViZGRhNjE3ZDEzMmMiOiIiOiIiOiIiOiJiNzk3NjE1YTc4ZDFhZmU3NGViZWRiOWQ4OTQ4ZDgyY2YyYmI1ODZlZDgwMTQ2Yjk2ZDQxYTcwOWY2ODkxNzhiNzcyZGQzNDJkMjlhZjU0NDk2OTRiZjhlYWYzM2E2NjRhMjRjMGFkMjlhMTI1MjllZWFiYTQ3OGE3OTk5MTdhYjQ2NjZkZTFiNmViMmM3MzMyMDE3ZDY3ZWVhNmZhYmQ4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjI4NmU5ZDllMzllNDAyNGRlYTBjODg1ZmQ2ZjdmMTA3NTg2YjZhMWE4YWMzYWMwZSI6IiI6IiI6IiI6ImNhMjVhYTllZjI4NmEzY2Q1MmQxMDFkYjAxY2RmMGNlMTRjN2FkZDEyNGYxYjZhOWE4YjNhNDhjNzQ5ODliYWYwMWY2ZmY3MDRkYTdjNWQ1Nzg1YjZlOWMyMTkxNDg5MjEwMjMxM2U3YTE1Y2IyZjk5NzdhNTEzYWRhMGQzZjI0MjgxOWFlZjJjMTY5OWI3MmNiZDM1OGM1OTQzNTEwMWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNmIyMGRkYTY1YTk2ZjU2NGZjMDI1M2QzOGRiYzI5MGI4MTNlNTM4ZDA0MGQ4ZGQ5IjoiIjoiIjoiIjoiNjZiNmVmNTdhMzI4MjgzOGRlYTA1ZDEyMmNjZGZhODQyZGRhMTkzMzNkZWQyMDE1ZDM4MTM5NGRhMzhjODMwOWE2ZTk3MDNlYzA2NTMzNWIxMTZlZmI5N2RhYWFjOWM1M2NlYjdhMjE4ZWQwZGI2MWMzYmE5NjlkYzYyOWI5NWY1NDE4ZWFkZmE0M2M1ODcxNGZiMDIxNzZiYzBiMTdlYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIzMjMzOWZjODJiNjU1MDUxMDQyZTMwMzhlMzE2MWM0ZmIyNTJlNDk1ZmYzOTZiZTIiOiIiOiIiOiIiOiJlOTVlNDU1MWEzN2UzMzhmYWFlNDQxOWUzYTcwZTRjMWUzZDUxNmJlN2U1NTRjYWJiMDAwMDdjNTkxYmE3Y2I2YzMyNDc4ODlhOWIwOGU0NmM2NjE5ZjE2NmQ5OTZlNGUzNGJiZjZjZDhhMzU0ZGU5OTY0ZGU5MDYwNDFmNzNmMmFkZTJlYjgyYzZlODI2MjdkMzI1NzczOGMyODIxZmNiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImRlYWE5ZDBjMmNhN2EwNWNiYTEyZWViN2RiMjQyNzdlMTYwNWUxZDAzMGQ3NmRkYyI6IiI6IiI6IiI6ImJhYjViZTYwMDFkYTU5NTFjMWU3ODczZjRlMmJlMzE4ZTg3OTM3MGVhZThhNTFlZDg0MjRlZDZmMTJiMmQyOTRiNDVkMDA2YjFjMmNkOGMxY2UwNDdmZDE2ZjJmYmJjMDk5NTRhOGI0NjRjYzk4NmYyM2U4NmUxZDkzOThkMjA3ODAxOTBhYTViZTA1MDVjZGZjODI2YzdhMDFkY2FiOTkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNTg5NzY2YmUzYzAzYjBhMzUxYTgxYjEyMDNmOTQ0ZTI5MjhlOTVmOGEzYmM3NDUyIjoiIjoiIjoiIjoiNWJlZTI0ODI2NjcyMjA0NjJhYzZkM2MyMzRmNzMzMzcwM2M1YWJjZWQyZmYyYWQ5MWQ1MjE5M2U4NmE2MWNmYTQzYmUwYjRmN2U4MzFlMWU1NjNlMjYwMTc4ZjIzOTc2YjJmM2UxMzIzNTZhYjU0NTY3YjM3NTgwYmY5ZDc1MTIyM2ZhZDc3OTNmMGFjMTFmYzQ1MDgxNzUzNjExNmIxZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIwN2NjNGQyMmIwMTAzMzUwNDVjY2ExNDJkOTE0OTRiZjRkNWU4NDJhZjQxNTVkMTciOiIiOiIiOiIiOiI4ZTEzYTU3NGQxN2RjOGI0NDM4MmQzYjI2M2U4NTdmNTA4MTY3NTU5MTc2MDNhMDdjYTQ5ODdmZDQwMzQwMDQyYTFlNmE4MmEyMjc2NDcxMzAzMDRkNzNkODcwNGZkOWFkNGRiM2FlNDJkYWFhNTViMWY5Mzk0OGU3MGM0NTFhMTI3MjRmZWQ4NzBlMDJhMWE4ZWM0ZWVhYjcxNmM2ODU0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjY0MjU2MjRhOThhYjMwMThlYjRlZjgyN2Y1YTRmYmJhYzEwMjJkNzAxNTVlZjM3NSI6IiI6IiI6IiI6IjE2ZmQ2YWJiMTBkYmExNjU5ZWQ1NmQ0Mjk2YjY1ZmUzZjI0NDk5OTZiZGI4ZWVlNWM5NGIyNDlmMDQ4MDhjZGQ5NTYzNTY5YTQxNTJiZDk5YTMyNTkyZDM1ZDZhNGNjODA2YzIyODI4NDQ4N2ZjMWUwODhiMTc4ZDRjOGVjYjZiMGUzY2ZhYWNkN2QzOWQ3NTRkOGJkNGU2NjYyZjQ0YTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMDFkMTFkMmI2MzFiZTI0MGRlMmY0MWQxMGJkY2U0N2M4OWZhMzI0Mjc0MTBjYzYxIjoiIjoiIjoiIjoiNDY0MGEwNjNlNjVlZjBjMGRlOTdmOThhMzkyOTcyMTllMmExZWNlZWQ3ZTY0MjYxOTk3MTk5MTFlZGJiM2QwNmZiZGU2ZmJhYjgzODc4ZTliYTlmYThlMWQwNDRmN2E0MGYzNjI3ZDdjZmM0OWQxN2YxMDFlZTY0ZjZiOGM2ZTYxNTRhMDFiNGQzOWZiOWJhNmIzM2NhMmMyN2Y5ZmQ1MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNWUwYTg5YjNhYmExY2Y1ZWQ5NDc1NjA4MzcyNmRlOGRiNWQ3OTE2MmY3M2E1MDMxIjoiIjoiIjoiIjoiY2FlN2IyYzI1ZGNlMWMxMmUyYzRmNjFiM2U1MzE1NWI5MTc3ZTkyYmZiOGZhZWZjNDI1ZDFjYmI1MDc3MTM5MjEzNzhlZDg4MDk4NjcwOWJmYmQ3Y2RhNjZkMThkYmUwNzMyMTM3YTg2ZDQ3YjdlODIyM2UzNDVhZjBjZDlhMDIxOWJhMjkwMDQwYmM2ZmY0NGMxZGU1YjE2ZjMyYjkzMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiM2I3NmQzMmQ1OTgyZGFmNmUyMTY0MzQwOTQxYTE3MDc0NDFiYmI5OWEyNjY4YmE0IjoiIjoiIjoiIjoiNjM2NDBlNDA2ZTE2YjNiODI3MjNhNmNiMzgzMDY1N2I3NTZmZTYxY2YyYWRhOTZmNjY3ZTBmMmRmMGM5ZDMzYzZmMTY0ZWU3OGQ0OTc2MjgxYTg0ZDMwMjRmZjY3MDc0YWNlY2Q2NTM5MWE4NGFhZmFlYzlkNmIwODhiYzMzNjE2NTQzYjYxYTRjNjAzZTVhMjFiZDM5ZTJhNzI0MDFjOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNDVmY2FmYmEyMjc4YmY4ZTZkNDM3Mzk2ZjYwZjBlODQ2NTRkZTQ0ZTBiZDZjYjhhIjoiIjoiIjoiIjoiN2UyMzI1Y2IyY2VkMzcyYjY0MGMyNDk2YTM5NzBjYjc3NzFmZDQ5NGU0MGFlMTcyMzliZmZmZDllYTJhYjBlZTc0YzJkM2MzNjkzMjhhM2I0NjVlNjdiY2JlYTg2ZjUwYTMyZjlmZjgyMDUwNWRmNWFkYmMwMzJkM2FkYjgzNTgxNDQzODc3Zjg1YzYwYjNiNzAxZjU5YjFmYzM4YzA2MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNDIwMWRiOTc3ZWY5MGQwOGYwMTdjOGUzODIwNGMyOTk1YmJiNDdlZmU5ZmE0Y2FkIjoiIjoiIjoiIjoiMTAxYzczMThlMjY2OTNiYzExZDY0Yjc4MGU5YjMyZDRkOTU4Yzc0NzVhYjk5ZmRkNmZlODY1NTRkY2VmNTRjY2RjMmNhOWY0ZWMzNTVlYjI1ZDdiM2Y1NzBmZjk1ZWM3YWJjMmU5ZTJmYjg3OWJiMDQ1ZGViZjZjOGE5OGZmNDY2NjhjMGRlMjFiZDhkNGQxOGZiOWUxMTU1MDg3OGUzMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNWQ4MDg4M2NlMjRmZWIzOTExZmRlYjhlNzMwZjk1ODg2YTYzYzAxNDc4ZWNkNjJiIjoiIjoiIjoiIjoiOWUzNTFiODUzMDkxYWRkMjA0N2U5ZWEyZGEwN2Q0MWZhNGFjZTAzZGIzZDRhNDMyMTdlODAyMzUyZjFjOTczODJlZDdhZmVlNWNiMmNmNTg0OGE5M2NlMGEyNWEyOGNkYzhlOTZjY2RmMTQ4NzVjYjlmODQ1NzkwODAwZDU0MmJhYzgxZDBiZTUzMzc2Mzg1YmFhNWU3Y2JlMmMzYjQ2OSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjMyYzFjYTEyNTIyM2RlOGRlNTY5Njk3ZjkyYTM3YzY3NzJkNGNjNGYwNTQ0ZDQwOSI6IiI6IjllOThjYzhlMGY4ZWI4NGQxOTExYzE3NzVhNTcwM2JiIjoiNTkzYWEzYTMwMGU1YzkwN2EwMTFkZDVhM2RjZDc3ZTIiOiI5NDI5MDlhOWQzODBhYTVkNGUzYWY2OTA5M2E4ZmE1MTNlZTU0NWI5YmY5ZTFiODFjNWYzMDk2NmRiM2U1Y2I1MmY4YjFiNmZlNDQwZDU5MmU1ZmU0YTk3MmMzNmFhNDk4MDM1ZTI0NDJmODI5MTBjNWNkMDk1YzdmNGI0YzdlNzU1NWM0NjY5Y2NhNDgxY2RmYmZkYTE2N2I1ZDZmOGQ1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMTcyYTJkMjRlZjEyOGRhZGM5M2UwYjc0ZjI3N2U3YzM2OTJmODZlNmNhNWUxMTE3IjoiIjoiOTNiNGExZmRiZjlkZDMwOTk2Mjk4ODA0ZGQ4NmMwZjciOiI2OWQ3OTJkYzliNmZlMTYwMWYzMWE2OGU0ZDAwNzE4NyI6IjEzZjMwYjQ2OThkNmU5NzM1NTZjM2Y5MmRmZjYyNDFiYmZiZGUzMDBlZDU4ZDA3ZmQ1ZjY0ZWZkY2QwYzFiNjJjYTNkZTYzNThkNTA1ZGNmOTcyZmRjZTIwZjdiODkxYzRjYWI0OTM3MjFkODBjYjEwOGZjZWU5MTU4MzViMDJkZWEzMzA0MWIzOGUyODI1MmMzMGE3MWZhZDg1ODc4ZTYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI0YTE3YjgwNjlhZTNhNzRkNzdjOWM5NDUxNGJhOTBjZDJhYmZhYzAwMDJkMmM1ZGEiOiIiOiJjYzM5ZDFhMmE0MjVmMDBlMjIwZDcyMWZiZmQ1YjZlNSI6IjFjY2VlMjVmNTg2OGU4NjNhMDViNzJkNzQ0ZTY0YWViIjoiZDc4N2IzNTU2Mjk3NzlmZjI5MTYzOTdkNjA5NGY0NGRlYzA2MzM3NTcxY2NiMGFiZjVhMTdiNmNmYWJlMDA1NTc4OTRlOWRkYWI4Y2FhZmVmNDY3ZmFhNDUxNDU4MmI1MDczZTdkMWQ5ZmRkNmZhMzRjNTY1ZDFhY2EyMzc0MmVkNGU4NzEzMzI1M2E5NjY0ZWMwODViYzZjNzY5NjVmNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMTI4KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImQ2MGM0ODYwZDliYTNlYmI2NGUyMDk1MjMxZTA3NzkyYmE2YjVlOWUyMmUxNDA0MyI6IiI6Ijc3NjI3M2JiMjJmNWU2MmE3OTM2OTIxMjdiY2JkNzg1IjoiODc5NWU0NWY4MjE2MGNiMTA5NmE1MDlmZDM1NzJmOTIiOiIzMTIyYzFkM2E2ZGU4YjI1ZmQxODBiMTU5NzMxZjk3NWY3ODYwMTM2MDE1NWU0M2Y2OTRiMjg5ODIyYTI1OTQ4ZDJjMjBhNjczZjE4MWJlMDZiNTljNTY2OTYwMzM5ZjI1MDE1ZDJhY2JmNWM3ZDNmNjhhMmJhZGU3NzllMDBmYWEyNDYyM2MxMzEzZGE4ODhkYzhjZWU5MDFmYTA1NTczIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNDk0OTgzYzA0NTgxYjgxMWUwYjJiODQ2YzU0YmQzMTgyNGJkNzBmZDE4MjU1OGYxIjoiIjoiOTM1MjAwYTdlZGYxZTI5MDM1ODFmZWRiN2MwNDUzM2QiOiI0OWMwMTMzY2NhMjQ1N2ZhN2NiYmQ0YzY4Y2M1ZTc4ZiI6IjBmZDJlYzQ3ZmEyZTMxMzI2ZWU5Yjg5NGZkZDYyMjQ4MTgxOTAxNjg2NDBkOTFhMmEwYzI0N2IxZTI3Y2NmYTM0M2U5MzcwZDE4MmQ5NWIyYjViZDc0YjRiMDljNDRkMDQwOTQzNjRhNmZkMDJiYTcwZWUyYzU1ZTA0ZDY1YWQ5YzZkYTY1YjljMDc0MmY5ZmI1Y2E5NWRhYWZhNDhkZjEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDEyOCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI3N2VhODZjZTU5ZjI0NjZlNTVjZTIwNTdlNzg1NTAzNWMwOTI5NWMwMmYxYzUxY2IiOiIiOiJmMzZkNjVmMjJiNWFmZDNmNTFlMTNlYTM4ZGNmZjU1NSI6IjZiNjEzYjU2ZTQ3MGI1YzJjMzBjMzBhYWI5YTc3MmUxIjoiNDFjZDhlZjgyNjA5MDEyZDMzYjRlNWI1MWEzOWVjMTdlZGE0MzE3OTYyNjI3Nzk2Zjc4NDUwNDU5MjBiZWNkN2NhZWY1NmQ0YTJjM2E4ZTg0OWUyOTliYWJlOTIzNjdlZjM0YTg5MTBiZWJkNDk4MjQ4Y2NjMmIzZjVmNjM5MjBiMzFjZmU4NTY5NzNlMTVlNDhiMDYwODcxYTljZjlhNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMTI4KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjJkZmZiMDM3MDMwMjNmNjViNzU3YjdlZTg3ODk5YTE0YTljOGNlNzg4ZmIyYmRkYyI6IiI6ImRhNDJiMjEzMDcxMjUyYWRiNzU1YTZjYjI0MDk0YzE3IjoiYzgzZmMyYmViNjBhN2VlOWIzNzRmM2ZiN2JmYzg5MDAiOiI4ZjU0MjcxZTM1NzhlNjBlODk4OWU0OWY1YjQyNmUxYTAyOTZhZmJmY2M3ZGEwZmZiZGQ1ZGVhNzFlYzZiMzM5YjZkODY2YmQzNzU2YmE3NDVlNDJjOGNkZGY5OTdjYWM1ZmVkNzJiMzNhYzgxZTVmNGQ2ZjJkMTVmMDMwYTQxYzY4NDU1MmZjOTRkNDhjMGQ5NzMyM2VmN2ViNjU2ODU3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiODkwZTczMjM1MDIzMTNiYzdkNjE3ODA1MzYwZDU5NjhiNmM2OGMwMjgwY2VmNWVkIjoiIjoiMjU3ZjFmNjBjZjJkMzY5MjRjM2U3YjZlNGNjMzUxMzUiOiI4OTIzNWNjNDcyYzZlMmUxZTkyYzcwMzI0NDU5YTlkMyI6IjU1MjgzNDUzZTgyNjYyYzhkOTJmNTRjYjRhNWQ3ODRlODNiMWIzNTI3YmM1ZTcxYTUzZjA0NTA4MTcyZWI1MTU2YmEyYTliYTkyMTE2Y2RhY2VlZDE3MTE4Yzc2MzdhZjRiNTc0ZDM2NDE4N2E1MmNmMGMyMGQ3NjhkYTUxODAyMWMzZDk1Y2I1Y2U2YmMxMDhiMWJlZjE5YmFkNjY2NzciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDEyOCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIxNjdjZTZiYWQxNjVlYjY0MGVlYmZlY2U3Y2E2NjkwZWM1YzZiNWY4YzdmYTkzMDQiOiIiOiJjMGU3ZWYxMzEzOGVjNGE3ZDUyYmFmODU5MjQ4NGNhMCI6IjQ3MmE0N2UzZmMwOThjN2NiOTJmYjk1M2EyNmUyNWM2IjoiZTJhYTI2NTBjODRiZTc5ZWM0MTBmZjliYWM5M2U1Y2FmZjhhNDZhOGMzOTQ5NTg1NmZmNjRjOGM1Mzk5ZTgxNjU0YmE5MGM4YThiMjZjZGNhMjgxMGNlNjhlNGFiNjQ2ZTUwYTFmNmZhN2E4MjljZmQ3MmM5YTYxZTFhMGI0MTVjMDMxMDY3ZGNkNDE3YmFhYzk1NTNjZjdkODRhNzc0MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMTI4KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjZiOGFlYWY3MDQ2MGU4M2ExMjQ4OTlkNzA1ZGMwOTAwYWNkODExNjk4NjY5ZmNlZSI6IiI6Ijk0YTUzODA4ZGY1ZWJhYTc2OTM5MzRkN2ZkYTkyYjk1IjoiNGQ0ZTdkODhmNDRmZTU1NmM1Y2NkYzU2ZjhiMmYwOTgiOiIxNjVhYWU2YmNkZDc5OWZlMzI1ZGRhZmNlM2I2NDU5MDBlYWJjODc1NTJjMGJiNDdlZTJlYjZhZDUxNDYyYThhNGY0NDk4YzRiZDI0ZmNmYzQ2ZGU1ZDEyMzUxMTQzZDVhODM4MDYwZjYxNzI1OGMyMTgwMzVhNGYyOWZiMzRhNTQ2NzMyMDViMmUxYjM2Mjk5MTY5M2Q3Yjk5OTcyOTU0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjAwZjMwZjkyYmQ0NGE5YjJiMDRhNmNhZTY3NTMzZWQ4NWI0YWUxMzM1Yjk4MTA5YSI6IiI6Ijc3ZWM0Mjc0ZmU1ZjhmMjJkYmI0YTFlZDYwNTA4MTFlIjoiZWYwNDFiNjUxNjgyNWQ1MWJmNzZkMmY2NTFhNTU1NzYiOiI4YzY2NDM1N2IwMTQyNTY2OGVhNWRhZjA3YTJiNWI4YzUwZGJiZDcxZDlmNDhjNTBmMjc1YTAyYjZjZmM0NzE3ZWI3ZGIyODZmYTQ5ZjE3ZDA1ZDQ0MjMwZjdkODJjMjUxYTZmMGZlMGEyYWRkNWQyY2M5YTkyYTUyN2Y2M2E5YmQzYzhlYzkzZTlhNDA0ZTA4Mjk2MjljNWVlYjk5N2IwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjJlYWZlZWJiNThhMmZiNTQ0NzQyODAxMTJjNTY2OGQ2MWJlMmFhNGRmOTg1OThhZiI6IiI6IjM4OWEzNmVjZDY4NzA4MGE1ZDJjYWNlOGEzMjZmMDNhIjoiNDk1OTY1YmRiYmIxYmIwMWJhNjExOTFlOWRkNGIwMzgiOiJmMTdkYjA0NWIwYWY0OTEzZDc5Zjk5ZTAxOGMxZjcyNmY0ZmUwMmYwODQ3N2NjY2MwZDZhMDY4YTgwOGJmYzZjY2I3OTdlNjAyMmRjM2I5OWVhMTgwODZhNTY0Mjg4ODQxMTBjNDkxMjhhNTFlMTBjMTVmNmVjYmZlMGE1YTFlOTdlNzJhNTc4ZmVmZWE2YzY2YzQzNmM5MWEyYjYzOTViIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImI2NDk3MTk3Yjc4M2QxZjQ5M2E2NDMwNzQ4YjQ1OTMyODk1ZWEyYTlkODIwNGY1ZCI6IiI6ImFjMjY2NjVlNzk2ZDFiMDA5NTFjNzI1ZGE4OGQ5OTJmIjoiNWYwOGM3OTUxMTA2ZGZlYzUwOTZkOTAwOTc0NDljYzIiOiIxNzBiNThhYzMzNDJhOTY4Yzk2YWEyOWYxY2U4MjBkZWJlNzkzNGQ5ZGI0NjIxNmMwM2FlM2FmZDMwNDE4OGNkMzhiNjIwOGUxY2FkNWZjZTVjMjYxNzlhMzBhODc3MTAxNWE5OWQyOTAyZDUxODk5YWIwYzQyZTBiNDAwZDE4ZjFlODk0MTEyNDhkYjk2ZjlkNjJiNDY2ZjgyOGRlMTUwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjRmZmFmZDFmMjBkZDM4Njk5YmZjYTAyOWMwNTU4NDgzZmJlZWQzY2IyOWFhMGViOCI6IiI6Ijk2YWJmY2VlODgzZDhkY2FkOTY3YzA3MWMxMmRkZTE5IjoiOWZkN2NjMjkyY2Q1NWQ4MzY0ODYyZjVmZDY3NWMwOGIiOiI1ZTg2MTJjNmNlOGY1YjY4MzhhMWU0ZmI5ZTE0MzcwZmIyZDY2YmM4ODVmNmZlOGEzZmYyMzJmMTYzNDBjMmFmNThlYjI3MzQ0OTRlMGNlOTIwZjM2MDQ2YjdhODA3ZjRiNTVjYWYzYTQ1YmRjYWVmYTRiYjIzZjM1MjYwMWMwNzY5NzQ5ZjAyNTc0Mjg5MThiOTMxNjA2YzdiMzk1MTM1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6Ijg5YTZmMDcwYWZhZDVjY2Y0ZDExN2M0ZTQ0YmFhMmM3YjI4OTQxZmE3ZTgyOGMwNCI6IiI6IjcyMDZhMjcxNDk5ZmIyZWY5MDg3ZmI4ODQzYjFlZDY0IjoiZjE0YjE3ZmViZDgxMzI5NGIzYzRiMjJiN2JhZTcxYjAiOiI0OWMzNTgxNGY0NGI1NGJmMTNmMGRiNTJiZDhhNzY1MWQwNjBkZGFlMGI2ZGRlOGVkYmViMDAzZGJjMzBhN2ZmZWExZWE1YjA4ZWJlMWQ1MGI1MjQxMGI5NzJiZWM1MWZkMTc0MTkwNjcxZWVjYWUyMDE1NjhiNzNkZWIwNDU0MTk0ZWY1YzdiNTdiMTMzMjBhMGFjNGRkNjBjMDRhZTNiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNDkwNThlNjc3M2VkMmI3YWIzMDljMDk0OWZkZjljOWVhNDU3Y2I4ZWMwZTdmZDAxIjoiZGM0Nzc2NDFkODljN2ZjNGEzMGYxNDMwMTk3ZGQxNTkiOiIiOiIiOiI0ZTg5MWY0ZTI4MTEwMDQ1M2I3MDc4ODkyOWVjNzQzYTNjNWVkZDliODFkYzc5OGJjOTM3NzEzNjhjMzliNjEyMDM3YjZmNDJmNjBjNWQ4OTI0YjY0Njg0ODE1MWIwYzI5NWJlNDkxZDRhMjhkMTkyN2RlZWQ1MjNmZDA0ZDNkMmRkYTk1ZWQ0MjE2NjMxMmU1YzMzOTJkMjI4OTNiMGRjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNGNjYzdkODMwMDlhMjhkYjE0ZTgzOTE3Njc3NGQ0NWQ5MzQ1MzU4ZjMzNmExNjIyIjoiZTZkYjMyOTc2ZDkyNjJiMWQzZGM0ODdmMjJlMWY1YjMiOiIiOiIiOiI1YTE3MWU5ZjAwNjVlY2UzN2JhNTNkZjgxYWMzZDg4MDU0ZDUzZDBjYjY5NWE5MDFlMWExY2E5MTM1MjQyMGI1MDhjNDYxYWM5MTA5NWNjZWE4MTYyMWI4MDBkZGNmZjkwNTAyMGY5NmRhZDJhNTAzNzdkMzk0NTA0NzQyMGMzYjkwMmU4ZTM2MWY0NTI1YzFkNGJmYThhZjE2NDkyNWQyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiZmM3ZDBjM2VmMWM0MDRhZGE5NjhkYWUzNTU4MWI2Y2QzMWUwYTQ2YzM5Y2U0OWRjIjoiMTQxNThhNjVmYzliM2JjMWFjMDRjNzg1NDQ5Mzg1MmQiOiIiOiIiOiI5MTg0OTRmNDdkYWRkYTIyNjY3ZGMxZDA2NmY0NGYzY2NiYjYxZDNmODRiMmVlYWI3ZDI2ZjRlOTk5YWFiOTRlNzlkMjgyMjg3YWI3NmQ0ZTNlZWVlZjJlZjc5YzJhZDU3MTM4MmFiZGVhNTVkNWQ4NjQyZjYwNGY4ZjI3ZjNmNzNhNWJjMTQxM2RjODdiZmRmOTFkYTFjNjA0NWVjMjIzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMWYwZGY3OTMzZGM5OWVhZjdiMjg0YjAyZWU3NzNlYzQ2NDYxZmQ3NjJjNTk1NDA4IjoiYWJkMWQ4YWY0YWU0NmQ3ZTVmMWY0ZTBiNzFiNTRlZGMiOiIiOiIiOiJmMWViYTc1OTZjNmMyMDExOGY4NjAxN2ZmODY1MTRkNzQ1Y2U3ZWEwMmM0OTcxOTA5NGU1YzJhOTZkM2RmYTFkZDUwNzliOGVmZjgwNzhiYTk3OTM5MDBkYmExNDVhMjYwZTY3MjgzNzQyMmMzNTFjM2YyMzFjMjAxZGZhYTIxZTQ4ZDNmN2VlMjhiY2QwOGRhYzY4MGU4MGJmODdlYzIwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMDk5ODhhMzZhYmFkNzRjM2NmMzc3ZGI5YzkyMDBiYWY2YzI3YmU0ZTIxOTMyMTY2IjoiMTdiN2E0MGY0YzM3ODk0YmM5NDg0NTZlMzdhZDQ4MmEiOiIiOiIiOiIwOTFlNWZiOWM2YzIxOGYyNDYwYzUxNGZhMjE1MDYxNDYwY2E5MGNmYjM1YzFhOWY1ZWExMjVmYzQ5YWEwYjJiZWI0MmRjYjBmZWQ4NjVmODUxMGMzMTQxY2Q1MWQxYjMzMjE2ZTJlNzJjZWJjYWJkM2UxYmMwZWFiMjAxZDhlNzJhMGQxZGUxYzJiNzkxNWEwY2YyNDI3MDgwOTJmMjExIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiY2UxOTM0YjY1NjFlYmFhYTg1MWFjY2Y4Y2VhZTViMGRjNTg3OTIyZmY2ODgzNmFhIjoiNjAyZTkwODZmNDRkMDNjZTYxMDM5YzJlODFmZWQ2MjAiOiIiOiIiOiI0NDFkYTc1NTJiMmQ0NTUzM2ZjOTI0ZWE5ODVmZDRiMGI5NTk0MmZjNzk5N2EzNzEyOGQzZTk2ZDRjMjc5MmIyNDFkYmU5MjFkNjFmMzg5ODg1MmQ0ZjkzNzQwY2MzNjQ5Y2I1Mjc5YTdmMGYwOWJlMzk5MGU5ZWU1OTlmYjA3MTdjMzA4ZTdhOTM5YTQ0MWI1YzNiYTBjYjhhYTE5NjQ3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNThmMWE5ZWI5MzVmZDA4YTRjM2M4OTRhMDZhZDAwY2EwNTc2NTg5NzAwYTRkNTBjIjoiYjE0ZjJhNzRjYmUzODgxMDY5ZjMwNTA3OTE5YzY4NzAiOiIiOiIiOiJhZTljNmI0MGQ5NTFhYWI5YzJkOWNiOTIwYTA1ZjNlMTU0ODk4YzgzZTM5MmRmYmQ3ZmZjYmUyMjgzZWIyYjc1ODQyZmE1ZTdiZDk2MjZhZDEyZTgxNDg3NGYxOTY2ZmVhMWViODE3NzkzZDJlYjBhOWNiOTI3MGNjOWFhNDI2NzExOGZiYTBjN2I2ZmNmNDg3YTk3ZWJjYmFkYzY3NDk2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMGFiZjJmODQ1Mjk1YmIxZGQyODNkYWEyNGU3NWZhMDhjOWU5MjAyNzkzYzQ3OWIzIjoiZjg3NDJmNDQ5MzJiYWUyZDY1YTAzMmFkYTJiNzYzODIiOiIiOiIiOiI4ODQ3Njk2ZThlZGQyYzdiNzUxYjc4MGE2ZmM2OWQ4NDM0YTMxNDQ1OTM5MzY5NDMyMTc0NjUzNjJiM2MzZjdiMjViNzUxNDlmN2M2OWQxMGVjZDE2OWYwMGVkOThiNTNlMGU0OThhZjZkOWY2MDA0NDFlZTJjMDFhOWU3NGVkODQ1ZDI0Y2RhYjQ1NDNkZmY3ZDFmNzgwMGEyNzg2NzFkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMGY5YmM2OTM1ZTdiYWYxN2Q1NjA5MzFlYzNlNzVkOWZkYTdiMTkyMTRlMGZmYjljIjoiYzEzYmIyNmU5MzQ5YTU2ODY2ZjgyMWMxMGEyYWUyOGMiOiIiOiIiOiIxMmE4NDk2NTFmMzEwZmJhZTA0YzRkYTQ2ODBhMjFhNTBhOTg4OTgwNjE5NGJlNDcwYjhiMTExYTMyZWE3NDE3OTRjYmU3MjVkOThhZTlkNDBjMGQ2MGMwNGM4YjdiMzI5MTdmOWRjMThjMjdkZmI4YzY0NTc5YTE3NmEyYzRiMjNjYzMyZTUyMzdmYTVmOTA0YWIxMjQ5YWFmYTdjZDg4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNzlkOTZmZjVlYzkyYWY5ZmVlMGFmN2VmZmRjMTVjZTU2YjljYmRmYmJiZTViNDlhIjoiMjNkMTI4OGFlNDFlNjVlNTZlN2I3ODNmODVhZThiNDciOiIiOiIiOiIyMDZjMjU2NDk1MDk5NWFjNmNhNmQyYWQ1MWU5Y2FjZDc1NDBmMjU0YTMzNWQ2ZDdlZWQ3ZWYxNzk1Njk0OWNiNWQ3ZDNmNGUxOTdlODJhYTQ0NDJkMDhkMWQwZjkzM2U2NDFmNzAzYmUxYmU0YTljYTU3NDdlNTI0Njg3YTdhMDM0NzYxNDkzZGNmMmUxMTAxNzg5ZjEzNWRlNWQzZjQ5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6Ijk0ZTg1MmZmYmZmNGYyMDA3ODE4MTIyMWI1ZmJiODA0OGYzZTk1ZGUzMTNhNTJjMSI6IjE4NDFkY2FiYWUyNGMxNTZhMTdhMWQwZWRhNmY4YmIyIjoiIjoiIjoiMTUzMTliMDZjMDVkNDdkZWVhZWFiNTQwZTY0OWNjNmUyOTg5ODQzZGUwN2RjYWE5NjZkNzk5YTM2OTAyZjcyOTQzNTg1ZTI3NzM5MTIwNDAxODVhYzFlZmEwNjBjNmVkZWNlZjgwMGUzMTE2YzY2Y2NmZWVlYzlmZTdlZTcwZjNkYWUyYWMxYzAyMTAzMTBlYTE2NGY0YzQ0MDJkMmY3NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI0NzNjNzQzMjA1YmIzNzVmYWQxNWY1MzdkZmViNDAyZDg3OTc1NGIyYjQ5ODdjYmQiOiI0Zjg4ZjRkYjUwYTY4MDZkNjg5OWY3MTk4MWJlZWM0OSI6IiI6IiI6IjQ2YjA2OTRiYzhhZmM2ZDg2ZGNiOGI4MGNmODgxNTEwNDAwN2ViZWRiMDYwNTBhZTYyNWI4OTAwNjBjNGRhZDNkOWUyNjYxMDQyZDI2YTNjZmRlZDAzODM4MjlkZGNmNjE2ZWM4NGQzZjMyZDMwNzQ4MGNhZjBmODdiYTliMDBlODg4MTJmNWNiMmE0ZTk0ZTM1NDA5MmQwYzUwYjliYzciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMjAyMDhjOWFjNDgzMDUxMjc4NmZjZTdlYmRlMzQ0YTgyY2VlMGQ3ZDdhNTYwN2Q2IjoiMjYwMmM1ZjUyYzdlZTI2MjA0ODZjZTU2MzY2Y2M4ZWIiOiIiOiIiOiJiMGJkMmMwNzM5ZWQxNjA4ODQ4ZGQwZTljMWRiOWY1NDdjNjQyNjg3NTRhZjA5NzE2ZGE0MGIyNjgyZmJjNDVmNTZkZTk1NGNiY2UwZDhhM2Y1M2ViMmMzYWZhYzllM2FmZWFiNDAzOGZlMDQyYzg5Nzc4NmZkM2RhNzBmMmQ2YjYyYjEyOTgxNjMwYmYzMGQ3NmRkODc5ZTI5MjZhYjQwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjMwMTFjMzFhNDRjY2ZkMTI2MGFlOWU0MzFkYTQxZTg4M2IxYTZhYzkwNjBmMmZhNCI6IjZiMzZhMWZjYjJhMjE3M2ZjN2UwYzEyMGMyNjI3YTZmIjoiIjoiIjoiYTc4MWQ5OTcwYzcyNzJlOThkOTQxNDM4ZDMxMWNmN2U4MGQyZDU2YjI5ZWIwYjRiMWM3NmQwMDkwODQwMWVjNWI0YmIxYzVmMTU5ZGJmNDJhYjMwMTAwOTMzYjE2MjhmYWE5MmQyZTI1YmQzN2VhZDRjMzM1NGM4MjMwMTNjZDllMzMxYmRmNWUyYzVjN2QxMWQ1YmQ5ZjUwZmQxMTBmYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiJlZTZkNTc2MzVlNWFiNGIzZDczYTI2NTJjMTQ0M2IzMjI5NmJmZTMzMWI2NTc4ZTYiOiI0ZmNjYmYyZDNjNzNhOGUxZTkyMjczYTMzZTY0OGVhYSI6IiI6IiI6IjkwZGM2ZTE1MzIwMjJhOWZlMjE2MTYwNGZjNzk1MzZiNGFmZDlhZjA2YWI4YWRiYjc3Zjc0OTBiMzU1ZDBkYjMzNjhkMTAyZDcyM2EwZDBmNzBkMTA0NzVmOWU5OTc3MWZiNzc0ZjdhZDBiYTdiNWZlMjJhNTBiZmRhODllMDIxNWEwMTRkYzFmMTYwNTkzOTU5MGFhNzgzMzYwZWI1MmUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImMyN2Y4MGIxZDA4NWRkMTVjYjE2M2YwMzM2ZDA3NzQ1N2VjYjNmMzJhOTAyNDJmNyI6IjRkZWI2MjJhMzFiNGM1MzAzNDhiNWYwODAwOGZiN2VlIjoiNWE4NGY5NDgwNGUyZDA0ZWFkNzczZDJhMzI0YjM0ZDYiOiIyMjZkOWY0ZDcyMGY1ODBjMmJlNDRkNGVhZjJlYzhkYiI6IjZkYjc2YTBhMDAzYTY0ZGVjNjgwMWRkMzI3MWZhZThhNDNhYThjZTJlMGQyMDVlMzgzMGUyNjcwNzJhYmUyOGQyYTZmNzA3NDk0ZDE1NjM4NTU5ZmE0MjgyODQzNzYwZGFhOTBlZWM1ZDI4NjVlYTExZTgzNmU2MDM0NTE2MGQ1MTEyNDQ1YWIxNzU0YjU3OGI1NTQ3MWExZDljYWYyNzUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjUxN2RhZGJkNmUyMGZkODNhZWFjZWQxOTc3MzJiMWQ1Y2UyMjFhNjBmODIxMDY4NSI6ImJkOTkxMWJjMTkyZGE0NWMwMGM0N2Q1ZWUwNzk0NzNkIjoiMzMyNTQxNTRmZmViNDk4M2QyN2FjMDg5ODBlYzQ5NDMiOiIzNDlkYjUyZjA5NDIyODgzNTM2ZDExYWM0YWFhZjdiYSI6ImRkN2JlODExZDNhOWZkZDE5NGU4ZjhmMThiMzVlMWQ5ZjE3ODg4NDRjMzcxZDgxMWNiODk4ZWJjNTYxZDAwMGNjMjg1YWZjOGY0ODZkYWJlMzdkNmM4NWU2MTRkM2QxOTZjNTQ0Y2E1NjBhYzZlMDMzN2IwNzAwZTFkZWQ4ZmIyODkwM2U2NjMyOWFmZGQ1ODkzMDhkNTZjNTBkNzM4MDMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImM3NjMxNDliYTk1ZTdkMDU0ZGE1MmU0ZDNkMDYyODcyNTNiYzJmNDNhZTdjOWRhMCI6IjMwNWQ2YWEzYzYxNDhhMGViMmU5MWI5Mzg1ZGU1OTAzIjoiYTM2OTE4ZWRhZjVhZGQ2ZjBmODFkM2Y5OTFlZTMwYTEiOiI1YzY1YjA5ZTc0NDMxN2RiODZkNzhhYWVmYTY2YWY0NCI6IjU1NjBkMjdmYzU1Yjg4NWEyOWE0NDlhMWY4ODM1OTY2NTQ5YzQ5NTZlYmIwMzkzYmE5ZmU3NDhlNzRhNWEzMDNmMTQ3OGJiM2U1MDdhOWRhYTExNTlkZDhkZDZkMTcxYmZmMmUzODMwNTgxZDdmNmZkYmNjZDkxYTg3NDhkMjBjMWQ5ODFjZjkwOWMzMWRiNmVlZGY1NTg3NzIyYWMyNTciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImI0NzlhMTRkMTI1ZmU0NjAxMDUzOTg5NDM5Zjg1MjAwZTE5OGRmNzU2YWZmNzU0MyI6IjhmNTkwNjcwZjg4ZDhjMmM3MTNkNjM2NDNmOTNiYTU1IjoiY2RhN2M3ZWU3N2U2NjdiOTZlZjBiYTMzMGM5Y2E2YWMiOiJhNjBmZDE0N2Y2Y2RmYjQwOGQxNjBlMzg4YzIwZDhkOCI6IjVmMDg4YmNlYmQ4MTY1NTFjNGIyMmMzMDI0YWVhYjJmNzVjOTA2ZGM4ZmQwYWIwYzgwMDU1ZTA0NDVjMWRjMTUxYTA2ZGY4MWJkMzliODUzNTI2MWE3YTVkY2VkYzdmOWIxN2MwNjJlZTZmMTIwZjIwOTlmMmFiNWFhOTNmMjdhMDhkN2I1Y2YxMDI3ZTI2YWRmNTRhNTIwOTE2YzJjYjQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImJkNDZmYzI1M2U5MzM0ZDRhYThiZGZmNWUyMWMxMmUyNjE1MTUxNTliMDFhNDUxNiI6IjE3MzU0ODZlNWVhOGJlNzRmYTE1OGIyZmVhOGU1Y2FkIjoiYzM1MTdkNThjZGJkMDI2MjY1NTE3NGNjMWQxZWIzMjQiOiI0MDRmN2I4ZWI0NjFkMDc3MzY4ZTJmZjA2ZGRiNDE4OSI6IjdmMWNmMTcyYjY3ZWM3YzU2NmM5ZTI0YzA3MWI3OWI1YTRhMTM1YTM2OWRlZDVlNzhiOGNkMjQ2Nzc0OWUzMGM0MDFiZjE3NmQ4OGNjMGUwNWE1ODdiYjJiOGVkMDkyMDZiYjMxNGRmNTkwMDllODhhMDFlZjAwN2U2MWViYTJlNDAwOTNhYTAwM2RhZGE0ODMxNDg2OWMwZjNiOTlkNTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjYwMGEzMWI4ZjU1Yzg1Y2UyN2VjZTQ3MDVlNmZlOGNkMTdhMDFlNzgyN2VjMjM4MyI6IjZkZWVmMDZhMDc5YWQyMDYyZTc3ZGJhMjFmZWY2NDQxIjoiY2E1NTEyYWIzMjllZTk0MWIyMmYzMjdmZTBkYWQ0OTkiOiJjMWZmYzk3Mjg5ZDhkMzYzNzI5ZGFhMTYyOGEyYzczNSI6ImE4MWNmNTU2Mzk0MGZmYmJlZTlkYmRjYWY3ZGIxZTdlNTNiNDI3ZmQzYTBlNzk1YzM1YTFiOGViNmY2MzE2ZTQzYjgwNDY5MGE0NDg5N2UwZjQyZmJkZmE4YzlmMTc3NzAyNGQyYTUzMGVkYTk5NGVkMDM4ZGU2MGI5MDYwMjU0NWNlZjk5YjY5ZjM3MWY3OTYxOWJhYmRhOTM2MGM2NjUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImYzOGIwY2QxNmU5NDM0ZGE5MTZiNjNlOGI3Y2UxYTkxODgzZWMyMDhjM2JhZjc2ZCI6IjUzNDc5OWUzZmU1MWJjMzcwYWY2NTY4MDcyZTJlNTc5IjoiOTUyMGFkMjRhNjFkMjk3MTYzNDJkMmI3YmQzNWRkNDUiOiJjNGU5MmQ2ZGEzN2E5ZjYyMzZhMzk2ZjM1MmM1M2M4NiI6IjVkYzBiM2JlYmRlNWJhYzZkNGQyNGVjMDhmMTUxMGRjODhlMWUwNmM5N2MzMDMxZGM5NTE5ZjMzOTJlODNhMDllMWE3ZGI5OWIyMTQ4ZDk5MmE5MjhiYjVjMWY2ODI2NTA4NmY3YTg0ZTY5N2E3YTBhZWRhNGI0MTU5MDYwNmVkMTM5MDYzZGVmNDZmYTJhNjI1NjU3YjE3ZjE4ODQ1Y2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjA2YTVlNzZkMGVlOTBlZDAyMDZhMDdhOTE0ZGMyMDc5NmE4YTJmYjJjMGViYmYxNCI6IjJhNDkzMTJhZjkxOTI2YTM3YjVmN2MwMDllODA0N2VmIjoiMGNkYTcyMDkwZWJiMDA3YWIyNzE1Njk1N2U2NGU3YmYiOiIyNDY5NWIyMjFmNDJhNWJlNmQ0Mzk5YzY0NDRjNGFhMyI6IjJiMGFlY2E0NWVkNDRjYTM0YTJmYzc0MWM1ZTRlMjA5MWUxMTVhNDE0OGU3MWJkOGZhOTA1ODhlMzIyNTNmZmNmMzYwZGYyMTNiNDhhMTlmNmY0NTE4NmI2N2RjZWY2MzI3NzI5YWM4ZjNjMDhkNjU4ZGU4OWU3MTUzOTc4M2ZiNjZhZTgzNDQ1NTQwN2U3ODI3MTE0MzE3Mjk5ODM1YmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjZjMTJkZjVkMmJhMWY2YTZlMWU3MzNiYWFlNDJkYWFmZWI0N2NjMTg4ZDFiMGJlMCI6ImY1MTAxMzk1NjFiMjkyYTdhMWEwMjkyYjdkZTRiMTYyIjoiZjU3YTBjMWRjNjllYWU3NDczMzk0YWQxYjk1MGRjNjEiOiI5ZGRlZDQ3NzlmYWIwYzg4NDNmYTY5MzE0NjgzNzY4OSI6IjJiZTE1ZDJlYTg3MDk5YThjMDQzMGJhOGU5NDUxMjA4YTg5ODM3OWRhMDc1MTY5NTY4MTk2ZjY1NmVhZGJhYjU5NjM3YzFmOTQ5YjQ1MDZhODUxYWUwMzk0ZTEzNTU0MjEzN2JkMGRhZjFjMTg4ZGVjZmNlOTJmNmVmMjM5NmFhNWJiMTI1Y2YzMTg3MjMwYWM4MWMzODY0NjMyZDkyMzQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjBlNmE3ODQzZTI5ZTVmMTZkMmJiYjQwMjFkNjM4OWFlNjkyMjk4YjlmNjJhZDIyZCI6ImYwNDM0ZjExMjY5OWQxMTZjZmE3ZWRkYWQ0ODZjNTQ0IjoiMTQ2ZWIwNDIzNzdjZGY2YTA4MzE1NThhYzE3YWQ5NzEiOiJiMjljMjZkNDgzZmRlODQ4OTI2M2FjY2FmYzEwZDY5OCI6ImVjZjA4MTJhZWJlZTdhNDUyMzM5MDcxZDk5MDY3MDlmZTAwZmNjYmIwZDk0Y2MxMDFiNTA3NjQ2ZjU1NGViZjM2MDI0NTlhNGYyMGI4MjMyNWIwZTA4M2NhMTg5ZjU5ZDY4YzU3NTNkYmU5NDI2NDNmMDdjN2FmY2RlOTlmOWQwY2MyODgzOTIzY2I4MDQ1NmZjZWRjNTM1YmZhN2Q2NDciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiJiNmJjNTdkNjYzYjY3MTg2ODI2NWZkYjc1NmUxNDJmZTZkYTljMDdkZDA4MjFjNmUiOiJmNDNjNTIyM2JmZTcyNmEzMTY0YWZkY2FiZTkzMWViNyI6ImRkZjQxOWQ4ZTA3NGE0ZmYyZGFmMDZhMWFkYWQ0YmVkIjoiZTA4NjJlNzFjNGFjNTIxOTRjZDMyMGQxOTZlNDQ2YTIiOiI0ZjliOWU5YWFiNDkzNTcxMTYwYzczMjg4MWRjMzU4ZjczYTA4NDUwYTE1MjEyNDc3NWU1NTk4ODlhOTI5OGQwMzRjZTE4ODJkZDIxMTZmNDg2M2YxNTI0MzkzZTFhM2YxYWNlYWRjZDljNDE2M2RhYjdjNTQzY2QzNzVjM2Y0YjYxZWQ3MjQ3NWQxODEyMDE3YWM4M2JmMjI4NDZkMTRjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDEyOCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiZjU2NDlmYzE4NGYzM2M2M2NmODQ4NDAxMWZhMjc1NzhjMTY1MWZjZDFhMDc4MGM2IjoiMTUzZjdiMmM5YmM5NDk0YTIwZWQwYmYxNmI5N2ZmZGMiOiI2MTA2ZmQ0ZmUwZTFkODk0ODM3YmE4NjI0Y2ViYmUyZiI6ImZkYzI5ODhlNmIzNTg5Mjk2NDVkMjc1OTRmYTk4ZGY4IjoiNDkxMzBhNzUwYjQ3NThlN2U4ZGVjOGQ4MmJmNjZhZTc3MWQ1MTE4MWMzM2NiYmE5ZDg0MDkzZWU0ZjgzZjZlM2FhZGQzZjQwZmJjYzQ0MWZjZjkwZWQ4M2I4M2M5ZDk2NzFiOTA5MjkwN2EzNjIzMWVjM2UyYzU2Nzc1YzU2OTlmY2UxNmFiYWQxMDRiMjkxZGQxM2Y2N2FkNGUxZmY0ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImZjM2RmYjJmMjliNjQ5MzkxNDM3YWZmNjkyMDc2MDY3MWU0NzBlYmYwOWU4ZmQ2OCI6IjRlN2Q0OGZlNDllY2VmZWJlZDc0OTk3OWI5NjVkOGY2IjoiYWU3NDA1ZGU0OTU3OTQ3ZGMwOWZiMWJlMjIyN2M3NjMiOiIzZmEyMjE1OGQ5YmIxOTQ4YzY0MTAyZjNhYzAwYmZlZCI6ImZmYjQ5YmU4YzcxNGI1MDI1OTVkYTkyNDgyNDhmYjAwOWVhY2UyNGZmNzdkMjk4ZGZlOGIwNWVmZTY0NDEzNTIyMTNiZDIzNmJkZjRiM2RlMzRmZWUzNWIwNTE3NDdmNGU1NDlmNjliYmFkOGM3MjlmM2I1Y2YyZGIyOWEwYWI2YWViNTkwODU3ZTBmNDhiYWJmZjNhOWVhM2U0MDc5YjYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIzMjAxOGFmYjA3YTYxNDFlOWE2YmFkZGE5YjY0N2Y2NTAwOTBiYTM0NzVkMDE0OWIiOiJmYTkyZjY2YmI3YTA2YTE2NTJkNDA4NGMxNWQyZjc3OCI6IjEzYzMyYzQ1NmM3OTljZjA4MDhlMDBjNmRlN2VmY2UwIjoiNjkzNzI4MjEzNzk4ZGRlODQxNzZkYWJmYjUwNDM0ZDUiOiIxMmM5ZDY2ODNlNmViYjUxMzYyNTNkYjYwYjM5YjMyMDNmNTI2MDdlNDRkMTNhZTgwNzA5Y2RmMmZhNjFmZjViZWZiMDgzOGY1NDRlMzllMTM1ODMwYjU3M2FjNWEzMWI3NTM1YzBhMjUwMjM3MDQwMDkwNjY1OGU2YjFlOWEwZjU3NTVmMzYwZDliZmY2OGZhNTVhZDYyOGI0OWE4OTM3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDEyOCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiM2UzMjVkYWFiMzMwMTg1NjA0NGY0MTZmMjUwYjYxNjFlNDQ3ZTYzZDg1Y2EwODRmIjoiYTlkMmE1M2RiZDdlZjRiOTE1MGRkMGVkNGQwMDJlNTYiOiI0ZGU2YzkyMzM0NmQ3YWRjMTZiYmU4OWI5YTE4NGE3OSI6IjllOWUzNDEyNjM1YWVjNmZjZmI5ZDAwZGEwYzQ5ZmIzIjoiNDhhYzg2NDZiMzM0ZTc0MzRlNWY3M2Q2MGE4ZjY3NDFlNDcyYmFhYmU1MjUyNTdiNzgxNTFjMjA4NzJmMzMxYzE2OWFiZTI1ZmFmODAwOTkxZjNkMGE0NWM2NWU3MTI2MWJlMGM4ZTE0YTFhOGE2ZGY5YzZhODA4MzRhNGYyMjM3ZTIzYWJkNzUwZjg0NWNjYmI0YTQ2MjUwYWIxYmI2MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJhNzZlNzdhOTY5YWI5MjY0NTE4MWYwMTU3ODAyNTIzNzQ2YzM0YmYzMjE4Njc2NDEwNTFlZDZiYTM5MzY4MDMzYWRjOTNkNGUiOiIiOiIiOiIiOiI4OTI1OTg3ZGI1NTY2ZTYwNTIwZjA5YmRkZGFiNDg4MjkyYmVkOTJjZDM4NWU1YjZmYzIyM2UxOTE5NjQwYjRlMzRlMzQ1NzUwMzNlNTZjMGE4ZjYwOGJlMjFkM2QyMjFjNjdkMzlhYmVjOThkODEzMTJmM2EyNjUzZDU1ZmZiZjQ0YzMzN2M4MmJlZDMxNGMyMTFiZTIzZWMzOTQzOTliYTM1MWM0Njg3ZGNlNjQ5ZTdjMmExYmE3YjBiNWRhYjEyNTY3MWIxYmNmOTAwOGRhNjVjYWQ2MTJkOTVkZGM5MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI2NWNkYWE1YWIxNDdkMGM3OWZkZDAyYjI0ZmM5NGQwZTQyN2Y1OWVmOWEzMWY0NDc0NThjNmJlZmUwYzJjZGU1YTU4YzZiN2QiOiIiOiIiOiIiOiIwZDE2NDY4MmI1YmI1NTJhNTNhMmE5NDIzNzM2MzlkOTg1NzY0NTBjYTYzMmZhZWJjMTUwNjA2OTFhNDIxOTQ2N2M1YWExMDYwMzRjZDE5YTIxNGEwYTRmMzFkNDAyZTY4YzRjNTY1ZjQ5YjMzYjY4MGQ1MjJlZjI1ZjU0MWU4MjAyYmU3Nzk3MzAzNzZmZGNmNWI3YjU4ZmQ2YWM5NTkyMDRhODhmOTEwMDg2NTFkMmMwMmFkYTgyNTA1ZjkxNGQ0ZDliOWFlYTc5Njc3ODRlNTMyMGUxODVlMTI0ODI3MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI2NTA5OTZmMTQ3NzExMmFmNzYwNDM4NmJlNWFjZTc4MjMyOTA0MzE1ZDk5ZDg3ZDcyYTA2NzA5ZDMzMWE2ZjkzMGI0NDdjZjUiOiIiOiIiOiIiOiJkMzM0MWQ3NzY3Y2ZkOTU2NDBhMTA3YjNhYmFlZDdiNGUxODU1YjM0OGUzYWU1YmNjNTNhMGIwZDQ5ZDRiNDk3NjgzN2VjOGYzNzZmMzgzMjcxMzU1NzhlY2E3ZWU1ODMyMTViZDVjNzllYmY0OTk4MTZmNzlhZmNjNDAyZmYxZTlmZmM0YWQwZjg5Njc2MWM5Y2ZmNzUwNTBiZjg0YmFhMTk0YzM1NTc2M2IxNmI1ZDI2NDhkNDgwYTJiNDhmMjI2NjI2ODVkZTM5YzdjZWU5MGFhMGI2ZWRmODA2MmU0MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI4OTg2NDBjZTQ2NzIwMWE1M2U3NzMxYmRmYjU3Mjk3N2Y3ZWIzZTQ5MDUwYmMxZTM2N2NhNzRiZjBhMjczNzZkMzM5ZDA5ZjQiOiIiOiIiOiIiOiI0ZjVlZWE5MjcwMjNiNGFiYWI1ZDRkOTk0NGU4NGNhMDAxZWUwODFjYmMyMWQ0MDgwZTE1MzRlZTZkMWQ4YTZmNjAzNjEwMjlmZmE5ODNiY2M3OWI1ZDY1ZDRhYWFhYWY5ODk4M2RlMTNkZGRlMzlhNzM5ZjlkOTU4NzhmYjMxZjU3Zjk2MTg0ZTVmMmYzYWRmNjU0YTQ2OGM2MTYyMzdmY2JjNmIyYzE5NGUyNDcxNzhjYjkwMjk0ZjYzMWM0NDlhMDFmMWZlMDljMDI1ODdjNDYwMzA1YmU5ZmM3MWI1YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJmZTQwNWRkNzM5NTZiZjZlYzg3NTUxNWVlYmQ4YzVlY2Q2MDU1MzY0M2RhNzUwOTE0YzgzZGZjOTM2MTFkNTczOTBhZjczMjQiOiIiOiIiOiIiOiJkOGFlMGViODE5MTNhMTkwYzQzOWY4ZmZhNTZjMDYxNTVhNzNmODRiMjA2MDhiMmIyZTllYWIzMDYxMjAyY2ViYWQxOGFiOGIzZWJhODE2NzIxNTJjMWMwMmVmNTczY2Q2ZTg2MjNjMzkyZmFjYjZhODU3NDI1YzY3OTVjZDc5OTljMWU3ZjU2ZjNmYTlhY2NjYTAxODA3NmUwYmZjMTA2ZDA3NWRmOThmNWZiNjZmMjg5MzMyMTVlOTI3Njc3N2RmYzQ3OWU3MWE4ZDUwNmE2NjE5NzkxOGQ5YjBmN2E4ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJiMDY4OTJmNmY0NTVhZmRkYzhlYjYwYWFlMzViMzVhNjRmNjNiMmFhODVhMmRhZTRlZjQ4OTI2NmY3YmMzNTRmNzJkNjhiNzEiOiIiOiIiOiIiOiJmYzEwYzAzZmMzN2QzYmQ1ZmJhNjU5MWE5N2Y2MzU0YTllZDhiYTJiNjgwNjc0NDQzMjg1MWY0M2EzY2U2NDE4ZTM5Y2NiNDE3Yjg1MzllMzQ5YWNlYTU4OGUyYWJlNWRhMDYxNDdjOTgyNWM2ZTUwYTMxZjg1ODlhNTdjYTNiZmIxMGYwZGE5YzhlODlmZTJlMzcyYjVhZjFjZjk2ZTBmYmVlYzVkOTkyMjg3NzBjNDFhNzZlNTg3ZGE3ZDg3NjRkNWYyMzVmNWQxZDYxODhkODRhZTYxYzUyYzIxNjRmYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI5MTc0ZTE3NGU5ZTAzMWY2MmIyZTE5YWU1YzBiZWYyMmVlZDdkNTU5OGU2ZTczNTA0NzU5YTJjMTViMDVjMjQ3M2E3MjFkMjYiOiIiOiIiOiIiOiIxOTYyZjJkNDczYjMxYTI1NzZkYmQ3ODAyMmY0ZWViOTc0NjQxZmEyZTljYjU4MmYwM2FiNzQxOTI5ZjUxZjBmNDY2MzEyOWU2OGRkYzI0MmUxYzJjZWFmYWNlYzNkY2NiOTdlMDk1MjdhZmY0NmI5NDhmMGFiY2VhMTQ1MTY5OWRjM2FlNGQzZmI1ZTA0Yzg0MzM3ZTE3YjUwNGFmMmZiNWYxYWE2ZWMwMDMzZGRmMTM4YTE4OGVlMTYyYzQ5NzUyNjU2M2E2N2RhODAxNTI3NWQ4OWYwZTFlOTAyYjJlZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJlYjFkNDViYTBkODk1MWI3YjFkN2NlOTIyYjdkMWY2ZTk0ZGE4YjgyMTk0MDEyNmM5ZGE1YjBiNDM4MjQyNTkzMDc0M2EwNTEiOiIiOiIiOiIiOiIzMDZiMWY3MzNlNmY2OWI2ZjI2YjdiYWE1NDQxYWY0OTY3YTVjYWQ4ZmFhZDE4MDI5NDQwYWE5ODlhZWY2MDI0ZGJmM2JhMDJkZmMyYzY5NGRhZDY0OTZmZjc2MGQ3MmFlNjkxNGE0ZGNkNWUzYTQ0M2Y0YmNiMTRiZjJiNjQ5ODZmMzVjMzI0NDlmMTVlMzA4NGQ0NmZhZGZhMmFlMjEzZGE2YjI2Zjc4N2NlZjg5YjZhMjMwODRhOTI5NjA4YTlmNmFjZDgzMTU4MDhjMjlmOGFlNDM1YTQwMjAyYTAxMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI3OGNkYzE1NjdjYWYyZmY1MjllZjhlMzQ3NWMwZmJiMDlhNDhiNjg3YTU0NGY3Mzk5ZjUwMzk0ODYyMWYyOTY4NmZiMTUyMTYiOiIiOiIiOiIiOiIyMzY3MDY3ZDhlYzE4OWIwODE5ZWRhMzQ2MDI3NjhhMDY5OGI0YjU0NWM3ZDUyMTRmYWQ1OGM5Nzg3Yjg5ODA5Yjk3ZjNhZjVmOTM0OTkwN2QyOTU0ZjhjMGRjY2JkYmU2M2NjMDE5YmRlM2E2ZmFlMTA0OTdhZTU3ZjMzZTkxZWQ1NWI2ZmM0YTgzZmU4YTI0NjM1NTI3OTZkNTEyMGRhODA2NmY3Mjg1YTgzODg5NTg4MTdiMTIxOGUwMDZkN2ZjNjE3ZjQ1M2FkMGY5MjE3OTY2YTA3MzFiYTk5ZjA5MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIyNWY5ZWUyNGVlMjVhZDNkMjlhOTc0ZjhmNTUyYjE3OGNiMjkyYjg0N2E2YmU4MDY5NDIxM2E2YzBiMzNlMjVlMjlmZDNlY2MiOiIiOiIiOiIiOiIzMmZlMjUxYTYxOWQxNjRjMjE3MzY1YjEyYTMxM2E5NDJiNmE5YzNkZjAwNzc1MWE1ZmE5ZjM1NjQxMmQxMTQyYzc4NWMyOTJlM2RjOWQwYjFkNzdlMDgwODkyZTVkMzliOTFjNThmZDE0MjQ1OGM3MTE4MjA2MTkyMGEwNzIxZGI0NTNhMzJmZTdmZmM4YjJjMjBiZjExODk0ZmEzN2Q4ZjBlOTQ2M2VkZDQzYTk3ZjY1MzYyMjk1MTE5YmUwM2Q1ZTA2ZjYxN2ZkZmY2YWNjYWFiOGM0ZGE3MmFjOGY4MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMGI2NDQyMjE3ODhjMjY2YWFlMDBhM2I2M2E4N2YzMmNhOTZhNmMzMmIxMTZjZDM3Y2FhNGY3NWZmNWQ3ZTU2YmUzYjRlMjBmIjoiIjoiIjoiIjoiZGM5MjQ1ZGE3NzUwMmNhZGQxYThhYzRkMWNmNmExOTljOGU1MjlkZWRhMTBjODdhYjZjNjljZWVhNmZkZWYzNmQ0NWY0ZDAzNjAyMWI5M2ZlNWIzNDJjNTJmZTFlNzFkODFlNjE3YmViYzU4ODA0YWYzMTA5YmFiOTNkYmIyZTVjNTQ2ZTEwOGJkMDg5MTcxMDEyOGI1ZThlNGE0ZjAxZGYyMDAzZDAzOGZlYzhjZWY0MjZmYWQ3ZjcyZGQ1ZTA5MWI0ODUwZTliZjQ5MzJkNjBkZWFjYjZlOWVhM2M1ZTYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDAsMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6ImE2Njc3YmFkZmY3MDk2NmEzY2QyZmViYWFkN2RlN2FhNTg0OWJhNzYzNzg5YjIwZDBhMzliNmM1NjkyNjFiODI2Y2RiMTVlOCI6IiI6IiI6IiI6ImUwNDgzOGM5NzBmNWQ3MjA4YTJhNzMxMGRhODkzZDY1MzkxNjY2YTVkYzYyZDllZGU3MWZjMzA4MTZjZmMzZTgwNjRhYzU5Y2M5YWFmMzAyODMzNTYwNzhjODEyNjc2Y2EyMGJlYjA0NGE2ZDc4ZGI2YzVlZjk3MThhODg1NTk2MDdmMjI1MDAyNDUyYzAxNDU5OTQ0NDMzMDEzY2ZmZmVhODRkNmZlNDA0ZmJiYmMyZDY2YmI1MGEyZmEwMWQ4YTVkNmU0ZWE5YjQwMmRjNTI1Njc1MjQ2MWJmNmZjYjdmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIyMzAxZDhjMDUzMzEyZGIwNDg4MmY0Mjg0Y2Y4YjQ3OTY2YzFjOWI4YzQ5ZGU4NDdkMGMxMWYxNGM1ZjcwY2UxOTM0NjU2MmIiOiIiOiIiOiIiOiJiNDYyNDY1MjZiMjhmM2FkN2Y2ZDg3MzJjYTNiZmM0MGYwMDVkOTdhNTE5NjQwYTRjZTcyODQ4NmQ4YmY4MzBkNjYxYmU1YTk3YjExMTEzZTg5MDk2ZDliZjE1Y2JlZjczZWMyOGFjMTNlM2ZiZWFkYzliY2E1MDA5MThiYmU5MmVhMjNlMTMxY2M2MjJkYmZmZTIyNzJkYjE2ZWM1ZDRjYTMwZTliZDk4NmQxNzA5YWUyMmQxMDE4MDUxNGJjZDExYmQ2MjE4ZWExZmJhYmExMDE0NDQ5NDVhMTdhNGM0YiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiNzg2NDRlYTFiMGM0YzU1YzRhZGRlYjQ3NmZjMzQ0NzFlYTJjNDM5MzY5N2FhNGYxNzA3MjYwMTBjNDQzYjhlMWM0YTZiM2VhIjoiIjoiIjoiIjoiZWYxYjQxYmQwM2VlODQ2MGQ1NTc1OWRiNjVhNGM5Nzc1OGY0OGUzYTA5MTI3YmUwNGM3ZWQwOGJiZWU1ZmE1Y2YxMTk5MjlkZjQyYzE4N2UyYTM0N2E4ZGY5OWM1MDJiNjkzYTdhZTQxOTQ2ZjQ5MThkODQ2ODY4ODBhZTI5ZDZkOGZiYmM0ZmNjYzllMjk1ODc2YTI0OWNmYTU5ZWZmZDMzMTk5NGU4NDcxN2I0Yzc2NjM3ZGYzNmJlYjk2MDc2MTg4MGRhYWIzZDQzMzc2MzQxNDM5YWYyY2U4ZTMzY2MiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDAsMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjcxYWNiNzEyMzVlODhlM2FhNmQ4YmJmMjdjY2VmOGVmMjgwNDNlYmU4NjYzZjdiY2Y0OWNiNjQyYjNkOTE1Y2YwM2I5MGU2NSI6IiI6IiI6IiI6IjE0NGFlYjU2YTExY2I2NDhiNWVjN2Q0MGMyODE2ZTM2ODQyNjY5MGRiNTViNTU5ZjU2MzNmODU2Yjc5ZWZlNWY3ODQ5NDQxNDQ3NTY4MjViOGZkN2JmOThiZWI3NThlZmUyYWMxZjY1MGQ1NGZjNDM2YTRiY2Q3ZGZhZjNhNjZjMTkyYTc2MjllZWE4YTM1N2VlZjI0YjExN2E2ZTdkNTc4Nzk3OTgwZWFlZmNmOWE5NjE0NTJjNGMxMzE1MTE5Y2E5NjBhZDA4NzY0ZmU3NmUyNDYyYWUxYTE5MWJhZWNhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiYzVjODljMjZhYzRjYThiMTEwNmJhOTBhOGVmNGQ2ZDY4N2RmZDg4NzQzY2FhNWZiYWZhNDc0NWQ5YzFmODM3MTEyMGIxMGM4IjoiIjoiZDM0ODNhZTVmOWVkOTdlZmQzZjg1MmU0YTZmMjBmMjVjOTQ3YTAzZjM5YTRiNzVjIjoiMmNkNTIzYzU5NThjZGY0MDNjYWE2MWFiZTVjNDczOWNkYjlkNDAxNTJmMGU3NjlhIjoiMWZlZjRlNmFiYzI3NzhkMWMzZTNjZTAwZmRiNWVhZTFlYmViZGQ1Y2ZmMGE3MDg3NjQ0Yzg1NjVkMWU4Yjg3NmIyYzA1MjY0Y2E4MTQ5ODQ2ODg1MWZjN2I5ZTVhMjE2M2EwNmYzNzdkMmVkNzU0YzA5NWFkYzU5ZGMwMTVhNzdlZGQ2OWU0ZWVjYmU0OGQ5ZGMxMjdlZWRmZmY1Y2M3M2FlMzgxMjdhZTNhNTE4ZmU3ZmE1YWJkMWE5YzUzZWVhZjE0NDQyMDg3MzM0MWUyZWZhM2Q4MTQ5M2M2OWIwNGUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI2ODYwZTQ0YmY1ODJkYjk4MThmZmJlNGM2OTlkNDIxODk2NWMyOWY0NjNkN2EwMmZlMWYzNmM4NDQyYjBhNWQxMDNkZWY3YTIiOiIiOiJlOWY1OTgzNTcxMDllMmE1MzJkYzk4MDM4OGI4YTU5OTEyNTYxNjZkNjdjM2JjMDEiOiI1OGViYmY3NDAyYmUwNDE3MjQ3MDFlNWMwMTMyYWJlNjA0YzExYTYyYTlkZTFkMmYiOiI1MmZhZDM0YjI3MTEzYzE0NjU5NWE2NzQwZjUwNWJjMmQzZWRmNjYxODk3NWNiOWM0YTUxNTU3ODhlYWYwOGI5NmQyMzI2MTBkOWI0ZWUwNjI2NGZkOTJmMzE5ZGY1YTUyYjhmOWUzMWIwMTZhNmMyMWQyN2QzMWQ5ZDQyYmJiNzU4OGE3MTQyZjI2ZWNlM2RkZjIxMWM4Y2Y0NTMwOTQ3YWRlZTMwMmFhNzFjMGQ3ZmU5MDYwYzFiMjVmMWMxZjJlMDUzNTk4YTdmYjcyYzRkYjU1ZmIxYjAyMzUyZDYwYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjI3YjlmNzhhZTA3ODIxZjJiNTYyNWM4ZmMzYTAzY2VlYzRmYzgwNjJiZTg2MGMyZGIyMDQwM2RkODhhODc1MWRjYWQ1NjE1OCI6IiI6IjFiNmM4NDhmY2U3MDZhYmQ3MzYxMmRkM2ZkNDIxYzFjN2NlOWY0YzJkMGVjYzY3MCI6IjE0YTQzNjQ1YzFiNmFlMzk0Zjc5NWFmNmNhMmU5MDg0ZTdlNzA3ZjNmMmNlZGQ3YSI6IjMzYzU5MjAxN2FmNTQ1YjNhOWNmMzQxOWNlMWM2MDRlOWM3YzY4N2ViZjY0MThmYmVmNDdlYzk2ZTYxZjE5NTEwNjhlZWM5YjYwMDA1ZDI0NTc0MzEzZjA0ZmZjMTZjMzA4NzJlYzgzZTQxZTI0OGUzZDVjNjk1MTkzMGQ2YTg4Yjg5MzFkNTUwMmQxMTQyY2U1MDY3NmIzYWRmNDg0NTNkMWEwMDgxODk2NThkYjg1MTFkMTlhMDZhYzk3YjRkNWNmYWMxOWI1NGU4ZTZiODk5ZDUwMTcxNWY0MDFlZjg1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiOGQ3Y2Y1YzJlMzYwZWY3NTVjMWU5ZjViN2E0NGExZTI5ZjA5Y2VlN2NhNDRlMTU5MjVmZmU5YTQ3YjJkNTVmZDc3NTBiMzU2IjoiIjoiMGU2OTFjOWE0MzU5MzljNjE1ZjA2ODZlYWU4OGUwOTBiYTVjNGIzZjVlNmUwMGMwIjoiMWUzYTQ1MjI5NTYxN2U1YTllNmY3ODI1NmQyNzgxZmVlYjM4MTI3NTNiNGFhZDlhIjoiYTMwNzU2OWQ4YWRmM2Y3ZTZlZTQ1NjdhNWIyYmQzMzhiYWRiOTIzNGU3YjI3YzkyNDI5ZmZhNzVlNGM1NmMwNTI5ZmRjNmMxNWRmNWQ0N2M0NmUzZDJlZWFkY2YxYjllOTNhNWRkNmNkZTk5YTgyZjA0YjBkOTdmN2EzYmZkMDVjMGUxZDgzNzA5ODcyMjIzMTBhYjE4Yzk4MGNlNDhiMjY3OTM2MWMzZDkwMTFkZDM1NWE5YjA2MzM3YzA1NGVlMzc5MTNkNWY0ZGQzMGQxZmM5NDJjZDczM2EwZmE1ZjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIxYTBkMmM3MzQ5MThjNTM5YzFiMzA2YTQ2NGViNmI1NGY5MmU5NThlODYzNjAzMmFlYzIzYmE4YWU4MTdiZWM0ODM4NDQ2MWYiOiIiOiJiOGFkOWU2MTNhODkxZmQwZGI4OTU3MWZkZGRhNzc4MjczODJlNDA2Y2QzY2RmN2UiOiIxZTE3MmE3MDhhYTRmZmEzNjE4ZmYwZDdiMWY5YmEzNDFmNDgxMTUwNzg1MWRmYjQiOiI2NzRkZjFmMzA5NWQ2Yzg3YmM1NGRkOWIyYWFhMmM3ODZiZDUwZTRkZGMwMjQ5Mzc0NWQ4MjBkYWQ4NTUyMTMxZmIzZTM4OWU5OWIwNzA5NDc4YjY1ZDQyNjhmMmEzYjQ2OGE4NDQ3ZGM1NzJhNmVlMDI0YmU2YmU5YmU5ZDQyOGMxMmNjOTI4OTRkMTVkZDFjOTU5ZDYyMjJkYzllYzMwNDc4YzdhMGI1N2Y1YmQ4YmQ1Mzg2OGI5OGQ3Njc0NzM4YjU0Y2Y3NDEwMGFlMjE1NjkzYmFiYjZkYjNiMzg5MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6Ijk1YTMwYTBjYTc3OWE0MDM4ZWE5MjBjY2NmYTRjZGQ4MTRjYTE3ZDU2MGQ1M2E3NWNmMTcwZjQ3MTI5OTRmOWJjYjJlZmI3NCI6IiI6IjFkYTZjODcyNmJiZmEzYzhiZWU2ZGNmZjZmNzZmMmQ1NWQ2MDUyN2M0ZjBkYjI2YiI6IjU5NWViZDkwM2E1OTZhMWYxMjE3NTA4MDE4NWJkOTRjMjMzNmViOGRkMjlhMzg3ZCI6IjMxN2MxOWNmNGE0NWI4Y2YzZjY0NWRhMDg0YWRhNTRkMWIxZjgxMzc5MTUyNDI0ZmRkYWQyMmE2ZGM5YmQyMjg0MWUwYzRjNWEzNmJmYjc4NzllYWZiZDFhOTM5MTIxOTA1YTkzOGFlMDM0YzdmYzAxYWZiNTY2MDdlMzVmODk1ZjQ2ZjEzZTkxY2U0ZThlNzViNmE4N2ExZTU1NDRlMThlYjE5NGZkNjc1NGIwNjg4NWFjMDVlMzMyYTA1ZWQ0MzZlODg5OTY1ZTQwNWUwZjIwNjliMDRiNDBlYTBmNjM1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiOGFmODkzMDU2MjUxMDIzMWE1OTJhNzI1ODdmYTZhZDdjMjM0ZTEzMzA0Njk2NTkwNzY0MmZiYzc4NWMwYjg2Y2JhODQ0ZjBmIjoiIjoiOWVlN2IyMjEwNjQ5NjY1ODJkYzgzNjQzN2I4MjM4NmY1MjA0YTMwMmE0MTc5MDc5IjoiNDczZDkxN2Y1YjY2ZjBmNmUzZmI0NjcwYmEwOGMyY2JkMmVhNzY1YjQ2YjEwODM4IjoiNWMyZmM5Y2M3MTQ4ZGJlNDBhNjkyYjM2MzY3NzhlYjgwMTg4OTQ5ZDE5OGJiYTNlODM1NTM4NmI3OGI1NGJmYjk2M2Y1ZjJkOTIwMjk4OGRhMjBjY2JmMzM2YTdjNzM3YTY2YzkwMTQ5YjllOGUzMDY0NzcxNTFjNGQ5MTJmN2M2MWU4NzJkZTBkMGU0NzcwMWNiZTc2NTg2NGRlNTM2ZDU5OTk0NmI4YmQ2NWU0ZDg5ZDRlNjFkZWI1M2RlOTk3NGZiYmU2MzQ1MDE4MDBmZWVhMTAwZmVhNTczZTJlNTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIyYjk1NTRlY2Y5NGM3ZDY0N2E0ZTExN2Y0MzMyNmNhYjU0NDY2ZWJhNTZhMDlhNTI3NDFiMjQ0NTA1N2M0OTE5MzVjMDY3ZDIiOiIiOiIwMTQ0YmU2OTc4ZGJhODVhYTY0NWQ3OTNjMTg4MWRjMmRlYjFiZDIxMDgxMWVjOWUiOiIxY2QyNjVmMzgxMjU2ODI3NGI2NDM5NTRjNzA5MjNhNzZkZmNjOWYxMjMzNjAxMTEiOiJmNzQ1OWIwYzIzOTY2ZGMxYTUzZTBjNjQwNmM5ZTc4ZWJlNzI4ZTM0ODQyMjRjZDg4YjZiMmVhNTU0NTIyZTc1ZWI0YTFjOGEzZmRjNjY1NjE0MjY0NjRmNTBiOGQwZmY5NWIyNjY2NzdkOTE3NzZiMzQ0YTgyMGViNGZkN2Q1NTQ2NzgzMDA1NTgwMTFhN2NkODVkMjJlOTJkYzhlYzJjMmZhMTVjNjMzMGJhMTU3YzNlNzE3MjgzMDQ0NDdjMWFkNGQ2NGYzZGE0ZmJmMjZkOTJlMWU3YzU4YTFiMjg5YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjMzNWVkZTg2MDNmY2RlNzhlYTk4NjlkYTJkYmNhYjRhNmU3MmYxYjUzNDM5ZjMwODVkMDZiODU2ZTYyNzQxMWE5Y2UxYzI5NyI6IiI6ImVkZWRjNzNmZTI2ODkzNWMxMDgzMmM0NjM1NDlmODIwNGEyOWNmMGZlMDBhNGQ4NyI6ImVmMWI4YTgwZGQ0OWQyYzI2Mzk5OWRkYzBkNWExZDkyMDVjMWIxYzY2MjM5ZmQ4MCI6IjA1YmZlOTdjMzk4YjFlMzNlZTFjNTQ3YzBlZGI1YjY1NGI3MDYwYjc2NjA0MTk1NDQwZDA2ZGQyZjYxNGEzOThjNmM0M2YxODAzODkzYzRjODg4OGJlZGVjZGY5OTgzNjdjZjk5MjMwMWEyNWYyNGMyNjNmNWQzNmJiZmM2ZmU4YjgzOWNhZDI5M2IzNjE3YzFkMmM2MGE4MTRiZGEwMzU5ZTNmNzE3ZmE4MGZjNzMyNGFmODgyN2Q0MzhjODg2NDI3NTRiMzliMTBkMThjZjViZjQyZjExMTc3YTBiYzZiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiOWIwMjc1ZDg2MTExNzU1M2VjZDNjNGQ3Y2ZlNzYyZjg4ZGYyMmM0YzQxOTBkYWM4ZTBiZTU4NzI4MThlMmRkNzY1MjYxZDU4IjoiIjoiY2ZjMGIwNzA4MmQ1MTQ0MjViMTdjZTNjYjMzNGVjNjJiYzFiM2JlMGJlNThjYTRiIjoiZDNjNzBhYjVmZjdhMzY0YTllNmRjNzUxMzJhYzY3ZTBkMzczZmEyZGYzMDFhZmI1IjoiMDlmYjQxYmNjZWIwMTZlNzU0Nzk1ZTFjY2U1ODJmMGNhZTkxZDdiYjUwMjQ1OTc1ZWI3NTI3NDgxOWUxZTRkY2RmYmM1ZTJmMTNmZDI2YjlhOWY5ZTk0NWNkODA3ZmZlYzRlMjc1NjgxZWE3YmQzM2VhZTEzZWZkOGEwMWVkYmUwMjU2MmU3N2I0NGI2MzEyZjQxNmMzZGQwYmU2NGYyYmFlMGJhNGI5YmIzNmZjM2E0NDg0MWQyMWQ4YjM1NzFjMGVmNjQ0ZDg4Y2YzY2MzYzg1MWIyNTZhMTVmNGQ3MTYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMTk4MWMzZjljYTU4ZmQxMGU4Mzc3YThkMGViM2NmMDIxMDJhYWI2ZjdhMDMzYWYzMTM1NTMzZDlmZDg1MGUyOWVjYjhkYzliIjoiIjoiZjk5NzhiYTQxZGYyMjg5NGFkNWYzODQ5YzFiZGYyMWY3YmJjMDEyOGM3ODJlNzliIjoiYjRkNTdkZTVlMThkMzkzMjczZWU5ZjNlZjk3MzY1OTljNmQ2MzlmNDM3MjM5MjE5IjoiZmVlMjNkYjJmY2M3MTYyNGZiMzlmNTczZTMzYTE0OTBlZmM3MjMwYzI3ZTkyNzgxODgyNTE2MzRmOWMwNDViY2IyNmU3OWVjZTZhMTczNDkxNDc1YWU0NGE5NTdjNDI2OTU3MGY1NDY5MjM0Y2E4YjY4NzNjYzk3M2M4ZDk3MTc4YzU4Y2VjNjU4YTM1MmJhZDBkNGM2MDAxY2FlNTY2NDI1OGRiNTlhZDc2ZWI2MzA0ZDE2NjI2N2VhZmI0NmY0ZGQ1MzZhOTE0ZmE2ZDFhYzU4MzE3ZTdjNTU3ZDQ2NTMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiYzEwZDRlNTIxMzUwZjdjZDE4NTM1NzZkMDNjNGJlY2UzZTU4YzhjNzQwODU5ZTRlMTY5Nzk0OTllYzEzNjVmYzA3MzczNmEzIjoiIjoiNzhiMjQ1NTIwMTUzYmFhY2M2Njg0NmU3YTgzYTJhOTI1Zjg5MmQ0YzJlZTYzYzBmIjoiYzhjYTdhMzNkZTU5OTFkNDRkN2VmN2RhMmQzMzY4Y2MyY2RiOTM4OTVjMzk0ZDQxIjoiZjkyYzE1ZjU4MzM4MDBiMjhkYmEyZDEzNGQ0ZGNmYzQxYWJmNzJmNWE3MDA0Njk1NTFlOGNjYjgzYmRiMDc3MmQxNGQ2YjI2YmE2OTc4MTY5ZTNkZGJlNWYyMTRkNTc5MzBkZmNhZDcxOWJmMTBkMzA2NzQ5MjQ2ZDI2MjRiZWRkNGExOGQzMjdiOGFlNmJlZTY3Y2YwYmZiNWY2NDk4MjRiYmQwNDQwZjA0MjE0NmI5NWE4M2U1ODQ1Y2VkNjlhNTViYTA1NWQ1ZGZjNzE4M2MzYmIyOGQ2MTMxMmQyNzQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiNzYwOGI1NjE3Nzg1OTk1YTFmNzE0NGVlNTIyOWU0ZjljMTM4ZTQxOGJjYzNiNWUwNjFhNDIyZThjZjg3NWY1ODY1MGU5OTZkIjoiIjoiOTYxYzJkMzMwMzllNjBhMjg3MWUxZjViODIwOTdmNmIxY2IwMzgzNmRiYTVmNDQwIjoiYjE4Y2I1MmQzODU4YWM1YmY1OWYyMTZhMjhjMGFkNDlmM2RjODhjNjdiNTg3MGUwIjoiNGIwMzEzYWU4NzNjZTVlYmYwOGFlYzE2MDQxNjQ5MmU0YzRjNzk3YTUwMTcwNjFlYTQyYWVmYTA2ODVhYjE5Yjc0YTdhZjExZjAxOWI5ZmI2MzA3MmI3OTdmN2VhMzM1NGVmZDMyYzRhYmQxZTg2NjQwNWEzMTllZDJmYTEzZmM4MTAxOWQ2MTMyNmU3MGU1MDMxNDFiOWM3N2I0ODc5YTQ1ZTlmMzZmMTAxZGJmZmY0MzU5MTQ3MjgyZWY4MTQ4ODhmZWU4MTY0MGRlZjI1ZjU1MWNlZTQxZDEyNjA5YWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiZmVmN2E0M2ZlYTJmZjFhMGY2MjQwODY5ODVlNTM1Nzc4ZDdhNzNkYmM0N2JjMjNlOWRhOTJlZGQ1ZDJmMjczY2RiYmMwMjUxIjoiIjoiODM2NzMxYTU3NDk3YTY5ZTMxZjhkYjRmNzI5Nzc0YWQ2NWYzMWQ5NjhkYmM1NWE4IjoiYmNjYTk2ZDgwOGJhOThiYjUwZTkwYWZlNThmYzg4ZTk1ZGMxNGMzZTkwYzU2MDA0IjoiNGYyYzY0ZWNkMTQ2Njg5MDY0ZmJmNGZjZmZjZTJhMmFiMzkxMGU3MmVjNGZhZWMyNzdmN2I5ZTllZDUxMDM4MTMxMmIwMWYyMTY1MGUxNzVlYmU5YzQ1YzExZTk3NzI3NmYxM2JlMDE1MjQzYTBjZDE2YTE5MWFiYmFjNjQ2MmJhOTZlNGU0YTExMjBiMjgwODNkYTkzMzQxOWU4YzhmMDMwOTk5MDZlYjFlZTAxMmFlMjkxMTA0YzY1MzBmNTFiNWUzMmU2NjMxY2FiOGVmNWFhZDY4YzAwNDUyNTViYTkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMDAxOTdjNzBiMmYwZDNlOThlNGIzODdlYzQyYTY1YzQxMDZhMTY4OWFiNWRlNjExMDFlZTc2ZjRiNWU1MzBlN2VmZWFmOTY0IjoiIjoiMDMwMTUzMTFjZGRkMDk2MWVjN2E3NGNiODRkODM1YzA1OGE2OWI5NjRmMThhMWMxIjoiNWUwZDk5ZTBlN2M1Nzc2OWE0M2VhNzcxYzQ2N2ZiNWUyZGY2ZDA2ZGFlMDM1ZmQ2IjoiNzJlOGNhNzY2NmU0NDBhYzZhODRhYjZmN2JlN2UwMGE1MzZkNzczMTViMTE5YjQ5ZTU1NDRiZjNlYWQ1NjRiZDA2NzQwZjA5ZjZlMjA1NjQ1NDJlMGQ1OTdhYzE1YTQzYjVmYjVhMDIzOWEzMzYyYmMzYTllZmUxY2UzNThkZGQ5ZDRmMzBiNzJlMTJlZDlkNzgzNDBjNjZiMTk0YmViNGIxMmU5NzMyMTM5MzFiOWNmZDBjY2JkZjU0MGQyYzM2Y2UwNzRlMmJlYWM3YTRkZGFjNTllMDZlNGM3MTc4ZDMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDAsMTkyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJjNWM4OWMyNmFjNGNhOGIxMTA2YmE5MGE4ZWY0ZDZkNjg3ZGZkODg3NDNjYWE1ZmJhZmE0NzQ1ZDljMWY4MzcxMTIwYjEwYzgiOiIiOiJkMzQ4M2FlNWY5ZWQ5N2VmZDNmODUyZTRhNmYyMGYyNWM5NDdhMDNmMzlhNGI3NWMiOiIyY2Q1MjNjNTk1OGNkZjQwM2NhYTYxYWJlNWM0NzM5Y2RiOWQ0MDE1MmYwZTc2OWEiOiIxZmVmNGU2YWJjMjc3OGQxYzNlM2NlMDBmZGI1ZWFlMWViZWJkZDVjZmYwYTcwODc2NDRjODU2NWQxZThiODc2YjJjMDUyNjRjYTgxNDk4NDY4ODUxZmM3YjllNWEyMTYzYTA2ZjM3N2QyZWQ3NTRjMDk1YWRjNTlkYzAxNWE3N2VkZDY5ZTRlZWNiZTQ4ZDlkYzEyN2VlZGZmZjVjYzczYWUzODEyN2FlM2E1MThmZTdmYTVhYmQxYTljNTNlZWFmMTQ0NDIwODczMzQxZTJlZmEzZDgxNDkzYzY5YjA0ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjY4NjBlNDRiZjU4MmRiOTgxOGZmYmU0YzY5OWQ0MjE4OTY1YzI5ZjQ2M2Q3YTAyZmUxZjM2Yzg0NDJiMGE1ZDEwM2RlZjdhMiI6IiI6ImU5ZjU5ODM1NzEwOWUyYTUzMmRjOTgwMzg4YjhhNTk5MTI1NjE2NmQ2N2MzYmMwMSI6IjU4ZWJiZjc0MDJiZTA0MTcyNDcwMWU1YzAxMzJhYmU2MDRjMTFhNjJhOWRlMWQyZiI6IjUyZmFkMzRiMjcxMTNjMTQ2NTk1YTY3NDBmNTA1YmMyZDNlZGY2NjE4OTc1Y2I5YzRhNTE1NTc4OGVhZjA4Yjk2ZDIzMjYxMGQ5YjRlZTA2MjY0ZmQ5MmYzMTlkZjVhNTJiOGY5ZTMxYjAxNmE2YzIxZDI3ZDMxZDlkNDJiYmI3NTg4YTcxNDJmMjZlY2UzZGRmMjExYzhjZjQ1MzA5NDdhZGVlMzAyYWE3MWMwZDdmZTkwNjBjMWIyNWYxYzFmMmUwNTM1OThhN2ZiNzJjNGRiNTVmYjFiMDIzNTJkNjBhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDE5MikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMjdiOWY3OGFlMDc4MjFmMmI1NjI1YzhmYzNhMDNjZWVjNGZjODA2MmJlODYwYzJkYjIwNDAzZGQ4OGE4NzUxZGNhZDU2MTU4IjoiIjoiMWI2Yzg0OGZjZTcwNmFiZDczNjEyZGQzZmQ0MjFjMWM3Y2U5ZjRjMmQwZWNjNjcwIjoiMTRhNDM2NDVjMWI2YWUzOTRmNzk1YWY2Y2EyZTkwODRlN2U3MDdmM2YyY2VkZDdhIjoiMzNjNTkyMDE3YWY1NDViM2E5Y2YzNDE5Y2UxYzYwNGU5YzdjNjg3ZWJmNjQxOGZiZWY0N2VjOTZlNjFmMTk1MTA2OGVlYzliNjAwMDVkMjQ1NzQzMTNmMDRmZmMxNmMzMDg3MmVjODNlNDFlMjQ4ZTNkNWM2OTUxOTMwZDZhODhiODkzMWQ1NTAyZDExNDJjZTUwNjc2YjNhZGY0ODQ1M2QxYTAwODE4OTY1OGRiODUxMWQxOWEwNmFjOTdiNGQ1Y2ZhYzE5YjU0ZThlNmI4OTlkNTAxNzE1ZjQwMWVmODUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDAsMTkyKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI4ZDdjZjVjMmUzNjBlZjc1NWMxZTlmNWI3YTQ0YTFlMjlmMDljZWU3Y2E0NGUxNTkyNWZmZTlhNDdiMmQ1NWZkNzc1MGIzNTYiOiIiOiIwZTY5MWM5YTQzNTkzOWM2MTVmMDY4NmVhZTg4ZTA5MGJhNWM0YjNmNWU2ZTAwYzAiOiIxZTNhNDUyMjk1NjE3ZTVhOWU2Zjc4MjU2ZDI3ODFmZWViMzgxMjc1M2I0YWFkOWEiOiJhMzA3NTY5ZDhhZGYzZjdlNmVlNDU2N2E1YjJiZDMzOGJhZGI5MjM0ZTdiMjdjOTI0MjlmZmE3NWU0YzU2YzA1MjlmZGM2YzE1ZGY1ZDQ3YzQ2ZTNkMmVlYWRjZjFiOWU5M2E1ZGQ2Y2RlOTlhODJmMDRiMGQ5N2Y3YTNiZmQwNWMwZTFkODM3MDk4NzIyMjMxMGFiMThjOTgwY2U0OGIyNjc5MzYxYzNkOTAxMWRkMzU1YTliMDYzMzdjMDU0ZWUzNzkxM2Q1ZjRkZDMwZDFmYzk0MmNkNzMzYTBmYTVmOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjFhMGQyYzczNDkxOGM1MzljMWIzMDZhNDY0ZWI2YjU0ZjkyZTk1OGU4NjM2MDMyYWVjMjNiYThhZTgxN2JlYzQ4Mzg0NDYxZiI6IiI6ImI4YWQ5ZTYxM2E4OTFmZDBkYjg5NTcxZmRkZGE3NzgyNzM4MmU0MDZjZDNjZGY3ZSI6IjFlMTcyYTcwOGFhNGZmYTM2MThmZjBkN2IxZjliYTM0MWY0ODExNTA3ODUxZGZiNCI6IjY3NGRmMWYzMDk1ZDZjODdiYzU0ZGQ5YjJhYWEyYzc4NmJkNTBlNGRkYzAyNDkzNzQ1ZDgyMGRhZDg1NTIxMzFmYjNlMzg5ZTk5YjA3MDk0NzhiNjVkNDI2OGYyYTNiNDY4YTg0NDdkYzU3MmE2ZWUwMjRiZTZiZTliZTlkNDI4YzEyY2M5Mjg5NGQxNWRkMWM5NTlkNjIyMmRjOWVjMzA0NzhjN2EwYjU3ZjViZDhiZDUzODY4Yjk4ZDc2NzQ3MzhiNTRjZjc0MTAwYWUyMTU2OTNiYWJiNmRiM2IzODkwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDE5MikgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiOTVhMzBhMGNhNzc5YTQwMzhlYTkyMGNjY2ZhNGNkZDgxNGNhMTdkNTYwZDUzYTc1Y2YxNzBmNDcxMjk5NGY5YmNiMmVmYjc0IjoiIjoiMWRhNmM4NzI2YmJmYTNjOGJlZTZkY2ZmNmY3NmYyZDU1ZDYwNTI3YzRmMGRiMjZiIjoiNTk1ZWJkOTAzYTU5NmExZjEyMTc1MDgwMTg1YmQ5NGMyMzM2ZWI4ZGQyOWEzODdkIjoiMzE3YzE5Y2Y0YTQ1YjhjZjNmNjQ1ZGEwODRhZGE1NGQxYjFmODEzNzkxNTI0MjRmZGRhZDIyYTZkYzliZDIyODQxZTBjNGM1YTM2YmZiNzg3OWVhZmJkMWE5MzkxMjE5MDVhOTM4YWUwMzRjN2ZjMDFhZmI1NjYwN2UzNWY4OTVmNDZmMTNlOTFjZTRlOGU3NWI2YTg3YTFlNTU0NGUxOGViMTk0ZmQ2NzU0YjA2ODg1YWMwNWUzMzJhMDVlZDQzNmU4ODk5NjVlNDA1ZTBmMjA2OWIwNGI0MGVhMGY2MzUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDAsMTkyKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI4YWY4OTMwNTYyNTEwMjMxYTU5MmE3MjU4N2ZhNmFkN2MyMzRlMTMzMDQ2OTY1OTA3NjQyZmJjNzg1YzBiODZjYmE4NDRmMGYiOiIiOiI5ZWU3YjIyMTA2NDk2NjU4MmRjODM2NDM3YjgyMzg2ZjUyMDRhMzAyYTQxNzkwNzkiOiI0NzNkOTE3ZjViNjZmMGY2ZTNmYjQ2NzBiYTA4YzJjYmQyZWE3NjViNDZiMTA4MzgiOiI1YzJmYzljYzcxNDhkYmU0MGE2OTJiMzYzNjc3OGViODAxODg5NDlkMTk4YmJhM2U4MzU1Mzg2Yjc4YjU0YmZiOTYzZjVmMmQ5MjAyOTg4ZGEyMGNjYmYzMzZhN2M3MzdhNjZjOTAxNDliOWU4ZTMwNjQ3NzE1MWM0ZDkxMmY3YzYxZTg3MmRlMGQwZTQ3NzAxY2JlNzY1ODY0ZGU1MzZkNTk5OTQ2YjhiZDY1ZTRkODlkNGU2MWRlYjUzZGU5OTc0ZmJiZTYzNDUwMTgwMGZlZWExMDBmZWE1NzNlMmU1MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjJiOTU1NGVjZjk0YzdkNjQ3YTRlMTE3ZjQzMzI2Y2FiNTQ0NjZlYmE1NmEwOWE1Mjc0MWIyNDQ1MDU3YzQ5MTkzNWMwNjdkMiI6IiI6IjAxNDRiZTY5NzhkYmE4NWFhNjQ1ZDc5M2MxODgxZGMyZGViMWJkMjEwODExZWM5ZSI6IjFjZDI2NWYzODEyNTY4Mjc0YjY0Mzk1NGM3MDkyM2E3NmRmY2M5ZjEyMzM2MDExMSI6ImY3NDU5YjBjMjM5NjZkYzFhNTNlMGM2NDA2YzllNzhlYmU3MjhlMzQ4NDIyNGNkODhiNmIyZWE1NTQ1MjJlNzVlYjRhMWM4YTNmZGM2NjU2MTQyNjQ2NGY1MGI4ZDBmZjk1YjI2NjY3N2Q5MTc3NmIzNDRhODIwZWI0ZmQ3ZDU1NDY3ODMwMDU1ODAxMWE3Y2Q4NWQyMmU5MmRjOGVjMmMyZmExNWM2MzMwYmExNTdjM2U3MTcyODMwNDQ0N2MxYWQ0ZDY0ZjNkYTRmYmYyNmQ5MmUxZTdjNThhMWIyODljIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDE5MikgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMzM1ZWRlODYwM2ZjZGU3OGVhOTg2OWRhMmRiY2FiNGE2ZTcyZjFiNTM0MzlmMzA4NWQwNmI4NTZlNjI3NDExYTljZTFjMjk3IjoiIjoiZWRlZGM3M2ZlMjY4OTM1YzEwODMyYzQ2MzU0OWY4MjA0YTI5Y2YwZmUwMGE0ZDg3IjoiZWYxYjhhODBkZDQ5ZDJjMjYzOTk5ZGRjMGQ1YTFkOTIwNWMxYjFjNjYyMzlmZDgwIjoiMDViZmU5N2MzOThiMWUzM2VlMWM1NDdjMGVkYjViNjU0YjcwNjBiNzY2MDQxOTU0NDBkMDZkZDJmNjE0YTM5OGM2YzQzZjE4MDM4OTNjNGM4ODg4YmVkZWNkZjk5ODM2N2NmOTkyMzAxYTI1ZjI0YzI2M2Y1ZDM2YmJmYzZmZThiODM5Y2FkMjkzYjM2MTdjMWQyYzYwYTgxNGJkYTAzNTllM2Y3MTdmYTgwZmM3MzI0YWY4ODI3ZDQzOGM4ODY0Mjc1NGIzOWIxMGQxOGNmNWJmNDJmMTExNzdhMGJjNmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDAsMTkyKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI5YjAyNzVkODYxMTE3NTUzZWNkM2M0ZDdjZmU3NjJmODhkZjIyYzRjNDE5MGRhYzhlMGJlNTg3MjgxOGUyZGQ3NjUyNjFkNTgiOiIiOiJjZmMwYjA3MDgyZDUxNDQyNWIxN2NlM2NiMzM0ZWM2MmJjMWIzYmUwYmU1OGNhNGIiOiJkM2M3MGFiNWZmN2EzNjRhOWU2ZGM3NTEzMmFjNjdlMGQzNzNmYTJkZjMwMWFmYjUiOiIwOWZiNDFiY2NlYjAxNmU3NTQ3OTVlMWNjZTU4MmYwY2FlOTFkN2JiNTAyNDU5NzVlYjc1Mjc0ODE5ZTFlNGRjZGZiYzVlMmYxM2ZkMjZiOWE5ZjllOTQ1Y2Q4MDdmZmVjNGUyNzU2ODFlYTdiZDMzZWFlMTNlZmQ4YTAxZWRiZTAyNTYyZTc3YjQ0YjYzMTJmNDE2YzNkZDBiZTY0ZjJiYWUwYmE0YjliYjM2ZmMzYTQ0ODQxZDIxZDhiMzU3MWMwZWY2NDRkODhjZjNjYzNjODUxYjI1NmExNWY0ZDcxNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIxOTgxYzNmOWNhNThmZDEwZTgzNzdhOGQwZWIzY2YwMjEwMmFhYjZmN2EwMzNhZjMxMzU1MzNkOWZkODUwZTI5ZWNiOGRjOWIiOiIiOiJmOTk3OGJhNDFkZjIyODk0YWQ1ZjM4NDljMWJkZjIxZjdiYmMwMTI4Yzc4MmU3OWIiOiJiNGQ1N2RlNWUxOGQzOTMyNzNlZTlmM2VmOTczNjU5OWM2ZDYzOWY0MzcyMzkyMTkiOiJmZWUyM2RiMmZjYzcxNjI0ZmIzOWY1NzNlMzNhMTQ5MGVmYzcyMzBjMjdlOTI3ODE4ODI1MTYzNGY5YzA0NWJjYjI2ZTc5ZWNlNmExNzM0OTE0NzVhZTQ0YTk1N2M0MjY5NTcwZjU0NjkyMzRjYThiNjg3M2NjOTczYzhkOTcxNzhjNThjZWM2NThhMzUyYmFkMGQ0YzYwMDFjYWU1NjY0MjU4ZGI1OWFkNzZlYjYzMDRkMTY2MjY3ZWFmYjQ2ZjRkZDUzNmE5MTRmYTZkMWFjNTgzMTdlN2M1NTdkNDY1MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJjMTBkNGU1MjEzNTBmN2NkMTg1MzU3NmQwM2M0YmVjZTNlNThjOGM3NDA4NTllNGUxNjk3OTQ5OWVjMTM2NWZjMDczNzM2YTMiOiIiOiI3OGIyNDU1MjAxNTNiYWFjYzY2ODQ2ZTdhODNhMmE5MjVmODkyZDRjMmVlNjNjMGYiOiJjOGNhN2EzM2RlNTk5MWQ0NGQ3ZWY3ZGEyZDMzNjhjYzJjZGI5Mzg5NWMzOTRkNDEiOiJmOTJjMTVmNTgzMzgwMGIyOGRiYTJkMTM0ZDRkY2ZjNDFhYmY3MmY1YTcwMDQ2OTU1MWU4Y2NiODNiZGIwNzcyZDE0ZDZiMjZiYTY5NzgxNjllM2RkYmU1ZjIxNGQ1NzkzMGRmY2FkNzE5YmYxMGQzMDY3NDkyNDZkMjYyNGJlZGQ0YTE4ZDMyN2I4YWU2YmVlNjdjZjBiZmI1ZjY0OTgyNGJiZDA0NDBmMDQyMTQ2Yjk1YTgzZTU4NDVjZWQ2OWE1NWJhMDU1ZDVkZmM3MTgzYzNiYjI4ZDYxMzEyZDI3NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI3NjA4YjU2MTc3ODU5OTVhMWY3MTQ0ZWU1MjI5ZTRmOWMxMzhlNDE4YmNjM2I1ZTA2MWE0MjJlOGNmODc1ZjU4NjUwZTk5NmQiOiIiOiI5NjFjMmQzMzAzOWU2MGEyODcxZTFmNWI4MjA5N2Y2YjFjYjAzODM2ZGJhNWY0NDAiOiJiMThjYjUyZDM4NThhYzViZjU5ZjIxNmEyOGMwYWQ0OWYzZGM4OGM2N2I1ODcwZTAiOiI0YjAzMTNhZTg3M2NlNWViZjA4YWVjMTYwNDE2NDkyZTRjNGM3OTdhNTAxNzA2MWVhNDJhZWZhMDY4NWFiMTliNzRhN2FmMTFmMDE5YjlmYjYzMDcyYjc5N2Y3ZWEzMzU0ZWZkMzJjNGFiZDFlODY2NDA1YTMxOWVkMmZhMTNmYzgxMDE5ZDYxMzI2ZTcwZTUwMzE0MWI5Yzc3YjQ4NzlhNDVlOWYzNmYxMDFkYmZmZjQzNTkxNDcyODJlZjgxNDg4OGZlZTgxNjQwZGVmMjVmNTUxY2VlNDFkMTI2MDlhYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJmZWY3YTQzZmVhMmZmMWEwZjYyNDA4Njk4NWU1MzU3NzhkN2E3M2RiYzQ3YmMyM2U5ZGE5MmVkZDVkMmYyNzNjZGJiYzAyNTEiOiIiOiI4MzY3MzFhNTc0OTdhNjllMzFmOGRiNGY3Mjk3NzRhZDY1ZjMxZDk2OGRiYzU1YTgiOiJiY2NhOTZkODA4YmE5OGJiNTBlOTBhZmU1OGZjODhlOTVkYzE0YzNlOTBjNTYwMDQiOiI0ZjJjNjRlY2QxNDY2ODkwNjRmYmY0ZmNmZmNlMmEyYWIzOTEwZTcyZWM0ZmFlYzI3N2Y3YjllOWVkNTEwMzgxMzEyYjAxZjIxNjUwZTE3NWViZTljNDVjMTFlOTc3Mjc2ZjEzYmUwMTUyNDNhMGNkMTZhMTkxYWJiYWM2NDYyYmE5NmU0ZTRhMTEyMGIyODA4M2RhOTMzNDE5ZThjOGYwMzA5OTkwNmViMWVlMDEyYWUyOTExMDRjNjUzMGY1MWI1ZTMyZTY2MzFjYWI4ZWY1YWFkNjhjMDA0NTI1NWJhOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIwMDE5N2M3MGIyZjBkM2U5OGU0YjM4N2VjNDJhNjVjNDEwNmExNjg5YWI1ZGU2MTEwMWVlNzZmNGI1ZTUzMGU3ZWZlYWY5NjQiOiIiOiIwMzAxNTMxMWNkZGQwOTYxZWM3YTc0Y2I4NGQ4MzVjMDU4YTY5Yjk2NGYxOGExYzEiOiI1ZTBkOTllMGU3YzU3NzY5YTQzZWE3NzFjNDY3ZmI1ZTJkZjZkMDZkYWUwMzVmZDYiOiI3MmU4Y2E3NjY2ZTQ0MGFjNmE4NGFiNmY3YmU3ZTAwYTUzNmQ3NzMxNWIxMTliNDllNTU0NGJmM2VhZDU2NGJkMDY3NDBmMDlmNmUyMDU2NDU0MmUwZDU5N2FjMTVhNDNiNWZiNWEwMjM5YTMzNjJiYzNhOWVmZTFjZTM1OGRkZDlkNGYzMGI3MmUxMmVkOWQ3ODM0MGM2NmIxOTRiZWI0YjEyZTk3MzIxMzkzMWI5Y2ZkMGNjYmRmNTQwZDJjMzZjZTA3NGUyYmVhYzdhNGRkYWM1OWUwNmU0YzcxNzhkMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDE5MikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiZTQ1NDcyNjFjOWRkYTZiYWZlOWZkZGY0MzVhODBlYmM5NjM1NGM3YzJjODg0N2M1ZDI2YzZlNzNhOTY3YmZjNGViYWY4NjEzIjoiNDI4NDlkYzhlZWM2MTFlYWE0OTI1MjA2N2ZhNjBkN2Q3MjY3ZDcxMWRjMzViNTc2IjoiODE1ZjUwZmMyMzNmMTU3Zjk2YWQwNjI3YzM1NWJjZTQwN2IyNjlkY2E5MWFmNjYxIjoiNzc1YTFjOWRhNmY1OGQ0ZWI5NWIyNzkzNWVjYzAxZGRlMzFmZjE3Y2UyZTRlNjVkIjoiMjVhZGI3Nzc1MjNhODBhNmRiYjZhYzFmZDA4ZTAyYmZjNGI0Njg2Y2VjNWVmZTNhZTlhYTJkNDQ2OWVhZThjOWMzNjkzZmRjOGUwZmMxMDc3MjBiNzc4OWVmNzMzMWUyM2ZlMzc5OTQxMmVjODY4NTdmZmJiYTUxNWE1YWY0ZDkxMDEzYjJmMTc2Njk0MjFjODIyMDA1YjQ3NDc5NDI3OTBhMTFhMjRjNDk3NGYyN2Q1NGRlNjk3MjdiMGVkNTA3YjZhNDhhOWQ2YzUzZjkzZTJmM2QzM2RmNzNkZDY0M2YiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwxOTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjA2ZDY3NzAwMWQ5YjNjOTdmZGE0ZDA5Nzc4YWVlM2RlMTMxYjQxMjM2OTZiMTA5ZjgxYmI2YjBkN2ZiY2FiM2M1ODQyYmI4MyI6ImY5OTYzOGQyZDQzNjViNjYyY2Q4M2FiNGU2YTdiYmI2MjRlNmM3MmI3YjM4ZTgxYiI6IjIwYjdkNTZmNjIyMmJhZmVlZWVlNTlkYmNhMTkzM2Q4MDg2MjE4ODkxZjNhOWJmZSI6IjlkZTRmMjg0N2ZlMjM5Y2IxYTNkZjRiOGZmNjRjMjVkN2IwODcwZjNjOWViZTNhMyI6ImUxOGZmMTk4MzdjZTIxZTY4OTQ0NjU5MzIxMzExYjg1ODRkZDUxNWVkOGE2YTFmMmIwYWMwNmU2OTAwOWMzZDBjZjA0ODlhZjg3NjIwMWVmYWQ5NjJjZmQxYmE1NGY1NDBiOTQxMzFkNzg4ZDNmZWE3OTdjNGJjMDc5NTkzYmM3OTMyYmFhNzBhYmIxNDVhMzU1NzQxYTk4YzU4NGYwZmEzMjk4YjgzMTBiMDFlMWE2ZGViZjUzNTlkN2QwMmIxYTZjNjYzMTAwYWNiNTY5NzU0NTBiZWMyMGU5MWI3MzZiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMTkyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJhYmQzOGMwNDY1Y2RmZTAxOGYzNmZmYmI3YTBlZTUxZDY3Njc1YWI0ZjBmMWQxZTkzNDE4YmI0Y2RmNjQ5OWEzNzFhZjRkM2EiOiI5YTA3ZDU1NzFkODQxZTNjMWE5ZWIzZmI0OGNkZTNiM2UwODBlMWMyZTBkYjZhNmQiOiJhMzkyZjc5MDIyYWViYmVjMGM4MmI5ODEyOTM2MjdkMTM5ZGZiNTIzMmViNDkwYjQiOiJmNWNlMWY2YjFlNjcxNWM0OWJlYTQyZmY0MzlmZGVjZDliM2I3ZjJlNTc4MTMzY2MiOiI4ODVjNTRhZDI1OTkyZmMzODI2MDQ5OGQ2ZjRkOGM3M2Q2MTU5YWY1ZjdlZmVmMDYxNzRkYTAzYWZjZDgzODRjYjI4NjkwZmQ5ZGVkMWQyNmUyZGZmNzRhZWU0ZGQwYzQ3YTBkOTljNmZjMWVjOGQ4ZmFjY2JkY2Y2ZmRiMTJhNTI4NTY0YWQwZDgxMzFiY2Y1MjIyZDdlNmM2OWM1MmRhMWFjYmEwMWI3MjFjOThhYzVhMzM3MjUxMTFmMTJmNmQ4MTAwMDA5ZDdjYzllZmI3YWQ4ZDdkOTVlYTRlNjIwZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDE5MikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiYjUyNjIwZTU4ZTBiNTJiOGVlZDBkNmE2YzVmNGZmNmMxNDgzYzYxZmM0MWRhY2Y3MmJmNDc1YjM3ZDA2OGQwNjFkMWVkY2VhIjoiZWYwZDIzM2RlMDBkMjQ2MjJiN2Q0ZmY0MjE1YWE3MjA3ODdmZTgwYWFlYjY1ZDdhIjoiODFiNzM1YWNkM2RjYjEzZTY1MjMxYzJkOTgwZmI0MGNhODUwMzcwNTgxZjIzMGQyIjoiYjIzMDJkMDI0ZDkyY2RhZWQ0YjEyZjc5YjBhZWIyMGM5OGIyMzIxNzEwZmVmYWIyIjoiYWU5NDIwNDY3MDE5NmJhZjc0MDc2OGY5N2IzYTA5NTEzNGIzODRhZmVhNjY3ZmQ5MGE3N2ExNmM4YWUzOTBhNzMyZmY0OWEzMDczYTI3ZGIwZjdhMmM4YWQ1ZDdjYjUyN2QzMzRhMzdhYmYwNDcyZjI5MmEyMGYyYTI4ZTY2N2Q3YzllOWY3YjhmYmRkMTc3ZjM2YmY5MmQ2NjIyM2FlZTNmNzEyYjZjOWIwNjRlMDdhYjk2ZjZhNzc2MTNlYTU1MDA4ZmI0ZjhmYmNiMmYxY2NiYjBkYTc1MzE2YzFmYWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwxOTIpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjI1OTJhNWVkODZmZjY0YjliNGMxZmJiODEyMjJkMWJmYmM1M2YzYTYzOTU3MWVjYzM1NjA4NDA1OGI4ODU1MjM3ZGExNWM1MCI6ImE2MjZjNTFlYzk5ZTcyNDMxNDg1ZDJiYTAyN2VkOWNhYmNhZTdiODYxMTZhYmU0ZiI6ImM0MzA4NzY1NTJkMjg3NzY1NzA5MjNjNmI3NGU0MmMzMjEwZjAxMTA0MDA2YmYxMSI6ImZlMmViYzIzOTY5MGE0ZWIxOGEwYjVlNzVkMDg4MzFjYzJlYjA3Yzk4MmM2Mzk3MyI6IjAwNTA0NWFkZTdjYzE1NDY3YjVlYTc4NDY0OWQ5ODA0NTQwYTg0MmZmYmE0ZGI4ZDQ0ZGY0ZjQ0YzY5NDgwYmQ0ZmU5NjViNjQ1YWVkMDlkNjIxOTBkYWViMjY5M2EyMTkyYWVjM2Q3MTQ1M2E4MjE4ZTQ3MDAyMDFhYjkyMmFjMzVkMjQxZDk1MTUwYjQ3Y2M3YTA1MTg5N2JlNGQ5NThmMmRhNWMyZWJiZmNlYjFjNTUwY2I2N2IzMmZmODNjZTRmZDg0NWZkODI2YTBkMjQ2OWI1MDZmNTE1ODc2NWZhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMTkyKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIzNzY3ODVmNWZmOGE4MmNlYjBhYWViMDEwNTMzY2MxMDg5MDU5ZWM1ODNjMzAyYjE0YmM0N2UyY2I4YzI3MTE4MzljZTdmNjgiOiI2ZDM0NWUyNDgzMzllODkzZjc1Njk2YzAzOWFjNDdlNTY3ODY5NmZkNDg5YTM5M2MiOiJiMGYzZmExMTMxYzNmZGQ1YzdmZDJkZTkzOTMxZTQ1YTY2ZmEwMzA0MjJhYzY1ZGIiOiJjNjYzNDFlM2Y5ZmI4MmUzYmE4NWYyMjlmY2I3ZDM0NDU3ZTRhNmJhODM5NmI1NDgiOiJiOTJkMTdlMWJlOTRiMDM4NWE4Y2MzZTE2MTg5ODExZmVmN2IyODRhMWIwYjZiMjUyMGZkZTc5YWY3ODI2Yzc0NWU3NDY0ODZhNzBjZDhkZDk5MzBiMTYzZGE3NWY3ZWVhN2MyMTZlNzU4ZDllZDZjNzQ1ZGNkN2JkZTE5YmI5MzgyYzFmN2MzN2NkMTViNzAzYjg4NGQ3ZDQ1MmMyNTViMjUwNDhhODM2ODQ0YzVmZjI4YWFhY2Y3MzNhNTJjMjg5MDRiMzZlMWI1MTcyOWQ3YWVkODFkNjAxYzA4NzJkZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDE5MikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMmNjMjU1NzU4MmM1YTkwY2QyYWQwYzRhNTU3OGViMGJiYzliZGU0MWIxMjZlNDZkOGU5YzM1NjMzNDFiYTIzODQxNGViNjI4IjoiOWQyZmJiOTE1M2UzZmZlZmFlMDc3MGM3OWRlMTBkYjA2OWE1ZmY5ZjUwZTMxNzg3IjoiMmU1NGUzMjUzOWUyN2VmNzZhYzFlZWFlMmUzMGMyMzg1NjQ3NjUyZTIwOTAzYjM5IjoiMWY0ZTAxMjU1OTA4YzNjODA0OTUyMWY4OTcyYzAxZWRlN2RjNzZjNDI1YzU5NjQwIjoiN2Q2Y2NkZmFiMzNmMzIyODk4YzQ3MGJlMDJkODI1N2UwZTk1MmRkMTBmNDA3YjNhOGVhZWViYTQ3YzU0MWQ5NjhkNzllY2EyOWUxNTU0MWMxNTA1ZmU0ZjE5YTQxNzk3YzljYTIyODBjMDYyNjFmZTlkMGM1OGJhYjY1ZDE2ZjU3OTRiNTc1NjZiODc5NWMzOGM3YjQzZDQ3NjFjOGZkMTA3YmViOTUxNDdhMGZlNjFhZThkYzMxZTI1ZWIyOTU3ZTQ0YzA0NjNjYTdjMWI1ODllYTU4N2YwY2FlMTQyOGMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwxOTIpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6ImU2NzBmODk2MzI2Yjc2MDM0ZTQzY2Q4NWY2ZjZmMTFmZTY1ODJkMzQ3MWE4ZWI4OGQzN2EyMzAyZGUwMTBhYWMwZTU1Njg2MCI6IjVlMjE4MDkxYWJlZTE5NjBlZjgxZjRkNWE4MDQxNWUzODhiZDBjYzc5YmVkNzBjZiI6IjdjZjg0YjlmZjMwZGJkMGY2MDhmYjIxNjQ2ZDdjNWI1NDJmYmE1MGFkYjM4ZDVkZiI6ImMxYzRhYWJlNzYxNmE0Yzk3YTRkYmRhZGIwOGE5YjYzYzZlMTBjZWY4ZDQ2M2ZkOCI6ImQ4ZmJkNTU3ZmNjZjMxODI5YjVlZTExYjA1ZDAzNTNlNzI1YmZmMTVmZGFhYzk0ZDIxY2U5NWQ0MGVmZjU1ZWRkODUyYjI2NGI1MTVlYzYzODRlMmQyOGQwMTRlNDdhMmRmMGQ0ZjU2YTRlYzc5MzA5YjA2YWZmYzYyOTE1ZTIzMWQ2MmQwMmJmYzYwMjIwYzcyYjdjYTdiYTU2NzFmODgyODM5Yjc5MWVmNTM0ZTcwN2EwNGU1Mjc0YzEwMTFmNzk0MWZlMTA3NWE1ZDA2YTQ3YWY5ZmIyZjY1YzFmMjExIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMTkyKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIwNTc2YmIyZDRjNjYzYjc4MTE5MzUwOTI1MWUyZjc2YjBhOGJiNzkyZTc5NDQ5NjAwYzJjMTU0ZmViNzBjZjMzY2E5NDI1MDgiOiJhZDE1ZTRmY2U5ZjRkZWE0M2MxMmZmOWY5ZDUwYzk2M2IzMzVhMDEzMzI1NDExNTQiOiIzYzhhNGQ2YWI5NmNlYmY5ZDAyYjU2NjNkY2IwZTBkYjIzNjk5NjIzNDU1Y2Q0YjUiOiI0M2QyZDNhOGQwMjNmYTE3ODVjZTQ3ODFhMTVlYjIwYWQ3ODc2ODVhNDdkYTA4ZjAiOiJhNjhlNjQ4Y2IwN2RhMmViNzk1YThjODk4Yzg2MzFlNTY1ZjMzYzJmZTljMzVlNjg2ZDZmODVmZWYxNDU0NDZjYjc5YmI2ZDE3YmRjODIyNGJmZTQzNzQ2OGE5NjMwZWQwM2M1MTdjYWYxMjI2YzI3OGFlNTEwYzg2OWQ2N2Q1MGI2YmYxY2IzNzhhMzQwMzUwNDFmMjkwZDhkYmMxMjM2NTBhYjRmYmU1Y2Y2MDc0ZWQwYmE5MGU0NWQ5YThhZTA4NTY2ZWEzZDNhMDBlZTM3NDFjOGVjOGY1NmRjYzc4YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDE5MikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiZjU5N2NlMDViOWE1YjFjZjM4NDdiYmQ0MTcxZTUwODUzODRjYzI1NmY3N2FjNjE1NzNiNDM1NzI2Y2JkNTM4YjkzZGU5ZjU1IjoiNTczY2Y4NTlmOGZlYTA1ZjE2YzZkMDNjYjRlNTI0YjkxZTkxN2YzOWVlZWIxZDY4IjoiMmE4NDI0NTQ4NzBjM2Y3OTM2ZjgwMzZiNDUzZDIxOTU1N2NhMzQxZjI2MWQyNTE5IjoiN2FmZDhjYzI2OTg5OWFjZDg4ZjVjNTVhZjI5ZmIwYzRjZTY3OGEwZDhlYmY5MjRmIjoiODE2MmMxNmMxY2UzZDVjNmI3Yzk2ZjAyODFmNDIyMDU2OWE4ODIyNzc5MzU3NTJiODZlN2QzZjU0NjQ2YjI3NmNiNzdlZDk2ZGE3Mzc5OTkxMWZjYTNkMTlkMzRjMWYwYjIxMDY4YTQ3MmFmY2I3NzQxMDQxMmVmZjJhYmQwM2M3NTNhMDA5Y2UwMmIwZTk5NTQ3NzU0NjM2NjAyMDI5NGVmZjBlZjBkYTY2ZjMxYTQxMzMxM2UyNzc0Y2EwNGYwOWE0ZDUwNzZlMGU4NWNhOTdkNWJiNmZhYWM0YzBjMjciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwxOTIpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJkNWI1Mzc0ZmUxNDMwMzVjNGZlYTQxNjY3YmM4YmM3ZDQ2MDAwOTk4Y2M4MmFiMzJhMDA0MGM3MDVlMDFmOWIzNTRlOGYxNmUiOiJlZDhiYjIxOWU2NzUxNTg3NGM1YjllM2Y2YWU2ZTRkZmE5YzQyZDFlNjkyMDRlOGIiOiI3MGYwM2ZlNmU3OGNjMzRlYzE2NzhiMjcwOGZjZDhhZTMzMDAxODNlYTE1Y2NmYzciOiI5YzY0MWQ3ZTczZDFhMmI4MTllMTEzNzQ3ZDc0YTk3OWI3NGM0NDRlZDM2YjczOTEiOiJkNTBkZjhlM2UxN2MwZjVlMTk2NzNiYTIwOTdkMWQwYzRjZjdhOWRlZjc0NjVhNWI5MWFjOGQ0OWFlMWI2YTgyMWZlOWVmZGU4NDFlYzkwNjQ1NTVjMGUyZDZjZGZhNDFmMTA4OWYyMmE1YzI3MDkwYzVhMTM2NjYwZDFhZjU4NmExZTEzMWE4NTNmMTliYzNjOGY0Yzc5YWEwOWUzOWMyZjIyYjQ0NTZjNjY3ZWM5MDdlMmE0MTI0MjE4NjY1ZTdjY2U1MDM5OWFlMWUxOWJhOWMyMzk5ZjQ3MDQ0NDgzOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDE5MikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6Ijc0ZDdjOGM5YjE3MGU1OWU0ZjEyOGM4ZGYxOTU1ODM4ZGY1YzgwNzFhNWU4NTQzOWQ3MWU3ODVjNjhiMzdlMTBlZmIzOWM5YSI6ImJlM2Q1NDIwM2ExMDc4ZDA1MTUxOTEzNzc3NGQ1ZDg1MWU4MWJlMDI2MTU1ZWI3OCI6IjIzZjdiNjc1OGQ3OWRlNTgwZWQzZWI5OTVmYzE3M2RhNzQ5Mzk4MzdhYThkOWViNCI6IjZmMGQ1YTMzM2RkZWEwZDM4MzYyZGYwZGMzZWJhYTJiZTJmZTU4MjVkZGIwY2U4NCI6IjQ0NjJmYzMyMTEwYjI1YjM3OTdjNWNhZmFhZDgzMGU4YTQzNDZkOTI3MGZlZDk4YjMwZjEzNDVhN2E4ZGRlMTliZjUzNjVkNmYzNzg4ZTdmNzE1ZmViMjc2MmFmMjYzODM5YzhjODE4ODkwOGM2MTEyMDc0M2Q5NzdkNzFjNTFmNjMyNGQ4ODdiYmRhMzgwZmMwN2VmZjA5YTMxYzIzMzJlN2IxYWExNjkyYzU5YzMzNzlkYjk1ZmMyMWNmNzExYzAwNGM0ZDM4NWZlMTRmNDhmMmYyYTMxYmNjZTZhYWVjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMTkyKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiZWFmMjdjM2Y2OTI3OWZkNTIzYzBjM2ExZGE1ZmM0ZjAxZWQ2NGMyN2ZmY2ZlM2MxYzU5NjQ4MmY1YmFhZTE0MzRlOGM2ODdjIjoiYjAzODgyOWZjOTVkY2JhODY0NWNlNDBhMzA2NDkxYzg5M2Y0ODEzOWFlMzBhMDcxIjoiZmJiZjdhYmI4Y2MyNjEyZWVlYTZkOTQ2M2VmZDU1YzQ3MjQ1ZTAxNzEzMzMyYmQ2IjoiY2NkN2U4MWY1MjlkZTFmZjRlNjVmYzYzZDM0YzI2MmZmZGU3ZWU0OWU2NzA3MTk3IjoiOTZkZmI3NDQ1MDU3NjMzYjJmMGRlYjY5MTM1ZDEwZDBhMmRjNTNmYWE5Y2RlZDU1ZGRmYjhlZGM2M2Y1NDI0ZjhmZWM3NjI3NTk3YTMwMzI4MTc3ZGRlNzk2M2Y3NmY5ZTU0MTJiNWI0NDAyNTZjNmEzZjBjN2M3ZmEwMmNhNDllMTllYTE3NmFiYWMwMTM2OTZlOWQ1MjlmNjVlNTFkNGE3MzQ4ZTQyZGQyNTRiYmYxOWQ5NjMyZDZjODc1YjhlY2Q3YTQxMzlmMWJmMDIwYTE1OWQyYTMwYWY4ZDY0NWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwxOTIpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIzMTljYmYyYjExYjM3YzgzMWM2NTRiNmNlYzI1NzBkYzZkN2FiZWVhYjE4NTI3MmE1MThlYWVmMzBmYWE1YWNmNWM4YjI1NGQiOiI5ZWZmYTE0MWY3NDY2YjY1OWVhYTUwYzMyYzhlNjgzYzI2NDBmNTQwMjdhYjZhYTUiOiI2M2IzYWNjMjM3NTg4Y2RmNDFjMGQ0YmVmMTZjNDg5MGNmM2Q0NThmY2YxZGU4ZWEiOiI1NzNkNmE3OTYwYWVjY2MzMjgwYThhZWU0ZDcyZTU4N2U5ZDE5NmI3YjI3MGUzMjkiOiI4YTU2ODA4NmZkZDlmMDEyMDZhNWFhZWUzNGQyNTNiYmM5MzM5MTEyZDMxNzA2OTliOWExMzkyZTk3MDYyZDVkMGYxNjI0MDExNGRjMTc4OTI2OTIxN2M1YjRiMjk3NDg5NWIyMDkwMzg5MGY3ZGFjZmVmNDZmYTRhNGQwMjg5MWM3MDQyNWFiM2I0MmY1M2Q3MmY4NTJmYWYzNzEzYWM3YjgyMDdkYzQ1MzI3OWY0ZGYzNDUwOTFiOGJmZWI1NDk4MzA5NWMyZDE5MDM1ODI5M2JhNTA3YmRmZGMzOWIyNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDE5MikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjU2ZjNmNWIwOGRhMTBlYWQwYzk4NmRkMmFlNTU1M2U0YjJlZWViNDdhZDVkMjIxOTdiMTJiODliNGE4NzFjNTFjMGQ4NTU1NCI6Ijk2Yzg2MzBhMWY0MTg3ZmIwNzk0NjAxY2Y1MWU3ZTMzM2U3MTc1NmEwNDIxZmY0MyI6Ijg3NWU1YmM5NTQ4OTE3YTgyYjZkYzk1MjAwZDkyYmY0MjE4ZGJhN2FiMzE2YTVmZSI6IjRkM2Y1Njc4YjAwZDQ3YmI5ZDA5MzY0ODZkZTYwNDA3ZWFmMTI4MmZkYTk5ZjU5NSI6IjkwOTY5OTYxZWY5MjgzYjllNjAwYWVhZDc5ODU0NTVlNjkyZGI4MTcxNjUxODk2NjVmNDk4ZjIxOWIxZTVmMjc3ZTU4NmIyMzc4NTEzMDVkNTIwNTU0OGI1NjVmYWViMDJiYjdiNWY0NzdjODBiYTk0YjA1NjNlMjRkOTMwOWQyOTU3YTY3NTg0ODE0MGY1NjAxZjY5ODQ1OWRiNTg5OWIyMGRkYTY4ZjAwMGNjYjE4ZGNkMzlkZmFlNDk5NTViODQ3OGZkNTBiYjU5ZDc3MjA0NWJlYjMzODYyMmVmYTVhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJjYTg1MTkxMTM0OTM4NGJmZmU4OWRlMWNiZGM0NmU2ODMxZTQ0ZDM0YTRmYjkzNWVlMjg1ZGQxNGI3MWE3NDg4NjU5YmE5NmM2MDFkYzY5ZmM5MDI5NDA4MDVlYzBjYTgiOiIiOiIiOiIiOiJlNTI4ZTlhYmYyZGVjZTU0ZDQ3YzdlNzVlNWZlMzAyMTQ5ZjgxN2VhOWZiNGJlZTZmNDE5OTY5N2QwNGQ1Yjg5ZDU0ZmJiOTc4YTE1YjVjNDQzYzllYzIxMDM2ZDI0NjBiNmY3M2ViYWQwZGMyYWJhNmU2MjRhYmYwNzc0NWJjMTA3Njk0YmI3NTQ3YmIwOTk1ZjcwZGUyNWQ2YjI5ZTJkMzAxMWJiMTlkMjc2NzZjMDcxNjJjOGI1Y2NkZTA2Njg5NjFkZjg2ODAzNDgyY2IzN2VkNmQ1YzBiYjhkNTBjZjFmNTBkNDc2YWEwNDU4YmRhYmE4MDZmNDhiZTlkY2I4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI3OTczNzQ3OWJhNGU3NjQyYTIyMWZjZmQxYjgyMGIxMzRlOWUzNTQwYTM1YmI0OGZmYWUyOWMyMGY1NDE4ZWEzMzU5MzI1OWMwOTJiZWY0MTI5YmMyYzZjOWUxOWYzNDMiOiIiOiIiOiIiOiJjZjVhZDU5ODRmOWU0MzkxN2FhOTA4NzM4MGRhYzQ2ZTQxMGRkYzhhNzczMTg1OWM4NGU5ZDBmMzFiZDQzNjU1YjkyNDE1OTQxM2UyMjkzYjE3NjEwZjIxMWUwOWY3NzBmMTcyYjhmYjY5M2EzNWI4NWQzYjllNWU2M2IxZGMyNTJhYzBlMTE1MDAyZTliZWRmYjRiNWI2ZmQ0M2YzM2I4ZTBlYWZiMmQwNzJlMWE2ZmVlMWYxNTlkZjliNTFlNmM4ZGE3MzdlNjBkNTAzMmRkMzA1NDRlYzUxNTU4YzZmMDgwYmRiZGFiMWRlOGE5MzllOTYxZTA2YjVmMWFjYTM3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJiMzQwOTA3NDQ1Yjk3YThiNTg5MjY0ZGU0YTE3YzBiZWExMWJiNTNhZDcyZjlmMzMyOTdmMDVkMjg3OWQ4OThkNjVjYjI3NzM1ZDgzYzA3MDhmNzI2ODRlYTU4ZjdlZTUiOiIiOiIiOiIiOiI3NTE4M2FhYWYzNTc0YmM2ODAwMzM1MmFkNjU1ZDBlOWNlOWRkMTc1NTI3MjNiNDdmYWIwZTg0ZWY5MDM2OTRhMzI5ODdlZWRkYmRjNDhlZmQyNDE5NWRiZGFjOGE0NmJhMmQ5NzJmNTgwOGYyM2E4NjllNzEzNDMxNDAzNjFmNThiMjQzZTYyNzIyMDg4ZmUxMGE5OGU0MzM3MmQyNTJiMTQ0ZTAwYzg5YzIxNWE3NmExMjE3MzRiZGM0ODU0ODZmNjVjMGIxNmI4OTYzNTI0YTNhNzBlNmYzOGYxNjljMTJmNmNiZGQxNjlkZDQ4ZmU0NDIxYTIzNTg0N2EyM2ZmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI4ZTE1OWY2MDA2MGE3ZDZhN2U2ZmU3YzlmNzY5YzMwYjk4YWNiMTI0MGIyNWU3ZWUzM2YxZGE4MzRjMDg1OGU3YzM5ZDM1MDUyMjAxYmRjY2U0ZTEyN2EwNGYwNGQ2NDQiOiIiOiIiOiIiOiI2MjkxMGE3NzIxMzk2N2VhOTNkNjQ1N2UyNTVhZjUxZmM3OWQ0OTYyOWFmMmZjY2Q4MTg0MGNkZmJiNDkxMDk5MWY1MGE0NzdjYmQyOWVkZDhhNDdjNGZlYzlkMTQxZjUwZGZkZTdjNGQ4ZmNhYjQ3M2VmZjNjYzJlZTllN2NjOTA4NzFmMTgwNzc3YTk3ODQxNTk3YjBkZDdlNzc5ZWZmOTc4NGI5Y2MzMzY4OWZkN2Q0OGMwZGNkMzQxNTE1YWM4ZmVjZjVjNTVhNjMyN2FlYThkNThmOTcyMjBiNzQ2MjM3M2U4NGUzYjc0MTdhNTdlODBjZTk0NmQ2MTIwZGI1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI3NDc1NWYxOTYzMDVmN2ZiNjY4OWIyZmU2ODM1ZGMxZDgxNDg0ZmM0ODFhNmI4MDg3ZjY0OWExOTUyZjRkZjZhYzM2Mzg3YTU0NGE1ZjJiNzgwMDc2NTFhN2I3NGI3NDkiOiIiOiIiOiIiOiJiMjg5NmYzYWY0Mzc1ZGFiNjdlODA2MmQ4MmMxYTAwNWVmNGVkMTE5ZDEzYTlmMTgzNzFiMWI4NzM3NzQ0MTg2ODQ4MDVmZDY1OWJmZDY5OTY0ZjgzYTVjZmUwODY2N2RkYWQ2NzJjYWZkMTZiZWZmZmE5ZmFlZDQ5ODY1MjE0ZjcwMzk1MWI0NDNlNmRjYTIyZWRiNjM2ZjMzMDgzODAxNDRiOTMzM2RlNGJjYjA3MzU3MTBlNGQ5MjY2Nzg2MzQyZmM1M2JhYmU3YmRiZTNjMDFhM2FkZGI3ZjIzYzYzY2UyODM0NzI5ZmFiYmQ0MTliNDdiZWNlYjRhNDYwMjM2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI0YjIyMjcxOGY1NmEzMjYwYjNjMjYyNWE0Y2Y4MDk1MGI3ZDZjMTI1MGYxNzBiZDVjMjhiMTE4YWJkZjIzYjJmN2FlZDUyZDAwMTZmY2FlZjBiNjQ5MmJjNDBiYmUwZTkiOiIiOiIiOiIiOiJhNmRhMDI5YjM2NjVjZDM5ZmQ1MGE1NGM1NTNmOTlmZWQzNjI2ZjQ5MDJmZmUzMjJkYzUxZjA2NzBkZmU4NzQyZWQ0ODQxNWNmMDRiYmFkNWVkM2IyM2IxOGI3ODkyZDE3MGE3ZGNmM2VmODA1MmQ1NzE3Y2IwYzFhOGIzMDEwZDlhOWVhNWRlNzBhZTUzNTYyNDljMGUwOTg5NDYwMzBjNDZkOWQzZDIwOTg2NDUzOTQ0NDM3NGQ4ZmJjYWUwNjhlMWQ2NTQ4ZmE1OWU2NTYyZTZiMmQxYWNiZGE4ZGEwMzE4YzIzNzUyZWJjOWJlMGMxYzFjNWIzY2Y2NmRkOTY3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJiNTEyNjMzZjI3ZmIxODJhMDc2OTE3ZTM5ODg4YmEzZmYzNWQyM2MzNzQyZWI4ZjNjNjM1YTA0NDE2Mzc2OGUwZTJjMzliODQ2MjlhM2RlNWMzMDFkYjU2NDNhZjFjMjEiOiIiOiIiOiIiOiJmYjkzMWQwZDAxOTRhOTdiNDhkNWQ0YzIzMWZkYWQ1YzYxYWVkZjFjM2E1NWFjMjQ5ODNlY2JmMzg0ODdiMWM5MzM5NmM2Yjg2ZmYzOTIwY2ZhOGM3N2UwMTQ2ZGU4MzVlYTU4MDk2NzZlNzAyZGVlNmE3ODEwMGRhOWFhNDNkOGVjMGJmNTcyMGJlZmE3MWY4MjE5MzIwNWFjMmVhNDAzZThkN2UwZTYyNzBiMzY2ZGM0MjAwYmUyNmFmZDlmNjNiN2U3OTI4NmEzNWM2ODhjNTdjYmZmNTVhYzc0N2Q0YzI4YmI4MGEyYjIwOTdiM2I2MmVhNDM5OTUwZDc1ZGZmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJhYWUzZmZjODYwNWE5NzViZWZlZmNlYTBhN2EyODY2NDJiYzNiOTVmYjM3YmQwZWIwNTg1YTRjYWJmOGIzZDFlOTUwNGMzYzBjNDMxMGMxYzA3NDZhMDM2YzkxZDkwMzQiOiIiOiIiOiIiOiIyODE5YmQzYjBkMjE2ZGFkNTlkZGQ2YzM1NGM0NTE4MTUzYTJiMDQzNzRiMDdjNDllNjRhOGU0ZDA1NTU3NWRmYmM5YThmY2RlNjhiZDI1N2ZmMWJhNWM2MDAwNTY0YjQ2ZDZkZDdlY2Q5YzVkNjg0ZmQ3NTdkZjYyZDg1MjExNTc1ZDM1NjJkNzgxNDAwOGFiNWM4YmMwMGU3YjVhNjQ5ZWFlMjMxODY2NWI1NWQ3NjJkZTM2ZWJhMDBjMjkwNmMwZTBlYzg3MDZlZGI0OTNlNTFjYTVlYjRiOWYwMTVkYzkzMmYyNjJmNTJhODZiMTFjNDFlOWE2ZDViM2JkNDMxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJiOTQ3NTIxMGI3OWI4NzE4MGU3NDZkZjcwNGIzY2JjN2JmODQyNDc1MGU0MTZhN2ZiYjVjZTNlZjI1YTgyY2M2MjRiYWYwMzU5OWMxMGRmNmVmNDQwNjVkNzE1YTkzZjciOiIiOiIiOiIiOiJhZTEyZDc4NGY3OTYxODNjNTBkYjVhMWEyODNhYTM1ZWQ5YTJiNjg1ZGFjZWE5N2M1OTZmZjhjMjk0OTA2ZDFiMTMwNWJhMWY4MDI1NGViMDYyYjg3NGE4ZGZmZmEzMzc4YzgwOWFiMjg2OWFhNTFhNGU2YTQ4OTY5MjI4NGEyNTAzODkwOGEzNDczNDIxNzVjMzg0MDExOTNiOGFmYzQ5ODA3N2UxMDUyMmJlYzVjNzA4ODJiN2Y3NjBlYTU5NDY4NzBiZDlmYzcyOTYxZWVkYmU4YmZmNGZkNThjN2NjMTU4OWJiNGYzNjllZDBkM2JmMjZjNWJiYzYyZTBiMmIyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiIyNzgzOGViNDRjZWNjYjRlMzYyMTA3MDNlYmYzOGY2NTliYzM5ZGQzMjc3Y2Q3NmI3YTliY2Q2YmM5NjRiNjI4MzljZmUwMjEwZGIyZTdiMGViNTJhMzg3NDc2ZTdlYTEiOiIiOiIiOiIiOiJlNWU3MmE1MzYwNWQyYWFhNjc4MzJmOTc1MzY0NDVhYjc3NGRkOWJmZjdmMTNhMGQxMWZkMjdiZjY1OTNiZmI1MjMwOWYyZDRmMDlkMTQ3MTkyMTk5ZWE1ODQ1MDMxODFkZTg3MDAyZjRlZTA4NWM3ZGMxOGJmMzJjZTUzMTU2NDdhMzcwOGU2ZjQwNGQ2NTg4YzkyYjJkZGE1OTljMTMxYWEzNTBkMThjNzQ3YjMzZGM4ZWRhMTVjZjQwZTk1MjYzZDEyMzFlMWI0YjY4ZjhkODI5Zjg2MDU0ZDQ5Y2ZkYjFiOGQ5NmFiMDQ2NTExMDU2OWM4NTgzYTQyNGEwOTlhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiZDcxMjllNGY0NzAwOGFkNjBjOWI1ZDA4MWZmNGNhOGViODIxYTZlNGRlYjkxNjA4YmY0ZTI2NDc4MzUzNzNhNWE3Mjg4Mjc3M2Y3OGMyZmM0ODc4Mjk1ODQwYTUzMDEyIjoiIjoiIjoiIjoiMGNiZjQ4NTg1YzVkZTkxODNiN2ZmNzY1NTdmOGZjOWViY2ZkZmRlMDdlNTg4YTg2NDExNTZmNjFiNzk1MjcyNWJiZWU5NTRmODdlOWI5Mzc1MTNiMTZiYmEwZjJlNTIzZDA5NTExNDY1OGUwMGYwZjM3NzIxNzVhY2ZjYjMyNDBhMDFkZTYzMWMxOWM1YTgzNGM5NGNjNThkMDRhNjgzN2YwZDI3ODJmYTUzZDJmOWY2NTE3OGVlOWM4MzcyMjI0OTRjNzk5ZTY0YzYwNDA2MDY5YmQzMTk1NDliODg5ZmEwMGEwMDMyZGQ3YmE1YjFjYzllZGJmNThkZTgyYmZjZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjY3ZmU1ZTMwMGM1MTMzNzE5NzZjODBkZTRiMjBkNDQ3Mzg4OWM5ZjEyMTRiY2U3MThiYzMyZDFkYTNhYjc1MzJlMjU2ZDg4NDk3NzM4YTMzOTIzYWEwMDNhOGQ3ODQ1YyI6IiI6IiI6IiI6ImI0NDY2MGQ2NGVmN2JjZWJjN2ExYWI3MWY4NDA3YTAyMjg1Yzc1OTJkNzU1YWU2NzY2MDU5ZTg5NGY2OTQzNzNlZDljNzc2YzBjZmM4NTk0NDEzZWVmYjQwMGVkNDI3ZTE1OGQ2ODdlMjhkYTNlY2MyMDVlMGY3MzcwZmIwODk2NzZiYmIwZmE1OTFlYzhkOTE2YzNkNWYxOGEzZWI0YTQxNzEyMDcwNWYzZTIxOTgxNTRjZDYwNjQ4ZGJmY2ZjOTAxMjQyZTE1NzExY2FjZDUwMWIyYzI4MjZhYmU4NzBiYTMyZGE3ODVlZDZmMWZkYzY4ZjIwM2QxYWI0M2E2NGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJkZTgxNDI1NDEyNTVjNDZkNjZlZmM2MTczYjBmZTNmZmFmNTkzNmM4OTdhM2NlMmU5ZDU4MzU2MTZhYWZhMmNiZDAxZjkwMDJjNDA3MTI3YmMzMjk3YTU2MWQ4OWI4MWQiOiIiOiIiOiIiOiI2NGQxMDIwOTI5ZDc0NzE2NDQ2ZDhhNGUxNzIwNWQwNzU2YjUyNjQ4Njc4MTFhYTI0ZDBkMGRhODY0NGRiMjVkNWNkZTQ3NDE0M2M1N2QxMjQ4MmY2YmYwZjMxZDEwYWY5ZDFkYTRlYjZkNzAxYmRkNjA1YThkYjc0ZmI0ZTc3Zjc5YWFhOWU0NTBhZmRhNTBiMThkMTlmYWU2OGYwM2RiMWQ3YjVmMTczOGQyZmRjZTlhZDNlZTk0NjFiNThlZTI0MmRhZjdhMWQ3MmM0NWM5MjEzZWNhMzRlMTQ4MTBhOWZjYTUyMDhkNWM1NmQ4MDY2YmFiMTU4NmYxNTEzZGU3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiNGE4ZTBiZDkwYmRiMTJmNzc0OGFkNWYxNDdiMTE1ZDczODViYjFiMDZhZWU3ZDhiNzYxMzZhMjVkNzc5YmNiNzdmM2NjZTRhZjhjOGNlM2M0NWJkZjIzYzZiMTgxYTAwIjoiIjoiIjoiIjoiMzIwYzdjYTRiYmViN2FmOTc3YmMwNTRmNjA0YjUwODZhM2YyMzdhYTU1MDE2NTgxMTJmM2U3YTMzZDIyMzFmNTUzNmQyYzg1YzFkYWQ5ZDliMGJmN2Y2MTljODFiZTQ4NTQ2NjE2MjY4MzljOGMxMGFlN2ZkYzBjMGI1NzFiZTM0YjU4ZDY2ZGE1NTM2NzYxNjdiMDBlN2Q4ZTQ5ZjQxNmFhY2IyOTI2YzZlYjJjNjZlYzk4YmZmYWUyMDg2NGNmOTI0OTZkYjE1ZTNiMDllNTMwYjdiOTY0OGJlOGQzOTE2YjNjMjBhM2E3NzliZWM3ZDY2ZGE2MzM5Njg0OWFhZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjQ1MWVkMDI0YmM0Yjk1ZjEwMjViMTRlYzM2MTZmNWU0MmU4MDgyNDU0MWRjNzk1YTJmMDc1MDBmOTJhZGM2NjUyZjI4ZTZlZThkZTU4NzlkYjFlY2NkNThjOTk0ZTVmMCI6IiI6IiI6IiI6IjNmYjYzNzA4NWFiNzVmNGU5NTY1NWZhYWU5NTg4NTE2NmE1ZmJiNDIzYmIwM2RiZjA1NDNiZTA2M2JjZDQ4Nzk5YzRmMDVkNGU1MjI2MzRkOTI3NWZlMDJlMWVkZDkyMGUyNmQ5YWNjZDQzNzA5Y2IwZDhmNmU1MGFhNTRhNWYzYmRkNjE4YmUyM2NmNzNlZjczNmVkMGVmNzUyNGIwZDE0ZDViZWY4YzhhZWMxY2YxZWQzZTFjMzhhODA4YjM1ZTYxYTQ0MDc4MTI3YzdjYjNhOGZkN2FkZGZhNTBmY2YzZmYzYmM2ZDZiYzM1NWQ1NDM2ZmU5YjcxZWI0NGY3ZmQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiZDNjYzRkMWFjZjNkZGUwYzRiZDIyOTBkMjYyMzM3MDQyZGM2MzI5NDgyMjNkM2EyZWFhYjg3ZGE0NDI5NWZiZDAxMDliMGU3MjlmNDU3MzI4YWExODU2OWE5MjI0OTIxIjoiIjoiM2MzMTE4NDgxODNjOWEyMTJhMjZmMjdmOGM2NjQ3ZTQwMzc1ZTQ2NmEwODU3Y2MzOWM0ZTQ3NTc1ZDUzZjFmNiI6ImZjYjlhYmQxOWNjZmJjY2VmODhjOWMzOWJmYjNkZDdiMWMxMjI2NmM5ODA4OTkyZTMwNWJjM2NmZjU2NmU0ZTQiOiI5YzdiNzU4YjIxMmNkMGZjZWNkNWRhYTQ4OTgyMTcxMmUzY2RlYTQ0NjdiNTYwZWY1ZGRjMjRhYjQ3NzQ5YTFmMWZmZGJiYjExOGY0ZTYyZmNmY2EzMzcxYjhmYmZjNWIwNjQ2YjgzZTA2YmZiYmFiNWZhYzMwZWEwOWVhMmJjNzZmMWVhNTY4YzliZTA0NDRiMmNjOTA1MTdiMjBjYTgyNWYyZDBlY2NkODhlNzE3NTUzOGI4NWQ5MGFiMzkwMTgzY2E2Mzk1NTM1ZDM0NDczYWY2YjVhNWI4OGY1YTU5ZWU3NTYxNTczMzM3ZWE4MTlkYTBkY2MzNTczYTIyOTc0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImY5N2EzY2ZkOTFmYWEwNDZiOWU2MWI5NDkzZDQzNmM0OTMxZjYwNGIyMmYxMDgxNTIxYjM0MTkxNTFlOGZmMDYxMWYzYTdkNDM1OTUzNTdkNTgxMjBiZDFlMmRkOGFlZCI6IiI6IjUxNzI4OWFmZTQ0NGEwZmU1ZWQxYTQxZGJiYjVlYjE3MTUwMDc5YmRkMzFlMjljZjJmZjMwMDM0ZDgyNjhlM2IiOiI4ODAyOGQyOWVmODBiNGU2ZjBmZTEyZjkxZDc0NDlmZTc1MDYyNjgyZTg5YzU3MTQ0MGMwYzliNTJjNDJhNmUwIjoiYzY4NzFjZmYwODI0ZmU1NWVhNzY4OWE1MjIyOTg4NjczMDQ1MGU1ZDM2MmRhNWJmNTkwZGNmOWFjZDY3ZmVkNGNiMzIxMDdkZjVkMDM5NjlhNjZiMWY2NDk0ZmRmNWQ2M2Q1YjRkMGQzNGVhNzM5OWEwN2QwMTE2MTI2ZDBkNTE4YzdjNTViYTQ2ZTEyZjYyZWZjOGZlMjhhNTFjOWQ0MjhlNmQzNzFkNzM5N2FiMzE5ZmM3M2RlZDQ3MjJlNWI0ZjMwMDA0MDMyYTYxMjhkZjVlNzQ5N2VjZjgyY2E3YjBhNTBlODY3ZWY2NzI4YTRmNTA5YThjODU5MDg3MDM5YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiIwZjJmMjNkNjRmNDgxY2FiZWM3YWJiMDFkYjNhYWJmMTI1YzMxNzNhMDQ0YjliZjI2ODQ0MzAwYjY5ZGNhYzhiOWE1YWUxMzIzMmI0M2FhMTljZmU4ZDc5NThiNGI1OTAiOiIiOiJlYzRjN2E2MmFjYWI3MzM4NWY1NjdkYTEwZTg5MmZmMzk1YTA5MjlmOTU5MjMxYTU2MjgxODhjZTBjMjZlODE4IjoiNmI5N2I4YzZiNmJiODkzNWU2NzZjNDEwYzE3Y2FhODA0MmFhMzE0NWY4NTZkMGEzMmI2NDFlNGFlNTI5ODY0OCI6Ijc0ODBhMzYxMDU4YmQ5YWZhM2RiODJjOWQ3NTg2ZTQyMjY5MTAyMDEzZjZlYzVjMjY5YjZkMDVmMTc5ODc4NDc3NDg2ODQ3NjZiNDQ5MThmZDRiNjVlMTY0ODYyMmZjMGUwOTU0MTc4YjAyNzlkZmM5ZmE5OWI2NmM2ZjUzZTUxYzQ4NjAxMzFlOWUwNjQ0Mjg3YTRhZmU0Y2E4ZTQ4MDQxN2UwNzBkYjY4MDA4YTk3YzMzOTdlNGIzMjBiNWQxYTFkN2UxZDE4YTk1Y2ZlZGQ3ZDFlNzQ5OTcwNTJiZjY0OWQxMzJkZWI5ZWM1M2FhZTdkYWZkYWI1NWU2ZGFlOTMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiNTNjNTY2NjBjNzg0ODFiZTljNjMyODRlMDA1ZmNjMTRmYmM3ZmIyNzczMmM5YmYxMzY2ZDAxYTQyNjc2NWEzMWRjN2ExNGQwZWI1YjBiMzUzNGU3MTdhMGIzYzY0NjE0IjoiIjoiM2FhODQ4NzA2ZWNiODc3ZjViZWRmNGZmYzMzMmQ1N2MyMmUwODc0N2E0N2U3NWNmZjZmMGZkMTMxNjg2MWM5NSI6IjlhNDAxYWZhNzM5YjhmNzUyZmRkYWNkMjkxZTBiODU0ZjVlZmY0YTU1YjUxNWUyMGNiMzE5ODUyMTg5ZDM3MjIiOiI1YzBlYjQyMGUwYmY0MWNlOTMyM2U4MTUzMTBlNGU4MzAzY2Q2NzdhOGE4YjAyM2YzMWYwZDc5ZjBjYTE1YWViNjM2MDk5YTM2OWZkMDc0ZDY5ODg5ODY1ZWFjMWI3MmFiM2NiZmViZGI4Y2Y0NjBiMDAwNzI4MDJlMmVjNjQ4YjEzNDlhNTMwM2JlNGNjYWFkZDcyOWYxYTllYTE3NDgyZmQwMjZhYWViOTNmMTYwMmJjMTQwNGI5ODUzYWRkZTQwZDZjMzRiODQ0Y2YxNDhiYzA4ODk0MWVjZmMxNjQyYzhjMGI5Nzc4ZTQ1ZjNiMDdlMDZlMjFlZTJjOWUwMzAwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImY2M2M4MDQ0MDQ5MDJkYjMzNGM1NGJiMjk4ZmMyNzFhMjFkN2FjZDlmNzcwMjc4ZTA4OTc3NTcxMGJmNGZkZDczZTQ1MDA5ZWE5Y2IyYTM2YmExYWE0YmYzOTE3ODIwMCI6IiI6ImQxNjVhMTNkYzhjYzQzZjNmMDk1MmMzZjVkM2RlNDEzNjk1NGQ5ODM2ODNkNGEzZTZkMmRjNGM4OWJmMjM0MjMiOiI3NTEwNmJjODZkMDMzNmRmODUwOTdmNmFmOGU4MGUyZGE1OTA0NmEwM2ZhNjViMDY3MDZiOGJiYzdmZmM2Nzg1IjoiNjM2MzEzOWJiYTMyYzIyYTBmNWNkMjNjYTZkNDM3YjU2NjliN2Q0MzJmNzg2YjhhZjQ0NTQ3MWJlZTBiMmQyNGM5ZDVmMmY5MzcxN2NiZTAwZDFmMDEwY2MzYjljNTE1ZmM5ZjczMzZkNTNkNGQyNmJhNWMwZDc2YTkwMTg2NjYzYzg1ODJlYjczOWM3YjY1NzhhMzMyOGJmNjhkYzJjZWMyY2Q4OWIzYTkwMjAxZjY5OTNhZGNjODU0ZGYwZjVjNjk3NGQwZjU1NzA3NjVhMTVmZTAzZGJjZTI4OTQyZGQyZmQxNmJhMjAyN2U2OGFiYWM4MzkyNjk2OTM0OWFmOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiIyYWFjYTkxNDdkYTY2YzE3NjYxNTcyNmI2OWUzZTg1MWNjMzUzN2Y1ZjI3OWZlNzM0NDIzM2Q4ZTQ0Y2ZjOTlkNGUxNzFmMDgwYWY5YTYwODFiZWU5ZjE4M2FjOWUzNDAiOiIiOiJkNzVhMmE2ZWI2NmMzODMzZTUwZjVlYzNkMmU0MzRjZjc5MTQ0OGQ2MTgwMjZkMGMzNjA4MDZkMTIwZGVkNjY5IjoiYjY0M2I3NGMxNWIzNzYxMmU2NTc3ZWQ3Y2EyYTRjNjdhNzhkNTYwYWY5ZWI1MGE0MTA4ZmNhNzQyZTg3YjhkNiI6IjUwMWRjZGM5NzdmNGJhODU2ZjI0ZWFhNDk2OGIzNzRiZWJiMzE2NmIyODAzMzRjYjUxMDIzMmMzMWViZmZkZTEwZmE0N2I3ODQwZWYzZmUzYjc3NzI1YzIyNzJkM2ExZDQyMTliYWYyM2UwMjkwYzYyMjI3MWVkY2NlZDU4ODM4Y2Y0MjhmMDUxNzQyNWQyZTE5ZTBkOGM4OTM3N2VlY2ZjMzc4MjQ1ZjI4MzIzNmZhZmE0NjZjOTE0Yjk5NjcyY2VhZmFiMzY5ZTg4ODlhMGM4NjZkOGJkNjM5ZGI5ZmI3OTcyNTQyNjJjNmZkNDRjZmE5MDQ1YWQ2MzQwYTYwZWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiYTJlNGNkNDhhNWNmOTE4ZDZmNTU5NDJkOTVmY2I0ZTg0NjVjZGM0Zjc3YjdjNTJiNmZhZTViMTZhMjVjYTMwNmJlZjAzNjcxNjQ0MGRiNmU2ZDMzM2Q5ZDc2MGI3Y2E4IjoiIjoiYmZhNTkxYzcyODdmM2Y5MzExNjhmOTVlMzg4Njk0NDFkMWY5YTExMDM1YWQ4ZWE2MjViYjYxYjllYTE3NTkxYyI6ImMwMGM3MzU0NjNiY2EyMTVhZGMzNzJjYjg5MmIwNWU5MzliZjY2OTU4MzM0MWMwNmQ0ZTMxZDBlNWIzNjNhMzciOiJlN2QxMzZhZjY5OTI2YTU0MjFkNDI2NmVlMDQyMGZkNzI5ZjJhNGY3YzI5NWQzYzk2NmJkZmEwNTI2ODE4MGI1MDhiOGEyODUyZDFiM2EwNmZkMmFiM2UxM2M1NDAwNTEyM2VmMzE5ZjQyZDBjNmQzYTU3NWU2ZTdlMTQ5NmNiMjhhYWNhZGJjZjgzNzQwZmJhOGYzNWZjZWUwNGJiMmVkOGE1MWRiM2QzMzYyYjAxMDk0YTYyZmI1N2UzM2M5OWE0MzJmMjlmY2U2Njc2Y2ZmYmJjYzA1MTA3ZTc5NGU3NWU0NGEwMmQ1ZTZkOWQ3NDhjNWZiZmYwMGEwMTc4ZDY1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6Ijk1YTY3NzcxY2JhNjkwMTFhNzk3NzZlNzEzMTQ1ZDMwOWVkYWU1NmZhZDVmZDZkNDFkODNlYWZmODlkZjZlNWViZTViNTE2NGUzMWVjYzUxYmE2ZjdjM2M1MTk5ZWIzMyI6IiI6IjA2NWY2OTNiMjI5YTdjNGZkMzczY2QxNWIzODA3NTUyZGQ5YmY5OGM1NDg1Y2VmMzYxOTQ5ZDRlN2Q3NzRiNTMiOiI5YWZiNjI0MDZmMGU4MTJjNGYxNTZkNThiMTlhNjU2YzkwNDgxM2MxYjRhNDVhMDAyOWFlN2Y1MDczMWY4MDE0IjoiZjYxYjYxYTZlNzlhNDExODNlOGVkNjY0Nzg5OWQyZGM4NWNkYWY1YzNhYmY1YzdmM2JmMzc2ODU5NDZkYzI4ZjQ5MjNkYzg0MmYyZDQzMjZiZDZjZTBkNTBhODRjYjNiYTg2OWQ3MmEzNmUyNDY5MTBlYmE2NTEyYmEzNmNkN2VkM2E1NDM3YzkyNDViMDBhMzQ0MzA4Yzc5MmI2NjhiNDU4ZDNjM2UxNmRlZTJmYmVjNDE4NjdkYTMxMDg0ZDQ2ZDhlYzE2OGRlMjE0OGVmNjRmYzViNzIwNjlhYmY1YTZhZGExZWFkMmI3MTQ2YmI3OTNmZjFjOWMzNjkwZmE1NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJhNDU5ZTE4MTVjYmNhNDUxNGVjODA5NGQ1YWIyNDE0YTU1N2JhNmZlMTBlNjEzYzM0NTMzOGQwNTIxZTRiZjkwNjIyMjEzOTJlMjU1MmU3NmNkMGQzNmRmNmU2MDY4ZWIiOiIiOiIwYTM2NDJiMDJiMjNiM2VmNjJjNzAxYTYzNDAxMTI0MDIyZjViODk2ZGU4NmRhYjZlNmM3NDUxNDk3YWExZGNjIjoiYzgwNTE0ODY1OTAxMzcxYzQ1YmE5MmQ5Zjk1ZDUwYmI3YzlkZDE3NjhjYjNkZmJjNDViOTY4ZGE5NDk2NWM2ZSI6IjQ2NGU2OTc3YjhhZGFlZjMwN2M5NjIzZTQxYzM1NzAxMzI0OWM5ZmZkNzdmNDA1ZjM5MjVjZWJiNjlmMTUxY2U4ZmJiNmEyNzcxNjQwMDJhZWU3ODU4ZmMyMjRmNjQ5OTA0MmFhMWU2MzIyZGVlZTlhNWQxMzNjMzFkNjQwZTEyYTc0ODdjNzMxYmEwM2FkODY2YTI0Njc1YmFkYjFkNzkyMjBjNDBiZTY4OWY3OWMyYTBiZTkzY2I0ZGFkYTNlMGVhYzRhYjE0MGNiOTE5OThiNmYxMTk1M2U2OGYyMzE5YjA1MGM0MGY3MWMzNGRlOTkwNWFlNDFiMmRlMWMyZjYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiMjUyYzJjYWQ2MTNlMDAyNDc4MTYyODYxODgwOTc5ZWU0ZTMyMzAyNWVlYmI2ZmIyZTBhYTlmMjAwZTI4ZTBhMWQwMDFiYzlhOGYyYzhjMjQyZTQzNjlkZjBjMTkxOTg5IjoiIjoiOWJjZmM2MWNiMmJjMDAwMDM0YmIzZGI5ODBlYjQ3Yzc2ZmI1ZWNkZDQwNTUzZWZmMTEzMzY4ZDYzOWI5NDdmZCI6IjhiMDU2NWM3NjdjMjYxMGVlMDAxNDU4MmU5ZmJlY2I5NmUxNzMwMDViNjBlOTU4MTUwM2E2ZGNhNTYzN2EyNmUiOiJlOTZjMTVmZThhNjA2OTJiMGE3ZDY3MTcxZTAxOTVmZjZlMWM4N2FhYjg0NDIyMWU3MTcwMGQxYmJlZTc1ZmVlYTY5NWY2YTc0MGM5NzYwYmJlMGU4MTJlY2Y0MDYxZDhmMDk1NWJjMDE5NWUxOGM0ZmQxNTE2ZWJjYTUwYmE2YTZkYjg2ODgxNzM3ZGJhYjgzMjE3MDc2NzU0NzliODc2MTFkYjZhZjJjOTdlYTM2MWE1NDg0NTU1ZWFkNDU0ZGVmYjFhNjQzMzVkZTk2NGZjODAzZDQwZjNhNmYwNTc4OTNkMmFmYzI1NzI1NzU0ZjRmMDBhYmM1MTkyMDc0M2RjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI4YmUwY2E2YWRjOGIzODcwYzlkNjlkNjAyMWJjMWYxZDhlYjllNjQ5MDczZDM1ZWU2YzVhYTBiN2U1NmFkOGE1OWQxMjY1ZjdkNTFmZGI2NTM3N2YxZTZlZGQ2YWUwZTQiOiIiOiJkYTg2MTY3YWM5OTdjNDA2YmI3OTc5ZjQyMzk4NmE4NGVjNjYxNGQ2Y2FhN2FmYzEwYWZmMDY5OWE5YjJjZjdmIjoiZTRiYWEzYzU1NTk1MGI1M2UyYmZkYmE0ODBjYjRjOTRiNTkzODFiYWMxZTMzOTQ3ZTBjMjJlODM4YTk1MzRjZiI6IjY0Mzg0ZWNjNGVhNmI0NThlZmMyMjdjYTY5N2VhYzU1MTAwOTIyNjU1MjBjMGEwZDhhMGNjZjllZDNjYTlkNTgwNzQ2NzExODhjNmE3YWQxNmQwYjA1MGNkYzA3MmMxMjVkNzI5OGQzYTMxZDlmMDQ0YTllZTQwZGEwMDg5YTg0ZmVhMjhjYzdmMDVmMTcxNmRiOTUyZmFkMjlhMGU3Nzk2MzVjYjdhOTEyYTk1OWJlNjdiZTJmMGE0MTcwYWFjZTI5ODE4MDJlMmZmNjQ2N2U1YjQ2ZjBmZmJmZjNiNDJiYTU5MzVmZDU1M2M4MjQ4MmFjMjY2YWNmMWNkMjQ3ZDciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImQ0M2E3NWI2YWRmMjZkNjAzMjIyODRjYjEyYWMzODMyNzc5MjQ0MmFhOGYwNDBmNjBhMmYzMzFiMzNhYzRhOGYwNjgyZjhiMDkxZjgxMWFmYWNhYWNhZWM5YjA0ZDI3OSI6IiI6IjdmZDNiOGY1MTI5NDBkYTdkZTVkODAxOTlkOWE3YjQyNjcwYzA0YTk0NTc3NWEzZGJhODY5NTQ2Y2JiOWJjNjUiOiIyNTc1ZGIyMGJjN2FhZmMyYTkwYTVkYWJhYjc2MGRiODUxZDc1NDc3N2JjOWYwNTYxNmFmMTg1OGIyNGZmM2RhIjoiMGRhN2E4ZGM3M2MxNjMwMTRiZjA4NDE5MTNkMzA2NzgwNjQ1NmJiY2E2ZDVkZTkyYjg1NTM0YzY1NDU0NjczMTM2NDhkNzFlZjE3YzkyM2QwOTBkYzkyY2ZmOGQ0ZDFhOWEyYmI2M2UwMDFkYzJlOGFiMWE1OTc5OTliZTNkNmNmNzBmZjYzZmVlOTk4NTgwMTM5NWZiZDRmNDk5MDQzMGM0MjU5ZmNhZTRmYTFmY2Q3M2RjMzE4N2NjYzEwMmQwNGFmN2MwNzUzMjg4NWU1YTIyNmZjNDI4MDljNDhmMjJlZWNmNGY2YWI5OTZhZTRmY2IxNDQ3ODY5NTdkOWY0MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiNjQzNTJmMjM2YWY1ZDMyMDY3YTUyOWE4ZmQwNWJhMDBhMzM4YzlkZTMwNjM3MWEwYjAwYzM2ZTYxMGE0OGQxOGRmOTllZDJjNzYwOGM4NzA2MjRiOTYyYTVkYzY4YWNkIjoiIjoiZGE0MTYzMzVlN2FhZjYwY2YzZDA2ZmI0Mzg3MzVjZTc5NmFhZDA5MDM0Zjg5NjljOGY4YzNmODFlMzJmZWYyNCI6ImEyOGMwN2MyMWEyMjk3MzExYWRmMTcyYzE5ZTgzY2EwYTg3NzMxYmRmZmI4MDU0ODk3OGQyZDFjZDgyY2Y4YTMiOiIxMzJiOWYyNTg2ODcyOWUzODUzZDNjNTFmOTlhM2I1ZmFlNmQ0MjA0YmVhNzA4OTBkYWY2MmUwNDJiNzc2YTUyNmM4ZmI4MzFiODBhNmQ1ZDNmMTUzMjM3ZGYxZmQzOWI2ZmQ5MTM3OTYzZjU1MTZkOWNkZDRlM2Y5MTk1YzQ2ZTk5NzJjMTVkM2VkYzY2MDZlMzM2OGJkZTE1OTQ5NzdmYjg4ZDBjYTZlNmY1ZjNkMDU3Y2NhZGM3ZDdkYWI3N2RmYzQyNjU4YTFlOTcyYWE0NDZiMjBkNDE4Mjg2Mzg2YTUyZGZjMWM3MTRkMmFjNTQ4NzEzMjY4YjBiNzA5NzI5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiIyODJmNGQyZTA1YTJjZDMwZTkwODdmNTYzMzA4OTM4OTQ0OWYwNGJhYzExZGY3MThjOTBiYjM1MWNkMzY1M2E1OTBhN2RhZjNjMGRlOWVhMjg2MDgxZWZjNGE2ODRkZmIiOiIiOiIyNjMwYjRjY2M3MjcxY2MzNzljYjU4MGIwYWFlZGUzZDNhYThjMWM3YmEwMDJjZjc5MWYwNzUyYzNkNzM5MDA3IjoiYzMxZDY5ZGU0OTlmMTAxN2JlNDRlM2Q0ZmE3N2VjZWJjNmE5Yjk5MzQ3NDlmY2YxMzZmMjY3YjI5MTE1ZDJjYyI6ImM4OTkwOTQ1MjBlMDE5N2MzN2I5MWRkNTA3NzhlMjBhNWI5NTBkZWNmYjMwOGQzOWYxZGI3MDk0NDdhZTQ4ZjYxMDFkOWFiZTYzYTc4M2ZiYjgzMGVlYzFkMzU5YTVmNjFhMjAxMzcyODk2NmQzNDkyMTNlZTk2MzgyNjE0YWE0MTM1MDU4YTk2NzYyNzE4MzgxMGM2NjIyYTIxNThjYWJhYmUzYjhhYjk5MTY5Yzg5ZTM2MjEwOGJmNTk1NWI0ZmZjNDc0NDBmODdlNGJhZDBkMzZiYzczOGU3MzdlMDcyZTY0ZDg4NDJlNzYxOWYxYmUwYWYxMTQxZjA1YWZlMmQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjEzYzc1MmI5ZTc0NWNlNzdiYmM3YzBkYmRhOTgyMzEzZDNmZTY2ZjkwM2U4M2ViZDhkYmU0ZmYwYzExMzgwZTlmMWE1MzMwOTVkNjE3NDE2NGJkN2M4MjUzMjQ2NGFlNyI6IiI6IjRmNTNkYjg5YjliYTdmYzAwNzY3YmM3NTFmYjhmM2MxMDNmZTBmNzZhY2Q2ZDVjNzg5MWFiMTViMmI3Y2Y2N2MiOiI1ODJjMmE3ZDM0Njc5MDg4Y2NhNmJkMjg3MjNjOTlhYWMwN2RiNDZjMzMyZGMwMTUzZDE2NzMyNTY5MDNiNDQ2IjoiNjMxMWY0YzBjNGNkMWY4NmJkNDgzNDlhYmI5ZWI5MzBkNGY2M2RmNWU1ZjcyMTdkMWQxYjkxYTcxZDhhNjkzOGIwYWQyYjNlODk3YmQ3ZTNkODcwM2RiMTI1ZmFiMzBlMDM0NjRmYWQ0MWU1ZGRmNWJmOWFlZWI1MTYxYjI0NDQ2OGNmYjI2YTlkOTU2OTMxYTU0MTJjOTdkNjQxODhiMGRhMWJkOTA3ODE5YzY4NmYzOWFmODJlOTFjZmVlZjBjYmZmYjVkMWUyMjllMzgzYmVkMjZkMDY0MTI5ODg2NDA3MDY4MTVhNmU4MjA3OTY4NzZmNDE2NjUzZTQ2NDk2MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI1Y2FjYzY4MTY1YTJlMmVlMjA4MTJmMzVlYzczYTc5ZGJmMzBmZDQ3NTQ3NmFjMGM0NGZjNjE3NGNkYWMyYjU1NmY4ODU0OTZjMWU2M2FmNjIwYmVjZDllNzFlY2I4MjQiOiJlNzJkZDg1OTBkNGVkNTI5NTUxNWMzNWVkNjE5OWU5ZDIxMWI4ZjA2OWIzMDU4Y2FhNjY3MGI5NmVmMTIwOGQwIjoiIjoiIjoiZjEwMTJjZjU0M2Y5NDUzM2RmMjdmZWRmYmY1OGU1Yjc5YTNkYzUxN2E5YzQwMmJkYmZjOWEwYzBmNzIxZjlkNTNmYWY0YWFmZGM0YjhmN2ExYjU4MGZjYWE1MjMzOGQ0YmQ5NWY1ODk2NmEyNDNjZGNkM2Y0NDZlZDRiYzU0NmQ5ZjYwN2IxOTBkZDY5OTU0NDUwZDE2Y2QwZTJkNjQzNzA2N2Q4YjQ0ZDE5YTZhZjdhN2NmYTg3OTRlNWZiZDcyOGU4ZmIyZjJlOGRiNWRkNGZmMWFhMjc1ZjM1ODg2MDk4ZTgwZmY4NDQ4ODYwNjBkYThiMWU3MTM3ODQ2YjIzYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI4ZGYwMTNiNGQxMDM1MjMwNzM5MTdkZGY2YTg2OTc5MzA1OWU5OTQzZmM4NjU0NTQ5ZTdhYjIyZjdjMjlmMTIyZGEyNjI1YWYyZGRkNGFiY2NlM2NmNGZhNDY1OWQ4NGUiOiJiNTcxZTY2ZDdjMzM4YmMwN2I3NmFkMzc1N2JiMmY5NDUyYmY3ZTA3NDM3YWU4NTgxY2U3YmM3YzNhYzY1MWE5IjoiIjoiIjoiYjkxY2JhNGNjODRmYTI1ZGY4NjEwYjgxYjY0MTQwMjc2OGEyMDk3MjM0OTMyZTM3ZDU5MGIxMTU0Y2JkMjNmOTc0NTJlMzEwZTI5MWM0NTE0NjE0N2YwZGEyZDgxNzYxZmU5MGZiYTY0Zjk0NDE5YzBmNjYyYjI4YzFlZDk0ZGE0ODdiYjdlNzNlZWM3OThmYmNmOTgxYjc5MWQxYmU0ZjE3N2E4OTA3YWEzYzQwMTY0M2E1YjYyYjg3Yjg5ZDY2YjNhNjBlNDBkNGE4ZTRlOWQ4MmFmNmQyNzAwZTZmNTM1Y2RiNTFmNzVjMzIxNzI5MTAzNzQxMDMwY2NjM2E1NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI1NjViMmI3NzkzN2JhNDY1MzZiMGY2OTNiM2Q1ZTRhOGEyNDU2M2Y5ZWYxZjY3NmU4YjViMmVmMTc4MjM4MzJmNGVmMzA2NGVjMjlmNWI3Zjk2ODZkNzVhMjNkMTcwZTMiOiIzYjcyMjQzMzIyNmM5ZGJhNzQ1MDg3MjcwYWIzYWYyYzkwOTQyNWJhNmQzOWY1Y2U0NmYwNzI1NjA2ODMxOWQ5IjoiIjoiIjoiZDE0NGVlN2Y4MzYzZDEyODg3MmY4MmMxNTY2M2ZlNjU4NDEzY2Q0MjY1MTA5OGUwYTdjNTFhOTcwZGU3NTI4N2VjOTQzZjkwNjFlOTAyMjgwYTVhOWUxODNhNzgxN2E0NDIyMmQxOThmYmZhYjE4NDg4MTQzMWI0YWRmMzVkM2QxMDE5ZGE1YTkwYjM2OTZiMjM0OWM4ZmJhMTVhNTZkMGY5ZDAxMGE4OGUzZjllZWVkYjY3YTY5YmNhYTcxMjgxYjQxYWZhMTFhZjU3NmI3NjVlNjY4NThmMGViMmU0ZWM0MDgxNjA5ZWM4MWRhODFkZjBhMGViMDY3ODczNDBlYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJmYzM4MzJhOTFiMWRjZGNhYTk0NGYyZDkzY2JjZWI4NWMyNjdjNDkxYjdiNTlkMDE3Y2RlNGFkZDc5YTgzNmI2ZDVlNzZjZTllYWJhZmVkMDZlMzNhOTEzZTM5NWM1ZTAiOiJmZmM1ZjZlZWZkNTFkYTY0YTBmNjdiNWYwY2Y2MGQ3YWI0M2ZjNzgzNmJjYTY1MDAyMmEwY2VlNTdhNDNjMTQ4IjoiIjoiIjoiMGU3MTNjNmNjOWE0ZGJkNDI0OTIwMWQxMmI3YmY1YzY5YzNlMThlYjUwNGJmMzI1MmRiMmY0MzY3NWUxN2Q5OWI2YTkwODQwMGNlYTMwNDAxMWMyZTU0MTY2ZGFlMWYyMDI2MDAwOGVmZTRlMDZhODdlMGNlNTI1Y2E0ODJiY2EyMjNhOTAyYTE0YWRjZjIzNzRhNzM5YTVkZmVhZjE0Y2FkZDcyZWZhNGQ1NWQxNTE1NGM5NzRkOTUyMTUzNWJjYjcwNjU4YzViNmM5NDQwMjBhZmIwNGE4N2IyMjNiNGI4ZTVkODk4MjE3MDRhOTk4NWJiMDEwNDA1YmE4ZjNkNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI4MDA5ZWIyY2I0OWZkZjE2NDAzYmNkZmQ0YTlmOTUyMTkxMDYyYWNiOWNjMTExZWNhMDE5Zjk1N2ZiOWY0NDUxMzU1NTk4ODY2OTUyMzk0YjFlZGRkODVkNTlmODFjOWQiOiIwOWZmMWQ0Yjk3ZDgzYjIyM2QwMDJlMDVmNzU0YmU0ODBkMTNiYTk2OGU1YWFjMzA2ZDcxY2M5ZmM0OWNjMmRkIjoiIjoiIjoiOTU1MDkwM2MyZjAyY2Y3N2M4ZjljOWEzNzA0MWQwMDQwZWUxZTNlZjY1YmExYTFmYmJjZjQ0ZmI3YTIxNzJiZDZiM2FhYWJlODUwMjgxYzNhMTc3ODI3N2JhY2QwOTYxNGRmZWZlY2VjYWM2NDMzOGFlMjRhMWJmMTUwY2JmOWQ5NTQxMTczYTgyZWNiYTA4YWExOWI3NWFiYjc3OWViMTBlZmE0MjU3ZDUyNTJlOGFmY2FjNDE0YmMzYmI1ZDMwMDZiNmYzNmZiOWRhZWE0YzhjMzU5ZWY2Y2RiZWZmMjdjMTA2ODU3MWRkM2M4OWRjODdlZGE5MTkwMDg2ODg4ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJhNmU0YzlhOGJkNmRhMjNiOWMyYjEwYTc3NDhmZDA4YzRmNzgyZmFkYmFjN2VhNTAxYzE3ZWZkYzZmNjA4N2JkYWNkYzQ3ZWRmMWQzYjIxZDBhZWM3NjMxYWJiNmQ3ZDUiOiJjMTZlZTA5MDhhNTg4NmRjY2YzMzJmYmM2MWRlOWVjN2I3OTcyZDJjNGM4M2M0Nzc0MDljZThhMTVjNjIzMjk0IjoiIjoiIjoiYTUyZjkzY2NiMzYzZTJiZGYwOTAzNjIyYzNjYWVkYjdjZmZkMDRiNzI2MDUyYjhkNDU1NzQ0YzcxYjc2ZGVlMWI3MWRiOTg4MGRjM2MyMTg1MDQ4OWNiMjllNDEyZDdkODA4NDljZmE5MTUxYTE1MWRjYmYzMmEzMmI0YTU0Y2FjMDFkMzIwMDIwMGVkNjZhM2E1ZTVjMTMxYTQ5NjU1ZmZiZjFhODgyNGZmN2YyNjU2OTBkZmZiNDA1NGRmNDZhNzA3YjkyMTM5MjRjNjMxYzViY2UzNzk5NDRjODU2YzRmNzg0NmUyODFhYzg5YzY0ZmFkM2E0OTkwOWRmYjkyYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI1OWQ2MzA3NDYwYTliZGQzOTJkZmMwOTA0OTczOTkxZDU4NTY5NjAxMGE3MWU1MmQ1OTBhNTAzOWI0ODQ5ZmE0MzRhMGFhZmI5NTkxN2NiZjhjMzhmYzU1NDgzNzNjMDUiOiIwNDA3YjdjNTdiYzExMzYxNzQ3YzNkNjc1MjZjMzZlMjI4MDI4YTVkMGIxNDVkNjZhYjlhMmZlNGIwNzUwN2EwIjoiIjoiIjoiMjk5YWJhMDY2MTMxNTIxMWIwOWQyODYxODU1ZDBiNGIxMjVhYjI0NjQ5NDYxMzQxYWY2YWJkOTAzZWQ2ZjAyNTIyM2IzMjk5ZjIxMjZmY2FkNDRjNjc1MTY2ZDgwMDYxOWNmNDk1NDA5NDZiMTIxMzg5ODk0MTc5MDQzMjRiMGRkYWQxMjEzMjcyMTFhMjk3ZjExMjU5YzljMzRjZTRjNzBjMzIyYTY1MzY3NWY3OGQzODVlNGUyNDQzZjgwNThkMTQxMTk1ZTE3ZTBiZDFiOWQ0NGJmM2U0OGMzNzZlNmViNDRlZjAyMGIxMWNmMDNlYjE0MWM0NmVjYjQzY2YzZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI5YWUzNTA2YWFkYmM4MzU4Njk2YmExYmExN2U4NzZlMTE1N2I3MDQ4MjM1OTIxNTAzZDM2ZDkyMTFiNDMwMzQyOWFiZjdkNjZhZmVlNWQyYjgxMWNiYTM1OGJiYzUyN2QiOiIwZDY0NWY2MjM4ZTljZWIwMzhlNGFmOTc3MjQyNmNhMTEwYzViZTA1MmY4NjczYjhiNWE2NWM0ZTUzZDJmNTE5IjoiIjoiIjoiNWYwMzJjN2ZlYzYzMjBmZTQyM2I2ZjM4MDg1Y2JhZDU5ZDgyNjA4NWFmZTkxNTI0N2IzZDU0NmM0YzZiMTc0NTU0ZGQ0ODc3YzBkNjcxZGU5NTU0YjUwNTM5M2E0NGU3MWYyMDliNzBmOTkxYWM4YWE2ZTA4Zjk4M2ZmZjJhNGM4MTdiMGNkMjZjMTJiMmM5MjkzNzg1MDY0ODlhNzViMjAyNWIzNThjYjVkMDQwMDgyMWU3ZTI1MmFjNjM3NmNkOTRhNDBjOTExYTdlZDhiNjA4N2UzZGU1ZmEzOWZhNmIzMTRjM2JhMWM1OTNiODY0Y2U0ZmYyODFhOTdjMzI1YiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI5NmFlM2I4Nzc1YjM2ZGEyYTI5Yjg4OWFkODc4OTQxZjQzYzdkNTEyOTVkNDc0NDBjZDBlM2M0OTk5MTkzMTA5MWZlMDIyYTZmYzAyMzdiMDU1ZDRkNmE3MDM2YjE4ZDUiOiIxZTQwZTk3MzYyZDBhODIzZDM5NjRjMjZiODFhYjUzODI1YzU2NDQ2YzUyNjE2ODkwMTE4ODZmMTliMDhlNWMyIjoiIjoiIjoiZTcwN2NkMTRiMDZjZTFlNmRiY2NlYWVkYmYwOGQ4ODg5MWIwM2Y0NGFkNmE3OTdiZDEyZmRlYjU1N2QwMTUxZGY5MzQ2YTAyOGRlYzAwNDg0NGNhNDZhZGVjMzA1MWRhZmIzNDU4OTVmYTlmNDYwNGQ4YTEzYzhmZjY2YWUwOTNmYTYzYzRkOWMwODE2ZDU1YTAwNjZkMzFlODQwNGM4NDFlODdiNmIyYzdiNWFlOWQ3YWZiNjg0MGMyZjdiNDQxYmYyZDNkOGJkM2Y0MDM0OWMxYzAxNDM0N2MxOTc5MjEzYzc2MTAzZTBiZWNlMjZhZDc3MjA2MDFlZmY0MjI3NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiIzM2Y1MTIwMzk2MzM2ZTUxZWUzYjBiNjE5YjVmODczZGIwNWNhNTdjZGE4NmFlYWUyOTY0ZjUxNDgwZDE0OTkyNmYxZjZlOTgwN2JhNTM5M2VkY2YzY2I0ZTRiYjYxMTMiOiIzNzA5NjA1YWY0NGQ5MDE5Njg2N2M5Mjc1MTJhYThiYTMxODM3MDYzMzM3YjQ4Nzk0MDhkOTFhMDVjOGVmYTlmIjoiIjoiIjoiOGI4MjkxMTI2ZGVkOWFjZWYxMjUxNjAyNWM5OWNjY2UyMjVkODQ0MzA4YjU4NGI4NzJjOTAzYzdiYzY0Njc1OTlhMWNlYWQwMDNkYzRjNzBmNmQ1MTlmNWI1MWNlMGRhNTdmNTNkYTkwZGJlOGY2NjZhMWExZGRlMjk3NzI3ZmVlMmQ0NGNlYmQxMzAxZmMxY2E3NTk1NmEzZmNhZTBkMzc0ZTBkZjYwMDliNjY4ZmQyMTYzOGQyYjczM2U2OTAyZDIyZDViZmI0YWYxYjQ1NTk3NWUwOGVlZjBlYmU0ZGM4NzcwNTgwMWU3Nzc2NTgzYzhkZTExNjcyNzI5ZjcyMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiYWQzMDBiNzk5MDA1ZjI5MGZlZTdmOTMwZWViY2UxNThiOThmYjZjYjQ0OTk4N2ZlNDMzZjk1NTQ1NmIzNTMwMDA2YWEyNTE0ZTRiZDExNGVkZjdhYzEwNWNmZWYyNzcyIjoiODdhZGE3MTE0NjVlNDE2OWRhMmE3NGM5MzFhZmI5YjVhNWIxOTBkMDdiN2FmMzQyYWE5OTU3MDQwMWMzZWU4YSI6IiI6IiI6IjgwZDdjNjA2ZmY0OTQxNWEzYTkyYmExZjI5NDMyMzVjMDEzMzljOGY5Y2QwYjA1MTFmYmZkZjNlZjIzYzQyZmZmZjAwODUyNDE5M2ZhYWE0YjdmMmYyZWIwY2ZhMjIxZDlkZjg5YmQzNzNmZTRlMTU4ZWMwNmZhZDNlY2YxZWI0OGI4MjM5YjBiYjgyNmVlNjlkNzczODgzYTNlOGVkYWM2NjI1NDYxMGZmNzBiNjYwOTgzNjg2MGUzOWVhMWYzYmZhMDQ1OTZmZWUxZjJiYWNhNmNlYmIyNDQ3NzRjNmMzZWI0YWYxZjAyODk5ZWJhOGY0MTg4ZjkxNzc2ZGUxNmYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjEzMGIwNDRlMmMxNWFiODkzNzVlNTRiNzJlN2JhYWU2ZDRjYWQ3MzRiMDEzYTA5MGY0ZGYwNTdlNjM0ZjZmZjA2NWZkNmFjNjAyY2Q0NDEwN2Q3MDVkYmMwNjZlNTJiNiI6ImYzNzRhYmExNmYzNGQ1NGFhZTVlNDk0NTA1YjY3ZDM4MThlZjFjMDhlYTI0OTY3YTc2ODc2ZDQzNjEzNzlhZWMiOiIiOiIiOiI1ZDE3OTUzNGZiMGRiYTM1MjY5OTNlZDhlMjdlYzlmOTE1MTgzZDk2NzMzNmJiMjQzNTJjNjdmNGFiNWQ3OTM1ZDMxNjhlNTcwMDhkYTg1MTUxNWVmYmFlY2I2OTkwNGI2ZDg5OWQzYmZhNmU5ODA1NjU5YWVmMjk0MmM0OTAzODc1YjhmY2JjMGQxZDI0ZDFjMDc1ZjBmZjY2N2MxZmMyNDBkOGI0MTBkZmY1ODJmYTcxZmEzMDg3ODk1NWNlMmVkNzg2ZWYzMmVmODUyNzA2ZTYyNDM5YjY5OTIxZjI2ZTg0ZTBmNTRmNjJiOTM4ZjA0OTA1ZjA1ZmNkN2MyMjA0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI3MTY0MzBlOTk5OTY0YjM1NDU5YzE3OTIxZmU1ZjYwZTA5YmQ5YWIyMzRjYjhmNGJhNDkzMmJlYzRhNjBhMWQ1OTUzM2I3MTFlMDYxYjA3ZDUwNWRhNzA3Y2FmYmNhMDMiOiIzNzJhZTYxNmQxYTFmYzQ1YzVhZWNhZDA5MzljNDliOWUwMWM5M2JmYjQwYzgzNWVlYmQ4MzdhZjc0N2YwNzlkIjoiIjoiIjoiYTgwZDZhMWIyZDBjZTAxZmUwZDI2ZTcwZmI3M2RhMjBkNDU4NDFjZjAxYmZiZDUwYjkwZDI3NTFhNDYxMTRjMGU3NThjYjc4N2QyODFhMGE5Y2Y2MmY1YzhjZTJlZTdjYTc0ZmVmZmYzMzBlZmU3NDkyNmFjY2E2ZDZmMDY0NmU0ZTNjMWExZTUyZmNlMWQ1N2I4OGJlZGE0YTU4MTU4OTZmMjVmMzhhNjUyY2MyNDBkZWI1ODI5MjFjOGIxZDAzYTFkYTk2NmRkMDRjMmU3ZWVlMjc0ZGYyY2QxODM3MDk2YjlmN2EwZDg5YTgyNDM0MDc2YmMzMDE3MzIyOWE2MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiNzY3OWYxNTQyOTZlNmQ1ODA4NTQ4MjY1MzkwMDNhODJkMWM1NGUyZTA2MmM2MTlkMDBkYTZjNmFjODIwNzg5YjU1ZDEyOTQxYjA4OTY0NjJlN2Q4ODhlNTMyMmE5OWEzIjoiYmE0ZDFlZDY5NmY1OGVmNjQ1OTZjNzZjZWU4N2NjMWNhODMwNjlhNzllNzk4MmI5YTA2ZjlkNjJmNDIwOWZhZiI6IiI6IiI6IjEwZGM3Y2QyYmI2OGMyYzI4Zjc2ZDFiMDRhZTJhYTI4NzA3MWUwNGMzYjY4OGUxOTg2YjA1Y2MxMjA5ZjY5MWRhYTU1ODY4ZWJiMDViNjMzYzc1YTQwYTMyYjQ5NjYzMTg1ZmU1YmI4ZjkwNjAwODM0N2VmNTE1OTA1MzA5NDhiODc2MTM5MjAwMTQ4MDJlNTg2NGUwNzU4ZjAxMmUxZWFlMzFmMGM0YzAzMWVmODIzYWVjZmIyZjhhNzNhYWE5NDZmYzUwNzAzN2Y5MDUwYjI3N2JkZWFhMDIzMTIzZjlkMjJkYTE2MDZlODJjYjdlNTZkZTM0YmYwMDllY2NiNDYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjhjYTRhOTY0ZTFmZjY4NzUzZGI4Njc1M2QwOTIyMmUwOWI4ODhiNTAwYmU0NmYyYTM4MzBhZmE5MTcyYTFkNmRhNTkzOTRlMGFmNzY0ZTJmMjFjZjc1MWY2MjNmZmE2YyI6ImViODE2NGIzYmY2YzE3NTBhOGRlODUyOGFmMTZjZmZkZjQwMDg1NmQ4MjI2MGFjZDU5NTg4OTRhOThhZmVlZDUiOiIiOiIiOiJmYzU3MDFiNTA4ZjAyNjRmNGZkYjg4NDE0NzY4ZTFhZmIwYTViNDQ1NDAwZGNmZGVkZGQwZWJhNjdiNGZlYThjMDU2ZDc5YTY5ZmQwNTA3NTlmYjNkNjI2YjI5YWRiODQzODMyNmZkNTgzZjFiYTA0NzVjZTc3MDdiZDI5NGFiMDE3NDNkMDc3NjA1ODY2NDI1YjFjYmQwZjZjN2JiYTk3MmIzMGZiZTlmY2UwYTcxOWIwNDRmY2MxMzk0MzU0ODk1YTlmODMwNGEyYjUxMDE5MDk4MDhkZGZkZjY2ZGY2MjM3MTQyYjY1NjY1ODhlNGUxZTg5NDliOTBjMjdmYzFmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiNWQzMjg2YmM1M2EyNThhNTNiYTc4MWUyYzRkY2Q3OWE3OTBlNDNiYmUwZTg5ZmIzZWVkMzkwODZiZTM0MTc0YmM1NDIyMjk0YjczMTg5NTJhY2U3MDU1YWI3NTcwYWJmIjoiMmRiYTA5NGQwMDhlMTUwZDUxYzQxMzViYjJmMDNkY2RlOWNiZjM0NjhhMTI5MDhhMWIwMjVjMTIwYzk4NWI5ZCI6Ijc5M2E3ZWY4ZjZmMDQ4MmJlYWM1NDJiYjc4NWMxMGY4YjdiNDA2YTRkZTkyNjY3YWIxNjhlY2MyY2Y3NTczYzYiOiIyMjM4Y2RiNGUyM2Q2MjlmZTBjMmE4M2RkOGQ1MTQ0Y2UxYTYyMjllZjQxZGFiZTJhOTlmZjcyMmU1MTBiNTMwIjoiZDA0Njc4MTk4YWU3ZTFhZWI0MzViNDUyOTE0NThmZmRlMDg5MTU2MDc0OGI0MzMzMGVhZjg2NmI1YTYzODVlNzRjNmZhNWE1YTQ0YmRiMjg0ZDQzNmU5OGQyNDQwMThkNmFjZWRjZGZhMmU5ZjQ5OWQ4MDg5ZTRkYjg2YWU4OWE2YWIyZDE5Y2I3MDVlMmYwNDhmOTdmYjU5N2YwNDEwNmExZmE2YTE0MTZhZDNkODU5MTE4ZTA3OWEwYzMxOWViOTU2ODZmNGNiY2NlM2I1MTAxYzdhMGIwMTBlZjAyOWM0ZWY2ZDA2Y2RmYWM5N2VmYjk3NzM4OTE2ODhjMzdjZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImMyYTU2NmE5YTE4MTdiMTVjNWMzYjc3ODE3N2FjODdjMjRlNzk3YmUwYTg0NWYxMWMyZmUzOTlkZDM3NzMyZjJjYjE4OTRlYjJiOTdiM2M1NmU2MjgzMjk1MTZmODZlYyI6IjEzY2U0ZDhkZDJkYjk3OTZmOTQxNTZjOGU4ZjA3NjliMGFhMWM4MmMxMzIzYjYxNTM2NjAzYmNhMzdjOWVlMjkiOiI0MTNkZDgzZmU1NjgzNWFiZDQ3OGNiOTY5M2Q2NzYzNTkwMWM0MDIzOWEyNjY0NjJkMzEzM2I4M2U0OWM4MjBiIjoiZDVjNGE3MWY5ZDZkOTVhMWJlZGYwYmQyMjQ3YzI3N2QxZjg0YTRlNTdhNGE4ODI1YjgyYTJkMDk3ZGU2M2VmMSI6ImIzYTM2OThkNzc3Njk5YTBkZDlmYTNmMGE5ZmE1NzgzMmQzY2VmYWM1ZGYyNDQzN2M2ZDczYTBmZTQxMDQwZjE3MjkwMzhhZWYxZTkyNjM1MmVhNTlkZTEyMGJmYjdiMDczMTgzYTM0MTA2ZWZlZDYyNzhmZjhhZDg0NGJhMDQ0ODExNWRmZGRmMzMxOWE4MmRlNmJiMTFkODBiZDg3MWE5YWNkMzVjNzM2NDVlMTI3MGZiOWZlNGZhODhlYzBlNDY1NDA5ZWEwY2JhODA5ZmUyZjQ1ZTA0OTQzYTJlMzk2YmJiN2RkMmY0ZTA3OTUzMDM1MjRjYzljYzVlYTU0YTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJhMzMyODhhOTZmNDFkZDU0Yjk0NWUwNjBjOGJkMGMwOTRmMWUyODI2N2NjMWRjYmJhNTIwNjNjMWE5ZDU0YzRkMzY5MThjOTc3ZTFhNzI3NmEyYmI0NzU1OTFjMzY3YjciOiI2YWE1MjhjOTQwOTYyNjM4ZGMyMjAxNzM4ODUwZmQxZmU2ZjVkMGViOWY2ODdmZjFhZjM5ZDljN2IzNjgzMGQ5IjoiMzdlZTYzM2E2MzVlNDNhZjU5YWJkYjE3NjJjN2VhNDViZmUwNjBlYzFkOTA3N2VjZDJhNDNhNjU4NjczZjNjNyI6IjJlYjk2ZjJlMjhmYTlmNjc0YmIwM2FkZTcwM2I4Zjc5MWVlNTM1NmUyZWU4NWM3ZWQ1YmRhOTYzMjUyNTZjNjEiOiJkYjJmOTE5MzI3NjdlYjg0Njk2MWNlNTMyMWM3MDAzNDMxODcwNTA4ZThjNmY4ZDQzMmNhMWY5Y2VlNWNkYzFhZWQ2ZTBmMTMzZDMxN2ViNjk5MGM0YjNiMGEzNjBjZGZiNWI0M2E2ZTcxMmJkNDZiY2EwNGM0MTQ4NjhmYWIyMmM2YTQ5YzRiODljODEyNjk3YzNhN2ZiZmM4ZGRmMTBjOGFhNWViZjEzYTA5ZmQxMTRlYjJhMDJhMDdmNjk3ODZmM2NlN2ZkMzAyMzFmMjI3NzliYzhkYjEwM2IxM2ZhNTQ2ZGJjNDVhODlhODYyNzUyODExNzI3NjE2ODNkMzg0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiNWYzN2I2ZTQ3ZTE3NzZlNzM1YWRjMDNkNGI5OTk4Nzk0NzdmZjRhMjA2MjMxOTI0MDMzZDk0YzAxMTRmOTExYjdkMTJkNjJjNzljOWY2MjM0YWUwMzE0MTU2OTQ3NDU5IjoiOTJkNGQ5ZmFiNWY4YmY1MTE5ZjI2NjNhOWRmNzMzNGY1MGRjZGU3NGZiOWQ3NzMyZjdlYmE1NjUwMWU2MGQ1NCI6ImM5YWVmMGQ3YTliYTczNDVkMDhiNmQ1YjVjZTU2NDVjNzQ5NWI4Njg1ZTZiOTM4NDZmZmNmNDcwZjVhYmQ0MGQiOiI1MGQ5ZDFmNTA3NGY3ZDlmMWEyNGE5YzYzYWE0N2I5NGRhNWJhNzhkYjFiMGYxOGU0ZDRmZTQ1YzY4NzU4MTNjIjoiMjBkOTQyYmJkN2Q5ODcwMGZhYTM3ZTk0ZDUzYmY3NGYyZDZiZDFkOGM5NWMwYjg4ZDg0MmM0ODU3Nzk3ZDU5ZTdjODc4OGFlZWFjMjk3NDAxMjJmMjA4ZjcwM2JmMzVkYzMyYjAwMzVkYjA2NDgzODRmZWI2YWExN2EzMjc0YmMwOWIyZDJiNzQ2YzVhMDZmZDgyZjQ0NjlmYjg2MTMxYTQ5NDgyY2I3YmU3ZDliNGI5NTA0MjM5NGNmYjE4YjEzZjMzM2VjMGZlNWMyMjdiZjFkOGYzM2VjYjJlNDJlMzU4YjZjM2UwMzRjYjU4NTMzMWJkMWQyN2Y2MzgwMjliOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjIzMTFjNWFmZDY0YzU4NDQ4NGIyNzI5ZTg0ZGI4MGMwYjQwNjNmZTljYTdlZGM4MzM1MDQ4OGQ3ZTY3MjY0YTA2YTZkZmQ5NzVhMGRjN2I3MmRmMWYxMDdjNGIzYjNhNiI6IjJhYmQ4NzBlYzVmZTI2ZWQxNGRmYTU3YTMzMDlmOTIwMTMxYjcwNTgwYzM2MzlhZjI2NDVjZDFhZjkzZGIxYjEiOiJjNmU1MzJhM2IyNTY1M2I2MDAyYWVkNTI2OWNjMjExODc0OTMwNmU3MzZiZGUwMzlkNGQ1NjlkNGY5Njc3NzNmIjoiNWU3ZDI2YzRkYTc2OWMzNzMwOTJiMmI0ZjcyYjEwOWZlMzRiZGI3ZDE2OWVhMzhmNzhlYmFlNWRmNGExNTc1OSI6ImNhY2FlYjFiNGFjMjMwNWQ4NzE0ZWI1MGNiZTFjNjdjNWEyYzBiYmM3OTM4ZmRmZGNhZmVmN2M4NWZjNDBiZWNiZjc3N2E0Y2ZiNmYxNGM2ZWVlMzIwOTQzYTQ5M2QyYjBhNzQ0YTZlYjNjMjU2ZWU5YTM3NjMwMzc0MzdkZjlhZGNlM2UyMjYwZjBjMzVlOTU4YWYwZWRiNWE4MWRlYmQ4YmRhZjJiOGJiMmI5OGI5MTg2ZTVhMjIyYTIxNjA5ZmY1OGRmNGNiZTFkNDg5OGQxMGQ2ZTdjNDZmMzFmNWNiMTA0MWJmZDgzYTVmYjI3ZDVjNTZjOTYxZTkxNDAzZmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiIzNjJlY2U5ZDMzMGUxMTcyYThmOWU1MDI1ODQ3NmQwYzc5YzNlZTUwMzQ2NTI0YmExMmQ5NzBlZTNhNmVmOGM1Y2YxMWJjYjRkOWQ1MTMxMWNlYWNmY2E4NzA1ZTgzM2YiOiJhYmI1YThlZGRlMDJlNTI2NDQ5Mjg0ZWNjMzFiYzcxMzM4M2RmM2VkMDg1Zjc1MmUzYjZhMzJmMzA1ODYxZWVkIjoiNzQ2MzAyYWIxZjRhODZiMTc1NDZiZWE3NjJlOTI5MzYwZjJlOTVjNzc4OGE2MzU0NWEyNjRlZjk5N2M4YzY1ZSI6ImI5MDdjNWIyYTg4MzNhNDhlNTZlODE5MjI4Y2U5YTA1MGI0MWIzMzA5ZjVjYTM3YmVkNzIwMzExZDkyYjMzYWYiOiI3M2M3MTMxYTU1ODM1MDU5MDA1MzU4MDg3M2VmOTU2ZmY5NTJmMmFhNmZmMWJlYTQ1MmUwMTNkMWJjMmFmZGRlYTIzMTE3NTZkYmU3NTZlNjNiYTYyNTg0ODBjNDhmM2Y2YzEzMTliNWY1NzJmNjdjYTUzMGFmMDllMzk0MTNkMWQ0MzJiZWE4Zjg5MjA2NjE5NjE4Y2IwZTdjODhlOWYyMDMzNjM5ZDBlYjBlZmMyMDYxNmI2NGY5NDBkYTk5Yjg4MjMxOTg0YzNmYjIzZjE5ZTg5MDU3NmY1NTVmZGUzOTRkYmQ0MzUxZjE3YTdmZmQ1YzM2OTM3OTAwMWJkYTAzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiY2Y2MTRiYzI5OTQ2YmMwMDk1ZjQxNWU4YmRlZGExMGFhYjA1MzkyZjljYzkxODdhODZlYTZlYzk1ZWU0MjJlMTc3ZmI1ZWMyMmRjMDQzMmNjMTNmNDY5M2UyZTNiZDlhIjoiZTRjZTc3OTE0ZmZiYzVmZGRmMWZiNTFlZGZhZmRjMTk2MTA5MTM5Yjg0Yzc0MTM1NDEzNWVjOGQzMTRjN2M0MyI6ImUxZTgzZWUxMjA1YWNhZjYxNjRkYzI4N2FlYzA4ZTViMzI3ODllNWJlODE4MDc4ZGIzOWU1M2NhZDU4OWRiNTEiOiI0ZTIwYzAyMjZkNWUxZTdlODA1Njc5ZjAzZjcyNDUyYjViZWEyZDBiYTQxZTBjMTIzMjliZjYwZWIzMDE2ZGQxIjoiODM4ZmRmMTQxOGE3NDZhYTUyYWU0MDA1ZDkwYzNmZDMwMWY2NDhjNTc3MGZmZWYyYTlmMzkxMmUzN2E5Mzg1MGNjNGI4YmZjY2U5MTBhZWFkMGNiNzU5NTg4MjNiMWE2MmUyODM5MDFjNWU0YTM5ODBlNGVhMzYyNTc0NThlMmU0OTUzNTU1ODE5Yjg4NTJhMjY0ODliMWQ3NDgyMWY4MGM5OTA4NDY5YjQzZjEyNGZmN2VhNjI0OTdjMzYxNTlhNDczNTMwOThhMWI5ZWMzMmU1NDgwMGQ2NzA0MzcxY2MzN2YzNTdhZDc0YWFjYzIwM2U5YjZkYjk3Zjk0ZDBjNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImE4ZGExZDNlMjMzZjM5M2ZkNDRkMjA0YzIwMDIwMmY3ZDAxODk2ZTcyYzVhYzY1Mjk0MGNmZDE1YjVkNGIwYmQwYTExMmI0Y2IwODkwYWYwYTQ5NWUwZjQ5ZmNmNjg3NCI6ImQyZTMyNzk5YmM4MjJiOGQwMzMyOTliZGY2M2RjMzU3NzRmNzY0OWU5MzVkMjViZTViMTA1MTJjNDMwZDFiZGEiOiI5MjBhODJkNzZmY2QyY2QxMDZhZGE2NGJiYTIzMmI3YjIzNDRmM2FmZTZiMWQxZDIwZWU4Nzk1MTQ0NTcxMDA5IjoiZWVhYWM1ODc4Mjc1MzcyMDI1ZjgyMzFmZWJlZDY0ZGI2YTExMjczYzNjMDBkNjI1ZmM4MGE5NWYxOGFkN2QzZiI6IjVmNmRhZTQ4OWI1M2Q4OTAyN2IyY2MzMzNjNzAwZjA5MDE1MmQ3N2IzZWFmMDFkNDdmNTZjZTZlY2E5ODkzZWY4NzdiNGNiNTYwZmFiMGZiZGIzNGUzZDFjNmNkODQ4MGIzM2MwNTNkMjY2MWExMGFhNTMxZGY0OTYxYjk3ZDY1OWM3NDkyNTg0MjM2NTgyYjNmZTcwMTA1NWVmYTU5YzMyODE5NGNkMWUwN2ZjZmZkOTEwZDllZTAxYjdiOWU4YzhmZGE3ZjdhYzAxYThlMjAzYjhiMjZlYjgwNzhhOWI5YTUwMjE1NjJjNDRhZjI0MDg5ZTNlZjg0YzFkNWE2YmQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJhNzdiMWVkNGVjYWE2NTAzNzRlMTA1MmM0MDVmMWQ4ODg4MWMyNWM4N2QxM2RiZTEzMzRkOGMxYTg0N2ZhNzZiMDVjMTQzZTJmMTQ1ZGIyMTZmZTdiZTllZDIzNjM1ZDAiOiJiNWM3NTA5NjhmZjA5ZWQyNTFkNGExYzA1MzQyYWM4NDNkYjUyNDZiMTkwNDU3MjhhNjM0ZmE0ZjZlNzUyZTU0IjoiZmY1OTM3YmNkMDFhMzYzNjk2YmY4ZTQwYWRjOGU0YWIzZTU2ZGJmN2U3ZDA5NDUxYzk5ZTUzODc4NWZlNjY5NyI6IjRhY2IzNGVlYTgyNjZiYWRjZjhmNjU1N2EwZWVjZjNlYjRkN2EyOTVjODc2ZDYxNzU1OThjYjY2YTM4OGVmYjgiOiJlYzEzZWFkZmNjODRlNzdkMmEyZWZhMWEyY2Q4YjEzNTU1ODdjYjI3ZmViM2QxOWQ3NWIzN2YwNDQ2MzMzZGRiODIzNmU3NTFjNjNiN2E2ZTU5NWVjMjRhMjUwNTFhNjk2ZGJlOGMwNjJkZDg4OTZkMTQ0NmRiMjI4YTJmMTBlODA5NGVlMDdlN2VlNjQ4ZWQ2YmViYjJmNWVjNWFhZTI0YzljNjQwNjY1YzI4MzU1Y2MxMWMxMTY3OTVlY2MwNzA3OTBmN2ZkZmM0Mzk4OTAwMzExYjY2OTVkNWRhMDE3NTA5MWVkMTgyOGQyNzMxMDg1YmZiNGEyMGJkODZjY2UwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiNDkxNjg2Yzc4MWU4M2ViNGUyMWQ5OTg5ZThkNzE4MTAwYjBkMjFhMmM1NjI5NTg4OGJhZWYxYTY1ZjIxOTY1MTQ5OTA4NTI5NmQyMTA2NWZlYWJmMzEwNjEwMWM4ZDZmIjoiZDIwOGE3MmY5YWUzNGYwODE3NjY5ZmIwNGY0OTIzOWRkMzE3MDBmM2RjOWE5M2RiOGQ3NWZiNzlmOWI2ODZjMSI6IjlmZmM2MTg5M2EyOTNhODY0MDA4ZmRkNTZkMzI5MjYwMGQ5ZTJlYzhhMWVhOGYzNGFjNTkzMWU5Njg5MDVhMjMiOiI0ZmYzYTM5N2RmZGFlMDkxMjAzMmEzMDJhNWU3YTA3ZGNlY2E4ZDkwMTNhMjE1NDU2ODkzMTliN2MwMjRjZDA3IjoiM2MyNThlYmYyMjAzZmNhM2IzMjJhZDFiMDE2ZTIxYzdmNWMxNDg0MjVmODFlNGZiMGEwZTQ2MmRjZTlkZmE1NjljMzdhMDA2NTI3NzY4Mjk3YTViNjg0NjFiMDg5MTI2NDJhMzQxYjg4Yzg1NTk3ZTMwZTc1NjEyMDY4ODYwOThjNGUyZDg2MWYxMTUxM2YwZmZkYmJjNzhkM2EyZGQ2MGMxMDVhYmJiMzNjNWUwNWFlMjcwODFiNjkwZmI4YjM2MTA5MTdhYTliZjFhNGFkNzQ0ODFiNWZmODMzNGYxNGU1YWQ2YTZhMWViMjI1OTQ3NjA3ODA3NmZiN2UzYTk5MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiIzNmE1MjY3ZWVlYjVhMWE3ZDQ2ZGUwZjhmOTI4MWY3M2NkOTYxMWYwMTE5OGZkYWE3OGM1MzE1MjA1ZTVhMTc3YjY2YjUzMzc5NzBkZjM2MjE5MzIxYmFkYWNjNjI0ZWIiOiJjMmE3YjE2NDk0OWRhMTAyYmVjZTQ0YTQyMzE5NzY4MmZmOTc2MjdkMWZlOTY1NDI2NmI4NTI3ZjY0ZTViMzg2IjoiYTk3N2UyZDg2MzdiMDE5Yzc0MDYzZDE2M2JiMjUzODdkYzU2ZjRlYjQwZTUwMmNlZmM1YWU2YWQyNmE2YWJkYyI6ImM1Yzk4MTk1NTdiMWU3ZDhhODZmYThjNjBiZTQyOTkzZWRjM2VmNTM5YzEzZDlhNTFmYjY0YjBkZTA2ZTE0NWUiOiJiNDcxNzExYTRmYzdhYjcyNDdlNjVkMmMyZmU0OWE1MDE2OTE4NzE4N2I3OTc4Y2QyZmRiMGY4MzE4YmUzZWM1NWZjNjhlZDQ1NzdhZDliNDJjYmI1NzEwMGI1ZDM1YWM4NmMyNDRjNGM5M2E1YjI4YzFhMTFjMmRmZTkwNWQ2MDhlYzc4MDRkZWM1YmIxNWNmOGQ3OTY5NTUzNGQ1ZTEzYTZhN2UxOGE4ODdlYzljZjE4NGRhMGNiYmM2MjY3ZjNhOTUyYTc2OTQwM2JhZmNkYmI1NTk0MDFiZTBkOGIzMzAwZWE3MjU4YjQwMjZmYzg5MjE3NWVmZDU1YmExYTY3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImE3NmIwMzY2ZGY4OWU0MDczYTZiNmI5YzA0ZGExZDY4MTdjZTI2ZjFjNDgyNWNhZDQwOTdiZGY0ZDdiOTQ0NWU3NzNkM2NjMzI5MDE3Njc3Mzg0Nzg2OWJlNTI4ZDFhNCI6IjFiZmQzYmNmYjkyODdhNWFkMDU1ZDFiMmI4NjE1ZmE4MWM5NGFjMjRiYzFjMjE5YTBmOGRlNTg3ODllMDQwNGEiOiJlZGQ4NzlmYTU2ZjIxZDkzMDI5ZGE4NzViNjgzY2U1MGY2ZmRjNGMwZGE0MWRhMDUxZDAwMGVlZDJhZmVmZWZhIjoiZjUyOGZmZDI5MTYwMDM5MjYwMTMzZWQ5NjU0NTg5Y2U2MGUzOWU3ZjY2N2MzNGY4MmNkYTY1ZGRjZjVmZmYxNCI6IjM5ZDFmZjg4NDhlNzRkZDJjZGM2YjgxOGFkNjk4MjM4NzgwNjIxMTZmZGYxNjc5OTQyZjg5MmM3ZTE5MWJlMWM0YjZlYTI2OGVjZGZmMDAxYjIyYWYwZDUxMGYzMGMyYzI1YjkwZmMzNDkyN2Y0NmUzZjQ1ZDM2YjBlMTg0OGIzYTVkNTRjMzZjN2M2NWVlNzI4N2QzMjVkZmJiNTFiNTZhNDM4ZmViNjY1MGNlMTNkZjg4YmYwNmI4N2FjNGEzNWQyYTE5OWVhODg4NjI5ZmIwZDgzZjgyZjBlYTE2MGRjNzllZDIyMGQ4ZWYxOTViOWU4MGM1NDJmNjBjMmQzMjAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiNDY1NzFlMWRmNDNlNWUxNDEyMzVlMmE5ZWM4NWJiMGZhZjFkYzA1NjYwMzFlMTRkNDFhMmZiZDAzMTU2NTNlY2I2MGVmNmEzMzQ3OTY3NTE5YWFiZWFmNzQ4ZTRlOTkxIjoiNzU5ZmQ4NTkzZTM2ODhiMjNjNGEwMDNiNjU1MzExNzcwZDY3MDc4OTg3ODU3MGViM2IxNTVhOGU2YzJkOGM0NSI6IjAzMzEyODQ2MGI0NDllMWFjY2IwZTljNTQ1MDg3NTlkZGMyNTM4YmM2NGI1MWU2Mjc3NTUzZjBjNjBhMDI3MjMiOiJhNWU0YTcxNzI0MGJkZWFjMThhMGMwZTIzMWExMWRjMDRhNDdkNzU1MGYzNDJmYTlhN2E1ZmYzMzRlYjkzMjdkIjoiOWQyMjJkZjFkNTMwZWE3ZjhmMjI5N2EwYzc5ZDYzN2RhNTcwYjQ4MDQyZWNkZGRlZDc1OTU2YmJhMGYwZTcwYjI3MWZmYTNjOWE1M2JhZGE2ZWUxYjhhNDIwM2MyMmJmZGU4MmE1ZTJlYjFiMTUwZjU0YzY0ODM0NTg1Njk0MjJjMWEzNGE4OTk3ZDQyY2MwOTc1MDE2N2E3OGJmNTJhMGJkMTU4Mzk3YWY5ZjgzY2FhYmU2ODkxODVjMDk5YmYwYTlhNDg1M2RkM2NmOGI4ZTg5ZWZlYmI2YTI3ZGJhODczZTY1ZTk5Mjc3NDFiMjI5NjhmMjg3NTc4OWI0NGUwMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJkNjM5ODBlNjNiYmU0YWMwOGQyYWM1NjQ2YmYwODViODJjNzU5OTVlM2ZkZmMyM2JiOWNjNzM0Y2Q4NWNhN2QyZDMzZWQxZGNhZTEzZmI2MzRiYTA4MjcyZDY2OTc1OTAiOiJhY2QwZGEwNzAwNzJhNTM0MGM0ZjVmNDM5NTU2OGUxYTM2Mzc0ZTA3NDE5NmFlODdmMzY5MmVlNDA0ODdlMWRmIjoiZjU2NzY3N2I1ZTEyZTI2ZjM1NDRiZTNkYTkzMTRjODhmYzQ3NWJmODQ4MDRhODlhNTFmMTJiMTkxMzkyYzAyYiI6ImMwMWNjNzg3M2U5M2M4NmUyYmZiOGZjOTg0Y2ZjMmVhYjVjYzU4ZWVlZjAxOGZlZGI1Y2JhNWFlZGQzODYxNTYiOiJiMTMzNDQ2ZjYzM2JjYjQwNzI0YmJmOWZhMTg3YzM5YTQ0YjljMDk0YTBhMGQ0MGU5ODk3N2U1NDY2ZGMyYzlhZGY2MmE1ZjQ1NTFlZWI2NDA2YTE0NjU4ZGU4YTBlZDc0ODdjM2JmNjI3N2U4MTExMDEyODRhOTQxNzQ1Y2UxNjE3NmFjYzg3NWYxNDM1ZTE0MTYxNzcyZmE4NDYwOWU4MTIzYzUzZGQwM2NiYjg2ODAzMDgzNWMwZDExZDhkNmFhMDRhMWI2ZjkwODI0OGIwMjg5OTc3MzdmNTQ3MzVlYzRlZDdhODFmYzg2ODE5OWZmYjYxYTc3OWQ5MzQwMzM0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjNkOTlmOWI3YWMzYTJmYmU5Y2YxNWQ5NjBiZjQxZjU1ODhmYzRkYjFlMGQyYTVjOWMwZmU5MDU5ZjAzNTkzZmI0MTFmNTA0YmI2M2E5YjNhZmE3ZmZhMTM1N2JiNDhiZSI6IjBiYjVlYmQ1NTk4MWEyNWJhNjkxNjRkYTQ5ZmE5MmYyODcxZmQzZmM2NWViMzBkMGYwZDBiOGQ3OThhNGY4ZjIiOiIyODhlOTQ4YTU1MTI4NGViM2NiMjNlMjYyOTk5NTVjMmZiOGYwNjNjMTMyYTkyNjgzYzE2MTVlY2FlZDgwZjMwIjoiZDk3NWIyMmY3OWUzNGFjZjVkYjI1YTJhMTY3ZWY2MGExMDY4MmRkOTk2NGUxNTUzM2Q3NWY3ZmE5ZWZjNWRjYiI6ImVlOGQ3MDdlZWE5YmM3MDgwZDU4NzY4YzhjNjRhOTkxNjA2YmI4MDg2MDBjYWZhYjgzNGRiOGJjODg0Zjg2Njk0MWI0YTdlYjhkMDMzNGQ4NzZjMGYxMTUxYmNjYzdjZTg5NzA1OTNkYWQwYzE4MDkwNzVjZTZkYmNhNTRjNGQ0NjY3MjI3MzMxZWVhYzk3ZjgzY2NiNzY5MDE3NjJmMTUzYzVlODU2MmE4Y2NmMTJjOGExZjJmNDgwZWM2ZjE5NzVhYzA5N2E0OTc3MDIxOTEwN2Q0ZWRlYTU0ZmI1ZWUyM2E4NDAzODc0OTI5ZDA3M2Q3ZWYwNTI2YTY0NzAxMWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwwLDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImExZGMyZGZlZGE0ZjNhMTEyNGUwZTc1ZWJmYmU1Zjk4Y2FjMTEwMTgyMjFkZGEzZmRjZjhmOTEyNWQ2ODQ0N2FiYWU1ZWEyNzE2NjU0MDUxNTI2OGE0OTNhOTZiNTE4NyI6IiI6IiI6IiI6IjIyODI5M2U1OWIxZTQ1NDVhNGZmOWYyMzI2MTZmYzUxMDhhMTEyOGRlYmQwZjdjMjBhY2U4MzdjYTEwNWNiZjI0YzBkYWMxZjk4NDdkYWZkMGQwNTAwNzIxZmZhZDNjNjg0YTk5MmQxMTBhNTQ5YTI2NGQxNGE4OTExYzUwYmU4Y2Q2YTdlOGZhYzc4M2FkOTViMjRmNjRmZDhjYzRjOGI2NDllYWMyYjE1YjM2M2UzMGRmNzk1NDFhNmI4YTFjYWFjMjM4OTQ5YjQ2NjQzNjk0Yzg1ZTFkNWZjYmNkOWFhYWU2MjYwYWNlZTY2MGI4YTc5YmVhNDhlMDc5Y2ViNmE1ZWFmNDk5M2E4MmMzZjFiNzU4ZDdjNTNlMzA5NGVlYWM2M2RjMjU1YmU2ZGNkY2MyYjUxZTVjYTQ1ZDJiMjA2ODRhNWE4ZmE1ODA2Yjk2Zjg0NjFlYmY1MWJjNTE1YTdkZDhjNTQ3NWMwZTcwZjJmZDBmYWY3ODY5YTk5YWI2YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiMDY3ZmEwZTI1ZDcxZWEzOTI2NzFjMjRmMzhlZjc4MmFiMzU4N2E3YjNjNzdlYTc1NmY3YmQ0OTZiNDQ1YjdhM2NlNmFjYzcyMjc2OGNhMGUwMzc4NGIyMjE3YmM2MGU0IjoiIjoiIjoiIjoiMTZlYWE0OTUxMGZmYWQ4Y2MyMWVjMzI4NTg2NDBhMGQ2ZjM0Y2IwM2U4NjQ5MDIyYWE1YzNmNTY2YjQ0ZThhY2U3YzNiMDU2Y2YyYTQ0YjI0MmRlMDlhZTIxZGJhNDI3NTQxODkzMzYxMTg3NTg0MWI0ZjA5NDRhODI3Mjg0OGM1ZGMxYWFkNjg1OTM1ZTEyNTExZDVlZTI3ZTkxNjJkNGJiOTY4YWZhYjUzYzRiMzM4MjY5YzFjNzdkYTlkNzg2MTc5MTFlZDQzOTBjYjIwZTg4YmYzMGI3NGZkYTY2ZmUwNWRmNTUzN2E3NTkwNjFkM2ZmZDkyMzFkODExZThiMzQyMTNmMjJhYjBiMGRkYWZmZjc3NDlhNDAyNDNhOTAxYzMxMDc3NmUwOWQyZTUyOTgwNmQ0ZDZmMDY1NTE3ODk1M2MxNjcwNzUxOWMzYzE5YjlhYWEwZDA5ZmI2NzZhOWQyMzUyNWM4YmMzODgwNTNiZmNjZmJjMzY4ZTNlYjA0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI5Zjc2NTAzZTg0NzI3Mjk3YmM3MDU2YzdhZjkxN2ExYzk4YmFhNzI1Mjk1NDU3ZGI0ZmNmNTRlZDA5YWY3ZjE1ZjM5YzQ2MTQyYjg1YTY3YjRiMzIzNTk0YjdlOTdiZGUiOiIiOiIiOiIiOiI3ZDZhOGJjNWE3ZjA1N2NlZWQ2MTA5YmZhYzI0ODZmODBmODEzNzNiNmIzMWQwNjJhYTFmYWQ2ZDllZGE1ODc0ODY3YjllZjAwN2JhNWE5MmJhOGYzZmNhNjI0YmZkOWY3ZWU1NzcwYmJlYjAzOTEzOTRmZWY3ODNjMTZhN2YwMDNjMDZlNTQ2OWJhYjAzNDQ1YmIyOGEyMTExZGVmNDE1ZDE2MmU0MDQ3MmQzZTVhZTYyOGM1YzYzMTcwYmIxOWY3NDFjNzlhNTMzMWM4ODNjMTJiY2E0MjlmNTE4YmY3MWIxNDY4M2EwNzFiNmM2ZTFlNTVkOGM3YTBmMzk0MmJjMTJhMTAzNTU2YzQ5Y2ExNzNlNDk4YjNiNGExNTAyNzE0NWNkYWViMTk1YmM4YTdlMWFhODJlYmRmNmVjZDUxNjQ4MWE0ZDIxZjQwMGQwZDcxYjU4OTQ1NDU4ODhmZWU4YmVlZDgwZDMyNTE2NDc5NDdmNWFiYzQ3MzViNDdmZDAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwwLDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImUyNDJlNWIzYjQ5ZDg3Mjg5ZmUwMjg0MGRjNzQyYTJhNmNkOTQ5MGZlMmNjZTU4MTgzM2RkZGIxZWRjMGQxMDNmOTg3ZjVkZTVjNjhjZDM0NWM4MWIwMzJlYTU1ZjM2ZCI6IiI6IiI6IiI6IjNhODU4MzQ1ZGZhZjAwZGVmZGY2YzgzMTE0Yjc2MGVmNTNiMTMxZmJmMTRiY2M0MDUyY2Q5NDg4MjBlZWU3OGExMWNiYmQ4ZjRiYWEzMDhlMWQxODdmY2VkNzRjYmYwMTljMTA4MGQ5ZWZmZmQ5M2ZkYTA3ZGYwNTE0MzM4NzZkOTkwMGMxZjlhZDM2ZWExY2IwNDk4OWJiMGM1NWZkNmQwMWU0NjkyM2YzYmM4ODg3YWMwMGViZDQ3MTAyMTIxMTQxNjUzNTUzNjFlMjQwYjA0MjMyZGY1NWE4MWFkZDNmYjM2M2YwZDRjOWM1ZTNkMzEzYmM3Y2FhYzdkNDlkY2E4NTE3Y2VkYWNmNTcxZmRlOTY4NmFlOTNkOTAxZmI5YjE3MDk3YTYzOGJiOTg5OWNmYWIwZWJjOWQxZjhhNDNjMmVlZDdjOWYzMjZhNzExZDBmNWI5Y2ZjNTE2NmM5YjU2MTgyNGNiZDc3NzVlYzYwMWNhNzEyYjNkZGFhYTA1YiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiNDJjYzE3MzY1ZjVlYTVmZDIyYmRjNGFkZTcxNWUyOTMwNjRkNjc5NGQ4MmJlZDViNzdjNGMxMDdhNzNkZTFmNzZkNzU5ZTRiMTkxYmEwMWUwZWQ1ZGVhNzg4YWIwMThkIjoiIjoiIjoiIjoiZGUwNmRlZThjOGZlNDUzYWEwM2FjMjU0NmMzOWY1Y2RhMTI0MTI4NjRkNTJlZDVjYmQwZDQ5MDVkZDIyNjc0NmQ1MGQxYWY5ZmQzZTFkOTBkZTBmMTYyOTVjYjdmNmY0ZDMyNzFlZjAwNTY0NzA5ZGY0YjA1ZWI5ZjhhZGMwZjhlODUyMmIwNWI5ZjMyYzM3ZDg1MjY4MTM4OThiOWY3MWRiNTdmYzgzMjhlM2I3OTE0NDQ4MmU4YWE1NWM4MzkzNGQ2ZTA5N2U0M2VjNmQwYmMzMmVkYWY4YzBlNmNhNDQ5YjJlODM4OGIzMmIyODZlMmQ0Zjg1MjY2YjA2MDVmYjk5ZDFhNjQ3NTY1Yzk1ZmY3ODU3YmNhYjczNjYyYjcyMTg3MTkxODlkNzkyNTE0ZWRjYTJiMWQwY2RjZDliNjM0N2UxMzJlZjRjMzIzZGEyNGFkNWFmZDVlZDZmOTZkMjdiMGY4NzkyODhlOTYyZmEwYmFjYTNkNWI3MmI1YzcwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiJkNTcwMjRhMjMwYjgyNWIyNDFjMjA2ZjdiNTVlMjExNDQ2MWVjYzliNzUzNTNmMTJhYzFkOWFkN2U3ODcxNDgxZmU0MDFjMzIwZjc0YWZkYjA3ZjU2NmVhNTAwYjA2MjgiOiIiOiIiOiIiOiJlODkzMGJkNTVhMGE1YTZkODNhOWIzYjJjZGU3MDg1YzJhZTQ2N2VhNGEyZTY1Y2EzMDM2OTdkNDkyY2E4NzhiY2I4MDE3NjllYjFiN2VjNTY0NTg2ZWM4YjM2ZDM1MGUxOTJjNGZiZjAzYTk4YmUwZGRlY2Y1NmQ0NjU5MTRiYTM1M2VkNzczNGQxOWE2ODBmYzQ1OTNkOTIzNGM0YWM4YzIzYjdkZmExZTI2YjAxM2Y1OTBjY2E0M2I5ZmVmMTI2MTIxYjQ4NDI0OTZiMTFkZWEzZWY1ZTk4MWNiMzU3MzQxZjAzZjkyYTU0NmE2MjYwOTIzNmRlZDZmN2Q4MTQ0NTZhY2MwNTk2ZDU1NWNiZGMwMmNiZDQ3ZGFlMmNhYTE4OTc4MzFlYTQ2NDIyNTkyMmM2NjAwYThiYjkyZTcxMTY1MzA2N2Y4M2IyMWUxZGYwNTQzMDk4NTg5NDhjMTFhMTM5OTczNmZjODM5MWM1YjBmYzM1NjI5YWJmYTU2NTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwwLDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjA1OWRlZDc5MTI1YjJkNTZkOWQ1MmJjYzk1MGJmNjA4ZDFhMjM3MzUxNWRhZmNjODFlZmI2NTg4MDA1YTU3MjJkOGY1ZjQxODFmOWYyYTMxNmM5M2ZkZmJhZGY1MGU3NSI6IiI6IiI6IiI6ImRiNjVkMjAwMDYzMmMzZDcwMDljMjI3ZTk5YzIxMGU1ODk3ZjRkN2VkYWU2MDhhMjQyYjVhNGYxNzcwODYxM2Y4YzE5YTRkZDY1ZDZiYzNjYTU3NzM3YzliZmRjY2EwNjgyODhlZWE0OTQ0MGFmNzY4ZDFmYzk3N2MzMmIwNjViYjcxYWEzZDhjNGQ3N2M5ZThlOGE2MTY2ZjMzMmEyNDc5NzhhNmM0MWVkMjUzYTFiNjhhZDkzNGEzNDE2YjQwMzQ0YTY4MWRlMjg2MzhmMDBiMGEwZmZiNzU1MTRjM2Y2MjI1MzM3MmY4MDk5MDYwNDNkZTM1ZTQ4MDViOGU5NjJlNWViOTU3ZjA0MjEyODM1ZjgwMmIyYzBiM2U3NmM3Y2YyMzljODlhZGYzMTkwOWNkNjIyNGQ1NDJkOTI5ZjliMjBhMTBhYjk5YTdjNjMxZTRlNjE4OGZlMmJhOGY1NTJjOWM4OGZkYWRiNTI4Njc5ZmU5NTA0MzE2NDFiOGYzNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiNDYzMDQwNmI0NzViMTI2M2I2MDc4ZTkzZTVkNDI4MjIwNTk1OGQ5NGViOTdkMWU2NmI0MjlmYjY5ZWM5ZmNjZDBkZDk5ODJjMzM4ZGY5MzVlOTI5YzQyZmFiNjZhZGFmIjoiIjoiIjoiIjoiNWQ4MGVjMDcyZjU1MDk4MWJjYWFjNjc4N2MwNDg4Y2M0NzA0MDYyNDllYzgwZjRiZjExMDUwNjMwMjI3ZjhiNWFjNmIzYjM2OWRiMjM3ZDdjMjRhMDk4MGRmZmU4ZDNhYmQ5YjY0ZmQ0ZWZhNDkyMzQ5YmQ0ZWI2OTAyZWRiOTQ1NTM1NDYxMTAyMjdkN2RlNWE4NjRkZGFlOGI5ZmVkOGRlOWYwZGY5YzU5NmUzOWRlOTAzZmRhMzIzZWU2Zjc4ODgzMTQ1MmViOWU0OWM1ZWVmM2UwNThiNWJmODRmNjFmNzM1YTkzZTA0MmJiOWU0NThkZjZiMjVmNDJhNmViOGZiMDNkNDM3Y2ZhYjc1N2ZhYjQ5OTBjNzIxYTc1N2VhYTVlOTA0ODIwOGFiYmNjZTZlNTJmMTc3YjIwZGNmNTJmMWZhNTUxYTkyYjY4YmNkYjAxNjgwODU1YjhmNzkxMzEyNjYzNzhjZDFmMGMyYTQxNDFjOTY3NWYwMWQxZTQ4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI2ZWE5YzZmNzg0ZjEyYTk3MDdjZWFjOGE3MTYyZWU1MzgxZGM4OTNlZTEzOWY4ZjRiNGQ5M2RiMjY2ODI5ZGI0YWU5MmJjNTJmZjg2MGQ4ZWNkYzlmYzE2YmQwNzAxMzAiOiIiOiIiOiIiOiIyMzQzNjZmMTU5MWNmZTI0NDk1NmY5NDk2Y2RmNDQ2ZTBkMzkwYmE2NGJlYWEwNjY5NDViMWI0YzUzMzdkZGVkMjYxOWRkMmJkMDEzM2E1ZDYxMmJhYjdjMjUxYWI3OWUzOTUxY2IxMzQ4OTRjNDIyNTUzZmM4Y2M3YjNjY2IyOWMyMGFkYmY1MmRkYTM1YWY3NzkxNDJkN2VmYzczNTM0MmRiMmVlMDY3NjQ5ZmRhMjVmM2U4YTc0ZjhlNGY2NjIwY2Y1YTE3Y2I5NDM2MDI2MDljYWZiODViZGY0ODI4NzNlZmE0Yzc0OTI4Y2MwZDY5NDQ0YjcyYWE2YmM3MjY5NGEzYTIxYzZhNzIxYWE0ZTBmY2NhYjBhOThhZWYzNzVhMzdhM2U4YTE1ZGNjYWQxM2I2ZDcwYjM0ODM1ODEwMDQ2NDJkODc5ODA0YWEwMGNiYTIwN2I1MWFmZmNhNDM0OTBiYjk4ZjY3OTUzMjY1NTc0MzY2ZWMzODI5ZTY3YWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwwLDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjVjMTMwNTZiZTkyYTdmNzEyMzZmY2ZlZjQ2MDI5OGFjYzg1OTVkZDQ3NDMxMDcyN2Y1Y2NiOWE3YWNiMjI1NGFjNzIyNmY4NjM0OWUyMGUyYWNhNzM3MDY4YWIwZjJjZSI6IiI6IiI6IiI6IjE2ZDQxNWVkZGVmYTRkYzI5NWE2NGFkY2JiY2I4YzZmZThjOGYxMjNjNmIwOWRjMDhhNTZkNzIzY2ZmNTk3OGNjMTIwZmQwYTY4YTJmNGMyMDJjMjIwZGIzNzJkMzEyOGVmNTIzODVkNTc4NmMxMmRmYzZlNjBlY2ZjMzQ2MWEwOWZhODA0NTNlMmIxYjYzNjVlYWViNGRmNjAyZDE5MmFhY2IyNWFiNmI0YTU5Njg5ZDRiZjhkMWM0YzQyYTMyNzc5ZjYyYjA2YmFjYTY0NjFmMTU0Y2Y0MDkwMWY1Nzg3YzFhYTJiZjY3Y2JmZTc1NDZlZjViMmJkZmYyMDc5MGQ4YzcyZDA3N2Q0OGM1OWM5MmQxYWY5MGE5MGNjZmNkZjY0M2RkOWQ2Y2VlMGIxZmFmNWYyZjM1Y2ZkMDFkMjA3N2NlZDVlMmQwMTNlYzFlMDkzMzZkZmFiOWQ5ZTUxYmE5YTNhMjgzNzMwNjIxM2JjYTJkNzlhYmY4ZGMzMjgyYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjM4ZjA4YTA5OWZjMmQ0MDVjMzJkMWUwZjg2N2U1NDUwZDVlZTBkNTM3ODNjMzFkZTlkZGVhZTQ2ZDk2Mjk5OWRhMDFmMTNhNDMzMjBjNzE1NjEyY2VkYjkyMGNmMTJlYiI6IiI6IiI6IiI6IjA3OWNlN2E1YjU0MGNhZTk2YzI4ODNlOTVhY2RlMzAzOTA0OGE2YzQ1YTJkMjU5Y2M2NDg2MzllNzIwNTM5MmQ5MWZhM2VlMDgwZTYxNWYxZTA3NDFhMGU1MzZjOWUwNTg0NDY1MWI5MzQ2MWJmYzU0N2ZiNDUyZmVjNjFmODUzZTFiZDZlMDhlYWJkMGNmMWM1Zjg0Zjg1ZWNhOWQ0MmI1M2QxZTViYWU1MWJlNWZkMzUxODllNGYxYzAyYjg0M2M2MzYxZmNjZjRjYTY2NDhiZjMwYTIzY2NiOGViYzE2ZmNmMTU4NzQ2ZWIzOWNkOTZmMTlkNDY3MDdjMDAxZTExYzRlMGU4Y2NiYzg5ZmVjNjZjNjlmYzkyODQzYjZiYjJlZTFjYzc1OTViNjViYTg5Y2NhY2NkNjEzMGE4NDE3ZmFmNzA1ZThlMjAzZTkwZWU2NGFlOTcwYzQwOTM4OWI1Y2QwY2E4MGE0ZTQwYjY0MjY4OTc0MTY5MWIyMDYyMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjA4NjNjODY4YzMyNDQyYTFhNjQwOTVhNzFhYjZhZTJmOWU2MWMxMTliNThkZmE0ZjM0ZWZkMjY1OTNiYmJmNjhiYzQwNzkwNGM0MzMwMDQ1MmRkNGU2MWRmNDdmYTk4ZiI6IiI6IiI6IiI6IjU4NTMzNDgyOGNmNTMxODI4ZmM3MTI3ZmVlMGM5MjZmODViOGU3MWU4NTIyZWE5MjEyOTZkYzYyYjgzYTA5YTAwMzk3Y2Q0NWUwNjY0ZDBmMjZmYTI0ZWRkM2UzZDhlY2VmOGZkZDc3YWIyMjQzMWQ0MDY2ZjBlZmFmMzg4MmM5N2YxNzlhNzA2MGVmZTllOGNiYTVkODE0NWJlYmQ1MDJjMGUwOWVlNzkxMjMxZDUzOTk4M2MwODg2MGQ3NzgzZWRiNTg0NDBkMTkzZWQ4MmJjNzdjMjc3MjMzODFhMGRhNDViYjFmYzJhNjA5ZjhiNzNiOTA0NDZlMzk4NjlhNWFmNTAzOGFmZjYwM2I0NGRiOTc3MTExMzkyN2E1Mjk3ZmRjMzQ1MGVhYTIyOGUzMTNhZmU0M2MzMWIwYTk1YjQ3NmM1Y2EzMTJiNGY1ODlmODA5NzQ5NDgxNzIyY2VhOTk5MGMwMmI2NDc5NzZhYTZjNmYwMmNlMWU1ZTZlYTZkZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImE0MWFkMjIzZTQxZTJiYjljMTMxZWM5NDVjYTMxMDYwMGFiMDBjNTFmNmU0ZmNkZGQ4MDNiZDlhYjliZThhZjU0ODMzNzM4Mzg4OTRkMzI3NDVhODFiYTlkNjk2Nzc1MSI6IiI6IiI6IiI6Ijk1Y2EzMWE3ZWVlYmRkMjM0OGNmMWQ0MzQxMWQyYzM1ZmFmZmRiY2FlZDQwNTJkNTBjZjkyZjBlOWQyZTc1NzY4NmI3MmQ2MzFhNTZjYTk4YjY4MjE1ZTcwMTRjZmVkOTQzYWJjMWUxMzQ0MWMxZDY2MGYxM2FkZjIxODhkMDk3NTE1NGUxYjQyYTU5MmE2MmE0M2I1N2Y4MmNjMjFhNDI4ODczYTkyZmRhODNhYmU0MjBlZmI1MjMzMTQwZTRkNmM3ODUyY2Y4MWU4NTk2MWZhNWM2MDZjNWYzM2UwNjA3N2Y0MTRiMGY4MTRjYmJlNTBjYzYwNmJmZmJkNDc0MzY0ZTYwODgyNWZkYWFmNWU3NGQ4NjI3OTU1MzliZTg2OTdlMmNlMDVkNzE0NDY4ODFlM2Y2NWJiNTRlZDk1ZTk0MTU4Njk4OGY2ZTBjMzRlMWJlZWY0MjY2OTZlOWRiZDlhMjE0MDEzZDgyNmE4Yzk5YTJhNjg2ZDg0MDJjNTgzZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjYyYTI2YzEzMjdjMGViZjhiNDA2OTFmYjRjOGY4MTJlODFmNTQ3NGIwYzdkYjcwYWE5NDI0MTEwZmVlM2EwNWU0MWMwY2YyZTg3MjEwZTM0ZDBjNmJmZmMyNjliZjJiYSI6IiI6IiI6IiI6IjZlMjBhMDBkZjFhZjM3ZTZjYzU1ZTU4MGJhMjEzMzUxMTFlYjM3NTM5NTM0MzYxOGRmN2Q2MzBiOWRjMjM0NDk2ZTM5NjRjZDQ1YzVkZTM0YmRhNDZhMjg5NjRmNjE0ODcwNGMzMDkyNWZlZWFlY2FlMDU3NDAzODQzNGNkMzNjMWRkOTQzMjA3YThkYmRjZDcyZGM5ZWNiNzZhMjU3MjhiM2MyYThhYzEzYzFkZTNhMTI2ZDdkNDNhNDZlMTJlMGQwY2E4OTkxNDY5ZTU4MmI3OGVmNmFhNjkxYjVhMGUzZTg1Y2JhN2Q3YWVhM2MxZThlMDMxNjc0ZTg1ZjVhZjM2NTQ2ZWIyYTBhMjhkNGZmYmFhMzE2YTlhNmM5NDRmY2UyOTFjYzBjMjM1ZTg0OTk4ODJlYjYyYjIyYjU0OGFlMDdjZjk0MzAzMjllMDA5ZjQ0NDNjYjk0ZjdhMTRlODY2MTE2NmIwZDY4MWRjZWM4NjcyMDVhYmVkNDgxNDVlOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImZkNTRjZjc3ZWQzNTAyMmEzZmQwZGVjODhlNThhMjA3YzhjMDY5MjUwMDY2NDgxMzg4ZjEyODQxZDM4YWQ5ODU5MWY5YzAyYTFkMjA1Y2RiY2RmNGQ5MzA1NGZkZTVmNSI6IiI6IiI6IiI6ImY2ZDViZjU5NGY0NGExYzdjOTk1NGFlNDk4ZmU5OTNmNjdmNGU2N2VmNGUzNDk1MDk3MTliN2ZkNTk3MzExZjJjMTIzODg5MjAzZDkwZjE0N2EyNDJjZmE4NjNjNjkxZGM3NGNmZTcwMjdkZTI1ODYwYzY3ZDhlY2QwNmJjZDIyZGZlYzM0ZjZiNmM4MzhlNWFhYjM0ZDg5NjI0Mzc4ZmI1NTk4YjlmMzBhZGQyZTEwYmRjNDM5ZGNiMTUzNTg3OGNlYzkwYTdjZjcyNTE2NzVjY2ZiOWVlMzc5MzJiMWEwN2NkOWI1MjNjMDdlZmY0NWE1ZTE0ZDg4OGJlODMwYzVhYjA2ZGNkNTAzMjI3OGJmOTYyN2ZmMjBkYmVjMzIyZTg0MDM4YmFjM2I0NjIyOTQyNWU5NTQyODNjNGUwNjEzODNmZmU5YjA1NThjNTliMWVjZTJhMTY3YTRlZTI3ZGQ1OWFmZWViMTZiMzhmYmRiM2M0MTVmMzRiMWM4M2E3NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI1ZTkxOWQzNTMzNTc2NzE1NjZkMmM2YWI2ZTFhY2Q0NmY0N2QwYzg3OGZlMzYxMTRkN2ZlYTlmZWNiODhhM2EyN2VmY2E5ZTNkMWUxYjA5ZDdmMTY4MzJmM2FmNzUxNDEiOiIiOiI0NDJmMTdjYjNjYjE0ODJhMTk3MjliZmQ1OGY0NmY2ZWYxNjI4NTU1NDg5MmMwMWIwNzE4OTY4ZDZlMDExMDgyIjoiZjk1NTdjOTNlYjg0MWJmZDdiNWQ0YjcxZGE5MjhlZmNiZTNmNTVlMTg3MDQ5M2VmOTBkMTZlYjIzODM4MGQ2NSI6IjM2OTAyMTM0ZjE5ODljZmU3ZWI1MThhNTZjMDZhYWRhOTg5OTdkOWJhY2QwNGFlZTIxZjg3OWE1N2I1MTVjYTNiNWUwYzJkNWZlZDA1Y2ExYThiMDU0ZThjNDZiMzg5ZDlkOTE4NmZlYjBhYmU4ZTJlNjBiM2EyNjcyODFjYzViNGI3MzQxMTE2Y2VkMzVhMGUwN2JjMmIwMzMwYmJmZDhiMDdmMDcyNDhmYTZkOGZjNWM5ZGYxMzQ0NTMyNDE2MmJkZmEyMmE5MWJhNzE0NTNhYjEyM2M5MmY5MWM3MGI4YmQ1NDBiM2IxODBiMTFhYjQ1YWUyYzU5ZTU3YzdjNDNkYWI3NTc2NTk0OTU5YTk2ZWI1MDJkMTgyMjY3Yzg2NTc2YjE4NDZjY2VlMWE2OTRjYWJkZmI0MmUwYzgyMTQxOTJlZmI1MDI5MjZmYTNjMjdlZWQwMjBiN2NjODg2NmE1YWY5ZDgzOGE1N2U3OGJmN2FjZDIzMGUxZjRkODM2MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI3YTVkMWVmYzliNzA0MzA2MGNhYmQ2N2RlN2ZlMjI3NDBiY2Q2YThjZWIzNTVkNjlmMTE4ODI5YTJiM2M5MjAwNmE1NjMzZTYxM2Y4NzY5YzExMTRiMTgyMmZmYjU0MDgiOiIiOiJmMmFkOTYyZDk5MjQzNDQ2ODY4MWM2NDQ1ODc2Mzk5MDFmZjc0ZTJiYmRkODc2MTk2MWVjMzRlZGM0YTBjMzZkIjoiNzVhYWUwZDFiY2E5NDg0Yzg5ZmM0ZGUzZDFiMzQyNzVlZjA2NTY3NzVmM2Y4Yzk2ZjJiYmM1MDQwMWFhYTcxOCI6IjVjYTIxYWY0YjM5OWRiMzhmOGI3NGE0MDZhYWNlNjlmOTk0NjkxZjI3NjViYjljNDdiMjQwMDAwMTUyNzM5ZTA1OWIxNjNjZDAwN2RlNWYyOGJiYTE3ZTQ4NWZjZjlmZjZmNDFmNzZlOTM5OTg1MTBlMzAyMjgyY2JkYmRlMDlmZThiMWE5NjE4N2U1N2M5YTNkZjk0ZTJlNzQ4ZjIwMDI2NDc2Y2E2ODJkZmE4OTBiNDc4ZjdhMjFmNDkyN2Y3NGY5OWFlZGQ5YWU3ODJiYTEwZmNkYTFkYzM0YzMxYjRmNzg0NzIyZTAxY2M0Njc5NzM3Mjc2ZjU2ZGYyM2M1YmQ4YzY5ODU3OTdiODNjMGNjZGUyYjRjN2E2NWM2NTI3NDVkZTdmYzhhMjM1YWQ3ZWQwZjQ1NmYxZTc1NjhiMmRhZDQ3NWYwYmM0NmYwMmE3ZjM1YzA1Y2ZlZjlkMGUyYzc3M2ZmODk1ZTI5MWEyY2ZjMjQyNGIxMDYwOTZkODg2NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI2MTE1ODZlZTQwY2IzY2E0YTkyMzhjZTExMmEyMzc0NDliYmE1NDIyYWM5YjE4ZWE1MzQ4MDg3NTMzNGQ4ZmEwMjZkYTlkOTZjNGU4N2Y5NGIyZjlhN2MyNjFiZTNlZGIiOiIiOiIyZjgzNWMzMzZhM2FhMDAxOWIwYmY5NDBjMjQ2NDNiYzhmY2E1OGM5Y2ZhNjUwOWFhOTI0MWRlOWUwZTFhMDQ2IjoiMTkxMWE1OWM1ZjI1Njg4NjBhZTcxZTgwMzY4ODg4OWRjNDRkMTRmZmIwZDkzZTMyNGMzOWYzMmQ5NWMxYzNlYSI6IjI3YmY0MmY1MDQ3NmQ4YTJjYzIzZjQ1NWU5ZWY0NzdjYjhlOWM5MGYyZTk3YzhhNDgzMDkzZWJmNTViMmFlZTAyZTAzNTZjZmY5MTllMmVjOTgxMWI0MmM3MzQ5OGE2YzJiOTZhYTViNzYxZWY3ZTcxNWNiZjY2YWQyZTNmZjhhNmM5MjQxOWRiZjJlNjUzY2U3MGE4N2I1MWUyNmQ5ZjYwN2ViMjViNDViOTFmOTQ3ZDAwMjZhMzg5NzcxNDNjOGJiZDk0MDc2ZTY2M2I5Y2VlMzU1MDViNDhlNDUzZTdjY2E4M2U1NDA5NzVhZThhNTNmMjYzOTBhYTYzYWFmMWUyNjY5NDEwY2M4MzQyN2VlYTA5NDI4Nzc2YTJkNTIwZWViZDE3MDYwMmM1MmRkNDkxYzk4MDQyMDE4YTAzNzJhMGIzOWNiNTY1Y2JlNWU0NzRmOTI3ZjkxNTE1YTZhNzQ0NGZkYmUxZDg5ZDhhZTJjMjQ4MmEwZGViOGZmMjM2ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI4NWIxZTVkYTU5OWVmZDRhMjBmZmNlZmQ0NzM3ZmEzZWExZDJiMTRiZTMzODYxYzJhNGFjM2FjMmE0OWQzOTQ3YjE0Y2YxOGY0ZmY0MjZjYjYzNDVmMWE3NjUzZTk2MzAiOiIiOiJjZjViYmY5OGQ4NTc3MDc3YjBiODQ0NzVkZWUwZjBlOWFhOTVlZWRkMWQ5MTY1MDdiNTIzM2I2ODhiY2M4NTZjIjoiYjMzM2VjMTExZTFlN2Q3OGM5YWM5MTZlNDIwNzA0ODMyNTM5ZDJkYjQ2YWNhM2JkYzQ3MzJlOGNlNzJiNWU4MCI6IjQ3NzNkMzJhOWZiYTM3YWNjNjkwMGYzYWM3MGY2OTc4ZmYxZTQwMDM5ZDZlMzI4NmMyNjRmYjdmYzU5ZjFiZmUwMTg4Yzc5NzkzODBjODkyMmJkZDBlMzYzYzhlMDlhNDlmYWVmNTllYTg1YTlmMGU0MDBiOTRjNzRhOGE1MDY4N2U0ZTUxZTI1MjY2ZWFiYjg2Mjc2ZjIyNjI4ZDBkMmUxOWM1Njk2Y2QyMjFhOWI4MGY5NDA0NWQwMDFjYTRjMjBkYzkxNmNhMGZmMjJjOTNhNDFmYzgyMjkxMmRkN2UyNDc5MjdmZDQ1OTgyZTk0ZDNkMWZkZTc3Y2JlNzhiZWVjYmE4MzBiNzUzMDc5MzI2YWUzMzI3NGYxM2ZiN2NkODc1ZTg1ZmI1ZTllNzAzZTYxY2JkNDFiYzRhZDQ3ZDdiNGQxNGFmYzg3M2EzOWRkODEwYWQ4ZWVkOTVhZGZmOGRjZTNhZGI3NjU5YjdjMWQ0ZTNmNjI0MDM3Njc5NDBiNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI1MGY5ODZmNmVmYjQxM2ZiYTNlOGUwYmViODRkNDk0OGMyZGIwNjYxYWI4ZTA2NGQ5ZmVlOGIzYzJmMGE5MTBmYzM1ZDM3NTEyZjg4YmRmY2ZkZTc5N2EyMWEwMDZlMDEiOiIiOiIzN2M3YjA4MjIyYmE2M2YyMTM2YmIyOGY1ZWMwOWI5YTg5OWI1NjM3MTYxNWJlNDFiZWY0OWEwYjY0MDU5MGU0IjoiNGExZTM0YTVkNjBjYTA4ZTNlNmMwZjFiODY1NDdiYTJkMTJmYTI5MzI3NWU3ZDc1ZjgzYTBiODQ2ZGFhNDhkZiI6ImUyNzczOGM2ZmFlNjYxMjVmY2FmNGU3MjVhMDg4MWQ1YTQ1MGZiNWIwMmE1NTA1N2Q2Y2I3YmFiZDkxZDUwMmM0ZjRhODQzMWE4MzM1MmY0N2VhOGU1ZmQ3ZTgxNWY1MDgwZDE0NDMxOGExZGNiYzc1NWUwYjkzNTc4NWNkNTM5Nzk1NWRhMjJlM2ZmNjMzYjM0YTY0YWM3MmIyZTZiN2M1MWU3OGZmNTUzNzMxZTZlOGRhOTExZDE0N2E2ZTA1YjM2Yjc0ODk4Y2FjNmQzMTcxYmM4NjUwZTQ0NWZmZDE5ZWRlMmFhODIxOGJlMTc2NzEzMjFjMTg2NDY1ZDg1MmRkODBkNzMyOTA1NDZiODhlZjdhOTc4YjQxYzRjNTQ5ZTljN2ZjNmVmODZlNDcwODQ3NzhmYjVhZWQ1ZDQxZTc5NGVlMGU3MDBiNzdjMDMxNGEzMDdiMTBkZjY5ZGFiYTYwNWYzZmRiZTJkZWM3MDhiYTBiMjBkNmI2NTBiZWZiZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI2NDFkYmNiZjk5YjYxNDM3YzJiZjY1YTEzZGMzZTAzMjRlYjk0MDMzNWRhMTIzODcwZDk0Mjk2MzZkZmM4Mjk3OWQwY2M5MTNjNzNlOGE2MzIxZmMzZWI5ZTk3M2MwYWEiOiIiOiI3MjU4MGMxMWE4N2NlNmI0MjA3OTA4YWFmNWJjYWFhMWJkMjE3ZmNlM2U4YmMwNzI2NTY4YzY0NjM5YjcwNzY3IjoiY2Y5ZjQ1MjdlMDc0YjcyYmU3MzU1NThkY2FhMWZjODJmMjZhZTI4NmJmOTQ0YjQ5NjQ5Zjc2OWJmNmZhZjQ5ZiI6IjM0NTM5NTcyM2QwNDhjMjI3MGMwZWFjOTkwNDk4Njg5YmNiODYyYTQ5OTZlODI5OTViNGU3MTY5ZTY3MWViMDNiYjIyNDJjNDY2OWM4NzRjMWFlYWZmZWM1OGFhNjUzYzdkNzQzMWFiZDE2NTBmMGNiY2U4Y2Y1ZGI4MzE2NjkzZjNlZDUwMWZkOWI0OGMxYTQ0YjM0Zjc4NzhhYTM4NmQ2NWFmYzMxZjk0ZjkwOGEzMjJiMDNkMDZjMmExMDc0YTAzYmQyYjU3OWNhZmIwZjdjZWU2ZDY5MzQ1ODhhZTFjZTllNGVkMzdiMDM3MzdjNTUzY2ExOWFmNGI0NmI1ZTQzNzY3Y2VlMmU0NTlhYjkxNDA3ZGY2Y2ZkMTNhNmYxODZhYmRiMTQ4Yjg1YTVmNDliZjkyYWM2Njc0ZmIwNTVjN2ZlMTIzZTkzNTVhMGQzM2RlMjgxYzAzYTU2ZjkxODkxZGQ0OTZkYWJmZDZlYWE2ZmZmNmM5Y2ZiNGU2N2M0NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiJiOWMzMDVhZGE5NDNhNjRhMmIwMDQ5NGU4NjlmOWE2NDAxNzNlYjFjMjUxOGRkOWJlOTNhYmMzYzkzYzdlNmI1YmQwNjI3YTE5OWQxNWY3N2IxODg4MjRkZjAwZDU5OTciOiIiOiJmZmM2NzYwZjlhZjAyZDM1NjY2Mjc1YzA3NGVkYTAzZjUzZGJjYjU2OTA1ODBiYjI1NzY4YTY1NjZiMzI4ZGZiIjoiZjI2ZjQzNmE4MjBlZjcxNTk3Yjc1MTM0YjhkOWRjYTZlOWE2YWZkOWI0MjkyMjJhNGM5Yzg3OGYzYjkyNzE2ZSI6ImU1NDEzYTIzNDg1OTUxMWNkODM3MzEyYmIzMWFhYzRkMzE5NjJjNWY3ZjI3YWVjNDc0MTdmMzY3Y2E5OWI4NDAwYTQyODdlNjA0MTJmYzM1NmNiNDBkOTZkZGY1Y2I4MDEyODVlYmNhNDJiMmY2ZmU0YTcxMTQ1MWMxNTc0MTc0YzU4ZGNjYjJjZDMzNDJiNzA5MmExOTZhYzdkMjg4MWEwOGU3ZjVkZTkzOWNjYzhmNGVlZGM4Zjg2N2M4MWFhODg2NTVkOTZhZTUwZjYxODI3OWQ1MDA5YmEyYWM0YjFkZjRlNjMwMzBjYzBlYzM1NDFiNmE5NGJkOWEyYWU1ZDFmY2Y0ZDg0NzExNGE3ODNjOTk3YTdjNmI5ZDU0OTAxMGJmN2I2NDlhYmVmNjkyY2RlYTNhYThhZGExNDU3NGUwZjc4YjdmY2JlMTdiNTg3YWMxNDk4MGU0MDI2NGQ2ZGUwMzBlNDI5NTg2NTkzZDVjZTNhZTU3MWY5NTQ1NGRjZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI5ODc1ZGJmNTliNzYwZWFiOTk5OGJmMzM0MTg0NzkxMDUyNmQxMDA3MWRjMTc5Zjk2MDgxZGQ3OTNhNjAwMTkzNjg4MWU3ZjM5MDc1Y2QzODIyOTNhMWFhYThjODQ1ZDIiOiIiOiIxMTk2NTgzYTk5YWZlMWQzNzdiMzQ0NTg1YzgyNTJhMDY5MDcwNGI4ZjdhMmI3NTgyMzg3ZWM5MWE2MGZkN2U0IjoiMjAxNDdhODhlMGY5ZjFlOGNhYThjYjE0NDg4YzliNWMzOGU1NTIwYTM2YWU5MTNiNDcwM2QxNWFmMjcyMThkZCI6ImM4MDhmNmYyOTY2ODNkMjYyMDgzNTlhNzY2ZmU2MWJjNzBlZThiNmVkOWZmYjk0Y2UyNjk1NzhmYjU1NjhmZTIzNThkNjAzNjM4MzI0YjYzYjI5YmIzNmFlNzFhNTQyZTM4ZWU2OWEyYjkzYWQ3ZTRhODg3YTI3YTI4NTJjZGNkNTQxYTVmYTZkMGM4YjA4N2FhMTE4NWJkNTc4ODI1NmU3ZDk1YzJhYTJkNWMxMTQwN2I3YmY3NjJmNDE2YjAxZDhlNzQ3YzQ1Mjk4Zjg3NTIwMGEyZTY3Njc5ZDZkNWZmN2E3YzBlNTBhMDEwNjkwYjE5MjBkZjFiYWYwYWZjZmFlZTdhYjA4NjIwMDRlMjNiNWFhMWZmNDdiODI3M2Q1MDNiZDc0YTU0ZTdiMzlhYzdlNmQ2ZmIwYTU5NGQzMDUzMWNhYjhhNjdiMjI3ODM0NzBhNjVmMjRmYWJhMWMyMzFiM2JhNDVlZmFlOWYwYmUwNGUyMzM4NTI5Y2ZlYzAwOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiJhYzkyYTZjNzkxYWJhMDQwNmQ2ZWE4MjU1YzNjMDkwMWViNzExYTQyNDUwMWMyYzJjODQ3MDc2ZDc4YmRjZmMzMjY2YjdjM2JjNTc4Yzc1MDFkYWFjNmRkYTgzNjZkNGYiOiIiOiIxMzM3OWE3N2Q4NGEwYzRjZWM5NWU2MmFjNGM4YTk4Y2VlZGUwZDg5YjhiZDMxNzM1MmE5NTMwMDk2MzQxNWVkIjoiMDRkNDdlYzg5YTNlMWI3ZjIyNTgwMTY3MzMxMjI1YTAwZmYyNThkYTcyNDQ2MjQxYTZjMDljNTE3ZWU0ZDQ4YyI6ImMyZTY1Mjg1ODRjNmRiZWM0MzZmZmVjNDA3NWZkM2FlYmU5NTNmZGMwYjQ2YjRiMjI1YTNjMjg4NmU2MGQyMTg3OWU2Y2NjZTM3NDZkODgxZjZkODBlMzM4NzZhZmFkNDM5YWI5ZjY4ZmNjNDU4NDkyZGUxMjgxMWZiZDU3YWM0OWQ4Njg3NTRkYTE5Mjc5YjRjMGEzODk3OTIwMWE1ODg4ODRkZWY1Njc3MzkyZGVjOTdjYWZjOTRiY2NmODkxNGQ5Zjc4NTc1NzExYmI2ZjJhZGY0MTE2ZGI5MWM4YjU0ZTM2ZTlhYzJmNWUwMWNhZWJkMzAwYWNkN2JkNDVlYWRhNjlkMjBmMWI0MTM5MDEzYThhNjE0MDY5MzE1YTFjOTkxMzdhNmYyM2UzOGY5MWMyMTBlMGMxNTZjNmZiNDk4MDU2ZTgyM2RjNDFhMDUzNDhhYjQzYzJmNmY0Y2UxODhkNGUwNWExM2QzOGY4MDI1NzMxYWMxNjcwOTQ5YTA0MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI2Mzk1NGFjN2EwZjk4OWE0NThkMmI0YTZiNzAxM2RkNjY2ODM2MjQ1ODRiNTQ1MDYwYmQwM2E1N2I5MjgyMmVmNDIyNzY0YmJiYzM1ZmE1ZDQwZDM0MTQ1YWZlNDRiZWMiOiIiOiI3YjI1ZDg3NWRmYjAzMzMzY2MyN2I5ZDQyODZkMDBhODVlYTU5MjFmNGI4YTQ3MTdiOTU3MzQ5ZWIzNTA5MDUzIjoiOGI3MGQyOGM1YzgwMDg2YzBjYmJkMDEzMzdhZDQ1Mjk3YWYyNzFkNGJhZmM3NjRiMGZjNTcwNTcwMGNkNDE5ZCI6IjI5Nzc1MmU2MWM0ZWJjNGUxYzY4MzkxMzM1ZTJjZGI0OWIwZjE5ZGFmZTM1OWU0NTFmODE1OGZiNzk1OGQzMmE5ODQ1NWE4NTIwMDJkOGYwNTE2OWY0Mzg4MTZhZTZmY2NiYTFlYWU0ZDFmZGQ3YTExNzZiMDQ4MzFkN2NlODkyZjcxMWVjODI1MDYyZWExYzZiMTIxNDRiYmQzYTBhY2E3ZjkyNTIwZWJiODdhYzYwNDVkMmFjM2E0YTc0ZmE1NTk5MjZmMGRhY2ViNTlkNDRmZGIzOWY1ZmMzYjg3N2YzNDI0MTUzMWU4NjNjMTUzMjg2ZjNmMWIyYmEyZGI0ZTJjOGUyMzQ0YmU0MGMyYTdhOGNkMDFkYWYxNjg2OTZjZTE5ZjgzZGRiNjRkNTBlMjMxM2U3OGM1ZGZjZjA3N2YyNWU1YjRkNmY2ODcyNzkxMTljZTg1NmQ0MTMxYTYzYWQxMzNjZWRkMDIwODgxOTM5YmY3MGY4MmVhYmZlNDZkYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiZDA5NDRlMGEzZjM2MDRhNTg4MjcxYzhlYjY1OTEzYWQ5YjA3ZWUyYjI5NjIwZjgxMDZjYTcwZWMxMGFlYjg5NmJjOWIyYjUxOWM3N2ZlYzVmYzQxOWU5NTNjZWIwYmU1IjoiIjoiZDU4NTkzZjI0ODhmMGEyOTJhYjU1MmRhYzAwNmM5NGIyMGZmNTAwZGQ1N2FmMzJiZTgwODkyMWE1ZWUyNTFjMSI6ImVhOWU1NzljOWRjYTY3ZjA3ZmZkNjdkMjQ4M2VjMWZhYzNkMmVjMjJmZWZmZjczYzdhYzlmMTI1ODg4ZDdhNGIiOiJhZTczNmRhNjYzMmE3ZDhiZGNjOWUyNzljYjdkM2Y5MTAxYThmN2RkZGVmZjI1MzI3N2QxZDk5YjQ1Yzc2YTFhNWMxOTMzMzRlOTEyYzNkZmRmZjFiYzM4OWIyMDljM2IyOTM1OWE0Y2E1Mzc2NWExZTQwY2I5MDBjNjA1NWQ4YTI4NWNmNjNlYmVjNzliNDYwMTllZmU5NWQ1MTk5ZjIxNWYxMTk2MWYzMzE5ZDIyNWJmM2Q2MDczNGZiZmJmMzU5M2FiMTA1Y2VjMmExN2UzMDhhZjQ2OWIzMjIwZWY3ZjA1NTY3NTM5NmQyODllNmY0ZjgwMDk4ODFjOGEyYjRlOWRlODhkNTNhZDEzZThiZWQ4YjM4YmU2ZDg5ODhmNjE1YjQ1OTBmZGUzZDkxY2FmNTBhODZlYWMzZmJmMjk5MjQ3NDMxNDU4MDM5NzhkMjYxMTMyYjU5NzVhOWYxMDg0OTkyNTAzMTRlMDk4ZTU3YzU2ZTJmOTMyNzMwN2NmZjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwwLDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjFlZjUzNDY0YmM3YTQ0MTIyN2EyN2VhN2I1YzU1OGRiYjNmNTA5YWFmODgwMjEzY2RlZjdlOGY2YTFkMjg3YzE3M2NkNWIzMTQ4ZDQ2YzQ4YzgzYzVjYWQzY2NjMWY1MCI6IiI6ImIwNTJhNjY5OTJmZDhhOGNiMDJjNTkzZWRmZTQ3NjZmY2JjZDM1MDVhZjI5ZDY5OGUxZjRkYjM5OGFjZjcxN2QiOiIzNzMzMzQ0ODMxMWMyYzZlZGVlMTlhYWRiOGYxMDM2Y2I2MGNmZjJhOTQ1YzFhMGVhMDg3NzEzYmZmMzFlOTE1IjoiNGVhNzA1NDY1OWNhZTFjYzE3OGVmNDMxYWViYjY0YzJjOGRkYTNhOTY1ZWE5NDBhODRjMDBkOTc5MGUyZTNhMzM1MjEzOTVjYzRkNDkwMzg5OTRhYTRjN2RjYWYwYjUyYjQ0Mzc1ZDkzYjYyNWFjMjI4MTk5MWE4NWE1YWNlYmYzZGU1NTIzNTVlMTdiMzUyOGZhZjM5ZDM5MmZlZDk4MTQwMGYyODU0MGY1Y2E2NGE0ZDJlZWI5NTJjODg4NTZjOGY3Mzg4YTQ5NjExODEwOTQxYjQ2YjEwMDBlZTRhOGFhYWFkY2QzOTk0NGM0YWJjYTkxMTBmZDY1ODAwOTNmOTMwM2Y4NmE2ZTEyOWQ1NmI1YWVmZjU0MjJjMjI2MWFmMzM1MjNjYzZhMTc0ZTA3ODJlMTNhMDI2YzAwM2MxNzQzMGI4MzcxYmJmYzNkNTFjM2UwNmZiZGMzMDc2OWEyNzhiMTA5MjM4YmJlMzgzY2Q1NTIzMDUzZmU1ODliNzJlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiIxNDE0OGQ2OWQ1ODNkNGMxNzU4YzMwN2UwZWIwYjc2MjUxMTE2NTgyM2ZjNTQwOTZmOWRhNTUxM2U4N2RmNTNiOTZhN2JlOGQzMWI4YTM4ZjI0YTgyZDg0NmIwZTEzZWYiOiIiOiJlMDVmODFmNjQwMmM1MmRmZjVjMjIxYTJmMTkxMTU1YmI1NmFiZTE2MGNlN2RjOGE2YmVkZmEwMjkxOTVhNjEyIjoiMjE0Nzc3ZTNmYWVlN2Q5NTNiNWM3OTY2NzVlMTA2ZDUwY2RjMTI4MzZiMzExNGQxNDQ0N2FlOTFjZWEzYzFkYiI6ImViMDQ5N2IzMmFmOGE5MWVkMzk1OWMzMWIwNzliOGNjNWMzOWRiMzEwMDkxMzMzMmZmZmJiNmIxZDVlYmJjZGM5N2Q2ZTY3YzkzNGYzMzM2MTk3YzliNzMwZDgwOTk1YTdkNzQ0NWUzNmNmMzA0N2NhYjIyODk1ZjI0NGNhYzgwM2VhYmQwMDFlYjFmZjVkNTY0NWE4MDNjNDFlYTZkZGU2Yzk3MmI0N2RlMDM3MmNlOTAxNjY3ZDAzZTJlMDJhYTBhNWFlYTgwOWUwYmRjNzQzMDQ0MDM2NTkwODQxOGNlNjA2NmMyNDE5MWFjZTA1ZDZhNzk3ZWY5Yjk0NDA5OTg5Y2FjYmI5ZDllYzMxZjNjZjAxMTJiNzJlMTQyMGI0N2UwYzE4NGE4YWFjYzIxNGQ1NWEwZDVlMDg2OWQwOTMwM2U0MDE0ZGUwNDMwYzA3MzgwMDA2ZWE3NTk4NGU2YzMyYjA2MDY3ZDdkN2I5MzFlMmI3NDY2NmI0YjU2OWY3MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiMjdkNDcwMjBhY2MzYTgwYTU1MTQ5ZmEwZWY0M2Y2ODQ4NDNiYTg5ZmRhNGJmZjFjMjlkMjBiYWEyYjIxOTU2NzgwNTY5YjdmYTBjNDA3OGQ5ZmY3MWEzNzkwZjFiZTNmIjoiIjoiYzAzZWEwYjg4ZTJmOWI1M2Y5MDJiMjI3NDZiZjRkZGUwOTQzOWMxOTBhN2E2MzhlM2NiOTkwZDg2NzM5ZGJlZCI6IjNlZjA1ZTcxNDg3Y2RiYzIwOWI1YWI2ZTgwOGU1NWYwYTkzYmNjMDJkZjc2NmIwMWMxYzFhZTU4NzViMTAyM2UiOiIzZWU0OWUyYTU4ZDgwMGQ5MjJjZmI2NjI4NGRhODRiYmI1OTQ0Yzg1ZjE5NGQ5NWYxMTU2YjY3MzM5MjEzMmE0MzBlNDdhZTc0ZjFlZDdjMWQwZTYzMmQ4Y2I2MDRjODg3Nzc0MzdkOGYzN2U3ZDA0MjhiODM0NTU1YTk2ODAwNTQwYmY1YmNlNmY0MzAzMjhmZDMyOGJhZjRiMjJiN2Y4ZTY2M2MxZDg1ODNiYzAxMTkyNDg1ODg4NDA1MTBlMTEyMDNjZjQ3ZGZjNGY2Y2RmODM0NDE3MGEzNDFmYmI3ZDkzOTk5YmE4NmJlM2ZiOTRkOWMwMzkyMmZkM2Q3NWUzZmQ1YjQyMzY1YWE2MjYwNmUzNTI2NzZiMmEwYzUxZmIwMzBkOGQ1NjA1ZThhYzZiYWMyYjRmODQxN2Q4ZTA2MDE0OGUzZDRiYTY3YjMxZTVlNzA0ZDg2NmJjODc3NDFiYTg3N2QxMmIxMGU4YTliMzdmM2ZlY2E5MDhmZTFmYzQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwwLDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6Ijg4YjY1NTBkNDkxODJjYTczMjFkODAxNWY3ODAxMjEyMjNhOTMzNDNkYWJhZjIxOTc4ZWUyODE4ZTdiY2U2NTkxZDMyYjQ4ZWI0NjQyMDY5YWRjYWE1OTg2MjI0ZTZkMyI6IiI6IjgwOTYzOWY0OGViZjY3NTZhNTMwZTFiNmFhZDIwMzYwODJiMDdiMTNlZDNjMTNlODBkYzJiNmVhNTZlNzBhMDQiOiIzMzk1OTAyZTAwMDRlNTg0MTIzYmI2OTI2Zjg5OTU0YTVkMDNjYzEzYzNjM2UzYjcwZmQwY2JlOTc1YzMzOWE3IjoiNGE1YTI5YmY3MjVjODI0MGFlNjU1ODY0MWE2YjhmMmU1ODRkYjAzMWVmMTU4MTI0YzRkMTA0MWZlNTY5ODhmZGFlZTkxY2ExMzkyNWZlZTZkNWU1NzQ4YjI2Y2MwMjc1ZDQ1ZWYzNWFiYjU2YWQxMmU2NWFhNmZlMWQyOGExOThmNWFhNzkzOGZjYTQ3OTRjMWEzNWY5YTYwYTM3YzczNjBiYWY4NjBlZmQyMDM5OGM3MmEzNmIzYzQ4MDVjNjdhMTg1ZTJmMDk5ZjAzNGI4MGQwNDAwOGM1NGQ2YTZlN2VjNzI3YjFjYWNlMTJlMDExOWMxNzFhMDI1MTVhYjE4ZWEzZDBhMzQ2MzYyMmRkODgwMjdiNDA1NjdiZTk2ZTVjMzAxNDY5YjQ3ZDgzZjVhMjA1NmQxZGM5MzQxZTBkZTEwMWQ2ZDVmMWI3OGM2MWNjNGE2YmZkNmY5MTg0ZWJkZTdhOTdjY2Y1M2QzOTNmMjZmZDJhZmNhZTVlYmVkYjdlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMjU2LDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjJjZDk2OGJhY2RhMmJjMzE0ZDJmYjQxZmU0MzM1NGZiNzYxMTM0ZWIxOWVlYzYwNDMxZTJmMzY3NTViODUxMjZlM2RlZGYyYWY5MzgyYTFlNjUyMTQzZTk1MjIxMmQzOSI6IjU5ZmE4MjM1MTA4ODIxYWNjYmQzYzE0ZWFmNzY4NTZkNmEwN2Y0MzM4M2RiNGNjNjAzODA0MGIxODgxMGQ1M2MiOiIiOiIiOiIwNjA1MWNlNmIyZjFjMzQzNzhlMDhjYWY4ZmU4MzYyMDFmZjdlYzJkYjhmYzVhMjUxOWFkZDI1MjRkOTA0NzAxOTRiMjQ3YWYzYTM0YTY3MzI5OGU1NzA3MGIyNTZmNTlmZDA5ODYzMjc2OGUyZDU1MTM3ZDZjMTdiMWE1M2ZlNDVkNmVkMGUzMWQ0OWU2NDgyMGRiMTQ1MDE0ZTJmMDM4YjY5YjcyMjBlMDQyYThlZmM5ODk4NTcwNmFiOTYzNTQ1MTIzMGExMjhhZWU4MDFkNGUzNzE4ZmY1OTUxMWMzZjNmZjFiMjBmMTA5Nzc0YThkZGMxZmFkZjQxYWZjYzEzZDQwMDk2ZDk5Nzk0ODg1N2E4OTRkMGVmOGIzMjM1YzMyMTNiYTg1YzUwYzJmM2Q2MWIwZDEwNGVjY2ZjZjM2YzM1ZmU1ZTQ5ZTc2MDJjYjE1MzNkZTEyZjBiZWM2MTNhMGVkOTYzMzgyMTk1N2U1YjdjYjMyZjYwYjdjMDJmYTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiMDIzZjU2NzNkYWMyOWY2MjI0NTUxMGQwYTg2NjYyOWM0M2M2NGJmMzVhMGJhZDMwZjEyNzAwNTA4NzZjZmIxY2U4MGI2MTVhNWE0N2VjYjUxMjE3YTQ2MDc5ZTExZmQzIjoiYTZmNzk3YjE1NWQ2ZGEwMWY1ZDE1NWNiNzI5MTQ0MmUxYjgyZDQxOTBlOTNlMjc5ZmU1YjRhYWE3ZDA0ZWNjMCI6IiI6IiI6IjUwN2I4MjQ0NDNhZjVkYjI4Zjc0NjIyOWUwM2FiMDBjNzNjYzNlZTQ5NTZhYTE0YjMzZWRhMDBkZDJiOWI2NDVjMTMyZGFiN2RjZGJjNjU5YzhiYTBlMWEzNTc1ZmU3ZGJjN2NmOTY5MWY5YjcxNGFjYjFiMzNiZWY5Njk0MzAwM2M5OTJmNjYxZTA0ZmU5ZThiOWY2NDhmNGFmOWE1OGE0NWIwOGI4ZmE3ZmEzNzA0ZTZiZGMyODlhYmJlMTRhOGM3ZTE3NDdhNTJhYzkxNmMzMWVkMDc5ZGUwYjkwMDY3MmU2NThhMjAxMjc5ODI0ZDBkNzVhZTM1ZGJkZDQzYWVhYjkxNTY1Mzc2NWQ4M2U0NmYzNDdmY2I0ZmUzMzIxZmMyOGFiZDJkMGQyNmE2NjI2NjE1ODJjZTIxYjZkYzRlYTZkMWIyMzZlOTY5MmE4M2M4YmEwZmIyOTkxNTdiODA2MjNhZDRmNDQ4ZDI1ZDU3ZjUzN2IxMGU1ZTMwZjgwYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI5NmI1YmMxNmNlMGQxMDFiOTBkNTRkYTZjNGIzZDg1YTcwZWUxOWQ1NGNmNGNkZTNkMDQ4YWZiNWY3NThhNmI1MmVhMmMxMGMxNmZlYjcxY2VkZmFiOWJmYTllNDYyZjgiOiIyZmY0MTVlMjQzMmQyZTZjNDI3OTkxMGE1ZTU2YzBmNTM1NGE1YWYwMDk5MTMyZDg5MTk0M2I0YTg5MDFjYTZjIjoiIjoiIjoiZWNlYmU3MTdhZmU2ZGMwOGRiZmYzZWQ2MjZiYjA2ZGUwZjk3ODQyODNiNzBlMzc4ZGVjMTlkNGZiYjUwZTYxYjdiZTQ4Y2ViNjk4NTFiMmJiOTQ2NDFhZWM1MDI3ZDUzZDMxNGE5NjUwMGE5YmJiMzhhODdjOWFhNDJlYmViOTZhMjNjZjI5YTBmYmQ1ZTQ4YjM5OWRhYTFiMjRkYmRjODUyMjNmMjRiN2Q3NzMzMmJiMWExMzdlYzcwOWQyN2MwMDhjNzA5Njk2Y2JlNDRiYjJmYzE5ZmIxMGEyZmFkNGZmZDhhOWQ4OTQ5MmE5MzlmMjI2OGQxNTU3ZjQ0YjZhNjRlMmE1Nzg4NzgzMGZkOGJjYTFiNjMwNmFhZWRiZDdmM2Y0NzZiODI3OTk1YTFlZDEyMTM4ODQ5N2VkYzdlNjM5Yzg3ZDA5MmY2NTkxYTQ1YjU2NDdjNmMwOTFjMTVlZDM5ZjU5NGI3ZmM0YWU5MjMzMWY5NmRkOGUxN2JlOTcwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMjU2LDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjM2NGE4MzNhMjgzYTNlMGI4YTViNjgxZGFhNTBkZjk2ZDgwNmQ0YjU0ODI4ZjJiMDE2ZGU1ZDg4NTk3ZTYyODdkOThjYmE4ZmRhNDY0ZDIxYWExY2ZiN2IyNmI5YjIyNiI6IjM1YjBlNzUzNDAxNGRjMmQ3ZWIwZjIwZmY3OGE2OWQ1NTQ4ZDBhNjQxMjJkNDkzNmE2ZWQxNzdmYjNlYzY2YTYiOiIiOiIiOiJkZjRjNzk5Y2FlMzcxNzNhODFjNTQ1ZDAxOWZmYTMzNmVmMmMwMzlhNTg2NWFmNDI1ZTViNjBiYzNkNzIwMmY0YmMxYWFjNWE4NDAyMmJmNDA4ODA2MWFiZDVjMzlkMGZiMDQ3YmE4MDE2M2ViNWRjOGI5ZGQ1MTU5NDhmMTY5MTU4MzJjNmY3NmI0NWFjYzI1YjljMDFlN2Y3MDk1NWMwZWI1MWJmNTBmMDBiMjRiYjhlN2ZmNTNiZDdjMDUxYjUzZDhiMWE4MzdhMTdhMDAzNTVkN2ViMjFlNDNiMmI1YjI0OWRhZGNlZDM3ZDA2ZTcwNDdjMmZkMTIwMTI3MDVhNTlkMDUxYWZkMjYyNDVjZTNhNTlhY2I0Yjk5NmI3MThjN2RjMWFlOTY0YmYxMmIxZGIwMmZkNmMwNmFjMmZlYzZlZTVkZWIwMmMyYzgzMDExMGU5YmJiZDNjNzc4YTEzNmI2NDZjZTJhMDczODU2MzU1NWE4OTQwOWM1NmI4MWUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiYmI0ZDM4Yzc3NWFjZGVlZDY2MzI1NmFiYjc0N2VjMjUxODJiYzE2ZWZkMGRlMDJjYjRiMDVlNGFkNDc0OWM5MmJlNmYxZTg1NmU0MjNhOGYzYmZiMGMwZjI3YWQ4MjEwIjoiMjE1OTFlNzk2YjdlNjhlNzkxM2ZlZmJlZjQ4NzJhZjljMDYyZjIxYzgwMjNjMGRiZjQ3ZTA0MGMzYWVkMzczMyI6IiI6IiI6IjEyNTc1Nzc2ZTFiOWY1NGIwZmJjMzllODVhNzdiNjkxMjE2MGJhY2U0ZjFlOWYwNDllM2ExYzViY2I0NTJjZjliZTQyZWExMGMwMjhjM2NjMjQ5NDAxYWMyMzZkZDNiYWE1M2ZmMzI3NzM1NDM1ZjQ4NjlkMzI4OWJjOTQ2NWNjZjE1ZjgyNmU0ZTRmZmYwOTk5ODZiZGRlMGQwOWJkMTJlM2NhZGRjZjQ1MmVlZDZjYTEyMDZhZTQ1NjFiODQ3NzBhOWNjNmU5NjI1NjczMDRlZjc5ZDhkMzYwODUyOWEzYjVlNDA2N2ZhODNjOGMzNWEwNmYxODU1ZGE1ZjVlYTdlYjEwNmU0YzYwMTgxZDEyYmEwMGNmYmY3ZWFjNjBiZGEwMDU3MWQ5NWM0NWM5ZDc1YzQzYjQyZTI3YTIzOGFhNWUwZjAyYmJkOTZjZGU1OWEyZTU3MjkzNGE5OWQwNWMzOTlmZmRmMTVjNjVmMTczNzQ4NzM0YzUxOTk5YTI5ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiJmOWQwNDFkMjQxNThmNDgwNjAwYzM3NDdjYmZkODY4YzNmN2U5YWM3Zjc0YjM3NjBlYWU1MzIwODM5ZTRmNTEzMGY4NDc3ZDg4YjFkOTE0YzBkOGIzNzVkMDg5YTRjODMiOiJiMTQ4MDQ5ZjQwOTNmMDAzMmM3ZjEwNWRhZTIxOWFhOWUzZjcwNDg3Y2UzYTZiNmVjZDk5NDI5ZjY2YmU1NDA2IjoiIjoiIjoiODRjNThiZjQ3MzA2MWRhOTJmYThkNTZhYWIzYTc1NTk4NDI4ZjE4ZGNhNTA0MTkxYTUxNzQ2ZWI1ZmNhZDhmNzg0ZWFmYWM1ZWE4MWQ2MzZkNTc5ZTMzMGJhZjdkYjk1YzhkNzA2NDMyZTlmNTg1ZTg0ZGEwOTBjMGViNDBkY2Q4MTliZjEwZTBkNWI4NjAwMTUwZDE4NmY3MzJhZjUwYjQzMWM1OTZjOTIwZWNhNzQyZTY1NTUxMjlmZGY1ZGY5NmI0NDAwNTA4M2Q3YTMzMDg3YjE1MGQ2MzUyOWJlZTRiNmUxZWQ0MTg5YWUyZDkzY2VlOGRjNjcxZDQ3YzBlNzRiYTA0MjE4ZGZlMjczNDg0YTRiYjU5YTU3NzQzZWE1Njg0M2Q1MTZmZjJjNzJlZjk4NDE5OTZkMzFiMGQ2YzViZWVmMzY3YTZiNDRjYzg0Y2Y0ZDQwM2EwNmI0MDQwNmU0YzlmNDdkYTQwMWUzY2YzMTQxMjY5NGU2MTY0ZGNiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMjU2LDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImMxOGY1MTFmZmMzNDc5YTU5MzU3YzE3YzJmYjNkMWUwZTZmMGVkZGE0YzhiNTY3ZjI0MTMzMjNjMjAzN2YyZmQxNDBmYjBjZjMzZWI1OTUyNmQ4YzBkYmQyMTY5MzliNSI6IjczODdhYTNiMGIzZDkyYWZiMjk3NjFkM2Q1ZWExNmUzMmE2ODI5N2I5ZWE2NzUxZTFkNTRjODYxMmY2MzUxYzEiOiIiOiIiOiI5NDliZjAzODY4NTYzYzdkMTQ5OGM2OWMzMjc2ODY2ODI2NTYzNzRiMmVmZGVmNjM0MmU2OWEzODgyMjljNTgwY2EyMjE3YTkzMzJkM2FlNzdjMmQxMjIzZjVkZWRmNGIzNGVjNTBiNzlkNWJhYTcyODMxNjhlZDdjYmU3MWM2YzNjOTE5M2JiZTAxYjc2ZTAxMWMzOWQyZDQ2MjAxN2MyYzc0YjdlNjk4ZmEyMTQwZTE2ODg2YTllYzBmYzZjMzZkZWNiYWUzNzUzNzYzOGNjZjE3Nzc3ZjFjZmE0OWQyYzJjN2JhM2FhZGQwYTE1NjVkNjE5NDJkZTk0YWE2ZmExNmVjYWZjMmRhZmFiYzkwODJmMjNlNzVhMGUyZjhmNzlkMWMwYTE1Y2U1N2ZlZjc2NTVmMWE0ZmM2ZmM0ZDRhNjk0YmY2Y2E5ZTMzMzk1OWYzNWFkMzU0NTI0ZjYxNDkwNWM2YTUyZWY4ZjUyNGNkZjAxYzVmYWRhZGYyMDc3NzIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiNmIwOTI5NTExMDM4NGViNTY3MjZmNjE0NzRiZGM1MzJmZGFjZTMxY2VhZGI1ZmMyM2Q1ODczNTZjZmFjNzQzMzhhYjZmOWQ4OTM5NGI5MDdlZGI2NDY2NTA4NjVhM2ZjIjoiN2NhZmNiNGRiMzFhYjQxMWMzOTYwMTViOGJiYmM5OTA2MDdlMDhiZDFjZWYzMzM3ZGZhMGUyOTVhZTAyNGY5ZSI6IiI6IiI6ImU1MWJjNWIzYTZiYjJhMjY2N2Y1ZDYyYzJmZjk5MDJkZDA3YjU2Njg3MGI0YzE0MjQyNjI3ZGE3NTgxNDQ5ZWM5ODU3MzljZGMyYmI1ZWYwMzYwMzNmYTc5ODExMmNlMjBkZjA2ZDQ2ZDYxYWFkNzEyMWI4MjgyZmU3NTU2YmRkMzYzY2RhYmJmNDcxODRlNTVlZGQ4NWVlMGI3YjBiZTE3YjlhN2Y4MjJmNGQ4OTA2NDY1YjUyNWMxNjM4NWQwODk5YjZjMjc3MjhmZjJhNjAwODcwYWVmNjVmNThmOWQzNzc3ZTg5ODdkODZlNTlmZGI2OWNkMjMyZTcyODlmYzc1Y2YyMTc0MzA0MTM3Zjk4OGExN2I2MGM1N2FmODRjZDhlNTU2YWFhZDQ1OGY1MTFmYzBiMzAwOTUxNjQzNWMwYzYwMDk4ZjM1ZmI2YTRhOTBkOTBiYzYwNzFkMzgwMDA3MDNlZjU3Y2JjMTlkNmI3OGEwZjc5N2YzYmEwNDRjOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiJlYzZkMGY2ODI0MGY1YzQ3ZTgyMmQ5MDg4MzY0YzZjZDAzY2E1MzgwODE2MmI0ZjA2ZjU5NTZkYTY1MjkwOTQ2ZjRkMjY2NTNkMDc5ZTUwNjA0ZjgzNmMxZDc5ODI0M2QiOiJiNDBiNTczN2NjNzZjNWY2ZDFkZjBmMTNiZmJhYzdlMjZmOTJhYTkzMzEyNTcwNWI2MTk3ZDliZWRiMTFmMmUxIjoiIjoiIjoiMjA3ODMzY2Y2NTU5OWUxNDA2ZGRhZjM0NTJmMDYwYzg3MjA5OWNiZjc0ODNmMWY3ZjE0MDMzNDkwZjcyNThjYTVmZDdmNTMzOWY5MTQ0OThiNmU2MWZhNDI2Y2I4NzJjODgwYTlmZGE5YjhiYTU5MGNkODAwNmI5OTBhZjdhZDQxMmY2MGM4YjJhZDk2OWMyZjljYjBlOWQwMDU5NDNkNGRkMmRkN2FmOTY5OTA0NmNlODlkNjQwNTU5NzcxNmQ0M2I5YWQ1NDY0MWMyMjc4YjA0YjJiY2M1YjhlY2JjZDVlMjA0NGU0ZTZlYzVhNjI4NjA1ZmNiZDY3MjQ5ZTgxM2JiNzY5ZDdkZjAxYjYwNDA0ZDAzMGU2OWU5NjcyYjRmZGVkZGY4MmEyMjA0MmI4M2NhMDM2NTc4YjY5ZjlhMGFkOTcwMmJjZjk1ZmU4NDY3MDViNDliMGEwNzk1ZGZiYzRmNjcxZTAxNThkZWQ2MjQyYmQ4ZjhmYmMyNDEwYzQ2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMjU2LDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImRmNTlhYzIyNGU0YmExYjZkZmYzNDhmMTdiY2Y5YzVhOTRhMzIzNWE1NGYyNzk5YTZjYWUyOWQ4NjU0Yjc5ZDE4YjA5YjQ0NGEyOGE3ZDUzN2UxYTJiYzg5ZTk1YWJkOCI6IjE0YTBhOTFlMGNmZDYzZWY1ZmNiZTJlOGM3YTQ0YmNmNTc2OWM5Zjk1YjZjNTBiYmU5ZDNiNDhiODJhMDkwNTMiOiIiOiIiOiI2NTY0MzhlNzczOGQ0NDFiOWFjMTE2MzYxZTlmMjZhZGMwZTMwM2RhNzg4OWNmNTU5ODQxYjNlNDQxMjczMThlZGQzNTYwNTFiZDBiM2VjZWE3OGZlYjJiOTI4MjI3OTIxYTBjMTgzYzlmNTZiZmQxMWVmMzFiMjhkYTZjNzhmMzg5MWQ4YWUxODA0YmMxNThmYTU2ZThiN2ExYTQ2YmU0OTU0ZGU0OTNlZjY1YTdmOWJlYjQ2OTQ5YTMyM2EwNGU5NDQwMzRkYjMwYjE5Y2ViZDhiNzBiZmMxNTU4ODJkZGZhY2ExYmQ1YWNiOTgxYzJjMWIzZTA4NjJjNjIzNGQxMzA5M2RkYmNkZmYxNTEyOWQ1ODZmYzI0ZWEyZmQyMDk0NmZlNDViNDY3YmJiYzc3YTZiNjk3M2ViNmVhMDI5OTQ2MDdjNjU3ZWVjMjllNGM0YjM5MTVjYjczMGRiMDU2YmFiZjE3NzkxMjcwNDdiNDAxZTI1Zjk3ZjYwNjA2M2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjhkYTFhZDY4MTBjMWQ2YjdlYWQyMTBlNDhmNTFjMzcwZDQ1MjA1NDdhMzMwYTRkNTkxZTYxYTk4NDdhYTA0MzQ2M2Y2OWQxYjIzNzk5OWZkYTliNTY5N2YxZTdhYWEwNyI6IjI5MWM1MzZkYWM3MjQwOWUzMWU3MWNhZmIxYjVmNTVjMTQ0MjFiMmM3YTQ0ZDc5MmNmZGM2NjNkYzhmNjI2OTIiOiIiOiIiOiJjMmJmZjU3MTU1NGMyNmJiZDQ0NDJmYmIzYjBmOGViNGRiMDk4NDAzMzc2NThhNzQyNTYxM2UwZmQ0Zjk2ZTYwZGEzOWIyNTBjM2E3NzM3OWE1MzMyNWE1NmVjMDIyNDhjNGQ2N2ZiOTE1NGUzYjBlYjg5NzJhMzEwOWFlZDUzMWVjY2MwMjc3MDViMjY3ZDJiOWMwMzdkYTc5ODYwZDc2ZTVlOTgwYjViMzBiN2VhNTg4ZmEyMjFkMjRkOTczZjZkNGM2MjVkZTY1MTIzZTkxNjEzYTE1MjhjZGVlNTk5OTNhYTgyN2YzMTlhNzU5NDEyZjIwYWFkNmM1MGZhNzlhM2RlYmViMzQ2YWQ5MjgwOTQ3MGRhZjIyOGNmMzQ0ZTA5ZjAzYzgzOWEyOGQ1ODBhMmIzZDcwNTA2ODVlZjUxZTk1NjQ5YWJhNzIyOGEyZjBjODJhMmRmZDg5Y2FlNmNlNTQ5ZThiMjdmZDQ2ZjAyZmViNDczNjQ1NzY1MDE4ZWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjVlOGQ2NTcxZjUxNDUxOWRlNmM0YzBhN2NjNWI4NWRmNjE2NzM1YjhkZDA5YzNiZWQyMzc3NDk5YWFhYmIyOTZhOWIyYzk0NjQyZGExMGU4ZmE3MzdjZGZiMzEyOTMzNCI6IjZhZTI5YzcxYjc2ZmM0OGYxNGEzZDczMWEwZjZmMjc2ZjczZTc2NzJlZmY2MzFkYmIxZDIyYjA2NDYzYmIyMzYiOiIiOiIiOiI1Y2FkYzEyNjQzMTRmYjRiYzdlZDdmYTc0YmZhMTZhZWZhNjI0YmYyZmQ2MGM5OTJkMGNiYTEwNDI5YzU2ZTAwMjhlYmI0MzBiMWExYzY2NjJhOWIzYzdmNmRlMjQ0Y2EwMDBhZTYzZGI5NTcwZjFhYTNlN2ZmYjFlOTdhOWQ4NDgwMjFkOGU2MzJmZWRjMDM3NzEyYTI5YWJlYzQwNjNiOWQ1N2M2MDczOGYwYWYwYjFhYWIzODQ0YjAzZjdhYWNjNjVkMzhiZWM5MWExMWI3YzNiZjhkOTcwZjAxZTAwZmVkOWRiYmU5ZTJlNDk5YTIxYzcyYTdjNWEyMjg2NDEyNTEzM2VjYjA3M2E0YzlmNmQ5ZmQ0NjAyNGY1YzFlZTdmYTQ0NzIwOWFmYTZjY2VmMWY5N2FlNzdjYTY3ZmNhNTk1OWRkZTIwOWQyNTk3Zjg3YWY2ZTE1NDQwODU3OWNlYzQyYzY5ZmE5YjdjYzA3NWVlM2UzN2VlM2Q5MWFkOWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjVjOTQ4MWIyNjQyODU1ZmFjODkzMWVjY2QxYmQ2YzVhMDViNTYwYTU1Zjk2ZDM3ZTg2NWYwNTdhOTU4MTJkODFmZTY1Yzg0Yzk2YTk5MGViN2EzMDJiNThkZTcyM2NiNCI6ImI2YTYxYjlhMzEyMDczNjNkNjJjMGI4OGYxNjMyMjkwZjRmMThmZWI0MWE2ZGVkYjg1Yjc0NTBmZjkxNTcwMTYiOiIiOiIiOiI5Y2M3N2I2OGUxYWMyM2ZkZDJlMmE2ZmY2OTcwNTNmODE2YmI0OGIzOWIxMTYyZjdhYTNmZGQyZGQxODY3ZjY4YjEzOTgwYzllNTk4OWQ0NjMxYjc5ODMyNDg1MDE3MzEzMjZiZDdiZjZlOTY3YjNkZWU3ZDJkNTYyNWQzY2MyZTE5ODYyM2FmOWY3N2Y4NjEwMzQ5MWViYjRhZWZkYTVjMzMzYjUxNTU3YjhmNjQzZTZkNmM1OTNmZDdlMjdlNGJjY2NhMTMxNDBmNjEyOWNiZDAyNGRlMDc2ZTQ2ODg1NjdmZDdlNDFkYzdiMmJkMGJkOWIzZTk2NmQ1ZDNjNDYxNTAyMjIxYjUyYjAwMWE0ZDIxMDI4OTRkYTA0MTcyZWZiOTAwMTcxYTBlYWJhYjFmZDEzNDIxNzU4MGNmYzMzYTBhOTRlZGMwYmMxMzJhZjkxZDA0OGM2ZjVlYTRlMzRlYmM5Njg2YTk5ZjgxZDE5MTE4YmE0ZGE2M2FlM2RmN2EiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImM0M2Y4ODNkMGFkYzJiNTY5ODRkNGE0OTdhOGFkNzY4MTNhMDFkZjVhMGJhMjJiNTMxNDQ3NjNiNjVjN2JmM2Y2ZjcyMmU0Y2VhYzU5OTY2YTZlNDRlZDg5OGU2MTA5YiI6Ijc2OWJhY2UyYzI2M2VkYjg3MTAxNzQzNjczNzI0ZWY2N2E5MzVlMWFlOWNhY2U4NzIwMmI2MDE1ZDIwZmQ5Y2EiOiIiOiIiOiJjZTYxNDgwOTUzMTkwNDUzMjQ3ZDA5MTgzOGRkODAxMTdmN2Y4NWE3ZTlhMTIzN2M5MmVkZjEwY2ZhMjZiNDIzNzM1Nzg4YjFlODlmMzM2MjU0ODBkOWZhYWU1NzExMmVlNjJjOGU0ODQwNDc1YTZhNzM4MDE4YWQzZmQ0YTc3ZWZkZDhmMTVmZmI2MjFjNDI5NDE5YjZhZGIyMDQzMWZkMzVmOWQ2MmZiMzNkNTAwYjg3YmVhYzQ4NTZhYTQ5NzFlYjg5NzEwNTc2YjYwOWVjZmU3NThmMzY4MmRkMzE2ZTdlZTlkNjU2MGI0NDRjMjQ0NjY1NmM4OTQxZGNhN2Q2ZWFhNzBmZGY4YTcwZjE4Mzg2ZWU1ZDRjODY3MzhiYzI2MWMwZThlNWY1MDlkYWJmZmQwNDI1YTg2ODU4ZWEzYzcxZGU1YmU5ODU3MGRhYmQ4MGEzN2I0ZjdmOTU0MDAyNzI3YzBiNzEyZTU4NjkzNjAzYzIzMTMwYTQ1ZTk4ZGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImQwODNmN2Y4YzY1Mzc0NjI3ZGRiNTE1ODJiM2EzOWUyYmYwNzQ1MDhkNWYyOGVjY2UyNTc4N2YzODYwNThkZThhZmFmYWYyYWQ3ZTY0NDkzMDhlMTc2YmUwMWVkYmM1OSI6ImRkYjRjZWQxOTJmNTJiZGZhMTdhYTgyMzkxZjU3MTQyYWM1MGU3N2Y0MjhmYTE5MWUyOThjMjM4OTk2MTFhYWQiOiIiOiIiOiJiOTc4ODI2Yjg5MGNlOGEyNjRiZjFhZDFjNDg2YWFmNWE4MGFhNDA3NDI4YzAyMDFkZDA0N2ZhMWIyNmU5ZWE5ZmYyNWE5MTQ5MjE1YjA0YzJmMzJiNjVlMDA3ZTAwNTlhOGVmZTExNDgxOTI2OTI1MDYxYzc0ODY3ODgzNWMwMDY2ZjU5NjM1MjEyM2YwYjg4M2UwYzZhYjAyN2RhMjQ4NjI0NGRhNWU2MDMzOTUzYWY5ZTQxZWVjMDJmMTViZWJkYjRlMTIxNWQ5NjQ5MDVlNjdjOWUzOTQ1ZWM4MTc3YjhjNDg2OWVmYzcwYTE2NTcxOWI4ZTFmMTUzYzQxNzQ0ZDQ0ZDNjNTZhMTU4MjJkNTIyZTY5YmQyNzdjMGMwNDM1ZmE5M2U1ZTFiYzQ5YmM5ZDAyYWVlMDU4YTAxYTA0NTgwYTZjYWQ4MjFlOWY4NWNmNzY0ZmM3MGRmYWU0OTRjYmZhOTI0ZWFiMGVmZjc4NDJlMzU0MWJjMjkxNTZmNmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiJjMmZlYjkwMDAzMmYyY2NhOThkM2Y2MDUzNmY1NjNkOGFjOWFmNWZiMmU5MGRiYTM2YzM3MWMwYTFjNThjZjVlNGE2MGYyYmUwZmExM2I4MjY2YjcxNWJlOGFhZDEyOGMiOiI4ZTZmOWJlMGM2OTI2NDgwNzJkMTljNzUwODA0YjEwZTJlYzMxM2M4MDEzYWJkMzYzZGU3YTQ2Nzc4Nzg1OWYyIjoiNzJmNTRiYTNmOGU3MWFkNjlhMDQwYmI4NDkzMjgzYWNmYzg4MTVmMTdkYmNlYTIyMGVjZDY4MzcyYTJkZmZhZSI6ImFkY2U4MTU3ZWY2MDQ4Mjg0MWRkMmFjNWFjNTEyYmY3NjQ5MTIwYzFkYmE4MWVhNzVmMmE3MGI3NTEyYmI2ZjMiOiJlNzZlNDMyNmFjNjlkZGJjNmIyNDA4YzUyOWIwNWE5NjQyNWM2NWNjNjU2NzE2MDExOTEyMzhlOTQzNGQyYTAxNDdmM2EyNWNlOWI2ODE4Nzc0ZjUyNjNjOTI0NTliY2E0MjFkMmI0OTJmOWE5YzI5NzEzNTliYWFhMTQyNmQ2ZTJjMzZkODkyNGYzOWQwMmVlMmZiNTUwMmM0ZTBiMjA2ZGJlOWFlZWFjZDUwOGFiZTZjMDU1ZDU0N2I1ZjlmMzVkZTRmZGM5YzA1YTJjNjNhZDY5OWEzYTdlMjY1NTk4YjhmNDBhOGEyOTVkNzM3NmI4OGM0OWFmOWVkYzc5MGI4YTVlZTIyMWUxOTg3NzYxNjY3OGUyYTUxMzVkN2IzNzU2MTA5MjAwNDM5ZDllYzhiZmUwY2M1ZjNjMzM0Y2E5YzAyMmFiOTE5MmQ1ZDU1NGRjN2FlNzZhZjFkYzA2ZDgxNDQyN2Y0NmE3Y2ZhMmRjYzYyZjQ3NzdkMDdlYmRlN2QiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiJhZDUwMGVkYmUyOGI5YTQzMzhiNTU0NTFiODFjNjUyNzk3ZWI0OGZiYTc1M2MxODZjZTBhYTlhZDAyYTg0ZWEyYzk5NWI3YWRlNmRlMGZiNGVjOTdiY2JkNjFiNzExZDUiOiI1NzcwYzQxODMyYTRjZGM0MDM5YThjMzMyYTRiNDVlN2E3YjJkYWJiNjc4Y2NkMmU1NjQ1MmFhYmVhYjE0OTI1IjoiZDhkNTUxNmQxNThiNDFjYjlkNjY1NjZiODgwNjQ5MDBhZjc4MTgzZjc2NWYyZjcyYTE5NTQ4ZmI3OTczNzdiMiI6IjYwYTNhMDFhNzJlNmIzZjMzYTBjMjM2ZGIwODIzN2U3ZDY1NmJkZjRiYWIxZGI1N2FlMjNiNzMwNTU2OWRlYTUiOiJjNWFjM2RmNjZiYzY2NGU4YmY4NGM3NThjNzkyNjk5MmYwZThhMDNjZDNmM2Y1ZmI4Mjc3Yzg1YjRkYTUyNjYwMWU4MTMxZjlkMjA1ZjM1NTk0ZTEwMWE4NmZiODNjY2Y0YzFlOThjOGU2MDkwNjIyNTY3MDFmZjIxMzJlMzM3Y2I3Mjg3ZjBlZTJlOGZlM2VmMTFhZTcwM2Q3ZWZlNTJlNjNjZjg5MTE5Y2VkMDU5NTBjNTVhYWU2YzgyMmI2YjBhOGUxYjkxYjUzN2U1YmIyZGUxNjVhNGI1YjQzYTFjNDFmYmZkNjVmZmY5YmM1MzI5ZDMwM2NhY2E4NGY1ZDFmYzZhY2FjZWU2MjI2MjNlZDVkZGUzNmFlZGEwODE2NzQ5NTU3YzkyNGQ2ZWQyNmNkODBlNDU2ZmQwYWUyMTQ2NDc3Y2NiNjNhMjAzZmUxNmFjMWQwZWIyZDEyYjZhMmNhYmIyMWQ0MTI0MjJlOTVmMmRmOGNjZGMyM2I0ZWYwZGMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI1MWEyOWJhYzUzOTYxNzkyMDc3ZTg4ZWQzNjAzZDMzYmQxZjUxYjNmZGIyYjVjZDFlYTEzMWM2ZjY0M2FmNjVkZTgxZWIyZTI2MDM5NmQyYTY5YjQxODRjNGViOThhMTUiOiI3MmU1Mjg1YjkyYzRlYTQ0NThlOGEyMTU5Njg3Y2Q0NmU3ZGY5YzFmNDUxM2Q4YjcyY2M4OGJlNDFjMmUxNTIyIjoiMTZhNjlmN2FlZTM0YzU2NzU5NWYzZDM2MmNjYmRiYjdiOWU5MzcyYzRiMTcyOWZiYjgwZDlhMDg5ZWVlMzFhNCI6IjgyNTE5NzI2MmE0M2Y2NTIzMTgyZjBhOTEwMDVkNzBiMTdkODFjMmJiNjkyZWRmZDAyYWI5ODgxMzBjN2Q1YjkiOiJmNjNmNTMxYzI0MmEyOTVkNzc5NmMzYjQ4NDRmYzc0ODIxYWY1YTUzZTBlN2FlODIyY2Q4YTdmOWRlOTFlNjE2NDE2NGYzNDQ4ZmQ3ZDE4ZmVhZmI5N2M5NTAwZTA2MjVkNTAxZGNiMzkyN2U2ZmIzOWVmNjVkZDk1ODZkMTU3MDc2NDM2NDUyYmQzMDY2Y2IzMGQxZjQ3ZGMwYTNmZmE1ZjJlOWFiNGUxODMwMThiNDBhODJiMzliMGQxNzBhYTIxYjA1NjAwZWVmZWE5MDY4MzhiOTU0NTZlMDRjZjA0NjgwODAzMGE1Njk1MWQyNTAyYzVlYjYyNzEyMjg5MDVlZDA4NTQ5YmIxNzFkNmMwNDA4ZDg4MjUwNzg1ZjQyZTM0OWNlMWQ5ZTc0YTZjZDAzNjBhMDA4ZWM4MDRlN2VjZGNiNGQxZmUyNGFhNWExOGNiYjY1ZjRkZTE2MTlhMjljNjA2MmI0MDlhMzg2ZWE2ZjQzZTYwYWRiOWVhM2RkMjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiJiMzBmZjljNmU1YjZiZDI1OGYxY2VhMGZkNWVmOWFkYjgxZmJlYzIzM2ZmMmZhYjAxZTc5Yjc0MjI4NzhiMmU5NTA2MDRlMTBhYjgwZGRjZWI5ZDJiOTY4ZDBkMzdiYTkiOiJlOGFjZDRiMzgwYWFjZTBiMjc1NzIwNTdlYWE5NDdlMTBlNmI0OTUxNjE0MDEzOWM3NGExZDRmNDcyMjIxZGFjIjoiMWQyZGVkMDAwMzUyMWUyYmE2YTRhM2U3MzJlMDk0OWMxZDg1OGZkZjA5MjVmZWRkOWNmZDdmNjAzZTBlNjkyYSI6IjY4OGFjNWU3YjQ0MDBkOTYyYzEwNmZkMmNlNzEyYTFjZGE2YTBiOGFjNTE5NmFkNzI3ZjliODgyMzI5YTNkNWEiOiJjNTIwOGZlYzFkNjc1MTczMTFhNDJiZWMwNzc4MmNlYjI0N2U5YzgxOGU0ZjVmM2JkMTYwYzllNTNkNDYyYjYxODg0ZmViMjc4Y2RjOGY2NGUyMmY1OWQyN2RmYTk4ZDNhOTBkYThjN2M1YmEyOGNhNDBiZDBkMTg5MzQ1OTVhMzc2NTUzZDFhOGExOWRlMDdhODNlMmU5ZGI0Mjc0OGM5ODJjYmNiZjRhOTc1YzIwMDg0ZWE5Y2M2YzZhNDFiNTcxZmFmNjZiMzY0ZTRiN2U0ZDMyZWZjODBjMzBiMjE5ZGExYzAyYTFlYTAyZjY5MjJhZGJjMzFhMDU3Zjk5OTYwNWEyZDgyN2YxMDkwNzgzNWMyYmRkZTQxNTdkN2JmMjkwNmEwYWQyN2JiNzJmMTEzYzZlYzRmMjM2MzFhMmI4NTE3YmJjZTkxYjU2MGQ5MGQ3M2ZiZjA2OTliYWIyMWRhMjNlMjdjZmVjNTEzYmI1ZTM3NWY1MDEwODE5N2Q2NjQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI1NjcxNWRjYmFhNGY1YmRiZDE1N2JkZDk1MGQxYzFiNDZjMWY0ZjhkNzgxOGFiMzIxZDcyYzBmZjNjMGE5MjgwNjRiMDQzOWY3YmYwMjFkY2RjN2ZlYmYyMTI2ZTU0MzIiOiJjZDU1NDc5OTFiNTI1Zjc3OTVlMDc1YTU5YWYxNzAxMzc1MTc1YmQ3NjBkYjk5ZDMxNmI5MTQ2M2Y4N2Y3ZjNjIjoiYjJlNGYwMmYxYzE0ODY2ZjUzOGVkZGFiNDAyMzU2ZmYzYjQwNWFiYmI5MTU0ZTg4Yjk4NDgzYTgzYmU3MGY3YyI6ImI4ZGIzMjFhYjMwMjg1ZWVlN2Y5ZTM3N2FkNjJkZWY2Y2FhZGE0NDdkMDBhNGVjODgyMDgxZGFhZmUyZWMwMDkiOiI3ZWQ4YzJiZTU4ZTM1NTNlYjY1NTA4Mzc3ZDYzZDdmMjQ1MThkMWE3MjM1ZGQ0Yzc0MGJkOTg3ZGQ4YmMxYzFlM2NhOTdhNjlhMzdkYzlhMjcwYWQ4ODk4OWU0ODY4ZTZjZjhlNGNmMDE3MDNjMGIxZWI2YWVkOGMzZjhhZjQzMWQ4MTllNjhiNjk0N2FlMTM0ZDM2MGQ4N2UzMzY2OGNkZWYwZTQ1ZTExZjVjZDc5MzI5ZmY5NWVkMDBlNGE2OTUyNzUwZjE1NzRmNDg5Mzk0YjVmZGUzYzZmMDczMTFhMWU1ZDljNGUwNzBhMDk0M2VmOWQ0YTEzMGE5ZTRiMGE4MGMyNTZlOTZjYTUwNDI5NjE3NjY4NzQ4OThlYTBmNzcyYjc4ZDFhMzNlODY2MzUxYTRlYjQyNWI4MjJiNWFkNTk2Y2YyNDliY2U4Y2NkNmRhZmIzMzRiNzFhNTAzZmNlMmM4ZmEzZmJhYzk5NDM5MTBjZTVmZjAyZWJiZWRkZTgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiIxYzYwYTMxNzYwMDE5ZTZhNTcxZTI5ODdlNTdlMTlhZGJjMWFjY2YzZWRkNDRlNTAxMDYxY2JlYzMzMWIxOTdlYjY4ZDBmYThmYTVlMzA3MWQ2ZjhiN2M5YzBhM2MzNWQiOiJkNGQ4NGRjNzMxMTA5Njc5MWRkOWM5ZDdmMmNkMjkxMDcxZjg3N2FmZDg2Yjk2NDQ0Mjc0ODJkMDlhYzlkZjY0IjoiNjQ3M2Y0NDMwMzk4ZDdlNWEyZDIxOGJkMDVlNmFlZGFjMWUzMTcyNjlkZjNlNDcwNWQ1NmMyMmQ2ZTdhYmIwZiI6IjM3OTY0OWI1NmE0NjM5OWI5YWI1ZjM4ODBlMWE3Mzk5M2E1OGNmNTI4MjFkM2NhYzg3ODkwYWEwZTYzMjJhOTQiOiJkMzQxNTJmYTEyZmEzNDFkMDMyNmE1MjVhYTgzODU1ODYzMDAxMzg1Nzc0N2YwMjYzNGQyNGU5ZGVlYzJkYTEyZjUyZmI0MDVlN2YxYjk3M2RjMmQ5ODJkMjZlYjJkZGI0YjQ5YzM1YTkzMDhiMDY4MDkxNzFkYzk5MGE0MjQ4ZTZkYTBjMzI5YTI1OWY0OTUyNDdiOWZhOGM3M2FmMDY2MDRkYjdiNjI5MTY4ZTM0MDgxNjk2YTA0Mzk3N2RkMjlhM2MwMzYyZDU4OTVmOWFhYzI0YmNiYTU4ZGQ3NDA3OGVmNmY4ZDMzZWFjODY0ZjJlNmNkYzQ3OWRhM2QyMjRiYWQ4MDk5ZDAxMWU5MTRiNmNjYzM2MzFhNzM2OTU4NmUxOGM3MWE0MDg3ZGUwZDQ3YTdjMjlhMDljMTI0MzhjN2RlMmQ0YjQ3NzY4ZjQ3Njg1Yjc0MmMyNWI4NjBlNzE2YzMxZTJhZmU0Y2U2ZDkyYmMyZmI5ZjM0NDAwNjAyZjkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiJlZWNjY2U3ZjdlZGM1MmYwZTI1NTkyNTBiZTM2NTI2Y2QxODM5MTUxYTc3YzU5ZDUyN2Y2NmZhMjRlYTRkODZiM2ZiMjk4YzhkNzJiNmEwYThlMTkxYjYwMjU5ZDFmYzEiOiIyNmQzNTg5NTcyM2JhM2Q0MzE5OTFhMGU2ZmIyMTU0YWU1YmZmN2U1ODYwOWM5MjZlZTMyNjlhZmM1Y2Q2MzFmIjoiMjI3YjlhNzFhNmMxN2VjYmY2MjcxNjFmYzYyN2Y4ZjZmMWEyOGNlMzk3NzJiN2EzZDM2MDY0ZTJjYzZkYzRkNSI6ImViNTlmNzgwYzVhOTU1ZTEzNTVkZmUxNWNjNGE0ZTkwYTZlYzc1NTg0ZTYzYmQwZGU3MzQzOTlmNDdiOTUwNzAiOiI3OGFjNzc2NTdkYzU2YjIzZTYxN2E5YjM4MTY4ZGE5NDVjMWNmNTJiNjA2MmMyYjEwZjFkN2EzODE0ZDliOWVmYTU1NDVkYTA1MGIwZGI1YTY1YTJkMmQyZTAyZmExMmU5N2ViOTcwZmE4ZTgzYzUyNGJjODA5ZDY3NWUwZGIzNWM5NzYyMzIzZjMyN2YxZWRiOWI1MzRjZTE2ZDAyNTE5NzUwYjQxZWJlNTFmNzQ3ZTlkYTQzZmQxYWZjNjBlNDZjN2FiYTcyZTE1Y2M3YTIyZmFkMTllZDU1MTg5ZjI4N2ExNDczNzQ4M2ViNmIzMmQ5NjZjM2UzOTY5ZDgxOThmMDFmMmVkODQxZjIwZDdkMmUxNTZkNjI4NWEyOWUwN2Y2ZDdmZmY0MmJkNTc1ODA2YzQwOTI1MjJiMDNlMGQxYjhkZjBjYzg4ZjViODJkMjRhN2ZkMGZlZmY2YWRhMDNhNjBlZjI1NDFhNGFiMDQxYTQ5YWE5NzNjNzE2M2JmOTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI4NmY4MTA0YTA4MWM5NTY1ZGVhNTY1MmYyMDE0NWEwNjhkYWRmZjEyNWRlYmY4MTgyNjJkODkzMWNlYzZiYTkzN2ZkNWI1MWFmZmNlYmVlOTUyZmI2N2YyOWYxOTcyNjciOiJjN2JhNWZmODI4ODU1ZTZlNzhmYTE3MzJkNjNhYWMxZjQ5NzAxZmY3YWMxZjM1MDZlOTc5NDFmOTk4YjRlOWQyIjoiNjkxN2JjYTE1ZGI1M2E1MzU5ZTVjNGQzMGFiNGQzN2ZjNmExYmM2NjBmYWFmMmU3NDg2NGNiNGFhNTJlMGUwMiI6ImVlYThkYjBjZmMwNGY4ZGUxNGQ2MDUzNDQyYjViNGY4NzMzZjgyMmRmNGJlNTk2NmEwZGU4YjBmN2QyMDM2ZjYiOiI1NjJiOGIyZmEzYmIxNWNmYzNmN2U1N2YzMDllMzFiMTNjNzkwYzkyOGFkNmIzMmEwMDVmNTQzMWMyODU3NmM1NzA2YzRhYzBkYzJjN2E0NDM1YmViZmEwNjU3MTI3OGY0ODU5MzJiZDk0MzgyZWZjZjcyN2IzMDBiMjMwZGE5YjllOWYzNzdkMjY1OWFjNzVkZDgyNDczNTFkNWVkODE4NWVmZmEwZjI1NWEyYTIxMzZlNjM3MTdlMDI2NWQ1NjFhMzRjNzVlY2VlMWM3NzRjMjVlMzNmZDkzODY5NjgyNTY4NmFjZjlhNDE5YzFkYTNmYTFjZThmNjk1ZTIzMTA4N2FhMDkyN2RkZTZhYjQ4N2RjNjEyOTFhZDQ3MDBjNWM2MDhmYWIxYTQxOGY2YjMwZmY5N2I4YjhmMDFlZjgxNjQyODc4NDlhNzdiMjFiZTVkMTFkODJkMGMxOTA1NmUwN2Q1OWEzMGY2YzU3NjcwNWM2Y2VkY2I5ZjIyZDNhOGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiIwZGI2ZjczYWI2ZDMxZGRmOGY3OGQ3Njk2MTMxMGQ2OGYwODFjOWU2ZDU5ODVlMTg4Mzk3OGMyZGVjNDhkOWY1ODg3NWFiNjU4YjNhOGI3OTViZjQ2NGFmOTQ3MGE5MGMiOiJkODg2OTM2YWQzNjU0OWExMGI1ZGM1ZDZlMjEyMDNhYmQ3NWFkNjNmODI2Nzk0YjRhZGFhZDQ1YTcwNDI0YzVmIjoiNzY5OTNkM2JjYzMyNTQ2NDMwZWZhMzBlM2IzMGFjYzM0Yzc2NzJiNmUxOGM3ZTJlOWExZjFjYzI2ZjdmN2EyMiI6IjU0YzcyY2YzNDU3ZTZmNWY2YjM1ZGMxNDE2N2ZlZTkzODNjNDRjODY3ZjIzM2VjOWQ4MWYxODdiY2U0MzhjMGYiOiJjMzUyMzg5NGQyNzNjODVkNjA1ZDM5ZjViODllMzM4OGFmYWQ4YzIwNzg3ODk3YjkwM2Q4ZGI3ZTNkZTc1OTAzNDAxNzRiZTNhYmQ3NTk4ZGFiYTc4MDZhYjkzNGUwZmVjYTAyYmJlNjYyODJkNDY5ZWMwMTQ3NmJhZDVjY2JhNTlmYzE0Y2Q5NTQ5YmY0YWY0OTY0MWY0MzI2YjEwNTJiMTc5Yzg5MTk0ZDIxYmVjMDUwMWM5N2VmMmMyNGFhZjA0NWZkMzQ4Yjc2NTkxMGZlOTJjMDAzOTYxMmUzN2JhYWQyNDQ1YjU3ZDlkYjZjMWU1NTBhZGY2Njg4YTc5YjExN2Y2YjdhMzdlMDIwOWQ4OWYxOTRhMWJmZTFmZjJlM2IyOGYwNDU0YjM4M2FmODg3MmYzMjMyMmJkNTMxM2EzYzljYTQ4ZDMzZWFiN2MzODA3YmI5OGY4ZjQwMmM0M2I5OWIyMTc2ZjBiMzNiZTA4YzdlODRjODZiMjZlOTcxYWIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiIzYjFmZmJmYWU2ZWM1NGExNzVhODBhMzNjODc2OGZiNjBmMmFmOWVlMmI4NjIwYzRlODAwYTE3ZmI5MjQxYWU0N2Y3N2RhNDE0ZjY3YjVkN2IyNGRkMTAwMzU1ZDJhZmIiOiIwZDUwY2Y2MWUyMDIwYTkwOWJhNmUzNmJhNGQwYTM5NDU3OWQzZTQzNzdjZDRiZjAwNjg5NjdlOGQwZmU3YTc4IjoiNWQ0ZWZiM2Y2ZTY1MDNjNWQ4NWExYzQzMzk4ZDA0NDFjZThhZWZhZmFhYmUyZjZkODY5ODhhMjRlMDMzZjUwMiI6ImNmYjYxNTZhMWIxMzlhYmYyMWM3MzAwMTI0MDk5N2VlMWE4Y2FkOTFhNGJkNzc3YzAzNzJjMWU4ZmNmZDNmYWMiOiJkM2VmNzc2YzhkNzdmY2M1ZTk0N2JmNTNlMGJlMTE3NzdlNjljN2RjZTEzOGYyNGMxYTMyMTJkMWI2YjkzMjU4MDM3MTQ3OWI3NjE5ZmM4MmYwMjlkOTI5Njk2MjhmODEwYjU0YThmZGFiOGViYTc5OWU3NTA5NDVmMzU0NWY2YTk2MjI2YmM3NjBhZDczNjEwMTUxNmVmZmY1ZDg1ODFmNTg2NGIzOGMyOTg4NWQzOTg0M2E0YWRjYTE3MDQ2ZTFlMzg4Yzg5MDU0Mjk4ODc5N2I1NzZkYTY0ODA0ZWI0MTAxNjM4MzI4ZDNmOGJmYTM5OGZmYWY4M2NiNzI5MGEyY2ZkMzllYWQxMzI5MGFlNzczYTg5NThiMzM5MTRjYTAyYzhmZjZhMDY5YWEyNWFjOGIzNmY2ZjBmMWRjZDhmMWM1ZmM4MzgwODNhNjRhZTdhZTExYjg1YmUzYTlmYTgwZWQ4Mzk0OWI2MjIwMDJlOTE3NzYyNzNmYTMyZDZjZmQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiMTk3NjdjZTFmMThhZWEzNjY1Mzk2NDJmYWQ0MDBhMDNhNjc1YjJmM2MwYjFjZmQ0OTkyNWU1MzViMmMyNzc5MDQzYzVhMWM1N2VmNTUwYWNhZTczMzcyOTUxNmFhNjJlIjoiNmJmYTg4MmMxZTg5NWVlZmZiYjg1NTc4MTgyNjUzYzAyMmE0NzAzMDkxNTI5NzgwYzA3NWNkNDgyODA5Yjk5MCI6IjExMjM2ZGYxZGNhM2RlNmUzZTNhNTdkMjc0MWQxYjc3ZjE1ZjQ1YjA1YmViNDdjYzUwMDEwMGIzMTE4OGE0MmQiOiI5ODcwOGE4OGZhZmFlNTZjNGY2ZmE3ODBjNmMwZTMzY2E4ZjI1OTI5ODNiNWFlNjA3MTQ2Y2Q2ZTkyMjA0NDE2IjoiYjY1MTRhMzc3OWRjZWYyYzllYTBlZDdkZGZhODA4ZDA0NWM1OTA3MzE0YzM1ODMwMmNhMzJiMjA1NTk4N2EzOGVmNjAxNjM3Y2RjZjc3YjFiOGY3ZWFjNDc5ZjhmMTg5NzIwMTNjMmUxYTZkZmU2MTJlOGE1ODZkYzUyOWVjZTQ4NjUwNTUzNGMwZmYzZGMwYjIwNDlhMGU0NmQ3YWM1MDRhMWZkZmFhOWIwOGQ5ZmEwMTdjNTgwMzQxNWZhMzkxYmE3ZWViNTc2ZmQ2ZGRiYTQ0MDRmZWI0NmU3Y2RlNTZlMDkwZGQyODBiZTVlZGJhN2Q2ZGY5YzViYTdkMzQ1NGJjYmQ0ZDQ0M2IwOGZiNTFhMTE3YzFkNTkxNmYyMjVkY2Q2YzFjM2ZlMmIyODgwZjRkNDI5NjJiZWZlM2FiNzZiZGMwODZlMjkzODFkZDk4NTIwNmUzZTAwY2U3MjJjOWMwNDBhZjVmZjRjZDRhODE4M2I0NDZkOTFiMzEwODQ1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMjU2LDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImY2MzI5MmJhYjUwNjY4ZWIxNGI4Mzk3NTQyMmEwYzg1M2ZlNTU3MTRhOWVkZjlkOGE4MTdiYTBiMmYyNmVjNDAwNjNhODZlZTNjNzljNjk0MjczMzQyYTAyZjY4ZWNkMCI6IjNjNTI1OTU2ODM4ZTI2Yjc3YjhjZmMzN2YwMjRlYzM5OGVkODI1MDc2ZGJiNzQ5Y2Y0OWE3ZDg2OGMyMDFlNmQiOiJkOWE0MWI0N2MzYmY4NzQzMDk5ZGM4ZmQyMjhmNzdkZmYwMWFlMzA0NzYxZWFmNTdkNzUxZTExY2YwOTRiZWYxIjoiYjc5MGMzN2RiZGEyMGZiZWFmZTlkMTMzOWExMTUxMTQ0MjUzYmRmYmZmZTE3YmE4NzI0MGVhZTQ5YzYwNmJmMyI6IjM1ODZiNjMzMTUwMjBiM2JhMTEyMTMxNGEwZmE2YzY2ZDU3ZGUwZWM0NGFiZWVmN2I3MzI1ZTk2MDgzMmI3OTQ0Y2IwYTgxYTc0N2VlNWM1ZDMxNjMwMDE1MzZkM2U1YWQyZWM4NjliMGU1Y2ViMTRhZWUyZTY5MTUwNzM2MTk1MjhjMTQyMWI1OWI4MDI1NGRmYzNjYWIwNTg0ODk4YjBiY2E3MmM3NmFlMjVmNTJiNzQwNWI5ZGFkMzhjYjJiODQxZTFkNmEzNGZjNWIyNzcxMjlkYjQ5OTI4YjJmNmMwZGQyMjkwMGVlNzg2ZWMxMjgxNjRlZDEyZWIzMjRiNTAyNDk5ZjFjNWM4OWJlMjEwMTkwMTQ3NmIzOWM1NjAzNGNjMjkzZTMyMGU2M2EzZTAxOTE4NmQ0ZWFmOWEwOTgxMzZlOGMwY2U3ZjYzMjZmODRlYzk1OTkyZGRlMjU4NWFkMzk0NWE5NTM0YWEyOTU0YjhjMTVhNDhlMzMyNGQ3NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiIzZGY3NDY4M2YyOThiYTQ4NjQ4NzE0ZTM4NDk4OTE0NWMxYjg0MjQ2NzM2ZGMyNzU2MzY4MDlkNjRjNzVmZjYwMzA1NmU3MDNjNDM1ZWFjZjIxYzBiYjE1MmQ5ZmMyYTAiOiIzNzEyMTdjYTIzMzdkYjAzYzRkMDY3MTQ2MjRmYTExZjkwZDVkYzU3NWJkYmUxMmE0NTdjNjEwYmUwNjZkYzJiIjoiZjI2YjljYWM4ZGY1N2EzM2U0YjU4NjhjMzZmMmI5MzIyOTk0YTk4MjY5ZGNiZDc5NTZiOTNkMTQ3ZGQwYWEyNyI6IjBhNmRiODZjM2FiZGMzOTg3ODA0NWI4ZmMyZDVmMGY3N2E4ZTI5OGVmZGFjYjRjYjlmNzQ3NjJmYzIzYjk2ZmMiOiJmZjUyNTJiN2EzOTQ2MGE3MzA5NGI5ZDY2OGI1M2QxOTMyMjQzY2FhODg1YzBlY2Q4NTA2MTJmZGJlN2U0NmNiMjc1ZDA3OWJiNzVhNmIwNTAxOTEyODJjY2IxMWVmMjU1ZDUyY2I3NjM2MThjNGI2MjQ1NjBkNzliYjlhNWJjOTkzMTk3ODNkZTQzYzE1MmU3YWE3YzRjZDg3OWE3NTg2OTI4NTMyMGE5Yjc0OWM4OTdiZjA3MjIwY2MxYmVmMWVkYzQ5NGJmZmE2YWI5M2RjZjgzOWRjMTVmNmYyZTUwOGI5ZTIxNmUyYTE3ODZiNzVhYmZiMDFiYjdiZGVkYTcyMmI0N2FmODk1ZjU1MTY3MGY5NTYyZDlmOWI3OGU5OGVlN2VhNWM1Y2E0ZjgzNmFmNWJmMTUzOTI1YjJhZWMwNTVlZWU4MTY0ZWRmM2Y3YjcyZTI0YjEyMDNjZmFlMTgzNDcwNWY3NGNhYzhjNjA0M2EzYzJhYmY2YmRmMjhmYzkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiNTNkNzA2OTJmMGY0ZGJkYTIzZDc4NjYwZjBmMDhjN2U3MGNhOTQ0NDFmMTQ0MDM0OGY3NjEwODg3NGQxM2VhMTQ2NTI3MjVhYmQxYTk0ZDMxNTM2NDQxNmM5MGU2NjJhIjoiNmRlZWU5MTZhZDY2MDgxMWNmMDViNTY1MmYzMmRmNGU5N2Y1NDRlYmI1Nzc2MjYxNzM1OTE1OWNjOWE0MjVjMiI6ImFjZGE0MjdlZWExYzhjNjc5MWJlNmU0ZDJiNjBiZTMwMzAyYWJjODRkNWM1YTEzYmU3ZDUxMDAwNGI4NzEwYzkiOiJkMjdkN2Y1OThhMTQyMDVjNDU3ODg2NjVjZDA2MjEzNWI2YjY1NTQ3ZDMxODg5NTllMzhhYjY3NTQwMWQyYjYyIjoiZjc3ZjlkZTYwZTk1ZGEzZjFkMGQ2N2I1ZGRlMjliMzFkZjU5Y2U5ODBlYmRiYWQ3YjVlMGEwMDUxZmVlMzllMWQ2ZmM0MzExZjIxZWZhMDE2MDM5YmIwNWYzYjAwOWIyMjNiZTZmMmMwMDdiNDY4Mzg4YThhMTliYjQ2OGM3YjgyY2M5M2RhYjNlMTYwYjJiNzJmZGExMjQwZmNjZWVhMDFjMjYzOGU5YzhiZDJkMWVkOWZmOWI1NWJmNjlmYmE0YjZhZThlNjk0YzE1MDg5NmFjNjIzM2I3NTU2Nzk5M2Y5YTlhZGYyNWNhMGYwODM1Yjk5OTFmZjRiOGQzZjRmMWEzZTRjNWY5ODY2ZDk4YjdhNzUxOTY4MDRmOTk2NDkyYTYxZGJhYjViZjcyZjg3NjU4ZTIzMDBhMWIwNzc3ZWY3ZjQzZmZlODk2MmY2YjY3MDhkMmQ5MWRjZGY2YjQzMGNmYWFjYjMyODlmNzRjYjBmNjczNzBiY2M5YWYyNDljIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMjU2LDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6Ijg1MTg2NjUwNjk0Zjc0MmMzZjVmMjI4Zjk0Mzc4OGYwNTYwMmQ0ODI3NTE4OTA4ZmQwOWExZmI0NDVkODMzM2RiMmQ2NWYzNzZkNDhjNjZlYjllMDQ5ODk5OWUxZmY0OSI6IjQ5OTkyOGM0MTg0MTMyNDc0OTE0M2JlOWNjNzY5ODk5YzM4ZDZmNmU2OTMzZTU2ODk4ODk2ZmFiY2Q4MDI5MzEiOiI5NTc0Y2E1MWYyMTg2NWMyZmIwZWZjNzVjYzlkOTBlYzVlOWM0MzEwNDk3OWNkNjRkMDBlYTU1NDRlYTAxYzk2IjoiYzBkZjg0MGExOGQ3NTg0YjYyYzcwYjJmMDU3YmY4MjQxNjhlZGI2NzNjYjUxN2NkOWRhYzg5YTBmYzgwYzliNCI6ImIzMWU1MDIwMmY4ODNhODU2M2NmMTI5YTBkNWY4YTMzYWJhZDc5ZDhlYzhhOTcxNjdlZDdmY2E3NzhlNTg5MjQ4MDYxN2NkZjUwYjVlNTE1NDdmN2VjMWJlZGUzNTAyMGEzMTE1NzJjNjFlMzNlOWM4Mjk2OGU4ZjY5NTg2ZGFlYTNkYzE5MDYzYmVhNTY1MDNmOGNhNDgyOTE4ZDIyOTk0OWFjZDZmMWM1MmNjY2RjNWY3ZjRjZDQzNjAyYTcyYTUzNzVmM2FhYmZkMjgzNGVlMDQ5NDgyM2JlYWRhMmRhZWNjYmVkOGQ0Njk4NGQxNzU2ZmUyMjA3Y2E5MjE4NmI1MDYxMTVmNmRlN2Q4NDBjMGIzYjY1OGU0ZDQyMmRiZjA3MjEwZjYyMGM3MTU0NWY3NGNkZjM5ZmY4MmRlMmIwYjZiNTNmYmZhMGNmNTgwMTQwMzgxODRkMzRmYzk2MTdiNzFjY2QyMjAzMWIyN2E4ZmM1YzdiMzM4ZWVhZjBmYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiMzUwNDlmMzg5YTMzYzBlY2IxMjkzMjM4ZmQ5NTFmOGZmZDUxN2RmZGUwNjA0MWQzMjk0NWIzZTI2OTE0YmExNWY3MzI4NzYwYmU2MTY4ZTZhYTlmYjU0Nzg0OTg5YTExIjoiIjoiIjoiIjoiZTc2NDkxYjAyNjBhYWNmZGVkMDFhZDM5ZmJmMWE2NmE4ODI4NGNhYTUxMjMzNjhhMmFkOTMzMGVlNDgzMzVlM2M5YzliYTkwZTZjYmM5NDI5OTYyZDYwYzFhNjY2MWVkY2ZhYTMxZDk3MmI4MjY0YjlkNDU2MmNmMTg0OTQxMjhhMDkyYzE3YThkYTZmMzExM2U4YTdlZGZjZDQ0MjcwODJiZDM5MDY3NWU5NjYyNDA4MTQ0OTcxNzE3MzAzZDhkYzM1MmM5ZThiOTVlN2YzNWZhMmFjOWY1NDliMjkyYmM3YzRiYzdmMDFlZTBhNTc3ODU5ZWY2ZTgyZDc5ZWYyMzg5MmQxNjdjMTQwZDIyYWFjMzJiNjRjY2RmZWVlMjczMDUyOGEzODc2M2IyNDIyN2Y5MWFjM2ZmZTQ3ZmIxMTUzOGU0MzUzMDdlNzc0ODE4MDJiMGY2MTNmMzcwZmZiMGRiZWFiNzc0ZmUxZWZiYjFhODBkMDExNTRhOTQ1OWU3M2FkMzYxMTA4YmJjODZiMDkxNGYwOTUxMzZjYmU2MzQ1NTVjZTBiYjI2MzYxOGRjNWMzNjcyOTFjZTA4MjU1MTg5ODcxNTRmZTllY2IwNTJiM2YwYTI1NmZjYzMwY2MxNDU3MjUzMWM5NjI4OTczNjM5YmVkYTQ1NmYyYmRkZjYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjRjYzgyMTRjZDdlODVhNzZiZmE3MzViYmJmY2U5MjZjMDMyM2ZjMzQ4ZGU2YzA1ZWQxODAwYzJjOGY1OGM2YjEwMDFlYjFmNmIyOWIzNTI0MmEzZjhmYTJlOTAwMDNmNCI6IiI6IiI6IiI6IjFlZmExNWQ2NDRlMWJkZjM0ZWFkZTNmZjJmNWU5Y2E0NTIwM2NjYWExZTUzNGFjOWI0Mjg3YTg0NmI3MTI5MmIwMzEwMjI4NmQ5OWYyYmU2NGI4OThmZTkwOTIzOGY1NDBlYmMyNWY0OTUyMmY2MGVmNzIzYTRjNDI4ZWFkNTMwYTk3YzYyNDA1Y2Q1ZDllY2M1NGFjNWJhYTQ3YWM0ZjYxOTVkNjM3ODMzZjQ2MmQyMWE2NTliNDkwM2Q5Y2ZhNmM5ZmQ0NTEyNDQ1ZjlhYmI1NzgyODk5YTZiYjY0NTkyZjNjMmIzYzc0NWIxODY0NTMwMWZkYjA5YTZhMzMxZTlmYjZkOTY1NGZjNzljMTRlZDgzYWMxNjg0Yzc1NWI5Y2IyMDk4ODVmODZmZjI5MGE3MWYwOGE4NDhiOTYwMTUyZjA1YjFhYTg1NjZiZDM4MmRkZDQ1NTIxMDYyODMxZDdhMGZiM2E4YmQ4ZTExMmE5MWI1OTYwNjkwY2Q4NTg1YzFhYTEwNDUxNGUzYjljYmY1MmY2Mzg0ZTg0YzI3YmRhMjgwMmZlOWZiOTUyY2JmMmJkNjA3Zjg2OWQwYWVhYTZiMTM2YzZhNWY2ZTliMDUyMmI2MDE5YjdiYTZhZjZjZmY5OWZkYTYxMmUwMjQ4NjdkZWNkOGMwYzZmZGUyMDM0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiJkMDQ2MjcwZTZiNzk5N2NkNWY0ZTllZDExOTNlNTUzODIxOTFmNzg1NDdhNjYwODU0Y2Y2MGJiMDNkMDM5YTM5NTBjZDE0N2EzNDQ1ZjZkMzJkMTRjYmZiOWRhMGMzMjciOiIiOiIiOiIiOiJjZGZhOTQ0MWFhNWViMTFmZTNiYTUwNTI4ZWQ3MzFjOWZmOWU3MGI3OGRhMDc1ZDAwYzUyZDBlMjgxZTNhODY4ZjY2YTUzYTJhNmEyNzJkN2UwYjFhMzJiNjMzOWY4YWZkMTA4YmI5ZTY2YjA0YzNkNmJjMDY5YjdlMDFiNjk4NDQzMjJkZjdkZWFjNjZlNjA1YTllMmY0MzY2NWI3OTMyYzY3YzQxOGE3N2E0YzlhMzAyNzgyZDBlNzM1Nzk1NzU1NjEzYTFjNWU5MDA4OWY3NTlkNzgwZmIzYTk4NGRlZTRlMDZiYTNkYzVhOGM2NTI1NDk1ODdkOTc1ZTU4NmE5OGFjNmFiYTY1NjNlMjc2N2YxYTM3OTI2MWI5ZGQzNzk5MmVhOTY4MTg4MWVhNzkzM2I1YzY0MDkzMjM0Yzg0OTE0MmNlZDg1YmJlNTk1NmY1MjdkNDZlZjA5MWU0ZDE4ZGYyYTYxMDI2MjFhOTFiY2E1MWJmN2FhNGIyNDI0MTRkYzE2ZTc0YWU1OWRmZTU2MGMxOWRiZTMxNWU3Zjk4YjExMDg2YmMyNmUzMzZkY2VmY2I5MWM0ODI4NjgyZGE5MGQzOTIxMzM2YTQ1ZmNkMzZlYTRkMTIxM2ExMzIxM2ExMzJiZjIwYWExYTM5OTFiNjBiNjVkZTdhYjljYzY1NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiOGM3YzgwYjE2OTE2MGM3ODEwNGMyMDVlNDQ5MmE5NDc3ZTZmN2JhMWMzYmI0ZGFhODZkMjIyZGViNjI0MWJmZDJkMmRjZDVjNDBiNDZmYTU1M2NhNmEyZjZiZTk2OTkxIjoiIjoiIjoiIjoiMTY1OGE3NTUyZTRjYzk4YzIyODA3MjgwMWY5YmEyMzAxMjNlN2YxZjdkY2E3YmE4MzlmNDQwZTVmNzU3MGZkMjljMzhiODZhMmFhY2EwNGNjODdhNTYyMDViNDFkMTllMzg5OThiNDdkMGZmYmZiZDliYjU2YTZlYjMxYmJmZGNlOGQwMWU4OTkxYjgyMzE1YzM5ZjYwYzIyMjI5ODE2MGU4ZDlmMTRiMWE2MDM4ZDhlYWYxNWViNzMxMGIxODBhOGUyZThkMDVlZjAyODc4MmI1NWQ0NzgyZDQ3NzQxNjBhMzk4OTZkMWE4OTY4MjNmOGI5MmE5OWFiYjU0NmVmMDJjZjE4OTIwMGExYTdhMmZiYjcwMTllNGQ4YTkzNTIyNGMyMGQxMWExOGUwZDg4OTA1NDk2NjZmNjU5OWMyNjE1MzJiMDM2MDUxY2Y3YTY1ZGQzM2JjMGFlYWI4ZmEyYWM5ZWQ1MjBmNmRkODkzYjlkYzNjZDNiODdkMDJhMDU0M2VjYTBiYjUyYzU4YjdhYzRhYjNmMDAxNzFlMjFkZmQzMzYzMjI5ZWQzNjJmOTYwZDhhNWZkMDZhZjVjYWE4NjAxOGY5ZGNlODFhZGU2MjM0YTY5OTJiZmI5ZTI2NjBkMDhhMTAzZGFkZDdkOWFkZTRjNDVkNjkxYWEzNzk5YzEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6ImNkMzk0NTA4ZDg2YzM4NGMwYzk5OGI1OGNmNzAxN2I3MTI0MjY5NDI4ZTRjZjM5NTE5YjU4MTVjYzJkODg3MzRmZDJjYmM4N2M3OTA2M2RiNTg4ZDkwYjljYjE1NjlmMyI6IiI6IiI6IiI6IjdjNGRlNWZhOTczNjJlNjNlNTJlNzkwZmI2NmQ0YjA2N2U4Y2MxNzQyOTc1YmE2ZjkxODYyOTU4MzJkMzFjNGUwYzk3YjdkZmZhMjYyYjkzYjEwOTYyMTA0NGE0YmM4OWM5ZmM4MjIxMWY1Y2I3NjM5NzRlYjNhODE2ZmE3ZDc4NTM1NzdiZWUxYzM2YzJjMzZhYWJlMjg1NTlkNWJkODU2OTFjM2UzYmQ2MTBlNjFlNGMzYjc2ZTE2NzUyNmQxMzMxNDU5ZDhiZjA5Y2ViNDAzMDYyY2M5N2UxMjI5ZWIzYTcwYWY2MDQ5ZDI5MWFhZGIwMDI3ODZlN2QyMWI4MWM4N2ZhNjhhNTFhMWI5YTg5Mzk0Nzg4YmFiNzA3ODNhODhjODgzY2ExN2VjZWFiYTQ1NWYzNTdjNjExZmIyNzllMzhmNjdlM2MyN2M1YWRlNWY5NTcyMWZhNzlmYzJkYTFiZDQ0Y2E3ZjMwNDE2MTM1OWRhNGU0NWQ3Yjg0NzY3MmJjMTg1YmE1MDIxMjNhODAyNTM1ZGJkMTY3YjJjOTNiZjkwMTYyNmUyM2ZjYWJhMDNjNGY4OTYyNWE5MzBjYWFhYTMwNDAwNjQ1NjgwZTU5MzFlMDk0YWFjNmY2NDY3YjkwYjEzYzJiZTljOTg3NDRmODlkMTEzMTUxY2QyZmZiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiJhMTRiZTQxNzAwMTAzMGY2YTljNTQzZjgyOTcxNWIwNzVkMGVmZDhmYTM1YWNjN2VlZDAyYTE0MDFjNmY1OWRmYzg3YjhiOTI1NWU2MmZjZGE2YTM1ZTUyZmE0YTZmOWQiOiIiOiIiOiIiOiJlZDI5YTQ5YmU1NmUwODFmNWI2YWJjZDJjYTFhMTZkYzA5NjA3MTk4OWRlNzJhMzliOGJkNTQ0ZDJhMmEyZGI1Yzg4NmMwYzI5Y2U0NTRjZjYwYWRkYjU2Y2I0ZjI4Zjk1OWNjYjcxNjMyODBlZjgxZTQ4ZGQyYTAyMDI0YzM0YTEyMDMwMWQzNTlmMDM4NDRkMWFmMDFmNDg1YWZiZTdjOWIxNzI4OGNmMzQ1MTcyMjkwZmRjNDRlMTI0NjcwYzVjYTllODU5MGRmNmY5ZjYzZDYwODQ5YzYyZDM5MjEwMDM1MzJkYmUzZTNlNmJkZDc1ZDI4MjExMzY1ZjZjNDg5NTk4YTk5ZTYwNWNhNjcxZmY5MTU1MmI1OTE2ZWE5ZTEyMjU5NzIzYzBlMWE2MzNiZTM0OTMyZDBjODE2YzMwYjUxOWM3OTY1NmE3MDM2OGIyOGZhZGFmNWViMzJlYjZlNDdlMDBiMDRmMTUyYWNlMmVhZmM5YTNlYmQzYjFiMzc5NWFkODVlMDg5N2U0NmFiNTdjMzYxZmVmMjkwODA0MWQzNjVmNzMxODBiNTA1YWUyNDI2NjAzZGVjZDBiN2RkMzNlMmY3YWM4ODVhY2VkNDE5NDk5OTYwMmQ0ZDYyYTk4NDIzM2QwNjk2ZmZmODZmN2ZhN2E2Y2Y5OTNmYjdlNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiYjhjZWVlMDg4ZjNiMTNkYmQxZTdjZjIzMDQ0OWYyNDZhNDU2ZjUwNGQ2M2ZkNDI4ODgzOGE1MGFiNzY1NzZhM2Y0MDA1MDI5MTNjZjU3Y2IyMzQxYzVlNmE2M2ZlOWZhIjoiIjoiIjoiIjoiYjRmZTNmNmNhZWRmNGFjN2I5M2ZiMWMyZjMxNmJhZmE1ODQ4N2YyOGEzN2I4NDAwZmQxZjMyYzk2M2IwNGNiM2M3ZWI2MDFkMGRkOGE3ZTQ1MzhiMTQwMzBmYjBlOTc3OTRjNjE3MzY2Y2E4MjdlM2FmZGIwZjcxNDk4M2E2YTcyYjI2MWRiOGJmOThkNWZjNDhmYjU1MTU4NjYxZjk4N2QwOGU5NTI5MTMyMTI3MTdjZjIwNGEzZThjZjExNzdmNjNlMmE0NmQ5MjBmZmNlYzRiNTgwYTEzNjEyNTNhNjg5YmY3NjUyMDBmNGU5MGRjNmIzNGE1NmUxMGNmZGJmOTMyZmJjM2I3NWRhMWQ1NWNiYTBjNTI4N2Y1NTJkODgzNzYzYjgzYWNkZmM3ZmM5ZDc2MmY3OTc3NDcwMWY3YWNlNzAxZjBiMjZjNjcyMTdlMDIyYmY2YjZlMDYwMmUwZDY4Y2IxMzc3YjVlYmNjYjlhOGU0MTE4OGRkMWRlYTY2MjY2M2U4YWEwOTM3ODdkNjQ5MGE0ZTg4N2EzNGEyNzMwOWM2NGM0MGU0YWIyZjBhY2ZlYzRhMWI4ZDQxOWQ5OWZiNTc4YWFhODJkYTkxNjZhN2Q3ODczZTI3MjI2ZGIyMGQzMTNlODY4YmNmYTRmZTM4NTRkNmZiMzRkZWY3ZDYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjNjMWU4YTAxOTk3ODZmYzI2OGVlMGNhMGMwNDQ2ZDczNjNiZDc4MTA2OWNmM2EzZmFlZjI1OTJjYmEwNmNlMWU3MGM3YzY5MWFmNzNkNmQ1OWFkZGJkNmUzZjY0NmQ2NCI6IiI6IiI6IiI6IjA2ZjQ0YmViYzJjMTczNmI1Y2VlMjgzZTUzMGJiODc3YjI4NjUxZDcwOTgzYzI3MmExMGVmYTgwZTM3OTRlZTQyODY0NDA0OGQ2NzI0NWRkM2NhOGI3NjliNmJiMTkyYzk0NjhhOWZjZjJiNzFjNDE3MjgzNzEzZDM5ZTgwMDIyNWJhNjU5YzMyNzMwMjJmNTE3N2ZkNzg2NzE3M2Y0NTdmM2JiNjZmZjJjMmU3YmIyNTc0ZGZlZTU0NDM4ZTM1Yzk4NTA2YzE3OGQzNTI1OWIwNGU3YzU0MTAxNmY1YzJkOTgwMDc0YjRlYTg2NTIwM2FlMmU4OTM1ZDc0NWEwMmFiNWNjZTA0ZDIzM2NiYzE4NzE5YjE5MDBmMmU3ZTk4MjI5Yjg1MWQxOWZhYzAyZmE2ZTVhYzFiYzk3M2IyMGExNzUwOTczOWJkOTg5ZDRlZjVhNjZmZDllMTllM2NlZWYyNDE1YjQ5ODg0M2U5MzYzMWIyYjE2ODE2N2JkYmI4ZGIzMTNlZWY0Yzk2NjhkNTAwMWNiMzQ3NjdlZTQxZGI4NzIxNjM5ODdjM2JkYzE0NDYzN2I1MmRjYjc2N2ZmYzE5YmY0NGZiYWQ0ODdiMWVlYWU3OTU3YjQ5N2ZkNTlhOTVmMDk4ODMxNWViYTczYWI3MjA2NTQyZjMxYzQ5MjY3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiJlOGEwOTI1YmZjZTY2ZGVlN2U2YTU0ZmUwMzExZDI1OWJkN2Y3YTIyYjg1NzZkNjQ4NDBjYzUxYzczMTIxMmNiMTc2MzM2NWRlYWIzYWI4MmRlOTk5NmU1Yzg1NzBlYjkiOiIiOiIiOiIiOiI2M2RkZmQ3MDUwOGNmYTI0NzQwOGVjMjMxZDU2ZGY3OTA1ZjY1YjYyZTVlNWE4MzA5ZmZmNTIzOTYyMGZhYTBmMDU1ZDdiOGZkYmM2NDhkZWQ3OGZkNTY3YzMxNDFlMTcyM2QxOTcyOTZjOTJkNDNmZGMxOGFmMGM0YTU0ZmNkNTI2MTMyODZjNzhiYTdiZGZkMGZjYWNjN2IxMWIzNzQ3MzkwODgzMjNiYTk1ZjMwODcyZDc3YjZhYWQyMTIyODI1MzEzM2Q3NmQyOWQwZDc0MmJhMzQ5OTU2ZmU3MWU4YmJmM2ZjNzE4NmEzZjg1ZjE0NGE5MDQwY2ViMDUyOWE3MTM1ODNjMWZjZGVlNzU2ZDAxMzBiMzhkZjA5NjRiZmMzYjY2OWZhYmI2ZWM2ODc0ZDE3ZDllY2RhOWZhNTY3ODkwZTQyNTQwMTg1ZWViMzQ5N2JhOGRiODBiODAzZjYzODAzNDQyYWVjMTQ3MzVlOWVkYTE3NzQ4NGFkNjFiZjBjNzZjMjg2MmI3NjkxYjRjYzc0ZWZiZTM1MjAzZjhjZjRmMjRhYWFhMWQ4MzEwMzBmMjhlZWY4YjQ5ZTg1YjI0OWU2ZmU4MzU5NjRkNTNhYTc0ZGU2YTMxNDI0ZWMzYzgzM2Y0YjhiMzk1NTk5MzRiZjVmMjNkNGIxZDQ1MGJjMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiYzQ5M2FkOTZiYjIwYjI0ODBiZDMxMjJiNGIxZWE1MTM3OWY1ZmEyYmZkOGJjMGZlZDQwODA5OTViMTYyYzYwOWI2ZDYxOTdmNDMyYzg1OTcxNjNmZWI5YzU0Mzk1MjVkIjoiIjoiIjoiIjoiNzY0ZDNlNDQ1OTUwNGI0OTBlYjFkYjdiNWFiOGU2NDEzNjAxZTQ0OTc1MDUzNGY0YzRmNzAwMjUwMjZmODcyMTcwMTBlYjE0NzA1ZWFlNmU1MTM3OTZjN2YyMGVjYWNlMzJhMDYzMjM4ODI0YjNmZDY5NTY4MTAwNjY5MzBiZjQyNWExYzU4NTIyMWM4ZjYxYWM2NGFlY2NmZThhM2UzM2QxNjRkMDJkNTQzNGU5ZTU5NGI3ZmY0NTE2MDE4NzRkMjY4YTJmZDhkZTk5MjJjMzZlNjdkODE0NmZlNTUzODg5YTE1ZjYyNGQ0OTlhMjJmNTEwOTg5Njc1OGYzMGJiOThmNzBlYWMxMWRhMWFkNDhlOTliYjQ0MjJhY2M1Yjk3Mjk1MDk0MzI0ZWVjZjUzMDUyNWMxYmExNTA4ODZkMDUzYzg0MDA0YzI2NTY5M2E0NDE5NjAyZTVlNTliZjEyMGRlNmZmMDU0ZDBjN2M5NmJjMTRlOWI1ZmUxMjkwYzA4ZWJlYmNkYTIxNzQ0YzA0YTJlNzg5NjRjYjJiNTJmOGU2YTcwOTMwZmQxZGVkMWYwZWRiZGE0ZGVmZjkxYTMzMTAwMTllOTY3ZGYzZmRiZmEyMjhiZWM5ODk3NDEyYTc0ODIwMTY0OTMyOGI3ZDc4NDg1MWZjYjVhYzEyNTFmOGIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiIxZTg2OGM1ZmU0YjU5ZTZkNDI0OTg1NDIyNmJmMTEyMGE3NDM4NmVhNTkwZTljMzVjNThkN2NjZGZhZDU2ZDcxZGJmNTU3ZGE2ODQyODllOTZjYmRkNjZjYmQ5Y2I4NzkiOiIiOiIiOiIiOiIyMDMyOTYzYmUyOWMwZDI0YzI2MzFiMWNkODk1MTI0Yjk4MDFhNGQ1YzE0YzI4ZmIzNGNiZmIxYzI0NjcxMzRmNDk5MTUzZTJhM2VjODE3Y2M0YjJlNGUwNjA2OGFlNzhmNTY5NmRjZWU5OTMzNGIwYjUxZTlmMjllNTZhM2QzZmQ1YzY1YzRjYzcwZTEwZjllMGNlYTI1NzJjMjhlYzRhZmUwODk2ZDc2ODkzMjJkM2FmZDkzMWZmODM2YmU0ODVmNzhhYTE3OTEwMGQ0M2Q5MTA1NjRkZDFhZGZlZGNkMzJlM2U3ZTUzYjA2YzBhNDZhOTBiMTE3M2U0YTUxNTJjZDhhYTM4ZjJhN2UzMjlkMDFjMGI4MWU2MmJlNmM5ZmM4ZDFmZjNkYjA4ZjhjMzFjMWU3N2M1ZDdmYWU2MTk1NTVjMGUwMmM2NTg0ODZlMzVmMjdhN2Q1OGNlNjNiOWIxNTJiOWZmNTI4YWI2YTZjZDliNTkyNDBmNWE3YjZiNTJkYzNmNmU0N2Y5ZGFhMmNiOGNiNTI1ZDY3NjBjZjQwOWViZTJjNzY0MWMzYzMyZTMzMDU0NWJjZDczZGE5ZWRhMjBiNzU5MGQ4NDgzMWQ0YmVjODA3YTU2OTk0MjU5YmNkMmZlMjgxMDVmMmQ3ZmNkYjNlZWM1MjNmZGVmNzA0NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjU1YmMxYzczNThkYzMzNGIyNjQxMmFiNDcyZGNmNDIxMDc0MGNmYTBlYTY4ODgxMmQ4YjFhN2ZiMjU3Yjk3OWVkYmFiMTQyNDBjZjU5ZmNjOGE3MDA3NTUzYWM0ODBlYiI6IiI6IiI6IiI6IjZhOWQzMGQ0Y2E5N2RiZmMyZDI4NTJiZWYwNDRiYmZiOTVhYzI1M2IyN2U1ODhjNjdmZTE3OWY2YWRiODExNDdjYzFjYjZlYmE2YTJjNGFmZDZmOGIzZjFjOGQ0NWI1MWFmMTQzNWViZjFiYTg1OTY4MzAzMTQzNTNjOWI0ZDhhZmY5NjIwZGJhMDA5OWZlMGExZWE0MTdiOTdmYTRjMjg0OTFmZTZkMmE2MTkxNzIxMjdmMTgxNTU4NDBmOTA0NTZiZmJmMWU3ZmY1ODdmYmU1NjZkNmI4ZWFkZDZjZTU5NGJmY2JhYmVkZGEzNzg1OGE3NjEwYzgyMzBmNTk0ODYxOTg0ZGJmMWUzZGRjOWVjY2M4YjlkMmVjM2NiYTEzMDZkMTc4Zjc2NzdlZDM5OWIxMGI5OTViM2VhNTU1ODY1MTllNTczMGU1MmVlODg4MGVmMGU2M2M0NzZmMmE4MGQ3N2M2YmE4MDJjNDdlOTE3NDI5N2IyNzUyMGZiMDI3ZDEzNGUxN2NmYTZmOTlkNTljYzVmNTM3MzdjZGMyZTY2M2UxYWM1OWJmNzRhODdhYjEwNjRlOWFjZDQ4MTFjMDQwNmVjNWEyOWEwODFiZDBlZmQxZTU1N2Q2YjZjOWM3ZmU2MTMxYzVjMDBmYWU4MjMzOWExZmI5MGQzYmUyYjZiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiZDg5NDgyMGQ5Y2IyNDM4NTk0NDdjZDNhM2Y2Y2RkMTI1YTljNGZhZWNlNmFkNzU2ZDI4OGExNWM1ZDI0YzM5ZDc3NmM1ZWE5ODM4YzRjMzRmMzlmMTJjMWE5ZGY2NzAwIjoiIjoiIjoiIjoiYmEyM2Y3YWEwYjdmNmE5M2JjMGRmMzJlNjhlNzg3ODZmZmZiNWFjZDdmYmMyODY0NDY4NTY4NzUzZTNkZGYzMWZjMjE4N2IyMGMyMjlkMGQwYjI2MTUxMGY2NDQyODE2ZDIyMjYwMjRiNTczMDZiNDc0MDc5YzkyYzY2YTAwYmU0ODJmYzEwNGNkYmNjZWYwNDUwYjNmMmNlOTRmNmJiNmE1MTI1ZTA3NzRhMjhhMmEwODNmODAyZDNjNDVlOWQ0MjUzMjk1ZjgwY2E0YmM0MzlmNTM5YTdmODJlZWM2ZmQ0NTBiZDE5NmFiNDY4ZWM2OTAyNzUyZGNlZDQ0YWI1NTdmY2QzZjZhNzJjNDdjMGYxOGNlYzY1NDVhYzY2OWNmNDMyZTJkYjMwOGQ3MGE3Mzk0ZWM3NzJhMzRmMTRmMjZkN2JmN2QwYmQ3ZTQ0MzcyNDg2MThlZmEyYzA4YWRjN2RlOTIzMWRkY2M5NzZlZjhiY2JkMTFiZTU0ZGQxN2NhOWZhNTE1ZmVlNjgyN2JmNWVmYjYwMmZlOGYxY2Y1ZDY3MDc4YjE3NjAxODAzYzViZTA1YzI0ZWRjY2FkMjgzN2QwYmUxOTFmOTE4ZDZkYzYyNzQyMjQxNzI4YTg2OTBkYjU4MzZjMjA0NWVjOWY4YmZhODdiNzY4ZjRmZWJmMmYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiIxN2ZhY2RmMmZjYTJlMTEzNDY3NGVhOGU4ZGFhNjA5YjQ0NzdmNDE1YzZhMTNhNWMxNTdmM2ZiNzcyN2RkYTZkM2MxZGQ4OWFkNjNlNzgxNTg4ZTRiM2Y4Y2IxZjJmNmUiOiIiOiIiOiIiOiJmNDcyYjRjMjBiZjA3YzE3MGIzYzhlYjY4MjQ2OWU4ODY4MGQxZmE1NTYxZDcyYjg2NGM1YzQzOGM5NWM0YzhhM2U2MWY4OWZjMzBkNWZiNGU4NDNlNWVkMTIzMDc3OGI0OGM0NjdmYTQ2ZWJmYjdiNTYyMjBhNjEwNDgzODI3ZjNmN2Y4YWMzMDdmOGFhNTdhNjg5MjJhMDZjOGZhNWRlNzMyYTBkMDU4MzVjZDQ4NjkwYTJiM2Y3MzRlNGI3ZTc0Nzk5YWQ3NzQ1NzlhOWViMjk2MTEyZjNlMmJiNjg1NTFhZjBlOWUwZTVlMGJiYjIxOWNjYjZjNzg0NTlkYzY4YTM2NjM5ODcxNTZhNTBlNzJhZWJiMjE5YTFlNDNiNTYwM2RiZDgwNTViZjFlNzZhNDQ2OGNhZWU4NjQ4OWFjOWExYTlhNjZlZTdiMTkzNDg0ZmYzYmVhODQzNDFiNjJkYWIxMjRhNDNlMzg5NDVjZmM5OWYyYzRjMTU1OTBmZTE4MGJiM2U2ZWFjNTQ0NDgzYWVmNzEwMjc4MjEzYTgzZGE4NWEzOGI2ZDE0MGYzMzY1NGM5ZDRmNmI4YWIzZWFjZWYxYzU3ZmQyMjM3ZGJlOGFkZjIzYjNhZWY2YWIzMDMyN2NhMTE5YjllMWU5NWVjZDA2OGFhZmFlMGQwN2EwOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjJjMTNlNDQ2NzRlODlhYTEwNWZjMTFiMDVlODUyNjc2OWE1M2FiMGI0Njg4ZjNkMGQ5Y2YyM2FmNGM4NDY5YmI3MDBhYzZhNjE2YzFkMWJiN2JkOGZmN2U5NmE0ZDI1MCI6IiI6IiI6IiI6ImY3NzgxNjEzMDZmYzVmMWQ5ZTY0OWIyYTI2OTgzZjMxMjY2YTg0YmM3OWRkMWIwMDE2YzhkZTUzNzA2Zjk4MTJjNGNlYmRiZGU3OGEzNTkyYmM3NzUyMzAzMTU0YWNkN2Y0ZDI3YzJkNTc1MWZjN2IxZmVlNjI2NzdhNzFmYzkwZTI1OWRmYjRiNmE5YzM3MjUxNWZhYzZlZmUwMTk1OGQxOTk4ODhjMzYwNTA0ZmZhNGM3Y2Y0NTE3OTE4YzQzMGY1NjQwZmVkYzczOGUwY2MxZmNlYzMzOTQ1YTM0YTYyY2E2MWE3MWE5MDY3Mjk4ZDM0YWM0YTkzNzUxZGRjZDlhMGYxNDI3NDhhMWYwYTgxYTk0OGM2YzZhMTYxNzllNzBiNmYxMzYzM2ZkMDNiODM4ZGEyMGY4MTQ1MGI0ZmRjMTc1MmU5OGU3MTI5NmYxOTQxY2E1OGU3MWI3M2VhOTNlOTlhOThmNThkMDg5MmZhMTZkZTZhMTZjNjAyMDM2YWM4NTdkZDc1ZjlhYzJjOTE4NTkzMjEwM2RiNTQzMGU4MGNkZTkxMzFlODE0YTBiZjNmM2U3YTIyMDBhNzE1MjQyNDQ3MmZkMjdmNzkxYTg1NGYyOWFlY2M0NDhmOGQzZmNhM2Y5MzI5MDI2NmRmMzE5M2Q5ZTEzZTA4OTA3YWIyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6ImEzZGEwNmJjODhlMmYyZWE1MTgxMjkyYzE5NGExMGIzZGIzOGExMWQwMmFjMmY5YzY1OTUxZDBjNzFmNjNlMzZjNzRlNWUzZDdiYTAxOTNiY2Q2ODM5ZTlhZTkzZDcwZCI6IiI6ImRiYjcyNzA3NjBkOGQyNjI1NTc4MDdjZTc0NmZmMzE0ZmQwNjU5ODE0MzYxMWFiNjliZmM3ZTEwY2E1Nzg0YjMiOiI4Y2RlYTg4MmY4OTRlNWZkYzVmMGEwYjE2YjdkOWFjOGNkZTM1ZWQxN2JjYWYyNjY1NTY0ZDRlZTc0MDU5ZTI5IjoiY2I3MDZiOTBlODgzODBlNWMxODY0NDU4NDU0MDI3ODIxYjU3MWRmZWJhMGRhODNmNzEyZWZiMTA3Yjg3NTIwOTk1MTRlZjg3YjQ0ODhmYmZhMzUwOGEwMDk1NGJiMDMwOTA3NjZkMmJiZDM5OWU3MWM4NmM3OTY3YTRlOGRlZDU3MDk1YTI5ZDRjZmEwMWY4ZDI4Yzk3ZTgxYTRjZDRmYzViZTdmYjMyYTBkNmMyMzBjYjg3NjBlNjU2Yjc0ZmE3ZTE4ZTIwNjNlYmVlNTc4Nzk1OGIyNzJmYzVkZTkzZjBkNjgzN2U1NWYwYzM2MGRjNTkzYzg4ZmZmMzBhNDI4Y2FlMzdkZWQ1MmY4MjU2NDZlMDQxMzNhMTk3OTBjMzA0ZTRiMWYwNDBlMTA0MzljNWVkZjQ1NGU2ZjcxYjIzZWViNDNjZGJlN2IwNjM0YjhlMjgzYTk3ODA2MDczZjdmMjhhNDNkZTJkMGQ5NjliM2VkYTM4MGMxODViNzg1YjkxMDFkYzkwNTAyNWM5Y2RiNDk5ZTU5NGRlMGYwZDNlYjQxOTIyYzIwOTk0ZmUyYzQwM2RkNWJmMDFlNGIyYzNlZTY2NTRkNmFiOWNjYTdkNGQ1YWU1OTUyNWE3OTYxMTk1NDdlYWU2YTNjYmY4YWQwZTliMWRlM2M0ZDVhODA0ZTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNDYyY2IyNzRiN2RlZjFhYzBmOWRiMTM1YzhmYTJlNDg1OTljZmUyYmFkZjJhZTlmNmQwNjg4NmIyNWRmYjBjYzI1MDQ2MWYwZGFkZDllMjNjYzZjMDhkZGY0YWUxMmI5IjoiIjoiYjA4N2ZmNWUyMzAyODRhZWY0YzkwYjVmOWM0OGZlYzkxYjQ4NmYzZDkzNmQ0MjI0NzVhMmIxMmZmNDdhMDViMCI6IjE1MGE0Y2EzODNjMzg2M2Q5YWUzMjEyZGU5YWI5ZGE3NDQyZmNkNTM2N2FmMTU3NzE0ZDc0YzE0OWY2OWViOWQiOiIxMmQ0NzQwZGQwYzUzNTZmYTc2Y2M0NDFmOTA4OGUzNjFkM2U2MzZkYzdiMWVlMjdhMjZlMjgyMThlZmY0NzBlMjhmNTFiNzY1NDA5MzlkNjI0Y2FjZjJlM2ZhY2YwOTY3ZTczOTZhNDIwMTdmNjg3ODllNTNmNGIxZDIxNmZiYWU2NzU4MDFiODg2OWIwNmQxNzNkNDIxMjZiZjg4ZmJiZmVmNjBhZWE2YzRiYTE1NTM4YjJkNjRmOGYyMmYzODllZTM1ZTAxZTRlYTg4ZmQ3YzllNGQxMGMxNDVhNWY2ZTRkZDMzYTU1ZjJjYWZiZDVmNTY4NTZlYTk0NWIzYjU5NmI0OTAwY2Y3ODkzNjczMmJkYTQ5YTUyYmM1YTY0OGM2NTYxZjQ4YjgyMDY5OTUzM2Q0OGZmMDRlY2NkODFhYWE1YmQyNWZhMjc3ZWYzMTQwMjZlZmZlMmU2NWE5YzM4ZDQ1ODMyY2JiODk1Nzk1MzU3ODJiZjYyOTkzMjczMzk1OTFhM2U2NmQ4MmFlZjZmY2ZhMGEyMWI2YjUwYTM5OGI3MzdhODNhNmE5YjM0ZGQ0NmYzZDE1MTYyZGZhNDg4ZmNhZGQxOGRkMDZmODU2ZjZkNmM0Y2FjMjY3N2VjYTY0MWJkNGUwNDRlZjRjZGRmNmM5NWYxNzI1ZmQ4YzYwNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI3MjczMzc3NjVkYjcwNGU3YjlkMjNkZDEzOWU2M2I1YWM5N2FkZWE5OTBiN2QwNDg4MWI2YjJkZTA0NWM5NzRhMDI2NTIxMGFhNGUzMzZhYzMyZjRiMGE0MjhmZjI3MmEiOiIiOiI0OGI0NTJjYmFlYjk5MGI2Y2E0YmE2NGFlOGYyYTkxZDc5MmFiODNhZDQ5OTA5M2Q5YzQ1NjZlZDhjN2NlZTliIjoiZTdlMzIwOTY4NzMxODBlMDNjOWY3YmIzM2M1YWY0ZWRjM2ZiOWEzNjExMzI3NTgzOTMwMmQ0MGYwODkwZGJhZCI6IjIxYzdkNGMyNTg3NzhkY2U2N2YxYTEzNDY3MGI4NTk1ZGJiYjBlMDM2YWU3ODQ4NGQ3OTUzZjI4MGYxZmFhNWZiM2JkMjEzYTU0MTMyYTA4OWE5ZDZmMTM3NmNhOGI3MDY0NDAyNDA5MTg3YWNiZDVkZTdlNGQ3MTQ2YzFmMDJmNzMwODdhNmM2MmNhNmE3ZTczNjkwMGE5ZTQ0NjRhZjAzNTFiY2I3MWIyZTFmMWNjMDc0NDBjZDc0ZjUwYTYxNzU3ZjBiM2JiYjkxZmRlOWM4OThlNjJhOWNlYzNkY2FjYTBjOTRkNWQwYThlZGFjMGY4MmIzYzk5YjY1ZDczNjg4NGZmZGQyM2ZmZjFkOWQ2ZTgxOTkyNTRlNzg0NTE0ZmUzYzM0ZGI1MWE4NmVlYjA2ZWY3ZGZmY2ZiYTlmMTk1YzUyY2M0YjJkYjUzZTBhNmIxYmRiZWQ2OGQ4NTgyMmM2YzAzNTcxNDgyZmRiNjUzNWVlZTFiNmUyNmNlN2QzMzQzM2QzYTEyNzFjNWI5M2NlOWEzMWM5ZDdjODA1ZTM2MzVlNzk2ODJmYTVmOGU3ODk0ZDhkMTZlYWQzMmUzZmU4YzYyNTE3NGExMmE3Yjg2MjNjMDAwMGE3NWM1MDZjZDM2N2JkYmM0ZTNkYTNiNDYyOTM4ODc1MDUwZmYyMjcxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjhjZTNmNzdjNGJhNGY0MGQ0ZWIzZTgwZDAzZjliMTM4YmVhNzI1ZDQ0ZjdhNDdmNGExZjdlZTNhZmI0NWMyYTBlOGZhNzU2ODNiYTAzOTY0YThlMzMxMmNjYzZlMWI2NiI6IiI6IjgzMjYwNDMwODQzYjU4NmNmYTUwYWI1MTEyMGVhNTY3NWQ2MzQwMjA3NGQ0NWIwYmY4MGRmYmJlYzc0ZmRjNjMiOiIwNjQwYjY0MjdiZGQ2ZWFkNTI1OTYyYjIyODM5MmIzYzI4YWJlMTMxNzE5ZmViMGMwZjczODI4OGVlODdhY2JiIjoiZDBhNDAyZGFjNjQ4ZjdhNTNiNWZmYmViYjFmNWU2YTEyOTk4Yzk5OTgwOTAwN2YzNTdkYzU2OGQ3YzY1M2JkM2I0ZGE3OTNkNmQ3ZWY4MDIzMzhlYjM2YzdlNDc0NTY1NTAwMWY3MDBjNGNhNjhjZGEwN2Q3MjZkZDA4OGVkOTk0OGIyZDQ5ZDhiNTBhNzI1MzBkYzlkYWEzMzg3Y2Q2OWNlMzJjYTQ5ZGZhNmNmY2E5OGY4YThiNjQxYzkyOWY4NGM1ZjQwNDU1NzlkYmZkM2ZkY2Q5OTcwNjhiYjBmOTA1ZjlhNGEwMGFjY2YwNmE0ODMyODJlMmViOTliOTRkNzhiZTQ2ZTA3ZGM4NzkwMzIwOGJhYzBmYTc1MzIzOTIwOTk3ZDljNGY5YzBmYTRjY2E1ZTZiMWQ2OWZkYmZhZThkYmI1MmQ2NTkwMjgzODc0NzJjMWE1NDI4M2QwNzQ5NTQwOTRhZTExYmQzYWE5NzM2MDA3M2VlMDMzZDcwMDhlNjNiODllMGVmYTQ3ODhlZWZhOTZhYjcyNmFmNGMyNDIyYjc0NzJmYTFlZmI3ZDk1YmVjOTNmY2NiNzM1MTc2ODYyNWRlMzBkOWY1Mzc3NjEwMDI2YjZmN2Y5NTY4YTk2NTk2NDRjN2U2ODQ4MzY3MmNhOWFjOGQwOTk0ZWZkNjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiOTZiMGQzYjEzYTY1YWUxMDEwYmY0MGU2ZTJkYzZlNjU4NWRiOGZkYjhmYmQyYjI3MjYxMWU1MWM2MmUxMTExYWU5M2JhYmRlMjA3YTQyOTgwYzlhYzkwMThhYjAxMTUzIjoiIjoiYjY3YzJlY2JjNGQ0YzQ2YzM1NzM4ODNiNjEzMTFhMjY1NWNkZmYwZTAxYTEyYTIwZWEwY2ZhNGU5MTAzNGMyYiI6IjljYTY5MTAzZDVhZjU3N2RhMDU2ZDRkNWU5NWY1M2JlODdhYWU0Njg5OTE4YmRmMGQwMTE3ODlmMmNjYmE5YjUiOiI2M2YwNWE5ODE1YzI2NzEyOThlOWNhYTA2YjA3NDY3NjdmZGNjMDA4ODRlYjFiMzBlNTNiMTY1OTM1MDhiYjc1ZGNhZmY5OTMyMjMwOTEzZjliNjJjZDAzNjFhZjE2ODk5M2NlN2I2Yjk2NzExNGUyNjEyYzhmOWMzNzYxMDQ2MzNhZDRlYWUyZTk2OGU0NTViOTZkMWQ1ZWQ2OTI4ZWVlOWFjYjIxYmI4ZmRlZTdiZjUyNWYxNDNkY2M2MjRhNjZhZDQyZjFiZGJhZmMxOWIxNjUyODRmMmM3NzFlZGM1N2RjOTA5MmZmYWU2ZWY4YWNiOWY4ZmRiYTQ5NjYwN2M1NGIwN2YzZmY0ZDE3MjFmNDVkYjQzZjhlZDVjNjk1NzE2YjQwNWI1NzAzNGNmNGY4N2FiNDg3YTAxMDU3ZWQ0NDliZDkxODA5M2M1MzJmZTg1MDE1ZjBjNTg1NmNiZDdhNDQwYzMzYzc5NjhkZDI1MzMwZjc4YjY2MjQ4ODczOTU5OTY3ZTMwN2Y5Yzk2OTc4MDNlOGIwOTM5ZmFlNTE4NzBlYzUzM2VmN2QxN2UyMjdkY2I2OGNjZjI3MDI5OWU2NWVkODQ4M2I5MDc3ODMxZTAxMGU5ZGRhM2E1MGVmN2IwMDhhMDc2MmM4YWM1ZWY0MmI3ZTJlY2JhNDUwZDdkNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI0OTkxM2UwNGI2NTNkODJhYmM1NGNiZGRjZGY4OThjNDA5ODE5ZGJkZGE0YWY5M2JjOTdiNDM0ZGQxZTMxOTcwNjUwNGIxYzc2ZjM0Y2E2ZDlkZmIxODFjNzA1N2VkOGMiOiIiOiI2OGI4ZjZmNzQ5YWQ1ODhmZjJjNzQ3N2ZkN2M1NWJlNjQ4MTM0ZDU3YmU2ODQ2Njc0ZjI2NTlkNzU3ODVjMzlmIjoiY2Q3YjJkN2IyNDA3MGU1MDE4NDNmMGNhYTIwNjY2ZmJmOTYzNzYwODkzZjRlMjc3ZDk0NDk5MWVjOTY1ZmJlMyI6IjY3YmEwMWZlNjk0ZDhmOTYyMWQ0N2JlMGRkOTExOWI4NjU0ZDAyOGU0YzA5NTM0NzYyOWFmZDAyZTk2ZmJlNmU0NTM1ZDE2NjZlZTAzMzFhNmRhNzllNzAzNTcxZWEwOTgzYTBkMDIwNTFiZDk1ZGQxMzBjNzczMzAxMjQyNGI3OWEwYmRmYmNmNzJjOWNiMGM2ZDZlZTQwOGUyZjBkZTQ1Y2IwODRkODE4MmQxYjhiNGQzODliNzhkMGUzZmJiN2YzYzg4OTFlZjUyMmYwNzc4NTFiMjQ2M2JkZjEzOTlkMTc4ZGFlMzI5OWE0M2IwMGY0OGNkMTA2OGUxN2Y0MjYxNWJkNTA2ODc4ZWVmNWZjZDU5NTFjMjQ2NDFiNThmN2E1NjMyNDBhYmJhYjU3NzlkYjFlNDRiYzJjNjZkZDQ4ZWE3ZTc0NjY2MDA0MmJmOTJiNzI3ZDYyMmJhZmViYzA1ZGUzMDljMjQ4MjRkZGQxZDlhZTg2MDM0YTg2OTRhZTU5NjJmNjFhYjZlNzZiNDM1YzlkYzhiMzcwZDcwOGFkYzRkNmZiYmZjNDQ2NDRkYTNmNGQ0ZjI0ZDNjOTVkOTU4ZGUxNDM1MzFjODRiMTg4NDQ1YjY4NDA3NzU3MjZjODdiMWIwNThkZDhjMTRlNDY0ODk3M2Q1YTkxYTE1MmJhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjQ2ODcxMzU3NjM1Njg0MThmNmYzMGFmNDAwZDM3ZDc5NGY3MTJiMTBhNDIwODdmZDgzMmQ4NDBiOWU4YjFmODE4ZGFkZDFhYmEwOWU3OGExOTI1ZWNkOWVlMGQxMDZmMiI6IiI6ImFjMDBkYzcyOWM1NTI2Njk4ZmI4MGY2ODVmZmU5M2U5YzI1YmY5M2IyMjQyNGMxNWMyMDA0M2UxZmNhZmJjN2QiOiI5NDg1NTVkOGE2ZTA0NzNhNzY5YjcwMTllNjkwOWE4NTY1ZTM4NmE2MjRhNDdhMWY5Yzk2ZmY1ZTY2MDlhODk0IjoiNGYwOTM4NGJhOGEzNGY4MTlhMGQ0NDczYzMzODdmNzQyOTk3NTNmZDE2ZTM4NmJlNTFhNWVlNzBkMWIxNjRiZTZmYTUzYTNmYWNlMDYzNzlkYTJkOTYxYmZkNmJhMjFlYjQzN2JjNzdiNTI3OTYwMzUyNzkwYmJjOTc4MjE3NTQ5MDA2ZTc0MDliODZlZTk3ZDZhMDQyOTU3ZDI3YTAyZmE1ZjA0ZGU5NDc5MWJjZDdkMDJjYzY3OThiYzY2ZDNiNmNkODg3ZjJhOTg0MjI0YjNjMjc5MzgyNTU4ZmY2NDQ1OTcwM2Q5M2I0MGZjZGJhYTdhYmUxYmNkZjBiOTVmNGM2ZWM2NTgzYTg2YTQxZjgzN2M2Y2JkZWZlZTNkZTQ3NjdlMzMwY2IyZjRhMGQ4OTE1ZjE5MmYwMmMxZWJmYzc4MzQ1ZjgwZDVlMGYyMTE4NWM2NDczNzZkNTg4OTkxNDg2Y2E5YThmZTVjNjhkMGI3MWE1ZjgxYjA4YmIxMTJjNTZmNjljODk0MTJmMDI4MmViMWJlZDBkMDVjOTU5NjA4ZDFlYjZiMWViNGE3NmE3NmFlOTI3Y2ZkOGQ2NTFhNjUxZmU4MzY2OGYyNGJjMGQxOWU1ZGU4NjgxM2IxNmJmZThjNzcxZGM5ZjE2YTdkNmQwNDQxYjMyNzhkZTEzNmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNGNjYzNjNmNkNzMxMDFlZmI3ODMzY2UxMTk1YjI4YjNhYTNlNTYyOGRiMDJiZTE2NmYyYTdmNmJmN2U4ZWZkYWQ1ZmYzZjFjMzc1ZWY5ODEzMzZhZjI4MjUyNzU2NjQ3IjoiIjoiODM5NmVkYWNiZTYyOTgyNmJlNDQ1NDNiZWNlMTdlZGU2MDBmN2Y4NzdkMTEzOGFmNWU4M2MzZWM0NGI4YjBkZSI6Ijk4NTQ1YWQ2MjY4ZTYwNGZlZGVhY2FhMTBiNzI3Y2VkMGIwZTI4NGEwMGMyOTA4MWE0MWMwZDJlMzY3NWJhY2YiOiJjMzdlZjkyNjc1YWQ5NjNjZjQxZWU1YzE0ZDg4MjY5ODA4MmU4ZGRhNWEwY2U5ZDUwYjg0MDljOWYwZDMwZDMyOTRjN2M2MjVlZjI5YzMzZjM5NWRlMTQwNDA1YTZmOWNkOWQ3MzdhMjlkODkyYjY3ZTkwNDI3YWYyNGUyMDBiYzljYzdiNWQ5MjBhYThhOTNkOGRkZDBiNmY2OWNjOThlMzAzY2EzYTUxMmIzZDg4M2VjNTQyNDAzZDU4YmFiMWI0MjMyYzMxNjk2ZTcyYTc2NGYyZGM3YjI3OGJiYTAyZWZkYmQ1NDEzYTA4NTYzODMzZWY3YTI4M2FhNmU1YWIyMjFkMWNlNWM3ZGQxNDM2M2VjYmVlZTg3OWQxNTdiNmFlZmM4YmZkMmFjYzAwNGQxOWVkYTdjYjRiMzgyZTU0YmI3MjU3MDViM2Y1MmNhNWJlMDhkZjQ0NWQ4ZjZlYjQ2MzUzZWYyNjIxN2JkM2MxYjUwOGYwNDllODEwZmFiYWNjMGE3NWQ3MTdiMmJlYTlmNjNjZDhkMmZkZmZjMjczMjJlYWZjOThlN2RlMThhOTExZmY0NGNkMGU1ODY0ZTA4OTdmMDU1MGUzYzQ4Njc0ZDExZGJlY2M5ZDZkNGM0MmY3NTkyZmJhNDQwNjA4YWQ0NzllZDI5NmE2ZWE2YjFiMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI4NWVmMzMwMzhlMGJlZTNlNDBjZThlZWZkMzY0OGU4OWM1MjFhZDUzN2IwYzgwMDM2MTc4MjRiMDhhMTU0Yjc1Yzg5ZjAzNjg0NWE2ZjI0ZmI5YTE1NTEzZWQyOGVkYTIiOiIiOiIyYzY3NTExMGEyYmJjZWU1YzYwOTZjZmQ4ZjM2MzQ0MWUzNDczNjY0Y2YwOTU3N2E5NTk5NjkyODUxOWE5MjkyIjoiZjFkYjA5N2FiZWQ3NmNkYmIxZmU2YWFiYTk0YmI1MWMyYWY4ZjQzYzVjZGQyZWFmZGY2YjQwYTIzNGQzODk3ZCI6ImJlZGE3MTYyZmIzZTA3ZDk2YTU3OTZmMDkxMzg4OTk1ODk0ZjY5YTU5ZjA2YTBjN2M4ZWI3MDRiNWRmY2I4MmY3MTcxZDM0NjI4YjExNmUxY2ViMGIxODBlNjA1MmQwMWZjYjEzNTEwZWRkNDA1MGUxNWQ2YThiYjI3YTViYmFjNDZkODg0Nzk3MmYyNjM4OTY3ZDUzZDViNzc1MjQ1MmJiZjBiZWJiOTUzYTRlNDAyMTJhYjU4N2I4ZTc0YTk1OTkwMjFjOTMwNzFhYzU1YTA4ZmVhYjcwZWUwNDBjM2NmMzIyNDY4NTcxNjdmMTM0NzNkMjBhMzhjOGQ2ZDM2NGRhNGQxZjA0M2UyNGE2NWIyZGM1OGFlMmE1NjIxNWEzNDA4MWZlOTFiZDU1NGVkZjg2YTdkNTgyYjIyNzMxNjY2MmRhYzZhNzE2OTM4MDY1NDU3NjAwNjBmYzFhMjA0ZGY0MGYxYjVkZjkyYzdiMDU2MTUwN2VjZDk1NjA5ZmE1MzE3YmM0M2IxZTlhNDA4ODBhMjMwZmI0ZGViNzljZjRhN2EyYjk3YmVlYjljZDRjOGM4NDFkNGVmMjY2OGQ4NzBlYWExMWYyZmJmYTBmYjg5OWE0MjRmMTYwMGJkNDY3NzgxMzZkZWRkMTQ3ZjEyNGRkZTRkNjQ2OTMyMzM0NjJiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6Ijc3YTQ4ZmNkOGNiZWExYmUxNDVhNjVjOWUyMGNiYzRlNjYwZGQ0MzljN2VjN2UyZGFiYzZmMDQzMGM1YmE3MTYxODJmMDVlODM0ZTg0ZTg5NTY1NzE0ZmU4Y2NmMGRlNiI6IiI6IjFiODM4ZDQ2MDk2MWI4ZjE2MjM2NjdmYjMxNjc3MmNmNTBhYTQ2MmNlZWI1OGMzNmUyYTY0ODJjZTdhYTlmOWYiOiJjY2Q0MDQ4YmFlN2Y4MTY2YzM1ZTkzMmNmM2EwOWZlYjJmOTdkYmIzMWFmNjFhM2ZlNWU0ZWRiODgxYmE2OTMwIjoiYWY1YWZiYjhkNjBkNzdjMzZjMjBhOGY0YzIwYjY4Y2NkN2ZkZGI3MDNkMWFlODNiNTk4MTYwNWM0NDgzZTRmMDkyMzI5YmQ3NWFhZWViNmZiNGU2NTUyNTQwYmQ3NzJlZGJhNWU1YTk2ZGQyMjdhY2VmNzMyNDEyNTdmZTg3NzRmNzU3YzY3M2RjMzM3MDQyM2RlNWE4NWI5MTE4YjVhYTk4NjgyZGI2YTg5ZjUyMDE3NGEyNWU4ZTRiNzFmODNlZjQzMmE5MWRkZDhmNjljMTQzMWM0MGQyODJkN2U3ODk0MjdmMThkOWM1NjczMTMxZDVkMzc5N2QxMzM1ZmZkYTY0MzE5ZDY0MmY1ZWE1YzE2NDEwOTI4OTNhNDAwOGYwNzZiNjQ5MTcwOTE2YTAzZTA2ZjA4NTQ4NDg2MDdjNmM0NGE5ZjI3YmQzYjE3YjI5M2E5MTRhODYxMzllOWExYjExYzg2NTJlYWUzNzU3MTYyZjlmNzE2MWEyZWU2ZjQxMmE0MDAwMjc4MWU4ZmM4YjgwMjQyMzMxNTI4MjI1ZTcwYjliMjNjNmIyYzk3MGRiMTJlYWI2MWJjMjkwZmVjOWI0YzZjMTNkNjQ1NGQ3MzM2ZjQzOWQ5YjRiMWRmNTkyNDhhYjg0ZTNhNzlkN2YzN2RmMDdlODhjMjBmOWVkOTIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjcxY2VhMWJhN2E3ZGM3OTJjYTMzMjg4Y2NmYjY3NTcwZDliMWVhYjM0ZTM1Mjk2MjA5ZGIyMGM2Njc2ZjE3NGRmNGUwNjJkMWY2NjA1MjI4ODFhZWIxMWE2NTE1ODFmMyI6IiI6ImM5NjY3ZDI4NjE0ZmEwNWYxMTJlYzMxNDg3Y2RiM2Q5MjVmMmNiMzEyMjAyZjdkODU2OTVhOGY3MzM2NTczYjkiOiI2MzYzZGM0ODVkZGI5YmRkNjFkYjMzZmIxYmVhZTliZmUyZDBlNzc4OGE4NmI1MDc3NGY4NjU4YmFjMDk0MjE0IjoiZTYyNDg2ZTFkYzg1NGY5MGI4MDM2MzVjMTcxOGYwNzVjZWNmN2ZkNDRkMWQzMDRkMDEyNzk3OWI4M2JlZTVlNGFiZGFlOTA3NmZjNWVmODlmNjQzNWU0YjcyY2VlMDU2MzcyYzYwM2YxNmJlZWQzOWEyYWRmNmRkYzI1NzdiMzJiMjkzOTZkYjgxZTljZTU3ZmI2N2MyNTI1YzJhNTlkZWEyNTlhY2U0YTdiNjU2MGVlMjBjYThlM2Y0NzY3ODZjMzQ0NjZmZjVmNmI0NWNjYzkxNjQ3N2Y2ZmU5NmU3ZTRiZTIzODY3YTlmZjlmYTA3NjA5ZDlkOGE1ZGI3ZjVlMWEwNjhiYTliOWM4MmJmNzJlNzZkMTdmNzM1MThhZmZkNWM1ODM2ODIzMmJjYWZlNjUwOTY5NjJjNTYxNjE3ZjQ4OWM4ZDk3OGNiMjg2NzZkODkzMmEzYzM0ODllYjBmMmY0OGExOTM4MjZlZTc4NWRjODUwZTQxYjBjZWQzNTllY2QyNjM2ZDk2ZTgzZmRmODk5NjYxN2U2YTM5ZTE0MWMxMjRhZDFlMmU1ZmRhZDI3MTQ0ZTYwYjU2ZWQ3MGQ5MTU0M2YzMDQ2YWNjODMxYTZkNTY5MjZhYjE2MzVkZTdlMDRhMTQ5OTU4YzkzNjVhNTNjMTQ0OTAzZDdlYTM5MmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjNhMjM2NTNhMzQzMzRkYjdkM2FiYmY3NDdkOWQ0N2Q2YjE4NTg5YWIzNTE2YjA2MDBiYzkzNTE3ZDIwNmExYTljNzRhNTE3NjZiZWVjMDU2M2RiNjU1MjczZDVkYmNmOSI6IiI6Ijg5OTIyZjQ1ZTY2MzdlN2ZjYWUwYTk4ZDdjY2RjZjM2NjUwYmJmN2ZlMzI1M2I3NzE2MDE0MDQ3YTA5ODNlOTgiOiI1ZDc1MTliM2Y0NDJlMTI0NjE4NWUxZTdhNTZmZDM3NDczZjE4ODI0ZjNjOWQyMTY1NmY1NGYxZmE4ZDI5NDdmIjoiZmE0MGI2OTM5N2UxM2Q1ZjFjZWFmMjk0ZmIxZDNhMTVkYjhiMzQ1Mjg2ZTUzNTliYmZmZTVjZDc0M2ViYWI0MTI4NDVhOWY1ZTRlZDg0ODFjZWExNzhkN2I2NDcwMTlhNzcyOWMyNjQyMjA5OTFjM2FlMjc2ZjgyZDZjMzM0MDJmMDYxYWFiZDJlMjhjZmVkNjQ1NjVjYzJkN2YxNzc0ZTI2MjgxZDA4MDhiMjg1N2QxYzE0NGQ1YWEzNjk0NGEzODM1ODE4MWIyOGI5MTEwNDcwNjAxMjA0MDc2YzAyZWQ0NGVmNDExY2Q2YTc1ZmVjZjU1MjI1ZWViM2VmNGYxNzE3ZDNmNWNkYWVjODNmNWRlZmU4MzVkMmEyMzZlYjFhOGYwMDE2N2E3MjczMjkxNjNlZWQzNGIzYjM0YmFkZTc4OTZlMmQwZGUxZGIxYjE1YzdjMmIxNzNlZThkNGYwYmY3N2Y4ZThhOTczYmU2MWUxMDdkYWYyNDBiOWI3ZWRiYzU5OTQ2OWI1ZjQwZTk4YzBkMmQ0MGIwNDhjZTQ0NjJjZGVhZDdlOGY4NWQxNzVhMWYzOWY4YmFjNjFlYzAwZjRjYjRjODA4MTIwMWNhNjMxOTk4NDI2NGFkY2E3NDViMWQwZmViNDcxYjVkOGZhMzViZGVkMDMzNTdmY2Q3ZTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjI0Y2QxMWU3NWYyYjBhYjYwYzViN2EzNTAyMGQ3MTZjZWEyZTRmNWI3NzQ4MzI3YzBjZjM1NWIxMTgwNTE4OTMzNDg4OWRjMzE5OGYxM2MzNmNmN2JlYjQyYjJhMWE2ZiI6IiI6ImNmOTU3MWZlY2FjNWQ3OWQ2NTYxN2E4ODU4MTU3MDNkZTM0NTljZjczOWRiMDk3ZjhmZjJlZTU1N2QwYjA3NDUiOiIyMjgyY2JkYmE2NGFjMmE0MDUzYzA3MGVmZDFkZDA2MzhmYzMxZGZmOTdkZmExNWY3NmJjMDc3YmYxNzNhODIxIjoiMWIwNDY2YWU1NzdjMGI5ZTk0MzYxNjQzN2MyNGI5ZDMyY2VlYWVjMTViYzgzODQxODQzNTg1YzYyNTU1MzRhNGE3MWFjOTY2OThmNjI4ZDkwNzI1NTg5NGY2MTk5ZjZkN2JmNDA1YWZiMGU0NjM1OWFlMGRlYzc4OGNhNTIxMTE5NTBmOGFkZjg4ZDMyNGY1YjlhNzZkNzllNjdjMzU4MWIwY2YwMzE4OTAxMzMyODgzNzk0Mzk4ZTZhZWEwZjdkYTFmNTVmMzBjYTM0YjExMTI3ZTg4NWU4NmQ3ODdmOGY4YjNhMTM0MmQ3MWYzNzM4Yzg0NDU3MDdlMGRlYTY4N2JhZjc1OWIyNjFlY2ViNGQ2NjFlYzliYjAwNmU5ZjA4YWViMWNjMDM1N2NkOGRmNTI2OTQzZDcxYTZkNzNjOWFlODBjYTY5ZmNjMzAwNGI5MWRmZGIyYjZiOGQwNDI0YzFjYWQ4MTY3N2Q1MTBhYzdhNTFjMWNlNmYwMmI5YWI0MTQ2NmUzN2FlMGMyYWRmYzYzYjMxZmMyZTQ2OTNlNDY3ZDMzODRmZTM1OWU5ZjBmZDBmNGQwOGY0YTkwMzdmM2ZkNTQ5NWQ4OTViNmVkNDEyMWNjYTAzN2M2YWE4N2E1Y2NjNWI4NTZlZTYxNTFhOTAwNDU5ZmYwZWE3NzU1MGUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjQ5MzFkNzZhN2NlYjIyMzhjMWYwZWQ3NmJlMjRkMmZlMWE5MjVkMTA4NGEzOTJmYzhjNDNkOTM1MzVkYTBlOTM1MWU1MmFiYjU4YTliYzM0YzQ2ZjI1NGI4MzEzZDM4NyI6IiI6IjkyYThlYjA1MDM0NTU1NjgwYmM5MzdkMGQ5NThlODIwYjA5Nzg1MDA5ZTVlMDU3MzlmMjlkOWFmMTdhNjM5NzYiOiJkMzc0NjVhMzBmODM3ZmUwNWYwNGY2YjdhZDRiYjFjODNiYmFlODNmOWM3OGYwMjdiNDgzMWY1ZTJhZDJkZDc4IjoiYTYxODk0ZDNjMzAwODFjNzgzNmRlZTg1MDZjYjk3YmY3YmI0ZTU2YThhOTRjNzJkOWM4YjY5MDBiNjllYTY4YjMwYzQxYWQzM2RkMjE1NTQzNjFjMTcxY2I5NTljNTU1YmI2Njg0MzYyOTNlM2YxYzEwM2JiNzI1MDllNDNmMmJhYTE5NzQyZWQ4YzJkM2ViOWQwNzkwYzg0NTA5N2E3ZjBiMjcxNWIzZDEyN2E3ZjA0M2M0YjI2NWI0ZDZmYjRiOWFmOWVkZDEyNDI3ZTFiNWM4YjY4MGExMzVhMzE1NzYxYWE0YTllZDU5OGE3NjIwZjMzNWZkNTk1YzQwYzkzMzY5NmNmOTViN2VjYTU1ZTg1MjBlOTE1NGY2OWUzNDQ2ZWE0ZmMzYjY5ZjM2ZmExYWU3ZWI0NTZiMzUwYzkzYTFlYmRlMzQyYmQ0NTc4MTQyZDgzMzgyNjhhZjFjMjQwYzk0NDU3ODg4ZDA0NWQ3MzE5NjM0NzMxOGY4OWUyODE4NjViODI2ODM3Y2E3OWRhNWE2ZGJjODE1NjljNDJkYTQ3NWQ5N2FiNTUwMWExYjEzZTk5MDU4YzQwODQwOTU4MzMxYmI3M2M3OGU1ZWM5MGFhMDQ2NGI5ZjYwM2YxMWJjNGJhZGRjMjhiNzFjNDIyODIxNzY2NTQ0NThkMmZjYWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6ImZmYTU5NmVkNzI1ZGFlYTkyMjczNTE5YzI3OWQwYTI2YmU3Zjc3Y2VlMWZjNGZjYTQ0ZGM5OWI5N2FkODEyNWEzMTcyZTVhMzZlYmM2NzFkZjFmY2FhYTU0YmQ3MjE4YSI6IiI6IjZjZmNjZGQ4MjUzY2M1YjI4NDcwMWVmOGQxNmY4ODg4Zjc5MTAwMzczYTdkZjUwZjQzYTEyMjU5MWJiZGRhZmMiOiI1Nzk1YWU1YmU0N2E3Zjc5MzQyMzgyMDM1MjUwNWUzODkwYmFjMzgwNWMxMDIwMjBlNDgyMjZkZWFiNzAxNDBhIjoiNGEzOThjMTE0ZjJlMGFjMzMwODkzZDEwM2I1ODVjYWRjZjljZDNiMmFjN2U0NmNkZTE1YjJmMzJjYzRiOWE3YzcxNzJiMWE3M2Y4NmQ2ZDEyZDAyOTczZTU2MWZhN2Y2MTVlMzAxOTVmNzcxNTAyMmRmNzUxNTdmNDFkYzdmOWE1MDAyOTM1MGUzMDhlMzM0NWM5YWIyMDI5YmRjMGYxYjcyYzE5NWRiMDk4YzI2YzFhYjE4NjQyMjQ1MDRjNzJmNDhhNjRkNzIyZTQxYjAwNzA3YzdmMmY2Y2RmZTg2MzRkMDZhYmU4MzhjODViNDE5YzAyYmY0MTliODhjZGUzNTMyNGIxYmZkYWRkZmY4YjdlOTVmNmFmMGU1NWI1ZmYzZjU0NzVmZWIzNTRmMmE3YTQ5MDU5N2IzNjA4MDMyMjI2NWIyMTM1NDE2ODI1NzI2MTZmM2QzMjc2YzcxM2E5NzgyNTlkNjA3YzZkNjllZWMyNmQ1MjRiYTM4MTYzYTMyOTEwM2UzOWUzYjBhOGVjOTg5ZWNhNzRmMjg3ZDZkMzljN2NlZGE0ZGY4NTU4ZmFlYjlkMjUxNDk5NjM0MzBmMzNiMTA4ZGMxMzZhNGY5YmZhNDE2YjNjZWFhNjYzMmNkNTUwNWZlMTRmYjBkNzhjZjE1ZjJhY2ZhMDNiOWMzMDciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiZTk3YTQ2MzFkMGEwOGQ1NDljZGU4YWY5YTFhYWUwNThlM2U5NTg1NTc1YTcyNmM3NmEyN2JjNjJiZWQxOGE0YjIyNzIyMWQ1ZmU1YTVkYjk4MTBmOWFmZTU2YTNlZTc4IjoiOTQwODRiMTFkNTVlMGY5YzJlZjU3Nzc0MTc1M2FmNjZhZDdhMjViMjg1MjRiNTBlYTk3MDEwNWMzNTQ1ZTk3ZCI6IjI0YzgxZDQ3NzM5MzgzNzFiOTA2Y2Y0ODAxOTU3YWMyMmY4NzQzMmI5YzhhODRiYzVhYzA0YWQ1YjFjYzNmNTciOiJjOGM4Nzg0NTFlMmI3NjU3N2MzNjM5M2NhMjUzODg4YzEwMzg4ODViYmZkYWNkODUzOTYxNWE2MTFlMmFjMDBiIjoiNzYxNDIyZGVhMjgzMjYyOTk4YzBmZmZmZWZjNzdkZTJkMzk1YzgxOGI5Y2YxYWMyYmNkMTE1MzIzNWUwZDhiNjMxOTljNTFlMTk1MTM1YTc1ZjFmODdiNDU0NDg0ZWNjNTYwYzUzMmM3YmE1OTIzYzk0OTBhNDIzYzE3NzQ1MzQ1OWQ4MWVmYzM4Y2UyOTM5MjI2MDQzY2I3MzMwNjJlYWUzMDNhMDA5YjQ4ZWUwY2YzYzdlNDBhYmUyYjU3YTcwYTYwNjJjNjY5YTlmYmZmMjBiNGM5NGI0ZWNiYzVmNzQ0YTgwZDdiZTgxMzQzNTk1ODFkNDQxZGE5MjE3MzdiMTMyOTQ3MGIyMTRmM2U2NzlmYjdhZDQ4YmFmMDQ2YmFjNTlhMzZiNTc3MDgwNmNkZWYyOGNjNGE4ZmQwZTA0OWI5MjRjM2M5MjE2ZTAwYmE2M2MyZmY3NzFkNjZiNzUyMGRkMzNhODUzODJhODRiNjIyNzE3ZTU5NGU0NDdjOTE5OTI2YTViMmU5NGQ0OTBlZTYyNmRhOWRmNTg3ZmVkNjc0MDY3OTE3OTYzZmQ1MWQzODNlNTU3MzBjMTdhMTI0NTU1ZTJlNDZlMTM5NWM5OTIwZDA3ZGFlNGQ2N2ZmZWU1Yzc1OWI2YTMyNmVlYzZkN2IzYmE2ZGVlMDEyZTQ4MDciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNWM5NjYwOWU5ZGU4MDdlZmVkMzFkM2MyZDYzZTI4NGJlNWM0NGMxYjVhYjg0NjcyNjY0ZGU4ZDhkOGUyZjgxODFiOTVhNTI5MGZkYWZlYjA1ZGM5MDJhOWE3YmQ2MzliIjoiMTM1YWFmYjNiYmM4OWVmMWUwMGEyYTM1ZWYzMmYxMjJiNzUxMWNjNTVkODZlNzgyMmEzNDg1OWI2MzBiNGQyOSI6IjExNTc3NDkwNGE5NTNhZjA3OTM2ZTNlZmRjZjYwNTRiNGM1MzRkYzg2NTRmNTYzYmIxMDYxMDQ0NGQzMDYyNWYiOiI0NzA1ZWM3NTI1ZTYzOTE5Zjc0ODNmZTc2Y2RmNzM5N2IxOWYyMmQyYTlkNTRiNmNmMGZmOWFiY2YwYTdjNDZkIjoiYWUyY2ZiYjI5ZmRlMjNlOGMyMmQ3N2Q3YTUwYmE2Njc5OGRhOTNiZTRlNDllZjc4YjM4YzliZTI0MTFlMmQ4YTk5NTRlYjI5ZmJhZDBhOTY3YzUxYjI2ZDhkNzQ2ODAxNTM5YWNlYjMyZTI0NTlkMDdiYWE5OTQ4NjlkM2I2ZGIyYzg4ZmI5ZDcyNTBmYWMwMGRlOGY3OTk5MGQ1MDFhZDk4NTU5MDAzMWY3YzQ1YTAwY2Q5YjZkMWI1NTMxYjIzOGYzYTMxZDMzMjM3YzQwYTNkYTMxMzU2MTcxY2FmZDUyY2JiNzkyOWUzMmIzOGZlNTIzZDgyMTJkZTgwMWY1NTQzNDhhM2NjNDY4ZGFjYTcwZTA1YWZmYzlhZjk3ZjE3MmFiYTAwYjJhY2M1MGQ3ZGNiNWYwZWNiY2U3NDFjNzFhNjVjNjU3ZTlkMGYyNTBjNDRmNzM4NjU5NjJiMWEwZDE5NzM4ZTlmZmU5ZjE3YzNlMDMzNjNiZWRmNTMxMmM0NDQzNzU1MjlmYThkZjlkZDcyYjdjMDlmMjBjMmVmMzdhYmI5M2U2ZmE1N2NhZGJjZDdiMjMwMzZiYjk5MjRmY2ZiOWJmODNiMDllYTM2MGZkMzk4ODYzOTE1MWIxYWIyMjkzOWU5ZWExY2RjNDEzZjdhMmNmMDRjZjI3NzgzNDUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNGNiYmQwNTM4NTM1OTk0Y2YwMDM1NGZmODYwOWRkZmQwNGU4MGRjNDE3NGI5NTQyY2RhYjUyMzg1ZGQ5NjhkZGJlZjgxNTdhNmUzZjI2ZjA0MDIyOWE0NTBmOGU1NjRmIjoiZWQ4MTcyOWQxYWVmNTIyZjdiZjljMTI3MjA3ZDhhNjgwY2U0NDMyOTY0ZWQ0MDI1YjViYmIxMjk2NDM3NGYzZSI6IjEyNTkwNzNiNTczNTg5MzViNzE0OWZhNDM0OTc5M2M1ZmYyOGQzY2U5OGI0ODNlYzQ4OTg2YWEyODU0NTFhYmMiOiJiMzUwYTRlOTMxYmI1ZGI1MGE4NjZhYTNjMDFlYWQ3ZDQ4ZDU4NTliYjk3YjY3NWU3N2ViYjg0NGFjODMyZWI5IjoiMjE1Y2NhNTg5ZjczN2RmNDhkNjAzNjBjNDgwNmVkNTQ4ZDQ0OTM4YzJiZjViMTcwNzMxMGRmOTg3ZWRkYTUxZTUwOTJhN2Q5Y2E0OTU1MzAzYWM1OWJmYTk4MGJhNmUxODE5ZWQxMTQxOTc4YzNkN2RmMTEyNWY1YzRhYmVjNWIxNWJiOGY1ZmQwZWRiMWYyNmJjZWJlYTVhYTdjOGQ1ZDMyZThhNWI2MDhmNjA5ZDlkZmQ3NjUwNzRiMjNjYzUyNDU5NmE5MTIyNmI3MjZkODk5ZTQyYmRlZTAzMjFlZWIyZGJhZjYzZDMzY2NlZDY4OTBjMTliNDY2NjM2ZGYwNTA3MmYwMDdhZTYwYTIzNjRkZGU3ZjgyMzE1ZTNlMzBlNjMyNThiOGFiZDEyZjE4YjZhYjNkMzg0Y2M5MzQ5ZTU2ZGZmMDBjM2Y1M2E4NmEzMDFhYTcyMDUzOTQxOTlkMzIzODIwOTZmNmNkOWRiOTY0NmE5MmU3M2MzZmQxZTUzYzI4YTkxNjgzMDMxYzFhYzcyYmI4NWFmNTBiZTY2OWQwZTFkN2IwNWEzYmYxZmM5NzIwMDI1YzFlMzllMWYwOWQxOGQyZTkyNDdmNzI2YWM2OTFhMWMyMzIxYTY2N2U2YmFjZDdkNzdhNTdjZTQ2Mzk3ZGIxYTkxZTc5MDhhZDUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiOWIyYmIwZjM0ZTZmMGEzMWVmZjAwZTY2MDRlNmNhNzc2NDNmNjk4OTU4NzdmNzcxOTdhMDZlMmI0MmJmMDQ3YjNjMWVlNTVhMmEyOGZiMzU3OTMyNGE1NDQ1ODMxMGIyIjoiODk1ZTcwNjA5NTY3ODRlNWVhMTEzY2E3ODUyMTRiY2Y2MDhlMmE1M2MxNzVlNmVkZjViNzhmMWFkOTBlNjdjNiI6ImMwYjE5ODBkNTdmYjc5N2M0OTA3YWFkMWZiNTY2MmJjYzhkNmVlMzBmNmJlZDk1MWU3N2MxMWQxODkzMzQ2ZTkiOiJhZjMzNTdmZDIxZmMwNGQxZDFiZDE2MmI5NGJmMTI5YzQ1ZDQxZmVlOTAzNjZhMTgwZDk4ZDQxMzI1MzM2YjVjIjoiNTA5NDFjYzEwNWM2OTRkZDI2ZDViYzczYzA4Mzk5MTY4YTI3MDQyOGVmNTk0YTY5NjhmZGU4MzRlODg5Y2ZiYmYwYTgwZDdkYWQ2NWQyZmNhMjFiYTgwMTlmMTAxMTMxM2ZlODY5ODNhNTU1ZmIzY2NiNjQzYmI3NzE3MjRlMDQxMTRmMzI2NmQ3MmMyZTFhNzUzNjNhZWJkYTk4NzFjM2JhZmNlZTNmMzg5ZmY0YzZmMWYxYmI1ZTZkYTUzODllMDRmMjgyMmRhODAwY2IwNThkYTljZDY5OGM2NWQ1NGIxNmU3NTYyYzgzNTA2YjYzMmU0YjVjN2E3OGQ2ZTM2ZWMzMDdlNDhjZmVjNGZiYzNjYTNkZDY3Y2E5NWY5YmQ3ZjFkNjA5ZTBhNmQ4YjViZDNmZWVmMDBlMGM0MTY1ZTc3ZGE4NGY5ODkyMTBjNzhkYWY2MzNhZWY2NTc4NTVmY2EyNmI4MzI5OTQwMDBmOTgwYzIxZDM1NWRiMTBmNzFmOWNiYjgwNzljNDhhZWI2NzNjNWJhMDk3YTMyNWQ5YTg5ZTA1YmJmOTYwZmVkNGY4ZWIwOTdjZjM3ZjYxOTAwZGI4MTcxNjg1MTA3ZDUzZjg1YmJkOGMxYTRhMWM3MDQ1YzhiNmUzYThhMmM0MTE0NTQyMjkyNTU1NTg1YTA5MGQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiOWM4MzA2YzY5NDEwOTg0MDhjNTY1MThhNDRkMzA3NWMyMmUwMmYxOWE2MDQxZDJlOWM0ZTI5NmZkYTQzNWRiOTE3Yzk5ZDUzOGFiNjVmNmYxYmZhYjBkNDc5YTE4MzNhIjoiM2E4MGU5ZjViNzFiMjQyYWUwN2NlN2I2MTcwNTdkYWJhZTE4OWM1NDY4ZGEyY2YwNDliNWI1MjlhYmM4NzdkNSI6IjNjMTUxZTkyZGQzMTIxYThkMmQxMTYwNDYzMmRmMDBjZjkwNzA2ZDNlODQzNzM3NDQ1ZGUwZjJmZGUxZWE5MjQiOiJmNTNjYjVmZTY3MzIwMWY1ZWFmNDExNTM4MmQ0OGJhNDViZTQwNWIzN2EzMWE1NmU0MWQxZDc2MjAyMDM4YjA2IjoiOWJmMzExNTZlNTRkNzE0MjQ5MGU2MjBhZmVjMjIxNzkzMWZiMjM4OTIxNWEzNjA5YjM4NGIwNTUxYmIzYzlkOTBjM2IzMDUzMDU0MDQ2YTMyNGRiOWIzNDYzM2U0MWI2NjExNGJmYTdlZTg2YmJkMjJkMDhkNTNlMzQ5YTRkYzg3NTI2NWIzMjE1MWQzZTQ3NWRmMzQ4YTIyZDUyMjY0NzgxODRmMzcyYjBiYTNiZTkyZWMxYjI4NGZjNjZkZmEzNjA5NDYzMjE0YjZiNDY4YjI5NDc4YWNiMGM1NWUxZDQ2NzQ4ODJjYjc1ZTNlYWEzYTY2ZWEwZjRkN2IxYTU3MTIwNmE3NjFkNjM2YmQzNTE5YWZiNmYwNWEwZjFiNmJiMzhjMDBiZDY4NTMwYTZjOWI0NDViNmI0YTljNzQ1N2EwNTU2MjdiNjA2ZjQ1MDhlZDY3NmZiNWJhMGQyNzU4OWI3ZjQ2NDI3MWMzZTU2MTIxNTkwNWM1MGVjNDhmNWRkZDFiODU0OWU4ZDE2MzQ1MzA4M2RiOTZjN2VjOGVlZWRhZjY4MDQzNjllNzY3NjBiMDhhYmNjYTkzN2M0OTc5MDBiZTM4NWRiODgwNGI0NDNlOGExNDg5YjhmM2UzZTRjZjM2N2RhYzNlMTVjYjhlOTVjZGFiYWQwNGYwODg1NmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiODdhOGZjZTUyMWRmMGEyZTI2ZjFiMWY5YzdlYzllOTg5Njg0NzQ5MTVhMDg1YTk1Y2JkY2E3ZDhjNjY5ZTA4YTY5YjhjM2MzZGYwN2Y5YWRhMzY4YmU0NDg5MzhiZjkyIjoiYjFiZmFlYWQwNDc0M2JkY2ZkYjE5M2QzMjI2MDkxOGZmODAzYWJiY2MwZDVkZGM1MDQzOWJkMDFmNmU0MmEzYyI6IjEyYTA3Mzg0ZTljNzRmYjNmMzNkZjFhMDg5ZGRkYjdkNDE2MTUxYTAyNzBkMGMwMjE2ZTA4NWYxZWM0YzI0OWIiOiI5YjQyNTY3MDkzMTEyY2I1ODg5NzAzYjc3YjRiMzcyMjc2YjViYmNjYWRmODZlZWI5ZWY2ZDNjZDM5NWIyYWNkIjoiNWJhNjYyMjYwYWEwZjc0M2EzM2E5YjU1MmNlNDFkOTMzMzVhODU1YTU1ZGYxMWI4NzBlZmFjYjdmNzVlMzljOTc4ZTczMGFjY2UzNjY0YzgxNGFjMTBmYTEwOTg5ZmIwMGEzOWI1ODRiYjE0Y2FkMmMwMmMzMDk3MDNjOGVhODc2OGQ0NzlkOWI0ZTE3NDAyZWUzOGNiODJjNWY0ZDgwMTI1ZjNlNjc0YWMxYWRiOTE5Y2M4YTk4OGY3OWY1MzFiMDgyNTNmYmFkMGExYjI3ZmIxOTk3YTRlMmM3YmQ1ZmYzYWJmNjYyODFlOGI2MDk4NzU4NzMyN2E5MTAxYjc2Y2QxMzc3MWUyM2VlMmYwMmRjMzM5NTg5YjlhYWM0ZjVhZjc0MGFmZGFmNDk0MDIxYzM1MDRmZGRhOGY5M2Y3N2NkZDgyNjJkZjdkNGM0OGY4NWI2ZWIwM2E3ZTUyNzlkYjRkMThmNjQ1YTYzZWI2ZjUzZjlmYjEyM2M1M2E3ODY4NmYwMTEzYTIwOWI2ZWVlZjNiMTBjZDQ0ODk4NzVhMDdhZjg2M2M0NjdmMjViNjljZDEzYjhlNzI4NDc0NjVmYmEwMjVlMjVmZTdiY2I0MTc0NTM2OWYyNTVkZjBlZWZmYzNlNWYwNjY4MTVlZjc3MTU2ODBiMTA0ZTIwYTdlOWUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNjlkNjY3YmRlNzllNDFjYjc4NzQyNDI2Y2E1ZWJkNDgwODZjZjFkZWQ1Y2FkNzI5M2ZjZjkxMGU1YWIyM2NjOGNhZDc1YmQ5ODljM2ZmZDA1ODE3ZDFhYWE1NDkzYzA1IjoiNWY3MjM0NmViNTBlYTgyY2IxMTFkNWIzYzkxZGM5YjdjNjFjOTJmYTFhMDYyMTc3ZDUxM2ZiNjE2YjEyMjZkNSI6IjA0NjViOGFhODlkOWNiYmU4ZTFjZmEyZTY0ZTY0YjhkMWY1ZGJlYzdmNzEwYTZkMzdmY2U4OThlM2Y4MWU1N2IiOiIxNzMxMzVmMzFjMjMyMGNjY2Y1MTNlODhhMjFmMmQyMDdlMDBjYmU0MzMwZDJmNTUwZTBiZTc3NDA1ZWVmNDdhIjoiMzRhMDhkN2E1NjQ1MTVhOTE4YmNlOTNjYWUwODRmMjdhNTU4ZjZmMjE0YzRiYzkxNjlkYmY1MDdjM2YxMWQwMmVjOTdiZGZkNzc3OTYwZjZiNGM0NTQzYzFlMTQ0NTZkMDA3OTIxNTMyMGFiNjA3ZTA0Yjc1MTkwOTBlYmFmM2E1ZmJiMGQ3YTNmZGExYWY2Y2Q4YzVkNzg1NTI0YmRiYTc1YWJiZTUwZTNkNThlNWYwNWY4ZjZiMmMyNTcwZjExNzhhY2QyZjRjMTFhN2IxYjhiNGViZTRkZGI3MWE4NWJmMTliYjJmYjI1MjQxMzc0NTMwY2JjNmMwNjA1MDY2ZTExMjlhMmQzOTgzNTZjZjJlYzJmN2EyODZjNWI4NjljNzAyYWNlZDYzZjRlMTJmMzliN2NlMjUwNTQ3YTkyMjg3MmMzNjI2OGEzYTQ2NDlmNjY0MTk4N2JiN2M2YmFmMWEzZTgyY2RmMDRkMTExNjBiYTExYzVhMDAyY2ZiY2Y0YTg2OTgyODZmZjMxOGVjMDFmYzJjNWY2NjY0ZTUwNTYxOTkxYTUzM2FkMTgzYTIxZTdiOTdlMDA1MmIwMzUwZDIxMzczOGIwYzZlNTQyMWE1MjQ4NDVhODYxZjUzOTkzMDU0MGNjNDBjNmVkNzhjNDZiZTljMTIyZTc5NzRkMzUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiZjFmNmU1YTU1ZmIyMTgwZGU0MzZkNDgxMTVhYTFhYTM4YTYyNDJlZWIwOTU5ZGUzNjkwZjI1OWMxZDgzOTVhNTg2MmQxYWM0ODQzNDA0ZDI1MjE1YzgzYmNhOTBmNDRlIjoiZjQ2N2VmMDgzYzc0NWExYmZjOWJlNDRmMWQ0NjhiMjUxOGUzZmYxYzBjZWU2ODE5ZmRkZTM1NGQ0MDcxYjE3ZSI6ImZkZGE5ZjA4ODhjNDQzOWNkZWQxNWE3NjgzMDBkMTYzYzFlMzI2ZWU1NTcxYzIyYWI5NWFiM2U0NGIxNjc2ZDIiOiI2YjhkNjBjNTY1NjA0YzhmYThkN2FkYWYwYjA3ZWQyNjhhNDkxZmI3OTc5NGQyNzcwMzU2ZTE5MWRhYTFjYjUwIjoiNTVkMDc4ODYxNGI3NzBmNGI4YzNkM2FjMGJiZjYyOGYyOTRiYTJmZDE2NjEyYjY1ZDBmNDY5ZGVkNjY1ZTNjOGI4MmM5NWRiODBjYzZiNDEwYjVhNmU2MjQxNTFmYzUwYmYwMmYyNzlmZmFiYzE5ZGQwOTRjZmZiMTdiYTQ0YjExMjA5YjkyM2RmMzI2ZGIxNGVlZTM1YThiZjFlY2EzODA3YWZhZTkxODIwNmU4NDRlNTE3ZWIzMmMyMDczNDIwMDhhMGRhNzQyZTczNDQzMzg2N2ZkODZmZDg5ZDI3ZWM2ZTUxYTlkYjNhZDFhZGVhNjQ1ZmRjNTcxNzljNGI3MWRlOGI0NTVhZTAwZWZjMDkzMjhhMGJmZmQ4YzYxZTM4ODBjMDA3OTE1OTk3ZGFlZWQ0YWRiYTYxYjQ0MDQwZjZmOWI2YzY0MjdlMWMyMzM1N2M4ZjdlMThiNWM5NzRiM2MzNGEyZmQ1Y2I1ZTcwZjQ4ZGYyZDEwYzFkZWFiZDk4N2Y4MzkwYmIzMzg1OGQ5YTUxMzNhN2JkNzk4YjFjNzc0MTcyOWI4NTYyZmVjYjNkNDgzMWU5Y2UxMDFkZTE5MmQ2NGJiNWQ3NTdjYmIyMTA5MGQ2NjlhZmM1NTY2YzFkNmUyNTU4NjY3OGI1ZjJmYzdkNmM2MTEzYWM0ZWI1NGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiMGRiOWQ0MzcxNTMxNDllMTAxZDU4MThiMjYzYjk3NTczNTk5NGRmYzMzZDhiM2YxNThhMDU3NjA4Njc3NTdhYjQzOGE1MDI0ZTFkNDMwMDYyMjYwMThjMzc4YWY1NWQzIjoiMjc1YmRjNWZjNzhiMGQ4YWZiNWM4YWE1Zjc4NTRjMzE5YTgxYmI4Y2M5MzAwMjEwYTk5OTBmYjc5MzNhMzUyZSI6IjgwOWRhNTRkMTgzMDU0NTY3MmYxODBmYTNlMDQ0MWEwZDNmZTQ3MmU3Y2Q3YTZkNzA3ZmVlNWFmN2U5YjIxYzIiOiJlYmU2NmNlZTZlZmJmNTgzYzg4MWEyNWUzNDZjYTdkOTk3NDFkYWNmY2UwZDg3ODVjNjU5ZTkyNzc0ZTI2ZmYyIjoiODc4YTNkMTA5ZDgxNGZmNGE0OTM1Njg5Y2E5NmIzZDQ0NGJmY2VlOWVkZmNkOTAzMTI1NWFkMjUzODg3MTAyNzI3M2JhZDUyMjU4NjRlODRmM2MyYWZhYTIyYTQwZTdmNjc5M2FiYmM0OWM4YjBkZGM3YjMwZDlkYzdiNDA4ODg4ZTZiOThmNGJjNzllMDg3NzViNTk5NjYxZWE0YjUwNjY5MTMyYzIxMjcyZjhkMTdmZWM5ZDFlNTMxMDMzNWIwZTY0ODBkNzA3NWM4MzBhNDRlYTUyODkwMGY5OWRlNjExOTFiNWEwMDZjYTQzNDAzNTZkYmYyMGM2MmU4ZmZkMDU3N2Q2MjMxNDZiMTI5MzdlODRhNmUxN2MwYWUwOGVmZDMzOWM5YWE5NzljN2UyMWU5YzU2ZTAxOWY3ZTRmMzc1YmI2MDFiMWE4M2MyMWYyN2E1NTRlYzA1MTkxNzk0YmVmZTUxNGRmYmZmNWEzYzlhMGE5YzgwYmZlOWI2YWRjN2RlZmZkMzFjNzBiYTEzZmNmMTcwYWJkNmJmM2QzODQzODFlMGEzMWZhOWM4MWIxYmQyMDdlYTJlMGI0MTUzYjZhMTI1MmE5ZjczZjE5ZjZmMDk5ZmRhMGY4N2JhYmE5OWI5NzExYTAwYjVmNTBhZDg4ZDNiYzFjNGU4MDY0NjciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNDEwNmY2YmE2YTI5MWZhNTRlNGVjZmQ5ZmE2MWI5NjE1NTRlNGU4ZTAzZTE5ZDliZmQ4MmJkMzVjMzQ3MWU4YmM1YmRjZDJmODEwMDc5YzFiYmZlOTA2OTI5ZTg4ZDI3IjoiNWE3ZTYxYjg2Y2E3MDkzOWU2NGFmNjEzYTY2NzY5NWM3YzkxNWU2NjdjNzk5OThlNzZlNTVlYjMzZmVmNmQ4NiI6Ijg2YzdkNTg4M2FlZTU2OGFhNzRkMjU3ODIwMTlmYmQ2ZjVhY2Y0MTk2NzUyZmYzZDFkZDk2ZWMxZTc0MzY0MjQiOiIzYTVkODBlNzM5ZjVhMzBlNmJiNTA3ZDgyYjYwZmY5ODdkNWJkOWNiYmZmNGI0N2RhZmYyNzhhMzI1MmRiM2VmIjoiZmIxNDYxNDZmODI4ZTg4MGM2ZWM3YWI1YTY1ZmM4ZWM0ZTRkN2Q5NzVjNmQ3YzBhOWJjN2NlMDQxZjQ5Nzk5YjExZTIzNWQ3YWM1YTRlYzRlZWE3MjFjMzMyMzQ0OGU2ODZhZTk2NTc5MjMzYWQ2OThhOWQ2ZmUzZjViMzdkODdjY2ZjZTY0MDE5MmRjZGI1MWM3YmYzNTQwNGM5MGI3MDViZDk3NDgyZDk1ZDFjM2UzYTQwMTUyYzg2YWI5MjM1ODg4NDJhYjAyZjRkOTIyMzE4YTdmYjg0NDUzYjA3MmM3NDlhN2Y1NGU4YWQwMDVjMjljNDhhZjZmMDFlY2RkOGZhYzEzMjk1ZTQyYjIwNzdjNzBjN2JmNTRlMjE0MzE3Zjk4MDAzZTRjZGUwNzc1NWU5NWM5MWYxOTUzYjI5YjNlZWNkNDlkYzc1M2U3NGFhZjJiMWM4M2ZlYWU4NzQyOGJlNmE1YWFhMzI2MWYwZjY1NDkxZTA0YzFmY2RmZDU0ODFlYWRhYjY4ZjA1N2RmM2M4MzY5NGM3NDUxZmRlZDg2YTE4NDcwYjA2ZjE3NzljMzhlZmNhYzU0YjU3NmU5OWVjZWQzYjU1ODFlYjVjOWY3YjMzNDBhZDU2NjdkMWYwZDNmZWFkOGI5NDg0YTAzMmQ1Zjc0ZDkwMGZkNjRkMTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjVkMWZjZGFiYjcwZGFkMTQyOGM4YmUyOTE3MjBjOTJiODU2NWYzMzFlZTM0MzhkNzliY2RkYzk2OGVmZWRjZGI5MzE5ZjVlZTkxMTI0YjkzYjk2NWQ1MDQyMTFmZWYwNCI6IjZjOGM4YTA2NmM2MjA4ZGJjMThhNDBhMzBiOWY2ODkwNDg4NzdlMDM4YmY3NmQ2NWFjYmRkZTdhZTRjNTY2ZjgiOiJiZmEyZTllYmUwZDcwZDNiNjJjZGJkNzhjNzc1YTYyZTBlMjJmYTc1ZjE2ODEyM2EzMzZiNjZiOWEyYjY4YzA2IjoiZTQ4YjUyNDVlYTI0MWJhZWI3ZjY2NWE5ZGFhYWQ2NjJkN2IyNDIyYzNlMzcxMWNmYmVkODFkNzM2OTE4NjRlZSI6IjE1ODZlMDc2MWM0YTM5MDEzZGNiNTUyYTBlMzYzZTcwOWY0MzAzYzBlNTc1NjUzYzliMjQwYmU3NDQ5ZWEyNmU0YmIxZGM5M2YwNmVjOTU4YjZjMDYyMTc3NTdmYzU1MGIzNTZjMTM1MDYzYzAwZmNlOWQ4NTZhZWMwZWRkMjA3MzViNDZiN2M5YThlN2RmNzgwZGIzMDcyZmMyYjMxNGZhNWNkYTY1M2JhMzY5MDEzMmYxMGQzMGVlOTRjODQ1ODg0NmJlNzU2NTllZjM4NjgwODZiY2Y1NGZmNTVhOGRiMWVhNjVjM2U3NDdhOGRkYWIzZjIzMDQ3MzhlMGM3NWFkZmMxMGMyM2JhNjUxY2NmMGRlNjRhMzljYWIzYmVlZjY2N2Y0NjYzOTFhNjFhODdhOTgxYWZlODgzZjA5YzRlZGJkM2VhZTk4ZDUxY2QzZTdiMzFlZTE3OWY4YTRlMTBmZWFjOTZlYTIxMGE0Yjg0MTVjOWYyY2ZlYjJiYzhiZjUxZjEzODAxZGM1NDJiYTFiYWRkYTFjMzAxNDFkNzJhYmIxYmJiMzVjOWJiNDgxZDkxZGI1NjkxYzQ0YmYzNTI2YTAyZDBiZjc3NjMwNGE5NTE4NThhYTJmY2YzZjQ1YmM2NTZhYmNhZWVhOTRjYmRjODUxYTkxNGI0YjNhM2VhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI5ZmM1OGQwNzg1YWRiZjAzM2NlNjY0MmRjYzlhODYxZGY0NGEzNWU4OWQwNmIzNDZiMTY1MDc0YTA0OGI1MDA5OTRiNGMwYjNlMjczMDZiOGM4MDVjOTdiMGVhMTRiYjUiOiJlMDJmN2E4NTYyNjYxOTVmYjVmNDgxMDIzMmNkNWM3MWE0NDY1ZTFkOTU2MjVjMDFlOGU3ZWI2OWM2M2Y2Nzk2IjoiN2NkMThiOGQwMzViNTdiZDAxNDY0MjgwYWJlODkxYjdmYWY1NWY5ZWQ5OTEwZDlhMTQ4YjAzMDM0MGM2N2NkYiI6IjkxOGM0ZDQzZmVjZjk5MzIyN2Y3YzEyMGQyMzlhMzBkM2MzMTU2MDI4MDBkNmQ1OGI5ZTllMDcxNTk2NGNmYTMiOiJiOGEzNTgxZWI0YTIwOGQxYWI4ZjBlODRlOWZmM2QyZTBiYTU3NzAzYTdiNWJlMmU0ZjNhM2VkZTJlMjUxOWY1ZTYwNjhjMjhjNDExNzE0NDZjZmJjNDBiNDhhOTdiYzdhOWExZTRkM2IwMmY0OGZiZjU1YjFkNjNkYTdjYmM1YjdhOTVmMzU0YWZkYTI3M2RiZjViZjA5OTk2MWRiNGE0YzVmMjk2Mjg2ZGMwYTUxMDkxYTUyMjM5ODk3M2Q1NTI3YjJlNTVlMDUyM2MyMWZmZmRkMGRkMzg1MjdiYzQ1OTU5ZDVhNzExZDU0MTYzNGUzMTM5NTc3MzEyZDY3ODQyMWViMzc1NTNjMTI3YmVlYzY0NDIyMzE2ZTQ4NTQyYTkwNmNkN2VmZTBkOTZlYWUzYzRmMmRiNzY2NjA4M2Q5MzY1YTc2Y2VlNGEyMDdkNzEyZGRiMDRiZjc3NWJlMjllZDlmMDMwZWFkZTQ1Mzc5NjE3MzdlMzkzOWExOWUwNzY5YTNhOGI5NmQwNTUxMjBjNDk5MjVmZTFlYmM0YTJhZDU0NDY4NDIxZGQ1NDY1ZTg3NjFiM2UyZTM4NDM3M2E5NzFlNDA4ZGQzYTU0OTA3NTM4YTdkODg3OTg2Njc3ZWIxOTI3NjE5NTlhNDI5MzUyM2Y4MTY0N2E2NTdhYWVlYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiZDQzOTI3ZDFlNjMzZmMzNDMzNTM2Y2QwMzYxN2E5N2EzYTEwYTdlY2FkM2YwYzc4MTYwMjgyOWY4ZWM3ZmViMmRkNTkyMmYyYTJkZWU1MWRiOTNiY2YzNTEwMGE4MzY0IjoiMzMzNWEwMmFiYTFlYTI4ZDJlNTY5NzNlMjExMDllMGFkZmI1MDY4NjEzYzQ0N2U2MjVmZDgzYThkMGUzNDQ5NCI6ImJmZGUzM2M1MjQwN2QzMTM3MTIzODEyYzQ4MThjYTFlNGI2MTg3OGI4ZjlkYmFlYzQ3OTM1ZTM5NDhhODhkMGQiOiI0MjU5N2NmMDNiYmVlMGUwMDNkODY3NzE1OTkxOGY1MzE4NDAyZjczMjlmMDhlMWQ5M2M4NTBlMmEyYTJmMWJiIjoiZTUzYzdkMGIzNzZhOTQ4MDlmNDcyOTYxYWNmZjMxNDA3OTAxNDk1ODkzNWNkNjdhY2M0NzZhYmRkOTE5YTQzY2QzZjdkMTQ2MmQwZDZlNjI4ZWY1ZDBjOGUwNGE2ZDI0MzgzOGM2MWVhMzZiMDE1ZTg0ZDdhZDU5ZTQ5YjQ1YzliMDRmNmVjNzg2ODdiYTQ3MTU2ZTQyOWIyZmI2ZGMyYzBkYTRmNTY3N2QxZjY4OWNkMjg2MTJjZmE2ZDk1NjI4YzI2YjViM2UwMTE4NjE1M2ExYzI1YzAyZjVjZTVmYzI4NzYyMzM1ODY4N2QyMDM0MzQ3YjI0MzNmZmMxNDQ1YTJkOTNjYjAxMDNjY2RhZjBjNTg1ZjdmNGU3ZDQxYWVmMzEwYmUxMjcyMDhiM2RhOTA1MjNhY2VhYzVmYTEzZmZlNzdlYWE0ZDFmZDA1ODk1N2M4ZGQyZjM1NWNhZTdmOWUzZDhmMjllYzcwOTk1OTliYTZjNzU1Njg5ZDUzZDZjY2Q4NGUzMzQwN2EwNjY1MDZkOTdkZWNkN2UzMDZkMjJjYTZlMGZhYTdiOTRmOTFmNGViMDA0NDIyZGRmOWRkNmIxZjQ5YjY0MDBlYTU1ZDQwZTI1YzY3MTAzYWI1MGJjYzkyZDEwMGU4OWJhNTY5YjZkNTFhYWNkZGYwMmRhZjEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjBiZDY5Y2U5YTBhNjZkZmZlZmJhODNhZTU2M2U4ZGYwZmM2YzdkN2JkZjQ5MWJmNTJjYmYzZjM3NzcwMjVjZGY5MmIzMjIxN2Y1NTBhMWZlNzM1Yjg1MTliNDRiMDQwZCI6IjgyMGRhMzE4N2JjODc5Y2QxZjQwNDc2ZmQ5Njc3ZjNiNjdlMDJiMzViNjYzMmFiNjg4OTFlMjVmMTA1NTViNjkiOiI5MDNiODgyZGUwMTM2OTViNDY4MzMxNmZmYmQ3Yzc4MDkyODhkNTRjNzJlMzY5ZjcwY2YxNzJiZmY4NWU1NjI5IjoiY2ZiNWY0OTRlNzY0ODZjZWVmMTJkZmUxYmFmZDZjY2Y5YjA3NTRkOGQyMzA2ZmIwYzQxYzBmNGU5MjEzMTdlZiI6ImViYWQ1ZTVhMzU4Y2VhYjgwNmFlNTU5MGQ4MGJjMGJhNWQ0MDYxZjQ5ZjRjYjc5YThhOWRhNGZkMWU4Y2I4ZjQxY2Q4ZWRjNjU3YzUxODBkMThlNjJkYTJiNTNhNTAwODViN2UxOGI5NTdlYWY0ZWRjOTc1Y2E5ZDQzZTM4MDQzNGY1MTU0MmRjZmE5NDdjMzIyYzcwOGYzZDM1OTNjNTIwNzE3MjMwZGYxN2Y5MzQxZjAyYTU1OTZiMjA1OGEyN2JhMjNmNzJhODYyYjM5MWJlODg0NTcwYjIyZTIwYzgwZGQyMGQwYTkzNWYwNjg0NjVkNTU0YzgyOTFmY2Q4OGVmZjYwOGU5MjIwMGY5MGNjY2RjODJjYjU2OTdmMDQwNjY1NGQ5NTgyZThkYjU0MjI1YWFhMjg2OTdiZjJjNGY0N2ViYTA4NmE1NzUyOThiOTkxMDk4YzIxMmM5ZThkOTViZmE0OGY3ZTUwMGM3MjIzZDljYmZmZDFkZjZmNzI1OTA5YWI2ZTlhYTgzN2ZmOWU2OTE1OGFmNDM0ZDE4ZTVhN2Y5OWQxYWFmMTA5MzFmMzgwZDg4MzQ0YWQ4NDEwNjQxMzBjYWU1MGVkZjg2ODc2MTU3NDM3MzVmODA0NTdhMjI4NDc1YmFiNzU1OTAxNWM0ZjQ1ZjkxYmRmYTMxZDg3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI0NTc4NDY4NGQ2MDA0NzMxNjg5ZTMzZTQ1YjM0NGQ3YjY4ZGM0ZmE4NDExMzNjYjJkZDY1YzRiMzI2ZGZmYTkwMTEwOWRmYWMyZTQ4YmYxN2YyZmVhMzNiNDEyZGM2NTMiOiI3YzZmNDY3NWY3YTBiOGM0MjRkNWJlOWU4MDllZmEzMDU0OTM4NzRkOWE5NTBjYjM0M2FmZGZiNjRlNzdlY2I1IjoiMmIyZGJlMzgzNGQ4YmU5M2YxMzk2YjE5YmU4M2JkOTY4MjNkZDgyNzQwZGE3MWM1ZWViN2IyMTg2NTAyMTg4NCI6IjQ5YzMyMmZjMWJlYzg2ZDNlMjA2MjhkOWJkYzE2NDRlNmY1ZTAyMzdjN2M2OTQ3NDZiZmVlMzJhMDAxNDU2OTYiOiI5MTEwY2VjN2QwN2U2ZTMyNzI0YmYwNDNlNzMwMjFiM2NhMGU0NTE2YjYxOWQwMzZhYzlhMDA5MTRlMTJmMDFlY2U3MTk4OWY1NWMxY2FjY2Q1NDJjNjBhOWNjY2ZmYjkxZTIwM2ZkMzlkY2EyZDkyYzhlYjAzZWU3ZWU4OGFiZjIxZGM2ODkxZGUzMjZjMzE5MGYyNWVlOWFiNDRjYTcyZDE3OGRiMGY4NDY5Njk0NjViMjVhMDdkY2M4Mzc3N2U2YjYzYTdmOWYxYTgyNDZkZDMxY2U1MGNkOWViNzBlNmUzODNjOWFkNGRhZTE5ZjdjZWM4YmZlMDc5YjM2ZDMwOWMyOGIxMDE2MWMyOGI4ZDY2YzM1N2M3ZWUwMWYwNzQwM2E1OTYzNjY3MjVmZDViZDNhNWRlM2NiNDBkY2Y2MGFhYzEwNjM1NjE1Yjg2NmFlNjMzZmJkYjdlY2U0MTY5NWQ1MzM3NTdkOWQxNmM2ZDQ0ZmQxNzBmYWU3N2MxNWI3NDI2ZWQ2ZWM4YzlkNmU5MjQ1Y2Q1ZTE5ZThkYzNjOGM3ZTY3MTAwN2NlODQ1NDQxM2JkMDc0MDdlOGEyMjQ4YmVlOTVhNzY2OWRiNmVlNDczNzdiNDQ5MGE2MjUxYWJiNjBjZDRlMmU0MDRhYjg4YWE0OTQ4ZTcxZWNlYzUwYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6ImU5N2E0NjMxZDBhMDhkNTQ5Y2RlOGFmOWExYWFlMDU4ZTNlOTU4NTU3NWE3MjZjNzZhMjdiYzYyYmVkMThhNGIyMjcyMjFkNWZlNWE1ZGI5ODEwZjlhZmU1NmEzZWU3OCI6Ijk0MDg0YjExZDU1ZTBmOWMyZWY1Nzc3NDE3NTNhZjY2YWQ3YTI1YjI4NTI0YjUwZWE5NzAxMDVjMzU0NWU5N2QiOiIyNGM4MWQ0NzczOTM4MzcxYjkwNmNmNDgwMTk1N2FjMjJmODc0MzJiOWM4YTg0YmM1YWMwNGFkNWIxY2MzZjU3IjoiYzhjODc4NDUxZTJiNzY1NzdjMzYzOTNjYTI1Mzg4OGMxMDM4ODg1YmJmZGFjZDg1Mzk2MTVhNjExZTJhYzAwYiI6Ijc2MTQyMmRlYTI4MzI2Mjk5OGMwZmZmZmVmYzc3ZGUyZDM5NWM4MThiOWNmMWFjMmJjZDExNTMyMzVlMGQ4YjYzMTk5YzUxZTE5NTEzNWE3NWYxZjg3YjQ1NDQ4NGVjYzU2MGM1MzJjN2JhNTkyM2M5NDkwYTQyM2MxNzc0NTM0NTlkODFlZmMzOGNlMjkzOTIyNjA0M2NiNzMzMDYyZWFlMzAzYTAwOWI0OGVlMGNmM2M3ZTQwYWJlMmI1N2E3MGE2MDYyYzY2OWE5ZmJmZjIwYjRjOTRiNGVjYmM1Zjc0NGE4MGQ3YmU4MTM0MzU5NTgxZDQ0MWRhOTIxNzM3YjEzMjk0NzBiMjE0ZjNlNjc5ZmI3YWQ0OGJhZjA0NmJhYzU5YTM2YjU3NzA4MDZjZGVmMjhjYzRhOGZkMGUwNDliOTI0YzNjOTIxNmUwMGJhNjNjMmZmNzcxZDY2Yjc1MjBkZDMzYTg1MzgyYTg0YjYyMjcxN2U1OTRlNDQ3YzkxOTkyNmE1YjJlOTRkNDkwZWU2MjZkYTlkZjU4N2ZlZDY3NDA2NzkxNzk2M2ZkNTFkMzgzZTU1NzMwYzE3YTEyNDU1NWUyZTQ2ZTEzOTVjOTkyMGQwN2RhZTRkNjdmZmVlNWM3NTliNmEzMjZlZWM2ZDdiM2JhNmRlZTAxMmU0ODA3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNWM5NjYwOWU5ZGU4MDdlZmVkMzFkM2MyZDYzZTI4NGJlNWM0NGMxYjVhYjg0NjcyNjY0ZGU4ZDhkOGUyZjgxODFiOTVhNTI5MGZkYWZlYjA1ZGM5MDJhOWE3YmQ2MzliIjoiMTM1YWFmYjNiYmM4OWVmMWUwMGEyYTM1ZWYzMmYxMjJiNzUxMWNjNTVkODZlNzgyMmEzNDg1OWI2MzBiNGQyOSI6IjExNTc3NDkwNGE5NTNhZjA3OTM2ZTNlZmRjZjYwNTRiNGM1MzRkYzg2NTRmNTYzYmIxMDYxMDQ0NGQzMDYyNWYiOiI0NzA1ZWM3NTI1ZTYzOTE5Zjc0ODNmZTc2Y2RmNzM5N2IxOWYyMmQyYTlkNTRiNmNmMGZmOWFiY2YwYTdjNDZkIjoiYWUyY2ZiYjI5ZmRlMjNlOGMyMmQ3N2Q3YTUwYmE2Njc5OGRhOTNiZTRlNDllZjc4YjM4YzliZTI0MTFlMmQ4YTk5NTRlYjI5ZmJhZDBhOTY3YzUxYjI2ZDhkNzQ2ODAxNTM5YWNlYjMyZTI0NTlkMDdiYWE5OTQ4NjlkM2I2ZGIyYzg4ZmI5ZDcyNTBmYWMwMGRlOGY3OTk5MGQ1MDFhZDk4NTU5MDAzMWY3YzQ1YTAwY2Q5YjZkMWI1NTMxYjIzOGYzYTMxZDMzMjM3YzQwYTNkYTMxMzU2MTcxY2FmZDUyY2JiNzkyOWUzMmIzOGZlNTIzZDgyMTJkZTgwMWY1NTQzNDhhM2NjNDY4ZGFjYTcwZTA1YWZmYzlhZjk3ZjE3MmFiYTAwYjJhY2M1MGQ3ZGNiNWYwZWNiY2U3NDFjNzFhNjVjNjU3ZTlkMGYyNTBjNDRmNzM4NjU5NjJiMWEwZDE5NzM4ZTlmZmU5ZjE3YzNlMDMzNjNiZWRmNTMxMmM0NDQzNzU1MjlmYThkZjlkZDcyYjdjMDlmMjBjMmVmMzdhYmI5M2U2ZmE1N2NhZGJjZDdiMjMwMzZiYjk5MjRmY2ZiOWJmODNiMDllYTM2MGZkMzk4ODYzOTE1MWIxYWIyMjkzOWU5ZWExY2RjNDEzZjdhMmNmMDRjZjI3NzgzNDUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI0Y2JiZDA1Mzg1MzU5OTRjZjAwMzU0ZmY4NjA5ZGRmZDA0ZTgwZGM0MTc0Yjk1NDJjZGFiNTIzODVkZDk2OGRkYmVmODE1N2E2ZTNmMjZmMDQwMjI5YTQ1MGY4ZTU2NGYiOiJlZDgxNzI5ZDFhZWY1MjJmN2JmOWMxMjcyMDdkOGE2ODBjZTQ0MzI5NjRlZDQwMjViNWJiYjEyOTY0Mzc0ZjNlIjoiMTI1OTA3M2I1NzM1ODkzNWI3MTQ5ZmE0MzQ5NzkzYzVmZjI4ZDNjZTk4YjQ4M2VjNDg5ODZhYTI4NTQ1MWFiYyI6ImIzNTBhNGU5MzFiYjVkYjUwYTg2NmFhM2MwMWVhZDdkNDhkNTg1OWJiOTdiNjc1ZTc3ZWJiODQ0YWM4MzJlYjkiOiIyMTVjY2E1ODlmNzM3ZGY0OGQ2MDM2MGM0ODA2ZWQ1NDhkNDQ5MzhjMmJmNWIxNzA3MzEwZGY5ODdlZGRhNTFlNTA5MmE3ZDljYTQ5NTUzMDNhYzU5YmZhOTgwYmE2ZTE4MTllZDExNDE5NzhjM2Q3ZGYxMTI1ZjVjNGFiZWM1YjE1YmI4ZjVmZDBlZGIxZjI2YmNlYmVhNWFhN2M4ZDVkMzJlOGE1YjYwOGY2MDlkOWRmZDc2NTA3NGIyM2NjNTI0NTk2YTkxMjI2YjcyNmQ4OTllNDJiZGVlMDMyMWVlYjJkYmFmNjNkMzNjY2VkNjg5MGMxOWI0NjY2MzZkZjA1MDcyZjAwN2FlNjBhMjM2NGRkZTdmODIzMTVlM2UzMGU2MzI1OGI4YWJkMTJmMThiNmFiM2QzODRjYzkzNDllNTZkZmYwMGMzZjUzYTg2YTMwMWFhNzIwNTM5NDE5OWQzMjM4MjA5NmY2Y2Q5ZGI5NjQ2YTkyZTczYzNmZDFlNTNjMjhhOTE2ODMwMzFjMWFjNzJiYjg1YWY1MGJlNjY5ZDBlMWQ3YjA1YTNiZjFmYzk3MjAwMjVjMWUzOWUxZjA5ZDE4ZDJlOTI0N2Y3MjZhYzY5MWExYzIzMjFhNjY3ZTZiYWNkN2Q3N2E1N2NlNDYzOTdkYjFhOTFlNzkwOGFkNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjliMmJiMGYzNGU2ZjBhMzFlZmYwMGU2NjA0ZTZjYTc3NjQzZjY5ODk1ODc3Zjc3MTk3YTA2ZTJiNDJiZjA0N2IzYzFlZTU1YTJhMjhmYjM1NzkzMjRhNTQ0NTgzMTBiMiI6Ijg5NWU3MDYwOTU2Nzg0ZTVlYTExM2NhNzg1MjE0YmNmNjA4ZTJhNTNjMTc1ZTZlZGY1Yjc4ZjFhZDkwZTY3YzYiOiJjMGIxOTgwZDU3ZmI3OTdjNDkwN2FhZDFmYjU2NjJiY2M4ZDZlZTMwZjZiZWQ5NTFlNzdjMTFkMTg5MzM0NmU5IjoiYWYzMzU3ZmQyMWZjMDRkMWQxYmQxNjJiOTRiZjEyOWM0NWQ0MWZlZTkwMzY2YTE4MGQ5OGQ0MTMyNTMzNmI1YyI6IjUwOTQxY2MxMDVjNjk0ZGQyNmQ1YmM3M2MwODM5OTE2OGEyNzA0MjhlZjU5NGE2OTY4ZmRlODM0ZTg4OWNmYmJmMGE4MGQ3ZGFkNjVkMmZjYTIxYmE4MDE5ZjEwMTEzMTNmZTg2OTgzYTU1NWZiM2NjYjY0M2JiNzcxNzI0ZTA0MTE0ZjMyNjZkNzJjMmUxYTc1MzYzYWViZGE5ODcxYzNiYWZjZWUzZjM4OWZmNGM2ZjFmMWJiNWU2ZGE1Mzg5ZTA0ZjI4MjJkYTgwMGNiMDU4ZGE5Y2Q2OThjNjVkNTRiMTZlNzU2MmM4MzUwNmI2MzJlNGI1YzdhNzhkNmUzNmVjMzA3ZTQ4Y2ZlYzRmYmMzY2EzZGQ2N2NhOTVmOWJkN2YxZDYwOWUwYTZkOGI1YmQzZmVlZjAwZTBjNDE2NWU3N2RhODRmOTg5MjEwYzc4ZGFmNjMzYWVmNjU3ODU1ZmNhMjZiODMyOTk0MDAwZjk4MGMyMWQzNTVkYjEwZjcxZjljYmI4MDc5YzQ4YWViNjczYzViYTA5N2EzMjVkOWE4OWUwNWJiZjk2MGZlZDRmOGViMDk3Y2YzN2Y2MTkwMGRiODE3MTY4NTEwN2Q1M2Y4NWJiZDhjMWE0YTFjNzA0NWM4YjZlM2E4YTJjNDExNDU0MjI5MjU1NTU4NWEwOTBkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiOWM4MzA2YzY5NDEwOTg0MDhjNTY1MThhNDRkMzA3NWMyMmUwMmYxOWE2MDQxZDJlOWM0ZTI5NmZkYTQzNWRiOTE3Yzk5ZDUzOGFiNjVmNmYxYmZhYjBkNDc5YTE4MzNhIjoiM2E4MGU5ZjViNzFiMjQyYWUwN2NlN2I2MTcwNTdkYWJhZTE4OWM1NDY4ZGEyY2YwNDliNWI1MjlhYmM4NzdkNSI6IjNjMTUxZTkyZGQzMTIxYThkMmQxMTYwNDYzMmRmMDBjZjkwNzA2ZDNlODQzNzM3NDQ1ZGUwZjJmZGUxZWE5MjQiOiJmNTNjYjVmZTY3MzIwMWY1ZWFmNDExNTM4MmQ0OGJhNDViZTQwNWIzN2EzMWE1NmU0MWQxZDc2MjAyMDM4YjA2IjoiOWJmMzExNTZlNTRkNzE0MjQ5MGU2MjBhZmVjMjIxNzkzMWZiMjM4OTIxNWEzNjA5YjM4NGIwNTUxYmIzYzlkOTBjM2IzMDUzMDU0MDQ2YTMyNGRiOWIzNDYzM2U0MWI2NjExNGJmYTdlZTg2YmJkMjJkMDhkNTNlMzQ5YTRkYzg3NTI2NWIzMjE1MWQzZTQ3NWRmMzQ4YTIyZDUyMjY0NzgxODRmMzcyYjBiYTNiZTkyZWMxYjI4NGZjNjZkZmEzNjA5NDYzMjE0YjZiNDY4YjI5NDc4YWNiMGM1NWUxZDQ2NzQ4ODJjYjc1ZTNlYWEzYTY2ZWEwZjRkN2IxYTU3MTIwNmE3NjFkNjM2YmQzNTE5YWZiNmYwNWEwZjFiNmJiMzhjMDBiZDY4NTMwYTZjOWI0NDViNmI0YTljNzQ1N2EwNTU2MjdiNjA2ZjQ1MDhlZDY3NmZiNWJhMGQyNzU4OWI3ZjQ2NDI3MWMzZTU2MTIxNTkwNWM1MGVjNDhmNWRkZDFiODU0OWU4ZDE2MzQ1MzA4M2RiOTZjN2VjOGVlZWRhZjY4MDQzNjllNzY3NjBiMDhhYmNjYTkzN2M0OTc5MDBiZTM4NWRiODgwNGI0NDNlOGExNDg5YjhmM2UzZTRjZjM2N2RhYzNlMTVjYjhlOTVjZGFiYWQwNGYwODg1NmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI4N2E4ZmNlNTIxZGYwYTJlMjZmMWIxZjljN2VjOWU5ODk2ODQ3NDkxNWEwODVhOTVjYmRjYTdkOGM2NjllMDhhNjliOGMzYzNkZjA3ZjlhZGEzNjhiZTQ0ODkzOGJmOTIiOiJiMWJmYWVhZDA0NzQzYmRjZmRiMTkzZDMyMjYwOTE4ZmY4MDNhYmJjYzBkNWRkYzUwNDM5YmQwMWY2ZTQyYTNjIjoiMTJhMDczODRlOWM3NGZiM2YzM2RmMWEwODlkZGRiN2Q0MTYxNTFhMDI3MGQwYzAyMTZlMDg1ZjFlYzRjMjQ5YiI6IjliNDI1NjcwOTMxMTJjYjU4ODk3MDNiNzdiNGIzNzIyNzZiNWJiY2NhZGY4NmVlYjllZjZkM2NkMzk1YjJhY2QiOiI1YmE2NjIyNjBhYTBmNzQzYTMzYTliNTUyY2U0MWQ5MzMzNWE4NTVhNTVkZjExYjg3MGVmYWNiN2Y3NWUzOWM5NzhlNzMwYWNjZTM2NjRjODE0YWMxMGZhMTA5ODlmYjAwYTM5YjU4NGJiMTRjYWQyYzAyYzMwOTcwM2M4ZWE4NzY4ZDQ3OWQ5YjRlMTc0MDJlZTM4Y2I4MmM1ZjRkODAxMjVmM2U2NzRhYzFhZGI5MTljYzhhOTg4Zjc5ZjUzMWIwODI1M2ZiYWQwYTFiMjdmYjE5OTdhNGUyYzdiZDVmZjNhYmY2NjI4MWU4YjYwOTg3NTg3MzI3YTkxMDFiNzZjZDEzNzcxZTIzZWUyZjAyZGMzMzk1ODliOWFhYzRmNWFmNzQwYWZkYWY0OTQwMjFjMzUwNGZkZGE4ZjkzZjc3Y2RkODI2MmRmN2Q0YzQ4Zjg1YjZlYjAzYTdlNTI3OWRiNGQxOGY2NDVhNjNlYjZmNTNmOWZiMTIzYzUzYTc4Njg2ZjAxMTNhMjA5YjZlZWVmM2IxMGNkNDQ4OTg3NWEwN2FmODYzYzQ2N2YyNWI2OWNkMTNiOGU3Mjg0NzQ2NWZiYTAyNWUyNWZlN2JjYjQxNzQ1MzY5ZjI1NWRmMGVlZmZjM2U1ZjA2NjgxNWVmNzcxNTY4MGIxMDRlMjBhN2U5ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjY5ZDY2N2JkZTc5ZTQxY2I3ODc0MjQyNmNhNWViZDQ4MDg2Y2YxZGVkNWNhZDcyOTNmY2Y5MTBlNWFiMjNjYzhjYWQ3NWJkOTg5YzNmZmQwNTgxN2QxYWFhNTQ5M2MwNSI6IjVmNzIzNDZlYjUwZWE4MmNiMTExZDViM2M5MWRjOWI3YzYxYzkyZmExYTA2MjE3N2Q1MTNmYjYxNmIxMjI2ZDUiOiIwNDY1YjhhYTg5ZDljYmJlOGUxY2ZhMmU2NGU2NGI4ZDFmNWRiZWM3ZjcxMGE2ZDM3ZmNlODk4ZTNmODFlNTdiIjoiMTczMTM1ZjMxYzIzMjBjY2NmNTEzZTg4YTIxZjJkMjA3ZTAwY2JlNDMzMGQyZjU1MGUwYmU3NzQwNWVlZjQ3YSI6IjM0YTA4ZDdhNTY0NTE1YTkxOGJjZTkzY2FlMDg0ZjI3YTU1OGY2ZjIxNGM0YmM5MTY5ZGJmNTA3YzNmMTFkMDJlYzk3YmRmZDc3Nzk2MGY2YjRjNDU0M2MxZTE0NDU2ZDAwNzkyMTUzMjBhYjYwN2UwNGI3NTE5MDkwZWJhZjNhNWZiYjBkN2EzZmRhMWFmNmNkOGM1ZDc4NTUyNGJkYmE3NWFiYmU1MGUzZDU4ZTVmMDVmOGY2YjJjMjU3MGYxMTc4YWNkMmY0YzExYTdiMWI4YjRlYmU0ZGRiNzFhODViZjE5YmIyZmIyNTI0MTM3NDUzMGNiYzZjMDYwNTA2NmUxMTI5YTJkMzk4MzU2Y2YyZWMyZjdhMjg2YzViODY5YzcwMmFjZWQ2M2Y0ZTEyZjM5YjdjZTI1MDU0N2E5MjI4NzJjMzYyNjhhM2E0NjQ5ZjY2NDE5ODdiYjdjNmJhZjFhM2U4MmNkZjA0ZDExMTYwYmExMWM1YTAwMmNmYmNmNGE4Njk4Mjg2ZmYzMThlYzAxZmMyYzVmNjY2NGU1MDU2MTk5MWE1MzNhZDE4M2EyMWU3Yjk3ZTAwNTJiMDM1MGQyMTM3MzhiMGM2ZTU0MjFhNTI0ODQ1YTg2MWY1Mzk5MzA1NDBjYzQwYzZlZDc4YzQ2YmU5YzEyMmU3OTc0ZDM1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiZjFmNmU1YTU1ZmIyMTgwZGU0MzZkNDgxMTVhYTFhYTM4YTYyNDJlZWIwOTU5ZGUzNjkwZjI1OWMxZDgzOTVhNTg2MmQxYWM0ODQzNDA0ZDI1MjE1YzgzYmNhOTBmNDRlIjoiZjQ2N2VmMDgzYzc0NWExYmZjOWJlNDRmMWQ0NjhiMjUxOGUzZmYxYzBjZWU2ODE5ZmRkZTM1NGQ0MDcxYjE3ZSI6ImZkZGE5ZjA4ODhjNDQzOWNkZWQxNWE3NjgzMDBkMTYzYzFlMzI2ZWU1NTcxYzIyYWI5NWFiM2U0NGIxNjc2ZDIiOiI2YjhkNjBjNTY1NjA0YzhmYThkN2FkYWYwYjA3ZWQyNjhhNDkxZmI3OTc5NGQyNzcwMzU2ZTE5MWRhYTFjYjUwIjoiNTVkMDc4ODYxNGI3NzBmNGI4YzNkM2FjMGJiZjYyOGYyOTRiYTJmZDE2NjEyYjY1ZDBmNDY5ZGVkNjY1ZTNjOGI4MmM5NWRiODBjYzZiNDEwYjVhNmU2MjQxNTFmYzUwYmYwMmYyNzlmZmFiYzE5ZGQwOTRjZmZiMTdiYTQ0YjExMjA5YjkyM2RmMzI2ZGIxNGVlZTM1YThiZjFlY2EzODA3YWZhZTkxODIwNmU4NDRlNTE3ZWIzMmMyMDczNDIwMDhhMGRhNzQyZTczNDQzMzg2N2ZkODZmZDg5ZDI3ZWM2ZTUxYTlkYjNhZDFhZGVhNjQ1ZmRjNTcxNzljNGI3MWRlOGI0NTVhZTAwZWZjMDkzMjhhMGJmZmQ4YzYxZTM4ODBjMDA3OTE1OTk3ZGFlZWQ0YWRiYTYxYjQ0MDQwZjZmOWI2YzY0MjdlMWMyMzM1N2M4ZjdlMThiNWM5NzRiM2MzNGEyZmQ1Y2I1ZTcwZjQ4ZGYyZDEwYzFkZWFiZDk4N2Y4MzkwYmIzMzg1OGQ5YTUxMzNhN2JkNzk4YjFjNzc0MTcyOWI4NTYyZmVjYjNkNDgzMWU5Y2UxMDFkZTE5MmQ2NGJiNWQ3NTdjYmIyMTA5MGQ2NjlhZmM1NTY2YzFkNmUyNTU4NjY3OGI1ZjJmYzdkNmM2MTEzYWM0ZWI1NGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiIwZGI5ZDQzNzE1MzE0OWUxMDFkNTgxOGIyNjNiOTc1NzM1OTk0ZGZjMzNkOGIzZjE1OGEwNTc2MDg2Nzc1N2FiNDM4YTUwMjRlMWQ0MzAwNjIyNjAxOGMzNzhhZjU1ZDMiOiIyNzViZGM1ZmM3OGIwZDhhZmI1YzhhYTVmNzg1NGMzMTlhODFiYjhjYzkzMDAyMTBhOTk5MGZiNzkzM2EzNTJlIjoiODA5ZGE1NGQxODMwNTQ1NjcyZjE4MGZhM2UwNDQxYTBkM2ZlNDcyZTdjZDdhNmQ3MDdmZWU1YWY3ZTliMjFjMiI6ImViZTY2Y2VlNmVmYmY1ODNjODgxYTI1ZTM0NmNhN2Q5OTc0MWRhY2ZjZTBkODc4NWM2NTllOTI3NzRlMjZmZjIiOiI4NzhhM2QxMDlkODE0ZmY0YTQ5MzU2ODljYTk2YjNkNDQ0YmZjZWU5ZWRmY2Q5MDMxMjU1YWQyNTM4ODcxMDI3MjczYmFkNTIyNTg2NGU4NGYzYzJhZmFhMjJhNDBlN2Y2NzkzYWJiYzQ5YzhiMGRkYzdiMzBkOWRjN2I0MDg4ODhlNmI5OGY0YmM3OWUwODc3NWI1OTk2NjFlYTRiNTA2NjkxMzJjMjEyNzJmOGQxN2ZlYzlkMWU1MzEwMzM1YjBlNjQ4MGQ3MDc1YzgzMGE0NGVhNTI4OTAwZjk5ZGU2MTE5MWI1YTAwNmNhNDM0MDM1NmRiZjIwYzYyZThmZmQwNTc3ZDYyMzE0NmIxMjkzN2U4NGE2ZTE3YzBhZTA4ZWZkMzM5YzlhYTk3OWM3ZTIxZTljNTZlMDE5ZjdlNGYzNzViYjYwMWIxYTgzYzIxZjI3YTU1NGVjMDUxOTE3OTRiZWZlNTE0ZGZiZmY1YTNjOWEwYTljODBiZmU5YjZhZGM3ZGVmZmQzMWM3MGJhMTNmY2YxNzBhYmQ2YmYzZDM4NDM4MWUwYTMxZmE5YzgxYjFiZDIwN2VhMmUwYjQxNTNiNmExMjUyYTlmNzNmMTlmNmYwOTlmZGEwZjg3YmFiYTk5Yjk3MTFhMDBiNWY1MGFkODhkM2JjMWM0ZTgwNjQ2NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjQxMDZmNmJhNmEyOTFmYTU0ZTRlY2ZkOWZhNjFiOTYxNTU0ZTRlOGUwM2UxOWQ5YmZkODJiZDM1YzM0NzFlOGJjNWJkY2QyZjgxMDA3OWMxYmJmZTkwNjkyOWU4OGQyNyI6IjVhN2U2MWI4NmNhNzA5MzllNjRhZjYxM2E2Njc2OTVjN2M5MTVlNjY3Yzc5OTk4ZTc2ZTU1ZWIzM2ZlZjZkODYiOiI4NmM3ZDU4ODNhZWU1NjhhYTc0ZDI1NzgyMDE5ZmJkNmY1YWNmNDE5Njc1MmZmM2QxZGQ5NmVjMWU3NDM2NDI0IjoiM2E1ZDgwZTczOWY1YTMwZTZiYjUwN2Q4MmI2MGZmOTg3ZDViZDljYmJmZjRiNDdkYWZmMjc4YTMyNTJkYjNlZiI6ImZiMTQ2MTQ2ZjgyOGU4ODBjNmVjN2FiNWE2NWZjOGVjNGU0ZDdkOTc1YzZkN2MwYTliYzdjZTA0MWY0OTc5OWIxMWUyMzVkN2FjNWE0ZWM0ZWVhNzIxYzMzMjM0NDhlNjg2YWU5NjU3OTIzM2FkNjk4YTlkNmZlM2Y1YjM3ZDg3Y2NmY2U2NDAxOTJkY2RiNTFjN2JmMzU0MDRjOTBiNzA1YmQ5NzQ4MmQ5NWQxYzNlM2E0MDE1MmM4NmFiOTIzNTg4ODQyYWIwMmY0ZDkyMjMxOGE3ZmI4NDQ1M2IwNzJjNzQ5YTdmNTRlOGFkMDA1YzI5YzQ4YWY2ZjAxZWNkZDhmYWMxMzI5NWU0MmIyMDc3YzcwYzdiZjU0ZTIxNDMxN2Y5ODAwM2U0Y2RlMDc3NTVlOTVjOTFmMTk1M2IyOWIzZWVjZDQ5ZGM3NTNlNzRhYWYyYjFjODNmZWFlODc0MjhiZTZhNWFhYTMyNjFmMGY2NTQ5MWUwNGMxZmNkZmQ1NDgxZWFkYWI2OGYwNTdkZjNjODM2OTRjNzQ1MWZkZWQ4NmExODQ3MGIwNmYxNzc5YzM4ZWZjYWM1NGI1NzZlOTllY2VkM2I1NTgxZWI1YzlmN2IzMzQwYWQ1NjY3ZDFmMGQzZmVhZDhiOTQ4NGEwMzJkNWY3NGQ5MDBmZDY0ZDEwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjVkMWZjZGFiYjcwZGFkMTQyOGM4YmUyOTE3MjBjOTJiODU2NWYzMzFlZTM0MzhkNzliY2RkYzk2OGVmZWRjZGI5MzE5ZjVlZTkxMTI0YjkzYjk2NWQ1MDQyMTFmZWYwNCI6IjZjOGM4YTA2NmM2MjA4ZGJjMThhNDBhMzBiOWY2ODkwNDg4NzdlMDM4YmY3NmQ2NWFjYmRkZTdhZTRjNTY2ZjgiOiJiZmEyZTllYmUwZDcwZDNiNjJjZGJkNzhjNzc1YTYyZTBlMjJmYTc1ZjE2ODEyM2EzMzZiNjZiOWEyYjY4YzA2IjoiZTQ4YjUyNDVlYTI0MWJhZWI3ZjY2NWE5ZGFhYWQ2NjJkN2IyNDIyYzNlMzcxMWNmYmVkODFkNzM2OTE4NjRlZSI6IjE1ODZlMDc2MWM0YTM5MDEzZGNiNTUyYTBlMzYzZTcwOWY0MzAzYzBlNTc1NjUzYzliMjQwYmU3NDQ5ZWEyNmU0YmIxZGM5M2YwNmVjOTU4YjZjMDYyMTc3NTdmYzU1MGIzNTZjMTM1MDYzYzAwZmNlOWQ4NTZhZWMwZWRkMjA3MzViNDZiN2M5YThlN2RmNzgwZGIzMDcyZmMyYjMxNGZhNWNkYTY1M2JhMzY5MDEzMmYxMGQzMGVlOTRjODQ1ODg0NmJlNzU2NTllZjM4NjgwODZiY2Y1NGZmNTVhOGRiMWVhNjVjM2U3NDdhOGRkYWIzZjIzMDQ3MzhlMGM3NWFkZmMxMGMyM2JhNjUxY2NmMGRlNjRhMzljYWIzYmVlZjY2N2Y0NjYzOTFhNjFhODdhOTgxYWZlODgzZjA5YzRlZGJkM2VhZTk4ZDUxY2QzZTdiMzFlZTE3OWY4YTRlMTBmZWFjOTZlYTIxMGE0Yjg0MTVjOWYyY2ZlYjJiYzhiZjUxZjEzODAxZGM1NDJiYTFiYWRkYTFjMzAxNDFkNzJhYmIxYmJiMzVjOWJiNDgxZDkxZGI1NjkxYzQ0YmYzNTI2YTAyZDBiZjc3NjMwNGE5NTE4NThhYTJmY2YzZjQ1YmM2NTZhYmNhZWVhOTRjYmRjODUxYTkxNGI0YjNhM2VhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjlmYzU4ZDA3ODVhZGJmMDMzY2U2NjQyZGNjOWE4NjFkZjQ0YTM1ZTg5ZDA2YjM0NmIxNjUwNzRhMDQ4YjUwMDk5NGI0YzBiM2UyNzMwNmI4YzgwNWM5N2IwZWExNGJiNSI6ImUwMmY3YTg1NjI2NjE5NWZiNWY0ODEwMjMyY2Q1YzcxYTQ0NjVlMWQ5NTYyNWMwMWU4ZTdlYjY5YzYzZjY3OTYiOiI3Y2QxOGI4ZDAzNWI1N2JkMDE0NjQyODBhYmU4OTFiN2ZhZjU1ZjllZDk5MTBkOWExNDhiMDMwMzQwYzY3Y2RiIjoiOTE4YzRkNDNmZWNmOTkzMjI3ZjdjMTIwZDIzOWEzMGQzYzMxNTYwMjgwMGQ2ZDU4YjllOWUwNzE1OTY0Y2ZhMyI6ImI4YTM1ODFlYjRhMjA4ZDFhYjhmMGU4NGU5ZmYzZDJlMGJhNTc3MDNhN2I1YmUyZTRmM2EzZWRlMmUyNTE5ZjVlNjA2OGMyOGM0MTE3MTQ0NmNmYmM0MGI0OGE5N2JjN2E5YTFlNGQzYjAyZjQ4ZmJmNTViMWQ2M2RhN2NiYzViN2E5NWYzNTRhZmRhMjczZGJmNWJmMDk5OTYxZGI0YTRjNWYyOTYyODZkYzBhNTEwOTFhNTIyMzk4OTczZDU1MjdiMmU1NWUwNTIzYzIxZmZmZGQwZGQzODUyN2JjNDU5NTlkNWE3MTFkNTQxNjM0ZTMxMzk1NzczMTJkNjc4NDIxZWIzNzU1M2MxMjdiZWVjNjQ0MjIzMTZlNDg1NDJhOTA2Y2Q3ZWZlMGQ5NmVhZTNjNGYyZGI3NjY2MDgzZDkzNjVhNzZjZWU0YTIwN2Q3MTJkZGIwNGJmNzc1YmUyOWVkOWYwMzBlYWRlNDUzNzk2MTczN2UzOTM5YTE5ZTA3NjlhM2E4Yjk2ZDA1NTEyMGM0OTkyNWZlMWViYzRhMmFkNTQ0Njg0MjFkZDU0NjVlODc2MWIzZTJlMzg0MzczYTk3MWU0MDhkZDNhNTQ5MDc1MzhhN2Q4ODc5ODY2NzdlYjE5Mjc2MTk1OWE0MjkzNTIzZjgxNjQ3YTY1N2FhZWVhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6ImQ0MzkyN2QxZTYzM2ZjMzQzMzUzNmNkMDM2MTdhOTdhM2ExMGE3ZWNhZDNmMGM3ODE2MDI4MjlmOGVjN2ZlYjJkZDU5MjJmMmEyZGVlNTFkYjkzYmNmMzUxMDBhODM2NCI6IjMzMzVhMDJhYmExZWEyOGQyZTU2OTczZTIxMTA5ZTBhZGZiNTA2ODYxM2M0NDdlNjI1ZmQ4M2E4ZDBlMzQ0OTQiOiJiZmRlMzNjNTI0MDdkMzEzNzEyMzgxMmM0ODE4Y2ExZTRiNjE4NzhiOGY5ZGJhZWM0NzkzNWUzOTQ4YTg4ZDBkIjoiNDI1OTdjZjAzYmJlZTBlMDAzZDg2NzcxNTk5MThmNTMxODQwMmY3MzI5ZjA4ZTFkOTNjODUwZTJhMmEyZjFiYiI6ImU1M2M3ZDBiMzc2YTk0ODA5ZjQ3Mjk2MWFjZmYzMTQwNzkwMTQ5NTg5MzVjZDY3YWNjNDc2YWJkZDkxOWE0M2NkM2Y3ZDE0NjJkMGQ2ZTYyOGVmNWQwYzhlMDRhNmQyNDM4MzhjNjFlYTM2YjAxNWU4NGQ3YWQ1OWU0OWI0NWM5YjA0ZjZlYzc4Njg3YmE0NzE1NmU0MjliMmZiNmRjMmMwZGE0ZjU2NzdkMWY2ODljZDI4NjEyY2ZhNmQ5NTYyOGMyNmI1YjNlMDExODYxNTNhMWMyNWMwMmY1Y2U1ZmMyODc2MjMzNTg2ODdkMjAzNDM0N2IyNDMzZmZjMTQ0NWEyZDkzY2IwMTAzY2NkYWYwYzU4NWY3ZjRlN2Q0MWFlZjMxMGJlMTI3MjA4YjNkYTkwNTIzYWNlYWM1ZmExM2ZmZTc3ZWFhNGQxZmQwNTg5NTdjOGRkMmYzNTVjYWU3ZjllM2Q4ZjI5ZWM3MDk5NTk5YmE2Yzc1NTY4OWQ1M2Q2Y2NkODRlMzM0MDdhMDY2NTA2ZDk3ZGVjZDdlMzA2ZDIyY2E2ZTBmYWE3Yjk0ZjkxZjRlYjAwNDQyMmRkZjlkZDZiMWY0OWI2NDAwZWE1NWQ0MGUyNWM2NzEwM2FiNTBiY2M5MmQxMDBlODliYTU2OWI2ZDUxYWFjZGRmMDJkYWYxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjBiZDY5Y2U5YTBhNjZkZmZlZmJhODNhZTU2M2U4ZGYwZmM2YzdkN2JkZjQ5MWJmNTJjYmYzZjM3NzcwMjVjZGY5MmIzMjIxN2Y1NTBhMWZlNzM1Yjg1MTliNDRiMDQwZCI6IjgyMGRhMzE4N2JjODc5Y2QxZjQwNDc2ZmQ5Njc3ZjNiNjdlMDJiMzViNjYzMmFiNjg4OTFlMjVmMTA1NTViNjkiOiI5MDNiODgyZGUwMTM2OTViNDY4MzMxNmZmYmQ3Yzc4MDkyODhkNTRjNzJlMzY5ZjcwY2YxNzJiZmY4NWU1NjI5IjoiY2ZiNWY0OTRlNzY0ODZjZWVmMTJkZmUxYmFmZDZjY2Y5YjA3NTRkOGQyMzA2ZmIwYzQxYzBmNGU5MjEzMTdlZiI6ImViYWQ1ZTVhMzU4Y2VhYjgwNmFlNTU5MGQ4MGJjMGJhNWQ0MDYxZjQ5ZjRjYjc5YThhOWRhNGZkMWU4Y2I4ZjQxY2Q4ZWRjNjU3YzUxODBkMThlNjJkYTJiNTNhNTAwODViN2UxOGI5NTdlYWY0ZWRjOTc1Y2E5ZDQzZTM4MDQzNGY1MTU0MmRjZmE5NDdjMzIyYzcwOGYzZDM1OTNjNTIwNzE3MjMwZGYxN2Y5MzQxZjAyYTU1OTZiMjA1OGEyN2JhMjNmNzJhODYyYjM5MWJlODg0NTcwYjIyZTIwYzgwZGQyMGQwYTkzNWYwNjg0NjVkNTU0YzgyOTFmY2Q4OGVmZjYwOGU5MjIwMGY5MGNjY2RjODJjYjU2OTdmMDQwNjY1NGQ5NTgyZThkYjU0MjI1YWFhMjg2OTdiZjJjNGY0N2ViYTA4NmE1NzUyOThiOTkxMDk4YzIxMmM5ZThkOTViZmE0OGY3ZTUwMGM3MjIzZDljYmZmZDFkZjZmNzI1OTA5YWI2ZTlhYTgzN2ZmOWU2OTE1OGFmNDM0ZDE4ZTVhN2Y5OWQxYWFmMTA5MzFmMzgwZDg4MzQ0YWQ4NDEwNjQxMzBjYWU1MGVkZjg2ODc2MTU3NDM3MzVmODA0NTdhMjI4NDc1YmFiNzU1OTAxNWM0ZjQ1ZjkxYmRmYTMxZDg3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjQ1Nzg0Njg0ZDYwMDQ3MzE2ODllMzNlNDViMzQ0ZDdiNjhkYzRmYTg0MTEzM2NiMmRkNjVjNGIzMjZkZmZhOTAxMTA5ZGZhYzJlNDhiZjE3ZjJmZWEzM2I0MTJkYzY1MyI6IjdjNmY0Njc1ZjdhMGI4YzQyNGQ1YmU5ZTgwOWVmYTMwNTQ5Mzg3NGQ5YTk1MGNiMzQzYWZkZmI2NGU3N2VjYjUiOiIyYjJkYmUzODM0ZDhiZTkzZjEzOTZiMTliZTgzYmQ5NjgyM2RkODI3NDBkYTcxYzVlZWI3YjIxODY1MDIxODg0IjoiNDljMzIyZmMxYmVjODZkM2UyMDYyOGQ5YmRjMTY0NGU2ZjVlMDIzN2M3YzY5NDc0NmJmZWUzMmEwMDE0NTY5NiI6IjkxMTBjZWM3ZDA3ZTZlMzI3MjRiZjA0M2U3MzAyMWIzY2EwZTQ1MTZiNjE5ZDAzNmFjOWEwMDkxNGUxMmYwMWVjZTcxOTg5ZjU1YzFjYWNjZDU0MmM2MGE5Y2NjZmZiOTFlMjAzZmQzOWRjYTJkOTJjOGViMDNlZTdlZTg4YWJmMjFkYzY4OTFkZTMyNmMzMTkwZjI1ZWU5YWI0NGNhNzJkMTc4ZGIwZjg0Njk2OTQ2NWIyNWEwN2RjYzgzNzc3ZTZiNjNhN2Y5ZjFhODI0NmRkMzFjZTUwY2Q5ZWI3MGU2ZTM4M2M5YWQ0ZGFlMTlmN2NlYzhiZmUwNzliMzZkMzA5YzI4YjEwMTYxYzI4YjhkNjZjMzU3YzdlZTAxZjA3NDAzYTU5NjM2NjcyNWZkNWJkM2E1ZGUzY2I0MGRjZjYwYWFjMTA2MzU2MTViODY2YWU2MzNmYmRiN2VjZTQxNjk1ZDUzMzc1N2Q5ZDE2YzZkNDRmZDE3MGZhZTc3YzE1Yjc0MjZlZDZlYzhjOWQ2ZTkyNDVjZDVlMTllOGRjM2M4YzdlNjcxMDA3Y2U4NDU0NDEzYmQwNzQwN2U4YTIyNDhiZWU5NWE3NjY5ZGI2ZWU0NzM3N2I0NDkwYTYyNTFhYmI2MGNkNGUyZTQwNGFiODhhYTQ5NDhlNzFlY2VjNTBjIgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm5vcHIuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcubm9wci5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MmU1ODQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm5vcHIuZGF0YQpAQCAtMCwwICsxLDEyMDAgQEAKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6Ijc5MzQ5YmJmN2NkZGE1Nzk5NTU3ODY2NjIxYzkxMzgzMTE0NjczM2FiZjhjMzVjOGM3MjE1YjViOTZjNDhlOWIzMzhjNzRlM2U5OWRmZWRmIjoiIjoiIjoiIjoiIjoiYzZhMTZhYjhkNDIwNzA2ZjBmMzRhYjdmZWM1YWRjYTlkOGNhM2ExMzNlMTU5Y2E2YWM0M2M2ZjhhMmJlMjI4MzRhNGMwYTBhZmZiMTBkNzE5NGYxYzFhNWNmNzMyMmVjMWFlMDk2NGVkNGJmMTIyNzQ2ZTA4N2ZkYjViM2U5MWIzNDkzZDViYjk4ZmFlZDQ5ZTg1ZjEzMGZjOGE0NTliNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiZWU1N2ZjMjM2MDBmYjkwMjlhOWVjNmM4MmU3YjUxZTQzZTk3MjFlNDM5M2VmOWFkODQxZDI3NmNhOTUxOTA2MWQ5MmQ3ZGRmYTY2MjhjYTMiOiIiOiIiOiIiOiIiOiJlZTI2YTVjOGVmMDhhMWNhOGYxNDE1NGQ2N2M4OGY1ZTdlZDgyMTlkOTMxYjk4NDJhYzAwMzlmMjE0NTUzOWYyMTQyYjQ0MTE3YTk5OGMyMmY1OTBmNmM5YjM4YjQ2NWI3ODNlY2ZmMTNhNzc1MDIwMWY3ZWNmMWI4YWIzOTM2MDRjNzNiMjM4OTMzNjYwOWFmMzQ0MGNkZTQzMjk4Yjg0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJlYmZkYWQxM2M4Zjk0MWQyNzlkYmI0ZGU4ZDc3MDZkZGZkYWEyNzlmNWU0NDI4ZDZmNzg1YzViMmY4MzNiNjliMDliNzFhNTdjZjU3MDFkNCI6IiI6IiI6IiI6IiI6IjY2ZTM1ZjliOGUwNWE4NjFhMGIzZDAxYzY2YzQxNmQ1ZThiNzdkNGQyMTMyOGM2MjVjZmY5MTYzZmZjOTJlNzUzMDE1YWE5ZDdmMzZhZTNhOTYxNjgxZDM5ZjI3MWQwYjYyNzc4Nzg2OGNlYzNkZWRjNTIwZWNiMzAzZjk2YTQzY2VjNjczNjkxMTdhZjI2OGExOWY1Mjg0ODgwY2IzYmUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjRmYzBlYzc3N2VjNWE1ZjNiOWVhMDY4MzFhMzZhY2JiOWU5YWRkMDU3ZGJiNzNhODMzNjdiYTdjMTYzZjdiOTlhNTZhYjY0Mjc0ZWU2NGNkIjoiIjoiIjoiIjoiIjoiNzkxMGE4MDFiNjhhMjA1NzBhYjBlNTkzYmQ1NjUwMjFjOGE1NDNiYTM5NDJiZDcyNjAyMWE3MTk4ZjFkODRjODgwNmE2ZjljYzEyZDE5NmUxY2JmZWJmMzI1ZDBlMTk3MTc0NjkyMWI0ZDU1NDgzZmMzNjZkMmNhODM3YzRmYzk3NTFmYWRlYTdiMDRjMGE0N2QxZTM3NjQ5ZjdiZWI2YiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiODVhNDFiYWZhYTkyMzI0MGRjZjYxM2E1M2UyOGQ4NTM1NDc0ZTA1ZmI1OWJhMWVhY2NiNWUyOGIxZjI0OTM2NzVjYzRmNjM0NzVhNjliMGQiOiIiOiIiOiIiOiIiOiIyNzM1ZmI2OWJmY2FjNWIyZjdmNjRlNzQ3YzI3ZDk5NTdmYzZhM2NkMGIzZWVlOTg0NjQxYjI2Nzc2NTU2MDZlNmIwYWQ2Yzg3NWM3YmYxMzMzYWIxZjliMTVhYjFkNTIyOTY4MDU5Zjc4ZWFhMDVhNzA0MzdjNjk3NGVjOGUyOWM4Y2E1YTBlYWU1NDY0YjMyZTk0NzRlNGZhNWQ0MjM2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJiNjQ0MTZlYTQwNjc3MmY5NTVmYmQ3ZGEzMGM2N2Y2YTQyZTBiOWE4ODlkNTU0NTRlMDNhODgyMDVlYWFmZGQ1ODRkZDU0YTQwZWE1YzdkZiI6IiI6IiI6IiI6IiI6IjQ0YmMyNjQ4MmE0OWRhNTI0OWU4Nzg1YTRlNDRkOTFjY2RjNjEwM2ZkNjY2YjQ4MDM1MGVhM2EwOWQ4YThjZjllMzBjMTAzZjUzNTU5Y2JmNTVlMTMwNzhiN2M2OTQ5ZTRlOTBlMWVmNzlkZGQyMzQxNjY5ODFmNzE1Yjg2NDk4MzRjMjdiMTdiZGYwZjA2ODllZDE4ZWI4NTBiNDNlODUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImIzZDQwNDEyMDFmNDM0NWUwYTgxOGRlMTM2YzZhYTdlNmIwNjEyZTFhYzZiM2YyZjI2ZjZlYzMyOGFjN2Y4OTY2ZGNhOTBlMTYyYzI5N2VmIjoiIjoiIjoiIjoiIjoiZDkyNDVhNGEwYWIwY2E5N2U3NDdjMGQyOTA5ODk3OWU4MjQ4ZTUzZjBlYzZiOTE2Nzg5NzJmM2I1NjkxZTc5OTVhZDJlYjk5NjQwZDNlOWE4MzY0ODkxZDBmZjE3OTczMmQ2MzNmNzYyZDY1OTJhNGQ0OWM0ZTY2N2M2OTliMjY3ODkyOWM4MWQ5YmRmYzc0ZDY1NzVmNWI3MjdmNGQ2NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiMDZkYmY1NzY5OWRmNDBmZjY3Mjg3ZWMxMTU3M2I3NWI0N2U0MGU2NDNjNDdmNGRiODliYjQxYTNjYjY2NDQ2NDQ5YjUwM2IzOGExZTIxZmUiOiIiOiIiOiIiOiIiOiIwZDA2YzY2M2Y5MTA1MTk4YTM0MjI5YjBlM2ZjZmZkMGRlOWE0NDVmNGZjNWQ1YmI1OGI1NWU0M2NhY2FmMGMyN2MwN2U1YTljMzczNGU4YThlMDg4NWRkNzhjZDFiZGUwNzc3ZTMzMzBkMmZiM2IwNDIwM2Y2YzI3NDlhNDVjYjk2YmFmYmEzYmY5ZDE4NzVkY2JjNDZiNmFmNTU4MjI4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJjYzFjYTk1ZWFkYmQxYmRiMjQ1OWY0NGM2NjUzYzQ0MWYyMjU2ODUyNDA0MzhhZmYyNmEzNDQ3ZThmNTA0YmU0YzQyYmVlZWZmZDg4NDQ1NSI6IiI6IiI6IiI6IiI6ImU4ZjNjYmU4ZTFmODczOGI0ZmVmNmFlNjc2NjI1MjRjOTljZWZkZjdiNDE2ZWFmYzE1NzUwMDU0ZmZkN2MyODhhZjFjMTNlZTlhNjFkMTlmNzE2M2FhMjFmOTIyMDdiNjYzNDgyMjhiNTZkNjQ0MzhhZDdlZWM1NTY3MDg2MGZkYTNkYTliYjA3NzNmNTY0N2MyYmQwMzM3OGQ3OTVjNzEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImU2OGJiZTVjNmJiM2EzNzIwN2U2NzQyZGRiNzljMGIxNjQwZmNkMzUxMjkwOWFjZDE2YWVhODQ2YzhkYjFkNzZlZGU1MWQ1NTYyZjIwNjM5IjoiIjoiIjoiIjoiIjoiNWNmYWQyMDU0NmExY2MxOTkyMmYwYmU3YjdkMDRiYTdkODMzNTY4NDM1NDU0MWIxZWM4Y2UwYWRmMzYwNzQ0NmM4NzQyZDc3MzdhNTY2YzkyZmNmM2IyZmRlMjA1MTk3ZTlhYTk1YzczOWQ2Nzc2MzFlMjg0MDNlYWZlZDFjZjQ1ZjIyZmUyOWQzOTc5MTI2ZWFhYTQ2YTQwNDBhNGM1NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImFjNzliZTg3YmZiYWIzNDQ3OTdmYTZkYTc3NTUxNmJlMDkyM2RhNmNhNTE3NDA3ZTc5MGQxZTNjYjA1Mjk4MzE0NmY5YTc1N2ZhOTEwY2U3IjoiIjoiIjoiIjoiIjoiNWI0NDQ0Y2I1OGRmNDc1MDIzNzRmZDZiZGEwNjRjZjFkNzBkMjUzYjk5NGYxYTZlNWQ0ZTYyNzQxODQ2NDcyZDlmMWNmMTRhMjQ2OGFhZmQ0Y2E3ODc1YjMxOTg3YjhiYTBkZTkxNDQ2NDhhODI2MDJjMTllMjkzZjI2NjhjOTUxOWJlM2ViOGExMmYxNTU0MzM5NTM0OGFhNTE2OTdiMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImNkZGM0MzM1NWU2NTEyNTVkZWRmMTcxYzlhYTEzMzQ0NTJlM2U4MzBjYzRjMjE2MDVlOTI3MDg1NjU3ZTc0MjJiNjhiZmZhYjc0ZDhmNzhlIjoiIjoiIjoiIjoiIjoiZTU3ZjMyZTZhOGE4NDdmMDMzODAyYTkyZTYyODJjOTY3ZWIxOGYzYzk4MzdiOGJiZTVmNWU4ZDlkNmZiYzRkNTcxNDEyYjg3Mzk0NGQyMGJiOGEzNTRmNzg3YzMwMDRkMGI1ZGQ1YTkyYmRiYWI2MDBmNTVkMWNjYzUyMjc1NzE1ZGYyMzlhMWUyYTc5MDQwODYyNjgwZjM0ZjVjZDRmMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImViMWEzMWM5NjY4MzEyNDk4NWM5YjQxMmQxNmRkODk5ZDVkYThjNDMyNzNiMzE3MzQxN2NhMWE5MzkyMjY1YjI3MzIyMWJiZTg3ODMxNDY2IjoiIjoiIjoiIjoiIjoiNTllNGQ5MTUzNDk1MTRmNGFhY2UzZDllZWJmZDMwYjU4ZTgyNDZjN2RjZTIzYmQ0YzRlNDdiYjlhYzhjMjY5NjQ0MWQ1YjViYjJmYmIyYTFiNTg1MzczZWM1ZWU1NTA3MWYyZWE4NjhiMmRmMzQyYjVmMmRmNDhjZDAyNmRkYWM5MTE0ZjkxNDJkYjk5OWZiY2RlN2EwYzIzNDAzZmIzNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjZhMDg2ZTY3MTMyNzA4N2RkZTkxMzk2ZGQ3M2Q1NDAwZDU5YTRmYzViMjZjMDU1OGI3ZDUzMjFlNGYyMjU4NDQwOWI3ZTZlMDE0ZTdkMDYyIjoiIjoiIjoiIjoiIjoiNzBlMTdjYTcxYWQ3NWU0MGVkMzE2MjljYWUzZmE5YzIzMzc0Zjc4ZTAyMGM1NmU1NTE5MDdmMjI1MjcwNmJkNGNkNGM0N2QwOTlkYmMwNzI0MjlhZTUzZTM0ZWQyMDhmZGFlNWU2ZWMxM2U1Y2Q5YjQzNWMxYjI1ZGNiZDA5OTEzMjU3MDQ5MWU3YzM1NDRjZjhmZjJmYmE1NTNjMTk3ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjhiNzA4NmVmYWMxZTNjM2M4N2MzNzk4NDcxZDRhZmQwMjhiOGJhYjAyMTdkNDAzZmI2MTIwNjcxNWQyMTlhOTM1MDViNjJjZDYxOWJlNTFiIjoiIjoiIjoiIjoiIjoiMGRjZDUwMmM2ZTg4NGEzNjZiNTBmMjA4YTFiOGM1OWZmYjg1ZGJjZDcyYTZlMmQ3NWFlYTk0Yzk2OTJhNTVhNDVmYTdjMjkwMGEyNzdkY2QzOGI3OWNmNDYzYWM4OTYxZmU1NGRmNDdiY2ZlNWE2MDU1NWVlNGVhMmJlNzZmYWVmZWRhZTNjZTY1ZGI0YjNmMDQzMDFjZjVjNDNhZGE0MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiI3ZDcwNTJhNzc2ZmQyZmIzZDcxOTFmNzMzMzA0ZWU4YmJlNGEwY2VlZGNhODAyMDc0OTA0N2U4NzlkNjEwOTU1ZWVkOTE2ZTQwNjBlMDBjOSI6IiI6ImZkOGJiMzNhYWIyZjZjZGZiYzU0MTgxMTg2MWQ1MThkIjoiOTlhZmUzNDc1NDA0NjFkZGY2YWJlYjQ5MWUwNzE1YjQiOiIwMmY3NzM0ODJkZDdhZTY2Zjc2ZTM4MTU5OGE2NGVmMCI6ImE3MzYzNDM4NDRmYzkyNTExMzkxZGIwYWRkZDkwNjRkYmVlMjRjODk3NmFhMjU5YTllM2I2MzY4YWE2ZGU0YzliZjNhMGVmZmNkYTljYjBlOWRjMzM2NTJhYjU4ZWNiNzY1MGVkODA0NjdmNzZhODQ5ZmIxY2ZjMWVkMGEwOWY3MTU1MDg2MDY0ZGIzMjRiMWUxMjRmM2ZjOWU2MTRmY2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiMjljNjJhZmEzYzUyMjA4YTNmZGVjYjQzZmE2MTNmMTU2YzllYjU5YWMzYzJkNDhiYmQ4N2JlOTlkMTg0MTY1NDEyMzE0MTQwZDQwMjcxNDEiOiIiOiI0MzNkZGFmMjU5ZDE0YmNmODk3NjMwY2NhYTI3MzM4YyI6IjE0MTE0NmQ0MDRmMjg0YzJkMDJiNmExMDE1NmUzMzgyIjoiZWRjMzQzZGJmZmU3MWFiNDExNGFjMzYzOWQ0NDViNjUiOiI4YzczMGYwNTI2Njk0ZDVhOWE0NWRiYWIwNTdhMTk3NTM1N2Q2NWFmZDNlZmYzMDMzMjBiZDE0MDYxZjlhZDM4NzU5MTAyYjZjNjAxMTZmNmRiN2E2ZThlN2FiOTRjMDU1MDBiNGQxZTM1N2RmOGU5NTdhYzg5MzdiMDVmYjNkMDgwYTBmOTA2NzRkNDRkZTFiZDZmOTRkMjk1YzQ1MTlkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjBjMGQxYzAzMjhhMzg0ZTY5NzY3OGFjODczMDNkZDYyYzg3ODBiNGFjMzNmMTg2NzRlYTRkY2U1YjE5MGQ0ZTM4MWViN2E1YjVlMTJiNGYxIjoiIjoiMDU1N2JjMDUyYWE4ZWFiYWIwYmFhNDJjYTM4ZmJiZTkiOiI5ODU4NjVjMTgwZTBiZmI3Y2RiZWQxMWI1OGI1ZTUwOSI6ImY0MDQ1MmY4YzViOGY0Y2JjMTY3NWY3MGJiODAzNzQwIjoiNGExZjQ0MmVhZTZjODYxYjYyMjAxNGIwNzlkZmQ0NzU0MzE3NmI4MmJjNjA4MjZjZmEwMmQzOTIzZWYwNTYzZjhkZWJhODM2MmM4ZDE5NTBhNzBlODBkNjcxODlmYjRkOTA0Yjg1NWVkMGFjMzk5NDJhYTg2NzNlMDk1MWI0ODc2MzU0Yjg0OWE2YzFjNTFkMGMzNWEzZjRlZDRlMmYyMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMTI4KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiI3Y2FkNjVlNWNjMjg4OGFlNGU5NjBmNWQxNDNjMTQyNWZjMDc4NWRiNDcxY2M1NWU2NjQ1MWQyOWNmNjVkODk5YTI4MTkwNWZmOWIyOWU4NyI6IiI6IjgwMGQ1ODNiMjU2MGQyYTIzMDAxMzJlZTJkMTNmMTlmIjoiNDJlYWU3MDVjMjIyNWQyMTJmYTA1NTRhYzZhYzU2NGIiOiI3MjA4MWU3ZTcwMjAwZjE5ODJjM2FkOWNiMWQzZGRiZSI6Ijk1M2U5MjI1OGJlN2ZmNjFiOTcwNzcyNTJhYjk4MzUyMzFlMzY2ZGZhNWI2MzVmYjg4OWMzMzc1NjJhMjY0MWQzYWE5ZTQ2ZmVlYjJhNGVhMDNjYjczZjFmODAxNTk0YzNjYzcxZDI5NDVjMTFhNTJiYjBlOTM0MTlkZjVkMDg1NGFkNWYyZTM2ZDIyM2MxMTllMTQ1Y2FkNTA3NDk1YTciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDEyOCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiMzA4NGM4ODExNTY0MTY4YmY3ODM0ZDlhNmM5ZDBhZDA4MjFiMTNhMGI2NmRkZGM1ZWMyYzkwMjc4MjM2YzA4YjZmNjU3NjExYTE2NjM2ZDciOiIiOiI5YTc2NjViMzg4M2JlZDM3YTQ4YjA3Zjk4ZWZhNGI4YiI6IjI4YmZlOTYwNWJhODU2MDczZWU2OTE0NWNjZGRhNGUwIjoiYzI2ZDdjOTYyNTc0YWE1ODdiM2ViN2E4YzI5YjJlMDgiOiIzNjkwOGFkZWU0YzFlN2VhNGUyZjI2NmI2NWFhN2Q3YjUxMTNlNGI0Mzc3YWRhZGY0NDA2YmM1NzNlMDQzNzRhN2U4YjliOWIzNmViMDM4NGU5MzM2YTllN2I0ZjMwOGI0NjNiZDdhYTk0NzYxNTRhYjEzMTgxZGE1YzJkYTk2NzVhMzc2YjljODJhY2U1MzkxZTM3OGZkZDBjZDRlZjI4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAxMjgpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImEwNDEwYTMyNzAzNzIwYWJmMmUyOGUyNTJiNWI5MTc2Y2I5NjkzNTA4MmJjOWVmNGNhN2JjYWI3OGZjZTdkYTk3YjAxNTgzNzkwNDFiZDZjIjoiIjoiYjcwOTgyYWY3YjVlMzM3Y2ZlOTg5NzAzYmZmYzA5ZTkiOiI4ZGY4YjA4ZjY0ODUxOGY3NTI2YzI0YmI5NWRmMWU0NCI6IjY3NzU4NjVmNDUxZWUwNTVlZDIyNDIwNzZkZWJlMjM3IjoiNTQ4ZjY2ZjBhY2Q5ZWQ4ODdjZWI3Zjk1ZDFjOWEwYzI5ZTJmNjAwN2I5MmM1ODFlNjE1MTM5MjU2YmVhNjNkMGZjZDdhOWI5NTBlM2U4OTQxOWQyMTQyYzVkOGY1YmJjYzJiYTViMGRkNjc2ODliN2FkZTAxZDk4NGUzMDNhNTI5MTY1ZGJkZDE0MGVkZDY5YzNlYzZhNGRkZDYzZTA5MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMTI4KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJjMmU5YTZlMmUyOWY0N2RlZTBlODA4NjYwYzQ0NmE0ZmFmZjQ2NTA3M2E5Nzg2MmMyYWI2Nzg3MDk1ZTk0NGM1Mjc2ZDI5YmJiYmQ3YTc3NyI6IiI6IjM1OGZmZWFiNmEyNGY5MzJhYmQ0Yzk1NzdmODRjYjEzIjoiMzc1NzhjMmQ5YjY4ZDQzZDZjODMxNjRhNGM0M2NlMzciOiIwMmE3Yzk1NzVkOTUyN2EzM2RmOWZiNTY2MzczZGIzYSI6ImZjZDMxOGM4MzU2M2Y3MmU1YTIxZDRhOTNhODQyNTRlMGMzYmI2ZDNkZWQ1NWMzZDU5MzlkYmQ1ZDE1MjUwNjJmZDU4N2E0MjIwMTI0MzdhZWI4ODU4OWU2NjllNWE1ZDU3ZjdlYmIxNmUzMDU5MGY2ZGViZDBlY2VkODRmOGU1N2Q0N2EzZDEyM2E1MjM2MTE0NWE4ZmFiMjU4ZWQxOWIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDEyOCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiYzkzODU5ZTdmZWQxMTYzYjA3MGJiZWZjZjVmZmIwYTY2YTZmNWI5ODYxMTZhZGJkOTU5ZDM3ZWEzYjc5YTE5NzQ0OTE2OWJiMDFlMDE0M2QiOiIiOiJjNjI4NDA4MTZhZTA2ZWI3MjViZTlkZDNlMjk1NGNkNSI6IjVkYzYwNTc4YTZhMzA5ZmFlMzNlYmYxNjJjMjJmYWI0IjoiMDBkMGZhYzEyYTliNjZiN2VhOTM2NDExZjE2NDVkNGIiOiJjYTJlYjIxMmIyOWQ1YTM4Y2Y3MjQwOWNkOGNiNGJjNDAxZWFjYmM2ZTU5Yzg0NTUxY2RmYTEyYzFjOGZiMzljMjljOWQ0OTkwNWIyNTk1M2Y3MjdhYzI0NDUzY2NmMWM2ZjIwYTRjM2ZhN2MzM2IwNTJlNGU4MmM3ZmNiYWI3MGFkZTg2NWQyNDliNmEyN2UwYjVlZGRjY2YwNTY3ZDZkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAxMjgpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjIzN2E1NjZlNGE0Njk5NGZiMTNhZjViMmQ0MzIxYTAzZmRmNWNjNTRmNDYxZGFmMzA5NDlmODZiN2IyMjNmYzM0MWRkYmU1MjVjNTMzMzM5IjoiIjoiYmMyNTI5MDFmOGY1YzkzNTc3MjJhNDI0YjBhZjFiYjEiOiI2MDIwZDkzZGYxNmIxMGMzMWQ4ODAyZjZiYjlkZGZhYyI6ImY5MTA0MTE3MTkwZDkwNWEzMGM2NWMwYTc2MTQ4YzdhIjoiNzBlMDYxMWYxY2Y3MGJhOTNlM2NjNTNkYTgzZmMzZDYwNjRiMjkzZTkwYzExN2VjMTJjYzc5YzVlNGVkZjg0NWI2YTVlMmM0Y2U3NWZmY2U1ZDE4YTc1ZTI0YmY1MTMwMGJhZTY0NDNmMDRhNzEwNDdhOGY1MjJlZGIzNzA2ODllZjFiMmNjMTM3Njk4NjViNjlkYzIzMjk2M2Q5MDQxOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMTI4KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiI4MGMyYjZmYmQ1NzZjZDU3YzM4ZDFkMTE5N2I5ZTdhZDQzMjE2MTExYTFlYzhiNWYzMWRmYzFhNGUwNWMxNWVkOTYyODgzODZkMDc2ODk1MSI6IiI6IjFhZjIxNWQ5Yjk5MWU0ZjdkZGMyYTg5ZmUyMzM4OGExIjoiZDg4OWU0MzQxMGVlYjJhODNjYjY5ODJmMzgwNzc3NTYiOiJjNzdlN2JiOTMxMTVjMTBhNTZkYjEyNDVlNjEwZThiNiI6ImFmOWY4YzM0NjU0ZjQ0ZjQyOTE0MDcwZGNmMWU5NzE4ODQ5MDJiNDI4YzczMzI5MTNkZGYyZTM0MmU3NzZlMDFkYzJmYzczY2Q4MDNiM2E0OTJlZGIxNWU3Y2M3NTViYWJjMjNkOGE1MDA3YmIwYmViZDdmMDJiZDE2OGQwNTU5NDhlNmE1YjY2YTMwMTY5NTE2OTc2MTdlYWFkMzcxYTgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDEyOCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImQ4MDQxZTMxMjE1ZjdjODQzZWZmYWVjM2FiNzIyZTFkMjcxNzUzYWNmMmVjOWFjZThiNTczMGUyMWMwYzMwZjlkYWE5ODU4MDY5NWM0NTcyIjoiIjoiMzQ3ZmM4NjIyOWUyZTZmNmFmMmVhZDE4NjI0OGMyZjkiOiJhMDljMWI4MTNmZDExMTAyZGYzOTJkMTE2ZjEyN2RlMSI6IjBhYjZjNWM3ZjY4OWJkYThhM2E3ZjQwNmJmNmRmMzNkIjoiZTA5NDE0YzhmNWZmMmQ4ZDZiNjUyMzcyOTU1NmRjMWI0YmJhNmU0Y2ZjN2E5MjllNDU2MWNmZDMyZTU0ODQ5MThjN2YyMWUwYjUzM2MzZTM4MjdiYjhlMTE1Y2M2YTJhYTVkZWYzZDk0NjAwMTU2NGVkYThjYjM2ZmE1YWE3NzE2NTFlNDgzN2FlNjBiZWJhMzJlMDFmNWQ1OWMwYmUwYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMTI4KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiYjBmNjlhMjA1MzFjNWIxODZiZjhjMTZiMjVmYTFkZThkNjgxN2JhMzYyYTlhMDBlYTNhYTU5YjAxOGI3Y2U4NjQ4YjdmODRhYjkyNTA1MGYiOiIiOiIyOTA1ZTRiMDgwM2QyMjFjY2ZiYTQzYmI0ZjFlMzMzOCI6IjA0NjBjNGJhMTczOGRkN2M2NjJlMGY0MzM3YTQ1NGM1IjoiYjVhNzg3MGRjOTlmNWMyZWFkOTNkYWU3NzNhYjU1YzYiOiJhNTQyYTNiYTUxZjQwMjRkMzg3NmEzMmZkNmZkYWExMzZjMDI0ZmYzNmI5NjYyZWQ4MmNmNTgwYmIxZDMzYjUzMWIxMjRjMGUyOGZkMGI4ZWMwNmU1MGRjYzExMTMyMDYyYTU1YmRiOTYxYTkwODY4OGRkY2NkYTEyYmU4ZjEyNDJmOGE1YWRhNTM5MzllMzJkOGMwMzgxMjUwMTM0Njg2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAxMjgpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiIxODhhZTQyZmJlMGY0ZTllMTdjN2IwNDMyNzEyYWFlZmIxNjY3MTU3MTMyZjhkNjI0MGZkOWQxOWJhOWY1ZjU2ZjU4YmQwOGU5ODQyZTJhMSI6IiI6Ijg4NTYwNzEyMjc3ZjczZDQ1N2Y2MmIzNzY5MTg5MzgxIjoiODkyOTU3YmZiYWNjNjg0YWY2ZDMxYzhiZWZjYThlNGQiOiJhOWU4OTg2ZmY4OTQ3OWZhNTA2NzgwYjA3YjA5YzJjOSI6ImU3NzE4NzkzMGFjNjYxYmQxYTQyMmUyOWNhZTRjNjczNzBkOWU4YWIwZTQ0ZWE5ZGQ4NmIxMWIyYTFjNTI3MTE2MjUxMzU4N2VkMDJkZjRjOTFiMGUwNDE1ODQwNjc2M2U3MmE0NDNhMTk2YjZhMmUyMmFmNzJlZjI3MzJlMzkxNmNhYmY1MThmYTU4YWI4OWZlYTU1MjgxNTM4MThhNmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDEyOCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImFkNDkwODE5YmJiOWU5MzdlMGQwYTc0OWViODM0NjU0NzBmZTE0NmFkOWYzYWUwYjEwNDgxMGJiYjI4NzczZTUzOGI0NjYzMTliZWY1ZDZhIjoiIjoiZTAxODgyYzhiOWJjNTJkNTg0Mjc0OTEyZDkzMzY3ZTgiOiIyMGEwMzcwMDQ5OTQ0NDAyOGRhNGM4ZmM1YmE0MmQ4ZiI6IjY1NzRiZTI2OWQ1Y2NiNWQxMGFkNWZkNmFkZDc3ZTJkIjoiNTY2Mjg0NTcxMWI1YTZjMDQ3MTVkY2IzMjkzZjA5MTcwOWQ4NzcwM2YxYTQ0OTg1OGYwNzQ4NTg5NTgyNjBjY2Q4MzNkOTY5OWZjZDBiY2JhNzk1NmY5MDM2ODA4OTg0ODI4YTNhOWRiMjA0MTU1NmM3N2IxNjQ0YTc1NjZiZDg4OTJlZDUzZTQxOGNiNzRiY2ExYThkNjVmNTQ1YzNlMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMTI4KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiYWE0ZWEwMDExNjA0NDE5MTdhYzYwZjYyMzE0NjhmN2RhOTkzZTEzNmRjY2U4MjA4M2NjNmM4MWI2OWU2N2VhZDM5MjcyMWVhNzliNjNlOTciOiIiOiI1MGY4OTYwNmU3OTM3ODZhMTRlZDExYjMwMjYzMTNjZSI6IjI0NDVkN2I2NzBmZDc3YmI2MmUwYzFkYjc1NjcxODYzIjoiMzJiNzk0ODhiNDQwOTNlZTdmZGI0NDQxYmMzMDJiNzAiOiIxYjgwMzMxNGM4ZWQxMjRiZjY1NTBiYzYzYmFiZjA5ZjE4OWU1OWRmM2Q4ZDQxMDM1NjdjNDQyYjY3ODNjMzJiMjM2YTEwN2Q0YWNjZDdhYjNlNDY1ZDI5ZjYyMTYzNDliYWEyOThlYmVhZmQzYzVjYzE5OGYwODgwODY4YjhjOWI2N2Q5NGZkNTM2MjY2NTEyMDBmNWRmYzkzOWQ0MTI4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjExYzBhN2UxNDcyY2VjNzBmYThjMWNhMTU3NTlhYzViYjFjNzNjMjJkYjM5Y2Q3YmM2YWI1OWZmNzA4YTVjMWY1OThlNzVkZjA2MGUxOTgxIjoiYjI0ZTM5MmNiMWYzYzE4YWYyY2I1MGZlYWM3MzNlMzIiOiIiOiIiOiIiOiIwNzBlNjAzY2Q0OGQ1NjQzMGE1YWI0NjFhNzUxZWMyYTRhNmFhNmZiNmVlNTJlZmU5YTQxZTQ2MTFlYWZkZmM5NTcxODRiNDdiYmIwMTdlNDg0YWMzNGM3ZGU1NmNkNzgxM2ZlYjMwMWI1YmVmY2U1NzNhZDBhMjU0ZTZjZmUzNWI3N2MzMGJlNmI3Y2I1ZTdlZmE3MjgxM2M3NTQ2YmE1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImUwNTE0MWFkYjY3OGMyOTdlZWJkODEzNjg4NWI2NzM0NWI5YzBjNTRhMGZmNzRkODI2ZTI2YzkzMjNhM2RhM2FmNmU1YTVhMWYzNTFjYjU0IjoiNDgxNGVhNzFhOGUxMTg0NTcxNmIyMjA4NWNjNjVmMmIiOiIiOiIiOiIiOiI1ZWYyOWEyZTdlODIxZDUyOWQxOTI4ZTZiYWIxNmZiODBkNjQ5MWE5OGRkNTM2OTU0NzNkYWRlYWQ0ZTUxNDJjMTQ2ZjFlMjliMTAxYzZiMWE1N2Q4MzE1Y2UzNGRiMTcwNDBjMDI1NzJjNjQ1NWQ5MDIzMDNkY2ZjYjJhZDMwNTIxNjZkZTc5MGNlMGM5NGFmNzhhNTE4NjRlZmQ0YjEyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6Ijk3NDdmNWEyYTI3YzY1YjBiZDkyMDJmMDc0M2FmYmZkMjQ3YjNiMDVmY2U3ZDMxY2QzZTM0NzQyY2ZmZTFjNmQ1NWY4Zjk4ZGZjNTc5NTNjIjoiYzNmYzg0MzA5NzJkZmE4ODBlMmJmYTY2ODYyYmZmZGUiOiIiOiIiOiIiOiI5MjEzN2ViZjc1MTgzNTRiZDY1ZDg3MjM1YTgxYzc5ZTEzY2I1M2U0NmI0N2ZhMDkxY2ZlMzQyZjAyNTNlNWVlNDYzNGU4ZmU1ZmNiOTY3YmZjZGJkZmFhNjA2MTRiZjk2ODI2ODc1NjA4YzBmMWI1NTk2NzYxOWRiNmRmMjRlZmVkYzg2NDk4Y2FkNzMzZTI5ZWU5ZDllM2Q2Mjc3MjczIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImE5YThhMGE3YjhhNThjMjM5ZTA4M2ZhMWNkMmE4Yzk2OGNmYzVmMDc0YmJjMzE0NzNjYjcxZjI2YjgyY2RhZTQyMjNmYTMyNzAyZjU3ZWUzIjoiM2ZiNGMyZjM3NzE0MDM5YTFhMmU2YzY4ZTQ4MThlZWUiOiIiOiIiOiIiOiIxYjU5ODZjY2RiYWM3ZGE3ZmU3ZTc5MmRkZDQ0NWNhODk0YjZlYzA4NDI0YTE3ZmVkNTM4NWZmOGJkMDNiYTc4MmI0MmJjNWE5Njc2YWNkNWJlODA2MWQ1MzU5MzBhNDg3OTAyOTIzMTQ4NzEwZmYxNzkwOGZjYjAzZGI3ZGRjMGU0YjEwYmUxNmMwYTAzNjVkYjM4NzUyOWEyMzk4NTUyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6Ijk5ZDE4MjJiYzE2ZjJlN2JiZWI2NTU2YzUyMTU0ODllYTYwMzlmNTRhMTc1YWU4NmFhZjRjZWY3ZDgwZmZlZGMzN2UzYzY4YzdkZTAzZGRkIjoiZTgwZmEwM2JkN2M4ZjVhY2RkYTU3NTRlZjAwY2RiNWMiOiIiOiIiOiIiOiIyMjM2NTY4MjUyYTM4NGE3ZTc1Y2VmYmEwNGE5NDM4MTk0MTAzNWIyOGRlNzY0ZDViMjUxOGE5OGJhNGU4ZjFkNTBlODIzMDk1M2RmNDBkYjYwMmI4OTU5ZWU4ZjFiODgzMWIyOTUxNmY5MzdhYWY1NjE2NzliYWMwZmZiMTEyMDcwMzBlZjMzYjI2ZGEyOGFmOTNiYTU1MmMwOGJmZjk3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjMwNWE0NDc4YmI4NWIwY2RjYjk5NjE4ZDg3NTM0OTRiZWVlNjE3ZDcwYWVjMjY1MDFlZWYyZjc1MWNhZDBiMWNkZTUwOTgwNmQ0MDY0NDIyIjoiYzNmYTQ5MGEwMTUxMWU4NDEwNTc3MDIxYTMwN2MzMWIiOiIiOiIiOiIiOiJmMjNjZWFkYjg4MWI5NDUwMjliNzgzNjZhMTczYzIwYWY5M2U0M2ZkOGMzYmUwNTg4ZjgxMWFmMzFhN2RkZDY1MzYxMGNkZmMzY2Q4NzVhMGYxMTRmYzFiODg3ZTRmZTUwNDJlYjBkYzBjMzY3NDY5NjFiMWI3MTI2OTUwYWZmNGMwMTI0NWMyMTUxNTY3MTVjN2VmZDE0Yzc2NTM5YTBkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjE1YzE3ODM3NWM4Mzk4NjZhYjMxYjM4YjkwMGJhODg5MzI1YmFmMTliODRjOGZhZGYyZjc4ZGEzNTlhZjEwZGE2NGM0MjEzMGY3OWYzMDU0IjoiYTRkNTA0OTY3MTFkY2FiZGU4ZTBmZjIxZDNkYTc1MzUiOiIiOiIiOiIiOiIzZjM4MjU3MzcwMzUzNjc3ZGVlOTEyNzg2MjMwNTE1OGIxYzViNjA3NzQxZDYyOTA2Y2ViZjhiYWJlZTRmYzZjZjFkZWUzZjgyMWQxZDc1MGM2OWYzZmY1NjgzZDI2NmRmMGE2NjlkMjkxZjY4MTZkODZjZDIyMmI1NmEzNTFjMjQwYWZiYjQ0M2U4ODZjYTE5NDk5NGI0ZGVkZGM1NGJiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjdlZmI2M2VkMWUwN2NmODUzZmNlODA0NjgwNDlkZDVlZDVlNTVhOGI1OGJiZGQzMjM0MWYxMzc4NjdjNDUxZDhkNGUzMjc3MzNkZTg5Yzk0IjoiZDg5MDI4ZDIxY2VlMmIyMjNkNjM0YTk5MjdlYzAzNmIiOiIiOiIiOiIiOiI0NzdhMTYxMmMxOWIxYzJmZWUyMzIzODVjY2RiNWIyZjMyYzg0NWMwN2ZhMjE2ZWU0MTBjY2EyMDI0NTIzOWQzMjIwYWM0ODc3MDAxN2M0ZDUyZjk5YTI2N2Q1M2UwYWNkZjY5ZThmNGJkMWQ3NmQ0NjNlOWJkZGRjMTZiZWY3ZmFmOWQ5YmFhOWI5ZGUzZDM5N2Q3NDBkNjg1YzE1OGEwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImM3MjA5NzU1YjkyYmZmOTNhMDU5ZGI3OTg4M2IyODY2YjUxYmFlMzM3YWVlYzllNThjODdlNjhkZTMzNTQ1ZmEyMDg3MGU1ZTcwYTE5MGY2IjoiMzRhZWU5NjFlY2NmMGI5MmI4MzNmMjQ0ODcyMGJkYzkiOiIiOiIiOiIiOiIyODU2OTI0NjgwNTM1NDc2MzhlNjVkZmI3YzhiNjlhYWM0M2UxNmJlNWE0Y2U5ODk4YWUwZDBjOGY1NjdkYzI3OTQ1ZWY2ZTIxZjM2ZDQ1NmNhMjQ4NTc3ODI5YjkwZjk2YTg4N2Y5NmU5YzJhNmZmMjYxNmUyMWM3ZWM5MzA5M2Q2OGY2MGQyY2I5OWYyYzc2MzJmODU2ZTMzZWE4ZmY0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjFjZWVjZWJiYzQyZjllYTFmYWY3NDk0MDc2Zjc5MzdiYTgyN2I0NjY2ZDA0MzNlY2MwMjhlZTc1ZDRmNTVkZTJiMjIzZTkyNjI1ZTM5OWFkIjoiYjQzMWEzNmM5OTZjY2RiNWU5MzZkYTdlYmQyMTZjMjAiOiIiOiIiOiIiOiI2NGQ0YmFjZGYxODVkZDhmNmViYTM1ZGM4Zjc5ZmEyY2FiMTU1MTEzZTAyMGQxZjEyYjMyYmJjNGJmYjljODU4ODE2OTJhNWQ4OTMzYTQwZDlmZThmNjYyOWY3NGJiYThhOTllOGRiMDIyOGExM2M4ZDc3NzY0NTlmNzNkYmE4ZTU5ZTk4MjBhZTcyZjhjNDI1YWMzMDQ0MDc5YzFlYmZjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJkNWIyNjRjZWMxYzdhY2Q3OGI5MDJkYzE0YTQ1N2QzMGI3OWFjZDNlMDZhMTJmNTdjZjBjM2UxYjhmYjFiZWZiNWFiYjlhZjFmNThjYzllZSI6IjEyZTQxMDFkNmQ0NTA1Y2Q0MzcxMGIwNWQ1MmE5MTk0IjoiIjoiIjoiIjoiYjUzZDNiYmY0YTk1NjE5MDRhZDllMTAwYjI2MDFkYjI2NjBmNDE1ZmM1Y2FlYmJiMWE2MjhiNzA5NWU2ZGU0YTM4OTVhYzVkYTZmMmMxZTFjNjY1NWQ3NmZhNWI4Zjc1ZjUyZGU0MTU2NGQ3OWIwOWM5ZDJjNzZjMWM0ODZmNDYyYTcxNjRlY2Q3NmYwZGZhN2I1ZjUzYzBjMjViNzczMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiZjQ0MDY3MWJjYmJiMWJkYWZiMjJjMDY0ODJmZjY3MDM3NGNkYmQ2OTUzNWQwNzk4MGY0M2NmYWYxMGFhZDI0NTNkODg0Y2U1ODUyZGJiMzIiOiI4YTY5MTQ0ZWJlY2E1OWMzMzBjOWE0ZTBlNjQ0YTdhYiI6IiI6IiI6IiI6ImE1YjQyNDQ3ZjRkMDI1MDQ1MzZkZjllMGNhOGQ5ODY0MmEyMWI2NGE2Yjg0YmRlNGIyYmMxODZjMjhiMGY3NDBlYmRmMmQ2MGM2NjRkNGQ4OWE4NjcyMDdiYjhkNGM2MmYxNzQ1Y2IzYzk3MWI0YjI2MjI0MjNhNDI5MWUxY2M5N2ZjZTcxMjhlM2VjYjNlYzEzY2UwODk4N2Y1OWI3N2MiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImJlZjM5OTVmMGQyYjEwNTE1NTRjZjdiMzIzNTgwOWZjZDI5ODljYWZiYWQwODE2MzBjNTM4YTdiYTA2OTVmZmQ5NWYzYWJlYWJmMmE4NjdkIjoiZTgwN2NmYzUyNDk0MTE5MTg4Zjg2YmZlYTg3OGYyY2QiOiIiOiIiOiIiOiI1MjdiY2E2Yjk0NWRiOGYyY2RhN2Y3OTU3NjNlYjU3NjdjZmExYTQxOTVhOWQ5YWU3MGRkODEyOTE1ODEzOGU2ODdhMDU2YjY0ZjAwZDI5ZTExYzM3YTk3NDBkMTlmYmQxNjQyOWNlNGRhZTc5MDI5MDE4Yjk4NGEyMmMxYTJiMmI5ODg1NThiMTMzNjUxMjM0YjM1ZjIxZmY0MmVkY2IyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiI1ZmMxY2VhOTg4YWRmMWY3YzA5MGIxNDM3MGNlMTY5MzAwYTAwOGE2ODc0NzVjNDY0ZWFiNDYxMWNiZjNlYTU1ODNhOTY3ZWYwYzBlZTJlNyI6IjdmZWQwMzlkOTk4YmJmYTNhZDYyYWFiODZjMTc2ZDZhIjoiIjoiIjoiIjoiZjA5NmY3ZjYzMTg4MmY1ZTVhNmU3MDhkNzE1MzRjMTllZWEyMGE1N2ZjMjEwMTU1ZDQ5ZmU5Yjg3MmIxOGNjMDRhNzNjYjY1MmEwM2VjZmEwYzZkZmJjMTc0ODExZWZkMDg5N2Y0YmQ5MmM5MTZhNWM4MzViZGZiNWUxMjYwNDhmN2MxN2RhZjAwYTg0NWZmMDI0NjQxNDk5MDQ3MDk3ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiOWM4ODA5OWFmNDhmOTA1M2FiZWM0NTViN2JiYjAxNTM2NGZkNTkzYTBmNDAxNzVkOWQ3YjYzMDFkODZiMjU5NjA2ZmJjYTdkZTczY2U2M2EiOiI3OWU1MDFiNzdmOTY3YTY3NmZlMzk4ZWI3YzgxY2RkZSI6IiI6IiI6IiI6ImU4ZDUzYmQxMTlkMjNjYzU3MjQ1YThiOWIyZDExMTgxMWRjNjYxNTU1ZTM4OTE4MGUzNjdlNDFmOGM4MTVhYjRlN2FhZjVhMjM4NDc5MTE3NDAyYmExN2VhNDFjMTEwNGY0NzVlMTFiYjk3Y2RjNDE0NDA5YWM1MTZiM2IyOGI2MmYyODRjN2Q0MDkzOTc1Mjc5ZDNjMzEzMjBjNjEwNjEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiIwM2U3YjQxYzk1ODE4ZWIwYjY2N2JmYThhMTc1YTgyNDY2YTFlNDE3YTliNmI5MmZkMTdlOThjMmU1MGVlMGRiMDBkMjVjMzM2NDQ1MWU5NSI6IjEyNmRkZWQ1ZWIwYmM4MWJlMzdjMTBiY2Q5ZDVmNzkzIjoiZGM1OTZkMTg4ZTIzNDM4MDIyNDBiYzdmNWNjNjA1MTYiOiIxNGM4ZWMxMGY1YmRkZTZiOWU3NTg5OGQ3ZjlmMDNkMCI6IjMxYWE4NDJhZmNjMWRhYTk0MDk4MjQxYTg3ZDZkZGZjIjoiNDczOWIxYmNmODc0MDRhMjI5MDgyOWJkN2E2MWYwYjM5MWE3OTRjNzFjMDU1YzdjYzUxM2IyOGRjYjVmZGM4ODY0NWJjOWNiNDkwZjQxZmFiMTM0YzZiMzNjZTkzMzY1NzE3NjI3NTQzNDM5NjFkZTY3MWIwMmE0Nzk2MGI0YjRlMjNjNWJmYjg3ZGNjMTliMjYwYjNiY2I5MjFhZTMyNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjU4MTAwNDNjYTYzZWY1ZTU3M2UxMThhYmQwOWQ1ZTljYWE4NzNkM2EyYTJhMWM3ZWI1NzQxNjdiYWI1NmU0ZDFhYjVjMTcyNTQyMWJlM2FhIjoiMGVmMDBmZTNlOTEyNmJjNTNkZDYxYjhkMmNiOWEyYTQiOiI0ZTE5ZjAxMDAxZDFmNTUwY2UwZGQwYmQ0Y2QzZTIxNiI6IjY4NDE4MzQyNmZiNmQxMDJmOGUyY2U1NWM1OTliNzQwIjoiMWE4MDcxMGUyNWM3OGNhZmI4MWNjMTE5YWRiMGEyZjkiOiJlYjRjNzA1OTYxMmQwYWI2M2MwZjI4Y2ViN2I4Zjg5NzYwYzNkMmI1MDhmOTg0NDE0MTJiYmUwYWMxMzNjYWZhN2UyOTgxYWMyNzUwMjcyZWJlNTAzNjIyYjQ3N2M2N2U4NjkzMGM5MTk4ZmUyMWY3Mjg4Mzk0YjJlMTFhNTMwMmUzZGIwM2I1OTc4MGM0OTkwN2VmNzIwMTk5ZWExMzYyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiYzI3ZDFhYmM1YWZkMzBhMzAyNWQ0MmJmOWVmZWI4YTZmMjYwODQ3MGRiOWE5MGY4ZWM0YWQyYTEyNmI3OTk0MDJlYzhhMWYyMTBkNzA4ZDEiOiI4MDQwMDQ2MDcwMTJlZDdiNDBmZjBhZDhmNWNhMDg1YyI6ImViMjM5M2RmMGJlMGZmNDcxZDM1NDM0M2M0M2JmMmVhIjoiOTI2MTgzMjBjYWNlNmMwNzVkY2Q2OWE2MzRlNzY2NjYiOiJkYTU0NzM2ZGY1ZDJlMGRhZWY2NjRlOTA1ODY0Y2MxYiI6ImVlZmYzMTcwNTBhYTNiZGE1N2JkZmVmMmQ0NjQwOGIzZmIyZTY0ZDM0ZDQ2OTYyNTRjOWQ4YTA5ZmExYjMyNWJiM2UzYTk3M2VmZTc5MThlYjAzNDg5ODY1ZjVlMTNlOWEyOGEwYmJiNDM4MjJiOWNhM2IyMDljY2FhMWNkNWJmYTUxMzlmZTU5ZTE2MjQ4ZTFmNDY4Zjk0NGEwMjI4Y2QiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMTI4KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiIzZjM0NjgwOTM5YmExMjhjMDdjNWRjNWFhMTYxYTg3MDNhNDU0NDBjYTY4YzhkNWMyYjcwNmU3YWYxMDFhZTRhNjY5YjQ2ZGZhMjYyYWRhMiI6ImU0MjNkZDExY2Y5MmM1Mzc1MDk0OTllYjg5MWVmNWYzIjoiY2QzMmM4OGM1Njg1OGNjNWY2ZDM5MTk5YWJhZjQ1NDMiOiIyYjI0YmM2ZGIxZWNlN2EzMmNmZTU3ZGYzZjZmZjc0YyI6IjNjNmRjNmZiMzUzY2U3ZTEzMWY4ZDA5NjM1NDY1ZDJiIjoiOWRjZTBiNWIzYzgyMDFjOThmNTQ1MDFhZmNlMTU5NWVhYWE2ZTNlNmI4OWFiYjZmNjExMmI1YmQ1ZDFmY2Y1NDliZDEzZTUxZmVlODdmMGFhYjM0NTU3MWNmZTdkN2I2MTA2OTY2MGJkOGNiOGVhMzM0MDZiNjAyNmJhMjhkMDI0NTdlMmJkM2VjYmU4MzY4MjlhNGQ5MTQ4MWZjMGY3NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6Ijk0YjMxYjcxOGJjNDBiMjhjYzVhNjdlYTVlODkxYzE0ZTE2ODNkMGUyNDNjNDg2OGRiN2E2MTNiZWFkZjE0MzM1NTAwMDNkY2VkYmQyMjdjIjoiNWRkMjdhYjNlYTk0YWM1YzA0ZjRmOGMxM2M3NjczNTQiOiJmZTFmYmFhYmU3YTJiZGY0ZmZkY2ZhYzBlN2UyMTRlNCI6ImQ3MWQ5ZjJhNjg4NzY4MWJlZjkxZjVjMWFhY2E1MGI4IjoiMDZjZmM5OTA4NzQzN2FiNzc1NGM1ZDYyNmJhMDcwODMiOiI0MTg2ZjJhOTUxODM3MWQxMjM0NzNhNGM5NmQyM2E0NGM4OWFmOWJhZmUxN2ViMmVhNzAyOTAyYjVhOTU1YTQyYjA1MTg4YjhkYWY3ZWM3YmFlZTM1MmIzNjVmNDZhM2I4ODA4MTBhZjVjOTY3OGRmNTUwM2I1ZTJjZjlkMDI4OTdiZTgxZTQwOTE0NWMwY2RiZmI4Mzk0OWVmMzI3ZjRmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDEyOCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiNmI5MGUwZTE0OTZkZTk3MzUyMzlhYjZlYzI4NzY2NjY5YzY1ZTFhNGJjMGY1YzA0ZTQ0NjM4OGE5MGQ4NmExZjA2MGFkNDM2NjY2MjA0ZmEiOiI5OTQ1NWE1ZGYyYjEzNDEwZGNiOTEyZjM3YzI2NjA5MyI6ImE0N2YyNDVmYTZmMGQ5MjhjMTdlZDg5NTZkMTUzNWE2IjoiYTg4Y2RiZjgyMzYyZjFhMmVhNzhlZjViYmNiZWM3ZjIiOiJlYjhkYThhNDljNDkxN2Q3MWRmN2ZhY2Q4ZTkzOTljNCI6Ijk5YjA5YTBiZjRkMDA1MzlmN2MxZjNjMjhiNjBjZDg2YjQ3YTMzOTYxZGE3YTY0OWU4MTBhOTdjMTM4OGJiZDcxMmM2ZWIwZjdkZjRiNjhjY2NjMDFiMjVkZWZiZWM0MmI2N2Y0YTM0MWMwNDYwZTdiMjBhYjY3YWJiMzRjYzJhM2NlNWI1ZDdkMDZhMTg2ZjQ4ZDk1YTc2MDdiYTA1MTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMTI4KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiIwNTQ3NGNmMWJmYTE1ZTEyYmJlYTdjZmE5ODUyZDE1MmVhMjlmODQ0MjI5MWM2NGE4YzlkZGEyMmNhNjUzZjc1NWQ1YTVmMTI4OTcyZDRhNSI6IjcwZDAwZTM3YTg4YjMwYzQ1MDU4MGVhZWQ1ZDRkNjBiIjoiNjUxZjhhZDZkM2VkMmJmMDQyNjJkYzc5ZWNmMTY0YTMiOiIzZTY5M2RkZjk5M2Q2M2NkNGM5ZDQ2NGYyYzg0YzhhMSI6IjUzZGIwYzBjMTIzNjNiYWI3YjFlZDU3ZDQyMDk5OGFjIjoiNTkwZTc0Nzk1NmU2ZDAxZWFkZDFjOWI3YjEzODdiZmI1YzIwNjkzZGFjODRmNzBlMmMyOTMxNDU5YjNjYTk1MzQzMjVkODRlZWVmMWIyNDVkMTdiOGNkMDU5ZTA1YTNiZjk5OGZmYjUxN2ZlYmEwYjA0NzU1MzYzM2RhZDY0MmU4Y2NlNWM0YjcxMTBiZjU3YWE2NDE2ZWRkMjA0Zjc4MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjdlOWE0NzMyZjU4NDE2MTczOTVlZTA0YWRlMjEzYjgwNzg1ZDJlNGZlZjI2N2Q1MWZlMTM5NzNiNjc1YmZhYzMwNzE2ZDc1M2NmMmY2MjMyIjoiMGU3MjVmNWUyZTNmNWI5Y2I1ZWMzNmM0YTRmOTllMGEiOiIwMjU5MmFiOGU0ZTIwOTY3MzNlNmIzMDBlYWMyNzhjYSI6IjJmM2Y4ZTI1MDRiZmUwMDhhYTFmZWUxMTUwYjQ3ZjA1IjoiMjQ5MTE3N2U4NGUwNmMzYzZiNDgyMzViMjljMzE2YzQiOiJjYTUwZGEwODM5ZGU1NGJkOWZlYzFhNGIxZDZlZGJhMWU2OGI0Nzk3MGFkYzM2ZmJmODhlNzc1N2FmNjk2MmQ5YjhlYWQyNjZmOGFhZDY5NmY5MjBhMWJmYzcwMmQ4Y2E0M2M0NTA0Y2ZhNDJkN2E2MDNhNTVmYTUyNGM2MmZlNDllNjk4ZjIxZWRhNzAyNWM5Yjg0MGVjMWI5Nzk1MDY2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDEyOCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiZmMxNmQ2OWRmNjI1NGE5Yjc3NDNjYTQzYTY0ZTlkMWY1OTg2ZDc3MWI2Y2IwNjlhNjU0ODRmYjQzMTFhODA0NzlhNGQwMGE0MmNlMTZjZDYiOiI4MmZkYmE1ZmI0YzA0YmQ1NTBlYjVhOGUyZTRiMGEzMSI6Ijk5OGIyN2E4ZTMxNGI5OWI0Y2EwNjU5M2JmOWQ0YTE3IjoiYjk3NzA2ZDYwNjhjYmY4ZGYzNWIyOGEyYmNiYTNiNTUiOiJjMjRlMjJjZjQ3OGE2MWYxYWRmNWJlZWNlOTQ3ZTE2YSI6IjI5NTczZDU0ZTgwZTQzNjI1MDI0ZDE0OWU2ZWE1NWNjZTU3MjhiYjQ1NmU4NmI3NTE3NWQzOGFkOTVhZWI0YWU1YzQ3MjcwYWU3NzQzNzRjYTQ0ZTIyMzBjNWQxODYxZmY5NTRmOWZkNDMyYTVlODM2N2FiZTQ5YTg4ZWQ4ZWRhNTA0Yjk5MTc0N2VhOWM0Y2Y0NDhiYTUwNGNiN2RlMTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMTI4KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJlOTE3NTM3ZTUzNGY5NDMzZTQwZjgyNzFhNzk5Zjg1OTUyNGNlOWJiODRhNTNjYWFmOWVlYTk5ODRkOGViZmY3MDFlYjdjNWY2MjcwNzRiZiI6IjY4MjA4OGYzY2U4OWVlNjM1ZjVjOGVjMjVlYThjOGM4IjoiMDg1YTlkMjBhMmQwMTdjNGQzZTU3ZDIwY2JhNTI3MTQiOiJiMDcxMjJjOGVlYjI5OTI5NTg1OGEyZmQxZDNiNjA5OCI6IjE2MzcyNjFiNGIzZTc3NjFiNTkyMzA0OGE0NmQxZWIwIjoiYmU0MDc4NjEzOWFhMzk2NmZjYjg1MTk4ZDg2MWY1MjM5Y2JmODg4NmFlOGU4MTQ1NzEyMTdkZDQ0NTRjODY0NmM0Yzg0Mjg1NThlZTNkODBjNTI5N2FkZDY0ZDZkMWE5OTFjNGZkY2Q3MmNmNDJmODJkNzNhODliOGJkMjM2NGNkMTE5ODIxYjFiZjU0ZjY5YWNkMDFhNzU4NmM1MzkyNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiI4NWVkODYxMWFjNThhZjJkNmI4NzhlYmNhNzQyNTZkM2YyZjIwYTdhNGYxNzQ4MjJkZTZlYThkMGNkMGJkZjE4ZDM5NTc4NWYwNzk3ZDM3MSI6ImYyNjEyMDg1YzVkODMzOGM5Yjc3YjliMWViODA5MmFmIjoiZjQxNDYyOWZlN2FlMGEyMWIyMTFlMDlmYjY2NTEyYjkiOiJiOTQzMTkxZDE4ODJhMzkwMDMyMzM5YmRlZmQxOTM1MSI6IjRhZGFjOTgxNjk5OGNiMTA1ZDFjNGY3Y2QzZDUzNzY0IjoiZGQ3OTQyNmY2MWU4MWQ4NjU2MWE5ODg1M2I3ZTE4N2VmZjdkYjNlODk1ODk0NGNjMTBhNzRlN2IxMmRiM2IwOGJiNDQzNmJmNjQ2OTRjNWI4YmYxODU3ZTc5MWFlNzE5NDU1NGFlZjZiNDhkMmIzM2FkNjg1NGJkMmU5NzcxYmJlYTNlMDhjMmMwODNhODJjYjA3ZDcyNDJjZTIyZGIyZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiI2NjUyYjFjMDQwM2VmMTY0MTZkYjg4ZTQ5NDU2MTE5MTE1ZDM5MDFjZDdkY2UzNDNjNzE4MzI0MjIyMDk0YzI1ZDg1YzMzODU3ZGFmNWIyOCI6ImE1ODA2MTNkYThmZjdiMDY1ODBkYjlhNDJiYzBjZGJiIjoiOTIzMDE0MDM5Y2QxMTdmOTI0OTAwY2QzMzA2MDdkMGQiOiI4YjQyZjkzZDJjY2RmZWEyNzJmN2EwM2JmMzdiODMxZCI6IjI4Y2U5NzY2OGQ2Y2M5MmRhOGVlMjUwNzdjYjI1ZGU5IjoiZDMxZGQ1OTIzN2IzYzhiMjg4NTgzODg0MDI2MTcyN2FjMTE2YmFlNjczYjU1NGZlOWM4YjBjNjRiMTU3M2EyNWJjNGExNGMxOTQyZDgwNTYzZmI0MTY1YzU3ZTFhZWY1Yzk0YzFmNmIxZjg4ZWM2YmIyYmJjMTBjY2Q4MTQ5ZDE3NWU0OTY1ZDA3MzQxYWJhMDZhOTQyNmRmMGQwZmVlMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJmMjk3MTg2YWFiNGY2M2Y2ZmI4NWM0ZjI5ZDY1OWQ2ZTQ4ZmFiMjAwNDI0ZDY3ZGQ1MmZjYWNmZTcyNWFkNjVjMGE0N2RlMjU2OTBjMGFjNSI6Ijk0MTRmNzAyZmQwNTBmN2VkYjlhNjQ4Y2Q4MzNmOGM5IjoiOTFkNWViNzk2MmVjMTA1MTAwNDA0MWY1ZDIzZmZjMzQiOiI5NGFmYzcwMjM2NTBjMmVkY2Q4Yzk1N2UzMjBiMDRmMCI6ImI2Yjc5ZGY4Mjc4MDI5NzI2MWUwMGVmMDUzODliNjkzIjoiZWJiZGRlOTA0MzUwYzZkODAzZmUyNThhM2FhN2E2MzYyMmYyZTk1NDBmMDNiMWNmNjg3ZTIwZWYzNWZjNWJhNmI2MTYyNTQ3MTBjZDQ1MTVlYWY2OWFiZmJhMGJhNzc4Yjg3ZTRjZTFmOWYxZmVmMzQ0MDJjNmU4ZDIzZWZiZGViN2RhNTNhM2RiNzMzZTY5NTI3ZDM2ZjI0MDAwMjUxYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiI5MDg5OWQyZGE5Nzc1OWNjNjA5Zjk1NmY1ZjM5MWEwZWRiYjQyMmY0NWFmYTBjNzI3NGEyZWY1ZGE2MzZmZWM3MGM2ZDkyNmIyNjcwYjg4ZCI6IjIzMjYxYzBlNzIyNmQ3NDlhMGQ3ZDAxNjZlOTJkYWU5IjoiOGVhMmU0MTE4MjdjNWQ4YjU0YjI0ZGE4YWI0MWE4NDEiOiJiOWVlMWM5OTIzMjQwNTIzZTdlNDc0NWVmOTM1ODFiYiI6ImJiMGY3ODU5NzJjZjY4MjIyYTVlZmY0YzdkZDNlMjhlIjoiMmFmMzViMWZiYTBjNjJhYWU5OTFjMTJkNTBjODZjZTJjYzYzMzIyNGIxNThiMTU3NDU5YzQxYTU0NDQwNzJlOTE4YjRjNzc3YmZjODRmODAwMGFhMjM4YTQ2YzVkNTI1ODA1Nzg2NmYyNDg0OTcxZDI3MDhjMzM0OTcxOTFhMjY4NmY4ZWU5ZTM2NTc2MTZlMDBkZmNhNjFlMGZmYjhmZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiI0ZTgyMjdlODQyMmQ2NzRjZGI3OWU1MmNjMzBiN2I4NGY4MWNjMDViMDMzMzk3MDRkYmEzZTczMWZjODE5NDllNjc5YTQyNTdjNWZkNjhhNyI6IjJkNmU0YWYwMmFjYWYyMzBiZjc0NjE1N2VjNjI0YmE3IjoiZGVlYmIzNjhhNzljMTc4ODUyOGI1ODkwNTZiMTE5NGIiOiIxZGJiYzdhMTMxZTk4MzQ0ZmQ3NDhlZGM2ZmVjMTFhMCI6IjAyNjZlOGEwNjZkY2FiYWY2OTkxYzdhOTFlMWM2ZTU2IjoiZTUxZmM4MzNhNjBiMDk5ZTU2OTk2YTY2ODIwMzY4ZjUzMzI4MjJjOGY5ZGZmZTg0NTljODBkMjUxMmQ0NTFlMTY2OWVjZjZlNTYyYTFjMjk1ZmE2OTgxZmE2NTFmZGQzZDhkOTM2YzE4Zjg4ZDU4NDQzOTNhMmEzNzFhYWFjOGY0ODVjZmU5MjkyNmYxYTU0OTgwNTAwZWRjNDNhMGE2YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiMDllZmZhMzkwNmE1ZTkzZDA1NTMwZWRjNzFlNjJiMzljNWU0ZGEwMjA1MzcxNzZjMjM4MjNkYTUyZGJkYmFlODMwNzY1NmNkYWY4Zjg2MTQ3MWRiYTE0NTMzYzg4MDUwNTg3NDA5ODkxN2UzMzhmMjBlZjhkOGExIjoiIjoiIjoiIjoiIjoiZDVkZThhMzM4OGIxMWU0NTA4NWY2ZDlhMDA5NDYyOTQ3NjMxYzRlNzQ1MjMwODBjY2QwM2EwMTk2YWE1NmI2M2E5M2EyOTM5ZjQ5MGU5NDU2ZTlmY2UzZTkwMDBlNTgxOTA5OTFiOWFlZDZkMTQ1YWMxOGY2NWNmMmIxYzE3ZWIwMjFhY2M1MjU2ZWI2YTdlOTAyM2Y2MmFlZDg3ZDE1ZWE0ZTRiMzI4ZjI2NWNjMzRhZGJjMDYyZDU0NTI0MzY1Y2M5YzUwNzNhODM3MWYzNWRjMmY0NTllMWQwMjc1MTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjI5YTcwNzFlNjg2OTM2ZTYwYzM5MjA2MWY3MWI2ODUwMGRkNmYxMWM1NjM3MzJmY2E5ZGVjM2IyZjg1OWUwNmE4NTdmZDk0ZTNjYTE4MTc4NzJkOTRjMmI3YzJmMjgzYTBkMmQxMmE2NDQzZTk1ZjdlNzAwYTkxMCI6IiI6IiI6IiI6IiI6IjcyYzBmM2NiNzc5MmJmZWJiYzFlZTZmNjVkNDBkMTE4YTZhMWM0ZTA0ZTU4OWM4ZjcwMjczYjRjN2I3MThjOWRmMzgzNjU4NTcyYjg5NDgzOGEzMTFmYzBhYTJhYTYyNTg3NThiMzM3ODNlMTkyYjBjM2MxZDMyMjgwOTM3NWRjOTI1YTA1NjA1ZmVkOGM3ZThmYjg3OGZiNjNjODRjZTYzOWZkMjc3ZDk5NTVmOTE2MDJhOWY0Nzc3YjdjM2IxNTQwNGM0ZTc2MWVjOGQ0NjY2NzRlMzIxMzZjN2I4YmRiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJhYmQzZGFmYzg1YjIzMDI1NzkyYmNkYWY5ZjQxMDgyOWQzMjAxYzFlOGNhNDUwZTIxN2UxM2VjMmUzYjc0NGU4YzU0MTA3MTc0YTZlNjlhZDA1ZjY0M2VlNWNlYzQ5Y2Q0N2VhODhjODBiOTZhMDk0NDE1NGI0NTgiOiIiOiIiOiIiOiIiOiIxNTIzMzNlMTZiMDQyODNkZmI4YzQzZGJiM2JlNDNiNWRiMmVjNDlhMzk5ZmFjYjY1Y2ViZGY3Y2EzZWQyNjc3OTJiYTMwOGNkYjA2NDliMGMxOWNiMTEyNmIxNDRkNTc2NmI1YWZlY2E5ODAzNmExZjg1Y2QyY2ZlM2I4MDcxMDExYjY5YjJhZWMzODJmODU2MmQ5ZGQ0MzMxYTU1NGYzYTNlZTYzMmNmZjMwODQ4OGIzMGE3NDE2YmU4YmJkZWU3ZTI1MGNkMTJmMzcxZDA2OWEwOTdlOWVhYzQzMDMxYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiY2FhMjg2YzE2MGQyMmFmMTA5MjJlZTYwODhjMjY5ZDBjOTYzMDM0ZTVmZDJhODVkMmZjMTcxZDBjNGJhMDgzM2I2MzBhNjRhYjA5OTY1ZjEzMmE3NDQ2NTY2MzFiZjJkZDI3NDMwYzdjMmQxZTU5Y2RjZjQzYTk3IjoiIjoiIjoiIjoiIjoiNGQ2MTMyYjljZTcwNDcwZGQzNmY1NTE1ODRhZGE2MzllNzRiODVmYjliZDNjM2UzNTAwMTFkOTlmMmRjMDM3MWY4NzRlNmI5ZDkyZWJhM2ZjZWFmZTM0ZTU3NGMxNDQxZDBkNDc2YzQ3NWI3MDQ3NTVhMjg3MzNlMzE2Mzc5NjJjYWU2N2U4NDliZWQxOGQ3NzUwMTM4M2NkYmMyN2FiNmY2MGQ1ZDhkMjY2MzRlZjM5ZTJjNjBmY2JiMDRhOWJkZGE4YmNmYjliMmQzYWVlYzEyYTIxMjc5ZWQ1NTMzNDMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImY3OTE1NmEyMzIxYmE5MzBlMTUxMDk1MDFlYWQ4MGEzYjI2YzE3NDdiN2E5YWViOTIyZDFhOWQ0NzRkZjY0YTFmYzM0ODNmMTBlODhhN2ZjZGRlOTFkYzA2OTQwYzU4YmY0ZDc0N2I1YTljZDhjYWQyYzJlOTg3MCI6IiI6IiI6IiI6IiI6IjFiM2FlYWZmOTczYjJlMjBjZWU5NDdmZjI4MzI3Nzk5MTg0MmEyMmY0NWNjZTlkMjJjMTcwNWRhYTUxYTU2YWI0M2FhYWUxYjUxYmFkN2E3MzYzZWRjN2I1NDhhMGNlYzZiMzc2YjkyNWE2ZTM1YmM3ZGMzYjRhMzNhN2YzYjU3ZDY2YjFiMzUyNTY5MDhiZDJkOGYwNDk1Y2FmMjUzOWJhNDQ3NWQ3NjZjMjFjMmMyZTRhY2ZmODdmZWZiMDdjNjYyZWIzNDRkOWM5OWVkNDA3MTY1ZjhhMDlhMjI4MTZhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiIyZGZlYjcwZmM0MzM0MjZlMjMzNzhkMDQ4YjgzNmY4OTljYmZmNTJkNGE5MmM2ZDdkMjE4ZTNhYTU0YzA2NzkzMzM5YTc1MmY4NmYwM2I3ZmNmODliZWY3MjUzMzlmMTZhYjFjZDI4ZWM4NWMyMDU5NGJiZGYzYmUiOiIiOiIiOiIiOiIiOiJkNDAzZGQ4YTZmM2E5MTQ5MzMyNTNkYjljZDA0MzQyMWU1NDI0M2EzNDA0M2Y1ZWUxMWEzYjZhNjI3ZTI1ZDk0NDQzNGVhYzIyYTAwMTcyY2FhNjA3ZWJmN2RlNTViNGM0MzA1YzJiOTM0MjhkNWZiNGNmMGE2NDk0NTFlYzdmYzVkYTY1YzQ4OTRjZjRkMmYzZDUyZTkwOTkzNTQ0MjM3ZTVjNTg3NDU0NDFjOWNiMmUwNDc1MTNmZjgxZDljZjk4MGQ4YjEyNzY5YzIxY2M4YzA2ZjZkNTgzYjhiZTNkZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiMmM2YmE5ODdiYjYxYzQxMzExMzhiYjhhY2Q4Nzc3NjNjMmM3ZTFmODYyODlhODFiNmI1NGQxZDhiMzk5YjVhNWFjNzE3MWMwYzljMGI1OTQzYmQ3ZjU0YmY3MmIyMDMwNzgzNGU5NzFiYjYzN2IzNTFhNzU2ODIzIjoiIjoiIjoiIjoiIjoiN2ZmMDFkZWY4NDYyNjgyNWZjMjJhNjJjZmUyOGY1Zjk1NDAzYmIyNjE4ZWZmMjI1MjliNjUzMWFhZjEwMzIxMDA5NDRkNWY5NzAzNDk2ZDE2NWM1NzU2YzBhYWM1NWIxODEyYTcyOTQwYWE1MzE3ZmI2YTI5NDRkMTI0ZTdmNjU3NjZmMjMxYjZiZGEwNjEwMGM1YWQwZDFiMzdjNDg4ZTBlOWYxMWE2ZDhmN2U0Y2Y3MzM3ZTA0ZDA5NGVhOWRlMmRiMWJiZWNmNDBlMGNjOGQxZmMxY2Y1YTAxY2QwODEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImJhMDhhY2MzYTAwYjliNDBkMmJhZDhjY2E0OTA5ZDNiYmVjNTQ3MWY3OGQwYmY4OWE4MDVkODM5YjhiMjlmYjc1M2M5ZTVkMzY3NDM2NWE3MDU1YTE4N2EyMzhlYTFjZDA0ZjQ4MmQyNGQ4NTZiNjdlYjU0ZDcxYSI6IiI6IiI6IiI6IiI6IjllYzZhZDg0MDI3MDA1MTMxM2M1ODI1Mjk1YTZmNzUyN2E4YjFiOWIzZTdjODY3ZTU2NDJhOTg0YjExOTExYmU2MDYxNGU1NzM3ZDNhMGQxMDllZWE0MjIzZjBkMmVlNjNjYjE5YmU3MDIyOTFhNzcxYjJlMmMyNzdmMmQ0NTU5MTc2ZmM1YWRjY2VhNTI0OTJlM2QzYmE3ZDE3YmFkNWI1ZjQ4N2Q3ODM2Mzk0Njc5OTdkNzY2OGNlMjE3M2VmNzc3ZjllMzFkYmVjYjZlZTcxNmI1Y2VkYzhiYzUwOThhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiI5NTQxMzM0NTIyOGVhZGI4NWI2NzY3NGI5OTgxYWYzNGJkNmE0YWUwNDg2NjIyOTkyMWJlOTI4YzA2ZTZhNmE2ZmRlOGQzMWE2YTg4ZjI0ZDZhMTExNGNjYmUwOGRlZDlkN2M1MGMzMzYwYmNiODkwOGE2MTUzODEiOiIiOiIiOiIiOiIiOiJkNGRjMDhlMzZmOTRlODhmOGJmYjE5MTljMTMxODYxMzk1OTFlZGM2ODFhZmZiNjFjNDIxZDMyZGZkYTY5ZTUwN2Q1OTQ5NWJjYWRkMzliNzNjNDAzNmVmNDQwZGM1OThlMzM5NDczY2FiYTYwZTA3NzBhYzQ3MjkyNjRiMWRiZmRhZjMyY2E2ZDEzNmVmNjgxMGE2NjYwZmE1Y2JhYzkxOTQwYTI4MDUzYzBmYTQwNWM3YjZjYTVlM2YxNDdiNWUwMDk2ZjM2YjY3ZGE5ZmNlNjQyNDdjZmRhYWQ3MGZjMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiOWI2YmI5NTg5ZjQxZThlZDY5NjlkYmYxYTNiM2QyNDJkZDVlMTMzNzExZjcyNTQ5MzM0Yzc0MTkwZTRlZmIxZDA0NTIwMTZlZDRmZmZjYTk1NjFhYWYyMTllNjc5M2JmYjZmZDNkZDk1MDBiZDYxZTZhNjJkYjY2IjoiIjoiIjoiIjoiIjoiY2VlMDJlNGZlMDk4MGFmZTZjY2JiMWIwZDgwMDQxYmE5ODQxNDYxMzk3NDk0ZjBmYWU1MTg4MjI4ZmJlOTgyMmUzZmZjNTM5N2I3Y2FhMjk5NTBkOTU1MzZlNzAwMGUxMjQ5ZTViYjkzYTU5M2U2NTlhNDk2ODlhZGQxNmQyZjVlMDJmZjI1MWM3NjcxNmRjNDI2MDEwYzI5NjFhMTc2YmQ2M2MyOTM5N2Y2ZTM2Y2Q0ZGUyZjJiMTFlMTI2MGI5ZjlhMDBiZDQ5YjRiNjYxN2ZiMDU2YjgyYzkyYzQ3MWQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJmMjc2YmEwZGEwODI3NGEwODJmM2I4YWQ5ODlhNzEzOTA4ODczYjc0MmY5NmJiYmY4YzgxYjRlMWE3ZTQ4NTdiYzk5YWVjZWFiZTUzNGM0NTEwNTMwNmIxNDg2MDg4M2NkNTZmMjQzOGE3ODEyYjQzZjBkOTExZjciOiIiOiIiOiIiOiIiOiIyNGRkM2VlYTlhOGUxZjk5MjllYmJiYzJhNjgzNzljYWVjNzdmYjQyNTMxYTk3ZjdmM2E3NWQxNmFkMDUzNzk5ZmZjMjVjYWNlNGY0NTUzYzI3MWFlMzYwZWNhMWY1MTMxZWY4N2JmMDM5MGIyNjc4NTg4MGRiMGQ5MmJiMzUxZTZlMjI0MDlkNjAwZjZkYWI1Y2JiMjI3OGI4Nzg0ZTY3YTQwYmU0ZDhlYTZkOTk0MTE1YzY3YjcyMjRkNzIxZDFiM2M3ZmM1YjI0ZTE1Zjk3ZWIzYmJlMzM3OThkMWJiOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImZhNWVkOTE4OWYyMWQ3ZTk0NzY0YmRkZWZmMjMwNTAxMTI4NjhjZmUzNTIyMGI4NjNlODExMmY2OTFjNTdlNmQ2YzRhOTFjNzUyYzVmMGIzN2I5N2Q1ZjNlMzgzNDgwMDU0ODc3ZjMxOWE1NjhiMDY0ZTY1NjJhNCI6IiI6IiI6IiI6IiI6IjU1ZWI1ZWYxMjQ4YjVhMzRjNzQxZjIwNzZlYTVkNTY4ZGE2MzBjZTQ3MjBiN2UyYzg2YTlkZDUzNWI0OGZhZWNlMjIyOTg2NmEzNjAyNGZkNDExNDI0OWJlNDczMGU1NTRiNzcyZDU1N2NlM2Y4YjlkNGQ4NmQ5MTIwMjU4MjIxM2E2NzZhMDc2Yjg3Zjk0MTM1MWM3NjA2YTQ1MjgxNmRiNWQwZjgxOTQ4MjVkNDAyZDJmZTdlYmIyODE1NTMyMDkxYjM4MzBhOTYxNjkxOGJiMGUzMjk4ZmFmMDM3YmY2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiZDBjNTAwM2E2MTY4MTYzZjcwN2IyNTE5MWI1MTIxMWRjMWFlMzYxZGYxZTA2OWQwZjI4NGY2Njk2N2FjYTQxOTk4MDlkYzg5MzY4MTY0MjEzYWUxNzI4NTY3NGU1NTc0ODUxNTgyMzcyZmNhZThjZDI3MzNiZjRhIjoiIjoiIjoiIjoiIjoiMjQ5MTBlMWE5MzA0NDcxZDA1M2FmNDU4YmMzZmRlZjUyN2U4Nzk2ZTMzMTMzZjVhZjAwNTEwNmIyMDNlOGZkZWZiMjc0ZjFjMGU4ZmY0NGU5MmM2M2JlZjMwODJjNmU1NjA3YTc5ODFhNjA3NmYxYTFkMTUzNjhmNDMzMGM3MDEyNTA5ZDVmNjFiNDM0OTIyNGE4Nzk2MGJjZTk4NzM3MjUxNDVmMTg3YWE5MzEzOTRjNDQ5ZjUwMmQxMmI2MDY1NWEwYWIyYTIyMTEzNGE1MTc4NmMzNjgzZjlmZmEyYjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJiZjViNWQxYzg5MWY3YTZmMmRkM2Y0ZDQ4NmQ2OTNmYmY2N2Y0OTU4NGI3ZjA1M2FhOTZkZGFjZDlmYzBjZGVhMGZhYjgyMDlkOGY0MzM1ODIwY2U2OGJmYTA0ODk5YjYzY2RhMTUyNDJlOWNkM2Y3YWNiMWYxMDMiOiIiOiIiOiIiOiIiOiI3MTBjOGIzM2FiMDM0YjUwYTI5ZGU2NTdiOTNmM2M3MWRmNDcyN2E1MjE5YTQ3NDM1MGM4OGI0ZTM5NzRmZmQwZDM0NTJlOGM0ZDI2ZjU3OWUzNDhmMzljZmUwZDIwMDQ1YTcwYTg2NmM1ZTE2YTBjMjJhYTBkNjliNzM5Zjc0Y2JlOGIwNDZiYzE0Y2Y4MmI4NjQ5ODQ2MGJmYjI2YWYwNzcxMzcxYzI3NTBmN2M1OTMyMGM2ZjZmZTFkMDRjZmI0MGMwNDg2ODZiNmMxYjY5ZGM2NDFiODk1N2MyYzM0MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjUyNTYxNTE2NGRjZTBkYWM1Mzk3YjM1NzU0NmFhZDA0OWRiZTU5ODJkYTJjMjE1YTIzMzU1NzU1MzQ2MGY4NTA1YTNlN2M4MjI0YWY1NjExOTAwOTllZTIxYTA2ZDYyZjlmMDBlMjgyYjMyYjQ4NmU4ZDBlMzM4ZiI6IiI6IiI6IiI6IiI6IjNmZTk2YzliMTBjNGM4ZTQzY2YzY2Q3NmNlZDRhZDg1YWU1NzZmMzJlYTY2NzFlZjI4NGY3Yzk3NDkxYjcyMTUyYTE4YTEwNjAxNDVlNGY1ZTdjMGMzNzNjMzk2Y2I0YzhjMGI2ZDYyNWMxZjBkMmFlOTViMDY5MWNiMWM4MGEzZGQ1ZWFhMjE2MzJhODJhYWEyOGUwOWEyYmJkZWZmN2ZkODgxMmZhZTQ2ZGVhZTE0YmJiMTZkYTI0ZDA2ODc4ZmM0MTdiMzU1NGZiNDdiMGVmOWZlMThkMWI5ZDRmNGNhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImNhODE5NTNkNTA0MzBiZmIwOTUzN2EzMThhMWE3YjkwYTkyMDAwNzdhYmI3MjFlNTVkOWFjMjg5NDZmYmY3NWQ5Y2ViYzgxZjExY2Y2ZDRkYjcxMmEzYjkxZDQ3OWUwMGJhMzBkNzM2YTc2M2NiZmU0MGI5MTQ0OCI6IiI6ImU1MGFhOGJlYzk2MzM5Y2YyNjA4YmI4MmNmMDM4ZDVmZDZiZjkzZTY1MjcxY2I3MiI6IjVjNWVlZDBkOThjN2ZjN2ViMzBhY2RkZmVlMDAyZDViOTljOTY1OTQ5ZDRlMjA5NSI6ImExYTdjYmM3OWJmYWY0NTcxY2Q4MDIwZGEwOTQxMThkMjQxYjNmMDE4ZWM4MjNiYSI6ImM4YjdkOWMxNTYyNGFlMDE4YTg2MTJlZGY2NDQ0MzU0YzQ1YzZhNzg4MjcyMjgxYzE2NTI2YzY4OWEzZGFjMzY2NzllNDRkODljNGFjZDdlYjU4ZmY0MGE1NzdjM2QxYTlmNGQwMTc1ZmVlZjlhYzU2NzRjMTE1ZDVlNGNkMTdmMjM2OWUwMTM1ZTMzYjAxOGJkYzk5ZTQwOTk3MTNhY2U5ODZhMTQ1ZWY1NWU4NjhmNzQ4NDZmZWIzNTkyZDQ0Y2EzZWJiYTYwNDRhOTI4ZTkyODRiNWVhNzUwNjNhZTgxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImI5NmNhMTIwMmZhOTU5ZWY1NWE2ODNhOTAyMTA2OGUxNGM3NTM3NmUxNWQxZjAzOTRiMWMwOTFhOGI2ZGQ2Yjk4YjZmNjM3NDdkYWU1OGMyOTE4NjE3OWI0MTU1Yjg2OGY1YTgxY2EyMDZhNTA4NmE1NzU5YjAyNSI6IiI6ImEzNTA5NjA4NmMxZmRlYjFmYjYwZGQ4NGZhNzMwZWNjZWRkNTNlNWIxMjdlZWNmOSI6ImEzMjY5ZmE3NDllNTU4NTBkNGFhOWU0NjZiY2VkMGJlYWIyZWRmODZiOTI2YzJhZSI6IjI5ZjY3OTlmN2M3OGZkZmEyZDBkYmRkZTgzODFhZWM1YWYyNDk1NTY5MDNmNjMxMyI6ImM2M2VhNzNlMWRkYzlkNTViZDY0YTYzY2Y3M2Y3MzAxMzZhYjRmNmQ2ODhhOWNkNTZiOTQ1Zjk4NzVlZjRmZjQ4Y2RiZGQ4Yjc4Yjg5ODQ4NmE2ODVkOGFmOGNjY2JjMmE4MzRhOTgwNGU1NjZlZTcxMzhjN2RiZjQ4OGQyNjNmYmQzODcwNDFmODM1ZWE0NmFkMjdjYmQ2NjcyMTQyOGVkNTc5NWY2ZWQwNDRjZGIxN2M4ZTdlM2VjYmY2MWRkNjgyMzllOGZkNjQ0YWU4NTc3NjA1MGFmYmFhMDZjYWY3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjU5YWYxMjEzY2ZjYWVlYTI5ZTMxNDAwYWI2YjMwZjEwOGQ0YTlhNzdkM2IzNzA5NzJkMjkwMzJjZGM2MTJiN2MzNjBjNDFmMTZiMGM5ZDc5NDIxOTMwMGZlMDU1MWUwZTY2ZDYzNGE0ZWVjMzk2YzUwZWM5NjA0YyI6IiI6IjY2ZWQ5MzUyYmVkNzMyMjRkMzU1MDg3NTRhYWI2OGZjZWExMGFhYzA2ZDYwZTg4OCI6IjE5OGEzNTI2YTY3YTBjZTMxYWQwMzQ4YmJkZmVjZWRlNGY4MmQ0MjAzZDFkNWNhMSI6IjAzZmFhMmY0YzM0NTc3Y2Q4YjJlZDUzZTEwYzY4YzgzYzFlYmM4ZDg3NzM3OTE3OCI6IjVlMjRmMWE5MDgzZjEzMjc0ZWQxMDIwYWI2OTM1MjIyY2NhNjQ0ZDA5MjA4MzljMmIxNDJlMjc4MDk4MzIwNDQ1M2QyZTZjNTg1MThjYjM1MTE4OGJjM2U1ZTNiNjQwMTU4ODIxMzBkNzQ1NTExZjAwNGNmYjZiNjQ4MzExMzllMDFhZTViYmE2NGI3NGYxYTFlZGU3ZTIyMGE2ZDI5YjEwNjdkN2M2OGJhMzU0M2Y0ZGRhMmZjOTdhM2RkMjM1OTBjMmMxOGI4NTY2MjYxODQ2MmJhMmMwNTIzMTUzNGI2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImU2Y2M5NGM3MmYzNzk5OWYyOGI1ZmUzNTBiZmY2MjJiNDMzYWUxOTExMTc4NmM3NDdkOTU0YWRhZWNiYTQ3YWJhY2ZlYThjZGY1ZWFiMDVlMmY3NTBjMGE2NzljZmI5YzJjMmMwNzE0NjExNzhhMDU0YWY0MDk2NyI6IiI6IjMwMzI1Mjg3MDNkZDY2ZTQyYzdiNmI1ODgxNDgzZWNhNDFlOWVlYTUwMzg1MmVkYSI6ImNlOGMwM2IwYTA1OTgyY2VhZGI1MTZiMWZlNTEzZGEyNDAzYTllNmRjZDdhMzlmMCI6IjNmN2NjYjU1Mzc2ZjIzZGZhYzFkYzEzYmU2MTc4OTQ5MzFmOWMxM2QxNWZkM2RjYiI6IjU1ODY1NmNhZDdkYTJhZDg3YTdhMjllYzVlNjEyYWRkY2NhOTZkNzJhYzdiMjI0Y2RlODBjZTM4NmM2ZWZkYTEyMTEzZmU5YWE4ZTUxMTcxNGE0MmVkYWI1M2VhMDI4OWM3NWQzNGI0MmYyMzEzYWMzNjZmNTFmNWRkM2Y2OTY4YmJkNGMwOWViZjg0MGRmZDAzODUyZGVkYzFlM2I2MjA5ZDkzMjg4OWNiMDQwNjJjNjQ0NDgyMTA2Y2Y4YjdhMjM3ZDI5Mzc4NDBmMGM0ZDc1MmQ1MjcyNWI1NTkwZDE1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImNkNGRjYzhmYjUwNjcyNjExZjE5ZTBjYzhhZGNmOTI4NWY5ZDc2ZTdlMjhiY2FjMzRlOTMxMTYzZjgwNTdiOWY4NjQyNGU1ZDUxNGExM2MwYTI1YmJiNDllZTQ4NTUwMWVjNWUyMTA2MWUwMDZhZDE1NjlkMjYxMCI6IiI6IjI0NDgwMDk0YTQ0MDY3Yjg2ZWY0N2RiMzhlYzNlNjI5MTQzNTExOTYzNThiZDlkNyI6ImM2YWMzYjg3OWFkYjZjMTUwYThlZTQ0NDI4YzMzMzU3NGVkOWIwZDY4MDY4NDhkOCI6IjkyYmRjMTUxNGQ4N2RhYWEzMjE2NTVkNTZjNjMwMjg3OGMyYmRlMzc3MDAxNjNlOCI6IjIxYzUxYTE1NjhhYWZiNTZhZjFmZDQyNGY2ZmExNDYxMTNkMTRkNmQ2M2UxYTI0ZTMxNjgxMzBlYmMxMGRkODQ5MjViYzQwNzdjNDE4OTdhYThiM2M3M2FlYjViY2YzOTJkNDk2ZGVkY2I2NDg3Mzc5YmZiM2UxMmJjMDdmY2Y1YzE5NmQ1OWZjYzFmYTczMGU1NWMwMGVkYWEyYmNhN2IxZTMyYTQwYmEwNjUwMGVkM2RkN2ZjYWIzNjE5OTUzMTk5NzlhMGZhOWNkYzQwNmE0ZDIwNjUwODE0ZThiZmFjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImZkY2EwMDM5ZTg0ODVhMDZlNmE5YWZiZGU1YjA3YTFiYmU0OWUxMzY1OWEyMTY0MDM0Mjg5NjM5ZDIzZGNmM2Y5ODc0YjhmYjFhMWFmODQ5NWI2YjIxMjliODg0NzVjYzUyOWM5NjI3MWJjMWJiYjVjN2MyZWEwMyI6IiI6Ijg0MWY3NjVlZDVmMDBiZTgzOGEyNzA3MzBjZTU5MjY2NTljZDdjZDlkNWI5M2NhNSI6IjgyNWZhMTNlZDU1NDk3Mzc2OGFhYjU1OTE3Y2M4ODAxODNjM2ViYjMzYTUzMjMwNSI6IjczNmU5ZGU5MzExOThkZDFjNWYxOGE3ZGEzODg3ZjY4NWZiZmEyMmIxZDZhYjYzOCI6ImRkODU5NmE2Mjg0N2E3N2RhODE4MThkYmJlYWYwMzkzYmQ1ZTEzNTA2OWJhMTY5Zjg5ODdmMDFkYzc1NjY4OTM0MmNiYTYxZDg3YTc5ZDRiY2UyMzExNzkwMDY5ZDEwNzA5YzNhNTNkZjk3NGM3ZDY3OTNhZTEyOTgyNTNmMTNlY2RiYjU2ODA5Mjg1NzliNzNkNzNhZmRjZDI0YTcwM2RjOWIzOTFmMzAzZDg4MzViYTExMjljM2Q0NjIzN2VkZTVlNDQ3MzJhNzRmOGYyM2I2MGEzYTQ1Y2U0MmYwNDJhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImUyNDZlM2Y5NWQ4OWMxNjY3NjhhYWM2OWZjOTVmYjQ5ZWVjNDlhYTYzM2FkYjkzOGNlMTcwNWI2ODk4N2FlYjBmYWU3ZjU3YjdlOTllNGYzZTNlMWIxZGIyZDFmZWRmNDQzYmQyNjE4ZTk1MTkzY2VmZDkwNWUxZCI6IiI6IjEzMDcwMWY4OGNjMWU3NTQ1OTgwZTZjNmY2Y2M3NmIwMzM2ZjA4OWJiNjZjYzM0NyI6Ijk1NTMzZjRjYzI0N2M4ODdkNmE3Y2MwY2E3NTMwMDliZjAzNGJhOTViN2IxZDNiMiI6IjQ2NGZkMTZmMDExZWIyOTg2ZDk5ODI4NzlkNzkzNDlhM2NlNGY1OTA1YmJmZTgzMiI6IjBkNGU2YjAzYWY3YTY0ODMzN2FiZWMyZWZhNTg1OTA4YWY0MGU4OGQxZjEwNGIzZThjMzUyYWEyOWFjNzlmZThlNDQ4ZjM2YjBkZmQ3MDFhMWZjMGYxZDg2ZGNhYjdlOGE4ZWNhZGE2YmEyMThkOWFhZWExYzQwYWE0NDJjYTUxZjMxMTZjZWQzYzliOGJhNzU0NjY4OGVkNGYzYTEzNzhmNzZiOGEyOWVjNzYzNzg0ZmM4MjkwNmRjMGY2ODhjNWU2MGQ1OWU2ZDUyODRmY2Q5NmYzNjFiYzViMjg1NDY1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImNiMDQwNWU1ODI3MGNlY2IzNGE5OTUxYWRlYjY5NGM1NTEzYzQ5OWNmMzEwZjZhOTk5ODVkNGZiMzk3MzQ2M2U5MDc3MDU3NDBlMDFhZWQ0Y2EyMjFkNGIwM2VmMzBlNjlmZDhkYmZiNGVhOTE5YTkxMzgwMGExYSI6IiI6IjBiNTdlNjg4NDcyZTlhMDViYWEzOTIwNDE3YTJlOGY5YTljMTI1NTVmZDBhYmMwMCI6ImNhYzA1Zjc5ZDk4MzdjOTdiYjM5Zjc1MTc5MjYyNDk4M2MzOTdmZDI4OGRkMWQ5NSI6IjM0NGQyYWEyYjNiYWQxNDg1NDI5YjY2NjA2YmYyMTVhY2IwYTY1YmYyYTMxOGY2ZCI6ImIyYTEzZDc1YWQzODk1MTQxNDk3NjMxOTlkNzExMDkyYTliMGU0ZjFlNTA4MDkzNTVjZmVmYzE4ODRhOTRmNGQ0YTUwYWM1YzVkYTBiNGU5YmQ3NTM3ZTQxM2JiNDUxZmRkMmZhNzdmMWY4OTQ0NDRjYjVjODFlNGM0Mzk3OGViZmQ5NjkwMGEyYzg5ODZjODg1ZDBmYWY4OWEyYWQ1YzZlZjkyMmRmYmExYjUyMTliMGYzYzRhYzIwOTUzNDBjM2I4YmYwZGIwMzcxNzFiNjU0NTc0MWM3NjIxN2IyYWE1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImUzOGVhNzU4NGZlYTMxZTQ4YWIwODVjNDRmNDZiNGNmNjhmZjI0YjRhNmIwYjI1ODY3NDYzZTRhNDZkZGM5YTRkZTIzZjcyNzJhZjFlOWM0ZTAzOTFhYTk0OTFjZTdjZGI1Zjk2MjkyZTBkNjVjYjlhOWE0YTNjYyI6IiI6ImFmZTI2N2UxNDkxZGUzOTM0MDU0Yjg0MTliODhiMTY3MzEyMTdlYjRlZTc0Yzg1NCI6ImJkMGYzYzQzMjI5YTBmZmM5ZTE0M2UxNjczODExMWUxNmQ2YTA2ZWJmM2VhYTViMCI6IjIzYmQxNGVmOGNmNzk3Y2ZmN2ZmNzg3ZGY4ZWQ4Yjg3Njg0ZmU3YTlhMzNiZjY5NSI6ImMyN2E2ZWU1YmFiOGY4ZTkzNzgzODQwZTcyODk0ZjNiMDI0YzdkMzIwNmE0YTE4NjljZTZmYThiNTY3NGJjYmQyNGQ0YWFiMzBmOTg2NmQ3OTdkODUwNDIzYzU3Njg0Yjc2OTc5MTNiOWVmN2JjMGJlOTMzZDBlMjE1MzViZDUwZmVhMGZlZWIyOTM5ODUyNjFmYjlkNGViMWVmOTdhYjVlYzZiNjkxYTA4ZGI0YzgxNzFlNjM3NDVkMTRmYjRjM2EwM2M0MWY5MDZkYWFhMjg3N2I3NjIyYjI1NGYwNDQ5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjcxZGM2MjUyNDJkY2I5NGU2YmEyYmQwMTNiZWIyMTEyY2ZjYTU3Njc3NGUxMDI4MzA1MDNiN2FlZGEyNGMyYzlkODYyZjUyMTI5NzVjY2MwMTlhZDJlYTA0NDI1OTVmNzRkMWQzN2RiY2JhMDcxOWQ4ZWEzMmJhMSI6IiI6IjBmZWY5ZjA5MzRiYjQ0ODViZmFiMjQzMWY4ODExZDk2M2VjN2ZhNzk1M2ZmYzIxMyI6ImE2YTc1MDFjNGE1YTkzYzM5NmVmOGNjOTY5ZWJkOTNjYWMxYzMwYjQ3ODNhMDYxNyI6ImM1OGVhMjMzZjM1YTIyZmQ5YjAxNTkyYzYwMjZhYTE3OTIyMDcwYjM2MDRjNzExOCI6ImExNDUyZDg1Nzk5YjU0MzcwY2ZmNjVmZDZkZDc0YjU3NTE5OTYwNmNjOGZhNjQ4ODBiMjY5NzJjOTEzYzM3MjAxMGI0YzNmNGNlOWI3YjU2NWE4ZjUzMDUwNzI0MDRjN2I5ZDcwZjdhZWY2ZTI3MDljMTY5NGVlZmFlNjZmZmE4MGYxNmViNGI5MWY4MDQxZjQ0ODc0MjdlNjlkYWE0MzdlMTgzZTgzZDNiOTcxOGJhNmEyM2ZiOTAzNjU4ODQ4OTllMGQyZjBiZWY1NmIyNzI0OWY2NWUxYzAwYzU0MTFhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiIzNmMxZTA0OGQxNmY5ZDYwMzVjNmI2MjUxNWFmYjkyOTYzM2YzNTZmZWQ2YTY1NDI4MjY2M2UyMjg0ZmQ0MTMyMTE2ZDIxZWVmNjZkMjk2MjliYzcxMjk2NWQ5NjBmMThjZjNmN2RjYmY4YTNjY2Q2MWI1YjVmYjUiOiIiOiI5M2JiMzcyYjdhZTEwMzVkZTZmMTNiMmEzNmMzYWU1NjgyYjlhM2VhOGY0NDQzODMiOiI5NzE1YjcyZTQ3NTU5OTM3NjJlMTFhOTM4NTdmMWQ1MGEwNTFlNzBkMDk0MzM5YTUiOiIyZjFlNzM5NDU4NjNiMjM3ZjQ5ZDZkMjBkMDk5OWEwMjAzZjI5NWI5YTA0NmRjYTIiOiJjYTEzNTg5MWI0N2YyN2MyNmFjODkxZGY0OWM4MGQwODVmOTBjMTNkMjM2YTYwZjEzNzJlZWZkODFlYWZjNTgxOWY0YWU1YWVlNWIzMmQ0NjY4MWJlMDE2MjliMDc4YWU5NjVmNjdiODFhNTI2OGVmMGIzMDNkMDllMDQ4ZjQ0NDlmNWFhYTExYWY1MWY4MDE1MWI0Njk3YjEzNzAwOTMwMTY3Y2RjYjNiNmU4MjYwZWViOGJlYzdmNmE2N2EyMDUwYTZlYTU2OWM4MjVkNjFkNDg1OGExY2QxNWY3MGZiMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAxOTIpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiNTgyNDI1ZTEzMzU2ZTdhODQwY2FlOWZhNDM1YjIyMGFmNmE5NmZiNTNhYzkxZTdlZTIyMDIzY2Y2YTBlZWYzOTIzOTA3ODgzYWU1NDBiZTgxNmUwNjMxYzg5NDUyMGI4NmU4YzZhZGI4MTUyZTU1Y2I2YWVkNWFkIjoiIjoiMjI3NzYyZTEzN2Y5ZWVjNmQyYjNjNjM0NzZiNDA0ZGM1YjBjNjg2MTNhOTMwMzRhIjoiZmJhNzJjMDFhOWU1MWM5M2FjMDBjMTIzMmM3MTdkMzJmZDRkNGM3OTE1NTZlNzE2IjoiZjUyNThiZjMxODQ1Nzc2OWE5M2VmNWIzYmE5NWZhMjc1M2FkMWM1YzFiODFhNzg1IjoiYzc1M2E4NGJhN2Y0MWFmMmFiNzU3YWMxZTRjOWM0NTBkMjExMjc2N2ZmNTVhOWFmOGY1OGVkYzA1YzJhZGNhZWY3YjViZjY5NmU1YzY0ZjcxZDU2ODU1OTNmMjU0YTg3NjI1MDY1ZWUwZGY1MWFiNGY3YmJhMzhmYWY1Nzk5YzU2N2Q3ODNmYTA0Nzk1N2YzZjk2NTU3MWE3YjRjYjQ3NzU2NmQxYzQzNGQ2YjJlMjJhZTE2ZmRmNDczYTZjMDMwNTdkOTM0YTdlMjVmMGVhMzUzN2JlOTcyMzhkNzRiYzQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjgzNmY1ZDc1MjFmMjZkODg0ZGMzNGFmMmNhNTZhYjRhNzUyZWExOGI5MDkwODVhODdjYjZkMDdkYmEzMmI2NTQzOTBhMjViNjhlYTdiYThmYjc5MDI3MWM3MTJmMzg3MTQ1MDUyY2E0NmNiNDA1MzQzNTVjMTY2NiI6IiI6Ijk5ZDlhZWMzMzQ2NjZkN2MzOTllNDUzNDU1ZWY2YWU4ODRjMjE3M2UxMmUzMWNmMiI6ImQ3NGQyMGRjMjJjNTVjMzVmMGI2NmE0NjRkZmJlOGYzNDk2MTY5MTZmYzcyNjI5OCI6IjQwN2IwOTUxNDA0MDc5ZmIzYjU0NTU5YzAyODYxNDNkOWNiMTg5NTdiZWQ3ZmIxZCI6IjgwOWYzNzJkMWFmNjBmZjk3MjA0OTE5M2ZlOWYxNzM2ODRhMmZjOTgyOGI2MGIzMjE2NGMxYjY3MzhlMWJhNmFhMTJjZjczOTI4N2E3NGM2YWQ1MjhhM2VjMDAwOTViNTkwYjQ0NzA1YjQ5NzUyMzZhMGI3ZWEwMmMxMjEzZjBlODMwZjI3NWY1M2JiNzllZmQ5ODY3OWM0NzY2Y2FkMjc3MzhlNmZiNzc3ZTk4Y2RkNjA2Yjk3MWZhNjA3NDUyODlkNWVmNzJhOTllMTkxOTY4NmE1M2EyNDFmZTM2Y2YwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJlNTU1ZWQ2YzdhYjM0NGZlYTY4ZDczYzY0MzJlNGU2ZGEyZTY3ZDhiMzNhYjc5ZTU3MTlhMmRlZjI1OGE4NTJkMTdkOTMyMTI4NDA1ODNmZTIzOTAwOTQ5YzMwMWEyOWZjOTIwOTVmNDcxNjAxODE0NGU2NDU4M2IiOiIiOiI1MjYyY2NjZDEzODI1NmZhODQyNDgwMTQzNWQxMThmMzliOWFhMWRiNGQxMWNhOWYiOiI5YjU1ZDc2Yjc0M2JkN2ZjNTcwMGZkZThmZmNhOTU2YzBlZDYwOTFkZjFhMjJhZWQiOiJmOGM5OWFmODAyOTExMGM0MWE2YTAxZmQyZDNkMTJiNzEwM2FhMzljYmVlYTkwYzgiOiJkMWVjMDZlMzhhZjdjNmUwYTcwYjczYWM2MmJjMzU1NjE4M2Y5OWE0N2JmZWEwZjBjNGE1OWU3YmE0YjA3MThkZjU0MzhlMzY5YmExNGJlODRkYjQwZDVmZmU4YTFhNTk1MmVkZmI4M2Y2MWVlNGQ5ODRlM2QyZmE2N2Y1NTdhYWNjNTgyOTFjYzY4OGZhMjliZTUzMGU2NmMyMjhlNjg2MDdlMjVjMDEzNDczYjRmZmJjZmVkYTcyMWVlMzVmNWRmYzg4MDk1MjhlYWRkYWQ4OTY5Y2U3MTlhNDExMjE2ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAxOTIpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiMTJmMmNhYmQzYjZmNjQwZGFhZjI3ZWQ2Y2Y2YmQ3ZDA2ZTJhYzM3MjczM2M2OTcxNzM5ZTM2YWZlMmJhMWViZjRlN2U1ZTlmNTU5MTQ4MGUzZmFlNzUyZmE1OWJiOTlhMTk0OWJkZWNjZjBjMTAwZjZhZmU4ODZkIjoiIjoiNzc2NmMzNmU2NTgzY2M4ZTNjMjZhODA1OGZhMDkyM2JmZWIzZWUyMjAzM2Y0NmMwIjoiNjNlNjBkMWJiYTlhYTI5YWRjM2YzYjhhNWRiNTNmM2I3MDNjN2FlNjliY2JjMmY3IjoiZjQxNmYzNjcxN2JhNWYwYTc4MTI1Y2E1MmNjZDAwNGIyZjRmMmRjZGQ0MDFmNTk1IjoiNjE5NmIyYjRhZGZmMTRhMjZkNjRmNDQwYjZjMTYwMjEwMjY2ZDdmNWI3N2Q1ZTI5MmU5NGI4YzY3YmQ5Y2M3NzQyNzQ3NDFlN2MwYzlhN2FiMjFjMzFmMTE5NGVmNDIxOGRkY2JiZTk0MDU5MDQyZDIyZWY0NGVjZmVjZWYyMTRhNzNkYjY0NTA1ZDQ2ZDU0OTNkNzQ3NWQwNjg0ZmMwZTQzMWM1MjY1YzEyYjM1MzEwZDQ0MDRiM2M0ZGI2MDI5ZmFjYmFlYzg4YjBjMGFlOTc5OWU1YWYwYWE0OWU4NDIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiMmM1MGRhOTBhMWY3OTg3ZDUyMTY5NTBlYTIyNjg5NTg0YjIzNzY0N2Q5NmMxMjM5ZjkyNTE5NDJmNGQxM2QxNmY0MThiMGNmNzI2NWI5MWM0YWQ5N2E3YWNiYmRhMDY1YTQ4YmMxYmM1YzdhOWVlMTUyM2M1MGUzIjoiYTc0YzEwOGZlODcwYjkxYTJkZWZhOTcxZmExZWZjYjdhMjA5ZjI5M2QyOWJiNWVhIjoiIjoiIjoiIjoiODg1M2ViNDdjNGFkYTk0YTNkNThhMWI1MTc3ODRiY2NjOGY4MzFkMDJkZDUyMzljNzQwZmQ3Y2FhMzg2OWM1ZmY3YmJmNTIyYTc4YmUyZDUxMGM0OWM0OTZhNjY1N2EwOWYwZWRlMDBkYWVlOWZkNzcwNjFiMGYwNGU3MzQyNTE4ZGM2ZWMxZjRhN2ZmOTlkZDdjNzgzODgyYjU4ZjVlOGJjNDY3NTE2YzZiODU5ODVmYWI2NWM2NzYxZDRmZTc1NmZmYzI3ZmQ2MmNmYjkyNzc4MzkxYTI1OGQzYjBiMGUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiNDYwNmUzZTE5YThhNTNlOGFiYTA1ZDlkMWZkYTFkZGYxNWU3NzA5YWEyYmFlOGI1NGVmYzRhMTRlNzM0YjQ1YTVjYmJhZDAwYTc0OWQyYmRlNTQwMjU4ZGU3NGZmOGZlODg2ZDA1NTcwMzAwYWYyMDg2ZDBiOWEyIjoiMjNlZjVmYmRlNGIyNzBjMDg0YTc0NWUwZTI5OWE1ZWJhMjI4YTM3MDc0ZmQ0ZjA3IjoiIjoiIjoiIjoiOGNhZjg2ZGYyNWRlNWNiYzM3NDlmZWU0YjY0ZmUwNDFjZjRlZjI4NTllMjA3MDRiYjAxYWJlMTI2YTkwZWFkOGNmZmM0MjdjMmY5OGFhYzQwMGFhYjk3MTg0ODQ2MTI1YTJhNjY4ODhkZWE5YzhhYTEwOGU5NmUwM2IwNWJiZDMwZTU2NmZiOTBjNjYxZGMxOTkwZWJmZTc1ZjczZjViMGRlN2JlNDE5YzIyNWJmY2JhMzcxMzgwNTQ1NWRmZmJlNWQ2ZmNjOTgxNDE3NDNiNTljMmNiZDcwZTc4ZjU5NzciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiMDhlMmUyMTc1ZmIzNGU0MTExMTc5ZmMyNTgwYzA1YWZhMTZkMjI0NDQwY2M3ZWZmMjQwODJiZWIxNjEzM2E5OTJmYzRmNGUyNzYyNjM0ZmJmNjgxNzdkYzNmMTFjNGQwNTdiNzE2NjFhZGU1NmU3NzY4YWI5ZTZiIjoiMGE0YWYzM2UyNTAxYmE0MDliMTMyNDU5YmE5NzYwMzg4OGU3MjdhY2EwYTBjZWUwIjoiIjoiIjoiIjoiMzljNjBiNmQ5Zjg1Y2I2OWIyMTI4YmRlODZhY2EyYjA1NWUyMWZmZDc3MTZkNzg5ZjgzNGVjYWNjNjlhMDQzODkzYjA5NDU5OTkxNzkzNTcxZDNkODA3MGYwMzM4MmExMWJkMWMxYmYzOGU4NmZhZTEzYTkzMmM2ZGM4MmM1NDBmYWI4YzhlZmY0NzhlNTk4ZDMyOTU2NjNhYjc1ZWU4YTU2Mzc2YzBkNjA3ZmU0M2I3NGFjMzk0NzliOGY2OTRhM2ExMzgyNmIxYjk2MzQ0ZWM2N2I5ZWIwYTU4NThlZWMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiYjQzNmViZWRhMTExOWRlM2ZiMmIyZTUzMmY3ZWJmNTlmYWM2MzJhNGQ3ODRkOTA0Zjg0NGJiNzNmMmNhZGU1YTg4ZDQ3OTBjOGMxZDU5NzNmYzczZjZiN2Y5MjkzMDNiNjJkMzBiNjgxOGEyNWRkZjcwNWJkYjllIjoiMDdkZTU1ODk3MjZjNDlkYzVhNzY0ZGU5YjQxYmNlNzQ2NzVlNGNhM2M3MTc2OWE2IjoiIjoiIjoiIjoiMjA5OWZjNzU0ZWNkMTlhMTlkZThhZmQyMWQyYWUyY2U0NTZjMzJkNmNlNzc3MmE5OGUzN2VkNDdmNTQwMDFmNDRmYWQ4ZTliNTkxYTcwZDNiYjI4ZjE5YmNhMjI5NDAzMjFiYTE3YzMzMTkzNjEzYjdiNWJlMWVjNTRlZmE0NzBiNzBjYmQ2YmUyOTMxMTkzYzM1Y2M3M2Q4MGMxMzliYjRlNjcwZTFhMmNiNzRkM2JlZGQzNjEwZTlkMGY5ZDE1NDM3MmE3MGI2MDhmZWY4MjRjMzQ2ZmIxNjI0MWIzMDEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiNGQzZTk5M2MyOTZjNjY5ODNiOWM3NTFkMmMwYWEyZDUxOWY4MDFhNzY0YWM5ZjFmZDhkODZiNTdlYjIyNmJkZDlmNjllZmQ5YWQyOWJmMTZhZjQ4M2U3ZGMxNzBmOGFmNjVjMTY0MjZjMmFiN2MwZmE5ZGYwMTc1IjoiNTJhZTRjZmU5ODUzNDg0MDhkMzY3OGQ2MDI1OWE3ODM2OWFhYzAyOTUzOTExZTc0IjoiIjoiIjoiIjoiYmVhZDJjZmMyOTMxNTEzM2U2ZjViYTJlODViZDc3NzhkY2Y5OTA4MDgxMDMyZWU2MzRmOTBiMDEyNGVkOTM3MWM5MDA5NDE5YjllMmE0MDlmZTRhYmQ2Mjk1Y2FkNTdjZGRjYjYwNDI5ODZjYzk4ZjJmYWZkZmY5OWY3Y2MxMTg1ZjNiYTBkNWYxZTVmNTQ1MmVlNWY5ZGYwM2MwZThhNGY4NDI2Y2EyNDZhZmFmZTgxMDc5YzJmMGQxNjViODcwNTZlN2M4NTI4ZThjY2NhYzVmNDlkMGJiNWNjZmJlZmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiYzdjNGUxOGM1NmU5MTkxYmE0M2M5NjdjZWJlNDhlNTViZjlhZmY0ZDY0NDljM2U2YTFmOTg0NmJmZDdmOTJkNTM1YmI3Mzg2YzAxNTVjZGM1YWEyYmVlYzg4OGRlMGQ0MzJmNjk1ZWM3OWIxYzc4ODQxYWQ5NDFlIjoiYzM2YTM4MWIxYjM2ZTZhYjAwZWE4MDU1N2I1ZTc0NTFlYzk3NzExMDFkYzIyNTgwIjoiIjoiIjoiIjoiZGE3NGIyM2QzMDlmYzdjZjc2NzBkN2ZlYjZjYjZmZjRkYTFiNzYzYWUyZTg2MTZlZGVlYzEyYzcxNTExZjVhMjRiOWM0NjY1MzIyODNmNDE1MWE5MDJmZmE1YWUyMTFkN2MxZWZhODQ0NzdiOTNmYzM5M2FjOTU1MjJmMzY3M2Y5N2FhOWUzNzllNDhkMTk4ZDU5Mjk2ODQ4NzUxNTA2MzNmY2Y4YTA5MThkMjA1MDU1MWQ4ZGFhOTE4ODdmM2QyNjg1NzM3YjY0NTZkMGM2MWMwYTExNzQxM2YxOTMzNDYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiNzg0MjZmODY1NDgzZmZiY2M2MzMwZGIyY2NkNjViZjhmMjQ3NzA2Y2VkZjY4ZDRjYmNjMjg5YmFjYjFlZjMyZTVjYWYwNWYyOGEyMTE0NmE5YjE4ZTc3YjNhN2VkMGQyNGEwODAzYzlhZjcyNjRmZTRlMjNkNjkyIjoiZTUwMjYwOTBmOTgwNmZmNmYxNThjNGE4MzQ1ODhmNmEzOWU5YjRhNDRlZjJkZmE2IjoiIjoiIjoiIjoiMTExY2Q2NGE5OTUwY2M2ZjIwYTFiMzg4MTFmY2U0YTA4OTI5Y2EyNjU0YmVkNjZjMGNkZWJhYjBiODE1NTI4MjZjMDZlZjEyY2U0NjNmYzljOTFjODFhMzVkMmNhMDU1MzkwNTkyMmI5YTQ5NzVmYThmZWUyYzdmOWZmYTlmMmVkOGNiMjYwOWY0YjdkMzJhNDQ5MjdjN2I1YmFhOGY0M2RkYTEzN2FiYTliNDlhMmIwMzk0ZjdmNjdkMzdiN2Y3MWE1ZTRmNGMxNTFkYjZiOTZlOGU0ZGQ5Y2QwYmQ4NGQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiNDNjYTExZDUzYWQwMTk4ZTRkYjVlMTM2ZGU4MTM2YmM0NjE4NTFhMzBjZTU5NTIxZjkzMWFkMDU5NmQxMzM2NWJkODI5N2E2OGRkNDJiN2RhYjdmNDA4MDhiM2NlNmMxMmYxNGQ0ZGU3NDFjZTQ1MWI2NjM3YTEwIjoiNTMyYjA1ODkxZmU0MDZjZTcyNDIxMDEzYWNlYjQzNDU4MWJlOGEzYTEzNTQ5ZGZhIjoiIjoiIjoiIjoiNGM0MmY3OTFkYzgzMjJkNzc5ZjlhMWVkOWEyOGIwY2YzNTI2MDFhNGVmNmQ3NGU0ZTgyMmVlNWQ5ZWVmMDZlNzAwMzE0YWNiN2E0N2RjYmI2MjgwNWJhYmRjZmRkMjM2ZTMwMjIzNzRkZWZkNDRiYmY3NDc3NjRmNzJmYmZjY2FlMTA4OTNiNTRiMjk5NjZhYmE0NDg0MzU5ODdjMjJhY2U0YzkzMWQwMWRjOTQ1MDkxODYwY2FlNzc0NDM2NWJkOWI2MTkwNTliOGI2NDZiMjI5ODc4OTY2MDQ5Y2Y4M2YiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiZGRjYjMwMjRiNjgxZTMwZTE2ZTA1MDI2ZDhlMjM5Nzc0OTdmZDBiMmMwYWMyNDAxN2RlMjc0NGVkY2IwOTdkM2ExMDRkNGUzYzZiOGFkY2I1NTQ3NDZmOWE0MzY3MWYwNjkyYzAxYThmODlmYTk4ZWMzYTU0YWM3IjoiYmQ5ZTQxOTc0ZjY2MjdhYzViYmIyMWVjNjkwZWVjZTQ1OWUxZGNlZGVmYjMyN2Y5IjoiIjoiIjoiIjoiNzQxYjJhOGU4MmFhM2NhOWYzYTYwOWQwNWE2ZTJkNTcwYmU0NjNlZjk1N2YyMzUzNDRjZGY5ZTBmODliMzYxMDk1MWFhMWVmMGI5NDA2Nzg1Yjc1ZTU5YzJkZTgzNDlkNDM1ZTRkYjgyZmMyYTRhOGI5NGUzNjZmNGViMTNjNDMyZmNmOGZhYzA4ZjBjN2ZkYmU2N2E0NGU4MTcwNmI1M2I0NjBmNzhiZWZiOGNiNmRkMmEwZmZkMTNjODdkZjg0ZjhhNTE5N2VkNDcxNThjZWUxNzFlNTMyMzU5M2RmNGUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiZjgxYzRiYTg2MDVkYzE0MDcyZTJiZGEyZDJlZjY0ZTcxYWQ4NTYwNjEwNTZiOGQ4Mzc0ZmZmNWE2ZmQ5YTU0YTgxNGZkNzI1YmRhODk0NDAzNzE5NzQ5MmM1MmM2MmI5N2VhMDJkZjMzMzI1YjM1YjkxNzI2ODM5IjoiMjE3MTM3MDg0ZjQ1MTlkMDQ2ZWM4OTYxNDRjZjJjMzAxYmFmOTExZTE0NDA4NTJlIjoiIjoiIjoiIjoiMTRlZmQ3MWZhMTNkZmJkNDk4YmJlMTNmZmEyNGU2NDZkMDRlZTBlZjMyYzk5YzExMDA0YzNlOWQ4Zjc0OGFjMmY5NTZmOTg5OWE3MmM4ZDk3YWU5ODhkMDYyNzU4NTVmNzdhOTJiYzMwZjFiOTU3ZGJjZmM5M2ZmZmVjMzg1MjcxNWMyMzljNTMxM2U3NjVhZmZiZWQyNTdkMzAyYjZkMWI3NDk3N2I4MDEyNTIyYjY5OTAyYWRiODZlZmMxYWQ3NjhkOTlkNjU3YTUzNzVkZmY3MjBiNGNhZDg4Njg3N2EiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjgxODFmZDJjYzVmN2FlMmQ0ZWQyYzk2Yjk1MTFhZWVlZjMzZTUwZWNmMTY0YWZjNGVkZGViYWY3NmE5NmQ5N2JmYjQwMzc3OTU5ZTFlZGM0NGQyNGRmMDQxNzQ5ZWM2MjM5ZmYyMjZlNDBkNWE1ZmVjY2RiZWRhNiI6IjdkNmNhNWFiNjUyYTM3Y2Q3OTM2N2Q4NDI5OWYxZmYyYzVhM2MyMzMxYzc3Yjk4ZSI6IiI6IiI6IiI6IjVhMmNhYzgxMTBhMjRlMWQ4YzVmOGJmZjNlODI4NTdlYzhjZmNkNDY5YzMxNmZhMThiMGY2NWEwZDMwODY2ZTQ5ZmVkMmEyMjgxMjFmNTA5MDFkYmJiYTU2MTczMmM0ZmU4MmE5OGYzNDFiYmMwYTM5N2ZkMjU3YTVmOGE0YTkxMjJjOTkxNjQ4YjFhNjUwN2M4MmY4NjZkMjZmOWIyMmUwZWU3YzlhNTFjNGQ4ZTUxMDRmMGI0NTcwMDQzYzkyNTdiYjlkZDZmMzczMGYxZGFmOTRmODBiYWY4OTA3YWNiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJhMGFkMDEyYTk3OGJlZDIyNjhkMDUwODZiODIzZjVkMGRjOWJiOThlZTAzOTgwZDc1NWJjZTk2OGY5YWM4MWRiODg2YTJhMDViNTlkZjQwZDgzNDYzMzRhMDI3NmI3M2Y1MjhkYjAzYTExODU0NWFjYjdmMmQ3MGUiOiIxYThhY2EzYzExOGYyYmMwYzIxOTZkZjgxZWYyMmMyNjdkMjBlZDdjNjA3Y2RhZTAiOiIiOiIiOiIiOiJiOWRjMGViMWU0YWViNDgyZGVhMWI0YTVlNmY2ZWY5NjM2MzY2ZmFjZTY5NjgxMWRiMmQ5MTJlOTQzMGIzMDNmMjNhYzk1ZDY1NjgyNjk0ZWY5NTEzYWM1YjNlNTZhMDUzYjJlMWEyZmZiY2I5MDFjMzc1Y2QxMjJjYWI0N2QzMWZjYTVhMDYwNmRhZjhjYzJlNWU2ZTk5YjkwZmM4YWI0ZmE2Nzc5NGNhYWQ5MTk4NWNjOTJiMjE4N2RkMjk2NWJlMDk4MDI0MGQ5YmUyZmIxYzRiZjA2ZTYwZjU4ZjU0NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiZjI4YjE0MzQ2OGFiODc3OTQyMzBjZWY0MzYxZDA0NzIzNjQ0NDE4MGQwY2ZkYTU4Y2JiOTQ5NGNkMWFkMjFiZTk2Mjk3ZmY3OTkwMTEwNDIwMTM3ODlhOTI4ZjE4ODMxZmZiMDE2OTEyNmRkMDQ2Yzc3NGE0ZmNlIjoiZWE3ZmM1MGUxZWVhM2Q4NGJmZmNiZjgzYjI0MGU5MjEzNDhiNTMyZTdiMzNmMDk0IjoiIjoiIjoiIjoiNWMyMmU5MmYyNWFjYWY5OGY1NWZmMDZlMWJkODBkMzgyZGE3NTRkMWQzM2NmZmI2ZmNhOTMzNTgzYmE3NTgyMDAzNTc1NTE2NDBjNDM5NzcwZjc3Zjg0M2U5Y2UxZTlhMDU0ZjY5NTg4ZDc2YWNiOWNiOTJiN2EyZmEyOTAzYmM1MTM5MWJkNzAwMWNjYzFkYTY3YTRjY2U5ZTVkZDA4YzJkNDg5Mjk1YzM2ZGUyYzE0OGNlMjczMTFkMDc4OTMxMGRlMWNhYjI2NDFlOTJmODU5YjAzNjM4M2E4MDU4YTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImI2MjhjYjQ0OGU0NzdjYjQzOWEyZGU2ODc4NjFhOTkyZTczOGRiNmIyYjI1Y2M2YzI3YWFkZmMzYTBhNjQwYjM0MTFkZTQ5YzkyMDQwNzMwM2U4MGFiZDdhMWQ0ZjQ1YzQ3NDk5ODBmZTE1NTBiZmY2OTUxODIxMCI6ImQ1ZjRmODI2NmRhOWI3ZjE3YWM5NzczNDIwMTU0NDEwNGE1YzBhY2I1M2M2YmYyMiI6IiI6IiI6IiI6IjM0YTgzNGRiYjdkYTBiNmEyZTIzNTNiZDk3OTViZWYzNjljZGRlNGQxNzJiM2ZlYWU3YjFkOWZkZmIwNDQ2NDU0Y2ZiMWFkZWZmNDIzZDBhMTQzYzMzYzBlMGQ4ZTc5MDViZDE3MjA4ODllOGIxMTIxZjFlZjgyY2YxNTQ0M2MyZjljODk5OWM1NTczZTdkZjYwYjUyZWYzOTVjYTFkMWI2MGU3ZWI3MjFjMDEyYzM0NGQwNmIzMzZkNTE5ZmEyYjdiNmRmYmVkODM4MzQ1NjUwNGJkMGI0ODkzYmYyYmEyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiI1YzdjOTY5MGExOTI2YTQ1ODBjNjkxYzJlNTMyN2U3MzZkNWMzYWVjMGNlOGY1ZDMyZDQ5NDZiYzRiNjA3ZjcxMmE4NzU5NDI4YjAxMGJhMWIyNjhiMGRlNjRmYzVlYjMyZDNmN2ZhOWI4ZDRmMjBmYWI0NWM3MmQiOiIwMzEwYjJkOGI1NjU1Y2JiMGZjMjA0MWFkMTVhMjQ4YTdiMWYyYWM3ODg0NWUyOWIiOiIiOiIiOiIiOiI2ZjhiNmRmNTVkOWQ4YWNmODdkYzJhZjIwYjdmNDUxMmY5NDI1OTg3NDk1ZjUxMjk3NWRlODA1OTEzNWU3ZWJiODY5OGNiMDMwMWE4ODE2ZTcyOTllNzYwNTNjYjY2MDUxYzhiMzViZDJiMDBiNDY5NWNmZjQ4NDdmMTY4ZDJkNjA2OTc0OTVjZDkwMDdhYjdkZDc0ZWU3ZjYxZWU5MGI3ODI3NTQzZjYyNGI3YzE0MTJiYmEzZDZkZjEyNDJlNmZmZDkwNTM0ZWQzOTMzNDE0MjlmYzAwYmQ5N2Q5YmNiNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDE5MikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6Ijk2YWU3MDJhZjUwYzUwYzdjMzg4MThhNTEzMzkzOGJkN2NlNTExOTdmYzc4ZTIxODE1YjZjNWE3ZmY5YzAzOTVkNzY0MTU5ZjcwN2Q1ODEzZTViZjQ3YzFiODIzMmI0NGEwMDdiZjdkZWNmZWY0OTlkNzU4ZWQ1MyI6ImU5NjU1NDY0NDA5N2U5OTMyNTg1YjdmNGJiMTRkMTAxZjI0YzhiMDM3NmYzOGMwNSI6IjNmNjk4YTVmNmY0ZmU2N2VmMmRkZjIzYmQ1YTY3YzFhMmRmNGYzYjE5NDI1ZmI4NSI6ImZlMWY2YTkwZmMwZWQzOTZiY2EyMWMwZDQwYTFiYjU4M2ViNjNkZjc4Yzk4YWRhYyI6IjU5NDJiNTYxNDhmMjdkZDUzODhmMDBjYWE0N2ZmZDQ5MjVlODU0MjM3ZmUxNDQ1NCI6IjE1MGI5MjYwY2U5YWE0MTlmZTE4NjAzMzJhZTdjOWY0MmQ5YWRhMTY0OTY3OWI1M2Y0NmJjOWQyMGRlMzQzMTE4NmE1NGFmYjVkZjdiNjI2OWNkYzA1NTQwYTkzZmRkNTBhMmNkM2E4NjIzNzJkODYyODQxNzY4ZGYwMjg0NmIwNTc5OTNkZDZhYTMyZjg3NGI3MjIwYTVhMWZkOWNiNTczZDcyMGE1NGFmNTcxNWNlZGZjMTZmMGQ5YTQ2NzczNWUyNTNiMmIxYTZlOTc0MjFmY2VlMWYyZDY3MGRlYzFhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiNDgzNDcxN2Y2NjlkOWI1OTlmMGVlNTI2MTI5MDU3YjVhN2M1NjgwNzI0YWUwNDU5Y2ViMGUwZDRlZGEyMWU1ZmU5MmU2M2ZkMjNmMDhmOGEwYjA5NGE4NWYzZjM3N2ZkZjEwMThhZGEwYzQ2MWI1YTA1YzMzNGU4IjoiODcwYjc4NTdkYWU5N2NkMzYxYTAwNWMzMDA1MDEzZTRkZDU1Y2E3NmU0NmI2MmJkIjoiNTIyNTM0YmExYTA5Y2Y5YWJmMjliZGU2NmNlMWRhY2QwZTI3M2U4OTU0ZWNjYWZiIjoiNDVmNTQxNjk2NjVmNTlkOTIyMTFmMjY2ODkyMDA5OTU4ZWU1MTVmMTRkMDk1ODFhIjoiNDYzMzgxOWMyYWU4M2M3MTA1OWVjOGFlNDFlZDJjNjhjYWRmOWIyMDg1YTViOGJiIjoiN2FmZDZjZmFmZDlhN2JhZDE1NWI1OWE4YmIyMDk0Zjc2YjkxNWI5Mzc2NGU5Mjg1ODgyMWQ1YzMyZmY0YTI5NDkzNzg4ZDNkYzE2MjdmZmU3OTgwOTUwMzk0MzQ5ZWJhODhiOWMyZjY4NjlhYzUwODYyOTYzNjZiNmY0ZWUzN2U4NTI5ZDI5MWM5ZDk2MmUzMDY2MjQyM2ZhZjM3NWI3ODIwZTBiNjUwZGIwM2UzYzk5NzkxZDgwNDJkYTc5MGNjZTFhMTk5N2VhMjE0NDFkYmE0YjkzNmJkOGIzOTMzMDAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJmNWQxZDI3ZWIzNDRiNjNlOTA3ZDgyYTJlNTc0OTRiMjVkYWJjYWU0NDBhYzg4NzM4NTEyZDk2MDJhYzhiY2EyNDMwMThmMjQ5NTU5OWU2MThkZGUwMjYxZTQzZWEzOGQ0NWU3YzA5Y2NkYzRiZjNkZDhlNWMxMDAiOiIxMmZmODQ0ZTVjNWJiM2ZkODcxZmViMzdhYjc5NjAwMjg0NmZmYWNhNWE3NDFjNTQiOiJmNjQyYzE5NjAyNzU0NTg0YWZhMzA4M2Y1NjdkODBmZGNkMWU1YzI5MjAyYWMzYWQiOiJjYjZkYmFkOGNlMWE1Njc3YjQ4MjVjY2E5MzQzMzZiOTM2Y2NmODQxZmY5OGQ4OTQiOiJjMTFmY2MxNTdjNjQzYTk0M2U1NDI3NGYxZDk0MmQ5OThmZDFlYTAzMzNlMjE1ODgiOiI2ZjI1YWU4YmY4YzI2ZDVmMGI5ZDJhODFhY2FmMjIxNzkwYTA5MjQxYjZlODNjOWU1MjdjNzc4NDg4MWQxZjczOThjMmQ3NzcxMTc0ZjkyYWFiNDUxMzRiNDYzM2FkOTY0MzBkZjMwYjEzMGFlMzRhZjUyZGU5MGI0MjU0MDU5NTliYTI0YTQxNjg1YTA0ZDI0MTFlMmYwZTg1NjRiZjViZjMyODBjYjZkNzVkMGI5MTBkMDZjNzNhNjI1Y2Q1NjY0NmVlYmZmMTRmY2ZmODE0MTFjMDU1OTIxY2RmYjRjMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDE5MikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjQ5YTEwNTY5ZDg3YTc5MGQzNGJjYzNjOGZkNzdkMDc1YTFjZWY5ZWZmMzM3ZTg5MjliNTFiZGI4ZDZjNWRmM2FkMzEwNDU2ODRmZDFkYWJiMWZlNmYwNTJmYzk4ODYzODRmZTQzYzBhN2FiYzdhZGNhMDQzZDM1ZSI6IjM0ZDZhZDQzNGE0MzZhNjkwZTc2NDRmMGRjMjIwNzEzMTE0ODE5MmNlYjJlOTFiNiI6Ijg3MDczMjhmYzVhMTcyMWU0ZDcyYjIzYzJiOGNhM2MzMGRkZDk1NjY0YWM0NzhhYSI6IjgyYzhkODNhOWY1ZDU2MzlhNmExY2UyNmQyNDRiZDMwZGNlYjFjYzk3ODYyN2UxOSI6IjJhNTNiMGI4MGIyOWM3ZDA3MTk4M2I2NWJhODM1ZTRlZGE2NmJjZmU3YjNkOTBiNSI6IjA4ZTI0Y2NhYWUzYjQ0YjcyNDhiMmQ3MzVhZjk4NWRjYWRiODRmNzRkMjAyYmNhNzI2ZGUxY2Q2NjNiYjVlYTFiYjY3YzY2OTEyNmFjOTcyMThhOWNhNDU0OTFkZjkwYmViMzg3NjE1NDc0MjQ5YmJhMWFmZDQ1MzRiZTdhNzRjNjFmZWYzMDhmMTM2NjFkZGZjY2U0MGYyNGI0MTBjZmZiMWNjM2NiYmEyYzZkMjBhNWU0YzQ4MTRkNDRiZWYwN2JiNjk3Y2ZjZjFlOTkzMmU0MzM0OTM3NmRjMDQ4NjVkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiOWE0MjMyYTU5Y2M1Nzk4NjdmODMzMGMyODhhOTIxODI1MTAzMGMwMGViZTUwYzljZDk3ZDZjZmY2ZTQ5YWQwNzlkZjUwOTY0NGVjMmViZTNhZDRlNTE1NjU0YWYzODNkYTI2NWQ3YjM0OGRkNGI4OWRkZDQ5Y2JkIjoiYjQ0OThhMzJmNjY0ZDRiNDg5YzJiNDdlNjc4NDVkMmQyYmVkNTA5NmU4OGY4NmRlIjoiYjg0NzFlZTg3NTMxODE3ZDgxZWUzMjU3OGQyN2ZhM2ExOTBkZjMzNTYxZGE3YTJkIjoiMmU3NDE5NGFhNjJlZjkxMTU5OWIzN2E1MWZhNzQyODE3ZTNhNGU2YzI1NGVjMTc5IjoiYWZjN2YxM2FlNTVlNzM4Y2NlYjk3NmViZGQwMTY5OGRlNGQxMDNkYjc5N2Y3OTliIjoiMzQwYzI4Y2I3Y2Y0YzNlMTQzZGFjM2UxMzNkZTg2NGIxZjQ1OGM3NmUzZDQ3ZjNjYmI2ODQ1Zjk0MGJlMTc0Yjg4MTlmYzUzOWY0MjAwNWY0NDg1ZmRkYzY1N2YwNjRjMzQ4NzMwOTRlMjVhOWJmN2VjMzQxYTk4Y2I5NzAxNGExZDY5NGIxNjk0MTcwY2E1YTg5NzZlODZmNmU0ZTQxMjMyZjUyNmVjODUzNmZhY2QwMjM5NGY0OTJmYmNjN2MyOThlZjBlZGRiM2M1YTE0ODM5OWRlZDc2NzczNjZjZjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAxOTIpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJiODk3NDQwMDk3OTNkMmMxMTgzNjViMWQyZjM0M2Q2YjZjNTkzNzRiNDFkYmQ4MDVlNzkzZjI3ODgyNDY3YzUzNDIwMTVjZjk2OGIwODBhODhhMTVmZDZhN2JlMzc1N2IwNTMxMzUyODUyNWFiMWUyY2JkMDhmZmQiOiJmM2MwMmJlMGE4ODBlMTk0MDEzYzIxYjA5YjY3MDNhNjFhN2NjZjdhNzNlOGE1NDEiOiJiY2EyN2YxMDA2MGJiOGQxNmQ0OTliM2Y2Y2EwNWVkODQ2MmI1MWIwYjQzYTFmZDciOiJlYjZmY2Y3NTg4NGJlOTExMjIxOWQzNTkwMTNmNDVmY2IxOTU5ZWE5NzFiZDBiYzgiOiI1MGEwM2JjMzY1MmY1MGNiOWVkMTE2N2VhNzBlYzFlNzRmODk2ZjgxYTgwOTAyMTYiOiJkMmE1Mjk3MjIzNjVlN2ZmM2U2NjA5NjRlZWIyNzA0MGEwZTkyYTRkMTliYmU5NDU5MmNmZWJhZDcxMDQ3NDE0Njc2Y2E2Y2E3MjIzNGY1MTI3ZjMxM2NiN2Y1YmU2MTNiNDRkOTg5ZmUxNDFjOWEwZWMxZjBiNGQ4M2MzNmU3NDRjZmIxYzcyYzMyYTAyYjY4YzIxZDI4ODMyZGEwMDhjNTc2NjQwNDYyNTVlZjE4NDg4ZWQ3NTBlYzVlNzNiMThlZWFkOTM5ZjkzMmQyODA5ZjEyOTM5NjcwYzNjMTAzMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDE5MikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjZkMjkxOGMxNWJlNzg3MWNhZDk5ZGM5ZTA2ZjczMjUzZWY5MDVkOTcwNWM0ZTRlYzM4NjY0MDQzYjA0ZjlhMTUwZmU1OTUzYmZhN2FlYmQ5MjZiZTE2MmI3ZWRkNzJmZGMxNGZmOTdlNjdkYWU2MjU3YWQ2NTRmNCI6IjQ4OTI0M2VhYWMyMTVmNzZhNTczYjkyZjA3MDlkMTE2YmQzYzgxN2ViOTVjMmMzOSI6IjBhODRjYWQ3YTFjZDIxYTVhZmU2NTU3ZDdkMjg3NWQ5YzYyMTgzY2JiZjQ5YTEyMyI6IjBjMTQ1NzhhYzk1MDQ5MDJjYjlhYTY1NDA4NjI0NmQxMTMwMzlmOTI2YTg3YjMyNSI6IjFhYWFiMWUzYTI5ZTE0NGNlYzgyNWQyOWMzZjQyZGM5NDVjZjI3NzJlZDMwY2I1YiI6IjMzNDM4YmE0ZWRkMGMzOGRiOTlmMmI2YTUwYjM1ZGQ4OWFlY2IzNDkxOTkwZWM0ZTYwNDYwYmIzMmViMDE4NmZmOWZkYzk3M2IxYjBkZjIzYWU2NWRhMzFiOGFmNWEzN2E2OWY4MWFiM2U1NzdhNGMyYzMxZTUxY2ZjYzRlODQ0YjA0NGZiNTk3ZTkzNzUyNGY1OWEwMDE5YWQ1MTIwYzQ2MDMyOWM5ODJmYzkzZThlN2E0YjRlMWRlNTYxOTEwM2IyM2E3YTU3OTYzM2ZjOTI1ZDE0N2Q4ZmI4NTZhMjc3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiMTMzMGM0YWVmNTRmZjg0Mzg3ZTAzNzJmN2M4ZDI3M2NlY2YwYWYyY2ViMzJlZjZlZGI2YTRmMWFjZTgwMmYzYjk1ZmE2OWNmNTc4ZTJjZGExZDYwNjBlYzI1NTRlYjMxNTI1MDczODdmMzI1ZDhlMjYwMDliZDgwIjoiODlkN2JmOGY1NzU0Y2VkYzJlMWEyNDlmNjkzZTI5Mjc2MTcwZjYyYzI5YzVlZGFlIjoiYTZiNThmMzNkNTc1NzBmNGRmMDViYmZiNzkyYTAwMDg3ZDMzMWUxNzQxN2UwOWVmIjoiZjU3ZmM3MDFlNGY4ZjVjYzIxODFiNTM1NzgyNGY5MzJmNmUwNzY3OWVjMGQzY2M3IjoiNTg2YzRlOGM1NzY5MTU2Y2JiNTRjMDI1ZmIwMWFhZDBiNjFhYTYyMzhjMjMxNjU2IjoiMGJjYjZhZDRmMmFjZWZiNTQ5YzQ2MjcxZDVhNGVkNDFkN2RlY2MwOTUxMzdlMjA0NGI2MDI3MzM4OGM2YzZkNzljYjg5MDE2YWJjYWQxZDZhMTM4NjIxNzIwYjcxZmMxMWVmODJmYWUwNDAyNmUwODkyNmU5NDA0MjY5NGEwYzAwOGY5OTI4MWUwM2RhNTgwZmJiNjU0M2FjYTJiNDU5NmQzOTY5OWI5N2YxZmU2NWVjNjBhNzBiODg3NzBlYjgyNWI3MTZhMTBjZTQxMzgzZjMxZGI1OTYwNzlhOWQ1NGUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAxOTIpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiIzZjA1NjRiOWNlZWUzMmM4OTQ0YzhmMmJjNGI0ZDIxNzliMzhhY2M4ODBiZGI5MWVlZDQ2NmI4ODFlMmNjMjFkZjc3YmMzOTAxYWI1Y2U1ZWNmMDI5YTA2Njc4NDUwM2Y4MGQxODU3OTc5YjA5YzQ1NjM5NDQ0MzMiOiI1ZDU0ZmM3MTU1NTZjMjBmNWIyZDAxZDZiMDk5MmYxYzU5NmU1YWQ3N2Y4MWRhNzUiOiIzNWNiNmQwNzg2MmZiYWI0ZjUwMDM4MDk3Y2I0NjNhYWRmMTRlNTE5Yzg4MzQ2NTEiOiJhYmIyMWU1MDFlODVhZDFlZGM2NjEwOGUzYjg4MzgwZmRkZjgxMGIxMGI4ODMzMTciOiIzYzY5MGNkZDk5N2RmYTljNTY3N2JlZTk3NmZhOTNjYWMyMWY1YmJmMzgyZjdmNTMiOiJiYWU4NzJjOWQyMjFiMTUzMWY4NWMxNWY0NjZiN2EzYWYzZmE5YzljNmI3MmJiOGY1ZGFkNzdmM2QxMmRmNTJkMTAzNDdiYTVkNjUwNGNkMGEyODVjM2JlNTc4YmI2N2YwYTlmMDEzNzQ2M2RjMDFjZGNiODQ3ZTc4NTNjNWRiNGNiYjZhMTE1ZWJmZjdiODBkYjA0MDZiYWNjYjBlM2U2OGE0YTRhOTUzNjRjMmRhMjk0NjZlMTYwZmVjZTdiOGRkYjY1ZGZhYjAwMGM2NmNjODEwOTM4MGE2MDFkNWVkOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDE5MikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjExNWM5NzNkNmRmNDFlYWQ0NjRlMjI1NzJkYmUwNzYxZGNkYjlhYWQ5MzBiMmU1NWE1NTU4MDc1ZmI3YzUxYzk0ZWZjNWY4ZmU1ZGZlMjRkMzAxNzVhODlmMWJiY2YxNDYwMzdhMDdiMzI0ZjU3MmQwZDRjMjdlNCI6ImQzMDc5ZWUzYTNjOWIyZDY5ZWUwZmQzMTZhNjQ0OGJjN2Q4ZTNiNzMwOTQ4YzQ2ZCI6IjIzNDhlZTg3YmQ1YTNiYjQ1ZDUxYTdiNmExMDkwNDNhOWI2ZWUzZGIwMTFkZGEyOCI6IjkzN2ZlMWE3YTc5MDc1NGJmZjk5YWQ1MTc4MmU4ZWY1YjQ5MjhkMDA1N2IwYzM4MCI6IjNlODk4OTlmNGFhZDI0MWE5MTg5ZmZhMTI3Yzg3YzE1YjVlM2JjZmQ4MGJjMzE2ZCI6IjBmZmM4ODNhYTE5YjNjYmRlYjM5MDM5ZmQzNzYwMTYwYTkzY2Q2NjNiOGIzNThlOWZiYjYzMDBkZjE2NDY4OTMwM2VlNWYyNDg5YWI0YWIyZDUyMmY2YTMzYzkzMzUwZWFiNTUzYTI0OTliMTVmOGNhMTk4MzAzZmY0NWU5NDZhMDZkOGE0MDk1OWYzM2E3NTljNTM4MWIzYTU5ZGEyMmU2ODAzMmFiZjNkYTNkYTZhYWRiNDEwY2I0MWY1NGIzMTQ2Y2U1N2Y5YmI1ZDI4YmM4MjNlM2UwM2MwMjk0Nzk0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImMyODU0MTQyNWE3Y2YzM2UyOWFkYWE5MWYzMjZmMjE2ZGU4OTk3NjAzMTk3N2YxMDRmNDRmY2JjZGNmNDU3OTMzNzQzNDYxMzgwMWZlNDY2MTY0MjM5MmRiMjlmMTVmMDkyNDU2NmU3MmI1OTZiMjNmZjdiMThkNSI6IjQ0NjUwYTI5OTcyYWE4NTIxZDZmYjlkZmZlYjE1YzAwOTAzYTI4M2YyMGVhOTkxNCI6IjQzY2Y0ZGUwMjc2NDgzYmUxMzgyZjNjZWNjNmE4MDM1NTFhNDA2MDI1ODRjZDg0YiI6IjAzZWFhMTA2MTI4OTVkYjhmNjZkNTBhMjIxMGQ3M2QxZjU2M2MzY2E5MjlkOWY1NCI6IjhkMmIyMGFiYzRlODg5MGM3NzJiY2FhMDVjYjdiM2ViNTAyNWFjNGNhY2I1ZjdjZSI6ImFlZDI3ZmY4ZWI1NGE3ZDI3ODdlNzNlZDJhNTE4NzdjMTI1MGMwZDRlYWYxMGFhZGRiMzA0MDk2MjQyODlhOWI3NzQyY2RlYmJhNTQyMThjN2M0NDhiNTdmMjA5MTgyZTIxNDAxNGNkMTgwOTE2YThjMTI1YWQ0MzhhZjJlNWY1Y2E1YjAwZjljZjA2M2YwYzMwNzU2MGVkNDM3ODM4MmI0NTcyYjk3MDg4ZjhkMjRlMGJkZjBmYzM0ODlmNjQwNzRmMTE1NWZiYjExNjNiNTRjOTMwOThiODQxMjU3YzMwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImRmYTUyMDgyYWZiNGRkMTM3Y2I1MjA5ZjY3NzFmMDRlZGEyNTc5NDI4MDk4M2JhMWQ4Y2QyZjNkN2Y5ZGVlNTU2YWMyNmQ4YTVhMzY4ZDI5MDk2ZWQ2NDMwODliNjVlOWFiMTdiNWY1OGVjODE2NTcwNDk5ZmJmZiI6IjE2Y2NmZDIwNDA4MDgyODI5YWFmOGE4MTg4ODUxNjQ1ODFjOWExYmQwOWU5ZmMxMiI6ImFiZTEzZDEyYTlmMDEzM2JkZWJlMTQ3ODVkZmVmNWYwOGExMzNhNmNiNWMyNmE5MiI6IjQ4NWRhZDc4MDRkZTU5NDM1NmNmM2M1NzFkNWYyMjI2M2MwYjdjYmQ0ZGNhMWYxYiI6IjU5NjFmODE3N2I2MDE1YWUwMTE5ZDIyZTBhNDVhNGFhMWJjZGM1ODBmN2U3Zjk3NSI6ImVlNDhlNTdmMWI1YmQ3MmM5OWM5MTFkMzM1Mzk1MmMyYzE0MzY4OWMzY2Q5YjQ3NGE0NmU0YWRhODM4MTFlZmM2N2YyNTU3ZDMyMzcyMzUyNjgwOTgyNWFhMzM4YTgwZTgzM2M5NTI5N2Q2YjE2NDkwZGI2MzNhYzFmMTY0ODA3MWMzYWQ0Y2RjZWEwNTZjNDFiNGViMTU3ZmZjODNjMzQ1NGIwY2YwMDFmMWUwMWMzMWU0OGE2MTU4NzM4MWUyOTNlNmNmZjk3MjcwYzFmMTU3YjA2OWRmM2U1OTFjMmY5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6Ijk1ZjNhMWFlYWNkMDcyMThhMmNjZWU0NGM4MDdmNzkwZTU2OGUwMDMyYTQyZmRjN2M4ZGM5YTcxZjc2YmQ3MjVhYTkwOWRkYmRmNTQ1N2YxZGM0ZTY5NzQ2NDI2YTljNTZmYmVjNjAzODY3NjMzZWUzNmE3ZmU2MiI6IjY1OGI3MzI2Y2Y2YWRiZjcyMDhkMzdjZDY5NTQ3ODA1YmMzZjU4ZmRkODc0ZTE0MyI6ImQ0NDM1MGM3YTY2OGU2NDg3M2ZmOTdjMzFkNzljYjIzYjBmMTYyMGFlZDdjOWQyMyI6ImRmZWZmZjgwZjEwYzMxNDNiODJkZTMzOTJjMzk1YWI5NGFjOGEyZjRjMGEzMDA0OCI6ImE2ZDIxYTc2MmFhYWRkY2RiYWU5YjllY2VmYmNiMzE0OWQ1MTRjOTRmZTgzZWIyMSI6IjRmNWU1NDQ0OTFiNzJiODRhMGQwNTMyZDdmOWNlMDFlYzJkZTZhMDVhYjUwNTZmYzc1ZDhmNzNiYmNhYzVmZmMzOGUyMDc0NWQwZThhYTFlYWNkZWZlYTZkY2JiOTI0NzViNWNmOWNlMGE2MTdlNTYwM2I3YjlmZTM0ZjRmNGNiMDRhZGUyZGIzNWNjZTFmZDMxNTE0MGUzZTRhYjg0NzIyMTZjN2NmZGFmMDA0MTgxMzUxZjIxMGIzOTdjMzE0N2RjZDI3OWY2ZmMyZWJkOTYwNTBlOTk2Zjc3YWQ2YmExIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjI5YTE4OTdkNmVhNWRlNjZlNTUxZjhjMTA2ZjYwMWU0MjFkZGQ5NDA4MTI1MzBkZjAwZjYzNDY4MmYyNDlhZWJkYWY4NjkzOGM4OTVjMTFmOWZjYjBiZDFmY2RiMTgzYjRmOGNmODZiMzQyOWE1MzcyY2FhZmUxZCI6ImQ2NTVhMTc5ZWRhZjRiODM4MWE5ZjZhMzMyZWQ1Yjc1NGRiZjM0ZjY1MGQxOTg2NyI6IjMxYzg3YmU2ODZiNmY5MGYzZDFiMGVhOTBjNTQxZTE2ZjM0MzAyOTJhNWM0NzU1ZiI6ImVkNDk0MDM3MDBjZWJlYzMwZDEwNTc1MDNiZTdiYWFjYmViNDViY2RmZDlhNDNhMiI6Ijk1Mjc2MzM4MGFmMzI0M2M2YzMyN2YyM2NiNzRmODM2ODkxOWUwYjZiOWMyNTkzNCI6ImZiMjkwNjdiZGIyM2MwZjAxNTM5MzI1MjNlZGYzMmQwZTNjMThlNDY2MTZlMDdmMzlhNGI3ODA5MWVjYTkwMzQ5ZjYzNmZmY2YyNmI2OGE0Y2QwOTAyNDMxZjJhZGE5MWJjYzg2ZGMyMjNkYjRhYTdhNDJlN2NiNTdhODUyMDk1NzA0YTI3ZjlmMDc5NjI4ODBhNTBkMmNlMTZjMTI1YmUxZThkNGY1NGEwY2M1ZWFmNjMxNTBjMzI0MDhkYjZmMzliMjJmYzkzYjg1M2NhYWJhOWU0OTU4MWYxM2E4ODE1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjM4N2UzMWJjZmZmYTUxMzIzYTkyZDkwNzEzYjQzOGExZjRkZWQ2OTcwN2JlM2FhNTE3ZTFlNzJkNDQ4YWJiZGYwYTE3OTg5YjNkZTdjNDNjNjIxZTkwNGY1MmRiNTJhZDgyM2RhYWJmZjljMTBiM2ZjYTkzYWNmYSI6ImUwOGZmZjMyMGE0OTNkNzBlYTRjYzg1YTRjYzYwNDY2NGEwZGVlYzhmNmM3NjY2ZCI6Ijk2OWNhZmMzM2U5OTk2NDgzM2M0ZDBmODhmOTA2ZjU0MjliNWRhYTU1MmY1M2JmMCI6IjhkNmU2ZjA1MzAxZWY1Y2VmYmE3NTJmM2QwZWY1OGEyNTc3NWQ2YjY5ZjZjMTVhNCI6IjcyMjkyYWFhNjlmYmVmNmYwMTBmYTRkNWJiNjNkNmQ3YTU5NTM5NWQ3OWE4YzExMCI6Ijc3ZWFkOTA4NDg0MDQ0NDgyZGE1MjlmOWE2ZjRjYTZlNmQ4ZDQ5OTU0ZDJlMmQ1YzdkYzQ1NWUwM2JlYmY0ODQwMjE2NzM3MjdiYmM0MGFkYzg4MTI2MDAyMDFiOGMyZGU4ZTY1ODE5MTQyMmI4MGQyMzUwMjMyOWM4NGMwY2EwNjFiMjEyOTUyZmRiMmVjZjMxMDZkZDIwZTY0NTVmMWYyMzFlMWRhZDFjZmJmMmZhMDE5ZGZlOWMxNjJhNjcwYWUyMGIyNTJhZTJlNWE0Y2EwZWFhZTFjNjc5YTdmZDNiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIwNjAzMmNkNWVlZDMzZjM5MjY1ZjQ5ZWNiMTQyYzUxMWRhOWFmZjJhZjcxMjAzYmZmYWYzNGE5Y2E1YmQ5YzBkMGU2NmY3MWVkYzQzZTQyYTQ1YWQzYzZmYzZjZGM0ZGYwMTkyMGE0ZTY2OWVkM2E4NWFlOGEzM2IzNWE3NGFkN2ZiMmE2YmI0Y2YzOTVjZTAwMzM0YTljOWE1YTVkNTUyIjoiIjoiIjoiIjoiIjoiNzZmYzc5ZmU5YjUwYmVjY2M5OTFhMTFiNTYzNTc4M2E4MzUzNmFkZDAzYzE1N2ZiMzA2NDVlNjExYzI4OThiYjJiMWJjMjE1MDAwMjA5MjA4Y2Q1MDZjYjI4ZGEyYTUxYmRiMDM4MjZhYWYyYmQyMzM1ZDU3NmQ1MTkxNjA4NDJlNzE1OGFkMDk0OWQxYTllYzNlNjZlYTFiMWEwNjRiMDA1ZGU5MTRlYWMyZTlkNGYyZDcyYTg2MTZhODAyMjU0MjI5MTgyNTBmZjY2YTQxYmQyZjg2NGE2YTM4Y2M1YjY0OTlkYzQzZjdmMmJkMDllMWUwZjhmNTg4NTkzNTEyNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYWFkY2YzMzc3ODhiYjhhYzAxOTc2NjQwNzI2YmM1MTYzNWQ0MTc3NzdmZTY5MzllZGVkOWNjYzhhMzc4Yzc2YTljY2M5ZDgwYzg5YWM1NWE4Y2ZlMGY5OTk0MmY1YTRkMDNhNTc3OTI1NDdlMGM5OGVhMTc3NmU0YmE4MGMwMDczNDYyOTZhNTZhMjcwYTM1ZmQ5ZWEyODQ1YzdlODFlMiI6IiI6IiI6IiI6IiI6IjE3ZDA5ZjQwYTQzNzcxZjRhMmYwZGIzMjdkZjYzN2RlYTk3MmJmZmYzMGM5OGViYzg4NDJkYzdhOWUzZDY4MWM2MTkwMmY3MWJmZmFmNTA5MzYwN2ZiZmJhOTY3NGE3MGQwNDhlNTYyZWU4OGYwMjdmNjMwYTc4NTIyZWM2ZjcwNmJiNDRhZTEzMGUwNWM4ZDdlYWM2NjhiZjY5ODBkOTliNGMwMjQyOTQ2NDUyMzk5Y2IwMzJjYzZmOWZkOTYyODQ3MDliZDJmYTU2NWI5ZWI5ZjIwMDRiZTZjOWVhOWZmOTEyOGMzZjkzYjYwZGMzMGM1ZmM4NTg3YTEwZGU2OGMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjYyY2RhNDQxZGQ4MDJjNzY1MmMwMGI5OWNhYzM2NTJhNjRmYzc1Mzg4ZGM5YWRjZjc2MzUzMGFjMzFkZjkyMTQ1ZmRjODk3YTBjMWM0ODIyMDRlZjA3ZTA4MDVjMDE0YmJkOWJiZjcxNzQ2N2JmNGI1ZGIyYWEzNDRkZDBkOTA5OTdjODIwMWIyMjY1ZjQ0NTEyNzAxMjhmNWFjMDVhMWEiOiIiOiIiOiIiOiIiOiI3ZTQxZjk2NDdhNWU2NzUwZWI4YWNmMTNhMDJmMjNmM2JlNzc2MTFlNTE5OTJjZWRiNjYwMmMzMTQ1MzFhZmYyYTZlNGM1NTdkYTA3NzdkNGU4NWZhZWZjYjE0M2YxYTkyZTBkYmFjOGRlOGI4ODVjZWQ2MmExMjRmMGIxMDYyMGYxNDA5YWU4N2UyMjg5OTRiODMwZWNhNjM4Y2NkY2VlZGQzZmNkMDdkMDI0YjY0NjcwNGY0NGQ1ZDljNGMzYTdiNzA1ZjM3MTA0YjQ1YjljZmMyZDkzM2FlNDNjMTJmNTNlM2U2Zjc5OGM1MWJlNWY2NDAxMTVkNDVjZjkxOWE0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI2YmRjNmNhOGVlZjBlMzUzM2FiZDAyNTgwZWJiYzhhOTJmMzgyYzViMWM4ZTNlYWExMjU2NmVjZmI5MDM4OWEzOGY4NDgxY2M3NzM1ODI3NDc3ZTBlNGFjYjdmNGEwZmE3MmVjYTZmMTU2MDcyMGU2YmQxZmYwMTUyYzEyZWVmZjFmOTU5NDYyZmQ2MmM3MmI3ZGRlOTZhYmNiN2Y3OWZiIjoiIjoiIjoiIjoiIjoiZDVhMmUyZjI1NGI1YWU2NTU5MGQ0ZmQxZmY1Yzc1OGU0MjViZTRiYWNkZWVkZTc5ODk2NjlmMGEyMmQzNDI3NGZkZmMyYmY4NzEzNWUzMGFiZGFlMjY5MTYyOWMyZjZmNDI1YmQ0ZTExOTkwNGQ0Nzg1ZWNkOTMyOGYxNTI1OTU2M2U1YTcxZjkxNWVjMGMwMmI2NjY1NTQ3MTA2N2IwMTAxNmZkZjkzNGE0N2IwMTdlMDdjMjEzMzI2NDE0MDBiYmU1NzE5MDUwZGJhMjJjMDIwYjliMmQyY2RiOTMzZGJjNzBmNzZmZWM0YjFkODM5ODBmZDFhMTNjNDU2NTgzNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMDk2ZWYzNzI5NGQzNjlmYWNlMWFkZDNlYjhiNDI1ODk1ZTkyMTYyNjQ5NTcwNWM1YTAzZWU1NjZiMzQxNThlYzZlMmUwODI1NTM0ZDI5ODk3MTVjYzg1OTU2ZTAxNDhkMWI0ZjcxMjVmNDcyYzI1MzgzN2ZhNzg3ZDVhY2YwMzgyYTNiODljM2Y0MWMyMTFkMjYzMDUyNDAyZGNjNjJjNSI6IiI6IiI6IiI6IiI6IjQ1NDFmMjRmNzU5YjVmMmFjMmI1N2I1MTEyNTA3N2NjNzQwYjM4NTlhNzE5YTliYWIxMTk2ZTZjMGNhMmJkMDU3YWY5ZDM4OTIzODZhMTgxM2ZjODg3NWQ4ZDM2NGYxNWU3ZmQ2OWQxY2M2NjU5NDcwNDE1Mjc4MTY0ZGY2NTYyOTViYTljZmNlZTc5ZjZjYmUyNmVlMTM2ZTZiNDVlYzIyNGFkMzc5YzYwNzliMTBhMmUwY2I1ZjdmNzg1ZWYwYWI3YTdjM2ZjZDljYjY1MDYwNTRkMjBlMmYzZWM2MTBjYmJhOWIwNDVhMjQ4YWY1NmU0ZjZkM2YwYzhkOTZhMjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6ImE3ZGNjZGQ0MzFhZTU3MjZiODM1ODViNTRlYWU0MTA4ZjdiN2EyNWM3MDE4N2MwYWNiYjk0Yzk2Y2MyNzdhYTg5NGM4ZjRiOGUxOTVhNDczNTZhODlhNTBkMTM4OWFiNTUxNzMzZWVlMmU5MjJmNDA1NWU1MzkzOWUyMjJlNzFmYWU3MzBlYjAzNzQ0M2RiMmM3Njc5NzA4YWJiODZhNjUiOiIiOiIiOiIiOiIiOiI5OWJhMjY5MWE2MjJhZmVjYzk0NzI0MThlNmE4ZjlmMWNkYzFlMzU4M2MzYmM3YTJhNjUwYTFhYjc5ZGNiY2NiZDY1NjYzNmM1NzMxNzkyNzZlNzgyNTY5NDIwYzk3NDM4YzA2YmU4OTg4NjdmNjI4YjFjMDFlYjU3MDI2M2QyYzBmMDljN2FhYjUzNmY2ZmJhN2RmNmFhZDE5ZTA1YzIzNmI2NDU2NzQ2NjdjMDNkMWI2YTA0ZDdmYzExMTc3ZmU3ODkzM2IzMDk2NzlmNWJmMjZhNDYzMmI5YTEzZTMxNGM0YmY0NTMyNDI4ZDNkOTVjNjg5MDAyYjZkYzFmYmIxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJjMjg2NDI1ZWNmNTQzYTQ5YmNjOTE5NmIwZGIxYTgwYmM1NGU0OTQ4YWRiYTZmNDE3MTJhMzUwYTAyODkxZmE2OTU3YTY1OWE0ZWMyZTBiN2FkMTg1NDgzYzIyMGZkNjEwOGMyMTI5ODEzZWVhMDc3NmZiYTcyNzg4ZmRmMjcxODc1OWNjM2M0MjA3ZmEyMGE1ZmUyM2FjNmUzMmNjMjhlIjoiIjoiIjoiIjoiIjoiOGUxMDIwYTRmZDg0Yzk5ZTBmYzdlM2Y3Y2U0OGRlNWVkOWVjOWE1YzJjY2Q2MjRkYmU2ZjMwZTJmNjg4YTMxZGM1NTk1NzYzMDM1N2E1ZDQ4Y2EyYTQ1NjI0MWEyOGJmYjE2ZDhiYjAwMDg3NzY5N2E3Y2UyNGQ5YWQ0ZDIyYjBjMTUxMTc5OTZmMWYyNzBiOTRmNDZkN2E5YmRmYTc2MDhmYTFkZDg0OTE3N2E5YjgwNDllNTFiNmI3YTI3NDI2MjM4NTRhMWZkZGI1ZWZjNDQ3ZWVkMWVhMWFlZDZmMDJiNGIyNzU0ZWNmNzFlYTA1MDlkYTJlNTRmNTI0YTdlNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMDI4MThiZDdjMWVjNDU2YWNlNTViZWViYTk5ZjY0NmE2ZDNhYTBlYTc4MzU2ZWE3MjZiNzYzZmYwZGQyZDY1NmM0ODI2ODdkNTA4YzliNWMyYTc1ZjdjZTM5MDAxNGU4Y2YzMTliZmE2Mzk4MGUzY2I5OTdmZDI4NzcxYmI1NjE0ZTNhY2IxMTQ5YmE0NWMxMzNmZmJiYWIxNzQzMzE5MyI6IiI6IiI6IiI6IiI6IjE5YTIzMWZmMjZjMTg2NWNlNzVkN2E3MTg1YzMwZGQwYjMzMzEyNjQzM2QwYzhjYmYxYmUwZDJiMzg0ZDRlYjNhOGFmZjAzNTQwZmJmYTVmNTQ5NjUyMWE0ZTRhNjQwNzFiNDRjNzhiZDBiN2U2OGZhYzllNTY5NWM1YzEzZmQzYjlkYmU3Zjc3Mzk3ODFhNGM4ZjBiOTgwZjFiMTdkOTliY2UxN2NlYjUyYjU2ODY2YWUwMjQ1NmZmZWY4MzM5OWM4Y2Y3ODI2ZjNjNDVjOGExOTMxNTg5MDkxOWQyMGY0MGZjNGUxOGQwN2U5YzhjY2QxNmMzMzI3YjU5ODhmNzEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6Ijc3YTVjODZkOTliZTdiYzI1MDI4NzBmNDAyNWY5Zjc1NjNlOTE3NGVjNjdjNWY0ODFmMjFmY2YyYjQxY2FlNGJlZDA0NGFkNzJlZTgyMjUwNmE2ZDBiMTIxMTUwMjk2Nzc3ODEwMDc0OWYwMWE0ZDM1YzNiNGE5NThhYWZlMjk2ODc3ZTBhY2FmZDA4OWY1MGJjNzc5N2E0MmEzM2FiNzEiOiIiOiIiOiIiOiIiOiI4MzFhNGRhNTY2ZjQ2Mjg5OTA0ODkzZWYxY2MxY2Q0YWQxOWVlNDhmMzg1N2UyYjY5ZTkzNmQxMGFmYmRjMjk4MjJlODVkMDI2NjNkMzQ2ZWYzZTA5YTg0OGIxZDljYzA0ZjRjNGM2ZTNiM2IwZTU2YTAzNGUyMzM0ZDM0Y2EwOGY4MDk3YmUzMDdiYTQxZDAyMGJjOTRmOGMxOTM3ZmU4NTY0NGVlYjU1OTJjMmI1YTIxMzhmN2RlZDlhNWI0NGIyMDBjOGI1YmViMjc1OTdjNzkwZjk0ZDY2MGViNjFlODI0ODM5MWVkYzNhZTJkNzc2NTZjYmU4MzU0Mjc1YjEzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIwZWE0NThjZmY4YmZkMWRkOGIxYWRkY2JhOWMwMTMxN2Q1MzAzOWU1MzMxMDRlMzJmOTZlN2QzNDJlNmM3YjliOTM1YTRiNjZmYzc0YzJhNDg3NTdhOTljMzk5ZTY0ZTM2YzVmMzcwOGU3YjcxNGM0ZWQxMzliNGZhOWU4Yzc2M2FmMDE3NzM0ODQwMDUxMDlhODVlMzM2NTNiYjBjZTk4IjoiIjoiIjoiIjoiIjoiMzczYTM3YWY4NGZkZGVjMTM2NDVhOTc2OGQ2YTc4NWFlNWEyNTg5ZDY0Y2Q5YjM3OTgwZGRlMjU0MTQ5OTIxMGM0ZjQwODMzNWRlMWQ1ODUzNDkwNjRmM2Y1M2EyYjRjNWVjNmRjMmEwOTU5MWY5OWFkOWZhZDUyOGFjODM0NzQxNjRiNDU0OTdiZjE2N2Y4MWU2NmZhMDg0NjNmZmVhOTE3ZjY4OTFlNDhmMTQ5ZmFmYzIwNjIyYmIxMTcyZjM0ODg2ZmViNDVjMjZmZDQ0NmE0YTRlMjg5MWI0YmM1OTQxODY4OTYxNDFhYWFlZWIzMDFiNDllN2MxYTI2ZmVjNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6ImJmYjY4YmU0Y2UxNzU2ZDI1YmRmYWQ1ZTBjMmY4YmVjMjkzNjA5MDFjYzRkYTUxZDQyM2QxNTkxY2M1N2UxYmE5OGFmZTRiZDE5NGMxNDNlMDk5NjgwYzUwNGNjZWFhYmI5N2NhZjIxMGU4MjQ5OGMzNDA4NzkwZDQxYzMyMGRkNGE3MjAwNzc3ODM4OWI0NGI3YmMzYzFjNGI4YzUzZjgiOiIiOiIiOiIiOiIiOiI0MDllMGFhOTQ5ZmIzYjM4MjMxYmY4NzMyZTc5NTllOTQzYTMzOGVhMzk5MDI2Yjc0NGRmMTVjYmZlZmY4ZDcxYjNkYTAyM2RjY2UwNTlhODhjZjBkNGI3NDc1ZjYyOGU0NzY0YzhiZWYxM2M3MGNmYmJiYjZkYTJhMThhYWJjYWQ5MTlkYjA5ZDA0ZmM1OTc2NWVkYjE2NTE0N2M4OGRkNDczYTBmM2M1ZWUxOTIzN2NhOTU1Njk3ZTAwMWJhNjU0YzVlZTBiZDI2NzYxYjQ5MzMzMTU0NDI2YmM2MzI4NjI5OGE4YmU2MzRmZTBkNzJjZmRlZWYwZjNmYzQ4ZWNhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiNGY2ODgwYTY0NjEwMDA0NDYzMDMxZDY3ZDc5MjRmYTQ0NmMzOTEzOGQ0ZDQxMDA3ZThkZjNkNjU2OTFhOTM2NzZiMzNiMmMxMzYwMGY0YjFkZjZjYTNkMTk2MGU4ZGQ0NTdiODdiOGM4ZjQ4MzEyYjUzMzNkNDNiMzY3NzMwYzBhNWFkNDcyNWExNjc3OGZjYjUzZmUxMzZkMTM2Y2JmZCI6IiI6IiI6IiI6IiI6IjczZDBmMzI0ZWQxODZlMmFkMDZiZDE4MDBlMjYyYmRiZGE3OWJhNTRlNjI2NzYxYmQ2MGY3NGY0M2UzYmI2Mjk1OGVjMWUyZjFkOTQwYWYxNjNlMWNhZGMxMjRlN2ViYWJhMmY3MmU2N2VmZDc0NmM3ZjZkMGNhZDUzZWYwM2Q4NTlkOTNjZmY3NzhhMzJlZTViZTE3MmZlN2ZkYmRjMjMyZGVkMzYwZDcwNGE2ZmEwZjcwYmViZTk0MmU1NjQ3ODM0NTQ5MmY0OWRjNWM2ZmMzNDZiODhhNTg5NDdhZDI1MGU2ODhlOGM2MjZmZTFlZmU3NjI0NjIwZTU3MTk3NmUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJhYWUzNTJlMTExODQzMjE5Y2FlOGY3MGU3YjhmNmViOWJiNTNkMjQ2Y2JlYzFlNGYwN2Q0Mjc1NzE0MzI5NWI0Yjg0NDg1ZGNjZDFiZjkzMjEwZTMyMmVhZmNiZWJjZDlmOTIzN2YwMGQ3NDRkOGZiZmYyMWI5ZDAwNDNjMjU4ZTg3MzE4MTdlNmE1ZmI3YjRiZjUwMTE2ODBlNWJjNjQyIjoiIjoiIjoiIjoiIjoiY2ZiMjhiOTM1MjJjN2Q2MWQ4ZDNjZTNmMDgwZTQzNWU0YzgzYzdlMTNhOWRhYjc4OGRiOGZlZjA0MDcyNjdhMTRmYmM5MzI0ZTA5MGUyNGRmNTQ5MWZlZGZhODExMTY4Njk5ODM5MzhkNGQ0ZDczMjRhMzEwYzNhZjMzYTZmNzkzOGY2MDJjNWU0ZTYzZjE3NzFjZGFhYmRhYjA3ODJiNWFmZmI1NGViNTMwNDdjMTA5YTk2MDY3MzlkZDAwNjViZDIxZWNhMzMxMzI5ODY1NTQ4NzgzNTRmNWY5Zjg1MmU2NzRkZDY5MDE2M2IwZmY3NGM3YTI1ZTZiYWU4Y2UzOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjU4OWU3OWUzMzliN2QyYTFiODc5ZjBiMGUxYTdkMWFkMjQ3NGVhYTgwMjViMDcwZjFmZmE4NzdiNzEyNGQ0ZmYwOTYxZWQ2NGRiZDYyMDY1ZDk2ZTc1ZGU2ZDJmZjlkNmU5MjgzODhkM2FmNDhjMjk2ODUyN2E0ZDJmOWMyNjI2ZmJjM2YzZjVhNWQ4NGUwNTgzYWI2Zjc4ZTdmOGIwODEiOiIiOiIiOiIiOiIiOiJmY2U2Y2VkMWVjZjQ3NGQxODFhYjMzMWY3OWMzZDJjYzhhNzY4ZWMyODE4ZGU1YjNmYzdjZjQxODMyMjcxNmQ2YTY4NTM3MzM1NjFhNDk3YzBjMjVjYjI4OGQyYzlmY2ZiY2E4OTFiYWZkNWE4MzRjODVmMzYwM2Y0MDJhY2YxYTdiMWVhOTJkYjg0N2VkNWMyNTJhODYyYWQ0YWI1ZTI1OTcxNWYxZmM4MWRhNjdmNTIzMGJmOGJlNTBlZTgwNjk3NTgwOTVmN2QwZTU1OWUwM2YyYzYwNzIyOTBlNjE3OTQ0NTg0Mzc2MDllNDczZWI2NjU4MGNkZGFhZDE5YjcxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiNzE0Mjc3ZDQwOGFkODdmZGUzMTdmMGE5NDczMmZjZTYyZjEzNTJiZGM5MDkzNjY3M2I0ZjFkYWEwOTI1YWEyNmQxNjU4MmE5OWYyMzAxMGI0MjQ4Yjg4ZDg2NDg1NDE5YmQ5ZmM3Y2IyZmQ1MDYzYjJjM2MwYzRmMzQ2YWQyZTM4NzkzNzFhOWM4MDVlNTliOWYyY2QyY2MyYTQwODk0ZiI6IiI6IiI6IiI6IiI6IjYyZWY3YTQzMTI4ODI1MmUwZDczNmMxZDRlMzZjYzlhYzM3MTA3ZGNkMGQwZTk3MWEyMjQ0NGE0YWRhZTczYTQxZWZmMGIxMWM4NjI1ZTExOGRiYzkyMjYxNDJmZDBhNmFhMTBhYzliMTkwOTE5YmRhNDRlNzI0OGQ2Yzg4ODc0NjEyYWJkNzdmYjM3MTZlYTUxNWEyZDU2MzIzN2M0NDZlMmEyODJlN2MzYjBhM2FlZjI3ZDM0MjdjYzdkMGE3ZDM4NzE0NjU5YzM0MDFkYmM5MWQzNTk1MTU5MzE4ZWJjYTAxYWU3ZDdmZDFjODlmNmFkNmI2MDQxNzNiMGM3NDQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMDVhYzlmYzRjNjJhMDJlM2Y5MDg0MGRhNTYxNjIxOGM2ZGU1NzQzZDY2YjhlMGZiZjgzMzc1OWM1OTI4YjUzZDJiODlhMTc5MDQ5MjJlZDhmMDE3YTYzMDQ0ODQ4NTQ1Mjc5MTEyNmI4YjUyZWUxZmQ5MzkyYTBhMTNlMDA4M2JlZDQxODZkYzY0OWI3Mzk2MDdhYzcwZWM4ZGNlY2Y5YiI6IiI6IjQzYmFjMTNiYWU3MTUwOTJjZjdlYjI4MGEyZTEwYTk2MmZhZjcyMzNjNDE0MTJmNjliYzc0YTM1YTU4NGU1NGMiOiIzZjJmZWQ0YjY4ZDUwNmVjZWZhMjFmM2Y1YmI5MDdiZWIwZjE3ZGJjMzBmNmZmYmJhNWU1ODYxNDA4YzUzYTFlIjoiNTI5MDMwZGY1MGY0MTA5ODVmZGUwNjhkZjgyYjkzNWVjMjNkODM5Y2I0YjI2OTQxNGMwZWRlNmNmZmVhNWI2OCI6IjAyZGRmZjUxNzNkYTJmY2ZmYTEwMjE1YjAzMGQ2NjBkNjExNzllNjFlY2MyMjYwOWIxMTUxYTc1ZjFjYmNiYjQzNjNjM2E4OTI5OWI0YjYzYWNhNWU1ODFlNzNjODYwNDkxMDEwYWEzNWRlMzMzN2NjNmMwOWViZWM4YzkxYTYyODc1ODZmM2E3NGQ5Njk0YjQ2MmQyNzIwZWEyZTExYmJkMDJhZjMzYWRlZmI0YTE2ZTZiMzcwZmEwZWZmZDU3ZDYwNzU0N2JkY2ZiYjc4MzFmNTRkZTcwNzNhZDJhN2RhOTg3YTAwMTZhODJmYTk1ODc3OWExNjg2NzRiNTY1MjQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMWJlYTMyOTZmMjRlOTI0MmI5NmVkMDA2NDhhYzYyNTUwMDdjOTFmN2MxYTUwODhiMjQ4MmMyOGM4MzQ5NDJiZjcxMDczMTM2YTVjYzFlYjViNWZhMDllMTc5MGEwYmVkZDcxNDMyOWYzZmJlYTFkZjlkMGIwYjBkODhkZmUzNzc0YmViNjNkMDExOTM1OTIzZDA0OGU1MjFiNzEwZGM2ZiI6IiI6IjRlZjg3MmZkMjExYTQyNmVhMTA4NWFiMzllYjIyMGNjNjk4ZmRmZWFiZTQ5Yjg4MzVkNjIwYWI3ODg1ZGU3YTQiOiJkNzRkMTY2OWU4OTg3NTg1MmQ5Y2NiZjExYzIwZmUzYzEzYTYyMWViY2IzZjdlZGVlYTM5YTJiMzM3OWZkY2Y1IjoiMGM4YWE2N2NhMzEwYmQ4ZTU4YzE2YWJhMzU4ODBmNzQ3MjY2ZGJmNjI0ZTg4ZWM4ZjllZTliZTVkMDhmZGViMSI6ImNlOTViOThmMTNhZGNkZjdhMzJhYTM0NzA5ZDZlMDJmNjU4YWU0OThkMmFiMDFjZTkyMGY2OWU3ZTQyYzRiZTFkMDA1YWNmMGNhNmIxNzg5MWRmYWZjNjIwZGQ0Y2QzODk0Zjg0OTJhNWM4NDYwODliOWI0NTI0ODNlYjBiOTFmMzY0OWVjMGI2Zjk4ZDFhYWFiYzJlNDJjZDM5YzJiMjUwODFiODVhYjUwY2I3MjMwMDdhMGZkODM1NTBmMzJjMjEwYjdjNDE1MGI1YTZiYjNiMGM5ZTNjOTcxYTA5ZDQzYWNiNDhlNDEwYTc3ZjgyNGI5NTcwOTJhYThlZjk4YmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYTdlYTQ0OWI0OWRiNDg2MDFmYzNhM2Q1ZDc3MDgxZmFiMDkyYjhkNDIwZWQxYjI2NmY3MDRmOTQzNTJkZDcyNmQxMWExNTliNjBhZjhkMjBhMGUzN2QyN2U2Yzc0YWEzNTA5MTZhYjQ3ZThjYjVkYzg0M2Y5ZmJhODA2MzkxMDM3MTFmODZiZThlM2FhOTRmOGE2NGEzZmUwZTZlNWIzNSI6IiI6ImUyYmI2NzY4MTIwNTU1ZTdiOWUwZDU3MzUzN2E4MmY4ZjMyZjU0NTYwZTEwNTBiNmFiYjE1ODhmYjM0NDFlNjYiOiJhNTBjZWM5ZDFlY2RkYjJjMTYzZDI0MDE5ZTgxYzMxYTJiMzUwY2NkM2FkODE4MWZkMzFiYjhkMWY2NGZhNTBlIjoiNTkxZGJiZDQ4YjUxYWJjZWQ2N2Y5YzYyNjljZjAxMzNjZDNkY2JiNWNmYWZjYjZlZjc1ODU2OWM1NTVhNTc3MyI6IjBhNDY0YWJjYzg2ODUxNTgzNzJkNTQ0NjM1Yjk1M2ZjYjFkMzgyMWMzMGFhYTkzOTgyZjliNzg4OTM1ZjAwZjg4MTE1YWFkNjFkNWNlZTAwM2IzZDFjYjUwZjNlOTYxYTUwMWUyZGQwZmM3ZTE3MjQ3NzhiMTg0YTRiZGY5ZjY0ZTExMGRkYTc0NDZlNTU0NGEzMGJkNDlhNDAwZWExYTU0MTE4MDBlMWVkZmVlYTM0OTMyMzYxOGFmYzVkYzU3ODJkYzRiNzFkMmRhNGQ2YTQ3ODVmOGRkMzQ2ZmViOWM4NzQwZmZkMjZiZjY0NGUzZTQzMjNmZjI0YzMwYjlmMTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMTQ2ODNlYzUwOGEyOWQ3ODEyZTBmMDRhM2U5ZDg3ODk3MDAwZGMwN2I0ZmJjZmRhNThlYjdjZGFiYzQ5MmU1OGIyMjQzZTc0NGViOTgwYjNlY2UyNWNlNzYzODNmZDQ2MTg1OTBlMGVmNGVlMmJkYWU0NjJmNzZkOTMyNGIzMDAyNTU5Zjc0YzM3MGNmY2NmOTZhNTcxZDY5NTU3MDNhNyI6IiI6IjllYTNjY2NhMWU4ZDc5MWQyMmZjZGE2MjFmYzRkNTFiODgyZGYzMmQ5NGVhOGYyMGVlNDQ5MzEzZTY5MDliNzgiOiIxNjM2NmE1NzhiNWVhNGQwY2I1NDc3OTBlZjViNGZkNDVkN2NkODQ1YmM4YTdjNDVlOTk0MTljODczN2RlYmI0IjoiYTY4Y2FhMjlhNTNmMWJhODU3ZTQ4NGQwOTU4MDVkYzMxOWZlNjk2M2U0YzRkYWFmMzU1ZjcyMmViYTc0NmI5MiI6ImM0ZTc1MzJlZTgxNjc4OWMyZDNkYTlmZjlmNGIzNzEzOWE4NTE1ZGJmOGY5ZTFkMGJmMDBjMTJhZGRkNzllYmJkNzYyMzZmNzVmMmFhNzA1YTA5Zjc5NTUwMzhlYmZmMGQ1NjY5MTFjNWVhMTMyMTRlMmMyZWViNDZkMjNhZDg2YTMzYjYwZjdiOTQ0OGQ2M2VlYzNlMWQ1OWY0OGIzOTU1Mjg1NzQ0N2RjNWQ3OTQ0NjY3YTIzMGUzZGJmYTMwY2EzMjJmNmVhY2FmNzUzNmEyODY3MDZhNjI3YzUwODNjMzJkZTA2NThiOTA3Mzg1N2MzMGZiMWQ4NmViOGFkMWIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiZmEyNjFmYjIzMGUyODIyNDU4NTMyY2EyZDVjMzk3NTg3NTBlNjgxOWE2ZmNlYmVmMTA1NzliYTk5NTA5Njk1OTU2NGUxYzlmYmNiMTI4NzhkZjJiZDQ5MjAyY2JmODIxYmY3ZGUyOWU5OWU3ZjBlMWI5Zjk2ZjNiMTkwMmZiNDA0OWM4YzYyMzRkMjBkZTgzMTZlYmU2NmQ5NzcyNTQ1NyI6IiI6IjhiNzMyNjYyMWY2YWZiZDQ0YTcyNmRlNDhkMDNiY2M1MzMxZjczMDYwMjZjMjI5ZWE5NTIzNDk3ZmJlYWE4OGQiOiIzM2IwMGIzMTYyM2Q2MTYwYzRjNjc0MDM2M2E5NjQ4MWJlMTRiMTliYzQ3YmU5NTY0MTIyNzI4NGMzNjY5MjJhIjoiMmQ4MTJjODIwMzU3NTc5MGFkNmI2ZjJlZDkxYTQ5ZDU3NDYwZGU3NzlhM2U4ODFiZWYzYmUxMmU4NzY2ZGM5MSI6IjU1NzRlMGI0ZWZjMTdlOGNlMTM2ZTU5MmJlYWJmZTMyNTUxMDcyYmRkZDc0MDkyOWU2OTg0NjdiNDBiMzk5MWYwMjhhMjJjNzYwZjcwMzQ4NTNjYzUzMDA3ZTM3OTNlM2M0YTYwMGQ5ZTlkOTQ1MjhmOGRjMDlhZWJhODYxNDZjZGRlMmI3ZjcxMjU1YWUwZWZjNTI5YjQ5YmUyMjA1OTc5ZGJhNjUyNWJmZTE1NWU4ODE5ZThlMmFlZWFhMjg1NzA0MjQyZGE5MGI0YzQ1MzUxMDFjYzQ3ZDk0YjBlMzg4YTFiMmU2M2FkMGNiZTE1OGI5ZTFiYmFlOWNjMDAwN2MiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiNjFmMTQ3MWNlZDU2YWEwNGM1N2UxYjUxMjMwN2Q0Y2I5MjQ5N2Q5NTkyZDdlOWUzNTM1NmU5OWQ1ODVjYWIxYjg0NzE0ZTk2MGM0MDNhNGZhYzA2YjI4MjhjYzU2NGQ5N2JmOTdkYjNjMTAyZWRjODE1OTZkNDc1NzA0NWZlNmJkYzAwOGYzNTc5MmZjNjI5MGI3N2Q4ODljMDljMzNhOCI6IiI6IjViOGJkYzQxZjc2ZDk4Y2ZhNzFlZDk3NmVhMzk5NDcwNjM3NWM4ODQxYWRiOGI2YjNiNjQxOGUzMTMyZTg4MzIiOiI5NGM4YThmZGYzOGE2Y2NiODU3MWM4OTQyMGQ4OTlhZGFiMTY5MjE0YmIwZGZjZDQzYTA0NjIyZTI4OTkzNWIyIjoiOGE0YjQ2ZTBhN2E1NTkwNzM2NWY4MmQ0YWI5Mzc2NTA5YmQ0NDcyOGNhYjhjYmFmYjBkYTkwMTAxMmFkOGRjZCI6IjkzM2ViMTU5YTZhZjc0NTViNjBlNDA1ODZjMDY0ZjA1ZjE5NzBmNTY0MjgxYjFlYmM0NjYyNzAxYWMxZjI5OWU0ZWI5MDhjNGFmY2IyZTA2NTE5MTI4MWFiNTc2ZjY4NGFlZmVkZDY5MDRiYWQwNGQ5NmJkOTNjMDUxNmM2MmE0OTZjMzA3M2EwY2RhMDY3NmExMWNjMDg4NjZiMGNjNzRmNjJjYjlkM2RiNDg2NzNiMmMzZmJlYWRhNjlmOTIyYjRiNzk1Y2NiYTIyZGYxMmVmNzEyNTkwOTM4MWY3ZDY4MWY2YjljYWJhMDJmYjkxM2M1NDM3Yjk4YzA0MGM1NzYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYTFkNWJiN2Q3MDYyMWRlZTZiNjY4YjI4YzU2ZDU2MTBjMmY4Y2VkMzAyODRjYzNlMGU0OGRlMzMxYWYwNTA2Mjg4YTQ5ZTNlNTRjNWVhNTRjOThiOTVkZTgxYmNjODA3YjRlMjQyNmU5OGY2ZWVkOTdhNmNkZjY5MGE4OWVlMTA5ZTg0YzNkY2ExNmM4ODNjMjZmYTRhYzY3MTYzOGQ4ZCI6IiI6IjViZDFlMDg2ZWQyMjhjZmQ4YjU1YzE3MzFmZWE0MGMzYTYzZDAyMjU5OWNhMmRhNGJiMjMxMThmNDgyMWJhNjIiOiJiNzU0YjUzYWMyMjZlOGViZTQ3YTNkMzE0OTZlYzgyMmRlMDZmY2EyZTdlZjViZjFkZWM2YzgzZDA1MzY4ZWMzIjoiZmE3ZTc2YjI4MDVkOTBiM2Q4OWZmZjU0NTAxMGQ4NGY2N2FhM2EyYzllYjJiYTIzMmU3NWY0ZDUzMjY3ZGFjMyI6ImRmNmIyNDYwNjg4ZmE1MzdkZjNkZGZlNTU3NWZjYTVlYjhhYmFkNTZjYmM0ZTVhNjE4YTJiNGE3ZGFmNmUyMTVjM2E0OTc5NzRjNTAyZjlkMGVjMzVkZTNmYzJlYTVkNGYxMGRlOWIyYWVlNjZkY2M3ZTdhZTYzNTc5ODMwOTU5NTliODE3ZjAzODNlMzAzMDc3MWJkMmVkOTc0MDZhY2Y3OGExYTRhNWYzMGZhMDk5MjI4OWM5MjAyZTY5ZTNlYjFlYWJlMjI3YzExNDA5ZmY0MzBmNmRmY2ExYTkyM2E4YjE3YmM0Yjg3ZTkwODAwN2Y1ZTk3NTljNDE0ODJiMDEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiNjhmMjFkMTQ1MjVkNTYyMzNjN2UyNjM0ODJkMzQ0YzM4OGE4NDAxMDNhNzdmYjIwYWM2MGNlNDYzY2FiZGM3OTU5ZmE4MGFlNTcwZjNlMGM2MGFjN2UyNTc4Y2VjM2NiNzU4NGI0MTY2NTMwNDQyZjA2ZTI0MWRkOTA0ZjU2MjE2N2UyZmRhZTMyNDdhYjg1M2E0YTlkNDg4NGE1ZmE0NiI6IiI6ImY2YTU0ODJmMTM5MDQ1YzUzODljOTI0NmQ3NzJjNzgyYzRlYmY3OWMzYTg0YjVjZjc3OWY0NThhNjlhNTI5MTQiOiI5ZDM3YjFjZTk5ZjgwNzk5OTNkZGYwYmQ1NGJhYjIxODAxNjY4NWIyMjY1NWE2NzhjZTQzMDAxMDVmM2E0NWI3IjoiNGM5N2M2NzAyNmZmNDNjMmVlNzMwZTdiMmNlOGNjZTQ3OTRmZDA1ODhkZWIxNjE4NWZhNjc5MmRkZDBkNDZkZSI6ImU1Zjg4NzRiZTBhODM0NWFhYmYyZjgyOWE3YzA2YmI0MGU2MDg2OTUwOGMyYmRlZjA3MWQ3MzY5MmMwMjY1ZjZhNWJmOWNhNmNmNDdkNzVjYmQ5ZGY4OGI5Y2IyMzZjZGZjZTM3ZDJmZDQ5MTNmMTc3ZGJkNDE4ODdkYWUxMTZlZGZiZGFkNGZkNmU0YzFhNTFhYWQ5ZjlkNmFmZTdmY2FmY2VkNDVhNDkxM2Q3NDJhN2VjMDBmZDYxNzBkNjNhNjhmOTg2ZDhjMjM1Nzc2NWU0ZDM4ODM1ZDNmZWEzMDFhZmFiNDNhNTBiZDllZGQyZGVjNmE5Nzk3MzJiMjUyOTIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiNzk4ODE0NmNiZjk1OThkNzRjZjg4ZGMzMTRhZjZiMjVjM2Y3ZGU5NmFlOTg5MmZiMDc1NjMxOGNlYTAxOTg3ZTI4MGJjMWFlOWJmZGY4YTczYzJkZjA3YjgyYTMyYzljMmJiYzYwNzA4NTIzMmU1ZTEyY2NmN2MwYzE5YTVkYzgwZTQ1ZWI0YjNkNGExNDdmZTk0MWZhNmMxMzMzMzQ3NCI6IiI6ImYzZjVjMWJiNWRhNTkyNTI4NjE3NTNjNDk4MGMyM2Y3MmJlMTczMmY4OTlmZGVhNzE4M2I1YzAyNGM4NThhMTIiOiI0NGQwY2ZjNGY1NmFiMzhmYTQ2NWE2NTkxNTFiMzQ2MWI2NWIyNDYyZDFhZDZiMzQ2M2I1Y2Y5NmFkOWRjNTc3IjoiMzRmYjlhM2NkYWNjODM0ZmY2MjQxNDc0YzRmNmU3M2VkNmY1ZDllYTAzMzdhYjJiNzQ2OGYwMWFkOGEyNmU5MyI6IjRjYWVjOWU3NjBjNGQ0NjhlNDc2MTNmZTUwZGU0YTM2NmFlMjBiYTc2NzkzNzQ0YTRlMTQ0MzNlYTRkZTc5ZGMxODg2MDFlYjg2YzgwM2IwOTQ2NDFhYjIzMzdiOTlkNDU5ZDM3ZGVjYzdkMjc0NzMwNTdiZTQ1YmE4NDg4NjhlZTBmYjVmMWNmMzAzZDJmY2QwYjNlMGMzNmY2NWE2NWY4MWIzZmVlODc3OGExZjIyMzAyZTI1ZGZlMzRlNmQ1ODdmYTg4NjRlNjIxMTIxODgwZjdjZDU1ZjM1MDUzMWM0Y2UwNTMwMDk5ZWVjMmQwMDU5NzA2ZGNkNjU3NzA4ZDkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMWM5NzRjOTUzZmEyYTA1N2M5ZmM5NDA5YTY4NDNmNmY4MzlhYTU0NGJjYTRmYTExZTQ4YWZkNzc5MzFkNDY1NmVkN2MwODI4NTQ2NGFmN2E1ZGJkYzEwYjk0NGExMjcwNzgxNDZhZDEzNWFjYjgzNjM2MGQzNmFmYzUwNjUzZGNjMzZjMjE2NjJkYTJhNmY2YWUwNTIyMmU3NWYzNDAwMCI6IiI6IjI2M2M0OTg0YzIzOGRlZDMzM2M4NjQ3Mjg2NjM1MzgxNzM3OTUwMjE1NzE3MmNmYTUxMzcxZDgyYjFlZmQ3YjUiOiI3OWI1OTE1MjlmOWEyNmEwZDdjOGY4ZmQ2NGUzNTRiMGMxMzRlZjFmNzU3ZTQzZjk0NjNiM2RiYjdhM2RhMWFiIjoiN2Q4ZjcyMDRiMGI1NDAxZGRjZTllODhkY2Y1ZmFjYjlhNDQ2NjBhOWY1ZjFjODYyNzQ4ZTcyNjljMjlmNzk2NCI6IjcyZTJjYTI1N2I5ZWRhZjU5YjUwZTA1YTE0NGY1NmZiNTE3ODMyZmI5YWQzNDg5YjFlNjY0ZTNkNTQxMmNiZjZiMjg4M2U4OTE3MDNiMmU3M2FmZjlhYjU2ZGExMDA5ZmNkZWYwMTBhYjRjZGFiOTk2Nzk1YzhmN2M0N2ZiMTE5MmJiMTYwMzUzOTk3YWQzOWQ3ZDVmZDBlMmVmYzkxMDNhN2MzZjE1ODI0NmFmZDUzZmU1M2NhNjc4MmY4MDk2OThlZjVmMWYwZDg1NTM2NzgwYTNmZDZhOGJhZmE0NzU4OTFjMDkyMTMwODhiZDFhM2RjMTY5MjU3YzM0YTUxN2EiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjU2MjE2ZDcxOTg0YTc3MTU0NTY5MTIyYzc3N2NlNTdlMWQxMDFhNjAyNWIyODE2M2EyNTk3MWQzOWMxYzVkMGY1Y2QxNDhiYTdlNTRmNDk3NWFjOGUzZTBmOWI1ZDA2YTM1ODBmOGNhOTc0NjI2Yzc3MjU5YzZlMzczODNjYjgxNTBiNGQwYWIwYjMwZTM3N2JlZDBkYzlkMWZmMWExYmYiOiIiOiIxNTYzM2UzYTYyYjIxNTk0ZDQ5ZDNkMjZjNGMzNTA5Zjk2MDExZDRkYmI5ZDQ4YmJiZWExYjYxYzQ1M2Y2YWJlIjoiNjA2OGVhY2E4NWMxNDE2NWIxMDFiYjNlOGMzODdjNDFkM2YyOTg5MThjN2YzZGEyYTI4Nzg2YWIwNzM4YTZmYyI6ImUzNGY5MmQyYjZhZWVlZWE0ZmY0OWJmZTdlNGIxZjQ2MmVhYmI4NTNmMGU4NmZiYWUwZThiM2Q1MTQwOWNlNDkiOiI1ODdmZGI4NTZhYmMxOWVkZTkwNzg3OTdlY2I0NDA5OWUwN2FhZGNkODNhY2RjYjJiMDkwNjAxZDY1M2Y0YTE0YzY4YWIyZWJkZGE2MzU3OGM1NjMzYTgyNWJhZTRjMGM4MThmODlhYWM1OGQzMGZkN2IwYjVkNDU5YTBmM2Q4NmZjYWQ3OGY0YmIxNGRmZmYwOGFkODFlNGVhOWY0ODdjYjQyNmU5MWQ2ZTgwZGZlZDQzNmJhMzhmY2U4ZDZmMjFjYTIxNTFjOTJkZDVjMzIzYjA3N2Q2MTM5YzY2Mzk1NTU4ZjA1MzcwMjZjNGEwMjhhZmZhMjcxZWY0ZTdlYTIzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI4M2ViNDhiZWRjMWU5Mjk0ODY2YWI4ZTUzMjJlZjgzZjZmMjcxZjgxODhlOGZkYWJlNTgxNzc4OGJkMzE1NzBkZDZlZDkwYmM2OTIyMzdmMTMyNDQxZWRlODU3YTY2MjlhNGU1ZTEyN2Y5OTJiZDVjYTc5ZWU1NmJiOGE5YmNjZjc0YzIxODE0YmZhZjk3ZmZkMDUyMjExZTgwMmUxMmU0IjoiIjoiODQxMzZlNDAzZDllZDdmNDUxNWMxODgyMTNhYmNmYWNhMzU3MTVmYTU1ZGU2ZDczNGFlYzYzYzQ2MDZhNjhmMSI6ImZlOWQ4ZWYyNmUyZDJlOTRiOTk5NDMxNDgzOTJiMmIzM2E1ODFiNGI5N2E4ZDdhMGVjZDQxNjYwYTYxZGQxMGIiOiI1OTRkYWQ2NDIxODNjZTJjZGM5NDk0ZDZiY2IzNThlMGU3Yjc2N2M1YTBmYTMzZTQ1Njk3MWI4NzU0YTlhYmQ1IjoiODY3MTVkNDNiYTk1ZmJiY2E5YjcxOTNlYTk3N2E4MjBmNGI2MWJhMWI3ZTNiOGQxNjFiNmM1MWIwOWRmZDUwNDBkOTRjMDQzMzhiMTRkOTdlZDI1YWY1NzcxODZiMzZhZTcyNTFhNDg2YzhhMmQyNGEzNWU4NGE5NWM4OWQ2NjlkNDllMzA3YjRhMzY4YjcyMTY0MTM1YWM1NGQwMjBhOTcwYTE4MGRmYmVkMTM1ZDJjODZmMDEyNzA4NDZkNTMwMWJkNzNkYjJjNDMxYThhYTEwYTBhM2QwM2QxNDZlNWZhZmI5YTJhYTBiNGVmYzgwZWRhYjA2ZmYzYjUzMjIzNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYmEyYzk0MjAzZGFiMmU2NDk5ZDhjNTBkY2E3YjVjMzRhNmI0NzY0ODM0Zjk4MTY2MzFhYTIxYjlmOWMzNzM2MTY3ZGIxMzNiZGVmYjI1ZTM5NTA4NWJjZWVlNWEwYWZjZmE4OTg0ZDE2ZDM1MzAyY2RhMzVhM2EzNTVhYjkyNDJlYzk2ZmVjMDY1MmQzOTI4MmQ0YTBhYmYwYTgwZGY4NyI6IiI6ImI2ZmVkMTAyNTVhM2ZlYTY3NzJhZTFhZTZkOWY2Y2JiOWJmYWEzNDgwNGU1OGE1Yjc4NmY5YmM2MGIzNDhjY2QiOiI0NDVlMDcyMjQ0ZWRjNzE2ZDM1MjhmMGUwYTIwZmYwY2Q4ZjgxOWMwZDAzMTczNmM4ZGExMjI3NDhmMjRkNmM2IjoiMWY4NTZlNDAzYzRmYTAzNWJhYzlhYTgxYTIwZTM0N2M3ZDhiMjEzYWFiNjk5ZDY5ZDlkNjE4NmEwNmFjNDVjMSI6Ijc5ZjMzZmMzNmIzYjQ3ZDlhYzgwNWJkYmJlNjk5OTA5YThkMGJlYjY4OWE4YjI3MjNjMjkxYmQ1YmY3ZjNjZTYxMzQzZDQ3MjJhMTRlNGFkZDM2MzEyZGJiMDU5NDkxMGM4ODI4YWZmMWFiYzE1OTkxNWQ0OTgxMDZmOWZmYjMxMTQ3NDc4ZDhjOWVmNzVkMTUzNmJhNTAzNjUwNmIzMTNmNmU4NTAzM2Y4ZjZmZWEyYTRkZTgxN2M4NjdhNTkzNzhjNTNjNzBhMmYxMDgyNzVkYWVkZDQxNWMwNWI2MWM0ZmQ1ZDQ4YzU0YmU5YWRiOWRlYTZjNDBhMmVjOTllZTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjBkYjRjNTE0OTJkYjRmZTk3M2I0YmIxYzUyYTFlODczYjU4ZmM2YmIzN2EzYTRiZmMyNTJiMDNiOTk0NDk1ZDFhMmEzOTAwZjE2OWJiYTNmNzhhNDI1MjZjNzAwZGU2MjI5ZDVhYWIzNTY4NzY0NDdlM2EyMGQ4MWM3ZTNmYzY5NzVlMmI5ODQxODBhOTE0OTMwNDQ0NDI5OTllMWNhM2EiOiIiOiI0MGIzNDE4M2I0ZTcyY2RmZjU5NTJiMzE3YjNkNDU5NDNkMGZkY2ZhMDUyN2YzNTYzMDU1ZjdjNzNhZThmODkyIjoiZGM5NDIyMGM5OWZmYjU5NWM3YzRkNmRlOGRlNWE2YmI0YjM4ODQ3MTY5ZTI0YTU1N2VmNmQ4NzlhZDg0MTQ5ZCI6ImIyMzc2NjI2ZmQyZjUyMThiM2VkNGE1NjA5YjQzYWEyNGQzNzFjZDIxNzZlYTAxN2MyYjk5Y2Y4NjgwNjAwMjEiOiJmMGJkNmJjNGM1MDZkOTQyN2EwOTM1MmQ5YzE5NzBiMTQ2MzYwNzMyODQxYTYzMjNmNGNiNjAyYzg3ZGVkZmI1ZmY3ZTY5NjRiOTE0NDkzM2FmM2M1YzgzMDE3Y2NkNmE5NGJkY2E0NjdhNTA0NTY0YWFhN2I0NTI1OTFhMTZmZjZhMWU3ZTk0ZGRjOThmOWE1ODAxNmNkY2I4Y2FhZWQ2YzgwNjcxYmE0OGNjODFhODMyZDM0MTA5M2RkYTFkNGU1MDAxZWM2YmY2NjM0OGIyMWUzNjkyYTEzZGY5MjUzOGFkNTcyYmIyMDIzODIyMDcyZmM5NWY5NTkwMjkzZmZjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI1OTM4NDVmMGFkZmVmZmE3YzE2OWY4YTYxMDE0N2FlOGEwOGMwMDcyZmMwYzE0YzM5NzdkM2RlMGQwMGI1NWFmOWUwZWIyNTA3MzQyZWUwMWMwMmJlYWRlZTdkMDc3YmRhZWZlNTkxNjk3ZWFiNjc4YzUyZTIwMDEzYWE0MjRiOTVjZmQyMTdiMjU5NzU3ZmJlMTczMzU1NjNmNWI1NzA2IjoiIjoiY2JiNWJlMGVmOWJmMDU1NWVlNTg5NTVjNGQ5NzFmYjliYWE2ZDYwNzBjM2Y3MjQ0YTRlYjg4YjQ4ZjA3OTNiZiI6IjZkZDg3ODM5NGFiZGMwNDAyMTQ2YmEwNzAwNTMyN2M1NWY0ZDgyMWJmZWJjYTA4ZDA0ZTY2ODI0ZTM3NjBhYjQiOiJiYTg2YTY5MWQ2Y2JmNDUyYjFlMmZkMWRmYjVkMzFlZjllYTViOGJlOTJjNDk4OGRjNWY1NjA3MzNiMzcxZjY5IjoiMDA3MzVjYmZhZmFjNWRmODJlNWNiMjhmYzYxOWIwMWUyYmE5NTcxZGMwMDIzZDI2ZjA5YzM3ZmIzN2QwZTgwOTA2NjE2NWE5N2U1MzJiZjg2ZmE3ZDE0ODA3OGU4NjVmZTFhMDllMjdhNjg4OWJlMTUzM2I0NTljZDljZDIyOTQ5NGI1Y2Y0ZDJhYmYyOGMzODE4MDI3OGQ0NzI4MWYxMzgyMDI3NmVjODVlZmZiOGQ0NTI4NGViOWVlZjVkMTc5YWI0ODgwMDIzYWIyYmQwOGVlM2Y3NjZmOTkwMjg2YmYzMjQzMGMwNDJmNTUyMWJiZmQwYzdlZTA5ZTIyNTRkNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJmYTBlZTFmZTM5YzdjMzkwYWE5NDE1OWQwZGU5NzU2NDM0MmI1OTE3NzdmM2U1ZjZhNGJhMmFlYTM0MmVjODQwZGQwODIwNjU1Y2IyZmZkYjBkYTllOTMxMGE2N2M5ZTVlMDYyOWI2ZDc5NzVkZGZhOTZhMzk5NjQ4NzQwZTYwZjFmOTU1N2RjNThiM2Q3NDE1ZjliYTlkNGRiYjUwMWY2IjoiZjJlNThmZTYwYTNhZmM1OWRhZDM3NTk1NDE1ZmZkMzE4Y2NmNjlkNjc3ODBmNmZhMDc5N2RjOWFhNDNlMTQ0YyI6IiI6IiI6IiI6ImY5MmQ0Y2Y5OWE1MzViMjAyMjJhNTJhNjhkYjA0YzVhZjZmNWZmYzdiNjZhNDczYTM3YTI1NmJkOGQyOThmOWI0YWE0YWY3ZThkMTgxZTAyMzY3OTAzZjkzYmRiNzQ0YzZjMmYzZjM0NzI2MjZiNDBjZTliZDZhNzBlN2I4ZjkzOTkyYTE2YTc2ZmFiNmI1ZjE2MjU2OGUwOGVlNmMzZTgwNGFlZmQ5NTJkZGQzYWNiNzkxYzUwZjJhZDY5ZTlhMDQwMjhhMDZhOWMwMWQzYTYyYWNhMmFhZjZlZmU2OWVkOTdhMDE2MjEzYTJkZDY0MmI0ODg2NzY0MDcyZDljYmUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiY2ZmNzJmMzQ1MTE1Mzc2YTU3ZjRkYjhhNWM5ZjY0MDUzZTczNzkxNzFhNWExZTgxZTgyYWFkMzQ0OGQxN2Q0NGQxZTk3MWVjNzk1ZDA5OGIzZGFlMTRmZmNiZWVjZmQ5NDVlYzgwZjBjMDBjYWQwZmYwYjc2MTZkMmE5MzBhZjNmNWNmMjNjZDYxYmU3ZmJmN2M2NWJlMDAzMWU5M2UzOCI6IjZlYzBjNzk4YzI0MGYyMjc0MGNhZDdlMjdiNDFmNWU0MmRjY2FmNjZkZWYzYjdmMzQxYzRkODI3Mjk0ZjgzYzkiOiIiOiIiOiIiOiIxN2E3OTAxZTI1NTBkZTA4OGY0NzI1MThkMzc3Y2M0Y2M2OTc5ZjRhNjRmNDk3NWM3NDM0NDIxNWU0ODA3YTEyMzRlZWZlZjk5ZjY0Y2I4YWJjM2ZiODYyMDlmNmZjN2RkZDAzZTk0ZjgzNzQ2YzVhYmU1MzYwY2RkZTRmMjUyNWNjZjcxNjdlNmYwYmVmYWUwNWIzOGZkNjA4OWEyYWI4MzcxOTg3NGNlOGY2NzA0ODBkNWYzZWQ5YmY0MDUzOGExNWFhYWQxMTJkYjE2MThhNThiMTA2ODdiNjg4NzVmMDBmMTM5YTcyYmRmMDQzZjczNmU0YTMyMGMwNmVmZDJjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6ImI3MDk5YjA2ZmM3YThhNzRjNTgyMTk3MjlkYjZiMGY3ODBkN2I0ZmEzMDdiYzNkM2Y5ZjIyYmZiNzYzNTk2YTNiODc3MjA1OWExMzVhNmI2MWRhNzJmMzc1NDExZGUyNjlhZWM0ZjU2ZWM1ZTk2ZmJkOTYwNDhiOWE2M2FjOGQwNDdhZWRiYmVlYTc3MTJlMjQxMTMzYjFhMzU3ZWNmYzQiOiIyYWMxYmZiMjRlMGI4YzZhYzI4MDNlODkyNjE4MjJiN2Y3MmEwMzIwZGYyYjE5OTE3MWI3OWJjYmRiNDBiNzE5IjoiIjoiIjoiIjoiMGUxZjJiZmVmNzc4ZjVlNWJlNjcxZWNiNDk3MTYyNGVjNzg0ZWQyNzMyYWJjNGZiYjk4YThiNDgyZmI2ODczN2RmOTFmZDE1YWNmYWQyOTUxNDAzYWM3N2M1Y2EzZWRmZmMxZTAzMzk4YWU2Y2Y2YWMyNGE5MTY3OGRiNWM3MjkwYWJjM2ZhMDAxYWEwMmQ1MDM5OTMyNmY4NWQyYjg5NDIxOTlhMTU3NWY2NzQ2MzY0NzQwYTU5MTA1NTJjNjM5ODA0ZDc1MzBjMGQ0MTMzOTM0NWE1OGZmMDA4MGVjY2YxNzExODk1MTkyYTM4MTdhOGRjM2YwMGYyOGNjMTBjYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI3YmEwMmE3MzRjODc0NGIxNWVmOGI0MDc0ZmU2MzliMzJlNDQzMTc2MmFiNWI3Y2Q0ZDVkZjY3NWVhOTA2NzJiOGE0MjRmMzIxMDg2MDdjOGYxZjQ1ZDk3ZjUwMGVlMTJkOGYwMmI1OWI2YTNkZDI3NmJjNjljYmE2OGVmY2YxMWFiODNlYWQxMzk3YWZkOTg0MTc4NmJkMWJiNWRhOTdhIjoiM2FkNjI3NDMzZjQ2NTE4N2M0ODE0MWUzMGMyNjc4MTA2MDkxZTdhNjgwMjI5YTUzNGI4NTFiOGQ0NmZlYjk1NyI6IiI6IiI6IiI6IjFmYjkxMTg2YmE0YjQ0NTlkOTk0YjRiOWY0Y2EyNTJjN2JlNjI5NGQ2Y2RiNWZlNTZmOGZmNzg0ZDRiMTkwYTFjNjQ1NmUwYTQxMjIzYmJiZGY4M2VkOGU3Y2ZiZmE3NjVkOWQ4YmM3ZWE1ZjRkNzllYTdlY2NiNDkyODA4MWEyMWRlNGNjYTM2NjIwZDYyNjdmNTVkOWEzNTJiNzZmYzBhNTczNzU4ODQxMTJjMzFmNjVmZjI4ZTc2ZDMxNTY5OGMyOWU2YzRjMDVjYjU4YjBhMDdhZTY2MTQzYjRhYmM3OGI5ZDI1Yzc4YjQxMjFlMWU0NWJlZjFhNmMxNzkzZTIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiOWE4ODY1ZGZlMDUzYWU3N2NiNmE5MzY1Yjg4ZjM0ZWVjMTdlYTVjYmZiMGIxZjA0ZDE0NTllN2ZhOWM0ZjNjYjE4MGMwYTc0ZGEzZWM0NjRkZjExZmFjMTcyZDFjNjMyNzViOTUxMDhlZmYxZmFiZTgzNjEzZTFjNGRlNTc1ZTcyYTVjZGM0YmI5MzExZGQwMDZmOTcxYTA1MjM4NjY5MiI6IjMzNjM3MmVjODJkMGQ2OGJlZmFkODM2OTE5NjZlZjZmZmM2NTEwNTM4OGViMmQ2ZWVkODI2YzIyODUwMzdjNzciOiIiOiIiOiIiOiIzYzY4M2Y2ZDRmOGY1YTQwMThkMDE2MzNkZmVlNzQyNjZhYWE2OGVkNmZjNjQ5ZTgxYjY0ZGZkZjVmNzVlNzVkNWMwNThkNjZjZjVmZDAxYTRmMTQzYTZmZjY5NTUxN2E0YTQzYmQzYWRmZDFmYjJjMjhiYTlhNDEwNjMxNDBiZWRiZmZkYjRkMjFiMWFjZTE1NTBkNTkyMDllYzYxZjFlMmRiYWNiMmE5MTE2YTc5Y2IxNDEwYmYyZGVjYTUyMTgwODBhYWNkOWM2OGUxZDY1NTc3MjFhODkxM2UyM2Y2MTdlMzBmMmU1OTRmNjEyNjdkNWVkODE0NjRlZTczMGIyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjIyYzFhZjJmMmE0Yzg4NWYwNjk4ODU2N2RhOWZjOTBmMzRmODBmNmRkNTEwMWMyODFiZWVmNDk3YTZhMWIyZjgzZmFmZGVjZjc5YTQxNzQ4MDFmMTMzMTMxNjI5MDM3YmY5NWEwZTRiZDI0ZjBlMmU5ZTQ0NGY1MTFiNzYzMjg2OGVhZDBkNWJiMzg0Njc3MTI2NGUwM2Y4YWI4ZWQwNzQiOiI4MDMyN2RhYzQ4NjExMWI4YThiMmM4ZTgzODFmYjJkNzEzYTY3Njk1YzJlNjYwYjJiMGQ0YWY2OTZjYzNlMWRlIjoiIjoiIjoiIjoiNzdhN2ZlYTJmMzVhMTg4ZjZkMWJmZGQ0OWI1NjlkOGM0NWUyZGQ0MzFkMzVhMThjNmY0MzJjNzI0ZjFlMzNhZTkyY2I4OWE5Y2Y5MTUxOWU1MDcwNWE1MzE5OWY1YjU3MmRjODVjMWFlZjhmMjhmYjUyZGM3OTg2MjI4ZjY2OTU0ZDU0ZWRhODRhODY5NjJjZjI1Y2Y3NjViZDk5NDk4NzYzNDkyOTFiMWFhZTVmODhmY2Y0YjM3NjkxMmQyMDVhZGQ0ZjUzYjI3NzBjNjU3OTQ2YzBkODI0MjgxZjQ0MTUwOTE1M2Y0ODM1NmQ5ZDQzZjhhOTI3ZTA2OTNkYjhmYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJkMDg0MGUzYThkNjI5ZDViODgzZDMzZTA1M2EzNDFiMjFjNjc0ZTY3ZTE5OTlmMDY4YzQ5N2VjZmFhYmZkNmY2MDcxZGU3MjQ0ZWNiMmZkZjdhYjI3ZjJkODRhYTdiN2ExZGQxYThiNTk4NTZjNDlhMzg4ZjU5NGM1ZjQyY2MyZTRhNTZiM2NjYjhhNjVlNzA2NmU0NGMxMmY0MzQ0ZDUwIjoiOTBkNjA5NTI3ZmFkOTZmZmU2NGFiMTUzODYwMzQ2ZjNkMjM3Yzg5NDA1NTVhZTE3YjQ3ODQyZDgyZDNiMDk0MyI6IiI6IiI6IiI6IjdhYjI4YTliMmQzYWU5OTkxOTU1NTNlNjU1MGNjZWQ0YzJkYWNjYmU3ZWM5ZGNiYjBkNDY3ZmFiYmExODViNzI3ZmJmZDk4MzAyNDJjZDA5OGY0ZGIzY2Y0YTg1ZThiZjhlOGQ1OTc0YjYyYjI4NTUwOTIyYjMyZWQ1YmZjMWE1MjJiNjYwNWNmOTNiZjhkOTBiZGVjMWM1YjllNTljNmZjMzdhODE3ZDQzNzA2OGE4NzI1NGJlMWY3YzQ2MThhZGE0NmZiYzNhMmVmYjAyZTQ0NTI0ZTIxZDkxYmU3NTM0Y2YwNWZiZmQ4NTgzMDRiNzA2ZDZhOTFlYTFjYzZhZDUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMmUyZGQ1Njg2OTEwNDQ5Mjc2N2E1OTc3ODY1MjgzMTkxOWUxYzhiOTcwZjg0ZTgyNGFlNDExNjU5N2EwYWI3ZjAxYzQyYTdlOTgzNjQxZGU0NmM4MmZkMDliNGYyZjc2NzMwNjUwN2NkM2NhN2VlYzY2N2U2NDBkMjcwY2ZiYjAzMzA2M2Q5NzUyMGI2YjdlMzhmZjNjZWEwZTc5ZDEyYiI6ImJjZDllMTUwOGZjYzIyODIwYThiZTA3MTgwZmVhNTA0NTM2NzMzM2I1NjllMTExYjAxMWNkNTdkYzE4NTg3NjUiOiIiOiIiOiIiOiJiOTE1NzI2YzdiOGM1ZGMzOTc1ZjFhMzM0Njg0Yjk3M2FiZjZhOTQ5NWQ5MzAwODhjZjVkMDcxNTQ4ZTRmZDI5YTY3YjU1Y2M1NjFlZDY5NDlhZDI4MTUwYTlmYjQzMDdjMWZhNWY3ODNhN2VhODcyZThkN2M3ZTY3ZmYwYzI5MDYwODFlZTkxNTczN2Q4MTNjMjViZTVjMzBiOTUyYTM2ZjM5M2U2YmFhNTZhYjAxYWRjMmI0Nzc2YWQ3YjVkMDM2YTUzNjU5ODc3YzdhNGU1MjIwYTg5N2Q2YzA3OTlhZjM3YmVlZWQ5MTE3M2ZiZTljNjEzYzNiNmI5YmIyOGU1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6ImQxYWFiMGYxNmJkNDdhNWNjZDY3YzIyZTA5NGRhYTM3MzVlYWUyMWFhNTdmMGJjZDllMDUzZDlkMGQ1NDVjYjgxOTkzMTBkZmUxYjAxMjY1YjhjMGQyYjQ2ZDZjN2M5ZmY1MGNhYmFlNGUwNjBmMzk3MTA5NmI3OGU1NTBjZGEyODM3YTI2YTY5M2Q5MDVkYjJkOTkyZDU4OWIyNjhmNDQiOiI2MjViNGI4ZjRkZTcyZWE5Y2I2ZjcwNTU2MzIyZGMyYTE5ZDZiMmIzMmRlNjIzZjU1N2U0MTlhMDg0YmE2MGZkIjoiIjoiIjoiIjoiOTg3ZTFmZGZlMDA0YzYxOWNmMWU5MDM0NTc2NzA3ZWNjZDg0OTQwMGUxOWM4N2ExZmVmNWIwMTc5ZWM1MWM0MmEyZjhjNDVkNzk0MmQwMDIzYTAyM2M4OWYxODhiMjYzNDM2MjcwMzk4NTY5NTM2OTg2MzMyMmY1ODYxOWM1MGE3Mzg1YTJkYzkxZmM3OGY5NGI1OWYwMTMxZGMyYjU2YTBkN2M2OTlkNDI3Mjg1ZGExYzEwNGIwYWQxNzM5ZGExMGQ4MDcxYzIzOTkzNzg3MDQ1ZGMyMWYwMDcwZTFlOWFhMTY1OGZjOGUzYWRkNzNkYWM3MjYyZTgwZTBhYTJlZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI0NDk0ODBlYWExMDBhZmY2ZjQ4ZGM2Mjg2YTVhODFiOTcyOGIwODQ4NjRmNzhhOWRhOThmNjA2YTAwYTZhNDFmZTUzYzZjNWFjM2RhOWY0NzI2Mzg5YTAzZjk3YmI2NDA3M2E2ZDY0ZTE5NjZhZTMyNDM4OGRjMTJjMTQ1NDRlOWRjNWFlNGZjYjMzMWU5OWQzNTBjNDU2ZmYxNmY5YWEwIjoiNmI4ZmVkYzA4NGQ4ZTI4ZDMzM2FlZjZkYjM3MDJiNjM1MWYwZDI0ZTMwOTA4Y2NjYjYzNzk0MjgyNjU1ODg2YiI6IiI6IiI6IiI6ImEwNjkxMmQzNjJkYTdlYjI1NTk4ODU3ZjZkNjUzNDRjM2UyM2VjM2RlYjgwYzZlNDMxNTg4NDViOTVlYWVjYTI0MWMwYmJiZDY3YWMzODVlMjQ2OTM0NDQ0NTVjYzFjMmMwOGMxMTM0ZDk1NmI4YmM5M2IyOGJlOWMyZDMzMjJiM2UwOTI1Mjk3OWRmYjhkMzlkMDRjOTRmODFiZWJkYTVjNzMxMTA2MDVhMjM3YjU2MTIxNmJkYTllZTliZGVlMWNjMGM3NzI4YmNjODMwNDY4MjMzNGNhOTQ0ZTQ2N2EyN2E4NTMxM2ZhNTM5NWE5Yzc5MGUzNWRlZmQyZWRiMTIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjlhNjE3NDE2NmU5N2FhNDk4MWRkZjU4MGJjMDFjOTY3NTRiOWYwYmEwNDI3NTBhYWJmZGExY2ZmZTU2ZTg1ODFkNzUxMmZmNmI3ZGI3Y2UxNDFiMmJiMDFkY2QwNDI1ZTY4ODhiOTI3N2U1N2RjNTc2NjNkNDAyZWJhOGQwM2NmNTZhMDcwZGM4NjhlNmExMjhiMTgwNDAwMDJiYWY2OTAiOiJlZDc1Mjg4ZjIzMjc1Zjk0MjI0NDRkYTVkM2I1M2NjYjNjNGFjOGFjZmI2NTlhMWU5Yjc2NTVjMmRiNTJmODc5IjoiIjoiIjoiIjoiMDM1MTlkZmIyZmY4OGNjMmI1M2VlY2M0OGFlMmExOGRkY2Y5MWE1ZDY5ZDVhZWZjZGRhODQ0NGU2ZGY3OTBhNTI0MGU2N2IyYTRkZTc1YjRiYjhhMzFmMGY4YWViNWU3ODVmZmI3YTEzNDFiYjUyZmUwMGEwNWVlNjZmYTJkNDRlYTk5NTZlMDU1ZjlmZmE2NjQ3YzNiZmU4NTFhYjM2NGFkZTcxYTBkMzU2ZGU3MTBkZGFmYjc2MjJiMWRhMWJjNTNmZDRkMzIxMDQwNzI4OWM2OGQ4YWViMzQ2YmYxNTgwNmRiZTc4N2U3ODFiOTRmNjNkYTNlMWY2MWI1YWM2MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiOWM2YWUxMDAyZWUxYjBhZGQwYmU1NjNjZTUwZjg5OWRhOTM2ZTEzZWZhNjIwZDA4YzI2ODhjMTkyNTE0NzYzYWZkZTdkYjUxNjBjNzMwNDRiZTczZTlkNGMxYjIyZDg2YmNjMjhmZDU4ZTM5N2Y1M2Y0OTRhZDgxMzJkZjgyYzVkOGM0YzIyZWEwYjcxMzliZDgxZWViYTY1NjY3YmI2OSI6IjhmZGFhZWZmZDY0ZTUzZjdiNDM3NGQ5MDJkNDQxMjA5OTY0ZTEyYjY1ZDI5YWZlYzI1OGU2NWRiNmRlMTY3Y2EiOiIiOiIiOiIiOiIwMjFkOTM4YzliNGRiNzgwYzdkODEzNGFlZmYxMDUzZTViODg0MzM3MGI4YWU5YTY3NDlmY2E3MTk5ZDgwOTgxMGYxYmM4ZGZhNDk0MjY0NzBjMzBjMzYxNmY5MDNlMzVmYmFjYjIzNDIwYTMyZjFiZWU1NjdjYzMyMzAwZjcwNDI0NmRkYzAyMTdmMjM2ZWY1MmMzZWM5ZTI0MzNjYTY2ZjA1YzI1NzIxZjc2NjFjNDNmMjJjMWExMjVlZDVkYjUzMWJkMDgzNmViNDM1YzI3ZWVmYzc0MjRjZTlkODQ1ZTFkNGNjNGM1MDMwOTdiNGZmY2E3ODhlNjc0YTVjYjUzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJmZTk2YTg1YjY5ZDQ2YjU0MDkxODkyN2JiNjA5ZGM1NzY0MmVlYWVmZDQ2YmI1ZGEyMTYzYTBiYzYwMjk0YjU4MjIxOTVhNDEwZDI0ZGI0NTU4OTQ0OGRmZTk3OWQzZmQwOWNiODcwODc5ZDNmNzM0MjE0ZjZhNGJkMmUwOGM2MmEyYTk1NGJlYmU1NTk0MTZkOGMzNTUxYWFmZTcxZDZhIjoiMjBmNjk4ODMzYTQ0NzJmZDdiNzhmYjliMGM0ZWI2ODYwNGYxNjZhMjY5NGM0YWY0OGRhYzJiMjM3Njc5MGUxZSI6IiI6IiI6IiI6ImQzZTk2ZGJlMjllMWZjYjhlZDgzYjE5ZGJmYjI0MGU2ZjQxNjc5ZmJlODM4NTNhYTcxNDQ2NjE3ZTYzZTVhZjc4Y2Y5OGIzMzFkMTViY2NiOGM2NzNjNGU1ZDVkY2VjNDY3YTFmZTI2YTZjZDE2OTZkMGM5YmM0OWY3ODEzOWQwNTEyODdkZjdmM2FlMGRiYjRiYmY1ODFjYjgyMTE5MzEwNjNjM2Y0NjEyY2VkNTNmNTlkMWI0ZWJiODc1NzI5MTM5ZjVkMmE3ZDYwNjQyZThmMjgzNWVlZDg4OGI3ZTNlNDljMGRmZmQwMTJjZDc0NmFiZmEzZTFjNWMyMzA4YzYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6ImE0ZmQ2OTNmZjBhOGFmMjRiY2VjMzUyZDMxOTY1NDlmZDBkYTVlZTVkOTljYTU4NDE2Y2EwM2NlNGM1MGYzOGU4Y2Q2N2YyYmY3MWQ0MzY2Y2U2MTM5NjY0MjUzMWZmNTgzZDJiZTlhMGQ3NGU2YTQyMTU5YWU2MzBhY2ViZjRlMTUyNzFlZjdmMTRmM2RlMTQ3NTJiZTBlMGU4MjJiMTEiOiIzNjg5NjljMTVhNDg0OWQ3NTkzYmU4YjE2MjExM2I5Mjk4YTUzNWMxNDhmZjY2OGE5ZThiMTQ3ZmIzYWY0ZWJhIjoiIjoiIjoiIjoiZTkxODhmYzBlYWVjNzRiMjYwOGUyMWUzYTQwYmU5NGFhZjRhZTA4ZWI2ODRkZThmOGJiYTJkNWZkM2IwNzNhYTU1MzFjOTM4YzBmYzYyOGRhNjU3MjVjNTRiNWM2OGJiOTFkN2QzMjY1NjVlOTY2ODVlMGE0ZTdiMjIwYzUwZTBjYWYxNjI4ZWRiYTViZDc1NWIzMTg5NGY4Y2I5MGFmYTc2ZTg4YzVlYjllNjFiNDkzMjQ0NGMxMzk3ZGVlM2UzMjI0MWEzZmI3MGEzOTI5ZTQ5ZjZkYTAyZWVhNTQ4MTJhYmIzZDZiNWNlZTE4ZjAzYWYxZTBiNDk1ODQzMGFiMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMjU0ZmY1Njg3YTZkYWQzZjFkMjM3ZGM3NjJmNThkMjRlZjJlMmMwODRkMGE0OGQyNmEzZGM4MWU1NDkwY2RhM2YyZWMzOTJhY2NhNDkxZTAzY2U0N2I5NTk2M2E0OWZjYjg0OTRiMWMxZjE3NTJmYjZmODBkNzMyYTg5YjA4MTE1ODU3ZjdjYzk2ZTdkZmYwNWViYjgyMjcwNjg4OTkxNyI6ImY4MDZiOWI0YTU2NjgyYzYxYjU1Y2I2YTMzNGNhZjg3ZmZlMTM1YWRmZWE2ZDBjM2ZjMjJiMzk4OThmYmQwNzgiOiIiOiIiOiIiOiIwZTUyN2UwMDQ5NGQ1NTU2NGY5ZDliMjhlNzExMGY5YTYxY2UzNmM4ODNiNWJlMmRjYjA1NTQ0NDE2NGNkZGRkMWE5ZjI3MzE3MTZmMjJkNmZmNDc2Y2U0MTNjNzdhYmZjMGU5NDY4NzFkNTQ4MTM0NWMyZTk3YjRiZmRkMTJhYzAzZGY2MDZmYzU2YmRiOTlhYzdiNzFhNjliNWI5MTYwMzczYmJlYzNlOWRkZTQ3NzE4MGFmNDU0ZTdhY2M2YmM1OGRjMGFmYjQyODFjMGRlNDM1NGMxYmY1OTkwNTRlMzgwMGM2ZDYwZDg5Mjg1ODg2NWI1MzYxZjUwYmZjYTliIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiY2RiMGQ5MTE3Y2M2ZGJjOWVmOWRjYjA2YTk3NTc5ODQxZDcyZGMxOGIyZDQ2YTFjYjYxZTMxNDAxMmJkZjQxNmQwYzBkMDFkMTU2MDE2ZDBlYjZiN2U5YzdjM2M4ZGE4OGVjNmY3ZDVhOGUyZTg4ZjQzOTg2ZjcwYjg2ZTA1MGQwN2M4NGI5MzFiY2YxOGU2MDFjNWEzZWVlMzA2NGM4MiI6IjZmMGZiOWVhYjNmOWVhN2FiMGE3MTliZmE4NzliZjBhYWVkNjgzMzA3ZmRhMGM2ZDczY2UwMThiNmUzNGZhYWEiOiIxYWI0Y2E5MDE0ZmE5OGE1NTkzODMxNmRlOGJhNWE2OGM2MjliMDc0MWJkZDA1OGM0ZDcwYzkxY2RhNTA5OWIzIjoiMTZlMmQwNzIxYjU4ZDgzOWExMjI4NTJhYmQzYmYyYzk0MmEzMWM4NGQ4MmZjYTc0MjExODcxODgwZDcxNjJmZiI6IjUzNjg2ZjA0MmE3YjA4N2Q1ZDJlY2EwZDJhOTZkZTEzMWYyNzVlZDcxNTExODlmN2NhNTJkZWFhNzhiNzlmYjIiOiJkZGEwNGEyY2E3YjgxNDdhZjE1NDhmNWQwODY1OTFjYTRmZDk1MWEzNDVjZTUyYjNjZDQ5ZDQ3ZTg0YWEzMWExODNlMzFmYmM0MmExZmYxZDk1YWZlYzcxNDNjODAwOGM5N2JjMmE5YzA5MWRmMGE3NjM4NDgzOTFmNjhjYjRhMzY2YWQ4OTg1N2FjNzI1YTUzYjMwM2RkZWE3NjdiZThkYzVmNjA1YjFiOTVmNmQyNGM5ZjA2YmU2NWE5NzNhMDg5MzIwYjNjYzQyNTY5ZGNmZDRiOTJiNjJhOTkzNzg1YjAzMDFiM2ZjNDUyNDQ1NjU2ZmNlMjI2NjQ4MjdiODhmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiM2U0MjM0OGJmNzZjMDU1OWNjZTlhNDQ3MDQzMDhjODVkOWMyMDViNjc2YWYwYWM2YmEzNzdhNWRhMTJkMzI0NDlhZjc4Mzk3M2M2MzJhNDkwZjAzZGJiNGI0ODUyYjFlNDU3MThhYzU2N2ZkMjY2MGI5MWM4ZjVmMWY4ZjE4NmM1OGM2Mjg0YjY5NjhlYWRjOTgxMGI3YmVlY2ExNDhhMSI6IjJlNTFjN2E4YWM3MGFkYzM3ZmM3ZTQwZDU5YThlNWJmOGRmZDhmN2IwMjdjNzdlNmVjNjQ4YmQwYzQxYTc4ZGUiOiI2M2ExMDcyNDZhMjA3MDczOWFhNGJlZDY3NDY0MzlkOGMyY2U2NzhhNTRmYzg4N2M1YWJhMjljNTAyZGE3YmE5IjoiZTQ1NzYyOTFiMWNkZTUxYzUwNDRmZGM1Mzc1NjI0Y2ViZjYzMzMzYzU4Yzc0NTdjYTc0OTBkYTAzN2E5NTU2ZSI6ImI1YTNmYmQ1Nzc4NGIxNWZkODc1ZTBiMGM1ZTU5ZWM1ZjA4OTgyOWZhYzUxNjIwYWE5OThmZmYwMDM1MzRkNmYiOiJjNjI0ZDI2MDg3ZmZiOGYzOTgzNmMwNjdiYTM3MjE3ZjE5NzdjNDcxNzJkNWRjYjdkNDAxOTNhMWNmZTIwMTU4Yjc3NDU1OGNiZWU4ZWI2ZjljNjJkNjI5ZTFiY2Y3MGExNDM5ZTQ2YzU3MDliYTRjOTRhMDA2YmE5NDk5NDc5NmUxMDY2MGQ2Y2IxZTE1MGEyNDNmN2JhNWQzNWM4NTcyZmQ5NmY0M2MwODQ5MDEzMTc5N2U4NmQzZWQ4NDY3YjY5MmY5MmY2Njg2MzFiMWQzMjg2MmMzZGM0M2JmYmE2ODZmZTcyZmRkOTQ3ZGIyNzkyNDYzZTkyMDUyMmViNGJjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYjYzZmRkODNjNjc0Njk5YmE0NzNmYWFiOWMzNTg0MzQ3NzFjNWZhMDM0OGNhMGZhZjdlYmQ3Y2Y1ODkxODI2YjVmZDIwNGUyNTk4ZDk2MjZlZGFiNDE1OGE4Y2ZkOTVmYWRlYTViYTkyZjgwMTBiYjFhNmE0YjZmYWUyY2FhMGIzODQxNjVhZGY3MjEyNTNhZmQ2MzVkNjAyMWY3NjRhZiI6IjJhNWRmYWQ4NDk0MzA2ZDlkNDY0OGE4MDVjNDYwMjIxNmE3NDZhZTM0OTM0OTI2OTNhNTBhODZkMWJhMDVjNjQiOiIwN2M2OWQ4ZDJiOGFhMTQ1NGM1YzQ4MDgzZGQ0MTQ3N2ZkYTZiZmNmMDM4NTYzODM3OTkzM2E2MGVkMmUwYTc3IjoiYTE0ZTkwMjI0N2EzZDY0OTNkM2ZiYzg1MTk1MThiNzFhNjYwZTU1MDJjZjdlY2ZjNzk2Y2ZhYTViNGVlNGJhYSI6IjYwZTY5MGU0YTFlYmExNGFlYzUxODcxMTJhMzgzZTk5OTEzNDdmYWI3YmFjN2NiMmE0MGE1MjU3OWEwZDI3MTgiOiI3OTJiNDdiNmVkMjIxNjIzYmIxODdkNjNlM2YwMzljNjk4M2Q5NGVmZDU3NzFkYzliNGM0MGJlZTY1OTI0NTEzNDg1YTYzMzJiYWVkYTZhOTZmOWJiNDMxZjU5MmQ3MzQ2MmI2MWQ5ZDkxNGE3MmI1NmZhOWQ4NzU5NzQyNmZiMjQ2NDI0ZWJjZDdhYmQ1MWIyZWVmZWM4ZjViODM5YzBiM2MzNDAxNTM0MmFjZTI5NmI1ZjIyMThmYTE5NGI1MGFlYTFjODk2NjM0NjAyOTJjOTJjNDVmMTEyZGRiZjZiOTQwNmY2ZTdjY2VlOWM0N2VkMmQ5MGEyN2JlNWRkNzNlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiZGFiODVmOThlYWYwY2ZiYTAxM2I5N2RlNGQ5YzI2NGNhNmZlMTIwMzY2Y2I4M2U4YjMxMTNjNjhiMzRlMzlkNWQwNTEwOGUxMDI4YWU2N2I0ZWE2M2JkYzZkNzVlYjg4MTc5NDg4NWE2NDQ3MDc0NDE5OGI3ZDBiYzI0NDcyZmZlOGRhZjNjN2ViMjE5ZGY2ZGRmMTgwZTQ4NGZlMGFhNSI6IjA5ZmVkMzgyMmY2ZjVlNWI5ZTU3NWQzMWRjMjE1ZGUxNjA3YjBkZmM5Mjc0MTI2MThjMmQ4Zjc5MTY2ZGJhYmEiOiI4ZDc0ZDAxYjU4MmY3MGI5MmY1M2I0MzQ2ODA4NGUxNTg2ZDliMzY0NjVkMzMzZDVmYWFmNjkxMWU2MmZlNDBlIjoiZWY3ZjZiNmViNDc5YWIwNWIzZjlhYjZkZDcyZWFjOGIxZTg2ZDg4N2YxYmNhZTM2M2NhZTM4NmQwMjc1YTA2ZiI6Ijc0NDJiMmE3OTJhNmEyOTU1OWJiOGE1MTVkNTY5MTZlZTE4MjAwNTgwYWEwMmUxMjM3ZGQzNTg2MTkzODJkOGYiOiI0OWQyY2JmYTA4OTdiN2Q5NjFjMjkzYzFlNTcyZmIyNmYyOGU3Yjk1NmU3NDZmNmVkYTkwNDU0YzEzNzBhMjllMjUzMDNjZWFkYzc4Mzc1MTRkYzYzODU1M2I0ODdlZjk0ODdjOTc3YzEwNjI1NDA5MTc4YWQ2NTA2ZDEwM2M0ODdhNjY2NTVkMDg2NTlkOTJhNGQ1OTk0ZDFjOGRkYjI4ZmU2MGYyZTQ5NTc3ZDZlODBjYWUxNDc4MDY4Yzk4MjY4ZjQ1ZTYyOTNjOTMyNmM3ZjcyNmVjODk2MDEzNTFjMGEyNmZkM2E2NTQ5ZjhhNDFjNmY1ODY5MmM4NjU5NGMwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMGYwYWE4NGVmMTJlMTBhZTJiMjc5ZTc5OWM2ODM0NDE4NjI0NTdiOWJjMjU1ODFjMmNkM2Q1YjU4YTViMzI0NmY3NGY0MjMwYzI0MjdhNTJmMDFmMzllODI1ZDI1MGFjNTIyMmIyNmU3OWY3YzNiNzA2NmQ1ODExODViMWExZjYzNzY3OTZmM2Q2N2Y1OWQwMjVkZDJhN2IxODg2ZDI1OCI6ImQwMmIyZjUzZGE0OGI5MjNjMjkyMWUwZjc1YmQ3ZTYxMzlkNzAzMGFlYWQ1YWVlYmU0NmMyMGI5Y2E0N2EzOGEiOiJkMTE1MTI0NTdiZjNiOTJkMWIxYzA5MjM5ODk5MTFmNThmNzRlMTM2YjE0MzZmMDBiYWQ0NDBkZDFkNmYxMjA5IjoiNTRkOWVhN2Q0MGI3MjU1ZWYzZDBhYjE2ZWE5ZmRmMjliOWEyODE5MjA5NjJiNWM3MmQ5N2IwZTM3MWI5ZDgxNiI6IjYwMWNlZjI2MWRhODg2NGYxZTMwMTk2YzgyNzE0M2U0YzM2M2QzZmE4NjViODA4ZTk0NTBiMTNlMjUxZDQ3ZmEiOiJlOTg0N2NlZmVhM2I4ODA2MmVhNjNmOTJkYzllOTY3NjdjZTkyMDJhNmUwNDljOThkYzFkY2JjNmQ3MDc2ODdiZDBlOThlZDJjYzIxNTc4MGM0NTQ5MzYyOTJlNDRhN2M2ODU2ZDY2NDU4MTIyMGI4YzhjYTFkNDEzYTJiODExMjAzODBiZmQwZGE1ZmYyYmY3MzdiNjAyNzI3NzA5NTIzNzQ1YzJjZWQ4ZGFlZjZmNDdkMWU5M2VmOWJjMTQxYTEzNTY3NGNiYTIzMDQ1ZTFmOTlhYTc4ZjhjZWFkMTJlZWZmZmYyMGRlMjAwODg3OGIxZjgwNmEyNjUyZGI1NjVhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiNmE4NjhjZTM5YTNhZGNkMTg5YmQ3MDQzNDhiYTczMjkzNjYyOGYwODNkZTgyMDg2NDBkYmQ0MjczMTQ0N2Q0ZWVmZGRlNGUyMmIzNzZlNWU3Mzg1ZTc5MDI0MzUwNjk5MDE3NGY3ZjQ1NmFjMDZjMWQ3ODlmYWNjMDcxNzAxZjhiNjBlOWFjY2ViY2VkNzNhNjM0YTZhZDBlMWE2OTdkNCI6ImY3Mjg1Y2Q1NjQ3ZmYwZTJjNzFhOWI1NGI1N2YwNDM5MjY0MWE0YmRlNGE0MDI0ZmExMWM4NTlmZWNhYWQ3MTMiOiI1NDYzYmIyMjQxZDEwYzk3MGI2OGMzYWJjMzU2YzBmZTVlZjg3NDM5ZmM2NDU3YzVlZTk0YmUwYTNmYjg5ODM0IjoiM2FiNjJjZGJjNjM4YzFiMmI1MDUzM2QyOGYzMWIxNzU4YzNiODQzNWZlMjRiYjZkNDc0MDAwNWE3M2U1NGNlNiI6IjJkYmY0YzkxMjNlOTcxNzc5NjkxMzlmNWQwNjQ2NmMyNzJmNjBkMDY3ZmVmYWRmMzI2Y2NjNDc5NzExMTU0NjkiOiI4YWZjZTQ5ZGNjYzRmZjY0YzY1YTgzZDhjMDYzOGJkOGUzYjdjMTNjNTJjM2M1OWQxMTBhODE5ODc1M2U5NmRhNTEyYzdlMDNhZWVkMzA5MTg3MDZmM2FkM2I4MTllNjU3MWNmYTg3MzY5YzE3OWZiOWM5YmJjODgxMTBiYWE0OTAwMzJhOWQ0MWY5OTMxNDM0ZTgwYzQwYWUwMDUxNDAwYjc0OTg4MTBkNzY5ZmI0MmRkZGJjN2FhMTliZGY3OTYwMzE3MmVmZTljMGY1ZDFhNjUzNzJiNDYzYTMxMTc4Y2JhZTU4MWZhMjg3ZjM5YzRmYmY4NDM0MDUxYjc0MTlmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYmI2YjMzOWVhZTI2MDcyNDg3MDg0ZWM5ZTRiNTNmMmYxZDQyNjdkMjA1MDQyZTc0Yzc3ZmI5Y2EwNTkxYmE1MGMwZTdiZjZlYjA3ZmVjY2JjNDk0YWY0MDk4ZTU5ZDMwZjQ3ZmM2MGFmYmViODA3MjM2Zjc5NzRkODM3MzM1YmMwYjIyMjg4ZWYwOWRkZmNiNjg0ZTE2YjRjMzZhMDUwYiI6IjM0YWVlYzdlZDBjYWU4MzcwMWI2NDc3NzA5Yzg2NTRhMTExNDIxMjQwMWRjOTFjYmU3ZGUzOWQ3MWYwYzA2ZTEiOiJlODA3MWNjZDg0YWM0NTI3ZTVjNmU4NWIwNzA5ZWQ4Njc3NzZmMjVhZTBlMDQxODBkY2I3MTA1ZWNkM2UzNDkwIjoiZmJhYzQ1YjU5NTIyMDBhZDdjNDIzMjUwMGYyNDE3YTFjMTQ3MjNiZGQxY2MwNzg4MjFiYzJmZTEzOGI4NjU5NyI6ImM0MjkyZDdkYmVmM2JhN2MxOGJmNDZiY2YyNjc3NmFkZDIyYWI4ZWUyMDZkNmM3MjI2NjVkZWM2NTc2YjFiYzAiOiIyMjhhYTJhMzE0ZmNiZmU2MzA4OWNlOTUzYWM0NTcwOTNkZWFhMzlkZDljZTJhNGVjZTU2YTYwMjhhNDc2YTk4MTI5YmU1MTZkNjk3OWVmZjU1ODdjMDMyY2RmNDczOWQ3YWM3MTI5NzBmNjAwZmE3ODFhOGU1NDJlMzk5NjYxMTgzZTM0ZTRiOTBjNTllYzVkYzVjYWQ4NmY5MTA4MzUyOWQ0MWM3N2I4ZjM2YzVhOGUyOGJhMWE1NDgyMjNhMDJlYWVkODQyNmY2ZmU5ZjM0OWViZWMxMWJjNzQzZTc2NzQ4MmUzNDcyZWMyNzk5YzFmNTMwZWJkYzZjMDNiYzRiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYmU2NThlNTZmODA0MzYwMzllMmE5YzBhNjI5NTJkZDdkNzA4NDIyNDRiNWFiMTBmM2I4YTg3ZDM2MTA0ZTYyOTMzYzk2Mjc0NTVkZmRlOTE4NjVhZWU5M2U1MDcxMTQ3YmVmMjRkYzlhNWFhMjMwMDNkMzgyNWY5YjJiMDBlN2RhYjU3MWVhNmFkODY0MTVkYmQzMGMwYmJkY2U3Yjk3MiI6ImQzYTZlYjI5YjE4MGI3OTE5ODRkZWIwNTZkNzJjMDYwOGEyYzkwNDQyMzdhZWNmMTAwY2NiMDM3MDAwNjRjNWUiOiIwNDdjMjllNGQxNTg0ZmE3MGNiNjZlMmFhMTQ4YTJhYTI5ODM3YzVlZWU2NGRjYWM2MGZkYmEzNTZjZGY5MGJiIjoiNDFjNDc5MjE2MWIxYjAwZDQxMGNiNzljZDU2YmQzMTFhNzE0ZmI3OGRjMzQ3MWMyNWJkZDc0NzlmMmU5YTk1MiI6ImNkNDkzNmQ3YmMzZWEwZTcyMDFiY2JlZmJjOTA4MjE1YTk3NjgwY2E2Y2U4NjcyMzYwYWVhNjAwYjY1NjQzMDgiOiIyYzI1NTU3ZjZkYjA3ZGIwNTdmNTZhZDViNmRjMDQyN2QxYTBlODI1YzQ4YzE5YTUyNmY5YTY1MDg3YzZkMWVhZDdjNzgzNjNhNjE2MTZjODRmMTAyMjY1M2FmNjUxNzNhM2Y5ZWMzMjc1ZjJiMGEwZDBiYzc1MDE5NDY3M2MwZWFhNmM2MjNjZDg4YWJiMGM4OTc5YmFlZTRjZDg1YmZjZTJlNGEyMGJmZWJmMmMzYmU2MTY3NjU2Mzc2N2RmZTIyOWUwYjdiZTY3YWQ2ZmNkMTE2ZGQwYjQ2MDcwOGIxYjBlNWMzZDYwZjNkZDgxMzgwMzA0MDRkMTk3Mzc1ZDc1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYWU1MzdmMzFhMjhjYTE0NTAwZTc1OTcxNmJjMjA3OTgzYmZlYWI2MGIyNTA3OWZhMzBiNzdiOGQ0MTI0NGNiOWZjYTllMjdkOGFiODRjZjliOWNlNDkxZWM1ZDhjYjY3MWViNTI3NzdiZTQ4MGYwNTExNWFlNjM3MGYzMDE1OWE5NGQ1MGZmY2M2NDQ1NDY3OGFiMWQxYWM2ZjE2NmZhNyI6IjhjOWNiMmIxOWFhM2FiZTgzYzhmZTdkYTk2ZTljMTE2NDgyNTI2NTNhMjlkY2Q1YmYwYWMzMzRhYzU4N2YwMzIiOiI5Y2RmNmYxYTJiYzA3YWNkNGIwZjQzYjVmMmI4OTJhMTE1M2UyNjY5ZjIzN2QyNTc5MjM2MzYwOTRmYjQwYjU0IjoiNjkyZDUxMjcyMmRlNmJhNzIwZmQyM2M4OTk0YWM2MzE3OWI1ZjdlNjExYWRkZjljZmFjZDYwZTA2ZTE0NGE2YSI6ImJiZWVhN2IyYmVhODIxZjMzOWY0OTQ5NDdjMGI0YmFlODA1NjExOWRiNjlhM2NiZWYyMTkxNDk1MzcyOWNkZWYiOiJjMGM0ZmI3MDgwYzBmYmU0MjVjMWI3NTZmYjNhMDkwY2IwZDA4YzcwMjdkMWJiODJlZDNiMDc2MTNlMmE3NTdmODNhNzhkNDJmOWQ4NjUzOTU0YjQ4OWY4MDBhNWUwNThlYmM0ZjVhMTc0NzUyNjU0MWQ4NDQ4Y2I3MmUyMjMyZGIyMDU2OWRjOTYzNDJjMzY2NzJjNGJlNjI1YjM2M2I0NTg3ZjQ0NTU3ZTU4Y2VkYjQ1OTdjYjU3ZDAwNmZkYTI3ZTAyNzgxOGFlODllMTViNGM2MzgyYjllN2E0NDUzMjkwZWE0MzE2M2I0ZjljYWUzOGIxMDIzZGU2YTQ3ZjdiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMmY4OTk0Yzk0OWUwODg2MmRiMDIwNDAwOGY1NWQzNTYxZjNlMDM2MmRmMTNiOWQ5YTcwZmRhMzk5MzhmMmQzMzFiZjNlOTRlYTg1ODE2MGI4MzJmZTg1ZDMwMTI1NmY1NWVjZGIxZThmZTEyMjYwYjliZmUxMmQ2ZTZmMTYxNDc0ZmEyMzExZTEyZTM5YjBiZWIwZmNkOTJhNjczN2I3MyI6ImI0NjY3MWNmN2ZhMTQyZTcwMTJlZDI2MWUxZmU4NjcxNDcxMWMyNDZjN2QxYzAzMzBmYTY5MjE0MWU4NmQ1ZDEiOiIzY2U5YTI5ZjAyMDdkMDc5ZTZkYzgxZmI4MzAzNTZlNTU1Zjk2YTIzZWE3MTQyNDk3MmVhOTMwODk2NTc4NmQzIjoiZGI5NTAwMDBjMDc3NmNjMGUwNDk5MjljZTAyMTAyMGFkYzQyZDI5Y2Q5YjVkOGY3MTE3ZmJlNmJkZTNlNTk0ZiI6ImZjMThlZTZkZDNkYWMyMzA2Nzc0ZjBhYzM2Y2Q3ODllMzM0NjJkNzJhOGM3NWRmOTA1NzEyM2RiMzNlNWY3YmMiOiI4NTQ2MzYyY2M4YWY5Yjc4ZGQ2ZThlYjJjMzdkYjk2ZTcwNzA4ODUyYmZkOTM4MGFiZWRjN2YzMjQ1NzVhMTY3YmVhMThmNjMyZjNlMTlkMDk5Y2ZiZjMxMDc3M2Y5NzE5ZWVjMDM2ZDJlMDlmMzkzYTAyM2FkZDhlYmRjNGZiODdhZjQzYjJmZTZjN2VhYTRkMzlmODAyMmNlMjQ3YWE0NWZkYzg0ZDFiOTJjYWNjZTZlYWU4MjUyYTAzZWMyZWM1MzMwYzAxZjU2ZDExM2ZkMmVjM2QwMjQwYWYwYWZjZjEzZGRkZTIwNWJiNWU3YzJkOTEyZGNiNGFlZTVkY2YzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjBjODVlMzE0ODdkZTFkN2JhNGE3Yjk5OGFjNTZkYzQyYzZkYzBlYWU3YmY1YzhhYWYxZTRlNzg4NzVmNWZiNDdkZTg3OGY3MjhmNzNmODNkYzJhMmY1NTBiOTZjOGI5NzJkNWNhOGFmMWE3MGNmZGNjZDAxNWVlM2JmMDY2NWRkMTk0MWZjNmE3MzE3YjlkMGQwNjY1OGY1NzQ0Y2ZiZDkiOiI5YWFjMzdiY2UxYTZhODFkYzc5MzRlMjM3NDc5OTFlM2NmNDhjNTVmZmU1YTU3NzgxYzQxNzY4YTM1MjIwYTAxIjoiZGI4ODFlNmQwZGMzYjYyNzkzZDdkYTVmZTVhMThlMzNiZTliOTNmNGE2M2EwMGE4NzhkZmJlY2YwZDM4M2JkMiI6ImY3NDNjZTFiNzJmM2RlNGM5MDEzNjllZWQ1ODFjNjI2ZWQzMDgxY2E3MDdlNjYzNGZkYWZmNDY3MjFjZTA4NzgiOiJjZDUyZGEzZWM4YTgzOWM1MzdkYWNkZWE4NTA2YTNlZWVlODc5ZGUzODhmZjVlNTEzMzIyZDZkMWJiM2ZmNjk0IjoiYTViZGQ1N2NiOGZkZTYyOThlN2M1ZTU2M2FmY2NhNjBkZDQ3MmVjYTQ4NGJkOGMzY2MxN2YzMzA3YmUwOWI2MDE3NDRkZDNhYjllOGE0NDEwN2M1ODY4ODI0NTc1Zjg1MGMwZjM5OWIyODBjZjE5ODAwNmY4M2VkZThjMGI1MzdlOWJlMjI3ZmExNDBiNjU5OTVhZDlkZmExZjIzMDNkNTYwYzNiN2Y1OWJlZGQ5M2MxMjgyZWEyNjM5MjQ0Njk0MTFjMjY1M2Y4N2ZkODE0Yzc0Y2I5MWMxNDg0MzA0ODFkNjRiYWQwZmVjM2NiYjNkZDFmMzlhYTU1YzM2ZjgxYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI5MzE2MWIyZGMwOGNiMGZkNTAxNzExNDFjODY1YTg0MWNhOTM1Y2ZkZDJiNTkwN2Q2ZmY4YWIwMzQ4YzRjZWIwNWNiOWY2ZTU5MTJiOTBjMzM0OWE1MGFiODgxYjM1YTFkOGU5YmU0NGI1ZjI5MzQ4MjU0OGQ0Nzg3NzYyZWJmYjAzYzczYzQwZTQ1Mzg1ZThiOTg5MDdjZDY2ZjQ5M2RkIjoiMGRjZWI0YTM2MzI2YzRkZjE2ODVkZjQzZmRkZWVjYjVkMGM3NmYwMGViNDQ4MjY2OTRmMjdlNjEwMjkwZjZlMSI6IjEwNWE4Zjg1ZDY5NTlmM2UwNDNlZjUwOGNmZWEyMWQ1MjEyM2YwM2I3YWVhODAzNGM0ZWVjNzYxZWFiYTFmZWUiOiJiZjc4MWY3ZTQ4OWQ5YjRiNWFhNWVlNmQxNzk2NDY4YWY2NzJhOGQyNWYzMTFlZGYzYzRiNGRiZjQzM2Q3MDNmIjoiYzgxZDZiY2YxZTViZjM3ZTM5ZGRhMTczNWM2ZjE5M2RmMTE1YjFhODU0YTEyZTdjYWZlMDYwYWZlNDU4OTMzNSI6IjQzMDY2MjgxMjRkMDEwMGZhZGU3ZWFhZjVlZGYyMjdkNTA3NzFmOWU1ZjJlMWU5ODM4MDBlZWY5YTM5ZmRlMGIwYzI4MGU2M2M4NzI4ZDgzNmI1YjkzZWE3OTRhMzJjMWMwNGNmYzU0YmQ1MzAwZTNmZWJiNWZlMmUxMDIzZWRlZDhkN2NkMTgwMjc5YTU5OGY3NjgyM2U4ZDVhN2RmZmNjOTNhMDlkZWVjNWQxZjgwODM4ZTkzOGZiYTRkZTlmNDdlOTRiOTkzODJhZTU1ZjExNmRmOWMzYjNkZGY3ZTUwNTE2ZTIwMzY0NTg1MmE0MTU3OTZmMDNhODY0MTgxMDciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMWFlMTJhNWU0ZTlhNGE1YmZhNzlkYTMwYTllNmM2MmZmYzYzOTU3MmVmMTI1NDE5NGQxMjlhMTZlYjUzYzcxNjUzOTliMzQ4MWZkZjI0ZDM3MzIyMjI2Nzc5MGEwZmVjNjgxNTU0ZmY3MDI2NTgxMjJlOTFiYTAxNzQ1MGNmZGZjOGUzZjQ5MTExNTNmN2JjYzQyODQwM2U5YzdiOWQ2OCI6IjgyODBjZmRjZDdhNTc1ODE2ZTAxOTllMTE1ZGEwZWE3N2NhZTlkMzBiNDljODkxYTZjMjI1ZTkwMzdiYTY3ZTIiOiIyMjY3MzJiN2E0NTdjZjBhYzBlZjA5ZmQ0ZjgxMjk2NTczYjQ5YTY4ZGU1ZTdhYzMwNzBlMTQ4Yzk1ZThlMzIzIjoiNDU5NDJiNWU5YTFhMTI4ZTg1ZTEyYzM0NTk2Mzc0ZGRjODVmZDc1MDJlNTYzM2M3MzkwZmM2ZTZmMWU1ZWY1NiI6IjZmYzU5OTI5YjQxZTc3MDcyODg2YWZmNDVmNzM3YjQ0OWIxMDVlZDdlYWNiZDc0YzdjYmZlZGY1MzNkYmVhYTEiOiJiNzU0NzMzMmUxNTA5NjYzZmNmZWEyMTI4ZjdmM2EzZGY0ODRjZDhkZjAzNGIwMDE5OTE1N2QzNWQ2MWUzNWYxYTlkNDgxYzdkMmU4MTMwNTYxNmQ3MGZjMzcxZWU0NTliMGIyMjY3ZDYyN2U5Mjg1OTBlZGNhYzMyMzE4OThiMjRlZjM3OGFhOWMzZDM4MTYxOWY2NjUzNzliZTc2YzdjMWJkNTM1NTA1YzU2M2RiMzcyNWYwMzQ3ODZlMzViZGQ5MDQyOTMwNWZkNzFkN2JmNjgwZThjZGQ2ZDRjMzQ4ZDk3MDc4ZjVjZjVlODlkZWUyZGM0MTBmYWQ0ZjJhMzBmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjI5ZTIwZDcyNGRmYTQ1OTk2MGRmMjFjNmVjNzZiMWU2Y2FiZDIzYTllOTQ1NmQ2YzU5MWQ3ZTQ1MjlkYTBlZjg5NWRmMWY4MzdlYmE0N2ExNjg3YWE1YzRkZGNmOGFhZjJhMmEzMTI2MjZjYTNlMjAwMzRmYzRmMjgwMzNjN2Q1NzNmNjZlZjYxYWIyZWEwYzdiZjA0MTFhOWQyNDcyNjQiOiIzNzEzYjYwMWUxNjRiMWE1MWRkYTFjYTkyNDJmZjQ3NzUxNDY0OGU5MGQzMTFhMDZlMTBjZTVhYTE1ZGE1ZDdmIjoiZWM2OGJlMzNhYzhmZjNkZDEyN2UwNTE2MDQ4OThjMGY5YTUwMTI3MTg1OTM3NjY1M2EwNTE2MzM2MTgwOTkzZCI6Ijk5MzU0OTk2NjFkNjk5YTAwYzYyMmE4NzU0NDFiNGRmNTIwNDk1OGZlOTU4OTJjOGNlNjdmN2RmYjJiZTNlNGEiOiIyNTZhNGJhOWU4ZjQzOWQ1NDg3ZmE1ZWI0NWVmY2YxYmMxMTIwNDkxNzI0ZGIzYWJlMzI4ZDk1MWYyNzM5ZmM5IjoiNzMxMTRjYjM2MjRkNjg3ZDRjZDQ5YTZlNzY5ZGZjN2EzZjg5MDFkYzQxZjZhZDFkZjRjZTQ4MDUzNmZhODJlNTJhZTk1OGQwNTI4NjQwZDkyYjhiYjk4MWI3NTUwNThlMzJjNDczMzY4MmU1YzRjMGRmNDFmMzUwNWExNjQzYTBkZDQ5Y2ZkZWFmN2ExOGFkZmZjYTg4MjU2YzZkMmNjZWI4MzhhZjZjOTJhNjRiYzIxY2I3YTc2MGEwMzkxMjkxYmZlMzU3NWUwMTRmYzE1NjMyM2Y4ZWI1ZTg2NTE4YzY2OWRhZDhkMjlhZDVmZDRlZjZlMjk2ZjRhMDc2NGMyNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIxMzUzZjM1NDNlYjExMzQ5ODBlMDYxZmM0MzgyMzk0OTc1ZGJjNzRmMWYxZWE1ZWNjMDI3ODBhODEzYWM1ZWU2Y2Y1ODRkYjI0NDdhZmJlMmM4ZmEwYzE1NTc1ZWUzOTFiYTYwMjE5MzMyYTY3Yjk1ZDkwZWM5ZGU2Yjg0NTNkNGM4YWY5OTFhZTkyNzc0NjFmZjNhZjFiOTJmYzk4NWQzIjoiMzQ1YjBjYzAxNmYyNzY1YThjMzNmYzI0ZjFkY2ZhMTgyY2JlMjlkN2VhY2JjZGM5YmNkYTk4ODUyMTQ1OGZjMiI6IjY5NjRiOWI5ODQyYWVjOWM3ZWMyYWFkOTI2ZDcwMWYzMGVlYzc2ZmU2OTkyNjVhZTJhNzc2NWQ3MTY5NTgwNjkiOiI2YTAzYzI4YTkzNjVjNTU4YzMzZDNmZGM3ZTVlYmYwYjRkMzJjYWFjNzBkZjcxNDAzZmQ3MGNlZDA5NzU3NTI4IjoiYTU4NTQ2YzcyYTBiNGQ0N2M5YmQ2YzE5ZTdjZjRhYjczYjJkN2JhMzZjNmM2ZGMwODYwNmY2MDg3OTVlYmQyOSI6IjViMDI5ZWY2OGI2Nzk5ODY4YjA0ZGMyOGRiZWEyNmJjMmZhOWZjYzhjMmIyNzk1YWFmZWVkMDEyN2I3Mjk3ZmExOWE0ZWYyYmE2MGM0MmZmODI1OWQ1YTc1OWY5MmJkOTBmZGZiMjcxNDVlODJkNzk4YmIzYWI3ZmQ2MGJmYWVmYjdhZWZiMTE2Y2EyYTRmYThiMDFkOTZhMDNjNDdjOGQ5ODdmZGQzM2M0NjBlNTYwYjEzODg5MTI3ODMxM2JiNjE5ZDBjM2M2ZjlkN2M1YTM3ZTg4ZmNlODNlOTQ5NDM3MDVjNmZmNjhlMDA0ODRlNzRhZDQwOTdiMGM5ZTVmMTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjA5NjM0OTUwNmYzYTc2NTNkNTRkYjdlYzFkMDllOTM0MTNlZGQxNzViNmRkYmViMDBlNTY3NTJhNTIwYWM4ZmZmYzc5ODNiOTE4YWNhZGFhNzFhNjdlMTYyNGYxYjUwMjQyNjBhMDQ5NWZkYWJhNThhYWU0MWRmODI1MDUwMTJkNDgwYzhlNGY3NTFmZDdlYmMzOWY5YmVjZDY5NGIyYTMiOiIiOiIiOiIiOiIiOiJmNGM3YmVjMGMyNmNmMzg5MmQyMTQ1NDlhYzZmM2Q4MmYzNGM2OTY2ZDQyOTUwOTllZTU2MTY2ZTg3OWE3MGVjYWUxMzAyNTFmYWNkYTM1MWU5MDNkODc3YjZjNWVhYjUxNTNjZTg3YmE2YzdjZjhiY2M2MWNiZDE0Y2ZiZTM0Y2YxZWQ0MzY3OGFlZTY5Y2Q4N2I2MGU2YmNiNmZmNDhlYmQ0NGNlOWUzMTk4MmQ4ZmUyMGFlYzM0ZmE1MWQ2MjVmODQ1ZjYxMDU2NTc1OTY5YmY3ODVjMmZmYWI0ZGNjNzU0ZjEzZGU2MzQyM2U5NGJhZDhkNWUxNjZkOTZhNjJhNjAyZDNlZTQwNDVkZjE2MjAyOGI4OWNhYzQ1ZTYyMDdkOTA5N2YyYjNhYzBhYjE3NzI5MjUxOTg1ZjI3NmYxMjg3ZjVjNTZjYzliYTFhNzlmYmRiYjI5MWYzYTk0NWZiZmRiZDYzY2YxM2I4MmVjOTFmN2IxMDg1YjMzMjc5ZTMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImFlY2UyMDg3YjcxMzk5MmZmNDlkM2JmNDA0ZGNkYTE4NDAzZTAxNTYzMmFjMDM3MzVmZWQyOTEwMmNmZWE2ZWMxYjU3NDk1MjY4N2M5YmFkMGU5YWVkY2ZjMWRhNTY4YmU2MzIxNjJhODNjODAyYWI5NGYzMmJiZDg3ZjZjZjRhZjFmMjcwM2Y0YTAyYWY3ZDYwZTIyMzgzYTc3MGI5YWMiOiIiOiIiOiIiOiIiOiJjMDM0NDgwN2Q1ZTNlYTI5ZmVmNzNhZmIyYjgzZGZlMGFhZTE4NjA0N2ZhYjZiNjAzZDg2MDhkZjQ5NDc2YmUxOGJmMWYwZjQ3MDcxOThmZWZhMTg4MDQ0MDQ4ODdlYTNjNTk4ZDg4N2U5Mzg0NDBlMWZiYjhlZDBhMWEzMzBjZmY4NGQ5NTJjYzY0MDViMTJlN2JmNTFiMGM2N2Q1ZTQ4OTYwMDZkZWRiNDQ2MzdlMzkzYTk3OTI1ODkwZmQ1MTc2MjUyZjY5ZDQzOTIwMDQzODQ0YTkxZDA4NDA4NDRkODliODcxNTA1MmNlYzMxZTI1N2MxMjFkM2ZjMGVlODA3Yjg0YWZhYmVlNTk2MjRhMDA3MDNmNDY0YjAwNzlmMTI4ODRhNmU4ODhhZTQ5NTljNTQyMzYwNGY4YWUyZTZiNTdmNDQyOGUxMGI2ODBjYjc0Y2YyMDQxNzM4MGRkNTM3ODQ0OWEyNGVmOTVkOTQzOGIwZmVlMzg2YmFkZWU5NjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImMzOWU3N2Q1Nzk3NTVhYWNkNDU0YWI3Y2E2NTI4NTk2YzM5N2YyOGJjZDU0NjdjYzdlMGZiNDdmMzk4ZTg3NWRhODM4OTJhODQwMzgxYzFiYzAzYjdhMjIzZTkyOTA0YTcxNGRmZjQ1NzU5MTI0ZmEzMzQ2NGE5N2Q3ZjBkN2ZkMmQxYzZjMjE2NjNkMzFmZTgwYWJkYWQ1OTQ1OGMyMjgiOiIiOiIiOiIiOiIiOiIxMGY4ZWM2M2E1NTBjMzFlY2RhZjJmYjFiMzczZjcxZjE4ZDE0NmVhMDMzZGQ2NWNlYzJlYzBiNzNiNTViYjZmM2ZiYjcxMzZkZDA0NWUwOWM0MDczMjQ3ZjA5MzQ5M2NmMjZiNjY4M2JjOWViYzk4MDI1Zjc1ZmE0MDVmYjhkZWVjYmZmZWIwMjM2YTMzZjBlZDZjNzYwMGQ5OTJjZTVhMjY4Yzg2MDg1YWRhZGY2ODA0NzE3OGVkODlkOTNkNzM5MzUxZjg5MjcyM2Q4ZDZlNGY0Mjg5NDZlNGU2ZGFkMWQ2NDBhOWMxMWRlMjNjZTliNzkzMzI0ZTMxZGZhY2ZkMzY3ZDg2ODU1YTI4Y2M1NDRmODhiOGE5MTUwNjc1M2ZhMDYxY2VmY2I5ZDc3YmNjYzE1YTIzYTg0ZGJhNjQ0MDg5ZWUwM2RiODM3NGZlZTkxZGMyM2FmNjY3MjE1OWIwZDJkYjIxOWZmZDA3MzkwYjY5ODc5OTEwYjVjMzM2YTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImQyZThhMjUyNDlhYzg1MGZkM2IwMWY2MmNkMWVhZTNkZDk0ZDM4ZTcyNGY4ZTI2NDRiN2JiNTEwYzM3ZjIwMzg5MDI0MmIxMWJlNzczYmViMjAyZTllZTkzODk5YjYwYTAwZWJmMDhkYjE2NDhjODc1MGIxNGQ3Yjc4NGNkZjBhNmQ0ZTdjZGM4MTY0NjljYmRjM2EwOGQ2ZDMyNTAzYjciOiIiOiIiOiIiOiIiOiIwMTlmNzRlZWVmNjc0ZWYxMDBiYTRhMTgzNWJkZGViOTI1ZmU2ZmZmYTk3MTEzZGMwMGQ3ZDhjMGVkNDg2YTczZTgzMTU2MWFlNDRjNWJkOTBlMTg5ZmJlMmJiMWJmYjg0ZjNlODJlYzg4MDk2OTllZThjMmZhZDgwYjQ2NGI2YjM0NDk5OWMzNjQ4NjgzMDBjMWVkYjA2NWFlODYxMDlkYzI5NTE2ZjJiZGZlMmEwNDZlYmM4NzI1MDQ0YzM4MmQ5Mzk5MGYxY2JhMTg1ZjYxZjcxZmQyMmZiZDA3NmQ3MjdkZTMyYTZjMWQyZjQzMGJlZDQ5MWM5ZDA5ZWI2ZWU2NjlhMWRjNGY4MDQ4YzdiZTE5OWM3Y2JiNWFhNGYxNGQxNDIzYzhhNTQ3NjM4NjlmNWRlZTk0N2Y3NzZlZjI1NDNlYmI4OGQzMDA0NzM5MDg5ZWZkODZiN2IyMjMyN2FlOTUyNzQ3MDY4YjM1ZDRiM2Q4NmNhYzFkZWJjZTNlNDEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImNmZmM2YzQ0Mjc5ZTY0MTg1NmMzOWYxNGVkMzU0NDBlYTJmMTQ5Yzc3NDU5MTA2Zjk2MGNhZjkxMGFmMjFjMTA5MDY3YzBmOTQ0NTMyMGFkZmMwYWFmMGM4NjEyMGEzODU4NDc0N2I0MDQ5NTg4ZTVkOTM1NjlmY2VjZDM1OGM1MTUwN2JlZDU5Zjk2MTQ1YmI4ZGI2YmZiNGFkZTNhMmUiOiIiOiIiOiIiOiIiOiI5MjhkNmQ5ZjkxMjhiMGFmNjQwMjhkNWQyZTk0NDE0YWY5ZjhkZGRkMzUzZTQxNTVmNDJhNWQwOGYzZTUzMDkzMGUwMWVjMGRkZGYyNWQ2NWRlN2Y0OWRlNzAyNzkxMzcyYzcxZmNhZjVmMjBiZGIyNGViOTk5NzUyYmZkZmNhMjg1MjViMTYzMDhkNDZjZWZiMGJjM2IyNjA0OTAxMTU3NzgxNjFkYjJmYWViYmQ2ODdiOTQwYmEwOThlM2Q1YmU2NDA1NjViODFlZDlkNDM0YjY4NjFmYmI0Y2YwMzRiYTc3MzgwNTYyMTE5YWEzMTY0ZGM1MzY1M2Q0ZTgyZWM4NGNmMzUxYzM1YjFiNjY4MzQzZmFmMTdmMTcyZWI0YzBjYzM5OTlkN2QyNGFhYmE1OGRlZGYxMTIyNTMzNmI1YmQ3NDc4MjVkMmFlOTEwMGNmNmRhMzI3NmYyNmNlYzE5OGU1MmVkZjkxOTQxNjI0ODNhYTRhNDVmYTM0OGQwY2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjNhMWYwNDc0YzI3OTU0OGMwODZkZTllMTJlZDc1NGM0OWEwMzIyZTY2MzFmN2Y0NDFjODAyNGZlYTY1NGJiNmNlMjQ1YzM1N2IxM2FlOTQwNjRkMWI0MWMyM2U1ZTA0OTYxOTllOGFjOWQ1MzVmOGQ5NWZjZjg1ZmRiZDMxZWIzM2MyMDc5M2YzNTA3NWM0MTJiYTcyMTMxOTRhODczZmIiOiIiOiIiOiIiOiIiOiI5NTRiNTgwNDJkMDI4YWJkMDBmN2NlM2QzOWZkYjYxZTBjZmY2YzQwMzkxZWY4NjI5ZTg3MTAxOTE1NzcxYjhkMGM3ZTI0MjkyNzUxYWFiMTIxOTY0NTc0M2M2ZjU0MzA2ODY2Nzc1ZTI4YjU0ODE4Yzc1OWE2YmY4MDdjNDk4MmVkZGQ0YmU1ZTIyZmUzNWEzMDNjZDUwM2QxMjJjYzNmYzVjZmZlNTBiMDMxMTc0NTdlMmVmYzFmZDkxYTk3Njg5NjQ1NTIxMTY4MTFiMGU2NTg1NmU4ZjgyNTY2ODFjNzIyZWEyNjUyZGVhYTI0OTgwMjVlODQyNjJhM2ZkZDc4YmQzM2JjMzZjMDU3ZTE5ODMyN2EzMzIzMmVjZDM2NTAxYTBhY2Y5OTdkMDE0OWI0YTgzMzE1M2I3MTBiOTBjODcyMmIyMzJhNTc0ZDIyZTcwMjZhODlhNGQ5Y2MzNTA2Y2M5OTQyNzA1YTE2MmIzNGRiOWY0OTMwMWEwODdkZmUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImU1ZjRmYTUwMDk4MmJkZjhiMDIzNzg4ZjlhNTUzMjQ4MmIyOWIxMmU4YWU3NzYxMTFhZGFhNjE3YTk1OGNlODk3Nzg3M2NhZWU2ZTgyYzUwOThhZTc3Mjg3YmRlMWQ4Mjk1YjhhYTEyNTkyM2RkN2Y4ZTA1ZGY3OGFkYzI5ODk4ODM2YmU3NmRmN2M1YWFmYmE2NDkzYjIxMWNiZjhiOTQiOiIiOiIiOiIiOiIiOiI1YjNmYzFhN2VhNDE4ZGViZTc5OTk0YmMwYThjODZmNDg3ZWQyZjMyMGMzNDI5M2RiOTUwYTFhMDI2YzIzOWI4ZGE2MjI2ZDFkZWE1MDlhMGZlNzZmNWE4MTFjOTM5MWE2MjIzNDMzMjRjMjkzYTAwOTA1ODdjMTAxOTNhMjk2MWUzNThkMWU3MWMyNjk4MjdlMGQ0NGU5M2Q4Nzk4NGY0N2FjZjViNDc1MWM4YzA2NjE1NmRhMWM0NDY2MmFmNDgyNmNkZmI1ZjdjZjk4YjFmMDIwMGQzYTBkN2I5OWZlYTdmMWIxN2RlZTdhY2ZhNWJhZWU4Zjk1YWU0ZTBiYzA1MGJlZTJlZWVhN2MwOWJhYTcyOWU2ZTAyZWQxOTQ3NmJhM2Y4ZjVhOGMxNjYwZGUwMzUzZGY4NzIzZWZjZDk4ZjVmY2FhNTZmNmVkYTc3ZjJkMTVjNzZkMjY5ODlhYTk5OGM0YWZkYzUzZmZjZGU0N2RhZmJhOGZlNTgxOGU4ZWUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImI5NDQ0MzM5YTg3MzhkZjZjZmU5NWI2ZGMyODk4MGQwMjc5OWIyZWM1YzhkYmE5Y2E5OGZhODA3NTYyMWEwNDE3MmIwYzllNDE0ZWEzM2M4YmM0YjNiZWViNTM2MTYxY2RiOWEyYTUxNmYzZTg3YmNjOWY5MmViYmY0YWMxYTkwMDU1OTc1NjkwM2I3MmM0YzFiNWY5MDgyZDhiMzQxZjUiOiIiOiIiOiIiOiIiOiIwOTQ2NTAwNGYwMDllZDM3OGY0NDBjMTBmYjEyMmEyNjVmNDY0ZDM3M2U3ZjFhMTcxOWM3MTNmNmJmMzhkMjhmYjU0NDdjMjY5YzEyN2EwYzEwMDgxNTMzYTg0N2MwZTE5ZjRiNjQwYmUwYjFlZGY4NGQ5NTAyNWQ1NjY3OWU1ODgwOTIyZjI5Yzk0MmU3Mjg0Mjk2YTkzMDliNGZhYjFiNWJkOTk1N2Q0NzBkYjI4ZDNkMzZhMzU4NWZkMzc1NzNlOGUzMzU1ZDAzNjkwMjQxZDZmNzIxMWQ4YzZiMDU0YTgxM2JhMjVmOWNkYTc2MjAyZDMyNzBiZjEyZjY2ZDJlNWJhNWE5NDZjN2QyOGRkMjJkNTVkMzRhMzBhMDQwYWE5NzgyZDFlNDk0NjAzMTQzZDQzNmNiYjAyMTJmYTBkZjZkMWJiZjRmMTk4MThiOTlhNjhkOWNiMDYyYWFlZThmYTA1NjM2ZmM2MGEwNzJlYzZlNWVmMjQ1NjZjNmI5NmEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjJhYTgyMmVmYTIyZDRjZDY1MzU5MTA3YzQ2MzA5MDMzOTg0YjhlOWMzZWNiMWI3NzA3OGEwOWFkOWVjNzQ2ZWY0ZjY0YjI4N2JjYzMwNjQ4NjdiNjc4ZjgxYWIyMDlkYjNlZTEzMmExMWY4YzkyNDZjZTBhM2Q2ZGViMzM0NWY5YjE1ZTRjZDA0ODI4OTk5MWM2NGEyMWFmYzQ2YWM5OGUiOiIiOiIiOiIiOiIiOiI3Yjc5YmFmMDEyNjc4MmJlYmYxNzk0ZmI0ODYzM2RjNjliYTg4ZDYzNTA0ZDI3YTIwNmQ5NzQ4NTRkNDQ2NzM3ZGE0Y2ExZmM1YmJjNTQzNjg5NjZiNTgzZGM0NDFiMTA1YmIzMGIzYmUxOWYyNzc4ZWQzMTU2NGFjZjMzM2I3YzRjYjE3Mjc0ODBhYTk4NWFmZDgwMzk2ODY2ZTEwZjZkYTMxMjg3Y2NlMDczNThkNjMwOGU1NmUzYmJjZTg2MTNiYmY0NzJhZWFlY2IyN2U2NjMwNWUzNGFmNTkzYzg2MzE1MDhjZjdkMmM1MTJkZjdjOWIzYWIwNGE0ZWRlNDM2YjlkMmU2OTE5YzAzYTUyNWRjZWJhMTBhZmJmNmU4YTY0MTU5MWQwOWU4YTkwNTQzZjE5MDViMDg1MzdiODg2ODMzN2M3NzRjMjBlZDQ3ZGYzMmQxMTVhN2YzMzA2ZDgwOGJiODJkMDZiY2JkYzgxMDQyZDBhMTZhM2ZjOGQwYjYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImEzMmFjMGFhYWVlMDVkNTdjYjNhNjI2ZmQyNjg1NGVmMDhhM2FkNDJhM2M2ODhlYzZhOWY5YjY3YmJmZjAyZjg2ZGYxNTBkYjBkZTJlMzYxMmNmMTA2ZDlmMTU4ZmI1NzA5MDFlMWVmYjEyMjUyNjY2ZTdhNjgwNTEzY2YyMmJjMDE3MmM0ZjhjMGQ4YjJlZWNmYTFkNDcxYzEwYzllZjgiOiIiOiIiOiIiOiIiOiI4MjcxYmQ3YWFhNzk1YjU4ZDhmNzQxYmMyMDczMzIzMzVhNjhmZWI2NmFjOWMzYmZkNWRhYzcyZjIwODA3MDI5ZjU1NWMzYmNhYzYyOWQyMjhjM2E3N2Q1OTZkOTljNWQ1NDVhOGRjZGQwYTJmYjJhNWVlZDVjMzQ5MjYxOGRhYjRmNzYzZWNkN2M2NTgwODE3YzZhN2FjY2E0MmQ4MTgzMWJmYzEzZjM4ZWQ1NmVkNDIwNTU4NzdjN2YzMWRmYWQzNWE3M2ViMjA1MmY2ZjkxODNkZmM4OWI1OTI2NjgwZGMyYWE4NTk5NWQ0MmEwYzA3M2M4ODFmMWVkMzMyNzk0YTc4NDU1MzQ5M2JmZDg0MjIyNTAzMGUwMDU2ZDc2ZTUyODEwMjM2YjE3ZjZmMDY3ZDEyNzIzNzIzOTVmZmU5YzJkZjMxNDVjYzY1ZWQyYzZmMmYxMjFkZmM2YzFlYjhmYTYxMzJiNDRlZTAzNzNjN2MwMjdhZjgwMzgzZDRhN2YiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJjNTg2ZTBmNTk5OWYxMDcyODFkZDVjN2NhMWZmODhkNDYxN2I0ZmQxYmI2MTMxMzg5NWRkNGJlZGU4NzVjMjdiNWIwZTZjNWJhMTVlODcyNWViYThmYTAwOTQwNmFhM2Q4YjhiNjZmMTNlMDdjODkxOGMwZjNmNTUyNjJkZWJmYmVkZmM2NDEzMjllMWZjZDY0NDJjMjQ1NjI2Y2ZkMjA2IjoiIjoiIjoiIjoiIjoiOWQ0ZjRmNjg4NDA2ZDhlNTdkOTYzNjk1NTNlZTM5MjY3YTlkZjkwMjBkN2ZhNzhiMzllMWYyNDY2NzViNzBhODA4MGNhYzVhYTY5NjdlNzhjNTUwNzEyNDFlMjBhOTQ0NmE4MjUwN2EyMTVhNmM1ZmFhM2EyZWEzYzA1YzEyOTA1NTU4ZDk4YThlZWY5MGM4YWJmZmU2Y2Y4Yjg3NGM1ZWYwNTdlMzY1ZmRmMTc5NDM4ZGU2YTc4YjRkY2MwNzViNDFhYWNlODc1YTVkZDM1YTQ0ZjJkMmIxN2Q2ZWY2YWE5MWY3OTM1NDkzMWM0ZDQ4NzE0MmY3YWMyMTIwZmQ3OGNhYTZjN2ZmNTI5ODcyOWRlMTZjMGU4Mjg1ZDczYTNjNmE5NWFkYTk5ZjMyOWRjOWFhMDkyNGIwMDU5YTY1ODU4NTMyOTY3ODliN2UxMTI5NDMyYmFlZjRiYmQyMjQwYThlZjdiMTkwNDZmYmExMDRhODVkNDNhZWUwZWJmMDIxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiYmNhYzZjMjE2MDQ1NWU3ZGIzOGE5Yzk0ZWJkMzI5YzFhYzA0M2I2ZmY2MDdhOWM3NmE4NjE1Njk3NGQzMDI1MWI0ZjRiMTRlNmNmMDFkNDA3Y2I0MjZhZDYxNjA4ZDE1OTlhNmI3YmE5NDAyNzU2YmVhMjcwOWNmM2IxNjJjYmYwNDBkMGY1ZjM4ZmM0NTg0Y2I5Y2Y0ZTZhN2JiMzk4NCI6IiI6IiI6IiI6IiI6IjM3ZDc2ZWJiYWIwZDRjODM1NDA4NmE1YzVlZGQ1YWE2MzE0YTQ3NzA3NDlkNDY4YjllNWQzNDU0ZjJkYmM5YjI1NDMyZjJkNWQ5ZjRiODhiZWE3Zjk4MzVlZGIyMmY4YTdiMDliZDYwNDcwMzg3MGFiZWUxMTYwMzY5ZDA1NzViZGQzODQ3ZWU1ZmE5M2E5ZmU5YWFhYWMwZDQzNjAyMmY5NGQxYjk2NjU1YWIwMGZlYmExZjQwMjAyNDI1ZTUxYjA4NGUzNzIyNDlmYmMzN2Y0OTQxMGZjOWQ0ZDE2MTczYTliYzI5MTgxYjYyZTM0MmE4ODM1ZjgxOGQyNjQ3YzQ1YjZjZTZjNWI2ZjI5YWRkMTNkNTdlODA1MTNmNzY3MzM5NTc1NjcxYmNjZGNjZGM5ZDA5M2RiZDcyYzkxYmEwN2Q4MWM1OGFiNTI1NmI2NzQ0YTk0ZjBlNzU0ODJlMzg0OGRlODkxZGFiZjM4NDMyMmQxNDE5ODE0Y2ZlMTU5MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjRiNjY3ZDM1YTQ4MTc3OWFkOTE5OTU2Y2EwNmUwNzM2NmE5NzQ3MzhjMDlhNTY4NWZhMjNiM2ZjYzFhNTQyNjBjZDM5ZDcyNWE3ZjI2NjFlYTg2YTJkNTdjZmNkMmE5MWUwODQxOTQ3NmJkYzU1MzRkZjU4YzZjM2IwNzdkM2FjZDI3YWNlMDQ3MmY5MTg1NGMxNjRkZTdmNzZhOWIxYWMiOiIiOiIiOiIiOiIiOiJjODJlNWUyZmIwODE3MWMyMzM2NzBlOWU1NDAzYjA3YzYwMGJlNGU5MWZmNWI1N2FlMjg0YzRkNzMzMTM5YjU2ZWNlNzIwZTgyZDNmOWFjMTg1ZTM3ZDBmNDRkNTI4MTIyNGNiNWY5ZDIzMGRiZGZjYWYxNzU2Mzg5ZmU3NTI1NzVhMjc2NGY2YWU3NzVkMGE4MmYyZWIxZDkwMWFiMDRiNTliNTRiNWZhZGIyYWNjOWI5YWYzZTgyOWVmMTk1NzFkYzQxNjc1MmIxYmIwOTM1ZWEyZjNhZDY5ZGM0NTIyODVjMmYwODQxMmIxMTc5NDEzNGJhM2JkYTBhMTA0MjU1NzZlODhlYTdiMDY5Yjc0YjQzNmFjYTkzZmU5ZGQxZGFmYzc4ZGExMjI3YjEzZDcwMTU3ZjYwYzliZWU2NDQ0NTFmODc2NWU0YzhiYWRkZGFkNmM3NzlkNmI0MmQ0ZThiNWJhNjUyNjkxODZiMDRjMzhkYjM0OGFiNWY3YTQxNDYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJjMGRiOTQ1M2Y4NGMyYWE3NGJmOTNlZjIxYjllNzgwMmJiODk5NWY2ZmE1ZTYzNGNkNDA2NGNhMmEwMDc1MzE5YTk2OWJhZDEzNDViYjU0MzJkZjYzNDEyODA3YTY0NmQyMDA4Mzk0ZDgzOTg5Y2I0YTUwNjk5MGY1OWY4ZGE4MGU2YjNhMWRmM2ZiOGQ3MjY2MzlkNTljYmFlZDE1NjJmIjoiIjoiIjoiIjoiIjoiMTIwYmMyNjhjYTBkM2Y1NWQ1YWZmNWIzNjBjYTRkMjlhNGI4ZWM1Y2I2MjRmOTY3NGVmMGE2N2I5MGJiNzBjMjM4Yjk0YjJiZjgwNGZlNzRjYTE4ZjgzNjRmZjhiMWU1MGIyMzE1ZjhhYTBjM2ZlYTY2M2U5M2M4MDU0NDI4NDEzNmRlMWQxNjJlOTA3OGU5YTA3NGE1MGI0OTNiY2M3ZTBjODNhMDA0NzE5OTE2NGEyZDMyMTMzZGI1N2FiYjA1Yjc1MWEzNTdhYmQzYWQ1Mjk4NzczYmUyMWM1MzRmOTg2NDVlOTRmMDkzNWFmYTUzNzI5NDYyYWNiZTU1OTkzYjdkODAxYmQ2YjBjYmM4ZWViNWExYzVmMGMwZDY5MDcwMmY4ZGUwYTFhNzhkY2NhODg2MjUzODIwMWZhZmJlZmVlNTVjZDViZTYyYWZhOGU1MTExYzg5ZjFmNjhkMGYxNzYwY2VjYzg2YmY2Njc1Y2IwOWIyMGUwOTdiYWNlMDM3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiMzE4MzZkMjkyY2I0NmFhZDU5NDE3MWU3NjIzN2EzNDIyODQ0ZjYyZmIxNGQwY2RmNjNiYTU4N2U3MzUwMTA1MWM3Y2JiMjgwZDRiNDY0MTJlMTA5MjdjOTUyM2JlZDFiZWViNTE2MzczN2RiN2Y5MTBlNDQ0ZTVkNTIyMWM1NDY5NjU1ZmRhNGFiNzIxOGU2M2UxNDUxZjQ2MWI0ZmM3MCI6IiI6IiI6IiI6IiI6IjFjZjNiNDlmMjhiNzkxZTdjODE3MDZmYjFhODcwZjFhZjEzNGEwZmIwZDJhYWNmY2Q2ZTQ0NmNhZjBhOTFjMDRkYzE2MGYwODBlYmQ1NTAzZmI3YzE2YWQ5MjI5YmYwYTdiZmZjYWFkMDczMjlkNWJkZTQ1NzY4NzA3NThhNGJmZmViYjZiNWMzMDkxMTQ2ODhkYjhlNTlhNTU0MTNiNGIzNzY4OWRmMzhkNzJiYzUzNTgyOTFiYmNjMGIwNWFmNDg3YTMzOTM0Y2U2MjZlZmRlOTE4ZDBlZDVmMmRlYjc1YTE3YmQ4OTEyYTMxZGNjZDc4MzM1NDQ3N2ZhODUwNTIwYzNiOTdiNTZjNmQyYjllNGEwNWQ0OWJjMzZlNjY4MzI3MWYyMzIyYzlhNTQ2ZmNhODhjNTAyMTg3YTVmNGEyMDM1YmY1YzUyN2FhMzEyZjE2YzM1N2MzNzE2MmQ3MjI1MTBiNTJmZjgzNTc0OTBhMDk2NjkyNTcyY2ZkOGIwZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJhMGMzNDFkZGY3M2Q5NDA0MTc3YTVmZGUzMmNiZTIxMzE5YzMxOGYzNWNjOWFmY2E5YWQ0MWEzYjA2ZTEzNDkxZTg0M2NjNmFmZGYyYmNkMDBjZTc3ZmYwNmNlM2Q4YTU0NzcyYzQ2YmFmMTQyZTU2OWVjZDkxMzFkNjE4NWFmMzU3NWJiNjJhNDFjYjY0NmJkY2FlOGE3YTlmZTYwY2M1IjoiIjoiYjgzNDkxZWMxYmQ4OWYzZmM4NGFjZjFhYWQ2ZmJlYjhlZjZhYjk0OWY0MWFkYzZkMGRlZGM1MzcyMmMxNzFmZSI6ImI3NmNlYzNkNjMwMGVjYzRhMDJlODEwMjk2YzdlNzBiZDliNGU3MTIxZmM1ZTk3MWNiYjk0MzM3OTgwZmRkYmQiOiIyYTI1Y2IwZWNmOTEzNzQ5YWQ0NmI1ODVjNzYwOTc3MzlhMTRjYTdiNTlmMWYzY2U0Zjc5YmM4YTRhZmQxMzc4IjoiOThjMDFkNDUyN2ZkMTMxY2MzMjdlOTYzMjEwNGQ5ZWVlMTA0MDdjZDczYWI2MDcyMjhkMzdiOWI3MmNhMmM5ODdhYTc5NDgwNGQ1MDVkMDcyNTYxY2NkNTAxNmJkNDE4OWFjOWUzZGI5MTg3ODIyODc3ZGQ1MzMzNDdiNWQyMDcxODE4YmI3NjgzMzEyZTFlODgwNmU5YjczYjAyMTc3N2Y3Zjg3OGJiN2QzMDRlYzU4Y2U5MmU1ZTM2ZDNkMDVhNzM4M2RjNzdmM2ZlNmViODRiNjE1ZjNmMjkwYmY4YTQzYzM0ZWY1NDc4YTMwYTZhZDYxNjE1N2M5ZDdkZDA0NmFhNjZiNTIyYmNlZjYxYzlkMTkzODJjMzI0MjVkMzhlZDNmYzA0OWU3MzAzNWFmMWU4Yjk3Mzg4ZGUyMmM0ZGNiYTBiZGMwOWZkMzZhYjdlYjNmNjc2NTljYmQ5MmI4ZDdmNmQ3NGI1NmZjOGRhZjE3MDY4YzY1ZmIwMTZlMjlmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6Ijc4MTdmZTg4MGMwYTQyMjRlYWVkMGRhNWYzOTYyNzI3ZTRiM2JlNTY3MDIxZDM3ZDNiNmQ0Y2Q3NzkyNzQzNzhmMWNkYWI5MWM0ZTdjMTQzM2RjZGNkMGFmYmU0YjQzYzMyYTJiNWZmYzUyMGFjMzcyMWJmZDUzNTJmZWQwMjNkMDQ0MzljMTc2Mjg4NTIxMzE5YjVlMzE1YjZlNWU4NWEiOiIiOiJjNzcwOGMyNTAwM2U2NTg3ZmM4YzgxMTZjNTAwZDM3Mjk5ZjVkNWZmY2FkMzQwNTM0OTM1MWQ0ZmVkNjIzODc0IjoiNDVmODhmMmRmNDNjNGI5YzNkODI5YjdjZmU2MTkwNGRkZjY1OGMxNjA0MzI3MWYwMWM1ZjA2YWQzZWM3YmMzMiI6Ijg4M2NmZDcxN2FkODQ2NjAzNWU2ZDNmM2MwNDgxM2UyMTY1N2FkNjJlZWFjYTQ0OTc4NWFlYjA4MzZhYzk0ZjgiOiI2ZTA2MzNjNTMyMDk5ZWJmMGIxMGQ0YWQzNWQ3OGE0OGI4MmZiY2UzNzkxM2U2NTU0ODRhZTQwZTI5NzcyYTI1NjMwYTdhYjM3ZjFkMGVjZGNlMjc3NzNhMmNlODg1MjFiMTcxNDMyYzA3YzAyMjY5ZGYxODIyZDJiNmNkZTBkOWY3NjgzNzVkOWM2MGU2ODhmNDk3ZmI3YWUyNjJjZGQ1ZjdlOGI4NGI4NDQxMWQ2MTljMzY1MjliNDE1NzZhYzQ1NmEyNDBlZDk0ZDc1MGZhNzIyZGI4NzQwOThlZjcyMDBjNzRjMzIzNGEzZTVmMjFmY2JjMmNiNWQ1MGM0Mjk3ZDFlNzA5MDFiODkzNjk2NGNjZDI0MjA5ODAwMmY0YzhlZDdkYmY0OWRlOGMyYTkyNGM3MzdmMjQ4ZDQ2YWMxNDY5ZjY3NjM3N2NhNTJjYmExMmYyOGQ5YjUzNDUwNGQ2ZTg0MjNiNTQwNGI3ZTE0ZGU5NTRiNDIyNWJiNTM1NTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiZjJiYjZlZGVjMDAwOTgyYmZkYjMwMWQxZDg4YTIzY2U4NDBlNDk2YTRmNTk1YTY2MmU0MTI3NTcxMjY0ZjFkN2U5ZTI4M2M1NjdmMTFlN2UyNjY0NTlmYTc4MWM2ZmQ5NTMzOTAxNTgzNmViZDY5YWE0Mjg1NzAxMGY0NGU4YTcyYjgxZjUwMWM5NjkzMWZiNDkxZGMxMTkyZjZmNmEyNyI6IiI6ImVjZDVlYTMzMTQ2Y2I3NGE3MDdlZWRiOGRmODgxZWRkYjE3OTdjYmI3YjE2YzE2ZjhkNzQxZDIzNzk1Nzc0ZmMiOiJkNDEwZDZlMmU4NDhmMjI0MWVlNDVjOTg3MDA2NGFjMDIxN2Q5N2Y1OWE4ZTgwZjZiNTEwN2ZmMGU0MjQwYmQwIjoiOGE4YzU4ZmRlM2I4Yzk3MTE3NTdjYjE3ZTQ2NTg3ZDBjNTE4N2Y3NThkNjQ0NzhlOTk2ODYwNGFmMDM2NzEzNiI6Ijk5MGIxZjY4MTUyYjM2MDdmMzAxMWY4ZDA0ZWEzM2EzZThmYzQ3OWM4YTZlYWViNTg5MTMzNTY5MDQ4ZmUxMjg0YWI0NGQ1MWJkY2Y0ZjBjZDRjOGQ2NGY0YzYzMzdjZGJlNWY0ZjQ5N2VhOTBlZTQyMDQ4NDViZWJjYTJmZmRlNzgzMWNmNDk4OTI4MjkzMjI2NDRjNGUyMGE0NWE5ODg1ZmY2MTliZGY1ZTc5ZWU1M2MyNmY0NzA3MmUyMGE0NmQyYjEwOGQxODBkNmJhNTg1OWE2OTZmNDcyYmZhYTgwYjJmY2M3ZWRhMzc0YTNmOTFhYzBiMDZjOWYxM2FmYWMxYWYyNDRhMzg5Y2FiNDQ4OWQwZWUwNGEwNTk4ZjljNTE2OGYzOWI0MGU3MTI3ZGFkOWYyMGQ2OWVkZTZjYWU3NjgzYjI1ZGVkMWNmOWQ5MDM1NDFmYjRiMGE4MDRkN2MxNjNhYjA2OGQyMjk0OWYyOGE4ZjRlODUzZTY5MWU1MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiI2OTY4ZjViODcwMTliNGNkYWZjYzlmM2E4OTMyMWYyNWVmNWQ4ZDcwZmQwNzgxYzllM2JiMDFiM2FkYTE4YzhiNjFkOTE0MmI2MzlhYTc1ZjVmOWQ3OThjYTUzODQ3NWQwOWIxMjEwNDhlOGEwY2M0YjIyODZlZmExMmZhOGI0Yjk1OTkzODI2MWExZWM4ZTYwNzUyNmI3YTI3OTMxMTkxIjoiIjoiZmJlNmI4YWY2Njg1NDIyZWVlYWZjMzIzMjdhOTkxMDRiNDVjYTU2MDI1MTNhZWQwYTVjNjIzNTMyOGU4YTdhNSI6IjA0ZjEzNzM5MWUyN2NhZmZlY2Q0NDEzYzc3NTExN2ZlZGEyN2NhZDgzOWFhOTAwZmYyYWY0N2M3MDAwMzRiMDgiOiJmMTg1OTI1Y2MxODBlNTU2YTA3MDNhNTk1NmFiNmQ4NDYxMjFmOWQ5Y2ZmOTdmNjViYmVkM2JjNDQ5MDRjYjVmIjoiYzhiYmUxNjE5MmJkYTc0ZWY4OWQ5ODU5YjI0OGFjNjU4ODk2YmQ0MGI1NDkxYzkwZTkyM2NhYjY4MTVlYzNkMjEyNmM2MjQxMDM3MGY1ZjQ0ZTAxZmJmMWQxNjUzMDY0YWVkODM1NjA0ZDVmZDA2MzNjOGI3MWNkZGU2YzgzMWNkOTFkNjllNDIwZGI4M2U2ZDVkODJjMjZjNDdhMTFmMmVkZTYxNmEyODg1YTg4NDgzNWNmMjE0MmE2YWU0Y2FiZTk4OTcwMDEyNWRmMTI5MDIzNzRiY2NlMDRmM2ZkNzhmMDM0ZTUwMzk4ZDliY2Y0NjNkZGU2Nzk2NjI3ODIwYzc1YTdlZmVlODJmZTRlMTYzNzVhZjU3YWQzMTU0OTczMDQyZTBhOTIxMTBlZjc0NWY0NjgzNzdmNmNiZWM1ZmExYTE0NzBlYWM4MDQwOGY4ZTk2ZDM3MjQ4YjEwMGVmODQ3NmMyYTg1Y2NjZGZjYTU2OTZmZmVmZWVlY2RhOWUwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImU4ZTk5ZmZjZjA4YWFkOGU1MDM4NmY1ZDA3OWQ3OWQzZGI3ODNhNzQxNjVjNjEyNmI0MmIzMTQwZjc0NGE3YzcyMzU0MTkzMGM4Yzc3MmFkYjYyOTgxZGJlZjhkMDU0ZWNkY2YxYzMwMjI4OTA0YmQ3YmEzMTc5OGJmYmJkNjQ3NTdhYTI1MWFjOWExYWU4YzIwYTA1MDY3MGZlYWM1OWIiOiIiOiI1NDZlMDQyNDdkNmNiNTIxMmE1N2I2MmY5OWUxY2NhNzY3YTU3NjhjZjc5Mjk2ZjQ1ZjBkYjI0NzMyYmE2MzY4IjoiZmQ0NWY2NmM4ZGVkZTQxMzg3MzczYzM4Njc0NjA1ZjNlMDc1YzliN2NmYzY2MTIzYTU0NzhiOGY4ZTNhYjI3NiI6IjM5OTExYTc5YzZlZGJiYzgwNWE1MGQyYWEwMTg3NDIwOTQxNzdhOGUyMTZkNjQ3YzY0NDI4YzAwMTY5YWIyZDYiOiI4NzE1NzdkZGYzNGIyOWU1Y2FmMTMyYWE4MmUxZDJmMTU4NmI3NmUzOWFhYjYyYWNkMDJmNmQ0NDQwOTA4YTc3MmFjNWY2ZmQ0OGM1ZjU1ZjFlYmUwZTc2MjIxYWM0NmI4MzRhOGE0ZjVkZDk5NTg3MjFlZTA1M2JhM2FlZjE1NzRlYmQ5ODBhNWRhNmE5NDY5MzY2MjcxN2VlNTQ4YWYwZjkyMTQyMWQxYWZiODE0ZTRkMTc5OWQzNTE4ODlkMmExYmRkNTc1NzBhOTEzZTQyOGU2NjEzYjE2ZTE1OGMxY2ZlZDAzOGY2NTc4OTIwZDYwZGI3M2RjMTBhNDBkYTliYzM2M2EwMjA2YjRlN2U0OTY3MGVjY2VhODY2ZWZkOWEwNWJjMjM3MDQyY2YwNTJmMmE0MTQwZjkzNzdlM2M2NzkyYjg4ZWEwNjMyM2ZjZWJiOTljNjQzZmMxYzM2NTM3NThkNjg2NmNkYjE0ODgzN2ZiMGZkZjc3ZGUxNTY0Y2YiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiYzc3NzRlMTk5YjVhOGMwYjMwNmNhMjM2MTYzMjQ5MDQ0ZWMyMTUzZGM4OWJkMWMxNDU5Y2ZkNDBjYzYwNjlmZDE5MjE4MzdhYWE4MGY0ZGZmMzRhOTdiNGRkN2U5NGMwMTQzZWZhMjRmMzQ5MjRmYTUyYWJiNDI3NWE2M2NhZTcwNDhhN2ZiYjhiNzYzMDBmYThkMTA5Zjk1NjFmMTY5OSI6IiI6IjFmNDM3Zjc1ODUxMjA3MWJkMjNkMDkxYzJiMWFkOGQ1MWI5OWFjYzY2M2UxZDAzN2ZjNTQyMTA5MmNiYjFhNDUiOiJjNjIyYWMxMDcxYjUwZTRmODk5ZTQ3NjBjZmVkNDc2YWRjMDEzYjZmZjk1YzliN2JlNjcxZjc5Y2QyNDg3YmE1IjoiZjk3M2Y0NWY3NWZiMGQ2OGUwYmM1YTcyM2E3MmU3MjJlNmM4ZjNmZWEwOGQ3ODUxNDFjNzg3ODZkYTUxMDFjNiI6Ijk0NzVjNjk3YWY0MzBlOTRlZDM5NmM3MDdiYjdkNWVlNWJmZjE4NDA1MTMxYTBlODk4ZWQzODA2NWFiYzI4ZWJkYzFkYzMzZDc2N2M0ZGFiNjljODQ2ZTMzNTBiYjQxNGVmMmQ0Mzc5ODcxMDk1OGE2ZmYzZTZiNTVkZTkzYzJhYzMxNzkzYTFkZDRiMDczNzllMzY0Y2U3MjU1MzMyM2I5YmNhYTg4MzljYmJiZDM0N2I0YTgyMDEwYjc4OTY3MjE5Yjg0YzZmZTlmOTI4NWZmNzQxYTAwMzZhYmE2YmZhN2RkMGQ1YTRmZmMxOTM2MzQxYjBlMmEzMTA4MjEyM2I2ZDJhZjY3NDBjYjNmZjQzYmI0YTg3ZWU3NGVmN2ViMDYwMzA3NDU0NTNkMmVjMjI1YzhmMzFkMjE0ZjFkZWFkMGYyOWFmMDFlYmZlOTBkMmY4YThiZjVlMDMxMjQyZWJmY2JkMTM2YjNlM2RiMWY2M2E0NmY2OWEyNmQ2MTU5ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiI4OTg5NjNkMDIzN2M1OGU0YjdiNmU4OTRhYjI3MTU1NTQwN2QzYWU4YzFjNDU5OWY1ZjU0OTBhZDU3MDE5ODRhNmU1ZGRkNThkMzExYjU0N2Y2ZmQyZDRkNjdhZGRiNGNhNmI4NjgzOWI4Mzk3OGJhZWY3MmI4Y2ZiZGQwY2YxODA1MThhZjBlMzJlNTJhZDRhNzNkYjQ2MGFmMDVlMTg3IjoiIjoiY2JlNWYxNDQ0NWNkMzEwYWVjYzk3MTEzMjMyYTAxMjFlZDIwODJmMmM0MTUyYjRiZTY4NDQ4ZjM2YzkxYjFmNCI6ImVmZTBlZjAyOGU0MTc5YWUxMGIzNzhiY2RhM2Q5NjA1NmZmMjFkOTQ0MDRiZmUwMjJiNTYzY2I2NjkwYWQ1NjMiOiI5OGNmNmE3NzFjMDVmOTA0YjUzZmY5YjEyNzA5ZDIwYmMzZjE4MjEzODVjZjI3YWNlN2E0YTU4NGU3Mzg2NmMyIjoiNTY4MmI2YmQ2NjdiNDVkY2YxNjUyN2E4MTc4NTJiNTJhN2Y1ZDBmYThjOTYyZjNkZDNhZjYzZTdlNzE5OTBkYTkyYjc1ZTlmY2Y1ZGU1OWIxNTY1ZjUyNWE3MzRlOTc4YmE3NGRkODBmZTg5YTJlNTI3OTYwY2U0MjA3YjljYTUxNGQ5MzM2NzZhZDkzZTZkZmY1ZDU3MzE0YTQ1ODg5NjM3YTYyM2ViNzgzMjg1NGMzODk3ZmFhNTExZWQ2ZGQyNDZkMmI4MjgwZTdkMDUyNDY0N2Q0YmY3NzE1YjU1NDZlMGE5YTFkZWMyNDZiMTY4MGFkZWEyZWVjZGMzNTRmYjMxMjI2NTQxMDJjZDBiZjk0YWM5MzMzY2FlZjNmZGMzNjllNzY0OTY1MzM1MjczOTc4M2QwNDhlMDhlOGQyMzFiMzMyZmExNTU4NzQ1ZTJjZTg5ZGQ3NmQxZGM0NDJhNzFkYzNkNWViN2QzNDgxNTU4OTQxZTI2MWY5ODliMDk3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjQyNmJmZGQ0ZWFkNjU2NjExY2U0OWJmZDlmMjEzODQzYzE5NGJiNjg2MzUzNGViYzI1ODQxNTE0OGY0NTdlNmU2ODVmY2Y1Mzk5MjJhYWRlMzQ4YTJhZjY3ODAzODYxMGFmNjc2MjQ2NjMyZGQ3MDkyMGQ2NjE1MThkNGRjNTIyMTM4MWIyZmJmMWMyZjNiZmVkMDFjYmI5MzAzOTgwOTUiOiIiOiI5NzE3ODViMThlMjQ0ZDAzZTI1YjlhODBjMmMyMjA0ZjViYWI2ZGNiY2FlYzk4NjM0MjQ1MGViOWIzNzZiYjVlIjoiNWRlNTgyY2JhNDNhNjEwODY2NTc4NjA0YzlmMmE1NDI4MzFmNDFjMjc3ZDUwYjMyNGY0ZWRmMWUyZTVkNDk4YiI6IjQ2ZTRjMzI1ZDJjNDVlMDBhM2MxN2FiMzUxMTViNTM3MGFiYmFlNjEzMzdlYjJkYTRlNmFhOTFmOTUxZjU1ZTkiOiJmMmU4YmUyZTk5NGI3NGE0OTQ1ZmVkYWJiMTY3Nzc4NTIzODY1ZWQyNzgyNmY5YzI2Y2EyYjQ5YmYzMmFmMTYyNmFlNjJiZmVhYWIxM2U5YmM1MmEwODFmMzY1MDYyYTVjZGJlZDA4NzJmNjQ3OWNmZWM1YTVlNzkxNzFkOTdlYTg5OGU4ZDEwZWQ3MTIwMzg4MmQxZDdiN2QyOGM1ZDU5Yjg4NzI5ODVhYmM2MjhlNzM2MjJmNjE2YzRjMDkwNGVjYjFlNDUxOGJlOGI0Mzk4NjYyZGZmODgwNmMzZjQzNzUwY2M5YmU5NWFhYWMyYTQ3MzBmNDAzMjNkNjNhZjE1N2QxMzU1NWQwNDNjNGQwZDdjYjUzZjIwMmRmMjgyZmRmYzU1NDRhMjM0ZjcxMTIxZTg5MzgxNGY0YmZhOTI2MzUxYzVlOTQyN2U5MGYxMTE3YTNiY2U3YTE2ZjBlMDhjZDA2YzNkN2M0NThmOWQwN2NhMzI2OWUwMTU3MzNhYTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiZGRmYjNkMWQ5M2U5NzdhZWNkMDhlZmJkNzFkZDQ4MTY4ZTY3NjU4ZDkzNTk2Yjc0MjY3MGVkN2M4ODA0YmQzZTczMGQzNGE4MGNhMWZiNGFkMjQ3MWVlMjI0NjFiYmRhNjcwMzM3ZDY3NWExNzcyMWFjNjNjMzc5MzE1MzgzMGEyNmIxODcxYjMxNmEzZTEwZTQ5YzU1NWY0NDcxOTU3NyI6IiI6IjM5MGM1M2E1ZWMxZGI1Mjk5NmViMDQyZjlhNzZlNDVmMGJjYTc2ZWY2ZWEzMWI0NjQyZjAwNjU4MzQyZTYwMWQiOiJiNTQzNmU4ODBjMTVmMDNjM2JiODQ2ZDkwZjNlZTVmYzViZjUzOTM4NjVhMTEyYTQzMTdkNzI0NzM4ZjVkZDI1IjoiZDE5M2Y5MzJhZjg1ODY5OGFiMDg2YmRhMzZkMDRkZmRiZmFmNDg3ZmFlNDI5OGIzOGZlZjk3YmNjZGY2M2YzOCI6ImJkZjllMWJhMWZiYWZkYjhmNDYyODA5OGFlZmFlNDgxMGVlN2ZkNTY1ZDBkMjg1ZGRjMzg0MGY4ZTI0YTk5ODVjMmRlNTdlZGY1YTUxMTA3OWJhNmM5NTJjOTVjNjI2ZTI5NmZkNjJmMzU3OWFkMDNkYjUzNjIzOGZlNjkxNTgzMTdjOWMyNmQzNzM4MTYzNDM1MDVjNjBhNDhlMDdhMDBlZGZmOGZiZmVmMGNlNjllZDE3NmU1NDg0ZDA1NmFmMDJhMjcwYmI2ZmNlN2JhZTBiMjIzYmZkOThhZDM1OWQ1M2IxNTlmMzI5NWJlM2ZkNjMwYTU2OGQyMzYzMTIxYzcwMjFlYzIzYjE0NjkzYmU0OGY1YjU1ZTA2YmUzZDcyOWMyYTgwOTQ4MTk0YjEyNjZkYTk2MzE3YmM1OTIzNjI4MDk0MDlhNzY2NmQ1YzE2ODEyNWI5OWRlMjZkYTc0MWYxN2NhNTJkNjM2ODVlZThkODI2MGQ0NTc2NGZjNzhlYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiI0NTdlNDlhNzFkYTgxYTJhMDhiYjE5Yjk3YmE4ZTYyYWU0YjVhZDRhZTY0ZGFmNzU4YTgzYTc1NTA2ZjkyNTExNDliMmJkNzE4MGY2OWI5MjE3MzQ2ZjgxNjViN2NkOGYxMDBlMGIxMDY2ZTI4NzdmNWU1ZGEyMWIwMzdjMmJiZjE3ODYxMWRhZTYyN2Q5YmVhZWU2NGE5ZDAxODY0NjJhIjoiIjoiYzMxODFmNjk0Njk1YzIxNDA1NTg4ZjYwMGFjMzM4NzFiNTE5ZTJiOGUzYjg3NjQyNGIzMjc1M2RhNDgzZDZlYyI6IjY4ZTcxNzQxMGY5OWFlMTM3MTIxNzVlNDAyYjUxMDU4Yjc2MjViN2RhMjcyMjQ0MTRiNDcyZjk2MjJkMTYzZDUiOiJmMmNmMTNkMDVlODUzYTEzZWQ0N2M1ZDBlZWI5YzA0MTY2ODgwNTAzNDJmMGQzNDVhYzFiYjIxZDVhZTY3NWZlIjoiZmMyM2FhZDAyODcwODg1Mzk0Y2E4MzFiNzIyMDFkNzZjZjczNmYwOGY2MTMyYjEyMTc4ZThlM2IwMTZmZWY4ZDNiYmI4NDllNWQ5MzVhYjczMjA1NGNhNzAxMTU0ZTdkM2U4N2QxYjUxYjczOTJjY2ZhYTE5YzRhZDI4NjM4YzY3YmQxNDlmZjY3YTkzYzA5ZWUxZmE1YzJlZjdiZjlkNDA4NDRiYWFlNzkxNjllNTJlOTk5MGM5M2YwOTllMDM2YjYzYjAwMGZiOGVhNjdhMTMxNjdiMDQ1YzhmOTE2MzA0NWJlYWJlMDU3NWZlZjAwYjg5ZmQ5MDM5MGIwMTI0OTYxNjk4ZjRhZDg4ODRhMWUxZmFmNTc2ZGU3YTE3OWMwMzIyMTQwMjI3OWIzMWM5MzEzNmI5NDM2ZjlhMDdiNWE2N2IxYzE5OWU3YzZjYmQwYjVmNTNlZTViZDBlZjg0NTI0MzA3N2M2ZWRhMGUwMjFhYzkyMTlmNmRiNWFkNTAzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiI3OWU5NmNjOGU3N2Q4ZmU3MmNkNmM2NmJlY2I1Mjc1M2NlYTI4YmY3MTY4MGZhNTQxZjM0NWI4M2JlNzk5NzNkYjQwODEyMDFiZjIzYzk0ZDE4MjhlOWNhMWU4MjVhYzE4YWVkYzVjZWI4N2E0YzFiMGMzMzNjODhkOTdlMGYxMmQ2MWIzMzhlNWFjZTVlMTVmNzEyODNkMzFhMWVhOTBmIjoiIjoiNDMwNGNjYjI2NjZiMjI3YzkyZTJiMDA2NTljZTBiMzRkYmI1MzQ1MTU5MWUzMjkxNGE2MGQ2ZTZjYmJiZmRkNiI6ImQ2ZTc0Nzc3YzAyMjUyYjA2MTMzNTdiOWE1ODJmNGQ4Y2Q3ZTQzNmRhZjE2NzRhNjYzNTYxYjYyZDhlZTcxNDMiOiIwZGUxMjM4OTdkNWYwOTBiNTJkYjg4ZTRjMGY5ZmU3MzZjY2YyN2MxMzRiMGY1ZWFjNjFiMjAwZDE1ZTA3OTg2IjoiNTVhMzY5ZDEzNmUyZDkwM2MxNzk0NzJlZWJmYzQ1YWUyMzY5OTQ2NjljNDZjZDMxODQwMWJjNjYyZjM4YTFmNzE0Zjc4YWM5ZjE1YzgxOWQyYmQ4NzZhN2FmNTFlNmNhZWNmZjNjNjUwYTNlNjYxZTVkMTM3YTM1NGNiMTZhZWQ1YjE1NTQ1NDViZGUwOGMxMGJhYWE1YmNlMjIyODQwODNiNDNhNmRkOTk0MWEzN2YxYTE4OTI5Y2VkNjExODFjMTM3ZTllMzhjNzlkMTA3NDY1YTVhMTJmMmEyZjM3Nzg4YzhlMzk4YWM0OGIyYmU5NDRkNmRkMzU2MmMwNTkyMmMyNTU2OWMyNmExMjAzZmRkMjQ0OTIwZTZjMjY4MDI4ZGJjZjY4MDdjMDViYmYxNTU5OTY5OTgxNDY3YTQ3OWQ3MTE3YTkxZjIxMDExOGMxMTU5NzQ5YTFkYmNlNGQ4YTBkNWYyZjgyMzJjNTE1MmNiYWE2NDQxODY1YWMzYTg4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJiMzcxODA4NzRkZDRhN2UwOGIxMjU2OTY2ZWQ1ODQ1MDAxYjA3NzNiNTEzNjk1NmRjYTcxOTRjZDEyYTlkOWUxZjFkZDM1NTM0ZjU3OTMwN2RlMTFjMWU2NDg3NWU5Mzc3MDgxZGUzMDk1ZDgzY2VkMGVhM2RmMmVlOGQ1YmU0ZGFlZTU0NWI0MzFkYzkwOGJjMTBlZmMwNGRiMTZhYjRlIjoiIjoiZDNjOGFhODhjYzhkNWI1OWFmMzY4NTE3N2NmMzgyNmNkNjc1ODU0ZGVkZGNiOWI1MDFjNDBjNDI4OGNkOWNkZiI6IjY3ODNmNWJkODZmZTE3OGU2YTRkMzAzMzQyMzc0ZWQzMjg1MzkyNWYxNDNhNWFkMDgzYzA0YTljMjk4ZmViOTkiOiI0Nzc0ZTVkMDYyZWRhMDRiNjgwZDcxN2Y2NTJkODdiZjVjZjYzNWY1OTcyODdiNzZmYzM1ZTJkNWNlNTkzZDA4IjoiZTQ3OGQ0NWZkM2ViNmY0YzM5OGEwZWM4NGY5M2VhNjg2MWYwMDY2Njc1M2MxNDM1MDZjNWU0MTcxMDAwNzdlMmM0YzllY2U0NTBkOThjOTM3MmQ2OGFlZmZlOWU1N2VmOTE3NmQ0MDg0ZjljNmQwMjQ3OWI1MTY5NDJkZDQ3OTJhOTBmZmUxZTRlNDlhODE1NmJkZDg3MmYxZjA1ZmFjYzA2ZTcxZTU4MWY5MTljZDk0ZmI5NzIwODUxNWJhMjg0ZmNkMjU1ZWE2ZjFkMWViYjdkMzUxZTFjZWVhMWNkZWU2MzEwNzJkM2ZjM2Y0ZWY5ZDVmYzU3YTljYTk4Yzg4YjgxMDAzZDg1OGNiNWJlMGEzNTIwYzM0ZTUyZDNiZWVhZGY5MTM4OGVjOWE0OTViMWZjN2ZmN2E2Nzk5YWIwYWYyMTFhYmY1MmMxNTQ2NzI3NGMwNGJkMTA0ZGYxNDAzM2RmMDAwZDg2MjRhY2QyNTNhNmM5NTRjMGQ4OWI3MjM4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiIyNzc5ZjIwYzAyZDA4NmQzMGQ1M2RiZDZlNzM5NmEzNWU2NzcyMTQ2NTBlMzlmMmFlODMwNzdmYWQ3MGMwNjgwMDVmYWVmMzQ3ZTdmNzNlZmI1M2E5MmYwNjI5ZTAxMmM3ZTEyNDZkMDdiNGUxYmVhNzAwOGRkOGVjYzc1NDZlM2YwYTZlMGU5NTBlMDgzMzczZmRlM2ZkOTk0ZTExNGE0IjoiIjoiNTVlZGI4NDBiODViMzkxZDRmMTk0MGJlNTJhM2UzODI0MTE5MzQ5Yzc4MDgxMWM1NzBkMmM4OGRiZWZjZWExNiI6ImU4M2VmNTZmMDlmODJhZjRkZDkxYTBiODg3ZDNmMTgyZGNjZDk3MzQzNWI3NGI3YjNjNDMyYjM5YTYxZmU3MjAiOiJlYjlmMzBmMjg4NmQwNDg2YzUyNDBmNDMxMDRlNDI2YjM2YWFlMDAwNmM0YjljNjRkYWIxYmI3MTNiY2VmN2UzIjoiNjhjM2ZlZGEwNjE3MmExOTExODRlMGJiNzdhOGYzYzkwOTYwNDhiZjcxZWQ5NWIyMGNiYTFiMTcyNjY2MDkwMGQ3ZDlmOTdiN2FjNjQ4Yzc2YjUwYjkyMWMyOGVlZTNkNDAxYmE4MWM4YTQ2ZmFiZjgyMzAxZmRhOGZmZTlkNzZiZDkzY2IyNzU2MzhmN2MyMDg4Y2ZkZTg4NjIwNjYxZWI4NDRjZjk1M2NjMTQxYjMxZTk0NjMzOGEwMjAzYzhhZTY3YzJhZjEzMzBhNTMyNTE4MThhZWJlZjg5MzAxMGYxNmE1MTlmY2YyMjA2MGE5YWE5YzU5N2YzNDA5NDY1Y2YzYzljY2Y3NTNkYjhjMGJkM2I0NjViMDI4YWRmYzQ0N2UzN2I1MTI5YzE3YWU5ZThiZDAxZjc2MjY2MmM0NjY0OTFmZTU3Mzg0ODI1YzE2M2FiOGEyNmQ2N2VmZGRhMDFiMDUzYzE5ZDNiYzY1NDVjMzY2MWYyYWQxZGYxZTMzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiI3MWM5ZmIyZWI4Y2NhOTg4NjBmOTU1YThiYjM2NjljNzBiNmY1Mzc0MjU2ZGEyM2ZjYmM0ZmZjMmU5MGJjMGEwNDNiOGVjYmYxY2IwYzdiNjVhMmNiN2E0NzIxMTU0MWYyNjc1NTEyMTM4OTY0ZDBkYjgwNzQ3MjcxNThiZmI0ZjBkM2MwOTNmMWUyYzJiZjY5N2E0OGMyZWJkMjcxNTNiIjoiIjoiMTNiMWQ1NTJlMmM4Yzg0ZjY2OTYxYWM4YzkxOTE2NmEyNDhiYzYyZmI4OTZjZmYwYjhiMDAxY2Q3ZTE0N2JkNyI6IjI3ZDYyNjEyMWVmNTc5ZDk5Njk4MDk3NjJjNzcwNjhlNDU3M2FmNDRiNmU5NDdhMjg5MjMzN2ExMTQwNGMxMzMiOiI0NTZlYTIwNmMzODY2Mjc1MGFmMzlhZWQ1ZmUwYTM5NzYwZjRkYWM4NWI4M2Q3Y2NiYzMzNWY1M2ExNjBhMGM5IjoiNDY0YWVlOGFmNDJhZTY4ZWU3NzY3ODAxMTM4MDVjYWRlMjQ2YjgzYTY5OGMzNGJmNGM5MmU1ZDgxZjI4ODI5ZWNkYjgwODg4NGJjN2Q3ODQzOTdmMmIyZjhjNzZhMmUzNTE3YjUzYmNkYzcyNTdmNDRlYzkzNTdkMDE0YWY0ZThkZGI0NGRmOThkYTcyNzc1NTY3MzU2ZjM2M2ZiODU4ODVmOGYyMjUwNWU1YjVhODBjODI0YjRhMGJjNDgwMjllMzQxOWQzZDJmMTYxYjE0NjljZWFkNzMwY2IxMjNjYTgzODdhMmM4Mjc2NjM1YTkxZDBkY2IyMjIwNzk3YWUyNzAyNDY4NTg3YWMzYTcwYjkyNzYyNWYzYTZlMjk4MGQ2ZmFlNmZkZGY0YjM4MGNhMGQ5MWViNGFlZTM3Yjk4NjQ0YmRlYWMzNDVmNDk1MjNhMjQxY2EzOTI5NzJkYTAyZDcwMzY0Zjk0MDFjMjFmY2YzOWVlYWY0MTRhMDlmZGZlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJjOWU1NGJjZWJiYmRmNDQwNTFlODBiOTFjZDEwYzg3ZGMyNDI2NzkyMzM1MGI2NzcwNDA2NTUxYTUwNjllYTIyNTUyMDFmM2YxNWJjM2EyZTRjYWFmMGI0NTUxMGYxOWRiMjk5YTQxZGI4ZDU2Y2U5OTNhZGU0NDMyM2M0NTVmYjFhM2Y1MDQxMjRjMzVhOWU5MDdkOTc2NWU4MTBjOTM5IjoiIjoiMjgxOWIzZWUyNzlkNTcxNDVlYTEwMjBlYmM3N2M0NjAzMWQ2OTUyNGE4NDMxNTgxOTJlMDgxZjJhYzkxNTEyYiI6IjI2OWFjODUzY2NkMzMyZmVmNjEzMzBhZjdlODBhMzM3OTFlYzQ0YjZjYmI4MzAwNmU1Y2EwNjcwNTk3YjM1YjEiOiJmZGYwMzFiMWUwYTgwMTZiZGY2YTZlYmI1MzNkZGRhYWUxYTNhNWIxNGI5Y2Y1MmExYTgwMjhjYzcyMGIxMGM0IjoiYTFjNGMxZDZlNzJkYWU1ZTQ3MTRiZGRmNGExY2I4ZDAxY2ZmOGEzOTczYjEyMDIyMDExMjcwYzBkZTdjZWI4NWZmYjZhNmFlZGZhNTRkMDUyMWZmMzNkNzQ4ZmRlZjhmMjljNTJjN2M0MTRlNjkyYTMwZGZkMDAxMzc3NmI1OGY1ODQyMTYwNTM2OWM4M2Q0ZDg5MWExOWM3ODJhMmQwMzZmOTYzOGFiYTllMjRiMGVhY2RlZTg3ZDRhODAxMTY5OWI2MzhjMjg3ZjBhMTJmMTFlZGU4NmE5NDZiZTljMDBkMjFhMzE1ODRhMmEwZGE1MzZkY2JmODZlMmRmNjNiZTlhN2I3NzE5OTljOWM3YTZiNzQ4ZGU3MTNiN2RhNzU3ZGUyZDczMWE4ZDk4MGI3NTEzNmIwZmRjNzVjYTdhZWY0N2NkMzZiYjkzNzBjNWNhMGVmODFiOWEwNGZkYzc4Njk4NzIwZjY4ZTVkNTRlMWE3NzdlNTU3YTFkZmI0YzIyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjRkOTVmMzFiOTYwNmE1ZjZkMDRkZmYxZDg5YjUwYmVjZmQwODgyZTZjZjUxYzFjNWQyNGFkODQzYmMxMmQ5NzdlYmE0NTgyYzM5ZDc5M2E2M2VhZGI2M2YyOTI1NjhjN2ZjNDI3MGU2YzlhZWM4MzE4NmEyMDgxOWE3ZDM1ZTdmMTE1NWVhMTA4Nzk0MzAyZDU5M2M1M2NlOWQyNTQyMmIiOiI0M2JmNmYzMmIzYjVmNTgwYjU0MTc5ZTQxMDJkMDYzNTM2ZTdjNDc2ODFkNmRlM2NmZTg4ZmQ4ZWM2NmU0ODczIjoiIjoiIjoiIjoiZTk5MWQwMDBiMjRlYmRmODM4YmExMWY5ODQ5NTkxYjAwMjlmZWZmMzM2MDRiYzRkNzFhY2Q5NDMwMWY4ZDA0NWVlYjFmODFmM2ExMDFhMjk3NDAzYTM1ODU5MTEzYzA5OTkzOTYzODY4MGQ0ODFjODYwNjdmNTQ3NjI4OTJmODIxNDZmNjFjY2U3YmMyYzg1ZDM5NTM0OGYzZWEyYWJhNmJiM2U1OWRiY2Y4ZTQxYTgxOTE4YjZjYWIzMDRkNDRlYTFlMzI1NzNjZDY5MzZmMzhjZGMxMWQzYzJmOTYyOTBjYzI3YjBkZmEzYmJiYWZhOTM5NGFjZGYyZjQ0MzUxNzBiNDI4NTYzNDI3YzRiMDJlZDI1OTI0MjI2ZWRmOGQ1YTVlY2E0ZWVjNGFlY2Y5OGVmMmU2Zjc1Y2FhNzBiZGQ4NDg3N2RmMmU2MzdiN2ZhZDYyMWM2MTcwY2E1YmQ4NmUyMWQwYmIwMWNjOTBmZTJlNzYzNTNhOWQ1Njg3YmVhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjEzNzg0NDNkZmVjM2MwM2QzNmIxNmJhY2M0ODBlZGZjYjFhNGE1MDljMTdjZjRiMzU3ODdkYWUzYmM5MWFkZTZjMTEzYTFlMGRmOTI3YTQ0NDlmZjllMmY0ZjFjZDlhMjdiMDdmNTdjY2Q2Nzc3ZjZkNmJiZmM5NjU1ZjA2NzZkN2I0ZjkxNzEyZWZkNDMzMTViZTdjN2YzMGU1MWRhODkiOiJmNjdjZDM1YWZiYzk2NzU2NDk5YzY4YTVlYTE5OTkxY2QxYWQ0ODgwZmRjMTNhZmFhODE3NjA4YTE0MWU5NjQ2IjoiIjoiIjoiIjoiYjMyZDk4MzhiM2Y0NWUzYzRiM2VkZTExODFiZjBhYWRhYjk2ZDIyNzkwZDg1MzZmNTkxM2ZlOTVjM2VjMDE3OWRkMWM3YWU2OTQzMGJjOGM2OGY0ZjMwMTA1MTk5Yjc4NWExMWFkZjdhYmVjMDA3ZDE4YWJjZWUyZTY1ZGY1YTIxMWFkZmRhMzVmZWQ4YjkzODlhNjFkMmZhZDMzZmUwMjAxMTllNzJjNzgyYTMxNmYxN2Y4YTU4ODIzOTU2NzMxNWJkYTQ2MWY1ZjQ1MThhMWFlY2U0ZDBhZTAyOGMxNTNkNjdhOGQ0Y2U2MjBlNTcxZmFhMDQwM2M1NmJjYWE4NjQ4MjJlNGQ4YWU2ZDE0ZmVhZmVmY2NiZTg3OWNlNGJhZWNhNzBkNDM2MjE4ZTBlYjNhNjJiZjE1YzAxOGZkNGNmNjZhNTBlM2Q5ZDdjYzllNDc0NGUyOWU5Yzk0NWVhYmYwM2E2YTJjNGNhNTdlNTgyYjYwOTE0NDE3ZGE1N2Y2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjY5ZTkzOTZjNThlZDg2N2ViNTJmY2QwNDY1MDQ5MjJlMmU5YTliMDU5MjM0Y2RkM2YwYTA5ZWVlOWZkZmQ0NWRlZGY1ZDM4NjBiMjUxMTVmOGEzZDBlMmYzZjU0Mzg5MGEyM2E1YWEyNzhmODM2NTc3OTU2OTQ0YTA5OGQxOGYwNTkwMGQxYjA3NmQzMGVhNzQ1YmU3NDViOWVmYzBkY2MiOiIxYjZlMWJiNjEzZDE5OWE1ZTZmMWI1YzJlZDA0MWNmNmY2NjMzZTJlZjRkNTBlY2FkODliMjgxMDJiZjcwNTU0IjoiIjoiIjoiIjoiZWUwOWY3YjI0Y2RjNmI1MWE4MjEyY2EwMDYxMzYzM2MxYTVmMDQ0ZmE5MjFiZWMzMWJhZjY3OWY1YmE2NmJmZDcyMzcyMWEwM2UwZjI2MGE0NGFkNWNjNGM1ODAwODA2NjdhNzgxNDI3YTM0YzNkMmZkZmFjZWI0YjA0MGVlNjc1NDkxYzRkZDBjMGQxM2FiYmU4MTMzNjM4NDgwNmUzN2YyNzI5ZTdmZDA4MGZkNTcwMTFiNTRiNjY0ZDU4NTM0YzgzMWM5MGQxODJkNGQ5NTU2NzY5MzhkNDg0MDg3YjAwODZkMmJmMjczN2E5MTJhZmI2NjEwMTU3NWNhMmJjNWFjZjg0NWY0OTcwYmIxY2U0NDQxZWI2NjdkNTA5NjMxOWQ2MjgyNzE0YThhOTcwOGVmOTk2NGNhZGY1OTZhYzNlN2IxYmExOGZkZWM3ZTJlMjJmNWU2MzUyZTgyNWU5NjVhNDk0Y2I4ODBhYWU3ODQ3N2FhM2JjYmE5NDI4MTA3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImQyZjM5MGZkZTBiNTBlYTRhZmU2YmFmMjlhNzVlNjk4ZmIwMjc1YzA0YzQ4MWRmMDM5MTBkMjM4ZjRlNzJjNmY2M2E2MjMxZGY4OTEyM2MyZGJlY2ZlMGNiMDMxM2RiMzQyODhmNDE0MzY5NGNlMmRmMjQ4NGQyMDg4NGRiY2EwOTdlMzVjM2ZkOGRkZWU1MjczYjUzYzExNDliZjUwNzAiOiIyYmMzOGQ4NTJkMWRkZWUyZTg5YjcxNzQwMzJkOTZjMGI5N2Y5NTVlMTZiYzYxNzE2YzVjNjQyNDhlYjYyMzJmIjoiIjoiIjoiIjoiZTYyMzQ2YzcyZWYzOTNhMjkwNGU5ODIxNTg5OTJkZjRjY2FiMDMxNDJjNDFkOGQyOWMxNDU0Nzk0OTI2YzQ4NTcwZWVmMzRiZDAyMWQ0NGNjOTEwNjQwMWU5Y2JjZTZkZGJiNmM5MjI1N2U4OWE3ODc0OTlkN2Y3YTJkZDUyNzgzMzMwN2UwMmY0NDY0NWRkYmNiMTMwM2YxZGE5NTM4MmM4OTgwNWM3NmEyZjEyZWIxM2QyYjAyMDViN2VjMGVmMjFmNTk2Yzk4YWY2MDhhMmYyYTJjNWUzNTM0ZTAxYTIzYmEyNWJkNWZjYmEwNDgxNDgyZTFlYzgxMzhmYjFjODY4NDAwNjA5MTlkNzYyMGNiN2I4NzlkMTA5NmY2NGFlY2FlMWVhMDg1YTc5M2E5ZjRkZDY2NTQ0OWNlNzNjYjMwMzZkZDVmMmE0OTEzOGNlODhjNDYxYTBhOWUyZjBjMWZiODMzOGY1ZWVhNTNhYjBhMGNhOGE4ZGY5YzMxNWM0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjBjZjg2ZmZhMTQ1NmM0NTNiNTMzMDUzNTNjZTQzYWQzYmE0NGViZjRjNjk0M2NkZTg2MTNjZGM0MTdlZTlmNmU3NTljMGJmNDY3NmYxZWJkMDVjNTE5ZWI4NGRmY2QzZTM3OWNlNjEwMTZlNDhjY2NkZTI0NzUzODc4ZjdkOGZkNWRhNzI1MTgyNTNiMmY4MzZmMzJlNWI1OTRkNTRhZDYiOiIwODhjOTE3Zjg0Njc5NjQxZjQ5MWFhZjEwNWVlYTBmMDJkMGE4YWUwYjdhZGQ2OTY0NWQxZWYzMDRjNzRiNDE3IjoiIjoiIjoiIjoiNzllNzFkOWE5NzRjYjg4ZDkwMjJkMzU5OTcwMzJiYjVmYmY4ZjBkYWZmNDExNDY3MjE3ODM3YTgzNmFhNDRjNDkzZjg2OGEzMzNkMWViZjY2Njg5ODk1YjUzYzllMDFkNTgwMTlkZDFkYTIzNTRmYjk2NmM4OGQyZDZhZGJlNjZhYzBiODkwMTU5NWEyNGRkZGJhNjA5NDc4ZWMzNmU0OTdmNmZiNmI0YmNhYTg4YjFlOWE5Yzg3MDg4ZjY2NjExNDQ2ZThjMjg3M2U4OWVlMTAwNmI2ZDkyZDJlYWM1NDcxNGZjNjQ4MWU3NzgyYjM4ZWQ0YjE4ZDVmOTcxNGFlNmE1NDQxMTBjYjYwNjNjOGE5OTY0YzUyYTcwMjZmNTJhZjQ0ODc4M2MzNDI3MDkyZTAzMzllZmQ3ZDFhODUyMjg0OGEyZmFhOGFhMTljMjEzNjNhNTM3NzY2YzA1NTA1Y2I5NzkyNjljNzNlZTkwNjc5ZmVhZWY4ZGYxM2I2NTA2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjcxNzljNDM0YmZmYTM3N2Q5YjY4MjFkYTk1NzE2NjdjOGI5NjIxOTZmN2Q4YWFkMDYyZTc1YjYwOTFhMzRhNDU0ZThmNGQxNGE2MGZiNTI1M2FlMzczY2Y1MGVkY2E5M2I4ZDJlYjIwNzUwNzZlYzhjN2E0MmI3YWRiZTc3MjNhNmJhOGI1MWE1NWZhZGIxNmZjM2E2ZmU5ZGEwMjA0ODIiOiJiYzFjMzllNjQ2YWZjMWJiNjI2ODViNzQ2MDA3MTQ4NDk0MjA5YTQxOWI3MzNlOTM4YzFhNWQwMmUyMzUwODYwIjoiIjoiIjoiIjoiMzA5M2EyZTFmNTAyZDQ0ZDhiZTRmMzViMzg2Nzc0MTYyZjBlMTA4NzBmOWNkMzRlM2I5ZDRlNzdjN2VjN2NkMTBjZGZhMGJmODIyOGJlOTZjYjU3NDFmMDY5NDQwYTZiNmY5ZWMxNTVkODhiYTY2YjdmYTg0OTU5YzUzZDM1NzRiZjFjZjlmMTU2MTAwNmM3NzYyMjNiODgxZGQzOTZlOWU5ODMwYWYyYzFiNWY3NDU3ZmM0NWU4MjNiNDExYzVjMmJhM2IxMTIxOWFlZmU1NTA4Zjc1Y2JkYjVlNDBlZGY2YjFmNjE0NTM1NDFhYzk4ZGFkOWVkNTAyYmYxYThhZmE3OTYwNDI2MWM3YTg5ZTc4Y2YyOTQxZDUyMGUwYzEwYmVkMTg4MjBkYTZjMjNhNWVkMWMwZGZmYmIwNGNkY2M5YzMyODRkNDAwNjQ0ZTkzNjVjOTk1ZDhjOTllZWJmNDQ0ZjJjYjA1MWJiNjJmMjMxMzAxZDMxZWE4MTVjMzM4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImIwNjMzMzMxMjhhNmFiNGY0MzNmMTUxYWU4YWVjNDI4M2FiNmQxY2JmNGE2OTQ0Nzg1MGZhMWEyNTkzMGVjMGY0MjA0ZGE1Mjc1MmE5YmRjNzg4YzVjZWU2ZDhiOTJlMWI4NTMwZGJlMGM4MWIxZDM0MDM3ZWU1M2YyMDc1OGQ1NzUwZDk4NjNlZDYwYzc2MmFlMmE4YjRjOTczYWNjMjIiOiIwNjc3MDhiMjRkZjdhMzQ4MTE5OTNkNWM2NWQ1MzQ4ZWVhNzNlNmM2NjgwMjkzYWZhYjU4MDRiNDMyOGU3YTk2IjoiIjoiIjoiIjoiNWY3NGExZDE5OWYzMGZhMjJmMjAyMGJhZjAzNmZjNjFiMWNjMmFjYWE4MGI0OGRkZmYxY2Y4NWZlNWRkMjAwYTlhZmJkOGJjNTFkZDE4Mjk2MzZmYTMzNTY2MGYzNmQ1ZDJhNTE2ZTRjMzhlOGVmMGMzY2FkOTc5ZTc5ZTdlMjI2YjgyMDYzNGVmMWQ3NmFlODFiYzNlMzgwNzkxM2ViMDczMWIyZTk1OWM0M2FmYTgzZmViMWQ4ZGEzMWRjZGNiM2RjM2E0Y2Y4ZjQ1NGM0ZWM0MWJiYzgyMmU1ODAyM2YwZDc5N2M4NDRiZDhmMjAwMzRiMzFkOTk1NzliZmYxNDJjZjUzZDI2NTFkN2EzMWIyMTJkMmI5ZDU3MDViMDQ4ODYwZDZjNGUzZjQ1ZWYxYmYyZDVlNDY0MzNmZWM1OTNiOWY2OGJlOGIxZTkyOGVhMDRkZGM0Y2UyZmNlY2I3MzdiYjhmOWQwNTRjMmJhNTA2MGZhZTVlNWZjMjFhNjUwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImUyM2ZhMGM4NmM4YTdiOTliYTBkM2VjM2NhNDczNDlhNTc3OThjMDc1ODdiNjY2Y2M0YWUxYzllZmY4M2I4Y2JmZmI0OWQxOTEwYmYwNWRiM2M3ZDBkYjdlMjcyODVhZTlmNmI0NDExZDg0MzY0YjI3YTY2Mzk4ZjViMGE4OTdlZTIwODU1MjZkM2FjNGY2NWU3MDgwMDA2N2Q1N2E1MWUiOiI3ZmZkZWYyMTY4M2E3NTQ4NGY2YWMzMDQ4MDFjMjEzZGM4Y2I3ZTNjZjBmOTRjMzU4YTJlMWNjYzk5NjllODM0IjoiIjoiIjoiIjoiZjk1Mjk1NmNiOGM1MjhlZmUyYzgzMWM2N2I2OWU4YWE3ZTc5YzAxMzE2MTQ5N2I5YzU1NDE1ZmQ0MGM3ZmFlNzc4YTZmYTgyMTA5YTQwZGQ3MmZiMmY0ZDkyZTFjYmM0N2Y1MmQwNTU0ODVjOTlkODkzZmJlYTFjZjI4ZGFiMzViZTFmMTYyNDk0Y2I3OWVhNDVjNDRhNjNhMTY4NTIxN2NkMzczM2RjZmE4OGJiNmRlNjVjNjhmMjM5MGU0NzljMGZjYzZiMzk4ZGM1NDk4YWM5MzAwMmU3ZTdmMzYwNTM1ZDA4MmM4ZTQ2Mzg2NjExMDc1NjY1MDYwODQ1YzRmOGJkZWUzOGMyM2QyZjkwZDJiMWQ3ODIxN2U4NjVlY2ZiNmRmMDI0OThkYjgzN2ZlNTgxYzQzMzgyY2QxZDNhNTA4YjZkYzA1MmVmN2M0ZDIwMzQ5Njc5ZGI4ZDhiZjhkZWRkNzYzZGE4ZTVkZjc3NWQxMzM5NzBiZTA2MmE5Y2VkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjQ4ODkwMTMzMzNjZDFlMmIzYjhjNDM2NWJkZTY5MGI2NmUwNmJjY2NiZWEyNWYwNDEzMmEwOTYyZjEzYTdkNDU4ZTgyM2Y1ZWMwZWEwOTFhMDcwNjU1OTNjYTQ0ZmU0OTYxMTYwMmQxNjVhMzVhYWNiMzUyMjA2ODQ0YWNkZjQxZGMyYzg4YjYzYjM2OTEyYWU4MTg3NWJmZDNlMDk4ZTMiOiJiNDc2MWQ4MmE5M2UxN2Q4YTBhNDYxZWM4MjA1OTMyZWRmMjE4MTU3NDU5YTI1YTdmMjZjZWRkYjU5OTkyMTkyIjoiIjoiIjoiIjoiNzJhYTM2MDE5ODZlNmM5NzBiOGMyMjUzMTE4YjgzODEyNjQ1NzdlMzkxZTQ4YmRkZmYwY2NlZWI1MTAxOTc1MzkxYTJjNzMxZjU2MTEzMTZiMjU1YzJhNmMwNTU0ZWQ2Y2JmOGFjYmJjZDg2MDllM2Y5OWMzY2VjMzhhYTA2MGVlZGI4NjM1NjM0NDJiN2JlYjc4ZjM1MjIxNzM2YzYwOGE5MzNhZWIwZDRhN2NjMDUwZmJjY2EzNTFjZjc4MGQ0MmM1MzgwMjg0YTYxNjM1MjBhODA4OTZlZTdmNzFkMjk2MWQ3NjI5ZDY3Mzc5MWY4ZmFjMTBiZDAxZDMyZDk1ZThlZmJkNjUzODE0MjRjMzc4YmJmNTRiNTMyYTcwYzI4NWQ5OGJkYmI1NTljOWYzN2Q2ZWFlODg5YjgyZDUwMDZmYmEyODkyYWUxNmFjYWIxMDNhZmYxYjI0NzcxMWVmOTJkYmM2ZTUxNmM5MmUzODhmZGE0MjQzODA4Zjk1MTcwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImNjMzJlZjNlYTNiMGRiODljNjkzMTJjYWQ1NmIxZGRlYTczYmE0YzMwMmI4NWZmM2M2NjA1ZDE4OTlhOTZmNDk5MDljNmE1NGQ5OGJhZjA5NmVhNWJkNDZhYmMyNTM1MzA5Njc2ZDlkNmJiOTkxNzI3MWJmOGM4NmM4ODUyZTI5YmYzZmY1YjJmZTU2YWMwOTRmYTM1ZGNjNTE1NDdmNjIiOiJjYjgwOTQyYmZiY2Q4ZjExMmVkNjAxY2IxMmE1Y2E1MmNjMGYyODA1MjJkYjExZGE5MmFjNmM3NmJlMzkzMmZkIjoiIjoiIjoiIjoiMmM5NzJjZmUxNTM3YmFlNDJlY2M0NmIxYjQxYTY5MTM1MGY2ZTYzYzIwMjI0NTM0N2U5MTYwMmI5M2E0Y2JkNWM4ODI5ZTVhNGY2M2Y3ZWUwZTI5YWRiNjkzODZlOGI2NTlkY2EyZTYwMDBhYTAzYmVhYjEzMmRiNmRhZGE4ZGMzNWFiNjg0MzM2NzFjZjYyMWZlNDU5MzAxOGIxZWFmZDNhMjE5MTUwN2ZlMDE1ZTJhNTY5NGZkZmUyYzMxODJmYWRhNzFkMThjNWZkZWVkMDY1MDg5ODYyMjQ5YzU1MDhmMDU1ZWJlY2ViOWZjZmU1ZDE2ZTQ0NzlkYzE3ZTJiNTliNWEwYWEzMWNmMjFmYzZiNTkyNTU2OWIwY2E2M2QxYTVjZDI2OGE0ZDQwOWYxMDM5ZDkwMjU1NjIzNmZiMDZlNjFjMWMwNTRlZDM3OThjYmU0ZDhjMmE3YjJkMTgyMDYyMTI1OTExNzRjZWM5ZGE1MTlmYjg3NmM1ODNhMjBmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiIxNDJiZmY5MzMyYzQ4MTAzMjIxMzU5MDQwY2RhNjYzMmJhYTkyY2ZiZDFhZTdmOGIzZDBlMzNkNmE4MTkzOTM5ZDlkMjBkMTdmZGY2ZWRkMWIzY2E5ZmY2MDBmZTk2NTc0NmIwYmExYjYxZTlhYTUxNDFlZGI3N2FkZTBmMTkxYjg3ZjBiMzNjMGYzNjIwODAxYTc1NWRjYTAyNjk4ODgzIjoiOGRiYmNmMGMxOTA3ODMxMjJhYTZkYTZlMDVlYzlkODJlZTI5ZjhlNzRlNTlmOGZlNmViOTQ5MmZlNDEwZGY2YSI6IiI6IiI6IiI6IjI1MzdhODYzOGQ1NzU5MjAxY2JjMjI1ZTg0NDIwOGMxZDA4NDQzYjA1NWZhZmUyMzMyOWFlZDVlYjJkODE0NzAzYjBmZGJkMGE4OWMyZDYyZjhmNGVhNzc0NjkwNWI5YmQ5MDcwNmI3MzQwNjBjOTZlNGU0MDY2NzU1NzZiYWU4NDMxN2JmMzZkODUyM2JhYmFiNzIyMzZiNzFmYzYwODdkZmNmY2JlNzY1ZGUxM2NkMWVkMzE2ZjQ5NWUzYmQwOGQ3ODBjZDZhNTg4NDljOTI5ZWYyNGI0MWU5NTYxODY4MTU4MDQ2ZmZlOGQyYTg5ZDE2OWJhMzEzMzE2MTFmMDg3MmM2ZDA3NWI5OTM4ZTUxNzBhM2I4NjEyZjllY2ZmNDc0M2MwZGI1YWUzNjVmZGMyNjc4ZWMyNjJlZWQzYjdjMzM3ZTY1ZGQxZmYyNGE4Njc1NzRlZTQ2MGJlYzdjMzc0ZmM2YjNmZTliMGViN2JkOWY1NTA3ZWM1OTg4ZDMxMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiODIxZWQ0NGJkNzkzYTRhZjIyM2FlYmY1MjQxM2JhNWUwZTIzMWIyMDI5YjNkNzE0NzVhYzAyOGQ4YzEwZjg2ZDIzODJlYjljNjJiYWI1NDBiZTg0N2UyMjM0NDcwNGQzMzliNzk4MjQ4ZDBiZjI5OTBjMDYyMTMxNmUzYzk4ZWMwN2YwNWJiYTg4ODc3ODNhZGFlYmU4ZmNlY2M0OGZlZCI6IjhkMmM4Y2RiMmRkZDY5MzQyNzE5NDFmMDcxZWE0N2RmYWI4NjlhNTY3MWRmZjlkNDI0YjkxNmMxY2NhYmIwMmQiOiIiOiIiOiIiOiJhNWZjZjEzZTRhNmI5ODI5YWMzMDE3MTkyMDQ3OGE3ODc4YWVkYTY1ODgwM2YyZTMxNGY5ZWY4Y2Y0MmM5YzE5MzNjYmQ4ZGZlNTA1M2FiZDMwZGY2NDRjYTA2MjA3MDY2MmY0YjdlNzg1MWQyOGZmODAxY2M0Yjg3ODUyM2I0NjEwODkxYWJiMjljMDk1YTcwNjY1ZGUxMTk5MTgyZmExOTM0Mzk2NjVjYjE5Y2JkYjAwYWFmM2ZkMGZlZmFhMjI3ODE5NGU3OWViZjY1MjcxM2EyOGMzNmYyY2RiODNmOTZjOGViMWU4NWM5OTY5MzgxYjUyYmMzNDQ0ZThhZDVkODJjOTQ5NjQ1NDRiM2U2NjQ5YWUzZjUzMmQyNWEyZTM3MGU5ZmM4Yzc3NzUzMjM5ZjEzMDA5MWM0MzcyMGZmY2QyYmJjZGI3MGE3NTIyM2NmZDkzNDYwOTFlOGMwNTYyMjdmNjY2NDg5NDE1NTJlZmFhNWEwYTM2OTI5MWU5ZWUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6Ijk3N2JhZDRjNWQxZDE2YTI0Mzk4NjNhZjhiYjZmZGJjMjA2YWQwYmYyMGM0MDM2YzA0NDY0NTk2MmMzNmUyZTg1M2YwZDcwMmE1NGI3MDQyMWE1MDljMjVkZTEyNGYyN2UzMzBlYmE1ODFmYzgyZWZjYTUyMmU0Mzk1NjE4N2M5ZWU0ZjU4Zjk3MWU0YjkxZWQ1MWNjOGFlZWEyNmZkYzMiOiI1MWNiOTFjYjdmZjFiMzllMThhYWNjMGJhYWQyMDQ0MzUyMmJmODY5ZjI2ZDlkNzE4MjAwNWI1Y2IxZDAxOGRlIjoiIjoiIjoiIjoiZGY0YWNhZmJlNGYyOGVlNDdhY2M1MTM0ZWY2NjVhNTBkZWI2OGRlOWIzYzdlMDc1YjI2ZDU3MzEwNDlmMTNmZmQwMGNkYTA1ZjYxMmYyMGZkOTAxZmYxMjcyNzdmMjY5YzA2OTYwNzQ0MmVkOWY3YjQxODkyNzExYTcyYjgzYWM1OTIwNDhiZmIyOGFiMmM2NGM2YjlmNWViNDQyNzQ1MGY0NDc1YjFjMDRkZDQ2NjU5OThiNjM4ZDA2ZmU4ZjQ2M2UyZjA3ZmY0NjA3MzAwMzEzMmI2NmE1ZDRkMTlhNjViZDA4MjMwZDFkYjAyMzRmYmQwOWE5ODg2NGY4Y2E4MjRlN2EwY2E5ZjFkMTY2MjAyN2E2MGM3ZTk1MzgyMTIyNjc0ZDg4MjI0ZmIxOTJjZmMxMjk5NTJlZDY1MTU5MTJhZGVkOWM3MmE0OWEzOWEwMGY5ZjlhMTZhYmJkMzYxYjIwYTEyYjVmM2M0ZGU1NDAxMmFlYjFiNDJmNmZhM2JjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiIzMTE2ZWYwNzY4NWVhZmZmMWM3N2YxODVmYTg0MGJiNTYyN2ZiOWE1ZDc5ZjcyZjgwMDdjZGNkZmJmZWZjNTZiYjE3Njk5OTFkNzhlOWU0OGZjYTRjOTdiMDFkNzIwZDFkM2VhNmZhNmZmYmUyNTY5ZGE5NGI2YmIzNmNkMzRkNzJjMzdkMDIxOGIzZDAyYzM5MWUwNjUzZTI4NmIyNGI4IjoiZjEzOGNhM2VjODY3Y2I3ZWQ3ZDVmZGIwODY4ZDc0NzBkZTVmODAyZmRiOTQxZGM0MDBhZDUyNGQ5MDMyZTIzYSI6IiI6IiI6IiI6IjU5ZjAxZWMwNmM5N2E0OWNjNWRlNDY5Y2MyYjM5YzI4ZGI3NjEyMDI5ZTBlMjRlM2MyYjI0ZjkyYzBhZjIzODNiZmI5YTBkY2NiZWVmZGFlYzRiYmQyNjA3ZGM1ODJlZTdlYWFlNmE0ZmZhYjI1MTQwNGUzYzU5Yzk1ZTU0NjBjY2M4ZDhkZWE0ZGI3M2U5MjRjY2Q3NTI4NzA4ZTFiNmE5ZDYyZDQ4NWM5Mzc2NDY4NmY5M2RmNmZiOGE5YWU4NmJiZGExZTAzODY5N2I1NDg1ZTI3ZTBiYWM5YTE4MTI2YmZmMWU3YjEwNDQwMTMwNmNjNDI0ZTc4M2Y1NWViZTk5NDAxNzZkNzEyM2VmNThjOTQ2MGU1ZmI4MzExZjc0NWZkY2NkMzljZTU1MjU0N2FkY2NkY2Q4NTNiZmJhODdhZWI4N2RmZThhZTcyMDgwZmI3YjNlNWM0NzE4ZTc0M2M5ZjU3NmQ3NzUyZTNkYjFmZGIyOWYxNjBiZGUxMTVmMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiZjViYTI3YzQ4N2E0MGRmZTM0MmZlMThlN2Y5YzcyYmViYzFlYTIyOWM3NjM0Y2NlODdkZWZkN2FhMTE0NDhlM2Y1ODRkMTc2OWYzZTc2YTAxNzQzMGU2ZTliYWU2YmI2Yzc5MTcwOTI1ZTExNTYyNzUzMTFkODZkNGEwM2NmZTNkZmJmODVmODBiYmQ3MGVhOThhZjc2MjIwODMzYTBiZSI6IjM0ZmQxMjRhYWQ1YTEwYjg1MmIyZmU4NDgxY2QwZWM0NmRjMmQwMmVkOTU4M2Y2ZTI4MmE0YzkwOGUzMTkwMjQiOiIiOiIiOiIiOiI5NzdmYTViNzBmNGNhM2MwNGI2ZjQ5NWRlM2JmZGI0YjhhZWY5M2JkMTRjODI2NTNlMzBhMDBhNDY3OGM2MDJhYTg4OTc2NmFiN2NhYTQzNGQ5YzE1YmQ2OGJkMTRlNjZjZGM2MDkyODlhNjkxZGJjYjM5MTYxMWJlNjZjMjA1NmY4ZTY3NWRlNWRiOWIyZTJmMTVlNWEzMzBkMDBhODg4NmViOGI4ZWVkNDA3NjMwNmQ0NDNjYTI5MmQ3ODNmYjA1NjE4NmFhODZlMWRjOWYxOGExMTNlMDE1ZTUzNWRmZmVhOTU0MzE5Y2QyNmU1NTcyZjQxNzM3NjYyMDdlZDdkOWI4YjJjNDJhNzQxMzQwYzE4NTBhMDcxMzljMGIzNThjYWI5NDJiZWM1MWIxNTllNTBmNWFhOWQ4ZmJlN2NhOWQxZDIxMjdhOThmYmYwZjhjMzA5NGJlYTRlMzAzOWY3ZjdhYjA4M2ZjOWQwNTBlMjllN2Q0Y2MyZDNkNDRjYWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJjNDg2OGRiNWM0NmZkZTBhMTAwMDg4MzhiNWJlNjJjMzQ5MjA5ZmRlZDQyZmFiNDYxYjAxZTExNzIzYzgyNDJhNjE4ZmFiYTU0YWNiYTFlMGFmZDRiMjdjYmQ3MzFlZDlkMzAwMTZiNTgyN2RjMmJmZTQwMzRjNjY1NGQ2OTc3NWZlOTg0MzJiMTllM2RhMzczMjEzZDkzOWQzOTFmNTRhIjoiMTM1MTMyY2YyYjhhNTc1NTRiZGMxM2M2OGU5MGRjNDM0MzUzZTRmNjVhNGQ1Y2EwN2MzZTBhMTNjNjJlNzI2NSI6ImEwYmJkMDJmNmFhNzFhMDZkMTY0MmNhMmNjN2NkYzVlODg1N2U0MzFiMTc2YmNmMWVjZDIwZjA0MTQ2N2JkMmQiOiI5M2VlMzBhOWU3YTBlMjQ0YWE5MWRhNjJmMjIxNWM3MjMzYmRmYzQxNTc0MGQyNzcwNzgwY2JiYWQ2MWI5YmEyIjoiMzZkOTIyY2FjY2EwMGFlODlkYjhmMGMxY2FlNWE0N2QyZGU4ZTYxYWUwOTM1N2NhNDMxYzI4YTA3OTA3ZmNlMSI6IjJhYWM0Y2ViZWQwODBjNjhlZjBkY2ZmMzQ4NTA2ZWNhNTY4MTgwZjczNzBjMDIwZGVkYTFhNGM5MDUwY2U5NGQ0ZGI5MGZkODI3MTY1ODQ2ZDZkZDZjYjIwMzFlZWMxNjM0YjBlN2YzZTBlODk1MDRlMzRkMjQ4ZTIzYThmYjMxY2QzMmZmMzlhNDg2OTQ2YjI5NDBmNTRjOTY4Zjk2Y2ZjNTA4Y2Q4NzFjODRlNjg0NThjYTdkY2NhYmM2ZGNmYjFlOWZiZWY5YTQ3Y2FhZTE0YzUyMzljMjg2ODZlMGZjMDk0MmIwYzg0N2M5ZDhkOTg3OTcwYzFjNWY1ZjA2ZWFhODM4NTU3NWRhY2IxZTkyNWMwZWQ4NWUxM2VkYmI5OTIyMDgzZjliYmJiNzk0MDU0MTFmZjVkZmU3MDYxNTY4NWRmMWYxZTQ5ODY3ZDBiNmVkNjlhZmU4YWM1ZTc2ZmZhYjZmZjNkNzFiNGRhZTk5OGZhZjhjN2Q1YmM2YWU0ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjQ2YzgyY2I4MWRlNDc0YWUwMmNjY2ZhYzE1NTVkMDZlNWRjNDRiNmVmNTI2ZTBlMjgzNTZmZmM4YmM2YzBmZDA2MjhkNGQ5NDI4MzRiOTRmYzk3NzYwOWM4ZWMwYTYzOTJjMDY5MzEzMGM2MjE1ZDU1ZTM3ZGE0M2Q2N2RlZjcxOTA1MWU5OTg3MWRiNjgxMjhlMjQ1MjE3ZDJhYTMyMzAiOiI1ZGU1MWUzZjQ5OTUxYmFiMzY0NjA3MjRhNjNmMDQ2ZTc1ZjZmNjEwYmU3NDA1ZjU1MDE2YzkzYTU5ZjE4OTBhIjoiNWRiYjEzZjViNGViMjc1Y2I3NTc1MTNlNmI4YWY2ZmVmZDdjOWM5ZTBmNTMwNGZkZDliNGMwOTY4NDU4ZjIyYiI6IjNlYmNlZmYzMjMyZTc1YzZiZWI3OWQ5N2M3OGU5MzI0NGEyNTdmMDc3MmY4MmUyMzQ1MThjNTBlMzIyNjMwZWIiOiJkYzY0ZTVhMWZjN2IzMmYwMjk0ZGIxMzhkYzEzMTk0NmU1NjAyMjY2ZjRjZGYwMDAzN2ZmZTUxM2E0NGZmODNjIjoiZTM0ODA1NDQwMzZhMzY4NGE4OGUyM2ZmNDFhNGJiZDgxMGY4MjcwMjFjYTQ1ZTgwMGFhYWEzNmVkMGI5YmZmY2JiY2M5OWExZWYxZjE1MjhiNGJmZTM5NTE0YzdhMzkwYmExMzJkMTY4MTEzOGM0YjFiOWYxYTBmYTE3NTg4MzdkZGUzNWQwZjZjMzg2ODNiYTQ3YTkwNDkzN2RjNWVlM2QzYjc1ZjkwOWU1ZmI2MzExYzZjZGE1ZTExMjFlZGM3NzRlNjYwOTJhYTFkYmRlODNlNDY4MGZmOTVjMGJiYzI5NDZhYTRkNDY3NzBmMjQ3Y2FhN2I3MWJkZWZhYzk2NDFlZTk5NzAwZmJkMWU1NjBmOWY3ZmJkNDYyZWRlNjRlMDA5Y2VkOTBjNDRjNmZmMDNiODkwZTE2Yzc5YzdiOGM5NTlhMjdkZWZhNmYwNjIxNjg4OTE5NzdjNjM3ZWMyMmVjZmUyMDYwMWQ0OTk0NDNmMWZiMGVjYzdkOTUwNWI3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiZGY4MDUzZGVmMDI2MGFlNzFmNjdlMTk3YWU4YjU0N2EyMjhlOWI2N2JhNzkwOWZjMWNiM2FkY2E1MTA1OGIxNWY2ZDU5NTFmMGI2MGM5NzJkMTM5Yjc1ZGM0NGEzNjgwMTI3YTg0Nzk5ZmQ3NjcyZTQyOWYyMDg3NmMxNzVkMTM1ZTVmODk0ZWRjN2E0ZGEzMzRlYjhiNzNhMzM0YmU2MSI6IjI2ODkwMDM2YTliMTdkOGU4MDVjMzg1Njg2MzBlMWMxOTYwOTFmYWFkNTQ2YmE4ZWI5NzZmM2FhMDMxYTg5MDUiOiI0MGVhNmJlYmIwY2I5NGI3ZTUyNzc4N2UxN2VmOWY3ZDNlZmI4ODlmYzFlNDdlNDk4OTNhYzVjNGJiYTk4OGMyIjoiMDkwMjcxYzMwN2I0M2I5NTFjMjBhZDNmMDgxZDI4MzhkZjA5MzZhNGJiZGM1ZWI2ZjJlMTZiMWRiNDgyYjFhYyI6ImMyMDNjYzFhM2FmNjY4ZTQ1NjUzYmFiNmIxYWEzOWJhMDY2OTQ5MWEwNmQwMGNkMzljOTdiNzc3YThiZmQ0ZDciOiIwZDY4ZDkwM2M4NWMwMTcyNDE5ZGM5Zjc4MmM1ZDY3YTBiMzM2N2QxM2NiMmY3MzRmZWQ5NWM3ZmMwODIyOTFlZGJmNGZhODMzNTRjNjU4ODIyN2U0MGJiZmYwODJiZTJkZDI3NmMyNjQ4MjNhOGYzMWJhMThiMDA5NTVkN2ExZmQ2MTJhMmYzN2Q4MjRiYzgyY2RlYzk3MmQzZjgzODRkZmM3OGI1MWRjYTYxZTgxNTc2NmM4NzdlZjNkMjExMzcwNGM4MDVhMjUwYWVlN2I1NWI4NDlhZjA0OGZlYjM1MzZmZTczZWM0ZjBiZWU5NzAwNjg4MWQ1ZWVkOGVhMzhiYTFiOGQxNmEzYmNkOTFmZGE3NDliNzdkNjg4OTk3YmZmMDlmMTA0YTJkOGNkOGUxMzNlYTRhYTc2NGIyMzc3ODczNThkYWRhZTFjMjUwOTJjZmUwOWY3OWVmZWI4ZWI2ZTIwYzM5Y2FmZGNlZWQ5MGU2MDJmMjIxZmU2YjFkNjkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJiMWExYjQ2OGUxZDU5NzE2YTIzZmIwMjhlMjk1NTg4ZjE3YmU2YTc5ZTU4OTAyNzIzNzY4MWZlOWNlMzU0ODYwYjFjYzMzOTE4YTY0YzhiZTE3MWU1OTVlZTZhM2IxZWY0NmMyZWYyMWRmMjgxNTUyODQ4MmFiNGM3YTMyNDQ5Yjk3YWM3NWE1MWRmYTFjN2U2N2E3NjNmMTdlOTdiY2Q2IjoiNzdlNWEzZWI2YWIzODQxOWY4NGI1Nzk5NzYyN2M2YmVhNzk3MDNjOTViYzFjZDI0ZWE3M2ViYTJlZGJlZDU0MCI6IjUyYWEwYmU5NTE4MTZkMjFhMmVkZTg5ZjUzOTEzZjZkNWQ3MGNjNTgwYTFjZGE4YTQ5ZjhlNDlhNmJlZmE5MDkiOiI1YmQ4ZTRhYzYxYmRmZTc1MmI1YTY2Y2YyZTA0OGU4MTJhOGFlYWU4ZTIwYzNjOGM0M2YzMTE4MGU0YjE4MzAzIjoiYWY1ZWFiMjFlNGRkOTQ0M2IxYjE2ZjQwNDEzZmFlYmRiMGUwODY5OTFkZDNjNTNjOGE1MWJjNDM0MzQ4MzExYiI6ImQ0Nzc0MDRiY2FmMGVkNTM3ODgzNTQ3MDVmMGZhOWY0NmM0ZTJiZWYyY2Q5NDkzMmI2MTRiM2MzNGUwYjBjN2MyOGQ3NDgzMDc1Yzk3NDViZmJkNGUzMWU1ODdmYjFkYjc3ZDU1N2ZjZGZkM2ZlYTQ3ZGEzZjAxZTQyNjM1ZWQzZmQ4N2NmNmM5OGEyZjIwYWE4MzNhMWJiNzRhMTViMTU4ZTQ3ODQxY2ViZTUzZTRkNWQ4Yzg1Y2FlNzhhZGUxNTZlMDI1YTc3MzdhYTkxOTdiMTIyZTczYTI5Y2UwYTg4MWM3YWRjOGVjMjI4ZjRjMTRlNTZjNzIyYWNiMDE2NWIxNTk1ZjAxMDI2NjE1MTgwMTgxMmMwMzFlZmNlZTRhNzczOTg3Njc3NzgxNmFmOGJhZjRkMjk0OTY5MTJhMDEyZjFmMzNjMDcxMDdiMmRiNWViZDY4MTcyMmRmZDc2ZjNhNThlOWQ3NDI2ZTdmYTc1ZTMyNmVhYTQxNmM1ZDgyMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjA5OGI4YzEwN2ZiZjk0M2JjZGQyMTk5ZGZkMTVmMTMwYTIwZDUxOGU5NWRjODE5ODg3NDhlMWYwZWNjNWM0NWY3NDYyMmNhMjk0MDgwN2RmODZmYjA1ZjBhYWI0NzI3NTI1ZjE5ZDFkM2JkYTFmNzA4MjVmM2UxZmNiMThkMjllOGU0MTA2MTZjMTA1ZmRhOTMyNGY0NjE3YWYzOWYwMjEiOiIyMjBiYmYyMzM5NGMzY2VmMTU2ZjY4M2QwNTczOWI3NmYzNzUzOGEwZDM2MDYwMGJkNTJmMDA3NjQyNWI1ZjVmIjoiYWY4OGYwNzZhYjM5ZGIxZGQwZTcwMDJiYWUxODc5NjVjZDE0NDM4MmEzZDFjYTdiMWVjZDY1ZDM0NmY3YzA5MCI6ImJhYjlkMDlkY2U1MDczZDExZmNkZjk1Mzk1MDFkYzk5OGI2ZmZmYThhMDcxNmVkY2Y1ODNhN2Q3Mzg1ZmY0MWMiOiJjYWY4ZDRlMTA1MTNlNWNlYWNhZDZmOWYxNDVhNmY3OWU1YzI0NWFlZDQ5NjVhZTg1ZTJlN2M1OTE0Zjk3NTEwIjoiZjU1NjQ5NGIzODQ5ZDc4YjA2YWU3NTU3MWYwYjljOGMxMDg4ODVmY2IwNDFkYmQ3ODkyYmY2MzlkOGZmNmM4MmUxOWU4Y2UyZDVhZWI1OGU4Yjk2NGNlNGY3NTk3NmEwYTljN2YzZWM4MzczYjgzMTUwYjg4ZDZjNThmZjliODEwMTI0ZDRhYzYyZDk1NWFhNjRkMTk0YWZlZjJmNzdkZTY5OTQ2NDJlYzg2Y2VlNDBhYTdhNTU5MWU5OWE2M2VkYmQ4YmJkYjIyZmMzYzI1MDZiZWVlNmQ1MDdmZTM0ZmRiNGQ0ZjUyNWRjYmUzMGI1NzQ3ZmY5MjBhMTNmOWUyMzA4OTlmZmZmYmM1NjE1ZTk5NGVlOTZhMWJmZDg4OTBjZjYwNzM3OWJlMWEzOWQxNzM2NjJkMDk2N2M5ZGZlYTMzYjE0ZDc4Y2M4ODE4YzJhMTk1NjE5N2Y4NWU5MmJjMTExMzNhYzRmNzY1N2YyZGIyMGVjZWVjYWU4Y2E2MzZhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiZjU0ZTlkZjkyNzUyZDMwZWVjMDFjMzc1NmQ1NjliZGIzOWFiY2RlZGFiODBiMGFhY2FjNzZhYjQwNjcyM2Y0ODBiYjM1OWE1ZmM2YzdhZWViYjY3MTlhYjQ0MTE0YTc1YWZkMzQwYWYyMDJiZTNjYTMwZTRkZTc5NGI4MjYyMzcxMDUyMDJkY2ZmNWQxMjkxY2RhZjI2NjY3MzI3NTgyNSI6ImI2OWY3N2Q1YTA4ODUwYTEzZjhlNmQwNjg0N2M0YmVjMTgxYWMwZjZiNzIwYmUzYzA2YzBiNjdkNDQ4NDNjNmUiOiI0MGYxNGMzMzQwZTcwOTJiODk4NzU4ZWEzYzM2NzUwOTQzYWNhYzdmYmI2YTgzZjBkZjMzOTJmNzkzNjc0OWNiIjoiNWJjZmIwNzg2YzQ0NzY3NTAzMmQyYTMyYjMwNGYyNTczN2RlNTljZDA3Yzg0ZDM4NzVjNDU0NzViMTU3OTdkNCI6IjY1NmFiMjA0ZTJjMTgzNGYzNDZkODljMzdhMzAxNjRkYjQxNDgyN2Q4M2NhNzMyYzcxZWM3MWVmYTgxODJjMjgiOiI2ZWI4ZjI3NmE4ZmY1MTZmNzg5ZDk0ZDk5N2YzM2MyZTQwYjIyNzc3NmZhZTA2ODFjODNmZGU2NTk0NjJiNzJkMzdjZDQ4Yzk1ODk5NTMwY2EwNzJiZjI0NzA5ODZlZjI5ZGZiMTkzYmU3ZWU5YWIzZjhjZGUyMzE3YzliZjAyYTVmOTAxY2NiNjJiYjY2NWJjM2ExMDllYWI3ZTM5MTA4ODhhNTIyYzc2NWViNDliMTFkMWFkMGZiY2M0NWFiZTM4NDFlOWJiNGZjMGU3MzE4ODQ5N2NmZmJhNTRmM2ZmODIyNjA3NjdkMGY3MGVhMTY2OGY0NTE5MmU2NzE5MTAyZTc1YWE1Y2M0MzA4NGM1MGJkYmQxYmE0OTFiYjYxZWU5ZTUxNzUwOTJjMWY1MGQ1NmJmYjY4OTc3YTU2N2U0MWMxZTA1ZDJkMTUyM2MxOThkZWQ3MzcwNzkxMzFmYjEyZGNmODQ3MjE5ZDcxZmJlZGI1NjU5NDExZDdhZmYyYmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiIyY2MzMzBiMzRjOTc2Yzg1OTkzNmMyMWUyYWQ4OGJiNjBmZjE1M2U0MTEzMTU2N2Y1OGFkMzRiZmY1YzljYjQxODkzOWZlZDU2MzU2YWY3ZmUyMTU5ODZhNWQwZWQ4ZTlhMDc4ZGNiMWQzZmNlZTZiOTk3MTRlZWEzYmZjZWZiMzdhMzQ0YTY5ZDQxNDk2NTUzOWRkY2U5ZGYyMzliZTJmIjoiYmY1MzEwODNmMzUwNjZlYmZhZWFiZDY3YjgyZDM5MmVmNmIxMjFlN2Q5NjAzYTU0MDdjNWJjNzRjZDU5NjAyMyI6IjUxZjIyM2RjNDYxYWMyZGYxYzQ4NzdmNjVjYTg3NmQ2MzVkNTA5MzlmYTlkZDU4NmMxNzZkOGFiNzNjNmQ2MDUiOiJmZjlkNjgwN2Q3MWRlZDEzMDVkOWUyY2RjODExZGFjMmQ3Mzc0NmIwMDFiNTNlYzhhNTUwOWM0Y2UwYTA3ZWZhIjoiZjUyMjJjODk2NjY1OTk3NGRkOGE3MjQ0ZDJjZWU1ODhiNmM5YTI3MDBmMzM4NjgzZmZmOWNjYzQ1YjZkMzgwNyI6Ijk4MWFiZGEwZTQwNWM5NzY0MzVlYzdmOTM4NTcwZDkxMWU1YmJiMzJhZGQ1MmE4Yjk0ZTUyODQ4NmU5ZGFmYWUxMzllYjE1Y2MyYjU2ZmVkZmI5ZTRiMmQxMGRiY2FhNWU2YWI5ODViZTE2YzYyYjliNzVhMDM3Njg0OTg2ODQzYTdhMGUzYmFhYmMzNDg1OTI1M2RmMmEwNTNkY2IwMzUyYTA1NTRmZDJkNDUzMGRlMDI1MWIxYjg1MmQxZDNiNmUwODU0OGUyMTU5MDJlYzhkYzQ2ZWU4OWYzZmMyNjJjN2EzNWFlZjgyMTZiM2RlZjY1YmQ1NmYwNDgyYTE4YTMyOWY5Njg2M2FmZDk1MTMwNzc0MGZkODY1M2QzMzNmOTMyOTQwZTJhODc1MjNhZmJjMTYyYzVjMWQyYmJlMTZmMzNhNGIwZWUwZWM3NWJjZmE2YWVlNmQ4MzQ4MjY1OTM4NzM4YmU2MzhmNzg1MDZhYjczMWQzZTlhYjM0NTU1MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImI0ZTVhYWQ5YmY0ZmIwM2RlZDY0ZTRiZjQwZWNjNmZlMjIxNDA0OWJkNTg4OWE1YWVlYTBiZjQ3YmU4NjcwZDMyOWU2ZWQwNDUzOGRkNmQyMDc3NjdjMzY3NDA2ZDQ4MmJhN2FkMjkyMzFmZDk0NGYwMGI4ZDliNzYyOTM1YjkzODE5ZWM2MmUwY2NmZDQ4ZjYxOWFjNDBjOWMyMDgzMDQiOiI2NzgyNmQyYmY5NjUxNDA0ZDVkZjRkYjg0ZWE2NGRjYWIxMDY5N2VjYjkwYzY4MDQxZjQyMTQ1MjEwOWFmM2MzIjoiNjdkNjk4MzQ2NWZhY2YzMzM2OWVlYmUwYmUxMmRjNjVmZTczNjk2OWU4ZjQxNDc4ZTQ0ZWMyNWQ0NjFlNDQzNSI6IjY1Zjk3Yzk5MTQwYzhjOWJhMmNlMzc3MTBiMDZmODIyY2MwZWFhMDM1ODkxNTdhM2I1NzViYzljNDIzYWZjM2YiOiIxOWMzNzg4NmQ2MTNkMjRiMDU5MmVhMGIzYTQ2NWVjOGY4YTkyMjlhYmRlM2ZiNWUwMTIyMDMyZTFhYzhkZmM1IjoiMDU3Nzc0ODdiYzE1MjI2MGE4NTJlMWIzMWEwOTFmOGU5MjllZDIyZDhhNjUyYTc3ZTQzOTFhYmNlN2VmY2YwNTcwZGYzZDQ2NmQ1NmRjNTFlZjE0YmJjNTUzMDljNjgzMTY1NWJhOTdjNjA1MGU1NjMwODNmZDFmMmZlNjViNDNkMGNmODc2MmVmNjU5OGQ5NjdiNDczYjY4YzQxNDMyODdmNzBkMDk2YTZlYTEyMGUzYzA3ZjJhOTViODBiMzkzZmZlYWZhYzJkMDMwOWQzNDliZmYwMTdhNDliOWVhNTQ3YTU3NzZiNWMzOGI5ZTk4MWVkMGE0ODI1ODUzY2FmY2RmMGYxNzI2OWI5ZGY2MTg5ZmFiYzMwMzg4YTM4M2UzYzI4OTQ5NjI1ZWYzZDU5YTJjMzcxZWY0MTZhY2U4NjU4YWRjMGUwYjAxMDRmMWFjZDRiMzQ5YjkxYjY2MGQ2NDQxMjE2OGQzYzllMjk2ODBhNWUzMjRlNGQwYWI5MjU4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiMjdhZTIxMjA4MjRmM2Q0MTZiYmVhMWY5ODc0NDBjNTA3YTRmMDFmZWQwOGExYmUyN2U2ZWMxNjM5MGM5MmM0ZjhkYWIwNDIwMzU0M2NhYTM5ODEzNzNmYjk5MWQ4NTUzNDBjMjliYWY0MzlmMjNiZmI1OTlhNWVlYjk1ZWMyMDU5YWYyNGRkODZjMDgyNTk1N2VhODM5MmNlM2Q5ODBmMSI6ImNkNjQ2YjBkMTk3MWYyNDlmNGM0ZDFlYWExN2U2MGMzMTFkODEzMDU3ZTBiNzE4MTlhNTAzYWE0MWU1YzZiMjEiOiI5MGVlMmQwYmYwNmNiOTQxOTBlNjUwNWE3NWQxMmRkNzdjMjY2NDk3ZGM5OWM1Zjg5YmRlNjBiZTY3ODkwOTllIjoiN2Q4MmI1MGNkZmFhYjliNWQyM2ZiNjYxOGI1OWRkMjhjZjFhODNjNzdmZjI5OTNkOWYxZWRiODdlZDdiYzM4OCI6ImY3ZjcyOGQ4ZWY2YWY4YzVlNzdjZWYxZTgzNzAzMGE2YWE1YzEyYmM4MTQyM2IwZWNiMDdhMmRiOTVhMzJhMjgiOiI0YjI1YWFmNDM2ZWI2MDBhMTAzZDNmYWU4ZTMwMWQyNzU1MTMyYjNkZTNjOGI0YzQ0MjEyOWE4OGViYjNhYjIwYzRkM2E1NDA3OGVjYzQxOTc5OTRmZjA0YmYwZTQ2MDkxOTk3OGQ0N2U0NWM3ZDEwZDc2YTFlNjNhZTM0NjI0ZTJmNjQxMjVhZTFiZWYzMDRlZmIxYWY2ODhmMjBkOGUyMTJmNmRmNGUxMTI0M2E0OTE3N2U0YjY0NTYwMTBkNzg0ZDBlNGE5NGU3NTM3MWE3NWM0MDUwYjI3ZTQ4MzU5NTQ5ZjgyNjhkZDJhMjI5MGViZGUyMjI4MmQ5NmIyZjM4ZTNmMDYxMDNkYWZhZTVmNTRmMDAxOWJmYjAxM2RmMzlhNzY0ODJlYzdmODc4ZDI2ZWYwZTM0YzljMjFlNjdmYmNjMzQxMmFhMDczOWU4NzVkYTBlOWVhMTM0MDU5MjE0NGViMjMyMzg1ZmM3ZTYwNWVjZDEwZmVlNDU1MjQ3MTgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJkYmQ1ZjUwOGU4MjI2YWNiOTU3YmJjNDkxNGFiMTM4MTBiOWI1YjJiNTFhMWI1NWNkNGFjNjBmNmI2ZDRjMzcwOTYzNDQ4ZmQzMjM5NjhjMjdkOTdlMDA1YjFhMDc5YzllM2JhMTUxODg3MDA2YzU2NTkzZWNhNzgwOWIyM2NiNzY4ZjViMzcwMWI0NTZiZGM4NWZiNTY3MmE4MWRiMmQ5IjoiMGNkYTVkNTAxMDcyY2Y0ODJkM2M1NmM0OWEzYzkyOWI0MjNmNmUxNWEzZTgzNTg4OGIzYTk4NzM2NDdmZmRkYyI6ImQzZjM4Y2E1YzBiYmNlZjQ2OTc2YzZhNTk2NWE4NDkzZjcxNGFhMmM4YTJjODE3NTc2Y2JjMGJkNjY1MmJlYjAiOiIyMDAxNDQyMWY5YWYyNTk4OTJmMDE3ZGQ1MzkyY2M5NzNmMTAzZDQ3MzZmMzg2NmU2NjMyOWU1ZTc3MDRlMGY4IjoiNjg2YWJhNmM5YzZjMjIxYjJiNGE3ZGU3NjY5NjNlNGQ5ODgwNjc2ZTdlNmFjOGU2NDRkZDI3M2ZjZWU1MTliYyI6ImI3MjBjN2M1NmUxMGM5ZTQzNjAzNmZhOGUxZjFkMWMwYzBiNzI0NmMyOGJkMzZlNWYzZTg4Zjk4ODY4NGI5NWEwMTEyN2JjNjRjYmNmMTJiOTY4OWY3MThiYWE1MjA0MmIwODM3ZmVhNzkxMzkxZWUyYWU0MmU1NGFjYzU3MTIzOWU1YjY1NDQ4NmEwMjVhYzI1ZjQ2ZjEwMjgwZWNkYzY1ZWQwOThlNjVlMDdkYzM4NzBiMTdhZjhiZmQ1OGVkYmEwMjZkYzEyYjRmZjA0ODMwZWYxMzJkMDdkY2Q3YzYyZjY3MTcyY2FmMjYyMGEyMDQ4NjlhODFlMzk4MDlkYjdiZWZhMjVjNWVkOGE3NGI2ZDMwNmMyMWNmZDM3NzgxODBkNDQ0YmQ5OTMxNGE0MzBmZjRlZjZiNzA2MTgzMmRmOWI4MjYwM2Q2YTBmNjQ2YjM5OGU3ZGNkOGJiMzNhNzkyNmJkZmEwODVhNDUwZDNkZTY4YzFlOGNiMmVlNDUyNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiI3MDkzMjI0ZDZiY2YwOTE1ZWI3NTM2MGFiNGJiNzg5YzE1ODM0YTM3MWJhYTI0ZGVlY2ViMzNmODZlOGJmYjQ2ZjRlMzQzMjVkZGNiZWU2NzFmOWU0NWY3ODg3YzE0ODEyMzg5OTNlYzRhMzA5ZTEwZDNmOGUzOTUyYzg0MGQ1NjQ2NDQwNjI1MzRmOTg1YTZiNGUzODY4OGQyYzgwMGEzIjoiZTdjZjFmMzJiYTM2OWNmNTU0NWVlNjcyY2Q2NzQ2ZWE5YTMzNmRlNzAzOWVjYmIyNTQxOTI1OWVhYmRmYTQ0YyI6ImJiMTg2YTQ2MDM4N2JhYWUyN2MxMWFhOGM2NWQ2ZWUwMDM1NzdlYWM0N2IyNTkyNTRhOTMzZjgyYWM2ODMyNTAiOiJkODIzNTM1ZWQ5NzRiN2ZmOWYxOWRjMzhiOTQ5NGFhOTlmODgxNDNlMzM4M2I1YTE4M2VjMDBjOTI1YmRmZWRmIjoiNTY1NDhhZjc5N2Y0YTA3ZWM0MjI3M2Y4OTU4MjJkODc3YTMxMWJmMWY4ZGQ1Yzk2ZmQ4NDQ5NzMyYTEzYTkyMSI6IjE1OWM2OTIzZmI3MWY5NjcwZGI0ZWVmMTJkYWRkMTQzZWU3MDFiZWM5YjBmNzZiNTZlOWIxYjhjNDczZWVjYzNlMzhjZjA2YzhmM2IwYzNkNDk1ODBlNDljYWVhYzBmZDQ4ZGE1ZjUzZDBkM2U5YzgyOWMyNTNmYWM0ZTRmMDk3MzAxNzdhNjNlMGU3NTlmMDQzMTY5ZTkxNDU5YzljZjk1OWQyMjMwYzdiOTRiZTE2OGNmNGZhMDI1ODhkNzhhZWZiYzg1NWQ1NWU0NDRkNjcxYTY5ZDI3NGM2NmFkMTg1MWM1NmMwZDg4MDQxNmJjYmFkMDg1MjNjZWZhMmZiMzg0ZGQwZjlmMTg4ZThhNjAxY2UwYTkyZDQyZmFhZWQwYTI5OWQ2YTljODY5NTg4NTQ3MTI0MjdiMzVlNzNhMDgxNzE5M2I1MGYzNTU3ZTY2ZDY0YWQ4MGZhOWZmODc0MjdiN2RlNWI3ZTYzMTJkMWQ5OTg4YmE3N2JlOTBkNGNjYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJlYTk2Zjg3ODc0NThlNTA1ZjU4NThlMzFiYjg1YjZlMzM1MjA2ZjZkNmQwNGJkOWQzMzMwMjkxOTNiZDJhMDRlNWY4NWFkMTUyNjc1ZWNjMDkwMTE5YWZmNzcyMDczOWJkYmUzNDU1MWViYmVmMTBlODIyY2QyOWU5YWRlMTQ4OGMyMWZkOWU3OTgzNjlkNTg1ZDZmNTgxNjhkNTA5ZDk0IjoiYmE0NWRmMWExNGUyMzM2MTIwMWE0NjdkMmNmYjdhM2RjZTMxMjgwNjlhOGE1OWE5YTM4OGI4ZTMxYzQ4ZWZiNCI6ImQ1NTEyNzJlNWE2MGFhMTIzMmZjYjQ3NjVlODUzZGUyY2NlYzA4OTQxYWNjNzUxODhlY2EzNzEyMGZhNDlhYWMiOiJjMWIzNDM0NzY5MWFlOWYxYmY2YmUzOTZlOGI0OWFhZWRiMzgzMDc1MjY2MjczOTlmYzEwYzQ4NzQ4YzNhN2JjIjoiNzIyYzBlZmE0NDUyNjJmNTgwMGFiZjc1ZTQzZDlkYWE0NGUzZGNlZTdhNzUyOGY3MzEzZWU1MmZjYTlmMTgwMyI6ImUyZjg3Mzc1OGM0ZTcxNzA0ZDg1NDVkZDFlYWI1MTIwNmFjMTFkZmRiMDBkZmQxZWM5ZTUzYmRjN2Y2YjU3ZjUyMDk3MjcwNDlkNGQ3ODEwNTliMGJjNGI2MDkxYzliZGVlOTQ3MTI3YjhjOGYwM2YxZWU1ZjM2NjU3MjBhNGY2YzY3Nzc2ODJlZjE5Mzc3MTkwNTIyNTRhZWI5N2UzYTE3YjZiNTUyYmNiYzkxNTQ1NTFhN2VkNDFkODM3YTI3YjZjMzdiNDI2NTA4NDA5Yjc1MjM2Y2MxNTZkYWQ4OWQ4OTZmMjVjNTQ0NjdmZDQ1Zjk2OThhMTFjN2NlMDFiZmIxZmUxNzFlNGQzM2ZhZjczYTMwYzg5OTJjNTFhODM4ZTljMDUzNzM1NDM3MWJmNzkxNDZhNzlhNmQ0MmQ0ZTk4N2I5NzczMzc3ZmJmMzg0OTc5NjkwYjJjMDRjMzMyZjIyNTY3ZmIwOTIxYzNlMzMwODhkM2IwMTE5MjFmY2E2YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiI5MmFjMTliMTMzMzk4YjdkOGRkZmJhM2M2MDQ2NDIxYjM2MTg5MjMyNDEwOTdiOGY2OGI2Yzc0MzBiNmQyMzJhZTlhZDhmODY0ZjM1OGFmYTdjYWM3MmJiYzRmZDkwZjE2ZWJjOWMxNTkxM2MxMTA5NGJmN2FhYTUxMGU2MjQxZmFjZTAxNmE5OWNhMDhkZTY1MjVhNTcwYmQxNzQxZGM3IjoiMDUxN2VhNzQxMGJkZTY0ZWRjYzcwZGY0OGYzYzg3ZjU3OGIzOGI4YzcwODdkZWYxNjAzMWU1Mjc2MDAzN2RmMCI6IjQzOWM5N2Y2MmQ2YjdhYWRhYzY0MDU3YzAwMDNhNDFhNDRlZTU0OWY2MGFmYTkyNzk3ZWU3YzlhZWJmYzgxNjQiOiI2NjlkNDJmOTkwMWUwMjliY2U3NTg0YmJkMjJhMTNhNzRlNmY2YmE1MDQ0MWEyNjMzNzczYmY1YWM3NDUxMjJhIjoiOGJmM2MxYTA4YjJkODQ1OWRmOTZkNmFiZmE5MDcyNWYxYTczNTgwOWRhNzhiZjk5ZjdmZGVkMDIzMDc3MTgwNCI6IjNiODMyYTdmMWRmNTkxYmJhNTcxYmY3NjYyOTE0YjBlNWEzYjM0ZDM4MjI4ZTM3N2U0ZTdkY2I0YjljYjM5NmFjMjY4ZDcxZmJmZDJlMWE1Y2ZmNDQyOWZlYmEzNmY1NWM3ZTQ1Y2RhYzQ5YTVmYzhhNzg3MjkyMDExYzYxZjRmMTAyYmI5YTVkOWM4ZmUxY2YwNDc5NTZmMjFjNzQ5ODdkODA5NjhkMmU0Y2ZhMjliZDkyYTM1Y2I5NmRkMzcyZDliYWFlZDhkMzFiYTM0NjJiNDIwODRkYzE4NDFhNDA0MjMxMWFiZmU0YjMzNThmNTZjOWUwYzY5ZTIzMzYzOGQzYmU1NmQwZDI2OWNmMTEwZDUyMDA3NTllY2ViNjNmZGYzYjBhZDI1OTM3ODU3ZDEyOWI2OGYwMzhmYzczYTg0MjA0NmNjN2M0NTI5MmQ2ZWMzNzY2YWFmYmMyMmYxNDkxNzc0NjI0NzUxZjJjNTBmZWU4MzBlMjRhMzRhMjdiNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiI3YTM0NmJkNmQ4NTM4MDNkMDc4NDRjYTM0OGYzYzQ4MzdmY2UzZTNhNzI3ZjcxMjIyM2RhMjQ4Y2Q4MmRiNmVkNGE5NzEwY2Q4YjlmMmU3YjU5M2NjYTQyZGE3YjFhMTI4NWE3OGQwYzc2NGIyNGMzZTRiMjFkMjU5MTljNTQwMGI0YWRhZjA2ODRjNzg3MzI2YzE5MDEwNzI4YmM2Zjk0IjoiM2U4ZGUzOWFiMjA2ZWQxNjZiMjAzYzk3MTAzMDU5ZTZhOTMxN2Q0N2Y3YTc2YmY0NTExODI5Y2MyZTI3YTRjYyI6IjMyNzk3NmFlZjIzOWIyMDgzM2QzNmI3ZjM1MmU4ZTY1NzBmOGYzMjViNTY4OTc1YTY2MWI1NGI4YWRhNDkxMjgiOiI5NDE5Y2RmMWM1OWFiYzAzMDEzZDdkNDQzYzczNGFmZjU3YTZkOTdjODcwYTAzNzYyYzUwYjQ1OWQzOGY1ZTA5IjoiZjJjOWM0OWM3NmJkNjgzZDQyZGQ5ZGU5ZDQ1YTk3Yjc4NzEwZjM5ZjJlZTQ4MmU4NzdlM2IwODQ0NjQ3ZjllMSI6IjI0YTgzOTkxZjk0NTVhMDQxMDIxM2NjMTM4Njk2Y2Y0ZWVjZTdiMmNhY2EwYTYyN2M2Y2UwMjNiN2Y5MTJjMTE1NzY4YWI4YWFkMGZiMTBlMzU1OTFkMzcwZTAzNzJmZTAyMDgyMzM2NWI1YmJlNzEzNDE3YmMyZjA1MGNiZjg2ZmQ2MjZjYWY5MTMyMzI3MWVlZWJkNWYyYWFlMzZmZDBhY2VkNjM3Nzk1NjU2MDRlZjI2NTNhMDc3MGZlNGU0MjY0OWVjZWI2MDg5YmI3NjYyY2EzZDc0NGZlMTc4ZjVhYzViYzIwY2U3YTkwMzI1NDk3ZjU1ZmZkOWIyNWM1OWE2YjgyZjA3NTUzYzA4MGYwYzQ1ZmVkMjNjZTQ3ZDk3MjYwNWEyZjYwM2I3MmQwOWQ2MDg1NDhhMDQwMzFkZDJiYmFlOWZmODk4MjAxZTQ0NjA0Nzk1NDhkNzBiMTc2ZTkxN2ZmM2UzNjgzZTQ5ZjMzMzBjZmE3N2EyNWNjNDhmZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiIyZDhmYjg3OTZkOGExNzY0ZjhjODI0YzU1Yjg4MGM1M2QyMjA1NTU5YWZiZGYxY2VjZGEzZGMyZDA1YmYwMDFlNjI1MjA3NmRhYzAxM2M3MDk0YWU3MmNhODBjYWZjZTJjYWIzMGExNjBjZTQ5ZGJkNjQ2NzEwYmM0MjljMTYzMjMxZDczZmUwZTEyMWY4Y2VmOGMwMmY3MDU5OGZhODUzIjoiZmVlYThhZTBiMjk5ZDVmNzkzMTUzODNkOTM4YmNmOWI1MzZkMTFlMDM2YjI4MDU2YmNiYmM3ZmNlZGUyMWNmYyI6IjFhMGZjNDdmYTk1Y2RhZmQyMDM2ZWI1MzE0ZTBmNTYyNjZlNThhYmIwZjAzYjVlNjc5NjM4OTQ1YjFmYmNkNTgiOiIzMDcwN2YzNzYzMzNkZjIwM2VhZmJhN2ZjNTJiNDBkOGYxZDk3NTIxYTcxZDU3OWM4Yjg0NTdhYzEzMjhjYWNjIjoiZjE3OWMxOWU0NWM0YTRmM2NhZDhiNTQ1ZDExNmNhMjllNDVmMzIyNTgwYjdmYzk3MTUzMTNiZTUzZjA0NzY1OCI6ImVhZjc1MjNiOTEwYjY1M2EzMDVmOTEyMjM2M2Q5NmUxN2ZkMjJjY2I5YjYxNThjYzQyYWNlZWE0MGMzNGVhYzczZTQ5NjgyN2RkNWZlNDMxMmYxMDJiYTZhYTdhZWU5MzRkMWY0MTYwOWJmM2UxNGMyOWFhM2FjYTIxMGUzY2FiZTcwNzQ0YTA5ZjRjMTgwZjNkMWRkZjhiZTBiNTMwNDAzYzUyMzg3NjEyMjZmMmMyYzdhZTI5YjI0NDM5YWZkNjVkNmQ1YTBhYThkYWExMWFiY2UzNmRmMDJjZTYxZDM1MmFiMDg5NjUxMjJlMTY3MDg3MzFkNzJhOWZiNWRlMDcxYzIwYzZjYjAzOTI3MzQ5OGZmMTU4OGM5MDFkOTk3MTUxZWRiYmQ0MTg3MDAzMWVlMzM3YjM4MjMzZWRmZDc4YWFiMzg5ZmFlMmJkMjgwZTRiYzg1ZDFiZDY2NTUyNjljMzM1OTc1M2IxN2ZkYWM1MDJjM2EyZTg3MTE0OWZiZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiNDhjMTIxYjE4NzMzYWYxNWMyN2UxZGQ5YmE2NmE5YTgxYTU1NzljZGJhMGY1YjY1N2VjNTNjMmI5ZTkwYmJmNmJiYjdjNzc3NDI4MDY4ZmFkOTk3MDg5MWY4NzliMWFmZTBmZmVmZGFkYjljY2Y5OTA1MDRkNTY4YmRiNGQ4NjJjYmUxN2NjY2U2ZTIyZGZjYWI4YjQ4MDRmZDIxNDIxYSI6IiI6IiI6IiI6IiI6IjA1ZGE2YWFjN2Q5ODBkYTAzOGY2NWYzOTI4NDE0NzZkMzdmZTcwZmJkM2UzNjlkMWY4MDE5NmU2NmU1NGI4ZmFkYjFkNjBlMWEwZjNkNGRjMTczNzY5ZDc1ZmMzNDEwNTQ5ZDdhODQzMjcwYTU0YTA2OGI0ZmU3NjdkN2Q5YTU5NjA0NTEwYTg3NWFkMWU5NzMxYzhhZmQwZmQ1MGI4MjVlMmM1MGQwNjI1NzYxNzUxMDZhOTk4MWJlMzdlMDJlYzdjNWNkMGE2OWFhMGNhNjViZGRhZWUxYjBkZTUzMmUxMGNmYTFmNWJmNmEwMjZlNDczNzk3MzZhMDk5ZDY3NTBhYjEyMWRiZTM2MjJiODQxYmFmOGJkY2JlODc1Yzg1YmE0YjU4NmI4YjViNTdiMGZlY2JlYzA4YzEyZmYyYTk0NTNjNDdjNmUzMmE1MjEwM2Q5NzJjNjJhYjlhZmZiOGU3MjhhMzFmY2VmYmJjY2M1NTZjMGYwYTM1ZjRiMTBhY2UyZDk2YjkwNmUzNmNiYjcyMjMzMjAxZTUzNmQzZTEzYjA0NTE4N2I0MTdkMjQ0OWNhZDFlZGQxOTJlMDYxZjEyZDIyMTQ3YjBhMTc2ZWE4ZDljNGMzNTQwNDM5NWI2NTAyZWYzMzNhODEzYjY1ODYwMzc0NzllMGZhM2M2YTIzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI4ODAyZDQzZjcwMjk0ZjUzMmQyYWYwYmUwODUyYjdhOWVmNjU4NGU4YjE2MzE4NDUzMDZiNTgzYWIwNTkxMTFjMGE4OGNjNjcwYjhhODI3ZTUwNTdiOTAyNTYzODQwYjZiYTZmNjkxOTI5NWYyMjA2YmM4NzM4ZWVlMmI0ZTdiNGQzZDQ5MmI5NDUxNTBjNzZlZGY0NjZjZGZlZGU0ODY4IjoiIjoiIjoiIjoiIjoiY2FhM2E1Zjk4MjJmNDk3ZmMzMzM1YzNhNDI2MjI5NDg0NmNkNGE2ODQyY2RiMjkwYTAxMWE5NGI2YzNjMjdhODM2MjJkZmM3ZTVjOTk1NGU5MWZlYWU1Y2E4MDM0MDgzZTJmY2I0OTNlMjEwZTVjYWYzMWNlYjYzYTdmM2Q1OWRjZmMzYTg1OWRhYzVjMjUwOTgxZjdiNjYzZTRlZjcyMjJlZGVkMzUzYzdmNDI5MjNjNmM2ZGIwMDZlOTI3YjRiNWY0NGI3M2U5ODZkZGM0MTc2YWMwM2E1ZWM2MTliM2ViYzkyM2Q0YTZkOTQzMGU1YjlhZGY3NWE1Mjk4ZTc2YTExMGQwYTJhNGUyZjc4NDFmOTAwYzQwNjdjZjdlZTY4YzM1NmM0ZjVkMTNiZTg4ODU4MDFkMWU1NzhjYTRkMmNjMzJkNDhiNWU2MzAzYTBiYzQxN2FmYWMwMzM3NThmM2U4MTI2OTNjNDkxMjhlMGRiMWJjOWVhMmZhMmYyYzQ1Y2IzNTc5MjEyM2FmNjNmNDJkZGEzYWJjN2NmOGJmNWRhYzE3OTg3MTc4Y2MwYTY0YjBmZGU1YzlmZjIwMTJiY2Y1N2U5MzEwM2YwOGRiMWUzYTlmNzI3ZTFjZjc1M2VhNDRkNjJlYWQyYWE1NDEwYjllMzc4MTJjNDNkNjBlYjEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImE1M2FkY2Q4YzhlYTE2YmE4MGE1N2Q5YTU1OTU1MTk3Y2UwZDk1N2JjOTJkOGEwYjU0OGJlZGNhMTQ5ZDc4ZmZhOWRkZGI2NDcxMGQ1ZGVlODlmMWVkZDM3ZDhiNTVkYzJmNTBiZDY3ZTRhNmFkMGYzYTAxOTQ3ZTM2NzNiMTA2ODgxNzg3MTBiYTJlN2JiNWYzZGJkODI2Yzc5MmM5ZDgiOiIiOiIiOiIiOiIiOiI3Zjg5ZGIzZDBkNmNmN2M1NTU3YjQ1OTlkN2Y0YzhiNTIzNWMwMGM5Y2MzOTNmNzM0YWQ3YmE5OGNiOGU3NjdjZWFhNTI5ODkyZGMzMGQyODg1ZjE2MWY0N2I5YzgxZGMyODExYmFmMTJmMTIwYmI5NDU4MDk2YzE4M2FlMzVlMTk4ZTFhNTBmYjkxZjg2M2M1ZDgyYjI3ZWQxMDg2NGRkNmZkNjAxZjRhMWZjYjA3YmM4MzliZGExODVhOWIxOGNlNDVkODAwMDQ5YmQyZjQxZmQ5MDlhMTJlYjJmZThhYjNlMWQyZjBmMTE4NzEwOWQ2MWUyYWY2ZGYwYzVjYjlmYjgwMWNlYjMxOWQwYWE5ZmVhOTE4YWU5OTkxNzIwZTRkOWQ3OWNlZDgyODU3NzQzODJhNGQ4OTAwMWZjZmI4OTlhN2MzZmI4NjRmMWFkMmRlYmY1ZjVjMzlhYjA0NDk2ZmZlMzgzZTllZmRhMGVhYmE0ODMyNTUxNGIwOWEyNTM2NDBmMzg2ZmUxMmZkMWIyNWRhM2IyMzczZWUxNGVlOWYyZmYwNmZlMDYzZjc3MTYyNGY1MzhjMGU1NjIwMDI5Yjk0OTBmMzNlNWU0ZmYxYTliY2FiYTc2MDA1YzgyOWUwMTE3ZDM0NWI3M2Y5ODZkN2M4Mjc2Y2I1NGZkODdlNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZWRjZGRjMTM2MDRlMDM2ZjE2Njg3ZTM2YmI1NzZjZWNkNzFiMjBkYzc4ZjA3MDAzM2Q4YjZmMWY4MTI1YmEyZDJkM2VmZGQ5ZjAxYTkzOTEwZWMyOWZjNDcxODQyMGEyMTM4NWY4Nzk4MjE4ZTFhZWJiODEwMzc5YTA4NzFiNTM0ZTA2N2IwNGQ2ZWM5ZDUyM2Y3Y2RjOGQ0NWJlZDRkMiI6IiI6IiI6IiI6IiI6ImRmMDJlYzliY2NjMjVmZWI3YWE0Nzg3ZjVmNjNhOTJlYzA1YjJjYzEzZmI5MmMyMDkyNGFiYTllMTcyMzQzNjQ2OWM4NzY3M2I4OTg3ZWYxOWJlOTllYmFmZGU5MWQyOTNjYTZlYzdjMWZhNGNjODkwMmE1NzQxNzMzODUzOGZiZjg5Nzc3MmNiOTYwODU3NjhlODkzYzVhMDkzMjczNTQwMDYwNzQ5OTJjZDZhNTE3ZDZjNTdjN2FmNTQ5NWEzZDY0NTc5OGViMTk2MmMwYjU2ZmYwYzhjOThlMThjMDk2M2U1YTU4MTIzMDkwOTk4MWIzMDE3OTdkNzc5NzAzZjMxYjI2NGY5MGQ2NDgzZWFiZDhhNDFmZWM4ZWE2OWE1N2JlZmUxZjUzZDQ3MGZjODJiYzM1MDI5YTRkMDg5ZWVjN2NhMzk4NjQ4NWE1MWFkMWU1NmNkZjJkZWE1ZmMzZDM5YWE5OTdhNTNhOTkyNDc3N2ViNmYzYmYxMDU2YTU3OGZkMzJhY2ExMjVhNzRjOGQyNGFjYjdiOTljMzdmMzQwODE4NTA3MTJlZGYxYjY4NTFmMGE1ZTY0MGFlNzE5M2QzZjQ5ZjM2NTRhYWQzY2QxMDZlNDFlNzhmMWU5M2E4YTJkMDFhY2RlMGU2Y2ViM2YxOWUwYWI0OWY0YmNiZTQwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI3ZWUwMzc4ZWI1OTRiZDJlZjEyOWYzNWM5YzFkODc3MjdjNzFhZTQ3MjM2M2E1OTY0NjdhMmQ3MTg3MTg2M2Q4NDc2YjYzNmUyZmZkYzBkYjcwYmU1Zjc3OTJhZThhOGNkNDBkM2YwMzM0NzcwMGQzY2E1MTU4ODBjZmQ3OTYyZjhjZTFkY2RmYzVmZjEzNGRhZjU1MmY4YzJhOTExNzU4IjoiIjoiIjoiIjoiIjoiY2MxNGMwZTcyZjE4NjM5MmU0NjFmNjVhMGMwNzExZTMyZTRiMzNhNDA3OTUzMjE1OTQxZmM1ZDA2Mjc5ZDA4NzcwYjNkMTY1ZDU2OGIyZmRkYjk0Mjk5ZGUyZTdhNmRmMDgyMGE2NGU4Nzc5ODkzMzkwYWMxNzM4MDFlZjg1MTcwYTUyYjljMDMzNGI0ZmRlNTVmZTA4ZTkwYjc5Y2ZmMTM2NmJjNDNjMGZhOGY1ZjgyMDZjYzQ2ODk4N2EzODEyM2JiZTBkMjdlN2VhMmQyMWU2YTFmMDI2MTliOGMyNzBhNWU0MTZlZDUwZmY3ZTQyZDlmYWEyZjhkMzgzZWRhNTU4OTlkODUzMDI1OTA2MjJhZGE5Y2NmNWQxNDQzMTNlNWRmOTU2ODhmZDFhOWM0OGRkY2FmN2FmMDMwNjhlMTE3MjlhYWRkNjI2NzYxZjNiZTFjZDM2MTg4Yzg5ZDA4ZTNkOGEwOTBlN2VjZDczOTQwNzdiYmJkMmM3ZTE3NjY2NjJlYzg4MjkwMTk0MWUwOWJlOTk0M2E3MmEzNDgxNzE0MTYxMWVmODRjMGYxODQ4ZWZkYmNmMjQ1MjE1ZjI5MDQyN2E2MjQ3MTc0Y2YzYTA4ZTQxMTBkM2VlYTA1YmI4NTQ4NGY3NWUxNTZlMmZlNWVhMGM2NzIzZDNmOGYwNDciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImZiMzVmM2FkNmI3NjE4NzM1ZGRkMjczZDk1YjQ0MmEzNjJiNjgyMjUwMmEyMTdlODkzYmUzZTM2ZmQ3YmU0NTUzY2ZkZTBlZGY1ZDliNWYxNWJlOTI4OGZmNzhmZDBjMDllYmFjNDllNzE0ODQxNjkxNzBmMzQzZjRiMjFlMjQ0ZDEzOTFmOTYzMTEyZGMwNjEwNzVkOWI3ZDI2Y2QxNzEiOiIiOiIiOiIiOiIiOiI2ZjY4MTRmNTVjN2UyMjZhZGI3Njg3ZDczZWI0ZTliOTA5ZDQ3ZjRiNTc2OTNjZTJjNTQzNDM2MzE4ZmFlYTkyMzcxZTk1MWQ1ZDMzOGMwNmJkOTVmMGU3ZGViZDkxNWUyMTc5YmVlY2E5ODc4ZmFmM2RiZWFmZWFiZTNjOWJjOGQ2NDQ1Zjg2MzY0OWM2NmU5YzM2MDliOGEzZDU0MDgwYjY4Y2UxNDViMmZkNGVjYjNjOTM4MDFjMzA3YzU1NDUxM2EyMTBlNDlkZWUxMzgyOGIyMGRmZjA5MmRlMmYzMTJmZDYwYjJhYTBhZjRlZDdlNTY0ZjA2YWRlYTZiM2RmYTc0NjM2ZTdhZDE2ZGViMTllOTVkZjcxZDI4NjBhZWVlNzUzMmFhOWZmMmEwOGM3NjhmMTA4NmFiZWZiNjBkODYwNjU3YzhiZDc5NzJlYzdiZTM3NDAyOTNiNjQ3MWNjNTUyNjJjYzEyMGY5N2MwYzA4ZGU3OGI3MDUwNjhkY2JiMmQwYzY1NmNjYjhlMmM2ZTNmZWQxOTllZmM4ODg0OTJlYzY0MWQ0YTU0MTUyMzY2ZGVlOTYwMDhhODA3OTRjYjNiNGY1YTM2YTM0ZDgzMjQ0NmQwMzk5MWU0Mzc0MzE1YzY3YzMzNmFhZDMxNzkyMGI5OWY5YzM1YTQ5MzU4MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiYThkYjYxMjM0NzIzZGEyZjA4ODMyMjQ1NjNhMWJjMDRjN2I0ZDA0MGE3ZGUzYjY1OWRlYTAwODZiYWI3ZjQ1NGM3M2QxZjkxOGZmMjllMmY5OGNlZTU2MmUwNWY1YWQ2ZjI3ODFmNTc4NjIyOGNmMGNiYjUwZDJjOGQ5NGExMzA3MzgzZDQxMjI5YTkwYzBkY2YxNDJiOTRiNzA0YzU2YSI6IiI6IiI6IiI6IiI6IjBmYTVmYzAwOGM1NmNhNDcwMjQ2OTJmZjU1ZjUwMGUzMTI0MjM4MThkMWVlYjc3YjFhMzQ0MjA1ODcxODg4NTQ3OWI0MDU3NjdiODc5OTQzZTczZmIxNjk1NmVlMjI5M2IyM2RjYjkzY2ZkYTQyMGE0ZjM3Y2E1ZWJhMWFhZmNiODcwMGNmNmYzOGYyYWNhYzg4Njk4ZjFjMGFiZWE5NzUyNzBkZDQ0MzYyOTJjOGNhNjA1NzY2OTBkZmQ5MTM3MDgwZGIyYjNhNDIxMDdlY2VhNWE2MzFhYzQxMzM4NGE5MzI5ZDYwYTM1OGQyYzU4NjQ3ZWVkY2FjMTY0ZGY1MDgyMGU4NzkzNzRiYzJlMDhkOTcxYmY1ZGM2NWFmYTMzZWNkNDcyZTVmZTk2Nzc2MzVhNzlhZDU4YjQ4OTkzM2ZlOWMxZjk5MjQyOWU1ZDE2ZGM5NTRkMmRlMDU5YjcwYjhmMTcwZGVjZDFmMjJjMzZiMDM0ZTVmMTc1MTM4ODQ2OTAxZjZmZDdmY2VhMTQ5MTg0Njk4NGNlZDhiNTk1YzQxMWE5ZjZkMjFmM2YxNWZhNWEwNzNlZmI1ZjgyOWYzYjM0ZDYwMWFhOTFlZDhjYzQzMzQ1ODY5MmY0NGVjMTkzMGYzYWM1NzgxZWEwMDFhM2I3OWRmN2MzZTgyYWU1MzY1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI5NWQ3ODUxYmNkNDNmYzcxY2Q5NjU2NzM3YTBiMDViNWY4M2U1NTQ1MWM0NjcyMDYxMjMwYjliMzRiZmY3MWMwMjViZDUxY2NjM2Y0YzJhMTQ0MDdkNWQ1NjlkMjUwYjg0MGUyNDgyOGMzMTljMWI3ZmUwOTNlNTU1MWY4YWNkMjAxNjdiMjgzOWM4ZDVjZTk3MTA1MzJkNjk4MTJiOGE2IjoiIjoiIjoiIjoiIjoiMzU4YjM2YjRiN2YxMTlmYWZjYmZkZDYxOWFkYmY5NTkzMDQ4ZWQ3MzY0Mzc3NzUyZGVmMzQxOWI4NWVhYmQ0NDRlODdkMWU5NTJjNDVmN2M5YmVhM2QyOWY4NDVmMjk3ZGJiNDhjMjMzNmNmNDQyMTZmZGQyZTVjMTY0YzgxYWM2ODhmZWViY2Y0NjA5MTBlY2I4YjhmNmMzYjAxNTAxOTViMmM3ZjFmYjk5ODhlYjYwYzA1NjRmMGUwODllNGMyNjljZDE5NDE0ZjY3MTgxMjBhZDM3NDJmOTY3MzAyMzNkYWRkM2ZiN2Q5ZTg5OGNlMzhiNWI4MjQ0YjBhZjYyZGRiMWUyNjg5ZTlhYWYyNzAxN2VhMjg2OTlkMDhiOTMzZjkyMTk2NzZhOThmODE3NDIxYzM2M2E1MjY3OTg4MzNmOWU3NjNkZDE5MzQxZjU2NTk5Y2I1OTRmMjc0MDUxMTUxYjg3YmYyMTlkNGI4N2I3MmVlZTViZjRiYzc4MDUzYTU5YWE1MDQwYWQzMzRlMDgyODNlMDYwYjdiNTI4YTkwODlmMjRiMjg3MzM0MDcwODUzYzE4MDAyMWI1MDU5NWUwZmJiZGUxODQyMjEyN2IwZWY3ZWZlOTJiOTg3ODhkNmU4NTY4M2Q5N2I2Nzk4NjExNTQ4NjNmYjBkNGY5YTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImVlN2E2MmVmYzg0MDNhMGY5ODg3MTE0MzZlZmFjYzQ0YjUwOThmOWEzNTI2ZGFjNDlhZDkzNDNjODBjOThlZWM1MWYwNjQ5NjhlYjM3ZDFhOGJjODYwNGUzMzI0ZTVhNjRhOTkzMTU0MDFhMmRmOGQ4OTM1ZTk0ZmVhM2ZjNTk5MDEwN2JhZTE5YWY4ODY0MTVlZGQ2ZWNjYzk1ZWU5NDIiOiIiOiIiOiIiOiIiOiI3ZTNhMGEzMmQ2OTU0YmFkNTc5ZDU0ZjEzNjU5NGFkZDZjZDMwNjI4YmRkNTNkY2IwOWJhYTk4ODg0NTQ3YmNmM2M4ZTg0ZTRjMDFiMDY2MGQ2MmRkOGI0NGFlNmNlODMwNDQ3YzU0ODBmMzA5NDJlNzQyYmRlNTAwOWZhNzY5ZWE4NjYyYThiZDI2MTM1YmI0NWU1YTM4MDQzOWQ1YjFiMDExNDk2OWY0MmJhZmU0ZDFkN2I3YzlhN2I3NjU1NzM1MzhhN2Y1OTE3YWY4NWJmYTFmYzU3NzEwZTEwZWI0YTAwMDYyYzE3NmI5M2Y0YjAyMjU1NjA2YTExMDg0MGJmYmI5MTMxYWEyOTA2MzVmYWM1MmIyNjAxOTBlOTE3MmNmZWY5NDdmMTUyMTEzZmYzY2IzZGU3M2UyMmVlZGZjNDRmMTQzYjljMjNjMTY3MGEwNTdjZGVkYWVjMjhiMTQ1YWMyZTY5OWYzNjZkNWQ2OTVkMWNiZDI1OGI1OWQ0Yzg4YmQ4ZDEwNjJlYTU3OGM3NThkNTgyM2M0M2E4NWI1ZmUxYWFhOGYzZTRiNjgwOTJkNDEwN2Q2YjExZWViNjEzZWQwNTg3NDcyNTlmZjBlYjY4NWJkZDQyYjlkZWU1NGMxYmU5YjYxM2E0ZWY2NzJjNGQzMWZmODRhNzNmNTUzYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiYmYwMjc1NWU0YzNkYjk4Y2QyNmMwYWJlZGVkYjVjZTM2MDQ5NWMxYTJlY2YxOTRlOTIyZDg3ZGVjZWY0MTczNTg0YTM3ODhkYWQ1YjMwOGM1MGU3YzBhMGExMGM3YTQyZjNjN2IyYTUyZGYyMjMwY2I4ZGM3YmQ3MWMzNWQ0NDhmYzViMWViNGY5MDNlYzYzNDJjZGUxMThhYzI4NGMyZiI6IiI6IiI6IiI6IiI6ImNlMjgwNjU5NGRhN2E2ZjI3Mzg1NTkzYjE0NjY5YjVjNjNiNmE1YjAyNDBkMTUwYWJmMGVhNGRhZjMyNTc0NjA0ZmNkZjEwYzQ5NjVhOTIyMGMyODU4ODVhZTJkMmNjMWRlOGE4Njc5NjM1Nzc0MTY0NTk2NGYxMDJlNjUxNTBkMTEwNmNiNWI4YzViZWJmNWZkY2Q1ZTY0ZGNlZDllNDg5YzE4OGI2MTljMmVjZjk2ZTdmOTY4NjFkYWRjZjBlNzM4MWI0ZDYyODE2NWRhMGVjNWI3YzkwZDM2OWFmYjcwNWMzOTk4NmU0ODg0YWRiZTA1ZmI3Yjc0YTliYTNiMzU0ZTg1ODY5N2ExZGI1MzFhZTMyYWU4MTg0NjU4Njg4MDEyYWFlYWE0ZjY5Yjg1YjgwMmY1YWRhZTY0ZjA0OTg1N2QxMzE0Yzc1MzJiZDQwMDQzZTYxYWY0N2NkYzdlYzhlODVmZTYxODI3ZGUzOWMyZjE4MjVmYjAyNTNlZTczY2EyNDIzNTQ0YmI2NGY4ZDJhZmU4NGRiNWNjOGFkNzY5NGUxNzc0NjhkY2IyOTA5MmI0Yzg1ZDA2OWFkN2IxYzQxZTEzOTY0MjA3NmI4MDc1YWIwMjI4ZjU0MmZjZDJhN2E2MzQwOTE3ZjgyYjdlMzU2ZTU2NTJlY2EyNGIzMDMxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiYTE4ODA2NWM5ZWU5MzYzODRjNTU3MmIwOTEwMzYwZWNkOTg0Y2QwZWE5MjZjODZiMjY5ZjM4ZjEwNDBkNDE2NzliZjlhOTFiZDRlOTg2ZjUwMDAzNmNmYWZjNTgzZWRmZmYxMTcwY2VhOWYyMmEzMTQwZTdmNGQxOTg2MzBmYTM1MzYyNjUxODA2MjM0MGZkMmY1YjBmNmI0ZmU3ZTIxNyI6IiI6IiI6IiI6IiI6ImVhMTljYzkxZDgwZDM3YjhmMTYzODhmYTYyZmU4ZTFmMTE0ZjMyZjJhNjEwODE0MGI2MGMxOTk0NDMyYjE4NDQ1Y2RjMTMxYjIxYzg4NGM3NGQxNTVhZWEyYWE3ZjYyYzdmZmRmMTI4ODg2Y2RlZWJiMzk1ZTViODgxOWRkZGM4Yzc4MzQ0NzVkMTkxNjJjZDZhOWMwMzc5OTVlM2Y5MzgxY2Q1ODJlYWRhNDI0ZWE2YjY3YWQ3MzRjMjE2ZjgzODBiZmM4ZjVkYzBlN2ExZDkzYzQwNjg3MGJkNjRhMTkwYTY3MGE4Y2E5NGRmYzBjMDJiNjEzNjVhMWQ5MDhhNmI5ODA2MjdhZjZiY2UwMmE0MmRkOWRlZTkwZGJhNzIyY2Y2YmQ3YWI4NmNjNDIwMGFmOTNlZDIyNmNkYWUxNGYyOGUyNDJjNmY5NmRiODY2NjMxYjI1OGJlMDEwZDQ3YzJlYjk1ZjAxZmNiYTRmZDcxNjQ2ZTZkYjU0OTQ3YTBkNGRmZjg2YTEwN2UyMjZiMWU0MzQzZDhhMWQyMzMzNjlmOGI1NjBmNzhjODY1NDI2ZDM0MWY1ZjA3MTM3NDhiM2FjNDAzMWQzZDg0YmIwNTdjZGVkNjBiMTFkZTQ0Y2IyMjE4NjllNDJiYjA1NDEyNzM4ODc0MGU1MjUzNWExMWFjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiNThlYmNlYzQ1MzlmNGFmMWIzMmE4NTQxODFkZDBmNTEyYjhjNzA0ZmE0NzUzNzA5NmE3NjllZmYyOGM1OTE2NWExODIyNmNmYzc3OWVmYzk1NTBmN2JlMDIwMDZkODNjMjMwY2Q2ZTY5MDllMzAxZDFlOTllY2QxZmZmMmIyY2QwMGE1NmM3YTY4NGM4OTA3YmJiMTNjZTNlOWEwY2JjZSI6IiI6IiI6IiI6IiI6IjZmNGU4NmYzMDlmNjkxNDQ2MDM5NjFjNTM2NmU0ZjliMTZkMTBjMTA1OTNlYTY4OWE4ZTc0MzVhMzI3ZDI1MjRmNDQ2ODgxM2VhN2YzMjQ4ZDhkNGJiZTE3YjE3NWNmYzQwNjE3MTQ5OTgzOTI4YjI2N2RjMGM0ZGI0NmQyYzE3ZmU4YmMwNzY0Mzg2NzU4YWYxYTgyNGUxMmViODk3ZmVhZmMxYzdlZjY2ZjgwZmZjZDk5M2FhMDE2ZTEzOTk5MWNkZTg0MzVlZTZiYjBkZTQ1YTdmYjYxZWIxYTZiZWI3NmUwMTJiODQ4ZWEwMDNmNjg3NTM3ZTRiZDAwY2VkMzdlZmRkYTY2MzMzYjUzYThkZDUyMjBjMjgxZmJmNjhiZmQ5ZTcyMjg1ZTc4MTk3ODgxZWZjNTQwZGE0YzFiYTgwYTIyNjAxM2EyZDcwOThkMzRhZjQxMTJlN2I4Yzg2NWFmMTU0MDlmNjkwMWI5NTJmZWU0YTQ3NGU0MDI3MDUxZTFkY2U4NzlkZGY1ZTg0ZjM5NDdkYzliOTQxMTlkNjdlNmI0OGVkNmZkNmIxZjgxM2MxM2QzZmYzMGUxMjFlZmNlNzkxODUzMzkyNWY1MGM4ZTM4MWU4N2VhNjg1Zjk5MzYxOWJhY2M5ZWZjMGFlYmM4ODRiNDUwNjQ2ZWVhYTVlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiYWNhZDYwNjE1NGY2YWUwNjczOGQ2N2Y1MTdjZWY0YzhkZDhkYmIyZWEzMzNiYWM5ZTY5YmMwYTRjYjk4ODc3YmZjYTNkOTA2NzM5ZDQ0MjYwOGJmZTY2Y2E0OGMzZDdkMDFmN2Q0MTBmNDY3NjRiZjJiYTQyNjg3MTNiYTc2YmY3MDI2MjAzZTM1MzEzZWU3NWFkZDYwODUwOWRlODY3YyI6IiI6IiI6IiI6IiI6ImY2NjIxYmI4MmQ4ODMwNzA3ZmRjYzZmNThhN2NlY2M3NTAxYTU2ZjQ0YzZiYTc4M2Y2ZjgxODdiMjFmNWYzZWFmZDFmMzhhZTc4MDU4NGJhNGFjYTU5NDY2ZjZmNWZkZWUxZTgyYjI4YjVmOGRiNGM0ZGNhYTI4ZjAzMDQzN2RlNDA3YjVmYWM2MzJjOTZlNDNhMTJkMTNiNTQ5MDFmYjdjMTEyZGFlZTI2OTlkODI1NmM2ZWUyNmQ2MGJiMjY3ZGZkYTJjNmQ2YjYxYzljNjdjZDVhNWIwNTVhMjgzZmEwMmQwNmNiYjhiOWIxYzMxMzFkN2RlY2NlNGRiNjEyNDM3MzhhZjRmNjY1MmJmMmJlMjNkNGI0OWExYTdiZmM3MTEwOTJjZGY2NTU1MjdlZTc4NWE4NWU5MGI1OGZlNDc4YTQ2MmI2NWZkOTg2OGY4MjFmZmJhNTYwODAwNjRkNzQ3MjRkOGMyZjk4Y2ViZDllYjhmYzViZjEzMzk5YjA0Y2YxNTg2MzM0OTEzZThlOTIzMmUxM2JhMTBmOWYyYzM2NWU1MDE1NGVlOTFhMDBkOTgxZDRmZDdhNGQ0OWMzYTJjYzA5ODhkNGQ3MTIwNzQ5MThmMTFjMzc4YzQwZTc2MmI2MTBjOWY0ZGYzZWY1OGQ3MjhhMjNkZmYzZTAzNWRkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZDI3MTU5NDdiNDIwY2ExMzZhNGNkNWM5MjFiOGZhZTIwOTAwNjc5ZDg3ZmZkZTViZGFkYzdiMGZiNTMyZjM1ZTEwMGQ4ZDBiNTk4MTBiZjMyMjJiMDdmYWMzYTNjMzM0ZTRmZmQ5Njk4M2U1MWFkMDRjMmM1YmI3ZmVhMTVlOGEwM2UzNmI5MmY0ODdiMzE0YTE5MWI1YWU0ODYyY2ZlOSI6IiI6IiI6IiI6IiI6Ijc1NzUxZGQzNDYzY2MyMGQzZjI3ZTNlYzA4NWFiNmZjYzM3Mjg1MDMwZmFiYjJhNmU0M2MwZDQzOGM3ZDIxMzM0NmQyMThkMzRlM2ZkYmFiYjM0MTFiZTIzMzcwNzI1NzI5MDU5OWJiYzY5NTEyYWQ5NzFjZWMyNDMxNTE4ZjM4MDIyODE2YjlmNzk0ZTIzMjhiMzlhOGNmNmFmZWFmYzRkMWY0MDhmNmUwNTg2M2I2NTQzNjlkYWMwODY3ZmVlZTBjMTcwMzRkNmQwN2VmMjJkZDIxN2Y1YWQwZjFlZjI1YWM4MmZjZTAxODU3M2QwYTJiMGQ1YTkyNGFlYmM1ZmQ5YzNlYjljYmUzOGFlM2Q2MGUwZTkyZmY4MDBjOWIxMDhmYmQ4NWIyY2RlMWI2NTFlMDgwZTY2MjVlY2FlZWM5YmU2ODRmMWY3ZDk4Y2FlZWM5YWE1ZTE0NDVlNWMzZGU2YWZiNTkwZmIzYmUzMDU4YjQwM2RmNmM1NTY5NjNlOThjZGIzMDQ2MGEzYzY4ODQ4NWJmYWUyODcwM2IzOGE1YzQyNDU0ZDkxOTM1ZmM3NTE5ZTFlM2IzMTFiYTExN2IxYmNmZDQ4MGMwMTVjZjhlNTM1YWY2NjUyMWNiMzU4MzM2MjFiZjEwMjYxMzkxNjQwNTJhZmY2YWE0ZTUxZmRjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZTFkMmQ3MmU3OTA3ZTcyMTRjYjI2NmYxZWY2NDEzOTVlNTRiMzllODM2NTMwNDY2MWIwYmVlMzcxZjMyNDY1Mjg0MTdmZmQ1ODQyMGU0OGVjMDYzZGU1ZGY0NDYyZTM5ZTZjYWUxYjVmM2EzYTEyZmFhYWYzOWI5OGVlNTkyYzhkNGY1NmI5ZDQ1MzRhZGQ1MTA0YjM1N2Q3ODhjMjNhYiI6IiI6IiI6IiI6IiI6IjYyNmEwODYzMzIxYWM3NWUwYjYyNDBlYTZhNjE5NDU4NjM0YTk3ODI0NWMxNTMzODE5Yzk3MTE0ZTYzOTE0MDA5YzljYWI3MzJmMTMxMGY2MGY2NGYwMzNiMDA3Mjk0MjQyMjg2NzFmMzM0MjUwOTk4MjBhYjEwODQxMmQ0NjBmMzJjMDAxNWI3Mzk4N2U5MzdiOWJiZGQyOWU1YmZiOGRiYjZjOTVkMmI2OWZjY2JjMjZiMDYwY2YwYTVkYzA5OTJmYjBlNzZiMzhiY2Q2NGZkN2E3MjY3MTRlOGM4NTQyZDQ0YjJmOWM1ZDJmMmY4Y2IzNzBiOTVlMDg2YjA3ZTg4ZjQ5MmY1MWZlNmMyODhkNzhiNzZkMGMzYTYxNDZjOWRmY2U1M2U3NmNkYmJkMTU4ZDI5NDRkZDEwMTk3MjQ3MDA0OTU0ZDkyZjZiMWRmNGJhZGViNGJiMWM5OGQ3ZDNkYTIwNTRlMzMwMGY2ZDhkZGE4ODYzNDIyZTZhMDQyYzJkODRiMmJiZWQ2YmU4OGYwNzA0NzYzNDEwNzcxYjM3ODZkMmY2ZDk2OGI2YzIyNGUwY2Y1MzVlOGQwMmMxNzhiMmUwYjkwZThhN2ZjYTBjNDMxYjdmM2NmNDFiMGE3YzE3Nzc4ZmU4YzJlZWI0NDJjOTEwYmE4OGM3YzM2NGNkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjQ2ODZhOTU5ZTE3ZGZiOTZjMjk0YjA5YzBmN2E2MGVmYjM4NjQxNmNmYjRjODk3MmJjYzU1ZTQ0YTE1MTYwN2E1MjI2NTQzYjRjODkzMjFiYmZiMGYxMWYxOGVlMzQ2MjVlZjUwZGFhZjI5OTI5MDQ3ODcwMjM1YzE3NzYyZjVkZjVkOWFiMWFmNjU2ZTBlMjE1ZmNjNmZkOWZjMGQ4NWQiOiIiOiJkMjM4M2MzZTUyODQ5MjI2OWU2YzNiM2FhYTJiNTRmYmY0ODczMWY1YWE1MjE1MGNlN2ZjNjQ0Njc5YTVlN2M2IjoiYzg0MWU3YTJkOWQxM2JkYjg2NDRjZDdmNWQ5MWQyNDFhMzY5ZTEyZGM2YzljMmJlNTBkMWVkMjk0ODRiZmY5OCI6IjkwNTRjZjkyMTZhZjY2YTc4OGQzYmY2NzU3Yjg5ODdlNDJkNGU0OWIzMjVlNzI4ZGM2NDVkNWUxMDcwNDgyNDUiOiJiNjBkODgwMzUzMWIyYjg1ODNkMTdiZGYzYWM3YzAxZjNjNjVjZjliMDY5ODYyYjJkMzliOTAyNGIzNGMxNzJiNzEyZGIwNzA0YWNiMDc4YTFhYjFhZWMwMzkwZGJhZWUyZGVjOWJlN2IyMzRlNjNkYTQ4MWZkNDY5YTkyYzc3YmM3YmIyY2ZjYTU4Njg1NTUyMGUwZjllOWQ0N2RjYjliZGYyYTJmZGZhOWYyYjQzNDJlZjBlYTU4MjYxNmI1NTQ3NzcxN2NmZDUxNmQ0NmQ2MzgzMjU3NzQzNjU2ZjdjZjhiMzg0MDJiYTc5NWE4YzlkMzVhNGFhODhiZWM2MjMzMTNkYWQ2ZWFkNjg5ZDE1MmI1NDA3NGYxODNiMmZlZTU1NmY1NTRkYjM0MzYyNmNlYTg1MzcxOGYxOGQzODZiYzhiZWJiMGMwN2IzYzVlOTZjZWIzOTFmZmNlZWNlODg4NjRkYmQzYmU4M2E2MTM1NjJjNWM0MTdhMjQ4MDdkNWY5MzMyOTc0ZjA0NWU3OWE5YWRlMzY5OTRhZjZjZjliYmVlYjcxZDAwMjVmY2I0YWQ1MGYxMjFjYmMyZGY3Y2QxMmZmNWE1MGNkZGZkOWE0YmJjNmQ5NDJkNzQzYzhiOGZiZWJlMDBlZWNjZWEzZDE0ZTA3ZmY4NDU0ZmE3MTVkYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiIwYmZkNzNhNTVjOTZlY2JiNjEwNGZjMWY5MWQ4NjAxZTdiNTdjZGY4NWQ2ZTZiNTM2MDkyMGI0ZTdkMWNkMDI2MjliYjFjNTVlNjM3ZmFlMTYwOGYzODlkMTc5ZjRmZDI2NTAyNTFhMzdhZDI3YzJiNTI2NGIxNjA1ZWQ1YTUxZGY5NDkwODZjMTBlY2UzMTI1NTcwMTczM2VlMWM4NTM5IjoiIjoiMTViMzgxNjM5MjI4NWZjNjY1NTcyYzQ4YTE2ODA2OGExMDk5NGNiZTRjZWFhMTk1NWYwNzA3NTAzOWM3M2I0YSI6IjM3NDI0MWNmMzA3M2UyZjgyOTU2Yzc2ODk3OTQ0YWU5YzQzOTA3ZmQ2NzgxMjAyYjEwZTk1M2MzYWFiMWNmYjEiOiI0ZDQzNDAzMWUyYTJiMWUxYWM1ZWM5ODA4MWJlNDZkMDVkZTFiNGQyNWUzYjRkYmM4ZjA0MGI2MjdmOGE2ZjdmIjoiZjQyODNhYmM3YzBmNDA0NzhiYmYwMjM0ZTJmNzY1NmI3YzZkMWQzNTZjMTJhM2UxZjc2NjY2YmFhMTllOGEwNWZjMTUzN2JkZDJmZTg1NWFkYmVjNGVkNGQyODdmYmY1NzE2MTVmNDE1ODY3YTJlMTg4YWI2MGIzMzkwMDUzYjI3YmQ4YmY0NzQ1ODg3YzkzZTY4ZDBkZmQwMTYwOGQ2YjMwNmFmMjczYjY2ZGI2NDAwZGFlYWU5NjI4ODJjNGM2YTE5YjM2M2YyNGQ0YmQ1NDNhOGJjYzc5MzVmMDc4NjAyY2VlMWNmM2M3YjMwMzQzYWUyYWUwZDVhYjExMTc2NGQ3MTkyMDVmYzMwMzI1YjJmOTM4YjRlYzRkMGYxZmVlMmY0MzFlNzBjYjFhYTFlN2Q4MjZkNTRiN2I0ZmM1MDU2MDQ1MzM0OWQyYzUyZjA5ZDZmNWVhYWM3MmI1YjljYTliMDAxNDJkNDVhYmM1NTBlZmYyNmYxZGZiODIyOWJmZDFlYjIxZTQ1NjcxNDVkN2NhNDdjODQwMDFhYmQ3ZjVmNWU3MTAxYjk5NDEzMDI5MjlhMzdmMjE1MDYyMGI4OTk5MDdmNzIxNmYzZTJiYjFmZDAyOGIxOTYwMzE2OTJiZGJjMGQyNzY5YzQ0OGIwMjQ4ODBhMTMxZWQ5ODYxMmYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZGE1NTg5ZTdmZWUwYTAyM2UwMWE1MGFhNTQ5ODdjNWI2ZDcwNTAzYjc4NDAzNzYyY2RiNTNjOWFlN2VjNjVmODUzZGYxNGNkN2UzMGJhMGViNzAzYjkxMjM4NzQ2OWJmN2YwMDBlNWRkNzhkZDgwNzIyZTE5NGE0NjE2YWEzNzNiZTJlMDkzZDIzZjJhNGU3MjI0Yjg0MWVmNTUwNzcyZCI6IiI6IjRjNzRhNDY1NWRjYmViZDEzMzFiODZiYzIyNGJlMzBlNmMzMzg2YmE4NDQ3MTZkMWE2OTM4NDQ3Y2E3YTMxN2QiOiI2Mzk3ZThmZTEzYjNlYmIwOGMwYjdjZTQ2MGI1YTE0OWIyMzQzM2UxMTBiODgxYTljMDk1Y2YyNGQyMzZjZWU5IjoiNmFiYTM1OWZhYWI0NzNkMGQ1MWYyMWJiZTdiMmZmZWYzYTAzYjY0MzY0Nzc3YTQ4ZjgwNjk4NjQzZDliMjUwNCI6IjQ5YzdlYThlMjc0MGZlZGFmZDhkMzE1NzFhMjQwZjE3NWFiNWViODNiMjEwNGY3MzhmM2JkY2U0MWMxNjBjMTllZGY3YjJlMmMwNjAzZDllN2Y0ZjI2ZjEzMmY2YjhiZDhjNjFmYjBlYjM5MWE1YjRiNmQyM2UzZGIyMDU4NGUwOGJlODc2NDg5ODRkMGI5ZjNiMDVjNzYzNjY1YjExMGQ1OGZiYThkM2I3YzYzNWE3OGVkOGY1NmNlMDU0MTRiOGJmNGUwOTg1ZTFmZjBiNGY1NWVkYThjZDUxNjgzNjA5OWRlZDJiNjA5MmM5YTFkNTMyYmJhMzYzZTA4MTFjZjUwN2EyMjE4OWNkM2QyMGFjNmU2NjM4MGZjOGRkZTMyZGNhNTRlYzc2MTMwY2JkYzBhYTcwYjViZjNiNTgyY2UxNDA1YzY5ZGMwZTI2ZjY1ZDkxNjQ0YzU1N2QxYjU1ZWY5Y2Q4OTMzNTVlNzgzNmVmY2Y1M2RhYzJkNDY4YzQ5MDllMTUzOGVjMTU1NWM5NGMwNGI2MjQ0ODA5MmY0NGU4MWJlN2MwOTg0YmVjMTNhNTNhOTUzZWZkYzE2ZDM0OTdiMWVmNWZjYTM5MjMxZmVmZjQ4NmM4NGZhNzc1NjQxOWJjOTA5Yzg3ODI1NTk5NTFkOTcxMTU3NDQxMDQ3YjgwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjhhMzZhZjY2M2RmY2JiZWNlOTY1M2JlNTFjOGRlZGQ3Y2ViMTI1ZDU5ZGJkMTQzYWI0YzM3ZjIxZDhjY2E0NjQ5MjBkZDE2MTI0NTgzNWVkODFmZjFlZjFkMDllMzY3ZWQ0MzExODkxMGMyYjYyZDRiYjk4MGQwZTQzMDViMDdlOGIzMjFjNWEwNGI0NmQ0YTdkZDQ2MTFhYTMyODU0M2IiOiIiOiI1OWM5NmQ2ZWM0ZTQ5YjgxODVmMjc1MDU3MDQ3MTUzZWY2MjY0NTYwODVkZDc3YTAxY2I4OWNkYTA2MGJjZjNhIjoiMTQ5MmRhZmY0OGQ4YzdjOWU5ZThmMzgxMzBiOGFiMmRlNmUwMmM2Y2RjY2MyNWZiY2Q5MmQ4YWZmMWZkYzY2YiI6ImQyZjQwZTdkYmRmYWNlMzIwODI1ZDBiNzY2ZDAzMTdmNDdjNzRmYjU1YTVhMzI1ZDY2YTU4MzRkYjcwZDVlY2EiOiI0MzVlZDgwM2NhZjNlNWM5NGJjZjZhYjYxOTY5YmNjNGU4M2YxY2Y3ZTczZTQ4MTQ5NGQ0OTRmYWE5ZTMzY2RkODkwZjExMmM4OWJkMjM1ZDZkMWRhY2JiY2I3M2ZiMWM5YTU0YTRiMjgyMDMyY2MwMTc4N2JmYTliZjg1NWVkZDkxMTgwNDMyYzI3ZDk4YTJmNzk4MzkzMzE0MGY2MzY4OGNhNTk1ZTdhOWZiZTM4ZDEyMjgwMDIzZDM4Mzg5MWYwZmI4YmEzZmIwN2Q4MzVhMGQ0OGYzZjkwODYwMDQwNzE4ZDM0MWZlNWRjYzEwMWI1MTI0MzA4MTU2MzU4OWIwMGEzZTdjMjA5NTExOGMxM2I4Nzg0YjM4N2MxZDYzNzY3YzNjNjU1MDI1MDIxYjBlYWFjODg2ZDIxZWI1ZmFhZTBlMzVmZDA3M2NmZWY0MzU0YzdiN2U0ZWExMzg2ZDg1NWU3MWJjZTAxYjMwMTUxNjI5YTcwMDliODUxZmJjNDA0NzMxODQxYmQyNGZhYzE1NWE5MTJkN2I3ZjdhNjAxYmY2NTU5ZTQzODM2N2ZkZDg5ODM3OWIyODY0YzU0OGJjOGUyYzA4ODM0ODYyNGUzM2M4Mjk5MGM3NGY5OTQwNTZkMjJhZGQxOGU2MTE2NjVmMWI0NTkxM2E2MmY5MDg0NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJkZGE2OWRkNWFmMDUyNTcwYTdjYmMyZmQzNzhlZWFlOTM2Y2QzMDFiMTk3ZDIzZGNmMjFjZTA2MTYxZjQxMTMyMDU2NmNmMWYyMzExMTFjMWVmODgzYTg4ZjM1NmQ5NGYyYmE3ZTQyZDg0NTc0ZjM5YmExOTQ2NDUwZmU3Mzk0ZTVmM2I5YTIxMDA1ZDc5N2RkMDNmMjdlMDQ3N2JhNzRhIjoiIjoiMGNjNzk2Y2VlZTc4ZGZkNjY3YzMwOTQ5OWRjNGNhMTAwM2IyZDkyMzAyNmM2NTgyNmYyODA5NDZlOWYzZjFmMCI6IjI0ODM2NDBhZDZiMjQyZTVjNjU3NmRmMThkYjEzN2EzY2YwZTRhM2ViNDRiZmRlYWRiOWJiNjUwZWM4MTYyMDAiOiJlZDk3OGMzZjUwYzNlYmJmNGI3MGE3NTc3MWE5NDBmMDNlYWY3YzQ2OGU5YzRlOWFmNWY4YmY5Zjk0N2E5MzUyIjoiOWJmNzg1YzRhMTAwNmRhMjFmNjZhZTMwOGU2ZjIzZGUyZDFiMDE1MjFjNDA0MDRkYTliNjA1ZTFmZjE1NzdjYTFkMTMwMGYwZTQ3ZTkyMmQwMjMzMWM3OWI3YzBiMWUwNjA5MjY1NjQ5NzllMGViZjc3ZWUzZTFmNTQ5MDc3NzBiYWE4MGVhOGRlZGI3YWVkMTk0OGRmNTUwYjZlZTk1ZjJmNzFhMjhlYzJlYjViYWE3NmVlYWYwMDYyZTc1NzUwMGVjMjU1MzY5YTlkYjc1YzI0MjkyNGQ2NGEzOTFhZjE1MzZjM2E5YTY5NTFhYTk5MWYwMmI3NDE1YTJjYTc3NTgyZThkMjViYmRkMDIzZTRkMGEwNTM3YzAwNzRmNWFiZTNhZDM0ZDI0ZjViOThhYWMyOWE2MmMxYzI2NDhlYjEyNGFmMThjNjE5ZGNkYTcwMWU3YTI3N2ZmMWUwMGE4YTI2NzM5MjQxOWRmYzFmZGRlNGVlODY1YzlmMzc0NGQ5MmZiODZiOGFhYTg3MmIwMTQyNzYyYmZjYjdmOWE0NWRjZGY1YmVlOTNiZDYzMWI3M2UzYWNmOWVkZmRlNzQ0ZTc0OTJiNzdmZTM4YWRiZTYzMWU3ZmZiMmQxNzA4ZjIxMzEzNjQ4M2NlNjg0NTM5ODQwOWI4NTUwZTc0NjdiNmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiMzQ2ZTI3YmFkMmIwYzAwMjkxNDhjNWRiNTQxOWExMjQ1ODNkMjAyMWZiNzQ2NzdiMzdiMTNlODY0M2VlN2FhOWU5YmM1MmY1YzI2ODlhZTJiYWNkYjdjOGM4ZDIyZjVhNGJiZDJmMGFkMzQ3OWRlY2YyZGZlMmU5MzEyZGJkNjgyZDk2ZTE5OWUwN2Y1ZmQ0ZDIyZGVlZGQ4M2M3NzY3MyI6IiI6IjY1MjYyZTFiZGE3MDE0ODY2Nzk0NzEzY2U2YmMxYWU0ZjBkY2U1MjNjODJjZTQzZTZlMGNmOWE2NDk4Mzk2NGYiOiJjNjhjNTRiZjJjYWQwMjdjZGEwOGEzMzgwZjNiZDUyNWUzNTRjNDI4OGE3YmVkYTFhN2VkOGQ2MjkzMWFhYzhhIjoiY2JkMDA0OWQ2NTQ2YmFmMGE4ZGYyZGU1ZjE1YjI5Yjc3YWQwN2Y1OWI0ZGZlNmE4NzJmMGJjMWNhZDcxNzcxYyI6ImI4YzM0NGE4MDA0MDcyZjc2NTgyZTQ5NGY3MGFkMGY3ZDIxZmRkMTNjY2NjMzg3NjIyZWYwNGNhMDNhMGExNGZhZGRiY2VjZjg4NjllMGYyM2I2ZjEzZmU1OGQ5ZDc2OWYzYWM5NmFiOWI5OTY3MTUwZmI4MWNiNWQ3NzNjYTQ0OTYwZTkyNjdlODU4ZWM5ZGYyMzIyOGZlMmRjMjM5Y2FhZmYwZjk0OGQxODkyNDhmNWMwNzVjMzI1MDI3MGFmNzAzMWRjMGFlYmIzMjdiMDA0ZDg0ZDBkZTY5OWY1YjAyZGExYWY0NDhkZjBkMTNhZTE5Zjc3NTg2ZGIyMmVkZTNmNmQzZDAzMmQxMGVmMmQ3ZTJlZmRkZTJjZTY2YThiZGMwNzEyNmNkNDkyNDFmYWZmMDk3ZDE0NjdkODYyZWZjMmEyZTE5OGU3NGIyZTMyOTNkNGE5OWJhYzc1ZTMyOGExZGVhMzQ3N2YzZjRjOTVlZGFjZGVlNDhiMTRkMjZiMDU0YjVhMjY4ZTI0MmEyOTA4NDQ5MTM1ODI1ZmFhN2I0ZmMwYzljODc3ZmZlN2JiOTBmYWE3YzNmMTM2YjJiNGM3OGZhZDlmNDRjODI5YmJmN2ViOGY3NDdkNTAxZTE1MGJlZGNkZjRjZGQ2ZmNjODZmYzQwOWEyMWU2ZTkwZTg2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjA5NTg3YWUwY2NmNWM1ODBiNDRlMzkwZTY4ZTZhMGE2ZGFmNDVlNzE2MmVhMDQxODEzNTgyODU5OTkxOGVjZWY5YWJkZWNiYTczZDhjNmQ1NmJkZmUwMDU0ODViZTNiMWZmMjg0YTg1YjEyN2IwMDE4NWYyZjkzNTM1NmMzZjg3ZDA3NjU5OWY2YjBmYjdmOTNhYmY0NWYwZDBiZmZiM2YiOiIiOiI0ZTcwM2Y1ZjU5Y2VjZDkyNmZjMGQ5NDEwMGQxYzU0ZmM4YjE5ZDE2NWJmZWYxNjQzN2Q3YmU5MjgwMmIzOGQ1IjoiNTljY2RhZmM3MmU1NzI3ZTMwM2QyMjg0YjgwZTkyMjRjOTVjZTVlZDBlZGNkODE2YzE4YTU1YWVmNjgxYjIwMyI6IjM2ZDcyNzUxZTRkNmE3YzZjYjJlYWQxMmVlZjE5MTI1NGRmNTM2MjJmNmMwZmQxZjMzMTg3ZjA5ZTg3ODgwZTkiOiJjMWZhMTU2NTU5MWExMjI1ZTBhNjFlMWNhZjBmYjZlNGMxNzc0MGMxYjEwODhmNDdiOTBkOTFhMGY5OTk3ODA2OGMxNjJmMTRjZjgyYTFjYTkzNmVjMzMxMmVjZGVjMmY0Yjc5NDQxMjk3MjI2NTdhZTIwMDU1YTBjMjkzYmI2Nzg3NzFiNDU3OTQwZGYyM2ZlZGFhNjllYjFjMWQ0ODdhZjdjNzc5MGI0MzU5YmZjODRmYzgzZTlmNjRiODFiNzhiNTYxN2Q4MDc0ZDhjN2ZiYjQ0M2QzYmM2NzFmOGQyYmI2MDBjM2ZmZjIyMzFlMGQzNjNiNDFmM2Y1NThlY2VjMDJiMGYxZDU5YTYzYjM5ZjViODJiNTliZjg4YTBmYzlhODM4YTgwMjg3NWU3YmJjMDZlY2QwMDI5YmQ2Mjc5NmUyMDQ3ZGY0OTEzOWJkNWMzNGVmNjdkYzkzMGIxODExNDI4YzRiNTQ3YTZmNjc0MDQwMTJhNWI5N2Y5M2IyODk1ZGMyYzIzODkwNzAyMjBhMDc4ZDJmY2Q4MjQ0YTI0MWNhYWE5OGE5YzBjN2FlZjYwZmM4NTZjNjFhM2I4YWFiNDZmZmQzZjBjZmQ3NjhkNmI0MWU5NzE0OTY5NTg3Y2YzNjNiM2ViZDYwYzhjMzMxNDM1ZTljZDc5NDMwNzY3ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiIxYWQwMzdkYWVhOGFlMmI5MTMxZjQ0OTBjY2I0NTNiNjcwNTk2OTc4ZTA5N2M3YjIzNDJjNWFkOGJkYTUzZGUxMGY2OTZlMDdiZjkxYmIwOTFjMjE4OThhMWY3MjhiZjU4NzMwODk4NDBiNWYwMjI0NDFiMzU1ZjhlNWNlZTc1OTE3NDAwYzVjYTU5N2Q2ZmRiOGY1Mjg3NGNiYTFmZmFlIjoiIjoiMjdiNDE3Nzk1N2ZiYjQwYmNjYjQ4MzJmZDk1YmU3NWVkOGRmMjMwN2JlM2NkZDY5MmU4ODc4YmFkMTRjYThjYiI6ImM3ZGQ4M2JjMmU5OWMyNDI4YmIyNDNjMzVlMjU0NGIxMDg1NzYyMGZjZGY4OTY0YjY1YjYyYzU4YjUwNjlhMTYiOiJiYTU3ZGUxNDU1YTI1YzY2ZGZlZDNmOGQyZTNlMTk4ZmM2ZWJmZDc5MjdmNTkwYzcwMmQzYTVhZTgxZTgwYWM5IjoiNzY5NTdiMTBmNjdhNjkwYzMzZDlhNTY1MjUxNGVmZjdiM2I1ZGRkMzVhY2Y0MjRkMDcwNjcyNWQzMzE0MTFmNmNhYmNjMzU4MTdlM2RkMWI1MTA1M2RlMzBjY2IwMjEwYmY0MjhjYWYwZmQ2ZTllNzk4ODcwZTJjYWMwMjQ2NDNmNWUxNWY2YzU1OTFlOTIxZTc1MzFlNjBjNDAyYmVjNzMyZTc5ZjU1ZjM1NGVlYjVjZWQ1ZmI3NDUxM2FjOGE0OGNkNmRkOTJhOGY3MmNlMjZkODdkZTI1ZmZlZmQ1MTE5NzRkNjI5ZDE3MDQ4ZjEwYTYzMTVkMWUwNjEwM2Y1OGY4ZDNhMDQzOTEyMzlkOGIxZTU4Y2JhYzNlYjdkOGVlNGZlOWRhYTE5NGNkZGZhZjg5MWEyMDlmN2UzZjcwM2E0YzE4ZmU0NzM0ZDUzMmQ5YjY0OGQ1NWQ5MmQ2Y2NmN2IxY2Q1ZGFhZDllZTQwMGE1MmJjNDY0ZWMzMDBlNGRjYWVlZWQ2ZWQ5ZDc0MWJlNGM1NDhlNDVhNmI5YzdmNzNmZTRiMzk0ZmYyODViNjI5ZmNhZjAzMWE5YWIzNTkzZDUzNTg0MjhkYjYwODUwZGUwYTJmZGJjNTFkNWM2M2Y5NTZkNmI2NjI1MjA3ZTJhMGU0MDE4OTFhOTJlZjk1M2EiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZmQyZDFiMWY0MTUwY2JiZjZlZTNkODY2N2U3ZjUwOGIzNDFiM2MyNTFjOGIwYWJmMzE3OGQyZmE1YTgwZWQxNzBhMTViZjU1YTY1NzBmOTc5MDgwZWFkMjE2ZWZmYTU4MDJiMmU3NDA0YWQ5M2M1Y2M0MWUxN2ViNzgxNjg4NTkzODg3MzhmYTkzNWQxY2Q2YjA2NDIyODY3YTMwYjU1MiI6IiI6Ijg5MzdjMzg5ZmMxYjkwNTY2MDg2MWE0MDYyYzRlNjU0MmNjMmM1ODcyODRhMjc5Y2JjODZjNDMyZWRmNTQxZjkiOiJjMWY3OWY4ODNmNTFlMWRlOTVhZmRlYTgzOTJlMTIxYTk1OTE2NzQwNjM0MTFiYTc5YjA5OGUwODY5ZGJjZTMzIjoiMGVmODQ3OTI0ZDJmZmZiYmRlYTRmMTJhY2Q0NDFlNTJhZDM5ZmYyOTFlODBjN2EyNDgwMmM0ZjAzZjA5YzhlOSI6IjI2YTE3YjU0NmQyZGMzYjE1MjhlZmI1M2IwYjBmODdlOTE3MTE2ZjAzNjU4ZmY2ZTZmYzE2NWZiODkxZjQ4M2FmOGVkZTdmZWY4YWU0NGFiOWFkMDc5NjFiNGEyMmY1MGZiZGYxNzE0NzIwNzA0ZGU0ZDgwZWRkMWIxZmJhYjQ0NDNlOTYxYTQ0MWNlNGU3OTU5YmFlNTU4ZTMzMzI2M2Y3OWRhZmY4ZDhmOWUzYWIwZDczZWRhOWY0ZDNlMzFkNTM1YzY3ZWRiYTNkNzg4ZWE3MjUwNTg0Njk0NjI4ZWViNTVkZjk3YjAxZjVjNzBiMDUxMzU2YjVkMDg5YjBhMzY4ZDk4YmJhYzM2YzY5MGUxODhlNThlZWZjOWI1ZTJiNTlmZGNhZDA1YjcxYmMxMTFiNzg2NTEyZDEzZmMwYWQ0YjlmNzk5Mjg3ZjAzMTk4YTUzYjhiZTRhMjE4M2U3MDk2YTBiOWZkZTcyOGRjNDA5NDE0NzUzMDc3ZTQzNmZlMWFmOTRhOTMyNDEwMjFkZTg3NzhkNjVhNDcwODEwMmE0OTg3NTQxNjE3MGIzMGE2ZmVhMjkwZDY4ODJjNDFlZDhjODM4Mzg4Y2JiN2ZlODgxYTQ3NzVjYjMyM2RlMzUzMDMyYzZlMjlhYTA1N2JmODE2MTllMTY3MDgyM2EwYWU0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImQ0ZjY0ZDljNjM3MDhmOTI5NGZlMWIxZGU4MmUxNjAyNzRkYzdlYTg1N2Y4YWI2ZjRlZDYyOWNjNWM0ZmVkOTRiZDJjYTE2NTcwMTM0ODEwZTcxYTNhN2EzOGZkZWU0ZTRhYWYzYWE4Mjg3MTE0MmVmZTZiN2Q3YTQ4ODhiNGYwYzc0NWJkZjY0OWY2Yzg0ZmU1YTY1MTlhY2U2MzM2YzMiOiIiOiJhOGFjZWZlMzNjN2Q3OTMzY2E2ZmMzYzg0OTViYjMxNWJkNGVkZDk0NjY4MDg0ZGUzYTRmNzQyYWM1Y2ExZmExIjoiMDk1MDA2ZjE1YWM2ZjhmNjQ5YWIyMTdkZmFkZDQyNmE2MGRkYWI3MGMxMTRjZjdkNTJmNWU2NzYyYTQ3ZTY3OSI6IjlmMDk1MDg0YjE4ZDZlZWMxOGJiNmJhN2ZmNmE4NzYzNDRmMGQ2ZDc5MTZjMTBiZDUxMGUyZTBkNTQ2YzRhM2UiOiIzZDNlMmQwODVhMjNmM2IwOGMwY2YxZTQ5MjUyODU4ODU1ZjI4YWZkYmZhZDNhNTg5ODNiMWQ4MTViMjY0M2E5NjhkZTg5MGFmOGYzZDgwNDk2OWQ3MTZkYmFhZjIwNjk4NWQ0MTNlMjUzNGVjNmYyYzllMTQ0YmUwY2YwOTc1OTBlM2RlOWQ2M2Q1YzUzMDY2OWQxYjI4N2Y5OWQ3NjllN2ZiNmUyYzcxOTczYzFlYTAyY2FmNDlkM2U0MDBiZDMxZDU3ODMxM2Q1YzczYmI1MjUzNWE4NmIyOGY0MjUyYzhmNmJiYzk3NzA1NTRlMjk0ZDAxODE5MDQ4ODFkNTIyNGNkMzBiYjk1ZDg1YTk1MjkxM2Y2M2UyYmNiMmM5ZTI0ZTlhOTk5YTZjNzQzMWM1ZTZlMmQ3NmU0ZWE2NDQ4MDgxOWVmOTVmNDBiNzJkYmEwZjg0MWNmZmM2N2JkZTNjOTczMmFhYzliYzRkZmRlNmU5Nzg5NDg3YWI5ZTJmYTg3MTAzMTU1NDExZWFiNGMyZTliNjQwYzVmZjQxNzMwNzQ2N2FiN2Q5YjYwMzZjOGU4MWE1MTY3MDUyNWYxY2EyMzRmYTRlYzIzYWJlNmRkZGVhYzBjMDI5YTRiNThkMmZjOGMyNGMzZjU3ZTJjMjA4MTEzN2M5MmZkYzM3M2QyMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZjMwNzIzYmM5M2EzZmFjNTQ2Mjg2YzJlYzhmYWY1NDQ5OGVlYTZmOGQ3MjNjMzJjN2I2NDgyNjVkYzc1ZDhkYzE0NjM0MjgxZjdhN2QxODcwMjA4YmFjNDg5NmUyMmZjNzJiZWMzNTNjZTNiYmU0ZmUyNjcyYzBiOWY2MjY2NDA4MDA4ZDBkMWZmZjZjOWM3OTdlOTNjY2RiYzcyZGQ5NSI6IiI6ImViYzJiNTcyZjM2NWE3MjY1MzFiM2RkZjczNDQ1OTBjYzVmNzc5NzcxMTM0ZWY3YmQ3YWVjNGFmOTViZmI1MzIiOiIwOTQxMzAzY2ZhYmEyMGY3YzdjNGVlNzQ1ZWM2NWJlM2M0ZjZkMjE3ZjhlNmM5YTFmNWU2ZGI5NDk0OTY0NWE1IjoiNjAzOWNjOTk5MjY4ZjFmZGQ1ZWUyOTc5ZTc2YjU4NGI4NTA2OWYxNDQ1MDc3MjNlMmE0N2UzYWYxZDhjMjM1NSI6ImViNzc5N2E0Njc0M2U1NTJlNjgyYzBjN2ZmMDJlMWEwNmQ1YWFjY2JkMWE1NDA3NWNiMWE5MzMyZTc2NTcwZDZhYTVkZDc0MjNkYWI1ZjEyYjFiYmZjYmE4YjYzOTZmMmJiYzVhMWJjNGM3ZjFmYzMwNmIzMjAzN2I1MDNhMWEyNmI1MDllN2M3MzZiMDM1MTA4ZjkwZTRiM2FlODgwYmNiMWVhZGE3MjY0NDExOWY5YWU5YTczZWFkYTIxZjlkZTFkMmIxMzU2YTkwZjgzYzZmZjk3OTc4YmRjZTA4YWE2NDEyNTM1YjQwMWRkYTk4YzRjZTcyNTM0ZjZlZDc1MzgzZDUxOTIyZTBhNDc2M2M1OTAzYmFhZjc1ZTViYWFhMzU1YjM0NDhlMTAxY2EzMjI5ZjVlZWNkMzQ2ZjQ1MGMyZjJiMTE1MDNiYmYyM2JmNWQ4Zjc5MzkyY2YxNDI1YWUxY2JjZGQ1YmNlNTNjYTdlZTBiNTk2NDdhMGE0YjhjYmFiZGUyOGE3MzY4ZmQ0Njk2NWVjMGY1NWM4Y2ZmMDM0YWIzYjczM2QxOWNlZWRmMmI4ZjM4ZTU0MWRhMmJiYjUxZTA0Y2M1NTA2ZDFlZjhhYjBlYzNiNDNjMzRkY2E3MjJlODMwZDc0NWNlNjMxNjUyOTc2ZGQ2ZmQ5YTZhYWRiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiIwNzBhNmRhN2Y0ZjU5ZGE5ZWNiYmEyZGFmNjkwZWU5YWQwYzljYWQzMzA2MDBiN2NlN2I5NWQ1YzEzMzZjOTZiNDdiY2JiZjhlYjRkODkxOGNlYmU4NjFlOTU5ZDY4ZDdlNWZhN2NlMzRhZGFhMzhkZTNlMzZmNDI1ODMyZTZiYjBhMjNmZTIxZDEwYzc4ODAwNTA2ZDkwNTQ3NjZjZTUyIjoiIjoiM2I0ZDA1OTYzYzJmYjgzMTUzNzFjMmYzNWYzNzViNmUzOWZmZWM2NjczMDNjZDk2NjQyZmRmNmZmNWY5OTEwMiI6IjQxODljYzkzYzAyMWJjMmY5NThkYWE3MzdhMTdmNzhjMDNjYTA5YTFhNGE3M2ZhYThhNzRmM2YxMDliZjI4MDAiOiI1ZGEyZDNhNjlmMTBjZjlhMmY1Mjc2ZDNkNTRiYmJhNGVjMDI4MjZmNmVlMDQ0MDYwOGZmNGZkNmIxZWM5NjJjIjoiZjhkNmQ1ZDdhZWU1NzFhOWQ3NTkyM2M2YTJlZDczZjNlNzc5MDFjYjAyNWQzZTYwOWM3Y2JmODNiNjQ3ODg5OWI0MTA3NTZmNjY1NDZiYmYzOGFjMzMwOWYwMmZjODcwZTA1Njc3MmU1NmFiZTc2YTk5YTE0N2QxMmYxZmM2MGVmNTBjZjg3YmFhZDIxZjVjY2RiNDNiYTQzZWYwZWQ3NzdiZTVkZTMwY2EzMTJmODE0ZmYwNWViYjkzYmQ1MjM3MTZiOGY4YWQwNDExYWE3MzJkMjExNjA0MGQ0NmNmZmQ5YmMyZTQ2MzY2NDQzM2VmMWY3ZmM1NjEwNWIzOTM5MTUxMDZkOGFlODYwYWVhYWZhOTM0OTc1ZDQ0NmVmOTVkNjk3ZTE3NjEwMTdiZjEwMmU5ZTE3NWM3ZDZkM2EzYWVlMGNlODc3ZjFjZTc3MDlkMDhjMmM4NGEzNGQ4NWQxN2Y3N2UwNmE1ZjcyMjY5YzlmMThmOTRhOWQ5ZTYzNWJhMWExYjYyY2E1NDk5ZTcxNzQyM2FlNGJhYjQ3N2ViYTQ4MTQzMDI4ZWE3ODE4ZDY0NTYzYmRlYTNmZGU1ODdkYWVmZDU5ZmU3MDU5ZjRmNmRiMTZhNjE4Mzc4NzY5NDZlZWJjZDg0NmZiNWFjZjA3NTA3YzM4NDEwZTJhYzNmMjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjA5Yjc1Mjg0YjczOGQ2MDBkY2QzMzIyYjkxZDM4MGRiNDVkM2VmZGYyZGM4ZTlmZWM2NGNmMDdkN2E2MDY1MzFhYjQxZjA1ZDg1ZTNlZWQ1ZjYyZDU1YzUxMzJjNzVmMTUxNDM3ZDRmOTNkY2I0MTE0NWIyZjk1MTI1ZDFkYWE3ZGQxZjc1ZGFkNmRjMzJlOWU0MmEyMWRmYWYzNTcyNmIiOiIiOiI3ZWJmZmEwNGY3ZjBjOTM5ZTFiZmI0Yzg2ODZlYmU0ZmZkN2ExZWMzZmI0YWExMTQ5NDZhNjY1MGYyYjQ0OWVhIjoiOGQ5Y2NmMzUyNmI2NTVjYjkyM2FlM2UxNDE2ZTg0YWY1ZTQ1OGEyYWU0YmQ1NWFhOThlOTAwMzUzZjhiY2U2NSI6ImQ3OGVkZjJmNzIxMWY0OWI3MGRiNzc4YjBmYjBlYWEyMTc4NjBmOTE5N2FkMTI0MmNkYTI2NGMzZmZhM2UyZGIiOiIxZjgwMmQwYTk1MjYwMTdhNTZjNDNlYmViNzgyYzE5MTQzNTcxZjk3OWIxNDFiNjQ0NjEyZjAzNjRjYjU1MzFmOGZjZDUyNzU3OGNlZjg5MjYzYzZmYzVhYjI2YmFmMTM2NDE4ZmUyMDNkZmUzMTEzMTI0MzYzYzc2ODgxMmQzZTYwYTY2YjE0ZmUxM2M0Mzg5MWUwNzU2ZmRhYjZmOGRkMmEyOGNmOWE2MzQxYjdiMzlkOTk2MzUzY2Y0MzU3MjZiMmEwMjU2MGUwYjVmODAzNWMyYTUwYjEwZGU0MWZmZTM4OWYwYjBlNDc4ZDc4M2ZlOGRhOGQ3MjlmMWE3YjQxZTA5ZDNlM2NjNWY5M2NlMjRhZDc2YjU2NTBhZTYxNzAxMDM1ZDJhYmZjMDViZGVkNjFhZmIzNmRmZDkxMGJlNDdjODc4OGFmMWY3NGNkMTAxNzQ2MjA3NzIyZWUyNzYxZTU0NzQyZDhmMjE4ODQ3OTRmYTliMDcxMjY0NWZkZDk2MmNhNWNmMmQzMDcwZjRhMmMxZGI2ZjRjMWFhZGJjZDQxNTQ4NjczNWVhMWJmNjg5NDE0NmUwOWM2Y2JkYWIzNmQyODJlMjBjZTBlODQwODcxYTBiNDM1YzNlODAwYmFkNjczNzU0Y2FlNTBhYjRlNzg1NWUyNjhkOWJjY2JjYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiNzczYTEyMzE4MjY1YzJkZTRkNmE4MGNlOTM2ZDRjOGExM2Q4MWI2NDZmYjE5N2Q3YWRlOGQ4ZGNhMzg5ODhlNmJmNGZlMjVkMzJjMTM3ZmY1MGY1ZTIwZTk4N2NhOGM1YzdjYTRjMmJmYzlmNjhjMWE3OWU4YTBmOWJmMmExZGNlMGMwOWRlZTQxMzRiMzlmMWU1MWYwYmMxMDM1OWZjYSI6IiI6IjRkOTk1ZDlhZGRiODE2MTIyYjcwMjI2YTA2OGM0NTdlZDQ2MzVlN2FjOWNlNDFmMTU5NGZmODQxNjBjMWMwNmQiOiJmMDY4NDk3ZDI2OTY2ZGZkZDU3ZDVhOGVhMWEwNWMxZGIyYWMyZDcyMjQ4ZGQ1OWQxN2JjYTljNmZmZjI4ODE3IjoiNjQxZDU0ODJmYWQ3ODA5MzIxMGY3ZTU0MmY0NWE4ZDE3ZmRjODU2YmU1ODYwYzQ1NDY1YjA3NzViYzQ1ZWQ3YSI6IjRkNDdmYTA2YWU1NGY2MDEwMmJkMjQyMzA5ZDUzNjZhOTUzZTcyYTI2MjJkMDI1ZjliYWJmNmY2MzQzNDI5ZTQxNTg2OTFiYmUzNjI5ZTcwMWYwN2E0OGVkMjM5ZTczNGE3OGE0MDA0NjMxMzljYmZlYjQ1ZDY1MTViYjY5MGYxMjExZWUwM2U5MDhjYzQ0NmFiY2ZlZDI5Yjk1NWI5MmU3ZjljM2FhZTE0OTE5NWUxNzRkMzRmMTBlMzAzMzNmY2U5OWNmMzYyYzVhNDJhNzllYzkwN2Q5MGZiNTgwNmMxZDA5Yzk2OTBkNGFlZjA2MGYwZmQxYjBiMTg3N2NjZmMzNzdkZDY3NTc3OGFkYWU0MGU4NzU4OGU1MDgwZDNjZjNlYjFmNzEwZjAxOTYxMTI2N2IyMjQ5MDA3YTAxYjNlNjk5OWEzYmFiMjk0NzY2YzkzM2IwOTUzN2U5OWVmNzI1MWM1ODg3MjhlZTFiZjhjNjRmZmM2NGRlNmE3MGE1MjFlYjc0NWI0Y2E2MzA3YmQyNGNlNTY2MWRlZjFkNzM3NGFmYjFjNDRhOTY0ZjE0ZWRlYjFmZTQ1NzQ2NWMwYjQ1ZDYyYTMzYzVjNWJkMTYyOGQ1MjhiMjAxNTRkNzNhOTQ2YzQ0MzYzYWFhZjIwZGQ0MTI0NGZiYzgxZGQwNDc1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJlYWRiMzMyMjk3OTMwODA3NWQ0YmFmYjY5Y2FmYzZkZmY1ZDU1Yjk3YzRhNzNkZDk5NDNhMGE5ZTRhYzAxYjc4Y2VkNWFiOTE1MDhiOTcxOGY2ZGU5ZGE0N2ZkN2JkNTQ3OTdjZDVhNWY2MzY1YzI4YjFhNTZjZDVkNzQ3MjFhZmM0NDI0YTdjYTUzZWQ4ZTk3YTJjMTVhNzI3YTY4MmU2IjoiIjoiOGNlZDg2MGQ3NDA0MGRjZWVkYzBmZDBmM2JkMzZlY2FmMzZmOTFlNGM1NjM3MmVkMWE1NGQyNWQ2NTE4MGQ0MiI6ImExOTk4MGExYzg2ZTllZTRkYjQxZjY0NjcxNDRiMGRmZjRjMDY5MjE0MTkxNmQ0NmJkYjdjMmFiNzk5OTIxMTYiOiIxY2RlZTM2NmU3YzNlN2U4NTNjYWFiYzQzMjBjYTJiNjM2MTZhZTg2MzQzZmM1ZWMyYTIxYjZjMjRjMDRlYzM5IjoiODQ0MzJjM2YwMGFkMjNiZjFiYTRiNDY0Y2VlZWQ4ZGEwNzYwMzE5MTQxYzIxNGQ2YzMxMzQ0ZmVhZDExMDExY2ExYjEwZjE5ZGU1YTM1MTRjOGRmMGI2OWZiODVlODcwNmRiMjcyZDBlMWU2YmZkNTEyY2FkY2I0ZGY3ZmU3NDVhYWFhYThmZGQ2ZTE5NGMzOGIwNjNjMDMwZGUzZGE1M2FlNjU5NjgzNGI5OWE0NmFkMjA1NjkwNTExZTNhYTY5Y2Y1YmZkOWVkNzhkNmQzM2UzNTc1MjRkY2M5NDI3OGIxMjdlODllMTg5ZTUyZGIwMGI0MjY0OTlhMzg4MjQxZTk0NTVkZWVmZGRiY2QzOTc0MjM2YzY3YzYyMDdhNmY5YzRjNWQxNDAzYzAyYzgyODQ4OGU3MDVmYTRmODVmYTI3NzFhMWYzZGY3YjJkNWQ0YjFiZDI1Nzg4YjhlMjljNjc5MDQ0ZTU1N2FlNGNjNWRmYTg2NTU5YjZlYzNiNWEzMTRkNGRlOGFmZmQyZDU3NmMzY2IyNjA0MTM0MDNlM2VhNDM5ZWQ0ZGYzNTAxYWNiODVkYmE5ODMwNmNkNzA1NTAyN2M3YmMzMzk4Nzg5OThlMjNmNzA2ODBhODU1NDc5MDYwMTg2MzM1MjE3ZGJjYjIyOWNmYzU0YjY2MTMwYzMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiOTdhZWY5MzVlYTMzNzE3ZThlODY0NGJiOGM0Nzg5ZjM3NWM0OGE5NDVkZWQwODc3MTE0OWU4MjhhMjJkYzg2NjgyNTgwZjUxMDcwYmExZTk5MWQ5ODAzZjUxZmQ5YTZmNjNjZDkxYzFlYmIyY2FhMTVmMjgzN2RmOGYzNWNiYjZmZTk2ZGYyNjc0YTEzNjk5MGE1OTc2Y2JiYWI2M2JjMSI6IjIxMjMwMGY5Mzg5OWZmN2NiMTQ0ZjIwNDI2MDI4Yjk3NjM4MGEzNDgyNTNiY2MzZmY0MmI1MjhjZDE5NzI1NDkiOiIiOiIiOiIiOiIwZTg1MzNmNjRiNjBjMjNhMjY1NTgyNzAzN2RiMjE4YzJmZTljZTQzMGZhNGVkNmVkOWJlMzQ5YzRiZGM2ZjQwMDE4YjQyZjQ4NmZhMDQyODhiM2IwYzYyYTEyODEyZTc2ZTA4Yzc2MDYyYTUxMGNjNjA4NDFmMTY1ODY5ZWZhY2VlZjkwODA1YmRkZTJmZDY2YzM2YzM4YTJhYzljM2NiODZiZmQzMDQwNjU2OWUwYWZkMjQ1MTAyZjJlYTJkNDllNGVlNWY2OTE4NzIyN2EzZjBlZGZiYzEyNTljYjY1NjRhMmQ0ZTgyOWIzZmMzYjY5OTZlMzc1NDZmMWQ4YTE2ZmNkODIwMWQxYWQyODY2MWJiYjAwMTJkYWFkNTVkNTQwM2U4MzNkOGEwMDY4ZDIxNmM4NzliY2ViYzA1NGRmMGM5Y2JhMTRkYWQ0ODYzZWUxZjc1Yjc4YmM0ODg2NjJjYjBjOTFjYTRmZGZjZTdkZjU5MTZiNGU2MjU4MDkwMmM2MDFiZTcwNmRjYzc5MDM4NThlNmI5OTIwNzM1YmRhYTYzNWFkZDVjMDYwODBkODIyNjUzNDViNDkwMzdhMzJmY2YwYTdjOWVhNjA2OWUzMzY5ZjliNGFhNDU0OTNlZmQ3MzE4ZGEyYWU5YjRmYzMwMDQ5ODI0OGFmYWFkOGQ0OSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI1NDlhZGE4ZGU2Mzk4MmZjYmVjMWQyNzE2MmE1MTc2NGRiZDc3MGYxZGE0NmQ4Nzc1OWIyY2VkNTJkMGFiMmU4ZDFlOGIyODgzZmRlYjIyMTM4MGUxN2VhMzg3YjNhMDY1Y2Q2ZGJiNjcxZjFjYWViN2I1YTRiYWI1YjkwMTA4OGYwODFhZmNkZGU1ZWNlYTEwYWNkODEwNzM1Yjk1NTMyIjoiMGU3ZjA2NjRlZTk1ZTNkZTllZjRmOWQ4ZmFhZGEwODUxYmQxZGUzYTNhNzY3Zjg1YTc0YmEyNmY3ZmU4MjAxZCI6IiI6IiI6IiI6ImM4NzYwMDE4NTU0ODRiNzNkYzQ2YmFiZDU3MDAxMzk5MzQxMzIxNWY2NjE3Y2U3MWJlN2M3N2E0MTg0OTRmNzdhZGM1NmY1YzI2YjM5M2RlMzQwYTUxNGI0MGJmOWEwYTllMjYyOWI3NjhlZDMyOWNhMDgzZGQ0YWY1ZWNkNmY0NWY4NzhhNTVkNWIwMmZiOWJmM2ZlMDQzZWU5ZTcwNThhY2I4M2QzYWFmMzllYWQ3ZTExZDgyNzI1YmRmZjgyNzJkN2EyMmNkZDZlZmNmYmRkNjA0NTgyMzVlNTIzYmEwZWMxYjQ5MDk5NGZjMzk0MTIzZmRmNjVkNzJhZGEzOTIxNWVhNmM3ZjhiZDZjOGFhNGNlOTQ3OTg4NDQyYzY2Y2Y1M2YxOTZkYjQwMWUyNzUwOThkOTI2MGUyMTYyZjU3MjZmMGM3M2IyMDFiNjFmZTlmN2I1ODYwNTc3ODBhODc4NjFkMzFjYTViMjFiYTYyZWVjYTZmNTM4N2M1ZjQyMTQ3ZDU1YTYxZTFjN2QzOTM5OGE4MmViYmNiZjRmMTUzOTYyZjZhNmJiNTQ2MWQ1ODQ3NmI0ODExMDUxY2NhYmIwMGNkOWE3OGRlYmVkMzQ1YzdlODU0ZmEwNjRmOTkwYTZkMGRjODI3YzM5YzM4MjM3YmRjNWU5YjFiNDRiNmEzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImQzZjJhZjgzZWQxMDcxZTY4OTViMWQ1N2QwOTY5ZWM3ZmJhM2Q2MzE2ZGY1MDMxZTQ1MmMyNmRhYWJhYmRhYmI1ODEwNzg0NmEyYTY5MjFjZTM1MDI2MTRhZTZjYzk0YjlkMjQ2YThjZWVlY2U2YTljZWFkOTRjZDI5NzgzOGNhOTZiNzRhODhkY2JlMjQwMDBmOGViNzE5ZjkzOWEzYmMiOiIwZDQyMjMyODVlNTNjOWU3ZDc0M2RmYWZkMDhmYTc1YzgxNTgyZDBjNTA3YzM4Y2RhYTZmYTFiMzk4ZTM0MmU4IjoiIjoiIjoiIjoiOWI4MzAxOGZiNWE0YjJkMmI3NmNmNWU4MjU4ZTdkM2Y2OTQzYTQ5NGE5Y2Y3ZGZlMTZmOWM1MWJlYjZkOWI4NDljZGRhYmZkNTk3ZmJhNDJkNmZjYTQwOTZlNDU4YzhjMGUzNTNkYTRmZDZhZjkyOTc1ODNlOTdhOTEwYmNiZjEyNThhODNkYTQ2NWQzNGFkMTNlZWFjYzBlNTdmMTQ1YThjYmUwOWFkOTEyOTMwMmU2NGE0ZDZjYzkxNjZlMzU3NmQyNTZiN2IzYzY0NTQwMTAwZWE0YjBjNmY3ZjkyZmYxM2FmNzMyZjZmY2U2NTE2ZjJmZmVjY2FhYTBhZjkwNmQ0ZWZiOGI3NjI1Y2M5MWM1MzU4ZTVmZDI5MmRlMTU5ZGJhYzFjYzlmMGFmYmE2MmJhN2Q1NzMzNDkxNTM4ZDE0NDY3ZjlmMjQyZmE2NmU3OWI0NDRmMzhjYTlhNmU3NDcyZTQxY2JlOGE2Mzk2N2IyZTlhZDBkOGZhYjRkYzE3M2EzYmI0NWUzNjU0YWQ0OWQ4ZDhkNTM0NTE0NmIzM2ZjNTVjNTJlMjAxZmQ0MDRmN2JhNjRjMzMxZDkyYzMxMDlkZDhmZGI3MDExNmQwZTg0MzA0NzcyMjE3YWQ4ZmU2NWJiMDIxNWVjYTVjODQyY2IxMGQ1OTFjOWI4ODdmMGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiNDNkZTQyOGI5MGRkZjJkZGEzMjgwZmMzNjI4YzI4OWVhN2U2MjNiNjNhMGFkNWY1NjhjNDU5ZWI3ZDYyZjczOWMxMDYzMjdjMGYzYThmNTllNWJlZDY2MTIyNGU0MzM1OTRmNzhiMzYwNGIxMGZhMDQ4ZTA0MTgxZWVkODg1ZGI5NjY1YzRlYjkyZDBjYjgyOTY5YTFlNWRiZGYxMWZiZiI6ImU5Y2Y2NWMxYzFkOGQxZmIwN2EwYTY2ODIxYjgxMGZlODg5MzMzOTk0OWI1MDkwOWZiOWI3Mjg4M2E1MzBmZmQiOiIiOiIiOiIiOiIyNjk4YTI5MTI0YzZhYzQwZjI0MTY3NzhhNTRlYTA4MDAxNGEzMjU4MjExZDIxMzZjYzgyZTgzZTE5OTI0M2U3YjY0ODNmMzYzZmZiNjM3ZTNhNDk4ZWNkYTY5MjZlOTFjZmMxOWU2MWY2NmYzM2QzYzgzMGYyY2U5YTkzNzlmM2FiNWVhYjkwMDAxYTA2Yjc3MTNhNWFiNWM1ZWQ0NjFkMWM5OTgyNGUxYTUwNjQ4MmZjMDRiNmZmMDEyOTg0N2ZlODRiMGUzNmVjNzI4NGRjMDI4ZjJhZTMyNmYzOWU3YjJiMTdiNmNiYzIxYTI5ZjFmMGM4ZWEwNjliZTVhMmRlZmE1Nzk0ODgwZmIzN2VkMTI5ODQ5Y2I0ZTdiYzk5OGE4MGU2YmRiZjZlZTdkN2JkNzhlZGQ2YTdhZDQxNWU1NzFkYTQyNDgxZjAwYTg1N2M1NzMwOGNiN2UyNGVmYWYzOTkzNTg3ZDM5OTFhZTQxYWJhOTc0MzlmNWUwZmViNTI1MDAxM2Q4NDYxOWZhZGE5MTBlY2JjMTg2ZTk3NjAyNmIxNDUxYjYwMmQyMGU2MDY3OWU3OGM4OTQwYjNjODk0NjQ1NGNiMDQwOWE4M2MyYWE3ZTJkMWY5MmY1NDhmY2E4ZDA4OWUxNWM0N2EyYzgwM2U3ZTFlNzg0MjlmZDAxZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJhZjBhYmYzZDIyMWY0YWY0YTQ1NzFlYWUwNjI4N2M5OTRiZWVmZmNkOGY1ZGY1ZGE3MmVhYjAzY2YxMDhkNjdmNzFiOTFmZjJkNzA2OThhODU3OGQwNThjMTgxYmZlNzE1ZDI0NGY1MzIxNjYwZGNlYzAyNTg5N2Q5ZTliMDM3YmRiNDA2YmQ5N2ZhOWMzY2U1ZTZkMDFkMDg0MGNmYmZkIjoiN2VlMjk1Yzg0NDg4YzNmNWQzYjI3OTg3NzdmOTJhZmNmY2ZhYzE3NWE5MzdjYjUwNDQ0ODMxY2E2MGE1ODY1MCI6IiI6IiI6IiI6ImU1NzBhMzI4ZjRhYTcwNWY0MDYwZjlhNmZmMzhlMTYwMDdlNTk1MzNlMWQ5NGQwMzljMjc0ZDEwNWQ3YmM4YzJmZjc3OTIwNzQ4NTc5ZGU1YzMzYzE0NjVkNDQ0MTMzMmJhNTFkMzBiZDhlZWZhOTBhZThhNDIxY2E2NjI1NTE5NTdlMTg3NWQ2NTE1YWRiYTUwYTBkMjk3NjQwMjQ4ZTBhODNjMDMyYjUxNTUyMDIyMGVkODgwNzAxNjUwYzk3NzI3ZDZiNWU1Zjk5ODBmMGVhZmE0ZDcwOWJjYmNhNzZkMzFjMjkxNzUwZjUyYjc1YTE2NTAyM2FlNDBkZGY0YWQ2NmYzOTVkNGNmYjFmNWE1ODczNzQzMDMxZDJlYTJhMDkzYjJkYTRlYTE3NWJhZTQ1Y2RhYmUwMDY4NzUyNGEzODE0ZjE1M2M1MTRlMWMzZDUwYWJhYTk2MTU5NTE2YmRlNzM4NzhhMDIxYjJlOWI4ODljMTMwY2IzZDAxNjU2MGFhOWFjMWVmMmU0ZmVkYjY3YWJiZDJlZGNhYjNkMmQ3NGRlM2Y4ZTlmYjExMjA0NzM2ODc5MDJmYWJiNDZlYjE4M2Q3NGYyMmU1YjNiZmNiOWRjMWQxZWRkOTUzNjBlYmMxMzEwNjUxZWZiYWNkMGU2MDNiMzc4NDVmMmE5MDY4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjU0YzAxMjgxMTNhNGYzZTc2MzExNzM2YzgzNTgxZTZjM2ZhNDU2NTljMjBiYzYyMjEzMmNlNGY5ZGNjMzQ4ZTc2NTc1ZGE0YjAxNDJiZWRkYmRjZjUxOTA0ZDFmZWJiMjQ4YTExNjM3OGJjNjlhY2Y2ZDFiNGIyNWQ5NGU5ZDc2MTQ1ZmVhNzNmOGJlZTQ0ODk2NDQ4NmMzOWU4ODAzNGMiOiJiMTQ3MjUzYmMxZDI4ZTk4OGY5OWE1M2E3M2Y1Yjg2ODY4YjQzYzZjYTczZWM3ZDU1OWY0MGY1NzJmMmJiNzRlIjoiIjoiIjoiIjoiMjk2M2IyOTMyZTg2NjgwYmYwZWI2OTA3Nzc3ZTg4ZjZjYjUxYzM4YjM2Nzk0YTAyNTRlOTg0NDMxZWMxMjk1YWFhMjZmOTFkNWJiZDM4NzRjNzczMzQ2NmUwNGZhNDE4MGZkYjkyMmIxMDYwNDI4MGExZTM0YmE1MGI0ZjU4NjdhOWZkMDY5MDI4MzAzMzY0NTY2ZmZhNmY3NDEwYWUyMTk0ZWU1MWJjOTUxYjE5ZDdiZTFjY2UzNThlMDAyYTRiOTQwODVjYTM0Zjg0NWJjNzU5OGVkNTAzNmMyM2ExYTEwOTc4MDljNzQyMWZlMGI2YmQxMGU5MGQxZjhmZmQxY2RjZmFmMzc1NWJkZmRkZTY5NWIwMzIxNzM4NjFmZjNiYWVmN2ExOTRiNWU0NmMzYjBhMzg4OGY0ZTQ2OTZlZTVkZDI0MTRhMTBjMTZlYjM3MmY2N2E3NTM4NzgyZDYxYmUwZjc1NzQ2NDZjN2MwNWY2ZjNkODFlYWUxM2IyZjUzMjdiOGFiOTRkMmMyMTcyZWExNjhhMGYyYzZiNzk0OTRiNDk3ZGEzNzU2MDZjN2QwNGJjMmQ4ZDQxNjE4ZDkyNTE0MGI4MzViOTBlZTIyNGZmY2UwNDE2OTdhZjY2OWIwYTk0NGQzNDI1MjRmYjEzM2UxOTNhNTRmNGI1MjhmYmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiMjBmNDY4N2I3MTdhMzFmNWU4MThjODcyOTUyMzg1Y2Q5YWMyMTM3YWJkMmU0OWI5ODQ5ZjAxY2MyNTUxZGNkN2Y1M2RkZGIyNDQ5YzFhOWU3OTNmYjhhMDQ0N2IzMDNkZDZkYTYxMTA3NjhmNWQzMjc2NmUzZTNmMTcxMzA1ZmM2OGM0OTQ4ZGM2NzYyZDNjNGQyN2M2NmZkZjk2MmNlZiI6IjA1MTZkNjM3MDlkZWVlNzJjYzY3NTExOTFlYTA1ZDZhYWU3ZWYwMTZkZWUxYWQ2MjE1OWFmMTY3YTc4NWIzNTMiOiIiOiIiOiIiOiI4MmVmMzExMDIwMGY0ZjMyMjc2NGY5MWZlNWIxMTk0OTJiODYyN2VjZTIxMWU3OWUyZWQ2OTA0NGU2MTJmNjA1NTNlNWU1MGFiZGIxYTExNDRlNGE3YWZlMDUyNzZjODBiN2QxZTM5OTJiNjA5YzQ5NjZmNjFiZWIwMmZmOGVjODg5ZmY5NDg4OWI2OWU0ZTY1NDRiZTllYzc2MGIyNjBlZGU3ZTRiNWU5NmIzMzNmYzQ2MDM5MmVmYjE4MzNhNjQ2N2IxNzVhYTdkNjYwMmFiZTE3NWJhMTZkOTQxNTFmZWZhMGZkMTM5Njk2MGFhOGM3MmE2Yjc3OGYzZjA2NzRjODZjYmVkZmYyNTBiNWE2MDlkMzBlMGI0MGViZWFiMmE1MjRjZWVlN2FhODYxYjI3NGJjNTU1NDFkY2JjZTc3MzYxYWNiOGRkMzlmZGZjYWEwMjgyMDk1MDkzMjI0NWJkMzc5ODZkNWMxNDA3MDk4ZTEzYjU3OTM2NjZkMDc5OTY5YjA1NDU4OWU3MDcxMmQ1MGJlMDRiYmE0ODRjYjY1MWMwNzk3MWJlNzIyZTEzYjgyNjAwMzU4ZGVjODZjN2YwNGMwYzRlMjU2YmExMjU0MmY4MGFlN2RlNzQ1ZjUwYmZiMDdhYTI4ZTM4NTdiY2IxZjM3MWYwMWQ5M2IxMmEyYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJlZjQxMDY3YTdjYTliNjk0NjE1NTI0N2NlOGRiYjYxOTc5NWYwMjhkNjc4Y2NmOGY1ZjViNDBlMzNlOGNkMTU2MzRkYjhjOTE0MWJjMmNiMDU5MGE1NDVjY2QwMmNlZjZlMWU5NmZlYTE0ZmI4YTU1NDExZDllYmYwMzYzM2RhZTBhZDQ0OWEyMTIxZDFjNzhmYmMwZTljZDhhNzhhMzRiIjoiN2I5MGEyYmFhNGMxMzllMjljNDhkYjZjNWI1MWNjZjA4OGZkYTU0ZTQxODc2MTFkYWI0NDQwOWNlMWMzNmY0YiI6IiI6IiI6IiI6IjJhMTMxMjZlODk0NzI3OGNmY2UxMWNiMDJlYzMxYWNjY2VlNTMxOWQ0NzhhNDkzN2U4ZmI1ZTY0ODNmNTg3NGZiMjBhMTdlOWQ0NTk5ZDI1NmI0ZDg3MzE4ZmZmMzkzZjk5OWU3ZjNkODYxMmZjMWI2MDYzMTc1YTVkMDcwODA1ZDUzZjc1MDY2MzJmMDNkMzdhYTQzYjRlNzdlMzIzYWMwZDVjMjQxZDk1ODFkN2UxMTBmYWQyMWRlYzgzZDFkYzlkMTE5ZDFhMDY4NjYzNmFjZDA4NDZmNThiNDJiYzEyYTRlN2U5ZDVkZGJkYzA1MTUxNWU4NjM2ZmQzNDcwYTNiNGMyZWZhZjk3NzRkNzhmM2QzMjk5MWY5Y2E1MDU4NWY5MzlkMjFhMTVjNWNhZTZkZWZiMTcwMmY5YjYwNmViZmQ3MzA4ZTU1ZTY2OTAzMTBlMzVkYWRjNDhmOWFhODczZjE0MjM5N2YzNmRlOTBmY2ZjMWRkMGI4NzQ3NDk2NTQ4YjQ2ODg4OTlkZjRkOWQxMzg1NzI3NDc0MTI5MGEzOWM4NmQ1YjkyZDM3NWI3OWVmY2ViN2Y2Y2YyYWMwYzhjNDFlNmQzYzA1ZjdlOTgwNjI4ZjMzMGI1YWFkMTMyOGZiNGIwNjIxMjc4YjE5MDc1OGZhZmM5M2RhMzU5YTNiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjRkMWE3MmE3YTdlZmFiNjA5YzZlYTE2ZTRhMTE1MGE4YzFmOGJjZjE5ZWMzMjI1YWQyZWIxMGM3NjEyNjhkNmQyYzliMDlmOTgyNzEwNzY4YWFmZjlkNWUzMzM3YjAyODU5NmYzMTg0MmZkMjNlNzVhNjY4MDYzYmRiMDNjZjFkN2UxZmY0MTkyNTJkNDQzMzU3MTJmMTY3MjBhZmY1MmIiOiJlNWM5NzEyZWM1ODNiMmRiYmZlNzZkNWVlYTkwYjllM2I2ODE1YzJlMzg3ODIxOTI5ODNjNmEwMmVmZDkxYWZhIjoiIjoiIjoiIjoiZjRkOTk0NjYyYWNiMjY0NGUzODliNDFjNzExMjIwNTNiMmE5YmM2ODMwM2Y0Yzc3ODcwZTQyNmFjMzhjMWIyMGQxMmNiZDhhZGFmZmI2MTFlM2EzMzY1ZGVmYWQ4MmNjOGMyYTI3ZDQwZjU3ZTgwMzVlMTY0NzY0NDJjZTRjNGJlZWU5ZDgyMTJkMjMwZjc5NmZkOTJiMDJkNzk3NTc5MDEyMGJiZjdhNmFmODExNWMwNjQ1N2Q3NjdjNTU0M2E2YzE3NDJmZjc0NTk5OWY4ZTgxNWY1Y2FlZmM5MmI5NTQwYTZmZDE5YWU5NzNjNTJiMzIxZTdkNGQ3ZDliNmFiNDkwMGQxM2I3ZjYzM2E3YjhmMWFiZTNlMWEwNTQwYjU4MDNiODlkNzFiM2M0ZDNhNWRjN2M0YzA3NTFlMDg4ZjI3Yjc0ODQ0MGRmOWRmMTRmZTI1MDk2ZmRjYWZhMWMzZTE2ZDQ5MjM1ZGVmYmE4MmVkNmRkZDFmYzhhNWZlOWY1ZDM2MGJkNzJlMGQxOWIyMWNiZWNlMjk3MzcwMzc4MzJiOWVmMThiOTY1ODBiYTUwYzM0NDY5NWQ5M2QwN2IxMDVmMzljMTdjZDkxZWJjMjkxNjE4Yzg4NjJjZDQ3NDU5OTQ2ZjczNWZhN2ZjNzc4YjQ0ODliNTc0ZDZlNzdlZTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiNWM5ZjVkZTFlM2JiYjUxOTNiYmRhYmM2MjExZTc5N2RkODllYWMwOTI5OTVhNTUzOWVkZTVlZTNmNzY5YzRjM2UyMjFlNjVlZmQ2ZGFlYmFmMmI2OGU0MzUzYzIzZDA4YmJmZTI2YjY5YWJkOGRiZGE4ZTQxZjRmOTA1N2FkNzE0ODU0MWNjYTI4YWIwYzNlYTUxMmFhZGNjNjVlZWYyOCI6IjE3ZjcwM2M1NDQ5OWZlNTNlNjg4YzZkNDhiNGEwNjA0ZWQ5ZjZjNzFiMWNiNGZiOWNkZTM3ZWI4ZmQyYTJlZTAiOiIiOiIiOiIiOiIxMWM0MGYyMDkzMGE5YWUwODdkNWFlNGNkOTNjNmQ4ZGVmYzA3Mzg4OGY0ZjhlMTUzYjE2M2U3ZGVkMjVhMzMxM2E1NWIzNDFkNDAzMTVkNzg1MjdhZTg3YzkzMmM5MDcxYWQ2NDE2ODIzZDI2NmZlMjMwMDBlMWUzMzQ2M2QyZjY3YzczYzY4ODNhYTMwMWU1ZjEyODIwNjQwZmZiNTBiNjgwYzNhZGVkMWY2YjkzZDIxYzNjMWE5ZWEwMWVjYzk2NDJmMWU2NTM1NTFkNmU4ZmE4YWY2YThlZjYyNmRlZjY5YzY1NTcxZjRhMjZhN2Q4YjdiYWQxMjZkOTQ1OTYxNzk3YzgxNDdjM2VjYWQ0NjM3ZjkxNWY4YTNhNzNiM2ZmMjM1YWEzYzcxMjczZjBjYzBlMDIzZmEyNmI4YTU2N2RiNTZhNDU2ZDU4NTM2ODA3ODE3ZDVmOWIwNGZiYmI5OWRjYTE2MTY0NjUyNTI2YjRlODQ3ODFmMDhmMTUwMTM2NGExZTNiNzA5ODk0ZjAxMDY5MzUyM2ZhY2QwZWM5YzYxYzQxYWQ5ODQ3YTlhZTQ3ZjNiNWVlNTdjZGQ2M2FhMTc5Y2FmMWNjNDk1N2I1OTQ2MWFmZjAxZjA4MTgwYTUzMzM0ZWQ0MzY2OTc2ODhjNTU2MDhhMTJmZGRmNzIzOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiYzVkZTM1Y2E0ODQ4NjE1Njk3NjkzZDgzOTYxNmE0MjcyOTAwZGI1Yzg5NGJiMTNmYTNhNDNhZmI5ZTJhNzE0YzQ3YTYxODcxYmVkNDJjNmMyYTlkMTkwYjk0NmY3MjAxYjY3MTk5MWM0M2U1ZGE0MzI1NjY2YjE0MGJmOTZmMDU0OGE3MjIwZWRmMmRiZDliZjBiZGU3MTkwNjFjMTFlNiI6IjA2Nzg3ODlmOTU0ZWEzMTRkYWJmY2U0OGQwOTBiZjkzYWNhYTJmODlmN2UxYTkyZTZlZTBmN2FmYjE5Nzg4ZmQiOiIiOiIiOiIiOiI3ZDRmMjlmZTk0YmE4NzQ4ZDUzNGYzZmJmZGQ2ZGQ4Y2EwMGYzNjJlZWQ0YTg0YjJlYTRjMGVhODMyNjcyNDYzNDMyNzFiYzlkNDhkNmU1YzAyNjVkYTdjMTFlYTBhNDBiYThjZWY5ZWE3NmM2NDk0MjZkOTA4OWYwZmQ4MWI2OWEzMjhlYzUxMWNmOTZlN2NhNzllN2NmNTFiOWZjZTRhNjJhOGZkYzU2OGE0ZmYxOTYwNDU0MWJhMmVhNDI4ZWIyOGFlNDk2NDVkYzA0NTE3MDhmZDUzZWU3ZTZlNmNiOGVmNzYwNzc3N2Y5NTlhMWVmZGMxNzJjMTBlMjkwZjJmN2YzYjJjZWUyY2U1ZTlhODNjMzkyOGM1NWNlZTE4MGJmYTE4MzU5ZGZkOWNmYWQxMzc3Y2MwZmVkMzIxZWM5ZDEzZTRiYWJjMjNlNGVmYzg5NzU0NjQ4ZTljNmViZTdkN2Y2OWFjZGE4NWE1NjUwMWI4YWE4ODg3ZjliODA5YjI5YzdkM2IwMmE4YWZjOGMxZWE5YmRmMjYxNzliNDU0N2I0ODAxMDBjOWU2ZjdkMDVlZGQ2MjA1OTlkM2JhODVjOTY1NDlhMjBkZWM4MDg0ZGFlNGM5OGRjYTU1NGEyY2ZmMDk0YWZlZDk2NmExYjMxMDlkYmJkOGFjNWM1MjMwNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiY2Y3MmRjODcxNTQ1MDAzMzQ4Y2IyZTQ1OGM2ZjRmZDZkZjUyMjBjZTM4OWE3OTJmODU0NDk4Y2FiZmYxYjVjODhlMzczMmY2YWE5NWVhY2EyYjMxOGE0ZDI5ZDJkMzNmM2EyODljZWIxYmQ4NThlM2M4NmM3NDA0ODI1YzBjMGE4MTIwNjRhMDUzMjVlMDlkMzQ1NTNhNjkxYTYwMTg2NiI6ImQ4ZGYzMTdlNTA1YWYwMTZlODYyOTdmMDJmYmE5NDA1OWI0Y2QzMTUyOWQ4YzFlZTFiMzMxMDdkZjc1M2Q4OWQiOiIiOiIiOiIiOiIxODE4NTFlYjM4YTY3ZDk1NTJjODc5MDJkMjVjNjdhZmQzNzdhZWU1ODdkYTEyMzg2YTQ2MTQ4YzRjYWI0NGVkNWI2MTc3N2MyMjQ3ZDBkMzllMDk5MWZhNjQ2MjQ3NWRhOTc2M2QzMGYxYWRjOWExZDJmOTBlZTM3MzNjZjMzNTY0ODcwNmJjN2JhMDZjODYyZWM5OTY5YTBhZTM4YjdiMWUxNDgxN2UwZDFkZDA2YmJhNzdhNzM3MWY2MGUwODY3ZmQ3NzQ0YjBiNGI3ZTM2Y2MxZTI4MDIzNmZjYjUxOTNjNzNhMmQwMGNkMGMyNTZiNDRlYjY0OTdlY2Q2OWQxNjY5YWQzZWVjOGE0ZTRjOGI3MzBkODVlMTJkMWQ5YzQwMDcwZTY0NTAyMGQ3YWUyMzYwY2QwZDM5ZDU1OTcxM2I0ZjAxMGEzMThkZmE5MWU0NDU0OWZkODVlNWFlODdiZmYxNTQ3MzA1YmU1Yjc4OGI1NzUwZWJhZjExYTYwYjBjZTZkMjZkZDY5ZDIxOWFlZjFhOWEwMzhkZGFlZTBlODEzNWE0NDI4MDYyODM3YWY1ZTBhYTFiZTgyMWFmMDI0NmM2MDc2YmE5YWRhNGUwYWE3Zjc0MjAyZTEwODAyODc5MTQyY2QxMDljZDI3YTI5MmQwNGU2YzUzZTMzZGIwZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiYzg5ZGMxNTQ2N2FlMDlkNWM1MTRhMDk0MWYzOTQ1YjFmNGExNjcwYTRkZjk5MTBkMTRjNjhhYTZkM2MzNmU4ZjViYWUwYWJhZWZkOGZlNTMwMGI1NmE3YmMzODA4M2I1NTYwMjAyNWMyMjFlMWYwZDE2NzFmMmFlOTJiYjBjODZmZGU1NzFjY2ZlOGI4YjViZThhOTRmM2YxZDAyN2VlMiI6IjgxMDlkZGIyOWQ4Mzk1ZTkzOGFhMjEwODUyZGE2YmYxZjFhM2QwMGJlOWRmNzRiMzcyZTA4MWQ1Mzg5ODMxNzQiOiIiOiIiOiIiOiJlMWM1ZDJiNGVmMjliMmJmYTQ5ODU0MWJlMDg3ZjIxMDc1YjBiNzQ0OWFjN2ZkMjM0ZDhlNmFmNDU2ODA5MjBiYmUxZGFlMzU4NTBjZjI3NDY5MjA5MTYyZDQxNzVlYzQyYzNkNWNkNmI3OTY1Zjk1OTQ4ZDljNDllZWEyZGI5ZGNhODNkMWJkOGJiNDkwOTNlYTBhZjEyNDk3YmRkZDhjYWRhMjBiZGM5NGE0NTM3OTI4MDBjYzY2ZDAxY2RmNWUwYWZkZmJkZWYzY2VhZDI5MWU1Yjg4YjExNmZiNDdiODJiNGIxOGQ2ZmIzNjNkNzMzNzE4NDk2ZWEyMGNhMjYxNGNhZWQ2MWQ4MjNjYTk5MjNmY2QyZjU3MGE5YzAzODI3MTg3YjBjZmVkMTliY2QyYzJlODdmNTg1MDhkYThlMTA5NmViOWViNGMyYmEyMjNjZGVkNTA2NGE2YTliNWVlZDhjZWY2ZmFiZTNhYWFjYjg4YjU4ZmFiNTcwYTU2ZTgwY2FkZTFiZThjODJmM2I2OTE4YTdlNTc0YzkxZGM0ZmRkYWM0OTdmMWNmMjZhODAxZDZjZjI0Y2U0OWVkNWU4YmFmYmVlMDllY2ViMzllMWY4MTgyMWVmNTQ3N2ZhMDM5NDk5MmM4NDhmZDJjZWRkOGY4NmM0YzRhMzk2ZWIzZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiMWExMDBlYzBkYTk1NDQzMjYyODZiMzg3MDU1MjNhYzk3MGI4OTZlZjZlNjMwNmIyMTI0ZTI4M2E4ODUxZTQ2ZDNhNGIyYmM2YTgxNTJlYzliMGY4OGQwZTJiZDE1MjhiMTNlYTMwN2EzMzg0YzEwZDFmZWFkNjBiOTBiZjI1YzMwNWE5MTU1OGMxNTM3ZTJhN2FjNzRhODUyNDAyMDhmNCI6IjAwNTYxMmQ4N2I2ZGYwMjA0YzNkODc5YjVjYTMwYmZjNDlkZjRlMTg5Mjg1MzA3ZTI5MjZiMzY3ZWJhYzMwZmYiOiIiOiIiOiIiOiIwMWY1NmMzYTMyNWEzOWEyYmM4NWU2ZTA3N2I3YTI4NjQ5MjFhNGIyMjNjN2ZlOTk4YWUyNTVkNzI0YTc1OWE2Njk3MTA4NDA0N2I0NGZjMWI4YWQwMTNlOTc2YWI4YjI1NTkzMDMzN2VkYTg3NjEyMzY0ZDYwNWYyNDEwOTUyMDBmOGE4NTEzYTYxMmJkODQ3YWVhMTE2YjczMDc4MzQ5YjdjZjYwY2QyNTg4YThmNzQzMTY3MWMzYjNjNmFiMmU0ZGJhOTc5NmIxZGRlYjJlMWVkZDRjYjNjNGRkNjdjZjcyMjY3OWNmNjRjNWIyMGM2NGUyOGJlMWFjODdmOGNkOWYxN2I1OWVkNjk2ZjYxYTRhNDcyZmRmMzdhYTkwYTJmMTZlZGQzZDU0YzVhYmU3ZGNiMGU5NjRiYmZiYzExM2U2NmIxODg3ZTBkYWEyMTUxNjM1YjgwM2MwMzQwYmE1NWUzZTU4MTdjZGUyNjYyYWQ0NTEzM2MyNzc1MDI0MDBiNzgyNzI3ODZjN2FhNDBjNTQyMTlhMDZiNWEzMmUwODhiYWYwNjEzZmM1MzVkYmVmNjYyNDFiZWZhMDk3MjJmMzczMGJjODVjMDQzNGM3MzNhYjE3ZGNjN2M0NzNkOGI5ZjMxNjUxOTIxNDA3ZDg1MzY5YjZmNmZiNjA5ZDUzZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiNDdjNDJkZjYyYjRkZDU3MGVmZDNjMjcyMmFkMzlhMmRmNWY5NjlhMTNmNjQ1ZmQyN2I1MjkwODc3YmE3MDkxNmM1OTE5MzRkNGY2NjAwMGViZjhjNTA4ZmFmYzQ0Zjc1ZDE2YTJjNzJjNjM1ODBiOWJjZjE1Njg2MjIxNDUzM2E0N2IxNjg2Yzg3MWEwMTY1NjA0ZmRkMDBhNDEyYTQ4NCI6Ijk0ODIyOTAzY2I1YzIwMDNjMzFjNmQwNzJhYjBkZGE0MzVhZGQwZGU3ZDhmOWQ1ZjA4YjVjYmE0MTBkODg4ZmQiOiIiOiIiOiIiOiJmNzhlNjFiNDQzYjVhOTdiN2U0OTNhOGNlMzVhNDM1NDUyOTBkZDMzZDE1YmE0YmYwZmY3OGYzNGEyNWM0NmM0ZmY0Y2Q0ODU5NjRjYzk2ZTkwZmU4NDdkOWZjOWU0MmQ5NmU0ZjVhYWNjZjk3NmE4NGUzZTEyMTAwYzI4YjBmN2FkZGIxYzc2Zjg5NjYzZTExODkwZjA5ZTRiZWVmZTkyOGExZTBiMzA0ZjFkOWRkMDQxNGNkMTE1YTAxYjY0MWZkNjljNzA3MWYyY2E3YzdmMmU1MzU2MGY0ZTkxMDEwYmExMTk0ODE5NWJjNWRlYjU1NjY4NmZlYjBiYjkyZmU2MWIzMTcxZTYzOWVmNDc0MThmMDJiZTM3Nzk2ZWZkYjY5MjA5NTJmM2E4Yzc2NmI1MmZjY2ZhNzU3ZTkyM2UzODAyOGE4NGY5YmUxYjgwMmMxZmJiYmI0YWVmODI1ZjRjNWU0ZmMxYmY2ZTk2ZjMzYWI5MGVhNDg2NzEwNzE4YzllNGYzMjQ3YjJhNTVjY2VmNWE1ZDM0MmNhYzc1N2YwYjlmOTBiY2RjYzhjMmVjM2E0MzE0OWJiZDM5MjRjODVmMGI1YjdhZTQyMTUxZjRkZWQ4MjZlZTZkNDc4NDllZjRlOGFmNjRhZGY2ODYzOTgyNTAzYzIzYzRhMDUxNGNlMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImRhNzQwY2JjMzYwNTdhOGUyODJhZTcxN2ZlN2RmYmIyNDVlOWU1ZDQ5OTA4YTAxMTljNWRiY2YwYTFmMmQ1YWI0NjU2MWZmNjEyMjE3YmEzZmY5MWJhYTA2ZDRiNTQ0MDFkNjFkNGQ4YTQxYzMyNTRiOTIxMDRmZDU1NWFkYWUwNTY5ZDE4MzViYjUyNjU3ZWM3ZmJiYTBmZTAzNTc5YzUiOiJmYzIyNzI5MzUyM2VjYjViMWUyOGM4Nzg2MzYyNjYyN2Q5NThhY2M1NThhNjcyYjE0OGNlMTllMmFiZDJkZGU0IjoiYjllZDhlMzVhZDAxOGEzNzViNjExODljOGQzNjViMDA1MDdjYjFiNDUxMGQyMWNhYzIxMjM1NmI1YmJhYThiMiI6ImI3OTk4OTk4ZWFmOWU1ZDM0ZTY0ZmY3ZjAzZGU3NjViMzFmNDA3ODk5ZDIwNTM1NTczZTY3MGMxYjQwMmMyNmEiOiIyMDg5ZDQ5ZDYzZTBjNGRmNTg4NzlkMGNiMWJhOTk4ZTViM2QxYTc3ODZiNzg1ZTdjZjEzY2E1ZWE1ZTMzY2ZkIjoiNWI3MGYzZTRkYTk1MjY0MjMzZWZiYWIxNTViODI4ZDRlMjMxYjY3Y2M5Mjc1N2ZlY2E0MDdjYzk2MTVhNjYwODcxY2IwN2FkMWEyZTlhOTk0MTJmZWRhOGVlMzRkYzljNTdmYTA4ZDNmODIyNWIzMGQyOTg4N2QyMDkwN2QxMjMzMGZmZmQxNGQxNjk3YmEwNzU2ZDM3NDkxYjBhODgxNDEwNmU0NmM4Njc3ZDQ5ZDkxNTcxMDljNDAyYWQwYzI0N2EyZjUwY2Q1ZDk5ZTUzOGM4NTBiOTA2OTM3YTA1ZGJiODg4OGQ5ODRiYzc3ZjZjYTAwYjBlM2JjOTdiMTZkNmQyNTgxNGE1NGFhMTIxNDNhZmRkZDhiMjI2MzY5MDU2NWQ1NDVmNDEzN2U1OTNiYjNjYTg4YTM3YjBhYWRmNzk3MjZiOTVjNjE5MDYyNTdlNmRjNDdhY2Q1YjZiN2U0YjUzNDI0M2IxM2MxNmFkNWEwYTExNjNjMDA5OWZjZTQzZjQyOGNkMjdjM2U2NDYzY2Y1ZTlhOTYyMWY0YjNkMGIzZDQ2NTQzMTZmNDcwNzY3NWRmMzkyNzhkNTc4MzgyMzA0OTQ3N2RjY2U4YzU3ZmRiZDU3NjcxMWM5MTMwMWU5YmQ2YmIwZDNlNzJkYzQ2ZDQ4MGVkOGY2MWZkNjM4MTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJjMmZmOTExYjRjOTM4NDZkMDdlMGQwMGVlZWFkMzQyMzg0NWM3MjE1YzhiNWZlMzE1YWE2Mzg3NDVlNjNjYTI2ZjEwNjIzMjEzMTgwODdiZjA0NTkwM2NkNGY1Y2M5ZTYxYTMxOGMyODYxYzZhOTM5NDhkNzc5YWI0NWYxNGQ0NTFiY2VmMmQ0M2E1YWM3NTI5OTViYzBiMzY1YmMzZmJjIjoiYjYyZjhlZDI4YTcyYzI4ZDgwYjQxZTAxNmY1NTliYmRhMGEyYTQ0N2Y4ZTE0NmViOTNhNTA5YjMwMmUwM2M0MiI6Ijc3YWExZmY3N2JmMDM3YWUyNmU2MGQ0MTJmMzM0MTcxNWFmY2MxZmNkM2JmOTcxYTQ4MWExNWQ0NWM3OTQzMzEiOiI1NWNhODNkZmYwNzVmNGRlNTc1ODhkY2VjOWJjZjBmZDFmYTI2N2JjMjgwZDNjNDhmMWYxZjc0OWUxOTk3Y2MyIjoiZTQyZTRhZWNhNjcxNjE4MWM3MWViZDQ2MjA4MjMwOTg2OGY2ZmFhZmI1ZDljODIzNTdjNzg1MjgzZjZkNTI4NSI6IjM4NDM4M2M0MWI0ZGYyMDVkMTlmZTY4ZTU2M2RiZmNkMmY2ZWRiZDE3NjU3NDI0OGYzZDFlZTQ0MTQzYjcwYWE1ZGVhNjk1Yjg3YmI2YzgyMzc4OTUzYTcxNDA4NGViYjU2MTlhY2E3ZDYzZTBkZmJmZmMyNTNhMzM2ZWRmODBhY2JkNTg0Y2QzZjkxNmQ2MTI2OTY4ZDU2NGMxZGFiZjdiMzQ3OWE2MmU3ZGZjZTU2MGI4MGE1MTA0Mzg5YmNkNzcxZTIwMTM4ZGFkNGM1OWYyOTBhNDUyNWIwMGY2Nzk4ZmIyYTNjOGY0NDYwNWEyNDc2NTNkMjRjNzcyZDIwN2YwY2NkYzE5YTA3MDM3NDI5YzdlNzk3NzFjNmE2YjRjYTIxOWExZjhlZDliYmFkOWM0Y2IyNzQxNWQxOGI3Mjc4NTUyZTUwZWM2ZTI1NjE3Y2VmYTczMjRhZDc4NmFhZWNhODExYzNhYWEzNWFlMDBkMmYyMTUyZmI2ZDk4ZGNhODJlYmU1NzliZWRiYjUwYTQwZTYyYWY5ZTIyOWRiZjliOWIyYmM2NTMyYjVkNzhlNjMzM2NmZWIxYWQwMWUxOTI0OTExOTNjOTQ1OWI3OGQ0ZTljNmU4ZWZlNjljZjBjNzAyMjk4ZTMyNWYxMjkwMjcxNDVhZjkyMTcwYjg0M2E1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMjU2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZTFhMzMzZmZlNGJjZTdiOWY2YmJjOGRhZDg3ODdhODJhZDY2Y2E5YjI1YTY0ZjA0YjE2NmZhY2U5NDVjMjQ5YjVmNDVjZGQzMThjMDU4OGM3Y2JjZDE0ODQ2NTIzOTQzYTU5MTE5NjgzNjI4MDIwZTkwMWEwYTdmZWZjMjE2MjU4NjRlY2IxZDc2ZWMxMTlhMTA4MjFiNDlhMzQzMTM0OCI6ImNlMTQ2NjA2M2RlMjIxYzRmYTFjYzMwODQ0MmRiNDc2YWNmZDhmZjM0YjJhMGRiYmJlMGVjZWVhZmYyMTAyOTMiOiJkNDgxZTAyMmE4MGYzZTYwNjg3YmYxNTM1MjRhMzNiZDZmZTQyYzU0YzM5YTM3N2E5ZmMyN2UwNDdkZjUzZjE0IjoiMjZhODhhY2Y2N2Q1ZWQwMDE4NGJhYWQ2NjRjNmIyZDRhOTFkNDM3YTEyMWMzY2FkOWVhYmYzZDdlNjc2YjBkMCI6IjUyNGU0ODk2YTIyYmVkYzYyODIwYzUwMGVkN2RhMmJiYmI0YzFlZjlmMDdiNWYzNzRkMGZiNGFlOWJiZTUwZTEiOiIzYzNjZmRlYmNhMDYwZjUzNGE5NTJlNDkzM2MyYzAwZjllZTBmY2I4MjVhNThhYmI2YWViYzk1MmUxNjA2NjhmNzExMDY4ODgxYmE4YTY4MTc1MDBiYmExYzI4ODY3Y2YyMWExMmE1MGU0Njc5MmFiZWI5ZjQxYmMwMjMyMmJjZTFlNzdkMjM2YjdhNDVhNzgwN2ZlMjJiOGVhOWUyODU5ZDJiMDE2NDc4M2QzNjRmNmFkODRmNGI5MzQxYzU3NmNkNmFiMmFiMjQ5MjQ2YmQ3NjkxMGUwYWJmMTE1ZTRjNTllMzcwNzRkZTVmNGRlZmQwM2ZhNjFjZTE3MzNlMzNjOTg4NDllYzI4Y2E2MWI4NDUwMzUyMThhZmE3ZWUyODY3YjMyYmExZWZjNTA5MDdkNzZjY2NhNWE3YmE2OWU5NzAwODc1YjIwMGNlYzVkMWZhZGFhYzc3YTA5NjBjNGViODk5YzA2MTM0Y2Q5Y2I2NjNjNjJiNjk0NDZhNDYwYmM5ZTNkZjdlYWYyYTM0ZGYwMGZjZDgzOGU4ODJmNWFmMWFhNzAxZDM1ZGFjZWMwY2FmYmU3NGNmNmRkZTc4OTNiODgwMDcxZDNmMWM5ZTUzYjIwNWJkZmRlOTgwNzk5OWU3MzQ2ODI2NGQ2MTcyYzk1MmE3ZjVmODhhODM2YjFjMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjczY2M4Y2FlYTdmMWYyMTI5YmQwMzViNzdiYmEyMzA5Y2EzYmVjNzNlOWY5OTNmYmNjZTdlM2YxNDg2NzBiY2E2NTZlM2YxN2U1YThjZTliZmUzNjY1ZjRiNmNhOGFjODExMWZlMDUxZWUwZTc2MGIyOTViNzM0NzBkYTI3MDgxZmYxN2JmY2Q2ZmY5MDg1YzVlMDY0YWI4NDQ5MjdmODQiOiJlZWYzMzhlYmRmNGQ5Mzk5NDQxNjU1MDkwMTM2YmVjYmNhZjI3N2U1YWM3MzQyNmY3OTU1MmIzZjI3ODE5YWI2IjoiMjExNGQzMjBiNjVhNTkwNmQwNGM1MTY2ZWU4MmU3MjdjYzUzZjBiYTMzZWQ1NGEzMjI5YWQ5NTkyOTk1Njk1ZCI6ImUzZmNlNDZjZDVjOTA5MzZmMjAyNTJlMDA2NWRlZTE5NDBjNzkwMjE5OGFlMTA1MDE3YThmNTBkMTQzYTUwZjYiOiI3YWQyN2VhOTRkZTZlYzdhZDdjYzE4OTUzODFjNzM1ZjAwN2Y2MDg3ZDY4OGEwNzBiNGNkZmFlY2RkMmEzMzQ1IjoiODU4MTA4ZmUxYWRmOTBmYjMyMzgzNjNjZTM1MzIzNjI2NzVhNDYyNTYzZTVjMTJkZjk3ZDA1NDI2N2RmMGIyMDVlZDM5NjBkODY4OTNjOTNkMmIxOTk3ZDk1YWJkOTE3OTUxMjI4OTI5N2IwMGNhY2QxYTUxMjAyOTIzYzQyMjQ1NjFlOTk4NmQwMjQyZjUwZWE0NjY3ZmQ2NDAyZTI5ZDE4YzE4NDAyOGNjNmM4NTgzNmIxNDU1ZTJkMmU5YjM4OWUwZDY1YmNkMmM3OGQ1ZTQyYWQ5ZTQ3NzA3YzlkZDQ2MTdlNmVmMmQ2NDU5MGQwZTBiZTVlNDQ2NWViNjExZDkxYjFhNDViY2ExYWYwNDYzMmZjOGRkMDQ1YTVmNWJhM2VjMWZjMDllM2FhYTFkMDM3MTkxODFlMTFjODBkY2QxYzRkMWFhYzNjYTY5ZDg5YjlkMmM2ZmY3NTc1ZDc4ODQzZmM0Njk1YzE5NTRmYzY2MzczMjQxOGJkZGJhNGIyMDQzOWRhMDNkMDQyOGZhMDQ3Zjk5YTM3ODQ0N2Y5ZTU2M2ZlNDA1ZmQ4ZjljMzJkNTgwYWE2ZGMxNTYwYjlkZjE1MzBmY2M3YjMzNzA3MmNiNjAwMDdiNGUyNzYyZGM2MWEwOGU2NTExZTdjOTNiOTEzMDNhYTNkNDZjMTQ0ODMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI1ZWVkZDAzOTc2NGU3YWY5NmMzZWY3ZDllMDk0ZTg2MWRjMDgzOWMyYTI2NDJjNDA4MmFmZDA5ZjI3NjFjMzkyYTRlYjhmYjYwN2NhN2M1ZDdkNGViOGU4NzFhYTk5NTAzN2EyOTdhZjA3YmEzNmE1OTU3MmUzOTc1MTM4ZmNmZWE2NjdlMDZkOWE0YmZkMmU5YzU3MGU2MWZiYzA5MDA2IjoiOTJhMjU4YzBjYTVhOWMwMzBkZDQ2OWNhNWQ4ODgzYWU1ZjNmZGFmN2Q4ZTBmYjIzODY3ZDE1MGYzZDI0YTBhOSI6Ijk1NGE5NDMxYTRmOWIzNGY2YzI4ZmM0MWJlMDVmZWZhMzQ0OWM4Y2UwMjY1YTE5YjhhNDIyOTM1NjkwYjUwYzciOiIxNzY1YzcwMWIyNzljZGUzOGI0NjliZjA5NDhmNTAwYjVhZmVhOGY3ZWFhYzNmMTAwYWU1ZjBiMTQ3MDA1ZWEyIjoiMWY2ZDM4MmI4YTg5NjdlZmI5ZmVmZmI4NTU3ZjFjZjQwZjRmNjViNWZhN2Q5ODQ2Y2FiMDYwMWY1MTUwNDMwYiI6ImJiYThmNDk2ZDQ3ZWM5N2Q5MDUzMzY1MDI3NTI0M2ZlNzY4NDRiNjA2ZDcxNGM4YmRmMzdkYjFlM2Y4MDQ1ZGU0NDQ4MmQ2NWE5OWI2ZDYwZWU0YWVjZGFmMGQyNjJkOTZjMDU4ZGJkNzA0ZWU5NmU0YWU1MmJkM2VhNTZlOTA2MmI5M2UyYjA0NDEyNGI3ZTkzMDRkZmEyMzdlNjIzZDdlN2JjZWRmNTliZmZmZWUxYzU4MWM3ZTQxYTQwMTgzMjQ0M2FlODBjNmY0Yjc2NDM1OTFiZDc4MjU0OTk2MjM1ZDAxMTIzM2IxOGQ5OTNiOTUwY2NmMDliZjI5YjJhZTEwYjg1ZTRjYzRmZWJhNTUwM2Y4ZTgxYjBkMGU3YjUwZTdlYjFhMzU4NzI2MzY5ZTRhZjA3ZWY2NGFhODM4MTNlNjEzNTAwNjgwMjYxNjFhM2NjYmE4MDhhOTlkMTFlN2RlNWFmZGQ5MTEzN2ZlYzliNzdkZThiNTlkZWQ2Mjg2ZTU5MGZmYWIyMWZkZTE5MTM2MmFmMTMyYmFjMWU4MTcwZjM2Zjk1ZDUzNTkzZTczZDE3NzU2MDlhMGVmMDRkOWE3NWE0YmFiMjZmOTdkMjUzYjhlMDBjYTQzMDg0MWNiNWJiYTQ0MzkxMjRhYmQzN2ZiNDNmMzUxMGJkNTY5MGJjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMjU2KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiOTVlMzNlM2UxZTVkMjRkY2ZiYzVhNTM0YWQwZTZhYjZhYjE1ZGQ2YjA5NGI3NjQyZTIxODdhYmE5YTMwMzEzN2I1YjdkYzNkNzAyNTNjM2E4YjQ0NmI1OTFmYWI2OTUwYzRmNmEzM2RlNTI1N2ZkYzQ3NGE0NmViYmQzNjc0NjUxMjdlNmE5ZWFhOTdlMTc4NTFmOWE0ZDU1ZmU0ZTk1NCI6IjcwODBjN2Q0ZGRkOGUzMmZkYTQyZWEyM2FkZGRmN2E0ZDM4OTNiZTJjYjg3ZDZjNzI5M2JmZjUyMWMyNTIxODkiOiI2MTFlYzMwYjg3ZGRkMTA5NjM5NmQ1MzllYzk3M2RjYjdjNDA4YTYyZTZjMzdiZmJlNTYzZGJiNjBkOWY0OTMyIjoiOGE0YTBmOWVlZTY3YzU0ZTNkZmQ4NDZlYTkyOTgxY2Q3NjlhOGM3ZmY0ZjI2NDZjODVlODBhMDNmYzU1NmJjMyI6IjA1ZGMzNmI1ZDM1NGY0YzNiOTUwMDUzZjkyNTYxNmMyN2UyMzE3Zjg4NmQyYWYwOWVjMWViN2FjNTM5Nzk3N2EiOiI5MGZlOTc4ZmVjNWNiMTRhZDE4MGUxY2E4ZDNlMjY2NjU4ZWZkOWIwZmM5NTM1M2Q0ZWRkMDZjNDY4MjU3MmE0NmU5MThkMWJmNDI2OWQzOGY1YjAwNTY5MWY0YjVhOGRlZDA4OTgzZDMwN2EwZDdkZTY0ZTY4MWEzMDJlYTZkMGZmOGRkYjg3YmNiNWFiMDg3MTc3OWIxMDc0NGQ4MTg4ZjdiZjJkNjQ5OGE0ZWU5OThkYTkzZDFhMmZkZjNkM2RhNjM1YzUyY2MyNjk3N2IyNWRmZTE3YTVmNWRjYzgwZmQ3MmQwNjZkYjdjZGJlZGE1NTdiYTUyNTU0ZTFlZjVhMDc1ZDdhNDBjZWNhODNjZDgzNDc3ZDk5NTkxMjI4ZjRhZTMzMTYzZDczMDQ1ZDM1YmRmODkyY2QyMTA4M2I4ZDcwYTMyOTcyMTJlZGVlYTU3ZWJmYjY2YmFmN2FmMzg4MzNlNzIxMTMwMDFjMjQ4OWVhNGJlYWU1Nzk5NTE2OWExMzU0MTMxYTdmNjA3YTE1NTE2NDNkMjdmNTZjZThlOTYxNDNhNzhiMmExOWY5ZmQ3MmNhZTkwNTQ1MzNmZGYxNjgyNWQ4NTJjOTkwZGJjZjM0N2QzMjUyOTk1MjQ0NWNhY2M1NWM3OWE3OWM1NWViZGRhNzZmMjI2YmFiODBkNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImI0MzMwMWMxYWYwMjRiYTZjZDdlYWRmOTg1Y2IxYzZjMzAzNDc5ZWMzYWI0Nzc5NzM5MmQ0MjIwNzg4ZjRkYWVjMmIxZjVhYzYxMzhiY2I4M2U5MzhiZTY2YjMyMzJmN2YwMjJmNGU1NDhiOTNlN2E4YWE0ZDg1M2ZjMWI0YzQyZWQ5YjE4MmFlNTgyZjY4NzZiZWIyNjhiYTIzYzQxMDUiOiJhZDdmY2JhMWY5MGIyNDM2ODliODVhNGVhMWRjMTUwYmJlY2E0MDkzZGQ4YjlhMGE0OTFhNjc4MDExYWQ4MDdkIjoiMDQxMDUyNzU4OWU3MjAyNDQ5MWQ0YjUzMjhiNTY1OWEzMzBkOWIxNjdhMWEyNzI1MTM2M2UyNjJmMzkzZWI1NyI6IjVkZThmYWM2MjA2M2E2NzY5MDRhYTk2MjgwNDZmZTcxZjA4MGNlMjg1ZWY5NjRhY2RjZDExMjYwNzM0ZjJkOTAiOiIyZjE0YTMyN2JkYmI5YmU0ZDlhODEzZGQ3MzQ0NWM4YThjOTExYTg3NGRhZjA4YTU1MWU4NjdmNTQ5ODNkZTJmIjoiNDFkNTUzYWRjZDA2OWM3ZDJiMjY1Nzk4Zjg4OTEzMjliMWRiY2FiZTJlN2MwMzUwMjU0MmIzMjJkMTNlYTcxY2Q4MjcyZWVlYzY1ZDMxNTIwNzgyMzUxYTMzOTE1ZGVjY2ZiOGUxMGNiNjRkNWY5Y2Q4OGViMzA2MDhmN2IxMzY0ODZiNTk3MmE2OGI5ODFlMGI5YjcyOThiYjY3MGFjZTU2OGI5OGM4OGQzNWI0YTQwYzI1YmVkZWM5NGVmZjk5MmMwMDgzZTUzOWFkY2NjMzdjYTVhNDA5M2FjOTZhYTEzYzgzYTU5YzA4MGJiZTAyZTM3YTgxMzAzNTAwMjI0ZGFhNGYzODBkMmI4OGNiODRlYmFhYzM0MmJmZTU3ODk2NTg1ODVkMjg5MmNlZjJiYzlhYjZmMWFkNTFmYjI5MmU1MzFiYzMzMTg2ZTM5YjkzZmI2N2Q0YWM2MzNhMmY0ZjhjNjgxYzdmODJhODFhNDdiNzQ5MDU2MTNiZjEwZWJkM2M1N2ZkNmM4NjI0YmM3ZTU1YjM4ZTJhZDA2M2FlYTkwZmFhMDM4ZDY3MWY4NmM2YjE3ZDQzNDEwMzJlMTFlMTNjNTI2YzQ4MThkZmM0MmNkYTQ5NmVjYzA2MGQ5YTFhYzQ1YWUwZTcyYTZlMDViYzNhOGFhODUxYWY1MjE0YjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI4MzdlOTA0OGU1NTY0ZGYwMmUyNWY3Yjc1ODVhYzU2MDBjZTRjZDZhNmRlODMxMWM2YjNjNjA4NDM1NmFkMGY5ZmNkZGFkNDdlN2JiNmFkN2FjOWYzMzE0NWRlMTM1NjA1ODY2NjExYzJiMDgzZmQxZjllNWNlYTk4ZjI3MjVjZGNmYjBkMmZmNmYwYWRiNzRkNmZiNjFmOGE2Y2EwMmIwIjoiMWQxOTRkNjk4OTdjNWE3ZThjMzZjYzRjZDk3Nzg0MzEyYzliNjU5OTI3NGUzYjIwZDAyMmIxMzQ5YWM0NWM1OCI6ImI2YTg4ODBkNDE1Y2M0YjJhYWRhYWQ2ZDdkMmRjNzM0ODRiNzA5MDkzNDViZDIwOTUyMGMwNWZlN2Y1Y2RjODAiOiIzMWJkM2ZjMjY0YzI1MmJkM2Y4MTAyNTI5NzYzZDVhZDNlNDVhNGUwNjg2Nzc0MjNlNjk4MTYwZGIyODRiZjExIjoiMGI4NDVjZjg0MmQxY2NjMTVjMmZhNzIyNGFkMTIxYjliNWY4YWNkMWUwN2IxNmMxNDNjOTMxZGE1NjYyMDkwNiI6IjdhNmRhYjI4YWU3MjMxZTJkYmJkODI2YzRlZWRkOGNlMDYyZGYzMWZmZmJiMGMwZWMwNDViMGNkMGE0ZTM0NTdmZjk3OGJmMzk0MjVlNDhjYmVhNDg4NGZjNTllOTU2NjUwNjgzNjFhOGVlOTE3NWE0OGVmMDk0ODA2ZmMxNDZjY2ZjM2M0MDNhNzcwYWJkMGM2YmM4NDM5YmY2OGE4OWYxM2IwNzI1YTc5ZGJhZjk3NmRiYTk1NzI1YTQzOTljNThkMTVjNDc1OGE1MTUzNDZjZDBkNjIwOGZiMGJjY2MwNjU2ODY0MmViM2UwYzNhOWExZGY5NTY3ZWVhYTg2OTI0MTU3Y2NmZTViMmY4ZThlYzk0Njg3MWRhZDMzZjQwZjY1ODQ3MDg4YzllNTAwZmFmOGUyNTQzOWJlOGExZTc3ZGYxMmEyYjIxYjlmNzMyNDRiODIxNzZlNGJlYTRlZDMzZDI2NzFlYWNmYTVjNGI1OTFjZDBiZDkzZGFiN2RjNjJmNzIzMTg0MDkwOWNhMzE5Mjc4MTg1Zjg3M2QwMDgyMGZiYzIzOWMzMDkyZDFkYzFhM2NkOWM2OTJlZDZkMzcxOTJiYzU4N2Y4YjNlZTIxYzE0ZmIyMGM1MjBmYTc4OTliY2QyYTFhNTMyODhhNDJjZjcwYzZmZWZlN2VmN2I5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMjU2KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZjg0MGM3NWNlMGNkYjIwMGEzYmQ5ODBkNmNlZGYxYzczMjFlNWYzMDNjZDA0NDZjN2FmZDJkMmQ2NjY1NzQ0N2IyMTUzMzNiMTVkNTUzMjZiYzliZWJhZTZhZTM2ZWZlYTNhMzM3YzZmYmViNmE5NzlhNDc4M2YyYjdmMGYwZGQ2ZDNhOWQzNzQ3ZGU2MzlhOTA0NzI0OGEwNGExOWY1YiI6IjZkNWNhNGIxZWRmNmMwYWZiZGNlMDJlY2IzMDkyM2IyZjRmMmIzMzEyMWUyMWIyZmZlZTk2NGNjN2RlMWFiZTgiOiJmNTZkMmIxNTg0YmEyZjEyOWM3N2IyOTU5MGM0ZTFkZmRhYjU1MjdiMTc5MWUzZTQ0NTc1MGNhNmQ0YWUzNTQyIjoiMDViZDc5OTI0OTQxMWIzN2I4MDU5MGQ0OWYzMzQ4NjMxYjA2YTI0MDhhNjE2MzVjNzA2ODcwMDNhODQ4NTMwMiI6IjEyZDI2YWMzYjg3OTI0Y2RhNWQ3OGEzZTNjMGJkODEyODBlMzQwNzIzNjQzZWQxYjJlYmYyZGZkNTJmNWRjNDMiOiJiNDhjMTNhZjdhOWI2ZmE2Mzg1YTdlZTVkMmFiOTdkY2ViZjcxYTcxNWRjNDY1ZjQxM2NiMDk2MjI5MmRmODRjOWM4M2M0MDkzMzA5Zjc0OTM1OWIwYTBkZGNjMTMxNjJjYjRhYjhmZjdiM2E2MzM2MzUxZWQ3OWViZjQ3NzMwZjk3YWNjYjZhOTYwYTljNWMyNWUwOTIwYTA2Y2NjYzNiM2Y2MmI2MTZjMTVjYTE4ZDdlMGI1YzJlN2Q4YWQyNTE4ZDFlZjBiZWY1MTVhZjg2Njg5M2U5Mzc4YjU2ZGVlYzMyODI1ZmUwYTJjNWE5NzI5ZjY1ODkxNWI5OWFiMjJhMDNiNzE4N2U4M2QyZDBmNDFiOTQ2N2M4MzI2ZjdiYzg3MTg5ZGQ4YWRlMThiM2E3ZWRmMGMwZWE0NjJkYzIyMTA5ZWM5MTI5NGNmOGNlNjljOGNkMGMxMjliNDIzZWRhZGRhOGZiZDI1ZjQ5ODNhNzBkNzUwMDE1NzZhMjY0MDUxODhiYjAyODQ5NzUyMDM2OTRjMzE4ZjNhYTdmZTQ3ZWMwNDFiYzRjMTFjOWJjZWIxYjEzMWY3NGFkY2Q3MmZjNGQyODEzNTY0ZGU2ZDQ3MTEwMTc4MDAzNzdiZTllNGM1NzllODg0NjRkNjdlYTZlNDU3YTMwZjhmNjUyMzc1YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImM5MWRiODZlMzk4NGRiYWEyNWFlNWQ4NTFlZjM0MWViNjQ3YmQxZGYwNTE3ZTE3MWZiODYwNjljZjYxODNjMTlhMzg2NzQ2Y2NkMGE3ZTgxZjM1NTcwMzg3MTFkYjcyNTk5MjYwODkzMTdhYjcxNDJkNmFiNjA1MGIxZjdkZmMyMTA4MDkxMGQ0M2E3MDJjY2U5M2NiMWQzYjE1NWQyMmUiOiJhNDU4NWMxM2M4M2Y5NjJkZjcyYjU4MjMwZWExMjM4NDZkZjY1MmIyODEwNzY2YmI2NzFmNjc1Yjk2MTI1YTRkIjoiZmIzMTMxOWI0ZTYyMmRlZGFhODhiNjRhZWQ5M2JiMTA4MzYyMjM0YzNkM2VjZWZjNzhmNzk2YWVhZGQ5YzhlOCI6Ijg3N2JhZmJhYjNiZjljMjBiMWE4NWE1ZjRiM2RkMTFhNWM0ODYwNDJiODA3YzM5ZDU5ZmRlMWVhZWQ4OWNjZWQiOiI4OWE1YWYzMzI3MTg0MTg3NTgxMjliODIxMjY0Mzc1MDU0MmJmOTU3YmYzNWM2NGQ2YjBhMjc2MjM4YzgwOGYzIjoiOTMxZTQzYjE2MDdmNDMyNjBjYTRmZWMzMjA1YmFmZDkwY2NmOTkxNmQ3MjFkOWVkYzM4NDI1MGY5MzQ2NTI1Yzc2NTZjYzdiNWFlZDhhY2Y5MmI4ZDg0MzEwODg1NWFjMTNmNGYwOTAzZTUxYWE0YWI3ODQ2YTgzOWNlNzBiN2RlODhlMGQ1MjU5MGVkZTE0NDM3YjU0OTNiNmMyZDk0NThkMjIxYjc3MTEwN2VjMTY2ZjY2ZWQ5OTM3Mzk2MDRjNDg3ZmI0Y2U5NGJkNzk1ZTljZmY2MGI0ZjgzNjVjNzU4YzI3ZmQ3NjcxMzViOTBiMzM3MjU3MGE4ZTBlM2IzYTIzZGEzN2U2OTM4MmFmYmI3NjE2OGFjZTNjYTc4ODUyYmY5OWEwZDNhN2UyYmYxOTJkOGQ5MjlkZmY1YjA3NzMwZTAwYThjNWZhNWFlMjQzYzg5ZTcxZmQ1MjkwN2VlYzBiNGM0OWZiODZiODEzOTRlMzhhNmIwNTIzYTg5YzBmYzg2NmMyYzNjZjc2ZjMzNmU5NDM4ZDRmNzczY2Q1Y2VlYTRkZDQ3YjM3MTZhOTk4NjE1M2Y3MTgxNzdkMmM4ZWJjZmNiOTBiOTg2MzMwZjgxNzMzNGQyOWFlYjljOTNlOWRhNWRiMzBiNDgzZjhmNDM0ZjI4MDdiZGRlYzY4NTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiM2U0YzQwYjliMzMwNjNlZGJmZDIxYmM0ZTM0YzViYzFmNDU0ZDdlZDE3NmU0ZjZlZGMzYWIwNTZhM2IwZDFhNzkxNzA0NzlmZDkxZDZlMzBjYWY5OTE2Njg0MmUwMTc1YjI5NDFhNzE4NmQ4YzNmNTRlNmY1Zjk4ODRlNDdkZDIyYTE2MWEzZmM1ZTAwYzFjOWNhNWE3NDRjNmE3ZjdiMiI6IjdhM2Q3NTExYjkzODQyMTU5MTYyMTc2YjcwMTYxMDZlNjE1NzNhYTQyYzU3YWNhN2JiZmM5N2IzMzg4YzI4YjMiOiJkODg3ODFiM2FmZTJlMTUwMGI2ODgxYWE5Y2MyM2RkMTUwMDU0ZGE1N2JlMGNhMTI3ZTEwMWE5ZmJjNGRlY2NlIjoiNjIzMWIwZjVjZjE4MmM2ZjEwODQ5MWM1YjdlYmVkOWIyYTAxNWU5Njk4ZTg2MDYyM2U5YTEyZTY5MWEzODg5OSI6ImJkYTY2NmM1YWMwMDZkNmVmYzJhYTBkYTUyZTc0ZWRlZDg4OTU1ZjhmMDY0YmZhYTUyZDlmMjUyNGExOTVmNTkiOiIyZDdkNjIzMTBiZmM0YTMzNDcxMjJlMjM2NTVhMTBkZmM1NGZhYzUxMzQ5ZjBjOGQ1ODZhYWQzOTIzNmEyMDM2OGY0ZDk2NjIzZTU4OTg3ZjdjMTE4NDE0OGQ1ODYwMjJhNGI5Njk3NmY3MjYzNmViMWFhOTJhZDIyMWM1ODY2YjZjNjgwM2NiZjZjOTgyZTFkZTEyYmM4OTYxOGFlYjNmODQ0YjJhNTE4YTU3ODcxNGUyMzgwMDc1YWNiODI4Njg1YTU3NjgzMTc5NzUzZmQxZWJkMmQ4YWExNjcyOTQwNDQ2NzU2ODI5ZDZhYzFjYWZiYjIxODU4NDY1Nzg5YWRjMDI0YjhmYTU0NGJlYTA5Y2Q0ZjFmM2VkMzVmMjk4ZDQ2MTlhNWY5MmE2ZTRmNzEyYTAwMzIzMDdlZDc4MTE2NmQ3YTZhZjJhMzUyNjk0YmU3ZmQzYmM4YTE1MWVhODQ4ZjhiMTRkYTgxNTBlYjIyZTI2NGQ3NmU2NTVmZGIzNjM4YmYyNTA1NDZlYjI5ZmYyNzg1MGQyYjU2OTc5MzJjNmE4NzY3NDM1NjFlMDg5NGEwMWNlODQzNWNlZjc0ODAwZjExZTRiZjQ0ZmE1MTQ5YTZmYTRmNGNhNDMyNjdhNDdkMzg0MTcyMmFlN2VmZDA5Njc2ZjM0MWE1NGZmMWJjNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDI1NikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJmZTRmNTI0N2RjNDA1YzEyMTMzZTljZjdmZTAwNDgzNjQ5ZDBlN2I3MGZkYjFiMzlmOGU4ZWQwYTQ3ODlhMGM5YWI3ODQxNzgxNmI1NGQ0N2NmOThjMGFhNDI0NmFiMGQ2ODAyOGQxZTc0NDFhYjc3YzVlYWFmOWFiYTBmMmFjNmUxYmUyYWY0ODAwMjZkNDRkNWVlYzBlNDZmZGQzMWIxIjoiNWM1YTVlNTE3YjNhY2I2ZDZkNzU3NDJiYzI5M2U0ZDA5MWQ3YjBiZjM3NTU5Zjc1ZGY5OGQ2MzA2YmNjMmQyMiI6IjVmNTZkYzQ4MDAyOTdhM2ZhOGUyYjM4NDgzYzI5NTA1NDg1NjI4ODY2ZmYxNzViMTlkNGFiYWY0NTI2YmFkOTIiOiJkOWJjMDgxMDI2ZWE1ZTM1YTUyYjlkMTg2ODY4OGUwM2FlZDc4NWFmMjAxZTM1NWNmNTFlNmU4Y2VjOTE3YzM0IjoiYmNlYzY1NWVlOGM0ODJlNzI1YzViOTE1YjQwODVhOWQ2NzhlYTI2YjcxYzFjZTBhODVmNzQxZjlmYjNjMzYwNyI6IjQxMWVkY2FkYjc5MTUwN2Y0MGJmZDAwZjNjNzY0YTJjNzU4NzI5ZjNiZWExMTZiYTBjODIwZWZlMDllZDM3OTA5NWY3ODc3Y2RkNmM2OTRjNDM2NTcyZjRkZDFiOTA1MzAxZWQ2ZTVmYTEzNjBhYzgxMTI4NjAzMDc5NThjN2I2NDM3MmVhZThmNDEyMmQ4NGZmMmQ0YjY5MDQxOWUzMDQzYjhhNjE4M2FmZGU4ZjA4NGZhMTEwYzM4NDAzYWRiYzg3OGI5YjEzOWY2ZGY1Y2Y0N2FkYmVjMmQxZjAzY2JjZmVjY2M0MTI5NDIzNDZmYzQyZjBhZjc3ZDUyY2Y5MTI3ZGZiMDJiZWFlNDczNzVhYWMxMDFiYWFjMzhkMGI0N2Q4ZjA0ZjgzYTdlZmY0ODJlYWQ5MzcyMzgyNzUzMDg2OTM5MDYzMDM3OTc2N2RmMWY0MGI3MzkzMjc4OTU4M2RhMzI3ZTJmMzYzYmE0MjFhMjUzZDM1ZDIwNWIwMDk0NWQ5ZjU1MjE1ODAzNTBmNjMxY2IyNGM3YmNkZjdjZGRhN2NmMjhiYWY2MjVmZDlkNjExMzRlYzdhNmQxY2Y0YzgwZDA1NDQxNzIyZDA4MWQ0YWVhMTA3NDcxMmYzNzg4NGZlMTVkZGIzY2ViZGFkYjIwZTcxY2YzYWI0MTY3NmZlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjlkMTI5MTQyYmE0NjZjMjdmMzQ4ZDU5NDlmYWZiNzk2NzVlMzM0ZmMzYTE5NDhlNWQwMDhlZTI2NTA3NjQ2N2JmYTQzNTU5NmI2NjFjNTI3YTgyZTVhMDY0ZmQ1NmNiNmYxN2Y1NDljNzdhMGE2YTk5ODcxMmVmMGUxZjQxYmE0ZWViMzU0Zjc3NTY1ZjdhNzYyN2VhZWFiODNlYTQ4ZmUiOiJhYzIzYzQyMzE1ZjJiYmU1NGViYTUzNWE3Mjk5MTEzY2ZjODgyMTY3MjdlZGU5ZjE1NGQ3YmRkZDg4MDQxMjU5IjoiN2YwMjlkMjQzMGQ0OWRlNDkwOWE3NThhMmJkYTRmMjE5ZDM3ZWZmMDFjOTZkZTdjYTJhNDA3MWQxMjhhMWM5ZCI6IjRiNmE0NDMzMTJmMTAzNDhmNmFiYTA4OGQxZjgxMjA2YzY5NjUwOGE3NTgzNmU5ODk1MTYwNGU5M2ZhNmRiNTEiOiJiYzEyODA1MWRkYzk2ZWVmOWZiYzNhMjNmZjQ1ODI0MGQxMWEyMjlkMWE3NTg4OGQ2MjJjZWI3NTE5ZTFkYjZhIjoiMDNiYmY5ZTJjMGMxYWJjMWFkNzE1MDZmZTkxZDQ4MzQ4MWZjNTgzYTczZWQyZWI0Yzg4MzRhODcxMTgwODhiMjA0NzRiNzhlMDYzNjZiMmYzMmE1ZjUwZTY0MjViZTg0MWUxODg1YTcyYWExMDZkNWEwMDFlMzkwOWIxYWMyYTI5OTQwZGVkODNmMDcyNDUxNDgwMGFhMGRiYmIxOGRhNmQ1NzNhYTk3YzdkZTQ3MGUxMTVlOTMzMjE3OWNmOGIzMjFmZGM4MzI2NWI0ZDU4ZWQzOWMyOGQwOTc4MzU5MDcwNGFiOWFkZjAwN2VlNDRkNGQ3NGFmNDM3ODUxNzM0ZDQ3MDA4NWQ0NTI1MjU4OGQ3NTQ0OGFiYzYwOGJlMDM2MzAxNTI1ODJlMDM0NGUxYTc1MjJhODdjM2RhZWJlZWZiYzc5NDk3NzU3ODM1ZjA3OWRkOTkyNjBlZDdkN2UzZTAwYmRmMDQ2ZjRkYWIzY2E4NGIyMDNmOGM5M2NkZTk5NzU1YzJmNWIxNmMwMGQwMGYzNzA3MTVmMTg4ZTgwZjNmMzUzZjJkMjE4MzUwZmUxYTlmNjg2NzNlYThlOTMwMTMzM2ZlNWNhN2M3MDNkMjFhYTJkMGRmMDIwZGIyOGQ4MzQwYjVlMmMwN2NlNWJmYmNkZTcxOTQzOTliNmY3NTIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiMmZiYThlZDViMmJlOWFmOTVmYjAyMTgzY2E4YWUwZGNjYTkwYjIwOWJlNzM1MTFhNWRhYjMxZWM4MWU5MzkxMTdlNTI5ZmNhNGY5NWE0ODNiZDMwNzgzOGVmMGQ3NzlkYmJmZTc3ZGY0ODFkODA3YjMwOWRhOTI5ZjMxOWIzOTI4N2QzYWUwOTk0Zjc3ZmY2MTZmMGE3NjNmMzVkNDRhMyI6IjJkZTY5OGQzMjAxMDYxOGMyNWVkODZjY2NhZDJlYTRkOWZiOWFkZjdiM2RjNDAwYTJiMWI0Yzk3NTY1MWQxMDMiOiJmOWZmY2ZkNWJjOWEwOGY2ZjkwNTlmNGJiN2Y0OWUwOTNmNDA0YWE3ZmU3MzZiYmY0MDE4NzM0MDcxYzI2MzM0IjoiYTMwOWZiMWY0M2E1MjBhMjI5NDZhNjQxODUwMDkyOWUxOWQyYjMzMTZmYjFhOGMxYWE1ZDA0N2RkZmRiOGQ0OSI6ImMxZGJmZGI5YmRkNGEzMzIxMDc0YjU3ZTExZTVlYzZkZmMzNzQyNDhhOTE4MjQyZmIzZTIyY2M2NjEyYjMyMzkiOiIzZWVlMWJkYjYzNDMzYzU1OTcxMjk3ZTE1YWMxNjkxY2JkZmVkNTc2YjFkMmFkYTI3Y2FiMzNlNjYwYTNjODU3NWZlOTg5ZWY3M2UxMzA1OGM5YTM3NzdjMzViZmYxZGFiMjVlMTk5MWI3OGNjNDQ2NzM4Y2NjZTcyM2ViMDIxMzZmY2IyNGEwZGQyNTk3YzNmZDBhNzU3NzRjNGEyMTQwOTY4OWU5MzA5ZTk2MmJlMWU4YjA5NmMyZGRlNTlhZDlkYzY3NTAwNTEwNThmZjZhMThkNTdhMTllYzI3NzU4ODJlYTBhZjY1YjE3MmVkNzE4Njc4ZDg0MWZiNTE0MzdhYTMxMzNiMmIzMjhkZjBmNGFjOTE2YTAxZDg4Yzc0MDk4MWJmNzFjNDY2NDc4OWNhNGU5ZDNmN2ZkYmU3Mzc5MjMxYjY0NjgzZmM4OTFjNTIyMmY4YjM5NmE0NDZmM2I1MGRkZTgyM2Y5NTE3N2I3Mjg0NjYzNDAyZmU1NDUyZmU3YmRlZTMwNGFiZTM0ZDcxMTcyMTcwZmYzYTkxMTc4MmI3MmIyNTU2ZjIzMzdkMWQyM2Q5ZDYzMmJmNjgzMWQzYzE3M2ZlYTNjYThlYjVkNzk5M2E1OGE0YjlmOGY2NGQ1Yzg5MzE5YWNiYzg0NzU3NmIzODNmYWUwMTc4YTA5NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDI1NikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJhOWZkMTg3NjQ5MDA3NjhiNzkwOWRiODdkZDRjN2I4N2JhYTJjYWU2YjBmNjJhOGMyZWUzZTRjNTUwMDQxY2E3NDM1YzdiMzVlY2M2ZWYzNzNkZGUzZDk4OTQyMGI5MmMyYmIzMmY5ZmM4Yzc2NmFiODQwZjVkMGM3MzU1OGRjYWM4N2UyMTAyYzI4MTkzZTdmZmQzMzgxYmMzMGUxZDMxIjoiOGJmYzVhNjVmYTIxMzk2MDgxZDkyYzNkNzIwNmY5MjYzNzM4OWM2MGNkN2ExNGYxMTgxMWM5MTUzNWMwMDgzZSI6IjQwNDIzNmJmZTI0YjQ3MWFjN2RmOTM4YmU2YTk2YjhlYmY4YmM3NTg3ODc3MTRkMjI2Y2U3MjdlOWQyYjRiZDYiOiI4MTUxYWUzMjM3Y2EwNmNhNWIwMzczMDM5NjgxYTlkM2NmNzk5ZTk4YzNmYTJlZmI1NzY4MjJmMWZlMGFhYTA2IjoiMTFmMGY4YTJjMTZiMWJjMTVmYzkzZmY0NzkzODk0ZjIyZDc0OTRkMTFjOTRkZGU1ZWFkMmYwZmIwOWJhZTZjYiI6IjljNjM2YzMyMjg0MzJmYjcwZDUyMWVhZWQzYmE4ZTQzNjUwN2UyOTE2M2RlMGY1YjdlMGFhOWE1MTc3YWExYTM5MzBiOTVmNzJmYjA1NjEzNTNkYjcyMTNjZGU5ZWJkYmQ5NDg1YTVkZjkzZmY0MTY5NjZlMDljMWU2MWQ4ZjgwNWU2YTA4MmQ2MzcyZDU4MzAxNjYwYTlhMDE4MWUyZWY5MDZhNWE4YTk5OWM4ODAwMmViNGI0MTMyYjM0ZWZkMjE2MTg4NzFjZTI4YmU1ZTY2YTY1YTE3ODJkZTExZThlMTFjNTdhMmRlYmM4NWIwMDY4YWI1NTM0MDBiMjZhMGEwZjk0OGNjYjRlOGJiYzExNzNkY2RhYjM4OGMyMGVmNmUyYzlhYzc5NmQ4ODE2NTcyZWJjMTM0Mzk2ZDM4ZDcxYmE4ZTk4NmVlYjA2M2E3YmFmNWNjZGNmNTgzYTcyM2JhNTZiZWMzOGQ0Y2QzZTdiZWE1NjNiNDEzMmYxOWI3MzAxODlmNTU5MzAwMDkxZTkxNzFhNjE0Njk0NjBjYTgyZDM5YjUxNDhlNGQyODgwMzdmNjkyNmU5NmYzODRlYWFhMGVmZGFjZjJhZDkzZjBkYTRmZGNhMGJjNWVjMGYwZDdjMGU4ZGFkZmZhZTRlNDZhZTk2YTY1MTE3MzVhODBlIgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLnByLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLnByLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyNWJhNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcucHIuZGF0YQpAQCAtMCwwICsxLDEyMDAgQEAKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImEwYzlhYjU4ZjFlMmU1YTRkZTNlYmQ0ZmY3M2U5YzViNjRlZmQ4Y2EwMjhjZjgxMTQ4YTU4NGZlNjlhYjVhZWU0MmFhNGQ0MjE3NjA5OWQ0NWUxMzk3ZGM0MDRkODZhMzdiZjU1OTU0NzU2OTUxZTQiOiIiOiIiOiIiOiI5YTAwYTJkMDBlZDU5YmZlMzFlY2IxMzk5YjYwODE0OGQxOTY5ZDI1MGQzYzFlOTQxMDEwOTgxMjkzMjVjYWI4ZmNjYzJkNTQ3MzE5NzBjMDEwN2FhNDg5MjUxOTk1NWU0YmM2MDAxZDdmNGU2YTJiZjhhMzAxYWI0NjA1NWMwOWE2NzE4OGYxYTc0MGVlZjNlMTVjMDI5YjQ0YWYwMzQ0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIwN2JkZGFiMDZjZjNkN2YwOTRjYzIzMDJhYmQ3MDBhOWQ2NzQyMWFlYjcxMWY0YmJlNjZmNTllMjhhNDY3OTQyMTNiZjNkMGMzYTJjYmJiMDkyMDViOTBlMGVmMjEyYzc2NzliMzc1MjZhODA2Nzg5IjoiIjoiIjoiIjoiZjc2ZmQyYTQ5ZDk1NzRjM2Y5MDg2NGYzNWYzMjI1M2I4MzA5OGVlMDRhNGM4ZGJhNDY0YTgwMzVmNjY1Y2ExNjVjOGEwMzhiZTVlMWIxMDBkNTY3NTJhZGNmNTliZWExNjdlMTViMWQwMWM0MTk5NDhkMmQwYTg1YmU2NmQxOWJiNDBlNWUwYTY2Y2ZkNzZiYTc1NDdlYmE2Mjc2ZWE0OSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiNmQyODNlNzcwNWEyYWE0YjFhYmZjMWZmODU1OWM5ZTc5NjJkZjkyMjkwMDBiOGU0MzJhYzQwYmFkMzQ3OTczNDVmMWVkNmQ3YTBmZGVhOGVjMDFlN2EyMGRjNDM2YWExZDYyMTUzODEzZDU5ZDQ0YSI6IiI6IiI6IiI6IjYwZGRjZTU3YmU0NTYzYjg3YmI1OWU4NDg0OTZmNDJmY2VmOWVkNzk3OTkwNDBlMGVlZTY4ZmQ4OWIzMzAxMDljZDNiM2Y3NjEzNDhmYzcwMzZjMGNmNWQ2OWFlZmVjZjkxZTg5YTdhZTA0Mjk1OTA1NjlhODg5MjJhZWZmMjQ5ZWE3ODNmMDBmNzk1YWFkY2E3MjlmOTY5OTZlZWY3NmQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjEwOGExZmE1MzlmYzQ3MWUwYTI2YThkMzk2MzNjODhkMWU4NGMyNmE2Mjg5NGU3ZGVjMTVmY2JlZGE5ZGNkMWU0MDYxOWRjMDNjN2QzZGQyZGIzOWJjOGY0OTY0OTQ5YjE3MzdiOWNkNjlhOGZmOTciOiIiOiIiOiIiOiJiMGZiZTNmNmI2NjY3Yjg4ZTJhNDhmMzY3OWYyMWFkODNmMjgxMDc2NzVkNDNkMmE1MTg2ZGQ2YTAyNTZhZmM2YWNhZjk5NWIzZjA3NjkxMzI1NTQzYjM3ZGRkNWJmYjQ5MzRmNDZmZjk3ODM1OTdiNjljNzI3YzljYWUxYzZiODM2MDFhMzkyMjdjNTNjOTkxODFlYzE4ZDViZTYwZDViIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIxZGI2ZmUyMDlhNTExMjRmOWViYTNhZTdhNTY5MGEzMWM5MzgzYjBkNjJhYmUwMjM3ZmE2Y2UyYjM0YjMyMGI2OGQyNDkyN2Q5MjQ1YTEwZjcyMTZkZWQ3MDFjMzlmNGQxMGRkNmViNGFlOTEyYjc4IjoiIjoiIjoiIjoiMTBlOTY2MWJiZTE0YTBjNzY4ZjA5ODQwOTc5MjMzODY1Mjk2ZmE4MDFlZThiYTk3MTA2MDQzYzA2N2QzYjAxYTVkM2E4NjZlYjliMjFmNzMwYzNlYzFmMTFmMDIyODIwYTJhMmRiNGNkMDcwNjFhY2I4NWIwOTg3ZTMzODkyMDY0YjU2NjI2Yzk2MmQxZmViZTFlYjk3YWY2Yjk5YWMyMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiZGFjN2NiNWQ2NTk2NDYyNDZhMmMzY2Q2Y2JiOGI3YmI5ZWRlMzBjODgzNTU3MjVjMTY1NzZjYTc1NjdmNTJiNTFlYTNmN2U1ZDQ1NmIwZThiN2EzM2ZhZjIxMTUwZTViMzk5OTllZTUzZmQwNWIyZiI6IiI6IiI6IiI6IjcxMTdmZTBjMGE5YWZhNzVjMDc4YjE2NDFiYTYzN2VkMmE0NTAxZTcwYmYzODQ2NTkxNGVhMTg1ZGE1YTYyMDQ4OTEwMDQwZTcwZjI3OWNhOWYyZmQ1ZTQ3OGZmZDc2NDg0ZjUyYWZhNjJhMjljYTlkNjQ5ZjI1MmYyN2E4ZWVjYTFlYzk1ZDc4OThmNzA1NDIxYzkyYjYwNDkzZTVjNzciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImE0MjJlMTFkNDFlZDkxZTQ1OGIxZGZmNzg0NGU3YTA2ZWI4MDdiMDQyZmVjN2M0MmRhOWE3ZDY0YWVhNmVjODQzY2JiNWRhY2Y4NTE3YzNmNzIxNGQwMmQ0MzJmYzY0NzY2ZjZiZDQwZjU0MjkwYzUiOiIiOiIiOiIiOiJlNmUxYjU5ZDQ3YWE0N2ViZDg2MmZhMjMzNmQ1MGE5MjBmNzdhZmY2ZDQyOTQyYTI5Mzk0N2MyNGIwNDQ3NTZjOTc3NzIzMWFhMGNlOGE2N2QyOTE2MTM2Y2Y0NDc3ZGRlNzhiNmZhNzg5YjRhNTcwNDYwNTM4YTNkYTE5OWMyYzY0MTU1NjkyYmMxYWVmM2ZhOTRjZThiYTRhNDNiY2FmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI4MDIwY2NkMjNlNjczM2Y3NjM4YTZkNjhiNDk1NGI3MDFkZDJlM2IzMzE3NmQ1ZDFhMTRiNmNkOGFlYWQ0ZTE1MmUwNzI2ZGQxNmI0ZDc2ZGQ5Y2FlNjBlNjkwMjNkMGZkODJiMGI2OWI3Y2JhZjc1IjoiIjoiIjoiIjoiYzJiMjI0MTBkZGJhMDQ2NmI2NjM1YWI5OGY3NjkwNTcyZDcxNTlkNjZiNGYwMzdmYTc1ODY5Mjc2OTUwZWE0YWI0YTkyZTMwMTFkN2MzZDUwZjkyMWEzOTg4OTA2NDg2NTkwNzA2YzhlMGVlZWI0ODdhYzg1Y2E5MjRkOGIzYTQ0NDVlMmFmNDkzNjVjMTBjNmU5OWViMTdkOTMyODZjMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiZDY2ZWY1ZDEyYzc3OGQ4Yjc4MTM0NzA0ZTM0NWIwOGM2ODM5NDcxZWI5MDNiZDA0ODAxNjlkNDA2OWQ3M2E2NjlhMTdkZmYyZTFkNmZjMjNmMDY4OGZkZjc4NjdmNzJhMDI0YWU0NDU5Njk0NThmYiI6IiI6IiI6IiI6IjkxZWYyYmFjYmZmYWNiZWRjMTFkYTU4ZDI3NTQ0ODY5MmFlMjZiYjk5MjBjMGIxNGQ4NmE0MmE2NWE5YTc5NDIyZWQ3N2MzYThmOTQxYjQyODU1MmNhZjZkMTVlMDU3YzJkZDhiNWNkZWU2NzBlZTE1MWY2NzRiNGE4MmZmOTc1NGNiMDY3YzFhMWEyNzMwMmJlZjJkMzk1Mzc5ZDYwMDkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImNiNGNhMGQ2ZTA3YjM0MWVhMGQxMDVlNTEyOGJjZDZiNmZjMzE3YmVjNDkzOTRhODNjNDg1Y2U0ZjgyMDUzNjEzNzQ0ODRhYzAxNzNlZjNmMDhmZDY1ZDBhMTFhZjJiM2Y5MGVlOGJkM2ZjZGMwOGIiOiIiOiIiOiIiOiIxNzI3YTdmNTgwYTI2NzQ5MjY0NmZjMmMxOGUzNTM5YTEzMWI1MmZhM2Q4MmFjOGNiMzYyMjdlYmI5NGEzOTZiMTM5YzBhNzA5MzAxYjRmMDBiNDllYzYzZDdmNDgxMjVlNDY5NDQzYjU3YjE2YmRhYjY2YmRhZjA2ODRkYTQyNWU2M2E1OTYxODJkZTQ2NzQ0MTZhZGUxN2YwY2VmNDlkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiN2NlYzAxMjAyNjFiYmVkZGQzNGViNzc2NDY0YzliODA2NjdkYTczMmNjODJjMzY1YTQ5MmI0ZGVmMjE4YmEyY2FkNTlmN2I0YmMxYWZhZWYwMDg2MWM5YjYyYjU4MTQ0NGY3OWI4OTc3ZTlmYmY4ZiI6IiI6IiI6IiI6IjNhZDEyOGE3NWFmODE0NGNkZjVjYWNlNjgxNjZkYWJjYTlkYjVkNWNhYzZlZWFhMGMzZDYwOGQ5OWQ1ZGE0YTJjYTkwZmMwODBkODMyZTVmOTcwNjBhYjIyNDdkYzVkYzIwYmMxMGJlNDdlNmFiMDNlZmViNjYyZmM5ZDUyYzg5ZDhkYjM0MGNjNDkwM2JlNTlkZmQwODZmNmQwMTg0NjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIyOWRjMDc1NTNiYjc3Y2FkNmYzMjFiY2RkNWM1Yzc1OGI2YTc3NTg4ZWU0M2QwYWZiMTVjMGQ5ODFlMzY4Y2IyNDgyNjYzYWVhOTNkZWQ5NWQ4MmExYTJhMjJjZGJkZjhkZTkzNjk1ODYyY2Q5NDI5IjoiIjoiIjoiIjoiNWUxZDUzZDhkYjg5NTExZmE5OTZjY2Y1MTNiYWFjZWUyNjEyZGEyMDFjMjFkNTFlMjkyN2RjYjk5Y2FmMzEzMmY2ZDJjY2MzMzc2ZGJmOTU1MjAwMTg1MTViMDc4NGU5OGI0MjI2NjcxY2IzZjFjNzkxNTc1N2QyZTU5ZjFjNGU4NDNlYTljOTgwMDQxMDgxMThiNGViNTNiZWYyYmFhZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6Ijc0ODc3NzMxNjE2MGZjMTc1ZWFmZmY1Nzg0ODE0MDJjY2Q1YTM4NTA4ZTRhYzA2MDNmODYyODE1NzZjOTcwZDMzMTZlZTU4YTM2ZjgwOWE4ZGY5ZWYyNDE4NjFjMDQwOTNhMjg0ZDExNjM4NGQyMDQiOiIiOiIiOiIiOiIwNWYxNzljNzE2OTFjMGMyYzY0ZWRhNThiNjNhMjc3NzIyMTBmMGMyYzY5NzM3MDhhNWY4NGU2YjQ5ZjU0NzE2OWE4MzlmMmU5N2NlMThhYzk0Njk2MzM3YTlkMWMxZDQ1MGJmMjdiN2ZkYWYxNzYxZWU4ZGE5YjU1ZDU5MDMxYTg1MTZlZWFlYmIxYmQ0OGExZTNiZDA3MGM1ZmI0ZWRhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiMTFlMmUzOTM0ZDIzMjM5YWE2YmYxYWJiMDdhYWRhZjhkZjA1ODkyZDEyNmNkNGJlMTNmMjk2NWJkY2ZjYzgzOTZkY2IxNmQ4NzQyZWVkMWIyNzZiNTYyNzAyOTE1ZmJiNTljMDFjYWZiNzA0NDAyMiI6IiI6IiI6IiI6IjZlYzFjYWE3NjJiNWI4N2NlOTJlZjdkMjU0NTM2Zjk0ZDQxZWQ1YTk4Njk2ZGE1YzE0ZmEyZDI5YWE5NTE4MjkyN2IzZTJhNWVlOWUyMDEyYzkxMWVjYzVlMjQ0YWYxYTgyMDBkZTM3Y2JmZjJiMjZkMGMyMjcxNjU5YmNlMDc0ZDViM2MwNjc0M2YwOGQ2NDk1Mjg2MDY4YTFlNTQzNWUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiJlYzExZTE5MjllNzQzMGI5MTRiMzg1Mjg1ODAxZTI3ZGY0YWE2NzgzZmExZTM0MDVhZTcwNmU3NDBkZGE1MDIwOWIyMGFjZjkwZGZhOGNlY2I0ZDRiNGJjN2NiYTRkYWEyODVmZjg4Y2U5ZThkNDUxIjoiIjoiIjoiIjoiNzRhY2JhNDhmMDIxNjA4N2YxODA0MmZmMTQxMDE3MDdjMjdkMjgxZTVkZGJjMTljNzIyYmVjM2Y3N2JmMTdjYTMxMjM5MzgyZjRmYzFkNGRkMGY0NGMyOTZiYzJmMTBmNzQ4NjQ5NTFmN2RhMTlhMjNlM2U1OThhYzQzZmI4YmJkZDFmY2E4MDQ3Yjk4Njg5ZWYxYzA1YmM4MTEwMmJiNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiJkOTJiMzlmZjYxMGRiNjY0Mjc2MTNjMTExYzAwMmI3NTMyOTczNDM3Mjg0N2E4OGY1M2MxZDI4OWIzMGQzNTg0ZDM0ZWZiODg0Y2U2ZDFkNzE3NGEzYzIwNTA4Y2EwMTcxZWQ5NjEwNjIyZDQ1NGZkIjoiIjoiOTk4MGQ5N2M2NWNjOGIzYzYxYjM5MGU0OGFiYzY1MjMiOiI3NjIxMzM1NmUzNTllOTQ5ODRjZmE3ZGIxNTIyMDUxOCI6ImUwYjI5OGY3Y2QxMTEyNTI3YTUwNjIwMWUzOGY3ZTYwZDc2MmY1OTE2MDNkYjcyYWNhM2EyY2QxYjlkMTE1YzNkZGJjN2RjYjc2NDNmMmY0MGY1M2U5NmU2Y2ExNTkwY2EyN2FiYjc3YTYyMzQ3NTRmZjFlZGVmODZmNzVmZDVmMjk4ODcyYWQxNTQ0ZmI4OGE2MjkzNmUyMzhmMjJhZWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiM2M1NmJkNjczM2U5Y2Y5ZDc2NWYzZDU5MDZjNjA4MDdiZDFjOWMxMWY0YTEyOTNiYjRhYmFlZmU2YTY1Yzk3OGQ5Yzc1YTcwNDIzOWU1MDAzMTlkOWI0YjhmOWYxMjFjYWVmN2ZlM2M0OWY5YWIzNyI6IiI6IjM2NWYxNjEyZWNiNzhhZDdiMTE0MGRjNjYwODJhYjMwIjoiMGU1ZDIwMTM3ODIxOTE1ODFlNGE3NmUwYTJiNWJlYzQiOiIwZTUwOWI3YjQzNmQwODVjMTA4MGMzZDllNmVlM2NjNTYzOTQ0YmJhMGZhZDM1MmQxMzE4MmM4N2M4YzNhMGYwYmE3MWU4NjY3NjcyOWRhMGQyZjRhY2MyYjU3ZTQzMGI4NzkxYzRmMzBkMjMyYTBmZTQ4YmY5MWQ1ODI0MjQyZmI4ZTM2MzMzODM3MTczZDcwMmU2NzM4MjkxYjU3ZWZkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjkxYTQ0ZjNlNDEyZDAzMWJkNDdlYzg5MDdlMzJmMDQzNGEyMGQ3ODRkYjNmNmZmZDc4YjAxM2NhMGIwMDU1MzY5OGExMTNkNzVkOGViYmU4NTY1NTRjNzFhYTRiMGQ0OGFmNzRiYmViYzk3YWZhYjQiOiIiOiI5ZjRiM2IzZjFlMmQ4NDk3NTNkMmNlZGM4ZDhjNWQxNyI6IjY0YTFmNGQyYjEwY2Y5N2EyNjhjYWU3MDM0Y2E0ZDhjIjoiMjMyYWRlMzI2ZGUyM2VjOTcwZjY2ZTZhNTQwZjMwNmQ5NjI3NjlkMWIyNGIwNjc1MTA5Y2E3NTE0ZGJjNTIwMDNkMTU0Njg3ZjUyNWY0YTIyMjA1MDFkNmRjOTI1NTFkZjkxMTFjOGRkMzk4MzU2YzU2MGNlNDRmMTk1OTMwMWRlZGJiMTk3YzAxNjFmY2FkMDI5OWE5ZWVmM2U3OTllMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAxMjgpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiJmYmFhNWU2NWNlNTU4MGQ3NzQ3MzkzNDBlMDI1ZWFjNDY1NTBiNWQzODY1ODI5ZWFlZjliNTllYTM3ZDA5NDY5MmI5ZmQxNWNhMjU0NjhmY2Y3ZTM4ZjdkY2VjZDVmZDg1YzY4NjA1N2UxYWI5YmFiIjoiIjoiZjBlNzIyMTkwOTk0YzY2ZjY0ZmY3MjVlOGE5YjNiZTAiOiI1NDhlZDNiYmNjYzhmOWY3OWM3MGIyZTg1ZWUwZTYyNiI6IjJjMDdkMjk5NGZiZjBiYmVmYmJhZjYwZTBkYmM3MTJmMTJmOGRkYzNhYTZkOTRlYTllOWQzMDgzMjA5ZWMzNWM0Y2YzZTYyYmNlYjlhYjA0MmU2MDA1MDUyMGUwNDY5OTYxZGJkYWVlMDc4N2ZkYTZmMWM0OTc1NTg1NTc1Mjc1M2IxZTg3MDMxYTY4MjFjMDRjZGE4ODdjZGVkZWNjNTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMTI4KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiMTM3NDc0MjFhMTk4NTU3MDlmM2M0NjhhNWIxZjc3YzE5ZWI1ODlhMGIxOGMwNmRhM2FhZTAwNzhiODVlZTEwYzc5ZDE5MjVmNWFiMjA0NWVhYzFmMmZmZGQ4NTBlNzYwMmNkYTdkZWJlYjA0MmJlYSI6IiI6IjNjOTVmZjIyMWNjZjgyZjQwNDFmY2Y0ZThhNTZkZTI5IjoiMzQ3MWE3YWI0MjM0ZmM2ZTg2NzhkMzYxM2VlMTA4MzUiOiJjMzQ2ZWZkNDQzY2VjNmYyMWVjYTI2ZWI1Mjg5ZTBiZWM1ZWIzZjdjMzc4NTg0MmU3NjkwZDVkMzVlZGRjODdkNzkwNDFhYTBhOWQ1ZTRlZTllYzY5YTRiNjdiMjZjY2I3MGVlY2I1OWRmNTgyMzE2YjhmMWI5NDVhMjVjNjRiODYxYTZkZWNiNTlhZGMxNDQ3Y2VhMjE5OTQ3ZjZhYTcyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDEyOCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjRmNzJkODg0NjI4YzkwMjYxZmRmYTliODdiZGJiY2U5M2RhYWYxNzVkMDI5MGFlN2Y3MjVlOGE5ZjliOGM5ODgwN2I1N2E1OTFkNGU4YjJhNWI2OTJhNmUzMTBjNDg1MWJjNGE2ZDk4NmViYTljZWYiOiIiOiI4YjNhNzQwMTgwMGVlMWJmNWZkYzc2MjQzYjMxMzI0NCI6ImNjMTk5ZjRmNDMwMzZiMGFmNjNmZTNmOGVmNGFiM2QyIjoiNjk1MGE4OTc1OWI1MmI2Yzg0MTY2MDBmOWUwZDU2ZDE5ZmFiMTJiNDIzZDc0NmFmOWQwMGE2NjU3ZjNiOGYzYTM2ODFjMDkxMDM0MzU2OTU0NGI4YjUzNzI5NGFhNjEwZTg5Yjk3N2M0ZGIyMWEzMjQzMTc1ODdiZThiOTIzMmIzOGQzNTRlYjNlNDAzMmNhY2Q1NjFkZmU0MmU3MmQyMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAxMjgpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI1OWMyM2I0MDczZTdjOWQyODcxZDVkODgyOTUzYTMzYjE3ZWIyYThiMGI5YjA2ODg3MGMwNzBkZWI5ZjEzMjRiOGZjMjlmZGI2MTJjNTJkZDMwMDg4OTkxM2FiMTIwNTM2Y2Y5YTM4OTQ4NTg1OWJiIjoiIjoiYTY0ODNhOWU1MTEzYTQ1YTg0ZjY2MzA4NjkyOTE0NjEiOiJiOTNiYmI3OWRhNzc1MGY0NGU0NTYxMDgxYWM0ZjI5ZSI6IjZhMjk4ODU2YzliMjViMjBkZTAxNTk4OTAxMzViZWRkYzQxNTgwMjMwN2I4NzUwN2Q2MmIyYWQzMmIxODgzZTRiYTAzNjMwOGE2NjY5YTA2MjQ2ZDRhZmM0M2EyOWUxODNjYTE0MWYxNTZmN2IxOTc1MDk1YmYxNGNjZWFmNzFjZDI4MzFmYWM4ODcwZDkwZmUwZTEwNjc0MzQ3ODNhNWUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMTI4KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiYTRiNjIwYWJlMTlhZmY1NzZjZGRiOGY2ZDFlODNiNTljMjZkNGJhNzlmYjgzNDY5NzRjYTg0MWRiMzNlMjgwZDU5ZTI4ZTExMGNmZWFmYzRmMDMzYzZhNDVmNDQzZjUyOGEzMjZlZDRjMmRlNWNkOSI6IiI6ImJlMjY3NjBjZmMyM2MwY2FkMWFkMDk3OGMzZWM4ZjA5IjoiZTc2N2NjNjY5NDI0MmIwMDNkNmQzNzk1NDE1Mzg5YjgiOiI4OWQ3OTIxMWRiNjk2NzljMjI2OWRmYjJlNTk5NzQwZmY2NDZlYjllYmQ1ZjI4YTY4Yjc2NjY1ZTYwODdkMTVmYjg4OGJiZjg5OWUzZDE2ZDcxMWMzZGI2M2UzZGJmOWNkOWJjYWFkNjk4NGJlMDRhZmU1YjQxYzIyNzA0MzE5NDhkZGY0NDg2MjcyZjEzNmYxYzViZGYzN2NkMmE3MGU4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDEyOCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6Ijk5NGU0NTVjNDgxNWZmZDRhOWVlMTY4ZDFmY2NkM2I2NjFkYTgyN2M0ZTgxYjEwMmRiMGIyODk3N2M4MWJjNGRkNThkMDY4MTllMjkzOTg4Mzk4M2Y5ZWJmMTM1NmIwZDAxZTZkYzAyNzM1NTk2Y2EiOiIiOiIwMjljYWE2NjU0NGY2YWU4ZjZjYzViZDM3OTFmODZmMCI6IjdmMTRjMDVjNWQ4OGFjYWZhYjIyMGFhNDY3ZTNlM2NhIjoiZmRlOTNlMTlmNzFmYTk3ZmMzNjhmNWY0NDU0ZGY4YTM5YjNmY2U0MmJkNGE4MDE3MjZiMjk2ODM4YzNkY2M2Njc4YmIzODc2ODdlMmM5NDNlZGFiODY5MDJlMzc3YTYxOTk1MGQzNmZlNzhjZDdiYTNjNjdhYWVjYWZkZDlmN2ZhYTIwNzZkNzFmYTc5NjQ2OTMzMzg3YmQ2YmVlMTQ3YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAxMjgpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIyNzEzZWIwNjNkMzg3NmRkNmMzYTU5MDNhMWVmNTc3NGExODBjNDEyM2VlZWVhOGE0YWE0NzJjZjA3YzI3OGFjMzY3YTlhNDkwYzdkZGVmMDU4ZDZiZjM0ZWM5ZGIzMTRhYmIxMTlhMWEwMTdhMTdlIjoiIjoiNDQ1MjM2MmVlZDZiOWMzMGEwMWY3ODRhOWEwNmRjNWQiOiJlNTk3ODBmMjkxNDYxZDI2NjU5MjRmM2FmOGJjYjZlMCI6Ijc0M2Y1MjliZWUwNDhkMGJlNmYxMGRhMDEwMWM2M2M3NDZmYmVlZDM3YzZjZDBjMGFlOTc4NTQ4OTNhMDBjODJiNjVhY2M5ZTZlNmVjMDQzNTdlNWU0YjMxNTlhNGVmM2U1ZTU3YTM4ZGEyZTAwZjBlYjNjMTUzOGEyNmVlMWE1MThmNzExNjlkNTliMGQ5ZThhMDIxZjNkNjIzYjhmYzUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMTI4KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImZmMmNiNDkzMGQyNmIwZWU3NWJkOWVkZmI3N2UwOWY1MGM4MDA0OWY3NWJhOTVhNTEzN2VhODYyZDA4NmQ2NTIzYmRmZGUyMDNiYjhjMmE5YmI1ODhlZjI0MjhhMTczNDUzMTM2YmRlZGVjMzdlYjMiOiIiOiJhNTI3NzVjMDY2YjZlOWY3NTA4YjMwY2EyMjk0NDI5NiI6IjVlNGFkNTU0ZTY1YTQ5Njg1ZTg1MjdmOTIzY2JjMGNjIjoiNGU5MTM0ZGI4MDliZDA3YTQ2ZjQwYmMxYTFmNmQ4MzA4MDgxMjFlZWQyNWQxN2Q3Y2UzZWI4MWJiODhlYzY2MGI3ZGQ5NDVlYmU5ZmVmOGJkY2NkYTkyMTM5ZjQ3NzBhYjhhNDY3ZTAxMThmMjQ2ODBjNmY2ZTViOWFkNmVlOTRhMDg2MTE4YjZjZjY5YWNlYjhjZDgwOWQ5MTQyOWFhNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAxMjgpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiNzI5NzFkMTNkNjM1NmU2OGZhNjFkOTRhZTFkNzZhOTFiNjlkOGIzOTQ5OTM5M2ZlOWViMjg4OWQxNGQ5MWE3NDg4MjA3YmQ4ZWU1MzZkNDgxYjM3MjM3YjA5OTVhMjE4ZmI1NmRkMTc0MDMzNTk5MiI6IiI6IjBlNTliNzRkNGFjNWFiOGJiNTFjN2Y0Yjk5ZmY4NTllIjoiMjMyZGVjNjA2MjhhNDMyMTZiNzU4MzlhYzgyMGZlNGQiOiIxZjFhZGI4NWI4ZDdkMWUwMjJkNWE2NTk0Y2UwNzQyNDI2ODM5OTNlZTRkM2M1MTY2YTJhYWY0MGMyMzk4MzA1ODdiMTExMmFmMmE0MzEzZTM2M2VhNGE5ODBiMDZmMjBjNWVlMzIwN2RlMDI2YWFlYTkxOTdjOTVkMGU3NzFmNGYxNmEyY2FiNDFjMDY4NGMxNWU2NDYyY2I3YTVhNzFhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDEyOCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI5NzVjMTA5MzNmNzM1MTI2MmE0Mjk2YWE2MTc1NDcxZmEzNGU3YzliMzQzN2I1YzcwMTNlMjJkMmE5MDAyZTllNDJkMjcyMDJlMDUxOGI1M2RhMjMwMTZkMWY1YjdiNjNjNDZjMTM5MTg4NjkzNGQ1IjoiIjoiYjcwNjNkNmJhMzc0MGQ1YzI1ODMwM2Q1MzkzZjhmM2IiOiI5MTYxNzgwYmE2YmVmMDVkYTcyOTBhNzc0MTY3NjdiYSI6ImI2OGI0ZWJiNjg1NmFmNzMzNzc0NWUwYTUwY2FhMWQzNGFiZTI3NTk0ZDU2ZDg0Njc5NGMxNWJjMDM5NzNkNjdkNTQ4YmJkMjY4MGRjNzQ5YzUxNzEzNzJlMjdhZjE2OTAwZDZiZjcyOWE4NGU2ZDc2MjY1NjNlZjBiNGM5MGMyNzVkOTExMjU2N2I4Y2E2ZTAwOTNiMzRhMDk2NmYyN2QiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMTI4KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImUxZGZhNzk5OTAwNmFlZTEyYTIzNDlhZTFkNTgwZjVjYTJhNDM3ZGMwYmMyOTRmNDQ5ZjI2NzBhZmM1NWU4ZmE4MTUyYzc4N2EwMTQ4ODBmNjcwYzU4NWNmY2E1NzRlYTJkMTNmMjhlNmEwZWE2NzciOiIiOiJkNzdhODMwZjY1MGEzMzMxYTcyZjBhNGIxNDcxZGFiNiI6IjM3YWVmODFlNzI5ZWQwYjkxYmYwNTRjZTk4ZGY0YTc2IjoiYzAwOWE2OTJkN2U1NjZiNThjYzU0YTQ1ZjdkNjk4N2E0OGQ5NmMzNjY0ZjYwMzRhZTNhYzBkYWU5ZWQ1YzIyMGM0NmVmMGM2MzhjNzUzNTNhYzc5MDEyNGQ4OGNhNTRmZTQzNzk3ZjFhNzA0MjI2MDQ1MDdhMmFiNDU4ZmVkNTc2Y2NmNmQyNWNmNTIxZGE4ZDBjM2I3YmZhMTZlZTZmNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAxMjgpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiMzEwZDhkMDg2ODc1NDVlNDg0OTNkYjE3OWU2ZTkyYTE3NmNiYTUzZmYxN2NkNzgzYmE1ZDM4ZGE1ZjJlNTE0NjhiMGE5NDg5Yzg4YjhkYjBiZTRhMmM4N2M4NzViZTBlMWJlMDFhYWRmMmVmZWVmNiI6IiI6ImExODI0YjA3ZTBkMmFkYTBmYWRlYzI5YmViNTNhOWY3IjoiY2NkYjNmN2Q3ZjZhNGQxNjlmNWYyZTI0ZWM0ODFmY2IiOiJiZmNjOGYyZWNlMjNkMjI1NDVlYzIxNzZhYWJkMDgzODU1OTIzY2E5YTY3M2I1NGI2NmEzZTI1NjIyMTJhYWQzY2M3NGM0Yzg5NzZkZTI1OWNjOTVhMmYwOWE4NWI3YWNkMWYxOGMzNDNlZmYwMzY4YTgwZTczYTU0N2VmZGNkOTU0ODE2YjM4ZGYxYzE5NTU2ZDcxNDg5N2UzMTdkNjlmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImRiODEyOGMyN2VhZjNhMzlkNTAxOTc4NWFhMzViMjBjMzk3NzQzN2ZkNzVlODAzMmVkMzQwZGRiZTFiMjllYjliZWRiMzA0OGEzZmRkMDZhYTk1N2M1Y2ZmMDBlYjg3NTQ5YzMwNzQwMGQ0MDU5ZDAiOiI0ZjgwNjA1MDZkYWY0MDgxOWM3YzU4NjMwMTUxZWRjNyI6IiI6IiI6IjRhYzkzM2I3ZGU4MDNjMjY2NDYxNDkzYTE5ZGJiMDBlOWRiMjVlZTc2ODE2NTc4MWZjOWE3MGM2N2M0ZThhOTJkYjM2NDcxZTNjYjE3MTRmYmI2NWUxN2Q3NDc3MDA2MWIwYWJhZTUyYmUzNGE2MDRkODdlNTZhNGFlMWU5MGM2NTMzY2M3NjRhYTc0MTliNTQzOWUzZWZhMTkzOTM0YmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiODdjODBhNWUzMzRlMDJhMzZmNTkzMjRiZWZiNGZhZTE5ZTViNzNhZWY2OTFkNDVlODk3M2Y1OGE0ODdiNDU3ZDczYzQzMTJmZjg5MGIwNTM0NzJkOTVkZTUzOGYxNTEyZjY0MzIyMzNiN2Q5YzA1OCI6IjZjYzU1NTM0MzQxNDg0OTlkNjVmOGU0YWI3MzM0OTM4IjoiIjoiIjoiNWNjZGNiM2QwMjJlYjRkNzJjMjExNTk0YzkxNmRkMmQ4ODNkMmVjYzE5MGY2ZTc4ZWQ3NmY0Mzg1NjIwNTllNmY4ODAwY2U2ZDExYjNiODYwMzI0M2Y0YTU2ZjM4ZDQxNjcyOTM1YWNlOGQ2ZmFiODI1Y2I2OTc4YTJkMDgyN2FhNjVjNzA1MjNjNDhmN2I5YThmNmZlNDNjYzJiYTkyNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI4M2MxMTNkYWJkNDMyMjlkNGE3MzMzMTQ3YzdkODRmNDhmYzI5ZWEzZDgxM2MwZjFkNDVjNTE4NDkwNmEwMmVhNGM2ZjExYjE0OWRiN2Y5ODgxMjkwNGJlM2VlOTZkZTI1YWM5YTc4Y2NkZmRkZWIzIjoiNzdkYzQ1ZDM3ZDZkNDAxZTQ1Yzk4MmYyYzQ5NjBmZDYiOiIiOiIiOiJlNGYwODA4N2VhYWUxMWZjYTk0YmQ3ZGY4MTY5ODBlNjYwOGUyMDgwMzJmOTQ0ZjFlZmM1MGFjOGQ0NzgzNGI5ZjEwYzAwOTU4ODM3NjMzZTYxZjNlZDIzNTFjNjg4NTQ0NmI3MmQyNjM0YmY2YjY5ZjlkN2I3YTM2ZjNmYjhlOTgyOTRmMWU5ZDkyYTRhNzI1NDYyZTYwMzI1ZGM0MWNhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImFlYzgwOWMxYjdlZWY5MTY1NjljY2EyNDdjZDllN2IwNzJkZjY2OTQ1OGM4YWY0ZDI5ZmVjYmEwYzQ2MTMwYmE5MjBmYzhiZjdkMjljZmFlZGE0NzY2MDdmMzMyNTU2NmVmNTJmYjY5YTNkZWZjNTQiOiI4MjRiMTFhYzdlMTNmNjU0ZmY0MjM4ZTBmMjhhMmY2MCI6IiI6IiI6IjUxNGYxYWRhZWI5OWRkMjgzM2Y3MTRhNTM4MDRhY2E0M2E5OWZjZTQ1Y2FmNWRiMTY2YjE1YWNiMDQ2MGY1ZTdlMjNjNjk2ZmRhYThlY2QxMzhhOTM3MzY3NDgzZGM3YmI3YTZhZjUxYTYxMWFhN2IwNjcxNTU5YWVkMTQxMDkxMzM3MzhlMDZiZjIxOTBiYjg1YWJlZjNhNjc0ZTQ4OGEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiYjJmNWNhY2RmODcxZTc0MmMyNjJjNzY3MWI1OWE3NGM2YTQxMjQyYjIyMjVmMjUyY2JhN2RiM2JmNzdkNjYxOWFmNDY1MzJlYjljMDFiNzJjZGUyOTc4ZWMzOWU0ZmU1MjQ3YWM1ZjBmZWE1NTlkOCI6IjJjYmZiOWJjNmMzMTgyMTlkZjg2ZTA4YWIxMTQxOWUyIjoiIjoiIjoiNjdkMzkzYzg0ZDA1OTgzZjVhY2ZiODg4M2VkNDRlMjQ0MDZmMjE2ZWZhM2Q2NjUwODA3ZmFiZDMwMjhmYjFmNzYyZDZjNjdmZmIwYWFiZTgxNDNmZDNkZGZkYThjYTJjN2VmMTM1NDZkY2ZmYzRkY2Y5NWI2MTBhMjhmN2NjMmEyNWFjNGU3ZWMwOTQ0ZDY1NWM1NmMxMTBmYTkzMWZmNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI1NGVmNTRkMDQyNWY4Y2ViZDEyN2ZlZDBmMzk1ODg0NjEzZGMxOTQ2MzY2NGQxOWQwMmFmNmJhZjA2ZGUxMjZiNTVmYmIzZDdmMTE0NzI4YmI0NjUwODM5ZjEzMzVmOGMyYzNiZTE4ZWEzYmVlYTc1IjoiZjBjZWYyNjBhMmY3NGE0MjVkMDYyYmIyNWM2OGM1MzkiOiIiOiIiOiJkZDhiOTZhNWYzZmJkMGY1ZjY5NDc3YzViN2U3MTA5OWIyMTEzODg4ZmNmYTZhY2NlNzEzYTEzZjA0MGIwYjVmZDU1MTAwYTNkMGQzYTM0NDcwNmEzMWU3OTZkNjk5OWY2M2NjNjM1N2Y1YmEzODZmMzhkNDZiY2E5YzQyYTI1YzRhMzlhZmRjN2RiOGQ4NDNhMDMyZWYzNWJmNGIxNWVmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjRhMTc4MWM0ODNlYWUwN2UwYTlkZGQ5MWI5MDhmYjAwYTIxYTRmNWUxYzZlOWRhNThmMzgwZjQwN2RiY2M5ODJjZDA3NjFlNWYwZmQ2ZDMzOWE2NDZiZGM2MTMyYWRkYjdhYzBjZGVmYjFiOTFmN2QiOiJjNGI3MDg0ZDczZDM5OWMxMjhlMGExMTkyMTdjNzkzZiI6IiI6IiI6ImU0NjVjYmMxNTAyNzA5NDkzZGUxZDMzNDdhMDdmODU1YjJkZDY0MzVhNGViYWFmMDBlNzc1NmMxNDM5MjE5NTQ2ZTVmYzY3MDkzZjBlYWMxMDU1ZDIyMWZkZTUxMjk3Y2RjOWZmNDExMjFkNTgyNTE0Yzc1ZTk5MDY4NzBmOTlkNTg4MDZmMTg3M2YwMTgzMjc3NTEwY2YxZjA2N2E4NDAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiMzY5NzRhN2MyNzZlMThlZDI3MDRlZWRlZjZiNjI3ZjhlNTdlNzU1ZDU1NGI4MGVmZDBmMDY1YzIzNmY3ODk2NGNmZDNiNjYxNDA1Yjk4NjQwNjMxZmRhMTlmZWZhOGI1YjAwM2U4Yjc1MmVmMDYwYiI6IjYyNmE4YmMwZDFmYWIwOGM4YzZhZmNkYzNkYzZhYzMzIjoiIjoiIjoiNmI5YWUzNDBlNWU3NWUxZGNmNmYxODE1ODlhMWZkYmEzOTUxNDE3YzMwNDY3YmU0YjQxZTlmZjRjZTAzMDczZWYxYmEwYTE5ZDE2MGFiYzhlNWUyM2VkNDMzYmNjNDIxZmYxZjQyODc4MDQ1NGRlZmI2NjUxMWZjOTQ3OTRmM2VjMWM0OGMwMTRkNzgzYmIxNzNkYjEwMjI3NWI2NGIxZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIwNWY5MzRkNjY4ZTk2MzBhMTMxYWM1MWUyNTYwZTQ1YTc4Y2ViOGVmNmZhZDcxOTAwNDVjZDk5NTAzOWJmYjNkYjYyNGY0Njg3MzAyNDQ1ZmFkMDg4Mjk4MTVlNzQwN2ZjOTYyYWZlMjc3OTU4OWY1IjoiODUzNjIyM2VlMDE4NGViNDNlODRhMDdjZjcxZDQ0NWQiOiIiOiIiOiI5NzE0MjQxNDI1MjU1NmY1ZDVlZmFmZDM5ODUyZDdhODRlNzAzMTZhMGFmZjc5ODVlZDY3NjE3OThlZWM1NzYyMTI3MTk3N2JiOTUwMTg3YTI5MGRkNGRkNTE0YjdhODAxYzk4MTAzZDRmZDQwMTJhZmRmZTBmMjY0YmZlM2Y2ZTU4NDc2ODUwMzgzMWVhMDIxMWZlMDQxNWEwZjU5MzI0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImUyZWU1YjM5NzBhYzRjYjgzMDYxZTU2OTJiMzQ5ZGY4NjQzYjYxMDBhYWM1NWFiMjk2ZmNhZjdhMmVmN2UzYTFhYTU0YzNmYjE5NjNkZmQ5Mzc4MWNhMzRhOTVkNmZjMzI1MDc2MmJkMWQzMWIwYjQiOiI3MWE0MzE2ZWE4ODM0MWRjZjNjOTI4MGE1Y2I1NGI3ZiI6IiI6IiI6ImJmNzY3ZWQ3ZTVmMTFhYmYxYTZhYTVjNDUzZmExMjQ0MDEyOTdlMzJmMjMyNzBjOGQ3ODQyM2E5OGY1ZTY3ODNmM2U4ZTgzNWFhNzM0YjM2YzJmMTFiZTMwYWNmMGI1OThjN2EyM2FjNDBjZTg5NDY4OWEyNGZkOGRlM2UwODEyZTlhNWNjMTc5MTA5MWM5ODFiZmE5ZWMyMTY4ZGFmOTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjMyYmQ2MGRmNWUyYjQzNWM5MjJhOWU0MzRmNWY5OWJlOWM1NDM3ZmYxNTljN2U1ZTY3YjgxYjgyZjdiNWVjZGY2ZTYwZWM0Nzg5ODIwZDM3YTEwNzFkN2I5MWNmMWUzZDE0ZjEwZWY3ZjM0OTIyY2QiOiJjNzU5ZTRhYjZjOGZlOGExMWExZjg0NzJiMDZlZWUwZiI6IiI6IiI6IjMyOWNjODExMDUzNDNiZDc0ZjI0YzBhNTliOTcyODkyZTc4OWVhMjBlNDZlYWQxYTc0ZTdhZjAzNmE4MzZkNDZjNzA0NjFjNTJkZjUwMzgyODJlNTNlMmRiNDQxNDM1OTBkNjAxNTgwOWRiNTY3NTRiNzc4YTJhNzI3OGQ1MDUwZWVlYzkzMzJmZDczMmM5YzcxNGE2NzY1NjNjOGMzZWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImFjNTI0ZWMwOTc2MTY3MGI5NjU2MzgwMzIxOGE3ZDM1ODliZDhlNjgyYjJhNWNlZjY0ZDk2Yjk2OGVjOTg4MzlhOTdhNDcwNGE3YTViMmI4NTlmM2VkNmMzNzAwMzFmMTAyN2RlZjhmYTA2NzJhMjYiOiIxNTMxYTE3ZDNkODljMWQwNzc1ZjNhNjMwYmE3MzBiOCI6IiI6IiI6IjQ3ZTNiZmFhMmNiZTRiMDg1NjAzOTkxYWE3MzkzNjNhNjM5YjA2NGRkOTEyMGUwMTQ5Y2I1YmEyYmEwNTM5YzQxNDc4OTdhMzRkOTg1Mzg5MzVmZTI1YWIzNmNmNTBmNmExYzNhYTI4OTJlMmMwNjU5MWU0YzJiY2NmYTk5MGY2MzE3NzMyZDU1ODE5NDRjOGQyZWY5NmQwMzI5YWM1NzQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjJjOWE0M2VmMTQ5NjM1MmVhNjJjZWQxYzM0NWRlNDA5MGE5Y2VhNjg5OGI4YTUzYWJiMmYwMWE0MzVlYzZkMjA1MGE2OTJiNDRmYTE1MmJmYzQyY2U0ZWEzMGVmNzYxMjk3YzFlZjEzMjgzOWQ0MTEiOiIwMGJmYjJmZjI2MDBmZTFkYzZhMmQ4NTY0MmU5ZWNlZCI6IiI6IiI6IjE5M2QwOGJmYjIyMTIxZGViMjJlODA3OTg5NTcwM2UyYTUxOGI3OWJmYzMxMDQwMzhjMmEyMjBmNmJhYmViOGYyOGY1NjUyZDVkMWIzYThiNDY4ZDhhNGVkMGNiMzJjNjljNTUxOWRlZDg1ZGRjMGZlYTYyZDc3ZWM1MTU4YjZhNTVjYWVjM2JiZGYxZjZiOTNlNDQ5ZDZmMTVjY2UyNmEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjBmMTVlYzBjOGQzYzE4NGQ5YjJhNDdiZjlmZmEyMDk4MjY4NTE2MWJlYzkxZmFkMmM1NTgwOGNjYWZkNDZlY2QxODA4MTczOGNmODM1ZTEzNDdlN2RmN2UzZjg3OWYzZmJiNzU5YzIwNTFlMzQyMTciOiJlYWVmMjcyMTU0NjdkNzg3ODEwNmJhOWRhZTk5MGJlZiI6IiI6IiI6ImJjZjc5YWQ1MDIwMWYzNDk4Y2YxODI4OGRjMzBjMzJkZmJmMjczOTQ5MGM3NDg2MmQ1ZTljNjZiMTYxOTU1OTAwNzVjZmUwOTQ5NTZlMmJjYmEyMDA5YjY0YTVmOGI2MmQxNDQxNTgxODA4MzVhN2Y1MWI3MDZhMTI4ODRlMzA5YWI0ZWMxOThmNWJkMDdlZmZmZDU5MWQ1Y2M4NTY5ZTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjU2YTBiNjE5NDE1M2UwZDI3MzdmNDlmNGU1Y2I3N2JhNGQ4ZmJmOTkxNDQwNTgzM2YzMjRjMDlmOTY0MzRjZWVhN2U3NTZmYzJmNTVhMGIzZjA0M2I2ZTExZmMyZjY3MWVjMDBmNGQ0NzhiNzkxYzYiOiI4MWE4NWNiMmI2YWZhOTlhMWY2MDlmODNjM2IxNTEwNSI6IiI6IiI6IjQwZTg3YjgyMmIxMDAwNDQxODg0YTM4Yjg3NzZiYWE2OWZiZWE5OTk2MjU3MWU4YTIwZDhhZjAxMmQ1MGM4YzIxMTg2MGFkNTc5ODY5ZWM4ODAzMjBlYTgwNTdkNWNiMGRlOTQ5NmVjNTdkOGI1OTRjYThiZTViOTQyMTllYWE4MDBhZjcyMDVmOGE4M2I2NmM4N2UwZmVlOWFhOTczMmYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI2ODBmYWNlOTBkN2JjYTIxZDRhMGVkYjc3OTllZTVkOGI3YmU5ZWVkZGQwZTNiNGI3Y2FmZTIzMTYzMGFhOTVhNzQyYzRlNWY1ZjIyYzZhNDFjMGQ3NzkyODk4ODI3OTQ4YTU4OWY4MjJkMWFmN2E2IjoiZjU4YzQwYWU3MGY3YTU1NjQ4YTkzMWEwYTkzMTNkZDciOiJkYzM2NjNmMDYyNzg5Y2QxNWNiYjIwYzNjMThjZDlkNyI6ImZlODViMGFiMTRjNjk2ZTY5YzI0ZTdiNWExMzcxMjBjIjoiNjgwMDRiM2EyOGY3ZjAxY2Y5ZTliNTcxMjA3OWVmODA4NzFiMDhiOWE5MWJjZDJiOWYwOTRkYTQ4NDgwYjM0Y2FmZDU1OTZiMGMwYTQ4ZTE0OGRhYmM2Zjc3YjhmZmFmMTg3MDI4ZTEwNDEzN2E0ZmViMWM3MmIwYzQ0ZmU4YjFhZmFiYTViY2ZkODY2N2YyZjU1YjQ2MDY2MzJlM2NiYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImI0ODEwNDFhNzViMDNjZGFhMDc3ODRlMzcyYjM3Njg5N2ZhOWU3OTJlMWZhNWUwNzhkNGM3MjM0ZmI5ZGMzZjk4MDRiNGU0OGEzMmE1ZGI3NDk5MDMzM2M0OTUxZDAyODIzNzY1ZjkwYTBhYTg4NTAiOiJmOGYwZjFlZDNmMGJkYTE2NGU1OTZlYmUxMjNiN2Y3NSI6IjMxMjBlMzI5ZjFkNTVhOGMwN2U3NDcyYWM3N2UxNzIwIjoiMmI5ZmYzMTBlNjNjNjdiNWUwYWViNDdmZjdhMTAyZmEiOiI3ZDZiM2FiODRiYjZjMDE0ZGQ0NGViMTI2NmZiMzk1NGYxZThmZjZjNDhhNGQ5MTUxNGY2ODVmMDY0MjQ5N2NiMTkzNmEwYWZjNDBjOGRkZDE1NDUyMDRlMTI4ZmQwNmQ0ZDE4YmJhMDVkMTI5NGU2NGQ1N2EwNTkzYjgwM2EzMTFiMzdjYzJkNjMxNDg3YWIwM2EwMGZlMjg4ZTVlNzQ1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiYWVmOWQzMTBjZmNlZDI5ODczYjdlMmI3YmUzNzU3MmI3NmVkODRiMDQzMzY0Y2NhNjExOTE3ZjliMTIwNTNmOTE5Y2RmNjBhYzljMGIzNjQ5MDlmMDk2MjA0ZjIxYjU4YjBiYmRjZjM4YTNiZTdlOSI6IjY3ZTVhYTgzZmE1NzJjYTI3YWNmY2QyN2Q0ZjVlNDliIjoiN2FlOTBmN2RjMjIwYmY1YjM4N2VkNDRjMjQyNWFmMjkiOiI5ZDc1MGRjMTNjMTlhY2YzY2RiYTEwMTU1ZDNjYTVhNyI6Ijg5Mjc3NmJmYjAwOWZlMGIxNzkzYzBlYmIyYmE1NDljYmNjNGEyOWQwMzc0MDcwNjgzOTkwYzNmMmM2MjJlZTA4OTc3ZmU5MzYxYzU5ODM4ZjA2OGY2NzU4ZDdmM2Y3NmMzODNkOWY1OWRlZDg1MDFmMjVlZmY5YmU0YTFlMmRlM2VlNDg0YTJlODA2OWM1MWU4ODZhNzVhMjI5YWUxNWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAxMjgpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiJiNjg2ODZiOGNmODE3ZGE5YzkzY2ZjZDdhYWU0MTBjMDJkM2E4ZWFmZjU3YzZlY2Y5OTBmMjBmNzBjNTg3MTY2MjkyYjVmNTZjZWYxY2NjNTAxOGMzOGE2MDJmODExYzdjZGMxNmVkNTlmYWFmNDA1IjoiMDNjZDU5ODU4NWEzYTgwZjlhODFlMjc4MGM2OTkyNjkiOiJkYzc2MTI0NmUwYTc0MzM5YWRiNzZjNzI5ZWMxNDE0YiI6ImIyOTM2MDIyOTIyMjAyNzU3ZWFlNGU1ZDU5ZWIyOWUzIjoiNmU5NzM1YjgyYTlkYTIwNzRmOTNiNTQ1ODBhZWI3NmJjNzUyNjVlNTI1ZjFiNTBhOGVlMGQ2ODUxMzE3YmViNjRmNDc3ZjNiMzQ1N2NhOWMxMjBjZDhlYWI2ZDM3NDAwYWU2MjMzMmJjOTFjYWI4MDNiMGM0NGUwNzA2NjZmOTM4OWE5ZDBmYmU4YmFhYjljYzVjMGNkNTRhMzk3YzhlMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImNiNjhlYjk1YmIwMGJlYjg5NjA0OGQ1ZDMyM2Q3Mzc5NDJiMWE0Nzk1ODA2ZmM2YmJjZjY3ZDE5NTg2MjE3MmY0OWJiMzE5ZTYwOTk2NWZlZGEyOTM3MTY1YjhkZmZhNjU2MGUxZmQ0MzRhNWVhMGYiOiI3MDBkYzc3MjUzMjFhMGEyMWE3MGZmNmFlYmUzMGQ4MiI6ImQ1N2MzZGZiY2IxOGUyODBjZWY4MWM3MTE4YTUyMGYyIjoiNmU1Njk3NzZiOGEyNmQ4ZTdkM2M4N2Y5OWY5MzJhYWMiOiJiMDE3ZWI5OGM1ZDc4MjQ2OTY1OGQ0NzU2OTQ1M2I4MzIyYThkYjdhMmFiZTc1YjRlNjg2MzdhMzk1ZjdjNjdiZWU3NWE0MmIzOWRlZjNhYWNiMGIxYTAzNjc3YTBiYjRkMzEyNTc5NjRmNDY3YjdiMzk2MmQ5MTJkYWY2ZDg0NDFlNTk1MmFhYTQyN2MyNDZhMWYxYTYyM2E4NDk4YTUzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMTI4KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiODFlN2VjY2Y0NmFjZDE0NWQ0MzViODBmMmE2ZTcyZWIxYjIzNmQwMmYxMjU1NDI3MGMyNmU4YmExM2U5MzA2ODU2ZDYyMTlhZDA0YThmMWJlM2ZhNDM2YmYyODBmNTc5YzIyYjY0YzkxYWM3MDBiMiI6IjMzYTE4NmFmYmM0NGYzYWRlYzU5MGQ3ZTM2YmQ5OTA1IjoiYmNmZDk5ZDY5MzFlYTlkZjY3OWQxOTZkODQxMmM5YWQiOiI2ZGQ2MWFmMGY1MDc3ZGY1MzFjMTUxZjJkYmUyYmFkMiI6IjQxZTZjZWQzNGE5N2FmZWU3MjE2NjIzOTQ1NWQ4MmZlMDIwZjU0NjRjY2JjOGU4NzVlMDZhMDU4NzVjYTg0NGQ4YjdmYTNlYzM2MGQzMWFlNTdmNTMyNDVlN2M0YmVkNTAxZWJiNmY5YjRhZjM1MGZmOWNkODZhNTcxMzYwODA0ZDNhMzRiOWRjMTFlYjRiZTY0MjdmNTIxYmQxNGY4OTMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAxMjgpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIxYjc2YmI4YTBkYzcwNjdhZmExOTNiZjVkYWUxY2Q3YzAzZGNjMzdiNTc4OGQyMmZlMGY0YWRkYTk5ZGM2ZDc3NmZhNTQ1YWFiZmI3NjcyNTUwMDEwNjNkZGQ5OWM3ZWY2NTZhMTZlNzYwNGM1MTAyIjoiYjA2YmI2ODNkYzUwMThmMDY3OGMxNGI5NzU0Nzk0NGUiOiI4N2VhNGY3MTM1NjJiMTI5MDc5YjQ5OTU2ZWI4OGFiYiI6IjU2NTBlZjI4MTMyM2I2YWNlYzM0YzUxNzk1YzY3MTYwIjoiYWZlYWUwMjhhMzU4NzAyNzQzYjE0ZGQ2NDQxNGQzMzUwZWIxZGU3ODcwMjY3N2UzMGY3ZmY5ZTcxZDZmOWIzNjhjNTNlNzliMGEzNTNhNDNlYzA2ZTkwMjBjNzIzNDIzMmEwN2Q1MDRjMTYzZDdhOGE2MzQ5NmJkYWY2NzBlZmNmMjU5N2I2NmJkMGRlYTJiODI3ZTBhNGNlNTEzNDI1ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjExN2FkM2Y2ODI0ODU1NWEyYjk5NDFjZjBhNTY3MjZjYTE2MmJmOWI1MzFmMjZlMzQxNmJlMDA0YmNjNmZjMzViZTgzNjJjNmRiZDk3NzFkNDJiZDZlMTg3ODY4ZDU5OGY2ZTI2NDdiNTM2Yzk3MjgiOiIxNjE2OGMyYTU0ZDhkZDcxNTBjZDdmMTIyNDgyYTcyMyI6IjRlNGNiMDAwMWM1Mjg4YzE1MzhkY2NiODBiZTAxZTQxIjoiODE3N2MxZDRkZWY2YmRlMDkzZjI3YTk4OTRkMzQ1ZWUiOiIxZTQwN2RkOGMxZGQxNDM2MDY0ZjIwMTVlYWI5YzVmYjliODhiNmRkMDE3ZTExOTZjZTcwZmQ5ZWM4NzhhOGNiMDJlMmQyMjFmNDA5NmU3OTk4ZGJmZmJmMGIzOTJlN2Y0ZDk3ZTBkMWNkZjgxNzU1NTA3YzA0YjVhNjI1NDA4NmI0MGQxNTNiMTBmYWYwMDExOTgwYmMwOTExMjc1MTQ1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMTI4KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiNTRiYWRhMGI4OWQ5ZjViYmVhNzhhYThjNDA5ZGNjZDAzOWFjZmQ3YjE2NDVhMGVmMTkzYjYwY2FjOTcxOTZlNGNmOTc5NWZlZGU5ZDg5OGQwODJhOTczMWE4Y2UyMTY4YTEwNDIwYzVkNmJkOWEwYyI6IjFjOGZlYjE0OWQ5OGZhZjE1YjczNjIyMTY3MDY0MDg4IjoiYTcxZWU4YTUyMmQ2NzE5NGJkMTc1NmMyZTI4OTgxMTUiOiI2NjllZjA3Njc5ZjMzNmY1MjkwNTg2NzJmODYxYjBmMyI6ImQ3MmQ0M2ZmODcwNDI0OGEwZDU5YTExMWI2NDEyOGZhNmJmZjI2NWM1MmJkYWUzODUwN2NlNWYzMDIxNThiZTkwMmQ4MzgwZmUyNDdhYmMwMjc1ZGJiYjUwMjg2N2Y3YWQxY2RkZGUwZTQwNGZkOWQ2NGVjNDk0ZGFhYzVkMDg4NDAxYjRkYTY5NmY0N2EzMWI0NDM1YWJiZWE3MWMzODciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAxMjgpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI4Y2Q0MDdmYzdhMzYzMTVmMWNmZWYxNDg5YTJlY2RlYzQzM2IyY2JjMWZkYTRhZTFkOTY3ZTE5MmVhODk0MmFlY2FhMTY5ZGVjYTRjMjY4MjQ2ZWRiNDIxYTAwOTJhMTIwOTE0OTdhNWZhMTU5MzI3IjoiMTE0YTRmMzQ0NmViM2M5OGFhOWMxODJkMzI5YjI4NTYiOiJmMjk5OTRhMzk4MDQwMDRlN2FjNTA2NDJmOTljNDAzYiI6IjQwNzgyY2YzZDAwMmFhNjAzMDI2ZTI2ZDNiYmM2ZGQxIjoiY2YzODEzOTI1NjdmOWUwZDFmNTVjNjQyYmM2NDA3NTY5OTI1NGRmNmI0YjM3NWZmZjhmODY5ZjdhMTAxODgwNDYyNzZkY2Y0MTA3NmM1NTk5MGI2Yjk5N2RiMTgyZmNjODhjYmFjYzQ3ODIzNDdiOWY0Y2UzOTM1MWI3N2UzNzg5MzFkNWNkMDI2ZDk5N2FiMTA0YjhiNzc4N2IyZjkyYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiJkYzhkNzA1MTgwZTIyZjhiZTkxYWE0YmQ1N2EwMmNhYTMwZmU4MzQwYTUzYzY0YWQyZDQ2MGU0MDljM2EyZGI5ZmRmZGU5MDM0YTRjOGYzMDYxOTVmYTY2NTNkYzI5ZDg0ZDI2YWY1MTE4ZmI2MGFmIjoiNGI1MWRlZDE5OGQxYjE2ZjgwYmE5ZTUzNmEyYTA0NmQiOiJjZWFjYjViMzdjYTc2ZGUyNDBhOWY0ZGVhODlhMDM4OSI6IjczYzYxNGI4ZTI3M2VhOTIwMzY4M2QxYjBjYjJkN2E2IjoiNmExMzZkNDIxODI1NWM3MDkxM2I3M2FmNDgwYWY4NmNkOGNjYjZmMzE5OTM3ZTA3NTM2NWVmMDE0MTg3YzMxMmY5MDY5ZjFmZDA1YzZlMGM0NGExYjdiYTlkZDI1ZTk0OGFjMTU1NDYxZTQyNWQ4NjRjYzgzYjYzYmQ4NDI4OWI3NjgwNThmNzY0N2E4OTIxZTIzYmZhN2M3M2I0NDc2YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIxNzk2NjQ2YjQ4YTJiOTgyZmNmN2E0ZjQ5ZmVlN2UzZDZiZTY3MzEwNmE0YTI5MzcxZWI4ZDM1OTg4ODhkNTNmNTk1NzJjNjNjMGU0YmIxODNiMTdlMGY2N2Q4MWExMWNjODc4ZWY2MDBkMWJiODEwIjoiNTI5N2FlZGJjYTg2NmQxNzU0YzRiNmFmNDQzYWIyNGMiOiI3NzE2ODg1NzRiNTIxNTQ4MzdiZGZmNmRkY2YyNGQ1MiI6ImY2YzYyN2JjODRiMmMwMWE5YzA1NWQ0NjMyZWM5NTVjIjoiOWQxYzc5NmEyMzQzZWU4NTU4NTllMDRlZDcwMmZhMjMzZGEyZjczYWM5YWQ2MzJmZDE3YzhjNWFmZTE1YzU2MDBjNmFiMjQ5NTAxOGY4MDhiMWNlYmM1NGIxNGFlMmIxZjkyOTM0N2JlNGFlZDk4MzZlMGI0NWRkMjM1MmIyM2NiMjhkNzUzMDQ1ZjFhZTZhZmY3NTk4YTlhMWMzNTBhNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiJjNWFhM2IwZTlkOGY5MTZmMThlNzNkYWEwY2I4OGE0NDdmNzUxMGFmNDBmOWRkNTQwZjhhZTRkNjJiZTJjNTc1NGY2ZWIxMDQxMGMxMjEzODgyMzMyMDFmZjljODEyMWEzNmFlNzdlMDQyYTk4MjExIjoiMDZjMzVjNDQ2ZTI4ZjIxZmIxY2RmMmQ0MGFmNTNkYzYiOiI0MTAxNWMzZWYzYWRiOTZlZGJmYWVhNmViOGUwZGVhNiI6ImU2YjYwMDE2YmI5OTQxNTY0MDUwNjg1MWMwZmUzZmI3IjoiMDI3ZmYxYWI0YzQwNmMwNDhkYTZhOGMyNGYwNGQxMmE1YTM1YTUxOTFiNjJiNDk2NDU5Yjc1MGIxMDA2NmNmYmFjNTAyYjFhYzYxMmI1ODUyNzc0NGY2YWM1MDA1ZDIyZDNmODZjMWFkZWIxYzFiZjFhMjY5MDI0NzRkMDhiZjg4NmVkNWJiMjZlNmQxYjUyOWRmMDE0MzEyOGIzOTdmNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI1N2M3ZTI5ZTAzMDVlNmE4MDNhNTY4ZjQ3YWNhZWQ2MGQxM2UxOTJjMWUxNmJkOWJjNTBlZjVlYmI1MmM1NDkzYmNjNGQ3YTBlNWJlNjRkMDY0YjczNWRlYWJiZjY3ZTk0Mzk1NTQ0NDk3ZTQ4MTZjIjoiODkxOTliYjk2MGFjNzQxMDgyYzVmZTVlYTM0ZWEyZjMiOiI1M2I1YjI3ODNkODE5MWFkNGVhZTNlZDg3YmMwNTllZCI6ImZjZTRkN2Y1ZjBjYjIxMTVkNGM0YmUyMjk0ZGVjYTU2IjoiYjk4ODM5YTk2MmRiOGRlN2ExN2QzNWMzNWJkYTA2YzQxMzlkYjM5MzNjNGVlNjBiZjE3NzliMTZkODA0ZDdjNjAwYTYyZjljNTdjZWY5M2E3OWZmMjgxOTg5ZDkwNDgxZGI4NjNkMjNjZDI0YzRiNTY2ZDc0ZTFkZTY1OTZiN2NjZWVmY2VmMWYxNjFlNWE1MWQxMTUxMjhlMGIyM2M1YiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI1NjdkM2Y0YzBkZTM5NmVkNjc1NjljMDcwZDg3ZjJiNTM1ZWM4NzRlODgxNDE4OTgzZWM0MmNlYjI5NWI3ZDMxMmU3MTVlNDZiOTZmOWRhNTk5OGY5Y2RlNDViMWRjMjJkYjZkMmQ3YmZkNGYzOTMwIjoiNDNjMTZhYjQ5Y2E1MTc0ZjkwN2Q3ODk5ZWJkMjQyZTkiOiI2YzBiNDc5ZDllODQ3ZGZiZWFlMjMwYmQ0NjAxZDBkYiI6IjBkNWEyMTgzYzlmOWNhNjk0MWY2YTYxNzg5MmY1ZTQ3IjoiOTM0ZmU4MmIwOTUxYjk3ZGFmYzViYTE2ZTg3YjA0NTk2OTExNTZiNDJmZjJkYmJiZDhmNmVkOWIwNGJlOTUyYWYyNjdjNmExN2ZiZmM4NmRlOTFmOWYwN2VlZDQ4MmE1MzYyYjE3NjIxNmE4OTYzYWY0ODU1MDNiYTkzYjJlODJjMDNhM2VlNjIyNTA3N2Q5MGNkOTYxZTI0ZjYwMjZmNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiZjNhNzA5YmI0N2EzNjgzOGNiOTk4ZmI2OTg2ZmYwNzRjNTc5MzJhNjY5NjcwNTcwZmY2Y2QxYjIwMmVlMWRhMDE0YTAxMWY0M2ZjMDJjNTFmZmNiNDA0OGNjMDYwNzYzZjJjNThkZTJlZGQ0OTQyNzVkYTE0MTE4YzljYjdmZDUwNDc1YzY2Y2M3ZTc5MjQwNjIxM2E3ZDAwY2Y3NjIzZDkzMWE1OTQ3IjoiIjoiIjoiIjoiYmJlM2RhZWZhNjFmZTMwMmJkYWE2ZDRkMzc5NjgwYWNmZDBkNDU2YjVkMzVmMTM3YzE0NWI3MjYyNmYyZmNmMzlmZGY3ZjM3MDhkOWU4OGMxNzEwNDA4YTNkN2VjZTNiMDI2MWZmNTM4ODQ2ZmQ1NDUyMTQ5OTYwMjE1YzBjMjJiZWFmZTZjZDI0YTdjMzkyZDU4NDU3NzRiODc1Mjg5MTJjMzIyMTE5YTJhZGY0ZDM1YTBiYTYxZGQzNmZmYzhhN2U3NDc1YWZlYzU4YWQ0YThjZjM0M2FmYjY3N2YwODciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjBmNTA4YzYzMzBiOTY3M2U5NDg2MWFlMjA1N2UyMDBhZThmMmIzMzBiNzQ2MzRkNzlmZThhNGM2OTgyMTEwODBkYjA3ZTU4Yjc2MmEyMzg3Mzc5ZjBjMGUyZDAxYjJjYTQwZWY4MmZlYzM1ZWI4MWE1NDkzY2NlZjcwOWRiYWEwYjBlNDQ5NGU0NjA1MzAwNjJjOGRiNzQ0NmJjNmFmMmQ4NTJmZDg3NSI6IiI6IiI6IiI6IjU4MzM2N2JkZTAwM2ViMjA2MWNkYjZmNTFkYjljNjgyN2NiY2VmYmZmMDQ5N2JhODIzZTExMmVkYmY3ZjIwNjZmY2ZmYTNlOTJkMWU4YzUzMTAwNzc4MzU1NGU2YWE4YTYzM2JjOTI1NjkwY2E2ZDU3OWZiZWRiZjljYzRkNmNiMDgxMzNkMGNmOGQ0YzI1ZmNkM2I2ZmVkOTVmMDBiMWJiMTc0NzdjZjY3Yjk3YTU1N2U3ZGE5MzNiZGMxMjE0ODE3NTVmNjI4ZmRmMGYwYjExODlhMDk3YzcxNDcxNjllIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI5MDgyODcxZTczYjA5OGJiYzU4ZjMyNGYxMmY2YTgzYzMyMTM2MGM5ZjViNDAwZDAwYTliYjg2NWVmNTI2NTA4M2Q5MzA5NjU3YzQwYWM5NGI1Nzk5OTU5MDJkZjBlMjA4NGViNGE2NDEwY2FjNjA1ZTQ4MmVhNGFiZTVjOGViNzNiYzYzZjY4YmFhZWFhNTZkNDdmN2Q3NDk3NGQ5NDA1NTVmZDM4NjEiOiIiOiIiOiIiOiI2N2MyZmQ0Mzk3YWY3OTI5Nzc4MmFmOWJhYWQyYTI2Yjk5M2VmYTQ4YzY4OWE3NDUzMTQxN2FlMTAyZDRlYTFkNmE4MmNiMDMyMWFlZTNkYzI1NzJhZDI3Mjk5ZTgxYTdhNzdmMWNmODM3MTE5ZTc0Njk4OGYyZWM2MGJiMDFlYjJhYzNkMTEwYTk0OGMxYzMzZTg2ODMzNzU3ZTI2NzBjYzM5NDc2NThmM2IyZDMyYWM1OTI0MmYxNTJlODg5ZDAzZDAzMDU2ZjBhMjY1ZWU3NTlkM2E0NDg4YjU1YzYzYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNDcwMWYzNDMyNjkzMGNmOTNkZWFlYjNhOWMxOTZlMzA3YTg5MGM4Y2NmNDRhNTVmODQ1OTNiMzM4OGExOTYyMzhmZGQ5N2QyMDE5OThlYzczNDgyMTk5OGU3ZDZiZWY3YjMxZmEyYTgxMzQzOTE4MDU2YzAxZDY1ZjUxOWM4NTc2ZTQxMjBhM2Q2YjljZTI4Y2NmNTdlZWFiZDAxMmQyYzE0ZTQ3MDQ1IjoiIjoiIjoiIjoiYjQ5OWI4NmIwYTI1YTBmYzg0YTlhMWI5MDI5NzJlMmJiNWFhZjliODRmMTM4MDRkNjE4MDQ5MTI4NWI5MzE2MjE4Y2RlMGU3M2VhY2Y3MjJiNWM2NjRmNGU2MTg2MjVlZDM1YzVmYWNiZmNhMTUzY2MxODQzMDk3NTRlY2FhZDljMzY3OGNlNTFhZGU5NmRmZTMyOTBlMTI1ZDY2MWUyYWZiZGFkZmE3MzI0MGMyNDkzOWJjMzFkMTcxNzEyYzdjOTg3YmZiNDM0ZjFkYjZlZDQ0YjMyMWJjZDIzN2YxNDkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImE5MTJiNjc1NWNkMmQ2NzdkNjMyNjhhNTIwMzczOWIwNzg1ZDdkOTU2NzM4YTU5NmUyNjkxMjhhNTgzOTIxYWFjYmJhMWFkYjdjNmQxNzE0YzE2NDE0M2M4ZjQ0ZTc2NzExOTY1NTE0NjUxNjgwMjM1MDY4NDc2YWIxMzdkNTk2MmU1ZTU4NzJmM2I4OTlkMGU5Y2E1YWU4ZmU3MWJkY2ZhZWYxZDI0MSI6IiI6IiI6IiI6IjBmNDEwMzA0YjZkODhlNTJjOGQ2MDM5Y2E2NzRhMDZjNDlhNWZhMTA5NGNmMzQxYzQwMzRlMzk5OTAyMzZkOWU1YmI4ZWJiNmU1OTg0OWU3ZGY4MmUyZDAyOTgxZDhkZjIxZTRiYTMzODFlNjA2Yjk5YzE2ZGU2Mjg2MGE0NzAxMDljMDEyM2M2OWViYWY5NzA2MDNmNDUxZjllNmFjZjgzZTFjNTk1MWMzY2I4NzE3MGVmMzE5ZDlhNzkxMTEwYWVhMGMwZGFlNTYyM2MyODdkNGM0NTRlYzkzMjI3NjU0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI1NGZiMzc2NzA3ZGUwMmExYzM4NWEzZGE3ODUyMzQ4NTExMWEwYTA5OTA2NjIwNmYyMTBhZDg0OGYyOWQzYzI3MGQyZmQyZjY2OGNkZDNhNTdjYWJlZDcxZjlkNzg0YzIwOTI1OWQxZTRhM2VlZTIwNDY4NDZhNTVhNDY5NjVlNDk1ZWIyOTcyNWE4NmJkNjMwZGM0M2NkNjBkZGI0ZmM5M2M1OTk4MGQiOiIiOiIiOiIiOiJhMmUzYWI1MzkwYjViNzk3ODZlYzdiNDM0ZGU0OGU0NWY1OTBiODU1MTMxMDYwMDg0NzlkOGEzYjdiMjM2Yzg4NGIwZjg3MWQ4ZGVlNTM5YzcxMjUwOWJkNzBkZTM1MWYzODgxY2Q4N2M5Y2Y3N2MxYTlkODg3OTk4NmZmMGY2Njc4NTQ5YzVjNmFjZDE1YWViNmJiZTY1M2E5YmM3NjgyOWRmMmYxOTRjNWY2ZThjN2RkMzA1ODk3MWNlMTUyNzNhMmQ1NTljMWFjNjBhMDAxNGU1ZTMyMzUyZDZiZTJhMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiM2EwYzI0YjVhNjEwNmQyOGMwMjk1NzUzOGU3NmU5NmIzZWNlY2ZhODBiYTRjN2QwMWZlNjQyYTg4ZmM4MjI4ODRjYzM2YWMyNzAzZTg5NTJlZTYzNTk0ODcxNWY3OGM1NDJlNmUzMjcwZjI3NTdmMTY1MjQ3NGRmNDcwNjQ5MGIxOGU2NDlmZmQ5NWRjNTE4YThiNDI1OWRhMTkzNjAwYWY1ZDViZGUxIjoiIjoiIjoiIjoiNTVkYzI0MjA2YWE1OWQzNGVhOTkwYWM2YjMxMjUwZjE1YWMwNTZjOGVjZDUyZTE1OWYzNDY0YzM4ZTFmMjg4NDBlZWM0YzY0MjNiMGZkOTk3MWQxMWM1YWI5OTIyNWVkYTVkMTczYzA4Zjk0MzliYjU2ZWIxY2M0ODdmZGFlYTkzNGZhODE2ZjljOWUwZDYyOGYxMTFjYmU2MGE2NDdlMDM4OTIwODRmODA3NzUyNDhkNDFjYjU4NzYxNzY3MWQ5OWI1MDg2NDQ0NzZiNjZjMWM5Njk3OWU1MDYxZTAyNWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImFlN2ZmNzBiYjY5Yzk2NGYwNWM5OWMwZTc4NjgyMTBkNTY3YmNiNWViMDJkYjc3MDhkZTE2MmU2YmJmZDkxZmExN2YzMDY1NjQyMGRhZDFjYTY5ZDM1NmNiYWI4MDQ1NmNlZjkyMmE5MjA2ZjA3ZDMyYzNmMTk4YzFhNjhlNjczYzU1ODM2NzRiYjFkZjFmMmE2OWM1NTRmZGQzNDExYzgxYTkwYzgzZiI6IiI6IiI6IiI6ImYxZjNmNzliMWQ3Zjk4OGQ0Y2FmNzMwODQxNmYzZDAyMzcxY2MwMjlhMjhlYjRmMDI0N2M4NjI1YzQ2ODBhMmRjYmU5ZjNkNTZkOTJkZTZlZTRkNDAzMWEyNTRiZGE4YTY1N2JjMTQ3ZmI5MGMyZjc3ODNhOGUzNzQ5YjYwNjMzZTVhOTIxZDAxNWI4NDZiM2NiMzg4MzBiYzc1NTQzMDhhZjA4ZWU4MjE5ZTVhY2QxYjY5OWYxYWM1Mzg5MzBkMjU3ZGE0ZWY1NjdjYTU3MGE3OTUxYmZiMjM2ZDRkMzZiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI4NjcwNGFkMDI4NmY4OGRiYzYwYmFlYmMyZWQwNTcxZGU3YjVhYjY0YmM4NTU0YmE4NjQ1NTU3ZmExMDE1OWVjMDNjYzlmNmYyOTljMWMzMDExYzczYjI1NjNlNTcxZmMyNGY1YjViNTBiNGJlZTUxNGQ3YzgwODg3M2NhODA0YjE0NzIwMWJhN2VkNDM0MzBkODliMDY2YzA0YjAwYjBhMTc2OTQ1MjMiOiIiOiIiOiIiOiI2YjFhMjZkN2QyMTMwOGQyMTdiYzg5ODgwNjdlZjNlMjFmNWJjMTBkMzRlODk5MzdmMmE4OWY4ZGEyNTZhY2VmNTBiNmVhN2Q5ZWE4NzdiYzFkMTUwMDJiMTc2NmU5YmM3ZmVhM2Q2ODFiMTQ3ZTQyMzU5Y2UyOWQ2ZDRmOGM3M2U3YzI5YjllYzE0Mjc3ZmNlMmY2YTBjNTE4ZDI0YWVhZGE0NDk5MGY3ZjkyYjBkMTE4NGZmOTZiMjBjNzZkNTA2ZjZmOWQ5NjMzOTFhYmVjNWJjMjQ3YTJhYzZiMjRjNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiZDBiMzAzNDFiNGZkNDgyODFmNzZhODNkN2RlNTc2OWQwNWQ1Y2I5ZTU2NWIyMTNjOGUyYmM4ZDRhZGNiYWU5MDEwN2ZjMTJmYzFlZDJhMTlmMjBiZWI1NjNkZThmMDViYzVjNDM3NjM3MTQ4MTU0YTEyYjE2MDZiZmYwNzFkYmIzNjY0NThiNzRhMDdhMWMxNDExNGZhYjQ4Nzc3MmQ0MzZkNGNlMTU5IjoiIjoiIjoiIjoiZmUyYTdjZWQxOTY1ZjAxM2Q0NzU3MjRlYWE3ZDMxYjYyNzQwYmU0MTFkODk5YWZhNzlmOWZhNmU3M2YxOGViZTA5MDdmMmYyMTM4OGI2NDk4Y2QzNjU3OThmMjdmODgyYTJjNWMyNzQ0YTliMjVlOGQzNTFlNzdiOWZhNDQ3MWNlYjFkZDZjNzJmZGVmNzU5NzdlNGU0YTI0NmUyNGY1NmE2MTUxODllMWIyYThkNjc4MmU4YzUwNjJiNzQ0YTY1ZWJlMWY3YzVmYmNhYjMzM2ZkYzE1NWJmZWUzMDA1MDMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI0YTFhNjk3ZTQxNTM3ZjI4YjM4MWUwNWYxMWViYzkwNWJkNjZjMmMxZDkwNWQ4YzBiNzhjMTBjMjZjZGY1NDdhMWI2Zjg1ZmY1OGY0ODI5OGExMWJiYTQxZTNlYzAxNWQ0MWEyNGQ5ZTMzNWU2ZTEzYjA2Yjg0YjlmNTZiM2U4MDNiYWM1NjlkYWUyZDc0YzQ0NGJiNThiM2E2MzQ0YmZiYjllZWU3NjUiOiIiOiIiOiIiOiIxNTA2MGIyYmM4MjdkYmVlZmEyMTcwYWRlNjMzYjBmMDA3NWE0YjliMDNmYzI0ZjczNTIyMTc0YmU0ZTRiMDhiOTNiNDIxZmE5OGM3YzVhNDQ1YzNhYWZlZDQ3YTJlZWVlZDYzZjE5ZWY0ZjY3ZTc3MjZkOGZmODRiZDk0ZGFhMzMzOGUzOTdkNTJhYmVhNGM3ZDExOTFlMzBmM2U4YTExODY0ZjEwZmY1NmIyZGJlZmQ4NjA2NTVkMzRjZjYzZWEyMmJiYjU0ZGZkMGM1ZjY0Mjg0YzMwM2EyYmEyZjQ5ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImU4MGI4Yzg4OTY1NTdkNTk2ZTE5MmMzMjI2MzQ3YzMzNmRhZTQ1NWI1MGJmMzJhNzhjNjFiOWE5OGM5NDkwOTZiZTUxNTM4ZTI5M2QzMzhhNDY0ZWFlMGViMThmMWFiMjFmOTkwM2QwN2E4Yjk4ZWEyYWQ3ZjQxZmU3ZmZkYzRiNGJkMGZkMDYxMzhhODRkYzUyMTdjYzhmZTM5YjkyZjk1NThhYTYxOSI6IiI6IiI6IiI6IjU1NTc0NDkxZDA3ZGIzYWZmOTRkY2I3MWY1MTljZmZlMmY5NmVmNTcyMTkyNjI4NjBjM2MwM2Y5YTViOGExZWI4ODg2OWU2OTU4N2Y4YmMwNjkzYzk5MTliYjI3N2RjODRmYTU1MTg3YzBkYmIyMDEwMWYwYzRlMzAxZGNkMmZlMjE2NjRlNWEyZjBkZGEzZWI0ZjExZGYzODc4YzViZWNkZGJmYzNjYTAzMmExN2Y3NDBkNDI0Yjk5YmUwYTliZWRmZDk5OTA3MjI5ZWNjY2JmNDU5ZjU0OTU1MzM1NjBlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNWMyNWYwMmJlZjFmMTMxOWNiNjg2OGQ4MzZjOWNiYzE4MmZkOGQ4NmVjZDg3YmM1Y2JhNDFjMTYzNzEwMDc0ZTgwZDFhMzBkZGZkMGY1ZDg4YzY2ODIyOTJjZDUwYzY4OTY2ZDE1ZTZmZjk1ZTExN2QzNDJkOTc0ZmYwNzRlZTg3MjcxOWQxNTc0NWRhNjI0Zjg1MDNhNjE0MWIwYWM0Yjg4N2VhZDVmIjoiIjoiIjoiIjoiOWM1MjA0ZDU0NzFjMjUyMDNmMWQ5Nzg2ZDM4ZjcxMDgxYTg3MmYxYzU2NjA0ZGM3NTcwY2FhNTQzOWYxN2NkZGI3ZmVmZjAxY2FkYWFjOGUwZjM1ZTdhNTQzM2NiYmNkMmRkNGYxMWNjN2RkMTRmNmFmNjI5ZmQ3MmEzMTQ1ZGI2OTI0ZDJiZGVmYzI2MjY2MjM2N2I3MjU4Y2ZmMzYxNzIyNjM0NjBmNGRkNTJkZDA4ZmFlZDM0NjBiYmZmZTE4ZWIxMGZmNWIzYzZhOTdmYWRkZjY1YjNlMjFlY2M5OGMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI2OGI0ZTFkZGZkMTZhMWMxZWNiMGY0MjIxMzA2ZTc3YWQwMmIwNzk5MzQ1N2VhY2UwODZmNjY1NjZhZmM1ZjEyNDg5NjMzYzYwNWQxMWQ1MzkxNmVlZTk2ZWQ3NzhkNmQ2NTE4YzU2ODFmMGZhOWIwMTYwZGExYzcxNzQwYTk0YWIzMzMxMGJjMjBhMTg3MTAwMTVhZjI1ZDNkNjY3YzQwZGM2MTlmMzQiOiIiOiIiOiIiOiI1YzRjOWIzMjc2ZDU0NmQzYjYyNzdhM2EyMDg5ZDQ5NjkxNDZkODMzZTBhY2UzZTFkZGJkOWY3OWZhMjE1ODUzMWY4YmIyNmEyOGIwOGRjNjRiYjFlNjEwZjEzZWIxNGM5ZmIyMzU1OWRjMmYzODMyNmUxNDVhYjUwOWI5ZjY5MjU5YTBkMWEzMmY0NzFkNWFiZjE1NGEyNTg1Mjg4MDYzODQ1Zjk5MzA2ZjliYjg3NWNjYjBkMzJlOWQ0OWI0MjkwMDI1N2ViYWE1MzJlOGVjMjIzYWVhNjBhYmM5NzE0ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImQ1ZWU1ZTJlNjI5ZWExNzQ4N2U1OTM5MTQwMTI1NzVkYWE4YmFmMmQwZTk2NzFlMWI4YWFkMTY1MjRkYmRmN2QwNGMxMTEzMGNkYzEwZTUwYzYzMGNjYjIzNTU3OWE3MmI2ZWI0NTAyZmUxNDZhYWJkYWI2MmEwODVjODIwZWE0NmJiOTA5MTA1NGQ3NWE4OTJhODNjMzg1MGRhMGEzMWMxNWUwZDAyMSI6IiI6IiI6IiI6ImUzMmMwNzk4YjIwNDA2MjBmYmM1ZDJhNDRlYzdmYTgwMzg0NDRjMTkxMGZkNGEyNDMxMmM4YzhlYWRiNTdhNzg2MDY0NDljZjA1YWM1MWEzYmM0ZDU4Y2U3ODc0MmMxYmUzYTBmYWI2ZTNmNWViYzkyYjgyYjVkNWQ2NGNlMjllOGMyNzg3YWNlMGY0ZTcxOGE3ZjZjYjY2OWEwYTQzYmExYWVlMGQ5YWVmNTVjYjdjNmY1ZGZmNTdjOGFjZmU4ODNmZmQ4YTQ5NmQ0NGFmZTA2ODAzZTRjOWZmNjJkZjA0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjZlNTMxODQyYjliN2ZlMmMwZWU2Njg5OWExMjU1MTM1Zjc4NGEyZDUyNTljOTNhYjNkNjNhNWNiNzA4ZTJlNmNiYTk1NTg5N2Q5YjY2YzdmYWIyNzRhYTM4OGE1ZGI2OTcxM2M4NmZhYTRhMTk3MDllOWFhYjA0NjM4YzY3MGZmYWE4MzgwNmFiZjc5YTQzZTYxM2U2MmNjY2FmYzYzN2UxYTFjMGMxNCI6IiI6ImU2MjhkYjA1NzI1MGZiYzZmYzVhYmEwMWI2YzhiNDcwNjJlYzU2MzJhODU2NjczMCI6ImJkMTJlNjFlM2Q1MjE4ZWZiMGMxMDNkYzQ5NDAyODAwY2ZiODYzZWM4OTI1ZTc2YSI6IjAzNzY1MGRkZjY2ZWQ0MmVhMzhjZjQ0YWFhOTQ4ODRlZmZjNWY4MzFjNTkzZmIzNTg4NmI1ZDYwMWE1OGY3NGY4NjhkODlmMmRiYTQ1MGI5YzE2MGUyOGY2OWZkMjRlMzBmYjdhNDQxODk4MTBlMjlhZmQwZDExNzYyZDNlZjA3YjQ1MjdmNDEzNGQ2YzUzYmRjOWIwMjRjZWJiNmI0MGZiYWNkNjhiNmFjZDRiYjRkMDExZDY3MDVjZTIyZjkwZDkxMGFjNDAxN2QyNDI2ZGI3YTQ4ZGIzMjQyMTYxYWE4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjNmYWRhYmQyZDg4NzliZDIyOThmNTNjNTRiNTczZGIyNTg0NjU1ZTA4YTgzMjg5Y2I1OGE0ZmY1MTcwZmRjMzBkNzFiYjI0ZWZiYjVhNTBkZWYzMTVkYzY5MTQ2MTExNDYyZTIwNDI4OWE2NGNlNzI3Njc0OTlmMjk5Yzc0YzkzNGYwMDA3ZGRiMzRiZjUxODNiYzFlNWFmZDhjMTVlZWJkZWJiYTg4MiI6IiI6Ijc0MmY3MDIyODkyYzIxMjNlNjIzNzllOTM2Nzc4NzMwMmZkMThkYzM4MzVkZTBiZCI6ImI2MDMyNTEzNmZkZTdjODU4MDU0OTgzYTk3NzI2MmI2MzkwYTQ4NDE5NzI1ZmViZSI6IjNiZmE0MTlmOWJhZDI1OWI4NzE3MDM2ODEyODRjNTM5NmZhOTRhMzIzZDY0NmRkYmY1MzM5Mzk4YzRkODMxNGE5OTljMjMwODk0YWM2MGJmMjMxNzYyYWNhZGE2NzJmNTgxNTRhODZmODBhOGM0ZTNiYmM2NzEzMmUyMmVmNTBjMDM3NzE5M2NiMGQxM2M3ZTJjOTdjYjI0Y2U1YmI2OWM3M2JlMmU1Y2QzYTA3Y2EyYjAwMGIyZDdlZWE5NDAwNTMxNTZiZjU1ZDg0NjE4MWUzNzQ4YTkxYzM0MmUxOTFmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjA3ODRhNDk5NDI0ZGQxYzJjMTNmNzY1ZTllZDg4ZDc1MmZlZmE4M2NlYzYxMTU0ZjgyYjNmZDY0NWY2NDJmZjEwM2RiOWM4ZDFjMTBiNTk3OWM1NmEyMmQ1ODMyNDY2OWQ0YWNlMzk5NDkyNzIyMmZhODdmZDA0OTU1OGE0OGFkY2JkNmFkNWEyMzgwZDJkOTI3YmU1N2ZmZmFhZTAzN2JmOGEzNDM4NCI6IiI6IjlmODUzZGI1N2MzZGEwNDIxOTE0ZDJmNzFmOTMxNzgxNzU4MGMxZGU0Y2E0M2Q1MCI6IjI3MDcxYWQ0NzViODU0MWMxYTgwMjM0YmIyZDExMDYzN2ZjZjRiNGUyMGUwNmE3YSI6IjJjODc5YTAzYmQ3MTk1OTUyMTFiNTI2MTAxZmU4NTcwMjE2MTcxMWM2N2E4MTE4NGNjNDJjMWY5ZGE1NzYxZTg1M2ZmNGI4ZDE5ZGViOTVhMmYzMzIzZDFjZDU4YTJlMDY2YzY2ZTdhMzAwNTk3MzJlYmE0M2E0YmYzYjIyZmZmYTViZWE1MTYxZmQ3NzUxNjBkYzUzZDdjYmI0Yzg5MmJjMTIyZTRlMDEzOWY4ZjU1MDIxOWNmNmZiY2NmNTVkMTZkOGE0ZDhkNzc3NmFhMTQzYzAwZDllN2JkMWM4NDdhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImFkZGIzNmJjOWFkMTM0YzdiOGZhNTQ4ODFkYjFiMThlMDQwZGU0ZjI1M2JlMjhlZmJkMzZiMTJiZmNmNDcyMWIwOGM1ODMzZWIwYTk3YzY2OGM3YWRiYzdmMDRhOWUwMjk5NTQ5MTI2MTcyZTI1YjllNjI0MjgyYzhlNjNlY2NmMzU4YzBlZjFhNzFmOGZkMGE4ZmM0OTQ1MWRiNzc1N2VhZTM0NGU0OCI6IiI6ImUzMjU0MDQxOGVmNjhjM2RjY2ExZTdhMDU0NmU1ZGM3ZDRjNWU5MjAxOWI4Y2IwZiI6IjMyN2UzMWEwNjE5MzA1YzkzZTliNWVlZjg3MTAyZDQ0N2QyMWUyMWUyZDhjMWNjMiI6IjE3OGJlZTQwNTlhZjAyODI4NTRjODMzZTExZTdiYmE5MjNhMWUyZjExMjZmZThjZDdlMTY5NDYwMmMxODA4MDJkNjdiODQ1YTg4ZmY3ODYxNDdmMjJhNzRlNmZmYjBmOGI4NmQzNTJjZWMyNzE0ZmY4ZjMwOGIxZjk3MDU2MDNmYWY1YjA0YmVhM2M3NWM4N2M5MWQ1ZTZjZjc1ODNiNWM0NWViNWY1YTc0ZDJiYWM0OTBjODQxNWQyZmUwNzcyNmJjMzM0Yzg4ZTNmYjcyODQwNThiMDA2ZjgyZTg5YWU3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjQxMjQzMWJhZGNmMDZmODc1NTFlYzYzYzM4NjBiYWY0YjU5NjY3Y2I0NzUzMzYzZDBmODJmZTdjOTY4ZWE2ZjhiYzVkMDE1NDE4YWRlYWUyMDYwMDU3MjVkZDk2OTNhZjZmNzA2MGEyZDViYTUzZjY2ZGQ0OWRjMTQ4ZGU1ODE3MzdiNjdhY2Q0YmI3MGZmMmY0Y2YyMGFiYzAwMWFlMWViNTBjYjc1ZiI6IiI6ImQ2N2Y5NGE5NTNlN2U0ZTRiYzBjYmQ1MTdmOTYzZTU5OWQ2ODg1MWNjMzMzNjQ0YSI6IjM4NTI4MTk2MWVjZjJkODE3NWMwYTcxODM0N2QyMTMyZjA1OTk2NGM1NWYzOWY1NyI6IjM1Nzg3NmU3OGE2OWNkNGJjNGUwNmIyYzUyYWQyODQzNDUyMGQ1NGE0YTMxMGVlMGViMDI2Yjg3OTkzNTE0YmExNDQyZTI1ZWIxYWUyMmEzY2U5ODUyOTYyNWQ4ZGI5YjBlNWI2ODBkN2UwMjc1MjNiMGJhMDE4NGQzZjJlNGI5Y2RlZTAyNzk2MGFjMTYxMjI5NWJjZGJmNTcwOTEyZWQwNTEwODU0MWI5N2UzYmIzMGFlMGExMjJkNzRjYjUzNmU1ZGIzNGI3ZDVlZTVhMDQyODk3ZDVkMjlmYTNjMTI2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImFlOTE0YzNkNzRhY2I2ZTJkOWI4NDg3OTI3ZGI3OTkyYjgzOGVkZTczZGM5MThiNjBiY2M5NGYwZjQ1NmY0NTRhNmQxMDBjOTBlMTE5MzQyMTU0YmMzZGRiMDU5ZjQ4ZGIzYThkN2I3Mjg4ZWI0MmQwY2ViMDc1MzJhMmEzNTdkMjA1MDZlYWQyOGQ5YmQ0YTEyN2Q0MzdhNjU3YTYxZjVkMzBiMDRjZiI6IiI6IjJhZmI1MzdjMTNmZWU5YzQxMDNjYzZhYmIxMTIyNTA0NmQ5NGRmMmU5ODM4ZjczZiI6IjZhOWY2NzBjYjQ5Y2Q5YWQ5OGExN2NjMTlkMDBkNDc2NjM0NDEwOGYwYzg2ODA0YiI6IjJlZDBjNDE0MDQyMGM2ZTM3OThhMTNmOTE3Y2Q5OThiMmNlNmY5OGJhYzI3ZjBmZGIwOWUyNTM4ZjU3M2NhZmYxNjkwNGVkYjM3MWY5OGY1MDk2NGI3ZGU1NTJlOTk3MDA3ZmNkMjY3YjM2YWJlZDEyY2Q5NWQ5YTA4ODUyYTRjYTg2Mjg3MmVkZDMyYzcwN2U3YTYwZTExZmUwYTdkYjRjMGQzNGY0YzcwZmYxNmU1Yzc1ZTZmNWQ3ZmZhZWMzYmUzODNiODc5MGVmMGZmM2EwZDlmNzk4NTBjOTc0OWMwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjM4YTkzYzNlZGUxNDhjOTFlYjdmMGNkMzI3Y2JlOGIyN2ZmMGU1NjliYzUyNjJhYWYzMGI4NmQzMWJlMzVmODNiNGZmNTBiODRiNWRmZDY0OTkwOGQwYzU1Y2Q1YmU3YWQzNmQ0ZjVmN2YyMmNjZTA2NmQzYjU4OWFkZWY4MDRiZmFmNTIyNTNhMGU0YzZiYjAzZTAwMGQ2NDk1NDFlNTIzYWU1MmYxZCI6IiI6ImUxMmMwNWYyYmY0NjNkMjRkYTlhYmU4OTMwMWQyYWNlZmI3OTU3ZGMxYmFiOWVmOCI6ImQ3MDA2NWZhNzEzZTJkNjkxYmY1NTRhMDBkMDYzMjIyNzU1ZTcyMDRhM2U1Mzk2OCI6IjNlNWFkN2U5NmM4Y2VlODk5ODg5NjQwZDgyNjhjYmVhMjk2YWVlOTZmY2E3YmI2MDMwOGJjZGMwOGVlZDM2YmRjOGE1YjMxMjZlZDhiZTkwMDU3N2U2MGVjMGY4YjNkMzAxNGRlZWM0MWFjNjUwNDgwZTA4ZGQzYTQyNTg0M2IzN2ZhNWQxZDYyMWI1MDUzYmE0YjJmYzE4MDRkNDA3ODQ5YTg0ZTllYjViZmNmOTRmMjdjMmE1MzVlMjc1NmI4MjAyZWRlMWYxOGU4MWY2NWUzZjdmNTFhMDY0YjQwMWE0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjM4NGQ2ZjQzZTdkNzdhMzgxYmM2YmZiZmJmZTFhMTdhYTM1NTI1YmVmMDFiZThhYWY2YzQ4OGM0NjUxN2Q5Yjk0MzgwYzczZDNmYjQ1YTRmMWI0ZDcwMzc1MDIxYzdkZjc4ZWFkYjYxZGY1ZDllZmM2ZTA4ZmUyZDgxZmZhNjVkZjMzNjY3YzIzZTNjYzVjODk4OTM5ODhmMDRiZTFkMzYzNGNlZDQ0MyI6IiI6ImEwMjcxZmQyNTUyZTAzNzU2OGNjODU3YTYwYTU1MGRiMDUwNjgwZmMwMzkwNGZjZSI6ImVjMDk1Y2M5ZTNiYzMwMTA3MWE5MDFkMDI4OWI1NGFlZmM3OTZiZmZhZDZmZGE4ZSI6ImFjYTI1NzFhOWNmNmJjZDEwNDI5ZTE0NmU2ZTk0ZDFhZTQzYTAwZGIyOGJlZTJiNjBlYjZhMWJjMWNkZTNkNDUyZGQ2ZTA0NjE3YWFlN2EzZjgxM2ZlYWRkYzBmOGZkMjU4OTAwMDQ2MDdmNDVlYzk5NWRmOTcwZTFhM2FiYjE3YjQxNmJkYmY2MmI2YmE1NjI1YTgwY2IxMDBlMmI4NzI2MGE3M2ZmZTE1ZDllNmYyNGFiZmU5ZTZmOWJhNjZiZGZiZmU3MTM4MGQ4MzI0MThlMmE0YjQ2MGRkNzQxNWY0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6Ijk4YzhkZjg2N2QyMzQ1NTNlNTA0ZmNkZjgwN2ZiOGJiYTUxZDIzYWM2NWRkOGIxNjA5NDNiZDQ1MTgxNzY0Y2Y2ZGYwMDQ5Y2FkMjNlNmFjYTQ5MGRiNTdkMTJkYzZjNjMxNjA0Yzk0M2YxNTM5MjdkNmQwNGFmMDQyZTFkYTFiMjI1ZWI4YmRmNGVlOTlkZDQwNWUzNTg2YWNmOGU0NGJiMDE4NGQ2OCI6IiI6IjMzMzhiYWVhNzljMDZmMGQ0OGVjMmQ0NzAwNGU2MWMxYzFlNTA1NmJmOGJiZWNkMyI6Ijc5MDA3YmZjZTEwOWE2ODJiNzQ2ZGYwNzRlODdjODQ1ZWViZDY2NTUzMjg2N2ZhMiI6ImJhNzA0MDE5M2UzOGM0NDk1OTcxODI3ZmIxZGRiNzQ3ZWE4MGNkMGJiMWZkNmFhYWJmODVlYzE5NTljMjllYmE4ZjgxOGVmNTVhYWRhZGM4YzM0YjZhN2MwMGYyMTBhODk5MDkyYjk3MDRmMmUwM2FiZjNlNWU4ZmU2ZDEyN2NhYzA0MzY0NDFkMGE2ZjFiMDJhMDBlNWZlOTQ4NTM5YzY2YThjNzhlNzBmMzVjZmViNjAwZTFjYzY4YzA2NTUzZjQ3Y2EwNTNiNjRhMDUzNGEwMjhhNzNkMDg5MDAzNGZlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjYxNTBiNzI4MGIzMTA1Yjg2YjY2YzJhMzlhMWYwNDYxY2ZiY2UxN2U3NDY3OTFhZmIyNDFiMjk4NzQxNDU0ZTE3NDY1MGFiMWU3ZjA4NTAwYmQ3ZWIwOTZlNDBkODExNGU1YTYwNjY4NjM2YjZmZjY2ZDI2MjIxNTRiN2QyMzllYWVmYzlhYjJhYTMzNTFlZGEyYWY0ZmU1MWRlMzZlMjJlNzAyMzVmYiI6IiI6IjZlY2U4YWE0NDdkMmNmNTFkODQ5N2UzMDNjMWEyMDJlMzllMDZiZDcyM2M4NDdiNyI6IjIxZDg5MDY2NmQyYzhjZTQ0NDBiYjQ1M2Y0Mjg0YzM5Mjg2NTBmOGNmMzg1NzZkNyI6Ijc1NTRiOGNjOGU3OTMzMGFlNTU1NzVmOTE1N2NkMTBkOGVlYjU4YWYzMGVlZWJlOWRhYTAyMWY0YjU1Y2UzNjVmYmRmMzYyOWJlNzU0N2E4OWM3OGJiOWRmNzlkMzUxNzllNWQyOTI0YWEwMzJlNjBkNWEwMDI4MWYxOWVlMjI1NWMxN2E2OTM0NWVkODZiZjM2ZWNmZDY5NGJlMDQwNWM4YjZjMDc3YjQzYThjOGJiZWE2MDNkZGM2MzJhMWFlYTY3NzFhNmJjMTE3ZGJkYzM2NWUyNzE0YmRhYThiMzc3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJjYjI1ZWVmNzIzMGFjMmRhMjQ5ZmUzMGVhOTRkM2EzMzMyMTQ3MDIyYmIyMjA3YWFiNGE1MDgyMmIxNTY0YzI0YTA0N2ViYjQ2ZDU3ZjQ1ZjY2ODBmOTA5NjI5YjQzMTI5ODc2Yzc1MzgxZTNiN2M2ZDA2ODg3ZjY4MDgzZmM0MjNmMDZlY2JhMTU5YTkwZWRkMzk0Y2MwY2E5NDczZTljZDBmMjNjODkiOiIiOiIyZjMwYjAwNWVhNWQ1OTY1NDM5YmYxNTIyMGIxYzAxMGU2Yzc5MzA2ZTcwMGU2ZmUiOiI5OTM3YmYzZWRiMzYwM2NiYmUxOTBmMzYxNmIwMjFmYWQ2NTIwMTE4NTRlNmY2ZDAiOiIwNDBhMzBiODI5ODFmNzFlNDYwN2MyMGMxZjJkNmU2ODU0ODI0YzkwYjEyNzUxN2Y2NWI2YzdkYTk5ZmQzM2RlZTMyZGM1MmJkMGRiZTkwMjUwOWM1MDQ5MmE4OGU1OTYzYjJiNmUyN2QwNDYzMzRiMzU2ZTU5MDlmODU3NjNhZjJkZTcwZTkzYTg5ZDZhMDBlMmVmODFkZGQ3NGY0YTMzZDNmODQwNmQwNWIzODNmZGE1NjlhNWE1NzRmYjVlM2MwYzg2YTUwOTZlOTQxNzRiNzliMmE0ZWFkZWJjY2MyYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDE5MikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiMWQ3ZGJlNGU4MzkxM2JhZDNmYTkxODI2MmFiMGY0NWNkYjllNGU2MTY2NzY5NGYzNjFkZGVjYWNlMDZiZjM1MmIxOGRmYWI0YzMyYmZmOWEwMTNkM2I5MmEyZGE4ZWQ2OTgxNjgxNTVkZGM0OTJmOGFkNWQ2NWNkYThlZWQyMTI3OTNjZDlhZWM4YWNkZTdlMDBmOTUyYmI1ZDAwYzUzYzVjMTgxZTg5IjoiIjoiZjljNTFmZjhmMjY0Y2FlNzIyNzM0NTAyZjY3OTllNGZjNWJlZTc3M2QzMWUzZTMxIjoiNmExNzFhMGE4ODAxMDE3YTFkOTI0ZjgwZmM1ZDlkNjU5MmI4YjI4YTM0MmYzMGRlIjoiNDI1MDI0YmQxZDFhNjZkNDUyN2EzZThhODMwN2IzMjA2OTIzYmMxZDY5M2Y1YjdmOTAxN2YwZDU1MjdjZDY1OTEwMTY3NTg3OTRhYzg5ZTJmNjgyY2IyZDY2ZjhkMjhmOWEyZjVhZTI5NzRhNzVmNGQwZGUxN2RjZDAyZTkzYmYyOWM2OTE3NWZjZWJhMjYyMzc4YmFmYmUzZWI3ZTNkYWJlOTc0ODg5MzA2ZDBhMmViZDBhZDlkOTM0YzM3YjFhZDg5YWMxZmMyODQ5M2U2YjFmNmYyNDYyMGU0MGVhZjciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImE2ODg3ZmU0MWVkNWE2MTVlYjAzMGIzMWI4NjMxNWQzMmQxM2RkNWFkNTA2NTY2ZWEyM2VhM2IxNjJiOGRkNjIxMTI5NzM2YzhkZGUzMTcwOGE3ZmE0YTRjNjA2ZGMyMTJiMzQ0MDYxNzExMWU5NGE1YzY3MjJjM2E3MjlkODRkMmU1ODU4YzIzYmE4YmIyNDk0NTZhMTFkNjNkYmE5ZDQyNjBhNzIxMyI6IiI6ImE1MjAzNmRhYTgxNzIxMTFlODljODk5MWNhODE4YmRkNzExMDk1YTE2MDJmMmYxNSI6ImNiYTQyN2EyYjdiYjY0MDAyZTFkYTMxNTlkNjQzZTAwMjUxNmJlZDI3OWUwZDQ0MiI6ImNmMGY1ODgxMDMyNjA2YzIxYThlYTIwYWRiYTZhNzJlMTc2ZTk2OGYxMGIwOGFiNmQwOGY5OTdiMjRmYzJhMjRmMmM1ZDQ0ZDFiOTlkZWI3ZGI0ZjM4OGRjOGFjMjY4Zjk2NmEzNGM4NTdjYzVmNDNlZmM2MDE2NzRiYzU0OGZmZWFlZTFjMTM0MTVkZjZkMDI0MDgzNTgzMmNiNzU4NDBiNjA3MTFjYjYzNmY1MDlkZDliODdiNjk4NjE1OTU5Njg4ZTlhZmVmZmE1MDY3MWFkYTA1ZmFhNTY0Yzg3YWQ1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJhNTYzNDU5ODg5Y2EyOWI3MTEwODZhZGZiZjE4ZjI4NGZkZDE4NjAxZmY2OTkxNmFmMWNlNDc1MTBkMzNmMjA1ZDRkY2QwMDgwZjlkZmVkYjJiYzFlMmU2MGZhMGI5Y2FlMDk0MTAyYmM3YTcwNWNjMjIzMjc5ZTBmYzNiMDAyMGI0ZmFjYWZjMmIzMWI5YmNhOTIzODJmMzgxMGQ1YTRlM2VmNjI2YTkiOiIiOiI1ZmM4M2YxZjZkYzBhZDQ1NGJiYWNmMmRmMzY2YzgwM2NjMWQyZmQ0NmJmNzhkMzIiOiIxYTk2NTQ2NjdjZmQ2YWQwYWFkOTM4M2JlMDRlYzE0ODBhNDk0MjYyYjNmZWU4MjMiOiJjYjQ1Y2U5NmE5NzM3MjhiZGFkZTUxZjkxMDA0YWMwOWUxNTUxNzM3NjkwNjNiM2ZiNDcxMjQ5M2Q4ODc3ZjA4ODEyN2EzNDkyNTg4ZTk5ZmVmNjQ4YTEwMWNmMWMyMzhmZGVmZDc5OGRkNDkyOGI1YmIzYTg1MWVlZDY5M2YzN2Q2NzM2MGEyOGEyYjI3YzQ0MDZlOWRkZWZkZmZiYTY2MjUyOWI5MWE5ODBiYmU0ZWIzODFjZjk3MzRiMzM2ZTJiNjRlNzQ4MmUwMzI4YzJlMmJmODFlMzllZGMzMGQ5NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDE5MikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiODg2ZDA5ODczMWFiZjMxNDBkNTEyZTBkMzQ4YTM4NGQyNTM3MjY2N2ZlN2U0ZjBjZTcxM2IxZDJlY2E3YjJhZDkzOWIyNWFmMDNmNzhlZGFkNzViZjBhYjk1YjQxMTA3MTBkMGUxMmU3MTRlMDNmN2RmMzVkYjU5ZmM0ZWYyOTA2Y2YzNmM2Yzg4OTdiODAyMjAwYTgzZTYwZDE2ZjdmYjA2NGFiZDJhIjoiIjoiYTRmNDJkODNhNDkyZGIzZmMwNTNkMTI3NWM2ZjI2NDcwNmZhOTMyOTU1YzNkYTYyIjoiNDUwNWMwNjY0ZTU5YmI0Mzg4MDIwNDcwODM4YmIwOThjNGFlMTMzOGMyNjhhZGYyIjoiNGY5YzNjNjBlZTMyMDQyNzM1Y2M1MzliOWEyM2QwNGMyYmM2YmNkNjhkYjA0YTU4MjQwMzA1ZjE2NWJjY2ViYmI5OGUwZjQ3OTZiMjgzYTBkNzhiZGFjY2ZjYzhkYWYxOWYyMWE3Mjk0NWJlMDc5OTZiYmIwYjYwNjY0M2M3NzUzZjc2ZWU2MzcxMjkyZDNlNjgxNDY4YjcxNGUxNmJjMzJkYjE0YWQ2ZDc3NzY3NzEzN2ViZDM3MzExODZlYTcyYjg0MGI4YzRhZTc5ZWNiMmM2MTM1MmVhMDU2ZDJkNmEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYTI2YWY5MzU3MWJhODRiNThlMTRlOTIxYTZiYWRhNzMwODNlYzE3ZjIxNTgwYTE1MjcwM2UxNzQxMzkyZmM5Y2U2MDQ2Zjc3ZDZlZGE1MDAwZjMyMjVlZjI4NDI1ZTMwY2VjMTM4YTE2YjBlYmQ4ODVmZWYwNzRjNmRhMmE3YjEyNmZjZDFmMDU2ZTNhNWZkNTYyNzM2OGM2MzY4MWNjMTBmYmY3NTBiIjoiMDYyN2QxMGIxZTViNGYwZmZmOTZkMGM3ZTY4NGRlYjlmYjZhNGU0ODk1OWRiYzI5IjoiIjoiIjoiOThkNmJjN2VjN2NkNzJkYTRjNzUwZDkxNzM1MThhOWExNzEyMGZlOWFmMTBjZDFhN2Q4NzJmYWM1MDVkOTI3NmM1NTFiODIxYTg2OGNiOGI0ZDhiMTBlYjNiMDU4NDU4Mjc3MTdkMjk3NTgxNGI1MDgwYTJmNGFhNTBjNWIxMTJiZDAxYjg2NTJmMmQxYjU2YTg4YzZjODkxZGI1ZjNmNDBkMWQxZjA2NDhkODRlNmNlMjEzOGMyYzg3OTg4NGViNDg0Nzg1NjE5ODU3OWVhYzc1OWEwNjVhNWQzODRjNDYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNWZkMDg5MzBiYTQwNGQxM2E3Mjc1MjI3NjYwODY5ZTdlZmYxMGUxMDM1NDhlNmVhMTVmMDgxNmVhOTNiNjQ5ZjZhYmE0MDhhYzcxMGM0OWVhZGRlYTBiNGQxZTIxOTU3N2U2ZjZiYTRmMTkzMzg2MjI4ZjZmZGY5Y2RjYzUwZDViZGNmNmQxZjI0OWU5Y2FlMGEwOTdiYjM0MWUyYmEzNTgxYTNmMmNhIjoiN2E0NjM5NTgzMDIxMDlkNWZiOWZlZjFhMjMyYjVhZWExM2JhNThhNjBiNzA5MTFjIjoiIjoiIjoiYTFhNWM5ZDkwZjkzNDBjODA3ZWZhMjA2OGM2YTBiODcyYTRhZDUxYTdjZjkwZTE0YjQ3OTdkZDg5NDM2MTcxMmZjOTUwN2JkNjFkOGJhOTg0ZWNmMTM0NWZhM2NiY2YzMDMxZTJiYzQzMDIzNTRjZGYzZjYxNWMzYTFiZjQzZjYwYTQ2NDY5OGUyNTA3MjZjMzdhN2E5YTIzZTFmZjdlOGQ5NmRmMDM5NTdlM2EwYjVlNmM0YzRmZGJkY2ZmNDg3ZTQ2N2IxMmRiYzIxZTA3ZWI4YTdjNGNkN2Y3Nzk5MTIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNjI1ZDZhNTA5ZWM0M2M1NWJiZWM0NWI0MjQ0ZmEwYmNlMjRjNzRjYzI3MDg1MWYyZDMyZTRiYjRmMTk2MTQ3NmFmNDAwODhiNWVhODFmN2E4NmVmYmE3OGFiZGZiNTBiZTA5ZTFhNjg4NTE4OTllMGU5YWNkOTVmNzdmMTZlOGIwYWVhNWE5YmYyOWJjMWExOGQzMjE1OGNmNjljNzk0ZjNmNDdmZTYxIjoiYmNmYTI1OWM5MTlmNmU1NmM3NzkxNGEyNzI5NTljZGE2ZDJjYWZlYWZmODdkOTFiIjoiIjoiIjoiYjViYzFmMDMwOTk1NDdjZTFhMzU5YmVkZTFmOWYzYjc2YjM4ZThiOWNjNzgxZmIzOTA5ODk5MTQ0ZjRkMGE0YmE5MzI3MjU1MmJmYjBkZGNkYTUxMTY1ZDBjYTNlYWU0N2QxMDk2MWE2MjY5MmJkOWVkZjJhOTMzOWM4YWQxNDQ2OWYxODM0ZWVlM2MzZmMxMDc0Y2IxNDkzMDU0Zjg0MjczZTRhZGM3M2U1ZWVjNmNiYTI4NGM1YjdmZDgwMDVmMTBjYjY3YjBmZTE2YWUwYjRmZjMwZDUwY2EyNDVjNWQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYmMwYzgzZGUzMTIxN2ZmNmIyMmM3MTlkZThjNjY1M2ZjYmQ4YWZmNzkyNWYwNDYyNGM3NmY1ODZlZDNiYWIzMjRiNjRmYThhMWVjMTRlZmE4ZDhkMGI0MWViNjczNWQ1MTdmNmM2NDdlZjhiZWRmMzAzNmE2Y2E5MGZhMWQyYzUyODcyMmRlMzNmNzZmNzM3NTcxMWI2YjQxMjdiODZmZTA5NmU3MmNkIjoiZDdlZjZiNWRkMDljMDg0MzczMTM4NzEwNzhhYzczMGMyZjg1YTVhYmFlNmQ2ZTI0IjoiIjoiIjoiNmQ0MTVhZmMwMTUxYzNjYjQyNmViM2I5MGMyMDlmZWI3MjZjMDFlMjg3ODU2NzhiYjBiOGQ5MTQzZDRiN2YzMWFlMDdlMzg0ODE2MDcyZTJkZjMxMzUwYjEzM2E4ZjRlM2VlMThmMDRiMTU0ZDE5NDUxM2Q5YjA3MmE2OTVlNTJiZjAzZWViNGM5YTFkZjg1ZGQ2ZWY5OGQyNDUzZGMzOTM5MGJjM2ExN2YzY2U0OTlkOWIxODJjODlkMDU5MWRjM2RiZGI3YWVjYjYyNmIwN2YwYWQyNzM3YmY4MjAwYjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiY2FjYTJiODYzMTUwMmZiZDhiZWMzM2U4OTA2NmU3N2I5N2E1N2IwOWQyMWE5MmRjYzdiNjU4OTdlNTBkN2EzMTJmMjg3OTMyYzUyOWY2YTZmZDhiZTZmYWQ1YzQ2N2Y2YzE1ZjliYzBmMzk2NTNhNmU0OTYzYzBkNGM0YmFhOWQ2YWQzOWY0YWQyYTFkNjU4NzM3N2VjMzg5OGU2M2UwMmNjMGM0NTRmIjoiMzM2OTFkYTc0NjFkMzM1NTY1OWM0Y2E5MjdiNGQzZTNiYmZkOGU3NzViNTM1NTM4IjoiIjoiIjoiODlhYmU4ZTY1NjY2NzI5OTcwNWM0YzhiMjA4ZjBmYzQwMDg5NzM5N2QxNWFhMzU3NGNmODZjMGE2NDE1ZGQzMGFjNWQ3ZDhiYzYyOWQ4YmE1MmU2ZTVhZjYzODE4NDc1ODc0MjY2ZTk4YTQzYWI1ZDMwODVkMjg1Njk1MGU4ZDQ4N2VhMjJlMDFmOWFiN2ZlMTg2MmJlMWZkYjlhOTdjYzI0ZWI5YWQwNWJlZWJiMjAyNzE2NjA3ZThiMTY0Y2Y2M2NhY2I5MjUwNGU4MGU2OGU2NDFhZjcxYWQ2ZWU0N2QiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNWQ5N2RlOTdkNmY4MWE4NThhZDZhZTAyNjJlNTgxNjliMjdjMjVhZGZjMmJmZjUwNjg1NGU2YmZkMzdmM2E0ZDhjNGI0NmNkNzhkMGE3NmIwZGM2N2UwZDNmOTBmYjA0YzIxMzFiYzMxMjM5ZGVmYzhlYWJlOWJlMGZjNTg5YTU1NGE0Yjc3ZmE3OWM2NGMwM2JiZjg3YTMyMDMxNTMwZDk5YmJlMzk3IjoiYTBkOGJlMzBhMDk3MjAwMmYyMWNlMmQ3Y2YzYzhlODQ5MDdjNjM4ZTAwOTMzNTRkIjoiIjoiIjoiNjc1MzZkNzM1MmE0OWExYTQ5MTEwYTFkYzFiNzdkZDE5MjRiZTM0MTIzZTAyN2FlYTBiYTYwNjRhZTBhYTA1MWQ0NDcwY2NiZjkyM2UwYzk2Yzg2ZjJkNDQwZjE3ZjQ1YjY3YzRjNzc4NWE2ZjUwMDZiZjBjYWRjMTMyNjk1NDBiMmM1OWJiNzVmNjQyZTk2NjhmZWI2MDFmYzYwYzE4Yjk0ZDY1ZWJlYTBkZmU1ZmIyODRlMDAzYTU4ODM3ZjllOWUxMjA0ODFlYzJiYTk3MmM3NTVjNmE5MTM0YWY2ODMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiOWNhNzE0OWIwYzVjY2I3YTBmN2VjNTM5OWM2NDRkYmE5OGM0MTgzNzM0NjBjNTk5NzhkOTFkYjU3ZmY3MTQ4OTdlZTcxY2FmNDU5YzFkYzE2NDY1NTE0MDgxMDk5MmZhNmNiYmI3MDhiYTJlNjEwNTNkNTg2NmJhNmExYmJkYmM2MzlmZDIxYmU0MzgzYmViNGE0ZDM3MGU4NmQwZTk3MzllZjg0OWFlIjoiMmFkZTJmZmMxOWRlN2ZjOTQ3NjcxOTMyMjNhYTFmYjM0NjFjYjI5ZDk3MGM4ZjA1IjoiIjoiIjoiYjM5ZDZkYjUyOWZiYjNjNmE5MGQ2YjcwNTc3NTljMjZhOWZhMjYwMjRkMmI2NWUzYmY0NTk4ODFmZjBmODhhNWI5M2I4N2UwNzc5NjM1MDIyY2VhODFkYjMxMzMyOWI2MTYxMzc0MmNjODJiNTJmZmYxYTJlNmUyNGFlMGVlYmMwOTE3ZDVlNDU3MzQ2NmU0YWVlM2YwZWUwMDUzNDQ1NTY2ZWFhMDgwYzNlNzAxYmMzNWQ0MGNlNTEwNWI0YjY1NzJiYWE3YjRjODRhMTZlNGFhYjUwMWU2ZWY2NzAxNjQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiY2M3NTExNzFkODI4ZGJhMDIzZjQzMGIzZjVhNzEzNGY3MzNmNGNjMWVjNzY0OTVlOThhNmRjMmE2MjdkOTc5MjQ3MTZkN2U2YjA0M2NmMTVjNjJjZThkYTFkZGEyYTkzMGM4OGQ2ZDRkMTJjYTk5MmE1MDFmNzczZGZmNWQzOGU0MmYxNTBmMWM1NWVlMzU4YWJhMWU3M2NiZWJmNDY1YmFmOWZkMGE2IjoiNGJhNTBhNzU0MjQ5NzA1MjYwMjJjNzM1MTgzMWM1OGVlNzVmMWUzYWEwYzQ3NzQ5IjoiIjoiIjoiOGIzODdlNTViOWMxMGQwY2MzMzZmNTQ0NTc1NWMwYjZkYmU5NzFiZjY5YTA0NjgyYjIxYzkzMDNhNjZlMDkzYjdkY2NmMzNmYzY4NTc2NWM2ZDJiY2ZhMzAyMDg5MmVkMDljZTZlYTNlMzM1NWIzYmMxNjc0MWYzNGQ0MGI1Yzk2YmIwODVjMTU3NDgwMWQxNGI0ZjcxYzk3Y2Y2NGU3NWRjYzMzMGZhZmExZDFlNjI2ODIyNjA5YTlhZjYyYzg5NGRiZGQ1NjMwN2NjZjFlYmJiN2VjMDlkNTAwMDk2YWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiMWYyY2NkMjliYzM4ZTgzNjRhNGJlYjBlODk5ODRiODhkNjFkY2QzMWQ0OGUzMTBhZTY5MWMwZTE0NmY0OTViOWQ4Y2Y0NDNlZDEyZjNhZDJkYTdjNTljMmEyZjZiOGRmNGUwMjAyNDE0NzkxZTEwNmMxZjg3OTg3OWI3YTQ2YWMyMDdmNDViNWZlZDY5YzM4MzA5YWRmMTVkZmQwZGQ3NTc0MmMwZGYwIjoiZTBjNDlhZWU3MWM0YzA2MGFhYzFiYWIxZjQzOGY5ZTJiMGM5NmQ3MTBlYmZlZjc3IjoiIjoiIjoiNTkzNjc3ZjY1Y2E0MzM5YzBkZDhiMWFlOTI3OGNjNDlhZGFlZjFjZjg4OTc2MGI0NjMxYTM3OWQ4MmJjMjUxMjNkZmQyZTE0MzZkMGI2Yjg5MGQ0MTU1ZTMyMzZmYzFlMmNlZjY3ZDhiYzA0NTQwOTkwNTFlMjIwZDY5MjViMzdjNDc0MDhmZGFjZGZkNTRjYWI3YmU3MGY4YjNiM2RmYzVhODZmMTgxZGQ1NTlmZjcxODJmMjI1ZjdkZTg3ZGQ4YmQ2OTE0M2JlMjcwY2U3NmQyNTYyYzZlMDFiYTRjNGUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiZjFiZWU5Y2FlY2ZkMDM5N2E2Y2Q3NmYzNTZlY2FjZjEwNTM5ODFjNjRkMzE1ZGI0YTUxYTI0NGZlM2IyMmVmOTk3MzkyZjY1ZGMxM2NmMzBmNWI4ZjVlZGI3ZjhmNTU4NjNhMzAxNTY3MjI1MzZkMDI0NDBlNWYwNmU1MDM3OTVkMjQwMTc3NWE1NjA2ODVmMmFkM2M5OGFhYWEyMjcyNmNkNmVjNDVhIjoiOWQ0MjY3MGVhNDExM2FlMDIzMDJjZGNjNjYwYjQ5N2YzZmZiMTliOWFjYThiYWJmIjoiIjoiIjoiNzhmMzFhMjRjZGE0M2FjZmJjNGRiN2YxN2M1NzgwNWE0YjUzMzUzZDY2ODU5NjI0NzM1OGI0N2U4ZjhkZWVhY2EzMTJhN2Y5Y2U3ODgzMmJjMWRhMmQ2YjM3MjdmY2I4NDdjYTRmZWIxNjk1YTJlZGZkMmFiMjRjNDg2ZGExMjViZTFjMWFmNGY3OGI3NDlhZmRiNTdmOTdiNGE4Yjg5MmZkODcyMjhmMTE2YmExMGZhNzM5MDU5NTgxMjU2ZGU0ZmI4NjVkMTExNWM1ODI4NGNiOTg1MGEyNGU1Yjc2MTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjE3YjMxNDZlYTNhYzFhZmRjYTQ0NjI3NWYzYjc1MzlhNTE3NzY2YjkwZTJkYTJjNGM4NWRiNDgwMjk0M2VmY2Q4MDA5YTlmZmRkMDU0NDQwZGExNmVkYjY0MWEwNTBmY2UzZjNjYWIzZDVmMDNkNTUwMTExZGFlYWE4ODQxYTljODE0ZGVmNzZlZWM5YzRlOTEwNzg4YzcxMDU2MjQyOGEzOWNkMDk4NyI6ImYzODMxYzFiYzg1OWZhZDQ1MmE3NmNlNTEzNTc1YTIzZThiNzkwYzkwZGU0NTc1YyI6IiI6IiI6ImM2Yzg1OTM2Y2Q1MmI1MjcxYTZlNzA0MTBlMGI5ZDk2MGQ3NmYzMjM2YjU0OGNmZDRmZWEyNjUwNGNhOGE3OGU1OGVlOTE0YzZjZjI0OGYzMGQ3ZWUzNTQ3ZWVkZDNhNGQ5ODY5YjE1ZTMyNmM5MTFhYWVjYjdmMGMyMjFmOGViOTIwOGE5YjM1NWU0YjFjYzc5MjYzODBkMjViYjc3NmYzZTg5OTA0OTQzYjNmZGYzMDYwMTJmYzk1ZDA2YjNiN2M0NGVmNTVjOWVlZTY3NTE1MGIzMzJlMjE4MWYyYTMyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJmYWJlNTI2MTc3ZGNkNDc2YmU5OTUwMjMzZWM1NmY5MTIyYTliMDgzZTU4OWM5MjY0YWRkMzAyZDQ3NjhjMDYwMjBjZjUzZTc3MDhiYzcyODU4MjM2MGNiZjA2YTE4ZGUzOGUzZGEyNjQyZGQ2NzUxYWE2ODZkYmYxMTczNGJkNzVhNDIyNTcxYzlmMjQyMDkxNWQ3ZDc5ZDllZmVhODcwZTcyZDI2MmQiOiJiYTU4NTgzNDBlNmE4MmIyZWNmZTExOTAyMTViZDhkYTk5NWVlOGVmNTcyZWVkOGIiOiIiOiIiOiIxMDI2MGRmYzJmMjMyMmY1MzAxOTJlOTZhMjM5NjY5NGRlYWQ2MmY5YjIwNjEzNzEwODY2NmNkMTk5OTM5MTg0NTAzZGE3NTU5OGY1NGE4OWRmZjg4NWE5ODU2MTQwYjU2Njg3MzQ3YzJjMDY2YTE1OTNiZmUwMmI4YmQyY2Q5M2U5MzljNDI0YjMzNjgzYTEzNjc4YmE1ZjM0ZGYzZjJmNWY1MGIyYTcwOGQxZDVhMDQ2ODNkYjAwYTYwN2UyZjgwZTVmZWIyMDA4NmUzZDY0Mjk0ZTk3MzJiMDc3NmM1MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYjdjOWExZDIyMWZlMTA1NTJiYjBiNzk5ZTE4ZDEyY2ZmZDFmNzZkNmExZTZkYzc5YTM2NTg0YWM3ZTEzYzM1NWI5MzIzZDBlZjJmOTdmYzJkOGEyNmU2YzM3MjA5YTQ4NTk2Mzc4OGFlYWIwODRlOTIzYTM3OTRjNjM3MTNjMmVlMjg4YmEzYTk5ZjJkNDA3YWRmYzFiODdiYTY0ZmNjNWE3Zjk4ZTRlIjoiZTU2M2Y4YzgzMTg4NjJjNzExN2FmODk0NjgyM2U4NTcwZWJjNjRiM2RlMWIyOTNlIjoiIjoiIjoiMTAwYzQ2MGMxMmU1YWIxMmE3MmJkNDM1MWY3YjYwOGY1NTc4MDYwYjI2MmYyMWQ3MzVmZTc5ZDEzYzk0MjAzNWE3NmYwMDFhZGZkMzlmZTkzY2FhMjJiNjI3NGJlYzI4MmU2NDA0NjlkM2Y0NTRkMTA4OTkxYTFiNzNkOGFjYjNkMzkyNzMyZmMyNGNhZmIxNWZiZTI0ODQ0MTQ2MmJiMmMxMjc4ODgzNjEwYmEyODQ4NmVmODJlYzJmZjNkMjBlYjk2MDE4NjZjN2RjNGVhZjQ0Y2RkNzNlNWI1YWMxNGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6Ijc4ZTVkNDgxODk2NGQ3NDgyODJmYThkZDM4NmVhOWM5MjBjNGZjNWRkYjlkMjIwNGEzZjYyODUwODJiODA2NWRkMzk0NGNlMTkzNzIyZTk3M2Y4MzAwNzgzZTM3OTkxZTZjNGE2Mjg2YTFhMGZlMzcwM2RkNzhhZTk1MWM4OGEwY2U0N2IxYTIzZDkxZTA5MjYzNTgyMjE3MTM2NzBhNzg3MzJkNTQ3MCI6ImZhMDU4NTg2ZDM1ZjBkNzRkMmM0NzNlMDA1ZTdmOGRkYzMzYTFmNmQ1YmM3OWQ3NSI6IiI6IiI6IjZiNjAzYjA5OGNhNzRiN2ZjZjNjOGY5YjQyZGRlNWIzYjUxZTg0Y2FiNGY2N2Y0ZDg3YmM2NTc1YWQ0ZmEzZjFlMGVlMjcwODVmODhlMmE1ZWNmNGY1N2Y5YmE5MjYzOGU1Mjk0MTUzNTgwNmQyY2QxYjVhZWI1YjdjODFiM2Q0NGQ0MWNmNWI4MDczYjY0NmE5Y2MxYjBhOWY3ZTE4M2IwODJlOWYyMjcwYWNkOTI4NjIzZThhNDZiNDYyNTdlMWI4MjdlOGI4OGI1NWM4OGEzYTNhMDY3Y2ZjYjliMmIwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI1MDI0MTczOWUzZjA4YzkxMGJhZWE3ZjliYTQ4MTUxMWI2ZWU1ZDY5YmIxYTJkZDM0ZjM5ODdhMjMxY2MyNWYzOWExYTk2NjM5MGUzOTFhMzNkYzIxMjgxMzcyNTg5ZTJhNjY3Y2RiYmU0MjY3NzEwZDUyNDRmZDM0MmM5NTliNzI3MmIzOWU1Y2RmNjc3MDFkNDc2NjViNjE3ODI1NDFlOTRhYTIyNGYiOiI2YTdkMmYyZGNmY2FlOGEyODQ4MDJjOTdkNzc5MTdlODdjNmNmODQxN2MyYjE2YmQiOiIiOiIiOiI0NDAyYWZlZTEyMDQ4YzFjNmE0NDYyNGQyZGYwMjY3OTg5MzBlYzczMjg4NDg5OWZmZDIwZDE3ZjFjOGQ3YzIyMWNmNWVkYWM4Njc5YTIxZWUxMWIxNzdlY2ZkNjE5MjdkNGNjYmIxNzVlZTZiNDljYzZmMzcxNDUwOTA0YzI2NjZhYWYyZTZjYjM2Y2Q1NWNhZTNhZjc3MmJlYjgwOTU1Y2Y2N2I0ZThiZTFmY2UxMTI1MGEzOTY5M2VjYjdmOGFjMDVhYTIzYjk0OWFjNzRiYzlhNjcwNjBjZDYwY2M3NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMTkyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImMzMDA1Y2RjNWM1YjdiMjVlZDc4Yzk2ODRmM2ZhZjYyNzhmOWE5YzVhOWZiMjAyMDE0YTI5ODgyZTUwYjIxZTU2ZWM4Yjc5NDdmZTg3MWRhZWMyNjI2ZjMyMzcyMTIzZjQ0YTg3MjFmZjQzMzllMGEyMGY5NzhlYTI3NjA5ZWI0OTVjMjM0MmU5YmE3MTliYmQyYjQ0ZmY1MDNkYjIzMjJhZGExYzk4MiI6ImM0NTA2MTA5OTM3ZTBmOTM1MmZjODgxYjAzOTZiMGExMDM2MjZhMTVhZGRmZTUyNSI6IjZlZTQ5Yzc2ZDEzOGVhYTNmYzEwY2Y0MTFlMGI4YWQ1NDg4ZDc3Zjc0ZmFhY2YxMyI6Ijg4MjUxMjJiNTA2ZGQ2ZjNhNTg4MTFmZTZjOWE3ZTkyNzFhNmU2OGRjZGQ1OTBlMiI6ImU4MTg4ODdjYTFjODQ3MTdlMjc3YmFmMDA5MTNkNjVlZDU4YThmOTBiODcyODA4MGEwMzA0M2JiMmFiNTNmNTVmYTYwNWJhMGNmYWIyOWI0Y2I2OTRmNmFhZTY1OTRkZWRjYmU2Zjc0ZTFmNzU3M2MyOTQ0ZjM3MDNiODlhNTI3ODliMDE3MDA3N2VhOGU2NmQ4Mjk5YmE1Y2MxMzk5NDNhYjk2MjU0MDY1YTI3YWJjYTIwOThhODUxNjJmYjAxZDI5NGQ4NjcxYjAwMjA2YjdmNzg0MzE5Mzg0ZTAxYjNkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiOWJmMmFiMTlhYTdlOWZmYzM0NjE1MjJmM2NmODViMzI5MmI1NGJkM2UxMDk5YTQyZGQ2ZjUzNDlkMTY5ZDU5YTE1MmIyZGNlNjc1ODc0YjY2NWZjZmY4MDIyNjBlYTg0YjM1OGY2ZmNmODAxMWI1MTE4MzRlODQ0N2E3M2MxZjY3NWI3NTk4ZDgzNmRjOWZiZjQwZjFkZDBmNDgxZjQ3Zjk1ZjNlZjRkIjoiMzhkN2EyMTA5YzZmYWQ5MjA1YWJjMjJiOWZmNzA1YjdmNjcxYzRiZGU1YjY2MmQ0IjoiYjQ2ZTkyOGNiNTllYWMwY2JlZDY1NjQ1NzY3ZTk2ZmQ4MjRmYTk1Y2I5NmExY2Q3IjoiNTMyYzhkMzc0ODIwNWNmYWE4MjZmYmE3ZjI0MGU5OTI2Y2QzODExZGE4ZmQxYTVhIjoiYmMzNjc4MzlkMTUxMDMxNmFjM2JhMTdmYjdiZjYzM2E2ZWI0YjYxZGMwYjAzY2YxY2NhNTY0ZGI4MjQ4Y2VkMGI0N2NjYjM2ZTczMGMwMjM3YjA4MTJhZjMwMzYxYjVkY2U2NjI2MzZiMjNmODdkNmFjZTgyY2QzZTM0ZDQ1YTExMzNiMzVmZjliOGJkZThmYjI5ZmU4MjI5ODgyMGMwYzg3ZjBlMzA4ODdkZGIxNWM5NjQ0YmZiMTI1NzhmMDg3OGE3MTA3NzFhZDIyZmUxNjkzNWM2NjY4MTM3OGY1ZjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDE5MikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJhM2JmYmVkNTU5YzM5NmI4MDdmZmE4MDQwOWZjNGUyYzIzYmE5NTJmNjRhNDFjMDdkM2FmNWU1Yjc4ZDhlZjg4MTcxYmQ1MDIyZDNlMDJlZmVmYTY0NGY0ZmRkYmUyMDdlNTkzOTc2MDVhMDQwOGIwMjAxZjZhODgyZGVmNjRkOTczYzA3MTQ1NTVkMmM3ZTBhNmZkZGY0OTU1OGZkMTMyODA3NGNhNzkiOiI0YzYzYmVmNzlmNzFmYTgyMTY4OTI4NjE5Y2QwOWIwMDNhZWIyYmEyYjA0MTUwZDIiOiJjODViYjM2OGE4MmQ1N2M3MGNkNWFkNjMyNzE4N2M4NTUwZjdjMTAzODBiMmYwMzAiOiI1ZDQ2N2U5YzA2ZWUwNThjYTA2NmRhZGQ2ZjZlYzZiMGRhNTllY2JhYTRkZGQxMmUiOiIxY2UzMTFjOTE5YzY3ZTE1MWI1MWNlMzA2MDM4NGNhOTVjMDcxYTI5NWYwMWU1NDM0OWFiYWEyZGE4ZWY0OTdlYTEzNjQ0NTQxMzNkMjBmNTdkYTI4OTg1YmZjNmQxZDJmNThmODRkMTQ0Yzg1ZGJlM2M5ZmQ1ZTg5NThjZTA2ZjJmNWFkNWFmN2UxNmJmOTBkZGI0YTFlMjk0N2Y3ODAwODQ2N2ZjYzM4YjVhMDgyZWIxNjEyZDY4ZTM2ZTNjMGFiZmJmYjNhMzIxZWVmMzc1NGFjMTZjNDFmOTZiZDYzNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMTkyKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjFiMmMyNDE5ZTg1Mzg2NzE2MTM1YjNjMTQyZDc0OWYxZjViYzIzZWRiZjhjMGExYzUzYjcyZjQ3NDQ4NGM1NDU3NjFiMjFhZWZmMDVjZGQzNTYyMWQxMDRlZTM5M2U3OTE3MzdjNDhjNWE2ZTZiMjViNThjNWM1YmUyOGVjZjE3YzQxMGM5YzljM2MzYWEyYjYzODVmNjY3NTlmMzFiNjFmOWZlMDI4NiI6ImI2OTAxMWY0NDZlNTA4ODBhMTViYjBkZDAwMjI5Zjc2NWJmNzdiMmE0MDA0MDEwOSI6IjY3ZWI2M2ExNjhhYWQ4NzEyYTBlN2UwZjE2MmFmN2FjNzg5M2U5MDJmMWFhNzJjZCI6IjIzYmI3NTJlNjIzMjE0NDYzMGUzZDNhNmRhYWExZTU4YTVjYTMxNWYyMWZlMWQ4YiI6ImNkOGU2YzZiOGExZjdmOThmNWQ3OTYwMjNmZGQ0ZjFkYTJkNzJlZWRiOTZhOGU4NWNhYzY2MWRhMjRkZDBhNzgxMGZhMDRiZTA0OTFjNjlkYjc2MTc3MTI1ODJiNDNlYzRiZjExMmQ5ZTI5MzIyODhmMjViNjRmYjdhMmEwOWFjODc0N2I4ZjcxY2U3NWUzYzgwYjg1NDMzNmEwNDU3YjgwMTNlYzZkYzEyNjhiNGM3ZThmN2QzNDIyYTRhNWQ0MzJmOGQ5NzA1ZDZhMjczYTA5YjlmOTI3M2Y0OTI4YzRmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNjJkMDU5ZTNlY2I2OTUxNjdlOTNiM2NmZDc3Zjk2ZTY4MTk4NWFiNWQ2OGYxNTQ3M2E4OWY5Y2JjNDAxMmUxYzA5MGE1YTllNjVmNzM4YmU5MzhmNDRmZDZjYjE1N2ZkOWI3MzdkOTM4OWU0ZTU2YjY5MDNkNGQwMTVmOWQ4MGQ5NjMzNjczMGZkZjU3Nzg3Mjk2ZDQ0N2VhOTFkZTdlNjg2YzdhODFlIjoiZDhmMTIxYjJiYmRiODUzMGM2MzE1YzYzZTBhNTJlMzgzYzE2M2MwMzNkM2IwODU0IjoiODMwZTJjYWIxMTMzMWI3NjFhZWQ1NWRiNjE2ODFmZmZhZDNhNjFhMWEwNmFkZmVjIjoiYzc3ODNkNzM1N2ZmMzBlODhjZmRiYzkwNTY5ZGFmMDNkM2ZlYzhjYWY4OTYxOWZmIjoiZTQ0YzliMzVkM2I4NDdhOTI4NzQ4MDk0YmE2NzU0ZDFjNWRlM2NiZTNkOTBkNGUyYmQwYzBmMTlkYzVhZWQ3MjI4YzU0MTA0NGIyYjE0ZDdlNjdkY2MxNDhhYjA0YWJmZjdjMjJhOGYxZmRiZWM0ZDY4YWQyNGE3YzRiMGYwZTUwN2JkN2YyYjQ4NDU1OTMzNjNkYTQ4NGI0ODE5MDZmYjcyMDc4NDQ1OTcyMzhiOWQ0MGMxNDIzNzAwNGUyNzU1NzJhYWM2YTZkODRkMTUxZmE1OGFiYzA5ODdlNTRlMTgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDE5MikgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJmY2YzODg3YjQ1MDVmN2ExMjczYWQ1YjMyZTA2NGZmNTE2ODJiY2EyM2VkOTc0Y2E5ODE4NzFhNWI3ZjYzZTVjZWVlNTgxMzFmOWEwMWZhN2MzN2FiMTQxNTBjOTMyM2EwM2Y2OTRlNDYzNDk2YzQxNTllYjhlNWQzZWJjNjJmNDEyNjRiZWI5MzA5OGE0MmEzZGQ0MDZiOTgzZTFmYjA0MGQxMDhmOTMiOiI5YjNlOTdlZWQwNzcxNTVjZjE4MTgyOTIzMzg2OGQyN2ViNzczYzM5ODU3NWRmYjIiOiI3NWE3NWExNWM2MjJlNjllYmE2OThhMDY0YjBiNDFjOGJjODBlZjgwM2RmMGYyOWUiOiI3YjZhMjBhMjIyYTgxZGZhNmZkMTY0ZGVmODE2YzJiNjcwOGJkNGM3NjFiMmJiOGYiOiIwYjNkNTAxZjcyOGQyZjFkOGIwZDdkZmZkYTAxNjAxNTdiMzBkMGQ5NzkzMjMxNWY3NzAyMmQxYTZmYjMwZDlhMGVlNDM4M2YyZjYzMzc3YWM2ZTU3YjE2YjBjNzQ4MGE2ZjVkZDEyZWQzZWMwYmM2ZjEwNGEyNmM4NjU5MmRhYTNmNjhhNDk5NTcwNzAzMzA2ZTJjMjQ0OGU3ODRiNjdjZDZlZmRiNGFlNjRhMmU4ZmZhNTkyOWU3NGM5NWI2NjNjOWI3ZmU4OTE2MzNmMDdkN2I1MGY1ZjE2ZTlmZTU2NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMTkyKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjdhNmEwNzc0ZjJjYjVkZGNlNmI1MjQyNzgyZmQzZDdiNWM3YzdlMzFjYjVmZTk1MzY3YzA2ZjI5YTU0ODhmYTM3ZmViMzRkNjg5YzY0NmNkYjE2MmUyNThhZDYzNmEwMzBmZjc0ZjZhN2ZmODc2NDE3ZmIwOGY1YzVkZWNkY2M5ODY5MjUzOGJlYmY5OTU4YzYyN2FkODI4NzYzM2Y5OGM1ODdjZGFlYyI6ImZiMTZhZWE3Mjk2N2M0M2I4ODAzYmNkZDNlNzk0OTExZjZkNTNmMmNiNzk0NmNlZSI6IjY3ZDg5OTQ3Mzk2MzIyY2EyNDNlMmM1OTFhM2FkYzhmZDlmMWVmNDQ4NDE0ZmNhOCI6ImEwZDU2OGY0ZmNlODYyZTVlMWIyMmFjY2EyOWU2MGQ3YmM2Y2RjZjZjYzI3Nzc5NCI6Ijc1OGI0Njg1YjBkYjEwOTNlZWJkZTA3YmExMTA4NWE5ZGNhYjY0YzhkNWFkYWNkYTA3MGZkMmIyOTJiZWM0OTI0MGYyNWUxNThmYzk2Y2IxZDBlY2M5ZWJjY2NjMzYwYjk4MWQxNDBlM2NkYmE1NGZjNjk3MzEzMDE0NDUwYTlhZjI5ZDlkNTVkY2JjNWJiOWEzOGU0ZjEwYzZhM2U0MTg3NGQ1YzY2ODhmMjJkMGM1NzE0MzAxMDgzY2JiZDAwMTQ4ODBhZjBmN2QwODhkYWJlYjRlODRhNjRmMjZkMmI5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiMTliYmJiZmNiNzU1Y2Q5ZGMwMDBhYmZjMDMzNDNlZjY0MTkzMTQxYzNkM2Y0MzEyMGY1NTY3NDYxNmUzZDk2YjYwODZhZGY0N2M5MDY5ODE5MjNjOThlZjdkZDBmYmIyZjdhZjBlY2JiZDJkZTg0OGYyYjI1Y2JhODY1MWI3ZTNhZWFhMGM1OWI2MDVlNmQ0NzEwYTAxNDA2NTY1ZWEzMGQwYzRmNjhkIjoiZTc3Y2NlOWQyNmQyODNiYjVkNmU4MzAwYWQwZjY5ZGY3MjMzMjRkMjM5MjhjNmY3IjoiMDU4NmM3NjA1MTQ2MmQwNDgzMDcxMjEzODA0Mzg1ZDAxYTA3YmNiMjdkYjA1ZTA2IjoiMWM5MzYzZDBiM2U5ZjQyYjZjNzIyYjhkNjJmOWM2MzMwNjY1ODc1NzdmZTc2NmUzIjoiNmQ0NTgwNzkyNjRkNWYzOTQwZDA5OGFhZTA5MjY5MGI3ZDA0Y2Q0NmQ2ZDVkZGU3NTMwNjNiNzE5NDExOGFiNjdkMzg0ODQ1OTE1NmI4ZjAyMTZkODViNWM1ODNhMWJmYzAwMGU2ODExMWJlNDU5NzQzMTc1ZmQxMTQyNTNjYzI0ZGI3MmVjYzk3OGZmODYyMDMwMWVjYmYxOGY0MmZjNDY5N2Q5MTE1MDY0OWE4MjU0YTk4NTBkNWMyOGY5YzRlMTg3ZTQwOWU0OTZlMmE2NTliMmU3OWMwNjA3NGM1YzkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDE5MikgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJjMmI1NzdiZmQ4MDJiOGY1OTljYTE0YmRkNWZlNTAwM2VlMjhhZTY5Y2E1YzI0NmRmNGY2MmQ5ZTIxYTc3OTMyODFjNDhmNzNmZmVhMTVmM2MzZDQ0NGJhNDgzNjdmZGUwNGNkZjZkNjI0OThiOGFmYjI0OTY2YTg2NjI0NjEwMTUxMzVjYjU1MDM0YTYzNTcxYTAzMmQzY2QyYzFlNmNmNGE2ODU1ZWYiOiJmMGRlMjlkNDUzMGI0YWY3NWI4ZGVmZTliM2IyNGRjYjdjZTBhZGQ0YWVkNmY3MmQiOiI5MGFjMDU3MDNhOGUwYzYwNTdkZDJkOGIxYTZmMTZmMDA1OWU3YzcwNjc5OTE5ZGYiOiIxNjkzNWY3MDBkZTlmZTUyOWEyYmJlODExZGNjYWQ0MzBlMjdkYmM2MDU0OWMzZTUiOiI1Njk4OGY5MzI4YTkxMzE0ZTRiM2FlMDI3YmM2ZjQzYTAxZmU0NzE2MTVmM2EzMTlhZmQ5YmI2M2Y1NWIxM2U2ODFhYzBhZTgzMGQ0ZDMwNTc4ODJmZTI0N2NhNGRlY2JiMjZhZjgxMTI4MmY1OWVlODllYTM4NjQyZTRmZmFkOWJkZmFlNDRiY2RiYzNhMjg5YmY0MzFlMGJmYzY4MTQ4YzEyY2VkMTg1M2U2OThlNzRmNzRlMjRhYTQzNDkzNzM5MGZkNDFjYjRlNzhmODIzYTI2MjkwMGYyZjQ0YzFmYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMTkyKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImI1YzRhY2M2M2FlNWM2OGNhNDA0YmRlZDJkMzZhMzkxZThiMmU5ZWYzYjMyZWI1OThhYTk0ZmQ2YjVlZGU2YzNkOWMzM2VjNzdhMTk1YWJiNmY4Y2JjYWZiNmM0OTJhMWQ3OGYwNDQzOWJkYzQ0MjE2OGQxZWNjYzc4M2Q1M2E5MmUxNmI5MGNjYmRiMDI4NGIzODNjYjk2YWYwNGU4MTcyOGQxY2RhMCI6ImIzZTZkZjVlOWFlMTBjNjNkYTQyNjlkZTE3MDU1MGI5MmRkZTdjNmUzM2FmMjI4ZSI6ImM5Nzg3YjY0MWI1Yzg4MWRhZTUzYTY5ZTJiMzUxNGNlMmVhODFlNTg3OTc2NWJkMSI6ImU0YWJlZGNmYzRjYzY5ZGE0NTQ2N2JmMmJmYjAzZDgyM2FiYzE5YTc0NmUzYzU4MiI6ImUxNGY0NmRjYWIwYmEzOTk2NWYxNzBmMDFhMDczMDgwOTBiMDUxMTI3Njg1YWRhNjYwMTExMmFhMjM2MDkzZjdhNzYwNTMwZjg1NjYxN2Q5ZTAyN2M4Mjc5ZWYzM2Q5ZmJjNGI2MjRhZTI2YTI3N2I5ZTYwNzdhYzcxZTJkMmYxMDFiODRlYmVkMDA3ZGRlZGRiNDI4NmFhNDcyOWNiM2IyODc5ODM4N2I3NTdkOGU5OWE3YjZkMjYzMTYwMWZlN2FiNGNhYWQ3OTgzZGVkZTU5Yjk0ZjRjOTIwZWYxYjI5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjczMDJlYTQwZTIxNDMwODEzNmI4NDI3ZTYwMWFkNjExMzJkMTk1Zjg3MGYyYTg2MWM3YjhjZTFmNjg2YmYzMjVhMTU1ZDBhYWUxMjExNDAxYmI4NDQ4OTNkYmEyOTA5MDYwYzc2Y2Y5Y2RhNzU3ZDllMmNiMjRmNTYwMmZlZGY2YTc0MTJmNDk0OTdjODI4NjZhOGM5YjU2ZTJiYmFmOTEyZjc2MDI1NSI6IjU4ZWZhYTc3YzliZjQ0NmNlOGQzZjNjZTczYjdkMWYwMTRiZGVmZmVhMmEyZmRkZSI6IjY4ZjllYWIxODkzMTg2ZDdlNWNmM2E4YzM3YmYxYzIyOTM0NGFiZGNlZWNkOWRlNSI6ImEwZDNiZjFkZTYzMmZiMTljYTUzMjZkOTM2Zjc5YWFmZTU5YTBlODA5YjEzZjEwYyI6ImYyYzZhNzE3YWIxMGE5Y2M4OWY2ZDNhMDdiZjYwNzdmYTMzYzJlNWQ2NzQ3NWViY2RkMWI4OTVmZDAwNjc5NDFlZDNmZDhmMjUxMzUyNDAzYzI2ODBkZjIzMTlhODgyZjM5YTkxZjhjY2I3ZGYyYzA2YTEzMDM3ZjA1Nzk2MmUyM2I4ZWEwNjU0ZWY5YmZjMTliNmVjOTgyZTUzOWVhNmFmY2QxMTQ1Y2VlNTgyZDI3YjcwODY5MTM1NGI0YzM5N2E1MWQwMDRjNjE2ODdjMWM5Yzk0ODU3NjAwOTAwMmVlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjQ4Y2UzMzRmY2RlYWU2MDNjNTRmYzIyODQ2MWU3MTczNjgxYThlODM4N2UwYzA0OGMyYWNmZGQ2YTc4Yzk1NWRlYjdkYzI1YmVhNGU5OTI0YzRhMmFlMjJkOWZiNmIyMjc0NTJhZGRkMGI2ZWRhNzc2OWY5Y2VhYWYyY2EzNDU2OGIzYzE5OGViZGNmNWY2ZWQxMWY4NjMwOTdiZDU2ZjQyZDY0ODg2MiI6IjZiZjRjMTczZDI2NGRjZTAzZTQ3NWZiM2JkZTlmY2EyNDc0ODc3NjI3YmZiMGM1ZCI6IjJhNzI4ZjQ2MWNlMTA2N2RkMzg4OTYwMDI3MjRiNDk2N2MxYTljZmVjZWNkMzQzNyI6IjJiODYyY2Q3YTk0YzE3NzZiMjYwMjJjMjdjMGU0ZjJkMTk5Y2NiNzgyY2FhZTZkZCI6IjA3ZjgwMzI2ZWE3ODFiZDk1ZWZlNzI5ODY3ZDZjMzk0NjUyMTNiYjY5OGI1ZTQ4NmU2YzVmMjdkM2ZhYzRmZGEzY2ZiN2M4MzFmZTYyOTEwNjJkNGRiMmFmZjU5NzgxZWZiNGY0Y2Y0MjgyMzZhYWQ2YTU1MTExYjk2OTg4NWE2Yjg1MWQ1NDYyMjc4ZDA4NjM5MDlhMDc3OTZlNWUwZTg0NDhmYzBkNjc0YTQ0MDhjZDllOTFlOThlM2FkY2VjMjA2NGFkMzdkY2M1NjZmYWE4MDE0OTUxOWY1ZWEyNjFjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImIyM2M3NDhhOWM5ZDIwNmVkNGNlNmI4YmFjYjZmN2UxN2NhY2Y1NjQ5ZWE4ZDFlMTE0NGE5NmU5NzdhNGNiMjJjMGYzNzEzOWMzZWVkYmNjOGI5MDI0YzZmMjE0MTJmMTYwMGZjZGUxNDg4Zjk1NzQ0NDQ2ZGY3YjZlMjFhODU4MjI0YjkyOTRhNzU4MjlhMDE0Njk3Y2M0YjM2M2MzYWQwZTE1MmNhNiI6IjMyNWJkYmQ4YzE0Yjc2NmQ0YTdmZjBlMTQxMjg1ODViMjFhZjc2ZGU3Y2EzMGZmMSI6IjJlMDAyYTQwNmJiODA5MGVhZTZjOTUwOTQ0YTRkNjc2OGM4OWQ0M2NjMGQ4YmQxNyI6IjQ4Mjg2MjJmZjU2ZDA4NjdiYmFkMDNiYWM1MWI4YzkzOWE1ZGZhMzNhMzYyYjEyOSI6IjU4Y2ViZGY0Njc2YTIxZGVkNWViYTRkZDE5NDUyZjVkZWM5MDljNTg5NzUxODc5ZWE0MjQ5YTRjOWZlZjgzNGQ4NWRjZmM5NWFkYTgyZjdmYmExNDc2NDUxNzc0MDM2MjQ2ZDdhNDk2ZDRkNDI3ZjM3NjQ3ZWJjMTBmYzJlMTEyNWIwYjcxZGExZmE1ZjE0NzljNTY4MWU5ZDdhY2M5Yjg4YjUyNzM5MDczNGQ5NDNiZmY2YTc2YzRiMjJiYjRmNmFjMzMxZjc3MTBiOTVmNjgwNmZhMzVhMjlhMmZhMzVmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjYwNmYzODhlOGFlMzVmYWY5Nzk0MzQ2NTYxNDQzNzA5OTFlODliNzQ1N2NhNWI1NWQ1YmYyYjQ4ZmU4Y2I2NGY1NDlmNDhhODEyZWRiYmI0Y2ZmODk1ZWZiMjFjOTBlYjI2YzFkYjIzOWVkNzJkYTQzNTA0YTFlMDljNTZmZTE0NGYyZDA5MjQyZjI2NzBkYmUyNTYxNDU2ZDkzODM1MjEyNWIxOTEzMSI6IjVlMDM5ZjM4ZDZmOWE5YzRlY2M2NzE1OGY0MGQzYzhkZTYxODA4ZmQ3NDc2ZmJmNyI6IjIxYzdkOTc2ZGE3MWJjZGU1MWEzYjRiYzFiOWE3OWNjNmM0Y2E1MWVjOTkyZTQ3OSI6ImJhYzFjNTkwNDgxNmMzMDQwZWI1MzI2MjJmMTI3YWMzZTI4Y2Q3OGJhNjg0MDRhOSI6IjVmOTUxZGQ3NzRiYzFhMDgxOGIyNDlmZmM1MTM0OGJmMWYzNmFhNGI5ZDZhMzM0OGQzNmRmODRiNWQzZTgyNGFkY2RmOGI4N2ZmZWNmZWMxM2ZlMzZjYTM1NDYyNWFlOGRiOGE2OTcyMjI1NGMzZjZlNzAyN2I4NjZjNTI5ZjliZWQyNTM2MGUwY2VlN2NlNDFmOTk2ZDUwZDIyNGEwOGU5NjVlMGU1ZGQ2N2E3NzE0MmUyYTNkZTBkNTU5YjlkYWU4OTE5YWQwMzg3YmE1ZmRlZjY5OWU0MjAxNmQ3MjkxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImJlMTZjYTUyNTUxYTZhMDY1NmM0MDUzOWUzMTU1ZWViYmM0MTZjYmZlMjEyMTAxZjhlZGMyZjcxMTg0NzI5MDdhZTliMmI5NTc0YWJlODEyNTc1MzMxMTU0NzI2MTBhYjQwMWQxY2UxZjg5OTg4ODRhZjQzZmE1Nzc2YTU5YWUzOGM4ODYzMWEwNjZmYTg1ZDI0ZGZjOWIyNTQ3Y2FhZTU5OGNkMGZhNyI6ImVkMDAwYWQyZTQ3OTUxMzg2MTAxNGU4ZmY0NWE0ODFhNDk0YWYzMTJkMmRkNTU2MyI6ImZlYjI5NWM3NDk3NWYxZTFjNzM4OTg4ZmM3MGI5ZDI2MDNjN2RhOTM4MzIxNTRhMSI6Ijc2NDcwNTY4MWI3NzgxNTczYWY4MTFmYTc3NTFkYmMyN2Q2NjdhZjdhMWU1OWRjZSI6ImJhNGEwNTgzZDhkNmM1YjQyMTZhMDg3NWNmYWQ1OTQ0ODU4NThkYzdmOWVmMjY1ZDRlZDBjMGYwZmJmY2FhZjVhZTMxOGRmMmQ3ZmM1MzAzMDE4MTNkOWY0OTgyNjAzMDYyNWY3ZWEwMmQwNjMwYjM1NzNjNDg2YjFmYTBlZjQyNjljYmZiNmZiODY2NzVjMTFmYjdjMDU3MGNmN2ZmNGZjN2FmZmRiMDA2MjVhYzQ1M2MyM2MyMjlhNGVhNWY1NDBjNjZmMDMxYWIzNDYyZjdkMTI2NTllZWM5OTA1MDFmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMCwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI5OTY5ZTU0YjQ3MDNmZjMxNzg1Yjg3OWE3ZTVjMGVhZTBkM2UzMDk1NTllOWZlOTZiMDY3NmQ0OWQ1OTFlYTRkMDdkMjBkNDZkMDY0NzU3ZDMwMjNjYWMyMzc2MTI3YWJjNjBmMjk5OTEwMGY3MzhjMTBmNzQ3OTI2NzZhM2ZjNGEyNjJkMTM3MjE3OTgwNDZlMjlhMjk1MTgxNTY5ZjU0YzExZDQ1MjRjOTA3MWJkMzA5NjAxNWZjZjdiYzI0YTYwN2YyMmZhMDY1YzkzNzY1OGEyYTc3YTg2OTkwODlmNCI6IiI6IiI6IiI6ImFiYzAxNTg1NjA5NDgwM2E5MzhkZmZkMjBkYTk0ODQzODcwZWY5MzViODJjZmVjMTc3MDZiOGY1NTFiODM4NTA0NDIzNWRkNDRiNTk5Zjk0YjM5YmU3OGRkNDc2ZTBjZjExMzA5Yzk5NWE3MzM0ZTBhNzhiMzdiYzk1ODYyMzUwODZmYTNiNjM3YmE5MWNmOGZiNjVlZmEyMmE1ODljMTM3NTMxYWE3YjJkNGUyNjA3YWFjMjcyOTJiMDFjNjk4ZTZlMDFhZTY3OWViODdjMDFhODljNzQyMmQ0MzcyZDZkNzU0YWJhYmI0YmY4OTZmY2IxY2QwOWQ2OTJkMDI4M2YiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjM3MWQyZDNhNTBkOGZlZjQ2NWIwMmQ1N2YwZjEwMmU4MjBjNjI0YjBlMTE3MDNiYjgxYmFkZjhiMGNhMTg0MTU5NGIwYmQxNmMxZmMwZTVlMTIzNWRmZDQxNDA4MTE2NGM1NGZmZDA1NmM5Y2RmNjg4Mjg0ZjYxNWNmYjQ4MTRjZjI4YWM2ZGFjMDU3NTZlMDdlNmJjOWY1NjAzMzY2NmFlMzU4MTlhZTM1OWQ1M2FhZDE0YWRjOTE5OWVhMTU0ZTQ1ZWUyYjA2NDk1NWE4ZjMzNGI5ZjYyY2VhMjNkMGIwIjoiIjoiIjoiIjoiYjQ3NGRkYzY2ZTRjYWMyZmRiYTE5NWNiOWM1ZWU1MjFmNGEzZWJjMjRlMzcyMmRmMjgxNzc0YjdjOWFjZmE4N2JkNWI4NWMxZTRlNTU5ZTI4NTlmMjM4MmVjYzNhODIwZDc2Y2FjZGYxMGFkNTU5NjkxYjcwNTliNGU3ZjNkOWE0NDUzZmZhMjQxNjI3YTNhMjU4YjM0MzlhYjdmNTkyZTk1NzUxYzgyNmI2Zjg5YzkyZDFmODVmYzg1NWQyMzEwNDVjNDA1OTQxYjlhOGI1MTAxZjc2ZTZhZmVkOWMyMDMyNzEyZWI1YzYwYzE2YTdlY2ZjMjZiYTBkNDdhZGYwNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiNjBlNWNjM2IyNjBhMGZkYjllOTk0YmI3YzdiN2ZjMzJlZjAxMTc4MTNhMzNiNGY2YWYxM2VkODFhNjFlZGMzYzcyMDliZWI5MzM2ODU1ZmUyMDdmY2ZiNzczNTY4OTRiNGZiYTBiN2MzYTkzY2Y2Y2RmZGFmZGI0YjU2Y2YwOTM4ZjJjYzE4ZWQ1NGEwMmEzNTUxMjQ3ZWUxMGU2MDZiMGFhYThkMzBjYmUwYmRkMzc4MWExYjIzOGUxOWNiZDg2YTJkYmRjYWE5Zjk0YzNkMzlmOWRlYjhjNGE2ODAxZTciOiIiOiIiOiIiOiI2MjhhZDIwYmFkODhlNWIwZWUzMDEwNzY0MDI0OGE4MWY3YzFlZjc3Zjc1N2E0MGU1MzkyN2QzYjEwYWRjNWI3MzRkMzc5ZDcxYTI4YjNmYmMwNzg3ZDYwNTRjZmE5MjZhNWE3NGI0NjRiODE4ZjhkMTg1NDMwNzczZTdhYjA1NWY5NjQ3ZWVjMDFhNzFkY2Y2ODBhYmY3NTg5MzI5ZTEyNDhhZDlkZjIwNWQxMGNlY2NkMWJkZmU0YzliM2Y2ZDdiODA0YzUxMTRjMTQwNmRiODNjOTIxYzgyOGRmMzZmNTc1NWU5ODk1MjAyNzQ2NjlmN2YwNmY1NTUwYzk3ZDRmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMCwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI1YjkzMjA3NDhiMWM0YzQ0NjI0YjI2NTA0ZTllOTc2NWExMzZmOTY1YzVhOGQ3ODc1ODUzOTE3ODJjNzQzMmUzM2U1ZDk3YTRjMDUzOTRkNTcwNDAyYjkwOGY1NGI4MGNhZmU5YmU3ZWJhNmM0YzQ0MjRmZjUzYWRjYTUwYjUyMmEwZWMxYjUxZWZlYTM1YmY0NzRmYzZhMGQ2YWE2N2Q0NDU4MmMwMWYyODdmOGE4YTljYWViNTcxZTI2Zjg2MTAwOTkwZTU2MzMxMzliNTZmNGM3MzNjZDVhZDA4YzRkZiI6IiI6IiI6IiI6IjcwODgzMzAwZWY1NzhmNzk2ZDhmODVhMzBjZDhiOWU0ZTJjMjlmODRiN2IxMjc4MzY0NTA1NzE0MDhjOTJiNWExYjViYjA0MGY4M2JjZWQ1MDhmMjZkNzA2NmVlMGI2ZTYzNjRlZWIxYzYzOWE1MjkyMDUwZjc1NWZjNzhlODI4YzA4MDU0YjE0ZTNhOTk5M2MyNjg1NzkxZTJlYjFkYmYyNThjYjc2MmVjZGUxYWEyZWQ0MWZjMDA0YWM5ODllMGZjMjZlMjQ1ZWM4N2E5NjAwNGM1YjI4YzQ1ZDhkOWUwODI5YmRiNjk2MTM3ZjljOTQ0ZjUzOGMyOGJlMzRiMDUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjM1YTE3ZDEyNTE2MjhmODJkYThiNGIzNWI5Nzk3ODNmNTBlNzZiMmNkNzdlMDNhYjJmNjRkMjlkMjZiMjJkODJhN2I4OWNjOGJhODVjNzBlMTBkNDJhZGM4MGRhMDE0YTExY2JhYzUzNDJkNDY2MzRkY2JiMzNiYWVhMjc3YTY3YWZlYzIzYjNmNTA4NzVlNGI5NjViMzU2NWRlNjZlMzYwMjVlMGRiMjUyYjFiMzFlNDU2ODNhOTY3NmI1NWY0NjJhYmJmNjg4N2ZjZDc3MDU5OWIxMjNmMTA5ZTVjOWZkIjoiIjoiIjoiIjoiODZlMmJiMGY1ZGRkOTM4OTc4NjkyZWY5M2QxOWQzNDg2NWEwNDQ4NGNmODJhYWFjZjQ1NDYzNzhlMjE5OGEyZDgwNTBkZGY1M2FiNjE4ZmI5OGY5YmM1OWE2MTRlM2Q2MGJlMDZhNTRlY2NjN2UzZTU0YmNlN2FmYWY5NzlhNmZmNGQ3ZmExOWE5ZDc2Njk2NTZmYTIxZmJlZmE5YTcwYjEzNGMwMTg0NGMwYjg1YTg2YjlmOThhMTQyNTUxNThhZThmNTgyMmVlNTA2Zjg4ZTgxZjA5NzYwODEwYjE5ZjQxMjlkNmI0N2ExMGQ4ODM3ZDYzMzY3MTU1OGVjMzc3MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiM2Q2YzQwY2NlZWFjYTA2MzNjMmRjNzFiNzEzNWJlOWQ2NGQwN2FhODBlNmYzYTg2ZjQzNzc1ODU1ZjE0ZDNhNGY1YjcwMmVjNjIyZTBjODRlYjNmZDQ2NjJhZTE1MGVjMzY0ZDM0M2ZkODA2OGI4N2E4YjI5ZTlkYTdmMTgxYjkxYWEwMDI2Mzk5ODBkYTU0ODk3MjAwNjg4MTZkZjE0NGNlMWMwMWVhMzg5MTViNjIwNzM3NGNhZTYyNmY3MTk5YTQyZDQ3YzkyMzIwOTRkMTZhMDRjMzY4ZjBjMTFkMzAiOiIiOiIiOiIiOiI3NWViN2E3NDBiNjI4NDM1OGYxYjJmN2M4YzE4NzVjMDI3ZWViMDVlMDM1MDE3OWY3YmZkYmEyM2RjODIzMjg1Y2JjMzNjZmE2Y2EyMmM4ZTcwYmJhMDBlOTAzZDNmNzFjYTY2YTFkNzA4MWY3NDI1NzQ2MTNjMmU4ODU0YTBkMGU1OWNiYWMxNzM1NmIxYWJiNjViNTMzYmY1NjNkODE2OTcwMGUxOTZkN2QxZTI1YmU4ZTRlZDQ1MDIyOThiMjFkYmE4ZWY4MjJjNTY1NDQzYzQ2YThlYzA4YmYzY2JlMTFhYzUxZWI3NjVlNTNkMmIwMzVhOGFmYTI5ZWQxMTQ3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMCwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI2MTc0ZWExMjUxMDFlMzQ4NTBlMTFkY2JiMGU0OGRmZWQ3ODM0ZWZkNDVkYzlkMTk2YTQyZTliYmViYzlmMDA4NTM0Njc1NzBiYWRmMzlhYzMzNjYwODQ2ODI0OTE0NzllYzVlODBhZjZkNWU3M2UwY2VhNDNkMWNlMTVjMjc3Y2NmNWJlZTI1NGMyZDRlNTc2MjNhMTc2NTNkNDhiZDgyZDgwMWIwY2FiMmRmMjdmODA0ZTIzZTRkYzFkYWUwYjdlYjYxNjAyNjRjOGNhNDcxMmQ3NzU5NzBhODc1NmEwZSI6IiI6IiI6IiI6ImE5ZDI2OWMzNzcxZTFmZDNjZjJhNWY0NDcwYzdlNjU2MGM0ZGIwMDhjY2UwZjRjMGQxZWQ5MzkxNTc1NjdjYmZjYzIzNTNjMTllNWMxYjUzNWMwMmQ1NjAxYjQ1ZWEyYTFkODA0NWI0MmRmNjUwOGI3Mzg5ZmRmMzUwYzEwN2RhZTA1ZGE0ZTZlMWMwNzhhMjZhZWMzZDBlZTUyMjVhNjgwYzE1YzU2M2UzNzI3ZDM1MmJjMjU3ZDNhNGRlZmRhNDhlNmRmZGQ1YzcwMDE0MzljYzU4N2ZmMDMzYzVhZmQzYjFmYjdjNjE4YjIxMTM3MzZhMzYyMDU4YWRmMTI5NjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjZhN2RmMWVhOGI2ZDkyZmI0ZjFiNjZiNjAxNGM5NzQ2NmE5YjllZGZjNjhkZTY0N2E4YTRjMzZkY2IwZjRkNzc2YmIzNTNiYmQ1YzE4ZGRjNWFhMjc0ZmYyOWFiZWNjOTQ2ZWVhZTdlYjdlOTMxNjczYzFiYTg4ZWM5OWQzMTA1MDU5ZGQxZjlhN2JhODE0NWUwYmM4NjQ1OWU1MjUwMjhkY2U2MjU2NGE3YmJiNTQ3OTMyMGQ3NWNhZmU0MGI0YzdhMGRhYWEyYmVkNWE0OGEwZWFlYWFhOGQ2Yzc2ZDFiIjoiIjoiIjoiIjoiMzJlNjY4NzJmZmJjNmQ5M2RhN2Y5MjNmODI1NzRlMzI3M2M4MWEyODkyNTcyNDZkM2U2OWI5NDM2NTExNWUyYjkxZGRjYjA3NzAzNDkxNGYwYmYzYjU4NzFiNjJhYjc3M2RlY2QwMDEyMWM4NzQzOWFkNTMxOGFkZWFjMzFhYzAyNGI0NmU3YjQ5Y2VlNWZlMGYxZGFlOTNhNGI5M2Q0MjQ1YzAxNmFlNmE3YmE3ZTllOTg1N2EzOGI0YzIyMGMzYTMwOTAzZWFiYWEzMjEwZDkzYTA4ZjcwMzYyNmVhZDA3OGQ1OWIyOGE0MmQ3NjA4MWU5YjY3ZDdhYjY4YjM2NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMGE5MDU2MzE5NzM1MTkxZDRlYWIzYjcwZjUzM2U1OWIwYTVhNzBhZWViNWMwMGNkZWFhNWRkMjZiYTdhZjA5ZjJlMjU5YmQ0ZTA0Y2M5ZjViYThiNWM4ZGVkZjdiMTU1YTFhZDgxMTJkNmIxZGFlYWQzNmNkZDMzNzI2NmZhYjY1Yzg1ODI0Zjg3ODIxOWU2MTFkNDhjNGY3M2FjN2MwYjk2ZTQwNzYyYzg3ZDFhNzhlNjNlM2IyNjZmNWZkN2I5Y2U4NjI1MmI5YmY0NmIwODU1MjM4NjAyYzA5ODIwNGUiOiIiOiIiOiIiOiIwZWExNjYyZjBiOTViNmMxY2JlYjgyZjdiNzUyM2ViYTNmNTY5NTQ0YjA4NDFmNzhiMWMwNTgwOWZkZmZiNzc2ZWFhNmQxYzc3YThiNjBkZGM2ODBjMThlYWY5MDk2MDEzZDJmNGJiZDQxNjE3ZTNjNDgyZDI5YWNhOGQ4NDgyMmMwN2I1NTgyNWU0NmEyNmFiZTdjMzlmZTE3ZDIyMjhlMzk5Y2I4OGUzNmU0MzU0MzhjYTkxOWIzN2EwZjg2OGZiNTI0M2FmZGMyY2NjZWEzYjA2ZmQzMTNhYmE2N2RjNjg4MjAzODc4ZDJiZTBmNGY4ODY0ZDgzMTYyMmI2ZjRkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMCwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI5ZWUzZmNhNzc2ZjRlNzMzNmY1MzM2ZTQyNmQ4MjA4ODQ4Yzg1NGM3YjBiMjcxZDZlYzg0ZGQzZTg2YTg2ZmFiNDJjMDgyNWNmMmJlNzY5ZjdlMzE5MjRiMzRhM2E3NjBjOTRkMGRiNzE0YjJhMDljY2JlMjZiMmFjYzgwNzFmMDgzMzMyYzNlZjUwODAyYjJhZWUxZWVmMTk1Yjc0ZTllYmE1MmZhNDk5MDFkNjc1ODVhNzY2YTk0NjVkM2RiODQzZDNmMGE0YTNhOWQ1MzVkZDk3NmRkOThhZWRkOWRmOCI6IiI6IiI6IiI6IjFjMTE1MWU5NzZiZGI5NDdiZGY3YmVkMTA4Yzc0MjQyOGFhYjJlNmY1YWM3Y2JjY2E2ZmNmMjQ1OWQyNDEwYmY2YWQ4OTYzNmIwMjMzN2E0NTNhMjFiZjFhYTcyZjM5M2RlYWRjOTI1ZjlhNGRjN2ZmOTc4YmE4MzdjNThlYTMwMjY3Y2ZlNjFkYmNhNGEzNjZiOWFiOTkwNGNhNjIyM2Y3NmQyZDMzZDhkM2RlYjk1OWM2YzU3YmFiYTM2OGU5ZTY3ZjJkOWQ0ZDM3NThkMDcyZGY4NjhkMmFlYmViZWRmY2EzYmZjYzAxOGNkYjE5YmEzN2I1OTNhMGFlODBjNmUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIxMDA2ZTNiMTYxZmRkMWYzMDQ0MjM0NmZjOTFiMzM3MWEyOTUzMWJjOTk2NGY4NGQzZmVmZDBlYTNhMzQwZWZjMDYwOTY5NzRiYmQ2MDBjYjY0NGRiNjZiNzM4ZmZjZWMwNTY5NmE5ODFlNTBjN2Y2ODY0YTgyNzllODM5ODVkZGQ0MmE5Yzc0YWZmZGZkYzg0NTJhYzI1NTc1ZGVmM2FmMzI1MGRhOTVmMDE4MjMzMWRjYzdkMmQ1MGZmNzFkY2RlMDBmOTJiNjg3NGVlOTAyZTYxMzc3OWRlMDc4OWRkZSI6IiI6IiI6IiI6IjNiZWU5ZmU2ZDA4ODk5ZmM3ZWI2ZTFmMDk3OGM2OGY1ZGM5ZGNjNzZmYmZhZWE3YTY1MmQwYWQyMjYzMjM5NmQ2ZTA2NWZlZjE0YWFmYWM3ZDNhZmIwNjZlYTc0M2YwY2ZiYTgwNGNjOTY4NjQwNWFjOTY2YmE3YTI5MWY1ZGJkNTRkZGU1ZDZhMzMwMzgzYjIzNTUzMTllM2VmNDA1NmI4NTYzODZjZjgzNzhhNWUxMWQ5ZDM2YjAyMDdlMmNkNDE0ZjlhZGUyYWYwNTdjNTNjOGMzMWU3MmZlNzY1ZjA1ODJkYTVhNjg1ZWI0MmEwZmQ5NjlkYmRlMjY0MmM0ZjUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI4M2QwNTQ2ZDIwZmUxODE4NGM1ZWU3OWJlYTZmNTgxODg4MWQxNThkY2M3NzgwYzAzNTBiYWFkNzY2MmQzYjA1NzhiZmU1NTkwYjk5MjNjMzUwMGNjZjk2YTc5N2Q5ZmIyNDZmMzFlNmIyNDU0YzZhNDQzMjMzY2UwMjY0ZmNjMGZmZDQxZjBhM2JkY2NkZDk0MTdkMTYxNGFlZTU5Njg4MDU3MWVhNWYyZTYyZmQ2YzZlNTU1NjEzMDI0MjYyYTI2YTE2OWYxNzM4MGExOWYyZTUwMjBhZDMzNTllNDg0MiI6IiI6IiI6IiI6IjBlNDUzYTNlMGE0ZDU4ZjQxODAxOGYwOWMxYjdlZTVlM2RmODFkMzA5ZTU0Yjc3NTY3YjE4MDQzN2MyNThiODcwMDY5YzAyNTdiYjhkYjMzMmU5ZDc5MGVkMzI1NjMzMjYwOTY3ZTg5OGU3OTMzZDM4ODMyZmU3YTY3N2M5NDg0OTkyOTE4NDIxYzc1ZDcwNzJiOWMwNDE2MmIyMDI4NzIyMDBlMjhkYjNjMDNkMTU3YzhhZGIwNzdjNGM4YTY2MWM1MzRmZjVjMWJkY2NlODBlZjA0N2ViMTk3YjBiZjM5MzlkYWE4YmUzMWQ2MTU2ZTlkNTczY2NhNGIxMTAwOGQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJmYjA5YjAyMDExYjU0ZjlmYTJhMzA3ODMxNDFhNTIwZTExZmUzZTJkZDU1YjI1Nzk5YzE5YmU5ZmE3YmYzYzIwZThmYmI4ZmU5ZTQzMDE0NTE2ZDI1YzY5MzA4NjVjMjcyNzgyN2NjMDE0MDZhYWExODI3YmYyZDkyNzJlYmUxOGE0NGNhNzRkNjNiM2I3OGZkNjdlNjFkNWQ5NmRiNTA5YTc3Yzg1N2FlMDRlMDZiZGNlYmI3YWE0OTFkMWI5YTk5YTBlY2I4YzdkYzNkN2JjNjk3NzU3MjFiNzUyODlhYSI6IiI6IiI6IiI6ImVmODc4M2YwMDE1NmM0OTc3OTZkNzg3YzAxOGM5YzAxY2ZlZjkzNTdjZmYyYmE4ZjA0NzEwOWEwZDE3ZjcxOWFjNDY5NTJhNzE0N2U3ZmU4ZDYwZmRlYmUyYzc0NGU1MDUyMmUwOWFhMGQxOGRlMjU4NDU5ODQwYWUzMjBkNDhjYjcxYmExMTQzMjE2OWRkY2RkMTVjZTA4MWYzZWU5NzE5Y2FlNGJhNjAxYmRhMWNiYmFmOWViZTgyNTU5YjY5MTA3MTExYzk2ZTQ2OGQyM2UwMjY4ZTUzYzk0MzBjZWJlN2NiMDJiNTQ3ZDY5MTNiNzZlNGMxNjQzYjJhMjA0NWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIwN2RlOWU1ZTU3MzY4ZTc4MzMxNzcwNjZjODA0NTc1ZDk4NGJiZjljYTRiZjAzZWEzMTE4ZGNlMDYzMDI3YjJhMWRhMWU5MzBiMzU2NzIyZWEwYzBmMDJlMDlkYjZlOTJmNDA3ZmQ2MDZmYmRkYmNiM2U1NzRmMGVmNTQ4YzEyYjk3NDYwZTIwNzlhMDA0YzFiNWY0NjEyY2VkOWY1MDM0ZDhlZDkyZDVlOThlYjE3NmRiMmViYTg5ODkxNWYzMWFmN2NkMDc2M2U3ZGExZTY0YmExMzJhMDhkZWI4Mjg2NCI6IiI6IiI6IiI6ImU3ODBhYTY3NDRmNTkyZGEzZmVmNjkwZTc4ZmU4YzRmZDQwYzM2NGNmNWYxYThiZTM0ZjIzZjczMjRhYjM4N2IwOWFhM2I1YzEyNmJiYjVmYjI1ZmRkMjZkNGU1MzZmMmVhY2E4ZjBlYThjOTNhYzg2M2MxYzVkODAzMTQ0ODBmZDllMjM4MmVlMWQ5YjE3ODI4YjdmMzcxNmVlNjY5YjlmMzY5NjU1MDkxZjBlZTIzMTYzOTk2YzdjODE1YzNmNWU3MDVjOWU0OGMyNWZlYzA1YTQ4NWViMzlmMzgxNDA2NTI4M2RkMWQwYzM3Y2RiNzcxM2FjZjI0ZTM0ODRhZmEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI1OTU3MDY5ZWIxNDNjMTUyNjgyNmMxNTM1OGUwZTk0OTA5NjEwOGZjNmUwOTUzN2NmM2Q2NDI2ZTE1NWI0MTc4YmZmOGE4YjdjNTdjM2NiZjhmOWM3OGI1MmQ3NjUwOWMxZWMwODllMDgzYjI5YzBhZGJkN2Q3MDNiM2UwYmVlYjIxMThhMDUyNTQ4ZmIxZTMwNDU1YjA4MGMxMTFjYmRhNmI0OTMwZThmYjdkYWY0MzEwNjA3Nzg0NDViYWQ3ZDljM2Y3OGRiZjgxMWU2YzljNTg0OTM4NDRkOTBlNzNjNyI6IiI6IiI6IiI6IjJmNWI3ZTE3MmM1ZTI5MWY2OGQ5ZjU5ZjBkMTRlYzUxNmU3ZTgwYzJlZWUzNmQxYWEwNzM0ZTNmODE5YTk3NmM3NGE1NjVhZDAzMzM0ZmJmMWM2MGRhY2IxYTZkMTUwY2UxMzE2YjVjMjU2Y2E4NWM4MGZjZWU2Y2UwYzcwMDRhMGEwY2E4YmU1ZGNlMTlhM2I2OGY5MmYzZjZiN2Y4ZTljNGEzMTc3YjkzNTI5YjMyYjc4YTJkMGNhMThiMjdmZTgwYjQyNTQ2ZDEyMTE1ODdhY2VlMmJkNWE2M2YzYWU2NmI1ZTVkNjZhNTIxNTRiNTJiZWEyYjcxY2IwNWI5ZWMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMmNhZDg4YjJiNmEwNmU3MDNkZTQ2MTg1Y2NiMmRkY2Y1ZTBlZTAzMDk5NWViZGY5NWNjNGZiYzM4NDQxZjE3ZjMyMzEwNzcwZTA0MTcyYzBjZjkxZjY1OTBjY2U0NGE0NDQ4YmZiYzVjZTllM2I5ZGEzZTk2NDJkYWVjZDk5NGRmZTM3M2U3NTI1M2U4ZWI1ODUxNDEyMjRlY2E3YWQ3YmFmYjU3ZjY5Nzk5YzBiODkyYjMwMTU5OTBlMTMzNjk4ZDU0M2FhODc4MjlhY2U4NjhlNGE1ZTk1MjVkNjIzNTciOiIiOiJlZjZkYTVlNjUzMGUwZDYyMTc0OWFiMTkyZTA2MzI3ZTk5NWMzYWMwYzM5NjNhYjhjOGNkMmRmMjgzOWFiNWRmIjoiNDQyNzhiMzFlZDg1M2YwYTUxMGJkMTQ2NTBhYzRiNDk3MWQ4YjQyNjc5OWE0MzUxMWQwMTZiZTY4ZGVkYmI4ZCI6IjRjN2RmYmU1MDlkYzVhM2FjMjY5OTg3MjNjNmE0NGNhZDIwYjE5N2ZjODYxMTdjNzc4ZDE1NjhhYjgyODkyMzg2Mjg4NWU5NzE5OGY3N2ExY2I0NTExM2Y1ZDc4NzI2YTBmMTIwYWVjOTRhZmM0NWY1N2M4ZGNjMWNiMDkyYjM0MzQ4MDAxMjg1OGVmNWJjNTU5ZjU3MDIzNDQyMjA5MzI2ZWM0YTU0ZDkxY2EzYTc3ZGZkZjllNzVmMTE3Y2VmNTBlNmZkMmRjOWFmNmRkY2U4ZTY1MTViNGE5NzM1N2E5N2I2Y2QyNzRmNjhhMDQyZmE0MWJiZDdiNzI2MWIwMzQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiYjkxZmU5ZWZkZDliN2QyMGI2ZWNlMDJmZGI3NjI0Y2U0MWM4M2E0YTEyN2YzZTJmYWUwNTk5ZWFiNTA2NzEwZDBjNGNiNDA1MjZjNmJkZjU3ZjJhM2RmMmI1NDk3YmRhZWY2NzUwOWNhNzdkZGZiNzJkODEwMWE0NjI4MTZhNjk1YmIzMzc0NWE3MzQ4ZTI2NDZkOTI2YTIxOWQ0OTQ0Mzk3NzU1MzUzYmFiNGE2YjI5MTYwNzE3OWQxNmI0YTI0OWEzNDY2Y2MzM2FiMDc5ODUxNzg3MmIyNzlmZDJjZmYiOiIiOiIxN2MxNTZjYmNjNTBkNjAzN2Q0NTc2YTM3NTc2YzE0YTY2MWIyZWRmYjAyZTdkNTY2ZDk5M2JjNjU4ZGEwM2Y2IjoiN2M3YjRhNGIzMjVlNmY2NzM0ZjUyMTRjZjk5NmY5YmYxYzhjODFkMzliNjA2YTQ0YzYwM2EyZmIxMzIwMTliNyI6IjljZGM2MzhhMTkyMzIyNjYwY2M1YjlkN2ZiMmFiMDMxZTM4YTM2YTg1YWE4MTRkYTFlYTljY2ZlYjgyNjQ0ODM5ZmY2ZmZhYWM4OThiODMwMzUzYjNkMzZkMjQ5ZDQ0MDYyMGE2NTEwNzY1NWVmYzA5NTljYTdkYTNmY2ZiNzdiYzZlMTI4NTJmYzBjZTIzNzBkODNhNzUxNGIzMTQ3M2NlMTNjYWU3MDAxYzhhM2QzYzJhYzc3OWNkMTY4Nzc5YjU4MjczYmE1MGZjMjdhOGIwNDY1NjJkNWU4ZDZmZTJhYWZkM2QzZmViZDE4ZmJjZGNkNjZiNTAxNjk2NmEwM2MiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiYTQ2MzY3ZjBjYTAzNGE4NjYwNDAwM2ZhZWQyYmE1MjRiNmMwYmJhODQxOGZiMTU4YmExM2E4ZjczMGQ5MWVjNDliM2E3ZTM1YzYxOWYwZTFhYmRhNmQxNDBiMDhhZjg1ZTNjZmU0MDJiNjJhMmU4OTNmZTAyNDRlODhiOWE0ODlhMTAzNWQyODc5NDcxMzlhZjc4NzNlNWY3ZDA0ODVlODcyMzhiYjExZDRmNjMxMDkwYzM0MzY1MjIyZWI5NWJhZjdiODY1YmU1ZjY0MTBlYTBhYTA0ODRlM2RlNTU0ODMiOiIiOiJhYTAyMGExYWE5MmY4YTQyNmM1ZDBkNDQxOTFjNmI0NmY2OGMxYWJiZDVkY2JjZmYwZGYyYzhlMDI0YTMyODhjIjoiMzg5NjVhZDVmMTYzZjY2M2IzZDkwZDRmNWI2N2VkMmY0ZGIyMmM5MGU1ODc4YmRkY2Q0ZjIzMGRjNzdmNGIwYSI6IjZjN2VkZjM3NTI4MWI3NTEzODMyMTFhM2UwOWU0NmM2MWE5YzQyNWZlMzI2MDQxMDYzZjBmMDNlMWNmYzAxZThhODMwZjljNGJmNzczNzdjNGE5OTQ2YzYxYThiN2NjNjY0YjIyOTczYzU1NjQzN2M5ZjU1NTdiMWExMjIyYzQ1Nzg5ZWI3MDBlMTE4NGQ1ZDZlNTJmNTk3YmE1YjFkZWFlM2RkM2NiMmQ4MzI1ZWQ1YjM5Mjk5NDZlM2ZjZjllNGYxOTkxMTVlYWZiYTlhYmM4NzU1OGZjZWNjNjM3MjNjZDhjZGM4ZGZiYTQ4YTNjNjRlOGE3MDk5NWIwYzdlY2UiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMDhiOWRiODJmMTc5MDU1ODcyMzgzZjU4MjAzYWFiNGI5YjcwMWM2ZDdhMWNkNDI4YmMxODYwY2M3MGU0MTExZGQ1Y2ZmOTYyNzI1YjIwZDgxMjFmYjRmNDg0YTg0NmM4ZmNhZTkzODY4M2NjMTYwMmI2OTJhZDg4YjJlZGI1ZWMxYzhkZDQwOGY0YzEwZWU3N2E0NjBiYmM0MGM4ZTM2NWQ1YjBiYWI4YjZjOGZiM2Q2YWU4ZjY1ZGM5MTc1MDYwMDU5MmQxZjBmOWZmNjYxZDM5NDM2MzI5MjYzYjkyMTMiOiIiOiI4OGViYWEyOTY1OThkZDcxZDIyYWQ1Y2RiZDE2NjAzZTE5ODJkM2IwMDM5MWUwZTgzODYyZDc2NTE0ODE3M2RhIjoiNGZlOTc1MmE1YTg4ZWMxZWJhNWU3ZDg1YjE5MzkxMGYxNzE3ZDE2NmVkMTZlMTI2NzZjZjlkZDQxN2Q5NmYyYiI6ImI0YjAyYmU1NWZhZDhkYWUyMjcxNmY5NTAzOGNjZTM0ZjY1NGMzZGNlYWM1OWEzOWVlODVjNTVjNmExMDg2NGUxOWRmYTU3MTAyMzExMzhlZmRmY2ZhNzM2NTJlOTlmYTNmZWJkZThiMDZhZDA2YWYyM2RlZDQyZDc4YmQ3ZTA1ZmZlZDZiNDAzZGYyMzIwZGU0MTlhMDgwNjVkZDI1NGU1YzY3NmMxNmFlYzNiODI3NzRmMDE0ODExY2I2ZjMyZjk2YmIyNDBiY2E5MWZiOWYwNWI1N2M3NzZkNDQ3NGQzMDljYjA4YTczMGMyNjk2MjdiNjM4NTg4MjE2NTdlOGIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiNzZiMGJhNTk5MmRhYWIxYWE0MGViZTM3N2NhMmUwZjY0MDdlYjE3Mjk5NjExNTFkMjE2YTk5ODliNDk3MzNjMmY3ODkyZWVlZTY0MzM4ZDhmZjE1MWRiMjdiMjBlNjY2ODQwMTViYjFiNDMzYTAxZmQ3NTcwZTI0MzRiZjM5ZDkyNGQxOTA5NjE5OWUzNjdkY2RhODdhZjdhYzhiOWYyYTA2NGU4YTdiYzI5MWE5MDRmYzVhNDBjZmZiMzA2MDIwZDcxOGRlMTFkM2NkYzU0NDI3MjRmNDUzOGQ4MzVmNzYiOiIiOiJmOGI2M2RhOTlhMzVjZDYzMzM0YzdmMGYxMDFhODBiMTAxOTkwZjc2NDZkMzFlYjU4YmQ0Y2FjMjUxZjQzNGMyIjoiNDZhNDE3ZjQ5MzhkODg0MDZkM2FjNjVkZmZmZmZmN2UzYzQxMGIwOTk5ZTljNmRjNzc4N2FjNDZhMGIxYmU3NyI6ImQ1NTdiMDA2NGM2ZDhmZWFkYjIzZjk3NTJjZGFmNWU0NDNhMjk1YmE5N2U1ZmUzZGI4YmRjM2E1MDJiMTIzOTQ5NTFlNjk0OTc2MzhhNzU4ZTczMTUzMjNjNGQ5NDQzZWM4ZjE0NGY5ZGZmNDIxYjBmZWFiOGQ1NDFmZGMzYjU5OTNkYWU2ZGI0YTczMmQ1NzNkMjdmNDM4M2Y4MjU3ODNiOGQwYjkzOTUxNzE5Yjk1ZGRlZjcwM2YzNmMxZDk1MDM0YjRjMGIxMjYxNWFlZDkzMTQwNjdjMzVhNTVhMDkxZmRiYzNhNDU5YTIyYTc1YjZkMTYxNmU3OWQ1NTFiMmEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiZTgyOTYwNDg5YzAxNDY4MjYzZThmZTU5YWMzNDFhZjFjZWRjNTU5NWVmMTY3N2MwMDE5MGY4N2YxMDY3OTI5NWIwZDY0MjcxZTg2MGU1ZTFiYzJiN2MyNGMyMTI3Yzk0NTdhYjZkYjI0OTVkNDIyZDI0ZjM1NjBhOTA5NTEzNjI2Y2MwZTBlOGQ3NDE3MWNhNTFkM2QxZDMxNzc3ZmNkMWI3NzFmNWIxODY1MTZkNDVhMjcwYTdjNWM5NmYwOThjNTA1MWNkNzlmZmIwNGM3OTgxY2RhMzZhNjhlZWYzNDciOiIiOiI5ZDU0NDUzMGVlMTJlOWNiMDYxNzJkNzlhZTI5MTkzMmUxN2IyNDBmOWNkOTI2OThiNmEyZWMwNjFmYzEzMmNmIjoiZGQxYWQxNmExZjlkZWNjMGNiODc1Y2UzNWM3YWQxYTMxMDU4MTg2NzlhMTJiMjIxNDliNWE3ZGQwYTFiN2Q4NyI6IjlhMDhkOTQxZTlhMWJmZDljM2UwNTlkZDA2Y2FmMDA4YzYzNmNhMDhiYjJlMTM2ZDBiZGYxNjJjNDMzMjE4MDQ1MjI0YmZkOGQ3NWI4MjQxMDI1ZjkzYzRhODIwM2M2ZWExZmNlNjNjMzdiYjIwNDQ0YzVkNGE2OGIxM2VlNjYzYjI2MmM2ODU2MzBkMmE2YzQwZWMyMjQwMjdkNzViZmQzZGM3M2UxZDUzODQwMDc4OWYyMjIxZmZlMGZmMWJmZjhmNTE0YzAyMjllNjg0NDIyZDc3YjJiMDI5OGMwYmE4YTJhYjAyNjEwZTg4MDIzMmJmNTE2ZjhhYjUwN2M0NjEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiYTE5ODJjOGVhNmFhNzVlNWMwNDg2YmIyNmFiOGM5ZGNmM2QxMzAzNDM3MjIwN2JjZjEwM2FkY2E5ODJiZDkwMmIxMzg4YWZkMzc0NWEwMGJlMTlhYmJkZWIxMjIyNWRiMzVhYjQxNDcxZDkzYzAyYWFhMjQxNDM1NDYyNjI0NmIzZWEzZDkzMmRkNTIyZTVmZjBmYTgxYzliYjdiYjFmMzcyZDg1MWI1NzA0Mzc4OWFiYzE4MzdkMzNkNTI3NzliNjM4YWEyYmQxNjkzY2FhNTJlYzdiMDgyNGFkYjg0NzAiOiIiOiIyZDAxMTNjNGYyMjVlNDdiNTkxMGNiZGE3ZDI3ZDk4ZmUyYmNjMjNkN2JjMjkzZGExMDI4ZTIwODQ4ODA0MzUzIjoiZjZkOTJmZTA2MDNlMjU0OGZjMTNhNTYwZjRiMTAwOWEyY2Y2M2ZmOTFjNzRiMTdjYjRmMjU2NjExMTczZWYxNyI6ImQyNmI0Njk5MjBlYzI2ZDY4OTFkNTI0M2QzYzEzMWYxMjk4MzI2OTVhMTMwMzg2NTExZjAyYTY2ZTkyZDUzOGJkMTY1ZDliY2I3MGJhNWU4ZGY0Nzk1NzZiNDM0MmEyN2YzY2UxMTM1ODRlMDI2MmY4ZWVjODE0ZjBjOTdkNDg5ODhjMzliYTU0OGU0ZGE3ODYwMTEwM2FiZjljNmE0N2ZmMzcwNWZjZmI3ZDFhMTUwNTM1ZDRhZjJmYTIxOTUwOWU5NGJkOGU3NGYzYTkwZmQwZmZhNjMxNTliNGI2MmViNTMzMTkzZjlkZjNjODY4NjRmOWI1ZjA1MjQ5MTc1YTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiZmVlY2ZiM2VjYjFiMTMyMmIzNGQ5MGYyNWZmZmEyZmYwYzJhZjAxMGE5NDJhMDQ2N2MwNGU5MzM4ODMyYzNjMGU1YzU4NzZkZGYwZTNkYmRjMmQ2MzQxNmZkNzdkYWY2MTcwZDY3ZmQ2YjdmZjYyMWIxZTg0NDkxNDcxMTgxN2VjZTkzZTVlZGY0MjhhNmU2MzI1MTkzZDQyYmQ2NzY1OThlZjQ2NzJjZjFlNGRlNGI1NGRmNjhkMGZhOGQyNjg4Njg4MTMxNjJmYTcxMmQyOTQ0OTFkMzM4YjY1ZjI3ZjgiOiIiOiJkMWUzZGE1OTY3NGQwY2UzM2NjM2U2ZTU2MjkyZWY0N2ZjMWIzZjQ5NTg3MWY1YTc0YThjM2Y2MWVkZWI1OTNlIjoiNzRkNDkxNjk3ZDcyNjg5YTE5YzU4OTgyNjIxZTY4YTMzNmJhOWY3MTQzYzE5OWRhY2MzZjM3NTA4ZWY1ZjNhNyI6Ijc4ZGU4OTYzMDE5NjExZmRlMTVlZTBjOGM3YjhhMzVjMTZhNWVhMWU4NmZkYjQzNWM0MjIxODRjZjBmN2JiY2UzZDZkZDdhYWUxMWI2Mzk3Y2EyMTNjMGFjYTYzMTg4ZDM5ODJjMjQ1MTQwMTg0NWQwMmZhMDgyMmFkMmY5MTkwMDIyZjZjMDk5ZDEzN2M1YTQ0ZDlkNzRhNzdjNzViYmEyMzUwZjEyNjliNmJmOTA1MDc3MzZkODU3NmI1M2RmYTE0Y2NmN2M2ODVlYTBhY2M4NDg0ZDZhNWQzMTBiMTViZjM5NDE2NjYxNzg0MTRhYWUzZDc2ZDZkNWY0YWVhOWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMWQ2YmRlZjE1ODExNzMxZjZlMzBkNjZjNzkxMDQyMjRjNWVkOWQ0NTViZjlmYTJkMzQ0MmU4ZDYxMzk1ZDUzY2E2ZTNkNWIzODYyZmQwZDBiMmVjZjM1NzdlMmRkZDEyNGY3ZTMzYmYxMWE3ZWNlYmNkMmIyNmExMTdjMzgwNWJjOTNiOThlZTBlNzBiOGVkNTFiOTI5Y2Y3NmYyZmE3MmI0MzM3NTdkYTQ3YjFlYzkyYzExZmQ5MTkyMWIxNzFmZjUxYTQxYTk5Njg2NmU4YzI4N2VhMTMwZjA2Y2Q5NWYiOiIiOiJmMjUzNDdmODhmYjQxZDY1NjAyYjk5YTM3MGJlN2M4Y2UxZGQ2YTI5YTBhNzQwMWI0YTMyNzliM2U1NjNjZjRiIjoiNGU1YzgwYmQ3ZmZjOTMxZmI1NzYzMjkzNWZhZmYyZjI4YzRmNzUzMzZmZDI4ZjE0ZjdmYzI3YTEyYzdjYjQxYiI6IjU0YTI4MDk2MmFmMWE4MzliNDcwYjQyNDU2YTQzODFlYjhjYzI2ZjE2MzAzYmI5N2I2ZjcwOWY5MWE5MTRlZDcyYThiODVkMTZhZDRkMjZhOTAwYzhmZWM0MTQ4Y2M0MmY5NDE2ZGQxOWYzMWZkMWFmZDUyN2Y1ZmIyNjZiNmFmZjEwMGY4OTBiNTdjOGEzZjkyMjg0NjJkNGRkOTJkYmQ1YWYyZjlkYWYwNWU1ZWUyODQzZTU2ZjBlMTgwZWJhOGEyY2FiYWIzNmY3MzlhN2ZkM2MwNDIyOGVjMDA3ZWY0M2ViYmMyNTg0MWI3MzczZjJjMDZmZGZiYzY2ZjgzMjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMjk0YzY0NTk5NTg0MjVkMzA5ZDRkZjY2MTc0MTBmMzRlOTZlZmJjMWU2MDkxNzhmNDEwNTA3MTE3MWQyNzFjYmI2OThiNzljN2Y4Mzg1MWFiMGE0ZTI5YTc1NmIwNTg1ODRjZDVkNDQ2YTI1Zjc3NzQ5ZTQxNTQ2MjhjM2Q2OTYzYzM2OTU4NWE3NzY4YmFlY2EwZmUyMWNjNDBiMDBhODcxNDRjYmRhZWJhODEyYmIxZGQ4YTE4ZTRkN2U1MGU4MTA4ODVhYzUyMGU0NGMzOThkMWIzYzQxZmNhZjZjMzYiOiIiOiIwZTQzM2I4YTM5MjBlYmUwMDUzZTM4OGQwZjI1ODgxMjNjNmNlNjQ0MjgwZGJhNzc2MzJiZWE4ZGUxYjZmZDlkIjoiNDExYTM5OTIxYWQ4OTJkYjdkMzhmNTFjNTExNDgyOTZjYmY1MTBhNTlmY2Y0ZmQyNzg1YzJhY2YzMTBmYWU2ZiI6IjA0YzY0YTNjNGVmOGNkM2FhMzIyNTk2Y2ZlMDhlMzRiNDM1YmI1NTk0M2M2YmE3YWJmNzJiNTQ5ZDRhMDU3ZTNiZmViNTNmYTRlMmFkYmVlNjNjODg2ODRiYmQ1Yjg0YzRjMTM1OGM5YzBmZjBmZmViMWM4ZmM5NzJjNGU3OTY0MWM5YTRlYTA5MDFkOWM4NWZiOWFjNWVlYjVkNWRiZGQzMjQ2NDljMGRiNTQyZTA5NDZkOTZjZWM4YTk5MDE0N2JlODBmNDY2ODVjZjgyNzhiOGNmODljOTI1NWJhYTU2Njc0MGM0ZmQxMmU2YmMxNjNiZTZlNTJhYjc3OTljMmEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjE5NDBjMzE2MzdkYTJhMWE0YTNhZDY2ODI2ZTA3NGEwZDVjZTY5ZGRlNTBiNzVhNTViNWUwOWRhZjIzYzA5N2JiMzFhNGU5ZDM2M2YzYzcxNmNkOWU4OTljZDk4YmJkYWY2N2U2ZjkwOTA3N2M3MDUxYjA2N2Q5ZjJhNmVjYWNlMzZlNTA1M2IyZTYzMjlmZmQzNjRlNTg5NDAzYTBiZTFhZjJiMjdkMjU4YzkwZTFjYjJkODI2MWJjYzdiZDVmOTEwZjE1ODUxYTg3NDQyY2FmZTg3YWE0MjAzMWJlZmQ1IjoiIjoiMGUyMWIyZWFlMGQ5NDZjMWRhMTQxNTNkOWEzOTQ1ODk0ZjQzYWU1MzMxYWI5NWEwN2E3MjdiMDViZmZlOWYzNSI6IjY5NjQ2YWM3NDkxODVkYTAwNjM4NjU0YzgxM2Q0NWUwZGNjODQyMjAyODQ1Y2JiMGE4MTU4YjI2MDk3MzMxNDYiOiJmNWRjOWE4OGJjYjE5Zjc0MTAxZmI0NjMwNGJmZDY2ZmUwZTI0NTM1N2I2NTZlNzUxYTllZDUzNWJlZDNhNWI0N2Y0Zjg0YzAxMDY4NzYzYTNmZWFkMjJjMjlkN2RlZjVkMThlMzI0NTNmODA2NDI0MTc3MDgyZDFkNjVkYmUzZWU1ZDk3NjVmZDUzNjRhMWNmNTVkYzY0ZWU5ZjNmMzEzNjk3YzI2MjUzMjczNzMyOTg4MDdhNjBiYjQ1MzZjMzA0MGU3NmM5OTk1Y2ZjNmVlZjIyNWExMjJjOTg4NDk5ODBkNDBlYTBmODZhMTIyNzU2ZDQzOTAwOTZiNGQ4ZmFjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMCwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI4M2E0NGMzOGY2OTlhODgzYTkxZWNiYmQ5ZGI5NTJhNjJiNjVjYmY3NWU3MmExYTI0OTc4MTBhNzNlYTc0M2M0ZDE1ZmZjYmEwNmNkN2EzMzM4YjMyOTRhZmI1MDQ2MmIxZWI0ZGYyMWRiZTcxMDdhOGI0YzZhNDFiNDE5NzdmMzhjMzNiMWFkYTgyOTUxN2QwOTAyYTNiYzA4MzZiZjg5OWMyNTcyMzRmN2Y2MzIxOWFjZGNkY2RmYTUxMGQyODRlNzM4MDM0ODI5NmVhYWI0MDc0Y2NmYTkwMzdlNmI2OCI6IiI6IjNmNmY4Zjc3ZjMwNTFjOTQ1YWZhZDk5NjlhZjc2NGZjZjRiYTViNTY3YzBhMDk2YmVjMzZmNzEyZjA0MDU1MzkiOiIyMTBhYjc4NTliMTM1NGY1M2UxNDNlOGIwNmFmZTg0YjEyZmMxYjE2YWE0ZTNlODE4ZGM1NjI5MjY1NmViM2YzIjoiYWRjMDA0Mzk0YTViZjk4YmUxYWM0MDEyM2FiMWU0MzBiZjkzMDQ2ZGY4N2QyMGIwNGMyMzVkMTY1NDNjOWEyYjgwZjk5Zjg0MWE5NDZlOTFhNGM2ZjEwMTQ5ZjdhNzAzOTY3ZGU2NTFlM2FmMjA4ZDYwMGViYzJjNmUyYzFmYmM4OTU3NjBkZTUzN2E0ZGEyODcwZTEyOGZiMTBkOGZhMWYwNjg3MGQ3NThiOTgwNGM0OWMyYWI4MWY5MDExODA0MmY3OGE4OTgwOWI5MmMyYWJjZTg3YjIzMDU4NzczOWFjYmZmZDA4MmFhYmE0MjJjODhlN2NlMTk5NjkxZGQ4NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiN2E0NWQwN2EyYmVjMDc4YzA2MDMxYjc5ZTk0YmE2YjM0ZWExNTIyNTA0ZjYyZGYzYzc1NDNkNmE5MDJhMzUyZmFlYTUyNTE1ODZhOGJkYzU2MmFlYmZkOWY3MTc1YTAyNTQwNjUyNWRhYjAyMjM1MGQ4NDUyY2YzZTE4N2UzMGNiNTQzMjBmZTlmMTNhMzUxZTAwMzcyNzI3OGZkZDEyYzJhYzFiZjU2NTU2MzE3YWQ1YmZmYjNjMmY4OTA2OWM3Yzc0MmJlNDQyZjY0OTcyMzA0YTNhOTdhZDQwNDgxY2IiOiIiOiIxNjM4NGY4YzllYjc0OWZiNDlmZWQ0YTY2NzMzOWYyMjg0NjM0YTVmNzkxMzY5NzM5ZDA0MDFhODRkNDM1MzczIjoiMWI4MWYwZDIxYTNkYTQ2MmVjMmY4MWQwYmZkYTFmYzAxNDM2NzNiODBiYzdlY2RiZTUyNGNlYmE5YWU5NmRkZiI6ImEzNDYyM2UwMWExNGI4N2M0MDBmNjgxYTZmYjRhZTY2Yjk3YWZiZmUwNDA3NThiOTlkYzgwN2ZiYWM3M2QyMmE1Y2FkYWQyNjJmMjNlYTVkMjdmNzI2OTkzYzgyMjA5MjExMjVjYzc4ZDE3YTk5MDE0NWJmNjg0NWM3NzE5YmNiZGQxOTUzNDhjNDBkYTk2ZmNkNjBhNTRjZWUyNWFmODljM2IxMzEyZDg4NjM1MjIzZWE4YzI3NTY0ZTkxODI4OWZkMDEyMGI0MzdjNDJkOTlhMzVmMTk4ZGUzZTljMDkyYzQ5M2E5NzFjOGFjZThjNDhhYjYyNWE1YTkyZDZmZDAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjY0NmQxYzFlN2MzNjNjNGNiYWU3ZTZhNGY2MDZjOTU4MTJhN2UwZjJmYjg2ZTMzZjE3OGY1YjUwMmM2NDU3ZDNiNTc2NDRiM2JjMWFiNmNlYjA5NTg5ODcwYzdkNTRjYTE5ZmU3NjNiNDgxMzA4YTY0NjY3OTEzY2ZlMjUxMDNmZTczOGZjMGE4MDA5MjBmMGFmZWM3MGVmODZjYjhhMGVhMmQ5ZGZkMzg5NWNiZjkyMWM4N2U2NDkwNWY4MWVmNjFkYzIzMWI2Y2Q3YTAxMzUwMDM3MjY0NTFjYWI5NWYyIjoiIjoiNzg1NjZiMmZmZDMyNTI3NzJlM2JiYTcxZjM0NDU0OTdhMjE1MGFmZDQ4YmMxMzAyNTFiYWViNDMzMmRhOGEyNyI6Ijg4OGIzM2M2YWJkY2Q0NzU1ODZlMDBlZWYxODVhNjk3MjZlYjliMDI0YmU0NDdlOTI5OGI5NTNmZDgwMjE5MDYiOiJlNjU5ZDYwZDE3ZGExNDA0M2NiOTE5NzA5YmJiNWIzY2M1YTIwMzUxNzM1M2M4YmFkYzA2MzRlZjJmMmVhMmRhYjZmYjJiMzI3ZTI5NmVkNjM0MWRjNGJmNDMxYzBjMTRlYzA0MWRlNTAzOTVkMjVhNGE0Y2Q2NGE2NDIwMTUzYTUwYWY4ODZmNDhhMjk3MzUyM2E0ZWM1YmFmZjQzNTI2NTU2OTU5YTM3ZjNiMjQ1MmQ1NzUzZjRkMmEzYzA1MGIyZThmOWY2YWMyNTc3OTU5ZjM0NmFiMzc0MDRkMDI5Y2E1MWE3ODlhNTUyMWVlNjYwODQ1ZjkxM2QyNDUyMDMzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMCwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJiZGUyZGUyYjhkM2M0YjVjNGFmMjk5OGQ3MGRhOWEyMTM0MGI5OGM3NjMwZDY4N2Q2ODVhNzFlYWZjY2VjNDQ2ZTAxOTRkMjQ1ZDI4MTFhNTRlZjUyMmRjZmQ5NmFiY2EyZWNlYTZkNzg5MmRkZGFhNGRjYWNmN2U1ZWYzZmIzNDVjMzNiMjNhM2RlNjg3YWI1NzhhYWM4ZTY3NTc1NDdhMWIzYzEyN2E2MzNlNTg5MDNlODM2N2E4MDU4NDAwMjBkMmNlM2Y2ZjAzNzI5OTFkN2M3ZjIzNGMzYjMxMTE4YiI6IiI6ImQ5MDNhMjI3MWYxY2UyNGYyMDIyMjEyMGY4ZmVlM2I4NzA5Y2U0ZmM3YmE4NWI3N2Q2ZmYwNDllODFkN2EzN2YiOiIwM2JmZmUzOGVmODgzMzk3Y2ZlNTNlZGY2Yzc5ZTY4NDkzYjdhNjM3ZDFjZWVlZDlkNTY5YWM2MTk1YjhlNGRiIjoiY2MzMTdmODFjM2E2Y2FiNDI5MzNkMTczM2NmYzQ1MDRkYzBiMjMyZGMwMDUwMmQyOWI4ZTZmZTc4YWUxMWQxZDFhZTRhMWM1YzZhN2Y5OTU0M2E4NDRlYzU0MTNiNmRjM2MyMmUzYmYwY2JmMTJlN2I1N2E0ODAxOGM3NWY2YWIyNWZlNzhiNzg2ZDJkMDM1ZGU3YWRhYTNhM2I3Y2YxY2E1NjRmMzQyZmZmNGY5ZTZiM2M5ZDJhZjM4NGNiNzBmNWFiY2QyOGM5OWE1ZDEwZjE3NmRkMmY3MDI1NzViZmI4MWE5ODRkYjI1MDc0MzRiNGEzYzhjMjg2ZTNkZmM2OCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDI1NiwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJmN2I5MGM3OTdhNGEzNzZjZGQ5ZjVjNDM1ZjU5ODVlNzdmMzZlYzFkZjExNDVhMTIwNzJjYmIyYTBkYTM3OGZjZDk1MjAyOTg2ZDQ1ODk2ZTlmNGE2NWYyZjM1M2ZhMzUxMzBhYjY0ZjQxYTVkNDlkNmEyNDFlMDI2MGI0YmI4YTQ2YTE2YzZhYzllMjM0Yzg0YjViMjZjZGI1MThkNDU5Zjc2NzBlODE3YWMwNjFhYzYwNDM5YmU2MDk4MjQ5MjAwMGRjNWRhOGJjNjYzNmJkYWM4YjFjYWIwMzE5OGRmZCI6IjYxNTM1YzVjMDQ1ZTc4NDI2N2ZkMGQ4NWYyODYxNzc4ZmE1M2M4ZTg1ODZhZjY3Y2Y1YzlmMjFhMjhlYmI2NTYiOiIiOiIiOiI4ZGY0ZTM0OWY5ZWE0M2NjNTA5ZWNiMmIxMTI0MzU4Y2RhMmRlMWY1Y2M5MzE1ZWRjYTYzNjEwYTQxMzQ3OGQ2OGI4YmI0OWMyODE0YzgyY2U1NzFmNmUwYTY3ODBmYTIxYzRiNTcwNjEwZWUwYzA0ZDNlZGI5MjEyNGY1ODBmOTYyZDc0MTMzMDIwMGMxOTg4NWNhNzE2NTAyMjIzMjQ3YjcyOGQ2NmZiYmViN2M2Y2MyNWNmZTk4NjZiMTQ1MGIzNDYyMjdjNzY2MzA3NGM4YjE1ZDE4OWYxYzZlZGJhMTcyYTUzYzczM2Q2N2MxYzY5YmQ3YWNhN2U2MjAxM2NkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjEzNTQ5NmZjMWI3ZDI4ZjMxOGM5YTc4OWI2YjNjODcyYWMwMGQ0NTkzNjI1MDVhZmE1ZGI5NmNiM2M1ODQ2ODdhNWFhYmYyMDNiZmUyMzBlZDFjNzQxMGYzZmM5YjM2N2UyYmRiNzQ4MDgwNmYzZTE5MzNjYWM3OWE3MmIxMWRhZTMyZWUxOTFhNTAyMTk1NzIwMjhhZGYyNjBkN2NkNDU4YmQ0NjlmY2ZmNTk5NTk1YzY1MWRlNzE2ODVmZmNmOTRhYWJlYzVhY2JiZWQzNjYxZmZhNzRkM2FjYTY3NDYwIjoiNjRiNmZjNjBiYzYxNzYyMzZkM2Y0YTBmZTFiNGQ1MjA5ZTcwZGQwMzUzNmRiZmNlY2Q1NjgwYmNiODE1YzhhYSI6IiI6IiI6IjFmOWVhZmU0ZDI0NmI3NDc0MTRjNjU5OTAxZTkzYmJiODMwYzBhYjBjMTNhZTJiMzMxNGVlYjkzNzNlZTBiMjZjMjYzYTU3NTQ1OTlkNDVjOWZhMWQ0NDU4NzZiMjA2MTQwZWE3OGE1MzJkZjllNjYxN2FmYjE4ODllMmUyM2RkYzFkYTEzOTc4OGE1YjY1ZTkwMTQ0ZWVmMTNhYjVjZDkyYzk3OWU3Y2Q3ZjhjZWVhODFmNWNkNzExNTQ5NDRjZTgzYjYwNWZiN2QzMGI1NTcyYzMxNGZmY2ZlODBiNmMwMTMwYzViOWIyZThmM2RmY2MyYTMwYzExMWI4MDVmZjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiZDc4ZWFiNTMyOWZlMzhhMjZjZTJlNTRlZmNmOGYwYzE1Y2Q3NDYyYTU4Nzg1MzdhMWUzNjE1ZDA5OGIxODY5NzRmNDgwMDMxNzJjNzIwNGZlNmRkNzdjODlmYTkyZmJhZDRlODE0MTJjOGQxNjdiZGUzODU3YjllMDQ1YmNiNWM2NjZkNjRhYTk5MGE3ZDkyZTQ2Y2E1MzNiOTNkZTU0NDIzOGI3OWI2YTk1NTFlYTdkYzUyYmZhMTU1N2ZkOTczYmY2ZTU5NGFkNGJjMGU2M2I2NTFkNTk1NWRhMzdmNmEiOiJlOTM0YmVjMThjZjhlOWI5MjkzMDI5ZDllZDYwZWNkZTFkNDY2MjE0MzljMzIyMjAzZjdjMjJjNmIyZDc3NTQ0IjoiIjoiIjoiMjg1ZGY2OTczNjFjMjg0NzUzYzk0ODY1MDgxYzNjMjVmZmNiYzc3NzA5ZmM1MWYzN2EwOTYyNGJiYTY3MTQ5MTU2YTA4N2VmYTkyYWU3MDllZmYxYmQ1MGJlZDQ2NGY0ZjMxYzRiNjZjMWNkYjcxYTUwNjc3OWI1MDY0NWMxNjVhMDk5NzE4ZDU5OWZjOWExNjZmMzQ1YWJhZjhiMGIyZjllNzAwYzI1M2E0NTRjZWE0OTI2MmEzMzRkNzlhMDFjMjA4Y2FhZDUwNzM2NDRiMjU3YjJiMTU3N2RkOTczODYyYzZmYzdmY2MzMzIwZTI0ZTFlMzEwNjNmZTZlOTRiYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDI1NiwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJmYWQ2YTBmY2RkZWVmYjI2M2MyNzQzMmVjYzY0NzBlNDRmMjZhZWZmMjg0MGU4ZGI2ODJjYTE0YWI0NWMzMWNjODk0MDJhNjk4ZmZkMzZjYThmZmNlOTg2NTY4ZjcyOGFmYzA4YmMwMDc3Yzk1Y2U0Y2YwOGJjY2Y1MGNkYWZjMTkwMDRhYmMzYzVjZWQxY2MzZTdjZTJjZmM5MzhjMTYwMGE5M2ZkNTBmZWYxMjQ1ZTdiOWNhZTI4MzRlNzEwNDMzNWY4YWVhYzA4MGQ0YTRmZDNlMGMwZWYwZDY3YjY5MCI6IjM1MjI3MGM4NjdjMzRiM2ZiMjk3Y2IyZTVkM2E4MDdiMDg3YzcyMDAyNjU3NmFhNDRmYWQ1NzdlYzgyMDE1YTkiOiIiOiIiOiIzNjIyOTc3ZjhhYTBhMGNhNWY4ZTEyMzVkMDNiNzZmOTJiMmYyNmViMTcyYjg4MzIzNTU4ZThmM2M3NTZjNTM5Y2UxMDYxZGUxMjcyNDdjYTc1NTM0MDJjM2Q1Yzk0MzliNGM5YWZiYjRjNDE5ODY3YmFlZTA2ZWFmZDg1NmFmOTg0N2E2OTI0N2RkZjY2NDBhMDlhMzYwYzkzNTc3YmZjMzUzY2RlYzczMTJlNTQ5YmM3ODczZjc3Nzk2ZTA2MmFkMDU4ZWM3ZjNlNTJkZDFkZGFmYjRiYjExODZiMDViNTM2MDIwMGU2ZWE3ODRiZTI3YjhmMjA1ZGU4MGJhMTQ1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImJlOTBhMDdhZTYxNjU3NGQzNmY4MzY2ZDM5ZDZiZjE0MDg2MjY0NjZkNDA5ODJkOTczODBlNDQzMzFmOWUxODg1YTI3Y2FiMDhjNmE4NTk1ODk0ZGUyMmE5MDlkYzI0NzljZjE1OTczYTBmMGI3MWMwYmE5MTE5NTFmOWI0NDQwNTA4MjVhOTc2YzM5MWU2MjFjNThmZDRiNTlhN2EyMmE3ZGQ2NmQ4ZjU5YTYwYzAwMTBmYThhYWFjY2U5OWJjMmFhMWYzNjU2NTNkYzBjZDU3YjQ4OWVkYzIzNDkxNzdiIjoiOTliODhhYzE5NThkNWQ2MmFhMzllY2E4YjhmOGU1OThhNTVjMDhiNDllODk1NzM3ZDc0Yjg3OTJjYTM0M2EzNiI6IiI6IiI6ImVlNzZjNWE2YjZiNGVhZjljZThkYzRhYzBlZTkxY2FkMTQzZjAzNjlhMmJmZGY0MGI3MGZjZjE0ZTNlYjI4ODU1ZTNjNTlhMDFkZGVlNjg0YmY5Y2U0MTUyYmU1YzcwZDI5MGI4Yjc4MDc4NGVhZGI0NDg1NGIwM2NkMGEzMmQwYWE4YjhmMGRiMWJkNDc1MDJkMmFhNjFhNTRlM2RlN2ZkN2JkYjVjNzRjNzE1YWUyYWFkZmUzMjhiNGQxMTI4YmIxOWNlN2Q4MTY2YzRjMTcxOWM5OGI2YmZlYjFjZTMxMzA1NGQ4ZjFiNmE0YzVhZjg0MmNmM2NiZWExN2M3MTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMzFjN2I4ZjBhYWZhNzBiNGI2NzBmMDU2ZTI0YmYxNDFmMGJkNjY4MzQ1M2QxN2U5YjA5YWRkM2QyMzFjZWUxY2FmZTgxOGRmZDdkNzM0M2Y4ZWIxYjQxMDBkODBjNGQ5YzhlN2U0ZDVhZmNkM2FiODI5NjRmMTIxODQ3ZDQ0NjY0NzFkZjM4Yjg0OWM1OTYzMDkwMDE3MTU4MDk0OGY1M2M0MTQyNTA0NWRjNGRiMDQ5MzVhYTUyNjQ4OTFhZjAzMWIwOGNkNDg2NzBiMmIxNzIwNjkyY2M2YmVkM2U3YjEiOiI3NjlmMmIzZTMwNDA4ODU2ZjQ2ZmMzYTNmY2ZlMDUyOTVkODc2NDE1NTU1OTA2ZWNmODUzZDU5YmFkZDQ4ZWVmIjoiIjoiIjoiOWIzZGM3NjdlMWJkOWRkNjcwMDNlYzk5YzMzNGI5NGRkOTdjNDhjY2NiZGJmYjJlZWQ0ZGQ1YmRlOTZiMWUwZWE0YzI0Y2IwZWRhZGNjNTM4NmY3YmVjNTRhYzVlZjE0OTM3NGY2MjI1YWE3ZTc4NDY2YzM0YjFlYTBiMjg2NDk5ZTRlMmEyOTQzODFlNmUwNjVhYmVhYjY3NTUzYzRhMmNkMGZiZGExOWM1OTQxNWZlZTVjYzEyNDk2OTI3NjhhZWJjODBlYzM1YzgzMzFmNjhmMWI3MjQ1NjAyYjNlYmZmMWVhY2EyZmVkNTg5ODIxM2ZiZWMwOWFjZGI2MGNkMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDI1NiwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIzODQ4YmFkMmIwNjMxNDExZjkxNjhiZjgxOGEyYzNjYWMxMGI2ZDgzYTgyZDU4MDExMzY3Njg4YzhkMzBkM2ZhNzdmZTQ2MGRkNDU5YzdkYTdkNjlhM2JhNTU3NmIyYmM4ZGMxNWEwZGUxOGY1MmY3OWI5MTIwYjAzYTViZDliYjRiNDU1NDdiOTRiMzAxY2YzY2UyNDQyYWU1MDgzYzVjMDhiNDU1ZTA2ZmMzZjgwYmU5NzJlMjg2OGVhMDE5Mzc2ZmRmMDQ3MjE0NzgyODk0NDA0OTE3NDRkZjVjYzFmMCI6ImU1YTNlYmM3ZDUzM2MyMTRmNGNkNjZkMzdmMWRkNGZmNzE4ODkxZGFlZjU1OTU5OTE1OTM4YTE3N2RkOTcwODgiOiIiOiIiOiI5NTliZjM2MDkyNjIyOTIzZTk2ZWY1YzAzOGNhMzE4MDQ4Zjk0NDcwMDM2MjZhOWY1ZjBjNTA4MmY2NWRhZjVjNWViZGM3MzI4ZTA5MGZkNjhlZTVkM2MxNjE1MDZiODY1OTBlMjIyOWE0NzlkZTdiYmMzOTIwODUyNjQ3ZGIyYTM1MjcyYzMwNWU5YTMwOWMwNGRhMWI4ZTU4ZWUxODUxODM2ODFjY2E4OWYxYjk1MzRjMGUxNWMxODhmNjljYmVkODczMjZhODNjYWZmY2FiYjgwMGUyNjcyNjkxYjc2NDI3MDA2NTllYmNjZmYzNzVmMjg0ZWFlMTcyOWVkY2M5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImRjZDc0ZDVkZGEzYWRmZmNiYjU0YmUwZTdjNDg2ODIxNzRiMWI0NjA2MjJiNTJhZDRmMzJiZGIyYjE2NDAzMmJjMzI3NzZkYTFhZDM5MTM2MjZkOWU2MWY1YjlmOTg3N2M4YmRiYzYyZDk4NDc1MzU2MGYyYzI5MmVjMGVjZThjZjBlMzY5YjY0ZTE0ZWNiOTEwOTk3YjdmZDgxYThlZWM2MmU5ZWY3OGIxZDBkZTY2NDJkODQwNGNjNGNiN2JkNTQ0ZmM1YTNiMzU4OGExNmM0ZTM0MmRjNTAwM2Q2NjA4IjoiZTdhYTA3Y2Y0YTNmOTAxNjdiNDg2YzFjNGZmZGQ1YWU0NWFhNTkyMDBlNGE5NGNhZGVkMGI4NWFhYWU4ZmVmMiI6IiI6IiI6ImY5MzFiMGRhZTQzNzAzZjdlYzIwYmI2YzU2NjcxOTEzODBlN2UyNjNlZmJmMzBiZjRiZDRjZjZlM2NkNTk3NjA5NWViNDhkZGNmZTlmNzJjMjk5ZGMwNWFiMmQ4ODQ2ZTIyNTk2MDBmZTM3MjM3NDRmNGVlMTljNzU4MzVjMDdiZmIyMDdlNzBjZWFhZmEzNTViYjZjNmIwYTQyMzZkMGUwODMwNzU5Y2M2NjczYWYyYjRkZWU5YTNlZmU0OTZlNzAyMDU1NmI0ZjhlZDBjMDhjYmQ0Y2FjNjE4MzFiYWIyZjVhODFhODEyMWIyNDBhOWM2ZDM3NDE3MmU1YTg3ZTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiYjcyZDU2MDQ0MDFiMTU0NzdiNjU5YTM3M2NhYWU1M2E4ZmU5ODNlMjE5OTE4NzU0Njc1NmUwMzllNzJlZmI3ZjJhZDQ3MmVlOTA0NDdmNjE2YjdhZDViYjFkYzY5MmZkMWI5ZTEwMDBlZTZjOGJhNjVmMzlhODM3ZjI3YTRlNWNkZThjYmRlYTU4ZWNmMTE0NWQ1M2MyMTkzNjlmYTg2NDAyYWMwNWUzZmUzZDUyZmQ1NDM0MzE3OWYyMzdhZTIwNTUyNzdkNzZkOTI3NmJiZjgzZjk3OTAxMjMyYmE2YzQiOiJjOTAzOGIwZDQ2ODE1M2U4NTI5MDg5YzNkYjQxOGZiYmU0MmFmYWU1NjEzYThlZWE3YzhlM2MyYTMwN2M0MTU5IjoiIjoiIjoiOWMyYTlkYzI1MDRlMmQ5NDNkODVlMWMwNjhmN2U1NzgzNTBkZmVkNjYxY2I1ZDgyY2QyNmNlMjJkMDgzZjZlMTU4YTM5MTYxZjMwMzM3MGVlODQ0YjRmNzU3MjNmZmI0NTEzMTIyM2JlZThlZmMzMjcyNmJiZGJiOWJhMmEwZDgxNzdlOTBlNGUxYzhmMWQzYTIyZTlhOWVhZWY4YjdjYTRjYmFmMTQyYWExZGExODg2ZDJlZjljMWRjMzY5MmJiMTU3ODRjZmM5MDZlMTJiNDg0NjA5NDAzNTE1NTUwY2M0NGUzYjBlZGQ0MmFlOWMzZjI2N2FlOWRkNzM3ZWYyOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDI1NiwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJjNWY1ZTUxOTI4M2Y3ZDMyMTZmMmVkNzc2NWFlMmMwZGQxZTIyNTk2ZDc3NjJjMWYwNzA3YWM5OWFkM2Y2YmE2YjkyMGU2ZDBlYzE1ODUyMTg2Yjc3YzNlOTMxODkwNGIyNTJhYTBlMmRhZmMyOTAxYTUxNzc0NDkwMzJhNzcyN2U1MjNkMzNkNmY0YjVmMzUwNTQ1ZTViZjIxYTJhYjZjZWEyM2Y0M2M3M2MyY2MwOTgyNTQxYzI5OGUwNWU0YjJkY2M2ZmM1ZDFkNTA3MjMyZDczNWIwMWVkMjUzNjMxNyI6Ijk4MzVhYzg0YzhmOGNjMDA0NjRjZTc1ODkxMDc0ZTIwZjA1MGIxNjJmNzNjOWU5MTQzNWFhZDU5MjliNDczYzAiOiIiOiIiOiI4NWE3NDc3MzE2MzhlMDllYzAyNTRlN2FhMzhlMDg0Mzk0NTdlNjUwNGRlOTRkMDA0MDVkNDE3MzI2ZjNhZDQ3ZjE1NmI1ZTIxMTIwNGE4MzYzNDM2OWJlZmZjMTI4ZjM2MTRlODllMmUyODhkMmRlMTFmN2I5MGJjYzJiOGQyOWYxNDllMTNhM2NiYzhkNzExZDI0NzY1ZjQ4MGJkNjU5NmM4ZWY2MDVjZDcyZmE2NGVkOGFiMWY5YTE4YjJkMGI4MWMwZGUwOGExNjdkNTM3YjNkMWM1MWMyYTBjOWVhOTEyNGM2ZTQxNjEzYjM4M2YxM2YxZDIwZTFlYWYyMjg4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJmYjkxMmZjYWQyN2JiYjI1MzgxNjRmNzVhNzlhM2Q3NjUxYzQyYWJhNTQ3ZGFkNjQwMzdiNDkyYTg3ZTMwMTgwOWUxNTRmMGI4YjA5OWEyZjU4NDY0M2U0ZTQwYWIzNGZhMTQ2NjY3OWZkMGE4YTFmODI3NzJhZTBjOGU5ZGUyYTQ2MWQ4MjBjZjM3YjJlOWJkNzdhNjA5ZGMzNjdiNDQ5ZWJhZWNmZDBhZmY1OWNhYmFmMjI0ZDU2MTAwNjljODg4NzYyZjkyYTE2NTUzZDgyYzkxNzU1M2E5ZTcyMzE3NyI6ImUzYzhlYWIzNWZiZjkwY2FkMmE2OWNjNzRhNjhhYzBiZDBmYzUxNTg1MjMxZmI5YzNlZWNiNDlhMDY0MDQzYmMiOiIiOiIiOiIwOWI0YTQ3NTE5ZDRhY2ZkYTUwNmQ2NGMwYjU1MzZmYjllNzJjYjFiNmI0MDhkYTgyYjRiODBmZjc5NGY0NWJlYjIwNzBiMDVkZTY3NzU5YjgzMTdmNDBlNzk4YmYzN2QzOTJjYjU5Y2JiZmVjYzMwNTYyNTljOTQyNjQxNWRmNTI2YmYzY2I2MmY0NjM2NTQyNjg5NTM3NjI5YzBlOTFhOWJlYzJhNjAwZWRlM2RjYWU4MjA3OWNlYWEzNTIyNTI0ZmMwMDJlODJjMjgwNzI0YzQxNzllMDBkZmRkMzc0ZWZmYTA1YTcxZmM4NTZjZWIyMTU0MmJlMGJkYjYyYmY3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJlYWQ3ZmEzMmRhZmFlYzA2MzQ3NDY5M2U5ODIzMGJmZGQ2MWVkNWVlODhjN2E5MzcxOGZkZjE3ZGI3NzE2NzNmMmMzZDEyZDYzYTA4YjlhY2MyZWYyMTUzMTQxMmRjZGFjMzdjNTgyOGQ0YWIyNmMxZTM2NWMwNDNhYWQyMWM1MmVmOWMxNDQzMDVlOTE3ZGVlOGExNWRkNmNkNzUxYzJjNDVhMmQ2ZTE0NjkzNTQ1OGZkMmNlYmE2OGI0OWI3NGJjZWNhNDMyOWFjNWQzMGM3YTY3ZjYxNGQzYjkzYTZmZCI6ImZkM2RhNWJiMDFlYTc1ZDdlMzJjMDIzZWVjMjMwZjNiYWNiYzE2Mzc2OGMxYzI0MjE2MDI4ZTgyNjYwZTFiZjIiOiIiOiIiOiI4ZmM3OGE0MjVmOWU4NDZlYzJjNzU3ZTk4ZjBlMWY2NzA4NWJkZTAxODRmOWJhOWU4Njk3ODExZjZjNTA5MjhkZTdlYzk3NjdhNGZiZWM4YmIwOTlmNTM0Y2FiYWU0YmNkZTY5ZjI2MzJmZTRkMWM1ODJjYjkxOGUzMzcwY2FiYjIxNTNhMWQxNjhmY2UyM2ZhZmRlOTU2NjBlNjk4N2QyZThmY2VmYmRmZWIyMTM5OGE1MDc0ZWU3NmY3MzE1Y2Q3YzUxN2QzYTRkZjhhZjI2ZjE4NTdiMGQzZTU3MDRiN2EzZTVjMTVhZGM1ZjNjNjc0NWMwNjNkNDVhMmJmMWVmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI1ZDc5YzZjY2VlMDUwYjNjMmVkNTJlZGNjMTZmYzI2ZWE3YjZmM2ZkMmI5MTk5ZmQ2NWM3ZGMyMzQ1ZDY1NjZlOWEwYzZlMDE3MTBlNGM3MWIyODIwZjdhYTkyMDNkYTIzNTE1ZWFiODVhNTgxMmM2Njc1NjYzNDgwNGUzZjU4MTdkMzJmNTFkYWIzYWUwMDQ0M2M2OTRjNTliNzJkNTI2Zjg0MGExNjZlNTY2YjdmNjMzYzdkMjQ2MTkyZWY4MjQxOWUzY2Q3MzNhMDI2ODRkNmE0Y2EwOTExNzhjY2M3NiI6ImVlNGMzY2ZhNWM3OWIxZmYxZGVjNGI5ZjlmZjRlYTQ1YzkxNmU0Njg4OTEzMGNmZmQ3ZjEzN2U2NTc5YWY1MmQiOiIiOiIiOiI0ZjUzZjcyNDYyZDdlOTI0N2U3YWQxMTM4MjdkM2VhNzQxYzM1NjkwZmEwYmUwMjdiODY2NjBlOTM3YzExOWU3MjM3YmJjNjc0ZTgyNmY0MmRkNmRmYTVmNTRkOTA1NDJlZDJiYWQyMTY4M2FmNGIxZjg3NDFlY2I3NWI0NjQzNDUxMTFjYzNkMzgzYzhiN2QwODg3MThhMzUzYzJkNGFmOTNmZjU5MDU3NzQ1YTgwODIwM2QwOGViYTI0NTJhMWE5YWRlNzVjYWRkMGY0OWZjZDI3YWMzYzAyNGMwNGMwOTM2YzAyMzdmYzI5ZGNkMDYxYjYyZmJiNzNhZGFhOGVhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIzNWY5YzNiMGU1OTQ3YTc0ZDkwNjA5ZTZhYjY2MGI0YjQ2MTc3YTEyODg2Y2M3N2ExOWFhOWVhZWU4NjUwMGE5ZWFlYzVkZTU2NzJjNWVlNTY3NzFkNzc4ZjVhYTk2MzcxM2ZmZDM5ZmFlOGUwNWVjOTA4NDM1MDVkNTgzMmVjOGQ5OTlmMjcxODEyZDQxZGI0ZjIyM2E1ZDg0Njc5NDRmMDgwODNhODFjMjlkOWE1NTlhOTYwZjgzNDlmYjAxNzRhOGRiY2ZhMTcxYmUzOWE4YzM2YmNiNzc0M2M1YzViOSI6ImI0YjVmYWZmZjM2OTk5NzA3NGE4MmUwNjQyOTg4NTlhZDI3NzVlYjVjNTk3OWY4MWQyMTE4ZGE5NmU4NDA5MzAiOiIiOiIiOiI4N2FmZDMxNDdlNjFjNDlkMjAyOWI4ODQ4MmVhY2RhY2U1NmYyN2NjZGEyOTI3Nzk5YTdkZDAxZmY2M2Q2ODczODA0ZTdiNTYzNTY0NWZmM2Y2NWIwMGUxYmQ2NTI1NDkzM2U3ZTU3YjU2MTc3ZGI4MTU0OGZiYWMzNzMwNWQzZGNiNzBhNWY3NmEyMjI5OTlkNmJhOWM3MzY3MGFlOTMxYjQ5Y2NjOTdiNGYyNTIwM2VlOTVjZDY4ZmE3OWUyODI0ZTJlYWQ4YmQ0NzU1YTViYjQ2NThlMDI3ODhiOWNlZDE2NmVhOWVjNTM3Mzk1NGFkOGRhODg3OTFlOGYxMDQ3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJjZDA4MzYzZTYwZTE3YmJjMTJkNTc5NTRlZjkyZWEzOGFmMTA5NWZmZWM0MTdhN2YzMDViN2MxMGQ0NGYxZTY1MDA2NDk3ODZkNTE0MTc5M2Y3ZWUzM2E5MTNiMDhmNjA0NTdjZGY2MzE2MzU3MDM1YWJmNTdjMmUyYjE5YmFlNjk3M2QwMWU5ZTkzZGFjMjQ5MTk4MTg4YmUyZjY4NDllNWE5NjM2ZDZiNmJmN2QxYzAxYzE2YzAzNjY5YWI3YjVhZWE4MjgwMTc5ODljODcwY2FjNjg1N2JmMzI3Yjc0OCI6ImI1NjExODA3ZDMwNzAyMDBmYzYyNTdjYzJiMTNhODRmODQyYWQ0NWNlMTE2ZmM5MWVkYTc5ZmYxNGYzZjI1ZjMiOiIiOiIiOiIyODFlOWNlYjVhNDY1NzhkZmEyOTE3ZDk4ODNmMTgxOWJiYmRjOTkwMWQ0NGYzYWI0OGNjZmNiODA3ZWI1OTZlMjBmYzA1MDYwZDZhNzdkOTJhNmY2MzBiZDJhMDEyYjQxMjMyZGNlNDExZWEwNDY3OTRhYjAwOTZiODY0OTFkM2NhMmE1OWQ0NDA1ZTI4MzFiMWY5ZjY5ZTU1NTQyYWVjODk0MTdlZTdlY2Q3YTA1MGViMjhmZDRkN2QyNzM5YWVmN2FhNmYzMGZhMTdjNWIyYmMxYzY5ZWJiMTAxNjM0MjZiOGM2MDMzZWM3NzMzY2M5ZmZjYWUyZjIzOTg2ZTYzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiNDI5NDY3MWQ0OTNkYzA4NWI1MTg0NjA3ZDdkZTJmZjJiNmFjZWI3MzRhMWIwMjZmNmNmZWU3YzVhOTBmMDNkYWQwNzE1NDRlNTk5MjM1ZDVlYjM4YjY0YjU1MWQyYTZlZGI5YjQ3OTBiNjIzMzZmYmI5YTY4NGI4Mjk0NzA2NTM5M2VlZWY4ZjU3YmQyNDc3MTQxYWQxN2U3NzZkYWMzNDRhOWFiZTgwZjZmNTIyZjI5ODc4YmVkZjgyNDViMjc5NDBhNzY0NzEwMDZmYjRhNDExMGJlYjRkZWNiNmMzNDEiOiI2M2JjNzY5YWUxZDk1YTk4YmRlODcwZTRkYjc3NzYyOTcwNDFkMzdjOGE1YzY4OGQ0ZTAyNGI3OGQ4M2Y0ZDc4IjoiMjg4NDhiZWNkM2Y0NzY5NmYxMjRmNGIxNDg1M2E0NTYxNTZmNjliZTU4M2E3ZDQ2ODJjZmY4ZDQ0YjM5ZTFkMyI6IjhiZmNlMGI3MTMyNjYxYzNjZDc4MTc1ZDgzOTI2ZjY0M2UzNmY3NjA4ZWVjMmM1ZGFjM2RkY2JhY2M4YzIxODIiOiJlNTgwZGM5NjkxOTRiMmIxOGE5NzQ3OGFlZjlkMWE3MjM5MGFmZjE0NTYyNzQ3YmYwODBkNzQxNTI3YTY2NTVjZTdmYzEzNTMyNWI0NTc0ODNhOWY5YzcwZjkxMTY1YTgxMWNmNDUyNGI1MGQ1MTE5OWEwZGYzYmQ2MGQxMmFiYWMyN2QwYmY2NjE4ZTZiMTE0ZTA1NDIwMzUyZTIzZjM2MDNkZmU4YTIyNWRjMTliM2QxZmZmMWRjMjQ1ZGM2YjFkZjI0Yzc0MTc0NGJlYzNmOTQzN2RiYmYyMjJkZjg0ODgxYTQ1N2E1ODllNzgxNWVmMTMyZjY4NmI3NjBmMDEyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiYzdjY2JjNjc3ZTIxNjYxZTI3MmI2M2RkM2E3OGRjZGY2NjZkM2YyNGFlY2YzNzAxYTkwZDg5OGFhN2RjODE1OGFlYjIxMDE1N2UxODQ0NmQxM2VhZGYzNzg1ZmU4MWZiN2JhMTkxNWIzYzA0YzQxYjFkMTkyZjFhMTg4MTYwM2M2YzYyOTFiN2U5ZjVjYjk2YmI4MTZhY2NiNWFlNTViNjk5MmNjNzc4N2UzYjg4MTJlZmJlZDNkMjdkMmFhNTg2ZGE4ZDU4NzM0YTBhYjIyZWJiNGM3ZWUzOWFiNjgxYzEiOiJiYzU1YWIzY2Y2NTJiMDExM2Q3YjkwYjgyNGM5MjY0ZTVhMWU3NzBkM2Q1ODRhZGFkMTgxZTlmOGViMzA4ZjZmIjoiMThlODE3ZmZlZjM5Yzc0MTVjNzMwMzAzZjYzZGU4NWZjOGFiZTRhYjBmYWRlOGQ2ODY4ODU1MjhjMTY5ZGQ3NiI6ImFjMDdmY2JlODcwZWQzZWExZjdlYjhlNzlkZWNlOGU3YmNmMzE4MjU3NzM1NGFhYTAwOTkyYWRkMGEwMDUwODIiOiI5NTZmOTVmYzNiYjdmZTNlZDA0ZTFhMTQ2YzM0N2Y3YjFkMGQ2MzVlNDg5YzY5ZTY0NjA3ZDI4N2YzODY1MjNkOTgyNzVlZDc1NGU3NzU1MDRmZmI0ZGZkYWMyZjRiNzdjZjllOGVjYzE2YTIyNGNkNTNkZTNlYzU1NTVkZDUyNjNmODlkZmNhOGI0ZTFlYjY4ODc4NjM1Y2EyNjM5ODRlNmYyNTU5YjE1ZjJiMjNiMDRiYTUxODVkYzIxNTc0NDA1OTRjYjQxZWNmOWEzNmZkNDNlMjAzYjg1OTkxMzA4OTJhYzg1YTQzMjM3YzczNzJkYTNmYWQyYmJhMDA2YmQxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMjBmNjliYzRhMzA4ZDFmYTQwMTQ2YmZiOGEzMTcxZTgxYTY2ZWJmNGM4M2ZkNDZiMmM4YTNiMzRkZjQ5OWE2YzkyZjRiYzk2OTliZjZkMTlkNWMzZjQ1MjQ1YmIwZmIwODMxMGViN2E5Y2U1MTg4M2IwYzM2MjcxYjVmZjBhMWMwMDIxOWEwNGE2YjU3MTM2MmM3YTE4Y2FiYzQ4ZjJmYWIwY2RmMzQzNGM5ZjcyY2Y1ZWY2YTYxZmVlZWRjOTRjNzJlMjhmYjVhOTkzNDVkYmM3OTM5YTNiOGUyNzdjNWUiOiI4ODJiZjBlZGJiNjZlYmIyODhjZTc0MTk5N2ZmY2QzMzgwMDQ5ZjUwMDdiMzBlNzQwZWNlMTkwYTAxNjEyZGVhIjoiY2ExZGEzMTgxMGJmYTZjMDJiNTg2M2Y4N2QzOTY2OGQ3OTYxMDU0MzBjNDQ1ZGIxNTdjNDFhMDE1MmEwZDIwMCI6ImMzNDRiMGJmZTgwMWRhMzdlMjMyMGQzNmI5ZTY0NTIyMzVlNmY2ZjRjZjMxOTBkNDE0ZTg1OWY0ZWU5MGU1ZGUiOiI4ZWNhYzdhNjVjYmZiN2E4NDk2MDQ1MDVkNDAzYWNhZWM0MWM2ZmZkYTMwMDlmNjA4MGJkYTc5ZTI2ZDFkZTNiZGZkODhmYzliYjljYTFkZDFjZDhkNDllM2QwY2ZiMGYwYTJlNzBhZTE4MzRlOGY3ZDdmNzkzODI1OTFlOGJlYTBhMDM4NmFkNDBjOThkMDk3MTIyZGRlMGRjMmY0ZmQzMjU4ZDQwZGNkZDgwNGZkY2I3MmQ2MmVmOTA0MTUxOGMzNGZkOGEzNzY4NGJjYWJlMmY1OTU5NDM4Mjc2N2MyNjMzYmYyNTUxMjFhYzczNTg1MmZlY2YxNDQ0MGNiNjIzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMGExM2RhMmVkZDllZDA5NzYzMTg2MGRjMjljYjJkN2VmZjM1MTk5MTA4MDhlN2ViMGM2ZmYxNDg1Y2RmNzU4ZDk3OTNjYTY5Nzc5MTE3YTYzYTQ3ZTM4NjQzM2YxOGI4ODJlYThjOGQzMTc5ZGNjMWIyNjNmYjI2M2JkYmYyYWI4MTg3NzVhODgxOTY0YTU2OTBhNmU5YWY1OTJkYjU5NGEzOWE5NjBlMzQzYmQ0ZWRiNzc0N2Q3NTg2NmUxY2E3MTI1Nzk3ZDJiZjZhNjQ0YWVkNmUzYzg0NDNmOTQyNzQiOiI0ODQ0NWIxYjY4MDdiMjYxZDEwNTY5YWI0YjVkOGFiNWQ5N2ViZDNkOWU4MTk0MDg4YjEwNDYzYWJmMTFhMmRmIjoiNmI3NDJkMDdjNDVhMDMxNzk1YTc3NzFlYWNlODlmYWI3ODJlZmY2YTc0NTU1ZmMyZWFiYmEwMGQxZDdiN2MxNSI6ImNkMDQ5M2FhODRjOTQxYzFiN2ZjZTM3ZDJlMzhjMTk5ZmI4Yzg2ZWEwYzViNmE1MzYxMThhZTQyM2NhN2FiNTAiOiJmYTAwNWM5MTE5YTg5OGYyZmVhMzViODA1YTJiZDhiZTg4YzQ4Y2JkYWE4NTgyMzM3ZjFmNDA3Y2UzZTQ5ZGVlODAxMWJiMWU0YWUzMzMxN2NhNmQ1Y2I2NDU2ODdhNjJhZWQ4NmQ1ODAzNTgzYTAxMmQ5NmI4MmU3YmJmYmViZjU5ZmRmYzFkYjBhOTI1ODZhODQzZjZlNTcwNTZmNDk3MjZlODliZjk4YjY0MWVhNjBhM2M5MTgxNWVkYmFmNDE1YjJjNGViN2JiOGM1NmNhNWQ4NGEzNTg3YzY0YTk0NWE2ZTNkNjI1YjY3NjMwODRjMmEwOTE3ZGU2YmQ2NzQ2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiZmZmY2FhYTdhZTc3ODdlMTJlOTY1MjFhM2UyOWE3YzQwYWUwOGE3Y2RlYTk5NzRjZmNiODk0MzUyOTU1ZTY1YTI3YzhiMDE0OTBjOWZhNzU5MzczNGVjMjdhZTI0MmEyMGQwMzcxYzNjNjY0YmRlYzdmMzY4YmY1M2E5MzBjZmIwOTMzZGU1ZDUwODY1Y2Q3NTdiNjNmYTM1MDM0MTM3NWYxMzJkZDJiZjliZjhjNmQ5ZDJjYTUzNTRlMjg0YmJhYzY3N2MyNjkyOThlMWE1YmVmNTM2MDkxMDgxNDQ2YmIiOiI1YjFjMWExOWIyOGIwOWQwOGJmOWNkZTg3YjRhNjg4MWQzOGE3OTYxYmQ3YmE2ODg4ZGUwNmQwYzc4ZmJlZjEzIjoiNWViYzc2YWU1Nzc5ZmU1NjMzNjJjNmY5OWJiYTM1YjRiNTBlYWNhZjcxOTJjNjhiODJhMzc2ZmI3ZjJiNjFkZSI6Ijk1ODMxOTQ5MTcwMTA1ZTljMDIyYTc3MTE4MDNmOWY3ZDYxN2E4YTEzNzE0NWI0YzJmNmRkZGE3ZWJjZjNjNWEiOiI2MzNjYjY2OTZiOTdmMmQ0MTE5ZmUyNDI0ODZlOGFmZmRmMWIzZTI1YTk0ZTQzNDU5MmNhZjAyNzA1NjNiMjEwZGY2YTlmOTQwNWMyYzMzY2JiYjc1MGMwMjE4ZjcxODExNmI2NzIzMmRiODc0NjIxODMyYmE3OGIwNDA1MjNiMmViZjcxNTA4MmZkMjNmZTdlMzI1OTk0MDJhZjk1MTU2ZWJlZGE5OGVmZjJhOGYyYTRlMjk1YjlhZmI3ZmFkY2U5NTZjYWJmYzExODNmMjBlNGUwNTlkOTE2MDRmYTVkNzcwNjVjNGEwMDZiM2ZiMmMxNTc1MDIwNmVjOTM2ZTk3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiYWU4YTZhMjViMjY2MDUxY2Q0MWZkNWVjYzY4MmI4NDRhYTNhMDkzMjcyMTZlYjZhYzYzMzkwMjUwNjIwMTEzMTI0MTQ1MDMzYjk5ODk2YzIxZjhkY2Y2MDI3MWJhNjgxMTU2NDA2ZmYyNjkxODg2OTcyZjUzYzJlNGI0NDlkYzk0ZmIwOWEyOTYwYTM0MjNkMmY0YWM2NmY5NzNiNGE4OWY4MGMwMGFmNmZiZTRiMGJiZDQzMGIxMmE3MTRkNDBlMTcyZTk5ZjkwOTkxNmEyNzIyMTAyMGZjNzIyNTljYjEiOiIwYWNiYWUzYzA4NWQyZTVlNzYwYjA2MzFjNmFkOTdkOTM1ZTk2YjBhOTBlZDRhOTg2N2Y2MjY5NTE1OTZkZWQyIjoiMmQ3NGQwN2U4MmEwMzNjMGJmNjU2NDNhNjQ3ODg1NmM5MmYzM2VlNTVhMjY4MmMxN2U3YzQyODU3ZThlNmZhNyI6ImExYjM5N2NkODI2YWYzZmIxYjk0OTQ1M2U5Njg3OGU1OWYwNjk3MzUyOTI5YjE1Y2Q2NzgxNDI0NTM0NzllNTUiOiJjMzA5NTY3ZWRiM2Q0MGZkOGQ4Mjg1NTExMTc5NjRlMjAwNDFiMDMxZThlYjQxYThjNmU5NWUyNWUwZjQzMzcyNTg1ODU0MjAyYzVkNTc5NmNhNGZkMzhiN2I3ODliNDQ0MTBiYTNlM2FiNzAxNmNiNjc5MzYyNWJlMjdjNmM4ZDM5NDk5YzQwMmU0ZDUyYmYyYzBiY2UyMWE1ZjRmMTZkODBkNTQ0OWQ1MjIyYWVhMTliNjRkZTI1ZjhmNWViODFiZWE3YzQ5MWEzMjljYTA3OWE5OWM5ZWEwMGNiZjMzNTRiNWZlZjQzNWU4ZDRjYmNiZmVhNzQ4NmQzNzlhMmEyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiZTYwM2IwMmNjZDFiM2UyY2YyN2EyYTVjYmJiNmU4ZmQyMDVlZDM1MzFhYjA4Y2U5MTJmOTE1MzI4ZWExYzczYmE3YTA3NWE5ZGZkOTgwNTEwMWJhMmYwZjZlNDJlYmZmNzIwMjY4N2U5OWUxY2M5MTQwMzYxNDZlMTg3YzE2YjgzOTk5ZGY0NDJmMGZmODdiOWQ4MmZjNzgzMTcxNGQ4MjBjMjQ3ZjFhMmMzZWNhOWQzMmVmMDAzOWM0YTJlYmI5OTYyZDg0NGUwMDMyYTU4YzYwNGQ2MzBmMTI4ODQ3NDIiOiIyN2U4NjNjMmY5ZjkxZTk1NDBmMDIwMWRiYTBmYzYzYzNjNjIzYWM4OWQ2MzM2ODA5M2RlYzJmMTdiNjg2OGJjIjoiOTNlOTY3ZjczOTI5ZjJiZTMzOTQ0ODczNWM3NGI1NzFhOGI4MGMxMGJkYTJlYTdmYmVhODI0YjE4OGE3ZGI5MyI6IjFmZjNhNDM5NjZhOGY2NGM0MmRlZTg4ODljZTI2MjZiYjM3MGFmZWY0YzAyMjJiOTI2YWJlMWJlNzE5NDI3ZmMiOiI3Y2E2ODY3ZWY1NjhjOGMzMjNkMjE2ZGI5NmI2NDI1NzZkZTFmNWU4MmQwOGI4NGU2YTI3NTIwMDBjNTE3NWNmNDlkNjA5NmRmZjdiNzE0YTQ1YTcyYTY5ZTQ2N2VlMzc4ZjRlYWJiMTQyZWRkY2E5MjZhM2QwMTEyMDk2MGNkN2FhZWYxZTM3N2Y0NDdiMGJjZjhlZTczM2Q5NjFkMGMzNmJlOTAxYzdmNDA2YTFkYzgxY2IyYWUyZTlmNjg4NmY1YmExZTQ4MWU3YzEzOTZkMmM4OWFhNDU2YjJmYjM0ZjAyYTkxZDBlZGE4Nzg0YzI2YWQ1YTY4OTJiYTVmZmEzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMjIyZGNiNGIzMWM3YmMzN2Q4ODEzYmU3OGQ5NWU5ZDhjMGYwMjEzNjM4NjJjNmJlZTViMDFlNmM5ZGJkYmE4YzJhZTgxYzUyYjkwZDRjZmViODA2OTdmY2YwNWNhYTA4YmY4MTcwMmE5MmE2YmM5MGI1MzFiMzYzZGI1YTVmZTRmNTA0MTI2MjFiYTM5MGMxY2QyMTFhOTY4M2M0N2VjN2VkNmQxNTUxM2JkNDlkMTA0NDlmMGM0NTAxODNmNWE3YjE2NDY2YTM3ZGY1ZmM3OWE0ZGRkM2VjNmJkMGM1NmYiOiJiY2MxOWViNDc2YWM5NjU2N2RhMTBkYThmYjcxNGMyZjlmYmRmZjI4YjdjNzRhNWNiYWM4MGNhNDgwZTYxZGU2IjoiNDZmZThiZDRjNDc4OWMzNzM3MDcwNTBkMGU3MDBlNTBkNjkyYmExMGZmMmZjYmEyMDA0NWM5ZWZmZjczNzNmNSI6IjY4Yzk1NmE5NWY2YTJjOWNkZDA2ZTQ2MTgwNWQ1MjcwYjBkZjNjOWZjZGViYmVmZmIzMGRhZDFhODUyZmIzNWEiOiI4YTU0ZmE5ODE4NjAyMDMyNzYyYTQ1YzlmNjdmNjY4ODYwZWQ2MDVlMzcxYTYzODIwODI1MDkyNDkzMzBmYzI0ZDEzYzRhY2YyNzc4MmE3ZDJiZTQyNzIxYmJiOWM4MGM2MzM4YWNiNTdhNzE1ZWQxN2MwMDg5MjgxNjZmOWEwOTAzMzFkYjRmZTYyYTExYWI0N2M5NjZiYzNjMjRhOGJlOTQyZTM1MGEyZGVlN2M3ZTlmNjIwMzg2ZDg5YTFlMGJkNTI5OGQwMGY5NGY5YTkzMWU1MDgzNGEyYTg1YzAxNzUzMDhiYzc0YTM0YWMzN2FiMjEzMDVjNTExODY2MjYzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiNzg3YzFmZTE0OThiYWNjYTI5MWYwMjBmODBkNmI1NTZlNGYwZDRmYTVhZGNmMjE1MzFjNDQ3ZjI4ZTE0MjY2ZTRmMmU5ZGUzZTEyNTU3NzU2MzQ4ZDhiMGM3M2ExMzAxZjQzY2U0MTAzOGNiYjdkYWM2MGQ4MjY5NDk1YjYyY2E3NDUyYTljNGVkY2I1NGU3ZDQ3N2YwYzZjNmI3YWY2MWIzYTM3ODRjNzc1YTU4ODRjYzUzNmY2MDEzMmU2NjM4NmRiYjkxMTU3N2FlZjc1ZmMwYTY4NTA4NDMyZTI1NWEiOiI5MWYxOGRkNzU4NTljMjkzOGVkYjBkODFmOWQ2MDk1YTJiYzc1NjViNjc0MDNhODc3N2NkMDU5ZjI2MzFjOTU4IjoiOTJkMmQ4MDkxY2M0ZmU5ZjVjZGYyZGVkMmUzNThmYTA1YTdkOGU0NTI1MzMzYjRjMDA2OTdhYjE4ZGQxZjk5NSI6IjIyNjNjYmI2ZTI5YmI5YmRiZDgwM2M3MjI0YWEwMzkwNzdiYTQzZDE2NDNkNDc1NDc0NWY4OWQ4YmI2Zjg4OGQiOiI2MjA4NTFkMmE0YzhiNjU1OGUxOGFhNWUyZDQ1NGNlYzgzODU2ZDI1ZTYxOWU2OTkyOGI1NzhlYTRkNGU0MWM2NjJhNGNkMGFlNjRlZTc1NmIxODQ3NDIxNTRkOWU3YTYyODNkNzhiYjhiNmNlNTNlMmZkMmNlOTNjYzEyYWQ3ODc0OWNhYjUzMGE3Zjk5NmM4MzExN2RmNmQyMTcxNzA5MjdkNzVhMGM5ODMxOTQ4MTZkMmUyMWY5Mjg0MDc5MTI5MjcxMDE3OGIzZjdkOWZlMTAwMzA0MWQyZDllN2M1OTk0M2IxNDQwOWFiZDc5NTZiZDVjMzExOTBhNTRiYTBiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMTUzN2Y5MzgwZDk3ZTk4ZjZlMDJmNGIxMDE4MmI4MzVmMjI0Y2NhMjI3OGYzN2E4Y2IxNDExYTFjNmNiODllYWJjZjM3YThiMTU5Y2RlZTNhNTUzMjliMzgxNmY4YzY1NmM3ZjYzODM1Zjg2MGI0YTVlM2M0NTBhMmFmYjViODkyYjRkYTcwOGQzOTYxNDkyMWE4MmQzNmNmMjM1MTg2MThjOWJiMGY1MzMyNDkyYzE3NDBmYjM4NWU5NjlkNzdkNWQ3ZTBhYTBhNDA2NmNiNmJiYmE0ZTRjN2ZhOGFlNzMiOiI2ZDg5MTkwYWViZDE2MGIxNTVkNWRmZjhjYzQzOTNmMDk1OTg4YTE1NTFiYjE1NGZhZTYyMTczOWE0Mzc4NDMwIjoiMDRhNTExZjFkOGUxOTk0ODc5ZTIzNzIxNjNiNWE0NTI4OTk2NmRmNjgwMzUwYmJhZjliYWVhNTIzMzNlNjUyYiI6ImRmZDhjOGU0Njc2MjhkZTZjMTIxYzQwMzgxNmE2NWJkY2EwMWRjZWRkMDU3NzhiOTI1MjgzZjkyZDNjYjUyNTEiOiI2MWVkZmI0NTc1NDY0OTNhNDNmZTEzOTFiOGY4NmRhMDFjMTI0MmIzMjk3ZjNjNGVlMDJlMDRlMzcxNjE3MjVmNDE4MmIxNDQ2MDkzMzVmMDE4M2I0Nzc3NDRjZTMzNzBmZjY0YWU4NjFjNzI4ZTc1MjYxNDhlYWMzZmIwNzQwM2EyN2MzZjgyZmJhNWNlNTA1MjMzYTRlMzhiOGQ0MGMzZjQ0Y2ZlM2NjNjVjNmE4OTEyN2Y4MDNiMTFhM2YyNDM5N2EyMDQwOWI1OTRlMTkzZTQ0MzE5MDE1NWRhNTBmZjExMzRjOGIxYWRjNTAwNmM3YWQyMDE4ODdlNmMxYWQzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6Ijg0MmRhYTNkNjRiM2MyNTIxMGNiMGVjYmIyNTEzMzNjMmVlNGUwOTBhOTkyMTM4YTVkNmY5YzQ1NWE4YTVmMGQyOGJlOWZiNTFhZDIyM2VkMTk2ZDVjMjQ1ZWVlYTk0MGY4MjI5NTJiYmNmMWUyYmE3ZDNkYmY1MjZhZTQ0YWQ3ZTYwZTlkOTlhODMzYjNmMzcyZjc3YWRjNDQwODUwZjNmZGVlY2Y0ODk0MWRiY2VjZjZmNzEwZDk5YWU1NDkzOWY5YmYzNWMzZWYyYjdiNjEzNmQ3Nzc4Yjk1ODQ2YWY1IjoiYmI5Mzc2Yjc5Y2UyY2VkZTE1MDAzNmMwNjI2ZGRhZjhiYmQ5NjBlYzA0YWRlMjY5NGJlNmFlYTZjZTg5NDZlMyI6IjQxNDMxYjc1Mzc5NjhhMmZmZWRkNmQ3OTQyZWUyMTU2NWYzNGE1MTU1ZGU2ZTA5NjY0NmZjN2Q0MTMwMmVkOTYiOiI5NDZiMTkwZTg1NWFhMmQ0ZmE3NTQ0ZTk4NThlYzcwY2E5YWMxOWFkNTEwYmQ3ZDYyNWYxNGQxNmE4MDg5NmJiIjoiYjBkNDU2MzFhMTA0YzI0NmExYWYzMWM4YmNmN2Y3YmVhOTJjZGUzYzI1OWZjMDI5MDcyYzUxZTY2MmEzM2MwNDBjZmIxZDI2MmM3MDUzMjBiNzAyMGJkMTM2NTI4OGMxYmE5YjNiZGU5ZDBhOWRmOGI5ZTcyNzVlODYzN2NlOWExODk2ODc3ZTM0MzIzYWJlOGNhM2RkMDI2MmQzZDc1ZWUzYTVhZjUwNTIzNWUzNTRhYWI0OTFkY2ZjZTExMjg3YjdjNzNkZmM0Yzk3YzQ3ZjAzNzNjYjkzYmFhZjNkZWYyMTg2YTUzMDk1ZmU4YjA1MGM5NGIxY2VmMTA5YzA3YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDI1NiwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJhYWJhMjljMTJhYWEwMTE2MTljMDdlZmNhNzVhMTg2NzE0ZDk3ZWFjMThkNzVmZGM4YjViMzZhOWVmMjQ3YmVmMGYxNTJiNzU4Y2RiZDY5MjU2YmQ4Njk3ZmNlNTNkMmI1OWFlMTIxMGEzNTAzMTk4MzRkNjcyMWU5ZGE2YjJjYzFjMGU1NTlhMjY4MDRkNDc5NTNlMGJkNWRmNjZlYTJhMGM0NDlmYzBhOGRjYzE2YjliMGE4MmY1ZTZmODVhMjE4Y2RkZGFlZjQwYzI1NGMxMDMwYTliZmEzMzIxNGFlOCI6IjAyNDcwZDY4OThiY2QxMTljYWI0OTI0MmM5NWZhOTdiNTZhNDk1ZjZkMWM1YjI2ZDFlODc3YjcwYjk1NGUzYjMiOiJlNGU0MjkzMTQ4YzMxY2E2YmJkNzM3MDZlMmRkMmYzNmEyMmQzYWYzZjg2MmRkYWU0MGFkMzVkNTFkZDY3ODFlIjoiMzRjNjUwNWVlYmYwMTg2NzZhMDM5ZjIwMTUwN2ZhMzgzMzg1OTRjZDAxNWZiNGQ5NjJkMTU3N2JlZmM2M2VjNiI6ImUxNTU2YThiY2EzOGQ1YzIwODdiNWM2MTE1NmFiOTE1NjZhNWRhNzg0NjQ3ZTIyMGJmNGVhMDM3NGUxODdkNGE0YmMzNzNlYzg5MTQ3MmRhYTMxYWEwZGNjZGI1NmE4YjQyZmIyODA1ZTc0MjUxOTc2ZmZlNWUwMmI0NDZhZjhhYzZhOWYwZDZmMzZkODU3ZmU2ZDM3NzJkOWZhZTdhYjA4YjM2MGU4ZGUyNTI5ZGVjODBkZDMxYTVhNTQ2ODAzNGFhNTNiMTBiNmE3MzA2OGZkOWUwNDZiNzBlMmYwM2ZkZWQ4YmQ4NWY3ZGY0MzIyZDRmYTUzMzhjOWNkZTA0NzEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiNzQyZmJmOWYzOWY5ZDhjNDI3OTE0M2Y4OGE2ZDMwMzA3NDkyNjgxY2NkNThlODQyMjI3NzI1OWEwYmY4N2FjYTI0YzVkNmRjNGY2NTBmMzljMzQwM2ZlMWVhYzFlY2IwNzllN2I5ZjM2M2ViNDQ1NTkxNzc3MDFmOTNkYTkzYWEzMGRjNWY0YjkzMzIwOTA3M2M4MjVhYjJiMzliNTJlYzIzY2FmMDQ5Zjc2MGFhMzg1ZjU4OTgzZDlhZjMwMGVjNWY4MzFmMjQ0OWQyNTA4YmI1ODI0YWJiNjIyZTAwZGQiOiJjMmM0MmU2M2Q0M2E3NjVjMmE0OWQyYjM1YzhiYTk4YTdhNjc3NjVhMGM0NTNkMjM1MmQ5ZjIyNGFlYjA2MTc2IjoiNzk0MDgzMTg1ZTc5Y2Y5MThmYWE4NDZiZDEyMjg3ZThmZjFlNjIwNzcwZTBlMDhiMzNlOGUxZGE4ZDIzY2ZkYSI6ImVkN2I5MDJlYjU1YjdiZGIyYjhiZjcwNzExYzFmN2E0YmMwMGM0ZGFkZTkyYzlkMjQ1OWRiMDYwNTUxMzM2YWYiOiJjODNhZjkwYThjNzg3OWU5OGIyNTVlOWM2YjE4NTJiZDc1OWNjZjhmOWM1YmU0ZWE1ZTlhMzU2ZGY0YzQzZWZjYTQxMzAzZDVhMzIyYTdlNDJlZDEyYjhiMGI3MTVlMWQyMzI1N2FhYTM2NmJiMjYxZTM5ZjE5ODM0YzM4YTdhODgzYmYyZjAxYzQ3YTc4MmVkYjc5MDVjYzYxNzQyYjgxNjY5NzRmNTk5MDMzMGEwODE2OGUyNWQ0YWFiNjc0MGI5NjQ5M2ZmODdhNDI0YWM2ZWQ0NDdhZDY1NWFmY2ZkZTFkMmVjNmFiMmJhODExMzUxMzg1ZWEwZjhiNjZlMzE4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjE0Mzc5NThmYmM5M2M3MDFjZGQwOWZlODFhOTBhZjU1ZjAyMjE5NTM4ODI2NGVmMDM3NThmYzA4YmZkMGRkODBmNjNjN2JjMDY5NDVlZWRkNTg4OTNkZjJiNWY1ZjYyYjIyMmVlNDIzZGJjYzU0OTFkMWE1NzE1NTg5MTQwNmM3OWU4ZWY1MWZlNzU3NWRiODA3NGM0ZTQwZjUwMDI0ZGFmMTc3NTQ4ZWIxMzBhOGMyNDhjMmI3ZGY5OWI2NjI2ZWUwNjJjZDVlODIwNDgwMTliMzJjZDZjNzMxOWVlY2RkIjoiYzQ0M2Y4OTE1MzRjMzBkOGQyYjFlMjA3MmNiNWI4MjRlNmQzZGRmZGQxZTZjNzc1N2U1NDM3MmQ0NDIwYjVlZCI6IjM5ZjdhYmQzMDZmMTI3YmFhZjhjYjgzMmI2N2MyNTY0Mjg3ZWZhNDMzZGY4ZWNhYmM0MGI5NzQ0NjM3ZTZiZmEiOiJlZGE2OTUwMDAyYzg2NmM2MWQyZTJkZmNkOWQ2OWU4YzUxNTRiNDVmNzYyZWZkNjg4ZTI2MDQ0YWRjMzk1N2MyIjoiOGZiNzU4YjQ5OGZlYjFjMGU5NjFhOGY4NmI4MjFiZGRkZTM4N2RhYzIyMWE4MTkxZjcxYjZhNjRjYWEyYmNjNGE0NzU0NjA4MjM5OTZmODI2MWI4ZTIyMTI1ZGZlYWM1YzlkYmRhMjU1MjVkYWIyNDljYmU0NjljNWUyMjQ0Nzg5NjQ3OTNiZjgyMjQ0NjcyMWJmNWJjODVlNWRhNmVmMzRkZGNiN2M5NGYxMDkxOTNjNDc1OTA0MDk5YjA2ZTJhN2Y1M2JhNmRkOTQ0ODBkZDViYzlmZmY5MDE1MDI4NmM0ZDNjY2VhOTc1OTI1Y2M4ZWQ0ZWY5ODMwMzg5YjliYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDI1NiwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJlZjkyOTJmNGE3YTY3YWM0ZDRlYmE0ODkzNjM5MWJiNDVmODgxMGMyYWIwMmJhNDI0Y2M4ZTRhZGQ1M2QxYzUxNDYxMWUzMjMzY2Q4Y2M4ZjZkNjk0OTRkYzMzNmNiZTFjYmM2N2MxNzUyMGFmNDQyOTMzYTIzNWM2YWE2YjhmOTgxMjhjNjZmY2RkNzc4NDNhZTMyZTA2YjdhMzE2ODljOWE2YTNjNTQwYTE5MDgxYmNiZTg1MDI3OGQ1MGFkZmFjMzYzOGVjOGNmODUxNDhhMDU0N2QyOGQwYTcwMjVkYiI6ImY0YTg3MjFhMmE4NzNmOGZlOTRlNGIzZTEzN2U4NjZjNzkyMTJmOWMxNGY4OWJlMTU2YzQ3YTVmYmI5YWFlY2IiOiJiMzhhNjYyODY0N2EwMmMwZGU1YjdhY2I5MzlkMGQxODk2YzljNzMwMTA2Yzg2NjdkODEwYmQ0ODY2ZWJhZWU0IjoiMzY2MzcwODk5YjJhMGQ2ZjA0OWU3ZDgyMDA2MTU5OWE2NzVjYmE1ZDNiYzgyYWQ3NDdmYTczMWJlYWQ4ZWZiMyI6IjE5NDdkNDY4YWU0ZmE0ZGE3ZjQ1Y2ZhZjMyZDYyYTQzNjk3OTZlNTMyZjFiMDNiMTQ5NTU4N2U2YmI5NWQ4MzMwZjViN2M5NjJhOWIwYTJiNzE1ZDlkZWY3OTE5NDc0MTg3MGU1YzQ3ZDE1YTczMDg4NDNlMTA2MTZiODkxZmM5ZTVjYWI3ZGI5MDFlMGYxZWZiZTEyMTdkZDYyN2M3MWI1NGM5OGNlYzBmZTFiMjVhODRjYWE1NmYwYmRlMjQ3YTlkOTE4MzU4Nzc0MmEzODgyNTIzNGI2YjZjYzgwOGFmZGUzNmVmNWUxN2JjZGIyYzcyYzc2NDU5NDkyODkzNjkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjUxZWM0OTg3ZGRhY2JjZjYzNDhlNGE4OTFmYTU3MWM2ZTNhZWMwMjg3OWViMDE4MWExMjFhNDg0NjM0NGE2ODdjZGZmOTc5ODc2MTg3NTMyMDI1NmU1YTU5YmM5NDY2M2ZhYWI4ODY0Y2MwYmIxZTY0MzQzYzBiOTc4ZmNjMGQ2ZTg0ZDBkMTdjMWMxZjQwOTNmYWMzYjRjMDE4MzdjNmIzN2QxODlkNzYwOGYwYzMzNWViMzhmZTFmNDM1NzNlMGM1MjUwOTNmNjBlZjYxOGJhYjI5N2I4YTRkOWQ4YzE2IjoiIjoiIjoiIjoiYWRlMDQ3MzAwNTk0NzFiMTgyOWJlYzhkZmJiMGVjNzA4YmU3YjRlNzdkNjg4Y2U3Y2ZiYTlkZGRlMDU5YTUyZjk2OTQwNzI5MTQ0MGFhNzk0OTJmODI3ZmUxYTJmNjU2ODk4OWZkMzZiNGZkODRlNjY5OTE1MjUzNmJmZjE1Mzg4YWYzMTlmYjMwNmYwN2RlNDMwOWViOTJiYTNkYTVmNzAwNzk0ODMzNTk5MzY5OGQzOThiYWM0MjAyOTkxMmJlYzZiYTM5MjI2YzJiZjIzODczM2I1MDgxYWEwYTJjYTM5MmE3MTkzODUxODRiZTYxOWQ5Y2E1Njc3MWQ4ZTM3MTZhNDZjZmIzMzlmOTNmZjQ4YWJlNDA2ZWY3ODhkYjJhZGE0NWFiNWZjYjdmNjg5YmQ4MDFhNWNjYWQ4NTViNTJjZDRiZjFkNmUzMzhmMmMzZWFjOTRjZTlmZGQwZGQwNjYzMmQwMWRlZDM3NTNlODc5NTdlODU2OWE2N2VjY2FkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJmOGRmYTcwNTI0ZDQ2ZjM1NDVkYjNjNjg3ZmU4NWE4ZWEzNWUzMmVkYTQ3MGI0ZTE0YjhiMTJmNGU5YzZiYmY2YzA4ZWZhOWFlMWRmOTBhZTZmMTRiODk1YzM0MmFlMDdiNWU4ZDU2MzE5OWExNDFjMzRlNzA5YzZlNzQzMjYwYjU3M2Y4ODE4NmY0MGY4MDBjNGMwZWM5ZjlmYmViYTQ5ZjEwM2JmYTJkNjJkN2VkOGZjOWZmODhjYjFkZGM1ZDRjYTRkMDc0ZTAwNTNjMDY5MzkzZDcwYTViM2YxZGYzZSI6IiI6IiI6IiI6IjA1ZjRlNjA5YjA4NWQyODk1OGY1NzAyZWI3Yjk5ZjJlMGM3YTgwZjA5NTkwN2FiZDViNzMyOTYyOGFhNmRjZTJlMmY4YmRiN2EyOTkyMjYxZWE0MTRlNjQzNGRjOTgxNjJkMDJjNTE5MzY1NDIyMThhMzFjNjA3MmVkNTVjOWVkODNjNzk2OThkZTdmZmQzODM1ZDVlNGQwZjNhMGMyYTcwYmVmMmI2YzYwMmQxZTBjYzgxNGM3MWIyZmIxYTAwMWZiODNhMGUyYmVmZGVjN2U0NzQ5NjI5NjkzNjI5ZWEyMzk3YjI5OWNkZjQ5MTQxNWRkYTQ0NjgxN2RkN2QyOGRhNDMxZjk1MTYyZGU4M2Q5MTdmOWU5MzI1Nzc0ZTJmN2VmMDJmZTgwNjdjZjRiYWM0N2UyZjYxYmEyMzViNTMyYWYzYWE5NWE2NTE3ZTlmMTI4NmUwNjVjY2Y5YjNlZWZhNmNhYjRjOTQwYzgzZWU5YTExZGE1NWVlMjFjOGQwNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiN2FiN2RhNDdmZjdhOTVlYmYyMzY3ZGUwYTI1Yzc4ODVkODA5MzE0NDdkMmY1Y2M3M2FlN2Y2Njg0NDkxMGU0ODFlMDVmNTNjYTk5M2IwMjY2YjdjZGU4OTk2MGQ2ODFhM2QzYzU2OGQ5YTZlMzUzNDdjZjUyZDJlMGZmN2FkMTE0Mjk4M2ZkN2QyYzg0ODY3NDMxNWVkM2UwMDlhZGI3MTU0ZmRlMWYyZDkwMDE5Y2FjMjEwZGJmYzA2Mjc5ZDQ4ZmM3YzJlOTAwNjUyYjVjYjYzOGMxMjYwYWNkODk2ZWEiOiIiOiIiOiIiOiJmMDA3MTRkZjI0MzEwM2Y1NGI0YzBjNTE2YTdhNjMxNDMxZGJlZmRlY2MzMGMwOWU4ZTgzNGYwOTg4MjEwMGMxZDAyNzYyNzM1NjhjYzYzNTJjMzAyOGMxNTYzNzEzODkwNzgyMzZhZmU1N2QwMGVkYWEyMjYyNjJmMWE3ZjZlMDAxMWJhNDhkNGI4ZjA4OWNkMjU3YjZiN2NmZTgwY2EyYmJlZWU5OTYzNWMyNzcyNTQ1NDZkNGFkYmYwNDY5MzU3OTFiZTIxYzQ4YTc4ODJlZjZjYjgxZjdiY2NkZmNmOWJjNDMwZDIxY2VmMWQ3ODhkNGY0ZGY2YmQ2ZWY1YmNiZjQ4ZTM1ZjExNmQ0ODJkODgwZjU5N2JjYmNmYmJmNjhiYzc3ZjU5MWJkNzM0NmQ3YTEwODVmYmMxYzI3MDdjMTdiYjI4OGNlNmJmYjBhNzhhNTQ3MzE0MjE3NjJmMTgxNDI5NzViOGIzYjc5ZGVjMGQ4NTJkY2E4MGYxNjM4YjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjQwZTgzY2IxZmJiZWZiNDQ0MjYzNTA5MTZiMDk5NWZiNmExYzUzOTRmMmZkNjI1Nzc0NDU5NTQ4Y2ZhYjI3ZjJmOTJlMmU4ODlkM2RlZWIzM2RmZDZjNDBmNjEwYjcxYjcwMzg3YWY4ZDcwNzY4YzUyYjM2YmIyYTU5ZjNhZDlhMTZiZTk4YzcyNmMyZDY1YWY0NTdiMmY3ZDgxYzc1ZmFlODI1MjNjOTc3Y2JkZjYxMzhiMWNiZTVhOWIzYWQ0MDJiYTE5N2EzMDA5ZGJhNDU5ZDNmNTM0ZWExNDNlNWRjIjoiIjoiIjoiIjoiNTJjZmQ0YTQ3NDFiNjU3NTU3OGExYjdhYWI5MWEzNjYzNDFjZmQ0ODM3OTljYTA4Yjg1MWJiMGRjMmYyYmY2NDBlOTBjMTQwNmZkMDlmYmY5MTY2YmQ1NWQ0NmFhYWVmMzhlMDQ0OWI3MTg3ZDAxOWU2OGEzYjk4YTdkZDljZGFjNjNhZTljOTY2ZGI0ZDkwMWQzN2NjMTQ3ODM1ZDAxNzkxNTkwMjYyMTIxNmJjMTgzNWQ3MGRjMjEwMWFlNTBlMDU0MWY3OTZiZDZiY2EyZTUzMjYwYmEzMzUzZTZhYTRlZWU1NmY4MGFhMzI5MTczZTM0N2Q4M2QwNTBkZGViNDY1ZDhlMWFhNTQ1MGU2ZTdlYjUxNWE5MmZiY2RmZDg1MzBmMDRmYWUzZDFhNDFiMTMxNTFhNDgyN2YwNjM0ZDZlODA0MjRjMWU5MzRjZTBlMjA3N2Y1ZjMxZmQxNzdlOWE0MmFjZmNhYTY3ZDQwNDNmZDMxYThlYzcyYTM5ZTZiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiIzOTkyN2Q0ZmQwYzNlYmEyMDQ0MDAyZTY1YjYwZDM5OTRjM2FhZDBjNzA1YmNlMmU5ZTQxYWNhMzBhN2MyZjAzZTdiNDk2OGQ4ZTcyOWU4NjhmNWZkNTdiNDlhNGI4NjJiMGJkMTY5YTRlMmQ3N2JkNTk3NDVlNzc4Y2E2ZmQ3NjI5MDFhZTNjMGZjYzQ4YTBkNmVlMjJiYzg1MjBlYzQ1MDYzMDA1NWIzYjY2YmRkMmRkZTlmNTIxNWQyNDFmYTI2NmQyNDM0MmI1MGQ0MmUyZGI1NDM2YTQ3OGM3ZWJhZiI6IiI6IiI6IiI6Ijk2MTk0ZGQxYjZhYzVlZmIzZDQ3ODdiZDFmYjRjOWNjMzJjMjliNjdlZTM0MzY5YTdhYWQ5YTU2ZjY0ZjUzNTI2ZTkyMDdjMWQ0YzU0MWM2ZTBkZjQ5NjBjNTRlMTAxNjgyODQ4OTE4NDFmZTU1NGFkYWE1MDEyZjMyNWIzYWVhNzlmYTRkYjhjMzZlNjdhMGY5MTRkOWFiMzYxZDhiYTBiM2Q2Y2E0OTA0MTAzZjE0YTMwYTkwZGQ2ZmQ3YzNmNjc5YzI3MmRlZTdmMDExMTBmNzIyOWY0ZjViNmVkMTUyYTAxNDlkYzVhNzE4NWJmNjM3ZDEwODk5YmNhNDE3Y2JhOGY5MTlhMjgwMGQ4YTcyZDU1NzVmMGMxNzRmOThmNzdhMWFmYWQ4NTAzMzQyMDRlNjYxNTZlZmY0NTcyYTY3MDNhYWI1MGI4NTBhOGRmNDk4ZDFkOTZiMWUyYmMxYWMzNGFhNDM5OWYzYjEzZTk3YjQ5ODk1MzljYTc4ZTk3YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiYWQxMGRiYmVkZjk4MGEwYzMzNTc2Zjc2MDZlMTQ3ODViMmE5MDM3ODhiOWI3Y2I0YzI5Y2Y3NGE4YmJlYzg3Nzk5OWNhMjhjMzZjODM1YjYwNjgwYmFiOTAwNWQ4ZTRmMzQxYjk3MjEzZmRiNmE1MmU3ODNkMTk4NTA5MDZjYjY0M2JjZjQ4YzI5MWNkMTg2ZWJjYmYwYTI4N2U0NTlkMTc5NWUyOWZmYjBjN2M4NGIwZjZkZmJlMjE5YjRmODVkOWZiODkzYzBjZjkxMzQyNjNhOWU2YTM2Yzc2ZDAyYTkiOiIiOiIiOiIiOiI1ZGIyNjk3MTRjNGFiNzc0YzJlYjE0ZWI5NWU5YjYwYzZjY2FhNmU5MGY5Zjg3OWUyOTVjYzAwNzA2OWRkMjMxODk0Y2Q4ZmUwYzA5YmY3NDhlMjY5NDAxNjBjZDBjYWQ3NWRkMmUzMDVlZDFmMjUyN2JhODU3YzQyYzNkMDY2MmQyNWNiYmNmZTM0MjkxMDQ5OGNlZDMwOWNkYTE4OTRhMTE4NmFiOTM1ZmI2MTQ2NDZkMjk5Y2E1NmY4NmRlZmRkMGEwZjUyYmFlZTFiOWI5YmUwNWRmODVhMDVjMjI1NDc1YTdjZTFjYzU4ZWJjNDg4YTRmNTdmZDFmOTgzODgxNzU0ZGNmZTNiZDc4Y2FjNTI5ZTk5NDVjODkzODNlMzMxZjAxNzdlNzIxNjQ0YjNhOGQ4MmRlZWY1NDhkMTYxZTA4NWNmZjU5NjQ1YTM0NWNmN2FmM2YzNTgyYmVkNWI4MWM3ZGU3YTZhMjE2NDAzYmI4ODgwNGY3ZDE2Y2VlYzkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImU5NTA2ZGQwNWJhYzQ3NTBmNWQ1YjQzZTA2NjNlY2JhNjQ0NDQ1NWFiNmY2NjI4MDI4OTdhNDkzY2ExMWZmMDVmNzYwNDViNjIxMDA0ZjRhODhmYzZiMWJhODU5YWU3OTVlNDg0NmYxN2MzYjFjMTI3YThlZjE2ZDMyMzgxZTI3ZWVjYTc3ZWMwNjJhOGE4ZjgxMWY1ZGQ3ZjkwNzM3MTQ3ZjVmY2EyYjdjYzg5MDA5YjAzNTAyOTJiODhkMWRlNWRlOTRlMWU4MmJkNWY3YmYyZTA2ODgyYTkyNTk3N2NlIjoiIjoiIjoiIjoiYWJjM2Q2OGJiOWIwZDI5NjU1ZWUyMDU3YTYwZTU5ZmI4NGFmYmFmOWM3NWFjNWQxNDZhOTg1NjM4NDAyMmU0ODczYTZhYmI5NjNkODc5NWRlZDVjZTMzZjhkZjkyNzVmOGFlNGMzZGEwMDM3OTczNDg3MzQ4NjQ1NDE1ZWQ1MTQ1ODUyOWJkN2M0OTk2MTI4Yzk0M2RkZmEyMTQ4NDUyMWZjNjQ1NzIzODAyMzE4ZmZkNTE5MWU5NTdlYzQ1M2E4ZTkyMmQ0OGIxZTgzNjgxYzE0NjNhMDNjMzQxNzVhNWQ2MTBmOGYzNzA5YjMwNDRmNDUwODRmOTAxNzA0NTQ3ZTMwMWY5ODA3YTdkOTIwMzZlMDhhM2VlZjc5MWY2NzY1OTgxNmZjYjI4OTIyYjliNTJlMmE0YTJlODFjYjg0OGY5YWU1NzljYmEzNDZiMDUwN2U5MWYyNmI3MGQxOTlhY2I2ZGE1ZDM1NDRiOGNhZWE3NjJmNmYzMDE3ODYzNmQ4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJmMWYwMGViYjdjYjRiYmIzYjBhMDgzYTI5MGQ0ZDNjYzRkYjUzYWE5ZWIzZjJmZWIxZDQyOGNmNmQ4MTA0YmRjNTZiMmEzMGU3NTc4MjY5M2Q3NTY1YzVkMWFkNmVkZDZjYzIyOTY3ZWViNWYxNTk5ODljMmVkN2ZkYjYyMTAzYzA1NTQ1NmY1ZTFhMzE2M2JmYTAzNGM1MDJjY2JkOWFhNzUzODVkNDc3N2QwM2E4MjYwNmE4OTBjODlhMjA3NDk0ZDA4MmJlY2MyMmVmYWQ4ZmU2OWMzNjdmYTllMzM1MCI6IiI6IiI6IiI6IjZiNzVhYTE0YzEyOWQwMTExOTFiOTAxNmIwODlhZjE1YjgwNmE0OTRlOGU3NjNhN2ZlOTAyNDc5MTU1NzA0ZTFhOTJlYWI0OGNlMjlmZDBmMWU5ZDVhMjAxNDc1N2MzY2RhNmUwMjFkZWZkYjkxYzc5NmNiYWQ3MDk2NThlZGFkNmM4ZjdhYjZhZWJlOTc4ZDUwNzQ1OTE5OGUwNzE5ZWVjNDliMTkyNmE3YzRlMzNlMzRlOGUzNjY5NjZlMGU0ZTdmM2NlMGFlZDZlNTFkNzgwNGQ4MDNhYWI1NzI1N2ZmMTI1MGFlOGI3NmJmYzQ4YTUwNWQ0NjAwYmNjZGQ5OTJkNTY0YjM5YzM1MTlkYjBjN2RkMjZmNWRiYWJkZjNjMDk4NzM1Njg4YWFkMWFmODUyNWU4YTZhMzQzODM1YmVkMDk0NzA4Yjc4ZmFhMzAwYzA4NjAwZTYzOGU2ZjI0ZjRiMmI3OGRmMGQ3NDdmZmJiOTUyMWNjNjc4NmI5Yzg5ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMWYzYmFkZTg2ZjY0ZGMwNzcwZGFmZDZhNDkwMGY2MWJhZjAwM2M2ZGNjZWM0OTY4NTZiN2IwOGNiOTlkYjhmMzcxZjFjOTYwNjYwMmFkMzk3ZTBjNzU3ZjU2ZWM2MTc2YzA0ZTgzMjMwMmZkNmZiYWMzNTE5YWY2ZDJjYjlkYTVhODVlZTcwZWZjMTljNzM1MDE0NWU5MDRhN2ZhOWQzMTk5ZTFmNjIxMzk5OWVlM2JiZGJjZDEyMDBiNGRkNGU3YThmMTEyZjNhMzc4NjVlNDk0YmY4NTQ5MzQ5ZTllNzgiOiIiOiIiOiIiOiIxYTQyMGM1MTA1MjUzNGQ1ZDc3MzQ3ZWQ1NzUxZTQ0ODE3ODI0ZWQ3NTQ2Nzc5MWM5NzE3ODc1ZGFkY2JjZWZmMmZmZTAyNDk1Mjk1OGQ0NzE4YjJiNDAyOGFmODNlY2YzNjNkNTczNDlhMzY0NzZjMDIwM2ZjZGY0OTUyNzk0YWE2NmIzNjkyZTdiMDgxMGNlMDYwNjAxODE3YWQwNzk0NTc0YjFjZTEyZDZhN2I2ZWMxZDBiMWUwYWNiMmE2YzQ1M2JlODFiZjJkMTdlMWZjYTdkYzFjOWFjNWZlNGE2NDA2OTI4NWE4Y2I5NDA4MDUxYmE1YWU0ZGMwYzg4OTdiNGEyMTYxMDliMjJlYzU2YWFjZTk5NWE0NTNmMjhkZDdkMmMzOGM3ZDQ0NzM5YjlmMDljYTBlNTJkNjJmMjA0ZTdmNGEwOWMzZTIzMWM4Y2RhZjU0Zjk0MWU4ZDU1NjViMjUxNTViZTIxY2IzMTY0MTdhNGMwMDVmN2U4MzRkMGUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjFiMjg4Yzk0YThhYTc0OTk4NTBkN2JmODIxNzcwMjRmMjBlOGNjZDUwMmI3YjBmNTI5YzQ3MTg1YWFkNGViODJjYTFlZmMwMTA0ZjkzY2MzNTg4NWU5ODk0NjcxYjlkNzRmYTgyMzdmNWQ3NDBmZWMwOWU5MGI4OGJjNzUxMjRlNTY0ZjFmMTk4MDgxZDUxYzk1MGRiZWY2YTZlYmIyYjVlMWFlYzAwOGQ4YTVhNGM2OTJmNjQ2N2M3NDBmNTAyNjgwN2JhZmMwNzEwZGM4ZTkxOTdhZWU0MzcyYjQyOWNmIjoiIjoiIjoiIjoiM2RhZjcyZDk0MDU2ZTZjNzEzODc4NzAwNGY0MGE0YTBjODFhMjQ0YzhhYTE0YzMzMjY3NWU5NzczMzBiNjMzMTU5MTZkOGZlNmJhOGYwYWVhNWEyMmRlZjM0MmQ0MTM2ZDFkNmM3ODdiM2E2YzZjMDVhNDRlZTFjZjliMmQ4OTExOTc0OTc0Y2JmN2ExNGVkNWI4M2ZjZWI4ZGQ4ZDNlZDU5MTk0ZDNmYjZjY2U1NzlhOTcyNDQwOTE3MzFhNGMxY2ExZDZlNGM5ZDI2MjNhNDFkZTY2NWVlM2M4MjM2ZTBkYTg3MTAyMDhjZWU5NDhmMjQ4MzI5NzgxZjQwZjZmNGI0MDEwNTA4YzIxOTc1NWI2ZGY3NTJiOTUyM2VkMGM5NjQ0YjE3MjUwYmJjODhiNDMzOGM2ODhlOTdlOTUyYTkyNGRhODk0ZmM5ODZmN2U4MDdmY2E0NDc3YmU5NGRlYzk5M2NkNjkxMDcwOWQ4MDMyZmQzYTViOTc2MTJjZDY1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMWUxODM3YjQ2NDg2YjZlNjU3MTMzMjcyNDBiZmFjNmM2MThlODE3Nzg3YzI3N2I5OTVjOTJkYmUwM2I5YjAxZGU4ZTEwMGIzMDNjZTViZjUwNDhkY2NmY2U0ZDI0MDg3OGZmZDVkZGNiNjc1NDI5MjI5MWQxYTc5ZWUxZTYyYjZkYTZiMjNkN2E4M2QwZmU5ZTg0NzU3ZGNmYTUxZDA1NzA5ZDU0MTQyYjQyZGM4NzY1MDY4NzZiMTM2YjZkZjM0YjQ4NWMwYzEyOTU4MTk3MmJjYmM2NzRiODkzYWQ2MWIiOiIiOiIiOiIiOiIyM2MyNThiOTNkNGU5OTQzNzgzZTg4YjI0NGE1MmNkZTY3NDdkOGQ3ZmYyOGI3N2UyZGRmYWEyZWRjYmIyOWVhZjQxZGM3NWNkYzJjNWI1ODFiM2E1OWZlMjBlNzA1MjIzYmRkOTBlNzg2ZjZjNjQ5ODMzMGVjOWJkN2NhNzMwM2U1M2MwYjIxYWJlZjE0OTcyMTBmODIyMjg1MGNhN2YwMWUwYWY0ZmVmZDM2ZDgyZTcxMWZiMTdmNTgxYjk1MWU5NDk4NzZhNWVmMGEyMTJmYjczYWY0ZDMyZjZiZjlmZThjOWU2MDg0OWZkMjMxMWYzYjVjYjhhNGFiZTg1NmIzZGQ2MjlmYmFjNDFlNmRmYjUwMmQxODk0MDg4ZmM1MjgzMmNlZmZmODA3NTU1NDU3YzAzYmE3YjdkYWFmMDI4MzBkOWZmOGM5ZThlZDA5ZGRiYjY4ZDY1MzBhZjBjYzVhZTkzODNhY2QzNGM4OWVjMTg5ZjVhOTdhYmJmM2VkNWQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI2N2IyYTZlMDliZjMxZWNlZThmZTljNzE5NDkxYmFmM2M2ZWZjMGUyNzUxOTE1NWY5OWM5NDY2N2Q3Mjc0MjAyNjUyNTRlZTZkMzRjNmI5YzAzNDE0NDUyZDY4OTI5ODEyZjFkMjNhY2E0NGFkZmFmNmIwMmY1MTlkZmMzZjAzNGJjMzJjMWI3NjNhMTI5YTk3YzcyNThlNWU3N2JhNjlkNmViNDU5YmUyY2M5NmZkNjE1MGI2MDQwYmFiY2M0MDYxNDNiZGMyYzE4NjJjN2JmNjYwN2I0YmU5NWYzMTUxZiI6IiI6IiI6IiI6ImQwZjcxZTU2ZTk3NWU0NDNiZDczNjRlYWZmYTlkYmZiNjBhODJiZDBlYTY0MDVkZTBiMTMwMTkxMTQ0OWFlNmFjMGRjODc5MmFjZDJiMGNhM2U2OGMyYWJiOTgyMzYyZWIyYTdhOGY5NWQyOTYwNTc5Zjk5MzIwNzBjOWNkN2FiZDU3YTM2NzU5YjJjNmYxMmUyMGRiZGE4YTE2YTE3YzI5YjcwZjViYjhkYjBlZmE5NDUxZDlhMzQ5Yjk5MTdiN2JjMzlhZjZjNmJlODIxN2UwYTZmYjUyZTZhNGM0NmRmZTQxZTZhOWNmYmE4NDMzNWQwMjU0Y2FkMDc1NTdmZDdhYTNmZWExODVjOGM4OGE5MjFlYTY2NWU0MTAwNjczOTU3OTE3ODVlYmRmMTc5MzAzOGNlZWY2YzU5MGU2NGFmMDBhYzRjZTY5YWMzZDBiNDk3ZmViOTNiNGZlZTdkNTVjZjBmYTQwZGQ0OWVhNzQ4YjMzZjAzOGI1MDk3NTc4YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjM3OWQwYTM4Yzg4OTdhNjUyNGQ2YTU5ZGY0ZjA5YmE5NzVjMTQ2YmU3YTM5OGMzY2JkZThjMjIyZmNmOTk4MTAyZTk4MjIzYjgxZGZjYTdmYjViYzkyYjE2NGFmYmFmNTBmNThiOGRmMDQ4ODlkYmQ2OWFjZDU5ZjdkNWFjMDhmODE5ODQ5MTBlZTIwYTRkNThjNTE1MTJhM2VkODkzZDdiNzM2ZGE4OTRhMGI1MmY3NWM1MjA4ZDE0Zjg1OGRmZDQyMjkwZjQxODFiN2FhMjQ5MDk3YjkzZmIyYmNlYWI4IjoiIjoiIjoiIjoiMTY2ZjY0MzYwOWRjYjg5NTExNjFjYTE1YjM2NjA3NTliNjlkYTYxNmI0NTc2MWI4Y2ZlYzAxYThhN2Y1MWEwYmIxY2YyNTZjOWZhYmU2OWIyOTU1MmY4ZTg2MWNiYjMxNjBiOTA1ZDI0ODQ1ZDM2OGExN2ViZjkxMWE4MzkzODRjM2IzYWE2YzhkZWRmMWZkZTEyMzg0ZWM5NTM1YWI5ZDAwODcyODk3OGNhNThhZDg4NzgwY2RjM2QyNzJkMWRjZjIwNTliOWJkYzBkMjMxMTgxMmZiMWI1NTllMzFmOGU1YTg5ZWZjYjJiMzNjNzA1NTU1ZWUwZWZiMjNkMmM0ZDMxMmZlMDJiOTk4ZWI3OGFmODVlMzgzOTk2M2FmZDk4YzFjNjQ0ZWQ0NDkzYzNmMWFmMGNiMjEwZTY2MDc0OGNhZGNmYzllZjg1ZmEzYjVmYWZlMzQ1NzU2Y2EzNGU3YjdmODhkM2FmZjg3ODNlOTJkYTAwZGJlYWQ1ZDUxZjg5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiOTYwNDFjMjExZTk3ZDQ4MGQxNDllNzVjODc2ODg2YTc4ZmVlMTcxZTBmMzk1YTk1MmEwZTg3M2FmNGRjMjJiNDZjZGI2OGE2MGRkMWQ1NzUzMDI3ZTU0NDY0M2M1NzY0Y2Q2NWUyMDJlYjgyMTgwNDMwMGVhNjE4ZThmZjk3ODVmM2JmMmZiZjFiMTA0OGNkNDQ1MDM5OWUyZjY0MmFmMzhiY2U0MWRmOGZkZTMyMDgwNTVlMzRkMzU2YjFhYTFiMDE4MDY3M2U4NTA3YWYyMDM1Zjc1ZTlmZTYyOWY5NzkiOiIiOiIiOiIiOiI1MTQ3NWZmYmEzMjk5MTc4MWIxN2UzOGVhNThiMDhiZGU0MGYwM2I2NDgyNDE4N2I5NTA2MTUzZjQxYzIzM2YzNGRiZGM1MmI2M2NmYzcxYjEyMGI0ZmU2YzI4NjZkMTFlOWFhZjQ0ZjgyZGVkZGFmOTk4Y2FhNTZhNGRkNThhNmVhMmU4ZjVlM2M0ZWM3ZmVmNzNlNTYyMGNiNmE3NzMxM2E0YmMwYjEzNWM1N2QxODA4NTAxMGE0YTAyNjA1OWMyYWJkNGI2ZDIwNDgzOTNjNTQwMDM0MTkyOGY1ZWU2YzVhMDYzZDY3OWUxODVlYjliZTI4MzRhMTAwOWQwM2QyOThiOWFiYjA5Zjk5M2E4ZWRlNTRiZGM0ZDlhOTVjMmFmNTU1MmFlZDlmYjAyY2Y1OThhMThiNWNmZTZjODExZDFjYTRlZDc2NGQwNzU2ZmRmY2I1ZDAzYWFjMWVkODBmYzg2NTk1NTM5YzEwNWRhNmI2NmEwMGE5MWNhZjQ0ZmQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI0MjNjZjZmYjQ0NjA1Y2YwM2UzMDYzYmNlYjkyYzE1NmUzOGM1YmFkZmFhYzM1NTkzMTM5ZGY0NmQzMjUyNDJjODQ5MDhiYWVmMmY4MjRiZjNlYTY2ZTc0YmI0MTI3YTBjNTY1MGMzM2Y2OGI1ZDMzNTAyYjFmNTVlMDZmZTJjMTE2OWZiMzQ2ODhhMDkyOTFkMWUxMmU1MzkwYTczZGExMjViZTRjZjE1NjkyZTNlNmFkMGFiNmZmYjIyY2YzZjc3YjAwMzMzNTE3ZWNiMjIzOWM5YjgxZTU5YTcyZDA4NyI6IiI6IiI6IiI6IjQxZjMzNWNmNzI3ZmZlYzllYmZlN2NiMzQ4ZDExY2RiNGU1ZTQ5YTlhMDQ3ZDgzNDJhNjY1NmU1ZDIzNTIxOWE1ZDgwNzE1MTY2Njk4Y2MxZjE2ZTM0Zjc0MzgxMWI4MjBlNmVhNTVjMmJkZDBkYjFiOTdlYTIyNjlmYmY2MGM3MzlmZWVkODE4MjgyZjQ0N2JmZTJiZDBiOWE3YzQ3OTE0NGYwMDE2NzAzYWZmNDUwYWJiZDg3YTUwZTVlNWFmMGQyZDk0NjkxNzU1NDI3MzdiZDExNmRlMmE3M2FjYmI3NGQ5ZjAwNzdhMjI3NzA0ZjI3MWZlMDY5NmYwNzE5MTRkY2I5YzBmMDE5MWZlZTM1ZWI2NjI0OGViMTc5OTFiNTM4NjQ5NDU3ZDVkNWY5ZDRiYjljZDgxYzMzYTE0ZDJiZWNjZTAwM2MxNDNjOWNmZTM5Y2NhYzUxMDQ4ZWYxNjlmNmEyMjE0M2VjYTcyMWQwNGY2ZTE0Nzc0OWE0NGE3NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiIwYjIzMDdjMzJmMzRkM2YzYzNkNjg4N2ZiMTdmZjY4YjAxZjE1OGVmMDc0MzhhNDFjZGUyN2QyZDY3MjUyNzdmMzNmNjA4ODhhYTMyYjliNzQwNmY3OGY0N2JkODc3YTE3OTU0OTZmNzU5ZDY5M2YzZjhiYmQ2NWNiNWIyNTYyYzRhOGQ0YTcxN2I2YmI4ZWVhYmM0ZDhmNTYxMThhOTdkMzc4N2QzMDY1ZjFlMjBlNmQ3MWExZGVlNTYzZmRiMmQ1NjU2MTEyOGZhODNkODYwMmZlMGRhM2U4OWIwMTllMSI6IiI6IjE2ODE1YmY1NDgyYWJjOTY5MTc5MTUyZjc5YWEzNGEwNGMyOGQ0ODNlNmFjODFhYWUxNGY3ZTBlMDUxYTU2NjIiOiI5MzhjMzYzZGYyNzQwYmE5Y2NkMzkxNjhmOWJiY2Q3ZDQyMTU2Njk1NWYxNDFlMTNlZDAzOWM0ZDg2MTk1MzkyIjoiOTU5NTE3ZTBiMjdkNDYxZDY3OGJhMmRkNTI4YmZiN2U4NDRmN2JmMTRhMTVmYjE3NmVmYWJiM2E1MjAwZmYyYjM3M2M3YzA2ODNmMDk1Nzk4OTUxZGM3ZmZkNjJiMTcyZWQ4MTQ5NTRjNDQwODdmYzdhNjY5NWE1YTI3NWJjOGFlY2QzYTJjYThlZDYzMWE5ZWJmNWUxZDFjNTE1NTQyYzY3ZjMxZTE2ZmQzZWJjN2UyMzMzYzdkZmZjZjM4NWYwZDZlYmUxNmI5ZWQ0Mjk5NGJlOWY4M2QwY2MxZTJiM2I1NzczY2QyOTYzNjM5YWM3NGNlNjRhMzExYWMwNzI2MDE0YmNkMjEzODE4Y2VjZjVkNTYyY2QxYzVlOTdiZTQwMjhmNjQ0MDBjZmYzMWZjZDU4N2EwMDRjZjYwZjAzYzZmMzIyMmU0ZGFiYWU1YzRiZGVmODgxOTY3MGY3N2Y5MjI3ZWFmNTVlYmE1MjM4ZjkwYzRiZWE0ZjAzNTg4YjY2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjA2MmYyYWE3YjQ4Yzk4M2MxYzZkMDBkMDZhYTUyM2E2N2Q0ZTg2ZTViZDI2NjQ1MWJiMjg2ZGNjNTg4OGYwZjQ5NDBjM2IwMjJjYzc2ZDY4ZTE3MDZkNjJmZWE4NGQwNTJhMDE5YjkyMTMzNWY2OWVkNWRjZDkwMjYzMjExNjc1OWI2OGUwOWI1MzFkZTI3NmM5MjM4ZmFmM2E5ODAyODA2NzUwNDU0YTUyNjBiZDgwOGI3OTZjYjEyMTE2MzU0YjlhN2FiOWNlMzNmOGRiZDQwYWU3ZTc0YTA3Y2ZjYTAyIjoiIjoiNGEyMTdiZjEzNmMzODk0ZmY3YTNjYTA3ZWFmYWZhMjg2ZmFmYzhhODI3MzI4YjEwNWIzYThhZmYyOGU0OWQxNCI6ImU0MzM0NjBlOTQxNGIyMWZjM2Q1ZTI3MDVjMDhhMjFhMzZhY2RlNDQ1OGUyNGI3OGRjYzUxMTk5Yjk3YzdhOWEiOiI1Yzk4MDI0N2ExZmExNmVhMDg2ZDU0MDg0MjgxYzVmZDExNDc3N2VkMjE0NzhiZWVlOWVkYjE3NWJlN2M0MDY2YjE5NzA2NWRhNWY0YzE1NzUwNzgzMDM5ZWI0YjVlMmNkNGNjZGMyYTQ1YzQ5Y2U1MzVmMDNhMzY2NTdmMjE4ZmM2MTZiM2U4ZWYwYzg0Yjc4YjBjZDFjNTc0NzcyNDJiYmRkYmJkZTA5OGJlNTczZTIwZDZkZGM3NjY0OWQ3MDZlN2Y2YzdjYTNmNDRjODQ1YzJjOWM5ZDMxNmFjOGI3Mzg5ZjcyNjRjNmY4Y2Q2YzU2Y2E1NTAzZTViMzdmNTJkMTllOGQ0N2NjODVhMDRhMDE5NmI5Mzg3NDMzYmNhM2MxOGRjMzBiNDcwMzBmZDI5NzcwNTEwMTgyNjg0MDk5MWVhZjViODU2YTVhYjc1ZDJiYmI3MGNiMTNlMGRkMTg3NjgwMmZjMmJkNzc2YTUxOGI5ZGNiOTQ4NGM0OTk2NDQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMGZjNzk1NzZiZGJhNzdhODE1MTA4YmM5Y2QyZDE2OGVlMzBmOWFiNzZkYjcwNjAwYWM5NWZjNDBjMWY2YjcyNDA2OGMxMmI5OWNiNDkyODI0N2U2NGIyZWE4ZTc1YzcyOGNjYjNkZTE4YWRmZWJlMjRlZjk5ZTE0YWQ1NGJjMWIzYTQ4Njg5MWIwMGIxYzU1MTcyZDE2YWRiMDBhZTU4YzlkOGFlMGZhOTgwOTI0NWE1NmM5MTE4MDQ4MTk5NzY3ZDM1YzAyNmU2NjY0NzczNTYyYWYwMTFjMmNhNzAyNWQiOiIiOiJiMGMyMDBiNmY4NTQ4NjQzNTI5ZmQ0MTRjNjkzMDU0ZDRmZTA0ZDhmNzZjM2ZiOGNjYzY5OTJmZmMyNWU2YjE5IjoiYjkxYmYxODhjYmFmNGIwMTM1MGQ3MjY1ODVjNmYzNjAxYTI2YjM2NTRkYjJlMjY5MGExNGYxOTg5ZjgzYWQ4NSI6IjdjNjRlNTAzZWVhNWIzZGY0NGRjMGViOTg2MTg4YzMxMmEwZjVmZTFmMTEzMjM5OTg0NjA4YTY5Y2NhZGNlOGE3YzdmMzEzNjE2OWUwNzViMGM2MTgxMmIxZTc0ZGZlNmFiMmU3ZDZmMjQ3ZjczODU5ZGE1YTEwNjhjOTJlZjhlNmFlZGQ5NGMzOTA0Yjk3M2FiODg3Y2EzYzM4ZGU3MGI4YjMxMmUzMmE3MDI3MTA4MjlkZGY5NjJmMGUwODc3OWVkOTc3MDk3NTUzNjU1N2UzZjkxMmVmMGQ1YzQ5NjkyMDJhZjUwMjUyMTE3ZWNhODE4MmMzMDM4OWM5Yjg0ZmRhOTUxMThmOGM3NDhmMGIxNzUyYzFlNThiOGUwYWY1MzAzNzZhYTM0Y2Q4NzRjZjQ5NjI4YmViYmQ3MzUzYWI0YTVmNjRiYmM4ZTM1Mzc3NjJmZDU1NTZjNjgwMjkwYjJjNTIzMTUzNDMyYTJlMGRmMTY1OGYyYTU1MDdhMzBhNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJmZmRlN2UyNzI2ZTg5Y2NlODE2YWIzZTIyNTcyZmUzMTQzNGYzMTgxZDA1NzhkNTExNjFjYzc3MzA1ZTI1NjJiNzU1MDA4YzdlNGNjYzhlYzYyODA2YmRmYmNkODUwOGFlNDE4ZmNiMGI1N2E0ZDEwMDc0NjllZTNkOTU5YTA3ZTk0OTA5NGIwYTNlNWFmNjlhZWEzYTkwYTIyMjYzMDk3OGFmOTEzOTAyN2E2NTYxNTEyMjVhMjE4M2I5MmU5ODBmZmY5YmE5ODc2ODI0YmFmY2YxOGQ2M2M5MTZmZTdhZSI6IiI6ImJkYTE3NDFiMGIzOWQ5MjQ4ZGQwNjI4NzAzMzRlMzNjZWNkZTVjNWY2M2EwN2EzMDMwZjk4YjAyMWM2ODQ5ZmEiOiIxYjUzMzZmY2JiMGVkMTgzZTBmODBjZDMxZWRlNGYzMjQ5OTdmZmI4NDJhODM5NTdmNDFkMjkxNjEyYzU1ZThhIjoiNjFkNTQyZTQ3OTRlOWJkNGFjZWZlZjRiMzI1ZDk1NGM4ZWM2YTI5MTM4NDc2YWIxYmIwMzc1MDdjZjUyYzE3ZWRiZDUxMTU3OWJlNWMyMzJhNjcyNjllZjQyMzY0Y2ZiNGUyYWFlZmIzMWQ5ZThlMjYwYTA0ZTUxZDk1YzJlZDZjNWUwZjA5NWVmZDkyZmJkMzZlZGNhZTQzOTM2NTlhZjZiYjk4YjBiNzFiMjgxZTkxZTFkZjM3YzM1Mzk4N2E2YTllMjU5ZjI3MzVmZDE2YjhjMTI3N2RmNjUxYjI2YWMzZDlmMjkyYzkyNTJiZTdmZTA5YWI3ODUxZjUxNTMyNWEwNzhjZDY5YTc1NzNhNDgxMGFiNDYwYzRjOWU3NjA0ZTU0MjQyYWI5NTZmZTQ3MWU5MGY4NjYxM2VjZTczNzJmMWFhOTM0YTUwZGJkMDQ1NzAzMzg0M2I4ODdjMjc5ZjE0YWQ2YjQ5NjBmNDAxYjdmYjc3NzI1M2NhNWUyOTVmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6Ijc5NDZmZTdhZGE0YjU0NTA5MGQ3NjQ3Yzk5ZjcxNTk0ZmEwOTQ1OTMxMTVjMjM4ODgxNDZiMjdhN2NjYmZkNzdjZTMwNWMxYWU0ZmRkYmI3NWE2NWRiYTRmMGVhMTg4OTdiYjdlOWFmZjMxMzhiYTAzMDAwNWE3ZDFjNTgwMjgzOGViYjIwODQ4ZjhlODFlN2U4MDE4Y2QwZDBkZDkyMTI0M2MwOTRhYTcxMGY2YjBiMmVhMDA0YmQ2ODQ3OTllM2NhZWQ4YzNjODk0NGQ1ZGE5OTViODhmYTA3MWQ3NTI2IjoiIjoiYjI5YTUwNmM3YmM4YjIyODI1NzAyMjMyMzA2NjQxOTMyMTZkZDQ3ZjdkMjBjY2RkMzU5NDNhODhjNThjMDUwMyI6IjNhNGMwMGNkMmYyNzhmMGU4MjQ5OGQzM2ZiNmFlOWUwMjBmNGQzNzkzZTgzMmFmYzk4NjRjMGI3YjZjZGE0M2MiOiI4YzA2NjdkOTEzYjEzODY2YzdlYWI5ODQ3MTEwOWQ5NjY5MDFmZGM2NmZhNGRmZjg5OTZjZTgxZWM1MTg1Y2UzNzRiMTE4ZGEzNGUwN2JkODI4MzNmMjBmYTRlNDRlZjE1OWY5YjBjNDdjMDQ2MzA3YTQ4NGIzZjUyODIyYTU5NmJjZmI0OWI1NTVlYzhkNDgxZmIzMGUxM2RjOTg5OGYwOTNkMzRjYmI0ZDY5NmQ3MDE2MTMxNWM0OGRlZjczYmIxYzhiNDk0N2M4ZGRhYjEwMWQ0OTE4ZjVjYzAwYjg5MGI3NDUwZTRlMTBjMTdjNDZlYTdmNWUwYTFkZjY1YTFmZTc0YWQyNTc3ZTU5MmU3YmRkZWFkYjI0NmZhNjJjZmE1YmI4NjIwMjIwYjE4ZmZmMjk2YTE5YTVhM2FlNmI4MzMzMjFjYTc3OWI3Y2I1YjU1NjU4OTMxNjEwZDhiNzc3NjA4N2M0MWVlNGQwNzc0MDA3NTM2ODFjN2RhNWM1YWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiNTQ1OTUwMGQ1YTcwOWI4OGJmMDY3YjRjMzkwODM3ZWVmNWFlMmU1ZjEwOWMxMTBhODRjZjMyZjU2MWQyNmRkYzU2N2M1ZjRjZjBmNDE4Y2JjMmE1NmQ0MzI1YjI3MjdmODc1Y2IxY2VlZDMxNjcxMzZmMGQ5Mzk0MDQxN2Y2MTZhMzg0M2I2ODZhYjRmNWRkM2Q4MDg4MDEwNTRjNTEwZmNhNWVhOGZhMDQ2NWY5ZDFhZmQ4ZTBjNjhhZmZhMTBmNWFmNjFlNTk0ZTY2YjJiZGIyMzcyY2FhMDcxMmJmZjEiOiIiOiJlYWVjN2I3NWVlMDNjZGYwNTA4YzBjYTE3MWIwMDUwNzc5NTRlMmNlYzcyMzBiMGFlZGZlMzJhMTVjYjFjODU1IjoiY2RhZmU0MDliODcxNjI1YWIxYjA2YTkzYzRkNWExZjgxOTY3NzczNzBkZjE4NjQzZjk3MDUwZDc3NTZhZGVjZCI6IjQ4NmFhNDA2M2IzODQwZjA0MTcwMzRjNjU2NzZkMjBkYTIyYzUxMGQyODFiYmY0MDc4NTVjYjU4YTg3YWM5YjMzNTExZDY5MjMxNWQ4OGQyN2JkNWQxYWQ1YzM1ZWM4Yjk5MDE4YjVjYTY0ODk3YWZmNDg1NDRhNWU1NzgxMjRkZGMwMGY3ODVkZWI2MGIwYTYwZGM0ODczZmE5YTE0OGRhNGRmYTE1NTdiYWEzYWFmYTIyNjgwYTQwZjY1MGU0OTkyZDIxZTM1ZmFiM2JlNTQ1OGRhZTEzZWIyY2FlZGRkODcwNGQ2NjJiMjIxYmRhMDFhYzYzMjllMmM0NTFlODY1YWY5NzAxYTdjY2I2OWMwZWQwYmFlYjIyNmU2ZmJkMmI4NzFiOTk0MjA5NDk1NzBiZjVmYzYxYzY3M2FhY2I1OGZlYWJkYjMwNGY4NzA5MzlkNzA1NDI2YWFlNTVjYjNhMmYzMjA2YzMzYWJkNDUzZTA3N2M0NTY1YzYwM2ExOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI3ZTc0YjBhNTQxM2VlMmFkOGRlODE0ZWExZjU1NmNhNWM1NGM2ZjExMTU5ZjFmYmM3OGZhYTg2YTc0YzQ4NzFhMTE2NThlOTE3ZmVkMzQ4ZTc3OWFhZTUxMGQzODMyOTBiYzZjNGYxMzM5MTcwOWY4YWE5YmQ3OWYzOGYzMTBlMmZmYmU3ZmIxYmUzZTZlM2FhYzlkODc5ZjFlNWZiM2ViMWZlODE2NzVjYmRkMDk4Y2QyODdmNjZmYjliMjhkNTBlMTJhNjRiOWUwOGYyOGE0MGVkNDQ2ZmMzYTEyNTg1YyI6IiI6ImQxNTJiMGFhMTk0NmNmMTc3YWFmYzdkNDczMjJmOGM3NTY4MzE1NTBlYzc5YWRiNDBmMzQ2ODFmZDZiMzg0MGYiOiIxNTIyMjkzODhjYWY1ZGM1MDQ1NGMyNTE0ZDlmZjFhNGI3MGUzZDFkOWI4YjI5YTIyOGQ1OWNlNjdlOGJjNTg2IjoiYTFlMjA0NjcyOWU4NDk0ODJiZDY5M2UyMTc3OWUxODM3MGE1NDJlMmZjN2JhZWRiZWQwNTQ0NzZmMzU0NDdlMDY5YmZkYTMzZmEyNzIzYWQ0MjU3MTdjMDI3ZThiMzBkNTdkZDJmY2E4Y2YyNjg4NDkzNTgzNTQ0NzhjZDhiYjQyZThmOWE3MzdjMmUzZDU0OTA5OTFlNDkwMmE1MmU4NmQxYmFmYzE3NTFmNTkwOGEzNmFmY2EyYjZiNDY2M2NjYzlmMWFhNDZlODU3ZTJlZTYxZTRkYzE5ZDE1NDAyOWRhNDhkNTk1MTlkZGU2NDQxMGIxZDdkYWViNWI3YjkzMjEzY2JhMWJiMDU5NjM3MDIzZjkyOGYxNmU1OTQ0ZTBlZDJjYTA3YmUzNjc0ZmVkNmUwZGE3MjMxM2IzY2I4MGI3YTJkNjUzM2ZjODc4NTU4NzM2NmNhMWI2NzY5ZGI4MDNkNmQ4NDBjNWQxYjZjNDU4OTI3MmEzZmU5MzcxYjBmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjcwYjVjYWI2MzM5MWM1Nzc3ZTRlNjA1MTZiNzA5NWRlYTNjZjI2ZDcyYjI3YzE5ZjVhMDhkZTY2MzQzMDZkOTkyZGU0YzNmNzBiZjI4NDlhNGMzZGJlYWZiMTYzZjVkNTBkY2JiY2M4ZTZmNGJkOTczNjM2ZGE5NWQ3MWQzOWQ2ZmZjOWU2NzMzMjA4OGJmOTA2OTIxYjljNDhhN2UzZGUxNTg3NDBhOWMwZjI5YTdiNjlkNTU0NWUzOTAwMzA5NjVlMzA1YWMxNjUzOTU4MzYwZDAxNjA3YmNiYzM5ZmI5IjoiIjoiYWIwNDJkMjNhY2NmOWE5NDczYjQzZTgyNjgzZTMwZjQzNmZhNDkyYmE0YTg5MTFlNGVkMjYyMmQ0ODFlMGNkMSI6ImI3MDdlMmQ1YTUwMjBkMzc2NTYwMDk3MTNiYjEwMGM1NTgxOWE5OGUyMjBmYmRmZDkyMWM2YzA3MjRiYTcyMzgiOiJmM2Y4MmI3YWEwNjM5YmNhYmVjZWZjN2IwN2IzZWVjYzk5NjI4ODQyNTBmYWQxMWI5MzUxMjI2ZjEzOGUwNmUzZTk1M2UwNTI3OTJkMDEyNzYxOGEyOGFhYWExYmY1Mzc0YTA2MzkzYzE4YTMyNmY4ZDM0NzEwMTBmOTg0MGRkMTZlYzk5N2Y1M2ZiOTgxYWEyYjY4OWJmMWNkYmYyNjViNGFiNjk4ZjllOGU5YzA1NDI1NTE0N2UwNDY1NGI4ZmIxZDBmZDNhMGI2NGQzODgwZWU2ZTlmYTg3ZTAxODRmNmJhMzA3ZjRkM2ZlYTY1MTU1NmUwYmFlZWI3NWYzMDhmYTMyOTI1ZjhjNTVhZTBmMzU1ZjhkYjg0OTVlYzZjNDYwMDM3NjNhZDRlZjM2NTkwZWM0MDIzOWI1ZTg1MzBhYWRhYWM5MzFmZWVmYzhlMzkyYzU1MGFkNGQ4OWY1YjMxNGE1M2EwNjMzYzdhOTNiYzA1YjU4ODI3M2U2ZDFkNTYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiYzE3OTE0ZGQ2YjczZDY1ZTVhZjExMjUzNmY1MmIwNDZkNDk2M2Y5YzkwOThjNzdkOWRmZTM1Y2E3ZWU2MzY2ZDRjMGZlZDU3NmJhNGNkMTRjYWEzZDBjNDA2ZmZmYWQyZjA3NDgzNjIxNjY5NzVmNWJjYjlhMzk1ZDU2OGI4ZGJkZTMzODNjNTY1NGJkMjRmMjY4OTBiMjFlZTFmMWNiMTBmM2M5M2NmMmRmNjRjZDc2NDE4N2M4NDA1OTBhNTRiYWJjOWMyODFkZTg4YWQxYTFkYmMyNjc3ZmE4Njg3ZjkiOiIiOiI0YTYxZWU5MzQ5ZDUzZjhiM2MxYWYzNmZlMGE5MzAzZWY4OTcwNWZkODdlMDZlNWYzNGI2MWUxMzUwMTExMjc5IjoiYTlhZDFjYWQ0Y2E3YTVhZjRiZmI4MzY4MGQ0YjkxNGMyM2E2Y2Q1NTFlOGIwMDJjNTBmMzBiZTBkODY5M2VkZiI6IjlhYjMwZTM3MjlkZDhiMmFmOTg3ZGNiNzkzZDdhM2UxZmM0ZWJjZmUwYTRhYzk3NmQ5MWJkMzg5Nzc3N2VmZmIyMTBjODA3NmU5ZmQxMzU5OTFlNTRhYmI0YmI4YzdiMTgzYTgwZWYzNzA3NzY5MmU1MTlkMzhkZjRhMDQzMDRmZDgzZmUxZDY3ZDMyMTQ3ZmUwYTI0OWE2YzhiYzYwM2Q5OTg3ODAzOWI4NzM1ODhjMzc4MWExOTM0MzdmMDk4MDk0ZmQ4YzEyOTQ1ZWY5OTAzNjQ0MmM4MGNkMWY1NDQ3MjUwNDBkZjk4MGM1NDhmMGE2NzVhZmFmNjJhMWI3YzIyNWM5Y2RmMDcwM2U2MTNjN2E1ZDcyYzhiMDBkOGJhMTk5YjhlY2I0OGI2ZTBiMGQxMDNhM2IwZjU3ZmYxYTRiOTE4OWEyMGRlZGVhYzZlYjI2YjFmNjZlYTBjMzRkZGRlZDEwYWYyYjAxMzNmNGI1Yjk1YWMyMjM5ZGQ5NDkxOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiIyYWE1NDIzMjcwZDA4NTlhNmUzYWEzMDY5YTg4ZjNhYzRjMzBlZGE3ZjZlNTJhYTg5MWU0Zjk5NTI0NGE4MGQ3M2Q3M2Y3ODk1NjFiMDBjZWRkZjcyMWVhNTlhN2VkYTMxNTcwOTBlYzE5MmM1NzhmYzUzZDIzMmMzNjQ1M2M1ZThiYzNjOWMyMmYzYWVkYjZhOTNmN2FhNjM5NzVkOWJkMzM2OWNkNTE4ZTU3MGY2YWYwYWIxNjJlNGM5MzhkMTdkY2Q0ZjNhZTQ2ZDdjZDUwMmVmNzNiMmQ0MGY1MGUyYSI6IiI6IjMyY2FlM2ZmNzU3Yjc5ZjIzMDVhOGI1ZjVmZmY1YTc3YWZiNTgxZmFmNWEzNzk2YzVlZDcwNTRkN2MwNDgwMTciOiI2MzJlYjZmMWM4MjdjZjI5OWYzNDAzYmY4MGFmNzIxZmU1ZmY4MjQ1MzMxZjFjY2ZiYjhmNGU2MWVmNWVkYWRmIjoiMWE4NWMzNjEzMWE4YzI3MWQ2YzgwNTIzMzA5OGJiMjlmOTEwNGU2MjU0ZTA2ODBjNmUyNjRhNzZmNzllYzE3YzdhYzY1YzhhOTc2MTBhMGE3ZTUzMDRiMzdkMWViZGJlMDJjZjlkYWE5ZTQ1YjgxZDc1ZDhjNjEzYWZiOTc0ZWIzOGRjNDkwNDFlYWZhNzQ2MmI0YzI3MmZkZDNkN2ZkNGIwNWIxZTYxNDIzMDVmZmQ2ZmE2MzRkZGRlOTBlMjczYjUxYjAyYzBiNjhiODIzYzc3ZGRmM2U5M2EyYWI5NDM2ZDBmNDgwMWYwOGExMTNlZWZlZWZlZmI5NTkyNjgzOTgxNDIzZjgzMjM1ZjhlNTYzZWNkYjRlNDRkYWE5YWZhNWUxNzI4MjA0ZGRlMWJkMjU0Yzc5ODVlNmQ1Njg5N2M1NzBiMGM2MzA3ZmQ0OWFlNGRjZTE4ZWE1NWVhZTg0NmFmMmE1YWNhYWUxN2E3MWY4MzY5YjY0ZjQ3YjBlNTRkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJjNjljNjE2ODlkMWY3NzYzZDQzYjIyYjZiYzIyNjJjMzc3YzYyZGI2MDgzNTExNDQ0MmZkNWJkNjVjNjY1NzA1YjU1NjNiM2I2ZTllNzkzZDBmNDEyODY5NmVlZmM1YWM2MDNiM2VkYjM1YjcwNWFlMzk4NDVjZWZkZjhmZGUyM2Y1NDc5YWU0ZjAzMzQ0MmFhOTU4ZTk3OWM4OWJjNDFkZGU2OGQ5MmYwNWIyOGMzNjQ0MTMzZDE5Nzg4NjI0YmM5NzAwMTlhMTBmNmIzYzZjNWI4ZGQyMmIwY2VlM2UyNiI6IiI6IjE1Y2Q2OTg0ZmFiNmFlN2RiNzJhNGMwOTlhMDY0Y2RmYmQxNDFkY2UzNjFmYWIwMDIxODcyYzkxYjFiYjY1ZmYiOiI4NmMyOTVmY2M3ZjljMmVjOWZhZDM3N2UwZTRkMDExOTMzNDA4MGY1OWZhNjhjMjFjMTlkN2ExMjEyZGNlMDNiIjoiOTdiOTcxZWMxM2RiMDQ5Y2NkNzJiYzU5N2ViYzJlMzNmZTRkYTY0N2QwZjc0ODU1ZjI0Mjg4NGQzNWRjZjkyZDAzNDlmZGIzNTI3Yzg3YzU0MzFjMTBmYTg1NTY5Mjg1MDk2ZDMzNjliZDE5MTdjOGM3Yzg2NTAwMjRhY2I4OGU1YjE3YzQyYjUwYTc1NDE5ZTI5NzU3YTllMWFlMDkwNTNjZjBiNTFkYWM0Mzc4ODNjZjNmNWIxYWJiNDBhNzFmNDBkMjc5YmM5ZDU5NmQwZjU5ZjRjNzBmODEwODdiNDQ0NmM0MDIyNzlmNDQ4NjE5OGVlMzI5NGQwYTVmNzJlYmE3YmE1MmNkNTUyOTA2MzcxYWVlZWRiNDcxMjJiZmZiMGQ1ZWQyN2MzY2JiODZhNmZjMmQ4M2FiNGRiN2I2ZTFlZTQ2N2RkMWVjMjBkYzE1YmNlZTE2OGYyZTIwMDE3OTcxNGNmYzA0ZWFjNjUxYTQ5NWE3MThlMWVkOTg1YmZiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI0ZGNjNzQyN2RmZjQ2YjdkYjdlMmQzMjczZTA2MDVjZTg1YzQ2MGNmZDQyNjlmY2U5Y2EzYjEwMzk5Yjk5ZTE3OGIxMmYyODc4NmI5ZTNkZjQ1N2FjMDAxNTAwNDg0NGQ2ZjZiZWYyOWVhNTYyODU2ZWU4MjI0NmQyNDk4MjM5M2Y3NzBkMGI2NWQwZmZjNjYwZDlkODM1OWYxMDkwNGZkOGNiYjc2ZTY0OGRmNjBlYzQzMjM3ZmY3ZGM0NmJjMzQ5MjBiYmE2MzdhMmMxNjQzYTUzZThhODhiYjdiYjk3YiI6IiI6IjRjMGFiNjdiOTUyMTg2ZjJmODVhMGRiZDRiMmMxYjBkZDAwOWRkNzk0MjYwZWU3ZjMyMWIyZDJiM2Q5OTRlMDkiOiJmNWJlNjYwMDliNzlmNTFmNmFhMGNkMWE1YTI0YTcyYzZhNmM0MjYzMjYzY2JjZjgwZThlMGQ1MTRhMmJiYjFlIjoiMjExY2E1N2EzMjFjYWUyYzZkMWFkNzU1YWM5MjRjOTJkZDA5YmIxYzYzMzRlY2M1NDNiYTc4YTE4NjA4NDc5NDU3YmViZGE2M2Y3MDdmYzI4MTkwYjJkNTZlNGNmZDk2ZDhjNDlmZDE0NmFjZTg2NzIzNmM1Nzc2MWVhMjgzMjZlM2QyNDFkMWRjMzVkN2NhOTcxZGY5ZDI5MmYyNTYzZDMzYzVmMzJhYmU4NjM2N2NmNWYyZjA2NjI4Mzc2NzUyYjM1M2Y3MmI1MDFmZmE5NGE1MGYxNDZiODE3NGNiNzk0NmFiOGM4YmUzODIyMzczMzRmMzc1OTQ0MTg4NTBhMjMzYzUzNmQ3Mjc2M2YxMGIwNmY3MjhlM2U2MGQzYjRmMDM3N2Q1MWIwZGUxMWQxMTBhMjhiNmZjYjdjNDJiNzdlNWY2Yjc3MWM4ZTVkNzEzYTBmNmM0ZDgyYWIyMzExY2FkZjE2YjdjYjQ0MWE0MTdiMmY1OTVmMzJlYTgyMmVhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJiNzJmMzRiZjgyMDlhMjgxNjhhZTc2OTJlNGM3ZDZmMTlmZWFiOTM0Njk3MWI4NWZiOWYzNzdmNmU0YTc3ZGZiMzcwYTEwYWRkYWU3NDRhYzAzZjJmMjc3Yzg1NDIzOTQ1ZjQ4NjgzMGNkNDEwZjI2ZTIyYzIzYTEzNmQ0MTgwMDg1MDExMzMzOTI0MmUxYTA1NTBiZWY4MWEyMzlhMjg5YThkMDIwYzE0Mjk4ODU0ZjBiMTdhYmIwYmM0NjFlZDZkMzlhYjJkOWNmYjAzYjgzNTkxNmMyYThlOTM3MTBhMCI6IiI6ImU5MTlkOTgzYmVhZTRiNjg3YmIzOTNkOTBhZDQxMDQxNDZlODY1NjQ4NDU4MDBlY2Y4MjA4NWQ1YjI2OWYxZGMiOiJhYmM4YjUxOWRiMDVjMWRlODc5NDI0OGM1NzQxNjI3Y2MwMGVlMzVhOTcyZWNkZWMwNDVhMGNjNTU3YTJkOTY3IjoiOTc3NzUwNDQ3M2FkYWRhZGUxNGVlZmMwMjc5ZjgzNDdiYjE3OGEzNmRiYjVmYjAyOGYwMzE1YjQzMDlmYWQ0ZWY1NTRiZjM0YjA0MTQ2YmE0YmMyNjBhODljZjc4MTk1YWQxYzIzYzZlNDczYTE0Mzg1YzY2YmEyYTFjMDA1Y2RmZTMzNjk5OTI0NWYwMGZmZWFhNDFkZmEzZDllNjgyOTRlNWQ2NzZmMDFmMjEzYzZkMmQ4YTY5YjQzZTM2ZjJhNTY4OTk5YzBhOGMwN2U5NmQ3ZGFmOTBmM2UyZTY2OGViOWZjOGU1YzgxMmE0OWEzOTUwN2QxOTNlYjdjOTViOTQ3YWFmZTY1OGExMDY1ZWZlOTM3MGNmODEwMTRlNGZmZDU0ZWZmZmU1Zjg2M2U2ZTRiN2Q4NzU1NjU2MTdkOGI3Mjg1NGVjZjA5MjYzYzU1ZDFjM2YxYTRmNDg2MjIxNGZhZmU3ZjAzZGE1NTcyMDk1YTdiZWZjZmQ4ZTZlZTYzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiIzNWQ1YTZjYWU1YWVmZGJjNjJmMWVmYjYzOGMxNWRkYTM4N2E4ZjY1MTgxMGJmMDY4YThkOTI2MDFmZDM3ZTBlZmZmZDk1MTk2YzA5YzY2OGRkYjA1ZWVmM2RlMzM5MjIyYTBiZDBkM2I3MjFhMjdlMmYyOWJlODRhODQ2YzM5NjRlYjlhODRjZjY5YjIxNGY2MTJkZjNiNDE0NzI5ZGY0OTlkYTRkM2FkOGJmMzYxM2JkYWQzYTcwYzczY2FlODA1NTZjMTZmOGFiODNhZGYwZjJiYzkzOTEwOTRiZmQ5OCI6IiI6ImNkNjAzODEyYTg0NDQ5MjU5OTNmMmMxYTA2OTFiYjQ0NTlmYWVkZDg3MmY0Mzg1MmY5OTcwNjc1ZjU3OWExZWIiOiIxNDQxYjZkNDg3NmIwNTBmYTRkOTY5ZjE4NDVkM2YxMTljZjVkODcyMGMzNWRhOWM0ODkwMDBlNmI3MTY1ZGI0IjoiMjU5ODI4ZDA1YjhlNzM1ZmFkNjk1MjdjZDIzMjJmOTRlOGU3YWMyNzkxNjA3Y2NmMmE3NGQwNzBiZjdkNTU3NGZmZDhkNmU0NDdjYjRlMDJiYjE1YTg3YWE4OGQ4ZjE2NjdlZGMwOTA1NDU1YjExNmVmN2YwOGNlNzI3ZDhmMjY2OTY1MjQyZTAwNDI4MTBmOTQ2ZTUyYWNjYTYzNDhkNzBlMDEyZDk5ODMyMmExOGEyZjNiNGM0YzZkNmI2NmNmZTY1Mzg1MzEyMzQ0ZTNlZWQxNGM2ZTcyNzdlYWM5YTRkMDlkZGM1ZGNmOGZjY2U2Zjc5YTIzZDM0YzgwY2I3OGFhYWYxMzQ3ZWNjZThjMTNlZmQ0NTBkNTk1MDY1MTNlNjJmNTI3MTc5Yjk1YjliNWQ5ZGY4MjFjMzI1MzhmOGUxY2NiMTdlOTExODI2ZTk0NGVjNDQ5NDNhZDhlNzI2ZDU0ZmE5OGViYzRkMDEyZDM0YTIzNzcxYmE0OTdjYTJlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI2NmFiZjE3ZDkwN2ExMzQyMzJmYWFmZjkzYmZlMzYxMjIzYjViNzczOTgwY2MyNjFmZDE5Y2FhY2EwMjJmZDBhMDgxYzExZWZlZTAxZmIxZjdhYmQwMTQ1YjMyYTUxYjMyMzdkNmFjZTg3N2NhNjM5MmJjYWUyZmQyYWE1Yjg2NWFhYmZiMWQxZDFkYTMzZjQyMzE5YTA4OGM4ZGJlZDExMjRhNzFkMzllNjI3ZDVlZmFhMWU4ZjNlNWY3MDExNGJiMDNiNzFjZTU0ZTRmOGQzNGU4MzgxMDZiMjQ2N2NjYSI6IiI6IjFlNTFmMmI2NzUzOGY4NDQ0MDkxMmM2ZmEyMGZiZjAwOTEwMGZjMzAwOGI1YjhlMTMwOGQ5NWU3Y2E1M2I0NjAiOiIzMDFmOTFjNjU5ZjczYjYxOGNiNDZhNDM0Mzc3MmYxZWVlOWZiNDk0OWVjNjMyODEwOTgyMzc0OWJkOGIwYjExIjoiMzRjNTMyMDgyOTI2ZTZkNTMwYjNhNTgyODJlYjQ2NjZhYzczNzRlOGJlZmFhNDk5OWRmYzlmNDA5ZTQwZmY5NjY2NTIyOTVkMjk0MGRiOTcwNjE4MDA1ODNiYzdkNDdiMDUzNTUzYWQyOWM4OWVlNjE4MDNjMTA4OWQzMDU5MjI3MGQyOTI3MDMxMzUzNTkyZDRhYTcxZjU5YTRiZjNmMjE0N2NiNDA2MzIyMzY3NTQ0YzM4ZmE1YTNjOGNjYjUzNGJkODg0MzU1YjA2MTQ1ZGI2MjE2MTI2MDE2MjA5MWM3OTU4NzRhMmU5OWUwMTI5MmEyZTM5ZTEwNzczODgxOGEyMTE3NTBmODU4ZWRiZTBjMmVhNDczNGFkMTRmMWM0NWJjYzlmNzMzZjAyNzYxNjkyNjU1ODU4N2Y3MzMyYmU1NTA0NGRmZDZmY2RiNjI4ZmY3ZDdkNTgxODIwYTIxN2JjNjRhYTA5MmU0NTA3MjI2ODZlMGNiMjkxZWNhNDViIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjM3ZGMyMWM3MmRjN2M4MmQ1ZTEzYzUxZWNhZjVhOGFlMDY0MDI1MDBkOTJjYWY5NmMwNTU1YTk1MDY5ZjRmMDE0NGE5NjFlYWQ1ZDZkOWJjMzE3YWZjODIwNjIwMmJkZGQ1N2ZjMDJhMmE1MDBkZjFmYjVjNGQ5ZDg4MzdiNTJhNTIyMGZkZjA2OGZlMmI4YjRiY2M2M2ZiYzliZmM5NGM4ZTIxZDk4N2U4YjZjYjBmNGNkMzdiMTQ0YzY2OGYxOGI3YTM2ZWQ0ZTk3NThlZTdiOTYwMjlhYTBhYjIxOTZhIjoiNDFlM2I4OTM0N2JkMDM1YmRlNTEwYWI4ZmY4M2Q1ZmRjYzlkNWYyZGU2NDhiZGI0NjhhNzE0ZjJjMTA4M2M1MiI6IiI6IiI6ImE5MjllZTIzYzU4MzJlNWFiOTNjY2FhNDBiZjc3NTU5M2Q3ZDA0YTFhODQxMWRmYTA3YjRjOGEyZGEyZGM5MWIxYmNiOWMyN2EwYmE1YTcxNTJjZTVkZWQ1Zjc2Y2Y2YjgzYzA0YzBmOGE0ZjZiNDMzODNhZTNlN2Q0OTcyODBjMGY5NDRiZTkxYjBiY2E2YTU2ZGYyZDAwNjQxYmZjMWVjNTQ5YjUzODg5OGU1NTk0MDdiMDc2MTY0Mjc4YzBlYjdhZmI2ZDZmNDQ5NWE1MGQ0ZGExNzhjMDRiMjU5ZDIxYmI3NDU2OTJkM2JkMTg2ZWRmNWJiM2RhNmY2NmI0NDE4ZmMzZDliMDg1YjBhNmMxYTVlNTQ2OTYyNzJjMzA1YzRiODg4NzU5NWIzOTFkZDZlZDhkYTAzZGM5ZmRiMjcyOGQ4YzQwYTJkZWZkOGFmMDVlZjFjNDQzYTcyMzIzZjJlMGIwZDI2ODEwOWZiN2U3ZWU3MDE5MmZhMDZiYzZjMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiIwZGNiZWI2NjBjZmY3MDNlMDU5OTEzZWViZmY0ZjYzOWEyNGI2MTFhMDc4YmFlOGYwMTMyMGVhNGFmNWU4ZTBlZDkzYjhkYzRlODRkMjI0MDM2YjVkYTY0NWMxNDczNTljNjEyM2M1NGNjMjM2NzI2MmE3NTk0YmM5YTdkYzY5Zjc2NTQ5YWI4MDNhZjY2ZGU4ZjI1M2QzMzhkNDhhYjgyN2IyYjE5MThkNjM2ZDZlYzkyYmZkOTEyM2YxZjVmYjU5YjZjMzdlYWRjYTBjYTc3OTJlMmI3OTMyZTFkZGMzMyI6IjFkZWJlZWQ5YmE1NzkwNDM3YTZjNTZkZDNjOWUyZjZkZjA5MTJhYTBjZTJlNTdmYThlZWM5NjUyZTJlY2NmYzEiOiIiOiIiOiI1YmQ4MTViM2MzYmI3M2E0NWRiYTcyYzY4NDU3Y2NjMTcyMTJhZjkwNTYwN2Q4MjdlOGI1ZGRiZmZhMzRhMDU4ZWMzNjBhYmJlYjZjOGJhMTZjNzcwYWU0ODI2MTM1YWM3ZTRmYWYyMDhkYThiNWZlM2IyNmMxNmZhN2M3ZWY0MDAwYzNkZmUxYjhiNzA3ZGRlNjRiNDE1YzY3MWM0NjE1ZDU2ZTI2NDg5MDhlMDQ3YWM5NzhhMzg5ZTM0NmNlYmU5MjI4ZGFhN2JjZGY1ZTM0MWY3MmMzYzdmZjc0NjcyZWRkNjBjN2M2MzQxNzI2NDUwZmZiZjllM2U3YTE2NTgwZTdlNjAyZjlkZGQzZjM1NTYxMjkwNTJkZTA1OTkxOTA3ZDgxYTg3NDY3ZmY1ODQyYzZlNWRjZmY0NTQzZTI0ZWU0ODE0OWYxNmU5MTA3YTlhYTQwY2JjZTM2N2Q0Yjc2MDQyZDc3ZWYxNzkwYjBhNzcwMWIyZjA0ODczZDI0NWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiZDliZDk5MTI4ZmUyNzcxOTE4YWZjNmRiNmIyNTE0ZWVhMGI2MTdkOWJkNDU5OWEyMzhkOWQ5OWE3Y2UxODk5NWU4ZDg1NTQyZjNmOWRkODk5MjBiMGY3OWI5NGQ3ZjU1MWZlZjRhMzMwZTlkZTI0ZWIxOTdiYzc1Njc3YmMxM2Q4MzYxMTA0OTk3YWY5OWVhMmM2ZGEwM2Y0ZTcxYzg5ZTAzMTkxYmM1ZTMyMGYwNTdhZmVlOThlOThmYWNiOTlkMTUxNDJjNjFkZGQ3MTY2NmNkYzM4MTQ2ZmJjM2VhNGQiOiJlYjcwMWE5ZDExOWNjNmRjMGQ3MzUyNTQwNjdkZmUxNjFiMTA1MmJhM2Y5M2FiMGQ2YmNjMTljYzAzODcwMjdhIjoiIjoiIjoiNjdiODYyMTNhODQ3NzhhOWEzOGViOTkxM2I5ZGI4NTA4YjUzYWMwYTgxZmY4NWRjNzhjOTY2ZDYzODI1NWY4ZjdjNjNjZTA2ZDRhNjZmNWQ5MjEzZWMyYjMyZjdlNjNjZTVkY2YwMWI1OWQzYjMwNDMzZjBjZjRjMDZjMTcxZDgzOTk1M2RlOTEzMDkzZWM4NDU2NzBiMzhlY2FjZDgxMTYyZGQ3MzUwMWIyZTRjMmQ5ZGM2OWI5N2Q0OWJkNmQ5ZjYyNTAwNzBlZjZiMzYwMzA1ZmNjNWZmMzkyZDFhZGFkOThkNmJmZGE2N2QxMGI3MjVjN2NjOGVmNmI0ZmMyMDZmZGUxODcxNzEyYjk2ZGNiYzJkZjRmMDhkNzlmMWFkZjdmYmIwMWJmZDhmMjBlNzY5NTZlZDRiOWRkMWQ3ZTVmYjRmOTIyYWQyYTUyOWJkODcxNDkwZTc0MTg0M2Q4MzllODc2YzRiNDc1ZTJmYTE0MGYyOGFjOGQzNDdhMDdiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjBkZTNmZWQzYjM2M2QyMGVjNTAxOGQ0YWVhZmIyNWM4ZTBlNmFhNDJlZThiNTY4NDMwNDNmOGQ5YzQwYjliZGM4ZWQ0MjdkMjljNDY5ZDg5NzZhNWI3ODVkMDUwZjNkMmU1ZWIyODdhMDY0YzU0MzExYmFiMzJkY2Q1ZjI0MDY4MmJhYmVmNTljNmZmYTYwMjY2OWYzY2U0NTkwYjA1NGUyNTUwNDQ0ZjI0OWI1NjY2NmI3YjJmYmVjMjliMzNkMWIyOWVlNjUzZTM4OGY5ZmI1NGIwMDYzNWZmNTI2ZGQ5IjoiODJiNmE0NGIwZjM1Zjk0NmZhMGZkNDYyODczOGU2MWEwYmRkNDIxYThkZTczZjNkMmVmYTI1MjE2Yzc4OTA4MCI6IiI6IiI6IjFmN2I5NTFkMTQ3ZGRiZjIxZmVmOWQ0ODQ5MDQ0YzQ0Yjc1NzMwOWRhOGYwMjQ0ZjcxZTRkODMwMWUxZmQ1MGM1ZTQ2NDA3ZjViY2JlZDgzZWFlZmRmODk4M2MzMzBkZDBhNjc1NjhlODY2YjIwYjQ4YzJiYzk3ZGM2M2E3YzBkM2ViNjBmMjQ4OGIxZWVmZGZhYTdiOGRkNDMxMzI1MTFiNGEyY2E4MGJjOWU4Mjg1MTU4NGVjNGFlNDYzNDQ0YWFkZDNjOGU2ZGIyZDQ0NjlhZDk3NTBlMThhMzEzMzc2MTM5NzViM2ZhMDYyOWI5YTIyYmNjYjIzNWQyMDE1N2E0NDI3YWNkNjE5MzI0ZTg4MWU2OGY1NjE1YzY1ZTU5YTU2NmE3M2U0Y2U5ZDQ4NGZjNWIwYjI5MTM3YzRmMzM5YmU4NDc4MWNhZDY3ZDE3ZGUwMzA5OWIxZDAzYWM0NTEwNmMxZjJlYjViMzgwZWM4NDM5MmI3YmE1YzkxZGY0YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJhYmRjMmFjMjRiYTdkOTJlZDlmNTE4ZDk1NzY1MTA5NjlmOGQyMjA3NGJlZDliNzYzOTI5OWQyMTM3NTMyYzUwZmFhNDliNWU4NDNmNDE3NjkzYTJlZWJkMGZmZDNmMjdjMGFkMmQ4YmJmZGI5MTJlZDRkMWVjODUxNjVkNGFlNTc3YTkyYjFhZmZhYjYzMDcwZTI1ZGNhOGJiMWIwMzVjOGJiYzVkM2EwN2I0ZmUwOTQ2OTBlNGE0NWI5OWY5ZTViYjZiMGJmZTgyM2YzYzJhMTQ4NzMyZmQ0M2RiNWU1ZCI6IjhjN2IxOGNlMzg5NjY0ZmI3MmU3NzdlNzBiNTMzY2VkNGMwNGIwYzI5MGZkZDQ1Yjg2YjZiOTU3MDhkNzQxODciOiIiOiIiOiJjM2QxNDIwMDU1ZjcxYTQzMjY0YWI4ZGE5MjgyOWZhMWI4OTM3MzQ2Mzc1MzQ5ZDJlMjU2NzA1ZDkzM2EyMTM1MmRkYjRlZWNlYjM2Y2RlYWIzOGNhZTU4ZGE4MWJjYmU2ZGVhZmVjYTVkN2YwMThhMDUxNGJiYzI4NWY0MzZiNTc0ZmZhYzI1NDdkMjZhM2Y5YWVmMjFiNjZjMWU3MGI0NWQzNzJlNGRjMjI4MTE4MmFlOTQ2NjdlNDQyZjM5ZTFiOWIyZmMyYWVlMDZhYjMwNjA5NWE5MDQ2MTQ2MTNiNTEzY2YxYWY1YTlkZjEyYjk5NmNiZTg4Y2MzYjI1NDAxNzkwMDM0YWQwNjIyZGY0M2FmNGNkYmY5Y2I2ODE1MzhjNzkxODlhODI2MGNmOWMzNTM3ODk1NWYyZWE4NTlmYWE3ODc3Mzg1NDg4M2NkOTRiZGU0YzBmNTBkNGM5OThjMjc4ZTQ3Nzg3ZTNmNzRmM2RiYjk4ZjcxMDM2NmQzMTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiZDIwMzUzZTE3NWY0ZWJkMGVmNWZlNzdmN2Y2ZmJmNTM0MGJhMDc5MzQ4MjhkZDI5NmMwNDFhNjNkZTg0MTAwMmRiMGQyMWVjYmZkNWVkYTJiY2U4MGJlZDZmNzNjMjNkM2YxODkwMGJjYzAyNzkxYmE5Y2FlNjY4ZmMzM2ZjNjBiYTg0YzZlYjQwYWZiYmZmZjE4YmU1YzQ5NjBjZTU3YWQ2N2RmYzhjMWVhYmU2MWEyOTk4ODFjMGYzMjZmNzA5M2MxYTIzMmM4MDQ2Nzc3MmU3MDdkYmU3NWI1NTU4ZDQiOiJmMzhmMjM0NjFjNDcxMTgxYTQxNzkzMjNhZWQyNDcyOTlkZjExY2UxNDVmYmFiOTgzNGI4NWIzY2I0MmExMGY1IjoiIjoiIjoiNzZhNDk5NGVkYmEzZDBkOWZmZWU5Y2NiN2UxMmE3NWU3OWM1ZWMxMjEzZjQ1Y2E0YzUwYWQ2MjlhYzUzM2U1ZTZkYmY1OGY4ZmFjMTkzNzU1ZTc0ZjllN2E3NWVlZGY4OTQ3MmU5MWQzOTRlMzJlYWVkODZlZmE0ZmIyZjllN2ZlNGJlYzFkOWM3YTMwZmU5YmQxN2MyY2RhNzNkMTM2ZTc1MmE5YjgxOGNlZTZmMTI2MjAyODAzMWJjMDljYjgxYjg5MTU2MTM4YjU3MWYwM2FmYTY5ZGQzODhhODA3YThjYmU5YzRkZTY2Y2FkNzY0MTE0ZjlhNGE2NDE5ZWE3MGNjYmJiZmY5ZGQ3NzRhZWE4YTJkNmIxZDIwZDBhNTc3YzU5OTUzNjYxZjBhODdiNGQ3OTVjMjYyNmEwMjVkNzMzZjQzYmI1Y2QxZGYzN2Y1Y2Y1NDJjN2M4YjZiZGEwNjFjZjQ2OTNlMDM4NDA2MGU2MzA5MDQxNWQ3NDcwY2IwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImE1OGNhNTE1NDY1OWJhNThmYzFiNDY4YzkwOWM2NjdlMWI1MDg3ODg0YzAxYWIxNWY4NmZiNWE0MzFlOTgyYzFjMDQxYmUwYWEwMTRmYjMxMDAxOWZmZjY1ZjQwZmYxM2Q0NDY5YjEyMzIyM2FlNDRmNGY0YWMwZmI2ODc3YTc4OTBmOTY5ZDM5MDQ3ZTM5YWIyMzg4MmNkNzgzOGUxNmU2NGJjMzYxZmUxODEzNjQ3MWRlYTJlNzFhODZlZjJkOWY4ZjdlMWQyNDY0M2Q3ZGYyOTI0MDlmZjhjYmEwZjEzIjoiZGMwNTk4MGU0MGYwN2EwMmZkYjE1MGFmNTgwYTdkMTk1YmEyNmY0ZmE3MmExZmU1MTNjY2MyY2Y2ZTRmNjk5ZiI6IiI6IiI6IjZhZDQ1NDNjMjE4Y2I2YWFmZTY1ZTZhNTBjNGY5ZWU5ZDVjN2EzYjlhMDExMmJjZTI2MmY0OWY1YjBkMjBkYWI3MjI1ZmQwYWNmZmEyNTE2NTcyOWQ4ZmJiYTAzOGViNjVmN2U3MmYxMzZlNWJiODJlOGQ5NDY5OGRkOWI3NjNjMzhmMzA0MWNjZWNlM2IwNDE4OWFhYWJlZDc5ZTRkNDIxM2UyNDIxOGM1ZmNjZjVmOWEwYzM5MDI4NzU1NjQ0MzFmNGQ2NzBlNmU2MGUxZGJhYmNjNDY0MmMzZWY4OTVjMTE1ZTI4NzAyOTI3Y2I5OGQ1MDlmOTM0MWFjN2FlMmM2ZWY2YzJkYzQ1MzdlOTA5YzgxYTk4MDQwNTdiNmUyNGZhNjNlYzVlZGNlODM1ZTYyNDk2OWE5NjllMmM0N2M2ZGNiN2U5YmNiMmJiOGYzNDRkMmI5ODU1YTQzZTI2YzA2MDY0NjY4ODdiMjhiNjdmZmQ3Zjk5ZDM3NDgxMmQxMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI5ZDZlOTlhMTFkNjNjYWI1YWFiYjE0NjJhYmVmNjZiZWYzMWEyODg2Y2QxNzI2NTFiYmYzMGY2NWIxNmZiOGYzYjkzYjUwNDJhOTA4NTEwZDg1MTgzMzA1MzhhMDYyNTM5NTlkYTU1N2QyYjM5MGM2ZmUwYjdhYzZiMTg1OTFlNTc5MWQyNzVjN2UzZDU1ODY5MDcxOWQ1OTY3ZDAyNmE4MDYwNGEzODk5NDZlMmE1NTQ4NmI1YzQ5YzI5ODQ5OTBhMmUxNDgyNGFhMjkyMmU2YTU5ODkyYzVlNmQ5NjlmYiI6ImFmNjMxZTc5OTAzOTQ4ODliODRkODUxOTIwY2U4ODc3OTM0ZTcwNmI3ODA5MDhhMDcyMTFkNDViMjQ3NTg0YTYiOiIiOiIiOiI5ZjMzYmE5MDgzYzdmNDA4OGM5NTA1NjIyY2Q1YjQ5MzdiNzE4OWIwY2JjZGNmMzUyYzU0ZWY3MjA1NzU5NGI4NTY4Y2Q0YjEzYTRiZmViNjEyNjFkMjdmNWZlYmJmMmNiYmY5MDJhOGQ1NWY2YmRmNjY5MjM4YWU4NGI4YWJjNTg4MjY4NDFmN2Y2MmEwYzViZDlmNzQxMjVjZWNiZjhlM2I0YzFlYzg4NjYzMTE0ZTdjMjQ4YzQxY2NlOTJlNzNiMDVlYjNmODI2MTAwYzFiMjY4M2NiYmE5ODVkMmFiNjk0YjVkZTFlZDg2MjQ2Mjg5MTdlYzliYjk3NzMzZjMzNzI5OGMwNDU5ZjE5OGM3YTEzOGYxNjcwZGZhYzBkNThmMjg3YjgyNDRmMDYwNWY5NzQwNmVmNTI4MDk5YWEyZWYyOTBkYjIwMmJhYTdmYjIyMWE4NTIzMzQ0YWQ4MzZjOWEyYmIyNWUxZmYzZmI0ZGMyMGY2OWViYzlmMGZkZDkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiZGY3YzU3NTE5YWUzOTE0Yzc1MTc0YjMxMDdiN2RkYWI5NWRmOTM2YzVjZDdjMjk2YjFjYjFlYTA2MjQ5OTE1Y2RhMjJiYWMxOWNjZjJkNTIyMTM3OTg5ZDVhNDI1NDk4MDkyNzdiYTE1NWQwNGIzMzUzNTIwZjRiNWMyZjE4MTIwYmI0Yjg0NDIxMzBkYjU4ZTlkNDZhMWE0MWY1NjI3YzQwYTZiNjVhNGY5MDc1NDYwYjcwNTMyMDJhNmU1YjEyYjllMDdhZTZlZTliNDk0NWQ0MjM1ZDBiNzM2ZTg4ZjIiOiIxMGExOThiMDU4MzBjZmYyZmI0ZjViMDMxN2MyNTgxMjkzOTZlZGI5NDM3NjkyOTI3NTMwOTViNThiYzhmZWNlIjoiIjoiIjoiMTdiOWZjNjQxOWMxNzUzNGVlMTZhYWNmMzI1NTBjYmY1OGVhMWYwNzNiOGU3MmZiOWFlNmU5NDA5NGU3OTdmMjE2NzAzZGE0MjgzOTRhMWRhODIzNmY3MjViMTkxY2JlYzExNTMxYTFmODc5NDZjNzBmYjE0NDBhNTViZTdkN2QxOGM5YjUwODVkNjI2ZGQwY2Q5YjNiZDYzYTkwMTRlNWQxNGVlZjYzNmJlYjY5NGRmYTdmNzgxZTgzZjNjMWI0ZmU1NTE5YWIxYTUwNWQxYmU1YjgxMjUxNGYzYTM5ODE0NjAxZGIxMDRhZmU1NzI2MDg2ZjZiYWNiNjFjMDBhYjgyMTAyMzliMjg5MTkzOGU5N2ZjNTNkZTA2OWYxOGE2NDY5OTk5NzI3YTkwNDQwM2JjNTNjNmM3M2M3YjNhNWY5ZjM3ZjM4MDU2M2YxMjgxY2RhYTFiNGJiNGE2MzZmODQ5NzE3YzMwNzg0ODc0ODE3MmFlMDE5MTk5N2FiZGE4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjJlNDAzYzMwN2EwM2Q3NjZiNjEwMDE4NDJmODVjYWY5MWE1ZWVjOTdhNDk5MzQ1NDdiMmNlNjM0MTE5MTY0OTVmM2UxMDJkMzMzMjY5ZTA0MzgxYmJmMTQwYTI4YTJkNjFmYTZhNWYyMjg2MDc5NjE5ZjRmNGZhZmViNWM1MjBjNjAyZDBhYzMxOTBmZDUwMGEzNDAyZTdjMDY0N2FjNzZjOTAxZTdjNThlMDEyY2Q2YjllODNkMmE5NjlmMGQwYWU0ZTA4ZWQ1Y2I2MDFmYzcyNTk2YTcyYjQ4NTRmMjQ2IjoiZmYxZDllZWQ4Y2Y1OWY1NzA4ZTQxOTI0Y2YxM2ZkNWQzMGNjYjdkZWRjZTMwNjJkZmJiMmM0YmI0ZDM2YjY1YiI6IiI6IiI6ImU1ZTIwZjJjYjA2M2MxNTg3NTgzYTM4MTUzNmFlY2JmMGIwY2I0NDAwYzk5YTc0YmJiNmFhMTVmMzM4YjNlNjcxODczMTY4NjVjZjkwZTY5MWQ5OTQ2NmUzNGJkNjYxMjk4NTU3NTEyMmM2Yzc5ODQ4ZDRlMmYyNjgwMWQ5OGU0OWMwMDJmNDA2MzAxOTM5NGY0YjNlZWU5MDhmMmQ2YjU2NzQ5YzI2MGU1NmVjZTRlMDQzMTY1MGE4YmQ5NzM1ODc5ZWU2YzliZmFhNWQ0NGMwN2U3ZmY2OTc4ODgzYzM2NTk3YzMxMTI2Mzg2ZGFmYmJlMDM1NTc5ODE5MDY4YmIwNjAzNDg2MjlmNzQ0MjBiZDQxMWYyZGM4NThkNDZkZmYwYmI0Zjc5OTQ2YWY5NjA0NmRhMmMyY2IzMmUwYWFkZWQ0ZWIxZWJjODc0OGYyNzczMTdmOWZmYjlhYWRhYzFiZjVlNjY1NGFlNzEzMWQ1ZWUwYzc2NWZmM2Q0OWQ5ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiNGIxMjQwY2VkYjg0ZWUzZjM5NTMxN2UxNzdlZmNmMDNiMGZiNTdiZTFlMDFlM2MyMDYxNzA4NzdhMDZlYzJjYzA3N2U5NzUxYjRlZWM5NjRhNDQyMmQwMTBlZjE0ODc0NTZmYzE2YjNlNmU3Y2NiOGEwNjIzMDE0NDUzNTI3NDIxNWYwMGFmZTE3NWQzOTRjYjA0NTE4YjYzMGJhNzI1NWFkYTBjNjY3Njg4NTgwMWE4ZjUwM2M1NWMzODg1MGRlNmY3OTA0YjQwY2YwM2ZhMTk1Y2QxNmVhMjk5OTM0N2MiOiI5MDQzZWYzYzc3NWYzMmRjZTE5MDJiOWVmZGM0ODFmNjFmMjkyMjBlY2E1M2JiOTA0MTU1ZjJhYWNjM2IzNzA2IjoiIjoiIjoiNGZhY2QyZmZmMTgyOGI5ZjRhNjNmNjM5NTAzY2Y2NTMzYTRkMjQyZjMxNmVmNzE2OGZiYTQ0YjUyYjg3NjA1NmJiMGZkMDQwZDVlMzMxZDI3NDYxNjljZGM4OGNjZWY3NGRjZjZjNjQyYzFkMWEwZGI0MTMwZjhiZTlmZjg4NTU1ZGU0YzJhN2E1ODI0ZjAwNWNjY2RmYTYwNzRkZjMzODU2NzJlY2E1N2E0NTY3OWQ2OWRmZWMyMzJjYzhiMWJjYTg3ZjZmOWM2Y2FjMmY2MzA0OThkNTI0NDlhNWQxYjMyOGE2ZDJhYzFhOTA1NGEwNjU4YmU1ODliYzI3N2I3NzUwYWI1ZDY0N2E3M2ExNWEwNTlkNzI2MDhmOWQyOTlkMTFmOWZiNDE3YTM3ZGRjMWI1MmM4Yjg4NTljMjk0OWU1ZWJhZTY1MGI5Y2Y4YjRmZDc3MTI4OGU1ODJkZWUzODE3OGIxNTRlNjgxZWFmNzRkNGQzZjM1ZGFmMDBhMzA5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJjMjAyN2Q4YzA4NGUyYzZmYzVkNTM1NzI2MzEyYmM2MzYyMzcyODcyY2QzN2JmMDdjYzFjMzg3MGYzYjU5YTk3MGM2MmI4NGExMGQxNDk4YjJlMDIwMjdkODU0ZmQ4NGRkNjE1ZTI5ZTdjMjA0NTc5OTY4NTY5Mzg2YjZmMDgzOTMzMjJjNGZiMzZkYTQzOThlYzQ4ODFjYTljMTc5MDViN2IyZmEyODcyMmM5OGQ0MDRlOTNmYmFhZGIxNjU0MTFkNDEyNTZhMGRmYzgwNmExOWRmMGY1MjY1NzFjODBmMCI6IjhjNWM5MzU4M2RiYmEwMTY1MzFhZWNjMWRhN2IwMTBiOTU1OTc4NWIyZThjZjY2MGNlMTcwMjJmOGQ4NmJlNzgiOiIiOiIiOiI1NDA3NGNmMTg0MDQwZjU3NzE2ZTllZWY4MGVkMGUwMDZjZDAyOWI5OWNhNTY4ZmQ3NjM5YzRjMWIwZjc0MzE5MzM1MTY4MzBmNWY4N2IxNTdmZGJiYjJhZjdhYjU3ZjZmYWEyNjMyM2YwOTZjOGU4NjEzNmU0OWQ4MzM2NjVhNmNiM2EyMmY3ZDVkMzgyOTBjMmU5YTIzYzYyZGVhNmM1MWI5NTg0NjBiMjYzNTY2YzVjMGU0YmU5YWRjYjFjMTIzYjU1ODc5ZjQwNWYxMWIzYzM0YzI0ODUyZDMzYzY0ZDY1NjNlZTQ2Y2FkMTRjZTA4ZDU5MTlkZGJmZmRmYWFkMGJlZjhkOGVkOTk3NGYxZDk1OTE3ZTJiMTA4ZDk1MTliMTNjNGY2OTI5NDI5ZDJkYzQ0ZWNhY2U3Nzk5ODM5ZmZjYWUwMzU5MDRiNTc2ZTcxZTkyYjBhODlmMzllM2IzNDQ0Yjc1ZWUwNzA1NDE5YzNiMzUzM2M3OTM2MDVlYjYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjAyZWY2NDBiOWYwODdmYTQ4NDU3OTE4ZDdiZDZlOTEwZDczNzliZGQ4OWUxNTQ5MTE4ZWM2Nzg4MGRjM2M0YmUzYWQ5NTM5N2I4ZmM4OGJmY2VkNWFhNzY5NDE3MTZiZjRjMjY2OTZlOTU0MGQ3NTljOGM2Yjg2MDNkNWM0MGRmMjY3MDU2Yzc5YmQ4YTM0OTdiNzcwNTJlNDk4OTUzNDkzZWI4NTNiNTZjNDFmMzI4NmMwOWYxZWM4ODYzN2Y5NWExY2I3ZTZlMGVmZDNhY2I4YThmYTRkZTYzZDEwNzI3IjoiMzhlNjY0YjkzMGZiMDcyMTEyZTZkNDdiZmM1NTM4YjBkNDg2NzJhMTI3NjlmM2ViODYwMjQzYmJjMWM1ZGI3NSI6IiI6IiI6ImMzOTllOGMzOWFiMTc0ZmE4Y2FiYjdlNzM4NDVkOGQ0MzRkY2ViYzIxMDYyZWRjNjlkMDI5MjhiMGRlNDQ3MTUxNzQ5NjM2NWJiZDU5MDYyYTQzNDA4MjE1ZjViMGYzNTk3MWY0YzQ4MDc3NjIzODYwMjA2ZTBlNmFmOGRlNzUxZTZmZTQ1ZWI2NjQ4YTY2ZThhYzVlNjAzMDQzYzUzNjViZTMwMTVhZjg1OGZhMjcwOWM2YzdiMWNkMjI3MDFkYmJmNGVmMjdmYTQ1ZTZkN2Y5ZGY0ZThhNTU4NTE3YTM4ZTI2YmRkODI5NjBkYjlhOTJhMGRlZWU5ODY1N2FiNTE0OTEzZjEzNGNiOTM2Mjc1NmE3OGFlNGFmZWQzYTZjODllODYzNDFhOGZiMjBiNWNkZmNkNTY5MzMzNjNmODNlOGM1NWM2OWFkYmY4ZThkNzE5OWJjNGY5M2I3MmFlMWM0ZDA5MzliNTY0ZDk4ZTdmMDUyYzY2ZTFlMDk4OGNhNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMmYyODBmZmUzMzA2NzY0ODM5ODk5ZmFhODkyMTMxMzlhNDA0NjIwMzlmNGQ5YzU1ZmVhZWY2NzI4YzI0Y2M2MzY4MTkzNTdmNmVhNjViYWRjOGU0OTNiOTlkNWFmMWQ5OTVkMTRkODFlMzk4MDI3MTE5NzdkMGExYzU3ODNiZmUzYzI5MGJjNDY5YmI5YWY1MjBiMGZhYTA2ZjIzMGZlNmM0YmEzODA0ZTM5ZTMyMjZmMDczMWYwOTU3OWUxMDVkNzI2YjA4OWQxYzM3YzcyZTNmYWViMzM3NjhkM2YyMGUiOiJlM2Q5OTg2MGU4YjFlOTI5N2M2MGIxNzkwNGJlODUyNWJlODMxZDcxZGJkM2Y0NTRmMDg1ZDE3NThlYmU3MTYwIjoiIjoiIjoiNDU0MDBlYzcwMGE0Y2Y4MzA5ZmJlYTk0YWE0ZmNiZGQyMmM4NTllMGY3ZGVmYTc0NjA4NWEyZjRkZGI5ZGIxNmVmYmIwYzJmZmY3OThjOTlmZjRlOWUxMTk4NmY0YzMzMGYzNjU4ZTM0YTE0NmY4ZDkwNzE0NjcyMjhlM2IwZWE0ODZjZmJjODFkYTNlNzM5YTMwMWZlNTFiNjIwZDdkMjdmZTlkYTBlNGI4NzVlZmUzYzJiZDBmZGUzMWY2MDgwMTVhZDcxY2FjOWM5NWJjZTMzZTUxNmM2MmZjNDVhOWZjODVhNzhjMTQyNDE2ZDdmYmZmM2E4MzYwMmRjY2UzYWRkNjMwMWNhNmI5YmU1NjVlM2NmMDZhZDZmMjI4NTVkNTdkOWMxODRlZDcyMTRhZGMxYmIwMTRhMWI2ZGFmYjg2OTg5MjgzZmEzYTRiZTEwYzQxMDQ0MmQ3NjFjOThkMmQzZjk0YmIwZDk3YmExZDVjODk2NmViNDdiMGZlNmVjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI4ZjNkZGM0MjMwZjgzMjBiZDE4Y2YwNzhjMDRjNjJlMjQ4ZmNjMzI2OTgwMzAxMTc0NjE3YTllNTQzNTFjNjY3YmE0YzMxYTRjMGU3ZGJkNzMzNmMyN2MwYjhhMDM0ZjZmZDk0N2IwYTIxZTU4MGU2YzJkYmZiZDQ0ZDAxZjVmYjRhNTFkY2QyMTk5ZGY5ZjE4MDNmMjRjNWU3NzRmMDQ4ODE1MzAyZTAxNmFhZDMzMjU0ZDMwOGM1NDU3ZjM2ODk2NWMxNWI2MjA0ZTE5MWMyYTI1MmU0ZmU4OGRmYjk3OCI6IjliZmU5YmMwNTViMzIxNTU2MGNkMjg1NTUzMzcyYzQ3Y2NhNDIyZmNhNTc0YzBkMjJkN2NlNWYyZGQ0MGIwODQiOiIiOiIiOiIzNGY1NTAyMzFkMzFjMWIzYTNkYjMzMWQzNDFhZGEzYjk4NzEyMGQ5NGU0MzE4MzFlZWE2N2U4ZDIwOGY5Y2YxODAwNTQ5ZDQ0NWZjN2JlZmJkY2MyNDg4Y2M3ZjQzNDA1NjBkNTc0ZmNkMjM5NmU5ZWNjOWEyMzJmMTAxNWNmYjI2ZGI0NTE2MjNmZTQ3ZWM4YmFjZWUxNzU2NTczZTc0ZTUxOWFkYzYyYjIzY2U4NmZjMTkxZWE1ZTEzZGE5YzdhMTQ0OTY0MjZjNmM1M2RmYTdjN2NjZGI2N2Q2MTY0ZGJlODhjYmJlN2Y0OGQ0OTcxOTkzMDAzYWIyNGYzZWZmMThiZDUyYzI2NjE5OTJlOGY4ZGE5M2JmZGQyOGYwMWZjMzJlZGI0MzlhZDEzMDM1MjQ2MzA4NDA0MWU5ODcxYzQzMWJhMjZjNjc2ZWNkNzgxMjk5MTgzMzExM2NiYmU2ODc2NTFlOTNhZWIyMmE2YTQ0Y2ZmYzdhM2ZiMjE0YjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI4YjI4NWNlNmI0ZGE3MGM4M2ZkNzJhYWIxYjRiZTYyMTAxYmY5YjI5ZTE2ODcyNmVhMmY2NzBhYWIwZGVhZWZjNWRhMzQwNGM0OTRjNjAxOWVhMzM2NzllMzdjZWMzMDhkYWIxM2UwY2IwNjBmNjZjMWM4M2ZjNmZiYTQ2NDc3ZDFhM2M4MDJlZGQ3NTk0ZGIwYjI5N2RlZGI5Y2NiYzgwMGM4MTdmMDU2NThmYjliNGM5OTkzOGFlMjE0MDE2MGM0YTE2ZDU0ODYzNGEzNTNiYzI4NWNiMzhkMGU5MzI0MyI6IjcyM2MwZjI4N2RiNGFmMjg1YzE5NWNlYmIxMTA0YTEwNmYyMmU4YjI0M2ZkY2QwNTY2MjI4YWI1ZjIyN2E5ZTMiOiI4ODFhMTg3NGM4MDBkYjA2OGI1OTEzZDE5NTA1OGQwNzI2NDU4ZGUzNzgyZmY1MzBhZjFhNzYxZjk2Mjg1NDdmIjoiMGMyN2NmMjcxYmQ3OTMxZDE4N2VjNmY1NjAzODUxOTY3NDQ2OGZhMmU3ZTZmOTk0OTA0YzlmMWFmYTM0NjkzOSI6IjUxZTA0MmRkNTZhMTkzOTA4YzkwMThjMjVmMWMxYThiNWUyNzM0YjA1NWMzYjdmZGU2YThiYTllYzJiOTU5MzQ5ZGYyOTI5NWFiYjBhMjRiNDcxNWY5OGQzMWRlMGEzNjllNjI2MmMyYjJjZDQ5YzU0NjJiN2FlMjg0ZTkyMWY1YWQyZWMwMTNlZGMxNjExMzQzYzIyODY4M2Y0MTcwZjM0YTc1ODU0YjFiNjU2ZDIyNmUyOTQxNzJkNDg4YzEwYTQxNWYwOWRlZTcwOTg0YjljNDllOGQzNjg2MzE5MjMwMWQxNzYyMTQ1ZTBkOWU5NGU5OWJkMzBjZTg0OTA0MzhlZDA1MGY0MThjZjRiYTBiMDdmZTkwYTgyZDFjY2YzODU3OGQ5OWVkZjA1MThjNGE3NThhMTk5ZGI0ZDM1MzNjNGRiYzU1YjFkYTE5ODQwYjhmMzY1YTU3NGFhMDE2NDc4MTkwMzJkYzBhZDY0MTM4OGMyMDkzZWJkNGFiNWQ5OSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjViNWM2NzBkM2UwZTk3YTIxY2ZkNWJjM2QwMzhmMGMzZDI1NzhjZjMxNDdmNTU0NWU1MTE4YTA0YzRlYWM3MjdiNTA3MzQ5MzllMmZkMGFiYTcwNDkzMmNjYWFjNDJhZjMxNjUyNWUzZmM1ZjFkZDIyNDEzMWQ2NWY4ZDQ0ZmY4NDIwODkxYzBhZjdjNzhmOWNmNzY2MDk3ZmJmMGY4YmZkZDEzMWRiMTgwMTI3NWMyODA4MWU2MDYzYzBjNGQ2MjQyZjk2ZTQwZmM1MTM2MDgyODlmMzc4YmM0ZjE4NTE4IjoiNGNiMGU1OTBhMWQ1NzViNmEyZGY5Y2IwMjQzODk1MjYzYzg5NGE5OTBiNjc5ODQyNGJlYTllZjE5OTc2MWQwOCI6ImZlYWJjZWNmMDY0ODY2NWIwOGE3YzY5MGFkZDZmZjc1NzQ0ZGUzOTE2ZDU1NzMxNDVjMzU1MTc4MDg2MDViZWIiOiJmZTgxY2Y4OTc4Nzk4MzExZWU2ZDFjNWQ2MTQ1YjM4MzJkOWFkMWExMjY2ZmRhYzBmNGZhMjMwYzYzMWU5YmEwIjoiNjJhYTVlOWI4YTA3YmVkMmE1ZDNlZWYwYzczYmJjODQxYmI4Y2JmNTQ0ZDMyYTI4ODk4MDZiYTUwMWM2NzY4YWNhOThjMTliODNmZDRmYjJjYWJmMTIwYzA1NzE2YjllYWM5Yjc3ZDU2MWZmZGQ2OTY4MjMwOGY4MGZjZjFjNzg0MDlmM2IyMTc0OWJmNzFhYmRiMjA5NjYwNzE2YTM5YzI1NjJlOGFlMWIzNDc4ODI4YmYzNWVjOWQzZjk3MTJkOTVmNDlhMzZiOWVhZGRhZjFiMjQ5ZjAyM2MzNmQwOWZmMWI2ZjNkZjZkMTBlNGUzMzY3NjNlZGVmOTUwMTgyN2Q1MTcxYzUwN2VlYzQwNWJhZTUyZDU2ZmQ2MmY5MGY1YzU4YTJmMWE3MzEwNTMwZGYxNWNhNmI3ODQxYTI4NzFhMzdjYWU1ODNlNmIzODg5NzhjMTE4Yjk2MDA4NDBmNTU0MGFmNTI5YmNlMGEyNGRhOGY5MDZmNjAxZmMyNzBmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiNjRjZjQ3ZTUyZjc1OGRmODAyYzJiMzdhNDg0MWM3M2EzMjI4NzM4ZDE0YjQzOWE3ZDAyYjEzZmEzMDI0NzE1Yzc0NDcyMWU0OWYyNWEwZTczZTgyMWY2OTc4NmZlMmQ5MWVjMWNjZTFkMWNiZjJkY2JlNWJkZDIzNzFjMGE1ZGYwNTA4NDFiNmYwN2IxYTJjMGQwNjRiYzVlMDZlY2YyZmY5OTA0OTI4ZmViZTBiZmFmMzYyNmRmNWJmYjc5ZmVlMTQ3NGNjOGRmYzNhZTI2ODU3MGRmMjgxMWJjM2JhM2IiOiJjM2YwYjA0NzFkNTI3M2Y0MGU3NGNjZDcxNzEyMDcxZmE0MTFiNzJiMGY1YTk4YzllZWE5YTVmN2YxNzY5NjdlIjoiNGRmOTAwMzliYmI1NGQ4NzUzYjE5Y2NiNjI1MGZmY2ViNzI3OWMwNWY2ZDY5YjVjNDc4MDFjNmZkZWIxZGRmOCI6IjE4MWQxMmJiMTI2ZWE4NDBiYmY5ZTZmZjVlNjhmOGVmNTNmNjkwNzFkMjIzYmZmNTkzYTYzZTRlMGM2NWVlMWIiOiI4Y2VjNDkwZWJlMGI0ODM3ZjA0MDY2M2RlMjllMmM2ZGM4MDFkNzk1M2NiMjQxNmQyNDVlZjY2MTczZTVkN2JhYWZiYjc3ZmQyYzVjZTY5YjRiODk5NWJmZTUxZjVmMzNjZmZmZDllOWIxMjg0ZmI4NjU3YmI3YTNjMjZmNWFhYzUwMGNjN2QzNzM3ZmM4MTQxOGM5NGQzZGIxYTYzZjQ5MjJjYTQ5ODAzYzA0ZmRiYzk0ODhlMjFkOWM0YmMzODFjNDhiZDlmN2U1Y2QxZWQ2YzZmYTllODg5ZTQ2M2RmYzNhMzEzODEyMjQ1YTY2YmUyMjAyNjY3MDdhNTM1OGUyNTgwN2NjYjExZjI0NzgwZTVlZjgyYzg0YTg4MDNmNzJkYmQyMWY1NWQ5NjM2MmQ3Y2Q4YWJiZmQ5ZDIxZjRlM2RmYWMzMzMyNmE0ZTUzODQ3NjUwOGFmZDg3ZTAzMGQ5MjMyOGE5MWM5MWZmYjE2YjA1NDc0MGRjM2QwYTIxMzAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI2OTBhOGJlOTA0Yzc1ZTQxMzQyYzhlMjU0OGFiZGUyZTQ2NTYxMmE2MzI3MTAxNzljY2I5YzFkYWI3NmM0NjE1YmRhZWRhMTU4Nzc3MjYzOGE2MTc0NzczOGI5NmNmYzk0ODc5MzI1ZDJjZjFjYzAyNjlkODc3ZWFiOGFhMjMzYmE4ZDdmMWZmNDRlOTExOGExMjhiY2Q4Y2M2ODdlZWY1ODk0MDM0M2QyN2JhMWQ4MDBhZWQ5ZTJlOTExYThjODNiODQ2MGY5ZDcyYzdiOTI4NTJjYzE3OGQzZDBiYWY2YSI6IjVkZDAzMWZiMmRmNTZjNTEwYjNjYzNjMDJmZGNmNmNmM2ZmYTRhODgxZTc0NzVhODYzMTA3M2IzZWQ1ZTNjNjIiOiJhMGE4NjEyMzhiMmI5ZWEwMzU4MmViNDcwM2JjMzM5MjFiNTM3NmMyNzAwNDcxMGQ0MTZmZjkyMWQ2ZTZmYzYwIjoiM2NlZjY2Zjc1YWE2ODJhZDU0MzBiZGYwZjAxZGQxZjJjMzQ5MmZjYWNjNmY4MGFiMzUxY2ZhY2MxYzZiNmNlMCI6IjkyYjMzN2EzMzY0MDU5YWNmY2FlZjc4OWFjMWFlMDljOWVkMDVmZGY2OWY1ZDVkYTdhMWM5YjY5NjJkM2EzYzcxYTQwNDFkYzIzNGY3YmU1OGZkYmI3MjhmOGY1ZmIxMDQwNDU1OGYyMWQ5YjRjODE4ZmNhZGY1ZDZiYWM4YmNiMDQ0ZTViMmZiZDI2ZWUwODM5OGRjODkwNGMyNzFlOGQzZDE4NGJiZjYxZjc3YzYyZmQzYzhmMWNjMWVlMmY4YzQ2MjBjNTEzZjNhYmY1ZTMxMmI0MzFlODYwOGIyOWNkZjUyOGQ4OTJmZjAzYmMwYTljYmQyMDJiOWRhMWQwNTJhZTJiYzJkZDg3MjMxOThhMWIzMDE3YWRlMjgwM2MzZGM4NzMzYWMzM2RkYmRjZWY3YTk5NDhkNjRmNzJkYTA3MTZiMzJkYzZlZWEyMjRiZDQ5YTczNDlhMWMzMmU4ZTMyNWFjMTFlNWZhZDgzNTNjZjg1ZDllYjRiNzJiMTk1NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjBlYmE3YjA2MzA5ZjBkYzRlMmJmYWJlYTU3ZTFkMDFhNWEzZTcxMTM5ODMyMDkyNTY0NzAwOGFiZjE5Y2FlMTk0ZWZiZmY5Mzk2OGMwYTdkMWM3NjIzZWUxZTM5ODdjZDk1YzNkYmQxYjJiYTk0ZDBiMmQ0MTZmZTJmMmY2ZmFlYWI0NjY0NmEzNzhlOTMxYmI1ZGFhYzA0OTMzMzEyOWNlN2UyMGU1MzExN2EwZjY4YmFmNGM4NmEzZWU1ZTc4N2IwMmI1M2IxZTAxNDA0MzBlNzdjYTg2ZjI0MmQ3ZjkwIjoiNjlhZGM2OWUwM2NkMTEzYzM0YWU2Yjg5YzdjMmZjZmJlOTg3ZTQyNmRhODY1ZjdjOGUwNTJkYTRiYWRlMzQzYSI6IjcyOTQ4OWNjN2JhNGYzZjk2Zjc3ZmYzNjVmZDUzODBjZDgzY2M3YjE3YjE1MGQzMjdjNWI3NjMyZjFjYjA0NjAiOiI1OTg5MmZjZjk5Y2U3MTk4MTk3NzQ1MzllZDRmMTBlZGI3Y2QzNWNkNjY5NjkxMzdhODhlYmU2MzM2ZGE5MGY5IjoiNTY1ZTNlMzkyYTlmMzY0ZGYwYjU3NWQ5NDQ0YWFjMjYyZjU4Y2UxMjMxMmQ1YWM5ODMyYWU2MzUxYjZhYWUwMzk4ZTBiZWRkMzA3NGY1N2JkNGU5ZjBlODlhNTBkNjI3ZWNmZTExZmU5YWVhMDlmY2U1NjNlYjM0ZWZkMjc2MTBhMzI1NWY4MWY5NTNiYjNmMjIyYjE1YzAxOWI5ZDgxMjE1MGY3YTFmMTkxMjY5OTRjNTA1ZDljZTVjOTQ4ODgyYTFmNmM1Y2RiYzcwNTA0NjFjY2RiYmI3YWFlNTk3ZGFiNTNhMTJlYTZiZmFhNGQ0NzEwMTg4ZDY5MGZiMGEwYTM0ZGY3ZmI2YmJhOTQ5ZmQ2YTg1NjVmZGVkOGU0ODMyZmY3ZjZiMDhhNjUzYTcyYjhiODg3ODJiOGQ3N2MxZjIxN2U4NDg3MTYzZmRiZGRjYzg4YTgzZDhiZGFkNDc5Y2E3NWZkYmNhZjAyMjUwZGIzOTUyODQ1Njk0MjExOWYxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiOWRlYTVmMjcxMTkzYWVmNjFiZDcyYzc2YTU4MWQ2NWVhZGM4MDAyYjI1OGE0ZDU0OGM3YWQxY2I1ODdhNWY2ODFlOTcwOWVhYjVlMTQ2ODMzYjAxYTc5YTM0YzM1MmFhNjQyYTdhMzc2NTk1MzQ3YzAyMDNhOGEwNDU2YWY0ZTk4NTlhZWE2MmM4ODcxNjZiMzQ4M2UwYzdhY2RkNWI5OWExYjFhNDY2ZGMwNzA5Y2M2YmExMzNhYmUyOWVjZjNmMzE1MGQ2NjRkMDRiYWVmODg1NGZkODZhNWQ4Y2FiMTkiOiI4OTVlNTAzOWVlYjNlYTFkMTk3NjE0YTY4M2M4NGQ3NzgwYWM4NzI0MTkyYmQ2YzM1ZmU4MTEzN2JjMjNlNGJkIjoiOWU4NjY5YTY3YmY4MGM2OTU4ODlhN2U4NzVhOWFkMTk1NGI5MWU0YmRkZDA4NDgzMTNiNGVmYjRiMDBiMTRmYyI6IjJlOTNhOGI5NmFlMTk2NmUyYTA1MmRiMGQ1YzJkNWI3NmNkN2NkMjM0OTRiYjExNzBhMzNhOWRkZjM5YjIxY2UiOiI3MWEwZWE4Yjk4ODRlOTc5ZjRlZDU0NmNlZTM2ODhlYmMzOTliNDFiZTM4NTc4ZjE1Yjk5ZDk2MjFkZTBkYTNlNjcxMTgyZjZkYTYxMjMzNGVkYjhkM2E2ZDVlMzRjMjg3MmUyNzc5NDI4NTQzNTA1MjZjM2UwMDA4MzRiYmUxOGNkNWYyZjMzNmJjZmFiYjQyYzRhYWViMTliOGNlZmEzZjcwNjZhODk1OTM5NjBmYWJiYTI0NDgxMmQxNWM1ZmE3YTcyODEwNjdjNzg5NzQ1MTI3ZWUyYjYzYjE0MjM3MTM2YzU0ODY0YmY4NmFiN2MzNzc0MTRhNzkzM2I4MjlmYzMwNTJlOGMyNmM2OTg0NTlhODNiMTk5MGMwOTMzMDUzNzJhYTYwOGM5NjdiZmRhNzE5ZTk4YzRjMTc3NzY0YjcyZDE4NDU4NmY3YjYzYThlNzVmNzhjOWU1ZTFkYzA0NWMzZWI1YjMwYzcxNDdjNjkxMDBjMmNmOTEwZDRmM2EiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiIyYjRjODVhYWM1MjhmNWNmNDRlOTAxODc5NWExZThmODEwMjIwY2UzMThhYTE3NGJlZDlkYjM3MjYwMmMwMGY2OGFjMzM2MjU3MzlmMjk5MjQxZDFhODM4MTM3MjUzN2JhYzM5MjQxMWExZDY4NDlhYTY2MTBhMTc3NzQzYWZkZjQ1Y2M1MjQ4MzhmYWRmMWI1ZmVhYWE5OTgzY2E3OWE0NTA4YjVlNGEyNzU1MTRlZjRjMDRjMjMzYzNkYmJjYTMyYTAwZDBhMTYyODMyM2I5MWRhY2JlNDk5YzFiYTkyOCI6Ijc5OWE0YjNjOWY2MmMyZjZhYTllOTE2MDRlNzQyZGQwNmZmOWY3N2IxNWQzNzk5Njg0ZTFkZmNmMDI5ZDgwN2IiOiIxZDE1ZjU5Y2IzZTEwMmQ1ZmY0N2FkNGMwYWFlMTM2MzFlYzRkMzAwZGU0MjQ3MTM3YWVjNWI0M2U1YWE0Zjc5IjoiZjQzODAxODUxOTQ2Zjk3MjA4OTA5ZjFhZDBmNzlkNjU3N2VlZGE3MDA2Nzg4NmIyNzBmNTVkNjI2ZDk2NmZiZSI6ImYwNWU1MDE5MjUyOGJhMTE4NWNiOTY0MzI0MTQxYzFkMTk1ZjZlMjZjNDIxNjQwNTJhN2I3MjQ0Nzk3YzMwODRkNDhiYzVlNmUxYTI3ZTY0NTYyY2YyZmEzNmI0ZGUzMDEzMmEwODJkZTJmOTI3MDU5NzMxZDA4NGUyMDQyZWI3NzIwOTMyYWU4ZTE3NDFmMDVmNGM3NTA3OTU4NjkyNGNjNDNhNmNmM2Y1NTI1ZTAzN2IwODk2NzQxMjFjMjc0MWY4MzYzNzJmMjE5YTMzYmZjZDkxMDg4NGFiYjE2NmVlZWVkMTg0MDY3MjY2M2UwNDU1YjE4YmM3YzlmY2YyMDk2N2IyNWRkNzdlYjM3ZTAwZDhmYzQwYjA3ODhjMDgyODBiMGJkODg3OGM1MDRkOTgyZGI0ZDNkMjQ3NmY1ZmU2Nzg1YjE5NTlkMWJmYTI3NjJjMDBlZmU0MzZjZDIxN2I2ZDAxYWRiZjdkYTA4ZDIzMjU0ZjFiZTE5OTFkMjAwYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImE3MTZhZjllMDU4ZWVkYmU5MzdlZjc5ZWUyMWNiYWY0YWMxZWQwZTJmNDg2M2VlZjRjYTFlM2U5NzJmMzMzMjZlYjZlY2ZhN2JjOWJhY2QzZDkwMjE1YTNkYjg0M2IyNDM0M2VkZjdhZGE5ZTQ0MGEyMDZkZjdmMzhmOGNiZDFkMzgxNTliODUxMWYyYTkzZDFmMGI1YWNlOGE4OWMwZDgyM2ZlMDAxNjU2YzNkZGU2NTk4NzRkZjg4ZGQ2MDA1NmNlZDI5M2NjNDlkNjRhNzFlZTZiMjMxOTljOWIyMGU2IjoiNjQ4YWEzMGNiMjY4N2Q4NTdkMzA5ZjcwMmY2ZGFlMWYzMGVkYzgyNDQ5M2Q2ZTgzYTllMjZkOTRmMjg5NDhhMiI6IjM5YzVhNjUxNGYzZDM5OWFjNDFiMjY0MGZkNjE5MzEyMzMyZmUwNTNhYmYxYjJhMTk0NzJhNThjMjgzNDUzNDciOiJjOTEyYTFiYjg0ZjdhZWVlZjc5ZDczMzQ3MDk3ZTA5ZjZiOGZiN2VjNTkzMTc2Y2ViYmJiNTZhZjg2NmJjMzA5IjoiNTM4NzY3NGNlYzUyZGEyYTk3NDNiMjU1NmZhOTg3NGMwODY2ZTU3OTA3OTk1NGNiMzU3ZjE3ZmMwNjljMmUzNDVjMWNhODAwODEwNDBkNjIwZmJhMTUwYzIyZWIxYjhiMmM3ZGYwODJmNjM3ODU1YzM5NmFkNjQxN2ZkMzgzZjhlOTNiN2JkOTE2OTM0MDhlOTUxYjc1NzIyNjljMGFlNjViZThiY2M5ODQ0ZjlmZDg0MDFlNjhmNmZhZmRjZTE5NTE2MjE1NGIzNGZkZDVkYjg1NTlkYzExY2ZkM2NiZDNkMzkxYTQ1MDY1NzYxMzcyZjYwYzUxODJmZTRjYzE2MjMwNDA2MWY4NmU2NjYzMjZjMzMzMjAxMGZkMzg4NjI2Y2ZhOWNlMTI1Mjk4MmNhZTdiNmViMWI4MjA4Yzc5YjdiNjg5YWFlOTA4NGZkMTgwZDAwOTYyZmE0ZWVhNzlmNjEyYWI3ZWM1ZmI1MTM5NGY2ZjQ5ODUyOGFkNTg2MGU3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiYWY0MDViNDJmOGE2N2MzNDliYzEwZDRkMGI5N2Y1NmNjZTQzM2UxZDM0Y2ViY2M3NWMyODUwMDEwZDIwY2Y3NGY2MWIyM2UxZDJmOTY0YWQ2YzlhOGQ2NWM5Zjg3NzQ5ZGEyNzk5MDJkNWMzMGZiNjcyMDdkNzJiZTU1NDUxMzM3ZjM0YWFhOGU1OThiOWVmNTVmZDM2MjI0ZWJlZTRiNTUyNGE5M2YxNTEzZmMyMWZhOTg0ZjBhNzZjMmJjYzk4ZGRmMzk4MjNkMGE4N2Q1MDFiMzUxNWUzZWU5ZmQ0ZDYiOiIxY2JkOTYzZDQ5YjI1NTNhOTcxMTY4N2JjNTA3NDNkODIwNTg4MDQ5Y2YwOTdjMTAwNzM5Zjg1N2IzOTI4ZmMwIjoiZTBkMzM2ZWE1NTJhNmRiYzEzMmYxOTRhYzlhYjgwYTM0YTU0ZjRkMzMxYTU1YTA3MGRkZTY2MDFkNmQ5MDg0ZSI6IjkxZTg4MmRhYWEzMDQ4NzRmYjBjMDYzNzE4OTg0YWM1M2UxZjA3MTZjYThjOTIxMGJkY2RkZGMxNDJjODQwODIiOiIwYWNiMTlmMmE2NWJmMGUxZDlmOTU2MWQ4NzMxZmUwZjBjMTc4NDQzZjAwZmFmNDI3OTczYWQ0NWYyZGY0ZjRkMjFhNGZkZWNkZjk2YzM0YmUyOGUzODlkOGNhZWQ5NmI1MTVlY2IyMTVjYTkxNWIzOGM3MTUwMTVlMWIwNzk0OTI2M2ZiNjU1MTdlYTRiY2FlMzYxZDc2YzQxOGNkMmM1OGQyOTAxMGVhNzliOTQyMGQxY2VkZjkzN2QzYWFhZTdlMjljMjE3MGJhODhjODMyODY2NGQ4ODRhY2U5MGU4OGM2NjIwMDAzM2QxOWZmZDUyZjY2OGIwMGIwZGYwODhiNzk0MjM3N2MxYWVjMzdiM2MzMDQ1MjFjMzk0ZWM3NDllZmJiMjUyNjY5ZTBjMDQxNWI4YjA0Yjk5NWZjMjI0OTAzYjA4NDNmYmFmMGJlMWNlODA0YzlmMTRhNWU5N2FmYTcwZDBmY2E5Y2I3MDhhZDIwMzg4NzMwYWE5ZGUwMjAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJlOWVjZDAwZWZhZmViYTRmYTljYmFiMjJiMWI1Mjg4Yzk4YTM2ZmYxZDY4NTY1OTJhMjg4MzI1OTY4YzMxZDdkODhmZDJiZTVjODJkNzk0MTNiMzNjMWRiZTk3Mjg1OTgyMmNhMmM4YTkyZTc4MTI0NzljMTRmYTI5MmE2MjdhODkwOWMzYTk1M2EyNzU4ZDQyZjIyYTE4NjgyZmZhMjE5YWE5OTA4ZTA2ZjUyMWJlOGZiNTlhZDU4ZTU2NTFhYTlkNmI5NTk4M2UyM2U1NGNkNTdkZmM4MmIyMDc3YmY5NiI6ImFkZjFmNTBhMjk1ZDg4ZjY4ZThjMDdhMTgwODk3ZDhlN2I0OWY3Y2M2Y2I3OGEzYjI1ZWUxMGIwNTgzYTBmMGIiOiI4MmRlNmE3MzU2OGFkZTVlNWIwZDhhZTM3YzQwZmYyNWU4NThhNzA1NTM0NjAyMGM1ZTQ3ZmVkZGZlZjc1NjgwIjoiY2QwZTE1ZDc2NGQyMzU1YWM5ZjFjYmQ1ZWE1MTllZDE3NTZhM2JmYWE1NWUzNzgzYjczOGMwM2JkYjQyZTM3MSI6IjFlNTkyZTUwMDNmYzBmM2Y4MWE3YWVmMjI3MjUyNzk4MGNjNWE5YWM3Mjg2YTYyMTUxM2I5YzdjZTJlYTk0ZmJmYTI1NWVmMjY1NGQ2NzNiYjhjZDEzZjNhMDMzYTc3MDEzMDRhY2JiZThkMTliODJhNjFkMmU3N2U3MjUxZjk4YjBlMjhlMWE2OTRmOWNiYTJjODZjN2M4Y2IyMGQ5YzI5ODZlNTIwNTJmNzAxNTk2ZTNjODM3YWY5NWIxNjZjZDIyN2YyZmMwMGVkZDNlYTYyYjU3ZjYwMjYyNzEyYjJmNzE0Nzk1NjljMTE5Y2JjZTlkNzcxZjhhMmNmZGY4MzJhYThkNzBlMGE5MTI5NzhmYjJiYjMzYjI3YTE4NWZiM2E0Y2FhM2ExODkxM2FlYWIwOTVhYzA4OGQxNDM4MTgwMjExN2FmMGNjMWQ5N2MwNmZlOTczMGJlYmJmZjBhZGYyZmZhYzU5OTVkMjk5ZTRkZWZiMDcyMmJkOTNmMDc5OSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI4OThhNmM0N2E1Y2ZmNTAwZWEwZjViMThiNWYwYjRiY2Y3ZTc1ZDZkN2M5MjAyNWY5OTIwYzY2NmRiYzFjNWZmYzQ4OTcyZTFkNTE5NDI4ZjhkNjFkZmI1ZTMwMGI0OGYyNjYwZmY1M2UxZmZhYTM5NTBjZmZjNTBlMTdhODc0MTgyMjM2ZmJiNTU1ZDM1Y2VkMzMzMDJlZjg3Yjg0YzBhZDMxZTg3NDQxYWUzNjUzNTA0NTJhMzk0NzA1NjdiYzAwOTg3MWEzYzk3ODViZGE0NTY5YWYzM2QwM2Q0NmYwOCI6IjllMTY1NjhhMjI1YjgwZTkwMTE1NzFmM2I1NTEwMmNmNjM2MmUyNmI4YTYwZmQzMzY4MGQ0ZTY2MjU3MzhlNWYiOiJiMWM2NWQ2ZTUxYmEwNDNmNjNiNDI1MWVkNThlOWE4ZWViZmMyODlmNjI4NTcwNWY4ZWY0NGMyMDJjOWI0YTIyIjoiMjQ1ZWU3NDFhMjA0MWVkYTIyY2U3MDUzZjg1NzZjMGE0M2VhZTg2OGZkOTVhZDdkNThiYjkyMWMxNTViMWI1MyI6ImIwNzYyMTA2ODhiMDZhYjZiNTdlZGY2ODEyNmRjZGZjZTgyYjZmOTI4NWRkZWMxMDJlZDYwNzMwYWE3NTMwODYzMDc2MTg2YTNmN2FmZmJkZDRlZjA4MWI3ZjVhMzJmYjQ2MWJjNTc1NWFiNGY4NjAwMTI2MzFiNzRhZTM1N2ZiYzNjYmQ2NGYwZWVmODc4OWM2YzlkY2E4OTRhNDFhMDA1ZDI3MmI0YTU3ZTc2MWY5MWQyMjE2MzZkMGVjN2E0OWYxMGJiMWI0MjY0OTM4NjA0ZmY0ZGM3YmM5N2ViNzk5Y2VhOWUzZTFkN2E5YjRiZDY2ZDg4ZDI0NGUyMjEyMGJiMzExZjUwMmU2NmU2MGM1YzllNDI3MzFhZDMyMGIyM2Q2YjA2YWU5MmExMzJiMDkzYWQ5MjRhMWE3ZTA4YjVkY2NkYzUwZTI1N2JmZGI2M2JmNTcwNTM1MDU4OGY2MWU5M2U0ZmM1MDQyYTJjYWQxYmQ2ZDlmYmM4MmU4NzVjZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI4ZTkyODM2ZGM1ZTRiYmY5NTk4ODAzZWZiMGQzODcxZTU0MThjZjE4ZjM3OTQ3OWJiY2JkOTI2MjU1OGFmNmNiNmQ5N2U3M2RlY2I4NzgxYzMwZjY5YjYxYzFmNWM5MWE1ZWExZjEwZmIxZWVmNzRiNDgwZTU4MzcxMGQ5YTZhMmU1N2Y4Y2ZjOWQwMjE1ZmE3M2QxY2U5YzE1NjJmM2NjMzRiZTE4Nzk0MGNkMzE3YjY5MTM5YWI5YWE1OGQwNjRiNmJjYTU5ZWU2NDYwYzNkYjRlOGI1N2ZhYjAxODZmMSI6IjZkOWFmYzc2OTk4NTIxODc0NTIzNWU1YWYyODBlYjQ1Y2VjODFhMmU5MjBjMjg0ZWQ1Yzc3MTA1NDg5ZThmNGIiOiI3MTE2NzJmMmNhMTJlN2Q4ZjMyNDQ1YTg3MTYzYmMwMGY1ZDBmNTJjMmY2Nzk5YmE1MTNiNjhjMDdjMzUwZGU1IjoiNDI2YWVhYjJjZmE1NmNkMzE0NmMwZWI5ZmFjZmJjMDQ4YTUwNGVlYzMyNzMyNTZiNWU0ZGIzZDY2Yzg5NTYwZiI6IjU2MzI1MzczMDk5ZmMxZGQxOTQ1NTVjM2ExZTY5MzU4ZmM3ZjgwZmU2NjEwNDEyY2IzMWMxNGNkYzcwYzczYTc0ZDA0MDc0NmM2Y2YzODhmYjk3MThlNzQ0Njg4OGM2MTYyZGU3M2FjMDk3YzMyZjhiNGIwMGRkN2YxMTVmZWQxODIxZDM3ODZiYWFhMWY2NDg4NWNiOTNjNzU1MzFlOTkxNzFmOThkM2MzNTc2MzM3YzFjNDFjNWJmZTgzZjk0Y2VmMmFkZWJjODhjMDc5MDM5OGQ0YzA3MTQ4ODY5OWVkZDU5OTc5N2MxZjhmMzk0YjNlMDBlNjZiYzRiNjhhN2NhY2QyMDk2OTU5NjE3MTNjM2JmMmM5YTVjODU4OWQ5MzVlMTcxZjc3NWYzNjYyMTdlMjYzNGRkZjBkYjVmMDFhYjMxNzYwZWJkOWVkOTcyNDI5MmJlYzg5ZGIwNmQwMTQ1ZmI4MjRhNzYyOTJhMzVmMzliMDFhMDZjNDM1MTBhNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJhNGYxZmQ4M2U1M2E0MDYxNjM4NjIyNjBmYjllMmVjNjRkNGFmNzRmNWZhNDFmZjU2YzA3Yzc5MWI2YmI2YWJiZGIyMDM2NzBiMTg0OWFmYmYwOTMxMjA2YWQ2MzkzNzk4ZmYwNmZiYThkY2EzMzE4YzI5ZDkxNjFjMGVjMThlYzVkN2Q2Njg0N2IxYTYxOGJiMGU0ZjY5ZmExMzMxZmQxZGI1ZDVmZmZkZWVjNWEyZTA0NWM1ODhkYzk1YTVkNWVhYzZkMzU1MDJlYmUyZTZhNTczMThmMTVhZjUzZTAwMSI6IjM5ZGQ3OTM5N2Y5MWE5NzQzMmU1MTI0ZTdiOWI4NTkyOGY2MmM1OThlY2QxOTYyNjA3MGE4MWE1YThlZDU2NGEiOiI5ODU3MjQ1NDFkNDRjOGI4NjU2NzI3NTljOGQzNmRlZDc1YzIxODljMjI4MTczMTg4OGE3NDFiMzA1ZWI0MTYxIjoiZTJkYWU3NTk1MGU0MTdjMThmMWMzZTVmYmQ2NmIxY2M5ZmE2MTdhYTY5NWM5ZDAzZDg3NjhiOWUxOTdmZWE4MCI6IjcwM2FiMWY2YTUzMzJmMDFmYTc4OGNmNzM5MjJhOWY2Y2Y4NTYzMTk3NzJlZWFiMDdiNDc5NTcwMjU2MmNkZTM1MGE4Y2Y5Mzk1OTc2ZmQyMjdiMDgxMzRmZWI0NjljYTM0ZjY3NWM5YjZmMTc2YWQ2ODRhNWIwZDAyYjRjMTM1YTcxNzRiZjA2MDRhMTU0NmU3ZDhkOTc4ZWNmZDhjYjZhZTVlZmNlM2IyMjhkYzk1Y2I0MTNiMDEwNzMyYzNlN2Y5ZWY4ZTU0N2E5MzU0MGU1ZTRhYWFhM2IwZTVhOGY0NWI4M2JiMTEyMDlhMDM4ODNjNTRmNDFlNDk0ZmNiYzY2YzJkNTdjMDEwMDIxMzc1NjdlYTJmOTlmN2ExZWQ2YzRjNjA4MGJkYWEyOTlkMThmNTdiYjNiMzg2Mjc4YTc4YjJlZjIzYTAzMDQzZTg1MGJkOWZkNzQyNTI3YzQ1MzA4ZTViOTEwZmM1ODZmOWYyMWRlNzAyMmQwMmIxNDkzYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJmMzMxZWJjZGJjMGQyZGZiZjU0NzU4NjgwZGQ0OWRkMGJkNjY2ZDA1MDVlZjZiYTFjNGJiZmI3ZGVlNjJlZGMzNGVhOTA2MzYzMmM4ZTY3MTliYmUxNDBjM2M4NDBhYWJkNjZlNzcwMmMzODQ3MDA5MjFkYzE4MzhjNmM1YTgzMmM2NTBhNDc0ZTc0MjcwYzM3OGFiZmYwMjFkNjBkMWExODg0OTM5YmJkYzUxYzU0N2M3MmM5MjljMGM3M2NhN2Y3ODY2OGQzM2ZiYTE5NzY0MmJlOGFjMmQ0MWNlZmRlNCI6ImVjMjk5ZTQ1NmNkMTk4NWEzZjEwMjJkNWMwNWYwZWY5MDQwY2M4YjgyOTdiYTVlNDA0ZDkyYTZkMzZjMzU3OGYiOiI5NTRmNDY0ODc3ZjcyNThmOTlhY2JmYjlhZGZlNGVlZGM4OWRhNzFjYTgyZTM1ODFmYjViYWQxMjdiMjA2OWU3IjoiNTE1ZjllNzQ2Yzc0MDcxOTY2MTBiYmFlOTYzYjliYzE1YjE2NTg5NzJhMzBlNjJiZTZmNzhjYWVlMTI4N2U4OCI6IjVhYTMwYTc5NmQ0NmU3ODljNDk4MzUyYWRlMTc5ZjBjZDMzMzY0MThmYmVhZmFlMGQxMGZiZjc3OTg5MTc2NzIyODhiM2IyYTEyMjY3ZmMwNDM1ZDg4YjRlOTk4MDljMWUzMDY3ZjBkNjVjOTEwYjEyYTMzMDMzNGI2YTIzZDZkMzA5MTBkMzAxNDM4YzJjOTk5MzUzZTFmNzgwMTliYTdiMjBlYWY2OGI0OTlmZjFlODhkYjA0MzEzMTJhNjZmMzUzMDVjNGYzYzNhMjc1MGM5NWJiYzA3Y2NiZGYxZTRkMTIzZWVjMzc4YjliZTg4OTRiNTk3YmNjMDI5YzY2NGU1OWUyYjNjMjNmZDcyODQxYWYwZGRjOTM3NGVjZWYyMTg4NWEwYjU0ZDEzMTg2ZGMwYTY2ZWQzYzNjYWNhOWU0MTc1MzgxM2FlNjEwMTVhOTUyMTQyYmQ0ZDdlYmJhYTMxOTM1OThiZTEyNjdiZTkzNzc0NWZiMGRlMDlhYTcwZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJkOTlkZGJkODJjZTk5MzdjZGEwODNlMzBiM2RhNDdhNmU2Y2EwOGI4ZjU5ZjJmYzkzNGJiM2Y3OGU3NDhiYjI4Y2ZhYmRkYjM3NWVmYzVmMjAyNWE1M2ZkMDczYTg5YjBmYmVjMzkxMjkwODYzYWQ4NjJhYTU2ZmU2ZDk0NTA0NGU4NzljYTA1YzNjMDE5MzEzZjgxMGRkNTU5ZmEwZTY4MmQ2Yjc3ZmY3ZTYxMmM3YzQwY2Q1MjMxZWVjZTQwMThjNWIzYzBkODE4MWFiNDQ3MDNmN2EwNGMwYTFjN2M1ZSI6ImViYzIxOTNkNGE5N2I5N2QyOThmMTMwNWIyZjdhNTRkYWI0NjZmN2M0ZTQ0NDgzMTY1MWNhYzI5YTZjNWJkODgiOiI2ODI2YWFkNDFmOGFjMjllMjcyODg0Y2I2ZDIxMzAwYzdiMGIzY2EzNzIwNWUxNzIwYWZhZjlmNzE2ZjMzN2VjIjoiNWE3NDM0NjQ4ZGU4MmEzNTUyZTEyYWZmODAwMDkzNzc2Y2EzZTg2NTY1YjI5YzBiM2FkNmMwYmMzMTgwNjIzZiI6ImNmYzc5YTg5YTBhNTVkYzljNmM2ZWNjZGZhYjVhOTkzNTMzNWU4MDZiNzNiYWI3ZjVlZmY1ZjlmZWE2YWEzZjQ3YmYzMWYwNmQ5ODdhOTRlMmJjMmE0YTYxNDRlYmU5NGQ2ZjVhYThmY2FhYmJmODZhMzdjOGQ0MTIyMDc4NjQzMjJkMzA1N2I4OWZlZjM1ODc0MGM1OTYyY2Y5ZTdjMzcwNzI4NDdmY2FhNmRiNjkzYTUyMzhlZjI3MGU4NDE0ZTJiMjk0NDhiYmNjMzdkY2VhYTc1NDc5YzJhYzVmZWUyZDZmZTllZDY4NTE2ZjZkYmQ5MDEzNWRkY2FlOGExMmQxYzE1OTVlMGVkYzM0ZWEyYmYwMGJlZTdhZTc3M2MyNDBjMmJjMWVkODI4YjdmZjkxYTY3Njg5MTE3M2VlYzFkYWJlZWNiMjE4NGRmOTE4NmMzYmQ4MzNlMzQ5MzUxNDgxNjU1YmRhOTFiYzBmNGU0MTlmYjc4ZTQyNmRlNmIzOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiNjRhOGFmYjcxOTc1MjU2YjYxOTZmM2Y5MzAzOGJhOGI3YTRkNzA4OWY3ZjI2ODEzNGNiM2Y1OTI2ODY4ZTRkMTA0YzYwYjQ0ZmJmM2JjMTk4ZjRiYzU4YmYxMjYwZDEyM2E1YWFmODc0OTEzNmE4NmM0ZTVhYmE4MTY5MmQ1ODcxMzNkMjlkM2I3YTYzZmE2MjA0ZWQ4NGU5M2JlNmFlYmY1MDQ3MmQzMTNlZjU3OTdkMWEyOTBhN2NhZTA4NjA1MmI1N2U4ZDVhMjBlZDIyZWM3NzAyZGQ0MjRkOTM1ZWEiOiIiOiIiOiIiOiI0ZjYxZjZiNWQ0NmVhMzUxZGM2ZjhmZjU1YmNiOTE1ZDk5OGM4ZTg3MWI1ZTEyMmRkOTUxOTZkYTI0MWM0OWExMTcwYjFmYzE2ZmZhMzFhNmRjNGYwYzQwNjhlY2M2ZTVjYzBmYTY5NjZhZWRmNzJiY2IxOWU2NjZiMTkxOTc5ZjIyNTgwYjY1MDVjMDlhNzg0ZTc2ZjU4ZDMwYWYzYWJjYmU4NDA0OTdhZDg4NjIxYTg5M2ZmZTEzYWY2YWVmMGY4Mjc2Zjk1NDAwNjg5NDNiYjZiYzUxNDk4YTQ2NTEyOTg4MGRmNGM1MTdmN2ZlNzBlYzIzOWMwNTUxMDJhNzhiOGIwZjI2ZDM2YmMyNjM0YTBlNjFhMTQzMTg1MDk4MGMyNTgzMjYxOTdjYzgwZDA3YzNjYWZjNDlhMjAzMTZhMGZhMjcwM2Y4NTBiNjZjZTI3NGU4MzlkNmRkZGJhNGQzZTc0NDMwNmQ3NjhiNzQzN2VjOWM1NGVkODY0YzdiY2E0ZWE4ZDA5ODdkODE1ZTY0ZjY4NWUwNzI2ZWI0MjIzYWE1ZWFjMWEwOTc5ZmIzMzUyNDhlZTU5ODE5YzM2YzdjOTRkYWRmMTQ0NzRjN2UyZjEwNjc4ZGE1OWYyNTU0NzRlYTUwYzNlZDVjY2Y4NmEzOTliYTdmNTRhZTk2YmZmMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiZTViOGRiZWE2NTRiNTU5ZjAyNWMwMDhjMWYzYjJlZmY5MmZlOTg5MzJiMDI3MTIyOGUzZjRlZmEzMzAzY2Q0ZjExMjY2MGY0ODA1N2ZjNTZlZDBlZWJhY2Y1NTljZGQxNGY1MjNhM2U5NDhlODAzNzQyN2U2NWRkMjVjMWViNDE1NjBmMmY3OGRlZTEzOWIzZDcyMWJhMWMyNzhjMzg1NWFlZWMzZmQzYTQ0YTUzMzFjOGY1NDM5NmVjM2I5YmE3M2MyMmRhOGFlMWFkYzk3NDgxNzhkN2QyMTM0MWY3YzkiOiIiOiIiOiIiOiI5YmM1YThjMTExZDQ1ODYxMzFmYWVmNjM2ODlkMGE3MzQyYmY2MDFmMDQ5MjZmMThjY2E3YWVlYjhlZGIxMjllMzNjYWUxMGU5ZTA4ZmQ0NDA2NWRiMmFlZDQ0ODBiNzU4NzhjNmQxNDAwZDM4ZmEyYzllODM2ZTRhNmJjMWQ2NmRmNTcxZmZhMWRkMGEwNzNiODk1ODAwMDVhMDlkMWNlODE0OTIxMzE3NzFlYzRmZjk4N2NmOGEzMjYwYzlmOTBmYjNlYzA3YjgyYWIxZGI1MjZiOTdhZTg1NjI4MmZmN2M2MmVmZWIyY2VkYWFjYjc1ZmRhMGI3NGRmNWUwZTc2NmEzNTczYTgyOWMzMmY1M2VmM2IxNmZmYjlkNGNjMWNmZWZjODRlMDhhYTE4NjRmNWQwZmJlNTkzYWJiMjZiNDg4YzkwZTM1MTgxNmUyZDEwNzNiY2JiNTk5YjY1YjE5NmIzM2RhYjkwOTViYjI4OTgzMTcyZjNhNjFjOTkyZDQ0MzQ1ZjI5NDdlMWFjZDJkZjk2Y2NhZWEzZjZiYzRjMDI0YTRlMzY4NjhlMzU4ZTViZmI5MDQ3ZmYxMWRhZWIzNDU3MTA1MWYwODIzMjY1YTE1YmU5ZTRlNGQ2NGY3MDczYmQ1ZGMzYjQzYWQwYTRiMzlhNWZiNmJmNGIxNTRlYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiYWJlNzEyMWM3NjgyMDhmMTc0ZWU5ZTU0NTI1MDAxNGQwMzFlYmM2NDc0OTdhNjBlMThlMzQ2MjUxNzAyN2ZlYTFjMGUzODU0Y2ZlNTQyOWJjMTA1OTE2ZTYzYTBkNWE3NTg1Y2ZiYTczN2Y4ODc4NTJmMjNhNDEwMzljY2E2ZTMzZGU5NDkwMWNjMWFhZTkxYWM0MmRiMGNhMzQ3MjRiMDczNjhiMWEzYWI3MzNkYWQyNGFlZTAzYmFiNTBlYWFmMmFjZjE1YzJjNzAwZTVlMDcwMDk3MTMyYTkyYWU3YmQiOiIiOiIiOiIiOiI3ZTA4MmNjZTY3NzRhM2QyMWZmMzlkYjFlZjllZDAyNTFhNjQzNDQ2MmFmZDI5ZmI4ZTA1NDU4YjljYTdiZDE4MWE5ZTM2MmFiNDk4NmMxOWZhMWFhOWJiMWQwMGYxYzM0NzliMmI0YmUxNTEyYjJiNWViOTRiOWVjMDQ5MzI2NmI2ZWZjZTczZDAyZDZhY2M2NTNkYjllNGMxOTRjN2QxNjk3ODFhYTc4ZGU3ODM5ZTAxMGFkYzdmZDU4ZWZjOTg4YTVlZWMyZmViODlmMmQwZGM0NWFjNmE3ZDRiZWRmMTFiYzEyOTRiNGYzMTJjNzIzYWNiZDY2NGYyOGY4NWY2NzZmM2ZlYjdkMmQyZGIxNGIwYWNjYTJhYzZkODNkMjg3NzMxOWNlZGJmODE2Mzc4MzY1ZGM1MTM2OGUxNjg2ZjJlM2NiMGJkNjcwYzEyNWNmNDg0Y2NhN2QyOGNiYTA0YTI1NDc5ZGNmYzNmODA5MTA0MjJhNTgzYzM1NTUzYWM3ZGQ2ZDVhNDNjNmNlYzQ2NWRkNmM3ZWMzMzcxMmM5ZjIyODkyMDZiMGYxZTYyMGVkMjNhMzM1YTk1YTEzOTJkMTQzZmNlZmZiYzJmNDNhMThjMzQyNmRlMGYyZjE3MTZmNzIzNGJkYzg4MGY2MWUzYTFjMWMyYzU3ZmUyOTMzNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiMDdlNTcwZmE3Y2YwNzllMDY2YzVjMzBiNmQyNGZkMzc5MDZhYjdhYTA3YjE1NTFiZTYwNWIzMWY4NmRiYzNjYjNlOTVhMDcyM2U5MzQ0OTIyZDE0MTg1ODI0YzQ4M2JjNWRjODM0MWYxMGQ2OTg2Mjk3MzY4MzhmYWQ2YTE5MDgyNWEyNDQ4MjQxM2IzODgyNjVmYjIwYjJhOGU3YzA3OGI5MTA5MGM5N2RiMDFlNmM2YTcyZDFjMDY3YmVkZDczZGExZDdiMTU3NWIwNTg3MGI4ZWVlNDM0M2JjNDIyMTMiOiIiOiIiOiIiOiIzY2Y2MDk5NDg5ZDJlYWE2YmM0MjdjYWUyYmJiNGExYjEyMTA0MWJjZTJhNGY4ZTc0N2EzYjQyMTc5MTA5MDUxNTYxODk0MjBmYThiOTY5OGE4YTMxNmM1MzcyMjlhNDI1MDliZTllNzVmN2RiZDUyNDFkZTkzMjQ3NTExNGZjOTIzMmMzMzI1ZWU4ZDkyMWFhYTY4MDA3ODQ5Mzg1NmMyZDBiMTRlNjU5M2JjM2YzNmUwNjE1MTQzZmMzMzYwNTQ0NDJlMTk2ZGQxNTJmNTM2MzRhMmZhM2U3NDQxN2FhMmRmZWNmNDM2N2NiYzE1ODRjYWZjZjU4M2NiZGRmMTI4M2I3M2IzNWY5ZDFmMWVjZGI3MTA0YjgwYjgzOGYyYzE0NjRlZGU1MGJjYTA1ZTk2MGVmYzZiNjJmNTU0NmEwZDAyZTM0MjBjYjg1NzA1MGI0OWNiMWUzYjRmZjhhOTM2YWU0YWE3YjFkNzc0MDg5YzY0MWQ5NmE3MzIxNjRlZTViMGNmNzdmMmY3MjkzMDNjNTNkZTY2ZTlkMWI2ZjVlYWJkZTdmZGQ1NWJiNzAzMDY3MWEyNzRlM2Y3YTQxMDQ3ZDg0ZjMwN2RjMTk5NmQ2ZWZiNjcxZGY4YTAxY2E2ZmZlZjgxOTUwYmVhYjk4YTNlNDgwY2RkYTUyNDFiNmQ2OSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiOTlmYTg4MmVhNWFhNTVlYzk2ODI3MTk3MjFhOGU3OWQ2YWZlZWM1Y2JiMzU3N2YxZGY3ZmU5N2U0ZWRjNDc5MDQwZWZhMWU1MWY4ODkzMjEwYzMwMmYyYTJhM2FiYmFjMmRkYjNmYTMxNzU4Yzg0NzNhNmY3YzUwZDk4ZTQyM2NjZjM2MGEyZjZhNWQ5NGY3ZWM2YWYwNGY2NTZhZDA2ZDIwZTJiZTdlMDlmNzI4YjY0ZjgxZDczNmFjM2ZiODI2M2IwZjc4MDhhYmQ1ZDdiMGJiYWUxZDRiM2Y0NDU5NTciOiIiOiIiOiIiOiI1ODA3ZjQ3ODM5OWViMTcxNTliMDk2ZjdiZTc3ODg3NjljZjU2YmVlYThjZjQ2MDQ0MDBmNzdiMTAzNWNlMGIzYzVkOWFmYzI1Njg1MDQ0NTM5N2Q1Yzc1ZDA4N2RlMTJmMTA4ODk2NDlkNGU3NDljYTg5MWYzMGJjMzk3YjU4YTliM2M2MzIxYTA4Yjg5ODQ1ZTE4NmU5YTY5NzM3N2FlYmUzNjQ4Njg4NmY3NGFjM2JjMzUzZjAzM2Q0NThiYTVkOTQ2MzRiMTYyMDg2YjRiNzQ1NjM4NjBmMWYwNzliZTMyNzg5ZjhiZmRkNTYxZTQ4NjgzOTk5NmRiOGUxZGUyNTU4M2UyZTY0YmU5MTQzMjliZGJiMGE0MmExM2Q2NjhlNDdlNGZmNjM1ZDAxYTFkYWFhYTI5YWU4NDU5NzUyZDA0YjdjOGZmNTM0MGZjOGM5NzI5M2YyYjdiOTFjMmM4ZTNmMDUxOTg3OGM4MmE2MWEzMjY4N2Y2OTNhNjRjM2MxYTIyMmI2NjRiODM1NzBlYmVkZDk2ZTg3MjJiYTYxMjVmMDRhOGViYjA3OTU5NzM5NGRlOWRlMzZjYTQyZDgyOGY5MGM3YTVmYzc0ZDFhYjAzYmU3M2Y3YzVmZmQzMzJiOTA1MTdhYTZlZjhjMTlhZWZlZDE4MmRlNjg4Y2Y1ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiNzUzMzZmYjAwMDZmN2FhZDk5NWFlMDFiM2YzZWMyNGNlZjQ2ZDNmN2FkMDc3OThlNTJmNjA5ZWMzNGIyNjZmMWNiNTE4NjU4MTcyODExMDNiM2JlMmMyYmVjZTg1NDg3ZTk3OWYzYTMxYmE3NWQ2ZTZlNGIzNTc4MTFiNGFhZjVmYzk1ODQwNjcyMTY5M2VlZWMyMWU4Yzk4MDhjZWVmYmQxN2EwYTZkNTY2NDE2MmU3Yjk4OGMxOWRiYzkxMWI2ZTNiNjhlOTBhMWU2YTNjOWM1YTQ2NjJkOTU0ZWY1YzUiOiIiOiIiOiIiOiI3ZTEzNzg4YzM2MmViYjZlNmFlNzk0ZWM1MGQzOWMyY2YyYmQyNWQ4NzY5ZWU5MWRmNWQyMTBiM2JhZTUwMjE4MDFlMGQ1OWVlNTAzZWExNzdkYzAxYjNjNjA2ZGFmNjdhMmZjOGFmYTlmMDZiMmQwMzc1OWUyMTkxZDZkZDBlOTE2YjVkMjExMjUzMjJiYmU5ODAyMjU5MzY2YTQzZDY0Zjk0YzU0MDhlNjI3MDlkODA2OTcwYTgzZGZmYzRkNzhmZjg2ZGJjYzc1NDBmMzRkYmYwMjZkZDMwOGVlMjg5NzFlZTVlODg2ODFiMzQyZDE1ZGJiYmFmZjkyYTUxZTRiNDBlNGM1MGUwYjFlNDhkMTUzZDVkNmU5NTBkZThhMzczMjZkZGFmNTA0MzgyZTIwZmZhODViY2M5MWZiM2Y3ZjU2MTMwYWQ2NzI1MGM3YTlmMWVlNWY3NmNiMjY1ZDU2N2Q0NDhjNTBlZWM0ZjM1YzIyMjMzMWJmMmRiYTJiMDBjYzY2MGU3MDE1ZmMxZTZhNzE2MWEwMWNjY2UwMmI1ODAwY2MxNTE2YzMzMGU3NmYzMzc4OWZiNDdlZThlMTM4NzBlZDU4OGQxNDVjMDE2YzNmNzNjNmI2NDg5MmI0ZmFhN2RlYTRmZTUzNmM1MzQ5ZmRkMTcxMDE5NDQyNjgwYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiZjZkNzQwMTY2MzU0NzY2MTU2M2U1YjJkYTIwOGYxZjhhNGEwYzE3Yjk3ZGRmMGQ0YTRjMWExN2MyM2VlOGM3ZDAwZDAzNzgzOWYyZDk1ZGRlNmE5Njg4NmNkNjdjOWE5MmZiN2ZiZjc3Y2EwODhkMWU0NmYyZGMzODZlMTZmYjZmMWQxNzhmN2MxYTNkZmUyMDJmMDVkNTJjYTIwZmUyOWI4MDg0YTlkNTk3ZmQ2YjBlNTNmNDFhMTNmY2VmYmI4YWE1ZDUzOWM3YjA5ZDhlN2I4ZjY4N2IzZGY5MmM2MDYiOiIiOiIiOiIiOiI0ZmU2YWFiY2M0MGUxNTgzMTZlNDkxNjBhYzUyM2M0MWQ0ZGY4Y2IwNDFlMTE1NDlkZWMwYTQwY2M4NTRmZTRiMTYwZmUzOGExY2MyMmI3Nzk3ODllZjA3MDEyNzM1ZjQ1N2ZjZDJhNTU5NGIzNDQ3ODNjZjY2NjFkODNiMDQ2Y2M0MDNiMWZlYjk2Y2Y4MWIwNTAzOGRmZGI0MGQyYTAyN2VhNGJhOTNjYWY3N2Y1M2ZkY2FiYzM2MWNlNDhhYmJhNzg0ZmQ5ZmViNzIyYzQ3N2NiOWQ5NjUxZDlkYjZkMDg4ZTA5N2E5M2UxZGJhYTJjM2RiMTUwM2Q2NTY4MGJkNGI0NzM1MmIwNDM4N2Y5YzE1YTFjM2E0MzRlOTNlY2MzOTY0N2RhZDgxMGVkOTY5OTdmMTA3ZTUxMzExMDFjZTIwZDRiZTgyY2M2N2QwNTMwOTM3Mzc5MmUxNWUyOTc0YWFhOWFhOWJjOWU2ODE4MTVlMDcxMTFmMWY5ODBmYzhjYTg4MjQ3OGMzMmZjYzM3NjViOGU0MjJhNTM2OWRiZjM2ZjcyMzkwYWM4ZDNiNzI4YjhlNWRlYjNkNDhlOWVhODVhMzFhMDQzMmI4MTM0NzFlNmIwMmU0YTEyZWQxYWVlMGFiOWRiYjNjM2U2NjIxN2M0NWExNzRmOWI0ZWQzZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiOThiZDIyNWNmYWE4MWUyMTExZjgzYjRiM2IyZGZkZjM1MDdmZTE4YWE5NzEwMDA2MmJjYjVhMWY2NjVjMDkxMDAyZmJhM2Q4NGUzODg2MDQ4ZjY3YmM3ZjA2NzUwYTE5YTY1NTAzZDgzYTQ4MDQ1Y2Q5YjEyOGM1NmMzZTQ3NGI3ZDY1OGZjNTkwMzQ4YmQ5YzE0MDEzZmQyMGQyZGYzMmRiZTlmOWI3M2Q0N2U0M2U1OGE2ZWNiNWY4NWY5M2IzNTQ2ODE3MTM0NzQ2MDE2ZjY4ODZmNmI2M2JlODMwZTEiOiIiOiIiOiIiOiIwNWNkZGI2MzkxYzVjMmRlM2RiOTk5NDI2ZjMxMjM4YjVkM2UxNGEzNTYyMzI3MmQ2YTcyYzczOTQ3YjM1MjEwMTdjZWYzNzc0MTVkY2RmMDllZGVkYzBkMzRkOTg4MGI5YzQ0ZjI4MDk5ZjI3MDg0NGU1OGY5YTk3ZjczODhkZjgzNzE3YWQ0ODk3MjAzNjk2OGU2M2YyODFmYzBhYmU1MzEzNTg2N2NhY2UwZTQyN2NjYWIwNGUwZGZhODEwOGQ4N2EwYjdjZjdiZTE0YWI1MGU1OWU0YWVjOGQzNjdmNTQ4MDVjNTM0YTlmZmEyZjM2ODY3MTJjYWFlYWQ1MTRjYWEzMGIxY2EwNmM2NjhiNWYyNzFhZDhmZDg0OTA5ZWYxMjJkMmZhYmRlN2I1MjRkNDJiOTI1YTA2OGQwYmIyNjVjYmQ3YzY1MDVhNGMyYzBiZmY3ZDQ3MDY4Yjc2ZjM1MGZjODVjNzQ1ZDA5OWM3OGJjNzNmOWVhMDc5NjM4MTkwM2UwZDM1MTIyODNiN2ZhZDA1ODUwZTFiZGY2M2I5Y2Q1MmVlYmZlZDI3MGYxNjIyZjA1N2YxMDJkNmFiMTljNjNlZDU5Y2YyY2MxZTU4NzYyNTdhYjAzZTIwZTYyZjNhNzc3NjFkYTMyYTVlMWMyZjhjOTViY2M3NTM0ZWUwMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiN2EzMjRhNjQ2YjUzZjI4ODA4ZjdjNDQzMDMyMjFhYjM2MzI0ZDFjOTc2NjBmN2MzMzNiM2JhYTc1MzdkMWUxZWEwMzhiOGNhNmMxNTlkOTFkMDJmM2IyMDZlYjkyNzU3MGFhYzg1Njc0YjU5ZjQxOWFmMjY2MGNjYThlYjBlZjk5NmJhYzY1ZGMzM2MwOGE5NDZmYjJhYmI5MzQ4ZGQ3ZWJjZTRjNzFjYjlkZTExYjhkNTlhY2VhZWUyYzlhMjliMTU0NjMzZGY2NDNmMzc4N2MyNjcyZWE3ZTc4OWEyYjYiOiIiOiIiOiIiOiIzYzA5ZjUwYmRjMzVlMGVlOGJjMDMzZGE3MTZmNjhmYjcxYTY4YTMzOWUyNjcxMWU2M2Y1NjQ3MjNhNzBhMGI5YjRiMDFhZTU0MjJjOGNlN2NlYTdiZTBiMzVmNmJiY2JlYTExMGFmYzljNDQ4ZDg1ZTdhODdkNDNjNTRjZTExN2RiYTg2ZDRiOTVhNzU0Yzc3YTRjOGVmNWZiYzExYzI1MjUxNzNhZWY4MmYxMWY0ODI2MTFjNDI2ODg3NjQzZGE2ZGFmNTFiYjNiYzQ2MmJkNWVmYzY4YjRiNWU3ZTA3YzdjZDk5MWEyZmQ4NjcyYThhNWQ4NDkwYTQ1MWQ4ZGY5MjA1N2RmMGJiYjhhNjA2MzQ4OWI4NGJiYjBhNzU4MTNmZmNkNDk4YjE0NmYxMWM1ZjE2NTgwZGZmZDM4ODEyZTMwNWNhZjYwZDEzMzY3OWMyYjhjOTU2NGFiYTA0NGFlMDE5MmE5YTU3ODljOTljZjVlYzQwYTNjNzc1ZDU5NzYzOTFkNmFkZjllNGM3N2VjYjBhOGYzMTY5YmIzY2I3ZTVmMjExMmUxOGM0NGZiNzUwNWU3ZDVjNGU2YzBmNDI1ZThlNTUyZjc1YTM0MDkyM2EzMTg2ZTQ5ZDdkZjFhM2RjYTNkZjkwNzExNWMwNzVkMzk4NDQ1NDhkY2JjNzY1NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiNTliODRjZjVhMjliNDVhM2Y4ZTBhYzM4NGJlZDIwZDk3MGYyYjZkODk2NjFiYmUyYWY5MGVmMDczZWIwNjFjYmYzMjNhMTNkMDY0M2RjZGJhOTAyZGYxNjhkZWQ3YjYwOTRlMTgzODExODFkOTFkMzczNGNmYjRlNDRjZDQ0NjJkZTgxYWFlMDY0YTlhZTlkMTU2YmJiMTQwNzliNzhlMmY2MTJjMmUwOTY1ZDE1YjI1NjNkODg4ZTIwMzRkMDZlNTVmOTM5YWMyMzQ1YzI2Mzg0NDNmODNiNTkxNTI2OTYiOiIiOiIiOiIiOiI4OGNlYjYwMGQwYzMxOWM1ZjIyZTRlOTFjNWExMzE5ZmJjNzUyYWUzMTQ4NjhmMWZiYzZhNGQxYzBhYTRiNWM3MDU0ZDY0OTI0Zjg0MWQwNjM5MjI5NDg2NmNlMzk5ZDlmYTI0NzVhNGY1M2Y0Mjg1M2I2OGY5ODUxZGIwMDI2NTVkYzk2Y2M3OTlmZDZlZTFkNDQ5OGYwMDVlMjVmNzZlZmI0YzA0Nzg5NTdkZTRiMjZkZWIzMTAyYzYwMmZhMDgxNzljOGVmMjZlZTI5ZTljOWU4OTZjMTIyZTAyNjUwZGNhZjYyMmZmZjcyOTgyNWFhODcwMjZlZDhkZmE5NmU5ZmIxNTEwZDliZTQ0MTIzZGNhNWI5NTIxZWY5NTAwZjZlMzgzMmE3ODk3YTVlNTEzZTk3MWYxODcyNmQzMjg0OGE2NDUyZmY3MzQ3ZDVkOGRmNmQ0MDFlY2EyYjgzYzcxYTFkODA2YTUzNzRiZjZlNmE5ODAxM2JlZWNkZWViYTliNjM3ZjIzODA4ZWJkMzlmYzcyNjA2MWFkM2NlNDRiMDJmNzNiMmU2ZTdjNTU4Yjc0YmQ0YTA4NWM0NDUxMDBjNjI3ZjJiNzFjNTRlNWE0M2I3ZDM2YzEzMTI3NGMwNGEwOTQxZmQ4Y2I1ODRkZmY0NDUwMzdmNjIyZjRkNjljNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjY0Njg4NjQwYTFkM2Y2MTA1MjhlYWJlMjk0OGUyZWFiMmI0NTNhOGNiYmNjZjU4YmIwMmE3MmIxYmI0NjZiODI3N2YyYzJmODI5ZmVjNjY4NzJjYzhkNmMwMzI4MGI1MDc0MTM2ZTdmM2UxMjNkNmZiNzI3ODZmYzI5ZDFiNTU3ODJiNzI4MzI4NWNiNTNjNDE4NTgwMWQyZDczMzNiOGNlNzZjMWM2NjFjMWVmNjU4NjRiOGRkZGNlNzgxZjVkYjUyMGM2NjZmZTA3ZmNiZTRiZDVjY2FjYzExNWZiYmRiIjoiIjoiIjoiIjoiYTdkZWE0NWJmY2E5YzZmZTRjZTU2NTAzNjllZWU0MDJiNzQ3MDM0Y2U5MzI3MmZmYzQ0ZWI3MTVlNDllNmZmZjgzY2U4ODQ5NTZlZDRlYWMzYzc2YjVlNjY0NDAzMDQwY2NlMGQ1MzQzOTE2YTkzYmJjMTY5MzNmYjQ1MTQzMmYxNDg5MTQ3M2M5M2JlMmUxNzgxM2Y4MTE5ZjU3OWJmNzIwNzM0ODAyMGIyYWViN2NmNzI1YTE4NmRiMjFmYTljMTZjMjdkNjNhZTI4YjVkNTI5OWYxNjNjZThkMjg3MzlhMWQ1ODM1NzlhMWM0NjJmMGY3M2FiMmI2YjBlYmE1YjQ5M2MyZGJjN2Q5ZDZlMDgxOWQ4MDg2OGE2YjAwMTk3MWU4YzIwNWNjM2I0NzJhYjYyY2JlZDFlM2ExYTBjMGE2Zjk1YzU2OTRmNTEzNjU0ZDdhMjQwYmI2NjcyZWFiYjc0NWJjNjAwMjRjZGZjZDgxNzlmZDNkNTMwMGI4NzhlYzkzZGY0ZGEzOGUwMGZkNjY4MDliY2Q4ZjliZTgzODRjYjE2YWVhZDc3ZGU4MzNlOTBjMDM0Y2UyNGIxOGIwOTZhODRiZjAyODFlMDQ2MmU5ZTNhNDM0OTc1MTRiOGViMjgzZWRkZTIxMDhkNDI1ODM5YWFkYzllNjhlYTQ3MjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJkNzc5ODVkODVlMTMwZmEwMmVlMTNiNTVjYzczNzJjMjM1NjVhNTZmNTg4YzcwMTU0YjdkODFkYmZiOGVmNjZlZTg2MWM3ODFmYTI1ODAxOWVmOTFkMTAxMzY3NzI2Y2E0NmE2MGM3MDVlMGUzYTMwNWFiNmE3YzUxNzllNmExNGM2ZTdkZTkzZTVjOTU5NTY2NjBiYTczNTcwMDNmMDhhMjVhNDJlOWJmYzM4ZmM4ODJhMDYzNTg2Mjg1ZWViZWFkNzRhNzgyOTZjN2MzZTgxMTIwNjJkN2ZlMWFkYjIzMiI6IiI6IiI6IiI6Ijk0MzA3Yjk5MWNjODNmOTE5Y2FlZTY0YzI1ZGIyM2JkM2Y0NTY1ODViNmVkYmQ2YzgyNTZjYmQ5ZDEyYjg0MzBkMGYzYmU4NTdkNDJmMTQzNzIyOGJlMTNhZDUwMTNlNDUzOWJlZjU5MWE4MThjNWVmYzc2NDRkYTI3MDg1N2Y2MTM3MzAwOGM2MTRhMDZhNmZkNWZiNTg5NWYwOGQ1YWM0Yzg0YjUwNjA0OThhZjYzNDU5NjI5YWQwMzhkMmY0MzZjYjVlZmJmMjU4ZjlkMmYxZTQ5MWVjNmQwYmMwNDUwYzA5MjkzOWI1NmE0ODlhODk2NDljMWVhNzAwZmFkZmNkOWMzNmI4ODU0MzIwMDEzZGU2YzU2OTIzNGY4Y2EwYWIxNzFiMjVhZTkzMDQ4ZmU3N2U3MmEwNzMwZjZiM2VkYzJmZTEwM2M4MmI3ODY5OGM0OTdkYjUzNDAwMGRiMjQxMGM3OTQ1Y2IzNmRhNWE0NTE4MzRhYmQ1MDM1YjBkNGE2OTM4MTE2ZWI0NjAxNDM2OGFhYjc1ODIzNTJlMjc4ODY5MWFkZTFkZDMzN2Q3NjEwY2JjMzI3ZjM2NjQ0MTVjODcwYTAyMmY3NWQyOTBjODNkOTE3YzIxMmFlNTE3MzM5ZDU5NmMzYTFjYzRhMWNjODNjYzdhMWJkOTRkNmI3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiYWQzMjEwOTVjODM1ZjJjNDlmM2FiZGQwZjkxMTdjZjhlYTMwYjIzN2RjM2YxZWZmNzcyOGZhOWIwOGQ0YzBmYzA3M2M4MmJmYWUxYjU3NzE3Mjg5MTdhZTc4ZDVlMjJmNDk4OTAxOWIxM2M1ZjA0YTQyMGYxMzRkMWNmY2YxYmU4MTQwOGExNDNlMTM3MmE0NjhjMTMwMzI5MmY3MTdkYWY0ZjE4Y2NkY2I4MWQ4YzdhYzY1NjJkZWI0ZTA3YTllMTQ2OTAwMTIzZjM5ZWY0OWE5MWUzMGUyMmNkY2EyMmMiOiIiOiIiOiIiOiJiZTY4MDcxNWRjOTg5ZjVmMWM0NTk2OTU2MDNiMmI5NzY0NGRmZTE3ZjMwNWJlYWRmN2NkM2ZmMjNhNTIzYWE2MWYzMDc0ZjVjNTMzY2Y4ZTg4Y2U3NDg4OGY5NWNjNWU0NjNkZTRjY2VjM2FlYTEwNDk4ZWZjMGMzMzU2OTJmYTY0OGExZDdlYjc3NDAzN2I5OTNmNzYyMmE0M2Y5ZmM0Yzc1ZWYzZDFhNDczYzE4MjE2NzQ2ZGM3MzQxZGM5ZDc4ZTc0MzEyOTE0NjdhZjlhOGM5NWQ4NmZmNDA3MzM1MjI2NjAxNTQxZGExZmMxMjIwYjUzODVkMTg4MzNmNzkyZWUxM2YxMTY0MWUyZWZiNTYyMzdhZTliN2FiOWMxYTg3YWEwM2E0NDJmMDZjZDdhMThkODUxOGEwMjllMzZlODUzNjljMmI1MmUzNTFkM2I0MzU1Nzk5MzhhMDVmZWU4N2M0NDQ5NmM0ZmYwNDRmMjY3ZjMxZTZkODBmMTQ5ZDU0Y2JiZWY0Y2ZlNWYyNDlhNjcyNGM1M2YwYTIwODI4NjVlZWMwMWNiNzhkZGIwNzY2N2I0MGVjNzM5MWNhNzdmYjQ4MjQ3YjMxYjZkYmMxNWZkZWZhYmFhNmNjOTdkMGJmOGViZDM0ZWY3NWNjNDhkNWFjNDc4OTljODk4MDBlMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjY3NTY5NzIxZmYwMmMzODYyY2VmYTY4MjgzZWNiNWI5YWZiZmViODM5NWFlOTQ0YzU1ZTVkYTFiMjFiNmMyMjcwZjAxMDBiMmNmMDE0Y2VmN2EyZTg1ZGJmMjczOGU5N2Y4ZWU5N2VjYTY5MjEzMGQ2NTQxZmE5MDBlZWVmNmI5ODU4NDk3ZmFhMmNkNDdjNjg3NDU5MDE5MGRhNmQ1ZmJkMzZkMmExZTEyNGE5NDMxMWM4NTA4YjlmNzBmMzRiOTdjMzJkZjM5NDdhYTRhMGJmMTk3YjFhYjM1MTcyMjMzIjoiIjoiIjoiIjoiODU0M2FhMDg2Nzc3NDE1MTg4ZWY5OTVmZDRiZjVjZTUyNzc2YzY1NzRiN2I3NjlhYTYxZDFlODNhNGMzYWM0NDgzYmY5MGI0OTIzNDE0NDNkNmM5MmUxNGZlNzExNDU1OGQxODU1ODI2ZTQxNzcyZWVmZDU0MzUyYTM4ZGE5NDI5M2UzMTdlMGEwNTM0NWE1NjdlMzBlMjI5OWFlZGRjNDk4MGIzZTc5N2I3Yzk4MGI4MjJmZjYyNWRiM2ZmZWQxZjBhY2MzMTRjMTFlMmI2Mjk3Mjc1MGIwZjQ0OGNiZWViMDhiN2RjZmYyMTc2MWIxN2ZiNjNmZDE2NTVlZmFkYmRkNjc5M2UyN2M0NzU4ODYzOGMwMzM0OGFkMGZiYzhiNzc3MmI3Zjc4ODJiNjZiOWNmNDk0N2M5MzQ0M2Y3OTNkZTVjMmE0MTMxZGNiZmU5ODJlZDI3ODdhNWNiMGQ5OWFlMDAxNzA3ZDEyY2FkZjUwNTllYjRmMzczZTdiNWU0YTk5YTI4ZmYxODg0MWY5ZWRhZWQ3NTU4YWMwZDA2MjU4OWNiM2NjZWNhYWQ0ZDlkNmRjMWE3ZGJjYjM1YWVmN2ExNzM4YzZjNjZiYTA0ZTA4ZjY5M2QyOGY3NDk5ZjU3YmQ4YjAyZDk3ZWIzZmIzNmQ4YmQ3NjdlZWVlMDcwOTYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJiMTlkNjkxNmRkMzllYWIxMTE2NWZmMjA2NmZlYTUzZjcyNDg4YTc4ZWJhNDczYTBlMTQxZGUxZDViMTNmZWNkNzllNjc4YjRiMTA4YzY1ZjljMzhmYjJhMmU1YzI5YzRlYTlkZDQ1MDU5M2I2YjNjN2JlNzZlZDJjZjhiYWExYjQ0Nzk0ZWJlZjFjMTEwNWE0NDViNzlhYWZlNDcxZDlmOTg4MWJlN2U4MTI4MmJlYzQ2NDMxYjUwNWNhOGJjNTA0OWRhNTJjZDRjYjA3NWNjODE4YmI3OTY5N2I3MzllMCI6IiI6IiI6IiI6ImFiZjI5Y2FhOWJjYWUxMDdhYzM4MjIwNGJhYTJmNDZjYTI3NDIwOTBhM2M4OTVlNDFiMzQ1YTZjZGE4NjYwZTQ0MDAwOTg0MTczZjU3ZTc5Y2M3YWI4NjlkOGQ5ZjdmMmQ4NTViMTcxYzMwMDdmZjljODJmMmE1MjkxZDUwOWI2NTg0ZjA0MzQ2MzYxZGU5YWEzNzNmNTg3YjZjZThjYzQzZDU4OWQ4NzZjOTVlODEzODkwYzI2Y2VhZTYxYmJlMGI4ODA3MmNhY2QwYjg1N2Q2YjMzYWQ5ZTU2MmM4ZTFhYTE1OTJmZjE2Y2Y2ODNlODExNDJjYWY0OTM4OTZmZGIzMjVlZWY1YWI2ZWYzMjM4Y2MzZWIzYmFlYTA1ODI1ZTU3NTMzYWQ4Y2I3MDdiMzczZDJkMGEyYzA0OGEwN2JiNDBhNWE2OGQxNGQyMWE3OTZmYTk3ZGIwNjMzMWI0ODBiZGMzOTcwMWJmMjI5OGZkMzQwNWE0MmY1ZjZiNzZiOWY0MGRjODY3MWRiNjMyYzU4OGJhODkyMTA3NjdiYzE2NWNlODhhY2NjNzg0MjQyMTZlMzU3Y2VmNTJhMzFlNzYwMWQzZjFjY2UxYjViNWQ3MWMzZDYyMmM5ZjY4MDkyZjY2Nzg3YjMyZDI0MTcxNjk5NmIyMzkyMzc2YzQ4OTA5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjczYWZhZGZkZjQ2YWM5YzUyODA1OWVjNWU0Zjk0MGYxMjBjMTliZWRhOGQ1YjEyYWU2OTJjMWQzYjEyNTI2NzU0Y2U1MzJjMjkxYzhjZTgyM2FlYWY5MjNiM2JlOGM0MzhkOGIyYTgyMTYyYmNlMDIwMjM3NDQwZDM0NDVkNGVmOTE3OTNiOTgzMjAyYjBmODUzMmJlMmQ3OGMzNDQ2OWQyYzY3ZmVhMDU0OTVmZWVjNjdiNzY2MTU5NjdlZmE2ZjZiY2RlNWJjZjE4Mjg1ZGQzZDhmOWI5N2IzNDYzODEzIjoiIjoiNzE3MjYxOWJmNzhjMDg4YzRmMGQ1YjM1OGY2M2NiY2MwMTk2MjBjNmVhOWZmYTMxZTA0MGVjMGQ1MTY2NTk4OSI6ImEwNjcwYTZkZjIwMzNjYjE5YjA4MmEzYzgzZmQyZWVjZGRkOWI5Y2FlYmYzYWVkMGI3ODFhZTlkNGFjOGJiZTIiOiIzOGViYzI0MmYyNDA1NjlmNzkyMzc5YWZlMzkzYTc2Njk4ZmQwN2RjMDVkNWM4NmQwMDc5MWMxYjlkMWQ3OWYxODBjNDM2MGZjOGYyZTUzMzJhOTYxMTk4ZDc0ODY3NTA2NzFlMTRkMzlhMmI0ODUyYWVkZTJhZTk3NDU0ODRjYTA1ZDc0MjExOTE1NzFkMzM0Y2Q3MTRiOTQzM2JhMDI2YTA1OGNhYjU2MTkyMDhmMmU1NGYyZDQ4Mjg2ZTQ5YmQwYjUyOGQwNTc4NWJlYjRmZjg5NTNmZTg3NWNkMmM5MjI3NzQ5NGYyZTMxNWFiMjc5MGExY2Q1OGYwMjIyNDM4NzQ3MGJkN2VkYjMxODFkMmI1ODdlNWMzMTlhMjYyYzc4MDZmOGI3NWU1OWYyODU3ODcxZDhhMTgyYmEwMzY2Y2QzYTk2ODAyM2MyMjU4MmVjN2JhZDJhMjA0ZGUwZWJhM2QyNDU2NmYyMTNjMWQ4OGNhMmIyY2E4Y2FmZDgxNDkxOTM5NDlkYTg4NWJkNzQ0MzIzZjMxYjM5OTU2ZmRlYTdiY2NiMWQ2NGQzZjE0YWZkMDNlMTc1NTk2MmQ5ZGYxZjI1MDcwOTg0NTU1ODQzNThlOTUxZjdmZjg2MTlmMWFhYjk2ZTE0ODFlZGU1Mjg5MjI0MDUzZjYwM2E5OGFlNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJjZDQ1M2MzMjhhZTY4MTUyZTA3NGUxOGI2NjBmMDM2NjhjZjI2NGVhYTQxMDlhZmI5NDE4MTZmN2JmMWY3M2NkNDA0M2Q0NjkyOTQyNDcyNDgyZjQ0ZTdkNmJhNTQ4NmRiZWVhMWNmMWRlNmJhNmVhMTYwNmNhYzQxYTkyZTM0ODM5ZmIyNmI1YTliZWU1ZjRmNDc1NTU4YTVkOGY2NzNkODM4MjQ3YWI4MWFhZWViMmE3MmJlNDA1YzNkMjRhNjI1ZGY3NDc2YjExMzNiNTZmNmU3YWViMTg0ZjczZWFmYiI6IiI6ImM2YzIzY2RkZGVkMTQwYTMwMDc5ZjM1Y2Y5ZTJkZGE2YmIyYjI3N2Q4YTIxMmQyZmNhMWE4M2I1MDc4MDhlNzkiOiJlZGI4Yzg2NTc4ODNhMTcwOTNmZmQzNTVlODE0NWUyNmY2NWNlNzA3MWJhMzhjODlmYzAzMTA0MDk5NmE5NzA1IjoiNjM1YTdkYmI3ZmYxZGM0YTkwY2U5MWJhMTNkNzllMDk4MTllYzczODdjMjc3YzkxOTQ2YjU5ZmFkNGJmNWQ2MDZmYTc1Y2YwM2I2OTA0YzYwZjlhNzA2OTdlNjYyYWVlZWJjN2JhMmU2ZTk0NjMyYzRjNWYzZTE2ODZlNmU5NDk3OTQ1Yzg4ODkyNDM3MTlhZDA2Njg0N2RjMTFlZmFjMTQxZTU4YWMyOWQ2ZDI3NzlmNzAyY2QxZDVmZDBkODJkMjMyYTAwNGRmZGMxM2MwOTE0N2E3N2Q3MTc3NDc2MWFiNGU3NjBhOWQyNzE0ZTlmZmM1MjQwMjYzM2M4YzMwMjBiN2I5ODIyYjE3Nzk3NmYyMWI3ZTk4Y2NjZWE0YTdlZWJlMWNmOWE2MDRiZGZhMzZmMTllNDRjZjQzMDgxNzIyNTg1NzZjMzYxNWNjMjY0MThlODZhNzI2OWUwZjg4YWY3ZjE1YTExNGM1YjhjNmY5NmI4YmUwOTg1NzJhZWM0MTI5ZmFjMzcxNzM2YjJmYTBhODhmMWI1NDgwYzdjODY1N2RkNTE1NDE3ZWRiY2Q5MDJiM2QzZTlmN2UxMGRmNDUxNjBhMzcyODQ5MzNkYWM1ZmIxMDVkYTE0NWZmMTNmNjc3ZDk5YzQ5NGUyNzliMGIxOTkwMjM0ZmI4ZWQ5ZDMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiM2M0ZmVkM2EyNjU4MThmNmEzMjNiOWQ1MmMwNGE5MjY5ODIyM2YzMTM2Yzc3NDI4YjI5ZTFjZDZmZGRjN2U0ZGE0OGQ5MTE1YzVhZDE4YTQxODJkZjQ4MGVkZGQ1MjlmMzVlMmJkMTkwOGRmZDA1OTY0Y2MzZmVmZTUzYzM4NjE1ZjA0Y2E1ZTEyYzA2ODcyYTY5NTk3MWY5MTQ0ZjZiOTdiZDMyYzYyMDA4M2EzNzlkNGY1NmU4MjAxMDVjNWY1YjBmOTg1Mzk5MzZkMDVkNTdmNmFmZGMxOTFjY2U3ZjQiOiIiOiI3MjcxYWZiZWQxYjFmMmJlNTY0M2M1YmRmMGI2MjE4MjQ3YTYxMjhiZmJlMmZmNGQ3NDVhOTI2YTNmMzVkMGZlIjoiMDAwMjJkOGFjZWMwOTI2NmE4NDY3M2QwNTZlN2IyMzVmMDYwOGQxNTk4OWRkZmQ3MDU5NjQ3NTIyY2YzYzNlNCI6IjYxMDkwMTM5OWY0NWVmNWExYjc0N2M1N2I3MzcwNjUwOWY1NjllM2EyZGM4NGM2NjAzZjQwM2NkNDllOTllMjg4YzlhYjc3ZDAwZTk3NGVlYTYyNTQzNWRkMTI2ZTllNzgzNTY2YTcxMzk2YjFiZjYzNjRiMzYzMDVkMTk4NjE1N2ViNTlmZDIzMWI2YWFlMzUxOTAzNDdlMTU2MGY5MWJiMzg4ODIzNTA0ZTU2M2NkNjlmODQ1MzU1NTlhNDQ2ZWY4M2FlNjI1Y2JkMWM1YTRkMTE0ZmYzOTRkNDA3ZjE5YzhmOWY5MDYyOTBkY2QwM2E3YjQ3MDkxYWQwN2YzYjE5MGI4M2RlNTc4N2RmZjQ3Y2M1NGEzZDUzZGQzMWY3NTZlYjVkZTlmN2M5NjVkNzAxNzZhOGVlNzFmZTg2OWU5NjBhZDMzY2M0OTJlOTU2OGU1NzQ4ZjljYTg2OWZmMTQzMjUyZjRjOWVjOGEwYmY5MzdmMTM4ZjdhZDI2OGFiZWVkMjdlMWQ4MGJlZDBjYjdiNzQ0MTE5ODliMzEzMDQzYjFjNjVjODg0N2NjM2RkNmQ0ODUwOTg1MmQzMzkwMzI1M2NlYjA3NGRiYzNkMTI0NzQ5ZDhhOGU0MWQyN2Y5NmY3ZmJjOTkwOGQ0ZWNiZjA0ZjYwMTg3ZjFhNDJjMzNjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjIyOWIzMzE4Y2IyNTE4OWUxMmNlOWVmMjVhY2QwOGJmNTZjNjMxYzYwNThkYWFlNmYzNzdkNThmNzU3NDU3NmE0YzBiN2M2MzRlMTFkYTVjY2MwMmJlODI0ZTZlZmZiOGViYzBkNTQwM2Q3OWJiMzA1NzJiZTQ3YTVlZjg4ZmUzNWEwNDIxZGNmOTU0NzQzN2NkM2E1NjNiNmJlN2ExNThhN2Y2MDFmNzUzNDc1MDlhMTJkYmE4ZDdmMmFiYzdhZmRmODljNDNmYzU1MzgzMTg2NTRmYmM5MGMzZjUxYzVhIjoiIjoiZjhmOThjNjViYTFmNjE5ZDM3NmQ0MWQxZGQ0ODBkNGEwNDQ2ZGU1NmUwYjNkZDAwN2VmN2UxY2MyYmI5OGRlZiI6ImIzYmVkN2M0YzJlMWE3NjIyMDliMWZkMmNlOWRkZGE4ZmU0N2ViNzAyMjVlNjBkNWM1ODg3YTYxYmRlZjAwMDkiOiIyNDY3OTc4YjI5M2FmZTMzYTk2YTcyOTEyODZlZWFlMmIxYzhiNTc1M2VkNGQ0NWIzZDViZTkwNmNmMzBhNjA1MTA5NWNiY2E3OWQyODcxMzM0ZTA0OWI3MjkwNjg5MjRhMDM2ZWE5MTRhNTI0NGZjNzEwMDUzODVlZDZhZDdjN2NkYWFiYzI2N2E4ZWYwMDc0YjE0MTg5NzYzYjVkZTIxMTVkMzBkYTcwZWI4MTUyNjJhYTUxMWU5ODU5YjlkMWNmMjgxMGM5MTBiY2UxOGQxNzlhMDMwOGZlZDZmNmY5MTFjZGU3OTAzMWVhZDM5ZjQ5OWVmODVmNzUyNTE0MGYxYzQ5N2ZhYmQ4NzlhZTEzMGY3M2ZiYmZlOGMzZmE3NDlkZjQ4ZTQ4NGNjMmZjMzEzZDIzNGI1ZDBiNDk2OTA5ODg0MjE2MTEyMDYwNTliNDJmNmQ3MmIwZTVmZGU2YmMxMTI5MWI4NTMzYTlhYTJjNTIxZTU0NzQ5YmMxOTI5YjcxZmYwNWRmYzhmMTcxNmM5ZmIxM2NkYWQxNmIzNWQxOTRhNDhhZTM3NzYyNTMwMGRmNDc5ZDNmYWNkMjBjM2I4ZmRmMThiODhiNTc3NTMwNjVlNTQyZjE0NzI0ODA2NDI3ODYxMWU5OWFiOTJiMzNjNjhhYWJjNGRhMDhhNDliZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI0Y2ZiZmRhM2ZlOGFlN2ZmZGQ4NDUwYTUyYzc4Mzg4YTZjOWQ5M2M2ZTNhYjUzN2M5MWRmZmUyM2I1NjkzMTU4Yjc5MTllODc1ZDllZDY4MjdhMzNkNWVjNWJkY2YwNjFjMzExYWVlMzY5NTNkMTNjMTZmMGU1MGY0NTU3MDVhOWFiN2E0MzZiMDM5NTUxMTg3YTBmNDJlNWY5MGI0MGNiZDQ0ZTk4Y2Q1Mjk1NTUwY2M0NmUzM2JlNmYwNzNhOWU2YzAyYWNlNmIwZjg5NmY5ZWM1NmFiN2U4YmU3YTA3YiI6IiI6IjlkMTU1ZDY3NTRkZGNlYmFhM2RkMjhiYTI3OTQ2Y2UzZTIyZGUyOWRjMWRiODM1OTM3ODM5MDI5NWU1YWEyODciOiJlYzYzNGZjODZiZmI0NWY0OWExMTk3YTcwODc1ZDdhZGRlYjI1N2YxMjQ1Mzc1YWExZjAxYjNiYzM1OWVkNzNiIjoiNDZmNWE2NDAyZWE5ZThhMDA4OTI1YzhmNTU0MGM0MzY2YzU5OTE2NmJhYWU4YWM3NjJkYTEwMTU1MDM1MmYzNWVkOWQzNGY4MmU3ZTJjZTA0MmNkMzU2OWJlNTU3ZTAyYWE4NzE2M2QxZTQ1MzkwNGM1ZmNjOTk4ZmE2NGM4ZTE4ZmRlNjFhOGU1NGMyMWFkNGRhMDYwOTQzYWE3OWRlMTQzMTcyNzY0MTRlNzFhOGMxMzIwNTNjNGRkMzVkYTBkYTFmYmY3ZjBjZmZkMjY0ZDg4N2M4YWU0ZjM1OGFmZTdlOGExYmVjNjBmZTdiNDY5NmE2YjFjMDBmYmI0NjAxMjkzN2I3MTViYThlYjE3M2UwOWMxMzE2Y2MzNjE4MTliMjRmNzI4NGY5ODNiNjgyNGMzOWVkZGYzZDBiYTU4ZTgyYTJjNjAzZDg1NGNhZGM0MWQ1YjEyYWYwYTY3YjM2N2Y0MTFjNWM5MTgyMGU0MTRlMzBiM2QyY2ZkZTY4NzZhM2QxNDRhOTAwZWIyZGNmY2I3NTBiZGNmMDljMGEwMWRiNzlhYWJmNTNlN2YwNDViOWM4MjRjODY2MjI4M2JkNDM3NmM3MTc5MDk2YzVjOWM3ODRkNmMzYjk5OGM0ZDExYjdlYmMwMWE0YTU2Mjg1MmI5YjgyYmQzMTNmYWUwYWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiMzM1MWEwODNjMWY2MDMzYmU1Y2M4NzllYWYzNGUyNTU0MmViYWJiMjY3MWI2NWY3MjZlNzZlZDcxMWFlMDczZTliZDdlZjZkNzg4OGQ2ZmMzMWU1MWRjN2Y2MGU4YjA3Y2M2ZmU5NGVhMGYyMmNlYTFhZDU0ZmZhZDA5NzAwNTk2ZjYzMjBkOTgwNDg4YWQ0ODUyN2Y0ZTAwOTM3YjZmNzM2ZWJmMWI5MTY2ZTIwYzViODEyYzhiODVhMmEyOWQ5MWViYjAyMWIxOWQyMzc0ZWQ0ZTI4OTVkMTUxOGU2Y2YiOiIiOiI5NDk3YTFjODU3OTY4NDZkZThkOGI3MGQ2NmQzNjllZjU5YmQ5MTIwMzY2MGQ2ZGYyOTM1MDAwZThiZmNmZTcxIjoiOGE2ODFkNmNiZTFjZGE1ZTBmOWVlYWVkMTJmZGFjNzViN2JiMzNkMjhkNjg1NWQ0OThiNmM2MWNkN2ViY2E1NyI6IjUxNDhmY2Q3YzAxZWVkMWRhMWQ4ZjY4YTcwNjI2OGI1MDI4ZTRmMzQzNWFjNWJjZWY5MjMxY2M4MWM2YjY4MjMxNTZmZjc0MzJlNTE2NTFkMGQwMmQ5MmUyMjI5N2RmZDEyYTlkNTA3ZGQzMTM3Y2E4ZWYyMTZmOTY5YWI2N2Y1NGM4ZDVmZDVjMjJjOTE1NGI2Y2FiYTRhMTQ3Y2U0YWEyMDY0N2UyYmNkYWNiNzI3Y2IwODEwZTQxMDY0OTRkYjBlMjVlN2U2ZjkzOWQyOTEyOWIwYzVjZjQ3YWRiMzU2MjkwMDZlNmY1YzdjMTk0NmMxZTY0N2Q5YWVjYWM3ZmNjNDg4YTFjODY4Mzc4ZTAxNGZjNjhhZmI2ODRlMWUwNDNmNTNmZGE0NDMxZmYwMzExMDdjYzIzODMzOTc1YmRhYzA2MDc4M2Y5Y2RiZTk2Y2ExNjRlZDc1YzMyODBmZjM1NWUyNWUxNjVlYjM2Y2RkNGQ2NTFjZGJlYzA1M2EzOGI2NDA2YzI2YWI2ZjE2Y2QwZmZlMWU4ZTVhMDE3ZTI1YzVjOTNmYzdiYTExMzg1MTY0MzM3ZDU0MTIzYmEwM2U2NWMyNjFlODM3OWYyYWIyNGFhMGQyN2Y1N2I5ZDdlMGZhODI1ZjA2OTg2YTRmYjliOTk3M2FkYjg3OTE0Y2M2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjM0MzliNTdhMmQxOWRiOGI3ZTEwZmY5YTM0YWMxZDI5YjhkNzg5YjA1ZjRjZDJiY2IwMzc2YzZlMTg0Y2ZkYzY5NWM2ZTI2YTBiMTViMTFhNjg1NDM4ZjQ4ZGJkNzQzM2Q2MzExOWZmZmI1ZTMxN2Q5N2E1YjNlMjNmYTYyMjgyMjFjYWFkZDE2M2I2NmUzNmU0MWQxZGY4OTQ3M2FkM2ExMTRkMjVjODA5MzEyOGUyMjE5YTdmMjIwNjYyMWI5OWViZTY3M2JiY2FhOWEzNjlhYWQzMzM5OTI3NzczYjU3IjoiIjoiZGQxNjAyZjgzMzA1N2I3N2E4Yzc2M2VjNWFhMzAyMzI2OTIwYmMyZGRhNDZiNGI4M2IzNjAwNjczYzFmNDYyNyI6ImUyMzI4YTEwOWE0NTQ2ZjQzMTFiYmUzZGVjYjUzYjNhMTAyODk4NGFlNzNlZjg4NDliZjY4MmVjMjljOWI1YWYiOiJlMDIzMjZiNDc3MjcxMzY2MTI4Y2ZmMmM4OGI3MDM4MTRjNTI1NDc5MzZiYTkwZTc3NmUzODM2MjBlYWE2ZjJhMGFhZTFjYmM2YmY5ZmU4YzM5NWMwODhlZGYyN2VkM2EzZWU2ZjI0MmRkNmE2YzNkZWViMTlmYmQ3YWIzZTdkMjZiOGM2ZjQyZjg2ODAzYjg4NWM3MzNhYWZiZDFjNTllNzdlNDMyNzdlMjQ0YzBlOWFmYjA2MjlhZjUxMGQwM2Y2ZWI1NDdiYjBkNDU1MTYzZDE0YmVjYTUzYWZiNGU3NTZiODJhYjU2MTA1MDJjMWQ3NDQwNjIyMjE0MmYxY2MxYTQxYjQxODhkNzk5NDM5N2E3ZWU3MTk1NDgyZjIyY2ZkOTk3YTYxMTgxNmUzMzFjYzYyMzg3YzhkMjgxNzdlYTY3MjdmYzc3M2MxNjI3ODE5NGI0MTlmN2U5OWZmZjI1OTNiYjBlNjY0NGFkNjUzYjYzZGU4M2IyNDRmY2Y1MzFlYjZkYjU3MTZlNjBkYzI2MDUxMDkyMDc1NDUwNDE0NmU0YzcyN2FhMjliNTY1OWFhOTdhM2VjNjNkMDdmOTM4NzI3N2Q0ODdlNGI4NTVhNmVjMDUzMjg5YWY2ZTE3Mjg0YTZkZWFlZmJkNTI2ZGMzYTM3OWU1ZWY0NDM0YzY5OCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJmN2M0OTk1Mzc5MDc5ZTAzNmI5YjEwZGI2ZjE2M2RiMjNiY2U3Mzk5ZmE4YjYyNjgwOTlmYTVmMjc5NWI2N2VmMDZlYzY3NDE5N2M3M2ZlNDdlYWYwYzQ5ODZkZDM1NjYwNTVlYjE0OTM0YmM4ZDUyNzJiYWE3NTEyNjdjMWRhYjFkNTJkYTYyMDRhY2U2Yzg2OWJlZjU2ZWFjMDA2YWJlOGVlZDU2NTY5M2UxODU0NjE5MjY2ZDQwMGNkM2Y3MDIyMmI2YzY3MTEyMDE3M2ZlOTE4ZDIyOWQ1ZTU2Njg4NiI6IiI6IjIzZWM3ZDZiYTlhNjY2YWI0OWRmNDVlZWFjMDA2YWQxZjRmMGUyYWE0ZGEyMDYxZDA0MjliNTEwZWE0M2Q5M2QiOiIyOTkyNTNmZmIwNDgxZDJhMWRjMmNjZmE2NjYxMjNhM2JkYTY1MjY2NmE3N2I1MmEzMmU0Y2Y5MmE2NWYwZDYxIjoiNGU0NTczODMzZjRlZTVkY2ZjNGZiMDU3ZTNmZjhhN2NkNjIxYjFjN2E1MWZhNGRiOGQwMmU2YjYyNDYyZWE5YWI2MjQxNGNmYzMyNjI1NjkxOTJhNTk2MGY4YzNhYjE2NGVmMjk3NGVlMDM4MTUyODExNTllZTUwMjcyNzMwODgxZDk5N2EyOGVhMmY5YmJiMmQ3ZjJlZWE3MTk0MTZiODBjNzM1OThlNTI0ZjVmZDliNDFkMTdmMzg2YTMwYzE5NGUyNzg4Mjc4YTYxZmUzZjU2MzMzOTVlMjhhOGYxNDJlODk3ZDNiNmNmMzRjMDBmYzg0YTQ0MDdlMDgxNjUxOGIyMThlYjA4YTlkMTYxOTgxYzg0YmZkM2U0N2YzYmEzNmY1NDU4N2Q2MjA2MGUwZmNhNjUzMjRhMzMyYTlhYmE3Y2MxZDBlODQyYmRiY2M4YjFiYzU3NDMyZjlkNzBlNjQ3NTk1OWRhMmZmZjI1OTA0MzhiZDdiNGZhZjE5ZWJiYWFiMTc1NjU1MTg5MDUwNzgxYjdjN2EyN2U5ODY3MDczZTFlZmU0NWI0N2JhM2Y4NjQxNDIyOWY1ZDJjYzA4YTFkODAxZjczMWMzMDk5Yjc0N2M2OGMxZTZjYTg2M2E4MjI2NWQzYjI4MTljYjBkMmQ0ZTgwMDc4ZWU3NTg0ZTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiMzc2ODI5YWE5MjlhYTRmY2FkMzdiNDFmM2EyM2JlYzI4Mzg2MzI5Y2E2ODkzMTdjNDliZGMyYmVjY2Q1MDY2YjkyZTc2M2RiZThhODBmYTFhMWQyMWMzODEzMGZkOTk5ZGYwNTQ0NmJiZjEyOGJmMjM4MzRkOGM3Y2Y4OWNlYjVlZTZiMjExMjRlYjZkNDk2NmYwZjVjZGZhNTllZjU4NTkyZGQyZGVkYTJmNjExYjZjMWFjOGVhMWIxZGZiM2E1MWRjNTc2MGMzYTdlODJmZWU2ZjA5Y2MyYjdhNzRkN2EiOiIiOiJmMTRjMDdlMGNhODg2MzczYzU2M2NhNTQ0YzNlZDA2OWRlNjk3YzUzOGFmYWYwMDliYmZiZDkzNTk5NTk1NWY2IjoiNGQ3MTU3OGZiNWEzMjExZDNiZGRhODIzOTY1MDdmZTUxOTNkMjFhMmY3MGU2YzJiMDM4MjhmZmY1M2Y1ZjZhNCI6ImY2ZGY5OGY5YzRmN2RjNjQyMDhhYTU4MDRiZTg0M2FlOWE5ODliYWI3M2Y2YTM2YjYwM2QxNTQ5YmEwYTU4Y2I2NTExYmY1Nzc2YTc4NjE0MWU0ODMwNTg1NmIxZGI2ZjY0MTk3NWQwY2I1MTAyYjUxYjUzOTQ5NjQzOGNmNGNiOTA1NzM4YzkxOWUxYjA2MDkyZjFhZjg5MzgyZmNhYjRlMzY1Njg4YWRkZGYwMmZjN2ZmNjQwZTExMWQ1ZjNiYjJjMDZkYTkxYTc3MjQyZTEwNTVjMGI1NmYxN2FiZTA4MDdiMThmNmE5M2Y2MTM4OTlkMzc3NjJiYWI2MDdjMDU0NjdkYzg5ZTU4YjIxYWM1MGJjMDFmYTUyZDFlNjQ5YmY3NDg0MWI5NjQzYWRiNDY5OWVjNmVjMGJiNGQyOTdjMTM4ZmNlYzFmNDI0OWI5ZjlhYjYwYzI3NDNhYjE4ZWE1ZTIwMjExNDI2MGVkZmY5M2Y0MTQ4Y2E3NzJmOTQ1NzIzOThiYjM4N2I3OGNjZjUwZDYyMDBmNzM2OWJkZWM0NGJhNjQwM2FlMzYzZjNiNzEwZDQ2NGI2ZjkzODkzNTkwMzBiNjFiMmI2MjYxYWRkZjQ4ODQ4M2UwYzVlNGNmODU0ZDliNjAxYTFiMWFhZGE4MDNhZjhmZWVjYTkxM2RmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6Ijk4MWRhODIwZmE1M2U3MTg0YTFhMjE0YTExNGE5NDM5NTNlZWRiMzllNWJmMmMzYWE3MDI4YWFmZTU3ZTQ4MmJmNGMwZGJkZjg2MmQ1NWFmYmQwZjBhOTdmNmM2MTIwNDcxMWI0NmE4ZjVkMWE2OTA4OWFkZDc4OWYzOWNjM2Q2ZGM3ZmQxOWFmNmE2MzBmMDNiMTQ5NmQ4NGFhODNmMWViMjRjMGQzNTQ0MDdmYTk2NjRlZTVmNGM4ZGU0ZWE3NWYwNWExNzYyMWFhOWRjNThlZjM4Y2RiOTE4NGQyNGIxIjoiIjoiMmY0ZDZiNDcyNGNiNzE1YjBkNTUzYWUxY2E2ZjMwNTVkN2MzOThjMWMwMzFhM2E2OTk0NmYwOTkxMTZkMTNmNiI6Ijc2YzFkNjc5Nzg2ZjE3NTJiY2RlMTEwOGI5OTc3MzExZjRhZjllM2Q1ZjVmYjllYjUyNTY1ZDBlZmY5MGI0ZjAiOiJhNWI1MzFhNTFlODExOGYzM2IyMGVkYzc2YWRjYzM2ZmIwYmE4ZTdmNzUyNTE4Yjg0Y2U3MTI0NzljZTc0OWVhODkzZmQzMTM2OGIxMGRkNjgzMmY5ZjJiZGJhZTQ4OGRkOTY2OGE4MGM4MDkxZGRlNjFlNTgzMzZhODE2MGZkN2ExNjdhYWU3YTFkMGYwYWYwNzdmNjAwYjVlYTIxZTY0ODQ3OTAxYmE2NThmZTQwZjIwMDgzOTA3YjI1YjMwY2FkMzE0Y2JkM2YxOTRmOGJlNDA3MzU5Yjk0YmU3NGIzNGUyYjRlMmNlNzM3MWMxMmMyOGM3YzdiZjAwMzJjMDMzNzFhNjI0N2I2MGExMTNkNTZjZjkzOGQxZTRlZWY4NTc4NWZlYTkwZWQ0NWExYjUwZmE0MDIyOGZiMjNmMTU0MTc1ZmIwZDQzNmFkNzI2MzA2NjU5ZTJlOWI2YTgxNmU5ZjA3MTY3ODFhNzc0YjJjMzM4NjgxMmU4NzJmZWE5MTkyZmQ5ZmUxNDhiZmQ3YTk4N2Y3NGQxYzdlN2I2MGEwMGJkZTNlNGFiNTNkM2ZiYTVkZjBlMmNiN2EzY2M2YmQ0NjJlNDNiOTM4NzFiM2UyMzg2MzQxNzQzMjJhODgwNzhjZjM4NmZiMjEwYWE0ZGYyYzY5Y2VkOGE0ZjcyYjJkMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiOTA5ZjMwZjcxODZiZmJhZTA2MTVhNzAxZTNmYzM2MmZjNmU4Y2U0MjE2MmNkMTZmZWQxMWVjZmY3MDc2MGQ3ZDA2NzllMGI3OWZlYzMzZjgzYmQ3MjJmMmJjYTMzOWU3OTFlNWRiN2FmMTZmYTYyOWM4NGQxZjQ3NzhkMWIxZGMyNGM5ODEzNzExNTA3MzQ5YzI2MzE5ZTE4MDg0NzU1Y2MzOTJjOWMyZjIyNDE0MDZlYmVmMzk4NWE0Y2NiNDZiMmQ3YzVmOGI3OTMyMTE2M2JkZmMzYjVlMjFlYWRjODkiOiIiOiIxZmNmZmI5YjA0N2YyZTkwNDg5OWViNmFhODE1YjJlYjUxZWQ2OTZkYjI0NzgxMThjNDIyNWI3YjMwOGNlMDY5IjoiYmVjZjBjNDFkMzkzMGYxNTIyNjBlMGU2ZjA2MzU1YmQwYzE3MDFiODFlNjk5ZmZmN2Q4ZTVhNzUwZDU3Yjk4MCI6IjQwNWNiMTgxODVlMjk1ZTM1YmI4Zjc1OGIwMzkyZDhlMzIzNTU1NTI5Yjg0ZTFkZDA4MjM1ODZkYzM1ZjI1ZTI3YzVhMjZkYTg3Y2E1N2IxNTQ0ZDA0Yjk0Y2NhOTY3ZGY3ZDdkODllMDBkM2M5MTk5NjBlNDg2ZTZmNGNlYzZlYWMxOTUxMDY0ZWZiMzMxMWU0YmUzNDg1NThiYjY5MzQzODc1MzQ2MGM2NWFjZTE0NDc5ZmNjNDQ5MTVkYzZiMjIzOTAwZmM4NGFkZDA0YzQ4YzU3YjJlOWFhMTNjNjlhMmNmMmIwYmRkMmIyY2M3MGM0OWEzMmU1ZmEwNjA2ZmIxNTIzYjFkYTg5NGRkN2Y2OTczMDUwNDcxYTcyNmZhYjNiYTk5ZGUzMDMzZWE1YTBjMjFlNjg3YTVlYzlkNjZjYTg0NjBkNzRlNWIxYjk5MTQzZGRmZDRhZjZkOTVmNjY4M2IxMDMxMzNjYWFlNzc2NDlmMDA2NTJmMWU3ODI5NTEzNGVlNDJjZjM1YmNlYjdkNTJmNmNhY2I0MWVmZmJiMmVkNjYxZDhmODliYWI1MWE5MGM3MDg2MmVlNWZkNWQzYzYwNjBiYTBiNWE1ODk3Zjc5NmY0MTA3ZWZiMDhlNWQ4MjUwMTY5MjQwMTczMmFiZjUyMzdlMDU4NWM5NDgzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI5NTg2ZWJlMjdkZTA4OTIxODQzMzE0M2ZhZGM3NGVlYzZlZjdjOGQwNzc1MzZmN2VjYjYyZDQxMmVmMGUxNjM0MzdmNmQ4NGU4YmM2ZTk3ZWMwMjA5NzgxNWE5OWMzMzhjOGYzNDM0YjI4NmVmMjZiMWMyMzRlYmYxYmIxZDIxNmIxNGI0YzNiM2RmNDhhYzMyODNiM2VjOWU1MGM5MTI0YTcxN2ViMzk4OTQxZWMwODAxZjk1YmE2MTA4YmQ5Zjg5ZDlmYmQ3MmQ2MjQ4YWU1MDk2MTM1NDI4MGQ5MmRmMyI6IiI6IjY1ZDA4ZGE3YTFmYzM5MGYyNDAwZWZiNTc1MjBlMTZkYTkzMmJiZDMyOGEyMzYxNjNjNDBhNTQwZGU1ODU0ODgiOiJhMWZmYzIxN2U3MWQxZjEwNDdhOTY1N2Q2MWZmYWQ1NTlkYTNlYmI3NWQ1YWY3NGYzYTFjYTlmYzViOTY0Zjc2IjoiMGUyOTU4MTY5YjQxMzA0NDkxNzEyNGY4NjdkOGZkNGI4NjU1ODc1MDVkNGExODA0MDAxMjMxOWRiZDQ3MjY4OGJkOTBhMjg3MDZjNTZiZDE1NDkyNzFiMTIzN2E1Y2JmZjE4NDRiOGUxOTQ3YWI5N2QwYjFkMzNiZWM1ZWEzMmJhM2JiYjViMDk4NmQ5NWI4YWViZmVhYTgwYjBhMTMyY2NlZmU5MDEzY2VlNGZlODQ1OTdjZDJjM2RlZWM0NmU1YzQ0MTljZTIwNjA0MzNjZmI2OTZlMzRjNmYzZDYyOThmNTAxYTU2ZGZkODVhYjhhOWFlODE2M2U1ZDA5YzcwN2NkNjlhM2RiMGExZWY0YTFjYmQ5YTc1Mzk2ZjdmYWNlNWVhZTlkNjM4NzU4OTgxMDdlMzA0M2NkZmY3ZjZhN2ZlZDQ4MzYyNzkyYjdhNDM3NzFmMDZkOTcwODU1MjVmNWYzOGFhZjM4ZDViNjY4ZGJmODQyNzZjMjU4MDI5Y2VhNzQzNWFhMTA3MzM0ZTY5ZWNkNTBkZGRkZmM4Y2Y1OTIzNzNmZGQ3Y2MyOGViNzNlOWZkMmQyZDU0MWQwZDg4ZjlmYTFiYjYyZWRlMTc2NjdmNGMzMmNjOWFlMjAzOGZiNzc2M2I5MjJjMzRkNzBkNTgwNWQzODk2YmY4MzE5Y2QiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjkwYjgyNGI3YWExNmI0OTU0ZDk5YzNmZGVkNjY5YTgzZDY3NDYwY2EyZmE4NjE0NjhmMGZmNmU4ZWY2MWFhYzdlZmY4NzhhYzM0YzJiYzU5YTE0ZGFjOTY1OWNiNTU4YjExOTg5ZjhlMzRkMWYyN2M2OGNjZDcxZjQ1ZjdhODQ4Yzk0Y2VkMGIxOGMxNzVjN2UxZWI1MGZlMDIwNGNmNjMwZTM5YmEzZGVkZGVhZTVkZTRmMmMzZDI1NGQ2ZDlhNzQ3ZjQ4NmUyMDEwNmY1YTZkN2IwNWE2N2ZlNDc0ZTU3IjoiIjoiYTc2YmEyYWMyMzJhMjgyYjM4MjlkOTQ0MjU4N2ZjZmY0NjkzMzUwMjMyZTk3NjQzOWI1YjlkY2JjMWI3MDRjOSI6IjA2ZWFkYTQ0NjAwZjVkNWVlYWMwNDZlMTZjZjU3NmQ1OWMxYmJlNmM2MDhkNzY4NDQ1M2YzNTNhNjQ0Y2QwMzEiOiJjNmQ1MWY5YWEyMTc2NTViZTg5YTdiODUyNDFkYWMwY2Y0ZjU5ZDk4MzMwM2MzYzVlN2MyNzljZWRmMjk4MDcyZmExY2Q3MGEyMTgwYzNiM2E1OGY1NTNkNmQ3ZGZkZDAxZjk5NTQwMTk5M2VkNmYyY2MzNzc4Zjc4MDI2MmY5Mzc1NWM5ZjhkNTRkOTRlNzAyZGQ2ZGY4MmE3MzdkNTdjYjU3ODRmMDM1ZTdiMjk4M2U2MjUzZDBiMmMyNmU0ZGM3MTgyZDVkMDY2MjhiZjdmZjhiZTExMGYyOGIyNzRiZjJiOWNkYmMxNGQxNmZhMWM5ZjJmYTAyMGIwNDcwYmI3NzQ0ZDA0MzMyYzIzYmIxOThkMmQ3Zjk4ZjE1ZmRhYjFhZThiZjMxMGRjM2I5MGQxMzJkNzIyYWIxODNmODA2Y2RiMzI0YzUwMzg5OGY5MWQ5Y2UxMmY4ZGQxOTQyODY3YjFhMTY5MDg5Y2YyNGYxNTA4MDc5ZGI2MTg0YWI0ZmJjODAyOTJjNDM5ZjdmYzIyMzBjMjJiY2YwMjJhYThlZjI5ZjIzZmQzY2I4ZWZmOGZkOWYwMzNiNTYyMGQ1ODQ1ZDRlYzVkMGM4ZjVkNGY3ZDAyZGNkMmU5ZmViMTQzZmE2Mjg4NWJmMTQwYWFjYzdhMzE2MDUwOGViYWU4MTgzYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiMGFkMGVkYjUwYmNjZmMwZmI2OGI1ZTdiNWVkZjhjYTMzOGU1NDU3Y2ZlNDRhZjNmYjVkNjgzZGIxMjBjNmEwOWI5OTA3ZGNjZjEzNWM1Y2QwYTk3MjAwYWJlMjQ1ZTE0NGZhNzAzNjVjZGIwNmRkZGQ3YjU5YTU1NzgzMWVjOWMzYWMxNGIzZGU3OTE0MjFjYmFhY2M2MDliYjc2NTljNGUxNzhhNzE1OGQ3NjUxMzY5NjU1ZjljNTcwNjc0ZmVlMmM1YWVkOTYxZjNjNmJhYTBhMDkyMzYzYjM4OGFkZDUiOiIiOiJmOTg4MGMwMDIzNDg2YzhjOGRjYWMyYjQwMTAwYTZlMmJkNzhiOTI4OWUyMGE3MmY0Y2JmNDZmYzE1NjYxOWY2IjoiZjViZjE5MTMwOWQyOThjZTRhMzlkYWE2NjhkOGM5OTkzNWRmOWFlMzFmNWJkMWZiZTc3YTM2ODI4NThkNWMwYyI6ImZlYmVmYTlhMjNlYjRmMjM2ZDEzMjFkOWFiZWRiZTBiZGE1ZGU2ZmI4YWU0MjU5NTEyZGJlM2Y0ZGY3ZTAwNmU1NzFkOGI1NWRiNmE0MzhkZTYzOTE3YTJlNDc2NDM1ZWRlNWFmNzc2MzAyNDFlN2EyMTMwMDVmMjA1ZDM4NTczNDhiODI4MmU3OTA5NzJlNGE1OTgzMDA5ZTA1MmNiYzZiZmQwMGMwODMwNmQzNDZjMzUxZjMyYTdjMDFlNTE0MmNjNjVkNWU5NTFmZDkxODZhMDk4ZjZmMjJhNWU0ZDVhYmQ4MDk4MmQxZGE4NmMzOWIxNTI5ZTM2ZDIzNDFlMTg4NTk1MThhNDI1Y2JjMTk4ZTlkYmE4OTU1OTFhMWFlMzk1YjE0OGYwMzNlMTM3NTkwM2ZkY2I0NzhlODQzOGUwNjIyNTQ0ZDZjZDk5MGU1YTQ2MzM2OThkZWU1MGE2MjNhMmI3ZDg1OTZjY2Q2NDdkYjliZTFjMmU2ZjM4M2U1MzE2MDgxZjJjMDc2ZGNjOTg0ODMyNzllODc1OTRkZGNhNWVjNGVmNGY5ZjUyNDM5NTcxZjY3MTA4N2JiYTAyNzA4YWYxMDdiNzcxY2Y1OWJkZDM4ZjRmNWI2YzM2YWFlODExMmY4NWE5YjI4MjhlMDQ4OTg4YmNlYzY4MDk4NjYwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiIwNDI1NzU0ZDE2MTBjMTRmNmJlOTI4NjA4ZWEzY2U3MzFhZTgxOGIyMDBjNTQzNDFhZWIxNzhmNjllMTQ1ZmM2YmQzODQ3MzkyOGRhMGQzNjM4YjA2MjVkMDZmNmI5NGZhMDA5ZDkyMDIzOGI1OTFjOTdlZjQ4YmRhYzkwMjFmZDg1ZjE5Y2U4MDlhOTYyNzE4M2UzYjYyMTAzNmZkN2UzYmZlMWRjZjUxYjA3YWQ0NWVhOTI0ZTJkOTMzZjE1YzExNzI0MzJiMzU5YWQ3MjE0OWU1MWU4NmU1NmJhNzc2OCI6IiI6ImY3NDZlODU0MzM4ZDgxZDg5ZTgxYmEzNjU1ZWFjNTY1ODY2YjU2YjJmYWNjZGM1MGEzNjE1NmZlMmZhYTY2MWIiOiIwNmU4MWMyZmY2MWI3YzdlNTFmNTIzOGJhYmMzODg4N2JjMTBkNWZlY2Q4NmI3YTZkN2M0OGJhZjRhYTVhZGNmIjoiY2Y5YmRhYWE4YmUwNjAzOWRlOTg4MzNjYTkyOTQ3YWVlODRhYjVhNDNiNzFhOTA4NTViMmJjZGU5YjZlNjkyNTVhNWE1ZTI0YzFiYzhhZGUyYjYzMzhiYWJhYzhmYzBiOTA2NzRiYjcwMDA4MDk1MTQyNWNlNjdjNTE2MzZmMzUwMjUxNzFmNTg0ZjYyY2E0OTkzM2YxMTg4M2M5ZmVjNjY2MzA1ZDg4YWQyZDM1OWFjMmUwZjI0NzJlMzY4MzMyZGEyZjVhMTVmODU3YzhlOGJjN2I0ODk3ZjdlMTIxODdhZDkzOTVhNDdhOWYyNzE1NDE1MzdhZTFiYjIxN2Y4OGY5YjY4OTkzM2U1YzZmY2JiYzJjMzlmNTkyNDg2MmE0YTY4ZTA2OGQwNmE0ODVmMmQ4MDU4M2ViNjYwNmYxNzdmOWNhNzYxOGUwZWMwMTg1OTZlMGI5ODM3NmM5NWZjMTU5ZmQ2OGFmZjFhMGVmMzUxNDUyOWQ0YTcxN2I4ZWZiN2I0NzY0ZDExYzA2MTlmZmIwYjIwMTA2YTVhNTQxY2ZkNGU2OGMwMDJiOTliYWU4NWYwZTk5NjI3YzkxYjNkYzdmMjdjMjQxNWY3Y2VlZDIxYzU0MmFmMTcwYmIxMzk4MzM4MDQxYzE4MWRhNDBkYzk1YmIwZGVlYzZkZWNiNDgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiZDdkMmE5YTBiOTdmNDU2NGUwNWRlNmRiN2JmMTcwZDJhNzI2ZTBmNWViMjk3MDgzOWM0YTBjNjg2ZWYzNzJmYWFhNWQ4YWZjMDdkN2U5YTQ0OTA0ZmU5ZjczNTlkOGI2MjA1YzdjZTA2MDIxZjVkZDYwNjU2MjQ3NTAzNjk0OTYwYzc4YWE1ZTNiM2Y1MDA4ZDQ4YzZhMjY0YmI5NGUxYzI5NTBmNzM0NjExZTNlMTAyOTFjZGMwMTk5YWI5MDAwYTljMmViNzQwODFiM2MyY2I0NDYxYWQ2NDA2YTM4ZTciOiJkYjk5NDg4MDg5NTI0MmNlZDA2ZWIyOTE1Nzc1NmIyNTA1MjI1N2JkNDljYTA4YzcyMDhkNTFlN2IwZGRlZWI3IjoiIjoiIjoiNmE0NTYzOTM2MDEzMGQwYTY3OWY5YWRkY2JmNmY0NmI5OTQ1YjNiMWU1YTcyZWIxNzUxNDRlNjI3ODZkYmNiYzgwNzNjYzJiZThjYWM0MjFiOTU3NmVjNDk2NDUyZWNjMWE2MTFiMWU1YWM0MTUwMGM0MjEzNDA0YTIzMTEyNDdjNWU4Mjg3MzhhOGNiNTVmNjdiOTdmMzlkMDVlMzZlYjI5ODcxZTNkNzA5ZjNiYzdjNzI1NjdlNzc2YWU3MzZiNjNjMDZmNWI1N2MxMTI3ZTMwNTM4N2IxMTVmMTE3ZTMwMjcyN2QwNDJjMmMwOTc5YjcwZTJhMDY3NGFjZTI5MjJiY2MyODM5YzFhNzUwNDRmNzQwNzkwYjYyYjA3OGJjM2NiMDU2YTM0YTlhZDcyNzFlMDJhMWZhODZlYzg1MjI2ZWNiYjliMTI2YzRhOWIzYjBiMGY0YWM2OTE1YzY0MWFmMjhiMzRkN2I3ZGE2YmJmNGNlMjgwNjcxYzUyZWI5MTkxMDBlMTk4YTNmZWVkNmI0ZmQ0OGMwMWQ4MzZjMzYzOTA0ZDY0MGU0NzVlMGQwZTZjNmNlNWYyNWQwYjE3NGM1NjFlY2JiYWUyMDFiYWM1M2Q4NDk5NzA2ZDgzZGE0M2MyNjhiYzJjNTdlMjQwNWVkMDE2ZDYxOTg5NjRjNjAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiODIwMzc1ODRmODAyNjY5ODhlZjZkMTVmYTYwMDM0NzhjMjBkMzMyNjU1MzBjMTc2N2UzYzIzZjBhMGE5NWQ2MWM5MjYyYzI2ZGJkMzcwODMwNjZiYWNjZTVmOTNkYzg2ZTJjYjk1NTIxZmE2ZGNjOWU0ZDAxYzQ2OWM0YTNmZWUzMzU3OWMyMTA1ODk3NWRkOTFmOTA0M2Q1ZGRiMTU0ZjUzOTBjNGNhMmM4MTM5MzhhODI3MGI5NTRhN2M3MTk3ZWMzODJmMDJjNTBkZDE5NTk4MDE3ZDJhYmQxZTQ1ZWMiOiI1MmE2Y2M5ZmU4OTE5NDVlNTAzOWU5NTI3MWNjYzQ0YmE5YWI1N2Y2MjA4NjgzN2VlNjQ0MDlkMGZjYWYxOTczIjoiIjoiIjoiYzYwZjNiY2E1ZDZiMTEzMGM2ZmJhOTNlM2RhOWI4MWRkNzYzODI4Y2FhNWNlODFmYTUyOGUxMzI2YjY3NTU4NWJjZWMxYjQyODRkOWVjZDQ2MzQzMDAwYzFlMmQ2ZWEwNmYyZDk1ZjQ4M2ZmZWExOTAyZmEzOTM1YmVhMGU5YWRjNDBlODVkZmQxYjU5YTU5N2YyYzQ5ODA2OGFmMGVmNGMxNWI1MWQ1MzVlNGVkMWRlMjhiMWIxMjUwOTYzZGMwMGE3MGUxOTliNDhkOGQ3OTIxYmY2Y2JhZjI2OGU4MDFlYjI0MWJmNjU5ZGQzODY0M2YzOWRlOGI5ZTA3MTBjMjJlYjQ1NzgwMDM2ZWQzYTg2ZmQ0YjljNzQ1ZDI2ZTJkM2E1YjdlODdlZjZhYzU0ZDhkNGY5ZDdkMDE0MTJkOTQwMjk5ZmExOTc5NzE2ZGUwZWJkN2IyNmJiNmQ4YmE0MjE3ZGM0YTY2MGVlMjRhNjgzNDQwYTEyYjAwYWMzMTBiMWFjYzY0ODFkNDI2NTZhZDBiMDhlZWJlNDg4M2RiNzFhNmM2NDYwM2UwN2Y0MDI4MjljMjY3NzY2M2VjNjhmZTFlNzYyMGI2ZmVkMjNiN2NmMmRhMGYwOTc3M2I4NWRiNjMyMjFmYmM2NTUwYTcxODJkN2I5ZDhiNzJlZjFhZDEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiNWFlYmUyMjczNjU3N2U2OWM1MDI3Y2JkMWRjYzk1MTQ2ZjhkY2NhZGY5NjEwMjBjYWUyMzU2MmQ3MGU5ZjAxNTViZmNlZDBjZTIwNTMxMTQ5NzI2MTRhNDU5MzJlZWQ4YTZiNGY0ZTc0NmQ4ZDllOGIyNWNjOWQ5ZmE2N2VlMGIxNWNjNWIzZTNhMmU0MzcxYTQ0OGM5ZjZiY2ZmYWNiOGEwYThmMmMwNWU4YTNhMGFiZmQ1ZDgwM2E3N2E4MGZiYTc1ZmYxMmNjMDY0OWFmOWJjYjk0ZmE1YWUyZWRkMmEiOiIzNDIyMTkxZWU2OGRlMDBjNzc5NDM0YWJhMjM5ZTNjZDdhZDUzNWMxM2QxMThiYjIyNmUxZTAxM2VhNmU5NTExIjoiIjoiIjoiNmJiYWVmZGMxYWEzMDdhZDQwMWI2MDQwZGEyMDM2ZDZiZWI1YzUzYmFiNDVkNzJmNGM2NzliYzg4YzkxMWZkMjc1NGEwOWYyZjRiNGZmMzdlN2ZlM2NiZDljZDc4OGVhODk0MzZiZjc4ODE3ZmNiM2E2NDcyMTk4YjY3NWM4Mzc2MjRkZTg1MjVkZWRiN2EzYjc5MDFmYWY4ZGQwOWRiMTIxNmY1NTIwNWUzNzE5ZDMxMTAzMzc5YWJhYzNhMDgwNmZjYWQwNDc0YjliZGRkODFlM2ZlYzMzNDg4ODkzZWFkODI4ZTA4MjkxYjBmYmIzN2ExMmI3NDM0N2QzNTEzMWYxYmQ1MWFhNGU0ODczMDk2YjFhMzVlZTNkYjdiMDI3ZmM1NjU0ZTVhMDM1MmMyMmVlMzVkNzBmNjViMzlhNWI4ZjRhMjA2OTcwMTQzZDU1ZjBlNTM4ZmUyODExNGZlMzk2M2NmZjczMzFlNTlkZDI1YzE2NzZiY2VhNDBjNzA3NDA3M2E5NWI5Y2IwNDRlMTE0NDU2MDc5NTk0ZDVjNTcwZGE0ZTk0OGJjMzViZTQ0YTUyNGQ3OWJmNGM4MTU1NzIwNDE4YjhlN2FkNjA5OTBiZWJmNjdlYzVmYzA4M2RmZjBmYWRkM2U5NGJhMTEwZGUyM2U4YmE2OTljODE1NDgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiZjUzNDBmMWZlYTA4ODc3ZWRiMzA5YjliNDMyMjhmMTFkZmNhMjZmMzQwZmE0MzNmMGIxOGViOWU2ZTA3Y2NiZTk2ZjdhMWQ3NDVhOWIyOTEwZTIxYmM5NTIyYTk4OWRiYjJkYjY0MmM1ZTRiMmQ1OWZmZWVkNmM5ZTY2N2IzNzg1ODg4NDkzMzhiMzg1NjI1ZjAzYTIyNjM4OTA4MTg1OGU4NmEyMjI4NzZmMThhMGQ3ZmY2OWQwZmVkZTYyMGE4M2NhZjI1NGViOTM3NmRhYzhlZjk5ODM3ZGM0OTFkZDQiOiI5OGY1YjdhZjM4YzFmYmFjNDNmYTljYjM1OGJlYzExOTIzZDEwMzcyMGE3MzU5MWRlMmM2ZWQyNDVlODZlMDI4IjoiIjoiIjoiNTI5M2NlNjg5MWI1NjQxYTMzMTk5YzBhNTJjMmI1YWM0NmIyNjFlZDMxMWQxNWE2ZWFhOGRmNjQ3OGIyMTdhZWVjMjIxZDQ4OGFmNzRhMzQ3YWM5YTE0ZDUxZTA3YTIzOWMyYTUyZDJkYjZkNzVkY2Q5MDE0NTJmYTNiMzQwM2ExNWM0NDljMmYxZjk3NzA1MDFmZTEwODg0ZGRjM2VmNmRiMmQ4OWVhZDE3NmRkOWQyNDA0NDZiNWVhZWYzNzM3NjY2NzUwZjU2ZGNjNDM3MDcyMDQxOTEzNmIwZTYyNjhlZmE1MzhjNzQ2OGY2YjIxNjk5ZDY4ZmJjYTUxYTNjOTQxZGY0NmZlOTU2NGQzOTVjNTRkODI5YTY4MTg2NDgzN2ZiMmI2ZWVlY2M5OTQ0NzgyMTAzMTdkNTkwODg4NmY2MDU2MjkzZDUzNTAxYTcyNmNmNGU3ODZjNjI5NDM4MWZjNGFmNmUxMTA5MTg2NzU5ZWM5MDk5OWQ4YTIxYWIwOTA1MzkzOGZiNTQ1NjkyYWMwM2M3NzY4MDM4NjgxMzRjM2U0ZjdlZDg3YzkyODRjZjE2YTc2NTE0NThkN2U2OGI2MjUyNzI2ODc5NDRlMmU2YzdjY2I0ZmU4ZTAwM2FiYmFlOTNmOThmNjk0YTgzODVhMjk1YzMzNmI1YTQwNGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiODI3MzhkMTIzNGE5MzkzZmFiOTRhYjk5Yjg0MTM3MWY3MDQ2YzY4NTJiY2RmY2UxYjJkNTY4MjVmNWM1ODc4NmU1OTkwMDVhOGE3OWEzMGQ4OWE0MjUxZDNhNzk3Y2FiOGIzZjMwOTUwYjlhMTVkNjg2ZjEyNTlhMTFhNTE2ZDM5OTU1MTkyOGNkM2NiNTczNGM3ODM5ODQ3YmQ1ODRjMzY0Yjk1YjhmZWIzOTA1NjdjYjJlYzIzNzQ2NTQzYWNlMTM3MWEwODllZDk3Zjk5NjhlODNlNzU2MzYyMDM1NzQiOiIzZmEzMTliOTBhMTAzOGI1NDQ5MTYxMjM1MzRhYTVjYjEwZjRkYTE2Y2IxMmMzZTAwYmMxMzA2NDIzNzQyYmFkIjoiIjoiIjoiOWJiYTZjM2NlZjI4MzhkMTE1ZjEwMzA5MjVhMDFkYjc4ODFkZjdlN2I1ZDQ2MWE1ZjhkZmEyYTQwNzk1MzIyZGY3NDZhMjVlYmJlZmYyNzJkMDY0YWNhOWFlMjg0YjUwYjZmOTNmYTU2NmVhNTE5ZTcxMmM4MmY1Y2ViNDgxZjJmZjg3M2U3MzA0MzM1MmM3NjQ3MjM4ZmUzMzkzMzZjZDdhYTM3NjU4ODI0MjlhMDkyOTMyNjc2MTNlMjliY2NlMTc1MzVlZmQxY2JkYmU1ZTQwYmIyMWJkZGU0MDJlNmJhN2Q1NTRiMzA2MzVkMDVmNTgxZGQxYmZlZjA1NjVjM2Y1ZGVkYzgyMTBiNWEwMWExMGI1ODEzMDQ0MmUzZjhlYjExYjlhNDBlNTk5ZWM4ZDVlMTA4OWVmMWY1ZTY1ODdiNDEyMGQxZmMzOTU3NjI4MmM4MGM4MjVlNmU5NTA3YTBjZWIzZDA0NjA4MzJmZmEwNzlmYjg0OTJhMzUxOGYyN2YwOWMwYmJmMDZmNmVjMDBkODBlMTQ1YjVlODQ4YjY4ODQxODQxOWNlYzhhZTUyY2RhNzY2ZGE4NGE4NTZmOTRhNGJmYmVjMjZhOTdlMjgxMGZiMWRlYzNiNDhmMjg1ZmE0YjBlMjc5NGZjZDI4NDU1YmIxNzhiM2Q1NTM0MGUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiZTU1NDI4NzU4NzEzMWNjMzI5N2IwNWM4YWRhYjQ2MTBjYzNkMTYzNGVhYjY1MTE5ZDhjNTQ2ZDEzZTk5NjE1OTRmOWU2Y2M2MThlYTBkNzgyNTQ3ZDU0YWFlNDY2ZmEyNDNjMjI2NWFhZTZkNTc1ZjhmZTIyZWRjZjcxYjNlNzdmZDlmOWViYjExYzllMmU4MWM3MGFiZmIxOTMyMzlhZGI3M2U0ZmQxNGM5M2JkODRiZjc5YzMyOGE4NmE0MzM0MjdiMzA1YTY0MjVkZDU3MTFkODMwMDZkZDJkYjk1ZDYiOiIyYTU3NDFjZDkzMDQxYmUzODE2MzZjMDgxZjQ0YTk0MTA2NDc5NjFjZTUyNjUyMTFiYTY5ZTA5YmViNmU1Y2QzIjoiIjoiIjoiYWIwZjg1ZTY0ZTMzNGJiYzc0MWIwNjRhMzFhYTljZGE5MDQ5ZGVlMGQ2ZWE2OGQxNDgzYTYwZTBmNDg5OTk1MjcwNDJiNzk5NGQ3YTcxMzE0MjNiYmQ1YTZjYWJiMzViOWM3ODYyODAzNGZlMzFlNWNjMmI4ZWEyYjk0YzkxYTQ4OGZkMzRmZDM0NGJkYzg2MmRiMDBlMjM0Njc3ZmQwZmI1MTU1YWM4OTJjMzA0MzYxZTBmNTQ1M2NkMjU5ODExNWNmZjZhMzM0MTIwMGFkNzQ2OWZjNWVhMWVkZGJkODU1MTFjZjIwYjg0MmM5OTdkYmRmOTVlNDg0MWFhZjBkMzY1MDgwYTI0ZmFhMDAzZmJhOTIyNmJiYmY2MDkwODZhNmEzNzhlNWE1YzI2ODJmZmQ5MzIzNGRhZmE2OWMyNTk0Y2I1M2U3N2QwNGJhODAzNjdlZTVkYzkyY2M2MDZmZGYxMDJkMjY1ZDUyYTgzNTExZTJjYzFkMTY2ZjNiODQ1ODZiMmZiMDFmOGM3ZWQzOWEzNDRhNDBmZjg4NGU2YTNmOTdmOTQ3NDk3N2I3NDMxOGQ4OGE2YzcwYjhjYjdkMjQ4OWU2NTUxODlmYzk3Y2YxMzg0Y2YzOTI3ZjYwOGExZjQ1MWM3NzA2MGY0MzA5ZmY5MTNmODlkMjEzOTg5MTciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiZWUwNzFlM2YwOTU1MmE1M2I4YmQ5OGQ5ZTRiNGI0NjA1NzdiYWU4NjI5Y2E2ZTg0NjExMTFhMWVjMDhkNTE4ODY1NDA0MjE0OGRmZWRhYmM0MDljYWViNWEwM2IyNmU0MjIxMTNkNzk3MjllNzVjY2JlMjQ2NmFlODE5N2NmOGVkMTRkZDJhOTM4MjU5NmRhNmRhZWUzMzE0YjEyYmE0MmNkOWVkOTBhYWZiOTExNTk4ZDE4NjNjOWE3MjYyNWQwYmE5ZDcxMWQxZmQzZGM0NjI1MTZhNmI2Mjg2NjQ0ZGMiOiJmZGJkYzExYTRmNzE2NjdiZDE1NjFlODdlZTM0ZDkyNWIxM2QxZTc5OTY3ZmNlY2VlOGIyNjU2ZjA0ZDZkMzc5IjoiIjoiIjoiYWNmMzQyZjY1MzdjMWMzYThmMDUwMzU5NzMwYzE4NWUyYmVhYWJhNTY4NmQyZmZjMDEwMWUzZWIyYjE1M2NjODBlZDVlODQwNGJjODQ5ZTMzMGU5ODBjMGMyZWU1ZGY2ZTYzMGIwZDJlMjhlYTUwZjlmOGMwNmFjYzBjODgwMzA0ZTMyMWVkNzIwNWU2NzNlNGJiNDRjY2YxMmVlMjdiYzZmMTY4YjYzNmQ0Mjk3ZDUzNDYyZGIxYzQ4MTZhYzVhZDY4NGU1MzJmMzVhMjFjY2M2MjI2ZGM2NDgxZDY0OTE1OGU3NWE2ZWIwMTJlYjk1ZmY0YjQ2MGI0MWY4ZWUxMzM1ZmNjNDNmMGNiOWI1ZWU3NmE0NzEyODNmZmUwODgwZTVjZmEyYWMyMDBiMTgxNDk3MTJhYTEwYjc2ZmUzODUwZGVjMjJlZjQ2MzliZWVlZDY5ZjAxYTRjMjVjZTYxMTBhMmViMGE2OWM0NzljOTdhNmZmMmJlNGFkZjNjNzI1NTExZjkzMmY4NjQxOWZmZmZkMDMwNmJjYmExNDkzOTBlMWQzMDY3OWM0ZDcwZDE1NjM3NjY1NDE5ZDE3ZTUwOGMwNTA5YmM0YTFlNzM0NDhjMjlkZjY5NDRjMDBjZThlMzJjYTg5NjQ0MTg3Mzk3MzRlOGJhMGFhNGRlMjA1ODUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiZTBiYzhjMGI1M2FjZDhjZjVlNGM4N2FkMjQ0NTViYzM0ZDQ1NjM2N2JkMmU3MTY3NGQ1YWM1OWQwOTAxYTA3YWJiNTJjNGYyNjRiMDYwN2JiOGYxYWMwZWZhNGY5NzQ5NDdiYWQ0MmI0ODI4NjhkODQyMDhmMDY0ZmEyN2Y0NjU4NjViOTEwZDhlNTM2ZjAxMTA5N2JjMGNmZWEwN2E5MzRhZTUwMjNhYzcwOTg5ODVjNGUxZTJkMTczYmM4MzVmN2Y2ZmNhMzIwMGUzODQ4MmEzNmM4NzEzODZmZjliMGQiOiJiYzk4ZmRjYTExMzNhMjFhMmI0NDM1MTA1YjFmOTZiZTE2MzMzZjVlY2M2NjE4YzU0ZDI4YWFiNTk5Yjc5NTQ5IjoiIjoiIjoiZWM2MTY5OTNhNjBkNzk3MTg1OGFiMmVjYmY4NmY2MTNhZDBkOWVkZmFlZDg4NjQ1NTY1MTU5ZGVkOTBjYmRjYWVjYTNkZWMwODFmNTU4NTdkZjc3YTM3MjRmMzRlNzk3NzI5NDkzZTk5NTU5NGRlODFiZDFkMTRmNTVmYzc2ZmYxYzk5ZTg2ZjRiYWI1YjAxY2M4NDkxODBiYzA3MjFiY2Q3YTFjNjk0YTUyM2JhYWVkNDM2OTQ5ODgyZGFlZmRiOWY1NTViYTE2M2JjMDE3ODA4MzFjMDZmZGFmZjViY2Q1OGM2MWMwOGIzOWQwNTFkYTk0M2ExYTNmODMxODA4YWU5ODJlM2JkZGY0MGNkZDQ3ZDU4MGQzYmU2NjAzYzc4MTg2MTRlYjBjYmYzMDNjNmU2ZjdiNTIxODNlMDNlNDJiNTcxNTNlOWUwNjQ0YzVjY2QxMDE4ZTI0MmZiMzg0ZDgzMjc0NzViNmM1MWMzMmIzZGNhNWYzMjA2OTUzOTYzMTc0Nzc1NzMwMTA1MWEwZWI0YzJlNGJmZTY1NzZhY2UwOGVmYzViNGFkODg4YTRiODEzNzc5N2NjNzQ2MjViODQ3YTViNmZlNTE1Y2UxODZmYmZlN2E2OGVlMWRkNTc5NmU3YWE5NGU3OGE4NWM1YmQ0Njk1M2Q4YzRmYzBlYTciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiOWM2MWE3MzBhMGFiMzg4MzBmMzZhNDQxODE5ODhhZmEyNGZhNWRlNWYyOThkYjA1OGZiNGEzNDQzZDNiNzE0MTJlYmUzNTg1MWExMmY5NDJiN2ZjMzc5Y2ExZTE0YzYzMTljYjQ4NWUxMjVkZGUyNDgyYzU2MzI5NzZhMmE5YzExMjIxYTlmYjZlNjViYWQ5OTBhNWI3N2I1NWIyYjg2MjNhNTUwOWNkOTE5ODE5ZTdmOGFkYjIzYTk5YjI3YzJkMDVmYjZhM2ZiMzkzNmQ1ZmJmZDQ0Y2YyYjI0YTdhODciOiJhNjBiODk2MmIxOGQ2ODZlYTE0MWUwZjRmMDE1NzJhMjViNjlhY2YxOTc0MGJkZTk1ODhlYTYzYTExZTkwNGJhIjoiIjoiIjoiYmNhZDMyMTY4ZDhiZWMwMTQ4MjUzNGVmN2RjZjI3ZWExMTFkNmIyYTExMzExNTcyZTA5YmMyY2RiMzc2ZjMwMTU3ZWQxOWI5MGJhZjhlNGUzYzYxZTZmOGRjYzA1ODM5ZmIxYjNmMWE3MjNjM2JhOWRkMWM3Y2Q0OTQ2MzI3OGE2YjIxOTBkZGU4ZWUwMzI0MmQxYmU5YTQwYjU3MGRkNGMzMDQzN2YwYjE1Nzk4ODc0YWM5NDBkZGE1YmVkMmM5MzMyM2YxZTc5ZDU0YWU5YmM4NmQ4MjYwMTk4N2YwNDg5NzZhNTU3YzYxNzNmOWQzZWIxNjY0OWJmMDA0NDk0NzIwNmYzOTU4YWYyY2RhNzQzZmM0MDQxNmU2NDViOTU5NmIxZWY0ZTcwNjBjNjkwZDc1ZWZiNGFjYWQyNDk3Njg2OTYyN2MyMDk5M2Q4OTM1OWQzOWNiM2E5Nzc5OWY5YzlkMzdkZDc5ZDIxMmM2OTBjYjE0OGQyYjMwMDZjYWI2ZDQzZTc5OGFhZTJhMzVlODA5NGEyMWQ2MzJiYjA1YTg5YWIxYjY4NTNmMjdiN2UwNjQwNDFmMTQwODcwYTZiZDk1MTNiYWU0YzE4ZTc5MWUyZDhmMWIzYzdiY2ZiZjgyZDI4YzlkNmNkOGFlMjI0MDM0YzMwNmU1MWQzNjJlOWUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiZTNkMTg2YTlhNGQ5NTMwOTA2YzU4ZjlkMWYzYjQxNWQxYjYwZTJmMTJjYTM0YTQyOGQxNmZkZTA5YzcwMGRjNWVhOWQxMDRhOTI4MzE5MzYxMzY2OTEyMzJlZjY0Yzg4N2I3MTM4M2JlMTUyMzQ3OGM2NzM4NzQ0MWM2N2ZkNzc2MWU5Zjc1ZmEwNjM2ZTVhM2NhYTg0NTIxOWYzNTgyYmRkYmQwMDE3YjliOTU5ODRjZWE2YTNkZGJlYjA4MjBmNGY1NWZmMTVlMjJjMDBlOGRiN2RkOGZiZWE4ZjY1MjYiOiJjMzM2NTVhMGUyOTczYmExMzc4NWZlNGVkZmI3NTc0OWQ4NGQ4MTg3NTJmNzY1ODAxNDQ0OGI3NzE5OTgyNzI2IjoiIjoiIjoiZTAwMjIwM2U5ZGNiMTkxYzVjMGMzY2EyZTE0M2U2ODljYTk5MjUzMzdhZTA0YzI5NTQ3YTU2ZDQxNDRiMjY1N2Y4MjY3NDJjMmFmNjBhMmVmNTZiNGY3NmU2OGVjZDQyM2NhMDRlYjc5ZTkyNDczYzJiMjA5NjA3MjkxOGEyMzkwYjVlMWVmNTk2ZWQ2YTQzMDJjMTgxYjAzMjU3ZjlkZWZhY2Q1ODc5NmUxMGI1NjAxYmE5YTFiZTc2NzQ0MGFjMGFhZGQ0ZjY0N2JiZDgxYTA4NGJiZDhiZWQ1YTAwOTE4OTJiYWZiYTYxMjU5YTQ2Y2VhOTVmN2JlNmFjNzY0OTJhNTI5NTdlYjYyZTBjOTZmNWRjNzRkYzNkOTQ5ZTc0MzEwYmU2NjRjYzIxYjljNzZkMzkxMDFiNzZiNzEzMGYyY2RmNDQ0ZTA3YmRmY2EwMDA4MTlkZmVmYzJlZWRmODk3YjFkZTBhYjkyZTNkMDRmNmRiZTk0MzhjNzExMTVlNWQxNGZiNjYzZDcxMjAyN2JlNGMxMzQ4Y2MzYzVjMzBiZjhkYzBmN2Y1YTI0NTYxNTlhNTQyZTU4YWVkNWQxMGFmZmRmZWQ1YjZlYWU3N2YzYWY2MDczNTRkZGZjNGYxZDdhZmVkOTA0NjM0ODZmNjBkZDlmYmYxMGIzMmY2YmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjM4ZWNjZWU5NjU1MDViYTUxMzZhOGFiODY4ZWQxZTc0MWQzNDNhZDcxMzA3NTIzM2JmZWJlMTk2ZmNlZjZmNDA1N2EyMWQ4YjJkNmM2OGFiZGY1MjYzM2Q1NGQ5NjA5ZTg3NTQyZWZhOGY0YjQ2ZjQwYTRlNjBhMmRiY2YzMzM4MTM4ZDQ2YzFlMTRkNmY3NTI5NTRhOGZiOTkyZmIwMjYwY2E4ODkwMzAwNTU2Y2E3MDkyYTc2NjFiNjVmYmJiZjBjNTZlMmQ0OTg3NTUyOGFlZDFlYmIwMTMzZjEzYzU1IjoiN2JmMjkxNGFmYThmZjljM2IzODRjYjQ5NWQwYTA4YmY3ZDhmMGI3MTk4ZGY5NmRiNzM3MWRmZTk4N2IyYjczZSI6IiI6IiI6IjgzMGE5ZjYxZThhZjRmMzIyYTQ2ZjNlNzVkNDc1ZjlmNmQwNzY3MTNhYjk4YjJiOWQxMTk2ZThmZWEwOThiYjdhODQwY2E0ZDdmMzJhODUwY2JkNzQxNzI5NzIxMWZjMzdiNDdiMDY4YWJhMzQ5ZDI2YTQ3YjJkNmQ0MWU1ODgzZjY1NmMyODc4MDRmYmM4NTQ1MjE5ODljNWRlOTliNjFjNThkNTE0NDQ0MGNjZmZlYTRhMGQ5YzQ1NWE0MGQ0NzE4Y2MxZTlkYmRjOWM3N2M0ODQ4ZjQ2NjI1N2Y5OWFiNjA3M2RlZTgzY2Y4NjI1MTFiNjhjMmJiYThiYzkwN2I4ODgyMmZiMWJhMzEwYjM5MDFkN2FlZTFlYjNlZWViMGFlNWU4ZGEzODI3Njg4NmNkOGEyMThkMjZhOGQ4OTlhZmRjMjMzOTQ0Yzk3YmFmN2IyNzQ0NGUyN2Y5ZjM2MDBiNmQ5MDhmYjE3OWU1MDRjNTA5MWUyZmViYjc0NzhiMzRiY2Y4ODFjNTVmZDlmYzc0ZTllYWUxMjAzZTA5N2NhNjdmY2Q2MmYwM2ExNTc5ZDg5OGQ4OTBjNTc0NDVkOWY2ZWUxYjY1YjJlMTU0MmY0OTA1MDEzODRhOGI5OGNjNTk4ZGM4ZWFjZmUyMjYwZGI2ZDY1YzU0ZWY5MTVmMmRiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiIxOTIyMmY3ODg2NzY2NjQyZGE0YTgwYjk3YjlhYjhiMTU3YjU4ZWQ2M2RjZWEyNTEyZjA4ODY0NDc5MTQ3NWE1YzZhMzNhMmNjZTM5NGQ0NWRhMmY4NGIwMmEwYWJjYWFlY2E0Njk4ZDUwZDViZGE0MzU3NzhiODA4Mzk3MzE1NjU0ODc4ZTg2NmJhMDEzNmY5YzRlMjA2Zjc3NDliNjBkZWQ0MTk4ZDY5ZDFkMDc3NTY0YTg5NDM3NTI5MTk5MWViMTI1ZDM5NDU0N2QyMjZjMmRhMTdlOGNkOTg4NTNlMSI6ImFmMzQ3NjNjMTQxYmMyMTIyNzFkNTJhMjYwYzZkNmQ0MGU5ZjQwYThhNGNjM2ZiN2NlNjM1OWJjNzE5NDFmODkiOiIiOiIiOiI1OTE0ZGY5N2NhMzZhY2NmZTQwMDA5ZjAzM2JjNmNkMjE5NWQwYjFkMzU0OTYwZDE1MjE1N2YyYjg2OGRiNGNiYjczNmNkZDBmMDc3ZjIzMDQ0MmJhMDEwMTc4OWM1Y2MyYWM3MjdiMDcwNGExMGI0MWM4N2Q3OWM4YWVmNzQ4NTY3YTJlYjZlNjFhN2M0OTlhNmExY2Q2YTlkOTU4Y2FjMTg1ODViMmU2OTdkYWU0ZmY5MmJmOTEzNDgwOTY4ZjNiMmI4Y2EyZTBjZDg1ZjFkOTMwM2UzYTFhMzgzMGEzMGQ2ZWYwYTFlMDJjNjgyOTU4ZmQxODZlMWJlOGZmYjJhNGE2OWQzNGJjYmU2MTdjM2VjY2EwYTc3ZDQ2MGUzNzgyY2YxMDE0M2RmMzRhZGVhYTdjZjc0ZDFkODZmYjFlZDM1ZGEyMTdmMDBjZGYyN2YxNjM3ZDJhMTg4YzNjZTdjZTZjZmFmZGEzYWRlZjQ0NjNhMGU3ZTY2OGViMTI2OGFkYTg0NjVjZTkwOWYzNjhhMGIxMmE0MzllYjRkNDNhODdjYmY5OGY4M2E0ZjhjNDIyYWM5MDg1MWVkMDgxZDc0ZjIxMmM4NTQ1MjI0MzdiMjY1NTk1OWMwODFmZGM4Y2EyOTQ1MjcxODIxMTgyNjkxZjZlZTVmYTBjMTNkY2NhOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiZjMxNGViYTc0NTFhMGI3MjE2MjJiZTI5ODY1OWEzZDI1M2VhNTkyNWY1OTEyMTk2YzYyZWQxNDlkYWExMWUyNmNkOTRlOGU2NDdkYTM4YmNiYmVlZWYxZGEyMWFkOTJlMGI5YTVmMWFkNzI4MjZiZjU1MDk3NjIxMzE0Zjk4NTlmOGY4ZDRkNjJjYzlhMDBiM2U5ZDk1ZTk5NjUwOWQ3NzQxMzQ0OWFhYzhmOWQ4YjMxMTU3N2EwODNmODAzNjRhZDFkNDg5MjYyMDU4YWExMWNlOWZkM2RjYzZiMWU0Y2MiOiJmOGIxZTk3ZWM2ODBmNjM3YTQ3OTJhMGQ1MGZmZjlhMGVkYjAyODYxOWE5ZGFjMDViOGJhNmQ1N2U1NWExYTRhIjoiIjoiIjoiOTNkYjVhN2VkNDhhODE5ZTlhMjM3YWQ0ZWFhMzM5NDY4ODBhZTg1MjY2NDE4YTI2NGVjMTdiNDFhOGM5N2MxNmM0NDZmOTFjNmQ5MDE4NzFlNzBiNmQ5YzEwYWFhMDcwNzdjMWQ0MDI0MmNiN2M1Y2I4OWExMzcwOTRhYTgxNjI4Mjc4YjllNDUzZDdmMGYwMzQ3MjQxMTBhY2Y4YTA4ZmEyNDRkYTI1NmJmM2U0MTk2MDAxM2U3MDk3NGRjOGMyMjgyMThjZDg4YWM0ZDc0NDhiZDEzYTQzNDM4NjZiNjU2YjE2YWFmNDJmZjY3OGRmYjk2MDUyM2NiOTU3NzZiZmFkZGUyNGUxNmFiMDA3MDMwNWUwODRjZDk3MDA5M2ZjZDA4NDMxYjgxNWY4NWZkYzRmNmE0M2ZjYWQxMDU5NjViNmZiMTY2MWM3NzA5YTE2NmFlNmYzZDFmYjQ2MzY4OWY3NTI4MTFmZTdkNjY2NTY4OWEwNmM2MGFhZThhMDUxYWJmYmFkYTQwZmM2MDJmZWEyY2VkNTFhYTkxMGMwOWI3OGQ5N2E0ZTg1MjQyYzNkMjA2Y2YzMWNjZmVlMTFjNWRjMTQxZWJiNTI3OGI1NWRlN2U3YWE5YTA4MDQ4ZDVjYWQwNzJkYTMyYzQ0OWJkMGRhZDJmN2Q2MTg4YTViOWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6Ijg0MWNkN2JmYzVkODdhMGZhNjI0ZjQ3NGFmNmQ4YWU5ZjJiNWExNDI2Y2YxYjc1MmRkZjExZjc5MjE2OWYyZjJjMGI2MDQyN2JmNjJkZjFiMzczMzAyZDkxZmE4ZGQ4OTFmZDc1NDJiZjY0MjVhNzMwOGY2NGU5NmIwYzNlMzcyZDRhZGRjNzQ3ODk4NzMxNTE3YTQxODIxMDgxM2Y2ZjE0ZDU2NjUxYjI1OTliYjI4OTliMTA5YjljMjEzNjcxMjZlZDViZjA5OWY0NTVhYjViNjdmNDdhMWEzYWJjM2Y2IjoiYzM1NzI2MjA2ZDE4ZjlmZDNiODQyM2ZhOWVlMmZjNWE4OTZhMDEzYTk1ZDA1MmZmNDk1YjljYzY3NTlkNThmNyI6IiI6IiI6ImIzZWIxMTNjMTlmMzNlZWVlM2RkNTNmZTU4YWNiZWY2OGI2NTIxMjFmMzllOWI4ODQ3MmU5MTYyZjM0MjljOGQ5ODc5MDQwNWFmZTEzNjg2MTkzNjZjODhhNDg3NTE4ZTFiYTc4OTZlZWUyYjQ2MjVhOTg3ZDEzODU2OTg5MmI4Zjk3Nzc5OGQ2OTMxYjVkMmZkYTZiOGNkZjMxNDA2M2U0NWEyMmM5NTdhMWI5NmEyNDljNDMxYmZjYzI4NjRmYzAwMTU3ZmU2YzJjZWQ5OWExY2VhNDY2OTQ0ZjY3NWU1MmNiOGZhMDAyN2NlNzhmNGUzZWQ3MmQxOWYxMjUwNDVhYTgyNGI1NzUyNmVkMjBkNTI3ZDM3MTQ3NWYzODljNjZhMTVlMzVjMmFkMWJiOGE3OTg0MjIxN2E0MjJlNGI3M2EzYWI1YmM4Y2RhYzMyZWI0YjEyMDQ1MjAyYjFmZjEzMjNhNjgxNmMyOWFkMGQ2NWM5ZGZjOGU5YmI4NDFhZTBjODEzYzBiY2VkMDk3ODc3YmYyMjA5NjFjMDQ0NzE2MjI2MmE5NmI5NWRkOTNlZTcwNzM5M2ZhNWViYTRhYmEyOTI5ODJjMjE2YjA1YThjMmNmMTY1YjU0ZTFiYjUwYTllYzIwMTUxYjIyOWRmM2QzMmY1NGVhNjI2NDhiMzQwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJkZDYyZWQwZDU0ZDkzMGZlZDFjZDc1ODJlMzc2YWI0N2RhMzEzOGY3N2RhYWRlZGEzMmZhYjk1YmY4ODFmZTkwZDlhYjRkYzViMWNmMDY0MWFkOTY2YmExNzYxYWFlZGViYWQ5ZWJjM2YzYjI0Njg4ZTE2MjUxYzQwOTI2N2JlYzliMDJjY2E2YjhlYTc5NjlhNTk5MWVmNjQ3ZmRiZTI4ZDMxMjZjNTA1YmMwZDlmODI0MWZkYzQ5ZTg2NzRmZmQ2YmJkY2M1Zjk5YzZlMjBkNDI3MWI0MjE1ZTIyNDE1NiI6IjM2NmM4ZmY2NjZjMmI0MmQ3MzVkY2NhNWMwYjEyZTM1MmFmYTQ4M2Q0OGQ1N2M5MDhiNTI2M2FkM2QyYWZmYmUiOiIiOiIiOiJhNzc0NTY0Mjk1YzMxODYxNWU0ZDY2ZTBkODU3ZGQ2MjkwYWUwNzRjYjM4YjYzMjJkODg2N2YyYzdiZmI3YjNiZmM1MGM3MTVjMDkwNzk0ZDc5NGFhZTEyYjZhYTFhOTFjZTUwM2I1NDlkNzk0MzVmZDFmNDA3ZmRiZTI4NmU0ZDYwN2M2MjRiNDRiNWYwYjkxZTY1YWE1OWE4ODBjNjk1YTBmYzJjOWQ1M2RmZTA2NjI5NDRhZDQ1OGVlNmMzNjRlNTZlNjUzN2NjYjYyZGVhYmYxMzIxZTg0NDNjZGI1OGU4ODMzYjcwODgwN2U1M2FkODZlY2E5OGU3Y2VkYjliY2FiY2Q5OThmOTc1YjliODcyMjEyNWRhMmQ3ZjhlNjExYjQ4ZTdkZjYzY2NkNDQ0MzljNjE1ZmMzYmYyMzc1NjEzNDVkODUzNzhhMzRjNDZiNjViZjVjYWRhMmUxYzU5MWY1YTVhZTRjYWUwNmJkMjMxNGJiNWU1YmEwNjdlYjY1MjA1YWEyZTRmNjI1YmU5NzMyMWE5MWQ5NjRjNGJlOTg5NmVjYWYyMGFhNzgzMzg2MjdlYTkwNTc4Y2M5MDBkMmFiZmY0YjUwYWNhNDRiMjQwODg3NDdlN2UyN2JhOTYwNWJiZDZmMzBjOTlkNjY5N2JlNDYwZGE2NTNhMWYzNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjNhY2E2YjU1NTYxNTIxMDA3YzllY2UwODVlOWE2NjM1ZTM0NmZhODA0MzM1ZDZhZDQyZWJkNjgxNGMwMTdmYThhYTdmZDNjM2RkNWQwM2Q5YjhlZmM3ZjcwNTc0NTgxZjRjYzE5ZmFlNWE0NTZmOGE1M2E2NTZkMjNhMGI2NjVkNmRkZjdmNDMwMjBhNWZlYmJiNTUyNzE0ZTQ0NzU2NWQ2MzczODZiM2FiMzNmNzhmZDk3NTFjN2I3ZTY3ZTFlMTVmNmU1MGRkYzU0OGExZWI1ODEzZjZkMGQ0ODM4MWJmIjoiNGJjOWE0ODVlYzg0MGQzNzdhZTQ1MDRhYTFkZjQxZTQ0NGM0MjMxNjg3ZjNkNzg1MWMyNmMyNzViYzY4NzQ2MyI6ImIzOWM0MzUzOWZkYzI0MzQzMDg1Y2JiNjViOGQzNmM1NDczMjQ3NmQ3ODExMDRjMzU1YzM5MWE5NTEzMTNhMzAiOiJiNjg1MGVkZDQ2MjI2NzVlZjVhNTA3ZWFiOTExZTI0OWQ2M2ZjZjYyZjMzMGNjOGExNmJiMmNjYzU4NThkZTVkIjoiNTQ2NjY0MDQyYmVmMzMwNjRkYTI4YTU3MThmMmMyZTVmNzJkNzcyNWUzZmJlODdhZDJlZTkwZmJmZTZjMTE0ZWQzNjQ0MGZiYmNjZjI5Njk4YjQzNjBiYzRhZDc0NjUwZGUxMzgyNTgzODEwNmFkYzUzMDAyYmMzODllZTkwMDY5MTY0OWI5NzJmMzE4N2I4NGQwNWNlY2M4ZmQwMzQ0OTdkZDk5YzZjOTk3ZDE5MTRiNGVmODM4ZDg0YWJmMjNmYWU3ZjNhYzllZmRjZGMwNGMwMDNhYzY0MmM1MTI2YjAwZjlmMjRiZjE0MzFhNGYxOWVmMGI1ZjNkMjMwYWFiM2ZkZjA5MWJhMzFiN2RkY2FjZGYyNTY2ZjJjZmFiMzBmNTViMzEyM2U3MzM4MjliNjk3YjdjOGIyNDg0MjBhYjk4YmE2ZjExYjAxNzE3NTI1NjM2OGU4ZDgzNjExMDJjOWU2ZDU3Mzg2YmVjYmVhYmRhMDkyZGQ1N2FlYzY1YmMyMGViZWU3OGVlYTcyOTQ1NzFlMTY4YzQ1NDA2NmQyNTZiODFiYjhiN2JiNDY5MjA3YTE4ZWJlZGJiNDM0OGZiZTk3YTRkODZkMmJkMDk1YzQxZjZkZTU5YWEwODAwZTEzMWU5ODE4MTg4NmEyNjMzY2RjYzU1MDkxNGQ4M2IzMjciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiIyNTMxYzQxYTIzNDgyMWVlYzQ2ZjhhYTdkYWU4ZTNhZTEyZDE2N2QyODliZmJmZGNhOTI4NjQzYjM0M2ViOTUxMDE1YzA2NmUyZDI3OGVhMzlkMmE0NTllNjQzNGUyMzRlNTVmYTExNDU1ODNlZGU3NGU2MzJlZThiZWYyYTJmZjc2Y2EzYjhjOWM5NzdhNTgxM2M0MDQxZjNmOTMyOGJlNmM2N2YxNjg5ZDg3OGU4YWQ2MWJmZTZhMzlmNWIwMzRiNzVjNDBjOWIzMDVjMWVlYjkyYTNmNDE2OWFlMTcyMCI6ImQxOTUyYjdkMGM0Yzk0MTg1YWRjMDI1ZTY3YTI5ZmRhNTBmNTc3NzcwMTE1YzA5MzFiZmIwM2U4MTAxZDFkM2UiOiIwYmUzZjYxZWNlMzgwZDYzYzY4ZmYwZDRiZGUzNmY1ODIzMzM1OGNlNjJjN2JjNTg4NzI4Y2YxYmFiYmQ0MzQyIjoiMDFlNzZhMGM5YWRkYjRkYzIwMDFiZWMyMzFiNzJlMjA5OGE2ZTllOGQzOWFkYTEzZmYwYzQ5M2FlYzhiYTY1YSI6IjEyMzM2NzU4ZmJlYzExZWUyNjRiMDY5NjliYjM3ZmYxZDM3MDM0YjY2ZjhiODIzNjkwNzU4ZGEwNzRkNGUwOWQ4NGZmYjQ5M2QwNjEwYjVjMzJmNjhiMWExNDRjYTY1NGFiNGYwZTg5Yzg5YzZlZTZiODcyYjZiZTRlZDA2YTc3Yjk4MDllNjgzMjlhZGRmNGViY2NiOTg2ZGQ0OGNmMzM0NjkzNjJhZjlkOGY3YjI0YWExY2M2NWJkYjgxNGMyZTA0Yjc5ODYwZjJkNTNiMzg5NWI1ZjkyNTAyYmVmZTMxNzI5ZTQwY2VhZWVlY2VmNDU2ZGJkNzIzZjQ4NTA4MmFkNDc1ZTQ2ZjYwMjNkYWI2YmFiMGVlZjYxMzk0ODIzMTIyYzI2MmJhZjU2MmQ1NWM2ODdjM2MzNDA4YzgzN2U2MzgzZTExNTM1ZTk1MGU2MDRkZjU5Y2MwYWYxMTc3MjgzZmVkYjVmZTMwOTY2NDYwZGNmNmIxNjI1YjM5YjU5MGQ0NTViOTE4MjA5N2NmYzE0MzI5MDU1NmQ2ODE1OGZlMjAyMTFlZmZhYjkzMDMxMTVlYmM1YjY5OWRjMTYxM2MxOTU5NTZkYzYxMzQ4YmJiNTI1ZTU3MWM1NDA3MzI2YTZlMTYyODUxNWM5Mjc1YTZhNWUzNTY1MGM5NTNkNjhmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiNGQ2NWZmMmZkMjYwZWI2MjkwYjAyYjFmZDcxY2ZmZWM4NDBjYzAxODA3ZTk4NGYwN2RhNjRlNmFkODBhZDM3ZmI1ODEwZWQwMTJkMmNlZWMzYTA0MTgwMDNhMDMzNDM1MDIyMTliZDQyMmMwOGUwMzIxYmJiODZkOTIzYmJkMDQwODJmOTM5ZGVkNDIxNjU3ZjkyOWIzN2UyMTYwNGEyNjY4YjU3ZDU2MDZhYzM2NDU2ZGE5MTZkZjgyYTg3NTNkMjI0YjRmN2M4MjlkMjg1MjU0ZTllODUxOTM3YjU0YWYiOiJkNzU2MTZhYTAxOTBhNTZhZjU3M2U0MzYwNTE1N2MwZTBkNTI3NWJjYTk1OWYyYzc1ZDBlNzc3OTQzYjIwMGUyIjoiOTU0ZmRjNjUyZDBiZDhlZWEzNzM0MmY1NTQ3MjQxYWZiNjdmOGQ0YzU4N2JjMjQwMmM0MzVhMjYwMTQ0YWNkMSI6ImVkMDdmZWEzYTA3ZTg4NDZiNGMzYWFlOGNlYzBiZjZkZjdjOGJhNzgxN2UzZTk2OTk5NDNlMmQyZTc3OGM0YWMiOiIyMGMxYzQxYzA4MDllNjk0YjVkZGNiODA4OTk0NmQ3NDU3MTE0NDQ3M2RjZDY4YWY2OGNlYTU4ODE4NTlhYzgwM2MwMTkyMzA0OTY2YTNhNmY0YzI0ZGUwNDUxNDUxMTI4NjYzYmFmYzIwYzk4NDJiY2Y3MmYzZDYyOTRkYzU5Yjg1MGRkZTc3ZWM5YjdiMzdkOGU1YTk5ZWYxNzE5YWMyOWJkNTQwMjcyNzhkYjE1OTQ3Njg0OWQyMmQyYjQ2ZGRjMDA4Y2Y3Njg3OGVhYzhjNzA5MDY2YWFiNWYxMDQzZWE1ODg4MTVhYTQ4NDU2ZDg5ZDI2NTdkMjkwNTQyMjg1N2Y2Yjc0MTIxOGQyMmZiN2EyYTY3ZTdlZmU1YzJjNTZjOTIyNDE3MGE3NWRiMTBiOWQ3YjkzNTA5YTZiMWM1ZTliNmQ1ZmFmMzU0Zjc5Mzk0MTUxZWFlYTcxYzgzYzhmYTUzNDQ2ZWVkZjcwNTgyYzQ5NzZhNGMxNjMxMWY5MmNmN2QxNzU4YzFkMWY0OGU2ZDU4YjU4OGIzY2VjNWYyYTdmODU1MmRjZDdhNzJjZmE4ZjEwOWMzZjczNGE3MDgzMDRiZGNkZDZiMjVhY2MwMDg5OTcxN2EwNWZlOTg0MzNmMTA0YjZmZDI2ODM3OTA1MWFmMzZiMTExYmExNzlmNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjMxMzY4MGE2ZWY1Y2M4NTkyNDU3NTE5NTYwOGYzYjljZDg1MjAwNDM0M2FiNzA4ZTg5ZDYxYzI0Njk2MjQ2MTY2YjBkYmNkZjYxYzU5YjAwNDFmZDJjNTVhODI5Yzk5Y2Y4NDY4NTUyYWFiZGRkOTkzNjg3YzJiNGE2MDE3MDI0YzQxMTAwNTEwZWUxMDAzNGJhNGY2NjU2M2RiNGQzMzg4YTdmNmQ0NzVlMDgwZmFhMjNlZDQzYzY3NDI1NGJmOWVkMjVmNzMxMDk2MzA2NDdmYTNjODU1NzU3MjdkMmUxIjoiY2RhMDhjZDc2ZjNiYWMyYzMwYmRhMjA2OWExYTdhNDYxZjI0NjJhZDJiMmFiNmE3MjdkYTY4MzY4OTZhNGQyZiI6IjQzMWM0ZmRlZGRkM2RhMWRlNmZjZjE5YTI1ZDc0YWY4MTFmNzJmYzIzNjdhN2YzM2NmY2RmMTdjZjM4ZmNiNmUiOiI0NzUwMzQ0YzIzZTQ2ODZiMmJmZTJkYmQ5MzAxNzA1ZDA2OTY5ZmVkYmM3Nzg0MWJmNjU5MTU0MGFlYmZlYmQ3IjoiNDBkZWFkY2Q4N2E4ZTA3ZWE3M2JiMWYyOTE1N2M3YWU4YTM1ZTAyZWU2MGY5ZjYyZWJlM2VjNGJiMzI1YzgxYzJhMTdiY2Y2Yjg2M2NhZDZhZTI5MzU2YzBlN2YzZDgyMDUyODAyZmQ3YTE0ZGM3Mzk1NGM3OGVmZDQ5YjJkMzJmMDcyYjEzN2FmMTZhMDViYzk3MDM0YjIxMDJjMjVkNmFlNjhkZjcxNDFiMTAxZjQ2OGQ3OTA3ODAzMzAxNTc2MzMyNmRjM2NlOGJiMmU5NjBlN2ZlZDA5OTA1MDQ0YmEyMTY0ZGVjZWFmZWZkNTQ1ZTY3YTU3MTVmZTdlNWExZmU1MWNjMzU2MDk2MzQ0MjQ1ZDQzMWRjMTllZmY5OWI0MDI5ODFiODUzMWE4NzAyZjJmZjFiZjI2ODcxNjc5MzM2N2RiOGQwZjZmNDU0ZGI1N2I2YWU5MTY0NTk2ODUwODExZmEyYmYwMWRmZGY5MTc5OWIxYjU0Yzk3NzNkZGFhMjMxNjQ0ODRmZGRjMmNjNzgxYzFmZjMxMzkzZWEyMDM0MjBhYjJjZGZlZmU1MTRkMzA4OWRmMWIyMGViYTMyYzAwMzU3NmRhNWE5NzEyYzVjMGFkNzQ0ZmEwM2RmMTk3ZjJjYTg0NjNkZjQ0ZDE2MTM1ZjA1ZTFlYWIwMTQwNzMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI5NWI2OThhNDU0MDcwNjAzZWZlMTVjYjRjMzU5YWU5NDZkYTc1NmQxMjQ5MzlmOTE2ZDY3ZDc3YWFhMDYwOGQ4ZTU3N2I1ZjU1NjdiYTNjMDc1MTI4YjUyOGE2ZWNiY2MyZmY2ZDhkMTVkZGQ2ODAzOTE3M2M0YjcwZGYzNjUxZjRjYjVhYzYyOTU3NzgxYWM5MTU2MzMyNGE1NmI0NzQwOWIwMjY5OTY2MmY2ODAyMmJlMmQ5M2VhYzM2N2EyMTAyNmFlOTVmZjBjYmE2N2E2MzBlNGJkOGU1MzQ2OTIxNSI6ImRlNDAxYWQxZDJjMzM5OTM0YTQ3ODIyNDIxZWJhMGZiNzljODk4NjNkMWRmMGVmNWQ0N2U2YmU1YmIzYThjNDgiOiJhMDAyOTU0YWU1Zjc2NzZhMzIzMDUzM2RiZGY1OTI1MmVmMDUxYWNjNzY1NzRiZDUxOWFkNTY4ODJiYmY0NmU2IjoiNWUzZGUyYjUzOTM2YTc4OTBkYjcyNDg4MDJiYjk1ZTkwOTNkOWQ3YTE1YTkzNzhkOGY0YmE0MmM1MmU2NzlkZCI6Ijc3MmEwNWMyNzljN2ZkODU3NTA3OTNlZTgxYmZjMzI3MTk1NzNlYzUxOWY1YjY0YjAzODZlNjQxNGI3M2IxNTMxNjNmZGQxZGFiNmQyMmM2MzczOTdhMzBhZGY4NjU5NGRlOTBjMzJmNjQ4MmQ1MDUzOWVhZTg3NzU3OTliODllNGM2NDcxNDkzZGY0ZjkwY2UwYjY5NGZlMWE4MWZiNWI5M2JmZDI3MTllZTY5Y2M1NzZlNjMyY2M4ODY4MjRkZWI3NjIyZDQ4N2FmNDUwZTk1YmQ1NWE2MDlhYzMwZTk1YWRkZTQ3YjgzYWM2NTQ0NzRjMThmNjE1ZGJmZGE2ODI2N2NlYzhiY2Y3MGQwOTRkZjYzMDFlODU4ZDMwNzZkYjJhODViMmI0YjNkOTRkZTgyYTZlMDcyMGQ1MzVkMzZkNmU5NTI4MTFjYzM3MWIxZTgyOGI4NmZlMDA4NzBhYTVjNTVlNTc1YTY5MDMzMDNmOWUyZGJjYTQwZTViNjYzMjYxOTJmMTcyOGJiODlmYTdkNzdlNmQzMmNiZjVmMThiMzMwNjIwNmMzOTY5N2I3MWM0MDRlMzhkNDk2YzUyNjM5Zjk4ZWVmOTIwM2JhZmY1MjgzN2E4NzJmNzY4OGI1MzMxOGM4NzBkM2I4Y2IwMjRjODY1YzgxYzNhZDhiNzFlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiZDdkM2U4M2RkOTc5YmNmYjUyNDA3NGYxMmE5MGY3ODg3M2U5ODNjMmFhOTBlMDI0MWYwMGQyYzY5MWE0NzAyYmI0NTJkYmNjNjlhNzc5M2NjMjA4MWI5ODQwMzMyOTVjNDQzNTQ5NTcxM2MyMDI5NWFhOTdiZjQyYmFiYjY2ZWRiNDg1NjM3MGI5NzAxMDIwYThhNzlkZjczODE2NTBmZDdhM2FhNWFjZTRiZjU0YjMzMzFhOGQ0MDkyYzE5ZmRlMDhjZDUxYTA2MTQ2Y2RmYWI5ZTNhMzJlNWNkMDJiMzUiOiI1NjEyZWQ3ZDc5MDQxOWRjZWFiNGJlZmRjZTZlNGU2ODdkMzM1YTNhYTk3MmQ4ODA5ZGI2MjkxZTMwMDFmODI1IjoiOTE1MDI4ZDA2MTAxNjBhMjUxNmU5MjZmMDZlZDM0YjE4YWQxMDY0YjZlZmQ1NjU2NjQ5NGE5MmEzZmEwZWVhNSI6Ijg2Y2Y1YmRmMDYxNzExZDIzNjFhYjZkNzljNzMxYzJmY2Y5YWE0N2FlNWJiNWY2Mjk0NDg2YTE0MDgxYjE4NjIiOiJjZjFiMGRiZmMzZjZmM2FiNTI2Mjk5YjdmN2Q4Y2UxYTk0NWJkZWIwYzBmNjMwNWNkZDY4NzZkNDBkNTY0OWFjZTllNzhmYmUyZTFkZjY1MTExNDU2MzVmNWFjYWU5MGI2YjlhMzgzOTNkYjRiZGFiY2IyZmM1ZTkzZDI1MmEyMDk4ZmMwODI5MTdiMTQ4NWQzODdhYzVlMmVmZGI1ZmNlMGU4MmJmMjAwY2UwZDFmNmM3YjVkMjJmYmEwNjI1NzRkOTIzNGZjOTE4NWYwOTY4NDhkMTAxNDFhZDM5NTcxMDM1YjM3NjlhNTIxMTY1ZjdiNjNhMDA1MGEyMjQ4NWQ4YTQ3ODcwMDI4ZDNmM2I2NDM3OTM4YzNjYjUxNzgxZGI5ZmRhNjQwMTljMDQ5ZGJiNzMzNWRjZjdjOWM3MWYxY2NmMjdjZmY0ZDM3OWEyNzRmZWEwZDAyNmY1ZGUxZGM4ODY2ZjFkY2Y4ODNlMmUwZmRiNjMxNjA1OWQ1MTcyYTZjMWZhYTMyMDM5Njk5NjlkZWZjZDhmMzY3Y2U4NTlhZWJmOTk4MzQ5YmE5NzlhZmE1ZTYzZDk0NTg4ZmYwMmUzYTQyOGU5M2I5ODQ2NDk5NzgyOWNkZDRiNjA1YTQ0MzkzMDU3ZmEyN2EyZmI3ODBiN2RhZmY0YjY0YWQ3M2I5MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6ImMxZTY0Yjk5Mzk0ZTEyNDFiMzFmZmI3YjQ4MmNmYWFhY2Y1ZjJmYmMyNTFmOTU0ZTdlM2RjMDg2NmFhODE4NTZhMTZjZTgzZDljZTcwYjcxNDc5YWU5Y2NkNmM1OWVhNGU5OTk4NmQxZTA5YWIxNmViMWY0OGI5OWNiOWJjOWQ2MzcwMWY2YTlhMWFmMGIxZDgwNTczMzlkNWQ3ZmZlYWNjOGU1NzI5MTM0ZWYyMTQ4NjYzMjI3ZTM0OGRjMzFiOWQ1NjYyNmMwZDQzNDc4ZDVkNTNiZmU5OThmYjg1YjFmIjoiNDJiZTc0M2Y4YTljMDE4N2QyZDU0YjU5NmNhZjY0ZGZhNjMwZDYwYmQ4YzZkZTBiMTI2ZDZhMTUxZDgyM2NkYyI6ImU5MjU2ODQ3OTNiZjUxYThhNGE0NmMyYWM1YjkxZWQ0MDg0M2VmZDA4NzgzMzZmOTgzZjEwMDE3MjIyMzFmMWQiOiJkZjAxOWU3OGVmYzVkM2E4NWZiZDkwNTZhZDA1Zjk3ZGU4MWJlMDVjMDY5YjMyZTY4NzkyYmE4ZjVhNzc1ZmIzIjoiY2MzZGY2ZjFjYmIwZTFiZDkzN2U2NGIyZDhiZTEyYzA3Y2IyNTYzNjkwNDBkODM0MDM3MjI2Yjk2ZTRiOGU3MjMyYzJhYmZjYmJkYzBiYzJjNDMyNDE0ODQ1YzVlYmJjMzVmYTRlOTAzZDVkZjE5YWVmNjJkYzcwMmIyMGQwMzQ2ZGFmMjBjYWViZDg4MTlkZjkyMTBhNzIxYmUzNGQ5ZGY3MjYwM2E0MzcwYzBjNmE2NTM5NzlkMTkyODI1MDVkNjRhZTA5ZTA5MjIxNDk3NTljYTBmNTMyNGY2NjVlYjgzY2VhZjZkZDQ2NzcxYzUyMGI5Njg4NWE4NTAzYjZiZTMzM2VmNmFhOGQ4M2QzNzBlZGYxMDBlZGIxM2I4NjcyNDIzNDQ0MmExNWNjMjNmODkzNTlmNjI5YTJhMTViNjQ1YzI1MTAwOTljMDI2M2QyNWUzMTA1NjdkODIyYmYwM2FlYmJkNGJhYzM5MmI5OTk0MTRiZDAxM2ZkYjAwYjRmYmE4ZTMwYWZiMTdmNTAxNDVkMTEzMDJkNzFkZGRhZDMwY2U2Njc4ZmJlZGU4M2U1NjdhOTdmNGRlYjNiMTc1OWUxOTEzMTk2OTdlZmQ5NDg2ZjJiNTAyYTk0ZTAxYzAwYTliNWI3NjIzMDAzNjY2NWZjNWQ4N2Y4YzllMmZiNGUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiIwNzFiNDZkNTIwODVhNjU4MzA5ZjJjMzViZGFiNDQzZTE1MDlhY2ExNTljMWZiOWMyMjI5NTFhZmZhZjFhMjQzZDBiZGNmYmNhYTI0N2ZjYjhkYTUzZmVkOGU1ZjhiM2VlZDJmZDAyMmM5NmJkZDZlODZiZmY4OWJlYWE5OWYyYmMzNDk2M2QzZWYxMThkZjlhNTUyNWE5MTBjOTU0MGFlYWM1MTY2ZjY1ZjVkMDVjNjI3NzI2MDA4MWFhOWI3MWFjNThjYmI1ZjFiYTUwMDBkNGQ4MDc4YzVhMzBkMjgyYyI6IjdjYTMzZTMzNDViYjMzM2E1YjFmNDEyYTZkNTdmOGViYWQ2NWI0MjdjY2JiZDdmZTNhYzgzNzY5MWRhMzkyMTkiOiI2MGVmYjNjNzVhZWIyZjRmYjIwODY1OWYyMGU3OWViNDFkOGQ5YjQyMjA2NmMyMzVhMTRiOTQyMGJkZjZmMTcyIjoiNGUyNjc1YzgwMDliNWJkZTk4ODJjZTk0MGQ0MmRhZWZlNDAyZmIxMTM3OWUwN2RiOWE0YzBjNzYzZTk3ZjMxOSI6IjgwYjU2YTRiYmVhMDhiMmJiMDlmZGE5Y2IwNGIxZWU3YmRhMDE2NGMyZjEyMjcxZDg4NTdlZTNhZjEwMmFiMjVjNTY4MzYzNTQwNTJlM2Q4NWJiMDJjZjEzNjA3ZDc0NmE2MmIyNGVhZmM5ODliMzVkNGJhMjU0NDk4MjNiYzFlN2IxNDkzNzUyM2Y5NjcxM2M5MDk4ZWYyYWMzZjk3NjUwNzAwNzZmMjhkNzZjN2UzYzJhMGZlN2I2YWZkMGFjMjE2N2FlMDcwYTdmZjE5YzViYmNlNTI5NDhhYmJlOTRmMGQ1NWE1ZDFiZWIzMWE2NjVlOTdmNTZmM2I5MjMxNGNhZDliYTc2NGNjMmUzZDBjMDAwNjRjYTFiNGYzZWZkYTE0ZTdlMGFjYTQzMWI0MjdkZmVmMjQ0M2Q5ZTNiOGE2NTY3YzI2ZWIwZGRiMTY2ZjlkZDI0NzM3MTQwNzY3NmM2YTQ2ZmNhYTBmOWY2N2Y0OTI3NjY3NjM2OWI3MjVkYTI5YWE5ZWJiN2MzZTE4NmRlNDYwNDUyY2M4MWMwMjI2NmJiNmU3OWExMTljNTRmNGJlZDhiYzNkZTcwOWJmNmE2MjU5MzI3M2Y0NjgwMTM2ZTk1ZDZkMTIxNzI3ZDlmYWQ1NWM0YTExMGEwOGJlMWUwYTA2Y2RlZjk4YWEwNGViIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiMDZjN2E4YTc0YjZmZTllMTRmYTI0NzVlZjhiOGExZmY5NjEwYmZjMWI0YjkzY2Y1M2E4Yzg0NGQ3ZGJhYzA4ZmY3NDNlYTFiZmM2YzEwZDc3MDdiNTE3MmEyOWFmMDU0NDkxYjU3M2RjMmNkZTFhM2U3NDI2MmY0ZmQyZTllYzgxOWVjYWU4MzBkYjRmMGM3MDIxMDI4NzM3ZmZjNWJjMDI1YTIxNmY2NTgwNjVlMjczMTRjMzBjMDQ5MjUwNTFjMGQ3Y2FmNmVmNDQwY2FlMjYzZjQ5MTQ4YzAzOTgwMDciOiIxYTMzNzkzZDI1NTM4NmQ0Nzk1MmJmYzFmNjNlYzE1Y2FmZjM2MDNkNWMyOGIyYWNkZDc5OTY3M2FmZmFiNTg5IjoiN2VhZGU5OGU3MTdhYWEzMmY3NGIwMzMxNjNhZDc2NDg5YTdkNjgyNzgzZDJkYjY3Yjk2OTZlY2M3YjliZTU3YSI6IjU4MzY5YTI0MTE2NmJjYzg3ZTcxM2IyOGI0YWUyMTZhOGU2MWY4Y2JhODM5NjlkNDJiOTFlNTUyODMyODZhZjYiOiI3YmM4NDU0NGI2OGVhZGFjOWNmMWNhOTA3ZDkxNjZlMDk0ODQ0YjM5NmU1ZDU0NjcyZWM4OGRhYzU3MzQxODEyNWQ1MGJlZmUxMDk3ZTJmMzQzOGFhYWYzZjEzMTgyY2NmNDU5M2JkZGQ1MmQ2YTQxYTVlNThmMjY3YzZmMDgxN2Q4ZDFjZTMzMjdhNjExZjlmYzU5MWFlNjRjN2MxOGQ2MTk1OGE1OThlMGVjNDM4M2UyNWI0NmRmZDM0ZGIxMGY2MDljZjUzZWQ3NmM4NjExNjAxOGZjOGU5MDI3YWEyZjBiMGZiM2YyMmQ2Yjg2YjExMzExZGFhNWU3OGQxZjQxMDVhZTRhYzY3ZjYzNzA3NDAwYjBmMDU0YjZmM2Q3MWYyNmNhNWQ0NjMxOTI5NTJmYjM5YWUwMDMyNmRiOWNiMWRjMDI4NTI1YzMxYWE5YmViN2MzZDI5OTA3MGNjM2VkODI3OWI4Y2EzMjk0MGIyMTI3M2FmZTgwMTZkODA2OWE1NzdhY2RiYTZiZjZkMmZlMzI3YjJmNmRjOWM1Yzc4NzVkYTZjM2Y1ODQ1MTZkYjAzNjVkMTY2NzBkYjZkOTBjYzFlNWJiNTMwOWNlOWZjODIzNDMyNmRkZDY4NzA2ZTFkNzY4MzAyMDJjZGJhNzcwYmQ0MDA0NmI3NTFmM2MxNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6ImQ1NTUyZWZiYjdmMzM0ODFhNTc0NTg5YzRiYjU2ZGJlNDMwMDBmZmU5ZWE2N2ZkMGM4ZDU2MzgwOTJjODQ2OTk0NGExNTBiMGRjMTMxNWFiMDQ4NDk3NmIxMjhjY2M5NjE3MzRkMjI2ZDY2Yzc3ZGFiM2MyMjU1OGZmMjIyNWUzMjE5MWFhMmRjZWM4ZTQ3YTU2Zjc1N2Y3MWMwODFhY2FmNWRmMzU3YzA3OTUyY2Y2ZGUyZTM1NjQ4MTNkZWQ5ODJmNzIwNjllZDFiY2ZmNmI0OGJhNGI0NjI1YmEyNDdiIjoiMzQ1YjRhY2IyYjBjYWM4MjEzOWZkNTE2ZWMzZDM5MjkyNDM4YTkxNmQyZDJjOGU5N2VmMjY1YTExOTJhNjVhOSI6IjczMjQ1MWNlN2JmNWFjYzg0YTA1ZGUzNDc0YjYyMmQwN2JkM2QwMWViNmUzNzI0NTM4ZTQ1NGM0ZDY2OWE5OTQiOiI3YzdlZjY2MGNlYmVlOTZiNDI1NDg1Mjk2YThlODhjMzdjNjZlMzg1ZWIxY2Y3Mzg5YTk1YzQ2ZmE2OGEzNGY2IjoiZDgyNDczZGIzYmQ1NTRjZGNiMmFhZGJhYWE5YzkxOTA4N2Q5YjdiYzhkODgzZjk5YmM5NWExOWZjZjk2ZjI1Njk4ZmNhOGExMzRjZTQ0MTQxNDg1MjE2Njk5OGE2ZWUyZjZhMThmOWY2Njc5MDdmOGY4YmNkMGQyYWRlN2RmY2MwM2NiZDZlY2JjZjNkZWM0NjU1ODE1NGRhYjU5NzE3ZjM4NmJiMzNjOWRmOTQ1NmIyNThmZWVhNTkzYWUxZDliZmU3MDc5OWZjZTRiMjVjZDZmZmQwODE1ZTg0OWNmOTNiNDk2ZDZlZjM2Y2NlNGUxNGZjM2RlMTUwNmRiZjM0ZjcxMTFiNDgwMjdjZTJhZGVkNDE0MGJlYTgzMTFkNWRlOWRmNTI5MGU4MGZiNjU0NjJmYzU0MzNlMDBjMzQ0YTM2NTdmNDdmNmE3Yjk5MmM2YWUzNjJhZmQ0NjIyODBlNzgzMGQzMTcxOTJiZDhkZDI2ZGZlZmU3NzlkZmQ2OWViZmNhMzQwMzhiMDc4YzAxNjQ0ODU3YzYwYzFmNmRiOWRhOTg3N2NiZDI3MjFkMGIyNmE2N2M0ZWVlMWJjNDNmNmQ2MzIxMTA3NTllMWUzMWU3YzNkNjEwNWUzZGEzMGQyOTdiNjllYjA0ZTg4MGQxZjJiZmYyYTU0ZWE3OTgxNzgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiYmVlNWRkNzI4Mjg4MDY5Mjk3NTdhZmEwMmE5MmM1YzU0ZDg2YzUwMTUwNDczNzliNzE3YzY2MDhhNzEyMzliMTUyNTVkZTVhMmJkMjdlOWM2ZWYyMzA0NmM4YTgyMTdiZDg5NzQ0NTUyMTM3YjI0ZDkzZTVlZDQxMjUwZWNiY2Y2ZWM3NzczNGZlZDdhNDA2ODBlODAxZWEyNzdlOGM2ZWFlNTdiNDMyOGFjYjFlMWRmYTA0ZDBiNWY3OTljZTFlMmYxMTFjM2ZlOGM5Zjk1NGZkYWQ2YWNlYWM3ZDI3Y2QiOiI0YzNjNTQyODQ4NDVmYjJhNDk0ZDFlNDUyYjJiYTFlYjBkMzQ1NmNmYTk1NjBjYTdjNjA4NzhlODQ1OGViN2YzIjoiYThhMzMzNTI3YTIxNThhMDg3ODc5YTZmOTUwZDJhZjhkMDkzYzRmNjc5NDVhMTQwNTQ5YTVlOTNlNDA1Yjg4NiI6ImJmYTAwMjVhYzk3NzRhYzc2N2E0ZDM4MTBjMjdhM2M4ZTNlNDg3ODBjZDA1OTdhNWE0MDFmNmM5YjAwNjdlN2UiOiJlZjRjMTY5ZmU1ZmRiMzcxNDJjNzE3MzRiNWI1Yzg1NWEzYjc2OTNhMGQ3OGY0OGQ3NjE5OWFhZmEzZDM5OWIwNTdlYTc4YjJmMTE4N2JiZDMyMTViY2E1MmUzYmNkZmJiNzRkMWQwYzFmYmY5MWU3YTgxZjdjM2Y2ZDhmZjUyNzZjYTkwNjcwNGQyZDM1NTZlYzhlYzFkNmQ3YmE5ZTdkZDczNzM4YTdlOTBiMTM5OGQ4MDA2MTdmM2E1NDg3MTc5NDM5ZTI1ZDBhOWQ0ZWM0ZTM4Njk5YjM3MDMwMjBhOTljNTMzYTYyODIwMDA1NDQyOTZlNjNiNmZmZTEyZGNhZjM4NjRhODUwMmE2ODQ4MmY5MGZhN2ZlOWFiYTZjYTllOWE3NGM2ZTNmODk1NDFkMThmMmE5MDk3MzcyODBhYzhlNzcyZmNjZTZhMTE3NDExZjM2YzllODJmMmQ3N2ZjN2EwM2UyZjEzZjk3ZGE1YmZkNmJmNjlmMWQ0NmE2NGM1MTkwNDZlNmQwZDM3OTk2NDcyM2JhYjJiODliZTllYzkxYTNlNWEzM2M1M2E3MzMwNGMxZTg5NjIwMTg4YWEyZTBiOGU0MTEyYzU2OTllNmE5OWQ2NmIzOTVjZmJkMjUwMmU1NjdhMGE5ZTM1ZWRlMTQwNjgxYjJmZmQ5NWZlNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI3NTRlNTQyZGJiNDUzZjEwZjQxZTEzNjExNjRmNWUxZmZkYTY3YTAyNGJhMjY3MDFjYzg2MDY2Y2FmMmY5NDc3YTA3NDY5MGZhYTA2OWNmZWM2ZmEzOGQ4YjI1MDZhY2EzNGZkMjdkNjY3MDg4NzZmMjhkOGFjMDhkMjhlZWVmY2I3MjhmYjYyMjY1NTlkNWEwNjQ2YThlMTgzODA3YThlMDg0NjljYzU1MzU3MTJhNDQyNmRkYzVhMzQwYjZjNzE2MDdlZTFlMmRmNDg5NTI4YTI2NmIxNDFkN2M5NzdjYSI6IjNhOTE5M2ZiYjY3YTBmZGQ3MzJhNzg4ZDNhZTU3ODNkZTg0OTY4Nzk0YjhjNGMwYjVhZDRkZTA2N2E1ZDFmZTUiOiIwMzRkYjNjNDBjMmMxODFjYjRkNjM1YWFmMDhmMDVlNzI0ZjQxOGVjZjdiM2QyYmE2ODYzZTllZGU2MTY4NTdmIjoiNTAwNThiY2RkNTNjOWQyNTdkYWI3ODQ2ZmVkY2E0ZWY5OWVkMDY5NjA0MDAyY2Y1OGFiMjcwMTRjYTcxMDBjMCI6IjFkMzA5MDRkOGNkNGUzNzM1N2IxYjliNGFkMDYwZmFjMTJkMWNmMWQwNWUyYjViMmZjYzQ4YmZmMTI2NDNiNjBmNWU0MGEzZjNlNTQyZTQ2ODA0ZGRiOTA0NTgxY2JkNTc2ZjBkYmI0YjgzYjQ5YWY4M2M0OGI2YzY4MDUxZDdjN2Y0YmJmMDlkM2E0Zjk5OWRiNDc3NjA4OWNiZWQ1N2RkMmE3NWJlODI2ZWUzNGUxM2RkODAyZDdkZmE0NDQyYTBhMGZlMTU0ZWM5ZWZlNjY4NGQ2YTQwMGQwNGZhNDA0MTIzYmE1NGQ2Yjg5YjdkZmVjYTRkNDU0N2UzMTk3MjE4ZGMzNmJlNWMwMTM3Yzk0Yjg4OWMxYWEyMmI3NTY3ODg3NTUxZWFiMTY4ZDM2NWQxMWE1ZmJkMGViMTUxMTZlOTI5NDY4ZThlYjQ0NTYwOGQ5MTM4OGE5YjNiMDVjOTViOTczM2JiM2ZmMDhkOTZjMDg5OWI1MGI0N2M1NzBkNzUzMjNjNGQyNDA2MjgyMGIwYTlhZmM3YmIyNzcxZmUxNjNkZGNlYjQxMTQ3MGYzMzU1NDgyMmUzMGRmY2VlZWZkMDc5OGFjOWU0YTQ4YjhkMzBjOGY3MjVhNGRmNjU2OGQxNWE3NTAxMzE5OThlMjUyZGJmOTE5OTEzNWY4MTdmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjQyODI0YmQ4OTQ0ZjQ5NDc5ZjA3Y2Y2YWY4ZjAyYWVlYmRhM2FjMDc0YWI3MmE5ZWNhODg1MGM5OWI5MDlkMDgxZjIzODJkNGVjYzllOTIzYmYxYTU4OGY4ZGIxMGJkY2U2MWM2ZjQ1MmM4ZTE1YzBmMDAzZDIyMzFjZTVjYjY5MjkyYWUxYTM3YzYwMmFhODg5ZjBkNTZkZjA0OTcxN2JkOTkwMDVmZjM1M2MwOGViMjllYmI4Y2VlM2FhZmViNTJiMzg2N2E2MWE3NjMzNWQ4NmMyZDc4MDhhYzk0YmJhIjoiMmI1NzMzNDVjNGZiZGI4MzgyYmJkYWMxZDNlMmMzOGZiYWZiY2I1OTljNjc0MTIyOTZmYjY5MTJlMWE2NDBhYyI6ImE1ZjQzYWJiNDYzNGJlZGYxYjE5OWRjZjYzOTRiZDM1MDRmZmEwY2RjMTUxYjRlNTNjZDA3NzJkODZhNDNmNjAiOiJhMmYxYWM1MmVjNDZkOTNiM2I5NDQwNTViNzIwNWRhOGZlZTk1YzlhMzI0MTQxOGNmYmRmYjBlOWVjZTkxNDNhIjoiYzc1MTI0MDI4M2VjMjQ4MGY2Yzc3MjBjMzFlMWY5ZjcwYzIzOTA3YjM4NjAyZmY3NGY3MDdhMTRhYzEwOTg5ZTI5ZDFlYzJlODFkNGNmODVhOWJkMzQ0MGY0NDVmZGI5ZWY3OTU1YmRkMmJlZWNiNWYzYzY5NDc1YjcxYWJmYjRlYmQ1MTM0MTQ0YjI0YjAxMWUyZmE2MDI2ZDg0ZjhmYjUxMWM3YTQ0ZjJhZDdjZDIxMmFjZjA4OWRlYTRiZjJkYjViZTlhMjRjZGVkNWJlOGFkMGI4ZWQxN2JiZjBjNTY2OGZkNjQ0ZGFhODYzNjE2ZjY4Mjc4YjVmNmRkOTVhYjIzODQ1MTk2NmJiNWFlNjY3OWQxZTk5YmFkNjEwYmVmZDQxOWFjNmJkYWIzNDQwYjcwMDExMzlhZjhhMmZjYTM1Yzc0YWU2NWQwNWY0OTBhNDgwY2FhZmExZTM0ODdiNzg0NTBhNWJhNTlmYzBhNTkyMjAzOTVlMTQ2ODVkMDJmNmI0MTgwYzcyOTc3ZjA5NWUzM2M1Y2I1MDQ4YjYzYmNjYTI3NjcwNjFjOTdjNjE2ZjQ5NGM3NzVjNWQzN2E2N2M1Y2U5OTZlOTRiYjhmZmRlNGE4ZGQzZGU5N2I3NDQ5M2M5YjJkOTg1YTI0OTJlMWY5N2ZiYTk0N2QyOTQwYzUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiOWQ4OTlhNTZhMDY2MGYxOGI5OGM5MjFiMGQ0MDk1NTBmYzIyNWZmY2ZiOTc1ZTllYzZiMjMxNWJjOWExZWIzZjY4ZmM3N2FiYzM0NTIzODBlMzBhYzc2MWEyMGE5MTU2NWY1Y2U4NzVhODJlZTA4YTQ2YTFmYzVkNGFhYTg5MThmYjIzOTcwNDI4Yzg2M2RkMWIyNDYwNmIwMTE4NDc2YjE1MGY3YTQ3ZjM5NjJkZmRkOGRkZWM5M2ZjOGY4MmRmN2NkYTU4Y2IzYmI1NjIzNjEwZWVjNjliZGQwNzIyYTAiOiI2N2JmNjFiM2VjYTk0MDEzZmMxNjViMTEwZWFmY2I5MTI2OTE3YTBjZTdlMmQ5YmRmN2VmMWIzOGJhYjZjYTRiIjoiZGIxNDRmNTMxY2VlNWVmYWRjNTA1ZjRkMzdhNmU1NDEzZjYzOGQ0NmQ0MTlmYmFjNzZmODFlY2I2M2VhMjgwOSI6ImQ3MzdiMmJhNjJjMWVjMWM3NjZmMzBhNWRlYTczNjNiNWM1NzBjMWU3YTMzZmI2NWMzZmI4OWVhYjQxZjc0OGUiOiJkZTUxOGFjMzAzNDg1OWE0M2NmNjcwMTcyMjU1NWJlOTI5YTVhYjI2NThkZTMyNjY5NjA2OGI5NzBmZjJmNzdjNzUwODNmZWU0NWE2NjYwYjgyZmQxZTk2MGI0NzJhNTBkOTY1MzU1NTlmNjBiM2UzMTMxYTJlMDUxYWYxMTgwNjNjMWNjOGIxMzU2MDE0NTM4ZTZlZDBlMmRhMDVjOTBiYWEwNDEwODVmOGYxNTc1ZmMzMTAzMjkzYTAzMDM3NTEwNzc0MzhhMDgxZmEzYmM1YzY0YWVlZWE1YzRiMzRmYjY5NTdlOTFkYjQ3YmMzZjczNzEwMDg3ZGI5ODQzZWZhMWE2MmU5ZjYxNTg0M2Y2OWYzZjQ1MGQ2YzU4YjMzYjFhNGQ1NTUwOWRmMmYzNGI4YTE0NDA3Y2QxYTg3ZGM5NTgxZGJlMTgwZTJkODM5NDE3YTRmNmNhNmE3MzFhYWUzZjA4YjUxNWRmODIwMDg5MGJhYWU5Yjc5ZGI3OThjOGU1MzBiNmEwM2FkMTNjM2MwOGJhYTRjZmYwYjA1NWYzNWRiYmM2Y2QwOGZiY2FjN2MwZmI3OGY4NzU0OTIxZTAwMGU2MjJjZTMwNDJlNzQwYzY0YmM5MzVhY2E4NWQ3MTMyNzIzZGU4NDUzYzU0M2Q1Y2Q1YTQwNzQ4ZTI4NmI4ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJhZTc2Nzk1OTM3OGU5ZjAzMWM4ZjY4ZDc3OGNmYzBkY2UxZjliNGNjMTc2YzVmOWY5ZjRjOWMzYWVkOTQzNWY0ODI1ODVhMDcxMTgxMmMzYzc5YmRhNjE5Yjk0MmM2ZWI4ZjVhYmJlODU0MGFhZWVlZGVhYWViNTJjMTU2ZDA3ZDg2NjkxNzlmYzY5Njc4ODRkYjY5YzE3MTg2Y2I4ZmM5NmYyZGU5YjBhYzU5MjJhYjUzYzU5NWRmMWUzNTEzYmIzZjI2NDJiNDU4ZDk2ZTM3ODJkYmI5NzVhOGI0ZmFlZCI6IjgzMGYxNzhjZjVmNTQ0MTQwZDJkOGMwNzM3NzkwYjk3YmM2ZjE1MDc4NDg2NTU0OGQ3M2YxZjM3YTVhMzlhNjUiOiJjYjEyYTJiOWEwMmFhYWVhZTRjN2M3NmNhZDllMDA2MTg2ZDk3OGJjMDQ2YzFlYTgxNTMyYmM1MTYwMWVkZTAwIjoiMmQzZGRlM2IzNTgxYjg2M2UxNTkwYmRjNjM4YzMzYmZkMTcwNTU1NDQ1ZTIyNWYzYTQ1MGQ5ZTk3NjJhYmVjMSI6ImZkZGY3ZjFiOTA2ODYxZDQ5ZGE5NjYwZTc3MTZiNWVmOTg3MTYzZTdlMmY1MWY0ZmVmMmNiM2U4ZDAxYjczNjA2Nzc2NWFhZWExMWE3ZDE5MzI2NmIyZTAwNzFlNGQ0YzhjYzc3NjM5OTQ2NDU2M2FkYjlkZWFlMjJiZDcyMWVkMDNiMTQ4NTE2MTAwYjlmMzQwYTAwZDI2MzJjODBjNWIzZTFmOTM4MjVmZmViMTEyZmI5MGU2NThkNjM4NzQwZTYyZDgwMzFmYWJmZTQwZjc5YzIwNTMyZTY2N2FlYWNjNmJlNjM1ZjY0YTA1ODAyMzZkN2Q5NzhjNWRiMDE3Yzc2YTY3NjdkYzQxOWJhMmY4OTEwMmE4OGU1MzI1NGY0MTIwNTg2NmU4NzUyMjUzODBhZTA0OTQzYmNjOGYxNTJjOWZkNzlhNjgwNTU3ZDFmMmEwYThhYzdiMjc5MDBiYmEzM2RiNjNlMjZlMGQ3MzYzMDM0YWYxNDMwYjY1NDZhM2NlMmMwMWM4Y2ZlMGUxNTJmMTA2YmFhNWIyZmFlMWZlMDBjZWYxMDE1NGI3MzVmZGZhZTM1NGVjZWNjN2RhNDRjOTE0YjA1NGNkOTdkOTk4NjZhOWQ1ZGY0Mjc2NWNkNjJlYWYxYjhhZGM4ODVmYTIyNjM5MTFjODM3YjQ2NDNmIgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWQuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDFmNmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWQuZGF0YQpAQCAtMCwwICsxLDEyMjUgQEAKK01EIHByb2Nlc3MKK21iZWR0bHNfbWRfcHJvY2VzczoKKworTUQgTlVMTC91bmluaXRpYWxpc2VkIGFyZ3VtZW50cworbWRfbnVsbF9hcmdzOgorCitJbmZvcm1hdGlvbiBvbiBNRDIKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfaW5mbzpNQkVEVExTX01EX01EMjoiTUQyIjoxNgorCitJbmZvcm1hdGlvbiBvbiBNRDQKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWRfaW5mbzpNQkVEVExTX01EX01ENDoiTUQ0IjoxNgorCitJbmZvcm1hdGlvbiBvbiBNRDUKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfaW5mbzpNQkVEVExTX01EX01ENToiTUQ1IjoxNgorCitJbmZvcm1hdGlvbiBvbiBSSVBFTUQxNjAKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfaW5mbzpNQkVEVExTX01EX1JJUEVNRDE2MDoiUklQRU1EMTYwIjoyMAorCitJbmZvcm1hdGlvbiBvbiBTSEExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9pbmZvOk1CRURUTFNfTURfU0hBMToiU0hBMSI6MjAKKworSW5mb3JtYXRpb24gb24gU0hBMjI0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2luZm86TUJFRFRMU19NRF9TSEEyMjQ6IlNIQTIyNCI6MjgKKworSW5mb3JtYXRpb24gb24gU0hBMjU2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2luZm86TUJFRFRMU19NRF9TSEEyNTY6IlNIQTI1NiI6MzIKKworSW5mb3JtYXRpb24gb24gU0hBMzg0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2luZm86TUJFRFRMU19NRF9TSEEzODQ6IlNIQTM4NCI6NDgKKworSW5mb3JtYXRpb24gb24gU0hBNTEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2luZm86TUJFRFRMU19NRF9TSEE1MTI6IlNIQTUxMiI6NjQKKworZ2VuZXJpYyBtYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX3RleHQ6Ik1EMiI6IiI6IjgzNTBlNWEzZTI0YzE1M2RmMjI3NWM5ZjgwNjkyNzczIgorCitnZW5lcmljIG1iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfdGV4dDoiTUQyIjoiYSI6IjMyZWMwMWVjNGE2ZGFjNzJjMGFiOTZmYjM0YzBiNWQxIgorCitnZW5lcmljIG1iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfdGV4dDoiTUQyIjoiYWJjIjoiZGE4NTNiMGQzZjg4ZDk5YjMwMjgzYTY5ZTZkZWQ2YmIiCisKK2dlbmVyaWMgbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjNAorZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittZF90ZXh0OiJNRDIiOiJtZXNzYWdlIGRpZ2VzdCI6ImFiNGY0OTZiZmIyYTUzMGIyMTlmZjMzMDMxZmUwNmIwIgorCitnZW5lcmljIG1iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfdGV4dDoiTUQyIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOiI0ZThkZGZmMzY1MDI5MmFiNWE0MTA4YzNhYTQ3OTQwYiIKKworZ2VuZXJpYyBtYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICM2CitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX3RleHQ6Ik1EMiI6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IjoiZGEzM2RlZjJhNDJkZjEzOTc1MzUyODQ2YzMwMzM4Y2QiCisKK2dlbmVyaWMgbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjNworZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittZF90ZXh0OiJNRDIiOiIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCI6ImQ1OTc2Zjc5ZDgzZDNhMGRjOTgwNmMzYzY2ZjNlZmQ4IgorCitnZW5lcmljIG1iZWR0bHNfbWQ0IFRlc3QgdmVjdG9yIFJGQzEzMjAgIzEKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWRfdGV4dDoiTUQ0IjoiIjoiMzFkNmNmZTBkMTZhZTkzMWI3M2M1OWQ3ZTBjMDg5YzAiCisKK2dlbmVyaWMgbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjMgorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF90ZXh0OiJNRDQiOiJhIjoiYmRlNTJjYjMxZGUzM2U0NjI0NWUwNWZiZGJkNmZiMjQiCisKK2dlbmVyaWMgbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjMworZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF90ZXh0OiJNRDQiOiJhYmMiOiJhNDQ4MDE3YWFmMjFkODUyNWZjMTBhZTg3YWE2NzI5ZCIKKworZ2VuZXJpYyBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICM0CitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHQ6Ik1ENCI6Im1lc3NhZ2UgZGlnZXN0IjoiZDkxMzBhODE2NDU0OWZlODE4ODc0ODA2ZTFjNzAxNGIiCisKK2dlbmVyaWMgbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjNQorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF90ZXh0OiJNRDQiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI6ImQ3OWUxYzMwOGFhNWJiY2RlZWE4ZWQ2M2RmNDEyZGE5IgorCitnZW5lcmljIG1iZWR0bHNfbWQ0IFRlc3QgdmVjdG9yIFJGQzEzMjAgIzYKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWRfdGV4dDoiTUQ0IjoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiOiIwNDNmODU4MmYyNDFkYjM1MWNlNjI3ZTE1M2U3ZjBlNCIKKworZ2VuZXJpYyBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICM3CitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHQ6Ik1ENCI6IjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIjoiZTMzYjRkZGM5YzM4ZjIxOTljM2U3YjE2NGZjYzA1MzYiCisKK2dlbmVyaWMgbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjMQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF90ZXh0OiJNRDUiOiIiOiJkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZSIKKworZ2VuZXJpYyBtYmVkdGxzX21kNSBUZXN0IHZlY3RvciBSRkMxMzIxICMyCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX3RleHQ6Ik1ENSI6ImEiOiIwY2MxNzViOWMwZjFiNmE4MzFjMzk5ZTI2OTc3MjY2MSIKKworZ2VuZXJpYyBtYmVkdGxzX21kNSBUZXN0IHZlY3RvciBSRkMxMzIxICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX3RleHQ6Ik1ENSI6ImFiYyI6IjkwMDE1MDk4M2NkMjRmYjBkNjk2M2Y3ZDI4ZTE3ZjcyIgorCitnZW5lcmljIG1iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzQKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfdGV4dDoiTUQ1IjoibWVzc2FnZSBkaWdlc3QiOiJmOTZiNjk3ZDdjYjc5MzhkNTI1YTJmMzFhYWYxNjFkMCIKKworZ2VuZXJpYyBtYmVkdGxzX21kNSBUZXN0IHZlY3RvciBSRkMxMzIxICM1CitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX3RleHQ6Ik1ENSI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjoiYzNmY2QzZDc2MTkyZTQwMDdkZmI0OTZjY2E2N2UxM2IiCisKK2dlbmVyaWMgbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjNgorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF90ZXh0OiJNRDUiOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSI6ImQxNzRhYjk4ZDI3N2Q5ZjVhNTYxMWMyYzlmNDE5ZDlmIgorCitnZW5lcmljIG1iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzcKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfdGV4dDoiTUQ1IjoiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOiI1N2VkZjRhMjJiZTNjOTU1YWM0OWRhMmUyMTA3YjY3YSIKKworZ2VuZXJpYyBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICMxCitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHQ6IlJJUEVNRDE2MCI6IiI6IjljMTE4NWE1YzVlOWZjNTQ2MTI4MDg5NzdlZThmNTQ4YjIyNThkMzEiCisKK2dlbmVyaWMgbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjMgorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF90ZXh0OiJSSVBFTUQxNjAiOiJhIjoiMGJkYzlkMmQyNTZiM2VlOWRhYWUzNDdiZTZmNGRjODM1YTQ2N2ZmZSIKKworZ2VuZXJpYyBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICMzCitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHQ6IlJJUEVNRDE2MCI6ImFiYyI6IjhlYjIwOGY3ZTA1ZDk4N2E5YjA0NGE4ZTk4YzZiMDg3ZjE1YTBiZmMiCisKK2dlbmVyaWMgbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjNAorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF90ZXh0OiJSSVBFTUQxNjAiOiJtZXNzYWdlIGRpZ2VzdCI6IjVkMDY4OWVmNDlkMmZhZTU3MmI4ODFiMTIzYTg1ZmZhMjE1OTVmMzYiCisKK2dlbmVyaWMgbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjNQorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF90ZXh0OiJSSVBFTUQxNjAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI6ImY3MWMyNzEwOWM2OTJjMWI1NmJiZGNlYjViOWQyODY1YjM3MDhkYmMiCisKK2dlbmVyaWMgbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjNgorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF90ZXh0OiJSSVBFTUQxNjAiOiJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSI6IjEyYTA1MzM4NGE5YzBjODhlNDA1YTA2YzI3ZGNmNDlhZGE2MmViMmIiCisKK2dlbmVyaWMgbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjNworZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF90ZXh0OiJSSVBFTUQxNjAiOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSI6ImIwZTIwYjZlMzExNjY0MDI4NmVkM2E4N2E1NzEzMDc5YjIxZjUxODkiCisKK2dlbmVyaWMgbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjOAorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF90ZXh0OiJSSVBFTUQxNjAiOiIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCI6IjliNzUyZTQ1NTczZDRiMzlmNGRiZDMzMjNjYWI4MmJmNjMzMjZiZmIiCisKK2dlbmVyaWMgSE1BQy1NRDIgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMQorZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittYmVkdGxzX21kX2htYWM6Ik1EMiI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiYjkxY2U1YWM3N2QzM2MyMzRlNjEwMDJlZDYiOiJkNTczMjU4MmY0OTRmNWRkZjM1ZWZkMTY2Yzg1YWY5YyIKKworZ2VuZXJpYyBITUFDLU1EMiBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMyCitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21iZWR0bHNfbWRfaG1hYzoiTUQyIjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiIyNzBmY2YxMWYyN2MyNzQ0ODQ1N2Q3MDQ5YTdlZGIwODRhM2U1NTRlMGIyYWNmNTgwNjk4MjIxM2YwYWQ1MTY0MDJlNGM4NjljNGZmMjE3MWUxOGUzNDg5YmFhMzEyNWQyYzMwNTZlYmI2MTYyOTZmOWI2YWE5N2VmNjhlZWFiY2RjMGI2ZGRlNDc3NzUwMDQwOTZhMjQxZWZjZjBhOTBkMTliMzRlODk4Y2M3MzQwY2RjOTQwZjhiZGQ0NmUyM2UzNTJmMzRiY2ExMzFkNGQ2N2E3YzJkZGI4ZDBkNjhiNjdmMDYxNTJhMTI4MTY4ZTFjMzQxYzM3ZTBhNjZjNTAxODk5OWI3MDU5YmNjMzAwYmVlZDJjMTlkZDExNTJkMmZlMDYyODUzMjkzYjhmM2M4YjUiOiI1NGFiNjg1MDNmN2QxYjVjNzc0MTM0MGRmZjI3MjJhOSIKKworZ2VuZXJpYyBITUFDLU1EMiBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21iZWR0bHNfbWRfaG1hYzoiTUQyIjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiJiOTFjZTVhYzc3ZDMzYzIzNGU2MTAwMmVkNiI6ImQ4NTBlNWY1NTQ1NThjZjBmZTc5YTA2MTJlMWQwMzY1IgorCitnZW5lcmljIEhNQUMtTUQ0IEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzEKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWJlZHRsc19tZF9obWFjOiJNRDQiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6ImI5MWNlNWFjNzdkMzNjMjM0ZTYxMDAyZWQ2IjoiZWFiZDBmYmVmYjgyZmIwMDYzYTI1YTZkN2I4YmRjMGYiCisKK2dlbmVyaWMgSE1BQy1NRDQgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMgorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittYmVkdGxzX21kX2htYWM6Ik1ENCI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiMjcwZmNmMTFmMjdjMjc0NDg0NTdkNzA0OWE3ZWRiMDg0YTNlNTU0ZTBiMmFjZjU4MDY5ODIyMTNmMGFkNTE2NDAyZTRjODY5YzRmZjIxNzFlMThlMzQ4OWJhYTMxMjVkMmMzMDU2ZWJiNjE2Mjk2ZjliNmFhOTdlZjY4ZWVhYmNkYzBiNmRkZTQ3Nzc1MDA0MDk2YTI0MWVmY2YwYTkwZDE5YjM0ZTg5OGNjNzM0MGNkYzk0MGY4YmRkNDZlMjNlMzUyZjM0YmNhMTMxZDRkNjdhN2MyZGRiOGQwZDY4YjY3ZjA2MTUyYTEyODE2OGUxYzM0MWMzN2UwYTY2YzUwMTg5OTliNzA1OWJjYzMwMGJlZWQyYzE5ZGQxMTUyZDJmZTA2Mjg1MzI5M2I4ZjNjOGI1IjoiY2VjM2M1ZTQyMWE3Yjc4M2FhODljYWNmNzhkYWY2ZGMiCisKK2dlbmVyaWMgSE1BQy1NRDQgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMworZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittYmVkdGxzX21kX2htYWM6Ik1ENCI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiYjkxY2U1YWM3N2QzM2MyMzRlNjEwMDJlZDYiOiJhZDVmMGEwNDExNjEwOWIzOTdiNTdmOWNjOWI2ZGY0YiIKKworZ2VuZXJpYyBITUFDLU1ENSBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21iZWR0bHNfbWRfaG1hYzoiTUQ1IjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiJiOTFjZTVhYzc3ZDMzYzIzNGU2MTAwMmVkNiI6IjQyNTUyODgyZjAwYmQ0NjMzZWE4MTEzNWExODRiMjg0IgorCitnZW5lcmljIEhNQUMtTUQ1IEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWJlZHRsc19tZF9obWFjOiJNRDUiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6IjI3MGZjZjExZjI3YzI3NDQ4NDU3ZDcwNDlhN2VkYjA4NGEzZTU1NGUwYjJhY2Y1ODA2OTgyMjEzZjBhZDUxNjQwMmU0Yzg2OWM0ZmYyMTcxZTE4ZTM0ODliYWEzMTI1ZDJjMzA1NmViYjYxNjI5NmY5YjZhYTk3ZWY2OGVlYWJjZGMwYjZkZGU0Nzc3NTAwNDA5NmEyNDFlZmNmMGE5MGQxOWIzNGU4OThjYzczNDBjZGM5NDBmOGJkZDQ2ZTIzZTM1MmYzNGJjYTEzMWQ0ZDY3YTdjMmRkYjhkMGQ2OGI2N2YwNjE1MmExMjgxNjhlMWMzNDFjMzdlMGE2NmM1MDE4OTk5YjcwNTliY2MzMDBiZWVkMmMxOWRkMTE1MmQyZmUwNjI4NTMyOTNiOGYzYzhiNSI6ImExNmE4NDI4OTE3ODZkMDFmZTUwYmE3NzMxZGI3NDY0IgorCitnZW5lcmljIEhNQUMtTUQ1IEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzMKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWJlZHRsc19tZF9obWFjOiJNRDUiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6ImI5MWNlNWFjNzdkMzNjMjM0ZTYxMDAyZWQ2IjoiZTk3ZjYyMzkzNmY5OGE3Zjc0MWM0YmQwNjEyZmVjYzIiCisKK0hNQUMtTUQyIEJvdW5jeSBDYXN0bGUgdGVzdCAjMQorZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittYmVkdGxzX21kX2htYWM6Ik1EMiI6MTY6IjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIiOiI0ODY5MjA1NDY4NjU3MjY1IjoiZGMxOTIzZWY1ZjE2MWQzNWJlZjgzOWNhOGM4MDc4MDgiCisKK0hNQUMtTUQ0IEJvdW5jeSBDYXN0bGUgdGVzdCAjMQorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittYmVkdGxzX21kX2htYWM6Ik1ENCI6MTY6IjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIiOiI0ODY5MjA1NDY4NjU3MjY1IjoiNTU3MGNlOTY0YmE4YzExNzU2Y2RjMzk3MDI3OGZmNWEiCisKK0hNQUMtTUQ1IEJvdW5jeSBDYXN0bGUgdGVzdCAjMQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2htYWM6Ik1ENSI6MTY6IjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIiOiI0ODY5MjA1NDY4NjU3MjY1IjoiNWNjZWMzNGVhOTY1NjM5MjQ1N2ZhMWFjMjdmMDhmYmMiCisKK2dlbmVyaWMgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjMQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2htYWM6Ik1ENSI6MTY6IjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiIjoiNDg2OTIwNTQ2ODY1NzI2NSI6IjkyOTQ3MjdhMzYzOGJiMWMxM2Y0OGVmODE1OGJmYzlkIgorCitnZW5lcmljIEhNQUMtTUQ1IFRlc3QgVmVjdG9yIFJGQzIyMDIgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWJlZHRsc19tZF9obWFjOiJNRDUiOjE2OiI0YTY1NjY2NSI6Ijc3Njg2MTc0MjA2NDZmMjA3OTYxMjA3NzYxNmU3NDIwNjY2ZjcyMjA2ZTZmNzQ2ODY5NmU2NzNmIjoiNzUwYzc4M2U2YWIwYjUwM2VhYTg2ZTMxMGE1ZGI3MzgiCisKK2dlbmVyaWMgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjMworZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2htYWM6Ik1ENSI6MTY6ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIjoiZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCI6IjU2YmUzNDUyMWQxNDRjODhkYmI4YzczM2YwZThiM2Y2IgorCitnZW5lcmljIEhNQUMtTUQ1IFRlc3QgVmVjdG9yIFJGQzIyMDIgIzQKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWJlZHRsc19tZF9obWFjOiJNRDUiOjE2OiIwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOSI6ImNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2QiOiI2OTdlYWYwYWNhM2EzYWVhM2E3NTE2NDc0NmZmYWE3OSIKKworZ2VuZXJpYyBITUFDLU1ENSBUZXN0IFZlY3RvciBSRkMyMjAyICM1CitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21iZWR0bHNfbWRfaG1hYzoiTUQ1IjoxMjoiMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMiOiI1NDY1NzM3NDIwNTc2OTc0NjgyMDU0NzI3NTZlNjM2MTc0Njk2ZjZlIjoiNTY0NjFlZjIzNDJlZGMwMGY5YmFiOTk1IgorCitnZW5lcmljIEhNQUMtTUQ1IFRlc3QgVmVjdG9yIFJGQzIyMDIgIzYKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWJlZHRsc19tZF9obWFjOiJNRDUiOjE2OiJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIjoiNTQ2NTczNzQyMDU1NzM2OTZlNjcyMDRjNjE3MjY3NjU3MjIwNTQ2ODYxNmUyMDQyNmM2ZjYzNmIyZDUzNjk3YTY1MjA0YjY1NzkyMDJkMjA0ODYxNzM2ODIwNGI2NTc5MjA0NjY5NzI3Mzc0IjoiNmIxYWI3ZmU0YmQ3YmY4ZjBiNjJlNmNlNjFiOWQwY2QiCisKK2dlbmVyaWMgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjNworZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2htYWM6Ik1ENSI6MTY6ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiOiI1NDY1NzM3NDIwNTU3MzY5NmU2NzIwNGM2MTcyNjc2NTcyMjA1NDY4NjE2ZTIwNDI2YzZmNjM2YjJkNTM2OTdhNjUyMDRiNjU3OTIwNjE2ZTY0MjA0YzYxNzI2NzY1NzIyMDU0Njg2MTZlMjA0ZjZlNjUyMDQyNmM2ZjYzNmIyZDUzNjk3YTY1MjA0NDYxNzQ2MSI6IjZmNjMwZmFkNjdjZGEwZWUxZmIxZjU2MmRiM2FhNTNlIgorCitnZW5lcmljIEhNQUMtUklQRU1EMTYwIFRlc3QgdmVjdG9yIFJGQyAyMjg2ICMxCitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21iZWR0bHNfbWRfaG1hYzoiUklQRU1EMTYwIjoyMDoiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYiI6IjQ4NjkyMDU0Njg2NTcyNjUiOiIyNGNiNGJkNjdkMjBmYzFhNWQyZWQ3NzMyZGNjMzkzNzdmMGE1NjY4IgorCitnZW5lcmljIEhNQUMtUklQRU1EMTYwIFRlc3QgdmVjdG9yIFJGQyAyMjg2ICMyCitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21iZWR0bHNfbWRfaG1hYzoiUklQRU1EMTYwIjoyMDoiNGE2NTY2NjUiOiI3NzY4NjE3NDIwNjQ2ZjIwNzk2MTIwNzc2MTZlNzQyMDY2NmY3MjIwNmU2Zjc0Njg2OTZlNjczZiI6ImRkYTZjMDIxM2E0ODVhOWUyNGY0NzQyMDY0YTdmMDMzYjQzYzQwNjkiCisKK2dlbmVyaWMgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzMKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWJlZHRsc19tZF9obWFjOiJSSVBFTUQxNjAiOjIwOiJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIjoiZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCI6ImIwYjEwNTM2MGRlNzU5OTYwYWI0ZjM1Mjk4ZTExNmUyOTVkOGU3YzEiCisKK2dlbmVyaWMgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzQKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWJlZHRsc19tZF9obWFjOiJSSVBFTUQxNjAiOjIwOiIwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOSI6ImNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2QiOiJkNWNhODYyZjRkMjFkNWU2MTBlMThiNGNmMWJlYjk3YTQzNjVlY2Y0IgorCitnZW5lcmljIEhNQUMtUklQRU1EMTYwIFRlc3QgdmVjdG9yIFJGQyAyMjg2ICM1CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21iZWR0bHNfbWRfaG1hYzoiUklQRU1EMTYwIjoyMDoiMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYyI6IjU0NjU3Mzc0MjA1NzY5NzQ2ODIwNTQ3Mjc1NmU2MzYxNzQ2OTZmNmUiOiI3NjE5NjkzOTc4ZjkxZDkwNTM5YWU3ODY1MDBmZjNkOGUwNTE4ZTM5IgorCitnZW5lcmljIEhNQUMtUklQRU1EMTYwIFRlc3QgdmVjdG9yIFJGQyAyMjg2ICM2CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21iZWR0bHNfbWRfaG1hYzoiUklQRU1EMTYwIjoyMDoiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI6IjU0NjU3Mzc0MjA1NTczNjk2ZTY3MjA0YzYxNzI2NzY1NzIyMDU0Njg2MTZlMjA0MjZjNmY2MzZiMmQ1MzY5N2E2NTIwNGI2NTc5MjAyZDIwNDg2MTczNjgyMDRiNjU3OTIwNDY2OTcyNzM3NCI6IjY0NjZjYTA3YWM1ZWFjMjllMWJkNTIzZTVhZGE3NjA1Yjc5MWZkOGIiCisKK2dlbmVyaWMgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzcKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWJlZHRsc19tZF9obWFjOiJSSVBFTUQxNjAiOjIwOiJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIjoiNTQ2NTczNzQyMDU1NzM2OTZlNjcyMDRjNjE3MjY3NjU3MjIwNTQ2ODYxNmUyMDQyNmM2ZjYzNmIyZDUzNjk3YTY1MjA0YjY1NzkyMDYxNmU2NDIwNGM2MTcyNjc2NTcyMjA1NDY4NjE2ZTIwNGY2ZTY1MjA0MjZjNmY2MzZiMmQ1MzY5N2E2NTIwNDQ2MTc0NjEiOiI2OWVhNjA3OThkNzE2MTZjY2U1ZmQwODcxZTIzNzU0Y2Q3NWQ1YTBhIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjMQorZGVwZW5kc19vbjpNQkVEVExTX01EX0M6TUJFRFRMU19NRDJfQworbWRfdGV4dF9tdWx0aToiTUQyIjoiIjoiODM1MGU1YTNlMjRjMTUzZGYyMjc1YzlmODA2OTI3NzMiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICMyCitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX3RleHRfbXVsdGk6Ik1EMiI6ImEiOiIzMmVjMDFlYzRhNmRhYzcyYzBhYjk2ZmIzNGMwYjVkMSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfdGV4dF9tdWx0aToiTUQyIjoiYWJjIjoiZGE4NTNiMGQzZjg4ZDk5YjMwMjgzYTY5ZTZkZWQ2YmIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICM0CitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX3RleHRfbXVsdGk6Ik1EMiI6Im1lc3NhZ2UgZGlnZXN0IjoiYWI0ZjQ5NmJmYjJhNTMwYjIxOWZmMzMwMzFmZTA2YjAiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICM1CitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX3RleHRfbXVsdGk6Ik1EMiI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjoiNGU4ZGRmZjM2NTAyOTJhYjVhNDEwOGMzYWE0Nzk0MGIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICM2CitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX3RleHRfbXVsdGk6Ik1EMiI6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IjoiZGEzM2RlZjJhNDJkZjEzOTc1MzUyODQ2YzMwMzM4Y2QiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICM3CitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX3RleHRfbXVsdGk6Ik1EMiI6IjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIjoiZDU5NzZmNzlkODNkM2EwZGM5ODA2YzNjNjZmM2VmZDgiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHRfbXVsdGk6Ik1ENCI6IiI6IjMxZDZjZmUwZDE2YWU5MzFiNzNjNTlkN2UwYzA4OWMwIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjMgorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF90ZXh0X211bHRpOiJNRDQiOiJhIjoiYmRlNTJjYjMxZGUzM2U0NjI0NWUwNWZiZGJkNmZiMjQiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHRfbXVsdGk6Ik1ENCI6ImFiYyI6ImE0NDgwMTdhYWYyMWQ4NTI1ZmMxMGFlODdhYTY3MjlkIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjNAorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF90ZXh0X211bHRpOiJNRDQiOiJtZXNzYWdlIGRpZ2VzdCI6ImQ5MTMwYTgxNjQ1NDlmZTgxODg3NDgwNmUxYzcwMTRiIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjNQorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF90ZXh0X211bHRpOiJNRDQiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI6ImQ3OWUxYzMwOGFhNWJiY2RlZWE4ZWQ2M2RmNDEyZGE5IgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjNgorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF90ZXh0X211bHRpOiJNRDQiOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSI6IjA0M2Y4NTgyZjI0MWRiMzUxY2U2MjdlMTUzZTdmMGU0IgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjNworZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF90ZXh0X211bHRpOiJNRDQiOiIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCI6ImUzM2I0ZGRjOWMzOGYyMTk5YzNlN2IxNjRmY2MwNTM2IgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjMQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF90ZXh0X211bHRpOiJNRDUiOiIiOiJkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfdGV4dF9tdWx0aToiTUQ1IjoiYSI6IjBjYzE3NWI5YzBmMWI2YTgzMWMzOTllMjY5NzcyNjYxIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjMworZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF90ZXh0X211bHRpOiJNRDUiOiJhYmMiOiI5MDAxNTA5ODNjZDI0ZmIwZDY5NjNmN2QyOGUxN2Y3MiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzQKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfdGV4dF9tdWx0aToiTUQ1IjoibWVzc2FnZSBkaWdlc3QiOiJmOTZiNjk3ZDdjYjc5MzhkNTI1YTJmMzFhYWYxNjFkMCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzUKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfdGV4dF9tdWx0aToiTUQ1IjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOiJjM2ZjZDNkNzYxOTJlNDAwN2RmYjQ5NmNjYTY3ZTEzYiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzYKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfdGV4dF9tdWx0aToiTUQ1IjoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiOiJkMTc0YWI5OGQyNzdkOWY1YTU2MTFjMmM5ZjQxOWQ5ZiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzcKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfdGV4dF9tdWx0aToiTUQ1IjoiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOiI1N2VkZjRhMjJiZTNjOTU1YWM0OWRhMmUyMTA3YjY3YSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzEKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfdGV4dF9tdWx0aToiUklQRU1EMTYwIjoiIjoiOWMxMTg1YTVjNWU5ZmM1NDYxMjgwODk3N2VlOGY1NDhiMjI1OGQzMSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzIKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfdGV4dF9tdWx0aToiUklQRU1EMTYwIjoiYSI6IjBiZGM5ZDJkMjU2YjNlZTlkYWFlMzQ3YmU2ZjRkYzgzNWE0NjdmZmUiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICMzCitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHRfbXVsdGk6IlJJUEVNRDE2MCI6ImFiYyI6IjhlYjIwOGY3ZTA1ZDk4N2E5YjA0NGE4ZTk4YzZiMDg3ZjE1YTBiZmMiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM0CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHRfbXVsdGk6IlJJUEVNRDE2MCI6Im1lc3NhZ2UgZGlnZXN0IjoiNWQwNjg5ZWY0OWQyZmFlNTcyYjg4MWIxMjNhODVmZmEyMTU5NWYzNiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzUKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfdGV4dF9tdWx0aToiUklQRU1EMTYwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOiJmNzFjMjcxMDljNjkyYzFiNTZiYmRjZWI1YjlkMjg2NWIzNzA4ZGJjIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjNgorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF90ZXh0X211bHRpOiJSSVBFTUQxNjAiOiJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSI6IjEyYTA1MzM4NGE5YzBjODhlNDA1YTA2YzI3ZGNmNDlhZGE2MmViMmIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM3CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHRfbXVsdGk6IlJJUEVNRDE2MCI6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IjoiYjBlMjBiNmUzMTE2NjQwMjg2ZWQzYTg3YTU3MTMwNzliMjFmNTE4OSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzgKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfdGV4dF9tdWx0aToiUklQRU1EMTYwIjoiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOiI5Yjc1MmU0NTU3M2Q0YjM5ZjRkYmQzMzIzY2FiODJiZjYzMzI2YmZiIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDIgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMQorZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittZF9obWFjX211bHRpOiJNRDIiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6ImI5MWNlNWFjNzdkMzNjMjM0ZTYxMDAyZWQ2IjoiZDU3MzI1ODJmNDk0ZjVkZGYzNWVmZDE2NmM4NWFmOWMiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLU1EMiBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMyCitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX2htYWNfbXVsdGk6Ik1EMiI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiMjcwZmNmMTFmMjdjMjc0NDg0NTdkNzA0OWE3ZWRiMDg0YTNlNTU0ZTBiMmFjZjU4MDY5ODIyMTNmMGFkNTE2NDAyZTRjODY5YzRmZjIxNzFlMThlMzQ4OWJhYTMxMjVkMmMzMDU2ZWJiNjE2Mjk2ZjliNmFhOTdlZjY4ZWVhYmNkYzBiNmRkZTQ3Nzc1MDA0MDk2YTI0MWVmY2YwYTkwZDE5YjM0ZTg5OGNjNzM0MGNkYzk0MGY4YmRkNDZlMjNlMzUyZjM0YmNhMTMxZDRkNjdhN2MyZGRiOGQwZDY4YjY3ZjA2MTUyYTEyODE2OGUxYzM0MWMzN2UwYTY2YzUwMTg5OTliNzA1OWJjYzMwMGJlZWQyYzE5ZGQxMTUyZDJmZTA2Mjg1MzI5M2I4ZjNjOGI1IjoiNTRhYjY4NTAzZjdkMWI1Yzc3NDEzNDBkZmYyNzIyYTkiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLU1EMiBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX2htYWNfbXVsdGk6Ik1EMiI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiYjkxY2U1YWM3N2QzM2MyMzRlNjEwMDJlZDYiOiJkODUwZTVmNTU0NTU4Y2YwZmU3OWEwNjEyZTFkMDM2NSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtTUQ0IEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzEKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWRfaG1hY19tdWx0aToiTUQ0IjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiJiOTFjZTVhYzc3ZDMzYzIzNGU2MTAwMmVkNiI6ImVhYmQwZmJlZmI4MmZiMDA2M2EyNWE2ZDdiOGJkYzBmIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDQgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMgorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF9obWFjX211bHRpOiJNRDQiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6IjI3MGZjZjExZjI3YzI3NDQ4NDU3ZDcwNDlhN2VkYjA4NGEzZTU1NGUwYjJhY2Y1ODA2OTgyMjEzZjBhZDUxNjQwMmU0Yzg2OWM0ZmYyMTcxZTE4ZTM0ODliYWEzMTI1ZDJjMzA1NmViYjYxNjI5NmY5YjZhYTk3ZWY2OGVlYWJjZGMwYjZkZGU0Nzc3NTAwNDA5NmEyNDFlZmNmMGE5MGQxOWIzNGU4OThjYzczNDBjZGM5NDBmOGJkZDQ2ZTIzZTM1MmYzNGJjYTEzMWQ0ZDY3YTdjMmRkYjhkMGQ2OGI2N2YwNjE1MmExMjgxNjhlMWMzNDFjMzdlMGE2NmM1MDE4OTk5YjcwNTliY2MzMDBiZWVkMmMxOWRkMTE1MmQyZmUwNjI4NTMyOTNiOGYzYzhiNSI6ImNlYzNjNWU0MjFhN2I3ODNhYTg5Y2FjZjc4ZGFmNmRjIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDQgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMworZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF9obWFjX211bHRpOiJNRDQiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6ImI5MWNlNWFjNzdkMzNjMjM0ZTYxMDAyZWQ2IjoiYWQ1ZjBhMDQxMTYxMDliMzk3YjU3ZjljYzliNmRmNGIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLU1ENSBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX2htYWNfbXVsdGk6Ik1ENSI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiYjkxY2U1YWM3N2QzM2MyMzRlNjEwMDJlZDYiOiI0MjU1Mjg4MmYwMGJkNDYzM2VhODExMzVhMTg0YjI4NCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtTUQ1IEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfaG1hY19tdWx0aToiTUQ1IjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiIyNzBmY2YxMWYyN2MyNzQ0ODQ1N2Q3MDQ5YTdlZGIwODRhM2U1NTRlMGIyYWNmNTgwNjk4MjIxM2YwYWQ1MTY0MDJlNGM4NjljNGZmMjE3MWUxOGUzNDg5YmFhMzEyNWQyYzMwNTZlYmI2MTYyOTZmOWI2YWE5N2VmNjhlZWFiY2RjMGI2ZGRlNDc3NzUwMDQwOTZhMjQxZWZjZjBhOTBkMTliMzRlODk4Y2M3MzQwY2RjOTQwZjhiZGQ0NmUyM2UzNTJmMzRiY2ExMzFkNGQ2N2E3YzJkZGI4ZDBkNjhiNjdmMDYxNTJhMTI4MTY4ZTFjMzQxYzM3ZTBhNjZjNTAxODk5OWI3MDU5YmNjMzAwYmVlZDJjMTlkZDExNTJkMmZlMDYyODUzMjkzYjhmM2M4YjUiOiJhMTZhODQyODkxNzg2ZDAxZmU1MGJhNzczMWRiNzQ2NCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtTUQ1IEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzMKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfaG1hY19tdWx0aToiTUQ1IjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiJiOTFjZTVhYzc3ZDMzYzIzNGU2MTAwMmVkNiI6ImU5N2Y2MjM5MzZmOThhN2Y3NDFjNGJkMDYxMmZlY2MyIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjMQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF9obWFjX211bHRpOiJNRDUiOjE2OiIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYiI6IjQ4NjkyMDU0Njg2NTcyNjUiOiI5Mjk0NzI3YTM2MzhiYjFjMTNmNDhlZjgxNThiZmM5ZCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtTUQ1IFRlc3QgVmVjdG9yIFJGQzIyMDIgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfaG1hY19tdWx0aToiTUQ1IjoxNjoiNGE2NTY2NjUiOiI3NzY4NjE3NDIwNjQ2ZjIwNzk2MTIwNzc2MTZlNzQyMDY2NmY3MjIwNmU2Zjc0Njg2OTZlNjczZiI6Ijc1MGM3ODNlNmFiMGI1MDNlYWE4NmUzMTBhNWRiNzM4IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjMworZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF9obWFjX211bHRpOiJNRDUiOjE2OiJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI6ImRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQiOiI1NmJlMzQ1MjFkMTQ0Yzg4ZGJiOGM3MzNmMGU4YjNmNiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtTUQ1IFRlc3QgVmVjdG9yIFJGQzIyMDIgIzQKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfaG1hY19tdWx0aToiTUQ1IjoxNjoiMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkiOiJjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkIjoiNjk3ZWFmMGFjYTNhM2FlYTNhNzUxNjQ3NDZmZmFhNzkiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLU1ENSBUZXN0IFZlY3RvciBSRkMyMjAyICM1CitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX2htYWNfbXVsdGk6Ik1ENSI6MTI6IjBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjIjoiNTQ2NTczNzQyMDU3Njk3NDY4MjA1NDcyNzU2ZTYzNjE3NDY5NmY2ZSI6IjU2NDYxZWYyMzQyZWRjMDBmOWJhYjk5NSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtTUQ1IFRlc3QgVmVjdG9yIFJGQzIyMDIgIzYKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfaG1hY19tdWx0aToiTUQ1IjoxNjoiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI6IjU0NjU3Mzc0MjA1NTczNjk2ZTY3MjA0YzYxNzI2NzY1NzIyMDU0Njg2MTZlMjA0MjZjNmY2MzZiMmQ1MzY5N2E2NTIwNGI2NTc5MjAyZDIwNDg2MTczNjgyMDRiNjU3OTIwNDY2OTcyNzM3NCI6IjZiMWFiN2ZlNGJkN2JmOGYwYjYyZTZjZTYxYjlkMGNkIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjNworZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF9obWFjX211bHRpOiJNRDUiOjE2OiJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIjoiNTQ2NTczNzQyMDU1NzM2OTZlNjcyMDRjNjE3MjY3NjU3MjIwNTQ2ODYxNmUyMDQyNmM2ZjYzNmIyZDUzNjk3YTY1MjA0YjY1NzkyMDYxNmU2NDIwNGM2MTcyNjc2NTcyMjA1NDY4NjE2ZTIwNGY2ZTY1MjA0MjZjNmY2MzZiMmQ1MzY5N2E2NTIwNDQ2MTc0NjEiOiI2ZjYzMGZhZDY3Y2RhMGVlMWZiMWY1NjJkYjNhYTUzZSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtUklQRU1EMTYwIFRlc3QgdmVjdG9yIFJGQyAyMjg2ICMxCitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX2htYWNfbXVsdGk6IlJJUEVNRDE2MCI6MjA6IjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIiOiI0ODY5MjA1NDY4NjU3MjY1IjoiMjRjYjRiZDY3ZDIwZmMxYTVkMmVkNzczMmRjYzM5Mzc3ZjBhNTY2OCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtUklQRU1EMTYwIFRlc3QgdmVjdG9yIFJGQyAyMjg2ICMyCitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX2htYWNfbXVsdGk6IlJJUEVNRDE2MCI6MjA6IjRhNjU2NjY1IjoiNzc2ODYxNzQyMDY0NmYyMDc5NjEyMDc3NjE2ZTc0MjA2NjZmNzIyMDZlNmY3NDY4Njk2ZTY3M2YiOiJkZGE2YzAyMTNhNDg1YTllMjRmNDc0MjA2NGE3ZjAzM2I0M2M0MDY5IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzMKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfaG1hY19tdWx0aToiUklQRU1EMTYwIjoyMDoiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI6ImRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQiOiJiMGIxMDUzNjBkZTc1OTk2MGFiNGYzNTI5OGUxMTZlMjk1ZDhlN2MxIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzQKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfaG1hY19tdWx0aToiUklQRU1EMTYwIjoyMDoiMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkiOiJjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkIjoiZDVjYTg2MmY0ZDIxZDVlNjEwZTE4YjRjZjFiZWI5N2E0MzY1ZWNmNCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtUklQRU1EMTYwIFRlc3QgdmVjdG9yIFJGQyAyMjg2ICM1CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX2htYWNfbXVsdGk6IlJJUEVNRDE2MCI6MjA6IjBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMiOiI1NDY1NzM3NDIwNTc2OTc0NjgyMDU0NzI3NTZlNjM2MTc0Njk2ZjZlIjoiNzYxOTY5Mzk3OGY5MWQ5MDUzOWFlNzg2NTAwZmYzZDhlMDUxOGUzOSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtUklQRU1EMTYwIFRlc3QgdmVjdG9yIFJGQyAyMjg2ICM2CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX2htYWNfbXVsdGk6IlJJUEVNRDE2MCI6MjA6ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiOiI1NDY1NzM3NDIwNTU3MzY5NmU2NzIwNGM2MTcyNjc2NTcyMjA1NDY4NjE2ZTIwNDI2YzZmNjM2YjJkNTM2OTdhNjUyMDRiNjU3OTIwMmQyMDQ4NjE3MzY4MjA0YjY1NzkyMDQ2Njk3MjczNzQiOiI2NDY2Y2EwN2FjNWVhYzI5ZTFiZDUyM2U1YWRhNzYwNWI3OTFmZDhiIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzcKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfaG1hY19tdWx0aToiUklQRU1EMTYwIjoyMDoiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI6IjU0NjU3Mzc0MjA1NTczNjk2ZTY3MjA0YzYxNzI2NzY1NzIyMDU0Njg2MTZlMjA0MjZjNmY2MzZiMmQ1MzY5N2E2NTIwNGI2NTc5MjA2MTZlNjQyMDRjNjE3MjY3NjU3MjIwNTQ2ODYxNmUyMDRmNmU2NTIwNDI2YzZmNjM2YjJkNTM2OTdhNjUyMDQ0NjE3NDYxIjoiNjllYTYwNzk4ZDcxNjE2Y2NlNWZkMDg3MWUyMzc1NGNkNzVkNWEwYSIKKworZ2VuZXJpYyBNRDIgSGFzaCBmaWxlICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21iZWR0bHNfbWRfZmlsZToiTUQyIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMSI6ImI1OTNjMDk4NzEyZDJlMjE2MjhjODk4NjY5NTQ1MWE4IgorCitnZW5lcmljIE1EMiBIYXNoIGZpbGUgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWJlZHRsc19tZF9maWxlOiJNRDIiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8yIjoiM2MwMjdiNzQwOTkwOWE0YzRiMjZiYmFiNjlhZDlmNGYiCisKK2dlbmVyaWMgTUQyIEhhc2ggZmlsZSAjMworZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittYmVkdGxzX21kX2ZpbGU6Ik1EMiI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzMiOiI2YmI0M2ViMjg1ZTgxZjQxNDA4M2E5NGNkYmUyOTg5ZCIKKworZ2VuZXJpYyBNRDIgSGFzaCBmaWxlICM0CitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21iZWR0bHNfbWRfZmlsZToiTUQyIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfNCI6IjgzNTBlNWEzZTI0YzE1M2RmMjI3NWM5ZjgwNjkyNzczIgorCitnZW5lcmljIE1ENCBIYXNoIGZpbGUgIzEKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWJlZHRsc19tZF9maWxlOiJNRDQiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8xIjoiOGQxOTc3MmMxNzZiZDI3MTUzYjk0ODY3MTVlMmMwYjkiCisKK2dlbmVyaWMgTUQ0IEhhc2ggZmlsZSAjMgorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittYmVkdGxzX21kX2ZpbGU6Ik1ENCI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzIiOiJmMmFjNTNiODU0Mjg4MmE1YTAwMDdjNmY4NGI0ZDlmZCIKKworZ2VuZXJpYyBNRDQgSGFzaCBmaWxlICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21iZWR0bHNfbWRfZmlsZToiTUQ0IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMyI6IjE5NWMxNTE1OGUyZDA3ODgxZDlhNjU0MDk1Y2U0YTQyIgorCitnZW5lcmljIE1ENCBIYXNoIGZpbGUgIzQKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWJlZHRsc19tZF9maWxlOiJNRDQiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV80IjoiMzFkNmNmZTBkMTZhZTkzMWI3M2M1OWQ3ZTBjMDg5YzAiCisKK2dlbmVyaWMgTUQ1IEhhc2ggZmlsZSAjMQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2ZpbGU6Ik1ENSI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzEiOiI1MmJjZGM5ODNjOWVkNjRmYzE0OGE3NTliM2M3YTQxNSIKKworZ2VuZXJpYyBNRDUgSGFzaCBmaWxlICMyCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21iZWR0bHNfbWRfZmlsZToiTUQ1IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMiI6ImQxN2Q0NjZmMTU4OTFkZjEwNTQyMjA3YWU3ODI3N2YwIgorCitnZW5lcmljIE1ENSBIYXNoIGZpbGUgIzMKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWJlZHRsc19tZF9maWxlOiJNRDUiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8zIjoiZDk0NWJjYzYyMDBlYTk1ZDA2MWEyYTgxODE2N2Q5MjAiCisKK2dlbmVyaWMgTUQ1IEhhc2ggZmlsZSAjNAorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2ZpbGU6Ik1ENSI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzQiOiJkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZSIKKworZ2VuZXJpYyBSSVBFTUQxNjAgSGFzaCBmaWxlICMwIChmcm9tIHBhcGVyKQorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittYmVkdGxzX21kX2ZpbGU6IlJJUEVNRDE2MCI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzUiOiI1Mjc4MzI0M2MxNjk3YmRiZTE2ZDM3Zjk3ZjY4ZjA4MzI1ZGMxNTI4IgorCitnZW5lcmljIFJJUEVNRDE2MCBIYXNoIGZpbGUgIzEKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWJlZHRsc19tZF9maWxlOiJSSVBFTUQxNjAiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8xIjoiODJmMWQwNzJmMGVjMGMyYjM1MzcwM2E3YjU3NWEwNGMxMTNhZjFhNiIKKworZ2VuZXJpYyBSSVBFTUQxNjAgSGFzaCBmaWxlICMyCitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21iZWR0bHNfbWRfZmlsZToiUklQRU1EMTYwIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMiI6Ijk5NmZiYzhiNzkyMDZiYTczOTNlYmNkMjQ2NTg0MDY5YjFjMDhmMGYiCisKK2dlbmVyaWMgUklQRU1EMTYwIEhhc2ggZmlsZSAjMworZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittYmVkdGxzX21kX2ZpbGU6IlJJUEVNRDE2MCI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzMiOiI4NjUzYjQ2ZDY1OTk4ZmE4Yzg4NDZlZmExNzkzN2U3NDI1MzNhZTQ4IgorCitnZW5lcmljIFJJUEVNRDE2MCBIYXNoIGZpbGUgIzQKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWJlZHRsc19tZF9maWxlOiJSSVBFTUQxNjAiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV80IjoiOWMxMTg1YTVjNWU5ZmM1NDYxMjgwODk3N2VlOGY1NDhiMjI1OGQzMSIKKworZ2VuZXJpYyBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIEZJUFMtMTk4YSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9obWFjOiJTSEExIjoyMDoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2YiOiI1MzYxNmQ3MDZjNjUyMDIzMzEiOiI0ZjRjYTNkNWQ2OGJhN2NjMGExMjA4YzljNjFlOWM1ZGEwNDAzYzBhIgorCitnZW5lcmljIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgRklQUy0xOThhICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2htYWM6IlNIQTEiOjIwOiIzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzIjoiNTM2MTZkNzA2YzY1MjAyMzMyIjoiMDkyMmQzNDA1ZmFhM2QxOTRmODJhNDU4MzA3MzdkNWNjNmM3NWQyNCIKKworZ2VuZXJpYyBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIEZJUFMtMTk4YSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9obWFjOiJTSEExIjoyMDoiNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjMiOiI1MzYxNmQ3MDZjNjUyMDIzMzMiOiJiY2Y0MWVhYjhiYjJkODAyZjNkMDVjYWY3Y2IwOTJlY2Y4ZDFhM2FhIgorCitnZW5lcmljIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgRklQUy0xOThhICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2htYWM6IlNIQTEiOjEyOiI3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMCI6IjUzNjE2ZDcwNmM2NTIwMjMzNCI6IjllYTg4NmVmZTI2OGRiZWNjZTQyMGM3NSIKKworZ2VuZXJpYyBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9obWFjOiJTSEExIjoxMDoiN2IxMGY0MTI0YjE1YzgyZSI6IjI3ZGNiNWIxZGFmNjBjZmQzZTJmNzNkNGQ2NGNhOWM2ODRmOGJmNzFmYzY4MmE0Njc5M2IxNzkwYWZhNGZlYjEwMGNhN2FhZmYyNmY1OGYwZTFkMGVkNDJmMWNkYWQxZjQ3NGFmYTJlNzlkNTNhMGM0Mjg5MmM0ZDdiMzI3Y2JlNDZiMjk1ZWQ4ZGEzYjZlY2FiM2Q0ODUxNjg3YTZmODEyYjc5ZGYyZjZiMjBmMTFmNjcwNmY1MzAxNzkwY2E5OTYyNWFhZDczOTFkODRmNzgwNDNkMmEwYTIzOWIxNDc3OTg0YzE1N2JiYzkyNzYwNjRlN2ExYTQwNmIwNjEyY2EiOiI0ZWFkMTJjMmZlM2Q2ZWE0M2FjYiIKKworZ2VuZXJpYyBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9obWFjOiJTSEExIjoxMDoiNGZlOWZiOTAyMTcyYTIxYiI6IjRjZWIzYTdjMTM2NTljMjJmZTUxMTM0ZjAzZGNlNGMyMzlkMTgxYjYzYzZiMGI1OWQzNjcxNTdmZDA1Y2FiOTgzODRmOTJkZmE0ODJkMmQ1ZTc4ZTcyZWVmMWIxODM4YWY0Njk2MDI2YzU0MjMzZDQ4NGVjYmJlODdmOTA0ZGY1NTQ2NDE5Zjg1NjdlYWZkMjMyZTZjMmZjZDNlZTJiNzY4MmM2MzAwMDUyNGIwNzhkYmIyMDk2ZjU4NTAwN2RlYWU3NTI1NjJkZjFmZTNiMDEyNzgwODllMTZmM2JlNDZlMmQwZjdjYWJhYzJkOGU2Y2MwMmEyZDBjYTk1MzQyNWYiOiI1NjQ0MjhhNjdiZTE5MjRiNTc5MyIKKworZ2VuZXJpYyBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9obWFjOiJTSEExIjoxMDoiZDFmMDE0NTVmNzhjNGZiNCI6IjAwZDQwZjY3YjU3OTE0YmVjNDU2YTNlMzIwMWVmMTQ2NGJlMzE5YThkMTg4YzAyZTE1N2FmNGI1NGY5YjVhNjZkNjdmODk4YTliZGJiMTlmZjYzYTgwYWJhNmYyNDZkMDEzNTc1NzIxZDUyZWIxYjQ3YTY1ZGVmODg0MDExYzQ5YjI1N2JjYzI4MTdmYzg1M2YxMDZlODEzOGNlMzg2ZDdhNWFjMzEwM2RlMGEzZmEwZWQ2YmI3YWY5ZmY2NmViZDFjYzQ2ZmI4NmU0ZGEwMDEzZDIwYTNjMmRjZDhmYjgyOGE0YjcwZjdmMTA0YjQxYmYzZjQ0NjgyYTY2NDk3ZWEiOiI1NmE2NjVhN2NkZmU2MTBmOWZjNSIKKworZ2VuZXJpYyBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9obWFjOiJTSEExIjoxMDoiNGU1ZWY3N2ZkZjAzM2E1YiI6ImU1OTMyNjQ2NGUzMjAxZDE5NWUyOWYyYTM0NDZlYzFiMWM5ZmYzMTE1NGUyYTRkMGU0MGVkNDY2ZjFiYzg1NWQyOWY3NjgzNTYyNGZhMDEyN2QyOWM5YjE5MTU5MzlhMDQ2ZjM4NWFmN2U1ZDQ3YTIzYmE5MWYyOGJkMjJmODExZWEyNThkYmJmMzMzMmJjZDM1NDNiODI4NWQ1ZGY0MWJkMDY0ZmZkNjRhMzQxYzIyYzRlZGI0NGY5YzhkOWU2ZGYwYzU5ZGJmNGEwNTJhNmM4M2RhNzQ3OGUxNzlhNmYzODM5YzY4NzBmZjhjYThiOTQ5N2Y5YWMxZDcyNWZkZGEiOiI5ODFjMGE3YTg0MjNiNjNhOGZhNiIKKworZ2VuZXJpYyBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9obWFjOiJTSEExIjoxMDoiYmNkOWZmOGFhNjBiZTJiZSI6IjUxYmU0ZDBlYjM3YmFiNzE0ZjkyZTE5ZTlkNzAzOTA2NTViMzYzZThjZDM0NmE3NDgyNDVlNzMxZjQzNzc1OWNiODIwNjQxMmM4ZGFiMmVmMWQ0ZjM2Zjg4MGY0MWZmNjlkOTQ5ZGE0NTk0ZmRlY2I2NWUyM2NhYzEzMjliNTllNjllMjliZjg3NWIzOGMzMWRmNmZhNTQ2YzU5NWYzNWNjMjE5MmFhNzUwNjc5YThhNTFhNjVlMDBlODM5ZDczYThkOGM1OThhNjEwZDIzN2ZiZTc4OTU1MjEzNTg5ZDgwZWZjYjczYjk1Yjg1ODZmOTZkMTdiNmY1MWE3MWMzYjgiOiI4NDYzM2Y5ZjUwNDBjODk3MTQ3OCIKKworZ2VuZXJpYyBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9obWFjOiJTSEExIjoxMDoiNGE2NjFiY2U2ZWQ4NmQyMSI6IjVmZjZjNzQ0ZjFhYWIxYmMyOTY5N2Q3MWY2NzU0MWI4YjNjZWMzYzcwNzkxODNiMTBhODNmYjk4YTllZTI1MWQ0YmFjM2UxY2I1ODFjYTk3MmFhZWQ4ZWZkN2MyODc1YTZmYjRjOTkxMTMyZjY3Yzk3NDJkNDVlNTNiYzdlOGVhYTk0YjM1YjM3YTkwN2JlNjEwODZiNDI2Y2QxMTA4OGFjMTE4OTM0ZTg1ZDk2OGM5NjY3ZmQ2OWZjNmY2ZWEzOGMwZmUzNDcxMGI3ZWNlOTEyMTFiOWI3ZWEwMGFjZDMxZjAyMmFhNjcyNjM2OGY5OTI4YTEzNTJmMTIyMjMzZjEiOiI3MzlkZjU5MzUzYWM2Njk0ZTU1ZSIKKworZ2VuZXJpYyBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9obWFjOiJTSEExIjoxMDoiMTI4N2UxNTY1YTU3YjU0NyI6IjM5MGZmZGNjYzYxNzFjMTE1NjhkODViOGY5MTNlMDE5YmY0Y2Q5ODJjYTljZDIxZWE3MzBkNDFiZGYzZmNjMGJjODhmZjQ4YmExM2E4ZjIzZGViMmQ5NmVjMTAzM2U3YjJhNThjYTcyYjBjMWUxN2JmMDMzMzBkYjI1ZDFlMzYwZmE2OTE4MDA5YzQyOTRiZDEyMTViNWNjZDE1OWE4ZjU4YmMzZGMzZDQ5MGViN2MzYjlmODg3ZThjOThkYmJiMjc0YTc1MzczZGNiNjk1YTU5YWJkMDIxOTUyOWQ4ODUxOGE5NmY5MmFiYzBiYmNiZGE5ODVjMzg4ZjFmYmJjYzkiOiJkNzhkZGYwODA3N2M3ZDllMmJhNiIKKworZ2VuZXJpYyBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMjI0IjoxNDoiZTA1NWViNzU2Njk3ZWU1NzNmZDMyMTQ4MTFhOWY3ZmEiOiIzODc1ODQ3MDEyZWU0MmZlNTRhMDAyN2JkZjM4Y2NhNzAyMWI4M2EyZWQwNTAzYWY2OWVmNmMzN2M2MzdiYzExMTRmYmE0MDA5NmM1OTQ3ZDczNmUxOWI3YWYzYzY4ZDk1YTRlM2I4YjA3M2FkYmJiODBmNDdlOWRiOGYyZDRmMDAxOGRkZDg0N2ZhYmZkZjlkZDliNTJjOTNlNDA0NTg5Nzc3MjVmNmI3YmExNWYwODE2YmI4OTVjZGY1MDQwMTI2OGY1ZDcwMmI3ZTZhNWY5ZmFlZjU3Yjg3NjhjOGEzZmMxNGY5YTRiMzE4MmI0MWQ5NDBlMzM3ZDIxOWIyOWZmIjoiNDBhNDUzMTMzMzYxY2M0OGRhMTFiYWY2MTZlZSIKKworZ2VuZXJpYyBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMjI0IjoxNDoiODhlNTI1OGI1NWIxNjIzMzg1ZWI5NjMyZmE3YzU3ZDYiOiJhZGE3NmJiNjA0YmUxNDMyNjU1MTcwMWNmMzBlNDhhNjVlZWU4MGI0NGYwYjlkNGEwN2IxODQ0NTQzYjc4NDRhNjIxMDk3ZmRjOTlkZTU3Mzg3NDU4YWU5MzU0ODk5YjYyMGQwNjE3ZWFiY2FlZmE5ZWVmM2Q0MTNhMzM2MjgwNTQzMzVjZTY1NmMyNmZhMjk4NmUwZjExMWE2MzUxMDk2YjI4MzEwMWVjNzg2ODg3MWQ3NzBiMzcwOTczYzc0MDU5ODNmOTc1NmIzMDA1YTNlYWI0OTJjZmQwZTdlYjQyZTVjMmUxNWZhNmJlODcxOGMwYTUwYWNjNGU1NzE3MjMwIjoiODFjNzgzYWY1MzgwMTVjZWYzYzYwMDk1ZGY1MyIKKworZ2VuZXJpYyBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMjI0IjoxNDoiODVkNDAyZDgyMjExNGQzMWFiZjc1NTI2ZTI1Mzg3MDUiOiI4MDIwZDhkOThjYzJlMjI5OGIzMjg3OWM1MWM3NTFlMWRkNTU1OGZlMmVhYmI4ZjE1ODYwNDI5N2Q2ZDA3MmNlMjI2MWExZDY4MzBiN2NmZTI2MTdiNTdjNzEyNmY5OWM5NDc2MjExZDYxNjFhY2Q3NWQyNjZkYTIxN2VjODE3NGI4MDQ4NGM5ZGM2ZjA0NDhhMGEwMzZhM2ZjODJlOGJmNTRiZGI3MTU0OTM2ODI1OGQ1ZDQxZjU3OTc4YTRjMjY2YjkyZTg3ODNlZjY2MzUwMjE1NTczZDk5YmU0MDg5MTQ0YjM4M2FkOGYzMjIyYmFlOGYzYmY4MGZmYjFiYjJiIjoiMmFhMDM0MGFjOWRlYWZlM2JlMzgxMjlkYWNhMCIKKworZ2VuZXJpYyBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMjI0IjoxNDoiNTQ1YzZlZWNjNWVlNDZmYTE3YzU5ZjkxYTk0ZjgxYWUiOiI4ZmI3ZjM1NjU1OTMxNzAxNTJkZGIyMDIxODc0Nzg0ZTk1MTk3N2NmZGQyMmY4YjcyYTcyYTYxMzIwYThmMmEzNTY5N2I1ZTkxM2Y3MTc4MDU1NTliMWFmMTg2MWVlM2VkNDJmYjc4ODQ4MWU0ZmQyNzZiMTdiZGJlZmNhZTdiNDUwMWRjNWQyMGRlNWI3NjI2ZGQ1ZWZkY2Q2NTI5NGRiNGJkZjY4MmMzM2Q5YTkyNTVjNjQzNTM4M2ZhNWYxYzg4NjMyNmEzYWNiYzZiZDUwYTMzYWI1YjJkYmIwMzRjZTAxMTJkNGUyMjZiYmNkNTdlMzczMWE1MTlhYTFkNzg0IjoiM2ViNTY2ZWFjNTRjNGEzYTllZjA5MjQ2OWYyNCIKKworZ2VuZXJpYyBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMjI0IjoxNDoiNDQ2NmFiNGRjNDM4ODQxYTk3NTBjN2YxNzNkZmYwMmUiOiIyNTM0YzExYzc4Yzk5Y2ZmYWVjOGY3MjJmMDRhZGM3MDQ1YzczMjRkNThjZTk4ZTM3Y2ZhOTRiNmVkMjFlZDdmNThjZTU1Mzc5ZWYyNGI3MmQ2ZDY0MGVlOTE1NGY5NmM2MTQ3MzRiZTljNDA4ZTIyNWQ3YmE0Y2VjYzExNzljYzlmNmUxODA4ZTEwNjdhYThmMjQ0YTk5YmQwYzMyNjc1OTRjMTg4N2E0MGQxNjdmOGI3Y2Y3OGRiMGQxOWY5N2IwMWZjNTBiOGM4NmRlZjQ5MGRmYTdhNTEzNTAwMmMzM2U3MWQ3N2E4Y2NlOGVhMGY5M2UwNTgwNDM5YTMzNzMzIjoiNTlmNDRhOWJiZWQ0ODc1Yjg5MmQyMmQ2YjVhYiIKKworZ2VuZXJpYyBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMjI0IjoyODoiMGUzZGQ5YmI1ZTRjZjBmMDlhNGMxMTYwMGFmNTZkOGQiOiJmNDU4OWZhNzZjMzI4ZWEyNWNmOGJhZTU4MjAyNmJhNDBhNTlkNDVhNTQ2ZmYzMWNmODBlYjgyNjA4OGY2OWJiOTU0YzQ1MmM3NDU4NjgzNjQxNmRlZTkwYTUyNTViYzVkNTZkM2I0MDViMzcwNWE1MTk3MDQ1Njg4YjMyZmE5ODRjM2EzZGZiZGM5YzI0NjBhMGI1ZTYzMTJhNjI0MDQ4YmI2ZjE3MDMwNjUzNWU5YjM3MWEzYWIxMzRhMjY0MmEyMzBhZDAzZDJjNjg4Y2NhODBiYWVhZWU5YTIwZTFkNGM1NDhiMWNlZGUyOWM2YTQ1YmY0ZGYyYzhjNDc2ZjFhIjoiMTIxNzViOTNlM2RhNGM1ODIxNzE0NWU0ZGMwYTFjZjE0MmZhYjkzMTliYjUwMWUwMzdiMzUwYmEiCisKK2dlbmVyaWMgSE1BQy1TSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX21kX2htYWM6IlNIQTIyNCI6Mjg6ImNkYTUxODdiMGM1ZGNiMGY4ZTVhOGJlZWQyMzA2NTg0IjoiOTAxMWFlMjliNDRjNDliMzQ3NDg3Y2U5NzI5NjVmMTZhZGUzYzE1YmUwODU2Y2U5Yzg1M2E5NzM5ZGJhMDdlNGYyMGQ1OTRkZGMxZGZlMjE1NjBhNjVhNGU0NThjZmExNzc0NTU3NWI5MTVhMzBjN2E5NDEyZmY4ZDFkNjg5ZGI5NjgwZGQyNDI4YzI3NTg4YmIwZGM5MmQyY2Q5NDQ1ZmU4ZjQ0Yjg0MGExOTdjNTJjM2M0MzMzZmZmNDU1MzM5NDUxMzQzOThkZjY0MzY1MTNjZmFiMDZjOTI0MDQ2YjhjNzk1YTViZDkyZThkNWYyZGU4NWJmMzA2ZjJlZWQ2NyI6IjRhYWJhOTJiNDBlMmE2MDBmZWFiMTc2ZWI5YjI5MmQ4MTQ4NjQxOTVjMDMzNDJhYWQ2ZjY3ZjA4IgorCitnZW5lcmljIEhNQUMtU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9obWFjOiJTSEEyNTYiOjE2OiJjZGZmZDM0ZTZiMTZmZGMwIjoiZDgzZTc4Yjk5YWI2MTcwOTYwODk3MmIzNmU3NmE1NzU2MDNkYjc0MjI2OWNjNWRkNGU3ZDVjYTc4MTZlMjZiNjUxNTFjOTI2MzI1NTBjYjRjNTI1M2M4ODVkNWZjZTUzYmM0NzQ1OWExZGJkNTY1Mjc4NmM0YWFjMDE0NWE1MzJmMTJjMDUxMzhhZjA0Y2JiNTU4MTAxYTdhZjVkZjQ3ODgzNGMyMTQ2NTk0ZGQ3MzY5MGQwMWE0ZmU3MjU0NTg5NDMzNWY0MjdhYzcwMjA0Nzk4MDY4Y2I4NmM1YTYwMGI0MGI0MTRlZGUyMzU5MGI0MWUxMTkyMzczZGY4NGZlMyI6ImM2ZjBkZGUyNjZjYjRhMjZkNDFlODI1OWQzMzQ5OWNjIgorCitnZW5lcmljIEhNQUMtU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9obWFjOiJTSEEyNTYiOjE2OiI2ZDk3YmI1ODkyMjQ1YmUyIjoiMTNjMmIzOTFkNTljMDI1MmNhNWQyMzAyYmVhYWY4OGM0YmNkNzc5YmI1MDVhZDlhMTIyMDAzZGZhZTRjYzEyM2FkMmJkMDM2ZjIyNWM0ZjA0MDAyMWE2YjlmYjhiZDZmMDI4MWNmMmUyNjMxYTczMmJkYzcxNjkzY2M0MmVmNmQ1MmI2YzY5MTJhOWVmNzdiMzI3NGViODVhZDdmOTY1YWU2ZWQ0NGFjMTcyMTk2MmE4ODRlYzdhY2ZiNDUzNGIxNDg4YjFjMGM0NWFmYTRkYWU4ZGExZWI3YjBhODhhMzI0MDM2NWQ3ZTRlN2Q4MjZhYmJkZTlmOTIwM2ZkOTlkNyI6IjMxNTg4ZTI0MWIwMTUzMTlhNWFiOGM0NTI3Mjk2NDk4IgorCitnZW5lcmljIEhNQUMtU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9obWFjOiJTSEEyNTYiOjE2OiIzYzdmYzhhNzBiNDkwMDdhIjoiNjAwMjRlNDI4YTM5YzhiOGJiMmU5NTkxYmFkOWRjMjExNWRmYmZkNzE2YjZlYjdhZjMwYTZlYjM0NTYwY2FjY2JiZmE0N2I3MTBmYThkNTIzYWNhNzFlOWU1YmExMGZjMWZlYjFhNDM1NTZkNzFmMDdlYTRmMzM0OTZmMDkzMDQ0ZThjYWYxZDAyYjc5ZTQ2ZWIxMjg4ZDU5NjRhN2E3NDk0ZjZiOTI1NzRjMzU3ODRlZWNlMDU0YzYxNTEyODFkODA4MjJmN2Q0N2I4MjMxYzM1ZDA3ZjVjYjVjZjQzMTBkZGM4NDQ4NDVhMDFjNmJmYWI1MTRjMDQ4ZWNjYWY5ZiI6IjFjOThjOTRhMzJiZWM5ZjI1M2MyMTA3MGY4MmY4NDM4IgorCitnZW5lcmljIEhNQUMtU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9obWFjOiJTSEEyNTYiOjI0OiIzNjlmMzNmODViOTI3YTA3IjoiYWU4ZTJhOTRjYTM4NmQ0NDhjYmFjZGIwZTkwNDBhZTNjYjI5N2MyOTYzNjMwNTJjYzE1NzQ1NWRhMjlhMGM5NTg5NzMxNWZjMTFlM2YxMmI4MWUyNDE4ZGExZWMyODBiY2NiYzAwZTg0NzU4NGNlOWQxNGRlZWJhN2IzYzliOGRiYTk1OGIwNGJiYTM3NTUxZjZjOWJhOWMwNjBiZTFhNGI4Y2Y0M2FhNjJlNTA3OGI3NmM2NTEyYzU2MTliNzFhNmE3Y2Y1NzI3MTgwZTFmZjE0ZjVhMWEzYzE2OTFiZjhiNmViYWQzNjVjMTUxZTU4ZDc0OWQ1N2FkYjNhNDk4NiI6IjYwYjkwMzgzMjg2NTMzZDMwOWRlNDY1OTNlNmNlMzlmYzUxZmIwMGE4ZDg4Mjc4YyIKKworZ2VuZXJpYyBITUFDLVNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMjU2IjoyNDoiZTUxNzk2ODc1ODJiNGRjNCI6ImNlMTAzYmRhY2RmMzJmNjE0ZjY3MjdiY2IzMWNhMWMyODI0YTg1MGQwMGY1NTg1YjAxNmZiMjM0ZmUxZWYyY2Q2ODdmMzAyZDNjNmI3MzhlZDg5YTI0MDYwZDY1YzM2Njc1ZDBkOTYzMDdjNzJlZjNlOGE4M2JmYTg0MDJlMjI2ZGU5ZDVkMTcyNGJhNzVjNDg3OWJmNDFhNGE0NjVjZTYxODg3ZDlmNDlhMzQ3NTc4NDliNDhiYWU4MWMyN2ViZWQ3NmZhYWUyYWQ2NjliY2EwNDc0N2Q0MDkxNDhkNDA4MTI3NzZlMGFlMmMzOTViM2NiOWM4OTk4MWNlNzJkNWMiOiI1MDk1ODFmNjgxNmRmNGI4Y2M5ZjJjZjQyYjdjYzZlNmE1YTFlMzc1YTE2ZjI0MTIiCisKK2dlbmVyaWMgSE1BQy1TSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX21kX2htYWM6IlNIQTI1NiI6MjQ6IjYzY2VjNjI0NmFlYjFiNjEiOiJjMTc4ZGI5MDhhNDA1ZmE4OGFhMjU1YjhjYWQyMmI0MDU3MDE2NTg1ZjEzOWVlOTMwMzg4YjA4M2Q4NjA2MmZhMGIzZWExZjIzZjhhNDNiZDExYmVlODQ2NGJjYmQxOWI1YWI5ZjZhODAzOGQ1MjQ1NTE2ZjgyNzRkMjBjOGVlMzAzM2EwN2I5MDhkYTUyOGZhMDAzNDNiYjU5NWRlZWQ1MDBjYWI5NzQ1YzRjYjYzOTFjMjMzMDBmMGQzNTg0YjA5MGIzMzI2YzRjZmEzNDI2MjBiNzhmOWY1YjRmMjdmNzMwN2VkNzcwNjQzZWMxNzY0YWVhZTNkY2YxYTNlYzY5IjoiNjRmM2RkODYxYjdjN2QyOWZjZTlhZTBjZTllZDk1NGI1ZDcxNDE4MDZlZTllZWM3IgorCitnZW5lcmljIEhNQUMtU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9obWFjOiJTSEEzODQiOjMyOiI5MWE3NDAxODE3Mzg2OTQ4Y2E5NTJmOWEyMGVlNTVkYyI6IjJmZWE1YjkxMDM1ZDZkNTAxZjNhODM0ZmExNzhiZmY0ZTY0Yjk5YTg0NTA0MzJkYWZkMzJlNDQ2NmIwZTFlNzc4MTE2NmY4YTczZjdlMDM2YjNiMDg3MDkyMGY1NTlmNDdiZDE0MDBhMWE5MDZlODVlMGRjZjAwYTZjMjY4NjJlOTE0OGIyMzgwNjY4MGYyODVmMWZlNGY5M2NkYWY5MjRjMTgxYTk2NTQ2NTczOWMxNGYyMjY4YzhiZThiNDcxODQ3Yzc0YjIyMjU3N2ExMzEwYmNkYzFhODVlZjE0NjhhYTFhM2ZkNDAzMTIxM2M5NzMyNGI3NTA5YzkwNTBhM2QiOiI2ZDdiZTk0OTAwNThjZjQxM2NjMDlmZDA0M2MyMjRjMmVjNGZhNzg1OWIxMzc4MzAwMGE5YTU5M2M5Zjc1ODM4IgorCitnZW5lcmljIEhNQUMtU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9obWFjOiJTSEEzODQiOjMyOiJkNmNhYzE5NjU3MDYxYWE5MGE2ZGExMWNkMmU5ZWE0NyI6IjlmNDgyZTQ2NTUxNzMxMzVkZmFhMjJhMTFiYmJlNmFmMjYzZGI0ODcxNjQwNmM1YWVjMTYyYmEzYzRiNDFjYWQ0ZjVhOTE1NTgzNzc1MjExOTFjNzM0MzExOGJlZWU2NTk4MjkyOTgwMjkxM2Q2N2I2ZGU1YzRiZGMzZDI3Mjk5YmQ3MjIyMTlkNWFkMmVmYTViZGI5ZmY3YjIyOWZjNGJiYzNmNjA3MTkzMjBjZjJlN2E1MWNhZDExMzNkMjFiYWQyZDgwOTE5YjE4MzZlZjgyNTMwOGI3YzUxYzZiNzY3N2FjNzgyZTJiYzMwMDA3YWZiYTA2NTY4MWNiZGQyMTUiOiJmM2Q1ZjNjMDA4MTc1MzIxYWE3YjJlYTM3OWVhYTRmOGI5ZGNjNjBmODk1ZWM4OTQwYjgxNjJmODBhN2RmZTlmIgorCitnZW5lcmljIEhNQUMtU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9obWFjOiJTSEEzODQiOjMyOiJlMDYzNjZhZDE0OWI4NDQyY2Q0YzFhYmRkZGQwYWZkZSI6IjJkMTQwYTE5NGMwMmE1NTk4ZjY5MTc0ODM0Njc5YjgzNzEyMzRhMGQ1MDU0OTFmMWJkMDNlMTI4ZGQ5MWE4YmNhMmZiODEyZTlkNWRhNzE2MTNiNWIwMDk1MmVhNzhiZjQ1MGQ1Yjc1NDdkZWE3OTEzNTkyNTA4NWM3ZDNlNmY1MjAwOWM1MWNhM2Q4OGM2YzA5ZTlkMDc0YjBlZTExMDczNmUwZWM5YjQ3OGI5M2VmYjM0ZDdiZjFjNDFiNTRkZWNlYzQzZWFiMDc3YTNhYTQ5OThlZGU1M2Y2N2I0ZWEzNmMyNjY3NDVmOTY0M2Q1MzYwYmRjODMzN2M3MGRhYmYiOiJjMTljNjdlZGE2ZmUyOWYzNjY3YmVlMWM4OTdjMzMzY2U3NjgzMDk0YWU3N2U4NGI0YzE2Mzc4ZDI5MDg5NWExIgorCitnZW5lcmljIEhNQUMtU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9obWFjOiJTSEEzODQiOjQ4OiIwMWFjNTlmNDJmOGJiOTFkMWJkMTBmZTY5OTBkN2E4NyI6IjNjYWYxOGM0NzZlZGQ1NjE1ZjM0M2FjN2I3ZDNhOWRhOWVmYWRlNzU1NjcyZDViYTRiOGFlOGE3NTA1NTM5ZWEyYzEyNGZmNzU1ZWMwNDU3ZmJlNDllNDM0ODBiM2M3MWU3ZjQ3NDJlYzM2OTNhYWQxMTVkMDM5ZjkwMjIyYjAzMGZkYzk0NDAzMTM2OTE3MTZkNTMwMjAwNTgwOGMwNzYyNzQ4M2I5MTZmZGY2MTk4MzA2M2MyZWIxMjY4ZjJkZWVlZjQyZmM3OTAzMzQ0NTZiYzZiYWQyNTZlMzFmYzkwNjZkZTdjYzdlNDNkMTMyMWIxODY2ZGI0NWU5MDU2MjIiOiIxOTg1ZmEyMTYzYTU5NDNmYzVkOTJmMWZlODgzMTIxNWU3ZTkxZjBiZmY1MzMyYmM3MTNhMDcyYmRiM2E4ZjllNWM1MTU3NDYzYTNiZmViMzYyMzE0MTZlNjU5NzNlNjQiCisKK2dlbmVyaWMgSE1BQy1TSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2htYWM6IlNIQTM4NCI6NDg6ImZkNzRiOWQ5ZTEwMmEzYTgwZGYxYmFmMGNiMzViYWNlIjoiMWEwNjg5MTc1ODQ4MTNkMTY4OWNjYmQwMzcwYzIxMTRkNTM3Y2RjOGNjNTJiZjZkYjE2ZDU1MzVmOGY3ZDFhZDBjODUwYTlmYTBjZjYyMzczZmZiZjc2NDJiMWYxZTgxNjQwMTBkMzUwNzIxZDc5OGQ5Zjk5ZTk3MjQ4MzAzOTljMmZjZTI2Mzc3ZTgzZDM4ODQ1Njc1NDU3ODY1YzAzZDRhMDdkNzQxYTUwNWVmMDI4MzQzZWIyOWZkNDZkMGY3NjFmMzc5Mjg4Njk5OGMxZTVjMzJhYzNiYzdlNmYwOGZhZWQxOTRiMzRmMDZlZmY0ZDVkNGE1YjQyYzQ4MWUwZSI6ImE5ODFlYWY1ZGUzZDc4YjIwZWJkNDQxNGE0ZWRkMDY1N2UzNjY3Y2Q4MDhhMGRiYzQzMGNmNzI1MmY3M2E1YjI0ZWZhMTM2MDM5MjA3YmQ1OTgwNjg5NzQ1N2Q3NGUwYyIKKworZ2VuZXJpYyBITUFDLVNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMzg0Ijo0ODoiOWZlNzk0ZjBlMjZiNjY5ZmE1ZjY4ODMxNDkzNzdjNmMiOiI2MDEwYzk3NDVlOGYxZDQ0Y2ZkYzk5ZTdlMGZkNzliYzQyNzE5NDRjMmQxZDg0ZGJhNTg5MDczZGZjNGNhNWViOThjNTkzNTZmNjBjZDg3YmVmMjhhZWI4M2E4MzJiZGUzMzliMjA4N2RhZjk0MmFhMWY2Nzg3NmM1ZDVlZDMzOTI0YmVkNDE0M2JjMTJhMmJlNTMyY2NhZjY0ZGFhN2UyYmMzYzg4NzJiOTgyM2IwNTMzYjZmNTE1OTEzNWVmZmU4YzYxNTQ1NTM2OTc1ZDdjM2E2MWJhNzM2NWVjMzVmMTY1YmM5MmI0ZDE5ZWI5MTU2YWRlMTdkZmExYmI0MTYxIjoiOTE1YWU2MWY4NzU0Njk4YzJiNmVmOTYyOWU5MzQ0MWY4NTQxYmQ0MjU4YTVlMDUzNzJkMTkxMzZjZmFlZmMwNDczYjQ4ZDk2MTE5MjkxYjM4ZWIxYTNjYjE5ODJhOTg2IgorCitnZW5lcmljIEhNQUMtU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9obWFjOiJTSEE1MTIiOjMyOiJjOTVhMTdjMDk5NDBhNjkxZWQyZDYyMTU3MWIwZWI4NDRlZGU1NWE5IjoiOTljZDI4MjYyZTgxZjM0ODc4Y2RjZWJmNDEyOGUwNWUyMDk4YTcwMDkyNzhhNjZmNGM3ODU3ODRkMGU1Njc4ZjNmMmIyMmY4NmU5ODJkMjczYjYyNzNhMjIyZWM2MTc1MGI0NTU2ZDc2NmYxNTUwYTdhZWRmZTgzZmFlZGJjNGJkYWU4M2ZhNTYwZDYyZGYxN2ViOTE0ZDA1ZmRhYTQ4OTQwNTUxYmFjODFkNzAwZjVmY2E3MTQ3Mjk1ZTM4NmU4MTIwZDY2NzQyZWM2NWM2ZWU4ZDg5YTkyMjE3YTBmNjI2NmQwZGRjNjBiYjIwZWY2NzlhZTgyOTljODUwMmMyZiI6IjZiYzEzNzlkMTU2NTU5ZGRlZTJlZDQyMGVhNWQ1YzVmZjNlNDU0YTEwNTliN2JhNzJjMzUwZTc3YjZlOTMzM2MiCisKK2dlbmVyaWMgSE1BQy1TSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2htYWM6IlNIQTUxMiI6MzI6IjNiMTBiOGZhNzE4ODQwZDFkZWE4ZTlmYzMxNzQ3NmJjZjU1ODc1ZmQiOiJmMDRmNWI3MDczZDdkMDI3NGU4MzU0NDMzYjM5MDMwNmM1NjA3NjMyZjVmNTg5YzEyZWRiNjJkNTU2NzNhZmYyMzY2ZDJlNmIyNGRlNzMxYWRmOTJlNjU0YmFhMzBiMWNmZDRhMDY5Nzg4ZjY1ZWMxYjk5YjAxNWQ5MDRkODgzMjExMGRiZDc0ZWFlMzVhODE1NjJkMTRjZTQxMzZkODIwYWQwYTU1ZmY1NDg5YmE2NzhmYmJjMWMyNzY2M2VjMTM0OWQ3MGU3NDBmMGUwZWMyN2NmYmU4OTcxODE5ZjQ3ODllNDg2YjUwYTJkNzI3MWQ3N2UyYWFlYTUwZGU2MmZkIjoiZmMzYzM4YzdhMTdlM2NlMDZkYjAzM2YxYzE3Mjg2NmYwMWEwMDA0NWRiNTVmMmUyMzRmNzFjODIyNjRmMmJhMiIKKworZ2VuZXJpYyBITUFDLVNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBNTEyIjozMjoiNDgwM2QzMTEzOTQ2MDBkYzFlMGQ4ZmM4Y2VkZWI4YmRlM2ZlN2M0MiI6ImExMGMxMjVkZDcwMmE5NzE1M2FkOTIzYmE1ZTk4ODljZmFjMWJhMTY5ZGUzNzBkZWJlNTFmMjMzNzM1YWE2ZWZmY2M5Nzg1YzRiNWM3ZTQ4YzQ3N2RjNWM0MTFhZTZhOTU5MTE4NTg0ZTI2YWRjOTRiNDJjMmIyOWIwNDZmM2NmMDFjNjViMjRhMjRiZDJlNjIwYmRmNjUwYTIzYmI0YTcyNjU1YjExMDBkN2NlOWE0ZGFiNjk3YzYzNzk3NTRiNDM5NmM4MjVkZTRiOWViNzNmMmU2YTZjMGQwMzUzYmJkZWFmNzA2NjEyODAwZTEzN2I4NThmZGIzMGYzMzExYzYiOiI3Y2Q4MjM2YzU1MTAyZTYzODVmNTIyNzk1MDZkZjZmY2MzODhhYjc1MDkyZGEyMTM5NWNlMTRhODJiMjAyZmZhIgorCitnZW5lcmljIEhNQUMtU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9obWFjOiJTSEE1MTIiOjQ4OiJhZWIyZjNiOTc3ZmE2YzhlNzFlMDdjNWE1Yzc0ZmY1ODE2NmRlMDkyIjoiMjI0NTczNTVkYzc2MDk1YWJkNDY4NDZiNDFjZmU0OWEwNmNlNDJhYzg4NTdiNDcwMmZjNzcxNTA4ZGZiMzYyNmUwYmZlODUxZGY4OTdhMDdiMzY4MTFlYzQzMzc2NmU0YjQxNjZjMjYzMDFiMzQ5M2U3NDQwZDQ1NTRiMGVmNmFjMjBmMWE1MzBlNThmYWM4YWViYTRlOWZmMmQ0ODk4ZDhhMjg3ODNiNDljZDI2OWMyOTY1ZmQ3ZjhlNGYyZDYwY2YxZTUyODRmMjQ5NTE0NWI3MjM4MmFhZDkwZTE1M2E5MGVjYWUxMjVhZDc1MzM2ZmIxMjg4MjVjMjNmYjhiMCI6ImZhMzliZDhmY2MzYmZhMjE4ZjlkZWE1ZDNiMmNlMTBhNzYxOWUzMTY3OGE1NmQ4YTlkOTI3YjFmZTcwM2IxMjVhZjQ0NWRlYmU5YTg5YTA3ZGI2MTk0ZDI3YjQ0ZDg1YSIKKworZ2VuZXJpYyBITUFDLVNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBNTEyIjo0ODoiNDI4NWQzZDc3NDRkYTUyNzc1YmI0NGNhNDM2YTMxNTRmNzk4MDMwOSI6IjIwOGYwYjZmMmRlMmU1YWE1ZGYxMTkyN2RkYzZkZjQ4NWVkYzExOTMxODFjNDg0ZDBmMGE0MzRhOTU0MTg4MDMxMDFkNGRlOWZkYjc5OGY5MzUxNmE2OTE2ZmEzOGE4MjA3ZGUxNjY2ZmU1MGZlMzQ0MWMwM2IxMTJlYWFhZTY5NTRlZDA2M2Y3YWM0ZTNjMWUzZjczYjIwZDE1M2ZlOWU0ODU3ZjVlOTE0MzBmMGE3MGVlODIwNTI5YWRhYzI0Njc0NjlmZDE4YWRmMTBlMmFmMGZlYTI3YzBhYmM4M2M1YTlhZjc3YzM2NGE0NjZjZmZjZThiYWI0ZTJiNzBiYzEiOiJmZTc2MDNmMjA1YjI3NzRmZTBmMTRlY2ZhM2UzMzhlOTA2MDhhODA2ZDExY2E0NTlkZmY1Y2UzNmIxYjI2NGVjZDNhZjVmMDQ5MmE3NTIxZDhkYTMxMDJiYTIwOTI3YTUiCisKK2dlbmVyaWMgSE1BQy1TSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2htYWM6IlNIQTUxMiI6NDg6IjhhYjc4M2Q1YWNmMzJlZmEwZDljMGEyMWFiY2U5NTVlOTY2MzBkODkiOiIxNzM3MWUwMTNkY2U4Mzk5NjNkNTQ0MThlOTdiZTRiZDlmYTNjYjJhMzY4YTUyMjBmNWFhMWI4YWFkZGZhM2JkZWZjOTFhZmU3YzcxNzI0NGZkMmZiNjQwZjVjYjlkOWJmM2UyNWY3ZjBjOGJjNzU4ODgzYjg5ZGNkY2U2ZDc0OWQ5NjcyZmVkMjIyMjc3ZWNlM2U4NGIzZWMwMWI5NmY3MGMxMjVmY2IzY2JlZTZkMTliOGVmMDg3M2Y5MTVmMTczYmRiMDVkODE2MjliYTE4N2NjOGFjMTkzNGIyZjc1OTUyZmI3NjE2YWU2YmQ4MTI5NDZkZjY5NGJkMjc2M2FmIjoiOWFjN2NhOGQxYWVmYzE2NmIwNDZlNGNmNzYwMmViZTE4MWEwZTUwNTU0NzRiZmY1YjM0MjEwNjczMWRhMGQ3ZTQ4ZTRkODdiYzBhNmYwNTg3MTU3NDI4OWExYjA5OWY4IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMSBUZXN0IFZlY3RvciBGSVBTLTE5OGEgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2htYWNfbXVsdGk6IlNIQTEiOjIwOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZiI6IjUzNjE2ZDcwNmM2NTIwMjMzMSI6IjRmNGNhM2Q1ZDY4YmE3Y2MwYTEyMDhjOWM2MWU5YzVkYTA0MDNjMGEiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIEZJUFMtMTk4YSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaG1hY19tdWx0aToiU0hBMSI6MjA6IjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDMiOiI1MzYxNmQ3MDZjNjUyMDIzMzIiOiIwOTIyZDM0MDVmYWEzZDE5NGY4MmE0NTgzMDczN2Q1Y2M2Yzc1ZDI0IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMSBUZXN0IFZlY3RvciBGSVBTLTE5OGEgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2htYWNfbXVsdGk6IlNIQTEiOjIwOiI1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiMyI6IjUzNjE2ZDcwNmM2NTIwMjMzMyI6ImJjZjQxZWFiOGJiMmQ4MDJmM2QwNWNhZjdjYjA5MmVjZjhkMWEzYWEiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIEZJUFMtMTk4YSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaG1hY19tdWx0aToiU0hBMSI6MTI6IjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwIjoiNTM2MTZkNzA2YzY1MjAyMzM0IjoiOWVhODg2ZWZlMjY4ZGJlY2NlNDIwYzc1IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2htYWNfbXVsdGk6IlNIQTEiOjEwOiI3YjEwZjQxMjRiMTVjODJlIjoiMjdkY2I1YjFkYWY2MGNmZDNlMmY3M2Q0ZDY0Y2E5YzY4NGY4YmY3MWZjNjgyYTQ2NzkzYjE3OTBhZmE0ZmViMTAwY2E3YWFmZjI2ZjU4ZjBlMWQwZWQ0MmYxY2RhZDFmNDc0YWZhMmU3OWQ1M2EwYzQyODkyYzRkN2IzMjdjYmU0NmIyOTVlZDhkYTNiNmVjYWIzZDQ4NTE2ODdhNmY4MTJiNzlkZjJmNmIyMGYxMWY2NzA2ZjUzMDE3OTBjYTk5NjI1YWFkNzM5MWQ4NGY3ODA0M2QyYTBhMjM5YjE0Nzc5ODRjMTU3YmJjOTI3NjA2NGU3YTFhNDA2YjA2MTJjYSI6IjRlYWQxMmMyZmUzZDZlYTQzYWNiIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2htYWNfbXVsdGk6IlNIQTEiOjEwOiI0ZmU5ZmI5MDIxNzJhMjFiIjoiNGNlYjNhN2MxMzY1OWMyMmZlNTExMzRmMDNkY2U0YzIzOWQxODFiNjNjNmIwYjU5ZDM2NzE1N2ZkMDVjYWI5ODM4NGY5MmRmYTQ4MmQyZDVlNzhlNzJlZWYxYjE4MzhhZjQ2OTYwMjZjNTQyMzNkNDg0ZWNiYmU4N2Y5MDRkZjU1NDY0MTlmODU2N2VhZmQyMzJlNmMyZmNkM2VlMmI3NjgyYzYzMDAwNTI0YjA3OGRiYjIwOTZmNTg1MDA3ZGVhZTc1MjU2MmRmMWZlM2IwMTI3ODA4OWUxNmYzYmU0NmUyZDBmN2NhYmFjMmQ4ZTZjYzAyYTJkMGNhOTUzNDI1ZiI6IjU2NDQyOGE2N2JlMTkyNGI1NzkzIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2htYWNfbXVsdGk6IlNIQTEiOjEwOiJkMWYwMTQ1NWY3OGM0ZmI0IjoiMDBkNDBmNjdiNTc5MTRiZWM0NTZhM2UzMjAxZWYxNDY0YmUzMTlhOGQxODhjMDJlMTU3YWY0YjU0ZjliNWE2NmQ2N2Y4OThhOWJkYmIxOWZmNjNhODBhYmE2ZjI0NmQwMTM1NzU3MjFkNTJlYjFiNDdhNjVkZWY4ODQwMTFjNDliMjU3YmNjMjgxN2ZjODUzZjEwNmU4MTM4Y2UzODZkN2E1YWMzMTAzZGUwYTNmYTBlZDZiYjdhZjlmZjY2ZWJkMWNjNDZmYjg2ZTRkYTAwMTNkMjBhM2MyZGNkOGZiODI4YTRiNzBmN2YxMDRiNDFiZjNmNDQ2ODJhNjY0OTdlYSI6IjU2YTY2NWE3Y2RmZTYxMGY5ZmM1IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2htYWNfbXVsdGk6IlNIQTEiOjEwOiI0ZTVlZjc3ZmRmMDMzYTViIjoiZTU5MzI2NDY0ZTMyMDFkMTk1ZTI5ZjJhMzQ0NmVjMWIxYzlmZjMxMTU0ZTJhNGQwZTQwZWQ0NjZmMWJjODU1ZDI5Zjc2ODM1NjI0ZmEwMTI3ZDI5YzliMTkxNTkzOWEwNDZmMzg1YWY3ZTVkNDdhMjNiYTkxZjI4YmQyMmY4MTFlYTI1OGRiYmYzMzMyYmNkMzU0M2I4Mjg1ZDVkZjQxYmQwNjRmZmQ2NGEzNDFjMjJjNGVkYjQ0ZjljOGQ5ZTZkZjBjNTlkYmY0YTA1MmE2YzgzZGE3NDc4ZTE3OWE2ZjM4MzljNjg3MGZmOGNhOGI5NDk3ZjlhYzFkNzI1ZmRkYSI6Ijk4MWMwYTdhODQyM2I2M2E4ZmE2IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2htYWNfbXVsdGk6IlNIQTEiOjEwOiJiY2Q5ZmY4YWE2MGJlMmJlIjoiNTFiZTRkMGViMzdiYWI3MTRmOTJlMTllOWQ3MDM5MDY1NWIzNjNlOGNkMzQ2YTc0ODI0NWU3MzFmNDM3NzU5Y2I4MjA2NDEyYzhkYWIyZWYxZDRmMzZmODgwZjQxZmY2OWQ5NDlkYTQ1OTRmZGVjYjY1ZTIzY2FjMTMyOWI1OWU2OWUyOWJmODc1YjM4YzMxZGY2ZmE1NDZjNTk1ZjM1Y2MyMTkyYWE3NTA2NzlhOGE1MWE2NWUwMGU4MzlkNzNhOGQ4YzU5OGE2MTBkMjM3ZmJlNzg5NTUyMTM1ODlkODBlZmNiNzNiOTViODU4NmY5NmQxN2I2ZjUxYTcxYzNiOCI6Ijg0NjMzZjlmNTA0MGM4OTcxNDc4IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2htYWNfbXVsdGk6IlNIQTEiOjEwOiI0YTY2MWJjZTZlZDg2ZDIxIjoiNWZmNmM3NDRmMWFhYjFiYzI5Njk3ZDcxZjY3NTQxYjhiM2NlYzNjNzA3OTE4M2IxMGE4M2ZiOThhOWVlMjUxZDRiYWMzZTFjYjU4MWNhOTcyYWFlZDhlZmQ3YzI4NzVhNmZiNGM5OTExMzJmNjdjOTc0MmQ0NWU1M2JjN2U4ZWFhOTRiMzViMzdhOTA3YmU2MTA4NmI0MjZjZDExMDg4YWMxMTg5MzRlODVkOTY4Yzk2NjdmZDY5ZmM2ZjZlYTM4YzBmZTM0NzEwYjdlY2U5MTIxMWI5YjdlYTAwYWNkMzFmMDIyYWE2NzI2MzY4Zjk5MjhhMTM1MmYxMjIyMzNmMSI6IjczOWRmNTkzNTNhYzY2OTRlNTVlIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2htYWNfbXVsdGk6IlNIQTEiOjEwOiIxMjg3ZTE1NjVhNTdiNTQ3IjoiMzkwZmZkY2NjNjE3MWMxMTU2OGQ4NWI4ZjkxM2UwMTliZjRjZDk4MmNhOWNkMjFlYTczMGQ0MWJkZjNmY2MwYmM4OGZmNDhiYTEzYThmMjNkZWIyZDk2ZWMxMDMzZTdiMmE1OGNhNzJiMGMxZTE3YmYwMzMzMGRiMjVkMWUzNjBmYTY5MTgwMDljNDI5NGJkMTIxNWI1Y2NkMTU5YThmNThiYzNkYzNkNDkwZWI3YzNiOWY4ODdlOGM5OGRiYmIyNzRhNzUzNzNkY2I2OTVhNTlhYmQwMjE5NTI5ZDg4NTE4YTk2ZjkyYWJjMGJiY2JkYTk4NWMzODhmMWZiYmNjOSI6ImQ3OGRkZjA4MDc3YzdkOWUyYmE2IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9obWFjX211bHRpOiJTSEEyMjQiOjE0OiJlMDU1ZWI3NTY2OTdlZTU3M2ZkMzIxNDgxMWE5ZjdmYSI6IjM4NzU4NDcwMTJlZTQyZmU1NGEwMDI3YmRmMzhjY2E3MDIxYjgzYTJlZDA1MDNhZjY5ZWY2YzM3YzYzN2JjMTExNGZiYTQwMDk2YzU5NDdkNzM2ZTE5YjdhZjNjNjhkOTVhNGUzYjhiMDczYWRiYmI4MGY0N2U5ZGI4ZjJkNGYwMDE4ZGRkODQ3ZmFiZmRmOWRkOWI1MmM5M2U0MDQ1ODk3NzcyNWY2YjdiYTE1ZjA4MTZiYjg5NWNkZjUwNDAxMjY4ZjVkNzAyYjdlNmE1ZjlmYWVmNTdiODc2OGM4YTNmYzE0ZjlhNGIzMTgyYjQxZDk0MGUzMzdkMjE5YjI5ZmYiOiI0MGE0NTMxMzMzNjFjYzQ4ZGExMWJhZjYxNmVlIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9obWFjX211bHRpOiJTSEEyMjQiOjE0OiI4OGU1MjU4YjU1YjE2MjMzODVlYjk2MzJmYTdjNTdkNiI6ImFkYTc2YmI2MDRiZTE0MzI2NTUxNzAxY2YzMGU0OGE2NWVlZTgwYjQ0ZjBiOWQ0YTA3YjE4NDQ1NDNiNzg0NGE2MjEwOTdmZGM5OWRlNTczODc0NThhZTkzNTQ4OTliNjIwZDA2MTdlYWJjYWVmYTllZWYzZDQxM2EzMzYyODA1NDMzNWNlNjU2YzI2ZmEyOTg2ZTBmMTExYTYzNTEwOTZiMjgzMTAxZWM3ODY4ODcxZDc3MGIzNzA5NzNjNzQwNTk4M2Y5NzU2YjMwMDVhM2VhYjQ5MmNmZDBlN2ViNDJlNWMyZTE1ZmE2YmU4NzE4YzBhNTBhY2M0ZTU3MTcyMzAiOiI4MWM3ODNhZjUzODAxNWNlZjNjNjAwOTVkZjUzIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9obWFjX211bHRpOiJTSEEyMjQiOjE0OiI4NWQ0MDJkODIyMTE0ZDMxYWJmNzU1MjZlMjUzODcwNSI6IjgwMjBkOGQ5OGNjMmUyMjk4YjMyODc5YzUxYzc1MWUxZGQ1NTU4ZmUyZWFiYjhmMTU4NjA0Mjk3ZDZkMDcyY2UyMjYxYTFkNjgzMGI3Y2ZlMjYxN2I1N2M3MTI2Zjk5Yzk0NzYyMTFkNjE2MWFjZDc1ZDI2NmRhMjE3ZWM4MTc0YjgwNDg0YzlkYzZmMDQ0OGEwYTAzNmEzZmM4MmU4YmY1NGJkYjcxNTQ5MzY4MjU4ZDVkNDFmNTc5NzhhNGMyNjZiOTJlODc4M2VmNjYzNTAyMTU1NzNkOTliZTQwODkxNDRiMzgzYWQ4ZjMyMjJiYWU4ZjNiZjgwZmZiMWJiMmIiOiIyYWEwMzQwYWM5ZGVhZmUzYmUzODEyOWRhY2EwIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9obWFjX211bHRpOiJTSEEyMjQiOjE0OiI1NDVjNmVlY2M1ZWU0NmZhMTdjNTlmOTFhOTRmODFhZSI6IjhmYjdmMzU2NTU5MzE3MDE1MmRkYjIwMjE4NzQ3ODRlOTUxOTc3Y2ZkZDIyZjhiNzJhNzJhNjEzMjBhOGYyYTM1Njk3YjVlOTEzZjcxNzgwNTU1OWIxYWYxODYxZWUzZWQ0MmZiNzg4NDgxZTRmZDI3NmIxN2JkYmVmY2FlN2I0NTAxZGM1ZDIwZGU1Yjc2MjZkZDVlZmRjZDY1Mjk0ZGI0YmRmNjgyYzMzZDlhOTI1NWM2NDM1MzgzZmE1ZjFjODg2MzI2YTNhY2JjNmJkNTBhMzNhYjViMmRiYjAzNGNlMDExMmQ0ZTIyNmJiY2Q1N2UzNzMxYTUxOWFhMWQ3ODQiOiIzZWI1NjZlYWM1NGM0YTNhOWVmMDkyNDY5ZjI0IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9obWFjX211bHRpOiJTSEEyMjQiOjE0OiI0NDY2YWI0ZGM0Mzg4NDFhOTc1MGM3ZjE3M2RmZjAyZSI6IjI1MzRjMTFjNzhjOTljZmZhZWM4ZjcyMmYwNGFkYzcwNDVjNzMyNGQ1OGNlOThlMzdjZmE5NGI2ZWQyMWVkN2Y1OGNlNTUzNzllZjI0YjcyZDZkNjQwZWU5MTU0Zjk2YzYxNDczNGJlOWM0MDhlMjI1ZDdiYTRjZWNjMTE3OWNjOWY2ZTE4MDhlMTA2N2FhOGYyNDRhOTliZDBjMzI2NzU5NGMxODg3YTQwZDE2N2Y4YjdjZjc4ZGIwZDE5Zjk3YjAxZmM1MGI4Yzg2ZGVmNDkwZGZhN2E1MTM1MDAyYzMzZTcxZDc3YThjY2U4ZWEwZjkzZTA1ODA0MzlhMzM3MzMiOiI1OWY0NGE5YmJlZDQ4NzViODkyZDIyZDZiNWFiIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9obWFjX211bHRpOiJTSEEyMjQiOjI4OiIwZTNkZDliYjVlNGNmMGYwOWE0YzExNjAwYWY1NmQ4ZCI6ImY0NTg5ZmE3NmMzMjhlYTI1Y2Y4YmFlNTgyMDI2YmE0MGE1OWQ0NWE1NDZmZjMxY2Y4MGViODI2MDg4ZjY5YmI5NTRjNDUyYzc0NTg2ODM2NDE2ZGVlOTBhNTI1NWJjNWQ1NmQzYjQwNWIzNzA1YTUxOTcwNDU2ODhiMzJmYTk4NGMzYTNkZmJkYzljMjQ2MGEwYjVlNjMxMmE2MjQwNDhiYjZmMTcwMzA2NTM1ZTliMzcxYTNhYjEzNGEyNjQyYTIzMGFkMDNkMmM2ODhjY2E4MGJhZWFlZTlhMjBlMWQ0YzU0OGIxY2VkZTI5YzZhNDViZjRkZjJjOGM0NzZmMWEiOiIxMjE3NWI5M2UzZGE0YzU4MjE3MTQ1ZTRkYzBhMWNmMTQyZmFiOTMxOWJiNTAxZTAzN2IzNTBiYSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaG1hY19tdWx0aToiU0hBMjI0IjoyODoiY2RhNTE4N2IwYzVkY2IwZjhlNWE4YmVlZDIzMDY1ODQiOiI5MDExYWUyOWI0NGM0OWIzNDc0ODdjZTk3Mjk2NWYxNmFkZTNjMTViZTA4NTZjZTljODUzYTk3MzlkYmEwN2U0ZjIwZDU5NGRkYzFkZmUyMTU2MGE2NWE0ZTQ1OGNmYTE3NzQ1NTc1YjkxNWEzMGM3YTk0MTJmZjhkMWQ2ODlkYjk2ODBkZDI0MjhjMjc1ODhiYjBkYzkyZDJjZDk0NDVmZThmNDRiODQwYTE5N2M1MmMzYzQzMzNmZmY0NTUzMzk0NTEzNDM5OGRmNjQzNjUxM2NmYWIwNmM5MjQwNDZiOGM3OTVhNWJkOTJlOGQ1ZjJkZTg1YmYzMDZmMmVlZDY3IjoiNGFhYmE5MmI0MGUyYTYwMGZlYWIxNzZlYjliMjkyZDgxNDg2NDE5NWMwMzM0MmFhZDZmNjdmMDgiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2htYWNfbXVsdGk6IlNIQTI1NiI6MTY6ImNkZmZkMzRlNmIxNmZkYzAiOiJkODNlNzhiOTlhYjYxNzA5NjA4OTcyYjM2ZTc2YTU3NTYwM2RiNzQyMjY5Y2M1ZGQ0ZTdkNWNhNzgxNmUyNmI2NTE1MWM5MjYzMjU1MGNiNGM1MjUzYzg4NWQ1ZmNlNTNiYzQ3NDU5YTFkYmQ1NjUyNzg2YzRhYWMwMTQ1YTUzMmYxMmMwNTEzOGFmMDRjYmI1NTgxMDFhN2FmNWRmNDc4ODM0YzIxNDY1OTRkZDczNjkwZDAxYTRmZTcyNTQ1ODk0MzM1ZjQyN2FjNzAyMDQ3OTgwNjhjYjg2YzVhNjAwYjQwYjQxNGVkZTIzNTkwYjQxZTExOTIzNzNkZjg0ZmUzIjoiYzZmMGRkZTI2NmNiNGEyNmQ0MWU4MjU5ZDMzNDk5Y2MiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2htYWNfbXVsdGk6IlNIQTI1NiI6MTY6IjZkOTdiYjU4OTIyNDViZTIiOiIxM2MyYjM5MWQ1OWMwMjUyY2E1ZDIzMDJiZWFhZjg4YzRiY2Q3NzliYjUwNWFkOWExMjIwMDNkZmFlNGNjMTIzYWQyYmQwMzZmMjI1YzRmMDQwMDIxYTZiOWZiOGJkNmYwMjgxY2YyZTI2MzFhNzMyYmRjNzE2OTNjYzQyZWY2ZDUyYjZjNjkxMmE5ZWY3N2IzMjc0ZWI4NWFkN2Y5NjVhZTZlZDQ0YWMxNzIxOTYyYTg4NGVjN2FjZmI0NTM0YjE0ODhiMWMwYzQ1YWZhNGRhZThkYTFlYjdiMGE4OGEzMjQwMzY1ZDdlNGU3ZDgyNmFiYmRlOWY5MjAzZmQ5OWQ3IjoiMzE1ODhlMjQxYjAxNTMxOWE1YWI4YzQ1MjcyOTY0OTgiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2htYWNfbXVsdGk6IlNIQTI1NiI6MTY6IjNjN2ZjOGE3MGI0OTAwN2EiOiI2MDAyNGU0MjhhMzljOGI4YmIyZTk1OTFiYWQ5ZGMyMTE1ZGZiZmQ3MTZiNmViN2FmMzBhNmViMzQ1NjBjYWNjYmJmYTQ3YjcxMGZhOGQ1MjNhY2E3MWU5ZTViYTEwZmMxZmViMWE0MzU1NmQ3MWYwN2VhNGYzMzQ5NmYwOTMwNDRlOGNhZjFkMDJiNzllNDZlYjEyODhkNTk2NGE3YTc0OTRmNmI5MjU3NGMzNTc4NGVlY2UwNTRjNjE1MTI4MWQ4MDgyMmY3ZDQ3YjgyMzFjMzVkMDdmNWNiNWNmNDMxMGRkYzg0NDg0NWEwMWM2YmZhYjUxNGMwNDhlY2NhZjlmIjoiMWM5OGM5NGEzMmJlYzlmMjUzYzIxMDcwZjgyZjg0MzgiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2htYWNfbXVsdGk6IlNIQTI1NiI6MjQ6IjM2OWYzM2Y4NWI5MjdhMDciOiJhZThlMmE5NGNhMzg2ZDQ0OGNiYWNkYjBlOTA0MGFlM2NiMjk3YzI5NjM2MzA1MmNjMTU3NDU1ZGEyOWEwYzk1ODk3MzE1ZmMxMWUzZjEyYjgxZTI0MThkYTFlYzI4MGJjY2JjMDBlODQ3NTg0Y2U5ZDE0ZGVlYmE3YjNjOWI4ZGJhOTU4YjA0YmJhMzc1NTFmNmM5YmE5YzA2MGJlMWE0YjhjZjQzYWE2MmU1MDc4Yjc2YzY1MTJjNTYxOWI3MWE2YTdjZjU3MjcxODBlMWZmMTRmNWExYTNjMTY5MWJmOGI2ZWJhZDM2NWMxNTFlNThkNzQ5ZDU3YWRiM2E0OTg2IjoiNjBiOTAzODMyODY1MzNkMzA5ZGU0NjU5M2U2Y2UzOWZjNTFmYjAwYThkODgyNzhjIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9obWFjX211bHRpOiJTSEEyNTYiOjI0OiJlNTE3OTY4NzU4MmI0ZGM0IjoiY2UxMDNiZGFjZGYzMmY2MTRmNjcyN2JjYjMxY2ExYzI4MjRhODUwZDAwZjU1ODViMDE2ZmIyMzRmZTFlZjJjZDY4N2YzMDJkM2M2YjczOGVkODlhMjQwNjBkNjVjMzY2NzVkMGQ5NjMwN2M3MmVmM2U4YTgzYmZhODQwMmUyMjZkZTlkNWQxNzI0YmE3NWM0ODc5YmY0MWE0YTQ2NWNlNjE4ODdkOWY0OWEzNDc1Nzg0OWI0OGJhZTgxYzI3ZWJlZDc2ZmFhZTJhZDY2OWJjYTA0NzQ3ZDQwOTE0OGQ0MDgxMjc3NmUwYWUyYzM5NWIzY2I5Yzg5OTgxY2U3MmQ1YyI6IjUwOTU4MWY2ODE2ZGY0YjhjYzlmMmNmNDJiN2NjNmU2YTVhMWUzNzVhMTZmMjQxMiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaG1hY19tdWx0aToiU0hBMjU2IjoyNDoiNjNjZWM2MjQ2YWViMWI2MSI6ImMxNzhkYjkwOGE0MDVmYTg4YWEyNTViOGNhZDIyYjQwNTcwMTY1ODVmMTM5ZWU5MzAzODhiMDgzZDg2MDYyZmEwYjNlYTFmMjNmOGE0M2JkMTFiZWU4NDY0YmNiZDE5YjVhYjlmNmE4MDM4ZDUyNDU1MTZmODI3NGQyMGM4ZWUzMDMzYTA3YjkwOGRhNTI4ZmEwMDM0M2JiNTk1ZGVlZDUwMGNhYjk3NDVjNGNiNjM5MWMyMzMwMGYwZDM1ODRiMDkwYjMzMjZjNGNmYTM0MjYyMGI3OGY5ZjViNGYyN2Y3MzA3ZWQ3NzA2NDNlYzE3NjRhZWFlM2RjZjFhM2VjNjkiOiI2NGYzZGQ4NjFiN2M3ZDI5ZmNlOWFlMGNlOWVkOTU0YjVkNzE0MTgwNmVlOWVlYzciCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2htYWNfbXVsdGk6IlNIQTM4NCI6MzI6IjkxYTc0MDE4MTczODY5NDhjYTk1MmY5YTIwZWU1NWRjIjoiMmZlYTViOTEwMzVkNmQ1MDFmM2E4MzRmYTE3OGJmZjRlNjRiOTlhODQ1MDQzMmRhZmQzMmU0NDY2YjBlMWU3NzgxMTY2ZjhhNzNmN2UwMzZiM2IwODcwOTIwZjU1OWY0N2JkMTQwMGExYTkwNmU4NWUwZGNmMDBhNmMyNjg2MmU5MTQ4YjIzODA2NjgwZjI4NWYxZmU0ZjkzY2RhZjkyNGMxODFhOTY1NDY1NzM5YzE0ZjIyNjhjOGJlOGI0NzE4NDdjNzRiMjIyNTc3YTEzMTBiY2RjMWE4NWVmMTQ2OGFhMWEzZmQ0MDMxMjEzYzk3MzI0Yjc1MDljOTA1MGEzZCI6IjZkN2JlOTQ5MDA1OGNmNDEzY2MwOWZkMDQzYzIyNGMyZWM0ZmE3ODU5YjEzNzgzMDAwYTlhNTkzYzlmNzU4MzgiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2htYWNfbXVsdGk6IlNIQTM4NCI6MzI6ImQ2Y2FjMTk2NTcwNjFhYTkwYTZkYTExY2QyZTllYTQ3IjoiOWY0ODJlNDY1NTE3MzEzNWRmYWEyMmExMWJiYmU2YWYyNjNkYjQ4NzE2NDA2YzVhZWMxNjJiYTNjNGI0MWNhZDRmNWE5MTU1ODM3NzUyMTE5MWM3MzQzMTE4YmVlZTY1OTgyOTI5ODAyOTEzZDY3YjZkZTVjNGJkYzNkMjcyOTliZDcyMjIxOWQ1YWQyZWZhNWJkYjlmZjdiMjI5ZmM0YmJjM2Y2MDcxOTMyMGNmMmU3YTUxY2FkMTEzM2QyMWJhZDJkODA5MTliMTgzNmVmODI1MzA4YjdjNTFjNmI3Njc3YWM3ODJlMmJjMzAwMDdhZmJhMDY1NjgxY2JkZDIxNSI6ImYzZDVmM2MwMDgxNzUzMjFhYTdiMmVhMzc5ZWFhNGY4YjlkY2M2MGY4OTVlYzg5NDBiODE2MmY4MGE3ZGZlOWYiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2htYWNfbXVsdGk6IlNIQTM4NCI6MzI6ImUwNjM2NmFkMTQ5Yjg0NDJjZDRjMWFiZGRkZDBhZmRlIjoiMmQxNDBhMTk0YzAyYTU1OThmNjkxNzQ4MzQ2NzliODM3MTIzNGEwZDUwNTQ5MWYxYmQwM2UxMjhkZDkxYThiY2EyZmI4MTJlOWQ1ZGE3MTYxM2I1YjAwOTUyZWE3OGJmNDUwZDViNzU0N2RlYTc5MTM1OTI1MDg1YzdkM2U2ZjUyMDA5YzUxY2EzZDg4YzZjMDllOWQwNzRiMGVlMTEwNzM2ZTBlYzliNDc4YjkzZWZiMzRkN2JmMWM0MWI1NGRlY2VjNDNlYWIwNzdhM2FhNDk5OGVkZTUzZjY3YjRlYTM2YzI2Njc0NWY5NjQzZDUzNjBiZGM4MzM3YzcwZGFiZiI6ImMxOWM2N2VkYTZmZTI5ZjM2NjdiZWUxYzg5N2MzMzNjZTc2ODMwOTRhZTc3ZTg0YjRjMTYzNzhkMjkwODk1YTEiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2htYWNfbXVsdGk6IlNIQTM4NCI6NDg6IjAxYWM1OWY0MmY4YmI5MWQxYmQxMGZlNjk5MGQ3YTg3IjoiM2NhZjE4YzQ3NmVkZDU2MTVmMzQzYWM3YjdkM2E5ZGE5ZWZhZGU3NTU2NzJkNWJhNGI4YWU4YTc1MDU1MzllYTJjMTI0ZmY3NTVlYzA0NTdmYmU0OWU0MzQ4MGIzYzcxZTdmNDc0MmVjMzY5M2FhZDExNWQwMzlmOTAyMjJiMDMwZmRjOTQ0MDMxMzY5MTcxNmQ1MzAyMDA1ODA4YzA3NjI3NDgzYjkxNmZkZjYxOTgzMDYzYzJlYjEyNjhmMmRlZWVmNDJmYzc5MDMzNDQ1NmJjNmJhZDI1NmUzMWZjOTA2NmRlN2NjN2U0M2QxMzIxYjE4NjZkYjQ1ZTkwNTYyMiI6IjE5ODVmYTIxNjNhNTk0M2ZjNWQ5MmYxZmU4ODMxMjE1ZTdlOTFmMGJmZjUzMzJiYzcxM2EwNzJiZGIzYThmOWU1YzUxNTc0NjNhM2JmZWIzNjIzMTQxNmU2NTk3M2U2NCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaG1hY19tdWx0aToiU0hBMzg0Ijo0ODoiZmQ3NGI5ZDllMTAyYTNhODBkZjFiYWYwY2IzNWJhY2UiOiIxYTA2ODkxNzU4NDgxM2QxNjg5Y2NiZDAzNzBjMjExNGQ1MzdjZGM4Y2M1MmJmNmRiMTZkNTUzNWY4ZjdkMWFkMGM4NTBhOWZhMGNmNjIzNzNmZmJmNzY0MmIxZjFlODE2NDAxMGQzNTA3MjFkNzk4ZDlmOTllOTcyNDgzMDM5OWMyZmNlMjYzNzdlODNkMzg4NDU2NzU0NTc4NjVjMDNkNGEwN2Q3NDFhNTA1ZWYwMjgzNDNlYjI5ZmQ0NmQwZjc2MWYzNzkyODg2OTk4YzFlNWMzMmFjM2JjN2U2ZjA4ZmFlZDE5NGIzNGYwNmVmZjRkNWQ0YTViNDJjNDgxZTBlIjoiYTk4MWVhZjVkZTNkNzhiMjBlYmQ0NDE0YTRlZGQwNjU3ZTM2NjdjZDgwOGEwZGJjNDMwY2Y3MjUyZjczYTViMjRlZmExMzYwMzkyMDdiZDU5ODA2ODk3NDU3ZDc0ZTBjIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9obWFjX211bHRpOiJTSEEzODQiOjQ4OiI5ZmU3OTRmMGUyNmI2NjlmYTVmNjg4MzE0OTM3N2M2YyI6IjYwMTBjOTc0NWU4ZjFkNDRjZmRjOTllN2UwZmQ3OWJjNDI3MTk0NGMyZDFkODRkYmE1ODkwNzNkZmM0Y2E1ZWI5OGM1OTM1NmY2MGNkODdiZWYyOGFlYjgzYTgzMmJkZTMzOWIyMDg3ZGFmOTQyYWExZjY3ODc2YzVkNWVkMzM5MjRiZWQ0MTQzYmMxMmEyYmU1MzJjY2FmNjRkYWE3ZTJiYzNjODg3MmI5ODIzYjA1MzNiNmY1MTU5MTM1ZWZmZThjNjE1NDU1MzY5NzVkN2MzYTYxYmE3MzY1ZWMzNWYxNjViYzkyYjRkMTllYjkxNTZhZGUxN2RmYTFiYjQxNjEiOiI5MTVhZTYxZjg3NTQ2OThjMmI2ZWY5NjI5ZTkzNDQxZjg1NDFiZDQyNThhNWUwNTM3MmQxOTEzNmNmYWVmYzA0NzNiNDhkOTYxMTkyOTFiMzhlYjFhM2NiMTk4MmE5ODYiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2htYWNfbXVsdGk6IlNIQTUxMiI6MzI6ImM5NWExN2MwOTk0MGE2OTFlZDJkNjIxNTcxYjBlYjg0NGVkZTU1YTkiOiI5OWNkMjgyNjJlODFmMzQ4NzhjZGNlYmY0MTI4ZTA1ZTIwOThhNzAwOTI3OGE2NmY0Yzc4NTc4NGQwZTU2NzhmM2YyYjIyZjg2ZTk4MmQyNzNiNjI3M2EyMjJlYzYxNzUwYjQ1NTZkNzY2ZjE1NTBhN2FlZGZlODNmYWVkYmM0YmRhZTgzZmE1NjBkNjJkZjE3ZWI5MTRkMDVmZGFhNDg5NDA1NTFiYWM4MWQ3MDBmNWZjYTcxNDcyOTVlMzg2ZTgxMjBkNjY3NDJlYzY1YzZlZThkODlhOTIyMTdhMGY2MjY2ZDBkZGM2MGJiMjBlZjY3OWFlODI5OWM4NTAyYzJmIjoiNmJjMTM3OWQxNTY1NTlkZGVlMmVkNDIwZWE1ZDVjNWZmM2U0NTRhMTA1OWI3YmE3MmMzNTBlNzdiNmU5MzMzYyIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaG1hY19tdWx0aToiU0hBNTEyIjozMjoiM2IxMGI4ZmE3MTg4NDBkMWRlYThlOWZjMzE3NDc2YmNmNTU4NzVmZCI6ImYwNGY1YjcwNzNkN2QwMjc0ZTgzNTQ0MzNiMzkwMzA2YzU2MDc2MzJmNWY1ODljMTJlZGI2MmQ1NTY3M2FmZjIzNjZkMmU2YjI0ZGU3MzFhZGY5MmU2NTRiYWEzMGIxY2ZkNGEwNjk3ODhmNjVlYzFiOTliMDE1ZDkwNGQ4ODMyMTEwZGJkNzRlYWUzNWE4MTU2MmQxNGNlNDEzNmQ4MjBhZDBhNTVmZjU0ODliYTY3OGZiYmMxYzI3NjYzZWMxMzQ5ZDcwZTc0MGYwZTBlYzI3Y2ZiZTg5NzE4MTlmNDc4OWU0ODZiNTBhMmQ3MjcxZDc3ZTJhYWVhNTBkZTYyZmQiOiJmYzNjMzhjN2ExN2UzY2UwNmRiMDMzZjFjMTcyODY2ZjAxYTAwMDQ1ZGI1NWYyZTIzNGY3MWM4MjI2NGYyYmEyIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9obWFjX211bHRpOiJTSEE1MTIiOjMyOiI0ODAzZDMxMTM5NDYwMGRjMWUwZDhmYzhjZWRlYjhiZGUzZmU3YzQyIjoiYTEwYzEyNWRkNzAyYTk3MTUzYWQ5MjNiYTVlOTg4OWNmYWMxYmExNjlkZTM3MGRlYmU1MWYyMzM3MzVhYTZlZmZjYzk3ODVjNGI1YzdlNDhjNDc3ZGM1YzQxMWFlNmE5NTkxMTg1ODRlMjZhZGM5NGI0MmMyYjI5YjA0NmYzY2YwMWM2NWIyNGEyNGJkMmU2MjBiZGY2NTBhMjNiYjRhNzI2NTViMTEwMGQ3Y2U5YTRkYWI2OTdjNjM3OTc1NGI0Mzk2YzgyNWRlNGI5ZWI3M2YyZTZhNmMwZDAzNTNiYmRlYWY3MDY2MTI4MDBlMTM3Yjg1OGZkYjMwZjMzMTFjNiI6IjdjZDgyMzZjNTUxMDJlNjM4NWY1MjI3OTUwNmRmNmZjYzM4OGFiNzUwOTJkYTIxMzk1Y2UxNGE4MmIyMDJmZmEiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2htYWNfbXVsdGk6IlNIQTUxMiI6NDg6ImFlYjJmM2I5NzdmYTZjOGU3MWUwN2M1YTVjNzRmZjU4MTY2ZGUwOTIiOiIyMjQ1NzM1NWRjNzYwOTVhYmQ0Njg0NmI0MWNmZTQ5YTA2Y2U0MmFjODg1N2I0NzAyZmM3NzE1MDhkZmIzNjI2ZTBiZmU4NTFkZjg5N2EwN2IzNjgxMWVjNDMzNzY2ZTRiNDE2NmMyNjMwMWIzNDkzZTc0NDBkNDU1NGIwZWY2YWMyMGYxYTUzMGU1OGZhYzhhZWJhNGU5ZmYyZDQ4OThkOGEyODc4M2I0OWNkMjY5YzI5NjVmZDdmOGU0ZjJkNjBjZjFlNTI4NGYyNDk1MTQ1YjcyMzgyYWFkOTBlMTUzYTkwZWNhZTEyNWFkNzUzMzZmYjEyODgyNWMyM2ZiOGIwIjoiZmEzOWJkOGZjYzNiZmEyMThmOWRlYTVkM2IyY2UxMGE3NjE5ZTMxNjc4YTU2ZDhhOWQ5MjdiMWZlNzAzYjEyNWFmNDQ1ZGViZTlhODlhMDdkYjYxOTRkMjdiNDRkODVhIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9obWFjX211bHRpOiJTSEE1MTIiOjQ4OiI0Mjg1ZDNkNzc0NGRhNTI3NzViYjQ0Y2E0MzZhMzE1NGY3OTgwMzA5IjoiMjA4ZjBiNmYyZGUyZTVhYTVkZjExOTI3ZGRjNmRmNDg1ZWRjMTE5MzE4MWM0ODRkMGYwYTQzNGE5NTQxODgwMzEwMWQ0ZGU5ZmRiNzk4ZjkzNTE2YTY5MTZmYTM4YTgyMDdkZTE2NjZmZTUwZmUzNDQxYzAzYjExMmVhYWFlNjk1NGVkMDYzZjdhYzRlM2MxZTNmNzNiMjBkMTUzZmU5ZTQ4NTdmNWU5MTQzMGYwYTcwZWU4MjA1MjlhZGFjMjQ2NzQ2OWZkMThhZGYxMGUyYWYwZmVhMjdjMGFiYzgzYzVhOWFmNzdjMzY0YTQ2NmNmZmNlOGJhYjRlMmI3MGJjMSI6ImZlNzYwM2YyMDViMjc3NGZlMGYxNGVjZmEzZTMzOGU5MDYwOGE4MDZkMTFjYTQ1OWRmZjVjZTM2YjFiMjY0ZWNkM2FmNWYwNDkyYTc1MjFkOGRhMzEwMmJhMjA5MjdhNSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaG1hY19tdWx0aToiU0hBNTEyIjo0ODoiOGFiNzgzZDVhY2YzMmVmYTBkOWMwYTIxYWJjZTk1NWU5NjYzMGQ4OSI6IjE3MzcxZTAxM2RjZTgzOTk2M2Q1NDQxOGU5N2JlNGJkOWZhM2NiMmEzNjhhNTIyMGY1YWExYjhhYWRkZmEzYmRlZmM5MWFmZTdjNzE3MjQ0ZmQyZmI2NDBmNWNiOWQ5YmYzZTI1ZjdmMGM4YmM3NTg4ODNiODlkY2RjZTZkNzQ5ZDk2NzJmZWQyMjIyNzdlY2UzZTg0YjNlYzAxYjk2ZjcwYzEyNWZjYjNjYmVlNmQxOWI4ZWYwODczZjkxNWYxNzNiZGIwNWQ4MTYyOWJhMTg3Y2M4YWMxOTM0YjJmNzU5NTJmYjc2MTZhZTZiZDgxMjk0NmRmNjk0YmQyNzYzYWYiOiI5YWM3Y2E4ZDFhZWZjMTY2YjA0NmU0Y2Y3NjAyZWJlMTgxYTBlNTA1NTQ3NGJmZjViMzQyMTA2NzMxZGEwZDdlNDhlNGQ4N2JjMGE2ZjA1ODcxNTc0Mjg5YTFiMDk5ZjgiCisKK2dlbmVyaWMgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXg6IlNIQTEiOiIiOiJkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5IgorCitnZW5lcmljIFNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4OiJTSEExIjoiYTgiOiI5OWYyYWE5NWUzNmY5NWMyYWNiMGVhZjIzOTk4ZjAzMDYzOGYzZjE1IgorCitnZW5lcmljIFNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4OiJTSEExIjoiMzAwMCI6ImY5NDRkY2Q2MzVmOTgwMWY3YWM5MGE0MDdmYmM0Nzk5NjRkZWMwMjQiCisKK2dlbmVyaWMgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXg6IlNIQTEiOiI0Mjc0OWUiOiJhNDQ0MzE5ZTliNmNjMWU4NDY0YzUxMWVjMDk2OWMzN2Q2YmIyNjE5IgorCitnZW5lcmljIFNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4OiJTSEExIjoiOWZjM2ZlMDgiOiIxNmEwZmY4NGZjYzE1NmZkNWQzY2EzYTc0NGYyMGEyMzJkMTcyMjUzIgorCitnZW5lcmljIFNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4OiJTSEExIjoiYjVjMWM2ZjFhZiI6ImZlYzlkZWViZmNkZWRhZjY2ZGRhNTI1ZTFiZTQzNTk3YTczYTFmOTMiCisKK2dlbmVyaWMgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXg6IlNIQTEiOiJlYzI5NTYxMjQ0ZWRlNzA2YjZlYjMwYTFjMzcxZDc0NDUwYTEwNWMzZjk3MzVmN2ZhOWZlMzhjZjY3ZjMwNGE1NzM2YTEwNmU5MmUxNzEzOWE2ODEzYjFjODFhNGYzZDNmYjk1NDZhYjQyOTZmYTlmNzIyODI2YzA2Njg2OWVkYWNkNzNiMjU0ODAzNTE4NTgxM2UyMjYzNGE5ZGE0NDAwMGQ5NWEyODFmZjlmMjY0ZWNjZTBhOTMxMjIyMTYyZDAyMWNjYTI4ZGI1ZjNjMmFhMjQ5NDVhYjFlMzFjYjQxM2FlMjk4MTBmZDc5NGNhZDVkZmFmMjllYzQzY2IzOGQxOThmZTRhZTFkYTIzNTk3ODAyMjE0MDViZDY3MTJhNTMwNWRhNGIxYjczN2ZjZTdjZDIxYzBlYjc3MjhkMDgyMzVhOTAxMSI6Ijk3MDExMWM0ZTc3YmNjODhjYzIwNDU5YzAyYjY5YjRhYThmNTgyMTciCisKK2dlbmVyaWMgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXg6IlNIQTEiOiI1ZmMyYzNmNmE3ZTc5ZGM5NGJlNTI2ZTUxNjZhMjM4ODk5ZDU0OTI3Y2U0NzAwMThmYmZkNjY4ZmQ5ZGQ5N2NiZjY0ZTJjOTE1ODRkMDFkYTYzYmUzY2M5ZmRmZjhhZGZlZmMzYWM3MjhlMWUzMzViOWNkYzg3ZjA2OTE3MmUzMjNkMDk0YjQ3ZmExZTY1MmFmZTRkNmFhMTQ3YTlmNDZmZGEzM2NhY2I2NWYzYWExMjIzNDc0NmI5MDA3YThjODVmZTk4MmFmZWQ3ODE1MjIxZTQzZGJhNTUzZDhmZThhMDIyY2RhYzFiOTllZWVlYTM1OWU1YTlkMmU3MmUzODJkZmZhNmQxOWYzNTlmNGYyN2RjMzQzNGNkMjdkYWVlZGE4ZTM4NTk0ODczMzk4Njc4MDY1ZmJiMjM2NjVhYmE5MzA5ZDk0NjEzNWRhMGU0YTRhZmRhZGZmMTRkYjE4ZTg1ZTcxZGQ5M2MzYmY5ZmFmN2YyNWM4MTk0YzQyNjliMWVlM2Q5OTM0MDk3YWI5OTAwMjVkOWMzYWFmNjNkNTEwOWY1MjMzNWRkMzk1OWQzOGFlNDg1MDUwZTRiYmI2MjM1NTc0ZmMwMTAyYmU4ZjdhMzA2ZDZlOGRlNmJhNmJlY2Y4MGYzNzQxNWI1N2Y5ODk4YTU4MjRlNzc0MTQxOTc0MjJiZTNkMzZhNjA4MCI6IjA0MjNkYzc2YTg3OTExMDdkMTRlMTNmNTI2NWIzNDNmMjRjYzBmMTkiCisKK2dlbmVyaWMgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXg6IlNIQTEiOiIwZjg2NWY0NmE4ZjNhZWQyZGExODQ4MmFhMDlhOGYzOTBkYzlkYTA3ZDUxZDFiZDEwZmUwYmY1ZjM5MjhkNTkyN2QwODczM2QzMjA3NTUzNWE2ZDFjOGFjMWIyZGM2YmEwZjJmNjMzZGMxYWY2OGUzZjBmYTNkODVlNmM2MGNiN2I1NmMyMzlkYzE1MTlhMDA3ZWE1MzZhMDdiNTE4ZWNjYTAyYTZjMzFiNDZiNzZmMDIxNjIwZWYzZmM2OTc2ODA0MDE4MzgwZTVhYjljNTU4ZWJmYzVjYjFjOWVkMmQ5NzQ3MjJiZjhhYjYzOThmMWYyYjgyZmE1MDgzZjg1YzE2YTU3NjdhM2EwNzI3MWQ2Nzc0M2YwMDg1MGNlOGVjNDI4YzdmMjJmMWNmMDFmOTk4OTVjMGM4NDQ4NDViMDZhMDZjZWNiMGM2Y2Y4M2ViNTVhMWQ0ZWJjNDRjMmMxM2Y2ZjdhYTVlMGUwOGFiZmQ4NGU3ODY0Mjc5MDU3YWJjNDcxZWU0YTQ1ZGJiYjU3NzRhZmEyNGU1MTc5MWEwZWFkYTExMDkzYjg4NjgxZmUzMGJhYTNiMmU5NDExM2RjNjMzNDJjNTFjYTVkMWE2MDk2ZDA4OTdiNjI2ZTQyY2I5MTc2MTA1ODAwOGY3NDZmMzU0NjU0NjU1NDBhZDhjNmI4YjYwZjdlMTQ2MWIzY2U5ZTY1Mjk2MjU5ODRjYjhjN2Q0NmYwN2Y3MzViZTA2NzU4OGEwMTE3ZjIzZTM0ZmY1NzgwMGUyYmJlOWExNjA1ZmRlNjA4N2ZiMTVkMjJjNWQzYWM0NzU2NmI4YzQ0OGIwY2VlNDAzNzNlNWJhNmVhYTIxYWJlZTcxMzY2YWZiYjI3ZGJiZDMwMDQ3N2Q3MGMzNzFlN2I4OTYzODEyZjVlZDRmYjc4NGZiMmYzYmQxZDNhZmU4ODNjZGQ0N2VmMzJiZWFlYSI6IjY2OTJhNzFkNzNlMDBmMjdkZjk3NmJjNTZkZjQ5NzA2NTBkOTBlNDUiCisKK2dlbmVyaWMgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4OiJTSEExIjoiODIzNjE1Mzc4MWJkMmYxYjgxZmZlMGRlZjFiZWI0NmY1YTcwMTkxMTQyOTI2NjUxNTAzZjFiM2JiMTAxNmFjZGI5ZTdmN2FjY2VkOGRkMTY4MjI2ZjExOGZmNjY0YTAxYTg4MDAxMTZmZDAyMzU4N2JmYmE1MmEyNTU4MzkzNDc2ZjVmYzY5Y2U5YzY1MDAxZjIzZTcwNDc2ZDJjYzgxYzk3ZWExOWNhZWIxOTRlMjI0MzM5YmNiMjNmNzdhODNmZWFjNTA5NmY5YjMwOTBjNTFhNmVlNmQyMDRiNzM1YWE3MWQ3ZTk5NmQzODBiODA4MjJlNGRmZDQzNjgzYWY5Yzc0NDI0OThjYWNiZWE2NDg0MmRmZGEyMzhjYjA5OTkyN2M2ZWZhZTA3ZmRmN2IyM2E0ZTQ0NTZlMDE1MmIyNDg1M2ZlMGQ1ZGU0MTc5OTc0YjJiOWQ0YTFjZGJlZmNiYzAxZDhkMzExYjVkZGEwNTkxMzYxNzZlYTY5OGFiODJhY2YyMGRkNDkwYmU0NzEzMGIxMjM1Y2I0OGY4YTY3MTA0NzNjZmM5MjNlMjIyZDk0YjU4MmY5YWUzNmQ0Y2EyYTMyZDE0MWI4ZThjYzM2NjM4ODQ1ZmJjNDk5YmNlMTc2OThjM2ZlY2FlMjU3MmRiYmQ0NzA1NTI0MzBkN2VmMzBjMjM4YzIxMjQ0NzhmMWY3ODA0ODM4MzliNGZiNzNkNjNhOTQ2MDIwNjgyNGE1YjZiNjUzMTViMjFlM2MyZjI0Yzk3ZWU3YzBlNzhmYWFkM2RmNTQ5YzdjYThlZjI0MTg3NmQ5YWFmZTlhMzA5ZjZkYTM1MmJlYzJjYWFhOTJlZThkY2EzOTI4OTliYTY3ZGZlZDkwYWVmMzNkNDFmYzI0OTRiNzY1Y2IzZTI0MjJjOGU1OTVkYWJiZmFjYTIxNzc1NzQ1M2ZiMzIyYTEzMjAzZjQyNWY2MDczYTk5MDNlMmRjNTgxOGVlMWRhNzM3YWZjMzQ1ZjAwNTc3NDRlM2E1NmUxNjgxYzk0OWViMTIyNzNhM2JmYzIwNjk5ZTQyM2I5NmU0NGJkMWZmNjJlNTBhODQ4YTg5MDgwOWJmZTE2MTFjNjc4N2QzZDc0MTEwMzMwOGY4NDlhNzkwZjljMDE1MDk4Mjg2ZGJhY2ZjMzRjMTcxOGIyYzJiNzdlMzIxOTRhNzVkZGEzNzk1NGEzMjBmYTY4NzY0MDI3ODUyODU1YTdlNWI1Mjc0ZWIxZTJjYmNkMjcxNjFkOThiNTlhZDI0NTgyMjAxNWY0OGFmODJhNDVjMGVkNTliZTk0ZjlhZjAzZDk3MzYwNDg1NzBkNmUzZWY2M2IxNzcwYmM5OGRmYjc3ZGU4NGIxYmIxNzA4ZDg3MmI2MjVkOWFiOWIwNmMxOGU1ZGJiZjM0Mzk5MzkxZjBmOGFhMjZlYzBkYWM3ZmY0Y2I4ZWM5N2I1MmJjYjk0MmZhNmRiMjM4NWRjZDFiM2I5ZDU2N2FhZWI0MjVkNTY3YjBlYmUyNjcyMzU2NTFhMWVkOWJmNzhmZDkzZDNjMWRkMDc3ZmUzNDBiYjA0YjAwNTI5YzU4ZjQ1MTI0YjcxN2MxNjhkMDdlOTgyNmUzMzM3Njk4OGJjNWNmNjI4NDVjMjAwOTk4MGE0ZGZhNjlmYmM3ZTVhMGIxYmIyMGE1OTU4Y2E5NjdhZWM2OGViMzFkZDhmY2NjYTlhZmNkMzBhMjZiYWIyNjI3OWYxYmY2NzI0ZmYiOiIxMTg2M2I0ODM4MDllZjg4NDEzY2E5YjAwODRhYzRhNTM5MDY0MGFmIgorCitnZW5lcmljIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleDoiU0hBMjI0IjoiIjoiZDE0YTAyOGMyYTNhMmJjOTQ3NjEwMmJiMjg4MjM0YzQxNWEyYjAxZjgyOGVhNjJhYzViM2U0MmYiCisKK2dlbmVyaWMgU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4OiJTSEEyMjQiOiJmZiI6ImUzM2Y5ZDc1ZTZhZTEzNjlkYmFiZjgxYjk2YjQ1OTFhZTQ2YmJhMzBiNTkxYTZiNmM2MjU0MmI1IgorCitnZW5lcmljIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleDoiU0hBMjI0IjoiOTg0YyI6IjJmYTlkZjkxNTdkOWUwMjdjZmJjNGM2YTlkZjMyZTFhZGMwY2JlMjMyOGVjMmE2M2M1YWU5MzRlIgorCitnZW5lcmljIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleDoiU0hBMjI0IjoiNTBlZmQwIjoiYjVhOTgyMDQxM2MyYmY4MjExZmJiZjVkZjEzMzcwNDNiMzJmYTRlYWZhZjYxYTBjOGU5Y2NlZGUiCisKK2dlbmVyaWMgU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4OiJTSEEyMjQiOiJlNWUwOTkyNCI6ImZkMTllNzQ2OTBkMjkxNDY3Y2U1OWYwNzdkZjMxMTYzOGYxYzNhNDZlNTEwZDBlNDlhNjcwNjJkIgorCitnZW5lcmljIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleDoiU0hBMjI0IjoiMjFlYmVjYjkxNCI6Ijc4ZjRhNzFjMjFjNjk0NDk5Y2UxYzc4NjY2MTFiMTRhY2U3MGQ5MDUwMTJjMzU2MzIzYzdjNzEzIgorCitnZW5lcmljIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleDoiU0hBMjI0IjoiZmM0ODg5NDdjMWE3YTU4OTcyNmIxNTQzNmI0ZjNkOTU1NjI2MmY5OGZjNjQyMmZjNWNkZjIwZjBmYWQ3ZmU0MjdhMzQ5MWM4NmQxMDFmZmU2Yjc1MTRmMDYyNjhmNjViMmQyNjliMGY2OWFkOWE5Nzg0N2VmZjFjMTZhMjQzODc3NWViN2JlNjg0N2NjZjExY2I4YjJlOGRjZDY2NDBiMDk1YjQ5YzA2OTNmZTNjZjRhNjZlMmQ5YjdhZDY4YmZmMTRmM2FkNjlhYmY0OWQwYWJhMzZjYmUwNTM1MjAyZGViNjU5OWE0NzIyNWVmMDViZWIzNTEzMzVjZDdiYzBmNDgwZDY5MTE5OGM3ZTcxMzA1ZmZkNTNiMzlkMzMyNDJiYjc5Y2ZkOThiZmQ2OWUxMzdiNWQxOGIyYjg5YWM5YWNlMDFjOGRiZGNmMjUzM2NjZTM2ODJlY2M1MjExOGRlMGMxMDYyZWMyMTI2YzJlNjU3ZDZlYTNkOWUyMzk4ZTcwNWQ0YjBiMWYxY2VlY2IyNjZkZmZjNGYzMWJmNDI3NDRmYjFlOTM4ZGMyMmE4ODk5MTllZTFlNzNmNDYzZjc4NzFmZWQ3MjA1MTllMzIxODYyNjRiN2VmMmEwZTVkOWExOGU2Yzk1YzA3ODE4OTRmNzc5NjdmMDQ4OTUxZGVjM2I0ZDg5MmEzODcxMGIxZTM0MzZkM2MyOTA4OGViOGIzZGExNzg5YzI1ZGIzZDNiYzZjMjYwODEyMDZlNzE1NWQyMTBhODliODBjYTZlYTg3N2M0MWZmOTk0N2MwZjI1NjI1ZGNiMTE4Mjk0YTE2MzUwMWY2MjM5YzMyNjY2MWE5NThmZDEyZGE0Y2QxNWE4OTlmOGI4OGNjNzIzNTg5MDU2ZWFlYzVhYTA0YTRjZjVkYmI2ZjQ4MGY5NjYwNDIzY2NmMzhjNDg2ZTIxMDcwN2UwZmIyNWUxZjEyNmNlYjI2MTZmNjNlMTQ3YTY0N2RhYjBhZjllYmU4OWQ2NTQ1OGJmNjM2MTU0YTQ2ZTRjYWI5NWY1ZWU2MmRhMmM3OTc0Y2QxNGI5MGQzZTRmOTlmODE3MzNlODViM2MxZDVkYTJiNTA4ZDliOTBmNWVlZDdlZmYwZDljNzY0OWRlNjJiZWUwMDM3NTQ1NGZlZTRhMzk1NzZhNWJiZmRhZTQyOGU3ZjgwOTdiZGY3Nzk3ZjE2NzY4NmNiNjg0MDdlNDkwNzllNDYxMWZmMzQwMmI2Mzg0YmE3YjdlNTIyYmQyYmIxMWNlOGZkMDJlYTRjMTYwNGQxNjNhYzRmNmRkZTUwYjhiMWY1OTNmN2VkYWFkZWFjMDg2OGVkOTdkZjY5MDIwMDY4MGMyNWYwZjVkODU0MzFhNTI5ZTRmMzM5MDg5ZGNkZWRhMTA1ZTRlZTUxZGVhZDcwNGNkZjVhNjA1YzU1ZmIwNTVjOWIwZTg2YjhiYTFiNTY0YzBkZWEzZWI3OTBhNTk1Y2IxMDNjYjI5MjI2OGIwN2M1ZTU5MzcxZTFhN2VmNTk3Y2Q0YjIyOTc3YTgyMDY5NGM5ZjlhZWI1NWQ5ZGUzZWY2MmI3NWQ2ZTY1NmUzMzM2Njk4ZDk2MGEzNzg3YmY4Y2Y1YjkyNmE3ZmFlZWY1MmFlMTI4YmNiNWRjOWU2NmQ5NGIwMTZjN2I4ZTAzNDg3OTE3MWEyZDkxYzM4MWY1N2U2YTgxNWI2M2I1ZWU2YTZkMmZmNDM1YjQ5ZjE0Yzk2Mzk2Njk2MDE5NDQzMGQ3OGY4Zjg3NjI3YTY3NzU3ZmIzNTMyYjI4OTU1MDg5NGRhNmRjZTQ4MTdhNGUwN2Y0ZDU2ODc3YTExMDJmZmNjOGJlZmE1YzlmOGZjYTZhNDU3NGQ5M2ZmNzAzNzZjODg2MWUwZjgxMDhjZjkwN2ZjZTc3ZWNiNDk3MjhmODZmMDM0ZjgwMjI0Yjk2OTU2ODJlMDgyNDQ2MmY3NmNkYjFmZDFhZjE1MTMzN2IwZDg1NDE5MDQ3YTdhYTI4NDc5MTcxOGE0ODYwY2Q1ODZmNzgyNGI5NWJjODM3YjZmZDRmOWJlNWFhZGU2ODQ1NmUyMDM1NmFhNGQ5NDNkYWMzNmJmOGI2N2I5ZThmOWQwMWEwMGZjZGE3NGI3OThiYWZhNzQ2YzY2MWIwMTBmNzViNTk5MDRiMjlkMGM4MDQxNTA0ODExYzQwNjVmODJjZjJlYWQ1OGQyZjU5NWNiZDhiYzNlNzA0M2Y0ZDk0NTc3YjM3M2I3Y2ZlMTZhMzZmZTU2NGY1MDVjMDNiNzBjZmViNWU1ZjQxMWM3OTQ4MTMzOGFhNjdlODZiM2Y1YTJlNzdjMjFlNDU0YzMzM2FlM2RhOTQzYWI3MjNhYjVmNGM5NDAzOTUzMTk1MzRhNTU3NWY2NGFjYmEwZDBlY2M0M2Y2MDIyMWVkM2JhZGY3Mjg5YzliM2E3YjkwM2EyZDZjOTRlMTVmYTRjMzEwZGM0ZmE3ZmFhMGMyNGY0MDUxNjBhMTAwMmRiZWYyMGU0MTA1ZDQ4MWRiOTgyZjcyNDNmNzk0MDBhNmU0Y2Q5NzUzYzRiOTczMmE0NzU3NWY1MDRiMjBjMzI4ZmU5YWRkN2Y0MzJhNGYwNzU4MjlkYTA3YjUzYjY5NTAzN2RjNTE3MzdkM2NkNzMxOTM0ZGYzMzNjZDFhNTNmY2Y2NWFhMzFiYWE0NTBjYTUwMWE2ZmFlMjZlMzIyMzQ3ZTYxOGM1YTQ0NGQ5MmU5ZmVjNWE4MjYxYWUzOGI5OGZlZTViZTc3YzAyY2VjMDlkZGNjZDViM2RlOTIwMzYiOiIxMzAyMTQ5ZDFlMTk3YzQxODEzYjA1NGM5NDIzMjlkNDIwZTM2NjUzMGY1NTE3YjQ3MGU5NjRmZSIKKworZ2VuZXJpYyBTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXg6IlNIQTI1NiI6IiI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiCisKK2dlbmVyaWMgU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4OiJTSEEyNTYiOiJiZCI6IjY4MzI1NzIwYWFiZDdjODJmMzBmNTU0YjMxM2QwNTcwYzk1YWNjYmI3ZGM0YjVhYWUxMTIwNGMwOGZmZTczMmIiCisKK2dlbmVyaWMgU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4OiJTSEEyNTYiOiI1ZmQ0IjoiN2M0ZmJmNDg0NDk4ZDIxYjQ4N2I5ZDYxZGU4OTE0YjJlYWRhZjI2OTg3MTI5MzZkNDdjM2FkYTI1NThmNjc4OCIKKworZ2VuZXJpYyBTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXg6IlNIQTI1NiI6ImIwYmQ2OSI6IjQwOTY4MDQyMjEwOTNkZGNjZmJmNDY4MzE0OTBlYTYzZTllOTk0MTQ4NThmOGQ3NWZmN2Y2NDJjN2NhNjE4MDMiCisKK2dlbmVyaWMgU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4OiJTSEEyNTYiOiJjOThjOGU1NSI6IjdhYmMyMmMwYWU1YWYyNmNlOTNkYmI5NDQzM2EwZTBiMmUxMTlkMDE0ZjhlN2Y2NWJkNTZjNjFjY2NjZDk1MDQiCisKK2dlbmVyaWMgU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4OiJTSEEyNTYiOiI4MWE3MjNkOTY2IjoiNzUxNmZiOGJiMTEzNTBkZjJiZjM4NmJjM2MzM2JkMGY1MmNiNGM2N2M2ZTQ3NDVlMDQ4OGU2MmMyYWVhMjYwNSIKKworZ2VuZXJpYyBTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXg6IlNIQTI1NiI6IjgzOTBjZjBiZTA3NjYxY2M3NjY5YWFjNTRjZTA5YTM3NzMzYTYyOWQ0NWY1ZDk4M2VmMjAxZjliMmQxMzgwMGU1NTVkOWIxMDk3ZmVjM2I3ODNkN2E1MGRjYjVlMmI2NDRiOTZhMWU5NDYzZjE3N2NmMzQ5MDZiZjM4OGYzNjZkYjVjMmRlZWUwNGEzMGUyODNmNzY0YTk3YzNiMzc3YTAzNGZlZmMyMmMyNTkyMTRmYWE5OWJhYmFmZjE2MGFiMGFhYTdlMmNjYjBjZTA5YzZiMzJmZTA4Y2JjNDc0Njk0Mzc1YWJhNzAzZmFkYmZhMzFjZjY4NWIzMGExMWM1N2YzY2Y0ZWRkMzIxZTU3ZDNhZTZlYmIxMTMzYzgyNjBlNzViOTIyNGZhNDdhMmJiMjA1MjQ5YWRkMmUyZTYyZjgxNzQ5MTQ4MmFlMTUyMzIyYmUwOTAwMzU1Y2RjYzhkNDJhOThmODJlOTYxYTBkYzZmNTM3YjdiNDEwZWZmMTA1ZjU5NjczYmZiNzg3YmYwNDJhYTA3MWY3YWY2OGQ5NDRkMjczNzFjNjQxNjBmZTkzODI3NzIzNzI1MTZjMjMwYzFmNDVjMGQ2YjZjY2E3ZjI3NGIzOTRkYTk0MDJkM2VhZmRmNzMzOTk0ZWM1OGFiMjJkNzE4MjlhOTgzOTk1NzRkNGI1OTA4YTQ0N2E1YTY4MWNiMGRkNTBhMzExNDUzMTFkOTJjMjJhMTZkZTFlYWQ2NmE1NDk5ZjJkY2ViNGNhZTY5NDc3MmNlOTA3NjJlZjgzMzZhZmVjNjUzYWE5YjFhMWM0ODIwYjIyMTEzNmRmY2U4MGRjZTJiYTkyMGQ4OGE1MzBjOTQxMGQwYTRlMDM1OGEzYTExMDUyZTU4ZGQ3M2IwYjE3OWVmOGY1NmZlM2I1YTJkMTE3YTczYTBjMzhhMTM5MmI2OTM4ZTk3ODJlMGQ4NjQ1NmVlNDg4NGUzYzM5ZDRkNzU4MTNmMTM2MzNiYzc5YmFhMDdjMGQyZDU1NWFmYmYyMDdmNTJiN2RjYTEyNmQwMTVhYTJiOTg3M2IzZWIwNjVlOTBiOWIwNjVhNTM3M2ZlMWZiMWIyMGQ1OTQzMjdkMTlmYmE1NmNiODFlN2I2Njk2NjA1ZmZhNTZlYmEzYzI3YTQzODY5N2NjMjFiMjAxZmQ3ZTA5ZjE4ZGVlYTFiM2VhMmYwZDFlZGMwMmRmMGUyMDM5NmExNDU0MTJjZDZiMTNjMzJkMmU2MDU2NDFjOTQ4YjcxNGFlYzMwYzA2NDlkYzQ0MTQzNTExZjM1YWIwZmQ1ZGQ2NGMzNGQwNmZlODZmMzgzNmRmZTllZGViN2YwOGNmYzNiZDQwOTU2ODI2MzU2MjQyMTkxZjk5ZjUzNDczZjMyYjBjYzBjZjkzMjFkNmM5MmExMTJlOGRiOTBiODZlZTllODdjYzMyZDAzNDNkYjAxZTMyY2U5ZWI3ODJjYjI0ZWZiYmJlYjQ0MGZlOTI5ZThmMmJmOGRmYjE1NTBhM2EyZTc0MmU4YjQ1NWEzZTU3MzBlOWU2YTdhOTgyNGQxN2FjYzBmNzJhN2Y2N2VhZTBmMDk3MGY4YmRlNDZkY2RlZmFlZDMwNDdjZjgwN2U3ZjAwYTQyZTVmZDExZDQwZjVlOTg1MzNkNzU3NDQyNWI3ZDJiYzNiMzg0NWM0NDMwMDhiNTg5ODBlNzY4ZTQ2NGUxN2NjNmY2YjM5MzllZWU1MmY3MTM5NjNkMDdkOGM0YWJmMDI0NDhlZjBiODg5Yzk2NzFlMmY4YTQzNmRkZWVmZmNjYTcxNzZlOWJmOWQxMDA1ZWNkMzc3ZjJmYTY3YzIzZWQxZjEzN2U2MGJmNDYwMThhOGJkNjEzZDAzOGU4ODM3MDRmYzI2ZTc5ODk2OWRmMzVlYzdiYmM2YTRmZTQ2ZDg5MTBiZDgyZmEzY2RlZDI2NWQwYTNiNmQzOTllNDI1MWU0ZDgyMzNkYWEyMWI1ODEyZmRlZDY1MzYxOThmZjEzYWE1YTFjZDQ2YTViOWExN2E0ZGRjMWQ5Zjg1NTQ0ZDFkMWNjMTZmM2RmODU4MDM4YzhlMDcxYTExYTdlMTU3YTg1YTZhOGRjNDdlODhkNzVlNzAwOWE4YjI2ZmRiNzNmMzNhMmE3MGYxZTBjMjU5ZjhmOTUzM2I5YjhmOWFmOTI4OGI3Mjc0ZjIxYmFlZWM3OGQzOTZmOGJhY2RjYzIyNDcxMjA3ZDliNGVmY2NkM2ZlZGM1YzVhMjIxNGZmNWU1MWM1NTNmMzVlMjFhZTY5NmZlNTFlOGRmNzMzYThlMDZmNTBmNDE5ZTU5OWU5ZjllNGIzN2NlNjQzZmM4MTBmYWFhNDc5ODk3NzE1MDlkNjlhMTEwYWM5MTYyNjE0MjcwMjYzNjlhMjEyNjNhYzQ0NjBmYjRmNzA4ZjhhZTI4NTk5ODU2ZGI3Y2I2YTQzYWM4ZTAzZDY0YTk2MDk4MDdlNzZjNWYzMTJiOWQxODYzYmZhMzA0ZTg5NTM2NDc2NDhiNGY0YWIwZWQ5OTVlIjoiNDEwOWNkYmVjMzI0MGFkNzRjYzZjMzdmMzkzMDBmNzBmZWRlMTZlMjFlZmM3N2Y3ODY1OTk4NzE0YWFkMGI1ZSIKKworZ2VuZXJpYyBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTM4NCI6IiI6IjM4YjA2MGE3NTFhYzk2Mzg0Y2Q5MzI3ZWIxYjFlMzZhMjFmZGI3MTExNGJlMDc0MzRjMGNjN2JmNjNmNmUxZGEyNzRlZGViZmU3NmY2NWZiZDUxYWQyZjE0ODk4Yjk1YiIKKworZ2VuZXJpYyBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTM4NCI6ImFiIjoiZmI5NGQ1YmUxMTg4NjVmNmZjYmM5NzhiODI1ZGE4MmNmZjE4OGZhZWMyZjY2Y2I4NGIyNTM3ZDc0YjQ5Mzg0Njk4NTRiMGNhODllNjZmYTJlMTgyODM0NzM2NjI5ZjNkIgorCitnZW5lcmljIFNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleDoiU0hBMzg0IjoiN2MyNyI6IjNkODBiZTQ2N2RmODZkNjNhYmI5ZWExZDNmOWNiMzljZDE5ODkwZTdmMmM1M2E2MjAwYmVkYzUwMDY4NDJiMzVlODIwZGM0ZTBjYTkwY2E5Yjk3YWIyM2VmMDcwODBmYyIKKworZ2VuZXJpYyBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTM4NCI6IjMxZjVjYSI6Ijc4ZDU0Yjk0MzQyMWZkZjdiYTkwYTdmYjk2MzdjMjA3M2FhNDgwNDU0YmQ4NDFkMzlmZjcyZjQ1MTFmYzIxZmI2Nzc5N2I2NTJjMGM4MjMyMjkzNDI4NzNkM2JlZjk1NSIKKworZ2VuZXJpYyBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTM4NCI6IjdiZGVlM2Y4IjoiOGJkYWZiYTA3NzdlZTQ0NmMzNDMxYzJkN2IxZmJiNjMxMDg5ZjcxZDJjYTQxN2FiYzFkMjMwZTFhYmE2NGVjMmYxYzE4NzQ3NGE2ZjQwNzdkMzcyYzE0YWQ0MDdmOTlhIgorCitnZW5lcmljIFNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleDoiU0hBMzg0IjoiOGYwNTYwNDkxNSI6IjUwNGU0MTRiZjFkYjEwNjBmMTRjOGM3OTllMjViMWUwYzRkY2YxNTA0ZWJiZDEyOTk5OGYwYWUyODNlNmRlODZlMGQzYzdlODc5YzczZWMzYjE4MzZjM2VlODljMjY0OSIKKworZ2VuZXJpYyBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTM4NCI6IjY2NWRhNmVkYTIxNCI6IjRjMDIyZjExMjAxMDkwODg0ODMxMmY4YjhmMTA3MjYyNWZkNWMxMDUzOTlkNTYyZWExZDU2MTMwNjE5YTdlYWM4ZGZjMzc0OGZkMDVlZTM3ZTRiNjkwYmU5ZGFhOTk4MCIKKworZ2VuZXJpYyBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTM4NCI6IjdmNDZjZTUwNmQ1OTNjNGVkNTNjODJlZGViNjAyMDM3ZTA0ODViZWZiZWUwM2Y3ZjkzMGZlNTMyZDE4ZmYyYTNmNWZkNjA3NjY3MmM4MTQ1YTFiZjQwZGQ5NGY3YWJhYjQ3YzlhZTcxYzIzNDIxM2QyYWQxMDY5YzJkYWMwYjBiYTE1MjU3YWU2NzJiODI0NTk2MGFlNTViZDUwMzE1YzAwOTdkYWEzYTMxODc0NTc4OGQ3MGQxNDcwNjkxMDgwOWNhNmUzOTYyMzdmZTQ5MzRmYTQ2ZjljZTc4MmQ2NjYwNmQ4YmQ2YjJkMjgzYjExNjA1MTNjZTljMjRlOWYwODRiOTc4OTFmOTlkNGNkZWZjMTY5YTAyOWU0MzFjYTc3MmJhMWJiYTQyNmZjZTZmMDFkOGUyODYwMTRlNWFjYzY2Yjc5OWU0ZGI2MmJkNDc4MzMyMmY4YTMyZmY3OGUwZGUzOTU3ZGY1MGNlMTA4NzFmNGUwNjgwZGY0ZThjYTM5NjBhZjliYzZmNGVmYThlYjM5NjJkMThmNDc0ZWIxNzhjMzI2NWNjNDZiOGYyZmY1YWIxYTc0NDlmZWEyOTdkZmNmYWJmYTAxZjI4YWJiYjcyODliYjM1NGI2OTFiNTY2NGVjNmQwOThhZjUxYmUxOTk0N2VjNWJhN2ViZDY2MzgwZDExNDE5NTNiYTc4ZDRhYTU0MDE2NzlmYTdiMGE0NGRiMTk4MWY4NjRkMzUzNWM0NWFmZTRjNjExODNkNWIwYWQ1MWZhZTcxY2EwN2UzNDI0MDI4Mzk1OWY3NTMwYTMyYzcwZDk1YTA4OGU1MDFjMjMwMDU5ZjMzM2IwNjcwODI1MDA5ZTdlMjIxMDNlZjIyOTM1ODMwZGYxZmFjOGVmODc3ZjVmMzQyNmRkNTRmN2QxMTI4ZGQ4NzFhZDlhN2QwODhmOTRjMGU4NzEyMDEzMjk1YjhkNjlhZTc2MjNiODgwOTc4YzJkM2M2YWQyNmRjNDc4ZjhkYzQ3ZjVjMGFkY2M2MTg2NjVkYzNkYzIwNWE5MDcxYjJmMjE5MWUxNmNhYzViZDg5YmI1OTE0OGZjNzE5NjMzNzUyMzAzYWEwOGU1MThkYmMzODlmMGE1NDgyY2FhYTRjNTA3Yjg3MjlhNmYzZWRkMDYxZWZiMzkwMjZjZWNjNjM5OWY1MTk3MWNmNzM4MWQ2MDVlMTQ0YTU5MjhjOGMyZDFhZDc0NjdiMDVkYTJmMjAyZjRmMzIzNGUxYWZmMTlhMDE5OGEyODY4NTcyMWMzZDJkNTIzMTFjNzIxZTNmZGNiYWYzMDIxNGNkYzNhY2ZmOGM0MzM4ODBlMTA0ZmI2M2YyZGY3Y2U2OWE5Nzg1NzgxOWJhN2FjMDBhYzhlYWUxOTY5NzY0ZmRlOGY2OGNmOGUwOTE2ZDdlMGMxNTExNDdkNDk0NGY5OWY0MmFlNTBmMzBlMWM3OWE0MmQyYjZjNTE4OGQxMzNkM2NiYmY2OTA5NDAyN2IzNTRiMjk1Y2NkMGY3ZGM1YTg3ZDczNjM4YmQ5OGViZmIwMDM4M2NhMGZhNjljYjhkY2IzNWExMjUxMGU1ZTA3YWQ4Nzg5MDQ3ZDBiNjM4NDFhMWJiOTI4NzM3ZThiMGEwYzMzMjU0ZjQ3YWE4YmZiZTMzNDFhMDljMmI3NmRiY2VmYTY3ZTMwZGYzMDBkMzRmN2I4NDY1YzRmODY5ZTUxYjZiY2ZlNmNmNjhiMjM4MzU5YTY0NTAzNmJmN2Y2M2YwMjkyNGUwODdjZTc0NTdlNDgzYjYwMjVhODU5OTAzY2I0ODQ1NzRhYTNiMTJjZjk0NmYzMjEyN2Q1MzdjMzNiZWUzMTQxYjVkYjk2ZDEwYTE0OGM1MGFlMDQ1ZjI4NzIxMDc1NzcxMGQ2ODQ2ZTA0YjIwMmY3OWU4N2RkOWE1NmJjNmRhMTVmODRhNzdhN2Y2MzkzNWUxZGVlMDAzMDljZDI3NmE4ZTcxNzZjYjA0ZGE2YmIwZTkwMDk1MzQ0Mzg3MzJjYjQyZDAwODAwODg1M2QzOGQxOWJlYmE0NmU2MTAwNmUzMGY3ZWZkMWJjN2MyOTA2YjAyNGU0ZmY4OThhMWI1OGM0NDhkNjhiNDNjNmFiNjNmMzRmODViM2FjNmFhNDQ3NTg2N2U1MWI1ODM4NDRjYjIzODI5ZjRiMzBmNGJkZDgxN2Q4OGUyZWYzZTdiNGZjMGE2MjQzOTViMDVlYzVlODY4NjA4MmIyNGQyOWZlZjJiMGQzYzI5ZTAzMWQ1Zjk0ZjUwNGIxZDNkZjkzNjFlYjVmZmJhZGIyNDJlNjZjMzlhODA5NGNmZTYyZjg1ZjYzOWYzZmQ2NWZjOGFlMGM3NGE4ZjRjNmUxZDA3MGI5MTgzYTQzNGM3MjJjYWFhMDIyNWY4YmNkNjg2MTRkNmYwNzM4ZWQ2MmY4NDg0ZWM5NjA3N2QxNTVjMDhlMjZjNDZiZTI2MmE3M2UzNTUxNjk4YmQ3MGQ4ZDU2MTBjZjM3YzRjMzA2ZWVkMDRiYTZhMDQwYTljM2U2ZDdlMTVlOGFjZGExN2Y0NzdjMjQ4NGNmNWM1NmI4MTMzMTM5MjdiZTgzODdiMTAyNGY5OTVlOThmYzg3ZjEwMjkwOTFjMDE0MjRiZGMyYjI5NmMyZWFkYjdkMjViM2U3NjJhMmZkMGMyZGNkMTcyN2RkZjkxZGI5N2M1OTg0MzA1MjY1ZjM2OTVhN2Y1NDcyZjJkNzJjOTRkNjhjMjc5MTRmMTRmODJhYThkZDVmZTRlMjM0OGIwY2E5NjdhM2Y5ODYyNmEwOTE1NTJmNWQwZmZhMmJmMTAzNTBkMjNjOTk2MjU2YzAxZmRlZmZiMmMyYzYxMjUxOTg2OWY4NzdlNDkyOWM2ZTk1ZmYxNTA0MGYxNDg1ZTIyZWQxNDExOTg4MDIzMmZlZjNiNTdiMzg0OGYxNWIxNzY2YTU1NTI4NzlkZjhmMDYiOiJjYmE5ZTNlYjEyYTZmODNkYjExZThhNmZmNDBkMTA0OTg1NGVlMDk0NDE2YmM1MjdmZWE5MzFkODU4NTQyOGE4ZWQ2MjQyY2U4MWY2NzY5YjM2ZTIxMjNhNWMyMzQ4M2UiCisKK2dlbmVyaWMgU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4OiJTSEE1MTIiOiIiOiJjZjgzZTEzNTdlZWZiOGJkZjE1NDI4NTBkNjZkODAwN2Q2MjBlNDA1MGI1NzE1ZGM4M2Y0YTkyMWQzNmNlOWNlNDdkMGQxM2M1ZDg1ZjJiMGZmODMxOGQyODc3ZWVjMmY2M2I5MzFiZDQ3NDE3YTgxYTUzODMyN2FmOTI3ZGEzZSIKKworZ2VuZXJpYyBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTUxMiI6IjhmIjoiZTRjZDJkMTk5MzFiNWFhZDljOTIwZjQ1ZjU2ZjZjZTM0ZTNkMzhjNmQzMTlhNmUxMWQwNTg4YWI4YjgzODU3NmQ2Y2U2ZDY4ZWVhN2M4MzBkZTY2ZTJiZDk2NDU4YmZhN2FhZmJjYmVjOTgxZDRlZDA0MDQ5OGMzZGQ5NWYyMmEiCisKK2dlbmVyaWMgU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4OiJTSEE1MTIiOiJlNzI0IjoiN2RiYjUyMDIyMWE3MDI4N2IyM2RiY2Y2MmJmYzFiNzMxMzZkODU4ZTg2MjY2NzMyYTdmZmZhODc1ZWNhYTJjMWI4ZjY3M2I1YzA2NWQzNjBjNTYzYTdiOTUzOTM0OWY1ZjU5YmVmOGMwYzU5M2Y5NTg3ZTNjZDUwYmIyNmEyMzEiCisKK2dlbmVyaWMgU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4OiJTSEE1MTIiOiJkZTRjOTAiOiIzM2NlOTgyODEwNDVhNWM0YzlkZjAzNjNkODE5NmYxZDdkZmNkNWVlNDZhYzg5Nzc2ZmQ4YTQzNDRjMTJmMTIzYTY2Nzg4YWY1YmQ0MWNlZmYxOTQxYWE1NjM3NjU0YjQwNjRjODhjMTRlMDA0NjVhYjc5YTJmYzZjOTdlMTAxNCIKKworZ2VuZXJpYyBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTUxMiI6ImE4MDFlOTRiIjoiZGFkYjFiNWEyN2Y5ZmVjZThkODZhZGIyYTUxODc5YmViMTc4N2ZmMjhmNGU4Y2UxNjJjYWQ3ZmVlMGY5NDJlZmNhYmJmNzM4YmM2Zjc5N2ZjN2NjNzlhM2E3NTA0OGNkNGM4MmNhMDc1N2EzMjQ2OTViZmIxOWE1NTdlNTZlMmYiCisKK2dlbmVyaWMgU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4OiJTSEE1MTIiOiI5NDM5MGQzNTAyIjoiYjYxNzVjNGM0Y2NjZjY5ZTBjZTVmMDMxMjAxMDg4NmVhNmIzNGQ0MzY3M2Y5NDJhZTQyNDgzZjljYmI3ZGE4MTdkZTRlMTFiNWQ1OGUyNWEzZDliZDcyMWEyMmNkZmZlMWM0MDQxMWNjNDVkZjE5MTFmYTU1MDYxMjliNjkyOTciCisKK2dlbmVyaWMgU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4OiJTSEE1MTIiOiI0OTI5N2RkNjNlNWYiOiIxZmNjMWU2ZjY4NzA4NTlkMTE2NDlmNWU1MzM2YTljZDE2MzI5YzAyOWJhZjA0ZDVhNmVkZjI1Nzg4OWEyZTk1MjJiNDk3ZGQ2NTZiYjQwMmRhNDYxMzA3YzRlZTM4MmUyZTg5MzgwYzhlNmU2ZTc2OTdmMWU0MzlmNjUwZmE5NCIKKworZ2VuZXJpYyBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTUxMiI6Ijk5MGQxYWU3MWE2MmQ3YmRhOWJmZGFhMTc2MmE2OGQyOTZlZWU3MmE0Y2Q5NDZmMjg3YTg5OGZiYWJjMDAyZWE5NDFmZDhkNGQ5OTEwMzBiNGQyN2E2MzdjY2U1MDFhODM0YmI5NWVhYjFiNzg4OWEzZTc4NGM3OTY4ZTY3Y2JmNTUyMDA2YjIwNmI2OGY3NmQ5MTkxMzI3NTI0ZmNjMjUxYWViNTZhZjQ4M2QxMGI0ZTBjNmM1ZTU5OWVlOGMwZmU0ZmFlY2E4MjkzODQ0YTg1NDdjNmE5YTkwZDA5M2YyNTI2ODczYTE5YWQ0YTVlNzc2Nzk0YzY4Yzc0MmZiODM0NzkzZDJkZmNiN2ZlYTQ2YzYzYWY0YjcwZmQxMWNiNmU0MTgzNGU3MmVlNDBlZGIwNjdiMjkyYTc5NDk5MGMyODhkNTAwN2U3M2YzNDlmYjM4M2FmNmE3NTZiODMwMWFkNmU1ZTBhYThjZDYxNDM5OWJiM2E0NTIzNzZiMTU3NWFmYTZiZGFlYWFmYzI4NmNiMDY0YmI5MWVkZWY5N2M2MzJiNmMxMTEzZDEwN2ZhOTNhMDkwNTA5OGExMDUwNDNjMmYwNTM5N2Y3MDI1MTQ0MzlhMDhhOWU1ZGRjMTk2MTAwNzIxZDQ1YzhmYzE3ZDJlZDY1OTM3NmY4YTAwYmQ1Y2I5YTA4NjBlMjZkOGEyOWQ4ZDZhYWY1MmRlOTdlOTM0NjAzM2Q2ZGI1MDFhMzVkYmJhZjk3YzIwYjgzMGNkMmQxOGMyNTMyZjNhNTljYzQ5N2VlNjRjMGU1N2Q4ZDA2MGU1MDY5YjI4ZDg2ZWRmMWFkY2Y1OTE0NGIyMjFjZTNkZGFlZjEzNGIzMTI0ZmJjN2RkMDAwMjQwZWZmMGY1ZjVmNDFlODNjZDdmNWJiMzdjOWFlMjE5NTNmZTMwMmIwZjZlOGI2OGZhOTFjNmFiOTkyNjVjNjRiMmZkOWNkNDk0MmJlMDQzMjFiYjVkNmQ3MTkzMjM3NmM2ZjJmODhlMDI0MjJiYTZhNWUyY2I3NjVkZjkzZmQ1ZGQwNzI4YzZhYmRhZjAzYmNlMjJlMDY3OGE1NDRlMmMzNjM2Zjc0MWI2ZjQ0NDdlZTU4YThmYzY1NmI0M2VmODE3OTMyMTc2YWRiZmMyZTA0YjJjODEyYzI3M2NkNmNiZmE0MDk4ZjBiZTAzNmEzNDIyMWZhMDI2NDNmNWVlMmUwYjM4MTM1ZjJhMThlY2QyZjE2ZWJjNDVmOGViMzFiOGFiOTY3YTE1NjdlZTAxNjkwNDE4ODkxMDg2MWNhMWZhMjA1YzdhZGFhMTk0YjI4Njg5M2ZmZTJmNGZiZTAzODRjMmFlZjcyYTQ1MjJhZWFmZDNlYmM3MWY5ZGI3MWVlZWVmODZjNDgzOTRhMWM4NmQ1YjM2YzM1MmNjMzNhMGEyYzgwMGJjOTllNjJmZDY1YjNhMmZkNjllMGI1Mzk5NmVjMTNkOGNlNDgzY2U5MzE5ZWZkOWE4NWFjZWZhYmRiNTM0MjIyNmZlYmI4M2ZkMWRhZjRiMjQyNjVmNTBjNjFjNmRlNzQwNzdlZjg5YjZmZWNmOWYyOWExZjg3MWFmMWU5Zjg5YjJkMzQ1Y2RhNzQ5OWJkNDVjNDJmYTVkMTk1YTFlMWE2YmE4NDg1MTg4OWU3MzBkYTNiMmI5MTZlOTYxNTJhZTBjOTIxNTRiNDk3MTk4NDFkYjdlN2NjNzA3YmE4YTVkN2IxMDFlYjRhYzdiNjI5YmIzMjc4MTc5MTBmZmY2MTU4MGI1OWFhYjc4MTgyZDFhMmUzMzQ3M2QwNWIwMGIxNzBiMjllMzMxODcwODI2Y2ZlNDVhZjIwNmFhN2QwMjQ2YmJkODU2NmNhN2NmYjJkM2MxMGJmYTFkYjdkZDQ4ZGQ3ODYwMzY0NjljZTcyODIwOTNkNzhiNWUxYTViMGZjODFhNTRjOGVkNGNlYWMxZTUzMDUzMDVlNzgyODRhYzI3NmY1ZDc4NjI3MjdhZmYyNDZlMTdhZGRkZTUwYzY3MDAyOGQ1NzJjYmZjMGJlMmU0ZjhiMmViMjhmYTY4YWQ3YjRjNmMyYTIzOWM0NjA0NDFiZmI1ZWEwNDlmMjNiMDg1NjNiNGU0NzcyOWE1OWU1OTg2YTYxYTYwOTNkYmQ1NGY4YzM2ZWJlODdlZGFlMDFmMjUxY2IwNjBhZDEzNjRjZTY3N2Q3ZThkNWE0YTRjYTk2NmE3MjQxY2MzNjBiYzJhY2IyODBlNWY5ZTljMWIwMzJhZDZhMTgwYTM1ZTBjNTE4MGI5ZDE2ZDAyNmM4NjViMjUyMDk4Y2MxZDk5YmE3Mzc1Y2EzMWM3NzAyYzBkOTQzZDVlM2RkMmY2ODYxZmE1NWJkNDZkOTRiNjdlZDNlNTJlY2NkOGRkMDZkOTY4ZTAxODk3ZDZkZTk3ZWQzMDU4ZDkxZGQiOiI4ZTRiYzZmOGI4YzYwZmU0ZDY4YzYxZDliMTU5Yzg2OTNjMzE1MWM0Njc0OWFmNThkYTIyODQ0MmQ5MjdmMjMzNTliZDZjY2Q2YzJlYzhmYTNmMDBhODZjZWNiZmE3MjhlMWFkNjBiODIxZWQyMmZjZDMwOWJhOTFhNDEzOGJjOSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4X211bHRpOiJTSEExIjoiIjoiZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4X211bHRpOiJTSEExIjoiYTgiOiI5OWYyYWE5NWUzNmY5NWMyYWNiMGVhZjIzOTk4ZjAzMDYzOGYzZjE1IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXhfbXVsdGk6IlNIQTEiOiIzMDAwIjoiZjk0NGRjZDYzNWY5ODAxZjdhYzkwYTQwN2ZiYzQ3OTk2NGRlYzAyNCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4X211bHRpOiJTSEExIjoiNDI3NDllIjoiYTQ0NDMxOWU5YjZjYzFlODQ2NGM1MTFlYzA5NjljMzdkNmJiMjYxOSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4X211bHRpOiJTSEExIjoiOWZjM2ZlMDgiOiIxNmEwZmY4NGZjYzE1NmZkNWQzY2EzYTc0NGYyMGEyMzJkMTcyMjUzIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXhfbXVsdGk6IlNIQTEiOiJiNWMxYzZmMWFmIjoiZmVjOWRlZWJmY2RlZGFmNjZkZGE1MjVlMWJlNDM1OTdhNzNhMWY5MyIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4X211bHRpOiJTSEExIjoiZWMyOTU2MTI0NGVkZTcwNmI2ZWIzMGExYzM3MWQ3NDQ1MGExMDVjM2Y5NzM1ZjdmYTlmZTM4Y2Y2N2YzMDRhNTczNmExMDZlOTJlMTcxMzlhNjgxM2IxYzgxYTRmM2QzZmI5NTQ2YWI0Mjk2ZmE5ZjcyMjgyNmMwNjY4NjllZGFjZDczYjI1NDgwMzUxODU4MTNlMjI2MzRhOWRhNDQwMDBkOTVhMjgxZmY5ZjI2NGVjY2UwYTkzMTIyMjE2MmQwMjFjY2EyOGRiNWYzYzJhYTI0OTQ1YWIxZTMxY2I0MTNhZTI5ODEwZmQ3OTRjYWQ1ZGZhZjI5ZWM0M2NiMzhkMTk4ZmU0YWUxZGEyMzU5NzgwMjIxNDA1YmQ2NzEyYTUzMDVkYTRiMWI3MzdmY2U3Y2QyMWMwZWI3NzI4ZDA4MjM1YTkwMTEiOiI5NzAxMTFjNGU3N2JjYzg4Y2MyMDQ1OWMwMmI2OWI0YWE4ZjU4MjE3IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXhfbXVsdGk6IlNIQTEiOiI1ZmMyYzNmNmE3ZTc5ZGM5NGJlNTI2ZTUxNjZhMjM4ODk5ZDU0OTI3Y2U0NzAwMThmYmZkNjY4ZmQ5ZGQ5N2NiZjY0ZTJjOTE1ODRkMDFkYTYzYmUzY2M5ZmRmZjhhZGZlZmMzYWM3MjhlMWUzMzViOWNkYzg3ZjA2OTE3MmUzMjNkMDk0YjQ3ZmExZTY1MmFmZTRkNmFhMTQ3YTlmNDZmZGEzM2NhY2I2NWYzYWExMjIzNDc0NmI5MDA3YThjODVmZTk4MmFmZWQ3ODE1MjIxZTQzZGJhNTUzZDhmZThhMDIyY2RhYzFiOTllZWVlYTM1OWU1YTlkMmU3MmUzODJkZmZhNmQxOWYzNTlmNGYyN2RjMzQzNGNkMjdkYWVlZGE4ZTM4NTk0ODczMzk4Njc4MDY1ZmJiMjM2NjVhYmE5MzA5ZDk0NjEzNWRhMGU0YTRhZmRhZGZmMTRkYjE4ZTg1ZTcxZGQ5M2MzYmY5ZmFmN2YyNWM4MTk0YzQyNjliMWVlM2Q5OTM0MDk3YWI5OTAwMjVkOWMzYWFmNjNkNTEwOWY1MjMzNWRkMzk1OWQzOGFlNDg1MDUwZTRiYmI2MjM1NTc0ZmMwMTAyYmU4ZjdhMzA2ZDZlOGRlNmJhNmJlY2Y4MGYzNzQxNWI1N2Y5ODk4YTU4MjRlNzc0MTQxOTc0MjJiZTNkMzZhNjA4MCI6IjA0MjNkYzc2YTg3OTExMDdkMTRlMTNmNTI2NWIzNDNmMjRjYzBmMTkiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2hleF9tdWx0aToiU0hBMSI6IjBmODY1ZjQ2YThmM2FlZDJkYTE4NDgyYWEwOWE4ZjM5MGRjOWRhMDdkNTFkMWJkMTBmZTBiZjVmMzkyOGQ1OTI3ZDA4NzMzZDMyMDc1NTM1YTZkMWM4YWMxYjJkYzZiYTBmMmY2MzNkYzFhZjY4ZTNmMGZhM2Q4NWU2YzYwY2I3YjU2YzIzOWRjMTUxOWEwMDdlYTUzNmEwN2I1MThlY2NhMDJhNmMzMWI0NmI3NmYwMjE2MjBlZjNmYzY5NzY4MDQwMTgzODBlNWFiOWM1NThlYmZjNWNiMWM5ZWQyZDk3NDcyMmJmOGFiNjM5OGYxZjJiODJmYTUwODNmODVjMTZhNTc2N2EzYTA3MjcxZDY3NzQzZjAwODUwY2U4ZWM0MjhjN2YyMmYxY2YwMWY5OTg5NWMwYzg0NDg0NWIwNmEwNmNlY2IwYzZjZjgzZWI1NWExZDRlYmM0NGMyYzEzZjZmN2FhNWUwZTA4YWJmZDg0ZTc4NjQyNzkwNTdhYmM0NzFlZTRhNDVkYmJiNTc3NGFmYTI0ZTUxNzkxYTBlYWRhMTEwOTNiODg2ODFmZTMwYmFhM2IyZTk0MTEzZGM2MzM0MmM1MWNhNWQxYTYwOTZkMDg5N2I2MjZlNDJjYjkxNzYxMDU4MDA4Zjc0NmYzNTQ2NTQ2NTU0MGFkOGM2YjhiNjBmN2UxNDYxYjNjZTllNjUyOTYyNTk4NGNiOGM3ZDQ2ZjA3ZjczNWJlMDY3NTg4YTAxMTdmMjNlMzRmZjU3ODAwZTJiYmU5YTE2MDVmZGU2MDg3ZmIxNWQyMmM1ZDNhYzQ3NTY2YjhjNDQ4YjBjZWU0MDM3M2U1YmE2ZWFhMjFhYmVlNzEzNjZhZmJiMjdkYmJkMzAwNDc3ZDcwYzM3MWU3Yjg5NjM4MTJmNWVkNGZiNzg0ZmIyZjNiZDFkM2FmZTg4M2NkZDQ3ZWYzMmJlYWVhIjoiNjY5MmE3MWQ3M2UwMGYyN2RmOTc2YmM1NmRmNDk3MDY1MGQ5MGU0NSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2hleF9tdWx0aToiU0hBMSI6IjgyMzYxNTM3ODFiZDJmMWI4MWZmZTBkZWYxYmViNDZmNWE3MDE5MTE0MjkyNjY1MTUwM2YxYjNiYjEwMTZhY2RiOWU3ZjdhY2NlZDhkZDE2ODIyNmYxMThmZjY2NGEwMWE4ODAwMTE2ZmQwMjM1ODdiZmJhNTJhMjU1ODM5MzQ3NmY1ZmM2OWNlOWM2NTAwMWYyM2U3MDQ3NmQyY2M4MWM5N2VhMTljYWViMTk0ZTIyNDMzOWJjYjIzZjc3YTgzZmVhYzUwOTZmOWIzMDkwYzUxYTZlZTZkMjA0YjczNWFhNzFkN2U5OTZkMzgwYjgwODIyZTRkZmQ0MzY4M2FmOWM3NDQyNDk4Y2FjYmVhNjQ4NDJkZmRhMjM4Y2IwOTk5MjdjNmVmYWUwN2ZkZjdiMjNhNGU0NDU2ZTAxNTJiMjQ4NTNmZTBkNWRlNDE3OTk3NGIyYjlkNGExY2RiZWZjYmMwMWQ4ZDMxMWI1ZGRhMDU5MTM2MTc2ZWE2OThhYjgyYWNmMjBkZDQ5MGJlNDcxMzBiMTIzNWNiNDhmOGE2NzEwNDczY2ZjOTIzZTIyMmQ5NGI1ODJmOWFlMzZkNGNhMmEzMmQxNDFiOGU4Y2MzNjYzODg0NWZiYzQ5OWJjZTE3Njk4YzNmZWNhZTI1NzJkYmJkNDcwNTUyNDMwZDdlZjMwYzIzOGMyMTI0NDc4ZjFmNzgwNDgzODM5YjRmYjczZDYzYTk0NjAyMDY4MjRhNWI2YjY1MzE1YjIxZTNjMmYyNGM5N2VlN2MwZTc4ZmFhZDNkZjU0OWM3Y2E4ZWYyNDE4NzZkOWFhZmU5YTMwOWY2ZGEzNTJiZWMyY2FhYTkyZWU4ZGNhMzkyODk5YmE2N2RmZWQ5MGFlZjMzZDQxZmMyNDk0Yjc2NWNiM2UyNDIyYzhlNTk1ZGFiYmZhY2EyMTc3NTc0NTNmYjMyMmExMzIwM2Y0MjVmNjA3M2E5OTAzZTJkYzU4MThlZTFkYTczN2FmYzM0NWYwMDU3NzQ0ZTNhNTZlMTY4MWM5NDllYjEyMjczYTNiZmMyMDY5OWU0MjNiOTZlNDRiZDFmZjYyZTUwYTg0OGE4OTA4MDliZmUxNjExYzY3ODdkM2Q3NDExMDMzMDhmODQ5YTc5MGY5YzAxNTA5ODI4NmRiYWNmYzM0YzE3MThiMmMyYjc3ZTMyMTk0YTc1ZGRhMzc5NTRhMzIwZmE2ODc2NDAyNzg1Mjg1NWE3ZTViNTI3NGViMWUyY2JjZDI3MTYxZDk4YjU5YWQyNDU4MjIwMTVmNDhhZjgyYTQ1YzBlZDU5YmU5NGY5YWYwM2Q5NzM2MDQ4NTcwZDZlM2VmNjNiMTc3MGJjOThkZmI3N2RlODRiMWJiMTcwOGQ4NzJiNjI1ZDlhYjliMDZjMThlNWRiYmYzNDM5OTM5MWYwZjhhYTI2ZWMwZGFjN2ZmNGNiOGVjOTdiNTJiY2I5NDJmYTZkYjIzODVkY2QxYjNiOWQ1NjdhYWViNDI1ZDU2N2IwZWJlMjY3MjM1NjUxYTFlZDliZjc4ZmQ5M2QzYzFkZDA3N2ZlMzQwYmIwNGIwMDUyOWM1OGY0NTEyNGI3MTdjMTY4ZDA3ZTk4MjZlMzMzNzY5ODhiYzVjZjYyODQ1YzIwMDk5ODBhNGRmYTY5ZmJjN2U1YTBiMWJiMjBhNTk1OGNhOTY3YWVjNjhlYjMxZGQ4ZmNjY2E5YWZjZDMwYTI2YmFiMjYyNzlmMWJmNjcyNGZmIjoiMTE4NjNiNDgzODA5ZWY4ODQxM2NhOWIwMDg0YWM0YTUzOTA2NDBhZiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjI0IjoiIjoiZDE0YTAyOGMyYTNhMmJjOTQ3NjEwMmJiMjg4MjM0YzQxNWEyYjAxZjgyOGVhNjJhYzViM2U0MmYiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXhfbXVsdGk6IlNIQTIyNCI6ImZmIjoiZTMzZjlkNzVlNmFlMTM2OWRiYWJmODFiOTZiNDU5MWFlNDZiYmEzMGI1OTFhNmI2YzYyNTQyYjUiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXhfbXVsdGk6IlNIQTIyNCI6Ijk4NGMiOiIyZmE5ZGY5MTU3ZDllMDI3Y2ZiYzRjNmE5ZGYzMmUxYWRjMGNiZTIzMjhlYzJhNjNjNWFlOTM0ZSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjI0IjoiNTBlZmQwIjoiYjVhOTgyMDQxM2MyYmY4MjExZmJiZjVkZjEzMzcwNDNiMzJmYTRlYWZhZjYxYTBjOGU5Y2NlZGUiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXhfbXVsdGk6IlNIQTIyNCI6ImU1ZTA5OTI0IjoiZmQxOWU3NDY5MGQyOTE0NjdjZTU5ZjA3N2RmMzExNjM4ZjFjM2E0NmU1MTBkMGU0OWE2NzA2MmQiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXhfbXVsdGk6IlNIQTIyNCI6IjIxZWJlY2I5MTQiOiI3OGY0YTcxYzIxYzY5NDQ5OWNlMWM3ODY2NjExYjE0YWNlNzBkOTA1MDEyYzM1NjMyM2M3YzcxMyIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjI0IjoiZmM0ODg5NDdjMWE3YTU4OTcyNmIxNTQzNmI0ZjNkOTU1NjI2MmY5OGZjNjQyMmZjNWNkZjIwZjBmYWQ3ZmU0MjdhMzQ5MWM4NmQxMDFmZmU2Yjc1MTRmMDYyNjhmNjViMmQyNjliMGY2OWFkOWE5Nzg0N2VmZjFjMTZhMjQzODc3NWViN2JlNjg0N2NjZjExY2I4YjJlOGRjZDY2NDBiMDk1YjQ5YzA2OTNmZTNjZjRhNjZlMmQ5YjdhZDY4YmZmMTRmM2FkNjlhYmY0OWQwYWJhMzZjYmUwNTM1MjAyZGViNjU5OWE0NzIyNWVmMDViZWIzNTEzMzVjZDdiYzBmNDgwZDY5MTE5OGM3ZTcxMzA1ZmZkNTNiMzlkMzMyNDJiYjc5Y2ZkOThiZmQ2OWUxMzdiNWQxOGIyYjg5YWM5YWNlMDFjOGRiZGNmMjUzM2NjZTM2ODJlY2M1MjExOGRlMGMxMDYyZWMyMTI2YzJlNjU3ZDZlYTNkOWUyMzk4ZTcwNWQ0YjBiMWYxY2VlY2IyNjZkZmZjNGYzMWJmNDI3NDRmYjFlOTM4ZGMyMmE4ODk5MTllZTFlNzNmNDYzZjc4NzFmZWQ3MjA1MTllMzIxODYyNjRiN2VmMmEwZTVkOWExOGU2Yzk1YzA3ODE4OTRmNzc5NjdmMDQ4OTUxZGVjM2I0ZDg5MmEzODcxMGIxZTM0MzZkM2MyOTA4OGViOGIzZGExNzg5YzI1ZGIzZDNiYzZjMjYwODEyMDZlNzE1NWQyMTBhODliODBjYTZlYTg3N2M0MWZmOTk0N2MwZjI1NjI1ZGNiMTE4Mjk0YTE2MzUwMWY2MjM5YzMyNjY2MWE5NThmZDEyZGE0Y2QxNWE4OTlmOGI4OGNjNzIzNTg5MDU2ZWFlYzVhYTA0YTRjZjVkYmI2ZjQ4MGY5NjYwNDIzY2NmMzhjNDg2ZTIxMDcwN2UwZmIyNWUxZjEyNmNlYjI2MTZmNjNlMTQ3YTY0N2RhYjBhZjllYmU4OWQ2NTQ1OGJmNjM2MTU0YTQ2ZTRjYWI5NWY1ZWU2MmRhMmM3OTc0Y2QxNGI5MGQzZTRmOTlmODE3MzNlODViM2MxZDVkYTJiNTA4ZDliOTBmNWVlZDdlZmYwZDljNzY0OWRlNjJiZWUwMDM3NTQ1NGZlZTRhMzk1NzZhNWJiZmRhZTQyOGU3ZjgwOTdiZGY3Nzk3ZjE2NzY4NmNiNjg0MDdlNDkwNzllNDYxMWZmMzQwMmI2Mzg0YmE3YjdlNTIyYmQyYmIxMWNlOGZkMDJlYTRjMTYwNGQxNjNhYzRmNmRkZTUwYjhiMWY1OTNmN2VkYWFkZWFjMDg2OGVkOTdkZjY5MDIwMDY4MGMyNWYwZjVkODU0MzFhNTI5ZTRmMzM5MDg5ZGNkZWRhMTA1ZTRlZTUxZGVhZDcwNGNkZjVhNjA1YzU1ZmIwNTVjOWIwZTg2YjhiYTFiNTY0YzBkZWEzZWI3OTBhNTk1Y2IxMDNjYjI5MjI2OGIwN2M1ZTU5MzcxZTFhN2VmNTk3Y2Q0YjIyOTc3YTgyMDY5NGM5ZjlhZWI1NWQ5ZGUzZWY2MmI3NWQ2ZTY1NmUzMzM2Njk4ZDk2MGEzNzg3YmY4Y2Y1YjkyNmE3ZmFlZWY1MmFlMTI4YmNiNWRjOWU2NmQ5NGIwMTZjN2I4ZTAzNDg3OTE3MWEyZDkxYzM4MWY1N2U2YTgxNWI2M2I1ZWU2YTZkMmZmNDM1YjQ5ZjE0Yzk2Mzk2Njk2MDE5NDQzMGQ3OGY4Zjg3NjI3YTY3NzU3ZmIzNTMyYjI4OTU1MDg5NGRhNmRjZTQ4MTdhNGUwN2Y0ZDU2ODc3YTExMDJmZmNjOGJlZmE1YzlmOGZjYTZhNDU3NGQ5M2ZmNzAzNzZjODg2MWUwZjgxMDhjZjkwN2ZjZTc3ZWNiNDk3MjhmODZmMDM0ZjgwMjI0Yjk2OTU2ODJlMDgyNDQ2MmY3NmNkYjFmZDFhZjE1MTMzN2IwZDg1NDE5MDQ3YTdhYTI4NDc5MTcxOGE0ODYwY2Q1ODZmNzgyNGI5NWJjODM3YjZmZDRmOWJlNWFhZGU2ODQ1NmUyMDM1NmFhNGQ5NDNkYWMzNmJmOGI2N2I5ZThmOWQwMWEwMGZjZGE3NGI3OThiYWZhNzQ2YzY2MWIwMTBmNzViNTk5MDRiMjlkMGM4MDQxNTA0ODExYzQwNjVmODJjZjJlYWQ1OGQyZjU5NWNiZDhiYzNlNzA0M2Y0ZDk0NTc3YjM3M2I3Y2ZlMTZhMzZmZTU2NGY1MDVjMDNiNzBjZmViNWU1ZjQxMWM3OTQ4MTMzOGFhNjdlODZiM2Y1YTJlNzdjMjFlNDU0YzMzM2FlM2RhOTQzYWI3MjNhYjVmNGM5NDAzOTUzMTk1MzRhNTU3NWY2NGFjYmEwZDBlY2M0M2Y2MDIyMWVkM2JhZGY3Mjg5YzliM2E3YjkwM2EyZDZjOTRlMTVmYTRjMzEwZGM0ZmE3ZmFhMGMyNGY0MDUxNjBhMTAwMmRiZWYyMGU0MTA1ZDQ4MWRiOTgyZjcyNDNmNzk0MDBhNmU0Y2Q5NzUzYzRiOTczMmE0NzU3NWY1MDRiMjBjMzI4ZmU5YWRkN2Y0MzJhNGYwNzU4MjlkYTA3YjUzYjY5NTAzN2RjNTE3MzdkM2NkNzMxOTM0ZGYzMzNjZDFhNTNmY2Y2NWFhMzFiYWE0NTBjYTUwMWE2ZmFlMjZlMzIyMzQ3ZTYxOGM1YTQ0NGQ5MmU5ZmVjNWE4MjYxYWUzOGI5OGZlZTViZTc3YzAyY2VjMDlkZGNjZDViM2RlOTIwMzYiOiIxMzAyMTQ5ZDFlMTk3YzQxODEzYjA1NGM5NDIzMjlkNDIwZTM2NjUzMGY1NTE3YjQ3MGU5NjRmZSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjU2IjoiIjoiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjU2IjoiYmQiOiI2ODMyNTcyMGFhYmQ3YzgyZjMwZjU1NGIzMTNkMDU3MGM5NWFjY2JiN2RjNGI1YWFlMTEyMDRjMDhmZmU3MzJiIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4X211bHRpOiJTSEEyNTYiOiI1ZmQ0IjoiN2M0ZmJmNDg0NDk4ZDIxYjQ4N2I5ZDYxZGU4OTE0YjJlYWRhZjI2OTg3MTI5MzZkNDdjM2FkYTI1NThmNjc4OCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjU2IjoiYjBiZDY5IjoiNDA5NjgwNDIyMTA5M2RkY2NmYmY0NjgzMTQ5MGVhNjNlOWU5OTQxNDg1OGY4ZDc1ZmY3ZjY0MmM3Y2E2MTgwMyIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjU2IjoiYzk4YzhlNTUiOiI3YWJjMjJjMGFlNWFmMjZjZTkzZGJiOTQ0MzNhMGUwYjJlMTE5ZDAxNGY4ZTdmNjViZDU2YzYxY2NjY2Q5NTA0IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4X211bHRpOiJTSEEyNTYiOiI4MWE3MjNkOTY2IjoiNzUxNmZiOGJiMTEzNTBkZjJiZjM4NmJjM2MzM2JkMGY1MmNiNGM2N2M2ZTQ3NDVlMDQ4OGU2MmMyYWVhMjYwNSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjU2IjoiODM5MGNmMGJlMDc2NjFjYzc2NjlhYWM1NGNlMDlhMzc3MzNhNjI5ZDQ1ZjVkOTgzZWYyMDFmOWIyZDEzODAwZTU1NWQ5YjEwOTdmZWMzYjc4M2Q3YTUwZGNiNWUyYjY0NGI5NmExZTk0NjNmMTc3Y2YzNDkwNmJmMzg4ZjM2NmRiNWMyZGVlZTA0YTMwZTI4M2Y3NjRhOTdjM2IzNzdhMDM0ZmVmYzIyYzI1OTIxNGZhYTk5YmFiYWZmMTYwYWIwYWFhN2UyY2NiMGNlMDljNmIzMmZlMDhjYmM0NzQ2OTQzNzVhYmE3MDNmYWRiZmEzMWNmNjg1YjMwYTExYzU3ZjNjZjRlZGQzMjFlNTdkM2FlNmViYjExMzNjODI2MGU3NWI5MjI0ZmE0N2EyYmIyMDUyNDlhZGQyZTJlNjJmODE3NDkxNDgyYWUxNTIzMjJiZTA5MDAzNTVjZGNjOGQ0MmE5OGY4MmU5NjFhMGRjNmY1MzdiN2I0MTBlZmYxMDVmNTk2NzNiZmI3ODdiZjA0MmFhMDcxZjdhZjY4ZDk0NGQyNzM3MWM2NDE2MGZlOTM4Mjc3MjM3MjUxNmMyMzBjMWY0NWMwZDZiNmNjYTdmMjc0YjM5NGRhOTQwMmQzZWFmZGY3MzM5OTRlYzU4YWIyMmQ3MTgyOWE5ODM5OTU3NGQ0YjU5MDhhNDQ3YTVhNjgxY2IwZGQ1MGEzMTE0NTMxMWQ5MmMyMmExNmRlMWVhZDY2YTU0OTlmMmRjZWI0Y2FlNjk0NzcyY2U5MDc2MmVmODMzNmFmZWM2NTNhYTliMWExYzQ4MjBiMjIxMTM2ZGZjZTgwZGNlMmJhOTIwZDg4YTUzMGM5NDEwZDBhNGUwMzU4YTNhMTEwNTJlNThkZDczYjBiMTc5ZWY4ZjU2ZmUzYjVhMmQxMTdhNzNhMGMzOGExMzkyYjY5MzhlOTc4MmUwZDg2NDU2ZWU0ODg0ZTNjMzlkNGQ3NTgxM2YxMzYzM2JjNzliYWEwN2MwZDJkNTU1YWZiZjIwN2Y1MmI3ZGNhMTI2ZDAxNWFhMmI5ODczYjNlYjA2NWU5MGI5YjA2NWE1MzczZmUxZmIxYjIwZDU5NDMyN2QxOWZiYTU2Y2I4MWU3YjY2OTY2MDVmZmE1NmViYTNjMjdhNDM4Njk3Y2MyMWIyMDFmZDdlMDlmMThkZWVhMWIzZWEyZjBkMWVkYzAyZGYwZTIwMzk2YTE0NTQxMmNkNmIxM2MzMmQyZTYwNTY0MWM5NDhiNzE0YWVjMzBjMDY0OWRjNDQxNDM1MTFmMzVhYjBmZDVkZDY0YzM0ZDA2ZmU4NmYzODM2ZGZlOWVkZWI3ZjA4Y2ZjM2JkNDA5NTY4MjYzNTYyNDIxOTFmOTlmNTM0NzNmMzJiMGNjMGNmOTMyMWQ2YzkyYTExMmU4ZGI5MGI4NmVlOWU4N2NjMzJkMDM0M2RiMDFlMzJjZTllYjc4MmNiMjRlZmJiYmViNDQwZmU5MjllOGYyYmY4ZGZiMTU1MGEzYTJlNzQyZThiNDU1YTNlNTczMGU5ZTZhN2E5ODI0ZDE3YWNjMGY3MmE3ZjY3ZWFlMGYwOTcwZjhiZGU0NmRjZGVmYWVkMzA0N2NmODA3ZTdmMDBhNDJlNWZkMTFkNDBmNWU5ODUzM2Q3NTc0NDI1YjdkMmJjM2IzODQ1YzQ0MzAwOGI1ODk4MGU3NjhlNDY0ZTE3Y2M2ZjZiMzkzOWVlZTUyZjcxMzk2M2QwN2Q4YzRhYmYwMjQ0OGVmMGI4ODljOTY3MWUyZjhhNDM2ZGRlZWZmY2NhNzE3NmU5YmY5ZDEwMDVlY2QzNzdmMmZhNjdjMjNlZDFmMTM3ZTYwYmY0NjAxOGE4YmQ2MTNkMDM4ZTg4MzcwNGZjMjZlNzk4OTY5ZGYzNWVjN2JiYzZhNGZlNDZkODkxMGJkODJmYTNjZGVkMjY1ZDBhM2I2ZDM5OWU0MjUxZTRkODIzM2RhYTIxYjU4MTJmZGVkNjUzNjE5OGZmMTNhYTVhMWNkNDZhNWI5YTE3YTRkZGMxZDlmODU1NDRkMWQxY2MxNmYzZGY4NTgwMzhjOGUwNzFhMTFhN2UxNTdhODVhNmE4ZGM0N2U4OGQ3NWU3MDA5YThiMjZmZGI3M2YzM2EyYTcwZjFlMGMyNTlmOGY5NTMzYjliOGY5YWY5Mjg4YjcyNzRmMjFiYWVlYzc4ZDM5NmY4YmFjZGNjMjI0NzEyMDdkOWI0ZWZjY2QzZmVkYzVjNWEyMjE0ZmY1ZTUxYzU1M2YzNWUyMWFlNjk2ZmU1MWU4ZGY3MzNhOGUwNmY1MGY0MTllNTk5ZTlmOWU0YjM3Y2U2NDNmYzgxMGZhYWE0Nzk4OTc3MTUwOWQ2OWExMTBhYzkxNjI2MTQyNzAyNjM2OWEyMTI2M2FjNDQ2MGZiNGY3MDhmOGFlMjg1OTk4NTZkYjdjYjZhNDNhYzhlMDNkNjRhOTYwOTgwN2U3NmM1ZjMxMmI5ZDE4NjNiZmEzMDRlODk1MzY0NzY0OGI0ZjRhYjBlZDk5NWUiOiI0MTA5Y2RiZWMzMjQwYWQ3NGNjNmMzN2YzOTMwMGY3MGZlZGUxNmUyMWVmYzc3Zjc4NjU5OTg3MTRhYWQwYjVlIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4X211bHRpOiJTSEEzODQiOiIiOiIzOGIwNjBhNzUxYWM5NjM4NGNkOTMyN2ViMWIxZTM2YTIxZmRiNzExMTRiZTA3NDM0YzBjYzdiZjYzZjZlMWRhMjc0ZWRlYmZlNzZmNjVmYmQ1MWFkMmYxNDg5OGI5NWIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTM4NCI6ImFiIjoiZmI5NGQ1YmUxMTg4NjVmNmZjYmM5NzhiODI1ZGE4MmNmZjE4OGZhZWMyZjY2Y2I4NGIyNTM3ZDc0YjQ5Mzg0Njk4NTRiMGNhODllNjZmYTJlMTgyODM0NzM2NjI5ZjNkIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4X211bHRpOiJTSEEzODQiOiI3YzI3IjoiM2Q4MGJlNDY3ZGY4NmQ2M2FiYjllYTFkM2Y5Y2IzOWNkMTk4OTBlN2YyYzUzYTYyMDBiZWRjNTAwNjg0MmIzNWU4MjBkYzRlMGNhOTBjYTliOTdhYjIzZWYwNzA4MGZjIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4X211bHRpOiJTSEEzODQiOiIzMWY1Y2EiOiI3OGQ1NGI5NDM0MjFmZGY3YmE5MGE3ZmI5NjM3YzIwNzNhYTQ4MDQ1NGJkODQxZDM5ZmY3MmY0NTExZmMyMWZiNjc3OTdiNjUyYzBjODIzMjI5MzQyODczZDNiZWY5NTUiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTM4NCI6IjdiZGVlM2Y4IjoiOGJkYWZiYTA3NzdlZTQ0NmMzNDMxYzJkN2IxZmJiNjMxMDg5ZjcxZDJjYTQxN2FiYzFkMjMwZTFhYmE2NGVjMmYxYzE4NzQ3NGE2ZjQwNzdkMzcyYzE0YWQ0MDdmOTlhIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4X211bHRpOiJTSEEzODQiOiI4ZjA1NjA0OTE1IjoiNTA0ZTQxNGJmMWRiMTA2MGYxNGM4Yzc5OWUyNWIxZTBjNGRjZjE1MDRlYmJkMTI5OTk4ZjBhZTI4M2U2ZGU4NmUwZDNjN2U4NzljNzNlYzNiMTgzNmMzZWU4OWMyNjQ5IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4X211bHRpOiJTSEEzODQiOiI2NjVkYTZlZGEyMTQiOiI0YzAyMmYxMTIwMTA5MDg4NDgzMTJmOGI4ZjEwNzI2MjVmZDVjMTA1Mzk5ZDU2MmVhMWQ1NjEzMDYxOWE3ZWFjOGRmYzM3NDhmZDA1ZWUzN2U0YjY5MGJlOWRhYTk5ODAiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTM4NCI6IjdmNDZjZTUwNmQ1OTNjNGVkNTNjODJlZGViNjAyMDM3ZTA0ODViZWZiZWUwM2Y3ZjkzMGZlNTMyZDE4ZmYyYTNmNWZkNjA3NjY3MmM4MTQ1YTFiZjQwZGQ5NGY3YWJhYjQ3YzlhZTcxYzIzNDIxM2QyYWQxMDY5YzJkYWMwYjBiYTE1MjU3YWU2NzJiODI0NTk2MGFlNTViZDUwMzE1YzAwOTdkYWEzYTMxODc0NTc4OGQ3MGQxNDcwNjkxMDgwOWNhNmUzOTYyMzdmZTQ5MzRmYTQ2ZjljZTc4MmQ2NjYwNmQ4YmQ2YjJkMjgzYjExNjA1MTNjZTljMjRlOWYwODRiOTc4OTFmOTlkNGNkZWZjMTY5YTAyOWU0MzFjYTc3MmJhMWJiYTQyNmZjZTZmMDFkOGUyODYwMTRlNWFjYzY2Yjc5OWU0ZGI2MmJkNDc4MzMyMmY4YTMyZmY3OGUwZGUzOTU3ZGY1MGNlMTA4NzFmNGUwNjgwZGY0ZThjYTM5NjBhZjliYzZmNGVmYThlYjM5NjJkMThmNDc0ZWIxNzhjMzI2NWNjNDZiOGYyZmY1YWIxYTc0NDlmZWEyOTdkZmNmYWJmYTAxZjI4YWJiYjcyODliYjM1NGI2OTFiNTY2NGVjNmQwOThhZjUxYmUxOTk0N2VjNWJhN2ViZDY2MzgwZDExNDE5NTNiYTc4ZDRhYTU0MDE2NzlmYTdiMGE0NGRiMTk4MWY4NjRkMzUzNWM0NWFmZTRjNjExODNkNWIwYWQ1MWZhZTcxY2EwN2UzNDI0MDI4Mzk1OWY3NTMwYTMyYzcwZDk1YTA4OGU1MDFjMjMwMDU5ZjMzM2IwNjcwODI1MDA5ZTdlMjIxMDNlZjIyOTM1ODMwZGYxZmFjOGVmODc3ZjVmMzQyNmRkNTRmN2QxMTI4ZGQ4NzFhZDlhN2QwODhmOTRjMGU4NzEyMDEzMjk1YjhkNjlhZTc2MjNiODgwOTc4YzJkM2M2YWQyNmRjNDc4ZjhkYzQ3ZjVjMGFkY2M2MTg2NjVkYzNkYzIwNWE5MDcxYjJmMjE5MWUxNmNhYzViZDg5YmI1OTE0OGZjNzE5NjMzNzUyMzAzYWEwOGU1MThkYmMzODlmMGE1NDgyY2FhYTRjNTA3Yjg3MjlhNmYzZWRkMDYxZWZiMzkwMjZjZWNjNjM5OWY1MTk3MWNmNzM4MWQ2MDVlMTQ0YTU5MjhjOGMyZDFhZDc0NjdiMDVkYTJmMjAyZjRmMzIzNGUxYWZmMTlhMDE5OGEyODY4NTcyMWMzZDJkNTIzMTFjNzIxZTNmZGNiYWYzMDIxNGNkYzNhY2ZmOGM0MzM4ODBlMTA0ZmI2M2YyZGY3Y2U2OWE5Nzg1NzgxOWJhN2FjMDBhYzhlYWUxOTY5NzY0ZmRlOGY2OGNmOGUwOTE2ZDdlMGMxNTExNDdkNDk0NGY5OWY0MmFlNTBmMzBlMWM3OWE0MmQyYjZjNTE4OGQxMzNkM2NiYmY2OTA5NDAyN2IzNTRiMjk1Y2NkMGY3ZGM1YTg3ZDczNjM4YmQ5OGViZmIwMDM4M2NhMGZhNjljYjhkY2IzNWExMjUxMGU1ZTA3YWQ4Nzg5MDQ3ZDBiNjM4NDFhMWJiOTI4NzM3ZThiMGEwYzMzMjU0ZjQ3YWE4YmZiZTMzNDFhMDljMmI3NmRiY2VmYTY3ZTMwZGYzMDBkMzRmN2I4NDY1YzRmODY5ZTUxYjZiY2ZlNmNmNjhiMjM4MzU5YTY0NTAzNmJmN2Y2M2YwMjkyNGUwODdjZTc0NTdlNDgzYjYwMjVhODU5OTAzY2I0ODQ1NzRhYTNiMTJjZjk0NmYzMjEyN2Q1MzdjMzNiZWUzMTQxYjVkYjk2ZDEwYTE0OGM1MGFlMDQ1ZjI4NzIxMDc1NzcxMGQ2ODQ2ZTA0YjIwMmY3OWU4N2RkOWE1NmJjNmRhMTVmODRhNzdhN2Y2MzkzNWUxZGVlMDAzMDljZDI3NmE4ZTcxNzZjYjA0ZGE2YmIwZTkwMDk1MzQ0Mzg3MzJjYjQyZDAwODAwODg1M2QzOGQxOWJlYmE0NmU2MTAwNmUzMGY3ZWZkMWJjN2MyOTA2YjAyNGU0ZmY4OThhMWI1OGM0NDhkNjhiNDNjNmFiNjNmMzRmODViM2FjNmFhNDQ3NTg2N2U1MWI1ODM4NDRjYjIzODI5ZjRiMzBmNGJkZDgxN2Q4OGUyZWYzZTdiNGZjMGE2MjQzOTViMDVlYzVlODY4NjA4MmIyNGQyOWZlZjJiMGQzYzI5ZTAzMWQ1Zjk0ZjUwNGIxZDNkZjkzNjFlYjVmZmJhZGIyNDJlNjZjMzlhODA5NGNmZTYyZjg1ZjYzOWYzZmQ2NWZjOGFlMGM3NGE4ZjRjNmUxZDA3MGI5MTgzYTQzNGM3MjJjYWFhMDIyNWY4YmNkNjg2MTRkNmYwNzM4ZWQ2MmY4NDg0ZWM5NjA3N2QxNTVjMDhlMjZjNDZiZTI2MmE3M2UzNTUxNjk4YmQ3MGQ4ZDU2MTBjZjM3YzRjMzA2ZWVkMDRiYTZhMDQwYTljM2U2ZDdlMTVlOGFjZGExN2Y0NzdjMjQ4NGNmNWM1NmI4MTMzMTM5MjdiZTgzODdiMTAyNGY5OTVlOThmYzg3ZjEwMjkwOTFjMDE0MjRiZGMyYjI5NmMyZWFkYjdkMjViM2U3NjJhMmZkMGMyZGNkMTcyN2RkZjkxZGI5N2M1OTg0MzA1MjY1ZjM2OTVhN2Y1NDcyZjJkNzJjOTRkNjhjMjc5MTRmMTRmODJhYThkZDVmZTRlMjM0OGIwY2E5NjdhM2Y5ODYyNmEwOTE1NTJmNWQwZmZhMmJmMTAzNTBkMjNjOTk2MjU2YzAxZmRlZmZiMmMyYzYxMjUxOTg2OWY4NzdlNDkyOWM2ZTk1ZmYxNTA0MGYxNDg1ZTIyZWQxNDExOTg4MDIzMmZlZjNiNTdiMzg0OGYxNWIxNzY2YTU1NTI4NzlkZjhmMDYiOiJjYmE5ZTNlYjEyYTZmODNkYjExZThhNmZmNDBkMTA0OTg1NGVlMDk0NDE2YmM1MjdmZWE5MzFkODU4NTQyOGE4ZWQ2MjQyY2U4MWY2NzY5YjM2ZTIxMjNhNWMyMzQ4M2UiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTUxMiI6IiI6ImNmODNlMTM1N2VlZmI4YmRmMTU0Mjg1MGQ2NmQ4MDA3ZDYyMGU0MDUwYjU3MTVkYzgzZjRhOTIxZDM2Y2U5Y2U0N2QwZDEzYzVkODVmMmIwZmY4MzE4ZDI4NzdlZWMyZjYzYjkzMWJkNDc0MTdhODFhNTM4MzI3YWY5MjdkYTNlIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4X211bHRpOiJTSEE1MTIiOiI4ZiI6ImU0Y2QyZDE5OTMxYjVhYWQ5YzkyMGY0NWY1NmY2Y2UzNGUzZDM4YzZkMzE5YTZlMTFkMDU4OGFiOGI4Mzg1NzZkNmNlNmQ2OGVlYTdjODMwZGU2NmUyYmQ5NjQ1OGJmYTdhYWZiY2JlYzk4MWQ0ZWQwNDA0OThjM2RkOTVmMjJhIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4X211bHRpOiJTSEE1MTIiOiJlNzI0IjoiN2RiYjUyMDIyMWE3MDI4N2IyM2RiY2Y2MmJmYzFiNzMxMzZkODU4ZTg2MjY2NzMyYTdmZmZhODc1ZWNhYTJjMWI4ZjY3M2I1YzA2NWQzNjBjNTYzYTdiOTUzOTM0OWY1ZjU5YmVmOGMwYzU5M2Y5NTg3ZTNjZDUwYmIyNmEyMzEiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTUxMiI6ImRlNGM5MCI6IjMzY2U5ODI4MTA0NWE1YzRjOWRmMDM2M2Q4MTk2ZjFkN2RmY2Q1ZWU0NmFjODk3NzZmZDhhNDM0NGMxMmYxMjNhNjY3ODhhZjViZDQxY2VmZjE5NDFhYTU2Mzc2NTRiNDA2NGM4OGMxNGUwMDQ2NWFiNzlhMmZjNmM5N2UxMDE0IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4X211bHRpOiJTSEE1MTIiOiJhODAxZTk0YiI6ImRhZGIxYjVhMjdmOWZlY2U4ZDg2YWRiMmE1MTg3OWJlYjE3ODdmZjI4ZjRlOGNlMTYyY2FkN2ZlZTBmOTQyZWZjYWJiZjczOGJjNmY3OTdmYzdjYzc5YTNhNzUwNDhjZDRjODJjYTA3NTdhMzI0Njk1YmZiMTlhNTU3ZTU2ZTJmIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4X211bHRpOiJTSEE1MTIiOiI5NDM5MGQzNTAyIjoiYjYxNzVjNGM0Y2NjZjY5ZTBjZTVmMDMxMjAxMDg4NmVhNmIzNGQ0MzY3M2Y5NDJhZTQyNDgzZjljYmI3ZGE4MTdkZTRlMTFiNWQ1OGUyNWEzZDliZDcyMWEyMmNkZmZlMWM0MDQxMWNjNDVkZjE5MTFmYTU1MDYxMjliNjkyOTciCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTUxMiI6IjQ5Mjk3ZGQ2M2U1ZiI6IjFmY2MxZTZmNjg3MDg1OWQxMTY0OWY1ZTUzMzZhOWNkMTYzMjljMDI5YmFmMDRkNWE2ZWRmMjU3ODg5YTJlOTUyMmI0OTdkZDY1NmJiNDAyZGE0NjEzMDdjNGVlMzgyZTJlODkzODBjOGU2ZTZlNzY5N2YxZTQzOWY2NTBmYTk0IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4X211bHRpOiJTSEE1MTIiOiI5OTBkMWFlNzFhNjJkN2JkYTliZmRhYTE3NjJhNjhkMjk2ZWVlNzJhNGNkOTQ2ZjI4N2E4OThmYmFiYzAwMmVhOTQxZmQ4ZDRkOTkxMDMwYjRkMjdhNjM3Y2NlNTAxYTgzNGJiOTVlYWIxYjc4ODlhM2U3ODRjNzk2OGU2N2NiZjU1MjAwNmIyMDZiNjhmNzZkOTE5MTMyNzUyNGZjYzI1MWFlYjU2YWY0ODNkMTBiNGUwYzZjNWU1OTllZThjMGZlNGZhZWNhODI5Mzg0NGE4NTQ3YzZhOWE5MGQwOTNmMjUyNjg3M2ExOWFkNGE1ZTc3Njc5NGM2OGM3NDJmYjgzNDc5M2QyZGZjYjdmZWE0NmM2M2FmNGI3MGZkMTFjYjZlNDE4MzRlNzJlZTQwZWRiMDY3YjI5MmE3OTQ5OTBjMjg4ZDUwMDdlNzNmMzQ5ZmIzODNhZjZhNzU2YjgzMDFhZDZlNWUwYWE4Y2Q2MTQzOTliYjNhNDUyMzc2YjE1NzVhZmE2YmRhZWFhZmMyODZjYjA2NGJiOTFlZGVmOTdjNjMyYjZjMTExM2QxMDdmYTkzYTA5MDUwOThhMTA1MDQzYzJmMDUzOTdmNzAyNTE0NDM5YTA4YTllNWRkYzE5NjEwMDcyMWQ0NWM4ZmMxN2QyZWQ2NTkzNzZmOGEwMGJkNWNiOWEwODYwZTI2ZDhhMjlkOGQ2YWFmNTJkZTk3ZTkzNDYwMzNkNmRiNTAxYTM1ZGJiYWY5N2MyMGI4MzBjZDJkMThjMjUzMmYzYTU5Y2M0OTdlZTY0YzBlNTdkOGQwNjBlNTA2OWIyOGQ4NmVkZjFhZGNmNTkxNDRiMjIxY2UzZGRhZWYxMzRiMzEyNGZiYzdkZDAwMDI0MGVmZjBmNWY1ZjQxZTgzY2Q3ZjViYjM3YzlhZTIxOTUzZmUzMDJiMGY2ZThiNjhmYTkxYzZhYjk5MjY1YzY0YjJmZDljZDQ5NDJiZTA0MzIxYmI1ZDZkNzE5MzIzNzZjNmYyZjg4ZTAyNDIyYmE2YTVlMmNiNzY1ZGY5M2ZkNWRkMDcyOGM2YWJkYWYwM2JjZTIyZTA2NzhhNTQ0ZTJjMzYzNmY3NDFiNmY0NDQ3ZWU1OGE4ZmM2NTZiNDNlZjgxNzkzMjE3NmFkYmZjMmUwNGIyYzgxMmMyNzNjZDZjYmZhNDA5OGYwYmUwMzZhMzQyMjFmYTAyNjQzZjVlZTJlMGIzODEzNWYyYTE4ZWNkMmYxNmViYzQ1ZjhlYjMxYjhhYjk2N2ExNTY3ZWUwMTY5MDQxODg5MTA4NjFjYTFmYTIwNWM3YWRhYTE5NGIyODY4OTNmZmUyZjRmYmUwMzg0YzJhZWY3MmE0NTIyYWVhZmQzZWJjNzFmOWRiNzFlZWVlZjg2YzQ4Mzk0YTFjODZkNWIzNmMzNTJjYzMzYTBhMmM4MDBiYzk5ZTYyZmQ2NWIzYTJmZDY5ZTBiNTM5OTZlYzEzZDhjZTQ4M2NlOTMxOWVmZDlhODVhY2VmYWJkYjUzNDIyMjZmZWJiODNmZDFkYWY0YjI0MjY1ZjUwYzYxYzZkZTc0MDc3ZWY4OWI2ZmVjZjlmMjlhMWY4NzFhZjFlOWY4OWIyZDM0NWNkYTc0OTliZDQ1YzQyZmE1ZDE5NWExZTFhNmJhODQ4NTE4ODllNzMwZGEzYjJiOTE2ZTk2MTUyYWUwYzkyMTU0YjQ5NzE5ODQxZGI3ZTdjYzcwN2JhOGE1ZDdiMTAxZWI0YWM3YjYyOWJiMzI3ODE3OTEwZmZmNjE1ODBiNTlhYWI3ODE4MmQxYTJlMzM0NzNkMDViMDBiMTcwYjI5ZTMzMTg3MDgyNmNmZTQ1YWYyMDZhYTdkMDI0NmJiZDg1NjZjYTdjZmIyZDNjMTBiZmExZGI3ZGQ0OGRkNzg2MDM2NDY5Y2U3MjgyMDkzZDc4YjVlMWE1YjBmYzgxYTU0YzhlZDRjZWFjMWU1MzA1MzA1ZTc4Mjg0YWMyNzZmNWQ3ODYyNzI3YWZmMjQ2ZTE3YWRkZGU1MGM2NzAwMjhkNTcyY2JmYzBiZTJlNGY4YjJlYjI4ZmE2OGFkN2I0YzZjMmEyMzljNDYwNDQxYmZiNWVhMDQ5ZjIzYjA4NTYzYjRlNDc3MjlhNTllNTk4NmE2MWE2MDkzZGJkNTRmOGMzNmViZTg3ZWRhZTAxZjI1MWNiMDYwYWQxMzY0Y2U2NzdkN2U4ZDVhNGE0Y2E5NjZhNzI0MWNjMzYwYmMyYWNiMjgwZTVmOWU5YzFiMDMyYWQ2YTE4MGEzNWUwYzUxODBiOWQxNmQwMjZjODY1YjI1MjA5OGNjMWQ5OWJhNzM3NWNhMzFjNzcwMmMwZDk0M2Q1ZTNkZDJmNjg2MWZhNTViZDQ2ZDk0YjY3ZWQzZTUyZWNjZDhkZDA2ZDk2OGUwMTg5N2Q2ZGU5N2VkMzA1OGQ5MWRkIjoiOGU0YmM2ZjhiOGM2MGZlNGQ2OGM2MWQ5YjE1OWM4NjkzYzMxNTFjNDY3NDlhZjU4ZGEyMjg0NDJkOTI3ZjIzMzU5YmQ2Y2NkNmMyZWM4ZmEzZjAwYTg2Y2VjYmZhNzI4ZTFhZDYwYjgyMWVkMjJmY2QzMDliYTkxYTQxMzhiYzkiCisKK2dlbmVyaWMgU0hBMSBIYXNoIGZpbGUgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMSI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzEiOiJkMjFjOTY1YjFlNzY4YmQ3YTZhYTY4NjlmNWY4MjE5MDFkMjU1ZjlmIgorCitnZW5lcmljIFNIQTEgSGFzaCBmaWxlICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2ZpbGU6IlNIQTEiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8yIjoiMzUzZjM0MjcxZjJhZWY0OWQyM2E4OTEzZDRhNmJkODJiMmNlY2RjNiIKKworZ2VuZXJpYyBTSEExIEhhc2ggZmlsZSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9maWxlOiJTSEExIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMyI6IjkzNjQwZWQ1OTIwNzYzMjgwOTYyNzBjNzU2ZGIyZmJhOWM0ODZiMzUiCisKK2dlbmVyaWMgU0hBMSBIYXNoIGZpbGUgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMSI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzQiOiJkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5IgorCitnZW5lcmljIFNIQS0yMjQgSGFzaCBmaWxlICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMjI0IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMSI6Ijg2MDZkYTAxODg3MGYwYzE2ODM0YTIxYmMzMzg1NzA0Y2IxNjgzYjlkYmFiMDRjNWRkYjkwYTQ4IgorCitnZW5lcmljIFNIQS0yMjQgSGFzaCBmaWxlICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMjI0IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMiI6IjczM2IyYWI5N2I2ZjYzZjJlMjliOWEyMDg5NzU2ZDgxZTE0YzkzZmU0Y2M5NjE1YzBkNWU4YTAzIgorCitnZW5lcmljIFNIQS0yMjQgSGFzaCBmaWxlICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMjI0IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMyI6ImUxZGY5NTg2NzU4MGUyY2MyMTAwZTk1NjViZjljMmU0MmMyNGZlNTI1MGMxOWVmZTMzZDFjNGZlIgorCitnZW5lcmljIFNIQS0yMjQgSGFzaCBmaWxlICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMjI0IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfNCI6ImQxNGEwMjhjMmEzYTJiYzk0NzYxMDJiYjI4ODIzNGM0MTVhMmIwMWY4MjhlYTYyYWM1YjNlNDJmIgorCitnZW5lcmljIFNIQS0yNTYgSGFzaCBmaWxlICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMjU2IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMSI6Ijk3NWQwYzYyMGQzOTM2ODg2ZjhhMzY2NWU1ODVhM2U4NGFhMDUwMWY0MjI1YmY1MzAyOTcxMDI0MjgyM2UzOTEiCisKK2dlbmVyaWMgU0hBLTI1NiBIYXNoIGZpbGUgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9maWxlOiJTSEEyNTYiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8yIjoiMTFmY2JmMWJhYTM2Y2E0NTc0NWYxMGNjNTQ2N2FlZTg2ZjA2NmY4MGJhMmM0NjgwNmQ4NzZiZjc4MzAyMmFkMiIKKworZ2VuZXJpYyBTSEEtMjU2IEhhc2ggZmlsZSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX21kX2ZpbGU6IlNIQTI1NiI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzMiOiI5YWU0YjM2OWY5ZjRmMDNiODY1MDViNDZhNTQ2OTU0MmUwMGFhZmY3Y2Y3NDE3YTcxYWY2ZDZkMGFiYTNiNzBjIgorCitnZW5lcmljIFNIQS0yNTYgSGFzaCBmaWxlICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMjU2IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfNCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiCisKK2dlbmVyaWMgU0hBLTM4NCBIYXNoIGZpbGUgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9maWxlOiJTSEEzODQiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8xIjoiZTBhM2U2MjU5ZDYzNzgwMDFiNTRlZjgyZjVkZDA4NzAwOWM1ZmFkODZkOGRiMjI2YTlmZTFkMTRlY2JlMzNhNmZjOTE2ZTNhNGIxNmY1ZjI4NjQyNGRlMTVkNWE4ZTBlIgorCitnZW5lcmljIFNIQS0zODQgSGFzaCBmaWxlICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMzg0IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMiI6ImVmZjcyN2FmYzg0OTVjOTJlMmYzNzBmOTdhMzE3ZjkzYzMzNTAzMjRiMDY0NmIwZjBlMjY0NzA4YjNjOTdkM2QzMzJkM2M1MzkwZTFlNDcxMzBmNWM5MmYxZWY0YjljZiIKKworZ2VuZXJpYyBTSEEtMzg0IEhhc2ggZmlsZSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2ZpbGU6IlNIQTM4NCI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzMiOiI2ZmMxMGViZGE5NmExY2NmNjE3NzdjYWM3MmY2MDM0ZjkyNTMzZDQyMDUyYTRiZjlmOWQ5MjljNjcyOTczYzcxZTVhZWIxMjEzMjY4MDQzYzIxNTI3YWMwZjdmMzQ5YzQiCisKK2dlbmVyaWMgU0hBLTM4NCBIYXNoIGZpbGUgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9maWxlOiJTSEEzODQiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV80IjoiMzhiMDYwYTc1MWFjOTYzODRjZDkzMjdlYjFiMWUzNmEyMWZkYjcxMTE0YmUwNzQzNGMwY2M3YmY2M2Y2ZTFkYTI3NGVkZWJmZTc2ZjY1ZmJkNTFhZDJmMTQ4OThiOTViIgorCitnZW5lcmljIFNIQS01MTIgSGFzaCBmaWxlICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfZmlsZToiU0hBNTEyIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMSI6ImQ4MjA3YTJlMWZmMmI0MjRmMmM0MTYzZmUxYjcyM2M5YmQ0MmU0NjQwNjFlYjQxMWU4ZGY3MzBiY2QyNGE3YWIzOTU2YTZmM2ZmMDQ0YTUyZWIyZDI2MmY5ZTRjYTZiNTI0MDkyYjU0NGFiNzhmMTRkNmY5YzRjYzhkZGYzMzVhIgorCitnZW5lcmljIFNIQS01MTIgSGFzaCBmaWxlICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfZmlsZToiU0hBNTEyIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMiI6ImVjYmI3ZjBlZDhhNzAyYjQ5ZjE2YWQzMDg4YmNjMDZlYTkzNDUxOTEyYTcxODdkYjE1ZjY0ZDkzNTE3YjA5NjMwYjAzOTI5M2FlZDQxOGQ0YTAwNjk1Nzc3Yjc1OGIxZjM4MTU0OGMyZmQ3YjkyY2U1ZWQ5OTZiMzJjODczNGU3IgorCitnZW5lcmljIFNIQS01MTIgSGFzaCBmaWxlICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfZmlsZToiU0hBNTEyIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMyI6IjdjY2M5YjJkYTcxZmZkZTk5NjZjM2NlNDRkN2YyMDk0NWZjY2YzM2IxZmFkZTRkYTE1MmIwMjFmMWFmY2M3MjkzMzgyOTQ0YWE2YzA5ZWFjNjdhZjI1ZjIyMDI2NzU4ZTJiZjZiZWQ4NmFlMmE0MzU5MjY3N2VlNTBmOGVlYTQxIgorCitnZW5lcmljIFNIQS01MTIgSGFzaCBmaWxlICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfZmlsZToiU0hBNTEyIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfNCI6ImNmODNlMTM1N2VlZmI4YmRmMTU0Mjg1MGQ2NmQ4MDA3ZDYyMGU0MDUwYjU3MTVkYzgzZjRhOTIxZDM2Y2U5Y2U0N2QwZDEzYzVkODVmMmIwZmY4MzE4ZDI4NzdlZWMyZjYzYjkzMWJkNDc0MTdhODFhNTM4MzI3YWY5MjdkYTNlIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21kLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21kLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYzgzNGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWQuZnVuY3Rpb24KQEAgLTAsMCArMSw0MDEgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfTURfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tZF9wcm9jZXNzKCApCit7CisgICAgY29uc3QgaW50ICptZF90eXBlX3B0cjsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqaW5mbzsKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTUwXTsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJmN0eCApOworCisgICAgLyoKKyAgICAgKiBWZXJ5IG1pbmltYWwgdGVzdGluZyBvZiBtYmVkdGxzX21kX3Byb2Nlc3MsIGp1c3QgbWFrZSBzdXJlIHRoZSB2YXJpb3VzCisgICAgICogeHh4X3Byb2Nlc3Nfd3JhcCgpIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSB2YWxpZC4gKFRlc3RpbmcgdGhhdCB0aGV5CisgICAgICogaW5kZWVkIGRvIHRoZSByaWdodCB0aGluZyB3aG91bGQgcmVxdWlyZSBtZXNzaW5nIHdpdGggdGhlIGludGVybmFsCisgICAgICogc3RhdGUgb2YgdGhlIHVuZGVybHlpbmcgbWJlZHRsc19tZC9zaGEgY29udGV4dC4pCisgICAgICoKKyAgICAgKiBBbHNvIHRlc3RzIHRoYXQgbWJlZHRsc19tZF9saXN0KCkgb25seSByZXR1cm5zIHZhbGlkIE1Ecy4KKyAgICAgKi8KKyAgICBmb3IoIG1kX3R5cGVfcHRyID0gbWJlZHRsc19tZF9saXN0KCk7ICptZF90eXBlX3B0ciAhPSAwOyBtZF90eXBlX3B0cisrICkKKyAgICB7CisgICAgICAgIGluZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCAqbWRfdHlwZV9wdHIgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIGluZm8gIT0gTlVMTCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9zZXR1cCggJmN0eCwgaW5mbywgMCApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfcHJvY2VzcyggJmN0eCwgYnVmICkgPT0gMCApOworICAgICAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHggKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1kX251bGxfYXJncyggKQoreworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IGN0eDsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoICooIG1iZWR0bHNfbWRfbGlzdCgpICkgKTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxXSA9IHsgMCB9OworCisgICAgbWJlZHRsc19tZF9pbml0KCAmY3R4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9nZXRfc2l6ZSggTlVMTCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9nZXRfdHlwZSggTlVMTCApID09IE1CRURUTFNfTURfTk9ORSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2dldF9uYW1lKCBOVUxMICkgPT0gTlVMTCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3N0cmluZyggTlVMTCApID09IE5VTEwgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX3NldHVwKCAmY3R4LCBOVUxMLCAwICkgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9zZXR1cCggTlVMTCwgaW5mbywgMCApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9zdGFydHMoIE5VTEwgKSA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX3N0YXJ0cyggJmN0eCApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF91cGRhdGUoIE5VTEwsIGJ1ZiwgMSApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfdXBkYXRlKCAmY3R4LCBidWYsIDEgKSA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfZmluaXNoKCBOVUxMLCBidWYgKSA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2ZpbmlzaCggJmN0eCwgYnVmICkgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kKCBOVUxMLCBidWYsIDEsIGJ1ZiApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfZmlsZSggTlVMTCwgIiIsIGJ1ZiApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisjZW5kaWYKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCBOVUxMLCBidWYsIDEgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmY3R4LCBidWYsIDEgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoIE5VTEwsIGJ1ZiwgMSApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZjdHgsIGJ1ZiwgMSApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggTlVMTCwgYnVmICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJmN0eCwgYnVmICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2htYWNfcmVzZXQoIE5VTEwgKSA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2htYWNfcmVzZXQoICZjdHggKSA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfaG1hYyggTlVMTCwgYnVmLCAxLCBidWYsIDEsIGJ1ZiApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9wcm9jZXNzKCBOVUxMLCBidWYgKSA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX3Byb2Nlc3MoICZjdHgsIGJ1ZiApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKiBPaywgdGhpcyBpcyBub3QgTlVMTCBhcmcgYnV0IE5VTEwgcmV0dXJuLi4uICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfTk9ORSApID09IE5VTEwgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKCAibm8gc3VjaCBtZCIgKSA9PSBOVUxMICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1kX2luZm8oIGludCBtZF90eXBlLCBjaGFyICptZF9uYW1lLCBpbnQgbWRfc2l6ZSApCit7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgY29uc3QgaW50ICptZF90eXBlX3B0cjsKKyAgICBpbnQgZm91bmQ7CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfdHlwZSApOworICAgIFRFU1RfQVNTRVJUKCBtZF9pbmZvICE9IE5VTEwgKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyA9PSBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcoIG1kX25hbWUgKSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfZ2V0X3R5cGUoIG1kX2luZm8gKSA9PSAobWJlZHRsc19tZF90eXBlX3QpIG1kX3R5cGUgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApID09ICh1bnNpZ25lZCBjaGFyKSBtZF9zaXplICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggbWJlZHRsc19tZF9nZXRfbmFtZSggbWRfaW5mbyApLCBtZF9uYW1lICkgPT0gMCApOworCisgICAgZm91bmQgPSAwOworICAgIGZvciggbWRfdHlwZV9wdHIgPSBtYmVkdGxzX21kX2xpc3QoKTsgKm1kX3R5cGVfcHRyICE9IDA7IG1kX3R5cGVfcHRyKysgKQorICAgICAgICBpZiggKm1kX3R5cGVfcHRyID09IG1kX3R5cGUgKQorICAgICAgICAgICAgZm91bmQgPSAxOworICAgIFRFU1RfQVNTRVJUKCBmb3VuZCA9PSAxICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1kX3RleHQoIGNoYXIgKnRleHRfbWRfbmFtZSwgY2hhciAqdGV4dF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIGNoYXIgbWRfbmFtZVsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gPSBOVUxMOworCisgICAgbWVtc2V0KCBtZF9uYW1lLCAweDAwLCAxMDAgKTsKKyAgICBtZW1zZXQoIHNyY19zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMCApOworCisgICAgc3RybmNweSggKGNoYXIgKikgc3JjX3N0ciwgdGV4dF9zcmNfc3RyaW5nLCBzaXplb2YoIHNyY19zdHIgKSAtIDEgKTsKKyAgICBzdHJuY3B5KCAoY2hhciAqKSBtZF9uYW1lLCB0ZXh0X21kX25hbWUsIHNpemVvZiggbWRfbmFtZSApIC0gMSApOworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcobWRfbmFtZSk7CisgICAgVEVTVF9BU1NFUlQoIG1kX2luZm8gIT0gTlVMTCApOworCisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWQoIG1kX2luZm8sIHNyY19zdHIsIHN0cmxlbiggKGNoYXIgKikgc3JjX3N0ciApLCBvdXRwdXQgKSApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBoYXNoX3N0ciwgaGV4X2hhc2hfc3RyaW5nICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtZF9oZXgoIGNoYXIgKnRleHRfbWRfbmFtZSwgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgY2hhciBtZF9uYW1lWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hfc3RyWzEwMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIGludCBzcmNfbGVuOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvID0gTlVMTDsKKworICAgIG1lbXNldCggbWRfbmFtZSwgMHgwMCwgMTAwICk7CisgICAgbWVtc2V0KCBzcmNfc3RyLCAweDAwLCAxMDAwMCApOworICAgIG1lbXNldCggaGFzaF9zdHIsIDB4MDAsIDEwMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMCApOworCisgICAgc3RybmNweSggKGNoYXIgKikgbWRfbmFtZSwgdGV4dF9tZF9uYW1lLCBzaXplb2YoIG1kX25hbWUgKSAtIDEgKTsKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKCBtZF9uYW1lICk7CisgICAgVEVTVF9BU1NFUlQoIG1kX2luZm8gIT0gTlVMTCApOworCisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kKCBtZF9pbmZvLCBzcmNfc3RyLCBzcmNfbGVuLCBvdXRwdXQgKSApOworCisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1kX3RleHRfbXVsdGkoIGNoYXIgKnRleHRfbWRfbmFtZSwgY2hhciAqdGV4dF9zcmNfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIGNoYXIgbWRfbmFtZVsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgaW50IGhhbGZ3YXksIGxlbjsKKworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvID0gTlVMTDsKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBjdHgsIGN0eF9jb3B5OworCisgICAgbWJlZHRsc19tZF9pbml0KCAmY3R4ICk7CisgICAgbWJlZHRsc19tZF9pbml0KCAmY3R4X2NvcHkgKTsKKworICAgIG1lbXNldCggbWRfbmFtZSwgMHgwMCwgMTAwICk7CisgICAgbWVtc2V0KCBzcmNfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAgKTsKKworICAgIHN0cm5jcHkoIChjaGFyICopIHNyY19zdHIsIHRleHRfc3JjX3N0cmluZywgc2l6ZW9mKHNyY19zdHIpIC0gMSApOworICAgIHN0cm5jcHkoIChjaGFyICopIG1kX25hbWUsIHRleHRfbWRfbmFtZSwgc2l6ZW9mKG1kX25hbWUpIC0gMSApOworICAgIGxlbiA9IHN0cmxlbiggKGNoYXIgKikgc3JjX3N0ciApOworICAgIGhhbGZ3YXkgPSBsZW4gLyAyOworCisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3N0cmluZyhtZF9uYW1lKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfc2V0dXAoICZjdHgsIG1kX2luZm8sIDAgKSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3NldHVwKCAmY3R4X2NvcHksIG1kX2luZm8sIDAgKSApOworCisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfc3RhcnRzKCAmY3R4ICkgKTsKKyAgICBURVNUX0FTU0VSVCAoIGN0eC5tZF9jdHggIT0gTlVMTCApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3VwZGF0ZSggJmN0eCwgc3JjX3N0ciwgaGFsZndheSApICk7CisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfY2xvbmUoICZjdHhfY29weSwgJmN0eCApICk7CisKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF91cGRhdGUoICZjdHgsIHNyY19zdHIgKyBoYWxmd2F5LCBsZW4gLSBoYWxmd2F5ICkgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9maW5pc2goICZjdHgsIG91dHB1dCApICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKTsKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBoYXNoX3N0ciwgaGV4X2hhc2hfc3RyaW5nICkgPT0gMCApOworCisgICAgLyogVGVzdCBjbG9uZSAqLworICAgIG1lbXNldCggaGFzaF9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwICk7CisKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF91cGRhdGUoICZjdHhfY29weSwgc3JjX3N0ciArIGhhbGZ3YXksIGxlbiAtIGhhbGZ3YXkgKSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2ZpbmlzaCggJmN0eF9jb3B5LCBvdXRwdXQgKSApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZyApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHggKTsKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHhfY29weSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtZF9oZXhfbXVsdGkoIGNoYXIgKnRleHRfbWRfbmFtZSwgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2hhc2hfc3RyaW5nICkKK3sKKyAgICBjaGFyIG1kX25hbWVbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgaW50IHNyY19sZW4sIGhhbGZ3YXk7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gPSBOVUxMOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IGN0eCwgY3R4X2NvcHk7CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZjdHggKTsKKyAgICBtYmVkdGxzX21kX2luaXQoICZjdHhfY29weSApOworCisgICAgbWVtc2V0KCBtZF9uYW1lLCAweDAwLCAxMDAgKTsKKyAgICBtZW1zZXQoIHNyY19zdHIsIDB4MDAsIDEwMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3N0ciwgMHgwMCwgMTAwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwICk7CisKKyAgICBzdHJuY3B5KCAoY2hhciAqKSBtZF9uYW1lLCB0ZXh0X21kX25hbWUsIHNpemVvZiggbWRfbmFtZSApIC0gMSApOworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcobWRfbmFtZSk7CisgICAgVEVTVF9BU1NFUlQoIG1kX2luZm8gIT0gTlVMTCApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3NldHVwKCAmY3R4LCBtZF9pbmZvLCAwICkgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9zZXR1cCggJmN0eF9jb3B5LCBtZF9pbmZvLCAwICkgKTsKKworICAgIHNyY19sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKyAgICBoYWxmd2F5ID0gc3JjX2xlbiAvIDI7CisKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9zdGFydHMoICZjdHggKSApOworICAgIFRFU1RfQVNTRVJUICggY3R4Lm1kX2N0eCAhPSBOVUxMICk7CisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfdXBkYXRlKCAmY3R4LCBzcmNfc3RyLCBoYWxmd2F5ICkgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9jbG9uZSggJmN0eF9jb3B5LCAmY3R4ICkgKTsKKworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3VwZGF0ZSggJmN0eCwgc3JjX3N0ciArIGhhbGZ3YXksIHNyY19sZW4gLSBoYWxmd2F5KSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICkgKTsKKyAgICBoZXhpZnkoIGhhc2hfc3RyLCBvdXRwdXQsIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7CisKKyAgICAvKiBUZXN0IGNsb25lICovCisgICAgbWVtc2V0KCBoYXNoX3N0ciwgMHgwMCwgMTAwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwICk7CisKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF91cGRhdGUoICZjdHhfY29weSwgc3JjX3N0ciArIGhhbGZ3YXksIHNyY19sZW4gLSBoYWxmd2F5ICkgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9maW5pc2goICZjdHhfY29weSwgb3V0cHV0ICkgKTsKKyAgICBoZXhpZnkoIGhhc2hfc3RyLCBvdXRwdXQsIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4ICk7CisgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4X2NvcHkgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tZF9obWFjKCBjaGFyICp0ZXh0X21kX25hbWUsIGludCB0cnVuY19zaXplLCBjaGFyICpoZXhfa2V5X3N0cmluZywKKyAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgY2hhciBtZF9uYW1lWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgaW50IGtleV9sZW4sIHNyY19sZW47CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gPSBOVUxMOworCisgICAgbWVtc2V0KCBtZF9uYW1lLCAweDAwLCAxMDAgKTsKKyAgICBtZW1zZXQoIHNyY19zdHIsIDB4MDAsIDEwMDAwICk7CisgICAgbWVtc2V0KCBrZXlfc3RyLCAweDAwLCAxMDAwMCApOworICAgIG1lbXNldCggaGFzaF9zdHIsIDB4MDAsIDEwMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMCApOworCisgICAgc3RybmNweSggKGNoYXIgKikgbWRfbmFtZSwgdGV4dF9tZF9uYW1lLCBzaXplb2YoIG1kX25hbWUgKSAtIDEgKTsKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKCBtZF9uYW1lICk7CisgICAgVEVTVF9BU1NFUlQoIG1kX2luZm8gIT0gTlVMTCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHNyY19sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUICggbWJlZHRsc19tZF9obWFjKCBtZF9pbmZvLCBrZXlfc3RyLCBrZXlfbGVuLCBzcmNfc3RyLCBzcmNfbGVuLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJuY21wKCAoY2hhciAqKSBoYXNoX3N0ciwgaGV4X2hhc2hfc3RyaW5nLCB0cnVuY19zaXplICogMiApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWRfaG1hY19tdWx0aSggY2hhciAqdGV4dF9tZF9uYW1lLCBpbnQgdHJ1bmNfc2l6ZSwgY2hhciAqaGV4X2tleV9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIGNoYXIgbWRfbmFtZVsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hfc3RyWzEwMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIGludCBrZXlfbGVuLCBzcmNfbGVuLCBoYWxmd2F5OworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvID0gTlVMTDsKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBjdHg7CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZjdHggKTsKKworICAgIG1lbXNldCggbWRfbmFtZSwgMHgwMCwgMTAwICk7CisgICAgbWVtc2V0KCBzcmNfc3RyLCAweDAwLCAxMDAwMCApOworICAgIG1lbXNldCgga2V5X3N0ciwgMHgwMCwgMTAwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfc3RyLCAweDAwLCAxMDAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAgKTsKKworICAgIHN0cm5jcHkoIChjaGFyICopIG1kX25hbWUsIHRleHRfbWRfbmFtZSwgc2l6ZW9mKCBtZF9uYW1lICkgLSAxICk7CisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3N0cmluZyggbWRfbmFtZSApOworICAgIFRFU1RfQVNTRVJUKCBtZF9pbmZvICE9IE5VTEwgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9zZXR1cCggJmN0eCwgbWRfaW5mbywgMSApICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworICAgIGhhbGZ3YXkgPSBzcmNfbGVuIC8gMjsKKworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICkgKTsKKyAgICBURVNUX0FTU0VSVCAoIGN0eC5tZF9jdHggIT0gTlVMTCApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmY3R4LCBzcmNfc3RyLCBoYWxmd2F5ICkgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJmN0eCwgc3JjX3N0ciArIGhhbGZ3YXksIHNyY19sZW4gLSBoYWxmd2F5ICkgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICkgKTsKKworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cm5jbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcsIHRydW5jX3NpemUgKiAyICkgPT0gMCApOworCisgICAgLyogVGVzdCBhZ2FpbiwgZm9yIHJlc2V0KCkgKi8KKyAgICBtZW1zZXQoIGhhc2hfc3RyLCAweDAwLCAxMDAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAgKTsKKworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2htYWNfcmVzZXQoICZjdHggKSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmY3R4LCBzcmNfc3RyLCBoYWxmd2F5ICkgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJmN0eCwgc3JjX3N0ciArIGhhbGZ3YXksIHNyY19sZW4gLSBoYWxmd2F5ICkgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICkgKTsKKworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cm5jbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcsIHRydW5jX3NpemUgKiAyICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbWRfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU8gKi8KK3ZvaWQgbWJlZHRsc19tZF9maWxlKCBjaGFyICp0ZXh0X21kX25hbWUsIGNoYXIgKmZpbGVuYW1lLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIGNoYXIgbWRfbmFtZVsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyA9IE5VTEw7CisKKyAgICBtZW1zZXQoIG1kX25hbWUsIDB4MDAsIDEwMCApOworICAgIG1lbXNldCggaGFzaF9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwICk7CisKKyAgICBzdHJuY3B5KCAoY2hhciAqKSBtZF9uYW1lLCB0ZXh0X21kX25hbWUsIHNpemVvZiggbWRfbmFtZSApIC0gMSApOworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcoIG1kX25hbWUgKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9maWxlKCBtZF9pbmZvLCBmaWxlbmFtZSwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBoYXNoX3N0ciwgaGV4X2hhc2hfc3RyaW5nICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZHguZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZHguZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQwM2I0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21keC5kYXRhCkBAIC0wLDAgKzEsOTggQEAKK21iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzEKK21kMl90ZXh0OiIiOiI4MzUwZTVhM2UyNGMxNTNkZjIyNzVjOWY4MDY5Mjc3MyIKKworbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjMgorbWQyX3RleHQ6ImEiOiIzMmVjMDFlYzRhNmRhYzcyYzBhYjk2ZmIzNGMwYjVkMSIKKworbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjMworbWQyX3RleHQ6ImFiYyI6ImRhODUzYjBkM2Y4OGQ5OWIzMDI4M2E2OWU2ZGVkNmJiIgorCittYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICM0CittZDJfdGV4dDoibWVzc2FnZSBkaWdlc3QiOiJhYjRmNDk2YmZiMmE1MzBiMjE5ZmYzMzAzMWZlMDZiMCIKKworbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjNQorbWQyX3RleHQ6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjoiNGU4ZGRmZjM2NTAyOTJhYjVhNDEwOGMzYWE0Nzk0MGIiCisKK21iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzYKK21kMl90ZXh0OiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSI6ImRhMzNkZWYyYTQyZGYxMzk3NTM1Mjg0NmMzMDMzOGNkIgorCittYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICM3CittZDJfdGV4dDoiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOiJkNTk3NmY3OWQ4M2QzYTBkYzk4MDZjM2M2NmYzZWZkOCIKKworbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjMQorbWQ0X3RleHQ6IiI6IjMxZDZjZmUwZDE2YWU5MzFiNzNjNTlkN2UwYzA4OWMwIgorCittYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICMyCittZDRfdGV4dDoiYSI6ImJkZTUyY2IzMWRlMzNlNDYyNDVlMDVmYmRiZDZmYjI0IgorCittYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICMzCittZDRfdGV4dDoiYWJjIjoiYTQ0ODAxN2FhZjIxZDg1MjVmYzEwYWU4N2FhNjcyOWQiCisKK21iZWR0bHNfbWQ0IFRlc3QgdmVjdG9yIFJGQzEzMjAgIzQKK21kNF90ZXh0OiJtZXNzYWdlIGRpZ2VzdCI6ImQ5MTMwYTgxNjQ1NDlmZTgxODg3NDgwNmUxYzcwMTRiIgorCittYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICM1CittZDRfdGV4dDoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOiJkNzllMWMzMDhhYTViYmNkZWVhOGVkNjNkZjQxMmRhOSIKKworbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjNgorbWQ0X3RleHQ6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IjoiMDQzZjg1ODJmMjQxZGIzNTFjZTYyN2UxNTNlN2YwZTQiCisKK21iZWR0bHNfbWQ0IFRlc3QgdmVjdG9yIFJGQzEzMjAgIzcKK21kNF90ZXh0OiIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCI6ImUzM2I0ZGRjOWMzOGYyMTk5YzNlN2IxNjRmY2MwNTM2IgorCittYmVkdGxzX21kNSBUZXN0IHZlY3RvciBSRkMxMzIxICMxCittZDVfdGV4dDoiIjoiZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UiCisKK21iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzIKK21kNV90ZXh0OiJhIjoiMGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjEiCisKK21iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzMKK21kNV90ZXh0OiJhYmMiOiI5MDAxNTA5ODNjZDI0ZmIwZDY5NjNmN2QyOGUxN2Y3MiIKKworbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjNAorbWQ1X3RleHQ6Im1lc3NhZ2UgZGlnZXN0IjoiZjk2YjY5N2Q3Y2I3OTM4ZDUyNWEyZjMxYWFmMTYxZDAiCisKK21iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzUKK21kNV90ZXh0OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI6ImMzZmNkM2Q3NjE5MmU0MDA3ZGZiNDk2Y2NhNjdlMTNiIgorCittYmVkdGxzX21kNSBUZXN0IHZlY3RvciBSRkMxMzIxICM2CittZDVfdGV4dDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiOiJkMTc0YWI5OGQyNzdkOWY1YTU2MTFjMmM5ZjQxOWQ5ZiIKKworbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjNworbWQ1X3RleHQ6IjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIjoiNTdlZGY0YTIyYmUzYzk1NWFjNDlkYTJlMjEwN2I2N2EiCisKK21iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzEKK3JpcGVtZDE2MF90ZXh0OiIiOiI5YzExODVhNWM1ZTlmYzU0NjEyODA4OTc3ZWU4ZjU0OGIyMjU4ZDMxIgorCittYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICMyCityaXBlbWQxNjBfdGV4dDoiYSI6IjBiZGM5ZDJkMjU2YjNlZTlkYWFlMzQ3YmU2ZjRkYzgzNWE0NjdmZmUiCisKK21iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzMKK3JpcGVtZDE2MF90ZXh0OiJhYmMiOiI4ZWIyMDhmN2UwNWQ5ODdhOWIwNDRhOGU5OGM2YjA4N2YxNWEwYmZjIgorCittYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM0CityaXBlbWQxNjBfdGV4dDoibWVzc2FnZSBkaWdlc3QiOiI1ZDA2ODllZjQ5ZDJmYWU1NzJiODgxYjEyM2E4NWZmYTIxNTk1ZjM2IgorCittYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM1CityaXBlbWQxNjBfdGV4dDoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOiJmNzFjMjcxMDljNjkyYzFiNTZiYmRjZWI1YjlkMjg2NWIzNzA4ZGJjIgorCittYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM2CityaXBlbWQxNjBfdGV4dDoiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiOiIxMmEwNTMzODRhOWMwYzg4ZTQwNWEwNmMyN2RjZjQ5YWRhNjJlYjJiIgorCittYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM3CityaXBlbWQxNjBfdGV4dDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiOiJiMGUyMGI2ZTMxMTY2NDAyODZlZDNhODdhNTcxMzA3OWIyMWY1MTg5IgorCittYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM4CityaXBlbWQxNjBfdGV4dDoiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOiI5Yjc1MmU0NTU3M2Q0YjM5ZjRkYmQzMzIzY2FiODJiZjYzMzI2YmZiIgorCitNRDIgU2VsZnRlc3QKK21kMl9zZWxmdGVzdDoKKworTUQ0IFNlbGZ0ZXN0CittZDRfc2VsZnRlc3Q6CisKK01ENSBTZWxmdGVzdAorbWQ1X3NlbGZ0ZXN0OgorCitSSVBFTUQxNjAgU2VsZnRlc3QKK3JpcGVtZDE2MF9zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZHguZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWR4LmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMGVlNDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWR4LmZ1bmN0aW9uCkBAIC0wLDAgKzEsMTE0IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL21kMi5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQ0LmgiCisjaW5jbHVkZSAibWJlZHRscy9tZDUuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3JpcGVtZDE2MC5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19NRDJfQyAqLwordm9pZCBtZDJfdGV4dCggY2hhciAqdGV4dF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMzNdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XTsKKworICAgIG1lbXNldCggc3JjX3N0ciwgMHgwMCwgc2l6ZW9mIHNyY19zdHIgKTsKKyAgICBtZW1zZXQoIGhhc2hfc3RyLCAweDAwLCBzaXplb2YgaGFzaF9zdHIgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgc2l6ZW9mIG91dHB1dCApOworCisgICAgc3RybmNweSggKGNoYXIgKikgc3JjX3N0ciwgdGV4dF9zcmNfc3RyaW5nLCBzaXplb2Yoc3JjX3N0cikgLSAxICk7CisKKyAgICBtYmVkdGxzX21kMiggc3JjX3N0ciwgc3RybGVuKCAoY2hhciAqKSBzcmNfc3RyICksIG91dHB1dCApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgc2l6ZW9mICBvdXRwdXQgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19NRDRfQyAqLwordm9pZCBtZDRfdGV4dCggY2hhciAqdGV4dF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMzNdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XTsKKworICAgIG1lbXNldCggc3JjX3N0ciwgMHgwMCwgc2l6ZW9mIHNyY19zdHIgKTsKKyAgICBtZW1zZXQoIGhhc2hfc3RyLCAweDAwLCBzaXplb2YgaGFzaF9zdHIgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgc2l6ZW9mIG91dHB1dCApOworCisgICAgc3RybmNweSggKGNoYXIgKikgc3JjX3N0ciwgdGV4dF9zcmNfc3RyaW5nLCBzaXplb2Yoc3JjX3N0cikgLSAxICk7CisKKyAgICBtYmVkdGxzX21kNCggc3JjX3N0ciwgc3RybGVuKCAoY2hhciAqKSBzcmNfc3RyICksIG91dHB1dCApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgc2l6ZW9mICBvdXRwdXQgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19NRDVfQyAqLwordm9pZCBtZDVfdGV4dCggY2hhciAqdGV4dF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMzNdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XTsKKworICAgIG1lbXNldCggc3JjX3N0ciwgMHgwMCwgc2l6ZW9mIHNyY19zdHIgKTsKKyAgICBtZW1zZXQoIGhhc2hfc3RyLCAweDAwLCBzaXplb2YgaGFzaF9zdHIgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgc2l6ZW9mIG91dHB1dCApOworCisgICAgc3RybmNweSggKGNoYXIgKikgc3JjX3N0ciwgdGV4dF9zcmNfc3RyaW5nLCBzaXplb2Yoc3JjX3N0cikgLSAxICk7CisKKyAgICBtYmVkdGxzX21kNSggc3JjX3N0ciwgc3RybGVuKCAoY2hhciAqKSBzcmNfc3RyICksIG91dHB1dCApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgc2l6ZW9mICBvdXRwdXQgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQyAqLwordm9pZCByaXBlbWQxNjBfdGV4dCggY2hhciAqdGV4dF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbNDFdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzIwXTsKKworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCBzaXplb2Ygc3JjX3N0cik7CisgICAgbWVtc2V0KGhhc2hfc3RyLCAweDAwLCBzaXplb2YgaGFzaF9zdHIpOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIHNpemVvZiBvdXRwdXQpOworCisgICAgc3RybmNweSggKGNoYXIgKikgc3JjX3N0ciwgdGV4dF9zcmNfc3RyaW5nLCBzaXplb2Yoc3JjX3N0cikgLSAxICk7CisKKyAgICBtYmVkdGxzX3JpcGVtZDE2MCggc3JjX3N0ciwgc3RybGVuKCAoY2hhciAqKSBzcmNfc3RyICksIG91dHB1dCApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgc2l6ZW9mIG91dHB1dCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZyApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX01EMl9DOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIG1kMl9zZWxmdGVzdCgpCit7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWQyX3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX01ENF9DOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIG1kNF9zZWxmdGVzdCgpCit7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWQ0X3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX01ENV9DOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIG1kNV9zZWxmdGVzdCgpCit7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWQ1X3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIHJpcGVtZDE2MF9zZWxmdGVzdCgpCit7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcmlwZW1kMTYwX3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWVtb3J5X2J1ZmZlcl9hbGxvYy5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21lbW9yeV9idWZmZXJfYWxsb2MuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDM4MTNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21lbW9yeV9idWZmZXJfYWxsb2MuZGF0YQpAQCAtMCwwICsxLDE4IEBACitNZW1vcnkgYnVmZmVyIGFsbG9jIHNlbGYgdGVzdAorbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3NlbGZfdGVzdDoKKworTWVtb3J5IGJ1ZmZlciBhbGxvYyAtIGZyZWUgaW4gbWlkZGxlLCBhbGxvYyBhdCBlbmQKK21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZV9hbGxvYzoxMDA6MTAwOjEwMDowOjA6MTowOjA6MjAwOjAKKworTWVtb3J5IGJ1ZmZlciBhbGxvYyAtIGZyZWUgaW4gbWlkZGxlLCByZWFsbG9jCittZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWVfYWxsb2M6MTAwOjEwMDoxMDA6MDowOjE6MDowOjEwMDowCisKK01lbW9yeSBidWZmZXIgYWxsb2MgLSBmcmVlIGluIG1pZGRsZSwgbWVyZ2UsIHJlYWxsb2MKK21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZV9hbGxvYzoxMDA6MTAwOjEwMDoxMDA6MDoxOjE6MDoyMDE6MAorCitNZW1vcnkgYnVmZmVyIGFsbG9jIC0gZnJlZSBhdCBlbmQsIG1lcmdlLCByZWFsbG9jCittZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWVfYWxsb2M6MTAwOjY0OjEwMDoxMDA6MDowOjA6MToyMDA6MAorCitNZW1vcnkgYnVmZmVyIGFsbG9jIC0gT3V0IG9mIE1lbW9yeSB0ZXN0CittZW1vcnlfYnVmZmVyX2FsbG9jX29vbV90ZXN0OgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWVtb3J5X2J1ZmZlcl9hbGxvYy5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZW1vcnlfYnVmZmVyX2FsbG9jLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYzcwZDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWVtb3J5X2J1ZmZlcl9hbGxvYy5mdW5jdGlvbgpAQCAtMCwwICsxLDIzNCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9tZW1vcnlfYnVmZmVyX2FsbG9jLmgiCisjZGVmaW5lIFRFU1RfU1VJVEVfTUVNT1JZX0JVRkZFUl9BTExPQworCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX1NVSVRFX0hFTFBFUlMgKi8KK3N0YXRpYyBpbnQgY2hlY2tfcG9pbnRlciggdm9pZCAqcCApCit7CisgICAgaWYoIHAgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGlmKCAoc2l6ZV90KSBwICUgTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEUgIT0gMCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIHJldHVybiggMCApOworfQorLyogRU5EX1NVSVRFX0hFTFBFUlMgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19zZWxmX3Rlc3QoICkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX01FTU9SWV9ERUJVRyAqLwordm9pZCBtZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWVfYWxsb2MoIGludCBhX2J5dGVzLCBpbnQgYl9ieXRlcywgaW50IGNfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyZWVfYSwgaW50IGZyZWVfYiwgaW50IGZyZWVfYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJlZV9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlX2J5dGVzLCBpbnQgZl9ieXRlcyApCit7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisgICAgdW5zaWduZWQgY2hhciAqcHRyX2EgPSBOVUxMLCAqcHRyX2IgPSBOVUxMLCAqcHRyX2MgPSBOVUxMLCAqcHRyX2QgPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAqcHRyX2UgPSBOVUxMLCAqcHRyX2YgPSBOVUxMOworCisgICAgc2l6ZV90IHJlcG9ydGVkX2Jsb2NrczsKKyAgICBzaXplX3QgYWxsb2NhdGVkX2J5dGVzID0gMCwgcmVwb3J0ZWRfYnl0ZXM7CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggYnVmLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfc2V0X3ZlcmlmeSggTUJFRFRMU19NRU1PUllfVkVSSUZZX0FMV0FZUyApOworCisgICAgaWYoIGFfYnl0ZXMgPiAwICkKKyAgICB7CisgICAgICAgIHB0cl9hID0gbWJlZHRsc19jYWxsb2MoIGFfYnl0ZXMsIHNpemVvZihjaGFyKSApOworICAgICAgICBURVNUX0FTU0VSVCggY2hlY2tfcG9pbnRlciggcHRyX2EgKSA9PSAwICk7CisKKyAgICAgICAgYWxsb2NhdGVkX2J5dGVzICs9IGFfYnl0ZXMgKiBzaXplb2YoY2hhcik7CisgICAgfQorCisgICAgaWYoIGJfYnl0ZXMgPiAwICkKKyAgICB7CisgICAgICAgIHB0cl9iID0gbWJlZHRsc19jYWxsb2MoIGJfYnl0ZXMsIHNpemVvZihjaGFyKSApOworICAgICAgICBURVNUX0FTU0VSVCggY2hlY2tfcG9pbnRlciggcHRyX2IgKSA9PSAwICk7CisKKyAgICAgICAgYWxsb2NhdGVkX2J5dGVzICs9IGJfYnl0ZXMgKiBzaXplb2YoY2hhcik7CisgICAgfQorCisgICAgaWYoIGNfYnl0ZXMgPiAwICkKKyAgICB7CisgICAgICAgIHB0cl9jID0gbWJlZHRsc19jYWxsb2MoIGNfYnl0ZXMsIHNpemVvZihjaGFyKSApOworICAgICAgICBURVNUX0FTU0VSVCggY2hlY2tfcG9pbnRlciggcHRyX2MgKSA9PSAwICk7CisKKyAgICAgICAgYWxsb2NhdGVkX2J5dGVzICs9IGNfYnl0ZXMgKiBzaXplb2YoY2hhcik7CisgICAgfQorCisgICAgaWYoIGRfYnl0ZXMgPiAwICkKKyAgICB7CisgICAgICAgIHB0cl9kID0gbWJlZHRsc19jYWxsb2MoIGRfYnl0ZXMsIHNpemVvZihjaGFyKSApOworICAgICAgICBURVNUX0FTU0VSVCggY2hlY2tfcG9pbnRlciggcHRyX2QgKSA9PSAwICk7CisKKyAgICAgICAgYWxsb2NhdGVkX2J5dGVzICs9IGRfYnl0ZXMgKiBzaXplb2YoY2hhcik7CisgICAgfQorCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2N1cl9nZXQoICZyZXBvcnRlZF9ieXRlcywgJnJlcG9ydGVkX2Jsb2NrcyApOworICAgIFRFU1RfQVNTRVJUKCByZXBvcnRlZF9ieXRlcyA9PSBhbGxvY2F0ZWRfYnl0ZXMgKTsKKworICAgIGlmKCBmcmVlX2EgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBwdHJfYSApOworICAgICAgICBwdHJfYSA9IE5VTEw7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCkgPT0gMCApOworCisgICAgICAgIGFsbG9jYXRlZF9ieXRlcyAtPSBhX2J5dGVzICogc2l6ZW9mKGNoYXIpOworICAgIH0KKworICAgIGlmKCBmcmVlX2IgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBwdHJfYiApOworICAgICAgICBwdHJfYiA9IE5VTEw7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCkgPT0gMCApOworCisgICAgICAgIGFsbG9jYXRlZF9ieXRlcyAtPSBiX2J5dGVzICogc2l6ZW9mKGNoYXIpOworICAgIH0KKworICAgIGlmKCBmcmVlX2MgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBwdHJfYyApOworICAgICAgICBwdHJfYyA9IE5VTEw7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCkgPT0gMCApOworCisgICAgICAgIGFsbG9jYXRlZF9ieXRlcyAtPSBjX2J5dGVzICogc2l6ZW9mKGNoYXIpOworICAgIH0KKworICAgIGlmKCBmcmVlX2QgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBwdHJfZCApOworICAgICAgICBwdHJfZCA9IE5VTEw7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCkgPT0gMCApOworCisgICAgICAgIGFsbG9jYXRlZF9ieXRlcyAtPSBkX2J5dGVzICogc2l6ZW9mKGNoYXIpOworICAgIH0KKworICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0KCAmcmVwb3J0ZWRfYnl0ZXMsICZyZXBvcnRlZF9ibG9ja3MgKTsKKyAgICBURVNUX0FTU0VSVCggcmVwb3J0ZWRfYnl0ZXMgPT0gYWxsb2NhdGVkX2J5dGVzICk7CisKKyAgICBpZiggZV9ieXRlcyA+IDAgKQorICAgIHsKKyAgICAgICAgcHRyX2UgPSBtYmVkdGxzX2NhbGxvYyggZV9ieXRlcywgc2l6ZW9mKGNoYXIpICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBjaGVja19wb2ludGVyKCBwdHJfZSApID09IDAgKTsKKyAgICB9CisKKyAgICBpZiggZl9ieXRlcyA+IDAgKQorICAgIHsKKyAgICAgICAgcHRyX2YgPSBtYmVkdGxzX2NhbGxvYyggZl9ieXRlcywgc2l6ZW9mKGNoYXIpICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBjaGVja19wb2ludGVyKCBwdHJfZiApID09IDAgKTsKKyAgICB9CisKKyAgICAvKiBPbmNlIGJsb2NrcyBhcmUgcmVhbGxvY2F0ZWQsIHRoZSBibG9jayBhbGxvY2F0ZWQgdG8gdGhlIG1lbW9yeSByZXF1ZXN0CisgICAgICogbWF5IGJlIGJpZ2dlciB0aGFuIHRoZSByZXF1ZXN0IGl0c2VsZiwgd2hpY2ggaXMgaW5kaWNhdGVkIGJ5IHRoZSByZXBvcnRlZAorICAgICAqIGJ5dGVzLCBhbmQgbWFrZXMgaXQgaGFyZCB0byBrbm93IHdoYXQgdGhlIHJlcG9ydGVkIHNpemUgd2lsbCBiZSwgc28KKyAgICAgKiB3ZSBkb24ndCBjaGVjayB0aGUgc2l6ZSBhZnRlciBibG9ja3MgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkLiAqLworCisgICAgaWYoIHB0cl9hICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBwdHJfYSApOworICAgICAgICBwdHJfYSA9IE5VTEw7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCkgPT0gMCApOworICAgIH0KKworICAgIGlmKCBwdHJfYiAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnJlZSggcHRyX2IgKTsKKyAgICAgICAgcHRyX2IgPSBOVUxMOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3ZlcmlmeSgpID09IDAgKTsKKyAgICB9CisKKyAgICBpZiggcHRyX2MgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIHB0cl9jICk7CisgICAgICAgIHB0cl9jID0gTlVMTDsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkoKSA9PSAwICk7CisgICAgfQorCisgICAgaWYoIHB0cl9kICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBwdHJfZCApOworICAgICAgICBwdHJfZCA9IE5VTEw7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCkgPT0gMCApOworICAgIH0KKworICAgIGlmKCBwdHJfZSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnJlZSggcHRyX2UgKTsKKyAgICAgICAgcHRyX2UgPSBOVUxMOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3ZlcmlmeSgpID09IDAgKTsKKyAgICB9CisKKyAgICBpZiggcHRyX2YgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIHB0cl9mICk7CisgICAgICAgIHB0cl9mID0gTlVMTDsKKyAgICB9CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfY3VyX2dldCggJnJlcG9ydGVkX2J5dGVzLCAmcmVwb3J0ZWRfYmxvY2tzICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcG9ydGVkX2J5dGVzID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfTUVNT1JZX0RFQlVHICovCit2b2lkIG1lbW9yeV9idWZmZXJfYWxsb2Nfb29tX3Rlc3QoKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworICAgIHVuc2lnbmVkIGNoYXIgKnB0cl9hID0gTlVMTCwgKnB0cl9iID0gTlVMTCwgKnB0cl9jID0gTlVMTDsKKyAgICBzaXplX3QgcmVwb3J0ZWRfYmxvY2tzLCByZXBvcnRlZF9ieXRlczsKKworICAgICh2b2lkKXB0cl9jOworCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQoIGJ1Ziwgc2l6ZW9mKCBidWYgKSApOworCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX3NldF92ZXJpZnkoIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9BTFdBWVMgKTsKKworICAgIHB0cl9hID0gbWJlZHRsc19jYWxsb2MoIDQzMiwgc2l6ZW9mKGNoYXIpICk7CisgICAgVEVTVF9BU1NFUlQoIGNoZWNrX3BvaW50ZXIoIHB0cl9hICkgPT0gMCApOworCisgICAgcHRyX2IgPSBtYmVkdGxzX2NhbGxvYyggNDMyLCBzaXplb2YoY2hhcikgKTsKKyAgICBURVNUX0FTU0VSVCggY2hlY2tfcG9pbnRlciggcHRyX2IgKSA9PSAwICk7CisKKyAgICBwdHJfYyA9IG1iZWR0bHNfY2FsbG9jKCA0MzEsIHNpemVvZihjaGFyKSApOworICAgIFRFU1RfQVNTRVJUKCBwdHJfYyA9PSBOVUxMICk7CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfY3VyX2dldCggJnJlcG9ydGVkX2J5dGVzLCAmcmVwb3J0ZWRfYmxvY2tzICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcG9ydGVkX2J5dGVzID49IDg2NCAmJiByZXBvcnRlZF9ieXRlcyA8PSBzaXplb2YoYnVmKSApOworCisgICAgbWJlZHRsc19mcmVlKCBwdHJfYSApOworICAgIHB0cl9hID0gTlVMTDsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3ZlcmlmeSgpID09IDAgKTsKKworICAgIG1iZWR0bHNfZnJlZSggcHRyX2IgKTsKKyAgICBwdHJfYiA9IE5VTEw7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkoKSA9PSAwICk7CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfY3VyX2dldCggJnJlcG9ydGVkX2J5dGVzLCAmcmVwb3J0ZWRfYmxvY2tzICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcG9ydGVkX2J5dGVzID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCApOworfQorLyogRU5EX0NBU0UgKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21waS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21waS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjViNWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbXBpLmRhdGEKQEAgLTAsMCArMSw3MzEgQEAKK0FyZ3VtZW50cyB3aXRoIG5vIHZhbHVlCittcGlfbnVsbDoKKworQmFzZSB0ZXN0IG1waV9yZWFkX3dyaXRlX3N0cmluZyAjMQorbXBpX3JlYWRfd3JpdGVfc3RyaW5nOjEwOiIxMjgiOjEwOiIxMjgiOjEwMDowOjAKKworQmFzZSB0ZXN0IG1waV9yZWFkX3dyaXRlX3N0cmluZyAjMgorbXBpX3JlYWRfd3JpdGVfc3RyaW5nOjEwOiIxMjgiOjE2OiI4MCI6MTAwOjA6MAorCitCYXNlIHRlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICMzIChSZWFkIHplcm8pCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTA6IjAiOjEwOiIwIjoxMDA6MDowCisKK0Jhc2UgdGVzdCBtcGlfcmVhZF93cml0ZV9zdHJpbmcgIzMgKE5lZ2F0aXZlIGRlY2ltYWwpCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTA6Ii0yMyI6MTA6Ii0yMyI6MTAwOjA6MAorCitCYXNlIHRlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICMzIChOZWdhdGl2ZSBoZXgpCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTY6Ii0yMCI6MTA6Ii0zMiI6MTAwOjA6MAorCitCYXNlIHRlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICMzIChOZWdhdGl2ZSBkZWNpbWFsKQorbXBpX3JlYWRfd3JpdGVfc3RyaW5nOjE2OiItMjMiOjE2OiItMjMiOjEwMDowOjAKKworVGVzdCBtcGlfcmVhZF93cml0ZV9zdHJpbmcgIzEgKEludmFsaWQgY2hhcmFjdGVyKQorbXBpX3JlYWRfd3JpdGVfc3RyaW5nOjEwOiJhMjgiOjA6IiI6MTAwOk1CRURUTFNfRVJSX01QSV9JTlZBTElEX0NIQVJBQ1RFUjowCisKK1Rlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICMyIChJbGxlZ2FsIGlucHV0IHJhZGl4KQorbXBpX3JlYWRfd3JpdGVfc3RyaW5nOjE5OiJhMjgiOjA6IiI6MTAwOk1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQTowCisKK1Rlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICMzIChCdWZmZXIganVzdCBmaXRzKQorbXBpX3JlYWRfd3JpdGVfc3RyaW5nOjE2OiItMjMiOjE2OiItMjMiOjQ6MDowCisKK1Rlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICM0IChCdWZmZXIgdG9vIHNtYWxsKQorbXBpX3JlYWRfd3JpdGVfc3RyaW5nOjE2OiItMjMiOjE2OiItMjMiOjM6MDpNQkVEVExTX0VSUl9NUElfQlVGRkVSX1RPT19TTUFMTAorCitUZXN0IG1waV9yZWFkX3dyaXRlX3N0cmluZyAjNSAoSWxsZWdhbCBvdXRwdXQgcmFkaXgpCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTY6Ii0yMyI6MTc6Ii0yMyI6NDowOk1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQQorCitUZXN0IG1waV9yZWFkX3dyaXRlX3N0cmluZyAjNiAoT3V0cHV0IHJhZGl4IG9mIDE1KQorbXBpX3JlYWRfd3JpdGVfc3RyaW5nOjEwOiIyOSI6MTU6IjFlIjoxMDA6MDowCisKK1Rlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICM3CittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTA6IjU2MTI1NjgwOTgxNzUyMjgyMzM0MTQxODk2MzIwMzcyNDg5NDkwNjEzOTYzNjkzNTU2MzkyNTIwODE2MDE3ODkyMTExMzUwNjA0MTExNjk3NjgyNzA1NDk4MzE5NTEyMDQ5MDQwNTE2Njk4ODI3ODI5MjkyMDc2ODA4MDA2OTQwODczOTc0OTc5NTg0NTI3MDczNDgxMDEyNjM2MDE2MzUzOTEzNDYyMzc2NzU1NTU2NzIwMDE5ODMxMTg3MzY0OTkzNTg3OTAxOTUyNzU3MzA3ODMwODk2NTMxNjc4NzI3NzE3OTI0IjoxNjoiMDk0MTM3OWQwMGZlZDE0OTFmZTE1ZGYyODRkZmRlNGExNDJmNjhhYThkNDEyMDIzMTk1Y2VlNjY4ODNlNjI5MGZmZTcwM2Y0ZWE1OTYzYmYyMTI3MTNjZWU0NmIxMDdjMDkxODJiNWVkY2Q5NTVhZGFjNDE4YmY0OTE4ZTI4ODlhZjQ4ZTEwOTlkNTEzODMwY2VjODVjMjZhYzFlMTU4YjUyNjIwZTMzYmE4NjkyZjg5M2VmYmIyZjk1OGI0NDI0IjoyMDA6MDowCisKK1Rlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICM4IChFbXB0eSBNUEkgLT4gaGV4KQorbXBpX3JlYWRfd3JpdGVfc3RyaW5nOjE2OiIiOjE2OiIwMCI6NDowOjAKKworVGVzdCBtcGlfcmVhZF93cml0ZV9zdHJpbmcgIzkgKEVtcHR5IE1QSSAtPiBkZWMpCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTY6IiI6MTA6IjAiOjQ6MDowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSAjMQorbWJlZHRsc19tcGlfcmVhZF9iaW5hcnk6IjA5NDEzNzlkMDBmZWQxNDkxZmUxNWRmMjg0ZGZkZTRhMTQyZjY4YWE4ZDQxMjAyMzE5NWNlZTY2ODgzZTYyOTBmZmU3MDNmNGVhNTk2M2JmMjEyNzEzY2VlNDZiMTA3YzA5MTgyYjVlZGNkOTU1YWRhYzQxOGJmNDkxOGUyODg5YWY0OGUxMDk5ZDUxMzgzMGNlYzg1YzI2YWMxZTE1OGI1MjYyMGUzM2JhODY5MmY4OTNlZmJiMmY5NThiNDQyNCI6MTA6IjU2MTI1NjgwOTgxNzUyMjgyMzM0MTQxODk2MzIwMzcyNDg5NDkwNjEzOTYzNjkzNTU2MzkyNTIwODE2MDE3ODkyMTExMzUwNjA0MTExNjk3NjgyNzA1NDk4MzE5NTEyMDQ5MDQwNTE2Njk4ODI3ODI5MjkyMDc2ODA4MDA2OTQwODczOTc0OTc5NTg0NTI3MDczNDgxMDEyNjM2MDE2MzUzOTEzNDYyMzc2NzU1NTU2NzIwMDE5ODMxMTg3MzY0OTkzNTg3OTAxOTUyNzU3MzA3ODMwODk2NTMxNjc4NzI3NzE3OTI0IgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5ICMxCittYmVkdGxzX21waV93cml0ZV9iaW5hcnk6MTA6IjU2MTI1NjgwOTgxNzUyMjgyMzM0MTQxODk2MzIwMzcyNDg5NDkwNjEzOTYzNjkzNTU2MzkyNTIwODE2MDE3ODkyMTExMzUwNjA0MTExNjk3NjgyNzA1NDk4MzE5NTEyMDQ5MDQwNTE2Njk4ODI3ODI5MjkyMDc2ODA4MDA2OTQwODczOTc0OTc5NTg0NTI3MDczNDgxMDEyNjM2MDE2MzUzOTEzNDYyMzc2NzU1NTU2NzIwMDE5ODMxMTg3MzY0OTkzNTg3OTAxOTUyNzU3MzA3ODMwODk2NTMxNjc4NzI3NzE3OTI0IjoiMDk0MTM3OWQwMGZlZDE0OTFmZTE1ZGYyODRkZmRlNGExNDJmNjhhYThkNDEyMDIzMTk1Y2VlNjY4ODNlNjI5MGZmZTcwM2Y0ZWE1OTYzYmYyMTI3MTNjZWU0NmIxMDdjMDkxODJiNWVkY2Q5NTVhZGFjNDE4YmY0OTE4ZTI4ODlhZjQ4ZTEwOTlkNTEzODMwY2VjODVjMjZhYzFlMTU4YjUyNjIwZTMzYmE4NjkyZjg5M2VmYmIyZjk1OGI0NDI0IjoyMDA6MAorCitUZXN0IG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSAjMSAoQnVmZmVyIGp1c3QgZml0cykKK21iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeToxNjoiMTIzMTIzMTIzMTIzMTIzMTIzMTIzMTIzMTIzIjoiMDEyMzEyMzEyMzEyMzEyMzEyMzEyMzEyMzEyMyI6MTQ6MAorCitUZXN0IG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSAjMiAoQnVmZmVyIHRvbyBzbWFsbCkKK21iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeToxNjoiMTIzMTIzMTIzMTIzMTIzMTIzMTIzMTIzMTIzIjoiMTIzMTIzMTIzMTIzMTIzMTIzMTIzMTIzMTIzIjoxMzpNQkVEVExTX0VSUl9NUElfQlVGRkVSX1RPT19TTUFMTAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfcmVhZF9maWxlICMxCittYmVkdGxzX21waV9yZWFkX2ZpbGU6MTA6ImRhdGFfZmlsZXMvbXBpXzEwIjoiMDFmNTUzMzJjM2E0OGI5MTBmOTk0MmY2YzkxNGU1OGJlZjM3YTQ3ZWU0NWNiMTY0YTViNmI4ZDEwMDZiZjU5YTA1OWMyMTQ0OTkzOWViZWJmZGY1MTdkMmUxZGJhYzg4MDEwZDdiMWYxNDFlOTk3YmQ2ODAxZGRhZWM5ZDA1OTEwZjRmMmRlMmIyYzRkNzE0ZTJjMTRhNzJmYzdmMTdhYTQyOGQ1OWM1MzE2MjdmMDkiOjAKKworVGVzdCBtYmVkdGxzX21waV9yZWFkX2ZpbGUgIzEgKEVtcHR5IGZpbGUpCittYmVkdGxzX21waV9yZWFkX2ZpbGU6MTA6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzQiOiIiOk1CRURUTFNfRVJSX01QSV9GSUxFX0lPX0VSUk9SCisKK1Rlc3QgbWJlZHRsc19tcGlfcmVhZF9maWxlICMyIChJbGxlZ2FsIGlucHV0KQorbWJlZHRsc19tcGlfcmVhZF9maWxlOjEwOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8zIjoiIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfcmVhZF9maWxlICMzIChJbnB1dCB0b28gYmlnKQorbWJlZHRsc19tcGlfcmVhZF9maWxlOjEwOiJkYXRhX2ZpbGVzL21waV90b29fYmlnIjoiIjpNQkVEVExTX0VSUl9NUElfQlVGRkVSX1RPT19TTUFMTAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSAjMQorbWJlZHRsc19tcGlfd3JpdGVfZmlsZToxMDoiNTYxMjU2ODA5ODE3NTIyODIzMzQxNDE4OTYzMjAzNzI0ODk0OTA2MTM5NjM2OTM1NTYzOTI1MjA4MTYwMTc4OTIxMTEzNTA2MDQxMTE2OTc2ODI3MDU0OTgzMTk1MTIwNDkwNDA1MTY2OTg4Mjc4MjkyOTIwNzY4MDgwMDY5NDA4NzM5NzQ5Nzk1ODQ1MjcwNzM0ODEwMTI2MzYwMTYzNTM5MTM0NjIzNzY3NTU1NTY3MjAwMTk4MzExODczNjQ5OTM1ODc5MDE5NTI3NTczMDc4MzA4OTY1MzE2Nzg3Mjc3MTc5MjQiOjE2OiJkYXRhX2ZpbGVzL21waV93cml0ZSIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2xzYiAjMQorbWJlZHRsc19tcGlfbHNiOjEwOiI1NjEyNTY4MDk4MTc1MjI4MjMzNDE0MTg5NjMyMDM3MjQ4OTQ5MDYxMzk2MzY5MzU1NjM5MjUyMDgxNjAxNzg5MjExMTM1MDYwNDExMTY5NzY4MjcwNTQ5ODMxOTUxMjA0OTA0MDUxNjY5ODgyNzgyOTI5MjA3NjgwODAwNjk0MDg3Mzk3NDk3OTU4NDUyNzA3MzQ4MTAxMjYzNjAxNjM1MzkxMzQ2MjM3Njc1NTU1NjcyMDAxOTgzMTE4NzM2NDk5MzU4NzkwMTk1Mjc1NzMwNzgzMDg5NjUzMTY3ODcyNzcxNzkyNCI6MgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbHNiICMyCittYmVkdGxzX21waV9sc2I6MTA6IjI0IjozCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9sc2IgIzMKK21iZWR0bHNfbXBpX2xzYjoxNjoiMjQiOjIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2xzYiAjNAorbWJlZHRsc19tcGlfbHNiOjE2OiIyMDAwIjoxMworCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfYml0bGVuICMxCittYmVkdGxzX21waV9iaXRsZW46MTA6IjU2MTI1NjgwOTgxNzUyMjgyMzM0MTQxODk2MzIwMzcyNDg5NDkwNjEzOTYzNjkzNTU2MzkyNTIwODE2MDE3ODkyMTExMzUwNjA0MTExNjk3NjgyNzA1NDk4MzE5NTEyMDQ5MDQwNTE2Njk4ODI3ODI5MjkyMDc2ODA4MDA2OTQwODczOTc0OTc5NTg0NTI3MDczNDgxMDEyNjM2MDE2MzUzOTEzNDYyMzc2NzU1NTU2NzIwMDE5ODMxMTg3MzY0OTkzNTg3OTAxOTUyNzU3MzA3ODMwODk2NTMxNjc4NzI3NzE3OTI0Ijo3NjQKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2JpdGxlbiAjMgorbWJlZHRsc19tcGlfYml0bGVuOjEwOiIyNCI6NQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfYml0bGVuICMzCittYmVkdGxzX21waV9iaXRsZW46MTA6IjEiOjEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2JpdGxlbiAjNAorbWJlZHRsc19tcGlfYml0bGVuOjEwOiIxNSI6NAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfYml0bGVuICM1CittYmVkdGxzX21waV9iaXRsZW46MTA6IjE2Ijo1CisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9iaXRsZW4gIzYKK21iZWR0bHNfbXBpX2JpdGxlbjoxMDoiMTAiOjQKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2JpdGxlbiAjNworbWJlZHRsc19tcGlfYml0bGVuOjEwOiIwIjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfaW50ICMxCittYmVkdGxzX21waV9jbXBfaW50OjY5Mzo2OTM6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX2ludCAjMgorbWJlZHRsc19tcGlfY21wX2ludDo2OTM6NjkyOjEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9pbnQgIzMKK21iZWR0bHNfbXBpX2NtcF9pbnQ6NjkzOjY5NDotMQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX2ludCAoTmVnYXRpdmUgdmFsdWVzKSAjMQorbWJlZHRsc19tcGlfY21wX2ludDotMjotMjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfaW50IChOZWdhdGl2ZSB2YWx1ZXMpICMyCittYmVkdGxzX21waV9jbXBfaW50Oi0yOi0zOjEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9pbnQgKE5lZ2F0aXZlIHZhbHVlcykgIzMKK21iZWR0bHNfbXBpX2NtcF9pbnQ6LTI6LTE6LTEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9tcGkgIzEKK21iZWR0bHNfbXBpX2NtcF9tcGk6MTA6IjY5MyI6MTA6IjY5MyI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX21waSAjMgorbWJlZHRsc19tcGlfY21wX21waToxMDoiNjkzIjoxMDoiNjkyIjoxCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfbXBpICMzCittYmVkdGxzX21waV9jbXBfbXBpOjEwOiI2OTMiOjEwOiI2OTQiOi0xCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfbXBpIChOZWdhdGl2ZSB2YWx1ZXMpICMxCittYmVkdGxzX21waV9jbXBfbXBpOjEwOiItMiI6MTA6Ii0yIjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfbXBpIChOZWdhdGl2ZSB2YWx1ZXMpICMyCittYmVkdGxzX21waV9jbXBfbXBpOjEwOiItMiI6MTA6Ii0zIjoxCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfbXBpIChOZWdhdGl2ZSB2YWx1ZXMpICMzCittYmVkdGxzX21waV9jbXBfbXBpOjEwOiItMiI6MTA6Ii0xIjotMQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX21waSAoTWl4ZWQgdmFsdWVzKSAjNAorbWJlZHRsc19tcGlfY21wX21waToxMDoiLTMiOjEwOiIyIjotMQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX21waSAoTWl4ZWQgdmFsdWVzKSAjNQorbWJlZHRsc19tcGlfY21wX21waToxMDoiMiI6MTA6Ii0zIjoxCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfbXBpIChNaXhlZCB2YWx1ZXMpICM2CittYmVkdGxzX21waV9jbXBfbXBpOjEwOiItMiI6MTA6IjMxMjMxMjMxMjg5Nzk4IjotMQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX2FicyAjMQorbWJlZHRsc19tcGlfY21wX2FiczoxMDoiNjkzIjoxMDoiNjkzIjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfYWJzICMyCittYmVkdGxzX21waV9jbXBfYWJzOjEwOiI2OTMiOjEwOiI2OTIiOjEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9hYnMgIzMKK21iZWR0bHNfbXBpX2NtcF9hYnM6MTA6IjY5MyI6MTA6IjY5NCI6LTEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9hYnMgKE5lZ2F0aXZlIHZhbHVlcykgIzEKK21iZWR0bHNfbXBpX2NtcF9hYnM6MTA6Ii0yIjoxMDoiLTIiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9hYnMgKE5lZ2F0aXZlIHZhbHVlcykgIzIKK21iZWR0bHNfbXBpX2NtcF9hYnM6MTA6Ii0yIjoxMDoiLTMiOi0xCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfYWJzIChOZWdhdGl2ZSB2YWx1ZXMpICMzCittYmVkdGxzX21waV9jbXBfYWJzOjEwOiItMiI6MTA6Ii0xIjoxCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfYWJzIChaZXJvIGFuZCBaZXJvKSAjNAorbWJlZHRsc19tcGlfY21wX2FiczoxMDoiMCI6MTA6IjAiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9hYnMgKE1peCB2YWx1ZXMpICMxCittYmVkdGxzX21waV9jbXBfYWJzOjEwOiItMiI6MTA6IjIiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9hYnMgKE1peCB2YWx1ZXMpICMyCittYmVkdGxzX21waV9jbXBfYWJzOjEwOiIyIjoxMDoiLTMiOi0xCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfYWJzIChNaXggdmFsdWVzKSAjMworbWJlZHRsc19tcGlfY21wX2FiczoxMDoiLTIiOjEwOiIxIjoxCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jb3B5ICMxCittYmVkdGxzX21waV9jb3B5OjA6MTUwMAorCitCYXNlIHRlc3QgbXBpX2NvcHlfc2VsZiAjMQorbXBpX2NvcHlfc2VsZjoxNAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfc3dhcCAjMQorbWJlZHRsc19tcGlfc3dhcDowOjE1MDAKKworVGVzdCBtYmVkdGxzX21waV9zaHJpbmsgIzEKK21iZWR0bHNfbXBpX3NocmluazoyOjI6NDo0CisKK1Rlc3QgbWJlZHRsc19tcGlfc2hyaW5rICMyCittYmVkdGxzX21waV9zaHJpbms6NDoyOjQ6NAorCitUZXN0IG1iZWR0bHNfbXBpX3NocmluayAjMworbWJlZHRsc19tcGlfc2hyaW5rOjg6Mjo0OjQKKworVGVzdCBtYmVkdGxzX21waV9zaHJpbmsgIzQKK21iZWR0bHNfbXBpX3Nocmluazo4OjQ6NDo0CisKK1Rlc3QgbWJlZHRsc19tcGlfc2hyaW5rICM1CittYmVkdGxzX21waV9zaHJpbms6ODo2OjQ6NgorCitUZXN0IG1iZWR0bHNfbXBpX3NocmluayAjNgorbWJlZHRsc19tcGlfc2hyaW5rOjQ6MjowOjIKKworVGVzdCBtYmVkdGxzX21waV9zaHJpbmsgIzcKK21iZWR0bHNfbXBpX3Nocmluazo0OjE6MDoxCisKK1Rlc3QgbWJlZHRsc19tcGlfc2hyaW5rICM4CittYmVkdGxzX21waV9zaHJpbms6NDowOjA6MQorCitUZXN0IG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24gIzEKK21iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ246KzE6IjAxIjorMToiMDIiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbiAjMgorbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbjorMToiRkYwMDAwMDAwMDAwMDAwMDAwMDEiOisxOiIwMiIKKworVGVzdCBtYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduICMzCittYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduOisxOiIwMSI6KzE6IkZGMDAwMDAwMDAwMDAwMDAwMDAyIgorCitUZXN0IG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24gIzQKK21iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ246KzE6IjAxIjotMToiMDIiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbiAjNQorbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbjotMToiMDEiOisxOiIwMiIKKworVGVzdCBtYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduICM2CittYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduOi0xOiIwMSI6LTE6IjAyIgorCitUZXN0IG1iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwICMxCittYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcDorMToiMDEiOisxOiIwMiIKKworVGVzdCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcCAjMgorbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXA6KzE6IkZGMDAwMDAwMDAwMDAwMDAwMDAxIjorMToiMDIiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXAgIzMKK21iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwOisxOiIwMSI6KzE6IkZGMDAwMDAwMDAwMDAwMDAwMDAyIgorCitUZXN0IG1iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwICM0CittYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcDorMToiMDEiOi0xOiIwMiIKKworVGVzdCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcCAjNQorbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXA6LTE6IjAxIjorMToiMDIiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXAgIzYKK21iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwOi0xOiIwMSI6LTE6IjAyIgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfYWRkX2FicyAjMQorbWJlZHRsc19tcGlfYWRkX2FiczoxMDoiMTIzNDU2NzgiOjEwOiI2NDI1MzEiOjEwOiIxMjk4ODIwOSIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2FkZF9hYnMgIzIKK21iZWR0bHNfbXBpX2FkZF9hYnM6MTA6Ii0xMjM0NTY3OCI6MTA6IjY0MjUzMSI6MTA6IjEyOTg4MjA5IgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfYWRkX2FicyAjMworbWJlZHRsc19tcGlfYWRkX2FiczoxMDoiMTIzNDU2NzgiOjEwOiItNjQyNTMxIjoxMDoiMTI5ODgyMDkiCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9hZGRfYWJzICM0CittYmVkdGxzX21waV9hZGRfYWJzOjEwOiItMTIzNDU2NzgiOjEwOiItNjQyNTMxIjoxMDoiMTI5ODgyMDkiCisKK1Rlc3QgbWJlZHRsc19tcGlfYWRkX2FicyAjMQorbWJlZHRsc19tcGlfYWRkX2FiczoxMDoiLTY0MzgwODAwNjgwMzU1NDQzOTIzMDEyOTg1NDk2MTQ5MjY5OTE1MTM4NjEwNzUzNDAxMzQzMjkxODA3MzQzOTUyNDEzODI2NDg0MjM3MDYzMDA2MTM2OTcxNTM5NDczOTEzNDA5MDkyMjkzNzMzMjU5MDM4NDcyMDM5NzEzMzMzNTk2OTU0OTI1NjMyMjYyMDk3OTAzNjY4NjYzMzIxMzkwMzk1Mjk2NjE3NTEwNzA5Njc2OTE4MDAxNzY0NjE2MTg1MTU3MzE0NzU5NjM5MDE1MyI6MTA6IjU2MTI1NjgwOTgxNzUyMjgyMzMzNDk4MDg4MzEzNTY4OTM1MDUxMzgzODMzODM4NTk0ODk5ODIxNjY0NjMxNzg0NTc3MzM3MTcxMTkzNjI0MjQzMTgxMzYwMDU0NjY5Njc4NDEwNDU1MzI5MTEyNDM0NTUyOTQyNzE3MDg0MDAzNTQxMzg0NTk0ODY0MTI5OTQwMTQ1MDQzMDg2NzYwMDMxMjkyNDgzMzQwMDY4OTIzNTA2MTE1ODc4MjIxMTg5ODg2NDkxMTMyNzcyNzM5NjYxNjY5MDQ0OTU4NTMxMTMxMzI3NzcxIjoxMDoiNTYxMjU2ODA5ODE3NTIyODIzMzQxNDE4OTYzMjAzNzI0ODk0OTA2MTM5NjM2OTM1NTYzOTI1MjA4MTYwMTc4OTIxMTEzNTA2MDQxMTE2OTc2ODI3MDU0OTgzMTk1MTIwNDkwNDA1MTY2OTg4Mjc4MjkyOTIwNzY4MDgwMDY5NDA4NzM5NzQ5Nzk1ODQ1MjcwNzM0ODEwMTI2MzYwMTYzNTM5MTM0NjIzNzY3NTU1NTY3MjAwMTk4MzExODczNjQ5OTM1ODc5MDE5NTI3NTczMDc4MzA4OTY1MzE2Nzg3Mjc3MTc5MjQiCisKK1Rlc3QgbWJlZHRsc19tcGlfYWRkX2FicyAjMiAoYWRkIHRvIGZpcnN0IHZhbHVlKQorbXBpX2FkZF9hYnNfYWRkX2ZpcnN0OjEwOiIxMjMxMjMiOjEwOiIxMjMxMjMiOjEwOiIyNDYyNDYiCisKK1Rlc3QgbWJlZHRsc19tcGlfYWRkX2FicyAjMyAoYWRkIHRvIHNlY29uZCB2YWx1ZSkKK21waV9hZGRfYWJzX2FkZF9zZWNvbmQ6MTA6IjEyMzEyMyI6MTA6IjEyMzEyMyI6MTA6IjI0NjI0NiIKKworUmVncmVzc2lvbiBtYmVkdGxzX21waV9hZGRfYWJzIChhZGQgc21hbGwgdG8gdmVyeSBsYXJnZSBNUEkgd2l0aCBjYXJyeSByb2xsb3ZlcikKK21iZWR0bHNfbXBpX2FkZF9hYnM6MTY6IkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGOCI6MTY6IjA4IjoxNjoiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworUmVncmVzc2lvbiBtYmVkdGxzX21waV9hZGRfYWJzIChhZGQgc21hbGwgdG8gdmVyeSBsYXJnZSBNUEkgd2l0aCBjYXJyeSByb2xsb3ZlcikKK21iZWR0bHNfbXBpX2FkZF9hYnM6MTY6IjA4IjoxNjoiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY4IjoxNjoiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2FkZF9tcGkgIzEKK21iZWR0bHNfbXBpX2FkZF9tcGk6MTA6IjEyMzQ1Njc4IjoxMDoiNjQyNTMxIjoxMDoiMTI5ODgyMDkiCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9hZGRfbXBpICMyCittYmVkdGxzX21waV9hZGRfbXBpOjEwOiItMTIzNDU2NzgiOjEwOiI2NDI1MzEiOjEwOiItMTE3MDMxNDciCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9hZGRfbXBpICMzCittYmVkdGxzX21waV9hZGRfbXBpOjEwOiIxMjM0NTY3OCI6MTA6Ii02NDI1MzEiOjEwOiIxMTcwMzE0NyIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2FkZF9tcGkgIzQKK21iZWR0bHNfbXBpX2FkZF9tcGk6MTA6Ii0xMjM0NTY3OCI6MTA6Ii02NDI1MzEiOjEwOiItMTI5ODgyMDkiCisKK1Rlc3QgbWJlZHRsc19tcGlfYWRkX21waSAjMQorbWJlZHRsc19tcGlfYWRkX21waToxMDoiMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAxMjc3NjMyOTM2NjE2MDYzMTQ0MDg4MTczMzEyMzcyODgyNjc3MTIzODc5NTM4NzA5NDAwMTU4MzA2NTY3MzM4MzI4Mjc5MTU0NDk5Njk4MzY2MDcxOTA2NzY2NDQwMDM3MDc0MjE3MTE3ODA1NjkwODcyNzkyODQ4MTQ5MTEyMDIyMjg2MzMyMTQ0ODc2MTgzMzc2MzI2NTEyMDgzNTc0ODIxNjQ3OTMzOTkyOTYxMjQ5OTE3MzE5ODM2MjE5MzA0Mjc0MjgwMjQzODAzMTA0MDE1MDAwNTYzNzkwMTIzIjoxMDoiNTMxODcyMjg5MDU0MjA0MTg0MTg1MDg0NzM0Mzc1MTMzMzk5NDA4MzAzNjEzOTgyMTMwODU2NjQ1Mjk5NDY0OTMwOTUyMTc4NjA2MDQ1ODQ4ODc3MTI5MTQ3ODIwMzg3OTk2NDI4MTc1NTY0MjI4MjA0Nzg1ODQ2MTQxMjA3NTMyNDYyOTM2MzM5ODM0MTM5NDEyNDAxOTc1MzM4NzA1Nzk0NjQ2NTk1NDg3MzI0MzY1MTk0NzkyODIyMTg5NDczMDkyMjczOTkzNTgwNTg3OTY0NTcxNjU5Njc4MDg0NDg0MTUyNjAzODgxMDk0MTc2OTk1NTk0ODEzMzAyMjg0MjMyMDA2MDAxNzUyMTI4MTY4OTAxMjkzNTYwMDUxODMzNjQ2ODgxNDM2MjE5IjoxMDoiNzM1ODI5MTY3NDEwNjA2MTYxNTkwODUwNjAxMzA0MTY3OTc2Njg4NDk3NjA3Mjk2NDc5MTE5NzQwMDcyMTExMzg0MjM1MjQxMzI4NzQ3MTI2NTEwMDY1NzYzODgzNTMyMDg0NjAxNDg3OTM3MTEwODgxOTA5NzI1Njc5OTE2OTMyNjIxMjQyOTA3MTcyNDY3NjkxNTU2NDc1MDM3MDcxODY2NTUzMzYxOTI3MzYxNDM5NDExOTEwNjI3ODgwMzQ1ODg1MTIyMTQyNjkyNjEwMjUwOTAzODA0NTU0MjY3ODYwNDc5MTE1OTY0NjY4OTk4NjQzNTI4ODA2MjYzNTM0MTQ5MzI1ODM3OTcxNDMyNDQzMTgxNTM3MzYzMTU1ODQ4NjQ3NDQ1MjI2MzQyIgorCitUZXN0IG1iZWR0bHNfbXBpX2FkZF9tcGkgIzIKK21iZWR0bHNfbXBpX2FkZF9tcGk6MTA6IjY0MzgwODAwNjgwMzU1NDQzOTIzMDEyOTg1NDk2MTQ5MjY5OTE1MTM4NjEwNzUzNDAxMzQzMjkxODA3MzQzOTUyNDEzODI2NDg0MjM3MDYzMDA2MTM2OTcxNTM5NDczOTEzNDA5MDkyMjkzNzMzMjU5MDM4NDcyMDM5NzEzMzMzNTk2OTU0OTI1NjMyMjYyMDk3OTAzNjY4NjYzMzIxMzkwMzk1Mjk2NjE3NTEwNzA5Njc2OTE4MDAxNzY0NjE2MTg1MTU3MzE0NzU5NjM5MDE1MyI6MTA6IjU2MTI1NjgwOTgxNzUyMjgyMzMzNDk4MDg4MzEzNTY4OTM1MDUxMzgzODMzODM4NTk0ODk5ODIxNjY0NjMxNzg0NTc3MzM3MTcxMTkzNjI0MjQzMTgxMzYwMDU0NjY5Njc4NDEwNDU1MzI5MTEyNDM0NTUyOTQyNzE3MDg0MDAzNTQxMzg0NTk0ODY0MTI5OTQwMTQ1MDQzMDg2NzYwMDMxMjkyNDgzMzQwMDY4OTIzNTA2MTE1ODc4MjIxMTg5ODg2NDkxMTMyNzcyNzM5NjYxNjY5MDQ0OTU4NTMxMTMxMzI3NzcxIjoxMDoiNTYxMjU2ODA5ODE3NTIyODIzMzQxNDE4OTYzMjAzNzI0ODk0OTA2MTM5NjM2OTM1NTYzOTI1MjA4MTYwMTc4OTIxMTEzNTA2MDQxMTE2OTc2ODI3MDU0OTgzMTk1MTIwNDkwNDA1MTY2OTg4Mjc4MjkyOTIwNzY4MDgwMDY5NDA4NzM5NzQ5Nzk1ODQ1MjcwNzM0ODEwMTI2MzYwMTYzNTM5MTM0NjIzNzY3NTU1NTY3MjAwMTk4MzExODczNjQ5OTM1ODc5MDE5NTI3NTczMDc4MzA4OTY1MzE2Nzg3Mjc3MTc5MjQiCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9hZGRfbXBpIGlucGxhY2UgIzEKK21iZWR0bHNfbXBpX2FkZF9tcGlfaW5wbGFjZToxMDoiMTIzNDU2NzgiOjEwOiIyNDY5MTM1NiIKKworVGVzdCBtYmVkdGxzX21waV9hZGRfbXBpIGlucGxhY2UgIzIgCittYmVkdGxzX21waV9hZGRfbXBpX2lucGxhY2U6MTA6IjY0MzgwODAwNjgwMzU1NDQzOTIzMDEyOTg1NDk2MTQ5MjY5OTE1MTM4NjEwNzUzNDAxMzQzMjkxODA3MzQzOTUyNDEzODI2NDg0MjM3MDYzMDA2MTM2OTcxNTM5NDczOTEzNDA5MDkyMjkzNzMzMjU5MDM4NDcyMDM5NzEzMzMzNTk2OTU0OTI1NjMyMjYyMDk3OTAzNjY4NjYzMzIxMzkwMzk1Mjk2NjE3NTEwNzA5Njc2OTE4MDAxNzY0NjE2MTg1MTU3MzE0NzU5NjM5MDE1MyI6MTA6IjEyODc2MTYwMTM2MDcxMDg4Nzg0NjAyNTk3MDk5MjI5ODUzOTgzMDI3NzIyMTUwNjgwMjY4NjU4MzYxNDY4NzkwNDgyNzY1Mjk2ODQ3NDEyNjAxMjI3Mzk0MzA3ODk0NzgyNjgxODE4NDU4NzQ2NjUxODA3Njk0NDA3OTQyNjY2NzE5MzkwOTg1MTI2NDUyNDE5NTgwNzMzNzMyNjY0Mjc4MDc5MDU5MzIzNTAyMTQxOTM1MzgzNjAwMzUyOTIzMjM3MDMxNDYyOTUxOTI3ODAzMDYiCisKK1Rlc3QgbWJlZHRsc19tcGlfYWRkX21waSBpbnBsYWNlICMzIAorbWJlZHRsc19tcGlfYWRkX21waV9pbnBsYWNlOjE2OiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiI6MTY6IjAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUiCisKK1Rlc3QgbWJlZHRsc19tcGlfYWRkX2ludCAjMQorbWJlZHRsc19tcGlfYWRkX2ludDoxMDoiMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAxMjc3NjMyOSI6OTg3MTIzMjoxMDoiMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAyMjY0NzU2MSIKKworVGVzdCBtYmVkdGxzX21waV9hZGRfaW50ICMyCittYmVkdGxzX21waV9hZGRfaW50OjEwOiIyMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDEyNzc2MzI5IjotOTg3MTIzMjoxMDoiMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAwMjkwNTA5NyIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX3N1Yl9hYnMgIzEgKFRlc3Qgd2l0aCBsYXJnZXIgc2Vjb25kIGlucHV0KQorbWJlZHRsc19tcGlfc3ViX2FiczoxMDoiNSI6MTA6IjciOjEwOiIwIjpNQkVEVExTX0VSUl9NUElfTkVHQVRJVkVfVkFMVUUKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX3N1Yl9hYnMgIzIgKFRlc3Qgd2l0aCBsYXJnZXIgc2Vjb25kIGlucHV0KQorbWJlZHRsc19tcGlfc3ViX2FiczoxMDoiLTUiOjEwOiItNyI6MTA6IjAiOk1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfc3ViX2FicyAjMyAoVGVzdCB3aXRoIGxhcmdlciBzZWNvbmQgaW5wdXQpCittYmVkdGxzX21waV9zdWJfYWJzOjEwOiItNSI6MTA6IjciOjEwOiIwIjpNQkVEVExTX0VSUl9NUElfTkVHQVRJVkVfVkFMVUUKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX3N1Yl9hYnMgIzQgKFRlc3Qgd2l0aCBsYXJnZXIgc2Vjb25kIGlucHV0KQorbWJlZHRsc19tcGlfc3ViX2FiczoxMDoiNSI6MTA6Ii03IjoxMDoiMCI6TUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9zdWJfYWJzICMxCittYmVkdGxzX21waV9zdWJfYWJzOjEwOiI3IjoxMDoiNSI6MTA6IjIiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX3N1Yl9hYnMgIzIKK21iZWR0bHNfbXBpX3N1Yl9hYnM6MTA6Ii03IjoxMDoiLTUiOjEwOiIyIjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9zdWJfYWJzICMzCittYmVkdGxzX21waV9zdWJfYWJzOjEwOiItNyI6MTA6IjUiOjEwOiIyIjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9zdWJfYWJzICM0CittYmVkdGxzX21waV9zdWJfYWJzOjEwOiI3IjoxMDoiLTUiOjEwOiIyIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfc3ViX2FicyAjMQorbWJlZHRsc19tcGlfc3ViX2FiczoxNjoiRkZGRkZGRkZGRiI6MTY6IjAxIjoxNjoiRkZGRkZGRkZGRSI6MAorCitUZXN0IG1iZWR0bHNfbXBpX3N1Yl9hYnMgIzIKK21iZWR0bHNfbXBpX3N1Yl9hYnM6MTY6IkZGRkZGRkZGRjAiOjE2OiIwMSI6MTY6IkZGRkZGRkZGRUYiOjAKKworVGVzdCBtYmVkdGxzX21waV9zdWJfYWJzICMzCittYmVkdGxzX21waV9zdWJfYWJzOjE2OiJGRjAwMDAwMDAwIjoxNjoiMEYwMDAwMDAwMCI6MTY6IkYwMDAwMDAwMDAiOjAKKworVGVzdCBtYmVkdGxzX21waV9zdWJfYWJzICM0CittYmVkdGxzX21waV9zdWJfYWJzOjE2OiJGRjAwMDAwMDAwIjoxNjoiMEYwMDAwMDAwMSI6MTY6IkVGRkZGRkZGRkYiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX3N1Yl9tcGkgIzEgKFRlc3Qgd2l0aCBuZWdhdGl2ZSByZXN1bHQpCittYmVkdGxzX21waV9zdWJfbXBpOjEwOiI1IjoxMDoiNyI6MTA6Ii0yIgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfc3ViX21waSAjMiAoVGVzdCB3aXRoIG5lZ2F0aXZlIGlucHV0cykKK21iZWR0bHNfbXBpX3N1Yl9tcGk6MTA6Ii01IjoxMDoiLTciOjEwOiIyIgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfc3ViX21waSAjMyAoVGVzdCB3aXRoIG5lZ2F0aXZlIGJhc2UpCittYmVkdGxzX21waV9zdWJfbXBpOjEwOiItNSI6MTA6IjciOjEwOiItMTIiCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9zdWJfbXBpICM0IChUZXN0IHdpdGggbmVnYXRpdmUgc3VidHJhY3Rpb24pCittYmVkdGxzX21waV9zdWJfbXBpOjEwOiI1IjoxMDoiLTciOjEwOiIxMiIKKworVGVzdCBtYmVkdGxzX21waV9zdWJfbXBpICMxCittYmVkdGxzX21waV9zdWJfbXBpOjEwOiI1MzE4NzIyODkwNTQyMDQxODQxODUwODQ3MzQzNzUxMzMzOTk0MDgzMDM2MTM5ODIxMzA4NTY2NDUyOTk0NjQ5MzA5NTIxNzg2MDYwNDU4NDg4NzcxMjkxNDc4MjAzODc5OTY0MjgxNzU1NjQyMjgyMDQ3ODU4NDYxNDEyMDc1MzI0NjI5MzYzMzk4MzQxMzk0MTI0MDE5NzUzMzg3MDU3OTQ2NDY1OTU0ODczMjQzNjUxOTQ3OTI4MjIxODk0NzMwOTIyNzM5OTM1ODA1ODc5NjQ1NzE2NTk2NzgwODQ0ODQxNTI2MDM4ODEwOTQxNzY5OTU1OTQ4MTMzMDIyODQyMzIwMDYwMDE3NTIxMjgxNjg5MDEyOTM1NjAwNTE4MzM2NDY4ODE0MzYyMTkiOjEwOiIyMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDEyNzc2MzI5MzY2MTYwNjMxNDQwODgxNzMzMTIzNzI4ODI2NzcxMjM4Nzk1Mzg3MDk0MDAxNTgzMDY1NjczMzgzMjgyNzkxNTQ0OTk2OTgzNjYwNzE5MDY3NjY0NDAwMzcwNzQyMTcxMTc4MDU2OTA4NzI3OTI4NDgxNDkxMTIwMjIyODYzMzIxNDQ4NzYxODMzNzYzMjY1MTIwODM1NzQ4MjE2NDc5MzM5OTI5NjEyNDk5MTczMTk4MzYyMTkzMDQyNzQyODAyNDM4MDMxMDQwMTUwMDA1NjM3OTAxMjMiOjEwOiIzMjc5MTU0MTA2OTc4MDIyMDY3NzkzMTg4Njc0NDYwOTg4MjIxMjgxMDk2MjA2Njc3ODI1OTM1NTA1MjY4MTg0Nzc2NjkxMTU4ODMzNDQ1NzEyNDQxOTI1MzE3NTcyNDM5MDgyNTQ4NjMxOTEzNDU1Mjc2NjE5NjY2MDI0OTgxMzIzMDQ2Mjk3NzI0OTU4MTExMzMyNDc0NzU2NDAzMzk3MjI3Mzk4MjkwNDcyODcyOTA5Nzc2NzUwMTY0OTg2MDAyOTk0MjU4NDQ0Njg1NjU2NzgyMzk1MTQ4MDE5MDExMDc4MjYwOTE3OTc1MTkzNTUzNDc2NjA4MjAzNDEwMzQzMTQ2ODYxNjU1MzI4MjM4OTQ2MjEwNDk3NTY5NDc4MTg2NDYzMTc2NDYwOTYiCisKK1Rlc3QgbWJlZHRsc19tcGlfc3ViX21waSAjMiAoVGVzdCBmb3IgbmVnYXRpdmUgcmVzdWx0KQorbWJlZHRsc19tcGlfc3ViX21waToxMDoiNjQzODA4MDA2ODAzNTU0NDM5MjMwMTI5ODU0OTYxNDkyNjk5MTUxMzg2MTA3NTM0MDEzNDMyOTE4MDczNDM5NTI0MTM4MjY0ODQyMzcwNjMwMDYxMzY5NzE1Mzk0NzM5MTM0MDkwOTIyOTM3MzMyNTkwMzg0NzIwMzk3MTMzMzM1OTY5NTQ5MjU2MzIyNjIwOTc5MDM2Njg2NjMzMjEzOTAzOTUyOTY2MTc1MTA3MDk2NzY5MTgwMDE3NjQ2MTYxODUxNTczMTQ3NTk2MzkwMTUzIjoxMDoiNTYxMjU2ODA5ODE3NTIyODIzMzM0OTgwODgzMTM1Njg5MzUwNTEzODM4MzM4Mzg1OTQ4OTk4MjE2NjQ2MzE3ODQ1NzczMzcxNzExOTM2MjQyNDMxODEzNjAwNTQ2Njk2Nzg0MTA0NTUzMjkxMTI0MzQ1NTI5NDI3MTcwODQwMDM1NDEzODQ1OTQ4NjQxMjk5NDAxNDUwNDMwODY3NjAwMzEyOTI0ODMzNDAwNjg5MjM1MDYxMTU4NzgyMjExODk4ODY0OTExMzI3NzI3Mzk2NjE2NjkwNDQ5NTg1MzExMzEzMjc3NzEiOjEwOiItNTYxMjU2ODA5ODE3NTIyODIzMzI4NTQyODAzMDY3NjUzODA2MTIxNTM3MDM5ODM2MzM0MDcxMjI1MTMyNDU2NzcwNDMzMjM3MzgyNzU1NTA4MDM2NTcyMjE3ODk4MjczMDc3ODAzOTM5NTkzOTcwMzk4MTM4MDg2MjYxNjEwNjYyMDg3OTQyMTAxNDM3MzI4MDY4MDkwNzM1Mzc1MDM3MDg2NzE1MDQzMDMzODIyOTAyOTIyMTE5MjUyNTUwMTQ3NzkzOTQzNjM1OTI3MjIwMTU1MDcxOTMzODUzODM1MzQ5Mzc2MTgiCisKK1Rlc3QgbWJlZHRsc19tcGlfc3ViX2ludCAjMQorbWJlZHRsc19tcGlfc3ViX2ludDoxMDoiMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAxMjc3NjMyOSI6LTk4NzEyMzI6MTA6IjIwMzk1Njg3ODM1NjQwMTk3NzQwNTc2NTg2NjkyOTAzNDU3NzI4MDE5Mzk5MzMxNDM0ODI2MzA5NDc3MjY0NjQ1MzI4MzA2MjcyMjcwMjI2NDc1NjEiCisKK1Rlc3QgbWJlZHRsc19tcGlfc3ViX2ludCAjMgorbWJlZHRsc19tcGlfc3ViX2ludDoxMDoiMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAxMjc3NjMyOSI6OTg3MTIzMjoxMDoiMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAwMjkwNTA5NyIKKworVGVzdCBtYmVkdGxzX21waV9zaGlmdF9sICMxCittYmVkdGxzX21waV9zaGlmdF9sOjEwOiI2NCI6MToxMDoiMTI4IgorCitUZXN0IG1iZWR0bHNfbXBpX3NoaWZ0X2wgIzIKK21iZWR0bHNfbXBpX3NoaWZ0X2w6MTA6IjY1ODM4NTU0NjkxMTczMzU1MDE2NDUxNjA4ODQwNTIzODk2MTQ2MTg4MDI1NjAyOTgzNDU5ODgzMTk3MjAzOTQ2OTQyMTc1NTExNzgxODAxMzY1MzQ5NDgxNDQzODkzMTk1NzMxNjQwMzExMTY4OTE4NzY5MTQ0Njk0MTQwNjc4ODg2OTA5ODk4MzkyOTg3NDA4MDMzMjE5NTExNzQ2NTM0NDM0NDM1MDAwODg4MDExODA0Mjc2NDk0MzIwMTg3NTg3MDkxNzQ2ODgzMzcwOTc5MTczMzI4MjM2MzMyMzk0ODAwNTk5ODI2OTc5MjIwNyI6Mzc6MTA6IjkwNDg3ODIwNTQ4NjM5MDIwNjkxOTIyMzA0NjE5NzIzMDc2MzA1NDAwOTYxNjEwMTE5ODg0ODcyNzIzMTkwNjc4NjQyODA0MTY4MzgyMzY3ODU2Njg2MTM0NTMxODY1NjQzMDY2OTgzMDE3MjQ5ODQ2Mjg2NDUwMjUxMjcyMzY0MzY1NjA1MDIyNzUwOTAwNDM5NDM3NTk1MzU1MDUyOTQ1MDM1OTE1NTc5MjE2NTU3MzMwNTA1NDM4NzM0OTU1MzQwNTI2MTQ1NDc2OTg4MjUwMTcxMTgxNDA0OTY2NzE4Mjg5MjU5NzQzMzc4ODgzNjQwOTgxMTkyNzA0IgorCitUZXN0IG1iZWR0bHNfbXBpX3NoaWZ0X3IgIzEKK21iZWR0bHNfbXBpX3NoaWZ0X3I6MTA6IjEyOCI6MToxMDoiNjQiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2hpZnRfciAjMgorbWJlZHRsc19tcGlfc2hpZnRfcjoxMDoiMTIwODE1NTcwOTc5NzAxNDg0NzA0OTA2OTc3MDAwNzYwNTY3MTgyODcxNDI5MTE0NzEyMDY5ODYxNTg5MDg0NzA2NTUwNjI2NTc1OTY3NTE2Nzg3NDM4MDA4NTkzNDkwNzIyNzc5MzM3NTQ3Mzk0MTIwNzE4MjQ4OTk1OTAwMzYzMjA5OTQ3MDI1MDYzMzM2ODgyNTU5NTM5MjA4NDMwMzE5MjE2Njg4ODg5MTE3MjIyNjMzMTU1ODM4NDY4NDU4MDQ3MDU2MzU1MjQxNTE1NDE1MTU5NzM2NDM2NDAzNDQ1NTc5Nzc3NDI1MTg5OTY5Ijo0NToxMDoiMzQzMzc4NTA1MzA1MzQyNjQxNTM0MzI5NTA3NjM3NjA5NjE1MzA5NDA1MTQwNTYzNzE3NTk0MjY2MDc3NzY3MDQ5ODM3OTkyMTM1NDE1Nzc5NTIxOTU3ODI2NDEzNzk4NTY0OTQwNzk4MTY1MTIyNjAyOTkwMzQ4MzQzMzI2OTA5MzcyMTU3ODAwNDI4NzI5MTY3ODMyNDk4MjI5Nzg2MDk0NzczMDAxMjIxNzAyODM0OTYyODk5OTM3ODMwOTYzMDYwMTk3MTY0MDU4NzUwNDg4Mzc4OTUxODg5NjgxNzQ1NyIKKworVGVzdCBtYmVkdGxzX21waV9zaGlmdF9yICM0CittYmVkdGxzX21waV9zaGlmdF9yOjE2OiJGRkZGRkZGRkZGRkZGRkZGIjo2MzoxNjoiMDEiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2hpZnRfciAjNAorbWJlZHRsc19tcGlfc2hpZnRfcjoxNjoiRkZGRkZGRkZGRkZGRkZGRiI6NjQ6MTY6IjAwIgorCitUZXN0IG1iZWR0bHNfbXBpX3NoaWZ0X3IgIzYKK21iZWR0bHNfbXBpX3NoaWZ0X3I6MTY6IkZGRkZGRkZGRkZGRkZGRkYiOjY1OjE2OiIwMCIKKworVGVzdCBtYmVkdGxzX21waV9zaGlmdF9yICM3CittYmVkdGxzX21waV9zaGlmdF9yOjE2OiJGRkZGRkZGRkZGRkZGRkZGIjoxMjg6MTY6IjAwIgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbXVsX21waSAjMQorbWJlZHRsc19tcGlfbXVsX21waToxMDoiNSI6MTA6IjciOjEwOiIzNSIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX211bF9tcGkgIzIKK21iZWR0bHNfbXBpX211bF9tcGk6MTA6Ii01IjoxMDoiNyI6MTA6Ii0zNSIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX211bF9tcGkgIzMKK21iZWR0bHNfbXBpX211bF9tcGk6MTA6IjUiOjEwOiItNyI6MTA6Ii0zNSIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX211bF9tcGkgIzQKK21iZWR0bHNfbXBpX211bF9tcGk6MTA6Ii01IjoxMDoiLTciOjEwOiIzNSIKKworVGVzdCBtYmVkdGxzX21waV9tdWxfbXBpICMxCittYmVkdGxzX21waV9tdWxfbXBpOjEwOiIyODkxMTcxMDAxNzMyMDIwNTk2NjE2NzgyMDcyNTMxMzIzNDM2MTUzNTI1OTE2MzA0NTg2Nzk4NjI3NzQ3ODE0NTA4MTA3Njg0NTg0NjQ5MzUyMTM0ODY5MzI1MzUzMDAxMTI0Mzk4ODE2MDE0ODA2MzQyNDgzNzg5NTk3MTk0ODI0NDE2Nzg2NzIzNjkyMzkxOTUwNjk2MjMxMjE4NTgyOTkxNDQ4Mjk5MzQ3ODk0NzY1NzQ3MjM1MTQ2MTMzNjcyOTY0MTQ4NTA2OTMyMzYzNTQyNDY5MjkzMDI3ODg4ODkyMzQ1MDA2MDU0NjQ2NTg4MzQ5MDk0NDI2NTE0Nzg1MTAzNjgxNzQzMzk3MDk4NDc0NzczMzAyMDUyMjI1OTUzNyI6MTA6IjE2NDcxNTgxODkxNzAxNzk0NzY0NzA0MDA5NzE5MDU3MzQ5OTk2MjcwMjM5OTQ4OTkzNDUyMjY4ODEyOTc1MDM3MjQwNTg2MDk5OTI0NzEyNzE1MzY2OTY3NDg2NTg3NDE3ODAzNzUzOTE2MzM0MzMxMzU1NTczNzc2OTQ1MjM4ODcxNTEyMDI2ODMyODEwNjI2MjI2MTY0MzQ2MzI4ODA3NDA3NjY5MzY2MDI5OTI2MjIxNDE1MzgzNTYwODE0MzM4ODI4NDQ5NjQyMjY1Mzc3ODIyNzU5NzY4MDExNDA2NzU3MDYxMDYzNTI0NzY4MTQwNTY3ODY3MzUwMjA4NTU0NDM5MzQyMzIwNDEwNTUxMzQxNjc1MTE5MDc4MDUwOTUzIjoxMDoiNDc2MjIxNTk5MTc5NDI0ODg3NjY5NTE1ODI5MjMxMjIzMjYzOTM5MzQyMTM1NjgxNzkxNjA1ODQyNTQwNDI5MzIxMDM4MTQ0NjMzMzIzOTQxMjQ4NzA2NDA1Mzc1NzIzNDgyOTEyNTM1MTkyMzYzODQ1MTE2MTU0MjM2NDY1MTg0MTQ3NTk5Njk3ODQxMjczNDI0ODkxNDEwMDAyNzgxOTY3OTYyMTg2MjUyNTgzMzExMTE1NzA4MTI4MTY3MTcxMjYyMjA2OTE5NTE0NTg3ODk5ODgzNTQ3Mjc5NjQ3MDI1OTUyODM3NTE2MzI0NjQ5NjU2OTEzNTgwNDExNjExMjk3MzEyNjc4OTU1ODAxODk5NTM2OTM3NTc3NDc2ODE5NjY3ODYxMDUzMDYzNDMyOTA2MDcxMzE1NzI3OTQ4ODI2Mjc2MDkyNTQ1NzM5NDMyMDA1OTYyNzgxNTYyNDAzNzk1NDU1MTYyNDgzMTU5MzYyNTg1MjgxMjQ4MjY1MDA1NDQxNzE1MDgwMTk3ODAwMzM1NzU3ODcxNTg4MDQ1OTU5NzU0NTQ3ODM2ODI1OTc3MTY5MTI1ODY2MzI0MTI4NDQ5Njk5ODc3MDc2NzYyMzE2NzY4MTI3ODE2MDc0NTg3NzY2Nzk5MDE4NjI2MTc5MTk5Nzc2MTg4NDkwMDg3MTAzODY5MTY0MTIyOTA2NzkxNDQwMTAxODIyNTk0MTM5NjQ4OTczNDU0NzE2MjU2MzgzMjk0NjkwODE3NTc2MTg4NzYxIgorCitUZXN0IG1iZWR0bHNfbXBpX211bF9pbnQgIzEKK21iZWR0bHNfbXBpX211bF9pbnQ6MTA6IjIwMzk1Njg3ODM1NjQwMTk3NzQwNTc2NTg2NjkyOTAzNDU3NzI4MDE5Mzk5MzMxNDM0ODI2MzA5NDc3MjY0NjQ1MzI4MzA2MjcyMjcwMTI3NzYzMjkiOjk4NzEyMzI6MTA6IjIwMTMzMDU2NjQyNTE4MjI2MDQyMzEwNzMwMTAxMzc2Mjc4NDgzNTQ3MjM5MTMwMTIzODA2MzM4MDU1Mzg3ODAzOTQzMzQyNzM4MDYzMzU5NzgyMTA3NjY3MzI4IjoiPT0iCisKK1Rlc3QgbWJlZHRsc19tcGlfbXVsX2ludCAjMiAoVW5zaWduZWQsIHRodXMgZmFpbHVyZSkKK21iZWR0bHNfbXBpX211bF9pbnQ6MTA6IjIwMzk1Njg3ODM1NjQwMTk3NzQwNTc2NTg2NjkyOTAzNDU3NzI4MDE5Mzk5MzMxNDM0ODI2MzA5NDc3MjY0NjQ1MzI4MzA2MjcyMjcwMTI3NzYzMjkiOi05ODcxMjMyOjEwOiItMjAxMzMwNTY2NDI1MTgyMjYwNDIzMTA3MzAxMDEzNzYyNzg0ODM1NDcyMzkxMzAxMjM4MDYzMzgwNTUzODc4MDM5NDMzNDI3MzgwNjMzNTk3ODIxMDc2NjczMjgiOiIhPSIKKworVGVzdCBtYmVkdGxzX21waV9tdWxfaW50ICMzCittYmVkdGxzX21waV9tdWxfaW50OjEwOiItMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAxMjc3NjMyOSI6OTg3MTIzMjoxMDoiLTIwMTMzMDU2NjQyNTE4MjI2MDQyMzEwNzMwMTAxMzc2Mjc4NDgzNTQ3MjM5MTMwMTIzODA2MzM4MDU1Mzg3ODAzOTQzMzQyNzM4MDYzMzU5NzgyMTA3NjY3MzI4IjoiPT0iCisKK1Rlc3QgbWJlZHRsc19tcGlfbXVsX2ludCAjNCAoVW5zaWduZWQsIHRodXMgZmFpbHVyZSkKK21iZWR0bHNfbXBpX211bF9pbnQ6MTA6Ii0yMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDEyNzc2MzI5IjotOTg3MTIzMjoxMDoiMjAxMzMwNTY2NDI1MTgyMjYwNDIzMTA3MzAxMDEzNzYyNzg0ODM1NDcyMzkxMzAxMjM4MDYzMzgwNTUzODc4MDM5NDMzNDI3MzgwNjMzNTk3ODIxMDc2NjczMjgiOiIhPSIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2Rpdl9tcGkgIzEKK21iZWR0bHNfbXBpX2Rpdl9tcGk6MTA6IjEwMDAiOjEwOiIxMyI6MTA6Ijc2IjoxMDoiMTIiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2Rpdl9tcGkgIzIgKERpdmlkZSBieSB6ZXJvKQorbWJlZHRsc19tcGlfZGl2X21waToxMDoiMTAwMCI6MTA6IjAiOjEwOiIxIjoxMDoiMSI6TUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8KKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2Rpdl9tcGkgIzMKK21iZWR0bHNfbXBpX2Rpdl9tcGk6MTA6IjEwMDAiOjEwOiItMTMiOjEwOiItNzYiOjEwOiIxMiI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2Rpdl9tcGkgIzEKK21iZWR0bHNfbXBpX2Rpdl9tcGk6MTA6IjIwMTMzMDU2NjQyNTE4MjI2MDQyMzEwNzMwMTAxMzc2Mjc4NDgzNTQ3MjM5MTMwMTIzODA2MzM4MDU1Mzg3ODAzOTQzMzQyNzM4MDYzMzU5NzgyMTA3NjY3MzI4IjoxMDoiMzQiOjEwOiI1OTIxNDg3MjQ3Nzk5NDc4MjQ3NzM4NDUwMDI5ODE2NTUyNDk1MTYwOTUyNjg1MzMwNTMxMjc1ODk4NjQzNDcxNzQ4MDQxOTgxNzgzMzQxMTEyMzg0NjA4MDMiOjEwOiIyNiI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2Rpdl9tcGkgIzIKK21iZWR0bHNfbXBpX2Rpdl9tcGk6MTA6IjQ3NjIyMTU5OTE3OTQyNDg4NzY2OTUxNTgyOTIzMTIyMzI2MzkzOTM0MjEzNTY4MTc5MTYwNTg0MjU0MDQyOTMyMTAzODE0NDYzMzMyMzk0MTI0ODcwNjQwNTM3NTcyMzQ4MjkxMjUzNTE5MjM2Mzg0NTExNjE1NDIzNjQ2NTE4NDE0NzU5OTY5Nzg0MTI3MzQyNDg5MTQxMDAwMjc4MTk2Nzk2MjE4NjI1MjU4MzMxMTExNTcwODEyODE2NzE3MTI2MjIwNjkxOTUxNDU4Nzg5OTg4MzU0NzI3OTY0NzAyNTk1MjgzNzUxNjMyNDY0OTY1NjkxMzU4MDQxMTYxMTI5NzMxMjY3ODk1NTgwMTg5OTUzNjkzNzU3NzQ3NjgxOTY2Nzg2MTA1MzA2MzQzMjkwNjA3MTMxNTcyNzk0ODgyNjI3NjA5MjU0NTczOTQzMjAwNTk2Mjc4MTU2MjQwMzc5NTQ1NTE2MjQ4MzE1OTM2MjU4NTI4MTI0ODI2NTAwNTQ0MTcxNTA4MDE5NzgwMDMzNTc1Nzg3MTU4ODA0NTk1OTc1NDU0NzgzNjgyNTk3NzE2OTEyNTg2NjMyNDEyODQ0OTY5OTg3NzA3Njc2MjMxNjc2ODEyNzgxNjA3NDU4Nzc2Njc5OTAxODYyNjE3OTE5OTc3NjE4ODQ5MDA4NzEwMzg2OTE2NDEyMjkwNjc5MTQ0MDEwMTgyMjU5NDEzOTY0ODk3MzQ1NDcxNjI1NjM4MzI5NDY5MDgxNzU3NjE4ODc2MiI6MTA6IjI4OTExNzEwMDE3MzIwMjA1OTY2MTY3ODIwNzI1MzEzMjM0MzYxNTM1MjU5MTYzMDQ1ODY3OTg2Mjc3NDc4MTQ1MDgxMDc2ODQ1ODQ2NDkzNTIxMzQ4NjkzMjUzNTMwMDExMjQzOTg4MTYwMTQ4MDYzNDI0ODM3ODk1OTcxOTQ4MjQ0MTY3ODY3MjM2OTIzOTE5NTA2OTYyMzEyMTg1ODI5OTE0NDgyOTkzNDc4OTQ3NjU3NDcyMzUxNDYxMzM2NzI5NjQxNDg1MDY5MzIzNjM1NDI0NjkyOTMwMjc4ODg4OTIzNDUwMDYwNTQ2NDY1ODgzNDkwOTQ0MjY1MTQ3ODUxMDM2ODE3NDMzOTcwOTg0NzQ3NzMzMDIwNTIyMjU5NTM3IjoxMDoiMTY0NzE1ODE4OTE3MDE3OTQ3NjQ3MDQwMDk3MTkwNTczNDk5OTYyNzAyMzk5NDg5OTM0NTIyNjg4MTI5NzUwMzcyNDA1ODYwOTk5MjQ3MTI3MTUzNjY5Njc0ODY1ODc0MTc4MDM3NTM5MTYzMzQzMzEzNTU1NzM3NzY5NDUyMzg4NzE1MTIwMjY4MzI4MTA2MjYyMjYxNjQzNDYzMjg4MDc0MDc2NjkzNjYwMjk5MjYyMjE0MTUzODM1NjA4MTQzMzg4Mjg0NDk2NDIyNjUzNzc4MjI3NTk3NjgwMTE0MDY3NTcwNjEwNjM1MjQ3NjgxNDA1Njc4NjczNTAyMDg1NTQ0MzkzNDIzMjA0MTA1NTEzNDE2NzUxMTkwNzgwNTA5NTMiOjEwOiIxIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfZGl2X21waSAjMworbWJlZHRsc19tcGlfZGl2X21waToxMDoiMTAwMCI6MTA6IjciOjEwOiIxNDIiOjEwOiI2IjowCisKK1Rlc3QgbWJlZHRsc19tcGlfZGl2X21waSAjNAorbWJlZHRsc19tcGlfZGl2X21waToxMDoiNzc3IjoxMDoiNyI6MTA6IjExMSI6MTA6IjAiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2Rpdl9pbnQgIzEKK21iZWR0bHNfbXBpX2Rpdl9pbnQ6MTA6IjEwMDAiOjEzOjEwOiI3NiI6MTA6IjEyIjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9kaXZfaW50ICMyIChEaXZpZGUgYnkgemVybykKK21iZWR0bHNfbXBpX2Rpdl9pbnQ6MTA6IjEwMDAiOjA6MTA6IjEiOjEwOiIxIjpNQkVEVExTX0VSUl9NUElfRElWSVNJT05fQllfWkVSTworCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfZGl2X2ludCAjMworbWJlZHRsc19tcGlfZGl2X2ludDoxMDoiMTAwMCI6LTEzOjEwOiItNzYiOjEwOiIxMiI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2Rpdl9pbnQgIzEKK21iZWR0bHNfbXBpX2Rpdl9pbnQ6MTA6IjIwMTMzMDU2NjQyNTE4MjI2MDQyMzEwNzMwMTAxMzc2Mjc4NDgzNTQ3MjM5MTMwMTIzODA2MzM4MDU1Mzg3ODAzOTQzMzQyNzM4MDYzMzU5NzgyMTA3NjY3MzI4IjozNDoxMDoiNTkyMTQ4NzI0Nzc5OTQ3ODI0NzczODQ1MDAyOTgxNjU1MjQ5NTE2MDk1MjY4NTMzMDUzMTI3NTg5ODY0MzQ3MTc0ODA0MTk4MTc4MzM0MTExMjM4NDYwODAzIjoxMDoiMjYiOjAKKworVGVzdCBtYmVkdGxzX21waV9kaXZfaW50ICMyCittYmVkdGxzX21waV9kaXZfaW50OjEwOiIyMDEzMzA1NjY0MjUxODIyNjA0MjMxMDczMDEwMTM3NjI3ODQ4MzU0NzIzOTEzMDEyMzgwNjMzODA1NTM4NzgwMzk0MzM0MjczODA2MzM1OTc4MjEwNzY2NzMyOCI6LTM0OjEwOiItNTkyMTQ4NzI0Nzc5OTQ3ODI0NzczODQ1MDAyOTgxNjU1MjQ5NTE2MDk1MjY4NTMzMDUzMTI3NTg5ODY0MzQ3MTc0ODA0MTk4MTc4MzM0MTExMjM4NDYwODAzIjoxMDoiMjYiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX21vZF9tcGkgIzEKK21iZWR0bHNfbXBpX21vZF9tcGk6MTA6IjEwMDAiOjEwOiIxMyI6MTA6IjEyIjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9tb2RfbXBpICMyIChEaXZpZGUgYnkgemVybykKK21iZWR0bHNfbXBpX21vZF9tcGk6MTA6IjEwMDAiOjEwOiIwIjoxMDoiMCI6TUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8KKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX21vZF9tcGkgIzMKK21iZWR0bHNfbXBpX21vZF9tcGk6MTA6Ii0xMDAwIjoxMDoiMTMiOjEwOiIxIjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9tb2RfbXBpICM0IChOZWdhdGl2ZSBtb2R1bG8pCittYmVkdGxzX21waV9tb2RfbXBpOjEwOiIxMDAwIjoxMDoiLTEzIjoxMDoiLTEiOk1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbW9kX21waSAjNSAoTmVnYXRpdmUgbW9kdWxvKQorbWJlZHRsc19tcGlfbW9kX21waToxMDoiLTEwMDAiOjEwOiItMTMiOjEwOiItMTIiOk1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbW9kX2ludCAjMQorbWJlZHRsc19tcGlfbW9kX2ludDoxMDoiMTAwMCI6MTM6MTI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbW9kX2ludCAjMiAoRGl2aWRlIGJ5IHplcm8pCittYmVkdGxzX21waV9tb2RfaW50OjEwOiIxMDAwIjowOjA6TUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8KKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX21vZF9pbnQgIzMKK21iZWR0bHNfbXBpX21vZF9pbnQ6MTA6Ii0xMDAwIjoxMzoxOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX21vZF9pbnQgIzQgKE5lZ2F0aXZlIG1vZHVsbykKK21iZWR0bHNfbXBpX21vZF9pbnQ6MTA6IjEwMDAiOi0xMzowOk1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbW9kX2ludCAjNSAoTmVnYXRpdmUgbW9kdWxvKQorbWJlZHRsc19tcGlfbW9kX2ludDoxMDoiLTEwMDAiOi0xMzowOk1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbW9kX2ludCAjNiAoQnkgMSkKK21iZWR0bHNfbXBpX21vZF9pbnQ6MTA6IjEwMDAiOjE6MDowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9tb2RfaW50ICM3IChCeSAyKQorbWJlZHRsc19tcGlfbW9kX2ludDoxMDoiMTAwMSI6MjoxOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX21vZF9pbnQgIzggKEJ5IDIpCittYmVkdGxzX21waV9tb2RfaW50OjEwOiIxMDAwIjoyOjA6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfZXhwX21vZCAjMQorbWJlZHRsc19tcGlfZXhwX21vZDoxMDoiMjMiOjEwOiIxMyI6MTA6IjI5IjoxMDoiIjoxMDoiMjQiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2V4cF9tb2QgIzIgKEV2ZW4gTikKK21iZWR0bHNfbXBpX2V4cF9tb2Q6MTA6IjIzIjoxMDoiMTMiOjEwOiIzMCI6MTA6IiI6MTA6IjAiOk1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfZXhwX21vZCAjMyAoTmVnYXRpdmUgTikKK21iZWR0bHNfbXBpX2V4cF9tb2Q6MTA6IjIzIjoxMDoiMTMiOjEwOiItMjkiOjEwOiIiOjEwOiIwIjpNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2V4cF9tb2QgIzQgKE5lZ2F0aXZlIGJhc2UpCittYmVkdGxzX21waV9leHBfbW9kOjEwOiItMjMiOjEwOiIxMyI6MTA6IjI5IjoxMDoiIjoxMDoiNSI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfZXhwX21vZCAjNSAoTmVnYXRpdmUgZXhwb25lbnQpCittYmVkdGxzX21waV9leHBfbW9kOjEwOiIyMyI6MTA6Ii0xMyI6MTA6IjI5IjoxMDoiIjoxMDoiMCI6TUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9leHBfbW9kICM3IChOZWdhdGl2ZSBiYXNlICsgZXhwb25lbnQpCittYmVkdGxzX21waV9leHBfbW9kOjEwOiItMjMiOjEwOiItMTMiOjEwOiIyOSI6MTA6IiI6MTA6IjAiOk1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQQorCitUZXN0IG1iZWR0bHNfbXBpX2V4cF9tb2QgIzEKK21iZWR0bHNfbXBpX2V4cF9tb2Q6MTA6IjQzMzAxOTI0MDkxMDM3NzQ3ODIxNzM3MzU3Mjk1OTU2MDEwOTgxOTY0ODY0NzAxNjA5NjU2MDUyMzc2OTAxMDg4MTE3Mjg2OTA4MzMzODI4NTU3Mzc1NjU3NDU1NzM5NTg2Mjk2NTA5NTAxNjQ4Mzg2NzgxMzA0MzY2Mzk4MTk0NjQ3NzY5ODQ2NjUwMTQ1MTgzMjQwNzU5MjMyNzM1NjMzMTI2MzEyNDU1NTEzNzczMjM5MzkzODI0MjI4NTc4MjE0NDkyODc1MzkxOTU4ODYzMjY3OTA1MDc5OTE5ODkzNzEzMjkyMjE0NTA4NDg0NyI6MTA6IjU3ODE1MzgzMjc5Nzc4Mjg4OTcxNTA5MDkxNjY3Nzg0MDc2NTkyNTA0NTgzNzk2NDU4MjMwNjIwNDI0OTI0NjE1NzY3NTg1MjY3NTc0OTA5MTAwNzM2MjgwMDg2MTM5Nzc1NTA1NDYzODI3NzQ3NzU1NzA4ODgxMzAwMjk3NjM1NzE1Mjg2OTk1NzQ3MTc1ODMyMjg5Mzk1MzU5NjAyMzQ0NjQyMzA4ODI1NzM2MTU5MzAzODQ5NzkxMDAzNzkxMDI5MTU2NTc0ODM4NjY3NTUzNzE1NTk4MTE3MTg3Njc3NjA1OTQ5MTk0NTY5NzEzNTQxODQxMTM3MjEiOjEwOiI1ODMxMzcwMDc3OTcyNzY5MjM5NTY4OTEyMTYyMTYwMjIxNDQwNTIwNDQwOTEzMTEzODg2MDE2NTI5NjE0MDk1NTc1MTY0MjE2MTI4NzQ1NzE1NTQ0MTU2MDY3NDY0NzkxMDU3OTU4MzMxNDU1ODM5NTk2MjIxMTc0MTg1MzExNjYzOTExODQ5MzkwNjY1MjA4Njk4MDA4NTc1MzA0MjE4NzMyNTAxMTQ3NzMyMDQzNTQ5NjM4NjQ3MjkzODY5NTc0MjcyNzY0NDg2ODMwOTI0OTE5NDc1NjY5OTIwNzcxMzY1NTMwNjYyNzMyMDc3NzcxMzQzMDMzOTc3MjQ2NzkxMzg4MzMxMjY3MDA5NTciOjEwOiIiOjEwOiIxMTQ1OTc0NDkyNzY2ODQzNTUxNDQ5MjA2NzAwMDcxNDc5NTMyMzI2NTk0MzYzODAxNjM0NjE1NTMxODY5NDAxMTM5Mjk3NzcxOTYwMTgxNjQxNDk3MDM1NjY0NzI5MzY1Nzg4OTA5OTEwNDkzNDQ0NTkyMDQxOTk4ODgyNTQ5MDcxMTM0OTU3OTQ3MzA0NTI2OTk4NDIyNzM5Mzk1ODEwNDgxNDIwMDQ4MzQzMzAzNjk0ODM4MTM4NzY2MTg3NzI1Nzg4NjkwODMyNDgwNjE2MTY0NDQzOTIwOTE2OTM3ODcwMzk2MzYzMTY4NDU1MTIyOTIxMjcwOTc4NjUwMjYyOTAxNzMwMDQ4NjA3MzYiOjAKKworVGVzdCBtYmVkdGxzX21waV9leHBfbW9kIChOZWdhdGl2ZSBiYXNlKQorbWJlZHRsc19tcGlfZXhwX21vZDoxMDoiLTEwMDAwMDAwMDAwIjoxMDoiMTAwMDAwMDAwMDAiOjEwOiI5OTk5OSI6MTA6IiI6MTA6Ijk5OTk4IjowCisKK1Rlc3QgbWJlZHRsc19tcGlfZXhwX21vZCAoTmVnYXRpdmUgYmFzZSkKK21iZWR0bHNfbXBpX2V4cF9tb2Q6MTY6Ii05ZjEzMDEyY2Q5MmFhNzJmYjg2YWM4ODc5ZDJmZGU0ZjdmZDY2MWFhYWU0M2EwMDk3MWYwODFjYzYwY2EyNzcwNTlkNWMzN2U4OTY1MmUyYWYyNTg1ZDI4MWQ2NmVmNmE5ZDM4YTExN2U5NjA4ZTllNzU3NGNkMTQyZGM1NTI3ODgzOGEyMTYxZGQ1NmRiOTQ3MGQ0YzFkYTJkNWRmMTVhOTA4ZWUyZWI4ODZhYWE4OTBmMjNiZTE2ZGU1OTM4NjY2M2ExMmYxYWZiYjMyNTQzMWEzZTgzNWUzZmQ4OWI5OGI5NmE2Zjc3MzgyZjQ1OGVmOWEzN2UxZjg0YTAzMDQ1Yzg2NzZhYjU1MjkxYTk0YzIyMjhlYTE1NDQ4ZWU5NmI2MjZiOTk4IjoxNjoiNDBhNTRkMWI5ZTg2Nzg5ZjA2ZDk2MDdmYjE1ODY3MmQ2NDg2NzY2NWM3M2VlOWFiYjU0NWZjN2E3ODU2MzRiMzU0YzdiYWU1Yjk2MmNlODA0MGNmNDVmMmMxZjNkMzY1OWIyZWU1ZWRlMTc1MzRjOGZjMmVjODVjODE1ZThkZjFmZTcwNDhkMTJjOTBlZTMxYjg4YTY4YTA4MWYxN2YwZDhjZTVmNDAzMDUyMWU5NDAwMDgzYmNlYTczYTQyOTAzMWQ0Y2E3OTQ5YzIwMDBkNTk3MDg4ZTBjMzlhNjAxNGQ4YmY5NjJiNzNiYjJlODA4M2JkMDM5MGE0ZTAwYjliMyI6MTY6ImVlYWYwYWI5YWRiMzhkZDY5YzMzZjgwYWZhOGZjNWU4NjA3MjYxODc3NWZmM2MwYjllYTIzMTRjOWMyNTY1NzZkNjc0ZGY3NDk2ZWE4MWQzMzgzYjQ4MTNkNjkyYzZlMGUwZDVkOGUyNTBiOThiZTQ4ZTQ5NWMxZDYwODlkYWQxNWRjN2Q3YjQ2MTU0ZDZiNmNlOGVmNGFkNjliMTVkNDk4MjU1OWIyOTdiY2YxODg1YzUyOWY1NjY2NjBlNTdlYzY4ZWRiYzNjMDU3MjZjYzAyZmQ0Y2JmNDk3NmVhYTlhZmQ1MTM4ZmU4Mzc2NDM1YjlmYzYxZDJmYzBlYjA2ZTMiOjE2OiIiOjE2OiIyMWFjYzcxOTllMWI5MGY5YjQ4NDRmZmUxMmMxOWYwMGVjNTQ4YzVkMzJiMjFjNjQ3ZDQ4YjYwMTVkOGViOWVjOWRiMDViNGYzZDQ0ZGI0MjI3YTJiNTY1OWMxYTdjY2ViOWQ1ZmE4ZmE2MDM3NjA0Nzk1M2NlNzM5N2Q5MGFhZWI3NDY1ZTE0ZTgyMDczNGY4NGFhNTJhZDBmYzY2NzAxYmNiYjk5MWQ1NzcxNTgwNmExMTUzMTI2OGUxZTgzZGQ0ODI4OGM3MmI0MjRhNjI4N2U5Y2U0ZTVjYzRkYjBkZDY3NjE0YWVjYzIzYjAxMjRhNTc3NmQzNmU1Yzg5NDgzIjowCisKK0Jhc2UgdGVzdCBHQ0QgIzEKK21iZWR0bHNfbXBpX2djZDoxMDoiNjkzIjoxMDoiNjA5IjoxMDoiMjEiCisKK0Jhc2UgdGVzdCBHQ0QgIzIKK21iZWR0bHNfbXBpX2djZDoxMDoiMTc2NCI6MTA6Ijg2OCI6MTA6IjI4IgorCitCYXNlIHRlc3QgR0NEICMzCittYmVkdGxzX21waV9nY2Q6MTA6Ijc2ODQ1NDkyMyI6MTA6IjU0MjE2NzgxNCI6MTA6IjEiCisKK1Rlc3QgR0NEICMxCittYmVkdGxzX21waV9nY2Q6MTA6IjQzMzAxOTI0MDkxMDM3NzQ3ODIxNzM3MzU3Mjk1OTU2MDEwOTgxOTY0ODY0NzAxNjA5NjU2MDUyMzc2OTAxMDg4MTE3Mjg2OTA4MzMzODI4NTU3Mzc1NjU3NDU1NzM5NTg2Mjk2NTA5NTAxNjQ4Mzg2NzgxMzA0MzY2Mzk4MTk0NjQ3NzY5ODQ2NjUwMTQ1MTgzMjQwNzU5MjMyNzM1NjMzMTI2MzEyNDU1NTEzNzczMjM5MzkzODI0MjI4NTc4MjE0NDkyODc1MzkxOTU4ODYzMjY3OTA1MDc5OTE5ODkzNzEzMjkyMjE0NTA4NDg0NyI6MTA6IjU3ODE1MzgzMjc5Nzc4Mjg4OTcxNTA5MDkxNjY3Nzg0MDc2NTkyNTA0NTgzNzk2NDU4MjMwNjIwNDI0OTI0NjE1NzY3NTg1MjY3NTc0OTA5MTAwNzM2MjgwMDg2MTM5Nzc1NTA1NDYzODI3NzQ3NzU1NzA4ODgxMzAwMjk3NjM1NzE1Mjg2OTk1NzQ3MTc1ODMyMjg5Mzk1MzU5NjAyMzQ0NjQyMzA4ODI1NzM2MTU5MzAzODQ5NzkxMDAzNzkxMDI5MTU2NTc0ODM4NjY3NTUzNzE1NTk4MTE3MTg3Njc3NjA1OTQ5MTk0NTY5NzEzNTQxODQxMTM3MjEiOjEwOiIxIgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfaW52X21vZCAjMQorbWJlZHRsc19tcGlfaW52X21vZDoxMDoiMyI6MTA6IjExIjoxMDoiNCI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfaW52X21vZCAjMgorbWJlZHRsc19tcGlfaW52X21vZDoxMDoiMyI6MTA6IjAiOjEwOiIwIjpNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2ludl9tb2QgIzMKK21iZWR0bHNfbXBpX2ludl9tb2Q6MTA6IjMiOjEwOiItMTEiOjEwOiI0IjpNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2ludl9tb2QgIzQKK21iZWR0bHNfbXBpX2ludl9tb2Q6MTA6IjIiOjEwOiI0IjoxMDoiMCI6TUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFCisKK1Rlc3QgbWJlZHRsc19tcGlfaW52X21vZCAjMQorbWJlZHRsc19tcGlfaW52X21vZDoxNjoiYWE0ZGY1Y2IxNGI0YzMxMjM3Zjk4YmQxZmFmNTI3YzI4M2MyZDBmM2VlYzg5NzE4NjY0YmEzM2Y5NzYyOTA3YyI6MTY6ImZmZmJiZDY2MGI5NDQxMmFlNjFlYWQ5YzI5MDZhMzQ0MTE2ZTMxNmEyNTZmZDM4Nzg3NGM2YzY3NWIxZDU4N2QiOjE2OiI4ZDZhNWMxZDdhZGVhZTNlOTRiOWJjZDJjNDdlMGQ0NmU3NzhiYzg4MDRhMmNjMjVjMDJkNzc1ZGMzZDA1YjBjIjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMCI6TUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMSI6TUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMworZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMiI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzQKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjMiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICM1CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiI0IjpNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICM2CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiI1IjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjNworZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMjciOk1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzgKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjQ3IjowCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzFhCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiI4MzcyNjcyODg4MzE0NjE1MTk3OTY2ODI0MzMyNjA5NzA0OTI4OTIwODQ4Mjk4NzY4NTk2NTI3NjQzOTE1NzE2MjMzNzQ3NjQ3NzU4MSI6TUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzFiCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiI4MTI0ODYzNzQxMDU4NDkyMTQ1NDg2OTMwODQ4ODg5OTI2NzA5NjUzMDY0MzYzMjczMDI1ODIwMTI1NjA5MjU4MjI4MTI2MzI0NDY0MSI6TUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzJhCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiI4MjcxMzE1MDcyMjE2NTQ1NjM5Mzc4MzI2ODY2OTYyMDA5OTU1OTU4MzU2OTQ0Mzc5ODM2NTg4NDA4NzAwMzY1ODYxMjQxNjgxODY5Njc3OTY4MDkxMTc3NDkwNDc0MzA3Njg4MjU4MjI4NTcwNDI0MzI3MjI4MjgwOTY3NzkwOTg0OTgxOTI0NTk4MTkzMDYzMjEwNzM5Njg3MzUxNzc1MzExNjQ1NjUzMDU2MzUyODExOTgxNDgwMzI2MTIwMjk3Njc1ODQ2NDQzMDU5MTIwOTkiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMmIKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjgyNzEzMTUwNzIyMTY1NDU2MzkzNzgzMjY4NjY5NjIwMDk5NTU5NTgzNTY5NDQzNzk4MzY1ODg0MDg3MDAzNjU4NjEyNDE2ODE4Njk2Nzc5NjgwOTExNzc0OTA0NzQzMDc2ODgyNTgyMjg1NzA0MjQzMjcyMjgyODA5Njc3OTA5ODQ5ODE5MjQ1OTgxOTMwNjMyMTA3Mzk2ODczNTE3NzUzMTE2NDU2NTMwNTYzNTI4MTE5ODE0ODAzMjYxMjAyOTc2NzU4NDY0NDMwNTkxMjAwMSI6TUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzMKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjI4MzM0MTk4ODk3MjE3ODcxMjgyMTc1OTkiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjNAorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMTk1ODQ1OTgyNzc3NTY5OTI2MzAyNDAwNTExIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzUKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjQ3NzY5MTMxMDk4NTIwNDE0MTgyNDgwNTY2MjI4ODI0ODgzMTkiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjNQorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiNzY4NjE0MzM2NDA0NTY0NjUxIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzYKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjIwMTQ4NzYzNjYwMjQzODE5NTc4NDM2MyI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICM3CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiI4NDUxMDA0MDAxNTIxNTI5MzQzMzExMzU0NzAyNTEiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjOAorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiNTY3MTM3Mjc4MjAxNTY0MTA1NzcyMjkxMDEyMzg2MjgwMzUyNDMiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjOQorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAxMjc3NjMyOTM2NjE2MDYzMTQ0MDg4MTczMzEyMzcyODgyNjc3MTIzODc5NTM4NzA5NDAwMTU4MzA2NTY3MzM4MzI4Mjc5MTU0NDk5Njk4MzY2MDcxOTA2NzY2NDQwMDM3MDc0MjE3MTE3ODA1NjkwODcyNzkyODQ4MTQ5MTEyMDIyMjg2MzMyMTQ0ODc2MTgzMzc2MzI2NTEyMDgzNTc0ODIxNjQ3OTMzOTkyOTYxMjQ5OTE3MzE5ODM2MjE5MzA0Mjc0MjgwMjQzODAzMTA0MDE1MDAwNTYzNzkwMTIzIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiI1MzE4NzIyODkwNTQyMDQxODQxODUwODQ3MzQzNzUxMzMzOTk0MDgzMDM2MTM5ODIxMzA4NTY2NDUyOTk0NjQ5MzA5NTIxNzg2MDYwNDU4NDg4NzcxMjkxNDc4MjAzODc5OTY0MjgxNzU1NjQyMjgyMDQ3ODU4NDYxNDEyMDc1MzI0NjI5MzYzMzk4MzQxMzk0MTI0MDE5NzUzMzg3MDU3OTQ2NDY1OTU0ODczMjQzNjUxOTQ3OTI4MjIxODk0NzMwOTIyNzM5OTM1ODA1ODc5NjQ1NzE2NTk2NzgwODQ0ODQxNTI2MDM4ODEwOTQxNzY5OTU1OTQ4MTMzMDIyODQyMzIwMDYwMDE3NTIxMjgxNjg5MDEyOTM1NjAwNTE4MzM2NDY4ODE0MzYyMTkiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjMxOTcwNTMwNDcwMTE0MTUzOTE1NTcyMDEzNzIwMDk3NDY2NDY2Njc5MjUyNjA1OTQwNTc5MjUzOTY4MDk3NDkyOTQ2OTc4MzUxMjgyMTc5Mzk5NTYxMzcxODk0MzE3MTcyMzc2NTIzODg1Mzc1MjQzOTAzMjgzNTk4NTE1ODgyOTAzODUyODIxNDkyNTY1ODkxODM3MjE5Njc0MjA4OTQ2NDY4Mzk2MDIzOTkxOTk1MDg4MjM1NTg0NDc2NjA1NTM2NTE3OTkzNzYxMDMyNjEyNzY3NTE3ODg1NzMwNjI2MDk1NTU1MDQwNzA0NDQ2MzM3MDIzOTg5MDE4NzE4OTc1MDkwOTAzNjgzMzk3NjE5NzgwNDY0NjU4OTM4MDY5MDc3OTQ2Mzk3NjE3MyI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICMxMgorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMjAwNjAzODIyMTk1MzI0NjQyMzkzNTE2Mjk0MDEyOTE3NTk4OTcyOTY3NDQ5MzIwMDc0OTk5NjY3MTAzNDM0MzcxNDcwNjE2MDAwNjUyMDM2NTcwMDA5OTEyMDIxMzMyNTI3Nzg4MjUyMzAwOTAxOTA1MjM2NTc4ODAxMDQ0NjgwNDU2OTMwMzA1MzUwNDQwOTMzNTM4ODY3MzgzMTMwMTY1ODQxMTE4MDUwNzgxMzI2MjkxMDU5ODMwNTQ1ODkxNTcwNjQ4MjQzMjQxNzk1ODcxIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiI4MjcxMzE1MDcyMjE2NTQ1NjM5Mzc4MzI2ODY2OTYyMDA5OTU1OTU4MzU2OTQ0Mzc5ODM2NTg4NDA4NzAwMzY1ODYxMjQxNjgxODY5Njc3OTY4MDkxMTc3NDkwNDc0MzA3Njg4MjU4MjI4NTcwNDI0MzI3MjI4MjgwOTY3NzkwOTg0OTgxOTI0NTk4MTkzMDYzMjEwNzM5Njg3MzUxNzc1MzExNjQ1NjUzMDU2MzUyODExOTgxNDgwMzI2MTIwMjk3Njc1ODQ2NDQzMDU5MTIwOTkiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6Ijk2NDI3NDA0NzI0ODQxODc5NzE0NTA5MDk4MzE1NzE5Nzk4MDg1NTA3ODk2Njg4MjI3NjQ5MjU3Mjc4ODUzMjk1NDkwNDExMjY1NTMzODQzOTM2MTMwNjIxMzg5ODU2OTUxNjU5Mzc0NDI2NzM5MTc1NDAzMzMwNjQ2NTEyNTkxOTE5OTY5MjcwMzMyMzg3ODU1NzgzMzAyMzU3MzMxMjY4NTAwMjY3MDY2Mjg0NjQ3NzU5MjU5NzY1OTgyNjExMzQ2MDYxOTgxNTI0NDcyMTMxMSI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICMxNQorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMTcwMTQxMTgzNDYwNDY5MjMxNzMxNjg3MzAzNzE1ODg0MTA1NzI3IjowCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzE2CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiIyMTQ3NDgzNjQ3IjowCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzE3CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiI5NjE3NDg5NDEiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMTgKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjE3OTQyNDY5MSI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICMxOQorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMzI0NTI4NjciOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMjAKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjQ5OTc5Njg3IjowCisKK1Rlc3QgbWJlZHRsc19tcGlfZ2VuX3ByaW1lIChUb28gc21hbGwpCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2dlbl9wcmltZToyOjA6TUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBCisKK1Rlc3QgbWJlZHRsc19tcGlfZ2VuX3ByaW1lIChPSywgbWluaW11bSBzaXplKQorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9nZW5fcHJpbWU6MzowOjAKKworVGVzdCBtYmVkdGxzX21waV9nZW5fcHJpbWUgKExhcmdlcikKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfZ2VuX3ByaW1lOjEyODowOjAKKworVGVzdCBtYmVkdGxzX21waV9nZW5fcHJpbWUgKFNhZmUpCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2dlbl9wcmltZToxMjg6MTowCisKK1Rlc3QgYml0IGdldHRpbmcgKFZhbHVlIGJpdCAyNSkKK21iZWR0bHNfbXBpX2dldF9iaXQ6MTA6IjQ5OTc5Njg3IjoyNToxCisKK1Rlc3QgYml0IGdldHRpbmcgKExhcmdlciBidXQgc2FtZSBsaW1iKQorbWJlZHRsc19tcGlfZ2V0X2JpdDoxMDoiNDk5Nzk2ODciOjI2OjAKKworVGVzdCBiaXQgZ2V0dGluZyAoTGFyZ2VyIGFuZCBub24tZXhpc3RpbmcgbGltYikKK21iZWR0bHNfbXBpX2dldF9iaXQ6MTA6IjQ5OTc5Njg3Ijo1MDA6MAorCitUZXN0IGJpdCBnZXR0aW5nIChWYWx1ZSBiaXQgMjQpCittYmVkdGxzX21waV9nZXRfYml0OjEwOiI0OTk3OTY4NyI6MjQ6MAorCitUZXN0IGJpdCBnZXR0aW5nIChWYWx1ZSBiaXQgMjMpCittYmVkdGxzX21waV9nZXRfYml0OjEwOiI0OTk3OTY4NyI6MjM6MQorCitUZXN0IGJpdCBzZXQgKENoYW5nZSBleGlzdGluZyB2YWx1ZSB3aXRoIGEgMSkKK21iZWR0bHNfbXBpX3NldF9iaXQ6MTA6IjQ5OTc5Njg3IjoyNDoxOjEwOiI2Njc1NjkwMyI6MAorCitUZXN0IGJpdCBzZXQgKENoYW5nZSBleGlzdGluZyB2YWx1ZSB3aXRoIGEgMCkKK21iZWR0bHNfbXBpX3NldF9iaXQ6MTA6IjQ5OTc5Njg3IjoyNTowOjEwOiIxNjQyNTI1NSI6MAorCitUZXN0IGJpdCBzZXQgKEFkZCBhYm92ZSBleGlzdGluZyBsaW1icyB3aXRoIGEgMCkKK21iZWR0bHNfbXBpX3NldF9iaXQ6MTA6IjQ5OTc5Njg3Ijo4MDowOjEwOiI0OTk3OTY4NyI6MAorCitUZXN0IGJpdCBzZXQgKEFkZCBhYm92ZSBleGlzdGluZyBsaW1icyB3aXRoIGEgMSkKK21iZWR0bHNfbXBpX3NldF9iaXQ6MTA6IjQ5OTc5Njg3Ijo4MDoxOjEwOiIxMjA4OTI1ODE5NjE0NjI5MjI0Njg1ODYzIjowCisKK1Rlc3QgYml0IHNldCAoQml0IGluZGV4IGxhcmdlciB0aGFuIDMxIHdpdGggYSAwKQorbWJlZHRsc19tcGlfc2V0X2JpdDoxNjoiRkZGRkZGRkZGRkZGRkZGRiI6MzI6MDoxNjoiRkZGRkZGRkVGRkZGRkZGRiI6MAorCitUZXN0IGJpdCBzZXQgKEJpdCBpbmRleCBsYXJnZXIgdGhhbiAzMSB3aXRoIGEgMSkKK21iZWR0bHNfbXBpX3NldF9iaXQ6MTY6IjAwIjozMjoxOjE2OiIwMTAwMDAwMDAwIjowCisKK1Rlc3QgYml0IHNldCAoSW52YWxpZCBiaXQgdmFsdWUpCittYmVkdGxzX21waV9zZXRfYml0OjE2OiIwMCI6NToyOjE2OiIwMCI6TUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBCisKK01QSSBTZWxmdGVzdAorZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVAorbXBpX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21waS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tcGkuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0Yzg4OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tcGkuZnVuY3Rpb24KQEAgLTAsMCArMSw4ODIgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvYmlnbnVtLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0JJR05VTV9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtcGlfbnVsbCggKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFksIFo7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZZICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlogKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9nZXRfYml0KCAmWCwgNDIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2xzYiggJlggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2JpdGxlbiggJlggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3NpemUoICZYICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1waV9yZWFkX3dyaXRlX3N0cmluZyggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCByYWRpeF9BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X0EsIGludCBvdXRwdXRfc2l6ZSwgaW50IHJlc3VsdF9yZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRfd3JpdGUgKQoreworICAgIG1iZWR0bHNfbXBpIFg7CisgICAgY2hhciBzdHJbMTAwMF07CisgICAgc2l6ZV90IGxlbjsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gcmVzdWx0X3JlYWQgKTsKKyAgICBpZiggcmVzdWx0X3JlYWQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfd3JpdGVfc3RyaW5nKCAmWCwgcmFkaXhfQSwgc3RyLCBvdXRwdXRfc2l6ZSwgJmxlbiApID09IHJlc3VsdF93cml0ZSApOworICAgICAgICBpZiggcmVzdWx0X3dyaXRlID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggc3RyLCBpbnB1dF9BICkgPT0gMCApOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCBjaGFyICppbnB1dF9YLCBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWDsKKyAgICB1bnNpZ25lZCBjaGFyIHN0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDAwXTsKKyAgICBzaXplX3QgbGVuOworICAgIHNpemVfdCBpbnB1dF9sZW47CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOworCisgICAgaW5wdXRfbGVuID0gdW5oZXhpZnkoIGJ1ZiwgaW5wdXRfWCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmWCwgYnVmLCBpbnB1dF9sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3dyaXRlX3N0cmluZyggJlgsIHJhZGl4X0EsIChjaGFyICopIHN0ciwgc2l6ZW9mKCBzdHIgKSwgJmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBzdHIsIGlucHV0X0EgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgY2hhciAqaW5wdXRfQSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG91dHB1dF9zaXplLCBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX21waSBYOworICAgIHVuc2lnbmVkIGNoYXIgc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMDBdOworICAgIHNpemVfdCBidWZsZW47CisKKyAgICBtZW1zZXQoIGJ1ZiwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKworICAgIGJ1ZmxlbiA9IG1iZWR0bHNfbXBpX3NpemUoICZYICk7CisgICAgaWYoIGJ1ZmxlbiA+IChzaXplX3QpIG91dHB1dF9zaXplICkKKyAgICAgICAgYnVmbGVuID0gKHNpemVfdCkgb3V0cHV0X3NpemU7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmWCwgYnVmLCBidWZsZW4gKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDApCisgICAgeworICAgICAgICBoZXhpZnkoIHN0ciwgYnVmLCBidWZsZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgc3RyLCBpbnB1dF9BICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU8gKi8KK3ZvaWQgbWJlZHRsc19tcGlfcmVhZF9maWxlKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfZmlsZSwgY2hhciAqaW5wdXRfQSwKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCit7CisgICAgbWJlZHRsc19tcGkgWDsKKyAgICB1bnNpZ25lZCBjaGFyIHN0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDAwXTsKKyAgICBzaXplX3QgYnVmbGVuOworICAgIEZJTEUgKmZpbGU7CisgICAgaW50IHJldDsKKworICAgIG1lbXNldCggYnVmLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBzdHIsIDB4MDAsIDEwMDAgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisKKyAgICBmaWxlID0gZm9wZW4oIGlucHV0X2ZpbGUsICJyIiApOworICAgIFRFU1RfQVNTRVJUKCBmaWxlICE9IE5VTEwgKTsKKyAgICByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZYLCByYWRpeF9YLCBmaWxlICk7CisgICAgZmNsb3NlKGZpbGUpOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gcmVzdWx0ICk7CisKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgYnVmbGVuID0gbWJlZHRsc19tcGlfc2l6ZSggJlggKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggJlgsIGJ1ZiwgYnVmbGVuICkgPT0gMCApOworCisgICAgICAgIGhleGlmeSggc3RyLCBidWYsIGJ1ZmxlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBzdHIsIGlucHV0X0EgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTyAqLwordm9pZCBtYmVkdGxzX21waV93cml0ZV9maWxlKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IG91dHB1dF9yYWRpeCwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm91dHB1dF9maWxlICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBZOworICAgIEZJTEUgKmZpbGVfb3V0LCAqZmlsZV9pbjsKKyAgICBpbnQgcmV0OworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisKKyAgICBmaWxlX291dCA9IGZvcGVuKCBvdXRwdXRfZmlsZSwgInciICk7CisgICAgVEVTVF9BU1NFUlQoIGZpbGVfb3V0ICE9IE5VTEwgKTsKKyAgICByZXQgPSBtYmVkdGxzX21waV93cml0ZV9maWxlKCBOVUxMLCAmWCwgb3V0cHV0X3JhZGl4LCBmaWxlX291dCApOworICAgIGZjbG9zZShmaWxlX291dCk7CisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSAwICk7CisKKyAgICBmaWxlX2luID0gZm9wZW4oIG91dHB1dF9maWxlLCAiciIgKTsKKyAgICBURVNUX0FTU0VSVCggZmlsZV9pbiAhPSBOVUxMICk7CisgICAgcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmWSwgb3V0cHV0X3JhZGl4LCBmaWxlX2luICk7CisgICAgZmNsb3NlKGZpbGVfaW4pOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmWSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9nZXRfYml0KCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHBvcywgaW50IHZhbCApCit7CisgICAgbWJlZHRsc19tcGkgWDsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2dldF9iaXQoICZYLCBwb3MgKSA9PSB2YWwgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9zZXRfYml0KCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHBvcywgaW50IHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X1ksIGNoYXIgKm91dHB1dF9ZLCBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBZOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIHJhZGl4X1ksIG91dHB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zZXRfYml0KCAmWCwgcG9zLCB2YWwgKSA9PSByZXN1bHQgKTsKKworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZZICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9sc2IoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgbnJfYml0cyApCit7CisgICAgbWJlZHRsc19tcGkgWDsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbHNiKCAmWCApID09IChzaXplX3QpIG5yX2JpdHMgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9iaXRsZW4oIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgbnJfYml0cyApCit7CisgICAgbWJlZHRsc19tcGkgWDsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfYml0bGVuKCAmWCApID09IChzaXplX3QpIG5yX2JpdHMgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9nY2QoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgcmFkaXhfWSwgY2hhciAqaW5wdXRfWSwKKyAgICAgICAgICAgICAgaW50IHJhZGl4X0EsIGNoYXIgKmlucHV0X0EgKQoreworICAgIG1iZWR0bHNfbXBpIEEsIFgsIFksIFo7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsgbWJlZHRsc19tcGlfaW5pdCggJlogKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWSwgcmFkaXhfWSwgaW5wdXRfWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9nY2QoICZaLCAmWCwgJlkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZaLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmQSApOyBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9jbXBfaW50KCBpbnQgaW5wdXRfWCwgaW50IGlucHV0X0EsIGludCByZXN1bHRfQ01QICkKK3sKKyAgICBtYmVkdGxzX21waSBYOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2xzZXQoICZYLCBpbnB1dF9YICkgPT0gMCk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZYLCBpbnB1dF9BICkgPT0gcmVzdWx0X0NNUCk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfY21wX21waSggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCByYWRpeF9ZLCBjaGFyICppbnB1dF9ZLAorICAgICAgICAgICAgICAgICAgaW50IGlucHV0X0EgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWSwgcmFkaXhfWSwgaW5wdXRfWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZZICkgPT0gaW5wdXRfQSApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX2NtcF9hYnMoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgcmFkaXhfWSwgY2hhciAqaW5wdXRfWSwKKyAgICAgICAgICAgICAgICAgIGludCBpbnB1dF9BICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBZOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIHJhZGl4X1ksIGlucHV0X1kgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9hYnMoICZYLCAmWSApID09IGlucHV0X0EgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9jb3B5KCBpbnQgaW5wdXRfWCwgaW50IGlucHV0X0EgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFksIEE7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9sc2V0KCAmWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbHNldCggJlksIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2xzZXQoICZBLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJlkgKSAhPSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZZLCAmQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY29weSggJlksICZYICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJlkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZZLCAmQSApICE9IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtcGlfY29weV9zZWxmKCBpbnQgaW5wdXRfWCApCit7CisgICAgbWJlZHRsc19tcGkgWDsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2xzZXQoICZYLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jb3B5KCAmWCwgJlggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZYLCBpbnB1dF9YICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX3NocmluayggaW50IGJlZm9yZSwgaW50IHVzZWQsIGludCBtaW4sIGludCBhZnRlciApCit7CisgICAgbWJlZHRsc19tcGkgWDsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2dyb3coICZYLCBiZWZvcmUgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIHVzZWQgPD0gYmVmb3JlICk7CisgICAgbWVtc2V0KCBYLnAsIDB4MmEsIHVzZWQgKiBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zaHJpbmsoICZYLCBtaW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIFgubiA9PSAoc2l6ZV90KSBhZnRlciApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24oIGludCB4X3NpZ24sIGNoYXIgKnhfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHlfc2lnbiwgY2hhciAqeV9zdHIgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFksIFhYOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZYWCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgMTYsIHhfc3RyICkgPT0gMCApOworICAgIFgucyA9IHhfc2lnbjsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCAxNiwgeV9zdHIgKSA9PSAwICk7CisgICAgWS5zID0geV9zaWduOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jb3B5KCAmWFgsICZYICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24oICZYLCAmWSwgMCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZYWCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduKCAmWCwgJlksIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmWSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmWFggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXAoIGludCB4X3NpZ24sIGNoYXIgKnhfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5X3NpZ24sIGNoYXIgKnlfc3RyICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBZLCBYWCwgWVk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYWCApOyBtYmVkdGxzX21waV9pbml0KCAmWVkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIDE2LCB4X3N0ciApID09IDAgKTsKKyAgICBYLnMgPSB4X3NpZ247CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWSwgMTYsIHlfc3RyICkgPT0gMCApOworICAgIFkucyA9IHlfc2lnbjsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jb3B5KCAmWFgsICZYICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jb3B5KCAmWVksICZZICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwKCAmWCwgJlksIDAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmWFggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZZLCAmWVkgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXAoICZYLCAmWSwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlksICZYWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZZWSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWVkgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfc3dhcCggaW50IGlucHV0X1gsICBpbnQgaW5wdXRfWSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2xzZXQoICZYLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9sc2V0KCAmWSwgaW5wdXRfWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbHNldCggJkEsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmWSApICE9IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZBICkgPT0gMCApOworICAgIG1iZWR0bHNfbXBpX3N3YXAoICZYLCAmWSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJlkgKSAhPSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZZLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9hZGRfbXBpKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X1ksIGNoYXIgKmlucHV0X1ksCisgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgWiwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCByYWRpeF9ZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2FkZF9tcGkoICZaLCAmWCwgJlkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZaLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9hZGRfbXBpX2lucGxhY2UoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9hYnMoICZYLCAmWCwgJlggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZYLCAwICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfYWRkX2FicyggJlgsICZYLCAmWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZBICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfYWRkX21waSggJlgsICZYLCAmWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfYWRkX2FicyggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCByYWRpeF9ZLCBjaGFyICppbnB1dF9ZLAorICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0EsIGNoYXIgKmlucHV0X0EgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFksIFosIEE7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsgbWJlZHRsc19tcGlfaW5pdCggJlogKTsgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWSwgcmFkaXhfWSwgaW5wdXRfWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9hZGRfYWJzKCAmWiwgJlgsICZZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWiwgJkEgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsgbWJlZHRsc19tcGlfZnJlZSggJlogKTsgbWJlZHRsc19tcGlfZnJlZSggJkEgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbXBpX2FkZF9hYnNfYWRkX2ZpcnN0KCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X1ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfWSwgaW50IHJhZGl4X0EsIGNoYXIgKmlucHV0X0EgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFksIEE7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWSwgcmFkaXhfWSwgaW5wdXRfWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9hZGRfYWJzKCAmWCwgJlgsICZZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJkEgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsgbWJlZHRsc19tcGlfZnJlZSggJkEgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbXBpX2FkZF9hYnNfYWRkX3NlY29uZCggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCByYWRpeF9ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9ZLCBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCByYWRpeF9ZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2FkZF9hYnMoICZZLCAmWCwgJlkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZZLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9hZGRfaW50KCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IGlucHV0X1ksIGludCByYWRpeF9BLAorICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWiwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9hZGRfaW50KCAmWiwgJlgsIGlucHV0X1kgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZaLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9zdWJfbXBpKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X1ksIGNoYXIgKmlucHV0X1ksCisgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgWiwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCByYWRpeF9ZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZaLCAmWCwgJlkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZaLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9zdWJfYWJzKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X1ksIGNoYXIgKmlucHV0X1ksCisgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSwgaW50IHN1Yl9yZXN1bHQgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFksIFosIEE7CisgICAgaW50IHJlczsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCByYWRpeF9ZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisKKyAgICByZXMgPSBtYmVkdGxzX21waV9zdWJfYWJzKCAmWiwgJlgsICZZICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcyA9PSBzdWJfcmVzdWx0ICk7CisgICAgaWYoIHJlcyA9PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZaLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9zdWJfaW50KCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IGlucHV0X1ksIGludCByYWRpeF9BLAorICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWiwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmWiwgJlgsIGlucHV0X1kgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZaLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9tdWxfbXBpKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X1ksIGNoYXIgKmlucHV0X1ksCisgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgWiwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCByYWRpeF9ZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX211bF9tcGkoICZaLCAmWCwgJlkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZaLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9tdWxfaW50KCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IGlucHV0X1ksIGludCByYWRpeF9BLAorICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfQSwgY2hhciAqcmVzdWx0X2NvbXBhcmlzb24gKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFosIEE7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlogKTsgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbXVsX2ludCggJlosICZYLCBpbnB1dF9ZICkgPT0gMCApOworICAgIGlmKCBzdHJjbXAoIHJlc3VsdF9jb21wYXJpc29uLCAiPT0iICkgPT0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWiwgJkEgKSA9PSAwICk7CisgICAgZWxzZSBpZiggc3RyY21wKCByZXN1bHRfY29tcGFyaXNvbiwgIiE9IiApID09IDAgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlosICZBICkgIT0gMCApOworICAgIGVsc2UKKyAgICAgICAgVEVTVF9BU1NFUlQoICJ1bmtub3duIG9wZXJhdG9yIiA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlogKTsgbWJlZHRsc19tcGlfZnJlZSggJkEgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfZGl2X21waSggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCByYWRpeF9ZLCBjaGFyICppbnB1dF9ZLAorICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0EsIGNoYXIgKmlucHV0X0EsIGludCByYWRpeF9CLCBjaGFyICppbnB1dF9CLAorICAgICAgICAgICAgICAgICAgaW50IGRpdl9yZXN1bHQgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFksIFEsIFIsIEEsIEI7CisgICAgaW50IHJlczsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmUSApOyBtYmVkdGxzX21waV9pbml0KCAmUiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZBICk7IG1iZWR0bHNfbXBpX2luaXQoICZCICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIHJhZGl4X1ksIGlucHV0X1kgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZCLCByYWRpeF9CLCBpbnB1dF9CICkgPT0gMCApOworICAgIHJlcyA9IG1iZWR0bHNfbXBpX2Rpdl9tcGkoICZRLCAmUiwgJlgsICZZICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcyA9PSBkaXZfcmVzdWx0ICk7CisgICAgaWYoIHJlcyA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUSwgJkEgKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUiwgJkIgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZRICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZSICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJkEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkIgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfZGl2X2ludCggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCBpbnB1dF9ZLCBpbnQgcmFkaXhfQSwKKyAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X0EsIGludCByYWRpeF9CLCBjaGFyICppbnB1dF9CLCBpbnQgZGl2X3Jlc3VsdCApCit7CisgICAgbWJlZHRsc19tcGkgWCwgUSwgUiwgQSwgQjsKKyAgICBpbnQgcmVzOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZRICk7IG1iZWR0bHNfbXBpX2luaXQoICZSICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJkIgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZCLCByYWRpeF9CLCBpbnB1dF9CICkgPT0gMCApOworICAgIHJlcyA9IG1iZWR0bHNfbXBpX2Rpdl9pbnQoICZRLCAmUiwgJlgsIGlucHV0X1kgKTsKKyAgICBURVNUX0FTU0VSVCggcmVzID09IGRpdl9yZXN1bHQgKTsKKyAgICBpZiggcmVzID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZRLCAmQSApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLCAmQiApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlIgKTsgbWJlZHRsc19tcGlfZnJlZSggJkEgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmQiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9tb2RfbXBpKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X1ksIGNoYXIgKmlucHV0X1ksCisgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSwgaW50IGRpdl9yZXN1bHQgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFksIEE7CisgICAgaW50IHJlczsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCByYWRpeF9ZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgcmVzID0gbWJlZHRsc19tcGlfbW9kX21waSggJlgsICZYLCAmWSApOworICAgIFRFU1RfQVNTRVJUKCByZXMgPT0gZGl2X3Jlc3VsdCApOworICAgIGlmKCByZXMgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZBICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9tb2RfaW50KCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IGlucHV0X1ksIGludCBpbnB1dF9BLAorICAgICAgICAgICAgICAgICAgaW50IGRpdl9yZXN1bHQgKQoreworICAgIG1iZWR0bHNfbXBpIFg7CisgICAgaW50IHJlczsKKyAgICBtYmVkdGxzX21waV91aW50IHI7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgcmVzID0gbWJlZHRsc19tcGlfbW9kX2ludCggJnIsICZYLCBpbnB1dF9ZICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcyA9PSBkaXZfcmVzdWx0ICk7CisgICAgaWYoIHJlcyA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCByID09IChtYmVkdGxzX21waV91aW50KSBpbnB1dF9BICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX2V4cF9tb2QoIGludCByYWRpeF9BLCBjaGFyICppbnB1dF9BLCBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwKKyAgICAgICAgICAgICAgICAgIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLCBpbnQgcmFkaXhfUlIsIGNoYXIgKmlucHV0X1JSLAorICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCBkaXZfcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX21waSBBLCBFLCBOLCBSUiwgWiwgWDsKKyAgICBpbnQgcmVzOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZBICApOyBtYmVkdGxzX21waV9pbml0KCAmRSApOyBtYmVkdGxzX21waV9pbml0KCAmTiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZSUiApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOyBtYmVkdGxzX21waV9pbml0KCAmWCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZFLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKworICAgIGlmKCBzdHJsZW4oIGlucHV0X1JSICkgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZSUiwgcmFkaXhfUlIsIGlucHV0X1JSICkgPT0gMCApOworCisgICAgcmVzID0gbWJlZHRsc19tcGlfZXhwX21vZCggJlosICZBLCAmRSwgJk4sICZSUiApOworICAgIFRFU1RfQVNTRVJUKCByZXMgPT0gZGl2X3Jlc3VsdCApOworICAgIGlmKCByZXMgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlosICZYICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmQSAgKTsgbWJlZHRsc19tcGlfZnJlZSggJkUgKTsgbWJlZHRsc19tcGlfZnJlZSggJk4gKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUlIgKTsgbWJlZHRsc19tcGlfZnJlZSggJlogKTsgbWJlZHRsc19tcGlfZnJlZSggJlggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfaW52X21vZCggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCByYWRpeF9ZLCBjaGFyICppbnB1dF9ZLAorICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0EsIGNoYXIgKmlucHV0X0EsIGludCBkaXZfcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBZLCBaLCBBOworICAgIGludCByZXM7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsgbWJlZHRsc19tcGlfaW5pdCggJlogKTsgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWSwgcmFkaXhfWSwgaW5wdXRfWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIHJlcyA9IG1iZWR0bHNfbXBpX2ludl9tb2QoICZaLCAmWCwgJlkgKTsKKyAgICBURVNUX0FTU0VSVCggcmVzID09IGRpdl9yZXN1bHQgKTsKKyAgICBpZiggcmVzID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZaLCAmQSApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsgbWJlZHRsc19tcGlfZnJlZSggJlogKTsgbWJlZHRsc19tcGlfZnJlZSggJkEgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FICovCit2b2lkIG1iZWR0bHNfbXBpX2lzX3ByaW1lKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IGRpdl9yZXN1bHQgKQoreworICAgIG1iZWR0bHNfbXBpIFg7CisgICAgaW50IHJlczsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICByZXMgPSBtYmVkdGxzX21waV9pc19wcmltZSggJlgsIHJuZF9zdGRfcmFuZCwgTlVMTCApOworICAgIFRFU1RfQVNTRVJUKCByZXMgPT0gZGl2X3Jlc3VsdCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRSAqLwordm9pZCBtYmVkdGxzX21waV9nZW5fcHJpbWUoIGludCBiaXRzLCBpbnQgc2FmZSwgaW50IHJlZl9yZXQgKQoreworICAgIG1iZWR0bHNfbXBpIFg7CisgICAgaW50IG15X3JldDsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisKKyAgICBteV9yZXQgPSBtYmVkdGxzX21waV9nZW5fcHJpbWUoICZYLCBiaXRzLCBzYWZlLCBybmRfc3RkX3JhbmQsIE5VTEwgKTsKKyAgICBURVNUX0FTU0VSVCggbXlfcmV0ID09IHJlZl9yZXQgKTsKKworICAgIGlmKCByZWZfcmV0ID09IDAgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGFjdHVhbF9iaXRzID0gbWJlZHRsc19tcGlfYml0bGVuKCAmWCApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBhY3R1YWxfYml0cyA+PSAoc2l6ZV90KSBiaXRzICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBhY3R1YWxfYml0cyA8PSAoc2l6ZV90KSBiaXRzICsgMSApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pc19wcmltZSggJlgsIHJuZF9zdGRfcmFuZCwgTlVMTCApID09IDAgKTsKKyAgICAgICAgaWYoIHNhZmUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX21waV9zaGlmdF9yKCAmWCwgMSApOyAvKiBYID0gKCBYIC0gMSApIC8gMiAqLworICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2lzX3ByaW1lKCAmWCwgcm5kX3N0ZF9yYW5kLCBOVUxMICkgPT0gMCApOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX3NoaWZ0X2woIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgc2hpZnRfWCwgaW50IHJhZGl4X0EsCisgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9BKQoreworICAgIG1iZWR0bHNfbXBpIFgsIEE7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc2hpZnRfbCggJlgsIHNoaWZ0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9zaGlmdF9yKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHNoaWZ0X1gsIGludCByYWRpeF9BLAorICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmWCwgc2hpZnRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgbXBpX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wZW0uZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wZW0uZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzNjOTIzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BlbS5kYXRhCkBAIC0wLDAgKzEsMTcgQEAKK1N0YW5kYXJkIFBFTSB3cml0ZQorbWJlZHRsc19wZW1fd3JpdGVfYnVmZmVyOiItLS0tLVNUQVJUIFRFU1QtLS0tLVxuIjoiLS0tLS1FTkQgVEVTVC0tLS0tXG4iOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiLS0tLS1TVEFSVCBURVNULS0tLS1cbkFBRUNBd1FGQmdjSUNRb0xEQTBPRHdBQkFnTUVCUVlIQ0FrS0N3d05EZzg9XG4tLS0tLUVORCBURVNULS0tLS1cbiIKKworUEVNIHdyaXRlICh6ZXJvIGRhdGEpCittYmVkdGxzX3BlbV93cml0ZV9idWZmZXI6Ii0tLS0tU1RBUlQgVEVTVC0tLS0tXG4iOiItLS0tLUVORCBURVNULS0tLS1cbiI6IiI6Ii0tLS0tU1RBUlQgVEVTVC0tLS0tXG4tLS0tLUVORCBURVNULS0tLS1cbiIKKworUEVNIHdyaXRlIChvbmUgYnl0ZSkKK21iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlcjoiLS0tLS1TVEFSVCBURVNULS0tLS1cbiI6Ii0tLS0tRU5EIFRFU1QtLS0tLVxuIjoiMDAiOiItLS0tLVNUQVJUIFRFU1QtLS0tLVxuQUE9PVxuLS0tLS1FTkQgVEVTVC0tLS0tXG4iCisKK1BFTSB3cml0ZSAobW9yZSB0aGFuIGxpbmUgc2l6ZSkKK21iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlcjoiLS0tLS1TVEFSVCBURVNULS0tLS1cbiI6Ii0tLS0tRU5EIFRFU1QtLS0tLVxuIjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6Ii0tLS0tU1RBUlQgVEVTVC0tLS0tXG5BQUVDQXdRRkJnY0lDUW9MREEwT0R3QUJBZ01FQlFZSENBa0tDd3dORGc4QUFRSURCQVVHQndnSkNnc01EUTRQXG5BQUVDQXdRRkJnY0lDUW9MREEwT0R3QUJBZ01FQlFZSENBa0tDd3dORGc4PVxuLS0tLS1FTkQgVEVTVC0tLS0tXG4iCisKK1BFTSB3cml0ZSAoZXhhY3RseSB0d28gbGluZXMpCittYmVkdGxzX3BlbV93cml0ZV9idWZmZXI6Ii0tLS0tU1RBUlQgVEVTVC0tLS0tXG4iOiItLS0tLUVORCBURVNULS0tLS1cbiI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6Ii0tLS0tU1RBUlQgVEVTVC0tLS0tXG5BQUVDQXdRRkJnY0lDUW9MREEwT0R3QUJBZ01FQlFZSENBa0tDd3dORGc4QUFRSURCQVVHQndnSkNnc01EUTRQXG5BQUVDQXdRRkJnY0lDUW9MREEwT0R3QUJBZ01FQlFZSENBa0tDd3dORGc4QUFRSURCQVVHQndnSkNnc01EUTRQXG4tLS0tLUVORCBURVNULS0tLS1cbiIKKworUEVNIHdyaXRlIChleGFjdGx5IHR3byBsaW5lcyArIDEpCittYmVkdGxzX3BlbV93cml0ZV9idWZmZXI6Ii0tLS0tU1RBUlQgVEVTVC0tLS0tXG4iOiItLS0tLUVORCBURVNULS0tLS1cbiI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwIjoiLS0tLS1TVEFSVCBURVNULS0tLS1cbkFBRUNBd1FGQmdjSUNRb0xEQTBPRHdBQkFnTUVCUVlIQ0FrS0N3d05EZzhBQVFJREJBVUdCd2dKQ2dzTURRNFBcbkFBRUNBd1FGQmdjSUNRb0xEQTBPRHdBQkFnTUVCUVlIQ0FrS0N3d05EZzhBQVFJREJBVUdCd2dKQ2dzTURRNFBcbkFBPT1cbi0tLS0tRU5EIFRFU1QtLS0tLVxuIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BlbS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wZW0uZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE2MmJmZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wZW0uZnVuY3Rpb24KQEAgLTAsMCArMSw0MCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9iYXNlNjQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19QRU1fV1JJVEVfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19wZW1fd3JpdGVfYnVmZmVyKCBjaGFyICpzdGFydCwgY2hhciAqZW5kLCBjaGFyICpidWZfc3RyLCBjaGFyICpyZXN1bHRfc3RyICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls1MDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyICpjaGVja19idWYgPSBOVUxMOworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGJ1Zl9sZW4sIG9sZW4gPSAwLCBvbGVuMiA9IDA7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgYnVmX2xlbiA9IHVuaGV4aWZ5KCBidWYsIGJ1Zl9zdHIgKTsKKworICAgIHJldCA9IG1iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlciggc3RhcnQsIGVuZCwgYnVmLCBidWZfbGVuLCBOVUxMLCAwLCAmb2xlbiApOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gTUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgIGNoZWNrX2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfY2FsbG9jKCAxLCBvbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIGNoZWNrX2J1ZiAhPSBOVUxMICk7CisKKyAgICBtZW1zZXQoIGNoZWNrX2J1ZiwgMCwgb2xlbiApOworICAgIHJldCA9IG1iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlciggc3RhcnQsIGVuZCwgYnVmLCBidWZfbGVuLCBjaGVja19idWYsIG9sZW4sICZvbGVuMiApOworCisgICAgVEVTVF9BU1NFUlQoIG9sZW4yIDw9IG9sZW4gKTsKKyAgICBURVNUX0FTU0VSVCggb2xlbiA+IHN0cmxlbiggKGNoYXIqKSByZXN1bHRfc3RyICkgKTsKKyAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggc3RybmNtcCggKGNoYXIgKikgY2hlY2tfYnVmLCAoY2hhciAqKSByZXN1bHRfc3RyLCBvbGVuICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZnJlZSggY2hlY2tfYnVmICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGsuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmE3ZmE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrLmRhdGEKQEAgLTAsMCArMSwxNTIgQEAKK1BLIHV0aWxzOiBSU0EKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX0dFTlBSSU1FCitwa191dGlsczpNQkVEVExTX1BLX1JTQTo1MTI6NjQ6IlJTQSIKKworUEsgdXRpbHM6IEVDS0VZCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX3V0aWxzOk1CRURUTFNfUEtfRUNLRVk6MTkyOjI0OiJFQyIKKworUEsgdXRpbHM6IEVDS0VZX0RICitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX3V0aWxzOk1CRURUTFNfUEtfRUNLRVlfREg6MTkyOjI0OiJFQ19ESCIKKworUEsgdXRpbHM6IEVDRFNBCitkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfdXRpbHM6TUJFRFRMU19QS19FQ0RTQToxOTI6MjQ6IkVDRFNBIgorCitSU0EgdmVyaWZ5IHRlc3QgdmVjdG9yICMxIChnb29kKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BLQ1MxX1YxNQorcGtfcnNhX3ZlcmlmeV90ZXN0X3ZlYzoiMjA2ZWY0YmYzOTZjNjA4N2Y4MjI5ZWYxOTZmZDM1ZjM3Y2NiOGRlNWVmY2RiMjM4ZjIwZDU1NjY2OGYxMTQyNTdhMTFmYmUwMzg0NjRhNjc4MzAzNzhlNjJhZTk3OTE0NTM5NTNkYWMxZGJkNzkyMTgzN2JhOThlODRlODU2ZWI4MGVkOTQ4N2U2NTZkMGIyMGMyOGM4YmE1ZTM1ZGIxYWJiZWQ4M2VkMWM3NzIwYTk3NzAxZjcwOWUzNTQ3YTRiZmNhYmNhOWM4OWM1N2FkMTVjMzk5NjU3N2EwYWUzNmQ3YzdiNjk5MDM1MjQyZjM3OTU0NjQ2YzFjZDVjMDhhYyI6TUJFRFRMU19NRF9TSEExOjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIzIjoiNWFiYzAxZjVkZTI1YjcwODY3ZmYwYzI0ZTIyMmM2MWY1M2M4OGRhZjQyNTg2ZmRkY2Q1NmYzYzQ1ODhmMDc0YmUzYzMyODA1NmMwNjMzODg2ODhiNjM4NWE4MTY3OTU3YzZlNTM1NWE1MTBlMDA1YjhhODUxZDY5Yzk2YjM2ZWM2MDM2NjQ0MDc4MjEwZTVkN2QzMjZmOTYzNjVlZTA2NDg4ODI5MjE0OTJiYzdiNzUzZWI5YzI2Y2RiYWIzNzU1NWYyMTBkZjJjYTZmZWMxYjI1YjQ2M2QzOGI4MWMwZGNlYTIwMjAyMmIwNGFmNWRhNThhYTAzZDc3YmU5NDliNyI6MAorCitSU0EgdmVyaWZ5IHRlc3QgdmVjdG9yICMyIChiYWQpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEtDUzFfVjE1Citwa19yc2FfdmVyaWZ5X3Rlc3RfdmVjOiJkNjI0OGMzZTk2YjFhN2U1ZmVhOTc4ODcwZmNjNGM5Nzg2YjRlNTE1NmUxNmI3ZmFlZjQ1NTdkNjY3ZjczMGI4YmM0Yzc4NGVmMDBjNjI0ZGY1MzA5NTEzYzNhNWRlOGNhOTRjMjE1MmUwNDU5NjE4NjY2ZDMxNDgwOTI1NjJlYmMyNTZmZmNhNDViMjdmZDJkNjNjNjhiZDVlMGEwYWVmYmU0OTZlOWU2MzgzOGEzNjFiMWRiNmZjMjcyNDY0ZjE5MTQ5MGJmOWMwMjk2NDNjNDlkMmQ5Y2QwODgzM2I4YTcwYjRiMzQzMWY1NmZiMWViNTVjY2QzOWU3N2E5YzkyIjpNQkVEVExTX01EX1NIQTE6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjMiOiIzMjAzYjc2NDdmYjdlMzQ1YWE0NTc2ODFlNTEzMTc3N2YxYWRjMzcxZjJmYmE4NTM0OTI4YzRlNTJlZjYyMDZhODU2NDI1ZDYyNjkzNTJlY2JmNjRkYjJmNmFkODIzOTc3NjhjYWZkZDhjZDI3MmU1MTJkNjE3YWQ2Nzk5MjIyNmRhNmJjMjkxYzMxNDA0YzE3ZmQ0YjdlMmJlYjIwZWZmMjg0YTQ0ZjRkN2FmNDdmZDY2MjllMmM5NTgwOWZhN2YyMjQxYTA0ZjcwYWM3MGQzMjcxYmIxMzI1OGFmMWVkNWM1OTg4Yzk1ZGY3ZmEyNjYwMzUxNTc5MTA3NWZlY2NkIjpNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRAorCitFQ0RTQSB2ZXJpZnkgdGVzdCB2ZWN0b3IgIzEgKGdvb2QpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa19lY190ZXN0X3ZlYzpNQkVEVExTX1BLX0VDRFNBOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDQ2RkREMzAyOEZBOTRBODYzQ0Q0Rjc4REJGRjhCM0FBNTYxRkM2RDlDQ0JCQ0E4OEUwQUU2RkE0MzdGNTQxNUY5NTc1NDJEMDcxN0ZGOEI4NDU2MkRBRTk5ODcyRUY4NDEiOiI1NDY4Njk3MzIwNzM2ODZGNzU2QzY0MjA2MjY1MjA3NDY4NjUyMDY4NjE3MzY4MjA2RjY2MjA2MTIwNkQ2NTczNzM2MTY3NjUyRTAwIjoiMzAzNTAyMTgxODVCMkE3RkI1Q0Q5QzlBODQ4OEIxMTlCNjhCNDdENkVDODMzNTA5Q0U5RkExRkYwMjE5MDBGQjdEMjU5QTc0NEEyMzQ4QkQ0NUQyNDFBMzlEQzkxNUI4MUNDMjA4NDEwMEZBMjQiOjAKKworRUNEU0EgdmVyaWZ5IHRlc3QgdmVjdG9yICMyIChiYWQpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa19lY190ZXN0X3ZlYzpNQkVEVExTX1BLX0VDRFNBOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDQ2RkREMzAyOEZBOTRBODYzQ0Q0Rjc4REJGRjhCM0FBNTYxRkM2RDlDQ0JCQ0E4OEUwQUU2RkE0MzdGNTQxNUY5NTc1NDJEMDcxN0ZGOEI4NDU2MkRBRTk5ODcyRUY4NDEiOiI1NDY4Njk3MzIwNzM2ODZGNzU2QzY0MjA2MjY1MjA3NDY4NjUyMDY4NjE3MzY4MjA2RjY2MjA2MTIwNkQ2NTczNzM2MTY3NjUyRTAwIjoiMzAzNTAyMTgxODVCMkE3RkI1Q0Q5QzlBODQ4OEIxMTlCNjhCNDdENkVDODMzNTA5Q0U5RkExRkYwMjE5MDBGQjdEMjU5QTc0NEEyMzQ4QkQ0NUQyNDFBMzlEQzkxNUI4MUNDMjA4NDEwMEZBMjUiOk1CRURUTFNfRVJSX0VDUF9WRVJJRllfRkFJTEVECisKK0VDKERTQSkgdmVyaWZ5IHRlc3QgdmVjdG9yICMxIChnb29kKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfZWNfdGVzdF92ZWM6TUJFRFRMU19QS19FQ0tFWTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjA0NkZERDMwMjhGQTk0QTg2M0NENEY3OERCRkY4QjNBQTU2MUZDNkQ5Q0NCQkNBODhFMEFFNkZBNDM3RjU0MTVGOTU3NTQyRDA3MTdGRjhCODQ1NjJEQUU5OTg3MkVGODQxIjoiNTQ2ODY5NzMyMDczNjg2Rjc1NkM2NDIwNjI2NTIwNzQ2ODY1MjA2ODYxNzM2ODIwNkY2NjIwNjEyMDZENjU3MzczNjE2NzY1MkUwMCI6IjMwMzUwMjE4MTg1QjJBN0ZCNUNEOUM5QTg0ODhCMTE5QjY4QjQ3RDZFQzgzMzUwOUNFOUZBMUZGMDIxOTAwRkI3RDI1OUE3NDRBMjM0OEJENDVEMjQxQTM5REM5MTVCODFDQzIwODQxMDBGQTI0IjowCisKK0VDKERTQSkgdmVyaWZ5IHRlc3QgdmVjdG9yICMyIChiYWQpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa19lY190ZXN0X3ZlYzpNQkVEVExTX1BLX0VDS0VZOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDQ2RkREMzAyOEZBOTRBODYzQ0Q0Rjc4REJGRjhCM0FBNTYxRkM2RDlDQ0JCQ0E4OEUwQUU2RkE0MzdGNTQxNUY5NTc1NDJEMDcxN0ZGOEI4NDU2MkRBRTk5ODcyRUY4NDEiOiI1NDY4Njk3MzIwNzM2ODZGNzU2QzY0MjA2MjY1MjA3NDY4NjUyMDY4NjE3MzY4MjA2RjY2MjA2MTIwNkQ2NTczNzM2MTY3NjUyRTAwIjoiMzAzNTAyMTgxODVCMkE3RkI1Q0Q5QzlBODQ4OEIxMTlCNjhCNDdENkVDODMzNTA5Q0U5RkExRkYwMjE5MDBGQjdEMjU5QTc0NEEyMzQ4QkQ0NUQyNDFBMzlEQzkxNUI4MUNDMjA4NDEwMEZBMjUiOk1CRURUTFNfRVJSX0VDUF9WRVJJRllfRkFJTEVECisKK0VDRFNBIHNpZ24tdmVyaWZ5CitkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfc2lnbl92ZXJpZnk6TUJFRFRMU19QS19FQ0RTQTowOjAKKworRUMoRFNBKSBzaWduLXZlcmlmeQorZGVwZW5kc19vbjpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX3NpZ25fdmVyaWZ5Ok1CRURUTFNfUEtfRUNLRVk6MDowCisKK0VDX0RIIChubykgc2lnbi12ZXJpZnkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfc2lnbl92ZXJpZnk6TUJFRFRMU19QS19FQ0tFWV9ESDpNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENIOk1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0gKKworUlNBIHNpZ24tdmVyaWZ5CitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19HRU5QUklNRQorcGtfc2lnbl92ZXJpZnk6TUJFRFRMU19QS19SU0E6MDowCisKK1JTQSBlbmNyeXB0IHRlc3QgdmVjdG9yCitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjE1Citwa19yc2FfZW5jcnlwdF90ZXN0X3ZlYzoiNEU2MzZBRjk4RTQwRjNBRENGQ0NCNjk4RjRFODBCOUYiOjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6ImIwYzBiMTkzYmE0YTViNDUwMmJmYWNkMWE5YzI2OTdkYTU1MTBmM2UzYWI3Mjc0Y2Y0MDQ0MThhZmQyYzYyYzg5Yjk4ZDgzYmJjMjFjOGMxYmYxYWZlNmQ4YmY0MDQyNWUwNTNlOWMwM2UwM2EzYmUwZWRiZTFlZGEwNzNmYWRlMWNjMjg2Y2MwMzA1YTQ5M2Q5OGZlNzk1NjM0YzNjYWQ3ZmViNTEzZWRiNzQyZDY2ZDkxMGM4N2QwN2Y2YjAwNTVjMzQ4OGJiMjYyYjVmZDFjZTg3NDdhZjY0ODAxZmIzOWQyZDNhM2U1NzA4NmZmZTU1YWI4ZDBhMmNhODY5NzU2MjlhMGY4NTc2N2E0OTkwYzUzMmE3YzJkYWIxNjQ3OTk3ZWJiMjM0ZDBiMjhhMDAwOGJmZWJmYzkwNWU3YmE1YjMwYjYwNTY2YTVlMDE5MDQxNzQ2NWVmZGJmNTQ5OTM0YjhmMGM1YzlmMzZiN2M1YjYzNzNhNDdhZTU1M2NlZDA2MDhhMTYxYjFiNzBkZmE1MDkzNzVjZjdhMzU5ODIyM2E2ZDdiN2ExZDFhMDZhYzc0ZDM0NWE5YmI3YzBlNDRjODM4ODg1OGE0ZjFkODExNWYyYmQ3NjlmZmE2OTAyMDM4NWZhMjg2MzAyYzgwZTk1MGY5ZTI3NTEzMDg2NjZjIjowCisKK1JTQSBkZWNyeXB0IHRlc3QgdmVjdG9yICMxCitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjE1Citwa19yc2FfZGVjcnlwdF90ZXN0X3ZlYzoiYTQyZWRhNDFlNTYyMzVlNjY2ZTdmYWFhNzcxMDAxOTdmNjU3Mjg4YTFiZjE4M2U0ODIwZjBjMzdjZTJjNDU2Yjk2MDI3OGQ2MDAzZTBiYmNkNGJlNGE5NjlmOGU4ZmQ5MjMxZTFmNDkyNDE0ZjAwZWQwOTg0NDk5NGM4NmVjMzJkYjdjZGUzYmVjN2YwYzNkYmY2YWU1NWJhZWIyNzEyZmE2MDlmNWZjMzIwN2E4MjRlYjNkYWNlMzE4NDljZDZhNjA4NDMxODUyMzkxMmJjY2I4NGNmNDJlM2M2ZDZkMTY4NTEzMWQ2OWJiNTQ1YWNlYzgyN2QyYjBkZmRkNTU2OGI3ZGNjNGY1YTExZDY5MTY1ODNmZWZhNjg5ZDM2N2Y4YzllMWQ5NWRjZDIyNDA4OTVhOTQ3MGIwYzE3MzBmOTdjZDZlODU0Njg2MGJkMjU0ODAxNzY5ZjU0YmU5NmUxNjM2MmRkY2JmMzRkNTYwMzUwMjg4OTAxOTllMGY0OGRiMzg2NDJjYjY2YTQxODFlMDI4YTY0NDNhNDA0ZmVhMjg0Y2UwMmI0NjE0YjY4MzM2N2Q0MDg3NGU1MDU2MTFkMjMxNDJkNDlmMDZmZWVhODMxZDUyZDM0N2IxMzYxMGI0MTNjNGVmYzQzYTZkZTlmMGIwOGQyYTk1MWRjNTAzYjYiOjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiNEU2MzZBRjk4RTQwRjNBRENGQ0NCNjk4RjRFODBCOUYiOjAKKworUlNBIGRlY3J5cHQgdGVzdCB2ZWN0b3IgIzIKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK3BrX3JzYV9kZWNyeXB0X3Rlc3RfdmVjOiJhNDJlZGE0MWU1NjIzNWU2NjZlN2ZhYWE3NzEwMDE5N2Y2NTcyODhhMWJmMTgzZTQ4MjBmMGMzN2NlMmM0NTZiOTYwMjc4ZDYwMDNlMGJiY2Q0YmU0YTk2OWY4ZThmZDkyMzFlMWY0OTI0MTRmMDBlZDA5ODQ0OTk0Yzg2ZWMzMmRiN2NkZTNiZWM3ZjBjM2RiZjZhZTU1YmFlYjI3MTJmYTYwOWY1ZmMzMjA3YTgyNGViM2RhY2UzMTg0OWNkNmE2MDg0MzE4NTIzOTEyYmNjYjg0Y2Y0MmUzYzZkNmQxNjg1MTMxZDY5YmI1NDVhY2VjODI3ZDJiMGRmZGQ1NTY4YjdkY2M0ZjVhMTFkNjkxNjU4M2ZlZmE2ODlkMzY3ZjhjOWUxZDk1ZGNkMjI0MDg5NWE5NDcwYjBjMTczMGY5N2NkNmU4NTQ2ODYwYmQyNTQ4MDE3NjlmNTRiZTk2ZTE2MzYyZGRjYmYzNGQ1NjAzNTAyODg5MDE5OWUwZjQ4ZGIzODY0MmNiNjZhNDE4MWUwMjhhNjQ0M2E0MDRmZWIyODRjZTAyYjQ2MTRiNjgzMzY3ZDQwODc0ZTUwNTYxMWQyMzE0MmQ0OWYwNmZlZWE4MzFkNTJkMzQ3YjEzNjEwYjQxM2M0ZWZjNDNhNmRlOWYwYjA4ZDJhOTUxZGM1MDNiNiI6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI0RTYzNkFGOThFNDBGM0FEQ0ZDQ0I2OThGNEU4MEI5RiI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitFQyBub2NyeXB0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0MKK3BrX2VjX25vY3J5cHQ6TUJFRFRMU19QS19FQ0tFWQorCitFQy1ESCBub2NyeXB0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0MKK3BrX2VjX25vY3J5cHQ6TUJFRFRMU19QS19FQ0tFWV9ESAorCitFQ0RTQSBub2NyeXB0CitkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQworcGtfZWNfbm9jcnlwdDpNQkVEVExTX1BLX0VDRFNBCisKK1JTQV9BTFQgY29uc2lzdGVuY3kKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX0dFTlBSSU1FCitwa19yc2FfYWx0OgorCitWZXJpZnkgZXh0IFJTQSAjMSAoUEtDUzEgdjIuMSwgc2FsdF9sZW4gPSBBTlksIE9LKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YyMTpNQkVEVExTX1NIQTI1Nl9DCitwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYzoiNTQ2NTczNzQyMDZkNjU3MzczNjE2NzY1IjpNQkVEVExTX01EX1NIQTI1NjoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOiIwZDJiZGIwNDU2YTNkNjUxZDViZDQ4YTQyMDQ0OTM4OThmNzJjZjFhYWRkZDcxMzg3Y2MwNThiYzNmNGMyMzVlYTZiZTQwMTBmZDYxYjI4ZTFmYmIyNzU0NjJiNTM3NzVjMDRiZTkwMjJkMzhiNmEyZTAzODdkZGRiYTg2YTNmODU1NGQyODU4MDQ0YTU5ZmRkYmQ1OTQ3NTNmYzA1NmZlMzNjOGRhZGRiODVkYzcwZDE2NDY5MGIxMTgyMjA5ZmY4NDgyNGUwYmUxMGUzNWMzNzlmMmYzNzhiZjE3NmE5ZjdjYjk0ZDk1ZTQ0ZDkwMjc2YTI5OGM4ODEwZjc0MWM5IjpNQkVEVExTX1BLX1JTQVNTQV9QU1M6TUJFRFRMU19NRF9TSEEyNTY6TUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZOjAKKworVmVyaWZ5IGV4dCBSU0EgIzIgKFBLQ1MxIHYyLjEsIHNhbHRfbGVuID0gQU5ZLCB3cm9uZyBtZXNzYWdlKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YyMTpNQkVEVExTX1NIQTI1Nl9DCitwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYzoiNTQ2NTczNzQyMDZkNjU3MzczNjE2NzY2IjpNQkVEVExTX01EX1NIQTI1NjoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOiIwZDJiZGIwNDU2YTNkNjUxZDViZDQ4YTQyMDQ0OTM4OThmNzJjZjFhYWRkZDcxMzg3Y2MwNThiYzNmNGMyMzVlYTZiZTQwMTBmZDYxYjI4ZTFmYmIyNzU0NjJiNTM3NzVjMDRiZTkwMjJkMzhiNmEyZTAzODdkZGRiYTg2YTNmODU1NGQyODU4MDQ0YTU5ZmRkYmQ1OTQ3NTNmYzA1NmZlMzNjOGRhZGRiODVkYzcwZDE2NDY5MGIxMTgyMjA5ZmY4NDgyNGUwYmUxMGUzNWMzNzlmMmYzNzhiZjE3NmE5ZjdjYjk0ZDk1ZTQ0ZDkwMjc2YTI5OGM4ODEwZjc0MWM5IjpNQkVEVExTX1BLX1JTQVNTQV9QU1M6TUJFRFRMU19NRF9TSEEyNTY6TUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZOk1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVECisKK1ZlcmlmeSBleHQgUlNBICMzIChQS0NTMSB2Mi4xLCBzYWx0X2xlbiA9IDAsIE9LKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YyMTpNQkVEVExTX1NIQTI1Nl9DCitwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYzoiNTQ2NTczNzQyMDZkNjU3MzczNjE2NzY1IjpNQkVEVExTX01EX1NIQTI1NjoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOiI3ZmM1MDZkMjZjYTNiMjI5MjJhMWNlMzlmYWFlZGQyNzMxNjFiODJkOTQ0M2M1NmYxYTAzNGYxMzFhZTRhMThjYWUxNDc0MjcxY2I0YjY2YTE3ZDk3MDdjYTU4YjBiZGJkM2M0MDZiN2U2NWJiY2M5YmJiY2U5NGRjNDVkZTgwN2I0OTg5YjIzYjNlNGRiNzRjYTI5Mjk4MTM3ODM3ZWI5MGNjODNkMzIxOTI0OWJjN2Q0ODBmY2VhZjA3NTIwM2E4NmU1NGM0ZWNmYTRlMzEyZTM5ZjhmNjlkNzY1MzQwODlhMzZlZDkwNDljYTljZmQ1YWIxZGIxZmE3NWZlNWM4IjpNQkVEVExTX1BLX1JTQVNTQV9QU1M6TUJFRFRMU19NRF9TSEEyNTY6MDowCisKK1ZlcmlmeSBleHQgUlNBICM0IChQS0NTMSB2Mi4xLCBzYWx0X2xlbiA9IG1heCwgT0spCitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjIxOk1CRURUTFNfU0hBMjU2X0MKK3BrX3JzYV92ZXJpZnlfZXh0X3Rlc3RfdmVjOiI1NDY1NzM3NDIwNmQ2NTczNzM2MTY3NjUiOk1CRURUTFNfTURfU0hBMjU2OjEwMjQ6MTY6IjAwZGQxMThhOWY5OWJhYjA2OGNhMmFlYTNiNmE2ZDU5OTdlZDRlYzk1NGU0MGRlZWNlYTA3ZGEwMWVhYWU4MGVjMmJiMTM0MGRiOGExMjhlODkxMzI0YTVjNWY1ZmFkOGY1OTBkN2M4Y2FjYmM1ZmU5MzFkYWZkYTEyMjM3MzUyNzk0NjFhYmFhMDU3MmI3NjE2MzFiM2E4YWZlNzM4OWIwODhiNjM5OTNhMGEyNWVlNDVkMjE4NThiYWI5OTMxYWVkZDQ1ODlhNjMxYjM3ZmNmNzE0MDg5Zjg1NjU0OWYzNTkzMjZkZDFlMGU4NmRkZTUyZWQ2NmI0YTkwYmRhNDA5NSI6MTY6IjAxMDAwMSI6IjBkMmJkYjA0NTZhM2Q2NTFkNWJkNDhhNDIwNDQ5Mzg5OGY3MmNmMWFhZGRkNzEzODdjYzA1OGJjM2Y0YzIzNWVhNmJlNDAxMGZkNjFiMjhlMWZiYjI3NTQ2MmI1Mzc3NWMwNGJlOTAyMmQzOGI2YTJlMDM4N2RkZGJhODZhM2Y4NTU0ZDI4NTgwNDRhNTlmZGRiZDU5NDc1M2ZjMDU2ZmUzM2M4ZGFkZGI4NWRjNzBkMTY0NjkwYjExODIyMDlmZjg0ODI0ZTBiZTEwZTM1YzM3OWYyZjM3OGJmMTc2YTlmN2NiOTRkOTVlNDRkOTAyNzZhMjk4Yzg4MTBmNzQxYzkiOk1CRURUTFNfUEtfUlNBU1NBX1BTUzpNQkVEVExTX01EX1NIQTI1Njo5NDowCisKK1ZlcmlmeSBleHQgUlNBICM1IChQS0NTMSB2Mi4xLCB3cm9uZyBzYWx0X2xlbikKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMjE6TUJFRFRMU19TSEEyNTZfQworcGtfcnNhX3ZlcmlmeV9leHRfdGVzdF92ZWM6IjU0NjU3Mzc0MjA2ZDY1NzM3MzYxNjc2NSI6TUJFRFRMU19NRF9TSEEyNTY6MTAyNDoxNjoiMDBkZDExOGE5Zjk5YmFiMDY4Y2EyYWVhM2I2YTZkNTk5N2VkNGVjOTU0ZTQwZGVlY2VhMDdkYTAxZWFhZTgwZWMyYmIxMzQwZGI4YTEyOGU4OTEzMjRhNWM1ZjVmYWQ4ZjU5MGQ3YzhjYWNiYzVmZTkzMWRhZmRhMTIyMzczNTI3OTQ2MWFiYWEwNTcyYjc2MTYzMWIzYThhZmU3Mzg5YjA4OGI2Mzk5M2EwYTI1ZWU0NWQyMTg1OGJhYjk5MzFhZWRkNDU4OWE2MzFiMzdmY2Y3MTQwODlmODU2NTQ5ZjM1OTMyNmRkMWUwZTg2ZGRlNTJlZDY2YjRhOTBiZGE0MDk1IjoxNjoiMDEwMDAxIjoiMGQyYmRiMDQ1NmEzZDY1MWQ1YmQ0OGE0MjA0NDkzODk4ZjcyY2YxYWFkZGQ3MTM4N2NjMDU4YmMzZjRjMjM1ZWE2YmU0MDEwZmQ2MWIyOGUxZmJiMjc1NDYyYjUzNzc1YzA0YmU5MDIyZDM4YjZhMmUwMzg3ZGRkYmE4NmEzZjg1NTRkMjg1ODA0NGE1OWZkZGJkNTk0NzUzZmMwNTZmZTMzYzhkYWRkYjg1ZGM3MGQxNjQ2OTBiMTE4MjIwOWZmODQ4MjRlMGJlMTBlMzVjMzc5ZjJmMzc4YmYxNzZhOWY3Y2I5NGQ5NWU0NGQ5MDI3NmEyOThjODgxMGY3NDFjOSI6TUJFRFRMU19QS19SU0FTU0FfUFNTOk1CRURUTFNfTURfU0hBMjU2OjMyOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworVmVyaWZ5IGV4dCBSU0EgIzYgKFBLQ1MxIHYyLjEsIE1HRjEgYWxnICE9IE1TRyBoYXNoIGFsZykKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMjE6TUJFRFRMU19TSEEyNTZfQworcGtfcnNhX3ZlcmlmeV9leHRfdGVzdF92ZWM6ImMwNzE5ZTlhOGQ1ZDgzOGQ4NjFkYzZmNjc1Yzg5OWQyYjMwOWEzYTY1YmI5ZmU2YjExZTVhZmNiZjlhMmMwYjEiOk1CRURUTFNfTURfTk9ORToxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOiIwZDJiZGIwNDU2YTNkNjUxZDViZDQ4YTQyMDQ0OTM4OThmNzJjZjFhYWRkZDcxMzg3Y2MwNThiYzNmNGMyMzVlYTZiZTQwMTBmZDYxYjI4ZTFmYmIyNzU0NjJiNTM3NzVjMDRiZTkwMjJkMzhiNmEyZTAzODdkZGRiYTg2YTNmODU1NGQyODU4MDQ0YTU5ZmRkYmQ1OTQ3NTNmYzA1NmZlMzNjOGRhZGRiODVkYzcwZDE2NDY5MGIxMTgyMjA5ZmY4NDgyNGUwYmUxMGUzNWMzNzlmMmYzNzhiZjE3NmE5ZjdjYjk0ZDk1ZTQ0ZDkwMjc2YTI5OGM4ODEwZjc0MWM5IjpNQkVEVExTX1BLX1JTQVNTQV9QU1M6TUJFRFRMU19NRF9TSEEyNTY6TUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZOjAKKworVmVyaWZ5IGV4dCBSU0EgIzcgKFBLQ1MxIHYyLjEsIHdyb25nIE1HRjEgYWxnICE9IE1TRyBoYXNoIGFsZykKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMjE6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1NIQTFfQworcGtfcnNhX3ZlcmlmeV9leHRfdGVzdF92ZWM6ImMwNzE5ZTlhOGQ1ZDgzOGQ4NjFkYzZmNjc1Yzg5OWQyYjMwOWEzYTY1YmI5ZmU2YjExZTVhZmNiZjlhMmMwYjEiOk1CRURUTFNfTURfTk9ORToxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOiIwZDJiZGIwNDU2YTNkNjUxZDViZDQ4YTQyMDQ0OTM4OThmNzJjZjFhYWRkZDcxMzg3Y2MwNThiYzNmNGMyMzVlYTZiZTQwMTBmZDYxYjI4ZTFmYmIyNzU0NjJiNTM3NzVjMDRiZTkwMjJkMzhiNmEyZTAzODdkZGRiYTg2YTNmODU1NGQyODU4MDQ0YTU5ZmRkYmQ1OTQ3NTNmYzA1NmZlMzNjOGRhZGRiODVkYzcwZDE2NDY5MGIxMTgyMjA5ZmY4NDgyNGUwYmUxMGUzNWMzNzlmMmYzNzhiZjE3NmE5ZjdjYjk0ZDk1ZTQ0ZDkwMjc2YTI5OGM4ODEwZjc0MWM5IjpNQkVEVExTX1BLX1JTQVNTQV9QU1M6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfUlNBX1NBTFRfTEVOX0FOWTpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK1ZlcmlmeSBleHQgUlNBICM4IChQS0NTMSB2Mi4xLCBSU0FTU0EtUFNTIHdpdGhvdXQgb3B0aW9ucykKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMjE6TUJFRFRMU19TSEEyNTZfQworcGtfcnNhX3ZlcmlmeV9leHRfdGVzdF92ZWM6IjU0NjU3Mzc0MjA2ZDY1NzM3MzYxNjc2NSI6TUJFRFRMU19NRF9TSEEyNTY6MTAyNDoxNjoiMDBkZDExOGE5Zjk5YmFiMDY4Y2EyYWVhM2I2YTZkNTk5N2VkNGVjOTU0ZTQwZGVlY2VhMDdkYTAxZWFhZTgwZWMyYmIxMzQwZGI4YTEyOGU4OTEzMjRhNWM1ZjVmYWQ4ZjU5MGQ3YzhjYWNiYzVmZTkzMWRhZmRhMTIyMzczNTI3OTQ2MWFiYWEwNTcyYjc2MTYzMWIzYThhZmU3Mzg5YjA4OGI2Mzk5M2EwYTI1ZWU0NWQyMTg1OGJhYjk5MzFhZWRkNDU4OWE2MzFiMzdmY2Y3MTQwODlmODU2NTQ5ZjM1OTMyNmRkMWUwZTg2ZGRlNTJlZDY2YjRhOTBiZGE0MDk1IjoxNjoiMDEwMDAxIjoiMGQyYmRiMDQ1NmEzZDY1MWQ1YmQ0OGE0MjA0NDkzODk4ZjcyY2YxYWFkZGQ3MTM4N2NjMDU4YmMzZjRjMjM1ZWE2YmU0MDEwZmQ2MWIyOGUxZmJiMjc1NDYyYjUzNzc1YzA0YmU5MDIyZDM4YjZhMmUwMzg3ZGRkYmE4NmEzZjg1NTRkMjg1ODA0NGE1OWZkZGJkNTk0NzUzZmMwNTZmZTMzYzhkYWRkYjg1ZGM3MGQxNjQ2OTBiMTE4MjIwOWZmODQ4MjRlMGJlMTBlMzVjMzc5ZjJmMzc4YmYxNzZhOWY3Y2I5NGQ5NWU0NGQ5MDI3NmEyOThjODgxMGY3NDFjOSI6TUJFRFRMU19QS19SU0FTU0FfUFNTOi0xOk1CRURUTFNfUlNBX1NBTFRfTEVOX0FOWTpNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQQorCitWZXJpZnkgZXh0IFJTQSAjOSAoUEtDUzEgdjIuMSwgUlNBIHdpdGggb3B0aW9ucykKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEEyNTZfQworcGtfcnNhX3ZlcmlmeV9leHRfdGVzdF92ZWM6IjU0NjU3Mzc0MjA2ZDY1NzM3MzYxNjc2NSI6TUJFRFRMU19NRF9TSEEyNTY6MTAyNDoxNjoiMDBkZDExOGE5Zjk5YmFiMDY4Y2EyYWVhM2I2YTZkNTk5N2VkNGVjOTU0ZTQwZGVlY2VhMDdkYTAxZWFhZTgwZWMyYmIxMzQwZGI4YTEyOGU4OTEzMjRhNWM1ZjVmYWQ4ZjU5MGQ3YzhjYWNiYzVmZTkzMWRhZmRhMTIyMzczNTI3OTQ2MWFiYWEwNTcyYjc2MTYzMWIzYThhZmU3Mzg5YjA4OGI2Mzk5M2EwYTI1ZWU0NWQyMTg1OGJhYjk5MzFhZWRkNDU4OWE2MzFiMzdmY2Y3MTQwODlmODU2NTQ5ZjM1OTMyNmRkMWUwZTg2ZGRlNTJlZDY2YjRhOTBiZGE0MDk1IjoxNjoiMDEwMDAxIjoiMGQyYmRiMDQ1NmEzZDY1MWQ1YmQ0OGE0MjA0NDkzODk4ZjcyY2YxYWFkZGQ3MTM4N2NjMDU4YmMzZjRjMjM1ZWE2YmU0MDEwZmQ2MWIyOGUxZmJiMjc1NDYyYjUzNzc1YzA0YmU5MDIyZDM4YjZhMmUwMzg3ZGRkYmE4NmEzZjg1NTRkMjg1ODA0NGE1OWZkZGJkNTk0NzUzZmMwNTZmZTMzYzhkYWRkYjg1ZGM3MGQxNjQ2OTBiMTE4MjIwOWZmODQ4MjRlMGJlMTBlMzVjMzc5ZjJmMzc4YmYxNzZhOWY3Y2I5NGQ5NWU0NGQ5MDI3NmEyOThjODgxMGY3NDFjOSI6TUJFRFRMU19QS19SU0E6TUJFRFRMU19NRF9TSEEyNTY6TUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZOk1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBCisKK1ZlcmlmeSBleHQgUlNBICMxMCAoUEtDUzEgdjIuMSwgUlNBIHdpdGhvdXQgb3B0aW9ucykKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEEyNTZfQworcGtfcnNhX3ZlcmlmeV9leHRfdGVzdF92ZWM6IjU0NjU3Mzc0MjA2ZDY1NzM3MzYxNjc2NSI6TUJFRFRMU19NRF9TSEEyNTY6MTAyNDoxNjoiMDBkZDExOGE5Zjk5YmFiMDY4Y2EyYWVhM2I2YTZkNTk5N2VkNGVjOTU0ZTQwZGVlY2VhMDdkYTAxZWFhZTgwZWMyYmIxMzQwZGI4YTEyOGU4OTEzMjRhNWM1ZjVmYWQ4ZjU5MGQ3YzhjYWNiYzVmZTkzMWRhZmRhMTIyMzczNTI3OTQ2MWFiYWEwNTcyYjc2MTYzMWIzYThhZmU3Mzg5YjA4OGI2Mzk5M2EwYTI1ZWU0NWQyMTg1OGJhYjk5MzFhZWRkNDU4OWE2MzFiMzdmY2Y3MTQwODlmODU2NTQ5ZjM1OTMyNmRkMWUwZTg2ZGRlNTJlZDY2YjRhOTBiZGE0MDk1IjoxNjoiMDEwMDAxIjoiMGQyYmRiMDQ1NmEzZDY1MWQ1YmQ0OGE0MjA0NDkzODk4ZjcyY2YxYWFkZGQ3MTM4N2NjMDU4YmMzZjRjMjM1ZWE2YmU0MDEwZmQ2MWIyOGUxZmJiMjc1NDYyYjUzNzc1YzA0YmU5MDIyZDM4YjZhMmUwMzg3ZGRkYmE4NmEzZjg1NTRkMjg1ODA0NGE1OWZkZGJkNTk0NzUzZmMwNTZmZTMzYzhkYWRkYjg1ZGM3MGQxNjQ2OTBiMTE4MjIwOWZmODQ4MjRlMGJlMTBlMzVjMzc5ZjJmMzc4YmYxNzZhOWY3Y2I5NGQ5NWU0NGQ5MDI3NmEyOThjODgxMGY3NDFjOSI6TUJFRFRMU19QS19SU0E6LTE6TUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworVmVyaWZ5IGV4dCBSU0EgIzExIChQS0NTMSB2Mi4xLCBhc2tpbmcgZm9yIEVDRFNBKQorZGVwZW5kc19vbjpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19TSEEyNTZfQworcGtfcnNhX3ZlcmlmeV9leHRfdGVzdF92ZWM6IjU0NjU3Mzc0MjA2ZDY1NzM3MzYxNjc2NSI6TUJFRFRMU19NRF9TSEEyNTY6MTAyNDoxNjoiMDBkZDExOGE5Zjk5YmFiMDY4Y2EyYWVhM2I2YTZkNTk5N2VkNGVjOTU0ZTQwZGVlY2VhMDdkYTAxZWFhZTgwZWMyYmIxMzQwZGI4YTEyOGU4OTEzMjRhNWM1ZjVmYWQ4ZjU5MGQ3YzhjYWNiYzVmZTkzMWRhZmRhMTIyMzczNTI3OTQ2MWFiYWEwNTcyYjc2MTYzMWIzYThhZmU3Mzg5YjA4OGI2Mzk5M2EwYTI1ZWU0NWQyMTg1OGJhYjk5MzFhZWRkNDU4OWE2MzFiMzdmY2Y3MTQwODlmODU2NTQ5ZjM1OTMyNmRkMWUwZTg2ZGRlNTJlZDY2YjRhOTBiZGE0MDk1IjoxNjoiMDEwMDAxIjoiMGQyYmRiMDQ1NmEzZDY1MWQ1YmQ0OGE0MjA0NDkzODk4ZjcyY2YxYWFkZGQ3MTM4N2NjMDU4YmMzZjRjMjM1ZWE2YmU0MDEwZmQ2MWIyOGUxZmJiMjc1NDYyYjUzNzc1YzA0YmU5MDIyZDM4YjZhMmUwMzg3ZGRkYmE4NmEzZjg1NTRkMjg1ODA0NGE1OWZkZGJkNTk0NzUzZmMwNTZmZTMzYzhkYWRkYjg1ZGM3MGQxNjQ2OTBiMTE4MjIwOWZmODQ4MjRlMGJlMTBlMzVjMzc5ZjJmMzc4YmYxNzZhOWY3Y2I5NGQ5NWU0NGQ5MDI3NmEyOThjODgxMGY3NDFjOSI6TUJFRFRMU19QS19FQ0RTQTotMTpNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlk6TUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSAorCitWZXJpZnkgZXh0IFJTQSAjMTIgKFBLQ1MxIHYxLjUsIGdvb2QpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEtDUzFfVjE1Citwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYzoiMjA2ZWY0YmYzOTZjNjA4N2Y4MjI5ZWYxOTZmZDM1ZjM3Y2NiOGRlNWVmY2RiMjM4ZjIwZDU1NjY2OGYxMTQyNTdhMTFmYmUwMzg0NjRhNjc4MzAzNzhlNjJhZTk3OTE0NTM5NTNkYWMxZGJkNzkyMTgzN2JhOThlODRlODU2ZWI4MGVkOTQ4N2U2NTZkMGIyMGMyOGM4YmE1ZTM1ZGIxYWJiZWQ4M2VkMWM3NzIwYTk3NzAxZjcwOWUzNTQ3YTRiZmNhYmNhOWM4OWM1N2FkMTVjMzk5NjU3N2EwYWUzNmQ3YzdiNjk5MDM1MjQyZjM3OTU0NjQ2YzFjZDVjMDhhYyI6TUJFRFRMU19NRF9TSEExOjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIzIjoiNWFiYzAxZjVkZTI1YjcwODY3ZmYwYzI0ZTIyMmM2MWY1M2M4OGRhZjQyNTg2ZmRkY2Q1NmYzYzQ1ODhmMDc0YmUzYzMyODA1NmMwNjMzODg2ODhiNjM4NWE4MTY3OTU3YzZlNTM1NWE1MTBlMDA1YjhhODUxZDY5Yzk2YjM2ZWM2MDM2NjQ0MDc4MjEwZTVkN2QzMjZmOTYzNjVlZTA2NDg4ODI5MjE0OTJiYzdiNzUzZWI5YzI2Y2RiYWIzNzU1NWYyMTBkZjJjYTZmZWMxYjI1YjQ2M2QzOGI4MWMwZGNlYTIwMjAyMmIwNGFmNWRhNThhYTAzZDc3YmU5NDliNyI6TUJFRFRMU19QS19SU0E6LTE6TUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZOjAKKworQ2hlY2sgcGFpciAjMSAoRUMsIE9LKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX3BrX2NoZWNrX3BhaXI6ImRhdGFfZmlsZXMvZWNfMjU2X3B1Yi5wZW0iOiJkYXRhX2ZpbGVzL2VjXzI1Nl9wcnYucGVtIjowCisKK0NoZWNrIHBhaXIgIzIgKEVDLCBiYWQpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfcGtfY2hlY2tfcGFpcjoiZGF0YV9maWxlcy9lY18yNTZfcHViLnBlbSI6ImRhdGFfZmlsZXMvc2VydmVyNS5rZXkiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitDaGVjayBwYWlyICMzIChSU0EsIE9LKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DCittYmVkdGxzX3BrX2NoZWNrX3BhaXI6ImRhdGFfZmlsZXMvc2VydmVyMS5wdWJrZXkiOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjowCisKK0NoZWNrIHBhaXIgIzQgKFJTQSwgYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DCittYmVkdGxzX3BrX2NoZWNrX3BhaXI6ImRhdGFfZmlsZXMvc2VydmVyMS5wdWJrZXkiOiJkYXRhX2ZpbGVzL3NlcnZlcjIua2V5IjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitDaGVjayBwYWlyICM1IChSU0EgdnMgRUMpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19SU0FfQworbWJlZHRsc19wa19jaGVja19wYWlyOiJkYXRhX2ZpbGVzL2VjXzI1Nl9wdWIucGVtIjoiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSI6TUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSAorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGsuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGsuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhhMjYyMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9way5mdW5jdGlvbgpAQCAtMCwwICsxLDQ5MCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9way5oIgorCisvKiBGb3IgZXJyb3IgY29kZXMgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2VjcC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisKK3N0YXRpYyBpbnQgcm5kX3N0ZF9yYW5kKCB2b2lkICpybmdfc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiApOworCisjZGVmaW5lIFJTQV9LRVlfU0laRSA1MTIKKyNkZWZpbmUgUlNBX0tFWV9MRU4gICA2NAorCitzdGF0aWMgaW50IHBrX2dlbmtleSggbWJlZHRsc19wa19jb250ZXh0ICpwayApCit7CisgICAgKCh2b2lkKSBwayk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19HRU5QUklNRSkKKyAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSggcGsgKSA9PSBNQkVEVExTX1BLX1JTQSApCisgICAgICAgIHJldHVybiBtYmVkdGxzX3JzYV9nZW5fa2V5KCBtYmVkdGxzX3BrX3JzYSggKnBrICksIHJuZF9zdGRfcmFuZCwgTlVMTCwgUlNBX0tFWV9TSVpFLCAzICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoIHBrICkgPT0gTUJFRFRMU19QS19FQ0tFWSB8fAorICAgICAgICBtYmVkdGxzX3BrX2dldF90eXBlKCBwayApID09IE1CRURUTFNfUEtfRUNLRVlfREggfHwKKyAgICAgICAgbWJlZHRsc19wa19nZXRfdHlwZSggcGsgKSA9PSBNQkVEVExTX1BLX0VDRFNBICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZtYmVkdGxzX3BrX2VjKCAqcGsgKS0+Z3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjEgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICByZXR1cm4gbWJlZHRsc19lY3BfZ2VuX2tleXBhaXIoICZtYmVkdGxzX3BrX2VjKCAqcGsgKS0+Z3JwLCAmbWJlZHRsc19wa19lYyggKnBrICktPmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYmVkdGxzX3BrX2VjKCAqcGsgKS0+USwgcm5kX3N0ZF9yYW5kLCBOVUxMICk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuKCAtMSApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQoraW50IG1iZWR0bHNfcnNhX2RlY3J5cHRfZnVuYyggdm9pZCAqY3R4LCBpbnQgbW9kZSwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X21heF9sZW4gKQoreworICAgIHJldHVybiggbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdCggKG1iZWR0bHNfcnNhX2NvbnRleHQgKikgY3R4LCBOVUxMLCBOVUxMLCBtb2RlLCBvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQsIG91dHB1dF9tYXhfbGVuICkgKTsKK30KK2ludCBtYmVkdGxzX3JzYV9zaWduX2Z1bmMoIHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHVuc2lnbmVkIGNoYXIgKnNpZyApCit7CisgICAgcmV0dXJuKCBtYmVkdGxzX3JzYV9wa2NzMV9zaWduKCAobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgsIGZfcm5nLCBwX3JuZywgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZF9hbGcsIGhhc2hsZW4sIGhhc2gsIHNpZyApICk7Cit9CitzaXplX3QgbWJlZHRsc19yc2Ffa2V5X2xlbl9mdW5jKCB2b2lkICpjdHggKQoreworICAgIHJldHVybiggKChjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCktPmxlbiApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfUEtfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcGtfdXRpbHMoIGludCB0eXBlLCBpbnQgc2l6ZSwgaW50IGxlbiwgY2hhciAqbmFtZSApCit7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOworCisgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3NldHVwKCAmcGssIG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUoIHR5cGUgKSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggcGtfZ2Vua2V5KCAmcGsgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggKGludCkgbWJlZHRsc19wa19nZXRfdHlwZSggJnBrICkgPT0gdHlwZSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2Nhbl9kbyggJnBrLCB0eXBlICkgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19nZXRfYml0bGVuKCAmcGsgKSA9PSAodW5zaWduZWQpIHNpemUgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19nZXRfbGVuKCAmcGsgKSA9PSAodW5zaWduZWQpIGxlbiApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIG1iZWR0bHNfcGtfZ2V0X25hbWUoICZwayksIG5hbWUgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGsgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19GU19JTyAqLwordm9pZCBtYmVkdGxzX3BrX2NoZWNrX3BhaXIoIGNoYXIgKnB1Yl9maWxlLCBjaGFyICpwcnZfZmlsZSwgaW50IHJldCApCit7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHB1YiwgcHJ2LCBhbHQ7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwdWIgKTsKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwcnYgKTsKKyAgICBtYmVkdGxzX3BrX2luaXQoICZhbHQgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlKCAmcHViLCBwdWJfZmlsZSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmcHJ2LCBwcnZfZmlsZSwgTlVMTCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2NoZWNrX3BhaXIoICZwdWIsICZwcnYgKSA9PSByZXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCkKKyAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSggJnBydiApID09IE1CRURUTFNfUEtfUlNBICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3NldHVwX3JzYV9hbHQoICZhbHQsIG1iZWR0bHNfcGtfcnNhKCBwcnYgKSwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcnNhX2RlY3J5cHRfZnVuYywgbWJlZHRsc19yc2Ffc2lnbl9mdW5jLCBtYmVkdGxzX3JzYV9rZXlfbGVuX2Z1bmMgKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2NoZWNrX3BhaXIoICZwdWIsICZhbHQgKSA9PSByZXQgKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1iZWR0bHNfcGtfZnJlZSggJnB1YiApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJnBydiApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJmFsdCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfUlNBX0MgKi8KK3ZvaWQgcGtfcnNhX3ZlcmlmeV90ZXN0X3ZlYyggY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBpbnQgZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kLCBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwgaW50IHJhZGl4X0UsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X0UsIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciByZXN1bHRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYTsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisgICAgaW50IG1zZ19sZW47CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggaGFzaF9yZXN1bHQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIHJlc3VsdF9zdHIsIDB4MDAsIDEwMDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3NldHVwKCAmcGssIG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfUEtfUlNBICkgKSA9PSAwICk7CisgICAgcnNhID0gbWJlZHRsc19wa19yc2EoIHBrICk7CisKKyAgICByc2EtPmxlbiA9IG1vZCAvIDg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLT5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnJzYS0+RSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCByZXN1bHRfc3RyLCByZXN1bHRfaGV4X3N0ciApOworCisgICAgaWYoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGRpZ2VzdCApICE9IE5VTEwgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZCggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggZGlnZXN0ICksIG1lc3NhZ2Vfc3RyLCBtc2dfbGVuLCBoYXNoX3Jlc3VsdCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3ZlcmlmeSggJnBrLCBkaWdlc3QsIGhhc2hfcmVzdWx0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdHIsIG1iZWR0bHNfcGtfZ2V0X2xlbiggJnBrICkgKSA9PSByZXN1bHQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfUlNBX0MgKi8KK3ZvaWQgcGtfcnNhX3ZlcmlmeV9leHRfdGVzdF92ZWMoIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgaW50IGRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZCwgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sIGludCByYWRpeF9FLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9FLCBjaGFyICpyZXN1bHRfaGV4X3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHBrX3R5cGUsIGludCBtZ2YxX2hhc2hfaWQsIGludCBzYWx0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBtZXNzYWdlX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hfcmVzdWx0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0X3N0clsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2E7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOworICAgIG1iZWR0bHNfcGtfcnNhc3NhX3Bzc19vcHRpb25zIHBzc19vcHRzOworICAgIHZvaWQgKm9wdGlvbnM7CisgICAgaW50IG1zZ19sZW47CisgICAgc2l6ZV90IGhhc2hfbGVuOworCisgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKKworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfcmVzdWx0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCByZXN1bHRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zZXR1cCggJnBrLCBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX1BLX1JTQSApICkgPT0gMCApOworICAgIHJzYSA9IG1iZWR0bHNfcGtfcnNhKCBwayApOworCisgICAgcnNhLT5sZW4gPSBtb2QgLyA4OworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnJzYS0+TiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EtPkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBtc2dfbGVuID0gdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggcmVzdWx0X3N0ciwgcmVzdWx0X2hleF9zdHIgKTsKKworICAgIGlmKCBkaWdlc3QgIT0gTUJFRFRMU19NRF9OT05FICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kKCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBkaWdlc3QgKSwKKyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc3RyLCBtc2dfbGVuLCBoYXNoX3Jlc3VsdCApID09IDAgKTsKKyAgICAgICAgaGFzaF9sZW4gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtZW1jcHkoIGhhc2hfcmVzdWx0LCBtZXNzYWdlX3N0ciwgbXNnX2xlbiApOworICAgICAgICBoYXNoX2xlbiA9IG1zZ19sZW47CisgICAgfQorCisgICAgaWYoIG1nZjFfaGFzaF9pZCA8IDAgKQorICAgIHsKKyAgICAgICAgb3B0aW9ucyA9IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG9wdGlvbnMgPSAmcHNzX29wdHM7CisKKyAgICAgICAgcHNzX29wdHMubWdmMV9oYXNoX2lkID0gbWdmMV9oYXNoX2lkOworICAgICAgICBwc3Nfb3B0cy5leHBlY3RlZF9zYWx0X2xlbiA9IHNhbHRfbGVuOworICAgIH0KKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3ZlcmlmeV9leHQoIHBrX3R5cGUsIG9wdGlvbnMsICZwaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnZXN0LCBoYXNoX3Jlc3VsdCwgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdHIsIG1iZWR0bHNfcGtfZ2V0X2xlbiggJnBrICkgKSA9PSByZXN1bHQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQyAqLwordm9pZCBwa19lY190ZXN0X3ZlYyggaW50IHR5cGUsIGludCBpZCwgY2hhciAqa2V5X3N0ciwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhhc2hfc3RyLCBjaGFyICogc2lnX3N0ciwgaW50IHJldCApCit7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOworICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgKmVja2V5OworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFsxMDBdLCBzaWdbNTAwXSwga2V5WzUwMF07CisgICAgc2l6ZV90IGhhc2hfbGVuLCBzaWdfbGVuLCBrZXlfbGVuOworCisgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKKworICAgIG1lbXNldCggaGFzaCwgMCwgc2l6ZW9mKCBoYXNoICkgKTsgIGhhc2hfbGVuID0gdW5oZXhpZnkoaGFzaCwgaGFzaF9zdHIpOworICAgIG1lbXNldCggc2lnLCAwLCBzaXplb2YoIHNpZyApICk7ICAgIHNpZ19sZW4gPSB1bmhleGlmeShzaWcsIHNpZ19zdHIpOworICAgIG1lbXNldCgga2V5LCAwLCBzaXplb2YoIGtleSApICk7ICAgIGtleV9sZW4gPSB1bmhleGlmeShrZXksIGtleV9zdHIpOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfc2V0dXAoICZwaywgbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggdHlwZSApICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfY2FuX2RvKCAmcGssIE1CRURUTFNfUEtfRUNEU0EgKSApOworICAgIGVja2V5ID0gbWJlZHRsc19wa19lYyggcGsgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZWNrZXktPmdycCwgaWQgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfYmluYXJ5KCAmZWNrZXktPmdycCwgJmVja2V5LT5RLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwga2V5X2xlbiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3ZlcmlmeSggJnBrLCBNQkVEVExTX01EX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgaGFzaF9sZW4sIHNpZywgc2lnX2xlbiApID09IHJldCApOworCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQyAqLwordm9pZCBwa19zaWduX3ZlcmlmeSggaW50IHR5cGUsIGludCBzaWduX3JldCwgaW50IHZlcmlmeV9yZXQgKQoreworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwazsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbNTBdLCBzaWdbNTAwMF07CisgICAgc2l6ZV90IHNpZ19sZW47CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgbWVtc2V0KCBoYXNoLCAweDJhLCBzaXplb2YgaGFzaCApOworICAgIG1lbXNldCggc2lnLCAwLCBzaXplb2Ygc2lnICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zZXR1cCggJnBrLCBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCB0eXBlICkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIHBrX2dlbmtleSggJnBrICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfc2lnbiggJnBrLCBNQkVEVExTX01EX1NIQTI1NiwgaGFzaCwgc2l6ZW9mIGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZywgJnNpZ19sZW4sIHJuZF9zdGRfcmFuZCwgTlVMTCApID09IHNpZ25fcmV0ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa192ZXJpZnkoICZwaywgTUJFRFRMU19NRF9TSEEyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgc2l6ZW9mIGhhc2gsIHNpZywgc2lnX2xlbiApID09IHZlcmlmeV9yZXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfUlNBX0MgKi8KK3ZvaWQgcGtfcnNhX2VuY3J5cHRfdGVzdF92ZWMoIGNoYXIgKm1lc3NhZ2VfaGV4LCBpbnQgbW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9FLCBjaGFyICppbnB1dF9FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9oZXgsIGludCByZXQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZVsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdFsxMDAwXTsKKyAgICBzaXplX3QgbXNnX2xlbiwgb2xlbiwgcmVzX2xlbjsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhOworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwazsKKworICAgIG1lbXNldCggJnJuZF9pbmZvLCAgMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworICAgIG1lbXNldCggbWVzc2FnZSwgICAgMCwgc2l6ZW9mKCBtZXNzYWdlICkgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgICAgIDAsIHNpemVvZiggb3V0cHV0ICkgKTsKKyAgICBtZW1zZXQoIHJlc3VsdCwgICAgIDAsIHNpemVvZiggcmVzdWx0ICkgKTsKKworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbWVzc2FnZSwgbWVzc2FnZV9oZXggKTsKKyAgICByZXNfbGVuID0gdW5oZXhpZnkoIHJlc3VsdCwgcmVzdWx0X2hleCApOworCisgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zZXR1cCggJnBrLCBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX1BLX1JTQSApICkgPT0gMCApOworICAgIHJzYSA9IG1iZWR0bHNfcGtfcnNhKCBwayApOworCisgICAgcnNhLT5sZW4gPSBtb2QgLyA4OworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnJzYS0+TiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EtPkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19lbmNyeXB0KCAmcGssIG1lc3NhZ2UsIG1zZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm9sZW4sIHNpemVvZiggb3V0cHV0ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gcmV0ICk7CisgICAgVEVTVF9BU1NFUlQoIG9sZW4gPT0gcmVzX2xlbiApOworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG91dHB1dCwgcmVzdWx0LCBvbGVuICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19SU0FfQyAqLwordm9pZCBwa19yc2FfZGVjcnlwdF90ZXN0X3ZlYyggY2hhciAqY2lwaGVyX2hleCwgaW50IG1vZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfUCwgY2hhciAqaW5wdXRfUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfUSwgY2hhciAqaW5wdXRfUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjbGVhcl9oZXgsIGludCByZXQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgY2xlYXJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBjaXBoZXJbMTAwMF07CisgICAgc2l6ZV90IGNsZWFyX2xlbiwgb2xlbiwgY2lwaGVyX2xlbjsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisgICAgbWJlZHRsc19tcGkgUDEsIFExLCBILCBHOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYTsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZQMSApOyBtYmVkdGxzX21waV9pbml0KCAmUTEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkggKTsgbWJlZHRsc19tcGlfaW5pdCggJkcgKTsKKworICAgIG1lbXNldCggJnJuZF9pbmZvLCAgMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworICAgIG1lbXNldCggY2xlYXIsICAgICAgMCwgc2l6ZW9mKCBjbGVhciApICk7CisgICAgbWVtc2V0KCBjaXBoZXIsICAgICAwLCBzaXplb2YoIGNpcGhlciApICk7CisKKyAgICBjbGVhcl9sZW4gPSB1bmhleGlmeSggY2xlYXIsIGNsZWFyX2hleCApOworICAgIGNpcGhlcl9sZW4gPSB1bmhleGlmeSggY2lwaGVyLCBjaXBoZXJfaGV4ICk7CisKKyAgICAvKiBpbml0IHBrLXJzYSBjb250ZXh0ICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfc2V0dXAoICZwaywgbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19QS19SU0EgKSApID09IDAgKTsKKyAgICByc2EgPSBtYmVkdGxzX3BrX3JzYSggcGsgKTsKKworICAgIC8qIGxvYWQgcHVibGljIGtleSAqLworICAgIHJzYS0+bGVuID0gbW9kIC8gODsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EtPk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLT5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgLyogbG9hZCBwcml2YXRlIGtleSAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnJzYS0+UCwgcmFkaXhfUCwgaW5wdXRfUCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EtPlEsIHJhZGl4X1EsIGlucHV0X1EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZQMSwgJnJzYS0+UCwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlExLCAmcnNhLT5RLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmSCwgJlAxLCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2djZCggJkcsICZyc2EtPkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJnJzYS0+RCAsICZyc2EtPkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJnJzYS0+RFAsICZyc2EtPkQsICZQMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJnJzYS0+RFEsICZyc2EtPkQsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJnJzYS0+UVAsICZyc2EtPlEsICZyc2EtPlAgKSA9PSAwICk7CisKKyAgICAvKiBkZWNyeXB0aW9uIHRlc3QgKi8KKyAgICBtZW1zZXQoIG91dHB1dCwgMCwgc2l6ZW9mKCBvdXRwdXQgKSApOworICAgIG9sZW4gPSAwOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2RlY3J5cHQoICZwaywgY2lwaGVyLCBjaXBoZXJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvbGVuLCBzaXplb2YoIG91dHB1dCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IHJldCApOworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggb2xlbiA9PSBjbGVhcl9sZW4gKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggb3V0cHV0LCBjbGVhciwgb2xlbiApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlAxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZRMSApOyBtYmVkdGxzX21waV9mcmVlKCAmSCApOyBtYmVkdGxzX21waV9mcmVlKCAmRyApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHBrX2VjX25vY3J5cHQoIGludCB0eXBlICkKK3sKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0WzEwMF07CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworICAgIHNpemVfdCBvbGVuID0gMDsKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSDsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrICk7CisKKyAgICBtZW1zZXQoICZybmRfaW5mbywgIDAsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgICAgIDAsIHNpemVvZiggb3V0cHV0ICkgKTsKKyAgICBtZW1zZXQoIGlucHV0LCAgICAgIDAsIHNpemVvZiggaW5wdXQgKSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfc2V0dXAoICZwaywgbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggdHlwZSApICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfZW5jcnlwdCggJnBrLCBpbnB1dCwgc2l6ZW9mKCBpbnB1dCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvbGVuLCBzaXplb2YoIG91dHB1dCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IHJldCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfZGVjcnlwdCggJnBrLCBpbnB1dCwgc2l6ZW9mKCBpbnB1dCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvbGVuLCBzaXplb2YoIG91dHB1dCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IHJldCApOworCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCAqLwordm9pZCBwa19yc2FfYWx0KCApCit7CisgICAgLyoKKyAgICAgKiBBbiByc2FfYWx0IGNvbnRleHQgY2FuIG9ubHkgZG8gcHJpdmF0ZSBvcGVyYXRpb25zIChkZWNyeXB0LCBzaWduKS4KKyAgICAgKiBUZXN0IGl0IGFnYWluc3QgdGhlIHB1YmxpYyBvcGVyYXRpb25zIChlbmNyeXB0LCB2ZXJpZnkpIG9mIGEKKyAgICAgKiBjb3JyZXNwb25kaW5nIHJzYSBjb250ZXh0LgorICAgICAqLworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgcmF3OworICAgIG1iZWR0bHNfcGtfY29udGV4dCByc2EsIGFsdDsKKyAgICBtYmVkdGxzX3BrX2RlYnVnX2l0ZW0gZGJnX2l0ZW1zWzEwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbNTBdLCBzaWdbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBtc2dbNTBdLCBjaXBoWzEwMDBdLCB0ZXN0WzEwMDBdOworICAgIHNpemVfdCBzaWdfbGVuLCBjaXBoX2xlbiwgdGVzdF9sZW47CisgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0g7CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmcmF3LCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgTUJFRFRMU19NRF9OT05FICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmcnNhICk7IG1iZWR0bHNfcGtfaW5pdCggJmFsdCApOworCisgICAgbWVtc2V0KCBoYXNoLCAweDJhLCBzaXplb2YgaGFzaCApOworICAgIG1lbXNldCggc2lnLCAwLCBzaXplb2Ygc2lnICk7CisgICAgbWVtc2V0KCBtc2csIDB4MmEsIHNpemVvZiBtc2cgKTsKKyAgICBtZW1zZXQoIGNpcGgsIDAsIHNpemVvZiBjaXBoICk7CisgICAgbWVtc2V0KCB0ZXN0LCAwLCBzaXplb2YgdGVzdCApOworCisgICAgLyogSW5pdGlsaWF6ZSBQSyBSU0EgY29udGV4dCB3aXRoIHJhbmRvbSBrZXkgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zZXR1cCggJnJzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfUEtfUlNBICkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIHBrX2dlbmtleSggJnJzYSApID09IDAgKTsKKworICAgIC8qIEV4dHJhY3Qga2V5IHRvIHRoZSByYXcgcnNhIGNvbnRleHQgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY29weSggJnJhdywgbWJlZHRsc19wa19yc2EoIHJzYSApICkgPT0gMCApOworCisgICAgLyogSW5pdGlhbGl6ZSBQSyBSU0FfQUxUIGNvbnRleHQgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zZXR1cF9yc2FfYWx0KCAmYWx0LCAodm9pZCAqKSAmcmF3LAorICAgICAgICAgICAgICAgICBtYmVkdGxzX3JzYV9kZWNyeXB0X2Z1bmMsIG1iZWR0bHNfcnNhX3NpZ25fZnVuYywgbWJlZHRsc19yc2Ffa2V5X2xlbl9mdW5jICkgPT0gMCApOworCisgICAgLyogVGVzdCBhZG1pbmlzdHJhdGl2ZSBmdW5jdGlvbnMgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19jYW5fZG8oICZhbHQsIE1CRURUTFNfUEtfUlNBICkgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19nZXRfYml0bGVuKCAmYWx0ICkgPT0gUlNBX0tFWV9TSVpFICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfZ2V0X2xlbiggJmFsdCApID09IFJTQV9LRVlfTEVOICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoICZhbHQgKSA9PSBNQkVEVExTX1BLX1JTQV9BTFQgKTsKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCBtYmVkdGxzX3BrX2dldF9uYW1lKCAmYWx0ICksICJSU0EtYWx0IiApID09IDAgKTsKKworICAgIC8qIFRlc3Qgc2lnbmF0dXJlICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfc2lnbiggJmFsdCwgTUJFRFRMU19NRF9OT05FLCBoYXNoLCBzaXplb2YgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnLCAmc2lnX2xlbiwgcm5kX3N0ZF9yYW5kLCBOVUxMICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBzaWdfbGVuID09IFJTQV9LRVlfTEVOICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfdmVyaWZ5KCAmcnNhLCBNQkVEVExTX01EX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgc2l6ZW9mIGhhc2gsIHNpZywgc2lnX2xlbiApID09IDAgKTsKKworICAgIC8qIFRlc3QgZGVjcnlwdCAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2VuY3J5cHQoICZyc2EsIG1zZywgc2l6ZW9mIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaCwgJmNpcGhfbGVuLCBzaXplb2YgY2lwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm5kX3N0ZF9yYW5kLCBOVUxMICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2RlY3J5cHQoICZhbHQsIGNpcGgsIGNpcGhfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LCAmdGVzdF9sZW4sIHNpemVvZiB0ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfc3RkX3JhbmQsIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIHRlc3RfbGVuID09IHNpemVvZiBtc2cgKTsKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCB0ZXN0LCBtc2csIHRlc3RfbGVuICkgPT0gMCApOworCisgICAgLyogVGVzdCBmb3JiaWRkZW4gb3BlcmF0aW9ucyAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2VuY3J5cHQoICZhbHQsIG1zZywgc2l6ZW9mIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaCwgJmNpcGhfbGVuLCBzaXplb2YgY2lwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm5kX3N0ZF9yYW5kLCBOVUxMICkgPT0gcmV0ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfdmVyaWZ5KCAmYWx0LCBNQkVEVExTX01EX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgc2l6ZW9mIGhhc2gsIHNpZywgc2lnX2xlbiApID09IHJldCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2RlYnVnKCAmYWx0LCBkYmdfaXRlbXMgKSA9PSByZXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmcmF3ICk7CisgICAgbWJlZHRsc19wa19mcmVlKCAmcnNhICk7IG1iZWR0bHNfcGtfZnJlZSggJmFsdCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzMV92MTUuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzMV92MTUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjdhNGNkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YxNS5kYXRhCkBAIC0wLDAgKzEsMzUgQEAKK1JTQUVTLVYxNSBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIEludAorcGtjczFfcnNhZXNfdjE1X2VuY3J5cHQ6MTAyNDoxNjoiYmJmODJmMDkwNjgyY2U5YzIzMzhhYzJiOWRhODcxZjczNjhkMDdlZWQ0MTA0M2E0NDBkNmI2ZjA3NDU0ZjUxZmI4ZGZiYWFmMDM1YzAyYWI2MWVhNDhjZWViNmZjZDQ4NzZlZDUyMGQ2MGUxZWM0NjE5NzE5ZDhhNWI4YjgwN2ZhZmI4ZTBhM2RmYzczNzcyM2VlNmI0YjdkOTNhMjU4NGVlNmE2NDlkMDYwOTUzNzQ4ODM0YjI0NTQ1OTgzOTRlZTBhYWIxMmQ3YjYxYTUxZjUyN2E5YTQxZjZjMTY4N2ZlMjUzNzI5OGNhMmE4ZjU5NDZmOGU1ZmQwOTFkYmRjYiI6MTY6IjExIjpNQkVEVExTX01EX1NIQTE6ImQ0MzZlOTk1NjlmZDMyYTdjOGEwNWJiYzkwZDMyYzQ5IjoiYWFmZDEyZjY1OWNhZTYzNDg5YjQ3OWU1MDc2ZGRlYzJmMDZjYjU4ZjY3YzY2OTczNTFmZjRhZWMyOWNkYmFhYmYyZmJlMzQ2N2NjMjU0ZjgxYmU4ZTc4ZDc2NWEyZTYzMzM5ZmM5OWE2NjMyMGRiNzMxNThhMzVhMjU1ZDA1MTc1OGU5NWVkNGFiYjJjZGM2OWJiNDU0MTEwZTgyNzQ0MTIxM2RkYzg3NzBlOTNlYTE0MWUxZmM2NzNlMDE3ZTk3ZWFkYzZiOTY4ZjM4NWMyYWVjYjAzYmZiMzIiOiI2YzVlYmNhNjExNmIxZTkxMzE2NjEzZmJiNWU5MzE5NzI3MGE4NDkxMjJkNTQ5MTIyZDA1ODE1ZTI2MjZmODBkMjBmN2YzZjAzOGM5ODI5NTIwM2MwZjdmNmJiOGMzNTY4NDU1YzY3ZGVjODJiY2E4NmJlODZlZmY0M2I1NmI3YmEyZDE1Mzc1ZjlhNDI0NTRjMmEyYzcwOTk1M2E2ZTRhOTc3NDYyZTM1ZmQyMWE5YzJmYjNjMGFkMmEzNzBmNzY1NTI2N2JmNmYwNDgxNDc4NDk4Mjk4OGU2NjNiODY5ZmM4NTg4NDc1YWY4NjBkNDk5ZTVhNmZmZGZjMmM2YmZkIjowCisKK1JTQUVTLVYxNSBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIEludAorcGtjczFfcnNhZXNfdjE1X2RlY3J5cHQ6MTAyNDoxNjoiZWVjZmFlODFiMWI5YjNjOTA4ODEwYjEwYTFiNTYwMDE5OWViOWY0NGFlZjRmZGE0OTNiODFhOWUzZDg0ZjYzMjEyNGVmMDIzNmU1ZDFlM2I3ZTI4ZmFlN2FhMDQwYTJkNWIyNTIxNzY0NTlkMWYzOTc1NDFiYTJhNThmYjY1OTkiOjE2OiJjOTdmYjFmMDI3ZjQ1M2Y2MzQxMjMzZWFhYWQxZDkzNTNmNmM0MmQwODg2NmIxZDA1YTBmMjAzNTAyOGI5ZDg2OTg0MGI0MTY2NmI0MmU5MmVhMGRhM2I0MzIwNGI1Y2ZjZTMzNTI1MjRkMDQxNmE1YTQ0MWU3MDBhZjQ2MTUwMyI6MTY6ImJiZjgyZjA5MDY4MmNlOWMyMzM4YWMyYjlkYTg3MWY3MzY4ZDA3ZWVkNDEwNDNhNDQwZDZiNmYwNzQ1NGY1MWZiOGRmYmFhZjAzNWMwMmFiNjFlYTQ4Y2VlYjZmY2Q0ODc2ZWQ1MjBkNjBlMWVjNDYxOTcxOWQ4YTViOGI4MDdmYWZiOGUwYTNkZmM3Mzc3MjNlZTZiNGI3ZDkzYTI1ODRlZTZhNjQ5ZDA2MDk1Mzc0ODgzNGIyNDU0NTk4Mzk0ZWUwYWFiMTJkN2I2MWE1MWY1MjdhOWE0MWY2YzE2ODdmZTI1MzcyOThjYTJhOGY1OTQ2ZjhlNWZkMDkxZGJkY2IiOjE2OiIxMSI6TUJFRFRMU19NRF9TSEExOiJkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OSI6ImFhZmQxMmY2NTljYWU2MzQ4OWI0NzllNTA3NmRkZWMyZjA2Y2I1OGYiOiIyODgxOGNiMTQyMzZhZDE4ZjQ1MjdlN2YxZjc2MzNlOTZjZWYwMjFiYzMyMzQ0NzVkN2Y2MWU4ODcwMmI2MzM1YjQyYTM1MmVkM2YzMjY3YWM3YzNlOWJhNGFmMTdlNDUwOTZjNjNlZWZkOGQ5YTdjYjQyZGZjNTJmZmZiMmY1YjhhZmIzMDViNDYzMTJjMmViNTA2MzQxMjNiNDQzN2EyMjg3YWM1N2I3NTA5ZDU5YTU4M2ZiNzQxOTg5YTQ5ZjMyNjI1ZTkyNjdiNDY0MWE2NjA3YjczMDNkMzVjNjg0ODlkYjUzYzhkMzg3YjYyMGQwZDQ2YTg1MmU3MmVhNDNjIjowCisKK1JTQUVTLVYxNSBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIERhdGEganVzdCBmaXRzCitwa2NzMV9yc2Flc192MTVfZW5jcnlwdDoxMDI0OjE2OiJiYmY4MmYwOTA2ODJjZTljMjMzOGFjMmI5ZGE4NzFmNzM2OGQwN2VlZDQxMDQzYTQ0MGQ2YjZmMDc0NTRmNTFmYjhkZmJhYWYwMzVjMDJhYjYxZWE0OGNlZWI2ZmNkNDg3NmVkNTIwZDYwZTFlYzQ2MTk3MTlkOGE1YjhiODA3ZmFmYjhlMGEzZGZjNzM3NzIzZWU2YjRiN2Q5M2EyNTg0ZWU2YTY0OWQwNjA5NTM3NDg4MzRiMjQ1NDU5ODM5NGVlMGFhYjEyZDdiNjFhNTFmNTI3YTlhNDFmNmMxNjg3ZmUyNTM3Mjk4Y2EyYThmNTk0NmY4ZTVmZDA5MWRiZGNiIjoxNjoiMTEiOk1CRURUTFNfTURfU0hBMToiNDI5M2NlY2M4MDk1MjMyYWU1OTViODRjMTVlYzI2ZjM1Y2Y1ZmRlODhhZTdhOWFhYTcxN2JjYjFlY2M0ZGU0OThkYTgxZGI5NzQyNTAwMDc3MDgxN2I1ZGRlNWVlZDAxY2EzNzQ1ZmY1YWI4OTRkMGZjMDkyMWU1YTEwYjA4MTQ5MDEyOWQ4Y2NiYWExNTRhZDNkZDQ2MTM5N2FmOGVjOTY0ZWY5OTQwMmQ2MGE3NTkxZWU0NGI4Y2UxYzE2ZWY4OGZjYjI3MTcwNzZjNzMwZDg4MjIzODkzYmRkODAwMGIyM2Q4N2QzOGFiIjoiYWFmZDEyZjY1OWNhZTYzNDg5YjQ3OWU1MDc2ZGRlYzJmMDZjYjU4ZiI6IjE4Y2RiMTYxZjQwYTE4NTA5YTM1MDFiN2U4ZWMxYzc1MjJlMjQ5MDMxOWVmZWU4NTgxMTc5YjViY2YzNzUwZjgzYTg2NTk1MmQwNzhlZmQ0OGY1OGY4MDYwYjBkNDNmOTg4OGI0M2EwOTRmZTE1MjA5NDUxODI2ZWY3OTcxOTU4ODVmZjlmYTNlMjY5OTRlZWU4NWRiZTVkZDA0MDRhNzE1NjU3MDgyODYwMjdiNDMzYzg4Yzg1YWY1NTViOTZjMzRjMzA0ZGM3YzgyNzgyMzM2NTRjMDIyZWYzNDAwNDJjZmZmNTVlNmIxNWI2N2NmZWE4YTVhMzg0ZWY2NGE2YWMiOjAKKworUlNBRVMtVjE1IERlY3J5cHRpb24gVGVzdCBWZWN0b3IgRGF0YSBqdXN0IGZpdHMKK3BrY3MxX3JzYWVzX3YxNV9kZWNyeXB0OjEwMjQ6MTY6ImVlY2ZhZTgxYjFiOWIzYzkwODgxMGIxMGExYjU2MDAxOTllYjlmNDRhZWY0ZmRhNDkzYjgxYTllM2Q4NGY2MzIxMjRlZjAyMzZlNWQxZTNiN2UyOGZhZTdhYTA0MGEyZDViMjUyMTc2NDU5ZDFmMzk3NTQxYmEyYTU4ZmI2NTk5IjoxNjoiYzk3ZmIxZjAyN2Y0NTNmNjM0MTIzM2VhYWFkMWQ5MzUzZjZjNDJkMDg4NjZiMWQwNWEwZjIwMzUwMjhiOWQ4Njk4NDBiNDE2NjZiNDJlOTJlYTBkYTNiNDMyMDRiNWNmY2UzMzUyNTI0ZDA0MTZhNWE0NDFlNzAwYWY0NjE1MDMiOjE2OiJiYmY4MmYwOTA2ODJjZTljMjMzOGFjMmI5ZGE4NzFmNzM2OGQwN2VlZDQxMDQzYTQ0MGQ2YjZmMDc0NTRmNTFmYjhkZmJhYWYwMzVjMDJhYjYxZWE0OGNlZWI2ZmNkNDg3NmVkNTIwZDYwZTFlYzQ2MTk3MTlkOGE1YjhiODA3ZmFmYjhlMGEzZGZjNzM3NzIzZWU2YjRiN2Q5M2EyNTg0ZWU2YTY0OWQwNjA5NTM3NDg4MzRiMjQ1NDU5ODM5NGVlMGFhYjEyZDdiNjFhNTFmNTI3YTlhNDFmNmMxNjg3ZmUyNTM3Mjk4Y2EyYThmNTk0NmY4ZTVmZDA5MWRiZGNiIjoxNjoiMTEiOk1CRURUTFNfTURfU0hBMToiNDI5M2NlY2M4MDk1MjMyYWU1OTViODRjMTVlYzI2ZjM1Y2Y1ZmRlODhhZTdhOWFhYTcxN2JjYjFlY2M0ZGU0OThkYTgxZGI5NzQyNTAwMDc3MDgxN2I1ZGRlNWVlZDAxY2EzNzQ1ZmY1YWI4OTRkMGZjMDkyMWU1YTEwYjA4MTQ5MDEyOWQ4Y2NiYWExNTRhZDNkZDQ2MTM5N2FmOGVjOTY0ZWY5OTQwMmQ2MGE3NTkxZWU0NGI4Y2UxYzE2ZWY4OGZjYjI3MTcwNzZjNzMwZDg4MjIzODkzYmRkODAwMGIyM2Q4N2QzOGFiIjoiYWFmZDEyZjY1OWNhZTYzNDg5YjQ3OWU1MDc2ZGRlYzJmMDZjYjU4ZiI6IjE4Y2RiMTYxZjQwYTE4NTA5YTM1MDFiN2U4ZWMxYzc1MjJlMjQ5MDMxOWVmZWU4NTgxMTc5YjViY2YzNzUwZjgzYTg2NTk1MmQwNzhlZmQ0OGY1OGY4MDYwYjBkNDNmOTg4OGI0M2EwOTRmZTE1MjA5NDUxODI2ZWY3OTcxOTU4ODVmZjlmYTNlMjY5OTRlZWU4NWRiZTVkZDA0MDRhNzE1NjU3MDgyODYwMjdiNDMzYzg4Yzg1YWY1NTViOTZjMzRjMzA0ZGM3YzgyNzgyMzM2NTRjMDIyZWYzNDAwNDJjZmZmNTVlNmIxNWI2N2NmZWE4YTVhMzg0ZWY2NGE2YWMiOjAKKworUlNBRVMtVjE1IEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgRGF0YSB0b28gbG9uZyAxCitwa2NzMV9yc2Flc192MTVfZW5jcnlwdDoxMDI0OjE2OiJiYmY4MmYwOTA2ODJjZTljMjMzOGFjMmI5ZGE4NzFmNzM2OGQwN2VlZDQxMDQzYTQ0MGQ2YjZmMDc0NTRmNTFmYjhkZmJhYWYwMzVjMDJhYjYxZWE0OGNlZWI2ZmNkNDg3NmVkNTIwZDYwZTFlYzQ2MTk3MTlkOGE1YjhiODA3ZmFmYjhlMGEzZGZjNzM3NzIzZWU2YjRiN2Q5M2EyNTg0ZWU2YTY0OWQwNjA5NTM3NDg4MzRiMjQ1NDU5ODM5NGVlMGFhYjEyZDdiNjFhNTFmNTI3YTlhNDFmNmMxNjg3ZmUyNTM3Mjk4Y2EyYThmNTk0NmY4ZTVmZDA5MWRiZGNiIjoxNjoiMTEiOk1CRURUTFNfTURfU0hBMToiYjg0MjkzY2VjYzgwOTUyMzJhZTU5NWI4NGMxNWVjMjZmMzVjZjVmZGU4OGFlN2E5YWFhNzE3YmNiMWVjYzRkZTQ5OGRhODFkYjk3NDI1MDAwNzcwODE3YjVkZGU1ZWVkMDFjYTM3NDVmZjVhYjg5NGQwZmMwOTIxZTVhMTBiMDgxNDkwMTI5ZDhjY2JhYTE1NGFkM2RkNDYxMzk3YWY4ZWM5NjRlZjk5NDAyZDYwYTc1OTFlZTQ0YjhjZTFjMTZlZjg4ZmNiMjcxNzA3NmM3MzBkODgyMjM4OTNiZGQ4MDAwYjIzZDg3ZDM4YWIiOiJhYWZkMTJmNjU5Y2FlNjM0ODliNDc5ZTUwNzZkZGVjMmYwNmNiNThmIjoiMDVhYmRlZDY3NTFkNjIwYTk1MTc3YWJkYmE5MTUwMjdiNThkZDZlZWNmNGViZTcxZjcxYzQwMGIxMTVlMWQ5ZTEyNDY1YWNlNGRiM2NjMDNlYjU3ZmNiYmZlMDE3NzcwZjQzOGNmODRjMTBiYWQ1MDU5MTlhZWZlYmZhMDc1MjA4N2Y2Mzc2YjA1NWJlYWJmMGUwODlmYmI5MGUxMGY5OWM3OTVkMmQ1Njc2ZWVhMTk2ZGI3Zjk0YThmZDM0YWVkYWJhMzlmYjIzMDI4MWJiOTkxN2NjOTE3OTNlYjM3Zjg0ZGVkYjI0MjFlOTY4MGMzOWNmZGEzNGQ0YTAxMjEzNCI6TUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBCisKK1JTQUVTLVYxNSBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIFBhZGRpbmcgdG9vIHNob3J0IDcgCitwa2NzMV9yc2Flc192MTVfZGVjcnlwdDoxMDI0OjE2OiJlZWNmYWU4MWIxYjliM2M5MDg4MTBiMTBhMWI1NjAwMTk5ZWI5ZjQ0YWVmNGZkYTQ5M2I4MWE5ZTNkODRmNjMyMTI0ZWYwMjM2ZTVkMWUzYjdlMjhmYWU3YWEwNDBhMmQ1YjI1MjE3NjQ1OWQxZjM5NzU0MWJhMmE1OGZiNjU5OSI6MTY6ImM5N2ZiMWYwMjdmNDUzZjYzNDEyMzNlYWFhZDFkOTM1M2Y2YzQyZDA4ODY2YjFkMDVhMGYyMDM1MDI4YjlkODY5ODQwYjQxNjY2YjQyZTkyZWEwZGEzYjQzMjA0YjVjZmNlMzM1MjUyNGQwNDE2YTVhNDQxZTcwMGFmNDYxNTAzIjoxNjoiYmJmODJmMDkwNjgyY2U5YzIzMzhhYzJiOWRhODcxZjczNjhkMDdlZWQ0MTA0M2E0NDBkNmI2ZjA3NDU0ZjUxZmI4ZGZiYWFmMDM1YzAyYWI2MWVhNDhjZWViNmZjZDQ4NzZlZDUyMGQ2MGUxZWM0NjE5NzE5ZDhhNWI4YjgwN2ZhZmI4ZTBhM2RmYzczNzcyM2VlNmI0YjdkOTNhMjU4NGVlNmE2NDlkMDYwOTUzNzQ4ODM0YjI0NTQ1OTgzOTRlZTBhYWIxMmQ3YjYxYTUxZjUyN2E5YTQxZjZjMTY4N2ZlMjUzNzI5OGNhMmE4ZjU5NDZmOGU1ZmQwOTFkYmRjYiI6MTY6IjExIjpNQkVEVExTX01EX1NIQTE6ImI4NDI5M2NlY2M4MDk1MjMyYWU1OTViODRjMTVlYzI2ZjM1Y2Y1ZmRlODhhZTdhOWFhYTcxN2JjYjFlY2M0ZGU0OThkYTgxZGI5NzQyNTAwMDc3MDgxN2I1ZGRlNWVlZDAxY2EzNzQ1ZmY1YWI4OTRkMGZjMDkyMWU1YTEwYjA4MTQ5MDEyOWQ4Y2NiYWExNTRhZDNkZDQ2MTM5N2FmOGVjOTY0ZWY5OTQwMmQ2MGE3NTkxZWU0NGI4Y2UxYzE2ZWY4OGZjYjI3MTcwNzZjNzMwZDg4MjIzODkzYmRkODAwMGIyM2Q4N2QzOGFiIjoiYWFmZDEyZjY1OWNhZTYzNDg5YjQ3OWU1MDc2ZGRlYzJmMDZjYjU4ZiI6IjA1YWJkZWQ2NzUxZDYyMGE5NTE3N2FiZGJhOTE1MDI3YjU4ZGQ2ZWVjZjRlYmU3MWY3MWM0MDBiMTE1ZTFkOWUxMjQ2NWFjZTRkYjNjYzAzZWI1N2ZjYmJmZTAxNzc3MGY0MzhjZjg0YzEwYmFkNTA1OTE5YWVmZWJmYTA3NTIwODdmNjM3NmIwNTViZWFiZjBlMDg5ZmJiOTBlMTBmOTljNzk1ZDJkNTY3NmVlYTE5NmRiN2Y5NGE4ZmQzNGFlZGFiYTM5ZmIyMzAyODFiYjk5MTdjYzkxNzkzZWIzN2Y4NGRlZGIyNDIxZTk2ODBjMzljZmRhMzRkNGEwMTIxMzQiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBRVMtVjE1IEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgRGF0YSB0b28gbG9uZyAzCitwa2NzMV9yc2Flc192MTVfZW5jcnlwdDoxMDI0OjE2OiJiYmY4MmYwOTA2ODJjZTljMjMzOGFjMmI5ZGE4NzFmNzM2OGQwN2VlZDQxMDQzYTQ0MGQ2YjZmMDc0NTRmNTFmYjhkZmJhYWYwMzVjMDJhYjYxZWE0OGNlZWI2ZmNkNDg3NmVkNTIwZDYwZTFlYzQ2MTk3MTlkOGE1YjhiODA3ZmFmYjhlMGEzZGZjNzM3NzIzZWU2YjRiN2Q5M2EyNTg0ZWU2YTY0OWQwNjA5NTM3NDg4MzRiMjQ1NDU5ODM5NGVlMGFhYjEyZDdiNjFhNTFmNTI3YTlhNDFmNmMxNjg3ZmUyNTM3Mjk4Y2EyYThmNTk0NmY4ZTVmZDA5MWRiZGNiIjoxNjoiMTEiOk1CRURUTFNfTURfU0hBMToiYWExYWI4NDI5M2NlY2M4MDk1MjMyYWU1OTViODRjMTVlYzI2ZjM1Y2Y1ZmRlODhhZTdhOWFhYTcxN2JjYjFlY2M0ZGU0OThkYTgxZGI5NzQyNTAwMDc3MDgxN2I1ZGRlNWVlZDAxY2EzNzQ1ZmY1YWI4OTRkMGZjMDkyMWU1YTEwYjA4MTQ5MDEyOWQ4Y2NiYWExNTRhZDNkZDQ2MTM5N2FmOGVjOTY0ZWY5OTQwMmQ2MGE3NTkxZWU0NGI4Y2UxYzE2ZWY4OGZjYjI3MTcwNzZjNzMwZDg4MjIzODkzYmRkODAwMGIyM2Q4N2QzOGFiIjoiYWFmZDEyZjY1OWNhZTYzNDg5YjQ3OWU1MDc2ZGRlYzJmMDZjYjU4ZiI6IjEwZDYwYjgwNDBkNTdkODcwMWJhY2I1NWYyZjI4M2Q1NDYwMWVjMjRkNDY1NjAxYWM3ZjdkNWEyZjc1Y2FjMzgwYmE3OGNhNGFiNmYzYzE1OWYzYTlmZDY4MzlmNWFkZGUwMzMzODUyZWJmODc2YzU4NTY2NGMxYTU4YTFlNjg4NTIzMTk4MmYyMDI3YmU2ZDdmMDhmZjE4MDdkM2NlZGE4ZTQxYWQxZjAyZGRmOTdhNzQ1ODgzMmZkMTNhMWY0MzFkZTZhNGFiNzllM2Q0Yjg4YmIxZGYyYzVjNzdmY2RlOWU3YjVhYTFlN2JiMjkxMTJlYWU1ODc2MzEyNzc1MmEiOk1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQQorCitSU0FFUy1WMTUgRGVjcnlwdGlvbiBUZXN0IFZlY3RvciBQYWRkaW5nIHRvbyBzaG9ydCA1IAorcGtjczFfcnNhZXNfdjE1X2RlY3J5cHQ6MTAyNDoxNjoiZWVjZmFlODFiMWI5YjNjOTA4ODEwYjEwYTFiNTYwMDE5OWViOWY0NGFlZjRmZGE0OTNiODFhOWUzZDg0ZjYzMjEyNGVmMDIzNmU1ZDFlM2I3ZTI4ZmFlN2FhMDQwYTJkNWIyNTIxNzY0NTlkMWYzOTc1NDFiYTJhNThmYjY1OTkiOjE2OiJjOTdmYjFmMDI3ZjQ1M2Y2MzQxMjMzZWFhYWQxZDkzNTNmNmM0MmQwODg2NmIxZDA1YTBmMjAzNTAyOGI5ZDg2OTg0MGI0MTY2NmI0MmU5MmVhMGRhM2I0MzIwNGI1Y2ZjZTMzNTI1MjRkMDQxNmE1YTQ0MWU3MDBhZjQ2MTUwMyI6MTY6ImJiZjgyZjA5MDY4MmNlOWMyMzM4YWMyYjlkYTg3MWY3MzY4ZDA3ZWVkNDEwNDNhNDQwZDZiNmYwNzQ1NGY1MWZiOGRmYmFhZjAzNWMwMmFiNjFlYTQ4Y2VlYjZmY2Q0ODc2ZWQ1MjBkNjBlMWVjNDYxOTcxOWQ4YTViOGI4MDdmYWZiOGUwYTNkZmM3Mzc3MjNlZTZiNGI3ZDkzYTI1ODRlZTZhNjQ5ZDA2MDk1Mzc0ODgzNGIyNDU0NTk4Mzk0ZWUwYWFiMTJkN2I2MWE1MWY1MjdhOWE0MWY2YzE2ODdmZTI1MzcyOThjYTJhOGY1OTQ2ZjhlNWZkMDkxZGJkY2IiOjE2OiIxMSI6TUJFRFRMU19NRF9TSEExOiJhYTFhYjg0MjkzY2VjYzgwOTUyMzJhZTU5NWI4NGMxNWVjMjZmMzVjZjVmZGU4OGFlN2E5YWFhNzE3YmNiMWVjYzRkZTQ5OGRhODFkYjk3NDI1MDAwNzcwODE3YjVkZGU1ZWVkMDFjYTM3NDVmZjVhYjg5NGQwZmMwOTIxZTVhMTBiMDgxNDkwMTI5ZDhjY2JhYTE1NGFkM2RkNDYxMzk3YWY4ZWM5NjRlZjk5NDAyZDYwYTc1OTFlZTQ0YjhjZTFjMTZlZjg4ZmNiMjcxNzA3NmM3MzBkODgyMjM4OTNiZGQ4MDAwYjIzZDg3ZDM4YWIiOiJhYWZkMTJmNjU5Y2FlNjM0ODliNDc5ZTUwNzZkZGVjMmYwNmNiNThmIjoiMTBkNjBiODA0MGQ1N2Q4NzAxYmFjYjU1ZjJmMjgzZDU0NjAxZWMyNGQ0NjU2MDFhYzdmN2Q1YTJmNzVjYWMzODBiYTc4Y2E0YWI2ZjNjMTU5ZjNhOWZkNjgzOWY1YWRkZTAzMzM4NTJlYmY4NzZjNTg1NjY0YzFhNThhMWU2ODg1MjMxOTgyZjIwMjdiZTZkN2YwOGZmMTgwN2QzY2VkYThlNDFhZDFmMDJkZGY5N2E3NDU4ODMyZmQxM2ExZjQzMWRlNmE0YWI3OWUzZDRiODhiYjFkZjJjNWM3N2ZjZGU5ZTdiNWFhMWU3YmIyOTExMmVhZTU4NzYzMTI3NzUyYSI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0FFUy1WMTUgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciBEYXRhIHRvbyBsb25nIDgKK3BrY3MxX3JzYWVzX3YxNV9lbmNyeXB0OjEwMjQ6MTY6ImJiZjgyZjA5MDY4MmNlOWMyMzM4YWMyYjlkYTg3MWY3MzY4ZDA3ZWVkNDEwNDNhNDQwZDZiNmYwNzQ1NGY1MWZiOGRmYmFhZjAzNWMwMmFiNjFlYTQ4Y2VlYjZmY2Q0ODc2ZWQ1MjBkNjBlMWVjNDYxOTcxOWQ4YTViOGI4MDdmYWZiOGUwYTNkZmM3Mzc3MjNlZTZiNGI3ZDkzYTI1ODRlZTZhNjQ5ZDA2MDk1Mzc0ODgzNGIyNDU0NTk4Mzk0ZWUwYWFiMTJkN2I2MWE1MWY1MjdhOWE0MWY2YzE2ODdmZTI1MzcyOThjYTJhOGY1OTQ2ZjhlNWZkMDkxZGJkY2IiOjE2OiIxMSI6TUJFRFRMU19NRF9TSEExOiJhNWEzODRlZjY0YTZhY2I4NDI5M2NlY2M4MDk1MjMyYWU1OTViODRjMTVlYzI2ZjM1Y2Y1ZmRlODhhZTdhOWFhYTcxN2JjYjFlY2M0ZGU0OThkYTgxZGI5NzQyNTAwMDc3MDgxN2I1ZGRlNWVlZDAxY2EzNzQ1ZmY1YWI4OTRkMGZjMDkyMWU1YTEwYjA4MTQ5MDEyOWQ4Y2NiYWExNTRhZDNkZDQ2MTM5N2FmOGVjOTY0ZWY5OTQwMmQ2MGE3NTkxZWU0NGI4Y2UxYzE2ZWY4OGZjYjI3MTcwNzZjNzMwZDg4MjIzODkzYmRkODAwMGIyM2Q4N2QzOGFiIjoiYWFmZDEyZjY1OWNhZTYzNDg5YjQ3OWU1MDc2ZGRlYzJmMDZjYjU4ZiI6IjcyZjk4ZDEyZGRjMjMwNDg0MTc5ZWMzMDIyZDExYjM3MTkyMjJkYWFhMGRjMDE2ZmMzZGJkNjc3MWEzZjJjOWZkZDA1NjBmODZkNjE2ZGQ1MGVmMWZhNWI4YzdlMWZjNDBiNWFiZjdiODQ1ZDc3OTViM2E2YWYwMjQ1N2I5N2Y3ODMzNjA1NzVjZGU3NDk3YmRmOWMxMDQ2NTBkNGU5YThmNDAzNDQwNmRlMWFmOTVhY2UzOWJlZjJiOWU5NzliNzRkOWEyYzBhNzQxZDhhMjEyMjFkOWFmYzk4OTkyNzc2Y2FkNTJkNzMxNTE2MTNkYmMxMGRhOWJkODAzODc1MWEiOk1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQQorCitSU0FFUy1WMTUgRGVjcnlwdGlvbiBUZXN0IFZlY3RvciBQYWRkaW5nIHRvbyBzaG9ydCAwIAorcGtjczFfcnNhZXNfdjE1X2RlY3J5cHQ6MTAyNDoxNjoiZWVjZmFlODFiMWI5YjNjOTA4ODEwYjEwYTFiNTYwMDE5OWViOWY0NGFlZjRmZGE0OTNiODFhOWUzZDg0ZjYzMjEyNGVmMDIzNmU1ZDFlM2I3ZTI4ZmFlN2FhMDQwYTJkNWIyNTIxNzY0NTlkMWYzOTc1NDFiYTJhNThmYjY1OTkiOjE2OiJjOTdmYjFmMDI3ZjQ1M2Y2MzQxMjMzZWFhYWQxZDkzNTNmNmM0MmQwODg2NmIxZDA1YTBmMjAzNTAyOGI5ZDg2OTg0MGI0MTY2NmI0MmU5MmVhMGRhM2I0MzIwNGI1Y2ZjZTMzNTI1MjRkMDQxNmE1YTQ0MWU3MDBhZjQ2MTUwMyI6MTY6ImJiZjgyZjA5MDY4MmNlOWMyMzM4YWMyYjlkYTg3MWY3MzY4ZDA3ZWVkNDEwNDNhNDQwZDZiNmYwNzQ1NGY1MWZiOGRmYmFhZjAzNWMwMmFiNjFlYTQ4Y2VlYjZmY2Q0ODc2ZWQ1MjBkNjBlMWVjNDYxOTcxOWQ4YTViOGI4MDdmYWZiOGUwYTNkZmM3Mzc3MjNlZTZiNGI3ZDkzYTI1ODRlZTZhNjQ5ZDA2MDk1Mzc0ODgzNGIyNDU0NTk4Mzk0ZWUwYWFiMTJkN2I2MWE1MWY1MjdhOWE0MWY2YzE2ODdmZTI1MzcyOThjYTJhOGY1OTQ2ZjhlNWZkMDkxZGJkY2IiOjE2OiIxMSI6TUJFRFRMU19NRF9TSEExOiJhNWEzODRlZjY0YTZhY2I4NDI5M2NlY2M4MDk1MjMyYWU1OTViODRjMTVlYzI2ZjM1Y2Y1ZmRlODhhZTdhOWFhYTcxN2JjYjFlY2M0ZGU0OThkYTgxZGI5NzQyNTAwMDc3MDgxN2I1ZGRlNWVlZDAxY2EzNzQ1ZmY1YWI4OTRkMGZjMDkyMWU1YTEwYjA4MTQ5MDEyOWQ4Y2NiYWExNTRhZDNkZDQ2MTM5N2FmOGVjOTY0ZWY5OTQwMmQ2MGE3NTkxZWU0NGI4Y2UxYzE2ZWY4OGZjYjI3MTcwNzZjNzMwZDg4MjIzODkzYmRkODAwMGIyM2Q4N2QzOGFiIjoiYWFmZDEyZjY1OWNhZTYzNDg5YjQ3OWU1MDc2ZGRlYzJmMDZjYjU4ZiI6IjcyZjk4ZDEyZGRjMjMwNDg0MTc5ZWMzMDIyZDExYjM3MTkyMjJkYWFhMGRjMDE2ZmMzZGJkNjc3MWEzZjJjOWZkZDA1NjBmODZkNjE2ZGQ1MGVmMWZhNWI4YzdlMWZjNDBiNWFiZjdiODQ1ZDc3OTViM2E2YWYwMjQ1N2I5N2Y3ODMzNjA1NzVjZGU3NDk3YmRmOWMxMDQ2NTBkNGU5YThmNDAzNDQwNmRlMWFmOTVhY2UzOWJlZjJiOWU5NzliNzRkOWEyYzBhNzQxZDhhMjEyMjFkOWFmYzk4OTkyNzc2Y2FkNTJkNzMxNTE2MTNkYmMxMGRhOWJkODAzODc1MWEiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBU1NBLVYxNSBTaWduaW5nIFRlc3QgVmVjdG9yIEludAorcGtjczFfcnNhc3NhX3YxNV9zaWduOjEwMjQ6MTY6ImQxN2Y2NTViZjI3YzhiMTZkMzU0NjJjOTA1Y2MwNGEyNmYzN2UyYTY3ZmE5YzBjZTBkY2VkNDcyMzk0YTBkZjc0M2ZlN2Y5MjllMzc4ZWZkYjM2OGVkZGZmNDUzY2YwMDdhZjZkOTQ4ZTBhZGU3NTczNzFmOGE3MTFlMjc4ZjZiIjoxNjoiYzZkOTJiNmZlZTc0MTRkMTM1OGNlMTU0NmZiNjI5ODc1MzBiOTBiZDE1ZTBmMTQ5NjNhNWUyNjM1YWRiNjkzNDdlYzBjMDFiMmFiMTc2M2ZkOGFjMWE1OTJmYjIyNzU3NDYzYTk4MjQyNWJiOTdhM2E0MzdjNWJmODZkMDNmMmYiOjE2OiJhMmJhNDBlZTA3ZTNiMmJkMmYwMmNlMjI3ZjM2YTE5NTAyNDQ4NmU0OWMxOWNiNDFiYmJkZmJiYTk4YjIyYjBlNTc3YzJlZWFmZmEyMGQ4ODNhNzZlNjVlMzk0YzY5ZDRiM2MwNWExZThmYWRkYTI3ZWRiMmE0MmJjMDAwZmU4ODhiOWIzMmMyMmQxNWFkZDBjZDc2YjNlNzkzNmUxOTk1NWIyMjBkZDE3ZDRlYTkwNGIxZWMxMDJiMmU0ZGU3NzUxMjIyYWE5OTE1MTAyNGM3Y2I0MWNjNWVhMjFkMDBlZWI0MWY3YzgwMDgzNGQyYzZlMDZiY2UzYmNlN2VhOWE1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4NTllZWYyZmQ3OGFjYTAwMzA4YmRjNDcxMTkzYmY1NWJmOWQ3OGRiOGY4YTY3MmI0ODQ2MzRmM2M5YzI2ZTY0NzhhZTEwMjYwZmUwZGQ4YzA4MmU1M2E1MjkzYWYyMTczY2Q1MGM2ZDVkMzU0ZmViZjc4YjI2MDIxYzI1YzAyNzEyZTc4Y2Q0Njk0YzlmNDY5Nzc3ZTQ1MWU3ZjhlOWUwNGNkMzczOWM2YmJmZWRhZTQ4N2ZiNTU2NDRlOWNhNzRmZjc3YTUzY2I3Mjk4MDJmNmVkNGE1ZmZhOGJhMTU5ODkwZmMiOiJlM2I1ZDVkMDAyYzFiY2U1MGMyYjY1ZWY4OGExODhkODNiY2U3ZTYxIjoiMjE1NGY5Mjg2MTVlNTEwMWZjZGViNTdiYzA4ZmMyZjM1YzNkNTk5NjQwMzg2MWFlM2VmYjFkMDcxMmY4YmIwNWNjMjFmN2Y1ZjExZjYyZTViNmVhOWYwZjJiNjIxODBlNWNiZTdiYTUzNTAzMmQ2YWM4MDY4ZmZmN2YzNjJmNzNkMmMzYmY1ZWNhNjA2MmExNzIzZDdjZmQ1YWJiNmRjZjdlNDA1ZjJkYzU2MGZmZTZmYzM3ZDM4YmVlNGRjOWUyNGZlMmJlY2UzZTNiNGEzZjAzMjcwMWQzZjA5NDdiNDI5MzAwODNkZDRhZDI0MWIzMzA5YjUxNDU5NTQ4MmQ0MiI6MAorCitSU0FTU0EtVjE1IFZlcmlmaWNhdGlvbiBUZXN0IFZlY3RvciBJbnQKK3BrY3MxX3JzYXNzYV92MTVfdmVyaWZ5OjEwMjQ6MTY6ImEyYmE0MGVlMDdlM2IyYmQyZjAyY2UyMjdmMzZhMTk1MDI0NDg2ZTQ5YzE5Y2I0MWJiYmRmYmJhOThiMjJiMGU1NzdjMmVlYWZmYTIwZDg4M2E3NmU2NWUzOTRjNjlkNGIzYzA1YTFlOGZhZGRhMjdlZGIyYTQyYmMwMDBmZTg4OGI5YjMyYzIyZDE1YWRkMGNkNzZiM2U3OTM2ZTE5OTU1YjIyMGRkMTdkNGVhOTA0YjFlYzEwMmIyZTRkZTc3NTEyMjJhYTk5MTUxMDI0YzdjYjQxY2M1ZWEyMWQwMGVlYjQxZjdjODAwODM0ZDJjNmUwNmJjZTNiY2U3ZWE5YTUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijg1OWVlZjJmZDc4YWNhMDAzMDhiZGM0NzExOTNiZjU1YmY5ZDc4ZGI4ZjhhNjcyYjQ4NDYzNGYzYzljMjZlNjQ3OGFlMTAyNjBmZTBkZDhjMDgyZTUzYTUyOTNhZjIxNzNjZDUwYzZkNWQzNTRmZWJmNzhiMjYwMjFjMjVjMDI3MTJlNzhjZDQ2OTRjOWY0Njk3NzdlNDUxZTdmOGU5ZTA0Y2QzNzM5YzZiYmZlZGFlNDg3ZmI1NTY0NGU5Y2E3NGZmNzdhNTNjYjcyOTgwMmY2ZWQ0YTVmZmE4YmExNTk4OTBmYyI6ImUzYjVkNWQwMDJjMWJjZTUwYzJiNjVlZjg4YTE4OGQ4M2JjZTdlNjEiOiIyMTU0ZjkyODYxNWU1MTAxZmNkZWI1N2JjMDhmYzJmMzVjM2Q1OTk2NDAzODYxYWUzZWZiMWQwNzEyZjhiYjA1Y2MyMWY3ZjVmMTFmNjJlNWI2ZWE5ZjBmMmI2MjE4MGU1Y2JlN2JhNTM1MDMyZDZhYzgwNjhmZmY3ZjM2MmY3M2QyYzNiZjVlY2E2MDYyYTE3MjNkN2NmZDVhYmI2ZGNmN2U0MDVmMmRjNTYwZmZlNmZjMzdkMzhiZWU0ZGM5ZTI0ZmUyYmVjZTNlM2I0YTNmMDMyNzAxZDNmMDk0N2I0MjkzMDA4M2RkNGFkMjQxYjMzMDliNTE0NTk1NDgyZDQyIjowCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjE1LmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YxNS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWZlMDViCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YxNS5mdW5jdGlvbgpAQCAtMCwwICsxLDIxMCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBwa2NzMV9yc2Flc192MTVfZW5jcnlwdCggaW50IG1vZCwgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sIGludCByYWRpeF9FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X0UsIGludCBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgY2hhciAqc2VlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZXN1bHRfaGV4X3N0ciwgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBtZXNzYWdlX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBybmRfYnVmWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBtc2dfbGVuOworICAgIHJuZF9idWZfaW5mbyBpbmZvOworCisgICAgaW5mby5sZW5ndGggPSB1bmhleGlmeSggcm5kX2J1Ziwgc2VlZCApOworICAgIGluZm8uYnVmID0gcm5kX2J1ZjsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIE1CRURUTFNfUlNBX1BLQ1NfVjE1LCBoYXNoICk7CisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gOCArICggKCBtb2QgJSA4ICkgPyAxIDogMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggJmN0eCApID09IDAgKTsKKworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQoICZjdHgsICZybmRfYnVmZmVyX3JhbmQsICZpbmZvLCBNQkVEVExTX1JTQV9QVUJMSUMsIG1zZ19sZW4sIG1lc3NhZ2Vfc3RyLCBvdXRwdXQgKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBvdXRwdXRfc3RyLCBvdXRwdXQsIGN0eC5sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X2hleF9zdHIgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcGtjczFfcnNhZXNfdjE1X2RlY3J5cHQoIGludCBtb2QsIGludCByYWRpeF9QLCBjaGFyICppbnB1dF9QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9RLCBjaGFyICppbnB1dF9RLCBpbnQgcmFkaXhfTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9OLCBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGFzaCwgY2hhciAqcmVzdWx0X2hleF9zdHIsIGNoYXIgKnNlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X3N0clsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKKyAgICBtYmVkdGxzX21waSBQMSwgUTEsIEgsIEc7CisgICAgc2l6ZV90IG91dHB1dF9sZW47CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworICAgICgodm9pZCkgc2VlZCk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUDEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlExICk7IG1iZWR0bHNfbXBpX2luaXQoICZIICk7IG1iZWR0bHNfbXBpX2luaXQoICZHICk7CisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgTUJFRFRMU19SU0FfUEtDU19WMTUsIGhhc2ggKTsKKworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gOCArICggKCBtb2QgJSA4ICkgPyAxIDogMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5QLCByYWRpeF9QLCBpbnB1dF9QICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5RLCByYWRpeF9RLCBpbnB1dF9RICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZQMSwgJmN0eC5QLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUTEsICZjdHguUSwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbXVsX21waSggJkgsICZQMSwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9nY2QoICZHLCAmY3R4LkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC5EICwgJmN0eC5FLCAmSCAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHguRFAsICZjdHguRCwgJlAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LkRRLCAmY3R4LkQsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC5RUCwgJmN0eC5RLCAmY3R4LlAgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggJmN0eCApID09IDAgKTsKKworICAgIHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdCggJmN0eCwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvLCBNQkVEVExTX1JTQV9QUklWQVRFLCAmb3V0cHV0X2xlbiwgbWVzc2FnZV9zdHIsIG91dHB1dCwgMTAwMCApID09IHJlc3VsdCApOworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIG91dHB1dF9zdHIsIG91dHB1dCwgY3R4LmxlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJuY2FzZWNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X2hleF9zdHIsIHN0cmxlbiggcmVzdWx0X2hleF9zdHIgKSApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlAxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZRMSApOyBtYmVkdGxzX21waV9mcmVlKCAmSCApOyBtYmVkdGxzX21waV9mcmVlKCAmRyApOworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcGtjczFfcnNhc3NhX3YxNV9zaWduKCBpbnQgbW9kLCBpbnQgcmFkaXhfUCwgY2hhciAqaW5wdXRfUCwgaW50IHJhZGl4X1EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfUSwgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsIGludCBkaWdlc3QsIGludCBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgY2hhciAqc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZXN1bHRfaGV4X3N0ciwgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBtZXNzYWdlX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hfcmVzdWx0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJuZF9idWZbMTAwMF07CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgbWJlZHRsc19tcGkgUDEsIFExLCBILCBHOworICAgIHNpemVfdCBtc2dfbGVuOworICAgIHJuZF9idWZfaW5mbyBpbmZvOworCisgICAgaW5mby5sZW5ndGggPSB1bmhleGlmeSggcm5kX2J1Ziwgc2FsdCApOworICAgIGluZm8uYnVmID0gcm5kX2J1ZjsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZQMSApOyBtYmVkdGxzX21waV9pbml0KCAmUTEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkggKTsgbWJlZHRsc19tcGlfaW5pdCggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgaGFzaCApOworCisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggaGFzaF9yZXN1bHQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMHgwMCwgMTAwMCApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDggKyAoICggbW9kICUgOCApID8gMSA6IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUCwgcmFkaXhfUCwgaW5wdXRfUCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUSwgcmFkaXhfUSwgaW5wdXRfUSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUDEsICZjdHguUCwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlExLCAmY3R4LlEsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX211bF9tcGkoICZILCAmUDEsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfZ2NkKCAmRywgJmN0eC5FLCAmSCAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHguRCAsICZjdHguRSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LkRQLCAmY3R4LkQsICZQMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC5EUSwgJmN0eC5ELCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHguUVAsICZjdHguUSwgJmN0eC5QICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoICZjdHggKSA9PSAwICk7CisKKyAgICBtc2dfbGVuID0gdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKworICAgIGlmKCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBkaWdlc3QgKSAhPSBOVUxMICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWQoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGRpZ2VzdCApLCBtZXNzYWdlX3N0ciwgbXNnX2xlbiwgaGFzaF9yZXN1bHQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcGtjczFfc2lnbiggJmN0eCwgJnJuZF9idWZmZXJfcmFuZCwgJmluZm8sIE1CRURUTFNfUlNBX1BSSVZBVEUsIGRpZ2VzdCwgMCwgaGFzaF9yZXN1bHQsIG91dHB1dCApID09IHJlc3VsdCApOworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIG91dHB1dF9zdHIsIG91dHB1dCwgY3R4Lmxlbik7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIG91dHB1dF9zdHIsIHJlc3VsdF9oZXhfc3RyICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUDEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlExICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZIICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZHICk7CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBwa2NzMV9yc2Fzc2FfdjE1X3ZlcmlmeSggaW50IG1vZCwgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sIGludCByYWRpeF9FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfRSwgaW50IGRpZ2VzdCwgaW50IGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGNoYXIgKnNhbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZXN1bHRfaGV4X3N0ciwgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBtZXNzYWdlX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hfcmVzdWx0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0X3N0clsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgbXNnX2xlbjsKKyAgICAoKHZvaWQpIHNhbHQpOworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgTUJFRFRMU19SU0FfUEtDU19WMTUsIGhhc2ggKTsKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3Jlc3VsdCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggcmVzdWx0X3N0ciwgMHgwMCwgMTAwMCApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDggKyAoICggbW9kICUgOCApID8gMSA6IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoICZjdHggKSA9PSAwICk7CisKKyAgICBtc2dfbGVuID0gdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggcmVzdWx0X3N0ciwgcmVzdWx0X2hleF9zdHIgKTsKKworICAgIGlmKCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBkaWdlc3QgKSAhPSBOVUxMICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWQoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGRpZ2VzdCApLCBtZXNzYWdlX3N0ciwgbXNnX2xlbiwgaGFzaF9yZXN1bHQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5KCAmY3R4LCBOVUxMLCBOVUxMLCBNQkVEVExTX1JTQV9QVUJMSUMsIGRpZ2VzdCwgMCwgaGFzaF9yZXN1bHQsIHJlc3VsdF9zdHIgKSA9PSByZXN1bHQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YyMS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YyMS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTZiZWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjIxLmRhdGEKQEAgLTAsMCArMSw3ODkgQEAKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciBJbnQKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI0OjE2OiJiYmY4MmYwOTA2ODJjZTljMjMzOGFjMmI5ZGE4NzFmNzM2OGQwN2VlZDQxMDQzYTQ0MGQ2YjZmMDc0NTRmNTFmYjhkZmJhYWYwMzVjMDJhYjYxZWE0OGNlZWI2ZmNkNDg3NmVkNTIwZDYwZTFlYzQ2MTk3MTlkOGE1YjhiODA3ZmFmYjhlMGEzZGZjNzM3NzIzZWU2YjRiN2Q5M2EyNTg0ZWU2YTY0OWQwNjA5NTM3NDg4MzRiMjQ1NDU5ODM5NGVlMGFhYjEyZDdiNjFhNTFmNTI3YTlhNDFmNmMxNjg3ZmUyNTM3Mjk4Y2EyYThmNTk0NmY4ZTVmZDA5MWRiZGNiIjoxNjoiMTEiOk1CRURUTFNfTURfU0hBMToiZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDkiOiJhYWZkMTJmNjU5Y2FlNjM0ODliNDc5ZTUwNzZkZGVjMmYwNmNiNThmIjoiMTI1M2UwNGRjMGE1Mzk3YmI0NGE3YWI4N2U5YmYyYTAzOWEzM2QxZTk5NmZjODJhOTRjY2QzMDA3NGM5NWRmNzYzNzIyMDE3MDY5ZTUyNjhkYTVkMWMwYjRmODcyY2Y2NTNjMTFkZjgyMzE0YTY3OTY4ZGZlYWUyOGRlZjA0YmI2ZDg0YjFjMzFkNjU0YTE5NzBlNTc4M2JkNmViOTZhMDI0YzJjYTJmNGE5MGZlOWYyZWY1YzljMTQwZTViYjQ4ZGE5NTM2YWQ4NzAwYzg0ZmM5MTMwYWRlYTc0ZTU1OGQ1MWE3NGRkZjg1ZDhiNTBkZTk2ODM4ZDYwNjNlMDk1NSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgRGF0YSBqdXN0IGZpdHMKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI0OjE2OiJiYmY4MmYwOTA2ODJjZTljMjMzOGFjMmI5ZGE4NzFmNzM2OGQwN2VlZDQxMDQzYTQ0MGQ2YjZmMDc0NTRmNTFmYjhkZmJhYWYwMzVjMDJhYjYxZWE0OGNlZWI2ZmNkNDg3NmVkNTIwZDYwZTFlYzQ2MTk3MTlkOGE1YjhiODA3ZmFmYjhlMGEzZGZjNzM3NzIzZWU2YjRiN2Q5M2EyNTg0ZWU2YTY0OWQwNjA5NTM3NDg4MzRiMjQ1NDU5ODM5NGVlMGFhYjEyZDdiNjFhNTFmNTI3YTlhNDFmNmMxNjg3ZmUyNTM3Mjk4Y2EyYThmNTk0NmY4ZTVmZDA5MWRiZGNiIjoxNjoiMTEiOk1CRURUTFNfTURfU0hBMToiZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDlkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OWQ0MzZlOTk1NjlmZDMyYTdjOGEwNWJiYzkwZDMyYzQ5ZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDlkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OWQ0MzZlOTk1NjlmZCI6ImFhZmQxMmY2NTljYWU2MzQ4OWI0NzllNTA3NmRkZWMyZjA2Y2I1OGYiOiIzMDgyZjIyODhmZmYyNzUyMTNkNTMxNjhmMGEyNzI1NzNjZmY4MTgzN2MyNDlkYzFmMzgwYTEyYWMxMjRjOGYyMTdiNzAwNzA4YTFjZTdkY2UxNTQyNjVmMzFhMTI2ZWJkZDllZDNlZjkxNDVhZTI5MTI0YTI1ZjRlNjVhYTUyYzVhOWZmMzRmNmNmNGRlOWJhOTM3YWU0MDZkYzdkMWYyNzdhZjRmNmZiN2VhNzNiZmJhYjJiZDM5N2I2YjJjNTM1NzBlMTczZmZjZjNiOWYwYmI5NjgzNzYyM2E0Zjg3YmQ4MWI0MTQ0NmM1OWU2ODFhMmYzZGE4MTIzOWU5YmRmIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciBEYXRhIHRvbyBsb25nCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNDoxNjoiYmJmODJmMDkwNjgyY2U5YzIzMzhhYzJiOWRhODcxZjczNjhkMDdlZWQ0MTA0M2E0NDBkNmI2ZjA3NDU0ZjUxZmI4ZGZiYWFmMDM1YzAyYWI2MWVhNDhjZWViNmZjZDQ4NzZlZDUyMGQ2MGUxZWM0NjE5NzE5ZDhhNWI4YjgwN2ZhZmI4ZTBhM2RmYzczNzcyM2VlNmI0YjdkOTNhMjU4NGVlNmE2NDlkMDYwOTUzNzQ4ODM0YjI0NTQ1OTgzOTRlZTBhYWIxMmQ3YjYxYTUxZjUyN2E5YTQxZjZjMTY4N2ZlMjUzNzI5OGNhMmE4ZjU5NDZmOGU1ZmQwOTFkYmRjYiI6MTY6IjExIjpNQkVEVExTX01EX1NIQTE6ImQ0MzZlOTk1NjlmZDMyYTdjOGEwNWJiYzkwZDMyYzQ5ZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDlkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OWQ0MzZlOTk1NjlmZDMyYTdjOGEwNWJiYzkwZDMyYzQ5ZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDlkNDM2ZTk5NTY5ZmQwMCI6ImFhZmQxMmY2NTljYWU2MzQ4OWI0NzllNTA3NmRkZWMyZjA2Y2I1OGYiOiIxMjUzZTA0ZGMwYTUzOTdiYjQ0YTdhYjg3ZTliZjJhMDM5YTMzZDFlOTk2ZmM4MmE5NGNjZDMwMDc0Yzk1ZGY3NjM3MjIwMTcwNjllNTI2OGRhNWQxYzBiNGY4NzJjZjY1M2MxMWRmODIzMTRhNjc5NjhkZmVhZTI4ZGVmMDRiYjZkODRiMWMzMWQ2NTRhMTk3MGU1NzgzYmQ2ZWI5NmEwMjRjMmNhMmY0YTkwZmU5ZjJlZjVjOWMxNDBlNWJiNDhkYTk1MzZhZDg3MDBjODRmYzkxMzBhZGVhNzRlNTU4ZDUxYTc0ZGRmODVkOGI1MGRlOTY4MzhkNjA2M2UwOTU1IjpNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIDFfMQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjQ6MTY6ImE4YjNiMjg0YWY4ZWI1MGIzODcwMzRhODYwZjE0NmM0OTE5ZjMxODc2M2NkNmM1NTk4YzhhZTQ4MTFhMWUwYWJjNGM3ZTBiMDgyZDY5M2E1ZTdmY2VkNjc1Y2Y0NjY4NTEyNzcyYzBjYmM2NGE3NDJjNmM2MzBmNTMzYzhjYzcyZjYyYWU4MzNjNDBiZjI1ODQyZTk4NGJiNzhiZGJmOTdjMDEwN2Q1NWJkYjY2MmY1YzRlMGZhYjk4NDVjYjUxNDhlZjczOTJkZDNhYWZmOTNhZTFlNmI2NjdiYjNkNDI0NzYxNmQ0ZjViYTEwZDRjZmQyMjZkZTg4ZDM5ZjE2ZmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNjYyODE5NGUxMjA3M2RiMDNiYTk0Y2RhOWVmOTUzMjM5N2Q1MGRiYTc5Yjk4NzAwNGFmZWZlMzQiOiIxOGI3NzZlYTIxMDY5ZDY5Nzc2YTMzZTk2YmFkNDhlMWRkYTBhNWVmIjoiMzU0ZmU2N2I0YTEyNmQ1ZDM1ZmUzNmM3Nzc3OTFhM2Y3YmExM2RlZjQ4NGUyZDM5MDhhZmY3MjJmYWQ0NjhmYjIxNjk2ZGU5NWQwYmU5MTFjMmQzMTc0ZjhhZmNjMjAxMDM1ZjdiNmQ4ZTY5NDAyZGU1NDUxNjE4YzIxYTUzNWZhOWQ3YmZjNWI4ZGQ5ZmMyNDNmOGNmOTI3ZGIzMTMyMmQ2ZTg4MWVhYTkxYTk5NjE3MGU2NTdhMDVhMjY2NDI2ZDk4Yzg4MDAzZjg0NzdjMTIyNzA5NGEwZDlmYTFlOGM0MDI0MzA5Y2UxZWNjY2I1MjEwMDM1ZDQ3YWM3MmU4YSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgMV8yCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNDoxNjoiYThiM2IyODRhZjhlYjUwYjM4NzAzNGE4NjBmMTQ2YzQ5MTlmMzE4NzYzY2Q2YzU1OThjOGFlNDgxMWExZTBhYmM0YzdlMGIwODJkNjkzYTVlN2ZjZWQ2NzVjZjQ2Njg1MTI3NzJjMGNiYzY0YTc0MmM2YzYzMGY1MzNjOGNjNzJmNjJhZTgzM2M0MGJmMjU4NDJlOTg0YmI3OGJkYmY5N2MwMTA3ZDU1YmRiNjYyZjVjNGUwZmFiOTg0NWNiNTE0OGVmNzM5MmRkM2FhZmY5M2FlMWU2YjY2N2JiM2Q0MjQ3NjE2ZDRmNWJhMTBkNGNmZDIyNmRlODhkMzlmMTZmYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI3NTBjNDA0N2Y1NDdlOGU0MTQxMTg1NjUyMzI5OGFjOWJhZTI0NWVmYWYxMzk3ZmJlNTZmOWRkNSI6IjBjYzc0MmNlNGE5YjdmMzJmOTUxYmNiMjUxZWZkOTI1ZmU0ZmUzNWYiOiI2NDBkYjFhY2M1OGUwNTY4ZmU1NDA3ZTVmOWI3MDFkZmY4YzNjOTFlNzE2YzUzNmZjN2ZjZWM2Y2I1YjcxYzExNjU5ODhkNGEyNzllMTU3N2Q3MzBmYzdhMjk5MzJlM2YwMGM4MTUxNTIzNmQ4ZDhlMzEwMTdhN2EwOWRmNDM1MmQ5MDRjZGViNzlhYTU4M2FkY2MzMWVhNjk4YTRjMDUyODNkYWJhOTA4OWJlNTQ5MWY2N2MxYTRlZTQ4ZGM3NGJiYmU2NjQzYWVmODQ2Njc5YjRjYjM5NWEzNTJkNWVkMTE1OTEyZGY2OTZmZmUwNzAyOTMyOTQ2ZDcxNDkyYjQ0IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciAxXzMKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI0OjE2OiJhOGIzYjI4NGFmOGViNTBiMzg3MDM0YTg2MGYxNDZjNDkxOWYzMTg3NjNjZDZjNTU5OGM4YWU0ODExYTFlMGFiYzRjN2UwYjA4MmQ2OTNhNWU3ZmNlZDY3NWNmNDY2ODUxMjc3MmMwY2JjNjRhNzQyYzZjNjMwZjUzM2M4Y2M3MmY2MmFlODMzYzQwYmYyNTg0MmU5ODRiYjc4YmRiZjk3YzAxMDdkNTViZGI2NjJmNWM0ZTBmYWI5ODQ1Y2I1MTQ4ZWY3MzkyZGQzYWFmZjkzYWUxZTZiNjY3YmIzZDQyNDc2MTZkNGY1YmExMGQ0Y2ZkMjI2ZGU4OGQzOWYxNmZiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImQ5NGFlMDgzMmU2NDQ1Y2U0MjMzMWNiMDZkNTMxYTgyYjFkYjRiYWFkMzBmNzQ2ZGM5MTZkZjI0ZDRlM2MyNDUxZmZmNTlhNjQyM2ViMGUxZDAyZDRmZTY0NmNmNjk5ZGZkODE4YzZlOTdiMDUxIjoiMjUxNGRmNDY5NTc1NWE2N2IyODhlYWY0OTA1YzM2ZWVjNjZmZDJmZCI6IjQyMzczNmVkMDM1ZjYwMjZhZjI3NmMzNWMwYjM3NDFiMzY1ZTVmNzZjYTA5MWI0ZThjMjllMmYwYmVmZWU2MDM1OTVhYTgzMjJkNjAyZDJlNjI1ZTk1ZWI4MWIyZjFjOTcyNGU4MjJlY2E3NmRiODYxOGNmMDljNTM0MzUwM2E0MzYwODM1YjU5MDNiYzYzN2UzODc5ZmIwNWUwZWYzMjY4NWQ1YWVjNTA2N2NkN2NjOTZmZTRiMjY3MGI2ZWFjMzA2NmIxZmNmNTY4NmI2ODU4OWFhZmI3ZDYyOWIwMmQ4Zjg2MjVjYTM4MzM2MjRkNDgwMGZiMDgxYjFjZjk0ZWIiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIDFfNAorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjQ6MTY6ImE4YjNiMjg0YWY4ZWI1MGIzODcwMzRhODYwZjE0NmM0OTE5ZjMxODc2M2NkNmM1NTk4YzhhZTQ4MTFhMWUwYWJjNGM3ZTBiMDgyZDY5M2E1ZTdmY2VkNjc1Y2Y0NjY4NTEyNzcyYzBjYmM2NGE3NDJjNmM2MzBmNTMzYzhjYzcyZjYyYWU4MzNjNDBiZjI1ODQyZTk4NGJiNzhiZGJmOTdjMDEwN2Q1NWJkYjY2MmY1YzRlMGZhYjk4NDVjYjUxNDhlZjczOTJkZDNhYWZmOTNhZTFlNmI2NjdiYjNkNDI0NzYxNmQ0ZjViYTEwZDRjZmQyMjZkZTg4ZDM5ZjE2ZmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNTJlNjUwZDk4ZTdmMmEwNDhiNGY4Njg1MjE1M2I5N2UwMWRkMzE2ZjM0NmExOWY2N2E4NSI6ImM0NDM1YTNlMWExOGE2OGI2ODIwNDM2MjkwYTM3Y2VmYjg1ZGIzZmIiOiI0NWVhZDRjYTU1MWU2NjJjOTgwMGYxYWNhODI4M2IwNTI1ZTZhYmFlMzBiZTRiNGFiYTc2MmZhNDBmZDNkMzhlMjJhYmVmYzY5Nzk0ZjZlYmJiYzA1ZGRiYjExMjE2MjQ3ZDJmNDEyZmQwZmJhODdjNmUzYWNkODg4ODEzNjQ2ZmQwZTQ4ZTc4NTIwNGY5YzNmNzNkNmQ4MjM5NTYyNzIyZGRkZDg3NzFmZWM0OGI4M2EzMWVlNmY1OTJjNGNmZDRiYzg4MTc0ZjNiMTNhMTEyYWFlM2I5ZjdiODBlMGZjNmY3MjU1YmE4ODBkYzdkODAyMWUyMmFkNmE4NWYwNzU1IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciAxXzUKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI0OjE2OiJhOGIzYjI4NGFmOGViNTBiMzg3MDM0YTg2MGYxNDZjNDkxOWYzMTg3NjNjZDZjNTU5OGM4YWU0ODExYTFlMGFiYzRjN2UwYjA4MmQ2OTNhNWU3ZmNlZDY3NWNmNDY2ODUxMjc3MmMwY2JjNjRhNzQyYzZjNjMwZjUzM2M4Y2M3MmY2MmFlODMzYzQwYmYyNTg0MmU5ODRiYjc4YmRiZjk3YzAxMDdkNTViZGI2NjJmNWM0ZTBmYWI5ODQ1Y2I1MTQ4ZWY3MzkyZGQzYWFmZjkzYWUxZTZiNjY3YmIzZDQyNDc2MTZkNGY1YmExMGQ0Y2ZkMjI2ZGU4OGQzOWYxNmZiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjhkYTg5ZmQ5ZTVmOTc0YTI5ZmVmZmI0NjJiNDkxODBmNmNmOWU4MDIiOiJiMzE4YzQyZGYzYmUwZjgzZmVhODIzZjVhN2I0N2VkNWU0MjVhM2I1IjoiMzZmNmUzNGQ5NGE4ZDM0ZGFhY2JhMzNhMjEzOWQwMGFkODVhOTM0NWE4NjA1MWU3MzA3MTYyMDA1NmI5MjBlMjE5MDA1ODU1YTIxM2EwZjIzODk3Y2RjZDczMWI0NTI1N2M3NzdmZTkwODIwMmJlZmRkMGI1ODM4NmIxMjQ0ZWEwY2Y1MzlhMDVkNWQxMDMyOWRhNDRlMTMwMzBmZDc2MGRjZDY0NGNmZWYyMDk0ZDE5MTBkM2Y0MzNlMWM3YzZkZDE4YmMxZjJkZjdmNjQzZDY2MmZiOWRkMzdlYWQ5MDU5MTkwZjRmYTY2Y2EzOWU4NjljNGViNDQ5Y2JkYzQzOSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgMV82Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNDoxNjoiYThiM2IyODRhZjhlYjUwYjM4NzAzNGE4NjBmMTQ2YzQ5MTlmMzE4NzYzY2Q2YzU1OThjOGFlNDgxMWExZTBhYmM0YzdlMGIwODJkNjkzYTVlN2ZjZWQ2NzVjZjQ2Njg1MTI3NzJjMGNiYzY0YTc0MmM2YzYzMGY1MzNjOGNjNzJmNjJhZTgzM2M0MGJmMjU4NDJlOTg0YmI3OGJkYmY5N2MwMTA3ZDU1YmRiNjYyZjVjNGUwZmFiOTg0NWNiNTE0OGVmNzM5MmRkM2FhZmY5M2FlMWU2YjY2N2JiM2Q0MjQ3NjE2ZDRmNWJhMTBkNGNmZDIyNmRlODhkMzlmMTZmYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIyNjUyMTA1MDg0NDI3MSI6ImU0ZWMwOTgyYzIzMzZmM2E2NzdmNmEzNTYxNzRlYjBjZTg4N2FiYzIiOiI0MmNlZTI2MTdiMWVjZWE0ZGIzZjQ4MjkzODZmYmQ2MWRhZmJmMDM4ZTE4MGQ4MzdjOTYzNjZkZjI0YzA5N2I0YWIwZmFjNmJkZjU5MGQ4MjFjOWYxMDY0MmU2ODFhZDA1YjhkNzhiMzc4YzBmNDZjZTJmYWQ2M2Y3NGUwYWQzZGYwNmIwNzVkN2ViNWY1NjM2ZjhkNDAzYjkwNTljYTc2MWI1YzYyYmI1MmFhNDUwMDJlYTcwYmFhY2UwOGRlZDI0M2I5ZDhjYmQ2MmE2OGFkZTI2NTgzMmI1NjU2NGU0M2E2ZmE0MmVkMTk5YTA5OTc2OTc0MmRmMTUzOWU4MjU1IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciAyXzEKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI1OjE2OiIwMTk0N2M3ZmNlOTA0MjVmNDcyNzllNzA4NTFmMjVkNWU2MjMxNmZlOGExZGYxOTM3MWUzZTYyOGUyNjA1NDNlNDkwMWVmNjA4MWY2OGMwYjgxNDExOTBkMmFlOGRhYmE3ZDEyNTBlYzZkYjYzNmU5NDRlYzM3MjI4NzdjN2MxZDBhNjdmMTRiMTY5NGM1ZjAzNzk0NTFhNDNlNDlhMzJkZGU4MzY3MGI3M2RhOTFhMWM5OWJjMjNiNDM2YTYwMDU1YzYxMGYwYmFmOTljMWEwNzk1NjViOTVhM2YxNTI2NjMyZDFkNGRhNjBmMjBlZGEyNWU2NTNjNGYwMDI3NjZmNDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiOGZmMDBjYWE2MDVjNzAyODMwNjM0ZDlhNmMzZDQyYzY1MmI1OGNmMWQ5MmZlYzU3MGJlZWU3IjoiOGM0MDdiNWVjMjg5OWU1MDk5YzUzZThjZTc5M2JmOTRlNzFiMTc4MiI6IjAxODFhZjg5MjJiOWZjYjRkNzlkOTJlYmUxOTgxNTk5MmZjMGMxNDM5ZDhiY2Q0OTEzOThhMGY0YWQzYTMyOWE1YmQ5Mzg1NTYwZGI1MzI2ODNjOGI3ZGEwNGU0YjEyYWVkNmFhY2RmNDcxYzM0YzljZGE4OTFhZGRjYzJkZjM0NTY2NTNhYTYzODJlOWFlNTliNTQ0NTUyNTdlYjA5OWQ1NjJiYmUxMDQ1M2YyYjZkMTNjNTljMDJlMTBmMWY4YWJiNWRhMGQwNTcwOTMyZGFjZjJkMDkwMWRiNzI5ZDBmZWZjYzA1NGU3MDk2OGVhNTQwYzgxYjA0YmNhZWZlNzIwZSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgMl8yCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNToxNjoiMDE5NDdjN2ZjZTkwNDI1ZjQ3Mjc5ZTcwODUxZjI1ZDVlNjIzMTZmZThhMWRmMTkzNzFlM2U2MjhlMjYwNTQzZTQ5MDFlZjYwODFmNjhjMGI4MTQxMTkwZDJhZThkYWJhN2QxMjUwZWM2ZGI2MzZlOTQ0ZWMzNzIyODc3YzdjMWQwYTY3ZjE0YjE2OTRjNWYwMzc5NDUxYTQzZTQ5YTMyZGRlODM2NzBiNzNkYTkxYTFjOTliYzIzYjQzNmE2MDA1NWM2MTBmMGJhZjk5YzFhMDc5NTY1Yjk1YTNmMTUyNjYzMmQxZDRkYTYwZjIwZWRhMjVlNjUzYzRmMDAyNzY2ZjQ1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjJkIjoiYjYwMGNmM2MyZTUwNmQ3ZjE2Nzc4YzkxMGQzYThiMDAzZWVlNjFkNSI6IjAxODc1OWZmMWRmNjNiMjc5MjQxMDU2MjMxNDQxNmE4YWVhZjJhYzYzNGI0NmY5NDBhYjgyZDY0ZGJmMTY1ZWVlMzMwMTFkYTc0OWQ0YmFiNmUyZmNkMTgxMjljOWU0OTI3N2Q4NDUzMTEyYjQyOWEyMjJhODQ3MWIwNzA5OTM5OThlNzU4ODYxYzRkM2Y2ZDc0OWQ5MWM0MjkwZDMzMmM3YTRhYjNmN2VhMzVmZjNhMDdkNDk3Yzk1NWZmMGZmYzk1MDA2YjYyYzZkMjk2ODEwZDliZmFiMDI0MTk2Yzc5MzQwMTJjMmRmOTc4ZWYyOTlhYmEyMzk5NDBjYmExMDI0NSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgMl8zCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNToxNjoiMDE5NDdjN2ZjZTkwNDI1ZjQ3Mjc5ZTcwODUxZjI1ZDVlNjIzMTZmZThhMWRmMTkzNzFlM2U2MjhlMjYwNTQzZTQ5MDFlZjYwODFmNjhjMGI4MTQxMTkwZDJhZThkYWJhN2QxMjUwZWM2ZGI2MzZlOTQ0ZWMzNzIyODc3YzdjMWQwYTY3ZjE0YjE2OTRjNWYwMzc5NDUxYTQzZTQ5YTMyZGRlODM2NzBiNzNkYTkxYTFjOTliYzIzYjQzNmE2MDA1NWM2MTBmMGJhZjk5YzFhMDc5NTY1Yjk1YTNmMTUyNjYzMmQxZDRkYTYwZjIwZWRhMjVlNjUzYzRmMDAyNzY2ZjQ1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6Ijc0ZmM4OGM1MWJjOTBmNzdhZjlkNWU5YTRhNzAxMzNkNGI0ZTBiMzRkYTNjMzdjN2VmOGUiOiJhNzM3NjhhZWVhYTkxZjlkOGMxZWQ2ZjlkMmI2MzQ2N2YwN2NjYWUzIjoiMDE4ODAyYmFiMDRjNjAzMjVlODFjNDk2MjMxMWYyYmU3YzJhZGNlOTMwNDFhMDA3MTljODhmOTU3NTc1ZjJjNzlmMWI3YmM4Y2VkMTE1YzcwNmIzMTFjMDhhMmQ5ODZjYTNiNmE5MzM2YjE0N2MyOWM2ZjIyOTQwOWRkZWM2NTFiZDFmZGQ1YTBiN2Y2MTBjOTkzN2ZkYjRhM2E3NjIzNjRiOGIzMjA2YjRlYTQ4NWZkMDk4ZDA4ZjYzZDRhYThiYjI2OTdkMDI3Yjc1MGMzMmQ3Zjc0ZWFmNTE4MGQyZTliNjZiMTdjYjJmYTU1NTIzYmMyODBkYTEwZDE0YmUyMDUzIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciAyXzQKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI1OjE2OiIwMTk0N2M3ZmNlOTA0MjVmNDcyNzllNzA4NTFmMjVkNWU2MjMxNmZlOGExZGYxOTM3MWUzZTYyOGUyNjA1NDNlNDkwMWVmNjA4MWY2OGMwYjgxNDExOTBkMmFlOGRhYmE3ZDEyNTBlYzZkYjYzNmU5NDRlYzM3MjI4NzdjN2MxZDBhNjdmMTRiMTY5NGM1ZjAzNzk0NTFhNDNlNDlhMzJkZGU4MzY3MGI3M2RhOTFhMWM5OWJjMjNiNDM2YTYwMDU1YzYxMGYwYmFmOTljMWEwNzk1NjViOTVhM2YxNTI2NjMyZDFkNGRhNjBmMjBlZGEyNWU2NTNjNGYwMDI3NjZmNDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiYTdlYjJhNTAzNjkzMWQyN2Q0ZTg5MTMyNmQ5OTY5MmZmYWRkYTliZjdlZmQzZTM0ZTYyMmM0YWRjMDg1ZjcyMWRmZTg4NTA3MmM3OGEyMDNiMTUxNzM5YmU1NDBmYThjMTUzYTEwZjAwYSI6IjlhN2IzYjBlNzA4YmQ5NmY4MTkwZWNhYjRmYjliMmIzODA1YTgxNTYiOiIwMGE0NTc4Y2JjMTc2MzE4YTYzOGZiYTdkMDFkZjE1NzQ2YWY0NGQ0ZjZjZDk2ZDdlN2M0OTVjYmY0MjViMDljNjQ5ZDMyYmY4ODZkYTQ4ZmJhZjk4OWEyMTE3MTg3Y2FmYjFmYjU4MDMxNzY5MGUzY2NkNDQ2OTIwYjdhZjgyYjMxZGI1ODA0ZDg3ZDAxNTE0YWNiZmE5MTU2ZTc4MmY4NjdmNmJlZDk0NDllMGU5YTJjMDliY2VjYzZhYTA4NzYzNjk2NWUzNGIzZWM3NjZmMmZlMmU0MzAxOGEyZmRkZWIxNDA2MTZhMGU5ZDgyZTUzMzEwMjRlZTA2NTJmYzc2NDEiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIDJfNQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjU6MTY6IjAxOTQ3YzdmY2U5MDQyNWY0NzI3OWU3MDg1MWYyNWQ1ZTYyMzE2ZmU4YTFkZjE5MzcxZTNlNjI4ZTI2MDU0M2U0OTAxZWY2MDgxZjY4YzBiODE0MTE5MGQyYWU4ZGFiYTdkMTI1MGVjNmRiNjM2ZTk0NGVjMzcyMjg3N2M3YzFkMGE2N2YxNGIxNjk0YzVmMDM3OTQ1MWE0M2U0OWEzMmRkZTgzNjcwYjczZGE5MWExYzk5YmMyM2I0MzZhNjAwNTVjNjEwZjBiYWY5OWMxYTA3OTU2NWI5NWEzZjE1MjY2MzJkMWQ0ZGE2MGYyMGVkYTI1ZTY1M2M0ZjAwMjc2NmY0NSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIyZWYyYjA2NmY4NTRjMzNmM2JkY2JiNTk5NGE0MzVlNzNkNmM2YyI6ImViM2NlYmJjNGFkYzE2YmI0OGU4OGM4YWVjMGUzNGFmN2Y0MjdmZDMiOiIwMGViYzVmNWZkYTc3Y2ZkYWQzYzgzNjQxYTkwMjVlNzdkNzJkOGE2ZmIzM2E4MTBmNTk1MGY4ZDc0YzczZThkOTMxZTg2MzRkODZhYjEyNDYyNTZhZTA3YjYwMDViNzFiN2YyZmI5ODM1MTIxODMzMWNlNjliOGZmYmRjOWRhMDhiYmM5YzcwNGY4NzZkZWI5ZGY5ZmMyZWMwNjVjYWQ4N2Y5MDkwYjA3YWNjMTdhYTdmOTk3YjI3YWNhNDg4MDZlODk3Zjc3MWQ5NTE0MWZlNDUyNmQ4YTUzMDFiNjc4NjI3ZWZhYjcwN2ZkNDBmYmViZDZlNzkyYTI1NjEzZTdhZWMiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIDJfNgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjU6MTY6IjAxOTQ3YzdmY2U5MDQyNWY0NzI3OWU3MDg1MWYyNWQ1ZTYyMzE2ZmU4YTFkZjE5MzcxZTNlNjI4ZTI2MDU0M2U0OTAxZWY2MDgxZjY4YzBiODE0MTE5MGQyYWU4ZGFiYTdkMTI1MGVjNmRiNjM2ZTk0NGVjMzcyMjg3N2M3YzFkMGE2N2YxNGIxNjk0YzVmMDM3OTQ1MWE0M2U0OWEzMmRkZTgzNjcwYjczZGE5MWExYzk5YmMyM2I0MzZhNjAwNTVjNjEwZjBiYWY5OWMxYTA3OTU2NWI5NWEzZjE1MjY2MzJkMWQ0ZGE2MGYyMGVkYTI1ZTY1M2M0ZjAwMjc2NmY0NSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI4YTdmYjM0NGM4YjZjYjJjZjJlZjFmNjQzZjlhMzIxOGY2ZTE5YmJhODljMCI6IjRjNDVjZjRkNTdjOThlM2Q2ZDIwOTVhZGM1MWM0ODllYjUwZGZmODQiOiIwMTA4MzllYzIwYzI3YjkwNTJlNTViZWZiOWI3N2U2ZmMyNmU5MDc1ZDdhNTQzNzhjNjQ2YWJkZjUxZTQ0NWJkNTcxNWRlODE3ODlmNTZmMTgwM2Q5MTcwNzY0YTllOTNjYjc4Nzk4Njk0MDIzZWU3MzkzY2UwNGJjNWQ4ZjhjNWE1MmMxNzFkNDM4MzdlM2FjYTYyZjYwOWViMGFhNWZmYjA5NjBlZjA0MTk4ZGQ3NTRmNTdmN2ZiZTZhYmY3NjVjZjExOGI0Y2E0NDNiMjNiNWFhYjI2NmY5NTIzMjZhYzQ1ODExMDA2NDQzMjVmOGI3MjFhY2Q1ZDA0ZmYxNGVmM2EiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgM18xCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNjoxNjoiMDJiNThmZWMwMzlhODYwNzAwYTRkN2I2NDYyZjkzZTZjZGQ0OTExNjFkZGQ3NGY0ZTgxMGI0MGUzYzE2NTIwMDZhNWMyNzdiMjc3NGMxMTMwNWE0Y2JhYjVhNzhlZmE1N2UxN2E4NmRmN2EzZmEzNmZjNGIxZDIyNDlmMjJlYzdjMmRkNmE0NjMyMzJhY2NlYTkwNmQ2NmViZTgwYjU3MDRiMTA3MjlkYTZmODMzMjM0YWJiNWVmZGQ0YTI5MmNiZmFkMzNiNGQzM2ZhN2ExNGI4YzM5N2I1NmUzYWNkMjEyMDM0MjhiNzdjZGZhMzNhNmRhNzA2YjNkOGIwZmM0M2U5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjA4NzgyMGI1NjllOGZhOGQiOiI4Y2VkNmIxOTYyOTA4MDU3OTBlOTA5MDc0MDE1ZTZhMjBiMGM0ODk0IjoiMDI2YTA0ODVkOTZhZWJkOTZiNDM4MjA4NTA5OWI5NjJlNmEyYmRlYzNkOTBjOGRiNjI1ZTE0MzcyZGU4NWUyZDViN2JhYWI2NWM4ZmFmOTFiYjU1MDRmYjQ5NWFmY2U1Yzk4OGIzZjZhNTJlMjBlMWQ2Y2JkMzU2NmM1Y2QxZjJiODMxOGJiNTQyY2MwZWEyNWM0YWFiOTkzMmFmYTIwNzYwZWFkZGVjNzg0Mzk2YTA3ZWEwZWYyNGQ0ZTZmNGQzN2U1MDUyYTdhMzFlMTQ2YWE0ODBhMTExYmJlOTI2NDAxMzA3ZTAwZjQxMDAzMzg0MmI2ZDgyZmU1Y2U0ZGZhZTgwIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDNfMgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjY6MTY6IjAyYjU4ZmVjMDM5YTg2MDcwMGE0ZDdiNjQ2MmY5M2U2Y2RkNDkxMTYxZGRkNzRmNGU4MTBiNDBlM2MxNjUyMDA2YTVjMjc3YjI3NzRjMTEzMDVhNGNiYWI1YTc4ZWZhNTdlMTdhODZkZjdhM2ZhMzZmYzRiMWQyMjQ5ZjIyZWM3YzJkZDZhNDYzMjMyYWNjZWE5MDZkNjZlYmU4MGI1NzA0YjEwNzI5ZGE2ZjgzMzIzNGFiYjVlZmRkNGEyOTJjYmZhZDMzYjRkMzNmYTdhMTRiOGMzOTdiNTZlM2FjZDIxMjAzNDI4Yjc3Y2RmYTMzYTZkYTcwNmIzZDhiMGZjNDNlOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI0NjUzYWNhZjE3MTk2MGIwMWY1MmE3YmU2M2EzYWIyMWRjMzY4ZWM0M2I1MGQ4MmVjMzc4MWUwNCI6ImI0MjkxZDY1Njc1NTA4NDhjYzE1Njk2N2M4MDliYWFiNmNhNTA3ZjAiOiIwMjRkYjg5Yzc4MDI5ODliZTA3ODM4NDc4NjMwODQ5NDFiZjIwOWQ3NjE5ODdlMzhmOTdjYjVmNmYxYmM4OGRhNzJhNTBiNzNlYmFmMTFjODc5YzRmOTVkZjM3Yjg1MGI4ZjY1ZDc2MjJlMjViMWI4ODllODBmZTgwYmFjYTIwNjlkNmUwZTFkODI5OTUzZmM0NTkwNjlkZTk4ZWE5Nzk4YjQ1MWU1NTdlOTlhYmY4ZmUzZDljY2Y5MDk2ZWJiZjNlNTI1NWQzYjRlMWM2ZDJlY2FkZjA2N2EzNTllZWE4NjQwNWFjZDQ3ZDVlMTY1NTE3Y2NhZmQ0N2Q2ZGJlZTRiZjUiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgM18zCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNjoxNjoiMDJiNThmZWMwMzlhODYwNzAwYTRkN2I2NDYyZjkzZTZjZGQ0OTExNjFkZGQ3NGY0ZTgxMGI0MGUzYzE2NTIwMDZhNWMyNzdiMjc3NGMxMTMwNWE0Y2JhYjVhNzhlZmE1N2UxN2E4NmRmN2EzZmEzNmZjNGIxZDIyNDlmMjJlYzdjMmRkNmE0NjMyMzJhY2NlYTkwNmQ2NmViZTgwYjU3MDRiMTA3MjlkYTZmODMzMjM0YWJiNWVmZGQ0YTI5MmNiZmFkMzNiNGQzM2ZhN2ExNGI4YzM5N2I1NmUzYWNkMjEyMDM0MjhiNzdjZGZhMzNhNmRhNzA2YjNkOGIwZmM0M2U5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImQ5NGNkMGUwOGZhNDA0ZWQ4OSI6ImNlODkyOGY2MDU5NTU4MjU0MDA4YmFkZDk3OTRmYWRjZDJmZDFmNjUiOiIwMjM5YmNlNjgxMDMyNDQxNTI4ODc3ZDZkMWM4YmIyOGFhM2JjOTdmMWRmNTg0NTYzNjE4OTk1Nzk3NjgzODQ0Y2E4NjY2NDczMmY0YmVkN2EwYWFiMDgzYWFhYmZiNzIzOGY1ODJlMzA5NThjMjAyNGU0NGU1NzA0M2I5Nzk1MGZkNTQzZGE5NzdjOTBjZGRlNTMzN2Q2MTg0NDJmOTllNjBkNzc4M2FiNTljZTZkZDlkNjljNDdhZDFlOTYyYmVjMjJkMDU4OTVjZmY4ZDNmNjRlZDUyNjFkOTJiMjY3ODUxMDM5MzQ4NDk5MGJhM2Y3ZjA2ODE4YWU2ZmZjZThhM2EiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgM180Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNjoxNjoiMDJiNThmZWMwMzlhODYwNzAwYTRkN2I2NDYyZjkzZTZjZGQ0OTExNjFkZGQ3NGY0ZTgxMGI0MGUzYzE2NTIwMDZhNWMyNzdiMjc3NGMxMTMwNWE0Y2JhYjVhNzhlZmE1N2UxN2E4NmRmN2EzZmEzNmZjNGIxZDIyNDlmMjJlYzdjMmRkNmE0NjMyMzJhY2NlYTkwNmQ2NmViZTgwYjU3MDRiMTA3MjlkYTZmODMzMjM0YWJiNWVmZGQ0YTI5MmNiZmFkMzNiNGQzM2ZhN2ExNGI4YzM5N2I1NmUzYWNkMjEyMDM0MjhiNzdjZGZhMzNhNmRhNzA2YjNkOGIwZmM0M2U5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjZjYzY0MWI2YjYxZTZmOTYzOTc0ZGFkMjNhOTAxMzI4NGVmMSI6IjZlMjk3OWY1MmQ2ODE0YTU3ZDgzYjA5MDA1NDg4OGYxMTlhNWI5YTMiOiIwMjk5NGM2MmFmZDc2ZjQ5OGJhMWZkMmNmNjQyODU3ZmNhODFmNDM3M2NiMDhmMWNiYWVlNmYwMjVjM2I1MTJiNDJjM2U4Nzc5MTEzNDc2NjQ4MDM5ZGJlMDQ5M2Y5MjQ2MjkyZmFjMjg5NTA2MDBlN2MwZjMyZWRmOWM4MWI5ZGVjNDVjM2JkZTBjYzhkODg0NzU5MDE2OTkwN2I3ZGM1OTkxY2ViMjliYjA3MTRkNjEzZDk2ZGYwZjEyZWM1ZDhkMzUwN2M4ZWU3YWU3OGRkODNmMjE2ZmE2MWRlMTAwMzYzYWNhNDhhN2U5MTRhZTlmNDJkZGZiZTk0M2IwOWQ5YTAiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgM181Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNjoxNjoiMDJiNThmZWMwMzlhODYwNzAwYTRkN2I2NDYyZjkzZTZjZGQ0OTExNjFkZGQ3NGY0ZTgxMGI0MGUzYzE2NTIwMDZhNWMyNzdiMjc3NGMxMTMwNWE0Y2JhYjVhNzhlZmE1N2UxN2E4NmRmN2EzZmEzNmZjNGIxZDIyNDlmMjJlYzdjMmRkNmE0NjMyMzJhY2NlYTkwNmQ2NmViZTgwYjU3MDRiMTA3MjlkYTZmODMzMjM0YWJiNWVmZGQ0YTI5MmNiZmFkMzNiNGQzM2ZhN2ExNGI4YzM5N2I1NmUzYWNkMjEyMDM0MjhiNzdjZGZhMzNhNmRhNzA2YjNkOGIwZmM0M2U5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImRmNTE1MTgzMmI2MWY0ZjI1ODkxZmI0MTcyZjMyOGQyZWRkZjgzNzFmZmNmZGJlOTk3OTM5Mjk1ZjMwZWNhNjkxODAxN2NmZGExMTUzYmY3YTZhZjg3NTkzMjIzIjoiMmQ3NjBiZmUzOGM1OWRlMzRjZGM4YjhjNzhhMzhlNjYyODRhMmQyNyI6IjAxNjIwNDJmZjY5Njk1OTJhNjE2NzAzMTgxMWEyMzk4MzRjZTYzOGFiZjU0ZmVjOGI5OTQ3ODEyMmFmZTJlZTY3ZjhjNWIxOGIwMzM5ODA1YmZkYmM1YTRlNjcyMGIzN2M1OWNmYmE5NDI0NjRjNTk3ZmY1MzJhMTE5ODIxNTQ1ZmQyZTU5YjExNGU2MWRhZjcxODIwNTI5ZjUwMjljZjUyNDk1NDMyN2MzNGVjNWU2ZjViYTdlZmNjNGRlOTQzYWI4YWQ0ZWQ3ODdiMTQ1NDMyOWY3MGRiNzk4YTNhOGY0ZDkyZjgyNzRlMmIyOTQ4YWRlNjI3Y2U4ZWUzM2U0M2M2MCI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSAzXzYKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI2OjE2OiIwMmI1OGZlYzAzOWE4NjA3MDBhNGQ3YjY0NjJmOTNlNmNkZDQ5MTE2MWRkZDc0ZjRlODEwYjQwZTNjMTY1MjAwNmE1YzI3N2IyNzc0YzExMzA1YTRjYmFiNWE3OGVmYTU3ZTE3YTg2ZGY3YTNmYTM2ZmM0YjFkMjI0OWYyMmVjN2MyZGQ2YTQ2MzIzMmFjY2VhOTA2ZDY2ZWJlODBiNTcwNGIxMDcyOWRhNmY4MzMyMzRhYmI1ZWZkZDRhMjkyY2JmYWQzM2I0ZDMzZmE3YTE0YjhjMzk3YjU2ZTNhY2QyMTIwMzQyOGI3N2NkZmEzM2E2ZGE3MDZiM2Q4YjBmYzQzZTkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiM2MzYmFkODkzYzU0NGE2ZDUyMGFiMDIyMzE5MTg4YzhkNTA0YjdhNzg4Yjg1MDkwM2I4NTk3MmVhYTE4NTUyZTExMzRhN2FkNjA5ODgyNjI1NGZmN2FiNjcyYjNkOGViMzE1OGZhYzZkNGNiYWVmMSI6ImYxNzQ3NzljNWZkM2NmZTAwN2JhZGNiN2EzNmM5YjU1YmZjZmJmMGUiOiIwMDExMjA1MWU3NWQwNjQ5NDNiYzQ0NzgwNzVlNDM0ODJmZDU5Y2VlMDY3OWRlNjg5M2VlYzNhOTQzZGFhNDkwYjk2OTFjOTNkZmMwNDY0YjY2MjNiOWYzZGJkM2U3MDA4MzI2NGYwMzRiMzc0Zjc0MTY0ZTFhMDA3NjM3MjVlNTc0NzQ0YmEwYjlkYjgzNDM0ZjMxZGY5NmY2ZTJhMjZmNmQ4ZWJhMzQ4YmQ0Njg2YzIyMzhhYzA3YzM3YWFjMzc4NWQxYzdlZWEyZjgxOWZkOTE0OTE3OThlZDhlOWNlZjVlNDNiNzgxYjBlMDI3NmUzN2M0M2ZmOTQ5MmQwMDU3MzAiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNF8xCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNzoxNjoiMDUxMjQwYjZjYzAwMDRmYTQ4ZDAxMzQ2NzFjMDc4YzdjOGRlYzNiM2UyZjI1YmMyNTY0NDY3MzM5ZGIzODg1M2QwNmI4NWVlYTViMmRlMzUzYmZmNDJhYzJlNDZiYzk3ZmFlNmFjOTYxOGRhOTUzN2E1YzhmNTUzYzFlMzU3NjI1OTkxZDYxMDhkY2Q3ODg1ZmIzYTI1NDEzZjUzZWZjYWQ5NDhjYjM1Y2Q5YjlhZTljMWM2NzYyNmQxMTNkNTdkZGU0YzViZWE3NmJiNWJiN2RlOTZjMDBkMDczNzJlOTY4NWE2ZDc1Y2Y5ZDIzOWZhMTQ4ZDcwOTMxYjVmM2ZiMDM5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjRhODY2MDk1MzRlZTQzNGE2Y2JjYTNmN2U5NjJlNzZkNDU1ZTMyNjRjMTlmNjA1ZjZlNWZmNjEzN2M2NWM1NmQ3ZmIzNDRjZDUyYmM5MzM3NGYzZDE2NmM5ZjBjNmY5YzUwNmJhZDE5MzMwOTcyZDIiOiIxY2FjMTljZTk5M2RlZjU1Zjk4MjAzZjY4NTI4OTZjOTVjY2NhMWYzIjoiMDRjY2UxOTYxNDg0NWUwOTQxNTJhM2ZlMThlNTRlMzMzMGM0NGU1ZWZiYzY0YWUxNjg4NmNiMTg2OTAxNGNjNTc4MWIxZjhmOWUwNDUzODRkMDExMmExMzVjYTBkMTJlOWM4OGE4ZTQwNjM0MTZkZWFhZTM4NDRmNjBkNmU5NmZlMTU1MTQ1ZjQ1MjViOWEzNDQzMWNhMzc2NjE4MGY3MGUxNWE1ZTVkOGU4YjFhNTE2ZmY4NzA2MDlmMTNmODk2OTM1Y2VkMTg4Mjc5YTU4ZWQxM2QwNzExNDI3N2Q3NWM2NTY4NjA3ZTBhYjA5MmZkODAzYTIyM2U0YThlZTBiMWE4IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDRfMgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjc6MTY6IjA1MTI0MGI2Y2MwMDA0ZmE0OGQwMTM0NjcxYzA3OGM3YzhkZWMzYjNlMmYyNWJjMjU2NDQ2NzMzOWRiMzg4NTNkMDZiODVlZWE1YjJkZTM1M2JmZjQyYWMyZTQ2YmM5N2ZhZTZhYzk2MThkYTk1MzdhNWM4ZjU1M2MxZTM1NzYyNTk5MWQ2MTA4ZGNkNzg4NWZiM2EyNTQxM2Y1M2VmY2FkOTQ4Y2IzNWNkOWI5YWU5YzFjNjc2MjZkMTEzZDU3ZGRlNGM1YmVhNzZiYjViYjdkZTk2YzAwZDA3MzcyZTk2ODVhNmQ3NWNmOWQyMzlmYTE0OGQ3MDkzMWI1ZjNmYjAzOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJiMGFkYzRmM2ZlMTFkYTU5Y2U5OTI3NzNkOTA1OTk0M2MwMzA0NjQ5N2VlOWQ5ZjlhMDZkZjExNjZkYjQ2ZDk4ZjU4ZDI3ZWMwNzRjMDJlZWU2Y2JlMjQ0OWM4YjlmYzUwODBjNWMzZjQ0MzMwOTI1MTJlYzQ2YWE3OTM3NDNjOCI6ImY1NDVkNTg5NzU4NWUzZGI3MWFhMGNiOGRhNzZjNTFkMDMyYWU5NjMiOiIwMDk3YjY5OGM2MTY1NjQ1YjMwMzQ4NmZiZjVhMmE0NDc5YzBlZTg1ODg5YjU0MWE2ZjBiODU4ZDZiNjU5N2IxM2I4NTRlYjRmODM5YWYwMzM5OWE4MGQ3OWJkYTY1NzhjODQxZjkwZDY0NTcxNWIyODBkMzcxNDM5OTJkZDE4NmM4MGI5NDliNzc1Y2FlOTczNzBlNGVjOTc0NDMxMzZjNmRhNDg0ZTk3MGZmZGIxMzIzYTIwODQ3ODIxZDNiMTgzODFkZTEzYmI0OWFhZWE2NjUzMGM0YTRiODI3MWYzZWFlMTcyY2QzNjZlMDdlNjYzNmYxMDE5ZDJhMjhhZWQxNWUiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNF8zCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNzoxNjoiMDUxMjQwYjZjYzAwMDRmYTQ4ZDAxMzQ2NzFjMDc4YzdjOGRlYzNiM2UyZjI1YmMyNTY0NDY3MzM5ZGIzODg1M2QwNmI4NWVlYTViMmRlMzUzYmZmNDJhYzJlNDZiYzk3ZmFlNmFjOTYxOGRhOTUzN2E1YzhmNTUzYzFlMzU3NjI1OTkxZDYxMDhkY2Q3ODg1ZmIzYTI1NDEzZjUzZWZjYWQ5NDhjYjM1Y2Q5YjlhZTljMWM2NzYyNmQxMTNkNTdkZGU0YzViZWE3NmJiNWJiN2RlOTZjMDBkMDczNzJlOTY4NWE2ZDc1Y2Y5ZDIzOWZhMTQ4ZDcwOTMxYjVmM2ZiMDM5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImJmNmQ0MmU3MDE3MDdiMWQwMjA2YjBjOGI0NWExYzcyNjQxZmYxMjg4OTIxOWE4MmJkZWE5NjViNWU3OWE5NmIwZDAxNjNlZDlkNTc4ZWM5YWRhMjBmMmZiY2YxZWEzYzQwODlkODM0MTliYTgxYjBjNjBmMzYwNmRhOTkiOiJhZDk5N2ZlZWY3MzBkNmVhN2JlNjBkMGRjNTJlNzJlYWNiZmRkMjc1IjoiMDMwMWY5MzVlOWM0N2FiY2I0OGFjYmJlMDk4OTVkOWY1OTcxYWYxNDgzOWRhNGZmOTU0MTdlZTQ1M2QxZmQ3NzMxOTA3MmJiNzI5N2UxYjU1ZDc1NjFjZDlkMWJiMjRjMWE5YTM3YzYxOTg2NDMwODI0MjgwNDg3OWQ4NmViZDAwMWRjZTUxODM5NzVlMTUwNjk4OWI3MGU1YTgzNDM0MTU0ZDVjYmZkNmEyNDc4N2U2MGViMGM2NThkMmFjMTkzMzAyZDExOTJjNmU2MjJkNGExMmFkNGI1MzkyM2JjYTI0NmRmMzFjNjM5NWUzNzcwMmM2YTc4YWUwODFmYjlkMDY1IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDRfNAorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjc6MTY6IjA1MTI0MGI2Y2MwMDA0ZmE0OGQwMTM0NjcxYzA3OGM3YzhkZWMzYjNlMmYyNWJjMjU2NDQ2NzMzOWRiMzg4NTNkMDZiODVlZWE1YjJkZTM1M2JmZjQyYWMyZTQ2YmM5N2ZhZTZhYzk2MThkYTk1MzdhNWM4ZjU1M2MxZTM1NzYyNTk5MWQ2MTA4ZGNkNzg4NWZiM2EyNTQxM2Y1M2VmY2FkOTQ4Y2IzNWNkOWI5YWU5YzFjNjc2MjZkMTEzZDU3ZGRlNGM1YmVhNzZiYjViYjdkZTk2YzAwZDA3MzcyZTk2ODVhNmQ3NWNmOWQyMzlmYTE0OGQ3MDkzMWI1ZjNmYjAzOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJmYjJlZjExMmY1ZTc2NmViOTQwMTkyOTc5MzQ3OTRmN2JlMmY2ZmMxYzU4ZSI6IjEzNjQ1NGRmNTczMGY3M2M4MDdhN2U0MGQ4YzFhMzEyYWM1YjlkZDMiOiIwMmQxMTBhZDMwYWZiNzI3YmViNjkxZGQwY2YxN2QwYWYxYTFlN2ZhMGNjMDQwZWMxYTRiYTI2YTQyYzU5ZDBhNzk2YTJlMjJjOGYzNTdjY2M5OGI2NTE5YWNlYjY4MmU5NDVlNjJjYjczNDYxNGE1Mjk0MDdjZDQ1MmJlZTNlNDRmZWNlODQyM2NjMTllNTU1NDhiOGI5OTRiODQ5YzdlY2RlNDkzM2U3NjAzN2UxZDBjZTQ0Mjc1YjA4NzEwYzY4ZTQzMDEzMGI5Mjk3MzBlZDc3ZTA5YjAxNTY0MmM1NTkzZjA0ZTRmZmI5NDEwNzk4MTAyYThlOTZmZmRmZTExZTQiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNF81Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNzoxNjoiMDUxMjQwYjZjYzAwMDRmYTQ4ZDAxMzQ2NzFjMDc4YzdjOGRlYzNiM2UyZjI1YmMyNTY0NDY3MzM5ZGIzODg1M2QwNmI4NWVlYTViMmRlMzUzYmZmNDJhYzJlNDZiYzk3ZmFlNmFjOTYxOGRhOTUzN2E1YzhmNTUzYzFlMzU3NjI1OTkxZDYxMDhkY2Q3ODg1ZmIzYTI1NDEzZjUzZWZjYWQ5NDhjYjM1Y2Q5YjlhZTljMWM2NzYyNmQxMTNkNTdkZGU0YzViZWE3NmJiNWJiN2RlOTZjMDBkMDczNzJlOTY4NWE2ZDc1Y2Y5ZDIzOWZhMTQ4ZDcwOTMxYjVmM2ZiMDM5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjI4Y2NkNDQ3YmI5ZTg1MTY2ZGFiYjllNWI3ZDFhZGFkYzRiOWQzOWYyMDRlOTZkNWU0NDBjZTlhZDkyOGJjMWMyMjg0IjoiYmNhODA1N2Y4MjRiMmVhMjU3ZjI4NjE0MDdlZWY2M2QzMzIwODY4MSI6IjAwZGJiOGE3NDM5ZDkwZWZkOTE5YTM3N2M1NGZhZThmZTExZWM1OGMzYjg1ODM2MmUyM2FkMWI4YTQ0MzEwNzk5MDY2Yjk5MzQ3YWE1MjU2OTFkMmFkYzU4ZDliMDZlMzRmMjg4YzE3MDM5MGM1ZjBlMTFjMGFhMzY0NTk1OWYxOGVlNzllOGYyYmU4ZDdhYzVjMjNkMDYxZjE4ZGQ3NGI4YzVmMmE1OGZjYjVlYjBjNTRmOTlmMDFhODMyNDc1NjgyOTI1MzY1ODMzNDA5NDhkN2E4Yzk3YzRhY2QxZTk4ZDFlMjlkYzMyMGU5N2EyNjA1MzJhOGFhN2E3NThhMWVjMiI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA0XzYKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI3OjE2OiIwNTEyNDBiNmNjMDAwNGZhNDhkMDEzNDY3MWMwNzhjN2M4ZGVjM2IzZTJmMjViYzI1NjQ0NjczMzlkYjM4ODUzZDA2Yjg1ZWVhNWIyZGUzNTNiZmY0MmFjMmU0NmJjOTdmYWU2YWM5NjE4ZGE5NTM3YTVjOGY1NTNjMWUzNTc2MjU5OTFkNjEwOGRjZDc4ODVmYjNhMjU0MTNmNTNlZmNhZDk0OGNiMzVjZDliOWFlOWMxYzY3NjI2ZDExM2Q1N2RkZTRjNWJlYTc2YmI1YmI3ZGU5NmMwMGQwNzM3MmU5Njg1YTZkNzVjZjlkMjM5ZmExNDhkNzA5MzFiNWYzZmIwMzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZjIyMjQyNzUxZWM2YjEiOiIyZTdlMWUxN2Y2NDdiNWRkZDAzM2UxNTQ3MmY5MGY2ODEyZjNhYzRlIjoiMDBhNWZmYTQ3NjhjOGJiZWNhZWUyZGI3N2U4ZjJlZWM5OTU5NTkzMzU0NTUyMDgzNWU1YmE3ZGI5NDkzZDNlMTdjZGRlZmU2YTVmNTY3NjI0NDcxOTA4ZGI0ZTJkODNhMGZiZWU2MDYwOGZjODQwNDk1MDNiMjIzNGEwN2RjODNiMjdiMjI4NDdhZDg5MjBmZjQyZjY3NGVmNzliNzYyODBiMDAyMzNkMmI1MWI4Y2IyNzAzYTlkNDJiZmJjODI1MGM5NmVjMzJjMDUxZTU3ZjFiNGJhNTI4ZGI4OWMzN2U0YzU0ZTI3ZTZlNjRhYzY5NjM1YWU4ODdkOTU0MTYxOWE5IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDVfMQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjg6MTY6IjBhYWRmM2Y5YzEyNWU1ZDg5MWYzMWFjNDQ4ZTk5M2RlZmU1ODBmODAyYjQ1ZjlkN2YyMmJhNTAyMWU5YzQ3NTc2YjVhMWU2ODAzMWJhOWRiNGU2ZGFiZTRkOTZhMWQ2ZjNkMjY3MjY4Y2ZmNDA4MDA1ZjExOGVmY2FkYjk5ODg4ZDFjMjM0NDY3MTY2YjJhMmI4NDlhMDVhODg5YzA2MGFjMGRhMGM1ZmFlOGI1NWYzMDliYTYyZTcwMzc0MmZhMDMyNmYyZDEwYjAxMTAyMTQ4OWZmNDk3NzcwMTkwZDg5NWZkMzlmNTIyOTNjMzllZmQ3M2E2OThiZGFiOWYxMGVkOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJhZjcxYTkwMWUzYTYxZDMxMzJmMGZjMWZkYjQ3NGY5ZWE2NTc5MjU3ZmZjMjRkMTY0MTcwMTQ1YjNkYmRlOCI6IjQ0YzkyZTI4M2Y3N2I5NDk5YzYwM2Q5NjM2NjBjODdkMmY5Mzk0NjEiOiIwMzYwNDZhNGE0N2Q5ZWQzYmE5YTg5MTM5YzEwNTAzOGViNzQ5MmIwNWE1ZDY4YmZkNTNhY2NmZjQ1OTdmN2E2ODY1MWI0N2I0YTQ2MjdkOTI3ZTQ4NWVlZDdiNDU2NjQyMGU4YjQwOTg3OWU1ZDYwNmVhZTI1MWQyMmE1ZGY3OTlmNzkyMGJmYzExN2I5OTI1NzJhNTNiMTI2MzE0NmJjZWEwMzM4NWNjNWU4NTNjOWExMDFjOGMzZTFiZGEzMWE1MTk4MDc0OTZjNmNiNWU1ZWZiNDA4ODIzYTM1MmI4ZmEwNjYxZmI2NjRlZmFkZDU5M2RlYjk5ZmZmNWVkMDAwZTUiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNV8yCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyODoxNjoiMGFhZGYzZjljMTI1ZTVkODkxZjMxYWM0NDhlOTkzZGVmZTU4MGY4MDJiNDVmOWQ3ZjIyYmE1MDIxZTljNDc1NzZiNWExZTY4MDMxYmE5ZGI0ZTZkYWJlNGQ5NmExZDZmM2QyNjcyNjhjZmY0MDgwMDVmMTE4ZWZjYWRiOTk4ODhkMWMyMzQ0NjcxNjZiMmEyYjg0OWEwNWE4ODljMDYwYWMwZGEwYzVmYWU4YjU1ZjMwOWJhNjJlNzAzNzQyZmEwMzI2ZjJkMTBiMDExMDIxNDg5ZmY0OTc3NzAxOTBkODk1ZmQzOWY1MjI5M2MzOWVmZDczYTY5OGJkYWI5ZjEwZWQ5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImEzYjg0NGEwODIzOWE4YWM0MTYwNWFmMTdhNmNmZGE0ZDM1MDEzNjU4NTkwM2E0MTdhNzkyNjg3NjA1MTlhNGI0YWMzMzAzZWM3M2YwZjg3Y2ZiMzIzOTkiOiJjYjI4ZjU4NjA2NTlmY2VlZTQ5YzNlZWFmY2U2MjVhNzA4MDNiZDMyIjoiMDNkNmViNjU0ZWRjZTYxNWJjNTlmNDU1MjY1ZWQ0ZTVhMTgyMjNjYmI5YmU0ZTQwNjliNDczODA0ZDVkZTk2ZjU0ZGNhYWE2MDNkMDQ5YzVkOTRhYTE0NzBkZmNkMjI1NDA2NmI3YzdiNjFmZjFmNmY2NzcwZTMyMTVjNTEzOTlmZDRlMzRlYzUwODJiYzQ4ZjA4OTg0MGFkMDQzNTRhZTY2ZGMwZjFiZDE4ZTQ2MWEzM2NjMTI1OGI0NDNhMjgzN2E2ZGYyNjc1OWFhMjMwMjMzNDk4NmY4NzM4MGM5Y2M5ZDUzYmU5Zjk5NjA1ZDJjOWE5N2RhN2IwOTE1YTRhN2FkIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDVfMworcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjg6MTY6IjBhYWRmM2Y5YzEyNWU1ZDg5MWYzMWFjNDQ4ZTk5M2RlZmU1ODBmODAyYjQ1ZjlkN2YyMmJhNTAyMWU5YzQ3NTc2YjVhMWU2ODAzMWJhOWRiNGU2ZGFiZTRkOTZhMWQ2ZjNkMjY3MjY4Y2ZmNDA4MDA1ZjExOGVmY2FkYjk5ODg4ZDFjMjM0NDY3MTY2YjJhMmI4NDlhMDVhODg5YzA2MGFjMGRhMGM1ZmFlOGI1NWYzMDliYTYyZTcwMzc0MmZhMDMyNmYyZDEwYjAxMTAyMTQ4OWZmNDk3NzcwMTkwZDg5NWZkMzlmNTIyOTNjMzllZmQ3M2E2OThiZGFiOWYxMGVkOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIzMDhiMGVjYmQyYzc2Y2I3N2ZjNmY3MGM1ZWRkMjMzZmQyZjIwOTI5ZDYyOWYwMjY5NTNiYjYyYThmNGEzYTMxNGJkZTE5NWRlODViNWY4MTZkYTJhYWIwNzRkMjZjYjZhY2RkZjMyM2FlM2I5YzY3OGFjM2NmMTJmYmRkZTciOiIyMjg1ZjQwZDc3MDQ4MmY5YTllZmEyYzcyY2IzYWM1NTcxNmRjMGNhIjoiMDc3MDk1MjE4MTY0OWY5ZjlmMDdmZjYyNmZmM2EyMmMzNWM0NjI0NDNkOTA1ZDQ1NmE5ZmQwYmZmNDNjYWMyY2E3YTlmNTU0ZTk0NzhiOWFjYzNhYzgzOGIwMjA0MGZmZDNlMTg0N2RlMmU0MjUzOTI5ZjlkZDllZTQwNDQzMjVhOWIwNWNhYmI4MDhiMmVlODQwZDM0ZTE1ZDEwNWEzZjFmN2IyNzY5NWExYTA3YTJkNzNmZTA4ZWNhYWEzYzljOWQ0ZDVhODlmZjg5MGQ1NDcyN2Q3YWU0MGMwZWMxYThkZDg2MTY1ZDhlZTJjNjM2ODE0MTAxNmE0OGI1NWI2OTY3IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDVfNAorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjg6MTY6IjBhYWRmM2Y5YzEyNWU1ZDg5MWYzMWFjNDQ4ZTk5M2RlZmU1ODBmODAyYjQ1ZjlkN2YyMmJhNTAyMWU5YzQ3NTc2YjVhMWU2ODAzMWJhOWRiNGU2ZGFiZTRkOTZhMWQ2ZjNkMjY3MjY4Y2ZmNDA4MDA1ZjExOGVmY2FkYjk5ODg4ZDFjMjM0NDY3MTY2YjJhMmI4NDlhMDVhODg5YzA2MGFjMGRhMGM1ZmFlOGI1NWYzMDliYTYyZTcwMzc0MmZhMDMyNmYyZDEwYjAxMTAyMTQ4OWZmNDk3NzcwMTkwZDg5NWZkMzlmNTIyOTNjMzllZmQ3M2E2OThiZGFiOWYxMGVkOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIxNWM1YjllZTExODUiOiI0OWZhNDVkM2E3OGRkMTBkZmQ1NzczOTlkMWViMDBhZjdlZWQ1NTEzIjoiMDgxMmI3Njc2OGViY2I2NDJkMDQwMjU4ZTVmNDQ0MWEwMTg1MjFiZDk2Njg3ZTZjNWU4OTlmY2Q2YzE3NTg4ZmY1OWE4MmNjOGFlMDNhNGI0NWIzMTI5OWFmMTc4OGMzMjlmN2RjZDI4NWY4Y2Y0Y2VkODI2MDZiOTc2MTI2NzFhNDViZWRjYTEzMzQ0MjE0NGQxNjE3ZDExNGY4MDI4NTdmMGY5ZDczOTc1MWM1N2EzZjllZTQwMDkxMmM2MWUyZTY5OTJiZTAzMWE0M2RkNDhmYTZiYTE0ZWVmN2M0MjJiNWVkYzRlN2FmYTA0ZmRkMzhmNDAyZDFjOGJiNzE5YWJmIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDVfNQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjg6MTY6IjBhYWRmM2Y5YzEyNWU1ZDg5MWYzMWFjNDQ4ZTk5M2RlZmU1ODBmODAyYjQ1ZjlkN2YyMmJhNTAyMWU5YzQ3NTc2YjVhMWU2ODAzMWJhOWRiNGU2ZGFiZTRkOTZhMWQ2ZjNkMjY3MjY4Y2ZmNDA4MDA1ZjExOGVmY2FkYjk5ODg4ZDFjMjM0NDY3MTY2YjJhMmI4NDlhMDVhODg5YzA2MGFjMGRhMGM1ZmFlOGI1NWYzMDliYTYyZTcwMzc0MmZhMDMyNmYyZDEwYjAxMTAyMTQ4OWZmNDk3NzcwMTkwZDg5NWZkMzlmNTIyOTNjMzllZmQ3M2E2OThiZGFiOWYxMGVkOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIyMTAyNmU2ODAwYzdmYTcyOGZjYWFiYTBkMTk2YWUyOGQ3YTJhYzRmZmQ4YWJjZTc5NGYwOTg1ZjYwYzhhNjczNzI3NzM2NWQzZmVhMTFkYjg5MjNhMjAyOWEiOiJmMDI4NzQxMzIzNGNjNTAzNDcyNGEwOTRjNDU4NmI4N2FmZjEzM2ZjIjoiMDdiNjBlMTRlYzk1NGJmZDI5ZTYwZDAwNDdlNzg5ZjUxZDU3MTg2YzYzNTg5OTAzMzA2NzkzY2VkM2Y2ODI0MWM3NDM1MjlhYmE2YTYzNzRmOTJlMTllMDE2M2VmYTMzNjk3ZTE5NmY3NjYxZGZhYWE0N2FhYzZiZGU1ZTUxZGViNTA3YzcyYzU4OWEyY2ExNjkzZDk2YjE0NjAzODEyNDliMmNkYjllYWM0NDc2OWYyNDg5YzVkM2QyZjk5ZjBlZTNjN2VlNWJmNjRhNWFjNzljNDJiZDQzM2YxNDliZThjYjU5NTQ4MzYxNjQwNTk1NTEzYzk3YWY3YmMyNTA5NzIzIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDVfNgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjg6MTY6IjBhYWRmM2Y5YzEyNWU1ZDg5MWYzMWFjNDQ4ZTk5M2RlZmU1ODBmODAyYjQ1ZjlkN2YyMmJhNTAyMWU5YzQ3NTc2YjVhMWU2ODAzMWJhOWRiNGU2ZGFiZTRkOTZhMWQ2ZjNkMjY3MjY4Y2ZmNDA4MDA1ZjExOGVmY2FkYjk5ODg4ZDFjMjM0NDY3MTY2YjJhMmI4NDlhMDVhODg5YzA2MGFjMGRhMGM1ZmFlOGI1NWYzMDliYTYyZTcwMzc0MmZhMDMyNmYyZDEwYjAxMTAyMTQ4OWZmNDk3NzcwMTkwZDg5NWZkMzlmNTIyOTNjMzllZmQ3M2E2OThiZGFiOWYxMGVkOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI1NDFlMzdiNjhiNmM4ODcyYjg0YzAyIjoiZDlmYmE0NWM5NmYyMWU2ZTI2ZDI5ZWIyY2RjYjY1ODViZTljYjM0MSI6IjA4YzM2ZDRkZGEzMzQyM2IyZWQ2ODMwZDg1ZjY0MTFiYTFkY2Y0NzBhMWZhZTBlYmVmZWU3YzA4OWYyNTZjZWY3NGNiOTZlYTY5YzM4ZjYwZjM5YWJlZTQ0MTI5YmNiNGM5MmRlN2Y3OTc2MjNiMjAwNzRlM2Q5YzI4OTk3MDFlZDkwNzFlMWVmYTBiZGQ4NGQ0YzNlNTEzMDMwMmQ4ZjAyNDBiYWJhNGI4NGE3MWNjMDMyZjIyMzVhNWZmMGZhZTI3N2MzZThmOTExMmJlZjQ0YzlhZTIwZDE3NWZjOWE0MDU4YmZjOTMwYmEzMWIwMmUyZTRmNDQ0NDgzNzEwZjI0YSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA2XzEKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI5OjE2OiIxMmIxN2Y2ZGFkMmVjZDE5ZmY0NmRjMTNmNzg2MGYwOWUwZTBjZmI2NzdiMzhhNTI1OTIzMDVjZWFmMDIyYzE2NmRiOTBkMDRhYzI5ZTMzZjdkZDEyZDlmYWY2NmUwODE2YmI2M2VhZDI2N2NjN2Q0NmMxN2MzN2JlMjE0YmNhMmEyMmQ3MjNhNjRlNDQ0MDc0MzZiNmZjOTY1NzI5YWVmYzI1NTRmMzc2Y2Q1ZGNlYTY4MjkzNzgwYTYyYmYzOWQwMDI5NDg1YTE2MGJiYjllNWRjMDk3MmQyMWE1MDRmNTJlNWVlMDI4YWE0MTYzMzJmNTEwYjJlOWNmZjVmNzIyYWYiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNDA0NmNhOGJhYTMzNDdjYTI3ZjQ5ZTBkODFmOWNjMWQ3MWJlOWJhNTE3ZDQiOiJkZDBmNmNmZTQxNWU4OGU1YTQ2OWE1MWZiYmE2ZGZkNDBhZGI0Mzg0IjoiMDYzMGVlYmNkMjg1NmMyNGY3OTg4MDZlNDFmOWU2NzM0NWVkYTljZWRhMzg2YWNjOWZhY2FlYTFlZWVkMDZhY2U1ODM3MDk3MThkOWQxNjlmYWRmNDE0ZDVjNzZmOTI5OTY4MzNlZjMwNWI3NWIxZTRiOTVmNjYyYTIwZmFlZGMzYmFlMGM0ODI3YThiZjhhODhlZGJkNTdlYzIwM2EyN2E4NDFmMDJlNDNhNjE1YmFiMWE4Y2FjMDcwMWRlMzRkZWJkZWY2MmEwODgwODliNTVlYzM2ZWE3NTIyZmQzZWM4ZDA2YjZhMDczZTZkZjgzMzE1M2JjMGFlZmQ5M2JkMWEzIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDZfMgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjk6MTY6IjEyYjE3ZjZkYWQyZWNkMTlmZjQ2ZGMxM2Y3ODYwZjA5ZTBlMGNmYjY3N2IzOGE1MjU5MjMwNWNlYWYwMjJjMTY2ZGI5MGQwNGFjMjllMzNmN2RkMTJkOWZhZjY2ZTA4MTZiYjYzZWFkMjY3Y2M3ZDQ2YzE3YzM3YmUyMTRiY2EyYTIyZDcyM2E2NGU0NDQwNzQzNmI2ZmM5NjU3MjlhZWZjMjU1NGYzNzZjZDVkY2VhNjgyOTM3ODBhNjJiZjM5ZDAwMjk0ODVhMTYwYmJiOWU1ZGMwOTcyZDIxYTUwNGY1MmU1ZWUwMjhhYTQxNjMzMmY1MTBiMmU5Y2ZmNWY3MjJhZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI1Y2M3MmM2MDIzMWRmMDNiM2Q0MGY5YjU3OTMxYmMzMTEwOWY5NzI1MjdmMjhiMTllNzQ4MGM3Mjg4Y2IzYzkyYjIyNTEyMjE0ZTRiZTZjOTE0NzkyZGRhYmRmNTdmYWE4YWE3IjoiOGQxNGJkOTQ2YTEzNTExNDhmNWNhZTJlZDlhMGM2NTNlODVlYmQ4NSI6IjBlYmMzNzM3NjE3M2E0ZmQyZjg5Y2M1NWMyY2E2MmIyNmIxMWQ1MWMzYzdjZTQ5ZTg4NDVmNzRlNzYwNzMxN2M0MzZiYzhkMjNiOTY2N2RmZWI5ZDA4NzIzNGI0N2JjNjgzNzE3NWFlNWMwNTU5ZjZiODFkN2QyMjQxNmQzZTUwZjRhYzUzM2Q4ZjA4MTJmMmRiOWU3OTFmZTljNzc1YWM4YjZhZDBmNTM1YWQ5Y2ViMjNhNGEwMjAxNGM1OGFiM2Y4ZDMxNjE0OTlhMjYwZjM5MzQ4ZTcxNGFlMmExZDM0NDMyMDhmZDhiNzIyY2NmZGZiMzkzZTk4MDExZjk5ZTYzZiI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA2XzMKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI5OjE2OiIxMmIxN2Y2ZGFkMmVjZDE5ZmY0NmRjMTNmNzg2MGYwOWUwZTBjZmI2NzdiMzhhNTI1OTIzMDVjZWFmMDIyYzE2NmRiOTBkMDRhYzI5ZTMzZjdkZDEyZDlmYWY2NmUwODE2YmI2M2VhZDI2N2NjN2Q0NmMxN2MzN2JlMjE0YmNhMmEyMmQ3MjNhNjRlNDQ0MDc0MzZiNmZjOTY1NzI5YWVmYzI1NTRmMzc2Y2Q1ZGNlYTY4MjkzNzgwYTYyYmYzOWQwMDI5NDg1YTE2MGJiYjllNWRjMDk3MmQyMWE1MDRmNTJlNWVlMDI4YWE0MTYzMzJmNTEwYjJlOWNmZjVmNzIyYWYiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiYjIwZTY1MTMwMzA5MmY0YmNjYjQzMDcwYzBmODZkMjMwNDkzNjJlZDk2NjQyZmM1NjMyYzI3ZGI0YTUyZTNkODMxZjJhYjA2OGIyM2IxNDk4NzljMDAyZjZiZjNmZWVlOTc1OTExMTI1NjJjIjoiNmMwNzViYzQ1NTIwZjE2NWMwYmY1ZWE0YzVkZjE5MWJjOWVmMGU0NCI6IjBhOThiZjEwOTM2MTkzOTQ0MzZjZjY4ZDhmMzhlMmYxNThmZGU4ZWE1NGYzNDM1ZjIzOWI4ZDA2YjgzMjE4NDQyMDI0NzZhZWVkOTYwMDk0OTI0ODBjZTNhOGQ3MDU0OThjNGM4YzY4ZjAxNTAxZGM4MWRiNjA4ZjYwMDg3MzUwYzhjM2IwYmQyZTllZjZhODE0NThiN2M4MDFiODlmMmU0ZmU5OWQ0OTAwYmE2YTRiNWU1YTk2ZDg2NWRjNjc2Yzc3NTU5Mjg3OTQxMzBkNjI4MGE4MTYwYTE5MGYyZGYzZWE3Y2Y5YWEwMjcxZDg4ZTllNjkwNWVjZjFjNTE1MmQ2NSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA2XzQKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI5OjE2OiIxMmIxN2Y2ZGFkMmVjZDE5ZmY0NmRjMTNmNzg2MGYwOWUwZTBjZmI2NzdiMzhhNTI1OTIzMDVjZWFmMDIyYzE2NmRiOTBkMDRhYzI5ZTMzZjdkZDEyZDlmYWY2NmUwODE2YmI2M2VhZDI2N2NjN2Q0NmMxN2MzN2JlMjE0YmNhMmEyMmQ3MjNhNjRlNDQ0MDc0MzZiNmZjOTY1NzI5YWVmYzI1NTRmMzc2Y2Q1ZGNlYTY4MjkzNzgwYTYyYmYzOWQwMDI5NDg1YTE2MGJiYjllNWRjMDk3MmQyMWE1MDRmNTJlNWVlMDI4YWE0MTYzMzJmNTEwYjJlOWNmZjVmNzIyYWYiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNjg0ZTMwMzhjNWMwNDFmNyI6IjNiYmMzYmQ2NjM3ZGZlMTI4NDY5MDEwMjliZjViMGMwNzEwMzQzOWMiOiIwMDhlN2E2N2NhY2ZiNWM0ZTI0YmVjN2RlZTE0OTExN2YxOTU5OGNlOGM0NTgwOGZlZjg4YzYwOGZmOWNkNmU2OTUyNjNiOWEzYzBhZDRiOGJhNGM5NTIzOGU5NmE4NDIyYjg1MzU2MjljOGQ1MzgyMzc0NDc5YWQxM2ZhMzk5NzRiMjQyZjlhNzU5ZWVhZjljODNhZDVhOGNhMTg5NDBhMDE2MmJhNzU1ODc2ZGYyNjNmNGJkNTBjNjUyNWM1NjA5MDI2N2MxZjBlMDljZTA4OTlhMGNmMzU5ZTg4MTIwYWJkOWJmODkzNDQ1YjNjYWU3N2QzNjA3MzU5YWU5YTUyZjgiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNl81Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyOToxNjoiMTJiMTdmNmRhZDJlY2QxOWZmNDZkYzEzZjc4NjBmMDllMGUwY2ZiNjc3YjM4YTUyNTkyMzA1Y2VhZjAyMmMxNjZkYjkwZDA0YWMyOWUzM2Y3ZGQxMmQ5ZmFmNjZlMDgxNmJiNjNlYWQyNjdjYzdkNDZjMTdjMzdiZTIxNGJjYTJhMjJkNzIzYTY0ZTQ0NDA3NDM2YjZmYzk2NTcyOWFlZmMyNTU0ZjM3NmNkNWRjZWE2ODI5Mzc4MGE2MmJmMzlkMDAyOTQ4NWExNjBiYmI5ZTVkYzA5NzJkMjFhNTA0ZjUyZTVlZTAyOGFhNDE2MzMyZjUxMGIyZTljZmY1ZjcyMmFmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjMyNDg4Y2IyNjJkMDQxZDZlNGRkMzVmOTg3YmYzY2E2OTZkYjFmMDZhYzI5YTQ0NjkzIjoiYjQ2YjQxODkzZThiZWYzMjZmNjc1OTM4M2E4MzA3MWRhZTdmY2FiYyI6IjAwMDAzNDc0NDE2YzdiNjhiZGY5NjFjMzg1NzM3OTQ0ZDdmMWY0MGNiMzk1MzQzYzY5M2NjMGI0ZmU2M2IzMWZlZGYxZWFlZWFjOWNjYzA2NzhiMzFkYzMyZTA5Nzc0ODk1MTRjNGYwOTA4NWY2Mjk4YTk2NTNmMDFhZWE0MDQ1ZmY1ODJlZTg4N2JlMjZhZTU3NWI3M2VlZjdmMzc3NDkyMWUzNzVhM2QxOWFkZGEwY2EzMWFhMTg0OTg4N2MxZjQyY2FjOTY3N2Y3YTJmNGU5MjNmNmU1YTg2OGIzOGMwODRlZjE4NzU5NGRjOWY3ZjA0OGZlYTJlMDI5NTUzODRhYiI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA2XzYKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI5OjE2OiIxMmIxN2Y2ZGFkMmVjZDE5ZmY0NmRjMTNmNzg2MGYwOWUwZTBjZmI2NzdiMzhhNTI1OTIzMDVjZWFmMDIyYzE2NmRiOTBkMDRhYzI5ZTMzZjdkZDEyZDlmYWY2NmUwODE2YmI2M2VhZDI2N2NjN2Q0NmMxN2MzN2JlMjE0YmNhMmEyMmQ3MjNhNjRlNDQ0MDc0MzZiNmZjOTY1NzI5YWVmYzI1NTRmMzc2Y2Q1ZGNlYTY4MjkzNzgwYTYyYmYzOWQwMDI5NDg1YTE2MGJiYjllNWRjMDk3MmQyMWE1MDRmNTJlNWVlMDI4YWE0MTYzMzJmNTEwYjJlOWNmZjVmNzIyYWYiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNTBiYTE0YmU4NDYyNzIwMjc5YzMwNmJhIjoiMGEyNDAzMzEyYTQxZTNkNTJmMDYwZmJjMTNhNjdkZTVjZjc2MDlhNyI6IjBhMDI2ZGRhNWZjODc4NWY3YmQ5YmY3NTMyN2I2M2U4NWUyYzBmZGVlNWRhZGI2NWViZGNhYzlhZTFkZTk1YzkyYzY3MmFiNDMzYWE3YThlNjljZTZhNmQ4ODk3ZmFjNGFjNGE1NGRlODQxYWU1ZTViYmNlNzY4Nzg3OWQ3OTYzNGNlYTdhMzA2ODQwNjVjNzE0ZDUyNDA5YjkyODI1NmJiZjUzZWFiY2Q1MjMxZWI3MjU5NTA0NTM3Mzk5YmQyOTE2NGI3MjZkMzNhNDZkYTcwMTM2MGE0MTY4YTA5MWNjYWI3MmQ0NGE2MmZlZDI0NmMwZmZlYTViMTM0OGFiNTQ3MCI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA3XzEKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDMwOjE2OiIzMTExNzlmMGJjZmM5YjlkM2NhMzE1ZDAwZWYzMGQ3YmRkM2EyY2ZhZTk5MTFiZmVkY2I5NDhiM2E0NzgyZDA3MzJiNmFiNDRhYTRiZjAzNzQxYTY0NGRjMDFiZWMzZTY5YjAxYTAzM2U2NzVkOGFjZDdjNDkyNWM2YjFhZWMzMTE5MDUxZGZkODk3NjJkMjE1ZDQ1NDc1ZmZjYjU5ZjkwODE0ODYyM2YzNzE3NzE1NmY2YWU4NmRkN2E3YzVmNDNkYzFlMWY5MDgyNTQwNThhMjg0YTVmMDZjMDAyMTc5M2E4N2YxYWM1ZmVmZjdkY2FlZTY5YzVlNTFhMzc4OWUzNzMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNDdhYWU5MDkiOiI0M2RkMDlhMDdmZjRjYWM3MWNhYTQ2MzJlZTVlMWMxZGFlZTRjZDhmIjoiMTY4OGU0Y2U3Nzk0YmJhNmNiNzAxNDE2OWVjZDU1OWNlZGUyYTMwYjU2YTUyYjY4ZDlmZTE4Y2YxOTczZWY5N2IyYTAzMTUzOTUxYzc1NWY2Mjk0YWE0OWFkYmRiNTU4NDVhYjY4NzVmYjM5ODZjOTNlY2Y5Mjc5NjI4NDBkMjgyZjllNTRjZThiNjkwZjdjMGNiOGJiZDczNDQwZDk1NzFkMWIxNmNkOTI2MGY5ZWFiNDc4M2NjNDgyZTUyMjNkYzYwOTczODcxNzgzZWMyN2IwYWUwZmQ0NzczMmNiYzI4NmExNzNmYzkyYjAwZmI0YmE2ODI0NjQ3Y2Q5M2M4NWMxIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDdfMgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMzA6MTY6IjMxMTE3OWYwYmNmYzliOWQzY2EzMTVkMDBlZjMwZDdiZGQzYTJjZmFlOTkxMWJmZWRjYjk0OGIzYTQ3ODJkMDczMmI2YWI0NGFhNGJmMDM3NDFhNjQ0ZGMwMWJlYzNlNjliMDFhMDMzZTY3NWQ4YWNkN2M0OTI1YzZiMWFlYzMxMTkwNTFkZmQ4OTc2MmQyMTVkNDU0NzVmZmNiNTlmOTA4MTQ4NjIzZjM3MTc3MTU2ZjZhZTg2ZGQ3YTdjNWY0M2RjMWUxZjkwODI1NDA1OGEyODRhNWYwNmMwMDIxNzkzYTg3ZjFhYzVmZWZmN2RjYWVlNjljNWU1MWEzNzg5ZTM3MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIxZDliMmUyMjIzZDliYzEzYmZiOWYxNjJjZTczNWRiNDhiYTdjNjhmNjgyMmEwYTFhN2I2YWUxNjU4MzRlNyI6IjNhOWMzY2VjN2I4NGY5YmQzYWRlY2JjNjczZWM5OWQ1NGIyMmJjOWIiOiIxMDUyZWQzOTdiMmUwMWUxZDBlZTFjNTBiZjI0MzYzZjk1ZTUwNGY0YTAzNDM0YTA4ZmQ4MjI1NzRlZDZiOTczNmVkYmI1ZjM5MGRiMTAzMjE0NzlhOGExMzkzNTBlMmJkNDk3N2MzNzc4ZWYzMzFmM2U3OGFlMTE4YjI2ODQ1MWYyMGEyZjAxZDQ3MWY1ZDUzYzU2NjkzNzE3MWIyZGJjMmQ0YmRlNDU5YTU3OTlmMDM3MmQ2NTc0MjM5YjIzMjNkMjQ1ZDBiYjgxYzI4NmI2M2M4OWEzNjEwMTczMzdlNDkwMmY4OGE0NjdmNGM3ZjI0NGJmZDVhYjQ2NDM3ZmYzYjYiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgN18zCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAzMDoxNjoiMzExMTc5ZjBiY2ZjOWI5ZDNjYTMxNWQwMGVmMzBkN2JkZDNhMmNmYWU5OTExYmZlZGNiOTQ4YjNhNDc4MmQwNzMyYjZhYjQ0YWE0YmYwMzc0MWE2NDRkYzAxYmVjM2U2OWIwMWEwMzNlNjc1ZDhhY2Q3YzQ5MjVjNmIxYWVjMzExOTA1MWRmZDg5NzYyZDIxNWQ0NTQ3NWZmY2I1OWY5MDgxNDg2MjNmMzcxNzcxNTZmNmFlODZkZDdhN2M1ZjQzZGMxZTFmOTA4MjU0MDU4YTI4NGE1ZjA2YzAwMjE3OTNhODdmMWFjNWZlZmY3ZGNhZWU2OWM1ZTUxYTM3ODllMzczIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImQ5NzZmYyI6Ijc2YTc1ZTViNjE1N2E1NTZjZjg4ODRiYjJlNDVjMjkzZGQ1NDVjZjUiOiIyMTU1Y2Q4NDNmZjI0YTRlZThiYWRiNzY5NDI2MDAyOGE0OTA4MTNiYThiMzY5YTRjYmYxMDZlYzE0OGU1Mjk4NzA3ZjU5NjViZTdkMTAxYzEwNDllYTg1ODRjMjRjZDYzNDU1YWQ5YzEwNGQ2ODYyODJkM2ZiODAzYTRjMTFjMWMyZTliOTFjNzE3ODgwMWQxYjY2NDBmMDAzZjU3MjhkZjAwN2I4YTRjY2M5MmJjZTA1ZTQxYTI3Mjc4ZDdjODUwMThjNTI0MTQzMTNhNTA3Nzc4OTAwMWQ0ZjAxOTEwYjcyYWFkMDVkMjIwYWExNGE1ODczM2E3NDg5YmM1NDU1NmIiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgN180Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAzMDoxNjoiMzExMTc5ZjBiY2ZjOWI5ZDNjYTMxNWQwMGVmMzBkN2JkZDNhMmNmYWU5OTExYmZlZGNiOTQ4YjNhNDc4MmQwNzMyYjZhYjQ0YWE0YmYwMzc0MWE2NDRkYzAxYmVjM2U2OWIwMWEwMzNlNjc1ZDhhY2Q3YzQ5MjVjNmIxYWVjMzExOTA1MWRmZDg5NzYyZDIxNWQ0NTQ3NWZmY2I1OWY5MDgxNDg2MjNmMzcxNzcxNTZmNmFlODZkZDdhN2M1ZjQzZGMxZTFmOTA4MjU0MDU4YTI4NGE1ZjA2YzAwMjE3OTNhODdmMWFjNWZlZmY3ZGNhZWU2OWM1ZTUxYTM3ODllMzczIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImQ0NzM4NjIzZGYyMjNhYTQzODQzZGY4NDY3NTM0YzQxZDAxM2UwYzgwM2M2MjRlMjYzNjY2YjIzOWJkZTQwYTVmMjlhZWI4ZGU3OWUzZGFhNjFkZDAzNzBmNDliZDRiMDEzODM0Yjk4MjEyYWVmNmIxYzVlZTM3M2IzY2IiOiI3ODY2MzE0YTZhZDZmMmIyNTBhMzU5NDFkYjI4ZjU4NjRiNTg1ODU5IjoiMGFiMTRjMzczYWViN2Q0MzI4ZDBhYWFkOGMwOTRkODhiOWViMDk4Yjk1ZjIxMDU0YTI5MDgyNTIyYmU3YzI3YTMxMjg3OGI2Mzc5MTdlM2Q4MTllNmMzYzU2OGRiNWQ4NDM4MDJiMDZkNTFkOWU5OGEyYmUwYmY0MGMwMzE0MjNiMDBlZGZiZmY4MzIwZWZiOTE3MWJkMjA0NDY1M2E0Y2I5YzUxMjJmNmM2NWU4M2NkYTJlYzNjMTI2MDI3YTljMWE1NmJhODc0ZDBmZWEyM2YzODBiODJjZjI0MGI4Y2Y1NDAwMDQ3NThjNGM3N2Q5MzQxNTdhNzRmM2ZjMTJiZmFjIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDdfNQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMzA6MTY6IjMxMTE3OWYwYmNmYzliOWQzY2EzMTVkMDBlZjMwZDdiZGQzYTJjZmFlOTkxMWJmZWRjYjk0OGIzYTQ3ODJkMDczMmI2YWI0NGFhNGJmMDM3NDFhNjQ0ZGMwMWJlYzNlNjliMDFhMDMzZTY3NWQ4YWNkN2M0OTI1YzZiMWFlYzMxMTkwNTFkZmQ4OTc2MmQyMTVkNDU0NzVmZmNiNTlmOTA4MTQ4NjIzZjM3MTc3MTU2ZjZhZTg2ZGQ3YTdjNWY0M2RjMWUxZjkwODI1NDA1OGEyODRhNWYwNmMwMDIxNzkzYTg3ZjFhYzVmZWZmN2RjYWVlNjljNWU1MWEzNzg5ZTM3MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJiYjQ3MjMxY2E1ZWExZDNhZDQ2Yzk5MzQ1ZDlhOGE2MSI6ImIyMTY2ZWQ0NzJkNThkYjEwY2FiMmM2YjAwMGNjY2YxMGE3ZGM1MDkiOiIwMjgzODdhMzE4Mjc3NDM0Nzk4YjRkOTdmNDYwMDY4ZGY1Mjk4ZmFiYTUwNDFiYTExNzYxYTFjYjczMTZiMjQxODQxMTRlYzUwMDI1N2UyNTg5ZWQzYjYwN2ExZWJiZTk3YTZjYzJlMDJiZjFiNjgxZjQyMzEyYTMzYjdhNzdkOGU3ODU1YzRhNmRlMDNlM2MwNDY0M2Y3ODZiOTFhMjY0YTBkNjgwNWUyY2VhOTFlNjgxNzdlYjdhNjRkOTI1NWU0ZjI3ZTcxM2I3Y2NlYzAwZGMyMDBlYmQyMWMyZWEyYmI4OTBmZWFlNDk0MmRmOTQxZGMzZjk3ODkwZWQzNDc0NzgiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgN182Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAzMDoxNjoiMzExMTc5ZjBiY2ZjOWI5ZDNjYTMxNWQwMGVmMzBkN2JkZDNhMmNmYWU5OTExYmZlZGNiOTQ4YjNhNDc4MmQwNzMyYjZhYjQ0YWE0YmYwMzc0MWE2NDRkYzAxYmVjM2U2OWIwMWEwMzNlNjc1ZDhhY2Q3YzQ5MjVjNmIxYWVjMzExOTA1MWRmZDg5NzYyZDIxNWQ0NTQ3NWZmY2I1OWY5MDgxNDg2MjNmMzcxNzcxNTZmNmFlODZkZDdhN2M1ZjQzZGMxZTFmOTA4MjU0MDU4YTI4NGE1ZjA2YzAwMjE3OTNhODdmMWFjNWZlZmY3ZGNhZWU2OWM1ZTUxYTM3ODllMzczIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjIxODQ4MjcwOTVkMzVjM2Y4NmY2MDBlOGU1OTc1NDAxMzI5NiI6IjUyNjczYmRlMmNhMTY2YzJhYTQ2MTMxYWMxZGM4MDhkNjdkN2QzYjEiOiIxNGM2NzhhOTRhZDYwNTI1ZWYzOWU5NTliMmYzYmE1YzA5N2E5NGZmOTEyYjY3ZGJhY2U4MDUzNWMxODdhYmQ0N2QwNzU0MjBiMTg3MjE1MmJiYTA4ZjdmYzMxZjMxM2JiZjkyNzNjOTEyZmM0YzAxNDlhOWIwY2ZiNzk4MDdlMzQ2ZWIzMzIwNjk2MTFiZWMwZmY5YmNkMTY4ZjFmN2MzM2U3NzMxM2NlYTQ1NGI5NGUyNTQ5ZWVjZjAwMmUyYWNmN2Y2ZjJkMjg0NWQ0ZmUwYWFiMmU1YTkyZGRmNjhjNDgwYWUxMTI0NzkzNWQxZjYyNTc0ODQyMjE2YWU2NzQxMTUiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgOF8xCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAzMToxNjoiNWJkZjBlMzBkMzIxZGRhNTE0N2Y4ODI0MDhmYTY5MTk1NDgwZGY4ZjgwZDNmNmU4YmY1ODE4NTA0ZjM2NDI3Y2E5YjFmNTU0MGI5YzY1YThmNjk3NGNmODQ0N2EyNDRkOTI4MDIwMWJiNDlmY2JiZTYzNzhkMTk0NGNkMjI3ZTIzMGY5NmUzZDEwZjgxOWRjZWYyNzZjNjRhMDBiMmE0YjY3MDFlN2QwMWRlNWZhYmRlM2IxZTlhMGRmODJmNDYzMTM1OWNkMjI2Njk2NDdmYmIxNzE3MjQ2MTM0ZWQ3YjQ5N2NmZmZiZGM0MmI1OWM3M2E5NmVkOTAxNjYyMTJkZmY3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjA1MGI3NTVlNWU2ODgwZjdiOWU5ZDY5MmE3NGMzN2FhZTQ0OWIzMWJmZWE2ZGVmZjgzNzQ3YTg5N2Y2YzJjODI1YmIxYWRiZjg1MGEzYzk2OTk0YjVkZTViMzNjYmM3ZDRhMTc5MTNhNzk2NyI6Ijc3MDZmZmNhMWVjZmIxZWJlZTJhNTVlNWM2ZTI0Y2QyNzk3YTQxMjUiOiIwOWIzNjgzZDhhMmViMGZiMjk1YjYyZWQxZmI5MjkwYjcxNDQ1N2I3ODI1MzE5ZjQ2NDc4NzJhZjg4OWIzMDQwOTQ3MjAyMGFkMTI5MTJiZjE5YjExZDQ4MTlmNDk2MTQ4MjRmZmQ4NGQwOWMwYTE3ZTdkMTczMDlkMTI5MTk3OTA0MTBhYTI5OTU2OTlmNmE4NmRiZTMyNDJiNWFjYzIzYWY0NTY5MTA4MGQ2YjFhZTgxMGZiM2UzMDU3MDg3ZjA5NzAwOTJjZTAwYmU5NTYyZmY0MDUzYjYyNjJjZTBjYWE5M2UxMzcyM2QyZTNhNWJhMDc1ZDQ1ZjBkNjFiNTRiNjEiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgOF8yCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAzMToxNjoiNWJkZjBlMzBkMzIxZGRhNTE0N2Y4ODI0MDhmYTY5MTk1NDgwZGY4ZjgwZDNmNmU4YmY1ODE4NTA0ZjM2NDI3Y2E5YjFmNTU0MGI5YzY1YThmNjk3NGNmODQ0N2EyNDRkOTI4MDIwMWJiNDlmY2JiZTYzNzhkMTk0NGNkMjI3ZTIzMGY5NmUzZDEwZjgxOWRjZWYyNzZjNjRhMDBiMmE0YjY3MDFlN2QwMWRlNWZhYmRlM2IxZTlhMGRmODJmNDYzMTM1OWNkMjI2Njk2NDdmYmIxNzE3MjQ2MTM0ZWQ3YjQ5N2NmZmZiZGM0MmI1OWM3M2E5NmVkOTAxNjYyMTJkZmY3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjRlYjY4ZGNkOTNjYTliMTlkZjExMWJkNDM2MDhmNTU3MDI2ZmU0YWExZDVjZmFjMjI3YTNlYjVhYjk1NDhjMThhMDZkZGVkMjNmODE4MjU5ODZiMmZjZDcxMTA5ZWNlZjdlZmY4ODg3M2YwNzVjMmFhMGM0NjlmNjljOTJiYyI6ImEzNzE3ZGExNDNiNGRjZmZiYzc0MjY2NWE4ZmE5NTA1ODU1NDgzNDMiOiIyZWNmMTVjOTdjNWExNWIxNDc2YWU5ODZiMzcxYjU3YTI0Mjg0ZjRhMTYyYThkMGM4MTgyZTc5MDVlNzkyMjU2ZjE4MTJiYTVmODNmMWY3YTEzMGU0MmRjYzAyMjMyODQ0ZWRjMTRhMzFhNjhlZTk3YWU1NjRhMzgzYTM0MTE2NTY0MjRjNWY2MmRkYjY0NjA5M2MzNjdiZTFmY2RhNDI2Y2YwMGEwNmQ4YWNiN2U1Nzc3NmZiYmQ4NTVhYzNkZjUwNmZjMTZiMWQ3YzNmMjExMGYzZDgwNjhlOTFlMTg2MzYzODMxYzg0MDk2ODBkOGRhOWVjZDhjZjFmYTIwZWUzOWQiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgOF8zCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAzMToxNjoiNWJkZjBlMzBkMzIxZGRhNTE0N2Y4ODI0MDhmYTY5MTk1NDgwZGY4ZjgwZDNmNmU4YmY1ODE4NTA0ZjM2NDI3Y2E5YjFmNTU0MGI5YzY1YThmNjk3NGNmODQ0N2EyNDRkOTI4MDIwMWJiNDlmY2JiZTYzNzhkMTk0NGNkMjI3ZTIzMGY5NmUzZDEwZjgxOWRjZWYyNzZjNjRhMDBiMmE0YjY3MDFlN2QwMWRlNWZhYmRlM2IxZTlhMGRmODJmNDYzMTM1OWNkMjI2Njk2NDdmYmIxNzE3MjQ2MTM0ZWQ3YjQ5N2NmZmZiZGM0MmI1OWM3M2E5NmVkOTAxNjYyMTJkZmY3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6Ijg2MDRhYzU2MzI4YzFhYjVhZDkxNzg2MSI6ImVlMDYyMDkwNzNjY2EwMjZiYjI2NGU1MTg1YmY4YzY4Yjc3MzlmODYiOiI0YmM4OTEzMGE1YjJkYWJiN2MyZmNmOTBlYjVkMGVhZjllNjgxYjcxNDZhMzhmMzE3M2EzZDljZmVjNTJlYTllMGE0MTkzMmU2NDhhOWQ2OTM0NGM1MGRhNzYzZjUxYTAzYzk1NzYyMTMxZTgwNTIyNTRkY2QyMjQ4Y2JhNDBmZDMxNjY3Nzg2Y2UwNWEyYjdiNTMxYWM5ZGFjOWVkNTg0YTU5YjY3N2MxYThhZWQ4YzVkMTVkNjhjMDU1NjllMmJlNzgwYmY3ZGI2MzhmZDJiZmQyYTg1YWIyNzY4NjBmMzc3NzMzOGZjYTk4OWZmZDc0M2QxM2VlMDhlMGNhOTg5M2YiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgOF80Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAzMToxNjoiNWJkZjBlMzBkMzIxZGRhNTE0N2Y4ODI0MDhmYTY5MTk1NDgwZGY4ZjgwZDNmNmU4YmY1ODE4NTA0ZjM2NDI3Y2E5YjFmNTU0MGI5YzY1YThmNjk3NGNmODQ0N2EyNDRkOTI4MDIwMWJiNDlmY2JiZTYzNzhkMTk0NGNkMjI3ZTIzMGY5NmUzZDEwZjgxOWRjZWYyNzZjNjRhMDBiMmE0YjY3MDFlN2QwMWRlNWZhYmRlM2IxZTlhMGRmODJmNDYzMTM1OWNkMjI2Njk2NDdmYmIxNzE3MjQ2MTM0ZWQ3YjQ5N2NmZmZiZGM0MmI1OWM3M2E5NmVkOTAxNjYyMTJkZmY3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImZkZGE1ZmJmNmVjMzYxYTlkOWE0YWM2OGFmMjE2YTA2ODZmNDM4YjFlMGU1YzM2Yjk1NWY3NGUxMDdmMzljMGRkZGNjIjoiOTkwYWQ1NzNkYzQ4YTk3MzIzNWI2ZDgyNTQzNjE4ZjJlOTU1MTA1ZCI6IjJlNDU2ODQ3ZDhmYzM2ZmYwMTQ3ZDY5OTM1OTRiOTM5NzIyN2Q1Nzc3NTJjNzlkMGY5MDRmY2IwMzlkNGQ4MTJmZWE2MDVhN2I1NzRkZDgyY2E3ODZmOTM3NTIzNDg0MzhlZTlmNWI1NDU0OTg1ZDVmMGUxNjk5ZTNlN2FkMTc1YTMyZTE1ZjAzZGViMDQyYWI5ZmUxZGQ5ZGIxYmI4NmY4YzA4OWNjYjQ1ZTdlZjBjNWVlN2NhOWI3MjkwY2E2YjE1YmVkNDcwMzk3ODhhOGE5M2ZmODNlMGU4ZDYyNDRjNzEwMDYzNjJkZWVmNjliNmY0MTZmYjNjNjg0MzgzZmJkMCI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA4XzUKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDMxOjE2OiI1YmRmMGUzMGQzMjFkZGE1MTQ3Zjg4MjQwOGZhNjkxOTU0ODBkZjhmODBkM2Y2ZThiZjU4MTg1MDRmMzY0MjdjYTliMWY1NTQwYjljNjVhOGY2OTc0Y2Y4NDQ3YTI0NGQ5MjgwMjAxYmI0OWZjYmJlNjM3OGQxOTQ0Y2QyMjdlMjMwZjk2ZTNkMTBmODE5ZGNlZjI3NmM2NGEwMGIyYTRiNjcwMWU3ZDAxZGU1ZmFiZGUzYjFlOWEwZGY4MmY0NjMxMzU5Y2QyMjY2OTY0N2ZiYjE3MTcyNDYxMzRlZDdiNDk3Y2ZmZmJkYzQyYjU5YzczYTk2ZWQ5MDE2NjIxMmRmZjciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNGE1ZjQ5MTRiZWUyNWRlM2M2OTM0MWRlMDciOiJlY2M2M2IyOGYwNzU2ZjIyZjUyYWM4ZTZlYzEyNTFhNmVjMzA0NzE4IjoiMWZiOTM1NmZkNWM0YjE3OTZkYjJlYmY3ZDBkMzkzY2M4MTBhZGY2MTQ1ZGVmYzJmY2U3MTRmNzlkOTM4MDBkNWUyYWMyMTFlYThiYmVjY2E0YjY1NGI5NGMzYjE4YjMwZGQ1NzZjZTM0ZGM5NTQzNmVmNTdhMDk0MTU2NDU5MjMzNTlhNWQ3YjQxNzFlZjIyYzI0NjcwZjFiMjI5ZDM2MDNlOTFmNzY2NzFiN2RmOTdlNzMxN2M5NzczNDQ3NmQ1ZjNkMTdkMjFjZjgyYjViYTlmODNkZjJlNTg4ZDM2OTg0ZmQxYjU4NDQ2OGJkMjNiMmU4NzVmMzJmNjg5NTNmN2IyIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDhfNgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMzE6MTY6IjViZGYwZTMwZDMyMWRkYTUxNDdmODgyNDA4ZmE2OTE5NTQ4MGRmOGY4MGQzZjZlOGJmNTgxODUwNGYzNjQyN2NhOWIxZjU1NDBiOWM2NWE4ZjY5NzRjZjg0NDdhMjQ0ZDkyODAyMDFiYjQ5ZmNiYmU2Mzc4ZDE5NDRjZDIyN2UyMzBmOTZlM2QxMGY4MTlkY2VmMjc2YzY0YTAwYjJhNGI2NzAxZTdkMDFkZTVmYWJkZTNiMWU5YTBkZjgyZjQ2MzEzNTljZDIyNjY5NjQ3ZmJiMTcxNzI0NjEzNGVkN2I0OTdjZmZmYmRjNDJiNTljNzNhOTZlZDkwMTY2MjEyZGZmNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI4ZTA3ZDY2ZjdiODgwYTcyNTYzYWJjZDNmMzUwOTJiYzMzNDA5ZmI3Zjg4ZjI0NzJiZSI6IjM5MjVjNzFiMzYyZDQwYTBhNmRlNDIxNDU1NzliYTFlN2RkNDU5ZmMiOiIzYWZkOWM2NjAwMTQ3YjIxNzk4ZDgxOGM2NTVhMGY0YzkyMTJkYjI2ZDBiMGRmZGMyYTc1OTRjY2IzZDIyZjViZjFkN2MzZTExMmNkNzNmYzdkNTA5YzdhOGJhZmRkM2MyNzRkMTM5OTAwOWY5NjA5ZWM0YmU2NDc3ZTQ1M2YwNzVhYTMzZGIzODI4NzBjMWMzNDA5YWVmMzkyZDczODZhZTNhNjk2Yjk5YTk0YjRkYTA1ODk0NDdlOTU1ZDE2Yzk4YjE3NjAyYTU5YmQ3MzYyNzlmY2Q4ZmIyODBjNDQ2MmQ1OTBiZmE5YmYxM2ZlZDU3MGVhZmRlOTczMzBhMmMyMTAiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgOV8xCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTUzNjoxNjoiY2YyY2Q0MWUzNGNhM2E3MjhlYTVjYjhhZmY2NGMzNmQyN2JkZWY1MzY0ZTMzNmZkNjhkMzEyM2M1YTE5NmE4YzI4NzAxM2U4NTNkNTE1NmQ1OGQxNTE5NTQ1MjBmYjRmNmQ3YjE3YWJiNjgxNzc2NTkwOWM1NzYxMTk2NTlkOTAyYjE5MDZlZDhhMmIxMGMxNTVjMjRkMTI0NTI4ZGFiOWVlYWUzNzliZWFjNjZlNGE0MTE3ODZkY2I4ZmQwMDYyZWJjMDMwZGUxMjE5YTA0YzJhOGMxYjdkZDMxMzFlNGQ2YjZjYWVlMmUzMWE1ZWQ0MWFjMTUwOWIyZWYxZWUyYWIxODM2NGJlNTY4Y2E5NDFjMjVlY2M4NGZmOWQ2NDNiNWVjMWFhYWUxMDJhMjBkNzNmNDc5Yjc4MGZkNmRhOTEwNzUyMTJkOWVhYzAzYTA2NzRkODk5ZWJhMmU0MzFmNGM0NGI2MTViNmJhMjIzMmJkNGIzM2JhZWQ3M2Q2MjVkIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImY3MzVmZDU1YmE5MjU5MmMzYjUyYjhmOWM0ZjY5YWFhMWNiZWY4ZmU4OGFkZDA5NTU5NTQxMjQ2N2Y5Y2Y0ZWMwYjg5NmM1OWVkYTE2MjEwZTc1NDljOGFiYjEwY2RiYzIxYTEyZWM5YjZiNWI4ZmQyZjEwMzk5ZWI2IjoiOGVjOTY1ZjEzNGEzZWM5OTMxZTkyYTFjYTBkYzgxNjlkNWVhNzA1YyI6IjI2N2JjZDExOGFjYWIxZmM4YmE4MWM4NWQ3MzAwM2NiODYxMGZhNTVjMWQ5N2RhOGQ0OGE3YzdmMDY4OTZhNGRiNzUxYWEyODQyNTViOWQzNmFkNjVmMzc2NTNkODI5ZjFiMzdmOTdiODAwMTk0MjU0NWIyZmMyYzU1YTczNzZjYTdhMWJlNGIxNzYwYzhlMDVhMzNlNWFhMjUyNmI4ZDk4ZTMxNzA4OGU3ODM0Yzc1NWIyYTU5YjEyNjMxYTE4MmMwNWQ1ZDQzYWIxNzc5MjY0Zjg0NTZmNTE1Y2U1N2RmZGY1MTJkNTQ5M2RhYjdiNzMzOGRjNGI3ZDc4ZGI5YzA5MWFjM2JhZjUzN2E2OWZjN2Y1NDlkOTc5ZjBlZmY5YTk0ZmRhNDE2OWJkNGQxZDE5YTY5Yzk5ZTMzYzNiNTU0OTBkNTAxYjM5YjFlZGFlMTE4ZmY2NzkzYTE1MzI2MTU4NGQzYTVmMzlmNmU2ODJlM2QxN2M4Y2QxMjYxZmE3MiI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA5XzIKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxNTM2OjE2OiJjZjJjZDQxZTM0Y2EzYTcyOGVhNWNiOGFmZjY0YzM2ZDI3YmRlZjUzNjRlMzM2ZmQ2OGQzMTIzYzVhMTk2YThjMjg3MDEzZTg1M2Q1MTU2ZDU4ZDE1MTk1NDUyMGZiNGY2ZDdiMTdhYmI2ODE3NzY1OTA5YzU3NjExOTY1OWQ5MDJiMTkwNmVkOGEyYjEwYzE1NWMyNGQxMjQ1MjhkYWI5ZWVhZTM3OWJlYWM2NmU0YTQxMTc4NmRjYjhmZDAwNjJlYmMwMzBkZTEyMTlhMDRjMmE4YzFiN2RkMzEzMWU0ZDZiNmNhZWUyZTMxYTVlZDQxYWMxNTA5YjJlZjFlZTJhYjE4MzY0YmU1NjhjYTk0MWMyNWVjYzg0ZmY5ZDY0M2I1ZWMxYWFhZTEwMmEyMGQ3M2Y0NzliNzgwZmQ2ZGE5MTA3NTIxMmQ5ZWFjMDNhMDY3NGQ4OTllYmEyZTQzMWY0YzQ0YjYxNWI2YmEyMjMyYmQ0YjMzYmFlZDczZDYyNWQiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiODFiOTA2NjA1MDE1YTYzYWFiZTQyZGRmMTFlMTk3ODkxMmY1NDA0Yzc0NzRiMjZkY2UzZWQ0ODJiZjk2MWVjYzgxOGJmNDIwYzU0NjU5IjoiZWNiMWI4YjI1ZmE1MGNkYWIwOGU1NjA0Mjg2N2Y0YWY1ODI2ZDE2YyI6IjkzYWM5ZjA2NzFlYzI5YWNiYjQ0NGVmZmMxYTU3NDEzNTFkNjBmZGIwZTM5M2ZiZjc1NGFjZjBkZTQ5NzYxYTE0ODQxZGY3NzcyZTliYzgyNzczOTY2YTE1ODRjNGQ3MmJhZWEwMDExOGY4M2YzNWNjYTZlNTM3Y2JkNGQ4MTFmNTU4M2IyOTc4M2Q4YTZkOTRjZDMxYmU3MGQ2ZjUyNmMxMGZmMDljNmZhN2NlMDY5Nzk1YTNmY2QwNTExZmQ1ZmNiNTY0YmNjODBlYTljNzhmMzhiODAwMTI1MzlkOGE0ZGRmNmZlODFlOWNkZGI3ZjUwZGJiYmJjYzdlNWQ4NjA5N2NjZjRlYzQ5MTg5ZmI4YmYzMThiZTZkNWEwNzE1ZDUxNmI0OWFmMTkxMjU4Y2QzMmRjODMzY2U2ZWI0NjczYzAzYTE5YmJhY2U4OGNjNTQ4OTVmNjM2Y2MwYzFlYzg5MDk2ZDExY2UyMzVhMjY1Y2ExNzY0MjMyYTY4OWFlOCI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA5XzMKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxNTM2OjE2OiJjZjJjZDQxZTM0Y2EzYTcyOGVhNWNiOGFmZjY0YzM2ZDI3YmRlZjUzNjRlMzM2ZmQ2OGQzMTIzYzVhMTk2YThjMjg3MDEzZTg1M2Q1MTU2ZDU4ZDE1MTk1NDUyMGZiNGY2ZDdiMTdhYmI2ODE3NzY1OTA5YzU3NjExOTY1OWQ5MDJiMTkwNmVkOGEyYjEwYzE1NWMyNGQxMjQ1MjhkYWI5ZWVhZTM3OWJlYWM2NmU0YTQxMTc4NmRjYjhmZDAwNjJlYmMwMzBkZTEyMTlhMDRjMmE4YzFiN2RkMzEzMWU0ZDZiNmNhZWUyZTMxYTVlZDQxYWMxNTA5YjJlZjFlZTJhYjE4MzY0YmU1NjhjYTk0MWMyNWVjYzg0ZmY5ZDY0M2I1ZWMxYWFhZTEwMmEyMGQ3M2Y0NzliNzgwZmQ2ZGE5MTA3NTIxMmQ5ZWFjMDNhMDY3NGQ4OTllYmEyZTQzMWY0YzQ0YjYxNWI2YmEyMjMyYmQ0YjMzYmFlZDczZDYyNWQiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZmQzMjY0MjlkZjliODkwZTA5YjU0YjE4YjhmMzRmMWUyNCI6ImU4OWJiMDMyYzZjZTYyMmNiZGI1M2JjOTQ2NjAxNGVhNzdmNzc3YzAiOiI4MWViZGQ5NTA1NGIwYzgyMmVmOWFkNzY5M2Y1YTg3YWRmYjRiNGM0Y2U3MGRmMmRmODRlZDQ5YzA0ZGE1OGJhNWZjMjBhMTllMWE2ZThiN2EzOTAwYjIyNzk2ZGM0ZTg2OWVlNmI0Mjc5MmQxNWE4ZWNlYjU2YzA5YzY5OTE0ZTgxM2NlYThmNjkzMWU0YjhlZDZmNDIxYWYyOThkNTk1Yzk3ZjQ3ODljN2NhYTYxMmM3ZWYzNjA5ODRjMjFiOTNlZGM1NDAxMDY4YjVhZjRjNzhhODc3MWI5ODRkNTNiOGVhOGFkZjJmNmE3ZDRhMGJhNzZjNzVlMWRkOWY2NThmMjBkZWQ0YTQ2MDcxZDQ2ZDc3OTFiNTY4MDNkOGZlYTdmMGIwZjhlNDFhZTNmMDkzODNhNmY5NTg1ZmU3NzUzZWFhZmZkMmJmOTQ1NjMxMDhiZWVjYzIwN2JiYjUzNWY1ZmNjNzA1ZjBkZGU5ZjcwOGM2MmY0OWE5YzkwMzcxZDMiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgOV80Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTUzNjoxNjoiY2YyY2Q0MWUzNGNhM2E3MjhlYTVjYjhhZmY2NGMzNmQyN2JkZWY1MzY0ZTMzNmZkNjhkMzEyM2M1YTE5NmE4YzI4NzAxM2U4NTNkNTE1NmQ1OGQxNTE5NTQ1MjBmYjRmNmQ3YjE3YWJiNjgxNzc2NTkwOWM1NzYxMTk2NTlkOTAyYjE5MDZlZDhhMmIxMGMxNTVjMjRkMTI0NTI4ZGFiOWVlYWUzNzliZWFjNjZlNGE0MTE3ODZkY2I4ZmQwMDYyZWJjMDMwZGUxMjE5YTA0YzJhOGMxYjdkZDMxMzFlNGQ2YjZjYWVlMmUzMWE1ZWQ0MWFjMTUwOWIyZWYxZWUyYWIxODM2NGJlNTY4Y2E5NDFjMjVlY2M4NGZmOWQ2NDNiNWVjMWFhYWUxMDJhMjBkNzNmNDc5Yjc4MGZkNmRhOTEwNzUyMTJkOWVhYzAzYTA2NzRkODk5ZWJhMmU0MzFmNGM0NGI2MTViNmJhMjIzMmJkNGIzM2JhZWQ3M2Q2MjVkIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImYxNDU5YjVmMGM5MmYwMWEwZjcyM2EyZTU2NjI0ODRkOGY4YzBhMjBmYzI5ZGFkNmFjZDQzYmI1ZjNlZmZkZjRlMWI2M2UwN2ZkZmU2NjI4ZDBkNzRjYTE5YmYyZDY5ZTRhMGFiZjg2ZDI5MzkyNWE3OTY3NzJmODA4OGUiOiI2MDZmM2I5OWMwYjljY2Q3NzFlYWEyOWVhMGU0Yzg4NGYzMTg5Y2NjIjoiYmNjMzVmOTRjZGU2NmNiMTEzNjYyNWQ2MjViOTQ0MzJhMzViMjJmM2QyZmExMWE2MTNmZjBmY2E1YmQ1N2Y4N2I5MDJjY2RjMWNkMGFlYmNiMDcxNWVlODY5ZDFkMWZlMzk1ZjY3OTMwMDNmNWVjYTQ2NTA1OWM4ODY2MGQ0NDZmZjVmMDgxODU1MjAyMjU1N2UzOGMwOGE2N2VhZDk5MTI2MjI1NGYxMDY4Mjk3NWVjNTYzOTc3Njg1MzdmNDk3N2FmNmQ1ZjZhYWNlYjdmYjI1ZGVjNTkzNzIzMDIzMWZkODk3OGFmNDkxMTlhMjlmMjllNDI0YWI4MjcyYjQ3NTYyNzkyZDVjOTRmNzc0Yjg4MjlkMGIwZDlmMWE4YzllZGRmMzc1NzRkNWZhMjQ4ZWVmYTljNTI3MWZjNWVjMjU3OWM4MWJkZDYxYjQxMGZhNjFmZTM2ZTQyNDIyMWMxMTNhZGRiMjc1NjY0YzgwMWQzNGNhOGM2MzUxZTRhODU4IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDlfNQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjE1MzY6MTY6ImNmMmNkNDFlMzRjYTNhNzI4ZWE1Y2I4YWZmNjRjMzZkMjdiZGVmNTM2NGUzMzZmZDY4ZDMxMjNjNWExOTZhOGMyODcwMTNlODUzZDUxNTZkNThkMTUxOTU0NTIwZmI0ZjZkN2IxN2FiYjY4MTc3NjU5MDljNTc2MTE5NjU5ZDkwMmIxOTA2ZWQ4YTJiMTBjMTU1YzI0ZDEyNDUyOGRhYjllZWFlMzc5YmVhYzY2ZTRhNDExNzg2ZGNiOGZkMDA2MmViYzAzMGRlMTIxOWEwNGMyYThjMWI3ZGQzMTMxZTRkNmI2Y2FlZTJlMzFhNWVkNDFhYzE1MDliMmVmMWVlMmFiMTgzNjRiZTU2OGNhOTQxYzI1ZWNjODRmZjlkNjQzYjVlYzFhYWFlMTAyYTIwZDczZjQ3OWI3ODBmZDZkYTkxMDc1MjEyZDllYWMwM2EwNjc0ZDg5OWViYTJlNDMxZjRjNDRiNjE1YjZiYTIyMzJiZDRiMzNiYWVkNzNkNjI1ZCI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI1M2U2ZThjNzI5ZDZmOWMzMTlkZDMxN2U3NGIwZGI4ZTRjY2NhMjVmM2M4MzA1NzQ2ZTEzN2FjNjNhNjNlZjM3MzllN2I1OTVhYmI5NmU4ZDU1ZTU0ZjdiZDQxYWI0MzMzNzhmZmI5MTFkIjoiZmNiYzQyMTQwMmU5ZWNhYmM2MDgyYWZhNDBiYTVmMjY1MjJjODQwZSI6IjIzMmFmYmM5MjdmYTA4YzJmNmEyN2I4N2Q0YTVjYjA5YzA3ZGMyNmZhZTczZDczYTkwNTU4ODM5ZjRmZDY2ZDI4MWI4N2VjNzM0YmNlMjM3YmExNjY2OThlZDgyOTEwNmE3ZGU2OTQyY2Q2Y2RjZTc4ZmVkOGQyZTRkODE0MjhlNjY0OTBkMDM2MjY0Y2VmOTJhZjk0MWQzZTM1MDU1ZmUzOTgxZTE0ZDI5Y2JiOWE0ZjY3NDczMDYzYmFlYzc5YTExNzlmNWExN2M5YzE4MzJmMjgzOGZkN2Q1ZTU5YmI5NjU5ZDU2ZGNlOGEwMTllZGVmMWJiM2FjY2M2OTdjYzZjYzdhNzc4ZjYwYTA2NGM3ZjZmNWQ1MjljNjIxMDI2MmUwMDNkZTU4M2U4MWUzMTY3Yjg5OTcxZmI4YzBlMTVkNDRmZmZlZjg5YjUzZDhkNjRkZDc5N2QxNTliNTZkMmIwOGVhNTMwN2VhMTJjMjQxYmQ1OGQ0ZWUyNzhhMWYyZSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA5XzYKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxNTM2OjE2OiJjZjJjZDQxZTM0Y2EzYTcyOGVhNWNiOGFmZjY0YzM2ZDI3YmRlZjUzNjRlMzM2ZmQ2OGQzMTIzYzVhMTk2YThjMjg3MDEzZTg1M2Q1MTU2ZDU4ZDE1MTk1NDUyMGZiNGY2ZDdiMTdhYmI2ODE3NzY1OTA5YzU3NjExOTY1OWQ5MDJiMTkwNmVkOGEyYjEwYzE1NWMyNGQxMjQ1MjhkYWI5ZWVhZTM3OWJlYWM2NmU0YTQxMTc4NmRjYjhmZDAwNjJlYmMwMzBkZTEyMTlhMDRjMmE4YzFiN2RkMzEzMWU0ZDZiNmNhZWUyZTMxYTVlZDQxYWMxNTA5YjJlZjFlZTJhYjE4MzY0YmU1NjhjYTk0MWMyNWVjYzg0ZmY5ZDY0M2I1ZWMxYWFhZTEwMmEyMGQ3M2Y0NzliNzgwZmQ2ZGE5MTA3NTIxMmQ5ZWFjMDNhMDY3NGQ4OTllYmEyZTQzMWY0YzQ0YjYxNWI2YmEyMjMyYmQ0YjMzYmFlZDczZDYyNWQiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiYjZiMjhlYTIxOThkMGMxMDA4YmM2NCI6IjIzYWFkZTBlMWUwOGJiOWI5YTc4ZDIzMDJhNTJmOWMyMWIyZTFiYTIiOiI0MzhjYzdkYzA4YTY4ZGEyNDllNDI1MDVmODU3M2JhNjBlMmMyNzczZDViMjkwZjRjZjlkZmY3MThlODQyMDgxYzM4M2U2NzAyNGEwZjI5NTk0ZWE5ODdiOWQyNWU0YjczOGYyODU5NzBkMTk1YWJiM2E4YzgwNTRlM2Q3OWQ2YjljOWE4MzI3YmE1OTZmMTI1OWUyNzEyNjY3NDc2NjkwN2Q4ZDU4MmZmM2E4NDc2MTU0OTI5YWRiMWU2ZDEyMzViMmNjYjRlYzhmNjYzYmE5Y2M2NzBhOTJiZWJkODUzYzhkYmY2OWM2NDM2ZDAxNmY2MWFkZDgzNmU5NDczMjQ1MDQzNDIwN2Y5ZmQ0YzQzZGVjMmExMmE5NThlZmEwMWVmZTI2Njk4OTliNWU2MDRjMjU1YzU1ZmI3MTY2ZGU1NTg5ZTM2OTU5N2JiMDkxNjhjMDZkZDVkYjE3N2UwNmExNzQwZWIyZDVjODJmYWVjYTZkOTJmY2VlOTkzMWJhOWYiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgMTBfMQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjIwNDg6MTY6ImFlNDVlZDU2MDFjZWM2YjhjYzA1ZjgwMzkzNWM2NzRkZGJlMGQ3NWM0YzA5ZmQ3OTUxZmM2YjBjYWVjMzEzYThkZjM5OTcwYzUxOGJmZmJhNWVkNjhmM2YwZDdmMjJhNDAyOWQ0MTNmMWFlMDdlNGViZTllNDE3N2NlMjNlN2Y1NDA0YjU2OWU0ZWUxYmRjZjNjMWZiMDNlZjExMzgwMmQ0Zjg1NWViOWI1MTM0YjVhN2M4MDg1YWRjYWU2ZmEyZmExNDE3ZWMzNzYzYmUxNzFiMGM2MmI3NjBlZGUyM2MxMmFkOTJiOTgwODg0YzY0MWY1YThmYWMyNmJkYWQ0YTAzMzgxYTIyZmUxYjc1NDg4NTA5NGM4MjUwNmQ0MDE5YTUzNWEyODZhZmViMjcxYmI5YmE1OTJkZTE4ZGNmNjAwYzJhZWVhZTU2ZTAyZjdjZjc5ZmMxNGNmM2JkYzdjZDg0ZmViYmJmOTUwY2E5MDMwNGIyMjE5YTdhYTA2M2FlZmEyYzNjMTk4MGU1NjBjZDY0YWZlNzc5NTg1YjYxMDc2NTdiOTU3ODU3ZWZkZTYwMTA5ODhhYjdkZTQxN2ZjODhkOGYzODRjNGU2ZTcyYzNmOTQzZTBjMzFjMGM0YTVjYzM2Zjg3OWQ4YTNhYzlkN2Q1OTg2MGVhYWRhNmI4M2JiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjhiYmE2YmY4MmE2YzBmODZkNWYxNzU2ZTk3OTU2ODcwYjA4OTUzYjA2YjRlYjIwNWJjMTY5NGVlIjoiNDdlMWFiNzExOWZlZTU2Yzk1ZWU1ZWFhZDg2ZjQwZDBhYTYzYmQzMyI6IjUzZWE1ZGMwOGNkMjYwZmIzYjg1ODU2NzI4N2ZhOTE1NTJjMzBiMmZlYmZiYTIxM2YwYWU4NzcwMmQwNjhkMTliYWIwN2ZlNTc0NTIzZGZiNDIxMzlkNjhjM2M1YWZlZWUwYmZlNGNiNzk2OWNiZjM4MmI4MDRkNmU2MTM5NjE0NGUyZDBlNjA3NDFmODk5M2MzMDE0YjU4YjliMTk1N2E4YmFiY2QyM2FmODU0ZjRjMzU2ZmIxNjYyYWE3MmJmY2M3ZTU4NjU1OWRjNDI4MGQxNjBjMTI2Nzg1YTcyM2ViZWViZWZmNzFmMTE1OTQ0NDBhYWVmODdkMTA3OTNhODc3NGEyMzlkNGEwNGM4N2ZlMTQ2N2I5ZGFmODUyMDhlYzZjNzI1NTc5NGE5NmNjMjkxNDJmOWE4YmQ0MThlM2MxZmQ2NzM0NGIwY2QwODI5ZGYzYjJiZWM2MDI1MzE5NjI5M2M2YjM0ZDNmNzVkMzJmMjEzZGQ0NWM2MjczZDUwNWFkZjRjY2VkMTA1N2NiNzU4ZmMyNmFlZWZhNDQxMjU1ZWQ0ZTY0YzE5OWVlMDc1ZTdmMTY2NDYxODJmZGI0NjQ3MzliNjhhYjVkYWZmMGU2M2U5NTUyMDE2ODI0ZjA1NGJmNGQzYzhjOTBhOTdiYjZiNjU1MzI4NGViNDI5ZmNjIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDEwXzIKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoyMDQ4OjE2OiJhZTQ1ZWQ1NjAxY2VjNmI4Y2MwNWY4MDM5MzVjNjc0ZGRiZTBkNzVjNGMwOWZkNzk1MWZjNmIwY2FlYzMxM2E4ZGYzOTk3MGM1MThiZmZiYTVlZDY4ZjNmMGQ3ZjIyYTQwMjlkNDEzZjFhZTA3ZTRlYmU5ZTQxNzdjZTIzZTdmNTQwNGI1NjllNGVlMWJkY2YzYzFmYjAzZWYxMTM4MDJkNGY4NTVlYjliNTEzNGI1YTdjODA4NWFkY2FlNmZhMmZhMTQxN2VjMzc2M2JlMTcxYjBjNjJiNzYwZWRlMjNjMTJhZDkyYjk4MDg4NGM2NDFmNWE4ZmFjMjZiZGFkNGEwMzM4MWEyMmZlMWI3NTQ4ODUwOTRjODI1MDZkNDAxOWE1MzVhMjg2YWZlYjI3MWJiOWJhNTkyZGUxOGRjZjYwMGMyYWVlYWU1NmUwMmY3Y2Y3OWZjMTRjZjNiZGM3Y2Q4NGZlYmJiZjk1MGNhOTAzMDRiMjIxOWE3YWEwNjNhZWZhMmMzYzE5ODBlNTYwY2Q2NGFmZTc3OTU4NWI2MTA3NjU3Yjk1Nzg1N2VmZGU2MDEwOTg4YWI3ZGU0MTdmYzg4ZDhmMzg0YzRlNmU3MmMzZjk0M2UwYzMxYzBjNGE1Y2MzNmY4NzlkOGEzYWM5ZDdkNTk4NjBlYWFkYTZiODNiYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJlNmFkMTgxZjA1M2I1OGE5MDRmMjQ1NzUxMDM3M2U1NyI6IjZkMTdmNWI0YzFmZmFjMzUxZDE5NWJmN2IwOWQwOWYwOWE0MDc5Y2YiOiJhMmIxYTQzMGE5ZDY1N2UyZmExYzJiYjVlZDQzZmZiMjVjMDVhMzA4ZmU5MDkzYzAxMDMxNzk1ZjU4NzQ0MDAxMTA4MjhhZTU4ZmI5YjU4MWNlOWRkZGQzZTU0OWFlMDRhMDk4NTQ1OWJkZTZjNjI2NTk0ZTdiMDVkYzQyNzhiMmExNDY1YzEzNjg0MDg4MjNjODVlOTZkYzY2YzNhMzA5ODNjNjM5NjY0ZmM0NTY5YTM3ZmUyMWU1YTE5NWI1Nzc2ZWVkMmRmOGQ4ZDM2MWFmNjg2ZTc1MDIyOWJiZDY2M2YxNjE4NjhhNTA2MTVlMGMzMzdiZWMwY2EzNWZlYzBiYjE5YzM2ZWIyZTBiYmNjMDU4MmZhMWQ5M2FhY2RiMDYxMDYzZjU5ZjJjZTFlZTQzNjA1ZTVkODllY2ExODNkMmFjZGZlOWY4MTAxMTAyMmFkM2I0M2EzZGQ0MTdkYWM5NGI0ZTExZWE4MWIxOTI5NjZlOTY2YjE4MjA4MmU3MTk2NDYwN2I0ZjgwMDJmMzYyOTk4NDRhMTFmMmFlMGZhZWFjMmVhZTcwZjhmNGY5ODA4OGFjZGNkMGFjNTU2ZTlmY2NjNTExNTIxOTA4ZmFkMjZmMDRjNjQyMDE0NTAzMDU3Nzg3NThiMDUzOGJmOGI1YmIxNDRhODI4ZTYyOTc5NSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSAxMF8zCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MjA0ODoxNjoiYWU0NWVkNTYwMWNlYzZiOGNjMDVmODAzOTM1YzY3NGRkYmUwZDc1YzRjMDlmZDc5NTFmYzZiMGNhZWMzMTNhOGRmMzk5NzBjNTE4YmZmYmE1ZWQ2OGYzZjBkN2YyMmE0MDI5ZDQxM2YxYWUwN2U0ZWJlOWU0MTc3Y2UyM2U3ZjU0MDRiNTY5ZTRlZTFiZGNmM2MxZmIwM2VmMTEzODAyZDRmODU1ZWI5YjUxMzRiNWE3YzgwODVhZGNhZTZmYTJmYTE0MTdlYzM3NjNiZTE3MWIwYzYyYjc2MGVkZTIzYzEyYWQ5MmI5ODA4ODRjNjQxZjVhOGZhYzI2YmRhZDRhMDMzODFhMjJmZTFiNzU0ODg1MDk0YzgyNTA2ZDQwMTlhNTM1YTI4NmFmZWIyNzFiYjliYTU5MmRlMThkY2Y2MDBjMmFlZWFlNTZlMDJmN2NmNzlmYzE0Y2YzYmRjN2NkODRmZWJiYmY5NTBjYTkwMzA0YjIyMTlhN2FhMDYzYWVmYTJjM2MxOTgwZTU2MGNkNjRhZmU3Nzk1ODViNjEwNzY1N2I5NTc4NTdlZmRlNjAxMDk4OGFiN2RlNDE3ZmM4OGQ4ZjM4NGM0ZTZlNzJjM2Y5NDNlMGMzMWMwYzRhNWNjMzZmODc5ZDhhM2FjOWQ3ZDU5ODYwZWFhZGE2YjgzYmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNTEwYTJjZjYwZTg2NmZhMjM0MDU1M2M5NGVhMzlmYmMyNTYzMTFlODNlOTQ0NTRiNDEyNCI6IjM4NTM4NzUxNGRlY2NjN2M3NDBkZDhjZGY5ZGFlZTQ5YTFjYmZkNTQiOiI5ODg2YzNlNjc2NGE4YjlhODRlODQxNDhlYmQ4YzNiMWFhODA1MDM4MWE3OGY2Njg3MTRjMTZkOWNmZDJhNmVkYzU2OTc5YzUzNWQ5ZGVlM2I0NGI4NWMxOGJlODkyODk5MjM3MTcxMTQ3MjIxNmQ5NWRkYTk4ZDJlZTgzNDdjOWIxNGRmZmRmZjg0YWE0OGQyNWFjMDZmN2Q3ZTY1Mzk4YWM5NjdiMWNlOTA5MjVmNjdkY2UwNDliN2Y4MTJkYjA3NDI5OTdhNzRkNDRmZTgxZGJlMGU3YTNmZWFmMmU1YzQwYWY4ODhkNTUwZGRiYmUzYmMyMDY1N2EyOTU0M2Y4ZmMyOTEzYjliZDFhNjFiMmFiMjI1NmVjNDA5YmJkN2RjMGQxNzcxN2VhMjVjNDNmNDJlZDI3ZGY4NzM4YmY0YWZjNjc2NmZmN2FmZjA4NTk1NTVlZTI4MzkyMGY0YzhhNjNjNGE3MzQwY2JhZmRkYzMzOWVjZGI0YjA1MTUwMDJmOTZjOTMyYjViNzkxNjdhZjY5OWMwYWQzZmNjZmRmMGY0NGU4NWE3MDI2MmJmMmUxOGZlMzRiODUwNTg5OTc1ZTg2N2ZmOTY5ZDQ4ZWFiZjIxMjI3MTU0NmNkYzA1YTY5ZWNiNTI2ZTUyODcwYzgzNmYzMDdiZDc5ODc4MGVkZSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSAxMF80Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MjA0ODoxNjoiYWU0NWVkNTYwMWNlYzZiOGNjMDVmODAzOTM1YzY3NGRkYmUwZDc1YzRjMDlmZDc5NTFmYzZiMGNhZWMzMTNhOGRmMzk5NzBjNTE4YmZmYmE1ZWQ2OGYzZjBkN2YyMmE0MDI5ZDQxM2YxYWUwN2U0ZWJlOWU0MTc3Y2UyM2U3ZjU0MDRiNTY5ZTRlZTFiZGNmM2MxZmIwM2VmMTEzODAyZDRmODU1ZWI5YjUxMzRiNWE3YzgwODVhZGNhZTZmYTJmYTE0MTdlYzM3NjNiZTE3MWIwYzYyYjc2MGVkZTIzYzEyYWQ5MmI5ODA4ODRjNjQxZjVhOGZhYzI2YmRhZDRhMDMzODFhMjJmZTFiNzU0ODg1MDk0YzgyNTA2ZDQwMTlhNTM1YTI4NmFmZWIyNzFiYjliYTU5MmRlMThkY2Y2MDBjMmFlZWFlNTZlMDJmN2NmNzlmYzE0Y2YzYmRjN2NkODRmZWJiYmY5NTBjYTkwMzA0YjIyMTlhN2FhMDYzYWVmYTJjM2MxOTgwZTU2MGNkNjRhZmU3Nzk1ODViNjEwNzY1N2I5NTc4NTdlZmRlNjAxMDk4OGFiN2RlNDE3ZmM4OGQ4ZjM4NGM0ZTZlNzJjM2Y5NDNlMGMzMWMwYzRhNWNjMzZmODc5ZDhhM2FjOWQ3ZDU5ODYwZWFhZGE2YjgzYmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiYmNkZDE5MGRhM2I3ZDMwMGRmOWEwNmUyMmNhYWUyYTc1ZjEwYzkxZmY2NjdiN2MxNmJkZThiNTMwNjRhMjY0OWE5NDA0NWM5IjoiNWNhY2E2YTBmNzY0MTYxYTk2ODRmODVkOTJiNmUwZWYzN2NhOGI2NSI6IjYzMThlOWZiNWMwZDA1ZTUzMDdlMTY4MzQzNmU5MDMyOTNhYzQ2NDIzNThhYWEyMjNkNzE2MzAxM2FiYTg3ZTJkZmRhOGU2MGM2ODYwZTI5YTFlOTI2ODYxNjNlYTBiOTE3NWYzMjljYTNiMTMxYTFlZGQzYTc3NzU5YThiOTdiYWQ2YTRmOGY0Mzk2ZjI4Y2Y2ZjM5Y2E1ODExMmU0ODE2MGQ2ZTIwM2RhYTU4NTZmM2FjYTVmZmVkNTc3YWY0OTk0MDhlM2RmZDIzM2UzZTYwNGRiZTM0YTljNGM5MDgyZGU2NTUyN2NhYzYzMzFkMjlkYzgwZTA1MDhhMGZhNzEyMmU3ZjMyOWY2Y2NhNWNmYTM0ZDRkMWRhNDE3ODA1NDU3ZTAwOGJlYzU0OWU0NzhmZjllMTJhNzYzYzQ3N2QxNWJiYjc4ZjViNjliZDU3ODMwZmMyYzRlZDY4NmQ3OWJjNzJhOTVkODVmODgxMzRjNmIwYWZlNTZhOGNjZmJjODU1ODI4YmIzMzliZDE3OTA5Y2YxZDcwZGUzMzM1YWUwNzAzOTA5M2U2MDZkNjU1MzY1ZGU2NTUwYjg3MmNkNmRlMWQ0NDBlZTAzMWI2MTk0NWY2MjlhZDhhMzUzYjBkNDA5MzllOTZhM2M0NTBkMmE4ZDVlZWU5ZjY3ODA5M2M4IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDEwXzUKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoyMDQ4OjE2OiJhZTQ1ZWQ1NjAxY2VjNmI4Y2MwNWY4MDM5MzVjNjc0ZGRiZTBkNzVjNGMwOWZkNzk1MWZjNmIwY2FlYzMxM2E4ZGYzOTk3MGM1MThiZmZiYTVlZDY4ZjNmMGQ3ZjIyYTQwMjlkNDEzZjFhZTA3ZTRlYmU5ZTQxNzdjZTIzZTdmNTQwNGI1NjllNGVlMWJkY2YzYzFmYjAzZWYxMTM4MDJkNGY4NTVlYjliNTEzNGI1YTdjODA4NWFkY2FlNmZhMmZhMTQxN2VjMzc2M2JlMTcxYjBjNjJiNzYwZWRlMjNjMTJhZDkyYjk4MDg4NGM2NDFmNWE4ZmFjMjZiZGFkNGEwMzM4MWEyMmZlMWI3NTQ4ODUwOTRjODI1MDZkNDAxOWE1MzVhMjg2YWZlYjI3MWJiOWJhNTkyZGUxOGRjZjYwMGMyYWVlYWU1NmUwMmY3Y2Y3OWZjMTRjZjNiZGM3Y2Q4NGZlYmJiZjk1MGNhOTAzMDRiMjIxOWE3YWEwNjNhZWZhMmMzYzE5ODBlNTYwY2Q2NGFmZTc3OTU4NWI2MTA3NjU3Yjk1Nzg1N2VmZGU2MDEwOTg4YWI3ZGU0MTdmYzg4ZDhmMzg0YzRlNmU3MmMzZjk0M2UwYzMxYzBjNGE1Y2MzNmY4NzlkOGEzYWM5ZDdkNTk4NjBlYWFkYTZiODNiYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJhN2RkNmM3ZGMyNGI0NmY5ZGQ1ZjFlOTFhZGE0YzNiM2RmOTQ3ZTg3NzIzMmE5IjoiOTViY2E5ZTM4NTk4OTRiM2RkODY5ZmE3ZWNkNWJiYzY0MDFiZjNlNCI6Ijc1MjkwODcyY2NmZDRhNDUwNTY2MGQ2NTFmNTZkYTZkYWEwOWNhMTMwMWQ4OTA2MzJmNmE5OTJmM2Q1NjVjZWU0NjRhZmRlZDQwZWQzYjViZTkzNTY3MTRlYTVhYTc2NTVmNGExMzY2YzJmMTdjNzI4ZjZmMmM1YTVkMWY4ZTI4NDI5YmM0ZTZmOGYyY2ZmOGRhOGRjMGUwYTk4MDhlNDVmZDA5ZWEyZmE0MGNiMmI2Y2U2ZmZmZjVjMGUxNTlkMTFiNjhkOTBhODVmN2I4NGUxMDNiMDllNjgyNjY2NDgwYzY1NzUwNWMwOTI5MjU5NDY4YTMxNDc4NmQ3NGVhYjEzMTU3M2NmMjM0YmY1N2RiN2Q5ZTY2Y2M2NzQ4MTkyZTAwMmRjMGRlZWE5MzA1ODVmMDgzMWZkY2Q5YmMzM2Q1MWY3OWVkMmZmYzE2YmNmNGQ1OTgxMmZjZWJjYWEzZjkwNjliMGU0NDU2ODZkNjQ0YzI1Y2NmNjNiNDU2ZWU1ZmE2ZmZlOTZmMTljZGY3NTFmZWQ5ZWFmMzU5NTc3NTRkYmY0YmZlYTUyMTZhYTE4NDRkYzUwN2NiMmQwODBlNzIyZWJhMTUwMzA4YzJiNWZmMTE5MzYyMGYxNzY2ZWNmNDQ4MWJhZmI5NDNiZDI5Mjg3N2YyMTM2Y2E0OTRhYmEwIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDEwXzYKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoyMDQ4OjE2OiJhZTQ1ZWQ1NjAxY2VjNmI4Y2MwNWY4MDM5MzVjNjc0ZGRiZTBkNzVjNGMwOWZkNzk1MWZjNmIwY2FlYzMxM2E4ZGYzOTk3MGM1MThiZmZiYTVlZDY4ZjNmMGQ3ZjIyYTQwMjlkNDEzZjFhZTA3ZTRlYmU5ZTQxNzdjZTIzZTdmNTQwNGI1NjllNGVlMWJkY2YzYzFmYjAzZWYxMTM4MDJkNGY4NTVlYjliNTEzNGI1YTdjODA4NWFkY2FlNmZhMmZhMTQxN2VjMzc2M2JlMTcxYjBjNjJiNzYwZWRlMjNjMTJhZDkyYjk4MDg4NGM2NDFmNWE4ZmFjMjZiZGFkNGEwMzM4MWEyMmZlMWI3NTQ4ODUwOTRjODI1MDZkNDAxOWE1MzVhMjg2YWZlYjI3MWJiOWJhNTkyZGUxOGRjZjYwMGMyYWVlYWU1NmUwMmY3Y2Y3OWZjMTRjZjNiZGM3Y2Q4NGZlYmJiZjk1MGNhOTAzMDRiMjIxOWE3YWEwNjNhZWZhMmMzYzE5ODBlNTYwY2Q2NGFmZTc3OTU4NWI2MTA3NjU3Yjk1Nzg1N2VmZGU2MDEwOTg4YWI3ZGU0MTdmYzg4ZDhmMzg0YzRlNmU3MmMzZjk0M2UwYzMxYzBjNGE1Y2MzNmY4NzlkOGEzYWM5ZDdkNTk4NjBlYWFkYTZiODNiYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJlYWYxYTczYTFiMGM0NjA5NTM3ZGU2OWNkOTIyOGJiY2ZiOWE4Y2E4YzZjM2VmYWYwNTZmZTRhN2Y0NjM0ZWQwMGI3YzM5ZWM2OTIyZDdiOGVhMmMwNGViYWMiOiI5ZjQ3ZGRmNDJlOTdlZWE4NTZhOWJkYmM3MTRlYjNhYzIyZjZlYjMyIjoiMmQyMDdhNzM0MzJhOGZiNGMwMzA1MWIzZjczYjI4YTYxNzY0MDk4ZGZhMzRjNDdhMjA5OTVmODExNWFhNjgxNjY3OWI1NTdlODJkYmVlNTg0OTA4YzZlNjk3ODJkN2RlYjM0ZGJkNjVhZjA2M2Q1N2ZjYTc2YTVmZDA2OTQ5MmZkNjA2OGQ5OTg0ZDIwOTM1MDU2NWE2MmU1Yzc3ZjIzMDM4YzEyY2IxMGM2NjM0NzA5YjU0N2M0NmY2YjRhNzA5YmQ4NWNhMTIyZDc0NDY1ZWY5Nzc2MmMyOTc2M2UwNmRiYzdhOWU3MzhjNzhiZmNhMDEwMmRjNWU3OWQ2NWI5NzNmMjgyNDBjYWFiMmUxNjFhNzhiNTdkMjYyNDU3ZWQ4MTk1ZDUzZTNjN2FlOWRhMDIxODgzYzZkYjdjMjRhZmRkMjMyMmVhYzk3MmFkM2MzNTRjNWZjZWYxZTE0NmMzYTAyOTBmYjY3YWRmMDA3MDY2ZTAwNDI4ZDJjZWMxOGNlNThmOTMyODY5OGRlZmVmNGIyZWI1ZWM3NjkxOGZkZTFjMTk4Y2JiMzhiN2FmYzY3NjI2YTlhZWZlYzQzMjJiZmQ5MGQyNTYzNDgxYzlhMjIxZjc4YzgyNzJjODJkMWI2MmFiOTE0ZTFjNjlmNmFmNmVmMzBjYTUyNjBkYjRhNDYiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIEludAorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjQ6MTY6ImVlY2ZhZTgxYjFiOWIzYzkwODgxMGIxMGExYjU2MDAxOTllYjlmNDRhZWY0ZmRhNDkzYjgxYTllM2Q4NGY2MzIxMjRlZjAyMzZlNWQxZTNiN2UyOGZhZTdhYTA0MGEyZDViMjUyMTc2NDU5ZDFmMzk3NTQxYmEyYTU4ZmI2NTk5IjoxNjoiYzk3ZmIxZjAyN2Y0NTNmNjM0MTIzM2VhYWFkMWQ5MzUzZjZjNDJkMDg4NjZiMWQwNWEwZjIwMzUwMjhiOWQ4Njk4NDBiNDE2NjZiNDJlOTJlYTBkYTNiNDMyMDRiNWNmY2UzMzUyNTI0ZDA0MTZhNWE0NDFlNzAwYWY0NjE1MDMiOjE2OiJiYmY4MmYwOTA2ODJjZTljMjMzOGFjMmI5ZGE4NzFmNzM2OGQwN2VlZDQxMDQzYTQ0MGQ2YjZmMDc0NTRmNTFmYjhkZmJhYWYwMzVjMDJhYjYxZWE0OGNlZWI2ZmNkNDg3NmVkNTIwZDYwZTFlYzQ2MTk3MTlkOGE1YjhiODA3ZmFmYjhlMGEzZGZjNzM3NzIzZWU2YjRiN2Q5M2EyNTg0ZWU2YTY0OWQwNjA5NTM3NDg4MzRiMjQ1NDU5ODM5NGVlMGFhYjEyZDdiNjFhNTFmNTI3YTlhNDFmNmMxNjg3ZmUyNTM3Mjk4Y2EyYThmNTk0NmY4ZTVmZDA5MWRiZGNiIjoxNjoiMTEiOk1CRURUTFNfTURfU0hBMToiZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDkiOiJhYWZkMTJmNjU5Y2FlNjM0ODliNDc5ZTUwNzZkZGVjMmYwNmNiNThmIjoiMTI1M2UwNGRjMGE1Mzk3YmI0NGE3YWI4N2U5YmYyYTAzOWEzM2QxZTk5NmZjODJhOTRjY2QzMDA3NGM5NWRmNzYzNzIyMDE3MDY5ZTUyNjhkYTVkMWMwYjRmODcyY2Y2NTNjMTFkZjgyMzE0YTY3OTY4ZGZlYWUyOGRlZjA0YmI2ZDg0YjFjMzFkNjU0YTE5NzBlNTc4M2JkNmViOTZhMDI0YzJjYTJmNGE5MGZlOWYyZWY1YzljMTQwZTViYjQ4ZGE5NTM2YWQ4NzAwYzg0ZmM5MTMwYWRlYTc0ZTU1OGQ1MWE3NGRkZjg1ZDhiNTBkZTk2ODM4ZDYwNjNlMDk1NSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gVGVzdCBWZWN0b3IgMV8xCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNDoxNjoiZDMyNzM3ZTcyNjdmZmUxMzQxYjJkNWMwZDE1MGE4MWI1ODZmYjMxMzJiZWQyZjhkNTI2Mjg2NGE5Y2I5ZjMwYWYzOGJlNDQ4NTk4ZDQxM2ExNzJlZmI4MDJjMjFhY2YxYzExYzUyMGMyZjI2YTQ3MWRjYWQyMTJlYWM3Y2EzOWQiOjE2OiJjYzg4NTNkMWQ1NGRhNjMwZmFjMDA0ZjQ3MWYyODFjN2I4OTgyZDgyMjRhNDkwZWRiZWIzM2QzZTNkNWNjOTNjNDc2NTcwM2QxZGQ3OTE2NDJmMWYxMTZhMGRkODUyYmUyNDE5YjJhZjcyYmZlOWEwMzBlODYwYjAyODhiNWQ3NyI6MTY6ImE4YjNiMjg0YWY4ZWI1MGIzODcwMzRhODYwZjE0NmM0OTE5ZjMxODc2M2NkNmM1NTk4YzhhZTQ4MTFhMWUwYWJjNGM3ZTBiMDgyZDY5M2E1ZTdmY2VkNjc1Y2Y0NjY4NTEyNzcyYzBjYmM2NGE3NDJjNmM2MzBmNTMzYzhjYzcyZjYyYWU4MzNjNDBiZjI1ODQyZTk4NGJiNzhiZGJmOTdjMDEwN2Q1NWJkYjY2MmY1YzRlMGZhYjk4NDVjYjUxNDhlZjczOTJkZDNhYWZmOTNhZTFlNmI2NjdiYjNkNDI0NzYxNmQ0ZjViYTEwZDRjZmQyMjZkZTg4ZDM5ZjE2ZmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNjYyODE5NGUxMjA3M2RiMDNiYTk0Y2RhOWVmOTUzMjM5N2Q1MGRiYTc5Yjk4NzAwNGFmZWZlMzQiOiIxOGI3NzZlYTIxMDY5ZDY5Nzc2YTMzZTk2YmFkNDhlMWRkYTBhNWVmIjoiMzU0ZmU2N2I0YTEyNmQ1ZDM1ZmUzNmM3Nzc3OTFhM2Y3YmExM2RlZjQ4NGUyZDM5MDhhZmY3MjJmYWQ0NjhmYjIxNjk2ZGU5NWQwYmU5MTFjMmQzMTc0ZjhhZmNjMjAxMDM1ZjdiNmQ4ZTY5NDAyZGU1NDUxNjE4YzIxYTUzNWZhOWQ3YmZjNWI4ZGQ5ZmMyNDNmOGNmOTI3ZGIzMTMyMmQ2ZTg4MWVhYTkxYTk5NjE3MGU2NTdhMDVhMjY2NDI2ZDk4Yzg4MDAzZjg0NzdjMTIyNzA5NGEwZDlmYTFlOGM0MDI0MzA5Y2UxZWNjY2I1MjEwMDM1ZDQ3YWM3MmU4YSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gVGVzdCBWZWN0b3IgMV8yCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNDoxNjoiZDMyNzM3ZTcyNjdmZmUxMzQxYjJkNWMwZDE1MGE4MWI1ODZmYjMxMzJiZWQyZjhkNTI2Mjg2NGE5Y2I5ZjMwYWYzOGJlNDQ4NTk4ZDQxM2ExNzJlZmI4MDJjMjFhY2YxYzExYzUyMGMyZjI2YTQ3MWRjYWQyMTJlYWM3Y2EzOWQiOjE2OiJjYzg4NTNkMWQ1NGRhNjMwZmFjMDA0ZjQ3MWYyODFjN2I4OTgyZDgyMjRhNDkwZWRiZWIzM2QzZTNkNWNjOTNjNDc2NTcwM2QxZGQ3OTE2NDJmMWYxMTZhMGRkODUyYmUyNDE5YjJhZjcyYmZlOWEwMzBlODYwYjAyODhiNWQ3NyI6MTY6ImE4YjNiMjg0YWY4ZWI1MGIzODcwMzRhODYwZjE0NmM0OTE5ZjMxODc2M2NkNmM1NTk4YzhhZTQ4MTFhMWUwYWJjNGM3ZTBiMDgyZDY5M2E1ZTdmY2VkNjc1Y2Y0NjY4NTEyNzcyYzBjYmM2NGE3NDJjNmM2MzBmNTMzYzhjYzcyZjYyYWU4MzNjNDBiZjI1ODQyZTk4NGJiNzhiZGJmOTdjMDEwN2Q1NWJkYjY2MmY1YzRlMGZhYjk4NDVjYjUxNDhlZjczOTJkZDNhYWZmOTNhZTFlNmI2NjdiYjNkNDI0NzYxNmQ0ZjViYTEwZDRjZmQyMjZkZTg4ZDM5ZjE2ZmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNzUwYzQwNDdmNTQ3ZThlNDE0MTE4NTY1MjMyOThhYzliYWUyNDVlZmFmMTM5N2ZiZTU2ZjlkZDUiOiIwY2M3NDJjZTRhOWI3ZjMyZjk1MWJjYjI1MWVmZDkyNWZlNGZlMzVmIjoiNjQwZGIxYWNjNThlMDU2OGZlNTQwN2U1ZjliNzAxZGZmOGMzYzkxZTcxNmM1MzZmYzdmY2VjNmNiNWI3MWMxMTY1OTg4ZDRhMjc5ZTE1NzdkNzMwZmM3YTI5OTMyZTNmMDBjODE1MTUyMzZkOGQ4ZTMxMDE3YTdhMDlkZjQzNTJkOTA0Y2RlYjc5YWE1ODNhZGNjMzFlYTY5OGE0YzA1MjgzZGFiYTkwODliZTU0OTFmNjdjMWE0ZWU0OGRjNzRiYmJlNjY0M2FlZjg0NjY3OWI0Y2IzOTVhMzUyZDVlZDExNTkxMmRmNjk2ZmZlMDcwMjkzMjk0NmQ3MTQ5MmI0NCI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gVGVzdCBWZWN0b3IgMV8zCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNDoxNjoiZDMyNzM3ZTcyNjdmZmUxMzQxYjJkNWMwZDE1MGE4MWI1ODZmYjMxMzJiZWQyZjhkNTI2Mjg2NGE5Y2I5ZjMwYWYzOGJlNDQ4NTk4ZDQxM2ExNzJlZmI4MDJjMjFhY2YxYzExYzUyMGMyZjI2YTQ3MWRjYWQyMTJlYWM3Y2EzOWQiOjE2OiJjYzg4NTNkMWQ1NGRhNjMwZmFjMDA0ZjQ3MWYyODFjN2I4OTgyZDgyMjRhNDkwZWRiZWIzM2QzZTNkNWNjOTNjNDc2NTcwM2QxZGQ3OTE2NDJmMWYxMTZhMGRkODUyYmUyNDE5YjJhZjcyYmZlOWEwMzBlODYwYjAyODhiNWQ3NyI6MTY6ImE4YjNiMjg0YWY4ZWI1MGIzODcwMzRhODYwZjE0NmM0OTE5ZjMxODc2M2NkNmM1NTk4YzhhZTQ4MTFhMWUwYWJjNGM3ZTBiMDgyZDY5M2E1ZTdmY2VkNjc1Y2Y0NjY4NTEyNzcyYzBjYmM2NGE3NDJjNmM2MzBmNTMzYzhjYzcyZjYyYWU4MzNjNDBiZjI1ODQyZTk4NGJiNzhiZGJmOTdjMDEwN2Q1NWJkYjY2MmY1YzRlMGZhYjk4NDVjYjUxNDhlZjczOTJkZDNhYWZmOTNhZTFlNmI2NjdiYjNkNDI0NzYxNmQ0ZjViYTEwZDRjZmQyMjZkZTg4ZDM5ZjE2ZmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZDk0YWUwODMyZTY0NDVjZTQyMzMxY2IwNmQ1MzFhODJiMWRiNGJhYWQzMGY3NDZkYzkxNmRmMjRkNGUzYzI0NTFmZmY1OWE2NDIzZWIwZTFkMDJkNGZlNjQ2Y2Y2OTlkZmQ4MThjNmU5N2IwNTEiOiIyNTE0ZGY0Njk1NzU1YTY3YjI4OGVhZjQ5MDVjMzZlZWM2NmZkMmZkIjoiNDIzNzM2ZWQwMzVmNjAyNmFmMjc2YzM1YzBiMzc0MWIzNjVlNWY3NmNhMDkxYjRlOGMyOWUyZjBiZWZlZTYwMzU5NWFhODMyMmQ2MDJkMmU2MjVlOTVlYjgxYjJmMWM5NzI0ZTgyMmVjYTc2ZGI4NjE4Y2YwOWM1MzQzNTAzYTQzNjA4MzViNTkwM2JjNjM3ZTM4NzlmYjA1ZTBlZjMyNjg1ZDVhZWM1MDY3Y2Q3Y2M5NmZlNGIyNjcwYjZlYWMzMDY2YjFmY2Y1Njg2YjY4NTg5YWFmYjdkNjI5YjAyZDhmODYyNWNhMzgzMzYyNGQ0ODAwZmIwODFiMWNmOTRlYiI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gVGVzdCBWZWN0b3IgMV80Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNDoxNjoiZDMyNzM3ZTcyNjdmZmUxMzQxYjJkNWMwZDE1MGE4MWI1ODZmYjMxMzJiZWQyZjhkNTI2Mjg2NGE5Y2I5ZjMwYWYzOGJlNDQ4NTk4ZDQxM2ExNzJlZmI4MDJjMjFhY2YxYzExYzUyMGMyZjI2YTQ3MWRjYWQyMTJlYWM3Y2EzOWQiOjE2OiJjYzg4NTNkMWQ1NGRhNjMwZmFjMDA0ZjQ3MWYyODFjN2I4OTgyZDgyMjRhNDkwZWRiZWIzM2QzZTNkNWNjOTNjNDc2NTcwM2QxZGQ3OTE2NDJmMWYxMTZhMGRkODUyYmUyNDE5YjJhZjcyYmZlOWEwMzBlODYwYjAyODhiNWQ3NyI6MTY6ImE4YjNiMjg0YWY4ZWI1MGIzODcwMzRhODYwZjE0NmM0OTE5ZjMxODc2M2NkNmM1NTk4YzhhZTQ4MTFhMWUwYWJjNGM3ZTBiMDgyZDY5M2E1ZTdmY2VkNjc1Y2Y0NjY4NTEyNzcyYzBjYmM2NGE3NDJjNmM2MzBmNTMzYzhjYzcyZjYyYWU4MzNjNDBiZjI1ODQyZTk4NGJiNzhiZGJmOTdjMDEwN2Q1NWJkYjY2MmY1YzRlMGZhYjk4NDVjYjUxNDhlZjczOTJkZDNhYWZmOTNhZTFlNmI2NjdiYjNkNDI0NzYxNmQ0ZjViYTEwZDRjZmQyMjZkZTg4ZDM5ZjE2ZmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNTJlNjUwZDk4ZTdmMmEwNDhiNGY4Njg1MjE1M2I5N2UwMWRkMzE2ZjM0NmExOWY2N2E4NSI6ImM0NDM1YTNlMWExOGE2OGI2ODIwNDM2MjkwYTM3Y2VmYjg1ZGIzZmIiOiI0NWVhZDRjYTU1MWU2NjJjOTgwMGYxYWNhODI4M2IwNTI1ZTZhYmFlMzBiZTRiNGFiYTc2MmZhNDBmZDNkMzhlMjJhYmVmYzY5Nzk0ZjZlYmJiYzA1ZGRiYjExMjE2MjQ3ZDJmNDEyZmQwZmJhODdjNmUzYWNkODg4ODEzNjQ2ZmQwZTQ4ZTc4NTIwNGY5YzNmNzNkNmQ4MjM5NTYyNzIyZGRkZDg3NzFmZWM0OGI4M2EzMWVlNmY1OTJjNGNmZDRiYzg4MTc0ZjNiMTNhMTEyYWFlM2I5ZjdiODBlMGZjNmY3MjU1YmE4ODBkYzdkODAyMWUyMmFkNmE4NWYwNzU1IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBUZXN0IFZlY3RvciAxXzUKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI0OjE2OiJkMzI3MzdlNzI2N2ZmZTEzNDFiMmQ1YzBkMTUwYTgxYjU4NmZiMzEzMmJlZDJmOGQ1MjYyODY0YTljYjlmMzBhZjM4YmU0NDg1OThkNDEzYTE3MmVmYjgwMmMyMWFjZjFjMTFjNTIwYzJmMjZhNDcxZGNhZDIxMmVhYzdjYTM5ZCI6MTY6ImNjODg1M2QxZDU0ZGE2MzBmYWMwMDRmNDcxZjI4MWM3Yjg5ODJkODIyNGE0OTBlZGJlYjMzZDNlM2Q1Y2M5M2M0NzY1NzAzZDFkZDc5MTY0MmYxZjExNmEwZGQ4NTJiZTI0MTliMmFmNzJiZmU5YTAzMGU4NjBiMDI4OGI1ZDc3IjoxNjoiYThiM2IyODRhZjhlYjUwYjM4NzAzNGE4NjBmMTQ2YzQ5MTlmMzE4NzYzY2Q2YzU1OThjOGFlNDgxMWExZTBhYmM0YzdlMGIwODJkNjkzYTVlN2ZjZWQ2NzVjZjQ2Njg1MTI3NzJjMGNiYzY0YTc0MmM2YzYzMGY1MzNjOGNjNzJmNjJhZTgzM2M0MGJmMjU4NDJlOTg0YmI3OGJkYmY5N2MwMTA3ZDU1YmRiNjYyZjVjNGUwZmFiOTg0NWNiNTE0OGVmNzM5MmRkM2FhZmY5M2FlMWU2YjY2N2JiM2Q0MjQ3NjE2ZDRmNWJhMTBkNGNmZDIyNmRlODhkMzlmMTZmYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI4ZGE4OWZkOWU1Zjk3NGEyOWZlZmZiNDYyYjQ5MTgwZjZjZjllODAyIjoiYjMxOGM0MmRmM2JlMGY4M2ZlYTgyM2Y1YTdiNDdlZDVlNDI1YTNiNSI6IjM2ZjZlMzRkOTRhOGQzNGRhYWNiYTMzYTIxMzlkMDBhZDg1YTkzNDVhODYwNTFlNzMwNzE2MjAwNTZiOTIwZTIxOTAwNTg1NWEyMTNhMGYyMzg5N2NkY2Q3MzFiNDUyNTdjNzc3ZmU5MDgyMDJiZWZkZDBiNTgzODZiMTI0NGVhMGNmNTM5YTA1ZDVkMTAzMjlkYTQ0ZTEzMDMwZmQ3NjBkY2Q2NDRjZmVmMjA5NGQxOTEwZDNmNDMzZTFjN2M2ZGQxOGJjMWYyZGY3ZjY0M2Q2NjJmYjlkZDM3ZWFkOTA1OTE5MGY0ZmE2NmNhMzllODY5YzRlYjQ0OWNiZGM0MzkiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIDFfNgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjQ6MTY6ImQzMjczN2U3MjY3ZmZlMTM0MWIyZDVjMGQxNTBhODFiNTg2ZmIzMTMyYmVkMmY4ZDUyNjI4NjRhOWNiOWYzMGFmMzhiZTQ0ODU5OGQ0MTNhMTcyZWZiODAyYzIxYWNmMWMxMWM1MjBjMmYyNmE0NzFkY2FkMjEyZWFjN2NhMzlkIjoxNjoiY2M4ODUzZDFkNTRkYTYzMGZhYzAwNGY0NzFmMjgxYzdiODk4MmQ4MjI0YTQ5MGVkYmViMzNkM2UzZDVjYzkzYzQ3NjU3MDNkMWRkNzkxNjQyZjFmMTE2YTBkZDg1MmJlMjQxOWIyYWY3MmJmZTlhMDMwZTg2MGIwMjg4YjVkNzciOjE2OiJhOGIzYjI4NGFmOGViNTBiMzg3MDM0YTg2MGYxNDZjNDkxOWYzMTg3NjNjZDZjNTU5OGM4YWU0ODExYTFlMGFiYzRjN2UwYjA4MmQ2OTNhNWU3ZmNlZDY3NWNmNDY2ODUxMjc3MmMwY2JjNjRhNzQyYzZjNjMwZjUzM2M4Y2M3MmY2MmFlODMzYzQwYmYyNTg0MmU5ODRiYjc4YmRiZjk3YzAxMDdkNTViZGI2NjJmNWM0ZTBmYWI5ODQ1Y2I1MTQ4ZWY3MzkyZGQzYWFmZjkzYWUxZTZiNjY3YmIzZDQyNDc2MTZkNGY1YmExMGQ0Y2ZkMjI2ZGU4OGQzOWYxNmZiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjI2NTIxMDUwODQ0MjcxIjoiZTRlYzA5ODJjMjMzNmYzYTY3N2Y2YTM1NjE3NGViMGNlODg3YWJjMiI6IjQyY2VlMjYxN2IxZWNlYTRkYjNmNDgyOTM4NmZiZDYxZGFmYmYwMzhlMTgwZDgzN2M5NjM2NmRmMjRjMDk3YjRhYjBmYWM2YmRmNTkwZDgyMWM5ZjEwNjQyZTY4MWFkMDViOGQ3OGIzNzhjMGY0NmNlMmZhZDYzZjc0ZTBhZDNkZjA2YjA3NWQ3ZWI1ZjU2MzZmOGQ0MDNiOTA1OWNhNzYxYjVjNjJiYjUyYWE0NTAwMmVhNzBiYWFjZTA4ZGVkMjQzYjlkOGNiZDYyYTY4YWRlMjY1ODMyYjU2NTY0ZTQzYTZmYTQyZWQxOTlhMDk5NzY5NzQyZGYxNTM5ZTgyNTUiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIDJfMQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjU6MTY6IjAxNTlkYmRlMDRhMzNlZjA2ZmI2MDhiODBiMTkwZjRkM2UyMmJjYzEzYWM4ZTRhMDgxMDMzYWJmYTQxNmVkYjBiMzM4YWEwOGI1NzMwOWVhNWE1MjQwZTdkYzZlNTQzNzhjNjk0MTRjMzFkOTdkZGIxZjQwNmRiMzc2OWNjNDFhNDMiOjE2OiIwMTJiNjUyZjMwNDAzYjM4YjQwOTk1ZmQ2ZmY0MWExYWNjOGFkYTcwMzczMjM2YjcyMDJkMzliMmVlMzBjZmI0NmRiMDk1MTFmNmYzMDdjYzYxY2MyMTYwNmMxOGE3NWI4YTYyZjgyMmRmMDMxYmEwZGYwZGFmZDU1MDZmNTY4YmQ3IjoxNjoiMDE5NDdjN2ZjZTkwNDI1ZjQ3Mjc5ZTcwODUxZjI1ZDVlNjIzMTZmZThhMWRmMTkzNzFlM2U2MjhlMjYwNTQzZTQ5MDFlZjYwODFmNjhjMGI4MTQxMTkwZDJhZThkYWJhN2QxMjUwZWM2ZGI2MzZlOTQ0ZWMzNzIyODc3YzdjMWQwYTY3ZjE0YjE2OTRjNWYwMzc5NDUxYTQzZTQ5YTMyZGRlODM2NzBiNzNkYTkxYTFjOTliYzIzYjQzNmE2MDA1NWM2MTBmMGJhZjk5YzFhMDc5NTY1Yjk1YTNmMTUyNjYzMmQxZDRkYTYwZjIwZWRhMjVlNjUzYzRmMDAyNzY2ZjQ1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjhmZjAwY2FhNjA1YzcwMjgzMDYzNGQ5YTZjM2Q0MmM2NTJiNThjZjFkOTJmZWM1NzBiZWVlNyI6IjhjNDA3YjVlYzI4OTllNTA5OWM1M2U4Y2U3OTNiZjk0ZTcxYjE3ODIiOiIwMTgxYWY4OTIyYjlmY2I0ZDc5ZDkyZWJlMTk4MTU5OTJmYzBjMTQzOWQ4YmNkNDkxMzk4YTBmNGFkM2EzMjlhNWJkOTM4NTU2MGRiNTMyNjgzYzhiN2RhMDRlNGIxMmFlZDZhYWNkZjQ3MWMzNGM5Y2RhODkxYWRkY2MyZGYzNDU2NjUzYWE2MzgyZTlhZTU5YjU0NDU1MjU3ZWIwOTlkNTYyYmJlMTA0NTNmMmI2ZDEzYzU5YzAyZTEwZjFmOGFiYjVkYTBkMDU3MDkzMmRhY2YyZDA5MDFkYjcyOWQwZmVmY2MwNTRlNzA5NjhlYTU0MGM4MWIwNGJjYWVmZTcyMGUiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIDJfMgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjU6MTY6IjAxNTlkYmRlMDRhMzNlZjA2ZmI2MDhiODBiMTkwZjRkM2UyMmJjYzEzYWM4ZTRhMDgxMDMzYWJmYTQxNmVkYjBiMzM4YWEwOGI1NzMwOWVhNWE1MjQwZTdkYzZlNTQzNzhjNjk0MTRjMzFkOTdkZGIxZjQwNmRiMzc2OWNjNDFhNDMiOjE2OiIwMTJiNjUyZjMwNDAzYjM4YjQwOTk1ZmQ2ZmY0MWExYWNjOGFkYTcwMzczMjM2YjcyMDJkMzliMmVlMzBjZmI0NmRiMDk1MTFmNmYzMDdjYzYxY2MyMTYwNmMxOGE3NWI4YTYyZjgyMmRmMDMxYmEwZGYwZGFmZDU1MDZmNTY4YmQ3IjoxNjoiMDE5NDdjN2ZjZTkwNDI1ZjQ3Mjc5ZTcwODUxZjI1ZDVlNjIzMTZmZThhMWRmMTkzNzFlM2U2MjhlMjYwNTQzZTQ5MDFlZjYwODFmNjhjMGI4MTQxMTkwZDJhZThkYWJhN2QxMjUwZWM2ZGI2MzZlOTQ0ZWMzNzIyODc3YzdjMWQwYTY3ZjE0YjE2OTRjNWYwMzc5NDUxYTQzZTQ5YTMyZGRlODM2NzBiNzNkYTkxYTFjOTliYzIzYjQzNmE2MDA1NWM2MTBmMGJhZjk5YzFhMDc5NTY1Yjk1YTNmMTUyNjYzMmQxZDRkYTYwZjIwZWRhMjVlNjUzYzRmMDAyNzY2ZjQ1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjJkIjoiYjYwMGNmM2MyZTUwNmQ3ZjE2Nzc4YzkxMGQzYThiMDAzZWVlNjFkNSI6IjAxODc1OWZmMWRmNjNiMjc5MjQxMDU2MjMxNDQxNmE4YWVhZjJhYzYzNGI0NmY5NDBhYjgyZDY0ZGJmMTY1ZWVlMzMwMTFkYTc0OWQ0YmFiNmUyZmNkMTgxMjljOWU0OTI3N2Q4NDUzMTEyYjQyOWEyMjJhODQ3MWIwNzA5OTM5OThlNzU4ODYxYzRkM2Y2ZDc0OWQ5MWM0MjkwZDMzMmM3YTRhYjNmN2VhMzVmZjNhMDdkNDk3Yzk1NWZmMGZmYzk1MDA2YjYyYzZkMjk2ODEwZDliZmFiMDI0MTk2Yzc5MzQwMTJjMmRmOTc4ZWYyOTlhYmEyMzk5NDBjYmExMDI0NSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gVGVzdCBWZWN0b3IgMl8zCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNToxNjoiMDE1OWRiZGUwNGEzM2VmMDZmYjYwOGI4MGIxOTBmNGQzZTIyYmNjMTNhYzhlNGEwODEwMzNhYmZhNDE2ZWRiMGIzMzhhYTA4YjU3MzA5ZWE1YTUyNDBlN2RjNmU1NDM3OGM2OTQxNGMzMWQ5N2RkYjFmNDA2ZGIzNzY5Y2M0MWE0MyI6MTY6IjAxMmI2NTJmMzA0MDNiMzhiNDA5OTVmZDZmZjQxYTFhY2M4YWRhNzAzNzMyMzZiNzIwMmQzOWIyZWUzMGNmYjQ2ZGIwOTUxMWY2ZjMwN2NjNjFjYzIxNjA2YzE4YTc1YjhhNjJmODIyZGYwMzFiYTBkZjBkYWZkNTUwNmY1NjhiZDciOjE2OiIwMTk0N2M3ZmNlOTA0MjVmNDcyNzllNzA4NTFmMjVkNWU2MjMxNmZlOGExZGYxOTM3MWUzZTYyOGUyNjA1NDNlNDkwMWVmNjA4MWY2OGMwYjgxNDExOTBkMmFlOGRhYmE3ZDEyNTBlYzZkYjYzNmU5NDRlYzM3MjI4NzdjN2MxZDBhNjdmMTRiMTY5NGM1ZjAzNzk0NTFhNDNlNDlhMzJkZGU4MzY3MGI3M2RhOTFhMWM5OWJjMjNiNDM2YTYwMDU1YzYxMGYwYmFmOTljMWEwNzk1NjViOTVhM2YxNTI2NjMyZDFkNGRhNjBmMjBlZGEyNWU2NTNjNGYwMDI3NjZmNDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNzRmYzg4YzUxYmM5MGY3N2FmOWQ1ZTlhNGE3MDEzM2Q0YjRlMGIzNGRhM2MzN2M3ZWY4ZSI6ImE3Mzc2OGFlZWFhOTFmOWQ4YzFlZDZmOWQyYjYzNDY3ZjA3Y2NhZTMiOiIwMTg4MDJiYWIwNGM2MDMyNWU4MWM0OTYyMzExZjJiZTdjMmFkY2U5MzA0MWEwMDcxOWM4OGY5NTc1NzVmMmM3OWYxYjdiYzhjZWQxMTVjNzA2YjMxMWMwOGEyZDk4NmNhM2I2YTkzMzZiMTQ3YzI5YzZmMjI5NDA5ZGRlYzY1MWJkMWZkZDVhMGI3ZjYxMGM5OTM3ZmRiNGEzYTc2MjM2NGI4YjMyMDZiNGVhNDg1ZmQwOThkMDhmNjNkNGFhOGJiMjY5N2QwMjdiNzUwYzMyZDdmNzRlYWY1MTgwZDJlOWI2NmIxN2NiMmZhNTU1MjNiYzI4MGRhMTBkMTRiZTIwNTMiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIDJfNAorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjU6MTY6IjAxNTlkYmRlMDRhMzNlZjA2ZmI2MDhiODBiMTkwZjRkM2UyMmJjYzEzYWM4ZTRhMDgxMDMzYWJmYTQxNmVkYjBiMzM4YWEwOGI1NzMwOWVhNWE1MjQwZTdkYzZlNTQzNzhjNjk0MTRjMzFkOTdkZGIxZjQwNmRiMzc2OWNjNDFhNDMiOjE2OiIwMTJiNjUyZjMwNDAzYjM4YjQwOTk1ZmQ2ZmY0MWExYWNjOGFkYTcwMzczMjM2YjcyMDJkMzliMmVlMzBjZmI0NmRiMDk1MTFmNmYzMDdjYzYxY2MyMTYwNmMxOGE3NWI4YTYyZjgyMmRmMDMxYmEwZGYwZGFmZDU1MDZmNTY4YmQ3IjoxNjoiMDE5NDdjN2ZjZTkwNDI1ZjQ3Mjc5ZTcwODUxZjI1ZDVlNjIzMTZmZThhMWRmMTkzNzFlM2U2MjhlMjYwNTQzZTQ5MDFlZjYwODFmNjhjMGI4MTQxMTkwZDJhZThkYWJhN2QxMjUwZWM2ZGI2MzZlOTQ0ZWMzNzIyODc3YzdjMWQwYTY3ZjE0YjE2OTRjNWYwMzc5NDUxYTQzZTQ5YTMyZGRlODM2NzBiNzNkYTkxYTFjOTliYzIzYjQzNmE2MDA1NWM2MTBmMGJhZjk5YzFhMDc5NTY1Yjk1YTNmMTUyNjYzMmQxZDRkYTYwZjIwZWRhMjVlNjUzYzRmMDAyNzY2ZjQ1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImE3ZWIyYTUwMzY5MzFkMjdkNGU4OTEzMjZkOTk2OTJmZmFkZGE5YmY3ZWZkM2UzNGU2MjJjNGFkYzA4NWY3MjFkZmU4ODUwNzJjNzhhMjAzYjE1MTczOWJlNTQwZmE4YzE1M2ExMGYwMGEiOiI5YTdiM2IwZTcwOGJkOTZmODE5MGVjYWI0ZmI5YjJiMzgwNWE4MTU2IjoiMDBhNDU3OGNiYzE3NjMxOGE2MzhmYmE3ZDAxZGYxNTc0NmFmNDRkNGY2Y2Q5NmQ3ZTdjNDk1Y2JmNDI1YjA5YzY0OWQzMmJmODg2ZGE0OGZiYWY5ODlhMjExNzE4N2NhZmIxZmI1ODAzMTc2OTBlM2NjZDQ0NjkyMGI3YWY4MmIzMWRiNTgwNGQ4N2QwMTUxNGFjYmZhOTE1NmU3ODJmODY3ZjZiZWQ5NDQ5ZTBlOWEyYzA5YmNlY2M2YWEwODc2MzY5NjVlMzRiM2VjNzY2ZjJmZTJlNDMwMThhMmZkZGViMTQwNjE2YTBlOWQ4MmU1MzMxMDI0ZWUwNjUyZmM3NjQxIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBUZXN0IFZlY3RvciAyXzUKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI1OjE2OiIwMTU5ZGJkZTA0YTMzZWYwNmZiNjA4YjgwYjE5MGY0ZDNlMjJiY2MxM2FjOGU0YTA4MTAzM2FiZmE0MTZlZGIwYjMzOGFhMDhiNTczMDllYTVhNTI0MGU3ZGM2ZTU0Mzc4YzY5NDE0YzMxZDk3ZGRiMWY0MDZkYjM3NjljYzQxYTQzIjoxNjoiMDEyYjY1MmYzMDQwM2IzOGI0MDk5NWZkNmZmNDFhMWFjYzhhZGE3MDM3MzIzNmI3MjAyZDM5YjJlZTMwY2ZiNDZkYjA5NTExZjZmMzA3Y2M2MWNjMjE2MDZjMThhNzViOGE2MmY4MjJkZjAzMWJhMGRmMGRhZmQ1NTA2ZjU2OGJkNyI6MTY6IjAxOTQ3YzdmY2U5MDQyNWY0NzI3OWU3MDg1MWYyNWQ1ZTYyMzE2ZmU4YTFkZjE5MzcxZTNlNjI4ZTI2MDU0M2U0OTAxZWY2MDgxZjY4YzBiODE0MTE5MGQyYWU4ZGFiYTdkMTI1MGVjNmRiNjM2ZTk0NGVjMzcyMjg3N2M3YzFkMGE2N2YxNGIxNjk0YzVmMDM3OTQ1MWE0M2U0OWEzMmRkZTgzNjcwYjczZGE5MWExYzk5YmMyM2I0MzZhNjAwNTVjNjEwZjBiYWY5OWMxYTA3OTU2NWI5NWEzZjE1MjY2MzJkMWQ0ZGE2MGYyMGVkYTI1ZTY1M2M0ZjAwMjc2NmY0NSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIyZWYyYjA2NmY4NTRjMzNmM2JkY2JiNTk5NGE0MzVlNzNkNmM2YyI6ImViM2NlYmJjNGFkYzE2YmI0OGU4OGM4YWVjMGUzNGFmN2Y0MjdmZDMiOiIwMGViYzVmNWZkYTc3Y2ZkYWQzYzgzNjQxYTkwMjVlNzdkNzJkOGE2ZmIzM2E4MTBmNTk1MGY4ZDc0YzczZThkOTMxZTg2MzRkODZhYjEyNDYyNTZhZTA3YjYwMDViNzFiN2YyZmI5ODM1MTIxODMzMWNlNjliOGZmYmRjOWRhMDhiYmM5YzcwNGY4NzZkZWI5ZGY5ZmMyZWMwNjVjYWQ4N2Y5MDkwYjA3YWNjMTdhYTdmOTk3YjI3YWNhNDg4MDZlODk3Zjc3MWQ5NTE0MWZlNDUyNmQ4YTUzMDFiNjc4NjI3ZWZhYjcwN2ZkNDBmYmViZDZlNzkyYTI1NjEzZTdhZWMiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIDJfNgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjU6MTY6IjAxNTlkYmRlMDRhMzNlZjA2ZmI2MDhiODBiMTkwZjRkM2UyMmJjYzEzYWM4ZTRhMDgxMDMzYWJmYTQxNmVkYjBiMzM4YWEwOGI1NzMwOWVhNWE1MjQwZTdkYzZlNTQzNzhjNjk0MTRjMzFkOTdkZGIxZjQwNmRiMzc2OWNjNDFhNDMiOjE2OiIwMTJiNjUyZjMwNDAzYjM4YjQwOTk1ZmQ2ZmY0MWExYWNjOGFkYTcwMzczMjM2YjcyMDJkMzliMmVlMzBjZmI0NmRiMDk1MTFmNmYzMDdjYzYxY2MyMTYwNmMxOGE3NWI4YTYyZjgyMmRmMDMxYmEwZGYwZGFmZDU1MDZmNTY4YmQ3IjoxNjoiMDE5NDdjN2ZjZTkwNDI1ZjQ3Mjc5ZTcwODUxZjI1ZDVlNjIzMTZmZThhMWRmMTkzNzFlM2U2MjhlMjYwNTQzZTQ5MDFlZjYwODFmNjhjMGI4MTQxMTkwZDJhZThkYWJhN2QxMjUwZWM2ZGI2MzZlOTQ0ZWMzNzIyODc3YzdjMWQwYTY3ZjE0YjE2OTRjNWYwMzc5NDUxYTQzZTQ5YTMyZGRlODM2NzBiNzNkYTkxYTFjOTliYzIzYjQzNmE2MDA1NWM2MTBmMGJhZjk5YzFhMDc5NTY1Yjk1YTNmMTUyNjYzMmQxZDRkYTYwZjIwZWRhMjVlNjUzYzRmMDAyNzY2ZjQ1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjhhN2ZiMzQ0YzhiNmNiMmNmMmVmMWY2NDNmOWEzMjE4ZjZlMTliYmE4OWMwIjoiNGM0NWNmNGQ1N2M5OGUzZDZkMjA5NWFkYzUxYzQ4OWViNTBkZmY4NCI6IjAxMDgzOWVjMjBjMjdiOTA1MmU1NWJlZmI5Yjc3ZTZmYzI2ZTkwNzVkN2E1NDM3OGM2NDZhYmRmNTFlNDQ1YmQ1NzE1ZGU4MTc4OWY1NmYxODAzZDkxNzA3NjRhOWU5M2NiNzg3OTg2OTQwMjNlZTczOTNjZTA0YmM1ZDhmOGM1YTUyYzE3MWQ0MzgzN2UzYWNhNjJmNjA5ZWIwYWE1ZmZiMDk2MGVmMDQxOThkZDc1NGY1N2Y3ZmJlNmFiZjc2NWNmMTE4YjRjYTQ0M2IyM2I1YWFiMjY2Zjk1MjMyNmFjNDU4MTEwMDY0NDMyNWY4YjcyMWFjZDVkMDRmZjE0ZWYzYSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSAzXzEKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI2OjE2OiIwMWJmMDFkMjE2ZDczNTk1Y2YwMjcwYzJiZWI3OGQ0MGEwZDg0NDdkMzFkYTkxOWE5ODNmN2VlYTc4MWI3N2Q4NWZlMzcxYjNlOTM3M2U3YjY5MjE3ZDMxNTBhMDJkODk1OGRlN2ZhZDlkNTU1MTYwOTU4YjQ0NTQxMjdlMGU3ZWFmIjoxNjoiMDE4ZDMzOTk2NTgxNjZkYjM4Mjk4MTZkN2IyOTU0MTY3NTllOWM5MTk4N2Y1YjJkOGFlY2Q2M2IwNGI0OGJkN2IyZmNmMjI5YmI3ZjhhNmRjODhiYTEzZGQyZTM5YWQ1NWI2ZDFhMDYxNjA3MDhmOTcwMGJlODBiOGZkMzc0NGNlNyI6MTY6IjAyYjU4ZmVjMDM5YTg2MDcwMGE0ZDdiNjQ2MmY5M2U2Y2RkNDkxMTYxZGRkNzRmNGU4MTBiNDBlM2MxNjUyMDA2YTVjMjc3YjI3NzRjMTEzMDVhNGNiYWI1YTc4ZWZhNTdlMTdhODZkZjdhM2ZhMzZmYzRiMWQyMjQ5ZjIyZWM3YzJkZDZhNDYzMjMyYWNjZWE5MDZkNjZlYmU4MGI1NzA0YjEwNzI5ZGE2ZjgzMzIzNGFiYjVlZmRkNGEyOTJjYmZhZDMzYjRkMzNmYTdhMTRiOGMzOTdiNTZlM2FjZDIxMjAzNDI4Yjc3Y2RmYTMzYTZkYTcwNmIzZDhiMGZjNDNlOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIwODc4MjBiNTY5ZThmYThkIjoiOGNlZDZiMTk2MjkwODA1NzkwZTkwOTA3NDAxNWU2YTIwYjBjNDg5NCI6IjAyNmEwNDg1ZDk2YWViZDk2YjQzODIwODUwOTliOTYyZTZhMmJkZWMzZDkwYzhkYjYyNWUxNDM3MmRlODVlMmQ1YjdiYWFiNjVjOGZhZjkxYmI1NTA0ZmI0OTVhZmNlNWM5ODhiM2Y2YTUyZTIwZTFkNmNiZDM1NjZjNWNkMWYyYjgzMThiYjU0MmNjMGVhMjVjNGFhYjk5MzJhZmEyMDc2MGVhZGRlYzc4NDM5NmEwN2VhMGVmMjRkNGU2ZjRkMzdlNTA1MmE3YTMxZTE0NmFhNDgwYTExMWJiZTkyNjQwMTMwN2UwMGY0MTAwMzM4NDJiNmQ4MmZlNWNlNGRmYWU4MCI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSAzXzIKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI2OjE2OiIwMWJmMDFkMjE2ZDczNTk1Y2YwMjcwYzJiZWI3OGQ0MGEwZDg0NDdkMzFkYTkxOWE5ODNmN2VlYTc4MWI3N2Q4NWZlMzcxYjNlOTM3M2U3YjY5MjE3ZDMxNTBhMDJkODk1OGRlN2ZhZDlkNTU1MTYwOTU4YjQ0NTQxMjdlMGU3ZWFmIjoxNjoiMDE4ZDMzOTk2NTgxNjZkYjM4Mjk4MTZkN2IyOTU0MTY3NTllOWM5MTk4N2Y1YjJkOGFlY2Q2M2IwNGI0OGJkN2IyZmNmMjI5YmI3ZjhhNmRjODhiYTEzZGQyZTM5YWQ1NWI2ZDFhMDYxNjA3MDhmOTcwMGJlODBiOGZkMzc0NGNlNyI6MTY6IjAyYjU4ZmVjMDM5YTg2MDcwMGE0ZDdiNjQ2MmY5M2U2Y2RkNDkxMTYxZGRkNzRmNGU4MTBiNDBlM2MxNjUyMDA2YTVjMjc3YjI3NzRjMTEzMDVhNGNiYWI1YTc4ZWZhNTdlMTdhODZkZjdhM2ZhMzZmYzRiMWQyMjQ5ZjIyZWM3YzJkZDZhNDYzMjMyYWNjZWE5MDZkNjZlYmU4MGI1NzA0YjEwNzI5ZGE2ZjgzMzIzNGFiYjVlZmRkNGEyOTJjYmZhZDMzYjRkMzNmYTdhMTRiOGMzOTdiNTZlM2FjZDIxMjAzNDI4Yjc3Y2RmYTMzYTZkYTcwNmIzZDhiMGZjNDNlOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI0NjUzYWNhZjE3MTk2MGIwMWY1MmE3YmU2M2EzYWIyMWRjMzY4ZWM0M2I1MGQ4MmVjMzc4MWUwNCI6ImI0MjkxZDY1Njc1NTA4NDhjYzE1Njk2N2M4MDliYWFiNmNhNTA3ZjAiOiIwMjRkYjg5Yzc4MDI5ODliZTA3ODM4NDc4NjMwODQ5NDFiZjIwOWQ3NjE5ODdlMzhmOTdjYjVmNmYxYmM4OGRhNzJhNTBiNzNlYmFmMTFjODc5YzRmOTVkZjM3Yjg1MGI4ZjY1ZDc2MjJlMjViMWI4ODllODBmZTgwYmFjYTIwNjlkNmUwZTFkODI5OTUzZmM0NTkwNjlkZTk4ZWE5Nzk4YjQ1MWU1NTdlOTlhYmY4ZmUzZDljY2Y5MDk2ZWJiZjNlNTI1NWQzYjRlMWM2ZDJlY2FkZjA2N2EzNTllZWE4NjQwNWFjZDQ3ZDVlMTY1NTE3Y2NhZmQ0N2Q2ZGJlZTRiZjUiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgM18zCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNjoxNjoiMDFiZjAxZDIxNmQ3MzU5NWNmMDI3MGMyYmViNzhkNDBhMGQ4NDQ3ZDMxZGE5MTlhOTgzZjdlZWE3ODFiNzdkODVmZTM3MWIzZTkzNzNlN2I2OTIxN2QzMTUwYTAyZDg5NThkZTdmYWQ5ZDU1NTE2MDk1OGI0NDU0MTI3ZTBlN2VhZiI6MTY6IjAxOGQzMzk5NjU4MTY2ZGIzODI5ODE2ZDdiMjk1NDE2NzU5ZTljOTE5ODdmNWIyZDhhZWNkNjNiMDRiNDhiZDdiMmZjZjIyOWJiN2Y4YTZkYzg4YmExM2RkMmUzOWFkNTViNmQxYTA2MTYwNzA4Zjk3MDBiZTgwYjhmZDM3NDRjZTciOjE2OiIwMmI1OGZlYzAzOWE4NjA3MDBhNGQ3YjY0NjJmOTNlNmNkZDQ5MTE2MWRkZDc0ZjRlODEwYjQwZTNjMTY1MjAwNmE1YzI3N2IyNzc0YzExMzA1YTRjYmFiNWE3OGVmYTU3ZTE3YTg2ZGY3YTNmYTM2ZmM0YjFkMjI0OWYyMmVjN2MyZGQ2YTQ2MzIzMmFjY2VhOTA2ZDY2ZWJlODBiNTcwNGIxMDcyOWRhNmY4MzMyMzRhYmI1ZWZkZDRhMjkyY2JmYWQzM2I0ZDMzZmE3YTE0YjhjMzk3YjU2ZTNhY2QyMTIwMzQyOGI3N2NkZmEzM2E2ZGE3MDZiM2Q4YjBmYzQzZTkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZDk0Y2QwZTA4ZmE0MDRlZDg5IjoiY2U4OTI4ZjYwNTk1NTgyNTQwMDhiYWRkOTc5NGZhZGNkMmZkMWY2NSI6IjAyMzliY2U2ODEwMzI0NDE1Mjg4NzdkNmQxYzhiYjI4YWEzYmM5N2YxZGY1ODQ1NjM2MTg5OTU3OTc2ODM4NDRjYTg2NjY0NzMyZjRiZWQ3YTBhYWIwODNhYWFiZmI3MjM4ZjU4MmUzMDk1OGMyMDI0ZTQ0ZTU3MDQzYjk3OTUwZmQ1NDNkYTk3N2M5MGNkZGU1MzM3ZDYxODQ0MmY5OWU2MGQ3NzgzYWI1OWNlNmRkOWQ2OWM0N2FkMWU5NjJiZWMyMmQwNTg5NWNmZjhkM2Y2NGVkNTI2MWQ5MmIyNjc4NTEwMzkzNDg0OTkwYmEzZjdmMDY4MThhZTZmZmNlOGEzYSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSAzXzQKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI2OjE2OiIwMWJmMDFkMjE2ZDczNTk1Y2YwMjcwYzJiZWI3OGQ0MGEwZDg0NDdkMzFkYTkxOWE5ODNmN2VlYTc4MWI3N2Q4NWZlMzcxYjNlOTM3M2U3YjY5MjE3ZDMxNTBhMDJkODk1OGRlN2ZhZDlkNTU1MTYwOTU4YjQ0NTQxMjdlMGU3ZWFmIjoxNjoiMDE4ZDMzOTk2NTgxNjZkYjM4Mjk4MTZkN2IyOTU0MTY3NTllOWM5MTk4N2Y1YjJkOGFlY2Q2M2IwNGI0OGJkN2IyZmNmMjI5YmI3ZjhhNmRjODhiYTEzZGQyZTM5YWQ1NWI2ZDFhMDYxNjA3MDhmOTcwMGJlODBiOGZkMzc0NGNlNyI6MTY6IjAyYjU4ZmVjMDM5YTg2MDcwMGE0ZDdiNjQ2MmY5M2U2Y2RkNDkxMTYxZGRkNzRmNGU4MTBiNDBlM2MxNjUyMDA2YTVjMjc3YjI3NzRjMTEzMDVhNGNiYWI1YTc4ZWZhNTdlMTdhODZkZjdhM2ZhMzZmYzRiMWQyMjQ5ZjIyZWM3YzJkZDZhNDYzMjMyYWNjZWE5MDZkNjZlYmU4MGI1NzA0YjEwNzI5ZGE2ZjgzMzIzNGFiYjVlZmRkNGEyOTJjYmZhZDMzYjRkMzNmYTdhMTRiOGMzOTdiNTZlM2FjZDIxMjAzNDI4Yjc3Y2RmYTMzYTZkYTcwNmIzZDhiMGZjNDNlOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI2Y2M2NDFiNmI2MWU2Zjk2Mzk3NGRhZDIzYTkwMTMyODRlZjEiOiI2ZTI5NzlmNTJkNjgxNGE1N2Q4M2IwOTAwNTQ4ODhmMTE5YTViOWEzIjoiMDI5OTRjNjJhZmQ3NmY0OThiYTFmZDJjZjY0Mjg1N2ZjYTgxZjQzNzNjYjA4ZjFjYmFlZTZmMDI1YzNiNTEyYjQyYzNlODc3OTExMzQ3NjY0ODAzOWRiZTA0OTNmOTI0NjI5MmZhYzI4OTUwNjAwZTdjMGYzMmVkZjljODFiOWRlYzQ1YzNiZGUwY2M4ZDg4NDc1OTAxNjk5MDdiN2RjNTk5MWNlYjI5YmIwNzE0ZDYxM2Q5NmRmMGYxMmVjNWQ4ZDM1MDdjOGVlN2FlNzhkZDgzZjIxNmZhNjFkZTEwMDM2M2FjYTQ4YTdlOTE0YWU5ZjQyZGRmYmU5NDNiMDlkOWEwIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDNfNQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjY6MTY6IjAxYmYwMWQyMTZkNzM1OTVjZjAyNzBjMmJlYjc4ZDQwYTBkODQ0N2QzMWRhOTE5YTk4M2Y3ZWVhNzgxYjc3ZDg1ZmUzNzFiM2U5MzczZTdiNjkyMTdkMzE1MGEwMmQ4OTU4ZGU3ZmFkOWQ1NTUxNjA5NThiNDQ1NDEyN2UwZTdlYWYiOjE2OiIwMThkMzM5OTY1ODE2NmRiMzgyOTgxNmQ3YjI5NTQxNjc1OWU5YzkxOTg3ZjViMmQ4YWVjZDYzYjA0YjQ4YmQ3YjJmY2YyMjliYjdmOGE2ZGM4OGJhMTNkZDJlMzlhZDU1YjZkMWEwNjE2MDcwOGY5NzAwYmU4MGI4ZmQzNzQ0Y2U3IjoxNjoiMDJiNThmZWMwMzlhODYwNzAwYTRkN2I2NDYyZjkzZTZjZGQ0OTExNjFkZGQ3NGY0ZTgxMGI0MGUzYzE2NTIwMDZhNWMyNzdiMjc3NGMxMTMwNWE0Y2JhYjVhNzhlZmE1N2UxN2E4NmRmN2EzZmEzNmZjNGIxZDIyNDlmMjJlYzdjMmRkNmE0NjMyMzJhY2NlYTkwNmQ2NmViZTgwYjU3MDRiMTA3MjlkYTZmODMzMjM0YWJiNWVmZGQ0YTI5MmNiZmFkMzNiNGQzM2ZhN2ExNGI4YzM5N2I1NmUzYWNkMjEyMDM0MjhiNzdjZGZhMzNhNmRhNzA2YjNkOGIwZmM0M2U5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImRmNTE1MTgzMmI2MWY0ZjI1ODkxZmI0MTcyZjMyOGQyZWRkZjgzNzFmZmNmZGJlOTk3OTM5Mjk1ZjMwZWNhNjkxODAxN2NmZGExMTUzYmY3YTZhZjg3NTkzMjIzIjoiMmQ3NjBiZmUzOGM1OWRlMzRjZGM4YjhjNzhhMzhlNjYyODRhMmQyNyI6IjAxNjIwNDJmZjY5Njk1OTJhNjE2NzAzMTgxMWEyMzk4MzRjZTYzOGFiZjU0ZmVjOGI5OTQ3ODEyMmFmZTJlZTY3ZjhjNWIxOGIwMzM5ODA1YmZkYmM1YTRlNjcyMGIzN2M1OWNmYmE5NDI0NjRjNTk3ZmY1MzJhMTE5ODIxNTQ1ZmQyZTU5YjExNGU2MWRhZjcxODIwNTI5ZjUwMjljZjUyNDk1NDMyN2MzNGVjNWU2ZjViYTdlZmNjNGRlOTQzYWI4YWQ0ZWQ3ODdiMTQ1NDMyOWY3MGRiNzk4YTNhOGY0ZDkyZjgyNzRlMmIyOTQ4YWRlNjI3Y2U4ZWUzM2U0M2M2MCI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSAzXzYKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI2OjE2OiIwMWJmMDFkMjE2ZDczNTk1Y2YwMjcwYzJiZWI3OGQ0MGEwZDg0NDdkMzFkYTkxOWE5ODNmN2VlYTc4MWI3N2Q4NWZlMzcxYjNlOTM3M2U3YjY5MjE3ZDMxNTBhMDJkODk1OGRlN2ZhZDlkNTU1MTYwOTU4YjQ0NTQxMjdlMGU3ZWFmIjoxNjoiMDE4ZDMzOTk2NTgxNjZkYjM4Mjk4MTZkN2IyOTU0MTY3NTllOWM5MTk4N2Y1YjJkOGFlY2Q2M2IwNGI0OGJkN2IyZmNmMjI5YmI3ZjhhNmRjODhiYTEzZGQyZTM5YWQ1NWI2ZDFhMDYxNjA3MDhmOTcwMGJlODBiOGZkMzc0NGNlNyI6MTY6IjAyYjU4ZmVjMDM5YTg2MDcwMGE0ZDdiNjQ2MmY5M2U2Y2RkNDkxMTYxZGRkNzRmNGU4MTBiNDBlM2MxNjUyMDA2YTVjMjc3YjI3NzRjMTEzMDVhNGNiYWI1YTc4ZWZhNTdlMTdhODZkZjdhM2ZhMzZmYzRiMWQyMjQ5ZjIyZWM3YzJkZDZhNDYzMjMyYWNjZWE5MDZkNjZlYmU4MGI1NzA0YjEwNzI5ZGE2ZjgzMzIzNGFiYjVlZmRkNGEyOTJjYmZhZDMzYjRkMzNmYTdhMTRiOGMzOTdiNTZlM2FjZDIxMjAzNDI4Yjc3Y2RmYTMzYTZkYTcwNmIzZDhiMGZjNDNlOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIzYzNiYWQ4OTNjNTQ0YTZkNTIwYWIwMjIzMTkxODhjOGQ1MDRiN2E3ODhiODUwOTAzYjg1OTcyZWFhMTg1NTJlMTEzNGE3YWQ2MDk4ODI2MjU0ZmY3YWI2NzJiM2Q4ZWIzMTU4ZmFjNmQ0Y2JhZWYxIjoiZjE3NDc3OWM1ZmQzY2ZlMDA3YmFkY2I3YTM2YzliNTViZmNmYmYwZSI6IjAwMTEyMDUxZTc1ZDA2NDk0M2JjNDQ3ODA3NWU0MzQ4MmZkNTljZWUwNjc5ZGU2ODkzZWVjM2E5NDNkYWE0OTBiOTY5MWM5M2RmYzA0NjRiNjYyM2I5ZjNkYmQzZTcwMDgzMjY0ZjAzNGIzNzRmNzQxNjRlMWEwMDc2MzcyNWU1NzQ3NDRiYTBiOWRiODM0MzRmMzFkZjk2ZjZlMmEyNmY2ZDhlYmEzNDhiZDQ2ODZjMjIzOGFjMDdjMzdhYWMzNzg1ZDFjN2VlYTJmODE5ZmQ5MTQ5MTc5OGVkOGU5Y2VmNWU0M2I3ODFiMGUwMjc2ZTM3YzQzZmY5NDkyZDAwNTczMCI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA0XzEKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI3OjE2OiIwMjc0NThjMTllYzE2MzY5MTllNzM2YzlhZjI1ZDYwOWE1MWI4ZjU2MWQxOWM2YmY2OTQzZGQxZWUxYWI4YTRhM2YyMzIxMDBiZDQwYjg4ZGVjYzZiYTIzNTU0OGI2ZWY3OTJhMTFjOWRlODIzZDBhNzkyMmM3MDk1YjZlYmE1NzAxIjoxNjoiMDIxMGVlOWIzM2FiNjE3MTZlMjdkMjUxYmQ0NjVmNGIzNWExYTIzMmUyZGEwMDkwMWMyOTRiZjIyMzUwY2U0OTBkMDk5ZjY0MmI1Mzc1NjEyZGI2M2JhMWYyMDM4NjQ5MmJmMDRkMzRiM2MyMmJjZWI5MDlkMTM0NDFiNTNiNTEzOSI6MTY6IjA1MTI0MGI2Y2MwMDA0ZmE0OGQwMTM0NjcxYzA3OGM3YzhkZWMzYjNlMmYyNWJjMjU2NDQ2NzMzOWRiMzg4NTNkMDZiODVlZWE1YjJkZTM1M2JmZjQyYWMyZTQ2YmM5N2ZhZTZhYzk2MThkYTk1MzdhNWM4ZjU1M2MxZTM1NzYyNTk5MWQ2MTA4ZGNkNzg4NWZiM2EyNTQxM2Y1M2VmY2FkOTQ4Y2IzNWNkOWI5YWU5YzFjNjc2MjZkMTEzZDU3ZGRlNGM1YmVhNzZiYjViYjdkZTk2YzAwZDA3MzcyZTk2ODVhNmQ3NWNmOWQyMzlmYTE0OGQ3MDkzMWI1ZjNmYjAzOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI0YTg2NjA5NTM0ZWU0MzRhNmNiY2EzZjdlOTYyZTc2ZDQ1NWUzMjY0YzE5ZjYwNWY2ZTVmZjYxMzdjNjVjNTZkN2ZiMzQ0Y2Q1MmJjOTMzNzRmM2QxNjZjOWYwYzZmOWM1MDZiYWQxOTMzMDk3MmQyIjoiMWNhYzE5Y2U5OTNkZWY1NWY5ODIwM2Y2ODUyODk2Yzk1Y2NjYTFmMyI6IjA0Y2NlMTk2MTQ4NDVlMDk0MTUyYTNmZTE4ZTU0ZTMzMzBjNDRlNWVmYmM2NGFlMTY4ODZjYjE4NjkwMTRjYzU3ODFiMWY4ZjllMDQ1Mzg0ZDAxMTJhMTM1Y2EwZDEyZTljODhhOGU0MDYzNDE2ZGVhYWUzODQ0ZjYwZDZlOTZmZTE1NTE0NWY0NTI1YjlhMzQ0MzFjYTM3NjYxODBmNzBlMTVhNWU1ZDhlOGIxYTUxNmZmODcwNjA5ZjEzZjg5NjkzNWNlZDE4ODI3OWE1OGVkMTNkMDcxMTQyNzdkNzVjNjU2ODYwN2UwYWIwOTJmZDgwM2EyMjNlNGE4ZWUwYjFhOCI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA0XzIKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI3OjE2OiIwMjc0NThjMTllYzE2MzY5MTllNzM2YzlhZjI1ZDYwOWE1MWI4ZjU2MWQxOWM2YmY2OTQzZGQxZWUxYWI4YTRhM2YyMzIxMDBiZDQwYjg4ZGVjYzZiYTIzNTU0OGI2ZWY3OTJhMTFjOWRlODIzZDBhNzkyMmM3MDk1YjZlYmE1NzAxIjoxNjoiMDIxMGVlOWIzM2FiNjE3MTZlMjdkMjUxYmQ0NjVmNGIzNWExYTIzMmUyZGEwMDkwMWMyOTRiZjIyMzUwY2U0OTBkMDk5ZjY0MmI1Mzc1NjEyZGI2M2JhMWYyMDM4NjQ5MmJmMDRkMzRiM2MyMmJjZWI5MDlkMTM0NDFiNTNiNTEzOSI6MTY6IjA1MTI0MGI2Y2MwMDA0ZmE0OGQwMTM0NjcxYzA3OGM3YzhkZWMzYjNlMmYyNWJjMjU2NDQ2NzMzOWRiMzg4NTNkMDZiODVlZWE1YjJkZTM1M2JmZjQyYWMyZTQ2YmM5N2ZhZTZhYzk2MThkYTk1MzdhNWM4ZjU1M2MxZTM1NzYyNTk5MWQ2MTA4ZGNkNzg4NWZiM2EyNTQxM2Y1M2VmY2FkOTQ4Y2IzNWNkOWI5YWU5YzFjNjc2MjZkMTEzZDU3ZGRlNGM1YmVhNzZiYjViYjdkZTk2YzAwZDA3MzcyZTk2ODVhNmQ3NWNmOWQyMzlmYTE0OGQ3MDkzMWI1ZjNmYjAzOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJiMGFkYzRmM2ZlMTFkYTU5Y2U5OTI3NzNkOTA1OTk0M2MwMzA0NjQ5N2VlOWQ5ZjlhMDZkZjExNjZkYjQ2ZDk4ZjU4ZDI3ZWMwNzRjMDJlZWU2Y2JlMjQ0OWM4YjlmYzUwODBjNWMzZjQ0MzMwOTI1MTJlYzQ2YWE3OTM3NDNjOCI6ImY1NDVkNTg5NzU4NWUzZGI3MWFhMGNiOGRhNzZjNTFkMDMyYWU5NjMiOiIwMDk3YjY5OGM2MTY1NjQ1YjMwMzQ4NmZiZjVhMmE0NDc5YzBlZTg1ODg5YjU0MWE2ZjBiODU4ZDZiNjU5N2IxM2I4NTRlYjRmODM5YWYwMzM5OWE4MGQ3OWJkYTY1NzhjODQxZjkwZDY0NTcxNWIyODBkMzcxNDM5OTJkZDE4NmM4MGI5NDliNzc1Y2FlOTczNzBlNGVjOTc0NDMxMzZjNmRhNDg0ZTk3MGZmZGIxMzIzYTIwODQ3ODIxZDNiMTgzODFkZTEzYmI0OWFhZWE2NjUzMGM0YTRiODI3MWYzZWFlMTcyY2QzNjZlMDdlNjYzNmYxMDE5ZDJhMjhhZWQxNWUiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgNF8zCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNzoxNjoiMDI3NDU4YzE5ZWMxNjM2OTE5ZTczNmM5YWYyNWQ2MDlhNTFiOGY1NjFkMTljNmJmNjk0M2RkMWVlMWFiOGE0YTNmMjMyMTAwYmQ0MGI4OGRlY2M2YmEyMzU1NDhiNmVmNzkyYTExYzlkZTgyM2QwYTc5MjJjNzA5NWI2ZWJhNTcwMSI6MTY6IjAyMTBlZTliMzNhYjYxNzE2ZTI3ZDI1MWJkNDY1ZjRiMzVhMWEyMzJlMmRhMDA5MDFjMjk0YmYyMjM1MGNlNDkwZDA5OWY2NDJiNTM3NTYxMmRiNjNiYTFmMjAzODY0OTJiZjA0ZDM0YjNjMjJiY2ViOTA5ZDEzNDQxYjUzYjUxMzkiOjE2OiIwNTEyNDBiNmNjMDAwNGZhNDhkMDEzNDY3MWMwNzhjN2M4ZGVjM2IzZTJmMjViYzI1NjQ0NjczMzlkYjM4ODUzZDA2Yjg1ZWVhNWIyZGUzNTNiZmY0MmFjMmU0NmJjOTdmYWU2YWM5NjE4ZGE5NTM3YTVjOGY1NTNjMWUzNTc2MjU5OTFkNjEwOGRjZDc4ODVmYjNhMjU0MTNmNTNlZmNhZDk0OGNiMzVjZDliOWFlOWMxYzY3NjI2ZDExM2Q1N2RkZTRjNWJlYTc2YmI1YmI3ZGU5NmMwMGQwNzM3MmU5Njg1YTZkNzVjZjlkMjM5ZmExNDhkNzA5MzFiNWYzZmIwMzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiYmY2ZDQyZTcwMTcwN2IxZDAyMDZiMGM4YjQ1YTFjNzI2NDFmZjEyODg5MjE5YTgyYmRlYTk2NWI1ZTc5YTk2YjBkMDE2M2VkOWQ1NzhlYzlhZGEyMGYyZmJjZjFlYTNjNDA4OWQ4MzQxOWJhODFiMGM2MGYzNjA2ZGE5OSI6ImFkOTk3ZmVlZjczMGQ2ZWE3YmU2MGQwZGM1MmU3MmVhY2JmZGQyNzUiOiIwMzAxZjkzNWU5YzQ3YWJjYjQ4YWNiYmUwOTg5NWQ5ZjU5NzFhZjE0ODM5ZGE0ZmY5NTQxN2VlNDUzZDFmZDc3MzE5MDcyYmI3Mjk3ZTFiNTVkNzU2MWNkOWQxYmIyNGMxYTlhMzdjNjE5ODY0MzA4MjQyODA0ODc5ZDg2ZWJkMDAxZGNlNTE4Mzk3NWUxNTA2OTg5YjcwZTVhODM0MzQxNTRkNWNiZmQ2YTI0Nzg3ZTYwZWIwYzY1OGQyYWMxOTMzMDJkMTE5MmM2ZTYyMmQ0YTEyYWQ0YjUzOTIzYmNhMjQ2ZGYzMWM2Mzk1ZTM3NzAyYzZhNzhhZTA4MWZiOWQwNjUiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgNF80Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNzoxNjoiMDI3NDU4YzE5ZWMxNjM2OTE5ZTczNmM5YWYyNWQ2MDlhNTFiOGY1NjFkMTljNmJmNjk0M2RkMWVlMWFiOGE0YTNmMjMyMTAwYmQ0MGI4OGRlY2M2YmEyMzU1NDhiNmVmNzkyYTExYzlkZTgyM2QwYTc5MjJjNzA5NWI2ZWJhNTcwMSI6MTY6IjAyMTBlZTliMzNhYjYxNzE2ZTI3ZDI1MWJkNDY1ZjRiMzVhMWEyMzJlMmRhMDA5MDFjMjk0YmYyMjM1MGNlNDkwZDA5OWY2NDJiNTM3NTYxMmRiNjNiYTFmMjAzODY0OTJiZjA0ZDM0YjNjMjJiY2ViOTA5ZDEzNDQxYjUzYjUxMzkiOjE2OiIwNTEyNDBiNmNjMDAwNGZhNDhkMDEzNDY3MWMwNzhjN2M4ZGVjM2IzZTJmMjViYzI1NjQ0NjczMzlkYjM4ODUzZDA2Yjg1ZWVhNWIyZGUzNTNiZmY0MmFjMmU0NmJjOTdmYWU2YWM5NjE4ZGE5NTM3YTVjOGY1NTNjMWUzNTc2MjU5OTFkNjEwOGRjZDc4ODVmYjNhMjU0MTNmNTNlZmNhZDk0OGNiMzVjZDliOWFlOWMxYzY3NjI2ZDExM2Q1N2RkZTRjNWJlYTc2YmI1YmI3ZGU5NmMwMGQwNzM3MmU5Njg1YTZkNzVjZjlkMjM5ZmExNDhkNzA5MzFiNWYzZmIwMzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZmIyZWYxMTJmNWU3NjZlYjk0MDE5Mjk3OTM0Nzk0ZjdiZTJmNmZjMWM1OGUiOiIxMzY0NTRkZjU3MzBmNzNjODA3YTdlNDBkOGMxYTMxMmFjNWI5ZGQzIjoiMDJkMTEwYWQzMGFmYjcyN2JlYjY5MWRkMGNmMTdkMGFmMWExZTdmYTBjYzA0MGVjMWE0YmEyNmE0MmM1OWQwYTc5NmEyZTIyYzhmMzU3Y2NjOThiNjUxOWFjZWI2ODJlOTQ1ZTYyY2I3MzQ2MTRhNTI5NDA3Y2Q0NTJiZWUzZTQ0ZmVjZTg0MjNjYzE5ZTU1NTQ4YjhiOTk0Yjg0OWM3ZWNkZTQ5MzNlNzYwMzdlMWQwY2U0NDI3NWIwODcxMGM2OGU0MzAxMzBiOTI5NzMwZWQ3N2UwOWIwMTU2NDJjNTU5M2YwNGU0ZmZiOTQxMDc5ODEwMmE4ZTk2ZmZkZmUxMWU0IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDRfNQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjc6MTY6IjAyNzQ1OGMxOWVjMTYzNjkxOWU3MzZjOWFmMjVkNjA5YTUxYjhmNTYxZDE5YzZiZjY5NDNkZDFlZTFhYjhhNGEzZjIzMjEwMGJkNDBiODhkZWNjNmJhMjM1NTQ4YjZlZjc5MmExMWM5ZGU4MjNkMGE3OTIyYzcwOTViNmViYTU3MDEiOjE2OiIwMjEwZWU5YjMzYWI2MTcxNmUyN2QyNTFiZDQ2NWY0YjM1YTFhMjMyZTJkYTAwOTAxYzI5NGJmMjIzNTBjZTQ5MGQwOTlmNjQyYjUzNzU2MTJkYjYzYmExZjIwMzg2NDkyYmYwNGQzNGIzYzIyYmNlYjkwOWQxMzQ0MWI1M2I1MTM5IjoxNjoiMDUxMjQwYjZjYzAwMDRmYTQ4ZDAxMzQ2NzFjMDc4YzdjOGRlYzNiM2UyZjI1YmMyNTY0NDY3MzM5ZGIzODg1M2QwNmI4NWVlYTViMmRlMzUzYmZmNDJhYzJlNDZiYzk3ZmFlNmFjOTYxOGRhOTUzN2E1YzhmNTUzYzFlMzU3NjI1OTkxZDYxMDhkY2Q3ODg1ZmIzYTI1NDEzZjUzZWZjYWQ5NDhjYjM1Y2Q5YjlhZTljMWM2NzYyNmQxMTNkNTdkZGU0YzViZWE3NmJiNWJiN2RlOTZjMDBkMDczNzJlOTY4NWE2ZDc1Y2Y5ZDIzOWZhMTQ4ZDcwOTMxYjVmM2ZiMDM5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjI4Y2NkNDQ3YmI5ZTg1MTY2ZGFiYjllNWI3ZDFhZGFkYzRiOWQzOWYyMDRlOTZkNWU0NDBjZTlhZDkyOGJjMWMyMjg0IjoiYmNhODA1N2Y4MjRiMmVhMjU3ZjI4NjE0MDdlZWY2M2QzMzIwODY4MSI6IjAwZGJiOGE3NDM5ZDkwZWZkOTE5YTM3N2M1NGZhZThmZTExZWM1OGMzYjg1ODM2MmUyM2FkMWI4YTQ0MzEwNzk5MDY2Yjk5MzQ3YWE1MjU2OTFkMmFkYzU4ZDliMDZlMzRmMjg4YzE3MDM5MGM1ZjBlMTFjMGFhMzY0NTk1OWYxOGVlNzllOGYyYmU4ZDdhYzVjMjNkMDYxZjE4ZGQ3NGI4YzVmMmE1OGZjYjVlYjBjNTRmOTlmMDFhODMyNDc1NjgyOTI1MzY1ODMzNDA5NDhkN2E4Yzk3YzRhY2QxZTk4ZDFlMjlkYzMyMGU5N2EyNjA1MzJhOGFhN2E3NThhMWVjMiI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA0XzYKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI3OjE2OiIwMjc0NThjMTllYzE2MzY5MTllNzM2YzlhZjI1ZDYwOWE1MWI4ZjU2MWQxOWM2YmY2OTQzZGQxZWUxYWI4YTRhM2YyMzIxMDBiZDQwYjg4ZGVjYzZiYTIzNTU0OGI2ZWY3OTJhMTFjOWRlODIzZDBhNzkyMmM3MDk1YjZlYmE1NzAxIjoxNjoiMDIxMGVlOWIzM2FiNjE3MTZlMjdkMjUxYmQ0NjVmNGIzNWExYTIzMmUyZGEwMDkwMWMyOTRiZjIyMzUwY2U0OTBkMDk5ZjY0MmI1Mzc1NjEyZGI2M2JhMWYyMDM4NjQ5MmJmMDRkMzRiM2MyMmJjZWI5MDlkMTM0NDFiNTNiNTEzOSI6MTY6IjA1MTI0MGI2Y2MwMDA0ZmE0OGQwMTM0NjcxYzA3OGM3YzhkZWMzYjNlMmYyNWJjMjU2NDQ2NzMzOWRiMzg4NTNkMDZiODVlZWE1YjJkZTM1M2JmZjQyYWMyZTQ2YmM5N2ZhZTZhYzk2MThkYTk1MzdhNWM4ZjU1M2MxZTM1NzYyNTk5MWQ2MTA4ZGNkNzg4NWZiM2EyNTQxM2Y1M2VmY2FkOTQ4Y2IzNWNkOWI5YWU5YzFjNjc2MjZkMTEzZDU3ZGRlNGM1YmVhNzZiYjViYjdkZTk2YzAwZDA3MzcyZTk2ODVhNmQ3NWNmOWQyMzlmYTE0OGQ3MDkzMWI1ZjNmYjAzOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJmMjIyNDI3NTFlYzZiMSI6IjJlN2UxZTE3ZjY0N2I1ZGRkMDMzZTE1NDcyZjkwZjY4MTJmM2FjNGUiOiIwMGE1ZmZhNDc2OGM4YmJlY2FlZTJkYjc3ZThmMmVlYzk5NTk1OTMzNTQ1NTIwODM1ZTViYTdkYjk0OTNkM2UxN2NkZGVmZTZhNWY1Njc2MjQ0NzE5MDhkYjRlMmQ4M2EwZmJlZTYwNjA4ZmM4NDA0OTUwM2IyMjM0YTA3ZGM4M2IyN2IyMjg0N2FkODkyMGZmNDJmNjc0ZWY3OWI3NjI4MGIwMDIzM2QyYjUxYjhjYjI3MDNhOWQ0MmJmYmM4MjUwYzk2ZWMzMmMwNTFlNTdmMWI0YmE1MjhkYjg5YzM3ZTRjNTRlMjdlNmU2NGFjNjk2MzVhZTg4N2Q5NTQxNjE5YTkiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgNV8xCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyODoxNjoiMDNiMGQzOTYyZjZkMTc1NDljYmZjYTExMjk0MzQ4ZGNmMGU3ZTM5ZjhjMmJjNjgyNGYyMTY0YjYwNmQ2ODc4NjBkYWUxZTYzMjM5M2NmZWRmNTEzMjI4MjI5MDY5ZTJmNjBlNGFjZDdlNjMzYTQzNjA2M2Y4MjM4NWY0ODk5MzcwNyI6MTY6IjAyZTRjMzJlMmY1MTcyNjliNzA3MjMwOWYwMGMwZTMxMzY1ZjdjZTI4YjIzNmI4MjkxMmRmMjM5YWJmMzk1NzJjZjBlZDYwNGIwMjk4MmU1MzU2NGM1MmQ2YTA1Mzk3ZGU1YzA1MmEyZmRkYzE0MWVmNzE4OTgzNjM0NmFlYjMzMWYiOjE2OiIwYWFkZjNmOWMxMjVlNWQ4OTFmMzFhYzQ0OGU5OTNkZWZlNTgwZjgwMmI0NWY5ZDdmMjJiYTUwMjFlOWM0NzU3NmI1YTFlNjgwMzFiYTlkYjRlNmRhYmU0ZDk2YTFkNmYzZDI2NzI2OGNmZjQwODAwNWYxMThlZmNhZGI5OTg4OGQxYzIzNDQ2NzE2NmIyYTJiODQ5YTA1YTg4OWMwNjBhYzBkYTBjNWZhZThiNTVmMzA5YmE2MmU3MDM3NDJmYTAzMjZmMmQxMGIwMTEwMjE0ODlmZjQ5Nzc3MDE5MGQ4OTVmZDM5ZjUyMjkzYzM5ZWZkNzNhNjk4YmRhYjlmMTBlZDkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiYWY3MWE5MDFlM2E2MWQzMTMyZjBmYzFmZGI0NzRmOWVhNjU3OTI1N2ZmYzI0ZDE2NDE3MDE0NWIzZGJkZTgiOiI0NGM5MmUyODNmNzdiOTQ5OWM2MDNkOTYzNjYwYzg3ZDJmOTM5NDYxIjoiMDM2MDQ2YTRhNDdkOWVkM2JhOWE4OTEzOWMxMDUwMzhlYjc0OTJiMDVhNWQ2OGJmZDUzYWNjZmY0NTk3ZjdhNjg2NTFiNDdiNGE0NjI3ZDkyN2U0ODVlZWQ3YjQ1NjY0MjBlOGI0MDk4NzllNWQ2MDZlYWUyNTFkMjJhNWRmNzk5Zjc5MjBiZmMxMTdiOTkyNTcyYTUzYjEyNjMxNDZiY2VhMDMzODVjYzVlODUzYzlhMTAxYzhjM2UxYmRhMzFhNTE5ODA3NDk2YzZjYjVlNWVmYjQwODgyM2EzNTJiOGZhMDY2MWZiNjY0ZWZhZGQ1OTNkZWI5OWZmZjVlZDAwMGU1IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDVfMgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjg6MTY6IjAzYjBkMzk2MmY2ZDE3NTQ5Y2JmY2ExMTI5NDM0OGRjZjBlN2UzOWY4YzJiYzY4MjRmMjE2NGI2MDZkNjg3ODYwZGFlMWU2MzIzOTNjZmVkZjUxMzIyODIyOTA2OWUyZjYwZTRhY2Q3ZTYzM2E0MzYwNjNmODIzODVmNDg5OTM3MDciOjE2OiIwMmU0YzMyZTJmNTE3MjY5YjcwNzIzMDlmMDBjMGUzMTM2NWY3Y2UyOGIyMzZiODI5MTJkZjIzOWFiZjM5NTcyY2YwZWQ2MDRiMDI5ODJlNTM1NjRjNTJkNmEwNTM5N2RlNWMwNTJhMmZkZGMxNDFlZjcxODk4MzYzNDZhZWIzMzFmIjoxNjoiMGFhZGYzZjljMTI1ZTVkODkxZjMxYWM0NDhlOTkzZGVmZTU4MGY4MDJiNDVmOWQ3ZjIyYmE1MDIxZTljNDc1NzZiNWExZTY4MDMxYmE5ZGI0ZTZkYWJlNGQ5NmExZDZmM2QyNjcyNjhjZmY0MDgwMDVmMTE4ZWZjYWRiOTk4ODhkMWMyMzQ0NjcxNjZiMmEyYjg0OWEwNWE4ODljMDYwYWMwZGEwYzVmYWU4YjU1ZjMwOWJhNjJlNzAzNzQyZmEwMzI2ZjJkMTBiMDExMDIxNDg5ZmY0OTc3NzAxOTBkODk1ZmQzOWY1MjI5M2MzOWVmZDczYTY5OGJkYWI5ZjEwZWQ5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImEzYjg0NGEwODIzOWE4YWM0MTYwNWFmMTdhNmNmZGE0ZDM1MDEzNjU4NTkwM2E0MTdhNzkyNjg3NjA1MTlhNGI0YWMzMzAzZWM3M2YwZjg3Y2ZiMzIzOTkiOiJjYjI4ZjU4NjA2NTlmY2VlZTQ5YzNlZWFmY2U2MjVhNzA4MDNiZDMyIjoiMDNkNmViNjU0ZWRjZTYxNWJjNTlmNDU1MjY1ZWQ0ZTVhMTgyMjNjYmI5YmU0ZTQwNjliNDczODA0ZDVkZTk2ZjU0ZGNhYWE2MDNkMDQ5YzVkOTRhYTE0NzBkZmNkMjI1NDA2NmI3YzdiNjFmZjFmNmY2NzcwZTMyMTVjNTEzOTlmZDRlMzRlYzUwODJiYzQ4ZjA4OTg0MGFkMDQzNTRhZTY2ZGMwZjFiZDE4ZTQ2MWEzM2NjMTI1OGI0NDNhMjgzN2E2ZGYyNjc1OWFhMjMwMjMzNDk4NmY4NzM4MGM5Y2M5ZDUzYmU5Zjk5NjA1ZDJjOWE5N2RhN2IwOTE1YTRhN2FkIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDVfMworcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjg6MTY6IjAzYjBkMzk2MmY2ZDE3NTQ5Y2JmY2ExMTI5NDM0OGRjZjBlN2UzOWY4YzJiYzY4MjRmMjE2NGI2MDZkNjg3ODYwZGFlMWU2MzIzOTNjZmVkZjUxMzIyODIyOTA2OWUyZjYwZTRhY2Q3ZTYzM2E0MzYwNjNmODIzODVmNDg5OTM3MDciOjE2OiIwMmU0YzMyZTJmNTE3MjY5YjcwNzIzMDlmMDBjMGUzMTM2NWY3Y2UyOGIyMzZiODI5MTJkZjIzOWFiZjM5NTcyY2YwZWQ2MDRiMDI5ODJlNTM1NjRjNTJkNmEwNTM5N2RlNWMwNTJhMmZkZGMxNDFlZjcxODk4MzYzNDZhZWIzMzFmIjoxNjoiMGFhZGYzZjljMTI1ZTVkODkxZjMxYWM0NDhlOTkzZGVmZTU4MGY4MDJiNDVmOWQ3ZjIyYmE1MDIxZTljNDc1NzZiNWExZTY4MDMxYmE5ZGI0ZTZkYWJlNGQ5NmExZDZmM2QyNjcyNjhjZmY0MDgwMDVmMTE4ZWZjYWRiOTk4ODhkMWMyMzQ0NjcxNjZiMmEyYjg0OWEwNWE4ODljMDYwYWMwZGEwYzVmYWU4YjU1ZjMwOWJhNjJlNzAzNzQyZmEwMzI2ZjJkMTBiMDExMDIxNDg5ZmY0OTc3NzAxOTBkODk1ZmQzOWY1MjI5M2MzOWVmZDczYTY5OGJkYWI5ZjEwZWQ5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjMwOGIwZWNiZDJjNzZjYjc3ZmM2ZjcwYzVlZGQyMzNmZDJmMjA5MjlkNjI5ZjAyNjk1M2JiNjJhOGY0YTNhMzE0YmRlMTk1ZGU4NWI1ZjgxNmRhMmFhYjA3NGQyNmNiNmFjZGRmMzIzYWUzYjljNjc4YWMzY2YxMmZiZGRlNyI6IjIyODVmNDBkNzcwNDgyZjlhOWVmYTJjNzJjYjNhYzU1NzE2ZGMwY2EiOiIwNzcwOTUyMTgxNjQ5ZjlmOWYwN2ZmNjI2ZmYzYTIyYzM1YzQ2MjQ0M2Q5MDVkNDU2YTlmZDBiZmY0M2NhYzJjYTdhOWY1NTRlOTQ3OGI5YWNjM2FjODM4YjAyMDQwZmZkM2UxODQ3ZGUyZTQyNTM5MjlmOWRkOWVlNDA0NDMyNWE5YjA1Y2FiYjgwOGIyZWU4NDBkMzRlMTVkMTA1YTNmMWY3YjI3Njk1YTFhMDdhMmQ3M2ZlMDhlY2FhYTNjOWM5ZDRkNWE4OWZmODkwZDU0NzI3ZDdhZTQwYzBlYzFhOGRkODYxNjVkOGVlMmM2MzY4MTQxMDE2YTQ4YjU1YjY5NjciOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgNV80Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyODoxNjoiMDNiMGQzOTYyZjZkMTc1NDljYmZjYTExMjk0MzQ4ZGNmMGU3ZTM5ZjhjMmJjNjgyNGYyMTY0YjYwNmQ2ODc4NjBkYWUxZTYzMjM5M2NmZWRmNTEzMjI4MjI5MDY5ZTJmNjBlNGFjZDdlNjMzYTQzNjA2M2Y4MjM4NWY0ODk5MzcwNyI6MTY6IjAyZTRjMzJlMmY1MTcyNjliNzA3MjMwOWYwMGMwZTMxMzY1ZjdjZTI4YjIzNmI4MjkxMmRmMjM5YWJmMzk1NzJjZjBlZDYwNGIwMjk4MmU1MzU2NGM1MmQ2YTA1Mzk3ZGU1YzA1MmEyZmRkYzE0MWVmNzE4OTgzNjM0NmFlYjMzMWYiOjE2OiIwYWFkZjNmOWMxMjVlNWQ4OTFmMzFhYzQ0OGU5OTNkZWZlNTgwZjgwMmI0NWY5ZDdmMjJiYTUwMjFlOWM0NzU3NmI1YTFlNjgwMzFiYTlkYjRlNmRhYmU0ZDk2YTFkNmYzZDI2NzI2OGNmZjQwODAwNWYxMThlZmNhZGI5OTg4OGQxYzIzNDQ2NzE2NmIyYTJiODQ5YTA1YTg4OWMwNjBhYzBkYTBjNWZhZThiNTVmMzA5YmE2MmU3MDM3NDJmYTAzMjZmMmQxMGIwMTEwMjE0ODlmZjQ5Nzc3MDE5MGQ4OTVmZDM5ZjUyMjkzYzM5ZWZkNzNhNjk4YmRhYjlmMTBlZDkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMTVjNWI5ZWUxMTg1IjoiNDlmYTQ1ZDNhNzhkZDEwZGZkNTc3Mzk5ZDFlYjAwYWY3ZWVkNTUxMyI6IjA4MTJiNzY3NjhlYmNiNjQyZDA0MDI1OGU1ZjQ0NDFhMDE4NTIxYmQ5NjY4N2U2YzVlODk5ZmNkNmMxNzU4OGZmNTlhODJjYzhhZTAzYTRiNDViMzEyOTlhZjE3ODhjMzI5ZjdkY2QyODVmOGNmNGNlZDgyNjA2Yjk3NjEyNjcxYTQ1YmVkY2ExMzM0NDIxNDRkMTYxN2QxMTRmODAyODU3ZjBmOWQ3Mzk3NTFjNTdhM2Y5ZWU0MDA5MTJjNjFlMmU2OTkyYmUwMzFhNDNkZDQ4ZmE2YmExNGVlZjdjNDIyYjVlZGM0ZTdhZmEwNGZkZDM4ZjQwMmQxYzhiYjcxOWFiZiI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA1XzUKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI4OjE2OiIwM2IwZDM5NjJmNmQxNzU0OWNiZmNhMTEyOTQzNDhkY2YwZTdlMzlmOGMyYmM2ODI0ZjIxNjRiNjA2ZDY4Nzg2MGRhZTFlNjMyMzkzY2ZlZGY1MTMyMjgyMjkwNjllMmY2MGU0YWNkN2U2MzNhNDM2MDYzZjgyMzg1ZjQ4OTkzNzA3IjoxNjoiMDJlNGMzMmUyZjUxNzI2OWI3MDcyMzA5ZjAwYzBlMzEzNjVmN2NlMjhiMjM2YjgyOTEyZGYyMzlhYmYzOTU3MmNmMGVkNjA0YjAyOTgyZTUzNTY0YzUyZDZhMDUzOTdkZTVjMDUyYTJmZGRjMTQxZWY3MTg5ODM2MzQ2YWViMzMxZiI6MTY6IjBhYWRmM2Y5YzEyNWU1ZDg5MWYzMWFjNDQ4ZTk5M2RlZmU1ODBmODAyYjQ1ZjlkN2YyMmJhNTAyMWU5YzQ3NTc2YjVhMWU2ODAzMWJhOWRiNGU2ZGFiZTRkOTZhMWQ2ZjNkMjY3MjY4Y2ZmNDA4MDA1ZjExOGVmY2FkYjk5ODg4ZDFjMjM0NDY3MTY2YjJhMmI4NDlhMDVhODg5YzA2MGFjMGRhMGM1ZmFlOGI1NWYzMDliYTYyZTcwMzc0MmZhMDMyNmYyZDEwYjAxMTAyMTQ4OWZmNDk3NzcwMTkwZDg5NWZkMzlmNTIyOTNjMzllZmQ3M2E2OThiZGFiOWYxMGVkOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIyMTAyNmU2ODAwYzdmYTcyOGZjYWFiYTBkMTk2YWUyOGQ3YTJhYzRmZmQ4YWJjZTc5NGYwOTg1ZjYwYzhhNjczNzI3NzM2NWQzZmVhMTFkYjg5MjNhMjAyOWEiOiJmMDI4NzQxMzIzNGNjNTAzNDcyNGEwOTRjNDU4NmI4N2FmZjEzM2ZjIjoiMDdiNjBlMTRlYzk1NGJmZDI5ZTYwZDAwNDdlNzg5ZjUxZDU3MTg2YzYzNTg5OTAzMzA2NzkzY2VkM2Y2ODI0MWM3NDM1MjlhYmE2YTYzNzRmOTJlMTllMDE2M2VmYTMzNjk3ZTE5NmY3NjYxZGZhYWE0N2FhYzZiZGU1ZTUxZGViNTA3YzcyYzU4OWEyY2ExNjkzZDk2YjE0NjAzODEyNDliMmNkYjllYWM0NDc2OWYyNDg5YzVkM2QyZjk5ZjBlZTNjN2VlNWJmNjRhNWFjNzljNDJiZDQzM2YxNDliZThjYjU5NTQ4MzYxNjQwNTk1NTEzYzk3YWY3YmMyNTA5NzIzIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDVfNgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjg6MTY6IjAzYjBkMzk2MmY2ZDE3NTQ5Y2JmY2ExMTI5NDM0OGRjZjBlN2UzOWY4YzJiYzY4MjRmMjE2NGI2MDZkNjg3ODYwZGFlMWU2MzIzOTNjZmVkZjUxMzIyODIyOTA2OWUyZjYwZTRhY2Q3ZTYzM2E0MzYwNjNmODIzODVmNDg5OTM3MDciOjE2OiIwMmU0YzMyZTJmNTE3MjY5YjcwNzIzMDlmMDBjMGUzMTM2NWY3Y2UyOGIyMzZiODI5MTJkZjIzOWFiZjM5NTcyY2YwZWQ2MDRiMDI5ODJlNTM1NjRjNTJkNmEwNTM5N2RlNWMwNTJhMmZkZGMxNDFlZjcxODk4MzYzNDZhZWIzMzFmIjoxNjoiMGFhZGYzZjljMTI1ZTVkODkxZjMxYWM0NDhlOTkzZGVmZTU4MGY4MDJiNDVmOWQ3ZjIyYmE1MDIxZTljNDc1NzZiNWExZTY4MDMxYmE5ZGI0ZTZkYWJlNGQ5NmExZDZmM2QyNjcyNjhjZmY0MDgwMDVmMTE4ZWZjYWRiOTk4ODhkMWMyMzQ0NjcxNjZiMmEyYjg0OWEwNWE4ODljMDYwYWMwZGEwYzVmYWU4YjU1ZjMwOWJhNjJlNzAzNzQyZmEwMzI2ZjJkMTBiMDExMDIxNDg5ZmY0OTc3NzAxOTBkODk1ZmQzOWY1MjI5M2MzOWVmZDczYTY5OGJkYWI5ZjEwZWQ5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjU0MWUzN2I2OGI2Yzg4NzJiODRjMDIiOiJkOWZiYTQ1Yzk2ZjIxZTZlMjZkMjllYjJjZGNiNjU4NWJlOWNiMzQxIjoiMDhjMzZkNGRkYTMzNDIzYjJlZDY4MzBkODVmNjQxMWJhMWRjZjQ3MGExZmFlMGViZWZlZTdjMDg5ZjI1NmNlZjc0Y2I5NmVhNjljMzhmNjBmMzlhYmVlNDQxMjliY2I0YzkyZGU3Zjc5NzYyM2IyMDA3NGUzZDljMjg5OTcwMWVkOTA3MWUxZWZhMGJkZDg0ZDRjM2U1MTMwMzAyZDhmMDI0MGJhYmE0Yjg0YTcxY2MwMzJmMjIzNWE1ZmYwZmFlMjc3YzNlOGY5MTEyYmVmNDRjOWFlMjBkMTc1ZmM5YTQwNThiZmM5MzBiYTMxYjAyZTJlNGY0NDQ0ODM3MTBmMjRhIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDZfMQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjk6MTY6IjA0YTZjZThiNzM1OGRmYTY5YmRjZjc0MjYxNzAwNWFmYjUzODVmNWYzYTU4YTI0ZWY3NGEyMmE4YzA1Y2I3Y2MzOGViZDRjYzlkOWE5ZDc4OWE2MmNkMGY2MGYwY2I5NDFkMzQyM2M5NjkyZWZhNGZlM2FkZmYyOTBjNDc0OWEzOGIiOjE2OiIwNDA0YzlhODAzMzcxZmVkYjRjNWJlMzlmM2MwMGIwMDllNWUwOGE2M2JlMWU0MDAzNWNkYWNhNTAxMWNjNzAxY2Y3ZWViY2I5OWYwZmZlMTdjZmQwYTRiZjdiZWZkMmRkNTM2YWM5NDZkYjc5N2ZkYmM0YWJlOGYyOTM0OWI5MWVkIjoxNjoiMTJiMTdmNmRhZDJlY2QxOWZmNDZkYzEzZjc4NjBmMDllMGUwY2ZiNjc3YjM4YTUyNTkyMzA1Y2VhZjAyMmMxNjZkYjkwZDA0YWMyOWUzM2Y3ZGQxMmQ5ZmFmNjZlMDgxNmJiNjNlYWQyNjdjYzdkNDZjMTdjMzdiZTIxNGJjYTJhMjJkNzIzYTY0ZTQ0NDA3NDM2YjZmYzk2NTcyOWFlZmMyNTU0ZjM3NmNkNWRjZWE2ODI5Mzc4MGE2MmJmMzlkMDAyOTQ4NWExNjBiYmI5ZTVkYzA5NzJkMjFhNTA0ZjUyZTVlZTAyOGFhNDE2MzMyZjUxMGIyZTljZmY1ZjcyMmFmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjQwNDZjYThiYWEzMzQ3Y2EyN2Y0OWUwZDgxZjljYzFkNzFiZTliYTUxN2Q0IjoiZGQwZjZjZmU0MTVlODhlNWE0NjlhNTFmYmJhNmRmZDQwYWRiNDM4NCI6IjA2MzBlZWJjZDI4NTZjMjRmNzk4ODA2ZTQxZjllNjczNDVlZGE5Y2VkYTM4NmFjYzlmYWNhZWExZWVlZDA2YWNlNTgzNzA5NzE4ZDlkMTY5ZmFkZjQxNGQ1Yzc2ZjkyOTk2ODMzZWYzMDViNzViMWU0Yjk1ZjY2MmEyMGZhZWRjM2JhZTBjNDgyN2E4YmY4YTg4ZWRiZDU3ZWMyMDNhMjdhODQxZjAyZTQzYTYxNWJhYjFhOGNhYzA3MDFkZTM0ZGViZGVmNjJhMDg4MDg5YjU1ZWMzNmVhNzUyMmZkM2VjOGQwNmI2YTA3M2U2ZGY4MzMxNTNiYzBhZWZkOTNiZDFhMyI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA2XzIKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI5OjE2OiIwNGE2Y2U4YjczNThkZmE2OWJkY2Y3NDI2MTcwMDVhZmI1Mzg1ZjVmM2E1OGEyNGVmNzRhMjJhOGMwNWNiN2NjMzhlYmQ0Y2M5ZDlhOWQ3ODlhNjJjZDBmNjBmMGNiOTQxZDM0MjNjOTY5MmVmYTRmZTNhZGZmMjkwYzQ3NDlhMzhiIjoxNjoiMDQwNGM5YTgwMzM3MWZlZGI0YzViZTM5ZjNjMDBiMDA5ZTVlMDhhNjNiZTFlNDAwMzVjZGFjYTUwMTFjYzcwMWNmN2VlYmNiOTlmMGZmZTE3Y2ZkMGE0YmY3YmVmZDJkZDUzNmFjOTQ2ZGI3OTdmZGJjNGFiZThmMjkzNDliOTFlZCI6MTY6IjEyYjE3ZjZkYWQyZWNkMTlmZjQ2ZGMxM2Y3ODYwZjA5ZTBlMGNmYjY3N2IzOGE1MjU5MjMwNWNlYWYwMjJjMTY2ZGI5MGQwNGFjMjllMzNmN2RkMTJkOWZhZjY2ZTA4MTZiYjYzZWFkMjY3Y2M3ZDQ2YzE3YzM3YmUyMTRiY2EyYTIyZDcyM2E2NGU0NDQwNzQzNmI2ZmM5NjU3MjlhZWZjMjU1NGYzNzZjZDVkY2VhNjgyOTM3ODBhNjJiZjM5ZDAwMjk0ODVhMTYwYmJiOWU1ZGMwOTcyZDIxYTUwNGY1MmU1ZWUwMjhhYTQxNjMzMmY1MTBiMmU5Y2ZmNWY3MjJhZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI1Y2M3MmM2MDIzMWRmMDNiM2Q0MGY5YjU3OTMxYmMzMTEwOWY5NzI1MjdmMjhiMTllNzQ4MGM3Mjg4Y2IzYzkyYjIyNTEyMjE0ZTRiZTZjOTE0NzkyZGRhYmRmNTdmYWE4YWE3IjoiOGQxNGJkOTQ2YTEzNTExNDhmNWNhZTJlZDlhMGM2NTNlODVlYmQ4NSI6IjBlYmMzNzM3NjE3M2E0ZmQyZjg5Y2M1NWMyY2E2MmIyNmIxMWQ1MWMzYzdjZTQ5ZTg4NDVmNzRlNzYwNzMxN2M0MzZiYzhkMjNiOTY2N2RmZWI5ZDA4NzIzNGI0N2JjNjgzNzE3NWFlNWMwNTU5ZjZiODFkN2QyMjQxNmQzZTUwZjRhYzUzM2Q4ZjA4MTJmMmRiOWU3OTFmZTljNzc1YWM4YjZhZDBmNTM1YWQ5Y2ViMjNhNGEwMjAxNGM1OGFiM2Y4ZDMxNjE0OTlhMjYwZjM5MzQ4ZTcxNGFlMmExZDM0NDMyMDhmZDhiNzIyY2NmZGZiMzkzZTk4MDExZjk5ZTYzZiI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA2XzMKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI5OjE2OiIwNGE2Y2U4YjczNThkZmE2OWJkY2Y3NDI2MTcwMDVhZmI1Mzg1ZjVmM2E1OGEyNGVmNzRhMjJhOGMwNWNiN2NjMzhlYmQ0Y2M5ZDlhOWQ3ODlhNjJjZDBmNjBmMGNiOTQxZDM0MjNjOTY5MmVmYTRmZTNhZGZmMjkwYzQ3NDlhMzhiIjoxNjoiMDQwNGM5YTgwMzM3MWZlZGI0YzViZTM5ZjNjMDBiMDA5ZTVlMDhhNjNiZTFlNDAwMzVjZGFjYTUwMTFjYzcwMWNmN2VlYmNiOTlmMGZmZTE3Y2ZkMGE0YmY3YmVmZDJkZDUzNmFjOTQ2ZGI3OTdmZGJjNGFiZThmMjkzNDliOTFlZCI6MTY6IjEyYjE3ZjZkYWQyZWNkMTlmZjQ2ZGMxM2Y3ODYwZjA5ZTBlMGNmYjY3N2IzOGE1MjU5MjMwNWNlYWYwMjJjMTY2ZGI5MGQwNGFjMjllMzNmN2RkMTJkOWZhZjY2ZTA4MTZiYjYzZWFkMjY3Y2M3ZDQ2YzE3YzM3YmUyMTRiY2EyYTIyZDcyM2E2NGU0NDQwNzQzNmI2ZmM5NjU3MjlhZWZjMjU1NGYzNzZjZDVkY2VhNjgyOTM3ODBhNjJiZjM5ZDAwMjk0ODVhMTYwYmJiOWU1ZGMwOTcyZDIxYTUwNGY1MmU1ZWUwMjhhYTQxNjMzMmY1MTBiMmU5Y2ZmNWY3MjJhZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJiMjBlNjUxMzAzMDkyZjRiY2NiNDMwNzBjMGY4NmQyMzA0OTM2MmVkOTY2NDJmYzU2MzJjMjdkYjRhNTJlM2Q4MzFmMmFiMDY4YjIzYjE0OTg3OWMwMDJmNmJmM2ZlZWU5NzU5MTExMjU2MmMiOiI2YzA3NWJjNDU1MjBmMTY1YzBiZjVlYTRjNWRmMTkxYmM5ZWYwZTQ0IjoiMGE5OGJmMTA5MzYxOTM5NDQzNmNmNjhkOGYzOGUyZjE1OGZkZThlYTU0ZjM0MzVmMjM5YjhkMDZiODMyMTg0NDIwMjQ3NmFlZWQ5NjAwOTQ5MjQ4MGNlM2E4ZDcwNTQ5OGM0YzhjNjhmMDE1MDFkYzgxZGI2MDhmNjAwODczNTBjOGMzYjBiZDJlOWVmNmE4MTQ1OGI3YzgwMWI4OWYyZTRmZTk5ZDQ5MDBiYTZhNGI1ZTVhOTZkODY1ZGM2NzZjNzc1NTkyODc5NDEzMGQ2MjgwYTgxNjBhMTkwZjJkZjNlYTdjZjlhYTAyNzFkODhlOWU2OTA1ZWNmMWM1MTUyZDY1IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDZfNAorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjk6MTY6IjA0YTZjZThiNzM1OGRmYTY5YmRjZjc0MjYxNzAwNWFmYjUzODVmNWYzYTU4YTI0ZWY3NGEyMmE4YzA1Y2I3Y2MzOGViZDRjYzlkOWE5ZDc4OWE2MmNkMGY2MGYwY2I5NDFkMzQyM2M5NjkyZWZhNGZlM2FkZmYyOTBjNDc0OWEzOGIiOjE2OiIwNDA0YzlhODAzMzcxZmVkYjRjNWJlMzlmM2MwMGIwMDllNWUwOGE2M2JlMWU0MDAzNWNkYWNhNTAxMWNjNzAxY2Y3ZWViY2I5OWYwZmZlMTdjZmQwYTRiZjdiZWZkMmRkNTM2YWM5NDZkYjc5N2ZkYmM0YWJlOGYyOTM0OWI5MWVkIjoxNjoiMTJiMTdmNmRhZDJlY2QxOWZmNDZkYzEzZjc4NjBmMDllMGUwY2ZiNjc3YjM4YTUyNTkyMzA1Y2VhZjAyMmMxNjZkYjkwZDA0YWMyOWUzM2Y3ZGQxMmQ5ZmFmNjZlMDgxNmJiNjNlYWQyNjdjYzdkNDZjMTdjMzdiZTIxNGJjYTJhMjJkNzIzYTY0ZTQ0NDA3NDM2YjZmYzk2NTcyOWFlZmMyNTU0ZjM3NmNkNWRjZWE2ODI5Mzc4MGE2MmJmMzlkMDAyOTQ4NWExNjBiYmI5ZTVkYzA5NzJkMjFhNTA0ZjUyZTVlZTAyOGFhNDE2MzMyZjUxMGIyZTljZmY1ZjcyMmFmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjY4NGUzMDM4YzVjMDQxZjciOiIzYmJjM2JkNjYzN2RmZTEyODQ2OTAxMDI5YmY1YjBjMDcxMDM0MzljIjoiMDA4ZTdhNjdjYWNmYjVjNGUyNGJlYzdkZWUxNDkxMTdmMTk1OThjZThjNDU4MDhmZWY4OGM2MDhmZjljZDZlNjk1MjYzYjlhM2MwYWQ0YjhiYTRjOTUyMzhlOTZhODQyMmI4NTM1NjI5YzhkNTM4MjM3NDQ3OWFkMTNmYTM5OTc0YjI0MmY5YTc1OWVlYWY5YzgzYWQ1YThjYTE4OTQwYTAxNjJiYTc1NTg3NmRmMjYzZjRiZDUwYzY1MjVjNTYwOTAyNjdjMWYwZTA5Y2UwODk5YTBjZjM1OWU4ODEyMGFiZDliZjg5MzQ0NWIzY2FlNzdkMzYwNzM1OWFlOWE1MmY4IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDZfNQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjk6MTY6IjA0YTZjZThiNzM1OGRmYTY5YmRjZjc0MjYxNzAwNWFmYjUzODVmNWYzYTU4YTI0ZWY3NGEyMmE4YzA1Y2I3Y2MzOGViZDRjYzlkOWE5ZDc4OWE2MmNkMGY2MGYwY2I5NDFkMzQyM2M5NjkyZWZhNGZlM2FkZmYyOTBjNDc0OWEzOGIiOjE2OiIwNDA0YzlhODAzMzcxZmVkYjRjNWJlMzlmM2MwMGIwMDllNWUwOGE2M2JlMWU0MDAzNWNkYWNhNTAxMWNjNzAxY2Y3ZWViY2I5OWYwZmZlMTdjZmQwYTRiZjdiZWZkMmRkNTM2YWM5NDZkYjc5N2ZkYmM0YWJlOGYyOTM0OWI5MWVkIjoxNjoiMTJiMTdmNmRhZDJlY2QxOWZmNDZkYzEzZjc4NjBmMDllMGUwY2ZiNjc3YjM4YTUyNTkyMzA1Y2VhZjAyMmMxNjZkYjkwZDA0YWMyOWUzM2Y3ZGQxMmQ5ZmFmNjZlMDgxNmJiNjNlYWQyNjdjYzdkNDZjMTdjMzdiZTIxNGJjYTJhMjJkNzIzYTY0ZTQ0NDA3NDM2YjZmYzk2NTcyOWFlZmMyNTU0ZjM3NmNkNWRjZWE2ODI5Mzc4MGE2MmJmMzlkMDAyOTQ4NWExNjBiYmI5ZTVkYzA5NzJkMjFhNTA0ZjUyZTVlZTAyOGFhNDE2MzMyZjUxMGIyZTljZmY1ZjcyMmFmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjMyNDg4Y2IyNjJkMDQxZDZlNGRkMzVmOTg3YmYzY2E2OTZkYjFmMDZhYzI5YTQ0NjkzIjoiYjQ2YjQxODkzZThiZWYzMjZmNjc1OTM4M2E4MzA3MWRhZTdmY2FiYyI6IjAwMDAzNDc0NDE2YzdiNjhiZGY5NjFjMzg1NzM3OTQ0ZDdmMWY0MGNiMzk1MzQzYzY5M2NjMGI0ZmU2M2IzMWZlZGYxZWFlZWFjOWNjYzA2NzhiMzFkYzMyZTA5Nzc0ODk1MTRjNGYwOTA4NWY2Mjk4YTk2NTNmMDFhZWE0MDQ1ZmY1ODJlZTg4N2JlMjZhZTU3NWI3M2VlZjdmMzc3NDkyMWUzNzVhM2QxOWFkZGEwY2EzMWFhMTg0OTg4N2MxZjQyY2FjOTY3N2Y3YTJmNGU5MjNmNmU1YTg2OGIzOGMwODRlZjE4NzU5NGRjOWY3ZjA0OGZlYTJlMDI5NTUzODRhYiI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA2XzYKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI5OjE2OiIwNGE2Y2U4YjczNThkZmE2OWJkY2Y3NDI2MTcwMDVhZmI1Mzg1ZjVmM2E1OGEyNGVmNzRhMjJhOGMwNWNiN2NjMzhlYmQ0Y2M5ZDlhOWQ3ODlhNjJjZDBmNjBmMGNiOTQxZDM0MjNjOTY5MmVmYTRmZTNhZGZmMjkwYzQ3NDlhMzhiIjoxNjoiMDQwNGM5YTgwMzM3MWZlZGI0YzViZTM5ZjNjMDBiMDA5ZTVlMDhhNjNiZTFlNDAwMzVjZGFjYTUwMTFjYzcwMWNmN2VlYmNiOTlmMGZmZTE3Y2ZkMGE0YmY3YmVmZDJkZDUzNmFjOTQ2ZGI3OTdmZGJjNGFiZThmMjkzNDliOTFlZCI6MTY6IjEyYjE3ZjZkYWQyZWNkMTlmZjQ2ZGMxM2Y3ODYwZjA5ZTBlMGNmYjY3N2IzOGE1MjU5MjMwNWNlYWYwMjJjMTY2ZGI5MGQwNGFjMjllMzNmN2RkMTJkOWZhZjY2ZTA4MTZiYjYzZWFkMjY3Y2M3ZDQ2YzE3YzM3YmUyMTRiY2EyYTIyZDcyM2E2NGU0NDQwNzQzNmI2ZmM5NjU3MjlhZWZjMjU1NGYzNzZjZDVkY2VhNjgyOTM3ODBhNjJiZjM5ZDAwMjk0ODVhMTYwYmJiOWU1ZGMwOTcyZDIxYTUwNGY1MmU1ZWUwMjhhYTQxNjMzMmY1MTBiMmU5Y2ZmNWY3MjJhZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI1MGJhMTRiZTg0NjI3MjAyNzljMzA2YmEiOiIwYTI0MDMzMTJhNDFlM2Q1MmYwNjBmYmMxM2E2N2RlNWNmNzYwOWE3IjoiMGEwMjZkZGE1ZmM4Nzg1ZjdiZDliZjc1MzI3YjYzZTg1ZTJjMGZkZWU1ZGFkYjY1ZWJkY2FjOWFlMWRlOTVjOTJjNjcyYWI0MzNhYTdhOGU2OWNlNmE2ZDg4OTdmYWM0YWM0YTU0ZGU4NDFhZTVlNWJiY2U3Njg3ODc5ZDc5NjM0Y2VhN2EzMDY4NDA2NWM3MTRkNTI0MDliOTI4MjU2YmJmNTNlYWJjZDUyMzFlYjcyNTk1MDQ1MzczOTliZDI5MTY0YjcyNmQzM2E0NmRhNzAxMzYwYTQxNjhhMDkxY2NhYjcyZDQ0YTYyZmVkMjQ2YzBmZmVhNWIxMzQ4YWI1NDcwIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDdfMQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMzA6MTY6IjA3NDkyNjJjMTExY2Q0NzBlYzI1NjZlNmIzNzMyZmMwOTMyOTQ2OWFhMTkwNzFkM2I5YzAxOTA2NTE0YzZmMWQyNmJhYTE0YmVhYjA5NzFjOGI3ZTYxMWE0Zjc5MDA5ZDZmZWE3NzY5MjhjYTI1Mjg1YjBkZTM2NDNkMWEzZjhjNzEiOjE2OiIwNmJjMWU1MGU5NmMwMmJmNjM2ZTllZWE4Yjg5OWJiZWJmNzY1MWRlNzdkZDQ3NGMzZTliYzIzYmFkODE4MmI2MTkwNGM3ZDk3ZGZiZWJmYjFlMDAxMDg4NzhiNmU2N2U0MTUzOTFkNjc5NDJjMmIyYmY5YjQ0MzVmODhiMGNiMDIzIjoxNjoiMzExMTc5ZjBiY2ZjOWI5ZDNjYTMxNWQwMGVmMzBkN2JkZDNhMmNmYWU5OTExYmZlZGNiOTQ4YjNhNDc4MmQwNzMyYjZhYjQ0YWE0YmYwMzc0MWE2NDRkYzAxYmVjM2U2OWIwMWEwMzNlNjc1ZDhhY2Q3YzQ5MjVjNmIxYWVjMzExOTA1MWRmZDg5NzYyZDIxNWQ0NTQ3NWZmY2I1OWY5MDgxNDg2MjNmMzcxNzcxNTZmNmFlODZkZDdhN2M1ZjQzZGMxZTFmOTA4MjU0MDU4YTI4NGE1ZjA2YzAwMjE3OTNhODdmMWFjNWZlZmY3ZGNhZWU2OWM1ZTUxYTM3ODllMzczIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjQ3YWFlOTA5IjoiNDNkZDA5YTA3ZmY0Y2FjNzFjYWE0NjMyZWU1ZTFjMWRhZWU0Y2Q4ZiI6IjE2ODhlNGNlNzc5NGJiYTZjYjcwMTQxNjllY2Q1NTljZWRlMmEzMGI1NmE1MmI2OGQ5ZmUxOGNmMTk3M2VmOTdiMmEwMzE1Mzk1MWM3NTVmNjI5NGFhNDlhZGJkYjU1ODQ1YWI2ODc1ZmIzOTg2YzkzZWNmOTI3OTYyODQwZDI4MmY5ZTU0Y2U4YjY5MGY3YzBjYjhiYmQ3MzQ0MGQ5NTcxZDFiMTZjZDkyNjBmOWVhYjQ3ODNjYzQ4MmU1MjIzZGM2MDk3Mzg3MTc4M2VjMjdiMGFlMGZkNDc3MzJjYmMyODZhMTczZmM5MmIwMGZiNGJhNjgyNDY0N2NkOTNjODVjMSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA3XzIKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDMwOjE2OiIwNzQ5MjYyYzExMWNkNDcwZWMyNTY2ZTZiMzczMmZjMDkzMjk0NjlhYTE5MDcxZDNiOWMwMTkwNjUxNGM2ZjFkMjZiYWExNGJlYWIwOTcxYzhiN2U2MTFhNGY3OTAwOWQ2ZmVhNzc2OTI4Y2EyNTI4NWIwZGUzNjQzZDFhM2Y4YzcxIjoxNjoiMDZiYzFlNTBlOTZjMDJiZjYzNmU5ZWVhOGI4OTliYmViZjc2NTFkZTc3ZGQ0NzRjM2U5YmMyM2JhZDgxODJiNjE5MDRjN2Q5N2RmYmViZmIxZTAwMTA4ODc4YjZlNjdlNDE1MzkxZDY3OTQyYzJiMmJmOWI0NDM1Zjg4YjBjYjAyMyI6MTY6IjMxMTE3OWYwYmNmYzliOWQzY2EzMTVkMDBlZjMwZDdiZGQzYTJjZmFlOTkxMWJmZWRjYjk0OGIzYTQ3ODJkMDczMmI2YWI0NGFhNGJmMDM3NDFhNjQ0ZGMwMWJlYzNlNjliMDFhMDMzZTY3NWQ4YWNkN2M0OTI1YzZiMWFlYzMxMTkwNTFkZmQ4OTc2MmQyMTVkNDU0NzVmZmNiNTlmOTA4MTQ4NjIzZjM3MTc3MTU2ZjZhZTg2ZGQ3YTdjNWY0M2RjMWUxZjkwODI1NDA1OGEyODRhNWYwNmMwMDIxNzkzYTg3ZjFhYzVmZWZmN2RjYWVlNjljNWU1MWEzNzg5ZTM3MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIxZDliMmUyMjIzZDliYzEzYmZiOWYxNjJjZTczNWRiNDhiYTdjNjhmNjgyMmEwYTFhN2I2YWUxNjU4MzRlNyI6IjNhOWMzY2VjN2I4NGY5YmQzYWRlY2JjNjczZWM5OWQ1NGIyMmJjOWIiOiIxMDUyZWQzOTdiMmUwMWUxZDBlZTFjNTBiZjI0MzYzZjk1ZTUwNGY0YTAzNDM0YTA4ZmQ4MjI1NzRlZDZiOTczNmVkYmI1ZjM5MGRiMTAzMjE0NzlhOGExMzkzNTBlMmJkNDk3N2MzNzc4ZWYzMzFmM2U3OGFlMTE4YjI2ODQ1MWYyMGEyZjAxZDQ3MWY1ZDUzYzU2NjkzNzE3MWIyZGJjMmQ0YmRlNDU5YTU3OTlmMDM3MmQ2NTc0MjM5YjIzMjNkMjQ1ZDBiYjgxYzI4NmI2M2M4OWEzNjEwMTczMzdlNDkwMmY4OGE0NjdmNGM3ZjI0NGJmZDVhYjQ2NDM3ZmYzYjYiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgN18zCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAzMDoxNjoiMDc0OTI2MmMxMTFjZDQ3MGVjMjU2NmU2YjM3MzJmYzA5MzI5NDY5YWExOTA3MWQzYjljMDE5MDY1MTRjNmYxZDI2YmFhMTRiZWFiMDk3MWM4YjdlNjExYTRmNzkwMDlkNmZlYTc3NjkyOGNhMjUyODViMGRlMzY0M2QxYTNmOGM3MSI6MTY6IjA2YmMxZTUwZTk2YzAyYmY2MzZlOWVlYThiODk5YmJlYmY3NjUxZGU3N2RkNDc0YzNlOWJjMjNiYWQ4MTgyYjYxOTA0YzdkOTdkZmJlYmZiMWUwMDEwODg3OGI2ZTY3ZTQxNTM5MWQ2Nzk0MmMyYjJiZjliNDQzNWY4OGIwY2IwMjMiOjE2OiIzMTExNzlmMGJjZmM5YjlkM2NhMzE1ZDAwZWYzMGQ3YmRkM2EyY2ZhZTk5MTFiZmVkY2I5NDhiM2E0NzgyZDA3MzJiNmFiNDRhYTRiZjAzNzQxYTY0NGRjMDFiZWMzZTY5YjAxYTAzM2U2NzVkOGFjZDdjNDkyNWM2YjFhZWMzMTE5MDUxZGZkODk3NjJkMjE1ZDQ1NDc1ZmZjYjU5ZjkwODE0ODYyM2YzNzE3NzE1NmY2YWU4NmRkN2E3YzVmNDNkYzFlMWY5MDgyNTQwNThhMjg0YTVmMDZjMDAyMTc5M2E4N2YxYWM1ZmVmZjdkY2FlZTY5YzVlNTFhMzc4OWUzNzMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZDk3NmZjIjoiNzZhNzVlNWI2MTU3YTU1NmNmODg4NGJiMmU0NWMyOTNkZDU0NWNmNSI6IjIxNTVjZDg0M2ZmMjRhNGVlOGJhZGI3Njk0MjYwMDI4YTQ5MDgxM2JhOGIzNjlhNGNiZjEwNmVjMTQ4ZTUyOTg3MDdmNTk2NWJlN2QxMDFjMTA0OWVhODU4NGMyNGNkNjM0NTVhZDljMTA0ZDY4NjI4MmQzZmI4MDNhNGMxMWMxYzJlOWI5MWM3MTc4ODAxZDFiNjY0MGYwMDNmNTcyOGRmMDA3YjhhNGNjYzkyYmNlMDVlNDFhMjcyNzhkN2M4NTAxOGM1MjQxNDMxM2E1MDc3Nzg5MDAxZDRmMDE5MTBiNzJhYWQwNWQyMjBhYTE0YTU4NzMzYTc0ODliYzU0NTU2YiI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA3XzQKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDMwOjE2OiIwNzQ5MjYyYzExMWNkNDcwZWMyNTY2ZTZiMzczMmZjMDkzMjk0NjlhYTE5MDcxZDNiOWMwMTkwNjUxNGM2ZjFkMjZiYWExNGJlYWIwOTcxYzhiN2U2MTFhNGY3OTAwOWQ2ZmVhNzc2OTI4Y2EyNTI4NWIwZGUzNjQzZDFhM2Y4YzcxIjoxNjoiMDZiYzFlNTBlOTZjMDJiZjYzNmU5ZWVhOGI4OTliYmViZjc2NTFkZTc3ZGQ0NzRjM2U5YmMyM2JhZDgxODJiNjE5MDRjN2Q5N2RmYmViZmIxZTAwMTA4ODc4YjZlNjdlNDE1MzkxZDY3OTQyYzJiMmJmOWI0NDM1Zjg4YjBjYjAyMyI6MTY6IjMxMTE3OWYwYmNmYzliOWQzY2EzMTVkMDBlZjMwZDdiZGQzYTJjZmFlOTkxMWJmZWRjYjk0OGIzYTQ3ODJkMDczMmI2YWI0NGFhNGJmMDM3NDFhNjQ0ZGMwMWJlYzNlNjliMDFhMDMzZTY3NWQ4YWNkN2M0OTI1YzZiMWFlYzMxMTkwNTFkZmQ4OTc2MmQyMTVkNDU0NzVmZmNiNTlmOTA4MTQ4NjIzZjM3MTc3MTU2ZjZhZTg2ZGQ3YTdjNWY0M2RjMWUxZjkwODI1NDA1OGEyODRhNWYwNmMwMDIxNzkzYTg3ZjFhYzVmZWZmN2RjYWVlNjljNWU1MWEzNzg5ZTM3MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJkNDczODYyM2RmMjIzYWE0Mzg0M2RmODQ2NzUzNGM0MWQwMTNlMGM4MDNjNjI0ZTI2MzY2NmIyMzliZGU0MGE1ZjI5YWViOGRlNzllM2RhYTYxZGQwMzcwZjQ5YmQ0YjAxMzgzNGI5ODIxMmFlZjZiMWM1ZWUzNzNiM2NiIjoiNzg2NjMxNGE2YWQ2ZjJiMjUwYTM1OTQxZGIyOGY1ODY0YjU4NTg1OSI6IjBhYjE0YzM3M2FlYjdkNDMyOGQwYWFhZDhjMDk0ZDg4YjllYjA5OGI5NWYyMTA1NGEyOTA4MjUyMmJlN2MyN2EzMTI4NzhiNjM3OTE3ZTNkODE5ZTZjM2M1NjhkYjVkODQzODAyYjA2ZDUxZDllOThhMmJlMGJmNDBjMDMxNDIzYjAwZWRmYmZmODMyMGVmYjkxNzFiZDIwNDQ2NTNhNGNiOWM1MTIyZjZjNjVlODNjZGEyZWMzYzEyNjAyN2E5YzFhNTZiYTg3NGQwZmVhMjNmMzgwYjgyY2YyNDBiOGNmNTQwMDA0NzU4YzRjNzdkOTM0MTU3YTc0ZjNmYzEyYmZhYyI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA3XzUKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDMwOjE2OiIwNzQ5MjYyYzExMWNkNDcwZWMyNTY2ZTZiMzczMmZjMDkzMjk0NjlhYTE5MDcxZDNiOWMwMTkwNjUxNGM2ZjFkMjZiYWExNGJlYWIwOTcxYzhiN2U2MTFhNGY3OTAwOWQ2ZmVhNzc2OTI4Y2EyNTI4NWIwZGUzNjQzZDFhM2Y4YzcxIjoxNjoiMDZiYzFlNTBlOTZjMDJiZjYzNmU5ZWVhOGI4OTliYmViZjc2NTFkZTc3ZGQ0NzRjM2U5YmMyM2JhZDgxODJiNjE5MDRjN2Q5N2RmYmViZmIxZTAwMTA4ODc4YjZlNjdlNDE1MzkxZDY3OTQyYzJiMmJmOWI0NDM1Zjg4YjBjYjAyMyI6MTY6IjMxMTE3OWYwYmNmYzliOWQzY2EzMTVkMDBlZjMwZDdiZGQzYTJjZmFlOTkxMWJmZWRjYjk0OGIzYTQ3ODJkMDczMmI2YWI0NGFhNGJmMDM3NDFhNjQ0ZGMwMWJlYzNlNjliMDFhMDMzZTY3NWQ4YWNkN2M0OTI1YzZiMWFlYzMxMTkwNTFkZmQ4OTc2MmQyMTVkNDU0NzVmZmNiNTlmOTA4MTQ4NjIzZjM3MTc3MTU2ZjZhZTg2ZGQ3YTdjNWY0M2RjMWUxZjkwODI1NDA1OGEyODRhNWYwNmMwMDIxNzkzYTg3ZjFhYzVmZWZmN2RjYWVlNjljNWU1MWEzNzg5ZTM3MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJiYjQ3MjMxY2E1ZWExZDNhZDQ2Yzk5MzQ1ZDlhOGE2MSI6ImIyMTY2ZWQ0NzJkNThkYjEwY2FiMmM2YjAwMGNjY2YxMGE3ZGM1MDkiOiIwMjgzODdhMzE4Mjc3NDM0Nzk4YjRkOTdmNDYwMDY4ZGY1Mjk4ZmFiYTUwNDFiYTExNzYxYTFjYjczMTZiMjQxODQxMTRlYzUwMDI1N2UyNTg5ZWQzYjYwN2ExZWJiZTk3YTZjYzJlMDJiZjFiNjgxZjQyMzEyYTMzYjdhNzdkOGU3ODU1YzRhNmRlMDNlM2MwNDY0M2Y3ODZiOTFhMjY0YTBkNjgwNWUyY2VhOTFlNjgxNzdlYjdhNjRkOTI1NWU0ZjI3ZTcxM2I3Y2NlYzAwZGMyMDBlYmQyMWMyZWEyYmI4OTBmZWFlNDk0MmRmOTQxZGMzZjk3ODkwZWQzNDc0NzgiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgN182Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAzMDoxNjoiMDc0OTI2MmMxMTFjZDQ3MGVjMjU2NmU2YjM3MzJmYzA5MzI5NDY5YWExOTA3MWQzYjljMDE5MDY1MTRjNmYxZDI2YmFhMTRiZWFiMDk3MWM4YjdlNjExYTRmNzkwMDlkNmZlYTc3NjkyOGNhMjUyODViMGRlMzY0M2QxYTNmOGM3MSI6MTY6IjA2YmMxZTUwZTk2YzAyYmY2MzZlOWVlYThiODk5YmJlYmY3NjUxZGU3N2RkNDc0YzNlOWJjMjNiYWQ4MTgyYjYxOTA0YzdkOTdkZmJlYmZiMWUwMDEwODg3OGI2ZTY3ZTQxNTM5MWQ2Nzk0MmMyYjJiZjliNDQzNWY4OGIwY2IwMjMiOjE2OiIzMTExNzlmMGJjZmM5YjlkM2NhMzE1ZDAwZWYzMGQ3YmRkM2EyY2ZhZTk5MTFiZmVkY2I5NDhiM2E0NzgyZDA3MzJiNmFiNDRhYTRiZjAzNzQxYTY0NGRjMDFiZWMzZTY5YjAxYTAzM2U2NzVkOGFjZDdjNDkyNWM2YjFhZWMzMTE5MDUxZGZkODk3NjJkMjE1ZDQ1NDc1ZmZjYjU5ZjkwODE0ODYyM2YzNzE3NzE1NmY2YWU4NmRkN2E3YzVmNDNkYzFlMWY5MDgyNTQwNThhMjg0YTVmMDZjMDAyMTc5M2E4N2YxYWM1ZmVmZjdkY2FlZTY5YzVlNTFhMzc4OWUzNzMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMjE4NDgyNzA5NWQzNWMzZjg2ZjYwMGU4ZTU5NzU0MDEzMjk2IjoiNTI2NzNiZGUyY2ExNjZjMmFhNDYxMzFhYzFkYzgwOGQ2N2Q3ZDNiMSI6IjE0YzY3OGE5NGFkNjA1MjVlZjM5ZTk1OWIyZjNiYTVjMDk3YTk0ZmY5MTJiNjdkYmFjZTgwNTM1YzE4N2FiZDQ3ZDA3NTQyMGIxODcyMTUyYmJhMDhmN2ZjMzFmMzEzYmJmOTI3M2M5MTJmYzRjMDE0OWE5YjBjZmI3OTgwN2UzNDZlYjMzMjA2OTYxMWJlYzBmZjliY2QxNjhmMWY3YzMzZTc3MzEzY2VhNDU0Yjk0ZTI1NDllZWNmMDAyZTJhY2Y3ZjZmMmQyODQ1ZDRmZTBhYWIyZTVhOTJkZGY2OGM0ODBhZTExMjQ3OTM1ZDFmNjI1NzQ4NDIyMTZhZTY3NDExNSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA4XzEKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDMxOjE2OiIwYTAyZWY4NDQ4ZDlmYWQ4YmJkMGQwMDRjOGMyYWE5NzUxZWY5NzIxYzFiMGQwMzIzNmE1NGIwZGY5NDdjYmFlZDVhMjU1ZWU5ZThlMjBkNDkxZWExNzIzZmUwOTQ3MDRhOTc2MmU4OGFmZDE2ZWJiNTk5NDQxMmNhOTY2ZGM0ZjlmIjoxNjoiMDkyZDM2MmU3ZWQzYTBiZmQ5ZTlmZDBlNmMwMzAxYjZkZjI5MTU5Y2Y1MGNjODNiOWIwY2Y0ZDZlZWE3MWE2MWUwMDJiNDZlMGFlOWYyZGU2MmQyNWI1ZDc0NTJkNDk4YjgxYzlhYzZmYzU4NTkzZDRjM2ZiNGY1ZDcyZGZiYjBhOSI6MTY6IjViZGYwZTMwZDMyMWRkYTUxNDdmODgyNDA4ZmE2OTE5NTQ4MGRmOGY4MGQzZjZlOGJmNTgxODUwNGYzNjQyN2NhOWIxZjU1NDBiOWM2NWE4ZjY5NzRjZjg0NDdhMjQ0ZDkyODAyMDFiYjQ5ZmNiYmU2Mzc4ZDE5NDRjZDIyN2UyMzBmOTZlM2QxMGY4MTlkY2VmMjc2YzY0YTAwYjJhNGI2NzAxZTdkMDFkZTVmYWJkZTNiMWU5YTBkZjgyZjQ2MzEzNTljZDIyNjY5NjQ3ZmJiMTcxNzI0NjEzNGVkN2I0OTdjZmZmYmRjNDJiNTljNzNhOTZlZDkwMTY2MjEyZGZmNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIwNTBiNzU1ZTVlNjg4MGY3YjllOWQ2OTJhNzRjMzdhYWU0NDliMzFiZmVhNmRlZmY4Mzc0N2E4OTdmNmMyYzgyNWJiMWFkYmY4NTBhM2M5Njk5NGI1ZGU1YjMzY2JjN2Q0YTE3OTEzYTc5NjciOiI3NzA2ZmZjYTFlY2ZiMWViZWUyYTU1ZTVjNmUyNGNkMjc5N2E0MTI1IjoiMDliMzY4M2Q4YTJlYjBmYjI5NWI2MmVkMWZiOTI5MGI3MTQ0NTdiNzgyNTMxOWY0NjQ3ODcyYWY4ODliMzA0MDk0NzIwMjBhZDEyOTEyYmYxOWIxMWQ0ODE5ZjQ5NjE0ODI0ZmZkODRkMDljMGExN2U3ZDE3MzA5ZDEyOTE5NzkwNDEwYWEyOTk1Njk5ZjZhODZkYmUzMjQyYjVhY2MyM2FmNDU2OTEwODBkNmIxYWU4MTBmYjNlMzA1NzA4N2YwOTcwMDkyY2UwMGJlOTU2MmZmNDA1M2I2MjYyY2UwY2FhOTNlMTM3MjNkMmUzYTViYTA3NWQ0NWYwZDYxYjU0YjYxIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDhfMgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMzE6MTY6IjBhMDJlZjg0NDhkOWZhZDhiYmQwZDAwNGM4YzJhYTk3NTFlZjk3MjFjMWIwZDAzMjM2YTU0YjBkZjk0N2NiYWVkNWEyNTVlZTllOGUyMGQ0OTFlYTE3MjNmZTA5NDcwNGE5NzYyZTg4YWZkMTZlYmI1OTk0NDEyY2E5NjZkYzRmOWYiOjE2OiIwOTJkMzYyZTdlZDNhMGJmZDllOWZkMGU2YzAzMDFiNmRmMjkxNTljZjUwY2M4M2I5YjBjZjRkNmVlYTcxYTYxZTAwMmI0NmUwYWU5ZjJkZTYyZDI1YjVkNzQ1MmQ0OThiODFjOWFjNmZjNTg1OTNkNGMzZmI0ZjVkNzJkZmJiMGE5IjoxNjoiNWJkZjBlMzBkMzIxZGRhNTE0N2Y4ODI0MDhmYTY5MTk1NDgwZGY4ZjgwZDNmNmU4YmY1ODE4NTA0ZjM2NDI3Y2E5YjFmNTU0MGI5YzY1YThmNjk3NGNmODQ0N2EyNDRkOTI4MDIwMWJiNDlmY2JiZTYzNzhkMTk0NGNkMjI3ZTIzMGY5NmUzZDEwZjgxOWRjZWYyNzZjNjRhMDBiMmE0YjY3MDFlN2QwMWRlNWZhYmRlM2IxZTlhMGRmODJmNDYzMTM1OWNkMjI2Njk2NDdmYmIxNzE3MjQ2MTM0ZWQ3YjQ5N2NmZmZiZGM0MmI1OWM3M2E5NmVkOTAxNjYyMTJkZmY3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjRlYjY4ZGNkOTNjYTliMTlkZjExMWJkNDM2MDhmNTU3MDI2ZmU0YWExZDVjZmFjMjI3YTNlYjVhYjk1NDhjMThhMDZkZGVkMjNmODE4MjU5ODZiMmZjZDcxMTA5ZWNlZjdlZmY4ODg3M2YwNzVjMmFhMGM0NjlmNjljOTJiYyI6ImEzNzE3ZGExNDNiNGRjZmZiYzc0MjY2NWE4ZmE5NTA1ODU1NDgzNDMiOiIyZWNmMTVjOTdjNWExNWIxNDc2YWU5ODZiMzcxYjU3YTI0Mjg0ZjRhMTYyYThkMGM4MTgyZTc5MDVlNzkyMjU2ZjE4MTJiYTVmODNmMWY3YTEzMGU0MmRjYzAyMjMyODQ0ZWRjMTRhMzFhNjhlZTk3YWU1NjRhMzgzYTM0MTE2NTY0MjRjNWY2MmRkYjY0NjA5M2MzNjdiZTFmY2RhNDI2Y2YwMGEwNmQ4YWNiN2U1Nzc3NmZiYmQ4NTVhYzNkZjUwNmZjMTZiMWQ3YzNmMjExMGYzZDgwNjhlOTFlMTg2MzYzODMxYzg0MDk2ODBkOGRhOWVjZDhjZjFmYTIwZWUzOWQiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgOF8zCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAzMToxNjoiMGEwMmVmODQ0OGQ5ZmFkOGJiZDBkMDA0YzhjMmFhOTc1MWVmOTcyMWMxYjBkMDMyMzZhNTRiMGRmOTQ3Y2JhZWQ1YTI1NWVlOWU4ZTIwZDQ5MWVhMTcyM2ZlMDk0NzA0YTk3NjJlODhhZmQxNmViYjU5OTQ0MTJjYTk2NmRjNGY5ZiI6MTY6IjA5MmQzNjJlN2VkM2EwYmZkOWU5ZmQwZTZjMDMwMWI2ZGYyOTE1OWNmNTBjYzgzYjliMGNmNGQ2ZWVhNzFhNjFlMDAyYjQ2ZTBhZTlmMmRlNjJkMjViNWQ3NDUyZDQ5OGI4MWM5YWM2ZmM1ODU5M2Q0YzNmYjRmNWQ3MmRmYmIwYTkiOjE2OiI1YmRmMGUzMGQzMjFkZGE1MTQ3Zjg4MjQwOGZhNjkxOTU0ODBkZjhmODBkM2Y2ZThiZjU4MTg1MDRmMzY0MjdjYTliMWY1NTQwYjljNjVhOGY2OTc0Y2Y4NDQ3YTI0NGQ5MjgwMjAxYmI0OWZjYmJlNjM3OGQxOTQ0Y2QyMjdlMjMwZjk2ZTNkMTBmODE5ZGNlZjI3NmM2NGEwMGIyYTRiNjcwMWU3ZDAxZGU1ZmFiZGUzYjFlOWEwZGY4MmY0NjMxMzU5Y2QyMjY2OTY0N2ZiYjE3MTcyNDYxMzRlZDdiNDk3Y2ZmZmJkYzQyYjU5YzczYTk2ZWQ5MDE2NjIxMmRmZjciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiODYwNGFjNTYzMjhjMWFiNWFkOTE3ODYxIjoiZWUwNjIwOTA3M2NjYTAyNmJiMjY0ZTUxODViZjhjNjhiNzczOWY4NiI6IjRiYzg5MTMwYTViMmRhYmI3YzJmY2Y5MGViNWQwZWFmOWU2ODFiNzE0NmEzOGYzMTczYTNkOWNmZWM1MmVhOWUwYTQxOTMyZTY0OGE5ZDY5MzQ0YzUwZGE3NjNmNTFhMDNjOTU3NjIxMzFlODA1MjI1NGRjZDIyNDhjYmE0MGZkMzE2Njc3ODZjZTA1YTJiN2I1MzFhYzlkYWM5ZWQ1ODRhNTliNjc3YzFhOGFlZDhjNWQxNWQ2OGMwNTU2OWUyYmU3ODBiZjdkYjYzOGZkMmJmZDJhODVhYjI3Njg2MGYzNzc3MzM4ZmNhOTg5ZmZkNzQzZDEzZWUwOGUwY2E5ODkzZiI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA4XzQKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDMxOjE2OiIwYTAyZWY4NDQ4ZDlmYWQ4YmJkMGQwMDRjOGMyYWE5NzUxZWY5NzIxYzFiMGQwMzIzNmE1NGIwZGY5NDdjYmFlZDVhMjU1ZWU5ZThlMjBkNDkxZWExNzIzZmUwOTQ3MDRhOTc2MmU4OGFmZDE2ZWJiNTk5NDQxMmNhOTY2ZGM0ZjlmIjoxNjoiMDkyZDM2MmU3ZWQzYTBiZmQ5ZTlmZDBlNmMwMzAxYjZkZjI5MTU5Y2Y1MGNjODNiOWIwY2Y0ZDZlZWE3MWE2MWUwMDJiNDZlMGFlOWYyZGU2MmQyNWI1ZDc0NTJkNDk4YjgxYzlhYzZmYzU4NTkzZDRjM2ZiNGY1ZDcyZGZiYjBhOSI6MTY6IjViZGYwZTMwZDMyMWRkYTUxNDdmODgyNDA4ZmE2OTE5NTQ4MGRmOGY4MGQzZjZlOGJmNTgxODUwNGYzNjQyN2NhOWIxZjU1NDBiOWM2NWE4ZjY5NzRjZjg0NDdhMjQ0ZDkyODAyMDFiYjQ5ZmNiYmU2Mzc4ZDE5NDRjZDIyN2UyMzBmOTZlM2QxMGY4MTlkY2VmMjc2YzY0YTAwYjJhNGI2NzAxZTdkMDFkZTVmYWJkZTNiMWU5YTBkZjgyZjQ2MzEzNTljZDIyNjY5NjQ3ZmJiMTcxNzI0NjEzNGVkN2I0OTdjZmZmYmRjNDJiNTljNzNhOTZlZDkwMTY2MjEyZGZmNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJmZGRhNWZiZjZlYzM2MWE5ZDlhNGFjNjhhZjIxNmEwNjg2ZjQzOGIxZTBlNWMzNmI5NTVmNzRlMTA3ZjM5YzBkZGRjYyI6Ijk5MGFkNTczZGM0OGE5NzMyMzViNmQ4MjU0MzYxOGYyZTk1NTEwNWQiOiIyZTQ1Njg0N2Q4ZmMzNmZmMDE0N2Q2OTkzNTk0YjkzOTcyMjdkNTc3NzUyYzc5ZDBmOTA0ZmNiMDM5ZDRkODEyZmVhNjA1YTdiNTc0ZGQ4MmNhNzg2ZjkzNzUyMzQ4NDM4ZWU5ZjViNTQ1NDk4NWQ1ZjBlMTY5OWUzZTdhZDE3NWEzMmUxNWYwM2RlYjA0MmFiOWZlMWRkOWRiMWJiODZmOGMwODljY2I0NWU3ZWYwYzVlZTdjYTliNzI5MGNhNmIxNWJlZDQ3MDM5Nzg4YThhOTNmZjgzZTBlOGQ2MjQ0YzcxMDA2MzYyZGVlZjY5YjZmNDE2ZmIzYzY4NDM4M2ZiZDAiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgOF81Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAzMToxNjoiMGEwMmVmODQ0OGQ5ZmFkOGJiZDBkMDA0YzhjMmFhOTc1MWVmOTcyMWMxYjBkMDMyMzZhNTRiMGRmOTQ3Y2JhZWQ1YTI1NWVlOWU4ZTIwZDQ5MWVhMTcyM2ZlMDk0NzA0YTk3NjJlODhhZmQxNmViYjU5OTQ0MTJjYTk2NmRjNGY5ZiI6MTY6IjA5MmQzNjJlN2VkM2EwYmZkOWU5ZmQwZTZjMDMwMWI2ZGYyOTE1OWNmNTBjYzgzYjliMGNmNGQ2ZWVhNzFhNjFlMDAyYjQ2ZTBhZTlmMmRlNjJkMjViNWQ3NDUyZDQ5OGI4MWM5YWM2ZmM1ODU5M2Q0YzNmYjRmNWQ3MmRmYmIwYTkiOjE2OiI1YmRmMGUzMGQzMjFkZGE1MTQ3Zjg4MjQwOGZhNjkxOTU0ODBkZjhmODBkM2Y2ZThiZjU4MTg1MDRmMzY0MjdjYTliMWY1NTQwYjljNjVhOGY2OTc0Y2Y4NDQ3YTI0NGQ5MjgwMjAxYmI0OWZjYmJlNjM3OGQxOTQ0Y2QyMjdlMjMwZjk2ZTNkMTBmODE5ZGNlZjI3NmM2NGEwMGIyYTRiNjcwMWU3ZDAxZGU1ZmFiZGUzYjFlOWEwZGY4MmY0NjMxMzU5Y2QyMjY2OTY0N2ZiYjE3MTcyNDYxMzRlZDdiNDk3Y2ZmZmJkYzQyYjU5YzczYTk2ZWQ5MDE2NjIxMmRmZjciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNGE1ZjQ5MTRiZWUyNWRlM2M2OTM0MWRlMDciOiJlY2M2M2IyOGYwNzU2ZjIyZjUyYWM4ZTZlYzEyNTFhNmVjMzA0NzE4IjoiMWZiOTM1NmZkNWM0YjE3OTZkYjJlYmY3ZDBkMzkzY2M4MTBhZGY2MTQ1ZGVmYzJmY2U3MTRmNzlkOTM4MDBkNWUyYWMyMTFlYThiYmVjY2E0YjY1NGI5NGMzYjE4YjMwZGQ1NzZjZTM0ZGM5NTQzNmVmNTdhMDk0MTU2NDU5MjMzNTlhNWQ3YjQxNzFlZjIyYzI0NjcwZjFiMjI5ZDM2MDNlOTFmNzY2NzFiN2RmOTdlNzMxN2M5NzczNDQ3NmQ1ZjNkMTdkMjFjZjgyYjViYTlmODNkZjJlNTg4ZDM2OTg0ZmQxYjU4NDQ2OGJkMjNiMmU4NzVmMzJmNjg5NTNmN2IyIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDhfNgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMzE6MTY6IjBhMDJlZjg0NDhkOWZhZDhiYmQwZDAwNGM4YzJhYTk3NTFlZjk3MjFjMWIwZDAzMjM2YTU0YjBkZjk0N2NiYWVkNWEyNTVlZTllOGUyMGQ0OTFlYTE3MjNmZTA5NDcwNGE5NzYyZTg4YWZkMTZlYmI1OTk0NDEyY2E5NjZkYzRmOWYiOjE2OiIwOTJkMzYyZTdlZDNhMGJmZDllOWZkMGU2YzAzMDFiNmRmMjkxNTljZjUwY2M4M2I5YjBjZjRkNmVlYTcxYTYxZTAwMmI0NmUwYWU5ZjJkZTYyZDI1YjVkNzQ1MmQ0OThiODFjOWFjNmZjNTg1OTNkNGMzZmI0ZjVkNzJkZmJiMGE5IjoxNjoiNWJkZjBlMzBkMzIxZGRhNTE0N2Y4ODI0MDhmYTY5MTk1NDgwZGY4ZjgwZDNmNmU4YmY1ODE4NTA0ZjM2NDI3Y2E5YjFmNTU0MGI5YzY1YThmNjk3NGNmODQ0N2EyNDRkOTI4MDIwMWJiNDlmY2JiZTYzNzhkMTk0NGNkMjI3ZTIzMGY5NmUzZDEwZjgxOWRjZWYyNzZjNjRhMDBiMmE0YjY3MDFlN2QwMWRlNWZhYmRlM2IxZTlhMGRmODJmNDYzMTM1OWNkMjI2Njk2NDdmYmIxNzE3MjQ2MTM0ZWQ3YjQ5N2NmZmZiZGM0MmI1OWM3M2E5NmVkOTAxNjYyMTJkZmY3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjhlMDdkNjZmN2I4ODBhNzI1NjNhYmNkM2YzNTA5MmJjMzM0MDlmYjdmODhmMjQ3MmJlIjoiMzkyNWM3MWIzNjJkNDBhMGE2ZGU0MjE0NTU3OWJhMWU3ZGQ0NTlmYyI6IjNhZmQ5YzY2MDAxNDdiMjE3OThkODE4YzY1NWEwZjRjOTIxMmRiMjZkMGIwZGZkYzJhNzU5NGNjYjNkMjJmNWJmMWQ3YzNlMTEyY2Q3M2ZjN2Q1MDljN2E4YmFmZGQzYzI3NGQxMzk5MDA5Zjk2MDllYzRiZTY0NzdlNDUzZjA3NWFhMzNkYjM4Mjg3MGMxYzM0MDlhZWYzOTJkNzM4NmFlM2E2OTZiOTlhOTRiNGRhMDU4OTQ0N2U5NTVkMTZjOThiMTc2MDJhNTliZDczNjI3OWZjZDhmYjI4MGM0NDYyZDU5MGJmYTliZjEzZmVkNTcwZWFmZGU5NzMzMGEyYzIxMCI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA5XzEKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxNTM2OjE2OiJmYzhkNmMwNGJlYzRlYjlhODE5MmNhNzkwMGNiZTUzNmUyZThiNTE5ZGVjZjMzYjI0NTk3OThjNjkwOWRmNGYxNzZkYjdkMjMxOTBmYzcyYjg4NjVhNzE4YWY4OTVmMWJjZDkxNDUyOTgwMjc0MjNiNjA1ZTcwYTQ3Y2Y1ODM5MGE4YzNlODhmYzhjNDhlOGIzMmUzZGEyMTBkZmJlM2U4ODFlYTU2NzRiNmEzNDhjMjFlOTNmOWU1NWVhNjVlZmQiOjE2OiJkMjAwZDQ1ZTc4OGFhY2VhNjA2YTQwMWQwNDYwZjg3ZGQ1YzEwMjdlMTJkYzFhMGQ3NTg2ZTg5MzlkOWNmNzg5YjQwZjUxYWMwNDQyOTYxZGU3ZDIxY2MyMWUwNWM4MzE1NWMxZjJhYTkxOTMzODdjZmRmOTU2Y2I0OGQxNTNiYTI3MDQwNmY5YmJiYTUzN2Q0OTg3ZDllMmY5OTQyZDdhMTRjYmZmZmVhNzRmZWNkZGE5MjhkMjNlMjU5ZjVlZTEiOjE2OiJjZjJjZDQxZTM0Y2EzYTcyOGVhNWNiOGFmZjY0YzM2ZDI3YmRlZjUzNjRlMzM2ZmQ2OGQzMTIzYzVhMTk2YThjMjg3MDEzZTg1M2Q1MTU2ZDU4ZDE1MTk1NDUyMGZiNGY2ZDdiMTdhYmI2ODE3NzY1OTA5YzU3NjExOTY1OWQ5MDJiMTkwNmVkOGEyYjEwYzE1NWMyNGQxMjQ1MjhkYWI5ZWVhZTM3OWJlYWM2NmU0YTQxMTc4NmRjYjhmZDAwNjJlYmMwMzBkZTEyMTlhMDRjMmE4YzFiN2RkMzEzMWU0ZDZiNmNhZWUyZTMxYTVlZDQxYWMxNTA5YjJlZjFlZTJhYjE4MzY0YmU1NjhjYTk0MWMyNWVjYzg0ZmY5ZDY0M2I1ZWMxYWFhZTEwMmEyMGQ3M2Y0NzliNzgwZmQ2ZGE5MTA3NTIxMmQ5ZWFjMDNhMDY3NGQ4OTllYmEyZTQzMWY0YzQ0YjYxNWI2YmEyMjMyYmQ0YjMzYmFlZDczZDYyNWQiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZjczNWZkNTViYTkyNTkyYzNiNTJiOGY5YzRmNjlhYWExY2JlZjhmZTg4YWRkMDk1NTk1NDEyNDY3ZjljZjRlYzBiODk2YzU5ZWRhMTYyMTBlNzU0OWM4YWJiMTBjZGJjMjFhMTJlYzliNmI1YjhmZDJmMTAzOTllYjYiOiI4ZWM5NjVmMTM0YTNlYzk5MzFlOTJhMWNhMGRjODE2OWQ1ZWE3MDVjIjoiMjY3YmNkMTE4YWNhYjFmYzhiYTgxYzg1ZDczMDAzY2I4NjEwZmE1NWMxZDk3ZGE4ZDQ4YTdjN2YwNjg5NmE0ZGI3NTFhYTI4NDI1NWI5ZDM2YWQ2NWYzNzY1M2Q4MjlmMWIzN2Y5N2I4MDAxOTQyNTQ1YjJmYzJjNTVhNzM3NmNhN2ExYmU0YjE3NjBjOGUwNWEzM2U1YWEyNTI2YjhkOThlMzE3MDg4ZTc4MzRjNzU1YjJhNTliMTI2MzFhMTgyYzA1ZDVkNDNhYjE3NzkyNjRmODQ1NmY1MTVjZTU3ZGZkZjUxMmQ1NDkzZGFiN2I3MzM4ZGM0YjdkNzhkYjljMDkxYWMzYmFmNTM3YTY5ZmM3ZjU0OWQ5NzlmMGVmZjlhOTRmZGE0MTY5YmQ0ZDFkMTlhNjljOTllMzNjM2I1NTQ5MGQ1MDFiMzliMWVkYWUxMThmZjY3OTNhMTUzMjYxNTg0ZDNhNWYzOWY2ZTY4MmUzZDE3YzhjZDEyNjFmYTcyIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDlfMgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjE1MzY6MTY6ImZjOGQ2YzA0YmVjNGViOWE4MTkyY2E3OTAwY2JlNTM2ZTJlOGI1MTlkZWNmMzNiMjQ1OTc5OGM2OTA5ZGY0ZjE3NmRiN2QyMzE5MGZjNzJiODg2NWE3MThhZjg5NWYxYmNkOTE0NTI5ODAyNzQyM2I2MDVlNzBhNDdjZjU4MzkwYThjM2U4OGZjOGM0OGU4YjMyZTNkYTIxMGRmYmUzZTg4MWVhNTY3NGI2YTM0OGMyMWU5M2Y5ZTU1ZWE2NWVmZCI6MTY6ImQyMDBkNDVlNzg4YWFjZWE2MDZhNDAxZDA0NjBmODdkZDVjMTAyN2UxMmRjMWEwZDc1ODZlODkzOWQ5Y2Y3ODliNDBmNTFhYzA0NDI5NjFkZTdkMjFjYzIxZTA1YzgzMTU1YzFmMmFhOTE5MzM4N2NmZGY5NTZjYjQ4ZDE1M2JhMjcwNDA2ZjliYmJhNTM3ZDQ5ODdkOWUyZjk5NDJkN2ExNGNiZmZmZWE3NGZlY2RkYTkyOGQyM2UyNTlmNWVlMSI6MTY6ImNmMmNkNDFlMzRjYTNhNzI4ZWE1Y2I4YWZmNjRjMzZkMjdiZGVmNTM2NGUzMzZmZDY4ZDMxMjNjNWExOTZhOGMyODcwMTNlODUzZDUxNTZkNThkMTUxOTU0NTIwZmI0ZjZkN2IxN2FiYjY4MTc3NjU5MDljNTc2MTE5NjU5ZDkwMmIxOTA2ZWQ4YTJiMTBjMTU1YzI0ZDEyNDUyOGRhYjllZWFlMzc5YmVhYzY2ZTRhNDExNzg2ZGNiOGZkMDA2MmViYzAzMGRlMTIxOWEwNGMyYThjMWI3ZGQzMTMxZTRkNmI2Y2FlZTJlMzFhNWVkNDFhYzE1MDliMmVmMWVlMmFiMTgzNjRiZTU2OGNhOTQxYzI1ZWNjODRmZjlkNjQzYjVlYzFhYWFlMTAyYTIwZDczZjQ3OWI3ODBmZDZkYTkxMDc1MjEyZDllYWMwM2EwNjc0ZDg5OWViYTJlNDMxZjRjNDRiNjE1YjZiYTIyMzJiZDRiMzNiYWVkNzNkNjI1ZCI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI4MWI5MDY2MDUwMTVhNjNhYWJlNDJkZGYxMWUxOTc4OTEyZjU0MDRjNzQ3NGIyNmRjZTNlZDQ4MmJmOTYxZWNjODE4YmY0MjBjNTQ2NTkiOiJlY2IxYjhiMjVmYTUwY2RhYjA4ZTU2MDQyODY3ZjRhZjU4MjZkMTZjIjoiOTNhYzlmMDY3MWVjMjlhY2JiNDQ0ZWZmYzFhNTc0MTM1MWQ2MGZkYjBlMzkzZmJmNzU0YWNmMGRlNDk3NjFhMTQ4NDFkZjc3NzJlOWJjODI3NzM5NjZhMTU4NGM0ZDcyYmFlYTAwMTE4ZjgzZjM1Y2NhNmU1MzdjYmQ0ZDgxMWY1NTgzYjI5NzgzZDhhNmQ5NGNkMzFiZTcwZDZmNTI2YzEwZmYwOWM2ZmE3Y2UwNjk3OTVhM2ZjZDA1MTFmZDVmY2I1NjRiY2M4MGVhOWM3OGYzOGI4MDAxMjUzOWQ4YTRkZGY2ZmU4MWU5Y2RkYjdmNTBkYmJiYmNjN2U1ZDg2MDk3Y2NmNGVjNDkxODlmYjhiZjMxOGJlNmQ1YTA3MTVkNTE2YjQ5YWYxOTEyNThjZDMyZGM4MzNjZTZlYjQ2NzNjMDNhMTliYmFjZTg4Y2M1NDg5NWY2MzZjYzBjMWVjODkwOTZkMTFjZTIzNWEyNjVjYTE3NjQyMzJhNjg5YWU4IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDlfMworcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjE1MzY6MTY6ImZjOGQ2YzA0YmVjNGViOWE4MTkyY2E3OTAwY2JlNTM2ZTJlOGI1MTlkZWNmMzNiMjQ1OTc5OGM2OTA5ZGY0ZjE3NmRiN2QyMzE5MGZjNzJiODg2NWE3MThhZjg5NWYxYmNkOTE0NTI5ODAyNzQyM2I2MDVlNzBhNDdjZjU4MzkwYThjM2U4OGZjOGM0OGU4YjMyZTNkYTIxMGRmYmUzZTg4MWVhNTY3NGI2YTM0OGMyMWU5M2Y5ZTU1ZWE2NWVmZCI6MTY6ImQyMDBkNDVlNzg4YWFjZWE2MDZhNDAxZDA0NjBmODdkZDVjMTAyN2UxMmRjMWEwZDc1ODZlODkzOWQ5Y2Y3ODliNDBmNTFhYzA0NDI5NjFkZTdkMjFjYzIxZTA1YzgzMTU1YzFmMmFhOTE5MzM4N2NmZGY5NTZjYjQ4ZDE1M2JhMjcwNDA2ZjliYmJhNTM3ZDQ5ODdkOWUyZjk5NDJkN2ExNGNiZmZmZWE3NGZlY2RkYTkyOGQyM2UyNTlmNWVlMSI6MTY6ImNmMmNkNDFlMzRjYTNhNzI4ZWE1Y2I4YWZmNjRjMzZkMjdiZGVmNTM2NGUzMzZmZDY4ZDMxMjNjNWExOTZhOGMyODcwMTNlODUzZDUxNTZkNThkMTUxOTU0NTIwZmI0ZjZkN2IxN2FiYjY4MTc3NjU5MDljNTc2MTE5NjU5ZDkwMmIxOTA2ZWQ4YTJiMTBjMTU1YzI0ZDEyNDUyOGRhYjllZWFlMzc5YmVhYzY2ZTRhNDExNzg2ZGNiOGZkMDA2MmViYzAzMGRlMTIxOWEwNGMyYThjMWI3ZGQzMTMxZTRkNmI2Y2FlZTJlMzFhNWVkNDFhYzE1MDliMmVmMWVlMmFiMTgzNjRiZTU2OGNhOTQxYzI1ZWNjODRmZjlkNjQzYjVlYzFhYWFlMTAyYTIwZDczZjQ3OWI3ODBmZDZkYTkxMDc1MjEyZDllYWMwM2EwNjc0ZDg5OWViYTJlNDMxZjRjNDRiNjE1YjZiYTIyMzJiZDRiMzNiYWVkNzNkNjI1ZCI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJmZDMyNjQyOWRmOWI4OTBlMDliNTRiMThiOGYzNGYxZTI0IjoiZTg5YmIwMzJjNmNlNjIyY2JkYjUzYmM5NDY2MDE0ZWE3N2Y3NzdjMCI6IjgxZWJkZDk1MDU0YjBjODIyZWY5YWQ3NjkzZjVhODdhZGZiNGI0YzRjZTcwZGYyZGY4NGVkNDljMDRkYTU4YmE1ZmMyMGExOWUxYTZlOGI3YTM5MDBiMjI3OTZkYzRlODY5ZWU2YjQyNzkyZDE1YThlY2ViNTZjMDljNjk5MTRlODEzY2VhOGY2OTMxZTRiOGVkNmY0MjFhZjI5OGQ1OTVjOTdmNDc4OWM3Y2FhNjEyYzdlZjM2MDk4NGMyMWI5M2VkYzU0MDEwNjhiNWFmNGM3OGE4NzcxYjk4NGQ1M2I4ZWE4YWRmMmY2YTdkNGEwYmE3NmM3NWUxZGQ5ZjY1OGYyMGRlZDRhNDYwNzFkNDZkNzc5MWI1NjgwM2Q4ZmVhN2YwYjBmOGU0MWFlM2YwOTM4M2E2Zjk1ODVmZTc3NTNlYWFmZmQyYmY5NDU2MzEwOGJlZWNjMjA3YmJiNTM1ZjVmY2M3MDVmMGRkZTlmNzA4YzYyZjQ5YTljOTAzNzFkMyI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA5XzQKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxNTM2OjE2OiJmYzhkNmMwNGJlYzRlYjlhODE5MmNhNzkwMGNiZTUzNmUyZThiNTE5ZGVjZjMzYjI0NTk3OThjNjkwOWRmNGYxNzZkYjdkMjMxOTBmYzcyYjg4NjVhNzE4YWY4OTVmMWJjZDkxNDUyOTgwMjc0MjNiNjA1ZTcwYTQ3Y2Y1ODM5MGE4YzNlODhmYzhjNDhlOGIzMmUzZGEyMTBkZmJlM2U4ODFlYTU2NzRiNmEzNDhjMjFlOTNmOWU1NWVhNjVlZmQiOjE2OiJkMjAwZDQ1ZTc4OGFhY2VhNjA2YTQwMWQwNDYwZjg3ZGQ1YzEwMjdlMTJkYzFhMGQ3NTg2ZTg5MzlkOWNmNzg5YjQwZjUxYWMwNDQyOTYxZGU3ZDIxY2MyMWUwNWM4MzE1NWMxZjJhYTkxOTMzODdjZmRmOTU2Y2I0OGQxNTNiYTI3MDQwNmY5YmJiYTUzN2Q0OTg3ZDllMmY5OTQyZDdhMTRjYmZmZmVhNzRmZWNkZGE5MjhkMjNlMjU5ZjVlZTEiOjE2OiJjZjJjZDQxZTM0Y2EzYTcyOGVhNWNiOGFmZjY0YzM2ZDI3YmRlZjUzNjRlMzM2ZmQ2OGQzMTIzYzVhMTk2YThjMjg3MDEzZTg1M2Q1MTU2ZDU4ZDE1MTk1NDUyMGZiNGY2ZDdiMTdhYmI2ODE3NzY1OTA5YzU3NjExOTY1OWQ5MDJiMTkwNmVkOGEyYjEwYzE1NWMyNGQxMjQ1MjhkYWI5ZWVhZTM3OWJlYWM2NmU0YTQxMTc4NmRjYjhmZDAwNjJlYmMwMzBkZTEyMTlhMDRjMmE4YzFiN2RkMzEzMWU0ZDZiNmNhZWUyZTMxYTVlZDQxYWMxNTA5YjJlZjFlZTJhYjE4MzY0YmU1NjhjYTk0MWMyNWVjYzg0ZmY5ZDY0M2I1ZWMxYWFhZTEwMmEyMGQ3M2Y0NzliNzgwZmQ2ZGE5MTA3NTIxMmQ5ZWFjMDNhMDY3NGQ4OTllYmEyZTQzMWY0YzQ0YjYxNWI2YmEyMjMyYmQ0YjMzYmFlZDczZDYyNWQiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZjE0NTliNWYwYzkyZjAxYTBmNzIzYTJlNTY2MjQ4NGQ4ZjhjMGEyMGZjMjlkYWQ2YWNkNDNiYjVmM2VmZmRmNGUxYjYzZTA3ZmRmZTY2MjhkMGQ3NGNhMTliZjJkNjllNGEwYWJmODZkMjkzOTI1YTc5Njc3MmY4MDg4ZSI6IjYwNmYzYjk5YzBiOWNjZDc3MWVhYTI5ZWEwZTRjODg0ZjMxODljY2MiOiJiY2MzNWY5NGNkZTY2Y2IxMTM2NjI1ZDYyNWI5NDQzMmEzNWIyMmYzZDJmYTExYTYxM2ZmMGZjYTViZDU3Zjg3YjkwMmNjZGMxY2QwYWViY2IwNzE1ZWU4NjlkMWQxZmUzOTVmNjc5MzAwM2Y1ZWNhNDY1MDU5Yzg4NjYwZDQ0NmZmNWYwODE4NTUyMDIyNTU3ZTM4YzA4YTY3ZWFkOTkxMjYyMjU0ZjEwNjgyOTc1ZWM1NjM5Nzc2ODUzN2Y0OTc3YWY2ZDVmNmFhY2ViN2ZiMjVkZWM1OTM3MjMwMjMxZmQ4OTc4YWY0OTExOWEyOWYyOWU0MjRhYjgyNzJiNDc1NjI3OTJkNWM5NGY3NzRiODgyOWQwYjBkOWYxYThjOWVkZGYzNzU3NGQ1ZmEyNDhlZWZhOWM1MjcxZmM1ZWMyNTc5YzgxYmRkNjFiNDEwZmE2MWZlMzZlNDI0MjIxYzExM2FkZGIyNzU2NjRjODAxZDM0Y2E4YzYzNTFlNGE4NTgiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgOV81Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTUzNjoxNjoiZmM4ZDZjMDRiZWM0ZWI5YTgxOTJjYTc5MDBjYmU1MzZlMmU4YjUxOWRlY2YzM2IyNDU5Nzk4YzY5MDlkZjRmMTc2ZGI3ZDIzMTkwZmM3MmI4ODY1YTcxOGFmODk1ZjFiY2Q5MTQ1Mjk4MDI3NDIzYjYwNWU3MGE0N2NmNTgzOTBhOGMzZTg4ZmM4YzQ4ZThiMzJlM2RhMjEwZGZiZTNlODgxZWE1Njc0YjZhMzQ4YzIxZTkzZjllNTVlYTY1ZWZkIjoxNjoiZDIwMGQ0NWU3ODhhYWNlYTYwNmE0MDFkMDQ2MGY4N2RkNWMxMDI3ZTEyZGMxYTBkNzU4NmU4OTM5ZDljZjc4OWI0MGY1MWFjMDQ0Mjk2MWRlN2QyMWNjMjFlMDVjODMxNTVjMWYyYWE5MTkzMzg3Y2ZkZjk1NmNiNDhkMTUzYmEyNzA0MDZmOWJiYmE1MzdkNDk4N2Q5ZTJmOTk0MmQ3YTE0Y2JmZmZlYTc0ZmVjZGRhOTI4ZDIzZTI1OWY1ZWUxIjoxNjoiY2YyY2Q0MWUzNGNhM2E3MjhlYTVjYjhhZmY2NGMzNmQyN2JkZWY1MzY0ZTMzNmZkNjhkMzEyM2M1YTE5NmE4YzI4NzAxM2U4NTNkNTE1NmQ1OGQxNTE5NTQ1MjBmYjRmNmQ3YjE3YWJiNjgxNzc2NTkwOWM1NzYxMTk2NTlkOTAyYjE5MDZlZDhhMmIxMGMxNTVjMjRkMTI0NTI4ZGFiOWVlYWUzNzliZWFjNjZlNGE0MTE3ODZkY2I4ZmQwMDYyZWJjMDMwZGUxMjE5YTA0YzJhOGMxYjdkZDMxMzFlNGQ2YjZjYWVlMmUzMWE1ZWQ0MWFjMTUwOWIyZWYxZWUyYWIxODM2NGJlNTY4Y2E5NDFjMjVlY2M4NGZmOWQ2NDNiNWVjMWFhYWUxMDJhMjBkNzNmNDc5Yjc4MGZkNmRhOTEwNzUyMTJkOWVhYzAzYTA2NzRkODk5ZWJhMmU0MzFmNGM0NGI2MTViNmJhMjIzMmJkNGIzM2JhZWQ3M2Q2MjVkIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjUzZTZlOGM3MjlkNmY5YzMxOWRkMzE3ZTc0YjBkYjhlNGNjY2EyNWYzYzgzMDU3NDZlMTM3YWM2M2E2M2VmMzczOWU3YjU5NWFiYjk2ZThkNTVlNTRmN2JkNDFhYjQzMzM3OGZmYjkxMWQiOiJmY2JjNDIxNDAyZTllY2FiYzYwODJhZmE0MGJhNWYyNjUyMmM4NDBlIjoiMjMyYWZiYzkyN2ZhMDhjMmY2YTI3Yjg3ZDRhNWNiMDljMDdkYzI2ZmFlNzNkNzNhOTA1NTg4MzlmNGZkNjZkMjgxYjg3ZWM3MzRiY2UyMzdiYTE2NjY5OGVkODI5MTA2YTdkZTY5NDJjZDZjZGNlNzhmZWQ4ZDJlNGQ4MTQyOGU2NjQ5MGQwMzYyNjRjZWY5MmFmOTQxZDNlMzUwNTVmZTM5ODFlMTRkMjljYmI5YTRmNjc0NzMwNjNiYWVjNzlhMTE3OWY1YTE3YzljMTgzMmYyODM4ZmQ3ZDVlNTliYjk2NTlkNTZkY2U4YTAxOWVkZWYxYmIzYWNjYzY5N2NjNmNjN2E3NzhmNjBhMDY0YzdmNmY1ZDUyOWM2MjEwMjYyZTAwM2RlNTgzZTgxZTMxNjdiODk5NzFmYjhjMGUxNWQ0NGZmZmVmODliNTNkOGQ2NGRkNzk3ZDE1OWI1NmQyYjA4ZWE1MzA3ZWExMmMyNDFiZDU4ZDRlZTI3OGExZjJlIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDlfNgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjE1MzY6MTY6ImZjOGQ2YzA0YmVjNGViOWE4MTkyY2E3OTAwY2JlNTM2ZTJlOGI1MTlkZWNmMzNiMjQ1OTc5OGM2OTA5ZGY0ZjE3NmRiN2QyMzE5MGZjNzJiODg2NWE3MThhZjg5NWYxYmNkOTE0NTI5ODAyNzQyM2I2MDVlNzBhNDdjZjU4MzkwYThjM2U4OGZjOGM0OGU4YjMyZTNkYTIxMGRmYmUzZTg4MWVhNTY3NGI2YTM0OGMyMWU5M2Y5ZTU1ZWE2NWVmZCI6MTY6ImQyMDBkNDVlNzg4YWFjZWE2MDZhNDAxZDA0NjBmODdkZDVjMTAyN2UxMmRjMWEwZDc1ODZlODkzOWQ5Y2Y3ODliNDBmNTFhYzA0NDI5NjFkZTdkMjFjYzIxZTA1YzgzMTU1YzFmMmFhOTE5MzM4N2NmZGY5NTZjYjQ4ZDE1M2JhMjcwNDA2ZjliYmJhNTM3ZDQ5ODdkOWUyZjk5NDJkN2ExNGNiZmZmZWE3NGZlY2RkYTkyOGQyM2UyNTlmNWVlMSI6MTY6ImNmMmNkNDFlMzRjYTNhNzI4ZWE1Y2I4YWZmNjRjMzZkMjdiZGVmNTM2NGUzMzZmZDY4ZDMxMjNjNWExOTZhOGMyODcwMTNlODUzZDUxNTZkNThkMTUxOTU0NTIwZmI0ZjZkN2IxN2FiYjY4MTc3NjU5MDljNTc2MTE5NjU5ZDkwMmIxOTA2ZWQ4YTJiMTBjMTU1YzI0ZDEyNDUyOGRhYjllZWFlMzc5YmVhYzY2ZTRhNDExNzg2ZGNiOGZkMDA2MmViYzAzMGRlMTIxOWEwNGMyYThjMWI3ZGQzMTMxZTRkNmI2Y2FlZTJlMzFhNWVkNDFhYzE1MDliMmVmMWVlMmFiMTgzNjRiZTU2OGNhOTQxYzI1ZWNjODRmZjlkNjQzYjVlYzFhYWFlMTAyYTIwZDczZjQ3OWI3ODBmZDZkYTkxMDc1MjEyZDllYWMwM2EwNjc0ZDg5OWViYTJlNDMxZjRjNDRiNjE1YjZiYTIyMzJiZDRiMzNiYWVkNzNkNjI1ZCI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJiNmIyOGVhMjE5OGQwYzEwMDhiYzY0IjoiMjNhYWRlMGUxZTA4YmI5YjlhNzhkMjMwMmE1MmY5YzIxYjJlMWJhMiI6IjQzOGNjN2RjMDhhNjhkYTI0OWU0MjUwNWY4NTczYmE2MGUyYzI3NzNkNWIyOTBmNGNmOWRmZjcxOGU4NDIwODFjMzgzZTY3MDI0YTBmMjk1OTRlYTk4N2I5ZDI1ZTRiNzM4ZjI4NTk3MGQxOTVhYmIzYThjODA1NGUzZDc5ZDZiOWM5YTgzMjdiYTU5NmYxMjU5ZTI3MTI2Njc0NzY2OTA3ZDhkNTgyZmYzYTg0NzYxNTQ5MjlhZGIxZTZkMTIzNWIyY2NiNGVjOGY2NjNiYTljYzY3MGE5MmJlYmQ4NTNjOGRiZjY5YzY0MzZkMDE2ZjYxYWRkODM2ZTk0NzMyNDUwNDM0MjA3ZjlmZDRjNDNkZWMyYTEyYTk1OGVmYTAxZWZlMjY2OTg5OWI1ZTYwNGMyNTVjNTVmYjcxNjZkZTU1ODllMzY5NTk3YmIwOTE2OGMwNmRkNWRiMTc3ZTA2YTE3NDBlYjJkNWM4MmZhZWNhNmQ5MmZjZWU5OTMxYmE5ZiI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSAxMF8xCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MjA0ODoxNjoiZWNmNWFlY2QxZTU1MTVmZmZhY2JkNzVhMjgxNmM2ZWJmNDkwMThjZGZiNDYzOGUxODVkNjZhNzM5NmI2ZjgwOTBmODAxOGM3ZmQ5NWNjMzRiODU3ZGMxN2YwY2M2NTE2YmIxMzQ2YWI0ZDU4MmNhZGFkN2I0MTAzMzUyMzg3YjcwMzM4ZDA4NDA0N2M5ZDk1MzliNjQ5NjIwNGIzZGQ2ZWE0NDI0OTkyMDdiZWMwMWY5NjQyODdmZjYzMzZjMzk4NDY1ODMzNjg0NmY1NmU0Njg2MTg4MWMxMDIzM2QyMTc2YmYxNWE1ZTk2ZGRjNzgwYmM4NjhhYTc3ZDNjZTc2OSI6MTY6ImJjNDZjNDY0ZmM2YWM0Y2E3ODNiMGViMDhhM2M4NDFiNzcyZjdlOWIyZjI4YmFiZDU4OGFlODg1ZTFhMGM2MWU0ODU4YTBmYjI1YWMyOTk5OTBmMzViZTg1MTY0YzI1OWJhMTE3NWNkZDcxOTI3MDcxMzUxODQ5OTJiNmMyOWI3NDZkZDBkMmNhYmUxNDI4MzVmN2QxNDhjYzE2MTUyNGI0YTA5OTQ2ZDQ4YjgyODQ3M2YxY2U3NmI2Y2I2ODg2YzM0NWMwM2UwNWY0MWQ1MWI1YzNhOTBhM2YyNDA3M2M3ZDc0YTRmZTI1ZDljZjIxYzc1OTYwZjNmYzM4NjMxODMiOjE2OiJhZTQ1ZWQ1NjAxY2VjNmI4Y2MwNWY4MDM5MzVjNjc0ZGRiZTBkNzVjNGMwOWZkNzk1MWZjNmIwY2FlYzMxM2E4ZGYzOTk3MGM1MThiZmZiYTVlZDY4ZjNmMGQ3ZjIyYTQwMjlkNDEzZjFhZTA3ZTRlYmU5ZTQxNzdjZTIzZTdmNTQwNGI1NjllNGVlMWJkY2YzYzFmYjAzZWYxMTM4MDJkNGY4NTVlYjliNTEzNGI1YTdjODA4NWFkY2FlNmZhMmZhMTQxN2VjMzc2M2JlMTcxYjBjNjJiNzYwZWRlMjNjMTJhZDkyYjk4MDg4NGM2NDFmNWE4ZmFjMjZiZGFkNGEwMzM4MWEyMmZlMWI3NTQ4ODUwOTRjODI1MDZkNDAxOWE1MzVhMjg2YWZlYjI3MWJiOWJhNTkyZGUxOGRjZjYwMGMyYWVlYWU1NmUwMmY3Y2Y3OWZjMTRjZjNiZGM3Y2Q4NGZlYmJiZjk1MGNhOTAzMDRiMjIxOWE3YWEwNjNhZWZhMmMzYzE5ODBlNTYwY2Q2NGFmZTc3OTU4NWI2MTA3NjU3Yjk1Nzg1N2VmZGU2MDEwOTg4YWI3ZGU0MTdmYzg4ZDhmMzg0YzRlNmU3MmMzZjk0M2UwYzMxYzBjNGE1Y2MzNmY4NzlkOGEzYWM5ZDdkNTk4NjBlYWFkYTZiODNiYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI4YmJhNmJmODJhNmMwZjg2ZDVmMTc1NmU5Nzk1Njg3MGIwODk1M2IwNmI0ZWIyMDViYzE2OTRlZSI6IjQ3ZTFhYjcxMTlmZWU1NmM5NWVlNWVhYWQ4NmY0MGQwYWE2M2JkMzMiOiI1M2VhNWRjMDhjZDI2MGZiM2I4NTg1NjcyODdmYTkxNTUyYzMwYjJmZWJmYmEyMTNmMGFlODc3MDJkMDY4ZDE5YmFiMDdmZTU3NDUyM2RmYjQyMTM5ZDY4YzNjNWFmZWVlMGJmZTRjYjc5NjljYmYzODJiODA0ZDZlNjEzOTYxNDRlMmQwZTYwNzQxZjg5OTNjMzAxNGI1OGI5YjE5NTdhOGJhYmNkMjNhZjg1NGY0YzM1NmZiMTY2MmFhNzJiZmNjN2U1ODY1NTlkYzQyODBkMTYwYzEyNjc4NWE3MjNlYmVlYmVmZjcxZjExNTk0NDQwYWFlZjg3ZDEwNzkzYTg3NzRhMjM5ZDRhMDRjODdmZTE0NjdiOWRhZjg1MjA4ZWM2YzcyNTU3OTRhOTZjYzI5MTQyZjlhOGJkNDE4ZTNjMWZkNjczNDRiMGNkMDgyOWRmM2IyYmVjNjAyNTMxOTYyOTNjNmIzNGQzZjc1ZDMyZjIxM2RkNDVjNjI3M2Q1MDVhZGY0Y2NlZDEwNTdjYjc1OGZjMjZhZWVmYTQ0MTI1NWVkNGU2NGMxOTllZTA3NWU3ZjE2NjQ2MTgyZmRiNDY0NzM5YjY4YWI1ZGFmZjBlNjNlOTU1MjAxNjgyNGYwNTRiZjRkM2M4YzkwYTk3YmI2YjY1NTMyODRlYjQyOWZjYyI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSAxMF8yCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MjA0ODoxNjoiZWNmNWFlY2QxZTU1MTVmZmZhY2JkNzVhMjgxNmM2ZWJmNDkwMThjZGZiNDYzOGUxODVkNjZhNzM5NmI2ZjgwOTBmODAxOGM3ZmQ5NWNjMzRiODU3ZGMxN2YwY2M2NTE2YmIxMzQ2YWI0ZDU4MmNhZGFkN2I0MTAzMzUyMzg3YjcwMzM4ZDA4NDA0N2M5ZDk1MzliNjQ5NjIwNGIzZGQ2ZWE0NDI0OTkyMDdiZWMwMWY5NjQyODdmZjYzMzZjMzk4NDY1ODMzNjg0NmY1NmU0Njg2MTg4MWMxMDIzM2QyMTc2YmYxNWE1ZTk2ZGRjNzgwYmM4NjhhYTc3ZDNjZTc2OSI6MTY6ImJjNDZjNDY0ZmM2YWM0Y2E3ODNiMGViMDhhM2M4NDFiNzcyZjdlOWIyZjI4YmFiZDU4OGFlODg1ZTFhMGM2MWU0ODU4YTBmYjI1YWMyOTk5OTBmMzViZTg1MTY0YzI1OWJhMTE3NWNkZDcxOTI3MDcxMzUxODQ5OTJiNmMyOWI3NDZkZDBkMmNhYmUxNDI4MzVmN2QxNDhjYzE2MTUyNGI0YTA5OTQ2ZDQ4YjgyODQ3M2YxY2U3NmI2Y2I2ODg2YzM0NWMwM2UwNWY0MWQ1MWI1YzNhOTBhM2YyNDA3M2M3ZDc0YTRmZTI1ZDljZjIxYzc1OTYwZjNmYzM4NjMxODMiOjE2OiJhZTQ1ZWQ1NjAxY2VjNmI4Y2MwNWY4MDM5MzVjNjc0ZGRiZTBkNzVjNGMwOWZkNzk1MWZjNmIwY2FlYzMxM2E4ZGYzOTk3MGM1MThiZmZiYTVlZDY4ZjNmMGQ3ZjIyYTQwMjlkNDEzZjFhZTA3ZTRlYmU5ZTQxNzdjZTIzZTdmNTQwNGI1NjllNGVlMWJkY2YzYzFmYjAzZWYxMTM4MDJkNGY4NTVlYjliNTEzNGI1YTdjODA4NWFkY2FlNmZhMmZhMTQxN2VjMzc2M2JlMTcxYjBjNjJiNzYwZWRlMjNjMTJhZDkyYjk4MDg4NGM2NDFmNWE4ZmFjMjZiZGFkNGEwMzM4MWEyMmZlMWI3NTQ4ODUwOTRjODI1MDZkNDAxOWE1MzVhMjg2YWZlYjI3MWJiOWJhNTkyZGUxOGRjZjYwMGMyYWVlYWU1NmUwMmY3Y2Y3OWZjMTRjZjNiZGM3Y2Q4NGZlYmJiZjk1MGNhOTAzMDRiMjIxOWE3YWEwNjNhZWZhMmMzYzE5ODBlNTYwY2Q2NGFmZTc3OTU4NWI2MTA3NjU3Yjk1Nzg1N2VmZGU2MDEwOTg4YWI3ZGU0MTdmYzg4ZDhmMzg0YzRlNmU3MmMzZjk0M2UwYzMxYzBjNGE1Y2MzNmY4NzlkOGEzYWM5ZDdkNTk4NjBlYWFkYTZiODNiYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJlNmFkMTgxZjA1M2I1OGE5MDRmMjQ1NzUxMDM3M2U1NyI6IjZkMTdmNWI0YzFmZmFjMzUxZDE5NWJmN2IwOWQwOWYwOWE0MDc5Y2YiOiJhMmIxYTQzMGE5ZDY1N2UyZmExYzJiYjVlZDQzZmZiMjVjMDVhMzA4ZmU5MDkzYzAxMDMxNzk1ZjU4NzQ0MDAxMTA4MjhhZTU4ZmI5YjU4MWNlOWRkZGQzZTU0OWFlMDRhMDk4NTQ1OWJkZTZjNjI2NTk0ZTdiMDVkYzQyNzhiMmExNDY1YzEzNjg0MDg4MjNjODVlOTZkYzY2YzNhMzA5ODNjNjM5NjY0ZmM0NTY5YTM3ZmUyMWU1YTE5NWI1Nzc2ZWVkMmRmOGQ4ZDM2MWFmNjg2ZTc1MDIyOWJiZDY2M2YxNjE4NjhhNTA2MTVlMGMzMzdiZWMwY2EzNWZlYzBiYjE5YzM2ZWIyZTBiYmNjMDU4MmZhMWQ5M2FhY2RiMDYxMDYzZjU5ZjJjZTFlZTQzNjA1ZTVkODllY2ExODNkMmFjZGZlOWY4MTAxMTAyMmFkM2I0M2EzZGQ0MTdkYWM5NGI0ZTExZWE4MWIxOTI5NjZlOTY2YjE4MjA4MmU3MTk2NDYwN2I0ZjgwMDJmMzYyOTk4NDRhMTFmMmFlMGZhZWFjMmVhZTcwZjhmNGY5ODA4OGFjZGNkMGFjNTU2ZTlmY2NjNTExNTIxOTA4ZmFkMjZmMDRjNjQyMDE0NTAzMDU3Nzg3NThiMDUzOGJmOGI1YmIxNDRhODI4ZTYyOTc5NSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSAxMF8zCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MjA0ODoxNjoiZWNmNWFlY2QxZTU1MTVmZmZhY2JkNzVhMjgxNmM2ZWJmNDkwMThjZGZiNDYzOGUxODVkNjZhNzM5NmI2ZjgwOTBmODAxOGM3ZmQ5NWNjMzRiODU3ZGMxN2YwY2M2NTE2YmIxMzQ2YWI0ZDU4MmNhZGFkN2I0MTAzMzUyMzg3YjcwMzM4ZDA4NDA0N2M5ZDk1MzliNjQ5NjIwNGIzZGQ2ZWE0NDI0OTkyMDdiZWMwMWY5NjQyODdmZjYzMzZjMzk4NDY1ODMzNjg0NmY1NmU0Njg2MTg4MWMxMDIzM2QyMTc2YmYxNWE1ZTk2ZGRjNzgwYmM4NjhhYTc3ZDNjZTc2OSI6MTY6ImJjNDZjNDY0ZmM2YWM0Y2E3ODNiMGViMDhhM2M4NDFiNzcyZjdlOWIyZjI4YmFiZDU4OGFlODg1ZTFhMGM2MWU0ODU4YTBmYjI1YWMyOTk5OTBmMzViZTg1MTY0YzI1OWJhMTE3NWNkZDcxOTI3MDcxMzUxODQ5OTJiNmMyOWI3NDZkZDBkMmNhYmUxNDI4MzVmN2QxNDhjYzE2MTUyNGI0YTA5OTQ2ZDQ4YjgyODQ3M2YxY2U3NmI2Y2I2ODg2YzM0NWMwM2UwNWY0MWQ1MWI1YzNhOTBhM2YyNDA3M2M3ZDc0YTRmZTI1ZDljZjIxYzc1OTYwZjNmYzM4NjMxODMiOjE2OiJhZTQ1ZWQ1NjAxY2VjNmI4Y2MwNWY4MDM5MzVjNjc0ZGRiZTBkNzVjNGMwOWZkNzk1MWZjNmIwY2FlYzMxM2E4ZGYzOTk3MGM1MThiZmZiYTVlZDY4ZjNmMGQ3ZjIyYTQwMjlkNDEzZjFhZTA3ZTRlYmU5ZTQxNzdjZTIzZTdmNTQwNGI1NjllNGVlMWJkY2YzYzFmYjAzZWYxMTM4MDJkNGY4NTVlYjliNTEzNGI1YTdjODA4NWFkY2FlNmZhMmZhMTQxN2VjMzc2M2JlMTcxYjBjNjJiNzYwZWRlMjNjMTJhZDkyYjk4MDg4NGM2NDFmNWE4ZmFjMjZiZGFkNGEwMzM4MWEyMmZlMWI3NTQ4ODUwOTRjODI1MDZkNDAxOWE1MzVhMjg2YWZlYjI3MWJiOWJhNTkyZGUxOGRjZjYwMGMyYWVlYWU1NmUwMmY3Y2Y3OWZjMTRjZjNiZGM3Y2Q4NGZlYmJiZjk1MGNhOTAzMDRiMjIxOWE3YWEwNjNhZWZhMmMzYzE5ODBlNTYwY2Q2NGFmZTc3OTU4NWI2MTA3NjU3Yjk1Nzg1N2VmZGU2MDEwOTg4YWI3ZGU0MTdmYzg4ZDhmMzg0YzRlNmU3MmMzZjk0M2UwYzMxYzBjNGE1Y2MzNmY4NzlkOGEzYWM5ZDdkNTk4NjBlYWFkYTZiODNiYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI1MTBhMmNmNjBlODY2ZmEyMzQwNTUzYzk0ZWEzOWZiYzI1NjMxMWU4M2U5NDQ1NGI0MTI0IjoiMzg1Mzg3NTE0ZGVjY2M3Yzc0MGRkOGNkZjlkYWVlNDlhMWNiZmQ1NCI6Ijk4ODZjM2U2NzY0YThiOWE4NGU4NDE0OGViZDhjM2IxYWE4MDUwMzgxYTc4ZjY2ODcxNGMxNmQ5Y2ZkMmE2ZWRjNTY5NzljNTM1ZDlkZWUzYjQ0Yjg1YzE4YmU4OTI4OTkyMzcxNzExNDcyMjE2ZDk1ZGRhOThkMmVlODM0N2M5YjE0ZGZmZGZmODRhYTQ4ZDI1YWMwNmY3ZDdlNjUzOThhYzk2N2IxY2U5MDkyNWY2N2RjZTA0OWI3ZjgxMmRiMDc0Mjk5N2E3NGQ0NGZlODFkYmUwZTdhM2ZlYWYyZTVjNDBhZjg4OGQ1NTBkZGJiZTNiYzIwNjU3YTI5NTQzZjhmYzI5MTNiOWJkMWE2MWIyYWIyMjU2ZWM0MDliYmQ3ZGMwZDE3NzE3ZWEyNWM0M2Y0MmVkMjdkZjg3MzhiZjRhZmM2NzY2ZmY3YWZmMDg1OTU1NWVlMjgzOTIwZjRjOGE2M2M0YTczNDBjYmFmZGRjMzM5ZWNkYjRiMDUxNTAwMmY5NmM5MzJiNWI3OTE2N2FmNjk5YzBhZDNmY2NmZGYwZjQ0ZTg1YTcwMjYyYmYyZTE4ZmUzNGI4NTA1ODk5NzVlODY3ZmY5NjlkNDhlYWJmMjEyMjcxNTQ2Y2RjMDVhNjllY2I1MjZlNTI4NzBjODM2ZjMwN2JkNzk4NzgwZWRlIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDEwXzQKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoyMDQ4OjE2OiJlY2Y1YWVjZDFlNTUxNWZmZmFjYmQ3NWEyODE2YzZlYmY0OTAxOGNkZmI0NjM4ZTE4NWQ2NmE3Mzk2YjZmODA5MGY4MDE4YzdmZDk1Y2MzNGI4NTdkYzE3ZjBjYzY1MTZiYjEzNDZhYjRkNTgyY2FkYWQ3YjQxMDMzNTIzODdiNzAzMzhkMDg0MDQ3YzlkOTUzOWI2NDk2MjA0YjNkZDZlYTQ0MjQ5OTIwN2JlYzAxZjk2NDI4N2ZmNjMzNmMzOTg0NjU4MzM2ODQ2ZjU2ZTQ2ODYxODgxYzEwMjMzZDIxNzZiZjE1YTVlOTZkZGM3ODBiYzg2OGFhNzdkM2NlNzY5IjoxNjoiYmM0NmM0NjRmYzZhYzRjYTc4M2IwZWIwOGEzYzg0MWI3NzJmN2U5YjJmMjhiYWJkNTg4YWU4ODVlMWEwYzYxZTQ4NThhMGZiMjVhYzI5OTk5MGYzNWJlODUxNjRjMjU5YmExMTc1Y2RkNzE5MjcwNzEzNTE4NDk5MmI2YzI5Yjc0NmRkMGQyY2FiZTE0MjgzNWY3ZDE0OGNjMTYxNTI0YjRhMDk5NDZkNDhiODI4NDczZjFjZTc2YjZjYjY4ODZjMzQ1YzAzZTA1ZjQxZDUxYjVjM2E5MGEzZjI0MDczYzdkNzRhNGZlMjVkOWNmMjFjNzU5NjBmM2ZjMzg2MzE4MyI6MTY6ImFlNDVlZDU2MDFjZWM2YjhjYzA1ZjgwMzkzNWM2NzRkZGJlMGQ3NWM0YzA5ZmQ3OTUxZmM2YjBjYWVjMzEzYThkZjM5OTcwYzUxOGJmZmJhNWVkNjhmM2YwZDdmMjJhNDAyOWQ0MTNmMWFlMDdlNGViZTllNDE3N2NlMjNlN2Y1NDA0YjU2OWU0ZWUxYmRjZjNjMWZiMDNlZjExMzgwMmQ0Zjg1NWViOWI1MTM0YjVhN2M4MDg1YWRjYWU2ZmEyZmExNDE3ZWMzNzYzYmUxNzFiMGM2MmI3NjBlZGUyM2MxMmFkOTJiOTgwODg0YzY0MWY1YThmYWMyNmJkYWQ0YTAzMzgxYTIyZmUxYjc1NDg4NTA5NGM4MjUwNmQ0MDE5YTUzNWEyODZhZmViMjcxYmI5YmE1OTJkZTE4ZGNmNjAwYzJhZWVhZTU2ZTAyZjdjZjc5ZmMxNGNmM2JkYzdjZDg0ZmViYmJmOTUwY2E5MDMwNGIyMjE5YTdhYTA2M2FlZmEyYzNjMTk4MGU1NjBjZDY0YWZlNzc5NTg1YjYxMDc2NTdiOTU3ODU3ZWZkZTYwMTA5ODhhYjdkZTQxN2ZjODhkOGYzODRjNGU2ZTcyYzNmOTQzZTBjMzFjMGM0YTVjYzM2Zjg3OWQ4YTNhYzlkN2Q1OTg2MGVhYWRhNmI4M2JiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImJjZGQxOTBkYTNiN2QzMDBkZjlhMDZlMjJjYWFlMmE3NWYxMGM5MWZmNjY3YjdjMTZiZGU4YjUzMDY0YTI2NDlhOTQwNDVjOSI6IjVjYWNhNmEwZjc2NDE2MWE5Njg0Zjg1ZDkyYjZlMGVmMzdjYThiNjUiOiI2MzE4ZTlmYjVjMGQwNWU1MzA3ZTE2ODM0MzZlOTAzMjkzYWM0NjQyMzU4YWFhMjIzZDcxNjMwMTNhYmE4N2UyZGZkYThlNjBjNjg2MGUyOWExZTkyNjg2MTYzZWEwYjkxNzVmMzI5Y2EzYjEzMWExZWRkM2E3Nzc1OWE4Yjk3YmFkNmE0ZjhmNDM5NmYyOGNmNmYzOWNhNTgxMTJlNDgxNjBkNmUyMDNkYWE1ODU2ZjNhY2E1ZmZlZDU3N2FmNDk5NDA4ZTNkZmQyMzNlM2U2MDRkYmUzNGE5YzRjOTA4MmRlNjU1MjdjYWM2MzMxZDI5ZGM4MGUwNTA4YTBmYTcxMjJlN2YzMjlmNmNjYTVjZmEzNGQ0ZDFkYTQxNzgwNTQ1N2UwMDhiZWM1NDllNDc4ZmY5ZTEyYTc2M2M0NzdkMTViYmI3OGY1YjY5YmQ1NzgzMGZjMmM0ZWQ2ODZkNzliYzcyYTk1ZDg1Zjg4MTM0YzZiMGFmZTU2YThjY2ZiYzg1NTgyOGJiMzM5YmQxNzkwOWNmMWQ3MGRlMzMzNWFlMDcwMzkwOTNlNjA2ZDY1NTM2NWRlNjU1MGI4NzJjZDZkZTFkNDQwZWUwMzFiNjE5NDVmNjI5YWQ4YTM1M2IwZDQwOTM5ZTk2YTNjNDUwZDJhOGQ1ZWVlOWY2NzgwOTNjOCI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSAxMF81Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MjA0ODoxNjoiZWNmNWFlY2QxZTU1MTVmZmZhY2JkNzVhMjgxNmM2ZWJmNDkwMThjZGZiNDYzOGUxODVkNjZhNzM5NmI2ZjgwOTBmODAxOGM3ZmQ5NWNjMzRiODU3ZGMxN2YwY2M2NTE2YmIxMzQ2YWI0ZDU4MmNhZGFkN2I0MTAzMzUyMzg3YjcwMzM4ZDA4NDA0N2M5ZDk1MzliNjQ5NjIwNGIzZGQ2ZWE0NDI0OTkyMDdiZWMwMWY5NjQyODdmZjYzMzZjMzk4NDY1ODMzNjg0NmY1NmU0Njg2MTg4MWMxMDIzM2QyMTc2YmYxNWE1ZTk2ZGRjNzgwYmM4NjhhYTc3ZDNjZTc2OSI6MTY6ImJjNDZjNDY0ZmM2YWM0Y2E3ODNiMGViMDhhM2M4NDFiNzcyZjdlOWIyZjI4YmFiZDU4OGFlODg1ZTFhMGM2MWU0ODU4YTBmYjI1YWMyOTk5OTBmMzViZTg1MTY0YzI1OWJhMTE3NWNkZDcxOTI3MDcxMzUxODQ5OTJiNmMyOWI3NDZkZDBkMmNhYmUxNDI4MzVmN2QxNDhjYzE2MTUyNGI0YTA5OTQ2ZDQ4YjgyODQ3M2YxY2U3NmI2Y2I2ODg2YzM0NWMwM2UwNWY0MWQ1MWI1YzNhOTBhM2YyNDA3M2M3ZDc0YTRmZTI1ZDljZjIxYzc1OTYwZjNmYzM4NjMxODMiOjE2OiJhZTQ1ZWQ1NjAxY2VjNmI4Y2MwNWY4MDM5MzVjNjc0ZGRiZTBkNzVjNGMwOWZkNzk1MWZjNmIwY2FlYzMxM2E4ZGYzOTk3MGM1MThiZmZiYTVlZDY4ZjNmMGQ3ZjIyYTQwMjlkNDEzZjFhZTA3ZTRlYmU5ZTQxNzdjZTIzZTdmNTQwNGI1NjllNGVlMWJkY2YzYzFmYjAzZWYxMTM4MDJkNGY4NTVlYjliNTEzNGI1YTdjODA4NWFkY2FlNmZhMmZhMTQxN2VjMzc2M2JlMTcxYjBjNjJiNzYwZWRlMjNjMTJhZDkyYjk4MDg4NGM2NDFmNWE4ZmFjMjZiZGFkNGEwMzM4MWEyMmZlMWI3NTQ4ODUwOTRjODI1MDZkNDAxOWE1MzVhMjg2YWZlYjI3MWJiOWJhNTkyZGUxOGRjZjYwMGMyYWVlYWU1NmUwMmY3Y2Y3OWZjMTRjZjNiZGM3Y2Q4NGZlYmJiZjk1MGNhOTAzMDRiMjIxOWE3YWEwNjNhZWZhMmMzYzE5ODBlNTYwY2Q2NGFmZTc3OTU4NWI2MTA3NjU3Yjk1Nzg1N2VmZGU2MDEwOTg4YWI3ZGU0MTdmYzg4ZDhmMzg0YzRlNmU3MmMzZjk0M2UwYzMxYzBjNGE1Y2MzNmY4NzlkOGEzYWM5ZDdkNTk4NjBlYWFkYTZiODNiYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJhN2RkNmM3ZGMyNGI0NmY5ZGQ1ZjFlOTFhZGE0YzNiM2RmOTQ3ZTg3NzIzMmE5IjoiOTViY2E5ZTM4NTk4OTRiM2RkODY5ZmE3ZWNkNWJiYzY0MDFiZjNlNCI6Ijc1MjkwODcyY2NmZDRhNDUwNTY2MGQ2NTFmNTZkYTZkYWEwOWNhMTMwMWQ4OTA2MzJmNmE5OTJmM2Q1NjVjZWU0NjRhZmRlZDQwZWQzYjViZTkzNTY3MTRlYTVhYTc2NTVmNGExMzY2YzJmMTdjNzI4ZjZmMmM1YTVkMWY4ZTI4NDI5YmM0ZTZmOGYyY2ZmOGRhOGRjMGUwYTk4MDhlNDVmZDA5ZWEyZmE0MGNiMmI2Y2U2ZmZmZjVjMGUxNTlkMTFiNjhkOTBhODVmN2I4NGUxMDNiMDllNjgyNjY2NDgwYzY1NzUwNWMwOTI5MjU5NDY4YTMxNDc4NmQ3NGVhYjEzMTU3M2NmMjM0YmY1N2RiN2Q5ZTY2Y2M2NzQ4MTkyZTAwMmRjMGRlZWE5MzA1ODVmMDgzMWZkY2Q5YmMzM2Q1MWY3OWVkMmZmYzE2YmNmNGQ1OTgxMmZjZWJjYWEzZjkwNjliMGU0NDU2ODZkNjQ0YzI1Y2NmNjNiNDU2ZWU1ZmE2ZmZlOTZmMTljZGY3NTFmZWQ5ZWFmMzU5NTc3NTRkYmY0YmZlYTUyMTZhYTE4NDRkYzUwN2NiMmQwODBlNzIyZWJhMTUwMzA4YzJiNWZmMTE5MzYyMGYxNzY2ZWNmNDQ4MWJhZmI5NDNiZDI5Mjg3N2YyMTM2Y2E0OTRhYmEwIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDEwXzYKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoyMDQ4OjE2OiJlY2Y1YWVjZDFlNTUxNWZmZmFjYmQ3NWEyODE2YzZlYmY0OTAxOGNkZmI0NjM4ZTE4NWQ2NmE3Mzk2YjZmODA5MGY4MDE4YzdmZDk1Y2MzNGI4NTdkYzE3ZjBjYzY1MTZiYjEzNDZhYjRkNTgyY2FkYWQ3YjQxMDMzNTIzODdiNzAzMzhkMDg0MDQ3YzlkOTUzOWI2NDk2MjA0YjNkZDZlYTQ0MjQ5OTIwN2JlYzAxZjk2NDI4N2ZmNjMzNmMzOTg0NjU4MzM2ODQ2ZjU2ZTQ2ODYxODgxYzEwMjMzZDIxNzZiZjE1YTVlOTZkZGM3ODBiYzg2OGFhNzdkM2NlNzY5IjoxNjoiYmM0NmM0NjRmYzZhYzRjYTc4M2IwZWIwOGEzYzg0MWI3NzJmN2U5YjJmMjhiYWJkNTg4YWU4ODVlMWEwYzYxZTQ4NThhMGZiMjVhYzI5OTk5MGYzNWJlODUxNjRjMjU5YmExMTc1Y2RkNzE5MjcwNzEzNTE4NDk5MmI2YzI5Yjc0NmRkMGQyY2FiZTE0MjgzNWY3ZDE0OGNjMTYxNTI0YjRhMDk5NDZkNDhiODI4NDczZjFjZTc2YjZjYjY4ODZjMzQ1YzAzZTA1ZjQxZDUxYjVjM2E5MGEzZjI0MDczYzdkNzRhNGZlMjVkOWNmMjFjNzU5NjBmM2ZjMzg2MzE4MyI6MTY6ImFlNDVlZDU2MDFjZWM2YjhjYzA1ZjgwMzkzNWM2NzRkZGJlMGQ3NWM0YzA5ZmQ3OTUxZmM2YjBjYWVjMzEzYThkZjM5OTcwYzUxOGJmZmJhNWVkNjhmM2YwZDdmMjJhNDAyOWQ0MTNmMWFlMDdlNGViZTllNDE3N2NlMjNlN2Y1NDA0YjU2OWU0ZWUxYmRjZjNjMWZiMDNlZjExMzgwMmQ0Zjg1NWViOWI1MTM0YjVhN2M4MDg1YWRjYWU2ZmEyZmExNDE3ZWMzNzYzYmUxNzFiMGM2MmI3NjBlZGUyM2MxMmFkOTJiOTgwODg0YzY0MWY1YThmYWMyNmJkYWQ0YTAzMzgxYTIyZmUxYjc1NDg4NTA5NGM4MjUwNmQ0MDE5YTUzNWEyODZhZmViMjcxYmI5YmE1OTJkZTE4ZGNmNjAwYzJhZWVhZTU2ZTAyZjdjZjc5ZmMxNGNmM2JkYzdjZDg0ZmViYmJmOTUwY2E5MDMwNGIyMjE5YTdhYTA2M2FlZmEyYzNjMTk4MGU1NjBjZDY0YWZlNzc5NTg1YjYxMDc2NTdiOTU3ODU3ZWZkZTYwMTA5ODhhYjdkZTQxN2ZjODhkOGYzODRjNGU2ZTcyYzNmOTQzZTBjMzFjMGM0YTVjYzM2Zjg3OWQ4YTNhYzlkN2Q1OTg2MGVhYWRhNmI4M2JiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImVhZjFhNzNhMWIwYzQ2MDk1MzdkZTY5Y2Q5MjI4YmJjZmI5YThjYThjNmMzZWZhZjA1NmZlNGE3ZjQ2MzRlZDAwYjdjMzllYzY5MjJkN2I4ZWEyYzA0ZWJhYyI6IjlmNDdkZGY0MmU5N2VlYTg1NmE5YmRiYzcxNGViM2FjMjJmNmViMzIiOiIyZDIwN2E3MzQzMmE4ZmI0YzAzMDUxYjNmNzNiMjhhNjE3NjQwOThkZmEzNGM0N2EyMDk5NWY4MTE1YWE2ODE2Njc5YjU1N2U4MmRiZWU1ODQ5MDhjNmU2OTc4MmQ3ZGViMzRkYmQ2NWFmMDYzZDU3ZmNhNzZhNWZkMDY5NDkyZmQ2MDY4ZDk5ODRkMjA5MzUwNTY1YTYyZTVjNzdmMjMwMzhjMTJjYjEwYzY2MzQ3MDliNTQ3YzQ2ZjZiNGE3MDliZDg1Y2ExMjJkNzQ0NjVlZjk3NzYyYzI5NzYzZTA2ZGJjN2E5ZTczOGM3OGJmY2EwMTAyZGM1ZTc5ZDY1Yjk3M2YyODI0MGNhYWIyZTE2MWE3OGI1N2QyNjI0NTdlZDgxOTVkNTNlM2M3YWU5ZGEwMjE4ODNjNmRiN2MyNGFmZGQyMzIyZWFjOTcyYWQzYzM1NGM1ZmNlZjFlMTQ2YzNhMDI5MGZiNjdhZGYwMDcwNjZlMDA0MjhkMmNlYzE4Y2U1OGY5MzI4Njk4ZGVmZWY0YjJlYjVlYzc2OTE4ZmRlMWMxOThjYmIzOGI3YWZjNjc2MjZhOWFlZmVjNDMyMmJmZDkwZDI1NjM0ODFjOWEyMjFmNzhjODI3MmM4MmQxYjYyYWI5MTRlMWM2OWY2YWY2ZWYzMGNhNTI2MGRiNGE0NiI6MAorCitSU0FTU0EtUFNTIFNpZ25pbmcgVGVzdCBWZWN0b3IgSW50Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNDoxNjoiZDE3ZjY1NWJmMjdjOGIxNmQzNTQ2MmM5MDVjYzA0YTI2ZjM3ZTJhNjdmYTljMGNlMGRjZWQ0NzIzOTRhMGRmNzQzZmU3ZjkyOWUzNzhlZmRiMzY4ZWRkZmY0NTNjZjAwN2FmNmQ5NDhlMGFkZTc1NzM3MWY4YTcxMWUyNzhmNmIiOjE2OiJjNmQ5MmI2ZmVlNzQxNGQxMzU4Y2UxNTQ2ZmI2Mjk4NzUzMGI5MGJkMTVlMGYxNDk2M2E1ZTI2MzVhZGI2OTM0N2VjMGMwMWIyYWIxNzYzZmQ4YWMxYTU5MmZiMjI3NTc0NjNhOTgyNDI1YmI5N2EzYTQzN2M1YmY4NmQwM2YyZiI6MTY6ImEyYmE0MGVlMDdlM2IyYmQyZjAyY2UyMjdmMzZhMTk1MDI0NDg2ZTQ5YzE5Y2I0MWJiYmRmYmJhOThiMjJiMGU1NzdjMmVlYWZmYTIwZDg4M2E3NmU2NWUzOTRjNjlkNGIzYzA1YTFlOGZhZGRhMjdlZGIyYTQyYmMwMDBmZTg4OGI5YjMyYzIyZDE1YWRkMGNkNzZiM2U3OTM2ZTE5OTU1YjIyMGRkMTdkNGVhOTA0YjFlYzEwMmIyZTRkZTc3NTEyMjJhYTk5MTUxMDI0YzdjYjQxY2M1ZWEyMWQwMGVlYjQxZjdjODAwODM0ZDJjNmUwNmJjZTNiY2U3ZWE5YTUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijg1OWVlZjJmZDc4YWNhMDAzMDhiZGM0NzExOTNiZjU1YmY5ZDc4ZGI4ZjhhNjcyYjQ4NDYzNGYzYzljMjZlNjQ3OGFlMTAyNjBmZTBkZDhjMDgyZTUzYTUyOTNhZjIxNzNjZDUwYzZkNWQzNTRmZWJmNzhiMjYwMjFjMjVjMDI3MTJlNzhjZDQ2OTRjOWY0Njk3NzdlNDUxZTdmOGU5ZTA0Y2QzNzM5YzZiYmZlZGFlNDg3ZmI1NTY0NGU5Y2E3NGZmNzdhNTNjYjcyOTgwMmY2ZWQ0YTVmZmE4YmExNTk4OTBmYyI6ImUzYjVkNWQwMDJjMWJjZTUwYzJiNjVlZjg4YTE4OGQ4M2JjZTdlNjEiOiI4ZGFhNjI3ZDNkZTc1OTVkNjMwNTZjN2VjNjU5ZTU0NDA2ZjEwNjEwMTI4YmFhZTgyMWM4YjJhMGYzOTM2ZDU0ZGMzYmRjZTQ2Njg5ZjZiNzk1MWJiMThlODQwNTQyNzY5NzE4ZDU3MTVkMjEwZDg1ZWZiYjU5NjE5MjAzMmM0MmJlNGMyOTk3MmM4NTYyNzVlYjZkNWE0NWYwNWY1MTg3NmZjNjc0M2RlZGRkMjhjYWVjOWJiMzBlYTk5ZTAyYzM0ODgyNjk2MDRmZTQ5N2Y3NGNjZDdjN2ZjYTE2NzE4OTcxMjNjYmQzMGRlZjVkNTRhMmI1NTM2YWQ5MGE3NDdlIjowCisKK1JTQVNTQS1QU1MgVmVyaWZpY2F0aW9uIFRlc3QgVmVjdG9yIEludAorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNDoxNjoiYTJiYTQwZWUwN2UzYjJiZDJmMDJjZTIyN2YzNmExOTUwMjQ0ODZlNDljMTljYjQxYmJiZGZiYmE5OGIyMmIwZTU3N2MyZWVhZmZhMjBkODgzYTc2ZTY1ZTM5NGM2OWQ0YjNjMDVhMWU4ZmFkZGEyN2VkYjJhNDJiYzAwMGZlODg4YjliMzJjMjJkMTVhZGQwY2Q3NmIzZTc5MzZlMTk5NTViMjIwZGQxN2Q0ZWE5MDRiMWVjMTAyYjJlNGRlNzc1MTIyMmFhOTkxNTEwMjRjN2NiNDFjYzVlYTIxZDAwZWViNDFmN2M4MDA4MzRkMmM2ZTA2YmNlM2JjZTdlYTlhNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiODU5ZWVmMmZkNzhhY2EwMDMwOGJkYzQ3MTE5M2JmNTViZjlkNzhkYjhmOGE2NzJiNDg0NjM0ZjNjOWMyNmU2NDc4YWUxMDI2MGZlMGRkOGMwODJlNTNhNTI5M2FmMjE3M2NkNTBjNmQ1ZDM1NGZlYmY3OGIyNjAyMWMyNWMwMjcxMmU3OGNkNDY5NGM5ZjQ2OTc3N2U0NTFlN2Y4ZTllMDRjZDM3MzljNmJiZmVkYWU0ODdmYjU1NjQ0ZTljYTc0ZmY3N2E1M2NiNzI5ODAyZjZlZDRhNWZmYThiYTE1OTg5MGZjIjoiZTNiNWQ1ZDAwMmMxYmNlNTBjMmI2NWVmODhhMTg4ZDgzYmNlN2U2MSI6IjhkYWE2MjdkM2RlNzU5NWQ2MzA1NmM3ZWM2NTllNTQ0MDZmMTA2MTAxMjhiYWFlODIxYzhiMmEwZjM5MzZkNTRkYzNiZGNlNDY2ODlmNmI3OTUxYmIxOGU4NDA1NDI3Njk3MThkNTcxNWQyMTBkODVlZmJiNTk2MTkyMDMyYzQyYmU0YzI5OTcyYzg1NjI3NWViNmQ1YTQ1ZjA1ZjUxODc2ZmM2NzQzZGVkZGQyOGNhZWM5YmIzMGVhOTllMDJjMzQ4ODI2OTYwNGZlNDk3Zjc0Y2NkN2M3ZmNhMTY3MTg5NzEyM2NiZDMwZGVmNWQ1NGEyYjU1MzZhZDkwYTc0N2UiOjAKKworUlNBU1NBLVBTUyBTaWduaW5nIFRlc3QgVmVjdG9yIEhhc2ggdG9vIGxhcmdlCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNDoxNjoiZDE3ZjY1NWJmMjdjOGIxNmQzNTQ2MmM5MDVjYzA0YTI2ZjM3ZTJhNjdmYTljMGNlMGRjZWQ0NzIzOTRhMGRmNzQzZmU3ZjkyOWUzNzhlZmRiMzY4ZWRkZmY0NTNjZjAwN2FmNmQ5NDhlMGFkZTc1NzM3MWY4YTcxMWUyNzhmNmIiOjE2OiJjNmQ5MmI2ZmVlNzQxNGQxMzU4Y2UxNTQ2ZmI2Mjk4NzUzMGI5MGJkMTVlMGYxNDk2M2E1ZTI2MzVhZGI2OTM0N2VjMGMwMWIyYWIxNzYzZmQ4YWMxYTU5MmZiMjI3NTc0NjNhOTgyNDI1YmI5N2EzYTQzN2M1YmY4NmQwM2YyZiI6MTY6ImEyYmE0MGVlMDdlM2IyYmQyZjAyY2UyMjdmMzZhMTk1MDI0NDg2ZTQ5YzE5Y2I0MWJiYmRmYmJhOThiMjJiMGU1NzdjMmVlYWZmYTIwZDg4M2E3NmU2NWUzOTRjNjlkNGIzYzA1YTFlOGZhZGRhMjdlZGIyYTQyYmMwMDBmZTg4OGI5YjMyYzIyZDE1YWRkMGNkNzZiM2U3OTM2ZTE5OTU1YjIyMGRkMTdkNGVhOTA0YjFlYzEwMmIyZTRkZTc3NTEyMjJhYTk5MTUxMDI0YzdjYjQxY2M1ZWEyMWQwMGVlYjQxZjdjODAwODM0ZDJjNmUwNmJjZTNiY2U3ZWE5YTUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTUxMjoiZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDlkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OWQ0MzZlOTk1NjlmZDMyYTdjOGEwNWJiYzkwZDMyYzQ5ZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDlkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OWQ0MzZlOTk1NjlmZDAwIjoiZTNiNWQ1ZDAwMmMxYmNlNTBjMmI2NWVmODhhMTg4ZDgzYmNlN2U2MSI6IiI6TUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMV8xCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNDoxNjoiZTdlODk0MjcyMGE4Nzc1MTcyNzNhMzU2MDUzZWEyYTFiYzBjOTRhYTcyZDU1YzZlODYyOTZiMmRmYzk2Nzk0OGMwYTcyY2JjY2NhN2VhY2IzNTcwNmUwOWExZGY1NWExNTM1YmQ5YjNjYzM0MTYwYjNiNmRjZDNlZGE4ZTY0NDMiOjE2OiJiNjlkY2ExY2Y3ZDRkN2VjODFlNzViOTBmY2NhODc0YWJjZGUxMjNmZDI3MDAxODBhYTkwNDc5YjZlNDhkZThkNjdlZDI0ZjlmMTlkODViYTI3NTg3NGY1NDJjZDIwZGM3MjNlNjk2MzM2NGExZjk0MjU0NTJiMjY5YTY3OTlmZCI6MTY6ImE1NmU0YTBlNzAxMDE3NTg5YTUxODdkYzdlYTg0MWQxNTZmMmVjMGUzNmFkNTJhNDRkZmViMWU2MWY3YWQ5OTFkOGM1MTA1NmZmZWRiMTYyYjRjMGYyODNhMTJhODhhMzk0ZGZmNTI2YWI3MjkxY2JiMzA3Y2VhYmZjZTBiMWRmZDVjZDk1MDgwOTZkNWIyYjhiNmRmNWQ2NzFlZjYzNzdjMDkyMWNiMjNjMjcwYTcwZTI1OThlNmZmODlkMTlmMTA1YWNjMmQzZjBjYjM1ZjI5MjgwZTEzODZiNmY2NGM0ZWYyMmUxZTFmMjBkMGNlOGNmZmIyMjQ5YmQ5YTIxMzciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImNkYzg3ZGEyMjNkNzg2ZGYzYjQ1ZTBiYmJjNzIxMzI2ZDFlZTJhZjgwNmNjMzE1NDc1Y2M2ZjBkOWM2NmUxYjYyMzcxZDQ1Y2UyMzkyZTFhYzkyODQ0YzMxMDEwMmYxNTZhMGQ4ZDUyYzFmNGM0MGJhM2FhNjUwOTU3ODZjYjc2OTc1N2E2NTYzYmE5NThmZWQwYmNjOTg0ZThiNTE3YTNkNWY1MTViMjNiOGE0MWU3NGFhODY3NjkzZjkwZGZiMDYxYTZlODZkZmFhZWU2NDQ3MmMwMGU1ZjIwOTQ1NzI5Y2JlYmU3N2YwNmNlNzhlMDhmNDA5OGZiYTQxZjlkNjE5M2MwMzE3ZThiNjBkNGI2MDg0YWNiNDJkMjllMzgwOGEzYmMzNzJkODVlMzMxMTcwZmNiZjdjYzcyZDBiNzFjMjk2NjQ4YjNhNGQxMGY0MTYyOTVkMDgwN2FhNjI1Y2FiMjc0NGZkOWVhOGZkMjIzYzQyNTM3MDI5ODI4YmQxNmJlMDI1NDZmMTMwZmQyZTMzYjkzNmQyNjc2ZTA4YWVkMWI3MzMxOGI3NTBhMDE2N2QwIjoiZGVlOTU5YzdlMDY0MTEzNjE0MjBmZjgwMTg1ZWQ1N2YzZTY3NzZhZiI6IjkwNzQzMDhmYjU5OGU5NzAxYjIyOTQzODhlNTJmOTcxZmFhYzJiNjBhNTE0NWFmMTg1ZGY1Mjg3YjVlZDI4ODdlNTdjZTdmZDQ0ZGM4NjM0ZTQwN2M4ZTBlNDM2MGJjMjI2ZjNlYzIyN2Y5ZDllNTQ2MzhlOGQzMWY1MDUxMjE1ZGY2ZWJiOWMyZjk1NzlhYTc3NTk4YTM4ZjkxNGI1YjljMWJkODNjNGUyZjlmMzgyYTBkMGFhMzU0MmZmZWU2NTk4NGE2MDFiYzY5ZWIyOGRlYjI3ZGNhMTJjODJjMmQ0YzNmNjZjZDUwMGYxZmYyYjk5NGQ4YTRlMzBjYmIzM2MiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxXzEgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjQ6MTY6ImE1NmU0YTBlNzAxMDE3NTg5YTUxODdkYzdlYTg0MWQxNTZmMmVjMGUzNmFkNTJhNDRkZmViMWU2MWY3YWQ5OTFkOGM1MTA1NmZmZWRiMTYyYjRjMGYyODNhMTJhODhhMzk0ZGZmNTI2YWI3MjkxY2JiMzA3Y2VhYmZjZTBiMWRmZDVjZDk1MDgwOTZkNWIyYjhiNmRmNWQ2NzFlZjYzNzdjMDkyMWNiMjNjMjcwYTcwZTI1OThlNmZmODlkMTlmMTA1YWNjMmQzZjBjYjM1ZjI5MjgwZTEzODZiNmY2NGM0ZWYyMmUxZTFmMjBkMGNlOGNmZmIyMjQ5YmQ5YTIxMzciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImNkYzg3ZGEyMjNkNzg2ZGYzYjQ1ZTBiYmJjNzIxMzI2ZDFlZTJhZjgwNmNjMzE1NDc1Y2M2ZjBkOWM2NmUxYjYyMzcxZDQ1Y2UyMzkyZTFhYzkyODQ0YzMxMDEwMmYxNTZhMGQ4ZDUyYzFmNGM0MGJhM2FhNjUwOTU3ODZjYjc2OTc1N2E2NTYzYmE5NThmZWQwYmNjOTg0ZThiNTE3YTNkNWY1MTViMjNiOGE0MWU3NGFhODY3NjkzZjkwZGZiMDYxYTZlODZkZmFhZWU2NDQ3MmMwMGU1ZjIwOTQ1NzI5Y2JlYmU3N2YwNmNlNzhlMDhmNDA5OGZiYTQxZjlkNjE5M2MwMzE3ZThiNjBkNGI2MDg0YWNiNDJkMjllMzgwOGEzYmMzNzJkODVlMzMxMTcwZmNiZjdjYzcyZDBiNzFjMjk2NjQ4YjNhNGQxMGY0MTYyOTVkMDgwN2FhNjI1Y2FiMjc0NGZkOWVhOGZkMjIzYzQyNTM3MDI5ODI4YmQxNmJlMDI1NDZmMTMwZmQyZTMzYjkzNmQyNjc2ZTA4YWVkMWI3MzMxOGI3NTBhMDE2N2QwIjoiZGVlOTU5YzdlMDY0MTEzNjE0MjBmZjgwMTg1ZWQ1N2YzZTY3NzZhZiI6IjkwNzQzMDhmYjU5OGU5NzAxYjIyOTQzODhlNTJmOTcxZmFhYzJiNjBhNTE0NWFmMTg1ZGY1Mjg3YjVlZDI4ODdlNTdjZTdmZDQ0ZGM4NjM0ZTQwN2M4ZTBlNDM2MGJjMjI2ZjNlYzIyN2Y5ZDllNTQ2MzhlOGQzMWY1MDUxMjE1ZGY2ZWJiOWMyZjk1NzlhYTc3NTk4YTM4ZjkxNGI1YjljMWJkODNjNGUyZjlmMzgyYTBkMGFhMzU0MmZmZWU2NTk4NGE2MDFiYzY5ZWIyOGRlYjI3ZGNhMTJjODJjMmQ0YzNmNjZjZDUwMGYxZmYyYjk5NGQ4YTRlMzBjYmIzM2MiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxXzIKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI0OjE2OiJlN2U4OTQyNzIwYTg3NzUxNzI3M2EzNTYwNTNlYTJhMWJjMGM5NGFhNzJkNTVjNmU4NjI5NmIyZGZjOTY3OTQ4YzBhNzJjYmNjY2E3ZWFjYjM1NzA2ZTA5YTFkZjU1YTE1MzViZDliM2NjMzQxNjBiM2I2ZGNkM2VkYThlNjQ0MyI6MTY6ImI2OWRjYTFjZjdkNGQ3ZWM4MWU3NWI5MGZjY2E4NzRhYmNkZTEyM2ZkMjcwMDE4MGFhOTA0NzliNmU0OGRlOGQ2N2VkMjRmOWYxOWQ4NWJhMjc1ODc0ZjU0MmNkMjBkYzcyM2U2OTYzMzY0YTFmOTQyNTQ1MmIyNjlhNjc5OWZkIjoxNjoiYTU2ZTRhMGU3MDEwMTc1ODlhNTE4N2RjN2VhODQxZDE1NmYyZWMwZTM2YWQ1MmE0NGRmZWIxZTYxZjdhZDk5MWQ4YzUxMDU2ZmZlZGIxNjJiNGMwZjI4M2ExMmE4OGEzOTRkZmY1MjZhYjcyOTFjYmIzMDdjZWFiZmNlMGIxZGZkNWNkOTUwODA5NmQ1YjJiOGI2ZGY1ZDY3MWVmNjM3N2MwOTIxY2IyM2MyNzBhNzBlMjU5OGU2ZmY4OWQxOWYxMDVhY2MyZDNmMGNiMzVmMjkyODBlMTM4NmI2ZjY0YzRlZjIyZTFlMWYyMGQwY2U4Y2ZmYjIyNDliZDlhMjEzNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiODUxMzg0Y2RmZTgxOWMyMmVkNmM0Y2NiMzBkYWViNWNmMDU5YmM4ZTExNjZiN2UzNTMwYzRjMjMzZTJiNWY4ZjcxYTFjY2E1ODJkNDNlY2M3MmIxYmNhMTZkZmM3MDEzMjI2YjllIjoiZWYyODY5ZmE0MGMzNDZjYjE4M2RhYjNkN2JmZmM5OGZkNTZkZjQyZCI6IjNlZjdmNDZlODMxYmY5MmIzMjI3NDE0MmE1ODVmZmNlZmJkY2E3YjMyYWU5MGQxMGZiMGYwYzcyOTk4NGYwNGVmMjlhOWRmMDc4MDc3NWNlNDM3MzliOTc4MzgzOTBkYjBhNTUwNWU2M2RlOTI3MDI4ZDlkMjliMjE5Y2EyYzQ1MTc4MzI1NThhNTVkNjk0YTZkMjViOWRhYjY2MDAzYzRjY2NkOTA3ODAyMTkzYmU1MTcwZDI2MTQ3ZDM3YjkzNTkwMjQxYmU1MWMyNTA1NWY0N2VmNjI3NTJjZmJlMjE0MThmYWZlOThjMjJjNGQ0ZDQ3NzI0ZmRiNTY2OWU4NDMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxXzIgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjQ6MTY6ImE1NmU0YTBlNzAxMDE3NTg5YTUxODdkYzdlYTg0MWQxNTZmMmVjMGUzNmFkNTJhNDRkZmViMWU2MWY3YWQ5OTFkOGM1MTA1NmZmZWRiMTYyYjRjMGYyODNhMTJhODhhMzk0ZGZmNTI2YWI3MjkxY2JiMzA3Y2VhYmZjZTBiMWRmZDVjZDk1MDgwOTZkNWIyYjhiNmRmNWQ2NzFlZjYzNzdjMDkyMWNiMjNjMjcwYTcwZTI1OThlNmZmODlkMTlmMTA1YWNjMmQzZjBjYjM1ZjI5MjgwZTEzODZiNmY2NGM0ZWYyMmUxZTFmMjBkMGNlOGNmZmIyMjQ5YmQ5YTIxMzciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijg1MTM4NGNkZmU4MTljMjJlZDZjNGNjYjMwZGFlYjVjZjA1OWJjOGUxMTY2YjdlMzUzMGM0YzIzM2UyYjVmOGY3MWExY2NhNTgyZDQzZWNjNzJiMWJjYTE2ZGZjNzAxMzIyNmI5ZSI6ImVmMjg2OWZhNDBjMzQ2Y2IxODNkYWIzZDdiZmZjOThmZDU2ZGY0MmQiOiIzZWY3ZjQ2ZTgzMWJmOTJiMzIyNzQxNDJhNTg1ZmZjZWZiZGNhN2IzMmFlOTBkMTBmYjBmMGM3Mjk5ODRmMDRlZjI5YTlkZjA3ODA3NzVjZTQzNzM5Yjk3ODM4MzkwZGIwYTU1MDVlNjNkZTkyNzAyOGQ5ZDI5YjIxOWNhMmM0NTE3ODMyNTU4YTU1ZDY5NGE2ZDI1YjlkYWI2NjAwM2M0Y2NjZDkwNzgwMjE5M2JlNTE3MGQyNjE0N2QzN2I5MzU5MDI0MWJlNTFjMjUwNTVmNDdlZjYyNzUyY2ZiZTIxNDE4ZmFmZTk4YzIyYzRkNGQ0NzcyNGZkYjU2NjllODQzIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMV8zCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNDoxNjoiZTdlODk0MjcyMGE4Nzc1MTcyNzNhMzU2MDUzZWEyYTFiYzBjOTRhYTcyZDU1YzZlODYyOTZiMmRmYzk2Nzk0OGMwYTcyY2JjY2NhN2VhY2IzNTcwNmUwOWExZGY1NWExNTM1YmQ5YjNjYzM0MTYwYjNiNmRjZDNlZGE4ZTY0NDMiOjE2OiJiNjlkY2ExY2Y3ZDRkN2VjODFlNzViOTBmY2NhODc0YWJjZGUxMjNmZDI3MDAxODBhYTkwNDc5YjZlNDhkZThkNjdlZDI0ZjlmMTlkODViYTI3NTg3NGY1NDJjZDIwZGM3MjNlNjk2MzM2NGExZjk0MjU0NTJiMjY5YTY3OTlmZCI6MTY6ImE1NmU0YTBlNzAxMDE3NTg5YTUxODdkYzdlYTg0MWQxNTZmMmVjMGUzNmFkNTJhNDRkZmViMWU2MWY3YWQ5OTFkOGM1MTA1NmZmZWRiMTYyYjRjMGYyODNhMTJhODhhMzk0ZGZmNTI2YWI3MjkxY2JiMzA3Y2VhYmZjZTBiMWRmZDVjZDk1MDgwOTZkNWIyYjhiNmRmNWQ2NzFlZjYzNzdjMDkyMWNiMjNjMjcwYTcwZTI1OThlNmZmODlkMTlmMTA1YWNjMmQzZjBjYjM1ZjI5MjgwZTEzODZiNmY2NGM0ZWYyMmUxZTFmMjBkMGNlOGNmZmIyMjQ5YmQ5YTIxMzciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImE0YjE1OTk0MTc2MWM0MGM2YTgyZjJiODBkMWI5NGY1YWEyNjU0ZmQxN2UxMmQ1ODg4NjQ2NzliNTRjZDA0ZWY4YmQwMzAxMmJlOGRjMzdmNGI4M2FmNzk2M2ZhZmYwZGZhMjI1NDc3NDM3YzQ4MDE3ZmYyYmU4MTkxY2YzOTU1ZmMwNzM1NmVhYjNmMzIyZjdmNjIwZTIxZDI1NGU1ZGI0MzI0Mjc5ZmUwNjdlMDkxMGUyZTgxY2EyY2FiMzFjNzQ1ZTY3YTU0MDU4ZWI1MGQ5OTNjZGI5ZWQwYjRkMDI5YzA2ZDIxYTk0Y2E2NjFjM2NlMjdmYWUxZDZjYjIwZjQ1NjRkNjZjZTQ3Njc1ODNkMGU1ZjA2MDIxNWI1OTAxN2JlODVlYTg0ODkzOTEyN2JkOGM5YzRkNDdiNTEwNTZjMDMxY2YzMzZmMTdjOTk4MGYzYjhmNWI5YjY4NzhlOGI3OTdhYTQzYjg4MjY4NDMzM2UxNzg5M2ZlOWNhYTZhYTI5OWY3ZWQxYTE4ZWUyYzU0ODY0YjdiMmI5OWI3MjYxOGZiMDI1NzRkMTM5ZWY1MGYwMTljOWVlZjQxNjk3MTMzOGU3ZDQ3MCI6IjcxMGI5YzQ3NDdkODAwZDRkZTg3ZjEyYWZkY2U2ZGYxODEwN2NjNzciOiI2NjYwMjZmYmE3MWJkM2U3Y2YxMzE1N2NjMmM1MWE4ZTRhYTY4NGFmOTc3OGY5MTg0OWYzNDMzNWQxNDFjMDAxNTRjNDE5NzYyMWY5NjI0YTY3NWI1YWJjMjJlZTdkNWJhYWZmYWFlMWM5YmFjYTJjYzM3M2IzZjMzZTc4ZTYxNDNjMzk1YTkxYWE3ZmFjYTY2NGViNzMzYWZkMTRkODgyNzI1OWQ5OWE3NTUwZmFjYTUwMWVmMmIwNGUzM2MyM2FhNTFmNGI5ZTgyODJlZmRiNzI4Y2MwYWIwOTQwNWE5MTYwN2M2MzY5OTYxYmM4MjcwZDJkNGYzOWZjZTYxMmIxIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMV8zICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI0OjE2OiJhNTZlNGEwZTcwMTAxNzU4OWE1MTg3ZGM3ZWE4NDFkMTU2ZjJlYzBlMzZhZDUyYTQ0ZGZlYjFlNjFmN2FkOTkxZDhjNTEwNTZmZmVkYjE2MmI0YzBmMjgzYTEyYTg4YTM5NGRmZjUyNmFiNzI5MWNiYjMwN2NlYWJmY2UwYjFkZmQ1Y2Q5NTA4MDk2ZDViMmI4YjZkZjVkNjcxZWY2Mzc3YzA5MjFjYjIzYzI3MGE3MGUyNTk4ZTZmZjg5ZDE5ZjEwNWFjYzJkM2YwY2IzNWYyOTI4MGUxMzg2YjZmNjRjNGVmMjJlMWUxZjIwZDBjZThjZmZiMjI0OWJkOWEyMTM3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJhNGIxNTk5NDE3NjFjNDBjNmE4MmYyYjgwZDFiOTRmNWFhMjY1NGZkMTdlMTJkNTg4ODY0Njc5YjU0Y2QwNGVmOGJkMDMwMTJiZThkYzM3ZjRiODNhZjc5NjNmYWZmMGRmYTIyNTQ3NzQzN2M0ODAxN2ZmMmJlODE5MWNmMzk1NWZjMDczNTZlYWIzZjMyMmY3ZjYyMGUyMWQyNTRlNWRiNDMyNDI3OWZlMDY3ZTA5MTBlMmU4MWNhMmNhYjMxYzc0NWU2N2E1NDA1OGViNTBkOTkzY2RiOWVkMGI0ZDAyOWMwNmQyMWE5NGNhNjYxYzNjZTI3ZmFlMWQ2Y2IyMGY0NTY0ZDY2Y2U0NzY3NTgzZDBlNWYwNjAyMTViNTkwMTdiZTg1ZWE4NDg5MzkxMjdiZDhjOWM0ZDQ3YjUxMDU2YzAzMWNmMzM2ZjE3Yzk5ODBmM2I4ZjViOWI2ODc4ZThiNzk3YWE0M2I4ODI2ODQzMzNlMTc4OTNmZTljYWE2YWEyOTlmN2VkMWExOGVlMmM1NDg2NGI3YjJiOTliNzI2MThmYjAyNTc0ZDEzOWVmNTBmMDE5YzllZWY0MTY5NzEzMzhlN2Q0NzAiOiI3MTBiOWM0NzQ3ZDgwMGQ0ZGU4N2YxMmFmZGNlNmRmMTgxMDdjYzc3IjoiNjY2MDI2ZmJhNzFiZDNlN2NmMTMxNTdjYzJjNTFhOGU0YWE2ODRhZjk3NzhmOTE4NDlmMzQzMzVkMTQxYzAwMTU0YzQxOTc2MjFmOTYyNGE2NzViNWFiYzIyZWU3ZDViYWFmZmFhZTFjOWJhY2EyY2MzNzNiM2YzM2U3OGU2MTQzYzM5NWE5MWFhN2ZhY2E2NjRlYjczM2FmZDE0ZDg4MjcyNTlkOTlhNzU1MGZhY2E1MDFlZjJiMDRlMzNjMjNhYTUxZjRiOWU4MjgyZWZkYjcyOGNjMGFiMDk0MDVhOTE2MDdjNjM2OTk2MWJjODI3MGQyZDRmMzlmY2U2MTJiMSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDFfNAorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjQ6MTY6ImU3ZTg5NDI3MjBhODc3NTE3MjczYTM1NjA1M2VhMmExYmMwYzk0YWE3MmQ1NWM2ZTg2Mjk2YjJkZmM5Njc5NDhjMGE3MmNiY2NjYTdlYWNiMzU3MDZlMDlhMWRmNTVhMTUzNWJkOWIzY2MzNDE2MGIzYjZkY2QzZWRhOGU2NDQzIjoxNjoiYjY5ZGNhMWNmN2Q0ZDdlYzgxZTc1YjkwZmNjYTg3NGFiY2RlMTIzZmQyNzAwMTgwYWE5MDQ3OWI2ZTQ4ZGU4ZDY3ZWQyNGY5ZjE5ZDg1YmEyNzU4NzRmNTQyY2QyMGRjNzIzZTY5NjMzNjRhMWY5NDI1NDUyYjI2OWE2Nzk5ZmQiOjE2OiJhNTZlNGEwZTcwMTAxNzU4OWE1MTg3ZGM3ZWE4NDFkMTU2ZjJlYzBlMzZhZDUyYTQ0ZGZlYjFlNjFmN2FkOTkxZDhjNTEwNTZmZmVkYjE2MmI0YzBmMjgzYTEyYTg4YTM5NGRmZjUyNmFiNzI5MWNiYjMwN2NlYWJmY2UwYjFkZmQ1Y2Q5NTA4MDk2ZDViMmI4YjZkZjVkNjcxZWY2Mzc3YzA5MjFjYjIzYzI3MGE3MGUyNTk4ZTZmZjg5ZDE5ZjEwNWFjYzJkM2YwY2IzNWYyOTI4MGUxMzg2YjZmNjRjNGVmMjJlMWUxZjIwZDBjZThjZmZiMjI0OWJkOWEyMTM3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJiYzY1Njc0N2ZhOWVhZmIzZjAiOiIwNTZmMDA5ODVkZTE0ZDhlZjVjZWE5ZTgyZjhjMjdiZWY3MjAzMzVlIjoiNDYwOTc5M2IyM2U5ZDA5MzYyZGMyMWJiNDdkYTBiNGYzYTc2MjI2NDlhNDdkNDY0MDE5YjlhZWFmZTUzMzU5YzE3OGM5MWNkNThiYTZiY2I3OGJlMDM0NmE3YmM2MzdmNGI4NzNkNGJhYjM4ZWU2NjFmMTk5NjM0YzU0N2ExYWQ4NDQyZTAzZGEwMTViMTM2ZTU0M2Y3YWIwN2MwYzEzZTQyMjViOGRlOGNjZTI1ZDRmNmViODQwMGY4MWY3ZTE4MzNiN2VlNmUzMzRkMzcwOTY0Y2E3OWZkYjg3MmI0ZDc1MjIzYjVlZWIwODEwMTU5MWZiNTMyZDE1NWE2ZGU4NyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDFfNCAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNDoxNjoiYTU2ZTRhMGU3MDEwMTc1ODlhNTE4N2RjN2VhODQxZDE1NmYyZWMwZTM2YWQ1MmE0NGRmZWIxZTYxZjdhZDk5MWQ4YzUxMDU2ZmZlZGIxNjJiNGMwZjI4M2ExMmE4OGEzOTRkZmY1MjZhYjcyOTFjYmIzMDdjZWFiZmNlMGIxZGZkNWNkOTUwODA5NmQ1YjJiOGI2ZGY1ZDY3MWVmNjM3N2MwOTIxY2IyM2MyNzBhNzBlMjU5OGU2ZmY4OWQxOWYxMDVhY2MyZDNmMGNiMzVmMjkyODBlMTM4NmI2ZjY0YzRlZjIyZTFlMWYyMGQwY2U4Y2ZmYjIyNDliZDlhMjEzNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiYmM2NTY3NDdmYTllYWZiM2YwIjoiMDU2ZjAwOTg1ZGUxNGQ4ZWY1Y2VhOWU4MmY4YzI3YmVmNzIwMzM1ZSI6IjQ2MDk3OTNiMjNlOWQwOTM2MmRjMjFiYjQ3ZGEwYjRmM2E3NjIyNjQ5YTQ3ZDQ2NDAxOWI5YWVhZmU1MzM1OWMxNzhjOTFjZDU4YmE2YmNiNzhiZTAzNDZhN2JjNjM3ZjRiODczZDRiYWIzOGVlNjYxZjE5OTYzNGM1NDdhMWFkODQ0MmUwM2RhMDE1YjEzNmU1NDNmN2FiMDdjMGMxM2U0MjI1YjhkZThjY2UyNWQ0ZjZlYjg0MDBmODFmN2UxODMzYjdlZTZlMzM0ZDM3MDk2NGNhNzlmZGI4NzJiNGQ3NTIyM2I1ZWViMDgxMDE1OTFmYjUzMmQxNTVhNmRlODciOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxXzUKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI0OjE2OiJlN2U4OTQyNzIwYTg3NzUxNzI3M2EzNTYwNTNlYTJhMWJjMGM5NGFhNzJkNTVjNmU4NjI5NmIyZGZjOTY3OTQ4YzBhNzJjYmNjY2E3ZWFjYjM1NzA2ZTA5YTFkZjU1YTE1MzViZDliM2NjMzQxNjBiM2I2ZGNkM2VkYThlNjQ0MyI6MTY6ImI2OWRjYTFjZjdkNGQ3ZWM4MWU3NWI5MGZjY2E4NzRhYmNkZTEyM2ZkMjcwMDE4MGFhOTA0NzliNmU0OGRlOGQ2N2VkMjRmOWYxOWQ4NWJhMjc1ODc0ZjU0MmNkMjBkYzcyM2U2OTYzMzY0YTFmOTQyNTQ1MmIyNjlhNjc5OWZkIjoxNjoiYTU2ZTRhMGU3MDEwMTc1ODlhNTE4N2RjN2VhODQxZDE1NmYyZWMwZTM2YWQ1MmE0NGRmZWIxZTYxZjdhZDk5MWQ4YzUxMDU2ZmZlZGIxNjJiNGMwZjI4M2ExMmE4OGEzOTRkZmY1MjZhYjcyOTFjYmIzMDdjZWFiZmNlMGIxZGZkNWNkOTUwODA5NmQ1YjJiOGI2ZGY1ZDY3MWVmNjM3N2MwOTIxY2IyM2MyNzBhNzBlMjU5OGU2ZmY4OWQxOWYxMDVhY2MyZDNmMGNiMzVmMjkyODBlMTM4NmI2ZjY0YzRlZjIyZTFlMWYyMGQwY2U4Y2ZmYjIyNDliZDlhMjEzNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiYjQ1NTgxNTQ3ZTU0Mjc3NzBjNzY4ZThiODJiNzU1NjRlMGVhNGU5YzMyNTk0ZDZiZmY3MDY1NDRkZTBhODc3NmM3YTgwYjQ1NzY1NTBlZWUxYjJhY2FiYzdlOGI3ZDNlZjdiYjViMDNlNDYyYzExMDQ3ZWFkZDAwNjI5YWU1NzU0ODBhYzE0NzBmZTA0NmYxM2EyYmY1YWYxNzkyMWRjNGIwYWE4YjAyYmVlNjMzNDkxMTY1MWQ3Zjg1MjVkMTBmMzJiNTFkMzNiZTUyMGQzZGRmNWE3MDk5NTVhM2RmZTc4MjgzYjllMGFiNTQwNDZkMTUwYzE3N2YwMzdmZGNjYzViZTRlYTVmNjhiNWU1YTM4YzlkN2VkY2NjYzQ5NzVmNDU1YTY5MDliNCI6IjgwZTcwZmY4NmEwOGRlM2VjNjA5NzJiMzliNGZiZmRjZWE2N2FlOGUiOiIxZDJhYWQyMjFjYTRkMzFkZGYxMzUwOTIzOTAxOTM5OGUzZDE0YjMyZGMzNGRjNWFmNGFlYWVhM2MwOTVhZjczNDc5Y2YwYTQ1ZTU2Mjk2MzVhNTNhMDE4Mzc3NjE1YjE2Y2I5YjEzYjNlMDlkNjcxZWI3MWUzODdiODU0NWM1OTYwZGE1YTY0Nzc2ZTc2OGU4MmIyYzkzNTgzYmYxMDRjM2ZkYjIzNTEyYjdiNGU4OWY2MzNkZDAwNjNhNTMwZGI0NTI0YjAxYzNmMzg0YzA5MzEwZTMxNWE3OWRjZDNkNjg0MDIyYTdmMzFjODY1YTY2NGUzMTY5NzhiNzU5ZmFkIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMV81ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI0OjE2OiJhNTZlNGEwZTcwMTAxNzU4OWE1MTg3ZGM3ZWE4NDFkMTU2ZjJlYzBlMzZhZDUyYTQ0ZGZlYjFlNjFmN2FkOTkxZDhjNTEwNTZmZmVkYjE2MmI0YzBmMjgzYTEyYTg4YTM5NGRmZjUyNmFiNzI5MWNiYjMwN2NlYWJmY2UwYjFkZmQ1Y2Q5NTA4MDk2ZDViMmI4YjZkZjVkNjcxZWY2Mzc3YzA5MjFjYjIzYzI3MGE3MGUyNTk4ZTZmZjg5ZDE5ZjEwNWFjYzJkM2YwY2IzNWYyOTI4MGUxMzg2YjZmNjRjNGVmMjJlMWUxZjIwZDBjZThjZmZiMjI0OWJkOWEyMTM3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJiNDU1ODE1NDdlNTQyNzc3MGM3NjhlOGI4MmI3NTU2NGUwZWE0ZTljMzI1OTRkNmJmZjcwNjU0NGRlMGE4Nzc2YzdhODBiNDU3NjU1MGVlZTFiMmFjYWJjN2U4YjdkM2VmN2JiNWIwM2U0NjJjMTEwNDdlYWRkMDA2MjlhZTU3NTQ4MGFjMTQ3MGZlMDQ2ZjEzYTJiZjVhZjE3OTIxZGM0YjBhYThiMDJiZWU2MzM0OTExNjUxZDdmODUyNWQxMGYzMmI1MWQzM2JlNTIwZDNkZGY1YTcwOTk1NWEzZGZlNzgyODNiOWUwYWI1NDA0NmQxNTBjMTc3ZjAzN2ZkY2NjNWJlNGVhNWY2OGI1ZTVhMzhjOWQ3ZWRjY2NjNDk3NWY0NTVhNjkwOWI0IjoiODBlNzBmZjg2YTA4ZGUzZWM2MDk3MmIzOWI0ZmJmZGNlYTY3YWU4ZSI6IjFkMmFhZDIyMWNhNGQzMWRkZjEzNTA5MjM5MDE5Mzk4ZTNkMTRiMzJkYzM0ZGM1YWY0YWVhZWEzYzA5NWFmNzM0NzljZjBhNDVlNTYyOTYzNWE1M2EwMTgzNzc2MTViMTZjYjliMTNiM2UwOWQ2NzFlYjcxZTM4N2I4NTQ1YzU5NjBkYTVhNjQ3NzZlNzY4ZTgyYjJjOTM1ODNiZjEwNGMzZmRiMjM1MTJiN2I0ZTg5ZjYzM2RkMDA2M2E1MzBkYjQ1MjRiMDFjM2YzODRjMDkzMTBlMzE1YTc5ZGNkM2Q2ODQwMjJhN2YzMWM4NjVhNjY0ZTMxNjk3OGI3NTlmYWQiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxXzYKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI0OjE2OiJlN2U4OTQyNzIwYTg3NzUxNzI3M2EzNTYwNTNlYTJhMWJjMGM5NGFhNzJkNTVjNmU4NjI5NmIyZGZjOTY3OTQ4YzBhNzJjYmNjY2E3ZWFjYjM1NzA2ZTA5YTFkZjU1YTE1MzViZDliM2NjMzQxNjBiM2I2ZGNkM2VkYThlNjQ0MyI6MTY6ImI2OWRjYTFjZjdkNGQ3ZWM4MWU3NWI5MGZjY2E4NzRhYmNkZTEyM2ZkMjcwMDE4MGFhOTA0NzliNmU0OGRlOGQ2N2VkMjRmOWYxOWQ4NWJhMjc1ODc0ZjU0MmNkMjBkYzcyM2U2OTYzMzY0YTFmOTQyNTQ1MmIyNjlhNjc5OWZkIjoxNjoiYTU2ZTRhMGU3MDEwMTc1ODlhNTE4N2RjN2VhODQxZDE1NmYyZWMwZTM2YWQ1MmE0NGRmZWIxZTYxZjdhZDk5MWQ4YzUxMDU2ZmZlZGIxNjJiNGMwZjI4M2ExMmE4OGEzOTRkZmY1MjZhYjcyOTFjYmIzMDdjZWFiZmNlMGIxZGZkNWNkOTUwODA5NmQ1YjJiOGI2ZGY1ZDY3MWVmNjM3N2MwOTIxY2IyM2MyNzBhNzBlMjU5OGU2ZmY4OWQxOWYxMDVhY2MyZDNmMGNiMzVmMjkyODBlMTM4NmI2ZjY0YzRlZjIyZTFlMWYyMGQwY2U4Y2ZmYjIyNDliZDlhMjEzNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMTBhYWU5YTBhYjBiNTk1ZDA4NDEyMDdiNzAwZDQ4ZDc1ZmFlZGRlM2I3NzVjZDZiNGNjODhhZTA2ZTQ2OTRlYzc0YmExOGY4NTIwZDRmNWVhNjljYmJlN2NjMmJlYmE0M2VmZGMxMDIxNWFjNGViMzJkYzMwMmExZjUzZGM2YzQzNTIyNjdlNzkzNmNmZWJmN2M4ZDY3MDM1Nzg0YTM5MDlmYTg1OWM3YjdiNTliOGUzOWM1YzIzNDlmMTg4NmI3MDVhMzAyNjdkNDAyZjc0ODZhYjRmNThjYWQ1ZDY5YWRiMTdhYjhjZDBjZTFjYWY1MDI1YWY0YWUyNGIxZmI4Nzk0YzYwNzBjYzA5YTUxZTJmOTkxMTMxMWUzODc3ZDAwNDRjNzFjNTdhOTkzMzk1MDA4ODA2YjcyM2FjMzgzNzNkMzk1NDgxODE4NTI4YzFlNzA1MzczOTI4MjA1MzUyOTUxMGU5MzVjZDBmYTc3YjhmYTUzY2MyZDQ3NGJkNGZiM2NjNWM2NzJkNmZmZGM5MGEwMGY5ODQ4NzEyYzRiY2ZlNDZjNjA1NzM2NTliMTFlNjQ1N2U4NjFmMGY2MDRiNjEzOGQxNDRmOGNlNGUyZGE3MyI6ImE4YWI2OWRkODAxZjAwNzRjMmExZmM2MDY0OTgzNmM2MTZkOTk2ODEiOiIyYTM0ZjYxMjVlMWY2YjBiZjk3MWU4NGZiZDQxYzYzMmJlOGYyYzJhY2U3ZGU4YjY5MjZlMzFmZjkzZTlhZjk4N2ZiYzA2ZTUxZTliZTE0ZjUxOThmOTFmM2Y5NTNiZDY3ZGE2MGE5ZGY1OTc2NGMzZGMwZmUwOGUxY2JlZjBiNzVmODY4ZDEwYWQzZmJhNzQ5ZmVmNTlmYjZkYWM0NmEwZDZlNTA0MzY5MzMxNTg2ZjU4ZTQ2MjhmMzlhYTI3ODk4MjU0M2JjMGVlYjUzN2RjNjE5NTgwMTliMzk0ZmIyNzNmMjE1ODU4YTBhMDFhYzRkNjUwYjk1NWM2N2Y0YzU4IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMV82ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI0OjE2OiJhNTZlNGEwZTcwMTAxNzU4OWE1MTg3ZGM3ZWE4NDFkMTU2ZjJlYzBlMzZhZDUyYTQ0ZGZlYjFlNjFmN2FkOTkxZDhjNTEwNTZmZmVkYjE2MmI0YzBmMjgzYTEyYTg4YTM5NGRmZjUyNmFiNzI5MWNiYjMwN2NlYWJmY2UwYjFkZmQ1Y2Q5NTA4MDk2ZDViMmI4YjZkZjVkNjcxZWY2Mzc3YzA5MjFjYjIzYzI3MGE3MGUyNTk4ZTZmZjg5ZDE5ZjEwNWFjYzJkM2YwY2IzNWYyOTI4MGUxMzg2YjZmNjRjNGVmMjJlMWUxZjIwZDBjZThjZmZiMjI0OWJkOWEyMTM3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIxMGFhZTlhMGFiMGI1OTVkMDg0MTIwN2I3MDBkNDhkNzVmYWVkZGUzYjc3NWNkNmI0Y2M4OGFlMDZlNDY5NGVjNzRiYTE4Zjg1MjBkNGY1ZWE2OWNiYmU3Y2MyYmViYTQzZWZkYzEwMjE1YWM0ZWIzMmRjMzAyYTFmNTNkYzZjNDM1MjI2N2U3OTM2Y2ZlYmY3YzhkNjcwMzU3ODRhMzkwOWZhODU5YzdiN2I1OWI4ZTM5YzVjMjM0OWYxODg2YjcwNWEzMDI2N2Q0MDJmNzQ4NmFiNGY1OGNhZDVkNjlhZGIxN2FiOGNkMGNlMWNhZjUwMjVhZjRhZTI0YjFmYjg3OTRjNjA3MGNjMDlhNTFlMmY5OTExMzExZTM4NzdkMDA0NGM3MWM1N2E5OTMzOTUwMDg4MDZiNzIzYWMzODM3M2QzOTU0ODE4MTg1MjhjMWU3MDUzNzM5MjgyMDUzNTI5NTEwZTkzNWNkMGZhNzdiOGZhNTNjYzJkNDc0YmQ0ZmIzY2M1YzY3MmQ2ZmZkYzkwYTAwZjk4NDg3MTJjNGJjZmU0NmM2MDU3MzY1OWIxMWU2NDU3ZTg2MWYwZjYwNGI2MTM4ZDE0NGY4Y2U0ZTJkYTczIjoiYThhYjY5ZGQ4MDFmMDA3NGMyYTFmYzYwNjQ5ODM2YzYxNmQ5OTY4MSI6IjJhMzRmNjEyNWUxZjZiMGJmOTcxZTg0ZmJkNDFjNjMyYmU4ZjJjMmFjZTdkZThiNjkyNmUzMWZmOTNlOWFmOTg3ZmJjMDZlNTFlOWJlMTRmNTE5OGY5MWYzZjk1M2JkNjdkYTYwYTlkZjU5NzY0YzNkYzBmZTA4ZTFjYmVmMGI3NWY4NjhkMTBhZDNmYmE3NDlmZWY1OWZiNmRhYzQ2YTBkNmU1MDQzNjkzMzE1ODZmNThlNDYyOGYzOWFhMjc4OTgyNTQzYmMwZWViNTM3ZGM2MTk1ODAxOWIzOTRmYjI3M2YyMTU4NThhMGEwMWFjNGQ2NTBiOTU1YzY3ZjRjNTgiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAyXzEKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI1OjE2OiIwMTY2MDFlOTI2YTBmOGM5ZTI2ZWNhYjc2OWVhNjVhNWU3YzUyY2M5ZTA4MGVmNTE5NDU3YzY0NGRhNjg5MWM1YTEwNGQzZWE3OTU1OTI5YTIyZTdjNjhhN2FmOWZjYWQ3NzdjM2NjYzJiOWUzZDM2NTBiY2U0MDQzOTliN2U1OWQxIjoxNjoiMDE0ZWFmYTFkNGQwMTg0ZGE3ZTMxZjg3N2QxMjgxZGRkYTYyNTY2NDg2OWU4Mzc5ZTY3YWQzYjc1ZWFlNzRhNTgwZTk4MjdhYmQ2ZWI3YTAwMmNiNTQxMWY1MjY2Nzk3NzY4ZmI4ZTk1YWU0MGUzZThhMDFmMzVmZjg5ZTU2YzA3OSI6MTY6IjAxZDQwYzFiY2Y5N2E2OGFlN2NkYmQ4YTdiZjNlMzRmYTE5ZGNjYTRlZjc1YTQ3NDU0Mzc1Zjk0NTE0ZDg4ZmVkMDA2ZmI4MjlmODQxOWZmODdkNjMxNWRhNjhhMWZmM2EwOTM4ZTlhYmIzNDY0MDExYzMwM2FkOTkxOTljZjBjN2M3YThiNDc3ZGNlODI5ZTg4NDRmNjI1YjExNWU1ZTljNGE1OWNmOGY4MTEzYjY4MzQzMzZhMmZkMjY4OWI0NzJjYmI1ZTVjYWJlNjc0MzUwYzU5YjZjMTdlMTc2ODc0ZmI0MmY4ZmMzZDE3NmEwMTdlZGM2MWZkMzI2YzRiMzNjOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZGFiYTAzMjA2NjI2M2ZhZWRiNjU5ODQ4MTE1Mjc4YTUyYzQ0ZmFhM2E3NmYzNzUxNWVkMzM2MzIxMDcyYzQwYTlkOWI1M2JjMDUwMTQwNzhhZGY1MjA4NzUxNDZhYWU3MGZmMDYwMjI2ZGNiN2IxZjFmYzI3ZTkzNjAiOiI1N2JmMTYwYmNiMDJiYjFkYzcyODBjZjA0NTg1MzBiN2QyODMyZmY3IjoiMDE0YzViYTUzMzgzMjhjY2M2ZTdhOTBiZjFjMGFiM2ZkNjA2ZmY0Nzk2ZDNjMTJlNGI2MzllZDkxMzZhNWZlYzZjMTZkODg4NGJkZDk5Y2ZkYzUyMTQ1NmIwNzQyYjczNjg2OGNmOTBkZTA5OWFkYjhkNWZmZDFkZWZmMzliYTQwMDdhYjc0NmNlZmRiMjJkN2RmMGUyMjVmNTQ2MjdkYzY1NDY2MTMxNzIxYjkwYWY0NDUzNjNhODM1OGI5ZjYwNzY0MmY3OGZhYjBhYjBmNDNiNzE2OGQ2NGJhZTcwZDg4Mjc4NDhkOGVmMWU0MjFjNTc1NGRkZjQyYzI1ODliNWIzIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMl8xICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI1OjE2OiIwMWQ0MGMxYmNmOTdhNjhhZTdjZGJkOGE3YmYzZTM0ZmExOWRjY2E0ZWY3NWE0NzQ1NDM3NWY5NDUxNGQ4OGZlZDAwNmZiODI5Zjg0MTlmZjg3ZDYzMTVkYTY4YTFmZjNhMDkzOGU5YWJiMzQ2NDAxMWMzMDNhZDk5MTk5Y2YwYzdjN2E4YjQ3N2RjZTgyOWU4ODQ0ZjYyNWIxMTVlNWU5YzRhNTljZjhmODExM2I2ODM0MzM2YTJmZDI2ODliNDcyY2JiNWU1Y2FiZTY3NDM1MGM1OWI2YzE3ZTE3Njg3NGZiNDJmOGZjM2QxNzZhMDE3ZWRjNjFmZDMyNmM0YjMzYzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImRhYmEwMzIwNjYyNjNmYWVkYjY1OTg0ODExNTI3OGE1MmM0NGZhYTNhNzZmMzc1MTVlZDMzNjMyMTA3MmM0MGE5ZDliNTNiYzA1MDE0MDc4YWRmNTIwODc1MTQ2YWFlNzBmZjA2MDIyNmRjYjdiMWYxZmMyN2U5MzYwIjoiNTdiZjE2MGJjYjAyYmIxZGM3MjgwY2YwNDU4NTMwYjdkMjgzMmZmNyI6IjAxNGM1YmE1MzM4MzI4Y2NjNmU3YTkwYmYxYzBhYjNmZDYwNmZmNDc5NmQzYzEyZTRiNjM5ZWQ5MTM2YTVmZWM2YzE2ZDg4ODRiZGQ5OWNmZGM1MjE0NTZiMDc0MmI3MzY4NjhjZjkwZGUwOTlhZGI4ZDVmZmQxZGVmZjM5YmE0MDA3YWI3NDZjZWZkYjIyZDdkZjBlMjI1ZjU0NjI3ZGM2NTQ2NjEzMTcyMWI5MGFmNDQ1MzYzYTgzNThiOWY2MDc2NDJmNzhmYWIwYWIwZjQzYjcxNjhkNjRiYWU3MGQ4ODI3ODQ4ZDhlZjFlNDIxYzU3NTRkZGY0MmMyNTg5YjViMyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDJfMgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjU6MTY6IjAxNjYwMWU5MjZhMGY4YzllMjZlY2FiNzY5ZWE2NWE1ZTdjNTJjYzllMDgwZWY1MTk0NTdjNjQ0ZGE2ODkxYzVhMTA0ZDNlYTc5NTU5MjlhMjJlN2M2OGE3YWY5ZmNhZDc3N2MzY2NjMmI5ZTNkMzY1MGJjZTQwNDM5OWI3ZTU5ZDEiOjE2OiIwMTRlYWZhMWQ0ZDAxODRkYTdlMzFmODc3ZDEyODFkZGRhNjI1NjY0ODY5ZTgzNzllNjdhZDNiNzVlYWU3NGE1ODBlOTgyN2FiZDZlYjdhMDAyY2I1NDExZjUyNjY3OTc3NjhmYjhlOTVhZTQwZTNlOGEwMWYzNWZmODllNTZjMDc5IjoxNjoiMDFkNDBjMWJjZjk3YTY4YWU3Y2RiZDhhN2JmM2UzNGZhMTlkY2NhNGVmNzVhNDc0NTQzNzVmOTQ1MTRkODhmZWQwMDZmYjgyOWY4NDE5ZmY4N2Q2MzE1ZGE2OGExZmYzYTA5MzhlOWFiYjM0NjQwMTFjMzAzYWQ5OTE5OWNmMGM3YzdhOGI0NzdkY2U4MjllODg0NGY2MjViMTE1ZTVlOWM0YTU5Y2Y4ZjgxMTNiNjgzNDMzNmEyZmQyNjg5YjQ3MmNiYjVlNWNhYmU2NzQzNTBjNTliNmMxN2UxNzY4NzRmYjQyZjhmYzNkMTc2YTAxN2VkYzYxZmQzMjZjNGIzM2M5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJlNGY4NjAxYThhNmRhMWJlMzQ0NDdjMDk1OWMwNTg1NzBjMzY2OGNmZDUxZGQ1ZjljY2Q2YWQ0NDExZmU4MjEzNDg2ZDc4YTZjNDlmOTNlZmMyY2EyMjg4Y2ViYzJiOWI2MGJkMDRiMWUyMjBkODZlM2Q0ODQ4ZDcwOWQwMzJkMWU4YzZhMDcwYzZhZjlhNDk5ZmNmOTUzNTRiMTRiYTYxMjdjNzM5ZGUxYmIwZmQxNjQzMWU0NjkzOGFlYzBjZjhhZDllYjcyZTgzMmE3MDM1ZGU5Yjc4MDdiZGMwZWQ4YjY4ZWIwZjVhYzIyMTZiZTQwY2U5MjBjMGRiMGVkZGQzODYwZWQ3ODhlZmFjY2FjYTUwMmQ4ZjJiZDZkMWE3YzFmNDFmZjQ2ZjE2ODFjOGYxZjgxOGU5YzRmNmQ5MWEwYzc4MDNjY2M2M2Q3NmE2NTQ0ZDg0M2UwODRlMzYzYjhhY2M1NWFhNTMxNzMzZWRiNWRlZTViNTE5NmU5ZjAzZThiNzMxYjM3NzY0MjhkOWU0NTdmZTNmYmNiM2RiNzI3NDQ0MmQ3ODU4OTBlOWNiMDg1NGI2NDQ0ZGFjZTc5MWQ3MjczZGUxODg5NzE5MzM4YTc3ZmUiOiI3ZjZkZDM1OWU2MDRlNjA4NzBlODk4ZTQ3YjE5YmYyZTVhN2IyYTkwIjoiMDEwOTkxNjU2Y2NhMTgyYjdmMjlkMmRiYzAwN2U3YWUwZmVjMTU4ZWI2NzU5Y2I5YzQ1YzVmZjg3Yzc2MzVkZDQ2ZDE1MDg4MmY0ZGUxZTlhZTY1ZTdmN2Q5MDE4ZjY4MzY5NTRhNDdjMGE4MWE4YTZiNmY4M2YyOTQ0ZDYwODFiMWFhN2M3NTliMjU0YjJjMzRiNjkxZGE2N2NjMDIyNmUyMGIyZjE4YjQyMjEyNzYxZGNkNGI5MDhhNjJiMzcxYjU5MThjNTc0MmFmNGI1MzdlMjk2OTE3Njc0ZmI5MTQxOTQ3NjE2MjFjYzE5YTQxZjZmYjk1M2ZiY2JiNjQ5ZGVhIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMl8yICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI1OjE2OiIwMWQ0MGMxYmNmOTdhNjhhZTdjZGJkOGE3YmYzZTM0ZmExOWRjY2E0ZWY3NWE0NzQ1NDM3NWY5NDUxNGQ4OGZlZDAwNmZiODI5Zjg0MTlmZjg3ZDYzMTVkYTY4YTFmZjNhMDkzOGU5YWJiMzQ2NDAxMWMzMDNhZDk5MTk5Y2YwYzdjN2E4YjQ3N2RjZTgyOWU4ODQ0ZjYyNWIxMTVlNWU5YzRhNTljZjhmODExM2I2ODM0MzM2YTJmZDI2ODliNDcyY2JiNWU1Y2FiZTY3NDM1MGM1OWI2YzE3ZTE3Njg3NGZiNDJmOGZjM2QxNzZhMDE3ZWRjNjFmZDMyNmM0YjMzYzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImU0Zjg2MDFhOGE2ZGExYmUzNDQ0N2MwOTU5YzA1ODU3MGMzNjY4Y2ZkNTFkZDVmOWNjZDZhZDQ0MTFmZTgyMTM0ODZkNzhhNmM0OWY5M2VmYzJjYTIyODhjZWJjMmI5YjYwYmQwNGIxZTIyMGQ4NmUzZDQ4NDhkNzA5ZDAzMmQxZThjNmEwNzBjNmFmOWE0OTlmY2Y5NTM1NGIxNGJhNjEyN2M3MzlkZTFiYjBmZDE2NDMxZTQ2OTM4YWVjMGNmOGFkOWViNzJlODMyYTcwMzVkZTliNzgwN2JkYzBlZDhiNjhlYjBmNWFjMjIxNmJlNDBjZTkyMGMwZGIwZWRkZDM4NjBlZDc4OGVmYWNjYWNhNTAyZDhmMmJkNmQxYTdjMWY0MWZmNDZmMTY4MWM4ZjFmODE4ZTljNGY2ZDkxYTBjNzgwM2NjYzYzZDc2YTY1NDRkODQzZTA4NGUzNjNiOGFjYzU1YWE1MzE3MzNlZGI1ZGVlNWI1MTk2ZTlmMDNlOGI3MzFiMzc3NjQyOGQ5ZTQ1N2ZlM2ZiY2IzZGI3Mjc0NDQyZDc4NTg5MGU5Y2IwODU0YjY0NDRkYWNlNzkxZDcyNzNkZTE4ODk3MTkzMzhhNzdmZSI6IjdmNmRkMzU5ZTYwNGU2MDg3MGU4OThlNDdiMTliZjJlNWE3YjJhOTAiOiIwMTA5OTE2NTZjY2ExODJiN2YyOWQyZGJjMDA3ZTdhZTBmZWMxNThlYjY3NTljYjljNDVjNWZmODdjNzYzNWRkNDZkMTUwODgyZjRkZTFlOWFlNjVlN2Y3ZDkwMThmNjgzNjk1NGE0N2MwYTgxYThhNmI2ZjgzZjI5NDRkNjA4MWIxYWE3Yzc1OWIyNTRiMmMzNGI2OTFkYTY3Y2MwMjI2ZTIwYjJmMThiNDIyMTI3NjFkY2Q0YjkwOGE2MmIzNzFiNTkxOGM1NzQyYWY0YjUzN2UyOTY5MTc2NzRmYjkxNDE5NDc2MTYyMWNjMTlhNDFmNmZiOTUzZmJjYmI2NDlkZWEiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAyXzMKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI1OjE2OiIwMTY2MDFlOTI2YTBmOGM5ZTI2ZWNhYjc2OWVhNjVhNWU3YzUyY2M5ZTA4MGVmNTE5NDU3YzY0NGRhNjg5MWM1YTEwNGQzZWE3OTU1OTI5YTIyZTdjNjhhN2FmOWZjYWQ3NzdjM2NjYzJiOWUzZDM2NTBiY2U0MDQzOTliN2U1OWQxIjoxNjoiMDE0ZWFmYTFkNGQwMTg0ZGE3ZTMxZjg3N2QxMjgxZGRkYTYyNTY2NDg2OWU4Mzc5ZTY3YWQzYjc1ZWFlNzRhNTgwZTk4MjdhYmQ2ZWI3YTAwMmNiNTQxMWY1MjY2Nzk3NzY4ZmI4ZTk1YWU0MGUzZThhMDFmMzVmZjg5ZTU2YzA3OSI6MTY6IjAxZDQwYzFiY2Y5N2E2OGFlN2NkYmQ4YTdiZjNlMzRmYTE5ZGNjYTRlZjc1YTQ3NDU0Mzc1Zjk0NTE0ZDg4ZmVkMDA2ZmI4MjlmODQxOWZmODdkNjMxNWRhNjhhMWZmM2EwOTM4ZTlhYmIzNDY0MDExYzMwM2FkOTkxOTljZjBjN2M3YThiNDc3ZGNlODI5ZTg4NDRmNjI1YjExNWU1ZTljNGE1OWNmOGY4MTEzYjY4MzQzMzZhMmZkMjY4OWI0NzJjYmI1ZTVjYWJlNjc0MzUwYzU5YjZjMTdlMTc2ODc0ZmI0MmY4ZmMzZDE3NmEwMTdlZGM2MWZkMzI2YzRiMzNjOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiNTJhMWQ5NmM4YWMzOWU0MWU0NTU4MDk4MDFiOTI3YTViNDQ1YzEwZDkwMmEwZGNkMzg1MGQyMmE2NmQyYmIwNzAzZTY3ZDU4NjcxMTQ1OTVhYWJmNWE3YWViNWE4Zjg3MDM0YmJiMzBlMTNjZmQ0ODE3YTliZTc2MjMwMDIzNjA2ZDAyODZhM2ZhZjhhNGQyMmI3MjhlYzUxODA3OWY5ZTY0NTI2ZTNhMGNjNzk0MWFhMzM4YzQzNzk5N2M2ODBjY2FjNjdjNjZiZmExIjoiZmNhODYyMDY4YmNlMjI0NjcyNGI3MDhhMDUxOWRhMTdlNjQ4Njg4YyI6IjAwN2YwMDMwMDE4ZjUzY2RjNzFmMjNkMDM2NTlmZGU1NGQ0MjQxZjc1OGE3NTBiNDJmMTg1Zjg3NTc4NTIwYzMwNzQyYWZkODQzNTliNmU2ZThkM2VkOTU5ZGM2ZmU0ODZiZWRjOGUyY2YwMDFmNjNhN2FiZTE2MjU2YTFiODRkZjBkMjQ5ZmMwNWQzMTk0Y2U1ZjA5MTI3NDJkYmJmODBkZDE3NGY2YzUxZjZiYWQ3ZjE2Y2YzMzY0ZWJhMDk1YTA2MjY3ZGMzNzkzODAzYWM3NTI2YWViZTBhNDc1ZDM4YjhjMjI0N2FiNTFjNDg5OGRmNzA0N2RjNmFkZjUyYzZjNCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDJfMyAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNToxNjoiMDFkNDBjMWJjZjk3YTY4YWU3Y2RiZDhhN2JmM2UzNGZhMTlkY2NhNGVmNzVhNDc0NTQzNzVmOTQ1MTRkODhmZWQwMDZmYjgyOWY4NDE5ZmY4N2Q2MzE1ZGE2OGExZmYzYTA5MzhlOWFiYjM0NjQwMTFjMzAzYWQ5OTE5OWNmMGM3YzdhOGI0NzdkY2U4MjllODg0NGY2MjViMTE1ZTVlOWM0YTU5Y2Y4ZjgxMTNiNjgzNDMzNmEyZmQyNjg5YjQ3MmNiYjVlNWNhYmU2NzQzNTBjNTliNmMxN2UxNzY4NzRmYjQyZjhmYzNkMTc2YTAxN2VkYzYxZmQzMjZjNGIzM2M5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI1MmExZDk2YzhhYzM5ZTQxZTQ1NTgwOTgwMWI5MjdhNWI0NDVjMTBkOTAyYTBkY2QzODUwZDIyYTY2ZDJiYjA3MDNlNjdkNTg2NzExNDU5NWFhYmY1YTdhZWI1YThmODcwMzRiYmIzMGUxM2NmZDQ4MTdhOWJlNzYyMzAwMjM2MDZkMDI4NmEzZmFmOGE0ZDIyYjcyOGVjNTE4MDc5ZjllNjQ1MjZlM2EwY2M3OTQxYWEzMzhjNDM3OTk3YzY4MGNjYWM2N2M2NmJmYTEiOiJmY2E4NjIwNjhiY2UyMjQ2NzI0YjcwOGEwNTE5ZGExN2U2NDg2ODhjIjoiMDA3ZjAwMzAwMThmNTNjZGM3MWYyM2QwMzY1OWZkZTU0ZDQyNDFmNzU4YTc1MGI0MmYxODVmODc1Nzg1MjBjMzA3NDJhZmQ4NDM1OWI2ZTZlOGQzZWQ5NTlkYzZmZTQ4NmJlZGM4ZTJjZjAwMWY2M2E3YWJlMTYyNTZhMWI4NGRmMGQyNDlmYzA1ZDMxOTRjZTVmMDkxMjc0MmRiYmY4MGRkMTc0ZjZjNTFmNmJhZDdmMTZjZjMzNjRlYmEwOTVhMDYyNjdkYzM3OTM4MDNhYzc1MjZhZWJlMGE0NzVkMzhiOGMyMjQ3YWI1MWM0ODk4ZGY3MDQ3ZGM2YWRmNTJjNmM0IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMl80Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNToxNjoiMDE2NjAxZTkyNmEwZjhjOWUyNmVjYWI3NjllYTY1YTVlN2M1MmNjOWUwODBlZjUxOTQ1N2M2NDRkYTY4OTFjNWExMDRkM2VhNzk1NTkyOWEyMmU3YzY4YTdhZjlmY2FkNzc3YzNjY2MyYjllM2QzNjUwYmNlNDA0Mzk5YjdlNTlkMSI6MTY6IjAxNGVhZmExZDRkMDE4NGRhN2UzMWY4NzdkMTI4MWRkZGE2MjU2NjQ4NjllODM3OWU2N2FkM2I3NWVhZTc0YTU4MGU5ODI3YWJkNmViN2EwMDJjYjU0MTFmNTI2Njc5Nzc2OGZiOGU5NWFlNDBlM2U4YTAxZjM1ZmY4OWU1NmMwNzkiOjE2OiIwMWQ0MGMxYmNmOTdhNjhhZTdjZGJkOGE3YmYzZTM0ZmExOWRjY2E0ZWY3NWE0NzQ1NDM3NWY5NDUxNGQ4OGZlZDAwNmZiODI5Zjg0MTlmZjg3ZDYzMTVkYTY4YTFmZjNhMDkzOGU5YWJiMzQ2NDAxMWMzMDNhZDk5MTk5Y2YwYzdjN2E4YjQ3N2RjZTgyOWU4ODQ0ZjYyNWIxMTVlNWU5YzRhNTljZjhmODExM2I2ODM0MzM2YTJmZDI2ODliNDcyY2JiNWU1Y2FiZTY3NDM1MGM1OWI2YzE3ZTE3Njg3NGZiNDJmOGZjM2QxNzZhMDE3ZWRjNjFmZDMyNmM0YjMzYzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImE3MTgyYzgzYWMxOGJlNjU3MGExMDZhYTlkNWM0ZTNkYmJkNGFmYWViMGM2MGM0YTIzZTE5NjlkNzlmZiI6IjgwNzBlZjJkZTk0NWMwMjM4NzY4NGJhMGQzMzA5NjczMjIzNWQ0NDAiOiIwMDljZDJmNGVkYmUyM2UxMjM0NmFlOGM3NmRkOWFkMzIzMGE2MjA3NjE0MWYxNmMxNTJiYTE4NTEzYTQ4ZWY2ZjAxMGUwZTM3ZmQzZGYxMGExZWM2MjlhMGNiNWEzYjVkMjg5MzAwNzI5OGMzMDkzNmE5NTkwM2I2YmE4NTU1NWQ5ZWMzNjczYTA2MTA4ZmQ2MmEyZmRhNTZkMWNlMmU4NWM0ZGI2YjI0YTgxY2EzYjQ5NmMzNmQ0ZmQwNmViN2M5MTY2ZDhlOTQ4NzdjNDJiZWE2MjJiM2JmZTkyNTFmZGMyMWQ4ZDUzNzFiYWRhZDc4YTQ4ODIxNDc5NjMzNWI0MGIiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAyXzQgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjU6MTY6IjAxZDQwYzFiY2Y5N2E2OGFlN2NkYmQ4YTdiZjNlMzRmYTE5ZGNjYTRlZjc1YTQ3NDU0Mzc1Zjk0NTE0ZDg4ZmVkMDA2ZmI4MjlmODQxOWZmODdkNjMxNWRhNjhhMWZmM2EwOTM4ZTlhYmIzNDY0MDExYzMwM2FkOTkxOTljZjBjN2M3YThiNDc3ZGNlODI5ZTg4NDRmNjI1YjExNWU1ZTljNGE1OWNmOGY4MTEzYjY4MzQzMzZhMmZkMjY4OWI0NzJjYmI1ZTVjYWJlNjc0MzUwYzU5YjZjMTdlMTc2ODc0ZmI0MmY4ZmMzZDE3NmEwMTdlZGM2MWZkMzI2YzRiMzNjOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiYTcxODJjODNhYzE4YmU2NTcwYTEwNmFhOWQ1YzRlM2RiYmQ0YWZhZWIwYzYwYzRhMjNlMTk2OWQ3OWZmIjoiODA3MGVmMmRlOTQ1YzAyMzg3Njg0YmEwZDMzMDk2NzMyMjM1ZDQ0MCI6IjAwOWNkMmY0ZWRiZTIzZTEyMzQ2YWU4Yzc2ZGQ5YWQzMjMwYTYyMDc2MTQxZjE2YzE1MmJhMTg1MTNhNDhlZjZmMDEwZTBlMzdmZDNkZjEwYTFlYzYyOWEwY2I1YTNiNWQyODkzMDA3Mjk4YzMwOTM2YTk1OTAzYjZiYTg1NTU1ZDllYzM2NzNhMDYxMDhmZDYyYTJmZGE1NmQxY2UyZTg1YzRkYjZiMjRhODFjYTNiNDk2YzM2ZDRmZDA2ZWI3YzkxNjZkOGU5NDg3N2M0MmJlYTYyMmIzYmZlOTI1MWZkYzIxZDhkNTM3MWJhZGFkNzhhNDg4MjE0Nzk2MzM1YjQwYiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDJfNQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjU6MTY6IjAxNjYwMWU5MjZhMGY4YzllMjZlY2FiNzY5ZWE2NWE1ZTdjNTJjYzllMDgwZWY1MTk0NTdjNjQ0ZGE2ODkxYzVhMTA0ZDNlYTc5NTU5MjlhMjJlN2M2OGE3YWY5ZmNhZDc3N2MzY2NjMmI5ZTNkMzY1MGJjZTQwNDM5OWI3ZTU5ZDEiOjE2OiIwMTRlYWZhMWQ0ZDAxODRkYTdlMzFmODc3ZDEyODFkZGRhNjI1NjY0ODY5ZTgzNzllNjdhZDNiNzVlYWU3NGE1ODBlOTgyN2FiZDZlYjdhMDAyY2I1NDExZjUyNjY3OTc3NjhmYjhlOTVhZTQwZTNlOGEwMWYzNWZmODllNTZjMDc5IjoxNjoiMDFkNDBjMWJjZjk3YTY4YWU3Y2RiZDhhN2JmM2UzNGZhMTlkY2NhNGVmNzVhNDc0NTQzNzVmOTQ1MTRkODhmZWQwMDZmYjgyOWY4NDE5ZmY4N2Q2MzE1ZGE2OGExZmYzYTA5MzhlOWFiYjM0NjQwMTFjMzAzYWQ5OTE5OWNmMGM3YzdhOGI0NzdkY2U4MjllODg0NGY2MjViMTE1ZTVlOWM0YTU5Y2Y4ZjgxMTNiNjgzNDMzNmEyZmQyNjg5YjQ3MmNiYjVlNWNhYmU2NzQzNTBjNTliNmMxN2UxNzY4NzRmYjQyZjhmYzNkMTc2YTAxN2VkYzYxZmQzMjZjNGIzM2M5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4NmE4M2Q0YTcyZWU5MzJhNGY1NjMwYWY2NTc5YTM4NmI3OGZlODg5OTllMGFiZDJkNDkwMzRhNGJmYzg1NGRkOTRmMTA5NGUyZThjZDdhMTc5ZDE5NTg4ZTRhZWZjMWIxYmQyNWU5NWUzZGQ0NjFmIjoiMTc2MzlhNGU4OGQ3MjJjNGZjYTI0ZDA3OWE4YjI5YzMyNDMzYjBjOSI6IjAwZWM0MzA4MjQ5MzFlYmQzYmFhNDMwMzRkYWU5OGJhNjQ2YjhjMzYwMTNkMTY3MWMzY2YxY2Y4MjYwYzM3NGIxOWY4ZTFjYzhkOTY1MDEyNDA1ZTdlOWJmNzM3ODYxMmRmY2M4NWZjZTEyY2RhMTFmOTUwYmQwYmE4ODc2NzQwNDM2YzFkMjU5NWE2NGExYjMyZWZjZmI3NGEyMWM4NzNiM2NjMzNhYWY0ZTNkYzM5NTNkZTY3ZjA2NzRjMDQ1M2I0ZmQ5ZjYwNDQwNmQ0NDFiODE2MDk4Y2IxMDZmZTM0NzJiYzI1MWY4MTVmNTlkYjJlNDM3OGEzYWRkYzE4MWVjZiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDJfNSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNToxNjoiMDFkNDBjMWJjZjk3YTY4YWU3Y2RiZDhhN2JmM2UzNGZhMTlkY2NhNGVmNzVhNDc0NTQzNzVmOTQ1MTRkODhmZWQwMDZmYjgyOWY4NDE5ZmY4N2Q2MzE1ZGE2OGExZmYzYTA5MzhlOWFiYjM0NjQwMTFjMzAzYWQ5OTE5OWNmMGM3YzdhOGI0NzdkY2U4MjllODg0NGY2MjViMTE1ZTVlOWM0YTU5Y2Y4ZjgxMTNiNjgzNDMzNmEyZmQyNjg5YjQ3MmNiYjVlNWNhYmU2NzQzNTBjNTliNmMxN2UxNzY4NzRmYjQyZjhmYzNkMTc2YTAxN2VkYzYxZmQzMjZjNGIzM2M5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4NmE4M2Q0YTcyZWU5MzJhNGY1NjMwYWY2NTc5YTM4NmI3OGZlODg5OTllMGFiZDJkNDkwMzRhNGJmYzg1NGRkOTRmMTA5NGUyZThjZDdhMTc5ZDE5NTg4ZTRhZWZjMWIxYmQyNWU5NWUzZGQ0NjFmIjoiMTc2MzlhNGU4OGQ3MjJjNGZjYTI0ZDA3OWE4YjI5YzMyNDMzYjBjOSI6IjAwZWM0MzA4MjQ5MzFlYmQzYmFhNDMwMzRkYWU5OGJhNjQ2YjhjMzYwMTNkMTY3MWMzY2YxY2Y4MjYwYzM3NGIxOWY4ZTFjYzhkOTY1MDEyNDA1ZTdlOWJmNzM3ODYxMmRmY2M4NWZjZTEyY2RhMTFmOTUwYmQwYmE4ODc2NzQwNDM2YzFkMjU5NWE2NGExYjMyZWZjZmI3NGEyMWM4NzNiM2NjMzNhYWY0ZTNkYzM5NTNkZTY3ZjA2NzRjMDQ1M2I0ZmQ5ZjYwNDQwNmQ0NDFiODE2MDk4Y2IxMDZmZTM0NzJiYzI1MWY4MTVmNTlkYjJlNDM3OGEzYWRkYzE4MWVjZiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDJfNgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjU6MTY6IjAxNjYwMWU5MjZhMGY4YzllMjZlY2FiNzY5ZWE2NWE1ZTdjNTJjYzllMDgwZWY1MTk0NTdjNjQ0ZGE2ODkxYzVhMTA0ZDNlYTc5NTU5MjlhMjJlN2M2OGE3YWY5ZmNhZDc3N2MzY2NjMmI5ZTNkMzY1MGJjZTQwNDM5OWI3ZTU5ZDEiOjE2OiIwMTRlYWZhMWQ0ZDAxODRkYTdlMzFmODc3ZDEyODFkZGRhNjI1NjY0ODY5ZTgzNzllNjdhZDNiNzVlYWU3NGE1ODBlOTgyN2FiZDZlYjdhMDAyY2I1NDExZjUyNjY3OTc3NjhmYjhlOTVhZTQwZTNlOGEwMWYzNWZmODllNTZjMDc5IjoxNjoiMDFkNDBjMWJjZjk3YTY4YWU3Y2RiZDhhN2JmM2UzNGZhMTlkY2NhNGVmNzVhNDc0NTQzNzVmOTQ1MTRkODhmZWQwMDZmYjgyOWY4NDE5ZmY4N2Q2MzE1ZGE2OGExZmYzYTA5MzhlOWFiYjM0NjQwMTFjMzAzYWQ5OTE5OWNmMGM3YzdhOGI0NzdkY2U4MjllODg0NGY2MjViMTE1ZTVlOWM0YTU5Y2Y4ZjgxMTNiNjgzNDMzNmEyZmQyNjg5YjQ3MmNiYjVlNWNhYmU2NzQzNTBjNTliNmMxN2UxNzY4NzRmYjQyZjhmYzNkMTc2YTAxN2VkYzYxZmQzMjZjNGIzM2M5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwNDlmOTE1NGQ4NzFhYzRhN2M3YWI0NTMyNWJhNzU0NWExZWQwOGY3MDUyNWIyNjY3Y2YxIjoiMzc4MTBkZWYxMDU1ZWQ5MjJiMDYzZGY3OThkZTVkMGFhYmY4ODZlZSI6IjAwNDc1YjE2NDhmODE0YThkYzBhYmRjMzdiNTUyN2Y1NDNiNjY2YmI2ZTM5ZDMwZTViNDlkM2I4NzZkY2NjNThlYWMxNGUzMmEyZDU1YzI2MTYwMTQ0NTZhZDJmMjQ2ZmM4ZTNkNTYwZGEzZGRmMzc5YTFjMGJkMjAwZjEwMjIxZGYwNzhjMjE5YTE1MWJjOGQ0ZWM5ZDJmYzI1NjQ0Njc4MTEwMTRlZjE1ZDhlYTAxYzJlYmJmZjhjMmM4ZWZhYjM4MDk2ZTU1ZmNiZTMyODVjN2FhNTU4ODUxMjU0ZmFmZmE5MmMxYzcyYjc4NzU4NjYzZWY0NTgyODQzMTM5ZDdhNiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDJfNiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNToxNjoiMDFkNDBjMWJjZjk3YTY4YWU3Y2RiZDhhN2JmM2UzNGZhMTlkY2NhNGVmNzVhNDc0NTQzNzVmOTQ1MTRkODhmZWQwMDZmYjgyOWY4NDE5ZmY4N2Q2MzE1ZGE2OGExZmYzYTA5MzhlOWFiYjM0NjQwMTFjMzAzYWQ5OTE5OWNmMGM3YzdhOGI0NzdkY2U4MjllODg0NGY2MjViMTE1ZTVlOWM0YTU5Y2Y4ZjgxMTNiNjgzNDMzNmEyZmQyNjg5YjQ3MmNiYjVlNWNhYmU2NzQzNTBjNTliNmMxN2UxNzY4NzRmYjQyZjhmYzNkMTc2YTAxN2VkYzYxZmQzMjZjNGIzM2M5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwNDlmOTE1NGQ4NzFhYzRhN2M3YWI0NTMyNWJhNzU0NWExZWQwOGY3MDUyNWIyNjY3Y2YxIjoiMzc4MTBkZWYxMDU1ZWQ5MjJiMDYzZGY3OThkZTVkMGFhYmY4ODZlZSI6IjAwNDc1YjE2NDhmODE0YThkYzBhYmRjMzdiNTUyN2Y1NDNiNjY2YmI2ZTM5ZDMwZTViNDlkM2I4NzZkY2NjNThlYWMxNGUzMmEyZDU1YzI2MTYwMTQ0NTZhZDJmMjQ2ZmM4ZTNkNTYwZGEzZGRmMzc5YTFjMGJkMjAwZjEwMjIxZGYwNzhjMjE5YTE1MWJjOGQ0ZWM5ZDJmYzI1NjQ0Njc4MTEwMTRlZjE1ZDhlYTAxYzJlYmJmZjhjMmM4ZWZhYjM4MDk2ZTU1ZmNiZTMyODVjN2FhNTU4ODUxMjU0ZmFmZmE5MmMxYzcyYjc4NzU4NjYzZWY0NTgyODQzMTM5ZDdhNiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDNfMQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjY6MTY6IjAxYmQzNmUxOGVjZTRiMGZkYjJlOWM5ZDU0OGJkMWE3ZDZlMmMyMWM2ZmRjMzUwNzRhMWQwNWIxYzZjOGIzZDU1OGVhMjYzOWM5YTlhNDIxNjgwMTY5MzE3MjUyNTU4YmQxNDhhZDIxNWFhYzU1MGUyZGNmMTJhODJkMGViZmU4NTMiOjE2OiIwMWIxYjY1NmFkODZkOGUxOWQ1ZGM4NjI5MmIzYTE5MmZkZjZlMGRkMzc4NzdiYWQxNDgyMmZhMDAxOTBjYWIyNjVmOTBkM2YwMjA1N2I2ZjU0ZDZlY2IxNDQ5MWU1YWRlYWNlYmM0OGJmMGViZDJhMmFkMjZkNDAyZTU0ZjYxNjUxIjoxNjoiMDJmMjQ2ZWY0NTFlZDNlZWJiOWEzMTAyMDBjYzI1ODU5YzA0OGU0YmU3OTgzMDI5OTExMTJlYjY4Y2U2ZGI2NzRlMjgwZGEyMWZlZGVkMWFlNzQ4ODBjYTUyMmIxOGRiMjQ5Mzg1MDEyODI3YzUxNWYwZTQ2NmExZmZhNjkxZDk4MTcwNTc0ZTlkMGVhZGIwODc1ODZjYTQ4OTMzZGEzY2M5NTNkOTViZDBlZDUwZGUxMGRkY2I2NzM2MTA3ZDZjODMxYzdmNjYzZTgzM2NhNGMwOTdlNzAwY2UwZmI5NDVmODhmYjg1ZmU4ZTVhNzczMTcyNTY1YjkxNGE0NzFhNDQzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI1OTRiMzczMzNiYmIyYzg0NTI0YTg3YzFhMDFmNzVmY2VjMGUzMjU2ZjEwOGUzOGRjYTM2ZDcwZDAwNTciOiJmMzFhZDZjOGNmODlkZjc4ZWQ3N2ZlYWNiY2MyZjhiMGE4ZTRjZmFhIjoiMDA4OGIxMzVmYjE3OTRiNmI5NmM0YTNlNjc4MTk3ZjhjYWM1MmI2NGIyZmU5MDdkNmYyN2RlNzYxMTI0OTY0YTk5YTAxYTg4Mjc0MGVjZmFlZDZjMDFhNDc0NjRiYjA1MTgyMzEzYzAxMzM4YThjZDA5NzIxNGNkNjhjYTEwM2JkNTdkM2JjOWU4MTYyMTNlNjFkNzg0ZjE4MjQ2N2FiZjhhMDFjZjI1M2U5OWExNTZlYWE4ZTNlMWY5MGUzYzZlNGUzYWEyZDgzZWQwMzQ1Yjg5ZmFmYzljMjYwNzdjMTRiNmFjNTE0NTRmYTI2ZTQ0NmUzYTJmMTUzYjJiMTY3OTdmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgM18xICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI2OjE2OiIwMmYyNDZlZjQ1MWVkM2VlYmI5YTMxMDIwMGNjMjU4NTljMDQ4ZTRiZTc5ODMwMjk5MTExMmViNjhjZTZkYjY3NGUyODBkYTIxZmVkZWQxYWU3NDg4MGNhNTIyYjE4ZGIyNDkzODUwMTI4MjdjNTE1ZjBlNDY2YTFmZmE2OTFkOTgxNzA1NzRlOWQwZWFkYjA4NzU4NmNhNDg5MzNkYTNjYzk1M2Q5NWJkMGVkNTBkZTEwZGRjYjY3MzYxMDdkNmM4MzFjN2Y2NjNlODMzY2E0YzA5N2U3MDBjZTBmYjk0NWY4OGZiODVmZThlNWE3NzMxNzI1NjViOTE0YTQ3MWE0NDMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjU5NGIzNzMzM2JiYjJjODQ1MjRhODdjMWEwMWY3NWZjZWMwZTMyNTZmMTA4ZTM4ZGNhMzZkNzBkMDA1NyI6ImYzMWFkNmM4Y2Y4OWRmNzhlZDc3ZmVhY2JjYzJmOGIwYThlNGNmYWEiOiIwMDg4YjEzNWZiMTc5NGI2Yjk2YzRhM2U2NzgxOTdmOGNhYzUyYjY0YjJmZTkwN2Q2ZjI3ZGU3NjExMjQ5NjRhOTlhMDFhODgyNzQwZWNmYWVkNmMwMWE0NzQ2NGJiMDUxODIzMTNjMDEzMzhhOGNkMDk3MjE0Y2Q2OGNhMTAzYmQ1N2QzYmM5ZTgxNjIxM2U2MWQ3ODRmMTgyNDY3YWJmOGEwMWNmMjUzZTk5YTE1NmVhYThlM2UxZjkwZTNjNmU0ZTNhYTJkODNlZDAzNDViODlmYWZjOWMyNjA3N2MxNGI2YWM1MTQ1NGZhMjZlNDQ2ZTNhMmYxNTNiMmIxNjc5N2YiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAzXzIKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI2OjE2OiIwMWJkMzZlMThlY2U0YjBmZGIyZTljOWQ1NDhiZDFhN2Q2ZTJjMjFjNmZkYzM1MDc0YTFkMDViMWM2YzhiM2Q1NThlYTI2MzljOWE5YTQyMTY4MDE2OTMxNzI1MjU1OGJkMTQ4YWQyMTVhYWM1NTBlMmRjZjEyYTgyZDBlYmZlODUzIjoxNjoiMDFiMWI2NTZhZDg2ZDhlMTlkNWRjODYyOTJiM2ExOTJmZGY2ZTBkZDM3ODc3YmFkMTQ4MjJmYTAwMTkwY2FiMjY1ZjkwZDNmMDIwNTdiNmY1NGQ2ZWNiMTQ0OTFlNWFkZWFjZWJjNDhiZjBlYmQyYTJhZDI2ZDQwMmU1NGY2MTY1MSI6MTY6IjAyZjI0NmVmNDUxZWQzZWViYjlhMzEwMjAwY2MyNTg1OWMwNDhlNGJlNzk4MzAyOTkxMTEyZWI2OGNlNmRiNjc0ZTI4MGRhMjFmZWRlZDFhZTc0ODgwY2E1MjJiMThkYjI0OTM4NTAxMjgyN2M1MTVmMGU0NjZhMWZmYTY5MWQ5ODE3MDU3NGU5ZDBlYWRiMDg3NTg2Y2E0ODkzM2RhM2NjOTUzZDk1YmQwZWQ1MGRlMTBkZGNiNjczNjEwN2Q2YzgzMWM3ZjY2M2U4MzNjYTRjMDk3ZTcwMGNlMGZiOTQ1Zjg4ZmI4NWZlOGU1YTc3MzE3MjU2NWI5MTRhNDcxYTQ0MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiOGI3Njk1Mjg4ODRhMGQxZmZkMDkwY2YxMDI5OTNlNzk2ZGFkY2ZiZGRkMzhlNDRmZjYzMjRjYTQ1MSI6ImZjZjlmMGUxZjE5OWEzZDFkMGRhNjgxYzViODYwNmZjNjQyOTM5ZjciOiIwMmE1ZjBhODU4YTA4NjRhNGY2NTAxN2E3ZDY5NDU0ZjNmOTczYTI5OTk4MzliN2JiYzQ4YmY3ODY0MTE2OTE3OTU1NmY1OTVmYTQxZjZmZjE4ZTI4NmMyNzgzMDc5YmMwOTEwZWU5Y2MzNGY0OWJhNjgxMTI0ZjkyM2RmYTg4ZjQyNjE0MWEzNjhhNWY1YTkzMGM2MjhjMmMzYzIwMGUxOGE3NjQ0NzIxYTBjYmVjNmRkM2Y2Mjc5YmRlM2U4ZjJiZTVlMmQ0ZWU1NmY5N2U3Y2VhZjMzMDU0YmU3MDQyYmQ5MWE2M2JiMDlmODk3YmQ0MWU4MTE5N2RlZTk5YjExYWYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAzXzIgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjY6MTY6IjAyZjI0NmVmNDUxZWQzZWViYjlhMzEwMjAwY2MyNTg1OWMwNDhlNGJlNzk4MzAyOTkxMTEyZWI2OGNlNmRiNjc0ZTI4MGRhMjFmZWRlZDFhZTc0ODgwY2E1MjJiMThkYjI0OTM4NTAxMjgyN2M1MTVmMGU0NjZhMWZmYTY5MWQ5ODE3MDU3NGU5ZDBlYWRiMDg3NTg2Y2E0ODkzM2RhM2NjOTUzZDk1YmQwZWQ1MGRlMTBkZGNiNjczNjEwN2Q2YzgzMWM3ZjY2M2U4MzNjYTRjMDk3ZTcwMGNlMGZiOTQ1Zjg4ZmI4NWZlOGU1YTc3MzE3MjU2NWI5MTRhNDcxYTQ0MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiOGI3Njk1Mjg4ODRhMGQxZmZkMDkwY2YxMDI5OTNlNzk2ZGFkY2ZiZGRkMzhlNDRmZjYzMjRjYTQ1MSI6ImZjZjlmMGUxZjE5OWEzZDFkMGRhNjgxYzViODYwNmZjNjQyOTM5ZjciOiIwMmE1ZjBhODU4YTA4NjRhNGY2NTAxN2E3ZDY5NDU0ZjNmOTczYTI5OTk4MzliN2JiYzQ4YmY3ODY0MTE2OTE3OTU1NmY1OTVmYTQxZjZmZjE4ZTI4NmMyNzgzMDc5YmMwOTEwZWU5Y2MzNGY0OWJhNjgxMTI0ZjkyM2RmYTg4ZjQyNjE0MWEzNjhhNWY1YTkzMGM2MjhjMmMzYzIwMGUxOGE3NjQ0NzIxYTBjYmVjNmRkM2Y2Mjc5YmRlM2U4ZjJiZTVlMmQ0ZWU1NmY5N2U3Y2VhZjMzMDU0YmU3MDQyYmQ5MWE2M2JiMDlmODk3YmQ0MWU4MTE5N2RlZTk5YjExYWYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAzXzMKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI2OjE2OiIwMWJkMzZlMThlY2U0YjBmZGIyZTljOWQ1NDhiZDFhN2Q2ZTJjMjFjNmZkYzM1MDc0YTFkMDViMWM2YzhiM2Q1NThlYTI2MzljOWE5YTQyMTY4MDE2OTMxNzI1MjU1OGJkMTQ4YWQyMTVhYWM1NTBlMmRjZjEyYTgyZDBlYmZlODUzIjoxNjoiMDFiMWI2NTZhZDg2ZDhlMTlkNWRjODYyOTJiM2ExOTJmZGY2ZTBkZDM3ODc3YmFkMTQ4MjJmYTAwMTkwY2FiMjY1ZjkwZDNmMDIwNTdiNmY1NGQ2ZWNiMTQ0OTFlNWFkZWFjZWJjNDhiZjBlYmQyYTJhZDI2ZDQwMmU1NGY2MTY1MSI6MTY6IjAyZjI0NmVmNDUxZWQzZWViYjlhMzEwMjAwY2MyNTg1OWMwNDhlNGJlNzk4MzAyOTkxMTEyZWI2OGNlNmRiNjc0ZTI4MGRhMjFmZWRlZDFhZTc0ODgwY2E1MjJiMThkYjI0OTM4NTAxMjgyN2M1MTVmMGU0NjZhMWZmYTY5MWQ5ODE3MDU3NGU5ZDBlYWRiMDg3NTg2Y2E0ODkzM2RhM2NjOTUzZDk1YmQwZWQ1MGRlMTBkZGNiNjczNjEwN2Q2YzgzMWM3ZjY2M2U4MzNjYTRjMDk3ZTcwMGNlMGZiOTQ1Zjg4ZmI4NWZlOGU1YTc3MzE3MjU2NWI5MTRhNDcxYTQ0MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMWFiZGJhNDg5YzVhZGEyZjk5NWVkMTZmMTlkNWE5NGQ5ZTZlYzM0YThkODRmODQ1NTdkMjZlNWVmOWIwMmIyMjg4N2UzZjlhNGI2OTBhZDExNDkyMDljMjBjNjE0MzFmMGMwMTdjMzZjMjY1N2IzNWQ3YjA3ZDNmNWFkODcwODUwN2E5YzFiODMxZGY4MzVhNTZmODMxMDcxODE0ZWE1ZDNkOGQ4ZjZhZGU0MGNiYTM4YjQyZGI3YTJkM2Q3YTI5YzhmMGE3OWE3ODM4Y2Y1OGE5NzU3ZmEyZmU0YzQwZGY5YmFhMTkzYmZjNmY5MmIxMjNhZDU3YjA3YWNlM2U2YWMwNjhjOWYxMDZhZmQ5ZWViMDNiNGYzN2MyNWRiZmJjZmIzMDcxZjZmOTc3MTc2NmQwNzJmM2JiMDcwYWY2NjA1NTMyOTczYWUyNTA1MSI6Ijk4NmU3YzQzZGJiNjcxYmQ0MWI5YTdmNGI2YWZjODBlODA1ZjI0MjMiOiIwMjQ0YmNkMWM4YzE2OTU1NzM2YzgwM2JlNDAxMjcyZTE4Y2I5OTA4MTFiMTRmNzJkYjk2NDEyNGQ1ZmE3NjA2NDljYmI1N2FmYjg3NTVkYmI2MmJmNTFmNDY2Y2YyM2EwYTE2MDc1NzZlOTgzZDc3OGZjZWZmYTkyZGY3NTQ4YWVhOGVhNGVjYWQyYzI5ZGQ5Zjk1YmMwN2ZlOTFlY2Y4YmVlMjU1YmZlODc2MmZkNzY5MGFhOWJmYTRmYTA4NDllZjcyOGMyYzQyYzQ1MzIzNjQ1MjJkZjJhYjdmOWY4YTAzYjYzZjdhNDk5MTc1ODI4NjY4ZjVlZjVhMjllMzgwMmMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAzXzMgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjY6MTY6IjAyZjI0NmVmNDUxZWQzZWViYjlhMzEwMjAwY2MyNTg1OWMwNDhlNGJlNzk4MzAyOTkxMTEyZWI2OGNlNmRiNjc0ZTI4MGRhMjFmZWRlZDFhZTc0ODgwY2E1MjJiMThkYjI0OTM4NTAxMjgyN2M1MTVmMGU0NjZhMWZmYTY5MWQ5ODE3MDU3NGU5ZDBlYWRiMDg3NTg2Y2E0ODkzM2RhM2NjOTUzZDk1YmQwZWQ1MGRlMTBkZGNiNjczNjEwN2Q2YzgzMWM3ZjY2M2U4MzNjYTRjMDk3ZTcwMGNlMGZiOTQ1Zjg4ZmI4NWZlOGU1YTc3MzE3MjU2NWI5MTRhNDcxYTQ0MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMWFiZGJhNDg5YzVhZGEyZjk5NWVkMTZmMTlkNWE5NGQ5ZTZlYzM0YThkODRmODQ1NTdkMjZlNWVmOWIwMmIyMjg4N2UzZjlhNGI2OTBhZDExNDkyMDljMjBjNjE0MzFmMGMwMTdjMzZjMjY1N2IzNWQ3YjA3ZDNmNWFkODcwODUwN2E5YzFiODMxZGY4MzVhNTZmODMxMDcxODE0ZWE1ZDNkOGQ4ZjZhZGU0MGNiYTM4YjQyZGI3YTJkM2Q3YTI5YzhmMGE3OWE3ODM4Y2Y1OGE5NzU3ZmEyZmU0YzQwZGY5YmFhMTkzYmZjNmY5MmIxMjNhZDU3YjA3YWNlM2U2YWMwNjhjOWYxMDZhZmQ5ZWViMDNiNGYzN2MyNWRiZmJjZmIzMDcxZjZmOTc3MTc2NmQwNzJmM2JiMDcwYWY2NjA1NTMyOTczYWUyNTA1MSI6Ijk4NmU3YzQzZGJiNjcxYmQ0MWI5YTdmNGI2YWZjODBlODA1ZjI0MjMiOiIwMjQ0YmNkMWM4YzE2OTU1NzM2YzgwM2JlNDAxMjcyZTE4Y2I5OTA4MTFiMTRmNzJkYjk2NDEyNGQ1ZmE3NjA2NDljYmI1N2FmYjg3NTVkYmI2MmJmNTFmNDY2Y2YyM2EwYTE2MDc1NzZlOTgzZDc3OGZjZWZmYTkyZGY3NTQ4YWVhOGVhNGVjYWQyYzI5ZGQ5Zjk1YmMwN2ZlOTFlY2Y4YmVlMjU1YmZlODc2MmZkNzY5MGFhOWJmYTRmYTA4NDllZjcyOGMyYzQyYzQ1MzIzNjQ1MjJkZjJhYjdmOWY4YTAzYjYzZjdhNDk5MTc1ODI4NjY4ZjVlZjVhMjllMzgwMmMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAzXzQKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI2OjE2OiIwMWJkMzZlMThlY2U0YjBmZGIyZTljOWQ1NDhiZDFhN2Q2ZTJjMjFjNmZkYzM1MDc0YTFkMDViMWM2YzhiM2Q1NThlYTI2MzljOWE5YTQyMTY4MDE2OTMxNzI1MjU1OGJkMTQ4YWQyMTVhYWM1NTBlMmRjZjEyYTgyZDBlYmZlODUzIjoxNjoiMDFiMWI2NTZhZDg2ZDhlMTlkNWRjODYyOTJiM2ExOTJmZGY2ZTBkZDM3ODc3YmFkMTQ4MjJmYTAwMTkwY2FiMjY1ZjkwZDNmMDIwNTdiNmY1NGQ2ZWNiMTQ0OTFlNWFkZWFjZWJjNDhiZjBlYmQyYTJhZDI2ZDQwMmU1NGY2MTY1MSI6MTY6IjAyZjI0NmVmNDUxZWQzZWViYjlhMzEwMjAwY2MyNTg1OWMwNDhlNGJlNzk4MzAyOTkxMTEyZWI2OGNlNmRiNjc0ZTI4MGRhMjFmZWRlZDFhZTc0ODgwY2E1MjJiMThkYjI0OTM4NTAxMjgyN2M1MTVmMGU0NjZhMWZmYTY5MWQ5ODE3MDU3NGU5ZDBlYWRiMDg3NTg2Y2E0ODkzM2RhM2NjOTUzZDk1YmQwZWQ1MGRlMTBkZGNiNjczNjEwN2Q2YzgzMWM3ZjY2M2U4MzNjYTRjMDk3ZTcwMGNlMGZiOTQ1Zjg4ZmI4NWZlOGU1YTc3MzE3MjU2NWI5MTRhNDcxYTQ0MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiOGZiNDMxZjVlZTc5MmI2YzJhYzdkYjUzY2M0Mjg2NTVhZWIzMmQwM2Y0ZTg4OWM1YzI1ZGU2ODNjNDYxYjUzYWNmODlmOWY4ZDNhYWJkZjZiOWYwYzJhMWRlMTJlMTViNDllZGIzOTE5YTY1MmZlOTQ5MWMyNWE3ZmNlMWY3MjJjMjU0MzYwOGI2OWRjMzc1ZWMiOiJmODMxMmQ5YzhlZWExM2VjMGE0YzdiOTgxMjBjODc1MDkwODdjNDc4IjoiMDE5NmYxMmEwMDViOTgxMjljOGRmMTNjNGNiMTZmOGFhODg3ZDNjNDBkOTZkZjNhODhlNzUzMmVmMzljZDk5MmYyNzNhYmMzNzBiYzFiZTZmMDk3Y2ZlYmJmMDExOGZkOWVmNGI5MjcxNTVmM2RmMjJiOTA0ZDkwNzAyZDFmN2JhN2E1MmJlZDhiODk0MmY0MTJjZDdiZDY3NmM5ZDE4ZTE3MDM5MWRjZDM0NWMwNmE3MzA5NjRiM2YzMGJjY2UwYmIyMGJhMTA2ZjlhYjBlZWIzOWNmOGE2NjA3Zjc1YzAzNDdmMGFmNzlmMTZhZmEwODFkMmM5MmQxZWU2ZjgzNmI4IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgM180ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI2OjE2OiIwMmYyNDZlZjQ1MWVkM2VlYmI5YTMxMDIwMGNjMjU4NTljMDQ4ZTRiZTc5ODMwMjk5MTExMmViNjhjZTZkYjY3NGUyODBkYTIxZmVkZWQxYWU3NDg4MGNhNTIyYjE4ZGIyNDkzODUwMTI4MjdjNTE1ZjBlNDY2YTFmZmE2OTFkOTgxNzA1NzRlOWQwZWFkYjA4NzU4NmNhNDg5MzNkYTNjYzk1M2Q5NWJkMGVkNTBkZTEwZGRjYjY3MzYxMDdkNmM4MzFjN2Y2NjNlODMzY2E0YzA5N2U3MDBjZTBmYjk0NWY4OGZiODVmZThlNWE3NzMxNzI1NjViOTE0YTQ3MWE0NDMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjhmYjQzMWY1ZWU3OTJiNmMyYWM3ZGI1M2NjNDI4NjU1YWViMzJkMDNmNGU4ODljNWMyNWRlNjgzYzQ2MWI1M2FjZjg5ZjlmOGQzYWFiZGY2YjlmMGMyYTFkZTEyZTE1YjQ5ZWRiMzkxOWE2NTJmZTk0OTFjMjVhN2ZjZTFmNzIyYzI1NDM2MDhiNjlkYzM3NWVjIjoiZjgzMTJkOWM4ZWVhMTNlYzBhNGM3Yjk4MTIwYzg3NTA5MDg3YzQ3OCI6IjAxOTZmMTJhMDA1Yjk4MTI5YzhkZjEzYzRjYjE2ZjhhYTg4N2QzYzQwZDk2ZGYzYTg4ZTc1MzJlZjM5Y2Q5OTJmMjczYWJjMzcwYmMxYmU2ZjA5N2NmZWJiZjAxMThmZDllZjRiOTI3MTU1ZjNkZjIyYjkwNGQ5MDcwMmQxZjdiYTdhNTJiZWQ4Yjg5NDJmNDEyY2Q3YmQ2NzZjOWQxOGUxNzAzOTFkY2QzNDVjMDZhNzMwOTY0YjNmMzBiY2NlMGJiMjBiYTEwNmY5YWIwZWViMzljZjhhNjYwN2Y3NWMwMzQ3ZjBhZjc5ZjE2YWZhMDgxZDJjOTJkMWVlNmY4MzZiOCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDNfNQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjY6MTY6IjAxYmQzNmUxOGVjZTRiMGZkYjJlOWM5ZDU0OGJkMWE3ZDZlMmMyMWM2ZmRjMzUwNzRhMWQwNWIxYzZjOGIzZDU1OGVhMjYzOWM5YTlhNDIxNjgwMTY5MzE3MjUyNTU4YmQxNDhhZDIxNWFhYzU1MGUyZGNmMTJhODJkMGViZmU4NTMiOjE2OiIwMWIxYjY1NmFkODZkOGUxOWQ1ZGM4NjI5MmIzYTE5MmZkZjZlMGRkMzc4NzdiYWQxNDgyMmZhMDAxOTBjYWIyNjVmOTBkM2YwMjA1N2I2ZjU0ZDZlY2IxNDQ5MWU1YWRlYWNlYmM0OGJmMGViZDJhMmFkMjZkNDAyZTU0ZjYxNjUxIjoxNjoiMDJmMjQ2ZWY0NTFlZDNlZWJiOWEzMTAyMDBjYzI1ODU5YzA0OGU0YmU3OTgzMDI5OTExMTJlYjY4Y2U2ZGI2NzRlMjgwZGEyMWZlZGVkMWFlNzQ4ODBjYTUyMmIxOGRiMjQ5Mzg1MDEyODI3YzUxNWYwZTQ2NmExZmZhNjkxZDk4MTcwNTc0ZTlkMGVhZGIwODc1ODZjYTQ4OTMzZGEzY2M5NTNkOTViZDBlZDUwZGUxMGRkY2I2NzM2MTA3ZDZjODMxYzdmNjYzZTgzM2NhNGMwOTdlNzAwY2UwZmI5NDVmODhmYjg1ZmU4ZTVhNzczMTcyNTY1YjkxNGE0NzFhNDQzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJmZWY0MTYxZGZhYWY5YzUyOTUwNTFkZmMxZmYzODEwYzhjOWVjMmU4NjZmNzA3NTQyMmM4ZWM0MjE2YTljNGZmNDk0MjdkNDgzY2FlMTBjODUzNGE0MWIyZmQxNWZlZTA2OTYwZWM2ZmIzZjdhN2U5NGEyZjhhMmUzZTQzZGM0YTQwNTc2YzMwOTdhYzk1M2IxZGU4NmYwYjRlZDM2ZDY0NGYyM2FlMTQ0MjU1Mjk2MjI0NjRjYTBjYmYwYjE3NDEzNDcyMzgxNTdmYWI1OWU0ZGU1NTI0MDk2ZDYyYmFlYzYzYWM2NCI6IjUwMzI3ZWZlYzYyOTJmOTgwMTlmYzY3YTJhNjYzODU2M2U5YjZlMmQiOiIwMjFlY2EzYWI0ODkyMjY0ZWMyMjQxMWE3NTJkOTIyMjEwNzZkNGUwMWMwZTZmMGRkZTlhZmQyNmJhNWFjZjZkNzM5ZWY5ODc1NDVkMTY2ODNlNTY3NGM5ZTcwZjFkZTY0OWQ3ZTYxZDQ4ZDBjYWViNGZiNGQ4YjI0ZmJhODRhNmUzMTA4ZmVlN2QwNzA1OTczMjY2YWM1MjRiNGFkMjgwZjdhZTE3ZGM1OWQ5NmQzMzUxNTg2YjVhM2JkYjg5NWQxZTFmNzgyMGFjNjEzNWQ4NzUzNDgwOTk4MzgyYmEzMmI3MzQ5NTU5NjA4YzM4NzQ1MjkwYTg1ZWY0ZTlmOWJkODMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAzXzUgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjY6MTY6IjAyZjI0NmVmNDUxZWQzZWViYjlhMzEwMjAwY2MyNTg1OWMwNDhlNGJlNzk4MzAyOTkxMTEyZWI2OGNlNmRiNjc0ZTI4MGRhMjFmZWRlZDFhZTc0ODgwY2E1MjJiMThkYjI0OTM4NTAxMjgyN2M1MTVmMGU0NjZhMWZmYTY5MWQ5ODE3MDU3NGU5ZDBlYWRiMDg3NTg2Y2E0ODkzM2RhM2NjOTUzZDk1YmQwZWQ1MGRlMTBkZGNiNjczNjEwN2Q2YzgzMWM3ZjY2M2U4MzNjYTRjMDk3ZTcwMGNlMGZiOTQ1Zjg4ZmI4NWZlOGU1YTc3MzE3MjU2NWI5MTRhNDcxYTQ0MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZmVmNDE2MWRmYWFmOWM1Mjk1MDUxZGZjMWZmMzgxMGM4YzllYzJlODY2ZjcwNzU0MjJjOGVjNDIxNmE5YzRmZjQ5NDI3ZDQ4M2NhZTEwYzg1MzRhNDFiMmZkMTVmZWUwNjk2MGVjNmZiM2Y3YTdlOTRhMmY4YTJlM2U0M2RjNGE0MDU3NmMzMDk3YWM5NTNiMWRlODZmMGI0ZWQzNmQ2NDRmMjNhZTE0NDI1NTI5NjIyNDY0Y2EwY2JmMGIxNzQxMzQ3MjM4MTU3ZmFiNTllNGRlNTUyNDA5NmQ2MmJhZWM2M2FjNjQiOiI1MDMyN2VmZWM2MjkyZjk4MDE5ZmM2N2EyYTY2Mzg1NjNlOWI2ZTJkIjoiMDIxZWNhM2FiNDg5MjI2NGVjMjI0MTFhNzUyZDkyMjIxMDc2ZDRlMDFjMGU2ZjBkZGU5YWZkMjZiYTVhY2Y2ZDczOWVmOTg3NTQ1ZDE2NjgzZTU2NzRjOWU3MGYxZGU2NDlkN2U2MWQ0OGQwY2FlYjRmYjRkOGIyNGZiYTg0YTZlMzEwOGZlZTdkMDcwNTk3MzI2NmFjNTI0YjRhZDI4MGY3YWUxN2RjNTlkOTZkMzM1MTU4NmI1YTNiZGI4OTVkMWUxZjc4MjBhYzYxMzVkODc1MzQ4MDk5ODM4MmJhMzJiNzM0OTU1OTYwOGMzODc0NTI5MGE4NWVmNGU5ZjliZDgzIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgM182Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNjoxNjoiMDFiZDM2ZTE4ZWNlNGIwZmRiMmU5YzlkNTQ4YmQxYTdkNmUyYzIxYzZmZGMzNTA3NGExZDA1YjFjNmM4YjNkNTU4ZWEyNjM5YzlhOWE0MjE2ODAxNjkzMTcyNTI1NThiZDE0OGFkMjE1YWFjNTUwZTJkY2YxMmE4MmQwZWJmZTg1MyI6MTY6IjAxYjFiNjU2YWQ4NmQ4ZTE5ZDVkYzg2MjkyYjNhMTkyZmRmNmUwZGQzNzg3N2JhZDE0ODIyZmEwMDE5MGNhYjI2NWY5MGQzZjAyMDU3YjZmNTRkNmVjYjE0NDkxZTVhZGVhY2ViYzQ4YmYwZWJkMmEyYWQyNmQ0MDJlNTRmNjE2NTEiOjE2OiIwMmYyNDZlZjQ1MWVkM2VlYmI5YTMxMDIwMGNjMjU4NTljMDQ4ZTRiZTc5ODMwMjk5MTExMmViNjhjZTZkYjY3NGUyODBkYTIxZmVkZWQxYWU3NDg4MGNhNTIyYjE4ZGIyNDkzODUwMTI4MjdjNTE1ZjBlNDY2YTFmZmE2OTFkOTgxNzA1NzRlOWQwZWFkYjA4NzU4NmNhNDg5MzNkYTNjYzk1M2Q5NWJkMGVkNTBkZTEwZGRjYjY3MzYxMDdkNmM4MzFjN2Y2NjNlODMzY2E0YzA5N2U3MDBjZTBmYjk0NWY4OGZiODVmZThlNWE3NzMxNzI1NjViOTE0YTQ3MWE0NDMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImVmZDIzN2JiMDk4YTQ0M2FlZWIyYmY2YzNmOGM4MWI4YzAxYjdmY2IzZmViIjoiYjBkZTNmYzI1YjY1ZjVhZjk2YjFkNWNjM2IyN2QwYzYwNTMwODdiMyI6IjAxMmZhZmVjODYyZjU2ZTllOTJmNjBhYjBjNzc4MjRmNDI5OWEwY2E3MzRlZDI2ZTA2NDRkNWQyMjJjN2YwYmRlMDM5NjRmOGU3MGE1Y2I2NWVkNDRlNDRkNTZhZTBlZGYxZmY4NmNhMDMyY2M1ZGQ0NDA0ZGJiNzZhYjg1NDU4NmM0NGVlZDgzMzZkMDhkNDU3Y2U2YzAzNjkzYjQ1YzBmMWVmZWY5MzYyNGI5NWI4ZWMxNjljNjE2ZDIwZTU1MzhlYmMwYjY3MzdhNmY4MmI0YmMwNTcwOTI0ZmM2YjM1NzU5YTMzNDg0MjYyNzlmOGIzZDc3NDRlMmQyMjI0MjZjZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDNfNiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNjoxNjoiMDJmMjQ2ZWY0NTFlZDNlZWJiOWEzMTAyMDBjYzI1ODU5YzA0OGU0YmU3OTgzMDI5OTExMTJlYjY4Y2U2ZGI2NzRlMjgwZGEyMWZlZGVkMWFlNzQ4ODBjYTUyMmIxOGRiMjQ5Mzg1MDEyODI3YzUxNWYwZTQ2NmExZmZhNjkxZDk4MTcwNTc0ZTlkMGVhZGIwODc1ODZjYTQ4OTMzZGEzY2M5NTNkOTViZDBlZDUwZGUxMGRkY2I2NzM2MTA3ZDZjODMxYzdmNjYzZTgzM2NhNGMwOTdlNzAwY2UwZmI5NDVmODhmYjg1ZmU4ZTVhNzczMTcyNTY1YjkxNGE0NzFhNDQzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJlZmQyMzdiYjA5OGE0NDNhZWViMmJmNmMzZjhjODFiOGMwMWI3ZmNiM2ZlYiI6ImIwZGUzZmMyNWI2NWY1YWY5NmIxZDVjYzNiMjdkMGM2MDUzMDg3YjMiOiIwMTJmYWZlYzg2MmY1NmU5ZTkyZjYwYWIwYzc3ODI0ZjQyOTlhMGNhNzM0ZWQyNmUwNjQ0ZDVkMjIyYzdmMGJkZTAzOTY0ZjhlNzBhNWNiNjVlZDQ0ZTQ0ZDU2YWUwZWRmMWZmODZjYTAzMmNjNWRkNDQwNGRiYjc2YWI4NTQ1ODZjNDRlZWQ4MzM2ZDA4ZDQ1N2NlNmMwMzY5M2I0NWMwZjFlZmVmOTM2MjRiOTViOGVjMTY5YzYxNmQyMGU1NTM4ZWJjMGI2NzM3YTZmODJiNGJjMDU3MDkyNGZjNmIzNTc1OWEzMzQ4NDI2Mjc5ZjhiM2Q3NzQ0ZTJkMjIyNDI2Y2UiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA0XzEKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI3OjE2OiIwMjkyMzIzMzZkMjgzODk0NWRiYTlkZDc3MjNmNGU2MjRhMDVmNzM3NWI5MjdhODdhYmU2YTg5M2ExNjU4ZmQ0OWY0N2Y2YzdiMGZhNTk2YzY1ZmE2OGEyM2YwYWI0MzI5NjJkMThkNDM0M2JkNmZkNjcxYTVlYThkMTQ4NDEzOTk1IjoxNjoiMDIwZWY1ZWZlN2M1Mzk0YWVkMjI3MmY3ZTgxYTc0ZjRjMDJkMTQ1ODk0Y2IxYjNjYWIyM2E5YTA3MTBhMmFmYzdlMzMyOWFjYmI3NDNkMDFmNjgwYzRkMDJhZmI0YzhmZGU3ZTIwOTMwODExYmIyYjk5NTc4OGI1ZTg3MmMyMGJiMSI6MTY6IjA1NGFkYjc4ODY0NDdlZmU2ZjU3ZTAzNjhmMDZjZjUyYjBhMzM3MDc2MGQxNjFjZWYxMjZiOTFiZTdmODljNDIxYjYyYTZlYzFkYTNjMzExZDc1ZWQ1MGUwYWI1ZmZmM2ZkMzM4YWNjM2FhOGE0ZTc3ZWUyNjM2OWFjYjgxYmE5MDBmYTgzZjUzMDBjZjliYjZjNTNhZDFkYzhhMTc4YjgxNWRiNDIzNWE5YTlkYTBjMDZkZTRlNjE1ZWExMjc3Y2U1NTllOWMxMDhkZTU4YzE0YTgxYWE3N2Y1YTZmOGQxMzM1NDk0NDk4ODQ4YzhiOTU5NDA3NDBiZTdiZjdjMzcwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiOWZiMDNiODI3YzgyMTdkOSI6ImVkN2M5OGM5NWYzMDk3NGZiZTRmYmRkY2YwZjI4ZDYwMjFjMGU5MWQiOiIwMzIzZDViN2JmMjBiYTQ1MzkyODlhZTQ1MmFlNDI5NzA4MGZlZmY0NTE4NDIzZmY0ODExYTgxNzgzN2U3ZDgyZjE4MzZjZGZhYjU0NTE0ZmYwODg3YmRkZWViZjQwYmY5OWIwNDdhYmMzZWNmYTZhMzdhM2VmMDBmNGEwYzRhODhhYWUwOTA0Yjc0NWM4NDZjNDEwN2U4Nzk3NzIzZThhYzgxMGQ5ZTNkOTVkZmEzMGZmNDk2NmY0ZDc1ZDEzNzY4ZDIwODU3ZjJiMTQwNmYyNjRjZmU3NWUyN2Q3NjUyZjRiNWVkMzU3NWYyOGE3MDJmOGM0ZWQ5Y2Y5YjJkNDQ5NDgiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA0XzEgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjc6MTY6IjA1NGFkYjc4ODY0NDdlZmU2ZjU3ZTAzNjhmMDZjZjUyYjBhMzM3MDc2MGQxNjFjZWYxMjZiOTFiZTdmODljNDIxYjYyYTZlYzFkYTNjMzExZDc1ZWQ1MGUwYWI1ZmZmM2ZkMzM4YWNjM2FhOGE0ZTc3ZWUyNjM2OWFjYjgxYmE5MDBmYTgzZjUzMDBjZjliYjZjNTNhZDFkYzhhMTc4YjgxNWRiNDIzNWE5YTlkYTBjMDZkZTRlNjE1ZWExMjc3Y2U1NTllOWMxMDhkZTU4YzE0YTgxYWE3N2Y1YTZmOGQxMzM1NDk0NDk4ODQ4YzhiOTU5NDA3NDBiZTdiZjdjMzcwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiOWZiMDNiODI3YzgyMTdkOSI6ImVkN2M5OGM5NWYzMDk3NGZiZTRmYmRkY2YwZjI4ZDYwMjFjMGU5MWQiOiIwMzIzZDViN2JmMjBiYTQ1MzkyODlhZTQ1MmFlNDI5NzA4MGZlZmY0NTE4NDIzZmY0ODExYTgxNzgzN2U3ZDgyZjE4MzZjZGZhYjU0NTE0ZmYwODg3YmRkZWViZjQwYmY5OWIwNDdhYmMzZWNmYTZhMzdhM2VmMDBmNGEwYzRhODhhYWUwOTA0Yjc0NWM4NDZjNDEwN2U4Nzk3NzIzZThhYzgxMGQ5ZTNkOTVkZmEzMGZmNDk2NmY0ZDc1ZDEzNzY4ZDIwODU3ZjJiMTQwNmYyNjRjZmU3NWUyN2Q3NjUyZjRiNWVkMzU3NWYyOGE3MDJmOGM0ZWQ5Y2Y5YjJkNDQ5NDgiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA0XzIKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI3OjE2OiIwMjkyMzIzMzZkMjgzODk0NWRiYTlkZDc3MjNmNGU2MjRhMDVmNzM3NWI5MjdhODdhYmU2YTg5M2ExNjU4ZmQ0OWY0N2Y2YzdiMGZhNTk2YzY1ZmE2OGEyM2YwYWI0MzI5NjJkMThkNDM0M2JkNmZkNjcxYTVlYThkMTQ4NDEzOTk1IjoxNjoiMDIwZWY1ZWZlN2M1Mzk0YWVkMjI3MmY3ZTgxYTc0ZjRjMDJkMTQ1ODk0Y2IxYjNjYWIyM2E5YTA3MTBhMmFmYzdlMzMyOWFjYmI3NDNkMDFmNjgwYzRkMDJhZmI0YzhmZGU3ZTIwOTMwODExYmIyYjk5NTc4OGI1ZTg3MmMyMGJiMSI6MTY6IjA1NGFkYjc4ODY0NDdlZmU2ZjU3ZTAzNjhmMDZjZjUyYjBhMzM3MDc2MGQxNjFjZWYxMjZiOTFiZTdmODljNDIxYjYyYTZlYzFkYTNjMzExZDc1ZWQ1MGUwYWI1ZmZmM2ZkMzM4YWNjM2FhOGE0ZTc3ZWUyNjM2OWFjYjgxYmE5MDBmYTgzZjUzMDBjZjliYjZjNTNhZDFkYzhhMTc4YjgxNWRiNDIzNWE5YTlkYTBjMDZkZTRlNjE1ZWExMjc3Y2U1NTllOWMxMDhkZTU4YzE0YTgxYWE3N2Y1YTZmOGQxMzM1NDk0NDk4ODQ4YzhiOTU5NDA3NDBiZTdiZjdjMzcwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMGNhMmFkNzc3OTdlY2U4NmRlNWJmNzY4NzUwZGRiNWVkNmEzMTE2YWQ5OWJiZDE3ZWRmN2Y3ODJmMGRiMWNkMDViMGY2Nzc0NjhjNWVhNDIwZGMxMTZiMTBlODBkMTEwZGUyYjA0NjFlYTE0YTM4YmU2ODYyMDM5MmU3ZTg5M2NiNGVhOTM5M2ZiODg2YzIwZmY3OTA2NDIzMDViZjMwMjAwMzg5MmU1NGRmOWY2Njc1MDlkYzUzOTIwZGY1ODNmNTBhM2RkNjFhYmI2ZmFiNzVkNjAwMzc3ZTM4M2U2YWNhNjcxMGVlZWEyNzE1NmUwNjc1MmM5NGNlMjVhZTk5ZmNiZjg1OTJkYmUyZDdlMjc0NTNjYjQ0ZGUwNzEwMGViYjFhMmExOTgxMWE0NzhhZGJlYWIyNzBmOTRlOGZlMzY5ZDkwYjNjYTYxMmY5ZiI6IjIyZDcxZDU0MzYzYTQyMTdhYTU1MTEzZjA1OWIzMzg0ZTNlNTdlNDQiOiIwNDlkMDE4NTg0NWEyNjRkMjhmZWIxZTY5ZWRhZWMwOTA2MDllOGU0NmQ5M2FiYjM4MzcxY2U1MWY0YWE2NWE1OTliZGFhYTgxZDI0ZmJhNjZhMDhhMTE2Y2I2NDRmM2YxZTY1M2Q5NWM4OWRiOGJiZDVkYWFjMjcwOWM4OTg0MDAwMTc4NDEwYTdjNmFhODY2N2RkYzM4Yzc0MWY3MTBlYzg2NjVhYTkwNTJiZTkyOWQ0ZTNiMTY3ODJjMTY2MjExNGM1NDE0YmIwMzUzNDU1YzM5MmZjMjhmM2RiNTkwNTRiNWYzNjVjNDllMWQxNTZmODc2ZWUxMGNiNGZkNzA1OTgiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA0XzIgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjc6MTY6IjA1NGFkYjc4ODY0NDdlZmU2ZjU3ZTAzNjhmMDZjZjUyYjBhMzM3MDc2MGQxNjFjZWYxMjZiOTFiZTdmODljNDIxYjYyYTZlYzFkYTNjMzExZDc1ZWQ1MGUwYWI1ZmZmM2ZkMzM4YWNjM2FhOGE0ZTc3ZWUyNjM2OWFjYjgxYmE5MDBmYTgzZjUzMDBjZjliYjZjNTNhZDFkYzhhMTc4YjgxNWRiNDIzNWE5YTlkYTBjMDZkZTRlNjE1ZWExMjc3Y2U1NTllOWMxMDhkZTU4YzE0YTgxYWE3N2Y1YTZmOGQxMzM1NDk0NDk4ODQ4YzhiOTU5NDA3NDBiZTdiZjdjMzcwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMGNhMmFkNzc3OTdlY2U4NmRlNWJmNzY4NzUwZGRiNWVkNmEzMTE2YWQ5OWJiZDE3ZWRmN2Y3ODJmMGRiMWNkMDViMGY2Nzc0NjhjNWVhNDIwZGMxMTZiMTBlODBkMTEwZGUyYjA0NjFlYTE0YTM4YmU2ODYyMDM5MmU3ZTg5M2NiNGVhOTM5M2ZiODg2YzIwZmY3OTA2NDIzMDViZjMwMjAwMzg5MmU1NGRmOWY2Njc1MDlkYzUzOTIwZGY1ODNmNTBhM2RkNjFhYmI2ZmFiNzVkNjAwMzc3ZTM4M2U2YWNhNjcxMGVlZWEyNzE1NmUwNjc1MmM5NGNlMjVhZTk5ZmNiZjg1OTJkYmUyZDdlMjc0NTNjYjQ0ZGUwNzEwMGViYjFhMmExOTgxMWE0NzhhZGJlYWIyNzBmOTRlOGZlMzY5ZDkwYjNjYTYxMmY5ZiI6IjIyZDcxZDU0MzYzYTQyMTdhYTU1MTEzZjA1OWIzMzg0ZTNlNTdlNDQiOiIwNDlkMDE4NTg0NWEyNjRkMjhmZWIxZTY5ZWRhZWMwOTA2MDllOGU0NmQ5M2FiYjM4MzcxY2U1MWY0YWE2NWE1OTliZGFhYTgxZDI0ZmJhNjZhMDhhMTE2Y2I2NDRmM2YxZTY1M2Q5NWM4OWRiOGJiZDVkYWFjMjcwOWM4OTg0MDAwMTc4NDEwYTdjNmFhODY2N2RkYzM4Yzc0MWY3MTBlYzg2NjVhYTkwNTJiZTkyOWQ0ZTNiMTY3ODJjMTY2MjExNGM1NDE0YmIwMzUzNDU1YzM5MmZjMjhmM2RiNTkwNTRiNWYzNjVjNDllMWQxNTZmODc2ZWUxMGNiNGZkNzA1OTgiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA0XzMKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI3OjE2OiIwMjkyMzIzMzZkMjgzODk0NWRiYTlkZDc3MjNmNGU2MjRhMDVmNzM3NWI5MjdhODdhYmU2YTg5M2ExNjU4ZmQ0OWY0N2Y2YzdiMGZhNTk2YzY1ZmE2OGEyM2YwYWI0MzI5NjJkMThkNDM0M2JkNmZkNjcxYTVlYThkMTQ4NDEzOTk1IjoxNjoiMDIwZWY1ZWZlN2M1Mzk0YWVkMjI3MmY3ZTgxYTc0ZjRjMDJkMTQ1ODk0Y2IxYjNjYWIyM2E5YTA3MTBhMmFmYzdlMzMyOWFjYmI3NDNkMDFmNjgwYzRkMDJhZmI0YzhmZGU3ZTIwOTMwODExYmIyYjk5NTc4OGI1ZTg3MmMyMGJiMSI6MTY6IjA1NGFkYjc4ODY0NDdlZmU2ZjU3ZTAzNjhmMDZjZjUyYjBhMzM3MDc2MGQxNjFjZWYxMjZiOTFiZTdmODljNDIxYjYyYTZlYzFkYTNjMzExZDc1ZWQ1MGUwYWI1ZmZmM2ZkMzM4YWNjM2FhOGE0ZTc3ZWUyNjM2OWFjYjgxYmE5MDBmYTgzZjUzMDBjZjliYjZjNTNhZDFkYzhhMTc4YjgxNWRiNDIzNWE5YTlkYTBjMDZkZTRlNjE1ZWExMjc3Y2U1NTllOWMxMDhkZTU4YzE0YTgxYWE3N2Y1YTZmOGQxMzM1NDk0NDk4ODQ4YzhiOTU5NDA3NDBiZTdiZjdjMzcwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMjg4MDYyYWZjMDhmY2RiN2M1Zjg2NTBiMjk4MzczMDA0NjFkZDU2NzZjMTdhMjBhM2M4ZmI1MTQ4OTQ5ZTNmNzNkNjZiM2FlODJjNzI0MGUyN2M1YjNlYzQzMjhlZTdkNmRkZjZhNmEwYzliNWIxNWJjZGExOTZhOWQwYzc2YjExOWQ1MzRkODVhYmQxMjM5NjJkNTgzYjc2Y2U5ZDE4MGJjZTFjYSI6IjRhZjg3MGZiYzY1MTYwMTJjYTkxNmM3MGJhODYyYWM3ZTgyNDM2MTciOiIwM2ZiYzQxMGEyY2VkNTk1MDBmYjk5ZjllMmFmMjc4MWFkYTc0ZTEzMTQ1NjI0NjAyNzgyZTI5OTQ4MTNlZWZjYTA1MTllY2QyNTNiODU1ZmI2MjZhOTBkNzcxZWFlMDI4YjBjNDdhMTk5Y2JkOWY4ZTMyNjk3MzRhZjQxNjM1OTkwOTA3MTNhM2ZhOTEwZmEwOTYwNjUyNzIxNDMyYjk3MTAzNmE3MTgxYTJiYzBjYWI0M2IwYjU5OGJjNjIxNzQ2MWQ3ZGIzMDVmZjdlOTU0YzViNWJiMjMxYzM5ZTc5MWFmNmJjZmE3NmIxNDdiMDgxMzIxZjcyNjQxNDgyYTJhYWQiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA0XzMgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjc6MTY6IjA1NGFkYjc4ODY0NDdlZmU2ZjU3ZTAzNjhmMDZjZjUyYjBhMzM3MDc2MGQxNjFjZWYxMjZiOTFiZTdmODljNDIxYjYyYTZlYzFkYTNjMzExZDc1ZWQ1MGUwYWI1ZmZmM2ZkMzM4YWNjM2FhOGE0ZTc3ZWUyNjM2OWFjYjgxYmE5MDBmYTgzZjUzMDBjZjliYjZjNTNhZDFkYzhhMTc4YjgxNWRiNDIzNWE5YTlkYTBjMDZkZTRlNjE1ZWExMjc3Y2U1NTllOWMxMDhkZTU4YzE0YTgxYWE3N2Y1YTZmOGQxMzM1NDk0NDk4ODQ4YzhiOTU5NDA3NDBiZTdiZjdjMzcwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMjg4MDYyYWZjMDhmY2RiN2M1Zjg2NTBiMjk4MzczMDA0NjFkZDU2NzZjMTdhMjBhM2M4ZmI1MTQ4OTQ5ZTNmNzNkNjZiM2FlODJjNzI0MGUyN2M1YjNlYzQzMjhlZTdkNmRkZjZhNmEwYzliNWIxNWJjZGExOTZhOWQwYzc2YjExOWQ1MzRkODVhYmQxMjM5NjJkNTgzYjc2Y2U5ZDE4MGJjZTFjYSI6IjRhZjg3MGZiYzY1MTYwMTJjYTkxNmM3MGJhODYyYWM3ZTgyNDM2MTciOiIwM2ZiYzQxMGEyY2VkNTk1MDBmYjk5ZjllMmFmMjc4MWFkYTc0ZTEzMTQ1NjI0NjAyNzgyZTI5OTQ4MTNlZWZjYTA1MTllY2QyNTNiODU1ZmI2MjZhOTBkNzcxZWFlMDI4YjBjNDdhMTk5Y2JkOWY4ZTMyNjk3MzRhZjQxNjM1OTkwOTA3MTNhM2ZhOTEwZmEwOTYwNjUyNzIxNDMyYjk3MTAzNmE3MTgxYTJiYzBjYWI0M2IwYjU5OGJjNjIxNzQ2MWQ3ZGIzMDVmZjdlOTU0YzViNWJiMjMxYzM5ZTc5MWFmNmJjZmE3NmIxNDdiMDgxMzIxZjcyNjQxNDgyYTJhYWQiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA0XzQKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI3OjE2OiIwMjkyMzIzMzZkMjgzODk0NWRiYTlkZDc3MjNmNGU2MjRhMDVmNzM3NWI5MjdhODdhYmU2YTg5M2ExNjU4ZmQ0OWY0N2Y2YzdiMGZhNTk2YzY1ZmE2OGEyM2YwYWI0MzI5NjJkMThkNDM0M2JkNmZkNjcxYTVlYThkMTQ4NDEzOTk1IjoxNjoiMDIwZWY1ZWZlN2M1Mzk0YWVkMjI3MmY3ZTgxYTc0ZjRjMDJkMTQ1ODk0Y2IxYjNjYWIyM2E5YTA3MTBhMmFmYzdlMzMyOWFjYmI3NDNkMDFmNjgwYzRkMDJhZmI0YzhmZGU3ZTIwOTMwODExYmIyYjk5NTc4OGI1ZTg3MmMyMGJiMSI6MTY6IjA1NGFkYjc4ODY0NDdlZmU2ZjU3ZTAzNjhmMDZjZjUyYjBhMzM3MDc2MGQxNjFjZWYxMjZiOTFiZTdmODljNDIxYjYyYTZlYzFkYTNjMzExZDc1ZWQ1MGUwYWI1ZmZmM2ZkMzM4YWNjM2FhOGE0ZTc3ZWUyNjM2OWFjYjgxYmE5MDBmYTgzZjUzMDBjZjliYjZjNTNhZDFkYzhhMTc4YjgxNWRiNDIzNWE5YTlkYTBjMDZkZTRlNjE1ZWExMjc3Y2U1NTllOWMxMDhkZTU4YzE0YTgxYWE3N2Y1YTZmOGQxMzM1NDk0NDk4ODQ4YzhiOTU5NDA3NDBiZTdiZjdjMzcwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiNmY0ZjlhYjk1MDExOTljZWY1NWM2Y2Y0MDhmZTdiMzZjNTU3YzQ5ZDQyMGE0NzYzZDI0NjNjOGFkNDRiM2NmYzViZTI3NDJjMGU3ZDliMGY2NjA4ZjA4YzdmNDdiNjkzZWUiOiI0MGQyZTE4MGZhZTFlYWM0MzljMTkwYjU2YzJjMGUxNGRkZjlhMjI2IjoiMDQ4NjY0NGJjNjZiZjc1ZDI4MzM1YTYxNzliMTA4NTFmNDNmMDliZGVkOWZhYzFhZjMzMjUyYmI5OTUzYmE0Mjk4Y2Q2NDY2YjI3NTM5YTcwYWRhYTNmODliM2RiM2M3NGFiNjM1ZDEyMmY0ZWU3Y2U1NTdhNjFlNTliODJmZmI3ODY2MzBlNWY5ZGI1M2M3N2Q5YTBjMTJmYWI1OTU4ZDRjMmNlN2RhYTgwN2NkODliYTJjYzdmY2QwMmZmNDcwY2E2N2IyMjlmY2NlODE0Yzg1MmM3M2NjOTNiZWEzNWJlNjg0NTljZTQ3OGU5ZDQ2NTVkMTIxYzg0NzJmMzcxZDRmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNF80ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI3OjE2OiIwNTRhZGI3ODg2NDQ3ZWZlNmY1N2UwMzY4ZjA2Y2Y1MmIwYTMzNzA3NjBkMTYxY2VmMTI2YjkxYmU3Zjg5YzQyMWI2MmE2ZWMxZGEzYzMxMWQ3NWVkNTBlMGFiNWZmZjNmZDMzOGFjYzNhYThhNGU3N2VlMjYzNjlhY2I4MWJhOTAwZmE4M2Y1MzAwY2Y5YmI2YzUzYWQxZGM4YTE3OGI4MTVkYjQyMzVhOWE5ZGEwYzA2ZGU0ZTYxNWVhMTI3N2NlNTU5ZTljMTA4ZGU1OGMxNGE4MWFhNzdmNWE2ZjhkMTMzNTQ5NDQ5ODg0OGM4Yjk1OTQwNzQwYmU3YmY3YzM3MDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjZmNGY5YWI5NTAxMTk5Y2VmNTVjNmNmNDA4ZmU3YjM2YzU1N2M0OWQ0MjBhNDc2M2QyNDYzYzhhZDQ0YjNjZmM1YmUyNzQyYzBlN2Q5YjBmNjYwOGYwOGM3ZjQ3YjY5M2VlIjoiNDBkMmUxODBmYWUxZWFjNDM5YzE5MGI1NmMyYzBlMTRkZGY5YTIyNiI6IjA0ODY2NDRiYzY2YmY3NWQyODMzNWE2MTc5YjEwODUxZjQzZjA5YmRlZDlmYWMxYWYzMzI1MmJiOTk1M2JhNDI5OGNkNjQ2NmIyNzUzOWE3MGFkYWEzZjg5YjNkYjNjNzRhYjYzNWQxMjJmNGVlN2NlNTU3YTYxZTU5YjgyZmZiNzg2NjMwZTVmOWRiNTNjNzdkOWEwYzEyZmFiNTk1OGQ0YzJjZTdkYWE4MDdjZDg5YmEyY2M3ZmNkMDJmZjQ3MGNhNjdiMjI5ZmNjZTgxNGM4NTJjNzNjYzkzYmVhMzViZTY4NDU5Y2U0NzhlOWQ0NjU1ZDEyMWM4NDcyZjM3MWQ0ZiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDRfNQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjc6MTY6IjAyOTIzMjMzNmQyODM4OTQ1ZGJhOWRkNzcyM2Y0ZTYyNGEwNWY3Mzc1YjkyN2E4N2FiZTZhODkzYTE2NThmZDQ5ZjQ3ZjZjN2IwZmE1OTZjNjVmYTY4YTIzZjBhYjQzMjk2MmQxOGQ0MzQzYmQ2ZmQ2NzFhNWVhOGQxNDg0MTM5OTUiOjE2OiIwMjBlZjVlZmU3YzUzOTRhZWQyMjcyZjdlODFhNzRmNGMwMmQxNDU4OTRjYjFiM2NhYjIzYTlhMDcxMGEyYWZjN2UzMzI5YWNiYjc0M2QwMWY2ODBjNGQwMmFmYjRjOGZkZTdlMjA5MzA4MTFiYjJiOTk1Nzg4YjVlODcyYzIwYmIxIjoxNjoiMDU0YWRiNzg4NjQ0N2VmZTZmNTdlMDM2OGYwNmNmNTJiMGEzMzcwNzYwZDE2MWNlZjEyNmI5MWJlN2Y4OWM0MjFiNjJhNmVjMWRhM2MzMTFkNzVlZDUwZTBhYjVmZmYzZmQzMzhhY2MzYWE4YTRlNzdlZTI2MzY5YWNiODFiYTkwMGZhODNmNTMwMGNmOWJiNmM1M2FkMWRjOGExNzhiODE1ZGI0MjM1YTlhOWRhMGMwNmRlNGU2MTVlYTEyNzdjZTU1OWU5YzEwOGRlNThjMTRhODFhYTc3ZjVhNmY4ZDEzMzU0OTQ0OTg4NDhjOGI5NTk0MDc0MGJlN2JmN2MzNzA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJlMTdkMjAzODVkNTAxOTU1ODIzYzNmNjY2MjU0YzFkM2RkMzZhZDUxNjhiOGYxOGQyODZmZGNmNjdhN2RhZDk0MDk3MDg1ZmFiN2VkODZmZTIxNDJhMjg3NzE3MTc5OTdlZjFhN2EwODg4NGVmYzM5MzU2ZDc2MDc3YWFmODI0NTlhN2ZhZDQ1ODQ4ODc1ZjI4MTliMDk4OTM3ZmU5MjNiY2M5ZGM0NDJkNzJkNzU0ZDgxMjAyNTA5MGM5YmMwM2RiMzA4MGMxMzhkZDYzYjM1NWQwYjRiODVkNjY4OGFjMTlmNGRlMTUwODRhMGJhNGUzNzNiOTNlZjRhNTU1MDk2NjkxOTE1ZGMyM2MwMGU5NTRjZGViMjBhNDdjZDU1ZDE2YzNkODY4MWQ0NmVkN2YyZWQ1ZWE0Mjc5NWJlMTdiYWVkMjVmMGY0ZDExM2IzNjM2YWRkZDU4NWYxNmE4YjVhZWMwYzhmYTljNWYwM2NiZjNiOWI3MyI6IjI0OTdkYzJiNDYxNWRmYWU1YTY2M2Q0OWZmZDU2YmY3ZWZjMTEzMDQiOiIwMjJhODAwNDUzNTM5MDRjYjMwY2JiNTQyZDdkNDk5MDQyMWE2ZWVjMTZhODAyOWE4NDIyYWRmZDIyZDZhZmY4YzRjYzAyOTRhZjExMGEwYzA2N2VjODZhN2QzNjQxMzQ0NTliYjFhZThmZjgzNmQ1YThhMjU3OTg0MDk5NmIzMjBiMTlmMTNhMTNmYWQzNzhkOTMxYTY1NjI1ZGFlMjczOWYwYzUzNjcwYjM1ZDlkM2NiYWMwOGU3MzNlNGVjMmI4M2FmNGI5MTk2ZDYzZTdjNGZmMWRkZWFlMmExMjI3OTFhMTI1YmZlYThkZWIwZGU4Y2NmMWY0ZmZhZjZlNmZiMGEiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA0XzUgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjc6MTY6IjA1NGFkYjc4ODY0NDdlZmU2ZjU3ZTAzNjhmMDZjZjUyYjBhMzM3MDc2MGQxNjFjZWYxMjZiOTFiZTdmODljNDIxYjYyYTZlYzFkYTNjMzExZDc1ZWQ1MGUwYWI1ZmZmM2ZkMzM4YWNjM2FhOGE0ZTc3ZWUyNjM2OWFjYjgxYmE5MDBmYTgzZjUzMDBjZjliYjZjNTNhZDFkYzhhMTc4YjgxNWRiNDIzNWE5YTlkYTBjMDZkZTRlNjE1ZWExMjc3Y2U1NTllOWMxMDhkZTU4YzE0YTgxYWE3N2Y1YTZmOGQxMzM1NDk0NDk4ODQ4YzhiOTU5NDA3NDBiZTdiZjdjMzcwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZTE3ZDIwMzg1ZDUwMTk1NTgyM2MzZjY2NjI1NGMxZDNkZDM2YWQ1MTY4YjhmMThkMjg2ZmRjZjY3YTdkYWQ5NDA5NzA4NWZhYjdlZDg2ZmUyMTQyYTI4NzcxNzE3OTk3ZWYxYTdhMDg4ODRlZmMzOTM1NmQ3NjA3N2FhZjgyNDU5YTdmYWQ0NTg0ODg3NWYyODE5YjA5ODkzN2ZlOTIzYmNjOWRjNDQyZDcyZDc1NGQ4MTIwMjUwOTBjOWJjMDNkYjMwODBjMTM4ZGQ2M2IzNTVkMGI0Yjg1ZDY2ODhhYzE5ZjRkZTE1MDg0YTBiYTRlMzczYjkzZWY0YTU1NTA5NjY5MTkxNWRjMjNjMDBlOTU0Y2RlYjIwYTQ3Y2Q1NWQxNmMzZDg2ODFkNDZlZDdmMmVkNWVhNDI3OTViZTE3YmFlZDI1ZjBmNGQxMTNiMzYzNmFkZGQ1ODVmMTZhOGI1YWVjMGM4ZmE5YzVmMDNjYmYzYjliNzMiOiIyNDk3ZGMyYjQ2MTVkZmFlNWE2NjNkNDlmZmQ1NmJmN2VmYzExMzA0IjoiMDIyYTgwMDQ1MzUzOTA0Y2IzMGNiYjU0MmQ3ZDQ5OTA0MjFhNmVlYzE2YTgwMjlhODQyMmFkZmQyMmQ2YWZmOGM0Y2MwMjk0YWYxMTBhMGMwNjdlYzg2YTdkMzY0MTM0NDU5YmIxYWU4ZmY4MzZkNWE4YTI1Nzk4NDA5OTZiMzIwYjE5ZjEzYTEzZmFkMzc4ZDkzMWE2NTYyNWRhZTI3MzlmMGM1MzY3MGIzNWQ5ZDNjYmFjMDhlNzMzZTRlYzJiODNhZjRiOTE5NmQ2M2U3YzRmZjFkZGVhZTJhMTIyNzkxYTEyNWJmZWE4ZGViMGRlOGNjZjFmNGZmYWY2ZTZmYjBhIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNF82Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNzoxNjoiMDI5MjMyMzM2ZDI4Mzg5NDVkYmE5ZGQ3NzIzZjRlNjI0YTA1ZjczNzViOTI3YTg3YWJlNmE4OTNhMTY1OGZkNDlmNDdmNmM3YjBmYTU5NmM2NWZhNjhhMjNmMGFiNDMyOTYyZDE4ZDQzNDNiZDZmZDY3MWE1ZWE4ZDE0ODQxMzk5NSI6MTY6IjAyMGVmNWVmZTdjNTM5NGFlZDIyNzJmN2U4MWE3NGY0YzAyZDE0NTg5NGNiMWIzY2FiMjNhOWEwNzEwYTJhZmM3ZTMzMjlhY2JiNzQzZDAxZjY4MGM0ZDAyYWZiNGM4ZmRlN2UyMDkzMDgxMWJiMmI5OTU3ODhiNWU4NzJjMjBiYjEiOjE2OiIwNTRhZGI3ODg2NDQ3ZWZlNmY1N2UwMzY4ZjA2Y2Y1MmIwYTMzNzA3NjBkMTYxY2VmMTI2YjkxYmU3Zjg5YzQyMWI2MmE2ZWMxZGEzYzMxMWQ3NWVkNTBlMGFiNWZmZjNmZDMzOGFjYzNhYThhNGU3N2VlMjYzNjlhY2I4MWJhOTAwZmE4M2Y1MzAwY2Y5YmI2YzUzYWQxZGM4YTE3OGI4MTVkYjQyMzVhOWE5ZGEwYzA2ZGU0ZTYxNWVhMTI3N2NlNTU5ZTljMTA4ZGU1OGMxNGE4MWFhNzdmNWE2ZjhkMTMzNTQ5NDQ5ODg0OGM4Yjk1OTQwNzQwYmU3YmY3YzM3MDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImFmYmMxOWQ0NzkyNDkwMThmZGY0ZTA5ZjYxODcyNjQ0MDQ5NWRlMTFkZGVlZTM4ODcyZDc3NWZjZWE3NGEyMzg5NmI1MzQzYzljMzhkNDZhZjBkYmEyMjRkMDQ3NTgwY2M2MGE2NWU5MzkxY2Y5YjU5YjM2YTg2MDU5OGQ0ZTgyMTY3MjJmOTkzYjkxY2ZhZTg3YmMyNTVhZjg5YTZhMTk5YmNhNGEzOTFlYWRiYzNhMjQ5MDNjMGJkNjY3MzY4ZjZiZTc4ZTNmZWFiZmI0ZmZkNDYzMTIyNzYzNzQwZmZiYmVmZWFiOWEyNTU2NGJjNWQxYzI0YzkzZTQyMmY3NTA3M2UyYWQ3MmJmNDViMTBkZjAwYjUyYTE0NzEyOGU3M2ZlZTMzZmEzZjA1NzdkNzdmODBmYmMyZGYxYmVkMzEzMjkwYzEyNzc3ZjUwIjoiYTMzNGRiNmZhZWJmMTEwODFhMDRmODdjMmQ2MjFjZGVjNzkzMGI5YiI6IjAwOTM4ZGNiNmQ1ODMwNDYwNjVmNjljNzhkYTdhMWYxNzU3MDY2YTdmYTc1MTI1YTlkMjkyOWYwYjc5YTYwYjYyN2IwODJmMTFmNWIxOTZmMjhlYjlkYWE2ZjIxYzA1ZTUxNDBmNmFlZjE3MzdkMjAyMzA3NWMwNWVjZjA0YTAyOGM2ODZhMmFiM2U3ZDVhMDY2NGYyOTVjZTEyOTk1ZTg5MDkwOGI2YWQyMWYwODM5ZWI2NWI3MDM5M2E3YjVhZmQ5ODcxZGUwY2FhMGNlZGVjNWI4MTk2MjY3NTYyMDlkMTNhYjFlN2JiOTU0NmEyNmZmMzdlOWE1MWFmOWZkNTYyZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDRfNiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNzoxNjoiMDU0YWRiNzg4NjQ0N2VmZTZmNTdlMDM2OGYwNmNmNTJiMGEzMzcwNzYwZDE2MWNlZjEyNmI5MWJlN2Y4OWM0MjFiNjJhNmVjMWRhM2MzMTFkNzVlZDUwZTBhYjVmZmYzZmQzMzhhY2MzYWE4YTRlNzdlZTI2MzY5YWNiODFiYTkwMGZhODNmNTMwMGNmOWJiNmM1M2FkMWRjOGExNzhiODE1ZGI0MjM1YTlhOWRhMGMwNmRlNGU2MTVlYTEyNzdjZTU1OWU5YzEwOGRlNThjMTRhODFhYTc3ZjVhNmY4ZDEzMzU0OTQ0OTg4NDhjOGI5NTk0MDc0MGJlN2JmN2MzNzA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJhZmJjMTlkNDc5MjQ5MDE4ZmRmNGUwOWY2MTg3MjY0NDA0OTVkZTExZGRlZWUzODg3MmQ3NzVmY2VhNzRhMjM4OTZiNTM0M2M5YzM4ZDQ2YWYwZGJhMjI0ZDA0NzU4MGNjNjBhNjVlOTM5MWNmOWI1OWIzNmE4NjA1OThkNGU4MjE2NzIyZjk5M2I5MWNmYWU4N2JjMjU1YWY4OWE2YTE5OWJjYTRhMzkxZWFkYmMzYTI0OTAzYzBiZDY2NzM2OGY2YmU3OGUzZmVhYmZiNGZmZDQ2MzEyMjc2Mzc0MGZmYmJlZmVhYjlhMjU1NjRiYzVkMWMyNGM5M2U0MjJmNzUwNzNlMmFkNzJiZjQ1YjEwZGYwMGI1MmExNDcxMjhlNzNmZWUzM2ZhM2YwNTc3ZDc3ZjgwZmJjMmRmMWJlZDMxMzI5MGMxMjc3N2Y1MCI6ImEzMzRkYjZmYWViZjExMDgxYTA0Zjg3YzJkNjIxY2RlYzc5MzBiOWIiOiIwMDkzOGRjYjZkNTgzMDQ2MDY1ZjY5Yzc4ZGE3YTFmMTc1NzA2NmE3ZmE3NTEyNWE5ZDI5MjlmMGI3OWE2MGI2MjdiMDgyZjExZjViMTk2ZjI4ZWI5ZGFhNmYyMWMwNWU1MTQwZjZhZWYxNzM3ZDIwMjMwNzVjMDVlY2YwNGEwMjhjNjg2YTJhYjNlN2Q1YTA2NjRmMjk1Y2UxMjk5NWU4OTA5MDhiNmFkMjFmMDgzOWViNjViNzAzOTNhN2I1YWZkOTg3MWRlMGNhYTBjZWRlYzViODE5NjI2NzU2MjA5ZDEzYWIxZTdiYjk1NDZhMjZmZjM3ZTlhNTFhZjlmZDU2MmUiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA1XzEKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI4OjE2OiIwM2YyZjMzMWY0MTQyZDRmMjRiNDNhYTEwMjc5YTg5NjUyZDRlNzUzNzIyMWExYTdiMmEyNWRlYjU1MWU1ZGU5YWM0OTc0MTFjMjI3YTk0ZTQ1ZjkxYzJkMWMxM2NjMDQ2Y2Y0Y2UxNGUzMmQwNTg3MzQyMTBkNDRhODdlZTFiNzNmIjoxNjoiMDM0ZjA5MGQ3M2I1NTgwMzAzMGNmMDM2MWE1ZDgwODFiZmI3OWY4NTE1MjNmZWFjMGEyMTI0ZDA4ZDQwMTNmZjA4NDg3NzcxYTg3MGQwNDc5ZGMwNjg2YzYyZjc3MThkZmVjZjAyNGIxN2M5MjY3Njc4MDU5MTcxMzM5Y2MwMDgzOSI6MTY6IjBkMTBmNjYxZjI5OTQwZjVlZDM5YWEyNjA5NjZkZWI0Nzg0MzY3OWQyYjZmYjI1YjNkZTM3MGYzYWM3YzE5OTE2MzkxZmQyNWZiNTI3ZWJmYTZhNGI0ZGY0NWExNzU5ZDk5NmM0YmI0ZWJkMTg4MjhjNDRmYzUyZDAxOTE4NzE3NDA1MjVmNDdhNGIwY2M4ZGEzMjVlZDhhYTY3NmIwZDBmNjI2ZTBhNzdmMDc2OTIxNzBhY2FjODA4MmY0MmZhYTdkYzdjZDEyM2U3MzBlMzFhODc5ODUyMDRjYWJjYmU2NjcwZDQzYTJkZDJiMmRkZWY1ZTA1MzkyZmMyMTNiYzUwNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMzBjN2Q1NTc0NThiNDM2ZGVjZmRjMTRkMDZjYjdiOTZiMDY3MThjNDhkN2RlNTc0ODJhODY4YWU3ZjA2NTg3MGE2MjE2NTA2ZDExYjc3OTMyM2RmZGYwNDZjZjU3NzUxMjkxMzRiNGQ1Njg5ZTRkOWMwY2UxZTEyZDdkNGIwNmNiNWZjNTgyMGRlY2ZhNDFiYWY1OWJmMjU3YjMyZjAyNWI3Njc5YjQ0NWI5NDk5YzkyNTU1MTQ1ODg1OTkyZjFiNzZmODQ4OTFlZTRkM2JlMGY1MTUwZmQ1OTAxZTNhNGM4ZWQ0M2ZkMzZiNjFkMDIyZTY1YWQ1MDA4ZGJmMzMyOTNjMjJiZmJmZDA3MzIxZjBmMWQ1ZmE5ZmRmMDAxNGMyZmNiMDM1OGFhZDBlMzU0YjBkMjkiOiIwODFiMjMzYjQzNTY3NzUwYmQ2ZTc4ZjM5NmE4OGI5ZjZhNDQ1MTUxIjoiMGJhMzczZjc2ZTA5MjFiNzBhOGZiZmU2MjJmMGJmNzdiMjhhM2RiOThlMzYxMDUxYzNkN2NiOTJhZDA0NTI5MTVhNGRlOWMwMTcyMmY2ODIzZWViNmFkZjdlMGNhODI5MGY1ZGUzZTU0OTg5MGFjMmEzYzU5NTBhYjIxN2JhNTg1OTA4OTQ5NTJkZTk2ZjhkZjExMWIyNTc1MjE1ZGE2YzE2MTU5MGM3NDViZTYxMjQ3NmVlNTc4ZWQzODRhYjMzZTNlY2U5NzQ4MWEyNTJmNWM3OWE5OGI1NTMyYWUwMGNkZDYyZjJlY2MwY2QxYmFlZmU4MGQ4MGI5NjIxOTNlYzFkIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNV8xICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI4OjE2OiIwZDEwZjY2MWYyOTk0MGY1ZWQzOWFhMjYwOTY2ZGViNDc4NDM2NzlkMmI2ZmIyNWIzZGUzNzBmM2FjN2MxOTkxNjM5MWZkMjVmYjUyN2ViZmE2YTRiNGRmNDVhMTc1OWQ5OTZjNGJiNGViZDE4ODI4YzQ0ZmM1MmQwMTkxODcxNzQwNTI1ZjQ3YTRiMGNjOGRhMzI1ZWQ4YWE2NzZiMGQwZjYyNmUwYTc3ZjA3NjkyMTcwYWNhYzgwODJmNDJmYWE3ZGM3Y2QxMjNlNzMwZTMxYTg3OTg1MjA0Y2FiY2JlNjY3MGQ0M2EyZGQyYjJkZGVmNWUwNTM5MmZjMjEzYmM1MDciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjMwYzdkNTU3NDU4YjQzNmRlY2ZkYzE0ZDA2Y2I3Yjk2YjA2NzE4YzQ4ZDdkZTU3NDgyYTg2OGFlN2YwNjU4NzBhNjIxNjUwNmQxMWI3NzkzMjNkZmRmMDQ2Y2Y1Nzc1MTI5MTM0YjRkNTY4OWU0ZDljMGNlMWUxMmQ3ZDRiMDZjYjVmYzU4MjBkZWNmYTQxYmFmNTliZjI1N2IzMmYwMjViNzY3OWI0NDViOTQ5OWM5MjU1NTE0NTg4NTk5MmYxYjc2Zjg0ODkxZWU0ZDNiZTBmNTE1MGZkNTkwMWUzYTRjOGVkNDNmZDM2YjYxZDAyMmU2NWFkNTAwOGRiZjMzMjkzYzIyYmZiZmQwNzMyMWYwZjFkNWZhOWZkZjAwMTRjMmZjYjAzNThhYWQwZTM1NGIwZDI5IjoiMDgxYjIzM2I0MzU2Nzc1MGJkNmU3OGYzOTZhODhiOWY2YTQ0NTE1MSI6IjBiYTM3M2Y3NmUwOTIxYjcwYThmYmZlNjIyZjBiZjc3YjI4YTNkYjk4ZTM2MTA1MWMzZDdjYjkyYWQwNDUyOTE1YTRkZTljMDE3MjJmNjgyM2VlYjZhZGY3ZTBjYTgyOTBmNWRlM2U1NDk4OTBhYzJhM2M1OTUwYWIyMTdiYTU4NTkwODk0OTUyZGU5NmY4ZGYxMTFiMjU3NTIxNWRhNmMxNjE1OTBjNzQ1YmU2MTI0NzZlZTU3OGVkMzg0YWIzM2UzZWNlOTc0ODFhMjUyZjVjNzlhOThiNTUzMmFlMDBjZGQ2MmYyZWNjMGNkMWJhZWZlODBkODBiOTYyMTkzZWMxZCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDVfMgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjg6MTY6IjAzZjJmMzMxZjQxNDJkNGYyNGI0M2FhMTAyNzlhODk2NTJkNGU3NTM3MjIxYTFhN2IyYTI1ZGViNTUxZTVkZTlhYzQ5NzQxMWMyMjdhOTRlNDVmOTFjMmQxYzEzY2MwNDZjZjRjZTE0ZTMyZDA1ODczNDIxMGQ0NGE4N2VlMWI3M2YiOjE2OiIwMzRmMDkwZDczYjU1ODAzMDMwY2YwMzYxYTVkODA4MWJmYjc5Zjg1MTUyM2ZlYWMwYTIxMjRkMDhkNDAxM2ZmMDg0ODc3NzFhODcwZDA0NzlkYzA2ODZjNjJmNzcxOGRmZWNmMDI0YjE3YzkyNjc2NzgwNTkxNzEzMzljYzAwODM5IjoxNjoiMGQxMGY2NjFmMjk5NDBmNWVkMzlhYTI2MDk2NmRlYjQ3ODQzNjc5ZDJiNmZiMjViM2RlMzcwZjNhYzdjMTk5MTYzOTFmZDI1ZmI1MjdlYmZhNmE0YjRkZjQ1YTE3NTlkOTk2YzRiYjRlYmQxODgyOGM0NGZjNTJkMDE5MTg3MTc0MDUyNWY0N2E0YjBjYzhkYTMyNWVkOGFhNjc2YjBkMGY2MjZlMGE3N2YwNzY5MjE3MGFjYWM4MDgyZjQyZmFhN2RjN2NkMTIzZTczMGUzMWE4Nzk4NTIwNGNhYmNiZTY2NzBkNDNhMmRkMmIyZGRlZjVlMDUzOTJmYzIxM2JjNTA3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJlN2IzMmUxNTU2ZWExYjI3OTUwNDZhYzY5NzM5ZDIyYWM4OTY2YmYxMWMxMTZmNjE0YjE2Njc0MGU5NmI5MDY1M2U1NzUwOTQ1ZmNmNzcyMTg2YzAzNzkwYTA3ZmRhMzIzZTFhNjE5MTZiMDZlZTIxNTdkYjNkZmY4MGQ2N2Q1ZTM5YTUzYWUyNjhjOGYwOWVkOTlhNzMyMDA1YjBiYzZhMDRhZjRlMDhkNTdhMDBlNzIwMWIzMDYwZWZhYWRiNzMxMTNiZmMwODdmZDgzNzA5M2FhMjUyMzViOGMxNDlmNTYyMTVmMDMxYzI0YWQ1YmRlN2YyOTk2MGRmN2Q1MjQwNzBmNzQ0OWM2Zjc4NTA4NGJlMWEwZjczMzA0N2YzMzZmOTE1NDczODY3NDU0N2RiMDJhOWY0NGRmYzZlNjAzMDEwODFlMWNlOTk4NDdmM2I1YjYwMWZmMDZiNGQ1Nzc2YTk3NDBiOWFhMGQzNDA1OGZkM2I5MDZlNGY3ODU5ZGZiMDdkNzE3M2U1ZTZmNjM1MGFkYWMyMWYyN2IyMzA3NDY5IjoiYmQwY2UxOTU0OWQwNzAwMTIwY2JlNTEwNzdkYmJiYjAwYThkOGIwOSI6IjA4MTgwZGU4MjVlNGI4YjAxNGEzMmRhOGJhNzYxNTU1OTIxMjA0ZjJmOTBkNWYyNGI3MTI5MDhmZjg0ZjNlMjIwYWQxNzk5N2MwZGQ2ZTcwNjYzMGJhM2U4NGFkZDRkNWU3YWIwMDRlNTgwNzRiNTQ5NzA5NTY1ZDQzYWQ5ZTk3YjVhN2ExYTI5ZTg1YjlmOTBmNGFhZmNkZjU4MzIxZGU4YzU5NzRlZjlhYmYyZDUyNmYzM2MwZjJmODJlOTVkMTU4ZWE2YjgxZjE3MzZkYjhkMWFmM2Q2YWM2YTgzYjMyZDE4YmFlMGZmMWIyZmUyN2RlNGM3NmVkOGM3OTgwYTM0ZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDVfMiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyODoxNjoiMGQxMGY2NjFmMjk5NDBmNWVkMzlhYTI2MDk2NmRlYjQ3ODQzNjc5ZDJiNmZiMjViM2RlMzcwZjNhYzdjMTk5MTYzOTFmZDI1ZmI1MjdlYmZhNmE0YjRkZjQ1YTE3NTlkOTk2YzRiYjRlYmQxODgyOGM0NGZjNTJkMDE5MTg3MTc0MDUyNWY0N2E0YjBjYzhkYTMyNWVkOGFhNjc2YjBkMGY2MjZlMGE3N2YwNzY5MjE3MGFjYWM4MDgyZjQyZmFhN2RjN2NkMTIzZTczMGUzMWE4Nzk4NTIwNGNhYmNiZTY2NzBkNDNhMmRkMmIyZGRlZjVlMDUzOTJmYzIxM2JjNTA3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJlN2IzMmUxNTU2ZWExYjI3OTUwNDZhYzY5NzM5ZDIyYWM4OTY2YmYxMWMxMTZmNjE0YjE2Njc0MGU5NmI5MDY1M2U1NzUwOTQ1ZmNmNzcyMTg2YzAzNzkwYTA3ZmRhMzIzZTFhNjE5MTZiMDZlZTIxNTdkYjNkZmY4MGQ2N2Q1ZTM5YTUzYWUyNjhjOGYwOWVkOTlhNzMyMDA1YjBiYzZhMDRhZjRlMDhkNTdhMDBlNzIwMWIzMDYwZWZhYWRiNzMxMTNiZmMwODdmZDgzNzA5M2FhMjUyMzViOGMxNDlmNTYyMTVmMDMxYzI0YWQ1YmRlN2YyOTk2MGRmN2Q1MjQwNzBmNzQ0OWM2Zjc4NTA4NGJlMWEwZjczMzA0N2YzMzZmOTE1NDczODY3NDU0N2RiMDJhOWY0NGRmYzZlNjAzMDEwODFlMWNlOTk4NDdmM2I1YjYwMWZmMDZiNGQ1Nzc2YTk3NDBiOWFhMGQzNDA1OGZkM2I5MDZlNGY3ODU5ZGZiMDdkNzE3M2U1ZTZmNjM1MGFkYWMyMWYyN2IyMzA3NDY5IjoiYmQwY2UxOTU0OWQwNzAwMTIwY2JlNTEwNzdkYmJiYjAwYThkOGIwOSI6IjA4MTgwZGU4MjVlNGI4YjAxNGEzMmRhOGJhNzYxNTU1OTIxMjA0ZjJmOTBkNWYyNGI3MTI5MDhmZjg0ZjNlMjIwYWQxNzk5N2MwZGQ2ZTcwNjYzMGJhM2U4NGFkZDRkNWU3YWIwMDRlNTgwNzRiNTQ5NzA5NTY1ZDQzYWQ5ZTk3YjVhN2ExYTI5ZTg1YjlmOTBmNGFhZmNkZjU4MzIxZGU4YzU5NzRlZjlhYmYyZDUyNmYzM2MwZjJmODJlOTVkMTU4ZWE2YjgxZjE3MzZkYjhkMWFmM2Q2YWM2YTgzYjMyZDE4YmFlMGZmMWIyZmUyN2RlNGM3NmVkOGM3OTgwYTM0ZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDVfMworcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjg6MTY6IjAzZjJmMzMxZjQxNDJkNGYyNGI0M2FhMTAyNzlhODk2NTJkNGU3NTM3MjIxYTFhN2IyYTI1ZGViNTUxZTVkZTlhYzQ5NzQxMWMyMjdhOTRlNDVmOTFjMmQxYzEzY2MwNDZjZjRjZTE0ZTMyZDA1ODczNDIxMGQ0NGE4N2VlMWI3M2YiOjE2OiIwMzRmMDkwZDczYjU1ODAzMDMwY2YwMzYxYTVkODA4MWJmYjc5Zjg1MTUyM2ZlYWMwYTIxMjRkMDhkNDAxM2ZmMDg0ODc3NzFhODcwZDA0NzlkYzA2ODZjNjJmNzcxOGRmZWNmMDI0YjE3YzkyNjc2NzgwNTkxNzEzMzljYzAwODM5IjoxNjoiMGQxMGY2NjFmMjk5NDBmNWVkMzlhYTI2MDk2NmRlYjQ3ODQzNjc5ZDJiNmZiMjViM2RlMzcwZjNhYzdjMTk5MTYzOTFmZDI1ZmI1MjdlYmZhNmE0YjRkZjQ1YTE3NTlkOTk2YzRiYjRlYmQxODgyOGM0NGZjNTJkMDE5MTg3MTc0MDUyNWY0N2E0YjBjYzhkYTMyNWVkOGFhNjc2YjBkMGY2MjZlMGE3N2YwNzY5MjE3MGFjYWM4MDgyZjQyZmFhN2RjN2NkMTIzZTczMGUzMWE4Nzk4NTIwNGNhYmNiZTY2NzBkNDNhMmRkMmIyZGRlZjVlMDUzOTJmYzIxM2JjNTA3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4ZDgzOTZlMzY1MDdmZTFlZjZhMTkwMTc1NDhlMGM3MTY2NzRjMmZlYzIzM2FkYjJmNzc1NjY1ZWM0MWYyYmQwYmEzOTZiMDYxYTlkYWE3ZTg2NmY3YzIzZmQzNTMxOTU0MzAwYTM0MmY5MjQ1MzVlYTE0OThjNDhmNmM4Nzk5MzI4NjVmYzAyMDAwYzUyODcyM2I3YWQwMzM1NzQ1YjUxMjA5YTBhZmVkOTMyYWY4ZjA4ODdjMjE5MDA0ZDJhYmQ4OTRlYTkyNTU5ZWUzMTk4YWYzYTczNGZlOWI5NjM4YzI2M2E3MjhhZDk1YTVhZThjZTNlYjE1ODM5ZjNhYTc4NTJiYjM5MDcwNmU3NzYwZTQzYTcxMjkxYTJlM2Y4MjcyMzdkZWRhODUxODc0YzUxNzY2NWY1NDVmMjcyMzhkZjg2NTU3ZjM3NWQwOWNjZDhiZDE1ZDhjY2Y2MWY1ZDc4Y2E1YzdmNWNkZTc4MmU2YmY1ZDAwNTcwNTZkNGJhZDk4YjNkMmY5NTc1ZTgyNGFiN2EzM2ZmNTdiMGFjMTAwYWIwZDZlYWQ3YWEwYjUwZjZlNGQzZTVlYzBiOTY2YiI6IjgxNTc3OWE5MWIzYThiZDA0OWJmMmFlYjkyMDE0Mjc3MjIyMmM5Y2EiOiIwNWUwZmRiZGY2Zjc1NmVmNzMzMTg1Y2NmYThjZWQyZWI2ZDAyOWQ5ZDU2ZTM1NTYxYjVkYjhlNzAyNTdlZTZmZDAxOWQyZjBiYmY2NjlmZTliOTgyMWU3OGRmNmQ0MWUzMTYwOGQ1ODI4MGYzMThlZTM0ZjU1OTk0MWM4ZGYxMzI4NzU3NGJhYzAwMGI3ZTU4ZGM0ZjQxNGJhNDlmYjEyN2Y5ZDBmODkzNjYzOGM3NmU4NTM1NmM5OTRmNzk3NTBmN2ZhM2NmNGZkNDgyZGY3NWUzZmI5OTc4Y2QwNjFmN2FiYjE3NTcyZTZlNjNlMGJkZTEyY2JkY2YxOGM2OGI5NzkiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA1XzMgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjg6MTY6IjBkMTBmNjYxZjI5OTQwZjVlZDM5YWEyNjA5NjZkZWI0Nzg0MzY3OWQyYjZmYjI1YjNkZTM3MGYzYWM3YzE5OTE2MzkxZmQyNWZiNTI3ZWJmYTZhNGI0ZGY0NWExNzU5ZDk5NmM0YmI0ZWJkMTg4MjhjNDRmYzUyZDAxOTE4NzE3NDA1MjVmNDdhNGIwY2M4ZGEzMjVlZDhhYTY3NmIwZDBmNjI2ZTBhNzdmMDc2OTIxNzBhY2FjODA4MmY0MmZhYTdkYzdjZDEyM2U3MzBlMzFhODc5ODUyMDRjYWJjYmU2NjcwZDQzYTJkZDJiMmRkZWY1ZTA1MzkyZmMyMTNiYzUwNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiOGQ4Mzk2ZTM2NTA3ZmUxZWY2YTE5MDE3NTQ4ZTBjNzE2Njc0YzJmZWMyMzNhZGIyZjc3NTY2NWVjNDFmMmJkMGJhMzk2YjA2MWE5ZGFhN2U4NjZmN2MyM2ZkMzUzMTk1NDMwMGEzNDJmOTI0NTM1ZWExNDk4YzQ4ZjZjODc5OTMyODY1ZmMwMjAwMGM1Mjg3MjNiN2FkMDMzNTc0NWI1MTIwOWEwYWZlZDkzMmFmOGYwODg3YzIxOTAwNGQyYWJkODk0ZWE5MjU1OWVlMzE5OGFmM2E3MzRmZTliOTYzOGMyNjNhNzI4YWQ5NWE1YWU4Y2UzZWIxNTgzOWYzYWE3ODUyYmIzOTA3MDZlNzc2MGU0M2E3MTI5MWEyZTNmODI3MjM3ZGVkYTg1MTg3NGM1MTc2NjVmNTQ1ZjI3MjM4ZGY4NjU1N2YzNzVkMDljY2Q4YmQxNWQ4Y2NmNjFmNWQ3OGNhNWM3ZjVjZGU3ODJlNmJmNWQwMDU3MDU2ZDRiYWQ5OGIzZDJmOTU3NWU4MjRhYjdhMzNmZjU3YjBhYzEwMGFiMGQ2ZWFkN2FhMGI1MGY2ZTRkM2U1ZWMwYjk2NmIiOiI4MTU3NzlhOTFiM2E4YmQwNDliZjJhZWI5MjAxNDI3NzIyMjJjOWNhIjoiMDVlMGZkYmRmNmY3NTZlZjczMzE4NWNjZmE4Y2VkMmViNmQwMjlkOWQ1NmUzNTU2MWI1ZGI4ZTcwMjU3ZWU2ZmQwMTlkMmYwYmJmNjY5ZmU5Yjk4MjFlNzhkZjZkNDFlMzE2MDhkNTgyODBmMzE4ZWUzNGY1NTk5NDFjOGRmMTMyODc1NzRiYWMwMDBiN2U1OGRjNGY0MTRiYTQ5ZmIxMjdmOWQwZjg5MzY2MzhjNzZlODUzNTZjOTk0Zjc5NzUwZjdmYTNjZjRmZDQ4MmRmNzVlM2ZiOTk3OGNkMDYxZjdhYmIxNzU3MmU2ZTYzZTBiZGUxMmNiZGNmMThjNjhiOTc5IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNV80Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyODoxNjoiMDNmMmYzMzFmNDE0MmQ0ZjI0YjQzYWExMDI3OWE4OTY1MmQ0ZTc1MzcyMjFhMWE3YjJhMjVkZWI1NTFlNWRlOWFjNDk3NDExYzIyN2E5NGU0NWY5MWMyZDFjMTNjYzA0NmNmNGNlMTRlMzJkMDU4NzM0MjEwZDQ0YTg3ZWUxYjczZiI6MTY6IjAzNGYwOTBkNzNiNTU4MDMwMzBjZjAzNjFhNWQ4MDgxYmZiNzlmODUxNTIzZmVhYzBhMjEyNGQwOGQ0MDEzZmYwODQ4Nzc3MWE4NzBkMDQ3OWRjMDY4NmM2MmY3NzE4ZGZlY2YwMjRiMTdjOTI2NzY3ODA1OTE3MTMzOWNjMDA4MzkiOjE2OiIwZDEwZjY2MWYyOTk0MGY1ZWQzOWFhMjYwOTY2ZGViNDc4NDM2NzlkMmI2ZmIyNWIzZGUzNzBmM2FjN2MxOTkxNjM5MWZkMjVmYjUyN2ViZmE2YTRiNGRmNDVhMTc1OWQ5OTZjNGJiNGViZDE4ODI4YzQ0ZmM1MmQwMTkxODcxNzQwNTI1ZjQ3YTRiMGNjOGRhMzI1ZWQ4YWE2NzZiMGQwZjYyNmUwYTc3ZjA3NjkyMTcwYWNhYzgwODJmNDJmYWE3ZGM3Y2QxMjNlNzMwZTMxYTg3OTg1MjA0Y2FiY2JlNjY3MGQ0M2EyZGQyYjJkZGVmNWUwNTM5MmZjMjEzYmM1MDciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjMyOGM2NTllMGE2NDM3NDMzY2NlYjczYzE0IjoiOWFlYzRhNzQ4MGQ1YmJjNDI5MjBkN2NhMjM1ZGI2NzQ5ODljOWFhYyI6IjBiYzk4OTg1M2JjMmVhODY4NzMyNzFjZTE4M2E5MjNhYjY1ZThhNTMxMDBlNmRmNWQ4N2EyNGM0MTk0ZWI3OTc4MTNlZTJhMTg3YzA5N2RkODcyZDU5MWRhNjBjNTY4NjA1ZGQ3ZTc0MmQ1YWY0ZTMzYjExNjc4Y2NiNjM5MDMyMDRhM2QwODBiMDkwMmM4OWFiYTg4NjhmMDA5YzBmMWMwY2I4NTgxMGJiZGQyOTEyMWFiYjg0NzFmZjJkMzllNDlmZDkyZDU2YzY1NWM4ZTAzN2FkMThmYWZiZGM5MmM5NTg2M2Y3ZjYxZWE5ZWZhMjhmZWE0MDEzNjlkMTlkYWVhMSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDVfNCAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyODoxNjoiMGQxMGY2NjFmMjk5NDBmNWVkMzlhYTI2MDk2NmRlYjQ3ODQzNjc5ZDJiNmZiMjViM2RlMzcwZjNhYzdjMTk5MTYzOTFmZDI1ZmI1MjdlYmZhNmE0YjRkZjQ1YTE3NTlkOTk2YzRiYjRlYmQxODgyOGM0NGZjNTJkMDE5MTg3MTc0MDUyNWY0N2E0YjBjYzhkYTMyNWVkOGFhNjc2YjBkMGY2MjZlMGE3N2YwNzY5MjE3MGFjYWM4MDgyZjQyZmFhN2RjN2NkMTIzZTczMGUzMWE4Nzk4NTIwNGNhYmNiZTY2NzBkNDNhMmRkMmIyZGRlZjVlMDUzOTJmYzIxM2JjNTA3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIzMjhjNjU5ZTBhNjQzNzQzM2NjZWI3M2MxNCI6IjlhZWM0YTc0ODBkNWJiYzQyOTIwZDdjYTIzNWRiNjc0OTg5YzlhYWMiOiIwYmM5ODk4NTNiYzJlYTg2ODczMjcxY2UxODNhOTIzYWI2NWU4YTUzMTAwZTZkZjVkODdhMjRjNDE5NGViNzk3ODEzZWUyYTE4N2MwOTdkZDg3MmQ1OTFkYTYwYzU2ODYwNWRkN2U3NDJkNWFmNGUzM2IxMTY3OGNjYjYzOTAzMjA0YTNkMDgwYjA5MDJjODlhYmE4ODY4ZjAwOWMwZjFjMGNiODU4MTBiYmRkMjkxMjFhYmI4NDcxZmYyZDM5ZTQ5ZmQ5MmQ1NmM2NTVjOGUwMzdhZDE4ZmFmYmRjOTJjOTU4NjNmN2Y2MWVhOWVmYTI4ZmVhNDAxMzY5ZDE5ZGFlYTEiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA1XzUKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI4OjE2OiIwM2YyZjMzMWY0MTQyZDRmMjRiNDNhYTEwMjc5YTg5NjUyZDRlNzUzNzIyMWExYTdiMmEyNWRlYjU1MWU1ZGU5YWM0OTc0MTFjMjI3YTk0ZTQ1ZjkxYzJkMWMxM2NjMDQ2Y2Y0Y2UxNGUzMmQwNTg3MzQyMTBkNDRhODdlZTFiNzNmIjoxNjoiMDM0ZjA5MGQ3M2I1NTgwMzAzMGNmMDM2MWE1ZDgwODFiZmI3OWY4NTE1MjNmZWFjMGEyMTI0ZDA4ZDQwMTNmZjA4NDg3NzcxYTg3MGQwNDc5ZGMwNjg2YzYyZjc3MThkZmVjZjAyNGIxN2M5MjY3Njc4MDU5MTcxMzM5Y2MwMDgzOSI6MTY6IjBkMTBmNjYxZjI5OTQwZjVlZDM5YWEyNjA5NjZkZWI0Nzg0MzY3OWQyYjZmYjI1YjNkZTM3MGYzYWM3YzE5OTE2MzkxZmQyNWZiNTI3ZWJmYTZhNGI0ZGY0NWExNzU5ZDk5NmM0YmI0ZWJkMTg4MjhjNDRmYzUyZDAxOTE4NzE3NDA1MjVmNDdhNGIwY2M4ZGEzMjVlZDhhYTY3NmIwZDBmNjI2ZTBhNzdmMDc2OTIxNzBhY2FjODA4MmY0MmZhYTdkYzdjZDEyM2U3MzBlMzFhODc5ODUyMDRjYWJjYmU2NjcwZDQzYTJkZDJiMmRkZWY1ZTA1MzkyZmMyMTNiYzUwNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZjM3Yjk2MjM3OWE0N2Q0MTVhMzc2ZWVjODk3MzE1MGJjYjM0ZWRkNWFiNjU0MDQxYjYxNDMwNTYwYzIxNDQ1ODJiYTEzM2M4NjdkODUyZDZiOGUyMzMyMTkwMTMwMmVjYjQ1YjA5ZWM4OGIxNTI3MTc4ZmEwNDMyNjNmMzA2N2Q5ZmZlOTczMDMyYTk5ZjRjYjA4YWQyYzdlMGEyNDU2Y2RkNTdhN2RmNTZmZTYwNTM1MjdhNWFlYjY3ZDdlNTUyMDYzYzFjYTk3YjFiZWZmYTdiMzllOTk3Y2FmMjc4NzhlYTBmNjJjYmViYzhjMjFkZjRjODg5YTIwMjg1MWU5NDkwODg0OTBjMjQ5YjZlOWFjZjFkODA2M2Y1YmUyMzQzOTg5YmY5NWM0ZGEwMWEyYmU3OGI0YWI2YjM3ODAxNWJjMzc5NTdmNzY5NDhiNWU1OGU0NDBjMjg0NTNkNDBkN2NmZDU3ZTdkNjkwNjAwNDc0YWI1ZTc1OTczYjFlYTBjNWYxZTQ1ZDE0MTkwYWZlMmY0ZWI2ZDNiZGY3MWYxZDJmOGJiMTU2YTFjMjk1ZDA0YWFlYjlkNjg5ZGNlNzllZDYyYmM0NDNlIjoiZTIwYzFlOTg3ODUxMmMzOTk3MGY1ODM3NWUxNTQ5YTY4YjY0ZjMxZCI6IjBhZWZhOTQzYjY5OGI5NjA5ZWRmODk4YWQyMjc0NGFjMjhkYzIzOTQ5N2NlYTM2OWNiYmQ4NGY2NWM5NWMwYWQ3NzZiNTk0NzQwMTY0YjU5YTczOWM2ZmY3YzJmMDdjN2MwNzdhODZkOTUyMzhmZTUxZTFmY2YzMzU3NGE0YWUwNjg0YjQyYTNmNmJmNjc3ZDkxODIwY2E4OTg3NDQ2N2IyYzIzYWRkNzc5NjljODA3MTc0MzBkMGVmYzFkMzY5NTg5MmNlODU1Y2I3ZjcwMTE2MzBmNGRmMjZkZWY4ZGRmMzZmYzIzOTA1ZjU3ZmE2MjQzYTQ4NWM3NzBkNTY4MWZjZCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDVfNSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyODoxNjoiMGQxMGY2NjFmMjk5NDBmNWVkMzlhYTI2MDk2NmRlYjQ3ODQzNjc5ZDJiNmZiMjViM2RlMzcwZjNhYzdjMTk5MTYzOTFmZDI1ZmI1MjdlYmZhNmE0YjRkZjQ1YTE3NTlkOTk2YzRiYjRlYmQxODgyOGM0NGZjNTJkMDE5MTg3MTc0MDUyNWY0N2E0YjBjYzhkYTMyNWVkOGFhNjc2YjBkMGY2MjZlMGE3N2YwNzY5MjE3MGFjYWM4MDgyZjQyZmFhN2RjN2NkMTIzZTczMGUzMWE4Nzk4NTIwNGNhYmNiZTY2NzBkNDNhMmRkMmIyZGRlZjVlMDUzOTJmYzIxM2JjNTA3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJmMzdiOTYyMzc5YTQ3ZDQxNWEzNzZlZWM4OTczMTUwYmNiMzRlZGQ1YWI2NTQwNDFiNjE0MzA1NjBjMjE0NDU4MmJhMTMzYzg2N2Q4NTJkNmI4ZTIzMzIxOTAxMzAyZWNiNDViMDllYzg4YjE1MjcxNzhmYTA0MzI2M2YzMDY3ZDlmZmU5NzMwMzJhOTlmNGNiMDhhZDJjN2UwYTI0NTZjZGQ1N2E3ZGY1NmZlNjA1MzUyN2E1YWViNjdkN2U1NTIwNjNjMWNhOTdiMWJlZmZhN2IzOWU5OTdjYWYyNzg3OGVhMGY2MmNiZWJjOGMyMWRmNGM4ODlhMjAyODUxZTk0OTA4ODQ5MGMyNDliNmU5YWNmMWQ4MDYzZjViZTIzNDM5ODliZjk1YzRkYTAxYTJiZTc4YjRhYjZiMzc4MDE1YmMzNzk1N2Y3Njk0OGI1ZTU4ZTQ0MGMyODQ1M2Q0MGQ3Y2ZkNTdlN2Q2OTA2MDA0NzRhYjVlNzU5NzNiMWVhMGM1ZjFlNDVkMTQxOTBhZmUyZjRlYjZkM2JkZjcxZjFkMmY4YmIxNTZhMWMyOTVkMDRhYWViOWQ2ODlkY2U3OWVkNjJiYzQ0M2UiOiJlMjBjMWU5ODc4NTEyYzM5OTcwZjU4Mzc1ZTE1NDlhNjhiNjRmMzFkIjoiMGFlZmE5NDNiNjk4Yjk2MDllZGY4OThhZDIyNzQ0YWMyOGRjMjM5NDk3Y2VhMzY5Y2JiZDg0ZjY1Yzk1YzBhZDc3NmI1OTQ3NDAxNjRiNTlhNzM5YzZmZjdjMmYwN2M3YzA3N2E4NmQ5NTIzOGZlNTFlMWZjZjMzNTc0YTRhZTA2ODRiNDJhM2Y2YmY2NzdkOTE4MjBjYTg5ODc0NDY3YjJjMjNhZGQ3Nzk2OWM4MDcxNzQzMGQwZWZjMWQzNjk1ODkyY2U4NTVjYjdmNzAxMTYzMGY0ZGYyNmRlZjhkZGYzNmZjMjM5MDVmNTdmYTYyNDNhNDg1Yzc3MGQ1NjgxZmNkIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNV82Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyODoxNjoiMDNmMmYzMzFmNDE0MmQ0ZjI0YjQzYWExMDI3OWE4OTY1MmQ0ZTc1MzcyMjFhMWE3YjJhMjVkZWI1NTFlNWRlOWFjNDk3NDExYzIyN2E5NGU0NWY5MWMyZDFjMTNjYzA0NmNmNGNlMTRlMzJkMDU4NzM0MjEwZDQ0YTg3ZWUxYjczZiI6MTY6IjAzNGYwOTBkNzNiNTU4MDMwMzBjZjAzNjFhNWQ4MDgxYmZiNzlmODUxNTIzZmVhYzBhMjEyNGQwOGQ0MDEzZmYwODQ4Nzc3MWE4NzBkMDQ3OWRjMDY4NmM2MmY3NzE4ZGZlY2YwMjRiMTdjOTI2NzY3ODA1OTE3MTMzOWNjMDA4MzkiOjE2OiIwZDEwZjY2MWYyOTk0MGY1ZWQzOWFhMjYwOTY2ZGViNDc4NDM2NzlkMmI2ZmIyNWIzZGUzNzBmM2FjN2MxOTkxNjM5MWZkMjVmYjUyN2ViZmE2YTRiNGRmNDVhMTc1OWQ5OTZjNGJiNGViZDE4ODI4YzQ0ZmM1MmQwMTkxODcxNzQwNTI1ZjQ3YTRiMGNjOGRhMzI1ZWQ4YWE2NzZiMGQwZjYyNmUwYTc3ZjA3NjkyMTcwYWNhYzgwODJmNDJmYWE3ZGM3Y2QxMjNlNzMwZTMxYTg3OTg1MjA0Y2FiY2JlNjY3MGQ0M2EyZGQyYjJkZGVmNWUwNTM5MmZjMjEzYmM1MDciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImM2MTAzYzMzMGMxZWY3MThjMTQxZTQ3YjhmYTg1OWJlNGQ1Yjk2MjU5ZTdkMTQyMDcwZWNkNDg1ODM5ZGJhNWE4MzY5YzE3YzExMTQwMzVlNTMyZDE5NWM3NGY0NGEwNDc2YTJkM2U4YTRkYTIxMDAxNmNhY2VkMGUzNjdjYjg2NzcxMGE0YjVhYTJkZjJiOGU1ZGFmNWZkYzY0NzgwN2Q0ZDVlYmI2YzU2Yjk3NjNjY2RhZTRkZWEzMzA4ZWIwYWMyYTg5NTAxY2IyMDlkMjYzOWZhNWJmODdjZTc5MDc0N2QzY2IyZDI5NWU4NDU2NGYyZjYzNzgyNGYwYzEzMDI4MTI5YjBhYTRhNDIyZDE2MjI4MiI6IjIzMjkxZTRhMzMwN2U4YmJiNzc2NjIzYWIzNGU0YTVmNGNjOGE4ZGIiOiIwMjgwMmRjY2ZhOGRmYWY1Mjc5YmYwYjRhMjliYTFiMTU3NjExZmFlYWFmNDE5Yjg5MTlkMTU5NDE5MDBjMTMzOWU3ZTkyZTZmYWU1NjJjNTNlNmNjOGU4NDEwNGIxMTBiY2UwM2FkMTg1MjVlM2M0OWEwZWFkYWQ1ZDNmMjhmMjQ0YThlZDg5ZWRiYWZiYjY4NjI3N2NmYThhZTkwOTcxNGQ2YjI4ZjRiZjhlMjkzYWEwNGM0MWVmZTdjMGE4MTI2NmQ1YzA2MWUyNTc1YmUwMzJhYTQ2NDY3NGZmNzE2MjYyMTliZDc0Y2M0NWYwZTdlZDRlM2ZmOTZlZWU3NThlOGYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA1XzYgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjg6MTY6IjBkMTBmNjYxZjI5OTQwZjVlZDM5YWEyNjA5NjZkZWI0Nzg0MzY3OWQyYjZmYjI1YjNkZTM3MGYzYWM3YzE5OTE2MzkxZmQyNWZiNTI3ZWJmYTZhNGI0ZGY0NWExNzU5ZDk5NmM0YmI0ZWJkMTg4MjhjNDRmYzUyZDAxOTE4NzE3NDA1MjVmNDdhNGIwY2M4ZGEzMjVlZDhhYTY3NmIwZDBmNjI2ZTBhNzdmMDc2OTIxNzBhY2FjODA4MmY0MmZhYTdkYzdjZDEyM2U3MzBlMzFhODc5ODUyMDRjYWJjYmU2NjcwZDQzYTJkZDJiMmRkZWY1ZTA1MzkyZmMyMTNiYzUwNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiYzYxMDNjMzMwYzFlZjcxOGMxNDFlNDdiOGZhODU5YmU0ZDViOTYyNTllN2QxNDIwNzBlY2Q0ODU4MzlkYmE1YTgzNjljMTdjMTExNDAzNWU1MzJkMTk1Yzc0ZjQ0YTA0NzZhMmQzZThhNGRhMjEwMDE2Y2FjZWQwZTM2N2NiODY3NzEwYTRiNWFhMmRmMmI4ZTVkYWY1ZmRjNjQ3ODA3ZDRkNWViYjZjNTZiOTc2M2NjZGFlNGRlYTMzMDhlYjBhYzJhODk1MDFjYjIwOWQyNjM5ZmE1YmY4N2NlNzkwNzQ3ZDNjYjJkMjk1ZTg0NTY0ZjJmNjM3ODI0ZjBjMTMwMjgxMjliMGFhNGE0MjJkMTYyMjgyIjoiMjMyOTFlNGEzMzA3ZThiYmI3NzY2MjNhYjM0ZTRhNWY0Y2M4YThkYiI6IjAyODAyZGNjZmE4ZGZhZjUyNzliZjBiNGEyOWJhMWIxNTc2MTFmYWVhYWY0MTliODkxOWQxNTk0MTkwMGMxMzM5ZTdlOTJlNmZhZTU2MmM1M2U2Y2M4ZTg0MTA0YjExMGJjZTAzYWQxODUyNWUzYzQ5YTBlYWRhZDVkM2YyOGYyNDRhOGVkODllZGJhZmJiNjg2Mjc3Y2ZhOGFlOTA5NzE0ZDZiMjhmNGJmOGUyOTNhYTA0YzQxZWZlN2MwYTgxMjY2ZDVjMDYxZTI1NzViZTAzMmFhNDY0Njc0ZmY3MTYyNjIxOWJkNzRjYzQ1ZjBlN2VkNGUzZmY5NmVlZTc1OGU4ZiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDZfMQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjk6MTY6IjA0ZjA1NDhjOTYyNmFiMWViZjEyNDQ5MzQ3NDFkOTlhMDYyMjBlZmEyYTU4NTZhYTBlNzU3MzBiMmVjOTZhZGM4NmJlODk0ZmEyODAzYjUzYTVlODVkMjc2YWNiZDI5YWI4MjNmODBhNzM5MWJiNTRhNTA1MTY3MmZiMDRlZWI1NDMiOjE2OiIwNDgzZTBhZTQ3OTE1NTg3NzQzZmYzNDUzNjJiNTU1ZDM5NjJkOThiYjZmMTVmODQ4YjRjOTJiMTc3MWNhOGVkMTA3ZDhkM2VlNjVlYzQ0NTE3ZGQwZmFhNDgxYTM4N2U5MDJmN2EyZTc0N2MyNjllN2VhNDQ0ODBiYzUzOGI4ZTViIjoxNjoiMTY0Y2EzMWNmZjYwOWYzYTBlNzEwMWIwMzlmMmU0ZmU2ZGQzNzUxOWFiOTg1OThkMTc5ZTE3NDk5NjU5ODA3MWY0N2QzYTA0NTU5MTU4ZDdiZTM3M2NmMWFhNTNmMGFhNmVmMDkwMzllNTY3OGMyYTRjNjM5MDA1MTRjOGM0ZjhhYWVkNWRlMTJhNWYxMGIwOWMzMTFhZjhjMGZmYjViN2EyOTdmMmVmYzYzYjhkNmIwNTEwOTMxZjBiOThlNDhiZjVmYzZlYzRlN2I4ZGIxZmZhZWIwOGMzOGUwMmFkYjhmMDNhNDgyMjljOTllOTY5NDMxZjYxY2I4YzRkYzY5OGQxIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwYTIwYjc3NGFkZGMyZmE1MTI0NWVkN2NiOWRhNjA5ZTUwY2FjNjYzNmE1MjU0M2Y5NzQ1OGVlZDczNDBmOGQ1M2ZmYzY0OTE4Zjk0OTA3OGVlMDNlZjYwZDQyYjVmZWMyNDYwNTBiZDU1MDVjZDhjYjU5N2JhZDNjNGU3MTNiMGVmMzA2NDRlNzZhZGFiYjBkZTAxYTE1NjFlZmIyNTUxNThjNzRmYzgwMWU2ZTkxOWU1ODFiNDZmMGYwZGRkMDhlNGYzNGM3ODEwYjVlZDgzMThmOTFkN2M4YyI6IjViNGVhMmVmNjI5Y2MyMmYzYjUzOGUwMTY5MDRiNDdiMWU0MGJmZDUiOiIwNGMwY2ZhY2VjMDRlNWJhZGJlY2UxNTlhNWExMTAzZjY5YjNmMzJiYTU5M2NiNGNjNGIxYjdhYjQ1NTkxNmE5NmEyN2NkMjY3OGVhMGY0NmJhMzdmN2ZjOWM4NjMyNWYyOTczM2IzODlmMWQ5N2Y0M2U3MjAxYzBmMzQ4ZmM0NWZlNDI4OTIzMzUzNjJlZWUwMThiNWIxNjFmMmY5MzkzMDMxMjI1YzcxMzAxMmE1NzZiYzg4ZTIzMDUyNDg5ODY4ZDkwMTBjYmYwMzNlY2M1NjhlOGJjMTUyYmRjNTlkNTYwZTQxMjkxOTE1ZDI4NTY1MjA4ZTIyYWVlYzllZjg1ZDEiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA2XzEgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjk6MTY6IjE2NGNhMzFjZmY2MDlmM2EwZTcxMDFiMDM5ZjJlNGZlNmRkMzc1MTlhYjk4NTk4ZDE3OWUxNzQ5OTY1OTgwNzFmNDdkM2EwNDU1OTE1OGQ3YmUzNzNjZjFhYTUzZjBhYTZlZjA5MDM5ZTU2NzhjMmE0YzYzOTAwNTE0YzhjNGY4YWFlZDVkZTEyYTVmMTBiMDljMzExYWY4YzBmZmI1YjdhMjk3ZjJlZmM2M2I4ZDZiMDUxMDkzMWYwYjk4ZTQ4YmY1ZmM2ZWM0ZTdiOGRiMWZmYWViMDhjMzhlMDJhZGI4ZjAzYTQ4MjI5Yzk5ZTk2OTQzMWY2MWNiOGM0ZGM2OThkMSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMGEyMGI3NzRhZGRjMmZhNTEyNDVlZDdjYjlkYTYwOWU1MGNhYzY2MzZhNTI1NDNmOTc0NThlZWQ3MzQwZjhkNTNmZmM2NDkxOGY5NDkwNzhlZTAzZWY2MGQ0MmI1ZmVjMjQ2MDUwYmQ1NTA1Y2Q4Y2I1OTdiYWQzYzRlNzEzYjBlZjMwNjQ0ZTc2YWRhYmIwZGUwMWExNTYxZWZiMjU1MTU4Yzc0ZmM4MDFlNmU5MTllNTgxYjQ2ZjBmMGRkZDA4ZTRmMzRjNzgxMGI1ZWQ4MzE4ZjkxZDdjOGMiOiI1YjRlYTJlZjYyOWNjMjJmM2I1MzhlMDE2OTA0YjQ3YjFlNDBiZmQ1IjoiMDRjMGNmYWNlYzA0ZTViYWRiZWNlMTU5YTVhMTEwM2Y2OWIzZjMyYmE1OTNjYjRjYzRiMWI3YWI0NTU5MTZhOTZhMjdjZDI2NzhlYTBmNDZiYTM3ZjdmYzljODYzMjVmMjk3MzNiMzg5ZjFkOTdmNDNlNzIwMWMwZjM0OGZjNDVmZTQyODkyMzM1MzYyZWVlMDE4YjViMTYxZjJmOTM5MzAzMTIyNWM3MTMwMTJhNTc2YmM4OGUyMzA1MjQ4OTg2OGQ5MDEwY2JmMDMzZWNjNTY4ZThiYzE1MmJkYzU5ZDU2MGU0MTI5MTkxNWQyODU2NTIwOGUyMmFlZWM5ZWY4NWQxIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNl8yCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyOToxNjoiMDRmMDU0OGM5NjI2YWIxZWJmMTI0NDkzNDc0MWQ5OWEwNjIyMGVmYTJhNTg1NmFhMGU3NTczMGIyZWM5NmFkYzg2YmU4OTRmYTI4MDNiNTNhNWU4NWQyNzZhY2JkMjlhYjgyM2Y4MGE3MzkxYmI1NGE1MDUxNjcyZmIwNGVlYjU0MyI6MTY6IjA0ODNlMGFlNDc5MTU1ODc3NDNmZjM0NTM2MmI1NTVkMzk2MmQ5OGJiNmYxNWY4NDhiNGM5MmIxNzcxY2E4ZWQxMDdkOGQzZWU2NWVjNDQ1MTdkZDBmYWE0ODFhMzg3ZTkwMmY3YTJlNzQ3YzI2OWU3ZWE0NDQ4MGJjNTM4YjhlNWIiOjE2OiIxNjRjYTMxY2ZmNjA5ZjNhMGU3MTAxYjAzOWYyZTRmZTZkZDM3NTE5YWI5ODU5OGQxNzllMTc0OTk2NTk4MDcxZjQ3ZDNhMDQ1NTkxNThkN2JlMzczY2YxYWE1M2YwYWE2ZWYwOTAzOWU1Njc4YzJhNGM2MzkwMDUxNGM4YzRmOGFhZWQ1ZGUxMmE1ZjEwYjA5YzMxMWFmOGMwZmZiNWI3YTI5N2YyZWZjNjNiOGQ2YjA1MTA5MzFmMGI5OGU0OGJmNWZjNmVjNGU3YjhkYjFmZmFlYjA4YzM4ZTAyYWRiOGYwM2E0ODIyOWM5OWU5Njk0MzFmNjFjYjhjNGRjNjk4ZDEiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjJhYWZmNjYzMWY2MjFjZTYxNTc2MGE5ZWJjZTk0YmIzMzMwNzdhZDg2NDg4Yzg2MWQ0Yjc2ZDI5YzFmNDg3NDZjNjExYWUxZTAzY2VkNDQ0NWQ3Y2ZhMWZlNWY2MmUxYjNmMDg0NTJiZGUzYjZlZjgxOTczYmFmYmI1N2Y5N2JjZWVmODczOTg1Mzk1YjgyNjA1ODlhYTg4Y2I3ZGI1MGFiNDY5MjYyZTU1MWJkY2Q5YTU2ZjI3NWEwYWM0ZmU0ODQ3MDBjMzVmM2RiZjJiNDY5ZWRlODY0NzQxYjg2ZmE1OTE3MmEzNjBiYTk1YTAyZTEzOWJlNTBkZGZiN2NmMGI0MmZhZWFiYmZiYmFhODZhNDQ5NzY5OWM0ZjJkZmQ1YjA4NDA2YWY3ZTE0MTQ0NDI3YzI1M2VjMGVmYTIwZWFmOWE4YmU4Y2Q0OWNlMWYxYmM0ZTkzZTYxOWNmMmFhOGVkNGZiMzliYzg1OTBkMGY3Yjk2NDg4ZjczMTdhYzlhYmY3YmVlNGUzYTBlNzE1IjoiODMxNDZhOWU3ODI3MjJjMjhiMDE0Zjk4YjQyNjdiZGEyYWM5NTA0ZiI6IjBhMjMxNDI1MGNmNTJiNmU0ZTkwOGRlNWIzNTY0NmJjYWEyNDM2MWRhODE2MGZiMGY5MjU3NTkwYWIzYWNlNDJiMGRjM2U3N2FkMmRiN2MyMDNhMjBiZDk1MmZiYjU2YjE1NjcwNDZlY2ZhYTkzM2Q3YjEwMDBjM2RlOWZmMDViN2Q5ODliYTQ2ZmQ0M2JjNGMyZDBhMzk4NmI3ZmZhMTM0NzFkMzdlYjViNDdkNjQ3MDdiZDI5MGNmZDZhOWYzOTNhZDA4ZWMxZTNiZDcxYmI1NzkyNjE1MDM1Y2RhZjJkODkyOWFlZDNiZTA5ODM3OTM3N2U3NzdjZTc5YWFhNDc3MyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDZfMiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyOToxNjoiMTY0Y2EzMWNmZjYwOWYzYTBlNzEwMWIwMzlmMmU0ZmU2ZGQzNzUxOWFiOTg1OThkMTc5ZTE3NDk5NjU5ODA3MWY0N2QzYTA0NTU5MTU4ZDdiZTM3M2NmMWFhNTNmMGFhNmVmMDkwMzllNTY3OGMyYTRjNjM5MDA1MTRjOGM0ZjhhYWVkNWRlMTJhNWYxMGIwOWMzMTFhZjhjMGZmYjViN2EyOTdmMmVmYzYzYjhkNmIwNTEwOTMxZjBiOThlNDhiZjVmYzZlYzRlN2I4ZGIxZmZhZWIwOGMzOGUwMmFkYjhmMDNhNDgyMjljOTllOTY5NDMxZjYxY2I4YzRkYzY5OGQxIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIyYWFmZjY2MzFmNjIxY2U2MTU3NjBhOWViY2U5NGJiMzMzMDc3YWQ4NjQ4OGM4NjFkNGI3NmQyOWMxZjQ4NzQ2YzYxMWFlMWUwM2NlZDQ0NDVkN2NmYTFmZTVmNjJlMWIzZjA4NDUyYmRlM2I2ZWY4MTk3M2JhZmJiNTdmOTdiY2VlZjg3Mzk4NTM5NWI4MjYwNTg5YWE4OGNiN2RiNTBhYjQ2OTI2MmU1NTFiZGNkOWE1NmYyNzVhMGFjNGZlNDg0NzAwYzM1ZjNkYmYyYjQ2OWVkZTg2NDc0MWI4NmZhNTkxNzJhMzYwYmE5NWEwMmUxMzliZTUwZGRmYjdjZjBiNDJmYWVhYmJmYmJhYTg2YTQ0OTc2OTljNGYyZGZkNWIwODQwNmFmN2UxNDE0NDQyN2MyNTNlYzBlZmEyMGVhZjlhOGJlOGNkNDljZTFmMWJjNGU5M2U2MTljZjJhYThlZDRmYjM5YmM4NTkwZDBmN2I5NjQ4OGY3MzE3YWM5YWJmN2JlZTRlM2EwZTcxNSI6IjgzMTQ2YTllNzgyNzIyYzI4YjAxNGY5OGI0MjY3YmRhMmFjOTUwNGYiOiIwYTIzMTQyNTBjZjUyYjZlNGU5MDhkZTViMzU2NDZiY2FhMjQzNjFkYTgxNjBmYjBmOTI1NzU5MGFiM2FjZTQyYjBkYzNlNzdhZDJkYjdjMjAzYTIwYmQ5NTJmYmI1NmIxNTY3MDQ2ZWNmYWE5MzNkN2IxMDAwYzNkZTlmZjA1YjdkOTg5YmE0NmZkNDNiYzRjMmQwYTM5ODZiN2ZmYTEzNDcxZDM3ZWI1YjQ3ZDY0NzA3YmQyOTBjZmQ2YTlmMzkzYWQwOGVjMWUzYmQ3MWJiNTc5MjYxNTAzNWNkYWYyZDg5MjlhZWQzYmUwOTgzNzkzNzdlNzc3Y2U3OWFhYTQ3NzMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA2XzMKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI5OjE2OiIwNGYwNTQ4Yzk2MjZhYjFlYmYxMjQ0OTM0NzQxZDk5YTA2MjIwZWZhMmE1ODU2YWEwZTc1NzMwYjJlYzk2YWRjODZiZTg5NGZhMjgwM2I1M2E1ZTg1ZDI3NmFjYmQyOWFiODIzZjgwYTczOTFiYjU0YTUwNTE2NzJmYjA0ZWViNTQzIjoxNjoiMDQ4M2UwYWU0NzkxNTU4Nzc0M2ZmMzQ1MzYyYjU1NWQzOTYyZDk4YmI2ZjE1Zjg0OGI0YzkyYjE3NzFjYThlZDEwN2Q4ZDNlZTY1ZWM0NDUxN2RkMGZhYTQ4MWEzODdlOTAyZjdhMmU3NDdjMjY5ZTdlYTQ0NDgwYmM1MzhiOGU1YiI6MTY6IjE2NGNhMzFjZmY2MDlmM2EwZTcxMDFiMDM5ZjJlNGZlNmRkMzc1MTlhYjk4NTk4ZDE3OWUxNzQ5OTY1OTgwNzFmNDdkM2EwNDU1OTE1OGQ3YmUzNzNjZjFhYTUzZjBhYTZlZjA5MDM5ZTU2NzhjMmE0YzYzOTAwNTE0YzhjNGY4YWFlZDVkZTEyYTVmMTBiMDljMzExYWY4YzBmZmI1YjdhMjk3ZjJlZmM2M2I4ZDZiMDUxMDkzMWYwYjk4ZTQ4YmY1ZmM2ZWM0ZTdiOGRiMWZmYWViMDhjMzhlMDJhZGI4ZjAzYTQ4MjI5Yzk5ZTk2OTQzMWY2MWNiOGM0ZGM2OThkMSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMGY2MTk1ZDA0YTZlNmZjN2UyYzk2MDBkYmY4NDBjMzllYThkNGQ2MjRmZDUzNTA3MDE2YjBlMjY4NThhNWUwYWVjZDdhZGE1NDNhZTVjMGFiM2E2MjU5OWNiYTBhNTRlNmJmNDQ2ZTI2MmY5ODk5NzhmOWRkZjVlOWE0MSI6ImE4N2I4YWVkMDdkN2I4ZTJkYWYxNGRkY2E0YWM2OGM0ZDBhYWJmZjgiOiIwODZkZjZiNTAwMDk4YzEyMGYyNGZmODQyM2Y3MjdkOWM2MWE1YzkwMDdkM2I2YTMxY2U3Y2Y4ZjNjYmVjMWEyNmJiMjBlMmJkNGEwNDY3OTMyOTllMDNlMzdhMjFiNDAxOTRmYjA0NWY5MGIxOGJmMjBhNDc5OTJjY2Q3OTljZjljMDU5YzI5OWMwNTI2ODU0OTU0YWFkZThhNmFkOWQ5N2VjOTFhMTE0NTM4M2Y0MjQ2OGIyMzFmNGQ3MmYyMzcwNmQ5ODUzYzNmYTQzY2U4YWNlOGJmZTc0ODQ5ODdhMWVjNmExNmM4ZGFmODFmN2M4YmY0Mjc3NDcwN2E5ZGY0NTYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA2XzMgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjk6MTY6IjE2NGNhMzFjZmY2MDlmM2EwZTcxMDFiMDM5ZjJlNGZlNmRkMzc1MTlhYjk4NTk4ZDE3OWUxNzQ5OTY1OTgwNzFmNDdkM2EwNDU1OTE1OGQ3YmUzNzNjZjFhYTUzZjBhYTZlZjA5MDM5ZTU2NzhjMmE0YzYzOTAwNTE0YzhjNGY4YWFlZDVkZTEyYTVmMTBiMDljMzExYWY4YzBmZmI1YjdhMjk3ZjJlZmM2M2I4ZDZiMDUxMDkzMWYwYjk4ZTQ4YmY1ZmM2ZWM0ZTdiOGRiMWZmYWViMDhjMzhlMDJhZGI4ZjAzYTQ4MjI5Yzk5ZTk2OTQzMWY2MWNiOGM0ZGM2OThkMSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMGY2MTk1ZDA0YTZlNmZjN2UyYzk2MDBkYmY4NDBjMzllYThkNGQ2MjRmZDUzNTA3MDE2YjBlMjY4NThhNWUwYWVjZDdhZGE1NDNhZTVjMGFiM2E2MjU5OWNiYTBhNTRlNmJmNDQ2ZTI2MmY5ODk5NzhmOWRkZjVlOWE0MSI6ImE4N2I4YWVkMDdkN2I4ZTJkYWYxNGRkY2E0YWM2OGM0ZDBhYWJmZjgiOiIwODZkZjZiNTAwMDk4YzEyMGYyNGZmODQyM2Y3MjdkOWM2MWE1YzkwMDdkM2I2YTMxY2U3Y2Y4ZjNjYmVjMWEyNmJiMjBlMmJkNGEwNDY3OTMyOTllMDNlMzdhMjFiNDAxOTRmYjA0NWY5MGIxOGJmMjBhNDc5OTJjY2Q3OTljZjljMDU5YzI5OWMwNTI2ODU0OTU0YWFkZThhNmFkOWQ5N2VjOTFhMTE0NTM4M2Y0MjQ2OGIyMzFmNGQ3MmYyMzcwNmQ5ODUzYzNmYTQzY2U4YWNlOGJmZTc0ODQ5ODdhMWVjNmExNmM4ZGFmODFmN2M4YmY0Mjc3NDcwN2E5ZGY0NTYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA2XzQKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI5OjE2OiIwNGYwNTQ4Yzk2MjZhYjFlYmYxMjQ0OTM0NzQxZDk5YTA2MjIwZWZhMmE1ODU2YWEwZTc1NzMwYjJlYzk2YWRjODZiZTg5NGZhMjgwM2I1M2E1ZTg1ZDI3NmFjYmQyOWFiODIzZjgwYTczOTFiYjU0YTUwNTE2NzJmYjA0ZWViNTQzIjoxNjoiMDQ4M2UwYWU0NzkxNTU4Nzc0M2ZmMzQ1MzYyYjU1NWQzOTYyZDk4YmI2ZjE1Zjg0OGI0YzkyYjE3NzFjYThlZDEwN2Q4ZDNlZTY1ZWM0NDUxN2RkMGZhYTQ4MWEzODdlOTAyZjdhMmU3NDdjMjY5ZTdlYTQ0NDgwYmM1MzhiOGU1YiI6MTY6IjE2NGNhMzFjZmY2MDlmM2EwZTcxMDFiMDM5ZjJlNGZlNmRkMzc1MTlhYjk4NTk4ZDE3OWUxNzQ5OTY1OTgwNzFmNDdkM2EwNDU1OTE1OGQ3YmUzNzNjZjFhYTUzZjBhYTZlZjA5MDM5ZTU2NzhjMmE0YzYzOTAwNTE0YzhjNGY4YWFlZDVkZTEyYTVmMTBiMDljMzExYWY4YzBmZmI1YjdhMjk3ZjJlZmM2M2I4ZDZiMDUxMDkzMWYwYjk4ZTQ4YmY1ZmM2ZWM0ZTdiOGRiMWZmYWViMDhjMzhlMDJhZGI4ZjAzYTQ4MjI5Yzk5ZTk2OTQzMWY2MWNiOGM0ZGM2OThkMSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMzM3ZDI1ZmU5ODEwZWJjYTBkZTRkNDY1OGQzY2ViOGUwZmU0YzA2NmFiYTNiY2M0OGIxMDVkM2JmN2UwMjU3ZDQ0ZmVjZWE2NTk2ZjRkMGM1OWEwODQwMjgzMzY3OGY3MDYyMGY5MTM4ZGZlYjdkZWQ5MDVlNGE2ZDVmMDVjNDczZDU1OTM2NjUyZTJhNWRmNDNjMGNmZGE3YmFjYWYzMDg3ZjQ1MjRiMDZjZjQyMTU3ZDAxNTM5NzM5ZjdmZGRlYzlkNTgxMjVkZjMxYTMyZWFiMDZjMTliNzFmMWQ1YmYiOiJhMzc5MzJmOGE3NDk0YTk0MmQ2Zjc2NzQzOGU3MjRkNmQwYzBlZjE4IjoiMGI1YjExYWQ1NDk4NjNmZmE5YzUxYTE0YTExMDZjMmE3MmNjOGI2NDZlNWM3MjYyNTA5Nzg2MTA1YTk4NDc3NjUzNGNhOWI1NGMxY2M2NGJmMmQ1YTQ0ZmQ3ZThhNjlkYjY5OWQ1ZWE1MjA4N2E0NzQ4ZmQyYWJjMWFmZWQxZTVkNmY3Yzg5MDI1NTMwYmRhYTIyMTNkN2UwMzBmYTU1ZGY2ZjM0YmNmMWNlNDZkMmVkZjRlM2FlNGYzYjAxODkxYTA2OGM5ZTNhNDRiYmM0MzEzM2VkYWQ2ZWNiOWYzNTQwMGM0MjUyYTU3NjJkNjU3NDRiOTljYjlmNGM1NTkzMjlmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNl80ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI5OjE2OiIxNjRjYTMxY2ZmNjA5ZjNhMGU3MTAxYjAzOWYyZTRmZTZkZDM3NTE5YWI5ODU5OGQxNzllMTc0OTk2NTk4MDcxZjQ3ZDNhMDQ1NTkxNThkN2JlMzczY2YxYWE1M2YwYWE2ZWYwOTAzOWU1Njc4YzJhNGM2MzkwMDUxNGM4YzRmOGFhZWQ1ZGUxMmE1ZjEwYjA5YzMxMWFmOGMwZmZiNWI3YTI5N2YyZWZjNjNiOGQ2YjA1MTA5MzFmMGI5OGU0OGJmNWZjNmVjNGU3YjhkYjFmZmFlYjA4YzM4ZTAyYWRiOGYwM2E0ODIyOWM5OWU5Njk0MzFmNjFjYjhjNGRjNjk4ZDEiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjMzN2QyNWZlOTgxMGViY2EwZGU0ZDQ2NThkM2NlYjhlMGZlNGMwNjZhYmEzYmNjNDhiMTA1ZDNiZjdlMDI1N2Q0NGZlY2VhNjU5NmY0ZDBjNTlhMDg0MDI4MzM2NzhmNzA2MjBmOTEzOGRmZWI3ZGVkOTA1ZTRhNmQ1ZjA1YzQ3M2Q1NTkzNjY1MmUyYTVkZjQzYzBjZmRhN2JhY2FmMzA4N2Y0NTI0YjA2Y2Y0MjE1N2QwMTUzOTczOWY3ZmRkZWM5ZDU4MTI1ZGYzMWEzMmVhYjA2YzE5YjcxZjFkNWJmIjoiYTM3OTMyZjhhNzQ5NGE5NDJkNmY3Njc0MzhlNzI0ZDZkMGMwZWYxOCI6IjBiNWIxMWFkNTQ5ODYzZmZhOWM1MWExNGExMTA2YzJhNzJjYzhiNjQ2ZTVjNzI2MjUwOTc4NjEwNWE5ODQ3NzY1MzRjYTliNTRjMWNjNjRiZjJkNWE0NGZkN2U4YTY5ZGI2OTlkNWVhNTIwODdhNDc0OGZkMmFiYzFhZmVkMWU1ZDZmN2M4OTAyNTUzMGJkYWEyMjEzZDdlMDMwZmE1NWRmNmYzNGJjZjFjZTQ2ZDJlZGY0ZTNhZTRmM2IwMTg5MWEwNjhjOWUzYTQ0YmJjNDMxMzNlZGFkNmVjYjlmMzU0MDBjNDI1MmE1NzYyZDY1NzQ0Yjk5Y2I5ZjRjNTU5MzI5ZiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDZfNQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjk6MTY6IjA0ZjA1NDhjOTYyNmFiMWViZjEyNDQ5MzQ3NDFkOTlhMDYyMjBlZmEyYTU4NTZhYTBlNzU3MzBiMmVjOTZhZGM4NmJlODk0ZmEyODAzYjUzYTVlODVkMjc2YWNiZDI5YWI4MjNmODBhNzM5MWJiNTRhNTA1MTY3MmZiMDRlZWI1NDMiOjE2OiIwNDgzZTBhZTQ3OTE1NTg3NzQzZmYzNDUzNjJiNTU1ZDM5NjJkOThiYjZmMTVmODQ4YjRjOTJiMTc3MWNhOGVkMTA3ZDhkM2VlNjVlYzQ0NTE3ZGQwZmFhNDgxYTM4N2U5MDJmN2EyZTc0N2MyNjllN2VhNDQ0ODBiYzUzOGI4ZTViIjoxNjoiMTY0Y2EzMWNmZjYwOWYzYTBlNzEwMWIwMzlmMmU0ZmU2ZGQzNzUxOWFiOTg1OThkMTc5ZTE3NDk5NjU5ODA3MWY0N2QzYTA0NTU5MTU4ZDdiZTM3M2NmMWFhNTNmMGFhNmVmMDkwMzllNTY3OGMyYTRjNjM5MDA1MTRjOGM0ZjhhYWVkNWRlMTJhNWYxMGIwOWMzMTFhZjhjMGZmYjViN2EyOTdmMmVmYzYzYjhkNmIwNTEwOTMxZjBiOThlNDhiZjVmYzZlYzRlN2I4ZGIxZmZhZWIwOGMzOGUwMmFkYjhmMDNhNDgyMjljOTllOTY5NDMxZjYxY2I4YzRkYzY5OGQxIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4NGVjNTAyYjA3MmU4Mjg3Nzg5ZDhmOTIzNTgyOWVhM2IxODdhZmQ0ZDRjNzg1NjExYmRhNWY5ZWIzY2I5NjcxN2VmYTcwMDcyMjdmMWMwOGNiY2I5NzJlNjY3MjM1ZTBmYjdkNDMxYTY1NzAzMjZkMmVjY2UzNWFkYjM3M2RjNzUzYjNiZTVmODI5Yjg5MTc1NDkzMTkzZmFiMTZiYWRiNDEzNzFiM2FhYzBhZTY3MDA3NmYyNGJlZjQyMGMxMzVhZGQ3Y2VlOGQzNWZiYzk0NGQ3OWZhZmI5ZTMwN2ExM2IwZjU1NmNiNjU0YTA2Zjk3M2VkMjI2NzIzMzAxOTdlZjVhNzQ4YmY4MjZhNWRiMjM4M2EyNTM2NGI2ODZiOTM3MmJiMjMzOWFlYjFhYzllOTg4OTMyN2QwMTZmMTY3MDc3NmRiMDYyMDFhZGJkY2FmOGE1ZTNiNzRlMTA4YjczIjoiN2I3OTBjMWQ2MmY3Yjg0ZTk0ZGY2YWYyODkxN2NmNTcxMDE4MTEwZSI6IjAyZDcxZmE5YjUzZTQ2NTRmZWZiN2YwODM4NWNmNmIwYWUzYTgxNzk0MmViZjY2YzM1YWM2N2YwYjA2OTk1MmEzY2U5YzdlMWYxYjAyZTQ4MGE5NTAwODM2ZGU1ZDY0Y2RiN2VjZGUwNDU0MmY3YTc5OTg4Nzg3ZTI0YzJiYTA1ZjVmZDQ4MmMwMjNlZDVjMzBlMDQ4MzlkYzQ0YmVkMmEzYTNhNGZlZTAxMTEzYzg5MWE0N2QzMmViODAyNWMyOGNiMDUwYjVjZGI1NzZjNzBmZTc2ZWY1MjM0MDVjMDg0MTdmYWYzNTBiMDM3YTQzYzM3OTMzOWZjYjE4ZDNhMzU2YiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDZfNSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyOToxNjoiMTY0Y2EzMWNmZjYwOWYzYTBlNzEwMWIwMzlmMmU0ZmU2ZGQzNzUxOWFiOTg1OThkMTc5ZTE3NDk5NjU5ODA3MWY0N2QzYTA0NTU5MTU4ZDdiZTM3M2NmMWFhNTNmMGFhNmVmMDkwMzllNTY3OGMyYTRjNjM5MDA1MTRjOGM0ZjhhYWVkNWRlMTJhNWYxMGIwOWMzMTFhZjhjMGZmYjViN2EyOTdmMmVmYzYzYjhkNmIwNTEwOTMxZjBiOThlNDhiZjVmYzZlYzRlN2I4ZGIxZmZhZWIwOGMzOGUwMmFkYjhmMDNhNDgyMjljOTllOTY5NDMxZjYxY2I4YzRkYzY5OGQxIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4NGVjNTAyYjA3MmU4Mjg3Nzg5ZDhmOTIzNTgyOWVhM2IxODdhZmQ0ZDRjNzg1NjExYmRhNWY5ZWIzY2I5NjcxN2VmYTcwMDcyMjdmMWMwOGNiY2I5NzJlNjY3MjM1ZTBmYjdkNDMxYTY1NzAzMjZkMmVjY2UzNWFkYjM3M2RjNzUzYjNiZTVmODI5Yjg5MTc1NDkzMTkzZmFiMTZiYWRiNDEzNzFiM2FhYzBhZTY3MDA3NmYyNGJlZjQyMGMxMzVhZGQ3Y2VlOGQzNWZiYzk0NGQ3OWZhZmI5ZTMwN2ExM2IwZjU1NmNiNjU0YTA2Zjk3M2VkMjI2NzIzMzAxOTdlZjVhNzQ4YmY4MjZhNWRiMjM4M2EyNTM2NGI2ODZiOTM3MmJiMjMzOWFlYjFhYzllOTg4OTMyN2QwMTZmMTY3MDc3NmRiMDYyMDFhZGJkY2FmOGE1ZTNiNzRlMTA4YjczIjoiN2I3OTBjMWQ2MmY3Yjg0ZTk0ZGY2YWYyODkxN2NmNTcxMDE4MTEwZSI6IjAyZDcxZmE5YjUzZTQ2NTRmZWZiN2YwODM4NWNmNmIwYWUzYTgxNzk0MmViZjY2YzM1YWM2N2YwYjA2OTk1MmEzY2U5YzdlMWYxYjAyZTQ4MGE5NTAwODM2ZGU1ZDY0Y2RiN2VjZGUwNDU0MmY3YTc5OTg4Nzg3ZTI0YzJiYTA1ZjVmZDQ4MmMwMjNlZDVjMzBlMDQ4MzlkYzQ0YmVkMmEzYTNhNGZlZTAxMTEzYzg5MWE0N2QzMmViODAyNWMyOGNiMDUwYjVjZGI1NzZjNzBmZTc2ZWY1MjM0MDVjMDg0MTdmYWYzNTBiMDM3YTQzYzM3OTMzOWZjYjE4ZDNhMzU2YiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDZfNgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjk6MTY6IjA0ZjA1NDhjOTYyNmFiMWViZjEyNDQ5MzQ3NDFkOTlhMDYyMjBlZmEyYTU4NTZhYTBlNzU3MzBiMmVjOTZhZGM4NmJlODk0ZmEyODAzYjUzYTVlODVkMjc2YWNiZDI5YWI4MjNmODBhNzM5MWJiNTRhNTA1MTY3MmZiMDRlZWI1NDMiOjE2OiIwNDgzZTBhZTQ3OTE1NTg3NzQzZmYzNDUzNjJiNTU1ZDM5NjJkOThiYjZmMTVmODQ4YjRjOTJiMTc3MWNhOGVkMTA3ZDhkM2VlNjVlYzQ0NTE3ZGQwZmFhNDgxYTM4N2U5MDJmN2EyZTc0N2MyNjllN2VhNDQ0ODBiYzUzOGI4ZTViIjoxNjoiMTY0Y2EzMWNmZjYwOWYzYTBlNzEwMWIwMzlmMmU0ZmU2ZGQzNzUxOWFiOTg1OThkMTc5ZTE3NDk5NjU5ODA3MWY0N2QzYTA0NTU5MTU4ZDdiZTM3M2NmMWFhNTNmMGFhNmVmMDkwMzllNTY3OGMyYTRjNjM5MDA1MTRjOGM0ZjhhYWVkNWRlMTJhNWYxMGIwOWMzMTFhZjhjMGZmYjViN2EyOTdmMmVmYzYzYjhkNmIwNTEwOTMxZjBiOThlNDhiZjVmYzZlYzRlN2I4ZGIxZmZhZWIwOGMzOGUwMmFkYjhmMDNhNDgyMjljOTllOTY5NDMxZjYxY2I4YzRkYzY5OGQxIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI5OTA2ZDg5Zjk3YTlmZGVkZDNjY2Q4MjRkYjY4NzMyNmYzMGYwMGFhMjVhN2ZjYTJhZmNiM2IwZjg2Y2Q0MWU3M2YwZThmZjdkMmQ4M2Y1OWUyOGVkMzFhNWEwZDU1MTUyMzM3NGRlMjJlNGM3ZThmZjU2OGIzODZlZTNkYzQxMTYzZjEwYmY2N2JiMDA2MjYxYzkwODJmOWFmOTBiZjFkOTA0OWE2YjlmYWU3MWM3Zjg0ZmJlNmU1NWYwMjc4OWRlNzc0ZjIzMGYxMTUwMjZhNGI0ZTk2YzU1YjA0YTk1ZGEzYWFjYmIyY2VjZThmODE3NjRhMWYxYzk5NTE1NDExMDg3Y2Y3ZDM0YWVkZWQwOTMyYzE4MyI6ImZiYmUwNTkwMjViNjliODlmYjE0YWUyMjg5ZTdhYWFmZTYwYzBmY2QiOiIwYTQwYTE2ZTJmZTJiMzhkMWRmOTA1NDYxNjdjZjk0NjljOWUzYzM2ODFhMzQ0MmI0YjJjMmY1ODFkZWIzODVjZTk5ZmM2MTg4YmIwMmE4NDFkNTZlNzZkMzAxODkxZTI0NTYwNTUwZmNjMmEyNmI1NWY0Y2NiMjZkODM3ZDM1MGExNTRiY2FjYTgzOTJkOThmYTY3OTU5ZTk3MjdiNzhjYWQwMzI2OWY1Njk2OGZjNTZiNjhiZDY3OTkyNmQ4M2NjOWNiMjE1NTUwNjQ1Y2NkYTMxYzc2MGZmMzU4ODg5NDNkMmQ4YTFkMzUxZTgxZTVkMDdiODYxODJlNzUxMDgxZWYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA2XzYgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjk6MTY6IjE2NGNhMzFjZmY2MDlmM2EwZTcxMDFiMDM5ZjJlNGZlNmRkMzc1MTlhYjk4NTk4ZDE3OWUxNzQ5OTY1OTgwNzFmNDdkM2EwNDU1OTE1OGQ3YmUzNzNjZjFhYTUzZjBhYTZlZjA5MDM5ZTU2NzhjMmE0YzYzOTAwNTE0YzhjNGY4YWFlZDVkZTEyYTVmMTBiMDljMzExYWY4YzBmZmI1YjdhMjk3ZjJlZmM2M2I4ZDZiMDUxMDkzMWYwYjk4ZTQ4YmY1ZmM2ZWM0ZTdiOGRiMWZmYWViMDhjMzhlMDJhZGI4ZjAzYTQ4MjI5Yzk5ZTk2OTQzMWY2MWNiOGM0ZGM2OThkMSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiOTkwNmQ4OWY5N2E5ZmRlZGQzY2NkODI0ZGI2ODczMjZmMzBmMDBhYTI1YTdmY2EyYWZjYjNiMGY4NmNkNDFlNzNmMGU4ZmY3ZDJkODNmNTllMjhlZDMxYTVhMGQ1NTE1MjMzNzRkZTIyZTRjN2U4ZmY1NjhiMzg2ZWUzZGM0MTE2M2YxMGJmNjdiYjAwNjI2MWM5MDgyZjlhZjkwYmYxZDkwNDlhNmI5ZmFlNzFjN2Y4NGZiZTZlNTVmMDI3ODlkZTc3NGYyMzBmMTE1MDI2YTRiNGU5NmM1NWIwNGE5NWRhM2FhY2JiMmNlY2U4ZjgxNzY0YTFmMWM5OTUxNTQxMTA4N2NmN2QzNGFlZGVkMDkzMmMxODMiOiJmYmJlMDU5MDI1YjY5Yjg5ZmIxNGFlMjI4OWU3YWFhZmU2MGMwZmNkIjoiMGE0MGExNmUyZmUyYjM4ZDFkZjkwNTQ2MTY3Y2Y5NDY5YzllM2MzNjgxYTM0NDJiNGIyYzJmNTgxZGViMzg1Y2U5OWZjNjE4OGJiMDJhODQxZDU2ZTc2ZDMwMTg5MWUyNDU2MDU1MGZjYzJhMjZiNTVmNGNjYjI2ZDgzN2QzNTBhMTU0YmNhY2E4MzkyZDk4ZmE2Nzk1OWU5NzI3Yjc4Y2FkMDMyNjlmNTY5NjhmYzU2YjY4YmQ2Nzk5MjZkODNjYzljYjIxNTU1MDY0NWNjZGEzMWM3NjBmZjM1ODg4OTQzZDJkOGExZDM1MWU4MWU1ZDA3Yjg2MTgyZTc1MTA4MWVmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgN18xCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAzMDoxNjoiMDdlZWZiNDI0YjBlM2E0MGU0MjA4ZWU1YWZiMjgwYjIyMzE3MzA4MTE0ZGRlMGI0YjY0ZjczMDE4NGVjNjhkYTZjZTI4NjdhOWY0OGVkNzcyNmQ1ZTI2MTRlZDA0YTU0MTA3MzZjOGM3MTRlZTcwMjQ3NDI5OGM2MjkyYWYwNzUzNSI6MTY6IjA3MDgzMGRiZjk0N2VhYzAyMjhkZTI2MzE0YjU5YjY2OTk0Y2M2MGU4MzYwZTc1ZDM4NzYyOThmOGY4YTdkMTQxZGEwNjRlNWNhMDI2YTk3M2UyOGYyNTQ3MzhjZWU2NjljNzIxYjAzNGNiNWY4ZTI0NGRhZGQ3Y2QxZTE1OWQ1NDciOjE2OiIzN2M5ZGE0YTY2YzhjNDA4YjhkYTI3ZDBjOWQ3OWY4Y2NiMWVhZmMxZDJmZTQ4NzQ2ZDk0MGI3YzRlZjVkZWUxOGFkMTI2NDdjZWZhYTBjNGIzMTg4YjIyMWM1MTUzODY3NTliOTNmMDIwMjRiMjVhYjkyNDJmODM1N2Q4ZjNmZDQ5NjQwZWU1ZTY0M2VhZjZjNjRkZWVmYTcwODk3MjdjOGZmMDM5OTMzMzM5MTVjNmVmMjFiZjU5NzViNmU1MGQxMThiNTEwMDhlYzMzZTlmMDFhMGE1NDVhMTBhODM2YTQzZGRiY2E5ZDhiNWM1ZDM1NDgwMjJkNzA2NGVhMjlhYjMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjllYWQwZTAxOTQ1NjQwNjc0ZWI0MWNhZDQzNWUyMzc0ZWFlZmE4YWQ3MTk3ZDk3OTEzYzQ0OTU3ZDhkODNmNDBkNzZlZTYwZTM5YmY5YzBmOWVhZjMwMjE0MjFhMDc0ZDFhZGU5NjJjNmU5ZDNkYzNiYjE3NGZlNGRmZTY1MmIwOTExNTQ5NWI4ZmQyNzk0MTc0MDIwYTA2MDJiNWNhNTE4NDhjZmM5NmNlNWViNTdmYzBhMmFkYzFkZGEzNmE3Y2M0NTI2NDFhMTQ5MTFiMzdlNDViZmExMWRhYTVjN2VjZGI3NGY2ZDAxMDBkMWQzZTM5ZTc1MjgwMGUyMDMzOTdkZTAyMzMwNzdiOWE4ODg1NTUzN2ZhZTkyN2Y5MjQzODBkNzgwZjk4ZTE4ZGNmZjM5YzVlYTc0MWIxN2Q2ZmRkMTg4NWJjOWQ1ODE0ODJkNzcxY2ViNTYyZDc4YThiZjg4ZjBjNzViMTEzNjNlNWUzNmNkNDc5Y2ViMDU0NWY5ZGE4NDIwM2UwZTZlNTA4Mzc1Y2M5ZTg0NGI4OGI3YWM3YTBhMjAxZWEwZjFiZWU5YTJjNTc3OTIwY2EwMmMwMWI5ZDgzMjBlOTc0YTU2ZjRlZmI1NzYzYjk2MjU1YWJiZjgwMzdiZjE4MDJjZjAxOGY1NjM3OTQ5M2U1NjlhOSI6ImI3ODY3YTU5OTU4Y2I1NDMyOGY4Nzc1ZTY1NDZlYzA2ZDI3ZWFhNTAiOiIxODdmMzkwNzIzYzg5MDI1OTFmMDE1NGJhZTZkNGVjYmZmZTA2N2YwZThiNzk1NDc2ZWE0ZjRkNTFjY2M4MTA1MjBiYjNjYTliY2E3ZDBiMWYyZWE4YTE3ZDg3M2ZhMjc1NzBhY2Q2NDJlMzgwODU2MWNiOWU5NzVjY2ZkODBiMjNkYzU3NzFjZGIzMzA2YTVmMjMxNTlkYWNiZDNhYTJkYjkzZDQ2ZDc2NmUwOWVkMTVkOTAwYWQ4OTdhOGQyNzRkYzI2YjQ3ZTk5NGEyN2U5N2UyMjY4YTc2NjUzM2FlNGI1ZTQyYTJmY2FmNzU1YzFjNDc5NGIyOTRjNjA1NTU4MjMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA3XzEgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMzA6MTY6IjM3YzlkYTRhNjZjOGM0MDhiOGRhMjdkMGM5ZDc5ZjhjY2IxZWFmYzFkMmZlNDg3NDZkOTQwYjdjNGVmNWRlZTE4YWQxMjY0N2NlZmFhMGM0YjMxODhiMjIxYzUxNTM4Njc1OWI5M2YwMjAyNGIyNWFiOTI0MmY4MzU3ZDhmM2ZkNDk2NDBlZTVlNjQzZWFmNmM2NGRlZWZhNzA4OTcyN2M4ZmYwMzk5MzMzMzkxNWM2ZWYyMWJmNTk3NWI2ZTUwZDExOGI1MTAwOGVjMzNlOWYwMWEwYTU0NWExMGE4MzZhNDNkZGJjYTlkOGI1YzVkMzU0ODAyMmQ3MDY0ZWEyOWFiMyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiOWVhZDBlMDE5NDU2NDA2NzRlYjQxY2FkNDM1ZTIzNzRlYWVmYThhZDcxOTdkOTc5MTNjNDQ5NTdkOGQ4M2Y0MGQ3NmVlNjBlMzliZjljMGY5ZWFmMzAyMTQyMWEwNzRkMWFkZTk2MmM2ZTlkM2RjM2JiMTc0ZmU0ZGZlNjUyYjA5MTE1NDk1YjhmZDI3OTQxNzQwMjBhMDYwMmI1Y2E1MTg0OGNmYzk2Y2U1ZWI1N2ZjMGEyYWRjMWRkYTM2YTdjYzQ1MjY0MWExNDkxMWIzN2U0NWJmYTExZGFhNWM3ZWNkYjc0ZjZkMDEwMGQxZDNlMzllNzUyODAwZTIwMzM5N2RlMDIzMzA3N2I5YTg4ODU1NTM3ZmFlOTI3ZjkyNDM4MGQ3ODBmOThlMThkY2ZmMzljNWVhNzQxYjE3ZDZmZGQxODg1YmM5ZDU4MTQ4MmQ3NzFjZWI1NjJkNzhhOGJmODhmMGM3NWIxMTM2M2U1ZTM2Y2Q0NzljZWIwNTQ1ZjlkYTg0MjAzZTBlNmU1MDgzNzVjYzllODQ0Yjg4YjdhYzdhMGEyMDFlYTBmMWJlZTlhMmM1Nzc5MjBjYTAyYzAxYjlkODMyMGU5NzRhNTZmNGVmYjU3NjNiOTYyNTVhYmJmODAzN2JmMTgwMmNmMDE4ZjU2Mzc5NDkzZTU2OWE5IjoiYjc4NjdhNTk5NThjYjU0MzI4Zjg3NzVlNjU0NmVjMDZkMjdlYWE1MCI6IjE4N2YzOTA3MjNjODkwMjU5MWYwMTU0YmFlNmQ0ZWNiZmZlMDY3ZjBlOGI3OTU0NzZlYTRmNGQ1MWNjYzgxMDUyMGJiM2NhOWJjYTdkMGIxZjJlYThhMTdkODczZmEyNzU3MGFjZDY0MmUzODA4NTYxY2I5ZTk3NWNjZmQ4MGIyM2RjNTc3MWNkYjMzMDZhNWYyMzE1OWRhY2JkM2FhMmRiOTNkNDZkNzY2ZTA5ZWQxNWQ5MDBhZDg5N2E4ZDI3NGRjMjZiNDdlOTk0YTI3ZTk3ZTIyNjhhNzY2NTMzYWU0YjVlNDJhMmZjYWY3NTVjMWM0Nzk0YjI5NGM2MDU1NTgyMyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDdfMgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMzA6MTY6IjA3ZWVmYjQyNGIwZTNhNDBlNDIwOGVlNWFmYjI4MGIyMjMxNzMwODExNGRkZTBiNGI2NGY3MzAxODRlYzY4ZGE2Y2UyODY3YTlmNDhlZDc3MjZkNWUyNjE0ZWQwNGE1NDEwNzM2YzhjNzE0ZWU3MDI0NzQyOThjNjI5MmFmMDc1MzUiOjE2OiIwNzA4MzBkYmY5NDdlYWMwMjI4ZGUyNjMxNGI1OWI2Njk5NGNjNjBlODM2MGU3NWQzODc2Mjk4ZjhmOGE3ZDE0MWRhMDY0ZTVjYTAyNmE5NzNlMjhmMjU0NzM4Y2VlNjY5YzcyMWIwMzRjYjVmOGUyNDRkYWRkN2NkMWUxNTlkNTQ3IjoxNjoiMzdjOWRhNGE2NmM4YzQwOGI4ZGEyN2QwYzlkNzlmOGNjYjFlYWZjMWQyZmU0ODc0NmQ5NDBiN2M0ZWY1ZGVlMThhZDEyNjQ3Y2VmYWEwYzRiMzE4OGIyMjFjNTE1Mzg2NzU5YjkzZjAyMDI0YjI1YWI5MjQyZjgzNTdkOGYzZmQ0OTY0MGVlNWU2NDNlYWY2YzY0ZGVlZmE3MDg5NzI3YzhmZjAzOTkzMzMzOTE1YzZlZjIxYmY1OTc1YjZlNTBkMTE4YjUxMDA4ZWMzM2U5ZjAxYTBhNTQ1YTEwYTgzNmE0M2RkYmNhOWQ4YjVjNWQzNTQ4MDIyZDcwNjRlYTI5YWIzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4ZDgwZDJkMDhkYmQxOWMxNTRkZjNmMTQ2NzNhMTRiZDAzNzM1MjMxZjI0ZTg2YmYxNTNkMGU2OWU3NGNiZmY3YjE4MzZlNjY0ZGU4M2Y2ODAxMjQzNzBmYzBmOTZjOWI2NWMwN2EzNjZiNjQ0YzRhYjMiOiIwYzA5NTgyMjY2ZGYwODYzMTA4MjFiYTdlMThkZjY0ZGZlZTZkZTA5IjoiMTBmZDg5NzY4YTYwYTY3Nzg4YWJiNTg1NmE3ODdjODU2MWYzZWRjZjlhODNlODk4ZjdkYzg3YWI4Y2NlNzk0MjliNDNlNTY5MDY5NDFhODg2MTk0ZjEzN2U1OTFmZTdjMzM5NTU1MzYxZmJiZTFmMjRmZWIyZDRiY2RiODA2MDFmMzA5NmJjOTEzMmRlZWE2MGFlMTMwODJmNDRmOWFkNDFjZDYyODkzNmE0ZDUxMTc2ZTQyZmM1OWNiNzZkYjgxNWNlNWFiNGRiOTlhMTA0YWFmZWE2OGY1ZDMzMDMyOWViZjI1OGQ0ZWRlMTYwNjRiZDFkMDAzOTNkNWUxNTcwZWI4IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgN18yICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDMwOjE2OiIzN2M5ZGE0YTY2YzhjNDA4YjhkYTI3ZDBjOWQ3OWY4Y2NiMWVhZmMxZDJmZTQ4NzQ2ZDk0MGI3YzRlZjVkZWUxOGFkMTI2NDdjZWZhYTBjNGIzMTg4YjIyMWM1MTUzODY3NTliOTNmMDIwMjRiMjVhYjkyNDJmODM1N2Q4ZjNmZDQ5NjQwZWU1ZTY0M2VhZjZjNjRkZWVmYTcwODk3MjdjOGZmMDM5OTMzMzM5MTVjNmVmMjFiZjU5NzViNmU1MGQxMThiNTEwMDhlYzMzZTlmMDFhMGE1NDVhMTBhODM2YTQzZGRiY2E5ZDhiNWM1ZDM1NDgwMjJkNzA2NGVhMjlhYjMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjhkODBkMmQwOGRiZDE5YzE1NGRmM2YxNDY3M2ExNGJkMDM3MzUyMzFmMjRlODZiZjE1M2QwZTY5ZTc0Y2JmZjdiMTgzNmU2NjRkZTgzZjY4MDEyNDM3MGZjMGY5NmM5YjY1YzA3YTM2NmI2NDRjNGFiMyI6IjBjMDk1ODIyNjZkZjA4NjMxMDgyMWJhN2UxOGRmNjRkZmVlNmRlMDkiOiIxMGZkODk3NjhhNjBhNjc3ODhhYmI1ODU2YTc4N2M4NTYxZjNlZGNmOWE4M2U4OThmN2RjODdhYjhjY2U3OTQyOWI0M2U1NjkwNjk0MWE4ODYxOTRmMTM3ZTU5MWZlN2MzMzk1NTUzNjFmYmJlMWYyNGZlYjJkNGJjZGI4MDYwMWYzMDk2YmM5MTMyZGVlYTYwYWUxMzA4MmY0NGY5YWQ0MWNkNjI4OTM2YTRkNTExNzZlNDJmYzU5Y2I3NmRiODE1Y2U1YWI0ZGI5OWExMDRhYWZlYTY4ZjVkMzMwMzI5ZWJmMjU4ZDRlZGUxNjA2NGJkMWQwMDM5M2Q1ZTE1NzBlYjgiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA3XzMKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDMwOjE2OiIwN2VlZmI0MjRiMGUzYTQwZTQyMDhlZTVhZmIyODBiMjIzMTczMDgxMTRkZGUwYjRiNjRmNzMwMTg0ZWM2OGRhNmNlMjg2N2E5ZjQ4ZWQ3NzI2ZDVlMjYxNGVkMDRhNTQxMDczNmM4YzcxNGVlNzAyNDc0Mjk4YzYyOTJhZjA3NTM1IjoxNjoiMDcwODMwZGJmOTQ3ZWFjMDIyOGRlMjYzMTRiNTliNjY5OTRjYzYwZTgzNjBlNzVkMzg3NjI5OGY4ZjhhN2QxNDFkYTA2NGU1Y2EwMjZhOTczZTI4ZjI1NDczOGNlZTY2OWM3MjFiMDM0Y2I1ZjhlMjQ0ZGFkZDdjZDFlMTU5ZDU0NyI6MTY6IjM3YzlkYTRhNjZjOGM0MDhiOGRhMjdkMGM5ZDc5ZjhjY2IxZWFmYzFkMmZlNDg3NDZkOTQwYjdjNGVmNWRlZTE4YWQxMjY0N2NlZmFhMGM0YjMxODhiMjIxYzUxNTM4Njc1OWI5M2YwMjAyNGIyNWFiOTI0MmY4MzU3ZDhmM2ZkNDk2NDBlZTVlNjQzZWFmNmM2NGRlZWZhNzA4OTcyN2M4ZmYwMzk5MzMzMzkxNWM2ZWYyMWJmNTk3NWI2ZTUwZDExOGI1MTAwOGVjMzNlOWYwMWEwYTU0NWExMGE4MzZhNDNkZGJjYTlkOGI1YzVkMzU0ODAyMmQ3MDY0ZWEyOWFiMyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiODA4NDA1Y2RmYzFhNThiOWJiMDM5N2M3MjA3MjJhODFmZmZiNzYyNzhmMzM1OTE3ZWY5YzQ3MzgxNGIzZTAxNmJhMjk3M2NkMjc2NWY4ZjNmODJkNmNjMzhhYTdmODU1MTgyN2ZlOGQxZTM4ODRiN2U2MWM5NDY4M2I4ZjgyZjE4NDNiZGFlMjI1N2VlZWM5ODEyYWQ0YzJjZjI4M2MzNGUwYjBhZTBmZTNjYjk5MGNmODhmMmVmOSI6IjI4MDM5ZGNmZTEwNmQzYjgyOTY2MTEyNThjNGE1NjY1MWM5ZTkyZGQiOiIyYjMxZmRlOTk4NTliOTc3YWEwOTU4NmQ4ZTI3NDY2MmIyNWEyYTY0MDY0MGI0NTdmNTk0MDUxY2IxZTdmN2E5MTE4NjU0NTUyNDI5MjZjZjg4ZmU4MGRmYTNhNzViYTk2ODk4NDRhMTFlNjM0YTgyYjA3NWFmYmQ2OWMxMmEwZGY5ZDI1Zjg0YWQ0OTQ1ZGYzZGM4ZmU5MGMzY2VmZGYyNmU5NWYwNTM0MzA0YjViZGJhMjBkM2U1NjQwYTJlYmZiODk4YWFjMzVhZTQwZjI2ZmNlNTU2M2MyZjlmMjRmMzA0MmFmNzZmM2M3MDcyZDY4N2JiZmI5NTlhODg0NjBhZjEiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA3XzMgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMzA6MTY6IjM3YzlkYTRhNjZjOGM0MDhiOGRhMjdkMGM5ZDc5ZjhjY2IxZWFmYzFkMmZlNDg3NDZkOTQwYjdjNGVmNWRlZTE4YWQxMjY0N2NlZmFhMGM0YjMxODhiMjIxYzUxNTM4Njc1OWI5M2YwMjAyNGIyNWFiOTI0MmY4MzU3ZDhmM2ZkNDk2NDBlZTVlNjQzZWFmNmM2NGRlZWZhNzA4OTcyN2M4ZmYwMzk5MzMzMzkxNWM2ZWYyMWJmNTk3NWI2ZTUwZDExOGI1MTAwOGVjMzNlOWYwMWEwYTU0NWExMGE4MzZhNDNkZGJjYTlkOGI1YzVkMzU0ODAyMmQ3MDY0ZWEyOWFiMyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiODA4NDA1Y2RmYzFhNThiOWJiMDM5N2M3MjA3MjJhODFmZmZiNzYyNzhmMzM1OTE3ZWY5YzQ3MzgxNGIzZTAxNmJhMjk3M2NkMjc2NWY4ZjNmODJkNmNjMzhhYTdmODU1MTgyN2ZlOGQxZTM4ODRiN2U2MWM5NDY4M2I4ZjgyZjE4NDNiZGFlMjI1N2VlZWM5ODEyYWQ0YzJjZjI4M2MzNGUwYjBhZTBmZTNjYjk5MGNmODhmMmVmOSI6IjI4MDM5ZGNmZTEwNmQzYjgyOTY2MTEyNThjNGE1NjY1MWM5ZTkyZGQiOiIyYjMxZmRlOTk4NTliOTc3YWEwOTU4NmQ4ZTI3NDY2MmIyNWEyYTY0MDY0MGI0NTdmNTk0MDUxY2IxZTdmN2E5MTE4NjU0NTUyNDI5MjZjZjg4ZmU4MGRmYTNhNzViYTk2ODk4NDRhMTFlNjM0YTgyYjA3NWFmYmQ2OWMxMmEwZGY5ZDI1Zjg0YWQ0OTQ1ZGYzZGM4ZmU5MGMzY2VmZGYyNmU5NWYwNTM0MzA0YjViZGJhMjBkM2U1NjQwYTJlYmZiODk4YWFjMzVhZTQwZjI2ZmNlNTU2M2MyZjlmMjRmMzA0MmFmNzZmM2M3MDcyZDY4N2JiZmI5NTlhODg0NjBhZjEiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA3XzQKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDMwOjE2OiIwN2VlZmI0MjRiMGUzYTQwZTQyMDhlZTVhZmIyODBiMjIzMTczMDgxMTRkZGUwYjRiNjRmNzMwMTg0ZWM2OGRhNmNlMjg2N2E5ZjQ4ZWQ3NzI2ZDVlMjYxNGVkMDRhNTQxMDczNmM4YzcxNGVlNzAyNDc0Mjk4YzYyOTJhZjA3NTM1IjoxNjoiMDcwODMwZGJmOTQ3ZWFjMDIyOGRlMjYzMTRiNTliNjY5OTRjYzYwZTgzNjBlNzVkMzg3NjI5OGY4ZjhhN2QxNDFkYTA2NGU1Y2EwMjZhOTczZTI4ZjI1NDczOGNlZTY2OWM3MjFiMDM0Y2I1ZjhlMjQ0ZGFkZDdjZDFlMTU5ZDU0NyI6MTY6IjM3YzlkYTRhNjZjOGM0MDhiOGRhMjdkMGM5ZDc5ZjhjY2IxZWFmYzFkMmZlNDg3NDZkOTQwYjdjNGVmNWRlZTE4YWQxMjY0N2NlZmFhMGM0YjMxODhiMjIxYzUxNTM4Njc1OWI5M2YwMjAyNGIyNWFiOTI0MmY4MzU3ZDhmM2ZkNDk2NDBlZTVlNjQzZWFmNmM2NGRlZWZhNzA4OTcyN2M4ZmYwMzk5MzMzMzkxNWM2ZWYyMWJmNTk3NWI2ZTUwZDExOGI1MTAwOGVjMzNlOWYwMWEwYTU0NWExMGE4MzZhNDNkZGJjYTlkOGI1YzVkMzU0ODAyMmQ3MDY0ZWEyOWFiMyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZjMzN2I5YmFkOTM3ZGUyMmExYTA1MmRmZjExMTM0YThjZTI2OTc2MjAyOTgxOTM5YjkxZTA3MTVhZTVlNjA5NjQ5ZGExYWRmY2VmM2Y0Y2NhNTliMjM4MzYwZTdkMWU0OTZjN2JmNGIyMDRiNWFjZmY5YmJkNjE2NmExZDg3YTM2ZWYyMjQ3MzczNzUxMDM5ZjhhODAwYjgzOTk4MDdiM2E4NWY0NDg5MzQ5N2MwZDA1ZmI3MDE3YjgyMjI4MTUyZGU2ZjI1ZTYxMTZkY2M3NTAzYzc4NmM4NzVjMjhmM2FhNjA3ZTk0YWIwZjE5ODYzYWIxYjUwNzM3NzBiMGNkNWY1MzNhY2RlMzBjNmZiOTUzY2YzZGE2ODAyNjRlMzBmYzExYmZmOWExOWJmZmFiNDc3OWI2MjIzYzNmYjNmZTBmNzFhYmFkZTRlYjdjMDljNDFlMjRjMjJkMjNmYTE0OGU2YTE3M2ZlYjYzOTg0ZDFiYzZlZTNhMDJkOTE1Yjc1MmNlYWY5MmEzMDE1ZWNlYjM4Y2E1ODZjNjgwMWIzN2MzNGNlZmIyY2ZmMjVlYTIzYzA4NjYyZGNhYjI2YTdhOTNhMjg1ZDA1ZDMwNDRjIjoiYTc3ODIxZWJiYmVmMjQ2MjhlNGUxMmUxZDBlYTk2ZGUzOThmN2IwZiI6IjMyYzdjYTM4ZmYyNjk0OWExNTAwMGM0YmEwNGIyYjEzYjM1YTM4MTBlNTY4MTg0ZDdlY2FiYWExNjZiN2ZmYWJkZGYyYjZjZjRiYTA3MTI0OTIzNzkwZjJlNWIxYTViZTA0MGFlYTM2ZmUxMzJlYzEzMGUxZjEwNTY3OTgyZDE3YWMzZTg5YjhkMjZjMzA5NDAzNGU3NjJkMmUwMzEyNjRmMDExNzBiZWVjYjNkMTQzOWUwNTg0NmYyNTQ1ODM2N2E3ZDljMDIwNjA0NDQ2NzI2NzFlNjRlODc3ODY0NTU5Y2ExOWIyMDc0ZDU4OGEyODFiNTgwNGQyMzc3MmZiYmUxOSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDdfNCAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAzMDoxNjoiMzdjOWRhNGE2NmM4YzQwOGI4ZGEyN2QwYzlkNzlmOGNjYjFlYWZjMWQyZmU0ODc0NmQ5NDBiN2M0ZWY1ZGVlMThhZDEyNjQ3Y2VmYWEwYzRiMzE4OGIyMjFjNTE1Mzg2NzU5YjkzZjAyMDI0YjI1YWI5MjQyZjgzNTdkOGYzZmQ0OTY0MGVlNWU2NDNlYWY2YzY0ZGVlZmE3MDg5NzI3YzhmZjAzOTkzMzMzOTE1YzZlZjIxYmY1OTc1YjZlNTBkMTE4YjUxMDA4ZWMzM2U5ZjAxYTBhNTQ1YTEwYTgzNmE0M2RkYmNhOWQ4YjVjNWQzNTQ4MDIyZDcwNjRlYTI5YWIzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJmMzM3YjliYWQ5MzdkZTIyYTFhMDUyZGZmMTExMzRhOGNlMjY5NzYyMDI5ODE5MzliOTFlMDcxNWFlNWU2MDk2NDlkYTFhZGZjZWYzZjRjY2E1OWIyMzgzNjBlN2QxZTQ5NmM3YmY0YjIwNGI1YWNmZjliYmQ2MTY2YTFkODdhMzZlZjIyNDczNzM3NTEwMzlmOGE4MDBiODM5OTgwN2IzYTg1ZjQ0ODkzNDk3YzBkMDVmYjcwMTdiODIyMjgxNTJkZTZmMjVlNjExNmRjYzc1MDNjNzg2Yzg3NWMyOGYzYWE2MDdlOTRhYjBmMTk4NjNhYjFiNTA3Mzc3MGIwY2Q1ZjUzM2FjZGUzMGM2ZmI5NTNjZjNkYTY4MDI2NGUzMGZjMTFiZmY5YTE5YmZmYWI0Nzc5YjYyMjNjM2ZiM2ZlMGY3MWFiYWRlNGViN2MwOWM0MWUyNGMyMmQyM2ZhMTQ4ZTZhMTczZmViNjM5ODRkMWJjNmVlM2EwMmQ5MTViNzUyY2VhZjkyYTMwMTVlY2ViMzhjYTU4NmM2ODAxYjM3YzM0Y2VmYjJjZmYyNWVhMjNjMDg2NjJkY2FiMjZhN2E5M2EyODVkMDVkMzA0NGMiOiJhNzc4MjFlYmJiZWYyNDYyOGU0ZTEyZTFkMGVhOTZkZTM5OGY3YjBmIjoiMzJjN2NhMzhmZjI2OTQ5YTE1MDAwYzRiYTA0YjJiMTNiMzVhMzgxMGU1NjgxODRkN2VjYWJhYTE2NmI3ZmZhYmRkZjJiNmNmNGJhMDcxMjQ5MjM3OTBmMmU1YjFhNWJlMDQwYWVhMzZmZTEzMmVjMTMwZTFmMTA1Njc5ODJkMTdhYzNlODliOGQyNmMzMDk0MDM0ZTc2MmQyZTAzMTI2NGYwMTE3MGJlZWNiM2QxNDM5ZTA1ODQ2ZjI1NDU4MzY3YTdkOWMwMjA2MDQ0NDY3MjY3MWU2NGU4Nzc4NjQ1NTljYTE5YjIwNzRkNTg4YTI4MWI1ODA0ZDIzNzcyZmJiZTE5IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgN181Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAzMDoxNjoiMDdlZWZiNDI0YjBlM2E0MGU0MjA4ZWU1YWZiMjgwYjIyMzE3MzA4MTE0ZGRlMGI0YjY0ZjczMDE4NGVjNjhkYTZjZTI4NjdhOWY0OGVkNzcyNmQ1ZTI2MTRlZDA0YTU0MTA3MzZjOGM3MTRlZTcwMjQ3NDI5OGM2MjkyYWYwNzUzNSI6MTY6IjA3MDgzMGRiZjk0N2VhYzAyMjhkZTI2MzE0YjU5YjY2OTk0Y2M2MGU4MzYwZTc1ZDM4NzYyOThmOGY4YTdkMTQxZGEwNjRlNWNhMDI2YTk3M2UyOGYyNTQ3MzhjZWU2NjljNzIxYjAzNGNiNWY4ZTI0NGRhZGQ3Y2QxZTE1OWQ1NDciOjE2OiIzN2M5ZGE0YTY2YzhjNDA4YjhkYTI3ZDBjOWQ3OWY4Y2NiMWVhZmMxZDJmZTQ4NzQ2ZDk0MGI3YzRlZjVkZWUxOGFkMTI2NDdjZWZhYTBjNGIzMTg4YjIyMWM1MTUzODY3NTliOTNmMDIwMjRiMjVhYjkyNDJmODM1N2Q4ZjNmZDQ5NjQwZWU1ZTY0M2VhZjZjNjRkZWVmYTcwODk3MjdjOGZmMDM5OTMzMzM5MTVjNmVmMjFiZjU5NzViNmU1MGQxMThiNTEwMDhlYzMzZTlmMDFhMGE1NDVhMTBhODM2YTQzZGRiY2E5ZDhiNWM1ZDM1NDgwMjJkNzA2NGVhMjlhYjMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjQ1MDEzY2ViYWZkOTYwYjI1NTQ3NmE4ZTI1OThiOWFhMzJlZmJlNmRjMWYzNGY0YTQ5OGQ4Y2Y1YTJiNDU0OGQwOGM1NWQ1Zjk1ZjdiY2M5NjE5MTYzMDU2ZjJkNThiNTJmYTAzMiI6IjlkNWFkOGViNDUyMTM0YjY1ZGMzYTk4YjZhNzNiNWY3NDE2MDljZDYiOiIwN2ViNjUxZDc1ZjFiNTJiYzI2M2IyZTE5ODMzNmU5OWZiZWJjNGYzMzIwNDlhOTIyYTEwODE1NjA3ZWUyZDk4OWRiM2E0NDk1YjdkY2NkMzhmNThhMjExZmI3ZTE5MzE3MWEzZDg5MTEzMjQzN2ViY2E0NGYzMThiMjgwNTA5ZTUyYjVmYTk4ZmNjZTgyMDVkOTY5N2M4ZWU0YjdmZjU5ZDRjNTljNzkwMzhhMTk3MGJkMmEwZDQ1MWVjZGM1ZWYxMWQ5OTc5YzlkMzVmOGM3MGE2MTYzNzE3NjA3ODkwZDU4NmE3YzZkYzAxYzc5Zjg2YThmMjhlODUyMzVmOGMyZjEiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA3XzUgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMzA6MTY6IjM3YzlkYTRhNjZjOGM0MDhiOGRhMjdkMGM5ZDc5ZjhjY2IxZWFmYzFkMmZlNDg3NDZkOTQwYjdjNGVmNWRlZTE4YWQxMjY0N2NlZmFhMGM0YjMxODhiMjIxYzUxNTM4Njc1OWI5M2YwMjAyNGIyNWFiOTI0MmY4MzU3ZDhmM2ZkNDk2NDBlZTVlNjQzZWFmNmM2NGRlZWZhNzA4OTcyN2M4ZmYwMzk5MzMzMzkxNWM2ZWYyMWJmNTk3NWI2ZTUwZDExOGI1MTAwOGVjMzNlOWYwMWEwYTU0NWExMGE4MzZhNDNkZGJjYTlkOGI1YzVkMzU0ODAyMmQ3MDY0ZWEyOWFiMyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiNDUwMTNjZWJhZmQ5NjBiMjU1NDc2YThlMjU5OGI5YWEzMmVmYmU2ZGMxZjM0ZjRhNDk4ZDhjZjVhMmI0NTQ4ZDA4YzU1ZDVmOTVmN2JjYzk2MTkxNjMwNTZmMmQ1OGI1MmZhMDMyIjoiOWQ1YWQ4ZWI0NTIxMzRiNjVkYzNhOThiNmE3M2I1Zjc0MTYwOWNkNiI6IjA3ZWI2NTFkNzVmMWI1MmJjMjYzYjJlMTk4MzM2ZTk5ZmJlYmM0ZjMzMjA0OWE5MjJhMTA4MTU2MDdlZTJkOTg5ZGIzYTQ0OTViN2RjY2QzOGY1OGEyMTFmYjdlMTkzMTcxYTNkODkxMTMyNDM3ZWJjYTQ0ZjMxOGIyODA1MDllNTJiNWZhOThmY2NlODIwNWQ5Njk3YzhlZTRiN2ZmNTlkNGM1OWM3OTAzOGExOTcwYmQyYTBkNDUxZWNkYzVlZjExZDk5NzljOWQzNWY4YzcwYTYxNjM3MTc2MDc4OTBkNTg2YTdjNmRjMDFjNzlmODZhOGYyOGU4NTIzNWY4YzJmMSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDdfNgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMzA6MTY6IjA3ZWVmYjQyNGIwZTNhNDBlNDIwOGVlNWFmYjI4MGIyMjMxNzMwODExNGRkZTBiNGI2NGY3MzAxODRlYzY4ZGE2Y2UyODY3YTlmNDhlZDc3MjZkNWUyNjE0ZWQwNGE1NDEwNzM2YzhjNzE0ZWU3MDI0NzQyOThjNjI5MmFmMDc1MzUiOjE2OiIwNzA4MzBkYmY5NDdlYWMwMjI4ZGUyNjMxNGI1OWI2Njk5NGNjNjBlODM2MGU3NWQzODc2Mjk4ZjhmOGE3ZDE0MWRhMDY0ZTVjYTAyNmE5NzNlMjhmMjU0NzM4Y2VlNjY5YzcyMWIwMzRjYjVmOGUyNDRkYWRkN2NkMWUxNTlkNTQ3IjoxNjoiMzdjOWRhNGE2NmM4YzQwOGI4ZGEyN2QwYzlkNzlmOGNjYjFlYWZjMWQyZmU0ODc0NmQ5NDBiN2M0ZWY1ZGVlMThhZDEyNjQ3Y2VmYWEwYzRiMzE4OGIyMjFjNTE1Mzg2NzU5YjkzZjAyMDI0YjI1YWI5MjQyZjgzNTdkOGYzZmQ0OTY0MGVlNWU2NDNlYWY2YzY0ZGVlZmE3MDg5NzI3YzhmZjAzOTkzMzMzOTE1YzZlZjIxYmY1OTc1YjZlNTBkMTE4YjUxMDA4ZWMzM2U5ZjAxYTBhNTQ1YTEwYTgzNmE0M2RkYmNhOWQ4YjVjNWQzNTQ4MDIyZDcwNjRlYTI5YWIzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIyMzU4MDk3MDg2Yzg5OTMyM2U3NWQ5YzkwZDBjMDlmMTJkOWQ1NGVkZmJkZjcwYTljMmViNWEwNGQ4ZjM2YjliMmJkZjJhYWJlMGE1YmRhMTk2ODkzN2Y5ZDZlYmQzYjZiMjU3ZWZiMzEzNmQ0MTMxZjlhY2I1OWI4NWUyNjAyYzJhM2ZjZGM4MzU0OTRhMWY0ZTVlYzE4YjIyNmM4MDIzMmIzNmE3NWE0NWZkZjA5YTdlYTllOThlZmJkZTE0NTBkMTE5NGJmMTJlMTVhNGM1ZjllYjVjMGJjZTUyNjllMGMzYjI4Y2ZhYjY1NWQ4MWE2MWEyMGI0YmUyZjU0NDU5YmIyNWEwZGI5NGM1MjIxOGJlMTA5YTc0MjZkZTgzMDE0NDI0Nzg5YWFhOTBlNTA1NmU2MzJhNjk4MTE1ZTI4MmMxYTU2NDEwZjI2YzIwNzJmMTkzNDgxYTlkY2Q4ODA1NzIwMDVlNjRmNDA4MmVjZiI6IjNmMmVmYzU5NTg4MGE3ZDQ3ZmNmM2NiYTA0OTgzZWE1NGM0YjczZmIiOiIxOGRhM2NkY2ZlNzliZmI3N2ZkOWMzMmYzNzdhZDM5OTE0NmYwYThlODEwNjIwMjMzMjcxYTZlM2VkMzI0ODkwM2Y1Y2RjOTJkYzc5YjU1ZDNlMTE2MTVhYTA1NmE3OTU4NTM3OTJhMzk5OGMzNDljYTVjNDU3ZThjYTdkMjlkNzk2YWEyNGY4MzQ5MTcwOWJlZmNmYjE1MTBlYTUxM2M5MjgyOWEzZjAwYjEwNGY2NTU2MzRmMzIwNzUyZTEzMGVjMGNjZjY3NTRmZjg5M2RiMzAyOTMyYmIwMjVlYjYwZTg3ODIyNTk4ZmM2MTllMGU5ODE3MzdhOWE0YzQxNTJkMzMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA3XzYgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMzA6MTY6IjM3YzlkYTRhNjZjOGM0MDhiOGRhMjdkMGM5ZDc5ZjhjY2IxZWFmYzFkMmZlNDg3NDZkOTQwYjdjNGVmNWRlZTE4YWQxMjY0N2NlZmFhMGM0YjMxODhiMjIxYzUxNTM4Njc1OWI5M2YwMjAyNGIyNWFiOTI0MmY4MzU3ZDhmM2ZkNDk2NDBlZTVlNjQzZWFmNmM2NGRlZWZhNzA4OTcyN2M4ZmYwMzk5MzMzMzkxNWM2ZWYyMWJmNTk3NWI2ZTUwZDExOGI1MTAwOGVjMzNlOWYwMWEwYTU0NWExMGE4MzZhNDNkZGJjYTlkOGI1YzVkMzU0ODAyMmQ3MDY0ZWEyOWFiMyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMjM1ODA5NzA4NmM4OTkzMjNlNzVkOWM5MGQwYzA5ZjEyZDlkNTRlZGZiZGY3MGE5YzJlYjVhMDRkOGYzNmI5YjJiZGYyYWFiZTBhNWJkYTE5Njg5MzdmOWQ2ZWJkM2I2YjI1N2VmYjMxMzZkNDEzMWY5YWNiNTliODVlMjYwMmMyYTNmY2RjODM1NDk0YTFmNGU1ZWMxOGIyMjZjODAyMzJiMzZhNzVhNDVmZGYwOWE3ZWE5ZTk4ZWZiZGUxNDUwZDExOTRiZjEyZTE1YTRjNWY5ZWI1YzBiY2U1MjY5ZTBjM2IyOGNmYWI2NTVkODFhNjFhMjBiNGJlMmY1NDQ1OWJiMjVhMGRiOTRjNTIyMThiZTEwOWE3NDI2ZGU4MzAxNDQyNDc4OWFhYTkwZTUwNTZlNjMyYTY5ODExNWUyODJjMWE1NjQxMGYyNmMyMDcyZjE5MzQ4MWE5ZGNkODgwNTcyMDA1ZTY0ZjQwODJlY2YiOiIzZjJlZmM1OTU4ODBhN2Q0N2ZjZjNjYmEwNDk4M2VhNTRjNGI3M2ZiIjoiMThkYTNjZGNmZTc5YmZiNzdmZDljMzJmMzc3YWQzOTkxNDZmMGE4ZTgxMDYyMDIzMzI3MWE2ZTNlZDMyNDg5MDNmNWNkYzkyZGM3OWI1NWQzZTExNjE1YWEwNTZhNzk1ODUzNzkyYTM5OThjMzQ5Y2E1YzQ1N2U4Y2E3ZDI5ZDc5NmFhMjRmODM0OTE3MDliZWZjZmIxNTEwZWE1MTNjOTI4MjlhM2YwMGIxMDRmNjU1NjM0ZjMyMDc1MmUxMzBlYzBjY2Y2NzU0ZmY4OTNkYjMwMjkzMmJiMDI1ZWI2MGU4NzgyMjU5OGZjNjE5ZTBlOTgxNzM3YTlhNGM0MTUyZDMzIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOF8xCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAzMToxNjoiMDhkYWQ3ZjExMzYzZmFhNjIzZDVkNmQ1ZThhMzE5MzI4ZDgyMTkwZDcxMjdkMjg0NmM0MzliMGFiNzI2MTliMGE0M2E5NTMyMGU0ZWMzNGZjM2E5Y2VhODc2NDIyMzA1YmQ3NmM1YmE3YmU5ZTJmNDEwYzgwNjA2NDVhMWQyOWVkYiI6MTY6IjA4NDdlNzMyMzc2ZmM3OTAwZjg5OGVhODJlYjJiMGZjNDE4NTY1ZmRhZTYyZjdkOWVjNGNlMjIxN2I5Nzk5MGRkMjcyZGIxNTdmOTlmNjNjMGRjYmI5ZmJhY2RiZDRjNGRhZGI2ZGY2Nzc1NjM1OGNhNDE3NDgyNWI0OGY0OTcwNmQiOjE2OiI0OTUzNzBhMWZiMTg1NDNjMTZkMzYzMWUzMTYzMjU1ZGY2MmJlNmVlZTg5MGQ1ZjI1NTA5ZTRmNzc4YThlYTZmYmJiY2RmODVkZmY2NGUwZDk3MjAwM2FiMzY4MWZiYmE2ZGQ0MWZkNTQxODI5YjJlNTgyZGU5ZjJhNGE0ZTBhMmQwOTAwYmVmNDc1M2RiM2NlZTBlZTA2YzdkZmFlOGIxZDUzYjU5NTMyMThmOWNjZWVhNjk1YjA4NjY4ZWRlYWFkY2VkOTQ2M2IxZDc5MGQ1ZWJmMjdlOTExNWI0NmNhZDRkOWEyYjhlZmFiMDU2MWIwODEwMzQ0NzM5YWRhMDczM2YiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjgxMzMyZjRiZTYyOTQ4NDE1ZWExZDg5OTc5MmVlYWNmNmM2ZTFkYjFkYThiZTEzYjVjZWE0MWRiMmZlZDQ2NzA5MmUxZmYzOTg5MTRjNzE0MjU5Nzc1ZjU5NWY4NTQ3ZjczNTY5MmE1NzVlNjkyM2FmNzhmMjJjNjk5N2RkYjkwZmI2ZjcyZDdiYjBkZDU3NDRhMzFkZWNkM2RjMzY4NTg0OTgzNmVkMzRhZWM1OTYzMDRhZDExODQzYzRmODg0ODlmMjA5NzM1ZjVmYjdmZGFmN2NlYzhhZGRjNTgxODE2OGY4ODBhY2JmNDkwZDUxMDA1YjdhOGU4NGU0M2U1NDI4Nzk3NzU3MWRkOTllZWE0YjE2MWViMmRmMWY1MTA4ZjEyYTQxNDJhODMzMjJlZGIwNWE3NTQ4N2EzNDM1YzlhNzhjZTUzZWQ5M2JjNTUwODU3ZDdhOWZiIjoiMWQ2NTQ5MWQ3OWM4NjRiMzczMDA5YmU2ZjZmMjQ2N2JhYzRjNzhmYSI6IjAyNjJhYzI1NGJmYTc3ZjNjMWFjYTIyYzUxNzlmOGYwNDA0MjJiM2M1YmFmZDQwYThmMjFjZjBmYTVhNjY3Y2NkNTk5M2Q0MmRiYWZiNDA5YzUyMGUyNWZjZTJiMWVlMWU3MTY1NzdmMWVmYTE3ZjNkYTI4MDUyZjQwZjA0MTliMjMxMDZkNzg0NWFhZjAxMTI1YjY5OGU3YTRkZmU5MmQzOTY3YmIwMGM0ZDBkMzViYTM1NTJhYjlhOGIzZWVmMDdjN2ZlY2RiYzU0MjRhYzRkYjFlMjBjYjM3ZDBiMjc0NDc2OTk0MGVhOTA3ZTE3ZmJiY2E2NzNiMjA1MjIzODBjNSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDhfMSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAzMToxNjoiNDk1MzcwYTFmYjE4NTQzYzE2ZDM2MzFlMzE2MzI1NWRmNjJiZTZlZWU4OTBkNWYyNTUwOWU0Zjc3OGE4ZWE2ZmJiYmNkZjg1ZGZmNjRlMGQ5NzIwMDNhYjM2ODFmYmJhNmRkNDFmZDU0MTgyOWIyZTU4MmRlOWYyYTRhNGUwYTJkMDkwMGJlZjQ3NTNkYjNjZWUwZWUwNmM3ZGZhZThiMWQ1M2I1OTUzMjE4ZjljY2VlYTY5NWIwODY2OGVkZWFhZGNlZDk0NjNiMWQ3OTBkNWViZjI3ZTkxMTViNDZjYWQ0ZDlhMmI4ZWZhYjA1NjFiMDgxMDM0NDczOWFkYTA3MzNmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4MTMzMmY0YmU2Mjk0ODQxNWVhMWQ4OTk3OTJlZWFjZjZjNmUxZGIxZGE4YmUxM2I1Y2VhNDFkYjJmZWQ0NjcwOTJlMWZmMzk4OTE0YzcxNDI1OTc3NWY1OTVmODU0N2Y3MzU2OTJhNTc1ZTY5MjNhZjc4ZjIyYzY5OTdkZGI5MGZiNmY3MmQ3YmIwZGQ1NzQ0YTMxZGVjZDNkYzM2ODU4NDk4MzZlZDM0YWVjNTk2MzA0YWQxMTg0M2M0Zjg4NDg5ZjIwOTczNWY1ZmI3ZmRhZjdjZWM4YWRkYzU4MTgxNjhmODgwYWNiZjQ5MGQ1MTAwNWI3YThlODRlNDNlNTQyODc5Nzc1NzFkZDk5ZWVhNGIxNjFlYjJkZjFmNTEwOGYxMmE0MTQyYTgzMzIyZWRiMDVhNzU0ODdhMzQzNWM5YTc4Y2U1M2VkOTNiYzU1MDg1N2Q3YTlmYiI6IjFkNjU0OTFkNzljODY0YjM3MzAwOWJlNmY2ZjI0NjdiYWM0Yzc4ZmEiOiIwMjYyYWMyNTRiZmE3N2YzYzFhY2EyMmM1MTc5ZjhmMDQwNDIyYjNjNWJhZmQ0MGE4ZjIxY2YwZmE1YTY2N2NjZDU5OTNkNDJkYmFmYjQwOWM1MjBlMjVmY2UyYjFlZTFlNzE2NTc3ZjFlZmExN2YzZGEyODA1MmY0MGYwNDE5YjIzMTA2ZDc4NDVhYWYwMTEyNWI2OThlN2E0ZGZlOTJkMzk2N2JiMDBjNGQwZDM1YmEzNTUyYWI5YThiM2VlZjA3YzdmZWNkYmM1NDI0YWM0ZGIxZTIwY2IzN2QwYjI3NDQ3Njk5NDBlYTkwN2UxN2ZiYmNhNjczYjIwNTIyMzgwYzUiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA4XzIKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDMxOjE2OiIwOGRhZDdmMTEzNjNmYWE2MjNkNWQ2ZDVlOGEzMTkzMjhkODIxOTBkNzEyN2QyODQ2YzQzOWIwYWI3MjYxOWIwYTQzYTk1MzIwZTRlYzM0ZmMzYTljZWE4NzY0MjIzMDViZDc2YzViYTdiZTllMmY0MTBjODA2MDY0NWExZDI5ZWRiIjoxNjoiMDg0N2U3MzIzNzZmYzc5MDBmODk4ZWE4MmViMmIwZmM0MTg1NjVmZGFlNjJmN2Q5ZWM0Y2UyMjE3Yjk3OTkwZGQyNzJkYjE1N2Y5OWY2M2MwZGNiYjlmYmFjZGJkNGM0ZGFkYjZkZjY3NzU2MzU4Y2E0MTc0ODI1YjQ4ZjQ5NzA2ZCI6MTY6IjQ5NTM3MGExZmIxODU0M2MxNmQzNjMxZTMxNjMyNTVkZjYyYmU2ZWVlODkwZDVmMjU1MDllNGY3NzhhOGVhNmZiYmJjZGY4NWRmZjY0ZTBkOTcyMDAzYWIzNjgxZmJiYTZkZDQxZmQ1NDE4MjliMmU1ODJkZTlmMmE0YTRlMGEyZDA5MDBiZWY0NzUzZGIzY2VlMGVlMDZjN2RmYWU4YjFkNTNiNTk1MzIxOGY5Y2NlZWE2OTViMDg2NjhlZGVhYWRjZWQ5NDYzYjFkNzkwZDVlYmYyN2U5MTE1YjQ2Y2FkNGQ5YTJiOGVmYWIwNTYxYjA4MTAzNDQ3MzlhZGEwNzMzZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZTJmOTZlYWYwZTA1ZTdiYTMyNmVjY2EwYmE3ZmQyZjdjMDIzNTZmM2NlZGU5ZDBmYWFiZjRmY2M4ZTYwYTk3M2U1NTk1ZmQ5ZWEwOCI6IjQzNWMwOThhYTk5MDllYjIzNzdmMTI0OGIwOTFiNjg5ODdmZjE4MzgiOiIyNzA3YjlhZDUxMTVjNThjOTRlOTMyZThlYzBhMjgwZjU2MzM5ZTQ0YTFiNThkNGRkY2ZmMmYzMTJlNWYzNGRjZmUzOWU4OWM2YTk0ZGNlZTg2ZGJiZGFlNWI3OWJhNGUwODE5YTllN2JmZDlkOTgyZTdlZTZjODZlZTY4Mzk2ZThiM2ExNGM5YzhmMzRiMTc4ZWI3NDFmOWQzZjEyMTEwOWJmNWM4MTcyZmFkYTJlNzY4ZjllYTE0MzMwMzJjMDA0YThhYTA3ZWI5OTAwMDBhNDhkYzk0YzhiYWM4YWFiZTJiMDliMWFhNDZjMGEyYWEwZTEyZjYzZmJiYTc3NWJhN2UiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA4XzIgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMzE6MTY6IjQ5NTM3MGExZmIxODU0M2MxNmQzNjMxZTMxNjMyNTVkZjYyYmU2ZWVlODkwZDVmMjU1MDllNGY3NzhhOGVhNmZiYmJjZGY4NWRmZjY0ZTBkOTcyMDAzYWIzNjgxZmJiYTZkZDQxZmQ1NDE4MjliMmU1ODJkZTlmMmE0YTRlMGEyZDA5MDBiZWY0NzUzZGIzY2VlMGVlMDZjN2RmYWU4YjFkNTNiNTk1MzIxOGY5Y2NlZWE2OTViMDg2NjhlZGVhYWRjZWQ5NDYzYjFkNzkwZDVlYmYyN2U5MTE1YjQ2Y2FkNGQ5YTJiOGVmYWIwNTYxYjA4MTAzNDQ3MzlhZGEwNzMzZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZTJmOTZlYWYwZTA1ZTdiYTMyNmVjY2EwYmE3ZmQyZjdjMDIzNTZmM2NlZGU5ZDBmYWFiZjRmY2M4ZTYwYTk3M2U1NTk1ZmQ5ZWEwOCI6IjQzNWMwOThhYTk5MDllYjIzNzdmMTI0OGIwOTFiNjg5ODdmZjE4MzgiOiIyNzA3YjlhZDUxMTVjNThjOTRlOTMyZThlYzBhMjgwZjU2MzM5ZTQ0YTFiNThkNGRkY2ZmMmYzMTJlNWYzNGRjZmUzOWU4OWM2YTk0ZGNlZTg2ZGJiZGFlNWI3OWJhNGUwODE5YTllN2JmZDlkOTgyZTdlZTZjODZlZTY4Mzk2ZThiM2ExNGM5YzhmMzRiMTc4ZWI3NDFmOWQzZjEyMTEwOWJmNWM4MTcyZmFkYTJlNzY4ZjllYTE0MzMwMzJjMDA0YThhYTA3ZWI5OTAwMDBhNDhkYzk0YzhiYWM4YWFiZTJiMDliMWFhNDZjMGEyYWEwZTEyZjYzZmJiYTc3NWJhN2UiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA4XzMKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDMxOjE2OiIwOGRhZDdmMTEzNjNmYWE2MjNkNWQ2ZDVlOGEzMTkzMjhkODIxOTBkNzEyN2QyODQ2YzQzOWIwYWI3MjYxOWIwYTQzYTk1MzIwZTRlYzM0ZmMzYTljZWE4NzY0MjIzMDViZDc2YzViYTdiZTllMmY0MTBjODA2MDY0NWExZDI5ZWRiIjoxNjoiMDg0N2U3MzIzNzZmYzc5MDBmODk4ZWE4MmViMmIwZmM0MTg1NjVmZGFlNjJmN2Q5ZWM0Y2UyMjE3Yjk3OTkwZGQyNzJkYjE1N2Y5OWY2M2MwZGNiYjlmYmFjZGJkNGM0ZGFkYjZkZjY3NzU2MzU4Y2E0MTc0ODI1YjQ4ZjQ5NzA2ZCI6MTY6IjQ5NTM3MGExZmIxODU0M2MxNmQzNjMxZTMxNjMyNTVkZjYyYmU2ZWVlODkwZDVmMjU1MDllNGY3NzhhOGVhNmZiYmJjZGY4NWRmZjY0ZTBkOTcyMDAzYWIzNjgxZmJiYTZkZDQxZmQ1NDE4MjliMmU1ODJkZTlmMmE0YTRlMGEyZDA5MDBiZWY0NzUzZGIzY2VlMGVlMDZjN2RmYWU4YjFkNTNiNTk1MzIxOGY5Y2NlZWE2OTViMDg2NjhlZGVhYWRjZWQ5NDYzYjFkNzkwZDVlYmYyN2U5MTE1YjQ2Y2FkNGQ5YTJiOGVmYWIwNTYxYjA4MTAzNDQ3MzlhZGEwNzMzZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZTM1YzZlZDk4ZjY0YTZkNWE2NDhmY2FiOGFkYjE2MzMxZGIzMmU1ZDE1Yzc0YTQwZWRmOTRjM2RjNGE0ZGU3OTJkMTkwODg5ZjIwZjFlMjRlZDEyMDU0YTZiMjg3OThmY2I0MmQxYzU0ODc2OWI3MzRjOTYzNzMxNDIwOTJhZWQyNzc2MDNmNDczOGRmNGRjMTQ0NjU4NmQwZWM2NGRhNGZiNjA1MzZkYjJhZTE3ZmM3ZTNjMDRiYmZiYmJkOTA3YmYxMTdjMDg2MzZmYTE2Zjk1ZjUxYTYyMTY5MzRkM2UzNGY4NTAzMGYxN2JiYmM1YmE2OTE0NDA1OGFmZjA4MWUwYjE5Y2YwM2MxNzE5NWM1ZTg4OGJhNThmNmZlMGEwMmU1YzNiZGE5NzE5YTciOiJjNmViYmU3NmRmMGM0YWVhMzJjNDc0MTc1YjJmMTM2ODYyZDA0NTI5IjoiMmFkMjA1MDlkNzhjZjI2ZDFiNmM0MDYxNDYwODZlNGIwYzkxYTkxYzJiZDE2NGM4N2I5NjZiOGZhYTQyYWEwY2E0NDYwMjIzMjNiYTRiMWExYjg5NzA2ZDdmNGMzYmU1N2Q3YjY5NzAyZDE2OGFiNTk1NWVlMjkwMzU2YjhjNGEyOWVkNDY3ZDU0N2VjMjNjYmFkZjI4NmNjYjU4NjNjNjY3OWRhNDY3ZmM5MzI0YTE1MWM3ZWM1NWFhYzZkYjQwODRmODI3MjY4MjVjZmUxYWE0MjFiYzY0MDQ5ZmI0MmYyMzE0OGY5YzI1YjJkYzMwMDQzN2MzOGQ0MjhhYTc1Zjk2IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOF8zICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDMxOjE2OiI0OTUzNzBhMWZiMTg1NDNjMTZkMzYzMWUzMTYzMjU1ZGY2MmJlNmVlZTg5MGQ1ZjI1NTA5ZTRmNzc4YThlYTZmYmJiY2RmODVkZmY2NGUwZDk3MjAwM2FiMzY4MWZiYmE2ZGQ0MWZkNTQxODI5YjJlNTgyZGU5ZjJhNGE0ZTBhMmQwOTAwYmVmNDc1M2RiM2NlZTBlZTA2YzdkZmFlOGIxZDUzYjU5NTMyMThmOWNjZWVhNjk1YjA4NjY4ZWRlYWFkY2VkOTQ2M2IxZDc5MGQ1ZWJmMjdlOTExNWI0NmNhZDRkOWEyYjhlZmFiMDU2MWIwODEwMzQ0NzM5YWRhMDczM2YiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImUzNWM2ZWQ5OGY2NGE2ZDVhNjQ4ZmNhYjhhZGIxNjMzMWRiMzJlNWQxNWM3NGE0MGVkZjk0YzNkYzRhNGRlNzkyZDE5MDg4OWYyMGYxZTI0ZWQxMjA1NGE2YjI4Nzk4ZmNiNDJkMWM1NDg3NjliNzM0Yzk2MzczMTQyMDkyYWVkMjc3NjAzZjQ3MzhkZjRkYzE0NDY1ODZkMGVjNjRkYTRmYjYwNTM2ZGIyYWUxN2ZjN2UzYzA0YmJmYmJiZDkwN2JmMTE3YzA4NjM2ZmExNmY5NWY1MWE2MjE2OTM0ZDNlMzRmODUwMzBmMTdiYmJjNWJhNjkxNDQwNThhZmYwODFlMGIxOWNmMDNjMTcxOTVjNWU4ODhiYTU4ZjZmZTBhMDJlNWMzYmRhOTcxOWE3IjoiYzZlYmJlNzZkZjBjNGFlYTMyYzQ3NDE3NWIyZjEzNjg2MmQwNDUyOSI6IjJhZDIwNTA5ZDc4Y2YyNmQxYjZjNDA2MTQ2MDg2ZTRiMGM5MWE5MWMyYmQxNjRjODdiOTY2YjhmYWE0MmFhMGNhNDQ2MDIyMzIzYmE0YjFhMWI4OTcwNmQ3ZjRjM2JlNTdkN2I2OTcwMmQxNjhhYjU5NTVlZTI5MDM1NmI4YzRhMjllZDQ2N2Q1NDdlYzIzY2JhZGYyODZjY2I1ODYzYzY2NzlkYTQ2N2ZjOTMyNGExNTFjN2VjNTVhYWM2ZGI0MDg0ZjgyNzI2ODI1Y2ZlMWFhNDIxYmM2NDA0OWZiNDJmMjMxNDhmOWMyNWIyZGMzMDA0MzdjMzhkNDI4YWE3NWY5NiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDhfNAorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMzE6MTY6IjA4ZGFkN2YxMTM2M2ZhYTYyM2Q1ZDZkNWU4YTMxOTMyOGQ4MjE5MGQ3MTI3ZDI4NDZjNDM5YjBhYjcyNjE5YjBhNDNhOTUzMjBlNGVjMzRmYzNhOWNlYTg3NjQyMjMwNWJkNzZjNWJhN2JlOWUyZjQxMGM4MDYwNjQ1YTFkMjllZGIiOjE2OiIwODQ3ZTczMjM3NmZjNzkwMGY4OThlYTgyZWIyYjBmYzQxODU2NWZkYWU2MmY3ZDllYzRjZTIyMTdiOTc5OTBkZDI3MmRiMTU3Zjk5ZjYzYzBkY2JiOWZiYWNkYmQ0YzRkYWRiNmRmNjc3NTYzNThjYTQxNzQ4MjViNDhmNDk3MDZkIjoxNjoiNDk1MzcwYTFmYjE4NTQzYzE2ZDM2MzFlMzE2MzI1NWRmNjJiZTZlZWU4OTBkNWYyNTUwOWU0Zjc3OGE4ZWE2ZmJiYmNkZjg1ZGZmNjRlMGQ5NzIwMDNhYjM2ODFmYmJhNmRkNDFmZDU0MTgyOWIyZTU4MmRlOWYyYTRhNGUwYTJkMDkwMGJlZjQ3NTNkYjNjZWUwZWUwNmM3ZGZhZThiMWQ1M2I1OTUzMjE4ZjljY2VlYTY5NWIwODY2OGVkZWFhZGNlZDk0NjNiMWQ3OTBkNWViZjI3ZTkxMTViNDZjYWQ0ZDlhMmI4ZWZhYjA1NjFiMDgxMDM0NDczOWFkYTA3MzNmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJkYmM1Zjc1MGE3YTE0YmUyYjkzZTgzOGQxOGQxNGE4Njk1ZTUyZThhZGQ5YzBhYzczM2I4ZjU2ZDI3NDdlNTI5YTBjY2E1MzJkZDQ5YjkwMmFlZmVkNTE0NDQ3ZjllODFkMTYxOTVjMjg1Mzg2OGNiOWIzMGY3ZDBkNDk1YzY5ZDAxYjVjNWQ1MGIyNzA0NWRiMzg2NmMyMzI0YTQ0YTExMGIxNzE3NzQ2ZGU0NTdkMWM4YzQ1YzNjZDJhOTI5NzBjM2Q1OTYzMjA1NWQ0Yzk4YTQxZDZlOTllMmEzZGRkNWY3Zjk5NzlhYjNjZDE4ZjM3NTA1ZDI1MTQxZGUyYTFiZmYxN2IzYTdkY2U5NDE5ZWNjMzg1Y2YxMWQ3Mjg0MGYxOTk1M2ZkMDUwOTI1MWY2Y2FmZGUyODkzZDBlNzVjNzgxYmE3YTUwMTJjYTQwMWE0ZmE5OWUwNGIzYzMyNDlmOTI2ZDVhZmU4MmNjODdkYWIyMmMzYzFiMTA1ZGU0OGUzNGFjZTljOTEyNGU1OTU5N2FjN2ViZjgiOiIwMjFmZGNjNmViYjVlMTliMWNiMTZlOWM2N2YyNzY4MTY1N2ZlMjBhIjoiMWUyNGU2ZTU4NjI4ZTUxNzUwNDRhOWViNmQ4MzdkNDhhZjEyNjBiMDUyMGU4NzMyN2RlNzg5N2VlNGQ1YjlmMGRmMGJlM2UwOWVkNGRlYThjMTQ1NGZmMzQyM2JiMDhlMTc5MzI0NWE5ZGY4YmY2YWIzOTY4YzhlZGRjM2I1MzI4NTcxYzc3ZjA5MWNjNTc4NTc2OTEyZGZlYmQxNjRiOWRlNTQ1NGZlMGJlMWMxZjYzODViMzI4MzYwY2U2N2VjN2EwNWY2ZTMwZWI0NWMxN2M0OGFjNzAwNDFkMmNhYjY3ZjBhMmFlN2FhZmRjYzhkMjQ1ZWEzNDQyYTYzMDBjY2M3IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOF80ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDMxOjE2OiI0OTUzNzBhMWZiMTg1NDNjMTZkMzYzMWUzMTYzMjU1ZGY2MmJlNmVlZTg5MGQ1ZjI1NTA5ZTRmNzc4YThlYTZmYmJiY2RmODVkZmY2NGUwZDk3MjAwM2FiMzY4MWZiYmE2ZGQ0MWZkNTQxODI5YjJlNTgyZGU5ZjJhNGE0ZTBhMmQwOTAwYmVmNDc1M2RiM2NlZTBlZTA2YzdkZmFlOGIxZDUzYjU5NTMyMThmOWNjZWVhNjk1YjA4NjY4ZWRlYWFkY2VkOTQ2M2IxZDc5MGQ1ZWJmMjdlOTExNWI0NmNhZDRkOWEyYjhlZmFiMDU2MWIwODEwMzQ0NzM5YWRhMDczM2YiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImRiYzVmNzUwYTdhMTRiZTJiOTNlODM4ZDE4ZDE0YTg2OTVlNTJlOGFkZDljMGFjNzMzYjhmNTZkMjc0N2U1MjlhMGNjYTUzMmRkNDliOTAyYWVmZWQ1MTQ0NDdmOWU4MWQxNjE5NWMyODUzODY4Y2I5YjMwZjdkMGQ0OTVjNjlkMDFiNWM1ZDUwYjI3MDQ1ZGIzODY2YzIzMjRhNDRhMTEwYjE3MTc3NDZkZTQ1N2QxYzhjNDVjM2NkMmE5Mjk3MGMzZDU5NjMyMDU1ZDRjOThhNDFkNmU5OWUyYTNkZGQ1ZjdmOTk3OWFiM2NkMThmMzc1MDVkMjUxNDFkZTJhMWJmZjE3YjNhN2RjZTk0MTllY2MzODVjZjExZDcyODQwZjE5OTUzZmQwNTA5MjUxZjZjYWZkZTI4OTNkMGU3NWM3ODFiYTdhNTAxMmNhNDAxYTRmYTk5ZTA0YjNjMzI0OWY5MjZkNWFmZTgyY2M4N2RhYjIyYzNjMWIxMDVkZTQ4ZTM0YWNlOWM5MTI0ZTU5NTk3YWM3ZWJmOCI6IjAyMWZkY2M2ZWJiNWUxOWIxY2IxNmU5YzY3ZjI3NjgxNjU3ZmUyMGEiOiIxZTI0ZTZlNTg2MjhlNTE3NTA0NGE5ZWI2ZDgzN2Q0OGFmMTI2MGIwNTIwZTg3MzI3ZGU3ODk3ZWU0ZDViOWYwZGYwYmUzZTA5ZWQ0ZGVhOGMxNDU0ZmYzNDIzYmIwOGUxNzkzMjQ1YTlkZjhiZjZhYjM5NjhjOGVkZGMzYjUzMjg1NzFjNzdmMDkxY2M1Nzg1NzY5MTJkZmViZDE2NGI5ZGU1NDU0ZmUwYmUxYzFmNjM4NWIzMjgzNjBjZTY3ZWM3YTA1ZjZlMzBlYjQ1YzE3YzQ4YWM3MDA0MWQyY2FiNjdmMGEyYWU3YWFmZGNjOGQyNDVlYTM0NDJhNjMwMGNjYzciOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA4XzUKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDMxOjE2OiIwOGRhZDdmMTEzNjNmYWE2MjNkNWQ2ZDVlOGEzMTkzMjhkODIxOTBkNzEyN2QyODQ2YzQzOWIwYWI3MjYxOWIwYTQzYTk1MzIwZTRlYzM0ZmMzYTljZWE4NzY0MjIzMDViZDc2YzViYTdiZTllMmY0MTBjODA2MDY0NWExZDI5ZWRiIjoxNjoiMDg0N2U3MzIzNzZmYzc5MDBmODk4ZWE4MmViMmIwZmM0MTg1NjVmZGFlNjJmN2Q5ZWM0Y2UyMjE3Yjk3OTkwZGQyNzJkYjE1N2Y5OWY2M2MwZGNiYjlmYmFjZGJkNGM0ZGFkYjZkZjY3NzU2MzU4Y2E0MTc0ODI1YjQ4ZjQ5NzA2ZCI6MTY6IjQ5NTM3MGExZmIxODU0M2MxNmQzNjMxZTMxNjMyNTVkZjYyYmU2ZWVlODkwZDVmMjU1MDllNGY3NzhhOGVhNmZiYmJjZGY4NWRmZjY0ZTBkOTcyMDAzYWIzNjgxZmJiYTZkZDQxZmQ1NDE4MjliMmU1ODJkZTlmMmE0YTRlMGEyZDA5MDBiZWY0NzUzZGIzY2VlMGVlMDZjN2RmYWU4YjFkNTNiNTk1MzIxOGY5Y2NlZWE2OTViMDg2NjhlZGVhYWRjZWQ5NDYzYjFkNzkwZDVlYmYyN2U5MTE1YjQ2Y2FkNGQ5YTJiOGVmYWIwNTYxYjA4MTAzNDQ3MzlhZGEwNzMzZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMDRkYzI1MWJlNzJlODhlNTcyMzQ4NWI2MzgzYTYzN2UyZmVmZTA3NjYwYzUxOWE1NjBiOGJjMThiZGVkYjg2ZWFlMjM2NGVhNTNiYTlkY2E2ZWIzZDJlN2Q2YjgwNmFmNDJiM2U4N2YyOTFiNGE4ODgxZDViZjU3MmNjOWE4NWUxOWM4NmFjYjI4ZjA5OGY5ZGEwMzgzYzU2NmQzYzBmNThjZmQ4ZjM5NWRjZjYwMmU1Y2Q0MGU4YzcxODNmNzE0OTk2ZTIyOTdlZiI6ImM1NThkNzE2N2NiYjQ1MDhhZGEwNDI5NzFlNzFiMTM3N2VlYTQyNjkiOiIzMzM0MWJhMzU3NmExMzBhNTBlMmE1Y2Y4Njc5MjI0Mzg4ZDU2OTNmNWFjY2MyMzVhYzk1YWRkNjhlNWViMWVlYzMxNjY2ZDBjYTdhMWNkYTZmNzBhMWFhNzYyYzA1NzUyYTUxOTUwY2RiOGFmM2M1Mzc5ZjE4Y2ZlNmI1YmM1NWE0NjQ4MjI2YTE1ZTkxMmVmMTlhZDc3YWRlZWE5MTFkNjdjZmVmZDY5YmE0M2ZhNDExOTEzNWZmNjQyMTE3YmE5ODVhN2UwMTAwMzI1ZTk1MTlmMWNhNmE5MjE2YmRhMDU1YjU3ODUwMTUyOTExMjVlOTBkY2QwN2EyY2E5NjczZWUiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA4XzUgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMzE6MTY6IjQ5NTM3MGExZmIxODU0M2MxNmQzNjMxZTMxNjMyNTVkZjYyYmU2ZWVlODkwZDVmMjU1MDllNGY3NzhhOGVhNmZiYmJjZGY4NWRmZjY0ZTBkOTcyMDAzYWIzNjgxZmJiYTZkZDQxZmQ1NDE4MjliMmU1ODJkZTlmMmE0YTRlMGEyZDA5MDBiZWY0NzUzZGIzY2VlMGVlMDZjN2RmYWU4YjFkNTNiNTk1MzIxOGY5Y2NlZWE2OTViMDg2NjhlZGVhYWRjZWQ5NDYzYjFkNzkwZDVlYmYyN2U5MTE1YjQ2Y2FkNGQ5YTJiOGVmYWIwNTYxYjA4MTAzNDQ3MzlhZGEwNzMzZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMDRkYzI1MWJlNzJlODhlNTcyMzQ4NWI2MzgzYTYzN2UyZmVmZTA3NjYwYzUxOWE1NjBiOGJjMThiZGVkYjg2ZWFlMjM2NGVhNTNiYTlkY2E2ZWIzZDJlN2Q2YjgwNmFmNDJiM2U4N2YyOTFiNGE4ODgxZDViZjU3MmNjOWE4NWUxOWM4NmFjYjI4ZjA5OGY5ZGEwMzgzYzU2NmQzYzBmNThjZmQ4ZjM5NWRjZjYwMmU1Y2Q0MGU4YzcxODNmNzE0OTk2ZTIyOTdlZiI6ImM1NThkNzE2N2NiYjQ1MDhhZGEwNDI5NzFlNzFiMTM3N2VlYTQyNjkiOiIzMzM0MWJhMzU3NmExMzBhNTBlMmE1Y2Y4Njc5MjI0Mzg4ZDU2OTNmNWFjY2MyMzVhYzk1YWRkNjhlNWViMWVlYzMxNjY2ZDBjYTdhMWNkYTZmNzBhMWFhNzYyYzA1NzUyYTUxOTUwY2RiOGFmM2M1Mzc5ZjE4Y2ZlNmI1YmM1NWE0NjQ4MjI2YTE1ZTkxMmVmMTlhZDc3YWRlZWE5MTFkNjdjZmVmZDY5YmE0M2ZhNDExOTEzNWZmNjQyMTE3YmE5ODVhN2UwMTAwMzI1ZTk1MTlmMWNhNmE5MjE2YmRhMDU1YjU3ODUwMTUyOTExMjVlOTBkY2QwN2EyY2E5NjczZWUiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA4XzYKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDMxOjE2OiIwOGRhZDdmMTEzNjNmYWE2MjNkNWQ2ZDVlOGEzMTkzMjhkODIxOTBkNzEyN2QyODQ2YzQzOWIwYWI3MjYxOWIwYTQzYTk1MzIwZTRlYzM0ZmMzYTljZWE4NzY0MjIzMDViZDc2YzViYTdiZTllMmY0MTBjODA2MDY0NWExZDI5ZWRiIjoxNjoiMDg0N2U3MzIzNzZmYzc5MDBmODk4ZWE4MmViMmIwZmM0MTg1NjVmZGFlNjJmN2Q5ZWM0Y2UyMjE3Yjk3OTkwZGQyNzJkYjE1N2Y5OWY2M2MwZGNiYjlmYmFjZGJkNGM0ZGFkYjZkZjY3NzU2MzU4Y2E0MTc0ODI1YjQ4ZjQ5NzA2ZCI6MTY6IjQ5NTM3MGExZmIxODU0M2MxNmQzNjMxZTMxNjMyNTVkZjYyYmU2ZWVlODkwZDVmMjU1MDllNGY3NzhhOGVhNmZiYmJjZGY4NWRmZjY0ZTBkOTcyMDAzYWIzNjgxZmJiYTZkZDQxZmQ1NDE4MjliMmU1ODJkZTlmMmE0YTRlMGEyZDA5MDBiZWY0NzUzZGIzY2VlMGVlMDZjN2RmYWU4YjFkNTNiNTk1MzIxOGY5Y2NlZWE2OTViMDg2NjhlZGVhYWRjZWQ5NDYzYjFkNzkwZDVlYmYyN2U5MTE1YjQ2Y2FkNGQ5YTJiOGVmYWIwNTYxYjA4MTAzNDQ3MzlhZGEwNzMzZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMGVhMzdkZjlhNmZlYTRhOGI2MTAzNzNjMjRjZjM5MGMyMGZhNmUyMTM1YzQwMGM4YTM0ZjVjMTgzYTdlOGVhNGM5YWUwOTBlZDMxNzU5ZjQyZGM3NzcxOWNjYTQwMGVjZGNjNTE3YWNmYzdhYzY5MDI2NzViMmVmMzBjNTA5NjY1ZjMzMjE0ODJmYzY5YTlmYjU3MGQxNWUwMWM4NDVkMGQ4ZTUwZDJhMjRjYmYxY2YwZTcxNDk3NWE1ZGI3YjE4ZDllOWU5Y2I5MWI1Y2IxNjg2OTA2MGVkMThiN2I1NjI0NTUwM2YwY2FmOTAzNTJiOGRlODFjYjVhMWQ5YzYzMzYwOTJmMGNkIjoiNzZmZDRlNjRmZGM5OGViOTI3YTA0MDNlMzVhMDg0ZTc2YmE5ZjkyYSI6IjFlZDFkODQ4ZmIxZWRiNDQxMjliZDliMzU0Nzk1YWY5N2EwNjlhN2EwMGQwMTUxMDQ4NTkzZTBjNzJjMzUxN2ZmOWZmMmE0MWQwY2I1YTBhYzg2MGQ3MzZhMTk5NzA0ZjdjYjZhNTM5ODZhODhiYmQ4YWJjYzAwNzZhMmNlODQ3ODgwMDMxNTI1ZDQ0OWRhMmFjNzgzNTYzNzRjNTM2ZTM0M2ZhYTdjYmE0MmE1YWFhNjUwNjA4Nzc5MWMwNmE4ZTk4OTMzNWFlZDE5YmZhYjJkNWU2N2UyN2ZiMGMyODc1YWY4OTZjMjFiNmU4ZTczMDlkMDRlNGY2NzI3ZTY5NDYzZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDhfNiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAzMToxNjoiNDk1MzcwYTFmYjE4NTQzYzE2ZDM2MzFlMzE2MzI1NWRmNjJiZTZlZWU4OTBkNWYyNTUwOWU0Zjc3OGE4ZWE2ZmJiYmNkZjg1ZGZmNjRlMGQ5NzIwMDNhYjM2ODFmYmJhNmRkNDFmZDU0MTgyOWIyZTU4MmRlOWYyYTRhNGUwYTJkMDkwMGJlZjQ3NTNkYjNjZWUwZWUwNmM3ZGZhZThiMWQ1M2I1OTUzMjE4ZjljY2VlYTY5NWIwODY2OGVkZWFhZGNlZDk0NjNiMWQ3OTBkNWViZjI3ZTkxMTViNDZjYWQ0ZDlhMmI4ZWZhYjA1NjFiMDgxMDM0NDczOWFkYTA3MzNmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwZWEzN2RmOWE2ZmVhNGE4YjYxMDM3M2MyNGNmMzkwYzIwZmE2ZTIxMzVjNDAwYzhhMzRmNWMxODNhN2U4ZWE0YzlhZTA5MGVkMzE3NTlmNDJkYzc3NzE5Y2NhNDAwZWNkY2M1MTdhY2ZjN2FjNjkwMjY3NWIyZWYzMGM1MDk2NjVmMzMyMTQ4MmZjNjlhOWZiNTcwZDE1ZTAxYzg0NWQwZDhlNTBkMmEyNGNiZjFjZjBlNzE0OTc1YTVkYjdiMThkOWU5ZTljYjkxYjVjYjE2ODY5MDYwZWQxOGI3YjU2MjQ1NTAzZjBjYWY5MDM1MmI4ZGU4MWNiNWExZDljNjMzNjA5MmYwY2QiOiI3NmZkNGU2NGZkYzk4ZWI5MjdhMDQwM2UzNWEwODRlNzZiYTlmOTJhIjoiMWVkMWQ4NDhmYjFlZGI0NDEyOWJkOWIzNTQ3OTVhZjk3YTA2OWE3YTAwZDAxNTEwNDg1OTNlMGM3MmMzNTE3ZmY5ZmYyYTQxZDBjYjVhMGFjODYwZDczNmExOTk3MDRmN2NiNmE1Mzk4NmE4OGJiZDhhYmNjMDA3NmEyY2U4NDc4ODAwMzE1MjVkNDQ5ZGEyYWM3ODM1NjM3NGM1MzZlMzQzZmFhN2NiYTQyYTVhYWE2NTA2MDg3NzkxYzA2YThlOTg5MzM1YWVkMTliZmFiMmQ1ZTY3ZTI3ZmIwYzI4NzVhZjg5NmMyMWI2ZThlNzMwOWQwNGU0ZjY3MjdlNjk0NjNlIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOV8xCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTUzNjoxNjoiZjhlYjk3ZTk4ZGYxMjY2NGVlZmRiNzYxNTk2YTY5ZGRjZDBlNzZkYWVjZTZlZDRiZjVhMWI1MGFjMDg2Zjc5MjhhNGQyZjg3MjZhNzdlNTE1Yjc0ZGE0MTk4OGYyMjBiMWNjODdhYTFmYzgxMGNlOTlhODJmMmQxY2U4MjFlZGNlZDc5NGM2OTQxZjQyYzdhMWEwYjhjNGQyOGM3NWVjNjBiNjUyMjc5ZjYxNTRhNzYyYWVkMTY1ZDQ3ZGVlMzY3IjoxNjoiZWQ0ZDcxZDBhNmUyNGI5M2MyZTVmNmI0YmJlMDVmNWZiMGFmYTA0MmQyMDRmZTMzNzhkMzY1YzJmMjg4YjZhOGRhZDdlZmU0NWQxNTNlZWY0MGNhY2M3YjgxZmY5MzQwMDJkMTA4OTk0Yjk0YTVlNDcyOGNkOWM5NjMzNzVhZTQ5OTY1YmRhNTVjYmYwZWZlZDhkNjU1M2I0MDI3ZjJkODYyMDhhNmU2YjQ4OWMxNzYxMjgwOTJkNjI5ZTQ5ZDNkIjoxNjoiZTZiZDY5MmFjOTY2NDU3OTA0MDNmZGQwZjViZWI4YjliZjkyZWQxMDAwN2ZjMzY1MDQ2NDE5ZGQwNmMwNWM1YjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgzNTI2OTFjNTI0ZjZkZDhlNmMyOWQyMjRjZjI0Njk3M2FlYzg2YzViZjZiMTQwMWE4NTBkMWI5YWQxYmI4Y2JjZWM0N2IwNmYwZjhjN2Y0NWQzZmM4ZjMxOTI5OWM1NDMzZGRiYzJiMzA1M2I0N2RlZDJlY2Q0YTRjYWVmZDYxNDgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDI3MzU3ZTFkMzBlNDYzMTM5ODE1YzZmZDRmZDVhYzViODE3MmE0NTIzMGVjYjYzMThhMDRmMTQ1NWQ4NGU1YThiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJhODhlMjY1ODU1ZTlkN2NhMzZjNjg3OTVmMGIzMWI1OTFjZDY1ODdjNzFkMDYwYTBiM2Y3ZjNlYWVmNDM3OTU5MjIwMjhiYzJiNmFkNDY3Y2ZjMmQ3ZjY1OWM1Mzg1YWE3MGJhMzY3MmNkZGU0Y2ZlNDk3MGNjNzkwNDYwMWIyNzg4NzJiZjUxMzIxYzRhOTcyZjNjOTU1NzBmMzQ0NWQ0ZjU3OTgwZTBmMjBkZjU0ODQ2ZTZhNTJjNjY4ZjEyODhjMDNmOTUwMDZlYTMyZjU2MmQ0MGQ1MmFmOWZlYjMyZjBmYTA2ZGI2NWI1ODhhMjM3YjM0ZTU5MmQ1NWNmOTc5ZjkwM2E2NDJlZjY0ZDJlZDU0MmFhOGM3N2RjMWRkNzYyZjQ1YTU5MzAzZWQ3NWU1NDFjYTI3MWUyYjYwY2E3MDllNDRmYTA2NjExMzFlOGQ1ZDQxNjNmZDhkMzk4NTY2Y2UyNmRlODczMGU3MmY5Y2NhNzM3NjQxYzI0NDE1OTQyMDYzNzAyOGRmMGExODA3OWQ2MjA4ZWE4YjQ3MTFhMmM3NTBmNSI6ImMwYTQyNTMxM2RmOGQ3NTY0YmQyNDM0ZDMxMTUyM2Q1MjU3ZWVkODAiOiI1ODYxMDcyMjZjM2NlMDEzYTdjOGYwNGQxYTZhMjk1OWJiNGI4ZTIwNWJhNDNhMjdiNTBmMTI0MTExYmMzNWVmNTg5YjAzOWY1OTMyMTg3Y2I2OTZkN2Q5YTMyYzBjMzgzMDBhNWNkZGE0ODM0YjYyZDJlYjI0MGFmMzNmNzlkMTNkZmJmMDk1YmY1OTllMGQ5Njg2OTQ4YzE5NjQ3NDdiNjdlODljOWFiYTVjZDg1MDE2MjM2ZjU2NmNjNTgwMmNiMTNlYWQ1MWJjN2NhNmJlZjNiOTRkY2JkYmIxZDU3MDQ2OTc3MWRmMGUwMGIxYThhMDY3Nzc0NzJkMjMxNjI3OWVkYWU4NjQ3NDY2OGQ0ZTFlZmZmOTVmMWRlNjFjNjAyMGRhMzJhZTkyYmJmMTY1MjBmZWYzY2Y0ZDg4ZjYxMTIxZjI0YmJkOWZlOTFiNTljYWYxMjM1YjJhOTNmZjgxZmM0MDNhZGRmNGViZGVhODQ5MzRhOWNkYWY4ZTFhOWUiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA5XzEgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjE1MzY6MTY6ImU2YmQ2OTJhYzk2NjQ1NzkwNDAzZmRkMGY1YmViOGI5YmY5MmVkMTAwMDdmYzM2NTA0NjQxOWRkMDZjMDVjNWI1YjJmNDhlY2Y5ODllNGNlMjY5MTA5OTc5Y2JiNDBiNGEwYWQyNGQyMjQ4M2QxZWUzMTVhZDRjY2IxNTM0MjY4MzUyNjkxYzUyNGY2ZGQ4ZTZjMjlkMjI0Y2YyNDY5NzNhZWM4NmM1YmY2YjE0MDFhODUwZDFiOWFkMWJiOGNiY2VjNDdiMDZmMGY4YzdmNDVkM2ZjOGYzMTkyOTljNTQzM2RkYmMyYjMwNTNiNDdkZWQyZWNkNGE0Y2FlZmQ2MTQ4MzNkYzhiYjYyMmYzMTdlZDA3NmI4MDU3ZmU4ZGUzZjg0NDgwYWQ1ZTgzZTRhNjE5MDRhNGYyNDhmYjM5NzAyNzM1N2UxZDMwZTQ2MzEzOTgxNWM2ZmQ0ZmQ1YWM1YjgxNzJhNDUyMzBlY2I2MzE4YTA0ZjE0NTVkODRlNWE4YiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiYTg4ZTI2NTg1NWU5ZDdjYTM2YzY4Nzk1ZjBiMzFiNTkxY2Q2NTg3YzcxZDA2MGEwYjNmN2YzZWFlZjQzNzk1OTIyMDI4YmMyYjZhZDQ2N2NmYzJkN2Y2NTljNTM4NWFhNzBiYTM2NzJjZGRlNGNmZTQ5NzBjYzc5MDQ2MDFiMjc4ODcyYmY1MTMyMWM0YTk3MmYzYzk1NTcwZjM0NDVkNGY1Nzk4MGUwZjIwZGY1NDg0NmU2YTUyYzY2OGYxMjg4YzAzZjk1MDA2ZWEzMmY1NjJkNDBkNTJhZjlmZWIzMmYwZmEwNmRiNjViNTg4YTIzN2IzNGU1OTJkNTVjZjk3OWY5MDNhNjQyZWY2NGQyZWQ1NDJhYThjNzdkYzFkZDc2MmY0NWE1OTMwM2VkNzVlNTQxY2EyNzFlMmI2MGNhNzA5ZTQ0ZmEwNjYxMTMxZThkNWQ0MTYzZmQ4ZDM5ODU2NmNlMjZkZTg3MzBlNzJmOWNjYTczNzY0MWMyNDQxNTk0MjA2MzcwMjhkZjBhMTgwNzlkNjIwOGVhOGI0NzExYTJjNzUwZjUiOiJjMGE0MjUzMTNkZjhkNzU2NGJkMjQzNGQzMTE1MjNkNTI1N2VlZDgwIjoiNTg2MTA3MjI2YzNjZTAxM2E3YzhmMDRkMWE2YTI5NTliYjRiOGUyMDViYTQzYTI3YjUwZjEyNDExMWJjMzVlZjU4OWIwMzlmNTkzMjE4N2NiNjk2ZDdkOWEzMmMwYzM4MzAwYTVjZGRhNDgzNGI2MmQyZWIyNDBhZjMzZjc5ZDEzZGZiZjA5NWJmNTk5ZTBkOTY4Njk0OGMxOTY0NzQ3YjY3ZTg5YzlhYmE1Y2Q4NTAxNjIzNmY1NjZjYzU4MDJjYjEzZWFkNTFiYzdjYTZiZWYzYjk0ZGNiZGJiMWQ1NzA0Njk3NzFkZjBlMDBiMWE4YTA2Nzc3NDcyZDIzMTYyNzllZGFlODY0NzQ2NjhkNGUxZWZmZjk1ZjFkZTYxYzYwMjBkYTMyYWU5MmJiZjE2NTIwZmVmM2NmNGQ4OGY2MTEyMWYyNGJiZDlmZTkxYjU5Y2FmMTIzNWIyYTkzZmY4MWZjNDAzYWRkZjRlYmRlYTg0OTM0YTljZGFmOGUxYTllIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOV8yCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTUzNjoxNjoiZjhlYjk3ZTk4ZGYxMjY2NGVlZmRiNzYxNTk2YTY5ZGRjZDBlNzZkYWVjZTZlZDRiZjVhMWI1MGFjMDg2Zjc5MjhhNGQyZjg3MjZhNzdlNTE1Yjc0ZGE0MTk4OGYyMjBiMWNjODdhYTFmYzgxMGNlOTlhODJmMmQxY2U4MjFlZGNlZDc5NGM2OTQxZjQyYzdhMWEwYjhjNGQyOGM3NWVjNjBiNjUyMjc5ZjYxNTRhNzYyYWVkMTY1ZDQ3ZGVlMzY3IjoxNjoiZWQ0ZDcxZDBhNmUyNGI5M2MyZTVmNmI0YmJlMDVmNWZiMGFmYTA0MmQyMDRmZTMzNzhkMzY1YzJmMjg4YjZhOGRhZDdlZmU0NWQxNTNlZWY0MGNhY2M3YjgxZmY5MzQwMDJkMTA4OTk0Yjk0YTVlNDcyOGNkOWM5NjMzNzVhZTQ5OTY1YmRhNTVjYmYwZWZlZDhkNjU1M2I0MDI3ZjJkODYyMDhhNmU2YjQ4OWMxNzYxMjgwOTJkNjI5ZTQ5ZDNkIjoxNjoiZTZiZDY5MmFjOTY2NDU3OTA0MDNmZGQwZjViZWI4YjliZjkyZWQxMDAwN2ZjMzY1MDQ2NDE5ZGQwNmMwNWM1YjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgzNTI2OTFjNTI0ZjZkZDhlNmMyOWQyMjRjZjI0Njk3M2FlYzg2YzViZjZiMTQwMWE4NTBkMWI5YWQxYmI4Y2JjZWM0N2IwNmYwZjhjN2Y0NWQzZmM4ZjMxOTI5OWM1NDMzZGRiYzJiMzA1M2I0N2RlZDJlY2Q0YTRjYWVmZDYxNDgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDI3MzU3ZTFkMzBlNDYzMTM5ODE1YzZmZDRmZDVhYzViODE3MmE0NTIzMGVjYjYzMThhMDRmMTQ1NWQ4NGU1YThiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJjOGM5YzZhZjA0YWNkYTQxNGQyMjdlZjIzZTA4MjBjMzczMmM1MDBkYzg3Mjc1ZTk1YjBkMDk1NDEzOTkzYzI2NThiYzFkOTg4NTgxYmE4NzljMmQyMDFmMTRjYjg4Y2VkMTUzYTAxOTY5YTdiZjBhN2JlNzljODRjMTQ4NmJjMTJiM2ZhNmM1OTg3MWI2ODI3YzhjZTI1M2NhNWZlZmE4YThjNjkwYmYzMjZlOGUzN2NkYjk2ZDkwYTgyZWJhYjY5Zjg2MzUwZTE4MjJlOGJkNTM2YTJlIjoiYjMwN2M0M2I0ODUwYThkYWMyZjE1ZjMyZTM3ODM5ZWY4YzVjMGU5MSI6IjgwYjZkNjQzMjU1MjA5ZjBhNDU2NzYzODk3YWM5ZWQyNTlkNDU5YjQ5YzI4ODdlNTg4MmVjYjQ0MzRjZmQ2NmRkN2UxNjk5Mzc1MzgxZTUxY2Q3ZjU1NGYyYzI3MTcwNGIzOTlkNDJiNGJlMjU0MGEwZWNhNjE5NTFmNTUyNjdmN2MyODc4YzEyMjg0MmRhZGIyOGIwMWJkNWY4YzAyNWY3ZTIyODQxOGE2NzNjMDNkNmJjMGM3MzZkMGEyOTU0NmJkNjdmNzg2ZDlkNjkyY2NlYTc3OGQ3MWQ5OGMyMDYzYjdhNzEwOTIxODdhNGQzNWFmMTA4MTExZDgzZTgzZWFlNDZjNDZhYTM0Mjc3ZTA2MDQ0NTg5OTAzNzg4ZjFkNWU3Y2VlMjVmYjQ4NWU5Mjk0OTExODgxNGQ2ZjJjM2VlMzYxNDg5MDE2ZjMyN2ZiNWJjNTE3ZWI1MDQ3MGJmZmExYWZhNWY0Y2U5YWEwY2U1YjhlZTE5YmY1NTAxYjk1OCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDlfMiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTUzNjoxNjoiZTZiZDY5MmFjOTY2NDU3OTA0MDNmZGQwZjViZWI4YjliZjkyZWQxMDAwN2ZjMzY1MDQ2NDE5ZGQwNmMwNWM1YjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgzNTI2OTFjNTI0ZjZkZDhlNmMyOWQyMjRjZjI0Njk3M2FlYzg2YzViZjZiMTQwMWE4NTBkMWI5YWQxYmI4Y2JjZWM0N2IwNmYwZjhjN2Y0NWQzZmM4ZjMxOTI5OWM1NDMzZGRiYzJiMzA1M2I0N2RlZDJlY2Q0YTRjYWVmZDYxNDgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDI3MzU3ZTFkMzBlNDYzMTM5ODE1YzZmZDRmZDVhYzViODE3MmE0NTIzMGVjYjYzMThhMDRmMTQ1NWQ4NGU1YThiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJjOGM5YzZhZjA0YWNkYTQxNGQyMjdlZjIzZTA4MjBjMzczMmM1MDBkYzg3Mjc1ZTk1YjBkMDk1NDEzOTkzYzI2NThiYzFkOTg4NTgxYmE4NzljMmQyMDFmMTRjYjg4Y2VkMTUzYTAxOTY5YTdiZjBhN2JlNzljODRjMTQ4NmJjMTJiM2ZhNmM1OTg3MWI2ODI3YzhjZTI1M2NhNWZlZmE4YThjNjkwYmYzMjZlOGUzN2NkYjk2ZDkwYTgyZWJhYjY5Zjg2MzUwZTE4MjJlOGJkNTM2YTJlIjoiYjMwN2M0M2I0ODUwYThkYWMyZjE1ZjMyZTM3ODM5ZWY4YzVjMGU5MSI6IjgwYjZkNjQzMjU1MjA5ZjBhNDU2NzYzODk3YWM5ZWQyNTlkNDU5YjQ5YzI4ODdlNTg4MmVjYjQ0MzRjZmQ2NmRkN2UxNjk5Mzc1MzgxZTUxY2Q3ZjU1NGYyYzI3MTcwNGIzOTlkNDJiNGJlMjU0MGEwZWNhNjE5NTFmNTUyNjdmN2MyODc4YzEyMjg0MmRhZGIyOGIwMWJkNWY4YzAyNWY3ZTIyODQxOGE2NzNjMDNkNmJjMGM3MzZkMGEyOTU0NmJkNjdmNzg2ZDlkNjkyY2NlYTc3OGQ3MWQ5OGMyMDYzYjdhNzEwOTIxODdhNGQzNWFmMTA4MTExZDgzZTgzZWFlNDZjNDZhYTM0Mjc3ZTA2MDQ0NTg5OTAzNzg4ZjFkNWU3Y2VlMjVmYjQ4NWU5Mjk0OTExODgxNGQ2ZjJjM2VlMzYxNDg5MDE2ZjMyN2ZiNWJjNTE3ZWI1MDQ3MGJmZmExYWZhNWY0Y2U5YWEwY2U1YjhlZTE5YmY1NTAxYjk1OCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDlfMworcGtjczFfcnNhc3NhX3Bzc19zaWduOjE1MzY6MTY6ImY4ZWI5N2U5OGRmMTI2NjRlZWZkYjc2MTU5NmE2OWRkY2QwZTc2ZGFlY2U2ZWQ0YmY1YTFiNTBhYzA4NmY3OTI4YTRkMmY4NzI2YTc3ZTUxNWI3NGRhNDE5ODhmMjIwYjFjYzg3YWExZmM4MTBjZTk5YTgyZjJkMWNlODIxZWRjZWQ3OTRjNjk0MWY0MmM3YTFhMGI4YzRkMjhjNzVlYzYwYjY1MjI3OWY2MTU0YTc2MmFlZDE2NWQ0N2RlZTM2NyI6MTY6ImVkNGQ3MWQwYTZlMjRiOTNjMmU1ZjZiNGJiZTA1ZjVmYjBhZmEwNDJkMjA0ZmUzMzc4ZDM2NWMyZjI4OGI2YThkYWQ3ZWZlNDVkMTUzZWVmNDBjYWNjN2I4MWZmOTM0MDAyZDEwODk5NGI5NGE1ZTQ3MjhjZDljOTYzMzc1YWU0OTk2NWJkYTU1Y2JmMGVmZWQ4ZDY1NTNiNDAyN2YyZDg2MjA4YTZlNmI0ODljMTc2MTI4MDkyZDYyOWU0OWQzZCI6MTY6ImU2YmQ2OTJhYzk2NjQ1NzkwNDAzZmRkMGY1YmViOGI5YmY5MmVkMTAwMDdmYzM2NTA0NjQxOWRkMDZjMDVjNWI1YjJmNDhlY2Y5ODllNGNlMjY5MTA5OTc5Y2JiNDBiNGEwYWQyNGQyMjQ4M2QxZWUzMTVhZDRjY2IxNTM0MjY4MzUyNjkxYzUyNGY2ZGQ4ZTZjMjlkMjI0Y2YyNDY5NzNhZWM4NmM1YmY2YjE0MDFhODUwZDFiOWFkMWJiOGNiY2VjNDdiMDZmMGY4YzdmNDVkM2ZjOGYzMTkyOTljNTQzM2RkYmMyYjMwNTNiNDdkZWQyZWNkNGE0Y2FlZmQ2MTQ4MzNkYzhiYjYyMmYzMTdlZDA3NmI4MDU3ZmU4ZGUzZjg0NDgwYWQ1ZTgzZTRhNjE5MDRhNGYyNDhmYjM5NzAyNzM1N2UxZDMwZTQ2MzEzOTgxNWM2ZmQ0ZmQ1YWM1YjgxNzJhNDUyMzBlY2I2MzE4YTA0ZjE0NTVkODRlNWE4YiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMGFmYWQ0MmNjZDRmYzYwNjU0YTU1MDAyZDIyOGY1MmE0YTVmZTAzYjhiYmIwOGNhODJkYWNhNTU4YjQ0ZGJlMTI2NmU1MGMwZTc0NWEzNmQ5ZDI5MDRlMzQwOGFiY2QxZmQ1Njk5OTQwNjNmNGE3NWNjNzJmMmZlZTJhMGNkODkzYTQzYWYxYzViOGI0ODdkZjBhNzE2MTAwMjRlNGY2ZGRmOWYyOGFkMDgxM2MxYWFiOTFiY2IzYzkwNjRkNWZmNzQyZGVmZmVhNjU3MDk0MTM5MzY5ZTVlYTZmNGE5NjMxOWE1Y2M4MjI0MTQ1YjU0NTA2Mjc1OGZlZmQxZmUzNDA5YWUxNjkyNTljNmNkZmQ2YjVmMjk1OGUzMTRmYWVjYmU2OWQyY2FjZTU4ZWU1NTE3OWFiOWIzZTZkMWVjYzE0YTU1N2M1ZmViZTk4ODU5NTI2NGZjNWRhMWM1NzE0NjJlY2E3OThhMThhMWE0OTQwY2RhYjRhM2U5MjAwOWNjZDQyZTFlOTQ3YjEzMTRlMzIyMzhhMmRlY2U3ZDIzYTg5YjViMzBjNzUxZmQwYTRhNDMwZDJjNTQ4NTk0IjoiOWEyYjAwN2U4MDk3OGJiYjE5MmMzNTRlYjdkYTlhZWRmYzc0ZGJmNSI6IjQ4NDQwOGYzODk4Y2Q1ZjUzNDgzZjgwODE5ZWZiZjI3MDhjMzRkMjdhOGIyYTZmYWU4YjMyMmY5MjQwMjM3Zjk4MTgxN2FjYTE4NDZmMTA4NGRhYTZkN2MwNzk1ZjZlNWJmMWFmNTljMzhlMTg1ODQzN2NlMWY3ZWM0MTliOThjODczNmFkZjZkZDlhMDBiMTgwNmQyYmQzYWQwYTczNzc1ZTA1ZjUyZGZlZjNhNTlhYjRiMDgxNDNmMGRmMDVjZDFhZDlkMDRiZWNlY2E2ZGFhNGEyMTI5ODAzZTIwMGNiYzc3Nzg3Y2FmNGMxZDA2NjNhNmM1OTg3YjYwNTk1MjAxOTc4MmNhZjJlYzE0MjZkNjhmYjk0ZWQxZDRiZTgxNmE3ZWQwODFiNzdlNmFiMzMwYjNmZmMwNzM4MjBmZWNkZTM3MjdmY2JlMjk1ZWU2MWEwNTBhMzQzNjU4NjM3YzNmZDY1OWNmYjYzNzM2ZGUzMmQ5ZjkwZDNjMmY2M2VjYSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDlfMyAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTUzNjoxNjoiZTZiZDY5MmFjOTY2NDU3OTA0MDNmZGQwZjViZWI4YjliZjkyZWQxMDAwN2ZjMzY1MDQ2NDE5ZGQwNmMwNWM1YjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgzNTI2OTFjNTI0ZjZkZDhlNmMyOWQyMjRjZjI0Njk3M2FlYzg2YzViZjZiMTQwMWE4NTBkMWI5YWQxYmI4Y2JjZWM0N2IwNmYwZjhjN2Y0NWQzZmM4ZjMxOTI5OWM1NDMzZGRiYzJiMzA1M2I0N2RlZDJlY2Q0YTRjYWVmZDYxNDgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDI3MzU3ZTFkMzBlNDYzMTM5ODE1YzZmZDRmZDVhYzViODE3MmE0NTIzMGVjYjYzMThhMDRmMTQ1NWQ4NGU1YThiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwYWZhZDQyY2NkNGZjNjA2NTRhNTUwMDJkMjI4ZjUyYTRhNWZlMDNiOGJiYjA4Y2E4MmRhY2E1NThiNDRkYmUxMjY2ZTUwYzBlNzQ1YTM2ZDlkMjkwNGUzNDA4YWJjZDFmZDU2OTk5NDA2M2Y0YTc1Y2M3MmYyZmVlMmEwY2Q4OTNhNDNhZjFjNWI4YjQ4N2RmMGE3MTYxMDAyNGU0ZjZkZGY5ZjI4YWQwODEzYzFhYWI5MWJjYjNjOTA2NGQ1ZmY3NDJkZWZmZWE2NTcwOTQxMzkzNjllNWVhNmY0YTk2MzE5YTVjYzgyMjQxNDViNTQ1MDYyNzU4ZmVmZDFmZTM0MDlhZTE2OTI1OWM2Y2RmZDZiNWYyOTU4ZTMxNGZhZWNiZTY5ZDJjYWNlNThlZTU1MTc5YWI5YjNlNmQxZWNjMTRhNTU3YzVmZWJlOTg4NTk1MjY0ZmM1ZGExYzU3MTQ2MmVjYTc5OGExOGExYTQ5NDBjZGFiNGEzZTkyMDA5Y2NkNDJlMWU5NDdiMTMxNGUzMjIzOGEyZGVjZTdkMjNhODliNWIzMGM3NTFmZDBhNGE0MzBkMmM1NDg1OTQiOiI5YTJiMDA3ZTgwOTc4YmJiMTkyYzM1NGViN2RhOWFlZGZjNzRkYmY1IjoiNDg0NDA4ZjM4OThjZDVmNTM0ODNmODA4MTllZmJmMjcwOGMzNGQyN2E4YjJhNmZhZThiMzIyZjkyNDAyMzdmOTgxODE3YWNhMTg0NmYxMDg0ZGFhNmQ3YzA3OTVmNmU1YmYxYWY1OWMzOGUxODU4NDM3Y2UxZjdlYzQxOWI5OGM4NzM2YWRmNmRkOWEwMGIxODA2ZDJiZDNhZDBhNzM3NzVlMDVmNTJkZmVmM2E1OWFiNGIwODE0M2YwZGYwNWNkMWFkOWQwNGJlY2VjYTZkYWE0YTIxMjk4MDNlMjAwY2JjNzc3ODdjYWY0YzFkMDY2M2E2YzU5ODdiNjA1OTUyMDE5NzgyY2FmMmVjMTQyNmQ2OGZiOTRlZDFkNGJlODE2YTdlZDA4MWI3N2U2YWIzMzBiM2ZmYzA3MzgyMGZlY2RlMzcyN2ZjYmUyOTVlZTYxYTA1MGEzNDM2NTg2MzdjM2ZkNjU5Y2ZiNjM3MzZkZTMyZDlmOTBkM2MyZjYzZWNhIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOV80Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTUzNjoxNjoiZjhlYjk3ZTk4ZGYxMjY2NGVlZmRiNzYxNTk2YTY5ZGRjZDBlNzZkYWVjZTZlZDRiZjVhMWI1MGFjMDg2Zjc5MjhhNGQyZjg3MjZhNzdlNTE1Yjc0ZGE0MTk4OGYyMjBiMWNjODdhYTFmYzgxMGNlOTlhODJmMmQxY2U4MjFlZGNlZDc5NGM2OTQxZjQyYzdhMWEwYjhjNGQyOGM3NWVjNjBiNjUyMjc5ZjYxNTRhNzYyYWVkMTY1ZDQ3ZGVlMzY3IjoxNjoiZWQ0ZDcxZDBhNmUyNGI5M2MyZTVmNmI0YmJlMDVmNWZiMGFmYTA0MmQyMDRmZTMzNzhkMzY1YzJmMjg4YjZhOGRhZDdlZmU0NWQxNTNlZWY0MGNhY2M3YjgxZmY5MzQwMDJkMTA4OTk0Yjk0YTVlNDcyOGNkOWM5NjMzNzVhZTQ5OTY1YmRhNTVjYmYwZWZlZDhkNjU1M2I0MDI3ZjJkODYyMDhhNmU2YjQ4OWMxNzYxMjgwOTJkNjI5ZTQ5ZDNkIjoxNjoiZTZiZDY5MmFjOTY2NDU3OTA0MDNmZGQwZjViZWI4YjliZjkyZWQxMDAwN2ZjMzY1MDQ2NDE5ZGQwNmMwNWM1YjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgzNTI2OTFjNTI0ZjZkZDhlNmMyOWQyMjRjZjI0Njk3M2FlYzg2YzViZjZiMTQwMWE4NTBkMWI5YWQxYmI4Y2JjZWM0N2IwNmYwZjhjN2Y0NWQzZmM4ZjMxOTI5OWM1NDMzZGRiYzJiMzA1M2I0N2RlZDJlY2Q0YTRjYWVmZDYxNDgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDI3MzU3ZTFkMzBlNDYzMTM5ODE1YzZmZDRmZDVhYzViODE3MmE0NTIzMGVjYjYzMThhMDRmMTQ1NWQ4NGU1YThiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIxZGZkNDNiNDZjOTNkYjgyNjI5YmRhZTJiZDBhMTJiODgyZWEwNGMzYjQ2NWY1Y2Y5MzAyM2YwMTA1OTYyNmRiYmU5OWYyNmJiMWJlOTQ5ZGRkZDE2ZGM3ZjNkZWJiMTlhMTk0NjI3ZjBiMjI0NDM0ZGY3ZDg3MDBlOWU5OGIwNmUzNjBjMTJmZGJlM2QxOWY1MWM5Njg0ZWI5MDg5ZWNiYjBhMmYwNDUwMzk5ZDNmNTllYWM3Mjk0MDg1ZDA0NGY1MzkzYzZjZTczNzQyM2Q4Yjg2YzQxNTM3MGQzODllMzBiOWYwYTNjMDJkMjVkMDA4MmU4YWQ2ZjNmMWVmMjRhNDVjM2NmODJiMzgzMzY3MDYzYTRkNDYxM2U0MjY0ZjAxYjJkYWMyZTVhYTQyMDQzZjhmYjVmNjlmYTg3MWQxNGZiMjczZTc2N2E1MzFjNDBmMDJmMzQzYmMyZmI0NWEwYzdlMGY2YmUyNTYxOTIzYTc3MjExZDY2YTZlMmRiYjQzYzM2NjM1MGJlYWUyMmRhM2FjMmMxZjUwNzcwOTZmY2I1YzRiZjI1NWY3NTc0MzUxYWUwYjFlMWYwMzYzMjgxN2MwODU2ZDRhOGJhOTdhZmJkYzhiODU4NTU0MDJiYzU2OTI2ZmNlYzIwOWY5ZWE4IjoiNzBmMzgyYmRkZjRkNWQyZGQ4OGIzYmM3YjczMDhiZTYzMmI4NDA0NSI6Ijg0ZWJlYjQ4MWJlNTk4NDViNDY0NjhiYWZiNDcxYzAxMTJlMDJiMjM1ZDg0YjVkOTExY2JkMTkyNmVlNTA3NGFlMDQyNDQ5NWNiMjBlODIzMDhiOGViYjY1ZjQxOWEwM2ZiNDBlNzJiNzg5ODFkODhhYWQxNDMwNTM2ODUxNzJjOTdiMjljOGI3YmYwYWU3M2I1YjIyNjNjNDAzZGEwZWQyZjgwZmY3NDUwYWY3ODI4ZWI4Yjg2ZjAwMjhiZDJhOGIxNzZhNGQyMjhjY2NlYTE4Mzk0ZjIzOGIwOWZmNzU4Y2MwMGJjMDQzMDExNTIzNTU3NDJmMjgyYjU0ZTY2M2E5MTllNzA5ZDhkYTI0YWRlNTUwMGE3YjlhYTUwMjI2ZTBjYTUyOTIzZTZjMmQ4NjBlYzUwZmY0ODBmYTU3NDc3ZTgyYjA1NjVmNDM3OWY3OWM3NzJkNWMyZGE4MGFmOWZiZjMyNWVjZTZmYzIwYjAwOTYxNjE0YmVlODlhMTgzZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDlfNCAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTUzNjoxNjoiZTZiZDY5MmFjOTY2NDU3OTA0MDNmZGQwZjViZWI4YjliZjkyZWQxMDAwN2ZjMzY1MDQ2NDE5ZGQwNmMwNWM1YjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgzNTI2OTFjNTI0ZjZkZDhlNmMyOWQyMjRjZjI0Njk3M2FlYzg2YzViZjZiMTQwMWE4NTBkMWI5YWQxYmI4Y2JjZWM0N2IwNmYwZjhjN2Y0NWQzZmM4ZjMxOTI5OWM1NDMzZGRiYzJiMzA1M2I0N2RlZDJlY2Q0YTRjYWVmZDYxNDgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDI3MzU3ZTFkMzBlNDYzMTM5ODE1YzZmZDRmZDVhYzViODE3MmE0NTIzMGVjYjYzMThhMDRmMTQ1NWQ4NGU1YThiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIxZGZkNDNiNDZjOTNkYjgyNjI5YmRhZTJiZDBhMTJiODgyZWEwNGMzYjQ2NWY1Y2Y5MzAyM2YwMTA1OTYyNmRiYmU5OWYyNmJiMWJlOTQ5ZGRkZDE2ZGM3ZjNkZWJiMTlhMTk0NjI3ZjBiMjI0NDM0ZGY3ZDg3MDBlOWU5OGIwNmUzNjBjMTJmZGJlM2QxOWY1MWM5Njg0ZWI5MDg5ZWNiYjBhMmYwNDUwMzk5ZDNmNTllYWM3Mjk0MDg1ZDA0NGY1MzkzYzZjZTczNzQyM2Q4Yjg2YzQxNTM3MGQzODllMzBiOWYwYTNjMDJkMjVkMDA4MmU4YWQ2ZjNmMWVmMjRhNDVjM2NmODJiMzgzMzY3MDYzYTRkNDYxM2U0MjY0ZjAxYjJkYWMyZTVhYTQyMDQzZjhmYjVmNjlmYTg3MWQxNGZiMjczZTc2N2E1MzFjNDBmMDJmMzQzYmMyZmI0NWEwYzdlMGY2YmUyNTYxOTIzYTc3MjExZDY2YTZlMmRiYjQzYzM2NjM1MGJlYWUyMmRhM2FjMmMxZjUwNzcwOTZmY2I1YzRiZjI1NWY3NTc0MzUxYWUwYjFlMWYwMzYzMjgxN2MwODU2ZDRhOGJhOTdhZmJkYzhiODU4NTU0MDJiYzU2OTI2ZmNlYzIwOWY5ZWE4IjoiNzBmMzgyYmRkZjRkNWQyZGQ4OGIzYmM3YjczMDhiZTYzMmI4NDA0NSI6Ijg0ZWJlYjQ4MWJlNTk4NDViNDY0NjhiYWZiNDcxYzAxMTJlMDJiMjM1ZDg0YjVkOTExY2JkMTkyNmVlNTA3NGFlMDQyNDQ5NWNiMjBlODIzMDhiOGViYjY1ZjQxOWEwM2ZiNDBlNzJiNzg5ODFkODhhYWQxNDMwNTM2ODUxNzJjOTdiMjljOGI3YmYwYWU3M2I1YjIyNjNjNDAzZGEwZWQyZjgwZmY3NDUwYWY3ODI4ZWI4Yjg2ZjAwMjhiZDJhOGIxNzZhNGQyMjhjY2NlYTE4Mzk0ZjIzOGIwOWZmNzU4Y2MwMGJjMDQzMDExNTIzNTU3NDJmMjgyYjU0ZTY2M2E5MTllNzA5ZDhkYTI0YWRlNTUwMGE3YjlhYTUwMjI2ZTBjYTUyOTIzZTZjMmQ4NjBlYzUwZmY0ODBmYTU3NDc3ZTgyYjA1NjVmNDM3OWY3OWM3NzJkNWMyZGE4MGFmOWZiZjMyNWVjZTZmYzIwYjAwOTYxNjE0YmVlODlhMTgzZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDlfNQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjE1MzY6MTY6ImY4ZWI5N2U5OGRmMTI2NjRlZWZkYjc2MTU5NmE2OWRkY2QwZTc2ZGFlY2U2ZWQ0YmY1YTFiNTBhYzA4NmY3OTI4YTRkMmY4NzI2YTc3ZTUxNWI3NGRhNDE5ODhmMjIwYjFjYzg3YWExZmM4MTBjZTk5YTgyZjJkMWNlODIxZWRjZWQ3OTRjNjk0MWY0MmM3YTFhMGI4YzRkMjhjNzVlYzYwYjY1MjI3OWY2MTU0YTc2MmFlZDE2NWQ0N2RlZTM2NyI6MTY6ImVkNGQ3MWQwYTZlMjRiOTNjMmU1ZjZiNGJiZTA1ZjVmYjBhZmEwNDJkMjA0ZmUzMzc4ZDM2NWMyZjI4OGI2YThkYWQ3ZWZlNDVkMTUzZWVmNDBjYWNjN2I4MWZmOTM0MDAyZDEwODk5NGI5NGE1ZTQ3MjhjZDljOTYzMzc1YWU0OTk2NWJkYTU1Y2JmMGVmZWQ4ZDY1NTNiNDAyN2YyZDg2MjA4YTZlNmI0ODljMTc2MTI4MDkyZDYyOWU0OWQzZCI6MTY6ImU2YmQ2OTJhYzk2NjQ1NzkwNDAzZmRkMGY1YmViOGI5YmY5MmVkMTAwMDdmYzM2NTA0NjQxOWRkMDZjMDVjNWI1YjJmNDhlY2Y5ODllNGNlMjY5MTA5OTc5Y2JiNDBiNGEwYWQyNGQyMjQ4M2QxZWUzMTVhZDRjY2IxNTM0MjY4MzUyNjkxYzUyNGY2ZGQ4ZTZjMjlkMjI0Y2YyNDY5NzNhZWM4NmM1YmY2YjE0MDFhODUwZDFiOWFkMWJiOGNiY2VjNDdiMDZmMGY4YzdmNDVkM2ZjOGYzMTkyOTljNTQzM2RkYmMyYjMwNTNiNDdkZWQyZWNkNGE0Y2FlZmQ2MTQ4MzNkYzhiYjYyMmYzMTdlZDA3NmI4MDU3ZmU4ZGUzZjg0NDgwYWQ1ZTgzZTRhNjE5MDRhNGYyNDhmYjM5NzAyNzM1N2UxZDMwZTQ2MzEzOTgxNWM2ZmQ0ZmQ1YWM1YjgxNzJhNDUyMzBlY2I2MzE4YTA0ZjE0NTVkODRlNWE4YiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMWJkYzZlN2M5OGZiOGNmNTRlOWIwOTdiNjZhODMxZTljZmU1MmQ5ZDQ4ODg0NDhlZTRiMDk3ODA5M2JhMWQ3ZDczYWU3OGIzYTYyYmE0YWQ5NWNkMjg5Y2NiOWUwMDUyMjZiYjNkMTc4YmNjYWE4MjFmYjA0NGE0ZTIxZWU5NzY5NmMxNGQwNjc4Yzk0YzJkYWU5M2IwYWQ3MzkyMjIxODU1M2RhYTdlNDRlYmU1NzcyNWE3YTQ1Y2M3MmI5YjIxMzhhNmIxN2M4ZGI0MTFjZTgyNzllZTEyNDFhZmYwYThiZWM2Zjc3Zjg3ZWRiMGM2OWNiMjcyMzZlMzQzNWE4MDBiMTkyZTRmMTFlNTE5ZTNmZTMwZmMzMGVhY2NjYTRmYmI0MTc2OTAyOWJmNzA4ZTgxN2E5ZTY4MzgwNWJlNjdmYTEwMDk4NDY4M2I3NDgzOGUzYmNmZmE3OTM2NmVlZDFkNDgxYzc2NzI5MTE4ODM4ZjMxYmE4YTA0OGE5M2MxYmU0NDI0NTk4ZThkZjYzMjhiN2E3Nzg4MGEzZjljN2UyZThkZmNhOGViNWEyNmZiODZiZGM1NTZkNDJiYmUwMWQ5ZmE2ZWQ4MDY0NjQ5MWM5MzQxIjoiZDY4OTI1N2E4NmVmZmE2ODIxMmM1ZTBjNjE5ZWNhMjk1ZmI5MWI2NyI6IjgyMTAyZGY4Y2I5MWU3MTc5OTE5YTA0ZDI2ZDMzNWQ2NGZiYzJmODcyYzQ0ODMzOTQzMjQxZGU4NDU0ODEwMjc0Y2RmM2RiNWY0MmQ0MjNkYjE1MmFmNzEzNWY3MDE0MjBlMzliNDk0YTY3Y2JmZDE5ZjkxMTlkYTIzM2EyM2RhNWM2NDM5YjViYTBkMmJjMzczZWVlMzUwNzAwMTM3OGQ0YTQwNzM4NTZiN2ZlMmFiYTBiNWVlOTNiMjdmNGFmZWM3ZDRkMTIwOTIxYzgzZjYwNjc2NWIwMmMxOWU0ZDZhMWEzYjk1ZmE0YzQyMjk1MWJlNGY1MjEzMTA3N2VmMTcxNzk3MjljZGRmYmRiNTY5NTBkYmFjZWVmZTc4Y2IxNjY0MGEwOTllYTU2ZDI0Mzg5ZWVmMTBmOGZlY2IzMWJhM2VhM2IyMjdjMGE4NjY5OGJiODllM2U5MzYzOTA1YmYyMjc3N2IyYTNhYTUyMWI2NWI0Y2VmNzZkODNiZGU0YyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDlfNSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTUzNjoxNjoiZTZiZDY5MmFjOTY2NDU3OTA0MDNmZGQwZjViZWI4YjliZjkyZWQxMDAwN2ZjMzY1MDQ2NDE5ZGQwNmMwNWM1YjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgzNTI2OTFjNTI0ZjZkZDhlNmMyOWQyMjRjZjI0Njk3M2FlYzg2YzViZjZiMTQwMWE4NTBkMWI5YWQxYmI4Y2JjZWM0N2IwNmYwZjhjN2Y0NWQzZmM4ZjMxOTI5OWM1NDMzZGRiYzJiMzA1M2I0N2RlZDJlY2Q0YTRjYWVmZDYxNDgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDI3MzU3ZTFkMzBlNDYzMTM5ODE1YzZmZDRmZDVhYzViODE3MmE0NTIzMGVjYjYzMThhMDRmMTQ1NWQ4NGU1YThiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIxYmRjNmU3Yzk4ZmI4Y2Y1NGU5YjA5N2I2NmE4MzFlOWNmZTUyZDlkNDg4ODQ0OGVlNGIwOTc4MDkzYmExZDdkNzNhZTc4YjNhNjJiYTRhZDk1Y2QyODljY2I5ZTAwNTIyNmJiM2QxNzhiY2NhYTgyMWZiMDQ0YTRlMjFlZTk3Njk2YzE0ZDA2NzhjOTRjMmRhZTkzYjBhZDczOTIyMjE4NTUzZGFhN2U0NGViZTU3NzI1YTdhNDVjYzcyYjliMjEzOGE2YjE3YzhkYjQxMWNlODI3OWVlMTI0MWFmZjBhOGJlYzZmNzdmODdlZGIwYzY5Y2IyNzIzNmUzNDM1YTgwMGIxOTJlNGYxMWU1MTllM2ZlMzBmYzMwZWFjY2NhNGZiYjQxNzY5MDI5YmY3MDhlODE3YTllNjgzODA1YmU2N2ZhMTAwOTg0NjgzYjc0ODM4ZTNiY2ZmYTc5MzY2ZWVkMWQ0ODFjNzY3MjkxMTg4MzhmMzFiYThhMDQ4YTkzYzFiZTQ0MjQ1OThlOGRmNjMyOGI3YTc3ODgwYTNmOWM3ZTJlOGRmY2E4ZWI1YTI2ZmI4NmJkYzU1NmQ0MmJiZTAxZDlmYTZlZDgwNjQ2NDkxYzkzNDEiOiJkNjg5MjU3YTg2ZWZmYTY4MjEyYzVlMGM2MTllY2EyOTVmYjkxYjY3IjoiODIxMDJkZjhjYjkxZTcxNzk5MTlhMDRkMjZkMzM1ZDY0ZmJjMmY4NzJjNDQ4MzM5NDMyNDFkZTg0NTQ4MTAyNzRjZGYzZGI1ZjQyZDQyM2RiMTUyYWY3MTM1ZjcwMTQyMGUzOWI0OTRhNjdjYmZkMTlmOTExOWRhMjMzYTIzZGE1YzY0MzliNWJhMGQyYmMzNzNlZWUzNTA3MDAxMzc4ZDRhNDA3Mzg1NmI3ZmUyYWJhMGI1ZWU5M2IyN2Y0YWZlYzdkNGQxMjA5MjFjODNmNjA2NzY1YjAyYzE5ZTRkNmExYTNiOTVmYTRjNDIyOTUxYmU0ZjUyMTMxMDc3ZWYxNzE3OTcyOWNkZGZiZGI1Njk1MGRiYWNlZWZlNzhjYjE2NjQwYTA5OWVhNTZkMjQzODllZWYxMGY4ZmVjYjMxYmEzZWEzYjIyN2MwYTg2Njk4YmI4OWUzZTkzNjM5MDViZjIyNzc3YjJhM2FhNTIxYjY1YjRjZWY3NmQ4M2JkZTRjIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOV82Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTUzNjoxNjoiZjhlYjk3ZTk4ZGYxMjY2NGVlZmRiNzYxNTk2YTY5ZGRjZDBlNzZkYWVjZTZlZDRiZjVhMWI1MGFjMDg2Zjc5MjhhNGQyZjg3MjZhNzdlNTE1Yjc0ZGE0MTk4OGYyMjBiMWNjODdhYTFmYzgxMGNlOTlhODJmMmQxY2U4MjFlZGNlZDc5NGM2OTQxZjQyYzdhMWEwYjhjNGQyOGM3NWVjNjBiNjUyMjc5ZjYxNTRhNzYyYWVkMTY1ZDQ3ZGVlMzY3IjoxNjoiZWQ0ZDcxZDBhNmUyNGI5M2MyZTVmNmI0YmJlMDVmNWZiMGFmYTA0MmQyMDRmZTMzNzhkMzY1YzJmMjg4YjZhOGRhZDdlZmU0NWQxNTNlZWY0MGNhY2M3YjgxZmY5MzQwMDJkMTA4OTk0Yjk0YTVlNDcyOGNkOWM5NjMzNzVhZTQ5OTY1YmRhNTVjYmYwZWZlZDhkNjU1M2I0MDI3ZjJkODYyMDhhNmU2YjQ4OWMxNzYxMjgwOTJkNjI5ZTQ5ZDNkIjoxNjoiZTZiZDY5MmFjOTY2NDU3OTA0MDNmZGQwZjViZWI4YjliZjkyZWQxMDAwN2ZjMzY1MDQ2NDE5ZGQwNmMwNWM1YjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgzNTI2OTFjNTI0ZjZkZDhlNmMyOWQyMjRjZjI0Njk3M2FlYzg2YzViZjZiMTQwMWE4NTBkMWI5YWQxYmI4Y2JjZWM0N2IwNmYwZjhjN2Y0NWQzZmM4ZjMxOTI5OWM1NDMzZGRiYzJiMzA1M2I0N2RlZDJlY2Q0YTRjYWVmZDYxNDgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDI3MzU3ZTFkMzBlNDYzMTM5ODE1YzZmZDRmZDVhYzViODE3MmE0NTIzMGVjYjYzMThhMDRmMTQ1NWQ4NGU1YThiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4OGM3YTlmMTM2MDQwMWQ5MGU1M2IxMDFiNjFjNTMyNWMzYzc1ZGIxYjQxMWZiZWI4ZTgzMGI3NWU5NmI1NjY3MGFkMjQ1NDA0ZTE2NzkzNTQ0ZWUzNTRiYzYxM2E5MGNjOTg0ODcxNWE3M2RiNTg5M2U3ZjZkMjc5ODE1YzBjMWRlODNlZjhlMjk1NmUzYTU2ZWQyNmE4ODhkN2E5Y2RjZDA0MmY0YjE2YjdmYTUxZWYxYTA1NzM2NjJkMTZhMzAyZDBlYzViMjg1ZDJlMDNhZDk2NTI5Yzg3YjNkMzc0ZGIzNzJkOTViMjQ0M2QwNjFiNmIxYTM1MGJhODc4MDdlZDA4M2FmZDFlYjA1YzNmNTJmNGViYTVlZDIyMjc3MTRmZGI1MGI5ZDlkOWRkNjgxNGY2MmY2MjcyZmNkNWNkYmNlN2E5ZWY3OTciOiJjMjVmMTNiZjY3ZDA4MTY3MWEwNDgxYTFmMTgyMGQ2MTNiYmEyMjc2IjoiYTdmZGIwZDI1OTE2NWNhMmM4OGQwMGJiZjEwMjhhODY3ZDMzNzY5OWQwNjExOTNiMTdhOTY0OGUxNGNjYmJhYWRlYWNhYWNkZWM4MTVlNzU3MTI5NGViYjhhMTE3YWYyMDVmYTA3OGI0N2IwNzEyYzE5OWUzYWQwNTEzNWM1MDRjMjRiODE3MDUxMTU3NDA4MDI0ODc5OTJmZmQ1MTFkNGFmYzZiODU0NDkxZWIzZjBkZDUyMzEzOTU0MmZmMTVjMzEwMWVlODU1NDM1MTdjNmEzYzc5NDE3YzY3ZTJkZDlhYTc0MWU5YTI5YjA2ZGNiNTkzYzIzMzZiMzY3MGFlM2FmYmFjN2MzZTc2ZTIxNTQ3M2U4NjZlMzM4Y2EyNDRkZTAwYjYyNjI0ZDZiOTQyNjgyMmNlYWU5ZjhjYzQ2MDg5NWY0MTI1MDA3M2ZkNDVjNWExZTdiNDI1YzIwNGE0MjNhNjk5MTU5ZjY5MDNlNzEwYjM3YTdiYjJiYzgwNDlmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOV82ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxNTM2OjE2OiJlNmJkNjkyYWM5NjY0NTc5MDQwM2ZkZDBmNWJlYjhiOWJmOTJlZDEwMDA3ZmMzNjUwNDY0MTlkZDA2YzA1YzViNWIyZjQ4ZWNmOTg5ZTRjZTI2OTEwOTk3OWNiYjQwYjRhMGFkMjRkMjI0ODNkMWVlMzE1YWQ0Y2NiMTUzNDI2ODM1MjY5MWM1MjRmNmRkOGU2YzI5ZDIyNGNmMjQ2OTczYWVjODZjNWJmNmIxNDAxYTg1MGQxYjlhZDFiYjhjYmNlYzQ3YjA2ZjBmOGM3ZjQ1ZDNmYzhmMzE5Mjk5YzU0MzNkZGJjMmIzMDUzYjQ3ZGVkMmVjZDRhNGNhZWZkNjE0ODMzZGM4YmI2MjJmMzE3ZWQwNzZiODA1N2ZlOGRlM2Y4NDQ4MGFkNWU4M2U0YTYxOTA0YTRmMjQ4ZmIzOTcwMjczNTdlMWQzMGU0NjMxMzk4MTVjNmZkNGZkNWFjNWI4MTcyYTQ1MjMwZWNiNjMxOGEwNGYxNDU1ZDg0ZTVhOGIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijg4YzdhOWYxMzYwNDAxZDkwZTUzYjEwMWI2MWM1MzI1YzNjNzVkYjFiNDExZmJlYjhlODMwYjc1ZTk2YjU2NjcwYWQyNDU0MDRlMTY3OTM1NDRlZTM1NGJjNjEzYTkwY2M5ODQ4NzE1YTczZGI1ODkzZTdmNmQyNzk4MTVjMGMxZGU4M2VmOGUyOTU2ZTNhNTZlZDI2YTg4OGQ3YTljZGNkMDQyZjRiMTZiN2ZhNTFlZjFhMDU3MzY2MmQxNmEzMDJkMGVjNWIyODVkMmUwM2FkOTY1MjljODdiM2QzNzRkYjM3MmQ5NWIyNDQzZDA2MWI2YjFhMzUwYmE4NzgwN2VkMDgzYWZkMWViMDVjM2Y1MmY0ZWJhNWVkMjIyNzcxNGZkYjUwYjlkOWQ5ZGQ2ODE0ZjYyZjYyNzJmY2Q1Y2RiY2U3YTllZjc5NyI6ImMyNWYxM2JmNjdkMDgxNjcxYTA0ODFhMWYxODIwZDYxM2JiYTIyNzYiOiJhN2ZkYjBkMjU5MTY1Y2EyYzg4ZDAwYmJmMTAyOGE4NjdkMzM3Njk5ZDA2MTE5M2IxN2E5NjQ4ZTE0Y2NiYmFhZGVhY2FhY2RlYzgxNWU3NTcxMjk0ZWJiOGExMTdhZjIwNWZhMDc4YjQ3YjA3MTJjMTk5ZTNhZDA1MTM1YzUwNGMyNGI4MTcwNTExNTc0MDgwMjQ4Nzk5MmZmZDUxMWQ0YWZjNmI4NTQ0OTFlYjNmMGRkNTIzMTM5NTQyZmYxNWMzMTAxZWU4NTU0MzUxN2M2YTNjNzk0MTdjNjdlMmRkOWFhNzQxZTlhMjliMDZkY2I1OTNjMjMzNmIzNjcwYWUzYWZiYWM3YzNlNzZlMjE1NDczZTg2NmUzMzhjYTI0NGRlMDBiNjI2MjRkNmI5NDI2ODIyY2VhZTlmOGNjNDYwODk1ZjQxMjUwMDczZmQ0NWM1YTFlN2I0MjVjMjA0YTQyM2E2OTkxNTlmNjkwM2U3MTBiMzdhN2JiMmJjODA0OWYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxMF8xCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MjA0ODoxNjoiY2ZkNTAyODNmZWVlYjk3ZjZmMDhkNzNjYmM3YjM4MzZmODJiYmNkNDk5NDc5ZjVlNmY3NmZkZmNiOGIzOGM0ZjcxZGM5ZTg4YmQ2YTZmNzYzNzFhZmQ2NWQyYWYxODYyYjMyYWZiMzRhOTVmNzFiOGIxMzIwNDNmZmViZTNhOTUyYmFmNzU5MjQ0ODE0OGMwM2Y5YzY5YjFkNjhlNGNlNWNmMzJjODZiYWY0NmZlZDMwMWNhMWFiNDAzMDY5YjMyZjQ1NmI5MWY3MTg5OGFiMDgxY2Q4YzQyNTJlZjUyNzE5MTVjOTc5NGI4ZjI5NTg1MWRhNzUxMGY5OWNiNzNlYiI6MTY6ImNjNGU5MGQyYTFiM2EwNjVkM2IyZDFmNWE4ZmNlMzFiNTQ0NDc1NjY0ZWFiNTYxZDI5NzFiOTlmYjdiZWY4NDRlOGVjMWYzNjBiOGMyYWM4MzU5NjkyOTcxZWE2YTM4ZjcyM2ZjYzIxMWY1ZGJjYjE3N2EwZmRhYzUxNjRhMWQ0ZmY3ZmJiNGU4Mjk5ODYzNTNjYjk4MzY1OWExNDhjZGQ0MjBjN2QzMWJhMzgyMmVhOTBhMzJiZTQ2YzAzMGU4YzE3ZTFmYTBhZDM3ODU5ZTA2YjBhYTZmYTNiMjE2ZDljYmU2YzBlMjIzMzk3NjljMGE2MTU5MTNlNWRhNzE5Y2YiOjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiODgzMTc3ZTUxMjZiOWJlMmQ5YTk2ODAzMjdkNTM3MGM2ZjI2ODYxZjU4MjBjNDNkYTY3YTNhZDYwOSI6IjA0ZTIxNWVlNmZmOTM0YjlkYTcwZDc3MzBjODczNGFiZmNlY2RlODkiOiI4MmMyYjE2MDA5M2I4YWEzYzBmNzUyMmIxOWY4NzM1NDA2NmM3Nzg0N2FiZjJhOWZjZTU0MmQwZTg0ZTkyMGM1YWZiNDlmZmRmZGFjZTE2NTYwZWU5NGExMzY5NjAxMTQ4ZWJhZDdhMGUxNTFjZjE2MzMxNzkxYTU3MjdkMDVmMjFlNzRlN2ViODExNDQwMjA2OTM1ZDc0NDc2NWExNWU3OWYwMTVjYjY2YzUzMmM4N2E2YTA1OTYxYzhiZmFkNzQxYTlhNjY1NzAyMjg5NDM5M2U3MjIzNzM5Nzk2YzAyYTc3NDU1ZDBmNTU1YjBlYzAxZGRmMjU5YjYyMDdmZDBmZDU3NjE0Y2VmMWE1NTczYmFhZmY0ZWMwMDA2OTk1MTY1OWI4NWYyNDMwMGEyNTE2MGNhODUyMmRjNmU2NzI3ZTU3ZDAxOWQ3ZTYzNjI5YjhmZTVlODllMjVjYzE1YmViM2E2NDc1Nzc1NTkyOTkyODBiOWIyOGY3OWIwNDA5MDAwYmUyNWJiZDk2NDA4YmEzYjQzY2M0ODYxODRkZDFjOGU2MjU1M2ZhMWFmNDA0MGY2MDY2M2RlN2Y1ZTQ5YzA0Mzg4ZTI1N2YxY2U4OWM5NWRhYjQ4YTMxNWQ5YjY2YjFiNzYyODIzMzg3NmZmMjM4NTIzMGQwNzBkMDdlMTY2NiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDEwXzEgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjIwNDg6MTY6ImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTU3YjliZTdhYzczYjQ1YzAwMTc2MTViODJkNjIyZTMxODc1M2I2MDI3YzBmZDE1N2JlMTJmODA5MGZlZTJhN2FkY2QwZWVmNzU5Zjg4YmE0OTk3YzdhNDJkNThjOWFhMTJjYjk5YWUwMDFmZTUyMWMxM2JiNTQzMTQ0NWE4ZDVhZTRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEyMTIwYjMxYTVkYTVkYWJjOTU1MDYwMGUyMGYyN2QzNzM5ZTI2Mjc5MjVmZWEzY2M1MDlmMjFkZmYwNGU2ZWVhNDU0OWM1NDBkNjgwOWZmOTMwN2VlZGU5MWZmZjU4NzMzZDgzODVhMjM3ZDZkMzcwNWEzM2UzOTE5MDA5OTIwNzBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAxYTczODE5OGVlMjdjZjU1YTEzYjc1NDUzOTkwNjU4MmVjOGIxNzRiZDU4ZDVkMWYzZDc2N2M2MTM3MjFhZTA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4ODMxNzdlNTEyNmI5YmUyZDlhOTY4MDMyN2Q1MzcwYzZmMjY4NjFmNTgyMGM0M2RhNjdhM2FkNjA5IjoiMDRlMjE1ZWU2ZmY5MzRiOWRhNzBkNzczMGM4NzM0YWJmY2VjZGU4OSI6IjgyYzJiMTYwMDkzYjhhYTNjMGY3NTIyYjE5Zjg3MzU0MDY2Yzc3ODQ3YWJmMmE5ZmNlNTQyZDBlODRlOTIwYzVhZmI0OWZmZGZkYWNlMTY1NjBlZTk0YTEzNjk2MDExNDhlYmFkN2EwZTE1MWNmMTYzMzE3OTFhNTcyN2QwNWYyMWU3NGU3ZWI4MTE0NDAyMDY5MzVkNzQ0NzY1YTE1ZTc5ZjAxNWNiNjZjNTMyYzg3YTZhMDU5NjFjOGJmYWQ3NDFhOWE2NjU3MDIyODk0MzkzZTcyMjM3Mzk3OTZjMDJhNzc0NTVkMGY1NTViMGVjMDFkZGYyNTliNjIwN2ZkMGZkNTc2MTRjZWYxYTU1NzNiYWFmZjRlYzAwMDY5OTUxNjU5Yjg1ZjI0MzAwYTI1MTYwY2E4NTIyZGM2ZTY3MjdlNTdkMDE5ZDdlNjM2MjliOGZlNWU4OWUyNWNjMTViZWIzYTY0NzU3NzU1OTI5OTI4MGI5YjI4Zjc5YjA0MDkwMDBiZTI1YmJkOTY0MDhiYTNiNDNjYzQ4NjE4NGRkMWM4ZTYyNTUzZmExYWY0MDQwZjYwNjYzZGU3ZjVlNDljMDQzODhlMjU3ZjFjZTg5Yzk1ZGFiNDhhMzE1ZDliNjZiMWI3NjI4MjMzODc2ZmYyMzg1MjMwZDA3MGQwN2UxNjY2IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMTBfMgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjIwNDg6MTY6ImNmZDUwMjgzZmVlZWI5N2Y2ZjA4ZDczY2JjN2IzODM2ZjgyYmJjZDQ5OTQ3OWY1ZTZmNzZmZGZjYjhiMzhjNGY3MWRjOWU4OGJkNmE2Zjc2MzcxYWZkNjVkMmFmMTg2MmIzMmFmYjM0YTk1ZjcxYjhiMTMyMDQzZmZlYmUzYTk1MmJhZjc1OTI0NDgxNDhjMDNmOWM2OWIxZDY4ZTRjZTVjZjMyYzg2YmFmNDZmZWQzMDFjYTFhYjQwMzA2OWIzMmY0NTZiOTFmNzE4OThhYjA4MWNkOGM0MjUyZWY1MjcxOTE1Yzk3OTRiOGYyOTU4NTFkYTc1MTBmOTljYjczZWIiOjE2OiJjYzRlOTBkMmExYjNhMDY1ZDNiMmQxZjVhOGZjZTMxYjU0NDQ3NTY2NGVhYjU2MWQyOTcxYjk5ZmI3YmVmODQ0ZThlYzFmMzYwYjhjMmFjODM1OTY5Mjk3MWVhNmEzOGY3MjNmY2MyMTFmNWRiY2IxNzdhMGZkYWM1MTY0YTFkNGZmN2ZiYjRlODI5OTg2MzUzY2I5ODM2NTlhMTQ4Y2RkNDIwYzdkMzFiYTM4MjJlYTkwYTMyYmU0NmMwMzBlOGMxN2UxZmEwYWQzNzg1OWUwNmIwYWE2ZmEzYjIxNmQ5Y2JlNmMwZTIyMzM5NzY5YzBhNjE1OTEzZTVkYTcxOWNmIjoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImRkNjcwYTAxNDY1ODY4YWRjOTNmMjYxMzE5NTdhNTBjNTJmYjc3N2NkYmFhMzA4OTJjOWUxMjM2MTE2NGVjMTM5NzlkNDMwNDgxMThlNDQ0NWRiODdiZWU1OGRkOTg3YjM0MjVkMDIwNzFkOGRiYWU4MDcwOGIwMzlkYmI2NGRiZDFkZTU2NTdkOWZlZDBjMTE4YTU0MTQzNzQyZTBmZjNjODdmNzRlNDU4NTc2NDdhZjNmNzllYjBhMTRjOWQ3NWVhOWExYTA0YjdjZjQ3OGE4OTdhNzA4ZmQ5ODhmNDhlODAxZWRiMGI3MDM5ZGY4YzIzYmIzYzU2ZjRlODIxYWMiOiI4YjJiZGQ0YjQwZmFmNTQ1Yzc3OGRkZjliYzFhNDljYjU3ZjliNzFiIjoiMTRhZTM1ZDlkZDA2YmE5MmY3ZjNiODk3OTc4YWVkN2NkNGJmNWZmMGI1ODVhNDBiZDQ2Y2UxYjQyY2QyNzAzMDUzYmI5MDQ0ZDY0ZTgxM2Q4Zjk2ZGIyZGQ3MDA3ZDEwMTE4ZjZmOGY4NDk2MDk3YWQ3NWUxZmY2OTIzNDFiMjg5MmFkNTVhNjMzYTFjNTVlN2YwYTBhZDU5YTBlMjAzYTViODI3OGFlYzU0ZGQ4NjIyZTI4MzFkODcxNzRmOGNhZmY0M2VlNmM0NjQ0NTM0NWQ4NGE1OTY1OWJmYjkyZWNkNGM4MTg2Njg2OTVmMzQ3MDZmNjY4MjhhODk5NTk2MzdmMmJmM2UzMjUxYzI0YmRiYTRkNGI3NjQ5ZGEwMDIyMjE4YjExOWM4NGU3OWE2NTI3ZWM1YjhhNWY4NjFjMTU5OTUyZTIzZWMwNWUxZTcxNzM0NmZhZWZlOGIxNjg2ODI1YmQyYjI2MmZiMjUzMTA2NmMwZGUwOWFjZGUyZTQyMzE2OTA3MjhiNWQ4NWUxMTVhMmY2YjkyYjc5YzI1YWJjOWJkOTM5OWZmOGJjZjgyNWE1MmVhMWY1NmVhNzZkZDI2ZjQzYmFhZmExOGJmYTkyYTUwNGNiZDM1Njk5ZTI2ZDFkY2M1YTI4ODczODVmM2M2MzIzMmYwNmYzMjQ0YzMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxMF8yICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToyMDQ4OjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZGQ2NzBhMDE0NjU4NjhhZGM5M2YyNjEzMTk1N2E1MGM1MmZiNzc3Y2RiYWEzMDg5MmM5ZTEyMzYxMTY0ZWMxMzk3OWQ0MzA0ODExOGU0NDQ1ZGI4N2JlZTU4ZGQ5ODdiMzQyNWQwMjA3MWQ4ZGJhZTgwNzA4YjAzOWRiYjY0ZGJkMWRlNTY1N2Q5ZmVkMGMxMThhNTQxNDM3NDJlMGZmM2M4N2Y3NGU0NTg1NzY0N2FmM2Y3OWViMGExNGM5ZDc1ZWE5YTFhMDRiN2NmNDc4YTg5N2E3MDhmZDk4OGY0OGU4MDFlZGIwYjcwMzlkZjhjMjNiYjNjNTZmNGU4MjFhYyI6IjhiMmJkZDRiNDBmYWY1NDVjNzc4ZGRmOWJjMWE0OWNiNTdmOWI3MWIiOiIxNGFlMzVkOWRkMDZiYTkyZjdmM2I4OTc5NzhhZWQ3Y2Q0YmY1ZmYwYjU4NWE0MGJkNDZjZTFiNDJjZDI3MDMwNTNiYjkwNDRkNjRlODEzZDhmOTZkYjJkZDcwMDdkMTAxMThmNmY4Zjg0OTYwOTdhZDc1ZTFmZjY5MjM0MWIyODkyYWQ1NWE2MzNhMWM1NWU3ZjBhMGFkNTlhMGUyMDNhNWI4Mjc4YWVjNTRkZDg2MjJlMjgzMWQ4NzE3NGY4Y2FmZjQzZWU2YzQ2NDQ1MzQ1ZDg0YTU5NjU5YmZiOTJlY2Q0YzgxODY2ODY5NWYzNDcwNmY2NjgyOGE4OTk1OTYzN2YyYmYzZTMyNTFjMjRiZGJhNGQ0Yjc2NDlkYTAwMjIyMThiMTE5Yzg0ZTc5YTY1MjdlYzViOGE1Zjg2MWMxNTk5NTJlMjNlYzA1ZTFlNzE3MzQ2ZmFlZmU4YjE2ODY4MjViZDJiMjYyZmIyNTMxMDY2YzBkZTA5YWNkZTJlNDIzMTY5MDcyOGI1ZDg1ZTExNWEyZjZiOTJiNzljMjVhYmM5YmQ5Mzk5ZmY4YmNmODI1YTUyZWExZjU2ZWE3NmRkMjZmNDNiYWFmYTE4YmZhOTJhNTA0Y2JkMzU2OTllMjZkMWRjYzVhMjg4NzM4NWYzYzYzMjMyZjA2ZjMyNDRjMyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDEwXzMKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoyMDQ4OjE2OiJjZmQ1MDI4M2ZlZWViOTdmNmYwOGQ3M2NiYzdiMzgzNmY4MmJiY2Q0OTk0NzlmNWU2Zjc2ZmRmY2I4YjM4YzRmNzFkYzllODhiZDZhNmY3NjM3MWFmZDY1ZDJhZjE4NjJiMzJhZmIzNGE5NWY3MWI4YjEzMjA0M2ZmZWJlM2E5NTJiYWY3NTkyNDQ4MTQ4YzAzZjljNjliMWQ2OGU0Y2U1Y2YzMmM4NmJhZjQ2ZmVkMzAxY2ExYWI0MDMwNjliMzJmNDU2YjkxZjcxODk4YWIwODFjZDhjNDI1MmVmNTI3MTkxNWM5Nzk0YjhmMjk1ODUxZGE3NTEwZjk5Y2I3M2ViIjoxNjoiY2M0ZTkwZDJhMWIzYTA2NWQzYjJkMWY1YThmY2UzMWI1NDQ0NzU2NjRlYWI1NjFkMjk3MWI5OWZiN2JlZjg0NGU4ZWMxZjM2MGI4YzJhYzgzNTk2OTI5NzFlYTZhMzhmNzIzZmNjMjExZjVkYmNiMTc3YTBmZGFjNTE2NGExZDRmZjdmYmI0ZTgyOTk4NjM1M2NiOTgzNjU5YTE0OGNkZDQyMGM3ZDMxYmEzODIyZWE5MGEzMmJlNDZjMDMwZThjMTdlMWZhMGFkMzc4NTllMDZiMGFhNmZhM2IyMTZkOWNiZTZjMGUyMjMzOTc2OWMwYTYxNTkxM2U1ZGE3MTljZiI6MTY6ImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTU3YjliZTdhYzczYjQ1YzAwMTc2MTViODJkNjIyZTMxODc1M2I2MDI3YzBmZDE1N2JlMTJmODA5MGZlZTJhN2FkY2QwZWVmNzU5Zjg4YmE0OTk3YzdhNDJkNThjOWFhMTJjYjk5YWUwMDFmZTUyMWMxM2JiNTQzMTQ0NWE4ZDVhZTRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEyMTIwYjMxYTVkYTVkYWJjOTU1MDYwMGUyMGYyN2QzNzM5ZTI2Mjc5MjVmZWEzY2M1MDlmMjFkZmYwNGU2ZWVhNDU0OWM1NDBkNjgwOWZmOTMwN2VlZGU5MWZmZjU4NzMzZDgzODVhMjM3ZDZkMzcwNWEzM2UzOTE5MDA5OTIwNzBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAxYTczODE5OGVlMjdjZjU1YTEzYjc1NDUzOTkwNjU4MmVjOGIxNzRiZDU4ZDVkMWYzZDc2N2M2MTM3MjFhZTA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI0OGIyYjZhNTdhNjNjODRjZWE4NTlkNjVjNjY4Mjg0YjA4ZDk2YmRjYWFiZTI1MmRiMGU0YTk2Y2IxYmFjNjAxOTM0MWRiNmZiZWZiOGQxMDZiMGU5MGVkYTZiY2M2YzYyNjJmMzdlN2VhOWM3ZTVkMjI2YmQ3ZGY4NWVjNWU3MWVmZmYyZjU0YzVkYjU3N2ZmNzI5ZmY5MWI4NDI0OTFkZTI3NDFkMGM2MzE2MDdkZjU4NmI5MDViMjNiOTFhZjEzZGExMjMwNGJmODNlY2E4YTczZTg3MWZmOWRiIjoiNGU5NmZjMWIzOThmOTJiNDQ2NzEwMTBjMGRjM2VmZDZlMjBjMmQ3MyI6IjZlM2U0ZDdiNmIxNWQyZmI0NjAxM2I4OTAwYWE1YmJiMzkzOWNmMmMwOTU3MTc5ODcwNDIwMjZlZTYyYzc0YzU0Y2ZmZDVkN2Q1N2VmYmJmOTUwYTBmNWM1NzRmYTA5ZDNmYzFjOWY1MTNiMDViNGZmNTBkZDhkZjdlZGZhMjAxMDI4NTRjMzVlNTkyMTgwMTE5YTcwY2U1YjA4NTE4MmFhMDJkOWVhMmFhOTBkMWRmMDNmMmRhYWU4ODViYTJmNWQwNWFmZGFjOTc0NzZmMDZiOTNiNWJjOTRhMWE4MGFhOTExNmM0ZDYxNWYzMzNiMDk4ODkyYjI1ZmZhY2UyNjZmNWRiNWE1YTNiY2MxMGE4MjRlZDU1YWFkMzViNzI3ODM0ZmI4YzA3ZGEyOGZjZjQxNmE1ZDliMjIyNGYxZjhiNDQyYjM2ZjkxZTQ1NmZkZWEyZDdjZmUzMzY3MjY4ZGUwMzA3YTRjNzRlOTI0MTU5ZWQzMzM5M2Q1ZTA2NTU1MzFjNzczMjdiODk4MjFiZGVkZjg4MDE2MWM3OGNkNDE5NmI1NDE5ZjdhY2MzZjEzZTVlYmYxNjFiNmU3YzY3MjQ3MTZjYTMzYjg1YzJlMjU2NDAxOTJhYzI4NTk2NTFkNTBiZGU3ZWI5NzZlNTFjZWM4MjhiOThiNjU2M2I4NmJiIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMTBfMyAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MjA0ODoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjQ4YjJiNmE1N2E2M2M4NGNlYTg1OWQ2NWM2NjgyODRiMDhkOTZiZGNhYWJlMjUyZGIwZTRhOTZjYjFiYWM2MDE5MzQxZGI2ZmJlZmI4ZDEwNmIwZTkwZWRhNmJjYzZjNjI2MmYzN2U3ZWE5YzdlNWQyMjZiZDdkZjg1ZWM1ZTcxZWZmZjJmNTRjNWRiNTc3ZmY3MjlmZjkxYjg0MjQ5MWRlMjc0MWQwYzYzMTYwN2RmNTg2YjkwNWIyM2I5MWFmMTNkYTEyMzA0YmY4M2VjYThhNzNlODcxZmY5ZGIiOiI0ZTk2ZmMxYjM5OGY5MmI0NDY3MTAxMGMwZGMzZWZkNmUyMGMyZDczIjoiNmUzZTRkN2I2YjE1ZDJmYjQ2MDEzYjg5MDBhYTViYmIzOTM5Y2YyYzA5NTcxNzk4NzA0MjAyNmVlNjJjNzRjNTRjZmZkNWQ3ZDU3ZWZiYmY5NTBhMGY1YzU3NGZhMDlkM2ZjMWM5ZjUxM2IwNWI0ZmY1MGRkOGRmN2VkZmEyMDEwMjg1NGMzNWU1OTIxODAxMTlhNzBjZTViMDg1MTgyYWEwMmQ5ZWEyYWE5MGQxZGYwM2YyZGFhZTg4NWJhMmY1ZDA1YWZkYWM5NzQ3NmYwNmI5M2I1YmM5NGExYTgwYWE5MTE2YzRkNjE1ZjMzM2IwOTg4OTJiMjVmZmFjZTI2NmY1ZGI1YTVhM2JjYzEwYTgyNGVkNTVhYWQzNWI3Mjc4MzRmYjhjMDdkYTI4ZmNmNDE2YTVkOWIyMjI0ZjFmOGI0NDJiMzZmOTFlNDU2ZmRlYTJkN2NmZTMzNjcyNjhkZTAzMDdhNGM3NGU5MjQxNTllZDMzMzkzZDVlMDY1NTUzMWM3NzMyN2I4OTgyMWJkZWRmODgwMTYxYzc4Y2Q0MTk2YjU0MTlmN2FjYzNmMTNlNWViZjE2MWI2ZTdjNjcyNDcxNmNhMzNiODVjMmUyNTY0MDE5MmFjMjg1OTY1MWQ1MGJkZTdlYjk3NmU1MWNlYzgyOGI5OGI2NTYzYjg2YmIiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxMF80Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MjA0ODoxNjoiY2ZkNTAyODNmZWVlYjk3ZjZmMDhkNzNjYmM3YjM4MzZmODJiYmNkNDk5NDc5ZjVlNmY3NmZkZmNiOGIzOGM0ZjcxZGM5ZTg4YmQ2YTZmNzYzNzFhZmQ2NWQyYWYxODYyYjMyYWZiMzRhOTVmNzFiOGIxMzIwNDNmZmViZTNhOTUyYmFmNzU5MjQ0ODE0OGMwM2Y5YzY5YjFkNjhlNGNlNWNmMzJjODZiYWY0NmZlZDMwMWNhMWFiNDAzMDY5YjMyZjQ1NmI5MWY3MTg5OGFiMDgxY2Q4YzQyNTJlZjUyNzE5MTVjOTc5NGI4ZjI5NTg1MWRhNzUxMGY5OWNiNzNlYiI6MTY6ImNjNGU5MGQyYTFiM2EwNjVkM2IyZDFmNWE4ZmNlMzFiNTQ0NDc1NjY0ZWFiNTYxZDI5NzFiOTlmYjdiZWY4NDRlOGVjMWYzNjBiOGMyYWM4MzU5NjkyOTcxZWE2YTM4ZjcyM2ZjYzIxMWY1ZGJjYjE3N2EwZmRhYzUxNjRhMWQ0ZmY3ZmJiNGU4Mjk5ODYzNTNjYjk4MzY1OWExNDhjZGQ0MjBjN2QzMWJhMzgyMmVhOTBhMzJiZTQ2YzAzMGU4YzE3ZTFmYTBhZDM3ODU5ZTA2YjBhYTZmYTNiMjE2ZDljYmU2YzBlMjIzMzk3NjljMGE2MTU5MTNlNWRhNzE5Y2YiOjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMGI4Nzc3YzdmODM5YmFmMGE2NGJiYmRiYzVjZTc5NzU1YzU3YTIwNWI4NDVjMTc0ZTJkMmU5MDU0NmEwODljNGU2ZWM4YWRmZmEyM2E3ZWE5N2JhZTZiNjVkNzgyYjgyZGI1ZDJiNWE1NmQyMmEyOWEwNWU3YzQ0MzNlMmI4MmE2MjFhYmJhOTBhZGQwNWNlMzkzZmM0OGE4NDA1NDI0NTFhIjoiYzdjZDY5OGQ4NGI2NTEyOGQ4ODM1ZTNhOGIxZWIwZTAxY2I1NDFlYyI6IjM0MDQ3ZmY5NmM0ZGMwZGM5MGIyZDRmZjU5YTFhMzYxYTQ3NTRiMjU1ZDJlZTBhZjdkOGJmODdjOWJjOWU3ZGRlZWRlMzM5MzRjNjNjYTFjMGUzZDI2MmNiMTQ1ZWY5MzJhMWYyYzBhOTk3YWE2YTM0ZjhlYWVlNzQ3N2Q4MmNjZjA5MDk1YTZiOGFjYWQzOGQ0ZWVjOWZiN2VhYjdhZDAyZGExZDExZDhlNTRjMTgyNWU1NWJmNThjMmEyMzIzNGI5MDJiZTEyNGY5ZTkwMzhhOGY2OGZhNDVkYWI3MmY2NmUwOTQ1YmYxZDhiYWNjOTA0NGM2ZjA3MDk4YzlmY2VjNThhM2FhYjEwMGM4MDUxNzgxNTVmMDMwYTEyNGM0NTBlNWFjYmRhNDdkMGU0ZjEwYjgwYTIzZjgwM2U3NzRkMDIzYjAwMTVjMjBiOWY5YmJlN2M5MTI5NjMzOGQ1ZWNiNDcxY2FmYjAzMjAwN2I2N2E2MGJlNWY2OTUwNGE5ZjAxYWJiM2NiNDY3YjI2MGUyYmNlODYwYmU4ZDk1YmY5MmMwYzhlMTQ5NmVkMWU1Mjg1OTNhNGFiYjZkZjQ2MmRkZThhMDk2OGRmZmU0NjgzMTE2ODU3YTIzMmY1ZWJmNmM4NWJlMjM4NzQ1YWQwZjM4Zjc2N2E1ZmRiZjQ4NmZiIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMTBfNCAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MjA0ODoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjBiODc3N2M3ZjgzOWJhZjBhNjRiYmJkYmM1Y2U3OTc1NWM1N2EyMDViODQ1YzE3NGUyZDJlOTA1NDZhMDg5YzRlNmVjOGFkZmZhMjNhN2VhOTdiYWU2YjY1ZDc4MmI4MmRiNWQyYjVhNTZkMjJhMjlhMDVlN2M0NDMzZTJiODJhNjIxYWJiYTkwYWRkMDVjZTM5M2ZjNDhhODQwNTQyNDUxYSI6ImM3Y2Q2OThkODRiNjUxMjhkODgzNWUzYThiMWViMGUwMWNiNTQxZWMiOiIzNDA0N2ZmOTZjNGRjMGRjOTBiMmQ0ZmY1OWExYTM2MWE0NzU0YjI1NWQyZWUwYWY3ZDhiZjg3YzliYzllN2RkZWVkZTMzOTM0YzYzY2ExYzBlM2QyNjJjYjE0NWVmOTMyYTFmMmMwYTk5N2FhNmEzNGY4ZWFlZTc0NzdkODJjY2YwOTA5NWE2YjhhY2FkMzhkNGVlYzlmYjdlYWI3YWQwMmRhMWQxMWQ4ZTU0YzE4MjVlNTViZjU4YzJhMjMyMzRiOTAyYmUxMjRmOWU5MDM4YThmNjhmYTQ1ZGFiNzJmNjZlMDk0NWJmMWQ4YmFjYzkwNDRjNmYwNzA5OGM5ZmNlYzU4YTNhYWIxMDBjODA1MTc4MTU1ZjAzMGExMjRjNDUwZTVhY2JkYTQ3ZDBlNGYxMGI4MGEyM2Y4MDNlNzc0ZDAyM2IwMDE1YzIwYjlmOWJiZTdjOTEyOTYzMzhkNWVjYjQ3MWNhZmIwMzIwMDdiNjdhNjBiZTVmNjk1MDRhOWYwMWFiYjNjYjQ2N2IyNjBlMmJjZTg2MGJlOGQ5NWJmOTJjMGM4ZTE0OTZlZDFlNTI4NTkzYTRhYmI2ZGY0NjJkZGU4YTA5NjhkZmZlNDY4MzExNjg1N2EyMzJmNWViZjZjODViZTIzODc0NWFkMGYzOGY3NjdhNWZkYmY0ODZmYiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDEwXzUKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoyMDQ4OjE2OiJjZmQ1MDI4M2ZlZWViOTdmNmYwOGQ3M2NiYzdiMzgzNmY4MmJiY2Q0OTk0NzlmNWU2Zjc2ZmRmY2I4YjM4YzRmNzFkYzllODhiZDZhNmY3NjM3MWFmZDY1ZDJhZjE4NjJiMzJhZmIzNGE5NWY3MWI4YjEzMjA0M2ZmZWJlM2E5NTJiYWY3NTkyNDQ4MTQ4YzAzZjljNjliMWQ2OGU0Y2U1Y2YzMmM4NmJhZjQ2ZmVkMzAxY2ExYWI0MDMwNjliMzJmNDU2YjkxZjcxODk4YWIwODFjZDhjNDI1MmVmNTI3MTkxNWM5Nzk0YjhmMjk1ODUxZGE3NTEwZjk5Y2I3M2ViIjoxNjoiY2M0ZTkwZDJhMWIzYTA2NWQzYjJkMWY1YThmY2UzMWI1NDQ0NzU2NjRlYWI1NjFkMjk3MWI5OWZiN2JlZjg0NGU4ZWMxZjM2MGI4YzJhYzgzNTk2OTI5NzFlYTZhMzhmNzIzZmNjMjExZjVkYmNiMTc3YTBmZGFjNTE2NGExZDRmZjdmYmI0ZTgyOTk4NjM1M2NiOTgzNjU5YTE0OGNkZDQyMGM3ZDMxYmEzODIyZWE5MGEzMmJlNDZjMDMwZThjMTdlMWZhMGFkMzc4NTllMDZiMGFhNmZhM2IyMTZkOWNiZTZjMGUyMjMzOTc2OWMwYTYxNTkxM2U1ZGE3MTljZiI6MTY6ImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTU3YjliZTdhYzczYjQ1YzAwMTc2MTViODJkNjIyZTMxODc1M2I2MDI3YzBmZDE1N2JlMTJmODA5MGZlZTJhN2FkY2QwZWVmNzU5Zjg4YmE0OTk3YzdhNDJkNThjOWFhMTJjYjk5YWUwMDFmZTUyMWMxM2JiNTQzMTQ0NWE4ZDVhZTRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEyMTIwYjMxYTVkYTVkYWJjOTU1MDYwMGUyMGYyN2QzNzM5ZTI2Mjc5MjVmZWEzY2M1MDlmMjFkZmYwNGU2ZWVhNDU0OWM1NDBkNjgwOWZmOTMwN2VlZGU5MWZmZjU4NzMzZDgzODVhMjM3ZDZkMzcwNWEzM2UzOTE5MDA5OTIwNzBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAxYTczODE5OGVlMjdjZjU1YTEzYjc1NDUzOTkwNjU4MmVjOGIxNzRiZDU4ZDVkMWYzZDc2N2M2MTM3MjFhZTA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJmMTAzNmUwMDhlNzFlOTY0ZGFkYzkyMTllZDMwZTE3ZjA2YjRiNjhhOTU1YzE2YjMxMmIxZWRkZjAyOGI3NDk3NmJlZDZiM2Y2YTYzZDRlNzc4NTkyNDNjOWNjY2RjOTgwMTY1MjNhYmIwMjQ4M2IzNTU5MWMzM2FhZDgxMjEzYmI3YzdiYjFhNDcwYWFiYzEwZDQ0MjU2YzRkNDU1OWQ5MTYiOiJlZmE4YmZmOTYyMTJiMmY0YTNmMzcxYTEwZDU3NDE1MjY1NWY1ZGZiIjoiN2UwOTM1ZWExOGY0ZDZjMWQxN2NlODJlYjJiMzgzNmM1NWIzODQ1ODljZTE5ZGZlNzQzMzYzYWM5OTQ4ZDFmMzQ2YjdiZmRkZmU5MmVmZDc4YWRiMjFmYWVmYzg5YWRlNDJiMTBmMzc0MDAzZmUxMjJlNjc0MjlhMWNiOGNiZDFmOGQ5MDE0NTY0YzQ0ZDEyMDExNmY0OTkwZjFhNmUzODc3NGMxOTRiZDFiODIxMzI4NmIwNzdiMDQ5OWQyZTdiM2Y0MzRhYjEyMjg5YzU1NjY4NGRlZWQ3ODEzMTkzNGJiM2RkNjUzNzIzNmY3YzZmM2RjYjA5ZDQ3NmJlMDc3MjFlMzdlMWNlZWQ5YjJmN2I0MDY4ODdiZDUzMTU3MzA1ZTFjOGI0Zjg0ZDczM2JjMWUxODZmZTA2Y2M1OWI2ZWRiOGY0YmQ3ZmZlZmRmNGY3YmE5Y2ZiOWQ1NzA2ODliNWExYTQxMDlhNzQ2YTY5MDg5M2RiMzc5OTI1NWEwY2I5MjE1ZDJkMWNkNDkwNTkwZTk1MmU4Yzg3ODZhYTAwMTEyNjUyNTI0NzBjMDQxZGZiYzNlZWM3YzNjYmY3MWMyNDg2OWQxMTVjMGNiNGE5NTZmNTZkNTMwYjgwYWI1ODlhY2ZlZmM2OTA3NTFkZGYzNmU4ZDM4M2Y4M2NlZGQyY2MiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxMF81ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToyMDQ4OjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZjEwMzZlMDA4ZTcxZTk2NGRhZGM5MjE5ZWQzMGUxN2YwNmI0YjY4YTk1NWMxNmIzMTJiMWVkZGYwMjhiNzQ5NzZiZWQ2YjNmNmE2M2Q0ZTc3ODU5MjQzYzljY2NkYzk4MDE2NTIzYWJiMDI0ODNiMzU1OTFjMzNhYWQ4MTIxM2JiN2M3YmIxYTQ3MGFhYmMxMGQ0NDI1NmM0ZDQ1NTlkOTE2IjoiZWZhOGJmZjk2MjEyYjJmNGEzZjM3MWExMGQ1NzQxNTI2NTVmNWRmYiI6IjdlMDkzNWVhMThmNGQ2YzFkMTdjZTgyZWIyYjM4MzZjNTViMzg0NTg5Y2UxOWRmZTc0MzM2M2FjOTk0OGQxZjM0NmI3YmZkZGZlOTJlZmQ3OGFkYjIxZmFlZmM4OWFkZTQyYjEwZjM3NDAwM2ZlMTIyZTY3NDI5YTFjYjhjYmQxZjhkOTAxNDU2NGM0NGQxMjAxMTZmNDk5MGYxYTZlMzg3NzRjMTk0YmQxYjgyMTMyODZiMDc3YjA0OTlkMmU3YjNmNDM0YWIxMjI4OWM1NTY2ODRkZWVkNzgxMzE5MzRiYjNkZDY1MzcyMzZmN2M2ZjNkY2IwOWQ0NzZiZTA3NzIxZTM3ZTFjZWVkOWIyZjdiNDA2ODg3YmQ1MzE1NzMwNWUxYzhiNGY4NGQ3MzNiYzFlMTg2ZmUwNmNjNTliNmVkYjhmNGJkN2ZmZWZkZjRmN2JhOWNmYjlkNTcwNjg5YjVhMWE0MTA5YTc0NmE2OTA4OTNkYjM3OTkyNTVhMGNiOTIxNWQyZDFjZDQ5MDU5MGU5NTJlOGM4Nzg2YWEwMDExMjY1MjUyNDcwYzA0MWRmYmMzZWVjN2MzY2JmNzFjMjQ4NjlkMTE1YzBjYjRhOTU2ZjU2ZDUzMGI4MGFiNTg5YWNmZWZjNjkwNzUxZGRmMzZlOGQzODNmODNjZWRkMmNjIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMTBfNgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjIwNDg6MTY6ImNmZDUwMjgzZmVlZWI5N2Y2ZjA4ZDczY2JjN2IzODM2ZjgyYmJjZDQ5OTQ3OWY1ZTZmNzZmZGZjYjhiMzhjNGY3MWRjOWU4OGJkNmE2Zjc2MzcxYWZkNjVkMmFmMTg2MmIzMmFmYjM0YTk1ZjcxYjhiMTMyMDQzZmZlYmUzYTk1MmJhZjc1OTI0NDgxNDhjMDNmOWM2OWIxZDY4ZTRjZTVjZjMyYzg2YmFmNDZmZWQzMDFjYTFhYjQwMzA2OWIzMmY0NTZiOTFmNzE4OThhYjA4MWNkOGM0MjUyZWY1MjcxOTE1Yzk3OTRiOGYyOTU4NTFkYTc1MTBmOTljYjczZWIiOjE2OiJjYzRlOTBkMmExYjNhMDY1ZDNiMmQxZjVhOGZjZTMxYjU0NDQ3NTY2NGVhYjU2MWQyOTcxYjk5ZmI3YmVmODQ0ZThlYzFmMzYwYjhjMmFjODM1OTY5Mjk3MWVhNmEzOGY3MjNmY2MyMTFmNWRiY2IxNzdhMGZkYWM1MTY0YTFkNGZmN2ZiYjRlODI5OTg2MzUzY2I5ODM2NTlhMTQ4Y2RkNDIwYzdkMzFiYTM4MjJlYTkwYTMyYmU0NmMwMzBlOGMxN2UxZmEwYWQzNzg1OWUwNmIwYWE2ZmEzYjIxNmQ5Y2JlNmMwZTIyMzM5NzY5YzBhNjE1OTEzZTVkYTcxOWNmIjoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjI1ZjEwODk1YTg3NzE2YzEzNzQ1MGJiOTUxOWRmYWExZjIwN2ZhYTk0MmVhODhhYmY3MWU5YzE3OTgwMDg1YjU1NWFlYmFiNzYyNjRhZTJhM2FiOTNjMmQxMjk4MTE5MWRkYWM2ZmI1OTQ5ZWIzNmFlZTNjNWRhOTQwZjAwNzUyYzkxNmQ5NDYwOGZhN2Q5N2JhNmEyOTE1YjY4OGYyMDMyM2Q0ZTlkOTY4MDFkODlhNzJhYjU4OTJkYzIxMTdjMDc0MzRmY2Y5NzJlMDU4Y2Y4YzQxY2E0YjRmZjU1NGY3ZDUwNjhhZDMxNTVmY2VkMGYzMTI1YmMwNGY5MTkzMzc4YThmNWM0YzNiOGNiNGRkNmQxY2M2OWQzMGVjY2E2ZWFhNTFlMzZhMDU3MzBlOWUzNDJlODU1YmFmMDk5ZGVmYjhhZmQ3IjoiYWQ4YjE1MjM3MDM2NDYyMjRiNjYwYjU1MDg4NTkxN2NhMmQxZGYyOCI6IjZkM2I1Yjg3ZjY3ZWE2NTdhZjIxZjc1NDQxOTc3ZDIxODBmOTFiMmM1ZjY5MmRlODI5NTU2OTZhNjg2NzMwZDliOTc3OGQ5NzA3NThjY2IyNjA3MWMyMjA5ZmZiZDYxMjViZTJlOTZlYTgxYjY3Y2I5YjkzMDgyMzlmZGExN2Y3YjJiNjRlY2RhMDk2YjZiOTM1NjQwYTVhMWNiNDJhOTE1NWIxYzllZjdhNjMzYTAyYzU5ZjBkNmVlNTliODUyYzQzYjM1MDI5ZTczYzk0MGZmMDQxMGU4ZjExNGVlZDQ2YmJkMGZhZTE2NWU0MmJlMjUyOGE0MDFjM2IyOGZkODE4ZWYzMjMyZGNhOWY0ZDJhMGY1MTY2ZWM1OWM0MjM5NmQ2YzExZGJjMTIxNWE1NmZhMTcxNjlkYjk1NzUzNDNlZjM0ZjlkZTMyYTQ5Y2RjMzE3NDkyMmYyMjljMjNlMThlNDVkZjkzNTMxMTllYzQzMTljZWRjZTdhMTdjNjQwODhjMWY2ZjUyYmUyOTYzNDEwMGIzOTE5ZDM4ZjNkMWVkOTRlNjg5MWU2NmE3M2I4ZmI4NDlmNTg3NGRmNTk0NTllMjk4YzdiYmNlMmVlZTc4MmExOTVhYTY2ZmUyZDA3MzJiMjVlNTk1ZjU3ZDNlMDYxYjFmYzNlNDA2M2JmOThmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMTBfNiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MjA0ODoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjI1ZjEwODk1YTg3NzE2YzEzNzQ1MGJiOTUxOWRmYWExZjIwN2ZhYTk0MmVhODhhYmY3MWU5YzE3OTgwMDg1YjU1NWFlYmFiNzYyNjRhZTJhM2FiOTNjMmQxMjk4MTE5MWRkYWM2ZmI1OTQ5ZWIzNmFlZTNjNWRhOTQwZjAwNzUyYzkxNmQ5NDYwOGZhN2Q5N2JhNmEyOTE1YjY4OGYyMDMyM2Q0ZTlkOTY4MDFkODlhNzJhYjU4OTJkYzIxMTdjMDc0MzRmY2Y5NzJlMDU4Y2Y4YzQxY2E0YjRmZjU1NGY3ZDUwNjhhZDMxNTVmY2VkMGYzMTI1YmMwNGY5MTkzMzc4YThmNWM0YzNiOGNiNGRkNmQxY2M2OWQzMGVjY2E2ZWFhNTFlMzZhMDU3MzBlOWUzNDJlODU1YmFmMDk5ZGVmYjhhZmQ3IjoiYWQ4YjE1MjM3MDM2NDYyMjRiNjYwYjU1MDg4NTkxN2NhMmQxZGYyOCI6IjZkM2I1Yjg3ZjY3ZWE2NTdhZjIxZjc1NDQxOTc3ZDIxODBmOTFiMmM1ZjY5MmRlODI5NTU2OTZhNjg2NzMwZDliOTc3OGQ5NzA3NThjY2IyNjA3MWMyMjA5ZmZiZDYxMjViZTJlOTZlYTgxYjY3Y2I5YjkzMDgyMzlmZGExN2Y3YjJiNjRlY2RhMDk2YjZiOTM1NjQwYTVhMWNiNDJhOTE1NWIxYzllZjdhNjMzYTAyYzU5ZjBkNmVlNTliODUyYzQzYjM1MDI5ZTczYzk0MGZmMDQxMGU4ZjExNGVlZDQ2YmJkMGZhZTE2NWU0MmJlMjUyOGE0MDFjM2IyOGZkODE4ZWYzMjMyZGNhOWY0ZDJhMGY1MTY2ZWM1OWM0MjM5NmQ2YzExZGJjMTIxNWE1NmZhMTcxNjlkYjk1NzUzNDNlZjM0ZjlkZTMyYTQ5Y2RjMzE3NDkyMmYyMjljMjNlMThlNDVkZjkzNTMxMTllYzQzMTljZWRjZTdhMTdjNjQwODhjMWY2ZjUyYmUyOTYzNDEwMGIzOTE5ZDM4ZjNkMWVkOTRlNjg5MWU2NmE3M2I4ZmI4NDlmNTg3NGRmNTk0NTllMjk4YzdiYmNlMmVlZTc4MmExOTVhYTY2ZmUyZDA3MzJiMjVlNTk1ZjU3ZDNlMDYxYjFmYzNlNDA2M2JmOThmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIHZlcmlmeSBvcHRpb25zICMxIChPSykKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dDoyMDQ4OjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjA6IjI1ZjEwODk1YTg3NzE2YzEzNzQ1MGJiOTUxOWRmYWExZjIwN2ZhYTk0MmVhODhhYmY3MWU5YzE3OTgwMDg1YjU1NWFlYmFiNzYyNjRhZTJhM2FiOTNjMmQxMjk4MTE5MWRkYWM2ZmI1OTQ5ZWIzNmFlZTNjNWRhOTQwZjAwNzUyYzkxNmQ5NDYwOGZhN2Q5N2JhNmEyOTE1YjY4OGYyMDMyM2Q0ZTlkOTY4MDFkODlhNzJhYjU4OTJkYzIxMTdjMDc0MzRmY2Y5NzJlMDU4Y2Y4YzQxY2E0YjRmZjU1NGY3ZDUwNjhhZDMxNTVmY2VkMGYzMTI1YmMwNGY5MTkzMzc4YThmNWM0YzNiOGNiNGRkNmQxY2M2OWQzMGVjY2E2ZWFhNTFlMzZhMDU3MzBlOWUzNDJlODU1YmFmMDk5ZGVmYjhhZmQ3IjoiNmQzYjViODdmNjdlYTY1N2FmMjFmNzU0NDE5NzdkMjE4MGY5MWIyYzVmNjkyZGU4Mjk1NTY5NmE2ODY3MzBkOWI5Nzc4ZDk3MDc1OGNjYjI2MDcxYzIyMDlmZmJkNjEyNWJlMmU5NmVhODFiNjdjYjliOTMwODIzOWZkYTE3ZjdiMmI2NGVjZGEwOTZiNmI5MzU2NDBhNWExY2I0MmE5MTU1YjFjOWVmN2E2MzNhMDJjNTlmMGQ2ZWU1OWI4NTJjNDNiMzUwMjllNzNjOTQwZmYwNDEwZThmMTE0ZWVkNDZiYmQwZmFlMTY1ZTQyYmUyNTI4YTQwMWMzYjI4ZmQ4MThlZjMyMzJkY2E5ZjRkMmEwZjUxNjZlYzU5YzQyMzk2ZDZjMTFkYmMxMjE1YTU2ZmExNzE2OWRiOTU3NTM0M2VmMzRmOWRlMzJhNDljZGMzMTc0OTIyZjIyOWMyM2UxOGU0NWRmOTM1MzExOWVjNDMxOWNlZGNlN2ExN2M2NDA4OGMxZjZmNTJiZTI5NjM0MTAwYjM5MTlkMzhmM2QxZWQ5NGU2ODkxZTY2YTczYjhmYjg0OWY1ODc0ZGY1OTQ1OWUyOThjN2JiY2UyZWVlNzgyYTE5NWFhNjZmZTJkMDczMmIyNWU1OTVmNTdkM2UwNjFiMWZjM2U0MDYzYmY5OGYiOjA6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSB2ZXJpZnkgb3B0aW9ucyAjMiAoY3R4X2hhc2ggbm9uZSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dDoyMDQ4OjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfTk9ORTpNQkVEVExTX01EX1NIQTE6MjA6IjI1ZjEwODk1YTg3NzE2YzEzNzQ1MGJiOTUxOWRmYWExZjIwN2ZhYTk0MmVhODhhYmY3MWU5YzE3OTgwMDg1YjU1NWFlYmFiNzYyNjRhZTJhM2FiOTNjMmQxMjk4MTE5MWRkYWM2ZmI1OTQ5ZWIzNmFlZTNjNWRhOTQwZjAwNzUyYzkxNmQ5NDYwOGZhN2Q5N2JhNmEyOTE1YjY4OGYyMDMyM2Q0ZTlkOTY4MDFkODlhNzJhYjU4OTJkYzIxMTdjMDc0MzRmY2Y5NzJlMDU4Y2Y4YzQxY2E0YjRmZjU1NGY3ZDUwNjhhZDMxNTVmY2VkMGYzMTI1YmMwNGY5MTkzMzc4YThmNWM0YzNiOGNiNGRkNmQxY2M2OWQzMGVjY2E2ZWFhNTFlMzZhMDU3MzBlOWUzNDJlODU1YmFmMDk5ZGVmYjhhZmQ3IjoiNmQzYjViODdmNjdlYTY1N2FmMjFmNzU0NDE5NzdkMjE4MGY5MWIyYzVmNjkyZGU4Mjk1NTY5NmE2ODY3MzBkOWI5Nzc4ZDk3MDc1OGNjYjI2MDcxYzIyMDlmZmJkNjEyNWJlMmU5NmVhODFiNjdjYjliOTMwODIzOWZkYTE3ZjdiMmI2NGVjZGEwOTZiNmI5MzU2NDBhNWExY2I0MmE5MTU1YjFjOWVmN2E2MzNhMDJjNTlmMGQ2ZWU1OWI4NTJjNDNiMzUwMjllNzNjOTQwZmYwNDEwZThmMTE0ZWVkNDZiYmQwZmFlMTY1ZTQyYmUyNTI4YTQwMWMzYjI4ZmQ4MThlZjMyMzJkY2E5ZjRkMmEwZjUxNjZlYzU5YzQyMzk2ZDZjMTFkYmMxMjE1YTU2ZmExNzE2OWRiOTU3NTM0M2VmMzRmOWRlMzJhNDljZGMzMTc0OTIyZjIyOWMyM2UxOGU0NWRmOTM1MzExOWVjNDMxOWNlZGNlN2ExN2M2NDA4OGMxZjZmNTJiZTI5NjM0MTAwYjM5MTlkMzhmM2QxZWQ5NGU2ODkxZTY2YTczYjhmYjg0OWY1ODc0ZGY1OTQ1OWUyOThjN2JiY2UyZWVlNzgyYTE5NWFhNjZmZTJkMDczMmIyNWU1OTVmNTdkM2UwNjFiMWZjM2U0MDYzYmY5OGYiOjA6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSB2ZXJpZnkgb3B0aW9ucyAjMyAoY3R4X2hhc2ggZGl2ZXJnaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQ6MjA0ODoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX01EX1NIQTE6MjA6IjI1ZjEwODk1YTg3NzE2YzEzNzQ1MGJiOTUxOWRmYWExZjIwN2ZhYTk0MmVhODhhYmY3MWU5YzE3OTgwMDg1YjU1NWFlYmFiNzYyNjRhZTJhM2FiOTNjMmQxMjk4MTE5MWRkYWM2ZmI1OTQ5ZWIzNmFlZTNjNWRhOTQwZjAwNzUyYzkxNmQ5NDYwOGZhN2Q5N2JhNmEyOTE1YjY4OGYyMDMyM2Q0ZTlkOTY4MDFkODlhNzJhYjU4OTJkYzIxMTdjMDc0MzRmY2Y5NzJlMDU4Y2Y4YzQxY2E0YjRmZjU1NGY3ZDUwNjhhZDMxNTVmY2VkMGYzMTI1YmMwNGY5MTkzMzc4YThmNWM0YzNiOGNiNGRkNmQxY2M2OWQzMGVjY2E2ZWFhNTFlMzZhMDU3MzBlOWUzNDJlODU1YmFmMDk5ZGVmYjhhZmQ3IjoiNmQzYjViODdmNjdlYTY1N2FmMjFmNzU0NDE5NzdkMjE4MGY5MWIyYzVmNjkyZGU4Mjk1NTY5NmE2ODY3MzBkOWI5Nzc4ZDk3MDc1OGNjYjI2MDcxYzIyMDlmZmJkNjEyNWJlMmU5NmVhODFiNjdjYjliOTMwODIzOWZkYTE3ZjdiMmI2NGVjZGEwOTZiNmI5MzU2NDBhNWExY2I0MmE5MTU1YjFjOWVmN2E2MzNhMDJjNTlmMGQ2ZWU1OWI4NTJjNDNiMzUwMjllNzNjOTQwZmYwNDEwZThmMTE0ZWVkNDZiYmQwZmFlMTY1ZTQyYmUyNTI4YTQwMWMzYjI4ZmQ4MThlZjMyMzJkY2E5ZjRkMmEwZjUxNjZlYzU5YzQyMzk2ZDZjMTFkYmMxMjE1YTU2ZmExNzE2OWRiOTU3NTM0M2VmMzRmOWRlMzJhNDljZGMzMTc0OTIyZjIyOWMyM2UxOGU0NWRmOTM1MzExOWVjNDMxOWNlZGNlN2ExN2M2NDA4OGMxZjZmNTJiZTI5NjM0MTAwYjM5MTlkMzhmM2QxZWQ5NGU2ODkxZTY2YTczYjhmYjg0OWY1ODc0ZGY1OTQ1OWUyOThjN2JiY2UyZWVlNzgyYTE5NWFhNjZmZTJkMDczMmIyNWU1OTVmNTdkM2UwNjFiMWZjM2U0MDYzYmY5OGYiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkc6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSB2ZXJpZnkgb3B0aW9ucyAjNCAobWdmMV9oYXNoIGRpdmVyZ2luZykKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworcGtjczFfcnNhc3NhX3Bzc192ZXJpZnlfZXh0OjIwNDg6MTY6ImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTU3YjliZTdhYzczYjQ1YzAwMTc2MTViODJkNjIyZTMxODc1M2I2MDI3YzBmZDE1N2JlMTJmODA5MGZlZTJhN2FkY2QwZWVmNzU5Zjg4YmE0OTk3YzdhNDJkNThjOWFhMTJjYjk5YWUwMDFmZTUyMWMxM2JiNTQzMTQ0NWE4ZDVhZTRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEyMTIwYjMxYTVkYTVkYWJjOTU1MDYwMGUyMGYyN2QzNzM5ZTI2Mjc5MjVmZWEzY2M1MDlmMjFkZmYwNGU2ZWVhNDU0OWM1NDBkNjgwOWZmOTMwN2VlZGU5MWZmZjU4NzMzZDgzODVhMjM3ZDZkMzcwNWEzM2UzOTE5MDA5OTIwNzBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAxYTczODE5OGVlMjdjZjU1YTEzYjc1NDUzOTkwNjU4MmVjOGIxNzRiZDU4ZDVkMWYzZDc2N2M2MTM3MjFhZTA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOiIyNWYxMDg5NWE4NzcxNmMxMzc0NTBiYjk1MTlkZmFhMWYyMDdmYWE5NDJlYTg4YWJmNzFlOWMxNzk4MDA4NWI1NTVhZWJhYjc2MjY0YWUyYTNhYjkzYzJkMTI5ODExOTFkZGFjNmZiNTk0OWViMzZhZWUzYzVkYTk0MGYwMDc1MmM5MTZkOTQ2MDhmYTdkOTdiYTZhMjkxNWI2ODhmMjAzMjNkNGU5ZDk2ODAxZDg5YTcyYWI1ODkyZGMyMTE3YzA3NDM0ZmNmOTcyZTA1OGNmOGM0MWNhNGI0ZmY1NTRmN2Q1MDY4YWQzMTU1ZmNlZDBmMzEyNWJjMDRmOTE5MzM3OGE4ZjVjNGMzYjhjYjRkZDZkMWNjNjlkMzBlY2NhNmVhYTUxZTM2YTA1NzMwZTllMzQyZTg1NWJhZjA5OWRlZmI4YWZkNyI6IjZkM2I1Yjg3ZjY3ZWE2NTdhZjIxZjc1NDQxOTc3ZDIxODBmOTFiMmM1ZjY5MmRlODI5NTU2OTZhNjg2NzMwZDliOTc3OGQ5NzA3NThjY2IyNjA3MWMyMjA5ZmZiZDYxMjViZTJlOTZlYTgxYjY3Y2I5YjkzMDgyMzlmZGExN2Y3YjJiNjRlY2RhMDk2YjZiOTM1NjQwYTVhMWNiNDJhOTE1NWIxYzllZjdhNjMzYTAyYzU5ZjBkNmVlNTliODUyYzQzYjM1MDI5ZTczYzk0MGZmMDQxMGU4ZjExNGVlZDQ2YmJkMGZhZTE2NWU0MmJlMjUyOGE0MDFjM2IyOGZkODE4ZWYzMjMyZGNhOWY0ZDJhMGY1MTY2ZWM1OWM0MjM5NmQ2YzExZGJjMTIxNWE1NmZhMTcxNjlkYjk1NzUzNDNlZjM0ZjlkZTMyYTQ5Y2RjMzE3NDkyMmYyMjljMjNlMThlNDVkZjkzNTMxMTllYzQzMTljZWRjZTdhMTdjNjQwODhjMWY2ZjUyYmUyOTYzNDEwMGIzOTE5ZDM4ZjNkMWVkOTRlNjg5MWU2NmE3M2I4ZmI4NDlmNTg3NGRmNTk0NTllMjk4YzdiYmNlMmVlZTc4MmExOTVhYTY2ZmUyZDA3MzJiMjVlNTk1ZjU3ZDNlMDYxYjFmYzNlNDA2M2JmOThmIjowOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgdmVyaWZ5IG9wdGlvbnMgIzUgKHdyb25nIG1zZ19oYXNoKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQ6MjA0ODoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjA6IjI1ZjEwODk1YTg3NzE2YzEzNzQ1MGJiOTUxOWRmYWExZjIwN2ZhYTk0MmVhODhhYmY3MWU5YzE3OTgwMDg1YjU1NWFlYmFiNzYyNjRhZTJhM2FiOTNjMmQxMjk4MTE5MWRkYWM2ZmI1OTQ5ZWIzNmFlZTNjNWRhOTQwZjAwNzUyYzkxNmQ5NDYwOGZhN2Q5N2JhNmEyOTE1YjY4OGYyMDMyM2Q0ZTlkOTY4MDFkODlhNzJhYjU4OTJkYzIxMTdjMDc0MzRmY2Y5NzJlMDU4Y2Y4YzQxY2E0YjRmZjU1NGY3ZDUwNjhhZDMxNTVmY2VkMGYzMTI1YmMwNGY5MTkzMzc4YThmNWM0YzNiOGNiNGRkNmQxY2M2OWQzMGVjY2E2ZWFhNTFlMzZhMDU3MzBlOWUzNDJlODU1YmFmMDk5ZGVmYjhhZmQ3IjoiNmQzYjViODdmNjdlYTY1N2FmMjFmNzU0NDE5NzdkMjE4MGY5MWIyYzVmNjkyZGU4Mjk1NTY5NmE2ODY3MzBkOWI5Nzc4ZDk3MDc1OGNjYjI2MDcxYzIyMDlmZmJkNjEyNWJlMmU5NmVhODFiNjdjYjliOTMwODIzOWZkYTE3ZjdiMmI2NGVjZGEwOTZiNmI5MzU2NDBhNWExY2I0MmE5MTU1YjFjOWVmN2E2MzNhMDJjNTlmMGQ2ZWU1OWI4NTJjNDNiMzUwMjllNzNjOTQwZmYwNDEwZThmMTE0ZWVkNDZiYmQwZmFlMTY1ZTQyYmUyNTI4YTQwMWMzYjI4ZmQ4MThlZjMyMzJkY2E5ZjRkMmEwZjUxNjZlYzU5YzQyMzk2ZDZjMTFkYmMxMjE1YTU2ZmExNzE2OWRiOTU3NTM0M2VmMzRmOWRlMzJhNDljZGMzMTc0OTIyZjIyOWMyM2UxOGU0NWRmOTM1MzExOWVjNDMxOWNlZGNlN2ExN2M2NDA4OGMxZjZmNTJiZTI5NjM0MTAwYjM5MTlkMzhmM2QxZWQ5NGU2ODkxZTY2YTczYjhmYjg0OWY1ODc0ZGY1OTQ1OWUyOThjN2JiY2UyZWVlNzgyYTE5NWFhNjZmZTJkMDczMmIyNWU1OTVmNTdkM2UwNjFiMWZjM2U0MDYzYmY5OGYiOk1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEOk1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVECisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIHZlcmlmeSBvcHRpb25zICM2ICh3cm9uZyBleHBlY3RlZF9zYWx0X2xlbikKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dDoyMDQ4OjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjE6IjI1ZjEwODk1YTg3NzE2YzEzNzQ1MGJiOTUxOWRmYWExZjIwN2ZhYTk0MmVhODhhYmY3MWU5YzE3OTgwMDg1YjU1NWFlYmFiNzYyNjRhZTJhM2FiOTNjMmQxMjk4MTE5MWRkYWM2ZmI1OTQ5ZWIzNmFlZTNjNWRhOTQwZjAwNzUyYzkxNmQ5NDYwOGZhN2Q5N2JhNmEyOTE1YjY4OGYyMDMyM2Q0ZTlkOTY4MDFkODlhNzJhYjU4OTJkYzIxMTdjMDc0MzRmY2Y5NzJlMDU4Y2Y4YzQxY2E0YjRmZjU1NGY3ZDUwNjhhZDMxNTVmY2VkMGYzMTI1YmMwNGY5MTkzMzc4YThmNWM0YzNiOGNiNGRkNmQxY2M2OWQzMGVjY2E2ZWFhNTFlMzZhMDU3MzBlOWUzNDJlODU1YmFmMDk5ZGVmYjhhZmQ3IjoiNmQzYjViODdmNjdlYTY1N2FmMjFmNzU0NDE5NzdkMjE4MGY5MWIyYzVmNjkyZGU4Mjk1NTY5NmE2ODY3MzBkOWI5Nzc4ZDk3MDc1OGNjYjI2MDcxYzIyMDlmZmJkNjEyNWJlMmU5NmVhODFiNjdjYjliOTMwODIzOWZkYTE3ZjdiMmI2NGVjZGEwOTZiNmI5MzU2NDBhNWExY2I0MmE5MTU1YjFjOWVmN2E2MzNhMDJjNTlmMGQ2ZWU1OWI4NTJjNDNiMzUwMjllNzNjOTQwZmYwNDEwZThmMTE0ZWVkNDZiYmQwZmFlMTY1ZTQyYmUyNTI4YTQwMWMzYjI4ZmQ4MThlZjMyMzJkY2E5ZjRkMmEwZjUxNjZlYzU5YzQyMzk2ZDZjMTFkYmMxMjE1YTU2ZmExNzE2OWRiOTU3NTM0M2VmMzRmOWRlMzJhNDljZGMzMTc0OTIyZjIyOWMyM2UxOGU0NWRmOTM1MzExOWVjNDMxOWNlZGNlN2ExN2M2NDA4OGMxZjZmNTJiZTI5NjM0MTAwYjM5MTlkMzhmM2QxZWQ5NGU2ODkxZTY2YTczYjhmYjg0OWY1ODc0ZGY1OTQ1OWUyOThjN2JiY2UyZWVlNzgyYTE5NWFhNjZmZTJkMDczMmIyNWU1OTVmNTdkM2UwNjFiMWZjM2U0MDYzYmY5OGYiOjA6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0FTU0EtUFNTIFNpZ25hdHVyZSB2ZXJpZnkgb3B0aW9ucyAjNyAod3JvbmcgZXhwZWN0ZWRfc2FsdF9sZW4pCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQ6MjA0ODoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjE5OiIyNWYxMDg5NWE4NzcxNmMxMzc0NTBiYjk1MTlkZmFhMWYyMDdmYWE5NDJlYTg4YWJmNzFlOWMxNzk4MDA4NWI1NTVhZWJhYjc2MjY0YWUyYTNhYjkzYzJkMTI5ODExOTFkZGFjNmZiNTk0OWViMzZhZWUzYzVkYTk0MGYwMDc1MmM5MTZkOTQ2MDhmYTdkOTdiYTZhMjkxNWI2ODhmMjAzMjNkNGU5ZDk2ODAxZDg5YTcyYWI1ODkyZGMyMTE3YzA3NDM0ZmNmOTcyZTA1OGNmOGM0MWNhNGI0ZmY1NTRmN2Q1MDY4YWQzMTU1ZmNlZDBmMzEyNWJjMDRmOTE5MzM3OGE4ZjVjNGMzYjhjYjRkZDZkMWNjNjlkMzBlY2NhNmVhYTUxZTM2YTA1NzMwZTllMzQyZTg1NWJhZjA5OWRlZmI4YWZkNyI6IjZkM2I1Yjg3ZjY3ZWE2NTdhZjIxZjc1NDQxOTc3ZDIxODBmOTFiMmM1ZjY5MmRlODI5NTU2OTZhNjg2NzMwZDliOTc3OGQ5NzA3NThjY2IyNjA3MWMyMjA5ZmZiZDYxMjViZTJlOTZlYTgxYjY3Y2I5YjkzMDgyMzlmZGExN2Y3YjJiNjRlY2RhMDk2YjZiOTM1NjQwYTVhMWNiNDJhOTE1NWIxYzllZjdhNjMzYTAyYzU5ZjBkNmVlNTliODUyYzQzYjM1MDI5ZTczYzk0MGZmMDQxMGU4ZjExNGVlZDQ2YmJkMGZhZTE2NWU0MmJlMjUyOGE0MDFjM2IyOGZkODE4ZWYzMjMyZGNhOWY0ZDJhMGY1MTY2ZWM1OWM0MjM5NmQ2YzExZGJjMTIxNWE1NmZhMTcxNjlkYjk1NzUzNDNlZjM0ZjlkZTMyYTQ5Y2RjMzE3NDkyMmYyMjljMjNlMThlNDVkZjkzNTMxMTllYzQzMTljZWRjZTdhMTdjNjQwODhjMWY2ZjUyYmUyOTYzNDEwMGIzOTE5ZDM4ZjNkMWVkOTRlNjg5MWU2NmE3M2I4ZmI4NDlmNTg3NGRmNTk0NTllMjk4YzdiYmNlMmVlZTc4MmExOTVhYTY2ZmUyZDA3MzJiMjVlNTk1ZjU3ZDNlMDYxYjFmYzNlNDA2M2JmOThmIjowOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgdmVyaWZ5IG9wdGlvbnMgIzggKG5vbi1kZWZhdWx0IHNhbHRfbGVuOiBtYXgpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dDoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMjU2Ojk0OiI1NDY1NzM3NDIwNmQ2NTczNzM2MTY3NjUiOiIwZDJiZGIwNDU2YTNkNjUxZDViZDQ4YTQyMDQ0OTM4OThmNzJjZjFhYWRkZDcxMzg3Y2MwNThiYzNmNGMyMzVlYTZiZTQwMTBmZDYxYjI4ZTFmYmIyNzU0NjJiNTM3NzVjMDRiZTkwMjJkMzhiNmEyZTAzODdkZGRiYTg2YTNmODU1NGQyODU4MDQ0YTU5ZmRkYmQ1OTQ3NTNmYzA1NmZlMzNjOGRhZGRiODVkYzcwZDE2NDY5MGIxMTgyMjA5ZmY4NDgyNGUwYmUxMGUzNWMzNzlmMmYzNzhiZjE3NmE5ZjdjYjk0ZDk1ZTQ0ZDkwMjc2YTI5OGM4ODEwZjc0MWM5IjowOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgdmVyaWZ5IG9wdGlvbnMgIzkgKG5vbi1kZWZhdWx0IHNhbHRfbGVuOiAwKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQ6MTAyNDoxNjoiMDBkZDExOGE5Zjk5YmFiMDY4Y2EyYWVhM2I2YTZkNTk5N2VkNGVjOTU0ZTQwZGVlY2VhMDdkYTAxZWFhZTgwZWMyYmIxMzQwZGI4YTEyOGU4OTEzMjRhNWM1ZjVmYWQ4ZjU5MGQ3YzhjYWNiYzVmZTkzMWRhZmRhMTIyMzczNTI3OTQ2MWFiYWEwNTcyYjc2MTYzMWIzYThhZmU3Mzg5YjA4OGI2Mzk5M2EwYTI1ZWU0NWQyMTg1OGJhYjk5MzFhZWRkNDU4OWE2MzFiMzdmY2Y3MTQwODlmODU2NTQ5ZjM1OTMyNmRkMWUwZTg2ZGRlNTJlZDY2YjRhOTBiZGE0MDk1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX01EX1NIQTI1NjowOiI1NDY1NzM3NDIwNmQ2NTczNzM2MTY3NjUiOiI3ZmM1MDZkMjZjYTNiMjI5MjJhMWNlMzlmYWFlZGQyNzMxNjFiODJkOTQ0M2M1NmYxYTAzNGYxMzFhZTRhMThjYWUxNDc0MjcxY2I0YjY2YTE3ZDk3MDdjYTU4YjBiZGJkM2M0MDZiN2U2NWJiY2M5YmJiY2U5NGRjNDVkZTgwN2I0OTg5YjIzYjNlNGRiNzRjYTI5Mjk4MTM3ODM3ZWI5MGNjODNkMzIxOTI0OWJjN2Q0ODBmY2VhZjA3NTIwM2E4NmU1NGM0ZWNmYTRlMzEyZTM5ZjhmNjlkNzY1MzQwODlhMzZlZDkwNDljYTljZmQ1YWIxZGIxZmE3NWZlNWM4IjowOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgdmVyaWZ5IG9wdGlvbnMgIzEwIChub24tZGVmYXVsdCBzYWx0X2xlbjogMCwgQU5ZKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQ6MTAyNDoxNjoiMDBkZDExOGE5Zjk5YmFiMDY4Y2EyYWVhM2I2YTZkNTk5N2VkNGVjOTU0ZTQwZGVlY2VhMDdkYTAxZWFhZTgwZWMyYmIxMzQwZGI4YTEyOGU4OTEzMjRhNWM1ZjVmYWQ4ZjU5MGQ3YzhjYWNiYzVmZTkzMWRhZmRhMTIyMzczNTI3OTQ2MWFiYWEwNTcyYjc2MTYzMWIzYThhZmU3Mzg5YjA4OGI2Mzk5M2EwYTI1ZWU0NWQyMTg1OGJhYjk5MzFhZWRkNDU4OWE2MzFiMzdmY2Y3MTQwODlmODU2NTQ5ZjM1OTMyNmRkMWUwZTg2ZGRlNTJlZDY2YjRhOTBiZGE0MDk1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlk6IjU0NjU3Mzc0MjA2ZDY1NzM3MzYxNjc2NSI6IjdmYzUwNmQyNmNhM2IyMjkyMmExY2UzOWZhYWVkZDI3MzE2MWI4MmQ5NDQzYzU2ZjFhMDM0ZjEzMWFlNGExOGNhZTE0NzQyNzFjYjRiNjZhMTdkOTcwN2NhNThiMGJkYmQzYzQwNmI3ZTY1YmJjYzliYmJjZTk0ZGM0NWRlODA3YjQ5ODliMjNiM2U0ZGI3NGNhMjkyOTgxMzc4MzdlYjkwY2M4M2QzMjE5MjQ5YmM3ZDQ4MGZjZWFmMDc1MjAzYTg2ZTU0YzRlY2ZhNGUzMTJlMzlmOGY2OWQ3NjUzNDA4OWEzNmVkOTA0OWNhOWNmZDVhYjFkYjFmYTc1ZmU1YzgiOjA6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSB2ZXJpZnkgb3B0aW9ucyAjMTEgKE1HRjEgYWxnICE9IE1TRyBoYXNoIGFsZykKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworcGtjczFfcnNhc3NhX3Bzc192ZXJpZnlfZXh0OjEwMjQ6MTY6IjAwZGQxMThhOWY5OWJhYjA2OGNhMmFlYTNiNmE2ZDU5OTdlZDRlYzk1NGU0MGRlZWNlYTA3ZGEwMWVhYWU4MGVjMmJiMTM0MGRiOGExMjhlODkxMzI0YTVjNWY1ZmFkOGY1OTBkN2M4Y2FjYmM1ZmU5MzFkYWZkYTEyMjM3MzUyNzk0NjFhYmFhMDU3MmI3NjE2MzFiM2E4YWZlNzM4OWIwODhiNjM5OTNhMGEyNWVlNDVkMjE4NThiYWI5OTMxYWVkZDQ1ODlhNjMxYjM3ZmNmNzE0MDg5Zjg1NjU0OWYzNTkzMjZkZDFlMGU4NmRkZTUyZWQ2NmI0YTkwYmRhNDA5NSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9OT05FOk1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfUlNBX1NBTFRfTEVOX0FOWToiYzA3MTllOWE4ZDVkODM4ZDg2MWRjNmY2NzVjODk5ZDJiMzA5YTNhNjViYjlmZTZiMTFlNWFmY2JmOWEyYzBiMSI6IjdmYzUwNmQyNmNhM2IyMjkyMmExY2UzOWZhYWVkZDI3MzE2MWI4MmQ5NDQzYzU2ZjFhMDM0ZjEzMWFlNGExOGNhZTE0NzQyNzFjYjRiNjZhMTdkOTcwN2NhNThiMGJkYmQzYzQwNmI3ZTY1YmJjYzliYmJjZTk0ZGM0NWRlODA3YjQ5ODliMjNiM2U0ZGI3NGNhMjkyOTgxMzc4MzdlYjkwY2M4M2QzMjE5MjQ5YmM3ZDQ4MGZjZWFmMDc1MjAzYTg2ZTU0YzRlY2ZhNGUzMTJlMzlmOGY2OWQ3NjUzNDA4OWEzNmVkOTA0OWNhOWNmZDVhYjFkYjFmYTc1ZmU1YzgiOjA6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSB2ZXJpZnkgb3B0aW9ucyAjMTIgKE1HRjEgYWxnICE9IE1TRyBoYXNoIGFsZywgY3R4IHdyb25nKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQ6MTAyNDoxNjoiMDBkZDExOGE5Zjk5YmFiMDY4Y2EyYWVhM2I2YTZkNTk5N2VkNGVjOTU0ZTQwZGVlY2VhMDdkYTAxZWFhZTgwZWMyYmIxMzQwZGI4YTEyOGU4OTEzMjRhNWM1ZjVmYWQ4ZjU5MGQ3YzhjYWNiYzVmZTkzMWRhZmRhMTIyMzczNTI3OTQ2MWFiYWEwNTcyYjc2MTYzMWIzYThhZmU3Mzg5YjA4OGI2Mzk5M2EwYTI1ZWU0NWQyMTg1OGJhYjk5MzFhZWRkNDU4OWE2MzFiMzdmY2Y3MTQwODlmODU2NTQ5ZjM1OTMyNmRkMWUwZTg2ZGRlNTJlZDY2YjRhOTBiZGE0MDk1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX05PTkU6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfUlNBX1NBTFRfTEVOX0FOWToiYzA3MTllOWE4ZDVkODM4ZDg2MWRjNmY2NzVjODk5ZDJiMzA5YTNhNjViYjlmZTZiMTFlNWFmY2JmOWEyYzBiMSI6IjdmYzUwNmQyNmNhM2IyMjkyMmExY2UzOWZhYWVkZDI3MzE2MWI4MmQ5NDQzYzU2ZjFhMDM0ZjEzMWFlNGExOGNhZTE0NzQyNzFjYjRiNjZhMTdkOTcwN2NhNThiMGJkYmQzYzQwNmI3ZTY1YmJjYzliYmJjZTk0ZGM0NWRlODA3YjQ5ODliMjNiM2U0ZGI3NGNhMjkyOTgxMzc4MzdlYjkwY2M4M2QzMjE5MjQ5YmM3ZDQ4MGZjZWFmMDc1MjAzYTg2ZTU0YzRlY2ZhNGUzMTJlMzlmOGY2OWQ3NjUzNDA4OWEzNmVkOTA0OWNhOWNmZDVhYjFkYjFmYTc1ZmU1YzgiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkc6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSB2ZXJpZnkgb3B0aW9ucyAjMTMgKE1HRjEgYWxnICE9IE1TRyBoYXNoIGFsZywgYXJnIHdyb25nKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQ6MTAyNDoxNjoiMDBkZDExOGE5Zjk5YmFiMDY4Y2EyYWVhM2I2YTZkNTk5N2VkNGVjOTU0ZTQwZGVlY2VhMDdkYTAxZWFhZTgwZWMyYmIxMzQwZGI4YTEyOGU4OTEzMjRhNWM1ZjVmYWQ4ZjU5MGQ3YzhjYWNiYzVmZTkzMWRhZmRhMTIyMzczNTI3OTQ2MWFiYWEwNTcyYjc2MTYzMWIzYThhZmU3Mzg5YjA4OGI2Mzk5M2EwYTI1ZWU0NWQyMTg1OGJhYjk5MzFhZWRkNDU4OWE2MzFiMzdmY2Y3MTQwODlmODU2NTQ5ZjM1OTMyNmRkMWUwZTg2ZGRlNTJlZDY2YjRhOTBiZGE0MDk1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX05PTkU6TUJFRFRMU19NRF9TSEEyNTY6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfUlNBX1NBTFRfTEVOX0FOWToiYzA3MTllOWE4ZDVkODM4ZDg2MWRjNmY2NzVjODk5ZDJiMzA5YTNhNjViYjlmZTZiMTFlNWFmY2JmOWEyYzBiMSI6IjdmYzUwNmQyNmNhM2IyMjkyMmExY2UzOWZhYWVkZDI3MzE2MWI4MmQ5NDQzYzU2ZjFhMDM0ZjEzMWFlNGExOGNhZTE0NzQyNzFjYjRiNjZhMTdkOTcwN2NhNThiMGJkYmQzYzQwNmI3ZTY1YmJjYzliYmJjZTk0ZGM0NWRlODA3YjQ5ODliMjNiM2U0ZGI3NGNhMjkyOTgxMzc4MzdlYjkwY2M4M2QzMjE5MjQ5YmM3ZDQ4MGZjZWFmMDc1MjAzYTg2ZTU0YzRlY2ZhNGUzMTJlMzlmOGY2OWQ3NjUzNDA4OWEzNmVkOTA0OWNhOWNmZDVhYjFkYjFmYTc1ZmU1YzgiOjA6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjIxLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YyMS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjFmZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YyMS5mdW5jdGlvbgpAQCAtMCwwICsxLDI2NyBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YyMTpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQoIGludCBtb2QsIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLCBpbnQgcmFkaXhfRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9FLCBpbnQgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGNoYXIgKnNlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgcm5kX2J1ZlsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgbXNnX2xlbjsKKyAgICBybmRfYnVmX2luZm8gaW5mbzsKKworICAgIGluZm8ubGVuZ3RoID0gdW5oZXhpZnkoIHJuZF9idWYsIHNlZWQgKTsKKyAgICBpbmZvLmJ1ZiA9IHJuZF9idWY7CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBNQkVEVExTX1JTQV9QS0NTX1YyMSwgaGFzaCApOworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMHgwMCwgMTAwMCApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDggKyAoICggbW9kICUgOCApID8gMSA6IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoICZjdHggKSA9PSAwICk7CisKKyAgICBtc2dfbGVuID0gdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV9lbmNyeXB0KCAmY3R4LCAmcm5kX2J1ZmZlcl9yYW5kLCAmaW5mbywgTUJFRFRMU19SU0FfUFVCTElDLCBtc2dfbGVuLCBtZXNzYWdlX3N0ciwgb3V0cHV0ICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgubGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIG91dHB1dF9zdHIsIHJlc3VsdF9oZXhfc3RyICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHBrY3MxX3JzYWVzX29hZXBfZGVjcnlwdCggaW50IG1vZCwgaW50IHJhZGl4X1AsIGNoYXIgKmlucHV0X1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X1EsIGNoYXIgKmlucHV0X1EsIGludCByYWRpeF9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X04sIGludCByYWRpeF9FLCBjaGFyICppbnB1dF9FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoYXNoLCBjaGFyICpyZXN1bHRfaGV4X3N0ciwgY2hhciAqc2VlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIG1iZWR0bHNfbXBpIFAxLCBRMSwgSCwgRzsKKyAgICBzaXplX3Qgb3V0cHV0X2xlbjsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisgICAgKCh2b2lkKSBzZWVkKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZQMSApOyBtYmVkdGxzX21waV9pbml0KCAmUTEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkggKTsgbWJlZHRsc19tcGlfaW5pdCggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBNQkVEVExTX1JTQV9QS0NTX1YyMSwgaGFzaCApOworCisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDAsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgIGN0eC5sZW4gPSBtb2QgLyA4ICsgKCAoIG1vZCAlIDggKSA/IDEgOiAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlAsIHJhZGl4X1AsIGlucHV0X1AgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlEsIHJhZGl4X1EsIGlucHV0X1EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlAxLCAmY3R4LlAsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZRMSwgJmN0eC5RLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmSCwgJlAxLCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2djZCggJkcsICZjdHguRSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LkQgLCAmY3R4LkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC5EUCwgJmN0eC5ELCAmUDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHguRFEsICZjdHguRCwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LlFQLCAmY3R4LlEsICZjdHguUCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0KCAmY3R4LCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8sIE1CRURUTFNfUlNBX1BSSVZBVEUsICZvdXRwdXRfbGVuLCBtZXNzYWdlX3N0ciwgb3V0cHV0LCAxMDAwICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgubGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cm5jYXNlY21wKCAoY2hhciAqKSBvdXRwdXRfc3RyLCByZXN1bHRfaGV4X3N0ciwgc3RybGVuKCByZXN1bHRfaGV4X3N0ciApICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUDEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlExICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZIICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZHICk7CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBwa2NzMV9yc2Fzc2FfcHNzX3NpZ24oIGludCBtb2QsIGludCByYWRpeF9QLCBjaGFyICppbnB1dF9QLCBpbnQgcmFkaXhfUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9RLCBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwgaW50IGRpZ2VzdCwgaW50IGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBjaGFyICpzYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgcm5kX2J1ZlsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKKyAgICBtYmVkdGxzX21waSBQMSwgUTEsIEgsIEc7CisgICAgc2l6ZV90IG1zZ19sZW47CisgICAgcm5kX2J1Zl9pbmZvIGluZm87CisKKyAgICBpbmZvLmxlbmd0aCA9IHVuaGV4aWZ5KCBybmRfYnVmLCBzYWx0ICk7CisgICAgaW5mby5idWYgPSBybmRfYnVmOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlAxICk7IG1iZWR0bHNfbXBpX2luaXQoICZRMSApOyBtYmVkdGxzX21waV9pbml0KCAmSCApOyBtYmVkdGxzX21waV9pbml0KCAmRyApOworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIE1CRURUTFNfUlNBX1BLQ1NfVjIxLCBoYXNoICk7CisKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3Jlc3VsdCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gOCArICggKCBtb2QgJSA4ICkgPyAxIDogMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5QLCByYWRpeF9QLCBpbnB1dF9QICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5RLCByYWRpeF9RLCBpbnB1dF9RICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZQMSwgJmN0eC5QLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUTEsICZjdHguUSwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbXVsX21waSggJkgsICZQMSwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9nY2QoICZHLCAmY3R4LkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC5EICwgJmN0eC5FLCAmSCAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHguRFAsICZjdHguRCwgJlAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LkRRLCAmY3R4LkQsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC5RUCwgJmN0eC5RLCAmY3R4LlAgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggJmN0eCApID09IDAgKTsKKworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworCisgICAgaWYoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGRpZ2VzdCApICE9IE5VTEwgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZCggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggZGlnZXN0ICksIG1lc3NhZ2Vfc3RyLCBtc2dfbGVuLCBoYXNoX3Jlc3VsdCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV9zaWduKCAmY3R4LCAmcm5kX2J1ZmZlcl9yYW5kLCAmaW5mbywgTUJFRFRMU19SU0FfUFJJVkFURSwgZGlnZXN0LCAwLCBoYXNoX3Jlc3VsdCwgb3V0cHV0ICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgubGVuKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X2hleF9zdHIgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZQMSApOyBtYmVkdGxzX21waV9mcmVlKCAmUTEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkggKTsgbWJlZHRsc19tcGlfZnJlZSggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHBrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5KCBpbnQgbW9kLCBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwgaW50IHJhZGl4X0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9FLCBpbnQgZGlnZXN0LCBpbnQgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgY2hhciAqc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciByZXN1bHRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBtc2dfbGVuOworICAgICgodm9pZCkgc2FsdCk7CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBNQkVEVExTX1JTQV9QS0NTX1YyMSwgaGFzaCApOworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfcmVzdWx0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCByZXN1bHRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gOCArICggKCBtb2QgJSA4ICkgPyAxIDogMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggJmN0eCApID09IDAgKTsKKworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCByZXN1bHRfc3RyLCByZXN1bHRfaGV4X3N0ciApOworCisgICAgaWYoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGRpZ2VzdCApICE9IE5VTEwgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZCggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggZGlnZXN0ICksIG1lc3NhZ2Vfc3RyLCBtc2dfbGVuLCBoYXNoX3Jlc3VsdCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkoICZjdHgsIE5VTEwsIE5VTEwsIE1CRURUTFNfUlNBX1BVQkxJQywgZGlnZXN0LCAwLCBoYXNoX3Jlc3VsdCwgcmVzdWx0X3N0ciApID09IHJlc3VsdCApOworCitleGl0OgorICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcGtjczFfcnNhc3NhX3Bzc192ZXJpZnlfZXh0KCBpbnQgbW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9FLCBjaGFyICppbnB1dF9FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtc2dfZGlnZXN0X2lkLCBpbnQgY3R4X2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1nZl9oYXNoLCBpbnQgc2FsdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9oZXhfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRfc2ltcGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRfZnVsbCApCit7CisgICAgdW5zaWduZWQgY2hhciBtZXNzYWdlX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hfcmVzdWx0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0X3N0clsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgbXNnX2xlbiwgaGFzaF9sZW47CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBNQkVEVExTX1JTQV9QS0NTX1YyMSwgY3R4X2hhc2ggKTsKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3Jlc3VsdCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggcmVzdWx0X3N0ciwgMHgwMCwgMTAwMCApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDggKyAoICggbW9kICUgOCApID8gMSA6IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoICZjdHggKSA9PSAwICk7CisKKyAgICBtc2dfbGVuID0gdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggcmVzdWx0X3N0ciwgcmVzdWx0X2hleF9zdHIgKTsKKworICAgIGlmKCBtc2dfZGlnZXN0X2lkICE9IE1CRURUTFNfTURfTk9ORSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZCggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbXNnX2RpZ2VzdF9pZCApLAorICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9zdHIsIG1zZ19sZW4sIGhhc2hfcmVzdWx0ICkgPT0gMCApOworICAgICAgICBoYXNoX2xlbiA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1lbWNweSggaGFzaF9yZXN1bHQsIG1lc3NhZ2Vfc3RyLCBtc2dfbGVuICk7CisgICAgICAgIGhhc2hfbGVuID0gbXNnX2xlbjsKKyAgICB9CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5KCAmY3R4LCBOVUxMLCBOVUxMLCBNQkVEVExTX1JTQV9QVUJMSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19kaWdlc3RfaWQsIGhhc2hfbGVuLCBoYXNoX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N0ciApID09IHJlc3VsdF9zaW1wbGUgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQoICZjdHgsIE5VTEwsIE5VTEwsIE1CRURUTFNfUlNBX1BVQkxJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfZGlnZXN0X2lkLCBoYXNoX2xlbiwgaGFzaF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWdmX2hhc2gsIHNhbHRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdHIgKSA9PSByZXN1bHRfZnVsbCApOworCitleGl0OgorICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczUuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzNS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MDlkNjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczUuZGF0YQpAQCAtMCwwICsxLDEyNiBAQAorUEJLREYyIFJGQyA2MDcwIFRlc3QgVmVjdG9yICMxIChTSEExKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworcGJrZGYyX2htYWM6TUJFRFRMU19NRF9TSEExOiI3MDYxNzM3Mzc3NmY3MjY0IjoiNzM2MTZjNzQiOjE6MjA6IjBjNjBjODBmOTYxZjBlNzFmM2E5YjUyNGFmNjAxMjA2MmZlMDM3YTYiCisKK1BCS0RGMiBSRkMgNjA3MCBUZXN0IFZlY3RvciAjMiAoU0hBMSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK3Bia2RmMl9obWFjOk1CRURUTFNfTURfU0hBMToiNzA2MTczNzM3NzZmNzI2NCI6IjczNjE2Yzc0IjoyOjIwOiJlYTZjMDE0ZGM3MmQ2ZjhjY2QxZWQ5MmFjZTFkNDFmMGQ4ZGU4OTU3IgorCitQQktERjIgUkZDIDYwNzAgVGVzdCBWZWN0b3IgIzMgKFNIQTEpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitwYmtkZjJfaG1hYzpNQkVEVExTX01EX1NIQTE6IjcwNjE3MzczNzc2ZjcyNjQiOiI3MzYxNmM3NCI6NDA5NjoyMDoiNGIwMDc5MDFiNzY1NDg5YWJlYWQ0OWQ5MjZmNzIxZDA2NWE0MjljMSIKKworUEJLREYyIFJGQyA2MDcwIFRlc3QgVmVjdG9yICM1IChTSEExKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworcGJrZGYyX2htYWM6TUJFRFRMU19NRF9TSEExOiI3MDYxNzM3Mzc3NmY3MjY0NTA0MTUzNTM1NzRmNTI0NDcwNjE3MzczNzc2ZjcyNjQiOiI3MzYxNmM3NDUzNDE0YzU0NzM2MTZjNzQ1MzQxNGM1NDczNjE2Yzc0NTM0MTRjNTQ3MzYxNmM3NDUzNDE0YzU0NzM2MTZjNzQiOjQwOTY6MjU6IjNkMmVlYzRmZTQxYzg0OWI4MGM4ZDgzNjYyYzBlNDRhOGIyOTFhOTY0Y2YyZjA3MDM4IgorCitQQktERjIgUkZDIDYwNzAgVGVzdCBWZWN0b3IgIzYgKFNIQTEpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitwYmtkZjJfaG1hYzpNQkVEVExTX01EX1NIQTE6IjcwNjE3MzczMDA3NzZmNzI2NCI6IjczNjEwMDZjNzQiOjQwOTY6MTY6IjU2ZmE2YWE3NTU0ODA5OWRjYzM3ZDdmMDM0MjVlMGMzIgorCitQQkVTMiBEZWNyeXB0IChPSykKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMUIwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwRTA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMDE0MDYwODJBODY0ODg2RjcwRDAzMDcwNDA4OEE0RkNDOURDQzM5NDkxMCI6IjcwNjE3MzczNzc2ZjcyNjQiOiIxQjYwMDk4RDQ4MzRDQTc1MkQzN0I0MzBFNzBCN0EwODVDRkY4NkUyMUY0ODQ5Rjk2OUREMURGNjIzMzQyNjYyNDQzRjhCRDEyNTJCRjgzQ0VGNjkxNzU1MUIwOEVGNTVBNjlDOEYyQkZGQzkzQkNCMkRGRTJFMzU0REEyOEY4OTZEMUJEMUJGQjk3MkExMjUxMjE5QTZFQzcxODNCMEE0Q0YyQzQ5OTg0NDlFRDc4NkNBRTIxMzg0MzcyODlFQjIyMDM5NzQwMDBDMzg2MTlEQTU3QTRFNjg1RDI5NjQ5Mjg0NjAyQkQxODA2MTMxNzcyREExMUE2ODI2NzREQzIyQjJDRjEwOTEyOEREQjdGRDk4MEUxQzU3NDFGQzBEQjciOjA6IjMwODE4NzAyMDEwMDMwMTMwNjA3MkE4NjQ4Q0UzRDAyMDEwNjA4MkE4NjQ4Q0UzRDAzMDEwNzA0NkQzMDZCMDIwMTAxMDQyMEYxMkExMzIwNzYwMjcwQTgzQ0JGRkQ1M0Y2MDMxRUY3NkE1RDg2QzhBMjA0RjJDMzBDQTlFQkY1MUYwRjBFQTdBMTQ0MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRjA2MDYwNjA2MDYwNiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIHBhcmFtcyB0YWcpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfREVTX0MKK21iZWR0bHNfcGtjczVfcGJlczI6TUJFRFRMU19BU04xX1NFUVVFTkNFOiIiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRzoiIgorCitQQkVTMiBEZWNyeXB0IChiYWQgS0RGIEFsZ0lkOiBub3QgYSBzZXF1ZW5jZSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMxIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUc6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIEtERiBBbGdJZDogb3ZlcmxvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfREVTX0MKK21iZWR0bHNfcGtjczVfcGJlczI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOiIzMDAxIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEE6IiIKKworUEJFUzIgRGVjcnlwdCAoS0RGICE9IFBCS0RGMikKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMEIwNjA5MkE4NjQ4ODZGNzBEMDEwNTBEIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9GRUFUVVJFX1VOQVZBSUxBQkxFOiIiCisKK1BCRVMyIERlY3J5cHQgKGJhZCBQQktERjIgcGFyYW1zOiBub3QgYSBzZXF1ZW5jZSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMEQwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzEwMCI6IiI6IiI6TUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHOiIiCisKK1BCRVMyIERlY3J5cHQgKGJhZCBQQktERjIgcGFyYW1zOiBvdmVybG9uZykKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMEQwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwMSI6IiI6IiI6TUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBOiIiCisKK1BCRVMyIERlY3J5cHQgKGJhZCBQQktERjIgcGFyYW1zIHNhbHQ6IG5vdCBhbiBvY3RldCBzdHJpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK21iZWR0bHNfcGtjczVfcGJlczI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOiIzMDBFMDYwOTJBODY0ODg2RjcwRDAxMDUwQzMwMDEwNTAwIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUc6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIFBCS0RGMiBwYXJhbXMgc2FsdDogb3ZlcmxvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfREVTX0MKK21iZWR0bHNfcGtjczVfcGJlczI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOiIzMDBFMDYwOTJBODY0ODg2RjcwRDAxMDUwQzMwMDEwNDAxIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEE6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIFBCS0RGMiBwYXJhbXMgaXRlcjogbm90IGFuIGludCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMTkwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwQzA0MDgyRUQ3RjI0QTFENTE2REQ3MDMwMCI6IiI6IiI6TUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHOiIiCisKK1BCRVMyIERlY3J5cHQgKGJhZCBQQktERjIgcGFyYW1zIGl0ZXI6IG92ZXJsb25nKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxOTA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDBDMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAxIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEE6IiIKKworUEJFUzIgRGVjcnlwdCAoT0ssIFBCS0RGMiBwYXJhbXMgZXhwbGljaXQga2V5bGVuKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxRTA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDExMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDAyMDExODMwMTQwNjA4MkE4NjQ4ODZGNzBEMDMwNzA0MDg4QTRGQ0M5RENDMzk0OTEwIjoiNzA2MTczNzM3NzZmNzI2NCI6IjFCNjAwOThENDgzNENBNzUyRDM3QjQzMEU3MEI3QTA4NUNGRjg2RTIxRjQ4NDlGOTY5REQxREY2MjMzNDI2NjI0NDNGOEJEMTI1MkJGODNDRUY2OTE3NTUxQjA4RUY1NUE2OUM4RjJCRkZDOTNCQ0IyREZFMkUzNTREQTI4Rjg5NkQxQkQxQkZCOTcyQTEyNTEyMTlBNkVDNzE4M0IwQTRDRjJDNDk5ODQ0OUVENzg2Q0FFMjEzODQzNzI4OUVCMjIwMzk3NDAwMEMzODYxOURBNTdBNEU2ODVEMjk2NDkyODQ2MDJCRDE4MDYxMzE3NzJEQTExQTY4MjY3NERDMjJCMkNGMTA5MTI4RERCN0ZEOTgwRTFDNTc0MUZDMERCNyI6MDoiMzA4MTg3MDIwMTAwMzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDQ2RDMwNkIwMjAxMDEwNDIwRjEyQTEzMjA3NjAyNzBBODNDQkZGRDUzRjYwMzFFRjc2QTVEODZDOEEyMDRGMkMzMENBOUVCRjUxRjBGMEVBN0ExNDQwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGMDYwNjA2MDYwNjA2IgorCitQQkVTMiBEZWNyeXB0IChiYWQgUEJLREYyIHBhcmFtcyBleHBsaWNpdCBrZXlsZW46IG92ZXJsb25nKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxRDA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDEwMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDAyMDEiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQToiIgorCitQQkVTMiBEZWNyeXB0IChPSywgUEJLREYyIHBhcmFtcyBleHBsaWNpdCBwcmZfYWxnKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAyNzA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDFBMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDMwMEEwNjA4MkE4NjQ4ODZGNzBEMDIwNzMwMTQwNjA4MkE4NjQ4ODZGNzBEMDMwNzA0MDg4QTRGQ0M5RENDMzk0OTEwIjoiNzA2MTczNzM3NzZmNzI2NCI6IjFCNjAwOThENDgzNENBNzUyRDM3QjQzMEU3MEI3QTA4NUNGRjg2RTIxRjQ4NDlGOTY5REQxREY2MjMzNDI2NjI0NDNGOEJEMTI1MkJGODNDRUY2OTE3NTUxQjA4RUY1NUE2OUM4RjJCRkZDOTNCQ0IyREZFMkUzNTREQTI4Rjg5NkQxQkQxQkZCOTcyQTEyNTEyMTlBNkVDNzE4M0IwQTRDRjJDNDk5ODQ0OUVENzg2Q0FFMjEzODQzNzI4OUVCMjIwMzk3NDAwMEMzODYxOURBNTdBNEU2ODVEMjk2NDkyODQ2MDJCRDE4MDYxMzE3NzJEQTExQTY4MjY3NERDMjJCMkNGMTA5MTI4RERCN0ZEOTgwRTFDNTc0MUZDMERCNyI6MDoiMzA4MTg3MDIwMTAwMzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDQ2RDMwNkIwMjAxMDEwNDIwRjEyQTEzMjA3NjAyNzBBODNDQkZGRDUzRjYwMzFFRjc2QTVEODZDOEEyMDRGMkMzMENBOUVCRjUxRjBGMEVBN0ExNDQwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGMDYwNjA2MDYwNjA2IgorCitQQkVTMiBEZWNyeXB0IChiYWQsIFBCS0RGMiBwYXJhbXMgZXhwbGljaXQgcHJmX2FsZyBub3QgYSBzZXF1ZW5jZSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMUQwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAxMDA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMTAwIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUc6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkLCBQQktERjIgcGFyYW1zIGV4cGxpY2l0IHByZl9hbGcgb3ZlcmxvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfREVTX0MKK21iZWR0bHNfcGtjczVfcGJlczI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOiIzMDFEMDYwOTJBODY0ODg2RjcwRDAxMDUwQzMwMTAwNDA4MkVEN0YyNEExRDUxNkRENzAyMDIwODAwMzAwMSI6IiI6IiI6TUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBOiIiCisKK1BCRVMyIERlY3J5cHQgKGJhZCwgUEJLREYyIHBhcmFtcyBleHBsaWNpdCBwcmZfYWxnICE9IEhNQUMtU0hBMSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMjcwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAxQTA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMDBBMDYwODJBODY0ODg2RjcwRDAyMDgiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0ZFQVRVUkVfVU5BVkFJTEFCTEU6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkLCBQQktERjIgcGFyYW1zIGV4dHJhIGRhdGEpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfREVTX0MKK21iZWR0bHNfcGtjczVfcGJlczI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOiIzMDI4MDYwOTJBODY0ODg2RjcwRDAxMDUwQzMwMUIwNDA4MkVEN0YyNEExRDUxNkRENzAyMDIwODAwMzAwQTA2MDgyQTg2NDg4NkY3MEQwMjA3MDAiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0g6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIGVuY19zY2hlbWVfYWxnOiBub3QgYSBzZXF1ZW5jZSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMUIwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwRTA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMTAwIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUc6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIGVuY19zY2hlbWVfYWxnOiBvdmVybG9uZykKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMUIwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwRTA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMDAxIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEE6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIGVuY19zY2hlbWVfYWxnOiB1bmtub3duIG9pZCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMUIwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwRTA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMDBBMDYwODJBODY0ODg2RjcwRDAzRkYiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0ZFQVRVUkVfVU5BVkFJTEFCTEU6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIGVuY19zY2hlbWVfYWxnIHBhcmFtczogbm90IGFuIG9jdGV0IHN0cmluZykKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMUIwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwRTA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMDBDMDYwODJBODY0ODg2RjcwRDAzMDcwNTAwIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVDoiIgorCitQQkVTMiBEZWNyeXB0IChiYWQgZW5jX3NjaGVtZV9hbGcgcGFyYW1zOiBvdmVybG9uZykKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMUIwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwRTA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMDBDMDYwODJBODY0ODg2RjcwRDAzMDcwNDAxIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEE6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIGVuY19zY2hlbWVfYWxnIHBhcmFtczogbGVuICE9IGl2X2xlbikKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMUIwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwRTA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMDEzMDYwODJBODY0ODg2RjcwRDAzMDcwNDA3OEE0RkNDOURDQzM5NDkiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUOiIiCisKK1BCRVMyIERlY3J5cHQgKGJhZCBwYXNzd29yZCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMUIwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwRTA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMDE0MDYwODJBODY0ODg2RjcwRDAzMDcwNDA4OEE0RkNDOURDQzM5NDkxMCI6IkYwNjE3MzczNzc2ZjcyNjQiOiIxQjYwMDk4RDQ4MzRDQTc1MkQzN0I0MzBFNzBCN0EwODVDRkY4NkUyMUY0ODQ5Rjk2OUREMURGNjIzMzQyNjYyNDQzRjhCRDEyNTJCRjgzQ0VGNjkxNzU1MUIwOEVGNTVBNjlDOEYyQkZGQzkzQkNCMkRGRTJFMzU0REEyOEY4OTZEMUJEMUJGQjk3MkExMjUxMjE5QTZFQzcxODNCMEE0Q0YyQzQ5OTg0NDlFRDc4NkNBRTIxMzg0MzcyODlFQjIyMDM5NzQwMDBDMzg2MTlEQTU3QTRFNjg1RDI5NjQ5Mjg0NjAyQkQxODA2MTMxNzcyREExMUE2ODI2NzREQzIyQjJDRjEwOTEyOEREQjdGRDk4MEUxQzU3NDFGQzBEQjciOk1CRURUTFNfRVJSX1BLQ1M1X1BBU1NXT1JEX01JU01BVENIOiIzMDgxODcwMjAxMDAzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDcwNDZEMzA2QjAyMDEwMTA0MjBGMTJBMTMyMDc2MDI3MEE4M0NCRkZENTNGNjAzMUVGNzZBNUQ4NkM4QTIwNEYyQzMwQ0E5RUJGNTFGMEYwRUE3QTE0NDAzNDIwMDA0MzdDQzU2RDk3NjA5MUU1QTcyM0VDNzU5MkRGRjIwNkVFRTdDRjkwNjkxNzREMEFEMTRCNUY3NjgyMjU5NjI5MjRFRTUwMEQ4MjMxMUZGRUEyRkQyMzQ1RDVEMTZCRDhBODhDMjZCNzcwRDU1Q0Q4QTJBMEVGQTAxQzhCNEVERkYwNjA2MDYwNjA2MDYiCisKK1BCRVMyIERlY3J5cHQgKGJhZCBpdGVyIHZhbHVlKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxQjA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDBFMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMTMwMTQwNjA4MkE4NjQ4ODZGNzBEMDMwNzA0MDg4QTRGQ0M5RENDMzk0OTEwIjoiNzA2MTczNzM3NzZmNzI2NCI6IjFCNjAwOThENDgzNENBNzUyRDM3QjQzMEU3MEI3QTA4NUNGRjg2RTIxRjQ4NDlGOTY5REQxREY2MjMzNDI2NjI0NDNGOEJEMTI1MkJGODNDRUY2OTE3NTUxQjA4RUY1NUE2OUM4RjJCRkZDOTNCQ0IyREZFMkUzNTREQTI4Rjg5NkQxQkQxQkZCOTcyQTEyNTEyMTlBNkVDNzE4M0IwQTRDRjJDNDk5ODQ0OUVENzg2Q0FFMjEzODQzNzI4OUVCMjIwMzk3NDAwMEMzODYxOURBNTdBNEU2ODVEMjk2NDkyODQ2MDJCRDE4MDYxMzE3NzJEQTExQTY4MjY3NERDMjJCMkNGMTA5MTI4RERCN0ZEOTgwRTFDNTc0MUZDMERCNyI6TUJFRFRMU19FUlJfUEtDUzVfUEFTU1dPUkRfTUlTTUFUQ0g6IjMwODE4NzAyMDEwMDMwMTMwNjA3MkE4NjQ4Q0UzRDAyMDEwNjA4MkE4NjQ4Q0UzRDAzMDEwNzA0NkQzMDZCMDIwMTAxMDQyMEYxMkExMzIwNzYwMjcwQTgzQ0JGRkQ1M0Y2MDMxRUY3NkE1RDg2QzhBMjA0RjJDMzBDQTlFQkY1MUYwRjBFQTdBMTQ0MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRjA2MDYwNjA2MDYwNiIKKworUEtDUyM1IFNlbGZ0ZXN0Citwa2NzNV9zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzNS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzNS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmFiZWMwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3M1LmZ1bmN0aW9uCkBAIC0wLDAgKzEsODcgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvcGtjczUuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfUEtDUzVfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcGJrZGYyX2htYWMoIGludCBoYXNoLCBjaGFyICpoZXhfcGFzc3dvcmRfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NhbHRfc3RyaW5nLCBpbnQgaXRfY250LCBpbnQga2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9rZXlfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHB3X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc2FsdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IGN0eDsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqaW5mbzsKKworICAgIGludCBwd19sZW4sIHNhbHRfbGVuOworICAgIHVuc2lnbmVkIGNoYXIga2V5WzEwMF07CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZjdHggKTsKKworICAgIG1lbXNldChwd19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNhbHRfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworCisgICAgcHdfbGVuID0gdW5oZXhpZnkoIHB3X3N0ciwgaGV4X3Bhc3N3b3JkX3N0cmluZyApOworICAgIHNhbHRfbGVuID0gdW5oZXhpZnkoIHNhbHRfc3RyLCBoZXhfc2FsdF9zdHJpbmcgKTsKKworCisgICAgaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGhhc2ggKTsKKyAgICBURVNUX0FTU0VSVCggaW5mbyAhPSBOVUxMICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfc2V0dXAoICZjdHgsIGluZm8sIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtjczVfcGJrZGYyX2htYWMoICZjdHgsIHB3X3N0ciwgcHdfbGVuLCBzYWx0X3N0ciwgc2FsdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRfY250LCBrZXlfbGVuLCBrZXkgKSA9PSAwICk7CisKKyAgICBoZXhpZnkoIGRzdF9zdHIsIGtleSwga2V5X2xlbiApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIHJlc3VsdF9rZXlfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbWRfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX3BrY3M1X3BiZXMyKCBpbnQgcGFyYW1zX3RhZywgY2hhciAqcGFyYW1zX2hleCwgY2hhciAqcHdfaGV4LAorICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YV9oZXgsIGludCByZWZfcmV0LCBjaGFyICpyZWZfb3V0X2hleCApCit7CisgICAgaW50IG15X3JldDsKKyAgICBtYmVkdGxzX2FzbjFfYnVmIHBhcmFtczsKKyAgICB1bnNpZ25lZCBjaGFyICpteV9vdXQgPSBOVUxMLCAqcmVmX291dCA9IE5VTEwsICpkYXRhID0gTlVMTCwgKnB3ID0gTlVMTDsKKyAgICBzaXplX3QgcmVmX291dF9sZW4sIGRhdGFfbGVuLCBwd19sZW47CisKKyAgICBwYXJhbXMudGFnID0gcGFyYW1zX3RhZzsKKyAgICBwYXJhbXMucCA9IHVuaGV4aWZ5X2FsbG9jKCBwYXJhbXNfaGV4LCAmcGFyYW1zLmxlbiApOworCisgICAgZGF0YSA9IHVuaGV4aWZ5X2FsbG9jKCBkYXRhX2hleCwgJmRhdGFfbGVuICk7CisgICAgcHcgPSB1bmhleGlmeV9hbGxvYyggcHdfaGV4LCAmcHdfbGVuICk7CisgICAgcmVmX291dCA9IHVuaGV4aWZ5X2FsbG9jKCByZWZfb3V0X2hleCwgJnJlZl9vdXRfbGVuICk7CisgICAgbXlfb3V0ID0gemVyb19hbGxvYyggcmVmX291dF9sZW4gKTsKKworICAgIG15X3JldCA9IG1iZWR0bHNfcGtjczVfcGJlczIoICZwYXJhbXMsIE1CRURUTFNfUEtDUzVfREVDUllQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHcsIHB3X2xlbiwgZGF0YSwgZGF0YV9sZW4sIG15X291dCApOworICAgIFRFU1RfQVNTRVJUKCBteV9yZXQgPT0gcmVmX3JldCApOworCisgICAgaWYoIHJlZl9yZXQgPT0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG15X291dCwgcmVmX291dCwgcmVmX291dF9sZW4gKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19mcmVlKCBwYXJhbXMucCApOworICAgIG1iZWR0bHNfZnJlZSggZGF0YSApOworICAgIG1iZWR0bHNfZnJlZSggcHcgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIHJlZl9vdXQgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIG15X291dCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIHBrY3M1X3NlbGZ0ZXN0KCApCit7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtjczVfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa3BhcnNlLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtwYXJzZS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYjM5NjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtwYXJzZS5kYXRhCkBAIC0wLDAgKzEsMjI4IEBACitQYXJzZSBSU0EgS2V5ICMxIChObyBwYXNzd29yZCB3aGVuIHJlcXVpcmVkKQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3Rlc3QtY2Eua2V5IjoiTlVMTCI6TUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfUkVRVUlSRUQKKworUGFyc2UgUlNBIEtleSAjMiAoQ29ycmVjdCBwYXNzd29yZCkKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy90ZXN0LWNhLmtleSI6IlBvbGFyU1NMVGVzdCI6MAorCitQYXJzZSBSU0EgS2V5ICMzIChXcm9uZyBwYXNzd29yZCkKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy90ZXN0LWNhLmtleSI6IlBvbGFyU1NMV1JPTkciOk1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENICisKK1BhcnNlIFJTQSBLZXkgIzQgKERFUyBFbmNyeXB0ZWQpCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19ERVNfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9rZXlmaWxlLmRlcyI6InRlc3RrZXkiOjAKKworUGFyc2UgUlNBIEtleSAjNSAoM0RFUyBFbmNyeXB0ZWQpCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19ERVNfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9rZXlmaWxlLjNkZXMiOiJ0ZXN0a2V5IjowCisKK1BhcnNlIFJTQSBLZXkgIzYgKEFFUy0xMjggRW5jcnlwdGVkKQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DOk1CRURUTFNfQUVTX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMva2V5ZmlsZS5hZXMxMjgiOiJ0ZXN0a2V5IjowCisKK1BhcnNlIFJTQSBLZXkgIzcgKEFFUy0xOTIgRW5jcnlwdGVkKQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DOk1CRURUTFNfQUVTX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMva2V5ZmlsZS5hZXMxOTIiOiJ0ZXN0a2V5IjowCisKK1BhcnNlIFJTQSBLZXkgIzggKEFFUy0yNTYgRW5jcnlwdGVkKQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DOk1CRURUTFNfQUVTX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMva2V5ZmlsZS5hZXMyNTYiOiJ0ZXN0a2V5IjowCisKK1BhcnNlIFJTQSBLZXkgIzkgKFBLQ1MjOCB3cmFwcGVkKQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DOk1CRURUTFNfUEVNX1BBUlNFX0MKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL2Zvcm1hdF9nZW4ua2V5IjoiIjowCisKK1BhcnNlIFJTQSBLZXkgIzEwIChQS0NTIzggZW5jcnlwdGVkIFNIQTEtM0RFUykKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUEtDUzEyX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExXzNkZXMua2V5IjoiUG9sYXJTU0xUZXN0IjowCisKK1BhcnNlIFJTQSBLZXkgIzEwLjEgKFBLQ1MjOCBlbmNyeXB0ZWQgU0hBMS0zREVTLCB3cm9uZyBQVykKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUEtDUzEyX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfM2Rlcy5rZXkiOiJQb2xhclNTTFRlcyI6TUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0gKKworUGFyc2UgUlNBIEtleSAjMTAuMiAoUEtDUyM4IGVuY3J5cHRlZCBTSEExLTNERVMsIG5vIFBXKQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19QS0NTMTJfQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfM2Rlcy5rZXkiOiIiOk1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX1JFUVVJUkVECisKK1BhcnNlIFJTQSBLZXkgIzExIChQS0NTIzggZW5jcnlwdGVkIFNIQTEtM0RFUyBERVIpCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTMTJfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfM2Rlcy5kZXIiOiJQb2xhclNTTFRlc3QiOjAKKworUGFyc2UgUlNBIEtleSAjMTIgKFBLQ1MjOCBlbmNyeXB0ZWQgU0hBMS0yREVTKQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19QS0NTMTJfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfMmRlcy5rZXkiOiJQb2xhclNTTFRlc3QiOjAKKworUGFyc2UgUlNBIEtleSAjMTIuMSAoUEtDUyM4IGVuY3J5cHRlZCBTSEExLTJERVMsIHdyb25nIFBXKQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19QS0NTMTJfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3Citwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8yZGVzLmtleSI6IlBvbGFyU0xUZXN0IjpNQkVEVExTX0VSUl9QS19QQVNTV09SRF9NSVNNQVRDSAorCitQYXJzZSBSU0EgS2V5ICMxMi4yIChQS0NTIzggZW5jcnlwdGVkIFNIQTEtMkRFUywgbm8gUFcpCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1BLQ1MxMl9DCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8yZGVzLmtleSI6IiI6TUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfUkVRVUlSRUQKKworUGFyc2UgUlNBIEtleSAjMTMgKFBLQ1MjOCBlbmNyeXB0ZWQgU0hBMS1SQzQtMTI4KQorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUEtDUzEyX0MKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExX3JjNF8xMjgua2V5IjoiUG9sYXJTU0xUZXN0IjowCisKK1BhcnNlIFJTQSBLZXkgIzEzLjEgKFBLQ1MjOCBlbmNyeXB0ZWQgU0hBMS1SQzQtMTI4LCB3cm9uZyBQVykKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1BLQ1MxMl9DCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV9yYzRfMTI4LmtleSI6IlBvbGFyU1NMVGUiOk1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENICisKK1BhcnNlIFJTQSBLZXkgIzEzLjIgKFBLQ1MjOCBlbmNyeXB0ZWQgU0hBMS1SQzQtMTI4LCBubyBQVykKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1BLQ1MxMl9DCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV9yYzRfMTI4LmtleSI6IiI6TUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfUkVRVUlSRUQKKworUGFyc2UgUlNBIEtleSAjMTQgKFBLQ1MjOCBlbmNyeXB0ZWQgdjIgUEJERksyIDNERVMpCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1BLQ1M1X0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3BrY3M4X3BiZXMyX3Bia2RmMl8zZGVzLmtleSI6IlBvbGFyU1NMVGVzdCI6MAorCitQYXJzZSBSU0EgS2V5ICMxNSAoUEtDUyM4IGVuY3J5cHRlZCB2MiBQQkRGSzIgM0RFUywgd3JvbmcgUFcpCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1BLQ1M1X0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvcGtjczhfcGJlczJfcGJrZGYyXzNkZXMua2V5IjoiUG9sYXJTU0xUZXMiOk1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENICisKK1BhcnNlIFJTQSBLZXkgIzE2IChQS0NTIzggZW5jcnlwdGVkIHYyIFBCREZLMiAzREVTLCBubyBQVykKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUEtDUzVfQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvcGtjczhfcGJlczJfcGJrZGYyXzNkZXMua2V5IjoiIjpNQkVEVExTX0VSUl9QS19QQVNTV09SRF9SRVFVSVJFRAorCitQYXJzZSBSU0EgS2V5ICMxNyAoUEtDUyM4IGVuY3J5cHRlZCB2MiBQQkRGSzIgM0RFUyBERVIpCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTNV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfM2Rlcy5kZXIiOiJQb2xhclNTTFRlc3QiOjAKKworUGFyc2UgUlNBIEtleSAjMTggKFBLQ1MjOCBlbmNyeXB0ZWQgdjIgUEJERksyIDNERVMgREVSLCB3cm9uZyBQVykKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BLQ1M1X0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvcGtjczhfcGJlczJfcGJrZGYyXzNkZXMuZGVyIjoiUG9sYXJTU0xUZXMiOk1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENICisKK1BhcnNlIFJTQSBLZXkgIzE5IChQS0NTIzggZW5jcnlwdGVkIHYyIFBCREZLMiAzREVTIERFUiwgbm8gUFcpCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTNV9DCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfM2Rlcy5kZXIiOiIiOk1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVAorCitQYXJzZSBSU0EgS2V5ICMyMCAoUEtDUyM4IGVuY3J5cHRlZCB2MiBQQkRGSzIgREVTKQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19QS0NTNV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfZGVzLmtleSI6IlBvbGFyU1NMVGVzdCI6MAorCitQYXJzZSBQdWJsaWMgUlNBIEtleSAjMSAoUEtDUyM4IHdyYXBwZWQpCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19QRU1fUEFSU0VfQworcGtfcGFyc2VfcHVibGljX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL2Zvcm1hdF9nZW4ucHViIjowCisKK1BhcnNlIFB1YmxpYyBFQyBLZXkgIzEgKFJGQyA1NDgwLCBERVIpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjX3B1Yi5kZXIiOjAKKworUGFyc2UgUHVibGljIEVDIEtleSAjMiAoUkZDIDU0ODAsIFBFTSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa19wYXJzZV9wdWJsaWNfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19wdWIucGVtIjowCisKK1BhcnNlIFB1YmxpYyBFQyBLZXkgIzMgKFJGQyA1NDgwLCBzZWNwMjI0cjEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorcGtfcGFyc2VfcHVibGljX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfMjI0X3B1Yi5wZW0iOjAKKworUGFyc2UgUHVibGljIEVDIEtleSAjNCAoUkZDIDU0ODAsIHNlY3AyNTZyMSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitwa19wYXJzZV9wdWJsaWNfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY18yNTZfcHViLnBlbSI6MAorCitQYXJzZSBQdWJsaWMgRUMgS2V5ICM1IChSRkMgNTQ4MCwgc2VjcDM4NHIxKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjXzM4NF9wdWIucGVtIjowCisKK1BhcnNlIFB1YmxpYyBFQyBLZXkgIzYgKFJGQyA1NDgwLCBzZWNwNTIxcjEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorcGtfcGFyc2VfcHVibGljX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfNTIxX3B1Yi5wZW0iOjAKKworUGFyc2UgUHVibGljIEVDIEtleSAjNyAoUkZDIDU0ODAsIGJyYWlucG9vbFAyNTZyMSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRAorcGtfcGFyc2VfcHVibGljX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfYnAyNTZfcHViLnBlbSI6MAorCitQYXJzZSBQdWJsaWMgRUMgS2V5ICM4IChSRkMgNTQ4MCwgYnJhaW5wb29sUDM4NHIxKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVECitwa19wYXJzZV9wdWJsaWNfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19icDM4NF9wdWIucGVtIjowCisKK1BhcnNlIFB1YmxpYyBFQyBLZXkgIzkgKFJGQyA1NDgwLCBicmFpbnBvb2xQNTEycjEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQKK3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjX2JwNTEyX3B1Yi5wZW0iOjAKKworUGFyc2UgRUMgS2V5ICMxIChTRUMxIERFUikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa19wYXJzZV9rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjX3Bydi5zZWMxLmRlciI6Ik5VTEwiOjAKKworUGFyc2UgRUMgS2V5ICMxYSAoU0VDMSBERVIsIG5vIG9wdGlvbmFsIHBhcnQpCitkZXBlbmRzX29uOlBPTEFSU1NMX1BFTV9QQVJTRV9DOlBPTEFSU1NMX0VDUF9DOlBPTEFSU1NMX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19wcnYubm9vcHQuZGVyIjoiTlVMTCI6MAorCitQYXJzZSBFQyBLZXkgIzIgKFNFQzEgUEVNKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX3BhcnNlX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfcHJ2LnNlYzEucGVtIjoiTlVMTCI6MAorCitQYXJzZSBFQyBLZXkgIzMgKFNFQzEgUEVNIGVuY3J5cHRlZCkKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQ6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19NRDVfQworcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19wcnYuc2VjMS5wdy5wZW0iOiJwb2xhciI6MAorCitQYXJzZSBFQyBLZXkgIzQgKFBLQ1M4IERFUikKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19wcnYucGs4LmRlciI6Ik5VTEwiOjAKKworUGFyc2UgRUMgS2V5ICM1IChQS0NTOCBQRU0pCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19wcnYucGs4LnBlbSI6Ik5VTEwiOjAKKworUGFyc2UgRUMgS2V5ICM2IChQS0NTOCBlbmNyeXB0ZWQgREVSKQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX3BhcnNlX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfcHJ2LnBrOC5wdy5kZXIiOiJwb2xhciI6MAorCitQYXJzZSBFQyBLZXkgIzcgKFBLQ1M4IGVuY3J5cHRlZCBQRU0pCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa19wYXJzZV9rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjX3Bydi5wazgucHcucGVtIjoicG9sYXIiOjAKKworUGFyc2UgRUMgS2V5ICM4IChTRUMxIFBFTSwgc2VjcDIyNHIxKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKK3BrX3BhcnNlX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfMjI0X3Bydi5wZW0iOiJOVUxMIjowCisKK1BhcnNlIEVDIEtleSAjOSAoU0VDMSBQRU0sIHNlY3AyNTZyMSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitwa19wYXJzZV9rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjXzI1Nl9wcnYucGVtIjoiTlVMTCI6MAorCitQYXJzZSBFQyBLZXkgIzEwIChTRUMxIFBFTSwgc2VjcDM4NHIxKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK3BrX3BhcnNlX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfMzg0X3Bydi5wZW0iOiJOVUxMIjowCisKK1BhcnNlIEVDIEtleSAjMTEgKFNFQzEgUEVNLCBzZWNwNTIxcjEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY181MjFfcHJ2LnBlbSI6Ik5VTEwiOjAKKworUGFyc2UgRUMgS2V5ICMxMiAoU0VDMSBQRU0sIGJwMjU2cjEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQKK3BrX3BhcnNlX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfYnAyNTZfcHJ2LnBlbSI6Ik5VTEwiOjAKKworUGFyc2UgRUMgS2V5ICMxMyAoU0VDMSBQRU0sIGJwMzg0cjEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQKK3BrX3BhcnNlX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfYnAzODRfcHJ2LnBlbSI6Ik5VTEwiOjAKKworUGFyc2UgRUMgS2V5ICMxNCAoU0VDMSBQRU0sIGJwNTEycjEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQKK3BrX3BhcnNlX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfYnA1MTJfcHJ2LnBlbSI6Ik5VTEwiOjAKKworUGFyc2UgRUMgS2V5ICMxNSAoU0VDMSBERVIsIHNlY3AyNTZrMSwgU3BlY2lmaWVkRUNEb21haW4pCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRDpNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVECitwa19wYXJzZV9rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjX3Bydi5zcGVjZG9tLmRlciI6Ik5VTEwiOjAKKworS2V5IEFTTjEgKEluY29ycmVjdCBmaXJzdCB0YWcpCitwa19wYXJzZV9rZXlfcnNhOiIiOiIiOk1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVAorCitLZXkgQVNOMSAoUlNBUHJpdmF0ZUtleSwgaW5jb3JyZWN0IHZlcnNpb24gdGFnKQorcGtfcGFyc2Vfa2V5X3JzYToiMzAwMTAwIjoiIjpNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQKKworS2V5IEFTTjEgKFJTQVByaXZhdGVLZXksIHZlcnNpb24gdGFnIG1pc3NpbmcpCitwa19wYXJzZV9rZXlfcnNhOiIzMDAwIjoiIjpNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQKKworS2V5IEFTTjEgKFJTQVByaXZhdGVLZXksIGludmFsaWQgdmVyc2lvbikKK3BrX3BhcnNlX2tleV9yc2E6IjMwMDMwMjAxMDEiOiIiOk1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVAorCitLZXkgQVNOMSAoUlNBUHJpdmF0ZUtleSwgY29ycmVjdCB2ZXJzaW9uLCBpbmNvcnJlY3QgdGFnKQorcGtfcGFyc2Vfa2V5X3JzYToiMzAwNDAyMDEwMDAwIjoiIjpNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQKKworS2V5IEFTTjEgKFJTQVByaXZhdGVLZXksIHZhbHVlcyBwcmVzZW50LCBsZW5ndGggbWlzbWF0Y2gpCitwa19wYXJzZV9rZXlfcnNhOiIzMDFjMDIwMTAwMDIwMTAxMDIwMTAxMDIwMTAxMDIwMTAxMDIwMTAxMDIwMTAxMDIwMTAxMDIwMTAxMDAiOiIiOk1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVAorCitLZXkgQVNOMSAoUlNBUHJpdmF0ZUtleSwgdmFsdWVzIHByZXNlbnQsIGNoZWNrX3ByaXZrZXkgZmFpbHMpCitwa19wYXJzZV9rZXlfcnNhOiIzMDFiMDIwMTAwMDIwMTAxMDIwMTAxMDIwMTAxMDIwMTAxMDIwMTAxMDIwMTAxMDIwMTAxMDIwMTAxIjoiIjpNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa3BhcnNlLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrcGFyc2UuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxYTYxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa3BhcnNlLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMTQxIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3BrLmgiCisjaW5jbHVkZSAibWJlZHRscy9wZW0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfQklHTlVNX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX0ZTX0lPICovCit2b2lkIHBrX3BhcnNlX2tleWZpbGVfcnNhKCBjaGFyICprZXlfZmlsZSwgY2hhciAqcGFzc3dvcmQsIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfcGtfY29udGV4dCBjdHg7CisgICAgaW50IHJlczsKKyAgICBjaGFyICpwd2QgPSBwYXNzd29yZDsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJmN0eCApOworCisgICAgaWYoIHN0cmNtcCggcHdkLCAiTlVMTCIgKSA9PSAwICkKKyAgICAgICAgcHdkID0gTlVMTDsKKworICAgIHJlcyA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJmN0eCwga2V5X2ZpbGUsIHB3ZCApOworCisgICAgVEVTVF9BU1NFUlQoIHJlcyA9PSByZXN1bHQgKTsKKworICAgIGlmKCByZXMgPT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2E7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2Nhbl9kbyggJmN0eCwgTUJFRFRMU19QS19SU0EgKSApOworICAgICAgICByc2EgPSBtYmVkdGxzX3BrX3JzYSggY3R4ICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCByc2EgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19GU19JTyAqLwordm9pZCBwa19wYXJzZV9wdWJsaWNfa2V5ZmlsZV9yc2EoIGNoYXIgKmtleV9maWxlLCBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgY3R4OworICAgIGludCByZXM7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZjdHggKTsKKworICAgIHJlcyA9IG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUoICZjdHgsIGtleV9maWxlICk7CisKKyAgICBURVNUX0FTU0VSVCggcmVzID09IHJlc3VsdCApOworCisgICAgaWYoIHJlcyA9PSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfY2FuX2RvKCAmY3R4LCBNQkVEVExTX1BLX1JTQSApICk7CisgICAgICAgIHJzYSA9IG1iZWR0bHNfcGtfcnNhKCBjdHggKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggcnNhICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPOk1CRURUTFNfRUNQX0MgKi8KK3ZvaWQgcGtfcGFyc2VfcHVibGljX2tleWZpbGVfZWMoIGNoYXIgKmtleV9maWxlLCBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgY3R4OworICAgIGludCByZXM7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZjdHggKTsKKworICAgIHJlcyA9IG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUoICZjdHgsIGtleV9maWxlICk7CisKKyAgICBURVNUX0FTU0VSVCggcmVzID09IHJlc3VsdCApOworCisgICAgaWYoIHJlcyA9PSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgKmVja2V5OworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19jYW5fZG8oICZjdHgsIE1CRURUTFNfUEtfRUNLRVkgKSApOworICAgICAgICBlY2tleSA9IG1iZWR0bHNfcGtfZWMoIGN0eCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCAmZWNrZXktPmdycCwgJmVja2V5LT5RICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPOk1CRURUTFNfRUNQX0MgKi8KK3ZvaWQgcGtfcGFyc2Vfa2V5ZmlsZV9lYyggY2hhciAqa2V5X2ZpbGUsIGNoYXIgKnBhc3N3b3JkLCBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgY3R4OworICAgIGludCByZXM7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZjdHggKTsKKworICAgIHJlcyA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJmN0eCwga2V5X2ZpbGUsIHBhc3N3b3JkICk7CisKKyAgICBURVNUX0FTU0VSVCggcmVzID09IHJlc3VsdCApOworCisgICAgaWYoIHJlcyA9PSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgKmVja2V5OworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19jYW5fZG8oICZjdHgsIE1CRURUTFNfUEtfRUNLRVkgKSApOworICAgICAgICBlY2tleSA9IG1iZWR0bHNfcGtfZWMoIGN0eCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleSggJmVja2V5LT5ncnAsICZlY2tleS0+ZCApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19wa19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19SU0FfQyAqLwordm9pZCBwa19wYXJzZV9rZXlfcnNhKCBjaGFyICprZXlfZGF0YSwgY2hhciAqcmVzdWx0X3N0ciwgaW50IHJlc3VsdCApCit7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzIwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzIwMDBdOworICAgIGludCBkYXRhX2xlbjsKKyAgICAoKHZvaWQpIHJlc3VsdF9zdHIpOworCisgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKKworICAgIG1lbXNldCggYnVmLCAwLCAyMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDAsIDIwMDAgKTsKKworICAgIGRhdGFfbGVuID0gdW5oZXhpZnkoIGJ1Ziwga2V5X2RhdGEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3BhcnNlX2tleSggJnBrLCBidWYsIGRhdGFfbGVuLCBOVUxMLCAwICkgPT0gKCByZXN1bHQgKSApOworICAgIGlmKCAoIHJlc3VsdCApID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIDEgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGsgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGt3cml0ZS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3Brd3JpdGUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZmMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3Brd3JpdGUuZGF0YQpAQCAtMCwwICsxLDM5IEBACitQdWJsaWMga2V5IHdyaXRlIGNoZWNrIFJTQQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfQkFTRTY0X0MKK3BrX3dyaXRlX3B1YmtleV9jaGVjazoiZGF0YV9maWxlcy9zZXJ2ZXIxLnB1YmtleSIKKworUHVibGljIGtleSB3cml0ZSBjaGVjayBSU0EgNDA5NgorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfQkFTRTY0X0MKK3BrX3dyaXRlX3B1YmtleV9jaGVjazoiZGF0YV9maWxlcy9yc2E0MDk2X3B1Yi5wZW0iCisKK1B1YmxpYyBrZXkgd3JpdGUgY2hlY2sgRUMgMTkyIGJpdHMKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0JBU0U2NF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa193cml0ZV9wdWJrZXlfY2hlY2s6ImRhdGFfZmlsZXMvZWNfcHViLnBlbSIKKworUHVibGljIGtleSB3cml0ZSBjaGVjayBFQyA1MjEgYml0cworZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfQkFTRTY0X0M6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK3BrX3dyaXRlX3B1YmtleV9jaGVjazoiZGF0YV9maWxlcy9lY181MjFfcHViLnBlbSIKKworUHVibGljIGtleSB3cml0ZSBjaGVjayBFQyBCcmFpbnBvb2wgNTEyIGJpdHMKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0JBU0U2NF9DOk1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRAorcGtfd3JpdGVfcHVia2V5X2NoZWNrOiJkYXRhX2ZpbGVzL2VjX2JwNTEyX3B1Yi5wZW0iCisKK1ByaXZhdGUga2V5IHdyaXRlIGNoZWNrIFJTQQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfQkFTRTY0X0MKK3BrX3dyaXRlX2tleV9jaGVjazoiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSIKKworUHJpdmF0ZSBrZXkgd3JpdGUgY2hlY2sgUlNBIDQwOTYKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX0JBU0U2NF9DCitwa193cml0ZV9rZXlfY2hlY2s6ImRhdGFfZmlsZXMvcnNhNDA5Nl9wcnYucGVtIgorCitQcml2YXRlIGtleSB3cml0ZSBjaGVjayBFQyAxOTIgYml0cworZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfQkFTRTY0X0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX3dyaXRlX2tleV9jaGVjazoiZGF0YV9maWxlcy9lY19wcnYuc2VjMS5wZW0iCisKK1ByaXZhdGUga2V5IHdyaXRlIGNoZWNrIEVDIDUyMSBiaXRzCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19CQVNFNjRfQzpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorcGtfd3JpdGVfa2V5X2NoZWNrOiJkYXRhX2ZpbGVzL2VjXzUyMV9wcnYucGVtIgorCitQcml2YXRlIGtleSB3cml0ZSBjaGVjayBFQyBCcmFpbnBvb2wgNTEyIGJpdHMKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0JBU0U2NF9DOk1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRAorcGtfd3JpdGVfa2V5X2NoZWNrOiJkYXRhX2ZpbGVzL2VjX2JwNTEyX3Bydi5wZW0iCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGt3cml0ZS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa3dyaXRlLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMjA2NDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGt3cml0ZS5mdW5jdGlvbgpAQCAtMCwwICsxLDc0IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3BrLmgiCisjaW5jbHVkZSAibWJlZHRscy9wZW0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19QS19XUklURV9DOk1CRURUTFNfQklHTlVNX0M6TUJFRFRMU19GU19JTworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1BFTV9XUklURV9DICovCit2b2lkIHBrX3dyaXRlX3B1YmtleV9jaGVjayggY2hhciAqa2V5X2ZpbGUgKQoreworICAgIG1iZWR0bHNfcGtfY29udGV4dCBrZXk7CisgICAgdW5zaWduZWQgY2hhciBidWZbNTAwMF07CisgICAgdW5zaWduZWQgY2hhciBjaGVja19idWZbNTAwMF07CisgICAgaW50IHJldDsKKyAgICBGSUxFICpmOworICAgIHNpemVfdCBpbGVuOworCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICBtZW1zZXQoIGNoZWNrX2J1ZiwgMCwgc2l6ZW9mKCBjaGVja19idWYgKSApOworCisgICAgbWJlZHRsc19wa19pbml0KCAma2V5ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUoICZrZXksIGtleV9maWxlICkgPT0gMCApOworCisgICAgcmV0ID0gbWJlZHRsc19wa193cml0ZV9wdWJrZXlfcGVtKCAma2V5LCBidWYsIHNpemVvZiggYnVmICkpOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworCisgICAgZiA9IGZvcGVuKCBrZXlfZmlsZSwgInIiICk7CisgICAgVEVTVF9BU1NFUlQoIGYgIT0gTlVMTCApOworICAgIGlsZW4gPSBmcmVhZCggY2hlY2tfYnVmLCAxLCBzaXplb2YoIGNoZWNrX2J1ZiApLCBmICk7CisgICAgZmNsb3NlKCBmICk7CisKKyAgICBURVNUX0FTU0VSVCggaWxlbiA9PSBzdHJsZW4oIChjaGFyICopIGJ1ZiApICk7CisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggKGNoYXIgKikgYnVmLCAoY2hhciAqKSBjaGVja19idWYsIGlsZW4gKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19wa19mcmVlKCAma2V5ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19QRU1fV1JJVEVfQyAqLwordm9pZCBwa193cml0ZV9rZXlfY2hlY2soIGNoYXIgKmtleV9maWxlICkKK3sKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQga2V5OworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzUwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tfYnVmWzUwMDBdOworICAgIGludCByZXQ7CisgICAgRklMRSAqZjsKKyAgICBzaXplX3QgaWxlbjsKKworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgbWVtc2V0KCBjaGVja19idWYsIDAsIHNpemVvZiggY2hlY2tfYnVmICkgKTsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJmtleSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoICZrZXksIGtleV9maWxlLCBOVUxMICkgPT0gMCApOworCisgICAgcmV0ID0gbWJlZHRsc19wa193cml0ZV9rZXlfcGVtKCAma2V5LCBidWYsIHNpemVvZiggYnVmICkpOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworCisgICAgZiA9IGZvcGVuKCBrZXlfZmlsZSwgInIiICk7CisgICAgVEVTVF9BU1NFUlQoIGYgIT0gTlVMTCApOworICAgIGlsZW4gPSBmcmVhZCggY2hlY2tfYnVmLCAxLCBzaXplb2YoIGNoZWNrX2J1ZiApLCBmICk7CisgICAgZmNsb3NlKCBmICk7CisKKyAgICBURVNUX0FTU0VSVCggaWxlbiA9PSBzdHJsZW4oIChjaGFyICopIGJ1ZiApICk7CisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggKGNoYXIgKikgYnVmLCAoY2hhciAqKSBjaGVja19idWYsIGlsZW4gKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19wa19mcmVlKCAma2V5ICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3JzYS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3JzYS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTY4ODAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcnNhLmRhdGEKQEAgLTAsMCArMSwzNzIgQEAKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImQ2MjQ4YzNlOTZiMWE3ZTVmZWE5Nzg4NzBmY2M0Yzk3ODZiNGU1MTU2ZTE2YjdmYWVmNDU1N2Q2NjdmNzMwYjhiYzRjNzg0ZWYwMGM2MjRkZjUzMDk1MTNjM2E1ZGU4Y2E5NGMyMTUyZTA0NTk2MTg2NjZkMzE0ODA5MjU2MmViYzI1NmZmY2E0NWIyN2ZkMmQ2M2M2OGJkNWUwYTBhZWZiZTQ5NmU5ZTYzODM4YTM2MWIxZGI2ZmMyNzI0NjRmMTkxNDkwYmY5YzAyOTY0M2M0OWQyZDljZDA4ODMzYjhhNzBiNGIzNDMxZjU2ZmIxZWI1NWNjZDM5ZTc3YTljOTIiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMToxMDI0OjE2OiJlMjhhMTM1NDg1MjVlNWYzNmRjY2IyNGVjYjdjYzMzMmNjNjg5ZGZkNjQwMTI2MDRjOWM3ODE2ZDcyYTE2YzNmNWZjZGMwZTg2ZTdjMDMyODBiMWM2OWI1ODZjZTBjZDhhZWM3MjJjYzczYTVkM2I3MzAzMTBiZjdkZmViZGM3N2NlNWQ5NGJiYzM2OWRjMThhMmY3YjA3YmQ1MDVhYjBmODIyMjRhZWYwOWZkYzFlNTA2MzIzNDI1NWUwYjNjNDBhNTJlOWU4YWU2MDg5OGViODhhNzY2YmRkNzg4ZmU5NDkzZDhmZDg2YmNkZDI4ODRkNWMwNjIxNmM2NTQ2OWU1IjoxNjoiMyI6IjMyMDNiNzY0N2ZiN2UzNDVhYTQ1NzY4MWU1MTMxNzc3ZjFhZGMzNzFmMmZiYTg1MzQ5MjhjNGU1MmVmNjIwNmE4NTY0MjVkNjI2OTM1MmVjYmY2NGRiMmY2YWQ4MjM5Nzc2OGNhZmRkOGNkMjcyZTUxMmQ2MTdhZDY3OTkyMjI2ZGE2YmMyOTFjMzE0MDRjMTdmZDRiN2UyYmViMjBlZmYyODRhNDRmNGQ3YWY0N2ZkNjYyOWUyYzk1ODA5ZmE3ZjIyNDFhMDRmNzBhYzcwZDMyNzFiYjEzMjU4YWYxZWQ1YzU5ODhjOTVkZjdmYTI2NjAzNTE1NzkxMDc1ZmVjY2QiOk1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVECisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjIwNmVmNGJmMzk2YzYwODdmODIyOWVmMTk2ZmQzNWYzN2NjYjhkZTVlZmNkYjIzOGYyMGQ1NTY2NjhmMTE0MjU3YTExZmJlMDM4NDY0YTY3ODMwMzc4ZTYyYWU5NzkxNDUzOTUzZGFjMWRiZDc5MjE4MzdiYTk4ZTg0ZTg1NmViODBlZDk0ODdlNjU2ZDBiMjBjMjhjOGJhNWUzNWRiMWFiYmVkODNlZDFjNzcyMGE5NzcwMWY3MDllMzU0N2E0YmZjYWJjYTljODljNTdhZDE1YzM5OTY1NzdhMGFlMzZkN2M3YjY5OTAzNTI0MmYzNzk1NDY0NmMxY2Q1YzA4YWMiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMToxMDI0OjE2OiJlMjhhMTM1NDg1MjVlNWYzNmRjY2IyNGVjYjdjYzMzMmNjNjg5ZGZkNjQwMTI2MDRjOWM3ODE2ZDcyYTE2YzNmNWZjZGMwZTg2ZTdjMDMyODBiMWM2OWI1ODZjZTBjZDhhZWM3MjJjYzczYTVkM2I3MzAzMTBiZjdkZmViZGM3N2NlNWQ5NGJiYzM2OWRjMThhMmY3YjA3YmQ1MDVhYjBmODIyMjRhZWYwOWZkYzFlNTA2MzIzNDI1NWUwYjNjNDBhNTJlOWU4YWU2MDg5OGViODhhNzY2YmRkNzg4ZmU5NDkzZDhmZDg2YmNkZDI4ODRkNWMwNjIxNmM2NTQ2OWU1IjoxNjoiMyI6IjVhYmMwMWY1ZGUyNWI3MDg2N2ZmMGMyNGUyMjJjNjFmNTNjODhkYWY0MjU4NmZkZGNkNTZmM2M0NTg4ZjA3NGJlM2MzMjgwNTZjMDYzMzg4Njg4YjYzODVhODE2Nzk1N2M2ZTUzNTVhNTEwZTAwNWI4YTg1MWQ2OWM5NmIzNmVjNjAzNjY0NDA3ODIxMGU1ZDdkMzI2Zjk2MzY1ZWUwNjQ4ODgyOTIxNDkyYmM3Yjc1M2ViOWMyNmNkYmFiMzc1NTVmMjEwZGYyY2E2ZmVjMWIyNWI0NjNkMzhiODFjMGRjZWEyMDIwMjJiMDRhZjVkYTU4YWEwM2Q3N2JlOTQ5YjciOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiMjA2ZWY0YmYzOTZjNjA4N2Y4MjI5ZWYxOTZmZDM1ZjM3Y2NiOGRlNWVmY2RiMjM4ZjIwZDU1NjY2OGYxMTQyNTdhMTFmYmUwMzg0NjRhNjc4MzAzNzhlNjJhZTk3OTE0NTM5NTNkYWMxZGJkNzkyMTgzN2JhOThlODRlODU2ZWI4MGVkOTQ4N2U2NTZkMGIyMGMyOGM4YmE1ZTM1ZGIxYWJiZWQ4M2VkMWM3NzIwYTk3NzAxZjcwOWUzNTQ3YTRiZmNhYmNhOWM4OWM1N2FkMTVjMzk5NjU3N2EwYWUzNmQ3YzdiNjk5MDM1MjQyZjM3OTU0NjQ2YzFjZDVjMDhhYyI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEExOjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIzIjoiNWFiYzAxZjVkZTI1YjcwODY3ZmYwYzI0ZTIyMmM2MWY1M2M4OGRhZjQyNTg2ZmRkY2Q1NmYzYzQ1ODhmMDc0YmUzYzMyODA1NmMwNjMzODg2ODhiNjM4NWE4MTY3OTU3YzZlNTM1NWE1MTBlMDA1YjhhODUxZDY5Yzk2YjM2ZWM2MDM2NjQ0MDc4MjEwZTVkN2QzMjZmOTYzNjVlZTA2NDg4ODI5MjE0OTJiYzdiNzUzZWI5YzI2Y2RiYWIzNzU1NWYyMTBkZjJjYTZmZWMxYjI1YjQ2M2QzOGI4MWMwZGNlYTIwMjAyMmIwNGFmNWRhNThhYTAzZDc3YmU5NDliNyI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6Ijg2N2FjMjZlMTFhMTNiN2FjMzRhNDJhMWUxNzc2NDg2OTI4NjEyMjZlZmZiNTViYjU5N2ZiZGUxMGYyOTliZjdmZmZkNmZjOGRkYjJhNDZhNzNiOTdiNjczODdhNDYxYjIzZTFkNjVkYzExOTM2NjI4Njk3OWFkZDYxNWI5MjZiOTI3MjgzMmZjMGMwNThiOTQ2ZmM3NTJkY2ZmY2VjYTEyMjMzZjRjNjNmNzg5N2NiYWEwOGFhN2UwN2NmMDJiNWU3ZTNlNWVjZTI1MmJmMmZlNjFkMTYzYmNlODRjMGUwMzY4NDU0YTk4ZTlmZGViZjZlZGJkNzBiMjkwZDU0OWIiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjI0OjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIzIjoiM2JiN2IxYzVmMzM5MWRlNDU0OWUyZTk2ZmQzM2FmYTRkNjQ3ZGQ5MGUzMjFkOWQ1NzZmMzgwOGUzMjIxM2U5NDhiNjk3ZWY0ZmQyZGQxMjkyM2RlNmVjM2ZmZDYyNTA3OGE1N2Y4NmFmMzhkYzA3MDUyYmI1MDU0N2M2MTZlZDUxZmExMzUyYjNhYjY2Nzg4NDA4MTY4ZDIxMjYzZWYyZDMzODhkNTY3ZDJjZThjZjY3NGY0NTQ5MWFiMmIwMzE5ZDQ3YmUxMjY2YmRhMzllMzQzYjJhMzhlYTJkNmFhYWVlNmM0NDY1YWVlMWQ3YmIzM2U5M2ExYzQwYThlM2FlNCI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImNkODEwZTk3ZGMyMTA5NWVhN2EwMjM4MDI3YTdiYWZkMzQzZTAxNDQ0Nzg1ZWE5MTg0YTQ0YTc5ZjgwNDM4YzQxZmMwYjU3YWE5NTY5MzQwN2RhMzhmZTVmZjBlYzEzOThlMDMzNjFlNTFhM2RiZTEzNGI5OWNjYTJkZjBjZWYxYzQ0NGNhNTRkMmI3ZGIyNzg5NDU1YjZiYjQxOTE4YzI0MDAxZmQ4MmZjMjBlZTA4OWRlM2YzNGYwNTM2OTljMWM1Zjc5NTRjZTBhYWFiYjlkMjZmY2UzOWQwMzI4OTQxNTIyMjlkOThjZjY0ZWNhZmM3MDg5NTMwMDczYzYxZDkiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjU2OjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIzIjoiN2I1ZmJhNzBlYzViNTIxNjM4ZjE4MmJjYWIzOWNlYzMwYjc2ZTdiYzAxN2JkYmQxMDU5NjU4YTlhMWRiMDk2OWFiNDgyZGNlMzJmM2U5ODY1OTUyZjBhMGRlMDk3ODI3MmM5NTFlM2MwMTUzMjhlYTM3NThmNDcwMjlhMzc5YWI0MjAwNTUwZmJhNThmMTFkNTEyNjQ4Nzg0MDZmYzcxN2Q1ZjdiNzJiMzU4Mjk0NmYxNmE3ZTUzMTRhMjIwODgxZmM4MjBmN2QyOTk0OTcxMDI3MzQyMTUzM2Q4YWMwYTQ0OWRjNmQwZmQxYTIxYzIyNDQ0ZWRkMWMwZDViNDRkMyI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjQ0NjM3ZDNiOGRlNTI1ZmQ1ODkyMzdiYzgxMjI5Yzg5NjZkM2FmMjQ1NDA4NTBjMjQwMzYzMzBkYjgwMDdlNmQxOWExOTQ4NjAxOGIyYjAyMDc0ZGE1OTBhYWJhOWQyYzg4NDhjMGEyZDFiNmRlNGRmYWYyNDAyNWI2MzkzZGY5MjI4MDA4ZjgzZjEzY2M3NmE2N2NmYmVkNzdhNmUzNDI5MzQyODI0YTBiNmE5YjhkZDg4NDA5NGFjYzZhNTRiYmM4Yzg4Mjk5MzBjNTJmZTM5Y2U1ZTBkY2QwMmQ5NTUzZWY4OTlkMjZlYjZjYWUwOTQwYjYzNTg0ZTJkYWViM2IiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMzg0OjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIzIjoiMzhmYzRmNmYwNDMwYmIzZWE5ZjQ3MGE0YzBmNWNlYmRhYmFjNGRiZWIzYjljOTlkNDE2OGU3YjAwZjVlYjI5NGVjMGVjZTE5MDhlZGVkMWYzZTE0ZjFlNjlkMTBmOWZlYjQyNWJkYTBjOTk4YWY5NDVlZjg2NDI5OGE2MGE2NzVmMGJiNWM1NDBhN2JlM2Y1MzRkNWZhZGRmZjk3NGVlYThiZmZlMTgyYTQ0ZTJlZTFmNGY2NTNlNzE5NjdhMTE4NjllZTFhODUwZWRiMDNjYjQ0YTM0MDM3OGNiN2ExYmM5NjE2ZDM2NDliNzgwMDJiMzkwYTA1YTdlNTRlZGVjNiI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImQwM2YxMjI3NmY2YmE3NTQ1YjhmY2U3MTk0NzFiZDI1Mzc5MTg3ODgwOTY5NGU4NzU0ZjNiMzg5ZjI2YzkyNTNhNzU4ZWQyOGI0YzYyNTM1YThkNTcwMmQ3YTc3ODczMWQ1NzU5ZmYyYjNiMzliMTkyZGI2ODBlNzkxNjMyOTE4YjYwOTNjMGU4Y2EyNWMyYmY3NTZhMDdmZGU0MTQ0YTM3Zjc2OWZlNDA1NDQ1NWE0NWNiOGNlZmU0NDYyZTdhOWE0NWNlNzFmMjE4OWI0ZmVmMDFiNDdhZWU4NTg1ZDQ0ZGM5ZDZmYTYyN2EzZTVmMDg4MDE4NzE3MzFmMjM0Y2QiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMzg0OjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIzIjoiZDkzYTg3OGMxY2U4NjU3MTU5MGIwZTQzNzk0YjNlZGIyMzU1Mjc5N2M0YjhjOWUzZGE0ZmUxY2M0YWMwNTY2YWNkM2IxMDU0MWZlOWE3YTc5ZjVlYTQ4OTJkMzA2OWNhNjkwM2VmYjVjNDBjNDdlYjhhOWM3ODFlYjQyNDkyODFkNDBjM2Q5NmFhZTE2ZGExYmI0ZGFhZWNlNmEyNmVjYTVmNDFjMDYyYjQxMjRhNjRmYzlkMzQwY2JhNWFiMGQxZjVhZmZmZjY1MTVhODdmMDkzMzc3NGZkNDMyMmQyZmE0OTdjZDZmNzA4YTQyOWNhNTZkY2IxZmQzZGI2MjNkMCI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImIyZjJlNmUwOWZkMTliMGE4YzA2NDQ3NTU0ZDZhMjM2YzY5ZTJiMzM0MDE3NDg4ODgxZDhjMDJhYjgxZDc0Y2FlMGM2NGVmZDUwYTM3NDk5OGVlZWMxNjI2NTE5NzVlNjM3Y2IyYmE1OTQyNTBjNzUwYTQ5NDMyNTNmMWRiMDYxM2U0Y2UxZDUwZjhlM2U5NjhhMmE4M2JkNmNiOTc0NTVhYjJjY2M3NzA3MTA3NmIzZTIxMWZmYjI1MWJkNGMxYTczOGI4OGIyMDIxYzYxYzcyN2MwNzRjZTkzM2MwNTRhY2JjYmY0ZjBjMzYyZWMwOWFmMzhkZTE5MTY4NmFlYmUiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBNTEyOjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIzIjoiYTg1M2U2N2Y5MjgyODFkMTE1MDZjOWQzOWU1ZWE5YjJkNzQyNzgyYzY2M2MzN2QwYTdjOWU5ZmUxNTM3OWNkZTFlNzVkOTRhZGJmYjFjYTA4NjkxZjMyMGFmNGZmMmIwYTI5YTRkMmVhMTBhMjBjYjk1ZDg1ZjNkYWJhYzNkNTZjY2E5MDM5Yzg1MWQwMTgxNDA4YzAwYjM4NWZjODJjYWZhNGNmYTczODBkMGMyYzAyNGZiODNmZWM1OWQ1ZWU1OTFkNjM4MDZkY2IxOGIyMWVhNDQwYzNkM2YxMmMxZTc3OTVlYjE1YjdjZTRjNGIyODhkNjQ2Y2YxZDM0YmRmMSI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI2NDc1ODZiYTU4N2IwOWFhNTU1ZDFiOGRhNGNkZjVjNmU3NzdlMDg4NTkzNzljYTQ1Nzg5MDE5ZjIwNDFlNzA4ZDk3YzQ0MDhkNGQ2OTQzYjExZGQ3ZWJlMDVjNmI0OGE5YjVmMWIwMDc5NDUyY2M0ODQ1NzlhY2ZhNjZhMzRjMGNmM2YwZTczMzliMmRiZDVmMTMzOWVmNzkzN2E4MjYxNTQ3NzA1YTg0Njg4NWM0M2Q4ZWYxMzlhOWM4M2Y1NjA0ZWE1MmIyMzExNzZhODIxZmI0OGM0NWVkNDUyMjZmMzFiYTdlOGE5NGE2OWY2YzY1YzM5YjcyNzhiZjNmMDhmIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTE6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjEwMDAxIjoiZTI3YTkwYjY0NGMzYTExZjIzNDEzMmQ2NzI3YWRhMzk3Nzc0Y2Q3ZmRmNWViMDE2MGE2NjVmZmNjZWRhYmI4YWU5ZTM1Nzk2NjkzOWE3MWM5NzNlNzVlNWZmNzcxZmIwMWE2NDgzZmNhZjgyZjE2ZGVlNjVlNjgyNjEyMWUyYWU5YzY5ZDJjOTIzODdiMzNhNjQxZjM5NzY3Njc3NmNkZTUwMWU3MzE0YTlhNGU3NmMwZjQ1MzhlZGVlYTE2M2U4ZGU3YmQyMWM5M2MyOThkZjc0OGM2ZjVjMjZiN2QwM2JmYTM2NzFmMmE3NDg4ZmUzMTEzMDllODIxOGE3MTE3MSI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNTUwMTNhNDg5ZTA5YjY1NTMyNjJhYWI1OWZiMDQxYjQ5NDM3Yjg2ZDUyODc2ZjhlNWQ1ZTQwNWI3N2NhMGZmNmNlOGVhMmRkNzVjN2IzYjQxMWNmNDQ0NWQ1NjIzM2M1YjBmZjBlNThjNDkxMjhkODFiNGZlZGQyOTVlMTcyZDIyNWM0NTFlMTNkZWZiMzRiODdiN2FlYTZkNmYwZDIwZjVjNTVmZWI3MWQyYTc4OWZhMzFmM2Q5ZmY0Nzg5NmFkYzE2YmVjNWNlMGM5ZGRhM2ZkZTE5MGUwOGNhMjQ1MWMwMWZmMzA5MTQ0OTg4NzY5NWY5NmRhYzk3YWQ2YTMwZSI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEExOjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIxMDAwMSI6ImRkODJiN2JlNzkxYzQ1NGZiYmY2ZjFkZTQ3Y2JlNTg1YTY4N2U0ZThiYmFlMGI2ZTJhNzdmOGNhNGVmZDA2ZDcxNDk4ZjlhNzRiOTMxYmQ1OWMzNzdlNzFkYWY3MDhhNjI0YzUxMzAzZjM3NzAwNmM2NzY0ODdiYWQ1N2Y3MDY3YjA5YjdiYjk0YTYxODkxMTlhYjhjZjczMjFjMzIxYjJkYzdkZjU2NWJmYmVjODMzYTI4Yjg2NjI1ZmI1ZmQ2YTAzNWQ0ZWQ3OWZmMGY5YWVlOWZhNzg5MzVlZWM2NTA2OTQzOWVlNDQ5ZDdmNTI0OWNkYWU2ZmRkNmQ4YzJhNjMiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiZjRhOTkwYjhkNDM0YTU5MTQzNDBjMGNhM2NhNGU0YTcwODU2YzU1ZTEzZTkzOGMxZjg1NGU5MWNkZWY1NGM2MTA3ZDZkNjgyYTYyZTZjMWZmMTJiMWM2MTc4ZWUwYjI2YjVkOGFlNWVlNDA0M2RiNDE1MTQ2NTcyN2YzMTNlOWUxNzRkN2M2OTYxYWJlOWNiODZhMjEzNjdhODllNDFiNDcyNjdhYzVlZjNhNmVjZWFhY2E1YjE5YWU3NTZiMzkwNGI5N2VjMzVhZWI0MDRkYzJhMmQwZGEzNzNiYTcwOWE2NzhkMjcyOGU3ZDcyZGFhZTY4ZDMzNWNiZjZjOTU3ZCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEyMjQ6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjEwMDAxIjoiZDhlZjdiZGMwZjExMWIxMjQ5ZDVhZDY1MTViNmZlMzdmMmZmMzI3ZjQ5MzgzMmYxMzg1YzEwZTk3NWMwN2IwMjY2NDk3NzE2ZmNiODRmNTAzOWNkNjBmNWEwNTA2MTRmZGUyN2YzNTRhNmM0NWU4YTdkNzRmOTgyMWUyZjMwMTUwMGFjMTk1M2ZlYWZlYjlkOThjZjg4ZDJjOTI4NDEzZjMzNzgxMzEzNWM2NmFiZmMzZGM3YTRkODA2NTVkOTI1YmY5NmYyMTg3MmNhMmIzYTI2ODRiOTc2Y2E3NjhmZTM3ZmVhZTIwYTY5ZWVlYzNjYzhmMWRlMGRiMzRiMzQ2MiI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiJjODFmMDRjNzk5ODI5NzFmYTE3NmQ2NGU4ZjdmODgxMmY4NmE5NGM0OWU4NDY3MmZmMTA5OTZhMmQ2ZGZjNDQ0YTg4NGM3YTg3YzQ2MDZhMWFhYjIyNTU4ODk0ZWU1OWI3OThiNDU3ODI3ZjVlZTBiMGNhZGNkOTQzNzE5MDJjYzRkZGFmOTdhY2VmZWQ2NDE5OTc3MTdiY2IzY2M3NGNkNDQwZjBhMzFlMjBmYjk1ODEyY2VjYjc0MGMzNmQ2ZDFiZjA3ZTM2NDE1MTRjZmE2NzhhZmYyYTM5NTYyZmY0ZDYwZTAyYjE3NTgzYTkyYmYwYzU2ZDY2YmRlOWUwOWY4IjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTI1NjoxMDI0OjE2OiJlMjhhMTM1NDg1MjVlNWYzNmRjY2IyNGVjYjdjYzMzMmNjNjg5ZGZkNjQwMTI2MDRjOWM3ODE2ZDcyYTE2YzNmNWZjZGMwZTg2ZTdjMDMyODBiMWM2OWI1ODZjZTBjZDhhZWM3MjJjYzczYTVkM2I3MzAzMTBiZjdkZmViZGM3N2NlNWQ5NGJiYzM2OWRjMThhMmY3YjA3YmQ1MDVhYjBmODIyMjRhZWYwOWZkYzFlNTA2MzIzNDI1NWUwYjNjNDBhNTJlOWU4YWU2MDg5OGViODhhNzY2YmRkNzg4ZmU5NDkzZDhmZDg2YmNkZDI4ODRkNWMwNjIxNmM2NTQ2OWU1IjoxNjoiMTAwMDEiOiI1MjExMWY0Nzk4ZGEzYzExYjNjNzQzOTQzNTgzNDhhYjBmYzc5N2JkZTk5MDgwZjIzOGQzM2E2OWIwNGIwOGFjMmJkNzY3YjMzODcyNDczOTQzZTIzYWYyN2NhMzJmZDU2OGE0M2E4YzdkNmNjNTViNGZiYjM4MDIxMmZkZmNiNjA0ODdlMjA2OTRkNDI4N2UyMzNlZmRmN2IwNDczN2MwMDM3YTU5MmQwMzA3NzgwMTgyOGIwNTE5OThjNDJiOWY5ZTI0MjAwNjMzMzFkNWIyMzQ5OTE4YTY0ZDhiNjViMjFhMjAxMWVlNzMxOGZjZWY0OGFjZWQ5NWI4ZGRmNTAxIjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImE5NzgyNDg3MTc3MGI3OWRhOTc5YTExMWY2ZGVjZmIxZGQxMWJkOTQ2Y2ZhODAwYjAwOGYwYWQ1YWVhNWFhOTJlMjA1ZDI3YTQ2YzMxZDRmZTZjYjkwOTA5MWJkMjFmMDgyZmI3NTA3NDAwMGVlNDZjMmYzZTUzMGQ3N2IzNGM3YzVkNmY4NDUzMDI1OTUwZDNlMGFmYWUxZjk3NTI2NTVmNWJiZWE4NDMyZTlmMTAxNDM1N2ZmMTFiMDgwNzYxNzlhMTAxZTRmOWQzZjI1YmZmYjVlNjU2YmY2YWZlNmM5N2Q3YWE0NzQwYjVkOTIyNGNkZTRkZWRlMDM1YTc3NjgiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMzg0OjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIxMDAwMSI6ImQ1ZGNkMjdjNzRlMDQwZWE4NmYxMDZiNjNkMzI3NWZhN2I3ZTk4ZDJkZDcwMWYzOGVjMTVmYzczMDFiNzJkZjEyN2Y2ZDNiZDU1NzEyNTNhMGI5ZTBlNzE5ZDdkNTIyODkzODk2OTQxYTFhZWNjYzY5NzkxMjI4MmI1MzA4ZDgyOWI5MTkwNWI1ZGQ3YjdlMWI4ZmUyN2UyYmQ0MDAzYjA5ZGZlN2ZlMjk1ZjhhNDNjMDc2YzBjYjUyZjJhYWMwNjdlODdkZTdmZmUzYTI3NWQyMWE4NzBjM2RmYzliMWQwNmQ3ZjAxODY2N2RlOWViMTg3YmRmNTNkMjgyZTVkOGIiOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNGNlNjE5MzBjNzlkYzAxN2MyZGVhMGM1MDg1ZDczYTNiMGU0YTZmMzQxZTlhNTA2MWE2NjU4YWYxMWU1ZWRmOTViZGFkOTE1YWMzNjE5OTY5ZTM5YmVlMTU3ODhhOGRlNjY3ZjkyZjRlZmM4NGYzNTA4MmQ1MmQ1NjJhYTc0ZTEyY2M3ZjIyZDM0MjViNThmNTA1NmQ3NGFmY2YxNjJjZDQ0ZTY1YjllZTUxMGZmOTFhZjA5NGMzZDJkNDJjM2IwODg1MzZkNjJhOThmMWM2ODllZGNmM2VhM2ZjMjI4ZDcxMWMxMDlkNzZhZTgzZDgyZDZhMzRkY2ZiYWQ1NjNjZiI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEE1MTI6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjEwMDAxIjoiMjcyODBiOTJlYWI1Y2JmMGQ3ODdmZjZmYTZiMDE1MWQ2NjEwYWRmZDI1MTE2MTEzZjJmMTg2ZjNmOGQzOTczNmQ5MWFlNTEwZWMyYmQ5NmYyZGUxMzVhZWZkYTc5MTc4MTM4Njk2ZGNjNmQzMDJlNGE3OWRkYWJiZTE2ZTM5YWI5NjA3NTc3NmFmY2U4NjNlODRhMmU2MDEzY2I0NTdlNDA0N2UyMmQ0M2Y2N2JmNjRhZTVlMWQ4NDRhN2MxMmFjNjk2ZWZiYjNjZGE3YzBlMGFjYTcxZjhhN2FkYTlhMDU0N2JmYWVmZTFiYTJlMDQwNThjNjcyYzgwMzcyMGRkOSI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMTUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiMjI0ZWNkM2I2MzA1ODFkYTk0ODIxNjM2NmM3NDEwMTVhOTcyM2M1ZWE0M2RlNjdlMjg0NTRkMGE4NDZmNTRhNmRmMTY3YTI1Y2M1MDBjZjIxZjcyOWFhZWZlZDZhNzFhM2JkYmE0MzhlMTJlMjBhZDBjNDgzOTZhZmUzODU2OGI3MGEzMTg3ZjI2MDk4ZDZhYzY0OWE3YzdlYTY4ZWQ1Mjc0OGU3MTI1MjI1MTAyMjE2MjM2YTI4ZjY3NzUzYjA3N2NmZDhkOTE5OGI4NmIwYjMzMTAyN2NiNTliMjRiODVmZDkyODk2ZThmMmZmNWExZDExODcyYzJlNmFmNmFlMiI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEExOjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjMiOiIxZjc5MzhiMjBhOWNkOGJiOGNhMjZiYWQ5ZTc5ZWE5MjM3MzE3NDIwM2YzYWIyMTJhMDZkZTM0YTlhM2UxNGUxMDJkMTlhODg3OGMyOGEyZmM4MDgzYTk3YzA2YjE5YzFhZTYyNjc4Mjg5ZDVkMDcxYTkwNGFlZDFkMzY0NjU1ZDllMmQxNjQ4MGE2ZmQxOGY0YzhlZGYyMDQ4NDRhMzRkNTczYjFiOTg4YjgyZDQ5NWNhZWZkOTI5OGMxNjM1MDgzZTE5NmExMWY0YTdkZjZhN2UzY2M0ZGI3Yjk2NDJlNzY4MmQyMmVjNzAzOGMzYmFkNzkxZTEzNjVmZTg4MzY5NzYwOTI0NjBlNmRmNzQ5ZGMwMzJiYWYxZTAyNjY4NGY1NTkzNmJlYjkzNjk4NDVjNTNjM2QyMTc5NDFjMWY4ZDhmNTRhMzIzMzNhNGMwNDljM2YyZDUyNzEyNTc3ODAzMmY1ZDM5MDA0MGQxZDRjY2U4M2RjMzUzY2UyNTAxNTIiOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzE2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNmVjYzcyMmQyMzNkYWQxYWNhNDVlNmJjM2UxYTBiOTlmYjFmODljMGVjNjNiYzY1N2U2YWFhY2JmOTMxZjI2NzEwNmNmZjQyYjcxMjgxOWYzNDFiMWVkZTc5ODk2NGEwYjFhNTAzMmMxOThiMzkxMTExZTg4ZDBkNzMwM2MwMmUyM2ZhMDEzN2U3NGU2MDQ1NzlhMjg1YjJkYmMwYTIzYWViZGRhNjVjMzcxZWI0MDMxMjViZDM2NmU4MjJlNzJkY2VmZmUwZDU1ZGZhMzE1NWMxNjI4MzAyMGRjOWFiYjBkMTUwZGExYWVmMjUxNDg0YWE0OWU0OWUwMDk3NGRhYyI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEyMjQ6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMyI6IjMzOWRjZTNhMTkzNzY2OWQ5ZmIxNGM0ZjY1MjM3ODg2MWZkNWFkYzRkYTg4ZWFmODMzYjE2MDIwYjU1YTI0ZGRjODNiN2FlMzM5NWE5YTQ5YjQyNmJiOWE0MTcwY2I3NjViMDI2NTJmYWE5NTk0YjQ1N2FlZWZkYWU0ZjgwMmU5M2Q4ZTY1YzY4N2RkYzcyMzcwMTQ2NWE1ZWYxOTI0OWVkNWQyNjE3YjUxMjFjNTg1NTdiMzRlYjk5YTY2M2JiY2Y0NDUzYTZlMWRiNWQ4ODcyM2RlNDQ5ZmNmNThjYThlZjUxNGRhZjA4Y2ZkYzcxYmUxNTViYjNkMDcyNGRmMGMwYTZmZDVhYTc3Mzc0MzNjYzM3NjY0MGI5YjhiNGM3ZGRkMDk3NzZiYWUwMjQ1NzI5Y2RkYjU2ZTM2ZjI4ZWRhZDZhZWNhZWQwODIxZWM4ZDg0M2E5NjM0OGU3MjJiZjBhODRjZjA2MGE3OTNhMjE3OWYwNTQxMzhmOTA3ZDBjMyI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMTcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI3MmYwYjFhZTI3ZTFmNWU1YmZhMTVkZWQyMDRjMmM1NGI0N2IyNDIwNzUwYTNlYjU0NzFmOWZmOThiNjdjOGI1ZjFhMzBkM2Y4ZDY0NDg1NjJlMTJjZTRkZWIzM2EyNmNmZWVhZTk5M2Q2YmU5ZTIwNjc5ZDg3MTNjNTIxNjg3MGYxMTI3NmU1ZjIyYjBlYWQyODIxYTdiNGRlZTEwNmZjMWUxOWIxM2ZjOWZiYTVkNmU3M2U0YmQ5M2I2NWE5ODgxYTQzZDVlOTdlYmZiMGIzNTdkNWQwNmIyMWRkYmVjZGJiMTA2MjZkNzc0OGJiOWU2ZTA3ZDQ5MzE2YmJmM2M0IjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTI1NjoxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIzIjoiODExN2E2ODk3ZTE0YzE4MzczNzY2MWNmNTc0MTM1MGE4NGFlMDA0OTVjZDllZThmYjAzMzU4MmU1NTlmNzk3MDFhYjQyNDcwNjY2MDUxNWVlNTgyMWE2OWE2ODUwNjQ3ZWM2NDE2NzZhNjI1ZDFhMzg5OTkzMmFhYTUyMTYxZmJjMGMwYTgyNWRiODJmZGUwNTg1YjNjOWI5YzE2ZGU0M2UyNmRhNmEzMGZlNWE2MDFkYWU2OGJkZWQxZTI5ZWMzNDU1N2I1ZjY5NjJlZmIxMGI5NDUwZDZmMDk2NjU1ZjY4ZTg0OTljZmExNmEwYWRlYjkwNzVlN2I5MTg1MWZlZjg0MjQzMTMyZDA4MjczZDM1ZDAxYWQ4OWMxN2UxZTZlNGRlYWYxY2IyMzMwNTBiMjc1ZmE5ZDJjYWU1N2U5ZTFhMGUyMzEzOTI2NzA0MGFhMzliNmFiZDhmMTBmYTFjZWMzOGNlMjE4MzU3M2RkYzExNjI2ZmMyNjJlMWEwY2VkIjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMxOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImY4MGM5NGEyYjUzNzM2OTc4YWRmMDQxODg2YWQ5N2FiMmFlYjllOTFjMDhiZDRlZWVmNmIyZjJiOGRkNzVhOTliNDUwNjY1NzE4OGJiZDc1OTdiZDU3NTkxMjE2MzA2MjdjOGJmOWNjMzBkOTBkZDQ4OGM3YTgxY2FiYWI1MzUwYTYyZmEzMGFiZjU1MjNmMzA1Yjk4ZjJjMmMxNzQzZWM5ODBjZjI2YWI4MjE5YmZkOTUwNWI5ODFhYjFhYmJmZWY3MzNiMzg0NTE5ZDUyNTlmYzVjMTQ1NzdjYjZiODhmYTdmNmYzMzJmZjZhNjViMjNmYWVjYzI0MzQyYzc4ZTkiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMzg0OjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjMiOiI2YjQ5NTUzZWQ5NjRhZTE5NmE0MWVhMjgxZjRkMmEyNTBjZTdkMWU3NDM0ZTQ1Y2Y2YTgyZjdiZWQxNzU1NGYzOWMzZjAyNDFlMDM2NDcwMmZjYjg3NDc1ZWIwYzA4MzlmZmQyMTgwODkwZmEwNWI0YmJmMzFiYmZhNGJmNTExOWRlYTBjOWY4OGUxZTk2MTdmY2RhZGFiYzZmYTE5NDUxMzZjYzY2ZTAzOWI5MDVkNzhlZDM2NWM1ODA2ZDM4YWVjODhiM2VkZmI4NmMwNWZmNDQ2ZGJmZDUxZDdjZDc1Y2JmOGQzYjg1MTU0Yzc4Mzc2NTM4NmY1MTYzNzUzMjIyMWY1MjQyOWRiNTYxMmRjYzAzNDk2OGJiOGZlYWI3ZGM2ZjVlZDFmMmZlYjU1N2Y2ZGQ0OWM5ODAyOTYxMTdiZTJjNDE5NWVjN2I2MTAxZWE3NjdkZjlkMTZhNTZmYzk3MDliNDkzMDhhNTRkYWI2M2RiYzRkNjA5Zjk1OWNlMTciOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzE5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNGViOTcwOTRiYjQyYWFhNThiMDQwYmQwNmE4ZjMyNDM5NmI5ZWNhOWUzOTM1OWI3MDM5YzRhMDEwNDM0ZWUxMzFhNTNhZWJkOWY3YTU1YWU1OGVhNzQ0NGZhMTUwNWEzZWM1MjRlMDU0ZmQ0MDg1MTNjZGRjMWVlNGMyZjdmZDk1ZWM0YTZmNTk0YmUxYmEzOWZhMWFhOTMzZGMwYTVkYWZmZjVjZTQ0NTA5NTc3ZWJiM2EzZTgwODRjNDQwMTBhYTI3MzIxZTVhM2Y2NDZhZGU5OTE3NTYzM2I3OTVjMGY1NzBiMzYwZWVlYmVlZmFlZjE1Nzg4ZjgwYjVjYmVjZCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEE1MTI6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMyI6IjJiOGI3OTRhODYyMWQ0OTJlZWMxOGE0ZWZkMjM5ZTBlMDc3Yzg5MzQwYTM0YjBmZGJmNDY3ZjJiZjMxMTJjN2YzM2QwMGVlNzM2ZjI5ODhhZjg1NjljMWE3NDg5MWVmYmVmYTgzOWUyOTVmZmZkZjRkOTA4YzFlZGU2MWE4NjFhNGQyNGIxNTRhMDlkMWIzZjkyM2ZkMmJiNzkwNjk5NGNmODJhOTdkYTI4NWJmNDhlNjFmOTBjYzM1OTZmOTM1MGFiOWI2NmEyMTZmZmNhMzIzMTk1YmIyMTNmNWE3N2ZlOGM2OTc0NzU1OTVhMTg1N2RiZWU1ODEyOGNiZjFiZTdjYjIyMDIyOWNlNTI3NjZmZWZkODhjYzEyOWFkNWNiYmRjZDMxZmI0ZWVkZTZjNGZkZDMxOTNhOWFhYWE1NDM2MmJjZWE0MDgyOTgxZDliN2M0MDQ4MzgxNDgyOGYzMjk3ZDk1YWQ5MzNjNzZmMzFjNDdlMzdhOTNmZmFmMGQ0YSI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMjAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiYTNlZGIwZjUyYzYxNjZkN2I3NmU3MTYzNDc2MWY0MDIzMzdjM2U5NjY3NTQ5ZDAwY2Q3ODc3ZTYwNTUzOTZiMzVjNTRjNGRmZmM0Yzk4NzA2MDE3OGZjMTBiN2U1ZTgyN2E1Yzg3MDA1NzAwMmJhNmVmZDMxZmM0ZTYzYTQyOTAyOWJlMGQ2YjI1NmI2YjY1Mzc3NWNiMDI2MzIyNzQzZjQ4ZTMxOWQwNTNjNGFlYWMzNDA3N2FjYjhlMGM2YzJlZjM3NWIyMjEwZjg3ODhiZDIzZDI0ZWIwYjYxNGRlNDE4NzViMWM4ZWM1NmFjZjE4ODI1ZWFmODI2NjkxYmU5NiI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEExOjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjEwMDAxIjoiMTgwNjMwZDJmNGRjOTFkZGIxMTU5OTc4ZTI3OGNkYTdhYzRiMTc4ZTgyNDc3Zjk3NzBjNGQyZTFjNTAxN2QyZjIyMjM0ODY1ODA0NGMxYmU0Y2RhMjRjZTNjOWJhM2Q0MjM1MzZhMzliZjYwMzI0YzFiMzBlYWJkYWQ3MDBiMDk4MmU1ODA3MmY3ZTE4MjE2ZTdlNGMwN2UxNzY3NGVjM2VhYmNmYmFmY2UzMTdkMmY1MzlmMTI5OTAyZDgwMDMxY2EyMDFhOGIzMjU2MjlhOTZjYTRhNzBiNTEyOTRjMmZkZGQxZDBhY2ExNTM3ZDdkOGI3ODBlMWU2MmQzNGJlMmY5ODEwNGQ4NzZhNDk5MDM5NmM4NjI4ZTY0OThkOTY1MWY0NjhiZGYxMTM5NjY0ZWFiZTkxNjZlZmJlOTA5YmY4N2Q3MzA1ZDVmNjBmMWFjYzM1OTllZDMzOWZjZjRlMDA5ZmJhZDQwNTlhZjFhNTAyNjRjYjBhNGVjMWQyM2YzIjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMyMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiJhYzU4ZmQwMjQyMDhkN2YwNDVkODFhNTZjZDU1YWFkNDBhYjg2YjBkMjE2YWI1NTEzNmM3MDI3YWNhMjNlYTEzNDgwYTUyYzBkYWNjZTBkOTgxMzliMjU5NjVhYTRmZjc2YTQxZGQ5MjAzNzE5NWQyNGJjMDc1MGQ1MmNiMzQ2N2I0OGI3YjNlNzFkODUyYzVmODJiZDllZTg1YTgzODhlYWQ1Y2Q4YmMzOGMzZDQ3OTJlOGRhYTk3MzRhMTM3ZDMxOTYzZTI0NWFkMzIxN2ZhZDIzNWY3ZGZkNTU4NGRlMGZlOTFjNDUyNjU2ODU4OGUwOGI2MGJkZjFiYWRkOTlmIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTE6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMTAwMDEiOiJhMTQyYjBkOTQ1NmY4ZjQ3NzI2NzUyNjVhMDg2MTNhNjZjNDE2YmQxYWU3MTI5NzVjNjlkOWNhNWZiOGMxYmU5YzI0MzU5YTA0ZmQxNTQ2MGJmNjEzNmE4YTExZjEzZTNjZTJkZTIxNzE1MjRmMTBjYjcxNWYwZDcxZTNkYjE1MjgxYWI5OWVhZGJlODZjZjhjNWM1MTgxNjJjNjM4ZWYyN2E0ZjdiZmI0YTFhMzg3M2YzYzM4NGE1YjFjM2I0OTY2YzgzN2I5ZDhkMTkyYWMzNGUwMzk0M2I3YWUxOTEzNTVhYTFmZjNiOWNkMDQxYmIyNjY4ZjFmODFjZjBkMDE1YjNkMzYwOGNkOWFjNzkzOTgyMTJjMGYxMzJmMWJkNDVkNDc3NjhiOTk5ZmNmM2MwNWZlMjA2OTU5M2NlZWNlZGM4NTFhN2ZjNDY1YWJjZmVmMGZhYmJhOWI5NDYwMTUzZjZiYTg3MjNhNWM2ZTc2NmM4M2E0NDZhZWYzZWUzMjciOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzIyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiMDI3Zjc2NzkyOGE1ODIxZTI3MjNkNmYzNmM0M2U2YjQ5OGI2ZjBiMzgxODUyNTcxNzk0YTA5NmJkNDlmMWMzNmE0ZDdiYWNlYzdlYzQwMmMyNGI5NzAxNjMxNjkxNzNiYjkzMGVjN2ZkYzM5YmM5NDU3ZGZjNGNhMDUxZjVmMjhhNjRkZTFiYmUwMDdjMjJlODM2OGZmOWIxMTdkYmRhMTdlZmQyZmI3MzQzNGJiYmY1YTQxNThkZjU2ODEzYjhjOTA0YmIyZTc3OWRlNTA0ZGNkOTc0YTI5MTU2ODIxMGQ2Zjg1ODEwMjkxNjA2YTFjMGNkODhkNTFjZWFkZjk4YSI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEyMjQ6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMTAwMDEiOiIwNjc2ZTY0ZGFhYTE4ZjRhZjQ2ZTlkZmJlMjM0ZGIzODliOGE1MjdiMGZlMWRiOTdlYjdmNDA0ZTMxNTUyMjZjYmE3MGQzMTg4MDBmODMxNjBmYTFhYTE5OTE2ZTVjMDlmMDc5MzMxMDc5ZjE4Y2I4YWIxYTRiODg0Y2IyODUwMTgyNDk3NGY2ODNlZDJiOWJhYmFlOWY4YzE1YmVhMzA4MDI4MDVjNmIyMTUyMTE5NzY0ODExYmJmNWYzOTk0ZDJlOTdmYTJmZThjNWFiMTVhMjNjMTRkN2FlNTZiZTAwZWFhOGJjMjY2Nzg0ODFmZjViYTU5YjBhY2ZiMGU0MzM0MWJmZjlmYzYzOGU1NjI1NDgwYTczZGJjNWQ4ZDEzYmQyYjllNjQwMzdjNmI3OWRmMGM2MDg2OTk4MGM2YTIyZWM0NmY4MGZiODU5Y2I0ZWU1ZDIwMzJhYzFmZTUzOGNmZDg1YzcwYTdmMzNiNGFmNTBhOTMzOTU5MTdjMmNmYjYiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzIzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiMDZkY2Q5ZDRjMDU2YjZhNDViOWVkMmFlNWY2YzFjZmE0M2FhZTA2ZmUwMWVlMDk4MjY0YWE3YTgwZTkwMWFiYmNmOWE1MDVlNTVmOWEzNTJlZjBjMDc4ZDQ4MjQ5YjgyOThlNTdlYTIxYmYwZTQyM2MzYmY2OTAwMmFjZmE1NDFjYTA1MDA3YzcwNGJjNzljZWU3YTgwZTExMDdjN2IyOGQyYjJhYTZkZDA5M2IyOGVmZTk2NDI1MTk5NTJhNGE5NWVlNDkyMzVmOTkyNGEwYWMwYWVlNWIyYTFiY2U0NzQ1OWQ3MGNkNmU3NTA3NDYxNDE5OWRjYTQ0NTYxNDA3YyI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEyMjQ6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMTAwMDEiOiI1ZTA4ZjM5OTI1OGU2ZGUwNzViNjdhMGE2YTgyMmNlYjIxYjFlYjdhMDM0MmVjYTZhNDI5NTczOWY2NDQ1NDdkZWUzNDU2MjQzY2YzMmJkNmVhNmYzNTdjODg2MzI1MDg0NTcxMzBmM2RhZTA0Zjc4MDZlZmFlZDQzZDFkNTAxZTE2Yzk2MWRmYmQ2YzcxYTQyYjQ4MGU5NWM3MDI3ZjgyNzUwNjNkMDVhOWFhYzNlZWYwNTIwODY3Yjk4OTZlYmU4ZWMzNThmN2QxMjFiZWI0ZTYxZGRmZGMzZGNkODM1ZGZlMjY1ZjJiYTY4ZDMwMGVmNTY2ZWQxMjg0ZjlmM2Q3YjFhZjM2M2VkNDdiZmEyZTVmMDQ5MjkyNTQ0NGRmN2U1ZmNiMWU3OWU2OTBjNzQ2MTE3NjUwYjU0M2E1ZTgyYzM5NTUzNTUyZjBmNDRlNjE3YjVjZjc3M2M1MzMwNTBmNDEyOWU4OTNhYzIyYWY2OWIxZWI5YWZiNGI1YmE1ZjUiOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzI0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiMTI0MDAyOGM2ZDdhYjM5OTJhZGEwZTVjYTU1ZWU0ZjNkNjJmOGRlNTc1MzAyZDU4NjFkNzM2ODU0MjNjMmU2YTZkNmZiM2JlMDkwZmJjMmE3MDE4MjFiNmQ4ZmQ1ZTgyMzNmNzk0YjY1NDljZDBiYjUyYjM5MGFjMzE0NzgzMDdiZmZhOTFhOWJkOWMxYmY5M2ZmYzg0NjM1NmZlZjAwOGViZWU0YmIzZWUxNDhlMGZiMTg5M2QxODhlNDkzNGQwZDA4OGE0MzNkMTRhNTk2YzVmMmUzZTQ5NjQ4YTIyZWRjNmJkYmNjNThkYzFlZGJkNDQwMDQ2YjNhMTY5Y2EyYiI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEyNTY6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMTAwMDEiOiJhMDAzYWU5Y2YwNzA0ZDU4NzYzYjIxNGYyMDQ0NmVjYzQwOTljNTY2ZjI1Mzg0ZTI4ZDBkZDY1NDBjNTg3MDVmYzhkMGJmZTFjZWFhMDYwOTZlZDFlMjMwMTQ2ZWRiODIwNTZlMzllNjcyN2FiZWMwOWYyNWU0NDA3OWI2Y2UxY2EyYzZhNTQwZGVjN2FhMzQ0NDRkN2Q0MzVmNDFlNWZjYTliMGJiYTYyNzU5YWUyNzgwNjM4ZTUxNjBlMDMxYmI2MDQwOWMyZTg1Njc0YWM3YTc3NmI0NDRiMzdiOWQ3ZjRkYmFhNTU3ZTg4Yjg1NjJhNTg0ZjJkYmU5MDcyOWIyNDFhZWRlOTVkZmNjN2UwNWIxMGRlZWYwNjI1NWNiODlmMGU3Y2NmZjIzMzU0ODE4NzU2YTFmOGJiOWYwMGZkMThmNmNkMjJjYTFiNGJmYzM4MDI3NTYyYmIzNzU2MmM3N2M3ODgzYjVkNzM1MTcwZDc1NTIxMTk1ZmQzZjJiZDMiOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzI1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNjc5MjJhOGI5Y2JjOTVjZjdjNTU1ZmYyZDczY2ZjNjJlZTA0YzNmMGRmOWJmYzhmNjQyOTNhNThiZDNiZWJkMmViMjEyZDcxMWY5NGUzNWM3MjlkMDg3M2Q2YjI0NDkxNGQyMWJkMGU1OWIyMzA4OWIzODc0MGU0M2Y0ODBlOGY0MDdkMDkwYWM5M2IwOGE1NzQwMzk2OGI1NWU3OGNmZTMxZWVlNmU0ZWNiYWNmODM0MTY4ZmU4OWI2Yjg0NTRmY2U2ZTY3NWU4MGY4MmIzM2U4NTBhZTNmM2QyNGZkMzIwMzM1ZTM3OTgxZmQwMDA1NzY5NDFiNGYwOGQ0YmE5OSI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEzODQ6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMTAwMDEiOiIyYzZiMzAxODUyY2M1NWE5OTNhOTMzZTJjMDgwZWI5ZGFiZmUxOWU5ZGMzNTcxMDY2Y2FlYWJlZDE0OTJkMzUwMWNkODM4ZGUxYzAxNzg0OTMyZGY3YTVhZDViYmZiNDhjNzhmNTNhNDVmNzZlOTgxMmQwNDZmMjNiZDk2ODQ5NWVmN2U5ODFlNWFkZDRhY2ZjNTM4ZmUzM2E1MjA1ZGU3NGJiMzdkM2Q5YjZiODdiMmQxNzRlODVhNzNmMjE2ZmQ2N2Q1NzM4ZmM0NjlkZmY3ZWE2Yjg1MmU4ZGQwOGJjOGRmMDM2NTk3MzcyZDRkNTExODVlNmY0N2E0NWZiZTFiOWJkYjA2YTQwMTg3ODM0MjVlYzk1Mjk0ZGU0MWYyNzIzNWFkM2IzMjYzYTg5MGI4YjYyYjE3NDEwYTliYjA4NjczMzkzZmYyMDVhODY2ZWUyMDU3ZTk5YzY1MTdjNmJiYzg0ZjhkODc3MTdiODNkNmY2NGRlN2VlMjE1ZTFlOGQiOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzI2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiMTQyOGI0YTQ0OTY5OGE5OTRlZjg0YzQ2YTUxN2MzYWE2MzU5YzQ4ZTQyNjRlZjY1ZjFmNjlkNzdhZTI2MTMzZTE3ZWRmYzEwM2RlNDE2ZmZmYjRmMmJmZTg2NWI0MzQ1NDRhNDE4ZjZlMmZhY2EwMGExNjVkNDQzZjA2NjNmZjY0MDgwMTU0NjE0ZjcxOTQwNTdkOGI1ZjFmMzM5MzRjYzlmYzIzMTRjZjg2ZDRmZGFkNDg5MmJmMGQzMDU4ZjdmMzdlYmU5OGVmNTJiZmIyNDBiOWFkMzY5MTUzYWZlMDgxYmJjZjlkN2FlNDNlOGJhMzM2YjhhYzU3ZThhNmRhMCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEE1MTI6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMTAwMDEiOiI4ZTEwYTFhZTQ3MGU2ZTU3YThkMjM0MTg1Zjc4ZmRiNjAwY2M2MzZjNDE1NjVhOWYzNjk0YTg0YWUxMDJmNjI1MTk4NGY1NGQxMWE3Nzg1ZmRjZmRmYWY4MGE4MjFlMDVkNTdlZjZiOGVkYzAzZDkwNzY3NTU3NzkzMjJmZDUzZWI5OGM4MDVkYTc3ZGM5MzE2NzQ0ZTM5M2MyZmVjZDI5MWE3ZTYwNDNiMWNhODlmZDgyNDhmNjYxZTFkNTMxMTAyMTFiOTFlZGI0MWIzMWU4NDhjZGUxMTE1ZDhhZmQ5OTYzZWJjYzM2YWZmNWEyNzA4NTk0OWYwNzgxYmM2OTE2N2MxNDBlY2ZlNzFjNDRhYWNhZjQxMjNlNTU3ZWFmMmI1MjhjNmQwZWE4NzViNGNlZWZhOTQyZmUzMzhhZjhkZjEwNTYyYzQzOGFmMDRjZDc1MjFkYTkxMmIzZTM4OTljZWYwZDc1NzIyMTYxYmU2YWJlZDVlNGU5MDA5ZGJmNDAiOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzI3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjQ4NzFhZGMwNWY2YjNlY2YyOTY2ODBiMGRkOGQ4NjcxNWIwZDUyNjRjMDY0MDA4MDM3ZGM0MTA1MTI1MjBiNWYxOTNjOGY0ZDIxZWI2YzQyZTEwZDIyMGMwMjc1YzliMzc1MWYwM2E0MDk2ZTJmMGUzZGI5ZGY4ZDUyMDY4YzA2YTUxNTg5ZDIzY2ExMzYxZTlmZTI3NjkxZTk1NjYzMzAxZWMxNDA3ZmJmNzNhZWU5OWNjOTIzNjJlYWY2OTk0Yjk1MDM4Mzk2ZDgxNTA1MmEwYWVmNjQ4OWJiYjdiY2IwZmZmZGYxM2YwYWY5ZTdkOWZkMTRmNmNlMDBhYjk4ZjciOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMToxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIxMSI6IjE4MGNhZjAzNzgxYjM5MWFhY2ViZTViM2Y1ZTFkM2IwMWM2OGEwMGRmNGVjZmI2YzRiZjE0MjE3YWVkN2NmY2EwYWRhYzA5OWVjMWQ2ZTFmMGI0M2IwOWI4Njc4ODUzM2ZlZTY2OTFkNzczODA3YWYwZGY2Y2MzYmJkZGUzY2YzNGJmNWI4NDhmYTU5YzhiYzEwMjI3Y2MzZWJhMzQ1MmE4NWUwNTIwZmNjZGIyZDhkMzJkZDk5NjcyZDMwMjc1NmEyZDdmN2YyNjkzZGIzYTQ4YmUxN2JkMzRkOWQ4OTFmNGJhNDQ0NDljNWJhZDFkZTkxYjc4OGY1MjQ1MDBhNzcwM2NjY2JhYTc3YjlmZTg3OTFmNWM4YWE3YjhmMDU1MzM2ZjI4ZmNmYzAxNzMzNzEyZTMzY2ZiM2QzM2ZlNzFkZGI5Y2VkMmEzMTkzMWVjMzgwMDdmNWFkNGEwZDE5YWNjNDI4MTI0YjBlNWVlNmUwNzQ2ZmIzM2MxYTRkOTBjOCI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMjgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiIzYmJhNjRkZTM4NDM4YTcxYjk1YWI5Yzk0NTM5ZDU4NzBjMWZiMDhkN2E5OTM3NjAwYzAwZTlkMDYzNDM4ZWRjOTdlNjI1ZDBjZDRiMWViMDBjMzFjOWQ5NGM3YTBmZTZkMDMxNjBkMWI2Y2JlYzVhY2RhZDE2YWRhNmVmMjUzZmVlNjAzZGY5ZmFjYThmOThhNDc3Y2M1NDU2ZjNkZmJmNjQxNGRiZjE5ZjM4MzJlMjI3Y2UyOTE3ODAxODg4ODFlODJlOTZhMmU4NDc0NGYxMmEzNGE5ODA4YTJkYWVkYzZmZDAwYjM0NWM2NzcyYmVjMjZhMDk1NzE5NDUxZTZhIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTIyNDoxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIxMSI6IjhjODQ2ZTc1ZTMyY2U1Zjk5NjRiZGQ4ZjZkY2YxZDI5OTZhNjQ2YjIzM2JjZjFiZDYzOTRlMTNlODU2NjkxYjg5YmVkZDE4MjkwYTBmOWY3YzkwZGNhMzA3MjcxYjMxMDhlNzk1MzQwNDkwNTEzYjI1ZTY3ODllOTM3MjJjNjVlYzA2NGI0YzQzNDU3Mjk1YTMxZDFmMDdkZDYwNWUxMzNmZDZlYWFmYzU4Y2RhMTMyZGYyOTM5ZjVmNjkzZTAyMDVhZjM0NTUwYWZhYTEzN2YzZTQ4Mjg4NWU1MGRmYjQ4MzMzYTE1YzA4MjFlN2ExOTY0MmFjZGRkYzZmZWEzYzc0ODdjNjkxMjQ2YTJiMDgzZGFjNDM5ODg5ZDVhZTc0MWI3ZTA4YzQ3OTM3NTMwYjRiMDY5ZjFhMjYwY2QwN2ZlNGEwZGRkNTMwYWIxMTUzNGZiODA1ZTliNTYyMTE4ZWUwZTk3OTMyOTY2MDA4YWFkZmM4M2YzYjhhMTBkZThlZSI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMjkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiJmNzg1N2NlMDRiZjQyOTJlYTE3NTVmOWU1ODc4MjIzNzJmNGRjZGYxMGJkZGZjMGZmNDk4YThhZjYwYWU5NGEwYjQ4MmU4NzMwODVjMWNkNTJhNWQxODFjZTZiOTlhMWY4NTIwZDc0Yjk0N2Q2NWYzZTdlMzU4ZThkZGM0YWM0YWU0NjVlMzlkNDA4ZWVlMWYwOTg2NTE1OTczM2Y4M2Y1NTNjZDkzY2ZkZTFjMTE0ZmIzZTMyY2Y1MWNkNDE4MzU5MDE2YjM4NjdkZjQ2N2I2NDVkNzUyODA4NjcxYTQ2MDlmM2M0OWE2NzAyM2M5Y2E2MTdlNmNmZmE1NDRhMTBhIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTI1NjoxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIxMSI6Ijk2NzczMDBiYmVlMDAzYmUzYzQ0NTYzNGY4ZWQ1YmViMTUyYjYzZjQ2Zjg0Y2Y1YThlNzIxZTBmYWZlOGYzZjdlOTlhNmQ1MDc0MWYyM2Y0NDlkMzAyNmRhM2U4YTdhYzM2YmU5OWFiNDQ4MzE4MDM0ODZhZTU1MmY3YWEwMWYwNzUyODc4MjliMjMxZDJkMDg0MDkwOGUwOTA4MWFlMTc3ZWQ4ODhmZTQ2YTlkOTM3YTA4NzFlYjVkNTJlYzU0MWM4NDExYzRjYmY3ZWZlYTZjYTIxM2IxMmNlYTUxM2IwNzM5ZWVkY2E3Yzk0NzNlMTBhNzc5NjkzNmY0ZWFhMGM1ZDNhOTAxM2NhNTUzNjc4MWFjNjhlYjJjYTU3NzkxNDRkZTIzZGEyZTk4NzUxMTRhY2E4ODViMzIxOWRmYzI5MmQ3Mzk0MGM1OTkyZWEzYzQ4ODI4ODllNzU0MzQzMDY1Mjg2MGU0NDFhMDFhNDVkOWY0MDA1YTAxMjQyMTQ5MyI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiJjYTMxMjc3NGYyNzU2YWMyMDE5ZjIxM2EwMWE2M2M5YTBiNGE0OWNjYWZlY2YyNWU5N2E0YzYzMjY2OGUzYzc3ZTY2NGY0ZDc2MzUyNDFmMjUyMDVlNTBjMzcwNjFiMDJjNTQ2ZGI4MzQ2ZmE1OTdjM2RhOGNmZDQ0YTgyN2M1YTRmZjRlY2ZjZDE3OTdiMzlhMWIyMTVkOWJiYjkzZmRiNmViMzViYWZiZGE0MjdhNTA2ODg4OGE2ZTE5Zjg2MjI0YjA4OTc0OTA0OTEyMDdlMzVjZTM5MDg1NjY4YjEwYjRmYjg1MWI3ZGQ5NDY1YzAzODY5NzkwZWYzOGE2MWI1IjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTI1NjoxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIzIjoiYTIwMmMzM2ViODMxYjlkOGU4MThiNmMzYmNkYjQyODE4ZTFkOWMyMmEwNmRkZDczYTE3YTIxZTQ5ZDE4Y2RhNDRkZjM0OWEwNjY0NzdjYWUwNjhlMWE1ZDJiNTE4YjA4ODVlODg5ZWY3OTZjYTllNmY0MmE2OWFjNzU1YjhhNjQwNWZiYWVmOTNmZTAxMzBkOThkZTM1ZDY4OWFkZGZlZTNlZWNkMjY2NTg5MDNmNzc0YmRhNDgxYzNmNDBlZTBlOTU2OWEzYzNlMmRhN2FkNTc2YzdkZTgyMTU5ZDkzM2UzNmZhMjljZmVmOTkzNjcwMDVlMzRhYjUwODJkODBmNDgyNzZkMzdkYWJjODhkYmIwMjNiZDAxNTg1MzI5ZDJjY2Y0MTdmNzhlYzUwOGFhYTI5NzUxMDA3ZDMxZjE2NjkyOTZiOTgxZDQ0YzhmYTk5MTMwYzVkZjdhMDcxNzI1YjQ5Njg1OTMxNGFhZjliYWYwZWJjNzgwMzU1OTE0MjQ5IjpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMzMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjJhYmUwNzkwNzcyOTBjZWI2YzgwYWM1YzYxMDYyY2U4ZGE4MTRiMWZiOTlhMWE5ZmIyODYwZWQ5MDBlNjU0MTg1NmVjNjRiZjE5YzBkOWQxY2MyMjgwYjdjYzUwYWYzZTNkMmFkOGUwNDQ5NDVkNDQ3NjFjYTYwODkxZGQ3MmJkNmFhMjZhMzMyNzRmZmNmN2FlN2Q2NjFiNWU2NTExMzVmY2ZmMjFhYWYwNmI0YTJkYjE4ZmU1ODI3ZTAyNDM4ODRmMjg0MTc2MGI5ZjFjNjVmYmRhODcwZjdmMGNmYmQ2ZmY0ODRmMDgyNWU2ODg2MTQ5MjhmMmQxMmQxZTcwODAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMzg0OjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjEwMDAxIjoiNDAyNjMxZjNjZGRmYjAyY2M0ZDljYjU4ZWYxYWI2NzI2YmQ3ODdhNTBlMTJlOTg1NjdjOTcwMmJmZGY0N2FmODU5MDRhZWM1YTJmNmM1ZGY5YTEwZjA4ZjkwZjkzNzI4ZWIwOTBhZTJhYzIxZGVkOWYzOGZhZWNkODE5NWYzZWIzZDQxMDc1MjFiMWNlZTk1NmU3YTIxNDI0NWIwMzhhZGFlOTEyZmEzNWVjOTdjYjNiZGM0MTM1MmU4YWFmZjgwMTczNTYxMjg0Y2I3NDBmOTk5YTNjZDY2NTNhNmMzZDVhM2Y5MTFhNDE2ZjQxZTIxNTUwODM5ODJjOTllYjU5OThhMGE3NGQ3N2YxYWU5OTlkOTAxZWUyNGE3ZjJjNDI0MTc5YTNmOTJiMDdkYzBiMzQ5OGMxODg0ZTYwNjc3YmVlMDE3NWU4MTBiNDI2YzRhZDAwOGQyNzQzY2QxOWIwMGIzMzE3N2JmOGJlM2ZlZDdmNzQwNmUxYmNlMGMyZWEzIjpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMzMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImRhOTUwNTgwOWRjOTJjZmQ4ZTAxYTE4NTdkZGU1MmRmNjY3N2M0MGQ5OGY0NTc3YzE2NTljYTdkM2U5ZjAxZjlhODA5MDY1ZjUxYjU0ZmUyZjk3MjNmZTJjOWQxZWVhNzM5N2YyZDU1MzFkMWM1MWM2ZWExMDBiMDI4NTk2YmY5ZjI0ZGQ5MGJlMTRlYWI1OGYwN2I0ZjI0YTM1YjA3M2FlYjI5ZWNkZTRhNmYzMjAyMzdkN2FkYmRjNDNkOTRmODdlMDg4NjZiOTViYmNhYzgzZGM3ZGIzNTUzYTQyNDAwNDQxZjA4OGUyYmY2MjU5NTM5YTJkYThiNWE3NDA2NWYiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMzg0OjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjExIjoiNTdlZGQwNTYwZGY5ODQwYTI1YzI4ZmY2ZDI1NGU0MzIzOTVhNWNkMmQ5MjI0OGIzYjQ0ZDdlYWIwZmM2NWIzYzRlNTQ1YTkxNmE4ZTkwY2U4OTc0NTExOWRiOWVjOTc5OWFhODg5MGY1MjUwZmI1ODljZmMxMmRhYzFiNmU0MDZhMzliYzNiMzY2Mzg5MmRhNTM1NGJhNDUzY2JkNWU0Yzg5YmRjZTgyZDBmZmU5NzA1MmEwM2E1YzMzMDg4MTljMTEzOWViYzc4MGMxM2NmNmRjMTQ3N2ZhZjczNGFiY2IxZGIzZmFmYWVkNmYyMjg4NWM5YzAyMjJmZjVkZWFjYjhjYzZkMDI3ZjJlOTU5YzMwNzUwMTFiMzgyZTg4YzRiMjdiODNiNGYyZTZmZGEwMjJlMzMxYzM2MDJkMTlmNWFjN2JjY2ZlOTVlYTFlOTNkNzM2ZGJkOTE4YWU1YjFmNDY4Y2QwYjViNTM2YTJmOTE4ZDVlMjdhMDc1N2U3NWI3IjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMzMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImQwY2QwMzhjNjViM2FjY2E0NTgyMmVhZjkxZWE1MTc2ZTgyMDQzMjY4ODc2ZGVjMGI2MmUyYWJkNjE5MDIzYjcwMjNhYmM2N2M2YjgyM2NmZWY1NDQ3Yjg3NzJmOTg1ZmY3OTEwZDZjYzg3ZTZjMjM2ODhhYzZkZTFmZWU0MGJiZTJkYTFhOTI3NzBkZTkyYWRhYTQyN2FjZTAyZmVlNTcxYTBhMDE3NmZjZWIwYzhmM2ViNzJkZGU4MzlhYjIwMTM5NTYyNWY1YzBkYjg2NDFjZTE5ZDc3MTEyMTJkZWM2MTczMzI2MmM2Y2U0NDc2YzAyNWU2N2EzZDViYzAxZjMiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBNTEyOjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjExIjoiMmYzMDYyOWMxMTE3ZDAxM2JiMzZlNjA5OWRlZTkzMWRjYWYwYTEwMzJiMDdlYzIzZTJiMjYyODk4YTg5NDVlNTY5Yzk1NzNkODFlMjJiYjBhNWY4YTI4YjBkN2I4ZmYwMTM2N2RkN2YwODljNjhlZDFkYWExMWNmNTNhOTZlZTkxYjM4ZTZiODM5YjZlOTBiZWEzNGQxNGI3OGY1ZDJjNzYyOWI2OGM1YjRmMmVjZmZmNjZiNDgzYjIyMzNjYjE0Zjk1ZGY1MzNjODY3YTJiNjEwYWViY2RiYjdlYTMxMDlhYWYyZjU3NjJhYjNlZGMyNTcxZGVjY2M3ZGEwYzlhNWI0NDNjYTJiOTI0YzBmMThkZTdiYmI3MzZhMDhmZWQzOTE2Nzk1MDE4YTQzNmEzYWU2MmM4NWQ1NTRhNTNhNmQ0ODYyMzkwOGUwNmU3ZDI3NWY0MjUxZDNiM2JkNTMwYmQxMWUxNTVkY2YyYjVjMmFkZjAzMGNkZjkzMWFlNzQ5IjpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMzNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBNTEyOjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjExIjoiMGI0ZDk2ZjQxMWM3MjdhMjYyZDZkMGFkZTM0MTk1Yjc4NjAzNTUxMDYxOTE3ZDA2MGY4OWFkZDQ3YjA5ZGZlODcxNWY0ZjkxNDdkMzI3ZGMyNWU5MWZlNDU3ZTVkMWEyZjIyY2Q4ZmU2ZmU4ZTI5ZDIwNjA2NTgzMDdjODdhNDA2NDA2NTBmZWYzZDRiMjg5YTZjM2ZlYmM1YTEwMGIyOWE4YjU2NjIzYWZiMjlmZDNjMTNlYTM3MmJmM2M2MzhjMWRiMjVmOGJkOGM3NGM4MjFiZWVjN2I1YWZmY2FjZTFkMDVkMDU2YTZjMmQzMDM1OTI2YzdhMjY4ZGY0NzUxYTU0YmMyMGE2YjhjZmQ3MjlhN2NiYTMwOWFlODE3ZGFjY2JlZjk5NTBhNDgyY2YyMzk1MGE4Y2ExZDNhMTNkZGI3ZDhkMGY4N2FkNTU4N2Q0ZDllYmUxOWZlOTM0NTc1OTdhN2JkZDA1NmMyZmQ0Y2VhN2QzMWU0YTBlNTk1YTdiIjowCisKK1JTQSBQS0NTMSBTaWduICMxIChTSEE1MTIsIDE1MzYgYml0cyBSU0EpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3NpZ246IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBNTEyOjE1MzY6MTY6ImM4YzY3ZGY4OTRjODgyMDQ1ZWRlMjZhOTAwOGFiMDllYTA2NzIwNzdkN2JjNzFkNDEyNTExY2Q5Mzk4MWRkZGU4ZjkxYjk2N2RhNDA0MDU2YzM5ZjEwNWY3ZjIzOWFiZGFmZjkyOTIzODU5OTIwZjYyOTllODJiOTViZDViOGM5NTk5NDhmNGEwMzVjYmQ2OTNhZDgzMDE0Mjk0ZDM0OTgxM2QxYWQ1NzkxMWE2MzU1ZDA3MzFmZTNhMDM0ZTlkYiI6MTY6ImYxNTE0N2QwZTdjMDRhMWUzZjM3YWRkZTgwMmNkYzYxMDk5OWJmN2FiMDA4ODQzNGFhZWRhMGMwYWIzOTEwYjE0ZDJjZTU2Y2I2NmJmZmQ5NzU1MjE5NWZhZThiMDYxMDc3ZTAzOTIwODE0ZDhiOWNmYjVhMzk1OGIzYTgyYzJhN2ZjOTdlNTVkYjU5NzhiNDdhOTIyMTU2ZWI4YTNlNTVjMDZhNTRhNDVkMTY3MGFiZGZiOTk1NDg5YzRkMDA1MSI6MTY6ImJkNDI5YmI3YzNiMDBiYmVhMTliYTY2NGMwZjgxNzJkMWE3M2MzY2ZhMDVlMmVkNjU2ZDU3MGMxNTkwOTE4YmI3ZTM3MmVkMjVlMmNkNzEzOTViYTBhOWIxYTMwZjNlZTAxMmZmYjA1NDZjYWI4ZTM1ODFmZTNlMjNmNDRhYjU3YThhZWU5NzE3ZTcxYTkzNmE1ODBmYTg1NzJkNDUwZmIwMDMzOWE2ZjY3MDRiNzE3ZGYwYzE0OWE0NjViYWI3NjhjNjE1MDBjZDkzYjYxMTEzZmYzZTQzODkxNjdmN2IyYzhlM2MwZGEyZDQ3NjUyODZiZWU1NTViMGJjYjQ5OThmNTliMTRmYWQwMzE4MGExN2M4YjRmNjliY2QxMjM0ZjRhZTg1OTUwMTM3NjY1YWMyYmE4MGI1NWNjOWIxYWFmYjQ1NGI4Mzc3MWFhNzU1YWNkMmEwMGU5M2RkYjY1ZTY5NmRiZWQ4YmRjYTY5ZmI1ZTBjNWMyMDk3YjljZmU0YiI6MTY6IjMiOiI5M2I2ZmE5OTQ4NWMxMTZjYTZlZmRkNDIwMmVhMWNmNDlmNGM2MzQ1ZmFlNjkyNTg0NDEzNzQzY2U1YjY1NTEwZThlNDY5MGFlZTlhMTllYTFmZjEwZDU3ZjIyYWEzNTQ4ZDgzOWYyOGE4NTI1YTM0MzU0ZTllNThlMGYzOTQ3ZTA1NmNlMjU1NGUyMWJmMjg3ZTIyMGI5OGRiM2I1NTEyNThjZDQyYjQ5NWU1ZDFhM2JiYzgzYzlkMWEwMmYyYTMwMGVmNmQ4NjZlYTc1MTA4ZTQ0ZWJiM2UxNmI0N2RmMmY2ZGUyOGZlYjJiZTM4NzRkYmJmMjE1OTk0NTEwODJkODZlOWYyZjQ2MjU3NWE4MTg1YzY5YWExZjFmY2I2YTM2M2M1ZDcxYWViYTIxMDM0NDllYWYzODQ1Mjg1MjkxMTQ4ZDVmNzhkMTY0NmI4ZGM5NWNiY2M0MDgyZjk4N2Q5NDhiMGU3ZDRlODBiNjA1OTVmOGE3NTE3NTg0ZTE2NDMiOjAKKworUlNBIFBLQ1MxIFNpZ24gIzEgVmVyaWZ5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEE1MTI6MTUzNjoxNjoiYmQ0MjliYjdjM2IwMGJiZWExOWJhNjY0YzBmODE3MmQxYTczYzNjZmEwNWUyZWQ2NTZkNTcwYzE1OTA5MThiYjdlMzcyZWQyNWUyY2Q3MTM5NWJhMGE5YjFhMzBmM2VlMDEyZmZiMDU0NmNhYjhlMzU4MWZlM2UyM2Y0NGFiNTdhOGFlZTk3MTdlNzFhOTM2YTU4MGZhODU3MmQ0NTBmYjAwMzM5YTZmNjcwNGI3MTdkZjBjMTQ5YTQ2NWJhYjc2OGM2MTUwMGNkOTNiNjExMTNmZjNlNDM4OTE2N2Y3YjJjOGUzYzBkYTJkNDc2NTI4NmJlZTU1NWIwYmNiNDk5OGY1OWIxNGZhZDAzMTgwYTE3YzhiNGY2OWJjZDEyMzRmNGFlODU5NTAxMzc2NjVhYzJiYTgwYjU1Y2M5YjFhYWZiNDU0YjgzNzcxYWE3NTVhY2QyYTAwZTkzZGRiNjVlNjk2ZGJlZDhiZGNhNjlmYjVlMGM1YzIwOTdiOWNmZTRiIjoxNjoiMyI6IjkzYjZmYTk5NDg1YzExNmNhNmVmZGQ0MjAyZWExY2Y0OWY0YzYzNDVmYWU2OTI1ODQ0MTM3NDNjZTViNjU1MTBlOGU0NjkwYWVlOWExOWVhMWZmMTBkNTdmMjJhYTM1NDhkODM5ZjI4YTg1MjVhMzQzNTRlOWU1OGUwZjM5NDdlMDU2Y2UyNTU0ZTIxYmYyODdlMjIwYjk4ZGIzYjU1MTI1OGNkNDJiNDk1ZTVkMWEzYmJjODNjOWQxYTAyZjJhMzAwZWY2ZDg2NmVhNzUxMDhlNDRlYmIzZTE2YjQ3ZGYyZjZkZTI4ZmViMmJlMzg3NGRiYmYyMTU5OTQ1MTA4MmQ4NmU5ZjJmNDYyNTc1YTgxODVjNjlhYTFmMWZjYjZhMzYzYzVkNzFhZWJhMjEwMzQ0OWVhZjM4NDUyODUyOTExNDhkNWY3OGQxNjQ2YjhkYzk1Y2JjYzQwODJmOTg3ZDk0OGIwZTdkNGU4MGI2MDU5NWY4YTc1MTc1ODRlMTY0MyI6MAorCitSU0EgUEtDUzEgU2lnbiAjMiAoU0hBMjU2LCAyMDQ4IGJpdHMgUlNBKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV9zaWduOiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTI1NjoyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjVhZWUyYjlkYmMwMmE2YTJkODdmZjY0YTY0MTY1ZGMwYjljZTcwYzc5YmFiMmQyODc5MzllMjYwMWMzMjIzZTA0OTM5ODhkNTQ2ODczMWFlNGVkYzdkNWY1ZDQ0OTMzNWMyMDRmZGIwZTE5MmMxOTE1YzlkNjk0ZDNhNjFjM2JlMTRkZjc5YzRiMzRkNmFjNzM3MDc4MjkwMjRkMjYzYzk0ZjkxMDdmYTkzZjM3ODNkZTM5NjU1MjIzMzZlMThkMWUwMWExNDJiNTEwMzQ1MWJiOTc4MzllYWYyZjQ0NzAzYTYzMDUwYTM2Yjc4YWVmNDA3MmVhMWE4ZGFhYWYxYTI5MThmYzAzZWU5NTdhOWMwOWVmZGM3Mjg3YmNiNGQ2YWVjNDcyMzI5MDI5NGIyNDliM2UzZGM2MzE1N2I1NjBhZDljODY3MzIzYTczZWJlYjM2MGNjOWU0ODIxMTE2NDNiMGQ4NmM0ZTMzZGNmMTcwMTU1NTkwZjBlYmE3ZDE3MDc4OWU4NGRlMzM2YjdmZTJmNmNmNDg1ZGRjYTk0NjA3YTRmZjM3OWZjNDlkMzc1YzczMDI0OWRkMWEyMTBlN2RjY2Q3NjJkMWMyM2M3NTMyZTc2OWM2YWE4OGUzOGU4NjU0ZmY5MGY3YjM0ZGY0YzA3YmE5MGU4OTA5OWVjMWVkIjowCisKK1JTQSBQS0NTMSBTaWduICMyIFZlcmlmeQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjU2OjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjVhZWUyYjlkYmMwMmE2YTJkODdmZjY0YTY0MTY1ZGMwYjljZTcwYzc5YmFiMmQyODc5MzllMjYwMWMzMjIzZTA0OTM5ODhkNTQ2ODczMWFlNGVkYzdkNWY1ZDQ0OTMzNWMyMDRmZGIwZTE5MmMxOTE1YzlkNjk0ZDNhNjFjM2JlMTRkZjc5YzRiMzRkNmFjNzM3MDc4MjkwMjRkMjYzYzk0ZjkxMDdmYTkzZjM3ODNkZTM5NjU1MjIzMzZlMThkMWUwMWExNDJiNTEwMzQ1MWJiOTc4MzllYWYyZjQ0NzAzYTYzMDUwYTM2Yjc4YWVmNDA3MmVhMWE4ZGFhYWYxYTI5MThmYzAzZWU5NTdhOWMwOWVmZGM3Mjg3YmNiNGQ2YWVjNDcyMzI5MDI5NGIyNDliM2UzZGM2MzE1N2I1NjBhZDljODY3MzIzYTczZWJlYjM2MGNjOWU0ODIxMTE2NDNiMGQ4NmM0ZTMzZGNmMTcwMTU1NTkwZjBlYmE3ZDE3MDc4OWU4NGRlMzM2YjdmZTJmNmNmNDg1ZGRjYTk0NjA3YTRmZjM3OWZjNDlkMzc1YzczMDI0OWRkMWEyMTBlN2RjY2Q3NjJkMWMyM2M3NTMyZTc2OWM2YWE4OGUzOGU4NjU0ZmY5MGY3YjM0ZGY0YzA3YmE5MGU4OTA5OWVjMWVkIjowCisKK1JTQSBQS0NTMSBTaWduICMyIFZlcmlmeSAoRmFpbCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTI1NjoyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI1YWVlMmI5ZGJjMDJhNmEyZDg3ZmY2NGE2NDE2NWRjMGI5Y2U3MGM3OWJhYjJkMjg3OTM5ZTI2MDFjMzIyM2UwNDkzOTg4ZDU0Njg3MzFhZTRlZGM3ZDVmNWQ0NDkzMzVjMjA0ZmRiMGUxOTJjMTkxNWM5ZDY5NGQzYTYxYzNiZTE0ZGY3OWM0YjM0ZDZhYzczNzA3ODI5MDI0ZDI2M2M5NGY5MTA3ZmE5M2YzNzgzZGUzOTY1NTIyMzM2ZTE4ZDFlMDFhMTQyYjUxMDM0NTFiYjk3ODM5ZWFmMmY0NDcwM2E2MzA1MGEzNmI3OGFlZjQwNzJlYTFhOGRhYWFmMWEyOTE4ZmMwM2VlOTU3YTljMDllZmRjNjI4N2JjYjRkNmFlYzQ3MjMyOTAyOTRiMjQ5YjNlM2RjNjMxNTdiNTYwYWQ5Yzg2NzMyM2E3M2ViZWIzNjBjYzllNDgyMTExNjQzYjBkODZjNGUzM2RjZjE3MDE1NTU5MGYwZWJhN2QxNzA3ODllODRkZTMzNmI3ZmUyZjZjZjQ4NWRkY2E5NDYwN2E0ZmYzNzlmYzQ5ZDM3NWM3MzAyNDlkZDFhMjEwZTdkY2NkNzYzZDFjMjNjNzUzMmU3NjljNmFhODhlMzhlODY1NGZmOTBmN2IzNGRmNGMwN2JhOTBlODkwOTllYzFlZCI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0EgUEtDUzEgU2lnbiAjMyAoU0hBMjI0LCAyMDQ4IGJpdHMgUlNBKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV9zaWduOiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTIyNDoyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjlkNzY4YjhiMzE0MjFmOWQ5Y2VkODkwYWFmYWY4YjM0Njg2NTY0MTkwNDllZDI2OGY2ZTE5OTIwNjZmNDVkYzNlNGNkMzQ5ZThjNWVkNWEwNmU0ZWY1YmFkYWJhMDY0YmE5NDkwN2RmZWRmM2Q3MDhiZWNhZjQ0YWU5YjI3YzM4NjZkMzI5MzExYmE5M2U4ZGRjN2ZjMjg0ZmJhMDVkMWJiODRmYjFlMDYwYTViNzZiN2ZhNTE1Y2ZjZDJjODE0NDQ3NDYyMzY3MjcwM2NhYzFlMTVmZjRmZGY4ZWYxOWQzNjVjNTFiYTg2ZTYwZjRjYmJjZDA3Zjk1NjA2MDYyNTc1MWJmYmVjYzQ3OTQ1NjQ2NDU5Y2FkYWRkZDkwMDYwM2E4MTQ5YTkzYjMxYTZkNDMyZTFkYTFhNjdlYjc2NWY1YjJmMGJkMWFkYjlhZjEyZDczMWM3YjAyOTMxYjQyZGJiZmQ4YzdjZWNkZTc2YjgxN2U5NmY2NjQxNDdhMmM1MDkxYzZjZTRkYzU2MmM1ZjU3MTU5ZDZmOWRjOWJhMmRhYTIxMmRiNTY2Nzc4Mzk2MjFiZDQ4MDVkZGU2Mjk1NWZiMmQwY2MyYzQ0ODEwOWQxMGVjYzYyMDZlYTgxZjBhMDJlMTY0NjQ3MTM1OGYzZWMxNDZjZDNjNzVmMmQzOTBiIjowCisKK1JTQSBQS0NTMSBTaWduICMzIFZlcmlmeQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjI0OjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjlkNzY4YjhiMzE0MjFmOWQ5Y2VkODkwYWFmYWY4YjM0Njg2NTY0MTkwNDllZDI2OGY2ZTE5OTIwNjZmNDVkYzNlNGNkMzQ5ZThjNWVkNWEwNmU0ZWY1YmFkYWJhMDY0YmE5NDkwN2RmZWRmM2Q3MDhiZWNhZjQ0YWU5YjI3YzM4NjZkMzI5MzExYmE5M2U4ZGRjN2ZjMjg0ZmJhMDVkMWJiODRmYjFlMDYwYTViNzZiN2ZhNTE1Y2ZjZDJjODE0NDQ3NDYyMzY3MjcwM2NhYzFlMTVmZjRmZGY4ZWYxOWQzNjVjNTFiYTg2ZTYwZjRjYmJjZDA3Zjk1NjA2MDYyNTc1MWJmYmVjYzQ3OTQ1NjQ2NDU5Y2FkYWRkZDkwMDYwM2E4MTQ5YTkzYjMxYTZkNDMyZTFkYTFhNjdlYjc2NWY1YjJmMGJkMWFkYjlhZjEyZDczMWM3YjAyOTMxYjQyZGJiZmQ4YzdjZWNkZTc2YjgxN2U5NmY2NjQxNDdhMmM1MDkxYzZjZTRkYzU2MmM1ZjU3MTU5ZDZmOWRjOWJhMmRhYTIxMmRiNTY2Nzc4Mzk2MjFiZDQ4MDVkZGU2Mjk1NWZiMmQwY2MyYzQ0ODEwOWQxMGVjYzYyMDZlYTgxZjBhMDJlMTY0NjQ3MTM1OGYzZWMxNDZjZDNjNzVmMmQzOTBiIjowCisKK1JTQSBQS0NTMSBTaWduICM0IChTSEEzODQsIDIwNDggYml0cyBSU0EpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3NpZ246IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMzg0OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiNDBkY2M5NjgyMmU1NjEyZWIzM2YxZGNhMjQ3YTM1MTA5YmEzODQ1YzdhM2Q1NTZhNjBlNjU2NjI0YmYxYzEwM2Q5NDY4NmNhNzM3OWU5ZTMyOWNjZDFiMTliNTJiZmQ0OGI2MDhkZjlmNTlhOTZhODJkM2ZlYjAxMDEwOTZkYmNiODBlNDZkYTU0M2I0Yzk4MmFjNmJiMTcxN2YyNGY5ZmUzZjc2YjcxNTQ0OTJiNDc1MjViZTFkZGNhZjQ2MzFkMzM0ODE1MzFiZThmM2U2ODU4MzdiNDBiZGY0YTAyODI3ZDc5ZjZhMzIzNzQxNDcxNzQ2ODBmNTFjOGUwZDhlZWQ5ZDVjNDQ1YTU2M2E3YmNlOWVmNDIzNmU3Y2ZkYzEyYjIyMjNlZjQ1N2MzZThjY2M2ZGQ2NWNjMjNlOTc3YTFmMDNmNWVmNTg0ZmViOWFmMDBlZmM3MWE3MDFmOWQ0MTNiMDI5MGFmMTc2OTJjYjgyMWExZTg2M2Q1Nzc4ZTE3NGIxMTMwNjU5ZjMwNTgzZjQzNGYwOWNiMTIxMjQ3MWE0MWRkNjVjMTAyZGU2NGExOTRiNmFlM2U0M2NkNzU5MjgwNDlkYjc4MDQyYzU4ZTk4MGFmZjNlYTI3NzRlNDI4NDViY2YyMTc0MTBhMTE4Y2Y1ZGVlYWE2NDIyNGRiYzgiOjAKKworUlNBIFBLQ1MxIFNpZ24gIzQgVmVyaWZ5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEzODQ6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiNDBkY2M5NjgyMmU1NjEyZWIzM2YxZGNhMjQ3YTM1MTA5YmEzODQ1YzdhM2Q1NTZhNjBlNjU2NjI0YmYxYzEwM2Q5NDY4NmNhNzM3OWU5ZTMyOWNjZDFiMTliNTJiZmQ0OGI2MDhkZjlmNTlhOTZhODJkM2ZlYjAxMDEwOTZkYmNiODBlNDZkYTU0M2I0Yzk4MmFjNmJiMTcxN2YyNGY5ZmUzZjc2YjcxNTQ0OTJiNDc1MjViZTFkZGNhZjQ2MzFkMzM0ODE1MzFiZThmM2U2ODU4MzdiNDBiZGY0YTAyODI3ZDc5ZjZhMzIzNzQxNDcxNzQ2ODBmNTFjOGUwZDhlZWQ5ZDVjNDQ1YTU2M2E3YmNlOWVmNDIzNmU3Y2ZkYzEyYjIyMjNlZjQ1N2MzZThjY2M2ZGQ2NWNjMjNlOTc3YTFmMDNmNWVmNTg0ZmViOWFmMDBlZmM3MWE3MDFmOWQ0MTNiMDI5MGFmMTc2OTJjYjgyMWExZTg2M2Q1Nzc4ZTE3NGIxMTMwNjU5ZjMwNTgzZjQzNGYwOWNiMTIxMjQ3MWE0MWRkNjVjMTAyZGU2NGExOTRiNmFlM2U0M2NkNzU5MjgwNDlkYjc4MDQyYzU4ZTk4MGFmZjNlYTI3NzRlNDI4NDViY2YyMTc0MTBhMTE4Y2Y1ZGVlYWE2NDIyNGRiYzgiOjAKKworUlNBIFBLQ1MxIFNpZ24gIzUgKE1EMiwgMjA0OCBiaXRzIFJTQSkKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfc2lnbjoiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9NRDI6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI2Y2JiMGU0MDE5ZDY0ZGQ1Y2QyZDQ4ZmE0MzQ0NmU1Y2JhMWE3ZWRiYjc5ZDkxYjE5OWJlNzVjN2QzZTdhZTA4MjBjNDRkM2ExMjBjZDI5MTBmNzNjYmIzMTVlMTU5NjNhNjBlYTdkYTM0NTIwMTVkOWQ2YmViNWFjOTk4ZmRkYmQxZmEzZTU5MDhhYmM5MTUxZjNmZmI3MDM2NWFhZWU2ZmIwY2Q0NDBkM2Y1NTkxODY4ZmMxMzZmYWUzOGFjN2JjZGIzYmRlM2M2YTAzNjJkZDhiODE0ZjdlZGFkZDRhNTFiMmVkZjIyMjdhNDBkMWUzNGMyOWY2MDhhZGQ3NzQ2NzMxNDI1ODU4ZWI5MzY2MWM2MzNiN2E5MDk0MmZjYTNjZDU5NGFiNGVjMTcwMDUyZDQ0MTA1NjQzNTE4MDIwNzgyZTc2MjM1ZGVmMzRkMDE0MTM1YmFkOGRhZWQ1OTAyMDA0ODIzMjVjMzQxNmMzZDY2NDE3ZTgwZDlmOWM2MzIyYTU0NjgzNjM4MjQ3YjU3NzQ0NWVjZDBiZTI3NjVjZTk2YzRlZTQ1MjEzMjA0MDI2ZGZiYTI0ZDVlZTg5ZTFlYTc1NTM4YmEzOWY3MTQ5YTVhYzBmYzEyZDdjNTNjYmMxMjQ4MWQ0YThlMmQ0MTBlYzYzM2Q4MDBhZDRiNDMwNCI6MAorCitSU0EgUEtDUzEgU2lnbiAjNSBWZXJpZnkKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX01EMjoyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI2Y2JiMGU0MDE5ZDY0ZGQ1Y2QyZDQ4ZmE0MzQ0NmU1Y2JhMWE3ZWRiYjc5ZDkxYjE5OWJlNzVjN2QzZTdhZTA4MjBjNDRkM2ExMjBjZDI5MTBmNzNjYmIzMTVlMTU5NjNhNjBlYTdkYTM0NTIwMTVkOWQ2YmViNWFjOTk4ZmRkYmQxZmEzZTU5MDhhYmM5MTUxZjNmZmI3MDM2NWFhZWU2ZmIwY2Q0NDBkM2Y1NTkxODY4ZmMxMzZmYWUzOGFjN2JjZGIzYmRlM2M2YTAzNjJkZDhiODE0ZjdlZGFkZDRhNTFiMmVkZjIyMjdhNDBkMWUzNGMyOWY2MDhhZGQ3NzQ2NzMxNDI1ODU4ZWI5MzY2MWM2MzNiN2E5MDk0MmZjYTNjZDU5NGFiNGVjMTcwMDUyZDQ0MTA1NjQzNTE4MDIwNzgyZTc2MjM1ZGVmMzRkMDE0MTM1YmFkOGRhZWQ1OTAyMDA0ODIzMjVjMzQxNmMzZDY2NDE3ZTgwZDlmOWM2MzIyYTU0NjgzNjM4MjQ3YjU3NzQ0NWVjZDBiZTI3NjVjZTk2YzRlZTQ1MjEzMjA0MDI2ZGZiYTI0ZDVlZTg5ZTFlYTc1NTM4YmEzOWY3MTQ5YTVhYzBmYzEyZDdjNTNjYmMxMjQ4MWQ0YThlMmQ0MTBlYzYzM2Q4MDBhZDRiNDMwNCI6MAorCitSU0EgUEtDUzEgU2lnbiAjNiAoTUQ0LCAyMDQ4IGJpdHMgUlNBKQorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV9zaWduOiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX01ENDoyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6ImIwZTYwZGM0ZGZhZjBmNjM2YTNhNDQxNGVhZTJkN2JjZTdjM2NlNTA1YTQ2ZTM4ZjNmNjU0ZDg3NjliMzFiNzg5MWJhMThmODk2NzJmY2UyMDRiYmFjNmUzNzY0MzU1ZTY1NDQ3YzA4Nzk5NDczMWNkNDRmMDg2NzEwZTc5ZThjM2ViYzZlMmNiNjFlZGM1ZDNlMDU4NDhhYjczM2Q5NWVmZTJkMDI1MmE2OTFlODEwYzE3ZmE1N2ZkMmRkMjk2Mzc0YzliYTE3ZmVhNzA0Njg1Njc3ZjQ1ZDY2OGEzODZjOGNhNDMzZmJiYjU2ZDNiYmZiNDNhNDg5ZWQ5NTE4YjFjOWFiMTNjZTQ5N2ExY2VjOTE0Njc0NTNiZmU1MzMxNDVhMzFhMDk1YzJkZTU0MTI1NTE0MTc2OGNjYzZmZGZmM2ZjNzkwYjUwNTBmMTEyMmM5M2MzMDQ0YTkzNDY5NDdlMWIyM2U4MTI1YmY3ZWRiZjM4YzY0YTQyODZkZmMxYjgyOWU5ODNkYjMxMTc5NTlhMjU1OWE4ZWY5NzY4N2FiNjczZTIzMWJlMjEzZDg4ZWRjNjMyNjM3YjU4Y2RiMmQ2OWM1MWZiZjZiZjg5NGNmZjMxOTIxNjcxOGIxZTY5NmY3NWNkNDM2NmY1M2RjMmUyOGIyYTAwMDE3OTg0MjA3IjowCisKK1JTQSBQS0NTMSBTaWduICM2IFZlcmlmeQorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfTUQ0OjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6ImIwZTYwZGM0ZGZhZjBmNjM2YTNhNDQxNGVhZTJkN2JjZTdjM2NlNTA1YTQ2ZTM4ZjNmNjU0ZDg3NjliMzFiNzg5MWJhMThmODk2NzJmY2UyMDRiYmFjNmUzNzY0MzU1ZTY1NDQ3YzA4Nzk5NDczMWNkNDRmMDg2NzEwZTc5ZThjM2ViYzZlMmNiNjFlZGM1ZDNlMDU4NDhhYjczM2Q5NWVmZTJkMDI1MmE2OTFlODEwYzE3ZmE1N2ZkMmRkMjk2Mzc0YzliYTE3ZmVhNzA0Njg1Njc3ZjQ1ZDY2OGEzODZjOGNhNDMzZmJiYjU2ZDNiYmZiNDNhNDg5ZWQ5NTE4YjFjOWFiMTNjZTQ5N2ExY2VjOTE0Njc0NTNiZmU1MzMxNDVhMzFhMDk1YzJkZTU0MTI1NTE0MTc2OGNjYzZmZGZmM2ZjNzkwYjUwNTBmMTEyMmM5M2MzMDQ0YTkzNDY5NDdlMWIyM2U4MTI1YmY3ZWRiZjM4YzY0YTQyODZkZmMxYjgyOWU5ODNkYjMxMTc5NTlhMjU1OWE4ZWY5NzY4N2FiNjczZTIzMWJlMjEzZDg4ZWRjNjMyNjM3YjU4Y2RiMmQ2OWM1MWZiZjZiZjg5NGNmZjMxOTIxNjcxOGIxZTY5NmY3NWNkNDM2NmY1M2RjMmUyOGIyYTAwMDE3OTg0MjA3IjowCisKK1JTQSBQS0NTMSBTaWduICM3IChNRDUsIDIwNDggYml0cyBSU0EpCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3NpZ246IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfTUQ1OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiM2JjZjY3M2MzYjI3ZjZlMmVjZTRiYjk3YzdhMzcxNjFlNmM2ZWU3NDE5ZWYzNjZlZmMzY2ZlZTBmMTVmNDE1ZmY2ZDlkNDM5MDkzNzM4NmM2ZmVjMTc3MWFjYmE3M2YyNGVjNmIwNDY5ZWE4Yjg4MDgzZjBiNGUxYjYwNjlkN2JmMjg2ZTY3Y2Y5NDE4MmE1NDg2NjMxMzdlODJhNmUwOWMzNWRlMmMyNzc3OWRhMDUwM2YxZjViZWRmZWJhZGYyYTg3NWYxNzc2M2EwNTY0ZGY0YTZkOTQ1YTVhM2U0NmJjOTBmYjY5MmFmM2E1NTEwNmFhZmM2YjU3NzU4NzQ1NmZmOGQ0OWNmZDVjMjk5ZDdhMmI3NzZkYmU0YzFhZTc3N2IwZjY0YWEzYmFiMjc2ODlhZjMyZDZjYzc2MTU3YzdkYzY5MDBhMzQ2OWUxOGE3ZDliNmJmZTQ5NTFkMTEwNWEwODg2NDU3NWU0ZjRlYzA1YjNlMDUzZjliN2EyZDU2NTNhZTA4NWU1MGE2MzM4MGQ2YmRkNmY1OGFiMzc4ZDdlMGEyYmU3MDhjNTU5ODQ5ODkxMzE3MDg5YWIwNGM4MmQ4YmM1ODllYTA4OGI5MGIxMWRlYTVjZjg1ODU2ZmY3ZTYwOWNjMWFkYjFkNDAzYmVlYWQ0YzEyNmZmMjkwMjEiOjAKKworUlNBIFBLQ1MxIFNpZ24gIzcgVmVyaWZ5CitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9NRDU6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiM2JjZjY3M2MzYjI3ZjZlMmVjZTRiYjk3YzdhMzcxNjFlNmM2ZWU3NDE5ZWYzNjZlZmMzY2ZlZTBmMTVmNDE1ZmY2ZDlkNDM5MDkzNzM4NmM2ZmVjMTc3MWFjYmE3M2YyNGVjNmIwNDY5ZWE4Yjg4MDgzZjBiNGUxYjYwNjlkN2JmMjg2ZTY3Y2Y5NDE4MmE1NDg2NjMxMzdlODJhNmUwOWMzNWRlMmMyNzc3OWRhMDUwM2YxZjViZWRmZWJhZGYyYTg3NWYxNzc2M2EwNTY0ZGY0YTZkOTQ1YTVhM2U0NmJjOTBmYjY5MmFmM2E1NTEwNmFhZmM2YjU3NzU4NzQ1NmZmOGQ0OWNmZDVjMjk5ZDdhMmI3NzZkYmU0YzFhZTc3N2IwZjY0YWEzYmFiMjc2ODlhZjMyZDZjYzc2MTU3YzdkYzY5MDBhMzQ2OWUxOGE3ZDliNmJmZTQ5NTFkMTEwNWEwODg2NDU3NWU0ZjRlYzA1YjNlMDUzZjliN2EyZDU2NTNhZTA4NWU1MGE2MzM4MGQ2YmRkNmY1OGFiMzc4ZDdlMGEyYmU3MDhjNTU5ODQ5ODkxMzE3MDg5YWIwNGM4MmQ4YmM1ODllYTA4OGI5MGIxMWRlYTVjZjg1ODU2ZmY3ZTYwOWNjMWFkYjFkNDAzYmVlYWQ0YzEyNmZmMjkwMjEiOjAKKworUlNBIFBLQ1MxIFNpZ24gIzggKFJBVywgMjA0OCBiaXRzIFJTQSkKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK3JzYV9wa2NzMV9zaWduX3JhdzoiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6IjEyMzQ1Njc4OTBkZWFkYmVlZiI6TUJFRFRMU19SU0FfUEtDU19WMTU6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI2MDViYWY5NDdjMGRlNDllNGY2YTBkZmI5NGE0M2FlMzE4ZDVkZjhlZDIwYmE0YmE1YTM3YTczZmIwMDljNWM5ZTVjY2U4YjcwYTI1YjFjNzU4MGYzODlmMGQ3MDkyNDg1Y2RmYTAyMjA4YjcwZDMzNDgyZWRmMDdhN2VhZmViZGM1NDg2MmNhMGUwMzk2YTVhN2QwOTk5MWI5NzUzZWIxZmZiNjA5MTk3MWJiNTc4OWM2YjEyMWFiYmNkMGEzY2JhYTM5OTY5ZmE3YzI4MTQ2ZmNlOTZjNmQwMzI3MmUzNzkzZTViZThmNWFiZmE5YWZjYmViYjk4NmQ3YjMwNTA2MDRhMmFmNGQzYTQwZmE2YzAwMzc4MWE1MzlhNjAyNTlkMWU4NGYxMzMyMmRhOWU1MzhhNDljMzY5YjgzZTcyODZiZjdkMzBiNjRiYmI3NzM1MDY3MDVkYTVkNWQ1NDgzYTU2M2ExZmZhY2M5MDJmYjc1YzlhNzUxYjFlODNjZGM3YTZkYjA0NzAwNTY4ODNmNDhiNWE1NDQ2YjQzYjFkMTgwZWExMmJhMTFhNmE4ZDkzYjNiMzJhMzAxNTZiNjA4NGI3ZmIxNDI5OThhMmEwZDI4MDE0Yjg0MDk4ZWNlN2Q5ZDVlNGQ1NWNjMzQyY2EyNmY1YTAxNjdhNjc5ZGVjOCIKKworUlNBIFBLQ1MxIFNpZ24gIzggVmVyaWZ5CitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjE1Cityc2FfcGtjczFfdmVyaWZ5X3JhdzoiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6IjEyMzQ1Njc4OTBkZWFkYmVlZiI6TUJFRFRMU19SU0FfUEtDU19WMTU6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiNjA1YmFmOTQ3YzBkZTQ5ZTRmNmEwZGZiOTRhNDNhZTMxOGQ1ZGY4ZWQyMGJhNGJhNWEzN2E3M2ZiMDA5YzVjOWU1Y2NlOGI3MGEyNWIxYzc1ODBmMzg5ZjBkNzA5MjQ4NWNkZmEwMjIwOGI3MGQzMzQ4MmVkZjA3YTdlYWZlYmRjNTQ4NjJjYTBlMDM5NmE1YTdkMDk5OTFiOTc1M2ViMWZmYjYwOTE5NzFiYjU3ODljNmIxMjFhYmJjZDBhM2NiYWEzOTk2OWZhN2MyODE0NmZjZTk2YzZkMDMyNzJlMzc5M2U1YmU4ZjVhYmZhOWFmY2JlYmI5ODZkN2IzMDUwNjA0YTJhZjRkM2E0MGZhNmMwMDM3ODFhNTM5YTYwMjU5ZDFlODRmMTMzMjJkYTllNTM4YTQ5YzM2OWI4M2U3Mjg2YmY3ZDMwYjY0YmJiNzczNTA2NzA1ZGE1ZDVkNTQ4M2E1NjNhMWZmYWNjOTAyZmI3NWM5YTc1MWIxZTgzY2RjN2E2ZGIwNDcwMDU2ODgzZjQ4YjVhNTQ0NmI0M2IxZDE4MGVhMTJiYTExYTZhOGQ5M2IzYjMyYTMwMTU2YjYwODRiN2ZiMTQyOTk4YTJhMGQyODAxNGI4NDA5OGVjZTdkOWQ1ZTRkNTVjYzM0MmNhMjZmNWEwMTY3YTY3OWRlYzgiOjAKKworUlNBIFBLQ1MxIFNpZ24gIzggVmVyaWZ5IChXcm9uZyByYXcgaGFzaCkKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK3JzYV9wa2NzMV92ZXJpZnlfcmF3OiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjoiMTIzNDU2Nzg5MGRlYWRjYWZlIjpNQkVEVExTX1JTQV9QS0NTX1YxNToyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI2MDViYWY5NDdjMGRlNDllNGY2YTBkZmI5NGE0M2FlMzE4ZDVkZjhlZDIwYmE0YmE1YTM3YTczZmIwMDljNWM5ZTVjY2U4YjcwYTI1YjFjNzU4MGYzODlmMGQ3MDkyNDg1Y2RmYTAyMjA4YjcwZDMzNDgyZWRmMDdhN2VhZmViZGM1NDg2MmNhMGUwMzk2YTVhN2QwOTk5MWI5NzUzZWIxZmZiNjA5MTk3MWJiNTc4OWM2YjEyMWFiYmNkMGEzY2JhYTM5OTY5ZmE3YzI4MTQ2ZmNlOTZjNmQwMzI3MmUzNzkzZTViZThmNWFiZmE5YWZjYmViYjk4NmQ3YjMwNTA2MDRhMmFmNGQzYTQwZmE2YzAwMzc4MWE1MzlhNjAyNTlkMWU4NGYxMzMyMmRhOWU1MzhhNDljMzY5YjgzZTcyODZiZjdkMzBiNjRiYmI3NzM1MDY3MDVkYTVkNWQ1NDgzYTU2M2ExZmZhY2M5MDJmYjc1YzlhNzUxYjFlODNjZGM3YTZkYjA0NzAwNTY4ODNmNDhiNWE1NDQ2YjQzYjFkMTgwZWExMmJhMTFhNmE4ZDkzYjNiMzJhMzAxNTZiNjA4NGI3ZmIxNDI5OThhMmEwZDI4MDE0Yjg0MDk4ZWNlN2Q5ZDVlNGQ1NWNjMzQyY2EyNmY1YTAxNjdhNjc5ZGVjOCI6TUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQKKworUlNBIFBLQ1MxIFNpZ24gIzkgKEludmFsaWQgRGlnZXN0IHR5cGUpCitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV9zaWduOiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjpNQkVEVExTX1JTQV9QS0NTX1YxNToyNTU6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiIzYmNmNjczYzNiMjdmNmUyZWNlNGJiOTdjN2EzNzE2MWU2YzZlZTc0MTllZjM2NmVmYzNjZmVlMGYxNWY0MTVmZjZkOWQ0MzkwOTM3Mzg2YzZmZWMxNzcxYWNiYTczZjI0ZWM2YjA0NjllYThiODgwODNmMGI0ZTFiNjA2OWQ3YmYyODZlNjdjZjk0MTgyYTU0ODY2MzEzN2U4MmE2ZTA5YzM1ZGUyYzI3Nzc5ZGEwNTAzZjFmNWJlZGZlYmFkZjJhODc1ZjE3NzYzYTA1NjRkZjRhNmQ5NDVhNWEzZTQ2YmM5MGZiNjkyYWYzYTU1MTA2YWFmYzZiNTc3NTg3NDU2ZmY4ZDQ5Y2ZkNWMyOTlkN2EyYjc3NmRiZTRjMWFlNzc3YjBmNjRhYTNiYWIyNzY4OWFmMzJkNmNjNzYxNTdjN2RjNjkwMGEzNDY5ZTE4YTdkOWI2YmZlNDk1MWQxMTA1YTA4ODY0NTc1ZTRmNGVjMDViM2UwNTNmOWI3YTJkNTY1M2FlMDg1ZTUwYTYzMzgwZDZiZGQ2ZjU4YWIzNzhkN2UwYTJiZTcwOGM1NTk4NDk4OTEzMTcwODlhYjA0YzgyZDhiYzU4OWVhMDg4YjkwYjExZGVhNWNmODU4NTZmZjdlNjA5Y2MxYWRiMWQ0MDNiZWVhZDRjMTI2ZmYyOTAyMSI6TUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBCisKK1JTQSBQS0NTMSBTaWduICM5IFZlcmlmeSAoSW52YWxpZCBEaWdlc3QgdHlwZSkKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6MjU1OjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjNiY2Y2NzNjM2IyN2Y2ZTJlY2U0YmI5N2M3YTM3MTYxZTZjNmVlNzQxOWVmMzY2ZWZjM2NmZWUwZjE1ZjQxNWZmNmQ5ZDQzOTA5MzczODZjNmZlYzE3NzFhY2JhNzNmMjRlYzZiMDQ2OWVhOGI4ODA4M2YwYjRlMWI2MDY5ZDdiZjI4NmU2N2NmOTQxODJhNTQ4NjYzMTM3ZTgyYTZlMDljMzVkZTJjMjc3NzlkYTA1MDNmMWY1YmVkZmViYWRmMmE4NzVmMTc3NjNhMDU2NGRmNGE2ZDk0NWE1YTNlNDZiYzkwZmI2OTJhZjNhNTUxMDZhYWZjNmI1Nzc1ODc0NTZmZjhkNDljZmQ1YzI5OWQ3YTJiNzc2ZGJlNGMxYWU3NzdiMGY2NGFhM2JhYjI3Njg5YWYzMmQ2Y2M3NjE1N2M3ZGM2OTAwYTM0NjllMThhN2Q5YjZiZmU0OTUxZDExMDVhMDg4NjQ1NzVlNGY0ZWMwNWIzZTA1M2Y5YjdhMmQ1NjUzYWUwODVlNTBhNjMzODBkNmJkZDZmNThhYjM3OGQ3ZTBhMmJlNzA4YzU1OTg0OTg5MTMxNzA4OWFiMDRjODJkOGJjNTg5ZWEwODhiOTBiMTFkZWE1Y2Y4NTg1NmZmN2U2MDljYzFhZGIxZDQwM2JlZWFkNGMxMjZmZjI5MDIxIjpNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEKKworUlNBIFBLQ1MxIFNpZ24gIzggKEludmFsaWQgcGFkZGluZyB0eXBlKQorbWJlZHRsc19yc2FfcGtjczFfc2lnbjoiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6MjpNQkVEVExTX01EX01ENToyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjNiY2Y2NzNjM2IyN2Y2ZTJlY2U0YmI5N2M3YTM3MTYxZTZjNmVlNzQxOWVmMzY2ZWZjM2NmZWUwZjE1ZjQxNWZmNmQ5ZDQzOTA5MzczODZjNmZlYzE3NzFhY2JhNzNmMjRlYzZiMDQ2OWVhOGI4ODA4M2YwYjRlMWI2MDY5ZDdiZjI4NmU2N2NmOTQxODJhNTQ4NjYzMTM3ZTgyYTZlMDljMzVkZTJjMjc3NzlkYTA1MDNmMWY1YmVkZmViYWRmMmE4NzVmMTc3NjNhMDU2NGRmNGE2ZDk0NWE1YTNlNDZiYzkwZmI2OTJhZjNhNTUxMDZhYWZjNmI1Nzc1ODc0NTZmZjhkNDljZmQ1YzI5OWQ3YTJiNzc2ZGJlNGMxYWU3NzdiMGY2NGFhM2JhYjI3Njg5YWYzMmQ2Y2M3NjE1N2M3ZGM2OTAwYTM0NjllMThhN2Q5YjZiZmU0OTUxZDExMDVhMDg4NjQ1NzVlNGY0ZWMwNWIzZTA1M2Y5YjdhMmQ1NjUzYWUwODVlNTBhNjMzODBkNmJkZDZmNThhYjM3OGQ3ZTBhMmJlNzA4YzU1OTg0OTg5MTMxNzA4OWFiMDRjODJkOGJjNTg5ZWEwODhiOTBiMTFkZWE1Y2Y4NTg1NmZmN2U2MDljYzFhZGIxZDQwM2JlZWFkNGMxMjZmZjI5MDIxIjpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK1JTQSBQS0NTMSBTaWduICM4IFZlcmlmeSAoSW52YWxpZCBwYWRkaW5nIHR5cGUpCittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOjE6TUJFRFRMU19NRF9NRDU6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiM2JjZjY3M2MzYjI3ZjZlMmVjZTRiYjk3YzdhMzcxNjFlNmM2ZWU3NDE5ZWYzNjZlZmMzY2ZlZTBmMTVmNDE1ZmY2ZDlkNDM5MDkzNzM4NmM2ZmVjMTc3MWFjYmE3M2YyNGVjNmIwNDY5ZWE4Yjg4MDgzZjBiNGUxYjYwNjlkN2JmMjg2ZTY3Y2Y5NDE4MmE1NDg2NjMxMzdlODJhNmUwOWMzNWRlMmMyNzc3OWRhMDUwM2YxZjViZWRmZWJhZGYyYTg3NWYxNzc2M2EwNTY0ZGY0YTZkOTQ1YTVhM2U0NmJjOTBmYjY5MmFmM2E1NTEwNmFhZmM2YjU3NzU4NzQ1NmZmOGQ0OWNmZDVjMjk5ZDdhMmI3NzZkYmU0YzFhZTc3N2IwZjY0YWEzYmFiMjc2ODlhZjMyZDZjYzc2MTU3YzdkYzY5MDBhMzQ2OWUxOGE3ZDliNmJmZTQ5NTFkMTEwNWEwODg2NDU3NWU0ZjRlYzA1YjNlMDUzZjliN2EyZDU2NTNhZTA4NWU1MGE2MzM4MGQ2YmRkNmY1OGFiMzc4ZDdlMGEyYmU3MDhjNTU5ODQ5ODkxMzE3MDg5YWIwNGM4MmQ4YmM1ODllYTA4OGI5MGIxMWRlYTVjZjg1ODU2ZmY3ZTYwOWNjMWFkYjFkNDAzYmVlYWQ0YzEyNmZmMjkwMjEiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBIFBLQ1MxIEVuY3J5cHQgIzEKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQ6IjRFNjM2QUY5OEU0MEYzQURDRkNDQjY5OEY0RTgwQjlGIjpNQkVEVExTX1JTQV9QS0NTX1YxNToyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiJiMGMwYjE5M2JhNGE1YjQ1MDJiZmFjZDFhOWMyNjk3ZGE1NTEwZjNlM2FiNzI3NGNmNDA0NDE4YWZkMmM2MmM4OWI5OGQ4M2JiYzIxYzhjMWJmMWFmZTZkOGJmNDA0MjVlMDUzZTljMDNlMDNhM2JlMGVkYmUxZWRhMDczZmFkZTFjYzI4NmNjMDMwNWE0OTNkOThmZTc5NTYzNGMzY2FkN2ZlYjUxM2VkYjc0MmQ2NmQ5MTBjODdkMDdmNmIwMDU1YzM0ODhiYjI2MmI1ZmQxY2U4NzQ3YWY2NDgwMWZiMzlkMmQzYTNlNTcwODZmZmU1NWFiOGQwYTJjYTg2OTc1NjI5YTBmODU3NjdhNDk5MGM1MzJhN2MyZGFiMTY0Nzk5N2ViYjIzNGQwYjI4YTAwMDhiZmViZmM5MDVlN2JhNWIzMGI2MDU2NmE1ZTAxOTA0MTc0NjVlZmRiZjU0OTkzNGI4ZjBjNWM5ZjM2YjdjNWI2MzczYTQ3YWU1NTNjZWQwNjA4YTE2MWIxYjcwZGZhNTA5Mzc1Y2Y3YTM1OTgyMjNhNmQ3YjdhMWQxYTA2YWM3NGQzNDVhOWJiN2MwZTQ0YzgzODg4NThhNGYxZDgxMTVmMmJkNzY5ZmZhNjkwMjAzODVmYTI4NjMwMmM4MGU5NTBmOWUyNzUxMzA4NjY2YyI6MAorCitSU0EgUEtDUzEgRGVjcnlwdCAjMSAoVmVyaWZ5KQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdDoiYTQyZWRhNDFlNTYyMzVlNjY2ZTdmYWFhNzcxMDAxOTdmNjU3Mjg4YTFiZjE4M2U0ODIwZjBjMzdjZTJjNDU2Yjk2MDI3OGQ2MDAzZTBiYmNkNGJlNGE5NjlmOGU4ZmQ5MjMxZTFmNDkyNDE0ZjAwZWQwOTg0NDk5NGM4NmVjMzJkYjdjZGUzYmVjN2YwYzNkYmY2YWU1NWJhZWIyNzEyZmE2MDlmNWZjMzIwN2E4MjRlYjNkYWNlMzE4NDljZDZhNjA4NDMxODUyMzkxMmJjY2I4NGNmNDJlM2M2ZDZkMTY4NTEzMWQ2OWJiNTQ1YWNlYzgyN2QyYjBkZmRkNTU2OGI3ZGNjNGY1YTExZDY5MTY1ODNmZWZhNjg5ZDM2N2Y4YzllMWQ5NWRjZDIyNDA4OTVhOTQ3MGIwYzE3MzBmOTdjZDZlODU0Njg2MGJkMjU0ODAxNzY5ZjU0YmU5NmUxNjM2MmRkY2JmMzRkNTYwMzUwMjg4OTAxOTllMGY0OGRiMzg2NDJjYjY2YTQxODFlMDI4YTY0NDNhNDA0ZmVhMjg0Y2UwMmI0NjE0YjY4MzM2N2Q0MDg3NGU1MDU2MTFkMjMxNDJkNDlmMDZmZWVhODMxZDUyZDM0N2IxMzYxMGI0MTNjNGVmYzQzYTZkZTlmMGIwOGQyYTk1MWRjNTAzYjYiOk1CRURUTFNfUlNBX1BLQ1NfVjE1OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxMDAwOiI0RTYzNkFGOThFNDBGM0FEQ0ZDQ0I2OThGNEU4MEI5RiI6MAorCitSU0EgUEtDUzEgRW5jcnlwdCAjMiAoRGF0YSB0b28gbGFyZ2UpCitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV9lbmNyeXB0OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6TUJFRFRMU19SU0FfUEtDU19WMTU6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiYTQyZWRhNDFlNTYyMzVlNjY2ZTdmYWFhNzcxMDAxOTdmNjU3Mjg4YTFiZjE4M2U0ODIwZjBjMzdjZTJjNDU2Yjk2MDI3OGQ2MDAzZTBiYmNkNGJlNGE5NjlmOGU4ZmQ5MjMxZTFmNDkyNDE0ZjAwZWQwOTg0NDk5NGM4NmVjMzJkYjdjZGUzYmVjN2YwYzNkYmY2YWU1NWJhZWIyNzEyZmE2MDlmNWZjMzIwN2E4MjRlYjNkYWNlMzE4NDljZDZhNjA4NDMxODUyMzkxMmJjY2I4NGNmNDJlM2M2ZDZkMTY4NTEzMWQ2OWJiNTQ1YWNlYzgyN2QyYjBkZmRkNTU2OGI3ZGNjNGY1YTExZDY5MTY1ODNmZWZhNjg5ZDM2N2Y4YzllMWQ5NWRjZDIyNDA4OTVhOTQ3MGIwYzE3MzBmOTdjZDZlODU0Njg2MGJkMjU0ODAxNzY5ZjU0YmU5NmUxNjM2MmRkY2JmMzRkNTYwMzUwMjg4OTAxOTllMGY0OGRiMzg2NDJjYjY2YTQxODFlMDI4YTY0NDNhNDA0ZmVhMjg0Y2UwMmI0NjE0YjY4MzM2N2Q0MDg3NGU1MDU2MTFkMjMxNDJkNDlmMDZmZWVhODMxZDUyZDM0N2IxMzYxMGI0MTNjNGVmYzQzYTZkZTlmMGIwOGQyYTk1MWRjNTAzYjYiOk1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQQorCitSU0EgUEtDUzEgRGVjcnlwdCAjMiAoRGF0YSB0b28gc21hbGwpCitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0OiJkZWFkYmVhZmNhZmVkZWFkYmVlZmZlZGNiYTk4NzYiOk1CRURUTFNfUlNBX1BLQ1NfVjE1OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxMDAwOiI0RTYzNkFGOThFNDBGM0FEQ0ZDQ0I2OThGNEU4MEI5RiI6TUJFRFRMU19FUlJfUlNBX1BSSVZBVEVfRkFJTEVEICsgTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBCisKK1JTQSBQS0NTMSBFbmNyeXB0ICMzIChJbnZhbGlkIHBhZGRpbmcgbW9kZSkKK21iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQ6IjRFNjM2QUY5OEU0MEYzQURDRkNDQjY5OEY0RTgwQjlGIjoyOjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6ImE0MmVkYTQxZTU2MjM1ZTY2NmU3ZmFhYTc3MTAwMTk3ZjY1NzI4OGExYmYxODNlNDgyMGYwYzM3Y2UyYzQ1NmI5NjAyNzhkNjAwM2UwYmJjZDRiZTRhOTY5ZjhlOGZkOTIzMWUxZjQ5MjQxNGYwMGVkMDk4NDQ5OTRjODZlYzMyZGI3Y2RlM2JlYzdmMGMzZGJmNmFlNTViYWViMjcxMmZhNjA5ZjVmYzMyMDdhODI0ZWIzZGFjZTMxODQ5Y2Q2YTYwODQzMTg1MjM5MTJiY2NiODRjZjQyZTNjNmQ2ZDE2ODUxMzFkNjliYjU0NWFjZWM4MjdkMmIwZGZkZDU1NjhiN2RjYzRmNWExMWQ2OTE2NTgzZmVmYTY4OWQzNjdmOGM5ZTFkOTVkY2QyMjQwODk1YTk0NzBiMGMxNzMwZjk3Y2Q2ZTg1NDY4NjBiZDI1NDgwMTc2OWY1NGJlOTZlMTYzNjJkZGNiZjM0ZDU2MDM1MDI4ODkwMTk5ZTBmNDhkYjM4NjQyY2I2NmE0MTgxZTAyOGE2NDQzYTQwNGZlYTI4NGNlMDJiNDYxNGI2ODMzNjdkNDA4NzRlNTA1NjExZDIzMTQyZDQ5ZjA2ZmVlYTgzMWQ1MmQzNDdiMTM2MTBiNDEzYzRlZmM0M2E2ZGU5ZjBiMDhkMmE5NTFkYzUwM2I2IjpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK1JTQSBQS0NTMSBEZWNyeXB0ICMzIChJbnZhbGlkIHBhZGRpbmcgbW9kZSkKK21iZWR0bHNfcnNhX3BrY3MxX2RlY3J5cHQ6ImE0MmVkYTQxZTU2MjM1ZTY2NmU3ZmFhYTc3MTAwMTk3ZjY1NzI4OGExYmYxODNlNDgyMGYwYzM3Y2UyYzQ1NmI5NjAyNzhkNjAwM2UwYmJjZDRiZTRhOTY5ZjhlOGZkOTIzMWUxZjQ5MjQxNGYwMGVkMDk4NDQ5OTRjODZlYzMyZGI3Y2RlM2JlYzdmMGMzZGJmNmFlNTViYWViMjcxMmZhNjA5ZjVmYzMyMDdhODI0ZWIzZGFjZTMxODQ5Y2Q2YTYwODQzMTg1MjM5MTJiY2NiODRjZjQyZTNjNmQ2ZDE2ODUxMzFkNjliYjU0NWFjZWM4MjdkMmIwZGZkZDU1NjhiN2RjYzRmNWExMWQ2OTE2NTgzZmVmYTY4OWQzNjdmOGM5ZTFkOTVkY2QyMjQwODk1YTk0NzBiMGMxNzMwZjk3Y2Q2ZTg1NDY4NjBiZDI1NDgwMTc2OWY1NGJlOTZlMTYzNjJkZGNiZjM0ZDU2MDM1MDI4ODkwMTk5ZTBmNDhkYjM4NjQyY2I2NmE0MTgxZTAyOGE2NDQzYTQwNGZlYTI4NGNlMDJiNDYxNGI2ODMzNjdkNDA4NzRlNTA1NjExZDIzMTQyZDQ5ZjA2ZmVlYTgzMWQ1MmQzNDdiMTM2MTBiNDEzYzRlZmM0M2E2ZGU5ZjBiMDhkMmE5NTFkYzUwM2I2IjoyOjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxMDAwOiI0RTYzNkFGOThFNDBGM0FEQ0ZDQ0I2OThGNEU4MEI5RiI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0EgUEtDUzEgRGVjcnlwdCAjNCAoT3V0cHV0IGJ1ZmZlciB0b28gc21hbGwpCitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0OiJhNDJlZGE0MWU1NjIzNWU2NjZlN2ZhYWE3NzEwMDE5N2Y2NTcyODhhMWJmMTgzZTQ4MjBmMGMzN2NlMmM0NTZiOTYwMjc4ZDYwMDNlMGJiY2Q0YmU0YTk2OWY4ZThmZDkyMzFlMWY0OTI0MTRmMDBlZDA5ODQ0OTk0Yzg2ZWMzMmRiN2NkZTNiZWM3ZjBjM2RiZjZhZTU1YmFlYjI3MTJmYTYwOWY1ZmMzMjA3YTgyNGViM2RhY2UzMTg0OWNkNmE2MDg0MzE4NTIzOTEyYmNjYjg0Y2Y0MmUzYzZkNmQxNjg1MTMxZDY5YmI1NDVhY2VjODI3ZDJiMGRmZGQ1NTY4YjdkY2M0ZjVhMTFkNjkxNjU4M2ZlZmE2ODlkMzY3ZjhjOWUxZDk1ZGNkMjI0MDg5NWE5NDcwYjBjMTczMGY5N2NkNmU4NTQ2ODYwYmQyNTQ4MDE3NjlmNTRiZTk2ZTE2MzYyZGRjYmYzNGQ1NjAzNTAyODg5MDE5OWUwZjQ4ZGIzODY0MmNiNjZhNDE4MWUwMjhhNjQ0M2E0MDRmZWEyODRjZTAyYjQ2MTRiNjgzMzY3ZDQwODc0ZTUwNTYxMWQyMzE0MmQ0OWYwNmZlZWE4MzFkNTJkMzQ3YjEzNjEwYjQxM2M0ZWZjNDNhNmRlOWYwYjA4ZDJhOTUxZGM1MDNiNiI6TUJFRFRMU19SU0FfUEtDU19WMTU6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjE1OiI0RTYzNkFGOThFNDBGM0FEQ0ZDQ0I2OThGNEU4MEI5RiI6TUJFRFRMU19FUlJfUlNBX09VVFBVVF9UT09fTEFSR0UKKworUlNBIENoZWNrIGVtcHR5IHByaXZhdGUga2V5Cityc2FfY2hlY2tfcHJpdmtleV9udWxsOgorCitSU0EgQ2hlY2sgUHJpdmF0ZSBrZXkgIzEgKENvcnJlY3QpCittYmVkdGxzX3JzYV9jaGVja19wcml2a2V5OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiNzdCMUQ5OTMwMEQ2QTU0RTg2NDk2MkRBMDlBRTEwQ0YxOUE3RkI4ODg0NTZCQzI2NzJCNzJBRUE1MkIyMDQ5MTQ0OTNEMTZDMTg0QUQyMDFFQzNGNzYyRTFGQkQ4NzAyQkE3OTZFRjk1M0Q5RUEyRjI2MzAwRDI4NTI2NEYxMUIwQzgzMDFEMDIwN0ZFQjFFMkM5ODQ0NDVDODk5QjBBQ0VCQUE3NEVGMDE0REQxRDRCRERCNDMyMDJDMDhEMkZGOTY5MkQ4RDc4ODQ3OERFQzgyOUVCNTJBRkI1QUUwNjhGQkRCQUM0OTlBMjdGQUNFQ0MzOTFFNzVDOTM2RDU1RjA3QkI0NUVFMTg0REFCNDU4MDhFMTU3MjI1MDJGMjc5Rjg5QjM4QzFDQjI5MjU1N0U1MDYzNTk3RjUyQzc1RDYxMDAxRURDMzNGNDczOTM1M0UzM0U1NkFEMjczQjA2N0MxQTI3NjAyMDg1MjlFQTQyMTc3NEE1RkZGQ0IzNDIzQjFFMDA1MUU3NzAyQTU1RDgwQ0JGMjE0MTU2OUYxOEY4N0JGRjUzOEExREE4RURCQjI2OTNBNTM5RjY4RTBENjJENzc3NDNGODlFQUNGM0IxNzIzQkRCMjVDRTJGMzMzRkE2M0NBQ0YwRTY3REYxQTQzMTg5M0JCOUIzNTJGQ0IiOjE2OiI5QTY2Q0Y3NjU3MkE3MUExNzQ3NTc5NEZBMUM4QzcwRDk4N0U1ODFFOTkwRDc3MkJCMjdDNzdDNTNGRjFFQ0JCMzEyNjBFOUVEQUZBRUJDNzk5OTE4MDdFNDg5MThFQUI4QzNBNUYwM0E2MDBGMzBDNjk1MTE1NDZBRTc4OEVERjUzMTY4RTJEMDM1RDMwMEVEQ0Q1RTRCRjNBQTJBNkQ2MDNFQTBBN0JEMTFFMUMxMDg5NjU3MzA2REY4QTY0RTdGMUJDNkIyNjZCODI1QzFBNkM1RjBGQzg1Nzc1RjRDRjdBQ0Q2MzM2N0U0MkVBRkU0NjUxMUQ1OEFENkRGRTBGIjoxNjoiODQ0REJERDIwOTI1RDkxNjRGOUExRTJGNzA3MDc2QzI2MUNDQTgzMzdEMDI0MTM5MkIzOEFFM0MxMjM0MkYzQUMxNEY4RkQ2REY0QTFDMzY4Mzk2NjJCRDBEMjI3MzQ0Q0Q1NUEzMkFFNURCRDIzMDlBOUEyQjhBMkM4MkJFNkRERERDRTgxRDFCNjk0Nzc1RDkwNDdBQTc2NUNBMEM2RTFCQjhFNjFDOEI3QkUyN0VENzExRThFRTJGRUFEODdGMzQ5MUY3NkE2RDIyNjJDMTQxODlFQUNERkQ0Q0VGRTBCRjlEMEE1QjQ5ODU3RTBFRDIyQ0JFQjk4REM4RDQ1QiI6MTY6IjQ5NTFBN0IxNzRERjk3MkMzN0JBRENDMzg0NTdCNUVERDFGMDc4QkM2MTNFNzVDRTI1RTA4ODE0RTEyNDYxQzdBMUMxODlBNzBFQjgxMzgyOTQyOThEMTQxMjQ0QzdBOURFMzFBQjRGNkQzOEI0MEIwNEQ2MzUzQ0QzMEY3N0FEQkY2NkJCREU0MUM3QkU0NjNDNUUzMEFBQTNGN0JBRDZDRUU5OTUwNkRFQUFGQTJGMzM1QzFCMUM1Qzg4QjhBQkIwRDAzODdFRTBEMUI0RTcwMjdGN0YwODVBMDI1Q0VEQjVDQ0UxOEI4OEMwNDYyRjFDM0M5MTBENDdDMEQ0QUIiOjAKKworUlNBIENoZWNrIFByaXZhdGUga2V5ICMyIChObyBQKQorbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleToyMDQ4OjE2OiIiOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiNzdCMUQ5OTMwMEQ2QTU0RTg2NDk2MkRBMDlBRTEwQ0YxOUE3RkI4ODg0NTZCQzI2NzJCNzJBRUE1MkIyMDQ5MTQ0OTNEMTZDMTg0QUQyMDFFQzNGNzYyRTFGQkQ4NzAyQkE3OTZFRjk1M0Q5RUEyRjI2MzAwRDI4NTI2NEYxMUIwQzgzMDFEMDIwN0ZFQjFFMkM5ODQ0NDVDODk5QjBBQ0VCQUE3NEVGMDE0REQxRDRCRERCNDMyMDJDMDhEMkZGOTY5MkQ4RDc4ODQ3OERFQzgyOUVCNTJBRkI1QUUwNjhGQkRCQUM0OTlBMjdGQUNFQ0MzOTFFNzVDOTM2RDU1RjA3QkI0NUVFMTg0REFCNDU4MDhFMTU3MjI1MDJGMjc5Rjg5QjM4QzFDQjI5MjU1N0U1MDYzNTk3RjUyQzc1RDYxMDAxRURDMzNGNDczOTM1M0UzM0U1NkFEMjczQjA2N0MxQTI3NjAyMDg1MjlFQTQyMTc3NEE1RkZGQ0IzNDIzQjFFMDA1MUU3NzAyQTU1RDgwQ0JGMjE0MTU2OUYxOEY4N0JGRjUzOEExREE4RURCQjI2OTNBNTM5RjY4RTBENjJENzc3NDNGODlFQUNGM0IxNzIzQkRCMjVDRTJGMzMzRkE2M0NBQ0YwRTY3REYxQTQzMTg5M0JCOUIzNTJGQ0IiOjE2OiI5QTY2Q0Y3NjU3MkE3MUExNzQ3NTc5NEZBMUM4QzcwRDk4N0U1ODFFOTkwRDc3MkJCMjdDNzdDNTNGRjFFQ0JCMzEyNjBFOUVEQUZBRUJDNzk5OTE4MDdFNDg5MThFQUI4QzNBNUYwM0E2MDBGMzBDNjk1MTE1NDZBRTc4OEVERjUzMTY4RTJEMDM1RDMwMEVEQ0Q1RTRCRjNBQTJBNkQ2MDNFQTBBN0JEMTFFMUMxMDg5NjU3MzA2REY4QTY0RTdGMUJDNkIyNjZCODI1QzFBNkM1RjBGQzg1Nzc1RjRDRjdBQ0Q2MzM2N0U0MkVBRkU0NjUxMUQ1OEFENkRGRTBGIjoxNjoiODQ0REJERDIwOTI1RDkxNjRGOUExRTJGNzA3MDc2QzI2MUNDQTgzMzdEMDI0MTM5MkIzOEFFM0MxMjM0MkYzQUMxNEY4RkQ2REY0QTFDMzY4Mzk2NjJCRDBEMjI3MzQ0Q0Q1NUEzMkFFNURCRDIzMDlBOUEyQjhBMkM4MkJFNkRERERDRTgxRDFCNjk0Nzc1RDkwNDdBQTc2NUNBMEM2RTFCQjhFNjFDOEI3QkUyN0VENzExRThFRTJGRUFEODdGMzQ5MUY3NkE2RDIyNjJDMTQxODlFQUNERkQ0Q0VGRTBCRjlEMEE1QjQ5ODU3RTBFRDIyQ0JFQjk4REM4RDQ1QiI6MTY6IjQ5NTFBN0IxNzRERjk3MkMzN0JBRENDMzg0NTdCNUVERDFGMDc4QkM2MTNFNzVDRTI1RTA4ODE0RTEyNDYxQzdBMUMxODlBNzBFQjgxMzgyOTQyOThEMTQxMjQ0QzdBOURFMzFBQjRGNkQzOEI0MEIwNEQ2MzUzQ0QzMEY3N0FEQkY2NkJCREU0MUM3QkU0NjNDNUUzMEFBQTNGN0JBRDZDRUU5OTUwNkRFQUFGQTJGMzM1QzFCMUM1Qzg4QjhBQkIwRDAzODdFRTBEMUI0RTcwMjdGN0YwODVBMDI1Q0VEQjVDQ0UxOEI4OEMwNDYyRjFDM0M5MTBENDdDMEQ0QUIiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBDaGVjayBQcml2YXRlIGtleSAjMyAoTm8gUSkKK21iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXk6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6IiI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6MTY6Ijc3QjFEOTkzMDBENkE1NEU4NjQ5NjJEQTA5QUUxMENGMTlBN0ZCODg4NDU2QkMyNjcyQjcyQUVBNTJCMjA0OTE0NDkzRDE2QzE4NEFEMjAxRUMzRjc2MkUxRkJEODcwMkJBNzk2RUY5NTNEOUVBMkYyNjMwMEQyODUyNjRGMTFCMEM4MzAxRDAyMDdGRUIxRTJDOTg0NDQ1Qzg5OUIwQUNFQkFBNzRFRjAxNEREMUQ0QkREQjQzMjAyQzA4RDJGRjk2OTJEOEQ3ODg0NzhERUM4MjlFQjUyQUZCNUFFMDY4RkJEQkFDNDk5QTI3RkFDRUNDMzkxRTc1QzkzNkQ1NUYwN0JCNDVFRTE4NERBQjQ1ODA4RTE1NzIyNTAyRjI3OUY4OUIzOEMxQ0IyOTI1NTdFNTA2MzU5N0Y1MkM3NUQ2MTAwMUVEQzMzRjQ3MzkzNTNFMzNFNTZBRDI3M0IwNjdDMUEyNzYwMjA4NTI5RUE0MjE3NzRBNUZGRkNCMzQyM0IxRTAwNTFFNzcwMkE1NUQ4MENCRjIxNDE1NjlGMThGODdCRkY1MzhBMURBOEVEQkIyNjkzQTUzOUY2OEUwRDYyRDc3NzQzRjg5RUFDRjNCMTcyM0JEQjI1Q0UyRjMzM0ZBNjNDQUNGMEU2N0RGMUE0MzE4OTNCQjlCMzUyRkNCIjoxNjoiOUE2NkNGNzY1NzJBNzFBMTc0NzU3OTRGQTFDOEM3MEQ5ODdFNTgxRTk5MEQ3NzJCQjI3Qzc3QzUzRkYxRUNCQjMxMjYwRTlFREFGQUVCQzc5OTkxODA3RTQ4OTE4RUFCOEMzQTVGMDNBNjAwRjMwQzY5NTExNTQ2QUU3ODhFREY1MzE2OEUyRDAzNUQzMDBFRENENUU0QkYzQUEyQTZENjAzRUEwQTdCRDExRTFDMTA4OTY1NzMwNkRGOEE2NEU3RjFCQzZCMjY2QjgyNUMxQTZDNUYwRkM4NTc3NUY0Q0Y3QUNENjMzNjdFNDJFQUZFNDY1MTFENThBRDZERkUwRiI6MTY6Ijg0NERCREQyMDkyNUQ5MTY0RjlBMUUyRjcwNzA3NkMyNjFDQ0E4MzM3RDAyNDEzOTJCMzhBRTNDMTIzNDJGM0FDMTRGOEZENkRGNEExQzM2ODM5NjYyQkQwRDIyNzM0NENENTVBMzJBRTVEQkQyMzA5QTlBMkI4QTJDODJCRTZEREREQ0U4MUQxQjY5NDc3NUQ5MDQ3QUE3NjVDQTBDNkUxQkI4RTYxQzhCN0JFMjdFRDcxMUU4RUUyRkVBRDg3RjM0OTFGNzZBNkQyMjYyQzE0MTg5RUFDREZENENFRkUwQkY5RDBBNUI0OTg1N0UwRUQyMkNCRUI5OERDOEQ0NUIiOjE2OiI0OTUxQTdCMTc0REY5NzJDMzdCQURDQzM4NDU3QjVFREQxRjA3OEJDNjEzRTc1Q0UyNUUwODgxNEUxMjQ2MUM3QTFDMTg5QTcwRUI4MTM4Mjk0Mjk4RDE0MTI0NEM3QTlERTMxQUI0RjZEMzhCNDBCMDRENjM1M0NEMzBGNzdBREJGNjZCQkRFNDFDN0JFNDYzQzVFMzBBQUEzRjdCQUQ2Q0VFOTk1MDZERUFBRkEyRjMzNUMxQjFDNUM4OEI4QUJCMEQwMzg3RUUwRDFCNEU3MDI3RjdGMDg1QTAyNUNFREI1Q0NFMThCODhDMDQ2MkYxQzNDOTEwRDQ3QzBENEFCIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHJpdmF0ZSBrZXkgIzQgKE5vIE4pCittYmVkdGxzX3JzYV9jaGVja19wcml2a2V5OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiIjoxNjoiMyI6MTY6Ijc3QjFEOTkzMDBENkE1NEU4NjQ5NjJEQTA5QUUxMENGMTlBN0ZCODg4NDU2QkMyNjcyQjcyQUVBNTJCMjA0OTE0NDkzRDE2QzE4NEFEMjAxRUMzRjc2MkUxRkJEODcwMkJBNzk2RUY5NTNEOUVBMkYyNjMwMEQyODUyNjRGMTFCMEM4MzAxRDAyMDdGRUIxRTJDOTg0NDQ1Qzg5OUIwQUNFQkFBNzRFRjAxNEREMUQ0QkREQjQzMjAyQzA4RDJGRjk2OTJEOEQ3ODg0NzhERUM4MjlFQjUyQUZCNUFFMDY4RkJEQkFDNDk5QTI3RkFDRUNDMzkxRTc1QzkzNkQ1NUYwN0JCNDVFRTE4NERBQjQ1ODA4RTE1NzIyNTAyRjI3OUY4OUIzOEMxQ0IyOTI1NTdFNTA2MzU5N0Y1MkM3NUQ2MTAwMUVEQzMzRjQ3MzkzNTNFMzNFNTZBRDI3M0IwNjdDMUEyNzYwMjA4NTI5RUE0MjE3NzRBNUZGRkNCMzQyM0IxRTAwNTFFNzcwMkE1NUQ4MENCRjIxNDE1NjlGMThGODdCRkY1MzhBMURBOEVEQkIyNjkzQTUzOUY2OEUwRDYyRDc3NzQzRjg5RUFDRjNCMTcyM0JEQjI1Q0UyRjMzM0ZBNjNDQUNGMEU2N0RGMUE0MzE4OTNCQjlCMzUyRkNCIjoxNjoiOUE2NkNGNzY1NzJBNzFBMTc0NzU3OTRGQTFDOEM3MEQ5ODdFNTgxRTk5MEQ3NzJCQjI3Qzc3QzUzRkYxRUNCQjMxMjYwRTlFREFGQUVCQzc5OTkxODA3RTQ4OTE4RUFCOEMzQTVGMDNBNjAwRjMwQzY5NTExNTQ2QUU3ODhFREY1MzE2OEUyRDAzNUQzMDBFRENENUU0QkYzQUEyQTZENjAzRUEwQTdCRDExRTFDMTA4OTY1NzMwNkRGOEE2NEU3RjFCQzZCMjY2QjgyNUMxQTZDNUYwRkM4NTc3NUY0Q0Y3QUNENjMzNjdFNDJFQUZFNDY1MTFENThBRDZERkUwRiI6MTY6Ijg0NERCREQyMDkyNUQ5MTY0RjlBMUUyRjcwNzA3NkMyNjFDQ0E4MzM3RDAyNDEzOTJCMzhBRTNDMTIzNDJGM0FDMTRGOEZENkRGNEExQzM2ODM5NjYyQkQwRDIyNzM0NENENTVBMzJBRTVEQkQyMzA5QTlBMkI4QTJDODJCRTZEREREQ0U4MUQxQjY5NDc3NUQ5MDQ3QUE3NjVDQTBDNkUxQkI4RTYxQzhCN0JFMjdFRDcxMUU4RUUyRkVBRDg3RjM0OTFGNzZBNkQyMjYyQzE0MTg5RUFDREZENENFRkUwQkY5RDBBNUI0OTg1N0UwRUQyMkNCRUI5OERDOEQ0NUIiOjE2OiI0OTUxQTdCMTc0REY5NzJDMzdCQURDQzM4NDU3QjVFREQxRjA3OEJDNjEzRTc1Q0UyNUUwODgxNEUxMjQ2MUM3QTFDMTg5QTcwRUI4MTM4Mjk0Mjk4RDE0MTI0NEM3QTlERTMxQUI0RjZEMzhCNDBCMDRENjM1M0NEMzBGNzdBREJGNjZCQkRFNDFDN0JFNDYzQzVFMzBBQUEzRjdCQUQ2Q0VFOTk1MDZERUFBRkEyRjMzNUMxQjFDNUM4OEI4QUJCMEQwMzg3RUUwRDFCNEU3MDI3RjdGMDg1QTAyNUNFREI1Q0NFMThCODhDMDQ2MkYxQzNDOTEwRDQ3QzBENEFCIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHJpdmF0ZSBrZXkgIzUgKE5vIEUpCittYmVkdGxzX3JzYV9jaGVja19wcml2a2V5OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIiOjE2OiI3N0IxRDk5MzAwRDZBNTRFODY0OTYyREEwOUFFMTBDRjE5QTdGQjg4ODQ1NkJDMjY3MkI3MkFFQTUyQjIwNDkxNDQ5M0QxNkMxODRBRDIwMUVDM0Y3NjJFMUZCRDg3MDJCQTc5NkVGOTUzRDlFQTJGMjYzMDBEMjg1MjY0RjExQjBDODMwMUQwMjA3RkVCMUUyQzk4NDQ0NUM4OTlCMEFDRUJBQTc0RUYwMTRERDFENEJEREI0MzIwMkMwOEQyRkY5NjkyRDhENzg4NDc4REVDODI5RUI1MkFGQjVBRTA2OEZCREJBQzQ5OUEyN0ZBQ0VDQzM5MUU3NUM5MzZENTVGMDdCQjQ1RUUxODREQUI0NTgwOEUxNTcyMjUwMkYyNzlGODlCMzhDMUNCMjkyNTU3RTUwNjM1OTdGNTJDNzVENjEwMDFFREMzM0Y0NzM5MzUzRTMzRTU2QUQyNzNCMDY3QzFBMjc2MDIwODUyOUVBNDIxNzc0QTVGRkZDQjM0MjNCMUUwMDUxRTc3MDJBNTVEODBDQkYyMTQxNTY5RjE4Rjg3QkZGNTM4QTFEQThFREJCMjY5M0E1MzlGNjhFMEQ2MkQ3Nzc0M0Y4OUVBQ0YzQjE3MjNCREIyNUNFMkYzMzNGQTYzQ0FDRjBFNjdERjFBNDMxODkzQkI5QjM1MkZDQiI6MTY6IjlBNjZDRjc2NTcyQTcxQTE3NDc1Nzk0RkExQzhDNzBEOTg3RTU4MUU5OTBENzcyQkIyN0M3N0M1M0ZGMUVDQkIzMTI2MEU5RURBRkFFQkM3OTk5MTgwN0U0ODkxOEVBQjhDM0E1RjAzQTYwMEYzMEM2OTUxMTU0NkFFNzg4RURGNTMxNjhFMkQwMzVEMzAwRURDRDVFNEJGM0FBMkE2RDYwM0VBMEE3QkQxMUUxQzEwODk2NTczMDZERjhBNjRFN0YxQkM2QjI2NkI4MjVDMUE2QzVGMEZDODU3NzVGNENGN0FDRDYzMzY3RTQyRUFGRTQ2NTExRDU4QUQ2REZFMEYiOjE2OiI4NDREQkREMjA5MjVEOTE2NEY5QTFFMkY3MDcwNzZDMjYxQ0NBODMzN0QwMjQxMzkyQjM4QUUzQzEyMzQyRjNBQzE0RjhGRDZERjRBMUMzNjgzOTY2MkJEMEQyMjczNDRDRDU1QTMyQUU1REJEMjMwOUE5QTJCOEEyQzgyQkU2RERERENFODFEMUI2OTQ3NzVEOTA0N0FBNzY1Q0EwQzZFMUJCOEU2MUM4QjdCRTI3RUQ3MTFFOEVFMkZFQUQ4N0YzNDkxRjc2QTZEMjI2MkMxNDE4OUVBQ0RGRDRDRUZFMEJGOUQwQTVCNDk4NTdFMEVEMjJDQkVCOThEQzhENDVCIjoxNjoiNDk1MUE3QjE3NERGOTcyQzM3QkFEQ0MzODQ1N0I1RUREMUYwNzhCQzYxM0U3NUNFMjVFMDg4MTRFMTI0NjFDN0ExQzE4OUE3MEVCODEzODI5NDI5OEQxNDEyNDRDN0E5REUzMUFCNEY2RDM4QjQwQjA0RDYzNTNDRDMwRjc3QURCRjY2QkJERTQxQzdCRTQ2M0M1RTMwQUFBM0Y3QkFENkNFRTk5NTA2REVBQUZBMkYzMzVDMUIxQzVDODhCOEFCQjBEMDM4N0VFMEQxQjRFNzAyN0Y3RjA4NUEwMjVDRURCNUNDRTE4Qjg4QzA0NjJGMUMzQzkxMEQ0N0MwRDRBQiI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIENoZWNrIFByaXZhdGUga2V5ICM2IChObyBEKQorbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleToyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6MTY6IiI6MTY6IjlBNjZDRjc2NTcyQTcxQTE3NDc1Nzk0RkExQzhDNzBEOTg3RTU4MUU5OTBENzcyQkIyN0M3N0M1M0ZGMUVDQkIzMTI2MEU5RURBRkFFQkM3OTk5MTgwN0U0ODkxOEVBQjhDM0E1RjAzQTYwMEYzMEM2OTUxMTU0NkFFNzg4RURGNTMxNjhFMkQwMzVEMzAwRURDRDVFNEJGM0FBMkE2RDYwM0VBMEE3QkQxMUUxQzEwODk2NTczMDZERjhBNjRFN0YxQkM2QjI2NkI4MjVDMUE2QzVGMEZDODU3NzVGNENGN0FDRDYzMzY3RTQyRUFGRTQ2NTExRDU4QUQ2REZFMEYiOjE2OiI4NDREQkREMjA5MjVEOTE2NEY5QTFFMkY3MDcwNzZDMjYxQ0NBODMzN0QwMjQxMzkyQjM4QUUzQzEyMzQyRjNBQzE0RjhGRDZERjRBMUMzNjgzOTY2MkJEMEQyMjczNDRDRDU1QTMyQUU1REJEMjMwOUE5QTJCOEEyQzgyQkU2RERERENFODFEMUI2OTQ3NzVEOTA0N0FBNzY1Q0EwQzZFMUJCOEU2MUM4QjdCRTI3RUQ3MTFFOEVFMkZFQUQ4N0YzNDkxRjc2QTZEMjI2MkMxNDE4OUVBQ0RGRDRDRUZFMEJGOUQwQTVCNDk4NTdFMEVEMjJDQkVCOThEQzhENDVCIjoxNjoiNDk1MUE3QjE3NERGOTcyQzM3QkFEQ0MzODQ1N0I1RUREMUYwNzhCQzYxM0U3NUNFMjVFMDg4MTRFMTI0NjFDN0ExQzE4OUE3MEVCODEzODI5NDI5OEQxNDEyNDRDN0E5REUzMUFCNEY2RDM4QjQwQjA0RDYzNTNDRDMwRjc3QURCRjY2QkJERTQxQzdCRTQ2M0M1RTMwQUFBM0Y3QkFENkNFRTk5NTA2REVBQUZBMkYzMzVDMUIxQzVDODhCOEFCQjBEMDM4N0VFMEQxQjRFNzAyN0Y3RjA4NUEwMjVDRURCNUNDRTE4Qjg4QzA0NjJGMUMzQzkxMEQ0N0MwRDRBQiI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIENoZWNrIFByaXZhdGUga2V5ICM3IChObyBEUCkKK21iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXk6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjE2OiI3N0IxRDk5MzAwRDZBNTRFODY0OTYyREEwOUFFMTBDRjE5QTdGQjg4ODQ1NkJDMjY3MkI3MkFFQTUyQjIwNDkxNDQ5M0QxNkMxODRBRDIwMUVDM0Y3NjJFMUZCRDg3MDJCQTc5NkVGOTUzRDlFQTJGMjYzMDBEMjg1MjY0RjExQjBDODMwMUQwMjA3RkVCMUUyQzk4NDQ0NUM4OTlCMEFDRUJBQTc0RUYwMTRERDFENEJEREI0MzIwMkMwOEQyRkY5NjkyRDhENzg4NDc4REVDODI5RUI1MkFGQjVBRTA2OEZCREJBQzQ5OUEyN0ZBQ0VDQzM5MUU3NUM5MzZENTVGMDdCQjQ1RUUxODREQUI0NTgwOEUxNTcyMjUwMkYyNzlGODlCMzhDMUNCMjkyNTU3RTUwNjM1OTdGNTJDNzVENjEwMDFFREMzM0Y0NzM5MzUzRTMzRTU2QUQyNzNCMDY3QzFBMjc2MDIwODUyOUVBNDIxNzc0QTVGRkZDQjM0MjNCMUUwMDUxRTc3MDJBNTVEODBDQkYyMTQxNTY5RjE4Rjg3QkZGNTM4QTFEQThFREJCMjY5M0E1MzlGNjhFMEQ2MkQ3Nzc0M0Y4OUVBQ0YzQjE3MjNCREIyNUNFMkYzMzNGQTYzQ0FDRjBFNjdERjFBNDMxODkzQkI5QjM1MkZDQiI6MTY6IiI6MTY6Ijg0NERCREQyMDkyNUQ5MTY0RjlBMUUyRjcwNzA3NkMyNjFDQ0E4MzM3RDAyNDEzOTJCMzhBRTNDMTIzNDJGM0FDMTRGOEZENkRGNEExQzM2ODM5NjYyQkQwRDIyNzM0NENENTVBMzJBRTVEQkQyMzA5QTlBMkI4QTJDODJCRTZEREREQ0U4MUQxQjY5NDc3NUQ5MDQ3QUE3NjVDQTBDNkUxQkI4RTYxQzhCN0JFMjdFRDcxMUU4RUUyRkVBRDg3RjM0OTFGNzZBNkQyMjYyQzE0MTg5RUFDREZENENFRkUwQkY5RDBBNUI0OTg1N0UwRUQyMkNCRUI5OERDOEQ0NUIiOjE2OiI0OTUxQTdCMTc0REY5NzJDMzdCQURDQzM4NDU3QjVFREQxRjA3OEJDNjEzRTc1Q0UyNUUwODgxNEUxMjQ2MUM3QTFDMTg5QTcwRUI4MTM4Mjk0Mjk4RDE0MTI0NEM3QTlERTMxQUI0RjZEMzhCNDBCMDRENjM1M0NEMzBGNzdBREJGNjZCQkRFNDFDN0JFNDYzQzVFMzBBQUEzRjdCQUQ2Q0VFOTk1MDZERUFBRkEyRjMzNUMxQjFDNUM4OEI4QUJCMEQwMzg3RUUwRDFCNEU3MDI3RjdGMDg1QTAyNUNFREI1Q0NFMThCODhDMDQ2MkYxQzNDOTEwRDQ3QzBENEFCIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHJpdmF0ZSBrZXkgIzggKE5vIERRKQorbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleToyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6MTY6Ijc3QjFEOTkzMDBENkE1NEU4NjQ5NjJEQTA5QUUxMENGMTlBN0ZCODg4NDU2QkMyNjcyQjcyQUVBNTJCMjA0OTE0NDkzRDE2QzE4NEFEMjAxRUMzRjc2MkUxRkJEODcwMkJBNzk2RUY5NTNEOUVBMkYyNjMwMEQyODUyNjRGMTFCMEM4MzAxRDAyMDdGRUIxRTJDOTg0NDQ1Qzg5OUIwQUNFQkFBNzRFRjAxNEREMUQ0QkREQjQzMjAyQzA4RDJGRjk2OTJEOEQ3ODg0NzhERUM4MjlFQjUyQUZCNUFFMDY4RkJEQkFDNDk5QTI3RkFDRUNDMzkxRTc1QzkzNkQ1NUYwN0JCNDVFRTE4NERBQjQ1ODA4RTE1NzIyNTAyRjI3OUY4OUIzOEMxQ0IyOTI1NTdFNTA2MzU5N0Y1MkM3NUQ2MTAwMUVEQzMzRjQ3MzkzNTNFMzNFNTZBRDI3M0IwNjdDMUEyNzYwMjA4NTI5RUE0MjE3NzRBNUZGRkNCMzQyM0IxRTAwNTFFNzcwMkE1NUQ4MENCRjIxNDE1NjlGMThGODdCRkY1MzhBMURBOEVEQkIyNjkzQTUzOUY2OEUwRDYyRDc3NzQzRjg5RUFDRjNCMTcyM0JEQjI1Q0UyRjMzM0ZBNjNDQUNGMEU2N0RGMUE0MzE4OTNCQjlCMzUyRkNCIjoxNjoiOUE2NkNGNzY1NzJBNzFBMTc0NzU3OTRGQTFDOEM3MEQ5ODdFNTgxRTk5MEQ3NzJCQjI3Qzc3QzUzRkYxRUNCQjMxMjYwRTlFREFGQUVCQzc5OTkxODA3RTQ4OTE4RUFCOEMzQTVGMDNBNjAwRjMwQzY5NTExNTQ2QUU3ODhFREY1MzE2OEUyRDAzNUQzMDBFRENENUU0QkYzQUEyQTZENjAzRUEwQTdCRDExRTFDMTA4OTY1NzMwNkRGOEE2NEU3RjFCQzZCMjY2QjgyNUMxQTZDNUYwRkM4NTc3NUY0Q0Y3QUNENjMzNjdFNDJFQUZFNDY1MTFENThBRDZERkUwRiI6MTY6IiI6MTY6IjQ5NTFBN0IxNzRERjk3MkMzN0JBRENDMzg0NTdCNUVERDFGMDc4QkM2MTNFNzVDRTI1RTA4ODE0RTEyNDYxQzdBMUMxODlBNzBFQjgxMzgyOTQyOThEMTQxMjQ0QzdBOURFMzFBQjRGNkQzOEI0MEIwNEQ2MzUzQ0QzMEY3N0FEQkY2NkJCREU0MUM3QkU0NjNDNUUzMEFBQTNGN0JBRDZDRUU5OTUwNkRFQUFGQTJGMzM1QzFCMUM1Qzg4QjhBQkIwRDAzODdFRTBEMUI0RTcwMjdGN0YwODVBMDI1Q0VEQjVDQ0UxOEI4OEMwNDYyRjFDM0M5MTBENDdDMEQ0QUIiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBDaGVjayBQcml2YXRlIGtleSAjOSAoTm8gUVApCittYmVkdGxzX3JzYV9jaGVja19wcml2a2V5OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiNzdCMUQ5OTMwMEQ2QTU0RTg2NDk2MkRBMDlBRTEwQ0YxOUE3RkI4ODg0NTZCQzI2NzJCNzJBRUE1MkIyMDQ5MTQ0OTNEMTZDMTg0QUQyMDFFQzNGNzYyRTFGQkQ4NzAyQkE3OTZFRjk1M0Q5RUEyRjI2MzAwRDI4NTI2NEYxMUIwQzgzMDFEMDIwN0ZFQjFFMkM5ODQ0NDVDODk5QjBBQ0VCQUE3NEVGMDE0REQxRDRCRERCNDMyMDJDMDhEMkZGOTY5MkQ4RDc4ODQ3OERFQzgyOUVCNTJBRkI1QUUwNjhGQkRCQUM0OTlBMjdGQUNFQ0MzOTFFNzVDOTM2RDU1RjA3QkI0NUVFMTg0REFCNDU4MDhFMTU3MjI1MDJGMjc5Rjg5QjM4QzFDQjI5MjU1N0U1MDYzNTk3RjUyQzc1RDYxMDAxRURDMzNGNDczOTM1M0UzM0U1NkFEMjczQjA2N0MxQTI3NjAyMDg1MjlFQTQyMTc3NEE1RkZGQ0IzNDIzQjFFMDA1MUU3NzAyQTU1RDgwQ0JGMjE0MTU2OUYxOEY4N0JGRjUzOEExREE4RURCQjI2OTNBNTM5RjY4RTBENjJENzc3NDNGODlFQUNGM0IxNzIzQkRCMjVDRTJGMzMzRkE2M0NBQ0YwRTY3REYxQTQzMTg5M0JCOUIzNTJGQ0IiOjE2OiI5QTY2Q0Y3NjU3MkE3MUExNzQ3NTc5NEZBMUM4QzcwRDk4N0U1ODFFOTkwRDc3MkJCMjdDNzdDNTNGRjFFQ0JCMzEyNjBFOUVEQUZBRUJDNzk5OTE4MDdFNDg5MThFQUI4QzNBNUYwM0E2MDBGMzBDNjk1MTE1NDZBRTc4OEVERjUzMTY4RTJEMDM1RDMwMEVEQ0Q1RTRCRjNBQTJBNkQ2MDNFQTBBN0JEMTFFMUMxMDg5NjU3MzA2REY4QTY0RTdGMUJDNkIyNjZCODI1QzFBNkM1RjBGQzg1Nzc1RjRDRjdBQ0Q2MzM2N0U0MkVBRkU0NjUxMUQ1OEFENkRGRTBGIjoxNjoiODQ0REJERDIwOTI1RDkxNjRGOUExRTJGNzA3MDc2QzI2MUNDQTgzMzdEMDI0MTM5MkIzOEFFM0MxMjM0MkYzQUMxNEY4RkQ2REY0QTFDMzY4Mzk2NjJCRDBEMjI3MzQ0Q0Q1NUEzMkFFNURCRDIzMDlBOUEyQjhBMkM4MkJFNkRERERDRTgxRDFCNjk0Nzc1RDkwNDdBQTc2NUNBMEM2RTFCQjhFNjFDOEI3QkUyN0VENzExRThFRTJGRUFEODdGMzQ5MUY3NkE2RDIyNjJDMTQxODlFQUNERkQ0Q0VGRTBCRjlEMEE1QjQ5ODU3RTBFRDIyQ0JFQjk4REM4RDQ1QiI6MTY6IiI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIENoZWNrIFByaXZhdGUga2V5ICMxMCAoSW5jb3JyZWN0KQorbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleToyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6MTY6Ijc3QjFEOTkzMDBENkE1NEU4NjQ5NjJEQTA5QUUxMENGMTlBN0ZCODg4NDU2QkMyNjcyQjcyQUVBNTJCMjA0OTE0NDkzRDE2QzE4NEFEMjAxRUMzRjc2MkUxRkJEODcwMkJBNzk2RUY5NTNEOUVBMkYyNjMwMEQyODUyNjRGMTFCMEM4MzAxRDAyMDdGRUIxRTJDOTg0NDQ1Qzg5OUIwQUNFQkFBNzRFRjAxNEREMUQ0QkREQjQzMjAyQzA4RDJGRjk2OTJEOEQ3ODg0NzhERUM4MjlFQjUyQUZCNUFFMDY4RkJEQkFDNDk5QTI3RkFDRUNDMzkxRTc1QzkzNkQ1NUYwN0JCNDVFRTE4NERBQjQ1ODA4RTE1NzIyNTAyRjI3OUY4OUIzOEMxQ0IyOTI1NTdFNTA2MzU5N0Y1MkM3NUQ2MTAwMUVEQzMzRjQ3MzkzNTNFMzNFNTZBRDI3M0IwNjdDMUEyNzYwMjA4NTI5RUE0MjE3NzRBNUZGRkNCMzQyM0IxRTAwNTFFNzcwMkE1NUQ4MENCRjIxNDE1NjlGMThGODdCRkY1MzhBMURBOEVEQkIyNjkzQTUzOUY2OEUwRDYyRDc3NzQzRjg5RUFDRjNCMTcyM0JEQjI1Q0UyRjMzM0ZBNjNDQUNGMEU2N0RGMUE0MzE4OTNCQjlCMzUyRkNDIjoxNjoiOUE2NkNGNzY1NzJBNzFBMTc0NzU3OTRGQTFDOEM3MEQ5ODdFNTgxRTk5MEQ3NzJCQjI3Qzc3QzUzRkYxRUNCQjMxMjYwRTlFREFGQUVCQzc5OTkxODA3RTQ4OTE4RUFCOEMzQTVGMDNBNjAwRjMwQzY5NTExNTQ2QUU3ODhFREY1MzE2OEUyRDAzNUQzMDBFRENENUU0QkYzQUEyQTZENjAzRUEwQTdCRDExRTFDMTA4OTY1NzMwNkRGOEE2NEU3RjFCQzZCMjY2QjgyNUMxQTZDNUYwRkM4NTc3NUY0Q0Y3QUNENjMzNjdFNDJFQUZFNDY1MTFENThBRDZERkUwRiI6MTY6Ijg0NERCREQyMDkyNUQ5MTY0RjlBMUUyRjcwNzA3NkMyNjFDQ0E4MzM3RDAyNDEzOTJCMzhBRTNDMTIzNDJGM0FDMTRGOEZENkRGNEExQzM2ODM5NjYyQkQwRDIyNzM0NENENTVBMzJBRTVEQkQyMzA5QTlBMkI4QTJDODJCRTZEREREQ0U4MUQxQjY5NDc3NUQ5MDQ3QUE3NjVDQTBDNkUxQkI4RTYxQzhCN0JFMjdFRDcxMUU4RUUyRkVBRDg3RjM0OTFGNzZBNkQyMjYyQzE0MTg5RUFDREZENENFRkUwQkY5RDBBNUI0OTg1N0UwRUQyMkNCRUI5OERDOEQ0NUIiOjE2OiI0OTUxQTdCMTc0REY5NzJDMzdCQURDQzM4NDU3QjVFREQxRjA3OEJDNjEzRTc1Q0UyNUUwODgxNEUxMjQ2MUM3QTFDMTg5QTcwRUI4MTM4Mjk0Mjk4RDE0MTI0NEM3QTlERTMxQUI0RjZEMzhCNDBCMDRENjM1M0NEMzBGNzdBREJGNjZCQkRFNDFDN0JFNDYzQzVFMzBBQUEzRjdCQUQ2Q0VFOTk1MDZERUFBRkEyRjMzNUMxQjFDNUM4OEI4QUJCMEQwMzg3RUUwRDFCNEU3MDI3RjdGMDg1QTAyNUNFREI1Q0NFMThCODhDMDQ2MkYxQzNDOTEwRDQ3QzBENEFCIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHVibGljIGtleSAjMSAoQ29ycmVjdCkKK21iZWR0bHNfcnNhX2NoZWNrX3B1YmtleToxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjowCisKK1JTQSBDaGVjayBQdWJsaWMga2V5ICMyIChFdmVuIE4pCittYmVkdGxzX3JzYV9jaGVja19wdWJrZXk6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzQwIjoxNjoiMyI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIENoZWNrIFB1YmxpYyBrZXkgIzMgKEV2ZW4gRSkKK21iZWR0bHNfcnNhX2NoZWNrX3B1YmtleToxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNDAiOjE2OiI2NTUzNiI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIENoZWNrIFB1YmxpYyBrZXkgIzQgKE4gZXhhY3RseSAxMjggYml0cykKK21iZWR0bHNfcnNhX2NoZWNrX3B1YmtleToxNjoiZmVkY2JhOTg3NjU0MzIxMGRlYWRiZWVmY2FmZTQzMjEiOjE2OiIzIjowCisKK1JTQSBDaGVjayBQdWJsaWMga2V5ICM1IChOIHNtYWxsZXIgdGhhbiAxMjggYml0cykKK21iZWR0bHNfcnNhX2NoZWNrX3B1YmtleToxNjoiN2VkY2JhOTg3NjU0MzIxMGRlYWRiZWVmY2FmZTQzMjEiOjE2OiIzIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHVibGljIGtleSAjNiAoTiBleGFjdGx5IDgxOTIgYml0cykKK21iZWR0bHNfcnNhX2NoZWNrX3B1YmtleToxNjoiODhGNDgwNzVCRjI5RTk1QzFDNkFFODcxNjY3OEI3NEU5NTdCNjlDQzJFNDk3MDhDMTYwQzYzNDNBQUQyRjA3NkQyNTM5N0FDRTc0MjIwMzExRUQxOEFFRUI2ODFGNDYzNjExQjMzNDBDMzk0NUNBQUVBRDNBQ0M2MTZFMDhBMjVBNTU2ODNBMzI5NzlCRDU1RUE1REFCNzYzMEFGMzkzODg2ODk2RjExRERDNUYwN0UxNUVERjk0OTMyNENGMEYwQjJBNUMwRTg1REZBMjMxNjcxOTMxODJEMUE0MzA3OURDODY0NUY2QzJDMDI5NjI5RjQ3NTU3NTgwMkY3RDMyNkRFNUJEODkxQTlDNUY4NEE0MzNENDUxNTQxODFFQzA1Njg1QTRCMzY4QTVCNjQzNDc3NUEwMEFCQzZCMEEwNDY0N0Q0NTk4Q0VFRTU2NkI1NTIyMzBGNjkxQzk4Q0EzMEI0MDJBNzZDNjg2QTk0QjM3M0NDRDJGNjBFRkEzODc4QTg2N0JCNUY1ODVEMDg4RTI3QzUwNzkzNzI2MkQwOThBNDc3QjkyMThCRTdDMDNCMkU0QzEwMkQyNDRDQTcwMTY0NUYxODI3Q0Q5NDdFNUU3OTY0NDYzNzhCODQ4ODYyRTY4OUYwRDE3NzNGNzUyMDU2ODQxQTFGMEVFQ0U3Q0FCNzQ5MjFBNDJEQkYyRUYyNjRBRENGNEFCRTA1QTEyNDJFNUY2MjlBNjU3QTJENjc5NThBMkRBQzlBMjI0NTA3NEEzNzA5OUI0NTA2NDcyM0FCRTIxMjQxMDU4MjUyNjMyQzJCQTZGRTg1QUIxQzc1RkYzMTA4OTFCODRDOUM0MEFCNjQ2RkUxRDkwQkM3MTZGQjNBNEI1NkRBM0VBMjVDQTM5N0MwNEI5OTRGN0M2QUQxREQwQ0I5RTk5NENBNkI4MzVGNzgzMEY0RjRFMEY5NzZCQkVBNUFFODU1NkJDN0M5MEIzRTUwRTIxQzE5QUQxRjZCQzRBOEZGMTVGMjkwOUQ5Q0M1RjNEQTUzM0JBREZGNTBGNDg3ODY5RDYzMUMzRTM0RDY5NjM2QjRDMjVBNTUxMjdFRjVCNzE1RjJGQzA1NjU3MzRCMzhERjk5NkQxOTcwRTU2RjdGNjRFQkVDQjlEMDBBNTg3QUFFQzYwOEYyRDNBQUE1MUU2NkJGNTNFOTJDMzA5NkJGNzhEMURDQkNFMUE2NDVGQTRGMDU0MkU2RjY4RTVBOTRBQUE2RTgzOUY3NTYyMEZBQkVENUQyQkNGNDBBQjhFQUY5NUY4MzhCRkE5NjI0MjlGMjgxNTc4ODgyREYwRjI3MjFDMjdDODkwNUM5RTc3NkIxRDMyNTFGQzA2NkE4QkM2NEMwQ0U3RkJBMkI4RTIxRjY1RUY2NzM5QUI2RjE5RUMyQUIwNzgxN0RGRjAzREFCN0M4NDZBQjVDQzg2QzEwMzY0MkQ3NjY0QTg1REMyRDg0NkE4MDA0Q0Q2QTE0NEM3MkNDQ0FDODZEQjU5MDFBMDQ3MzI0OTI3QjgwRTI4MUY1RjczMTVGQTJGOTA4M0JERTBEQjdBQTQ2REMwNTVFMzZCQjczRkI2REJEM0ExNDc1OUQwNkNCQkU4RDU3Q0JDMjEzQzRENTVERTQ0Nzg2NzlFMEE1OTAyQzg2NTVCRTEzOTFDMEU4OEQyQjFGQkQ1N0U5MjMyQTJDRUJDNjc1NjlFQ0Q5NEU0QkYwRkNDNkMwMDNGOUFBNTFBMkE1RTZFRTA4NEE0NkRBRTY1RTUyNDAwQTcyN0Y5NzEzRDI5RTkyQ0Q2Q0EzN0ZENTk5NTk4QjNGNjc3NjI0QTJBNDg0QThCMzZCOThFRkVBRDY2MkMwQTIzQkMxRDkyODBFRjJBMzFGODg3MDY1RUIyMEE5M0I0MUY3QTI2NEVDRkE2NUIzNTU1RjNFNDAwOTI3MDE4MTg2RUFBMkQ0RjAwQzZCN0FCMUJDRUQ1Rjg5M0Q2NDQ3ODE3NzU5MkM3RjJCOTQ1MzA3QUI0NzREN0VDN0ZGMkU3RTU1ODM0Q0M3NjNCRUY4MURBOUJENzBGQjNENDIzQUU1QURCODZCMzM2NzM0QzhBM0JFQzkwQ0VCMDU0MzhCNUJBMDMwRDBEMzBERUMxNDQyRDJFQjA4NDUwNDgwRkJBRTA5MEZGQTFBNUFERDc0OEE0MTVCRENERTQ1MDk0RTc5MjQyMEYwQUY5NEJDQTBBODBBMjA5NkQxQTQ3OEQzNDI4QTIxNEE3RTY4QzBGMDdGNThDNkZCMjMyRUNDM0Q4QjgyMUFFMjlBRTc2RTEzRUI3NTExOTNGNkVDQTY3MDAxNkQ1NEYzRDc5NjkzN0REQkI4OTAwMDYyRUYxMTZDQ0EzRjVCM0FFQ0E2MTgyNzI4NzUzMzZDOUMwNTBGQkMwRkM3RURENUI4OEQ4NURBMDA2MUQyMUUxNzZFMTQxOUNGNTczNjI5QkU3QjA0OTZFNzYxRUFENDVGRTMyQjU5RUIwMEQ0N0NERDE3OEFDOEY4RUM4RDZGMjZERUQzNEY3NTc2Q0Q5Mzg0MjJFMThFOTM2RjE2QTcwNEI0ODNBNDhFRTNCRUE1OUQ5NUY2ODgxMzYxMTk4OTQ5MzBFQzhFOTI4MkU1OTc0NzQwQ0YwMzFERjhEQkIwN0VCMDhGMkRBMEFDQ0FERUNFMTVBNkE1NzUwMjg5MEY0QTAzNzQwRTYwQkQiOjE2OiIwMTAwMDEiOjAKKworUlNBIENoZWNrIFB1YmxpYyBrZXkgIzcgKE4gbGFyZ2VyIHRoYW4gODE5MiBiaXRzKQorbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5OjE2OiIwMTYzMUNEODNGM0YyRDY3RkE1MkUxM0I0NDQxNkVBNjUwNDNBMzIyRUNENjU0Njc1NThFQUNENEM2QjZEOTJEQTc0NzFEMkRCRDU4RTY5MjFGOTQ2NUM0OTAwRTkyREZDNkVCMzVDOTA2MzcyODVBN0UxRjNEMjdDMUMzMkZENkE1Q0IzMjREODI1M0M2QjJFNDgwQjYzRjY2RTNCMDlGNDMwMEMzRTY4MzAxMUM3ODAzQkRFQUQ2ODJGMEY1NTQ3M0ZDOEExODc3MzQ1NzNBMTFFQ0RDRTgwMjAyMkY1MzlCQzIwNzRFOTQ3MDNDMjNFNDhGRjhBRTM1NzAyMzUyRTcwQUY5MjFCNDJFNkExNDNBM0VGRUUyMERGNzdBOTdBQTcwM0FBMjcxQ0U5NkVCNzgwNjI0NTJEODdBNEFEQ0FDRjgzRkZCOTY4MzgxOEJGMkVEMjM0RDBFQ0ZCMUI5MzU4Mjc3MDgwNTBDNEQwMDcyMTVEN0EwMjgxNTI3OTgwNDVBRjZBMEI3NDFBN0IyMkYzRkNDRUJDMjZEMjg1QjlBQTIyQ0VGODU4ODU4NzAyQkFFN0Q5NDVGQTBDNDVFMkQ4QUFERkYyRkQwQTY0REYwMkMyNDFGODcxQzc5OUFENzM3MzhFNjI2RDlBNkQ0QkZGQkNFMDAwQzQwODdGMENFNzRFRjIxNTI2NDAyRkRDRDA3NjQ5MTc1MTIyNjk3RkQwMTA0MUI4NEFEMEEzRkVEQUJENUMyNUU5NTM2ODZCMjI3MkY4QzhCNzQ4QTQ4NkY1NENCNzY3QTFDNzlDQTQ5OUIyQzlBMzAwQUM4QTIxNEEwQkZBMDYyODBBOTIzNUQ1QjdBRkI4QTc2RkZERDc4RkM3MjAzOEM1QjgwOTU2OUE2MTI1RDZBNTg4Njg0QTE2RDIyMkVGOTNGMjQ2OUVBNzg5NDgwMzc5NTdERTlCNDQ5QUI3MjIwNDRGREZGM0I2QUM4OTM2N0Q3MkYwQ0YzRUQxRjg1RURGRDBERTNFRUVERDM5RjZFRkQ2OEEwMzY4RjgzQjM4OUI3QTdCOUM3NzEzRjQxNDhGNTNFODJDREY2RDlDQzAwMkEzQTE2RjFFNkExRDc4QzQ4Q0U3ODQ5NTg0MTY0NjYxNjY0MTUzQTQ5OUFDQUU1OTI3NzI4QjJGMUEyRTkxMTY0ODY3NkRGMzE2REZDQkY1RTQ0RjM5M0I3QjI5NkE0QTIxRUQ1OTc0NEUzODU1RkNENEEyMUYyQjQyQ0ZFNUM1Mjg2MEIyNDRENDY3MTAzMTA3RTNEQzQwQTgyMDc3MjY5ODk3NTI4Q0NCRjgwQjJGMjE2QTUzNUM1MkE2QTI2NDNFNjRCNTMyNzZBMUI2MzM0ODAzODcwNjMyOEZFMzY5QUUyNDA5NTY4MTYwNDgxQzA3QTNFRDVCMDE5OEVDNkNDMDdGOEYyNTBCMURFMEQ5NzExMEY4MzRBQTNEMUMwODYyRkI3MTkzOTNFQTA4RDUzMDIyNUNFMDY0N0ZENTQ4OEY0ODNGQTA2NTE5NkQxMTYwRkFGQTU0Q0QzRkY2M0I2QUREQkU4NEQwOUYzQ0ZGOThGMjJDQzcxREUyRkMxOTczNTEyNkMzQkJBOUEyQzI5M0QxREIxMThGMDUxMkMxNDRDMUM2MTY0OTJCRTBEMTlCRkQyNDU5NTU4NDBGNjQwRUJFNkZDRkYyODMwQzY4Mzg1MjA0NkYzNkMzQ0RBNEY0NDYwQUJBNEIyRkVFQjcwMEM5REQ4MDQxOEM0MjY3Mzg1OENERDExRTcwNjgyRDVBNDFFRDdEODAxMEVDN0RENUI1N0I0RTIwNkY4NERCOEE0MzBCMjQ2MDAyRkVBNDlBRkY0NTk0MEIxRjE4QUUyODg2M0Y1QUE0MUQzQjQyQUJDRDNEMUJBQjc2NDRCODZFMDYwODY1OTk3RTFCQTIzQTc2OEYyMzNEOEE4NTkzMzJGOEI5RDVEMTYzM0Y5QzQ2MjMyOEMxN0UyQjA3RDZERkQ4MTNDOTRENjc1ODczNTkyRTVDQkIwMDFDMTEyQTc5MEIxMEI5RjlFMDdCRTEwNUM0RkQzMjhDN0UzODg3QzNFRjEzRThFQ0U2MTA2QjczQTMzNDFBRjIwMEQ4NjYzQkRGOTZGRkRCNkY3OTRGQkIwNEQ5NzZCODc0MjNBODY4ODgyRjE1Q0FFOERDOUY2Q0FGNDkxN0VGQzg0NEU3NEJBRDQ4RjIxRTM0NTMwQ0I0RTIwMDA2NDQ0NzA2RkM5NTY1ODczNTU1M0NBOTlFMThGMEU4MjBENzhERUY4RkI4NDAzNEIxMENFNDRCMUFFMzZCNTAxNDc1NTg0MTVFNUU3OEE3N0UyRkM3QzhDNTgwQjU0Q0NDNDBFRTM5MDRDMDQ5NTA4NDZBNkQ1MUJGNUM4MEUwQjZFMkFEQzQ5ODlEQTFEM0REMDFGOTlBQTM2OUMyRTZCNTMzOTRCQTBDQjVFNkU4MTFCRkEwMDRBNUIzQjNDMzRDNjA0MzNBQjVFQjBFQzgwNTAyNDZCOUFGMTBCNDlFQUE1MTQ4N0NDRTBDNEM4RjRDREFGOTI2RDU4MkQ3RTQ5MjRDMzM3NjVFMDBBQzk1MkEzODY2OTE1MEVBMzIyQ0RGODg2QjQ2REU0RDA5NzBBMDYwQjY3MEQ1MEM5QkYzRDIwMjBCNTI5ODM4RTE5MkVGOTJCRkUyRjA2RkRGMUQ1IjoxNjoiMDEwMDAxIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHVibGljIGtleSAjOCAoRSBleGFjdGx5IDIgYml0cykKK21iZWR0bHNfcnNhX2NoZWNrX3B1YmtleToxNjoiZmVkY2JhOTg3NjU0MzIxMGRlYWRiZWVmY2FmZTQzMjEiOjE2OiIzIjowCisKK1JTQSBDaGVjayBQdWJsaWMga2V5ICM4IChFIGV4YWN0bHkgMSBiaXRzKQorbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5OjE2OiJmZWRjYmE5ODc2NTQzMjEwZGVhZGJlZWZjYWZlNDMyMSI6MTY6IjEiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBDaGVjayBQdWJsaWMga2V5ICM4IChFIGV4YWN0bHkgNjQgYml0cykKK21iZWR0bHNfcnNhX2NoZWNrX3B1YmtleToxNjoiZmVkY2JhOTg3NjU0MzIxMGRlYWRiZWVmY2FmZTQzMjEiOjE2OiIwMGZlZGNiYTk4NzY1NDMyMTMiOjAKKworUlNBIENoZWNrIFB1YmxpYyBrZXkgIzggKEUgbGFyZ2VyIHRoYW4gNjQgYml0cykKK21iZWR0bHNfcnNhX2NoZWNrX3B1YmtleToxNjoiZmVkY2JhOTg3NjU0MzIxMGRlYWRiZWVmY2FmZTQzMjEiOjE2OiIwMWZlZGNiYTk4NzY1NDMyMTMiOjAKKworUlNBIENoZWNrIFB1YmxpYyBrZXkgIzkgKEUgaGFzIHNpemUgTi0yKQorbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5OjE2OiIwMGIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIwMGIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGQiOjAKKworUlNBIENoZWNrIFB1YmxpYyBrZXkgIzEwIChFIGhhcyBzaXplIE4pCittYmVkdGxzX3JzYV9jaGVja19wdWJrZXk6MTY6IjAwYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGZiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjAwYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGZiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIENoZWNrIFB1YmxpYy1Qcml2YXRlIGtleSAjMSAoQ29ycmVjdCkKK3JzYV9jaGVja19wdWJwcml2OjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiNzdCMUQ5OTMwMEQ2QTU0RTg2NDk2MkRBMDlBRTEwQ0YxOUE3RkI4ODg0NTZCQzI2NzJCNzJBRUE1MkIyMDQ5MTQ0OTNEMTZDMTg0QUQyMDFFQzNGNzYyRTFGQkQ4NzAyQkE3OTZFRjk1M0Q5RUEyRjI2MzAwRDI4NTI2NEYxMUIwQzgzMDFEMDIwN0ZFQjFFMkM5ODQ0NDVDODk5QjBBQ0VCQUE3NEVGMDE0REQxRDRCRERCNDMyMDJDMDhEMkZGOTY5MkQ4RDc4ODQ3OERFQzgyOUVCNTJBRkI1QUUwNjhGQkRCQUM0OTlBMjdGQUNFQ0MzOTFFNzVDOTM2RDU1RjA3QkI0NUVFMTg0REFCNDU4MDhFMTU3MjI1MDJGMjc5Rjg5QjM4QzFDQjI5MjU1N0U1MDYzNTk3RjUyQzc1RDYxMDAxRURDMzNGNDczOTM1M0UzM0U1NkFEMjczQjA2N0MxQTI3NjAyMDg1MjlFQTQyMTc3NEE1RkZGQ0IzNDIzQjFFMDA1MUU3NzAyQTU1RDgwQ0JGMjE0MTU2OUYxOEY4N0JGRjUzOEExREE4RURCQjI2OTNBNTM5RjY4RTBENjJENzc3NDNGODlFQUNGM0IxNzIzQkRCMjVDRTJGMzMzRkE2M0NBQ0YwRTY3REYxQTQzMTg5M0JCOUIzNTJGQ0IiOjE2OiI5QTY2Q0Y3NjU3MkE3MUExNzQ3NTc5NEZBMUM4QzcwRDk4N0U1ODFFOTkwRDc3MkJCMjdDNzdDNTNGRjFFQ0JCMzEyNjBFOUVEQUZBRUJDNzk5OTE4MDdFNDg5MThFQUI4QzNBNUYwM0E2MDBGMzBDNjk1MTE1NDZBRTc4OEVERjUzMTY4RTJEMDM1RDMwMEVEQ0Q1RTRCRjNBQTJBNkQ2MDNFQTBBN0JEMTFFMUMxMDg5NjU3MzA2REY4QTY0RTdGMUJDNkIyNjZCODI1QzFBNkM1RjBGQzg1Nzc1RjRDRjdBQ0Q2MzM2N0U0MkVBRkU0NjUxMUQ1OEFENkRGRTBGIjoxNjoiODQ0REJERDIwOTI1RDkxNjRGOUExRTJGNzA3MDc2QzI2MUNDQTgzMzdEMDI0MTM5MkIzOEFFM0MxMjM0MkYzQUMxNEY4RkQ2REY0QTFDMzY4Mzk2NjJCRDBEMjI3MzQ0Q0Q1NUEzMkFFNURCRDIzMDlBOUEyQjhBMkM4MkJFNkRERERDRTgxRDFCNjk0Nzc1RDkwNDdBQTc2NUNBMEM2RTFCQjhFNjFDOEI3QkUyN0VENzExRThFRTJGRUFEODdGMzQ5MUY3NkE2RDIyNjJDMTQxODlFQUNERkQ0Q0VGRTBCRjlEMEE1QjQ5ODU3RTBFRDIyQ0JFQjk4REM4RDQ1QiI6MTY6IjQ5NTFBN0IxNzRERjk3MkMzN0JBRENDMzg0NTdCNUVERDFGMDc4QkM2MTNFNzVDRTI1RTA4ODE0RTEyNDYxQzdBMUMxODlBNzBFQjgxMzgyOTQyOThEMTQxMjQ0QzdBOURFMzFBQjRGNkQzOEI0MEIwNEQ2MzUzQ0QzMEY3N0FEQkY2NkJCREU0MUM3QkU0NjNDNUUzMEFBQTNGN0JBRDZDRUU5OTUwNkRFQUFGQTJGMzM1QzFCMUM1Qzg4QjhBQkIwRDAzODdFRTBEMUI0RTcwMjdGN0YwODVBMDI1Q0VEQjVDQ0UxOEI4OEMwNDYyRjFDM0M5MTBENDdDMEQ0QUIiOjAKKworUlNBIENoZWNrIFB1YmxpYy1Qcml2YXRlIGtleSAjMiAoUHVibGljIG5vIE4pCityc2FfY2hlY2tfcHVicHJpdjoyMDQ4OjE2OiIiOjE2OiIzIjoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjE2OiI3N0IxRDk5MzAwRDZBNTRFODY0OTYyREEwOUFFMTBDRjE5QTdGQjg4ODQ1NkJDMjY3MkI3MkFFQTUyQjIwNDkxNDQ5M0QxNkMxODRBRDIwMUVDM0Y3NjJFMUZCRDg3MDJCQTc5NkVGOTUzRDlFQTJGMjYzMDBEMjg1MjY0RjExQjBDODMwMUQwMjA3RkVCMUUyQzk4NDQ0NUM4OTlCMEFDRUJBQTc0RUYwMTRERDFENEJEREI0MzIwMkMwOEQyRkY5NjkyRDhENzg4NDc4REVDODI5RUI1MkFGQjVBRTA2OEZCREJBQzQ5OUEyN0ZBQ0VDQzM5MUU3NUM5MzZENTVGMDdCQjQ1RUUxODREQUI0NTgwOEUxNTcyMjUwMkYyNzlGODlCMzhDMUNCMjkyNTU3RTUwNjM1OTdGNTJDNzVENjEwMDFFREMzM0Y0NzM5MzUzRTMzRTU2QUQyNzNCMDY3QzFBMjc2MDIwODUyOUVBNDIxNzc0QTVGRkZDQjM0MjNCMUUwMDUxRTc3MDJBNTVEODBDQkYyMTQxNTY5RjE4Rjg3QkZGNTM4QTFEQThFREJCMjY5M0E1MzlGNjhFMEQ2MkQ3Nzc0M0Y4OUVBQ0YzQjE3MjNCREIyNUNFMkYzMzNGQTYzQ0FDRjBFNjdERjFBNDMxODkzQkI5QjM1MkZDQiI6MTY6IjlBNjZDRjc2NTcyQTcxQTE3NDc1Nzk0RkExQzhDNzBEOTg3RTU4MUU5OTBENzcyQkIyN0M3N0M1M0ZGMUVDQkIzMTI2MEU5RURBRkFFQkM3OTk5MTgwN0U0ODkxOEVBQjhDM0E1RjAzQTYwMEYzMEM2OTUxMTU0NkFFNzg4RURGNTMxNjhFMkQwMzVEMzAwRURDRDVFNEJGM0FBMkE2RDYwM0VBMEE3QkQxMUUxQzEwODk2NTczMDZERjhBNjRFN0YxQkM2QjI2NkI4MjVDMUE2QzVGMEZDODU3NzVGNENGN0FDRDYzMzY3RTQyRUFGRTQ2NTExRDU4QUQ2REZFMEYiOjE2OiI4NDREQkREMjA5MjVEOTE2NEY5QTFFMkY3MDcwNzZDMjYxQ0NBODMzN0QwMjQxMzkyQjM4QUUzQzEyMzQyRjNBQzE0RjhGRDZERjRBMUMzNjgzOTY2MkJEMEQyMjczNDRDRDU1QTMyQUU1REJEMjMwOUE5QTJCOEEyQzgyQkU2RERERENFODFEMUI2OTQ3NzVEOTA0N0FBNzY1Q0EwQzZFMUJCOEU2MUM4QjdCRTI3RUQ3MTFFOEVFMkZFQUQ4N0YzNDkxRjc2QTZEMjI2MkMxNDE4OUVBQ0RGRDRDRUZFMEJGOUQwQTVCNDk4NTdFMEVEMjJDQkVCOThEQzhENDVCIjoxNjoiNDk1MUE3QjE3NERGOTcyQzM3QkFEQ0MzODQ1N0I1RUREMUYwNzhCQzYxM0U3NUNFMjVFMDg4MTRFMTI0NjFDN0ExQzE4OUE3MEVCODEzODI5NDI5OEQxNDEyNDRDN0E5REUzMUFCNEY2RDM4QjQwQjA0RDYzNTNDRDMwRjc3QURCRjY2QkJERTQxQzdCRTQ2M0M1RTMwQUFBM0Y3QkFENkNFRTk5NTA2REVBQUZBMkYzMzVDMUIxQzVDODhCOEFCQjBEMDM4N0VFMEQxQjRFNzAyN0Y3RjA4NUEwMjVDRURCNUNDRTE4Qjg4QzA0NjJGMUMzQzkxMEQ0N0MwRDRBQiI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIENoZWNrIFB1YmxpYy1Qcml2YXRlIGtleSAjMyAoUHJpdmF0ZSBubyBOKQorcnNhX2NoZWNrX3B1YnByaXY6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiIiOjE2OiIzIjoxNjoiNzdCMUQ5OTMwMEQ2QTU0RTg2NDk2MkRBMDlBRTEwQ0YxOUE3RkI4ODg0NTZCQzI2NzJCNzJBRUE1MkIyMDQ5MTQ0OTNEMTZDMTg0QUQyMDFFQzNGNzYyRTFGQkQ4NzAyQkE3OTZFRjk1M0Q5RUEyRjI2MzAwRDI4NTI2NEYxMUIwQzgzMDFEMDIwN0ZFQjFFMkM5ODQ0NDVDODk5QjBBQ0VCQUE3NEVGMDE0REQxRDRCRERCNDMyMDJDMDhEMkZGOTY5MkQ4RDc4ODQ3OERFQzgyOUVCNTJBRkI1QUUwNjhGQkRCQUM0OTlBMjdGQUNFQ0MzOTFFNzVDOTM2RDU1RjA3QkI0NUVFMTg0REFCNDU4MDhFMTU3MjI1MDJGMjc5Rjg5QjM4QzFDQjI5MjU1N0U1MDYzNTk3RjUyQzc1RDYxMDAxRURDMzNGNDczOTM1M0UzM0U1NkFEMjczQjA2N0MxQTI3NjAyMDg1MjlFQTQyMTc3NEE1RkZGQ0IzNDIzQjFFMDA1MUU3NzAyQTU1RDgwQ0JGMjE0MTU2OUYxOEY4N0JGRjUzOEExREE4RURCQjI2OTNBNTM5RjY4RTBENjJENzc3NDNGODlFQUNGM0IxNzIzQkRCMjVDRTJGMzMzRkE2M0NBQ0YwRTY3REYxQTQzMTg5M0JCOUIzNTJGQ0IiOjE2OiI5QTY2Q0Y3NjU3MkE3MUExNzQ3NTc5NEZBMUM4QzcwRDk4N0U1ODFFOTkwRDc3MkJCMjdDNzdDNTNGRjFFQ0JCMzEyNjBFOUVEQUZBRUJDNzk5OTE4MDdFNDg5MThFQUI4QzNBNUYwM0E2MDBGMzBDNjk1MTE1NDZBRTc4OEVERjUzMTY4RTJEMDM1RDMwMEVEQ0Q1RTRCRjNBQTJBNkQ2MDNFQTBBN0JEMTFFMUMxMDg5NjU3MzA2REY4QTY0RTdGMUJDNkIyNjZCODI1QzFBNkM1RjBGQzg1Nzc1RjRDRjdBQ0Q2MzM2N0U0MkVBRkU0NjUxMUQ1OEFENkRGRTBGIjoxNjoiODQ0REJERDIwOTI1RDkxNjRGOUExRTJGNzA3MDc2QzI2MUNDQTgzMzdEMDI0MTM5MkIzOEFFM0MxMjM0MkYzQUMxNEY4RkQ2REY0QTFDMzY4Mzk2NjJCRDBEMjI3MzQ0Q0Q1NUEzMkFFNURCRDIzMDlBOUEyQjhBMkM4MkJFNkRERERDRTgxRDFCNjk0Nzc1RDkwNDdBQTc2NUNBMEM2RTFCQjhFNjFDOEI3QkUyN0VENzExRThFRTJGRUFEODdGMzQ5MUY3NkE2RDIyNjJDMTQxODlFQUNERkQ0Q0VGRTBCRjlEMEE1QjQ5ODU3RTBFRDIyQ0JFQjk4REM4RDQ1QiI6MTY6IjQ5NTFBN0IxNzRERjk3MkMzN0JBRENDMzg0NTdCNUVERDFGMDc4QkM2MTNFNzVDRTI1RTA4ODE0RTEyNDYxQzdBMUMxODlBNzBFQjgxMzgyOTQyOThEMTQxMjQ0QzdBOURFMzFBQjRGNkQzOEI0MEIwNEQ2MzUzQ0QzMEY3N0FEQkY2NkJCREU0MUM3QkU0NjNDNUUzMEFBQTNGN0JBRDZDRUU5OTUwNkRFQUFGQTJGMzM1QzFCMUM1Qzg4QjhBQkIwRDAzODdFRTBEMUI0RTcwMjdGN0YwODVBMDI1Q0VEQjVDQ0UxOEI4OEMwNDYyRjFDM0M5MTBENDdDMEQ0QUIiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBDaGVjayBQdWJsaWMtUHJpdmF0ZSBrZXkgIzQgKE4gbWlzbWF0Y2gpCityc2FfY2hlY2tfcHVicHJpdjoyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZSI6MTY6IjMiOjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6MTY6Ijc3QjFEOTkzMDBENkE1NEU4NjQ5NjJEQTA5QUUxMENGMTlBN0ZCODg4NDU2QkMyNjcyQjcyQUVBNTJCMjA0OTE0NDkzRDE2QzE4NEFEMjAxRUMzRjc2MkUxRkJEODcwMkJBNzk2RUY5NTNEOUVBMkYyNjMwMEQyODUyNjRGMTFCMEM4MzAxRDAyMDdGRUIxRTJDOTg0NDQ1Qzg5OUIwQUNFQkFBNzRFRjAxNEREMUQ0QkREQjQzMjAyQzA4RDJGRjk2OTJEOEQ3ODg0NzhERUM4MjlFQjUyQUZCNUFFMDY4RkJEQkFDNDk5QTI3RkFDRUNDMzkxRTc1QzkzNkQ1NUYwN0JCNDVFRTE4NERBQjQ1ODA4RTE1NzIyNTAyRjI3OUY4OUIzOEMxQ0IyOTI1NTdFNTA2MzU5N0Y1MkM3NUQ2MTAwMUVEQzMzRjQ3MzkzNTNFMzNFNTZBRDI3M0IwNjdDMUEyNzYwMjA4NTI5RUE0MjE3NzRBNUZGRkNCMzQyM0IxRTAwNTFFNzcwMkE1NUQ4MENCRjIxNDE1NjlGMThGODdCRkY1MzhBMURBOEVEQkIyNjkzQTUzOUY2OEUwRDYyRDc3NzQzRjg5RUFDRjNCMTcyM0JEQjI1Q0UyRjMzM0ZBNjNDQUNGMEU2N0RGMUE0MzE4OTNCQjlCMzUyRkNCIjoxNjoiOUE2NkNGNzY1NzJBNzFBMTc0NzU3OTRGQTFDOEM3MEQ5ODdFNTgxRTk5MEQ3NzJCQjI3Qzc3QzUzRkYxRUNCQjMxMjYwRTlFREFGQUVCQzc5OTkxODA3RTQ4OTE4RUFCOEMzQTVGMDNBNjAwRjMwQzY5NTExNTQ2QUU3ODhFREY1MzE2OEUyRDAzNUQzMDBFRENENUU0QkYzQUEyQTZENjAzRUEwQTdCRDExRTFDMTA4OTY1NzMwNkRGOEE2NEU3RjFCQzZCMjY2QjgyNUMxQTZDNUYwRkM4NTc3NUY0Q0Y3QUNENjMzNjdFNDJFQUZFNDY1MTFENThBRDZERkUwRiI6MTY6Ijg0NERCREQyMDkyNUQ5MTY0RjlBMUUyRjcwNzA3NkMyNjFDQ0E4MzM3RDAyNDEzOTJCMzhBRTNDMTIzNDJGM0FDMTRGOEZENkRGNEExQzM2ODM5NjYyQkQwRDIyNzM0NENENTVBMzJBRTVEQkQyMzA5QTlBMkI4QTJDODJCRTZEREREQ0U4MUQxQjY5NDc3NUQ5MDQ3QUE3NjVDQTBDNkUxQkI4RTYxQzhCN0JFMjdFRDcxMUU4RUUyRkVBRDg3RjM0OTFGNzZBNkQyMjYyQzE0MTg5RUFDREZENENFRkUwQkY5RDBBNUI0OTg1N0UwRUQyMkNCRUI5OERDOEQ0NUIiOjE2OiI0OTUxQTdCMTc0REY5NzJDMzdCQURDQzM4NDU3QjVFREQxRjA3OEJDNjEzRTc1Q0UyNUUwODgxNEUxMjQ2MUM3QTFDMTg5QTcwRUI4MTM4Mjk0Mjk4RDE0MTI0NEM3QTlERTMxQUI0RjZEMzhCNDBCMDRENjM1M0NEMzBGNzdBREJGNjZCQkRFNDFDN0JFNDYzQzVFMzBBQUEzRjdCQUQ2Q0VFOTk1MDZERUFBRkEyRjMzNUMxQjFDNUM4OEI4QUJCMEQwMzg3RUUwRDFCNEU3MDI3RjdGMDg1QTAyNUNFREI1Q0NFMThCODhDMDQ2MkYxQzNDOTEwRDQ3QzBENEFCIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHVibGljLVByaXZhdGUga2V5ICM1IChFIG1pc21hdGNoKQorcnNhX2NoZWNrX3B1YnByaXY6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIxNyI6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiNzdCMUQ5OTMwMEQ2QTU0RTg2NDk2MkRBMDlBRTEwQ0YxOUE3RkI4ODg0NTZCQzI2NzJCNzJBRUE1MkIyMDQ5MTQ0OTNEMTZDMTg0QUQyMDFFQzNGNzYyRTFGQkQ4NzAyQkE3OTZFRjk1M0Q5RUEyRjI2MzAwRDI4NTI2NEYxMUIwQzgzMDFEMDIwN0ZFQjFFMkM5ODQ0NDVDODk5QjBBQ0VCQUE3NEVGMDE0REQxRDRCRERCNDMyMDJDMDhEMkZGOTY5MkQ4RDc4ODQ3OERFQzgyOUVCNTJBRkI1QUUwNjhGQkRCQUM0OTlBMjdGQUNFQ0MzOTFFNzVDOTM2RDU1RjA3QkI0NUVFMTg0REFCNDU4MDhFMTU3MjI1MDJGMjc5Rjg5QjM4QzFDQjI5MjU1N0U1MDYzNTk3RjUyQzc1RDYxMDAxRURDMzNGNDczOTM1M0UzM0U1NkFEMjczQjA2N0MxQTI3NjAyMDg1MjlFQTQyMTc3NEE1RkZGQ0IzNDIzQjFFMDA1MUU3NzAyQTU1RDgwQ0JGMjE0MTU2OUYxOEY4N0JGRjUzOEExREE4RURCQjI2OTNBNTM5RjY4RTBENjJENzc3NDNGODlFQUNGM0IxNzIzQkRCMjVDRTJGMzMzRkE2M0NBQ0YwRTY3REYxQTQzMTg5M0JCOUIzNTJGQ0IiOjE2OiI5QTY2Q0Y3NjU3MkE3MUExNzQ3NTc5NEZBMUM4QzcwRDk4N0U1ODFFOTkwRDc3MkJCMjdDNzdDNTNGRjFFQ0JCMzEyNjBFOUVEQUZBRUJDNzk5OTE4MDdFNDg5MThFQUI4QzNBNUYwM0E2MDBGMzBDNjk1MTE1NDZBRTc4OEVERjUzMTY4RTJEMDM1RDMwMEVEQ0Q1RTRCRjNBQTJBNkQ2MDNFQTBBN0JEMTFFMUMxMDg5NjU3MzA2REY4QTY0RTdGMUJDNkIyNjZCODI1QzFBNkM1RjBGQzg1Nzc1RjRDRjdBQ0Q2MzM2N0U0MkVBRkU0NjUxMUQ1OEFENkRGRTBGIjoxNjoiODQ0REJERDIwOTI1RDkxNjRGOUExRTJGNzA3MDc2QzI2MUNDQTgzMzdEMDI0MTM5MkIzOEFFM0MxMjM0MkYzQUMxNEY4RkQ2REY0QTFDMzY4Mzk2NjJCRDBEMjI3MzQ0Q0Q1NUEzMkFFNURCRDIzMDlBOUEyQjhBMkM4MkJFNkRERERDRTgxRDFCNjk0Nzc1RDkwNDdBQTc2NUNBMEM2RTFCQjhFNjFDOEI3QkUyN0VENzExRThFRTJGRUFEODdGMzQ5MUY3NkE2RDIyNjJDMTQxODlFQUNERkQ0Q0VGRTBCRjlEMEE1QjQ5ODU3RTBFRDIyQ0JFQjk4REM4RDQ1QiI6MTY6IjQ5NTFBN0IxNzRERjk3MkMzN0JBRENDMzg0NTdCNUVERDFGMDc4QkM2MTNFNzVDRTI1RTA4ODE0RTEyNDYxQzdBMUMxODlBNzBFQjgxMzgyOTQyOThEMTQxMjQ0QzdBOURFMzFBQjRGNkQzOEI0MEIwNEQ2MzUzQ0QzMEY3N0FEQkY2NkJCREU0MUM3QkU0NjNDNUUzMEFBQTNGN0JBRDZDRUU5OTUwNkRFQUFGQTJGMzM1QzFCMUM1Qzg4QjhBQkIwRDAzODdFRTBEMUI0RTcwMjdGN0YwODVBMDI1Q0VEQjVDQ0UxOEI4OEMwNDYyRjFDM0M5MTBENDdDMEQ0QUIiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBQcml2YXRlIChDb3JyZWN0KQorbWJlZHRsc19yc2FfcHJpdmF0ZToiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI0OGNlNjI2NThkODJiZTEwNzM3YmQ1ZDM1NzlhZWQxNWJjODI2MTdlNjc1OGJhODYyZWViMTJkMDQ5ZDdiYWNhZjJmNjJmY2U4YmY2ZTk4MDc2M2QxOTUxZjdmMGVhZTNhNDkzZGY5ODkwZDI0OTMxNGIzOWQwMGQ2ZWY3OTFkZTBkYWViZjJjNTBmNDZlNTRhZWI2M2E4OTExM2RlZmU4NWRlNmRiZTc3NjQyYWFlOWYyZWNlYjQyMGYzYTQ3YTU2MzU1Mzk2ZTcyODkxN2YxNzg3NmJiODI5ZmFiY2FlZWY4YmY3ZWY2ZGUyZmY5ZTg0ZTYxMDhlYTJlNTJiYmI2MmI3YjI4OGVmYTBhMzgzNTE3NWI4YjA4ZmFjNTZmNzM5NmVjZWIxYzY5MmQ0MTllY2I3OWQ4MGFlZjViYzA4YTc1ZDg5ZGU5ZjJiMmQ0MTFkODgxYzBlM2ZmYWQyNGMzMTFhMTkwMjlkMjEwZDNkMzUzNGYxYjYyNmY5ODJlYTMyMmI0ZDFjZmJhNDc2ODYwZWYyMGQ0ZjY3MmYzOGMzNzEwODRiNTMwMWI0MjliNzQ3ZWEwNTFhNjE5ZTQ0MzBlMGRhYzMzYzEyZjllZTQxY2E0ZDgxYTRmNmRhM2U0OTVhYTg1MjQ1NzRiZGM2MGQyOTBkZDFmN2E2MmU5MGE2NyI6MAorCitSU0EgUHJpdmF0ZSAoRGF0YSBsYXJnZXIgdGhhbiBOKQorbWJlZHRsc19yc2FfcHJpdmF0ZToiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiNjA1YmFmOTQ3YzBkZTQ5ZTRmNmEwZGZiOTRhNDNhZTMxOGQ1ZGY4ZWQyMGJhNGJhNWEzN2E3M2ZiMDA5YzVjOWU1Y2NlOGI3MGEyNWIxYzc1ODBmMzg5ZjBkNzA5MjQ4NWNkZmEwMjIwOGI3MGQzMzQ4MmVkZjA3YTdlYWZlYmRjNTQ4NjJjYTBlMDM5NmE1YTdkMDk5OTFiOTc1M2ViMWZmYjYwOTE5NzFiYjU3ODljNmIxMjFhYmJjZDBhM2NiYWEzOTk2OWZhN2MyODE0NmZjZTk2YzZkMDMyNzJlMzc5M2U1YmU4ZjVhYmZhOWFmY2JlYmI5ODZkN2IzMDUwNjA0YTJhZjRkM2E0MGZhNmMwMDM3ODFhNTM5YTYwMjU5ZDFlODRmMTMzMjJkYTllNTM4YTQ5YzM2OWI4M2U3Mjg2YmY3ZDMwYjY0YmJiNzczNTA2NzA1ZGE1ZDVkNTQ4M2E1NjNhMWZmYWNjOTAyZmI3NWM5YTc1MWIxZTgzY2RjN2E2ZGIwNDcwMDU2ODgzZjQ4YjVhNTQ0NmI0M2IxZDE4MGVhMTJiYTExYTZhOGQ5M2IzYjMyYTMwMTU2YjYwODRiN2ZiMTQyOTk4YTJhMGQyODAxNGI4NDA5OGVjZTdkOWQ1ZTRkNTVjYzM0MmNhMjZmNWEwMTY3YTY3OWRlYzgiOk1CRURUTFNfRVJSX1JTQV9QUklWQVRFX0ZBSUxFRCArIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQQorCitSU0EgUHVibGljIChDb3JyZWN0KQorbWJlZHRsc19yc2FfcHVibGljOiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjoyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiIxZjVlOTI3YzEzZmYyMzEwOTBiMGYxOGM4YzM1MjY0MjhlZDBmNGE3NTYxNDU3ZWU1YWZlNGQyMmQ1ZDkyMjBjMzRlZjViOWEzNGQwYzA3ZjcyNDhhMWYzZDU3Zjk1ZDEwZjc5MzZiMzA2M2U0MDY2MGIzYTdjYTNlNzM2MDhiMDEzZjg1YTZlNzc4YWM3YzYwZDU3NmU5ZDljMGM1YTc5YWQ4NGNlZWE3NGU0NzIyZWIzNTUzYmRiMGMyZDc3ODNkYWMwNTA1MjBjYjI3Y2E3MzQ3OGI1MDk4NzNjYjBkY2JkMWQ1MWRkOGZjY2I5NmMyOWFkMzE0ZjM2ZDY3Y2M1NzgzNWQ5MmQ5NGRlZmEwMzk5ZmViMDk1ZmQ0MWI5ZjBiMmJlMTBmNjA0MTA3OWVkNDI5MDA0MDQ0OWY4YTc5YWJhNTBiMGExZjhjZjgzYzlmYjg3NzJiMDY4NmVjMWIyOWNiMTgxNGJiMDZmOWMwMjQ4NTdkYjU0ZDM5NWE4ZGE5YTJjNmY5ZjUzYjk0YmVjNjEyYTBjYjMwNmEzZWFhOWZjODA5OTJlODVkOWQyMzJlMzdhNTBjYWJlNDhjOTM0M2YwMzk2MDFmZjdkOTVkNjAwMjVlNTgyYWVjNDc1ZDAzMTg4ODMxMGU4ZWMzODMzYjM5NGE1Y2YwNTk5MTAxZSI6MAorCitSU0EgUHVibGljIChEYXRhIGxhcmdlciB0aGFuIE4pCittYmVkdGxzX3JzYV9wdWJsaWM6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI2MDViYWY5NDdjMGRlNDllNGY2YTBkZmI5NGE0M2FlMzE4ZDVkZjhlZDIwYmE0YmE1YTM3YTczZmIwMDljNWM5ZTVjY2U4YjcwYTI1YjFjNzU4MGYzODlmMGQ3MDkyNDg1Y2RmYTAyMjA4YjcwZDMzNDgyZWRmMDdhN2VhZmViZGM1NDg2MmNhMGUwMzk2YTVhN2QwOTk5MWI5NzUzZWIxZmZiNjA5MTk3MWJiNTc4OWM2YjEyMWFiYmNkMGEzY2JhYTM5OTY5ZmE3YzI4MTQ2ZmNlOTZjNmQwMzI3MmUzNzkzZTViZThmNWFiZmE5YWZjYmViYjk4NmQ3YjMwNTA2MDRhMmFmNGQzYTQwZmE2YzAwMzc4MWE1MzlhNjAyNTlkMWU4NGYxMzMyMmRhOWU1MzhhNDljMzY5YjgzZTcyODZiZjdkMzBiNjRiYmI3NzM1MDY3MDVkYTVkNWQ1NDgzYTU2M2ExZmZhY2M5MDJmYjc1YzlhNzUxYjFlODNjZGM3YTZkYjA0NzAwNTY4ODNmNDhiNWE1NDQ2YjQzYjFkMTgwZWExMmJhMTFhNmE4ZDkzYjNiMzJhMzAxNTZiNjA4NGI3ZmIxNDI5OThhMmEwZDI4MDE0Yjg0MDk4ZWNlN2Q5ZDVlNGQ1NWNjMzQyY2EyNmY1YTAxNjdhNjc5ZGVjOCI6TUJFRFRMU19FUlJfUlNBX1BVQkxJQ19GQUlMRUQgKyBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEKKworUlNBIEdlbmVyYXRlIEtleSAtIDEyOGJpdCBrZXkKK21iZWR0bHNfcnNhX2dlbl9rZXk6MTI4OjM6MAorCitSU0EgR2VuZXJhdGUgS2V5IChOdW1iZXIgb2YgYml0cyB0b28gc21hbGwpCittYmVkdGxzX3JzYV9nZW5fa2V5OjEyNzozOk1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQQorCitSU0EgR2VuZXJhdGUgS2V5IChFeHBvbmVudCB0b28gc21hbGwpCittYmVkdGxzX3JzYV9nZW5fa2V5OjEyODoyOk1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQQorCitSU0EgR2VuZXJhdGUgS2V5IC0gMTAyNCBiaXQga2V5CittYmVkdGxzX3JzYV9nZW5fa2V5OjEwMjQ6MzowCisKK1JTQSBHZW5lcmF0ZSBLZXkgLSAyMDQ4IGJpdCBrZXkKK21iZWR0bHNfcnNhX2dlbl9rZXk6MjA0ODozOjAKKworUlNBIEdlbmVyYXRlIEtleSAtIDEwMjUgYml0IGtleQorbWJlZHRsc19yc2FfZ2VuX2tleToxMDI1OjM6TUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBCisKK1JTQSBQS0NTMSBFbmNyeXB0IEJhZCBSTkcKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK3JzYV9wa2NzMV9lbmNyeXB0X2JhZF9ybmc6IjRFNjM2QUY5OEU0MEYzQURDRkNDQjY5OEY0RTgwQjlGIjpNQkVEVExTX1JTQV9QS0NTX1YxNToyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiJhNDJlZGE0MWU1NjIzNWU2NjZlN2ZhYWE3NzEwMDE5N2Y2NTcyODhhMWJmMTgzZTQ4MjBmMGMzN2NlMmM0NTZiOTYwMjc4ZDYwMDNlMGJiY2Q0YmU0YTk2OWY4ZThmZDkyMzFlMWY0OTI0MTRmMDBlZDA5ODQ0OTk0Yzg2ZWMzMmRiN2NkZTNiZWM3ZjBjM2RiZjZhZTU1YmFlYjI3MTJmYTYwOWY1ZmMzMjA3YTgyNGViM2RhY2UzMTg0OWNkNmE2MDg0MzE4NTIzOTEyYmNjYjg0Y2Y0MmUzYzZkNmQxNjg1MTMxZDY5YmI1NDVhY2VjODI3ZDJiMGRmZGQ1NTY4YjdkY2M0ZjVhMTFkNjkxNjU4M2ZlZmE2ODlkMzY3ZjhjOWUxZDk1ZGNkMjI0MDg5NWE5NDcwYjBjMTczMGY5N2NkNmU4NTQ2ODYwYmQyNTQ4MDE3NjlmNTRiZTk2ZTE2MzYyZGRjYmYzNGQ1NjAzNTAyODg5MDE5OWUwZjQ4ZGIzODY0MmNiNjZhNDE4MWUwMjhhNjQ0M2E0MDRmZWEyODRjZTAyYjQ2MTRiNjgzMzY3ZDQwODc0ZTUwNTYxMWQyMzE0MmQ0OWYwNmZlZWE4MzFkNTJkMzQ3YjEzNjEwYjQxM2M0ZWZjNDNhNmRlOWYwYjA4ZDJhOTUxZGM1MDNiNiI6TUJFRFRMU19FUlJfUlNBX1JOR19GQUlMRUQKKworUlNBIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUCityc2Ffc2VsZnRlc3Q6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcnNhLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3JzYS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDhiYzg1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3JzYS5mdW5jdGlvbgpAQCAtMCwwICsxLDY5NiBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kMi5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQ0LmgiCisjaW5jbHVkZSAibWJlZHRscy9tZDUuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTI1Ni5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhNTEyLmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX0JJR05VTV9DOk1CRURUTFNfR0VOUFJJTUUKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24oIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgaW50IHBhZGRpbmdfbW9kZSwgaW50IGRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBtb2QsIGludCByYWRpeF9QLCBjaGFyICppbnB1dF9QLCBpbnQgcmFkaXhfUSwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X1EsIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLCBpbnQgcmFkaXhfRSwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X0UsIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIG1iZWR0bHNfbXBpIFAxLCBRMSwgSCwgRzsKKyAgICBpbnQgbXNnX2xlbjsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUDEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlExICk7IG1iZWR0bHNfbXBpX2luaXQoICZIICk7IG1iZWR0bHNfbXBpX2luaXQoICZHICk7CisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgcGFkZGluZ19tb2RlLCAwICk7CisKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3Jlc3VsdCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDAsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgIGN0eC5sZW4gPSBtb2QgLyA4OworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5QLCByYWRpeF9QLCBpbnB1dF9QICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5RLCByYWRpeF9RLCBpbnB1dF9RICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZQMSwgJmN0eC5QLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUTEsICZjdHguUSwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbXVsX21waSggJkgsICZQMSwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9nY2QoICZHLCAmY3R4LkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC5EICwgJmN0eC5FLCAmSCAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHguRFAsICZjdHguRCwgJlAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LkRRLCAmY3R4LkQsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC5RUCwgJmN0eC5RLCAmY3R4LlAgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggJmN0eCApID09IDAgKTsKKworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworCisgICAgaWYoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGRpZ2VzdCApICE9IE5VTEwgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZCggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggZGlnZXN0ICksIG1lc3NhZ2Vfc3RyLCBtc2dfbGVuLCBoYXNoX3Jlc3VsdCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV9zaWduKCAmY3R4LCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8sIE1CRURUTFNfUlNBX1BSSVZBVEUsIGRpZ2VzdCwgMCwgaGFzaF9yZXN1bHQsIG91dHB1dCApID09IHJlc3VsdCApOworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIG91dHB1dF9zdHIsIG91dHB1dCwgY3R4LmxlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBvdXRwdXRfc3RyLCByZXN1bHRfaGV4X3N0ciApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlAxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZRMSApOyBtYmVkdGxzX21waV9mcmVlKCAmSCApOyBtYmVkdGxzX21waV9mcmVlKCAmRyApOworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5KCBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGludCBwYWRkaW5nX21vZGUsIGludCBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2QsIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLCBpbnQgcmFkaXhfRSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfRSwgY2hhciAqcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3Jlc3VsdFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdF9zdHJbMTAwMF07CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgaW50IG1zZ19sZW47CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBwYWRkaW5nX21vZGUsIDAgKTsKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3Jlc3VsdCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggcmVzdWx0X3N0ciwgMHgwMCwgMTAwMCApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgbXNnX2xlbiA9IHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHJlc3VsdF9zdHIsIHJlc3VsdF9oZXhfc3RyICk7CisKKyAgICBpZiggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggZGlnZXN0ICkgIT0gTlVMTCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kKCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBkaWdlc3QgKSwgbWVzc2FnZV9zdHIsIG1zZ19sZW4sIGhhc2hfcmVzdWx0ICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeSggJmN0eCwgTlVMTCwgTlVMTCwgTUJFRFRMU19SU0FfUFVCTElDLCBkaWdlc3QsIDAsIGhhc2hfcmVzdWx0LCByZXN1bHRfc3RyICkgPT0gcmVzdWx0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHJzYV9wa2NzMV9zaWduX3JhdyggY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBjaGFyICpoYXNoX3Jlc3VsdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhZGRpbmdfbW9kZSwgaW50IG1vZCwgaW50IHJhZGl4X1AsIGNoYXIgKmlucHV0X1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X1EsIGNoYXIgKmlucHV0X1EsIGludCByYWRpeF9OLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X04sIGludCByYWRpeF9FLCBjaGFyICppbnB1dF9FLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9oZXhfc3RyICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIG1iZWR0bHNfbXBpIFAxLCBRMSwgSCwgRzsKKyAgICBpbnQgaGFzaF9sZW47CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlAxICk7IG1iZWR0bHNfbXBpX2luaXQoICZRMSApOyBtYmVkdGxzX21waV9pbml0KCAmSCApOyBtYmVkdGxzX21waV9pbml0KCAmRyApOworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIHBhZGRpbmdfbW9kZSwgMCApOworCisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggaGFzaF9yZXN1bHQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gODsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUCwgcmFkaXhfUCwgaW5wdXRfUCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUSwgcmFkaXhfUSwgaW5wdXRfUSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUDEsICZjdHguUCwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlExLCAmY3R4LlEsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX211bF9tcGkoICZILCAmUDEsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfZ2NkKCAmRywgJmN0eC5FLCAmSCAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHguRCAsICZjdHguRSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LkRQLCAmY3R4LkQsICZQMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC5EUSwgJmN0eC5ELCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHguUVAsICZjdHguUSwgJmN0eC5QICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoICZjdHggKSA9PSAwICk7CisKKyAgICB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworICAgIGhhc2hfbGVuID0gdW5oZXhpZnkoIGhhc2hfcmVzdWx0LCBoYXNoX3Jlc3VsdF9zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV9zaWduKCAmY3R4LCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8sIE1CRURUTFNfUlNBX1BSSVZBVEUsIE1CRURUTFNfTURfTk9ORSwgaGFzaF9sZW4sIGhhc2hfcmVzdWx0LCBvdXRwdXQgKSA9PSAwICk7CisKKyAgICBoZXhpZnkoIG91dHB1dF9zdHIsIG91dHB1dCwgY3R4LmxlbiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIG91dHB1dF9zdHIsIHJlc3VsdF9oZXhfc3RyICkgPT0gMCApOworCisgICAgLyogRm9yIFBLQ1MjMSB2MS41LCB0aGVyZSBpcyBhbiBhbHRlcm5hdGl2ZSB3YXkgdG8gZ2VuZXJhdGUgc2lnbmF0dXJlcyAqLworICAgIGlmKCBwYWRkaW5nX21vZGUgPT0gTUJFRFRMU19SU0FfUEtDU19WMTUgKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMDAgKTsKKyAgICAgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9lbmNyeXB0KCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8sIE1CRURUTFNfUlNBX1BSSVZBVEUsCisgICAgICAgICAgICAgICAgICAgIGhhc2hfbGVuLCBoYXNoX3Jlc3VsdCwgb3V0cHV0ICkgPT0gMCApOworCisgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgubGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIG91dHB1dF9zdHIsIHJlc3VsdF9oZXhfc3RyICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUDEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlExICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZIICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZHICk7CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCByc2FfcGtjczFfdmVyaWZ5X3JhdyggY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBjaGFyICpoYXNoX3Jlc3VsdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFkZGluZ19tb2RlLCBpbnQgbW9kLCBpbnQgcmFkaXhfTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X04sIGludCByYWRpeF9FLCBjaGFyICppbnB1dF9FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVzdWx0X2hleF9zdHIsIGludCBjb3JyZWN0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciByZXN1bHRfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBoYXNoX2xlbiwgb2xlbjsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIHBhZGRpbmdfbW9kZSwgMCApOworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfcmVzdWx0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCByZXN1bHRfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIHNpemVvZiggb3V0cHV0ICkgKTsKKworICAgIGN0eC5sZW4gPSBtb2QgLyA4OworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggJmN0eCApID09IDAgKTsKKworICAgIHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisgICAgaGFzaF9sZW4gPSB1bmhleGlmeSggaGFzaF9yZXN1bHQsIGhhc2hfcmVzdWx0X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCByZXN1bHRfc3RyLCByZXN1bHRfaGV4X3N0ciApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeSggJmN0eCwgTlVMTCwgTlVMTCwgTUJFRFRMU19SU0FfUFVCTElDLCBNQkVEVExTX01EX05PTkUsIGhhc2hfbGVuLCBoYXNoX3Jlc3VsdCwgcmVzdWx0X3N0ciApID09IGNvcnJlY3QgKTsKKworICAgIC8qIEZvciBQS0NTIzEgdjEuNSwgdGhlcmUgaXMgYW4gYWx0ZXJuYXRpdmUgd2F5IHRvIHZlcmlmeSBzaWduYXR1cmVzICovCisgICAgaWYoIHBhZGRpbmdfbW9kZSA9PSBNQkVEVExTX1JTQV9QS0NTX1YxNSApCisgICAgeworICAgICAgICBpbnQgb2s7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9kZWNyeXB0KCAmY3R4LAorICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBNQkVEVExTX1JTQV9QVUJMSUMsCisgICAgICAgICAgICAgICAgICAgICZvbGVuLCByZXN1bHRfc3RyLCBvdXRwdXQsIHNpemVvZiggb3V0cHV0ICkgKSA9PSAwICk7CisKKyAgICAgICAgb2sgPSBvbGVuID09IGhhc2hfbGVuICYmIG1lbWNtcCggb3V0cHV0LCBoYXNoX3Jlc3VsdCwgb2xlbiApID09IDA7CisgICAgICAgIGlmKCBjb3JyZWN0ID09IDAgKQorICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG9rID09IDEgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG9rID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX3JzYV9wa2NzMV9lbmNyeXB0KCBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGludCBwYWRkaW5nX21vZGUsIGludCBtb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZXN1bHRfaGV4X3N0ciwgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBtZXNzYWdlX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9zdHJbMTAwMF07CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgc2l6ZV90IG1zZ19sZW47CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworCisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDAsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIHBhZGRpbmdfbW9kZSwgMCApOworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMHgwMCwgMTAwMCApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgbXNnX2xlbiA9IHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcGtjczFfZW5jcnlwdCggJmN0eCwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvLCBNQkVEVExTX1JTQV9QVUJMSUMsIG1zZ19sZW4sIG1lc3NhZ2Vfc3RyLCBvdXRwdXQgKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBvdXRwdXRfc3RyLCBvdXRwdXQsIGN0eC5sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X2hleF9zdHIgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcnNhX3BrY3MxX2VuY3J5cHRfYmFkX3JuZyggY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBpbnQgcGFkZGluZ19tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kLCBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X3N0clsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgbXNnX2xlbjsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIHBhZGRpbmdfbW9kZSwgMCApOworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMHgwMCwgMTAwMCApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgbXNnX2xlbiA9IHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcGtjczFfZW5jcnlwdCggJmN0eCwgJnJuZF96ZXJvX3JhbmQsIE5VTEwsIE1CRURUTFNfUlNBX1BVQkxJQywgbXNnX2xlbiwgbWVzc2FnZV9zdHIsIG91dHB1dCApID09IHJlc3VsdCApOworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIG91dHB1dF9zdHIsIG91dHB1dCwgY3R4LmxlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBvdXRwdXRfc3RyLCByZXN1bHRfaGV4X3N0ciApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0KCBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGludCBwYWRkaW5nX21vZGUsIGludCBtb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfUCwgY2hhciAqaW5wdXRfUCwgaW50IHJhZGl4X1EsIGNoYXIgKmlucHV0X1EsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X291dHB1dCwgY2hhciAqcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIG1iZWR0bHNfbXBpIFAxLCBRMSwgSCwgRzsKKyAgICBzaXplX3Qgb3V0cHV0X2xlbjsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUDEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlExICk7IG1iZWR0bHNfbXBpX2luaXQoICZIICk7IG1iZWR0bHNfbXBpX2luaXQoICZHICk7CisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgcGFkZGluZ19tb2RlLCAwICk7CisKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dF9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlAsIHJhZGl4X1AsIGlucHV0X1AgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlEsIHJhZGl4X1EsIGlucHV0X1EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlAxLCAmY3R4LlAsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZRMSwgJmN0eC5RLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmSCwgJlAxLCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2djZCggJkcsICZjdHguRSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LkQgLCAmY3R4LkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC5EUCwgJmN0eC5ELCAmUDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHguRFEsICZjdHguRCwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LlFQLCAmY3R4LlEsICZjdHguUCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKyAgICBvdXRwdXRfbGVuID0gMDsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0KCAmY3R4LCBybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbywgTUJFRFRMU19SU0FfUFJJVkFURSwgJm91dHB1dF9sZW4sIG1lc3NhZ2Vfc3RyLCBvdXRwdXQsIG1heF9vdXRwdXQgKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBvdXRwdXRfc3RyLCBvdXRwdXQsIGN0eC5sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RybmNhc2VjbXAoIChjaGFyICopIG91dHB1dF9zdHIsIHJlc3VsdF9oZXhfc3RyLCBzdHJsZW4oIHJlc3VsdF9oZXhfc3RyICkgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZQMSApOyBtYmVkdGxzX21waV9mcmVlKCAmUTEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkggKTsgbWJlZHRsc19tcGlfZnJlZSggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfcnNhX3B1YmxpYyggY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBpbnQgbW9kLCBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwKKyAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X3N0clsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eCwgY3R4MjsgLyogQWxzbyB0ZXN0IG1iZWR0bHNfcnNhX2NvcHkoKSB3aGlsZSBhdCBpdCAqLworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4MiwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dF9zdHIsIDB4MDAsIDEwMDAgKTsKKworICAgIGN0eC5sZW4gPSBtb2QgLyA4OworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggJmN0eCApID09IDAgKTsKKworICAgIHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcHVibGljKCAmY3R4LCBtZXNzYWdlX3N0ciwgb3V0cHV0ICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgubGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIG91dHB1dF9zdHIsIHJlc3VsdF9oZXhfc3RyICkgPT0gMCApOworICAgIH0KKworICAgIC8qIEFuZCBub3cgd2l0aCB0aGUgY29weSAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jb3B5KCAmY3R4MiwgJmN0eCApID09IDAgKTsKKyAgICAvKiBjbGVhciB0aGUgb3JpZ2luYWwgdG8gYmUgc3VyZSAqLworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoICZjdHgyICkgPT0gMCApOworCisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dF9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcHVibGljKCAmY3R4MiwgbWVzc2FnZV9zdHIsIG91dHB1dCApID09IHJlc3VsdCApOworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIG91dHB1dF9zdHIsIG91dHB1dCwgY3R4Mi5sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X2hleF9zdHIgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4MiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX3JzYV9wcml2YXRlKCBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGludCBtb2QsIGludCByYWRpeF9QLCBjaGFyICppbnB1dF9QLAorICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X1EsIGNoYXIgKmlucHV0X1EsIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLAorICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X3N0clsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eCwgY3R4MjsgLyogQWxzbyB0ZXN0IG1iZWR0bHNfcnNhX2NvcHkoKSB3aGlsZSBhdCBpdCAqLworICAgIG1iZWR0bHNfbXBpIFAxLCBRMSwgSCwgRzsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisgICAgaW50IGk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUDEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlExICk7IG1iZWR0bHNfbXBpX2luaXQoICZIICk7IG1iZWR0bHNfbXBpX2luaXQoICZHICk7CisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4MiwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlAsIHJhZGl4X1AsIGlucHV0X1AgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlEsIHJhZGl4X1EsIGlucHV0X1EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlAxLCAmY3R4LlAsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZRMSwgJmN0eC5RLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmSCwgJlAxLCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2djZCggJkcsICZjdHguRSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LkQgLCAmY3R4LkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC5EUCwgJmN0eC5ELCAmUDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHguRFEsICZjdHguRCwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LlFQLCAmY3R4LlEsICZjdHguUCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKworICAgIC8qIHJlcGVhdCB0aHJlZSB0aW1lcyB0byB0ZXN0IHVwZGF0aW5nIG9mIGJsaW5kaW5nIHZhbHVlcyAqLworICAgIGZvciggaSA9IDA7IGkgPCAzOyBpKysgKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMDAgKTsKKyAgICAgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wcml2YXRlKCAmY3R4LCBybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3N0ciwgb3V0cHV0ICkgPT0gcmVzdWx0ICk7CisgICAgICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgubGVuICk7CisKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBvdXRwdXRfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9oZXhfc3RyICkgPT0gMCApOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQW5kIG5vdyBvbmUgbW9yZSB0aW1lIHdpdGggdGhlIGNvcHkgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY29weSggJmN0eDIsICZjdHggKSA9PSAwICk7CisgICAgLyogY2xlYXIgdGhlIG9yaWdpbmFsIHRvIGJlIHN1cmUgKi8KKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggJmN0eDIgKSA9PSAwICk7CisKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMHgwMCwgMTAwMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wcml2YXRlKCAmY3R4Miwgcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3N0ciwgb3V0cHV0ICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgyLmxlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBvdXRwdXRfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2hleF9zdHIgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZQMSApOyBtYmVkdGxzX21waV9mcmVlKCAmUTEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkggKTsgbWJlZHRsc19tcGlfZnJlZSggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7IG1iZWR0bHNfcnNhX2ZyZWUoICZjdHgyICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHJzYV9jaGVja19wcml2a2V5X251bGwoKQoreworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIG1lbXNldCggJmN0eCwgMHgwMCwgc2l6ZW9mKCBtYmVkdGxzX3JzYV9jb250ZXh0ICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCAmY3R4ICkgPT0gTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsCisgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKworICAgIGlmKCBzdHJsZW4oIGlucHV0X04gKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfRSApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworICAgIH0KKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoICZjdHggKSA9PSByZXN1bHQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoIGludCBtb2QsIGludCByYWRpeF9QLCBjaGFyICppbnB1dF9QLCBpbnQgcmFkaXhfUSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X1EsIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsIGludCByYWRpeF9ELCBjaGFyICppbnB1dF9ELAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0RQLCBjaGFyICppbnB1dF9EUCwgaW50IHJhZGl4X0RRLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfRFEsIGludCByYWRpeF9RUCwgY2hhciAqaW5wdXRfUVAsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIE1CRURUTFNfUlNBX1BLQ1NfVjE1LCAwICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gODsKKyAgICBpZiggc3RybGVuKCBpbnB1dF9QICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlAsIHJhZGl4X1AsIGlucHV0X1AgKSA9PSAwICk7CisgICAgfQorICAgIGlmKCBzdHJsZW4oIGlucHV0X1EgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUSwgcmFkaXhfUSwgaW5wdXRfUSApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfTiApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIH0KKyAgICBpZiggc3RybGVuKCBpbnB1dF9FICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisgICAgfQorICAgIGlmKCBzdHJsZW4oIGlucHV0X0QgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRCwgcmFkaXhfRCwgaW5wdXRfRCApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfRFAgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRFAsIHJhZGl4X0RQLCBpbnB1dF9EUCApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfRFEgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRFEsIHJhZGl4X0RRLCBpbnB1dF9EUSApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfUVAgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUVAsIHJhZGl4X1FQLCBpbnB1dF9RUCApID09IDAgKTsKKyAgICB9CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggJmN0eCApID09IHJlc3VsdCApOworCitleGl0OgorICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcnNhX2NoZWNrX3B1YnByaXYoIGludCBtb2QsIGludCByYWRpeF9OcHViLCBjaGFyICppbnB1dF9OcHViLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0VwdWIsIGNoYXIgKmlucHV0X0VwdWIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfUCwgY2hhciAqaW5wdXRfUCwgaW50IHJhZGl4X1EsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9RLCBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9FLCBjaGFyICppbnB1dF9FLCBpbnQgcmFkaXhfRCwgY2hhciAqaW5wdXRfRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9EUCwgY2hhciAqaW5wdXRfRFAsIGludCByYWRpeF9EUSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X0RRLCBpbnQgcmFkaXhfUVAsIGNoYXIgKmlucHV0X1FQLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCit7CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBwdWIsIHBydjsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZwdWIsIE1CRURUTFNfUlNBX1BLQ1NfVjE1LCAwICk7CisgICAgbWJlZHRsc19yc2FfaW5pdCggJnBydiwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKworICAgIHB1Yi5sZW4gPSBtb2QgLyA4OworICAgIHBydi5sZW4gPSBtb2QgLyA4OworCisgICAgaWYoIHN0cmxlbiggaW5wdXRfTnB1YiApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnB1Yi5OLCByYWRpeF9OcHViLCBpbnB1dF9OcHViICkgPT0gMCApOworICAgIH0KKyAgICBpZiggc3RybGVuKCBpbnB1dF9FcHViICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcHViLkUsIHJhZGl4X0VwdWIsIGlucHV0X0VwdWIgKSA9PSAwICk7CisgICAgfQorCisgICAgaWYoIHN0cmxlbiggaW5wdXRfUCApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnBydi5QLCByYWRpeF9QLCBpbnB1dF9QICkgPT0gMCApOworICAgIH0KKyAgICBpZiggc3RybGVuKCBpbnB1dF9RICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcHJ2LlEsIHJhZGl4X1EsIGlucHV0X1EgKSA9PSAwICk7CisgICAgfQorICAgIGlmKCBzdHJsZW4oIGlucHV0X04gKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZwcnYuTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfRSApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnBydi5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworICAgIH0KKyAgICBpZiggc3RybGVuKCBpbnB1dF9EICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcHJ2LkQsIHJhZGl4X0QsIGlucHV0X0QgKSA9PSAwICk7CisgICAgfQorICAgIGlmKCBzdHJsZW4oIGlucHV0X0RQICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcHJ2LkRQLCByYWRpeF9EUCwgaW5wdXRfRFAgKSA9PSAwICk7CisgICAgfQorICAgIGlmKCBzdHJsZW4oIGlucHV0X0RRICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcHJ2LkRRLCByYWRpeF9EUSwgaW5wdXRfRFEgKSA9PSAwICk7CisgICAgfQorICAgIGlmKCBzdHJsZW4oIGlucHV0X1FQICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcHJ2LlFQLCByYWRpeF9RUCwgaW5wdXRfUVAgKSA9PSAwICk7CisgICAgfQorCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3B1Yl9wcml2KCAmcHViLCAmcHJ2ICkgPT0gcmVzdWx0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19yc2FfZnJlZSggJnB1YiApOworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZwcnYgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NUUl9EUkJHX0M6TUJFRFRMU19FTlRST1BZX0MgKi8KK3ZvaWQgbWJlZHRsc19yc2FfZ2VuX2tleSggaW50IG5yYml0cywgaW50IGV4cG9uZW50LCBpbnQgcmVzdWx0KQoreworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAidGVzdF9zdWl0ZV9yc2EiOworCisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHJfZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLCBzdHJsZW4oIHBlcnMgKSApID09IDAgKTsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIDAsIDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9nZW5fa2V5KCAmY3R4LCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnLCBucmJpdHMsIGV4cG9uZW50ICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCAmY3R4ICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJmN0eC5QLCAmY3R4LlEgKSA+IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgcnNhX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2Ffc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zaGF4LmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc2hheC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMmExODMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc2hheC5kYXRhCkBAIC0wLDAgKzEsMTcxIEBACitTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfc2hhMToiIjoiZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOSIKKworU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3NoYTE6ImE4IjoiOTlmMmFhOTVlMzZmOTVjMmFjYjBlYWYyMzk5OGYwMzA2MzhmM2YxNSIKKworU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3NoYTE6IjMwMDAiOiJmOTQ0ZGNkNjM1Zjk4MDFmN2FjOTBhNDA3ZmJjNDc5OTY0ZGVjMDI0IgorCitTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfc2hhMToiNDI3NDllIjoiYTQ0NDMxOWU5YjZjYzFlODQ2NGM1MTFlYzA5NjljMzdkNmJiMjYxOSIKKworU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3NoYTE6IjlmYzNmZTA4IjoiMTZhMGZmODRmY2MxNTZmZDVkM2NhM2E3NDRmMjBhMjMyZDE3MjI1MyIKKworU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3NoYTE6ImI1YzFjNmYxYWYiOiJmZWM5ZGVlYmZjZGVkYWY2NmRkYTUyNWUxYmU0MzU5N2E3M2ExZjkzIgorCitTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfc2hhMToiZWMyOTU2MTI0NGVkZTcwNmI2ZWIzMGExYzM3MWQ3NDQ1MGExMDVjM2Y5NzM1ZjdmYTlmZTM4Y2Y2N2YzMDRhNTczNmExMDZlOTJlMTcxMzlhNjgxM2IxYzgxYTRmM2QzZmI5NTQ2YWI0Mjk2ZmE5ZjcyMjgyNmMwNjY4NjllZGFjZDczYjI1NDgwMzUxODU4MTNlMjI2MzRhOWRhNDQwMDBkOTVhMjgxZmY5ZjI2NGVjY2UwYTkzMTIyMjE2MmQwMjFjY2EyOGRiNWYzYzJhYTI0OTQ1YWIxZTMxY2I0MTNhZTI5ODEwZmQ3OTRjYWQ1ZGZhZjI5ZWM0M2NiMzhkMTk4ZmU0YWUxZGEyMzU5NzgwMjIxNDA1YmQ2NzEyYTUzMDVkYTRiMWI3MzdmY2U3Y2QyMWMwZWI3NzI4ZDA4MjM1YTkwMTEiOiI5NzAxMTFjNGU3N2JjYzg4Y2MyMDQ1OWMwMmI2OWI0YWE4ZjU4MjE3IgorCitTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfc2hhMToiNWZjMmMzZjZhN2U3OWRjOTRiZTUyNmU1MTY2YTIzODg5OWQ1NDkyN2NlNDcwMDE4ZmJmZDY2OGZkOWRkOTdjYmY2NGUyYzkxNTg0ZDAxZGE2M2JlM2NjOWZkZmY4YWRmZWZjM2FjNzI4ZTFlMzM1YjljZGM4N2YwNjkxNzJlMzIzZDA5NGI0N2ZhMWU2NTJhZmU0ZDZhYTE0N2E5ZjQ2ZmRhMzNjYWNiNjVmM2FhMTIyMzQ3NDZiOTAwN2E4Yzg1ZmU5ODJhZmVkNzgxNTIyMWU0M2RiYTU1M2Q4ZmU4YTAyMmNkYWMxYjk5ZWVlZWEzNTllNWE5ZDJlNzJlMzgyZGZmYTZkMTlmMzU5ZjRmMjdkYzM0MzRjZDI3ZGFlZWRhOGUzODU5NDg3MzM5ODY3ODA2NWZiYjIzNjY1YWJhOTMwOWQ5NDYxMzVkYTBlNGE0YWZkYWRmZjE0ZGIxOGU4NWU3MWRkOTNjM2JmOWZhZjdmMjVjODE5NGM0MjY5YjFlZTNkOTkzNDA5N2FiOTkwMDI1ZDljM2FhZjYzZDUxMDlmNTIzMzVkZDM5NTlkMzhhZTQ4NTA1MGU0YmJiNjIzNTU3NGZjMDEwMmJlOGY3YTMwNmQ2ZThkZTZiYTZiZWNmODBmMzc0MTViNTdmOTg5OGE1ODI0ZTc3NDE0MTk3NDIyYmUzZDM2YTYwODAiOiIwNDIzZGM3NmE4NzkxMTA3ZDE0ZTEzZjUyNjViMzQzZjI0Y2MwZjE5IgorCitTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfc2hhMToiMGY4NjVmNDZhOGYzYWVkMmRhMTg0ODJhYTA5YThmMzkwZGM5ZGEwN2Q1MWQxYmQxMGZlMGJmNWYzOTI4ZDU5MjdkMDg3MzNkMzIwNzU1MzVhNmQxYzhhYzFiMmRjNmJhMGYyZjYzM2RjMWFmNjhlM2YwZmEzZDg1ZTZjNjBjYjdiNTZjMjM5ZGMxNTE5YTAwN2VhNTM2YTA3YjUxOGVjY2EwMmE2YzMxYjQ2Yjc2ZjAyMTYyMGVmM2ZjNjk3NjgwNDAxODM4MGU1YWI5YzU1OGViZmM1Y2IxYzllZDJkOTc0NzIyYmY4YWI2Mzk4ZjFmMmI4MmZhNTA4M2Y4NWMxNmE1NzY3YTNhMDcyNzFkNjc3NDNmMDA4NTBjZThlYzQyOGM3ZjIyZjFjZjAxZjk5ODk1YzBjODQ0ODQ1YjA2YTA2Y2VjYjBjNmNmODNlYjU1YTFkNGViYzQ0YzJjMTNmNmY3YWE1ZTBlMDhhYmZkODRlNzg2NDI3OTA1N2FiYzQ3MWVlNGE0NWRiYmI1Nzc0YWZhMjRlNTE3OTFhMGVhZGExMTA5M2I4ODY4MWZlMzBiYWEzYjJlOTQxMTNkYzYzMzQyYzUxY2E1ZDFhNjA5NmQwODk3YjYyNmU0MmNiOTE3NjEwNTgwMDhmNzQ2ZjM1NDY1NDY1NTQwYWQ4YzZiOGI2MGY3ZTE0NjFiM2NlOWU2NTI5NjI1OTg0Y2I4YzdkNDZmMDdmNzM1YmUwNjc1ODhhMDExN2YyM2UzNGZmNTc4MDBlMmJiZTlhMTYwNWZkZTYwODdmYjE1ZDIyYzVkM2FjNDc1NjZiOGM0NDhiMGNlZTQwMzczZTViYTZlYWEyMWFiZWU3MTM2NmFmYmIyN2RiYmQzMDA0NzdkNzBjMzcxZTdiODk2MzgxMmY1ZWQ0ZmI3ODRmYjJmM2JkMWQzYWZlODgzY2RkNDdlZjMyYmVhZWEiOiI2NjkyYTcxZDczZTAwZjI3ZGY5NzZiYzU2ZGY0OTcwNjUwZDkwZTQ1IgorCitTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3NoYTE6IjgyMzYxNTM3ODFiZDJmMWI4MWZmZTBkZWYxYmViNDZmNWE3MDE5MTE0MjkyNjY1MTUwM2YxYjNiYjEwMTZhY2RiOWU3ZjdhY2NlZDhkZDE2ODIyNmYxMThmZjY2NGEwMWE4ODAwMTE2ZmQwMjM1ODdiZmJhNTJhMjU1ODM5MzQ3NmY1ZmM2OWNlOWM2NTAwMWYyM2U3MDQ3NmQyY2M4MWM5N2VhMTljYWViMTk0ZTIyNDMzOWJjYjIzZjc3YTgzZmVhYzUwOTZmOWIzMDkwYzUxYTZlZTZkMjA0YjczNWFhNzFkN2U5OTZkMzgwYjgwODIyZTRkZmQ0MzY4M2FmOWM3NDQyNDk4Y2FjYmVhNjQ4NDJkZmRhMjM4Y2IwOTk5MjdjNmVmYWUwN2ZkZjdiMjNhNGU0NDU2ZTAxNTJiMjQ4NTNmZTBkNWRlNDE3OTk3NGIyYjlkNGExY2RiZWZjYmMwMWQ4ZDMxMWI1ZGRhMDU5MTM2MTc2ZWE2OThhYjgyYWNmMjBkZDQ5MGJlNDcxMzBiMTIzNWNiNDhmOGE2NzEwNDczY2ZjOTIzZTIyMmQ5NGI1ODJmOWFlMzZkNGNhMmEzMmQxNDFiOGU4Y2MzNjYzODg0NWZiYzQ5OWJjZTE3Njk4YzNmZWNhZTI1NzJkYmJkNDcwNTUyNDMwZDdlZjMwYzIzOGMyMTI0NDc4ZjFmNzgwNDgzODM5YjRmYjczZDYzYTk0NjAyMDY4MjRhNWI2YjY1MzE1YjIxZTNjMmYyNGM5N2VlN2MwZTc4ZmFhZDNkZjU0OWM3Y2E4ZWYyNDE4NzZkOWFhZmU5YTMwOWY2ZGEzNTJiZWMyY2FhYTkyZWU4ZGNhMzkyODk5YmE2N2RmZWQ5MGFlZjMzZDQxZmMyNDk0Yjc2NWNiM2UyNDIyYzhlNTk1ZGFiYmZhY2EyMTc3NTc0NTNmYjMyMmExMzIwM2Y0MjVmNjA3M2E5OTAzZTJkYzU4MThlZTFkYTczN2FmYzM0NWYwMDU3NzQ0ZTNhNTZlMTY4MWM5NDllYjEyMjczYTNiZmMyMDY5OWU0MjNiOTZlNDRiZDFmZjYyZTUwYTg0OGE4OTA4MDliZmUxNjExYzY3ODdkM2Q3NDExMDMzMDhmODQ5YTc5MGY5YzAxNTA5ODI4NmRiYWNmYzM0YzE3MThiMmMyYjc3ZTMyMTk0YTc1ZGRhMzc5NTRhMzIwZmE2ODc2NDAyNzg1Mjg1NWE3ZTViNTI3NGViMWUyY2JjZDI3MTYxZDk4YjU5YWQyNDU4MjIwMTVmNDhhZjgyYTQ1YzBlZDU5YmU5NGY5YWYwM2Q5NzM2MDQ4NTcwZDZlM2VmNjNiMTc3MGJjOThkZmI3N2RlODRiMWJiMTcwOGQ4NzJiNjI1ZDlhYjliMDZjMThlNWRiYmYzNDM5OTM5MWYwZjhhYTI2ZWMwZGFjN2ZmNGNiOGVjOTdiNTJiY2I5NDJmYTZkYjIzODVkY2QxYjNiOWQ1NjdhYWViNDI1ZDU2N2IwZWJlMjY3MjM1NjUxYTFlZDliZjc4ZmQ5M2QzYzFkZDA3N2ZlMzQwYmIwNGIwMDUyOWM1OGY0NTEyNGI3MTdjMTY4ZDA3ZTk4MjZlMzMzNzY5ODhiYzVjZjYyODQ1YzIwMDk5ODBhNGRmYTY5ZmJjN2U1YTBiMWJiMjBhNTk1OGNhOTY3YWVjNjhlYjMxZGQ4ZmNjY2E5YWZjZDMwYTI2YmFiMjYyNzlmMWJmNjcyNGZmIjoiMTE4NjNiNDgzODA5ZWY4ODQxM2NhOWIwMDg0YWM0YTUzOTA2NDBhZiIKKworU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworc2hhMjI0OiIiOiJkMTRhMDI4YzJhM2EyYmM5NDc2MTAyYmIyODgyMzRjNDE1YTJiMDFmODI4ZWE2MmFjNWIzZTQyZiIKKworU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworc2hhMjI0OiJmZiI6ImUzM2Y5ZDc1ZTZhZTEzNjlkYmFiZjgxYjk2YjQ1OTFhZTQ2YmJhMzBiNTkxYTZiNmM2MjU0MmI1IgorCitTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitzaGEyMjQ6Ijk4NGMiOiIyZmE5ZGY5MTU3ZDllMDI3Y2ZiYzRjNmE5ZGYzMmUxYWRjMGNiZTIzMjhlYzJhNjNjNWFlOTM0ZSIKKworU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworc2hhMjI0OiI1MGVmZDAiOiJiNWE5ODIwNDEzYzJiZjgyMTFmYmJmNWRmMTMzNzA0M2IzMmZhNGVhZmFmNjFhMGM4ZTljY2VkZSIKKworU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworc2hhMjI0OiJlNWUwOTkyNCI6ImZkMTllNzQ2OTBkMjkxNDY3Y2U1OWYwNzdkZjMxMTYzOGYxYzNhNDZlNTEwZDBlNDlhNjcwNjJkIgorCitTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitzaGEyMjQ6IjIxZWJlY2I5MTQiOiI3OGY0YTcxYzIxYzY5NDQ5OWNlMWM3ODY2NjExYjE0YWNlNzBkOTA1MDEyYzM1NjMyM2M3YzcxMyIKKworU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworc2hhMjI0OiJmYzQ4ODk0N2MxYTdhNTg5NzI2YjE1NDM2YjRmM2Q5NTU2MjYyZjk4ZmM2NDIyZmM1Y2RmMjBmMGZhZDdmZTQyN2EzNDkxYzg2ZDEwMWZmZTZiNzUxNGYwNjI2OGY2NWIyZDI2OWIwZjY5YWQ5YTk3ODQ3ZWZmMWMxNmEyNDM4Nzc1ZWI3YmU2ODQ3Y2NmMTFjYjhiMmU4ZGNkNjY0MGIwOTViNDljMDY5M2ZlM2NmNGE2NmUyZDliN2FkNjhiZmYxNGYzYWQ2OWFiZjQ5ZDBhYmEzNmNiZTA1MzUyMDJkZWI2NTk5YTQ3MjI1ZWYwNWJlYjM1MTMzNWNkN2JjMGY0ODBkNjkxMTk4YzdlNzEzMDVmZmQ1M2IzOWQzMzI0MmJiNzljZmQ5OGJmZDY5ZTEzN2I1ZDE4YjJiODlhYzlhY2UwMWM4ZGJkY2YyNTMzY2NlMzY4MmVjYzUyMTE4ZGUwYzEwNjJlYzIxMjZjMmU2NTdkNmVhM2Q5ZTIzOThlNzA1ZDRiMGIxZjFjZWVjYjI2NmRmZmM0ZjMxYmY0Mjc0NGZiMWU5MzhkYzIyYTg4OTkxOWVlMWU3M2Y0NjNmNzg3MWZlZDcyMDUxOWUzMjE4NjI2NGI3ZWYyYTBlNWQ5YTE4ZTZjOTVjMDc4MTg5NGY3Nzk2N2YwNDg5NTFkZWMzYjRkODkyYTM4NzEwYjFlMzQzNmQzYzI5MDg4ZWI4YjNkYTE3ODljMjVkYjNkM2JjNmMyNjA4MTIwNmU3MTU1ZDIxMGE4OWI4MGNhNmVhODc3YzQxZmY5OTQ3YzBmMjU2MjVkY2IxMTgyOTRhMTYzNTAxZjYyMzljMzI2NjYxYTk1OGZkMTJkYTRjZDE1YTg5OWY4Yjg4Y2M3MjM1ODkwNTZlYWVjNWFhMDRhNGNmNWRiYjZmNDgwZjk2NjA0MjNjY2YzOGM0ODZlMjEwNzA3ZTBmYjI1ZTFmMTI2Y2ViMjYxNmY2M2UxNDdhNjQ3ZGFiMGFmOWViZTg5ZDY1NDU4YmY2MzYxNTRhNDZlNGNhYjk1ZjVlZTYyZGEyYzc5NzRjZDE0YjkwZDNlNGY5OWY4MTczM2U4NWIzYzFkNWRhMmI1MDhkOWI5MGY1ZWVkN2VmZjBkOWM3NjQ5ZGU2MmJlZTAwMzc1NDU0ZmVlNGEzOTU3NmE1YmJmZGFlNDI4ZTdmODA5N2JkZjc3OTdmMTY3Njg2Y2I2ODQwN2U0OTA3OWU0NjExZmYzNDAyYjYzODRiYTdiN2U1MjJiZDJiYjExY2U4ZmQwMmVhNGMxNjA0ZDE2M2FjNGY2ZGRlNTBiOGIxZjU5M2Y3ZWRhYWRlYWMwODY4ZWQ5N2RmNjkwMjAwNjgwYzI1ZjBmNWQ4NTQzMWE1MjllNGYzMzkwODlkY2RlZGExMDVlNGVlNTFkZWFkNzA0Y2RmNWE2MDVjNTVmYjA1NWM5YjBlODZiOGJhMWI1NjRjMGRlYTNlYjc5MGE1OTVjYjEwM2NiMjkyMjY4YjA3YzVlNTkzNzFlMWE3ZWY1OTdjZDRiMjI5NzdhODIwNjk0YzlmOWFlYjU1ZDlkZTNlZjYyYjc1ZDZlNjU2ZTMzMzY2OThkOTYwYTM3ODdiZjhjZjViOTI2YTdmYWVlZjUyYWUxMjhiY2I1ZGM5ZTY2ZDk0YjAxNmM3YjhlMDM0ODc5MTcxYTJkOTFjMzgxZjU3ZTZhODE1YjYzYjVlZTZhNmQyZmY0MzViNDlmMTRjOTYzOTY2OTYwMTk0NDMwZDc4ZjhmODc2MjdhNjc3NTdmYjM1MzJiMjg5NTUwODk0ZGE2ZGNlNDgxN2E0ZTA3ZjRkNTY4NzdhMTEwMmZmY2M4YmVmYTVjOWY4ZmNhNmE0NTc0ZDkzZmY3MDM3NmM4ODYxZTBmODEwOGNmOTA3ZmNlNzdlY2I0OTcyOGY4NmYwMzRmODAyMjRiOTY5NTY4MmUwODI0NDYyZjc2Y2RiMWZkMWFmMTUxMzM3YjBkODU0MTkwNDdhN2FhMjg0NzkxNzE4YTQ4NjBjZDU4NmY3ODI0Yjk1YmM4MzdiNmZkNGY5YmU1YWFkZTY4NDU2ZTIwMzU2YWE0ZDk0M2RhYzM2YmY4YjY3YjllOGY5ZDAxYTAwZmNkYTc0Yjc5OGJhZmE3NDZjNjYxYjAxMGY3NWI1OTkwNGIyOWQwYzgwNDE1MDQ4MTFjNDA2NWY4MmNmMmVhZDU4ZDJmNTk1Y2JkOGJjM2U3MDQzZjRkOTQ1NzdiMzczYjdjZmUxNmEzNmZlNTY0ZjUwNWMwM2I3MGNmZWI1ZTVmNDExYzc5NDgxMzM4YWE2N2U4NmIzZjVhMmU3N2MyMWU0NTRjMzMzYWUzZGE5NDNhYjcyM2FiNWY0Yzk0MDM5NTMxOTUzNGE1NTc1ZjY0YWNiYTBkMGVjYzQzZjYwMjIxZWQzYmFkZjcyODljOWIzYTdiOTAzYTJkNmM5NGUxNWZhNGMzMTBkYzRmYTdmYWEwYzI0ZjQwNTE2MGExMDAyZGJlZjIwZTQxMDVkNDgxZGI5ODJmNzI0M2Y3OTQwMGE2ZTRjZDk3NTNjNGI5NzMyYTQ3NTc1ZjUwNGIyMGMzMjhmZTlhZGQ3ZjQzMmE0ZjA3NTgyOWRhMDdiNTNiNjk1MDM3ZGM1MTczN2QzY2Q3MzE5MzRkZjMzM2NkMWE1M2ZjZjY1YWEzMWJhYTQ1MGNhNTAxYTZmYWUyNmUzMjIzNDdlNjE4YzVhNDQ0ZDkyZTlmZWM1YTgyNjFhZTM4Yjk4ZmVlNWJlNzdjMDJjZWMwOWRkY2NkNWIzZGU5MjAzNiI6IjEzMDIxNDlkMWUxOTdjNDE4MTNiMDU0Yzk0MjMyOWQ0MjBlMzY2NTMwZjU1MTdiNDcwZTk2NGZlIgorCitTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3NoYTI1NjoiIjoiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSIKKworU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19zaGEyNTY6ImJkIjoiNjgzMjU3MjBhYWJkN2M4MmYzMGY1NTRiMzEzZDA1NzBjOTVhY2NiYjdkYzRiNWFhZTExMjA0YzA4ZmZlNzMyYiIKKworU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19zaGEyNTY6IjVmZDQiOiI3YzRmYmY0ODQ0OThkMjFiNDg3YjlkNjFkZTg5MTRiMmVhZGFmMjY5ODcxMjkzNmQ0N2MzYWRhMjU1OGY2Nzg4IgorCitTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3NoYTI1NjoiYjBiZDY5IjoiNDA5NjgwNDIyMTA5M2RkY2NmYmY0NjgzMTQ5MGVhNjNlOWU5OTQxNDg1OGY4ZDc1ZmY3ZjY0MmM3Y2E2MTgwMyIKKworU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19zaGEyNTY6ImM5OGM4ZTU1IjoiN2FiYzIyYzBhZTVhZjI2Y2U5M2RiYjk0NDMzYTBlMGIyZTExOWQwMTRmOGU3ZjY1YmQ1NmM2MWNjY2NkOTUwNCIKKworU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19zaGEyNTY6IjgxYTcyM2Q5NjYiOiI3NTE2ZmI4YmIxMTM1MGRmMmJmMzg2YmMzYzMzYmQwZjUyY2I0YzY3YzZlNDc0NWUwNDg4ZTYyYzJhZWEyNjA1IgorCitTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3NoYTI1NjoiODM5MGNmMGJlMDc2NjFjYzc2NjlhYWM1NGNlMDlhMzc3MzNhNjI5ZDQ1ZjVkOTgzZWYyMDFmOWIyZDEzODAwZTU1NWQ5YjEwOTdmZWMzYjc4M2Q3YTUwZGNiNWUyYjY0NGI5NmExZTk0NjNmMTc3Y2YzNDkwNmJmMzg4ZjM2NmRiNWMyZGVlZTA0YTMwZTI4M2Y3NjRhOTdjM2IzNzdhMDM0ZmVmYzIyYzI1OTIxNGZhYTk5YmFiYWZmMTYwYWIwYWFhN2UyY2NiMGNlMDljNmIzMmZlMDhjYmM0NzQ2OTQzNzVhYmE3MDNmYWRiZmEzMWNmNjg1YjMwYTExYzU3ZjNjZjRlZGQzMjFlNTdkM2FlNmViYjExMzNjODI2MGU3NWI5MjI0ZmE0N2EyYmIyMDUyNDlhZGQyZTJlNjJmODE3NDkxNDgyYWUxNTIzMjJiZTA5MDAzNTVjZGNjOGQ0MmE5OGY4MmU5NjFhMGRjNmY1MzdiN2I0MTBlZmYxMDVmNTk2NzNiZmI3ODdiZjA0MmFhMDcxZjdhZjY4ZDk0NGQyNzM3MWM2NDE2MGZlOTM4Mjc3MjM3MjUxNmMyMzBjMWY0NWMwZDZiNmNjYTdmMjc0YjM5NGRhOTQwMmQzZWFmZGY3MzM5OTRlYzU4YWIyMmQ3MTgyOWE5ODM5OTU3NGQ0YjU5MDhhNDQ3YTVhNjgxY2IwZGQ1MGEzMTE0NTMxMWQ5MmMyMmExNmRlMWVhZDY2YTU0OTlmMmRjZWI0Y2FlNjk0NzcyY2U5MDc2MmVmODMzNmFmZWM2NTNhYTliMWExYzQ4MjBiMjIxMTM2ZGZjZTgwZGNlMmJhOTIwZDg4YTUzMGM5NDEwZDBhNGUwMzU4YTNhMTEwNTJlNThkZDczYjBiMTc5ZWY4ZjU2ZmUzYjVhMmQxMTdhNzNhMGMzOGExMzkyYjY5MzhlOTc4MmUwZDg2NDU2ZWU0ODg0ZTNjMzlkNGQ3NTgxM2YxMzYzM2JjNzliYWEwN2MwZDJkNTU1YWZiZjIwN2Y1MmI3ZGNhMTI2ZDAxNWFhMmI5ODczYjNlYjA2NWU5MGI5YjA2NWE1MzczZmUxZmIxYjIwZDU5NDMyN2QxOWZiYTU2Y2I4MWU3YjY2OTY2MDVmZmE1NmViYTNjMjdhNDM4Njk3Y2MyMWIyMDFmZDdlMDlmMThkZWVhMWIzZWEyZjBkMWVkYzAyZGYwZTIwMzk2YTE0NTQxMmNkNmIxM2MzMmQyZTYwNTY0MWM5NDhiNzE0YWVjMzBjMDY0OWRjNDQxNDM1MTFmMzVhYjBmZDVkZDY0YzM0ZDA2ZmU4NmYzODM2ZGZlOWVkZWI3ZjA4Y2ZjM2JkNDA5NTY4MjYzNTYyNDIxOTFmOTlmNTM0NzNmMzJiMGNjMGNmOTMyMWQ2YzkyYTExMmU4ZGI5MGI4NmVlOWU4N2NjMzJkMDM0M2RiMDFlMzJjZTllYjc4MmNiMjRlZmJiYmViNDQwZmU5MjllOGYyYmY4ZGZiMTU1MGEzYTJlNzQyZThiNDU1YTNlNTczMGU5ZTZhN2E5ODI0ZDE3YWNjMGY3MmE3ZjY3ZWFlMGYwOTcwZjhiZGU0NmRjZGVmYWVkMzA0N2NmODA3ZTdmMDBhNDJlNWZkMTFkNDBmNWU5ODUzM2Q3NTc0NDI1YjdkMmJjM2IzODQ1YzQ0MzAwOGI1ODk4MGU3NjhlNDY0ZTE3Y2M2ZjZiMzkzOWVlZTUyZjcxMzk2M2QwN2Q4YzRhYmYwMjQ0OGVmMGI4ODljOTY3MWUyZjhhNDM2ZGRlZWZmY2NhNzE3NmU5YmY5ZDEwMDVlY2QzNzdmMmZhNjdjMjNlZDFmMTM3ZTYwYmY0NjAxOGE4YmQ2MTNkMDM4ZTg4MzcwNGZjMjZlNzk4OTY5ZGYzNWVjN2JiYzZhNGZlNDZkODkxMGJkODJmYTNjZGVkMjY1ZDBhM2I2ZDM5OWU0MjUxZTRkODIzM2RhYTIxYjU4MTJmZGVkNjUzNjE5OGZmMTNhYTVhMWNkNDZhNWI5YTE3YTRkZGMxZDlmODU1NDRkMWQxY2MxNmYzZGY4NTgwMzhjOGUwNzFhMTFhN2UxNTdhODVhNmE4ZGM0N2U4OGQ3NWU3MDA5YThiMjZmZGI3M2YzM2EyYTcwZjFlMGMyNTlmOGY5NTMzYjliOGY5YWY5Mjg4YjcyNzRmMjFiYWVlYzc4ZDM5NmY4YmFjZGNjMjI0NzEyMDdkOWI0ZWZjY2QzZmVkYzVjNWEyMjE0ZmY1ZTUxYzU1M2YzNWUyMWFlNjk2ZmU1MWU4ZGY3MzNhOGUwNmY1MGY0MTllNTk5ZTlmOWU0YjM3Y2U2NDNmYzgxMGZhYWE0Nzk4OTc3MTUwOWQ2OWExMTBhYzkxNjI2MTQyNzAyNjM2OWEyMTI2M2FjNDQ2MGZiNGY3MDhmOGFlMjg1OTk4NTZkYjdjYjZhNDNhYzhlMDNkNjRhOTYwOTgwN2U3NmM1ZjMxMmI5ZDE4NjNiZmEzMDRlODk1MzY0NzY0OGI0ZjRhYjBlZDk5NWUiOiI0MTA5Y2RiZWMzMjQwYWQ3NGNjNmMzN2YzOTMwMGY3MGZlZGUxNmUyMWVmYzc3Zjc4NjU5OTg3MTRhYWQwYjVlIgorCitTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitzaGEzODQ6IiI6IjM4YjA2MGE3NTFhYzk2Mzg0Y2Q5MzI3ZWIxYjFlMzZhMjFmZGI3MTExNGJlMDc0MzRjMGNjN2JmNjNmNmUxZGEyNzRlZGViZmU3NmY2NWZiZDUxYWQyZjE0ODk4Yjk1YiIKKworU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworc2hhMzg0OiJhYiI6ImZiOTRkNWJlMTE4ODY1ZjZmY2JjOTc4YjgyNWRhODJjZmYxODhmYWVjMmY2NmNiODRiMjUzN2Q3NGI0OTM4NDY5ODU0YjBjYTg5ZTY2ZmEyZTE4MjgzNDczNjYyOWYzZCIKKworU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworc2hhMzg0OiI3YzI3IjoiM2Q4MGJlNDY3ZGY4NmQ2M2FiYjllYTFkM2Y5Y2IzOWNkMTk4OTBlN2YyYzUzYTYyMDBiZWRjNTAwNjg0MmIzNWU4MjBkYzRlMGNhOTBjYTliOTdhYjIzZWYwNzA4MGZjIgorCitTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitzaGEzODQ6IjMxZjVjYSI6Ijc4ZDU0Yjk0MzQyMWZkZjdiYTkwYTdmYjk2MzdjMjA3M2FhNDgwNDU0YmQ4NDFkMzlmZjcyZjQ1MTFmYzIxZmI2Nzc5N2I2NTJjMGM4MjMyMjkzNDI4NzNkM2JlZjk1NSIKKworU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworc2hhMzg0OiI3YmRlZTNmOCI6IjhiZGFmYmEwNzc3ZWU0NDZjMzQzMWMyZDdiMWZiYjYzMTA4OWY3MWQyY2E0MTdhYmMxZDIzMGUxYWJhNjRlYzJmMWMxODc0NzRhNmY0MDc3ZDM3MmMxNGFkNDA3Zjk5YSIKKworU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworc2hhMzg0OiI4ZjA1NjA0OTE1IjoiNTA0ZTQxNGJmMWRiMTA2MGYxNGM4Yzc5OWUyNWIxZTBjNGRjZjE1MDRlYmJkMTI5OTk4ZjBhZTI4M2U2ZGU4NmUwZDNjN2U4NzljNzNlYzNiMTgzNmMzZWU4OWMyNjQ5IgorCitTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitzaGEzODQ6IjY2NWRhNmVkYTIxNCI6IjRjMDIyZjExMjAxMDkwODg0ODMxMmY4YjhmMTA3MjYyNWZkNWMxMDUzOTlkNTYyZWExZDU2MTMwNjE5YTdlYWM4ZGZjMzc0OGZkMDVlZTM3ZTRiNjkwYmU5ZGFhOTk4MCIKKworU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworc2hhMzg0OiI3ZjQ2Y2U1MDZkNTkzYzRlZDUzYzgyZWRlYjYwMjAzN2UwNDg1YmVmYmVlMDNmN2Y5MzBmZTUzMmQxOGZmMmEzZjVmZDYwNzY2NzJjODE0NWExYmY0MGRkOTRmN2FiYWI0N2M5YWU3MWMyMzQyMTNkMmFkMTA2OWMyZGFjMGIwYmExNTI1N2FlNjcyYjgyNDU5NjBhZTU1YmQ1MDMxNWMwMDk3ZGFhM2EzMTg3NDU3ODhkNzBkMTQ3MDY5MTA4MDljYTZlMzk2MjM3ZmU0OTM0ZmE0NmY5Y2U3ODJkNjY2MDZkOGJkNmIyZDI4M2IxMTYwNTEzY2U5YzI0ZTlmMDg0Yjk3ODkxZjk5ZDRjZGVmYzE2OWEwMjllNDMxY2E3NzJiYTFiYmE0MjZmY2U2ZjAxZDhlMjg2MDE0ZTVhY2M2NmI3OTllNGRiNjJiZDQ3ODMzMjJmOGEzMmZmNzhlMGRlMzk1N2RmNTBjZTEwODcxZjRlMDY4MGRmNGU4Y2EzOTYwYWY5YmM2ZjRlZmE4ZWIzOTYyZDE4ZjQ3NGViMTc4YzMyNjVjYzQ2YjhmMmZmNWFiMWE3NDQ5ZmVhMjk3ZGZjZmFiZmEwMWYyOGFiYmI3Mjg5YmIzNTRiNjkxYjU2NjRlYzZkMDk4YWY1MWJlMTk5NDdlYzViYTdlYmQ2NjM4MGQxMTQxOTUzYmE3OGQ0YWE1NDAxNjc5ZmE3YjBhNDRkYjE5ODFmODY0ZDM1MzVjNDVhZmU0YzYxMTgzZDViMGFkNTFmYWU3MWNhMDdlMzQyNDAyODM5NTlmNzUzMGEzMmM3MGQ5NWEwODhlNTAxYzIzMDA1OWYzMzNiMDY3MDgyNTAwOWU3ZTIyMTAzZWYyMjkzNTgzMGRmMWZhYzhlZjg3N2Y1ZjM0MjZkZDU0ZjdkMTEyOGRkODcxYWQ5YTdkMDg4Zjk0YzBlODcxMjAxMzI5NWI4ZDY5YWU3NjIzYjg4MDk3OGMyZDNjNmFkMjZkYzQ3OGY4ZGM0N2Y1YzBhZGNjNjE4NjY1ZGMzZGMyMDVhOTA3MWIyZjIxOTFlMTZjYWM1YmQ4OWJiNTkxNDhmYzcxOTYzMzc1MjMwM2FhMDhlNTE4ZGJjMzg5ZjBhNTQ4MmNhYWE0YzUwN2I4NzI5YTZmM2VkZDA2MWVmYjM5MDI2Y2VjYzYzOTlmNTE5NzFjZjczODFkNjA1ZTE0NGE1OTI4YzhjMmQxYWQ3NDY3YjA1ZGEyZjIwMmY0ZjMyMzRlMWFmZjE5YTAxOThhMjg2ODU3MjFjM2QyZDUyMzExYzcyMWUzZmRjYmFmMzAyMTRjZGMzYWNmZjhjNDMzODgwZTEwNGZiNjNmMmRmN2NlNjlhOTc4NTc4MTliYTdhYzAwYWM4ZWFlMTk2OTc2NGZkZThmNjhjZjhlMDkxNmQ3ZTBjMTUxMTQ3ZDQ5NDRmOTlmNDJhZTUwZjMwZTFjNzlhNDJkMmI2YzUxODhkMTMzZDNjYmJmNjkwOTQwMjdiMzU0YjI5NWNjZDBmN2RjNWE4N2Q3MzYzOGJkOThlYmZiMDAzODNjYTBmYTY5Y2I4ZGNiMzVhMTI1MTBlNWUwN2FkODc4OTA0N2QwYjYzODQxYTFiYjkyODczN2U4YjBhMGMzMzI1NGY0N2FhOGJmYmUzMzQxYTA5YzJiNzZkYmNlZmE2N2UzMGRmMzAwZDM0ZjdiODQ2NWM0Zjg2OWU1MWI2YmNmZTZjZjY4YjIzODM1OWE2NDUwMzZiZjdmNjNmMDI5MjRlMDg3Y2U3NDU3ZTQ4M2I2MDI1YTg1OTkwM2NiNDg0NTc0YWEzYjEyY2Y5NDZmMzIxMjdkNTM3YzMzYmVlMzE0MWI1ZGI5NmQxMGExNDhjNTBhZTA0NWYyODcyMTA3NTc3MTBkNjg0NmUwNGIyMDJmNzllODdkZDlhNTZiYzZkYTE1Zjg0YTc3YTdmNjM5MzVlMWRlZTAwMzA5Y2QyNzZhOGU3MTc2Y2IwNGRhNmJiMGU5MDA5NTM0NDM4NzMyY2I0MmQwMDgwMDg4NTNkMzhkMTliZWJhNDZlNjEwMDZlMzBmN2VmZDFiYzdjMjkwNmIwMjRlNGZmODk4YTFiNThjNDQ4ZDY4YjQzYzZhYjYzZjM0Zjg1YjNhYzZhYTQ0NzU4NjdlNTFiNTgzODQ0Y2IyMzgyOWY0YjMwZjRiZGQ4MTdkODhlMmVmM2U3YjRmYzBhNjI0Mzk1YjA1ZWM1ZTg2ODYwODJiMjRkMjlmZWYyYjBkM2MyOWUwMzFkNWY5NGY1MDRiMWQzZGY5MzYxZWI1ZmZiYWRiMjQyZTY2YzM5YTgwOTRjZmU2MmY4NWY2MzlmM2ZkNjVmYzhhZTBjNzRhOGY0YzZlMWQwNzBiOTE4M2E0MzRjNzIyY2FhYTAyMjVmOGJjZDY4NjE0ZDZmMDczOGVkNjJmODQ4NGVjOTYwNzdkMTU1YzA4ZTI2YzQ2YmUyNjJhNzNlMzU1MTY5OGJkNzBkOGQ1NjEwY2YzN2M0YzMwNmVlZDA0YmE2YTA0MGE5YzNlNmQ3ZTE1ZThhY2RhMTdmNDc3YzI0ODRjZjVjNTZiODEzMzEzOTI3YmU4Mzg3YjEwMjRmOTk1ZTk4ZmM4N2YxMDI5MDkxYzAxNDI0YmRjMmIyOTZjMmVhZGI3ZDI1YjNlNzYyYTJmZDBjMmRjZDE3MjdkZGY5MWRiOTdjNTk4NDMwNTI2NWYzNjk1YTdmNTQ3MmYyZDcyYzk0ZDY4YzI3OTE0ZjE0ZjgyYWE4ZGQ1ZmU0ZTIzNDhiMGNhOTY3YTNmOTg2MjZhMDkxNTUyZjVkMGZmYTJiZjEwMzUwZDIzYzk5NjI1NmMwMWZkZWZmYjJjMmM2MTI1MTk4NjlmODc3ZTQ5MjljNmU5NWZmMTUwNDBmMTQ4NWUyMmVkMTQxMTk4ODAyMzJmZWYzYjU3YjM4NDhmMTViMTc2NmE1NTUyODc5ZGY4ZjA2IjoiY2JhOWUzZWIxMmE2ZjgzZGIxMWU4YTZmZjQwZDEwNDk4NTRlZTA5NDQxNmJjNTI3ZmVhOTMxZDg1ODU0MjhhOGVkNjI0MmNlODFmNjc2OWIzNmUyMTIzYTVjMjM0ODNlIgorCitTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3NoYTUxMjoiIjoiY2Y4M2UxMzU3ZWVmYjhiZGYxNTQyODUwZDY2ZDgwMDdkNjIwZTQwNTBiNTcxNWRjODNmNGE5MjFkMzZjZTljZTQ3ZDBkMTNjNWQ4NWYyYjBmZjgzMThkMjg3N2VlYzJmNjNiOTMxYmQ0NzQxN2E4MWE1MzgzMjdhZjkyN2RhM2UiCisKK1NIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfc2hhNTEyOiI4ZiI6ImU0Y2QyZDE5OTMxYjVhYWQ5YzkyMGY0NWY1NmY2Y2UzNGUzZDM4YzZkMzE5YTZlMTFkMDU4OGFiOGI4Mzg1NzZkNmNlNmQ2OGVlYTdjODMwZGU2NmUyYmQ5NjQ1OGJmYTdhYWZiY2JlYzk4MWQ0ZWQwNDA0OThjM2RkOTVmMjJhIgorCitTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3NoYTUxMjoiZTcyNCI6IjdkYmI1MjAyMjFhNzAyODdiMjNkYmNmNjJiZmMxYjczMTM2ZDg1OGU4NjI2NjczMmE3ZmZmYTg3NWVjYWEyYzFiOGY2NzNiNWMwNjVkMzYwYzU2M2E3Yjk1MzkzNDlmNWY1OWJlZjhjMGM1OTNmOTU4N2UzY2Q1MGJiMjZhMjMxIgorCitTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3NoYTUxMjoiZGU0YzkwIjoiMzNjZTk4MjgxMDQ1YTVjNGM5ZGYwMzYzZDgxOTZmMWQ3ZGZjZDVlZTQ2YWM4OTc3NmZkOGE0MzQ0YzEyZjEyM2E2Njc4OGFmNWJkNDFjZWZmMTk0MWFhNTYzNzY1NGI0MDY0Yzg4YzE0ZTAwNDY1YWI3OWEyZmM2Yzk3ZTEwMTQiCisKK1NIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfc2hhNTEyOiJhODAxZTk0YiI6ImRhZGIxYjVhMjdmOWZlY2U4ZDg2YWRiMmE1MTg3OWJlYjE3ODdmZjI4ZjRlOGNlMTYyY2FkN2ZlZTBmOTQyZWZjYWJiZjczOGJjNmY3OTdmYzdjYzc5YTNhNzUwNDhjZDRjODJjYTA3NTdhMzI0Njk1YmZiMTlhNTU3ZTU2ZTJmIgorCitTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3NoYTUxMjoiOTQzOTBkMzUwMiI6ImI2MTc1YzRjNGNjY2Y2OWUwY2U1ZjAzMTIwMTA4ODZlYTZiMzRkNDM2NzNmOTQyYWU0MjQ4M2Y5Y2JiN2RhODE3ZGU0ZTExYjVkNThlMjVhM2Q5YmQ3MjFhMjJjZGZmZTFjNDA0MTFjYzQ1ZGYxOTExZmE1NTA2MTI5YjY5Mjk3IgorCitTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3NoYTUxMjoiNDkyOTdkZDYzZTVmIjoiMWZjYzFlNmY2ODcwODU5ZDExNjQ5ZjVlNTMzNmE5Y2QxNjMyOWMwMjliYWYwNGQ1YTZlZGYyNTc4ODlhMmU5NTIyYjQ5N2RkNjU2YmI0MDJkYTQ2MTMwN2M0ZWUzODJlMmU4OTM4MGM4ZTZlNmU3Njk3ZjFlNDM5ZjY1MGZhOTQiCisKK1NIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfc2hhNTEyOiI5OTBkMWFlNzFhNjJkN2JkYTliZmRhYTE3NjJhNjhkMjk2ZWVlNzJhNGNkOTQ2ZjI4N2E4OThmYmFiYzAwMmVhOTQxZmQ4ZDRkOTkxMDMwYjRkMjdhNjM3Y2NlNTAxYTgzNGJiOTVlYWIxYjc4ODlhM2U3ODRjNzk2OGU2N2NiZjU1MjAwNmIyMDZiNjhmNzZkOTE5MTMyNzUyNGZjYzI1MWFlYjU2YWY0ODNkMTBiNGUwYzZjNWU1OTllZThjMGZlNGZhZWNhODI5Mzg0NGE4NTQ3YzZhOWE5MGQwOTNmMjUyNjg3M2ExOWFkNGE1ZTc3Njc5NGM2OGM3NDJmYjgzNDc5M2QyZGZjYjdmZWE0NmM2M2FmNGI3MGZkMTFjYjZlNDE4MzRlNzJlZTQwZWRiMDY3YjI5MmE3OTQ5OTBjMjg4ZDUwMDdlNzNmMzQ5ZmIzODNhZjZhNzU2YjgzMDFhZDZlNWUwYWE4Y2Q2MTQzOTliYjNhNDUyMzc2YjE1NzVhZmE2YmRhZWFhZmMyODZjYjA2NGJiOTFlZGVmOTdjNjMyYjZjMTExM2QxMDdmYTkzYTA5MDUwOThhMTA1MDQzYzJmMDUzOTdmNzAyNTE0NDM5YTA4YTllNWRkYzE5NjEwMDcyMWQ0NWM4ZmMxN2QyZWQ2NTkzNzZmOGEwMGJkNWNiOWEwODYwZTI2ZDhhMjlkOGQ2YWFmNTJkZTk3ZTkzNDYwMzNkNmRiNTAxYTM1ZGJiYWY5N2MyMGI4MzBjZDJkMThjMjUzMmYzYTU5Y2M0OTdlZTY0YzBlNTdkOGQwNjBlNTA2OWIyOGQ4NmVkZjFhZGNmNTkxNDRiMjIxY2UzZGRhZWYxMzRiMzEyNGZiYzdkZDAwMDI0MGVmZjBmNWY1ZjQxZTgzY2Q3ZjViYjM3YzlhZTIxOTUzZmUzMDJiMGY2ZThiNjhmYTkxYzZhYjk5MjY1YzY0YjJmZDljZDQ5NDJiZTA0MzIxYmI1ZDZkNzE5MzIzNzZjNmYyZjg4ZTAyNDIyYmE2YTVlMmNiNzY1ZGY5M2ZkNWRkMDcyOGM2YWJkYWYwM2JjZTIyZTA2NzhhNTQ0ZTJjMzYzNmY3NDFiNmY0NDQ3ZWU1OGE4ZmM2NTZiNDNlZjgxNzkzMjE3NmFkYmZjMmUwNGIyYzgxMmMyNzNjZDZjYmZhNDA5OGYwYmUwMzZhMzQyMjFmYTAyNjQzZjVlZTJlMGIzODEzNWYyYTE4ZWNkMmYxNmViYzQ1ZjhlYjMxYjhhYjk2N2ExNTY3ZWUwMTY5MDQxODg5MTA4NjFjYTFmYTIwNWM3YWRhYTE5NGIyODY4OTNmZmUyZjRmYmUwMzg0YzJhZWY3MmE0NTIyYWVhZmQzZWJjNzFmOWRiNzFlZWVlZjg2YzQ4Mzk0YTFjODZkNWIzNmMzNTJjYzMzYTBhMmM4MDBiYzk5ZTYyZmQ2NWIzYTJmZDY5ZTBiNTM5OTZlYzEzZDhjZTQ4M2NlOTMxOWVmZDlhODVhY2VmYWJkYjUzNDIyMjZmZWJiODNmZDFkYWY0YjI0MjY1ZjUwYzYxYzZkZTc0MDc3ZWY4OWI2ZmVjZjlmMjlhMWY4NzFhZjFlOWY4OWIyZDM0NWNkYTc0OTliZDQ1YzQyZmE1ZDE5NWExZTFhNmJhODQ4NTE4ODllNzMwZGEzYjJiOTE2ZTk2MTUyYWUwYzkyMTU0YjQ5NzE5ODQxZGI3ZTdjYzcwN2JhOGE1ZDdiMTAxZWI0YWM3YjYyOWJiMzI3ODE3OTEwZmZmNjE1ODBiNTlhYWI3ODE4MmQxYTJlMzM0NzNkMDViMDBiMTcwYjI5ZTMzMTg3MDgyNmNmZTQ1YWYyMDZhYTdkMDI0NmJiZDg1NjZjYTdjZmIyZDNjMTBiZmExZGI3ZGQ0OGRkNzg2MDM2NDY5Y2U3MjgyMDkzZDc4YjVlMWE1YjBmYzgxYTU0YzhlZDRjZWFjMWU1MzA1MzA1ZTc4Mjg0YWMyNzZmNWQ3ODYyNzI3YWZmMjQ2ZTE3YWRkZGU1MGM2NzAwMjhkNTcyY2JmYzBiZTJlNGY4YjJlYjI4ZmE2OGFkN2I0YzZjMmEyMzljNDYwNDQxYmZiNWVhMDQ5ZjIzYjA4NTYzYjRlNDc3MjlhNTllNTk4NmE2MWE2MDkzZGJkNTRmOGMzNmViZTg3ZWRhZTAxZjI1MWNiMDYwYWQxMzY0Y2U2NzdkN2U4ZDVhNGE0Y2E5NjZhNzI0MWNjMzYwYmMyYWNiMjgwZTVmOWU5YzFiMDMyYWQ2YTE4MGEzNWUwYzUxODBiOWQxNmQwMjZjODY1YjI1MjA5OGNjMWQ5OWJhNzM3NWNhMzFjNzcwMmMwZDk0M2Q1ZTNkZDJmNjg2MWZhNTViZDQ2ZDk0YjY3ZWQzZTUyZWNjZDhkZDA2ZDk2OGUwMTg5N2Q2ZGU5N2VkMzA1OGQ5MWRkIjoiOGU0YmM2ZjhiOGM2MGZlNGQ2OGM2MWQ5YjE1OWM4NjkzYzMxNTFjNDY3NDlhZjU4ZGEyMjg0NDJkOTI3ZjIzMzU5YmQ2Y2NkNmMyZWM4ZmEzZjAwYTg2Y2VjYmZhNzI4ZTFhZDYwYjgyMWVkMjJmY2QzMDliYTkxYTQxMzhiYzkiCisKK1NIQS0xIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUOk1CRURUTFNfU0hBMV9DCitzaGExX3NlbGZ0ZXN0OgorCitTSEEtMjU2IFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUOk1CRURUTFNfU0hBMjU2X0MKK3NoYTI1Nl9zZWxmdGVzdDoKKworU0hBLTUxMiBTZWxmdGVzdAorZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVDpNQkVEVExTX1NIQTUxMl9DCitzaGE1MTJfc2VsZnRlc3Q6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc2hheC5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zaGF4LmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiM2VlOWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc2hheC5mdW5jdGlvbgpAQCAtMCwwICsxLDEzMSBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9zaGExLmgiCisjaW5jbHVkZSAibWJlZHRscy9zaGEyNTYuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTUxMi5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TSEExX0MgKi8KK3ZvaWQgbWJlZHRsc19zaGExKCBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2hhc2hfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzQxXTsKKyAgICBpbnQgc3JjX2xlbjsKKworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDAwMCk7CisgICAgbWVtc2V0KGhhc2hfc3RyLCAweDAwLCAxMDAwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgNDEpOworCisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19zaGExKCBzcmNfc3RyLCBzcmNfbGVuLCBvdXRwdXQgKTsKKyAgICBoZXhpZnkoIGhhc2hfc3RyLCBvdXRwdXQsIDIwICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBoYXNoX3N0ciwgaGV4X2hhc2hfc3RyaW5nICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MgKi8KK3ZvaWQgc2hhMjI0KGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbNTddOworICAgIGludCBzcmNfbGVuOworCisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMDAwKTsKKyAgICBtZW1zZXQoaGFzaF9zdHIsIDB4MDAsIDEwMDAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCA1Nyk7CisKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX3NoYTI1Niggc3JjX3N0ciwgc3JjX2xlbiwgb3V0cHV0LCAxICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCAyOCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZyApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DICovCit2b2lkIG1iZWR0bHNfc2hhMjU2KGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbNjVdOworICAgIGludCBzcmNfbGVuOworCisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMDAwKTsKKyAgICBtZW1zZXQoaGFzaF9zdHIsIDB4MDAsIDEwMDAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCA2NSk7CisKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX3NoYTI1Niggc3JjX3N0ciwgc3JjX2xlbiwgb3V0cHV0LCAwICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCAzMiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZyApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DICovCit2b2lkIHNoYTM4NChjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2hhc2hfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0Wzk3XTsKKyAgICBpbnQgc3JjX2xlbjsKKworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDAwMCk7CisgICAgbWVtc2V0KGhhc2hfc3RyLCAweDAwLCAxMDAwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgOTcpOworCisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19zaGE1MTIoIHNyY19zdHIsIHNyY19sZW4sIG91dHB1dCwgMSApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgNDggKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQyAqLwordm9pZCBtYmVkdGxzX3NoYTUxMihjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2hhc2hfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEyOV07CisgICAgaW50IHNyY19sZW47CisKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwMDApOworICAgIG1lbXNldChoYXNoX3N0ciwgMHgwMCwgMTAwMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEyOSk7CisKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX3NoYTUxMiggc3JjX3N0ciwgc3JjX2xlbiwgb3V0cHV0LCAwKTsKKyAgICBoZXhpZnkoIGhhc2hfc3RyLCBvdXRwdXQsIDY0ICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBoYXNoX3N0ciwgaGV4X2hhc2hfc3RyaW5nICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIHNoYTFfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NoYTFfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgc2hhMjU2X3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zaGEyNTZfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgc2hhNTEyX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zaGE1MTJfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zc2wuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zc2wuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzlmNmYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NzbC5kYXRhCkBAIC0wLDAgKzEsNTYgQEAKK1NTTCBEVExTIHJlcGxheTogaW5pdGlhbCBzdGF0ZSwgc2VxbnVtIDAKK3NzbF9kdGxzX3JlcGxheToiIjoiMDAwMDAwMDAwMDAwIjowCisKK1NTTCBEVExTIHJlcGxheTogMCBzZWVuLCAxIGFycml2aW5nCitzc2xfZHRsc19yZXBsYXk6IjAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMSI6MAorCitTU0wgRFRMUyByZXBsYXk6IDAgc2VlbiwgMCByZXBsYXllZAorc3NsX2R0bHNfcmVwbGF5OiIwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAiOi0xCisKK1NTTCBEVExTIHJlcGxheTogMC0xIHNlZW4sIDIgYXJyaXZpbmcKK3NzbF9kdGxzX3JlcGxheToiMDAwMDAwMDAwMDAwLDAwMDAwMDAwMDAwMSI6IjAwMDAwMDAwMDAwMiI6MAorCitTU0wgRFRMUyByZXBsYXk6IDAtMSBzZWVuLCAxIHJlcGxheWVkCitzc2xfZHRsc19yZXBsYXk6IjAwMDAwMDAwMDAwMCwwMDAwMDAwMDAwMDEiOiIwMDAwMDAwMDAwMDEiOi0xCisKK1NTTCBEVExTIHJlcGxheTogMC0xIHNlZW4sIDAgcmVwbGF5ZWQKK3NzbF9kdGxzX3JlcGxheToiMDAwMDAwMDAwMDAwLDAwMDAwMDAwMDAwMSI6IjAwMDAwMDAwMDAwMCI6LTEKKworU1NMIERUTFMgcmVwbGF5OiBuZXcKK3NzbF9kdGxzX3JlcGxheToiYWJjZDEyMzQwMDAwLGFiY2QxMjM0MDAwMSxhYmNkMTIzNDAwMDMiOiJhYmNkMTIzNDAwMDQiOjAKKworU1NMIERUTFMgcmVwbGF5OiB3YXkgbmV3Citzc2xfZHRsc19yZXBsYXk6ImFiY2QxMjM0MDAwMCxhYmNkMTIzNDAwMDEsYWJjZDEyMzQwMDAzIjoiYWJjZDEyMzUwMDAwIjowCisKK1NTTCBEVExTIHJlcGxheTogZGVsYXllZAorc3NsX2R0bHNfcmVwbGF5OiJhYmNkMTIzNDAwMDAsYWJjZDEyMzQwMDAxLGFiY2QxMjM0MDAwMyI6ImFiY2QxMjM0MDAwMiI6MAorCitTU0wgRFRMUyByZXBsYXk6IGxhc3Rlc3QgcmVwbGF5ZWQKK3NzbF9kdGxzX3JlcGxheToiYWJjZDEyMzQwMDAwLGFiY2QxMjM0MDAwMSxhYmNkMTIzNDAwMDMiOiJhYmNkMTIzNDAwMDMiOi0xCisKK1NTTCBEVExTIHJlcGxheTogb2xkZXIgcmVwbGF5ZWQKK3NzbF9kdGxzX3JlcGxheToiYWJjZDEyMzQwMDAwLGFiY2QxMjM0MDAwMSxhYmNkMTIzNDAwMDMiOiJhYmNkMTIzNDAwMDEiOi0xCisKK1NTTCBEVExTIHJlcGxheTogbW9zdCByZWNlbnQgaW4gd2luZG93LCByZXBsYXllZAorc3NsX2R0bHNfcmVwbGF5OiJhYmNkMTIzNDAwMDAsYWJjZDEyMzQwMDAyLGFiY2QxMjM0MDAwMyI6ImFiY2QxMjM0MDAwMiI6LTEKKworU1NMIERUTFMgcmVwbGF5OiBvbGRlc3QgaW4gd2luZG93LCByZXBsYXllZAorc3NsX2R0bHNfcmVwbGF5OiJhYmNkMTIzNDAwMDAsYWJjZDEyMzQwMDAxLGFiY2QxMjM0MDAzZiI6ImFiY2QxMjM0MDAwMCI6LTEKKworU1NMIERUTFMgcmVwbGF5OiBvbGRlc3QgaW4gd2luZG93LCBub3QgcmVwbGF5ZWQKK3NzbF9kdGxzX3JlcGxheToiYWJjZDEyMzQwMDAxLGFiY2QxMjM0MDAwMixhYmNkMTIzNDAwM2YiOiJhYmNkMTIzNDAwMDAiOjAKKworU1NMIERUTFMgcmVwbGF5OiBqdXN0IG91dCBvZiB0aGUgd2luZG93Citzc2xfZHRsc19yZXBsYXk6ImFiY2QxMjM0MDAwMSxhYmNkMTIzNDAwMDIsYWJjZDEyMzQwMDNmIjoiYWJjZDEyMzNmZmZmIjotMQorCitTU0wgRFRMUyByZXBsYXk6IHdheSBvdXQgb2YgdGhlIHdpbmRvdworc3NsX2R0bHNfcmVwbGF5OiJhYmNkMTIzNDAwMDEsYWJjZDEyMzQwMDAyLGFiY2QxMjM0MDAzZiI6ImFiY2QxMjMzMDAwMCI6LTEKKworU1NMIERUTFMgcmVwbGF5OiBiaWcganVtcCB0aGVuIHJlcGxheQorc3NsX2R0bHNfcmVwbGF5OiJhYmNkMTIzNDAwMDAsYWJjZDEyMzQwMTAwIjoiYWJjZDEyMzQwMTAwIjotMQorCitTU0wgRFRMUyByZXBsYXk6IGJpZyBqdW1wIHRoZW4gbmV3Citzc2xfZHRsc19yZXBsYXk6ImFiY2QxMjM0MDAwMCxhYmNkMTIzNDAxMDAiOiJhYmNkMTIzNDAxMDEiOjAKKworU1NMIERUTFMgcmVwbGF5OiBiaWcganVtcCB0aGVuIGp1c3QgZGVsYXllZAorc3NsX2R0bHNfcmVwbGF5OiJhYmNkMTIzNDAwMDAsYWJjZDEyMzQwMTAwIjoiYWJjZDEyMzQwMGZmIjowCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc3NsLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NzbC5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDM0NDhjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NzbC5mdW5jdGlvbgpAQCAtMCwwICsxLDQyIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlIDxtYmVkdGxzL3NzbC5oPgorI2luY2x1ZGUgPG1iZWR0bHMvc3NsX2ludGVybmFsLmg+CisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX1NTTF9UTFNfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZICovCit2b2lkIHNzbF9kdGxzX3JlcGxheSggY2hhciAqcHJldnMsIGNoYXIgKm5ldywgaW50IHJldCApCit7CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgY2hhciAqZW5kX3ByZXZzID0gcHJldnMgKyBzdHJsZW4oIHByZXZzICkgKyAxOworCisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyggJmNvbmYsCisgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0lTX0NMSUVOVCwKKyAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNLAorICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9QUkVTRVRfREVGQVVMVCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zc2xfc2V0dXAoICZzc2wsICZjb25mICkgPT0gMCApOworCisgICAgLyogUmVhZCBwcmV2aW91cyByZWNvcmQgbnVtYmVycyAqLworICAgIGZvciggOyBlbmRfcHJldnMgLSBwcmV2cyA+PSAxMzsgcHJldnMgKz0gMTMgKQorICAgIHsKKyAgICAgICAgcHJldnNbMTJdID0gJ1wwJzsKKyAgICAgICAgdW5oZXhpZnkoIHNzbC5pbl9jdHIgKyAyLCBwcmV2cyApOworICAgICAgICBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV91cGRhdGUoICZzc2wgKTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBuZXcgbnVtYmVyICovCisgICAgdW5oZXhpZnkoIHNzbC5pbl9jdHIgKyAyLCBuZXcgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zc2xfZHRsc19yZXBsYXlfY2hlY2soICZzc2wgKSA9PSByZXQgKTsKKworICAgIG1iZWR0bHNfc3NsX2ZyZWUoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggJmNvbmYgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfdGltaW5nLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfdGltaW5nLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhNzlhNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV90aW1pbmcuZGF0YQpAQCAtMCwwICsxLDIgQEAKK1RpbWluZyBzZWxmdGVzdAordGltaW5nX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3RpbWluZy5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV90aW1pbmcuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4MmY4NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV90aW1pbmcuZnVuY3Rpb24KQEAgLTAsMCArMSwxNSBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy90aW1pbmcuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfVElNSU5HX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgdGltaW5nX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190aW1pbmdfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV92ZXJzaW9uLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfdmVyc2lvbi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTYwOGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfdmVyc2lvbi5kYXRhCkBAIC0wLDAgKzEsMTUgQEAKK0NoZWNrIGNvbXBpbGV0aW1lIGxpYnJhcnkgdmVyc2lvbgorY2hlY2tfY29tcGlsZXRpbWVfdmVyc2lvbjoiMi40LjEiCisKK0NoZWNrIHJ1bnRpbWUgbGlicmFyeSB2ZXJzaW9uCitjaGVja19ydW50aW1lX3ZlcnNpb246IjIuNC4xIgorCitDaGVjayBmb3IgTUJFRFRMU19WRVJTSU9OX0MKK2NoZWNrX2ZlYXR1cmU6Ik1CRURUTFNfVkVSU0lPTl9DIjowCisKK0NoZWNrIGZvciBNQkVEVExTX0FFU19DIHdoZW4gYWxyZWFkeSBwcmVzZW50CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2NoZWNrX2ZlYXR1cmU6Ik1CRURUTFNfQUVTX0MiOjAKKworQ2hlY2sgZm9yIHVua25vd24gZGVmaW5lCitjaGVja19mZWF0dXJlOiJNQkVEVExTX1VOS05PV04iOi0xCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfdmVyc2lvbi5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV92ZXJzaW9uLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MTQ0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfdmVyc2lvbi5mdW5jdGlvbgpAQCAtMCwwICsxLDczIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3ZlcnNpb24uaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfVkVSU0lPTl9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBjaGVja19jb21waWxldGltZV92ZXJzaW9uKCBjaGFyICp2ZXJzaW9uX3N0ciApCit7CisgICAgY2hhciBidWlsZF9zdHJbMTAwXTsKKyAgICBjaGFyIGJ1aWxkX3N0cl9mdWxsWzEwMF07CisgICAgdW5zaWduZWQgaW50IGJ1aWxkX2ludDsKKworICAgIG1lbXNldCggYnVpbGRfc3RyLCAwLCAxMDAgKTsKKyAgICBtZW1zZXQoIGJ1aWxkX3N0cl9mdWxsLCAwLCAxMDAgKTsKKworICAgIG1iZWR0bHNfc25wcmludGYoIGJ1aWxkX3N0ciwgMTAwLCAiJWQuJWQuJWQiLCBNQkVEVExTX1ZFUlNJT05fTUFKT1IsCisgICAgICAgIE1CRURUTFNfVkVSU0lPTl9NSU5PUiwgTUJFRFRMU19WRVJTSU9OX1BBVENIICk7CisKKyAgICBtYmVkdGxzX3NucHJpbnRmKCBidWlsZF9zdHJfZnVsbCwgMTAwLCAibWJlZCBUTFMgJWQuJWQuJWQiLCBNQkVEVExTX1ZFUlNJT05fTUFKT1IsCisgICAgICAgIE1CRURUTFNfVkVSU0lPTl9NSU5PUiwgTUJFRFRMU19WRVJTSU9OX1BBVENIICk7CisKKyAgICBidWlsZF9pbnQgPSBNQkVEVExTX1ZFUlNJT05fTUFKT1IgPDwgMjQgfAorICAgICAgICAgICAgTUJFRFRMU19WRVJTSU9OX01JTk9SIDw8IDE2IHwKKyAgICAgICAgICAgIE1CRURUTFNfVkVSU0lPTl9QQVRDSCA8PCA4OworCisgICAgVEVTVF9BU1NFUlQoIGJ1aWxkX2ludCA9PSBNQkVEVExTX1ZFUlNJT05fTlVNQkVSICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggYnVpbGRfc3RyLCBNQkVEVExTX1ZFUlNJT05fU1RSSU5HICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIGJ1aWxkX3N0cl9mdWxsLCBNQkVEVExTX1ZFUlNJT05fU1RSSU5HX0ZVTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggdmVyc2lvbl9zdHIsIE1CRURUTFNfVkVSU0lPTl9TVFJJTkcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGNoZWNrX3J1bnRpbWVfdmVyc2lvbiggY2hhciAqdmVyc2lvbl9zdHIgKQoreworICAgIGNoYXIgYnVpbGRfc3RyWzEwMF07CisgICAgY2hhciBnZXRfc3RyWzEwMF07CisgICAgY2hhciBidWlsZF9zdHJfZnVsbFsxMDBdOworICAgIGNoYXIgZ2V0X3N0cl9mdWxsWzEwMF07CisgICAgdW5zaWduZWQgaW50IGdldF9pbnQ7CisKKyAgICBtZW1zZXQoIGJ1aWxkX3N0ciwgMCwgMTAwICk7CisgICAgbWVtc2V0KCBnZXRfc3RyLCAwLCAxMDAgKTsKKyAgICBtZW1zZXQoIGJ1aWxkX3N0cl9mdWxsLCAwLCAxMDAgKTsKKyAgICBtZW1zZXQoIGdldF9zdHJfZnVsbCwgMCwgMTAwICk7CisKKyAgICBnZXRfaW50ID0gbWJlZHRsc192ZXJzaW9uX2dldF9udW1iZXIoKTsKKyAgICBtYmVkdGxzX3ZlcnNpb25fZ2V0X3N0cmluZyggZ2V0X3N0ciApOworICAgIG1iZWR0bHNfdmVyc2lvbl9nZXRfc3RyaW5nX2Z1bGwoIGdldF9zdHJfZnVsbCApOworCisgICAgbWJlZHRsc19zbnByaW50ZiggYnVpbGRfc3RyLCAxMDAsICIlZC4lZC4lZCIsCisgICAgICAgIChnZXRfaW50ID4+IDI0KSAmIDB4RkYsCisgICAgICAgIChnZXRfaW50ID4+IDE2KSAmIDB4RkYsCisgICAgICAgIChnZXRfaW50ID4+IDgpICYgMHhGRiApOworICAgIG1iZWR0bHNfc25wcmludGYoIGJ1aWxkX3N0cl9mdWxsLCAxMDAsICJtYmVkIFRMUyAlcyIsIHZlcnNpb25fc3RyICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCBidWlsZF9zdHIsIHZlcnNpb25fc3RyICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIGJ1aWxkX3N0cl9mdWxsLCBnZXRfc3RyX2Z1bGwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggdmVyc2lvbl9zdHIsIGdldF9zdHIgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGNoZWNrX2ZlYXR1cmUoIGNoYXIgKmZlYXR1cmUsIGludCByZXN1bHQgKQoreworICAgIGludCBjaGVjayA9IG1iZWR0bHNfdmVyc2lvbl9jaGVja19mZWF0dXJlKCBmZWF0dXJlICk7CisgICAgVEVTVF9BU1NFUlQoIGNoZWNrID09IHJlc3VsdCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5cGFyc2UuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5cGFyc2UuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODI5ODIzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDlwYXJzZS5kYXRhCkBAIC0wLDAgKzEsMTU2NCBAQAorWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiAjMQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMDFcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFNlcnZlciAxXG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDZcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjEtMDItMTIgMTRcOjQ0XDowNlxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uICMyCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyMi5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwMlxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDZcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjEtMDItMTIgMTRcOjQ0XDowNlxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uICMzCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwMFxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjAwXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIxLTAyLTEyIDE0XDo0NFw6MDBcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQTFcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDIwNDggYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9dHJ1ZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIE1EMiBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL2NlcnRfbWQyLmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDA5XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBDZXJ0IE1EMlxuaXNzdWVkICBvbiAgICAgICAgXDogMjAwOS0wNy0xMiAxMFw6NTZcOjU5XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDExLTA3LTEyIDEwXDo1Nlw6NTlcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIE1EMlxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIE1ENCBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQ0X0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL2NlcnRfbWQ0LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDA1XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBDZXJ0IE1ENFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIxLTAyLTEyIDE0XDo0NFw6MDdcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIE1ENFxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIE1ENSBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQ1X0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL2NlcnRfbWQ1LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDA2XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBDZXJ0IE1ENVxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIxLTAyLTEyIDE0XDo0NFw6MDdcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIE1ENVxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIFNIQTEgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvY2VydF9zaGExLmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDA3XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBDZXJ0IFNIQTFcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMS0wMi0xMiAxNFw6NDRcOjA3XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEExXG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gU0hBMjI0IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvY2VydF9zaGEyMjQuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMDhcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgU0hBMjI0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjEtMDItMTIgMTRcOjQ0XDowN1xuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBLTIyNFxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIFNIQTI1NiBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL2NlcnRfc2hhMjU2LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDA5XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBDZXJ0IFNIQTI1NlxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIxLTAyLTEyIDE0XDo0NFw6MDdcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQS0yNTZcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDIwNDggYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBTSEEzODQgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTUxMl9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9jZXJ0X3NoYTM4NC5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwQVxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgQ2VydCBTSEEzODRcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMS0wMi0xMiAxNFw6NDRcOjA3XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEEtMzg0XG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gU0hBNTEyIERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEE1MTJfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvY2VydF9zaGE1MTIuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMEJcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgU0hBNTEyXG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjEtMDItMTIgMTRcOjQ0XDowN1xuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBLTUxMlxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIFJTQS1QU1MsIFNIQTEgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTFfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyOS5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAxNlxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDE0LTAxLTIwIDEzXDozOFw6MTZcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjQtMDEtMTggMTNcOjM4XDoxNlxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBU1NBLVBTUyAoU0hBMSwgTUdGMS1TSEExLCAweEVBKVxuUlNBIGtleSBzaXplICAgICAgXDogMTAyNCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIFJTQS1QU1MsIFNIQTIyNCBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjktc2hhMjI0LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDE3XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTQtMDEtMjAgMTNcOjU3XDozNlxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyNC0wMS0xOCAxM1w6NTdcOjM2XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0FTU0EtUFNTIChTSEEyMjQsIE1HRjEtU0hBMjI0LCAweEUyKVxuUlNBIGtleSBzaXplICAgICAgXDogMTAyNCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIFJTQS1QU1MsIFNIQTI1NiBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjktc2hhMjU2LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDE4XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTQtMDEtMjAgMTNcOjU3XDo0NVxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyNC0wMS0xOCAxM1w6NTdcOjQ1XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0FTU0EtUFNTIChTSEEyNTYsIE1HRjEtU0hBMjU2LCAweERFKVxuUlNBIGtleSBzaXplICAgICAgXDogMTAyNCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIFJTQS1QU1MsIFNIQTM4NCBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBNTEyX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjktc2hhMzg0LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDE5XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTQtMDEtMjAgMTNcOjU3XDo1OFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyNC0wMS0xOCAxM1w6NTdcOjU4XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0FTU0EtUFNTIChTSEEzODQsIE1HRjEtU0hBMzg0LCAweENFKVxuUlNBIGtleSBzaXplICAgICAgXDogMTAyNCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIFJTQS1QU1MsIFNIQTUxMiBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBNTEyX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjktc2hhNTEyLmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDFBXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTQtMDEtMjAgMTNcOjU4XDoxMlxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyNC0wMS0xOCAxM1w6NThcOjEyXG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0FTU0EtUFNTIChTSEE1MTIsIE1HRjEtU0hBNTEyLCAweEJFKVxuUlNBIGtleSBzaXplICAgICAgXDogMTAyNCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIEVDLCBTSEExIERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMS5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAxMlxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEzLTA5LTI0IDE2XDoyMVw6MjdcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjMtMDktMjIgMTZcOjIxXDoyN1xuc2lnbmVkIHVzaW5nICAgICAgXDogRUNEU0Egd2l0aCBTSEExXG5FQyBrZXkgc2l6ZSAgICAgICBcOiAyNTYgYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBFQywgU0hBMjI0IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyNS1zaGEyMjQuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMTNcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyc3NsIFRlc3QgRUMgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMy0wOS0yNCAxNlw6MjFcOjI3XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIzLTA5LTIyIDE2XDoyMVw6MjdcbnNpZ25lZCB1c2luZyAgICAgIFw6IEVDRFNBIHdpdGggU0hBMjI0XG5FQyBrZXkgc2l6ZSAgICAgICBcOiAyNTYgYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBFQywgU0hBMjU2IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwOVxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEzLTA5LTI0IDE1XDo1Mlw6MDRcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjMtMDktMjIgMTVcOjUyXDowNFxuc2lnbmVkIHVzaW5nICAgICAgXDogRUNEU0Egd2l0aCBTSEEyNTZcbkVDIGtleSBzaXplICAgICAgIFw6IDI1NiBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIEVDLCBTSEEzODQgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTM4NC5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAxNFxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEzLTA5LTI0IDE2XDoyMVw6MjdcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjMtMDktMjIgMTZcOjIxXDoyN1xuc2lnbmVkIHVzaW5nICAgICAgXDogRUNEU0Egd2l0aCBTSEEzODRcbkVDIGtleSBzaXplICAgICAgIFw6IDI1NiBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIEVDLCBTSEE1MTIgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTUxMi5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAxNVxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEzLTA5LTI0IDE2XDoyMVw6MjdcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjMtMDktMjIgMTZcOjIxXDoyN1xuc2lnbmVkIHVzaW5nICAgICAgXDogRUNEU0Egd2l0aCBTSEE1MTJcbkVDIGtleSBzaXplICAgICAgIFw6IDI1NiBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uLCBOUyBDZXJ0IFR5cGUKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXIxLmNlcnRfdHlwZS5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwMVxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowNlxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMS0wMi0xMiAxNFw6NDRcOjA2XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEExXG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG5jZXJ0LiB0eXBlICAgICAgICBcOiBTU0wgU2VydmVyXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24sIEtleSBVc2FnZQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5X3VzYWdlLmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDAxXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBTZXJ2ZXIgMVxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA2XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIxLTAyLTEyIDE0XDo0NFw6MDZcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQTFcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDIwNDggYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbmtleSB1c2FnZSAgICAgICAgIFw6IERpZ2l0YWwgU2lnbmF0dXJlLCBOb24gUmVwdWRpYXRpb24sIEtleSBFbmNpcGhlcm1lbnRcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiwgS2V5IFVzYWdlIHdpdGggZGVjaXBoZXJPbmx5CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMva2V5VXNhZ2UuZGVjaXBoZXJPbmx5LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDlCXDoxM1w6Q0VcOjRDXDpBNVw6NkZcOkRFXDo1MlxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1HQiwgTD1DYW1icmlkZ2UsIE89RGVmYXVsdCBDb21wYW55IEx0ZFxuc3ViamVjdCBuYW1lICAgICAgXDogQz1HQiwgTD1DYW1icmlkZ2UsIE89RGVmYXVsdCBDb21wYW55IEx0ZFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxNS0wNS0xMiAxMFw6MzZcOjU1XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDE4LTA1LTExIDEwXDozNlw6NTVcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQTFcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEwMjQgYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbmtleSB1c2FnZSAgICAgICAgIFw6IERpZ2l0YWwgU2lnbmF0dXJlLCBOb24gUmVwdWRpYXRpb24sIEtleSBFbmNpcGhlcm1lbnQsIERlY2lwaGVyIE9ubHlcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiwgU3ViamVjdCBBbHQgTmFtZQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV9tdWx0aS5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAxMVxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049d3d3LmV4YW1wbGUuY29tXG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEyLTA1LTEwIDEzXDoyM1w6NDFcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjItMDUtMTEgMTNcOjIzXDo0MVxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuc3ViamVjdCBhbHQgbmFtZSAgXDogZXhhbXBsZS5jb20sIGV4YW1wbGUubmV0LCAqLmV4YW1wbGUub3JnXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24sIFN1YmplY3QgQWx0IE5hbWUgKyBLZXkgVXNhZ2UKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGlfbm9jbi5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiBGN1w6QzZcOjdGXDpGOFw6RTlcOkE5XDo2M1w6Rjlcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkxcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9Tkxcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTQtMDEtMjIgMTBcOjA0XDozM1xuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyNC0wMS0yMiAxMFw6MDRcOjMzXG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEExXG5SU0Ega2V5IHNpemUgICAgICBcOiAxMDI0IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG5zdWJqZWN0IGFsdCBuYW1lICBcOiB3d3cuc2hvdG9rYW4tYnJhdW5zY2h3ZWlnLmRlLCB3d3cubWFzc2ltby1hYmF0ZS5ldVxua2V5IHVzYWdlICAgICAgICAgXDogRGlnaXRhbCBTaWduYXR1cmUsIE5vbiBSZXB1ZGlhdGlvbiwgS2V5IEVuY2lwaGVybWVudFxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uLCBLZXkgVXNhZ2UgKyBFeHRlbmRlZCBLZXkgVXNhZ2UKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjEuZXh0X2t1LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDIxXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBTZXJ2ZXIgMVxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxNC0wNC0wMSAxNFw6NDRcOjQzXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDI0LTAzLTI5IDE0XDo0NFw6NDNcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQS0yNTZcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDIwNDggYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbmtleSB1c2FnZSAgICAgICAgIFw6IERpZ2l0YWwgU2lnbmF0dXJlLCBOb24gUmVwdWRpYXRpb24sIEtleSBFbmNpcGhlcm1lbnRcbmV4dCBrZXkgdXNhZ2UgICAgIFw6IFRMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gUlNBIHNpZ25lZCBieSBFQworZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDRFNBX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjQuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMDhcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyc3NsIFRlc3QgRUMgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMy0wOS0yNCAxNVw6NTJcOjA0XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIzLTA5LTIyIDE1XDo1Mlw6MDRcbnNpZ25lZCB1c2luZyAgICAgIFw6IEVDRFNBIHdpdGggU0hBMjU2XG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gRUMgc2lnbmVkIGJ5IFJTQQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjMuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMERcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMy0wOC0wOSAwOVw6MTdcOjAzXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIzLTA4LTA3IDA5XDoxN1w6MDNcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQTFcbkVDIGtleSBzaXplICAgICAgIFw6IDE5MiBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIEJpdHN0cmluZyBpbiBzdWJqZWN0IG5hbWUKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9iaXRzdHJpbmctaW4tZG4ucGVtIjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMDJcbmlzc3VlciBuYW1lICAgICAgIFw6IENOPVRlc3QgQ0EgMDEsIFNUPUVjbml2b3JwLCBDPVhYLCBlbWFpbEFkZHJlc3M9dGNhQGV4YW1wbGUuY29tLCBPPVRlc3QgQ0EgQXV0aG9yaXR5XG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPVhYLCBPPXRjYSwgU1Q9RWNuaXZvcnAsIE9VPVRDQSwgQ049Q2xpZW50LCBlbWFpbEFkZHJlc3M9Y2xpZW50QGV4YW1wbGUuY29tLCBzZXJpYWxOdW1iZXI9NzEwMTAxMjI1NSwgdW5pcXVlSWRlbnRpZmllcj0/NzEwMTAxMjI1NVxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxNS0wMy0xMSAxMlw6MDZcOjUxXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDI1LTAzLTA4IDEyXDowNlw6NTFcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQTFcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDIwNDggYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbnN1YmplY3QgYWx0IG5hbWUgIFw6IFxuZXh0IGtleSB1c2FnZSAgICAgXDogVExTIFdlYiBDbGllbnQgQXV0aGVudGljYXRpb25cbiIKKworWDUwOSBjZXJ0aWZpY2F0ZSB2MSB3aXRoIGV4dGVuc2lvbgorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19YNTA5X0FMTE9XX0VYVEVOU0lPTlNfTk9OX1YzOk1CRURUTFNfU0hBMV9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9jZXJ0X3YxX3dpdGhfZXh0LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDFcbnNlcmlhbCBudW1iZXIgICAgIFw6IEJEXDpFRFw6NDRcOkM3XDpEMlw6M0VcOkMyXDpBNFxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1YWCwgU1Q9WFgsIEw9WFgsIE89WFgsIE9VPVhYLCBlbWFpbEFkZHJlc3M9YWRtaW5AaWRlbnRpdHktY2hlY2sub3JnLCBDTj1pZGVudGl0eS1jaGVjay5vcmdcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9WFgsIFNUPVhYLCBMPVhYLCBPPVhYLCBPVT1YWCwgZW1haWxBZGRyZXNzPWFkbWluQGlkZW50aXR5LWNoZWNrLm9yZywgQ049aWRlbnRpdHktY2hlY2sub3JnXG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEzLTA3LTA0IDE2XDoxN1w6MDJcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMTQtMDctMDQgMTZcOjE3XDowMlxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5zdWJqZWN0IGFsdCBuYW1lICBcOiBpZGVudGl0eS1jaGVjay5vcmcsIHd3dy5pZGVudGl0eS1jaGVjay5vcmdcbiIKKworWDUwOSBDUkwgaW5mb3JtYXRpb24gIzEKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X2NybF9pbmZvOiJkYXRhX2ZpbGVzL2NybF9leHBpcmVkLnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMVxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTEtMDItMjAgMTBcOjI0XDoxOVxubmV4dCB1cGRhdGUgICBcOiAyMDExLTAyLTIwIDExXDoyNFw6MTlcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwMSByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNlcmlhbCBudW1iZXJcOiAwMyByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggU0hBMVxuIgorCitYNTA5IENSTCBJbmZvcm1hdGlvbiBNRDIgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19NRDJfQworbWJlZHRsc194NTA5X2NybF9pbmZvOiJkYXRhX2ZpbGVzL2NybF9tZDIucGVtIjoiQ1JMIHZlcnNpb24gICBcOiAxXG5pc3N1ZXIgbmFtZSAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnRoaXMgdXBkYXRlICAgXDogMjAwOS0wNy0xOSAxOVw6NTZcOjM3XG5uZXh0IHVwZGF0ZSAgIFw6IDIwMDktMDktMTcgMTlcOjU2XDozN1xuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IDAxIHJldm9jYXRpb24gZGF0ZVw6IDIwMDktMDItMDkgMjFcOjEyXDozNlxuc2VyaWFsIG51bWJlclw6IDAzIHJldm9jYXRpb24gZGF0ZVw6IDIwMDktMDItMDkgMjFcOjEyXDozNlxuc2lnbmVkIHVzaW5nICBcOiBSU0Egd2l0aCBNRDJcbiIKKworWDUwOSBDUkwgSW5mb3JtYXRpb24gTUQ0IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfTUQ0X0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmxfbWQ0LnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMVxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xubmV4dCB1cGRhdGUgICBcOiAyMDExLTA0LTEzIDE0XDo0NFw6MDdcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwMSByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNlcmlhbCBudW1iZXJcOiAwMyByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggTUQ0XG4iCisKK1g1MDkgQ1JMIEluZm9ybWF0aW9uIE1ENSBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX01ENV9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsX21kNS5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDFcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbm5leHQgdXBkYXRlICAgXDogMjAxMS0wNC0xMyAxNFw6NDRcOjA3XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMDEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5zZXJpYWwgbnVtYmVyXDogMDMgcmV2b2NhdGlvbiBkYXRlXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIE1ENVxuIgorCitYNTA5IENSTCBJbmZvcm1hdGlvbiBTSEExIERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsX3NoYTEucGVtIjoiQ1JMIHZlcnNpb24gICBcOiAxXG5pc3N1ZXIgbmFtZSAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnRoaXMgdXBkYXRlICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5uZXh0IHVwZGF0ZSAgIFw6IDIwMTEtMDQtMTMgMTRcOjQ0XDowN1xuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IDAxIHJldm9jYXRpb24gZGF0ZVw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuc2VyaWFsIG51bWJlclw6IDAzIHJldm9jYXRpb24gZGF0ZVw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuc2lnbmVkIHVzaW5nICBcOiBSU0Egd2l0aCBTSEExXG4iCisKK1g1MDkgQ1JMIEluZm9ybWF0aW9uIFNIQTIyNCBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsX3NoYTIyNC5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDFcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbm5leHQgdXBkYXRlICAgXDogMjAxMS0wNC0xMyAxNFw6NDRcOjA3XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMDEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5zZXJpYWwgbnVtYmVyXDogMDMgcmV2b2NhdGlvbiBkYXRlXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIFNIQS0yMjRcbiIKKworWDUwOSBDUkwgSW5mb3JtYXRpb24gU0hBMjU2IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmxfc2hhMjU2LnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMVxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xubmV4dCB1cGRhdGUgICBcOiAyMDExLTA0LTEzIDE0XDo0NFw6MDdcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwMSByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNlcmlhbCBudW1iZXJcOiAwMyByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggU0hBLTI1NlxuIgorCitYNTA5IENSTCBJbmZvcm1hdGlvbiBTSEEzODQgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc194NTA5X2NybF9pbmZvOiJkYXRhX2ZpbGVzL2NybF9zaGEzODQucGVtIjoiQ1JMIHZlcnNpb24gICBcOiAxXG5pc3N1ZXIgbmFtZSAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnRoaXMgdXBkYXRlICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5uZXh0IHVwZGF0ZSAgIFw6IDIwMTEtMDQtMTMgMTRcOjQ0XDowN1xuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IDAxIHJldm9jYXRpb24gZGF0ZVw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuc2VyaWFsIG51bWJlclw6IDAzIHJldm9jYXRpb24gZGF0ZVw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuc2lnbmVkIHVzaW5nICBcOiBSU0Egd2l0aCBTSEEtMzg0XG4iCisKK1g1MDkgQ1JMIEluZm9ybWF0aW9uIFNIQTUxMiBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsX3NoYTUxMi5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDFcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbm5leHQgdXBkYXRlICAgXDogMjAxMS0wNC0xMyAxNFw6NDRcOjA3XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMDEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5zZXJpYWwgbnVtYmVyXDogMDMgcmV2b2NhdGlvbiBkYXRlXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIFNIQS01MTJcbiIKKworWDUwOSBDUkwgaW5mb3JtYXRpb24gUlNBLVBTUywgU0hBMSBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMS5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDJcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDE0LTAxLTIwIDEzXDo0Nlw6MzVcbm5leHQgdXBkYXRlICAgXDogMjAyNC0wMS0xOCAxM1w6NDZcOjM1XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMEEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMy0wOS0yNCAxNlw6MjhcOjM4XG5zZXJpYWwgbnVtYmVyXDogMTYgcmV2b2NhdGlvbiBkYXRlXDogMjAxNC0wMS0yMCAxM1w6NDNcOjA1XG5zaWduZWQgdXNpbmcgIFw6IFJTQVNTQS1QU1MgKFNIQTEsIE1HRjEtU0hBMSwgMHhFQSlcbiIKKworWDUwOSBDUkwgaW5mb3JtYXRpb24gUlNBLVBTUywgU0hBMjI0IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc194NTA5X2NybF9pbmZvOiJkYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTIyNC5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDJcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDE0LTAxLTIwIDEzXDo1Nlw6MDZcbm5leHQgdXBkYXRlICAgXDogMjAyNC0wMS0xOCAxM1w6NTZcOjA2XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMEEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMy0wOS0yNCAxNlw6MjhcOjM4XG5zZXJpYWwgbnVtYmVyXDogMTYgcmV2b2NhdGlvbiBkYXRlXDogMjAxNC0wMS0yMCAxM1w6NDNcOjA1XG5zaWduZWQgdXNpbmcgIFw6IFJTQVNTQS1QU1MgKFNIQTIyNCwgTUdGMS1TSEEyMjQsIDB4RTIpXG4iCisKK1g1MDkgQ1JMIGluZm9ybWF0aW9uIFJTQS1QU1MsIFNIQTI1NiBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGEyNTYucGVtIjoiQ1JMIHZlcnNpb24gICBcOiAyXG5pc3N1ZXIgbmFtZSAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnRoaXMgdXBkYXRlICAgXDogMjAxNC0wMS0yMCAxM1w6NTZcOjE2XG5uZXh0IHVwZGF0ZSAgIFw6IDIwMjQtMDEtMTggMTNcOjU2XDoxNlxuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IDBBIHJldm9jYXRpb24gZGF0ZVw6IDIwMTMtMDktMjQgMTZcOjI4XDozOFxuc2VyaWFsIG51bWJlclw6IDE2IHJldm9jYXRpb24gZGF0ZVw6IDIwMTQtMDEtMjAgMTNcOjQzXDowNVxuc2lnbmVkIHVzaW5nICBcOiBSU0FTU0EtUFNTIChTSEEyNTYsIE1HRjEtU0hBMjU2LCAweERFKVxuIgorCitYNTA5IENSTCBpbmZvcm1hdGlvbiBSU0EtUFNTLCBTSEEzODQgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMzg0LnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMlxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTQtMDEtMjAgMTNcOjU2XDoyOFxubmV4dCB1cGRhdGUgICBcOiAyMDI0LTAxLTE4IDEzXDo1Nlw6MjhcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwQSByZXZvY2F0aW9uIGRhdGVcOiAyMDEzLTA5LTI0IDE2XDoyOFw6MzhcbnNlcmlhbCBudW1iZXJcOiAxNiByZXZvY2F0aW9uIGRhdGVcOiAyMDE0LTAxLTIwIDEzXDo0M1w6MDVcbnNpZ25lZCB1c2luZyAgXDogUlNBU1NBLVBTUyAoU0hBMzg0LCBNR0YxLVNIQTM4NCwgMHhDRSlcbiIKKworWDUwOSBDUkwgaW5mb3JtYXRpb24gUlNBLVBTUywgU0hBNTEyIERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc194NTA5X2NybF9pbmZvOiJkYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTUxMi5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDJcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDE0LTAxLTIwIDEzXDo1Nlw6Mzhcbm5leHQgdXBkYXRlICAgXDogMjAyNC0wMS0xOCAxM1w6NTZcOjM4XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMEEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMy0wOS0yNCAxNlw6MjhcOjM4XG5zZXJpYWwgbnVtYmVyXDogMTYgcmV2b2NhdGlvbiBkYXRlXDogMjAxNC0wMS0yMCAxM1w6NDNcOjA1XG5zaWduZWQgdXNpbmcgIFw6IFJTQVNTQS1QU1MgKFNIQTUxMiwgTUdGMS1TSEE1MTIsIDB4QkUpXG4iCisKK1g1MDkgQ1JMIEluZm9ybWF0aW9uIEVDLCBTSEExIERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTEucGVtIjoiQ1JMIHZlcnNpb24gICBcOiAyXG5pc3N1ZXIgbmFtZSAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyc3NsIFRlc3QgRUMgQ0FcbnRoaXMgdXBkYXRlICAgXDogMjAxMy0wOS0yNCAxNlw6MzFcOjA4XG5uZXh0IHVwZGF0ZSAgIFw6IDIwMjMtMDktMjIgMTZcOjMxXDowOFxuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IDBBIHJldm9jYXRpb24gZGF0ZVw6IDIwMTMtMDktMjQgMTZcOjI4XDozOFxuc2lnbmVkIHVzaW5nICBcOiBFQ0RTQSB3aXRoIFNIQTFcbiIKKworWDUwOSBDUkwgSW5mb3JtYXRpb24gRUMsIFNIQTIyNCBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTIyNC5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDJcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDEzLTA5LTI0IDE2XDozMVw6MDhcbm5leHQgdXBkYXRlICAgXDogMjAyMy0wOS0yMiAxNlw6MzFcOjA4XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMEEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMy0wOS0yNCAxNlw6MjhcOjM4XG5zaWduZWQgdXNpbmcgIFw6IEVDRFNBIHdpdGggU0hBMjI0XG4iCisKK1g1MDkgQ1JMIEluZm9ybWF0aW9uIEVDLCBTSEEyNTYgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc194NTA5X2NybF9pbmZvOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiQ1JMIHZlcnNpb24gICBcOiAyXG5pc3N1ZXIgbmFtZSAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyc3NsIFRlc3QgRUMgQ0FcbnRoaXMgdXBkYXRlICAgXDogMjAxMy0wOS0yNCAxNlw6MzFcOjA4XG5uZXh0IHVwZGF0ZSAgIFw6IDIwMjMtMDktMjIgMTZcOjMxXDowOFxuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IDBBIHJldm9jYXRpb24gZGF0ZVw6IDIwMTMtMDktMjQgMTZcOjI4XDozOFxuc2lnbmVkIHVzaW5nICBcOiBFQ0RTQSB3aXRoIFNIQTI1NlxuIgorCitYNTA5IENSTCBJbmZvcm1hdGlvbiBFQywgU0hBMzg0IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMzg0LnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMlxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTMtMDktMjQgMTZcOjMxXDowOFxubmV4dCB1cGRhdGUgICBcOiAyMDIzLTA5LTIyIDE2XDozMVw6MDhcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwQSByZXZvY2F0aW9uIGRhdGVcOiAyMDEzLTA5LTI0IDE2XDoyOFw6MzhcbnNpZ25lZCB1c2luZyAgXDogRUNEU0Egd2l0aCBTSEEzODRcbiIKKworWDUwOSBDUkwgSW5mb3JtYXRpb24gRUMsIFNIQTUxMiBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTUxMi5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDJcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDEzLTA5LTI0IDE2XDozMVw6MDhcbm5leHQgdXBkYXRlICAgXDogMjAyMy0wOS0yMiAxNlw6MzFcOjA4XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMEEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMy0wOS0yNCAxNlw6MjhcOjM4XG5zaWduZWQgdXNpbmcgIFw6IEVDRFNBIHdpdGggU0hBNTEyXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIFJTQSB3aXRoIE1ENAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfTUQ0X0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5tZDQiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggTUQ0XG5SU0Ega2V5IHNpemUgIFw6IDIwNDggYml0c1xuIgorCitYNTA5IENTUiBJbmZvcm1hdGlvbiBSU0Egd2l0aCBNRDUKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX01ENV9DCittYmVkdGxzX3g1MDlfY3NyX2luZm86ImRhdGFfZmlsZXMvc2VydmVyMS5yZXEubWQ1IjoiQ1NSIHZlcnNpb24gICBcOiAxXG5zdWJqZWN0IG5hbWUgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFNlcnZlciAxXG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIE1ENVxuUlNBIGtleSBzaXplICBcOiAyMDQ4IGJpdHNcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gUlNBIHdpdGggU0hBMQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfY3NyX2luZm86ImRhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhMSI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBTZXJ2ZXIgMVxuc2lnbmVkIHVzaW5nICBcOiBSU0Egd2l0aCBTSEExXG5SU0Ega2V5IHNpemUgIFw6IDIwNDggYml0c1xuIgorCitYNTA5IENTUiBJbmZvcm1hdGlvbiBSU0Egd2l0aCBTSEEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3g1MDlfY3NyX2luZm86ImRhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhMjI0IjoiQ1NSIHZlcnNpb24gICBcOiAxXG5zdWJqZWN0IG5hbWUgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFNlcnZlciAxXG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIFNIQS0yMjRcblJTQSBrZXkgc2l6ZSAgXDogMjA0OCBiaXRzXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIFJTQSB3aXRoIFNIQTI1NgorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGEyNTYiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggU0hBLTI1NlxuUlNBIGtleSBzaXplICBcOiAyMDQ4IGJpdHNcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gUlNBIHdpdGggU0hBMzg0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc194NTA5X2Nzcl9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTM4NCI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBTZXJ2ZXIgMVxuc2lnbmVkIHVzaW5nICBcOiBSU0Egd2l0aCBTSEEtMzg0XG5SU0Ega2V5IHNpemUgIFw6IDIwNDggYml0c1xuIgorCitYNTA5IENTUiBJbmZvcm1hdGlvbiBSU0Egd2l0aCBTSEE1MTIKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3g1MDlfY3NyX2luZm86ImRhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhNTEyIjoiQ1NSIHZlcnNpb24gICBcOiAxXG5zdWJqZWN0IG5hbWUgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFNlcnZlciAxXG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIFNIQS01MTJcblJTQSBrZXkgc2l6ZSAgXDogMjA0OCBiaXRzXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIEVDIHdpdGggU0hBMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGExIjoiQ1NSIHZlcnNpb24gICBcOiAxXG5zdWJqZWN0IG5hbWUgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuc2lnbmVkIHVzaW5nICBcOiBFQ0RTQSB3aXRoIFNIQTFcbkVDIGtleSBzaXplICAgXDogMjU2IGJpdHNcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gRUMgd2l0aCBTSEEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGEyMjQiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5zaWduZWQgdXNpbmcgIFw6IEVDRFNBIHdpdGggU0hBMjI0XG5FQyBrZXkgc2l6ZSAgIFw6IDI1NiBiaXRzXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIEVDIHdpdGggU0hBMjU2CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3g1MDlfY3NyX2luZm86ImRhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhMjU2IjoiQ1NSIHZlcnNpb24gICBcOiAxXG5zdWJqZWN0IG5hbWUgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuc2lnbmVkIHVzaW5nICBcOiBFQ0RTQSB3aXRoIFNIQTI1NlxuRUMga2V5IHNpemUgICBcOiAyNTYgYml0c1xuIgorCitYNTA5IENTUiBJbmZvcm1hdGlvbiBFQyB3aXRoIFNIQTM4NAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc194NTA5X2Nzcl9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTM4NCI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3RcbnNpZ25lZCB1c2luZyAgXDogRUNEU0Egd2l0aCBTSEEzODRcbkVDIGtleSBzaXplICAgXDogMjU2IGJpdHNcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gRUMgd2l0aCBTSEE1MTIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGE1MTIiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5zaWduZWQgdXNpbmcgIFw6IEVDRFNBIHdpdGggU0hBNTEyXG5FQyBrZXkgc2l6ZSAgIFw6IDI1NiBiaXRzXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIFJTQS1QU1Mgd2l0aCBTSEExCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X2Nzcl9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTEiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5zaWduZWQgdXNpbmcgIFw6IFJTQVNTQS1QU1MgKFNIQTEsIE1HRjEtU0hBMSwgMHg2QSlcblJTQSBrZXkgc2l6ZSAgXDogMTAyNCBiaXRzXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIFJTQS1QU1Mgd2l0aCBTSEEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGEyMjQiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5zaWduZWQgdXNpbmcgIFw6IFJTQVNTQS1QU1MgKFNIQTIyNCwgTUdGMS1TSEEyMjQsIDB4NjIpXG5SU0Ega2V5IHNpemUgIFw6IDEwMjQgYml0c1xuIgorCitYNTA5IENTUiBJbmZvcm1hdGlvbiBSU0EtUFNTIHdpdGggU0hBMjU2CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3g1MDlfY3NyX2luZm86ImRhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhMjU2IjoiQ1NSIHZlcnNpb24gICBcOiAxXG5zdWJqZWN0IG5hbWUgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuc2lnbmVkIHVzaW5nICBcOiBSU0FTU0EtUFNTIChTSEEyNTYsIE1HRjEtU0hBMjU2LCAweDVFKVxuUlNBIGtleSBzaXplICBcOiAxMDI0IGJpdHNcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gUlNBLVBTUyB3aXRoIFNIQTM4NAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc194NTA5X2Nzcl9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTM4NCI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3RcbnNpZ25lZCB1c2luZyAgXDogUlNBU1NBLVBTUyAoU0hBMzg0LCBNR0YxLVNIQTM4NCwgMHg0RSlcblJTQSBrZXkgc2l6ZSAgXDogMTAyNCBiaXRzXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIFJTQS1QU1Mgd2l0aCBTSEE1MTIKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGE1MTIiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5zaWduZWQgdXNpbmcgIFw6IFJTQVNTQS1QU1MgKFNIQTUxMiwgTUdGMS1TSEE1MTIsIDB4M0UpXG5SU0Ega2V5IHNpemUgIFw6IDEwMjQgYml0c1xuIgorCitYNTA5IFZlcmlmeSBJbmZvcm1hdGlvbjogZW1wdHkKK3g1MDlfdmVyaWZ5X2luZm86MDoiIjoiIgorCitYNTA5IFZlcmlmeSBJbmZvcm1hdGlvbjogb25lIGlzc3VlCit4NTA5X3ZlcmlmeV9pbmZvOk1CRURUTFNfWDUwOV9CQURDRVJUX01JU1NJTkc6IiI6IkNlcnRpZmljYXRlIHdhcyBtaXNzaW5nXG4iCisKK1g1MDkgVmVyaWZ5IEluZm9ybWF0aW9uOiB0d28gaXNzdWVzCit4NTA5X3ZlcmlmeV9pbmZvOk1CRURUTFNfWDUwOV9CQURDRVJUX0VYUElSRUQgfCBNQkVEVExTX1g1MDlfQkFEQ1JMX0VYUElSRUQ6IiI6IlRoZSBjZXJ0aWZpY2F0ZSB2YWxpZGl0eSBoYXMgZXhwaXJlZFxuVGhlIENSTCBpcyBleHBpcmVkXG4iCisKK1g1MDkgVmVyaWZ5IEluZm9ybWF0aW9uOiB0d28gaXNzdWVzLCBvbmUgdW5rbm93bgoreDUwOV92ZXJpZnlfaW5mbzpNQkVEVExTX1g1MDlfQkFEQ0VSVF9PVEhFUiB8IDB4ODAwMDAwMDA6IiI6Ik90aGVyIHJlYXNvbiAoY2FuIGJlIHVzZWQgYnkgdmVyaWZ5IGNhbGxiYWNrKVxuVW5rbm93biByZWFzb24gKHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4pXG4iCisKK1g1MDkgVmVyaWZ5IEluZm9ybWF0aW9uOiBlbXB0eSwgd2l0aCBwcmVmaXgKK3g1MDlfdmVyaWZ5X2luZm86MDoiICAhICI6IiIKKworWDUwOSBWZXJpZnkgSW5mb3JtYXRpb246IG9uZSBpc3N1ZSwgd2l0aCBwcmVmaXgKK3g1MDlfdmVyaWZ5X2luZm86TUJFRFRMU19YNTA5X0JBRENFUlRfTUlTU0lORzoiICAhICI6IiAgISBDZXJ0aWZpY2F0ZSB3YXMgbWlzc2luZ1xuIgorCitYNTA5IFZlcmlmeSBJbmZvcm1hdGlvbjogdHdvIGlzc3Vlcywgd2l0aCBwcmVmaXgKK3g1MDlfdmVyaWZ5X2luZm86TUJFRFRMU19YNTA5X0JBRENFUlRfRVhQSVJFRCB8IE1CRURUTFNfWDUwOV9CQURDUkxfRVhQSVJFRDoiICAhICI6IiAgISBUaGUgY2VydGlmaWNhdGUgdmFsaWRpdHkgaGFzIGV4cGlyZWRcbiAgISBUaGUgQ1JMIGlzIGV4cGlyZWRcbiIKKworWDUwOSBHZXQgRGlzdGluZ3Vpc2hlZCBOYW1lICMxCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X2RuX2dldHM6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJzdWJqZWN0IjoiQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDEiCisKK1g1MDkgR2V0IERpc3Rpbmd1aXNoZWQgTmFtZSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV9kbl9nZXRzOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoiaXNzdWVyIjoiQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQSIKKworWDUwOSBHZXQgRGlzdGluZ3Vpc2hlZCBOYW1lICMzCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X2RuX2dldHM6ImRhdGFfZmlsZXMvc2VydmVyMi5jcnQiOiJzdWJqZWN0IjoiQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0IgorCitYNTA5IEdldCBEaXN0aW5ndWlzaGVkIE5hbWUgIzQKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfZG5fZ2V0czoiZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCI6Imlzc3VlciI6IkM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EiCisKK1g1MDkgVGltZSBFeHBpcmVkICMxCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0hBVkVfVElNRV9EQVRFOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0OiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoidmFsaWRfZnJvbSI6MQorCitYNTA5IFRpbWUgRXhwaXJlZCAjMgorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19IQVZFX1RJTUVfREFURTpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdDoiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6InZhbGlkX3RvIjowCisKK1g1MDkgVGltZSBFeHBpcmVkICMzCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0hBVkVfVElNRV9EQVRFOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0OiJkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IjoidmFsaWRfZnJvbSI6MQorCitYNTA5IFRpbWUgRXhwaXJlZCAjNAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19IQVZFX1RJTUVfREFURTpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdDoiZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCI6InZhbGlkX3RvIjowCisKK1g1MDkgVGltZSBFeHBpcmVkICM1CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0hBVkVfVElNRV9EQVRFOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0OiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoidmFsaWRfZnJvbSI6MQorCitYNTA5IFRpbWUgRXhwaXJlZCAjNgorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19IQVZFX1RJTUVfREFURTpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdDoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6InZhbGlkX3RvIjowCisKK1g1MDkgVGltZSBGdXR1cmUgIzEKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfSEFWRV9USU1FX0RBVEU6TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlOiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoidmFsaWRfZnJvbSI6MAorCitYNTA5IFRpbWUgRnV0dXJlICMyCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0hBVkVfVElNRV9EQVRFOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV90aW1lX2lzX2Z1dHVyZToiZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCI6InZhbGlkX3RvIjoxCisKK1g1MDkgVGltZSBGdXR1cmUgIzMKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfSEFWRV9USU1FX0RBVEU6TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlOiJkYXRhX2ZpbGVzL3NlcnZlcjUtZnV0dXJlLmNydCI6InZhbGlkX2Zyb20iOjEKKworWDUwOSBUaW1lIEZ1dHVyZSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19IQVZFX1RJTUVfREFURTpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmU6ImRhdGFfZmlsZXMvc2VydmVyNS1mdXR1cmUuY3J0IjoidmFsaWRfdG8iOjEKKworWDUwOSBUaW1lIEZ1dHVyZSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19IQVZFX1RJTUVfREFURTpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmU6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoidmFsaWRfZnJvbSI6MAorCitYNTA5IFRpbWUgRnV0dXJlICM2CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX0hBVkVfVElNRV9EQVRFOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV90aW1lX2lzX2Z1dHVyZToiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJ2YWxpZF90byI6MQorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMSAoUmV2b2tlZCBDZXJ0LCBFeHBpcmVkIENSTCwgbm8gQ04pCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmxfZXhwaXJlZC5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEIHwgTUJFRFRMU19YNTA5X0JBRENSTF9FWFBJUkVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMWEgKFJldm9rZWQgQ2VydCwgRnV0dXJlIENSTCwgbm8gQ04pCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwtZnV0dXJlLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQgfCBNQkVEVExTX1g1MDlfQkFEQ1JMX0ZVVFVSRToiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzIgKFJldm9rZWQgQ2VydCwgRXhwaXJlZCBDUkwpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmxfZXhwaXJlZC5wZW0iOiJQb2xhclNTTCBTZXJ2ZXIgMSI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRCB8IE1CRURUTFNfWDUwOV9CQURDUkxfRVhQSVJFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzJhIChSZXZva2VkIENlcnQsIEZ1dHVyZSBDUkwpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwtZnV0dXJlLnBlbSI6ImxvY2FsaG9zdCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRCB8IE1CRURUTFNfWDUwOV9CQURDUkxfRlVUVVJFOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMyAoUmV2b2tlZCBDZXJ0LCBGdXR1cmUgQ1JMLCBDTiBNaXNtYXRjaCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybF9leHBpcmVkLnBlbSI6IlBvbGFyU1NMIFdyb25nIENOIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEIHwgTUJFRFRMU19YNTA5X0JBRENSTF9FWFBJUkVEIHwgTUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0g6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMzYSAoUmV2b2tlZCBDZXJ0LCBFeHBpcmVkIENSTCwgQ04gTWlzbWF0Y2gpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwtZnV0dXJlLnBlbSI6Ildyb25nIENOIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEIHwgTUJFRFRMU19YNTA5X0JBRENSTF9GVVRVUkUgfCBNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzQgKFZhbGlkIENlcnQsIEV4cGlyZWQgQ1JMKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsX2V4cGlyZWQucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENSTF9FWFBJUkVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNGEgKFJldm9rZWQgQ2VydCwgRnV0dXJlIENSTCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1mdXR1cmUucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENSTF9GVVRVUkU6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM1IChSZXZva2VkIENlcnQpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzYgKFJldm9rZWQgQ2VydCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJQb2xhclNTTCBTZXJ2ZXIgMSI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzcgKFJldm9rZWQgQ2VydCwgQ04gTWlzbWF0Y2gpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiUG9sYXJTU0wgV3JvbmcgQ04iOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQgfCBNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzggKFZhbGlkIENlcnQpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMS5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM4YSAoRXhwaXJlZCBDZXJ0KQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS1leHBpcmVkLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMS5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9FWFBJUkVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjOGIgKEZ1dHVyZSBDZXJ0KQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS1mdXR1cmUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGExLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX0ZVVFVSRToiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzkgKE5vdCB0cnVzdGVkIENlcnQpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMi5jcnQiOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMxMCAoTm90IHRydXN0ZWQgQ2VydCwgRXhwaXJlZCBDUkwpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMi5jcnQiOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoiZGF0YV9maWxlcy9jcmxfZXhwaXJlZC5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzEyIChWYWxpZCBDZXJ0IE1ENCBEaWdlc3QpCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X21kNC5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX01EOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMTMgKFZhbGlkIENlcnQgTUQ1IERpZ2VzdCkKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfbWQ1LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9CQURfTUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMxNCAoVmFsaWQgQ2VydCBTSEExIERpZ2VzdCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X3NoYTEuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzE1IChWYWxpZCBDZXJ0IFNIQTIyNCBEaWdlc3QpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X3NoYTIyNC5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMTYgKFZhbGlkIENlcnQgU0hBMjU2IERpZ2VzdCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfc2hhMjU2LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMxNyAoVmFsaWQgQ2VydCBTSEEzODQgRGlnZXN0KQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvY2VydF9zaGEzODQuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzE4IChWYWxpZCBDZXJ0IFNIQTUxMiBEaWdlc3QpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X3NoYTUxMi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMTkgKFZhbGlkIENlcnQsIGRlbnlpbmcgY2FsbGJhY2spCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X3NoYTUxMi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfT1RIRVI6InZlcmlmeV9ub25lIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMTkgKE5vdCB0cnVzdGVkIENlcnQsIGFsbG93aW5nIGNhbGxiYWNrKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IjoiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6ImRhdGFfZmlsZXMvY3JsX2V4cGlyZWQucGVtIjoiTlVMTCI6MDowOiJ2ZXJpZnlfYWxsIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMjEgKGRvbWFpbiBtYXRjaGluZyB3aWxkY2FyZCBjZXJ0aWZpY2F0ZSwgY2FzZSBpbnNlbnNpdGl2ZSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfd2lsZGNhcmQuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Im1haWwuRXhBbVBsRS5jb20iOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzIyIChkb21haW4gbm90IG1hdGNoaW5nIHdpbGRjYXJkIGNlcnRpZmljYXRlKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV93aWxkY2FyZC5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoibWFpbC5leGFtcGxlLm5ldCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0g6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMyMyAoZG9tYWluIG5vdCBtYXRjaGluZyB3aWxkY2FyZCBjZXJ0aWZpY2F0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfd2lsZGNhcmQuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6ImV4YW1wbGUuY29tIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzI0IChkb21haW4gbWF0Y2hpbmcgQ04gb2YgbXVsdGkgY2VydGlmaWNhdGUpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvY2VydF9leGFtcGxlX211bHRpLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJ3d3cuZXhhbXBsZS5jb20iOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX0NOX01JU01BVENIOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMjUgKGRvbWFpbiBtYXRjaGluZyBtdWx0aSBjZXJ0aWZpY2F0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGkuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6ImV4YW1wbGUubmV0IjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMyNiAoZG9tYWluIG5vdCBtYXRjaGluZyBtdWx0aSBjZXJ0aWZpY2F0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGkuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ind3dy5leGFtcGxlLm5ldCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0g6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMyNyAoZG9tYWluIG5vdCBtYXRjaGluZyBtdWx0aSBjZXJ0aWZpY2F0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGkuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6InhhbXBsZS5uZXQiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX0NOX01JU01BVENIOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMjcgKGRvbWFpbiBub3QgbWF0Y2hpbmcgbXVsdGkgY2VydGlmaWNhdGUpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvY2VydF9leGFtcGxlX211bHRpLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJiZXhhbXBsZS5uZXQiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX0NOX01JU01BVENIOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMjggKGRvbWFpbiBub3QgbWF0Y2hpbmcgd2lsZGNhcmQgaW4gbXVsdGkgY2VydGlmaWNhdGUpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvY2VydF9leGFtcGxlX211bHRpLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJleGFtcGxlLm9yZyI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0g6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMyOSAoZG9tYWluIG1hdGNoaW5nIHdpbGRjYXJkIGluIG11bHRpIGNlcnRpZmljYXRlKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV9tdWx0aS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoibWFpbC5leGFtcGxlLm9yZyI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMzAgKGRvbWFpbiBtYXRjaGluZyBtdWx0aSBjZXJ0aWZpY2F0ZSB3aXRob3V0IENOKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV9tdWx0aV9ub2NuLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJ3d3cuc2hvdG9rYW4tYnJhdW5zY2h3ZWlnLmRlIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzMxIChkb21haW4gbm90IG1hdGNoaW5nIG11bHRpIGNlcnRpZmljYXRlIHdpdGhvdXQgQ04pCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvY2VydF9leGFtcGxlX211bHRpX25vY24uY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ind3dy5leGFtcGxlLm5ldCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0ggKyBNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzMyIChWYWxpZCwgRUMgY2VydCwgUlNBIENBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRDpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMy5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMzMgKFZhbGlkLCBSU0EgY2VydCwgRUMgQ0EpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjQuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMzQgKFZhbGlkLCBFQyBjZXJ0LCBFQyBDQSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMzUgKFJldm9rZWQsIEVDIENBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMzYgKFZhbGlkLCBFQyBDQSwgU0hBMSBEaWdlc3QpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTEuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMzcgKFZhbGlkLCBFQyBDQSwgU0hBMjI0IERpZ2VzdCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMjI0LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzM4IChWYWxpZCwgRUMgQ0EsIFNIQTM4NCBEaWdlc3QpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMzg0LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzM5IChWYWxpZCwgRUMgQ0EsIFNIQTUxMiBEaWdlc3QpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUtc2hhNTEyLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzQwIChWYWxpZCwgZGVwdGggMCwgUlNBLCBDQSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzQxIChWYWxpZCwgZGVwdGggMCwgRUMsIENBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNDIgKERlcHRoIDAsIG5vdCBDQSwgUlNBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IjoiZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNDMgKERlcHRoIDAsIG5vdCBDQSwgRUMpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzQ0IChDb3JydXB0ZWQgc2lnbmF0dXJlLCBFQykKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUtYmFkc2lnbi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzQ1IChDb3JydXB0ZWQgc2lnbmF0dXJlLCBSU0EpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMi1iYWRzaWduLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzQ2IChWYWxpZCwgZGVwdGggMiwgRUMtUlNBLUVDKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjdfaW50LWNhLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzQ3IChVbnRydXN0ZWQsIGRlcHRoIDIsIEVDLVJTQS1FQykKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI3X2ludC1jYS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNDggKE1pc3NpbmcgaW50ZXJtZWRpYXRlIENBLCBFQy1SU0EtRUMpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEExX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNy5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNDkgKFZhbGlkLCBkZXB0aCAyLCBSU0EtRUMtUlNBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjhfaW50LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzUwIChWYWxpZCwgbXVsdGlwbGUgQ0FzKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYV9jYXQxMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM1MSAoVmFsaWQsIG11bHRpcGxlIENBcywgcmV2ZXJzZSBvcmRlcikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MjEuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNTIgKENBIGtleVVzYWdlIHZhbGlkKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIua3UtY3J0X2NybC5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNTMgKENBIGtleVVzYWdlIG1pc3NpbmcgY1JMU2lnbikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIua3UtY3J0LmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ1JMX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNTQgKENBIGtleVVzYWdlIG1pc3NpbmcgY1JMU2lnbiwgbm8gQ1JMKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIua3UtY3J0LmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzU1IChDQSBrZXlVc2FnZSBtaXNzaW5nIGtleUNlcnRTaWduKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0U6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcmwuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNTYgKENBIGtleVVzYWdlIHBsYWluIHdyb25nKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0U6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1kcy5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM1NyAoVmFsaWQsIFJTQVNTQS1QU1MsIFNIQS0xKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjkuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzU4IChWYWxpZCwgUlNBU1NBLVBTUywgU0hBLTIyNCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjktc2hhMjI0LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTIyNC5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM1OSAoVmFsaWQsIFJTQVNTQS1QU1MsIFNIQS0yNTYpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI5LXNoYTI1Ni5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGEyNTYucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNjAgKFZhbGlkLCBSU0FTU0EtUFNTLCBTSEEtMzg0KQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOS1zaGEzODQuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMzg0LnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzYxIChWYWxpZCwgUlNBU1NBLVBTUywgU0hBLTUxMikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjktc2hhNTEyLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTUxMi5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM2MiAoUmV2b2tlZCwgUlNBU1NBLVBTUywgU0hBLTEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGExLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM2MyAoUmV2b2tlZCwgUlNBU1NBLVBTUywgU0hBLTEsIENSTCBiYWRzaWduKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjkuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMS1iYWRzaWduLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDUkxfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM2NCAoVmFsaWQsIFJTQVNTQS1QU1MsIFNIQS0xLCBub3QgdG9wKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjktd2l0aC1jYS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNjUgKFJTQVNTQS1QU1MsIFNIQTEsIGJhZCBjZXJ0IHNpZ25hdHVyZSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI5LWJhZHNpZ24uY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNjYgKFJTQVNTQS1QU1MsIFNIQTEsIG5vIFJTQSBDQSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNjcgKFZhbGlkLCBSU0FTU0EtUFNTLCBhbGwgZGVmYXVsdHMpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOS1kZWZhdWx0cy5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGExLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzY4IChSU0FTU0EtUFNTLCB3cm9uZyBzYWx0X2xlbikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjktYmFkLXNhbHRsZW4uY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNjkgKFJTQVNTQS1QU1MsIHdyb25nIG1nZl9oYXNoKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOS1iYWQtbWdmaGFzaC5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM3MCAodjEgdHJ1c3RlZCBDQSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjEtdjEuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLXYxLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzcxICh2MSB0cnVzdGVkIENBLCBvdGhlcikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjItdjEuY3J0IjoiZGF0YV9maWxlcy9zZXJ2ZXIxLXYxLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzcyICh2MSBjaGFpbikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjItdjEtY2hhaW4uY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLXYxLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNzMgKHNlbGZzaWduZWQgdHJ1c3RlZCB3aXRob3V0IENBIGJpdCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS1zZWxmc2lnbmVkLmNydCI6ImRhdGFfZmlsZXMvc2VydmVyNS1zZWxmc2lnbmVkLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzc0IChzaWduZWQgYnkgc2VsZnNpZ25lZCB0cnVzdGVkIHdpdGhvdXQgQ0EgYml0KQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI2LXNzLWNoaWxkLmNydCI6ImRhdGFfZmlsZXMvc2VydmVyNS1zZWxmc2lnbmVkLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNzUgKGVuY29kaW5nIG1pc21hdGNoKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9lbmNvLWNlcnQtdXRmOHN0ci5wZW0iOiJkYXRhX2ZpbGVzL2VuY28tY2EtcHJzdHIucGVtIjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNzYgKG11bHRpcGxlIENSTHMsIG5vdCByZXZva2VkKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydCI6ImRhdGFfZmlsZXMvY3JsX2NhdF9lYy1yc2EucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNzcgKG11bHRpcGxlIENSTHMsIHJldm9rZWQpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IjoiZGF0YV9maWxlcy9jcmxfY2F0X2VjLXJzYS5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNzggKG11bHRpcGxlIENSTHMsIHJldm9rZWQgYnkgc2Vjb25kKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjYuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydCI6ImRhdGFfZmlsZXMvY3JsX2NhdF9yc2EtZWMucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzc5IChtdWx0aXBsZSBDUkxzLCByZXZva2VkIGJ5IGZ1dHVyZSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYV9jYXQxMi5jcnQiOiJkYXRhX2ZpbGVzL2NybF9jYXRfZWNmdXQtcnNhLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUR8TUJFRFRMU19YNTA5X0JBRENSTF9GVVRVUkU6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM4MCAobXVsdGlwbGUgQ1JMcywgZmlyc3QgZnV0dXJlLCByZXZva2VkIGJ5IHNlY29uZCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYV9jYXQxMi5jcnQiOiJkYXRhX2ZpbGVzL2NybF9jYXRfZWNmdXQtcnNhLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM4MSAobXVsdGlwbGUgQ1JMcywgbm9uZSByZWxldmFudCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9lbmNvLWNlcnQtdXRmOHN0ci5wZW0iOiJkYXRhX2ZpbGVzL2VuY28tY2EtcHJzdHIucGVtIjoiZGF0YV9maWxlcy9jcmxfY2F0X3JzYS1lYy5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM4MiAoTm90IHlldCB2YWxpZCBDQSBhbmQgdmFsaWQgQ0EpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTJfY2F0LWZ1dHVyZS1wcmVzZW50LmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTEucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjODMgKHZhbGlkIENBIGFuZCBOb3QgeWV0IHZhbGlkIENBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyX2NhdC1wcmVzZW50LWZ1dHVyZS5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGExLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzg0ICh2YWxpZCBDQSBhbmQgTm90IHlldCB2YWxpZCBDQSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtcHJlc2VudC1wYXN0LmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTEucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjODUgKE5vdCB5ZXQgdmFsaWQgQ0EgYW5kIHZhbGlkIENBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyX2NhdC1wYXN0LXByZXNlbnQuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMS5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrOiB0cnVzdGVkIEVFIGNlcnQKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAoreDUwOV92ZXJpZnlfY2FsbGJhY2s6ImRhdGFfZmlsZXMvc2VydmVyNS1zZWxmc2lnbmVkLmNydCI6ImRhdGFfZmlsZXMvc2VydmVyNS1zZWxmc2lnbmVkLmNydCI6MDoiZGVwdGggMCAtIHNlcmlhbCA1M1w6QTJcOkNCXDo0Qlw6MTJcOjRFXDpBRFw6ODNcOjdEXDpBOFw6OTRcOkIyIC0gc3ViamVjdCBDTj1zZWxmc2lnbmVkLCBPVT10ZXN0aW5nLCBPPVBvbGFyU1NMLCBDPU5MXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrOiBzaW1wbGUKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeV9jYWxsYmFjazoiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOjA6ImRlcHRoIDEgLSBzZXJpYWwgMDAgLSBzdWJqZWN0IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbmRlcHRoIDAgLSBzZXJpYWwgMDEgLSBzdWJqZWN0IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFNlcnZlciAxXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrOiB0d28gdHJ1c3RlZCByb290cworZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5X2NhbGxiYWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydCI6MDoiZGVwdGggMSAtIHNlcmlhbCAwMCAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuZGVwdGggMCAtIHNlcmlhbCAwMSAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gY2FsbGJhY2s6IHR3byB0cnVzdGVkIHJvb3RzLCByZXZlcnNlZCBvcmRlcgorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5X2NhbGxiYWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhX2NhdDIxLmNydCI6MDoiZGVwdGggMSAtIHNlcmlhbCAwMCAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuZGVwdGggMCAtIHNlcmlhbCAwMSAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gY2FsbGJhY2s6IHJvb3QgaW5jbHVkZWQKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3ZlcmlmeV9jYWxsYmFjazoiZGF0YV9maWxlcy9zZXJ2ZXIxX2NhLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYV9jYXQyMS5jcnQiOjA6ImRlcHRoIDEgLSBzZXJpYWwgMDAgLSBzdWJqZWN0IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbmRlcHRoIDAgLSBzZXJpYWwgMDEgLSBzdWJqZWN0IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFNlcnZlciAxXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrOiBpbnRlcm1lZGlhdGUgY2EKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeV9jYWxsYmFjazoiZGF0YV9maWxlcy9zZXJ2ZXI3X2ludC1jYS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IjowOiJkZXB0aCAyIC0gc2VyaWFsIEMxXDo0M1w6RTJcOjdFXDo2Mlw6NDNcOkNDXDpFOCAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQVxuZGVwdGggMSAtIHNlcmlhbCAwRSAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBJbnRlcm1lZGlhdGUgQ0FcbmRlcHRoIDAgLSBzZXJpYWwgMTAgLSBzdWJqZWN0IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBjYWxsYmFjazogaW50ZXJtZWRpYXRlIGNhLCByb290IGluY2x1ZGVkCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnlfY2FsbGJhY2s6ImRhdGFfZmlsZXMvc2VydmVyN19pbnQtY2FfY2EyLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYV9jYXQxMi5jcnQiOjA6ImRlcHRoIDIgLSBzZXJpYWwgQzFcOjQzXDpFMlw6N0VcOjYyXDo0M1w6Q0NcOkU4IC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBXG5kZXB0aCAxIC0gc2VyaWFsIDBFIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IEludGVybWVkaWF0ZSBDQVxuZGVwdGggMCAtIHNlcmlhbCAxMCAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrOiBpbnRlcm1lZGlhdGUgY2EgdHJ1c3RlZAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5X2NhbGxiYWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjdfaW50LWNhX2NhMi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtaW50LWNhLmNydCI6MDoiZGVwdGggMSAtIHNlcmlhbCAwRSAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBJbnRlcm1lZGlhdGUgQ0FcbmRlcHRoIDAgLSBzZXJpYWwgMTAgLSBzdWJqZWN0IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBjYWxsYmFjazogdHdvIGludGVybWVkaWF0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeV9jYWxsYmFjazoiZGF0YV9maWxlcy9zZXJ2ZXIxMF9pbnQzX2ludC1jYTIuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhX2NhdDIxLmNydCI6MDoiZGVwdGggMyAtIHNlcmlhbCAwMCAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuZGVwdGggMiAtIHNlcmlhbCAwRiAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBJbnRlcm1lZGlhdGUgRUMgQ0FcbmRlcHRoIDEgLSBzZXJpYWwgNEQgLSBzdWJqZWN0IEM9VUssIE89bWJlZCBUTFMsIENOPW1iZWQgVExTIFRlc3QgaW50ZXJtZWRpYXRlIENBIDNcbmRlcHRoIDAgLSBzZXJpYWwgNEIgLSBzdWJqZWN0IENOPWxvY2FsaG9zdFxuIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBjYWxsYmFjazogdHdvIGludGVybWVkaWF0ZXMsIHJvb3QgaW5jbHVkZWQKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeV9jYWxsYmFjazoiZGF0YV9maWxlcy9zZXJ2ZXIxMF9pbnQzX2ludC1jYTJfY2EuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhX2NhdDIxLmNydCI6MDoiZGVwdGggMyAtIHNlcmlhbCAwMCAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuZGVwdGggMiAtIHNlcmlhbCAwRiAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBJbnRlcm1lZGlhdGUgRUMgQ0FcbmRlcHRoIDEgLSBzZXJpYWwgNEQgLSBzdWJqZWN0IEM9VUssIE89bWJlZCBUTFMsIENOPW1iZWQgVExTIFRlc3QgaW50ZXJtZWRpYXRlIENBIDNcbmRlcHRoIDAgLSBzZXJpYWwgNEIgLSBzdWJqZWN0IENOPWxvY2FsaG9zdFxuIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBjYWxsYmFjazogdHdvIGludGVybWVkaWF0ZXMsIHRvcCBpbnQgdHJ1c3RlZAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5X2NhbGxiYWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEwX2ludDNfaW50LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtaW50LWNhMi5jcnQiOjA6ImRlcHRoIDIgLSBzZXJpYWwgMEYgLSBzdWJqZWN0IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgSW50ZXJtZWRpYXRlIEVDIENBXG5kZXB0aCAxIC0gc2VyaWFsIDREIC0gc3ViamVjdCBDPVVLLCBPPW1iZWQgVExTLCBDTj1tYmVkIFRMUyBUZXN0IGludGVybWVkaWF0ZSBDQSAzXG5kZXB0aCAwIC0gc2VyaWFsIDRCIC0gc3ViamVjdCBDTj1sb2NhbGhvc3RcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gY2FsbGJhY2s6IHR3byBpbnRlcm1lZGlhdGVzLCBsb3cgaW50IHRydXN0ZWQKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeV9jYWxsYmFjazoiZGF0YV9maWxlcy9zZXJ2ZXIxMF9pbnQzX2ludC1jYTJfY2EuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWludC1jYTMuY3J0IjowOiJkZXB0aCAxIC0gc2VyaWFsIDREIC0gc3ViamVjdCBDPVVLLCBPPW1iZWQgVExTLCBDTj1tYmVkIFRMUyBUZXN0IGludGVybWVkaWF0ZSBDQSAzXG5kZXB0aCAwIC0gc2VyaWFsIDRCIC0gc3ViamVjdCBDTj1sb2NhbGhvc3RcbiIKKworWDUwOSBQYXJzZSBTZWxmdGVzdAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfQ0VSVFNfQworeDUwOV9zZWxmdGVzdDoKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChJbmNvcnJlY3QgZmlyc3QgdGFnKQoreDUwOXBhcnNlX2NydDoiIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoQ29ycmVjdCBmaXJzdCB0YWcsIGRhdGEgbGVuZ3RoIGRvZXMgbm90IG1hdGNoKQoreDUwOXBhcnNlX2NydDoiMzAwMDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKENvcnJlY3QgZmlyc3QgdGFnLCBubyBtb3JlIGRhdGEpCit4NTA5cGFyc2VfY3J0OiIzMDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKENvcnJlY3QgZmlyc3QgdGFnLCBsZW5ndGggZGF0YSBpbmNvcnJlY3QpCit4NTA5cGFyc2VfY3J0OiIzMDAyMzA4NSI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9MRU5HVEgKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChDb3JyZWN0IGZpcnN0IHRhZywgbGVuZ3RoIGRhdGEgaW5jb21wbGV0ZSkKK3g1MDlwYXJzZV9jcnQ6IjMwMDIzMDgzIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKENvcnJlY3QgZmlyc3QgdGFnLCBsZW5ndGggZGF0YSBpbmNvbXBsZXRlKQoreDUwOXBhcnNlX2NydDoiMzAwMjMwODEiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoQ29ycmVjdCBmaXJzdCB0YWcsIGxlbmd0aCBkYXRhIGluY29tcGxldGUpCit4NTA5cGFyc2VfY3J0OiIzMDAzMzA4MjAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKENvcnJlY3QgZmlyc3QgdGFnLCBzZWNvbmQgdGFnIG5vIFRCU0NlcnRpZmljYXRlKQoreDUwOXBhcnNlX2NydDoiMzAwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBubyB2ZXJzaW9uIHRhZywgc2VyaWFsIG1pc3NpbmcpCit4NTA5cGFyc2VfY3J0OiIzMDAzMzAwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0VSSUFMICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBpbnZhbGlkIHZlcnNpb24gdGFnKQoreDUwOXBhcnNlX2NydDoiMzAwNTMwMDNhMDAxMDEiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCB2YWxpZCB2ZXJzaW9uIHRhZywgbm8gbGVuZ3RoKQoreDUwOXBhcnNlX2NydDoiMzAwNTMwMDNhMDAxMDIiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCB2YWxpZCB2ZXJzaW9uIHRhZywgaW52YWxpZCBsZW5ndGgpCit4NTA5cGFyc2VfY3J0OiIzMDE2MzAxNGEwMTIwMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OICsgTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCB2YWxpZCB2ZXJzaW9uIHRhZywgbm8gc2VyaWFsKQoreDUwOXBhcnNlX2NydDoiMzAwNzMwMDVhMDAzMDIwMTA0IjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0VSSUFMICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBpbnZhbGlkIGxlbmd0aCB2ZXJzaW9uIHRhZykKK3g1MDlwYXJzZV9jcnQ6IjMwMDgzMDA2YTAwNDAyMDEwNDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfVkVSU0lPTiArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGluY29ycmVjdCBzZXJpYWwgdGFnKQoreDUwOXBhcnNlX2NydDoiMzAwODMwMDZhMDAzMDIwMTA0MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGluY29ycmVjdCBzZXJpYWwgbGVuZ3RoKQoreDUwOXBhcnNlX2NydDoiMzAwODMwMDZhMDAzMDIwMTA0ODIiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGNvcnJlY3Qgc2VyaWFsLCBubyBhbGcpCit4NTA5cGFyc2VfY3J0OiIzMDBkMzAwYmEwMDMwMjAxMDQ4MjA0ZGVhZGJlZWYiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGNvcnJlY3Qgc2VyaWFsLCBubyBhbGcgb2lkKQoreDUwOXBhcnNlX2NydDoiMzAwZTMwMGNhMDAzMDIwMTA0ODIwNGRlYWRiZWVmMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGFsZyBvaWQgbm8gZGF0YSBpbiBzZXF1ZW5jZSkKK3g1MDlwYXJzZV9jcnQ6IjMwMGYzMDBkYTAwMzAyMDEwNDgyMDRkZWFkYmVlZjMwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGFsZyB3aXRoIHBhcmFtcykKK3g1MDlwYXJzZV9jcnQ6IjMwMTYzMDE0YTAwMzAyMDEwNDgyMDRkZWFkYmVlZjMwMDcwNjA0Y2FmZWQwMGQwMSI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgY29ycmVjdCBhbGcgZGF0YSwgbm8gcGFyYW1zIHVua25vd24gdmVyc2lvbikKK3g1MDlwYXJzZV9jcnQ6IjMwMTUzMDEzYTAwMzAyMDEwNDgyMDRkZWFkYmVlZjMwMDYwNjA0Y2FmZWQwMGQiOiIiOk1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGNvcnJlY3QgYWxnIGRhdGEsIHVua25vd24gdmVyc2lvbikKK3g1MDlwYXJzZV9jcnQ6IjMwMTczMDE1YTAwMzAyMDEwNDgyMDRkZWFkYmVlZjMwMDgwNjA0Y2FmZWQwMGQwNTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fVkVSU0lPTgorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBjb3JyZWN0IGFsZyBkYXRhLCBsZW5ndGggbWlzbWF0Y2gpCit4NTA5cGFyc2VfY3J0OiIzMDE4MzAxNmEwMDMwMjAxMDQ4MjA0ZGVhZGJlZWYzMDA5MDYwNGNhZmVkMDBkMDUwMDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgY29ycmVjdCBhbGcsIHVua25vd24gYWxnX2lkKQoreDUwOXBhcnNlX2NydDoiMzAxNzMwMTVhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwODA2MDRjYWZlZDAwZDA1MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9TSUdfQUxHICsgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBjb3JyZWN0IGFsZywgc3BlY2lmaWMgYWxnX2lkKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwMWMzMDFhYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgY29ycmVjdCBhbGcsIHVua25vd24gc3BlY2lmaWMgYWxnX2lkKQoreDUwOXBhcnNlX2NydDoiMzAxYzMwMWFhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDEwNTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRyArIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgY29ycmVjdCBhbGcsIGJhZCBSU0FTU0EtUFNTIHBhcmFtcykKK2RlcGVuZHNfb246TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVAoreDUwOXBhcnNlX2NydDoiMzAxOTMwMTdBMDAzMDIwMTAyMDIwMTE4MzAwRDA2MDkyQTg2NDg4NkY3MEQwMTAxMEEzMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBpc3N1ZXIgbm8gc2V0IGRhdGEpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzAxZTMwMWNhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGlzc3VlciBubyBpbm5lciBzZXEgZGF0YSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDIwMzAxZWEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDAyMzEwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGlzc3VlciBubyBpbm5lciBzZXQgZGF0YSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDIyMzAyMGEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDA0MzEwMjMwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBpc3N1ZXIgdHdvIGlubmVyIHNldCBkYXRhcykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDI0MzAyMmEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDA2MzEwNDMwMDAzMDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgaXNzdWVyIG5vIG9pZCBkYXRhKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwMjQzMDIyYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMDYzMTA0MzAwMjA2MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBpc3N1ZXIgaW52YWxpZCB0YWcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzAyYTMwMjhhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDA2MDQ1NDY1NzM3NCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGlzc3Vlciwgbm8gc3RyaW5nIGRhdGEpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzAyNTMwMjNhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwNzMxMDUzMDAzMDYwMDEzIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgaXNzdWVyLCBubyBmdWxsIGZvbGxvd2luZyBzdHJpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzAyYjMwMjlhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwZDMxMGIzMDA5MDYwMDEzMDQ1NDY1NzM3NDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRStNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHZhbGlkIGlzc3Vlciwgbm8gdmFsaWRpdHkpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzAyYTMwMjhhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHRvbyBtdWNoIGRhdGUgZGF0YSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDQ5MzA0N2EwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxZDE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgaW52YWxpZCBmcm9tIGRhdGUpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA0ODMwNDZhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDAwMDAwMDAwMTcwYzMwMzkzMTMyMzMzMTMyMzMwMDAwMDAwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgaW52YWxpZCB0byBkYXRlKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwNDgzMDQ2YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMDAwMDAwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHZhbGlkIHZhbGlkaXR5LCBubyBzdWJqZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwNDkzMDQ3YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgdmFsaWQgc3ViamVjdCwgbm8gcHVia2V5aW5mbykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDU2MzA1NGEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NCI6IiI6TUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBwdWJrZXksIG5vIGFsZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDU4MzA1NmEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMDAiOiIiOk1CRURUTFNfRVJSX1BLX0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCB2YWxpZCBzdWJqZWN0LCB1bmtub3duIHBrIGFsZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDY3MzA2NWEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMGYzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMDA1MDAiOiIiOk1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHB1YmtleSwgbm8gYml0c3RyaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwNjczMDY1YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAwZjMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMCI6IiI6TUJFRFRMU19FUlJfUEtfSU5WQUxJRF9QVUJLRVkgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHB1YmtleSwgbm8gYml0c3RyaW5nIGRhdGEpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA2OTMwNjdhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDExMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMwMCI6IiI6TUJFRFRMU19FUlJfUEtfSU5WQUxJRF9QVUJLRVkgKyBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBwdWJrZXksIGludmFsaWQgYml0c3RyaW5nIHN0YXJ0KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwNmEzMDY4YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxMjMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMDEwMSI6IiI6TUJFRFRMU19FUlJfUEtfSU5WQUxJRF9QVUJLRVkgKyBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBwdWJrZXksIGludmFsaWQgaW50ZXJuYWwgYml0c3RyaW5nIGxlbmd0aCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDZkMzA2YmEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMTUzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzA0MDAzMDAwMDAiOiIiOk1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgcHVia2V5LCBpbnZhbGlkIGludGVybmFsIGJpdHN0cmluZyB0YWcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA2ZDMwNmJhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDE1MzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMwNDAwMzEwMDAwIjoiIjpNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgcHVia2V5LCBpbnZhbGlkIG1iZWR0bHNfbXBpKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwNzQzMDcyYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMGIwMDMwMDgwMjAyZmZmZjAzMDJmZmZmIjoiIjpNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgcHVia2V5LCB0b3RhbCBsZW5ndGggbWlzbWF0Y2gpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA3NTMwNzNhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFkMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMwYjAwMzAwODAyMDJmZmZmMDIwMmZmZmYwMCI6IiI6TUJFRFRMU19FUlJfUEtfSU5WQUxJRF9QVUJLRVkgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBwdWJrZXksIGNoZWNrIGZhaWxlZCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDc0MzA3MmEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzBiMDAzMDA4MDIwMmZmZmYwMjAyZmZmZiI6IiI6TUJFRFRMU19FUlJfUEtfSU5WQUxJRF9QVUJLRVkKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgcHVia2V5LCBjaGVjayBmYWlsZWQsIGV4cGFuZGVkIGxlbmd0aCBub3RhdGlvbikKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxODMzMDgxODBhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAyMDJmZmZmIjoiIjpNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBPcHRpb25hbCBVSURzLCBFeHRlbnNpb25zIG5vdCBwcmVzZW50KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE4MzMwODE4MGEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUgdjMsIGlzc3VlcklEIHdyb25nIHRhZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxODQzMDgxODFhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBVSURzLCBubyBleHQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTg5MzA4MTg2YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZmExMDFhYWEyMDFiYiI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSB2MywgVUlEcywgaW52YWxpZCBsZW5ndGgpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTg5MzA4MTg2YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZmExODVhYWEyMDFiYiI6IiI6TUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBleHQgZW1wdHkpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MThiMzA4MTg4YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZmExMDFhYWEyMDFiYmEzMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBleHQgbGVuZ3RoIG1pc21hdGNoKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE4ZTMwODE4YmEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmZhMTAxYWFhMjAxYmJhMzAzMzAwMDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUgdjMsIGZpcnN0IGV4dCBpbnZhbGlkKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE4ZjMwODE4Y2EwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmZhMTAxYWFhMjAxYmJhMzAzMzAwMjMwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBmaXJzdCBleHQgaW52YWxpZCB0YWcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTkwMzA4MThkYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZmExMDFhYWEyMDFiYmEzMDQzMDAyMzEwMDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSB2MywgZXh0IEJhc2ljQ29udHJhaW50IHRhZywgYm9vbCBsZW4gbWlzc2luZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxOTgzMDgxOTVhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmYTEwMWFhYTIwMWJiYTMwYzMwMGEzMDA2MDYwMzU1MWQxMzAxMDEwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSB2MywgZXh0IEJhc2ljQ29udHJhaW50IHRhZywgZGF0YSBtaXNzaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5ODMwODE5NWEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmZhMTAxYWFhMjAxYmJhMzBjMzAwYTMwMDgwNjAzNTUxZDEzMDEwMTAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBleHQgQmFzaWNDb250cmFpbnQgdGFnLCBubyBvY3RldCBwcmVzZW50KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5ODMwODE5NWEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmZhMTAxYWFhMjAxYmJhMzBkMzAwYjMwMDkwNjAzNTUxZDEzMDEwMTAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBleHQgQmFzaWNDb250cmFpbnQgdGFnLCBvY3RldCBkYXRhIG1pc3NpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTljMzA4MTk5YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZmExMDFhYWEyMDFiYmEzMTEzMDBmMzAwZDA2MDM1NTFkMTMwMTAxMDEwNDAzMzAwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSB2MywgZXh0IEJhc2ljQ29udHJhaW50IHRhZywgbm8gcGF0aGxlbikKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxOWYzMDgxOWNhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmYTEwMWFhYTIwMWJiYTMxNDMwMTIzMDEwMDYwMzU1MWQxMzAxMDEwMTA0MDYzMDA0MDIwMTAxMDIiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBleHQgQmFzaWNDb250cmFpbnQgdGFnLCBvY3RldCBsZW4gbWlzbWF0Y2gpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MWEyMzA4MTlmYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZmExMDFhYWEyMDFiYmEzMTczMDE1MzAxMzA2MDM1NTFkMTMwMTAxMDEwNDA5MzAwNzAyMDEwMTAyMDEwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoRXh0S2V5VXNhZ2UsIGJhZCBzZWNvbmQgdGFnKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5cGFyc2VfY3J0OiIzMDgxZGUzMDgxZGJhMDAzMDIwMTAyMDIwOTAwZWJkYmNkMTQxMDVlMTgzOTMwMDkwNjA3MmE4NjQ4Y2UzZDA0MDEzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDU0NjU3Mzc0MzAxZTE3MGQzMTM0MzEzMTMxMzEzMjMwMzUzOTM1MzQ1YTE3MGQzMjM0MzEzMTMwMzgzMjMwMzUzOTM1MzQ1YTMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NTQ2NTczNzQzMDU5MzAxMzA2MDcyYTg2NDhjZTNkMDIwMTA2MDgyYTg2NDhjZTNkMDMwMTA3MDM0MjAwMDQzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkyNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZmEzMjEzMDFmMzAxZDA2MDM1NTFkMjUwNDE2MzAxNDA2MDgyYjA2MDEwNTA1MDcwMzAxMDcwODJiMDYwMTA1MDUwNzAzMDIiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFN1YmplY3RBbHROYW1lIHJlcGVhdGVkKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5cGFyc2VfY3J0OiIzMDgxZmQzMDgxZmFhMDAzMDIwMTAyMDIwOTAwYThiMzFmZjM3ZDA5YTM3ZjMwMDkwNjA3MmE4NjQ4Y2UzZDA0MDEzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDU0NjU3Mzc0MzAxZTE3MGQzMTM0MzEzMTMxMzEzMjMxMzMzNzMxMzY1YTE3MGQzMjM0MzEzMTMwMzgzMjMxMzMzNzMxMzY1YTMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NTQ2NTczNzQzMDU5MzAxMzA2MDcyYTg2NDhjZTNkMDIwMTA2MDgyYTg2NDhjZTNkMDMwMTA3MDM0MjAwMDQzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkyNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZmEzMjEzMDFmMzAxZDA2MDM1NTFkMTEwNDE2MzAxNDgyMDg2NjZmNmYyZTc0NjU3Mzc0ODIwODYyNjE3MjJlNzQ2NTczNzQzMDFkMDYwMzU1MWQxMTA0MTYzMDE0ODIwODY2NmY2ZjJlNzQ2NTczNzQ4MjA4NjI2MTcyMmU3NDY1NzM3NCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChFeHRLZXlVc2FnZSByZXBlYXRlZCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworeDUwOXBhcnNlX2NydDoiMzA4MWZkMzA4MWZhYTAwMzAyMDEwMjAyMDkwMGViZGJjZDE0MTA1ZTE4MzkzMDA5MDYwNzJhODY0OGNlM2QwNDAxMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ1NDY1NzM3NDMwMWUxNzBkMzEzNDMxMzEzMTMxMzIzMDM1MzkzNTM0NWExNzBkMzIzNDMxMzEzMDM4MzIzMDM1MzkzNTM0NWEzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDU0NjU3Mzc0MzA1OTMwMTMwNjA3MmE4NjQ4Y2UzZDAyMDEwNjA4MmE4NjQ4Y2UzZDAzMDEwNzAzNDIwMDA0MzdjYzU2ZDk3NjA5MWU1YTcyM2VjNzU5MmRmZjIwNmVlZTdjZjkwNjkxNzRkMGFkMTRiNWY3NjgyMjU5NjI5MjRlZTUwMGQ4MjMxMWZmZWEyZmQyMzQ1ZDVkMTZiZDhhODhjMjZiNzcwZDU1Y2Q4YTJhMGVmYTAxYzhiNGVkZmZhMzQwMzAzZTMwMWQwNjAzNTUxZDI1MDQxNjMwMTQwNjA4MmIwNjAxMDUwNTA3MDMwMTA2MDgyYjA2MDEwNTA1MDcwMzAyMzAxZDA2MDM1NTFkMjUwNDE2MzAxNDA2MDgyYjA2MDEwNTA1MDcwMzAxMDYwODJiMDYwMTA1MDUwNzAzMDIiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoY29ycmVjdCBwdWJrZXksIG5vIHNpZ19hbGcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTgzMzA4MTgwYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZiI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChzaWdfYWxnIG1pc21hdGNoKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5MjMwODE4MGEwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDIwMjA1MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfU0lHX01JU01BVENICisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoc2lnX2FsZywgbm8gc2lnKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5MjMwODE4MGEwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TSUdOQVRVUkUgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoc2lnbmF0dXJlLCBpbnZhbGlkIHNpZyBkYXRhKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5NTMwODE4MGEwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAwMzAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TSUdOQVRVUkUgKyBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKHNpZ25hdHVyZSwgZGF0YSBsZWZ0KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5NzMwODE4MGEwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAwMzAyMDBmZjAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5NjMwODE4MGEwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAwMzAyMDBmZiI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDFcbnNlcmlhbCBudW1iZXIgICAgIFw6IERFXDpBRFw6QkVcOkVGXG5pc3N1ZXIgbmFtZSAgICAgICBcOiA/XD89VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogP1w/PVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAwOS0xMi0zMSAyM1w6NTlcOjU5XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBNRDJcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEyOCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChHZW5lcmFsaXplZFRpbWUgaW5zdGVhZCBvZiBVVENUaW1lKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5ODMwODE4MmEwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxZTE4MGUzMjMwMzEzMDMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMDMwMjAwZmYiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAxXG5zZXJpYWwgbnVtYmVyICAgICBcOiBERVw6QURcOkJFXDpFRlxuaXNzdWVyIG5hbWUgICAgICAgXDogP1w/PVRlc3RcbnN1YmplY3QgbmFtZSAgICAgIFw6ID9cPz1UZXN0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEwLTAxLTAxIDAwXDowMFw6MDBcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMDktMTItMzEgMjNcOjU5XDo1OVxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggTUQyXG5SU0Ega2V5IHNpemUgICAgICBcOiAxMjggYml0c1xuIjowCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoTmFtZSB3aXRoIFg1MjAgQ04pCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTk5MzA4MTgzYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDAzMDIwMGZmIjoiY2VydC4gdmVyc2lvbiAgICAgXDogMVxuc2VyaWFsIG51bWJlciAgICAgXDogREVcOkFEXDpCRVw6RUZcbmlzc3VlciBuYW1lICAgICAgIFw6IENOPVRlc3RcbnN1YmplY3QgbmFtZSAgICAgIFw6ID9cPz1UZXN0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDA5LTAxLTAxIDAwXDowMFw6MDBcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMDktMTItMzEgMjNcOjU5XDo1OVxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggTUQyXG5SU0Ega2V5IHNpemUgICAgICBcOiAxMjggYml0c1xuIjowCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoTmFtZSB3aXRoIFg1MjAgQykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxOTkzMDgxODNhMDAzMDIwMTAwODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwNjEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMDMwMjAwZmYiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAxXG5zZXJpYWwgbnVtYmVyICAgICBcOiBERVw6QURcOkJFXDpFRlxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1UZXN0XG5zdWJqZWN0IG5hbWUgICAgICBcOiA/XD89VGVzdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAwOS0wMS0wMSAwMFw6MDBcOjAwXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDA5LTEyLTMxIDIzXDo1OVw6NTlcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIE1EMlxuUlNBIGtleSBzaXplICAgICAgXDogMTI4IGJpdHNcbiI6MAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKE5hbWUgd2l0aCBYNTIwIEwpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTk5MzA4MTgzYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0MDcxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDAzMDIwMGZmIjoiY2VydC4gdmVyc2lvbiAgICAgXDogMVxuc2VyaWFsIG51bWJlciAgICAgXDogREVcOkFEXDpCRVw6RUZcbmlzc3VlciBuYW1lICAgICAgIFw6IEw9VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogP1w/PVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAwOS0xMi0zMSAyM1w6NTlcOjU5XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBNRDJcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEyOCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChOYW1lIHdpdGggWDUyMCBTVCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxOTkzMDgxODNhMDAzMDIwMTAwODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwODEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMDMwMjAwZmYiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAxXG5zZXJpYWwgbnVtYmVyICAgICBcOiBERVw6QURcOkJFXDpFRlxuaXNzdWVyIG5hbWUgICAgICAgXDogU1Q9VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogP1w/PVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAwOS0xMi0zMSAyM1w6NTlcOjU5XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBNRDJcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEyOCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChOYW1lIHdpdGggWDUyMCBPKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5OTMwODE4M2EwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDBhMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAwMzAyMDBmZiI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDFcbnNlcmlhbCBudW1iZXIgICAgIFw6IERFXDpBRFw6QkVcOkVGXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBPPVRlc3RcbnN1YmplY3QgbmFtZSAgICAgIFw6ID9cPz1UZXN0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDA5LTAxLTAxIDAwXDowMFw6MDBcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMDktMTItMzEgMjNcOjU5XDo1OVxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggTUQyXG5SU0Ega2V5IHNpemUgICAgICBcOiAxMjggYml0c1xuIjowCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoTmFtZSB3aXRoIFg1MjAgT1UpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTk5MzA4MTgzYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0MGIxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDAzMDIwMGZmIjoiY2VydC4gdmVyc2lvbiAgICAgXDogMVxuc2VyaWFsIG51bWJlciAgICAgXDogREVcOkFEXDpCRVw6RUZcbmlzc3VlciBuYW1lICAgICAgIFw6IE9VPVRlc3RcbnN1YmplY3QgbmFtZSAgICAgIFw6ID9cPz1UZXN0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDA5LTAxLTAxIDAwXDowMFw6MDBcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMDktMTItMzEgMjNcOjU5XDo1OVxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggTUQyXG5SU0Ega2V5IHNpemUgICAgICBcOiAxMjggYml0c1xuIjowCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoTmFtZSB3aXRoIHVua25vd24gWDUyMCBwYXJ0KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5OTMwODE4M2EwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNGRlMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAwMzAyMDBmZiI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDFcbnNlcmlhbCBudW1iZXIgICAgIFw6IERFXDpBRFw6QkVcOkVGXG5pc3N1ZXIgbmFtZSAgICAgICBcOiA/XD89VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogP1w/PVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAwOS0xMi0zMSAyM1w6NTlcOjU5XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBNRDJcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEyOCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChOYW1lIHdpdGggY29tcG9zaXRlIFJETikKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOXBhcnNlX2NydDoiMzA4MjAyOWYzMDgyMDIwOGEwMDMwMjAxMDIwMjA0NGMyMGUzYmQzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwNTA1MDAzMDU2MzEwYjMwMDkwNjAzNTUwNDA2MTMwMjU1NTMzMTBiMzAwOTA2MDM1NTA0MDgwYzAyNDM0MTMxMjEzMDFmMDYwMzU1MDQwYTBjMTg0OTZlNzQ2NTcyNmU2NTc0MjA1NzY5NjQ2NzY5NzQ3MzIwNTA3NDc5MjA0Yzc0NjQzMTE3MzAxNTA2MDM1NTA0MDMwYzBlNDY3MjYxNmU2YjY1NmU2MzY1NzI3NDIwNDM0MTMwMWUxNzBkMzEzMzMwMzgzMDMyMzEzNTMxMzQzMzM3NWExNzBkMzEzNTMwMzgzMTM3MzAzNTM1MzQzMzMxNWEzMDgxZDEzMTBiMzAwOTA2MDM1NTA0MDYxMzAyNTU1MzMxMTMzMDExMDYwMzU1MDQwODEzMGE1NzYxNzM2ODY5NmU2Nzc0NmY2ZTMxMTMzMDExMDYwYjJiMDYwMTA0MDE4MjM3M2MwMjAxMDMxMzAyNTU1MzMxMTkzMDE3MDYwYjJiMDYwMTA0MDE4MjM3M2MwMjAxMDIxMzA4NDQ2NTZjNjE3NzYxNzI2NTMxMWEzMDE4MDYwMzU1MDQwYTEzMTE0MTc1NzQ2ODZmNzI2OTdhNjUyZTRlNjU3NDIwNGM0YzQzMzExZDMwMWIwNjAzNTUwNDBmMTMxNDUwNzI2OTc2NjE3NDY1MjA0ZjcyNjc2MTZlNjk3YTYxNzQ2OTZmNmUzMTJhMzAwZTA2MDM1NTA0MDUxMzA3MzQzMzM2MzkzMTM5MzEzMDE4MDYwMzU1MDQwMzEzMTE3Nzc3NzcyZTYxNzU3NDY4NmY3MjY5N2E2NTJlNmU2NTc0MzExNjMwMTQwNjAzNTUwNDA3MTMwZDUzNjE2ZTIwNDY3MjYxNmU2MzY5NzM2MzZmMzA4MTlmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDEwNTAwMDM4MThkMDAzMDgxODkwMjgxODEwMGQ4ODVjNjJlMjA5YjZhYzAwNWM2NGYwYmNmZGFhYzFmMmI2N2ExODgwMmY3NWIwODg1MWZmOTMzZGVlZDg4OGI3YjY4YTYyZmNhYmRiMjFkNGE4OTE0YmVjZmVhYWExYjdlMDhhMDlmZmFmOTkxNjU2MzU4NmRjOTVlMjg3NzI2MmIwYjVmNWVjMjdlYjRkNzU0YWE2ZmFjZDFkMzlkMjViMzhhMjM3Mjg5MWJhY2RkM2U5MTlmNzkxZWQyNTcwNGU4OTIwZTM4MGU1NjIzYTM4ZTZhMjM5MzU5NzhhM2FlYzdhOGU3NjFlMjExZDQyZWZmYTI3MTNlNDRlN2RlMGIwMjAzMDEwMDAxMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDUwNTAwMDM4MTgxMDAwOTJmNzQyNGQzZjZkYTRiODU1MzgyOWQ5NThlZDE5ODBiOTI3MGI0MmMwZDNkNTgzMzUwOWEyOGM2NmJiMjA3ZGY5ZjNjNTFkMTIyMDY1ZTAwYjg3YzA4YzI3MzBkMjc0NWZlMWMyNzlkMTZmYWU0ZDUzYjRiZjViZGZhMzYzMWZjZWViMmU3NzJiNmIwOGEzZWNhNWEyZTJjNjg3YWVmZDIzYjRiNzNiZjc3YWM2MDk5NzExMzQyY2YwNzBiMzVjNmY2MTMzM2E3Y2JmNjEzZDhkZDRiZDczZTlkZjM0YmNkNDI4NGIwYjRkZjU3YzM2YzQ1MDYxM2YxMWU1ZGFjIjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogNENcOjIwXDpFM1w6QkRcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9VVMsIFNUPUNBLCBPPUludGVybmV0IFdpZGdpdHMgUHR5IEx0ZCwgQ049RnJhbmtlbmNlcnQgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9VVMsIFNUPVdhc2hpbmd0b24sID8/PVVTLCA/Pz1EZWxhd2FyZSwgTz1BdXRob3JpemUuTmV0IExMQywgPz89UHJpdmF0ZSBPcmdhbml6YXRpb24sIHNlcmlhbE51bWJlcj00MzY5MTkxICsgQ049d3d3LmF1dGhvcml6ZS5uZXQsIEw9U2FuIEZyYW5jaXNjb1xuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMy0wOC0wMiAxNVw6MTRcOjM3XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDE1LTA4LTE3IDA1XDo1NFw6MzFcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQTFcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEwMjQgYml0c1xuIjowCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoTmFtZSB3aXRoIFBLQ1M5IGVtYWlsKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5ZjMwODE4OWEwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDE1MzExMzMwMTEwNjA5MmE4NjQ4ODZmNzBkMDEwOTAxMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAwMzAyMDBmZiI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDFcbnNlcmlhbCBudW1iZXIgICAgIFw6IERFXDpBRFw6QkVcOkVGXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBlbWFpbEFkZHJlc3M9VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogP1w/PVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAwOS0xMi0zMSAyM1w6NTlcOjU5XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBNRDJcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEyOCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChOYW1lIHdpdGggdW5rbm93biBQS0NTOSBwYXJ0KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5ZjMwODE4OWEwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDE1MzExMzMwMTEwNjA5MmE4NjQ4ODZmNzBkMDEwOWFiMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAwMzAyMDBmZiI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDFcbnNlcmlhbCBudW1iZXIgICAgIFw6IERFXDpBRFw6QkVcOkVGXG5pc3N1ZXIgbmFtZSAgICAgICBcOiA/XD89VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogP1w/PVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAwOS0xMi0zMSAyM1w6NTlcOjU5XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBNRDJcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEyOCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChFQ0RTQSBzaWduYXR1cmUsIFJTQSBrZXkpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19FQ0RTQV9DCit4NTA5cGFyc2VfY3J0OiIzMDgxRTYzMDgxOUUwMjAxMDMzMDA5MDYwNzJBODY0OENFM0QwNDAxMzAwRjMxMEQzMDBCMDYwMzU1MDQwMzEzMDQ1NDY1NzM3NDMwMUUxNzBEMzEzMzMwMzczMTMwMzAzOTM0MzYzMTM4NUExNzBEMzIzMzMwMzczMDM4MzAzOTM0MzYzMTM4NUEzMDBGMzEwRDMwMEIwNjAzNTUwNDAzMTMwNDU0NjU3Mzc0MzA0QzMwMEQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzM0IwMDMwMzgwMjMxMDBFOEY1NDYwNjFEM0I0OUJDMkY2Qjc1MjRCN0VBNEQ3M0E4RDUyOTNFRThDNjREOTQwN0I3MEI1RDE2QkFFQkMzMkI4MjA1NTkxRUFCNEUxRUI1N0U5MjQxODgzNzAxMjUwMjAzMDEwMDAxMzAwOTA2MDcyQTg2NDhDRTNEMDQwMTAzMzgwMDMwMzUwMjE4NkUxODIwOUFGQkVEMTRBMEQ5QTc5NkVGQ0FENjg4OTFFM0NDRDVGNzU4MTVDODMzMDIxOTAwRTkyQjRGRDQ2MEIxOTk0NjkzMjQzQjlGRkFENTQ3MjlERTg2NTM4MUJEQTQxRDI1IjoiY2VydC4gdmVyc2lvbiAgICAgXDogMVxuc2VyaWFsIG51bWJlciAgICAgXDogMDNcbmlzc3VlciBuYW1lICAgICAgIFw6IENOPVRlc3RcbnN1YmplY3QgbmFtZSAgICAgIFw6IENOPVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTMtMDctMTAgMDlcOjQ2XDoxOFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMy0wNy0wOCAwOVw6NDZcOjE4XG5zaWduZWQgdXNpbmcgICAgICBcOiBFQ0RTQSB3aXRoIFNIQTFcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDM4NCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChFQ0RTQSBzaWduYXR1cmUsIEVDIGtleSkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworeDUwOXBhcnNlX2NydDoiMzA4MUVCMzA4MUEzMDIwOTAwRjQxNTM0NjYyRUM3RTkxMjMwMDkwNjA3MkE4NjQ4Q0UzRDA0MDEzMDBGMzEwRDMwMEIwNjAzNTUwNDAzMTMwNDU0NjU3Mzc0MzAxRTE3MEQzMTMzMzAzNzMxMzAzMDM5MzQzMDMxMzk1QTE3MEQzMjMzMzAzNzMwMzgzMDM5MzQzMDMxMzk1QTMwMEYzMTBEMzAwQjA2MDM1NTA0MDMxMzA0NTQ2NTczNzQzMDQ5MzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTAxMDMzMjAwMDQyMTM3OTY5RkFCRDRFMzcwNjI0QTBFMUEzM0UzNzlDQUI5NTBDQ0UwMEVGOEMzQzNFMkFEQUVCNzI3MUM4RjA3NjU5RDY1RDNENzc3RENGMjE2MTQzNjNBRTRCNkU2MTczMDA5MDYwNzJBODY0OENFM0QwNDAxMDMzODAwMzAzNTAyMTg1OENDMEY5NTc5NDZGRTZBMzAzRDkyODg1QTQ1NkFBNzRDNzQzQzdCNzA4Q0JEMzcwMjE5MDBGRTI5M0NBQzIxQUYzNTJEMTZCODJFQjhFQTU0RTk0MTBCM0FCQUFERDlGMDVERDYiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAxXG5zZXJpYWwgbnVtYmVyICAgICBcOiBGNFw6MTVcOjM0XDo2Nlw6MkVcOkM3XDpFOVw6MTJcbmlzc3VlciBuYW1lICAgICAgIFw6IENOPVRlc3RcbnN1YmplY3QgbmFtZSAgICAgIFw6IENOPVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTMtMDctMTAgMDlcOjQwXDoxOVxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMy0wNy0wOCAwOVw6NDBcOjE5XG5zaWduZWQgdXNpbmcgICAgICBcOiBFQ0RTQSB3aXRoIFNIQTFcbkVDIGtleSBzaXplICAgICAgIFw6IDE5MiBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChSU0Egc2lnbmF0dXJlLCBFQyBrZXkpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODFFNDMwODE5RjAyMDEwNDMwMEQwNjA5MkE4NjQ4ODZGNzBEMDEwMTA1MDUwMDMwMEYzMTBEMzAwQjA2MDM1NTA0MDMxMzA0NTQ2NTczNzQzMDFFMTcwRDMxMzMzMDM3MzEzMDMxMzUzMDMyMzMzNzVBMTcwRDMyMzMzMDM3MzAzODMxMzUzMDMyMzMzNzVBMzAwRjMxMEQzMDBCMDYwMzU1MDQwMzEzMDQ1NDY1NzM3NDMwNDkzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDEwMzMyMDAwNEU5NjI1NTFBMzI1QjIxQjUwQ0Y2Qjk5MEUzM0Q0MzE4RkQxNjY3NzEzMDcyNjM1N0ExOTZFM0VGRTcxMDdCQ0I2QkRDNkQ5REIyQTRERjdDOTY0QUNGRTgxNzk4NDMzRDMwMEQwNjA5MkE4NjQ4ODZGNzBEMDEwMTA1MDUwMDAzMzEwMDFBNkMxOENEMUU0NTc0NzRCMkQzOTEyNzQzRjQ0QjU3MTM0MUE3ODU5QTAxMjI3NzRBOEUxOUE2NzE2ODA4Nzg5MzY5NDlGOTA0QzkyNTVCREQ2RkZGREIzM0E3RTZEOCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDFcbnNlcmlhbCBudW1iZXIgICAgIFw6IDA0XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDTj1UZXN0XG5zdWJqZWN0IG5hbWUgICAgICBcOiBDTj1UZXN0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEzLTA3LTEwIDE1XDowMlw6MzdcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjMtMDctMDggMTVcOjAyXDozN1xuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuRUMga2V5IHNpemUgICAgICAgXDogMTkyIGJpdHNcbiI6MAorCitYNTA5IENSTCBBU04xIChJbmNvcnJlY3QgZmlyc3QgdGFnKQoreDUwOXBhcnNlX2NybDoiIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUCisKK1g1MDkgQ1JMIEFTTjEgKENvcnJlY3QgZmlyc3QgdGFnLCBkYXRhIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCkKK3g1MDlwYXJzZV9jcmw6IjMwMDAwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCB0YWcgbWlzc2luZykKK3g1MDlwYXJzZV9jcmw6IjMwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCB2ZXJzaW9uIHRhZyBsZW4gbWlzc2luZykKK3g1MDlwYXJzZV9jcmw6IjMwMDMzMDAxMDIiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgdmVyc2lvbiBjb3JyZWN0LCBhbGcgbWlzc2luZykKK3g1MDlwYXJzZV9jcmw6IjMwMDUzMDAzMDIwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgYWxnIGNvcnJlY3QsIGluY29ycmVjdCB2ZXJzaW9uKQoreDUwOXBhcnNlX2NybDoiMzAwYjMwMDkwMjAxMDIzMDA0MDYwMDA1MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBjb3JyZWN0IHZlcnNpb24sIHNpZ19vaWQxIHVua25vd24pCit4NTA5cGFyc2VfY3JsOiIzMDBiMzAwOTAyMDEwMDMwMDQwNjAwMDUwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1NJR19BTEcKKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIHNpZ19vaWQxIGlkIHVua25vd24pCit4NTA5cGFyc2VfY3JsOiIzMDE0MzAxMjAyMDEwMDMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTBmMDUwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1NJR19BTEcKKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIHNpZ19vaWQxIGNvcnJlY3QsIGlzc3VlciBtaXNzaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcmw6IjMwMTQzMDEyMDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgaXNzdWVyIHNldCBtaXNzaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcmw6IjMwMTYzMDE0MDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMzAwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBjb3JyZWN0IGlzc3VlciwgdGhpc1VwZGF0ZSBtaXNzaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcmw6IjMwMjUzMDIzMDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ0MTQyNDM0NCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBjb3JyZWN0IHRoaXNVcGRhdGUsIG5leHRVcGRhdGUgbWlzc2luZywgZW50cmllcyBsZW5ndGggbWlzc2luZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5cGFyc2VfY3JsOiIzMDM0MzAzMjAyMDEwMDMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTBlMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NDE0MjQzNDQxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMzAiOiIiOk1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIGVudHJpZXMgcHJlc2VudCwgaW52YWxpZCBzaWdfYWxnKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcmw6IjMwNGEzMDQ3MDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ0MTQyNDM0NDE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAzMDE0MzAxMjgyMDJhYmNkMTcwYzMwMzgzMTMyMzMzMTMyMzMzNTM5MzUzOTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgZW50cmllcyBwcmVzZW50LCBkYXRlIGluIGVudHJ5IGludmFsaWQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NybDoiMzA0YTMwNDcwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDQxNDI0MzQ0MTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDMwMTQzMDEyODIwMmFiY2QxOTBjMzAzODMxMzIzMzMxMzIzMzM1MzkzNTM5MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgc2lnX2FsZyBwcmVzZW50LCBzaWdfYWxnIGRvZXMgbm90IG1hdGNoKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcmw6IjMwNTgzMDQ3MDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ0MTQyNDM0NDE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAzMDE0MzAxMjgyMDJhYmNkMTcwYzMwMzgzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTBkMDUwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9TSUdfTUlTTUFUQ0gKKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIHNpZyBwcmVzZW50LCBsZW4gbWlzbWF0Y2gpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NybDoiMzA1ZDMwNDcwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDQxNDI0MzQ0MTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDMwMTQzMDEyODIwMmFiY2QxNzBjMzAzODMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMDMwMjAwMDEwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBzaWcgcHJlc2VudCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5cGFyc2VfY3JsOiIzMDVjMzA0NzAyMDEwMDMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTBlMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NDE0MjQzNDQxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMzAxNDMwMTI4MjAyYWJjZDE3MGMzMDM4MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAwMzAyMDAwMSI6IkNSTCB2ZXJzaW9uICAgXDogMVxuaXNzdWVyIG5hbWUgICBcOiBDTj1BQkNEXG50aGlzIHVwZGF0ZSAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxubmV4dCB1cGRhdGUgICBcOiAwMDAwLTAwLTAwIDAwXDowMFw6MDBcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiBBQlw6Q0QgcmV2b2NhdGlvbiBkYXRlXDogMjAwOC0xMi0zMSAyM1w6NTlcOjU5XG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIFNIQS0yMjRcbiI6MAorCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgbm8gZW50cmllcykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5cGFyc2VfY3JsOiIzMDQ2MzAzMTAyMDEwMDMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTBlMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NDE0MjQzNDQxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMDMwMjAwMDEiOiJDUkwgdmVyc2lvbiAgIFw6IDFcbmlzc3VlciBuYW1lICAgXDogQ049QUJDRFxudGhpcyB1cGRhdGUgICBcOiAyMDA5LTAxLTAxIDAwXDowMFw6MDBcbm5leHQgdXBkYXRlICAgXDogMDAwMC0wMC0wMCAwMFw6MDBcOjAwXG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIFNIQS0yMjRcbiI6MAorCitYNTA5IENSVCBwYXJzZSBwYXRoICMyIChvbmUgY2VydCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQworbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoOiJkYXRhX2ZpbGVzL2RpcjEiOjA6MQorCitYNTA5IENSVCBwYXJzZSBwYXRoICMzICh0d28gY2VydHMpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK21iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aDoiZGF0YV9maWxlcy9kaXIyIjowOjIKKworWDUwOSBDUlQgcGFyc2UgcGF0aCAjNCAodHdvIGNlcnRzLCBvbmUgbm9uLWNlcnQpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK21iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aDoiZGF0YV9maWxlcy9kaXIzIjoxOjIKKworWDUwOSBDUlQgdmVyaWZ5IGNoYWluICMxICh6ZXJvIHBhdGhsZW4gaW50ZXJtZWRpYXRlKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0MKK21iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2NoYWluOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDE0LmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDEzLmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDEyLmNydCI6ImRhdGFfZmlsZXMvZGlyNC9jZXJ0MTEuY3J0IjpNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRAorCitYNTA5IENSVCB2ZXJpZnkgY2hhaW4gIzIgKHplcm8gcGF0aGxlbiByb290KQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0MKK21iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2NoYWluOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDIzLmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDIyLmNydCI6ImRhdGFfZmlsZXMvZGlyNC9jZXJ0MjEuY3J0IjpNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRAorCitYNTA5IENSVCB2ZXJpZnkgY2hhaW4gIzMgKG5vbnplcm8gcGF0aGxlbiByb290KQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0MKK21iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2NoYWluOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDM0LmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDMzLmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDMyLmNydCI6ImRhdGFfZmlsZXMvZGlyNC9jZXJ0MzEuY3J0IjpNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRAorCitYNTA5IENSVCB2ZXJpZnkgY2hhaW4gIzQgKG5vbnplcm8gcGF0aGxlbiBpbnRlcm1lZGlhdGUpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19SU0FfQworbWJlZHRsc194NTA5X2NydF92ZXJpZnlfY2hhaW46ImRhdGFfZmlsZXMvZGlyNC9jZXJ0NDUuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0NDQuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0NDMuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0NDIuY3J0IjoiZGF0YV9maWxlcy9kaXI0L2NlcnQ0MS5jcnQiOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVECisKK1g1MDkgQ1JUIHZlcmlmeSBjaGFpbiAjNSAobm9uemVybyBtYXhwYXRobGVuIGludGVybWVkaWF0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1JTQV9DCittYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9jaGFpbjoiZGF0YV9maWxlcy9kaXI0L2NlcnQ1NC5jcnQgZGF0YV9maWxlcy9kaXI0L2NlcnQ1My5jcnQgZGF0YV9maWxlcy9kaXI0L2NlcnQ1Mi5jcnQiOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDUxLmNydCI6MAorCitYNTA5IENSVCB2ZXJpZnkgY2hhaW4gIzYgKG5vbnplcm8gbWF4cGF0aGxlbiByb290KQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0MKK21iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2NoYWluOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDYzLmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDYyLmNydCI6ImRhdGFfZmlsZXMvZGlyNC9jZXJ0NjEuY3J0IjowCisKK1g1MDkgQ1JUIHZlcmlmeSBjaGFpbiAjNyAobWF4cGF0aGxlbiByb290LCBzZWxmIHNpZ25lZCBpbiBwYXRoKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0MKK21iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2NoYWluOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDc0LmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDczLmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDcyLmNydCI6ImRhdGFfZmlsZXMvZGlyNC9jZXJ0NzEuY3J0IjowCisKK1g1MDkgQ1JUIHZlcmlmeSBjaGFpbiAjOCAoc2VsZiBzaWduZWQgbWF4cGF0aGxlbiByb290KQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0MKK21iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2NoYWluOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDYxLmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDYzLmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDYyLmNydCI6ImRhdGFfZmlsZXMvZGlyNC9jZXJ0NjEuY3J0IjowCisKK1g1MDkgQ1JUIHZlcmlmeSBjaGFpbiAjOSAoemVybyBwYXRobGVuIGZpcnN0IGludGVybWVkaWF0ZSwgdmFsaWQpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9jaGFpbjoiZGF0YV9maWxlcy9kaXI0L2NlcnQ4My5jcnQgZGF0YV9maWxlcy9kaXI0L2NlcnQ4Mi5jcnQiOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDgxLmNydCI6MAorCitYNTA5IENSVCB2ZXJpZnkgY2hhaW4gIzEwICh6ZXJvIHBhdGhsZW4gcm9vdCwgdmFsaWQpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9jaGFpbjoiZGF0YV9maWxlcy9kaXI0L2NlcnQ5Mi5jcnQiOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDkxLmNydCI6MAorCitYNTA5IE9JRCBkZXNjcmlwdGlvbiAjMQoreDUwOV9vaWRfZGVzYzoiMkIwNjAxMDUwNTA3MDMwMSI6IlRMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uIgorCitYNTA5IE9JRCBkZXNjcmlwdGlvbiAjMgoreDUwOV9vaWRfZGVzYzoiMkIwNjAxMDUwNTA3MDMwZiI6Im5vdGZvdW5kIgorCitYNTA5IE9JRCBkZXNjcmlwdGlvbiAjMworeDUwOV9vaWRfZGVzYzoiMkIwNjAxMDUwNTA3MDMwMTAwIjoibm90Zm91bmQiCisKK1g1MDkgT0lEIG51bXN0cmluZyAjMSAod2lkZSBidWZmZXIpCit4NTA5X29pZF9udW1zdHI6IjJCMDYwMTA1MDUwNzAzMDEiOiIxLjMuNi4xLjUuNS43LjMuMSI6MjA6MTcKKworWDUwOSBPSUQgbnVtc3RyaW5nICMyIChidWZmZXIganVzdCBmaXRzKQoreDUwOV9vaWRfbnVtc3RyOiIyQjA2MDEwNTA1MDcwMzAxIjoiMS4zLjYuMS41LjUuNy4zLjEiOjE4OjE3CisKK1g1MDkgT0lEIG51bXN0cmluZyAjMyAoYnVmZmVyIHRvbyBzbWFsbCkKK3g1MDlfb2lkX251bXN0cjoiMkIwNjAxMDUwNTA3MDMwMSI6IjEuMy42LjEuNS41LjcuMy4xIjoxNzpNQkVEVExTX0VSUl9PSURfQlVGX1RPT19TTUFMTAorCitYNTA5IE9JRCBudW1zdHJpbmcgIzQgKGxhcmdlciBudW1iZXIpCit4NTA5X29pZF9udW1zdHI6IjJBODY0ODg2RjcwRCI6IjEuMi44NDAuMTEzNTQ5IjoxNToxNAorCitYNTA5IE9JRCBudW1zdHJpbmcgIzUgKGFyaXRobWV0aWMgb3ZlcmZsb3cpCit4NTA5X29pZF9udW1zdHI6IjJBODY0OEY5RjhGN0Y2RjVGNEYzRjJGMUYwMDEiOiIiOjEwMDpNQkVEVExTX0VSUl9PSURfQlVGX1RPT19TTUFMTAorCitYNTA5IGNydCBrZXlVc2FnZSAjMSAobm8gZXh0ZW5zaW9uLCBleHBlY3RlZCBLVSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jaGVja19rZXlfdXNhZ2U6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOk1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRXxNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVDowCisKK1g1MDkgY3J0IGtleVVzYWdlICMyIChubyBleHRlbnNpb24sIHN1cnByaXNpbmcgS1UpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2hlY2tfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjpNQkVEVExTX1g1MDlfS1VfS0VZX0NFUlRfU0lHTjowCisKK1g1MDkgY3J0IGtleVVzYWdlICMzIChleHRlbnNpb24gcHJlc2VudCwgbm8gS1UpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2hlY2tfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5X3VzYWdlLmNydCI6MDowCisKK1g1MDkgY3J0IGtleVVzYWdlICM0IChleHRlbnNpb24gcHJlc2VudCwgc2luZ2xlIEtVIHByZXNlbnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2hlY2tfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5X3VzYWdlLmNydCI6TUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFOjAKKworWDUwOSBjcnQga2V5VXNhZ2UgIzUgKGV4dGVuc2lvbiBwcmVzZW50LCBzaW5nbGUgS1UgYWJzZW50KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NoZWNrX2tleV91c2FnZToiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleV91c2FnZS5jcnQiOk1CRURUTFNfWDUwOV9LVV9LRVlfQ0VSVF9TSUdOOk1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEKKworWDUwOSBjcnQga2V5VXNhZ2UgIzYgKGV4dGVuc2lvbiBwcmVzZW50LCBjb21iaW5lZCBLVSBwcmVzZW50KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NoZWNrX2tleV91c2FnZToiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleV91c2FnZS5jcnQiOk1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRXxNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVDowCisKK1g1MDkgY3J0IGtleVVzYWdlICM3IChleHRlbnNpb24gcHJlc2VudCwgY29tYmluZWQgS1UgYm90aCBhYnNlbnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2hlY2tfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5X3VzYWdlLmNydCI6TUJFRFRMU19YNTA5X0tVX0tFWV9DRVJUX1NJR058TUJFRFRMU19YNTA5X0tVX0NSTF9TSUdOOk1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEKKworWDUwOSBjcnQga2V5VXNhZ2UgIzggKGV4dGVuc2lvbiBwcmVzZW50LCBjb21iaW5lZCBLVSBvbmUgYWJzZW50KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NoZWNrX2tleV91c2FnZToiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleV91c2FnZS5jcnQiOk1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UfE1CRURUTFNfWDUwOV9LVV9LRVlfQUdSRUVNRU5UOk1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEKKworWDUwOSBjcnQga2V5VXNhZ2UgIzkgKGV4dGVuc2lvbiBwcmVzZW50LCBkZWNPbmx5IGFsbG93ZWQgYWJzZW50KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NoZWNrX2tleV91c2FnZToiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleV91c2FnZS5jcnQiOk1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRXxNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVHxNQkVEVExTX1g1MDlfS1VfREVDSVBIRVJfT05MWTowCisKK1g1MDkgY3J0IGtleVVzYWdlICMxMCAoZXh0ZW5zaW9uIHByZXNlbnQsIGRlY09ubHkgbm9uLWFsbG93ZWQgcHJlc2VudCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jaGVja19rZXlfdXNhZ2U6ImRhdGFfZmlsZXMva2V5VXNhZ2UuZGVjaXBoZXJPbmx5LmNydCI6TUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFfE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UOk1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEKKworWDUwOSBjcnQga2V5VXNhZ2UgIzExIChleHRlbnNpb24gcHJlc2VudCwgZGVjT25seSBhbGxvd2VkIHByZXNlbnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2hlY2tfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL2tleVVzYWdlLmRlY2lwaGVyT25seS5jcnQiOk1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRXxNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVHxNQkVEVExTX1g1MDlfS1VfREVDSVBIRVJfT05MWTowCisKK1g1MDkgY3J0IGV4dGVuZGVkS2V5VXNhZ2UgIzEgKG5vIGV4dGVuc2lvbiwgc2VydmVyQXV0aCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X2NoZWNrX2V4dGVuZGVkX2tleV91c2FnZToiZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCI6IjJCMDYwMTA1MDUwNzAzMDEiOjAKKworWDUwOSBjcnQgZXh0ZW5kZWRLZXlVc2FnZSAjMiAoc2luZ2xlIHZhbHVlLCBwcmVzZW50KQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LXNydi5jcnQiOiIyQjA2MDEwNTA1MDcwMzAxIjowCisKK1g1MDkgY3J0IGV4dGVuZGVkS2V5VXNhZ2UgIzMgKHNpbmdsZSB2YWx1ZSwgYWJzZW50KQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LWNsaS5jcnQiOiIyQjA2MDEwNTA1MDcwMzAxIjpNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBCisKK1g1MDkgY3J0IGV4dGVuZGVkS2V5VXNhZ2UgIzQgKHR3byB2YWx1ZXMsIGZpcnN0KQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LXNydl9jbGkuY3J0IjoiMkIwNjAxMDUwNTA3MDMwMSI6MAorCitYNTA5IGNydCBleHRlbmRlZEtleVVzYWdlICM1ICh0d28gdmFsdWVzLCBzZWNvbmQpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jaGVja19leHRlbmRlZF9rZXlfdXNhZ2U6ImRhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2X2NsaS5jcnQiOiIyQjA2MDEwNTA1MDcwMzAyIjowCisKK1g1MDkgY3J0IGV4dGVuZGVkS2V5VXNhZ2UgIzYgKHR3byB2YWx1ZXMsIG90aGVyKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LXNydl9jbGkuY3J0IjoiMkIwNjAxMDUwNTA3MDMwMyI6TUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQQorCitYNTA5IGNydCBleHRlbmRlZEtleVVzYWdlICM3IChhbnksIHJhbmRvbSkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X2NoZWNrX2V4dGVuZGVkX2tleV91c2FnZToiZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jc19hbnkuY3J0IjoiMkIwNjAxMDUwNTA3MDNGRiI6MAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChnb29kLCBhbGwgZGVmYXVsdHMpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiIiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOjAKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAod3JvbmcgaW5pdGlhbCB0YWcpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiIiOk1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKHVua25vd24gdGFnIGluIHRvcC1sZXZlbCBzZXF1ZW5jZSkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkE0MDAiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChnb29kLCBIYXNoQWxnIFNIQTI1NikKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMDBEMzAwQjA2MDk2MDg2NDgwMTY1MDMwNDAyMDEiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX01EX1NIQTE6MjA6MAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChnb29kLCBleHBsaWNpdCBIYXNoQWxnID0gZGVmYXVsdCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTAwOTMwMDcwNjA1MkIwRTAzMDIxQSI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjA6MAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChIYXNoQWxnIHdyb25nIGxlbiAjMSkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEwMEEzMDA3MDYwNTJCMEUwMzAyMUEiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKEhhc2hBbGcgd3JvbmcgbGVuICMyKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMDBBMzAwNzA2MDUyQjBFMDMwMjFBMDAiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChIYXNoQWxnIHdpdGggcGFyYW1ldGVycykKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEwMEYzMDBEMDYwOTYwODY0ODAxNjUwMzA0MDIwMTMwMDAiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX01EX1NIQTE6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9EQVRBCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKEhhc2hBbGcgdW5rbm93biBPSUQpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMDBEMzAwQjA2MDk2MDg2NDgwMTY1MDMwNDAyRkYiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX01EX1NIQTE6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoZ29vZCwgTUdBbGcgPSBNR0YxLVNIQTI1NikKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMTFBMzAxODA2MDkyQTg2NDg4NkY3MEQwMTAxMDgzMDBCMDYwOTYwODY0ODAxNjUwMzA0MDIwMSI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTI1NjoyMDowCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKGdvb2QsIGV4cGxpY2l0IE1HQWxnID0gZGVmYXVsdCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTExNjMwMTQwNjA5MkE4NjQ4ODZGNzBEMDEwMTA4MzAwNzA2MDUyQjBFMDMwMjFBIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToyMDowCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKE1HQWxnIHdyb25nIGxlbiAjMSkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkExMUIzMDE4MDYwOTJBODY0ODg2RjcwRDAxMDEwODMwMEIwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKE1HQWxnIHdyb25nIGxlbiAjMikKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMTFCMzAxODA2MDkyQTg2NDg4NkY3MEQwMTAxMDgzMDBCMDYwOTYwODY0ODAxNjUwMzA0MDIwMTAwIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChNR0FsZyBBbGdJZCB3cm9uZyBsZW4gIzEpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMTFBMzAxOTA2MDkyQTg2NDg4NkY3MEQwMTAxMDgzMDBCMDYwOTYwODY0ODAxNjUwMzA0MDIwMSI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTI1NjoyMDpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChNR0FsZyBPSUQgIT0gTUdGMSkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkExMUEzMDE4MDYwOTJBODY0ODg2RjcwRDAxMDEwOTMwMEIwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOk1CRURUTFNfRVJSX1g1MDlfRkVBVFVSRV9VTkFWQUlMQUJMRSArIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoTUdBbGcucGFyYW1zIHdyb25nIHRhZykKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkExMUEzMDE4MDYwOTJBODY0ODg2RjcwRDAxMDEwODMxMEIwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKE1HQWxnLnBhcmFtcyB3cm9uZyBsZW4gIzFhKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTEwRjMwMEQwNjA5MkE4NjQ4ODZGNzBEMDEwMTA4MzAwMCI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTI1NjoyMDpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChNR0FsZy5wYXJhbXMgd3JvbmcgbGVuICMxYikKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkExMUIzMDE5MDYwOTJBODY0ODg2RjcwRDAxMDEwODMwMEMwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKE1HQWxnLnBhcmFtcy5hbGcgbm90IGFuIE9JRCkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkExMUEzMDE4MDYwOTJBODY0ODg2RjcwRDAxMDEwODMwMEIwNzA5NjA4NjQ4MDE2NTAzMDQwMjAxIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKE1HQWxnLnBhcmFtcy5hbGcgdW5rbm93biBPSUQpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMTFBMzAxODA2MDkyQTg2NDg4NkY3MEQwMTAxMDgzMDBCMDYwOTYwODY0ODAxNjUwMzA0MDJGRiI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTI1NjoyMDpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChNR0FsZy5wYXJhbXMucGFyYW1zIE5VTEwpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTExQzMwMUEwNjA5MkE4NjQ4ODZGNzBEMDEwMTA4MzAwRDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOjAKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoTUdBbGcucGFyYW1zLnBhcmFtcyB3cm9uZyB0YWcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTExQzMwMUEwNjA5MkE4NjQ4ODZGNzBEMDEwMTA4MzAwRDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEzMDAwIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKE1HQWxnLnBhcmFtcyB3cm9uZyBsZW4gIzFjKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTExRDMwMUIwNjA5MkE4NjQ4ODZGNzBEMDEwMTA4MzAwRTA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKE1HQWxnLnBhcmFtcyB3cm9uZyBsZW4gIzIpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTExRDMwMUIwNjA5MkE4NjQ4ODZGNzBEMDEwMTA4MzAwRTA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDAiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKGdvb2QsIHNhbHRMZW4gPSA5NCkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEyMDMwMjAxNUUiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjk0OjAKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoZ29vZCwgZXhwbGljaXQgc2FsdExlbiA9IGRlZmF1bHQpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMjAzMDIwMTE0IjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToyMDowCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKHNhbHRMZW4gd3JvbmcgbGVuICMxKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTIwNDAyMDE1RSI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6OTQ6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoc2FsdExlbiB3cm9uZyBsZW4gIzIpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMjA0MDIwMTVFMDAiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjk0Ok1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChzYWx0TGVuIG5vdCBhbiBpbnQpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMjAyMzAwMCI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6OTQ6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoZ29vZCwgZXhwbGljaXQgdHJhaWxlckZpZWxkID0gZGVmYXVsdCkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEzMDMwMjAxMDEiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOjAKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAodHJhaWxlckZpZWxkIHdyb25nIGxlbiAjMSkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEzMDQwMjAxMDEiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKHRyYWlsZXJGaWVsZCB3cm9uZyBsZW4gIzIpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMzA0MDIwMTAxMDAiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xICh0cmFpbGVyRmllbGQgbm90IGFuIGludCkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEzMDIzMDAwIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToyMDpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xICh0cmFpbGVyRmllbGQgbm90IDEpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMzAzMDIwMTAyIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToyMDpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHCisKK1g1MDkgQ1NSIEFTTi4xIChPSykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzA4MjAxMTgzMDgxQkYwMjAxMDAzMDM0MzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMTExMzAwRjA2MDM1NTA0MEExMzA4NTA2RjZDNjE3MjUzNTM0QzMxMTIzMDEwMDYwMzU1MDQwMzEzMDk2QzZGNjM2MTZDNjg2RjczNzQzMDU5MzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRkEwMjkzMDI3MDYwOTJBODY0ODg2RjcwRDAxMDkwRTMxMUEzMDE4MzAwOTA2MDM1NTFEMTMwNDAyMzAwMDMwMEIwNjAzNTUxRDBGMDQwNDAzMDIwNUUwMzAwOTA2MDcyQTg2NDhDRTNEMDQwMTAzNDkwMDMwNDYwMjIxMDBCNDlGRDhDOEY3N0FCRkE4NzE5MDhERkJFNjg0QTA4QTc5M0QwRjQ5MEE0M0Q4NkZDRjIwODZFNEYyNEJCMEMyMDIyMTAwRjgyOUQ1Q0NEMzc0MjM2OTI5OUU2Mjk0Mzk0NzE3QzRCNzIzQTBGNjhCNDRFODMxQjZFNkMzQkNBQkY5NzI0MyI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3RcbnNpZ25lZCB1c2luZyAgXDogRUNEU0Egd2l0aCBTSEExXG5FQyBrZXkgc2l6ZSAgIFw6IDI1NiBiaXRzXG4iOjAKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBmaXJzdCB0YWcpCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgc2VxdWVuY2U6IG92ZXJsb25nKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAwMSI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVAorCitYNTA5IENTUiBBU04uMSAodG90YWwgbGVuZ3RoIG1pc3RtYXRjaCkKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwMDEwMDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBDUkk6IG5vdCBhIHNlcXVlbmNlKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAwMjMxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgQ1JJOiBvdmVybG9uZykKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwMDIzMDAxIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENTUiBBU04uMSAoYmFkIENSSS5WZXJzaW9uOiBvdmVybG9uZykKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwMDUzMDAyMDIwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfVkVSU0lPTiArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBDUkkuVmVyc2lvbjogbm90IHYxKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAwNTMwMDMwMjAxMDEiOiIiOk1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgQ1JJLk5hbWU6IG5vdCBhIHNlcXVlbmNlKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAwNzMwMDUwMjAxMDAzMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENTUiBBU04uMSAoYmFkIENSSS5OYW1lOiBvdmVybG9uZykKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwMDgzMDA1MDIwMTAwMzAwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENTUiBBU04uMSAoYmFkIENSSS5OYW1lIHBheWxvYWQ6IG5vdCBhIHNldCkKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwMDkzMDA3MDIwMTAwMzAwMjMwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENTUiBBU04uMSAoYmFkIENSSS5OYW1lIHBheWxvYWQ6IG92ZXJsb25nKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAwQTMwMDgwMjAxMDAzMDAyMzEwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBTdWJqZWN0UHVibGljS2V5SW5mbzogbWlzc2luZykKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwMTQzMDEyMDIwMTAwMzAwRDMxMEIzMDA5MDYwMzU1MDQwNjEzMDI0RTRDIjoiIjpNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgU3ViamVjdFB1YmxpY0tleUluZm86IG5vdCBhIHNlcXVlbmNlKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAxNjMwMTQwMjAxMDAzMDBEMzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMTAwIjoiIjpNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgU3ViamVjdFB1YmxpY0tleUluZm86IG92ZXJsb25nKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAxNzMwMTQwMjAxMDAzMDBEMzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMDAxMDAiOiIiOk1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBhdHRyaWJ1dGVzOiBtaXNzaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDgxOTczMDgxOTQwMjAxMDAzMDM0MzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMTExMzAwRjA2MDM1NTA0MEExMzA4NTA2RjZDNjE3MjUzNTM0QzMxMTIzMDEwMDYwMzU1MDQwMzEzMDk2QzZGNjM2MTZDNjg2RjczNzQzMDU5MzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRiI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBhdHRyaWJ1dGVzOiBiYWQgdGFnKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDgxOTkzMDgxOTYwMjAxMDAzMDM0MzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMTExMzAwRjA2MDM1NTA0MEExMzA4NTA2RjZDNjE3MjUzNTM0QzMxMTIzMDEwMDYwMzU1MDQwMzEzMDk2QzZGNjM2MTZDNjg2RjczNzQzMDU5MzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRjA1MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgYXR0cmlidXRlczogb3ZlcmxvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwODE5QTMwODE5NjAyMDEwMDMwMzQzMTBCMzAwOTA2MDM1NTA0MDYxMzAyNEU0QzMxMTEzMDBGMDYwMzU1MDQwQTEzMDg1MDZGNkM2MTcyNTM1MzRDMzExMjMwMTAwNjAzNTUwNDAzMTMwOTZDNkY2MzYxNkM2ODZGNzM3NDMwNTkzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDcwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGQTAwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENTUiBBU04uMSAoYmFkIHNpZ0FsZzogbWlzc2luZykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzA4MUMyMzA4MUJGMDIwMTAwMzAzNDMxMEIzMDA5MDYwMzU1MDQwNjEzMDI0RTRDMzExMTMwMEYwNjAzNTUwNDBBMTMwODUwNkY2QzYxNzI1MzUzNEMzMTEyMzAxMDA2MDM1NTA0MDMxMzA5NkM2RjYzNjE2QzY4NkY3Mzc0MzA1OTMwMTMwNjA3MkE4NjQ4Q0UzRDAyMDEwNjA4MkE4NjQ4Q0UzRDAzMDEwNzAzNDIwMDA0MzdDQzU2RDk3NjA5MUU1QTcyM0VDNzU5MkRGRjIwNkVFRTdDRjkwNjkxNzREMEFEMTRCNUY3NjgyMjU5NjI5MjRFRTUwMEQ4MjMxMUZGRUEyRkQyMzQ1RDVEMTZCRDhBODhDMjZCNzcwRDU1Q0Q4QTJBMEVGQTAxQzhCNEVERkZBMDI5MzAyNzA2MDkyQTg2NDg4NkY3MEQwMTA5MEUzMTFBMzAxODMwMDkwNjAzNTUxRDEzMDQwMjMwMDAzMDBCMDYwMzU1MUQwRjA0MDQwMzAyMDVFMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBzaWdBbGc6IG5vdCBhIHNlcXVlbmNlKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDgxQzQzMDgxQkYwMjAxMDAzMDM0MzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMTExMzAwRjA2MDM1NTA0MEExMzA4NTA2RjZDNjE3MjUzNTM0QzMxMTIzMDEwMDYwMzU1MDQwMzEzMDk2QzZGNjM2MTZDNjg2RjczNzQzMDU5MzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRkEwMjkzMDI3MDYwOTJBODY0ODg2RjcwRDAxMDkwRTMxMUEzMDE4MzAwOTA2MDM1NTFEMTMwNDAyMzAwMDMwMEIwNjAzNTUxRDBGMDQwNDAzMDIwNUUwMzEwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBzaWdBbGc6IG92ZXJsb25nKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDgxQzQzMDgxQkYwMjAxMDAzMDM0MzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMTExMzAwRjA2MDM1NTA0MEExMzA4NTA2RjZDNjE3MjUzNTM0QzMxMTIzMDEwMDYwMzU1MDQwMzEzMDk2QzZGNjM2MTZDNjg2RjczNzQzMDU5MzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRkEwMjkzMDI3MDYwOTJBODY0ODg2RjcwRDAxMDkwRTMxMUEzMDE4MzAwOTA2MDM1NTFEMTMwNDAyMzAwMDMwMEIwNjAzNTUxRDBGMDQwNDAzMDIwNUUwMzAwMSI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBzaWdBbGc6IHVua25vd24pCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwODFDRDMwODFCRjAyMDEwMDMwMzQzMTBCMzAwOTA2MDM1NTA0MDYxMzAyNEU0QzMxMTEzMDBGMDYwMzU1MDQwQTEzMDg1MDZGNkM2MTcyNTM1MzRDMzExMjMwMTAwNjAzNTUwNDAzMTMwOTZDNkY2MzYxNkM2ODZGNzM3NDMwNTkzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDcwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGQTAyOTMwMjcwNjA5MkE4NjQ4ODZGNzBEMDEwOTBFMzExQTMwMTgzMDA5MDYwMzU1MUQxMzA0MDIzMDAwMzAwQjA2MDM1NTFEMEYwNDA0MDMwMjA1RTAzMDA5MDYwNzJBODY0OENFM0QwNEZGIjoiIjpNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRworCitYNTA5IENTUiBBU04uMSAoYmFkIHNpZzogbWlzc2luZykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzA4MUNEMzA4MUJGMDIwMTAwMzAzNDMxMEIzMDA5MDYwMzU1MDQwNjEzMDI0RTRDMzExMTMwMEYwNjAzNTUwNDBBMTMwODUwNkY2QzYxNzI1MzUzNEMzMTEyMzAxMDA2MDM1NTA0MDMxMzA5NkM2RjYzNjE2QzY4NkY3Mzc0MzA1OTMwMTMwNjA3MkE4NjQ4Q0UzRDAyMDEwNjA4MkE4NjQ4Q0UzRDAzMDEwNzAzNDIwMDA0MzdDQzU2RDk3NjA5MUU1QTcyM0VDNzU5MkRGRjIwNkVFRTdDRjkwNjkxNzREMEFEMTRCNUY3NjgyMjU5NjI5MjRFRTUwMEQ4MjMxMUZGRUEyRkQyMzQ1RDVEMTZCRDhBODhDMjZCNzcwRDU1Q0Q4QTJBMEVGQTAxQzhCNEVERkZBMDI5MzAyNzA2MDkyQTg2NDg4NkY3MEQwMTA5MEUzMTFBMzAxODMwMDkwNjAzNTUxRDEzMDQwMjMwMDAzMDBCMDYwMzU1MUQwRjA0MDQwMzAyMDVFMDMwMDkwNjA3MkE4NjQ4Q0UzRDA0MDEiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TSUdOQVRVUkUgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgc2lnOiBub3QgYSBiaXQgc3RyaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDgxQ0YzMDgxQkYwMjAxMDAzMDM0MzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMTExMzAwRjA2MDM1NTA0MEExMzA4NTA2RjZDNjE3MjUzNTM0QzMxMTIzMDEwMDYwMzU1MDQwMzEzMDk2QzZGNjM2MTZDNjg2RjczNzQzMDU5MzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRkEwMjkzMDI3MDYwOTJBODY0ODg2RjcwRDAxMDkwRTMxMUEzMDE4MzAwOTA2MDM1NTFEMTMwNDAyMzAwMDMwMEIwNjAzNTUxRDBGMDQwNDAzMDIwNUUwMzAwOTA2MDcyQTg2NDhDRTNEMDQwMTA0MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TSUdOQVRVUkUgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgc2lnOiBvdmVybG9uZykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzA4MUNGMzA4MUJGMDIwMTAwMzAzNDMxMEIzMDA5MDYwMzU1MDQwNjEzMDI0RTRDMzExMTMwMEYwNjAzNTUwNDBBMTMwODUwNkY2QzYxNzI1MzUzNEMzMTEyMzAxMDA2MDM1NTA0MDMxMzA5NkM2RjYzNjE2QzY4NkY3Mzc0MzA1OTMwMTMwNjA3MkE4NjQ4Q0UzRDAyMDEwNjA4MkE4NjQ4Q0UzRDAzMDEwNzAzNDIwMDA0MzdDQzU2RDk3NjA5MUU1QTcyM0VDNzU5MkRGRjIwNkVFRTdDRjkwNjkxNzREMEFEMTRCNUY3NjgyMjU5NjI5MjRFRTUwMEQ4MjMxMUZGRUEyRkQyMzQ1RDVEMTZCRDhBODhDMjZCNzcwRDU1Q0Q4QTJBMEVGQTAxQzhCNEVERkZBMDI5MzAyNzA2MDkyQTg2NDg4NkY3MEQwMTA5MEUzMTFBMzAxODMwMDkwNjAzNTUxRDEzMDQwMjMwMDAzMDBCMDYwMzU1MUQwRjA0MDQwMzAyMDVFMDMwMDkwNjA3MkE4NjQ4Q0UzRDA0MDEwMzAxIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0lHTkFUVVJFICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENTUiBBU04uMSAoZXh0cmEgZGF0YSBhZnRlciBzaWduYXR1cmUpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwODIwMTE5MzA4MUJGMDIwMTAwMzAzNDMxMEIzMDA5MDYwMzU1MDQwNjEzMDI0RTRDMzExMTMwMEYwNjAzNTUwNDBBMTMwODUwNkY2QzYxNzI1MzUzNEMzMTEyMzAxMDA2MDM1NTA0MDMxMzA5NkM2RjYzNjE2QzY4NkY3Mzc0MzA1OTMwMTMwNjA3MkE4NjQ4Q0UzRDAyMDEwNjA4MkE4NjQ4Q0UzRDAzMDEwNzAzNDIwMDA0MzdDQzU2RDk3NjA5MUU1QTcyM0VDNzU5MkRGRjIwNkVFRTdDRjkwNjkxNzREMEFEMTRCNUY3NjgyMjU5NjI5MjRFRTUwMEQ4MjMxMUZGRUEyRkQyMzQ1RDVEMTZCRDhBODhDMjZCNzcwRDU1Q0Q4QTJBMEVGQTAxQzhCNEVERkZBMDI5MzAyNzA2MDkyQTg2NDg4NkY3MEQwMTA5MEUzMTFBMzAxODMwMDkwNjAzNTUxRDEzMDQwMjMwMDAzMDBCMDYwMzU1MUQwRjA0MDQwMzAyMDVFMDMwMDkwNjA3MkE4NjQ4Q0UzRDA0MDEwMzQ5MDAzMDQ2MDIyMTAwQjQ5RkQ4QzhGNzdBQkZBODcxOTA4REZCRTY4NEEwOEE3OTNEMEY0OTBBNDNEODZGQ0YyMDg2RTRGMjRCQjBDMjAyMjEwMEY4MjlENUNDRDM3NDIzNjkyOTlFNjI5NDM5NDcxN0M0QjcyM0EwRjY4QjQ0RTgzMUI2RTZDM0JDQUJGOTcyNDMwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgRmlsZSBwYXJzZSAobm8gaXNzdWVzKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcnRfZmlsZToiZGF0YV9maWxlcy9zZXJ2ZXI3X2ludC1jYS5jcnQiOjAKKworWDUwOSBGaWxlIHBhcnNlIChleHRyYSBzcGFjZSBpbiBvbmUgY2VydGlmaWNhdGUpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NydF9maWxlOiJkYXRhX2ZpbGVzL3NlcnZlcjdfcGVtX3NwYWNlLmNydCI6MQorCitYNTA5IEZpbGUgcGFyc2UgKGFsbCBjZXJ0aWZpY2F0ZXMgZmFpbCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQworeDUwOXBhcnNlX2NydF9maWxlOiJkYXRhX2ZpbGVzL3NlcnZlcjdfYWxsX3NwYWNlLmNydCI6TUJFRFRMU19FUlJfUEVNX0lOVkFMSURfREFUQSArIE1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUgorCitYNTA5IEZpbGUgcGFyc2UgKHRyYWlsaW5nIHNwYWNlcywgT0spCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NydF9maWxlOiJkYXRhX2ZpbGVzL3NlcnZlcjdfdHJhaWxpbmdfc3BhY2UuY3J0IjowCisKK1g1MDkgR2V0IHRpbWUgKFVUQyBubyBpc3N1ZXMpCitkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9VU0VfQworeDUwOV9nZXRfdGltZTpNQkVEVExTX0FTTjFfVVRDX1RJTUU6IjUwMDEwMTAwMDAwMFoiOjA6MTk1MDoxOjE6MDowOjAKKworWDUwOSBHZXQgdGltZSAoR2VuZXJhbGl6ZWQgVGltZSBubyBpc3N1ZXMpCitkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9VU0VfQworeDUwOV9nZXRfdGltZTpNQkVEVExTX0FTTjFfR0VORVJBTElaRURfVElNRToiOTk5OTEyMzEyMzU5NTlaIjowOjk5OTk6MTI6MzE6MjM6NTk6NTkKKworWDUwOSBHZXQgdGltZSAoVVRDIHllYXIgd2l0aG91dCBsZWFwIGRheSkKK2RlcGVuZHNfb246TUJFRFRMU19YNTA5X1VTRV9DCit4NTA5X2dldF90aW1lOk1CRURUTFNfQVNOMV9VVENfVElNRToiNDkwMjI5MTIxMjEyWiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEU6MDowOjA6MDowOjAKKworWDUwOSBHZXQgdGltZSAoVVRDIHllYXIgd2l0aCBsZWFwIGRheSkKK2RlcGVuZHNfb246TUJFRFRMU19YNTA5X1VTRV9DCit4NTA5X2dldF90aW1lOk1CRURUTFNfQVNOMV9VVENfVElNRToiMDAwMjI5MTIxMjEyWiI6MDoyMDAwOjI6Mjk6MTI6MTI6MTIKKworWDUwOSBHZXQgdGltZSAoVVRDIGludmFsaWQgZGF5IG9mIG1vbnRoICMxKQorZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfVVNFX0MKK3g1MDlfZ2V0X3RpbWU6TUJFRFRMU19BU04xX1VUQ19USU1FOiIwMDAxMzIxMjEyMTJaIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURTowOjA6MDowOjA6MAorCitYNTA5IEdldCB0aW1lIChVVEMgaW52YWxpZCBkYXkgb2YgbW9udGggIzIpCitkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9VU0VfQworeDUwOV9nZXRfdGltZTpNQkVEVExTX0FTTjFfVVRDX1RJTUU6IjAwMTEzMTEyMTIxMloiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFOjA6MDowOjA6MDowCisKK1g1MDkgR2V0IHRpbWUgKFVUQyBpbnZhbGlkIGhvdXIpCitkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9VU0VfQworeDUwOV9nZXRfdGltZTpNQkVEVExTX0FTTjFfVVRDX1RJTUU6IjAwMTEzMDI0MTIxMloiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFOjA6MDowOjA6MDowCisKK1g1MDkgR2V0IHRpbWUgKFVUQyBpbnZhbGlkIG1pbikKK2RlcGVuZHNfb246TUJFRFRMU19YNTA5X1VTRV9DCit4NTA5X2dldF90aW1lOk1CRURUTFNfQVNOMV9VVENfVElNRToiMDAxMTMwMjM2MDEyWiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEU6MDowOjA6MDowOjAKKworWDUwOSBHZXQgdGltZSAoVVRDIGludmFsaWQgc2VjKQorZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfVVNFX0MKK3g1MDlfZ2V0X3RpbWU6TUJFRFRMU19BU04xX1VUQ19USU1FOiIwMDExMzAyMzU5NjBaIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURTowOjA6MDowOjA6MApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDlwYXJzZS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5cGFyc2UuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4NTg2OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5cGFyc2UuZnVuY3Rpb24KQEAgLTAsMCArMSw2NjIgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMveDUwOS5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jcnQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3JsLmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5X2Nzci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisjaW5jbHVkZSAibWJlZHRscy9vaWQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Jhc2U2NC5oIgorCitjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgY29tcGF0X3Byb2ZpbGUgPQoreworICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1NIQTEgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfTURfUklQRU1EMTYwICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1NIQTIyNCApIHwKKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19NRF9TSEEyNTYgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfTURfU0hBMzg0ICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1NIQTUxMiApLAorICAgIDB4RkZGRkZGRiwgLyogQW55IFBLIGFsZyAgICAqLworICAgIDB4RkZGRkZGRiwgLyogQW55IGN1cnZlICAgICAqLworICAgIDEwMjQsCit9OworCitpbnQgdmVyaWZ5X25vbmUoIHZvaWQgKmRhdGEsIG1iZWR0bHNfeDUwOV9jcnQgKmNydCwgaW50IGNlcnRpZmljYXRlX2RlcHRoLCB1aW50MzJfdCAqZmxhZ3MgKQoreworICAgICgodm9pZCkgZGF0YSk7CisgICAgKCh2b2lkKSBjcnQpOworICAgICgodm9pZCkgY2VydGlmaWNhdGVfZGVwdGgpOworICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9PVEhFUjsKKworICAgIHJldHVybiAwOworfQorCitpbnQgdmVyaWZ5X2FsbCggdm9pZCAqZGF0YSwgbWJlZHRsc194NTA5X2NydCAqY3J0LCBpbnQgY2VydGlmaWNhdGVfZGVwdGgsIHVpbnQzMl90ICpmbGFncyApCit7CisgICAgKCh2b2lkKSBkYXRhKTsKKyAgICAoKHZvaWQpIGNydCk7CisgICAgKCh2b2lkKSBjZXJ0aWZpY2F0ZV9kZXB0aCk7CisgICAgKmZsYWdzID0gMDsKKworICAgIHJldHVybiAwOworfQorCisvKiBzdHJzZXAoKSBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgKi8KK2NoYXIgKm15c3Ryc2VwKGNoYXIgKipzdHJpbmdwLCBjb25zdCBjaGFyICpkZWxpbSkKK3sKKyAgICBjb25zdCBjaGFyICpwOworICAgIGNoYXIgKnJldCA9ICpzdHJpbmdwOworCisgICAgaWYoICpzdHJpbmdwID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE5VTEwgKTsKKworICAgIGZvciggOyA7ICgqc3RyaW5ncCkrKyApCisgICAgeworICAgICAgICBpZiggKipzdHJpbmdwID09ICdcMCcgKQorICAgICAgICB7CisgICAgICAgICAgICAqc3RyaW5ncCA9IE5VTEw7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKworICAgICAgICBmb3IoIHAgPSBkZWxpbTsgKnAgIT0gJ1wwJzsgcCsrICkKKyAgICAgICAgICAgIGlmKCAqKnN0cmluZ3AgPT0gKnAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICoqc3RyaW5ncCA9ICdcMCc7CisgICAgICAgICAgICAgICAgKCpzdHJpbmdwKSsrOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIH0KKyAgICB9CisKK2RvbmU6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgYnVmWzUxMl07CisgICAgY2hhciAqcDsKK30gdmVyaWZ5X3ByaW50X2NvbnRleHQ7CisKK3ZvaWQgdmVyaWZ5X3ByaW50X2luaXQoIHZlcmlmeV9wcmludF9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIHZlcmlmeV9wcmludF9jb250ZXh0ICkgKTsKKyAgICBjdHgtPnAgPSBjdHgtPmJ1ZjsKK30KKworaW50IHZlcmlmeV9wcmludCggdm9pZCAqZGF0YSwgbWJlZHRsc194NTA5X2NydCAqY3J0LCBpbnQgY2VydGlmaWNhdGVfZGVwdGgsIHVpbnQzMl90ICpmbGFncyApCit7CisgICAgaW50IHJldDsKKyAgICB2ZXJpZnlfcHJpbnRfY29udGV4dCAqY3R4ID0gKHZlcmlmeV9wcmludF9jb250ZXh0ICopIGRhdGE7CisgICAgY2hhciAqcCA9IGN0eC0+cDsKKyAgICBzaXplX3QgbiA9IGN0eC0+YnVmICsgc2l6ZW9mKCBjdHgtPmJ1ZiApIC0gY3R4LT5wOworICAgICgodm9pZCkgZmxhZ3MpOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgImRlcHRoICVkIC0gc2VyaWFsICIsIGNlcnRpZmljYXRlX2RlcHRoICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfc2VyaWFsX2dldHMoIHAsIG4sICZjcnQtPnNlcmlhbCApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiAtIHN1YmplY3QgIiApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2RuX2dldHMoIHAsIG4sICZjcnQtPnN1YmplY3QgKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiIgKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIGN0eC0+cCA9IHA7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfQklHTlVNX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTzpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KK3ZvaWQgeDUwOV9jZXJ0X2luZm8oIGNoYXIgKmNydF9maWxlLCBjaGFyICpyZXN1bHRfc3RyICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfY3J0ICAgY3J0OworICAgIGNoYXIgYnVmWzIwMDBdOworICAgIGludCByZXM7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjcnQgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgMjAwMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNydCwgY3J0X2ZpbGUgKSA9PSAwICk7CisgICAgcmVzID0gbWJlZHRsc194NTA5X2NydF9pbmZvKCBidWYsIDIwMDAsICIiLCAmY3J0ICk7CisKKyAgICBURVNUX0FTU0VSVCggcmVzICE9IC0xICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcyAhPSAtMiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggYnVmLCByZXN1bHRfc3RyICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNydCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU86TUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DICovCit2b2lkIG1iZWR0bHNfeDUwOV9jcmxfaW5mbyggY2hhciAqY3JsX2ZpbGUsIGNoYXIgKnJlc3VsdF9zdHIgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcmwgICBjcmw7CisgICAgY2hhciBidWZbMjAwMF07CisgICAgaW50IHJlczsKKworICAgIG1iZWR0bHNfeDUwOV9jcmxfaW5pdCggJmNybCApOworICAgIG1lbXNldCggYnVmLCAwLCAyMDAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlKCAmY3JsLCBjcmxfZmlsZSApID09IDAgKTsKKyAgICByZXMgPSBtYmVkdGxzX3g1MDlfY3JsX2luZm8oIGJ1ZiwgMjAwMCwgIiIsICZjcmwgKTsKKworICAgIFRFU1RfQVNTRVJUKCByZXMgIT0gLTEgKTsKKyAgICBURVNUX0FTU0VSVCggcmVzICE9IC0yICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCBidWYsIHJlc3VsdF9zdHIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCAmY3JsICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTzpNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MgKi8KK3ZvaWQgbWJlZHRsc194NTA5X2Nzcl9pbmZvKCBjaGFyICpjc3JfZmlsZSwgY2hhciAqcmVzdWx0X3N0ciApCit7CisgICAgbWJlZHRsc194NTA5X2NzciAgIGNzcjsKKyAgICBjaGFyIGJ1ZlsyMDAwXTsKKyAgICBpbnQgcmVzOworCisgICAgbWJlZHRsc194NTA5X2Nzcl9pbml0KCAmY3NyICk7CisgICAgbWVtc2V0KCBidWYsIDAsIDIwMDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlX2ZpbGUoICZjc3IsIGNzcl9maWxlICkgPT0gMCApOworICAgIHJlcyA9IG1iZWR0bHNfeDUwOV9jc3JfaW5mbyggYnVmLCAyMDAwLCAiIiwgJmNzciApOworCisgICAgVEVTVF9BU1NFUlQoIHJlcyAhPSAtMSApOworICAgIFRFU1RfQVNTRVJUKCByZXMgIT0gLTIgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIGJ1ZiwgcmVzdWx0X3N0ciApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoICZjc3IgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KK3ZvaWQgeDUwOV92ZXJpZnlfaW5mbyggaW50IGZsYWdzLCBjaGFyICpwcmVmaXgsIGNoYXIgKnJlc3VsdF9zdHIgKQoreworICAgIGNoYXIgYnVmWzIwMDBdOworICAgIGludCByZXM7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgcmVzID0gbWJlZHRsc194NTA5X2NydF92ZXJpZnlfaW5mbyggYnVmLCBzaXplb2YoIGJ1ZiApLCBwcmVmaXgsIGZsYWdzICk7CisKKyAgICBURVNUX0FTU0VSVCggcmVzID49IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIGJ1ZiwgcmVzdWx0X3N0ciApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQzpNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MgKi8KK3ZvaWQgeDUwOV92ZXJpZnkoIGNoYXIgKmNydF9maWxlLCBjaGFyICpjYV9maWxlLCBjaGFyICpjcmxfZmlsZSwKKyAgICAgICAgICAgICAgICAgIGNoYXIgKmNuX25hbWVfc3RyLCBpbnQgcmVzdWx0LCBpbnQgZmxhZ3NfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgY2hhciAqdmVyaWZ5X2NhbGxiYWNrICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfY3J0ICAgY3J0OworICAgIG1iZWR0bHNfeDUwOV9jcnQgICBjYTsKKyAgICBtYmVkdGxzX3g1MDlfY3JsICAgIGNybDsKKyAgICB1aW50MzJfdCAgICAgICAgIGZsYWdzID0gMDsKKyAgICBpbnQgICAgICAgICByZXM7CisgICAgaW50ICgqZl92cmZ5KSh2b2lkICosIG1iZWR0bHNfeDUwOV9jcnQgKiwgaW50LCB1aW50MzJfdCAqKSA9IE5VTEw7CisgICAgY2hhciAqICAgICAgY25fbmFtZSA9IE5VTEw7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjcnQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjYSApOworICAgIG1iZWR0bHNfeDUwOV9jcmxfaW5pdCggJmNybCApOworCisgICAgaWYoIHN0cmNtcCggY25fbmFtZV9zdHIsICJOVUxMIiApICE9IDAgKQorICAgICAgICBjbl9uYW1lID0gY25fbmFtZV9zdHI7CisKKyAgICBpZiggc3RyY21wKCB2ZXJpZnlfY2FsbGJhY2ssICJOVUxMIiApID09IDAgKQorICAgICAgICBmX3ZyZnkgPSBOVUxMOworICAgIGVsc2UgaWYoIHN0cmNtcCggdmVyaWZ5X2NhbGxiYWNrLCAidmVyaWZ5X25vbmUiICkgPT0gMCApCisgICAgICAgIGZfdnJmeSA9IHZlcmlmeV9ub25lOworICAgIGVsc2UgaWYoIHN0cmNtcCggdmVyaWZ5X2NhbGxiYWNrLCAidmVyaWZ5X2FsbCIgKSA9PSAwICkKKyAgICAgICAgZl92cmZ5ID0gdmVyaWZ5X2FsbDsKKyAgICBlbHNlCisgICAgICAgIFRFU1RfQVNTRVJUKCAiTm8ga25vd24gdmVyaWZ5IGNhbGxiYWNrIHNlbGVjdGVkIiA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY3J0LCBjcnRfZmlsZSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY2EsIGNhX2ZpbGUgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZmlsZSggJmNybCwgY3JsX2ZpbGUgKSA9PSAwICk7CisKKyAgICByZXMgPSBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV93aXRoX3Byb2ZpbGUoICZjcnQsICZjYSwgJmNybCwgJmNvbXBhdF9wcm9maWxlLCBjbl9uYW1lLCAmZmxhZ3MsIGZfdnJmeSwgTlVMTCApOworCisgICAgVEVTVF9BU1NFUlQoIHJlcyA9PSAoIHJlc3VsdCApICk7CisgICAgVEVTVF9BU1NFUlQoIGZsYWdzID09ICh1aW50MzJfdCkoIGZsYWdzX3Jlc3VsdCApICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY3J0ICk7CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2EgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoICZjcmwgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLwordm9pZCB4NTA5X3ZlcmlmeV9jYWxsYmFjayggY2hhciAqY3J0X2ZpbGUsIGNoYXIgKmNhX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwX3JldCwgY2hhciAqZXhwX3ZyZnlfb3V0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfeDUwOV9jcnQgY3J0OworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2E7CisgICAgdWludDMyX3QgZmxhZ3MgPSAwOworICAgIHZlcmlmeV9wcmludF9jb250ZXh0IHZyZnlfY3R4OworCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY3J0ICk7CisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2EgKTsKKyAgICB2ZXJpZnlfcHJpbnRfaW5pdCggJnZyZnlfY3R4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY3J0LCBjcnRfZmlsZSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY2EsIGNhX2ZpbGUgKSA9PSAwICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeSggJmNydCwgJmNhLCBOVUxMLCBOVUxMLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmeV9wcmludCwgJnZyZnlfY3R4ICk7CisKKyAgICBURVNUX0FTU0VSVCggcmV0ID09IGV4cF9yZXQgKTsKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCB2cmZ5X2N0eC5idWYsIGV4cF92cmZ5X291dCApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjcnQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjYSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU86TUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCit2b2lkIG1iZWR0bHNfeDUwOV9kbl9nZXRzKCBjaGFyICpjcnRfZmlsZSwgY2hhciAqZW50aXR5LCBjaGFyICpyZXN1bHRfc3RyICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfY3J0ICAgY3J0OworICAgIGNoYXIgYnVmWzIwMDBdOworICAgIGludCByZXMgPSAwOworCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY3J0ICk7CisgICAgbWVtc2V0KCBidWYsIDAsIDIwMDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjcnQsIGNydF9maWxlICkgPT0gMCApOworICAgIGlmKCBzdHJjbXAoIGVudGl0eSwgInN1YmplY3QiICkgPT0gMCApCisgICAgICAgIHJlcyA9ICBtYmVkdGxzX3g1MDlfZG5fZ2V0cyggYnVmLCAyMDAwLCAmY3J0LnN1YmplY3QgKTsKKyAgICBlbHNlIGlmKCBzdHJjbXAoIGVudGl0eSwgImlzc3VlciIgKSA9PSAwICkKKyAgICAgICAgcmVzID0gIG1iZWR0bHNfeDUwOV9kbl9nZXRzKCBidWYsIDIwMDAsICZjcnQuaXNzdWVyICk7CisgICAgZWxzZQorICAgICAgICBURVNUX0FTU0VSVCggIlVua25vd24gZW50aXR5IiA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggcmVzICE9IC0xICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcyAhPSAtMiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggYnVmLCByZXN1bHRfc3RyICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNydCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU86TUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCit2b2lkIG1iZWR0bHNfeDUwOV90aW1lX2lzX3Bhc3QoIGNoYXIgKmNydF9maWxlLCBjaGFyICplbnRpdHksIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgICBjcnQ7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjcnQgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjcnQsIGNydF9maWxlICkgPT0gMCApOworCisgICAgaWYoIHN0cmNtcCggZW50aXR5LCAidmFsaWRfZnJvbSIgKSA9PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV90aW1lX2lzX3Bhc3QoICZjcnQudmFsaWRfZnJvbSApID09IHJlc3VsdCApOworICAgIGVsc2UgaWYoIHN0cmNtcCggZW50aXR5LCAidmFsaWRfdG8iICkgPT0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0KCAmY3J0LnZhbGlkX3RvICkgPT0gcmVzdWx0ICk7CisgICAgZWxzZQorICAgICAgICBURVNUX0FTU0VSVCggIlVua25vd24gZW50aXR5IiA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY3J0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTzpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KK3ZvaWQgbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlKCBjaGFyICpjcnRfZmlsZSwgY2hhciAqZW50aXR5LCBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfY3J0ICAgY3J0OworCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY3J0ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY3J0LCBjcnRfZmlsZSApID09IDAgKTsKKworICAgIGlmKCBzdHJjbXAoIGVudGl0eSwgInZhbGlkX2Zyb20iICkgPT0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmUoICZjcnQudmFsaWRfZnJvbSApID09IHJlc3VsdCApOworICAgIGVsc2UgaWYoIHN0cmNtcCggZW50aXR5LCAidmFsaWRfdG8iICkgPT0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmUoICZjcnQudmFsaWRfdG8gKSA9PSByZXN1bHQgKTsKKyAgICBlbHNlCisgICAgICAgIFRFU1RfQVNTRVJUKCAiVW5rbm93biBlbnRpdHkiID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjcnQgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0M6TUJFRFRMU19GU19JTyAqLwordm9pZCB4NTA5cGFyc2VfY3J0X2ZpbGUoIGNoYXIgKmNydF9maWxlLCBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfY3J0IGNydDsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNydCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNydCwgY3J0X2ZpbGUgKSA9PSByZXN1bHQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjcnQgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KK3ZvaWQgeDUwOXBhcnNlX2NydCggY2hhciAqY3J0X2RhdGEsIGNoYXIgKnJlc3VsdF9zdHIsIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgICBjcnQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbMjAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjAwMF07CisgICAgaW50IGRhdGFfbGVuLCByZXM7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjcnQgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgMjAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAwLCAyMDAwICk7CisKKyAgICBkYXRhX2xlbiA9IHVuaGV4aWZ5KCBidWYsIGNydF9kYXRhICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZSggJmNydCwgYnVmLCBkYXRhX2xlbiApID09ICggcmVzdWx0ICkgKTsKKyAgICBpZiggKCByZXN1bHQgKSA9PSAwICkKKyAgICB7CisgICAgICAgIHJlcyA9IG1iZWR0bHNfeDUwOV9jcnRfaW5mbyggKGNoYXIgKikgb3V0cHV0LCAyMDAwLCAiIiwgJmNydCApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCByZXMgIT0gLTEgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHJlcyAhPSAtMiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIG91dHB1dCwgcmVzdWx0X3N0ciApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY3J0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DICovCit2b2lkIHg1MDlwYXJzZV9jcmwoIGNoYXIgKmNybF9kYXRhLCBjaGFyICpyZXN1bHRfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfY3JsICAgY3JsOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzIwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzIwMDBdOworICAgIGludCBkYXRhX2xlbiwgcmVzOworCisgICAgbWJlZHRsc194NTA5X2NybF9pbml0KCAmY3JsICk7CisgICAgbWVtc2V0KCBidWYsIDAsIDIwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMCwgMjAwMCApOworCisgICAgZGF0YV9sZW4gPSB1bmhleGlmeSggYnVmLCBjcmxfZGF0YSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2UoICZjcmwsIGJ1ZiwgZGF0YV9sZW4gKSA9PSAoIHJlc3VsdCApICk7CisgICAgaWYoICggcmVzdWx0ICkgPT0gMCApCisgICAgeworICAgICAgICByZXMgPSBtYmVkdGxzX3g1MDlfY3JsX2luZm8oIChjaGFyICopIG91dHB1dCwgMjAwMCwgIiIsICZjcmwgKTsKKworICAgICAgICBURVNUX0FTU0VSVCggcmVzICE9IC0xICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCByZXMgIT0gLTIgKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBvdXRwdXQsIHJlc3VsdF9zdHIgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggJmNybCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQyAqLwordm9pZCBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlKCBjaGFyICpjc3JfZGVyX2hleCwgY2hhciAqcmVmX291dCwgaW50IHJlZl9yZXQgKQoreworICAgIG1iZWR0bHNfeDUwOV9jc3IgY3NyOworICAgIHVuc2lnbmVkIGNoYXIgKmNzcl9kZXIgPSBOVUxMOworICAgIGNoYXIgbXlfb3V0WzEwMDBdOworICAgIHNpemVfdCBjc3JfZGVyX2xlbjsKKyAgICBpbnQgbXlfcmV0OworCisgICAgbWJlZHRsc194NTA5X2Nzcl9pbml0KCAmY3NyICk7CisgICAgbWVtc2V0KCBteV9vdXQsIDAsIHNpemVvZiggbXlfb3V0ICkgKTsKKyAgICBjc3JfZGVyID0gdW5oZXhpZnlfYWxsb2MoIGNzcl9kZXJfaGV4LCAmY3NyX2Rlcl9sZW4gKTsKKworICAgIG15X3JldCA9IG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZGVyKCAmY3NyLCBjc3JfZGVyLCBjc3JfZGVyX2xlbiApOworICAgIFRFU1RfQVNTRVJUKCBteV9yZXQgPT0gcmVmX3JldCApOworCisgICAgaWYoIHJlZl9yZXQgPT0gMCApCisgICAgeworICAgICAgICBzaXplX3QgbXlfb3V0X2xlbiA9IG1iZWR0bHNfeDUwOV9jc3JfaW5mbyggbXlfb3V0LCBzaXplb2YoIG15X291dCApLCAiIiwgJmNzciApOworICAgICAgICBURVNUX0FTU0VSVCggbXlfb3V0X2xlbiA9PSBzdHJsZW4oIHJlZl9vdXQgKSApOworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCBteV9vdXQsIHJlZl9vdXQgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggJmNzciApOworICAgIG1iZWR0bHNfZnJlZSggY3NyX2RlciApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU86TUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCit2b2lkIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aCggY2hhciAqY3J0X3BhdGgsIGludCByZXQsIGludCBuYl9jcnQgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2hhaW4sICpjdXI7CisgICAgaW50IGk7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjaGFpbiApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aCggJmNoYWluLCBjcnRfcGF0aCApID09IHJldCApOworCisgICAgLyogQ2hlY2sgaG93IG1hbnkgY2VydHMgd2UgZ290ICovCisgICAgZm9yKCBpID0gMCwgY3VyID0gJmNoYWluOyBjdXIgIT0gTlVMTDsgY3VyID0gY3VyLT5uZXh0ICkKKyAgICAgICAgaWYoIGN1ci0+cmF3LnAgIT0gTlVMTCApCisgICAgICAgICAgICBpKys7CisKKyAgICBURVNUX0FTU0VSVCggaSA9PSBuYl9jcnQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjaGFpbiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU86TUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCit2b2lkIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2NoYWluKCAgY2hhciAqY2hhaW5fcGF0aHMsIGNoYXIgKnRydXN0ZWRfY2EsIGludCBmbGFnc19yZXN1bHQgKQoreworICAgIGNoYXIqIGFjdDsKKyAgICB1aW50MzJfdCBmbGFnczsKKyAgICBpbnQgcmVzdWx0LCByZXM7CisgICAgbWJlZHRsc194NTA5X2NydCB0cnVzdGVkLCBjaGFpbjsKKworICAgIHJlc3VsdD0gZmxhZ3NfcmVzdWx0P01CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOjA7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjaGFpbiApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJnRydXN0ZWQgKTsKKworICAgIHdoaWxlKCAoIGFjdCA9IG15c3Ryc2VwKCAmY2hhaW5fcGF0aHMsICIgIiApICkgIT0gTlVMTCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjaGFpbiwgYWN0ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZ0cnVzdGVkLCB0cnVzdGVkX2NhICkgPT0gMCApOworCisgICAgcmVzID0gbWJlZHRsc194NTA5X2NydF92ZXJpZnkoICZjaGFpbiwgJnRydXN0ZWQsIE5VTEwsIE5VTEwsICZmbGFncywgTlVMTCwgTlVMTCApOworCisgICAgVEVTVF9BU1NFUlQoIHJlcyA9PSAoIHJlc3VsdCApICk7CisgICAgVEVTVF9BU1NFUlQoIGZsYWdzID09ICh1aW50MzJfdCkoIGZsYWdzX3Jlc3VsdCApICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmdHJ1c3RlZCApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNoYWluICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19YNTA5X1VTRV9DICovCit2b2lkIHg1MDlfb2lkX2Rlc2MoIGNoYXIgKm9pZF9zdHIsIGNoYXIgKnJlZl9kZXNjICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfYnVmIG9pZDsKKyAgICBjb25zdCBjaGFyICpkZXNjID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyMF07CisgICAgaW50IHJldDsKKworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YgYnVmICk7CisKKyAgICBvaWQudGFnID0gTUJFRFRMU19BU04xX09JRDsKKyAgICBvaWQubGVuID0gdW5oZXhpZnkoIGJ1Ziwgb2lkX3N0ciApOworICAgIG9pZC5wICAgPSBidWY7CisKKyAgICByZXQgPSBtYmVkdGxzX29pZF9nZXRfZXh0ZW5kZWRfa2V5X3VzYWdlKCAmb2lkLCAmZGVzYyApOworCisgICAgaWYoIHN0cmNtcCggcmVmX2Rlc2MsICJub3Rmb3VuZCIgKSA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCByZXQgIT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggZGVzYyA9PSBOVUxMICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggZGVzYyAhPSBOVUxMICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIGRlc2MsIHJlZl9kZXNjICkgPT0gMCApOworICAgIH0KK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfVVNFX0MgKi8KK3ZvaWQgeDUwOV9vaWRfbnVtc3RyKCBjaGFyICpvaWRfc3RyLCBjaGFyICpudW1zdHIsIGludCBibGVuLCBpbnQgcmV0ICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfYnVmIG9pZDsKKyAgICB1bnNpZ25lZCBjaGFyIG9pZF9idWZbMjBdOworICAgIGNoYXIgbnVtX2J1ZlsxMDBdOworCisgICAgbWVtc2V0KCBvaWRfYnVmLCAweDAwLCBzaXplb2Ygb2lkX2J1ZiApOworICAgIG1lbXNldCggbnVtX2J1ZiwgMHgyYSwgc2l6ZW9mIG51bV9idWYgKTsKKworICAgIG9pZC50YWcgPSBNQkVEVExTX0FTTjFfT0lEOworICAgIG9pZC5sZW4gPSB1bmhleGlmeSggb2lkX2J1Ziwgb2lkX3N0ciApOworICAgIG9pZC5wICAgPSBvaWRfYnVmOworCisgICAgVEVTVF9BU1NFUlQoIChzaXplX3QpIGJsZW4gPD0gc2l6ZW9mIG51bV9idWYgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX29pZF9nZXRfbnVtZXJpY19zdHJpbmcoIG51bV9idWYsIGJsZW4sICZvaWQgKSA9PSByZXQgKTsKKworICAgIGlmKCByZXQgPj0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbnVtX2J1ZltyZXRdID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggbnVtX2J1ZiwgbnVtc3RyICkgPT0gMCApOworICAgIH0KK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQzpNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFICovCit2b2lkIHg1MDlfY2hlY2tfa2V5X3VzYWdlKCBjaGFyICpjcnRfZmlsZSwgaW50IHVzYWdlLCBpbnQgcmV0ICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfY3J0IGNydDsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNydCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNydCwgY3J0X2ZpbGUgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9jaGVja19rZXlfdXNhZ2UoICZjcnQsIHVzYWdlICkgPT0gcmV0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY3J0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTzpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0M6TUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRSAqLwordm9pZCB4NTA5X2NoZWNrX2V4dGVuZGVkX2tleV91c2FnZSggY2hhciAqY3J0X2ZpbGUsIGNoYXIgKnVzYWdlX2hleCwgaW50IHJldCApCit7CisgICAgbWJlZHRsc194NTA5X2NydCBjcnQ7CisgICAgY2hhciBvaWRbNTBdOworICAgIHNpemVfdCBsZW47CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjcnQgKTsKKworICAgIGxlbiA9IHVuaGV4aWZ5KCAodW5zaWduZWQgY2hhciAqKSBvaWQsIHVzYWdlX2hleCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNydCwgY3J0X2ZpbGUgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9jaGVja19leHRlbmRlZF9rZXlfdXNhZ2UoICZjcnQsIG9pZCwgbGVuICkgPT0gcmV0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY3J0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19YNTA5X1VTRV9DICovCit2b2lkIHg1MDlfZ2V0X3RpbWUoIGludCB0YWcsICBjaGFyICp0aW1lX3N0ciwgaW50IHJldCwKKyAgICAgICAgICAgICAgICAgICAgaW50IHllYXIsIGludCBtb24sIGludCBkYXksCisgICAgICAgICAgICAgICAgICAgIGludCBob3VyLCBpbnQgbWluLCBpbnQgc2VjICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfdGltZSB0aW1lOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE3XTsKKyAgICB1bnNpZ25lZCBjaGFyKiBzdGFydCA9IGJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyKiBlbmQgPSBidWY7CisKKyAgICBtZW1zZXQoICZ0aW1lLCAweDAwLCBzaXplb2YoIHRpbWUgKSApOworICAgICplbmQgPSAodW5zaWduZWQgY2hhcil0YWc7IGVuZCsrOworICAgIGlmKCB0YWcgPT0gTUJFRFRMU19BU04xX1VUQ19USU1FICkKKyAgICAgICAgKmVuZCA9IDEzOworICAgIGVsc2UKKyAgICAgICAgKmVuZCA9IDE1OworICAgIGVuZCsrOworICAgIG1lbWNweSggZW5kLCB0aW1lX3N0ciwgKHNpemVfdCkqKGVuZCAtIDEpICk7CisgICAgZW5kICs9ICooZW5kIC0gMSk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2dldF90aW1lKCAmc3RhcnQsIGVuZCwgJnRpbWUgKSA9PSByZXQgKTsKKyAgICBpZiggcmV0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHllYXIgPT0gdGltZS55ZWFyICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtb24gID09IHRpbWUubW9uICApOworICAgICAgICBURVNUX0FTU0VSVCggZGF5ICA9PSB0aW1lLmRheSAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIGhvdXIgPT0gdGltZS5ob3VyICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtaW4gID09IHRpbWUubWluICApOworICAgICAgICBURVNUX0FTU0VSVCggc2VjICA9PSB0aW1lLnNlYyAgKTsKKyAgICB9Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQgKi8KK3ZvaWQgeDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtcyggY2hhciAqaGV4X3BhcmFtcywgaW50IHBhcmFtc190YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWZfbXNnX21kLCBpbnQgcmVmX21nZl9tZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlZl9zYWx0X2xlbiwgaW50IHJlZl9yZXQgKQoreworICAgIGludCBteV9yZXQ7CisgICAgbWJlZHRsc194NTA5X2J1ZiBwYXJhbXM7CisgICAgbWJlZHRsc19tZF90eXBlX3QgbXlfbXNnX21kLCBteV9tZ2ZfbWQ7CisgICAgaW50IG15X3NhbHRfbGVuOworCisgICAgcGFyYW1zLnAgPSB1bmhleGlmeV9hbGxvYyggaGV4X3BhcmFtcywgJnBhcmFtcy5sZW4gKTsKKyAgICBwYXJhbXMudGFnID0gcGFyYW1zX3RhZzsKKworICAgIG15X3JldCA9IG1iZWR0bHNfeDUwOV9nZXRfcnNhc3NhX3Bzc19wYXJhbXMoICZwYXJhbXMsICZteV9tc2dfbWQsICZteV9tZ2ZfbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZteV9zYWx0X2xlbiApOworCisgICAgVEVTVF9BU1NFUlQoIG15X3JldCA9PSByZWZfcmV0ICk7CisKKyAgICBpZiggcmVmX3JldCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBteV9tc2dfbWQgPT0gKG1iZWR0bHNfbWRfdHlwZV90KSByZWZfbXNnX21kICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBteV9tZ2ZfbWQgPT0gKG1iZWR0bHNfbWRfdHlwZV90KSByZWZfbWdmX21kICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBteV9zYWx0X2xlbiA9PSByZWZfc2FsdF9sZW4gKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19mcmVlKCBwYXJhbXMucCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQzpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCB4NTA5X3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXdyaXRlLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXdyaXRlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkMmE5OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5d3JpdGUuZGF0YQpAQCAtMCwwICsxLDc3IEBACitDZXJ0aWZpY2F0ZSBSZXF1ZXN0IGNoZWNrIFNlcnZlcjEgU0hBMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X2Nzcl9jaGVjazoiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSI6ImRhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhMSI6TUJFRFRMU19NRF9TSEExOjA6MAorCitDZXJ0aWZpY2F0ZSBSZXF1ZXN0IGNoZWNrIFNlcnZlcjEgU0hBMjI0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV9jc3JfY2hlY2s6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXkiOiJkYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTIyNCI6TUJFRFRMU19NRF9TSEEyMjQ6MDowCisKK0NlcnRpZmljYXRlIFJlcXVlc3QgY2hlY2sgU2VydmVyMSBTSEEyNTYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X2Nzcl9jaGVjazoiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSI6ImRhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhMjU2IjpNQkVEVExTX01EX1NIQTI1NjowOjAKKworQ2VydGlmaWNhdGUgUmVxdWVzdCBjaGVjayBTZXJ2ZXIxIFNIQTM4NAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfY3NyX2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGEzODQiOk1CRURUTFNfTURfU0hBMzg0OjA6MAorCitDZXJ0aWZpY2F0ZSBSZXF1ZXN0IGNoZWNrIFNlcnZlcjEgU0hBNTEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV9jc3JfY2hlY2s6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXkiOiJkYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTUxMiI6TUJFRFRMU19NRF9TSEE1MTI6MDowCisKK0NlcnRpZmljYXRlIFJlcXVlc3QgY2hlY2sgU2VydmVyMSBNRDQKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X2Nzcl9jaGVjazoiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSI6ImRhdGFfZmlsZXMvc2VydmVyMS5yZXEubWQ0IjpNQkVEVExTX01EX01ENDowOjAKKworQ2VydGlmaWNhdGUgUmVxdWVzdCBjaGVjayBTZXJ2ZXIxIE1ENQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfY3NyX2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5tZDUiOk1CRURUTFNfTURfTUQ1OjA6MAorCitDZXJ0aWZpY2F0ZSBSZXF1ZXN0IGNoZWNrIFNlcnZlcjEga2V5X3VzYWdlCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfY3NyX2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5rZXlfdXNhZ2UiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkUgfCBNQkVEVExTX1g1MDlfS1VfTk9OX1JFUFVESUFUSU9OIHwgTUJFRFRMU19YNTA5X0tVX0tFWV9FTkNJUEhFUk1FTlQ6MAorCitDZXJ0aWZpY2F0ZSBSZXF1ZXN0IGNoZWNrIFNlcnZlcjEgbnNfY2VydF90eXBlCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfY3NyX2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5jZXJ0X3R5cGUiOk1CRURUTFNfTURfU0hBMTowOk1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX1NFUlZFUgorCitDZXJ0aWZpY2F0ZSBSZXF1ZXN0IGNoZWNrIFNlcnZlcjEga2V5X3VzYWdlICsgbnNfY2VydF90eXBlCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfY3NyX2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5rdS1jdCI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRSB8IE1CRURUTFNfWDUwOV9LVV9OT05fUkVQVURJQVRJT04gfCBNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVDpNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9TRVJWRVIKKworQ2VydGlmaWNhdGUgUmVxdWVzdCBjaGVjayBTZXJ2ZXI1IEVDRFNBLCBrZXlfdXNhZ2UKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAoreDUwOV9jc3JfY2hlY2s6ImRhdGFfZmlsZXMvc2VydmVyNS5rZXkiOiJkYXRhX2ZpbGVzL3NlcnZlcjUucmVxLmt1LnNoYTEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkUgfCBNQkVEVExTX1g1MDlfS1VfTk9OX1JFUFVESUFUSU9OOjAKKworQ2VydGlmaWNhdGUgd3JpdGUgY2hlY2sgU2VydmVyMSBTSEExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX01ENV9DCit4NTA5X2NydF9jaGVjazoiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSI6IiI6IkM9TkwsTz1Qb2xhclNTTCxDTj1Qb2xhclNTTCBTZXJ2ZXIgMSI6ImRhdGFfZmlsZXMvdGVzdC1jYS5rZXkiOiJQb2xhclNTTFRlc3QiOiJDPU5MLE89UG9sYXJTU0wsQ049UG9sYXJTU0wgVGVzdCBDQSI6IjEiOiIyMDExMDIxMjE0NDQwNiI6IjIwMjEwMjEyMTQ0NDA2IjpNQkVEVExTX01EX1NIQTE6MDowOi0xOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IgorCitDZXJ0aWZpY2F0ZSB3cml0ZSBjaGVjayBTZXJ2ZXIxIFNIQTEsIGtleV91c2FnZQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19NRDVfQworeDUwOV9jcnRfY2hlY2s6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXkiOiIiOiJDPU5MLE89UG9sYXJTU0wsQ049UG9sYXJTU0wgU2VydmVyIDEiOiJkYXRhX2ZpbGVzL3Rlc3QtY2Eua2V5IjoiUG9sYXJTU0xUZXN0IjoiQz1OTCxPPVBvbGFyU1NMLENOPVBvbGFyU1NMIFRlc3QgQ0EiOiIxIjoiMjAxMTAyMTIxNDQ0MDYiOiIyMDIxMDIxMjE0NDQwNiI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRSB8IE1CRURUTFNfWDUwOV9LVV9OT05fUkVQVURJQVRJT04gfCBNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVDowOi0xOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5X3VzYWdlLmNydCIKKworQ2VydGlmaWNhdGUgd3JpdGUgY2hlY2sgU2VydmVyMSBTSEExLCBuc19jZXJ0X3R5cGUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfTUQ1X0MKK3g1MDlfY3J0X2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjoiIjoiQz1OTCxPPVBvbGFyU1NMLENOPVBvbGFyU1NMIFNlcnZlciAxIjoiZGF0YV9maWxlcy90ZXN0LWNhLmtleSI6IlBvbGFyU1NMVGVzdCI6IkM9TkwsTz1Qb2xhclNTTCxDTj1Qb2xhclNTTCBUZXN0IENBIjoiMSI6IjIwMTEwMjEyMTQ0NDA2IjoiMjAyMTAyMTIxNDQ0MDYiOk1CRURUTFNfTURfU0hBMTowOk1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX1NFUlZFUjotMToiZGF0YV9maWxlcy9zZXJ2ZXIxLmNlcnRfdHlwZS5jcnQiCisKK0NlcnRpZmljYXRlIHdyaXRlIGNoZWNrIFNlcnZlcjEgU0hBMSwgdmVyc2lvbiAxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX01ENV9DCit4NTA5X2NydF9jaGVjazoiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSI6IiI6IkM9TkwsTz1Qb2xhclNTTCxDTj1Qb2xhclNTTCBTZXJ2ZXIgMSI6ImRhdGFfZmlsZXMvdGVzdC1jYS5rZXkiOiJQb2xhclNTTFRlc3QiOiJDPU5MLE89UG9sYXJTU0wsQ049UG9sYXJTU0wgVGVzdCBDQSI6IjEiOiIyMDExMDIxMjE0NDQwNiI6IjIwMjEwMjEyMTQ0NDA2IjpNQkVEVExTX01EX1NIQTE6MDowOk1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8xOiJkYXRhX2ZpbGVzL3NlcnZlcjEudjEuY3J0IgorCitYNTA5IFN0cmluZyB0byBOYW1lcyAjMQorbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lczoiQz1OTCxPPU9mZnNwYXJrXCwgSW5jLiwgT1U9UG9sYXJTU0wiOiJDPU5MLCBPPU9mZnNwYXJrLCBJbmMuLCBPVT1Qb2xhclNTTCI6MAorCitYNTA5IFN0cmluZyB0byBOYW1lcyAjMgorbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lczoiQz1OTCwgTz1PZmZzcGFyaywgSW5jLiwgT1U9UG9sYXJTU0wiOiIiOk1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9PSUQKKworWDUwOSBTdHJpbmcgdG8gTmFtZXMgIzMgKE5hbWUgcHJlY2lzZWx5IDI1NSBieXRlcykKK21iZWR0bHNfeDUwOV9zdHJpbmdfdG9fbmFtZXM6IkM9TkwsIE89MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1LE9VPVBvbGFyU1NMIjoiQz1OTCwgTz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUsIE9VPVBvbGFyU1NMIjowCisKK1g1MDkgU3RyaW5nIHRvIE5hbWVzICM0IChOYW1lIGxhcmdlciB0aGFuIDI1NSBieXRlcykKK21iZWR0bHNfeDUwOV9zdHJpbmdfdG9fbmFtZXM6IkM9TkwsIE89MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NiwgT1U9UG9sYXJTU0wiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FCisKK1g1MDkgU3RyaW5nIHRvIE5hbWVzICM1IChFc2NhcGUgbm9uLWFsbG93ZWQgY2hhcmFjdGVycykKK21iZWR0bHNfeDUwOV9zdHJpbmdfdG9fbmFtZXM6IkM9TkwsIE89T2Zmc3BhcmtcYSBJbmMuLCBPVT1Qb2xhclNTTCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUKKworWDUwOSBTdHJpbmcgdG8gTmFtZXMgIzYgKEVzY2FwZSBhdCBlbmQpCittYmVkdGxzX3g1MDlfc3RyaW5nX3RvX25hbWVzOiJDPU5MLCBPPU9mZnNwYXJrXCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5d3JpdGUuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXdyaXRlLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YmUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXdyaXRlLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMjAzIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3J0LmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5X2Nzci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisjaW5jbHVkZSAibWJlZHRscy9vaWQuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfQklHTlVNX0M6TUJFRFRMU19GU19JTzpNQkVEVExTX1BLX1BBUlNFX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19QRU1fV1JJVEVfQzpNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MgKi8KK3ZvaWQgeDUwOV9jc3JfY2hlY2soIGNoYXIgKmtleV9maWxlLCBjaGFyICpjZXJ0X3JlcV9jaGVja19maWxlLAorICAgICAgICAgICAgICAgICAgICAgaW50IG1kX3R5cGUsIGludCBrZXlfdXNhZ2UsIGludCBjZXJ0X3R5cGUgKQoreworICAgIG1iZWR0bHNfcGtfY29udGV4dCBrZXk7CisgICAgbWJlZHRsc194NTA5d3JpdGVfY3NyIHJlcTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls0MDk2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGNoZWNrX2J1Zls0MDAwXTsKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBvbGVuID0gMCwgcGVtX2xlbiA9IDA7CisgICAgaW50IGRlcl9sZW4gPSAtMTsKKyAgICBGSUxFICpmOworICAgIGNvbnN0IGNoYXIgKnN1YmplY3RfbmFtZSA9ICJDPU5MLE89UG9sYXJTU0wsQ049UG9sYXJTU0wgU2VydmVyIDEiOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKworICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDJhLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZrZXkgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAma2V5LCBrZXlfZmlsZSwgTlVMTCApID09IDAgKTsKKworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9pbml0KCAmcmVxICk7CisgICAgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9tZF9hbGcoICZyZXEsIG1kX3R5cGUgKTsKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2tleSggJnJlcSwgJmtleSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X3N1YmplY3RfbmFtZSggJnJlcSwgc3ViamVjdF9uYW1lICkgPT0gMCApOworICAgIGlmKCBrZXlfdXNhZ2UgIT0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2tleV91c2FnZSggJnJlcSwga2V5X3VzYWdlICkgPT0gMCApOworICAgIGlmKCBjZXJ0X3R5cGUgIT0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X25zX2NlcnRfdHlwZSggJnJlcSwgY2VydF90eXBlICkgPT0gMCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3NyX3BlbSggJnJlcSwgYnVmLCBzaXplb2YoYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKTsKKyAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKKworICAgIHBlbV9sZW4gPSBzdHJsZW4oIChjaGFyICopIGJ1ZiApOworCisgICAgZiA9IGZvcGVuKCBjZXJ0X3JlcV9jaGVja19maWxlLCAiciIgKTsKKyAgICBURVNUX0FTU0VSVCggZiAhPSBOVUxMICk7CisgICAgb2xlbiA9IGZyZWFkKCBjaGVja19idWYsIDEsIHNpemVvZiggY2hlY2tfYnVmICksIGYgKTsKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIFRFU1RfQVNTRVJUKCBvbGVuID49IHBlbV9sZW4gLSAxICk7CisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggYnVmLCBjaGVja19idWYsIHBlbV9sZW4gLSAxICkgPT0gMCApOworCisgICAgZGVyX2xlbiA9IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9kZXIoICZyZXEsIGJ1Ziwgc2l6ZW9mKCBidWYgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApOworICAgIFRFU1RfQVNTRVJUKCBkZXJfbGVuID49IDAgKTsKKworICAgIGlmKCBkZXJfbGVuID09IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfZGVyKCAmcmVxLCBidWYsIChzaXplX3QpKCBkZXJfbGVuIC0gMSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICk7CisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfZnJlZSggJnJlcSApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJmtleSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfUEVNX1dSSVRFX0M6TUJFRFRMU19YNTA5X0NSVF9XUklURV9DOk1CRURUTFNfU0hBMV9DICovCit2b2lkIHg1MDlfY3J0X2NoZWNrKCBjaGFyICpzdWJqZWN0X2tleV9maWxlLCBjaGFyICpzdWJqZWN0X3B3ZCwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnN1YmplY3RfbmFtZSwgY2hhciAqaXNzdWVyX2tleV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqaXNzdWVyX3B3ZCwgY2hhciAqaXNzdWVyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICBjaGFyICpzZXJpYWxfc3RyLCBjaGFyICpub3RfYmVmb3JlLCBjaGFyICpub3RfYWZ0ZXIsCisgICAgICAgICAgICAgICAgICAgICBpbnQgbWRfdHlwZSwgaW50IGtleV91c2FnZSwgaW50IGNlcnRfdHlwZSwgaW50IHZlciwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNlcnRfY2hlY2tfZmlsZSApCit7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHN1YmplY3Rfa2V5LCBpc3N1ZXJfa2V5OworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgY3J0OworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzQwOTZdOworICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tfYnVmWzUwMDBdOworICAgIG1iZWR0bHNfbXBpIHNlcmlhbDsKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBvbGVuID0gMCwgcGVtX2xlbiA9IDA7CisgICAgaW50IGRlcl9sZW4gPSAtMTsKKyAgICBGSUxFICpmOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKworICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDJhLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnNlcmlhbCApOworICAgIG1iZWR0bHNfcGtfaW5pdCggJnN1YmplY3Rfa2V5ICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmaXNzdWVyX2tleSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJnN1YmplY3Rfa2V5LCBzdWJqZWN0X2tleV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0X3B3ZCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmaXNzdWVyX2tleSwgaXNzdWVyX2tleV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXJfcHdkICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnNlcmlhbCwgMTAsIHNlcmlhbF9zdHIgKSA9PSAwICk7CisKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfaW5pdCggJmNydCApOworICAgIGlmKCB2ZXIgIT0gLTEgKQorICAgICAgICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3ZlcnNpb24oICZjcnQsIHZlciApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3NlcmlhbCggJmNydCwgJnNlcmlhbCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF92YWxpZGl0eSggJmNydCwgbm90X2JlZm9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdF9hZnRlciApID09IDAgKTsKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X21kX2FsZyggJmNydCwgbWRfdHlwZSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9uYW1lKCAmY3J0LCBpc3N1ZXJfbmFtZSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X25hbWUoICZjcnQsIHN1YmplY3RfbmFtZSApID09IDAgKTsKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5KCAmY3J0LCAmc3ViamVjdF9rZXkgKTsKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9rZXkoICZjcnQsICZpc3N1ZXJfa2V5ICk7CisKKyAgICBpZiggY3J0LnZlcnNpb24gPj0gTUJFRFRMU19YNTA5X0NSVF9WRVJTSU9OXzMgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfYmFzaWNfY29uc3RyYWludHMoICZjcnQsIDAsIDAgKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5X2lkZW50aWZpZXIoICZjcnQgKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2F1dGhvcml0eV9rZXlfaWRlbnRpZmllciggJmNydCApID09IDAgKTsKKyAgICAgICAgaWYoIGtleV91c2FnZSAhPSAwICkKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2tleV91c2FnZSggJmNydCwga2V5X3VzYWdlICkgPT0gMCApOworICAgICAgICBpZiggY2VydF90eXBlICE9IDAgKQorICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfbnNfY2VydF90eXBlKCAmY3J0LCBjZXJ0X3R5cGUgKSA9PSAwICk7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3BlbSggJmNydCwgYnVmLCBzaXplb2YoYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKTsKKyAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKKworICAgIHBlbV9sZW4gPSBzdHJsZW4oIChjaGFyICopIGJ1ZiApOworCisgICAgZiA9IGZvcGVuKCBjZXJ0X2NoZWNrX2ZpbGUsICJyIiApOworICAgIFRFU1RfQVNTRVJUKCBmICE9IE5VTEwgKTsKKyAgICBvbGVuID0gZnJlYWQoIGNoZWNrX2J1ZiwgMSwgc2l6ZW9mKGNoZWNrX2J1ZiksIGYgKTsKKyAgICBmY2xvc2UoIGYgKTsKKyAgICBURVNUX0FTU0VSVCggb2xlbiA8IHNpemVvZihjaGVja19idWYpICk7CisKKyAgICBURVNUX0FTU0VSVCggb2xlbiA+PSBwZW1fbGVuIC0gMSApOworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIGJ1ZiwgY2hlY2tfYnVmLCBwZW1fbGVuIC0gMSApID09IDAgKTsKKworICAgIGRlcl9sZW4gPSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfZGVyKCAmY3J0LCBidWYsIHNpemVvZiggYnVmICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKTsKKyAgICBURVNUX0FTU0VSVCggZGVyX2xlbiA+PSAwICk7CisKKyAgICBpZiggZGVyX2xlbiA9PSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X2RlciggJmNydCwgYnVmLCAoc2l6ZV90KSggZGVyX2xlbiAtIDEgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5d3JpdGVfY3J0X2ZyZWUoICZjcnQgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZpc3N1ZXJfa2V5ICk7CisgICAgbWJlZHRsc19wa19mcmVlKCAmc3ViamVjdF9rZXkgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmc2VyaWFsICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19YNTA5X0NSRUFURV9DOk1CRURUTFNfWDUwOV9VU0VfQyAqLwordm9pZCBtYmVkdGxzX3g1MDlfc3RyaW5nX3RvX25hbWVzKCBjaGFyICpuYW1lLCBjaGFyICpwYXJzZWRfbmFtZSwgaW50IHJlc3VsdCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKyAgICBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqbmFtZXMgPSBOVUxMOworICAgIG1iZWR0bHNfeDUwOV9uYW1lIHBhcnNlZCwgKnBhcnNlZF9jdXIsICpwYXJzZWRfcHJ2OworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdLCBvdXRbMTAyNF0sICpjOworCisgICAgbWVtc2V0KCAmcGFyc2VkLCAwLCBzaXplb2YoIHBhcnNlZCApICk7CisgICAgbWVtc2V0KCBvdXQsIDAsIHNpemVvZiggb3V0ICkgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgIGMgPSBidWYgKyBzaXplb2YoIGJ1ZiApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lcyggJm5hbWVzLCBuYW1lICk7CisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSByZXN1bHQgKTsKKworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV93cml0ZV9uYW1lcyggJmMsIGJ1ZiwgbmFtZXMgKTsKKyAgICBURVNUX0FTU0VSVCggcmV0ID4gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmYywgYnVmICsgc2l6ZW9mKCBidWYgKSwgJmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2dldF9uYW1lKCAmYywgYnVmICsgc2l6ZW9mKCBidWYgKSwgJnBhcnNlZCApID09IDAgKTsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9kbl9nZXRzKCAoY2hhciAqKSBvdXQsIHNpemVvZiggb3V0ICksICZwYXJzZWQgKTsKKyAgICBURVNUX0FTU0VSVCggcmV0ID4gMCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgb3V0LCBwYXJzZWRfbmFtZSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2FzbjFfZnJlZV9uYW1lZF9kYXRhX2xpc3QoICZuYW1lcyApOworCisgICAgcGFyc2VkX2N1ciA9IHBhcnNlZC5uZXh0OworICAgIHdoaWxlKCBwYXJzZWRfY3VyICE9IDAgKQorICAgIHsKKyAgICAgICAgcGFyc2VkX3BydiA9IHBhcnNlZF9jdXI7CisgICAgICAgIHBhcnNlZF9jdXIgPSBwYXJzZWRfY3VyLT5uZXh0OworICAgICAgICBtYmVkdGxzX2ZyZWUoIHBhcnNlZF9wcnYgKTsKKyAgICB9Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3h0ZWEuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94dGVhLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkMDZkNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94dGVhLmRhdGEKQEAgLTAsMCArMSw3NiBAQAorWFRFQSBFbmNyeXB0X2VjYiAjMQoreHRlYV9lbmNyeXB0X2VjYjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiI0MTQyNDM0NDQ1NDY0NzQ4IjoiNDk3ZGYzZDA3MjYxMmNiNSIKKworWFRFQSBFbmNyeXB0X2VjYiAjMgoreHRlYV9lbmNyeXB0X2VjYjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiI0MTQxNDE0MTQxNDE0MTQxIjoiZTc4ZjJkMTM3NDQzNDFkOCIKKworWFRFQSBFbmNyeXB0X2VjYiAjMworeHRlYV9lbmNyeXB0X2VjYjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiI1YTViNmUyNzg5NDhkNzdmIjoiNDE0MTQxNDE0MTQxNDE0MSIKKworWFRFQSBFbmNyeXB0X2VjYiAjNAoreHRlYV9lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0MTQyNDM0NDQ1NDY0NzQ4IjoiYTAzOTA1ODlmOGI4ZWZhNSIKKworWFRFQSBFbmNyeXB0X2VjYiAjNQoreHRlYV9lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0MTQxNDE0MTQxNDE0MTQxIjoiZWQyMzM3NWE4MjFhOGMyZCIKKworWFRFQSBFbmNyeXB0X2VjYiAjNgoreHRlYV9lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3MGUxMjI1ZDZlNGU3NjU1IjoiNDE0MTQxNDE0MTQxNDE0MSIKKworWFRFQSBEZWNyeXB0X2VjYiAjMQoreHRlYV9kZWNyeXB0X2VjYjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiI0OTdkZjNkMDcyNjEyY2I1IjoiNDE0MjQzNDQ0NTQ2NDc0OCIKKworWFRFQSBEZWNyeXB0X2VjYiAjMgoreHRlYV9kZWNyeXB0X2VjYjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiJlNzhmMmQxMzc0NDM0MWQ4IjoiNDE0MTQxNDE0MTQxNDE0MSIKKworWFRFQSBEZWNyeXB0X2VjYiAjMworeHRlYV9kZWNyeXB0X2VjYjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiI0MTQxNDE0MTQxNDE0MTQxIjoiNWE1YjZlMjc4OTQ4ZDc3ZiIKKworWFRFQSBEZWNyeXB0X2VjYiAjNAoreHRlYV9kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhMDM5MDU4OWY4YjhlZmE1IjoiNDE0MjQzNDQ0NTQ2NDc0OCIKKworWFRFQSBEZWNyeXB0X2VjYiAjNQoreHRlYV9kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJlZDIzMzc1YTgyMWE4YzJkIjoiNDE0MTQxNDE0MTQxNDE0MSIKKworWFRFQSBEZWNyeXB0X2VjYiAjNgoreHRlYV9kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0MTQxNDE0MTQxNDE0MTQxIjoiNzBlMTIyNWQ2ZTRlNzY1NSIKKworWFRFQSBFbmNyeXB0IENCQyAjMQoreHRlYV9lbmNyeXB0X2NiYzoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiI2MTYyNjM2NDY1NjY2NzY4IjoiNDE0MjQzNDQ0NTQ2NDc0OCI6IjZiOTgyYmVjMTVhN2I1NTgiCisKK1hURUEgRW5jcnlwdCBDQkMgIzIKK3h0ZWFfZW5jcnlwdF9jYmM6IjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmIjoiNDE0MjQzNDQ0NTQ2NDc0OCI6IjQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxIjoiMmM2YWViNzk5NTYxYzhlOTczYjA5MjdmMDcyZTM4MDEiCisKK1hURUEgRW5jcnlwdCBDQkMgIzMKK3h0ZWFfZW5jcnlwdF9jYmM6IjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmIjoiMDAwMDAwMDAwMDAwMDAwMCI6IjVhNWI2ZTI3ODk0OGQ3N2Y3MGUxMjI1ZDZlNGU3NjU1ZTc4ZjJkMTM3NDQzNDFkOCI6IjQxNDE0MTQxNDE0MTQxNDE1ZmVlMTAwZmUyYzAzMDAyNWQ4YTU1N2YyNjc3Y2IzMyIKKworWFRFQSBFbmNyeXB0IENCQyAjNAoreHRlYV9lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2MTYyNjM2NDY1NjY2NzY4IjoiNDE0MjQzNDQ0NTQ2NDc0OCI6IjViMGMwNjVhMzgwMzkwMGQiCisKK1hURUEgRW5jcnlwdCBDQkMgIzUKK3h0ZWFfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDE0MjQzNDQ0NTQ2NDc0OCI6IjQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxIjoiYmRhZTUwOGFhMzIwYWE1Y2FhN2NkNzlkYmM5YzM4YWEiCisKK1hURUEgRW5jcnlwdCBDQkMgIzYKK3h0ZWFfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMCI6IjVhNWI2ZTI3ODk0OGQ3N2Y3MGUxMjI1ZDZlNGU3NjU1ZTc4ZjJkMTM3NDQzNDFkOCI6IjYxZjUwODJhMmM5OTZmNjMyZGEzZWExNmZmOGUwNjU1OGI2OWYwNjlkODYzN2IzMSIKKworWFRFQSBEZWNyeXB0IENCQyAjMQoreHRlYV9kZWNyeXB0X2NiYzoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiI2MTYyNjM2NDY1NjY2NzY4IjoiNDE0MjQzNDQ0NTQ2NDc0OCI6IjM1OWRlZjQ2NTE1YzcxYjIiCisKK1hURUEgRGVjcnlwdCBDQkMgIzIKK3h0ZWFfZGVjcnlwdF9jYmM6IjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmIjoiNDE0MjQzNDQ0NTQ2NDc0OCI6IjQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxIjoiMWIxOTJkNjNjYzBlOTAzNzFiMWEyZjY2YzgwOTk2M2UiCisKK1hURUEgRGVjcnlwdCBDQkMgIzMKK3h0ZWFfZGVjcnlwdF9jYmM6IjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmIjoiMDAwMDAwMDAwMDAwMDAwMCI6IjVhNWI2ZTI3ODk0OGQ3N2Y3MGUxMjI1ZDZlNGU3NjU1ZTc4ZjJkMTM3NDQzNDFkOCI6IjJlNzZlNWNjMDM1NDNjZGM0MGNhMDMzNThhNTc2NGMzMzFhMDYzMWMyZjBmMzcxNCIKKworWFRFQSBEZWNyeXB0IENCQyAjNAoreHRlYV9kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2MTYyNjM2NDY1NjY2NzY4IjoiNDE0MjQzNDQ0NTQ2NDc0OCI6IjgxNDc2YTE1MTM4MTc0ZGMiCisKK1hURUEgRGVjcnlwdCBDQkMgIzUKK3h0ZWFfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDE0MjQzNDQ0NTQ2NDc0OCI6IjQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxIjoiMzFhMzYxMTkyYjA4MzExZDMxYTA2MzFjMmYwZjM3MTQiCisKK1hURUEgRGVjcnlwdCBDQkMgIzYKK3h0ZWFfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMCI6IjVhNWI2ZTI3ODk0OGQ3N2Y3MGUxMjI1ZDZlNGU3NjU1ZTc4ZjJkMTM3NDQzNDFkOCI6ImMxZTJkYmJmNjdlZTc4NmUyOWUwNTFiZWExOGM2YWJjNjZmMWRlNWMyZGFlZmMyYSIKKworWFRFQSBTZWxmdGVzdAorZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVAoreHRlYV9zZWxmdGVzdDoKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3h0ZWEuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeHRlYS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM3MTRhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3h0ZWEuZnVuY3Rpb24KQEAgLTAsMCArMSwxMjkgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMveHRlYS5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19YVEVBX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHh0ZWFfZW5jcnlwdF9lY2IoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc194dGVhX2NvbnRleHQgY3R4OworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKworICAgIHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc194dGVhX3NldHVwKCAmY3R4LCBrZXlfc3RyICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeHRlYV9jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfWFRFQV9FTkNSWVBULCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIDggKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCB4dGVhX2RlY3J5cHRfZWNiKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9kc3Rfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfeHRlYV9jb250ZXh0IGN0eDsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisKKyAgICB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfeHRlYV9zZXR1cCggJmN0eCwga2V5X3N0ciApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3h0ZWFfY3J5cHRfZWNiKCAmY3R4LCBNQkVEVExTX1hURUFfREVDUllQVCwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCA4ICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwordm9pZCB4dGVhX2VuY3J5cHRfY2JjKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X2l2X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgc2l6ZV90IGxlbjsKKyAgICBtYmVkdGxzX3h0ZWFfY29udGV4dCBjdHg7CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisKKyAgICB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX3h0ZWFfc2V0dXAoICZjdHgsIGtleV9zdHIgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194dGVhX2NyeXB0X2NiYyggJmN0eCwgTUJFRFRMU19YVEVBX0VOQ1JZUFQsIGxlbiwgaXZfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBsZW4gKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCit2b2lkIHh0ZWFfZGVjcnlwdF9jYmMoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBzaXplX3QgbGVuOworICAgIG1iZWR0bHNfeHRlYV9jb250ZXh0IGN0eDsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKworICAgIHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBsZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfeHRlYV9zZXR1cCggJmN0eCwga2V5X3N0ciApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3h0ZWFfY3J5cHRfY2JjKCAmY3R4LCBNQkVEVExTX1hURUFfREVDUllQVCwgbGVuLCBpdl9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIGxlbiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgeHRlYV9zZWxmdGVzdCgpCit7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeHRlYV9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2Flc2NyeXB0Mi52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2Flc2NyeXB0Mi52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkM2U2MDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvYWVzY3J5cHQyLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcYWVzXGFlc2NyeXB0Mi5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57N0E4NTFEQkQtN0Q1Ny1FOEY0LTg1RTUtQ0NBNzJBRUE3REY4fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmFlc2NyeXB0MjwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvYmVuY2htYXJrLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvYmVuY2htYXJrLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkMjlmNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9iZW5jaG1hcmsudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1x0ZXN0XGJlbmNobWFyay5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57OTBFRkQ5QTQtQzZCMC0zRUU4LTFGMDYtMEEwRTBENTVBRURBfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmJlbmNobWFyazwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvY2VydF9hcHAudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jZXJ0X2FwcC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZWM1N2UKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvY2VydF9hcHAudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1x4NTA5XGNlcnRfYXBwLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntENEQ2OTFENC0xMzdDLUNCRkEtNzM1Qi1ENDY2MzZEN0U0RDh9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+Y2VydF9hcHA8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2NlcnRfcmVxLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvY2VydF9yZXEudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjMyZTUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2NlcnRfcmVxLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNceDUwOVxjZXJ0X3JlcS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QzlFMkFCMTUtOEFFRi1ERDQ4LTYwQzMtNTU3RUNDNTIxNUJFfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmNlcnRfcmVxPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jZXJ0X3dyaXRlLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvY2VydF93cml0ZS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MTU2YjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvY2VydF93cml0ZS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHg1MDlcY2VydF93cml0ZS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57MzVFNTJFNDYtM0JBOS00MzYxLTQxRDMtNTM2NjNDMkU5QjhBfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmNlcnRfd3JpdGU8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2NybF9hcHAudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jcmxfYXBwLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2NzNiYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jcmxfYXBwLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNceDUwOVxjcmxfYXBwLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntEQjkwNEI4NS1BRDMxLUI3RkItMTE0Ri04ODc2MENDNDg1RjJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+Y3JsX2FwcDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvY3J5cHRfYW5kX2hhc2gudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jcnlwdF9hbmRfaGFzaC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkODc0OTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvY3J5cHRfYW5kX2hhc2gudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xhZXNcY3J5cHRfYW5kX2hhc2guYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezVEQkI5RkMzLTZGRDYtQ0E4RC1FMEZBLTM1RjFFNzVFRkFFN308L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5jcnlwdF9hbmRfaGFzaDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZGhfY2xpZW50LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZGhfY2xpZW50LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiYTdlMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9kaF9jbGllbnQudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XGRoX2NsaWVudC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NEQyOUJFNEEtOTc5Qy1DNUFFLTQ0QjUtMzBGQjM3RDhENEVFfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmRoX2NsaWVudDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZGhfZ2VucHJpbWUudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9kaF9nZW5wcmltZS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZGU4MTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZGhfZ2VucHJpbWUudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XGRoX2dlbnByaW1lLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns3MTg5NjBEOS01REE2LTdCNTYtMzlBRC02MzdFODEwNzZDNzF9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+ZGhfZ2VucHJpbWU8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2RoX3NlcnZlci52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2RoX3NlcnZlci52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOTkxMmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZGhfc2VydmVyLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxkaF9zZXJ2ZXIuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezhEOTFCODA0LUUyQ0UtMTQyRC04RTA2LUZCQjAzN0VEMUY2NX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5kaF9zZXJ2ZXI8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2R0bHNfY2xpZW50LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZHRsc19jbGllbnQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzI4ZDNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2R0bHNfY2xpZW50LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcc3NsXGR0bHNfY2xpZW50LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntGRTdBQjc4Ri1EQkYxLTA3MjEtMzUyMi0wRDdDMzAxMUQyRTV9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+ZHRsc19jbGllbnQ8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2R0bHNfc2VydmVyLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZHRsc19zZXJ2ZXIudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGJiNGIzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2R0bHNfc2VydmVyLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcc3NsXGR0bHNfc2VydmVyLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntCRkU4OUVBQS1EOThCLTM0RTEtQzVBNC00MDgwRjZGRkUzMTd9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+ZHRsc19zZXJ2ZXI8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2VjZHNhLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZWNkc2EudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTQ3MGNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2VjZHNhLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxlY2RzYS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RjU4MTQyQ0MtMENDNy0wQjE4LTVBMEYtNTM2NDJDRkJBMThFfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmVjZHNhPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9nZW5fZW50cm9weS52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbl9lbnRyb3B5LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlNWYyNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9nZW5fZW50cm9weS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHJhbmRvbVxnZW5fZW50cm9weS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57REU2OTUwNjQtMTNDMy0xOEIwLTM3OEQtOEIyMjY3MkJGM0Y0fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmdlbl9lbnRyb3B5PC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9nZW5fa2V5LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZ2VuX2tleS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZWVjNDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZ2VuX2tleS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHBrZXlcZ2VuX2tleS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QkY3ODJBNTAtRTlBRS0wMENDLUMyOEEtQzlEQThBQUI0RDUyfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmdlbl9rZXk8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbl9yYW5kb21fY3RyX2RyYmcudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9nZW5fcmFuZG9tX2N0cl9kcmJnLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyMGI5MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9nZW5fcmFuZG9tX2N0cl9kcmJnLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccmFuZG9tXGdlbl9yYW5kb21fY3RyX2RyYmcuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezVGQ0M3MUY2LUZGMzMtRUJDRi1GQkEyLThGQzc4M0Q1MzE4RX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5nZW5fcmFuZG9tX2N0cl9kcmJnPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9nZW5fcmFuZG9tX2hhdmVnZS52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbl9yYW5kb21faGF2ZWdlLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3ZjY2NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9nZW5fcmFuZG9tX2hhdmVnZS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHJhbmRvbVxnZW5fcmFuZG9tX2hhdmVnZS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NzEyNTc4MDItQkJDQS05OUY1LUU5RDItOTA1NzM4RjMwODkzfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmdlbl9yYW5kb21faGF2ZWdlPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9nZW5lcmljX3N1bS52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbmVyaWNfc3VtLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwMWVlYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9nZW5lcmljX3N1bS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXGhhc2hcZ2VuZXJpY19zdW0uYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0QwNzFDQ0Y3LUFDQTAtMjFGOC1EMzgyLTUyQTc1OUFFQTI2MX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5nZW5lcmljX3N1bTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvaGVsbG8udmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9oZWxsby52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NGFiZWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvaGVsbG8udmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xoYXNoXGhlbGxvLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntCMDJENEFFMS0wMjE4LTFDRDQtRjQ0RS1FRkFFMTlCMDFCOER9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+aGVsbG88L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2tleV9hcHAudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9rZXlfYXBwLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmMTBmMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9rZXlfYXBwLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxrZXlfYXBwLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPnsxMEFFMzc2Ri0xQTcwLTAyOTctMDIxNi0xRkQwMUFEMTVEMTl9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+a2V5X2FwcDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAva2V5X2FwcF93cml0ZXIudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9rZXlfYXBwX3dyaXRlci52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Njg1NjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAva2V5X2FwcF93cml0ZXIudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XGtleV9hcHBfd3JpdGVyLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntFOEVENzlGOS04MDM0LTFCMDktMjYzRS1EM0Y4QzRDNUM0QTh9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+a2V5X2FwcF93cml0ZXI8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL21iZWRUTFMuc2xuIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL21iZWRUTFMuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYTk4NmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWJlZFRMUy5zbG4KQEAgLTAsMCArMSw2MzcgQEAKK++7vworTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gMTEuMDAKKyMgVmlzdWFsIEMrKyBFeHByZXNzIDIwMTAKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWJlZFRMUyIsICJtYmVkVExTLnZjeHByb2oiLCAiezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImFlc2NyeXB0MiIsICJhZXNjcnlwdDIudmN4cHJvaiIsICJ7N0E4NTFEQkQtN0Q1Ny1FOEY0LTg1RTUtQ0NBNzJBRUE3REY4fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJjcnlwdF9hbmRfaGFzaCIsICJjcnlwdF9hbmRfaGFzaC52Y3hwcm9qIiwgIns1REJCOUZDMy02RkQ2LUNBOEQtRTBGQS0zNUYxRTc1RUZBRTd9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImhlbGxvIiwgImhlbGxvLnZjeHByb2oiLCAie0IwMkQ0QUUxLTAyMTgtMUNENC1GNDRFLUVGQUUxOUIwMUI4RH0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZ2VuZXJpY19zdW0iLCAiZ2VuZXJpY19zdW0udmN4cHJvaiIsICJ7RDA3MUNDRjctQUNBMC0yMUY4LUQzODItNTJBNzU5QUVBMjYxfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJkaF9jbGllbnQiLCAiZGhfY2xpZW50LnZjeHByb2oiLCAiezREMjlCRTRBLTk3OUMtQzVBRS00NEI1LTMwRkIzN0Q4RDRFRX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZGhfZ2VucHJpbWUiLCAiZGhfZ2VucHJpbWUudmN4cHJvaiIsICJ7NzE4OTYwRDktNURBNi03QjU2LTM5QUQtNjM3RTgxMDc2QzcxfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJkaF9zZXJ2ZXIiLCAiZGhfc2VydmVyLnZjeHByb2oiLCAiezhEOTFCODA0LUUyQ0UtMTQyRC04RTA2LUZCQjAzN0VEMUY2NX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZWNkaF9jdXJ2ZTI1NTE5IiwgImVjZGhfY3VydmUyNTUxOS52Y3hwcm9qIiwgIns4MkVFNDk3RS0xMkNDLTdDNUItQTA3Mi02NjU2NzhBQ0I0M0V9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImVjZHNhIiwgImVjZHNhLnZjeHByb2oiLCAie0Y1ODE0MkNDLTBDQzctMEIxOC01QTBGLTUzNjQyQ0ZCQTE4RX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZ2VuX2tleSIsICJnZW5fa2V5LnZjeHByb2oiLCAie0JGNzgyQTUwLUU5QUUtMDBDQy1DMjhBLUM5REE4QUFCNEQ1Mn0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAia2V5X2FwcCIsICJrZXlfYXBwLnZjeHByb2oiLCAiezEwQUUzNzZGLTFBNzAtMDI5Ny0wMjE2LTFGRDAxQUQxNUQxOX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAia2V5X2FwcF93cml0ZXIiLCAia2V5X2FwcF93cml0ZXIudmN4cHJvaiIsICJ7RThFRDc5RjktODAzNC0xQjA5LTI2M0UtRDNGOEM0QzVDNEE4fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtcGlfZGVtbyIsICJtcGlfZGVtby52Y3hwcm9qIiwgIntBNTlGQUEwQi05QzM0LTFGOTktNzk0RC1BMzY1QTNBQThDQ0V9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInBrX2RlY3J5cHQiLCAicGtfZGVjcnlwdC52Y3hwcm9qIiwgInsxRUM2Q0JBMy02MTg3LUQ0NTYtRDlCNy1BMzUzOTkzOTVENzF9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInBrX2VuY3J5cHQiLCAicGtfZW5jcnlwdC52Y3hwcm9qIiwgIns1NTAwNzE3OS03NzQ2LTlDRkItOTdFQy02NTEwMkZCMjcyQzh9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInBrX3NpZ24iLCAicGtfc2lnbi52Y3hwcm9qIiwgIntGMkU4Q0E1NS01OTdGLTdGREMtNjQ1Ni1EODY1MEZCOTcwQTN9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInBrX3ZlcmlmeSIsICJwa192ZXJpZnkudmN4cHJvaiIsICJ7QzQyOUIzMzYtMUIzMC0xMTlDLTNCMzQtMjFBMTg2RDY3NDRGfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJyc2FfZ2Vua2V5IiwgInJzYV9nZW5rZXkudmN4cHJvaiIsICJ7RjQ3MjQ3NUMtRjY3Ny0wRTdGLUYxMjctNDVCRjVCNjRGNjIyfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJyc2FfZGVjcnlwdCIsICJyc2FfZGVjcnlwdC52Y3hwcm9qIiwgIntFMEQ3MUQ3Mi04REY0LUNDRkMtRUY2MC03NDFFQURBQjhCRjl9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInJzYV9lbmNyeXB0IiwgInJzYV9lbmNyeXB0LnZjeHByb2oiLCAie0QwNkNGMTJFLUYyMjItOTI3My00MUJGLUI4QTA1MkZBNTUyN30iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicnNhX3NpZ24iLCAicnNhX3NpZ24udmN4cHJvaiIsICJ7MTA3OTBGNDktNjg4Ny1BQUI2LTJEODYtQkNCRDUxNkY4RDI2fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJyc2FfdmVyaWZ5IiwgInJzYV92ZXJpZnkudmN4cHJvaiIsICJ7Njg5RTI4Q0YtODlFRC1CQTM4LTNBMTQtNzhBNzVEODkxRDQ2fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJyc2Ffc2lnbl9wc3MiLCAicnNhX3NpZ25fcHNzLnZjeHByb2oiLCAie0RDRDNBMUI2LTVFQzEtODI2Ni05M0VGLUJEMkI5QkVGRTEyRH0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicnNhX3ZlcmlmeV9wc3MiLCAicnNhX3ZlcmlmeV9wc3MudmN4cHJvaiIsICJ7OTVDNTA4NjQtODU0Qy0yQTExLTRDOTEtQkNFNjU0RTM0NEZCfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJkdGxzX2NsaWVudCIsICJkdGxzX2NsaWVudC52Y3hwcm9qIiwgIntGRTdBQjc4Ri1EQkYxLTA3MjEtMzUyMi0wRDdDMzAxMUQyRTV9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImR0bHNfc2VydmVyIiwgImR0bHNfc2VydmVyLnZjeHByb2oiLCAie0JGRTg5RUFBLUQ5OEItMzRFMS1DNUE0LTQwODBGNkZGRTMxN30iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3NsX2NsaWVudDEiLCAic3NsX2NsaWVudDEudmN4cHJvaiIsICJ7NDg3QTJGODAtM0NBMy02NzhELTg4RDUtODIxOTQ4NzJDRjA4fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzc2xfY2xpZW50MiIsICJzc2xfY2xpZW50Mi52Y3hwcm9qIiwgIns0RTU5MEU5RC1FMjhGLTg3RkYtMzg1Qi1ENTg3MzYzODgyMzF9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNzbF9zZXJ2ZXIiLCAic3NsX3NlcnZlci52Y3hwcm9qIiwgIntFMDhFMDA2NS04OTZBLTc0ODctREVBNS1EM0I4MEI3MUY5NzV9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNzbF9zZXJ2ZXIyIiwgInNzbF9zZXJ2ZXIyLnZjeHByb2oiLCAie0E0REE3NDYzLTEwNDctQkRGNS1FMUIzLTU2MzJDQjU3M0Y0MX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3NsX2Zvcmtfc2VydmVyIiwgInNzbF9mb3JrX3NlcnZlci52Y3hwcm9qIiwgIns5MThDRDQwMi0wNDdELTg0NjctRTExQy1FMTEzMjA1M0Y5MTZ9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1pbmlfY2xpZW50IiwgIm1pbmlfY2xpZW50LnZjeHByb2oiLCAie0M0RkUyOUVBLTI2NkQtNTI5NS00ODQwLTk3NkI5QjVCMzg0M30iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3NsX21haWxfY2xpZW50IiwgInNzbF9tYWlsX2NsaWVudC52Y3hwcm9qIiwgIns3QzQ4NjNBMS05NDFBLUM1QUUtRTFGOS0zMEYwNjJFNEIyRkR9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImdlbl9lbnRyb3B5IiwgImdlbl9lbnRyb3B5LnZjeHByb2oiLCAie0RFNjk1MDY0LTEzQzMtMThCMC0zNzhELThCMjI2NzJCRjNGNH0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZ2VuX3JhbmRvbV9oYXZlZ2UiLCAiZ2VuX3JhbmRvbV9oYXZlZ2UudmN4cHJvaiIsICJ7NzEyNTc4MDItQkJDQS05OUY1LUU5RDItOTA1NzM4RjMwODkzfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJnZW5fcmFuZG9tX2N0cl9kcmJnIiwgImdlbl9yYW5kb21fY3RyX2RyYmcudmN4cHJvaiIsICJ7NUZDQzcxRjYtRkYzMy1FQkNGLUZCQTItOEZDNzgzRDUzMThFfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzc2xfY2VydF90ZXN0IiwgInNzbF9jZXJ0X3Rlc3QudmN4cHJvaiIsICJ7M0ZFMEMwRTEtRDlCQS02QTI2LTM4MEMtRjI5M0U1NDNCOTE0fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJiZW5jaG1hcmsiLCAiYmVuY2htYXJrLnZjeHByb2oiLCAiezkwRUZEOUE0LUM2QjAtM0VFOC0xRjA2LTBBMEUwRDU1QUVEQX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic2VsZnRlc3QiLCAic2VsZnRlc3QudmN4cHJvaiIsICJ7N0RCQzVGNzctM0RBMS01RjczLTg0MjEtRTY5M0Q5NUZDNjZBfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ1ZHBfcHJveHkiLCAidWRwX3Byb3h5LnZjeHByb2oiLCAiezdFMkM4MEZFLTNDQzMtODJCNC0wQ0FELTY1REMyMzNERTEzQX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicGVtMmRlciIsICJwZW0yZGVyLnZjeHByb2oiLCAie0QzQzZGQkQ2LUQ3OEUtNzE4MC04MzQ1LTVFMDlCNDkyREJFQ30iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3RyZXJyb3IiLCAic3RyZXJyb3IudmN4cHJvaiIsICJ7MjNFRjczNUMtQ0M0Qy0zRUM0LUE3NUUtOTAzREIzNDBGMDRBfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJjZXJ0X2FwcCIsICJjZXJ0X2FwcC52Y3hwcm9qIiwgIntENEQ2OTFENC0xMzdDLUNCRkEtNzM1Qi1ENDY2MzZEN0U0RDh9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImNybF9hcHAiLCAiY3JsX2FwcC52Y3hwcm9qIiwgIntEQjkwNEI4NS1BRDMxLUI3RkItMTE0Ri04ODc2MENDNDg1RjJ9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImNlcnRfcmVxIiwgImNlcnRfcmVxLnZjeHByb2oiLCAie0M5RTJBQjE1LThBRUYtREQ0OC02MEMzLTU1N0VDQzUyMTVCRX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiY2VydF93cml0ZSIsICJjZXJ0X3dyaXRlLnZjeHByb2oiLCAiezM1RTUyRTQ2LTNCQTktNDM2MS00MUQzLTUzNjYzQzJFOUI4QX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicmVxX2FwcCIsICJyZXFfYXBwLnZjeHByb2oiLCAiezQ4NkIxMzc1LTVDRkEtQzJEMi1ERDg5LUM5RjQ5N0JBRENCM30iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK0dsb2JhbAorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uCisJCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzIKKwkJRGVidWd8eDY0ID0gRGVidWd8eDY0CisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyCisJCVJlbGVhc2V8eDY0ID0gUmVsZWFzZXx4NjQKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24KKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs3QTg1MURCRC03RDU3LUU4RjQtODVFNS1DQ0E3MkFFQTdERjh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs3QTg1MURCRC03RDU3LUU4RjQtODVFNS1DQ0E3MkFFQTdERjh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7N0E4NTFEQkQtN0Q1Ny1FOEY0LTg1RTUtQ0NBNzJBRUE3REY4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs3QTg1MURCRC03RDU3LUU4RjQtODVFNS1DQ0E3MkFFQTdERjh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs3QTg1MURCRC03RDU3LUU4RjQtODVFNS1DQ0E3MkFFQTdERjh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7N0E4NTFEQkQtN0Q1Ny1FOEY0LTg1RTUtQ0NBNzJBRUE3REY4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs3QTg1MURCRC03RDU3LUU4RjQtODVFNS1DQ0E3MkFFQTdERjh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs3QTg1MURCRC03RDU3LUU4RjQtODVFNS1DQ0E3MkFFQTdERjh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NURCQjlGQzMtNkZENi1DQThELUUwRkEtMzVGMUU3NUVGQUU3fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NURCQjlGQzMtNkZENi1DQThELUUwRkEtMzVGMUU3NUVGQUU3fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezVEQkI5RkMzLTZGRDYtQ0E4RC1FMEZBLTM1RjFFNzVFRkFFN30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7NURCQjlGQzMtNkZENi1DQThELUUwRkEtMzVGMUU3NUVGQUU3fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7NURCQjlGQzMtNkZENi1DQThELUUwRkEtMzVGMUU3NUVGQUU3fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezVEQkI5RkMzLTZGRDYtQ0E4RC1FMEZBLTM1RjFFNzVFRkFFN30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NURCQjlGQzMtNkZENi1DQThELUUwRkEtMzVGMUU3NUVGQUU3fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7NURCQjlGQzMtNkZENi1DQThELUUwRkEtMzVGMUU3NUVGQUU3fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0IwMkQ0QUUxLTAyMTgtMUNENC1GNDRFLUVGQUUxOUIwMUI4RH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0IwMkQ0QUUxLTAyMTgtMUNENC1GNDRFLUVGQUUxOUIwMUI4RH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtCMDJENEFFMS0wMjE4LTFDRDQtRjQ0RS1FRkFFMTlCMDFCOER9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0IwMkQ0QUUxLTAyMTgtMUNENC1GNDRFLUVGQUUxOUIwMUI4RH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0IwMkQ0QUUxLTAyMTgtMUNENC1GNDRFLUVGQUUxOUIwMUI4RH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtCMDJENEFFMS0wMjE4LTFDRDQtRjQ0RS1FRkFFMTlCMDFCOER9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0IwMkQ0QUUxLTAyMTgtMUNENC1GNDRFLUVGQUUxOUIwMUI4RH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0IwMkQ0QUUxLTAyMTgtMUNENC1GNDRFLUVGQUUxOUIwMUI4RH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtEMDcxQ0NGNy1BQ0EwLTIxRjgtRDM4Mi01MkE3NTlBRUEyNjF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtEMDcxQ0NGNy1BQ0EwLTIxRjgtRDM4Mi01MkE3NTlBRUEyNjF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDA3MUNDRjctQUNBMC0yMUY4LUQzODItNTJBNzU5QUVBMjYxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtEMDcxQ0NGNy1BQ0EwLTIxRjgtRDM4Mi01MkE3NTlBRUEyNjF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtEMDcxQ0NGNy1BQ0EwLTIxRjgtRDM4Mi01MkE3NTlBRUEyNjF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RDA3MUNDRjctQUNBMC0yMUY4LUQzODItNTJBNzU5QUVBMjYxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtEMDcxQ0NGNy1BQ0EwLTIxRjgtRDM4Mi01MkE3NTlBRUEyNjF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtEMDcxQ0NGNy1BQ0EwLTIxRjgtRDM4Mi01MkE3NTlBRUEyNjF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NEQyOUJFNEEtOTc5Qy1DNUFFLTQ0QjUtMzBGQjM3RDhENEVFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NEQyOUJFNEEtOTc5Qy1DNUFFLTQ0QjUtMzBGQjM3RDhENEVFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezREMjlCRTRBLTk3OUMtQzVBRS00NEI1LTMwRkIzN0Q4RDRFRX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7NEQyOUJFNEEtOTc5Qy1DNUFFLTQ0QjUtMzBGQjM3RDhENEVFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7NEQyOUJFNEEtOTc5Qy1DNUFFLTQ0QjUtMzBGQjM3RDhENEVFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezREMjlCRTRBLTk3OUMtQzVBRS00NEI1LTMwRkIzN0Q4RDRFRX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NEQyOUJFNEEtOTc5Qy1DNUFFLTQ0QjUtMzBGQjM3RDhENEVFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7NEQyOUJFNEEtOTc5Qy1DNUFFLTQ0QjUtMzBGQjM3RDhENEVFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezcxODk2MEQ5LTVEQTYtN0I1Ni0zOUFELTYzN0U4MTA3NkM3MX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezcxODk2MEQ5LTVEQTYtN0I1Ni0zOUFELTYzN0U4MTA3NkM3MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs3MTg5NjBEOS01REE2LTdCNTYtMzlBRC02MzdFODEwNzZDNzF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezcxODk2MEQ5LTVEQTYtN0I1Ni0zOUFELTYzN0U4MTA3NkM3MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezcxODk2MEQ5LTVEQTYtN0I1Ni0zOUFELTYzN0U4MTA3NkM3MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs3MTg5NjBEOS01REE2LTdCNTYtMzlBRC02MzdFODEwNzZDNzF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezcxODk2MEQ5LTVEQTYtN0I1Ni0zOUFELTYzN0U4MTA3NkM3MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezcxODk2MEQ5LTVEQTYtN0I1Ni0zOUFELTYzN0U4MTA3NkM3MX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs4RDkxQjgwNC1FMkNFLTE0MkQtOEUwNi1GQkIwMzdFRDFGNjV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs4RDkxQjgwNC1FMkNFLTE0MkQtOEUwNi1GQkIwMzdFRDFGNjV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7OEQ5MUI4MDQtRTJDRS0xNDJELThFMDYtRkJCMDM3RUQxRjY1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs4RDkxQjgwNC1FMkNFLTE0MkQtOEUwNi1GQkIwMzdFRDFGNjV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs4RDkxQjgwNC1FMkNFLTE0MkQtOEUwNi1GQkIwMzdFRDFGNjV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7OEQ5MUI4MDQtRTJDRS0xNDJELThFMDYtRkJCMDM3RUQxRjY1fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs4RDkxQjgwNC1FMkNFLTE0MkQtOEUwNi1GQkIwMzdFRDFGNjV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs4RDkxQjgwNC1FMkNFLTE0MkQtOEUwNi1GQkIwMzdFRDFGNjV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7ODJFRTQ5N0UtMTJDQy03QzVCLUEwNzItNjY1Njc4QUNCNDNFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7ODJFRTQ5N0UtMTJDQy03QzVCLUEwNzItNjY1Njc4QUNCNDNFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezgyRUU0OTdFLTEyQ0MtN0M1Qi1BMDcyLTY2NTY3OEFDQjQzRX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7ODJFRTQ5N0UtMTJDQy03QzVCLUEwNzItNjY1Njc4QUNCNDNFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7ODJFRTQ5N0UtMTJDQy03QzVCLUEwNzItNjY1Njc4QUNCNDNFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezgyRUU0OTdFLTEyQ0MtN0M1Qi1BMDcyLTY2NTY3OEFDQjQzRX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7ODJFRTQ5N0UtMTJDQy03QzVCLUEwNzItNjY1Njc4QUNCNDNFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7ODJFRTQ5N0UtMTJDQy03QzVCLUEwNzItNjY1Njc4QUNCNDNFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0Y1ODE0MkNDLTBDQzctMEIxOC01QTBGLTUzNjQyQ0ZCQTE4RX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0Y1ODE0MkNDLTBDQzctMEIxOC01QTBGLTUzNjQyQ0ZCQTE4RX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtGNTgxNDJDQy0wQ0M3LTBCMTgtNUEwRi01MzY0MkNGQkExOEV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0Y1ODE0MkNDLTBDQzctMEIxOC01QTBGLTUzNjQyQ0ZCQTE4RX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0Y1ODE0MkNDLTBDQzctMEIxOC01QTBGLTUzNjQyQ0ZCQTE4RX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtGNTgxNDJDQy0wQ0M3LTBCMTgtNUEwRi01MzY0MkNGQkExOEV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0Y1ODE0MkNDLTBDQzctMEIxOC01QTBGLTUzNjQyQ0ZCQTE4RX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0Y1ODE0MkNDLTBDQzctMEIxOC01QTBGLTUzNjQyQ0ZCQTE4RX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtCRjc4MkE1MC1FOUFFLTAwQ0MtQzI4QS1DOURBOEFBQjRENTJ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtCRjc4MkE1MC1FOUFFLTAwQ0MtQzI4QS1DOURBOEFBQjRENTJ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7QkY3ODJBNTAtRTlBRS0wMENDLUMyOEEtQzlEQThBQUI0RDUyfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtCRjc4MkE1MC1FOUFFLTAwQ0MtQzI4QS1DOURBOEFBQjRENTJ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtCRjc4MkE1MC1FOUFFLTAwQ0MtQzI4QS1DOURBOEFBQjRENTJ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QkY3ODJBNTAtRTlBRS0wMENDLUMyOEEtQzlEQThBQUI0RDUyfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtCRjc4MkE1MC1FOUFFLTAwQ0MtQzI4QS1DOURBOEFBQjRENTJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtCRjc4MkE1MC1FOUFFLTAwQ0MtQzI4QS1DOURBOEFBQjRENTJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7MTBBRTM3NkYtMUE3MC0wMjk3LTAyMTYtMUZEMDFBRDE1RDE5fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7MTBBRTM3NkYtMUE3MC0wMjk3LTAyMTYtMUZEMDFBRDE1RDE5fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezEwQUUzNzZGLTFBNzAtMDI5Ny0wMjE2LTFGRDAxQUQxNUQxOX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7MTBBRTM3NkYtMUE3MC0wMjk3LTAyMTYtMUZEMDFBRDE1RDE5fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7MTBBRTM3NkYtMUE3MC0wMjk3LTAyMTYtMUZEMDFBRDE1RDE5fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezEwQUUzNzZGLTFBNzAtMDI5Ny0wMjE2LTFGRDAxQUQxNUQxOX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7MTBBRTM3NkYtMUE3MC0wMjk3LTAyMTYtMUZEMDFBRDE1RDE5fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7MTBBRTM3NkYtMUE3MC0wMjk3LTAyMTYtMUZEMDFBRDE1RDE5fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0U4RUQ3OUY5LTgwMzQtMUIwOS0yNjNFLUQzRjhDNEM1QzRBOH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0U4RUQ3OUY5LTgwMzQtMUIwOS0yNjNFLUQzRjhDNEM1QzRBOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtFOEVENzlGOS04MDM0LTFCMDktMjYzRS1EM0Y4QzRDNUM0QTh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0U4RUQ3OUY5LTgwMzQtMUIwOS0yNjNFLUQzRjhDNEM1QzRBOH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0U4RUQ3OUY5LTgwMzQtMUIwOS0yNjNFLUQzRjhDNEM1QzRBOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtFOEVENzlGOS04MDM0LTFCMDktMjYzRS1EM0Y4QzRDNUM0QTh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0U4RUQ3OUY5LTgwMzQtMUIwOS0yNjNFLUQzRjhDNEM1QzRBOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0U4RUQ3OUY5LTgwMzQtMUIwOS0yNjNFLUQzRjhDNEM1QzRBOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtBNTlGQUEwQi05QzM0LTFGOTktNzk0RC1BMzY1QTNBQThDQ0V9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtBNTlGQUEwQi05QzM0LTFGOTktNzk0RC1BMzY1QTNBQThDQ0V9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7QTU5RkFBMEItOUMzNC0xRjk5LTc5NEQtQTM2NUEzQUE4Q0NFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtBNTlGQUEwQi05QzM0LTFGOTktNzk0RC1BMzY1QTNBQThDQ0V9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtBNTlGQUEwQi05QzM0LTFGOTktNzk0RC1BMzY1QTNBQThDQ0V9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QTU5RkFBMEItOUMzNC0xRjk5LTc5NEQtQTM2NUEzQUE4Q0NFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtBNTlGQUEwQi05QzM0LTFGOTktNzk0RC1BMzY1QTNBQThDQ0V9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtBNTlGQUEwQi05QzM0LTFGOTktNzk0RC1BMzY1QTNBQThDQ0V9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7MUVDNkNCQTMtNjE4Ny1ENDU2LUQ5QjctQTM1Mzk5Mzk1RDcxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7MUVDNkNCQTMtNjE4Ny1ENDU2LUQ5QjctQTM1Mzk5Mzk1RDcxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezFFQzZDQkEzLTYxODctRDQ1Ni1EOUI3LUEzNTM5OTM5NUQ3MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7MUVDNkNCQTMtNjE4Ny1ENDU2LUQ5QjctQTM1Mzk5Mzk1RDcxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7MUVDNkNCQTMtNjE4Ny1ENDU2LUQ5QjctQTM1Mzk5Mzk1RDcxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezFFQzZDQkEzLTYxODctRDQ1Ni1EOUI3LUEzNTM5OTM5NUQ3MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7MUVDNkNCQTMtNjE4Ny1ENDU2LUQ5QjctQTM1Mzk5Mzk1RDcxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7MUVDNkNCQTMtNjE4Ny1ENDU2LUQ5QjctQTM1Mzk5Mzk1RDcxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezU1MDA3MTc5LTc3NDYtOUNGQi05N0VDLTY1MTAyRkIyNzJDOH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezU1MDA3MTc5LTc3NDYtOUNGQi05N0VDLTY1MTAyRkIyNzJDOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs1NTAwNzE3OS03NzQ2LTlDRkItOTdFQy02NTEwMkZCMjcyQzh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezU1MDA3MTc5LTc3NDYtOUNGQi05N0VDLTY1MTAyRkIyNzJDOH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezU1MDA3MTc5LTc3NDYtOUNGQi05N0VDLTY1MTAyRkIyNzJDOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs1NTAwNzE3OS03NzQ2LTlDRkItOTdFQy02NTEwMkZCMjcyQzh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezU1MDA3MTc5LTc3NDYtOUNGQi05N0VDLTY1MTAyRkIyNzJDOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezU1MDA3MTc5LTc3NDYtOUNGQi05N0VDLTY1MTAyRkIyNzJDOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtGMkU4Q0E1NS01OTdGLTdGREMtNjQ1Ni1EODY1MEZCOTcwQTN9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtGMkU4Q0E1NS01OTdGLTdGREMtNjQ1Ni1EODY1MEZCOTcwQTN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RjJFOENBNTUtNTk3Ri03RkRDLTY0NTYtRDg2NTBGQjk3MEEzfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtGMkU4Q0E1NS01OTdGLTdGREMtNjQ1Ni1EODY1MEZCOTcwQTN9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtGMkU4Q0E1NS01OTdGLTdGREMtNjQ1Ni1EODY1MEZCOTcwQTN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RjJFOENBNTUtNTk3Ri03RkRDLTY0NTYtRDg2NTBGQjk3MEEzfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtGMkU4Q0E1NS01OTdGLTdGREMtNjQ1Ni1EODY1MEZCOTcwQTN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtGMkU4Q0E1NS01OTdGLTdGREMtNjQ1Ni1EODY1MEZCOTcwQTN9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QzQyOUIzMzYtMUIzMC0xMTlDLTNCMzQtMjFBMTg2RDY3NDRGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QzQyOUIzMzYtMUIzMC0xMTlDLTNCMzQtMjFBMTg2RDY3NDRGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0M0MjlCMzM2LTFCMzAtMTE5Qy0zQjM0LTIxQTE4NkQ2NzQ0Rn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7QzQyOUIzMzYtMUIzMC0xMTlDLTNCMzQtMjFBMTg2RDY3NDRGfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7QzQyOUIzMzYtMUIzMC0xMTlDLTNCMzQtMjFBMTg2RDY3NDRGfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0M0MjlCMzM2LTFCMzAtMTE5Qy0zQjM0LTIxQTE4NkQ2NzQ0Rn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QzQyOUIzMzYtMUIzMC0xMTlDLTNCMzQtMjFBMTg2RDY3NDRGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QzQyOUIzMzYtMUIzMC0xMTlDLTNCMzQtMjFBMTg2RDY3NDRGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0Y0NzI0NzVDLUY2NzctMEU3Ri1GMTI3LTQ1QkY1QjY0RjYyMn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0Y0NzI0NzVDLUY2NzctMEU3Ri1GMTI3LTQ1QkY1QjY0RjYyMn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtGNDcyNDc1Qy1GNjc3LTBFN0YtRjEyNy00NUJGNUI2NEY2MjJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0Y0NzI0NzVDLUY2NzctMEU3Ri1GMTI3LTQ1QkY1QjY0RjYyMn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0Y0NzI0NzVDLUY2NzctMEU3Ri1GMTI3LTQ1QkY1QjY0RjYyMn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtGNDcyNDc1Qy1GNjc3LTBFN0YtRjEyNy00NUJGNUI2NEY2MjJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0Y0NzI0NzVDLUY2NzctMEU3Ri1GMTI3LTQ1QkY1QjY0RjYyMn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0Y0NzI0NzVDLUY2NzctMEU3Ri1GMTI3LTQ1QkY1QjY0RjYyMn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtFMEQ3MUQ3Mi04REY0LUNDRkMtRUY2MC03NDFFQURBQjhCRjl9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtFMEQ3MUQ3Mi04REY0LUNDRkMtRUY2MC03NDFFQURBQjhCRjl9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RTBENzFENzItOERGNC1DQ0ZDLUVGNjAtNzQxRUFEQUI4QkY5fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtFMEQ3MUQ3Mi04REY0LUNDRkMtRUY2MC03NDFFQURBQjhCRjl9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtFMEQ3MUQ3Mi04REY0LUNDRkMtRUY2MC03NDFFQURBQjhCRjl9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RTBENzFENzItOERGNC1DQ0ZDLUVGNjAtNzQxRUFEQUI4QkY5fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtFMEQ3MUQ3Mi04REY0LUNDRkMtRUY2MC03NDFFQURBQjhCRjl9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtFMEQ3MUQ3Mi04REY0LUNDRkMtRUY2MC03NDFFQURBQjhCRjl9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RDA2Q0YxMkUtRjIyMi05MjczLTQxQkYtQjhBMDUyRkE1NTI3fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7RDA2Q0YxMkUtRjIyMi05MjczLTQxQkYtQjhBMDUyRkE1NTI3fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0QwNkNGMTJFLUYyMjItOTI3My00MUJGLUI4QTA1MkZBNTUyN30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RDA2Q0YxMkUtRjIyMi05MjczLTQxQkYtQjhBMDUyRkE1NTI3fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RDA2Q0YxMkUtRjIyMi05MjczLTQxQkYtQjhBMDUyRkE1NTI3fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0QwNkNGMTJFLUYyMjItOTI3My00MUJGLUI4QTA1MkZBNTUyN30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RDA2Q0YxMkUtRjIyMi05MjczLTQxQkYtQjhBMDUyRkE1NTI3fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7RDA2Q0YxMkUtRjIyMi05MjczLTQxQkYtQjhBMDUyRkE1NTI3fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezEwNzkwRjQ5LTY4ODctQUFCNi0yRDg2LUJDQkQ1MTZGOEQyNn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezEwNzkwRjQ5LTY4ODctQUFCNi0yRDg2LUJDQkQ1MTZGOEQyNn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXsxMDc5MEY0OS02ODg3LUFBQjYtMkQ4Ni1CQ0JENTE2RjhEMjZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezEwNzkwRjQ5LTY4ODctQUFCNi0yRDg2LUJDQkQ1MTZGOEQyNn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezEwNzkwRjQ5LTY4ODctQUFCNi0yRDg2LUJDQkQ1MTZGOEQyNn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXsxMDc5MEY0OS02ODg3LUFBQjYtMkQ4Ni1CQ0JENTE2RjhEMjZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezEwNzkwRjQ5LTY4ODctQUFCNi0yRDg2LUJDQkQ1MTZGOEQyNn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezEwNzkwRjQ5LTY4ODctQUFCNi0yRDg2LUJDQkQ1MTZGOEQyNn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs2ODlFMjhDRi04OUVELUJBMzgtM0ExNC03OEE3NUQ4OTFENDZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs2ODlFMjhDRi04OUVELUJBMzgtM0ExNC03OEE3NUQ4OTFENDZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7Njg5RTI4Q0YtODlFRC1CQTM4LTNBMTQtNzhBNzVEODkxRDQ2fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs2ODlFMjhDRi04OUVELUJBMzgtM0ExNC03OEE3NUQ4OTFENDZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs2ODlFMjhDRi04OUVELUJBMzgtM0ExNC03OEE3NUQ4OTFENDZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7Njg5RTI4Q0YtODlFRC1CQTM4LTNBMTQtNzhBNzVEODkxRDQ2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs2ODlFMjhDRi04OUVELUJBMzgtM0ExNC03OEE3NUQ4OTFENDZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs2ODlFMjhDRi04OUVELUJBMzgtM0ExNC03OEE3NUQ4OTFENDZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RENEM0ExQjYtNUVDMS04MjY2LTkzRUYtQkQyQjlCRUZFMTJEfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7RENEM0ExQjYtNUVDMS04MjY2LTkzRUYtQkQyQjlCRUZFMTJEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0RDRDNBMUI2LTVFQzEtODI2Ni05M0VGLUJEMkI5QkVGRTEyRH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RENEM0ExQjYtNUVDMS04MjY2LTkzRUYtQkQyQjlCRUZFMTJEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RENEM0ExQjYtNUVDMS04MjY2LTkzRUYtQkQyQjlCRUZFMTJEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0RDRDNBMUI2LTVFQzEtODI2Ni05M0VGLUJEMkI5QkVGRTEyRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RENEM0ExQjYtNUVDMS04MjY2LTkzRUYtQkQyQjlCRUZFMTJEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7RENEM0ExQjYtNUVDMS04MjY2LTkzRUYtQkQyQjlCRUZFMTJEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezk1QzUwODY0LTg1NEMtMkExMS00QzkxLUJDRTY1NEUzNDRGQn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezk1QzUwODY0LTg1NEMtMkExMS00QzkxLUJDRTY1NEUzNDRGQn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs5NUM1MDg2NC04NTRDLTJBMTEtNEM5MS1CQ0U2NTRFMzQ0RkJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezk1QzUwODY0LTg1NEMtMkExMS00QzkxLUJDRTY1NEUzNDRGQn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezk1QzUwODY0LTg1NEMtMkExMS00QzkxLUJDRTY1NEUzNDRGQn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs5NUM1MDg2NC04NTRDLTJBMTEtNEM5MS1CQ0U2NTRFMzQ0RkJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezk1QzUwODY0LTg1NEMtMkExMS00QzkxLUJDRTY1NEUzNDRGQn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezk1QzUwODY0LTg1NEMtMkExMS00QzkxLUJDRTY1NEUzNDRGQn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtGRTdBQjc4Ri1EQkYxLTA3MjEtMzUyMi0wRDdDMzAxMUQyRTV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtGRTdBQjc4Ri1EQkYxLTA3MjEtMzUyMi0wRDdDMzAxMUQyRTV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RkU3QUI3OEYtREJGMS0wNzIxLTM1MjItMEQ3QzMwMTFEMkU1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtGRTdBQjc4Ri1EQkYxLTA3MjEtMzUyMi0wRDdDMzAxMUQyRTV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtGRTdBQjc4Ri1EQkYxLTA3MjEtMzUyMi0wRDdDMzAxMUQyRTV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RkU3QUI3OEYtREJGMS0wNzIxLTM1MjItMEQ3QzMwMTFEMkU1fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtGRTdBQjc4Ri1EQkYxLTA3MjEtMzUyMi0wRDdDMzAxMUQyRTV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtGRTdBQjc4Ri1EQkYxLTA3MjEtMzUyMi0wRDdDMzAxMUQyRTV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QkZFODlFQUEtRDk4Qi0zNEUxLUM1QTQtNDA4MEY2RkZFMzE3fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QkZFODlFQUEtRDk4Qi0zNEUxLUM1QTQtNDA4MEY2RkZFMzE3fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0JGRTg5RUFBLUQ5OEItMzRFMS1DNUE0LTQwODBGNkZGRTMxN30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7QkZFODlFQUEtRDk4Qi0zNEUxLUM1QTQtNDA4MEY2RkZFMzE3fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7QkZFODlFQUEtRDk4Qi0zNEUxLUM1QTQtNDA4MEY2RkZFMzE3fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0JGRTg5RUFBLUQ5OEItMzRFMS1DNUE0LTQwODBGNkZGRTMxN30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QkZFODlFQUEtRDk4Qi0zNEUxLUM1QTQtNDA4MEY2RkZFMzE3fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QkZFODlFQUEtRDk4Qi0zNEUxLUM1QTQtNDA4MEY2RkZFMzE3fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezQ4N0EyRjgwLTNDQTMtNjc4RC04OEQ1LTgyMTk0ODcyQ0YwOH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezQ4N0EyRjgwLTNDQTMtNjc4RC04OEQ1LTgyMTk0ODcyQ0YwOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs0ODdBMkY4MC0zQ0EzLTY3OEQtODhENS04MjE5NDg3MkNGMDh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezQ4N0EyRjgwLTNDQTMtNjc4RC04OEQ1LTgyMTk0ODcyQ0YwOH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezQ4N0EyRjgwLTNDQTMtNjc4RC04OEQ1LTgyMTk0ODcyQ0YwOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0ODdBMkY4MC0zQ0EzLTY3OEQtODhENS04MjE5NDg3MkNGMDh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezQ4N0EyRjgwLTNDQTMtNjc4RC04OEQ1LTgyMTk0ODcyQ0YwOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezQ4N0EyRjgwLTNDQTMtNjc4RC04OEQ1LTgyMTk0ODcyQ0YwOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs0RTU5MEU5RC1FMjhGLTg3RkYtMzg1Qi1ENTg3MzYzODgyMzF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs0RTU5MEU5RC1FMjhGLTg3RkYtMzg1Qi1ENTg3MzYzODgyMzF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NEU1OTBFOUQtRTI4Ri04N0ZGLTM4NUItRDU4NzM2Mzg4MjMxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs0RTU5MEU5RC1FMjhGLTg3RkYtMzg1Qi1ENTg3MzYzODgyMzF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs0RTU5MEU5RC1FMjhGLTg3RkYtMzg1Qi1ENTg3MzYzODgyMzF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NEU1OTBFOUQtRTI4Ri04N0ZGLTM4NUItRDU4NzM2Mzg4MjMxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs0RTU5MEU5RC1FMjhGLTg3RkYtMzg1Qi1ENTg3MzYzODgyMzF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs0RTU5MEU5RC1FMjhGLTg3RkYtMzg1Qi1ENTg3MzYzODgyMzF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RTA4RTAwNjUtODk2QS03NDg3LURFQTUtRDNCODBCNzFGOTc1fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7RTA4RTAwNjUtODk2QS03NDg3LURFQTUtRDNCODBCNzFGOTc1fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0UwOEUwMDY1LTg5NkEtNzQ4Ny1ERUE1LUQzQjgwQjcxRjk3NX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RTA4RTAwNjUtODk2QS03NDg3LURFQTUtRDNCODBCNzFGOTc1fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RTA4RTAwNjUtODk2QS03NDg3LURFQTUtRDNCODBCNzFGOTc1fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0UwOEUwMDY1LTg5NkEtNzQ4Ny1ERUE1LUQzQjgwQjcxRjk3NX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RTA4RTAwNjUtODk2QS03NDg3LURFQTUtRDNCODBCNzFGOTc1fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7RTA4RTAwNjUtODk2QS03NDg3LURFQTUtRDNCODBCNzFGOTc1fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0E0REE3NDYzLTEwNDctQkRGNS1FMUIzLTU2MzJDQjU3M0Y0MX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0E0REE3NDYzLTEwNDctQkRGNS1FMUIzLTU2MzJDQjU3M0Y0MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtBNERBNzQ2My0xMDQ3LUJERjUtRTFCMy01NjMyQ0I1NzNGNDF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0E0REE3NDYzLTEwNDctQkRGNS1FMUIzLTU2MzJDQjU3M0Y0MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0E0REE3NDYzLTEwNDctQkRGNS1FMUIzLTU2MzJDQjU3M0Y0MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtBNERBNzQ2My0xMDQ3LUJERjUtRTFCMy01NjMyQ0I1NzNGNDF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0E0REE3NDYzLTEwNDctQkRGNS1FMUIzLTU2MzJDQjU3M0Y0MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0E0REE3NDYzLTEwNDctQkRGNS1FMUIzLTU2MzJDQjU3M0Y0MX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs5MThDRDQwMi0wNDdELTg0NjctRTExQy1FMTEzMjA1M0Y5MTZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs5MThDRDQwMi0wNDdELTg0NjctRTExQy1FMTEzMjA1M0Y5MTZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7OTE4Q0Q0MDItMDQ3RC04NDY3LUUxMUMtRTExMzIwNTNGOTE2fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs5MThDRDQwMi0wNDdELTg0NjctRTExQy1FMTEzMjA1M0Y5MTZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs5MThDRDQwMi0wNDdELTg0NjctRTExQy1FMTEzMjA1M0Y5MTZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7OTE4Q0Q0MDItMDQ3RC04NDY3LUUxMUMtRTExMzIwNTNGOTE2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs5MThDRDQwMi0wNDdELTg0NjctRTExQy1FMTEzMjA1M0Y5MTZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs5MThDRDQwMi0wNDdELTg0NjctRTExQy1FMTEzMjA1M0Y5MTZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QzRGRTI5RUEtMjY2RC01Mjk1LTQ4NDAtOTc2QjlCNUIzODQzfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QzRGRTI5RUEtMjY2RC01Mjk1LTQ4NDAtOTc2QjlCNUIzODQzfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0M0RkUyOUVBLTI2NkQtNTI5NS00ODQwLTk3NkI5QjVCMzg0M30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7QzRGRTI5RUEtMjY2RC01Mjk1LTQ4NDAtOTc2QjlCNUIzODQzfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7QzRGRTI5RUEtMjY2RC01Mjk1LTQ4NDAtOTc2QjlCNUIzODQzfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0M0RkUyOUVBLTI2NkQtNTI5NS00ODQwLTk3NkI5QjVCMzg0M30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QzRGRTI5RUEtMjY2RC01Mjk1LTQ4NDAtOTc2QjlCNUIzODQzfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QzRGRTI5RUEtMjY2RC01Mjk1LTQ4NDAtOTc2QjlCNUIzODQzfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezdDNDg2M0ExLTk0MUEtQzVBRS1FMUY5LTMwRjA2MkU0QjJGRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezdDNDg2M0ExLTk0MUEtQzVBRS1FMUY5LTMwRjA2MkU0QjJGRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs3QzQ4NjNBMS05NDFBLUM1QUUtRTFGOS0zMEYwNjJFNEIyRkR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezdDNDg2M0ExLTk0MUEtQzVBRS1FMUY5LTMwRjA2MkU0QjJGRH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezdDNDg2M0ExLTk0MUEtQzVBRS1FMUY5LTMwRjA2MkU0QjJGRH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs3QzQ4NjNBMS05NDFBLUM1QUUtRTFGOS0zMEYwNjJFNEIyRkR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezdDNDg2M0ExLTk0MUEtQzVBRS1FMUY5LTMwRjA2MkU0QjJGRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezdDNDg2M0ExLTk0MUEtQzVBRS1FMUY5LTMwRjA2MkU0QjJGRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtERTY5NTA2NC0xM0MzLTE4QjAtMzc4RC04QjIyNjcyQkYzRjR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtERTY5NTA2NC0xM0MzLTE4QjAtMzc4RC04QjIyNjcyQkYzRjR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7REU2OTUwNjQtMTNDMy0xOEIwLTM3OEQtOEIyMjY3MkJGM0Y0fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtERTY5NTA2NC0xM0MzLTE4QjAtMzc4RC04QjIyNjcyQkYzRjR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtERTY5NTA2NC0xM0MzLTE4QjAtMzc4RC04QjIyNjcyQkYzRjR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7REU2OTUwNjQtMTNDMy0xOEIwLTM3OEQtOEIyMjY3MkJGM0Y0fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtERTY5NTA2NC0xM0MzLTE4QjAtMzc4RC04QjIyNjcyQkYzRjR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtERTY5NTA2NC0xM0MzLTE4QjAtMzc4RC04QjIyNjcyQkYzRjR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NzEyNTc4MDItQkJDQS05OUY1LUU5RDItOTA1NzM4RjMwODkzfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NzEyNTc4MDItQkJDQS05OUY1LUU5RDItOTA1NzM4RjMwODkzfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezcxMjU3ODAyLUJCQ0EtOTlGNS1FOUQyLTkwNTczOEYzMDg5M30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7NzEyNTc4MDItQkJDQS05OUY1LUU5RDItOTA1NzM4RjMwODkzfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7NzEyNTc4MDItQkJDQS05OUY1LUU5RDItOTA1NzM4RjMwODkzfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezcxMjU3ODAyLUJCQ0EtOTlGNS1FOUQyLTkwNTczOEYzMDg5M30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NzEyNTc4MDItQkJDQS05OUY1LUU5RDItOTA1NzM4RjMwODkzfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7NzEyNTc4MDItQkJDQS05OUY1LUU5RDItOTA1NzM4RjMwODkzfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezVGQ0M3MUY2LUZGMzMtRUJDRi1GQkEyLThGQzc4M0Q1MzE4RX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezVGQ0M3MUY2LUZGMzMtRUJDRi1GQkEyLThGQzc4M0Q1MzE4RX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs1RkNDNzFGNi1GRjMzLUVCQ0YtRkJBMi04RkM3ODNENTMxOEV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezVGQ0M3MUY2LUZGMzMtRUJDRi1GQkEyLThGQzc4M0Q1MzE4RX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezVGQ0M3MUY2LUZGMzMtRUJDRi1GQkEyLThGQzc4M0Q1MzE4RX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs1RkNDNzFGNi1GRjMzLUVCQ0YtRkJBMi04RkM3ODNENTMxOEV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezVGQ0M3MUY2LUZGMzMtRUJDRi1GQkEyLThGQzc4M0Q1MzE4RX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezVGQ0M3MUY2LUZGMzMtRUJDRi1GQkEyLThGQzc4M0Q1MzE4RX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXszRkUwQzBFMS1EOUJBLTZBMjYtMzgwQy1GMjkzRTU0M0I5MTR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXszRkUwQzBFMS1EOUJBLTZBMjYtMzgwQy1GMjkzRTU0M0I5MTR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7M0ZFMEMwRTEtRDlCQS02QTI2LTM4MEMtRjI5M0U1NDNCOTE0fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXszRkUwQzBFMS1EOUJBLTZBMjYtMzgwQy1GMjkzRTU0M0I5MTR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXszRkUwQzBFMS1EOUJBLTZBMjYtMzgwQy1GMjkzRTU0M0I5MTR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7M0ZFMEMwRTEtRDlCQS02QTI2LTM4MEMtRjI5M0U1NDNCOTE0fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXszRkUwQzBFMS1EOUJBLTZBMjYtMzgwQy1GMjkzRTU0M0I5MTR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXszRkUwQzBFMS1EOUJBLTZBMjYtMzgwQy1GMjkzRTU0M0I5MTR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7OTBFRkQ5QTQtQzZCMC0zRUU4LTFGMDYtMEEwRTBENTVBRURBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7OTBFRkQ5QTQtQzZCMC0zRUU4LTFGMDYtMEEwRTBENTVBRURBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezkwRUZEOUE0LUM2QjAtM0VFOC0xRjA2LTBBMEUwRDU1QUVEQX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7OTBFRkQ5QTQtQzZCMC0zRUU4LTFGMDYtMEEwRTBENTVBRURBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7OTBFRkQ5QTQtQzZCMC0zRUU4LTFGMDYtMEEwRTBENTVBRURBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezkwRUZEOUE0LUM2QjAtM0VFOC0xRjA2LTBBMEUwRDU1QUVEQX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7OTBFRkQ5QTQtQzZCMC0zRUU4LTFGMDYtMEEwRTBENTVBRURBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7OTBFRkQ5QTQtQzZCMC0zRUU4LTFGMDYtMEEwRTBENTVBRURBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezdEQkM1Rjc3LTNEQTEtNUY3My04NDIxLUU2OTNEOTVGQzY2QX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezdEQkM1Rjc3LTNEQTEtNUY3My04NDIxLUU2OTNEOTVGQzY2QX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs3REJDNUY3Ny0zREExLTVGNzMtODQyMS1FNjkzRDk1RkM2NkF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezdEQkM1Rjc3LTNEQTEtNUY3My04NDIxLUU2OTNEOTVGQzY2QX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezdEQkM1Rjc3LTNEQTEtNUY3My04NDIxLUU2OTNEOTVGQzY2QX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs3REJDNUY3Ny0zREExLTVGNzMtODQyMS1FNjkzRDk1RkM2NkF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezdEQkM1Rjc3LTNEQTEtNUY3My04NDIxLUU2OTNEOTVGQzY2QX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezdEQkM1Rjc3LTNEQTEtNUY3My04NDIxLUU2OTNEOTVGQzY2QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs3RTJDODBGRS0zQ0MzLTgyQjQtMENBRC02NURDMjMzREUxM0F9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs3RTJDODBGRS0zQ0MzLTgyQjQtMENBRC02NURDMjMzREUxM0F9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7N0UyQzgwRkUtM0NDMy04MkI0LTBDQUQtNjVEQzIzM0RFMTNBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs3RTJDODBGRS0zQ0MzLTgyQjQtMENBRC02NURDMjMzREUxM0F9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs3RTJDODBGRS0zQ0MzLTgyQjQtMENBRC02NURDMjMzREUxM0F9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7N0UyQzgwRkUtM0NDMy04MkI0LTBDQUQtNjVEQzIzM0RFMTNBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs3RTJDODBGRS0zQ0MzLTgyQjQtMENBRC02NURDMjMzREUxM0F9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs3RTJDODBGRS0zQ0MzLTgyQjQtMENBRC02NURDMjMzREUxM0F9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RDNDNkZCRDYtRDc4RS03MTgwLTgzNDUtNUUwOUI0OTJEQkVDfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7RDNDNkZCRDYtRDc4RS03MTgwLTgzNDUtNUUwOUI0OTJEQkVDfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0QzQzZGQkQ2LUQ3OEUtNzE4MC04MzQ1LTVFMDlCNDkyREJFQ30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RDNDNkZCRDYtRDc4RS03MTgwLTgzNDUtNUUwOUI0OTJEQkVDfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RDNDNkZCRDYtRDc4RS03MTgwLTgzNDUtNUUwOUI0OTJEQkVDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0QzQzZGQkQ2LUQ3OEUtNzE4MC04MzQ1LTVFMDlCNDkyREJFQ30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RDNDNkZCRDYtRDc4RS03MTgwLTgzNDUtNUUwOUI0OTJEQkVDfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7RDNDNkZCRDYtRDc4RS03MTgwLTgzNDUtNUUwOUI0OTJEQkVDfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezIzRUY3MzVDLUNDNEMtM0VDNC1BNzVFLTkwM0RCMzQwRjA0QX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezIzRUY3MzVDLUNDNEMtM0VDNC1BNzVFLTkwM0RCMzQwRjA0QX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXsyM0VGNzM1Qy1DQzRDLTNFQzQtQTc1RS05MDNEQjM0MEYwNEF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezIzRUY3MzVDLUNDNEMtM0VDNC1BNzVFLTkwM0RCMzQwRjA0QX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezIzRUY3MzVDLUNDNEMtM0VDNC1BNzVFLTkwM0RCMzQwRjA0QX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXsyM0VGNzM1Qy1DQzRDLTNFQzQtQTc1RS05MDNEQjM0MEYwNEF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezIzRUY3MzVDLUNDNEMtM0VDNC1BNzVFLTkwM0RCMzQwRjA0QX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezIzRUY3MzVDLUNDNEMtM0VDNC1BNzVFLTkwM0RCMzQwRjA0QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtENEQ2OTFENC0xMzdDLUNCRkEtNzM1Qi1ENDY2MzZEN0U0RDh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtENEQ2OTFENC0xMzdDLUNCRkEtNzM1Qi1ENDY2MzZEN0U0RDh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDRENjkxRDQtMTM3Qy1DQkZBLTczNUItRDQ2NjM2RDdFNEQ4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtENEQ2OTFENC0xMzdDLUNCRkEtNzM1Qi1ENDY2MzZEN0U0RDh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtENEQ2OTFENC0xMzdDLUNCRkEtNzM1Qi1ENDY2MzZEN0U0RDh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RDRENjkxRDQtMTM3Qy1DQkZBLTczNUItRDQ2NjM2RDdFNEQ4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtENEQ2OTFENC0xMzdDLUNCRkEtNzM1Qi1ENDY2MzZEN0U0RDh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtENEQ2OTFENC0xMzdDLUNCRkEtNzM1Qi1ENDY2MzZEN0U0RDh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7REI5MDRCODUtQUQzMS1CN0ZCLTExNEYtODg3NjBDQzQ4NUYyfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7REI5MDRCODUtQUQzMS1CN0ZCLTExNEYtODg3NjBDQzQ4NUYyfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0RCOTA0Qjg1LUFEMzEtQjdGQi0xMTRGLTg4NzYwQ0M0ODVGMn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7REI5MDRCODUtQUQzMS1CN0ZCLTExNEYtODg3NjBDQzQ4NUYyfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7REI5MDRCODUtQUQzMS1CN0ZCLTExNEYtODg3NjBDQzQ4NUYyfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0RCOTA0Qjg1LUFEMzEtQjdGQi0xMTRGLTg4NzYwQ0M0ODVGMn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7REI5MDRCODUtQUQzMS1CN0ZCLTExNEYtODg3NjBDQzQ4NUYyfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7REI5MDRCODUtQUQzMS1CN0ZCLTExNEYtODg3NjBDQzQ4NUYyfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0M5RTJBQjE1LThBRUYtREQ0OC02MEMzLTU1N0VDQzUyMTVCRX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0M5RTJBQjE1LThBRUYtREQ0OC02MEMzLTU1N0VDQzUyMTVCRX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtDOUUyQUIxNS04QUVGLURENDgtNjBDMy01NTdFQ0M1MjE1QkV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0M5RTJBQjE1LThBRUYtREQ0OC02MEMzLTU1N0VDQzUyMTVCRX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0M5RTJBQjE1LThBRUYtREQ0OC02MEMzLTU1N0VDQzUyMTVCRX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtDOUUyQUIxNS04QUVGLURENDgtNjBDMy01NTdFQ0M1MjE1QkV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0M5RTJBQjE1LThBRUYtREQ0OC02MEMzLTU1N0VDQzUyMTVCRX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0M5RTJBQjE1LThBRUYtREQ0OC02MEMzLTU1N0VDQzUyMTVCRX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXszNUU1MkU0Ni0zQkE5LTQzNjEtNDFEMy01MzY2M0MyRTlCOEF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXszNUU1MkU0Ni0zQkE5LTQzNjEtNDFEMy01MzY2M0MyRTlCOEF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7MzVFNTJFNDYtM0JBOS00MzYxLTQxRDMtNTM2NjNDMkU5QjhBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXszNUU1MkU0Ni0zQkE5LTQzNjEtNDFEMy01MzY2M0MyRTlCOEF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXszNUU1MkU0Ni0zQkE5LTQzNjEtNDFEMy01MzY2M0MyRTlCOEF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7MzVFNTJFNDYtM0JBOS00MzYxLTQxRDMtNTM2NjNDMkU5QjhBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXszNUU1MkU0Ni0zQkE5LTQzNjEtNDFEMy01MzY2M0MyRTlCOEF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXszNUU1MkU0Ni0zQkE5LTQzNjEtNDFEMy01MzY2M0MyRTlCOEF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NDg2QjEzNzUtNUNGQS1DMkQyLUREODktQzlGNDk3QkFEQ0IzfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NDg2QjEzNzUtNUNGQS1DMkQyLUREODktQzlGNDk3QkFEQ0IzfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezQ4NkIxMzc1LTVDRkEtQzJEMi1ERDg5LUM5RjQ5N0JBRENCM30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7NDg2QjEzNzUtNUNGQS1DMkQyLUREODktQzlGNDk3QkFEQ0IzfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7NDg2QjEzNzUtNUNGQS1DMkQyLUREODktQzlGNDk3QkFEQ0IzfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezQ4NkIxMzc1LTVDRkEtQzJEMi1ERDg5LUM5RjQ5N0JBRENCM30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NDg2QjEzNzUtNUNGQS1DMkQyLUREODktQzlGNDk3QkFEQ0IzfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7NDg2QjEzNzUtNUNGQS1DMkQyLUREODktQzlGNDk3QkFEQ0IzfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFCisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWJlZFRMUy52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL21iZWRUTFMudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2MwYmJhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL21iZWRUTFMudmN4cHJvagpAQCAtMCwwICsxLDI5MSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5tYmVkVExTPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TUJFRFRMU19FWFBPUlRTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8Q29tcGlsZUFzPkNvbXBpbGVBc0M8L0NvbXBpbGVBcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO01CRURUTFNfRVhQT1JUUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPENvbXBpbGVBcz5Db21waWxlQXNDPC9Db21waWxlQXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNQkVEVExTX0VYUE9SVFM7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNQkVEVExTX0VYUE9SVFM7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcYWVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcYWVzbmkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xhcmM0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcYXNuMS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGFzbjF3cml0ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGJhc2U2NC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGJpZ251bS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGJsb3dmaXNoLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcYm5fbXVsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcY2FtZWxsaWEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xjY20uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xjZXJ0cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGNoZWNrX2NvbmZpZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGNpcGhlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGNpcGhlcl9pbnRlcm5hbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGNtYWMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xjb21wYXQtMS4zLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcY29uZmlnLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcY3RyX2RyYmcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xkZWJ1Zy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGRlcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGRobS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGVjZGguaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xlY2RzYS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGVjanBha2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xlY3AuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xlbnRyb3B5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcZW50cm9weV9wb2xsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcZXJyb3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xnY20uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xoYXZlZ2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xobWFjX2RyYmcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xtZC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXG1kMi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXG1kNC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXG1kNS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXG1kX2ludGVybmFsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcbWVtb3J5X2J1ZmZlcl9hbGxvYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXG5ldC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXG5ldF9zb2NrZXRzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcb2lkLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNccGFkbG9jay5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHBlbS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHBrLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNccGtfaW50ZXJuYWwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xwa2NzMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xwa2NzMTIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xwa2NzNS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHBsYXRmb3JtLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNccGxhdGZvcm1fdGltZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHJpcGVtZDE2MC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHJzYS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHNoYTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xzaGEyNTYuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xzaGE1MTIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xzc2wuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xzc2xfY2FjaGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xzc2xfY2lwaGVyc3VpdGVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcc3NsX2Nvb2tpZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHNzbF9pbnRlcm5hbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHNzbF90aWNrZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1x0aHJlYWRpbmcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1x0aW1pbmcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1x2ZXJzaW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNceDUwOS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHg1MDlfY3JsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNceDUwOV9jcnQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1x4NTA5X2Nzci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHh0ZWEuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGFlcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxhZXNuaS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxhcmM0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGFzbjFwYXJzZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxhc24xd3JpdGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcYmFzZTY0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGJpZ251bS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxibG93ZmlzaC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxjYW1lbGxpYS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxjY20uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcY2VydHMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcY2lwaGVyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGNpcGhlcl93cmFwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGNtYWMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcY3RyX2RyYmcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcZGVidWcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcZGVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGRobS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxlY2RoLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGVjZHNhLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGVjanBha2UuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcZWNwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGVjcF9jdXJ2ZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcZW50cm9weS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxlbnRyb3B5X3BvbGwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcZXJyb3IuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcZ2NtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGhhdmVnZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxobWFjX2RyYmcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcbWQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcbWQyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XG1kNC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxtZDUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcbWRfd3JhcC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxtZW1vcnlfYnVmZmVyX2FsbG9jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XG5ldF9zb2NrZXRzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XG9pZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwYWRsb2NrLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBlbS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxway5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwa193cmFwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBrY3MxMS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwa2NzMTIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlccGtjczUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlccGtwYXJzZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwa3dyaXRlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBsYXRmb3JtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHJpcGVtZDE2MC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxyc2EuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc2hhMS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxzaGEyNTYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc2hhNTEyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHNzbF9jYWNoZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxzc2xfY2lwaGVyc3VpdGVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHNzbF9jbGkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc3NsX2Nvb2tpZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxzc2xfc3J2LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHNzbF90aWNrZXQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc3NsX3Rscy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVx0aHJlYWRpbmcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcdGltaW5nLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHZlcnNpb24uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcdmVyc2lvbl9mZWF0dXJlcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVx4NTA5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHg1MDlfY3JlYXRlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHg1MDlfY3JsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHg1MDlfY3J0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHg1MDlfY3NyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHg1MDl3cml0ZV9jcnQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlceDUwOXdyaXRlX2Nzci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVx4dGVhLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL21kNXN1bS52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL21kNXN1bS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MWQ4OWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWQ1c3VtLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcaGFzaFxtZDVzdW0uYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezgwRkUxRUNGLTY5OTItQTI3NS03OTczLUUyOTc2NzE4RDEyOH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5tZDVzdW08L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL21pbmlfY2xpZW50LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWluaV9jbGllbnQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGI3NTI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL21pbmlfY2xpZW50LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcc3NsXG1pbmlfY2xpZW50LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntDNEZFMjlFQS0yNjZELTUyOTUtNDg0MC05NzZCOUI1QjM4NDN9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+bWluaV9jbGllbnQ8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL21waV9kZW1vLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbXBpX2RlbW8udmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDlkOGJmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL21waV9kZW1vLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxtcGlfZGVtby5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QTU5RkFBMEItOUMzNC0xRjk5LTc5NEQtQTM2NUEzQUE4Q0NFfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm1waV9kZW1vPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9wZW0yZGVyLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcGVtMmRlci52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZWIzNDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcGVtMmRlci52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHV0aWxccGVtMmRlci5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RDNDNkZCRDYtRDc4RS03MTgwLTgzNDUtNUUwOUI0OTJEQkVDfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnBlbTJkZXI8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3BrX2RlY3J5cHQudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9wa19kZWNyeXB0LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljNzE1NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9wa19kZWNyeXB0LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxwa19kZWNyeXB0LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPnsxRUM2Q0JBMy02MTg3LUQ0NTYtRDlCNy1BMzUzOTkzOTVENzF9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cGtfZGVjcnlwdDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcGtfZW5jcnlwdC52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3BrX2VuY3J5cHQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjFiZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3BrX2VuY3J5cHQudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XHBrX2VuY3J5cHQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezU1MDA3MTc5LTc3NDYtOUNGQi05N0VDLTY1MTAyRkIyNzJDOH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5wa19lbmNyeXB0PC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9wa19zaWduLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcGtfc2lnbi52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMTRmNmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcGtfc2lnbi52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHBrZXlccGtfc2lnbi5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RjJFOENBNTUtNTk3Ri03RkRDLTY0NTYtRDg2NTBGQjk3MEEzfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnBrX3NpZ248L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3BrX3ZlcmlmeS52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3BrX3ZlcmlmeS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMmM3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcGtfdmVyaWZ5LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxwa192ZXJpZnkuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0M0MjlCMzM2LTFCMzAtMTE5Qy0zQjM0LTIxQTE4NkQ2NzQ0Rn08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5wa192ZXJpZnk8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JlcV9hcHAudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yZXFfYXBwLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjOTU2ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yZXFfYXBwLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNceDUwOVxyZXFfYXBwLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns0ODZCMTM3NS01Q0ZBLUMyRDItREQ4OS1DOUY0OTdCQURDQjN9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cmVxX2FwcDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX2RlY3J5cHQudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2FfZGVjcnlwdC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOWYzNDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX2RlY3J5cHQudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XHJzYV9kZWNyeXB0LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntFMEQ3MUQ3Mi04REY0LUNDRkMtRUY2MC03NDFFQURBQjhCRjl9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cnNhX2RlY3J5cHQ8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV9lbmNyeXB0LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX2VuY3J5cHQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZkMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV9lbmNyeXB0LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxyc2FfZW5jcnlwdC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RDA2Q0YxMkUtRjIyMi05MjczLTQxQkYtQjhBMDUyRkE1NTI3fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnJzYV9lbmNyeXB0PC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2FfZ2Vua2V5LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX2dlbmtleS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYTYxNTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX2dlbmtleS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHBrZXlccnNhX2dlbmtleS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RjQ3MjQ3NUMtRjY3Ny0wRTdGLUYxMjctNDVCRjVCNjRGNjIyfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnJzYV9nZW5rZXk8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV9zaWduLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX3NpZ24udmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmRjNTkwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV9zaWduLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxyc2Ffc2lnbi5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57MTA3OTBGNDktNjg4Ny1BQUI2LTJEODYtQkNCRDUxNkY4RDI2fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnJzYV9zaWduPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2Ffc2lnbl9wc3MudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2Ffc2lnbl9wc3MudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2ZmOGZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV9zaWduX3Bzcy52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHBrZXlccnNhX3NpZ25fcHNzLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntEQ0QzQTFCNi01RUMxLTgyNjYtOTNFRi1CRDJCOUJFRkUxMkR9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cnNhX3NpZ25fcHNzPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2FfdmVyaWZ5LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX3ZlcmlmeS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OWY2MzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX3ZlcmlmeS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHBrZXlccnNhX3ZlcmlmeS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57Njg5RTI4Q0YtODlFRC1CQTM4LTNBMTQtNzhBNzVEODkxRDQ2fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnJzYV92ZXJpZnk8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV92ZXJpZnlfcHNzLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX3ZlcmlmeV9wc3MudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTMzOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV92ZXJpZnlfcHNzLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxyc2FfdmVyaWZ5X3Bzcy5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57OTVDNTA4NjQtODU0Qy0yQTExLTRDOTEtQkNFNjU0RTM0NEZCfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnJzYV92ZXJpZnlfcHNzPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zZWxmdGVzdC52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NlbGZ0ZXN0LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiM2ZhYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zZWxmdGVzdC52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHRlc3Rcc2VsZnRlc3QuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezdEQkM1Rjc3LTNEQTEtNUY3My04NDIxLUU2OTNEOTVGQzY2QX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5zZWxmdGVzdDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc2hhMXN1bS52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NoYTFzdW0udmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzAyNGFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NoYTFzdW0udmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xoYXNoXHNoYTFzdW0uYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0U5MUQxMkQ3LTAxQzAtMzU3Ri1DQUIxLTg0NzhCMDk2NzQzQ308L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5zaGExc3VtPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zaGEyc3VtLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc2hhMnN1bS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNDEwZWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc2hhMnN1bS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXGhhc2hcc2hhMnN1bS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57OEM1Q0YwOTUtQTBBNC01NEZCLTBENDgtOERGMkI3RkU0Q0E1fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnNoYTJzdW08L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9jZXJ0X3Rlc3QudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfY2VydF90ZXN0LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5MmU1OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfY2VydF90ZXN0LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcdGVzdFxzc2xfY2VydF90ZXN0LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPnszRkUwQzBFMS1EOUJBLTZBMjYtMzgwQy1GMjkzRTU0M0I5MTR9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+c3NsX2NlcnRfdGVzdDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc3NsX2NsaWVudDEudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfY2xpZW50MS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYzQyMjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc3NsX2NsaWVudDEudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xzc2xcc3NsX2NsaWVudDEuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezQ4N0EyRjgwLTNDQTMtNjc4RC04OEQ1LTgyMTk0ODcyQ0YwOH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5zc2xfY2xpZW50MTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc3NsX2NsaWVudDIudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfY2xpZW50Mi52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZDdiZTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc3NsX2NsaWVudDIudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xzc2xcc3NsX2NsaWVudDIuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezRFNTkwRTlELUUyOEYtODdGRi0zODVCLUQ1ODczNjM4ODIzMX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5zc2xfY2xpZW50MjwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc3NsX2Zvcmtfc2VydmVyLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc3NsX2Zvcmtfc2VydmVyLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2NTUyNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfZm9ya19zZXJ2ZXIudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xzc2xcc3NsX2Zvcmtfc2VydmVyLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns5MThDRDQwMi0wNDdELTg0NjctRTExQy1FMTEzMjA1M0Y5MTZ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+c3NsX2Zvcmtfc2VydmVyPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfbWFpbF9jbGllbnQudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfbWFpbF9jbGllbnQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTBiYWI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9tYWlsX2NsaWVudC52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHNzbFxzc2xfbWFpbF9jbGllbnQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezdDNDg2M0ExLTk0MUEtQzVBRS1FMUY5LTMwRjA2MkU0QjJGRH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5zc2xfbWFpbF9jbGllbnQ8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9zZXJ2ZXIudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfc2VydmVyLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5ZTJiYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfc2VydmVyLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcc3NsXHNzbF9zZXJ2ZXIuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0UwOEUwMDY1LTg5NkEtNzQ4Ny1ERUE1LUQzQjgwQjcxRjk3NX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5zc2xfc2VydmVyPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfc2VydmVyMi52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9zZXJ2ZXIyLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkZjBmZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfc2VydmVyMi52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHNzbFxzc2xfc2VydmVyMi5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QTREQTc0NjMtMTA0Ny1CREY1LUUxQjMtNTYzMkNCNTczRjQxfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnNzbF9zZXJ2ZXIyPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zdHJlcnJvci52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3N0cmVycm9yLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwNGUyYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zdHJlcnJvci52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHV0aWxcc3RyZXJyb3IuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezIzRUY3MzVDLUNDNEMtM0VDNC1BNzVFLTkwM0RCMzQwRjA0QX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5zdHJlcnJvcjwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvdWRwX3Byb3h5LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvdWRwX3Byb3h5LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg4ZDViZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC91ZHBfcHJveHkudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1x0ZXN0XHVkcF9wcm94eS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57N0UyQzgwRkUtM0NDMy04MkI0LTBDQUQtNjVEQzIzM0RFMTNBfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnVkcF9wcm94eTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvY3JlYXRlLW1vZHVsZS5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9jcmVhdGUtbW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjNzllYmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvY3JlYXRlLW1vZHVsZS5zaApAQCAtMCwwICsxLDQ3IEBACisjIS9iaW4vc2gKKworc2V0IC1ldQorCisjIHJlbGF0aXZlIHRvIHRoZSBzY3JpcHQncyBkaXJlY3RvcnkKK1RSRUU9Li4KK0RFU1Q9bW9kdWxlCisKKyMgbWFrZSBzdXJlIHdlJ3JlIHJ1bm5pbmcgaW4gb3VyIG93biBkaXJlY3RvcnkKK2lmIFsgLWYgY3JlYXRlLW1vZHVsZS5zaCBdOyB0aGVuIDo7IGVsc2UKKyAgICBjZCAkKCBkaXJuYW1lICQwICkKKyAgICBpZiBbIC1mIGNyZWF0ZS1tb2R1bGUuc2ggXTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGVjaG8gIlBsZWFzZSBydW4gdGhlIHNjcmlwdCBmcm9tIGlzIGRpcmVjdG9yeS4iID4mMgorICAgICAgICBleGl0IDEKKyAgICBmaQorZmkKKworIyB1c2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRvIGJ1aWxkIHRoZSBtb2R1bGUsIHRoZW4gcnN5bmMgdG8gREVTVAorIyB0aGlzIGFsbG93cyB0b3VjaGluZyBvbmx5IG5ldyBmaWxlcywgZm9yIG1vcmUgZWZmaWNpZW50IHJlLWJ1aWxkcworVE1QPSRERVNULXRtcAorcm0gLXJmICRUTVAKKworbWtkaXIgLXAgJFRNUC9tYmVkdGxzICRUTVAvc291cmNlCitjcCAkVFJFRS9pbmNsdWRlL21iZWR0bHMvKi5oICRUTVAvbWJlZHRscworY3AgJFRSRUUvbGlicmFyeS8qLmMgJFRNUC9zb3VyY2UKKworIyB0ZW1wb3JhcnksIHNob3VsZCBkZXBlbmQgb24gZXh0ZXJuYWwgbW9kdWxlIGxhdGVyCitjcCBkYXRhL2VudHJvcHlfaGFyZHdhcmVfcG9sbC5jICRUTVAvc291cmNlCitjcCBkYXRhL3RhcmdldF9jb25maWcuaCAkVE1QL21iZWR0bHMKKworZGF0YS9hZGp1c3QtY29uZmlnLnNoICRUUkVFL3NjcmlwdHMvY29uZmlnLnBsICRUTVAvbWJlZHRscy9jb25maWcuaAorCitta2RpciAtcCAkVE1QL3Rlc3QKK2NwIC1yIGRhdGEvZXhhbXBsZS0qICRUTVAvdGVzdAorIyBsYXRlciB3ZSBzaG91bGQgaGF2ZSB0aGUgZ2VuZXJhdGVkIHRlc3Qgc3VpdGVzIGhlcmUgdG9vCisKK2NwIGRhdGEvbW9kdWxlLmpzb24gJFRNUAorY3AgZGF0YS9SRUFETUUubWQgJFRNUAorCitjcCAuLi9MSUNFTlNFICRUTVAKK2lmIFsgLWYgLi4vYXBhY2hlLTIuMC50eHQgXTsgdGhlbiBjcCAuLi9hcGFjaGUtMi4wLnR4dCAkVE1QOyBmaQorCitta2RpciAtcCAkREVTVAorcnN5bmMgLWNyIC0tZGVsZXRlIC0tZXhjbHVkZSBidWlsZCAtLWV4Y2x1ZGUgeW90dGFfXCogJFRNUC8gJERFU1QvCitybSAtcmYgJFRNUAorCitlY2hvICJtYmVkIFRMUyB5b3R0YSBtb2R1bGUgY3JlYXRlZCBpbiAnJFBXRC8kREVTVCcuIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvUkVBRE1FLm1kIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NDhhYWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9SRUFETUUubWQKQEAgLTAsMCArMSwxMDMgQEAKKyMgbWJlZCBUTFMKKworbWJlZCBUTFMgbWFrZXMgaXQgdHJpdmlhbGx5IGVhc3kgZm9yIGRldmVsb3BlcnMgdG8gaW5jbHVkZSBjcnlwdG9ncmFwaGljIGFuZCBTU0wvVExTIGNhcGFiaWxpdGllcyBpbiB0aGVpciBlbWJlZGRlZCBwcm9kdWN0cywgd2l0aCBhIG1pbmltYWwgY29kZSBmb290cHJpbnQuIEl0IG9mZmVycyBhbiBTU0wgbGlicmFyeSB3aXRoIGFuIGludHVpdGl2ZSBBUEkgYW5kIHJlYWRhYmxlIHNvdXJjZSBjb2RlLgorCisqKk5vdGU6KiogVGhlIGN1cnJlbnQgcmVsZWFzZSBpcyBiZXRhLCBhbmQgaW1wbGVtZW50cyBubyBzZWN1cmUgc291cmNlIG9mIHJhbmRvbSBudW1iZXJzLCB3ZWFrZW5pbmcgaXRzIHNlY3VyaXR5LgorCitDdXJyZW50bHkgdGhlIG9ubHkgc3VwcG9ydGVkIHlvdHRhIHRhcmdldHMgYXJlOgorLSBgZnJkbS1rNjRmLWdjY2AKKy0gYGZyZG0tazY0Zi1hcm1jY2AKKy0gYHg4Ni1saW51eC1uYXRpdmVgCistIGB4ODYtb3N4LW5hdGl2ZWAKKworIyMgU2FtcGxlIHByb2dyYW1zCisKK1RoaXMgcmVsZWFzZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGV4YW1wbGVzOgorCisxLiBbKipTZWxmIHRlc3Q6KipdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWR0bHMvYmxvYi9kZXZlbG9wbWVudC95b3R0YS9kYXRhL2V4YW1wbGUtc2VsZnRlc3QpIFRlc3RzIGRpZmZlcmVudCBiYXNpYyBmdW5jdGlvbnMgaW4gdGhlIG1iZWQgVExTIGxpYnJhcnkuCisKKzIuIFsqKkJlbmNobWFyazoqKl0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZHRscy9ibG9iL2RldmVsb3BtZW50L3lvdHRhL2RhdGEvZXhhbXBsZS1iZW5jaG1hcmspIE1lYXN1cmVzIHRoZSB0aW1lIHRha2VuIHRvIHBlcmZvcm0gYmFzaWMgY3J5cHRvZ3JhcGhpYyBmdW5jdGlvbnMgdXNlZCBpbiB0aGUgbGlicmFyeS4KKworMy4gWyoqSGFzaGluZzoqKl0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZHRscy9ibG9iL2RldmVsb3BtZW50L3lvdHRhL2RhdGEvZXhhbXBsZS1oYXNoaW5nKSBEZW1vbnN0cmF0ZXMgdGhlIHZhcmlvdXMgQVBJcyBmb3IgY29tcHV0aW5nIGhhc2hlcyBvZiBkYXRhIChhbHNvIGtub3duIGFzIG1lc3NhZ2UgZGlnZXN0cykgd2l0aCBTSEEtMjU2LgorCis0LiBbKipBdXRoZW50aWNhdGVkIGVuY3J5cHRpb246KipdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWR0bHMvYmxvYi9kZXZlbG9wbWVudC95b3R0YS9kYXRhL2V4YW1wbGUtYXV0aGNyeXB0KSBEZW1vbnN0cmF0ZXMgdXNhZ2Ugb2YgdGhlIENpcGhlciBBUEkgZm9yIGVuY3J5cHRpbmcgYW5kIGF1dGhlbnRpY2F0aW5nIGRhdGEgd2l0aCBBRVMtQ0NNLgorCitUaGVzZSBleGFtcGxlcyBhcmUgaW50ZWdyYXRlZCBhcyB5b3R0YSB0ZXN0cywgc28gdGhhdCB0aGV5IGFyZSBidWlsdCBhdXRvbWF0aWNhbGx5IHdoZW4geW91IGJ1aWxkIG1iZWQgVExTLiBFYWNoIG9mIHRoZW0gY29tZXMgd2l0aCBjb21wbGV0ZSB1c2FnZSBpbnN0cnVjdGlvbnMgYXMgYSBSZWFkbWUgZmlsZSBpbiB0aGUgcmVwb3NpdG9yeS4KKworIyMgUGVyZm9ybWluZyBUTFMgYW5kIERUTFMgY29ubmVjdGlvbnMKKworQSBoaWdoLWxldmVsIEFQSSBmb3IgcGVyZm9ybWluZyBUTFMgYW5kIERUTFMgY29ubmVjdGlvbnMgd2l0aCBtYmVkIFRMUyBpbiBtYmVkIE9TIGlzIHByb3ZpZGVkIGluIGEgc2VwYXJhdGUgeW90dGEgbW9kdWxlOiBbbWJlZC10bHMtc29ja2V0c10oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZC10bHMtc29ja2V0cykuIFdlIHJlY29tbWVuZCB0aGlzIEFQSSBmb3IgVExTIGFuZCBEVExTIGNvbm5lY3Rpb25zLiBJdCBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIEFQSSBwcm92aWRlZCBieSB0aGUgW3NvY2tldHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL3NvY2tldHMpIG1vZHVsZSBmb3IgdW5lbmNyeXB0ZWQgVENQIGFuZCBVRFAgY29ubmVjdGlvbnMuCisKK1RoZSBgbWJlZC10bHMtc29ja2V0c2AgbW9kdWxlIGluY2x1ZGVzIGEgY29tcGxldGUgW2V4YW1wbGUgVExTIGNsaWVudF0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZC10bHMtc29ja2V0cy9ibG9iL21hc3Rlci90ZXN0L3Rscy1jbGllbnQvbWFpbi5jcHApIHdpdGggW3VzYWdlIGluc3RydWN0aW9uc10oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZC10bHMtc29ja2V0cy9ibG9iL21hc3Rlci90ZXN0L3Rscy1jbGllbnQvUkVBRE1FLm1kKS4KKworIyMgQ29uZmlndXJpbmcgbWJlZCBUTFMgZmVhdHVyZXMKKworbWJlZCBUTFMgbWFrZXMgaXQgZWFzeSB0byBkaXNhYmxlIGFueSBmZWF0dXJlIGR1cmluZyBjb21waWxhdGlvbiwgaWYgdGhhdCBmZWF0dXJlIGlzbid0IHJlcXVpcmVkIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC4gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBlbmFibGVzIGFsbCBtb2Rlcm4gYW5kIHdpZGVseS11c2VkIGZlYXR1cmVzLCB3aGljaCBzaG91bGQgbWVldCB0aGUgbmVlZHMgb2YgbmV3IHByb2plY3RzLCBhbmQgZGlzYWJsZXMgYWxsIGZlYXR1cmVzIHRoYXQgYXJlIG9sZGVyIG9yIGxlc3MgY29tbW9uLCB0byBtaW5pbWl6ZSB0aGUgY29kZSBmb290cHJpbnQuCisKK1RoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb21waWxhdGlvbiBmbGFncyBpcyBhdmFpbGFibGUgaW4gdGhlIGZ1bGx5IGRvY3VtZW50ZWQgW2NvbmZpZy5oIGZpbGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWR0bHMvYmxvYi9kZXZlbG9wbWVudC9pbmNsdWRlL21iZWR0bHMvY29uZmlnLmgpLgorCitJZiB5b3UgbmVlZCB0byBhZGp1c3QgdGhvc2UgZmxhZ3MsIHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93biBjb25maWd1cmF0aW9uLWFkanVzdG1lbnQgZmlsZSB3aXRoIHN1aXRhYmxlIGAjZGVmaW5lYCBhbmQgYCN1bmRlZmAgc3RhdGVtZW50cy4gVGhlc2Ugd2lsbCBiZSBpbmNsdWRlZCBiZXR3ZWVuIHRoZSBkZWZhdWx0IGRlZmluaXRpb25zIGFuZCB0aGUgc2FuaXR5IGNoZWNrcy4gWW91ciBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIGJlIGluIHlvdXIgYXBwbGljYXRpb24ncyBpbmNsdWRlIGRpcmVjdG9yeSwgYW5kIGNhbiBiZSBuYW1lZCBmcmVlbHk7IHlvdSBqdXN0IG5lZWQgdG8gbGV0IG1iZWQgVExTIGtub3cgdGhlIGZpbGUncyBuYW1lLiBUbyBkbyB0aGF0LCB1c2UgeW90dGEncyBbY29uZmlndXJhdGlvbiBzeXN0ZW1dKGh0dHA6Ly9kb2NzLnlvdHRhYnVpbGQub3JnL3JlZmVyZW5jZS9jb25maWcuaHRtbCkuIFRoZSBmaWxlJ3MgbmFtZSBzaG91bGQgYmUgaW4geW91ciBgY29uZmlnLmpzb25gIGZpbGUsIHVuZGVyIG1iZWR0bHMsIGFzIHRoZSBrZXkgYHVzZXItY29uZmlnLWZpbGVgLgorCitGb3IgZXhhbXBsZSwgaW4gYW4gYXBwbGljYXRpb24gY2FsbGVkIGBteWFwcGAsIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUgRUMgSi1QQUtFIGtleSBleGNoYW5nZSBhbmQgZGlzYWJsZSB0aGUgQ0JDIGNpcGhlciBtb2RlLCB5b3UgY2FuIGNyZWF0ZSBhIGZpbGUgbmFtZWQgIGBtYmVkdGxzLWNvbmZpZy1jaGFuZ2VzLmhgIGluIHRoZSBgbXlhcHBgIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgbGluZXM6CisKKyAgICAjZGVmaW5lIE1CRURUTFNfRUNKUEFLRV9DCisgICAgI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQKKworICAgICN1bmRlZiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworCitBbmQgdGhlbiBjcmVhdGUgYSBmaWxlIG5hbWVkIGBjb25maWcuanNvbmAgYXQgdGhlIHJvb3Qgb2YgeW91ciBhcHBsaWNhdGlvbiB3aXRoIHRoZSBmb2xsb3dpbmcgY29udGVudHM6CisKKyAgICB7CisgICAgICAgIm1iZWR0bHMiOiB7CisgICAgICAgICAgInVzZXItY29uZmlnLWZpbGUiOiAiXCJteWFwcC9tYmVkdGxzLWNvbmZpZy1jaGFuZ2VzLmhcIiIKKyAgICAgICB9CisgICAgfQorCitQbGVhc2Ugbm90ZTogeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgZXhhY3QgbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgYCNpbmNsdWRlYCBkaXJlY3RpdmUsIGluY2x1ZGluZyB0aGUgYDw+YCBvciBxdW90ZXMgYXJvdW5kIHRoZSBuYW1lLgorCisjIyBHZXR0aW5nIG1iZWQgVExTIGZyb20gR2l0SHViCisKK0xpa2UgbW9zdCBjb21wb25lbnRzIG9mIG1iZWQgT1MsIG1iZWQgVExTIGlzIGRldmVsb3BlZCBpbiB0aGUgb3BlbiBhbmQgaXRzIHNvdXJjZSBjYW4gYmUgZm91bmQgb24gR2l0SHViOiBbQVJNbWJlZC9tYmVkdGxzXShodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkdGxzKS4gVW5saWtlIG1vc3Qgb3RoZXIgbWJlZCBPUyBjb21wb25lbnRzLCBob3dldmVyLCB5b3UgY2Fubm90IGp1c3QgY2xvbmUgdGhlIHJlcG9zaXRvcnkgYW5kIHJ1biBgeW90dGEgYnVpbGRgIGZyb20gaXRzIHJvb3QuIFRoaXMgaXMgYmVjYXVzZSBtYmVkIFRMUyBhbHNvIGV4aXN0cyBhcyBhbiBpbmRlcGVuZGVudCBjb21wb25lbnQsIHNvIGl0cyByZXBvc2l0b3J5IGluY2x1ZGVzIHRoaW5ncyB0aGF0IGFyZSBub3QgcmVsZXZhbnQgZm9yIG1iZWQgT1MsIGFzIHdlbGwgYXMgb3RoZXIgYnVpbGQgc3lzdGVtcy4KKworVGhlIHdheSB0byB1c2UgbWJlZCBUTFMgZnJvbSBhIGNsb25lIG9mIHRoZSBHaXRIdWIgcmVwb3NpdG9yeSBpcyB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kcyBmcm9tIHRoZSByb290IG9mIGEgY2hlY2tvdXQ6CisKKyAgICB5b3R0YS9jcmVhdGUtbW9kdWxlLnNoCisgICAgY2QgeW90dGEvbW9kdWxlCisKK1lvdSBjYW4gdGhlbiBydW4gYW55IHlvdHRhIGNvbW1hbmQgeW91IHdvdWxkIG5vcm1hbGx5IHJ1biwgc3VjaCBhcyBgeW90dGEgYnVpbGRgIG9yIGB5b3R0YSBsaW5rYC4KKworIyMgRGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc3RhbmRhbG9uZSBhbmQgbWJlZCBPUyBlZGl0aW9ucworCitXaGlsZSB0aGUgdHdvIGVkaXRpb25zIHNoYXJlIHRoZSBzYW1lIGNvZGUgYmFzZSwgdGhlcmUgYXJlIHN0aWxsIGEgbnVtYmVyIG9mIGRpZmZlcmVuY2VzLCBtYWlubHkgaW4gY29uZmlndXJhdGlvbiBhbmQgaW50ZWdyYXRpb24uIFlvdSBzaG91bGQga2VlcCBpbiBtaW5kIHRob3NlIGRpZmZlcmVuY2VzIHdoZW4gcmVhZGluZyBzb21lIGFydGljbGVzIGluIG91ciBba25vd2xlZGdlIGJhc2VdKGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiKSwgYXMgY3VycmVudGx5IGFsbCB0aGUgYXJ0aWNsZXMgYXJlIGFib3V0IHRoZSBzdGFuZGFsb25lIGVkaXRpb24uCisKKyogVGhlIG1iZWQgT1MgZWRpdGlvbiBoYXMgYSBzbWFsbGVyIHNldCBvZiBmZWF0dXJlcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gYGNvbmZpZy5oYCwgaW4gb3JkZXIgdG8gcmVkdWNlIGZvb3RwcmludC4gV2hpbGUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvZiB0aGUgc3RhbmRhbG9uZSBlZGl0aW9uIHB1dHMgbW9yZSBlbXBoYXNpemUgb24gbWFpbnRhaW5pbmcgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIG9sZCBwZWVycywgdGhlIG1iZWQgT1MgZWRpdGlvbiBvbmx5IGVuYWJsZXMgdGhlIG1vc3QgbW9kZXJuIGNpcGhlcnMgYW5kIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiAoRClUTFMuCisKKyogVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIG1iZWQgVExTIGFyZSBkaXNhYmxlZCBpbiB0aGUgbWJlZCBPUyBlZGl0aW9uOiBgbmV0X3NvY2tldHMuY2AgYW5kIGB0aW1pbmcuY2AuIFRoaXMgaXMgYmVjYXVzZSBtYmVkIE9TIGluY2x1ZGUgdGhlaXIgZXF1aXZhbGVudHMuCisKKyogVGhlIG1iZWQgT1MgZWRpdGlvbiBjb21lcyB3aXRoIGEgZnVsbHkgaW50ZWdyYXRlZCBBUEkgZm9yIChEKVRMUyBjb25uZWN0aW9ucyBpbiBhIGNvbXBhbmlvbiBtb2R1bGU6IFttYmVkLXRscy1zb2NrZXRzXShodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkLXRscy1zb2NrZXRzKS4gU2VlICJQZXJmb3JtaW5nIFRMUyBhbmQgRFRMUyBjb25uZWN0aW9ucyIgYWJvdmUuCisKKyMjIE90aGVyIHJlc291cmNlcworCitUaGUgW21iZWQgVExTIHdlYnNpdGVdKGh0dHBzOi8vdGxzLm1iZWQub3JnKSBjb250YWlucyBtYW55IG90aGVyIHVzZWZ1bAorcmVzb3VyY2VzIGZvciB0aGUgZGV2ZWxvcGVyLCBzdWNoIGFzIFtkZXZlbG9wZXIKK2RvY3VtZW50YXRpb25dKGh0dHBzOi8vdGxzLm1iZWQub3JnL2Rldi1jb3JuZXIpLCBba25vd2xlZGdlYmFzZQorYXJ0aWNsZXNdKGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiKSwgYW5kIGEgW3N1cHBvcnQgZm9ydW1dKGh0dHBzOi8vdGxzLm1iZWQub3JnL2Rpc2N1c3Npb25zKS4KKworIyMgQ29udHJpYnV0aW5nCisKK1dlIGdyYXRlZnVsbHkgYWNjZXB0IGJ1ZyByZXBvcnRzIGFuZCBjb250cmlidXRpb25zIGZyb20gdGhlIGNvbW11bml0eS4gVGhlcmUgYXJlIHNvbWUgcmVxdWlyZW1lbnRzIHdlIG5lZWQgdG8gZnVsZmlsbCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGludGVncmF0ZSBjb250cmlidXRpb25zOgorCisqIFNpbXBsZSBidWcgZml4ZXMgdG8gZXhpc3RpbmcgY29kZSBkbyBub3QgY29udGFpbiBjb3B5cmlnaHQgdGhlbXNlbHZlcyBhbmQgd2UgY2FuIGludGVncmF0ZSB3aXRob3V0IGlzc3VlLiBUaGUgc2FtZSBpcyB0cnVlIG9mIHRyaXZpYWwgY29udHJpYnV0aW9ucy4KKworKiBGb3IgbGFyZ2VyIGNvbnRyaWJ1dGlvbnMsIHN1Y2ggYXMgYSBuZXcgZmVhdHVyZSwgdGhlIGNvZGUgY2FuIHBvc3NpYmx5IGZhbGwgdW5kZXIgY29weXJpZ2h0IGxhdy4gV2UgdGhlbiBuZWVkIHlvdXIgY29uc2VudCB0byBzaGFyZSBpbiB0aGUgb3duZXJzaGlwIG9mIHRoZSBjb3B5cmlnaHQuIFdlIGhhdmUgYSBmb3JtIGZvciB0aGlzLCB3aGljaCB3ZSB3aWxsIHNlbmQgdG8geW91IGluIGNhc2UgeW91IHN1Ym1pdCBhIGNvbnRyaWJ1dGlvbiBvciBwdWxsIHJlcXVlc3QgdGhhdCB3ZSBkZWVtIHRoaXMgbmVjZXNzYXJ5IGZvci4KKworVG8gY29udHJpYnV0ZSwgcGxlYXNlOgorCisqIFtDaGVjayBmb3Igb3BlbiBpc3N1ZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWR0bHMvaXNzdWVzKSBvciBbc3RhcnQgYSBkaXNjdXNzaW9uXShodHRwczovL3Rscy5tYmVkLm9yZy9kaXNjdXNzaW9ucykgYXJvdW5kIGEgZmVhdHVyZSBpZGVhIG9yIGEgYnVnLgorCisqIEZvcmsgdGhlIFttYmVkIFRMUyByZXBvc2l0b3J5IG9uIEdpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZHRscykgdG8gc3RhcnQgbWFraW5nIHlvdXIgY2hhbmdlcy4gQXMgYSBnZW5lcmFsIHJ1bGUsIHlvdSBzaG91bGQgdXNlIHRoZSAiZGV2ZWxvcG1lbnQiIGJyYW5jaCBhcyBhIGJhc2lzLgorCisqIFdyaXRlIGEgdGVzdCB0aGF0IHNob3dzIHRoYXQgdGhlIGJ1ZyB3YXMgZml4ZWQgb3IgdGhhdCB0aGUgZmVhdHVyZSB3b3JrcyBhcyBleHBlY3RlZC4KKworKiBTZW5kIGEgcHVsbCByZXF1ZXN0IGFuZCBidWcgdXMgdW50aWwgaXQgZ2V0cyBtZXJnZWQgYW5kIHB1Ymxpc2hlZC4gV2Ugd2lsbCBpbmNsdWRlIHlvdXIgbmFtZSBpbiB0aGUgQ2hhbmdlTG9nLgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9hZGp1c3QtY29uZmlnLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvYWRqdXN0LWNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZmE4NDkwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvYWRqdXN0LWNvbmZpZy5zaApAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKworc2V0IC1ldQorCitpZiBbICQjIC1uZSAyIF07IHRoZW4KKyAgICBlY2hvICJVc2FnZTogJDAgcGF0aC90by9jb25maWcucGwgcGF0aC90by9jb25maWcuaCIgPiYyCisgICAgZXhpdCAxCitmaQorCitTQ1JJUFQ9JDEKK0ZJTEU9JDIKKworY29uZigpIHsKKyAgICAkU0NSSVBUIC1mICRGSUxFICRACit9CisKKworIyBTZXQgdGhlIHRhcmdldCBzcGVjaWZpYyBoZWFkZXIKK2NvbmYgc2V0IFlPVFRBX0NGR19NQkVEVExTX1RBUkdFVF9DT05GSUdfRklMRSBcIm1iZWR0bHMvdGFyZ2V0X2NvbmZpZy5oXCIKKworIyBub3Qgc3VwcG9ydGVkIG9uIG1iZWQgT1MsIG5vciB1c2VkIGJ5IG1iZWQgQ2xpZW50Citjb25mIHVuc2V0IE1CRURUTFNfTkVUX0MKK2NvbmYgdW5zZXQgTUJFRFRMU19USU1JTkdfQworCisjIG5vdCBzdXBwb3J0ZWQgb24gYWxsIHRhcmdldHMgd2l0aCBtYmVkIE9TLCBub3IgdXNlZCBieSBtYmVkIENsaWVudAorY29uZiB1bnNldCBNQkVEVExTX0ZTX0lPCisKK2NvbmYgdW5zZXQgTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NvbmYgdW5zZXQgTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2NvbmYgdW5zZXQgTUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitjb25mIHVuc2V0IE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorY29uZiB1bnNldCBNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitjb25mIHVuc2V0IE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRAorY29uZiB1bnNldCBNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQKKworY29uZiB1bnNldCBNQkVEVExTX0FFU05JX0MKK2NvbmYgdW5zZXQgTUJFRFRMU19BUkM0X0MKK2NvbmYgdW5zZXQgTUJFRFRMU19CTE9XRklTSF9DCitjb25mIHVuc2V0IE1CRURUTFNfQ0FNRUxMSUFfQworY29uZiB1bnNldCBNQkVEVExTX0RFU19DCitjb25mIHVuc2V0IE1CRURUTFNfREhNX0MKK2NvbmYgdW5zZXQgTUJFRFRMU19HRU5QUklNRQorY29uZiB1bnNldCBNQkVEVExTX01ENV9DCitjb25mIHVuc2V0IE1CRURUTFNfUEFETE9DS19DCitjb25mIHVuc2V0IE1CRURUTFNfUEVNX1dSSVRFX0MKK2NvbmYgdW5zZXQgTUJFRFRMU19QS0NTNV9DCitjb25mIHVuc2V0IE1CRURUTFNfUEtDUzEyX0MKK2NvbmYgdW5zZXQgTUJFRFRMU19SSVBFTUQxNjBfQworY29uZiB1bnNldCBNQkVEVExTX1NIQTFfQworY29uZiB1bnNldCBNQkVEVExTX1hURUFfQworCitjb25mIHVuc2V0IE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQKKworY29uZiB1bnNldCBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MKK2NvbmYgdW5zZXQgTUJFRFRMU19YNTA5X0NSRUFURV9DCitjb25mIHVuc2V0IE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQworY29uZiB1bnNldCBNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MKKworY29uZiB1bnNldCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRAorY29uZiB1bnNldCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRAorY29uZiB1bnNldCBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWCitjb25mIHVuc2V0IE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HCitjb25mIHVuc2V0IE1CRURUTFNfU1NMX1BST1RPX1RMUzEKK2NvbmYgdW5zZXQgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xCitjb25mIHVuc2V0IE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9lbnRyb3B5X2hhcmR3YXJlX3BvbGwuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2VudHJvcHlfaGFyZHdhcmVfcG9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjFlMjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9lbnRyb3B5X2hhcmR3YXJlX3BvbGwuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogIEhhcmR3YXJlIGVudHJvcHkgY29sbGVjdG9yIGZvciB0aGUgSzY0RiwgdXNpbmcgRnJlZXNjYWxlJ3MgUk5HQQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKgorICogV0FSTklORzogdGhpcyBpcyB0ZW1wb3JhcnkhCisgKiBUaGlzIHNob3VsZCBiZSBpbiBhIHNlcGFyYXRlIHlvdHRhIG1vZHVsZSB3aGljaCB3b3VsZCBiZSBhIHRhcmdldAorICogZGVwZW5kZW5jeSBvZiBtYmVkdGxzIChzZWUgSU9UU1NMLTMxMykKKyAqLworCisjaWYgZGVmaW5lZChUQVJHRVRfTElLRV9LNjRGKQorCisvKgorICogUmVmZXJlbmNlOiAiSzY0IFN1Yi1GYW1pbHkgUmVmZXJlbmNlIE1hbnVhbCwgUmV2LiAyIiwgY2hhcHRlciAzNAorICovCisKKyNpbmNsdWRlICJmc2xfY2xvY2tfbWFuYWdlci5oIgorCisvKgorICogR2V0IG9uZSBieXRlIG9mIGVudHJvcHkgZnJvbSB0aGUgUk5HLCBhc3N1bWluZyBpdCBpcyB1cCBhbmQgcnVubmluZy4KKyAqIEFzIHJlY29tbWVuZGVkICgzNC4xLjEpLCBnZXQgb25seSBvbmUgYml0IG9mIGVhY2ggb3V0cHV0LgorICovCitzdGF0aWMgdm9pZCBybmdfZ2V0X2J5dGUoIHVuc2lnbmVkIGNoYXIgKmJ5dGUgKQoreworICAgIHNpemVfdCBiaXQ7CisKKyAgICAvKiAzNC41IFN0ZXBzIDMtNC01OiBwb2xsIFNSIGFuZCByZWFkIGZyb20gT1Igd2hlbiByZWFkeSAqLworICAgIGZvciggYml0ID0gMDsgYml0IDwgODsgYml0KysgKQorICAgIHsKKyAgICAgICAgd2hpbGUoICggUk5HLT5TUiAmIFJOR19TUl9PUkVHX0xWTF9NQVNLICkgPT0gMCApOworICAgICAgICAqYnl0ZSB8PSAoIFJORy0+T1IgJiAxICkgPDwgYml0OworICAgIH0KK30KKworLyoKKyAqIEdldCBsZW4gYnl0ZXMgb2YgZW50cm9weSBmcm9tIHRoZSBoYXJkd2FyZSBSTkcuCisgKi8KK2ludCBtYmVkdGxzX2hhcmR3YXJlX3BvbGwoIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBzaXplX3QgaTsKKyAgICBpbnQgcmV0OworICAgICgodm9pZCkgZGF0YSk7CisKKyAgICBDTE9DS19TWVNfRW5hYmxlUm5nYUNsb2NrKCAwICk7CisKKyAgICAvKiBTZXQgIkludGVycnVwdCBNYXNrIiwgIkhpZ2ggQXNzdXJhbmNlIiBhbmQgIkdvIiwKKyAgICAgKiB1bnNldCAiQ2xlYXIgaW50ZXJydXB0IiBhbmQgIlNsZWVwIiAqLworICAgIFJORy0+Q1IgPSBSTkdfQ1JfSU5UTV9NQVNLIHwgUk5HX0NSX0hBX01BU0sgfCBSTkdfQ1JfR09fTUFTSzsKKworICAgIGZvciggaSA9IDA7IGkgPCBsZW47IGkrKyApCisgICAgICAgIHJuZ19nZXRfYnl0ZSggb3V0cHV0ICsgaSApOworCisgICAgLyogSnVzdCBiZSBleHRyYSBzdXJlIHRoYXQgd2UgZGlkbid0IGRvIGl0IHdyb25nICovCisgICAgaWYoICggUk5HLT5TUiAmIFJOR19TUl9TRUNWX01BU0sgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IC0xOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgKm9sZW4gPSBsZW47CisgICAgcmV0ID0gMDsKKworY2xlYW51cDoKKyAgICAvKiBEaXNhYmxlIGNsb2NrIHRvIHNhdmUgcG93ZXIgLSBhc3N1bWUgd2UncmUgdGhlIG9ubHkgdXNlcnMgb2YgUk5HICovCisgICAgQ0xPQ0tfU1lTX0Rpc2FibGVSbmdhQ2xvY2soIDAgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1hdXRoY3J5cHQvUkVBRE1FLm1kIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1hdXRoY3J5cHQvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNGIxZWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWF1dGhjcnlwdC9SRUFETUUubWQKQEAgLTAsMCArMSw2OCBAQAorIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gRXhhbXBsZQorCitUaGlzIGFwcGxpY2F0aW9uIHBlcmZvcm1zIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRlZCBkZWNyeXB0aW9uIG9mIGEgYnVmZmVyLiBJdCBzZXJ2ZXMgYXMgYSB0dXRvcmlhbCBmb3IgdGhlIGJhc2ljIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBmdW5jdGlvbnMgb2YgbWJlZCBUTFMuCisKKyMjIFByZS1yZXF1aXNpdGVzCisKK1RvIGJ1aWxkIGFuZCBydW4gdGhpcyBleGFtcGxlIHlvdSBtdXN0IGhhdmU6CisKKyogQSBjb21wdXRlciB3aXRoIHRoZSBmb2xsb3dpbmcgc29mdHdhcmUgaW5zdGFsbGVkOgorICAqIFtDTWFrZV0oaHR0cDovL3d3dy5jbWFrZS5vcmcvZG93bmxvYWQvKS4KKyAgKiBbeW90dGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL3lvdHRhKS4gUGxlYXNlIG5vdGUgdGhhdCAqKnlvdHRhIGhhcyBpdHMgb3duIHNldCBvZiBkZXBlbmRlbmNpZXMqKiwgbGlzdGVkIGluIHRoZSBbaW5zdGFsbGF0aW9uIGluc3RydWN0aW9uc10oaHR0cDovL2FybW1iZWQuZ2l0aHViLmlvL3lvdHRhLyNpbnN0YWxsaW5nLW9uLXdpbmRvd3MpLgorICAqIFtQeXRob25dKGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzLykuCisgICogW1RoZSBBUk0gR0NDIHRvb2xjaGFpbl0oaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2djYy1hcm0tZW1iZWRkZWQpLgorICAqIEEgc2VyaWFsIHRlcm1pbmFsIGVtdWxhdG9yIChMaWtlIHNjcmVlbiwgcHlTZXJpYWwgYW5kIGN1KS4KKyogQW4gW0ZSRE0tSzY0Rl0oaHR0cDovL2RldmVsb3Blci5tYmVkLm9yZy9wbGF0Zm9ybXMvRlJETS1LNjRGLykgZGV2ZWxvcG1lbnQgYm9hcmQsIG9yIGFub3RoZXIgYm9hcmQgc3VwcG9ydGVkIGJ5IG1iZWQgT1MgKGluIHdoaWNoIGNhc2UgeW91J2xsIGhhdmUgdG8gc3Vic3RpdHV0ZSBmcmRtLWs2NGYtZ2NjIHdpdGggdGhlIGFwcHJvcHJpYXRlIHRhcmdldCBpbiB0aGUgaW5zdHJ1Y3Rpb25zIGJlbG93KS4KKyogQSBtaWNyby1VU0IgY2FibGUuCisqIElmIHlvdXIgT1MgaXMgV2luZG93cywgcGxlYXNlIGZvbGxvdyB0aGUgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBbZm9yIHRoZSBzZXJpYWwgcG9ydCBkcml2ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1iZWQub3JnL2hhbmRib29rL1dpbmRvd3Mtc2VyaWFsLWNvbmZpZ3VyYXRpb24pLgorCisjIyBHZXR0aW5nIHN0YXJ0ZWQKKworMS4gQ29ubmVjdCB0aGUgRlJETS1LNjRGIHRvIHRoZSBjb21wdXRlciB3aXRoIHRoZSBtaWNyby1VU0IgY2FibGUsIGJlaW5nIGNhcmVmdWwgdG8gdXNlIHRoZSAiT3BlblNEQSIgY29ubmVjdG9yIG9uIHRoZSB0YXJnZXQgYm9hcmQuCisKKzIuIE5hdmlnYXRlIHRvIHRoZSBtYmVkdGxzIGRpcmVjdG9yeSBzdXBwbGllZCB3aXRoIHlvdXIgcmVsZWFzZSBhbmQgb3BlbiBhIHRlcm1pbmFsLgorCiszLiBTZXQgdGhlIHlvdHRhIHRhcmdldDoKKworICAgIGBgYAorICAgIHlvdHRhIHRhcmdldCBmcmRtLWs2NGYtZ2NjCisgICAgYGBgCisKKzQuIEJ1aWxkIG1iZWR0bHMgYW5kIHRoZSBleGFtcGxlcy4gVGhpcyBtYXkgdGFrZSBhIGxvbmcgdGltZSBpZiB0aGlzIGlzIHlvdXIgZmlyc3QgY29tcGlsYXRpb246CisKKyAgICBgYGAKKyAgICAkIHlvdHRhIGJ1aWxkCisgICAgYGBgCisKKzUuIENvcHkgYGJ1aWxkL2ZyZG0tazY0Zi1nY2MvdGVzdC9tYmVkdGxzLXRlc3QtZXhhbXBsZS1hdXRoY3J5cHQuYmluYCB0byB5b3VyIG1iZWQgYm9hcmQgYW5kIHdhaXQgdW50aWwgdGhlIExFRCBuZXh0IHRvIHRoZSBVU0IgcG9ydCBzdG9wcyBibGlua2luZy4KKworNi4gU3RhcnQgdGhlIHNlcmlhbCB0ZXJtaW5hbCBlbXVsYXRvciBhbmQgY29ubmVjdCB0byB0aGUgdmlydHVhbCBzZXJpYWwgcG9ydCBwcmVzZW50ZWQgYnkgRlJETS1LNjRGLiAKKworCVVzZSB0aGUgZm9sbG93aW5nIHNldHRpbmdzOgorCisJKiAxMTUyMDAgYmF1ZCAobm90IDk2MDApLgorCSogOE4xLgorCSogTm8gZmxvdyBjb250cm9sLiAKKworNy4gUHJlc3MgdGhlIFJlc2V0IGJ1dHRvbiBvbiB0aGUgYm9hcmQuCisKKzguIFRoZSBvdXRwdXQgaW4gdGhlIHRlcm1pbmFsIHdpbmRvdyBzaG91bGQgbG9vayBsaWtlOgorCisgICAgYGBgCisgICAge3t0aW1lb3V0OzEwfX0KKyAgICB7e2hvc3RfdGVzdF9uYW1lO2RlZmF1bHR9fQorICAgIHt7ZGVzY3JpcHRpb247bWJlZCBUTFMgZXhhbXBsZSBhdXRoY3J5cHR9fQorICAgIHt7dGVzdF9pZDtNQkVEVExTX0VYX0FVVEhDUllQVH19CisgICAge3tzdGFydH19CisKKworICAgIHBsYWludGV4dCBtZXNzYWdlOiA1MzZmNmQ2NTIwNzQ2ODY5NmU2NzczMjA2MTcyNjUyMDYyNjU3NDc0NjU3MjIwNmM2NTY2NzQyMDc1NmU3MjY1NjE2NDAwCisgICAgY2lwaGVydGV4dDogYzU3ZjdhZmI5NGYxNGM3OTc3ZDc4NWQwODY4MmEyNTk2YmQ2MmVlOWRjZjIxNmI4Y2NjZDk5N2FmZWU5YjQwMmY1ZGUxNzM5ZThlNjQ2N2FhMzYzNzQ5ZWYzOTM5MmU1YzY2NjIyYjAxYzcyMDNlYzBhM2QxNAorICAgIGRlY3J5cHRlZDogNTM2ZjZkNjUyMDc0Njg2OTZlNjc3MzIwNjE3MjY1MjA2MjY1NzQ3NDY1NzIyMDZjNjU2Njc0MjA3NTZlNzI2NTYxNjQwMAorCisgICAgRE9ORQorICAgIHt7c3VjY2Vzc319CisgICAge3tlbmR9fQorICAgIGBgYAorCitUaGUgYWN0dWFsIG91dHB1dCBmb3IgdGhlIGNpcGhlcnRleHQgbGluZSB3aWxsIHZhcnkgb24gZWFjaCBydW4gYmVjYXVzZSBvZiB0aGUgdXNlIG9mIGEgcmFuZG9tIG5vbmNlIGluIHRoZSBlbmNyeXB0aW9uIHByb2Nlc3MuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWF1dGhjcnlwdC9tYWluLmNwcCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtYXV0aGNyeXB0L21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZmFkMjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWF1dGhjcnlwdC9tYWluLmNwcApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqICBIZWxsbyB3b3JsZCBleGFtcGxlIG9mIHVzaW5nIHRoZSBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gd2l0aCBtYmVkIFRMUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaW5jbHVkZSAibWJlZHRscy9jaXBoZXIuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgdm9pZCBwcmludF9oZXgoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnVmW10sIHNpemVfdCBsZW4pCit7CisgICAgcHJpbnRmKCIlczogIiwgdGl0bGUpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAgICAgcHJpbnRmKCIlMDJ4IiwgYnVmW2ldKTsKKworICAgIHByaW50ZigiXHJcbiIpOworfQorCisvKgorICogVGhlIHByZS1zaGFyZWQga2V5LiBTaG91bGQgYmUgZ2VuZXJhdGVkIHJhbmRvbWx5IGFuZCBiZSB1bmlxdWUgdG8gdGhlCisgKiBkZXZpY2UvY2hhbm5lbC9ldGMuIEp1c3QgdXNlZCBhIGZpeGVkIG9uIGhlcmUgZm9yIHNpbXBsaWNpdHkuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNlY3JldF9rZXlbMTZdID0geworICAgIDB4ZjQsIDB4ODIsIDB4YzYsIDB4NzAsIDB4M2MsIDB4YzcsIDB4NjEsIDB4MGEsCisgICAgMHhiOSwgMHhhMCwgMHhiOCwgMHhlOSwgMHg4NywgMHhiOCwgMHhjMSwgMHg3MiwKK307CisKK3N0YXRpYyBpbnQgZXhhbXBsZSh2b2lkKQoreworICAgIC8qIG1lc3NhZ2UgdGhhdCBzaG91bGQgYmUgcHJvdGVjdGVkICovCisgICAgY29uc3QgY2hhciBtZXNzYWdlW10gPSAiU29tZSB0aGluZ3MgYXJlIGJldHRlciBsZWZ0IHVucmVhZCI7CisgICAgLyogbWV0YWRhdGEgdHJhbnNtaXR0ZWQgaW4gdGhlIGNsZWFyIGJ1dCBhdXRoZW50aWNhdGVkICovCisgICAgY29uc3QgY2hhciBtZXRhZGF0YVtdID0gImVnIHNlcXVlbmNlIG51bWJlciwgcm91dGluZyBpbmZvIjsKKyAgICAvKiBjaXBoZXJ0ZXh0IGJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtZXNzYWdlICsgbm9uY2UgKyB0YWcgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMTI4XSA9IHsgMCB9OworICAgIGludCByZXQ7CisKKyAgICBwcmludGYoIlxyXG5cclxuIik7CisgICAgcHJpbnRfaGV4KCJwbGFpbnRleHQgbWVzc2FnZSIsICh1bnNpZ25lZCBjaGFyICopIG1lc3NhZ2UsIHNpemVvZiBtZXNzYWdlKTsKKworICAgIC8qCisgICAgICogU2V0dXAgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgKiAoTm90ZTogbGF0ZXIgdGhpcyBtaWdodCBiZSBkb25lIGF1dG9tYXRpY2FsbHkuKQorICAgICAqLworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7ICAgIC8qIGVudHJvcHkgcG9vbCBmb3Igc2VlZGluZyBQUk5HICovCisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGRyYmc7ICAgICAgLyogcHNldWRvLXJhbmRvbSBnZW5lcmF0b3IgKi8KKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCZlbnRyb3B5KTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoJmRyYmcpOworCisgICAgLyogU2VlZCB0aGUgUFJORyB1c2luZyB0aGUgZW50cm9weSBwb29sLCBhbmQgdGhyb3cgaW4gb3VyIHNlY3JldCBrZXkgYXMgYW4KKyAgICAgKiBhZGRpdGlvbmFsIHNvdXJjZSBvZiByYW5kb21uZXNzLiAqLworICAgIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCgmZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0X2tleSwgc2l6ZW9mIChzZWNyZXRfa2V5KSk7CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIHByaW50ZigibWJlZHRsc19jdHJfZHJiZ19pbml0KCkgcmV0dXJuZWQgLTB4JTA0WFxyXG4iLCAtcmV0KTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZXR1cCBBRVMtQ0NNIGNvbnRleAorICAgICAqLworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHg7CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCZjdHgpOworCisgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoJmN0eCwgbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00pKTsKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgcHJpbnRmKCJtYmVkdGxzX2NpcGhlcl9zZXR1cCgpIHJldHVybmVkIC0weCUwNFhcclxuIiwgLXJldCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSgmY3R4LCBzZWNyZXRfa2V5LCA4ICogc2l6ZW9mIHNlY3JldF9rZXksIE1CRURUTFNfRU5DUllQVCk7CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIHByaW50ZigibWJlZHRsc19jaXBoZXJfc2V0a2V5KCkgcmV0dXJuZWQgLTB4JTA0WFxyXG4iLCAtcmV0KTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBFbmNyeXB0LWF1dGhlbnRpY2F0ZSB0aGUgbWVzc2FnZSBhbmQgYXV0aGVudGljYXRlIGFkZGl0aW9uYWwgZGF0YQorICAgICAqCisgICAgICogRmlyc3QgZ2VuZXJhdGUgYSByYW5kb20gOC1ieXRlIG5vbmNlLgorICAgICAqIFB1dCBpdCBkaXJlY3RseSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBhcyB0aGUgcmVjaXBpZW50IHdpbGwgbmVlZCBpdC4KKyAgICAgKgorICAgICAqIFdhcm5pbmc6IHlvdSBtdXN0IG5ldmVyIHJlLXVzZSB0aGUgc2FtZSAoa2V5LCBub25jZSkgcGFpci4gT25lIG9mIHRoZQorICAgICAqIGJlc3Qgd2F5cyB0byBlbnN1cmUgdGhpcyB0byB1c2UgYSBjb3VudGVyIGZvciB0aGUgbm9uY2UuIEhvd2V2ZXIgdGhpcworICAgICAqIG1lYW5zIHlvdSBzaG91bGQgc2F2ZSB0aGUgY291bnRlciBhY2Nyb3NzIHJlYm90cywgaWYgdGhlIGtleSBpcyBhCisgICAgICogbG9uZy10ZXJtIG9uZS4gVGhlIGFsdGVybmF0aXZlIHdlIGNob29zZSBoZXJlIGlzIHRvIGdlbmVyYXRlIHRoZSBub25jZQorICAgICAqIHJhbmRvbWx5LiBIb3dldmVyIGl0IG9ubHkgd29ya3MgaWYgeW91IGhhdmUgYSBnb29kIHNvdXJjZSBvZgorICAgICAqIHJhbmRvbW5lc3MuCisgICAgICovCisgICAgY29uc3Qgc2l6ZV90IG5vbmNlX2xlbiA9IDg7CisgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20oJmRyYmcsIGNpcGhlcnRleHQsIG5vbmNlX2xlbik7CisKKyAgICBzaXplX3QgY2lwaGVydGV4dF9sZW4gPSAwOworICAgIC8qIEdvIGZvciBhIGNvbnNlcnZhdGl2ZSAxNi1ieXRlICgxMjgtYml0KSB0YWcKKyAgICAgKiBhbmQgYXBwZW5kIGl0IHRvIHRoZSBjaXBoZXJ0ZXh0ICovCisgICAgY29uc3Qgc2l6ZV90IHRhZ19sZW4gPSAxNjsKKyAgICByZXQgPSBtYmVkdGxzX2NpcGhlcl9hdXRoX2VuY3J5cHQoJmN0eCwgY2lwaGVydGV4dCwgbm9uY2VfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWV0YWRhdGEsIHNpemVvZiBtZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1lc3NhZ2UsIHNpemVvZiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dCArIG5vbmNlX2xlbiwgJmNpcGhlcnRleHRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dCArIG5vbmNlX2xlbiArIHNpemVvZiBtZXNzYWdlLCB0YWdfbGVuICk7CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIHByaW50ZigibWJlZHRsc19jaXBoZXJfYXV0aF9lbmNyeXB0KCkgcmV0dXJuZWQgLTB4JTA0WFxyXG4iLCAtcmV0KTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGNpcGhlcnRleHRfbGVuICs9IG5vbmNlX2xlbiArIHRhZ19sZW47CisKKyAgICAvKgorICAgICAqIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gc2hvdWxkIG5vdyBiZSB0cmFuc21pdHRlZDoKKyAgICAgKiAtIGZpcnN0IGNpcGhlcnRleHRfbGVuIGJ5dGVzIG9mIGNpcGhlcnRleHQgYnVmZmVyCisgICAgICogLSBtZXRhZGF0YSBpZiBub3QgYWxyZWFkeSB0cmFuc21pdHRlZCBlbHNld2hlcmUKKyAgICAgKi8KKyAgICBwcmludF9oZXgoImNpcGhlcnRleHQiLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X2xlbik7CisKKyAgICAvKgorICAgICAqIERlY3J5cHQtYXV0aGVudGljYXRlCisgICAgICovCisgICAgdW5zaWduZWQgY2hhciBkZWNyeXB0ZWRbMTI4XSA9IHsgMCB9OworICAgIHNpemVfdCBkZWNyeXB0ZWRfbGVuID0gMDsKKworICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSgmY3R4LCBzZWNyZXRfa2V5LCA4ICogc2l6ZW9mIHNlY3JldF9rZXksIE1CRURUTFNfREVDUllQVCk7CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIHByaW50ZigibWJlZHRsc19jaXBoZXJfc2V0a2V5KCkgcmV0dXJuZWQgLTB4JTA0WFxyXG4iLCAtcmV0KTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfYXV0aF9kZWNyeXB0KCZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0LCBub25jZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtZXRhZGF0YSwgc2l6ZW9mIG1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dCArIG5vbmNlX2xlbiwgY2lwaGVydGV4dF9sZW4gLSBub25jZV9sZW4gLSB0YWdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdGVkLCAmZGVjcnlwdGVkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHQgKyBjaXBoZXJ0ZXh0X2xlbiAtIHRhZ19sZW4sIHRhZ19sZW4gKTsKKyAgICAvKiBDaGVja2luZyB0aGUgcmV0dXJuIGNvZGUgaXMgQ1JJVElDQUwgZm9yIHNlY3VyaXR5IGhlcmUgKi8KKyAgICBpZiAocmV0ID09IE1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRCkgeworICAgICAgICBwcmludGYoIlNvbWV0aGluZyBiYWQgaXMgaGFwcGVuaW5nISBEYXRhIGlzIG5vdCBhdXRoZW50aWMhXHJcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIHByaW50ZigibWJlZHRsc19jaXBoZXJfYXV0aGRlY3J5cHQoKSByZXR1cm5lZCAtMHglMDRYXHJcbiIsIC1yZXQpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBwcmludF9oZXgoImRlY3J5cHRlZCIsIGRlY3J5cHRlZCwgZGVjcnlwdGVkX2xlbik7CisKKyAgICBwcmludGYoIlxyXG5ET05FXHJcbiIpOworCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKFRBUkdFVF9MSUtFX01CRUQpCisKKyNpbmNsdWRlICJtYmVkLWRyaXZlcnMvdGVzdF9lbnYuaCIKKyNpbmNsdWRlICJtaW5hci9taW5hci5oIgorCitzdGF0aWMgdm9pZCBydW4oKSB7CisgICAgTUJFRF9IT1NUVEVTVF9USU1FT1VUKDEwKTsKKyAgICBNQkVEX0hPU1RURVNUX1NFTEVDVChkZWZhdWx0KTsKKyAgICBNQkVEX0hPU1RURVNUX0RFU0NSSVBUSU9OKG1iZWQgVExTIGV4YW1wbGUgYXV0aGNyeXB0KTsKKyAgICBNQkVEX0hPU1RURVNUX1NUQVJUKCJNQkVEVExTX0VYX0FVVEhDUllQVCIpOworICAgIE1CRURfSE9TVFRFU1RfUkVTVUxUKGV4YW1wbGUoKSA9PSAwKTsKK30KKwordm9pZCBhcHBfc3RhcnQoaW50LCBjaGFyKltdKSB7CisgICAgLyogVXNlIDExNTIwMCBicHMgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgZXhhbXBsZXMgKi8KKyAgICBnZXRfc3RkaW9fc2VyaWFsKCkuYmF1ZCgxMTUyMDApOworICAgIG1pbmFyOjpTY2hlZHVsZXI6OnBvc3RDYWxsYmFjayhtYmVkOjp1dGlsOjpGdW5jdGlvblBvaW50ZXIwPHZvaWQ+KHJ1bikuYmluZCgpKTsKK30KKworI2Vsc2UKKworaW50IG1haW4oKSB7CisgICAgcmV0dXJuIGV4YW1wbGUoKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWJlbmNobWFyay9SRUFETUUubWQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWJlbmNobWFyay9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU4OWU3YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtYmVuY2htYXJrL1JFQURNRS5tZApAQCAtMCwwICsxLDEwMCBAQAorIyBtYmVkIFRMUyBCZW5jaG1hcmsgRXhhbXBsZQorCitUaGlzIGFwcGxpY2F0aW9uIGJlbmNobWFya3MgdGhlIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYyBwcmltaXRpdmVzIG9mZmVyZWQgYnkgbWJlZCBUTFMuCisKKyMjIFByZS1yZXF1aXNpdGVzCisKK1RvIGJ1aWxkIGFuZCBydW4gdGhpcyBleGFtcGxlIHlvdSBtdXN0IGhhdmU6CisKKyogQSBjb21wdXRlciB3aXRoIHRoZSBmb2xsb3dpbmcgc29mdHdhcmUgaW5zdGFsbGVkOgorICAqIFtDTWFrZV0oaHR0cDovL3d3dy5jbWFrZS5vcmcvZG93bmxvYWQvKS4KKyAgKiBbeW90dGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL3lvdHRhKS4gUGxlYXNlIG5vdGUgdGhhdCAqKnlvdHRhIGhhcyBpdHMgb3duIHNldCBvZiBkZXBlbmRlbmNpZXMqKiwgbGlzdGVkIGluIHRoZSBbaW5zdGFsbGF0aW9uIGluc3RydWN0aW9uc10oaHR0cDovL2FybW1iZWQuZ2l0aHViLmlvL3lvdHRhLyNpbnN0YWxsaW5nLW9uLXdpbmRvd3MpLgorICAqIFtQeXRob25dKGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzLykuCisgICogW1RoZSBBUk0gR0NDIHRvb2xjaGFpbl0oaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2djYy1hcm0tZW1iZWRkZWQpLgorICAqIEEgc2VyaWFsIHRlcm1pbmFsIGVtdWxhdG9yIChMaWtlIHNjcmVlbiwgcHlTZXJpYWwgYW5kIGN1KS4KKyogQW4gW0ZSRE0tSzY0Rl0oaHR0cDovL2RldmVsb3Blci5tYmVkLm9yZy9wbGF0Zm9ybXMvRlJETS1LNjRGLykgZGV2ZWxvcG1lbnQgYm9hcmQsIG9yIGFub3RoZXIgYm9hcmQgc3VwcG9ydGVkIGJ5IG1iZWQgT1MgKGluIHdoaWNoIGNhc2UgeW91J2xsIGhhdmUgdG8gc3Vic3RpdHV0ZSBmcmRtLWs2NGYtZ2NjIHdpdGggdGhlIGFwcHJvcHJpYXRlIHRhcmdldCBpbiB0aGUgaW5zdHJ1Y3Rpb25zIGJlbG93KS4KKyogQSBtaWNyby1VU0IgY2FibGUuCisqIElmIHlvdXIgT1MgaXMgV2luZG93cywgcGxlYXNlIGZvbGxvdyB0aGUgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBbZm9yIHRoZSBzZXJpYWwgcG9ydCBkcml2ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1iZWQub3JnL2hhbmRib29rL1dpbmRvd3Mtc2VyaWFsLWNvbmZpZ3VyYXRpb24pLgorCisjIyBHZXR0aW5nIHN0YXJ0ZWQKKworMS4gQ29ubmVjdCB0aGUgRlJETS1LNjRGIHRvIHRoZSBjb21wdXRlciB3aXRoIHRoZSBtaWNyby1VU0IgY2FibGUsIGJlaW5nIGNhcmVmdWwgdG8gdXNlIHRoZSAiT3BlblNEQSIgY29ubmVjdG9yIG9uIHRoZSB0YXJnZXQgYm9hcmQuCisKKzIuIE5hdmlnYXRlIHRvIHRoZSBtYmVkdGxzIGRpcmVjdG9yeSBzdXBwbGllZCB3aXRoIHlvdXIgcmVsZWFzZSBhbmQgb3BlbiBhIHRlcm1pbmFsLgorCiszLiBTZXQgdGhlIHlvdHRhIHRhcmdldDoKKworICAgIGBgYAorICAgIHlvdHRhIHRhcmdldCBmcmRtLWs2NGYtZ2NjCisgICAgYGBgCisKKzQuIEJ1aWxkIG1iZWR0bHMgYW5kIHRoZSBleGFtcGxlcy4gVGhpcyBtYXkgdGFrZSBhIGxvbmcgdGltZSBpZiB0aGlzIGlzIHlvdXIgZmlyc3QgY29tcGlsYXRpb246CisKKyAgICBgYGAKKyAgICAkIHlvdHRhIGJ1aWxkCisgICAgYGBgCisKKzUuIENvcHkgYGJ1aWxkL2ZyZG0tazY0Zi1nY2MvdGVzdC9tYmVkdGxzLXRlc3QtZXhhbXBsZS1iZW5jaG1hcmsuYmluYCB0byB5b3VyIG1iZWQgYm9hcmQgYW5kIHdhaXQgdW50aWwgdGhlIExFRCBuZXh0IHRvIHRoZSBVU0IgcG9ydCBzdG9wcyBibGlua2luZy4KKworNi4gU3RhcnQgdGhlIHNlcmlhbCB0ZXJtaW5hbCBlbXVsYXRvciBhbmQgY29ubmVjdCB0byB0aGUgdmlydHVhbCBzZXJpYWwgcG9ydCBwcmVzZW50ZWQgYnkgRlJETS1LNjRGLiAKKworCVVzZSB0aGUgZm9sbG93aW5nIHNldHRpbmdzOgorCisJKiAxMTUyMDAgYmF1ZCAobm90IDk2MDApLgorCSogOE4xLgorCSogTm8gZmxvdyBjb250cm9sLiAKKworNy4gUHJlc3MgdGhlIFJlc2V0IGJ1dHRvbiBvbiB0aGUgYm9hcmQuCisKKzguIFRoZSBvdXRwdXQgaW4gdGhlIHRlcm1pbmFsIHdpbmRvdyBzaG91bGQgbG9vayBsaWtlOgorCisgICAgYGBgCisgICAge3t0aW1lb3V0OzE1MH19CisgICAge3tob3N0X3Rlc3RfbmFtZTtkZWZhdWx0fX0KKyAgICB7e2Rlc2NyaXB0aW9uO21iZWQgVExTIGJlbmNobWFyayBwcm9ncmFtfX0KKyAgICB7e3Rlc3RfaWQ7TUJFRFRMU19CRU5DSE1BUkt9fQorICAgIHt7c3RhcnR9fQorCisKKyAgICAgIFNIQS0xICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDM2NDQgS2IvcywgICAgICAgICAzMiBjeWNsZXMvYnl0ZQorICAgICAgU0hBLTI1NiAgICAgICAgICAgICAgICAgIDogICAgICAgMTk1NyBLYi9zLCAgICAgICAgIDU5IGN5Y2xlcy9ieXRlCisgICAgICBTSEEtNTEyICAgICAgICAgICAgICAgICAgOiAgICAgICAgNTg3IEtiL3MsICAgICAgICAyMDAgY3ljbGVzL2J5dGUKKyAgICAgIEFFUy1DQkMtMTI4ICAgICAgICAgICAgICA6ICAgICAgIDEzNTkgS2IvcywgICAgICAgICA4NiBjeWNsZXMvYnl0ZQorICAgICAgQUVTLUNCQy0xOTIgICAgICAgICAgICAgIDogICAgICAgMTE4MyBLYi9zLCAgICAgICAgIDk5IGN5Y2xlcy9ieXRlCisgICAgICBBRVMtQ0JDLTI1NiAgICAgICAgICAgICAgOiAgICAgICAxMDQ4IEtiL3MsICAgICAgICAxMTEgY3ljbGVzL2J5dGUKKyAgICAgIEFFUy1HQ00tMTI4ICAgICAgICAgICAgICA6ICAgICAgICA0MjEgS2IvcywgICAgICAgIDI3OSBjeWNsZXMvYnl0ZQorICAgICAgQUVTLUdDTS0xOTIgICAgICAgICAgICAgIDogICAgICAgIDQwMyBLYi9zLCAgICAgICAgMjkyIGN5Y2xlcy9ieXRlCisgICAgICBBRVMtR0NNLTI1NiAgICAgICAgICAgICAgOiAgICAgICAgMzg1IEtiL3MsICAgICAgICAzMDUgY3ljbGVzL2J5dGUKKyAgICAgIEFFUy1DQ00tMTI4ICAgICAgICAgICAgICA6ICAgICAgICA1NDIgS2IvcywgICAgICAgIDIxNiBjeWNsZXMvYnl0ZQorICAgICAgQUVTLUNDTS0xOTIgICAgICAgICAgICAgIDogICAgICAgIDQ4NCBLYi9zLCAgICAgICAgMjQyIGN5Y2xlcy9ieXRlCisgICAgICBBRVMtQ0NNLTI1NiAgICAgICAgICAgICAgOiAgICAgICAgNDM3IEtiL3MsICAgICAgICAyNjggY3ljbGVzL2J5dGUKKyAgICAgIENUUl9EUkJHIChOT1BSKSAgICAgICAgICA6ICAgICAgIDEwMDIgS2IvcywgICAgICAgIDExNyBjeWNsZXMvYnl0ZQorICAgICAgQ1RSX0RSQkcgKFBSKSAgICAgICAgICAgIDogICAgICAgIDcwNSBLYi9zLCAgICAgICAgMTY2IGN5Y2xlcy9ieXRlCisgICAgICBITUFDX0RSQkcgU0hBLTEgKE5PUFIpICAgOiAgICAgICAgMjI4IEtiL3MsICAgICAgICA1MTcgY3ljbGVzL2J5dGUKKyAgICAgIEhNQUNfRFJCRyBTSEEtMSAoUFIpICAgICA6ICAgICAgICAyMTAgS2IvcywgICAgICAgIDU2MSBjeWNsZXMvYnl0ZQorICAgICAgSE1BQ19EUkJHIFNIQS0yNTYgKE5PUFIpIDogICAgICAgIDIxMiBLYi9zLCAgICAgICAgNTU3IGN5Y2xlcy9ieXRlCisgICAgICBITUFDX0RSQkcgU0hBLTI1NiAoUFIpICAgOiAgICAgICAgMTg1IEtiL3MsICAgICAgICA2MzcgY3ljbGVzL2J5dGUKKyAgICAgIFJTQS0yMDQ4ICAgICAgICAgICAgICAgICA6ICAgICAgNDEgbXMvIHB1YmxpYworICAgICAgUlNBLTIwNDggICAgICAgICAgICAgICAgIDogICAgMTM0OSBtcy9wcml2YXRlCisgICAgICBSU0EtNDA5NiAgICAgICAgICAgICAgICAgOiAgICAgMTM0IG1zLyBwdWJsaWMKKyAgICAgIFJTQS00MDk2ICAgICAgICAgICAgICAgICA6ICAgIDcxNDkgbXMvcHJpdmF0ZQorICAgICAgRUNEU0Etc2VjcDM4NHIxICAgICAgICAgIDogICAgIDY0MCBtcy9zaWduCisgICAgICBFQ0RTQS1zZWNwMjU2cjEgICAgICAgICAgOiAgICAgMzg3IG1zL3NpZ24KKyAgICAgIEVDRFNBLXNlY3AzODRyMSAgICAgICAgICA6ICAgIDEyMzMgbXMvdmVyaWZ5CisgICAgICBFQ0RTQS1zZWNwMjU2cjEgICAgICAgICAgOiAgICAgNzUxIG1zL3ZlcmlmeQorICAgICAgRUNESEUtc2VjcDM4NHIxICAgICAgICAgIDogICAgMTE5MSBtcy9oYW5kc2hha2UKKyAgICAgIEVDREhFLXNlY3AyNTZyMSAgICAgICAgICA6ICAgICA3MzAgbXMvaGFuZHNoYWtlCisgICAgICBFQ0RIRS1DdXJ2ZTI1NTE5ICAgICAgICAgOiAgICAgNjExIG1zL2hhbmRzaGFrZQorICAgICAgRUNESC1zZWNwMzg0cjEgICAgICAgICAgIDogICAgIDU4NCBtcy9oYW5kc2hha2UKKyAgICAgIEVDREgtc2VjcDI1NnIxICAgICAgICAgICA6ICAgICAzNjUgbXMvaGFuZHNoYWtlCisgICAgICBFQ0RILUN1cnZlMjU1MTkgICAgICAgICAgOiAgICAgMzAzIG1zL2hhbmRzaGFrZQorCisgICAge3tzdWNjZXNzfX0KKyAgICB7e2VuZH19CisgICAgYGBgCisKK0FueSBwZXJmb3JtYW5jZSBkYXRhIGdlbmVyYXRlZCBieSB0aGlzIGV4YW1wbGUgYXBwbGljYXRpb24gYXJlIGluZGljYXRpdmUgb25seSBvZiB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIG1iZWQgVExTIG1vZHVsZSBvbiB0aGUgcGxhdGZvcm0gaXQncyBleGVjdXRlZCBvbi4KKworRGlmZmVyZW5jZXMgaW4gdGhlIGludGVncmF0aW9uIG9mIG1iZWQgVExTIGludG8gdGhlIHBsYXRmb3JtLCBzdWNoIGFzIHdoZXRoZXIgYWxsIGF2YWlsYWJsZSBoYXJkd2FyZSBhY2NlbGVyYXRvcnMgaGF2ZSBiZWVuIHVzZWQgb3Igbm90LCBjYW4gbGVhZCB0byBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBpbiBwZXJmb3JtYW5jZSwgYW5kIHNvIHJlc3VsdHMgZnJvbSB0aGUgcHJvZ3JhbSBhcmUgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgdG8gbWVhbmluZ2Z1bGx5IGNvbXBhcmUgcGxhdGZvcm1zLgorCitUaGUgZmlndXJlcyBtYXkgYWxzbyBzbGlnaHRseSBjaGFuZ2UgZnJvbSBleGVjdXRpb24gdG8gZXhlY3V0aW9uIGR1ZSB0byB2YXJpYXRpb25zIGluIHRoZSB0aW1pbmcgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1iZW5jaG1hcmsvbWFpbi5jcHAgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWJlbmNobWFyay9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjM4YzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1iZW5jaG1hcmsvbWFpbi5jcHAKQEAgLTAsMCArMSw5NTEgQEAKKy8qCisgKiAgQmVuY2htYXJrIGRlbW9uc3RyYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoVEFSR0VUX0xJS0VfTUJFRCkKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKCkgeworICAgIHByaW50ZigidGhpcyB2ZXJzaW9uIG9mIHRoaXMgcHJvZ3JhbSBvbmx5IHdvcmtzIG9uIG1iZWQgT1NcbiIpOworICAgIHJldHVybiAwOworfQorCisjZWxzZQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX2V4aXQgICAgICAgZXhpdAorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICBzbnByaW50ZgorI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm1iZWR0bHMvbWQ0LmgiCisjaW5jbHVkZSAibWJlZHRscy9tZDUuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3JpcGVtZDE2MC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhMS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhMjU2LmgiCisjaW5jbHVkZSAibWJlZHRscy9zaGE1MTIuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2FyYzQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Rlcy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYWVzLmgiCisjaW5jbHVkZSAibWJlZHRscy9ibG93ZmlzaC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2FtZWxsaWEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2djbS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2NtLmgiCisjaW5jbHVkZSAibWJlZHRscy9oYXZlZ2UuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9obWFjX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGsuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2RobS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZWNkc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VjZGguaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisKKyNpbmNsdWRlICJtYmVkLWRyaXZlcnMvbWJlZC5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyNpbmNsdWRlICJtYmVkdGxzL21lbW9yeV9idWZmZXJfYWxsb2MuaCIKKyNlbmRpZgorCisjZGVmaW5lIFJTQV9QUklWQVRFX0tFWV8yMDQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVxyXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisiTUlJRW9nSUJBQUtDQVFFQTJkd1ZyK0lNR0V0QTIvTUNQNmZBNWViLzZCMThCcTZlN2d3OGJyTlBrbTNFNkx5UlxyXG4iICBcCisiNERuTUpWeFptdzNiUERLQkRvS3pmbnRrTUVTaS9ZdzVVb3BMdFZmakdmV2VRV1BDbHFmZkxaQnNaNjBCUkFzZ1xyXG4iICBcCisiL2crSUQ1dGd6eFN1eHpmdHlwSzU5dWV4T1ZDQW03aENLWkhHTzNEYkk3YkxZMjdqN1ZBZ0VQN2QveXVhejVGeFxyXG4iICBcCisiS2wvdnU3c2hxckJvejZBQkpWSkQzS0M4blVpTVJVQ1hSSU5teGJ5VVVqQTREbmljWnY2K3hyR0tyMzZyNk04aFxyXG4iICBcCisiVllMYTVtc0tjOFd6Ym5CV3pwVXNycGI0L3I3TUwrcXA5MmdkU2ZWSjgvYkxpVTdoMkM3ZmFEQTU5dWFxckZLOVxyXG4iICBcCisieG1EZHg3RmFXaEdRczNMV1c2dzFVTmdrUFMwRkRZVXNscHNuc1FJREFRQUJBb0lCQUM3SUpOd001VjMrSXVKWVxyXG4iICBcCisiVDM1TnpvMVB5bG9Vb3NKb2t2WTVLR3o1RWpnMlhCZENEdTBnWENjVnFxUXlHSWJYcllEcExoUVYrUkNvWEh1blxyXG4iICBcCisidGROMG9RZEM1U0I0N3MvSjFVbzJxQ1VIbzArc0JkNlBxVGtGS3NsM0t4V3NzazlUUWp2Q3dDNDEySWVmTXM2OVxyXG4iICBcCisiaFcrWnZ3Q2FubVFQNTZMbGVBcElyMm9XNEtMZlc4UnkvUWZabHVhK2RpemN0ZE43K0gxbVd3Z1pRVFk5VDI3SlxyXG4iICBcCisiNlJ0R1JBNU5Wa0tWUHpJSFZKZmRwS29PN3hHZzFnMDZhRWJQQi9WbUd2WmFhRldXbmFmN3VSdkZqTFplY0JMdVxyXG4iICBcCisiUVN4MkRBL0dEamlybERZajk5UEpiN0R0QjR4UnRLenN5dzBvK3hhcEM4dzZPdElsLzN4RnQ5bW9DdTJqR3JzeFxyXG4iICBcCisidnBqSGRmRUNnWUVBN2ZTQUNSc2VJczlnQUlWWDh3cTZnYXlUcEE0N0RIWVdBRDZJUWZJajM1U0orQWdzdmJGRlxyXG4iICBcCisiNEFtcndEaGNKVlBtRHkxTjRuTEJmeUdBTXQvMkNmaVlrZGtXNlFGWC9VTFJNTUJML0c3a1dWOGhZUURJQ0IyZ1xyXG4iICBcCisieGFNUk4xbFBDbUZxNkJrU1dqd0lZVG5ZREZCRFdWbTFHVlQ4VE10Sm9NOEVyZWo5cUMwUGVGVUNnWUVBNm1GM1xyXG4iICBcCisiYmlnTzN0OGY1c2lnK1hlcGFmdEVVYmtKTXpvNzJUVlJuSVIyeWNkUjJpaGVsUFErMjVnOWR3VjBaQTVYWGhCU1xyXG4iICBcCisiREtPQUJXak1NNzM5TXdteTl2MjZEbG11OVIwMXpIUWt0TXZ0RUF5Zno3bGsyTkYwYU11ajgyODVPSlVCZjlielxyXG4iICBcCisiQ3EzTWp0TUNEKzRDWjZpYUVxQ2RVS091eGZweDVjV1ZKVitxdmUwQ2dZQmhEMVlhWU1GT0dhQmpGZ0RsMWY1MVxyXG4iICBcCisiWGx0cWs1TnFaZEJia1NZcklBV1o4UkRGNXkrNHdGSnNMQVd1aGs2dnV5VWdFNjZ0SzNuWnpXUnBYQWtUMEI4TFxyXG4iICBcCisiZnExbHBYS3FqMUtjdkJOQ2lFa0VXMVZXSitkdnlBWUlGNWV5SisraG9GTG5FVEwzTTMySGl2eWhLU3dQaWhQZ1xyXG4iICBcCisiblZXOFRUOWZKSklZRGUxSlovZmpjUUtCZ0hKZnY3VXNyUjBMU3ZrRzNLOEFPdGJ4KzhQWmhPalB1UmJrMHYrTFxyXG4iICBcCisiRUtDa3VJZTUvWFc0dnRmUU1lWmI3aEZKZ2s3dnJlcG0rdmtveThWUUtEZjR1ckdXM1cxVlRIQm1vYk0wMWhpNFxyXG4iICBcCisiRHVZdkV1bCtNZjB3TVJ0V2pKb2xvNG0rQk81S2lXMmpwRmZxRm02Sm1malZxT0lBS09TS0M2YW04Vi9NREYwaFxyXG4iICBcCisia3lOOUFvR0FUOW9PaUVYTW9sYmtEWncvUUNhQmlSb0FHbEdsTllVa0orNThVNk9qSVpMSVN3NmFGditZMnVFMFxyXG4iICBcCisibUVJbUl0anVZWnRTWUtibFdpa3A2bGRQb0tsdDlid0VGZTNjNklaOGtKMyt4eUV5QUdydmpYakVZN1B6UDZkcFxyXG4iICBcCisiQWpianA5WDl1b2NFQnY5Vy9Lc0JMZFE3eWl6Y0wvdG9Id2RCTzR2UXFtcVR2QWM1SUl3PVxyXG4iICAgICAgICAgICAgICBcCisiLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS1cclxuIgorCisjZGVmaW5lIFJTQV9QUklWQVRFX0tFWV80MDk2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVxyXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisiTUlJSktnSUJBQUtDQWdFQW1rZEdqb0lzaEp1T3QyTk80N3FCM1ozeXl2bUxnMmozNTFpc0l0U051RlFVM3FyK1xyXG4iICBcCisialhISWVBTmYwM3l3L0swWnZvczhSUGQrQ3FMam94QVFMM1FESDRiWkFsODhiSW8yOWkrU0FOYk5TcktRbWMwa1xyXG4iICBcCisicEgreXp3M2FsRHpPMEdaYU9QWmpzYm82QXdCcm5vNW1zaTB2UnVDMmFZOHZHTFBzWldTeUxhaTd0bmVTMWovb1xyXG4iICBcCisidllXNlhJbzhDajYxajJZcHk5SGhWVVcvNFdjK3pBVDI1RC94N2pUcGtxSkxXV1QrWXppYk5iT1k0OE01ZUpjQlxyXG4iICBcCisiNi9zTXlVSWVJMy91L3dYeU1yb29OeUxpQ3BlZGt1SFJBMG03dTVjV1BUVUlTVHVuU1JsVkZpai9OSEpqdVU4ZVxyXG4iICBcCisid0EzQjI5eWZaRnNVcURFbnljK094bmlJdWVBaXhUb21Wc3p4QWFWbjh6RkViWWhGTVBxemlpRnA5OXUzamZlR1xyXG4iICBcCisiazFxOW1tVWkvdUNmVUM0ZTJJQzVycXExWmJLU2R1SDdVZy9WbjJiR1FhaHd3MHNaRlJIRFhGcm5CY290Y1crTVxyXG4iICBcCisiYm5DMjkwVkJEbllnem1kWXJJT3h1UGIyYVV3Sm80WmxiS2g1dUJCMVBpZ011eWhMS2liUTFhK1Y1WkpHZHBQNlxyXG4iICBcCisiU0U5UEdJZGdZV1NtaDJRRU11TEU2dit3VE8yTFE1Smdxc3ZGZmkzR0ladmtuMHM4alRTNzJKcTJ1TWtGa01lclxyXG4iICBcCisiVUJqUERZYVNQeTVrcG8xMDNLZXJXcytjTVBPSi8zRnRaekkrKzdNb1NVVGtXVnIxeVNRRnQ1aTFFSVovMFRoaVxyXG4iICBcCisianV0MmpOZThhNEFvQTNUdEM4UmtrLzNBSUliZzhNVk5UNEVuVCtLSFJPVE11NmdFVDFvSjNZZkJScFVDQXdFQVxyXG4iICBcCisiQVFLQ0FnRUFodU5TbVQ3UFZaSDhrZkxPQXVZS3JZMXZ2bSs0djBpRGwwNDhFcWZzMFFFU3ppeUxLM2dVWW5ud1xyXG4iICBcCisieXFQMnlyVStFUThEdnZqMHhxL3NmNkdIeFRXVmxYYjlQY211dHVlUmJtWGhMY0tnODNKMFkwU3RpUFh0aklMOFxyXG4iICBcCisiWFNkZFczQmg2ZlBpN24xNFF5K1c2S1p3dTlBdHliYW5SbHZlUGFieVJTUnBkT3BXVlE3dTMwdzVYWnNTZWQ2U1xyXG4iICBcCisiNkJJMEJCQzY4bTJxcWplMXNJbm9xZENkWEt0Y0IzMVR5dFVETkVITStVdUF5TThpR2VHUzJoQ05xWmx5Y0hUU1xyXG4iICBcCisialE5S0VzZE1IM1lMdTBsUWdScFd0eG1nK1ZMNlJPV3dtQXRLRjEyRXdiRFlaK3VvVmw2OU9rUW5DcHY4cHhLYVxyXG4iICBcCisiZWMvNG02Vit1RUExQU9wYUFNb3JIRzNmSDMxSUtXQy9mVFpzdG92Z08vZUcyWEN0bGJjQ29XQ1E3YW1GcTE2bFxyXG4iICBcCisiR2gxVUtlQkh4TVhwRGo0b0RtSVVHVXZnelNObkVlU04vdjc2bG9zV3ZXWVFEalhSL0xNRGEvQ05Zc0Q4Qm1KUlxyXG4iICBcCisiUFppZElqSVhkVlJsWU9oQTdsanR5U1F2cDZSQnVqQmZ3M3RzVk15WncyWHpYRndNOU84OWIxeFhDNitNNWpmOVxyXG4iICBcCisiRFhzL1U3RncrSjlxcS9ZcEJ5QUJjUEN3V2R0dHdkUUZSYk94d3hhU09LYXJJcVM4N1RXMUp1RmNOSjU5VXQ2R1xyXG4iICBcCisia012QWc2Z0MzNFUrMGt0a0cvQW1JMWhnakMrUDdFckhDWEJSMnhBUm9HemNPL0NNWkY1OVMrWjJIRmNocFRTUFxyXG4iICBcCisiNVQybzRtR3kzVmZIU0JpZFFRcmNaUnVrZzhaUDhNMU5GM2JYanBZNlFacGVMSGM0b0hFQ2dnRUJBTWpkZ3p6a1xyXG4iICBcCisieHA0bUlZRnhBRWlYWXQ3dHp1VVhKayswVXBFSmo1dWJvV0xpclVacVptTlVQeWg2V0RuemxSRUJIKytNczBMT1xyXG4iICBcCisiK0FXU2ZhR1BEb01iME5FMmozYzRGUldBaGU3Vm42bGo3bkxWcEYyUmR3Um84OHlHZXJaNHV3R01ZOE5VUUN0blxyXG4iICBcCisienVtM0o3ZUNKNURvamljZVJiNnVNeFRKOHhabVVDNFcyZjNKL2xyUjd3bFlqeVZubkhxSDVIY2VtWVVpcFdTd1xyXG4iICBcCisic00wL2NIcDNscnoyVldyYkFFdThIVnBrbHZEUXBkQWdsN2NqWHQvSkhZYXdZK3A0MjZJRi9QelFTUlJPbnpneVxyXG4iICBcCisiNFdJOEZWWU5WMnRndTBUT0ZVUmJra0V2dWovZHVES2Vvb1VJRjBHMFhIemhhNW9BWC9qMGlXaUhick9GNndIalxyXG4iICBcCisiMHhlYWpMOW1zS0JubUQ4Q2dnRUJBTVNnTFdtdjdHMzF4NHRuZEpDY1huWDRBeVZMN0tweWdBeC9ad0NjeVRSOFxyXG4iICBcCisiclkxck8wN2YvdGEybm9FcmEveG1FVy9CVzk4cUpGQ0hTVTJuU0xBUTVGcEZTV3l1UXFybmZmck1KbmZXeXZwclxyXG4iICBcCisiY2VRMHlRL01pQTYvSklPdkdBamFiY3Nwelppanh6R3ArUWszZVRUMHlPWExTVk9DSDlCOVhWSExvZGN5NFBRTVxyXG4iICBcCisiS1NDeHkwdlZIaFZObDJTZFBFd1RYUm14azk5US9ydzZJSFZwUXhCcTFPaFF0MDVuVEtUK3JaTUQvZ3JTSzIyZVxyXG4iICBcCisibXkyRjBEb2RBSndMbzA2M1p2M1JYUVpoRFlvZE1tamNwOUhxcnR2ajlQM0hEN0ozejZBQ2lWM1NDaThjWnVtTFxyXG4iICBcCisiYlNtbktDY2QwYmI0NSthT1dtMzFpZUVDSnVJY0o5ck9SRUVhL0tEWVRDc0NnZ0VCQU1HNVdrU1ZoTFdzb3UzN1xyXG4iICBcCisiZFVHTnVBNjNucTQyU0gzZ3RTMHE0blU2Z1Vra3crZEE0U1QxY01CeVZycjFvUlE0V0h1cDRJNFRuUU9LeUYzVFxyXG4iICBcCisiNGpReTFJK2lwblZlQW4rdFovN3p5endNcEVIZXFOcVJYQTlGeGJUQkVvTUFKNlFUcVhnT3ZxRGVTcUlBUW03clxyXG4iICBcCisiT1l1NXJyZ3RxeWgvUzhiR0N3dlVlNG9vQWZDU0t4MmVrWU1iQlZ3VzlNVDhZUzA5dHVTL2lISjNNdDJSVE1MZ1xyXG4iICBcCisicWVIdlZteHJjWHFab0ZtNDRCYTd0Ti9wUDBtaTlIS3l2aVpUNHRtVjNJWUVibjNKeUdHc2ZrVXVWVTl3RVVmZ1xyXG4iICBcCisiTUNyZ3JWeHJ3ZmtldEF6b29pSE1qa1ZMMkFTanpBSlRtRXZkQVBFVFlYeHpKRDlMTjBvdlkzdDhKZkFDMzdJTlxyXG4iICBcCisic1ZYUzgvTUNnZ0VCQUxCeU9TNTlZNEt0cTFyTEJReDhkandReXVuZVAwd1pvaFVWQXg3R2s3eFpJZmtsUUR5Z1xyXG4iICBcCisidi9SNFByY1ZlenN0Y1BwRG55a2RqU2NDc0dKUit1V2MwdjY2N0kvdHRQL2U2dXR6NWhWbW1CR3U5NjVkUEF6RVxyXG4iICBcCisiYzFnZ2FTa09xRmZSZy9OcjJRYmYrZkgwWVBuSFlTcUhlL3pTdDBPTUl2YWFlWExjZEtoRURTQ1VCUmhFMUhXQlxyXG4iICBcCisia3hSMDQ2V3pnQmVZek5Rd3ljejl4d3FzY3RKS0dwZVI5dXRlKzVBTkhQZDNYOVh0SUQwZnF6OGN0STVlWmFTd1xyXG4iICBcCisid0FwSVcwMVpRY0FGOEIrNFdra1Z1RlhucFdXMzN5Q09hUnlQVk9QSHBuY2xyNVdVMWZTKzNRODVRa1c5cmtlalxyXG4iICBcCisiOTd6bGtsMFFZOUFISnFyWG5vTUwxeXdBSzducytNVnlOSzhDZ2dFQWY2MnhjS1poT2IxZGplRjcyTXMraS9pL1xyXG4iICBcCisiV0lBcTRRNFlwc0VsZ3ZKVEhwTkgydjlnNG5nU1RLZTN3czNiR2M1MDJzV1JsaGNvVEZNT1cyckpOZS9pcUtrYlxyXG4iICBcCisiM2NkZVRrc2VEYnBxb3ptSld6OWRKV1NWdFhhczJiWmp6QkVhLy9nUTduSEdWZVFkcVpKUTlyeFBzb09Ba2ZwaVxyXG4iICBcCisicUNGcm1mVVZVcUM1M2UzWE10OCtXK2FTdktsK0paaUI5b3prTzlBNlEwdmZRTEt0alVNZFFFM1hhQ0ZRVDhESVxyXG4iICBcCisic21hTEJsQm1lUmFCcGMwMkVOZUM0QURsV29zbTFTd2d4cU1odWgyQWxiYS9HckhPb1BsVmw0aERzOUZiNWE2UlxyXG4iICBcCisicm1wWFN0MDdHQXhuRzZqOWpzc0E5NUU0cmMxek8wQ1ZLRzVidmpWVHh3aS9zVDAvVlZYN1ZzSk00dVRBUWc9PVxyXG4iICBcCisiLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS1cclxuIgorCisjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiAhZGVmaW5lZCBzbnByaW50ZgorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgorCisvKgorICogRm9yIGhlYXAgdXNhZ2UgZXN0aW1hdGVzLCB3ZSBuZWVkIGFuIGVzdGltYXRlIG9mIHRoZSBvdmVyaGVhZCBwZXIgYWxsb2NhdGVkCisgKiBibG9jay4gcHRtYWxsb2MyLzMgKHVzZWQgaW4gZ251IGxpYmMgZm9yIGluc3RhbmNlKSB1c2VzIDIgc2l6ZV90IHBlciBibG9jaywKKyAqIHNvIHVzZSB0aGF0IGFzIG91ciBiYXNlbGluZS4KKyAqLworI2RlZmluZSBNRU1fQkxPQ0tfT1ZFUkhFQUQgICggMiAqIHNpemVvZiggc2l6ZV90ICkgKQorCisvKgorICogU2l6ZSB0byB1c2UgZm9yIHRoZSBtYWxsb2MgYnVmZmVyIGlmIE1FTU9SWV9CVUZGRVJfQUxMT0NfQyBpcyBkZWZpbmVkLgorICovCisjZGVmaW5lIEhFQVBfU0laRSAgICAgICAoMXUgPDwgMTYpICAvLyA2NGsKKworI2RlZmluZSBCVUZTSVpFICAgICAgICAgMTAyNAorI2RlZmluZSBIRUFERVJfRk9STUFUICAgIiAgJS0yNHMgOiAgIgorI2RlZmluZSBUSVRMRV9MRU4gICAgICAgMjUKKworI2RlZmluZSBPUFRJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICJtZDQsIG1kNSwgcmlwZW1kMTYwLCBzaGExLCBzaGEyNTYsIHNoYTUxMixcclxuIiAgICAgICAgICAgICAgICAgICAgICBcCisgICAgImFyYzQsIGRlczMsIGRlcywgYWVzX2NiYywgYWVzX2djbSwgYWVzX2NjbSwgY2FtZWxsaWEsIGJsb3dmaXNoLFxyXG4iIFwKKyAgICAiaGF2ZWdlLCBjdHJfZHJiZywgaG1hY19kcmJnXHJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICJyc2EsIGRobSwgZWNkc2EsIGVjZGguXHJcbiIKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKQorI2RlZmluZSBQUklOVF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsICggY2hhciAqICl0bXAsIHNpemVvZiggdG1wICkgKTsgICAgICAgICBcCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiRkFJTEVEOiAlc1xyXG4iLCB0bXAgKTsKKyNlbHNlCisjZGVmaW5lIFBSSU5UX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiRkFJTEVEOiAtMHglMDR4XHJcbiIsIC1yZXQgKTsKKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soIHZvaWQgKQoreworICAgIHN0YXRpYyBpbnQgZHd0X3N0YXJ0ZWQgPSAwOworCisgICAgaWYoIGR3dF9zdGFydGVkID09IDAgKQorICAgIHsKKyAgICAgICAgQ29yZURlYnVnLT5ERU1DUiB8PSBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX01zazsKKyAgICAgICAgRFdULT5DVFJMIHw9IERXVF9DVFJMX0NZQ0NOVEVOQV9Nc2s7CisgICAgfQorCisgICAgcmV0dXJuKCBEV1QtPkNZQ0NOVCApOworfQorCitzdGF0aWMgdm9sYXRpbGUgaW50IGFsYXJtZWQ7CitzdGF0aWMgdm9pZCBhbGFybSgpIHsgYWxhcm1lZCA9IDE7IH0KKworI2RlZmluZSBUSU1FX0FORF9UU0MoIFRJVExFLCBDT0RFICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgaSwgaiwgdHNjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFRpbWVvdXQgdDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfcHJpbnRmKCBIRUFERVJfRk9STUFULCBUSVRMRSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmZsdXNoKCBzdGRvdXQgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yKCBpID0gMSwgYWxhcm1lZCA9IDAsIHQuYXR0YWNoKCBhbGFybSwgMS4wICk7ICFhbGFybWVkOyBpKysgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENPREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdHNjID0gbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yKCBqID0gMDsgaiA8IDEwMjQ7IGorKyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENPREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19wcmludGYoICIlOWx1IEtiL3MsICAlOWx1IGN5Y2xlcy9ieXRlXHJcbiIsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgaSAqIEJVRlNJWkUgLyAxMDI0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgKCBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soKSAtIHRzYyApIC8gKCBqICogQlVGU0laRSApICk7ICAgICAgICAgXAorfSB3aGlsZSggMCApCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykKKyNkZWZpbmUgUFJJTlRfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCAoIGNoYXIgKiApdG1wLCBzaXplb2YoIHRtcCApICk7ICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkZBSUxFRDogJXNcclxuIiwgdG1wICk7CisjZWxzZQorI2RlZmluZSBQUklOVF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkZBSUxFRDogLTB4JTA0eFxyXG4iLCAtcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpICYmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisKKyNkZWZpbmUgTUVNT1JZX01FQVNVUkVfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzaXplX3QgbWF4X3VzZWQsIG1heF9ibG9ja3MsIG1heF9ieXRlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzaXplX3QgcHJ2X3VzZWQsIHBydl9ibG9ja3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfY3VyX2dldCggJnBydl91c2VkLCAmcHJ2X2Jsb2NrcyApOyAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfcmVzZXQoICk7CisKKyNkZWZpbmUgTUVNT1JZX01FQVNVUkVfUFJJTlQoIHRpdGxlX2xlbiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfbWF4X2dldCggJm1heF91c2VkLCAmbWF4X2Jsb2NrcyApOyAgICAgICAgICAgICAgXAorICAgIGZvciggaSA9IDEyIC0gdGl0bGVfbGVuOyBpICE9IDA7IGktLSApIG1iZWR0bHNfcHJpbnRmKCAiICIgKTsgICAgICBcCisgICAgbWF4X3VzZWQgLT0gcHJ2X3VzZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWF4X2Jsb2NrcyAtPSBwcnZfYmxvY2tzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWF4X2J5dGVzID0gbWF4X3VzZWQgKyBNRU1fQkxPQ0tfT1ZFUkhFQUQgKiBtYXhfYmxvY2tzOyAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19wcmludGYoICIlNnUgaGVhcCBieXRlcyIsICh1bnNpZ25lZCkgbWF4X2J5dGVzICk7CisKKyNlbHNlCisjZGVmaW5lIE1FTU9SWV9NRUFTVVJFX0lOSVQKKyNkZWZpbmUgTUVNT1JZX01FQVNVUkVfUFJJTlQoIHRpdGxlX2xlbiApCisjZW5kaWYKKworI2RlZmluZSBUSU1FX1BVQkxJQyggVElUTEUsIFRZUEUsIENPREUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgbXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbnQgcmV0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVGltZXIgdDsgXAorICAgIE1FTU9SWV9NRUFTVVJFX0lOSVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfcHJpbnRmKCBIRUFERVJfRk9STUFULCBUSVRMRSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmZsdXNoKCBzdGRvdXQgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgXAorICAgIHQuc3RhcnQoKTsgXAorICAgIENPREU7IFwKKyAgICB0LnN0b3AoKTsgXAorICAgIG1zID0gdC5yZWFkX21zKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiggcmV0ICE9IDAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUFJJTlRfRVJST1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIlNmx1IG1zLyIgVFlQRSwgbXMgKTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTUVNT1JZX01FQVNVUkVfUFJJTlQoIHNpemVvZiggVFlQRSApICsgMSApOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcclxuIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlKCAwICkKKworc3RhdGljIGludCBteXJhbmQoIHZvaWQgKnJuZ19zdGF0ZSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuICkKK3sKKyAgICBzaXplX3QgdXNlX2xlbjsKKyAgICBpbnQgcm5kOworCisgICAgaWYoIHJuZ19zdGF0ZSAhPSBOVUxMICkKKyAgICAgICAgcm5nX3N0YXRlICA9IE5VTEw7CisKKyAgICB3aGlsZSggbGVuID4gMCApCisgICAgeworICAgICAgICB1c2VfbGVuID0gbGVuOworICAgICAgICBpZiggdXNlX2xlbiA+IHNpemVvZihpbnQpICkKKyAgICAgICAgICAgIHVzZV9sZW4gPSBzaXplb2YoaW50KTsKKworICAgICAgICBybmQgPSByYW5kKCk7CisgICAgICAgIG1lbWNweSggb3V0cHV0LCAmcm5kLCB1c2VfbGVuICk7CisgICAgICAgIG91dHB1dCArPSB1c2VfbGVuOworICAgICAgICBsZW4gLT0gdXNlX2xlbjsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENsZWFyIHNvbWUgbWVtb3J5IHRoYXQgd2FzIHVzZWQgdG8gcHJlcGFyZSB0aGUgY29udGV4dAorICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQordm9pZCBlY3BfY2xlYXJfcHJlY29tcHV0ZWQoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAgKQoreworICAgIGlmKCBncnAtPlQgIT0gTlVMTCApCisgICAgeworICAgICAgICBzaXplX3QgaTsKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IGdycC0+VF9zaXplOyBpKysgKQorICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmdycC0+VFtpXSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGdycC0+VCApOworICAgIH0KKyAgICBncnAtPlQgPSBOVUxMOworICAgIGdycC0+VF9zaXplID0gMDsKK30KKyNlbHNlCisjZGVmaW5lIGVjcF9jbGVhcl9wcmVjb21wdXRlZCggZyApCisjZW5kaWYKKwordW5zaWduZWQgY2hhciBidWZbQlVGU0laRV07CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyIG1kNCwgbWQ1LCByaXBlbWQxNjAsIHNoYTEsIHNoYTI1Niwgc2hhNTEyLAorICAgICAgICAgYXJjNCwgZGVzMywgZGVzLCBhZXNfY2JjLCBhZXNfZ2NtLCBhZXNfY2NtLCBjYW1lbGxpYSwgYmxvd2Zpc2gsCisgICAgICAgICBoYXZlZ2UsIGN0cl9kcmJnLCBobWFjX2RyYmcsCisgICAgICAgICByc2EsIGRobSwgZWNkc2EsIGVjZGg7Cit9IHRvZG9fbGlzdDsKKworaW50IGJlbmNobWFyayggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciB0bXBbMjAwXTsKKyAgICBjaGFyIHRpdGxlW1RJVExFX0xFTl07CisgICAgdG9kb19saXN0IHRvZG87CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICB1bnNpZ25lZCBjaGFyIG1hbGxvY19idWZbSEVBUF9TSVpFXSA9IHsgMCB9OworI2VuZGlmCisKKyAgICBpZiggYXJnYyA8PSAxICkKKyAgICB7CisgICAgICAgIG1lbXNldCggJnRvZG8sIDEsIHNpemVvZiggdG9kbyApICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1lbXNldCggJnRvZG8sIDAsIHNpemVvZiggdG9kbyApICk7CisKKyAgICAgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJtZDQiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5tZDQgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAibWQ1IiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8ubWQ1ID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgInJpcGVtZDE2MCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLnJpcGVtZDE2MCA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJzaGExIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uc2hhMSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJzaGEyNTYiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5zaGEyNTYgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAic2hhNTEyIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uc2hhNTEyID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImFyYzQiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5hcmM0ID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImRlczMiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5kZXMzID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImRlcyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmRlcyA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJhZXNfY2JjIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uYWVzX2NiYyA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJhZXNfZ2NtIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uYWVzX2djbSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJhZXNfY2NtIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uYWVzX2NjbSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJjYW1lbGxpYSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmNhbWVsbGlhID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImJsb3dmaXNoIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uYmxvd2Zpc2ggPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiaGF2ZWdlIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uaGF2ZWdlID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImN0cl9kcmJnIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uY3RyX2RyYmcgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiaG1hY19kcmJnIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uaG1hY19kcmJnID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgInJzYSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLnJzYSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJkaG0iICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5kaG0gPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiZWNkc2EiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5lY2RzYSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJlY2RoIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uZWNkaCA9IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJVbnJlY29nbml6ZWQgb3B0aW9uOiAlc1xyXG4iLCBhcmd2W2ldICk7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJBdmFpbGFibGUgb3B0aW9uczogIiBPUFRJT05TICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxyXG5cclxuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggbWFsbG9jX2J1Ziwgc2l6ZW9mKCBtYWxsb2NfYnVmICkgKTsKKyNlbmRpZgorICAgIG1lbXNldCggYnVmLCAweEFBLCBzaXplb2YoIGJ1ZiApICk7CisgICAgbWVtc2V0KCB0bXAsIDB4QkIsIHNpemVvZiggdG1wICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDRfQykKKyAgICBpZiggdG9kby5tZDQgKQorICAgICAgICBUSU1FX0FORF9UU0MoICJNRDQiLCBtYmVkdGxzX21kNCggYnVmLCBCVUZTSVpFLCB0bXAgKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgaWYoIHRvZG8ubWQ1ICkKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiTUQ1IiwgbWJlZHRsc19tZDUoIGJ1ZiwgQlVGU0laRSwgdG1wICkgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JJUEVNRDE2MF9DKQorICAgIGlmKCB0b2RvLnJpcGVtZDE2MCApCisgICAgICAgIFRJTUVfQU5EX1RTQyggIlJJUEVNRDE2MCIsIG1iZWR0bHNfcmlwZW1kMTYwKCBidWYsIEJVRlNJWkUsIHRtcCApICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgaWYoIHRvZG8uc2hhMSApCisgICAgICAgIFRJTUVfQU5EX1RTQyggIlNIQS0xIiwgbWJlZHRsc19zaGExKCBidWYsIEJVRlNJWkUsIHRtcCApICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICBpZiggdG9kby5zaGEyNTYgKQorICAgICAgICBUSU1FX0FORF9UU0MoICJTSEEtMjU2IiwgbWJlZHRsc19zaGEyNTYoIGJ1ZiwgQlVGU0laRSwgdG1wLCAwICkgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIGlmKCB0b2RvLnNoYTUxMiApCisgICAgICAgIFRJTUVfQU5EX1RTQyggIlNIQS01MTIiLCBtYmVkdGxzX3NoYTUxMiggYnVmLCBCVUZTSVpFLCB0bXAsIDAgKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorICAgIGlmKCB0b2RvLmFyYzQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19hcmM0X2NvbnRleHQgYXJjNDsKKyAgICAgICAgbWJlZHRsc19hcmM0X2luaXQoICZhcmM0ICk7CisgICAgICAgIG1iZWR0bHNfYXJjNF9zZXR1cCggJmFyYzQsIHRtcCwgMzIgKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiQVJDNCIsIG1iZWR0bHNfYXJjNF9jcnlwdCggJmFyYzQsIEJVRlNJWkUsIGJ1ZiwgYnVmICkgKTsKKyAgICAgICAgbWJlZHRsc19hcmM0X2ZyZWUoICZhcmM0ICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpICYmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgaWYoIHRvZG8uZGVzMyApCisgICAgeworICAgICAgICBtYmVkdGxzX2RlczNfY29udGV4dCBkZXMzOworICAgICAgICBtYmVkdGxzX2RlczNfaW5pdCggJmRlczMgKTsKKyAgICAgICAgbWJlZHRsc19kZXMzX3NldDNrZXlfZW5jKCAmZGVzMywgdG1wICk7CisgICAgICAgIFRJTUVfQU5EX1RTQyggIjNERVMiLAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZGVzM19jcnlwdF9jYmMoICZkZXMzLCBNQkVEVExTX0RFU19FTkNSWVBULCBCVUZTSVpFLCB0bXAsIGJ1ZiwgYnVmICkgKTsKKyAgICAgICAgbWJlZHRsc19kZXMzX2ZyZWUoICZkZXMzICk7CisgICAgfQorCisgICAgaWYoIHRvZG8uZGVzICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZGVzX2NvbnRleHQgZGVzOworICAgICAgICBtYmVkdGxzX2Rlc19pbml0KCAmZGVzICk7CisgICAgICAgIG1iZWR0bHNfZGVzX3NldGtleV9lbmMoICZkZXMsIHRtcCApOworICAgICAgICBUSU1FX0FORF9UU0MoICJERVMiLAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZGVzX2NyeXB0X2NiYyggJmRlcywgTUJFRFRMU19ERVNfRU5DUllQVCwgQlVGU0laRSwgdG1wLCBidWYsIGJ1ZiApICk7CisgICAgICAgIG1iZWR0bHNfZGVzX2ZyZWUoICZkZXMgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGlmKCB0b2RvLmFlc19jYmMgKQorICAgIHsKKyAgICAgICAgaW50IGtleXNpemU7CisgICAgICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgYWVzOworICAgICAgICBtYmVkdGxzX2Flc19pbml0KCAmYWVzICk7CisgICAgICAgIGZvcigga2V5c2l6ZSA9IDEyODsga2V5c2l6ZSA8PSAyNTY7IGtleXNpemUgKz0gNjQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiQUVTLUNCQy0lZCIsIGtleXNpemUgKTsKKworICAgICAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgICAgIG1lbXNldCggdG1wLCAwLCBzaXplb2YoIHRtcCApICk7CisgICAgICAgICAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmYWVzLCB0bXAsIGtleXNpemUgKTsKKworICAgICAgICAgICAgVElNRV9BTkRfVFNDKCB0aXRsZSwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9jYmMoICZhZXMsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIEJVRlNJWkUsIHRtcCwgYnVmLCBidWYgKSApOworICAgICAgICB9CisgICAgICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZhZXMgKTsKKyAgICB9CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgaWYoIHRvZG8uYWVzX2djbSApCisgICAgeworICAgICAgICBpbnQga2V5c2l6ZTsKKyAgICAgICAgbWJlZHRsc19nY21fY29udGV4dCBnY207CisKKyAgICAgICAgbWJlZHRsc19nY21faW5pdCggJmdjbSApOworICAgICAgICBmb3IoIGtleXNpemUgPSAxMjg7IGtleXNpemUgPD0gMjU2OyBrZXlzaXplICs9IDY0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkFFUy1HQ00tJWQiLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgICAgICBtZW1zZXQoIHRtcCwgMCwgc2l6ZW9mKCB0bXAgKSApOworICAgICAgICAgICAgbWJlZHRsc19nY21fc2V0a2V5KCAmZ2NtLCBNQkVEVExTX0NJUEhFUl9JRF9BRVMsIHRtcCwga2V5c2l6ZSApOworCisgICAgICAgICAgICBUSU1FX0FORF9UU0MoIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2djbV9jcnlwdF9hbmRfdGFnKCAmZ2NtLCBNQkVEVExTX0dDTV9FTkNSWVBULCBCVUZTSVpFLCB0bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAxMiwgTlVMTCwgMCwgYnVmLCBidWYsIDE2LCB0bXAgKSApOworCisgICAgICAgICAgICBtYmVkdGxzX2djbV9mcmVlKCAmZ2NtICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisgICAgaWYoIHRvZG8uYWVzX2NjbSApCisgICAgeworICAgICAgICBpbnQga2V5c2l6ZTsKKyAgICAgICAgbWJlZHRsc19jY21fY29udGV4dCBjY207CisKKyAgICAgICAgbWJlZHRsc19jY21faW5pdCggJmNjbSApOworICAgICAgICBmb3IoIGtleXNpemUgPSAxMjg7IGtleXNpemUgPD0gMjU2OyBrZXlzaXplICs9IDY0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkFFUy1DQ00tJWQiLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgICAgICBtZW1zZXQoIHRtcCwgMCwgc2l6ZW9mKCB0bXAgKSApOworICAgICAgICAgICAgbWJlZHRsc19jY21fc2V0a2V5KCAmY2NtLCBNQkVEVExTX0NJUEhFUl9JRF9BRVMsIHRtcCwga2V5c2l6ZSApOworCisgICAgICAgICAgICBUSU1FX0FORF9UU0MoIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWcoICZjY20sIEJVRlNJWkUsIHRtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEyLCBOVUxMLCAwLCBidWYsIGJ1ZiwgdG1wLCAxNiApICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfY2NtX2ZyZWUoICZjY20gKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykgJiYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBpZiggdG9kby5jYW1lbGxpYSApCisgICAgeworICAgICAgICBpbnQga2V5c2l6ZTsKKyAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0IGNhbWVsbGlhOworICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX2luaXQoICZjYW1lbGxpYSApOworICAgICAgICBmb3IoIGtleXNpemUgPSAxMjg7IGtleXNpemUgPD0gMjU2OyBrZXlzaXplICs9IDY0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkNBTUVMTElBLUNCQy0lZCIsIGtleXNpemUgKTsKKworICAgICAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgICAgIG1lbXNldCggdG1wLCAwLCBzaXplb2YoIHRtcCApICk7CisgICAgICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoICZjYW1lbGxpYSwgdG1wLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIFRJTUVfQU5EX1RTQyggdGl0bGUsCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2JjKCAmY2FtZWxsaWEsIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRlNJWkUsIHRtcCwgYnVmLCBidWYgKSApOworICAgICAgICB9CisgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfZnJlZSggJmNhbWVsbGlhICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQkxPV0ZJU0hfQykgJiYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBpZiggdG9kby5ibG93ZmlzaCApCisgICAgeworICAgICAgICBpbnQga2V5c2l6ZTsKKyAgICAgICAgbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0IGJsb3dmaXNoOworICAgICAgICBtYmVkdGxzX2Jsb3dmaXNoX2luaXQoICZibG93ZmlzaCApOworCisgICAgICAgIGZvcigga2V5c2l6ZSA9IDEyODsga2V5c2l6ZSA8PSAyNTY7IGtleXNpemUgKz0gNjQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiQkxPV0ZJU0gtQ0JDLSVkIiwga2V5c2l6ZSApOworCisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICAgICAgbWVtc2V0KCB0bXAsIDAsIHNpemVvZiggdG1wICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfc2V0a2V5KCAmYmxvd2Zpc2gsIHRtcCwga2V5c2l6ZSApOworCisgICAgICAgICAgICBUSU1FX0FORF9UU0MoIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NiYyggJmJsb3dmaXNoLCBNQkVEVExTX0JMT1dGSVNIX0VOQ1JZUFQsIEJVRlNJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICB0bXAsIGJ1ZiwgYnVmICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfZnJlZSggJmJsb3dmaXNoICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRUdFX0MpCisgICAgaWYoIHRvZG8uaGF2ZWdlICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfaGF2ZWdlX3N0YXRlIGhzOworICAgICAgICBtYmVkdGxzX2hhdmVnZV9pbml0KCAmaHMgKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiSEFWRUdFIiwgbWJlZHRsc19oYXZlZ2VfcmFuZG9tKCAmaHMsIGJ1ZiwgQlVGU0laRSApICk7CisgICAgICAgIG1iZWR0bHNfaGF2ZWdlX2ZyZWUoICZocyApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisgICAgaWYoIHRvZG8uY3RyX2RyYmcgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworCisgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBteXJhbmQsIE5VTEwsIE5VTEwsIDAgKSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiQ1RSX0RSQkcgKE5PUFIpIiwKKyAgICAgICAgICAgICAgICBpZiggbWJlZHRsc19jdHJfZHJiZ19yYW5kb20oICZjdHJfZHJiZywgYnVmLCBCVUZTSVpFICkgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBteXJhbmQsIE5VTEwsIE5VTEwsIDAgKSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKTsKKyAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmY3RyX2RyYmcsIE1CRURUTFNfQ1RSX0RSQkdfUFJfT04gKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiQ1RSX0RSQkcgKFBSKSIsCisgICAgICAgICAgICAgICAgaWYoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3RyX2RyYmcsIGJ1ZiwgQlVGU0laRSApICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKSApOworICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hNQUNfRFJCR19DKQorICAgIGlmKCB0b2RvLmhtYWNfZHJiZyApCisgICAgeworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0IGhtYWNfZHJiZzsKKyAgICAgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisKKyAgICAgICAgbWJlZHRsc19obWFjX2RyYmdfaW5pdCggJmhtYWNfZHJiZyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICAgICAgaWYoICggbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMSApICkgPT0gTlVMTCApCisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZobWFjX2RyYmcsIG1kX2luZm8sIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBUSU1FX0FORF9UU0MoICJITUFDX0RSQkcgU0hBLTEgKE5PUFIpIiwKKyAgICAgICAgICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmaG1hY19kcmJnLCBidWYsIEJVRlNJWkUgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSkgKTsKKyAgICAgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmhtYWNfZHJiZyApOworCisgICAgICAgIGlmKCBtYmVkdGxzX2htYWNfZHJiZ19zZWVkKCAmaG1hY19kcmJnLCBtZF9pbmZvLCBteXJhbmQsIE5VTEwsIE5VTEwsIDAgKSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKTsKKyAgICAgICAgbWJlZHRsc19obWFjX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSggJmhtYWNfZHJiZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfSE1BQ19EUkJHX1BSX09OICk7CisgICAgICAgIFRJTUVfQU5EX1RTQyggIkhNQUNfRFJCRyBTSEEtMSAoUFIpIiwKKyAgICAgICAgICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmaG1hY19kcmJnLCBidWYsIEJVRlNJWkUgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSkgKTsKKyAgICAgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmhtYWNfZHJiZyApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgICAgIGlmKCAoIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTI1NiApICkgPT0gTlVMTCApCisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZobWFjX2RyYmcsIG1kX2luZm8sIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBUSU1FX0FORF9UU0MoICJITUFDX0RSQkcgU0hBLTI1NiAoTk9QUikiLAorICAgICAgICAgICAgICAgIGlmKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZobWFjX2RyYmcsIGJ1ZiwgQlVGU0laRSApICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKSApOworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmaG1hY19kcmJnICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZobWFjX2RyYmcsIG1kX2luZm8sIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmaG1hY19kcmJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ITUFDX0RSQkdfUFJfT04gKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiSE1BQ19EUkJHIFNIQS0yNTYgKFBSKSIsCisgICAgICAgICAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggJmhtYWNfZHJiZywgYnVmLCBCVUZTSVpFICkgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpICk7CisgICAgICAgIG1iZWR0bHNfaG1hY19kcmJnX2ZyZWUoICZobWFjX2RyYmcgKTsKKyNlbmRpZgorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykKKyAgICBpZiggdG9kby5yc2EgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOworICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2E7CisgICAgICAgIGNvbnN0IGNoYXIgKnJzYV9rZXlzW10gPSB7IFJTQV9QUklWQVRFX0tFWV8yMDQ4LCBSU0FfUFJJVkFURV9LRVlfNDA5NiB9OworICAgICAgICBzaXplX3QgaTsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgc2l6ZW9mKCByc2Ffa2V5cyApIC8gc2l6ZW9mKCByc2Ffa2V5c1swXSApOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworICAgICAgICAgICAgbWJlZHRsc19wa19wYXJzZV9rZXkoICZwaywgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcnNhX2tleXNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCByc2Ffa2V5c1tpXSApICsgMSwgTlVMTCwgMCApOworICAgICAgICAgICAgcnNhID0gbWJlZHRsc19wa19yc2EoIHBrICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJSU0EtJWQiLCBtYmVkdGxzX3BrX2dldF9iaXRsZW4oICZwayApICk7CisKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgIiBwdWJsaWMiLAorICAgICAgICAgICAgICAgICAgICBidWZbMF0gPSAwOworICAgICAgICAgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3JzYV9wdWJsaWMoIHJzYSwgYnVmLCBidWYgKSApOworCisgICAgICAgICAgICBUSU1FX1BVQkxJQyggdGl0bGUsICJwcml2YXRlIiwKKyAgICAgICAgICAgICAgICAgICAgYnVmWzBdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19yc2FfcHJpdmF0ZSggcnNhLCBteXJhbmQsIE5VTEwsIGJ1ZiwgYnVmICkgKTsKKworICAgICAgICAgICAgbWJlZHRsc19wa19mcmVlKCAmcGsgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisgICAgaWYoIHRvZG8uZGhtICkKKyAgICB7CisgICAgICAgIGludCBkaG1fc2l6ZXNbXSA9IHsgMjA0OCwgMzA3MiB9OworICAgICAgICBjb25zdCBjaGFyICpkaG1fUFtdID0geworICAgICAgICAgICAgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzIwNDhfUCwKKyAgICAgICAgICAgIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8zMDcyX1AsCisgICAgICAgIH07CisgICAgICAgIGNvbnN0IGNoYXIgKmRobV9HW10gPSB7CisgICAgICAgICAgICBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMjA0OF9HLAorICAgICAgICAgICAgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzMwNzJfRywKKyAgICAgICAgfTsKKworICAgICAgICBtYmVkdGxzX2RobV9jb250ZXh0IGRobTsKKyAgICAgICAgc2l6ZV90IG9sZW47CisgICAgICAgIGZvciggaSA9IDA7IChzaXplX3QpIGkgPCBzaXplb2YoIGRobV9zaXplcyApIC8gc2l6ZW9mKCBkaG1fc2l6ZXNbMF0gKTsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19kaG1faW5pdCggJmRobSApOworCisgICAgICAgICAgICBpZiggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZkaG0uUCwgMTYsIGRobV9QW2ldICkgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmZGhtLkcsIDE2LCBkaG1fR1tpXSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkaG0ubGVuID0gbWJlZHRsc19tcGlfc2l6ZSggJmRobS5QICk7CisgICAgICAgICAgICBtYmVkdGxzX2RobV9tYWtlX3B1YmxpYyggJmRobSwgKGludCkgZGhtLmxlbiwgYnVmLCBkaG0ubGVuLCBteXJhbmQsIE5VTEwgKTsKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX21waV9jb3B5KCAmZGhtLkdZLCAmZGhtLkdYICkgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJESEUtJWQiLCBkaG1fc2l6ZXNbaV0gKTsKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgImhhbmRzaGFrZSIsCisgICAgICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2RobV9tYWtlX3B1YmxpYyggJmRobSwgKGludCkgZGhtLmxlbiwgYnVmLCBkaG0ubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0KCAmZGhtLCBidWYsIHNpemVvZiggYnVmICksICZvbGVuLCBteXJhbmQsIE5VTEwgKSApOworCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiREgtJWQiLCBkaG1fc2l6ZXNbaV0gKTsKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgImhhbmRzaGFrZSIsCisgICAgICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggJmRobSwgYnVmLCBzaXplb2YoIGJ1ZiApLCAmb2xlbiwgbXlyYW5kLCBOVUxMICkgKTsKKworICAgICAgICAgICAgbWJlZHRsc19kaG1fZnJlZSggJmRobSApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIGlmKCB0b2RvLmVjZHNhICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZWNkc2FfY29udGV4dCBlY2RzYTsKKyAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqY3VydmVfaW5mbzsKKyAgICAgICAgc2l6ZV90IHNpZ19sZW47CisKKyAgICAgICAgbWVtc2V0KCBidWYsIDB4MkEsIHNpemVvZiggYnVmICkgKTsKKworICAgICAgICBmb3IoIGN1cnZlX2luZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCk7CisgICAgICAgICAgICAgY3VydmVfaW5mby0+Z3JwX2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7CisgICAgICAgICAgICAgY3VydmVfaW5mbysrICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19lY2RzYV9pbml0KCAmZWNkc2EgKTsKKworICAgICAgICAgICAgaWYoIG1iZWR0bHNfZWNkc2FfZ2Vua2V5KCAmZWNkc2EsIGN1cnZlX2luZm8tPmdycF9pZCwgbXlyYW5kLCBOVUxMICkgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisgICAgICAgICAgICBlY3BfY2xlYXJfcHJlY29tcHV0ZWQoICZlY2RzYS5ncnAgKTsKKworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkVDRFNBLSVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZV9pbmZvLT5uYW1lICk7CisgICAgICAgICAgICBUSU1FX1BVQkxJQyggdGl0bGUsICJzaWduIiwKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19lY2RzYV93cml0ZV9zaWduYXR1cmUoICZlY2RzYSwgTUJFRFRMU19NRF9TSEEyNTYsIGJ1ZiwgY3VydmVfaW5mby0+Yml0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsICZzaWdfbGVuLCBteXJhbmQsIE5VTEwgKSApOworCisgICAgICAgICAgICBtYmVkdGxzX2VjZHNhX2ZyZWUoICZlY2RzYSApOworICAgICAgICB9CisKKyAgICAgICAgZm9yKCBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpOworICAgICAgICAgICAgIGN1cnZlX2luZm8tPmdycF9pZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOworICAgICAgICAgICAgIGN1cnZlX2luZm8rKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkc2FfaW5pdCggJmVjZHNhICk7CisKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX2VjZHNhX2dlbmtleSggJmVjZHNhLCBjdXJ2ZV9pbmZvLT5ncnBfaWQsIG15cmFuZCwgTlVMTCApICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZSggJmVjZHNhLCBNQkVEVExTX01EX1NIQTI1NiwgYnVmLCBjdXJ2ZV9pbmZvLT5iaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLCAmc2lnX2xlbiwgbXlyYW5kLCBOVUxMICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlY3BfY2xlYXJfcHJlY29tcHV0ZWQoICZlY2RzYS5ncnAgKTsKKworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkVDRFNBLSVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZV9pbmZvLT5uYW1lICk7CisgICAgICAgICAgICBUSU1FX1BVQkxJQyggdGl0bGUsICJ2ZXJpZnkiLAorICAgICAgICAgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2VjZHNhX3JlYWRfc2lnbmF0dXJlKCAmZWNkc2EsIGJ1ZiwgY3VydmVfaW5mby0+Yml0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsIHNpZ19sZW4gKSApOworCisgICAgICAgICAgICBtYmVkdGxzX2VjZHNhX2ZyZWUoICZlY2RzYSApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKQorICAgIGlmKCB0b2RvLmVjZGggKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19lY2RoX2NvbnRleHQgZWNkaDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCkKKyAgICAgICAgbWJlZHRsc19tcGkgejsKKyNlbmRpZgorICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9pbmZvOworICAgICAgICBzaXplX3Qgb2xlbjsKKworICAgICAgICBmb3IoIGN1cnZlX2luZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCk7CisgICAgICAgICAgICAgY3VydmVfaW5mby0+Z3JwX2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7CisgICAgICAgICAgICAgY3VydmVfaW5mbysrICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19lY2RoX2luaXQoICZlY2RoICk7CisKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZWNkaC5ncnAsIGN1cnZlX2luZm8tPmdycF9pZCApICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMoICZlY2RoLCAmb2xlbiwgYnVmLCBzaXplb2YoIGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICkgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNwX2NvcHkoICZlY2RoLlFwLCAmZWNkaC5RICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlY3BfY2xlYXJfcHJlY29tcHV0ZWQoICZlY2RoLmdycCApOworCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiRUNESEUtJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlX2luZm8tPm5hbWUgKTsKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgImhhbmRzaGFrZSIsCisgICAgICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMoICZlY2RoLCAmb2xlbiwgYnVmLCBzaXplb2YoIGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldCggJmVjZGgsICZvbGVuLCBidWYsIHNpemVvZiggYnVmICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSApOworICAgICAgICAgICAgbWJlZHRsc19lY2RoX2ZyZWUoICZlY2RoICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBDdXJ2ZTI1NTE5IG5lZWRzIHRvIGJlIGhhbmRsZWQgc2VwYXJhdGVseSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEKQorICAgICAgICBtYmVkdGxzX2VjZGhfaW5pdCggJmVjZGggKTsKKyAgICAgICAgbWJlZHRsc19tcGlfaW5pdCggJnogKTsKKworICAgICAgICBpZiggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmVjZGguZ3JwLCBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5ICkgIT0gMCB8fAorICAgICAgICAgICAgbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoICZlY2RoLmdycCwgJmVjZGguZCwgJmVjZGguUXAsIG15cmFuZCwgTlVMTCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICAgICAgfQorCisgICAgICAgIFRJTUVfUFVCTElDKCAgIkVDREhFLUN1cnZlMjU1MTkiLCAiaGFuZHNoYWtlIiwKKyAgICAgICAgICAgICAgICByZXQgfD0gbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoICZlY2RoLmdycCwgJmVjZGguZCwgJmVjZGguUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKTsKKyAgICAgICAgICAgICAgICByZXQgfD0gbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkKCAmZWNkaC5ncnAsICZ6LCAmZWNkaC5RcCwgJmVjZGguZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICkgKTsKKworICAgICAgICBtYmVkdGxzX2VjZGhfZnJlZSggJmVjZGggKTsKKyAgICAgICAgbWJlZHRsc19tcGlfZnJlZSggJnogKTsKKyNlbmRpZgorCisgICAgICAgIGZvciggY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvLT5ncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjZGhfaW5pdCggJmVjZGggKTsKKworICAgICAgICAgICAgaWYoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZlY2RoLmdycCwgY3VydmVfaW5mby0+Z3JwX2lkICkgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9tYWtlX3B1YmxpYyggJmVjZGgsICZvbGVuLCBidWYsIHNpemVvZiggYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfY29weSggJmVjZGguUXAsICZlY2RoLlEgKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWJlZHRsc19lY2RoX21ha2VfcHVibGljKCAmZWNkaCwgJm9sZW4sIGJ1Ziwgc2l6ZW9mKCBidWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWNwX2NsZWFyX3ByZWNvbXB1dGVkKCAmZWNkaC5ncnAgKTsKKworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkVDREgtJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlX2luZm8tPm5hbWUgKTsKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgImhhbmRzaGFrZSIsCisgICAgICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2VjZGhfY2FsY19zZWNyZXQoICZlY2RoLCAmb2xlbiwgYnVmLCBzaXplb2YoIGJ1ZiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9mcmVlKCAmZWNkaCApOworICAgICAgICB9CisKKyAgICAgICAgLyogQ3VydmUyNTUxOSBuZWVkcyB0byBiZSBoYW5kbGVkIHNlcGFyYXRlbHkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCkKKyAgICAgICAgbWJlZHRsc19lY2RoX2luaXQoICZlY2RoICk7CisgICAgICAgIG1iZWR0bHNfbXBpX2luaXQoICZ6ICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZlY2RoLmdycCwgTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOSApICE9IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCAmZWNkaC5ncnAsICZlY2RoLmQsICZlY2RoLlFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSAhPSAwIHx8CisgICAgICAgICAgICBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyggJmVjZGguZ3JwLCAmZWNkaC5kLCAmZWNkaC5RLCBteXJhbmQsIE5VTEwgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisgICAgICAgIH0KKworICAgICAgICBUSU1FX1BVQkxJQyggICJFQ0RILUN1cnZlMjU1MTkiLCAiaGFuZHNoYWtlIiwKKyAgICAgICAgICAgICAgICByZXQgfD0gbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkKCAmZWNkaC5ncnAsICZ6LCAmZWNkaC5RcCwgJmVjZGguZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICkgKTsKKworICAgICAgICBtYmVkdGxzX2VjZGhfZnJlZSggJmVjZGggKTsKKyAgICAgICAgbWJlZHRsc19tcGlfZnJlZSggJnogKTsKKyNlbmRpZgorICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19wcmludGYoICJcclxuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXHJcbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggMCApOworfQorCisjaW5jbHVkZSAibWJlZC1kcml2ZXJzL3Rlc3RfZW52LmgiCisjaW5jbHVkZSAibWluYXIvbWluYXIuaCIKKworc3RhdGljIHZvaWQgcnVuKCkgeworICAgIE1CRURfSE9TVFRFU1RfVElNRU9VVCgxNTApOworICAgIE1CRURfSE9TVFRFU1RfU0VMRUNUKGRlZmF1bHQpOworICAgIE1CRURfSE9TVFRFU1RfREVTQ1JJUFRJT04obWJlZCBUTFMgYmVuY2htYXJrIHByb2dyYW0pOworICAgIE1CRURfSE9TVFRFU1RfU1RBUlQoIk1CRURUTFNfQkVOQ0hNQVJLIik7CisgICAgTUJFRF9IT1NUVEVTVF9SRVNVTFQoYmVuY2htYXJrKDAsIE5VTEwpID09IDApOworfQorCit2b2lkIGFwcF9zdGFydChpbnQsIGNoYXIqW10pIHsKKyAgICAvKiBVc2UgMTE1MjAwIGJwcyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBleGFtcGxlcyAqLworICAgIGdldF9zdGRpb19zZXJpYWwoKS5iYXVkKDExNTIwMCk7CisgICAgbWluYXI6OlNjaGVkdWxlcjo6cG9zdENhbGxiYWNrKG1iZWQ6OnV0aWw6OkZ1bmN0aW9uUG9pbnRlcjA8dm9pZD4ocnVuKS5iaW5kKCkpOworfQorCisjZW5kaWYgLyogVEFSR0VUX0xJS0VfTUJFRCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1oYXNoaW5nL1JFQURNRS5tZCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtaGFzaGluZy9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUzYzNhNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtaGFzaGluZy9SRUFETUUubWQKQEAgLTAsMCArMSw2NyBAQAorIyBTSEEtMjU2IEhhc2ggRXhhbXBsZQorCitUaGlzIGFwcGxpY2F0aW9uIHBlcmZvcm1zIGhhc2hpbmcgb2YgYSBidWZmZXIgd2l0aCBTSEEtMjU2IHVzaW5nIHZhcmlvdXMgQVBJcy4gSXQgc2VydmVzIGFzIGEgdHV0b3JpYWwgZm9yIHRoZSBiYXNpYyBoYXNoaW5nIEFQSXMgb2YgbWJlZCBUTFMuCisKKyMjIFByZS1yZXF1aXNpdGVzCisKK1RvIGJ1aWxkIGFuZCBydW4gdGhpcyBleGFtcGxlIHlvdSBtdXN0IGhhdmU6CisKKyogQSBjb21wdXRlciB3aXRoIHRoZSBmb2xsb3dpbmcgc29mdHdhcmUgaW5zdGFsbGVkOgorICAqIFtDTWFrZV0oaHR0cDovL3d3dy5jbWFrZS5vcmcvZG93bmxvYWQvKS4KKyAgKiBbeW90dGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL3lvdHRhKS4gUGxlYXNlIG5vdGUgdGhhdCAqKnlvdHRhIGhhcyBpdHMgb3duIHNldCBvZiBkZXBlbmRlbmNpZXMqKiwgbGlzdGVkIGluIHRoZSBbaW5zdGFsbGF0aW9uIGluc3RydWN0aW9uc10oaHR0cDovL2FybW1iZWQuZ2l0aHViLmlvL3lvdHRhLyNpbnN0YWxsaW5nLW9uLXdpbmRvd3MpLgorICAqIFtQeXRob25dKGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzLykuCisgICogW1RoZSBBUk0gR0NDIHRvb2xjaGFpbl0oaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2djYy1hcm0tZW1iZWRkZWQpLgorICAqIEEgc2VyaWFsIHRlcm1pbmFsIGVtdWxhdG9yIChMaWtlIHNjcmVlbiwgcHlTZXJpYWwgYW5kIGN1KS4KKyogQW4gW0ZSRE0tSzY0Rl0oaHR0cDovL2RldmVsb3Blci5tYmVkLm9yZy9wbGF0Zm9ybXMvRlJETS1LNjRGLykgZGV2ZWxvcG1lbnQgYm9hcmQsIG9yIGFub3RoZXIgYm9hcmQgc3VwcG9ydGVkIGJ5IG1iZWQgT1MgKGluIHdoaWNoIGNhc2UgeW91J2xsIGhhdmUgdG8gc3Vic3RpdHV0ZSBmcmRtLWs2NGYtZ2NjIHdpdGggdGhlIGFwcHJvcHJpYXRlIHRhcmdldCBpbiB0aGUgaW5zdHJ1Y3Rpb25zIGJlbG93KS4KKyogQSBtaWNyby1VU0IgY2FibGUuCisqIElmIHlvdXIgT1MgaXMgV2luZG93cywgcGxlYXNlIGZvbGxvdyB0aGUgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBbZm9yIHRoZSBzZXJpYWwgcG9ydCBkcml2ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1iZWQub3JnL2hhbmRib29rL1dpbmRvd3Mtc2VyaWFsLWNvbmZpZ3VyYXRpb24pLgorCisjIyBHZXR0aW5nIHN0YXJ0ZWQKKworMS4gQ29ubmVjdCB0aGUgRlJETS1LNjRGIHRvIHRoZSBjb21wdXRlciB3aXRoIHRoZSBtaWNyby1VU0IgY2FibGUsIGJlaW5nIGNhcmVmdWwgdG8gdXNlIHRoZSAiT3BlblNEQSIgY29ubmVjdG9yIG9uIHRoZSB0YXJnZXQgYm9hcmQuCisKKzIuIE5hdmlnYXRlIHRvIHRoZSBtYmVkdGxzIGRpcmVjdG9yeSBzdXBwbGllZCB3aXRoIHlvdXIgcmVsZWFzZSBhbmQgb3BlbiBhIHRlcm1pbmFsLgorCiszLiBTZXQgdGhlIHlvdHRhIHRhcmdldDoKKworICAgIGBgYAorICAgIHlvdHRhIHRhcmdldCBmcmRtLWs2NGYtZ2NjCisgICAgYGBgCisKKzQuIEJ1aWxkIG1iZWR0bHMgYW5kIHRoZSBleGFtcGxlcy4gVGhpcyBtYXkgdGFrZSBhIGxvbmcgdGltZSBpZiB0aGlzIGlzIHlvdXIgZmlyc3QgY29tcGlsYXRpb246CisKKyAgICBgYGAKKyAgICAkIHlvdHRhIGJ1aWxkCisgICAgYGBgCisKKzUuIENvcHkgYGJ1aWxkL2ZyZG0tazY0Zi1nY2MvdGVzdC9tYmVkdGxzLXRlc3QtZXhhbXBsZS1oYXNoaW5nLmJpbmAgdG8geW91ciBtYmVkIGJvYXJkIGFuZCB3YWl0IHVudGlsIHRoZSBMRUQgbmV4dCB0byB0aGUgVVNCIHBvcnQgc3RvcHMgYmxpbmtpbmcuCisKKzYuIFN0YXJ0IHRoZSBzZXJpYWwgdGVybWluYWwgZW11bGF0b3IgYW5kIGNvbm5lY3QgdG8gdGhlIHZpcnR1YWwgc2VyaWFsIHBvcnQgcHJlc2VudGVkIGJ5IEZSRE0tSzY0Ri4gCisKKwlVc2UgdGhlIGZvbGxvd2luZyBzZXR0aW5nczoKKworCSogMTE1MjAwIGJhdWQgKG5vdCA5NjAwKS4KKwkqIDhOMS4KKwkqIE5vIGZsb3cgY29udHJvbC4gCisKKzcuIFByZXNzIHRoZSBSZXNldCBidXR0b24gb24gdGhlIGJvYXJkLgorCis4LiBUaGUgb3V0cHV0IGluIHRoZSB0ZXJtaW5hbCB3aW5kb3cgc2hvdWxkIGxvb2sgbGlrZToKKworICAgIGBgYAorICAgIHt7dGltZW91dDsxMH19CisgICAge3tob3N0X3Rlc3RfbmFtZTtkZWZhdWx0fX0KKyAgICB7e2Rlc2NyaXB0aW9uO21iZWQgVExTIGV4YW1wbGUgb24gaGFzaGluZ319CisgICAge3t0ZXN0X2lkO01CRURUTFNfRVhfSEFTSElOR319CisgICAge3tzdGFydH19CisKKworICAgIE1ldGhvZCAxOiAzMTVmNWJkYjc2ZDA3OGM0M2I4YWMwMDY0ZTRhMDE2NDYxMmIxZmNlNzdjODY5MzQ1YmZjOTRjNzU4OTRlZGQzCisgICAgTWV0aG9kIDI6IDMxNWY1YmRiNzZkMDc4YzQzYjhhYzAwNjRlNGEwMTY0NjEyYjFmY2U3N2M4NjkzNDViZmM5NGM3NTg5NGVkZDMKKyAgICBNZXRob2QgMzogMzE1ZjViZGI3NmQwNzhjNDNiOGFjMDA2NGU0YTAxNjQ2MTJiMWZjZTc3Yzg2OTM0NWJmYzk0Yzc1ODk0ZWRkMworICAgIE1ldGhvZCA0OiAzMTVmNWJkYjc2ZDA3OGM0M2I4YWMwMDY0ZTRhMDE2NDYxMmIxZmNlNzdjODY5MzQ1YmZjOTRjNzU4OTRlZGQzCisKKyAgICBET05FCisgICAge3tzdWNjZXNzfX0KKyAgICB7e2VuZH19CisgICAgYGBgCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWhhc2hpbmcvbWFpbi5jcHAgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWhhc2hpbmcvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc0MTUyYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtaGFzaGluZy9tYWluLmNwcApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqICBIZWxsbyB3b3JsZCBleGFtcGxlIG9mIHVzaW5nIHRoZSBoYXNoaW5nIGZ1bmN0aW9ucyBvZiBtYmVkIFRMUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlsbHVzdHJhdGVzIHZhcmlvdXMgd2F5cyBvZiBoYXNoaW5nIGEgYnVmZmVyLgorICogWW91IG5vcm1hbGx5IG5lZWQgb25seSBvbmUgb2YgdGhlc2UgdHdvIGluY2x1ZGVzLgorICovCisjaW5jbHVkZSAibWJlZHRscy9zaGEyNTYuaCIgLyogU0hBLTI1NiBvbmx5ICovCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIiAgICAgLyogZ2VuZXJpYyBpbnRlcmZhY2UgKi8KKworI2lmIGRlZmluZWQoVEFSR0VUX0xJS0VfTUJFRCkKKyNpbmNsdWRlICJtYmVkLWRyaXZlcnMvbWJlZC5oIgorI2VuZGlmCisjaW5jbHVkZSA8Y3N0ZGlvPgorCitzdGF0aWMgdm9pZCBwcmludF9oZXgoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnVmW10sIHNpemVfdCBsZW4pCit7CisgICAgcHJpbnRmKCIlczogIiwgdGl0bGUpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAgICAgcHJpbnRmKCIlMDJ4IiwgYnVmW2ldKTsKKworICAgIHByaW50ZigiXHJcbiIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciBoZWxsb19zdHJbXSA9ICJIZWxsbywgd29ybGQhIjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWxsb19idWZmZXIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBoZWxsb19zdHI7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGhlbGxvX2xlbiA9IHNpemVvZiBoZWxsb19zdHIgLSAxOworCitpbnQgZXhhbXBsZSh2b2lkKQoreworICAgIHByaW50ZiggIlxyXG5cclxuIiApOworCisgICAgLyoKKyAgICAgKiBNZXRob2QgMTogdXNlIGFsbC1pbi1vbmUgZnVuY3Rpb24gb2YgYSBzcGVjaWZpYyBTSEEteHh4IG1vZHVsZQorICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0MVszMl07IC8qIFNIQS0yNTYgb3V0cHV0cyAzMiBieXRlcyAqLworCisgICAgLyogMCBoZXJlIG1lYW5zIHVzZSB0aGUgZnVsbCBTSEEtMjU2LCBub3QgdGhlIFNIQS0yMjQgdmFyaWFudCAqLworICAgIG1iZWR0bHNfc2hhMjU2KGhlbGxvX2J1ZmZlciwgaGVsbG9fbGVuLCBvdXRwdXQxLCAwKTsKKworICAgIHByaW50X2hleCgiTWV0aG9kIDEiLCBvdXRwdXQxLCBzaXplb2Ygb3V0cHV0MSk7CisKKworICAgIC8qCisgICAgICogTWV0aG9kIDI6IHVzZSB0aGUgc3RyZWFtaW5nIGludGVyZmFjZSBvZiBhIHNwZWNpZmljIFNIQS14eHggbW9kdWxlCisgICAgICogVGhpcyBpcyB1c2VmdWwgaWYgd2UgZ2V0IG91ciBpbnB1dCBwaWVjZXdpc2UuCisgICAgICovCisgICAgdW5zaWduZWQgY2hhciBvdXRwdXQyWzMyXTsKKyAgICBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0IGN0eDI7CisKKyAgICBtYmVkdGxzX3NoYTI1Nl9pbml0KCZjdHgyKTsKKyAgICBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoJmN0eDIsIDApOyAvKiBTSEEtMjU2LCBub3QgMjI0ICovCisKKyAgICAvKiBTaW11bGF0aW5nIG11bHRpcGxlIGZyYWdtZW50cyAqLworICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSgmY3R4MiwgaGVsbG9fYnVmZmVyLCAxKTsKKyAgICBtYmVkdGxzX3NoYTI1Nl91cGRhdGUoJmN0eDIsIGhlbGxvX2J1ZmZlciArIDEsIDEpOworICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSgmY3R4MiwgaGVsbG9fYnVmZmVyICsgMiwgaGVsbG9fbGVuIC0gMik7CisKKyAgICBtYmVkdGxzX3NoYTI1Nl9maW5pc2goJmN0eDIsIG91dHB1dDIpOworICAgIHByaW50X2hleCgiTWV0aG9kIDIiLCBvdXRwdXQyLCBzaXplb2Ygb3V0cHV0Mik7CisKKyAgICAvKiBPciB5b3UgY291bGQgcmUtdXNlIHRoZSBjb250ZXh0IGJ5IGRvaW5nIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cygpIGFnYWluICovCisgICAgbWJlZHRsc19zaGEyNTZfZnJlZSgmY3R4Mik7CisKKyAgICAvKgorICAgICAqIE1ldGhvZCAzOiB1c2UgYWxsLWluLW9uZSBmdW5jdGlvbiBvZiB0aGUgZ2VuZXJpY2UgaW50ZXJmYWNlCisgICAgICovCisgICAgdW5zaWduZWQgY2hhciBvdXRwdXQzW01CRURUTFNfTURfTUFYX1NJWkVdOyAvKiBFbm91Z2ggZm9yIGFueSBoYXNoICovCisKKyAgICAvKiBDYW4gZWFzaWx5IHBpY2sgYW55IGhhc2ggeW91IHdhbnQsIGJ5IGlkZW50aWZpZXIgKi8KKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzMgPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKE1CRURUTFNfTURfU0hBMjU2KTsKKworICAgIGlmIChtZF9pbmZvMyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJTSEEyNTYgbm90IGF2YWlsYWJsZVxyXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaW50IHJldDMgPSBtYmVkdGxzX21kKG1kX2luZm8zLCBoZWxsb19idWZmZXIsIGhlbGxvX2xlbiwgb3V0cHV0Myk7CisKKyAgICBpZiAocmV0MyAhPSAwKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJtZCgpIHJldHVybmVkIC0weCUwNFhcclxuIiwgLXJldDMpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBwcmludF9oZXgoIk1ldGhvZCAzIiwgb3V0cHV0MywgbWJlZHRsc19tZF9nZXRfc2l6ZShtZF9pbmZvMykpOworCisKKyAgICAvKgorICAgICAqIE1ldGhvZCA0OiBzdHJlYW1pbmcgJiBnZW5lcmljIGludGVyZmFjZQorICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0NFtNQkVEVExTX01EX01BWF9TSVpFXTsgLyogRW5vdWdoIGZvciBhbnkgaGFzaCAqLworCisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm80ID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZShNQkVEVExTX01EX1NIQTI1Nik7CisKKyAgICBpZiAobWRfaW5mbzQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHByaW50ZigiU0hBMjU2IG5vdCBhdmFpbGFibGVcclxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IGN0eDQ7CisKKyAgICBtYmVkdGxzX21kX2luaXQoJmN0eDQpOworCisgICAgaW50IHJldDQgPSBtYmVkdGxzX21kX2luaXRfY3R4KCZjdHg0LCBtZF9pbmZvNCk7CisgICAgaWYgKHJldDQgIT0gMCkKKyAgICB7CisgICAgICAgIHByaW50ZigibWRfaW5pdF9jdHgoKSByZXR1cm5lZCAtMHglMDRYXHJcbiIsIC1yZXQ0KTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgbWJlZHRsc19tZF9zdGFydHMoJmN0eDQpOworCisgICAgLyogU2ltdWxhdGluZyBtdWx0aXBsZSBmcmFnbWVudHMgKi8KKyAgICBtYmVkdGxzX21kX3VwZGF0ZSgmY3R4NCwgaGVsbG9fYnVmZmVyLCAxKTsKKyAgICBtYmVkdGxzX21kX3VwZGF0ZSgmY3R4NCwgaGVsbG9fYnVmZmVyICsgMSwgMSk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoJmN0eDQsIGhlbGxvX2J1ZmZlciArIDIsIGhlbGxvX2xlbiAtIDIpOworCisgICAgbWJlZHRsc19tZF9maW5pc2goJmN0eDQsIG91dHB1dDQpOworICAgIHByaW50X2hleCgiTWV0aG9kIDQiLCBvdXRwdXQ0LCBtYmVkdGxzX21kX2dldF9zaXplKG1kX2luZm80KSk7CisKKyAgICAvKiBPciB5b3UgY291bGQgcmUtdXNlIHRoZSBjb250ZXh0IGJ5IGRvaW5nIG1iZWR0bHNfbWRfc3RhcnRzKCkgYWdhaW4gKi8KKyAgICBtYmVkdGxzX21kX2ZyZWUoJmN0eDQpOworCisKKyAgICBwcmludGYoIlxyXG5ET05FXHJcbiIpOworCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKFRBUkdFVF9MSUtFX01CRUQpCisKKyNpbmNsdWRlICJtYmVkLWRyaXZlcnMvdGVzdF9lbnYuaCIKKyNpbmNsdWRlICJtaW5hci9taW5hci5oIgorCitzdGF0aWMgdm9pZCBydW4oKSB7CisgICAgTUJFRF9IT1NUVEVTVF9USU1FT1VUKDEwKTsKKyAgICBNQkVEX0hPU1RURVNUX1NFTEVDVChkZWZhdWx0KTsKKyAgICBNQkVEX0hPU1RURVNUX0RFU0NSSVBUSU9OKG1iZWQgVExTIGV4YW1wbGUgb24gaGFzaGluZyk7CisgICAgTUJFRF9IT1NUVEVTVF9TVEFSVCgiTUJFRFRMU19FWF9IQVNISU5HIik7CisgICAgTUJFRF9IT1NUVEVTVF9SRVNVTFQoZXhhbXBsZSgpID09IDApOworfQorCit2b2lkIGFwcF9zdGFydChpbnQsIGNoYXIqW10pIHsKKyAgICAvKiBVc2UgMTE1MjAwIGJwcyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBleGFtcGxlcyAqLworICAgIGdldF9zdGRpb19zZXJpYWwoKS5iYXVkKDExNTIwMCk7CisgICAgbWluYXI6OlNjaGVkdWxlcjo6cG9zdENhbGxiYWNrKG1iZWQ6OnV0aWw6OkZ1bmN0aW9uUG9pbnRlcjA8dm9pZD4ocnVuKS5iaW5kKCkpOworfQorCisjZWxzZQorCitpbnQgbWFpbigpIHsKKyAgICByZXR1cm4gZXhhbXBsZSgpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtc2VsZnRlc3QvUkVBRE1FLm1kIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1zZWxmdGVzdC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjMjJhNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtc2VsZnRlc3QvUkVBRE1FLm1kCkBAIC0wLDAgKzEsODIgQEAKKyMgbWJlZCBUTFMgU2VsZnRlc3QgRXhhbXBsZQorCitUaGlzIGFwcGxpY2F0aW9uIHJ1bnMgdGhlIHZhcmlvdXMgc2VsZnRlc3QgZnVuY3Rpb25zIG9mIGluZGl2aWR1YWwgbWJlZCBUTFMgY29tcG9uZW50cy4gSXQgc2VydmVzIGFzIGEgYmFzaWMgc2FuaXR5IGNoZWNrIHRvIHZlcmlmeSBvcGVyYXRpb24gb2YgbWJlZCBUTFMgb24geW91ciBwbGF0Zm9ybS4gSW4gdGhlIGZ1dHVyZSwgYSB3aWRlciBwb3J0aW9uIG9mIHRoZSBtYmVkIFRMUyB0ZXN0IHN1aXRlIHdpbGwgYmVjb21lIHBhcnQgb2YgdGhpcyBleGFtcGxlIGFwcGxpY2F0aW9uLgorCisjIyBQcmUtcmVxdWlzaXRlcworCitUbyBidWlsZCBhbmQgcnVuIHRoaXMgZXhhbXBsZSB5b3UgbXVzdCBoYXZlOgorCisqIEEgY29tcHV0ZXIgd2l0aCB0aGUgZm9sbG93aW5nIHNvZnR3YXJlIGluc3RhbGxlZDoKKyAgKiBbQ01ha2VdKGh0dHA6Ly93d3cuY21ha2Uub3JnL2Rvd25sb2FkLykuCisgICogW3lvdHRhXShodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC95b3R0YSkuIFBsZWFzZSBub3RlIHRoYXQgKip5b3R0YSBoYXMgaXRzIG93biBzZXQgb2YgZGVwZW5kZW5jaWVzKiosIGxpc3RlZCBpbiB0aGUgW2luc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnNdKGh0dHA6Ly9hcm1tYmVkLmdpdGh1Yi5pby95b3R0YS8jaW5zdGFsbGluZy1vbi13aW5kb3dzKS4KKyAgKiBbUHl0aG9uXShodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2Fkcy8pLgorICAqIFtUaGUgQVJNIEdDQyB0b29sY2hhaW5dKGh0dHBzOi8vbGF1bmNocGFkLm5ldC9nY2MtYXJtLWVtYmVkZGVkKS4KKyAgKiBBIHNlcmlhbCB0ZXJtaW5hbCBlbXVsYXRvciAoTGlrZSBzY3JlZW4sIHB5U2VyaWFsIGFuZCBjdSkuCisqIEFuIFtGUkRNLUs2NEZdKGh0dHA6Ly9kZXZlbG9wZXIubWJlZC5vcmcvcGxhdGZvcm1zL0ZSRE0tSzY0Ri8pIGRldmVsb3BtZW50IGJvYXJkLCBvciBhbm90aGVyIGJvYXJkIHN1cHBvcnRlZCBieSBtYmVkIE9TIChpbiB3aGljaCBjYXNlIHlvdSdsbCBoYXZlIHRvIHN1YnN0aXR1dGUgZnJkbS1rNjRmLWdjYyB3aXRoIHRoZSBhcHByb3ByaWF0ZSB0YXJnZXQgaW4gdGhlIGluc3RydWN0aW9ucyBiZWxvdykuCisqIEEgbWljcm8tVVNCIGNhYmxlLgorKiBJZiB5b3VyIE9TIGlzIFdpbmRvd3MsIHBsZWFzZSBmb2xsb3cgdGhlIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgW2ZvciB0aGUgc2VyaWFsIHBvcnQgZHJpdmVyXShodHRwczovL2RldmVsb3Blci5tYmVkLm9yZy9oYW5kYm9vay9XaW5kb3dzLXNlcmlhbC1jb25maWd1cmF0aW9uKS4KKworIyMgR2V0dGluZyBzdGFydGVkCisKKzEuIENvbm5lY3QgdGhlIEZSRE0tSzY0RiB0byB0aGUgY29tcHV0ZXIgd2l0aCB0aGUgbWljcm8tVVNCIGNhYmxlLCBiZWluZyBjYXJlZnVsIHRvIHVzZSB0aGUgIk9wZW5TREEiIGNvbm5lY3RvciBvbiB0aGUgdGFyZ2V0IGJvYXJkLgorCisyLiBOYXZpZ2F0ZSB0byB0aGUgbWJlZHRscyBkaXJlY3Rvcnkgc3VwcGxpZWQgd2l0aCB5b3VyIHJlbGVhc2UgYW5kIG9wZW4gYSB0ZXJtaW5hbC4KKworMy4gU2V0IHRoZSB5b3R0YSB0YXJnZXQ6CisKKyAgICBgYGAKKyAgICB5b3R0YSB0YXJnZXQgZnJkbS1rNjRmLWdjYworICAgIGBgYAorCis0LiBCdWlsZCBtYmVkdGxzIGFuZCB0aGUgZXhhbXBsZXMuIFRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUgaWYgdGhpcyBpcyB5b3VyIGZpcnN0IGNvbXBpbGF0aW9uOgorCisgICAgYGBgCisgICAgJCB5b3R0YSBidWlsZAorICAgIGBgYAorCis1LiBDb3B5IGBidWlsZC9mcmRtLWs2NGYtZ2NjL3Rlc3QvbWJlZHRscy10ZXN0LWV4YW1wbGUtc2VsZnRlc3QuYmluYCB0byB5b3VyIG1iZWQgYm9hcmQgYW5kIHdhaXQgdW50aWwgdGhlIExFRCBuZXh0IHRvIHRoZSBVU0IgcG9ydCBzdG9wcyBibGlua2luZy4KKworNi4gU3RhcnQgdGhlIHNlcmlhbCB0ZXJtaW5hbCBlbXVsYXRvciBhbmQgY29ubmVjdCB0byB0aGUgdmlydHVhbCBzZXJpYWwgcG9ydCBwcmVzZW50ZWQgYnkgRlJETS1LNjRGLiAKKworCVVzZSB0aGUgZm9sbG93aW5nIHNldHRpbmdzOgorCisJKiAxMTUyMDAgYmF1ZCAobm90IDk2MDApLgorCSogOE4xLgorCSogTm8gZmxvdyBjb250cm9sLiAKKworNy4gUHJlc3MgdGhlIFJlc2V0IGJ1dHRvbiBvbiB0aGUgYm9hcmQuCisKKzguIFRoZSBvdXRwdXQgaW4gdGhlIHRlcm1pbmFsIHdpbmRvdyBzaG91bGQgbG9vayBsaWtlOgorCisgICAgYGBgCisgICAge3t0aW1lb3V0OzQwfX0KKyAgICB7e2hvc3RfdGVzdF9uYW1lO2RlZmF1bHR9fQorICAgIHt7ZGVzY3JpcHRpb247bWJlZCBUTFMgc2VsZnRlc3QgcHJvZ3JhbX19CisgICAge3t0ZXN0X2lkO01CRURUTFNfU0VMRlRFU1R9fQorICAgIHt7c3RhcnR9fQorCisgICAgICBTSEEtMjI0IHRlc3QgIzE6IHBhc3NlZAorICAgICAgU0hBLTIyNCB0ZXN0ICMyOiBwYXNzZWQKKyAgICAgIFNIQS0yMjQgdGVzdCAjMzogcGFzc2VkCisgICAgICBTSEEtMjU2IHRlc3QgIzE6IHBhc3NlZAorICAgICAgU0hBLTI1NiB0ZXN0ICMyOiBwYXNzZWQKKyAgICAgIFNIQS0yNTYgdGVzdCAjMzogcGFzc2VkCisKKyAgICAgICAgWyAuLi4gc2V2ZXJhbCBsaW5lcyBvbWl0dGVkIC4uLiBdCisKKyAgICAgIENUUl9EUkJHIChQUiA9IFRSVUUpIDogcGFzc2VkCisgICAgICBDVFJfRFJCRyAoUFIgPSBGQUxTRSk6IHBhc3NlZAorCisgICAgICBITUFDX0RSQkcgKFBSID0gVHJ1ZSkgOiBwYXNzZWQKKyAgICAgIEhNQUNfRFJCRyAoUFIgPSBGYWxzZSkgOiBwYXNzZWQKKworICAgICAgRUNQIHRlc3QgIzEgKGNvbnN0YW50IG9wX2NvdW50LCBiYXNlIHBvaW50IEcpOiBwYXNzZWQKKyAgICAgIEVDUCB0ZXN0ICMyIChjb25zdGFudCBvcF9jb3VudCwgb3RoZXIgcG9pbnQpOiBwYXNzZWQKKworICAgICAgRU5UUk9QWSB0ZXN0OiBwYXNzZWQKKworICAgICAgWyBBbGwgdGVzdHMgcGFzc2VkIF0KKworICAgIHt7c3VjY2Vzc319CisgICAge3tlbmR9fQorICAgIGBgYApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1zZWxmdGVzdC9tYWluLmNwcCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtc2VsZnRlc3QvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmNWIwNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtc2VsZnRlc3QvbWFpbi5jcHAKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiAgU2VsZi10ZXN0IGRlbW9uc3RyYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoUE9MQVJTU0xfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvaG1hY19kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZGhtLmgiCisjaW5jbHVkZSAibWJlZHRscy9nY20uaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NjbS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQyLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZDQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kNS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcmlwZW1kMTYwLmgiCisjaW5jbHVkZSAibWJlZHRscy9zaGExLmgiCisjaW5jbHVkZSAibWJlZHRscy9zaGEyNTYuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTUxMi5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYXJjNC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZGVzLmgiCisjaW5jbHVkZSAibWJlZHRscy9hZXMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NhbWVsbGlhLmgiCisjaW5jbHVkZSAibWJlZHRscy9iYXNlNjQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2JpZ251bS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisjaW5jbHVkZSAibWJlZHRscy94dGVhLmgiCisjaW5jbHVkZSAibWJlZHRscy9wa2NzNS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZWNwLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisjaW5jbHVkZSAibWJlZHRscy9tZW1vcnlfYnVmZmVyX2FsbG9jLmgiCisjZW5kaWYKKworaW50IHNlbGZ0ZXN0KCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0ID0gMCwgdjsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMDAwMDBdOworI2VuZGlmCisKKyAgICBpZiggYXJnYyA9PSAyICYmIHN0cmNtcCggYXJndlsxXSwgIi1xdWlldCIgKSA9PSAwICkKKyAgICAgICAgdiA9IDA7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdiA9IDE7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQoIGJ1Ziwgc2l6ZW9mKGJ1ZikgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01EMl9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWQyX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDRfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kNF9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZDVfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JJUEVNRDE2MF9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcmlwZW1kMTYwX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zaGExX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NoYTI1Nl9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zaGE1MTJfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FyYzRfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZGVzX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2Flc19zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpICYmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2djbV9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpICYmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NjbV9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQkFTRTY0X0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19iYXNlNjRfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3JzYV9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9VU0VfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1hURUFfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3h0ZWFfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jYW1lbGxpYV9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ITUFDX0RSQkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2htYWNfZHJiZ19zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3Bfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZGhtX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lbnRyb3B5X3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTNV9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtjczVfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RJTUlOR19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfdGltaW5nX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2Vsc2UKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBQT0xBUlNTTF9TRUxGX1RFU1Qgbm90IGRlZmluZWQuXG4iICk7CisjZW5kaWYKKworICAgIGlmKCB2ICE9IDAgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKSAmJiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc3RhdHVzKCk7CisjZW5kaWYKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisgICAgaWYoIHYgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyBBbGwgdGVzdHMgcGFzc2VkIF1cblxuIiApOworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNpZiBkZWZpbmVkKFRBUkdFVF9MSUtFX01CRUQpCisKKyNpbmNsdWRlICJtYmVkLWRyaXZlcnMvdGVzdF9lbnYuaCIKKyNpbmNsdWRlICJtaW5hci9taW5hci5oIgorCitzdGF0aWMgdm9pZCBydW4oKSB7CisgICAgTUJFRF9IT1NUVEVTVF9USU1FT1VUKDQwKTsKKyAgICBNQkVEX0hPU1RURVNUX1NFTEVDVChkZWZhdWx0KTsKKyAgICBNQkVEX0hPU1RURVNUX0RFU0NSSVBUSU9OKG1iZWQgVExTIHNlbGZ0ZXN0IHByb2dyYW0pOworICAgIE1CRURfSE9TVFRFU1RfU1RBUlQoIk1CRURUTFNfU0VMRlRFU1QiKTsKKyAgICBNQkVEX0hPU1RURVNUX1JFU1VMVChzZWxmdGVzdCgwLCBOVUxMKSA9PSAwKTsKK30KKwordm9pZCBhcHBfc3RhcnQoaW50LCBjaGFyKltdKSB7CisgICAgLyogVXNlIDExNTIwMCBicHMgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgZXhhbXBsZXMgKi8KKyAgICBnZXRfc3RkaW9fc2VyaWFsKCkuYmF1ZCgxMTUyMDApOworICAgIG1pbmFyOjpTY2hlZHVsZXI6OnBvc3RDYWxsYmFjayhtYmVkOjp1dGlsOjpGdW5jdGlvblBvaW50ZXIwPHZvaWQ+KHJ1bikuYmluZCgpKTsKK30KKworI2Vsc2UKKworaW50IG1haW4oKSB7CisgICAgcmV0dXJuIHNlbGZ0ZXN0KDAsIE5VTEwpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL21vZHVsZS5qc29uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvbW9kdWxlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4YjgyMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL21vZHVsZS5qc29uCkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAibmFtZSI6ICJtYmVkdGxzIiwKKyAgICAidmVyc2lvbiI6ICIyLjMuMSIsCisgICAgImRlc2NyaXB0aW9uIjogIlRoZSBtYmVkIFRMUyBjcnlwdG8vU1NML1RMUyBsaWJyYXJ5IiwKKyAgICAibGljZW5zZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9zcGR4Lm9yZy9saWNlbnNlcy9BcGFjaGUtMi4wIiwKKyAgICAgICAgICAgICJ0eXBlIjogIkFwYWNoZS0yLjAiCisgICAgICAgIH0KKyAgICBdLAorICAgICJkZXBlbmRlbmNpZXMiOiB7fSwKKyAgICAidGFyZ2V0RGVwZW5kZW5jaWVzIjogeworICAgICAgICAibWJlZCI6IHsgImNtc2lzLWNvcmUiOiAiXjEuMC4wIiB9CisgICAgfSwKKyAgICAidGVzdFRhcmdldERlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm1iZWQiOiB7ICJtYmVkLWRyaXZlcnMiOiAiXjEuMC4wIiB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvdGFyZ2V0X2NvbmZpZy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvdGFyZ2V0X2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNTBjZTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS90YXJnZXRfY29uZmlnLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqICBUZW1wb3JhcnkgdGFyZ2V0LXNwZWNpZmljIGNvbmZpZy5oIGZvciBlbnRyb3B5IGNvbGxlY3Rpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmIGRlZmluZWQoVEFSR0VUX0xJS0VfTUJFRCkKKyNkZWZpbmUgTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZCisjdW5kZWYgTUJFRFRMU19IQVZFX1RJTUVfREFURQorI3VuZGVmIE1CRURUTFNfRlNfSU8KKyNlbmRpZgorCisvKgorICogV0FSTklORzogdGhpcyBpcyB0ZW1wb3JhcnkhCisgKiBUaGlzIHNob3VsZCBiZSBpbiBhIHNlcGFyYXRlIHlvdHRhIG1vZHVsZSB3aGljaCB3b3VsZCBiZSBhIHRhcmdldAorICogZGVwZW5kZW5jeSBvZiBtYmVkdGxzIChzZWUgSU9UU1NMLTMxMykKKyAqLworI2lmIGRlZmluZWQoVEFSR0VUX0xJS0VfSzY0RikKKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVAorI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvLy5kZWZhdWx0LXZlcnNpb24gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvLy5kZWZhdWx0LXZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2OGIyNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vLmRlZmF1bHQtdmVyc2lvbgpAQCAtMCwwICsxIEBACisxLjQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vQ0hBTkdFUyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vQ0hBTkdFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTY2MDVjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9DSEFOR0VTCkBAIC0wLDAgKzEsNjMgQEAKKzEuNCAoMjAxNy0wNi0xNSkKKworCSogUmVtb3ZlIHBhY2thZ2UgYXJjaGl2ZXMgYW5kIHByZWJ1aWx0IGluLXBhY2thZ2UgYmluYXJpZXMuCisJKiBFbnN1cmUgdGhhdCBHTlUgdG9vbCBidWlsZCBwcm9jZXNzIGlzIGNvbXBsZXRlbHkgc2VsZi1zdWZmaWNpZW50CisJICBhbmQgaGFzIG5vIGRlcGVuZGVuY2llcyBvbiBpbnN0YWxsZWQgaG9zdCBiaW5hcmllcy4JCisJKiBBZGQgc3VwcG9ydCBmb3IgZ2VuZXJhdGluZyB2ZXJzaW9uZWQgY29yZSBhbmQgcHJlYnVpbHQgcGFja2FnZSBiaW5hcnkKKwkgIGRpc3RpcnVidGlvbnMuCisJKiBFbnN1cmUgdGhhdCAnYm9vdHN0cmFwJyBjYW4gd29yayB3aXRoIGVpdGhlciBwcmVidWlsdCBpbi1wYWNrYWdlCisJICBiaW5hcmllcyBvciB3aXRoIGluc3RhbGxlZCBob3N0IGJpbmFyaWVzLgorCQorMS4zLjEgKDIwMTctMDUtMTApCisKKwkqIFNwZWNpZnkgdGhlIGNvcnJlY3QgbTQgVVJMLgorCisxLjMgKDIwMTYtMTItMDUpCisKKwkqIEFkZGVkIHRoZSBzdXBwb3J0IGZvciBkZXRlY3Rpb24gb2Ygc3VwcG9ydGVkIEMrKyB2ZXJzaW9uLgorCisxLjIuMiAoMjAxNi0wOC0yOSkKKworCSogVXNlIHRoZSBhcmd1bWVudHMgcGFzc2VkLCBhcyBkZXNpZ25lZCBhbmQgaW50ZW5kZWQsIHRvCisJICBOTF9QUk9HX0xORElSIHJhdGhlciB0aGFuIGhhcmQtY29kZWQgdmFsdWVzIGZvciB0aGUgR05VIGNwCisJICBmYWxsYmFjay4KKworMS4yLjEgKDIwMTYtMDctMTMpCisKKwkqIE1ha2UgdGhlICdwcmV0dHknIGFuZCAncHJldHR5LWNoZWNrJyB0YXJnZXRzIGRlcGVuZGVudCBvbgorCSAgJChQUkVUVFlfRklMRVMpIGFuZCB0aGVuIGl0ZXJhdGUgb24gYSBmaWx0ZXJlZCB2ZXJzaW9uIG9mICQoXikgc28KKwkgIHRoYXQgbWFrZSdzIFZQQVRIIGVuZ2luZSBjYW4gYmUgbGV2ZXJhZ2VkIHRvIGZpbmQgc291cmNlcyBhbmQKKwkgIGhlYWRlcnMgdGhhdCBhcmUgbm90IGluIGRpcmVjdGx5IHN0YXQtYWJsZSBwYXRocyBsaXN0ZWQgaW4KKwkgICQoUFJFVFRZX0ZJTEVTKS4KKworMS4yICgyMDE2LTA2LTAxKQorCisJKiBBZGRlZCBzdXBwb3J0IGZvciBjb2Rpbmcgc3R5bGUgZm9ybWF0dGluZyBhbmQgY2hlY2tpbmcgdGFyZ2V0cy4KKworMS4xLjIgKDIwMTYtMDMtMTkpCisKKwkqIEltcHJvdmUgdGhlIGNvZGUgY292ZXJhZ2UgZ2VuZXJhdGlvbiBwcm9jZXNzIHRvIGNvdmVyIGFuIGVudGlyZQorCSAgcHJvamVjdCdzIHNvdXJjZS4KKworMS4xLjEgKDIwMTUtMTItMTApCisKKwkqIFByb3Blcmx5IGhhbmRsZSBwYWNrYWdlIG9wdGlvbmFsaXR5IHdoZW4gdXNpbmcgcGtnLWNvbmZpZyB0bworCSAgZGV0ZWN0IGV4dGVybmFsIHBhY2thZ2VzLgorCisxLjEgKDIwMTUtMTEtMTApCisKKwkqIEFkZGVkIHN1cHBvcnQgZm9yIGEgcmVjdXJzaXZlICdpbnN0YWxsLWhlYWRlcnMnIHRhcmdldCB0byBhbGxvdworCSAgcGFja2FnZXMgdGhhdCB3aXNoIHRvIGxldmVyYWdlIGl0IHRvIGluc3RhbGwgdGhlaXIgcHVibGljIGhlYWRlcnMKKwkgIGFuZCBvbmx5IHRoZWlyIHB1YmxpYyBoZWFkZXJzIHRvIERFU1RESVIgb24gJ21ha2UgaW5zdGFsbC1oZWFkZXJzJworCSAgd2l0aG91dCBwZXJmb3JtaW5nIGFueSBhZGRpdGlvbmFsIGJ1aWxkIGFjdGlvbnMuCisKKzEuMC4xICgyMDE1LTEwLTI3KQorCisJKiBSZWZhY3RvcmVkIE5MX1dJVEhfUEFDS0FHRSBpbnRvIE5MX1dJVEhfUkVRVUlSRURfRVhURVJOQUxfUEFDS0FHRSwKKwkgIE5MX1dJVEhfT1BUSU9OQUxfRVhURVJOQUxfUEFDS0FHRSwgTkxfV0lUSF9SRVFVSVJFRF9JTlRFUk5BTF9QQUNLQUdFLAorCSAgYW5kIE5MX1dJVEhfT1BUSU9OQUxfSU5URVJOQUxfUEFDS0FHRS4KKworMS4wICgyMDE1LTAzLTE5KQorCisgICAgICAgICogSW5pdGlhbCByZXZpc2lvbiB3aXRoIEdOVSBtNCAxLjQuMTcsIGF1dG9jb25mIDIuNjgsIGF1dG9tYWtlIDEuMTQuMSwKKyAgICAgICAgICBsaWJ0b29sIDIuNC4yLCBtYWtlIDMuODIsIGFuZCBjb3JldXRpbHMgOC4yMS4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vQ09OVFJJQlVUSU5HLm1kIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9DT05UUklCVVRJTkcubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyN2I3ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vQ09OVFJJQlVUSU5HLm1kCkBAIC0wLDAgKzEsMjcgQEAKK1dhbnQgdG8gY29udHJpYnV0ZT8gR3JlYXQhIEZpcnN0LCByZWFkIHRoaXMgcGFnZSAoaW5jbHVkaW5nIHRoZSBzbWFsbCBwcmludCBhdCB0aGUgZW5kKS4KKworIyMjIEJlZm9yZSB5b3UgY29udHJpYnV0ZQorQmVmb3JlIHdlIGNhbiB1c2UgeW91ciBjb2RlLCB5b3UgbXVzdCBzaWduIHRoZQorW0dvb2dsZSBJbmRpdmlkdWFsIENvbnRyaWJ1dG9yIExpY2Vuc2UgQWdyZWVtZW50XQorKGh0dHBzOi8vY2xhLmRldmVsb3BlcnMuZ29vZ2xlLmNvbS9hYm91dC9nb29nbGUtaW5kaXZpZHVhbCkKKyhDTEEpLCB3aGljaCB5b3UgY2FuIGRvIG9ubGluZS4gVGhlIENMQSBpcyBuZWNlc3NhcnkgbWFpbmx5IGJlY2F1c2UgeW91IG93biB0aGUKK2NvcHlyaWdodCB0byB5b3VyIGNoYW5nZXMsIGV2ZW4gYWZ0ZXIgeW91ciBjb250cmlidXRpb24gYmVjb21lcyBwYXJ0IG9mIG91cgorY29kZWJhc2UsIHNvIHdlIG5lZWQgeW91ciBwZXJtaXNzaW9uIHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB5b3VyIGNvZGUuIFdlIGFsc28KK25lZWQgdG8gYmUgc3VyZSBvZiB2YXJpb3VzIG90aGVyIHRoaW5nc+KAlGZvciBpbnN0YW5jZSB0aGF0IHlvdSdsbCB0ZWxsIHVzIGlmIHlvdQora25vdyB0aGF0IHlvdXIgY29kZSBpbmZyaW5nZXMgb24gb3RoZXIgcGVvcGxlJ3MgcGF0ZW50cy4gWW91IGRvbid0IGhhdmUgdG8gc2lnbgordGhlIENMQSB1bnRpbCBhZnRlciB5b3UndmUgc3VibWl0dGVkIHlvdXIgY29kZSBmb3IgcmV2aWV3IGFuZCBhIG1lbWJlciBoYXMKK2FwcHJvdmVkIGl0LCBidXQgeW91IG11c3QgZG8gaXQgYmVmb3JlIHdlIGNhbiBwdXQgeW91ciBjb2RlIGludG8gb3VyIGNvZGViYXNlLgorQmVmb3JlIHlvdSBzdGFydCB3b3JraW5nIG9uIGEgbGFyZ2VyIGNvbnRyaWJ1dGlvbiwgeW91IHNob3VsZCBnZXQgaW4gdG91Y2ggd2l0aAordXMgZmlyc3QgdGhyb3VnaCB0aGUgaXNzdWUgdHJhY2tlciB3aXRoIHlvdXIgaWRlYSBzbyB0aGF0IHdlIGNhbiBoZWxwIG91dCBhbmQKK3Bvc3NpYmx5IGd1aWRlIHlvdS4gQ29vcmRpbmF0aW5nIHVwIGZyb250IG1ha2VzIGl0IG11Y2ggZWFzaWVyIHRvIGF2b2lkCitmcnVzdHJhdGlvbiBsYXRlciBvbi4KKworIyMjIENvZGUgcmV2aWV3cworQWxsIHN1Ym1pc3Npb25zLCBpbmNsdWRpbmcgc3VibWlzc2lvbnMgYnkgcHJvamVjdCBtZW1iZXJzLCByZXF1aXJlIHJldmlldy4gV2UKK3VzZSBHaXRodWIgcHVsbCByZXF1ZXN0cyBmb3IgdGhpcyBwdXJwb3NlLgorCisjIyMgVGhlIHNtYWxsIHByaW50CitDb250cmlidXRpb25zIG1hZGUgYnkgY29ycG9yYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IGEgZGlmZmVyZW50IGFncmVlbWVudCB0aGFuCit0aGUgb25lIGFib3ZlLCB0aGUKK1tTb2Z0d2FyZSBHcmFudCBhbmQgQ29ycG9yYXRlIENvbnRyaWJ1dG9yIExpY2Vuc2UgQWdyZWVtZW50XQorKGh0dHBzOi8vY2xhLmRldmVsb3BlcnMuZ29vZ2xlLmNvbS9hYm91dC9nb29nbGUtY29ycG9yYXRlKS4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vQ29tbW9uLm1hayBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vQ29tbW9uLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGZiMjlhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9Db21tb24ubWFrCkBAIC0wLDAgKzEsMTI5IEBACisjCisjICAgIENvcHlyaWdodCAyMDE3IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIG1ha2UgZmlsZSBoZWFkZXIgZGVmaW5lcyBjb21tb24gdmFyaWFibGVzLCBydWxlcywgYW5kCisjICAgICAgdGFyZ2V0cyBmb3IgbWFpbnRhaW5pbmcgbmxidWlsZC1hdXRvdG9vbHMgZGlzdHJpYnV0aW9ucy4KKyMKKworLkRFRkFVTFRfR09BTCAgICAgICAgID0gYWxsCisKKyMKKyMgVGhpcyBwYWNrYWdlCisjCitQQUNLQUdFICAgICAgICAgICAgICA6PSBubGJ1aWxkLWF1dG90b29scworCisjCisjIFRvb2xzCisjCitDQVQgICAgICAgICAgICAgICAgICA/PSBjYXQKK0NITU9EICAgICAgICAgICAgICAgID89IGNobW9kCitDTVAgICAgICAgICAgICAgICAgICA/PSBjbXAKK0ZJTkQgICAgICAgICAgICAgICAgID89IGZpbmQKK0daSVAgICAgICAgICAgICAgICAgID89IGd6aXAKK01LRElSICAgICAgICAgICAgICAgID89IG1rZGlyCitNViAgICAgICAgICAgICAgICAgICA/PSBtdgorUk0gICAgICAgICAgICAgICAgICAgPz0gcm0KK1NFRCAgICAgICAgICAgICAgICAgID89IHNlZAorVEFSICAgICAgICAgICAgICAgICAgPz0gdGFyCitYWiAgICAgICAgICAgICAgICAgICA/PSB4egorCitkaXN0X3Rhcl9BUkNISVZFICAgICAgPSAkKFRBUikgLWNob2YgLQorCitkaXN0X3Rnel9BUkNISVZFICAgICAgPSAkKGRpc3RfdGFyX0FSQ0hJVkUpCitkaXN0X3Rnel9DT01QUkVTUyAgICAgPSAkKEdaSVApIC0tYmVzdCAtYworCitkaXN0X3R4el9BUkNISVZFICAgICAgPSAkKGRpc3RfdGFyX0FSQ0hJVkUpCitkaXN0X3R4el9DT01QUkVTUyAgICAgPSAkKFhaKSAtLWV4dHJlbWUgLWMKKworVEdaX0VYVEVOU0lPTiAgICAgICAgOj0gLnRhci5negorVFhaX0VYVEVOU0lPTiAgICAgICAgOj0gLnRhci54egorCitESVNUX1RBUkdFVFMJICAgICA/PSBkaXN0LXRneiBkaXN0LXR4egorRElTVF9BUkNISVZFUyAgICAgICAgID0gJChkaXN0X3Rnel9UQVJHRVRTKSAkKGRpc3RfdHh6X1RBUkdFVFMpCisKKyMKKyMgVmVyYm9zaXR5CisjCisKK05MX0RFRkFVTFRfVkVSQk9TSVRZICA9IDAKKworTkxfVl9BVCAgICAgICAgICAgICAgID0gJChOTF9WX0FUXyQoVikpCitOTF9WX0FUXyAgICAgICAgICAgICAgPSAkKE5MX1ZfQVRfJChOTF9ERUZBVUxUX1ZFUkJPU0lUWSkpCitOTF9WX0FUXzAgICAgICAgICAgICAgPSBACitOTF9WX0FUXzEgICAgICAgICAgICAgPSAKKworTkxfVl9NQUtFICAgICAgICAgICAgID0gJChOTF9WX01BS0VfJChWKSkKK05MX1ZfTUFLRV8gICAgICAgICAgICA9ICQoTkxfVl9NQUtFXyQoTkxfREVGQVVMVF9WRVJCT1NJVFkpKQorTkxfVl9NQUtFXzAgICAgICAgICAgID0gQGVjaG8gIiAgTUFLRSAgICAgJChAKSI7CitOTF9WX01BS0VfMSAgICAgICAgICAgPSAKKworTkxfVl9NS0RJUl9QICAgICAgICAgID0gJChOTF9WX01LRElSX1BfJChWKSkKK05MX1ZfTUtESVJfUF8gICAgICAgICA9ICQoTkxfVl9NS0RJUl9QXyQoTkxfREVGQVVMVF9WRVJCT1NJVFkpKQorTkxfVl9NS0RJUl9QXzAgICAgICAgID0gQGVjaG8gIiAgTUtESVIgICAgJCgxKSI7CitOTF9WX01LRElSX1BfMSAgICAgICAgPSAKKworTkxfVl9STURJUiAgICAgICAgICAgID0gJChOTF9WX1JNRElSXyQoVikpCitOTF9WX1JNRElSXyAgICAgICAgICAgPSAkKE5MX1ZfUk1ESVJfJChOTF9ERUZBVUxUX1ZFUkJPU0lUWSkpCitOTF9WX1JNRElSXzAgICAgICAgICAgPSBAZWNobyAiICBSTURJUiAgICAkKDEpIjsKK05MX1ZfUk1ESVJfMSAgICAgICAgICA9IAorCitOTF9WX1RHWiAgICAgICAgICAgICAgPSAkKE5MX1ZfVEdaXyQoVikpCitOTF9WX1RHWl8gICAgICAgICAgICAgPSAkKE5MX1ZfVEdaXyQoTkxfREVGQVVMVF9WRVJCT1NJVFkpKQorTkxfVl9UR1pfMCAgICAgICAgICAgID0gQGVjaG8gIiAgVEdaICAgICAgJChAKSI7CitOTF9WX1RHWl8xICAgICAgICAgICAgPSAKKworTkxfVl9UWFogICAgICAgICAgICAgID0gJChOTF9WX1RYWl8kKFYpKQorTkxfVl9UWFpfICAgICAgICAgICAgID0gJChOTF9WX1RYWl8kKE5MX0RFRkFVTFRfVkVSQk9TSVRZKSkKK05MX1ZfVFhaXzAgICAgICAgICAgICA9IEBlY2hvICIgIFRYWiAgICAgICQoQCkiOworTkxfVl9UWFpfMSAgICAgICAgICAgID0gCisKKyMKKyMgbmwtY3JlYXRlLWRpciA8ZGlyZWN0b3J5PgorIworIyBDcmVhdGUgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksIGluY2x1ZGluZyBhbnkgcGFyZW50IGRpcmVjdG9yaWVzCisjIHRoYXQgbWF5IG5vdCBleGlzdC4KKyMKK2RlZmluZSBubC1jcmVhdGUtZGlyCiskKE5MX1ZfQVQpZWNobyAiICBNS0RJUiAgICAkKDEpIjsgXAorJChNS0RJUikgLXAgIiQoMSkiCitlbmRlZiAjIG5sLWNyZWF0ZS1kaXIKKworIworIyBubC1yZW1vdmUtZGlyIDxkaXJlY3Rvcnk+CisjCisjIElmIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGV4aXN0cywgdGhlbiBlbnN1cmUgYWxsIG9mIHRoZQorIyBkaXJlY3RvcmllcyBhcmUgd3JpdGFibGUgYnkgdGhlIGN1cnJlbnQgdXNlciwgYW5kIHRoZW4gZm9yY2libHkKKyMgcmVtb3ZlIHRoZSBkaXJlY3RvcnkgYW5kIGFsbCBvZiBpdHMgY29udGVudHMsIHNsZWVwaW5nIGZvciBmaXZlICg1KQorIyBzZWNvbmRzIGFuZCBmYWlsdXJlIGJlZm9yZSB0cnlpbmcgdGhlIHJlbW92YWwgYWdhaW4uCisjCitkZWZpbmUgbmwtcmVtb3ZlLWRpcgorJChOTF9WX1JNRElSKSBcCitpZiBbIC1kICIkKDEpIiBdOyB0aGVuIFwKKyAgICAkKEZJTkQpICIkKDEpIiAtdHlwZSBkICEgLXBlcm0gLTIwMCAtZXhlYyAkKENITU9EKSB1K3cge30gJzsnIFwKKyAgICAmJiAkKFJNKSAtcmYgIiQoMSkiIFwKKyAgICB8fCB7IHNsZWVwIDUgJiYgJChSTSkgLXJmICIkKDEpIjsgfTsgXAorZmkKK2VuZGVmICMgbmwtcmVtb3ZlLWRpcgorCitjbGVhbi1sb2NhbDoKKwkkKE5MX1ZfQVQpJChSTSkgLWYgKn4gIiMiKgorCitoZWxwOgorCUBlY2hvICJUaGlzIG1ha2UgZmlsZSBzaG9sZCBub3QgYmUgbmVlZGVkIGZvciBlbmQgdXNlcnMgYW5kIHN5c3RlbSAiCisJQGVjaG8gImludGVncmF0b3JzIG9mICQoUEFDS0FHRSkuIEl0IHNob3VsZCBvbmx5IGJlIG5lZWRlZCBieSAiCisJQGVjaG8gIm1haW50YWluZXJzIHByb2R1Y2luZyBkaXN0cmlidXRpb25zIG9mICQoUEFDS0FHRSkuIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9MSUNFTlNFIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDU2OTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL0xJQ0VOU0UKQEAgLTAsMCArMSwyMDIgQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL01BTklGRVNUIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9NQU5JRkVTVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGY4MGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9NQU5JRkVTVApAQCAtMCwwICsxLDg2IEBACisuZGVmYXVsdC12ZXJzaW9uCisuZ2l0aWdub3JlCitDSEFOR0VTCitDT05UUklCVVRJTkcubWQKK0xJQ0VOU0UKK01BTklGRVNUCitNYWtlZmlsZQorUkVBRE1FLm1kCithdXRvY29uZi9hci1saWIKK2F1dG9jb25mL2NvbXBpbGUKK2F1dG9jb25mL2NvbmZpZy5ndWVzcworYXV0b2NvbmYvY29uZmlnLnN1YgorYXV0b2NvbmYvZGVwY29tcAorYXV0b2NvbmYvaW5zdGFsbC1zaAorYXV0b2NvbmYvbHRtYWluLnNoCithdXRvY29uZi9tNC9heF9jaGVja19jb21waWxlci5tNAorYXV0b2NvbmYvbTQvYXhfY2hlY2tfZmlsZS5tNAorYXV0b2NvbmYvbTQvYXhfY2hlY2tfcHJlcHJvY2Vzc29yLm00CithdXRvY29uZi9tNC9heF9jb21wYXJlX3ZlcnNpb24ubTQKK2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eC5tNAorYXV0b2NvbmYvbTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4XzB4Lm00CithdXRvY29uZi9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMTEubTQKK2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xNC5tNAorYXV0b2NvbmYvbTQvYXhfam5pX2luY2x1ZGVfZGlyLm00CithdXRvY29uZi9tNC9heF9wcm9nX2RveHlnZW4ubTQKK2F1dG9jb25mL200L2F4X3B0aHJlYWQubTQKK2F1dG9jb25mL200L2xpYnRvb2wubTQKK2F1dG9jb25mL200L2x0b3B0aW9ucy5tNAorYXV0b2NvbmYvbTQvbHRzdWdhci5tNAorYXV0b2NvbmYvbTQvbHR2ZXJzaW9uLm00CithdXRvY29uZi9tNC9sdH5vYnNvbGV0ZS5tNAorYXV0b2NvbmYvbTQvbmxfZW5hYmxlX2NvdmVyYWdlLm00CithdXRvY29uZi9tNC9ubF9lbmFibGVfY292ZXJhZ2VfcmVwb3J0aW5nLm00CithdXRvY29uZi9tNC9ubF9lbmFibGVfZGVidWcubTQKK2F1dG9jb25mL200L25sX2VuYWJsZV9kb2NzLm00CithdXRvY29uZi9tNC9ubF9lbmFibGVfb3B0aW1pemF0aW9uLm00CithdXRvY29uZi9tNC9ubF9lbmFibGVfdGVzdHMubTQKK2F1dG9jb25mL200L25sX2VuYWJsZV93ZXJyb3IubTQKK2F1dG9jb25mL200L25sX2ZpbHRlcmVkX2Nhbm9uaWNhbC5tNAorYXV0b2NvbmYvbTQvbmxfcHJvZ19sbmRpci5tNAorYXV0b2NvbmYvbTQvbmxfd2Vycm9yLm00CithdXRvY29uZi9tNC9ubF93aXRoX3BhY2thZ2UubTQKK2F1dG9jb25mL200L3BrZy5tNAorYXV0b2NvbmYvbWlzc2luZworYXV0b2NvbmYvbWtpbnN0YWxsZGlycworYXV0b2NvbmYvcHktY29tcGlsZQorYXV0b2NvbmYvdGVzdC1kcml2ZXIKK2F1dG9tYWtlL3Bvc3QuYW0KK2F1dG9tYWtlL3Bvc3QvcnVsZXMuYW0KK2F1dG9tYWtlL3Bvc3QvcnVsZXMvY292ZXJhZ2UuYW0KK2F1dG9tYWtlL3Bvc3QvcnVsZXMvaGVhZGVycy5hbQorYXV0b21ha2UvcG9zdC9ydWxlcy9wcmV0dHkuYW0KK2F1dG9tYWtlL3ByZS5hbQorYXV0b21ha2UvcHJlL21hY3Jvcy5hbQorYXV0b21ha2UvcHJlL21hY3Jvcy9jb25zdGFudHMuYW0KK2F1dG9tYWtlL3ByZS9tYWNyb3MvY292ZXJhZ2UuYW0KK2F1dG9tYWtlL3ByZS9tYWNyb3MvcGF0aHMuYW0KK2F1dG9tYWtlL3ByZS9tYWNyb3MvcHJldHR5LmFtCithdXRvbWFrZS9wcmUvbWFjcm9zL3N1YmRpcnMuYW0KK2F1dG9tYWtlL3ByZS9tYWNyb3MvdmVyYm9zaXR5LmFtCitldGMvbGNvdi5jb25maWcKK2V4YW1wbGVzL0RveHlmaWxlLmluCitleGFtcGxlcy9NYWtlZmlsZS1kb2MuYW0KK2V4YW1wbGVzL01ha2VmaWxlLWZwcy5hbQorZXhhbXBsZXMvTWFrZWZpbGUtc3JjLmFtCitleGFtcGxlcy9NYWtlZmlsZS10ZXN0cy5hbQorZXhhbXBsZXMvTWFrZWZpbGUtdG9wbGV2ZWwuYW0KK2V4YW1wbGVzL2Jvb3RzdHJhcAorZXhhbXBsZXMvY29uZmlndXJlLmFjCitzY3JpcHRzL2Jvb3RzdHJhcAorc2NyaXB0cy9ib290c3RyYXAtY29uZmlndXJlCitzY3JpcHRzL21rc2tlbGV0b24KK3NjcmlwdHMvbWt2ZXJzaW9uCit0b29scy9wYWNrYWdlcy9hdXRvY29uZi9hdXRvY29uZi51cmwKK3Rvb2xzL3BhY2thZ2VzL2F1dG9jb25mL2F1dG9jb25mLnZlcnNpb24KK3Rvb2xzL3BhY2thZ2VzL2F1dG9tYWtlL2F1dG9tYWtlLnVybAordG9vbHMvcGFja2FnZXMvYXV0b21ha2UvYXV0b21ha2UudmVyc2lvbgordG9vbHMvcGFja2FnZXMvY29yZXV0aWxzL2NvcmV1dGlscy51cmwKK3Rvb2xzL3BhY2thZ2VzL2NvcmV1dGlscy9jb3JldXRpbHMudmVyc2lvbgordG9vbHMvcGFja2FnZXMvbGlidG9vbC9saWJ0b29sLnVybAordG9vbHMvcGFja2FnZXMvbGlidG9vbC9saWJ0b29sLnZlcnNpb24KK3Rvb2xzL3BhY2thZ2VzL200L200LnVybAordG9vbHMvcGFja2FnZXMvbTQvbTQudmVyc2lvbgordG9vbHMvcGFja2FnZXMvbWFrZS9tYWtlLnVybAordG9vbHMvcGFja2FnZXMvbWFrZS9tYWtlLnZlcnNpb24KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9NYWtlZmlsZSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlNTNmMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vTWFrZWZpbGUKQEAgLTAsMCArMSwyMjUgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTcgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgbWFrZSBmaWxlIHN1cHBvcnRzIGdlbmVyYXRpbmcgZGlzdHJpYnV0aW9ucyBvZgorIyAgICAgIG5sYnVpbGQtYXV0b3Rvb2xzLgorIworCitpbmNsdWRlIENvbW1vbi5tYWsKKworIworIyBCdWlsZCBkaXJlY3RvcmllcworIworCitidWlsZGRpciAgICAgICAgIDo9IC4KK3RvcF9idWlsZGRpciAgICAgOj0gLgorYWJzX2J1aWxkZGlyICAgICA6PSAkKENVUkRJUikKK2Fic190b3BfYnVpbGRkaXIgOj0gJChDVVJESVIpCisKKyMKKyMgU291cmNlIGRpcmVjdG9yaWVzCisjCisKK3NyY2RpciAgICAgICAgICAgOj0gLgordG9wX3NyY2RpciAgICAgICA6PSAuCithYnNfc3JjZGlyICAgICAgIDo9ICQoQ1VSRElSKQorYWJzX3RvcF9zcmNkaXIgICA6PSAkKENVUkRJUikKKworZGlzdGRpciAgICAgICAgICAgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKKworZGlzdF90Z3pfVEFSR0VUUyAgPSAkKGRpc3RkaXIpJChUR1pfRVhURU5TSU9OKQorZGlzdF90eHpfVEFSR0VUUyAgPSAkKGRpc3RkaXIpJChUWFpfRVhURU5TSU9OKQorCitESVNURklMRVMgICAgICAgIDo9ICQoc2hlbGwgJChDQVQpIE1BTklGRVNUKQorCisjCisjIFBhY2thZ2UgdmVyc2lvbiBmaWxlczoKKyMKKyMgLmRlZmF1bHQtdmVyc2lvbiAtIFRoZSBkZWZhdWx0IHBhY2thZ2UgdmVyc2lvbi4gVGhpcyBmaWxlIGlzIEFMV0FZUyBjaGVja2VkCisjICAgICAgICAgICAgICAgICAgICBpbiBhbmQgc2hvdWxkIGFsd2F5cyByZXByZXNlbnQgdGhlIGN1cnJlbnQgYmFzZWxpbmUKKyMgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UuCisjCisjIC5kaXN0LXZlcnNpb24gICAgLSBUaGUgZGlzdHJpYnV0ZWQgcGFja2FnZSB2ZXJzaW9uLiBUaGlzIGZpbGUgaXMgTkVWRVIKKyMgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgaW4gd2l0aGluIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5LCBpcyBhdXRvLQorIyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkLCBhbmQgaXMgb25seSBmb3VuZCBpbiB0aGUgcGFja2FnZSBkaXN0cmlidXRpb24uCisjCisjIC5sb2NhbC12ZXJzaW9uICAgLSBUaGUgY3VycmVudCBzb3VyY2UgY29kZSBjb250cm9sbGVkIHBhY2thZ2UgdmVyc2lvbi4gVGhpcworIyAgICAgICAgICAgICAgICAgICAgZmlsZSBpcyBORVZFUiBjaGVja2VkIGluIHdpdGhpbiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSwKKyMgICAgICAgICAgICAgICAgICAgIGlzIGF1dG8tZ2VuZXJhdGVkLCBhbmQgY2FuIGFsd2F5cyBiZSBmb3VuZCBpbiBib3RoIHRoZQorIyAgICAgICAgICAgICAgICAgICAgYnVpbGQgdHJlZSBhbmQgZGlzdHJpYnV0aW9uLgorIworIyBXaGVuIHByZXNlbnQsIHRoZSAubG9jYWwtdmVyc2lvbiBmaWxlIGlzIHByZWZlcnJlZCBmaXJzdCwgdGhlCisjIC5kaXN0LXZlcnNpb24gc2Vjb25kLCBhbmQgdGhlIC5kZWZhdWx0LXZlcnNpb24gbGFzdC4KKyMKKworVkVSU0lPTl9GSUxFICAgICAgICAgICAgICAgICAgICAgIDo9ICQoaWYgJCh3aWxkY2FyZCAkKGJ1aWxkZGlyKS8ubG9jYWwtdmVyc2lvbiksJChidWlsZGRpcikvLmxvY2FsLXZlcnNpb24sJChpZiAkKHdpbGRjYXJkICQoc3JjZGlyKS8uZGlzdC12ZXJzaW9uKSwkKHNyY2RpcikvLmRpc3QtdmVyc2lvbiwkKHNyY2RpcikvLmRlZmF1bHQtdmVyc2lvbikpCisKK1BBQ0tBR0VfVkVSU0lPTiAgICAgICAgICAgICAgICAgICA/PSAkKHNoZWxsICQoQ0FUKSAkKFZFUlNJT05fRklMRSkgMj4gL2Rldi9udWxsKQorCitWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJChQQUNLQUdFX1ZFUlNJT04pCisKKyMKKyMgVmVyYm9zaXR5CisjCitfTkxfVl9DT1BZICAgICAgICAgICAgICAgICAgICAgICAgID0gJChfTkxfVl9DT1BZXyQoVikpCitfTkxfVl9DT1BZXyAgICAgICAgICAgICAgICAgICAgICAgID0gJChfTkxfVl9DT1BZXyQoTkxfREVGQVVMVF9WRVJCT1NJVFkpKQorX05MX1ZfQ09QWV8wICAgICAgICAgICAgICAgICAgICAgICA9IEBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUyk7IGRvIGVjaG8gIiAgQ09QWSAgICAgJCR7ZmlsZX0iOyBkb25lOworX05MX1ZfQ09QWV8xICAgICAgICAgICAgICAgICAgICAgICA9IAorCitfTkxfVl9NQUtFICAgICAgICAgICAgICAgICAgICAgICAgID0gJChfTkxfVl9NQUtFXyQoVikpCitfTkxfVl9NQUtFXyAgICAgICAgICAgICAgICAgICAgICAgID0gJChfTkxfVl9NQUtFXyQoTkxfREVGQVVMVF9WRVJCT1NJVFkpKQorX05MX1ZfTUFLRV8wICAgICAgICAgICAgICAgICAgICAgICA9IEBlY2hvICIgIE1BS0UgICAgIGRpc3QtaG9vayI7CitfTkxfVl9NQUtFXzEgICAgICAgICAgICAgICAgICAgICAgID0gCisKKyMKKyMgY2hlY2stZmlsZSA8bWFjcm8gc3VmZml4PgorIworIyBDaGVjayB3aGV0aGVyIGEgZmlsZSwgcmVmZXJlbmNlZCBieSB0aGUgJChAKSB2YXJpYWJsZSwgc2hvdWxkIGJlCisjIHVwZGF0ZWQgLyByZWdlbmVyYXRlZCBiYXNlZCBvbiBpdHMgZGVwZW5kZW5jaWVzLCByZWZlcmVuY2VkIGJ5IHRoZQorIyAkKDwpIHZhcmlhYmxlIGJ5IHJ1bm5pbmcgdGhlIG1ha2UgbWFjcm8gY2hlY2stZmlsZS08bWFjcm8gc3VmZml4Pi4KKyMKKyMgVGhlICQoPCkgaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBpZiB0aGUgbWFjcm8gd2FudHMgdG8gcHJvY2VzcworIyBpdCBhbmQgdGhlIHByb3NwZWN0aXZlIG5ldyBvdXRwdXQgZmlsZSwgd2hpY2ggdGhlIG1hY3JvIE1VU1QKKyMgZ2VuZXJhdGUsIGFzIHRoZSBzZWNvbmQuCisjCisjIFRoaXMgbWFjcm8gd2lsbCBlbnN1cmUgdGhhdCBhbnkgcmVxdWlyZWQgcGFyZW50IGRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkCisjIHByaW9yIHRvIGludm9raW5nIGNoZWNrLWZpbGUtPG1hY3JvIHN1ZmZpeD4uCisjCisjIFRoaXMgbWFjcm8gaXMgc2ltaWxhciB0byBhbmQgaW5zcGlyZWQgYnkgdGhhdCBmcm9tIExpbnV4IEtidWlsZCBhbmQKKyMgZWxzZXdoZXJlLgorIworIyAgIDxtYWNybyBzdWZmaXg+IC0gVGhlIG5hbWUsIHN1ZmZpeGVkIHRvICJjaGVjay1maWxlLSIsIHdoaWNoIGluZGljYXRlcworIyAgICAgICAgICAgICAgICAgICAgdGhlIG1ha2UgbWFjcm8gdG8gaW52b2tlLgorIworIworZGVmaW5lIGNoZWNrLWZpbGUKKyQoTkxfVl9BVClzZXQgLWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitlY2hvICcgIENIRUNLICAgICQoQCknOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorJChNS0RJUikgLXAgJChkaXIgJChAKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyQoY2FsbCBjaGVjay1maWxlLSQoMSksJCg8KSwkKEApLk4pOyAgICAgICAgICAgICAgICBcCitpZiBbIC1yICIkKEApIiBdICYmICQoQ01QKSAtcyAiJChAKSIgIiQoQCkuTiI7IHRoZW4gXAorICAgICQoUk0pIC1mICIkKEApLk4iOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWNobyAnICBHRU4gICAgICAkKEApJzsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTVYpIC1mICIkKEApLk4iICIkKEApIjsgICAgICAgICAgICAgICAgICAgICAgIFwKK2ZpCitlbmRlZiAjIGNoZWNrLWZpbGUKKworIworIyBjaGVjay1maWxlLS5sb2NhbC12ZXJzaW9uCisjCisjIFNwZWN1bGF0aXZlbHkgcmVnZW5lcmF0ZSAubG9jYWwtdmVyc2lvbiBhbmQgY2hlY2sgdG8gc2VlIGlmIGl0IG5lZWRzCisjIHRvIGJlIHVwZGF0ZWQuCisjCisjIElmIFBBQ0tBR0VfVkVSU0lPTiBoYXMgYmVlbiBzdXBwbGllZCBhbnl3aGVyZSBvdGhlciB0aGFuIGluIHRoaXMgZmlsZQorIyAod2hpY2ggaXMgaW1wbGljaXRseSB0aGUgY29udGVudHMgb2YgLmxvY2FsLXZlcnNpb24pLCB0aGVuIHVzZSB0aGF0OworIyBvdGhlcndpc2UsIGF0dGVtcHQgdG8gZ2VuZXJhdGUgaXQgZnJvbSB0aGUgU0NNIHN5c3RlbS4KKyMKKyMgVGhpcyBpcyBjYWxsZWQgZnJvbSAkKGNhbGwgY2hlY2stZmlsZSwubG9jYWwtdmVyc2lvbikuCisjCitkZWZpbmUgY2hlY2stZmlsZS0ubG9jYWwtdmVyc2lvbgoraWYgWyAiJChvcmlnaW4gUEFDS0FHRV9WRVJTSU9OKSIgIT0gImZpbGUiIF07IHRoZW4gICAgIFwKKyAgICBlY2hvICIkKFBBQ0tBR0VfVkVSU0lPTikiID4gIiQoMikiOyAgICAgICAgICAgICAgICBcCitlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoYWJzX3RvcF9zcmNkaXIpL3NjcmlwdHMvbWt2ZXJzaW9uICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLWIgIiQoUEFDS0FHRV9WRVJTSU9OKSIgIiQodG9wX3NyY2RpcikiICAgICAgICBcCisgICAgICAgID4gIiQoMikiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZmkKK2VuZGVmCisKKyMKKyMgY2hlY2stZmlsZS0uZGlzdC12ZXJzaW9uCisjCisjIFNwZWN1bGF0aXZlbHkgcmVnZW5lcmF0ZSAuZGlzdC12ZXJzaW9uIGFuZCBjaGVjayB0byBzZWUgaWYgaXQgbmVlZHMKKyMgdG8gYmUgdXBkYXRlZC4KKyMKKyMgVGhpcyBpcyBjYWxsZWQgZnJvbSAkKGNhbGwgY2hlY2stZmlsZSwuZGlzdC12ZXJzaW9uKS4KKyMKK2RlZmluZSBjaGVjay1maWxlLS5kaXN0LXZlcnNpb24KKyQoQ0FUKSAiJCgxKSIgPiAiJCgyKSIKK2VuZGVmCisKKyMKKyMgVmVyc2lvbiBmaWxlIHJlZ2VuZXJhdGlvbiBydWxlcy4KKyMKKy5QSE9OWTogZm9yY2UKKworJChidWlsZGRpcikvLmxvY2FsLXZlcnNpb246ICQoc3JjZGlyKS8uZGVmYXVsdC12ZXJzaW9uIGZvcmNlCisKKyQoZGlzdGRpcikvLmRpc3QtdmVyc2lvbjogJChidWlsZGRpcikvLmxvY2FsLXZlcnNpb24gZm9yY2UKKworJChkaXN0ZGlyKS8uZGlzdC12ZXJzaW9uICQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uOgorCSQoY2FsbCBjaGVjay1maWxlLCQoQEYpKQorCithbGw6IC5sb2NhbC12ZXJzaW9uCisKK2Rpc3QtaG9vazogJChkaXN0ZGlyKS8uZGlzdC12ZXJzaW9uCisKKyMKKyMgU3RhZ2UgdGhlIGRpc3RyaWJ1dGlvbiBmaWxlcyB0byBhIGRpc3RyaWJ1dGlvbiBkaXJlY3RvcnkKKyMKK3N0YWdlOiAkKERJU1RGSUxFUykgLmxvY2FsLXZlcnNpb24KKwkkKGNhbGwgbmwtcmVtb3ZlLWRpciwkKGRpc3RkaXIpKQorCSQoY2FsbCBubC1jcmVhdGUtZGlyLCQoZGlzdGRpcikpCisJJChfTkxfVl9NQUtFKSQoTUFLRSkgLXMgZGlzdGRpcj0iJChkaXN0ZGlyKSIgZGlzdC1ob29rCisJJChfTkxfVl9DT1BZKShjZCAkKGFic190b3Bfc3JjZGlyKTsgJChkaXN0X3Rhcl9BUkNISVZFKSAkKERJU1RGSUxFUykgfCAoY2QgJChhYnNfYnVpbGRkaXIpLyQoZGlzdGRpcik7ICQoVEFSKSB4ZkJwIC0pKQorCisjCisjIFByb2R1Y2UgYW4gYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRpc3RyaWJ1dGlvbiB1c2luZyBhIHRhciBhcmNoaXZlCisjIHdpdGggZ3ppcCBjb21wcmVzc2lvbgorIworJChkaXN0X3Rnel9UQVJHRVRTKTogc3RhZ2UKKwkkKE5MX1ZfVEdaKSQoZGlzdF90Z3pfQVJDSElWRSkgJChkaXN0ZGlyKSB8ICQoZGlzdF90Z3pfQ09NUFJFU1MpID4gIiQoQCkiCisKKyMKKyMgUHJvZHVjZSBhbiBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGlzdHJpYnV0aW9uIHVzaW5nIGEgdGFyIGFyY2hpdmUKKyMgd2l0aCB4eiBjb21wcmVzc2lvbgorIworJChkaXN0X3R4el9UQVJHRVRTKTogc3RhZ2UKKwkkKE5MX1ZfVFhaKSQoZGlzdF90eHpfQVJDSElWRSkgJChkaXN0ZGlyKSB8ICQoZGlzdF90eHpfQ09NUFJFU1MpID4gIiQoQCkiCisKKyMKKyMgUHJvZHVjZSBhbiBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGlzdHJpYnV0aW9uIG9mIHRoZQorIyBubGJ1aWxkLWF1dG90b29scyBjb3JlLgorIworZGlzdDogJChESVNUX1RBUkdFVFMpIC5sb2NhbC12ZXJzaW9uCisJJChjYWxsIG5sLXJlbW92ZS1kaXIsJChkaXN0ZGlyKSkKKworZGlzdC10Z3o6ICQoZGlzdF90Z3pfVEFSR0VUUykKKworZGlzdC10eHo6ICQoZGlzdF90eHpfVEFSR0VUUykKKworIworIyBQcm9kdWNlIHByZWJ1aWx0IEdOVSBhdXRvdG9vbHMgYmluYXJpZXMgZm9yIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlCisjIENVUlJFTlQgYnVpbGQgbWFjaGluZSBhbmQgaW5zdGFsbCB0aGVtIGluIFRISVMgbmxidWlsZC1hdXRvdG9vbHMKKyMgcGFja2FnZS4KKyMKKy5QSE9OWTogdG9vbHMKK3Rvb2xzOgorCSQoTkxfVl9NQUtFKSQoTUFLRSkgLUMgdG9vbHMgJChAKQorCisjCisjIFByb2R1Y2UgcHJlYnVpbHQgR05VIGF1dG90b29scyBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGFuZCAtaW5kZXBlbmRlbnQKKyMgYmluYXJpZXMgZm9yIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIENVUlJFTlQgYnVpbGQgbWFjaGluZSBhbmQgUEFDS0FHRQorIyB0aGVtIHVwIGZvciBFWFRFUk5BTCBkaXN0cmlidXRpb24uCisjCit0b29sc2Rpc3Q6IC5sb2NhbC12ZXJzaW9uCisJJChOTF9WX01BS0UpJChNQUtFKSAtQyB0b29scyAkKEApCisKK2NsZWFuOiBjbGVhbi1sb2NhbAorCSQoTkxfVl9NQUtFKSQoTUFLRSkgLUMgdG9vbHMgJChAKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9SRUFETUUubWQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzgzMWRlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9SRUFETUUubWQKQEAgLTAsMCArMSwxODAgQEAKK05lc3QgTGFicyBCdWlsZCAtIEdOVSBBdXRvdG9vbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBJbnRyb2R1Y3Rpb24KKworVGhlIE5lc3QgTGFicyBCdWlsZCAtIEdOVSBBdXRvdG9vbHMgKG5sYnVpbGQtYXV0b3Rvb2xzKSBwcm92aWRlcyBhCitjdXN0b21pemVkLCB0dXJua2V5IGJ1aWxkIHN5c3RlbSBmcmFtZXdvcmssIGJhc2VkIG9uIEdOVSBhdXRvdG9vbHMsIGZvcgorc3RhbmRhbG9uZSBOZXN0IExhYnMgKG9yIG90aGVyKSBzb2Z0d2FyZSBwYWNrYWdlcyB0aGF0IG5lZWQgdG8gc3VwcG9ydAorbm90IG9ubHkgYnVpbGRpbmcgb24gYW5kIHRhcmdldGluZyBhZ2FpbnN0IHN0YW5kYWxvbmUgYnVpbGQgaG9zdAorc3lzdGVtcyBidXQgYWxzbyBlbWJlZGRlZCB0YXJnZXQgc3lzdGVtcyB1c2luZyBHQ0MtYmFzZWQgb3IKKy1jb21wYXRpYmxlIHRvb2xjaGFpbnMuCisKKyMgVXNlcnMgYW5kIFN5c3RlbSBJbnRlZ3JhdG9ycworCisjIyBHZXR0aW5nIFN0YXJ0ZWQKKworVGhpcyBwcm9qZWN0IGlzIHR5cGljYWxseSBzdWJ0cmVlZCAob3IgZ2l0IHN1Ym1vZHVsZWQpIGludG8gYSB0YXJnZXQKK3Byb2plY3QgcmVwb3NpdG9yeSBhbmQgc2VydmVzIGFzIHRoZSBzZWVkIGZvciB0aGF0IHByb2plY3QncyBidWlsZAorc3lzdGVtLgorCitBc3N1bWluZyB0aGF0IHlvdSBhbHJlYWR5IGhhdmUgYSBwcm9qZWN0IHJlcG9zaXRvcnkgZXN0YWJsaXNoZWQgaW4KK2dpdCwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIGluIHlvdXIgcHJvamVjdCByZXBvc2l0b3J5OgorCitgYGAKKzEuICUgZ2l0IHJlbW90ZSBhZGQgbmxidWlsZC1hdXRvdG9vbHMgc3NoOi8vPFBBVEhfVE9fUkVQT1NJVE9SWT4vbmxidWlsZC1hdXRvdG9vbHMuZ2l0CisyLiAlIGdpdCBmZXRjaCBubGJ1aWxkLWF1dG90b29scworYGBgCisKK1lvdSBjYW4gcGxhY2UgdGhlIG5sYnVpbGQtYXV0b3Rvb2xzIHBhY2thZ2UgYW55d2hlcmUgaW4geW91ciBwcm9qZWN0OworaG93ZXZlciwgYnkgY29udmVudGlvbiwgInRoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8iIGlzIHJlY29tbWVuZGVkOgorCitgYGAKKzMuICUgbWtkaXIgdGhpcmRfcGFydHkKKzQuICUgZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PXRoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8gLS1zcXVhc2ggLS1tZXNzYWdlPSJBZGQgc3VidHJlZSBtaXJyb3Igb2YgcmVwb3NpdG9yeSAnc3NoOi8vPFBBVEhfVE9fUkVQT1NJVE9SWT4vbmxidWlsZC1hdXRvdG9vbHMuZ2l0JyBicmFuY2ggJ21hc3RlcicgYXQgY29tbWl0ICdIRUFEJy4iIG5sYnVpbGQtYXV0b3Rvb2xzIEhFQUQKK2BgYAorCitBdCB0aGlzIHBvaW50LCB5b3Ugbm93IGhhdmUgdGhlIG5sYnVpbGQtYXV0b3Rvb2xzIHBhY2thZ2UgaW50ZWdyYXRlZAoraW50byB5b3VyIHByb2plY3QuIFRoZSBuZXh0IHN0ZXAgaXMgdXNpbmcgdGhlCitubGJ1aWxkLWF1dG90b29scy1wcm92aWRlZCBleGFtcGxlcyBhcyB0ZW1wbGF0ZXMuIFRvIGRvIHRoaXMsIGEKK2NvbnZlbmllbmNlIHNjcmlwdCBoYXMgYmVlbiBwcm92aWRlZCB0aGF0IHdpbGwgZ2V0IHlvdSBzdGFydGVkLiBZb3UKK2NhbiB0dW5lIGFuZCBjdXN0b21pemUgdGhlIHJlc3VsdHMsIGFzIG5lZWRlZCwgZm9yIHlvdXIgcHJvamVjdC4gRnJvbQordGhlIHRvcCBsZXZlbCBvZiB5b3VyIHByb2plY3QgdHJlZToKKworYGBgCis1LiAlIHRoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vc2NyaXB0cy9ta3NrZWxldG9uIC1JIHRoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8gLS1wYWNrYWdlLWRlc2NyaXB0aW9uICJNeSBGYW50YXN0aWMgUGFja2FnZSIgLS1wYWNrYWdlLW5hbWUgIm1mcCIKK2BgYAorCisjIyBTdXBwb3J0ZWQgQnVpbGQgSG9zdCBTeXN0ZW1zCisKK0ZvciBMaW51eCB1c2VycywgeW91IGxpa2VseSBhbHJlYWR5IGhhdmUgR05VIGF1dG90b29scyBpbnN0YWxsZWQgdGhyb3VnaCB5b3VyIHN5c3RlbSdzIGRpc3RyaWJ1dGlvbiAoZS5nLiBVYnVudHUpLiBIb3dldmVyLCBpZiB5b3VyIEdOVSBhdXRvdG9vbHMgcGFja2FnZXMgYXJlIGluY29tcGxldGUgb3IgZG93bnJldmlzaW9uIHJlbGF0aXZlIHRvIHdoYXQncyByZXF1aXJlZCBmcm9tIG5sYnVpbGQtYXV0b3Rvb2xzLCBubGJ1aWxkLWF1dG90b29scyBjYW4gYmUgYnVpbHQgYW5kIGluc3RhbGxlZCBvciBjYW4gYmUgZG93bmxvYWRlZCBhbmQgZXhwYW5kZWQgaW4geW91ciBsb2NhbCBubGJ1aWxkLWF1dG90b29scyB0cmVlLgorCitUaGUgbmxidWlsZC1hdXRvdG9vbHMgc3lzdGVtIHN1cHBvcnRzIGFuZCBoYXMgYmVlbiB0ZXN0ZWQgYWdhaW5zdCB0aGUKK2ZvbGxvd2luZyBQT1NJWC1iYXNlZCBidWlsZCBob3N0IHN5c3RlbXM6CisKKyAgKiBpNjg2LXBjLWN5Z3dpbgorICAqIGk2ODYtcGMtbGludXgtZ251CisgICogeDg2XzY0LWFwcGxlLWRhcndpbgorICAqIHg4Nl82NC11bmtub3duLWxpbnV4LWdudQorCisjIyMgQnVpbGQgYW5kIEluc3RhbGwKKworU2ltcGx5IGludm9rZSBgbWFrZSB0b29sc2AgYXQgdGhlIHRvcC1sZXZlbCBvZiB5b3VyIG5sYnVpbGQtYXV0b3Rvb2xzIHRyZWUuCisKKyMjIyBEb3dubG9hZCBhbmQgRXhwYW5kCisKK0Fsb25nc2lkZSBubGJ1aWxkLWF1dG90b29scyBkaXN0cmlidXRpb25zIGFyZSBwcmUtYnVpbHQKK2FyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBhbmQgLWRlcGVuZGVudCBkaXN0cmlidXRpb25zIG9mIHRoZSBmb3JtOgorCisgICogbmxidWlsZC1hdXRvdG9vbHMtY29tbW9uLV92ZXJzaW9uXy50YXIue2d6LHh6fQorICAqIG5sYnVpbGQtYXV0b3Rvb2xzLV9ob3N0Xy1fdmVyc2lvbl8udGFyLntneix4en0KKworRmluZCBhbmQgZG93bmxvYWQgdGhlIGFwcHJvcHJpYXRlIHBhaXIgb2YgbmxidWlsZC1hdXRvdG9vbHMtY29tbW9uIGFuZAorbmxidWlsZC1hdXRvdG9vbHMtX2hvc3RfIGZvciB5b3VyIHN5c3RlbSBhbmQgdGhlbiBleHBhbmQgdGhlbSBmcm9tIHRoZQordG9wLWxldmVsIG9mIHlvdXIgbmxidWlsZC1hdXRvdG9vbHMgdHJlZSB3aXRoIGEgY29tbWFuZCBzaW1pbGFyIHRvIHRoZQorZm9sbG93aW5nIGV4YW1wbGU6CisKK2BgYAorJSB0YXIgLS1kaXJlY3RvcnkgdG9vbHMvaG9zdCAtenh2ZiBubGJ1aWxkLWF1dG90b29scy1jb21tb24tMS4xLnRhci5negorJSB0YXIgLS1kaXJlY3RvcnkgdG9vbHMvaG9zdCAtenh2ZiBubGJ1aWxkLWF1dG90b29scy14ODZfNjQtdW5rbm93bi1saW51eC1nbnUtMS4xLnRhci5negorYGBgCisKK1BsZWFzZSBzZWUgdGhlIFtGQVFdKCNGQVEpIHNlY3Rpb24gZm9yIG1vcmUgYmFja2dyb3VuZCBvbiB3aHkgdGhpcyBwYWNrYWdlCitwcm92aWRlcyBvcHRpb25zIGZvciB0aGVzZSBwcmUtYnVpbHQgdG9vbHMuCisKKyMjIFBhY2thZ2UgT3JnYW5pemF0aW9uCisKK1RoZSBubGJ1aWxkLWF1dG90b29scyBwYWNrYWdlIGlzIGxhaWQgb3V0IGFzIGZvbGxvd3M6CisKK3wgRGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorfCBhdXRvY29uZi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHTlUgYXV0b2NvbmYgaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgbmxidWlsZC1hdXRvdG9vbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgYXV0b2NvbmYvbTQvICAgICAgICAgICAgICAgICAgICAgICAgIHwgR05VIG00IG1hY3JvcyBmb3IgY29uZmlndXJlLmFjIHByb3ZpZGVkIGJ5IG5sYnVpbGQtYXV0b3Rvb2xzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IGF1dG9tYWtlLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdOVSBhdXRvbWFrZSBNYWtlZmlsZS5hbSBoZWFkZXIgYW5kIGZvb3RlciBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSBubGJ1aWxkLWF1dG90b29scy4gfAorfCBhdXRvbWFrZS9wb3N0LyAgICAgICAgICAgICAgICAgICAgICAgfCBHTlUgYXV0b21ha2UgTWFrZWZpbGUuYW0gZm9vdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgYXV0b21ha2UvcG9zdC5hbSAgICAgICAgICAgICAgICAgICAgIHwgR05VIGF1dG9tYWtlIE1ha2VmaWxlLmFtIGZvb3RlciBpbmNsdWRlZCBieSBldmVyeSBtYWtlZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IGF1dG9tYWtlL3ByZS8gICAgICAgICAgICAgICAgICAgICAgICB8IEdOVSBhdXRvbWFrZSBNYWtlZmlsZS5hbSBoZWFkZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBhdXRvbWFrZS9wcmUuYW0gICAgICAgICAgICAgICAgICAgICAgfCBHTlUgYXV0b21ha2UgTWFrZWZpbGUuYW0gaGVhZGVyIGluY2x1ZGVkIGJ5IGV2ZXJ5IG1ha2VmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgZXhhbXBsZXMvICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRXhhbXBsZSB0ZW1wbGF0ZSBmaWxlcyBmb3Igc3RhcnRpbmcgeW91ciBvd24gbmxidWlsZC1hdXRvdG9vbHMtYmFzZWQgcHJvamVjdC4gICAgICAgICAgICB8Cit8IHNjcmlwdHMvICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEF1dG9tYXRpb24gc2NyaXB0cyBmb3IgcmVnZW5lcmF0aW5nIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGZvciBtYW5hZ2luZyBwYWNrYWdlIHZlcnNpb25zLiAgfAorfCB0b29scy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRdWFsaWZpZWQgcGFja2FnZXMgb2YgYW5kIHByZS1idWlsdCBpbnN0YW5jZXMgb2YgR05VIGF1dG90b29scy4gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdG9vbHMvaG9zdC8gICAgICAgICAgICAgICAgICAgICAgICAgIHwgUHJlLWJ1aWx0IGluc3RhbmNlcyBvZiBHTlUgYXV0b3Rvb2xzIChpZiBpbnN0YWxsZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRvb2xzL2hvc3QvaTY4Ni1wYy1jeWd3aW4vICAgICAgICAgICB8IFByZS1idWlsdCBpbnN0YW5jZXMgb2YgR05VIGF1dG90b29scyBmb3IgMzItYml0IEN5Z3dpbiAoaWYgaW5zdGFsbGVkKS4gICAgICAgICAgICAgICAgICAgfAorfCB0b29scy9ob3N0L2k2ODYtcGMtbGludXgtZ251LyAgICAgICAgfCBQcmUtYnVpbHQgaW5zdGFuY2VzIG9mIEdOVSBhdXRvdG9vbHMgZm9yIDMyLWJpdCBMaW51eCAoaWYgaW5zdGFsbGVkKS4gICAgICAgICAgICAgICAgICAgIHwKK3wgdG9vbHMvaG9zdC94ODZfNjQtYXBwbGUtZGFyd2luLyAgICAgIHwgUHJlLWJ1aWx0IGluc3RhbmNlcyBvZiBHTlUgYXV0b3Rvb2xzIGZvciA2NC1iaXQgTWFjIE9TIFggKGlmIGluc3RhbGxlZCkuICAgICAgICAgICAgICAgICB8Cit8IHRvb2xzL2hvc3QveDg2XzY0LXVua25vd24tbGludXgtZ251LyB8IFByZS1idWlsdCBpbnN0YW5jZXMgb2YgR05VIGF1dG90b29scyBmb3IgNjQtYml0IExpbnV4IChpZiBpbnN0YWxsZWQpLiAgICAgICAgICAgICAgICAgICAgfAorfCB0b29scy9wYWNrYWdlcy8gICAgICAgICAgICAgICAgICAgICAgfCBRdWFsaWZpZWQgcGFja2FnZXMgZm9yIEdOVSBhdXRvdG9vbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworIyBGQVEgeyNGQVF9CisKK1E6IFdoeSBkb2VzIG5sYnVpbGQtYXV0b3Rvb2xzIGhhdmUgYW4gb3B0aW9uIGZvciBpdHMgb3duIGJ1aWx0IHZlcnNpb25zCisgICBvZiBHTlUgYXV0b3Rvb2xzIHJhdGhlciB0aGFuIGxldmVyYWdpbmcgd2hhdGV2ZXIgdmVyc2lvbnMgZXhpc3Qgb24KKyAgIHRoZSBidWlsZCBob3N0IHN5c3RlbT8KKworQTogU29tZSBidWlsZCBob3N0IHN5c3RlbXMgc3VjaCBhcyBNYWMgT1MgWCBtYXkgbm90IGhhdmUgR05VIGF1dG90b29scworICAgYXQgYWxsLiBPdGhlciBidWlsZCBob3N0IHN5c3RlbXMsIHN1Y2ggYXMgTGludXgsIG1heSBoYXZlIGRpZmZlcmVudAorICAgZGlzdHJpYnV0aW9ucyBvciBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhvc2UgZGlzdHJpYnV0aW9ucyBpbiB3aGljaAorICAgdGhlIHZlcnNpb25zIG9mIEdOVSBhdXRvdG9vbHMgYXJlIGFwdCB0byBiZSBkaWZmZXJlbnQuCisKKyAgIFRoaXMgZGlmZmVyZW5jZXMgbGVhZCB0byBkaWZmZXJlbnQgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IGF1dG90b29scworICAgb3V0cHV0IGFuZCwgYXMgYSBjb25zZXF1ZW5jZSwgYSBkaXZlcmdlbnQgdXNlciBhbmQgc3VwcG9ydAorICAgZXhwZXJpZW5jZS4gVG8gYXZvaWQgdGhpcywgdGhpcyBwYWNrYWdlIHByb3ZpZGVzIGEgcHJlLWJ1aWx0LAorICAgcXVhbGlmaWVkIHNldCBvZiBHTlUgYXV0b3Rvb2xzIGFsb25nIHdpdGggYSBjb21wcmVoZW5zaXZlLAorICAgc3RhbmRhbG9uZSBzZXQgb2Ygc2NyaXB0cyB0byBkcml2ZSB0aGVtIHdpdGhvdXQgcmVsaWFuY2Ugb24gdGhvc2UKKyAgIHZlcnNpb25zIG9mIHRoZSB0b29scyBvbiB0aGUgYnVpbGQgaG9zdCBzeXN0ZW0uCisKKyMjIE1haW50YWluZXJzCisKK0lmIHlvdSBhcmUgbWFpbnRhaW5pbmcgbmxidWlsZC1hdXRvdG9vbHMsIHlvdSBoYXZlIHNldmVyYWwga2V5IHRoaW5ncyB0byBrbm93OgorCisxLiBHZW5lcmF0aW5nIG5sYnVpbGQtYXV0b3Rvb2xzIGRpc3RyaWJ1dGlvbnMKKzIuIEdlbmVyYXRpbmcgb3B0aW9uYWwgbmxidWlsZC1hdXRvdG9vbHMgcHJlYnVpbHQgYmluYXJ5IGRpc3RyaWJ1dGlvbnMuCiszLiBVcGdyYWRpbmcgR05VIGF1dG90b29scyBwYWNrYWdlcy4KKworIyMjIEdlbmVyYXRpbmcgRGlzdHJpYnV0aW9ucworCitUbyBnZW5lcmF0ZSBhIG5sYnVpbGQtYXV0b3Rvb2xzIGRpc3RyaWJ1dGlvbiwgc2ltcGx5IGludm9rZToKKworYGBgCislIG1ha2UgZGlzdAorYGBgCisKK1RoZSBwYWNrYWdlIHZlcnNpb24gd2lsbCBjb21lIGZyb20gdGFncyBpbiB0aGUgc291cmNlIGNvZGUgY29udHJvbAorc3lzdGVtLCBpZiBhdmFpbGFibGU7IG90aGVyd2lzZSwgZnJvbSAnLmRlZmF1bHQtdmVyc2lvbicuIFRoZSB2ZXJzaW9uCitjYW4gYmUgb3ZlcnJpZGRlbiBmcm9tIHRoZSBQQUNLQUdFX1ZFUlNJT04gb3IgVkVSU0lPTiBlbnZpcm9ubWVudAordmFyaWFibGVzLgorCitUaGUgcmVzdWx0aW5nIGFyY2hpdmUgd2lsbCBiZSBhdCB0aGUgdG9wIG9mIHRoZSBwYWNrYWdlIGJ1aWxkCitkaXJlY3RvcnkuCisKKyMjIyBHZW5lcmF0aW5nIE9wdGlvbmFsIFByZWJ1aWx0IEJpbmFyeSBEaXN0cmlidXRpb25zCisKK1RvIGdlbmVyYXRlIGFuIG9wdGlvbmFsIG5sYnVpbGQtYXV0b3Rvb2xzIHByZWJ1aWx0IGJpbmFyeQorZGlzdHJpYnV0aW9uLCBzaW1wbHkgaW52b2tlOgorCitgYGAKKyUgbWFrZSB0b29sc2Rpc3QKK2BgYAorCitUaGUgcGFja2FnZSB2ZXJzaW9uIHdpbGwgY29tZSBmcm9tIHRoZSBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbSwgaWYKK2F2YWlsYWJsZTsgb3RoZXJ3aXNlLCBmcm9tIGAuZGVmYXVsdC12ZXJzaW9uYC4gVGhlIHZlcnNpb24gY2FuIGJlCitvdmVycmlkZGVuIGZyb20gdGhlIF9QQUNLQUdFX1ZFUlNJT05fIG9yIF9WRVJTSU9OXyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKK1RoZSByZXN1bHRpbmcgYXJjaGl2ZXMgd2lsbCBiZSBhdCB0aGUgdG9wIG9mIHRoZSBwYWNrYWdlIGJ1aWxkCitkaXJlY3RvcnkuCisKKyMjIyBVcGdyYWRpbmcgR05VIEF1dG90b29scyBQYWNrYWdlcworCitUbyBjaGFuZ2Ugb3IgdXBncmFkZSBHTlUgYXV0b3Rvb2xzIHBhY2thZ2VzIHVzZWQgYnkgbmxidWlsZC1hdXRvdG9vbHMsCitlZGl0IHRoZSBtZXRhZGF0YSBmb3IgZWFjaCBwYWNrYWdlIGluIHRvb2xzL3BhY2thZ2VzL19wYWNrYWdlXy8KK19wYWNrYWdlXy57dXJsLHZlcnNpb259LgorCisjIFZlcnNpb25pbmcKKworbmxidWlsZC1hdXRvb2xzIGZvbGxvd3MgdGhlIFtTZW1hbnRpYyBWZXJzaW9uaW5nIGd1aWRlbGluZXNdKGh0dHA6Ly9zZW12ZXIub3JnLykgCitmb3IgcmVsZWFzZSBjeWNsZSB0cmFuc3BhcmVuY3kgYW5kIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCisjIExpY2Vuc2UKKworbmxidWlsZC1hdXRvb2xzIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBbQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIGxpY2Vuc2VdKGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQXBhY2hlLTIuMCkuIAorU2VlIHRoZSBgTElDRU5TRWAgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2FyLWxpYiBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvYXItbGliCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlMjMwMWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2FyLWxpYgpAQCAtMCwwICsxLDI3MCBAQAorIyEgL2Jpbi9zaAorIyBXcmFwcGVyIGZvciBNaWNyb3NvZnQgbGliLmV4ZQorCittZT1hci1saWIKK3NjcmlwdHZlcnNpb249MjAxMi0wMy0wMS4wODsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBQZXRlciBSb3NpbiA8cGVkYUBseXNhdG9yLmxpdS5zZT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCisKKyMgZnVuY19lcnJvciBtZXNzYWdlCitmdW5jX2Vycm9yICgpCit7CisgIGVjaG8gIiRtZTogJDEiIDE+JjIKKyAgZXhpdCAxCit9CisKK2ZpbGVfY29udj0KKworIyBmdW5jX2ZpbGVfY29udiBidWlsZF9maWxlCisjIENvbnZlcnQgYSAkYnVpbGQgZmlsZSB0byAkaG9zdCBmb3JtIGFuZCBzdG9yZSBpdCBpbiAkZmlsZQorIyBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBXaW5kb3dzIGhvc3RzLgorZnVuY19maWxlX2NvbnYgKCkKK3sKKyAgZmlsZT0kMQorICBjYXNlICRmaWxlIGluCisgICAgLyB8IC9bIS9dKikgIyBhYnNvbHV0ZSBmaWxlLCBhbmQgbm90IGEgVU5DIGZpbGUKKyAgICAgIGlmIHRlc3QgLXogIiRmaWxlX2NvbnYiOyB0aGVuCisJIyBsYXppbHkgZGV0ZXJtaW5lIGhvdyB0byBjb252ZXJ0IGFicyBmaWxlcworCWNhc2UgYHVuYW1lIC1zYCBpbgorCSAgTUlOR1cqKQorCSAgICBmaWxlX2NvbnY9bWluZ3cKKwkgICAgOzsKKwkgIENZR1dJTiopCisJICAgIGZpbGVfY29udj1jeWd3aW4KKwkgICAgOzsKKwkgICopCisJICAgIGZpbGVfY29udj13aW5lCisJICAgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGNhc2UgJGZpbGVfY29udiBpbgorCW1pbmd3KQorCSAgZmlsZT1gY21kIC8vQyBlY2hvICIkZmlsZSAiIHwgc2VkIC1lICdzLyJcKC4qXCkgIiAqJC9cMS8nYAorCSAgOzsKKwljeWd3aW4pCisJICBmaWxlPWBjeWdwYXRoIC1tICIkZmlsZSIgfHwgZWNobyAiJGZpbGUiYAorCSAgOzsKKwl3aW5lKQorCSAgZmlsZT1gd2luZXBhdGggLXcgIiRmaWxlIiB8fCBlY2hvICIkZmlsZSJgCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfYXRfZmlsZSBhdF9maWxlIG9wZXJhdGlvbiBhcmNoaXZlCisjIEl0ZXJhdGUgb3ZlciBhbGwgbWVtYmVycyBpbiBBVF9GSUxFIHBlcmZvcm1pbmcgT1BFUkFUSU9OIG9uIEFSQ0hJVkUKKyMgZm9yIGVhY2ggb2YgdGhlbS4KKyMgV2hlbiBpbnRlcnByZXRpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIEBGSUxFLCBkbyBOT1QgdXNlIGZ1bmNfZmlsZV9jb252LAorIyBzaW5jZSB0aGUgdXNlciB3b3VsZCBuZWVkIHRvIHN1cHBseSBwcmVjb252ZXJ0ZWQgZmlsZSBuYW1lcyB0bworIyBiaW51dGlscyBhciwgYXQgbGVhc3QgZm9yIE1pbkdXLgorZnVuY19hdF9maWxlICgpCit7CisgIG9wZXJhdGlvbj0kMgorICBhcmNoaXZlPSQzCisgIGF0X2ZpbGVfY29udGVudHM9YGNhdCAiJDEiYAorICBldmFsIHNldCB4ICIkYXRfZmlsZV9jb250ZW50cyIKKyAgc2hpZnQKKworICBmb3IgbWVtYmVyCisgIGRvCisgICAgJEFSIC1OT0xPR08gJG9wZXJhdGlvbjoiJG1lbWJlciIgIiRhcmNoaXZlIiB8fCBleGl0ICQ/CisgIGRvbmUKK30KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZnVuY19lcnJvciAibm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxFT0YKK1VzYWdlOiAkbWUgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBBQ1RJT04gQVJDSElWRSBbTUVNQkVSLi4uXQorCitNZW1iZXJzIG1heSBiZSBzcGVjaWZpZWQgaW4gYSBmaWxlIG5hbWVkIHdpdGggQEZJTEUuCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gIiRtZSwgdmVyc2lvbiAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAkIyAtbHQgMzsgdGhlbgorICBmdW5jX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgcHJvZ3JhbSwgYW4gYWN0aW9uIGFuZCBhbiBhcmNoaXZlIgorZmkKKworQVI9JDEKK3NoaWZ0Cit3aGlsZSA6CitkbworICBpZiB0ZXN0ICQjIC1sdCAyOyB0aGVuCisgICAgZnVuY19lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHByb2dyYW0sIGFuIGFjdGlvbiBhbmQgYW4gYXJjaGl2ZSIKKyAgZmkKKyAgY2FzZSAkMSBpbgorICAgIC1saWIgfCAtTElCIFwKKyAgICB8IC1sdGNnIHwgLUxUQ0cgXAorICAgIHwgLW1hY2hpbmUqIHwgLU1BQ0hJTkUqIFwKKyAgICB8IC1zdWJzeXN0ZW0qIHwgLVNVQlNZU1RFTSogXAorICAgIHwgLXZlcmJvc2UgfCAtVkVSQk9TRSBcCisgICAgfCAtd3gqIHwgLVdYKiApCisgICAgICBBUj0iJEFSICQxIgorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFjdGlvbj0kMQorICAgICAgc2hpZnQKKyAgICAgIGJyZWFrCisgICAgICA7OworICBlc2FjCitkb25lCitvcmlnX2FyY2hpdmU9JDEKK3NoaWZ0CitmdW5jX2ZpbGVfY29udiAiJG9yaWdfYXJjaGl2ZSIKK2FyY2hpdmU9JGZpbGUKKworIyBzdHJpcCBsZWFkaW5nIGRhc2ggaW4gJGFjdGlvbgorYWN0aW9uPSR7YWN0aW9uIy19CisKK2RlbGV0ZT0KK2V4dHJhY3Q9CitsaXN0PQorcXVpY2s9CityZXBsYWNlPQoraW5kZXg9CitjcmVhdGU9CisKK3doaWxlIHRlc3QgLW4gIiRhY3Rpb24iCitkbworICBjYXNlICRhY3Rpb24gaW4KKyAgICBkKikgZGVsZXRlPXllcyAgOzsKKyAgICB4KikgZXh0cmFjdD15ZXMgOzsKKyAgICB0KikgbGlzdD15ZXMgICAgOzsKKyAgICBxKikgcXVpY2s9eWVzICAgOzsKKyAgICByKikgcmVwbGFjZT15ZXMgOzsKKyAgICBzKikgaW5kZXg9eWVzICAgOzsKKyAgICBTKikgICAgICAgICAgICAgOzsgIyB0aGUgaW5kZXggaXMgYWx3YXlzIHVwZGF0ZWQgaW1wbGljaXRseQorICAgIGMqKSBjcmVhdGU9eWVzICA7OworICAgIHUqKSAgICAgICAgICAgICA7OyAjIFRPRE86IGRvbid0IGlnbm9yZSB0aGUgdXBkYXRlIG1vZGlmaWVyCisgICAgdiopICAgICAgICAgICAgIDs7ICMgVE9ETzogZG9uJ3QgaWdub3JlIHRoZSB2ZXJib3NlIG1vZGlmaWVyCisgICAgKikKKyAgICAgIGZ1bmNfZXJyb3IgInVua25vd24gYWN0aW9uIHNwZWNpZmllZCIKKyAgICAgIDs7CisgIGVzYWMKKyAgYWN0aW9uPSR7YWN0aW9uIz99Citkb25lCisKK2Nhc2UgJGRlbGV0ZSRleHRyYWN0JGxpc3QkcXVpY2skcmVwbGFjZSwkaW5kZXggaW4KKyAgeWVzLCogfCAseWVzKQorICAgIDs7CisgIHllc3llcyopCisgICAgZnVuY19lcnJvciAibW9yZSB0aGFuIG9uZSBhY3Rpb24gc3BlY2lmaWVkIgorICAgIDs7CisgICopCisgICAgZnVuY19lcnJvciAibm8gYWN0aW9uIHNwZWNpZmllZCIKKyAgICA7OworZXNhYworCitpZiB0ZXN0IC1uICIkZGVsZXRlIjsgdGhlbgorICBpZiB0ZXN0ICEgLWYgIiRvcmlnX2FyY2hpdmUiOyB0aGVuCisgICAgZnVuY19lcnJvciAiYXJjaGl2ZSBub3QgZm91bmQiCisgIGZpCisgIGZvciBtZW1iZXIKKyAgZG8KKyAgICBjYXNlICQxIGluCisgICAgICBAKikKKyAgICAgICAgZnVuY19hdF9maWxlICIkezEjQH0iIC1SRU1PVkUgIiRhcmNoaXZlIgorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgZnVuY19maWxlX2NvbnYgIiQxIgorICAgICAgICAkQVIgLU5PTE9HTyAtUkVNT1ZFOiIkZmlsZSIgIiRhcmNoaXZlIiB8fCBleGl0ICQ/CisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKK2VsaWYgdGVzdCAtbiAiJGV4dHJhY3QiOyB0aGVuCisgIGlmIHRlc3QgISAtZiAiJG9yaWdfYXJjaGl2ZSI7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJhcmNoaXZlIG5vdCBmb3VuZCIKKyAgZmkKKyAgaWYgdGVzdCAkIyAtZ3QgMDsgdGhlbgorICAgIGZvciBtZW1iZXIKKyAgICBkbworICAgICAgY2FzZSAkMSBpbgorICAgICAgICBAKikKKyAgICAgICAgICBmdW5jX2F0X2ZpbGUgIiR7MSNAfSIgLUVYVFJBQ1QgIiRhcmNoaXZlIgorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgZnVuY19maWxlX2NvbnYgIiQxIgorICAgICAgICAgICRBUiAtTk9MT0dPIC1FWFRSQUNUOiIkZmlsZSIgIiRhcmNoaXZlIiB8fCBleGl0ICQ/CisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgIGVsc2UKKyAgICAkQVIgLU5PTE9HTyAtTElTVCAiJGFyY2hpdmUiIHwgc2VkIC1lICdzL1xcL1xcXFwvZycgfCB3aGlsZSByZWFkIG1lbWJlcgorICAgIGRvCisgICAgICAkQVIgLU5PTE9HTyAtRVhUUkFDVDoiJG1lbWJlciIgIiRhcmNoaXZlIiB8fCBleGl0ICQ/CisgICAgZG9uZQorICBmaQorCitlbGlmIHRlc3QgLW4gIiRxdWljayRyZXBsYWNlIjsgdGhlbgorICBpZiB0ZXN0ICEgLWYgIiRvcmlnX2FyY2hpdmUiOyB0aGVuCisgICAgaWYgdGVzdCAteiAiJGNyZWF0ZSI7IHRoZW4KKyAgICAgIGVjaG8gIiRtZTogY3JlYXRpbmcgJG9yaWdfYXJjaGl2ZSIKKyAgICBmaQorICAgIG9yaWdfYXJjaGl2ZT0KKyAgZWxzZQorICAgIG9yaWdfYXJjaGl2ZT0kYXJjaGl2ZQorICBmaQorCisgIGZvciBtZW1iZXIKKyAgZG8KKyAgICBjYXNlICQxIGluCisgICAgQCopCisgICAgICBmdW5jX2ZpbGVfY29udiAiJHsxI0B9IgorICAgICAgc2V0IHggIiRAIiAiQCRmaWxlIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZnVuY19maWxlX2NvbnYgIiQxIgorICAgICAgc2V0IHggIiRAIiAiJGZpbGUiCisgICAgICA7OworICAgIGVzYWMKKyAgICBzaGlmdAorICAgIHNoaWZ0CisgIGRvbmUKKworICBpZiB0ZXN0IC1uICIkb3JpZ19hcmNoaXZlIjsgdGhlbgorICAgICRBUiAtTk9MT0dPIC1PVVQ6IiRhcmNoaXZlIiAiJG9yaWdfYXJjaGl2ZSIgIiRAIiB8fCBleGl0ICQ/CisgIGVsc2UKKyAgICAkQVIgLU5PTE9HTyAtT1VUOiIkYXJjaGl2ZSIgIiRAIiB8fCBleGl0ICQ/CisgIGZpCisKK2VsaWYgdGVzdCAtbiAiJGxpc3QiOyB0aGVuCisgIGlmIHRlc3QgISAtZiAiJG9yaWdfYXJjaGl2ZSI7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJhcmNoaXZlIG5vdCBmb3VuZCIKKyAgZmkKKyAgJEFSIC1OT0xPR08gLUxJU1QgIiRhcmNoaXZlIiB8fCBleGl0ICQ/CitmaQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9jb21waWxlIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9jb21waWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxZjQ3NDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2NvbXBpbGUKQEAgLTAsMCArMSwzMTAgQEAKKyMhIC9iaW4vc2gKKyMgV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kICctYyAtbycuCisKK3NjcmlwdHZlcnNpb249MjAxMi0wMS0wNC4xNzsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDksIDIwMTAsIDIwMTIgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5QGN5Z251cy5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworbmw9JworJworCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IHRvb2xzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgd2hpdGVzcGFjZSB1c2FnZS4KK0lGUz0iICIiCSRubCIKKworZmlsZV9jb252PQorCisjIGZ1bmNfZmlsZV9jb252IGJ1aWxkX2ZpbGUgbGF6eQorIyBDb252ZXJ0IGEgJGJ1aWxkIGZpbGUgdG8gJGhvc3QgZm9ybSBhbmQgc3RvcmUgaXQgaW4gJGZpbGUKKyMgQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgV2luZG93cyBob3N0cy4gSWYgdGhlIGRldGVybWluZWQgY29udmVyc2lvbgorIyB0eXBlIGlzIGxpc3RlZCBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB3aWxsCisjIHRha2UgcGxhY2UuCitmdW5jX2ZpbGVfY29udiAoKQoreworICBmaWxlPSQxCisgIGNhc2UgJGZpbGUgaW4KKyAgICAvIHwgL1shL10qKSAjIGFic29sdXRlIGZpbGUsIGFuZCBub3QgYSBVTkMgZmlsZQorICAgICAgaWYgdGVzdCAteiAiJGZpbGVfY29udiI7IHRoZW4KKwkjIGxhemlseSBkZXRlcm1pbmUgaG93IHRvIGNvbnZlcnQgYWJzIGZpbGVzCisJY2FzZSBgdW5hbWUgLXNgIGluCisJICBNSU5HVyopCisJICAgIGZpbGVfY29udj1taW5ndworCSAgICA7OworCSAgQ1lHV0lOKikKKwkgICAgZmlsZV9jb252PWN5Z3dpbgorCSAgICA7OworCSAgKikKKwkgICAgZmlsZV9jb252PXdpbmUKKwkgICAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgY2FzZSAkZmlsZV9jb252LywkMiwgaW4KKwkqLCRmaWxlX2NvbnYsKikKKwkgIDs7CisJbWluZ3cvKikKKwkgIGZpbGU9YGNtZCAvL0MgZWNobyAiJGZpbGUgIiB8IHNlZCAtZSAncy8iXCguKlwpICIgKiQvXDEvJ2AKKwkgIDs7CisJY3lnd2luLyopCisJICBmaWxlPWBjeWdwYXRoIC1tICIkZmlsZSIgfHwgZWNobyAiJGZpbGUiYAorCSAgOzsKKwl3aW5lLyopCisJICBmaWxlPWB3aW5lcGF0aCAtdyAiJGZpbGUiIHx8IGVjaG8gIiRmaWxlImAKKwkgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCit9CisKKyMgZnVuY19jbF93cmFwcGVyIGNsIGFyZy4uLgorIyBBZGp1c3QgY29tcGlsZSBjb21tYW5kIHRvIHN1aXQgY2wKK2Z1bmNfY2xfd3JhcHBlciAoKQoreworICAjIEFzc3VtZSBhIGNhcGFibGUgc2hlbGwKKyAgbGliX3BhdGg9CisgIHNoYXJlZD06CisgIGxpbmtlcl9vcHRzPQorICBmb3IgYXJnCisgIGRvCisgICAgaWYgdGVzdCAtbiAiJGVhdCI7IHRoZW4KKyAgICAgIGVhdD0KKyAgICBlbHNlCisgICAgICBjYXNlICQxIGluCisJLW8pCisJICAjIGNvbmZpZ3VyZSBtaWdodCBjaG9vc2UgdG8gcnVuIGNvbXBpbGUgYXMgJ2NvbXBpbGUgY2MgLW8gZm9vIGZvby5jJy4KKwkgIGVhdD0xCisJICBjYXNlICQyIGluCisJICAgICoubyB8ICouW29PXVtiQl1bakpdKQorCSAgICAgIGZ1bmNfZmlsZV9jb252ICIkMiIKKwkgICAgICBzZXQgeCAiJEAiIC1GbyIkZmlsZSIKKwkgICAgICBzaGlmdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgZnVuY19maWxlX2NvbnYgIiQyIgorCSAgICAgIHNldCB4ICIkQCIgLUZlIiRmaWxlIgorCSAgICAgIHNoaWZ0CisJICAgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJLUkqKQorCSAgZnVuY19maWxlX2NvbnYgIiR7MSMtSX0iIG1pbmd3CisJICBzZXQgeCAiJEAiIC1JIiRmaWxlIgorCSAgc2hpZnQKKwkgIDs7CisJLWwqKQorCSAgbGliPSR7MSMtbH0KKwkgIGZvdW5kPW5vCisJICBzYXZlX0lGUz0kSUZTCisJICBJRlM9JzsnCisJICBmb3IgZGlyIGluICRsaWJfcGF0aCAkTElCCisJICBkbworCSAgICBJRlM9JHNhdmVfSUZTCisJICAgIGlmICRzaGFyZWQgJiYgdGVzdCAtZiAiJGRpci8kbGliLmRsbC5saWIiOyB0aGVuCisJICAgICAgZm91bmQ9eWVzCisJICAgICAgc2V0IHggIiRAIiAiJGRpci8kbGliLmRsbC5saWIiCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAtZiAiJGRpci8kbGliLmxpYiI7IHRoZW4KKwkgICAgICBmb3VuZD15ZXMKKwkgICAgICBzZXQgeCAiJEAiICIkZGlyLyRsaWIubGliIgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICBkb25lCisJICBJRlM9JHNhdmVfSUZTCisKKwkgIHRlc3QgIiRmb3VuZCIgIT0geWVzICYmIHNldCB4ICIkQCIgIiRsaWIubGliIgorCSAgc2hpZnQKKwkgIDs7CisJLUwqKQorCSAgZnVuY19maWxlX2NvbnYgIiR7MSMtTH0iCisJICBpZiB0ZXN0IC16ICIkbGliX3BhdGgiOyB0aGVuCisJICAgIGxpYl9wYXRoPSRmaWxlCisJICBlbHNlCisJICAgIGxpYl9wYXRoPSIkbGliX3BhdGg7JGZpbGUiCisJICBmaQorCSAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAtTElCUEFUSDokZmlsZSIKKwkgIDs7CisJLXN0YXRpYykKKwkgIHNoYXJlZD1mYWxzZQorCSAgOzsKKwktV2wsKikKKwkgIGFyZz0kezEjLVdsLH0KKwkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCSAgZm9yIGZsYWcgaW4gJGFyZzsgZG8KKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGxpbmtlcl9vcHRzPSIkbGlua2VyX29wdHMgJGZsYWciCisJICBkb25lCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIDs7CisJLVhsaW5rZXIpCisJICBlYXQ9MQorCSAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAkMiIKKwkgIDs7CisJLSopCisJICBzZXQgeCAiJEAiICIkMSIKKwkgIHNoaWZ0CisJICA7OworCSouY2MgfCAqLkNDIHwgKi5jeHggfCAqLkNYWCB8ICouW2NDXSsrKQorCSAgZnVuY19maWxlX2NvbnYgIiQxIgorCSAgc2V0IHggIiRAIiAtVHAiJGZpbGUiCisJICBzaGlmdAorCSAgOzsKKwkqLmMgfCAqLmNwcCB8ICouQ1BQIHwgKi5saWIgfCAqLkxJQiB8ICouTGliIHwgKi5PQkogfCAqLm9iaiB8ICouW29PXSkKKwkgIGZ1bmNfZmlsZV9jb252ICIkMSIgbWluZ3cKKwkgIHNldCB4ICIkQCIgIiRmaWxlIgorCSAgc2hpZnQKKwkgIDs7CisJKikKKwkgIHNldCB4ICIkQCIgIiQxIgorCSAgc2hpZnQKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBzaGlmdAorICBkb25lCisgIGlmIHRlc3QgLW4gIiRsaW5rZXJfb3B0cyI7IHRoZW4KKyAgICBsaW5rZXJfb3B0cz0iLWxpbmskbGlua2VyX29wdHMiCisgIGZpCisgIGV4ZWMgIiRAIiAkbGlua2VyX29wdHMKKyAgZXhpdCAxCit9CisKK2VhdD0KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBjb21waWxlIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1dyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCAnLWMgLW8nLgorUmVtb3ZlICctbyBkZXN0Lm8nIGZyb20gQVJHUywgcnVuIFBST0dSQU0gd2l0aCB0aGUgcmVtYWluaW5nCithcmd1bWVudHMsIGFuZCByZW5hbWUgdGhlIG91dHB1dCBhcyBleHBlY3RlZC4KKworSWYgeW91IGFyZSB0cnlpbmcgdG8gYnVpbGQgYSB3aG9sZSBwYWNrYWdlIHRoaXMgaXMgbm90IHRoZQorcmlnaHQgc2NyaXB0IHRvIHJ1bjogcGxlYXNlIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZpbGUgJ0lOU1RBTEwnLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJjb21waWxlICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworICBjbCB8ICpbL1xcXWNsIHwgY2wuZXhlIHwgKlsvXFxdY2wuZXhlICkKKyAgICBmdW5jX2NsX3dyYXBwZXIgIiRAIiAgICAgICMgRG9lc24ndCByZXR1cm4uLi4KKyAgICA7OworZXNhYworCitvZmlsZT0KK2NmaWxlPQorCitmb3IgYXJnCitkbworICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgorICAgIGVhdD0KKyAgZWxzZQorICAgIGNhc2UgJDEgaW4KKyAgICAgIC1vKQorCSMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyAnY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorCSMgU28gd2Ugc3RyaXAgJy1vIGFyZycgb25seSBpZiBhcmcgaXMgYW4gb2JqZWN0LgorCWVhdD0xCisJY2FzZSAkMiBpbgorCSAgKi5vIHwgKi5vYmopCisJICAgIG9maWxlPSQyCisJICAgIDs7CisJICAqKQorCSAgICBzZXQgeCAiJEAiIC1vICIkMiIKKwkgICAgc2hpZnQKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICouYykKKwljZmlsZT0kMQorCXNldCB4ICIkQCIgIiQxIgorCXNoaWZ0CisJOzsKKyAgICAgICopCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAteiAiJG9maWxlIiB8fCB0ZXN0IC16ICIkY2ZpbGUiOyB0aGVuCisgICMgSWYgbm8gJy1vJyBvcHRpb24gd2FzIHNlZW4gdGhlbiB3ZSBtaWdodCBoYXZlIGJlZW4gaW52b2tlZCBmcm9tIGEKKyAgIyBwYXR0ZXJuIHJ1bGUgd2hlcmUgd2UgZG9uJ3QgbmVlZCBvbmUuICBUaGF0IGlzIG9rIC0tIHRoaXMgaXMgYQorICAjIG5vcm1hbCBjb21waWxhdGlvbiB0aGF0IHRoZSBsb3NpbmcgY29tcGlsZXIgY2FuIGhhbmRsZS4gIElmIG5vCisgICMgJy5jJyBmaWxlIHdhcyBzZWVuIHRoZW4gd2UgYXJlIHByb2JhYmx5IGxpbmtpbmcuICBUaGF0IGlzIGFsc28KKyAgIyBvay4KKyAgZXhlYyAiJEAiCitmaQorCisjIE5hbWUgb2YgZmlsZSB3ZSBleHBlY3QgY29tcGlsZXIgdG8gY3JlYXRlLgorY29maWxlPWBlY2hvICIkY2ZpbGUiIHwgc2VkICdzfF4uKltcXC9dfHw7IHN8XlthLXpBLVpdOnx8OyBzL1wuYyQvLm8vJ2AKKworIyBDcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5LgorIyBOb3RlOiB1c2UgJ1svXFw6Li1dJyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgc2FtZSBuYW1lCisjIHRoYXQgd2UgYXJlIHVzaW5nIGZvciB0aGUgLm8gZmlsZS4gIEFsc28sIGJhc2UgdGhlIG5hbWUgb24gdGhlIGV4cGVjdGVkCisjIG9iamVjdCBmaWxlIG5hbWUsIHNpbmNlIHRoYXQgaXMgd2hhdCBtYXR0ZXJzIHdpdGggYSBwYXJhbGxlbCBidWlsZC4KK2xvY2tkaXI9YGVjaG8gIiRjb2ZpbGUiIHwgc2VkIC1lICdzfFsvXFw6Li1dfF98ZydgLmQKK3doaWxlIHRydWU7IGRvCisgIGlmIG1rZGlyICIkbG9ja2RpciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYnJlYWsKKyAgZmkKKyAgc2xlZXAgMQorZG9uZQorIyBGSVhNRTogcmFjZSBjb25kaXRpb24gaGVyZSBpZiB1c2VyIGtpbGxzIGJldHdlZW4gbWtkaXIgYW5kIHRyYXAuCit0cmFwICJybWRpciAnJGxvY2tkaXInOyBleGl0IDEiIDEgMiAxNQorCisjIFJ1biB0aGUgY29tcGlsZS4KKyIkQCIKK3JldD0kPworCitpZiB0ZXN0IC1mICIkY29maWxlIjsgdGhlbgorICB0ZXN0ICIkY29maWxlIiA9ICIkb2ZpbGUiIHx8IG12ICIkY29maWxlIiAiJG9maWxlIgorZWxpZiB0ZXN0IC1mICIke2NvZmlsZX1iaiI7IHRoZW4KKyAgdGVzdCAiJHtjb2ZpbGV9YmoiID0gIiRvZmlsZSIgfHwgbXYgIiR7Y29maWxlfWJqIiAiJG9maWxlIgorZmkKKworcm1kaXIgIiRsb2NrZGlyIgorZXhpdCAkcmV0CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2NvbmZpZy5ndWVzcyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvY29uZmlnLmd1ZXNzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ2MjJhNDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2NvbmZpZy5ndWVzcwpAQCAtMCwwICsxLDE1MzAgQEAKKyMhIC9iaW4vc2gKKyMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwKKyMgICAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMTItMDItMTAnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLiAgUGxlYXNlIHNlbmQgcGF0Y2hlcyAoY29udGV4dAorIyBkaWZmIGZvcm1hdCkgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGFuZCBpbmNsdWRlIGEgQ2hhbmdlTG9nCisjIGVudHJ5LgorIworIyBUaGlzIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZSBzaW1pbGFyIHRvCisjIGNvbmZpZy5zdWIuICBJZiBpdCBzdWNjZWVkcywgaXQgcHJpbnRzIHRoZSBzeXN0ZW0gbmFtZSBvbiBzdGRvdXQsIGFuZAorIyBleGl0cyB3aXRoIDAuICBPdGhlcndpc2UsIGl0IGV4aXRzIHdpdGggMS4KKyMKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAorCittZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXQorCitPdXRwdXQgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBvZiB0aGUgc3lzdGVtIFxgJG1lJyBpcyBydW4gb24uCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5ndWVzcyAoJHRpbWVzdGFtcCkKKworT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgorQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMgorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCisgICAgICAgZXhpdCAxIDs7CisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgIGV4aXQgMQorZmkKKwordHJhcCAnZXhpdCAxJyAxIDIgMTUKKworIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQorIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcworIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCisjIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCisKKyMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKKyMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KKworIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgorCitzZXRfY2NfZm9yX2J1aWxkPScKK3RyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwordHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKKzogJHtUTVBESVI9L3RtcH0gOworIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKKyB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAorIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAorIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKK2R1bW15PSR0bXAvZHVtbXkgOwordG1wZmlsZXM9IiRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgJGR1bW15IiA7CitjYXNlICRDQ19GT1JfQlVJTEQsJEhPU1RfQ0MsJENDIGluCisgLCwpICAgIGVjaG8gImludCB4OyIgPiAkZHVtbXkuYyA7CisJZm9yIGMgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbworCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOworCSAgZmkgOworCWRvbmUgOworCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCisJICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOworCWZpCisJOzsKKyAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKK2VzYWMgOyBzZXRfY2NfZm9yX2J1aWxkPSA7JworCisjIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgorIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCitpZiAodGVzdCAtZiAvLmF0dGJpbi91bmFtZSkgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAorZmkKKworVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCitVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KK1VOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCitVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KKworIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgorCitjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCisgICAgKjpOZXRCU0Q6KjoqKQorCSMgTmV0QlNEIChuYnNkKSB0YXJnZXRzIHNob3VsZCAod2hlcmUgYXBwbGljYWJsZSkgbWF0Y2ggb25lIG9yCisJIyBtb3JlIG9mIHRoZSB0dXBsZXM6ICotKi1uZXRic2RlbGYqLCAqLSotbmV0YnNkYW91dCosCisJIyAqLSotbmV0YnNkZWNvZmYqIGFuZCAqLSotbmV0YnNkKi4gIEZvciB0YXJnZXRzIHRoYXQgcmVjZW50bHkKKwkjIHN3aXRjaGVkIHRvIEVMRiwgKi0qLW5ldGJzZCogd291bGQgc2VsZWN0IHRoZSBvbGQKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4gIFRoaXMgcHJvdmlkZXMgYm90aCBmb3J3YXJkCisJIyBjb21wYXRpYmlsaXR5IGFuZCBhIGNvbnNpc3RlbnQgbWVjaGFuaXNtIGZvciBzZWxlY3RpbmcgdGhlCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuCisJIworCSMgTm90ZTogTmV0QlNEIGRvZXNuJ3QgcGFydGljdWxhcmx5IGNhcmUgYWJvdXQgdGhlIHZlbmRvcgorCSMgcG9ydGlvbiBvZiB0aGUgbmFtZS4gIFdlIGFsd2F5cyBzZXQgaXQgdG8gInVua25vd24iLgorCXN5c2N0bD0ic3lzY3RsIC1uIGh3Lm1hY2hpbmVfYXJjaCIKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YCgvc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgL3Vzci9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duKWAKKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybWViKSBtYWNoaW5lPWFybWViLXVua25vd24gOzsKKwkgICAgYXJtKikgbWFjaGluZT1hcm0tdW5rbm93biA7OworCSAgICBzaDNlbCkgbWFjaGluZT1zaGwtdW5rbm93biA7OworCSAgICBzaDNlYikgbWFjaGluZT1zaC11bmtub3duIDs7CisJICAgIHNoNWVsKSBtYWNoaW5lPXNoNWxlLXVua25vd24gOzsKKwkgICAgKikgbWFjaGluZT0ke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93biA7OworCWVzYWMKKwkjIFRoZSBPcGVyYXRpbmcgU3lzdGVtIGluY2x1ZGluZyBvYmplY3QgZm9ybWF0LCBpZiBpdCBoYXMgc3dpdGNoZWQKKwkjIHRvIEVMRiByZWNlbnRseSwgb3Igd2lsbCBpbiB0aGUgZnV0dXJlLgorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJCXwgZ3JlcCAtcSBfX0VMRl9fCisJCXRoZW4KKwkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KKwkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPworCQkgICAgb3M9bmV0YnNkCisJCWVsc2UKKwkJICAgIG9zPW5ldGJzZGVsZgorCQlmaQorCQk7OworCSAgICAqKQorCQlvcz1uZXRic2QKKwkJOzsKKwllc2FjCisJIyBUaGUgT1MgcmVsZWFzZQorCSMgRGViaWFuIEdOVS9OZXRCU0QgbWFjaGluZXMgaGF2ZSBhIGRpZmZlcmVudCB1c2VybGFuZCwgYW5kCisJIyB0aHVzLCBuZWVkIGEgZGlzdGluY3QgdHJpcGxldC4gSG93ZXZlciwgdGhleSBkbyBub3QgbmVlZAorCSMga2VybmVsIHZlcnNpb24gaW5mb3JtYXRpb24sIHNvIGl0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEKKwkjIHN1aXRhYmxlIHRhZywgaW4gdGhlIHN0eWxlIG9mIGxpbnV4LWdudS4KKwljYXNlICIke1VOQU1FX1ZFUlNJT059IiBpbgorCSAgICBEZWJpYW4qKQorCQlyZWxlYXNlPSctZ251JworCQk7OworCSAgICAqKQorCQlyZWxlYXNlPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stX10uKi9cLi8nYAorCQk7OworCWVzYWMKKwkjIFNpbmNlIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTToKKwkjIGNvbnRhaW5zIHJlZHVuZGFudCBpbmZvcm1hdGlvbiwgdGhlIHNob3J0ZXIgZm9ybToKKwkjIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNIGlzIHVzZWQuCisJZWNobyAiJHttYWNoaW5lfS0ke29zfSR7cmVsZWFzZX0iCisJZXhpdCA7OworICAgICo6T3BlbkJTRDoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpla2tvQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1la2tvYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlNvbGlkQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb2xpZGJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWFjcHBjOk1pckJTRDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk1pckJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhbHBoYTpPU0YxOio6KikKKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9J2AKKwkJOzsKKwkqNS4qKQorCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAorCQk7OworCWVzYWMKKwkjIEFjY29yZGluZyB0byBDb21wYXEsIC91c3Ivc2Jpbi9wc3JpbmZvIGhhcyBiZWVuIGF2YWlsYWJsZSBvbgorCSMgT1NGLzEgYW5kIFRydTY0IHN5c3RlbXMgcHJvZHVjZWQgc2luY2UgMTk5NS4gIEkgaG9wZSB0aGF0CisJIyBjb3ZlcnMgbW9zdCBzeXN0ZW1zIHJ1bm5pbmcgdG9kYXkuICBUaGlzIGNvZGUgcGlwZXMgdGhlIENQVQorCSMgdHlwZXMgdGhyb3VnaCBoZWFkIC1uIDEsIHNvIHdlIG9ubHkgZGV0ZWN0IHRoZSB0eXBlIG9mIENQVSAwLgorCUFMUEhBX0NQVV9UWVBFPWAvdXNyL3NiaW4vcHNyaW5mbyAtdiB8IHNlZCAtbiAtZSAncy9eICBUaGUgYWxwaGEgXCguKlwpIHByb2Nlc3Nvci4qJC9cMS9wJyB8IGhlYWQgLW4gMWAKKwljYXNlICIkQUxQSEFfQ1BVX1RZUEUiIGluCisJICAgICJFVjQgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY0LjUgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiTENBNCAoMjEwNjYvMjEwNjgpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjUgKDIxMTY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1IiA7OworCSAgICAiRVY1LjYgKDIxMTY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NTYiIDs7CisJICAgICJFVjUuNiAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU2IiA7OworCSAgICAiRVY1LjcgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NyIgOzsKKwkgICAgIkVWNiAoMjEyNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjYiIDs7CisJICAgICJFVjYuNyAoMjEyNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2NyIgOzsKKwkgICAgIkVWNi44Q0IgKDIxMjY0QykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOEFMICgyMTI2NEIpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhDWCAoMjEyNjREKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi45QSAoMjEyNjQvRVY2OUEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY5IiA7OworCSAgICAiRVY3ICgyMTM2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NyIgOzsKKwkgICAgIkVWNy45ICgyMTM2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjc5IiA7OworCWVzYWMKKwkjIEEgUG4ubiB2ZXJzaW9uIGlzIGEgcGF0Y2hlZCB2ZXJzaW9uLgorCSMgQSBWbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCB2ZXJzaW9uLgorCSMgQSBUbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCBmaWVsZCB0ZXN0IHZlcnNpb24uCisJIyBBIFhuLm4gdmVyc2lvbiBpcyBhbiB1bnJlbGVhc2VkIGV4cGVyaW1lbnRhbCBiYXNlbGV2ZWwuCisJIyAxLjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUgLXIuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1vc2ZgZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL15bUFZUWF0vLycgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJIyBSZXNldCBFWElUIHRyYXAgYmVmb3JlIGV4aXRpbmcgdG8gYXZvaWQgc3B1cmlvdXMgbm9uLXplcm8gZXhpdCBjb2RlLgorCWV4aXRjb2RlPSQ/CisJdHJhcCAnJyAwCisJZXhpdCAkZXhpdGNvZGUgOzsKKyAgICBBbHBoYVwgKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIFNob3VsZCB3ZSBjaGFuZ2UgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQKKwkjIG9mIHRoZSBzcGVjaWZpYyBBbHBoYSBtb2RlbD8KKwllY2hvIGFscGhhLXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgMjEwNjQ6V2luZG93c19OVDo1MDozKQorCWVjaG8gYWxwaGEtZGVjLXdpbm50My41CisJZXhpdCA7OworICAgIEFtaWdhKjpVTklYX1N5c3RlbV9WOjQuMDoqKQorCWVjaG8gbTY4ay11bmtub3duLXN5c3Y0CisJZXhpdCA7OworICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYW1pZ2FvcworCWV4aXQgOzsKKyAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1vcnBob3MKKwlleGl0IDs7CisgICAgKjpPUy8zOTA6KjoqKQorCWVjaG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KKwlleGl0IDs7CisgICAgKjp6L1ZNOio6KikKKwllY2hvIHMzOTAtaWJtLXp2bW9lCisJZXhpdCA7OworICAgICo6T1M0MDA6KjoqKQorCWVjaG8gcG93ZXJwYy1pYm0tb3M0MDAKKwlleGl0IDs7CisgICAgYXJtOlJJU0MqOjEuWzAxMl0qOip8YXJtOnJpc2NpeDoxLlswMTJdKjoqKQorCWVjaG8gYXJtLWFjb3JuLXJpc2NpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXJtOnJpc2NvczoqOip8YXJtOlJJU0NPUzoqOiopCisJZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKKwlleGl0IDs7CisgICAgU1IyPzAxOkhJLVVYL01QUDoqOiogfCBTUjgwMDA6SEktVVgvTVBQOio6KikKKwllY2hvIGhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCisJZXhpdCA7OworICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQorCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCisJaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zeXN2MworCWVsc2UKKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCisJZmkKKwlleGl0IDs7CisgICAgTklMRSo6KjoqOmRjb3N4KQorCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCisJZWNobyBzcGFyYy1pY2wtbng2CisJZXhpdCA7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OworCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40SDpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCVNVTl9BUkNIPSJpMzg2IgorCSMgSWYgdGhlcmUgaXMgYSBjb21waWxlciwgc2VlIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDY0LWJpdCBvYmplY3RzLgorCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KKwkjIFRoaXMgdGVzdCB3b3JrcyBmb3IgYm90aCBjb21waWxlcnMuCisJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCShDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCWdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJU1VOX0FSQ0g9Ing4Nl82NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtTVU5fQVJDSH0tcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzM2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzoqOiopCisJY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgorCSAgICBTZXJpZXMqfFM0KikKKwkJVU5BTUVfUkVMRUFTRT1gdW5hbWUgLXZgCisJCTs7CisJZXNhYworCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KKwllY2hvIHNwYXJjLXN1bi1zdW5vc2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy8nYAorCWV4aXQgOzsKKyAgICBzdW4zKjpTdW5PUzoqOiopCisJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3VuKjoqOjQuMkJTRDoqKQorCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MworCWNhc2UgImAvYmluL2FyY2hgIiBpbgorCSAgICBzdW4zKQorCQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCSAgICBzdW40KQorCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwllc2FjCisJZXhpdCA7OworICAgIGF1c2hwOlN1bk9TOio6KikKKwllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgIyBUaGUgc2l0dWF0aW9uIGZvciBNaU5UIGlzIGEgbGl0dGxlIGNvbmZ1c2luZy4gIFRoZSBtYWNoaW5lIG5hbWUKKyAgICAjIGNhbiBiZSB2aXJ0dWFsbHkgZXZlcnl0aGluZyAoZXZlcnl0aGluZyB3aGljaCBpcyBub3QKKyAgICAjICJhdGFyaXN0IiBvciAiYXRhcmlzdGUiIGF0IGxlYXN0IHNob3VsZCBoYXZlIGEgcHJvY2Vzc29yCisgICAgIyA+IG02ODAwMCkuICBUaGUgc3lzdGVtIG5hbWUgcmFuZ2VzIGZyb20gIk1pTlQiIG92ZXIgIkZyZWVNaU5UIgorICAgICMgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uICJtaW50IiAob3IgImZyZWVtaW50IikuICBGaW5hbGx5CisgICAgIyB0aGUgc3lzdGVtIG5hbWUgIlRPUyIgZGVub3RlcyBhIHN5c3RlbSB3aGljaCBpcyBhY3R1YWxseSBub3QKKyAgICAjIE1pTlQuICBCdXQgTWlOVCBpcyBkb3dud2FyZCBjb21wYXRpYmxlIHRvIFRPUywgc28gdGhpcyBzaG91bGQKKyAgICAjIGJlIG5vIHByb2JsZW0uCisgICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKKwllY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorCWVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKKwllY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtNjhrOm1hY2h0ZW46KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBwb3dlcnBjOm1hY2h0ZW46KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSSVNDKjpNYWNoOio6KikKKwllY2hvIG1pcHMtZGVjLW1hY2hfYnNkNC4zCisJZXhpdCA7OworICAgIFJJU0MqOlVMVFJJWDoqOiopCisJZWNobyBtaXBzLWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFZBWCo6VUxUUklYKjoqOiopCisJZWNobyB2YXgtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCisJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLworCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjZWxzZQorCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7CisjZW5kaWYKKwkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TVlI0KQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3ZyNFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2VuZGlmCisJICBleGl0ICgtMSk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKKwlleGl0IDs7CisgICAgbTg4azpDWC9VWDo3KjoqKQorCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKKwlleGl0IDs7CisgICAgbTg4azoqOjQqOlI0KikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKKwlleGl0IDs7CisgICAgbTg4azoqOjMqOlIzKikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgQVZpaU9OOmRndXg6KjoqKQorCSMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCisJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZXhpdCA7OworICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCisJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKwlleGl0IDs7CisgICAgTTg4KjoqOlIzKjoqKQorCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJZWNobyBtODhrLXRla3Ryb25peC1zeXN2MworCWV4aXQgOzsKKyAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQorCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCisJZXhpdCA7OworICAgICo6SVJJWCo6KjoqKQorCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKKwlleGl0IDs7CisgICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJworICAgIGkqODY6QUlYOio6KikKKwllY2hvIGkzODYtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYTY0OkFJWDoqOiopCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOjI6MykKKwlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KKworCQltYWluKCkKKwkJCXsKKwkJCWlmICghX19wb3dlcl9wYygpKQorCQkJCWV4aXQoMSk7CisJCQlwdXRzKCJwb3dlcnBjLWlibS1haXgzLjIuNSIpOworCQkJZXhpdCgwKTsKKwkJCX0KK0VPRgorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAorCQl0aGVuCisJCQllY2hvICIkU1lTVEVNX05BTUUiCisJCWVsc2UKKwkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlmaQorCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAorCWVsc2UKKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMgorCWZpCisJZXhpdCA7OworICAgICo6QUlYOio6WzQ1NjddKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtJQk1fQVJDSH0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6KjoqKQorCWVjaG8gcnM2MDAwLWlibS1haXgKKwlleGl0IDs7CisgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06QlNEOiopCisJZWNobyByb21wLWlibS1ic2Q0LjQKKwlleGl0IDs7CisgICAgaWJtcnQ6KkJTRDoqfHJvbXAtaWJtOkJTRDoqKSAgICAgICAgICAgICMgY292ZXJzIFJUL1BDIEJTRCBhbmQKKwllY2hvIHJvbXAtaWJtLWJzZCR7VU5BTUVfUkVMRUFTRX0gICAjIDQuMyB3aXRoIHVuYW1lIGFkZGVkIHRvCisJZXhpdCA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBvcnQ6IHJvbXAtaWJtIEJTRCA0LjMKKyAgICAqOkJPU1g6KjoqKQorCWVjaG8gcnM2MDAwLWJ1bGwtYm9zeAorCWV4aXQgOzsKKyAgICBEUFgvMj8wMDpCLk8uUy46KjoqKQorCWVjaG8gbTY4ay1idWxsLXN5c3YzCisJZXhpdCA7OworICAgIDkwMDAvWzM0XT8/OjQuM2JzZDoxLio6KikKKwllY2hvIG02OGstaHAtYnNkCisJZXhpdCA7OworICAgIGhwMzAwOjQuNEJTRDoqOiogfCA5MDAwL1szNF0/Pzo0LjNic2Q6Mi4qOiopCisJZWNobyBtNjhrLWhwLWJzZDQuNAorCWV4aXQgOzsKKyAgICA5MDAwL1szNDY3OF0/PzpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgOTAwMC8zMT8gKSAgICAgICAgICAgIEhQX0FSQ0g9bTY4MDAwIDs7CisJICAgIDkwMDAvWzM0XT8/ICkgICAgICAgICBIUF9BUkNIPW02OGsgOzsKKwkgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisJCWlmIFsgLXggL3Vzci9iaW4vZ2V0Y29uZiBdOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lvbj1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19DUFVfVkVSU0lPTiAyPi9kZXYvbnVsbGAKKwkJICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAorCQkgICAgY2FzZSAiJHtzY19jcHVfdmVyc2lvbn0iIGluCisJCSAgICAgIDUyMykgSFBfQVJDSD0iaHBwYTEuMCIgOzsgIyBDUFVfUEFfUklTQzFfMAorCQkgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKKwkJICAgICAgNTMyKSAgICAgICAgICAgICAgICAgICAgICAjIENQVV9QQV9SSVNDMl8wCisJCQljYXNlICIke3NjX2tlcm5lbF9iaXRzfSIgaW4KKwkJCSAgMzIpIEhQX0FSQ0g9ImhwcGEyLjBuIiA7OworCQkJICA2NCkgSFBfQVJDSD0iaHBwYTIuMHciIDs7CisJCQkgICcnKSBIUF9BUkNIPSJocHBhMi4wIiA7OyAgICMgSFAtVVggMTAuMjAKKwkJCWVzYWMgOzsKKwkJICAgIGVzYWMKKwkJZmkKKwkJaWYgWyAiJHtIUF9BUkNIfSIgPSAiIiBdOyB0aGVuCisJCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCSAgICBzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKworCQkjZGVmaW5lIF9IUFVYX1NPVVJDRQorCQkjaW5jbHVkZSA8c3RkbGliLmg+CisJCSNpbmNsdWRlIDx1bmlzdGQuaD4KKworCQlpbnQgbWFpbiAoKQorCQl7CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKwkJICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKKwkJI2VuZGlmCisJCSAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCisJCSAgICBzd2l0Y2ggKGNwdSkKKwkJCXsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworCQkJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMl8wOgorCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisJCQkgICAgc3dpdGNoIChiaXRzKQorCQkJCXsKKwkJCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisJCQkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworCQkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworCQkJCX0gYnJlYWs7CisJCSNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisJCQkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCSNlbmRpZgorCQkJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQl9CisJCSAgICBleGl0ICgwKTsKKwkJfQorRU9GCisJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAorCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQorCQlmaSA7OworCWVzYWMKKwlpZiBbICR7SFBfQVJDSH0gPSAiaHBwYTIuMHciIF0KKwl0aGVuCisJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKworCSAgICAjIGhwcGEyLjB3LWhwLWhwdXgqIGhhcyBhIDY0LWJpdCBrZXJuZWwgYW5kIGEgY29tcGlsZXIgZ2VuZXJhdGluZworCSAgICAjIDMyLWJpdCBjb2RlLiAgaHBwYTY0LWhwLWhwdXgqIGhhcyB0aGUgc2FtZSBrZXJuZWwgYW5kIGEgY29tcGlsZXIKKwkgICAgIyBnZW5lcmF0aW5nIDY0LWJpdCBjb2RlLiAgR05VIGFuZCBIUCB1c2UgZGlmZmVyZW50IG5vbWVuY2xhdHVyZToKKwkgICAgIworCSAgICAjICQgQ0NfRk9SX0JVSUxEPWNjIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTIuMHctaHAtaHB1eDExLjIzCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9ImNjICtEQTIuMHciIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMworCisJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCAtcSBfX0xQNjRfXworCSAgICB0aGVuCisJCUhQX0FSQ0g9ImhwcGEyLjB3IgorCSAgICBlbHNlCisJCUhQX0FSQ0g9ImhwcGE2NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtIUF9BUkNIfS1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgaWE2NDpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJZWNobyBpYTY0LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICAzMDUwKjpISS1VWDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCWludAorCW1haW4gKCkKKwl7CisJICBsb25nIGNwdSA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisJICAvKiBUaGUgb3JkZXIgbWF0dGVycywgYmVjYXVzZSBDUFVfSVNfSFBfTUM2OEsgZXJyb25lb3VzbHkgcmV0dXJucworCSAgICAgdHJ1ZSBmb3IgQ1BVX1BBX1JJU0MxXzAuICBDUFVfSVNfUEFfUklTQyByZXR1cm5zIGNvcnJlY3QKKwkgICAgIHJlc3VsdHMsIGhvd2V2ZXIuICAqLworCSAgaWYgKENQVV9JU19QQV9SSVNDIChjcHUpKQorCSAgICB7CisJICAgICAgc3dpdGNoIChjcHUpCisJCXsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MyXzA6IHB1dHMgKCJocHBhMi4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBkZWZhdWx0OiBwdXRzICgiaHBwYS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoQ1BVX0lTX0hQX01DNjhLIChjcHUpKQorCSAgICBwdXRzICgibTY4ay1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGVsc2UgcHV0cyAoInVua25vd24taGl0YWNoaS1oaXV4d2UyIik7CisJICBleGl0ICgwKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCQl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIHVua25vd24taGl0YWNoaS1oaXV4d2UyCisJZXhpdCA7OworICAgIDkwMDAvNz8/OjQuM2JzZDoqOiogfCA5MDAwLzg/Wzc5XTo0LjNic2Q6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtYnNkCisJZXhpdCA7OworICAgIDkwMDAvOD8/OjQuM2JzZDoqOiopCisJZWNobyBocHBhMS4wLWhwLWJzZAorCWV4aXQgOzsKKyAgICAqOT8/KjpNUEUvaVg6KjoqIHwgKjMwMDAqOk1QRS9pWDoqOiopCisJZWNobyBocHBhMS4wLWhwLW1wZWl4CisJZXhpdCA7OworICAgIGhwNz8/Ok9TRjE6KjoqIHwgaHA4P1s3OV06T1NGMToqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1vc2YKKwlleGl0IDs7CisgICAgaHA4Pz86T1NGMToqOiopCisJZWNobyBocHBhMS4wLWhwLW9zZgorCWV4aXQgOzsKKyAgICBpKjg2Ok9TRjE6KjoqKQorCWlmIFsgLXggL3Vzci9zYmluL3N5c3ZlcnNpb24gXSA7IHRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMW1rCisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxCisJZmkKKwlleGl0IDs7CisgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQorCWVjaG8gaHBwYTEuMS1ocC1saXRlcworCWV4aXQgOzsKKyAgICBDMSo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMxKjoqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKwlleGl0IDs7CisgICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM0KjoqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzM4KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM4KjoqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQ1JBWSpZLU1QOio6KjoqKQorCWVjaG8geW1wLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqW0EtWl05MDoqOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IFwKKwl8IHNlZCAtZSAncy9DUkFZLipcKFtBLVpdOTBcKS9cMS8nIFwKKwkgICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LyBcCisJICAgICAgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlRTOio6KjoqKQorCWVjaG8gdDkwLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVDNFOio6KjoqKQorCWVjaG8gYWxwaGFldjUtY3JheS11bmljb3NtayR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlNWMToqOio6KikKKwllY2hvIHN2MS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICAqOlVOSUNPUy9tcDoqOiopCisJZWNobyBjcmF5bnYtY3JheS11bmljb3NtcCR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKKwlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKwlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIDUwMDA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwlGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisJRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy8gL18vJ2AKKwllY2hvICJzcGFyYy1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIGkqODY6QlNELzM4NjoqOiogfCBpKjg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzcGFyYyo6QlNEL09TOio6KikKKwllY2hvIHNwYXJjLXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpCU0QvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RnJlZUJTRDoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwljYXNlICR7VU5BTUVfUFJPQ0VTU09SfSBpbgorCSAgICBhbWQ2NCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICAqKQorCQllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBpKjpDWUdXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWN5Z3dpbgorCWV4aXQgOzsKKyAgICAqOk1JTkdXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOk1TWVMqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zeXMKKwlleGl0IDs7CisgICAgaSo6d2luZG93czMyKjoqKQorCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6UFcqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKKwlleGl0IDs7CisgICAgKjpJbnRlcml4KjoqKQorCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICB4ODYpCisJCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQorCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgSUE2NCkKKwkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCWVzYWMgOzsKKyAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCisJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKKwlleGl0IDs7CisgICAgODY2NDpXaW5kb3dzX05UOiopCisJZWNobyB4ODZfNjQtcGMtbWtzCisJZXhpdCA7OworICAgIGkqOldpbmRvd3NfTlQqOiogfCBQZW50aXVtKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIEl0IGFsc28gY29uZmxpY3RzIHdpdGggcHJlLTIuMCB2ZXJzaW9ucyBvZiBBVCZUIFVXSU4uIFNob3VsZCB3ZQorCSMgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQgb2YgaTM4Nj8KKwllY2hvIGk1ODYtcGMtaW50ZXJpeAorCWV4aXQgOzsKKyAgICBpKjpVV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy11d2luCisJZXhpdCA7OworICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHAqOkNZR1dJTio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwcmVwKjpTdW5PUzo1Lio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgICo6R05VOio6KikKKwkjIHRoZSBHTlUgc3lzdGVtCisJZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLWdudWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLC8uKiQsLCdgCisJZXhpdCA7OworICAgICo6R05VLyo6KjoqKQorCSMgb3RoZXIgc3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFuZCB1c2VybGFuZAorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWBlY2hvICR7VU5BTUVfU1lTVEVNfSB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgJ1tBLVpdJyAnW2Etel0nYGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AtZ251CisJZXhpdCA7OworICAgIGkqODY6TWluaXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAorCWV4aXQgOzsKKyAgICBhYXJjaDY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgYWFyY2g2NF9iZTpMaW51eDoqOiopCisJVU5BTUVfTUFDSElORT1hYXJjaDY0X2JlCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisJZXNhYworCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorCWV4aXQgOzsKKyAgICBhcm0qOkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJaWYgZWNobyBfX0FSTV9FQUJJX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCSAgICB8IGdyZXAgLXEgX19BUk1fRUFCSV9fCisJdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllbHNlCisJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCXwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCisJICAgIHRoZW4KKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaQorCSAgICBlbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudWVhYmloZgorCSAgICBmaQorCWZpCisJZXhpdCA7OworICAgIGF2cjMyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXM6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBjcmlzdjMyOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgZnJ2OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaGV4YWdvbjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGkqODY6TGludXg6KjoqKQorCUxJQkM9Z251CisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2lmZGVmIF9fZGlldGxpYmNfXworCUxJQkM9ZGlldGxpYmMKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeTElCQydgCisJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgorCWV4aXQgOzsKKyAgICBpYTY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbTMycio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtNjgqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9ZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPSR7VU5BTUVfTUFDSElORX0KKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQorCTs7CisgICAgb3IzMjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBhZHJlOkxpbnV4Oio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQorCSMgTG9vayBmb3IgQ1BVIGxldmVsCisJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KKwkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LWdudSA7OworCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtZ251IDs7CisJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKKwllc2FjCisJZXhpdCA7OworICAgIHBwYzY0OkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CisJZXhpdCA7OworICAgIHNoNjQqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc2gqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHRpbGUqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgdmF4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB4dGVuc2EqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKwkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgorCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKKwkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgorCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCisJIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgorCSMgbnVtYmVyIHNlcmllcyBzdGFydGluZyB3aXRoIDIuLi4KKwkjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCisJIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgorCSMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2NC4ydXcke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6T1MvMjoqOiopCisJIyBJZiB3ZSB3ZXJlIGFibGUgdG8gZmluZCBgdW5hbWUnLCB0aGVuIEVNWCBVbml4IGNvbXBhdGliaWxpdHkKKwkjIGlzIHByb2JhYmx5IGluc3RhbGxlZC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtb3MyLWVteAorCWV4aXQgOzsKKyAgICBpKjg2OlhUUy0zMDA6KjpTVE9QKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN0b3AKKwlleGl0IDs7CisgICAgaSo4NjphdGhlb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWF0aGVvcworCWV4aXQgOzsKKyAgICBpKjg2OnN5bGxhYmxlOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKKwlleGl0IDs7CisgICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LlswMl0qOiopCisJZWNobyBpMzg2LXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpKjg2OipET1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIGkqODY6Kjo0Lio6KiB8IGkqODY6U1lTVEVNX1Y6NC4qOiopCisJVU5BTUVfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgJ3MvXC9NUCQvLydgCisJaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNsdWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bml2ZWwtc3lzdiR7VU5BTUVfUkVMfQorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Yke1VOQU1FX1JFTH0KKwlmaQorCWV4aXQgOzsKKyAgICBpKjg2Oio6NTpbNjc4XSopCisJIyBVbml4V2FyZSA3LngsIE9wZW5VTklYIGFuZCBPcGVuU2VydmVyIDYuCisJY2FzZSBgL2Jpbi91bmFtZSAtWCB8IGdyZXAgIl5NYWNoaW5lImAgaW4KKwkgICAgKjQ4NiopCSAgICAgVU5BTUVfTUFDSElORT1pNDg2IDs7CisJICAgICpQZW50aXVtKQkgICAgIFVOQU1FX01BQ0hJTkU9aTU4NiA7OworCSAgICAqUGVudCp8KkNlbGVyb24pIFVOQU1FX01BQ0hJTkU9aTY4NiA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSR7VU5BTUVfU1lTVEVNfSR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjoqOjMuMjoqKQorCWlmIHRlc3QgLWYgL3Vzci9vcHRpb25zL2NiLm5hbWU7IHRoZW4KKwkJVU5BTUVfUkVMPWBzZWQgLW4gJ3MvLipWZXJzaW9uIC8vcCcgPC91c3Ivb3B0aW9ucy9jYi5uYW1lYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtaXNjJFVOQU1FX1JFTAorCWVsaWYgL2Jpbi91bmFtZSAtWCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9SRUw9YCgvYmluL3VuYW1lIC1YfGdyZXAgUmVsZWFzZXxzZWQgLWUgJ3MvLio9IC8vJylgCisJCSgvYmluL3VuYW1lIC1YfGdyZXAgaTgwNDg2ID4vZGV2L251bGwpICYmIFVOQU1FX01BQ0hJTkU9aTQ4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNTg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50ICpJSScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtIFBybycgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zY28kVU5BTUVfUkVMCisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjMyCisJZmkKKwlleGl0IDs7CisgICAgcGM6KjoqOiopCisJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6CisJIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKKwkjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpNTg2LgorCSMgTm90ZTogd2hhdGV2ZXIgdGhpcyBpcywgaXQgTVVTVCBiZSB0aGUgc2FtZSBhcyB3aGF0IGNvbmZpZy5zdWIKKwkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJ5IHdpbGwgZGVjaWRlIHRoYXQKKwkjIHRoaXMgaXMgYSBjcm9zcy1idWlsZC4KKwllY2hvIGk1ODYtcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKKyAgICBJbnRlbDpNYWNoOjMqOiopCisJZWNobyBpMzg2LXBjLW1hY2gzCisJZXhpdCA7OworICAgIHBhcmFnb246KjoqOiopCisJZWNobyBpODYwLWludGVsLW9zZjEKKwlleGl0IDs7CisgICAgaTg2MDoqOjQuKjoqKSAjIGk4NjAtU1ZSNAorCWlmIGdyZXAgU3RhcmRlbnQgL3Vzci9pbmNsdWRlL3N5cy91YWRtaW4uaCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICBlY2hvIGk4NjAtc3RhcmRlbnQtc3lzdiR7VU5BTUVfUkVMRUFTRX0gIyBTdGFyZGVudCBWaXN0cmEgaTg2MC1TVlI0CisJZWxzZSAjIEFkZCBvdGhlciBpODYwLVNWUjQgdmVuZG9ycyBiZWxvdyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLgorCSAgZWNobyBpODYwLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0gICMgVW5rbm93biBpODYwLVNWUjQKKwlmaQorCWV4aXQgOzsKKyAgICBtaW5pKjpDVElYOlNZUyo1OiopCisJIyAibWluaWZyYW1lIgorCWVjaG8gbTY4MDEwLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBtYzY4azpVTklYOlNZU1RFTTU6My41MW0pCisJZWNobyBtNjhrLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBNNjgwPzA6RC1OSVg6NS4zOiopCisJZWNobyBtNjhrLWRpYWItZG5peAorCWV4aXQgOzsKKyAgICBNNjgqOio6UjNWWzU2NzhdKjoqKQorCXRlc3QgLXIgL3N5c1Y2OCAmJiB7IGVjaG8gJ202OGstbW90b3JvbGEtc3lzdic7IGV4aXQ7IH0gOzsKKyAgICAzWzM0NV0/PzoqOjQuMDozLjAgfCAzWzM0XT8/QToqOjQuMDozLjAgfCAzWzM0XT8/LCo6Kjo0LjA6My4wIHwgM1szNF0/Py8qOio6NC4wOjMuMCB8IDQ0MDA6Kjo0LjA6My4wIHwgNDg1MDoqOjQuMDozLjAgfCBTS0E0MDoqOjQuMDozLjAgfCBTRFMyOio6NC4wOjMuMCB8IFNIRzI6Kjo0LjA6My4wIHwgUzc1MDEqOio6NC4wOjMuMCkKKwlPU19SRUw9JycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBOQ1IqOio6NC4yOiogfCBNUFJBUyo6Kjo0LjI6KikKKwlPU19SRUw9Jy4zJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSAgICAmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgcHRlcm9uID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIG02OCo6THlueE9TOjIuKjoqIHwgbTY4KjpMeW54T1M6My4wKjoqKQorCWVjaG8gbTY4ay11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWM2ODAzMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCWVjaG8gbTY4ay1hdGFyaS1zeXN2NAorCWV4aXQgOzsKKyAgICBUU1VOQU1JOkx5bnhPUzoyLio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICByczYwMDA6THlueE9TOjIuKjoqKQorCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCisJZWNobyBtaXBzLWRkZS1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSTSo6UmVsaWFudFVOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICBSTSo6U0lOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlNJTklYLSo6KjoqKQorCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zbmktc3lzdjQKKwllbHNlCisJCWVjaG8gbnMzMmstc25pLXN5c3YKKwlmaQorCWV4aXQgOzsKKyAgICBQRU5USVVNOio6NC4wKjoqKQkjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorCQkJIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgorCWVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCisJIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgorCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgICo6KjoqOkZUWCopCisJIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCisJZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICAqOlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgIG1jNjgqOkEvVVg6KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1hdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG5ld3MqOk5FV1MtT1M6Nio6KikKKwllY2hvIG1pcHMtc29ueS1uZXdzb3M2CisJZXhpdCA7OworICAgIFJbMzRdMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQorCWlmIFsgLWQgL3Vzci9uZWMgXTsgdGhlbgorCQllY2hvIG1pcHMtbmVjLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZWxzZQorCQllY2hvIG1pcHMtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZXhpdCA7OworICAgIEJlQm94OkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBoYXJkd2FyZSBtYWRlIGJ5IEJlLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYmUtYmVvcworCWV4aXQgOzsKKyAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWFwcGxlLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkhhaWt1Oio6KikJIyBIYWlrdSBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWhhaWt1CisJZXhpdCA7OworICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC01OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTc6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g3LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04OlNVUEVSLVVYOio6KikKKwllY2hvIHN4OC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtOFI6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4ci1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXIqOlJoYXBzb2R5Oio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UmhhcHNvZHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEYXJ3aW46KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCisJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJICAgIGkzODYpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCSAgaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCSAgICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCSAgdGhlbgorCQkgICAgICBVTkFNRV9QUk9DRVNTT1I9Ing4Nl82NCIKKwkJICBmaQorCQlmaSA7OworCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSAieDg2IjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9NQUNISU5FPXBjCisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNobyBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBORU8tPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuZW8tdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNFLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNlLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zci10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk5vblN0b3AtVVg6KjoqKQorCWVjaG8gbWlwcy1jb21wYXEtbm9uc3RvcHV4CisJZXhpdCA7OworICAgIEJTMjAwMDpQT1NJWCo6KjoqKQorCWVjaG8gYnMyMDAwLXNpZW1lbnMtc3lzdgorCWV4aXQgOzsKKyAgICBEUy8qOlVOSVhfU3lzdGVtX1Y6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS0ke1VOQU1FX1NZU1RFTX0tJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlBsYW45Oio6KikKKwkjICJ1bmFtZSAtbSIgaXMgbm90IGNvbnNpc3RlbnQsIHNvIHVzZSAkY3B1dHlwZSBpbnN0ZWFkLiAzODYKKwkjIGlzIGNvbnZlcnRlZCB0byBpMzg2IGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHg4NgorCSMgb3BlcmF0aW5nIHN5c3RlbXMuCisJaWYgdGVzdCAiJGNwdXR5cGUiID0gIjM4NiI7IHRoZW4KKwkgICAgVU5BTUVfTUFDSElORT1pMzg2CisJZWxzZQorCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXBsYW45CisJZXhpdCA7OworICAgICo6VE9QUy0xMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAorCWV4aXQgOzsKKyAgICAqOlRFTkVYOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKKwlleGl0IDs7CisgICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLWRlYy10b3BzMjAKKwlleGl0IDs7CisgICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXhrbC10b3BzMjAKKwlleGl0IDs7CisgICAgKjpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCisJZXhpdCA7OworICAgICo6SVRTOio6KikKKwllY2hvIHBkcDEwLXVua25vd24taXRzCisJZXhpdCA7OworICAgIFNFSToqOio6U0VJVVgpCisJZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKwlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CisJICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgViopIGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7CisJZXNhYyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCWVjaG8gaTM4Ni1wYy14ZW5peAorCWV4aXQgOzsKKyAgICBpKjg2OnNreW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2t5b3NgZWNobyAke1VOQU1FX1JFTEVBU0V9YCB8IHNlZCAtZSAncy8gLiokLy8nCisJZXhpdCA7OworICAgIGkqODY6cmRvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXJkb3MKKwlleGl0IDs7CisgICAgaSo4NjpBUk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYXJvcworCWV4aXQgOzsKKyAgICB4ODZfNjQ6Vk1rZXJuZWw6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVzeAorCWV4aXQgOzsKK2VzYWMKKworI2VjaG8gJyhObyB1bmFtZSBjb21tYW5kIG9yIHVuYW1lIG91dHB1dCBub3QgcmVjb2duaXplZC4pJyAxPiYyCisjZWNobyAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiAxPiYyCisKK2V2YWwgJHNldF9jY19mb3JfYnVpbGQKK2NhdCA+JGR1bW15LmMgPDxFT0YKKyNpZmRlZiBfU0VRVUVOVF8KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKK21haW4gKCkKK3sKKyNpZiBkZWZpbmVkIChzb255KQorI2lmIGRlZmluZWQgKE1JUFNFQikKKyAgLyogQkZEIHdhbnRzICJic2QiIGluc3RlYWQgb2YgIm5ld3NvcyIuICBQZXJoYXBzIEJGRCBzaG91bGQgYmUgY2hhbmdlZCwKKyAgICAgSSBkb24ndCBrbm93Li4uLiAgKi8KKyAgcHJpbnRmICgibWlwcy1zb255LWJzZFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAgcHJpbnRmICgibTY4ay1zb255LW5ld3NvcyVzXG4iLAorI2lmZGVmIE5FV1NPUzQKKwkiNCIKKyNlbHNlCisJIiIKKyNlbmRpZgorCSk7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fYXJtKSAmJiBkZWZpbmVkIChfX2Fjb3JuKSAmJiBkZWZpbmVkIChfX3VuaXgpCisgIHByaW50ZiAoImFybS1hY29ybi1yaXNjaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoaHAzMDApICYmICFkZWZpbmVkIChocHV4KQorICBwcmludGYgKCJtNjhrLWhwLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChOZVhUKQorI2lmICFkZWZpbmVkIChfX0FSQ0hJVEVDVFVSRV9fKQorI2RlZmluZSBfX0FSQ0hJVEVDVFVSRV9fICJtNjhrIgorI2VuZGlmCisgIGludCB2ZXJzaW9uOworICB2ZXJzaW9uPWAoaG9zdGluZm8gfCBzZWQgLW4gJ3MvLipOZVhUIE1hY2ggXChbMC05XSpcKS4qL1wxL3AnKSAyPi9kZXYvbnVsbGA7CisgIGlmICh2ZXJzaW9uIDwgNCkKKyAgICBwcmludGYgKCIlcy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBlbHNlCisgICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE1VTFRJTUFYKSB8fCBkZWZpbmVkIChuMTYpCisjaWYgZGVmaW5lZCAoVU1BWFYpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1zeXN2XG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2lmIGRlZmluZWQgKENNVSkKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLW1hY2hcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fMzg2QlNEX18pCisgIHByaW50ZiAoImkzODYtcGMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKHNlcXVlbnQpCisjaWYgZGVmaW5lZCAoaTM4NikKKyAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkIChuczMyMDAwKQorICBwcmludGYgKCJuczMyay1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1NFUVVFTlRfKQorICAgIHN0cnVjdCB1dHNuYW1lIHVuOworCisgICAgdW5hbWUoJnVuKTsKKworICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMiIsIDIpID09IDApIHsKKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MlxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjEiLCAyKSA9PSAwKSB7IC8qIFhYWCBpcyBWMSBjb3JyZWN0PyAqLworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgxXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIHByaW50ZiAoImkzODYtc2VxdWVudC1wdHhcbiIpOyBleGl0ICgwKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkICh2YXgpCisjIGlmICFkZWZpbmVkICh1bHRyaXgpCisjICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgIGlmIGRlZmluZWQgKEJTRCkKKyMgICBpZiBCU0QgPT0gNDMKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zXG4iKTsgZXhpdCAoMCk7CisjICAgZWxzZQorIyAgICBpZiBCU0QgPT0gMTk5MDA2CisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM3Jlbm9cbiIpOyBleGl0ICgwKTsKKyMgICAgZWxzZQorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICBlbmRpZgorIyBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoYWxsaWFudCkgJiYgZGVmaW5lZCAoaTg2MCkKKyAgcHJpbnRmICgiaTg2MC1hbGxpYW50LWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyAgZXhpdCAoMSk7Cit9CitFT0YKKworJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKworIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50LgorCit0ZXN0IC1kIC91c3IvYXBvbGxvICYmIHsgZWNobyAke0lTUH0tYXBvbGxvLSR7U1lTVFlQRX07IGV4aXQ7IH0KKworIyBDb252ZXggdmVyc2lvbnMgdGhhdCBwcmVkYXRlIHVuYW1lIGNhbiB1c2UgZ2V0c3lzaW5mbygxKQorCitpZiBbIC14IC91c3IvY29udmV4L2dldHN5c2luZm8gXQordGhlbgorICAgIGNhc2UgYGdldHN5c2luZm8gLWYgY3B1X3R5cGVgIGluCisgICAgYzEqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBjMzQqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzM4KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGM0KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgZXNhYworZmkKKworY2F0ID4mMiA8PEVPRgorJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQorCitUaGlzIHNjcmlwdCwgbGFzdCBtb2RpZmllZCAkdGltZXN0YW1wLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZQordGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCisKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECithbmQKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCitJZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKK3NlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCitwZXJ0aW5lbnQgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIG5lZWRlZAoraW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgorCitjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAorCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbGAKKworaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAorCitVTkFNRV9NQUNISU5FID0gJHtVTkFNRV9NQUNISU5FfQorVU5BTUVfUkVMRUFTRSA9ICR7VU5BTUVfUkVMRUFTRX0KK1VOQU1FX1NZU1RFTSAgPSAke1VOQU1FX1NZU1RFTX0KK1VOQU1FX1ZFUlNJT04gPSAke1VOQU1FX1ZFUlNJT059CitFT0YKKworZXhpdCAxCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvY29uZmlnLnN1YiBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvY29uZmlnLnN1YgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jODk0ZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9jb25maWcuc3ViCkBAIC0wLDAgKzEsMTc3MyBAQAorIyEgL2Jpbi9zaAorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsCisjICAgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDEyLTAyLTEwJworCisjIFRoaXMgZmlsZSBpcyAoaW4gcHJpbmNpcGxlKSBjb21tb24gdG8gQUxMIEdOVSBzb2Z0d2FyZS4KKyMgVGhlIHByZXNlbmNlIG9mIGEgbWFjaGluZSBpbiB0aGlzIGZpbGUgc3VnZ2VzdHMgdGhhdCBTT01FIEdOVSBzb2Z0d2FyZQorIyBjYW4gaGFuZGxlIHRoYXQgbWFjaGluZS4gIEl0IGRvZXMgbm90IGltcGx5IEFMTCBHTlUgc29mdHdhcmUgY2FuLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKKyMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgR05VIENoYW5nZUxvZyBlbnRyeS4KKyMKKyMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCisjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KKyMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCisKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKworIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKKyMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCisjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCisjIEVhY2ggcGFja2FnZSBpcyByZXNwb25zaWJsZSBmb3IgcmVwb3J0aW5nIHdoaWNoIHZhbGlkIGNvbmZpZ3VyYXRpb25zCisjIGl0IGRvZXMgbm90IHN1cHBvcnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXN0aW5ndWlzaAorIyBhIGZhaWx1cmUgdG8gc3VwcG9ydCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG1lYW5pbmdsZXNzCisjIGNvbmZpZ3VyYXRpb24uCisKKyMgVGhlIGdvYWwgb2YgdGhpcyBmaWxlIGlzIHRvIG1hcCBhbGwgdGhlIHZhcmlvdXMgdmFyaWF0aW9ucyBvZiBhIGdpdmVuCisjIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgc2luZ2xlIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yIGluIHNvbWUgY2FzZXMsIHRoZSBuZXdlciBmb3VyLXBhcnQgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0gQ1BVLU1GUi1PUFNZUworICAgICAgICQwIFtPUFRJT05dIEFMSUFTCisKK0Nhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKKworQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMgorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtYW5kcm9pZCogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBcCisgIGxpbnV4LXVjbGliYyogfCB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IFwKKyAga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IFwKKyAga29wZW5zb2xhcmlzKi1nbnUqIHwgXAorICBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisgICAgb3M9LSRtYXliZV9vcworICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCisgICAgOzsKKyAgYW5kcm9pZC1saW51eCkKKyAgICBvcz0tbGludXgtYW5kcm9pZAorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgLXVua25vd24KKyAgICA7OworICAqKQorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvLVteLV0qJC8vJ2AKKyAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KKyAgICB0aGVuIG9zPWBlY2hvICQxIHwgc2VkICdzLy4qLS8tLydgCisgICAgZWxzZSBvcz07IGZpCisgICAgOzsKK2VzYWMKKworIyMjIExldCdzIHJlY29nbml6ZSBjb21tb24gbWFjaGluZXMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zIHNvCisjIyMgdGhhdCB0aGluZ3MgbGlrZSBjb25maWcuc3ViIGRlY3N0YXRpb24tMzEwMCB3b3JrLiAgV2UgYWxzbworIyMjIHJlY29nbml6ZSBzb21lIG1hbnVmYWN0dXJlcnMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zLCBzbyB3ZQorIyMjIGNhbiBwcm92aWRlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgYmVsb3cuCitjYXNlICRvcyBpbgorCS1zdW4qb3MqKQorCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgaW52YWxpZCBpbnB1dC4KKwkJOzsKKwktZGVjKiB8IC1taXBzKiB8IC1zZXF1ZW50KiB8IC1lbmNvcmUqIHwgLXBjNTMyKiB8IC1zZ2kqIHwgLXNvbnkqIHwgXAorCS1hdHQqIHwgLTczMDAqIHwgLTMzMDAqIHwgLWRlbHRhKiB8IC1tb3Rvcm9sYSogfCAtc3VuWzIzNF0qIHwgXAorCS11bmljb20qIHwgLWlibSogfCAtbmV4dCB8IC1ocCB8IC1pc2kqIHwgLWFwb2xsbyB8IC1hbHRvcyogfCBcCisJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKKwktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAorCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAorCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkgfCAtbWljcm9ibGF6ZSkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktYmx1ZWdlbmUqKQorCQlvcz0tY25rCisJCTs7CisJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCisJCW9zPQorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLXNjb3V0KQorCQk7OworCS13cnMpCisJCW9zPS12eHdvcmtzCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktY2hvcnVzb3MqKQorCQlvcz0tY2hvcnVzb3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNyZGIpCisJCW9zPS1jaG9ydXNyZGIKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1oaXV4KikKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwktc2NvNikKKwkJb3M9LXNjbzV2NgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzUpCisJCW9zPS1zY28zLjJ2NQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzQpCisJCW9zPS1zY28zLjJ2NAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMi5bNC05XSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy9zY28zLjIuL3NjbzMuMnYvJ2AKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjJ2WzQtOV0qKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzV2NiopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvKikKKwkJb3M9LXNjbzMuMnYyCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktdWRrKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1pc2MpCisJCW9zPS1pc2MyLjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1jbGl4KikKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWludGVyZ3JhcGgKKwkJOzsKKwktaXNjKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1seW54KikKKwkJb3M9LWx5bnhvcworCQk7OworCS1wdHgqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXNlcXVlbnQvJ2AKKwkJOzsKKwktd2luZG93c250KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3dpbmRvd3NudC93aW5udC8nYAorCQk7OworCS1wc29zKikKKwkJb3M9LXBzb3MKKwkJOzsKKwktbWludCB8IC1taW50WzAtOV0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKKwkJb3M9LW1pbnQKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgYWxpYXNlcyBmb3IgY2VydGFpbiBDUFUtQ09NUEFOWSBjb21iaW5hdGlvbnMuCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZS4KKwkjIFNvbWUgYXJlIG9taXR0ZWQgaGVyZSBiZWNhdXNlIHRoZXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzIGJlbG93LgorCTE3NTBhIHwgNTgwIFwKKwl8IGEyOWsgXAorCXwgYWFyY2g2NCB8IGFhcmNoNjRfYmUgXAorCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYWV2Nls3OF0gfCBhbHBoYXBjYTVbNjddIFwKKwl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gfCBhbHBoYTY0cGNhNVs2N10gXAorCXwgYW0zM18yLjAgXAorCXwgYXJjIHwgYXJtIHwgYXJtW2JsXWUgfCBhcm1lW2xiXSB8IGFybXZbMjM0NV0gfCBhcm12WzM0NV1bbGJdIHwgYXZyIHwgYXZyMzIgXAorICAgICAgICB8IGJlMzIgfCBiZTY0IFwKKwl8IGJmaW4gXAorCXwgYzR4IHwgY2xpcHBlciBcCisJfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAorCXwgZXBpcGhhbnkgXAorCXwgZmlkbyB8IGZyMzAgfCBmcnYgXAorCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKKwl8IGhleGFnb24gXAorCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCisJfCBpcDJrIHwgaXEyMDAwIFwKKwl8IGxlMzIgfCBsZTY0IFwKKwl8IGxtMzIgXAorCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayBcCisJfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWNvcmUgfCBtZXAgfCBtZXRhZyBcCisJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKKwl8IG1pcHMxNiBcCisJfCBtaXBzNjQgfCBtaXBzNjRlbCBcCisJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCisJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorCXwgbWlwczY0cjU5MDAgfCBtaXBzNjRyNTkwMGVsIFwKKwl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCisJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJfCBtaXBzNjR2cjU5MDAgfCBtaXBzNjR2cjU5MDBlbCBcCisJfCBtaXBzaXNhMzIgfCBtaXBzaXNhMzJlbCBcCisJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAorCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKKwl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKKwl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCisJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAorCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbW94aWUgXAorCXwgbXQgXAorCXwgbXNwNDMwIFwKKwl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAorCXwgbmlvcyB8IG5pb3MyIFwKKwl8IG5zMTZrIHwgbnMzMmsgXAorCXwgb3BlbjggXAorCXwgb3IzMiBcCisJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAorCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIFwKKwl8IHB5cmFtaWQgXAorCXwgcmw3OCB8IHJ4IFwKKwl8IHNjb3JlIFwKKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisJfCBzaDY0IHwgc2g2NGxlIFwKKwl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKKwl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCisJfCBzcHUgXAorCXwgdGFob2UgfCB0aWM0eCB8IHRpYzU0eCB8IHRpYzU1eCB8IHRpYzZ4IHwgdGljODAgfCB0cm9uIFwKKwl8IHViaWNvbTMyIFwKKwl8IHY4NTAgfCB2ODUwZSB8IHY4NTBlMSB8IHY4NTBlMiB8IHY4NTBlcyB8IHY4NTBlMnYzIFwKKwl8IHdlMzJrIFwKKwl8IHg4NiB8IHhjMTZ4IHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKKwl8IHo4ayB8IHo4MCkKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJYzU0eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQk7OworCWM1NXgpCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKwkJOzsKKwljNngpCisJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IHBpY29jaGlwKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwltODgxMTAgfCBtNjgwWzEyMzQ2XTAgfCBtNjgzPzIgfCBtNjgzNjAgfCBtNTIwMCB8IHY3MCB8IHc2NSB8IHo4aykKKwkJOzsKKwltczEpCisJCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgorCQk7OworCisJc3Ryb25nYXJtIHwgdGh1bWIgfCB4c2NhbGUpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJOzsKKwl4Z2F0ZSkKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCW9zPS1ub25lCisJCTs7CisJeHNjYWxlZWIpCisJCWJhc2ljX21hY2hpbmU9YXJtZWItdW5rbm93bgorCQk7OworCisJeHNjYWxlZWwpCisJCWJhc2ljX21hY2hpbmU9YXJtZWwtdW5rbm93bgorCQk7OworCisJIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKKwkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKKwkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCisJaSo4NiB8IHg4Nl82NCkKKwkgIGJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtcGMKKwkgIDs7CisJIyBPYmplY3QgaWYgbW9yZSB0aGFuIG9uZSBjb21wYW55IG5hbWUgd29yZC4KKwkqLSotKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCisJNTgwLSogXAorCXwgYTI5ay0qIFwKKwl8IGFhcmNoNjQtKiB8IGFhcmNoNjRfYmUtKiBcCisJfCBhbHBoYS0qIHwgYWxwaGFldls0LThdLSogfCBhbHBoYWV2NTYtKiB8IGFscGhhZXY2Wzc4XS0qIFwKKwl8IGFscGhhNjQtKiB8IGFscGhhNjRldls0LThdLSogfCBhbHBoYTY0ZXY1Ni0qIHwgYWxwaGE2NGV2Nls3OF0tKiBcCisJfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIFwKKwl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJlMzItKiB8IGJlNjQtKiBcCisJfCBiZmluLSogfCBiczIwMDAtKiBcCisJfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiBcCisJfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGN5ZHJhLSogXAorCXwgZDEwdi0qIHwgZDMwdi0qIHwgZGx4LSogXAorCXwgZWx4c2ktKiBcCisJfCBmMzBbMDFdLSogfCBmNzAwLSogfCBmaWRvLSogfCBmcjMwLSogfCBmcnYtKiB8IGZ4ODAtKiBcCisJfCBoODMwMC0qIHwgaDg1MDAtKiBcCisJfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAorCXwgaGV4YWdvbi0qIFwKKwl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCisJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBsZTMyLSogfCBsZTY0LSogXAorCXwgbG0zMi0qIFwKKwl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKKwl8IG02ODAwMC0qIHwgbTY4MFswMTIzNDZdMC0qIHwgbTY4MzYwLSogfCBtNjgzPzItKiB8IG02OGstKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogfCBtZXRhZy0qIHwgbWljcm9ibGF6ZS0qIFwKKwl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKKwl8IG1pcHMxNi0qIFwKKwl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCisJfCBtaXBzNjRvY3Rlb24tKiB8IG1pcHM2NG9jdGVvbmVsLSogXAorCXwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCisJfCBtaXBzNjRyNTkwMC0qIHwgbWlwczY0cjU5MDBlbC0qIFwKKwl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAorCXwgbWlwczY0dnI0MTAwLSogfCBtaXBzNjR2cjQxMDBlbC0qIFwKKwl8IG1pcHM2NHZyNDMwMC0qIHwgbWlwczY0dnI0MzAwZWwtKiBcCisJfCBtaXBzNjR2cjUwMDAtKiB8IG1pcHM2NHZyNTAwMGVsLSogXAorCXwgbWlwczY0dnI1OTAwLSogfCBtaXBzNjR2cjU5MDBlbC0qIFwKKwl8IG1pcHNpc2EzMi0qIHwgbWlwc2lzYTMyZWwtKiBcCisJfCBtaXBzaXNhMzJyMi0qIHwgbWlwc2lzYTMycjJlbC0qIFwKKwl8IG1pcHNpc2E2NC0qIHwgbWlwc2lzYTY0ZWwtKiBcCisJfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKKwl8IG1pcHNpc2E2NHNiMS0qIHwgbWlwc2lzYTY0c2IxZWwtKiBcCisJfCBtaXBzaXNhNjRzcjcxay0qIHwgbWlwc2lzYTY0c3I3MWtlbC0qIFwKKwl8IG1pcHN0eDM5LSogfCBtaXBzdHgzOWVsLSogXAorCXwgbW1peC0qIFwKKwl8IG10LSogXAorCXwgbXNwNDMwLSogXAorCXwgbmRzMzItKiB8IG5kczMybGUtKiB8IG5kczMyYmUtKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIFwKKwl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAorCXwgb3BlbjgtKiBcCisJfCBvcmlvbi0qIFwKKwl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAorCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogXAorCXwgcHlyYW1pZC0qIFwKKwl8IHJsNzgtKiB8IHJvbXAtKiB8IHJzNjAwMC0qIHwgcngtKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzI0XWFlYi0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCisJfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKKwl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM2NHYtKiB8IHNwYXJjODZ4LSogfCBzcGFyY2xldC0qIFwKKwl8IHNwYXJjbGl0ZS0qIFwKKwl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzcGFyY3Y5di0qIHwgc3YxLSogfCBzeD8tKiBcCisJfCB0YWhvZS0qIFwKKwl8IHRpYzMwLSogfCB0aWM0eC0qIHwgdGljNTR4LSogfCB0aWM1NXgtKiB8IHRpYzZ4LSogfCB0aWM4MC0qIFwKKwl8IHRpbGUqLSogXAorCXwgdHJvbi0qIFwKKwl8IHViaWNvbTMyLSogXAorCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHY4NTBlMS0qIHwgdjg1MGVzLSogfCB2ODUwZTItKiB8IHY4NTBlMnYzLSogXAorCXwgdmF4LSogXAorCXwgd2UzMmstKiBcCisJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIFwKKwl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKKwl8IHltcC0qIFwKKwl8IHo4ay0qIHwgejgwLSopCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgorCXh0ZW5zYSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKKwkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgorCTM4NmJzZCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LWJzZAorCQk7OworCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKKwkJOzsKKwkzYiopCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJYTI5a2hpZikKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJYWJhY3VzKQorCQliYXNpY19tYWNoaW5lPWFiYWN1cy11bmtub3duCisJCTs7CisJYWRvYmU2OGspCisJCWJhc2ljX21hY2hpbmU9bTY4MDEwLWFkb2JlCisJCW9zPS1zY291dAorCQk7OworCWFsbGlhbnQgfCBmeDgwKQorCQliYXNpY19tYWNoaW5lPWZ4ODAtYWxsaWFudAorCQk7OworCWFsdG9zIHwgYWx0b3MzMDY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYWx0b3MKKwkJOzsKKwlhbTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLW5vbmUKKwkJb3M9LWJzZAorCQk7OworCWFtZDY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQk7OworCWFtZDY0LSopCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYW1kYWhsKQorCQliYXNpY19tYWNoaW5lPTU4MC1hbWRhaGwKKwkJb3M9LXN5c3YKKwkJOzsKKwlhbWlnYSB8IGFtaWdhLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCTs7CisJYW1pZ2FvcyB8IGFtaWdhZG9zKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tYW1pZ2FvcworCQk7OworCWFtaWdhdW5peCB8IGFtaXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1zeXN2NAorCQk7OworCWFwb2xsbzY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1zeXN2CisJCTs7CisJYXBvbGxvNjhic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LWJzZAorCQk7OworCWFyb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tYXJvcworCQk7OworCWF1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCW9zPS1hdXgKKwkJOzsKKwliYWxhbmNlKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJYmxhY2tmaW4pCisJCWJhc2ljX21hY2hpbmU9YmZpbi11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCWJsYWNrZmluLSopCisJCWJhc2ljX21hY2hpbmU9YmZpbi1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlibHVlZ2VuZSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LWNuaworCQk7OworCWM1NHgtKikKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljNTV4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzZ4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNngtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljOTApCisJCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNlZ2NjKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1jZWdjYworCQk7OworCWNvbnZleC1jMSkKKwkJYmFzaWNfbWFjaGluZT1jMS1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMikKKwkJYmFzaWNfbWFjaGluZT1jMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzIpCisJCWJhc2ljX21hY2hpbmU9YzMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzNCkKKwkJYmFzaWNfbWFjaGluZT1jMzQtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM4KQorCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNyYXkgfCBqOTApCisJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNyYXludikKKwkJYmFzaWNfbWFjaGluZT1jcmF5bnYtY3JheQorCQlvcz0tdW5pY29zbXAKKwkJOzsKKwljcjE2IHwgY3IxNi0qKQorCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJY3JkcyB8IHVub3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1jcmRzCisJCTs7CisJY3Jpc3YzMiB8IGNyaXN2MzItKiB8IGV0cmF4ZnMqKQorCQliYXNpY19tYWNoaW5lPWNyaXN2MzItYXhpcworCQk7OworCWNyaXMgfCBjcmlzLSogfCBldHJheCopCisJCWJhc2ljX21hY2hpbmU9Y3Jpcy1heGlzCisJCTs7CisJY3J4KQorCQliYXNpY19tYWNoaW5lPWNyeC11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwlkYTMwIHwgZGEzMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstZGEzMAorCQk7OworCWRlY3N0YXRpb24gfCBkZWNzdGF0aW9uLTMxMDAgfCBwbWF4IHwgcG1heC0qIHwgcG1pbiB8IGRlYzMxMDAgfCBkZWNzdGF0bikKKwkJYmFzaWNfbWFjaGluZT1taXBzLWRlYworCQk7OworCWRlY3N5c3RlbTEwKiB8IGRlYzEwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMxMAorCQk7OworCWRlY3N5c3RlbTIwKiB8IGRlYzIwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMyMAorCQk7OworCWRlbHRhIHwgMzMwMCB8IG1vdG9yb2xhLTMzMDAgfCBtb3Rvcm9sYS1kZWx0YSBcCisJICAgICAgfCAzMzAwLW1vdG9yb2xhIHwgZGVsdGEtbW90b3JvbGEpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1tb3Rvcm9sYQorCQk7OworCWRlbHRhODgpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQorCQlvcz0tc3lzdjMKKwkJOzsKKwlkaWNvcykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1kaWNvcworCQk7OworCWRqZ3BwKQorCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKKwkJb3M9LW1zZG9zZGpncHAKKwkJOzsKKwlkcHgyMCB8IGRweDIwLSopCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWJ1bGwKKwkJb3M9LWJvc3gKKwkJOzsKKwlkcHgyKiB8IGRweDIqLWJ1bGwpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MworCQk7OworCWVibW9uMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS1lYm1vbgorCQk7OworCWVseHNpKQorCQliYXNpY19tYWNoaW5lPWVseHNpLWVseHNpCisJCW9zPS1ic2QKKwkJOzsKKwllbmNvcmUgfCB1bWF4IHwgbW1heCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1lbmNvcmUKKwkJOzsKKwllczE4MDAgfCBPU0U2OGsgfCBvc2U2OGsgfCBvc2UgfCBPU0UpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJZngyODAwKQorCQliYXNpY19tYWNoaW5lPWk4NjAtYWxsaWFudAorCQk7OworCWdlbml4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLW5zCisJCTs7CisJZ21pY3JvKQorCQliYXNpY19tYWNoaW5lPXRyb24tZ21pY3JvCisJCW9zPS1zeXN2CisJCTs7CisJZ28zMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1nbzMyCisJCTs7CisJaDMwNTByKiB8IGhpdXgqKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCWg4MzAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWg4MzAweHJheSkKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS14cmF5CisJCTs7CisJaDg1MDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDg1MDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaGFycmlzKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1zeXN2MworCQk7OworCWhwMzAwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwMzAwYnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWJzZAorCQk7OworCWhwMzAwaHB1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ocHV4CisJCTs7CisJaHAzazlbMC05XVswLTldIHwgaHA5WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azJbMC05XVswLTldIHwgaHA5azMxWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWhwCisJCTs7CisJaHA5azNbMi05XVswLTldKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDlrNlswLTldWzAtOV0gfCBocDZbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrN1swLTc5XVswLTldIHwgaHA3WzAtNzldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs3OFswLTldIHwgaHA3OFswLTldKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFs2N10xIHwgaHA4WzY3XTEgfCBocDlrODBbMjRdIHwgaHA4MFsyNF0gfCBocDlrOFs3OF05IHwgaHA4Wzc4XTkgfCBocDlrODkzIHwgaHA4OTMpCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMTM2NzldIHwgaHA4WzAtOV1bMTM2NzldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzAtOV0gfCBocDhbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocHBhLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwlocHBhb3NmKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LW9zZgorCQk7OworCWhwcHJvKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LXByb2VsZgorCQk7OworCWkzNzAtaWJtKiB8IGlibSopCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJOzsKKwlpKjg2djMyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YzMgorCQk7OworCWkqODZ2NCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjQKKwkJOzsKKwlpKjg2dikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2CisJCTs7CisJaSo4NnNvbDIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlpMzg2bWFjaCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LW1hY2gKKwkJb3M9LW1hY2gKKwkJOzsKKwlpMzg2LXZzdGEgfCB2c3RhKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tdnN0YQorCQk7OworCWlyaXMgfCBpcmlzNGQpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZ2kKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1pcml4KikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LWlyaXg0CisJCQk7OworCQllc2FjCisJCTs7CisJaXNpNjggfCBpc2kpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1pc2kKKwkJb3M9LXN5c3YKKwkJOzsKKwltNjhrbm9tbXUpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCW02OGtub21tdS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJbTg4ay1vbXJvbiopCisJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgorCQk7OworCW1hZ251bSB8IG0zMjMwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQlvcz0tc3lzdgorCQk7OworCW1lcmxpbikKKwkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisJCW9zPS1zeXN2CisJCTs7CisJbWljcm9ibGF6ZSkKKwkJYmFzaWNfbWFjaGluZT1taWNyb2JsYXplLXhpbGlueAorCQk7OworCW1pbmd3MzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCW1pbmd3MzJjZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tbWluZ3czMmNlCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1zZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zZG9zCisJCTs7CisJbXMxLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbXMxLS9tdC0vJ2AKKwkJOzsKKwltc3lzKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zeXMKKwkJOzsKKwltdnMpCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJb3M9LW12cworCQk7OworCW5hY2wpCisJCWJhc2ljX21hY2hpbmU9bGUzMi11bmtub3duCisJCW9zPS1uYWNsCisJCTs7CisJbmNyMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgorCQlvcz0tc3lzdjQKKwkJOzsKKwluZXRic2QzODYpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1uZXRic2QKKwkJOzsKKwluZXR3aW5kZXIpCisJCWJhc2ljX21hY2hpbmU9YXJtdjRsLXJlYmVsCisJCW9zPS1saW51eAorCQk7OworCW5ld3MgfCBuZXdzNzAwIHwgbmV3czgwMCB8IG5ld3M5MDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzMTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMzAtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3cy0zNjAwIHwgcmlzYy1uZXdzKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmVjdjcwKQorCQliYXNpY19tYWNoaW5lPXY3MC1uZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwluZXh0IHwgbSotbmV4dCApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uZXh0CisJCWNhc2UgJG9zIGluCisJCSAgICAtbmV4dHN0ZXAqICkKKwkJCTs7CisJCSAgICAtbnMyKikKKwkJICAgICAgb3M9LW5leHRzdGVwMgorCQkJOzsKKwkJICAgICopCisJCSAgICAgIG9zPS1uZXh0c3RlcDMKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwluaDMwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaFs0NV0wMDApCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaW5keTk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1uaW5keQorCQk7OworCW1vbjk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1tb245NjAKKwkJOzsKKwlub25zdG9wdXgpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1jb21wYXEKKwkJb3M9LW5vbnN0b3B1eAorCQk7OworCW5wMSkKKwkJYmFzaWNfbWFjaGluZT1ucDEtZ291bGQKKwkJOzsKKwluZW8tdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5lby10YW5kZW0KKwkJOzsKKwluc2UtdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zZS10YW5kZW0KKwkJOzsKKwluc3ItdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zci10YW5kZW0KKwkJOzsKKwlvcDUwbi0qIHwgb3A2MGMtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQlvcz0tcHJvZWxmCisJCTs7CisJb3BlbnJpc2MgfCBvcGVucmlzYy0qKQorCQliYXNpY19tYWNoaW5lPW9yMzItdW5rbm93bgorCQk7OworCW9zNDAwKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1vczQwMAorCQk7OworCU9TRTY4MDAwIHwgb3NlNjgwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlvczY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5vbmUKKwkJb3M9LW9zNjhrCisJCTs7CisJcGEtaGl0YWNoaSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwlwYXJhZ29uKQorCQliYXNpY19tYWNoaW5lPWk4NjAtaW50ZWwKKwkJb3M9LW9zZgorCQk7OworCXBhcmlzYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJcGFyaXNjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlwYmQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCisJCTs7CisJcGJiKQorCQliYXNpY19tYWNoaW5lPW02OGstdHRpCisJCTs7CisJcGM1MzIgfCBwYzUzMi0qKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXBjNTMyCisJCTs7CisJcGM5OCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCTs7CisJcGM5OC0qKQorCQliYXNpY19tYWNoaW5lPWkzODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtIHwgcDUgfCBrNSB8IGs2IHwgbmV4Z2VuIHwgdmlhYzMpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQk7OworCXBlbnRpdW1wcm8gfCBwNiB8IDZ4ODYgfCBhdGhsb24gfCBhdGhsb25fKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bWlpIHwgcGVudGl1bTIgfCBwZW50aXVtaWlpIHwgcGVudGl1bTMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW00KQorCQliYXNpY19tYWNoaW5lPWk3ODYtcGMKKwkJOzsKKwlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBuZXhnZW4tKiB8IHZpYWMzLSopCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bWlpLSogfCBwZW50aXVtMi0qIHwgcGVudGl1bWlpaS0qIHwgcGVudGl1bTMtKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bTQtKikKKwkJYmFzaWNfbWFjaGluZT1pNzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcG4pCisJCWJhc2ljX21hY2hpbmU9cG4tZ291bGQKKwkJOzsKKwlwb3dlcikJYmFzaWNfbWFjaGluZT1wb3dlci1pYm0KKwkJOzsKKwlwcGMgfCBwcGNiZSkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJOzsKKwlwcGMtKiB8IHBwY2JlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCisJCTs7CisJcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgorCQk7OworCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSB8IHBwYzY0LWxlIHwgcG93ZXJwYzY0LWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCisJCTs7CisJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwczIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1pYm0KKwkJOzsKKwlwdzMyKQorCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQlvcz0tcHczMgorCQk7OworCXJkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdHJvbmdhcm0tKiB8IHRodW1iLSopCisJCWJhc2ljX21hY2hpbmU9YXJtLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJc3VuMikKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCTs7CisJc3VuMm9zMykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4yb3M0KQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjNvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjNvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRvczMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW40b3M0KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNHNvbDIpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zb2xhcmlzMgorCQk7OworCXN1bjMgfCBzdW4zLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJOzsKKwlzdW40KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCXN1bjM4NiB8IHN1bjM4NmkgfCByb2FkcnVubmVyKQorCQliYXNpY19tYWNoaW5lPWkzODYtc3VuCisJCTs7CisJc3YxKQorCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwlzeW1tZXRyeSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJdDNlKQorCQliYXNpY19tYWNoaW5lPWFscGhhZXY1LWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXQ5MCkKKwkJYmFzaWNfbWFjaGluZT10OTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdGlsZSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdHgzOSkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCisJCTs7CisJdHgzOWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgorCQk7OworCXRvYWQxKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAorCQlvcz0tdG9wczIwCisJCTs7CisJdG93ZXIgfCB0b3dlci0zMikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgorCQk7OworCXRwZikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJb3M9LXRwZgorCQk7OworCXVkaTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJdWx0cmEzKQorCQliYXNpY19tYWNoaW5lPWEyOWstbnl1CisJCW9zPS1zeW0xCisJCTs7CisJdjgxMCB8IG5lY3Y4MTApCisJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKKwkJb3M9LW5vbmUKKwkJOzsKKwl2YXh2KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwl2bXMpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tdm1zCisJCTs7CisJdnBwKnx2eHx2eC0qKQorCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQorCQk7OworCXZ4d29ya3M5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdzY1KikKKwkJYmFzaWNfbWFjaGluZT13NjUtd2RjCisJCW9zPS1ub25lCisJCTs7CisJdzg5ay0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQlvcz0tcHJvZWxmCisJCTs7CisJeGJveCkKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJeHBzIHwgeHBzMTAwKQorCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKwkJOzsKKwl4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXnhzY2FsZS9hcm0vJ2AKKwkJOzsKKwl5bXApCisJCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXo4ay0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCXo4MC0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCW5vbmUpCisJCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCisJCW9zPS1ub25lCisJCTs7CisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KKyMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KKwl3ODlrKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQk7OworCW9wNTBuKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJb3A2MGMpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlyb21wKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJbW1peCkKKwkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCisJCTs7CisJcnM2MDAwKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KKwkJOzsKKwl2YXgpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQk7OworCXBkcDEwKQorCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0CisJCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgorCQk7OworCXBkcDExKQorCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYworCQk7OworCXdlMzJrKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisJCTs7CisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJY3lkcmEpCisJCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQorCQk7OworCW9yaW9uKQorCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAorCQk7OworCW9yaW9uMTA1KQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCisJCTs7CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCTs7CisJcG1hYyB8IHBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKKwkJOzsKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWRpZ2l0YWwqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKKwkJOzsKKwkqLWNvbW1vZG9yZSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIFsgeCIkb3MiICE9IHgiIiBdCit0aGVuCitjYXNlICRvcyBpbgorCSMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisJIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KKwkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KKwktYXVyb3JhdXgpCisJCW9zPS1hdXJvcmF1eAorCQk7OworCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisJCTs7CisJLXNvbGFyaXMpCisJCW9zPS1zb2xhcmlzMgorCQk7OworCS1zdnI0KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXVuaXh3YXJlKikKKwkJb3M9LXN5c3Y0LjJ1dworCQk7OworCS1nbnUvbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCisJIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KKwkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KKwktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtYXVyb3JhdXgqIHwgLXNvbGFyaXMqIFwKKwkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogXAorCSAgICAgIHwgLWFtaWdhb3MqIHwgLWFtaWdhZG9zKiB8IC1tc2RvcyogfCAtbmV3c29zKiB8IC11bmljb3MqIHwgLWFvZiogXAorCSAgICAgIHwgLWFvcyogfCAtYXJvcyogXAorCSAgICAgIHwgLW5pbmR5KiB8IC12eHNpbSogfCAtdnh3b3JrcyogfCAtZWJtb24qIHwgLWhtcyogfCAtbXZzKiBcCisJICAgICAgfCAtY2xpeCogfCAtcmlzY29zKiB8IC11bmlwbHVzKiB8IC1pcmlzKiB8IC1ydHUqIHwgLXhlbml4KiBcCisJICAgICAgfCAtaGl1eCogfCAtMzg2YnNkKiB8IC1rbmV0YnNkKiB8IC1taXJic2QqIHwgLW5ldGJzZCogXAorCSAgICAgIHwgLW9wZW5ic2QqIHwgLXNvbGlkYnNkKiBcCisJICAgICAgfCAtZWtrb2JzZCogfCAta2ZyZWVic2QqIHwgLWZyZWVic2QqIHwgLXJpc2NpeCogfCAtbHlueG9zKiBcCisJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAorCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKKwkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAorCSAgICAgIHwgLWN5Z3dpbiogfCAtbXN5cyogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LWFuZHJvaWQqIFwKKwkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAorCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKwkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAorCSAgICAgIHwgLXN0b3JtLWNoYW9zKiB8IC10b3BzMTAqIHwgLXRlbmV4KiB8IC10b3BzMjAqIHwgLWl0cyogXAorCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKKwkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKKwkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAorCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqIHwgLWVzKikKKwkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OworCS1saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwktc3Vub3M1KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQk7OworCS1zdW5vczYqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJLW9wZW5lZCopCisJCW9zPS1vcGVuZWRpdGlvbgorCQk7OworCS1vczQwMCopCisJCW9zPS1vczQwMAorCQk7OworCS13aW5jZSopCisJCW9zPS13aW5jZQorCQk7OworCS1vc2Zyb3NlKikKKwkJb3M9LW9zZnJvc2UKKwkJOzsKKwktb3NmKikKKwkJb3M9LW9zZgorCQk7OworCS11dGVrKikKKwkJb3M9LWJzZAorCQk7OworCS1keW5peCopCisJCW9zPS1ic2QKKwkJOzsKKwktYWNpcyopCisJCW9zPS1hb3MKKwkJOzsKKwktYXRoZW9zKikKKwkJb3M9LWF0aGVvcworCQk7OworCS1zeWxsYWJsZSopCisJCW9zPS1zeWxsYWJsZQorCQk7OworCS0zODZic2QpCisJCW9zPS1ic2QKKwkJOzsKKwktY3RpeCogfCAtdXRzKikKKwkJb3M9LXN5c3YKKwkJOzsKKwktbm92YSopCisJCW9zPS1ydG1rLW5vdmEKKwkJOzsKKwktbnMyICkKKwkJb3M9LW5leHRzdGVwMgorCQk7OworCS1uc2sqKQorCQlvcz0tbnNrCisJCTs7CisJIyBQcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXIgb2Ygc2luaXg1LgorCS1zaW5peDUuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJOzsKKwktc2luaXgqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdHBmKikKKwkJb3M9LXRwZgorCQk7OworCS10cml0b24qKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktb3NzKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCS1zdnIzKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3lzdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIC1zeXN2cjQuCisJLXN5c3YqKQorCQk7OworCS1vc2UqKQorCQlvcz0tb3NlCisJCTs7CisJLWVzMTgwMCopCisJCW9zPS1vc2UKKwkJOzsKKwkteGVuaXgpCisJCW9zPS14ZW5peAorCQk7OworCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCW9zPS1taW50CisJCTs7CisJLWFyb3MqKQorCQlvcz0tYXJvcworCQk7OworCS1rYW9zKikKKwkJb3M9LWthb3MKKwkJOzsKKwktenZtb2UpCisJCW9zPS16dm1vZQorCQk7OworCS1kaWNvcyopCisJCW9zPS1kaWNvcworCQk7OworCS1uYWNsKikKKwkJOzsKKwktbm9uZSkKKwkJOzsKKwkqKQorCQkjIEdldCByaWQgb2YgdGhlIGAtJyBhdCB0aGUgYmVnaW5uaW5nIG9mICRvcy4KKwkJb3M9YGVjaG8gJG9zIHwgc2VkICdzL1teLV0qLS8vJ2AKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBzeXN0ZW0gXGAkb3NcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworZWxzZQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgbWFjaGluZXMuCisjIFRoZSB2YWx1ZSBzaG91bGQgYmUgd2hhdCB0aGUgdmVuZG9yIGN1cnJlbnRseSBzaGlwcyBvdXQgdGhlIGRvb3Igd2l0aCB0aGVpcgorIyBtYWNoaW5lIG9yIHB1dCBhbm90aGVyIHdheSwgdGhlIG1vc3QgcG9wdWxhciBvcyBwcm92aWRlZCB3aXRoIHRoZSBtYWNoaW5lLgorCisjIE5vdGUgdGhhdCBpZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHRvIG1hdGNoICItTUFOVUZBQ1RVUkVSIiBoZXJlIChzYXksCisjICItc3VuIiksIHRoZW4geW91IGhhdmUgdG8gdGVsbCB0aGUgY2FzZSBzdGF0ZW1lbnQgdXAgdG93YXJkcyB0aGUgdG9wCisjIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZyBzeXN0ZW0uICBPdGhlcndpc2UsIGNvZGUgYWJvdmUKKyMgd2lsbCBzaWduYWwgYW4gZXJyb3Igc2F5aW5nIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZworIyBzeXN0ZW0sIGFuZCB3ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KKworY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCXNjb3JlLSopCisJCW9zPS1lbGYKKwkJOzsKKwlzcHUtKikKKwkJb3M9LWVsZgorCQk7OworCSotYWNvcm4pCisJCW9zPS1yaXNjaXgxLjIKKwkJOzsKKwlhcm0qLXJlYmVsKQorCQlvcz0tbGludXgKKwkJOzsKKwlhcm0qLXNlbWkpCisJCW9zPS1hb3V0CisJCTs7CisJYzR4LSogfCB0aWM0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPS10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQorCQlvcz0tbm9uZQorCQk7OworCSotZGVjIHwgdmF4LSopCisJCW9zPS11bHRyaXg0LjIKKwkJOzsKKwltNjgqLWFwb2xsbykKKwkJb3M9LWRvbWFpbgorCQk7OworCWkzODYtc3VuKQorCQlvcz0tc3Vub3M0LjAuMgorCQk7OworCW02ODAwMC1zdW4pCisJCW9zPS1zdW5vczMKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworCW1lcC0qKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotY2lzY28pCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi0qKQorCQlvcz0tZWxmCisJCTs7CisJb3IzMi0qKQorCQlvcz0tY29mZgorCQk7OworCSotdHRpKQkjIG11c3QgYmUgYmVmb3JlIHNwYXJjIGVudHJ5IG9yIHdlIGdldCB0aGUgd3Jvbmcgb3MuCisJCW9zPS1zeXN2MworCQk7OworCXNwYXJjLSogfCAqLXN1bikKKwkJb3M9LXN1bm9zNC4xLjEKKwkJOzsKKwkqLWJlKQorCQlvcz0tYmVvcworCQk7OworCSotaGFpa3UpCisJCW9zPS1oYWlrdQorCQk7OworCSotaWJtKQorCQlvcz0tYWl4CisJCTs7CisJKi1rbnV0aCkKKwkJb3M9LW1taXh3YXJlCisJCTs7CisJKi13ZWMpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLXdpbmJvbmQpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLW9raSkKKwkJb3M9LXByb2VsZgorCQk7OworCSotaHApCisJCW9zPS1ocHV4CisJCTs7CisJKi1oaXRhY2hpKQorCQlvcz0taGl1eAorCQk7OworCWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVyZ2VudCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWNibSkKKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwkqLWRnKQorCQlvcz0tZGd1eAorCQk7OworCSotZG9scGhpbikKKwkJb3M9LXN5c3YzCisJCTs7CisJbTY4ay1jY3VyKQorCQlvcz0tcnR1CisJCTs7CisJbTg4ay1vbXJvbiopCisJCW9zPS1sdW5hCisJCTs7CisJKi1uZXh0ICkKKwkJb3M9LW5leHRzdGVwCisJCTs7CisJKi1zZXF1ZW50KQorCQlvcz0tcHR4CisJCTs7CisJKi1jcmRzKQorCQlvcz0tdW5vcworCQk7OworCSotbnMpCisJCW9zPS1nZW5peAorCQk7OworCWkzNzAtKikKKwkJb3M9LW12cworCQk7OworCSotbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCSotZ291bGQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1oaWdobGV2ZWwpCisJCW9zPS1ic2QKKwkJOzsKKwkqLWVuY29yZSkKKwkJb3M9LWJzZAorCQk7OworCSotc2dpKQorCQlvcz0taXJpeAorCQk7OworCSotc2llbWVucykKKwkJb3M9LXN5c3Y0CisJCTs7CisJKi1tYXNzY29tcCkKKwkJb3M9LXJ0dQorCQk7OworCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRzdSkKKwkJb3M9LXV4cHYKKwkJOzsKKwkqLXJvbTY4aykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLSpidWcpCisJCW9zPS1jb2ZmCisJCTs7CisJKi1hcHBsZSkKKwkJb3M9LW1hY29zCisJCTs7CisJKi1hdGFyaSopCisJCW9zPS1taW50CisJCTs7CisJKikKKwkJb3M9LW5vbmUKKwkJOzsKK2VzYWMKK2ZpCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCisjIG1hbnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgordmVuZG9yPXVua25vd24KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLXVua25vd24pCisJCWNhc2UgJG9zIGluCisJCQktcmlzY2l4KikKKwkJCQl2ZW5kb3I9YWNvcm4KKwkJCQk7OworCQkJLXN1bm9zKikKKwkJCQl2ZW5kb3I9c3VuCisJCQkJOzsKKwkJCS1jbmsqfC1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLWJlb3MqKQorCQkJCXZlbmRvcj1iZQorCQkJCTs7CisJCQktaHB1eCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1oaXV4KikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktdW5vcyopCisJCQkJdmVuZG9yPWNyZHMKKwkJCQk7OworCQkJLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQktbHVuYSopCisJCQkJdmVuZG9yPW9tcm9uCisJCQkJOzsKKwkJCS1nZW5peCopCisJCQkJdmVuZG9yPW5zCisJCQkJOzsKKwkJCS1tdnMqIHwgLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktb3M0MDAqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQorCQkJCXZlbmRvcj13cnMKKwkJCQk7OworCQkJLWF1eCopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS1tcHcqIHwgLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJLXZvcyopCisJCQkJdmVuZG9yPXN0cmF0dXMKKwkJCQk7OworCQllc2FjCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCisJCTs7Citlc2FjCisKK2VjaG8gJGJhc2ljX21hY2hpbmUkb3MKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9kZXBjb21wIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9kZXBjb21wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlYmQ1YjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2RlcGNvbXAKQEAgLTAsMCArMSw3OTEgQEAKKyMhIC9iaW4vc2gKKyMgZGVwY29tcCAtIGNvbXBpbGUgYSBwcm9ncmFtIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGFzIHNpZGUtZWZmZWN0cworCitzY3JpcHR2ZXJzaW9uPTIwMTMtMDUtMzAuMDc7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQWxleGFuZHJlIE9saXZhIDxvbGl2YUBkY2MudW5pY2FtcC5icj4uCisKK2Nhc2UgJDEgaW4KKyAgJycpCisgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgZXhpdCAxOworICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogZGVwY29tcCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQorCitSdW4gUFJPR1JBTVMgQVJHUyB0byBjb21waWxlIGEgZmlsZSwgZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMKK2FzIHNpZGUtZWZmZWN0cy4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzOgorICBkZXBtb2RlICAgICBEZXBlbmRlbmN5IHRyYWNraW5nIG1vZGUuCisgIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgJ1BST0dSQU1TIEFSR1MnLgorICBvYmplY3QgICAgICBPYmplY3QgZmlsZSBvdXRwdXQgYnkgJ1BST0dSQU1TIEFSR1MnLgorICBERVBESVIgICAgICBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZGVwZW5kZW5jaWVzLgorICBkZXBmaWxlICAgICBEZXBlbmRlbmN5IGZpbGUgdG8gb3V0cHV0LgorICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXR0aW5nIGRlcGVuZGVuY2llcy4KKyAgbGlidG9vbCAgICAgV2hldGhlciBsaWJ0b29sIGlzIHVzZWQgKHllcy9ubykuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gImRlcGNvbXAgJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7Citlc2FjCisKKyMgR2V0IHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IG9mIHRoZSBnaXZlbiBwYXRoLCBhbmQgc2F2ZSBpdCBpbiB0aGUKKyMgZ2xvYmFsIHZhcmlhYmxlcyAnJGRpcicuICBOb3RlIHRoYXQgdGhpcyBkaXJlY3RvcnkgY29tcG9uZW50IHdpbGwKKyMgYmUgZWl0aGVyIGVtcHR5IG9yIGVuZGluZyB3aXRoIGEgJy8nIGNoYXJhY3Rlci4gIFRoaXMgaXMgZGVsaWJlcmF0ZS4KK3NldF9kaXJfZnJvbSAoKQoreworICBjYXNlICQxIGluCisgICAgKi8qKSBkaXI9YGVjaG8gIiQxIiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2A7OworICAgICAgKikgZGlyPTs7CisgIGVzYWMKK30KKworIyBHZXQgdGhlIHN1ZmZpeC1zdHJpcHBlZCBiYXNlbmFtZSBvZiB0aGUgZ2l2ZW4gcGF0aCwgYW5kIHNhdmUgaXQgdGhlCisjIGdsb2JhbCB2YXJpYWJsZSAnJGJhc2UnLgorc2V0X2Jhc2VfZnJvbSAoKQoreworICBiYXNlPWBlY2hvICIkMSIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLlteLl0qJC8vJ2AKK30KKworIyBJZiBubyBkZXBlbmRlbmN5IGZpbGUgd2FzIGFjdHVhbGx5IGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyIGludm9jYXRpb24sCisjIHdlIHN0aWxsIGhhdmUgdG8gY3JlYXRlIGEgZHVtbXkgZGVwZmlsZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlCisjIE1ha2VmaWxlICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorbWFrZV9kdW1teV9kZXBmaWxlICgpCit7CisgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCit9CisKKyMgRmFjdG9yIG91dCBzb21lIGNvbW1vbiBwb3N0LXByb2Nlc3Npbmcgb2YgdGhlIGdlbmVyYXRlZCBkZXBmaWxlLgorIyBSZXF1aXJlcyB0aGUgYXV4aWxpYXJ5IGdsb2JhbCB2YXJpYWJsZSAnJHRtcGRlcGZpbGUnIHRvIGJlIHNldC4KK2FpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZSAoKQoreworICAjIElmIHRoZSBjb21waWxlciBhY3R1YWxseSBtYW5hZ2VkIHRvIHByb2R1Y2UgYSBkZXBlbmRlbmN5IGZpbGUsCisgICMgcG9zdC1wcm9jZXNzIGl0LgorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSAnZm9vLm86IGRlcGVuZGVuY3kuaCcuCisgICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgICAjICAgJG9iamVjdDogZGVwZW5kZW5jeS5oCisgICAgIyBhbmQgb25lIHRvIHNpbXBseSBvdXRwdXQKKyAgICAjICAgZGVwZW5kZW5jeS5oOgorICAgICMgd2hpY2ggaXMgbmVlZGVkIHRvIGF2b2lkIHRoZSBkZWxldGVkLWhlYWRlciBwcm9ibGVtLgorICAgIHsgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIgorICAgICAgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOlskdGFiIF0qLCwiIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIgorICAgIH0gPiAiJGRlcGZpbGUiCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICBlbHNlCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCisgIGZpCit9CisKKyMgQSB0YWJ1bGF0aW9uIGNoYXJhY3Rlci4KK3RhYj0nCScKKyMgQSBuZXdsaW5lIGNoYXJhY3Rlci4KK25sPScKKycKKyMgQ2hhcmFjdGVyIHJhbmdlcyBtaWdodCBiZSBwcm9ibGVtYXRpYyBvdXRzaWRlIHRoZSBDIGxvY2FsZS4KKyMgVGhlc2UgZGVmaW5pdGlvbnMgaGVscC4KK3VwcGVyPUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaCitsb3dlcj1hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorZGlnaXRzPTAxMjM0NTY3ODkKK2FscGhhPSR7dXBwZXJ9JHtsb3dlcn0KKworaWYgdGVzdCAteiAiJGRlcG1vZGUiIHx8IHRlc3QgLXogIiRzb3VyY2UiIHx8IHRlc3QgLXogIiRvYmplY3QiOyB0aGVuCisgIGVjaG8gImRlcGNvbXA6IFZhcmlhYmxlcyBzb3VyY2UsIG9iamVjdCBhbmQgZGVwbW9kZSBtdXN0IGJlIHNldCIgMT4mMgorICBleGl0IDEKK2ZpCisKKyMgRGVwZW5kZW5jaWVzIGZvciBzdWIvYmFyLm8gb3Igc3ViL2Jhci5vYmogZ28gaW50byBzdWIvLmRlcHMvYmFyLlBvLgorZGVwZmlsZT0ke2RlcGZpbGUtYGVjaG8gIiRvYmplY3QiIHwKKyAgc2VkICdzfFteXFwvXSokfCcke0RFUERJUi0uZGVwc30nLyZ8O3N8XC5cKFteLl0qXCkkfC5QXDF8O3N8UG9iaiR8UG98J2B9Cit0bXBkZXBmaWxlPSR7dG1wZGVwZmlsZS1gZWNobyAiJGRlcGZpbGUiIHwgc2VkICdzL1wuXChbXi5dKlwpJC8uVFwxLydgfQorCitybSAtZiAiJHRtcGRlcGZpbGUiCisKKyMgQXZvaWQgaW50ZXJmZXJlbmNlcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4KK2djY2ZsYWc9IGRhc2htZmxhZz0KKworIyBTb21lIG1vZGVzIHdvcmsganVzdCBsaWtlIG90aGVyIG1vZGVzLCBidXQgdXNlIGRpZmZlcmVudCBmbGFncy4gIFdlCisjIHBhcmFtZXRlcml6ZSBoZXJlLCBidXQgc3RpbGwgbGlzdCB0aGUgbW9kZXMgaW4gdGhlIGJpZyBjYXNlIGJlbG93LAorIyB0byBtYWtlIGRlcGVuZC5tNCBlYXNpZXIgdG8gd3JpdGUuICBOb3RlIHRoYXQgd2UgKmNhbm5vdCogdXNlIGEgY2FzZQorIyBoZXJlLCBiZWNhdXNlIHRoaXMgZmlsZSBjYW4gb25seSBjb250YWluIG9uZSBjYXNlIHN0YXRlbWVudC4KK2lmIHRlc3QgIiRkZXBtb2RlIiA9IGhwOyB0aGVuCisgICMgSFAgY29tcGlsZXIgdXNlcyAtTSBhbmQgbm8gZXh0cmEgYXJnLgorICBnY2NmbGFnPS1NCisgIGRlcG1vZGU9Z2NjCitmaQorCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBkYXNoWG1zdGRvdXQ7IHRoZW4KKyAgIyBUaGlzIGlzIGp1c3QgbGlrZSBkYXNobXN0ZG91dCB3aXRoIGEgZGlmZmVyZW50IGFyZ3VtZW50LgorICBkYXNobWZsYWc9LXhNCisgIGRlcG1vZGU9ZGFzaG1zdGRvdXQKK2ZpCisKK2N5Z3BhdGhfdT0iY3lncGF0aCAtdSAtZiAtIgoraWYgdGVzdCAiJGRlcG1vZGUiID0gbXN2Y21zeXM7IHRoZW4KKyAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3Zpc3VhbGNwcCBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCisgICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAorICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKKyAgY3lncGF0aF91PSdzZWQgcyxcXFxcLC8sZycKKyAgZGVwbW9kZT1tc3Zpc3VhbGNwcAorZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0gbXN2Yzdtc3lzOyB0aGVuCisgICMgVGhpcyBpcyBqdXN0IGxpa2UgbXN2YzcgYnV0IHcvbyBjeWdwYXRoIHRyYW5zbGF0aW9uLgorICAjIEp1c3QgY29udmVydCB0aGUgYmFja3NsYXNoLWVzY2FwZWQgYmFja3NsYXNoZXMgdG8gc2luZ2xlIGZvcndhcmQKKyAgIyBzbGFzaGVzIHRvIHNhdGlzZnkgZGVwZW5kLm00CisgIGN5Z3BhdGhfdT0nc2VkIHMsXFxcXCwvLGcnCisgIGRlcG1vZGU9bXN2YzcKK2ZpCisKK2lmIHRlc3QgIiRkZXBtb2RlIiA9IHhsYzsgdGhlbgorICAjIElCTSBDL0MrKyBDb21waWxlcnMgeGxjL3hsQyBjYW4gb3V0cHV0IGdjYy1saWtlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24uCisgIGdjY2ZsYWc9LXFtYWtlZGVwPWdjYywtTUYKKyAgZGVwbW9kZT1nY2MKK2ZpCisKK2Nhc2UgIiRkZXBtb2RlIiBpbgorZ2NjMykKKyMjIGdjYyAzIGltcGxlbWVudHMgZGVwZW5kZW5jeSB0cmFja2luZyB0aGF0IGRvZXMgZXhhY3RseSB3aGF0CisjIyB3ZSB3YW50LiAgWWF5ISAgTm90ZTogZm9yIHNvbWUgcmVhc29uIGxpYnRvb2wgMS40IGRvZXNuJ3QgbGlrZQorIyMgaXQgaWYgLU1EIC1NUCBjb21lcyBhZnRlciB0aGUgLU1GIHN0dWZmLiAgSG1tLgorIyMgVW5mb3J0dW5hdGVseSwgRnJlZUJTRCBjODkgYWNjZXB0YW5jZSBvZiBmbGFncyBkZXBlbmRzIHVwb24KKyMjIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgb3JkZXI7IHNvIGFkZCB0aGUgZmxhZ3Mgd2hlcmUgdGhleQorIyMgYXBwZWFyIGluIGRlcGVuZDIuYW0uICBOb3RlIHRoYXQgdGhlIHNsb3dkb3duIGluY3VycmVkIGhlcmUKKyMjIGFmZmVjdHMgb25seSBjb25maWd1cmU6IGluIG1ha2VmaWxlcywgJUZBU1RERVAlIHNob3J0Y3V0cyB0aGlzLgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLWMpIHNldCBmbm9yZCAiJEAiIC1NVCAiJG9iamVjdCIgLU1EIC1NUCAtTUYgIiR0bXBkZXBmaWxlIiAiJGFyZyIgOzsKKyAgICAqKSAgc2V0IGZub3JkICIkQCIgIiRhcmciIDs7CisgICAgZXNhYworICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBzaGlmdCAjICRhcmcKKyAgZG9uZQorICAiJEAiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIG12ICIkdG1wZGVwZmlsZSIgIiRkZXBmaWxlIgorICA7OworCitnY2MpCisjIyBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IGp1c3QgY2F0ZXIgdG8gb2Jzb3NldGUgcHJlLTMueCBHQ0MgY29tcGlsZXJzLgorIyMgYnV0IGFsc28gdG8gaW4tdXNlIGNvbXBpbGVycyBsaWtlIElNQiB4bGMveGxDIGFuZCB0aGUgSFAgQyBjb21waWxlci4KKyMjIChzZWUgdGhlIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgdG8gJGdjY2ZsYWcgYWJvdmUpLgorIyMgVGhlcmUgYXJlIHZhcmlvdXMgd2F5cyB0byBnZXQgZGVwZW5kZW5jeSBvdXRwdXQgZnJvbSBnY2MuICBIZXJlJ3MKKyMjIHdoeSB3ZSBwaWNrIHRoaXMgcmF0aGVyIG9ic2N1cmUgbWV0aG9kOgorIyMgLSBEb24ndCB3YW50IHRvIHVzZSAtTUQgYmVjYXVzZSB3ZSdkIGxpa2UgdGhlIGRlcGVuZGVuY2llcyB0byBlbmQKKyMjICAgdXAgaW4gYSBzdWJkaXIuICBIYXZpbmcgdG8gcmVuYW1lIGJ5IGhhbmQgaXMgdWdseS4KKyMjICAgKFdlIG1pZ2h0IGVuZCB1cCBkb2luZyB0aGlzIGFueXdheSB0byBzdXBwb3J0IG90aGVyIGNvbXBpbGVycy4pCisjIyAtIFRoZSBERVBFTkRFTkNJRVNfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxlIG1ha2VzIGdjYyBhY3QgbGlrZQorIyMgICAtTU0sIG5vdCAtTSAoZGVzcGl0ZSB3aGF0IHRoZSBkb2NzIHNheSkuICBBbHNvLCBpdCBtaWdodCBub3QgYmUKKyMjICAgc3VwcG9ydGVkIGJ5IHRoZSBvdGhlciBjb21waWxlcnMgd2hpY2ggdXNlIHRoZSAnZ2NjJyBkZXBtb2RlLgorIyMgLSBVc2luZyAtTSBkaXJlY3RseSBtZWFucyBydW5uaW5nIHRoZSBjb21waWxlciB0d2ljZSAoZXZlbiB3b3JzZQorIyMgICB0aGFuIHJlbmFtaW5nKS4KKyAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCisgICAgZ2NjZmxhZz0tTUQsCisgIGZpCisgICIkQCIgLVdwLCIkZ2NjZmxhZyR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgICMgVGhlIHNlY29uZCAtZSBleHByZXNzaW9uIGhhbmRsZXMgRE9TLXN0eWxlIGZpbGUgbmFtZXMgd2l0aCBkcml2ZQorICAjIGxldHRlcnMuCisgIHNlZCAtZSAncy9eW146XSo6IC8gLycgXAorICAgICAgLWUgJ3MvXlsnJGFscGhhJ106XC9bXjpdKjogLyAvJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgImRlbGV0ZWQgaGVhZGVyIGZpbGUiIHByb2JsZW0uCisjIyBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYSBoZWFkZXIgZmlsZSB3aGljaCBhcHBlYXJzIGluIGEgLlAgZmlsZQorIyMgaXMgZGVsZXRlZCwgdGhlIGRlcGVuZGVuY3kgY2F1c2VzIG1ha2UgdG8gZGllIChiZWNhdXNlIHRoZXJlIGlzCisjIyB0eXBpY2FsbHkgbm8gd2F5IHRvIHJlYnVpbGQgdGhlIGhlYWRlcikuICBXZSBhdm9pZCB0aGlzIGJ5IGFkZGluZworIyMgZHVtbXkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGhlYWRlciBmaWxlLiAgVG9vIGJhZCBnY2MgZG9lc24ndCBkbworIyMgdGhpcyBmb3IgdXMgZGlyZWN0bHkuCisjIyBTb21lIHZlcnNpb25zIG9mIGdjYyBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlICc6Jy4gIE9uIHRoZSB0aGVvcnkKKyMjIHRoYXQgdGhlIHNwYWNlIG1lYW5zIHNvbWV0aGluZywgd2UgYWRkIGEgc3BhY2UgdG8gdGhlIG91dHB1dCBhcworIyMgd2VsbC4gIGhwIGRlcG1vZGUgYWxzbyBhZGRzIHRoYXQgc3BhY2UsIGJ1dCBhbHNvIHByZWZpeGVzIHRoZSBWUEFUSAorIyMgdG8gdGhlIG9iamVjdC4gIFRha2UgY2FyZSB0byBub3QgcmVwZWF0IGl0IGluIHRoZSBvdXRwdXQuCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgfCBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICJzfC4qJG9iamVjdCR8fCIgLWUgJy86JC9kJyBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocCkKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK3NnaSkKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIiRAIiAiLVdwLC1NRHVwZGF0ZSwkdG1wZGVwZmlsZSIKKyAgZWxzZQorICAgICIkQCIgLU1EdXBkYXRlICIkdG1wZGVwZmlsZSIKKyAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcworICAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgICAgIyBDbGlwIG9mZiB0aGUgaW5pdGlhbCBlbGVtZW50ICh0aGUgZGVwZW5kZW50KS4gIERvbid0IHRyeSB0byBiZQorICAgICMgY2xldmVyIGFuZCByZXBsYWNlIHRoaXMgd2l0aCBzZWQgY29kZSwgYXMgSVJJWCBzZWQgd29uJ3QgaGFuZGxlCisgICAgIyBsaW5lcyB3aXRoIG1vcmUgdGhhbiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzICg0MDk2IGluCisgICAgIyBJUklYIDYuMiBzZWQsIDgxOTIgaW4gSVJJWCA2LjUpLiAgV2UgYWxzbyByZW1vdmUgY29tbWVudCBsaW5lczsKKyAgICAjIHRoZSBJUklYIGNjIGFkZHMgY29tbWVudHMgbGlrZSAnIzpmZWMnIHRvIHRoZSBlbmQgb2YgdGhlCisgICAgIyBkZXBlbmRlbmN5IGxpbmUuCisgICAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgXAorICAgICAgfCB0ciAiJG5sIiAnICcgPj4gIiRkZXBmaWxlIgorICAgIGVjaG8gPj4gIiRkZXBmaWxlIgorICAgICMgVGhlIHNlY29uZCBwYXNzIGdlbmVyYXRlcyBhIGR1bW15IGVudHJ5IGZvciBlYWNoIGhlYWRlciBmaWxlLgorICAgIHRyICcgJyAiJG5sIiA8ICIkdG1wZGVwZmlsZSIgXAorICAgICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKKyAgICAgID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgIG1ha2VfZHVtbXlfZGVwZmlsZQorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK3hsYykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK2FpeCkKKyAgIyBUaGUgQyBmb3IgQUlYIENvbXBpbGVyIHVzZXMgLU0gYW5kIG91dHB1dHMgdGhlIGRlcGVuZGVuY2llcworICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQorICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzICckb2JqZWN0OicgYXQgdGhlCisgICMgc3RhcnQgb2YgZWFjaCBsaW5lOyAkb2JqZWN0IGRvZXNuJ3QgaGF2ZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCisgICMgVmVyc2lvbiA2IHVzZXMgdGhlIGRpcmVjdG9yeSBpbiBib3RoIGNhc2VzLgorICBzZXRfZGlyX2Zyb20gIiRvYmplY3QiCisgIHNldF9iYXNlX2Zyb20gIiRvYmplY3QiCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS51CisgICAgdG1wZGVwZmlsZTI9JGJhc2UudQorICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS51CisgICAgIiRAIiAtV2MsLU0KKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS51CisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UudQorICAgICIkQCIgLU0KKyAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBhaXhfcG9zdF9wcm9jZXNzX2RlcGZpbGUKKyAgOzsKKwordGNjKQorICAjIHRjYyAoVGlueSBDIENvbXBpbGVyKSB1bmRlcnN0YW5kICctTUQgLU1GIGZpbGUnIHNpbmNlIHZlcnNpb24gMC45LjI2CisgICMgRklYTUU6IFRoYXQgdmVyc2lvbiBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhdCB0aGUgbW9tZW50IG9mIHdyaXRpbmcuCisgICMgICAgICAgIE1ha2UgdGhhdCB0aGlzIHN0YXRlbWVudCByZW1haW5zIHRydWUgYWxzbyBmb3Igc3RhYmxlLCByZWxlYXNlZAorICAjICAgICAgICB2ZXJzaW9ucy4KKyAgIyBJdCB3aWxsIHdyYXAgbGluZXMgKGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgbG9uZyBvciBzaG9ydCkgd2l0aCBhCisgICMgdHJhaWxpbmcgJ1wnLCBhcyBpbjoKKyAgIworICAjICAgZm9vLm8gOiBcCisgICMgICAgZm9vLmMgXAorICAjICAgIGZvby5oIFwKKyAgIworICAjIEl0IHdpbGwgcHV0IGEgdHJhaWxpbmcgJ1wnIGV2ZW4gb24gdGhlIGxhc3QgbGluZSwgYW5kIHdpbGwgdXNlIGxlYWRpbmcKKyAgIyBzcGFjZXMgcmF0aGVyIHRoYW4gbGVhZGluZyB0YWJzIChhdCBsZWFzdCBzaW5jZSBpdHMgY29tbWl0IDAzOTRjYWY3CisgICMgIkVtaXQgc3BhY2VzIGZvciAtTUQiKS4KKyAgIiRAIiAtTUQgLU1GICIkdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICAjIEVhY2ggbm9uLWVtcHR5IGxpbmUgaXMgb2YgdGhlIGZvcm0gJ2Zvby5vIDogXCcgb3IgJyBkZXAuaCBcJy4KKyAgIyBXZSBoYXZlIHRvIGNoYW5nZSBsaW5lcyBvZiB0aGUgZmlyc3Qga2luZCB0byAnJG9iamVjdDogXCcuCisgIHNlZCAtZSAic3wuKjp8JG9iamVjdCA6fCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAjIEFuZCBmb3IgZWFjaCBsaW5lIG9mIHRoZSBzZWNvbmQga2luZCwgd2UgaGF2ZSB0byBlbWl0IGEgJ2RlcC5oOicKKyAgIyBkdW1teSBkZXBlbmRlbmN5LCB0byBhdm9pZCB0aGUgZGVsZXRlZC1oZWFkZXIgcHJvYmxlbS4KKyAgc2VkIC1uIC1lICdzfF4gICpcKC4qXCkgKlxcJHxcMTp8cCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCisjIyBUaGUgb3JkZXIgb2YgdGhpcyBvcHRpb24gaW4gdGhlIGNhc2Ugc3RhdGVtZW50IGlzIGltcG9ydGFudCwgc2luY2UgdGhlCisjIyBzaGVsbCBjb2RlIGluIGNvbmZpZ3VyZSB3aWxsIHRyeSBlYWNoIG9mIHRoZXNlIGZvcm1hdHMgaW4gdGhlIG9yZGVyCisjIyBsaXN0ZWQgaW4gdGhpcyBmaWxlLiAgQSBwbGFpbiAnLU1EJyBvcHRpb24gd291bGQgYmUgdW5kZXJzdG9vZCBieSBtYW55CisjIyBjb21waWxlcnMsIHNvIHdlIG11c3QgZW5zdXJlIHRoaXMgY29tZXMgYWZ0ZXIgdGhlIGdjYyBhbmQgaWNjIG9wdGlvbnMuCitwZ2NjKQorICAjIFBvcnRsYW5kJ3MgQyBjb21waWxlciB1bmRlcnN0YW5kcyAnLU1EJy4KKyAgIyBXaWxsIGFsd2F5cyBvdXRwdXQgZGVwcyB0byAnZmlsZS5kJyB3aGVyZSBmaWxlIGlzIHRoZSByb290IG5hbWUgb2YgdGhlCisgICMgc291cmNlIGZpbGUgdW5kZXIgY29tcGlsYXRpb24sIGV2ZW4gaWYgZmlsZSByZXNpZGVzIGluIGEgc3ViZGlyZWN0b3J5LgorICAjIFRoZSBvYmplY3QgZmlsZSBuYW1lIGRvZXMgbm90IGFmZmVjdCB0aGUgbmFtZSBvZiB0aGUgJy5kJyBmaWxlLgorICAjIHBnY2MgMTAuMiB3aWxsIG91dHB1dAorICAjICAgIGZvby5vOiBzdWIvZm9vLmMgc3ViL2Zvby5oCisgICMgYW5kIHdpbGwgd3JhcCBsb25nIGxpbmVzIHVzaW5nICdcJyA6CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyAuLi4gXAorICAjICAgICBzdWIvZm9vLmggLi4uIFwKKyAgIyAgICAgLi4uCisgIHNldF9kaXJfZnJvbSAiJG9iamVjdCIKKyAgIyBVc2UgdGhlIHNvdXJjZSwgbm90IHRoZSBvYmplY3QsIHRvIGRldGVybWluZSB0aGUgYmFzZSBuYW1lLCBzaW5jZQorICAjIHRoYXQncyBzYWRseSB3aGF0IHBnY2Mgd2lsbCBkbyB0b28uCisgIHNldF9iYXNlX2Zyb20gIiRzb3VyY2UiCisgIHRtcGRlcGZpbGU9JGJhc2UuZAorCisgICMgRm9yIHByb2plY3RzIHRoYXQgYnVpbGQgdGhlIHNhbWUgc291cmNlIGZpbGUgdHdpY2UgaW50byBkaWZmZXJlbnQgb2JqZWN0CisgICMgZmlsZXMsIHRoZSBwZ2NjIGFwcHJvYWNoIG9mIHVzaW5nIHRoZSAqc291cmNlKiBmaWxlIHJvb3QgbmFtZSBjYW4gY2F1c2UKKyAgIyBwcm9ibGVtcyBpbiBwYXJhbGxlbCBidWlsZHMuICBVc2UgYSBsb2NraW5nIHN0cmF0ZWd5IHRvIGF2b2lkIHN0b21waW5nIG9uCisgICMgdGhlIHNhbWUgJHRtcGRlcGZpbGUuCisgIGxvY2tkaXI9JGJhc2UuZC1sb2NrCisgIHRyYXAgIgorICAgIGVjaG8gJyQwOiBjYXVnaHQgc2lnbmFsLCBjbGVhbmluZyB1cC4uLicgPiYyCisgICAgcm1kaXIgJyRsb2NrZGlyJworICAgIGV4aXQgMQorICAiIDEgMiAxMyAxNQorICBudW10cmllcz0xMDAKKyAgaT0kbnVtdHJpZXMKKyAgd2hpbGUgdGVzdCAkaSAtZ3QgMDsgZG8KKyAgICAjIG1rZGlyIGlzIGEgcG9ydGFibGUgdGVzdC1hbmQtc2V0LgorICAgIGlmIG1rZGlyICIkbG9ja2RpciIgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICMgVGhpcyBwcm9jZXNzIGFjcXVpcmVkIHRoZSBsb2NrLgorICAgICAgIiRAIiAtTUQKKyAgICAgIHN0YXQ9JD8KKyAgICAgICMgUmVsZWFzZSB0aGUgbG9jay4KKyAgICAgIHJtZGlyICIkbG9ja2RpciIKKyAgICAgIGJyZWFrCisgICAgZWxzZQorICAgICAgIyBJZiB0aGUgbG9jayBpcyBiZWluZyBoZWxkIGJ5IGEgZGlmZmVyZW50IHByb2Nlc3MsIHdhaXQKKyAgICAgICMgdW50aWwgdGhlIHdpbm5pbmcgcHJvY2VzcyBpcyBkb25lIG9yIHdlIHRpbWVvdXQuCisgICAgICB3aGlsZSB0ZXN0IC1kICIkbG9ja2RpciIgJiYgdGVzdCAkaSAtZ3QgMDsgZG8KKyAgICAgICAgc2xlZXAgMQorICAgICAgICBpPWBleHByICRpIC0gMWAKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIGk9YGV4cHIgJGkgLSAxYAorICBkb25lCisgIHRyYXAgLSAxIDIgMTMgMTUKKyAgaWYgdGVzdCAkaSAtbGUgMDsgdGhlbgorICAgIGVjaG8gIiQwOiBmYWlsZWQgdG8gYWNxdWlyZSBsb2NrIGFmdGVyICRudW10cmllcyBhdHRlbXB0cyIgPiYyCisgICAgZWNobyAiJDA6IGNoZWNrIGxvY2tkaXIgJyRsb2NrZGlyJyIgPiYyCisgICAgZXhpdCAxCisgIGZpCisKKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcsCisgICMgb3IgYGZvby5vOiBkZXAxLmggZGVwMi5oIFwnLCBvciBgIGRlcDMuaCBkZXA0LmggXCcuCisgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCisgICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KKyAgc2VkICJzLF5bXjpdKjosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisgICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgc2VkICdzLF5bXjpdKjogXCguKlwpJCxcMSw7cy9eXFwkLy87L14kL2Q7LzokL2QnIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocDIpCisgICMgVGhlICJocCIgc3RhbnphIGFib3ZlIGRvZXMgbm90IHdvcmsgd2l0aCBhQ0MgKEMrKykgYW5kIEhQJ3MgaWE2NAorICAjIGNvbXBpbGVycywgd2hpY2ggaGF2ZSBpbnRlZ3JhdGVkIHByZXByb2Nlc3NvcnMuICBUaGUgY29ycmVjdCBvcHRpb24KKyAgIyB0byB1c2Ugd2l0aCB0aGVzZSBpcyArTWFrZWQ7IGl0IHdyaXRlcyBkZXBlbmRlbmNpZXMgdG8gYSBmaWxlIG5hbWVkCisgICMgJ2Zvby5kJywgd2hpY2ggbGFuZHMgbmV4dCB0byB0aGUgb2JqZWN0IGZpbGUsIHdoZXJldmVyIHRoYXQKKyAgIyBoYXBwZW5zIHRvIGJlLgorICAjIE11Y2ggb2YgdGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB0cnU2NCBjYXNlOyBzZWUgY29tbWVudHMgdGhlcmUuCisgIHNldF9kaXJfZnJvbSAgIiRvYmplY3QiCisgIHNldF9iYXNlX2Zyb20gIiRvYmplY3QiCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLmQKKyAgICAiJEAiIC1XYywrTWFrZWQKKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICAiJEAiICtNYWtlZAorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgICAgZXhpdCAkc3RhdAorICBmaQorCisgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCisgIGRvCisgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgIGRvbmUKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOiwkb2JqZWN0OiwiICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgIyBBZGQgJ2RlcGVuZGVudC5oOicgbGluZXMuCisgICAgc2VkIC1uZSAnMiwkeworICAgICAgICAgICAgICAgcy9eICovLworICAgICAgICAgICAgICAgcy8gXFwqJC8vCisgICAgICAgICAgICAgICBzLyQvOi8KKyAgICAgICAgICAgICAgIHAKKyAgICAgICAgICAgICB9JyAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgIG1ha2VfZHVtbXlfZGVwZmlsZQorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZTIiCisgIDs7CisKK3RydTY0KQorICAjIFRoZSBUcnU2NCBjb21waWxlciB1c2VzIC1NRCB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgYXMgYSBzaWRlCisgICMgZWZmZWN0LiAgJ2NjIC1NRCAtbyBmb28ubyAuLi4nIHB1dHMgdGhlIGRlcGVuZGVuY2llcyBpbnRvICdmb28uby5kJy4KKyAgIyBBdCBsZWFzdCBvbiBBbHBoYS9SZWRoYXQgNi4xLCBDb21wYXEgQ0NDIFY2LjItNTA0IHNlZW1zIHRvIHB1dAorICAjIGRlcGVuZGVuY2llcyBpbiAnZm9vLmQnIGluc3RlYWQsIHNvIHdlIGNoZWNrIGZvciB0aGF0IHRvby4KKyAgIyBTdWJkaXJlY3RvcmllcyBhcmUgcmVzcGVjdGVkLgorICBzZXRfZGlyX2Zyb20gICIkb2JqZWN0IgorICBzZXRfYmFzZV9mcm9tICIkb2JqZWN0IgorCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICMgTGlidG9vbCBnZW5lcmF0ZXMgMiBzZXBhcmF0ZSBvYmplY3RzIGZvciB0aGUgMiBsaWJyYXJpZXMuICBUaGVzZQorICAgICMgdHdvIGNvbXBpbGF0aW9ucyBvdXRwdXQgZGVwZW5kZW5jaWVzIGluICRkaXIubGlicy8kYmFzZS5vLmQgYW5kCisgICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQorICAgICMgb25lIG9mIHRoZSB0d28gY29tcGlsYXRpb25zIGNhbiBiZSBkaXNhYmxlZC4gIFdlIHNob3VsZCBwcmVmZXIKKyAgICAjICRkaXIkYmFzZS5vLmQgb3ZlciAkZGlyLmxpYnMvJGJhc2Uuby5kIGJlY2F1c2UgdGhlIGxhdHRlciBpcworICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCisgICAgIyB0aGUgZm9ybWVyIHdvdWxkIGNhdXNlIGEgZGlzdGNsZWFuY2hlY2sgcGFuaWMuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLm8uZCAgICAgICAgICAjIGxpYnRvb2wgMS41CisgICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLm8uZCAgICAjIExpa2V3aXNlLgorICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0CisgICAgIiRAIiAtV2MsLU1ECisgIGVsc2UKKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLmQKKyAgICAiJEAiIC1NRAorICBmaQorCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCisgICAgZXhpdCAkc3RhdAorICBmaQorCisgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCisgIGRvCisgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgIGRvbmUKKyAgIyBTYW1lIHBvc3QtcHJvY2Vzc2luZyB0aGF0IGlzIHJlcXVpcmVkIGZvciBBSVggbW9kZS4KKyAgYWl4X3Bvc3RfcHJvY2Vzc19kZXBmaWxlCisgIDs7CisKK21zdmM3KQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICBzaG93SW5jbHVkZXM9LVdjLC1zaG93SW5jbHVkZXMKKyAgZWxzZQorICAgIHNob3dJbmNsdWRlcz0tc2hvd0luY2x1ZGVzCisgIGZpCisgICIkQCIgJHNob3dJbmNsdWRlcyA+ICIkdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBncmVwIC12ICdeTm90ZTogaW5jbHVkaW5nIGZpbGU6ICcgIiR0bXBkZXBmaWxlIgorICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICAjIFRoZSBmaXJzdCBzZWQgcHJvZ3JhbSBiZWxvdyBleHRyYWN0cyB0aGUgZmlsZSBuYW1lcyBhbmQgZXNjYXBlcworICAjIGJhY2tzbGFzaGVzIGZvciBjeWdwYXRoLiAgVGhlIHNlY29uZCBzZWQgcHJvZ3JhbSBvdXRwdXRzIHRoZSBmaWxlCisgICMgbmFtZSB3aGVuIHJlYWRpbmcsIGJ1dCBhbHNvIGFjY3VtdWxhdGVzIGFsbCBpbmNsdWRlIGZpbGVzIGluIHRoZQorICAjIGhvbGQgYnVmZmVyIGluIG9yZGVyIHRvIG91dHB1dCB0aGVtIGFnYWluIGF0IHRoZSBlbmQuICBUaGlzIG9ubHkKKyAgIyB3b3JrcyB3aXRoIHNlZCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjYW4gaGFuZGxlIGxhcmdlIGJ1ZmZlcnMuCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gJworL15Ob3RlOiBpbmNsdWRpbmcgZmlsZTogICpcKC4qXCkvIHsKKyAgcy8vXDEvCisgIHMvXFwvXFxcXC9nCisgIHAKK30nIHwgJGN5Z3BhdGhfdSB8IHNvcnQgLXUgfCBzZWQgLW4gJworcy8gL1xcIC9nCitzL1woLipcKS8nIiR0YWIiJ1wxIFxcL3AKK3MvLlwoLipcKSBcXC9cMTovCitICiskIHsKKyAgcy8uKi8nIiR0YWIiJy8KKyAgRworICBwCit9JyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gPj4gIiRkZXBmaWxlIiAjIG1ha2Ugc3VyZSB0aGUgZnJhZ21lbnQgZG9lc24ndCBlbmQgd2l0aCBhIGJhY2tzbGFzaAorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK21zdmM3bXN5cykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKKyNub3NpZGVlZmZlY3QpCisgICMgVGhpcyBjb21tZW50IGFib3ZlIGlzIHVzZWQgYnkgYXV0b21ha2UgdG8gdGVsbCBzaWRlLWVmZmVjdAorICAjIGRlcGVuZGVuY3kgdHJhY2tpbmcgbWVjaGFuaXNtcyBmcm9tIHNsb3dlciBvbmVzLgorCitkYXNobXN0ZG91dCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8uCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorCisgICMgUmVtb3ZlICctbyAkb2JqZWN0Jy4KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLW8pCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAkb2JqZWN0KQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgICAgc2hpZnQgIyAkYXJnCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIHRlc3QgLXogIiRkYXNobWZsYWciICYmIGRhc2htZmxhZz0tTQorICAjIFJlcXVpcmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIHNlYXJjaGluZyBmb3IgJzonCisgICMgaW4gdGhlIHRhcmdldCBuYW1lLiAgVGhpcyBpcyB0byBjb3BlIHdpdGggRE9TLXN0eWxlIGZpbGVuYW1lczoKKyAgIyBhIGRlcGVuZGVuY3kgc3VjaCBhcyAnYzovZm9vL2JhcicgY291bGQgYmUgc2VlbiBhcyB0YXJnZXQgJ2MnIG90aGVyd2lzZS4KKyAgIiRAIiAkZGFzaG1mbGFnIHwKKyAgICBzZWQgInN8XlskdGFiIF0qW146JHRhYiBdW146XVteOl0qOlskdGFiIF0qfCRvYmplY3Q6IHwiID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIHNlZCBpbnZvY2F0aW9uCisgICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgfCBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgXAorICAgIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworZGFzaFhtc3Rkb3V0KQorICAjIFRoaXMgY2FzZSBvbmx5IGV4aXN0cyB0byBzYXRpc2Z5IGRlcGVuZC5tNC4gIEl0IGlzIG5ldmVyIGFjdHVhbGx5CisgICMgcnVuLCBhcyB0aGlzIG1vZGUgaXMgc3BlY2lhbGx5IHJlY29nbml6ZWQgaW4gdGhlIHByZWFtYmxlLgorICBleGl0IDEKKyAgOzsKKworbWFrZWRlcGVuZCkKKyAgIiRAIiB8fCBleGl0ICQ/CisgICMgUmVtb3ZlIGFueSBMaWJ0b29sIGNhbGwKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisgICMgWCBtYWtlZGVwZW5kCisgIHNoaWZ0CisgIGNsZWFyZWQ9bm8gZWF0PW5vCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRjbGVhcmVkIGluCisgICAgbm8pCisgICAgICBzZXQgIiI7IHNoaWZ0CisgICAgICBjbGVhcmVkPXllcyA7OworICAgIGVzYWMKKyAgICBpZiB0ZXN0ICRlYXQgPSB5ZXM7IHRoZW4KKyAgICAgIGVhdD1ubworICAgICAgY29udGludWUKKyAgICBmaQorICAgIGNhc2UgIiRhcmciIGluCisgICAgLUQqfC1JKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKKyAgICAjIFN0cmlwIGFueSBvcHRpb24gdGhhdCBtYWtlZGVwZW5kIG1heSBub3QgdW5kZXJzdGFuZC4gIFJlbW92ZQorICAgICMgdGhlIG9iamVjdCB0b28sIG90aGVyd2lzZSBtYWtlZGVwZW5kIHdpbGwgcGFyc2UgaXQgYXMgYSBzb3VyY2UgZmlsZS4KKyAgICAtYXJjaCkKKyAgICAgIGVhdD15ZXMgOzsKKyAgICAtKnwkb2JqZWN0KQorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgIGVzYWMKKyAgZG9uZQorICBvYmpfc3VmZml4PWBlY2hvICIkb2JqZWN0IiB8IHNlZCAncy9eLipcLi8uLydgCisgIHRvdWNoICIkdG1wZGVwZmlsZSIKKyAgJHtNQUtFREVQRU5ELW1ha2VkZXBlbmR9IC1vIiRvYmpfc3VmZml4IiAtZiIkdG1wZGVwZmlsZSIgIiRAIgorICBybSAtZiAiJGRlcGZpbGUiCisgICMgbWFrZWRlcGVuZCBtYXkgcHJlcGVuZCB0aGUgVlBBVEggZnJvbSB0aGUgc291cmNlIGZpbGUgbmFtZSB0byB0aGUgb2JqZWN0LgorICAjIE5vIG5lZWQgdG8gcmVnZXgtZXNjYXBlICRvYmplY3QsIGV4Y2VzcyBtYXRjaGluZyBvZiAnLicgaXMgaGFybWxlc3MuCisgIHNlZCAic3xeLipcKCRvYmplY3QgKjpcKXxcMXwiICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGUgbGFzdCBpbnZvY2F0aW9uCisgICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgc2VkICcxLDJkJyAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHRyICcgJyAiJG5sIiBcCisgICAgfCBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgXAorICAgIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlIi5iYWsKKyAgOzsKKworY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgJy1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIiRAIiAtRSBcCisgICAgfCBzZWQgLW4gLWUgJy9eIyBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgXAorICAgICAgICAgICAgIC1lICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisgICAgfCBzZWQgJyQgczogXFwkOjonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiICcvXiQvZDtzL14gLy87cy8gXFwkLy87cy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK21zdmlzdWFsY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAiLUdtInwiL0dtInwiLUdpInwiL0dpInwiLVpJInwiL1pJIikKKyAgICAgICAgc2V0IGZub3JkICIkQCIKKyAgICAgICAgc2hpZnQKKyAgICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgICAgc2hpZnQKKyAgICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgIiRAIiAtRSAyPi9kZXYvbnVsbCB8CisgIHNlZCAtbiAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi8gczo6XDE6cCcgfCAkY3lncGF0aF91IHwgc29ydCAtdSA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uIC1lICdzJSAlXFwgJWcnIC1lICcvXlwoLipcKSQvIHM6OiciJHRhYiInXDEgXFw6cCcgPj4gIiRkZXBmaWxlIgorICBlY2hvICIkdGFiIiA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6XDFcOjpwJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2Y21zeXMpCisgICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQorICAjIGxvb2tpbmcgYXQgdGhlIHRleHQgb2YgdGhpcyBzY3JpcHQuICBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSBydW4sCisgICMgc2luY2UgaXQgaXMgY2hlY2tlZCBmb3IgYWJvdmUuCisgIGV4aXQgMQorICA7OworCitub25lKQorICBleGVjICIkQCIKKyAgOzsKKworKikKKyAgZWNobyAiVW5rbm93biBkZXBtb2RlICRkZXBtb2RlIiAxPiYyCisgIGV4aXQgMQorICA7OworZXNhYworCitleGl0IDAKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvaW5zdGFsbC1zaCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvaW5zdGFsbC1zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOTI0NGViCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9pbnN0YWxsLXNoCkBAIC0wLDAgKzEsNTI3IEBACisjIS9iaW4vc2gKKyMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCisKK3NjcmlwdHZlcnNpb249MjAxMS0wMS0xOS4yMTsgIyBVVEMKKworIyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKSwgd2hpY2ggd2FzCisjIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQorIyBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTQgWCBDb25zb3J0aXVtCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisjIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisjIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorIyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUMtCisjIFRJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90CisjIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsLQorIyBpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3ItCisjIHRpdW0uCisjCisjCisjIEZTRiBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50CisjIGBtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CisjIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KKyMgZnJvbSBzY3JhdGNoLgorCitubD0nCisnCitJRlM9IiAiIgkkbmwiCisKKyMgc2V0IERPSVRQUk9HIHRvIGVjaG8gdG8gdGVzdCB0aGlzIHNjcmlwdAorCisjIERvbid0IHVzZSA6LSBzaW5jZSA0LjNCU0QgYW5kIGVhcmxpZXIgc2hlbGxzIGRvbid0IGxpa2UgaXQuCitkb2l0PSR7RE9JVFBST0ctfQoraWYgdGVzdCAteiAiJGRvaXQiOyB0aGVuCisgIGRvaXRfZXhlYz1leGVjCitlbHNlCisgIGRvaXRfZXhlYz0kZG9pdAorZmkKKworIyBQdXQgaW4gYWJzb2x1dGUgZmlsZSBuYW1lcyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsKKyMgb3IgdXNlIGVudmlyb25tZW50IHZhcnMuCisKK2NoZ3JwcHJvZz0ke0NIR1JQUFJPRy1jaGdycH0KK2NobW9kcHJvZz0ke0NITU9EUFJPRy1jaG1vZH0KK2Nob3ducHJvZz0ke0NIT1dOUFJPRy1jaG93bn0KK2NtcHByb2c9JHtDTVBQUk9HLWNtcH0KK2NwcHJvZz0ke0NQUFJPRy1jcH0KK21rZGlycHJvZz0ke01LRElSUFJPRy1ta2Rpcn0KK212cHJvZz0ke01WUFJPRy1tdn0KK3JtcHJvZz0ke1JNUFJPRy1ybX0KK3N0cmlwcHJvZz0ke1NUUklQUFJPRy1zdHJpcH0KKworcG9zaXhfZ2xvYj0nPycKK2luaXRpYWxpemVfcG9zaXhfZ2xvYj0nCisgIHRlc3QgIiRwb3NpeF9nbG9iIiAhPSAiPyIgfHwgeworICAgIGlmIChzZXQgLWYpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICBwb3NpeF9nbG9iPQorICAgIGVsc2UKKyAgICAgIHBvc2l4X2dsb2I9OgorICAgIGZpCisgIH0KKycKKworcG9zaXhfbWtkaXI9CisKKyMgRGVzaXJlZCBtb2RlIG9mIGluc3RhbGxlZCBmaWxlLgorbW9kZT0wNzU1CisKK2NoZ3JwY21kPQorY2htb2RjbWQ9JGNobW9kcHJvZworY2hvd25jbWQ9CittdmNtZD0kbXZwcm9nCitybWNtZD0iJHJtcHJvZyAtZiIKK3N0cmlwY21kPQorCitzcmM9Citkc3Q9CitkaXJfYXJnPQorZHN0X2FyZz0KKworY29weV9vbl9jaGFuZ2U9ZmFsc2UKK25vX3RhcmdldF9kaXJlY3Rvcnk9CisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0uLi4gWy1UXSBTUkNGSUxFIERTVEZJTEUKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiBTUkNGSUxFUy4uLiBESVJFQ1RPUlkKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtdCBESVJFQ1RPUlkgU1JDRklMRVMuLi4KKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtZCBESVJFQ1RPUklFUy4uLgorCitJbiB0aGUgMXN0IGZvcm0sIGNvcHkgU1JDRklMRSB0byBEU1RGSUxFLgorSW4gdGhlIDJuZCBhbmQgM3JkLCBjb3B5IGFsbCBTUkNGSUxFUyB0byBESVJFQ1RPUlkuCitJbiB0aGUgNHRoLCBjcmVhdGUgRElSRUNUT1JJRVMuCisKK09wdGlvbnM6CisgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisgICAgIC0tdmVyc2lvbiAgZGlzcGxheSB2ZXJzaW9uIGluZm8gYW5kIGV4aXQuCisKKyAgLWMgICAgICAgICAgICAoaWdub3JlZCkKKyAgLUMgICAgICAgICAgICBpbnN0YWxsIG9ubHkgaWYgZGlmZmVyZW50IChwcmVzZXJ2ZSB0aGUgbGFzdCBkYXRhIG1vZGlmaWNhdGlvbiB0aW1lKQorICAtZCAgICAgICAgICAgIGNyZWF0ZSBkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgZmlsZXMuCisgIC1nIEdST1VQICAgICAgJGNoZ3JwcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gR1JPVVAuCisgIC1tIE1PREUgICAgICAgJGNobW9kcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gTU9ERS4KKyAgLW8gVVNFUiAgICAgICAkY2hvd25wcm9nIGluc3RhbGxlZCBmaWxlcyB0byBVU0VSLgorICAtcyAgICAgICAgICAgICRzdHJpcHByb2cgaW5zdGFsbGVkIGZpbGVzLgorICAtdCBESVJFQ1RPUlkgIGluc3RhbGwgaW50byBESVJFQ1RPUlkuCisgIC1UICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yIGlmIERTVEZJTEUgaXMgYSBkaXJlY3RvcnkuCisKK0Vudmlyb25tZW50IHZhcmlhYmxlcyBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb21tYW5kczoKKyAgQ0hHUlBQUk9HIENITU9EUFJPRyBDSE9XTlBST0cgQ01QUFJPRyBDUFBST0cgTUtESVJQUk9HIE1WUFJPRworICBSTVBST0cgU1RSSVBQUk9HCisiCisKK3doaWxlIHRlc3QgJCMgLW5lIDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtYykgOzsKKworICAgIC1DKSBjb3B5X29uX2NoYW5nZT10cnVlOzsKKworICAgIC1kKSBkaXJfYXJnPXRydWU7OworCisgICAgLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgorCXNoaWZ0OzsKKworICAgIC0taGVscCkgZWNobyAiJHVzYWdlIjsgZXhpdCAkPzs7CisKKyAgICAtbSkgbW9kZT0kMgorCWNhc2UgJG1vZGUgaW4KKwkgIConICcqIHwgKicJJyogfCAqJworJyoJICB8IConKicqIHwgKic/JyogfCAqJ1snKikKKwkgICAgZWNobyAiJDA6IGludmFsaWQgbW9kZTogJG1vZGUiID4mMgorCSAgICBleGl0IDE7OworCWVzYWMKKwlzaGlmdDs7CisKKyAgICAtbykgY2hvd25jbWQ9IiRjaG93bnByb2cgJDIiCisJc2hpZnQ7OworCisgICAgLXMpIHN0cmlwY21kPSRzdHJpcHByb2c7OworCisgICAgLXQpIGRzdF9hcmc9JDIKKwkjIFByb3RlY3QgbmFtZXMgcHJvYmxlbWF0aWMgZm9yIGB0ZXN0JyBhbmQgb3RoZXIgdXRpbGl0aWVzLgorCWNhc2UgJGRzdF9hcmcgaW4KKwkgIC0qIHwgWz1cKFwpIV0pIGRzdF9hcmc9Li8kZHN0X2FyZzs7CisJZXNhYworCXNoaWZ0OzsKKworICAgIC1UKSBub190YXJnZXRfZGlyZWN0b3J5PXRydWU7OworCisgICAgLS12ZXJzaW9uKSBlY2hvICIkMCAkc2NyaXB0dmVyc2lvbiI7IGV4aXQgJD87OworCisgICAgLS0pCXNoaWZ0CisJYnJlYWs7OworCisgICAgLSopCWVjaG8gIiQwOiBpbnZhbGlkIG9wdGlvbjogJDEiID4mMgorCWV4aXQgMTs7CisKKyAgICAqKSAgYnJlYWs7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgJCMgLW5lIDAgJiYgdGVzdCAteiAiJGRpcl9hcmckZHN0X2FyZyI7IHRoZW4KKyAgIyBXaGVuIC1kIGlzIHVzZWQsIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBkaXJlY3RvcmllcyB0byBjcmVhdGUuCisgICMgV2hlbiAtdCBpcyB1c2VkLCB0aGUgZGVzdGluYXRpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQuCisgICMgT3RoZXJ3aXNlLCB0aGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgZGVzdGluYXRpb24uICBSZW1vdmUgaXQgZnJvbSAkQC4KKyAgZm9yIGFyZworICBkbworICAgIGlmIHRlc3QgLW4gIiRkc3RfYXJnIjsgdGhlbgorICAgICAgIyAkQCBpcyBub3QgZW1wdHk6IGl0IGNvbnRhaW5zIGF0IGxlYXN0ICRhcmcuCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGRzdF9hcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgZmkKKyAgICBzaGlmdCAjIGFyZworICAgIGRzdF9hcmc9JGFyZworICAgICMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgYHRlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCisgICAgY2FzZSAkZHN0X2FyZyBpbgorICAgICAgLSogfCBbPVwoXCkhXSkgZHN0X2FyZz0uLyRkc3RfYXJnOzsKKyAgICBlc2FjCisgIGRvbmUKK2ZpCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCisgICAgZXhpdCAxCisgIGZpCisgICMgSXQncyBPSyB0byBjYWxsIGBpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgorICAjIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGNyZWF0aW5nIGNvbmRpdGlvbmFsIGRpcmVjdG9yaWVzLgorICBleGl0IDAKK2ZpCisKK2lmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgorICBkb19leGl0PScoZXhpdCAkcmV0KTsgZXhpdCAkcmV0JworICB0cmFwICJyZXQ9MTI5OyAkZG9fZXhpdCIgMQorICB0cmFwICJyZXQ9MTMwOyAkZG9fZXhpdCIgMgorICB0cmFwICJyZXQ9MTQxOyAkZG9fZXhpdCIgMTMKKyAgdHJhcCAicmV0PTE0MzsgJGRvX2V4aXQiIDE1CisKKyAgIyBTZXQgdW1hc2sgc28gYXMgbm90IHRvIGNyZWF0ZSB0ZW1wcyB3aXRoIHRvby1nZW5lcm91cyBtb2Rlcy4KKyAgIyBIb3dldmVyLCAnc3RyaXAnIHJlcXVpcmVzIGJvdGggcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRlbXBzLgorICBjYXNlICRtb2RlIGluCisgICAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCisgICAgKjY0NCkgY3BfdW1hc2s9MTMzOzsKKyAgICAqNzU1KSBjcF91bWFzaz0yMjs7CisKKyAgICAqWzAtN10pCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0nJSAyMDAnCisgICAgICBmaQorICAgICAgY3BfdW1hc2s9YGV4cHIgJygnIDc3NyAtICRtb2RlICUgMTAwMCAnKScgJHVfcGx1c19yd2A7OworICAgICopCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0sdStydworICAgICAgZmkKKyAgICAgIGNwX3VtYXNrPSRtb2RlJHVfcGx1c19ydzs7CisgIGVzYWMKK2ZpCisKK2ZvciBzcmMKK2RvCisgICMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgYHRlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCisgIGNhc2UgJHNyYyBpbgorICAgIC0qIHwgWz1cKFwpIV0pIHNyYz0uLyRzcmM7OworICBlc2FjCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgZHN0PSRzcmMKKyAgICBkc3RkaXI9JGRzdAorICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgZHN0ZGlyX3N0YXR1cz0kPworICBlbHNlCisKKyAgICAjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZAorICAgICMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQKKyAgICAjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KKyAgICBpZiB0ZXN0ICEgLWYgIiRzcmMiICYmIHRlc3QgISAtZCAiJHNyYyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiAkc3JjIGRvZXMgbm90IGV4aXN0LiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgaWYgdGVzdCAteiAiJGRzdF9hcmciOyB0aGVuCisgICAgICBlY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorICAgIGRzdD0kZHN0X2FyZworCisgICAgIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgd29uJ3Qgd29yaworICAgICMgaWYgZG91YmxlIHNsYXNoZXMgYXJlbid0IGlnbm9yZWQuCisgICAgaWYgdGVzdCAtZCAiJGRzdCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRub190YXJnZXRfZGlyZWN0b3J5IjsgdGhlbgorCWVjaG8gIiQwOiAkZHN0X2FyZzogSXMgYSBkaXJlY3RvcnkiID4mMgorCWV4aXQgMQorICAgICAgZmkKKyAgICAgIGRzdGRpcj0kZHN0CisgICAgICBkc3Q9JGRzdGRpci9gYmFzZW5hbWUgIiRzcmMiYAorICAgICAgZHN0ZGlyX3N0YXR1cz0wCisgICAgZWxzZQorICAgICAgIyBQcmVmZXIgZGlybmFtZSwgYnV0IGZhbGwgYmFjayBvbiBhIHN1YnN0aXR1dGUgaWYgZGlybmFtZSBmYWlscy4KKyAgICAgIGRzdGRpcj1gCisJKGRpcm5hbWUgIiRkc3QiKSAyPi9kZXYvbnVsbCB8fAorCWV4cHIgWCIkZHN0IiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvL1wpJCcgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKwllY2hvIFgiJGRzdCIgfAorCSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wvXClbXi9dLioveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wvXCkkL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cKS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIHMvLiovLi87IHEnCisgICAgICBgCisKKyAgICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgICBkc3RkaXJfc3RhdHVzPSQ/CisgICAgZmkKKyAgZmkKKworICBvYnNvbGV0ZV9ta2Rpcl91c2VkPWZhbHNlCisKKyAgaWYgdGVzdCAkZHN0ZGlyX3N0YXR1cyAhPSAwOyB0aGVuCisgICAgY2FzZSAkcG9zaXhfbWtkaXIgaW4KKyAgICAgICcnKQorCSMgQ3JlYXRlIGludGVybWVkaWF0ZSBkaXJzIHVzaW5nIG1vZGUgNzU1IGFzIG1vZGlmaWVkIGJ5IHRoZSB1bWFzay4KKwkjIFRoaXMgaXMgbGlrZSBGcmVlQlNEICdpbnN0YWxsJyBhcyBvZiAxOTk3LTEwLTI4LgorCXVtYXNrPWB1bWFza2AKKwljYXNlICRzdHJpcGNtZC4kdW1hc2sgaW4KKwkgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorCSAgKlsyMzY3XVsyMzY3XSkgbWtkaXJfdW1hc2s9JHVtYXNrOzsKKwkgIC4qMFswMl1bMDJdIHwgLlswMl1bMDJdIHwgLlswMl0pIG1rZGlyX3VtYXNrPTIyOzsKKworCSAgKlswLTddKQorCSAgICBta2Rpcl91bWFzaz1gZXhwciAkdW1hc2sgKyAyMiBcCisJICAgICAgLSAkdW1hc2sgJSAxMDAgJSA0MCArICR1bWFzayAlIDIwIFwKKwkgICAgICAtICR1bWFzayAlIDEwICUgNCArICR1bWFzayAlIDIKKwkgICAgYDs7CisJICAqKSBta2Rpcl91bWFzaz0kdW1hc2ssZ28tdzs7CisJZXNhYworCisJIyBXaXRoIC1kLCBjcmVhdGUgdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgdXNlci1zcGVjaWZpZWQgbW9kZS4KKwkjIE90aGVyd2lzZSwgcmVseSBvbiAkbWtkaXJfdW1hc2suCisJaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisJICBta2Rpcl9tb2RlPS1tJG1vZGUKKwllbHNlCisJICBta2Rpcl9tb2RlPQorCWZpCisKKwlwb3NpeF9ta2Rpcj1mYWxzZQorCWNhc2UgJHVtYXNrIGluCisJICAqWzEyMzU2N11bMC03XVswLTddKQorCSAgICAjIFBPU0lYIG1rZGlyIC1wIHNldHMgdSt3eCBiaXRzIHJlZ2FyZGxlc3Mgb2YgdW1hc2ssIHdoaWNoCisJICAgICMgaXMgaW5jb21wYXRpYmxlIHdpdGggRnJlZUJTRCAnaW5zdGFsbCcgd2hlbiAodW1hc2sgJiAzMDApICE9IDAuCisJICAgIDs7CisJICAqKQorCSAgICB0bXBkaXI9JHtUTVBESVItL3RtcH0vaW5zJFJBTkRPTS0kJAorCSAgICB0cmFwICdyZXQ9JD87IHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIiAyPi9kZXYvbnVsbDsgZXhpdCAkcmV0JyAwCisKKwkgICAgaWYgKHVtYXNrICRta2Rpcl91bWFzayAmJgorCQlleGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiR0bXBkaXIvZCIpID4vZGV2L251bGwgMj4mMQorCSAgICB0aGVuCisJICAgICAgaWYgdGVzdCAteiAiJGRpcl9hcmciIHx8IHsKKwkJICAgIyBDaGVjayBmb3IgUE9TSVggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCAtbS4KKwkJICAgIyBIUC1VWCAxMS4yMyBhbmQgSVJJWCA2LjUgbWtkaXIgLW0gLXAgc2V0cyBncm91cC0gb3IKKwkJICAgIyBvdGhlci13cml0ZWFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCisJCSAgICMgRnJlZUJTRCA2LjEgbWtkaXIgLW0gLXAgc2V0cyBtb2RlIG9mIGV4aXN0aW5nIGRpcmVjdG9yeS4KKwkJICAgbHNfbGRfdG1wZGlyPWBscyAtbGQgIiR0bXBkaXIiYAorCQkgICBjYXNlICRsc19sZF90bXBkaXIgaW4KKwkJICAgICBkPz8/Py0/ci0qKSBkaWZmZXJlbnRfbW9kZT03MDA7OworCQkgICAgIGQ/Pz8/LT8tLSopIGRpZmZlcmVudF9tb2RlPTc1NTs7CisJCSAgICAgKikgZmFsc2U7OworCQkgICBlc2FjICYmCisJCSAgICRta2RpcnByb2cgLW0kZGlmZmVyZW50X21vZGUgLXAgLS0gIiR0bXBkaXIiICYmIHsKKwkJICAgICBsc19sZF90bXBkaXJfMT1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgICB0ZXN0ICIkbHNfbGRfdG1wZGlyIiA9ICIkbHNfbGRfdG1wZGlyXzEiCisJCSAgIH0KKwkJIH0KKwkgICAgICB0aGVuIHBvc2l4X21rZGlyPToKKwkgICAgICBmaQorCSAgICAgIHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBSZW1vdmUgYW55IGRpcnMgbGVmdCBiZWhpbmQgYnkgYW5jaWVudCBta2RpciBpbXBsZW1lbnRhdGlvbnMuCisJICAgICAgcm1kaXIgLi8kbWtkaXJfbW9kZSAuLy1wIC4vLS0gMj4vZGV2L251bGwKKwkgICAgZmkKKwkgICAgdHJhcCAnJyAwOzsKKwllc2FjOzsKKyAgICBlc2FjCisKKyAgICBpZgorICAgICAgJHBvc2l4X21rZGlyICYmICgKKwl1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiCisgICAgICApCisgICAgdGhlbiA6CisgICAgZWxzZQorCisgICAgICAjIFRoZSB1bWFzayBpcyByaWRpY3Vsb3VzLCBvciBta2RpciBkb2VzIG5vdCBjb25mb3JtIHRvIFBPU0lYLAorICAgICAgIyBvciBpdCBmYWlsZWQgcG9zc2libHkgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24uICBDcmVhdGUgdGhlCisgICAgICAjIGRpcmVjdG9yeSB0aGUgc2xvdyB3YXksIHN0ZXAgYnkgc3RlcCwgY2hlY2tpbmcgZm9yIHJhY2VzIGFzIHdlIGdvLgorCisgICAgICBjYXNlICRkc3RkaXIgaW4KKwkvKikgcHJlZml4PScvJzs7CisJWy09XChcKSFdKikgcHJlZml4PScuLyc7OworCSopICBwcmVmaXg9Jyc7OworICAgICAgZXNhYworCisgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIgorCisgICAgICBvSUZTPSRJRlMKKyAgICAgIElGUz0vCisgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYKKyAgICAgIHNldCBmbm9yZCAkZHN0ZGlyCisgICAgICBzaGlmdAorICAgICAgJHBvc2l4X2dsb2Igc2V0ICtmCisgICAgICBJRlM9JG9JRlMKKworICAgICAgcHJlZml4ZXM9CisKKyAgICAgIGZvciBkCisgICAgICBkbworCXRlc3QgWCIkZCIgPSBYICYmIGNvbnRpbnVlCisKKwlwcmVmaXg9JHByZWZpeCRkCisJaWYgdGVzdCAtZCAiJHByZWZpeCI7IHRoZW4KKwkgIHByZWZpeGVzPQorCWVsc2UKKwkgIGlmICRwb3NpeF9ta2RpcjsgdGhlbgorCSAgICAodW1hc2s9JG1rZGlyX3VtYXNrICYmCisJICAgICAkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiKSAmJiBicmVhaworCSAgICAjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJICAgIHRlc3QgLWQgIiRwcmVmaXgiIHx8IGV4aXQgMQorCSAgZWxzZQorCSAgICBjYXNlICRwcmVmaXggaW4KKwkgICAgICAqXCcqKSBxcHJlZml4PWBlY2hvICIkcHJlZml4IiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisJICAgICAgKikgcXByZWZpeD0kcHJlZml4OzsKKwkgICAgZXNhYworCSAgICBwcmVmaXhlcz0iJHByZWZpeGVzICckcXByZWZpeCciCisJICBmaQorCWZpCisJcHJlZml4PSRwcmVmaXgvCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVmaXhlcyI7IHRoZW4KKwkjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJKHVtYXNrICRta2Rpcl91bWFzayAmJgorCSBldmFsICJcJGRvaXRfZXhlYyBcJG1rZGlycHJvZyAkcHJlZml4ZXMiKSB8fAorCSAgdGVzdCAtZCAiJGRzdGRpciIgfHwgZXhpdCAxCisJb2Jzb2xldGVfbWtkaXJfdXNlZD10cnVlCisgICAgICBmaQorICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAiJG9ic29sZXRlX21rZGlyX3VzZWQkY2hvd25jbWQkY2hncnBjbWQiID0gZmFsc2UgfHwKKyAgICAgIHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0IjsgfSB8fCBleGl0IDEKKyAgZWxzZQorCisgICAgIyBNYWtlIGEgY291cGxlIG9mIHRlbXAgZmlsZSBuYW1lcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKyAgICBkc3R0bXA9JGRzdGRpci9faW5zdC4kJF8KKyAgICBybXRtcD0kZHN0ZGlyL19ybS4kJF8KKworICAgICMgVHJhcCB0byBjbGVhbiB1cCB0aG9zZSB0ZW1wIGZpbGVzIGF0IGV4aXQuCisgICAgdHJhcCAncmV0PSQ/OyBybSAtZiAiJGRzdHRtcCIgIiRybXRtcCIgJiYgZXhpdCAkcmV0JyAwCisKKyAgICAjIENvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lLgorICAgICh1bWFzayAkY3BfdW1hc2sgJiYgJGRvaXRfZXhlYyAkY3Bwcm9nICIkc3JjIiAiJGRzdHRtcCIpICYmCisKKyAgICAjIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUgc2V0dWlkIGJpdHMuCisgICAgIworICAgICMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KKyAgICAjIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKKyAgICAjIGVycm9ycyBmcm9tIHRoZSBhYm92ZSAiJGRvaXQgJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisgICAgIworICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3R0bXAiOyB9ICYmCisKKyAgICAjIElmIC1DLCBkb24ndCBib3RoZXIgdG8gY29weSBpZiBpdCB3b3VsZG4ndCBjaGFuZ2UgdGhlIGZpbGUuCisgICAgaWYgJGNvcHlfb25fY2hhbmdlICYmCisgICAgICAgb2xkPWBMQ19BTEw9QyBscyAtZGxMICIkZHN0IgkyPi9kZXYvbnVsbGAgJiYKKyAgICAgICBuZXc9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3R0bXAiCTI+L2Rldi9udWxsYCAmJgorCisgICAgICAgZXZhbCAiJGluaXRpYWxpemVfcG9zaXhfZ2xvYiIgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYgJiYKKyAgICAgICBzZXQgWCAkb2xkICYmIG9sZD06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICBzZXQgWCAkbmV3ICYmIG5ldz06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YgJiYKKworICAgICAgIHRlc3QgIiRvbGQiID0gIiRuZXciICYmCisgICAgICAgJGNtcHByb2cgIiRkc3QiICIkZHN0dG1wIiA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuCisgICAgICBybSAtZiAiJGRzdHRtcCIKKyAgICBlbHNlCisgICAgICAjIFJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAgICRkb2l0ICRtdmNtZCAtZiAiJGRzdHRtcCIgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisKKyAgICAgICMgVGhlIHJlbmFtZSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBtdiBjYW4ndCByZW5hbWUgc29tZXRoaW5nIGVsc2UKKyAgICAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90CisgICAgICAjIHN1cHBvcnQgLWYuCisgICAgICB7CisJIyBOb3cgcmVtb3ZlIG9yIG1vdmUgYXNpZGUgYW55IG9sZCBmaWxlIGF0IGRlc3RpbmF0aW9uIGxvY2F0aW9uLgorCSMgV2UgdHJ5IHRoaXMgdHdvIHdheXMgc2luY2Ugcm0gY2FuJ3QgdW5saW5rIGl0c2VsZiBvbiBzb21lCisJIyBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlcgorCSMgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgdGhlIGZpbmFsIGNsZWFudXAgbWlnaHQgZmFpbCBidXQgdGhlIG5ldworCSMgZmlsZSBzaG91bGQgc3RpbGwgaW5zdGFsbCBzdWNjZXNzZnVsbHkuCisJeworCSAgdGVzdCAhIC1mICIkZHN0IiB8fAorCSAgJGRvaXQgJHJtY21kIC1mICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCSAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3QiICIkcm10bXAiIDI+L2Rldi9udWxsICYmCisJICAgIHsgJGRvaXQgJHJtY21kIC1mICIkcm10bXAiIDI+L2Rldi9udWxsOyA6OyB9CisJICB9IHx8CisJICB7IGVjaG8gIiQwOiBjYW5ub3QgdW5saW5rIG9yIHJlbmFtZSAkZHN0IiA+JjIKKwkgICAgKGV4aXQgMSk7IGV4aXQgMQorCSAgfQorCX0gJiYKKworCSMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKwkkZG9pdCAkbXZjbWQgIiRkc3R0bXAiICIkZHN0IgorICAgICAgfQorICAgIGZpIHx8IGV4aXQgMQorCisgICAgdHJhcCAnJyAwCisgIGZpCitkb25lCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbHRtYWluLnNoIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9sdG1haW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhZTY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbHRtYWluLnNoCkBAIC0wLDAgKzEsOTY1NSBAQAorCisjIGxpYnRvb2wgKEdOVSBsaWJ0b29sKSAyLjQuMgorIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKKyMgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwKKyMgb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworIyBVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIFtNT0RFLUFSR10uLi4KKyMKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjCisjICAgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjICAgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyMgICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKKyMgICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisjICAgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCisjICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyMgICAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAgICAtLW5vLXF1aWV0LCAtLW5vLXNpbGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIChkZWZhdWx0KQorIyAgICAgICAtLW5vLXdhcm4gICAgICAgICAgICBkb24ndCBkaXNwbGF5IHdhcm5pbmcgbWVzc2FnZXMKKyMgICAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworIyAgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICBwcmludCBtb3JlIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdGhhbiBkZWZhdWx0CisjICAgICAgIC0tbm8tdmVyYm9zZSAgICAgICAgIGRvbid0IHByaW50IHRoZSBleHRyYSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KKyMgICAtaCwgLS1oZWxwLCAtLWhlbHAtYWxsICAgcHJpbnQgc2hvcnQsIGxvbmcsIG9yIGRldGFpbGVkIGhlbHAgbWVzc2FnZQorIworIyBNT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKyMgICAgICAgICBjb21waWxlICAgICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAorIyAgICAgICAgIGV4ZWN1dGUgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQorIyAgICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCisjICAgICAgICAgaW5zdGFsbCAgICAgICAgICAgIGluc3RhbGwgbGlicmFyaWVzIG9yIGV4ZWN1dGFibGVzCisjICAgICAgICAgbGluayAgICAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQorIyAgICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQorIworIyBNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuICBXaGVuIHBhc3NlZCBhcyBmaXJzdCBvcHRpb24sCisjIGAtLW1vZGU9TU9ERScgbWF5IGJlIGFiYnJldmlhdGVkIGFzIGBNT0RFJyBvciBhIHVuaXF1ZSBhYmJyZXZpYXRpb24gb2YgdGhhdC4KKyMgVHJ5IGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCisjCisjIFdoZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAorIyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisjCisjICAgICAgICAgaG9zdC10cmlwbGV0OgkkaG9zdAorIyAgICAgICAgIHNoZWxsOgkJJFNIRUxMCisjICAgICAgICAgY29tcGlsZXI6CQkkTFRDQworIyAgICAgICAgIGNvbXBpbGVyIGZsYWdzOgkJJExUQ0ZMQUdTCisjICAgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyMgICAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCkgMi40LjIKKyMgICAgICAgICBhdXRvbWFrZToJJGF1dG9tYWtlX3ZlcnNpb24KKyMgICAgICAgICBhdXRvY29uZjoJJGF1dG9jb25mX3ZlcnNpb24KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorIyBHTlUgbGlidG9vbCBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC8+LgorIyBHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi4KKworUFJPR1JBTT1saWJ0b29sCitQQUNLQUdFPWxpYnRvb2wKK1ZFUlNJT049Mi40LjIKK1RJTUVTVEFNUD0iIgorcGFja2FnZV9yZXZpc2lvbj0xLjMzMzcKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCitmaQorQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskMQorX0xURUNIT19FT0YnCit9CisKKyMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCitsdF91c2VyX2xvY2FsZT0KK2x0X3NhZmVfbG9jYWxlPQorZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCitkbworICBldmFsICJpZiB0ZXN0IFwiXCR7JGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICBzYXZlXyRsdF92YXI9XCQkbHRfdmFyCisgICAgICAgICAgJGx0X3Zhcj1DCisJICBleHBvcnQgJGx0X3ZhcgorCSAgbHRfdXNlcl9sb2NhbGU9XCIkbHRfdmFyPVxcXCRzYXZlX1wkbHRfdmFyOyBcJGx0X3VzZXJfbG9jYWxlXCIKKwkgIGx0X3NhZmVfbG9jYWxlPVwiJGx0X3Zhcj1DOyBcJGx0X3NhZmVfbG9jYWxlXCIKKwlmaSIKK2RvbmUKK0xDX0FMTD1DCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UgTENfQUxMCisKKyRsdF91bnNldCBDRFBBVEgKKworCisjIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKKyMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCisjIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAorIyBwb3NpdGlvbmFsIHBhcmFtZXRlciAkMCwgd2l0aGluIGEgZnVuY3Rpb24gY2FsbCwgaXMgdGhlIG5hbWUgb2YgdGhlCisjIGZ1bmN0aW9uLgorcHJvZ3BhdGg9IiQwIgorCisKKworOiAke0NQPSJjcCAtZiJ9Cit0ZXN0ICIke0VDSE8rc2V0fSIgPSBzZXQgfHwgRUNITz0ke2FzX2VjaG8tJ3ByaW50ZiAlc1xuJ30KKzogJHtNQUtFPSJtYWtlIn0KKzogJHtNS0RJUj0ibWtkaXIifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKzogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorOiAke1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyJ9CisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK0VYSVRfU1VDQ0VTUz0wCitFWElUX0ZBSUxVUkU9MQorRVhJVF9NSVNNQVRDSD02MyAgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgorRVhJVF9TS0lQPTc3CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0b21ha2UuCisKK2V4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKKworIyBNYWtlIHN1cmUgSUZTIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQKK2x0X25sPScKKycKK0lGUz0iIAkkbHRfbmwiCisKK2Rpcm5hbWU9InMsL1teL10qJCwsIgorYmFzZW5hbWU9InMsXi4qLywsIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgICBmaQorfSAjIGZ1bmNfZGlybmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorfSAjIGZ1bmNfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgICBmaQorICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAorfSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisjIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCitmdW5jX3N0cmlwbmFtZSAoKQoreworICAgIGNhc2UgJHsyfSBpbgorICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKyAgICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKyAgICBlc2FjCit9ICMgZnVuY19zdHJpcG5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBUaGVzZSBTRUQgc2NyaXB0cyBwcmVzdXBwb3NlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgorcGF0aGNhcj0ncyxeL1woW14vXSpcKS4qJCxcMSwnCitwYXRoY2RyPSdzLF4vW14vXSosLCcKK3JlbW92ZWRvdHBhcnRzPSc6ZG90c2wKKwkJc0AvXC4vQC9AZworCQl0IGRvdHNsCisJCXMsL1wuJCwvLCcKK2NvbGxhcHNlc2xhc2hlcz0nc0AvXHsxLFx9QC9AZycKK2ZpbmFsc2xhc2g9J3MsLyokLC8sJworCisjIGZ1bmNfbm9ybWFsX2Fic3BhdGggUEFUSAorIyBSZW1vdmUgZG91YmxlZC11cCBhbmQgdHJhaWxpbmcgc2xhc2hlcywgIi4iIHBhdGggY29tcG9uZW50cywKKyMgYW5kIGNhbmNlbCBvdXQgYW55ICIuLiIgcGF0aCBjb21wb25lbnRzIGluIFBBVEggYWZ0ZXIgbWFraW5nCisjIGl0IGFuIGFic29sdXRlIHBhdGguCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCitmdW5jX25vcm1hbF9hYnNwYXRoICgpCit7CisgICMgU3RhcnQgZnJvbSByb290IGRpciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9CisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9JDEKKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9CisgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGggaW4KKyAgICAiIikKKyAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2QuCisgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgImBwd2RgIgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgICAgcmV0dXJuCisgICAgOzsKKyAgICAjIFRoZSBuZXh0IHRocmVlIGVudHJpZXMgYXJlIHVzZWQgdG8gc3BvdCBhIHJ1biBvZiBwcmVjaXNlbHkKKyAgICAjIHR3byBsZWFkaW5nIHNsYXNoZXMgd2l0aG91dCB1c2luZyBuZWdhdGVkIGNoYXJhY3RlciBjbGFzc2VzOworICAgICMgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgY2FzZSdzIGZpcnN0LW1hdGNoIGJlaGF2aW91ci4KKyAgICAvLy8qKQorICAgICAgIyBVbnVzdWFsIGZvcm0gb2YgYWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KKyAgICA7OworICAgIC8vKikKKyAgICAgICMgTm90IG5lY2Vzc2FyaWx5IGFuIG9yZGluYXJ5IHBhdGg7IFBPU0lYIHJlc2VydmVzIGxlYWRpbmcgJy8vJworICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcworICAgICAgIyBvdmVyIENJRlMvU01CLCBzbyB3ZSBjb25zZXJ2ZSBhIGxlYWRpbmcgZG91YmxlIHNsYXNoIGlmIGZvdW5kLgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9LworICAgIDs7CisgICAgLyopCisgICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgOzsKKyAgICAqKQorICAgICAgIyBSZWxhdGl2ZSBwYXRoLCBwcmVwZW5kICRjd2QuCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWBwd2RgLyRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoCisgICAgOzsKKyAgZXNhYworICAjIENhbmNlbCBvdXQgYWxsIHRoZSBzaW1wbGUgc3R1ZmYgdG8gc2F2ZSBpdGVyYXRpb25zLiAgV2UgYWxzbyB3YW50CisgICMgdGhlIHBhdGggdG8gZW5kIHdpdGggYSBzbGFzaCBmb3IgZWFzZSBvZiBwYXJzaW5nLCBzbyBtYWtlIHN1cmUKKyAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAtZSAiJHJlbW92ZWRvdHBhcnRzIiAtZSAiJGNvbGxhcHNlc2xhc2hlcyIgLWUgIiRmaW5hbHNsYXNoImAKKyAgd2hpbGUgOjsgZG8KKyAgICAjIFByb2Nlc3NlZCBpdCBhbGwgeWV0PworICAgIGlmIHRlc3QgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiA9IC8gOyB0aGVuCisgICAgICAjIElmIHdlIGFzY2VuZGVkIHRvIHRoZSByb290IHVzaW5nICIuLiIgdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkgbm93LgorICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9LworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQ9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgLWUgIiRwYXRoY2FyImAKKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgIC1lICIkcGF0aGNkciJgCisgICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAorICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCBpbgorICAgICAgIiIpCisgICAgICAgICMgVHJhaWxpbmcgZW1wdHkgcGF0aCBjb21wb25lbnQsIGlnbm9yZSBpdC4KKyAgICAgIDs7CisgICAgICAuLikKKyAgICAgICAgIyBQYXJlbnQgZGlyOyBzdHJpcCBsYXN0IGFzc2VtYmxlZCBjb21wb25lbnQgZnJvbSByZXN1bHQuCisgICAgICAgIGZ1bmNfZGlybmFtZSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICAgOzsKKyAgICAgICopCisgICAgICAgICMgQWN0dWFsIHBhdGggY29tcG9uZW50LCBhcHBlbmQgaXQuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdC8kZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50CisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorICAjIFJlc3RvcmUgbGVhZGluZyBkb3VibGUtc2xhc2ggaWYgb25lIHdhcyBmb3VuZCBvbiBlbnRyeS4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Cit9CisKKyMgZnVuY19yZWxhdGl2ZV9wYXRoIFNSQ0RJUiBEU1RESVIKKyMgZ2VuZXJhdGVzIGEgcmVsYXRpdmUgcGF0aCBmcm9tIFNSQ0RJUiB0byBEU1RESVIsIHdpdGggYSB0cmFpbGluZworIyBzbGFzaCBpZiBub24tZW1wdHksIHN1aXRhYmxlIGZvciBpbW1lZGlhdGVseSBhcHBlbmRpbmcgYSBmaWxlbmFtZQorIyB3aXRob3V0IG5lZWRpbmcgdG8gYXBwZW5kIGEgc2VwYXJhdG9yLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCitmdW5jX3JlbGF0aXZlX3BhdGggKCkKK3sKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0KKyAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDEiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMiIKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisKKyAgIyBBc2NlbmQgdGhlIHRyZWUgc3RhcnRpbmcgZnJvbSBsaWJkaXIKKyAgd2hpbGUgOjsgZG8KKyAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVmaXggb2YgYmluZGlyCisgICAgY2FzZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIgaW4KKyAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcikKKyAgICAgICAgIyBmb3VuZCBhbiBleGFjdCBtYXRjaAorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0KKyAgICAgICAgYnJlYWsKKyAgICAgICAgOzsKKyAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciopCisgICAgICAgICMgZm91bmQgYSBtYXRjaGluZyBwcmVmaXgKKyAgICAgICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KKyAgICAgICAgZmkKKyAgICAgICAgYnJlYWsKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZGlybmFtZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JHtmdW5jX2Rpcm5hbWVfcmVzdWx0fQorICAgICAgICBpZiB0ZXN0ICJ4JGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiA9IHggOyB0aGVuCisgICAgICAgICAgIyBIYXZlIHRvIGRlc2NlbmQgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3QhCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgorICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAjIE5vdyBjYWxjdWxhdGUgcGF0aDsgdGFrZSBjYXJlIHRvIGF2b2lkIGRvdWJsaW5nLXVwIHNsYXNoZXMuCisgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICBmdW5jX3N0cmlwbmFtZSAnLycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQiCisgIGlmIHRlc3QgIngkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiAhPSB4IDsgdGhlbgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JHtmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0fS8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0KKyAgZmkKKworICAjIE5vcm1hbGlzYXRpb24uIElmIGJpbmRpciBpcyBsaWJkaXIsIHJldHVybiBlbXB0eSBzdHJpbmcsCisgICMgZWxzZSByZWxhdGl2ZSBwYXRoIGVuZGluZyB3aXRoIGEgc2xhc2g7IGVpdGhlciB3YXksIHRhcmdldAorICAjIGZpbGUgbmFtZSBjYW4gYmUgZGlyZWN0bHkgYXBwZW5kZWQuCisgIGlmIHRlc3QgISAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgZnVuY19zdHJpcG5hbWUgJy4vJyAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQvIgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICBmaQorfQorCisjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbToKK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRwcm9ncGF0aCIKK3Byb2duYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIHJlZXhlY3V0aW9uOgorY2FzZSAkcHJvZ3BhdGggaW4KKyAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKKyAgKltcXC9dKikKKyAgICAgcHJvZ2Rpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICBwcm9nZGlyPWBjZCAiJHByb2dkaXIiICYmIHB3ZGAKKyAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKKyAgICAgOzsKKyAgKikKKyAgICAgc2F2ZV9JRlM9IiRJRlMiCisgICAgIElGUz0ke1BBVEhfU0VQQVJBVE9SLTp9CisgICAgIGZvciBwcm9nZGlyIGluICRQQVRIOyBkbworICAgICAgIElGUz0iJHNhdmVfSUZTIgorICAgICAgIHRlc3QgLXggIiRwcm9nZGlyLyRwcm9nbmFtZSIgJiYgYnJlYWsKKyAgICAgZG9uZQorICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAKKyAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKKyAgICAgOzsKK2VzYWMKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK1hzZWQ9IiR7U0VEfSInIC1lIDFzL15YLy8nCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbYCIkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKKyMgc3RyaW5nIGxpdGVyYWxseS4KK3NlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3MsW10uW14kXFwqXC9dLFxcJixnJworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBjb252ZXJ0cyBhIHczMiBmaWxlIG5hbWUgb3IgcGF0aAorIyB3aGljaCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKKyMgKGVzY2FwZWQpIGJhY2tzbGFzaGVzLiAgQSB2ZXJ5IG5haXZlIGltcGxlbWVudGF0aW9uLgorbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworCisjIFJlLWBcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2YgZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQgd2VyZQorIyBgXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mIGBcJyBwcmVjZWRlZCBhICckJworIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCisjIFNpbmNlIGVhY2ggaW5wdXQgYFwnIGlzIG5vdyB0d28gYFwncywgbG9vayBmb3IgYW55IG51bWJlciBvZiBydW5zIG9mCisjIGZvdXIgYFwncyBmb2xsb3dlZCBieSB0d28gYFwncyBhbmQgdGhlbiBhICckJy4gIGBcJyB0aGF0ICckJy4KK2JzPSdcXCcKK2JzMj0nXFxcXCcKK2JzND0nXFxcXFxcXFwnCitkb2xsYXI9J1wkJworc2VkX2RvdWJsZV9iYWNrc2xhc2g9IlwKKyAgcy8kYnM0LyZcXAorL2cKKyAgcy9eJGJzMiRkb2xsYXIvJGJzJi8KKyAgcy9cXChbXiRic11cXCkkYnMyJGRvbGxhci9cXDEkYnMyJGJzJGRvbGxhci9nCisgIHMvXG4vL2ciCisKKyMgU3RhbmRhcmQgb3B0aW9uczoKK29wdF9kcnlfcnVuPWZhbHNlCitvcHRfaGVscD1mYWxzZQorb3B0X3F1aWV0PWZhbHNlCitvcHRfdmVyYm9zZT1mYWxzZQorb3B0X3dhcm5pbmc9OgorCisjIGZ1bmNfZWNobyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBtb2RlCisjIG5hbWUgaWYgaXQgaGFzIGJlZW4gc2V0IHlldC4KK2Z1bmNfZWNobyAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9JCoiCit9CisKKyMgZnVuY192ZXJib3NlIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgorZnVuY192ZXJib3NlICgpCit7CisgICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAkezErIiRAIn0KKworICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCisgICAgIyB3b3JrIGFyb3VuZCB0aGF0OgorICAgIDoKK30KKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIkKiIKK30KKworIyBmdW5jX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY19lcnJvciAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9IiR7MSsiJEAifSAxPiYyCit9CisKKyMgZnVuY193YXJuaW5nIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX3dhcm5pbmcgKCkKK3sKKyAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH13YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKworICAgICMgYmFzaCBidWcgYWdhaW46CisgICAgOgorfQorCisjIGZ1bmNfZmF0YWxfZXJyb3IgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGFuZCBleGl0LgorZnVuY19mYXRhbF9lcnJvciAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCit9CisKKyMgZnVuY19mYXRhbF9oZWxwIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGhlbHAgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2hlbHAgKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGZ1bmNfZmF0YWxfZXJyb3IgIiRoZWxwIgorfQoraGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAgIyMgZGVmYXVsdAorCisKKyMgZnVuY19ncmVwIGV4cHJlc3Npb24gZmlsZW5hbWUKKyMgQ2hlY2sgd2hldGhlciBFWFBSRVNTSU9OIG1hdGNoZXMgYW55IGxpbmUgb2YgRklMRU5BTUUsIHdpdGhvdXQgb3V0cHV0LgorZnVuY19ncmVwICgpCit7CisgICAgJEdSRVAgIiQxIiAiJDIiID4vZGV2L251bGwgMj4mMQorfQorCisKKyMgZnVuY19ta2Rpcl9wIGRpcmVjdG9yeS1wYXRoCisjIE1ha2Ugc3VyZSB0aGUgZW50aXJlIHBhdGggdG8gRElSRUNUT1JZLVBBVEggaXMgYXZhaWxhYmxlLgorZnVuY19ta2Rpcl9wICgpCit7CisgICAgbXlfZGlyZWN0b3J5X3BhdGg9IiQxIgorICAgIG15X2Rpcl9saXN0PQorCisgICAgaWYgdGVzdCAtbiAiJG15X2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0ICIkb3B0X2RyeV9ydW4iICE9ICI6IjsgdGhlbgorCisgICAgICAjIFByb3RlY3QgZGlyZWN0b3J5IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nCisgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbgorICAgICAgICAtKikgbXlfZGlyZWN0b3J5X3BhdGg9Ii4vJG15X2RpcmVjdG9yeV9wYXRoIiA7OworICAgICAgZXNhYworCisgICAgICAjIFdoaWxlIHNvbWUgcG9ydGlvbiBvZiBESVIgZG9lcyBub3QgeWV0IGV4aXN0Li4uCisgICAgICB3aGlsZSB0ZXN0ICEgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCI7IGRvCisgICAgICAgICMgLi4ubWFrZSBhIGxpc3QgaW4gdG9wbW9zdCBmaXJzdCBvcmRlci4gIFVzZSBhIGNvbG9uIGRlbGltaXRlZAorCSMgbGlzdCBpbmNhc2Ugc29tZSBwb3J0aW9uIG9mIHBhdGggY29udGFpbnMgd2hpdGVzcGFjZS4KKyAgICAgICAgbXlfZGlyX2xpc3Q9IiRteV9kaXJlY3RvcnlfcGF0aDokbXlfZGlyX2xpc3QiCisKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQorICAgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbiAqLyopIDs7ICopIGJyZWFrIDs7IGVzYWMKKworICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKKyAgICAgICAgbXlfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICIkbXlfZGlyZWN0b3J5X3BhdGgiIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorICAgICAgZG9uZQorICAgICAgbXlfZGlyX2xpc3Q9YCRFQ0hPICIkbXlfZGlyX2xpc3QiIHwgJFNFRCAncyw6KiQsLCdgCisKKyAgICAgIHNhdmVfbWtkaXJfcF9JRlM9IiRJRlMiOyBJRlM9JzonCisgICAgICBmb3IgbXlfZGlyIGluICRteV9kaXJfbGlzdDsgZG8KKwlJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgorICAgICAgICAjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSBgRmlsZSBleGlzdCcgZXJyb3IgaWYgdHdvIHByb2Nlc3NlcworICAgICAgICAjIHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBjb25jdXJyZW50bHkuICBEb24ndAorICAgICAgICAjIHN0b3AgaW4gdGhhdCBjYXNlIQorICAgICAgICAkTUtESVIgIiRteV9kaXIiIDI+L2Rldi9udWxsIHx8IDoKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisKKyAgICAgICMgQmFpbCBvdXQgaWYgd2UgKG9yIHNvbWUgb3RoZXIgcHJvY2VzcykgZmFpbGVkIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeS4KKyAgICAgIHRlc3QgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRlIFxgJDEnIgorICAgIGZpCit9CisKKworIyBmdW5jX21rdGVtcGRpciBbc3RyaW5nXQorIyBNYWtlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdvbid0IGNsYXNoIHdpdGggb3RoZXIgcnVubmluZworIyBsaWJ0b29sIHByb2Nlc3NlcywgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgaWYgcG9zc2libGUuICBJZgorIyBnaXZlbiwgU1RSSU5HIGlzIHRoZSBiYXNlbmFtZSBmb3IgdGhhdCBkaXJlY3RvcnkuCitmdW5jX21rdGVtcGRpciAoKQoreworICAgIG15X3RlbXBsYXRlPSIke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfSIKKworICAgIGlmIHRlc3QgIiRvcHRfZHJ5X3J1biIgPSAiOiI7IHRoZW4KKyAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCisgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSQkIgorICAgIGVsc2UKKworICAgICAgIyBJZiBta3RlbXAgd29ya3MsIHVzZSB0aGF0IGZpcnN0IGFuZCBmb3JlbW9zdAorICAgICAgbXlfdG1wZGlyPWBta3RlbXAgLWQgIiR7bXlfdGVtcGxhdGV9LVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKKworICAgICAgaWYgdGVzdCAhIC1kICIkbXlfdG1wZGlyIjsgdGhlbgorICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKKyAgICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0ke1JBTkRPTS0wfSQkIgorCisgICAgICAgIHNhdmVfbWt0ZW1wZGlyX3VtYXNrPWB1bWFza2AKKyAgICAgICAgdW1hc2sgMDA3NworICAgICAgICAkTUtESVIgIiRteV90bXBkaXIiCisgICAgICAgIHVtYXNrICRzYXZlX21rdGVtcGRpcl91bWFzaworICAgICAgZmkKKworICAgICAgIyBJZiB3ZSdyZSBub3QgaW4gZHJ5LXJ1biBtb2RlLCBib21iIG91dCBvbiBmYWlsdXJlCisgICAgICB0ZXN0IC1kICIkbXlfdG1wZGlyIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIgorICAgIGZpCisKKyAgICAkRUNITyAiJG15X3RtcGRpciIKK30KKworCisjIGZ1bmNfcXVvdGVfZm9yX2V2YWwgYXJnCisjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlci4KKyMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6IEZVTkNfUVVPVEVfRk9SX0VWQUxfUkVTVUxUCisjIGlzIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbCwgd2hlcmVhcworIyBGVU5DX1FVT1RFX0ZPUl9FVkFMX1VOUVVPVEVEX1JFU1VMVCBoYXMgbWVyZWx5IGFsbCBjaGFyYWN0ZXJzCisjIHdoaWNoIGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZSBxdW90ZXMgYmFja3NsYXNoaWZpZWQuCitmdW5jX3F1b3RlX2Zvcl9ldmFsICgpCit7CisgICAgY2FzZSAkMSBpbgorICAgICAgKltcXFxgXCJcJF0qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD0iJDEiIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgIyB3b3JkIHNwbGl0dGluZywgY29tbWFuZCBzdWJzdGl0dXRpb24gYW5kIGFuZCB2YXJpYWJsZQorICAgICAgIyBleHBhbnNpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IlwiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0XCIiCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IgorICAgIGVzYWMKK30KKworCisjIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCBhcmcKKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyOyBzYW1lIGFzIGFib3ZlLAorIyBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitmdW5jX3F1b3RlX2Zvcl9leHBhbmQgKCkKK3sKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIl0qKQorCW15X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgXAorCSAgICAtZSAiJGRvdWJsZV9xdW90ZV9zdWJzdCIgLWUgIiRzZWRfZG91YmxlX2JhY2tzbGFzaCJgIDs7CisgICAgICAqKQorICAgICAgICBteV9hcmc9IiQxIiA7OworICAgIGVzYWMKKworICAgIGNhc2UgJG15X2FyZyBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nIGFuZCBjb21tYW5kIHN1YnN0aXR1dGlvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBteV9hcmc9IlwiJG15X2FyZ1wiIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQ9IiRteV9hcmciCit9CisKKworIyBmdW5jX3Nob3dfZXZhbCBjbWQgW2ZhaWxfZXhwXQorIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4KK2Z1bmNfc2hvd19ldmFsICgpCit7CisgICAgbXlfY21kPSIkMSIKKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorCisgICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisgICAgfQorCisgICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQorICAgICAgZXZhbCAiJG15X2NtZCIKKyAgICAgIG15X3N0YXR1cz0kPworICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQorCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgICBmaQorICAgIGZpCit9CisKKworIyBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgY21kIFtmYWlsX2V4cF0KKyMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuICBVc2UgdGhlIHNhdmVkIGxvY2FsZSBmb3IgZXZhbHVhdGlvbi4KK2Z1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQoreworICAgIG15X2NtZD0iJDEiCisgICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKworICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKKyAgICAgIGV2YWwgIiRsdF91c2VyX2xvY2FsZQorCSAgICAkbXlfY21kIgorICAgICAgbXlfc3RhdHVzPSQ/CisgICAgICBldmFsICIkbHRfc2FmZV9sb2NhbGUiCisgICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCisJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAgIGZpCisgICAgZmkKK30KKworIyBmdW5jX3RyX3NoCisjIFR1cm4gJDEgaW50byBhIHN0cmluZyBzdWl0YWJsZSBmb3IgYSBzaGVsbCB2YXJpYWJsZSBuYW1lLgorIyBSZXN1bHQgaXMgc3RvcmVkIGluICRmdW5jX3RyX3NoX3Jlc3VsdC4gIEFsbCBjaGFyYWN0ZXJzCisjIG5vdCBpbiB0aGUgc2V0IGEtekEtWjAtOV8gYXJlIHJlcGxhY2VkIHdpdGggJ18nLiBGdXJ0aGVyLAorIyBpZiAkMSBiZWdpbnMgd2l0aCBhIGRpZ2l0LCBhICdfJyBpcyBwcmVwZW5kZWQgYXMgd2VsbC4KK2Z1bmNfdHJfc2ggKCkKK3sKKyAgY2FzZSAkMSBpbgorICBbMC05XSogfCAqWyFhLXpBLVowLTlfXSopCisgICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICdzL15cKFswLTldXCkvX1wxLzsgcy9bXmEtekEtWjAtOV9dL18vZydgCisgICAgOzsKKyAgKiApCisgICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKKyAgICA7OworICBlc2FjCit9CisKKworIyBmdW5jX3ZlcnNpb24KKyMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY192ZXJzaW9uICgpCit7CisgICAgJG9wdF9kZWJ1ZworCisgICAgJFNFRCAtbiAnLyhDKS8hYiBnbworCTptb3JlCisJL1wuLyF7CisJICBOCisJICBzL1xuIyAvIC8KKwkgIGIgbW9yZQorCX0KKwk6Z28KKwkvXiMgJyRQUk9HUkFNJyAoR05VIC8sLyMgd2FycmFudHk7IC8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisgICAgICAgIHMvXCgoQylcKVsgMC05LC1dKlwoIFsxLTldWzAtOV0qXCkvXDFcMi8KKyAgICAgICAgcAorICAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgIGV4aXQgJD8KK30KKworIyBmdW5jX3VzYWdlCisjIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdXNhZ2UgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICouKi0taGVscC8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisJcy9cJHByb2duYW1lLyckcHJvZ25hbWUnLworCXAKKyAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgZWNobworICAgICRFQ0hPICJydW4gXGAkcHJvZ25hbWUgLS1oZWxwIHwgbW9yZScgZm9yIGZ1bGwgdXNhZ2UiCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfaGVscCBbTk9FWElUXQorIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdCwKKyMgdW5sZXNzICdub2V4aXQnIGlzIHBhc3NlZCBhcyBhcmd1bWVudC4KK2Z1bmNfaGVscCAoKQoreworICAgICRvcHRfZGVidWcKKworICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIFJlcG9ydCBidWdzIHRvLyB7CisJOnByaW50CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKwlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCisJcypcJGhvc3QqJyIkaG9zdCInKgorCXMqXCRTSEVMTConIiRTSEVMTCInKgorCXMqXCRMVENDKiciJExUQ0MiJyoKKwlzKlwkTFRDRkxBR1MqJyIkTFRDRkxBR1MiJyoKKwlzKlwkTEQqJyIkTEQiJyoKKwlzL1wkd2l0aF9nbnVfbGQvJyIkd2l0aF9nbnVfbGQiJy8KKwlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoJHtBVVRPTUFLRS1hdXRvbWFrZX0gLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlzL1wkYXV0b2NvbmZfdmVyc2lvbi8nImAoJHtBVVRPQ09ORi1hdXRvY29uZn0gLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlwCisJZAorICAgICB9CisgICAgIC9eIyAuKiBob21lIHBhZ2U6L2IgcHJpbnQKKyAgICAgL14jIEdlbmVyYWwgaGVscCB1c2luZy9iIHByaW50CisgICAgICcgPCAiJHByb2dwYXRoIgorICAgIHJldD0kPworICAgIGlmIHRlc3QgLXogIiQxIjsgdGhlbgorICAgICAgZXhpdCAkcmV0CisgICAgZmkKK30KKworIyBmdW5jX21pc3NpbmdfYXJnIGFyZ25hbWUKKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciBhbmQgc2V0IGdsb2JhbAorIyBleGl0X2NtZC4KK2Z1bmNfbWlzc2luZ19hcmcgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMS4iCisgICAgZXhpdF9jbWQ9ZXhpdAorfQorCisKKyMgZnVuY19zcGxpdF9zaG9ydF9vcHQgc2hvcnRvcHQKKyMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAorIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIFNIT1JUT1BUIGFmdGVyIHRoZSAybmQgY2hhcmFjdGVyLgorZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKK3sKKyAgICBteV9zZWRfc2hvcnRfb3B0PScxcy9eXCguLlwpLiokL1wxLztxJworICAgIG15X3NlZF9zaG9ydF9yZXN0PScxcy9eLi5cKC4qXCkkL1wxLztxJworCisgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfb3B0ImAKKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X3Jlc3QiYAorfSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19zcGxpdF9sb25nX29wdCBsb25nb3B0CisjIFNldCBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIHNoZWxsCisjIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgTE9OR09QVCBhdCB0aGUgYD0nIHNpZ24uCitmdW5jX3NwbGl0X2xvbmdfb3B0ICgpCit7CisgICAgbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtLVtePV0qXCk9LiovXDEvO3EnCisgICAgbXlfc2VkX2xvbmdfYXJnPScxcy9eLS1bXj1dKj0vLycKKworICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCit9ICMgZnVuY19zcGxpdF9sb25nX29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworZXhpdF9jbWQ9OgorCisKKworCisKK21hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKK21hZ2ljX2V4ZT0iJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlIgorCisjIEdsb2JhbCB2YXJpYWJsZXMuCitub25vcHQ9CitwcmVzZXJ2ZV9hcmdzPQorbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgorbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgorZXh0cmFjdGVkX2FyY2hpdmVzPQorZXh0cmFjdGVkX3NlcmlhbD0wCisKKyMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAorIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisjIGxlZnQgb3ZlciBieSBzaGVsbHMuCitleGVjX2NtZD0KKworIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorZnVuY19hcHBlbmQgKCkKK3sKKyAgICBldmFsICIkezF9PVwkJHsxfVwkezJ9IgorfSAjIGZ1bmNfYXBwZW5kIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisjIGZ1bmNfYXBwZW5kX3F1b3RlZCB2YXIgdmFsdWUKKyMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCisjIGJ5IGEgc3BhY2UuCitmdW5jX2FwcGVuZF9xdW90ZWQgKCkKK3sKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgorICAgIGV2YWwgIiR7MX09XCQkezF9XFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKK30gIyBmdW5jX2FwcGVuZF9xdW90ZWQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICAgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIke0B9ImAKK30gIyBmdW5jX2FyaXRoIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJHsxfSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorfSAjIGZ1bmNfbGVuIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgICAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorfSAjIGZ1bmNfbG8ybyBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICAgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorfSAjIGZ1bmNfeGZvcm0gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgY29uZmlndXJhdGlvbiBmYWlsdXJlIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBmdW5jX2Vycm9yICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuIgorfQorCisKKyMgZnVuY19jb25maWcKKyMgRGlzcGxheSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSB0YWdzIGluIHRoaXMgc2NyaXB0LgorZnVuY19jb25maWcgKCkKK3sKKyAgICByZV9iZWdpbmNmPSdeIyAjIyMgQkVHSU4gTElCVE9PTCcKKyAgICByZV9lbmRjZj0nXiMgIyMjIEVORCBMSUJUT09MJworCisgICAgIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgICAgJFNFRCAiMSwvJHJlX2JlZ2luY2YgQ09ORklHL2Q7LyRyZV9lbmRjZiBDT05GSUcvLFwkZCIgPCAiJHByb2dwYXRoIgorCisgICAgIyBOb3cgcHJpbnQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFncy4KKyAgICBmb3IgdGFnbmFtZSBpbiAkdGFnbGlzdDsgZG8KKyAgICAgICRTRUQgLW4gIi8kcmVfYmVnaW5jZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkLywvJHJlX2VuZGNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvcCIgPCAiJHByb2dwYXRoIgorICAgIGRvbmUKKworICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2ZlYXR1cmVzCisjIERpc3BsYXkgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2Z1bmNfZmVhdHVyZXMgKCkKK3sKKyAgICBlY2hvICJob3N0OiAkaG9zdCIKKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgZWNobyAiZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgZWNobyAiZW5hYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGZpCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19lbmFibGVfdGFnIHRhZ25hbWUKKyMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgorIyBlbmFibGUgdGhlIFRBR05BTUUgdGFnLiAgV2UgYWxzbyBhZGQgVEFHTkFNRSB0byB0aGUgZ2xvYmFsICR0YWdsaXN0CisjIHZhcmlhYmxlIGhlcmUuCitmdW5jX2VuYWJsZV90YWcgKCkKK3sKKyAgIyBHbG9iYWwgdmFyaWFibGU6CisgIHRhZ25hbWU9IiQxIgorCisgIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgc2VkX2V4dHJhY3RjZj0iLyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AiCisKKyAgIyBWYWxpZGF0ZSB0YWduYW1lLgorICBjYXNlICR0YWduYW1lIGluCisgICAgKlshLV9BLVphLXowLTksL10qKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCisgICAgICA7OworICBlc2FjCisKKyAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKKyAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICBDQykgOzsKKyAgICAqKQorICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwl0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKKworCSMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCisJIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKKwkjIGFsc28gZG9uJ3QgdXNlIG5vbi1wb3J0YWJsZSBxdW90ZXMgd2l0aGluIGJhY2txdW90ZXMgd2l0aGluCisJIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgorCWV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKKwlldmFsICIkZXh0cmFjdGVkY2YiCisgICAgICBlbHNlCisJZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQorIyByZWxlYXNlIG9mIGxpYnRvb2wuCitmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKK3sKKyAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCisgICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICBlbHNlCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKKyRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKyRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICBmaQorCisgICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorICBmaQorfQorCisKKyMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorY2FzZSAkMSBpbgorY2xlYW58Y2xlYXxjbGV8Y2wpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2NvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorICA7OworZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CisgIDs7CitmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2luc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICA7OworbGlua3xsaW58bGl8bCkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CisgIDs7Cit1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2VzYWMKKworCisKKyMgT3B0aW9uIGRlZmF1bHRzOgorb3B0X2RlYnVnPToKK29wdF9kcnlfcnVuPWZhbHNlCitvcHRfY29uZmlnPWZhbHNlCitvcHRfcHJlc2VydmVfZHVwX2RlcHM9ZmFsc2UKK29wdF9mZWF0dXJlcz1mYWxzZQorb3B0X2ZpbmlzaD1mYWxzZQorb3B0X2hlbHA9ZmFsc2UKK29wdF9oZWxwX2FsbD1mYWxzZQorb3B0X3NpbGVudD06CitvcHRfd2FybmluZz06CitvcHRfdmVyYm9zZT06CitvcHRfc2lsZW50PWZhbHNlCitvcHRfdmVyYm9zZT1mYWxzZQorCisKKyMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluIHRoZQorIyBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgLS12ZXJzaW9uJyBoYXBwZW4gYXMgcXVpY2tseSBhcyB3ZSBjYW4uCit7CisgICMgdGhpcyBqdXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKKyAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgICBvcHQ9IiQxIgorICAgIHNoaWZ0CisgICAgY2FzZSAkb3B0IGluCisgICAgICAtLWRlYnVnfC14KQlvcHRfZGVidWc9J3NldCAteCcKKwkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKwkJCSRvcHRfZGVidWcKKwkJCTs7CisgICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCisJCQlvcHRfZHJ5X3J1bj06CisJCQk7OworICAgICAgLS1jb25maWcpCisJCQlvcHRfY29uZmlnPToKK2Z1bmNfY29uZmlnCisJCQk7OworICAgICAgLS1kbG9wZW58LWRsb3BlbikKKwkJCW9wdGFyZz0iJDEiCisJCQlvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KK30kb3B0YXJnIgorCQkJc2hpZnQKKwkJCTs7CisgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQorCQkJb3B0X3ByZXNlcnZlX2R1cF9kZXBzPToKKwkJCTs7CisgICAgICAtLWZlYXR1cmVzKQorCQkJb3B0X2ZlYXR1cmVzPToKK2Z1bmNfZmVhdHVyZXMKKwkJCTs7CisgICAgICAtLWZpbmlzaCkKKwkJCW9wdF9maW5pc2g9Ogorc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorCQkJOzsKKyAgICAgIC0taGVscCkKKwkJCW9wdF9oZWxwPToKKwkJCTs7CisgICAgICAtLWhlbHAtYWxsKQorCQkJb3B0X2hlbHBfYWxsPToKK29wdF9oZWxwPSc6IGhlbHAtYWxsJworCQkJOzsKKyAgICAgIC0tbW9kZSkKKwkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhaworCQkJb3B0YXJnPSIkMSIKKwkJCW9wdF9tb2RlPSIkb3B0YXJnIgorY2FzZSAkb3B0YXJnIGluCisgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CisgIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7CisKKyAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCisgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCisgICAgIGV4aXRfY21kPWV4aXQKKyAgICAgYnJlYWsKKyAgICAgOzsKK2VzYWMKKwkJCXNoaWZ0CisJCQk7OworICAgICAgLS1uby1zaWxlbnR8LS1uby1xdWlldCkKKwkJCW9wdF9zaWxlbnQ9ZmFsc2UKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorCQkJOzsKKyAgICAgIC0tbm8td2FybmluZ3wtLW5vLXdhcm4pCisJCQlvcHRfd2FybmluZz1mYWxzZQorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisJCQk7OworICAgICAgLS1uby12ZXJib3NlKQorCQkJb3B0X3ZlcmJvc2U9ZmFsc2UKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorCQkJOzsKKyAgICAgIC0tc2lsZW50fC0tcXVpZXQpCisJCQlvcHRfc2lsZW50PToKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQorCQkJOzsKKyAgICAgIC0tdmVyYm9zZXwtdikKKwkJCW9wdF92ZXJib3NlPToKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0Igorb3B0X3NpbGVudD1mYWxzZQorCQkJOzsKKyAgICAgIC0tdGFnKQorCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCisJCQlvcHRhcmc9IiQxIgorCQkJb3B0X3RhZz0iJG9wdGFyZyIKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0ICRvcHRhcmciCitmdW5jX2VuYWJsZV90YWcgIiRvcHRhcmciCisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQk7OworICAgICAgLS1oZWxwKQkJZnVuY19oZWxwCQkJCTs7CisgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQk7OworCisgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgorICAgICAgLS0qPSopCisJCQlmdW5jX3NwbGl0X2xvbmdfb3B0ICIkb3B0IgorCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIiAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIiAkezErIiRAIn0KKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9ydCBvcHRpb25zOgorICAgICAgLVw/KnwtaCp8LW4qfC12KikKKwkJCWZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkb3B0IgorCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAtLSkJCWJyZWFrCQkJCQk7OworICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIgOzsKKyAgICAgICopCQlzZXQgZHVtbXkgIiRvcHQiICR7MSsiJEAifTsJc2hpZnQ7IGJyZWFrICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgVmFsaWRhdGUgb3B0aW9uczoKKworICAjIHNhdmUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudAorICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKyAgICBub25vcHQ9IiRvcHQiCisgICAgc2hpZnQKKyAgZmkKKworICAjIHByZXNlcnZlIC0tZGVidWcKKyAgdGVzdCAiJG9wdF9kZWJ1ZyIgPSA6IHx8IGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVnIgorCisgIGNhc2UgJGhvc3QgaW4KKyAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqKQorICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgorICAgICAgOzsKKyAgICAqKQorICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X3ByZXNlcnZlX2R1cF9kZXBzCisgICAgICA7OworICBlc2FjCisKKyAgJG9wdF9oZWxwIHx8IHsKKyAgICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisgICAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisKKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKyAgICBmaQorCisgICAgIyBEYXJ3aW4gc3Vja3MKKyAgICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgorCisgICAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KKyAgICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3BlbiIgJiYgdGVzdCAiJG9wdF9tb2RlIiAhPSBleGVjdXRlOyB0aGVuCisgICAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCisgICAgICAkRUNITyAiJGhlbHAiIDE+JjIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgIGZpCisKKyAgICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisgICAgZ2VuZXJpY19oZWxwPSIkaGVscCIKKyAgICBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgfQorCisKKyAgIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZAorICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorfQorCisKKworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgICAgTWFpbi4gICAgIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKKyMgZnVuY19sYWxpYl9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2xhbGliX3AgKCkKK3sKKyAgICB0ZXN0IC1mICIkMSIgJiYKKyAgICAgICRTRUQgLWUgNHEgIiQxIiAyPi9kZXYvbnVsbCBcCisgICAgICAgIHwgJEdSRVAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIiA+IC9kZXYvbnVsbCAyPiYxCit9CisKKyMgZnVuY19sYWxpYl91bnNhZmVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgc2FtZSBjaGVjayBhcyBmdW5jX2xhbGliX3Agd2l0aG91dAorIyByZXNvcnRpbmcgdG8gZXh0ZXJuYWwgcHJvZ3JhbXMuICBUbyB0aGlzIGVuZCwgaXQgcmVkaXJlY3RzIHN0ZGluIGFuZAorIyBjbG9zZXMgaXQgYWZ0ZXJ3YXJkcywgd2l0aG91dCBzYXZpbmcgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvci4KKyMgQXMgYSBzYWZldHkgbWVhc3VyZSwgdXNlIGl0IG9ubHkgd2hlcmUgYSBuZWdhdGl2ZSByZXN1bHQgd291bGQgYmUKKyMgZmF0YWwgYW55d2F5LiAgV29ya3MgaWYgYGZpbGUnIGRvZXMgbm90IGV4aXN0LgorZnVuY19sYWxpYl91bnNhZmVfcCAoKQoreworICAgIGxhbGliX3A9bm8KKyAgICBpZiB0ZXN0IC1mICIkMSIgJiYgdGVzdCAtciAiJDEiICYmIGV4ZWMgNTwmMCA8IiQxIjsgdGhlbgorCWZvciBsYWxpYl9wX2wgaW4gMSAyIDMgNAorCWRvCisJICAgIHJlYWQgbGFsaWJfcF9saW5lCisJICAgIGNhc2UgIiRsYWxpYl9wX2xpbmUiIGluCisJCVwjXCBHZW5lcmF0ZWRcIGJ5XCAqJFBBQ0tBR0UqICkgbGFsaWJfcD15ZXM7IGJyZWFrOzsKKwkgICAgZXNhYworCWRvbmUKKwlleGVjIDA8JjUgNTwmLQorICAgIGZpCisgICAgdGVzdCAiJGxhbGliX3AiID0geWVzCit9CisKKyMgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdAorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICgpCit7CisgICAgZnVuY19sYWxpYl9wICIkMSIKK30KKworIyBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0KKyAgICBjYXNlICQxIGluCisgICAgKi5leGUpIDs7CisgICAgKikgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9LmV4ZSA7OworICAgIGVzYWMKKyAgICAkR1JFUCAiJG1hZ2ljX2V4ZSIgIiQxJGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4IiA+L2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lIGZpbGUKKyMgQXNzdW1lcyBmaWxlIGlzIGFuIGx0d3JhcHBlcl9leGVjdXRhYmxlCisjIHVzZXMgJGZpbGUgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBmaWxlbmFtZSBmb3IgYQorIyB0ZW1wb3JhcnkgbHR3cmFwcGVyX3NjcmlwdC4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgKCkKK3sKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvciB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9wICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiQxIiB8fCBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIgorfQorCisKKyMgZnVuY19leGVjdXRlX2NtZHMgY29tbWFuZHMgZmFpbF9jbWQKKyMgRXhlY3V0ZSB0aWxkZS1kZWxpbWl0ZWQgQ09NTUFORFMuCisjIElmIEZBSUxfQ01EIGlzIGdpdmVuLCBldmFsIHRoYXQgdXBvbiBmYWlsdXJlLgorIyBGQUlMX0NNRCBtYXkgcmVhZC1hY2Nlc3MgdGhlIGN1cnJlbnQgY29tbWFuZCBpbiB2YXJpYWJsZSBDTUQhCitmdW5jX2V4ZWN1dGVfY21kcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisgICAgZm9yIGNtZCBpbiAkMTsgZG8KKyAgICAgIElGUz0kc2F2ZV9pZnMKKyAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKKyAgICBkb25lCisgICAgSUZTPSRzYXZlX2lmcworfQorCisKKyMgZnVuY19zb3VyY2UgZmlsZQorIyBTb3VyY2UgRklMRSwgYWRkaW5nIGRpcmVjdG9yeSBjb21wb25lbnQgaWYgbmVjZXNzYXJ5LgorIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCisjIEZJTEUgZXZlbiBpZiBib3RoIEZJTEUgYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKKyMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZworIyBgRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgorZnVuY19zb3VyY2UgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSAkMSBpbgorICAgICovKiB8ICpcXCopCS4gIiQxIiA7OworICAgICopCQkuICIuLyQxIiA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfcmVzb2x2ZV9zeXNyb290IFBBVEgKKyMgUmVwbGFjZSBhIGxlYWRpbmcgPSBpbiBQQVRIIHdpdGggYSBzeXNyb290LiAgU3RvcmUgdGhlIHJlc3VsdCBpbnRvCisjIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorZnVuY19yZXNvbHZlX3N5c3Jvb3QgKCkKK3sKKyAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSQxCisgIGNhc2UgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCBpbgorICA9KikKKyAgICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX3JlcGxhY2Vfc3lzcm9vdCBQQVRICisjIElmIFBBVEggYmVnaW5zIHdpdGggdGhlIHN5c3Jvb3QsIHJlcGxhY2UgaXQgd2l0aCA9IGFuZAorIyBzdG9yZSB0aGUgcmVzdWx0IGludG8gZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0LgorZnVuY19yZXBsYWNlX3N5c3Jvb3QgKCkKK3sKKyAgY2FzZSAiJGx0X3N5c3Jvb3Q6JDEiIGluCisgID8qOiIkbHRfc3lzcm9vdCIqKQorICAgIGZ1bmNfc3RyaXBuYW1lICIkbHRfc3lzcm9vdCIgJycgIiQxIgorICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0iPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisgICAgOzsKKyAgKikKKyAgICAjIEluY2x1ZGluZyBubyBzeXNyb290LgorICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0kMQorICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2luZmVyX3RhZyBhcmcKKyMgSW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZAorIyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9wdGlvbi4KKyMgT25seSBhdHRlbXB0IHRoaXMgaWYgdGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUKKyMgY29tbWFuZCBkb2Vzbid0IG1hdGNoIHRoZSBkZWZhdWx0IGNvbXBpbGVyLgorIyBhcmcgaXMgdXN1YWxseSBvZiB0aGUgZm9ybSAnZ2NjIC4uLicKK2Z1bmNfaW5mZXJfdGFnICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCisgICAgICBDQ19xdW90ZWQ9CisgICAgICBmb3IgYXJnIGluICRDQzsgZG8KKwlmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgorICAgICAgZG9uZQorICAgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorICAgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCisgICAgICBjYXNlICRAIGluCisgICAgICAjIEJsYW5rcyBpbiB0aGUgY29tbWFuZCBtYXkgaGF2ZSBiZWVuIHN0cmlwcGVkIGJ5IHRoZSBjYWxsaW5nIHNoZWxsLAorICAgICAgIyBidXQgbm90IGZyb20gdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gY29uZmlndXJlIHdhcyBydW4uCisgICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiICRDQ19leHBhbmRlZCAiKiB8ICIkQ0NfZXhwYW5kZWQgIiogfCBcCisgICAgICAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiAkQ0NfcXVvdGVkX2V4cGFuZGVkICIqIHwgIiRDQ19xdW90ZWRfZXhwYW5kZWQgIiopIDs7CisgICAgICAjIEJsYW5rcyBhdCB0aGUgc3RhcnQgb2YgJGJhc2VfY29tcGlsZSB3aWxsIGNhdXNlIHRoaXMgdG8gZmFpbAorICAgICAgIyBpZiB3ZSBkb24ndCBjaGVjayBmb3IgdGhlbSBhcyB3ZWxsLgorICAgICAgKikKKwlmb3IgeiBpbiAkYXZhaWxhYmxlX3RhZ3M7IGRvCisJICBpZiAkR1JFUCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHokIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCisJICAgIGV2YWwgImAke1NFRH0gLW4gLWUgJy9eIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC8sL14jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC9wJyA8ICRwcm9ncGF0aGAiCisJICAgIENDX3F1b3RlZD0KKwkgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorCSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisJICAgIGRvbmUKKwkgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorCSAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKKwkgICAgY2FzZSAiJEAgIiBpbgorCSAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiICRDQ19leHBhbmRlZCAiKiB8ICIkQ0NfZXhwYW5kZWQgIiogfCBcCisJICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikKKwkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcworCSAgICAgICMgdGhlIG9uZSBpbiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24uCisJICAgICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4KKwkgICAgICB0YWduYW1lPSR6CisJICAgICAgYnJlYWsKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCWRvbmUKKwkjIElmICR0YWduYW1lIHN0aWxsIGlzbid0IHNldCwgdGhlbiBubyB0YWdnZWQgY29uZmlndXJhdGlvbgorCSMgd2FzIGZvdW5kIGFuZCBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSAiLS10YWciIGNvbW1hbmQKKwkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KKwlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKwkgIGZ1bmNfZWNobyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBhIHRhZyB3aXRoIFxgLS10YWcnIgorIwllbHNlCisjCSAgZnVuY192ZXJib3NlICJ1c2luZyAkdGFnbmFtZSB0YWdnZWQgY29uZmlndXJhdGlvbiIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgZmkKK30KKworCisKKyMgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCBvdXRwdXRfbmFtZSBwaWNfbmFtZSBub25waWNfbmFtZQorIyBDcmVhdGUgYSBsaWJ0b29sIG9iamVjdCBmaWxlIChhbmFsb2dvdXMgdG8gYSAiLmxhIiBmaWxlKSwKKyMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCitmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICgpCit7CisgICAgd3JpdGVfbGlib2JqPSR7MX0KKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgd3JpdGVfbG9iaj1cJyR7Mn1cJworICAgIGVsc2UKKyAgICAgIHdyaXRlX2xvYmo9bm9uZQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICB3cml0ZV9vbGRvYmo9XCckezN9XCcKKyAgICBlbHNlCisgICAgICB3cml0ZV9vbGRvYmo9bm9uZQorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgY2F0ID4ke3dyaXRlX2xpYm9ian1UIDw8RU9GCisjICR3cml0ZV9saWJvYmogLSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBOYW1lIG9mIHRoZSBQSUMgb2JqZWN0LgorcGljX29iamVjdD0kd3JpdGVfbG9iagorCisjIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Citub25fcGljX29iamVjdD0kd3JpdGVfb2xkb2JqCisKK0VPRgorICAgICAgJE1WICIke3dyaXRlX2xpYm9ian1UIiAiJHt3cml0ZV9saWJvYmp9IgorICAgIH0KK30KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBGSUxFIE5BTUUgQU5EIFBBVEggQ09OVkVSU0lPTiBIRUxQRVIgRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiBBUkcKKyMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsCisjIGFuZCAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEKKyMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0KKyMgaW4gJGJ1aWxkJ3MgJFBBVEguCisjCisjIEFSRyBpcyB0aGUgJGJ1aWxkIGZpbGUgbmFtZSB0byBiZSBjb252ZXJ0ZWQgdG8gdzMyIGZvcm1hdC4KKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQsIGFuZCB3aWxsCisjIGJlIGVtcHR5IG9uIGVycm9yIChvciB3aGVuIEFSRyBpcyBlbXB0eSkKK2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXJyb3IgY29kZSwgc28gd2UKKyAgICAjIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZQorICAgICMgY29tbWFuZCBpcyBub3QgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAorICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aCBlcnJvciBjb2RlIG9mCisgICAgIyB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucyB0aGUgb2RkIGNvbnN0cnVjdGlvbjoKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcD1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcH0iOyB0aGVuCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCIgfAorICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgZWxzZQorICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9CisgICAgZmkKKyAgZmkKK30KKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyIEFSRworIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsIGFuZAorIyAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEgY29ycmVjdGx5CisjIGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0gaW4gJGJ1aWxkJ3MKKyMgJFBBVEguIEFzc3VtZXMgQVJHIGhhcyBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMuCisjCisjIEFSRyBpcyBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gd2luMzIuCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0LgorIyBVbmNvbnZlcnRpYmxlIGZpbGUgKGRpcmVjdG9yeSkgbmFtZXMgaW4gQVJHIGFyZSBza2lwcGVkOyBpZiBubyBkaXJlY3RvcnkgbmFtZXMKKyMgYXJlIGNvbnZlcnRpYmxlLCB0aGVuIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5LgorZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhzLCBvbmx5IGZpbGUgbmFtZXMKKyAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgb2xkSUZTPSRJRlMKKyAgICBJRlM9OgorICAgIGZvciBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YgaW4gJDE7IGRvCisgICAgICBJRlM9JG9sZElGUworICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiIKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgICAgICBlbHNlCisgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQgIjskZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9JG9sZElGUworICBmaQorfQorIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIKKworCisjIGZ1bmNfY3lncGF0aCBBUkdTLi4uCisjIFdyYXBwZXIgYXJvdW5kIGNhbGxpbmcgdGhlIGN5Z3BhdGggcHJvZ3JhbSB2aWEgTFRfQ1lHUEFUSC4gVGhpcyBpcyB1c2VkIHdoZW4KKyMgd2hlbiAoMSkgJGJ1aWxkIGlzICpuaXggYW5kIEN5Z3dpbiBpcyBob3N0ZWQgdmlhIGEgd2luZSBlbnZpcm9ubWVudDsgb3IgKDIpCisjICRidWlsZCBpcyBNU1lTIGFuZCAkaG9zdCBpcyBDeWd3aW4sIG9yICgzKSAkYnVpbGQgaXMgQ3lnd2luLiBJbiBjYXNlICgxKSBvcgorIyAoMiksIHJldHVybnMgdGhlIEN5Z3dpbiBmaWxlIG5hbWUgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dAorIyBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluIHczMiBmb3JtYXQsIGFzIHByZXZpb3VzbHkgY29udmVydGVkCisjIGZyb20gJGJ1aWxkJ3MgKm5peCBvciBNU1lTIGZvcm1hdCkuIEluIGNhc2UgKDMpLCByZXR1cm5zIHRoZSB3MzIgZmlsZSBuYW1lCisjIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbgorIyBDeWd3aW4gZm9ybWF0KS4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgb24gZXJyb3IuCisjCisjIEFSR1MgYXJlIHBhc3NlZCB0byBjeWdwYXRoLCB3aXRoIHRoZSBsYXN0IG9uZSBiZWluZyB0aGUgZmlsZSBuYW1lIG9yIHBhdGggdG8KKyMgYmUgY29udmVydGVkLgorIworIyBTcGVjaWZ5IHRoZSBhYnNvbHV0ZSAqbml4IChvciB3MzIpIG5hbWUgdG8gY3lncGF0aCBpbiB0aGUgTFRfQ1lHUEFUSAorIyBlbnZpcm9ubWVudCB2YXJpYWJsZTsgZG8gbm90IHB1dCBpdCBpbiAkUEFUSC4KK2Z1bmNfY3lncGF0aCAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIHRlc3QgLW4gIiRMVF9DWUdQQVRIIiAmJiB0ZXN0IC1mICIkTFRfQ1lHUEFUSCI7IHRoZW4KKyAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PWAkTFRfQ1lHUEFUSCAiJEAiIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgorICAgICAgIyBvbiBmYWlsdXJlLCBlbnN1cmUgcmVzdWx0IGlzIGVtcHR5CisgICAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQorICAgIGZpCisgIGVsc2UKKyAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQorICAgIGZ1bmNfZXJyb3IgIkxUX0NZR1BBVEggaXMgZW1wdHkgb3Igc3BlY2lmaWVzIG5vbi1leGlzdGVudCBmaWxlOiBcYCRMVF9DWUdQQVRIJyIKKyAgZmkKK30KKyNlbmQ6IGZ1bmNfY3lncGF0aAorCisKKyMgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIG9yIHBhdGggQVJHIGZyb20gTVNZUyBmb3JtYXQgdG8gdzMyIGZvcm1hdC4gIFJldHVybgorIyByZXN1bHQgaW4gZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0LgorZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKKyAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0PWAoIGNtZCAvL2MgZWNobyAiJDEiICkgMj4vZGV2L251bGwgfAorICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKK30KKyNlbmQ6IGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayBBUkcxIEFSRzIKKyMgVmVyaWZ5IHRoYXQgQVJHMSAoYSBmaWxlIG5hbWUgaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorIyBmb3JtYXQgaW4gQVJHMi4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSAocmVzZXR0aW5nCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBBUkcxKS4KK2Z1bmNfY29udmVydF9maWxlX2NoZWNrICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAteiAiJDIiICYmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgZmlsZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8iCisgICAgZnVuY19lcnJvciAiICBcYCQxJyIKKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKyAgICAjIEZhbGxiYWNrOgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjaworCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgRlJPTV9QQVRIU0VQIFRPX1BBVEhTRVAgRlJPTV9QQVRIIFRPX1BBVEgKKyMgVmVyaWZ5IHRoYXQgRlJPTV9QQVRIIChhIHBhdGggaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorIyBmb3JtYXQgaW4gVE9fUEFUSC4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSwgcmVzZXR0aW5nCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBhIHNpbXBsaXN0aWMgZmFsbGJhY2sgdmFsdWUgKHNlZSBiZWxvdykuCitmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIHRlc3QgLXogIiQ0IiAmJiB0ZXN0IC1uICIkMyI7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKyAgICBmdW5jX2Vycm9yICIgIFxgJDMnIgorICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICMgRmFsbGJhY2suICBUaGlzIGlzIGEgZGVsaWJlcmF0ZWx5IHNpbXBsaXN0aWMgImNvbnZlcnNpb24iIGFuZAorICAgICMgc2hvdWxkIG5vdCBiZSAiaW1wcm92ZWQiLiAgU2VlIGxpYnRvb2wuaW5mby4KKyAgICBpZiB0ZXN0ICJ4JDEiICE9ICJ4JDIiOyB0aGVuCisgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnM9InN8JDF8JDJ8ZyIKKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJDMiIHwKKyAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycyJgCisgICAgZWxzZQorICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyIKKyAgICBmaQorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCBGUk9OVFBBVCBCQUNLUEFUIFJFUEwgT1JJRworIyBNb2RpZmllcyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgYnkgcHJlcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBGUk9OVFBBVAorIyBhbmQgYXBwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEJBQ0tQQVQuCitmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBjYXNlICQ0IGluCisgICQxICkgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgOzsKKyAgZXNhYworICBjYXNlICQ0IGluCisgICQyICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0ICIkMyIKKyAgICA7OworICBlc2FjCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkYnVpbGQgdG8gJGhvc3QgRklMRSBOQU1FIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGludm9rZWQgdmlhIGAkdG9faG9zdF9maWxlX2NtZCBBUkcnCisjCisjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisjIFJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorCisKKyMgZnVuY190b19ob3N0X2ZpbGUgQVJHCisjIENvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY190b19ob3N0X2ZpbGUgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICAkdG9faG9zdF9maWxlX2NtZCAiJDEiCit9CisjIGVuZCBmdW5jX3RvX2hvc3RfZmlsZQorCisKKyMgZnVuY190b190b29sX2ZpbGUgQVJHIExBWlkKKyMgY29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHRvb2xjaGFpbiBmb3JtYXQuIFJldHVybgorIyByZXN1bHQgaW4gZnVuY190b190b29sX2ZpbGVfcmVzdWx0LiAgSWYgdGhlIGNvbnZlcnNpb24gaW4gdXNlIGlzIGxpc3RlZAorIyBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB0YWtlcyBwbGFjZS4KK2Z1bmNfdG9fdG9vbF9maWxlICgpCit7CisgICRvcHRfZGVidWcKKyAgY2FzZSAsJDIsIGluCisgICAgKiwiJHRvX3Rvb2xfZmlsZV9jbWQiLCopCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JDEKKyAgICAgIDs7CisgICAgKikKKyAgICAgICR0b190b29sX2ZpbGVfY21kICIkMSIKKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0CisgICAgICA7OworICBlc2FjCit9CisjIGVuZCBmdW5jX3RvX3Rvb2xfZmlsZQorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCBBUkcKKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCAoKQoreworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYworIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBiZWNhdXNlICRidWlsZCBpcyBjeWd3aW4sIHdlIGNhbGwgInRoZSIgY3lncGF0aCBpbiAkUEFUSDsgbm8gbmVlZCB0byB1c2UKKyAgICAjIExUX0NZR1BBVEggaW4gdGhpcyBjYXNlLgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD1gY3lncGF0aCAtbSAiJDEiYAorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50CisjIGFuZCBhIHdvcmtpbmcgd2luZXBhdGguIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25peF90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKworCisjIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZAorIyBpbiBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0CisjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIGNvbnZlcnQgZnJvbSAqbml4IHRvIHczMiwgdGhlbiB1c2UgY3lncGF0aCB0byBjb252ZXJ0IGZyb20gdzMyIHRvIGN5Z3dpbi4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkYnVpbGQgdG8gJGhvc3QgUEFUSCBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgaW52b2tlZCB2aWEgYCR0b19ob3N0X3BhdGhfY21kIEFSRycKKyMKKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKyMgVGhlIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorIworIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuICBJZgorIyBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQKKyMgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkgb24gb3V0cHV0LgorIworIyBBbGwgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgbmFtZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uOgorIyAgIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9uICAgIDogZnVuY19jb252ZXJ0X2ZpbGVfWF90b19ZICgpCisjICAgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9uICAgICAgICAgOiBmdW5jX2NvbnZlcnRfcGF0aF9YX3RvX1kgKCkKKyMgd2hlcmUsIGZvciBhbnkgZ2l2ZW4gJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9uIHRoZSAnWF90b19ZJyB2YWx1ZSBpcyB0aGUKKyMgc2FtZS4gIElmIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBhZGRlZCBmb3IgbmV3ICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMsCisjIHRoZSB0d28gbmV3IGZ1bmN0aW9ucyBtdXN0IGZvbGxvdyB0aGlzIHBhdHRlcm4sIG9yIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisjIHdpbGwgYnJlYWsuCisKKworIyBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorIyBFbnN1cmVzIHRoYXQgZnVuY3Rpb24gInBvaW50ZXIiIHZhcmlhYmxlICR0b19ob3N0X3BhdGhfY21kIGlzIHNldCB0byB0aGUKKyMgYXBwcm9wcmlhdGUgdmFsdWUsIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiAkdG9faG9zdF9maWxlX2NtZC4KK3RvX2hvc3RfcGF0aF9jbWQ9CitmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZCAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIHRlc3QgLXogIiR0b19ob3N0X3BhdGhfY21kIjsgdGhlbgorICAgIGZ1bmNfc3RyaXBuYW1lICdmdW5jX2NvbnZlcnRfZmlsZV8nICcnICIkdG9faG9zdF9maWxlX2NtZCIKKyAgICB0b19ob3N0X3BhdGhfY21kPSJmdW5jX2NvbnZlcnRfcGF0aF8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0iCisgIGZpCit9CisKKworIyBmdW5jX3RvX2hvc3RfcGF0aCBBUkcKKyMgQ29udmVydHMgdGhlIHBhdGggQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY190b19ob3N0X3BhdGggKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorICAkdG9faG9zdF9wYXRoX2NtZCAiJDEiCit9CisjIGVuZCBmdW5jX3RvX2hvc3RfcGF0aAorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbm9vcCBBUkcKKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbm9vcCAoKQoreworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbm9vcAorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20gQVJHLiAgTVNZUworICAgICMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmU7IGN5Z3BhdGggdHVybnMgdGhlbSBpbnRvICcuOycgYW5kICc7Lic7CisgICAgIyBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAtbSAtcCAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiYAorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudCBhbmQKKyMgYSB3b3JraW5nIHdpbmVwYXRoLiAgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQgaW4gYQorIyBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKyAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCisgICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4KKworCisjIGZ1bmNfbW9kZV9jb21waWxlIGFyZy4uLgorZnVuY19tb2RlX2NvbXBpbGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KKyAgICBiYXNlX2NvbXBpbGU9CisgICAgc3JjZmlsZT0iJG5vbm9wdCIgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgorICAgIHN1cHByZXNzX29wdD15ZXMKKyAgICBzdXBwcmVzc19vdXRwdXQ9CisgICAgYXJnX21vZGU9bm9ybWFsCisgICAgbGlib2JqPQorICAgIGxhdGVyPQorICAgIHBpZV9mbGFnPQorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgICAgYXJnICApCisJIyBkbyBub3QgImNvbnRpbnVlIi4gIEluc3RlYWQsIGFkZCB0aGlzIHRvIGJhc2VfY29tcGlsZQorCWxhc3Rhcmc9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJOzsKKworICAgICAgdGFyZ2V0ICkKKwlsaWJvYmo9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJY29udGludWUKKwk7OworCisgICAgICBub3JtYWwgKQorCSMgQWNjZXB0IGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKwljYXNlICRhcmcgaW4KKwktbykKKwkgIHRlc3QgLW4gIiRsaWJvYmoiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5IFxgLW8nIG1vcmUgdGhhbiBvbmNlIgorCSAgYXJnX21vZGU9dGFyZ2V0CisJICBjb250aW51ZQorCSAgOzsKKworCS1waWUgfCAtZnBpZSB8IC1mUElFKQorICAgICAgICAgIGZ1bmNfYXBwZW5kIHBpZV9mbGFnICIgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKwkgIGZ1bmNfYXBwZW5kIGxhdGVyICIgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLW5vLXN1cHByZXNzKQorCSAgc3VwcHJlc3Nfb3B0PW5vCisJICBjb250aW51ZQorCSAgOzsKKworCS1YY29tcGlsZXIpCisJICBhcmdfbW9kZT1hcmcgICMgIHRoZSBuZXh0IG9uZSBnb2VzIGludG8gdGhlICJiYXNlX2NvbXBpbGUiIGFyZyBsaXN0CisJICBjb250aW51ZSAgICAgICMgIFRoZSBjdXJyZW50ICJzcmNmaWxlIiB3aWxsIGVpdGhlciBiZSByZXRhaW5lZCBvcgorCSAgOzsgICAgICAgICAgICAjICByZXBsYWNlZCBsYXRlci4gIEkgd291bGQgZ3Vlc3MgdGhhdCB3b3VsZCBiZSBhIGJ1Zy4KKworCS1XYywqKQorCSAgZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBsYXN0YXJnPQorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJICBmb3IgYXJnIGluICRhcmdzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZnVuY19hcHBlbmRfcXVvdGVkIGxhc3RhcmcgIiRhcmciCisJICBkb25lCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIGZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGxhc3RhcmciCisJICBsYXN0YXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworCSAgIyBBZGQgdGhlIGFyZ3VtZW50cyB0byBiYXNlX2NvbXBpbGUuCisJICBmdW5jX2FwcGVuZCBiYXNlX2NvbXBpbGUgIiAkbGFzdGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJKikKKwkgICMgQWNjZXB0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGFzIHRoZSBzb3VyY2UgZmlsZS4KKwkgICMgVGhlIHByZXZpb3VzICJzcmNmaWxlIiBiZWNvbWVzIHRoZSBjdXJyZW50IGFyZ3VtZW50LgorCSAgIworCSAgbGFzdGFyZz0iJHNyY2ZpbGUiCisJICBzcmNmaWxlPSIkYXJnIgorCSAgOzsKKwllc2FjICAjICBjYXNlICRhcmcKKwk7OworICAgICAgZXNhYyAgICAjICBjYXNlICRhcmdfbW9kZQorCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIHByZXZpb3VzIGFyZ3VtZW50LgorICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGJhc2VfY29tcGlsZSAiJGxhc3RhcmciCisgICAgZG9uZSAjIGZvciBhcmcKKworICAgIGNhc2UgJGFyZ19tb2RlIGluCisgICAgYXJnKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgorICAgICAgOzsKKyAgICB0YXJnZXQpCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggXGAtbyciCisgICAgICA7OworICAgICopCisgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCisgICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiB7CisJZnVuY19iYXNlbmFtZSAiJHNyY2ZpbGUiCisJbGlib2JqPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICB9CisgICAgICA7OworICAgIGVzYWMKKworICAgICMgUmVjb2duaXplIHNldmVyYWwgZGlmZmVyZW50IGZpbGUgc3VmZml4ZXMuCisgICAgIyBJZiB0aGUgdXNlciBzcGVjaWZpZXMgLW8gZmlsZS5vLCBpdCBpcyByZXBsYWNlZCB3aXRoIGZpbGUubG8KKyAgICBjYXNlICRsaWJvYmogaW4KKyAgICAqLltjQ0ZTaWZtc29dIHwgXAorICAgICouYWRhIHwgKi5hZGIgfCAqLmFkcyB8ICouYXNtIHwgXAorICAgICouYysrIHwgKi5jYyB8ICouaWkgfCAqLmNsYXNzIHwgKi5jcHAgfCAqLmN4eCB8IFwKKyAgICAqLltmRl1bMDldPyB8ICouZm9yIHwgKi5qYXZhIHwgKi5nbyB8ICoub2JqIHwgKi5zeCB8ICouY3UgfCAqLmN1cCkKKyAgICAgIGZ1bmNfeGZvcm0gIiRsaWJvYmoiCisgICAgICBsaWJvYmo9JGZ1bmNfeGZvcm1fcmVzdWx0CisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICoubG8pIGZ1bmNfbG8ybyAiJGxpYm9iaiI7IG9iaj0kZnVuY19sbzJvX3Jlc3VsdCA7OworICAgICopCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSBcYCRsaWJvYmonIgorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMpCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtcHJlZmVyLXBpYykKKwlwaWNfbW9kZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItbm9uLXBpYykKKwlwaWNfbW9kZT1ubworCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGlib2JqIgorICAgIHRlc3QgIlgkbGlib2JqIiAhPSAiWCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIgXAorICAgICAgJiYgJEVDSE8gIlgkbGlib2JqIiB8ICRHUkVQICdbXX4jXip7fTs8Pj8iJyInIicJICYoKXxgJFtdJyBcCisgICAgICAmJiBmdW5jX3dhcm5pbmcgImxpYm9iaiBuYW1lIFxgJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCisgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG9iaiIgIi8iICIiCisgICAgb2JqbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgIGxvYmo9JHt4ZGlyfSRvYmpkaXIvJG9iam5hbWUKKworICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGNvbXBpbGF0aW9uIGNvbW1hbmQiCisKKyAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbW92ZWxpc3Q9IiRvYmogJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGVsc2UKKyAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBmaQorCisgICAgIyBPbiBDeWd3aW4gdGhlcmUncyBubyAicmVhbCIgUElDIGZsYWcgc28gd2UgbXVzdCBidWlsZCBib3RoIG9iamVjdCB0eXBlcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgOzsKKyAgICBlc2FjCisgICAgaWYgdGVzdCAiJHBpY19tb2RlIiA9IG5vICYmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKyAgICAgICMgbm9uLVBJQyBjb2RlIGluIHNoYXJlZCBsaWJyYXJpZXMgaXMgbm90IHN1cHBvcnRlZAorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgIGZpCisKKyAgICAjIENhbGN1bGF0ZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG91dHB1dCBvYmplY3QgaWYgY29tcGlsZXIgZG9lcworICAgICMgbm90IHN1cHBvcnQgLW8gd2l0aCAtYworICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0gbm87IHRoZW4KKyAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICIkc3JjZmlsZSIgfCAkU0VEICdzJV4uKi8lJTsgcyVcLlteLl0qJCUlJ2AuJHtvYmpleHR9CisgICAgICBsb2NrZmlsZT0iJG91dHB1dF9vYmoubG9jayIKKyAgICBlbHNlCisgICAgICBvdXRwdXRfb2JqPQorICAgICAgbmVlZF9sb2Nrcz1ubworICAgICAgbG9ja2ZpbGU9CisgICAgZmkKKworICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCisgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQorICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgorICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGVsaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybjsgdGhlbgorICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRvdXRwdXRfb2JqIgorICAgICAgJEVDSE8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKyAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJGxvY2tmaWxlIgorICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1CisKKyAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHNyY2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgc3JjZmlsZT0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHNyY2ZpbGUiCisgICAgcXNyY2ZpbGU9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisKKyAgICAjIE9ubHkgYnVpbGQgYSBQSUMgb2JqZWN0IGlmIHdlIGFyZSBidWlsZGluZyBsaWJ0b29sIGxpYnJhcmllcy4KKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgIyBXaXRob3V0IHRoaXMgYXNzaWdubWVudCwgYmFzZV9jb21waWxlIGdldHMgZW1wdGllZC4KKyAgICAgIGZic2RfaGlkZW91c19zaF9idWc9JGJhc2VfY29tcGlsZQorCisgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IG5vOyB0aGVuCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorICAgICAgZWxzZQorCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSIKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfbWtkaXJfcCAiJHhkaXIkb2JqZGlyIgorCisgICAgICBpZiB0ZXN0IC16ICIkb3V0cHV0X29iaiI7IHRoZW4KKwkjIFBsYWNlIFBJQyBvYmplY3RzIGluICRvYmpkaXIKKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJGxvYmoiCisgICAgICBmaQorCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCisgICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKworICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgorCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQsIHRoZW4gZ28gb24gdG8gY29tcGlsZSB0aGUgbmV4dCBvbmUKKyAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJGxvYmoiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkbG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorCisgICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCisgICAgICBpZiB0ZXN0ICIkc3VwcHJlc3Nfb3B0IiA9IHllczsgdGhlbgorCXN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgT25seSBidWlsZCBhIHBvc2l0aW9uLWRlcGVuZGVudCBvYmplY3QgaWYgd2UgYnVpbGQgb2xkIGxpYnJhcmllcy4KKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IHllczsgdGhlbgorCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSRwaWVfZmxhZyIKKyAgICAgIGVsc2UKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJG9iaiIKKyAgICAgIGZpCisKKyAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgorICAgICAgZnVuY19hcHBlbmQgY29tbWFuZCAiJHN1cHByZXNzX291dHB1dCIKKyAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiIFwKKyAgICAgICAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKworICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgorCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQKKyAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJG9iaiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworICAgICAgZmkKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgIiRsaWJvYmoiICIkb2JqZGlyLyRvYmpuYW1lIiAiJG9iam5hbWUiCisKKyAgICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorCXJlbW92ZWxpc3Q9JGxvY2tmaWxlCisgICAgICAgICRSTSAiJGxvY2tmaWxlIgorICAgICAgZmkKKyAgICB9CisKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworJG9wdF9oZWxwIHx8IHsKKyAgdGVzdCAiJG9wdF9tb2RlIiA9IGNvbXBpbGUgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9Cit9CisKK2Z1bmNfbW9kZV9oZWxwICgpCit7CisgICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCisgICAgY2FzZSAkb3B0X21vZGUgaW4KKyAgICAgICIiKQorICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKKyAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorICAgICAgICBmdW5jX2hlbHAKKyAgICAgICAgOzsKKworICAgICAgY2xlYW4pCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKK3dpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgY29tcGlsZSkKKyAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCisKK0NvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBsaWJyYXJ5IG9iamVjdC4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCisgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGQgUElDIG9iamVjdHMgb25seQorICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgIC1XYyxGTEFHICAgICAgICAgIHBhc3MgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKKworQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgXGBzdGFuZGFyZCcgb2JqZWN0IGZpbGUKK2Zyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCisKK1RoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQorU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4IFxgLmMnIHdpdGggdGhlCitsaWJyYXJ5IG9iamVjdCBzdWZmaXgsIFxgLmxvJy4iCisgICAgICAgIDs7CisKKyAgICAgIGV4ZWN1dGUpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCisKK0F1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtLgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAorCitUaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byBcYC1kbG9wZW4nCitmbGFncy4KKworSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAoraW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5CitkaXJlY3RvcmllcyBhcmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgcGF0aC4KKworVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCisgICAgICAgIDs7CisKKyAgICAgIGZpbmlzaCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgorCitDb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzLgorCitFYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgorCitUaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKK3RoZSBcYC0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgorICAgICAgICA7OworCisgICAgICBpbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9aW5zdGFsbCBJTlNUQUxMLUNPTU1BTkQuLi4KKworSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCisKK0lOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQorZWl0aGVyIHRoZSBcYGluc3RhbGwnIG9yIFxgY3AnIHByb2dyYW0uCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBJTlNUQUxMLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1pbnN0LXByZWZpeC1kaXIgUFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMgYSBzdGFnaW5nIGFyZWEgZm9yIGluc3RhbGxhdGlvbgorCitUaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQorQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCisgICAgICAgIDs7CisKKyAgICAgIGxpbmspCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgorCitMaW5rIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMgdG9nZXRoZXIgdG8gZm9ybSBhbm90aGVyIGxpYnJhcnksIG9yIHRvCitjcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgorCitMSU5LLUNPTU1BTkQgaXMgYSBjb21tYW5kIHVzaW5nIHRoZSBDIGNvbXBpbGVyIHRoYXQgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUKK2EgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKKyAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCisgIC1iaW5kaXIgQklORElSICAgIHNwZWNpZnkgcGF0aCB0byBiaW5hcmllcyBkaXJlY3RvcnkgKGZvciBzeXN0ZW1zIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyBtdXN0IGJlIGZvdW5kIGluIHRoZSBQQVRIIHNldHRpbmcgYXQgcnVudGltZSkKKyAgLWRsb3BlbiBGSUxFICAgICAgXGAtZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCisgIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisgIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCisgIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQorICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIG1hdGNoaW5nIFJFR0VYCisgIC1MTElCRElSICAgICAgICAgIHNlYXJjaCBMSUJESVIgZm9yIHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMKKyAgLWxOQU1FICAgICAgICAgICAgT1VUUFVULUZJTEUgcmVxdWlyZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5IGxpYk5BTUUKKyAgLW1vZHVsZSAgICAgICAgICAgYnVpbGQgYSBsaWJyYXJ5IHRoYXQgY2FuIGRsb3BlbmVkCisgIC1uby1mYXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3QtaW5zdGFsbCBtb2RlCisgIC1uby1pbnN0YWxsICAgICAgIGxpbmsgYSBub3QtaW5zdGFsbGFibGUgZXhlY3V0YWJsZQorICAtbm8tdW5kZWZpbmVkICAgICBkZWNsYXJlIHRoYXQgYSBsaWJyYXJ5IGRvZXMgbm90IHJlZmVyIHRvIGV4dGVybmFsIHN5bWJvbHMKKyAgLW8gT1VUUFVULUZJTEUgICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RzCisgIC1vYmplY3RsaXN0IEZJTEUgIFVzZSBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvdW5kIGluIEZJTEUgdG8gc3BlY2lmeSBvYmplY3RzCisgIC1wcmVjaW91cy1maWxlcy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICBkb24ndCByZW1vdmUgb3V0cHV0IGZpbGVzIG1hdGNoaW5nIFJFR0VYCisgIC1yZWxlYXNlIFJFTEVBU0UgIHNwZWNpZnkgcGFja2FnZSByZWxlYXNlIGluZm9ybWF0aW9uCisgIC1ycGF0aCBMSUJESVIgICAgIHRoZSBjcmVhdGVkIGxpYnJhcnkgd2lsbCBldmVudHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIKKyAgLVJbIF1MSUJESVIgICAgICAgYWRkIExJQkRJUiB0byB0aGUgcnVudGltZSBwYXRoIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMKKyAgLXNoYXJlZCAgICAgICAgICAgb25seSBkbyBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXNocmV4dCBTVUZGSVggICAgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIHNoYXJlZCBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uCisgIC1zdGF0aWMgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zdGF0aWMtbGlidG9vbC1saWJzCisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC12ZXJzaW9uLWluZm8gQ1VSUkVOVFs6UkVWSVNJT05bOkFHRV1dCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KKyAgLXdlYWsgTElCTkFNRSAgICAgZGVjbGFyZSB0aGF0IHRoZSB0YXJnZXQgcHJvdmlkZXMgdGhlIExJQk5BTUUgaW50ZXJmYWNlCisgIC1XYyxGTEFHCisgIC1YY29tcGlsZXIgRkxBRyAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCisgIC1XbCxGTEFHCisgIC1YbGlua2VyIEZMQUcgICAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGxpbmtlcgorICAtWENDbGlua2VyIEZMQUcgICBwYXNzIGxpbmstc3BlY2lmaWMgRkxBRyB0byB0aGUgY29tcGlsZXIgZHJpdmVyIChDQykKKworQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCBcYC0nKSBhcmUgaWdub3JlZC4KKworRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluIFxgLmxhJyBhcmUKK3RyZWF0ZWQgYXMgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMsIG90aGVyIGZpbGVzIGFyZSBzdGFuZGFyZCBvciBsaWJyYXJ5CitvYmplY3QgZmlsZXMuCisKK0lmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAorb25seSBsaWJyYXJ5IG9iamVjdHMgKFxgLmxvJyBmaWxlcykgbWF5IGJlIHNwZWNpZmllZCwgYW5kIFxgLXJwYXRoJyBpcworcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5hJyBvciBcYC5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCit1c2luZyBcYGFyJyBhbmQgXGByYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nIFxgbGliJy4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sbycgb3IgXGAuJHtvYmpleHR9JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKK2lzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIHVuaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPXVuaW5zdGFsbCBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCitSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKyh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KK090aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG9wdF9tb2RlJyIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBlY2hvCisgICAgJEVDSE8gIlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKK30KKworIyBOb3cgdGhhdCB3ZSd2ZSBjb2xsZWN0ZWQgYSBwb3NzaWJsZSAtLW1vZGUgYXJnLCBzaG93IGhlbHAgaWYgbmVjZXNzYXJ5CitpZiAkb3B0X2hlbHA7IHRoZW4KKyAgaWYgdGVzdCAiJG9wdF9oZWxwIiA9IDo7IHRoZW4KKyAgICBmdW5jX21vZGVfaGVscAorICBlbHNlCisgICAgeworICAgICAgZnVuY19oZWxwIG5vZXhpdAorICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKwlmdW5jX21vZGVfaGVscAorICAgICAgZG9uZQorICAgIH0gfCBzZWQgLW4gJzFwOyAyLCRzL15Vc2FnZTovICBvcjogL3AnCisgICAgeworICAgICAgZnVuY19oZWxwIG5vZXhpdAorICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKwllY2hvCisJZnVuY19tb2RlX2hlbHAKKyAgICAgIGRvbmUKKyAgICB9IHwKKyAgICBzZWQgJzFkCisgICAgICAvXldoZW4gcmVwb3J0aW5nLywvXlJlcG9ydC97CisJSAorCWQKKyAgICAgIH0KKyAgICAgICR4CisgICAgICAvaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMvZAorICAgICAgL21vcmUgZGV0YWlsZWQgLipNT0RFL2QKKyAgICAgIHMvXlVzYWdlOi4qLS1tb2RlPVwoW14gXSpcKSAuKi9EZXNjcmlwdGlvbiBvZiBcMSBtb2RlOi8nCisgIGZpCisgIGV4aXQgJD8KK2ZpCisKKworIyBmdW5jX21vZGVfZXhlY3V0ZSBhcmcuLi4KK2Z1bmNfbW9kZV9leGVjdXRlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCisgICAgY21kPSIkbm9ub3B0IgorICAgIHRlc3QgLXogIiRjbWQiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCisKKyAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgorICAgIGZvciBmaWxlIGluICRvcHRfZGxvcGVuOyBkbworICAgICAgdGVzdCAtZiAiJGZpbGUiIFwKKwl8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiCisKKyAgICAgIGRpcj0KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICoubGEpCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgorCWRsbmFtZT0KKwlsaWJyYXJ5X25hbWVzPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgU2tpcCB0aGlzIGxpYnJhcnkgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkLgorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICAjIFdhcm4gaWYgaXQgd2FzIGEgc2hhcmVkIGxpYnJhcnkuCisJICB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYgXAorCSAgICBmdW5jX3dhcm5pbmcgIlxgJGZpbGUnIHdhcyBub3QgbGlua2VkIHdpdGggXGAtZXhwb3J0LWR5bmFtaWMnIgorCSAgY29udGludWUKKwlmaQorCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCWlmIHRlc3QgLWYgIiRkaXIvJG9iamRpci8kZGxuYW1lIjsgdGhlbgorCSAgZnVuY19hcHBlbmQgZGlyICIvJG9iamRpciIKKwllbHNlCisJICBpZiB0ZXN0ICEgLWYgIiRkaXIvJGRsbmFtZSI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqLmxvKQorCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCTs7CisKKyAgICAgICopCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKKwljb250aW51ZQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRobmFtZS4KKyAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKyAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0iJGFic2RpciIKKworICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgorICAgICAgZWxzZQorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKKyAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSIkbWFnaWMiCisKKyAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCisgICAgYXJncz0KKyAgICBmb3IgZmlsZQorICAgIGRvCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAtKiB8ICoubGEgfCAqLmxvICkgOzsKKyAgICAgICopCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICIkZmlsZSIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwllbGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgIGZ1bmNfc291cmNlICIkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBhcmdzICIkZmlsZSIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICJYJG9wdF9kcnlfcnVuIiA9IFhmYWxzZTsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJIyBFeHBvcnQgdGhlIHNobGlicGF0aF92YXIuCisJZXZhbCAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKworICAgICAgIyBSZXN0b3JlIHNhdmVkIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCisgICAgICBkbworCWV2YWwgImlmIHRlc3QgXCJcJHtzYXZlXyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCisgICAgICAgICAgICAgICAgJGx0X3Zhcj1cJHNhdmVfJGx0X3ZhcjsgZXhwb3J0ICRsdF92YXIKKwkgICAgICBlbHNlCisJCSRsdF91bnNldCAkbHRfdmFyCisJICAgICAgZmkiCisgICAgICBkb25lCisKKyAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KKyAgICAgIGV4ZWNfY21kPSJcJGNtZCRhcmdzIgorICAgIGVsc2UKKyAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwlldmFsICJcJEVDSE8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgorCWVjaG8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisgICAgICAkRUNITyAiJGNtZCRhcmdzIgorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZmkKK30KKwordGVzdCAiJG9wdF9tb2RlIiA9IGV4ZWN1dGUgJiYgZnVuY19tb2RlX2V4ZWN1dGUgJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfZmluaXNoIGFyZy4uLgorZnVuY19tb2RlX2ZpbmlzaCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBsaWJzPQorICAgIGxpYmRpcnM9CisgICAgYWRtaW5jbWRzPQorCisgICAgZm9yIG9wdCBpbiAiJG5vbm9wdCIgJHsxKyIkQCJ9CisgICAgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRvcHQiOyB0aGVuCisJZnVuY19hcHBlbmQgbGliZGlycyAiICRvcHQiCisKKyAgICAgIGVsaWYgdGVzdCAtZiAiJG9wdCI7IHRoZW4KKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkb3B0IjsgdGhlbgorCSAgZnVuY19hcHBlbmQgbGlicyAiICRvcHQiCisJZWxzZQorCSAgZnVuY193YXJuaW5nICJcYCRvcHQnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwlmaQorCisgICAgICBlbHNlCisJZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCBcYCRvcHQnIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0IC1uICIkbGlicyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRsdF9zeXNyb290IjsgdGhlbgorICAgICAgICBzeXNyb290X3JlZ2V4PWAkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorICAgICAgICBzeXNyb290X2NtZD0icy9cKFsgJ11cKSRzeXNyb290X3JlZ2V4L1wxL2c7IgorICAgICAgZWxzZQorICAgICAgICBzeXNyb290X2NtZD0KKyAgICAgIGZpCisKKyAgICAgICMgUmVtb3ZlIHN5c3Jvb3QgcmVmZXJlbmNlcworICAgICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCisgICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgXGA9JyBwcmVmaXhlcyBmcm9tICRsaWIiCisgICAgICAgIGRvbmUKKyAgICAgIGVsc2UKKyAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKwkgIHNlZCAtZSAiJHtzeXNyb290X2NtZH0gcy9cKFsgJ10tW0xSXVwpPS9cMS9nOyBzL1woWyAnXVwpPS9cMS9nIiAkbGliIFwKKwkgICAgPiAkdG1wZGlyL3RtcC1sYQorCSAgbXYgLWYgJHRtcGRpci90bXAtbGEgJGxpYgorCWRvbmUKKyAgICAgICAgJHtSTX1yICIkdG1wZGlyIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZmluaXNoX2NtZHMiICdhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyciJGNtZCInIicKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KKwkgICMgRG8gdGhlIHNpbmdsZSBmaW5pc2hfZXZhbC4KKwkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGZ1bmNfYXBwZW5kIGFkbWluY21kcyAiCisgICAgICAgJGNtZHMiCisJZmkKKyAgICAgIGRvbmUKKyAgICBmaQorCisgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgJG9wdF9zaWxlbnQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICAgIGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisJJEVDSE8gIiAgICRsaWJkaXIiCisgICAgICBkb25lCisgICAgICBlY2hvCisgICAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKyAgICAgIGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgorICAgICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKKyAgICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisJZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKwllY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCWxpYmRpcj1MSUJESVIKKwlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisKKwkkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCisJJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisJZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCisgICAgICBmaQorICAgICAgZWNobworCisgICAgICBlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwlzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKwkgIGVjaG8gInBhZ2VzLiIKKwkgIDs7CisJKikKKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZmkKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKwordGVzdCAiJG9wdF9tb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfaW5zdGFsbCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAjIFRoZXJlIG1heSBiZSBhbiBvcHRpb25hbCBzaCgxKSBhcmd1bWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgIyBpbnN0YWxsX3Byb2cgKGVzcGVjaWFsbHkgb24gV2luZG93cyBOVCkuCisgICAgaWYgdGVzdCAiJG5vbm9wdCIgPSAiJFNIRUxMIiB8fCB0ZXN0ICIkbm9ub3B0IiA9IC9iaW4vc2ggfHwKKyAgICAgICAjIEFsbG93IHRoZSB1c2Ugb2YgR05VIHNodG9vbCdzIGluc3RhbGwgY29tbWFuZC4KKyAgICAgICBjYXNlICRub25vcHQgaW4gKnNodG9vbCopIDo7OyAqKSBmYWxzZTs7IGVzYWM7IHRoZW4KKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRub25vcHQiCisgICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiCisgICAgICBhcmc9JDEKKyAgICAgIHNoaWZ0CisgICAgZWxzZQorICAgICAgaW5zdGFsbF9wcm9nPQorICAgICAgYXJnPSRub25vcHQKKyAgICBmaQorCisgICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgorICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9JGluc3RhbGxfcHJvZworICAgIGNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKyAgICAgICpbXFxcIC9dY3BcICopIGluc3RhbGxfY3A9OiA7OworICAgICAgKikgaW5zdGFsbF9jcD1mYWxzZSA7OworICAgIGVzYWMKKworICAgICMgV2UgbmVlZCB0byBhY2NlcHQgYXQgbGVhc3QgYWxsIHRoZSBCU0QgaW5zdGFsbCBmbGFncy4KKyAgICBkZXN0PQorICAgIGZpbGVzPQorICAgIG9wdHM9CisgICAgcHJldj0KKyAgICBpbnN0YWxsX3R5cGU9CisgICAgaXNkaXI9bm8KKyAgICBzdHJpcG1lPQorICAgIG5vX21vZGU9OgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgYXJnMj0KKyAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgorCWZ1bmNfYXBwZW5kIGZpbGVzICIgJGRlc3QiCisJZGVzdD0kYXJnCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWQpIGlzZGlyPXllcyA7OworICAgICAgLWYpCisJaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorCSAgcHJldj0kYXJnCisJZmkKKwk7OworICAgICAgLWcgfCAtbSB8IC1vKQorCXByZXY9JGFyZworCTs7CisgICAgICAtcykKKwlzdHJpcG1lPSIgLXMiCisJY29udGludWUKKwk7OworICAgICAgLSopCisJOzsKKyAgICAgICopCisJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgorCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCSAgaWYgdGVzdCAieCRwcmV2IiA9IHgtbSAmJiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIjsgdGhlbgorCSAgICBhcmcyPSRpbnN0YWxsX292ZXJyaWRlX21vZGUKKwkgICAgbm9fbW9kZT1mYWxzZQorCSAgZmkKKwkgIHByZXY9CisJZWxzZQorCSAgZGVzdD0kYXJnCisJICBjb250aW51ZQorCWZpCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBpZiB0ZXN0IC1uICIkYXJnMiI7IHRoZW4KKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnMiIKKyAgICAgIGZpCisgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgJiYgJG5vX21vZGU7IHRoZW4KKyAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIgorCWZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KKwlmdW5jX2ZhdGFsX2hlbHAgIm5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3BlY2lmaWVkIgorICAgICAgZWxzZQorCWZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdCIKKyAgICBkZXN0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgorICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj15ZXMKKyAgICBpZiB0ZXN0ICIkaXNkaXIiID0geWVzOyB0aGVuCisgICAgICBkZXN0ZGlyPSIkZGVzdCIKKyAgICAgIGRlc3RuYW1lPQorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAiLiIKKyAgICAgIGRlc3RkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgZGVzdG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgorICAgICAgc2V0IGR1bW15ICRmaWxlczsgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCisgICAgZmkKKyAgICBjYXNlICRkZXN0ZGlyIGluCisgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworICAgICopCisgICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisJY2FzZSAkZmlsZSBpbgorCSoubG8pIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKworICAgIHN0YXRpY2xpYnM9CisgICAgZnV0dXJlX2xpYmRpcnM9CisgICAgY3VycmVudF9saWJkaXJzPQorICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKworICAgICAgIyBEbyBlYWNoIGluc3RhbGxhdGlvbi4KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICouJGxpYmV4dCkKKwkjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgorCWZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZmlsZSIKKwk7OworCisgICAgICAqLmxhKQorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlyZWxpbmtfY29tbWFuZD0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIEFkZCB0aGUgbGliZGlyIHRvIGN1cnJlbnRfbGliZGlycyBpZiBpdCBpcyB0aGUgZGVzdGluYXRpb24uCisJaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KKwkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGN1cnJlbnRfbGliZGlycyAiICRsaWJkaXIiIDs7CisJICBlc2FjCisJZWxzZQorCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmdXR1cmVfbGliZGlycyAiICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJZnVuY19hcHBlbmQgZGlyICIkb2JqZGlyIgorCisJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KKwkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIiRkZXN0ZGlyIiB8ICRTRUQgLWUgInMlJGxpYmRpclwkJSUiYAorCisJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCisJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgorCSAgIyBBdCBwcmVzZW50LCB0aGlzIGNoZWNrIGRvZXNuJ3QgYWZmZWN0IHdpbmRvd3MgLmRsbCdzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCBpbnRvICRsaWJkaXIvLi4vYmluIChjdXJyZW50bHksIHRoYXQgd29ya3MgZmluZSkKKwkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgorCSAgdGVzdCAiJGluc3RfcHJlZml4X2RpciIgPSAiJGRlc3RkaXIiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKKworCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJS1pbnN0LXByZWZpeC1kaXIgJGluc3RfcHJlZml4X2RpciUiYAorCSAgZWxzZQorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiYAorCSAgZmkKKworCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgXGAkZmlsZSciCisJICBmdW5jX3Nob3dfZXZhbCAiJHJlbGlua19jb21tYW5kIiBcCisJICAgICdmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnXCcnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiJworCWZpCisKKwkjIFNlZSB0aGUgbmFtZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lczsgc2hpZnQKKwlpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKwkgIHJlYWxuYW1lPSIkMSIKKwkgIHNoaWZ0CisKKwkgIHNyY25hbWU9IiRyZWFsbmFtZSIKKwkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKKworCSAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCisJICAgICAgJ2V4aXQgJD8nCisJICB0c3RyaXBtZT0iJHN0cmlwbWUiCisJICBjYXNlICRob3N0X29zIGluCisJICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisJICAgIGNhc2UgJHJlYWxuYW1lIGluCisJICAgICouZGxsLmEpCisJICAgICAgdHN0cmlwbWU9IiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0IC1uICIkdHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiICdleGl0ICQ/JworCSAgZmkKKworCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCisJICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KKwkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCisJICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KKwkgICAgZm9yIGxpbmtuYW1lCisJICAgIGRvCisJICAgICAgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIiBcCisJCSYmIGZ1bmNfc2hvd19ldmFsICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJFJNICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKKwkgICAgZG9uZQorCSAgZmkKKworCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorCSAgbGliPSIkZGVzdGRpci8kcmVhbG5hbWUiCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworCWZpCisKKwkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KKwlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJaW5zdG5hbWU9IiRkaXIvJG5hbWUiaQorCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCisKKwkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCisJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJOzsKKworICAgICAgKi5sbykKKwkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KKworCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJZmkKKworCSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJY2FzZSAkZGVzdGZpbGUgaW4KKwkqLmxvKQorCSAgZnVuY19sbzJvICIkZGVzdGZpbGUiCisJICBzdGF0aWNkZXN0PSRmdW5jX2xvMm9fcmVzdWx0CisJICA7OworCSouJG9iamV4dCkKKwkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKKwkgIGRlc3RmaWxlPQorCSAgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICJjYW5ub3QgY29weSBhIGxpYnRvb2wgb2JqZWN0IHRvIFxgJGRlc3RmaWxlJyIKKwkgIDs7CisJZXNhYworCisJIyBJbnN0YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1ZXN0ZWQuCisJdGVzdCAtbiAiJGRlc3RmaWxlIiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiICdleGl0ICQ/JworCisJIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCisJaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwkgIGZ1bmNfbG8ybyAiJGZpbGUiCisJICBzdGF0aWNvYmo9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgJ2V4aXQgJD8nCisJZmkKKwlleGl0ICRFWElUX1NVQ0NFU1MKKwk7OworCisgICAgICAqKQorCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJZmkKKworCSMgSWYgdGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJlIGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBzdHJpcCBpdAorCSMgYmVjYXVzZSBpdCBpcyBtb3N0IGxpa2VseSBhIGxpYnRvb2wgc2NyaXB0IHdlIGFjdHVhbGx5IHdhbnQgdG8KKwkjIGluc3RhbGwKKwlzdHJpcHBlZF9leHQ9IiIKKwljYXNlICRmaWxlIGluCisJICAqLmV4ZSkKKwkgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIHN0cmlwcGVkX2V4dD0iLmV4ZSIKKwkgICAgZmkKKwkgICAgOzsKKwllc2FjCisKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KikKKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICBlbHNlCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZmkKKwkgICAgOzsKKwkqKQorCSAgICB3cmFwcGVyPSRmaWxlCisJICAgIDs7CisJZXNhYworCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkd3JhcHBlciI7IHRoZW4KKwkgIG5vdGluc3RfZGVwbGlicz0KKwkgIHJlbGlua19jb21tYW5kPQorCisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgorCSAgdGVzdCAteiAiJGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb24iICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IFxgJHdyYXBwZXInIgorCisJICBmaW5hbGl6ZT15ZXMKKwkgIGZvciBsaWIgaW4gJG5vdGluc3RfZGVwbGliczsgZG8KKwkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgorCSAgICBsaWJkaXI9CisJICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJICAgICAgZnVuY19zb3VyY2UgIiRsaWIiCisJICAgIGZpCisJICAgIGxpYmZpbGU9IiRsaWJkaXIvImAkRUNITyAiJGxpYiIgfCAkU0VEICdzJV4uKi8lJWcnYCAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKwkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX3dhcm5pbmcgIlxgJGxpYicgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBcYCRsaWJkaXInIgorCSAgICAgIGZpbmFsaXplPW5vCisJICAgIGZpCisJICBkb25lCisKKwkgIHJlbGlua19jb21tYW5kPQorCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgorCisJICBvdXRwdXRuYW1lPQorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgaWYgdGVzdCAiJGZpbmFsaXplIiA9IHllczsgdGhlbgorCSAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKwkJZnVuY19iYXNlbmFtZSAiJGZpbGUkc3RyaXBwZWRfZXh0IgorCQlmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgICAgICBvdXRwdXRuYW1lPSIkdG1wZGlyLyRmaWxlIgorCSAgICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCSAgICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRuYW1lIiclZydgCisKKwkgICAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkcmVsaW5rX2NvbW1hbmQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgICAgfQorCSAgICAgICAgaWYgZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CisJICAgICAgICAgIGVsc2UKKwkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCisJCSAgJG9wdF9kcnlfcnVuIHx8ICR7Uk19ciAiJHRtcGRpciIKKwkJICBjb250aW51ZQorCSAgICAgICAgZmkKKwkgICAgICAgIGZpbGU9IiRvdXRwdXRuYW1lIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayBcYCRmaWxlJyIKKwkgICAgICBmaQorCSAgICB9CisJICBlbHNlCisJICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KKwkgICAgZmlsZT1gJEVDSE8gIiRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkU0VEICJzJVwoW14vXSpcKSQlJG9iamRpci9cMSUiYAorCSAgZmkKKwlmaQorCisJIyByZW1vdmUgLmV4ZSBzaW5jZSBjeWd3aW4gL3Vzci9iaW4vaW5zdGFsbCB3aWxsIGFwcGVuZCBhbm90aGVyCisJIyBvbmUgYW55d2F5CisJY2FzZSAkaW5zdGFsbF9wcm9nLCRob3N0IGluCisJKi91c3IvYmluL2luc3RhbGwqLCpjeWd3aW4qKQorCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KKwkgICouZXhlOiouZXhlKQorCSAgICAjIHRoaXMgaXMgb2sKKwkgICAgOzsKKwkgICouZXhlOiopCisJICAgIGRlc3RmaWxlPSRkZXN0ZmlsZS5leGUKKwkgICAgOzsKKwkgICo6Ki5leGUpCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGRlc3RmaWxlIgorCSAgICBkZXN0ZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisJJG9wdF9kcnlfcnVuIHx8IGlmIHRlc3QgLW4gIiRvdXRwdXRuYW1lIjsgdGhlbgorCSAgJHtSTX1yICIkdG1wZGlyIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmb3IgZmlsZSBpbiAkc3RhdGljbGliczsgZG8KKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisgICAgICAjIFNldCB1cCB0aGUgcmFubGliIHBhcmFtZXRlcnMuCisgICAgICBvbGRsaWI9IiRkZXN0ZGlyLyRuYW1lIgorICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvbGRsaWIiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICB0b29sX29sZGxpYj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgJ2V4aXQgJD8nCisKKyAgICAgIGlmIHRlc3QgLW4gIiRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkb2xkX3N0cmlwbGliIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICIkb2xkX3N0cmlwbGliICR0b29sX29sZGxpYiIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiICYmIFwKKyAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKKworICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCisgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKKyAgICAgIGV4ZWNfY21kPSckU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKKyAgICBlbHNlCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkb3B0X21vZGUiID0gaW5zdGFsbCAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KKworCisjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcAorIyBFeHRyYWN0IHN5bWJvbHMgZnJvbSBkbHByZWZpbGVzIGFuZCBjcmVhdGUgJHtvdXRwdXRuYW1lfVMubyB3aXRoCisjIGEgZGxwcmVvcGVuIHN5bWJvbCB0YWJsZS4KK2Z1bmNfZ2VuZXJhdGVfZGxzeW1zICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X291dHB1dG5hbWU9IiQxIgorICAgIG15X29yaWdpbmF0b3I9IiQyIgorICAgIG15X3BpY19wPSIkezMtbm99IgorICAgIG15X3ByZWZpeD1gJEVDSE8gIiRteV9vcmlnaW5hdG9yIiB8IHNlZCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKKyAgICBteV9kbHN5bXM9CisKKyAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCW15X2Rsc3ltcz0iJHtteV9vdXRwdXRuYW1lfVMuYyIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGxzeW1zIjsgdGhlbgorICAgICAgY2FzZSAkbXlfZGxzeW1zIGluCisgICAgICAiIikgOzsKKyAgICAgICouYykKKwkjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgorCW5saXN0PSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Lm5tIgorCisJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKworCSMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCisJZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCisJJG9wdF9kcnlfcnVuIHx8ICRFQ0hPID4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yIFxgJG15X291dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KKy8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gXCJDXCIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNCkpIHx8IChfX0dOVUNfXyA+IDQpKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiCisjZW5kaWYKKworLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZChfX29zZl9fKQorLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2Vsc2UKKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKKyIKKworCWlmIHRlc3QgIiRkbHNlbGYiID0geWVzOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJG91dHB1dCciCisKKwkgICRvcHRfZHJ5X3J1biB8fCBlY2hvICc6IEBQUk9HUkFNQCAnID4gIiRubGlzdCIKKworCSAgIyBBZGQgb3VyIG93biBwcm9ncmFtIG9iamVjdHMgdG8gdGhlIHN5bWJvbCBsaXN0LgorCSAgcHJvZ2ZpbGVzPWAkRUNITyAiJG9ianMkb2xkX2RlcGxpYnMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkcHJvZ2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKKwkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIH0KKwkgIGZpCisKKwkgICMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKyAgICAgICAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworICAgICAgICAgICAgICAgIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBlbHNlCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisJICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBmaQorCWZpCisKKwlmb3IgZGxwcmVmaWxlIGluICRkbHByZWZpbGVzOyBkbworCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKKwkgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgICAgICBjYXNlICRob3N0IGluCisJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICMgaWYgYW4gaW1wb3J0IGxpYnJhcnksIHdlIG5lZWQgdG8gb2J0YWluIGRsbmFtZQorCSAgICAgIGlmIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICIkZGxwcmVmaWxlIjsgdGhlbgorCSAgICAgICAgZnVuY190cl9zaCAiJGRscHJlZmlsZSIKKwkgICAgICAgIGV2YWwgImN1cnJfbGFmaWxlPVwkbGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQiCisJICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iIgorCSAgICAgICAgaWYgdGVzdCAtbiAiJGN1cnJfbGFmaWxlIiAmJiBmdW5jX2xhbGliX3AgIiRjdXJyX2xhZmlsZSI7IHRoZW4KKwkgICAgICAgICAgIyBVc2Ugc3Vic2hlbGwsIHRvIGF2b2lkIGNsb2JiZXJpbmcgY3VycmVudCB2YXJpYWJsZSB2YWx1ZXMKKwkgICAgICAgICAgZGxwcmVmaWxlX2RsbmFtZT1gc291cmNlICIkY3Vycl9sYWZpbGUiICYmIGVjaG8gIiRkbG5hbWUiYAorCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsbmFtZSIgOyB0aGVuCisJICAgICAgICAgICAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZV9kbG5hbWUiCisJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgICMgbm8gbGFmaWxlLiB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIC1kbHByZW9wZW4gPGltcG9ydCBsaWJyYXJ5Pi4KKwkgICAgICAgICAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgIiRkbHByZWZpbGUiCisJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9JHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CisJICAgICAgICAgIGZpCisJICAgICAgICBmaQorCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA7IHRoZW4KKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkZGxwcmVmaWxlX2RsYmFzZW5hbWUiID4+ICIkbmxpc3QiJworCSAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgZnVuY193YXJuaW5nICJDb3VsZCBub3QgY29tcHV0ZSBETEwgbmFtZSBmcm9tICRuYW1lIgorCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICAgIGZpCisJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwKKwkgICAgICAgICAgICAkU0VEIC1lICcvSSBfX2ltcC9kJyAtZSAncy9JIF9fbm1fL0QgLztzL19ubV9fLy8nID4+ICckbmxpc3QnIgorCSAgICAgICAgfQorCSAgICAgIGVsc2UgIyBub3QgYW4gaW1wb3J0IGxpYgorCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICAgICAgICB9CisJICAgICAgZmkKKwkgICAgOzsKKwkgICAgKikKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgICAgICB9CisJICAgIDs7CisgICAgICAgICAgZXNhYworCWRvbmUKKworCSRvcHRfZHJ5X3J1biB8fCB7CisJICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGFuIGVtcHR5IGZpbGUuCisJICB0ZXN0IC1mICIkbmxpc3QiIHx8IDogPiAiJG5saXN0IgorCisJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAorCSAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCisJICBmaQorCisJICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorCSAgaWYgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiB8CisJICAgICAgaWYgc29ydCAtayAzIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCXNvcnQgLWsgMworCSAgICAgIGVsc2UKKwkJc29ydCArMgorCSAgICAgIGZpIHwKKwkgICAgICB1bmlxID4gIiRubGlzdCJTOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiA+ICIkbmxpc3QiUworCSAgZmkKKworCSAgaWYgdGVzdCAtZiAiJG5saXN0IlM7IHRoZW4KKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiUyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyInCisJICBlbHNlCisJICAgIGVjaG8gJy8qIE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgZmkKKworCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICphZGRyZXNzOworfSBsdF9kbHN5bWxpc3Q7CitleHRlcm4gTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107CitMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cit7XAorICB7IFwiJG15X29yaWdpbmF0b3JcIiwgKHZvaWQgKikgMCB9LCIKKworCSAgY2FzZSAkbmVlZF9saWJfcHJlZml4IGluCisJICBubykKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICAqKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgZXNhYworCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmXAorIgorCX0gIyAhJG9wdF9kcnlfcnVuCisKKwlwaWNfZmxhZ19mb3Jfc3ltdGFibGU9CisJY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCisJKiIgLXN0YXRpYyAiKikgOzsKKwkqKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgIyBjb21waWxpbmcgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIHdpdGggcGljX2ZsYWcgd29ya3MgYXJvdW5kCisJICAjIGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJvZ3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0gaXMKKwkgICMgbGlua2VkIGJlZm9yZSBhbnkgb3RoZXIgUElDIG9iamVjdC4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UKKwkgICMgcGljX2ZsYWcgd2hlbiBsaW5raW5nIHdpdGggLXN0YXRpYy4gIFRoZSBwcm9ibGVtIGV4aXN0cyBpbgorCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KKwkgICotKi1mcmVlYnNkMi4qfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtREZSRUVCU0RfV09SS0FST1VORCIgOzsKKwkgICotKi1ocHV4KikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIiAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIlgkbXlfcGljX3AiICE9IFhubzsgdGhlbgorCSAgICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCXN5bXRhYl9jZmxhZ3M9CisJZm9yIGFyZyBpbiAkTFRDRkxBR1M7IGRvCisJICBjYXNlICRhcmcgaW4KKwkgIC1waWUgfCAtZnBpZSB8IC1mUElFKSA7OworCSAgKikgZnVuY19hcHBlbmQgc3ltdGFiX2NmbGFncyAiICRhcmciIDs7CisJICBlc2FjCisJZG9uZQorCisJIyBOb3cgY29tcGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4KKwlmdW5jX3Nob3dfZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRMVENDJHN5bXRhYl9jZmxhZ3MgLWMkbm9fYnVpbHRpbl9mbGFnJHBpY19mbGFnX2Zvcl9zeW10YWJsZSAiJG15X2Rsc3ltcyIpJyAnZXhpdCAkPycKKworCSMgQ2xlYW4gdXAgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiJG5saXN0IiAiJHtubGlzdH1TIiAiJHtubGlzdH1UIicKKworCSMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCisJc3ltZmlsZW9iaj0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfVMuJG9iamV4dCIKKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYiOyB0aGVuCisJICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgIGVsc2UKKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpCisJICA7OworCSopCisJICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWZ1bmNfZmF0YWxfZXJyb3IgInVua25vd24gc3VmZml4IGZvciBcYCRteV9kbHN5bXMnIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgIyBXZSBrZWVwIGdvaW5nIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgcmVmZXIgdG8KKyAgICAgICMgbHRfcHJlbG9hZGVkX3N5bWJvbHMuICBUaGUgbGlua2VyIHdpbGwgZmFpbCBpZiBnbG9iYWxfc3ltYm9sX3BpcGUKKyAgICAgICMgcmVhbGx5IHdhcyByZXF1aXJlZC4KKworICAgICAgIyBOdWxsaWZ5IHRoZSBzeW1ib2wgZmlsZS4KKyAgICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyUgQFNZTUZJTEVAJSUiYAorICAgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlIEBTWU1GSUxFQCUlImAKKyAgICBmaQorfQorCisjIGZ1bmNfd2luMzJfbGliaWQgYXJnCisjIHJldHVybiB0aGUgbGlicmFyeSB0eXBlIG9mIGZpbGUgJ2FyZycKKyMKKyMgTmVlZCBhIGxvdCBvZiBnb28gdG8gaGFuZGxlICpib3RoKiBETExzIGFuZCBpbXBvcnQgbGlicworIyBIYXMgdG8gYmUgYSBzaGVsbCBmdW5jdGlvbiBpbiBvcmRlciB0byAnZWF0JyB0aGUgYXJndW1lbnQKKyMgdGhhdCBpcyBzdXBwbGllZCB3aGVuICRmaWxlX21hZ2ljX2NvbW1hbmQgaXMgY2FsbGVkLgorIyBEZXNwaXRlIHRoZSBuYW1lLCBhbHNvIGRlYWwgd2l0aCA2NCBiaXQgYmluYXJpZXMuCitmdW5jX3dpbjMyX2xpYmlkICgpCit7CisgICRvcHRfZGVidWcKKyAgd2luMzJfbGliaWRfdHlwZT0idW5rbm93biIKKyAgd2luMzJfZmlsZXJlcz1gZmlsZSAtTCAkMSAyPi9kZXYvbnVsbGAKKyAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAqYXJcIGFyY2hpdmVcIGltcG9ydFwgbGlicmFyeSopICMgZGVmaW5pdGVseSBpbXBvcnQKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCisgICAgOzsKKyAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYworICAgICMgS2VlcCB0aGUgZWdyZXAgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ELgorICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKyAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIHwKKwkkU0VEIC1uIC1lICcKKwkgICAgMSwxMDB7CisJCS8gSSAveworCQkgICAgcywuKixpbXBvcnQsCisJCSAgICBwCisJCSAgICBxCisJCX0KKwkgICAgfSdgCisgICAgICBjYXNlICR3aW4zMl9ubXJlcyBpbgorICAgICAgaW1wb3J0KikgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCI7OworICAgICAgKikgICAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIHN0YXRpYyI7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgKkRMTCopCisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKKyAgICA7OworICAqZXhlY3V0YWJsZSopICMgYnV0IHNoZWxsIHNjcmlwdHMgYXJlICJleGVjdXRhYmxlIiB0b28uLi4KKyAgICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICAgKk1TXCBXaW5kb3dzXCBQRVwgSW50ZWwqKQorICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgJEVDSE8gIiR3aW4zMl9saWJpZF90eXBlIgorfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiBBUkcKKyMKKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CitmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gJERMTFRPT0wgLS1pZGVudGlmeS1zdHJpY3QgLS1pZGVudGlmeSAiJDEiYAorfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlIFNFQ1RJT05fTkFNRSBMSUJOQU1FcworIworIyBUaGUgaXMgdGhlIGNvcmUgb2YgYSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiBhCisjIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlCisjIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeSBMSUJOQU1FLgorIworIyBTRUNUSU9OX05BTUUgaXMgZWl0aGVyIC5pZGF0YSQ2IG9yIC5pZGF0YSQ3LCBkZXBlbmRpbmcKKyMgb24gdGhlIHBsYXRmb3JtIGFuZCBjb21waWxlciB0aGF0IGNyZWF0ZWQgdGhlIGltcGxpYi4KKyMKKyMgRWNob3MgdGhlIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlCisjIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeS4KK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICgpCit7CisgICRvcHRfZGVidWcKKyAgbWF0Y2hfbGl0ZXJhbD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKyAgJE9CSkRVTVAgLXMgLS1zZWN0aW9uICIkMSIgIiQyIiAyPi9kZXYvbnVsbCB8CisgICAgJFNFRCAnL15Db250ZW50cyBvZiBzZWN0aW9uICciJG1hdGNoX2xpdGVyYWwiJzoveworICAgICAgIyBQbGFjZSBtYXJrZXIgYXQgYmVnaW5uaW5nIG9mIGFyY2hpdmUgbWVtYmVyIGRsbG5hbWUgc2VjdGlvbgorICAgICAgcy8uKi89PT09TUFSSz09PT0vCisgICAgICBwCisgICAgICBkCisgICAgfQorICAgICMgVGhlc2UgbGluZXMgY2FuIHNvbWV0aW1lcyBiZSBsb25nZXIgdGhhbiA0MyBjaGFyYWN0ZXJzLCBidXQKKyAgICAjIGFyZSBhbHdheXMgdW5pbnRlcmVzdGluZworICAgIC86WwkgXSpmaWxlIGZvcm1hdCBwZVtpXVx7LDFcfS0vZAorICAgIC9eSW4gYXJjaGl2ZSBbXjpdKjovZAorICAgICMgRW5zdXJlIG1hcmtlciBpcyBwcmludGVkCisgICAgL149PT09TUFSSz09PT0vcAorICAgICMgUmVtb3ZlIGFsbCBsaW5lcyB3aXRoIGxlc3MgdGhhbiA0MyBjaGFyYWN0ZXJzCisgICAgL14uXHs0M1x9LyFkCisgICAgIyBGcm9tIHJlbWFpbmluZyBsaW5lcywgcmVtb3ZlIGZpcnN0IDQzIGNoYXJhY3RlcnMKKyAgICBzL14uXHs0M1x9Ly8nIHwKKyAgICAkU0VEIC1uICcKKyAgICAgICMgSm9pbiBtYXJrZXIgYW5kIGFsbCBsaW5lcyB1bnRpbCBuZXh0IG1hcmtlciBpbnRvIGEgc2luZ2xlIGxpbmUKKyAgICAgIC9ePT09PU1BUks9PT09LyBiIHBhcmEKKyAgICAgIEgKKyAgICAgICQgYiBwYXJhCisgICAgICBiCisgICAgICA6cGFyYQorICAgICAgeAorICAgICAgcy9cbi8vZworICAgICAgIyBSZW1vdmUgdGhlIG1hcmtlcgorICAgICAgcy9ePT09PU1BUks9PT09Ly8KKyAgICAgICMgUmVtb3ZlIHRyYWlsaW5nIGRvdHMgYW5kIHdoaXRlc3BhY2UKKyAgICAgIHMvW1wuIFx0XSokLy8KKyAgICAgICMgUHJpbnQKKyAgICAgIC8uL3AnIHwKKyAgICAjIHdlIG5vdyBoYXZlIGEgbGlzdCwgb25lIGVudHJ5IHBlciBsaW5lLCBvZiB0aGUgc3RyaW5naWZpZWQKKyAgICAjIGNvbnRlbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIG9mIGFsbCBtZW1iZXJzIG9mIHRoZQorICAgICMgYXJjaGl2ZSB3aGljaCBwb3NzZXNzIHRoYXQgc2VjdGlvbi4gSGV1cmlzdGljOiBlbGltaW5hdGUKKyAgICAjIGFsbCB0aG9zZSB3aGljaCBoYXZlIGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0aGF0IGlzCisgICAgIyBhICcuJyAodGhhdCBpcywgb2JqZHVtcCdzIHJlcHJlc2VudGF0aW9uIG9mIGFuIHVucHJpbnRhYmxlCisgICAgIyBjaGFyYWN0ZXIuKSBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgYXJjaGl2ZXMgd2l0aCBsZXNzIHRoYW4KKyAgICAjIDB4MzAyZiBleHBvcnRzIC0tIGJ1dCB3aWxsIGZhaWwgZm9yIERMTHMgd2hvc2UgbmFtZSBhY3R1YWxseQorICAgICMgYmVnaW5zIHdpdGggYSBsaXRlcmFsICcuJyBvciBhIHNpbmdsZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkKKyAgICAjIGEgJy4nLgorICAgICMKKyAgICAjIE9mIHRob3NlIHRoYXQgcmVtYWluLCBwcmludCB0aGUgZmlyc3Qgb25lLgorICAgICRTRUQgLWUgJy9eXC4vZDsvXi5cLi9kO3EnCit9CisKKyMgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCBBUkcKKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorIyBBUkcgaXMgYSBHTlUvYmludXRpbHMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KK2Z1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEVHUkVQICcgKF9oZWFkX1tBLVphLXowLTlfXStfW2FkXWwqfFtBLVphLXowLTlfXStfW2FkXWwqX2luYW1lKSQnYAorICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wIgorfQorCisjIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCBBUkcKKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorIyBBUkcgaXMgYW4gTVMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KK2Z1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRHUkVQICdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUidgCisgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcCIKK30KKworIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgQVJHCisjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCisjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorIyBpbXBvcnQgbGlicmFyeSBBUkcuCisjCisjIFRoaXMgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaXMgZm9yIHVzZSB3aGVuICRETExUT09MCisjIGRvZXMgbm90IHN1cHBvcnQgdGhlIC0taWRlbnRpZnktc3RyaWN0IG9wdGlvbi4KKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CitmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSIgOyB0aGVuCisgICAgIyBiaW51dGlscyBpbXBvcnQgbGlicmFyeQorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDcnICIkMSJgCisgIGVsaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSIgOyB0aGVuCisgICAgIyBtcy1nZW5lcmF0ZWQgaW1wb3J0IGxpYnJhcnkKKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ2JyAiJDEiYAorICBlbHNlCisgICAgIyB1bmtub3duCisgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9IiIKKyAgZmkKK30KKworCisjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKK2Z1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGZfZXhfYW5fYXJfZGlyPSIkMSI7IHNoaWZ0CisgICAgZl9leF9hbl9hcl9vbGRsaWI9IiQxIgorICAgIGlmIHRlc3QgIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iID0geWVzOyB0aGVuCisgICAgICBsb2NrZmlsZT0kZl9leF9hbl9hcl9vbGRsaWIubG9jaworICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGZpCisgICAgZnVuY19zaG93X2V2YWwgIihjZCBcJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4IFwiXCRmX2V4X2FuX2FyX29sZGxpYlwiKSIgXAorCQkgICAnc3RhdD0kPzsgcm0gLWYgIiRsb2NrZmlsZSI7IGV4aXQgJHN0YXQnCisgICAgaWYgdGVzdCAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCBybSAtZiAiJGxvY2tmaWxlIgorICAgIGZpCisgICAgaWYgKCRBUiB0ICIkZl9leF9hbl9hcl9vbGRsaWIiIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgOgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9iamVjdCBuYW1lIGNvbmZsaWN0cyBpbiBhcmNoaXZlOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIgorICAgIGZpCit9CisKKworIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KK2Z1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9nZW50b3A9IiQxIjsgc2hpZnQKKyAgICBteV9vbGRsaWJzPSR7MSsiJEAifQorICAgIG15X29sZG9ianM9IiIKKyAgICBteV94bGliPSIiCisgICAgbXlfeGFicz0iIgorICAgIG15X3hkaXI9IiIKKworICAgIGZvciBteV94bGliIGluICRteV9vbGRsaWJzOyBkbworICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgorICAgICAgY2FzZSAkbXlfeGxpYiBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgbXlfeGFicz0iJG15X3hsaWIiIDs7CisJKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7CisgICAgICBlc2FjCisgICAgICBmdW5jX2Jhc2VuYW1lICIkbXlfeGxpYiIKKyAgICAgIG15X3hsaWI9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIG15X3hsaWJfdT0kbXlfeGxpYgorICAgICAgd2hpbGUgOjsgZG8KKyAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgorCSoiICRteV94bGliX3UgIiopCisJICBmdW5jX2FyaXRoICRleHRyYWN0ZWRfc2VyaWFsICsgMQorCSAgZXh0cmFjdGVkX3NlcmlhbD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIG15X3hsaWJfdT1sdCRleHRyYWN0ZWRfc2VyaWFsLSRteV94bGliIDs7CisJKikgYnJlYWsgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKKyAgICAgIG15X3hkaXI9IiRteV9nZW50b3AvJG15X3hsaWJfdSIKKworICAgICAgZnVuY19ta2Rpcl9wICIkbXlfeGRpciIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi1kYXJ3aW4qKQorCWZ1bmNfdmVyYm9zZSAiRXh0cmFjdGluZyAkbXlfeGFicyIKKwkjIERvIG5vdCBib3RoZXIgZG9pbmcgYW55dGhpbmcgaWYganVzdCBhIGRyeSBydW4KKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgZGFyd2luX29yaWdfZGlyPWBwd2RgCisJICBjZCAkbXlfeGRpciB8fCBleGl0ICQ/CisJICBkYXJ3aW5fYXJjaGl2ZT0kbXlfeGFicworCSAgZGFyd2luX2N1cmRpcj1gcHdkYAorCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT1gYmFzZW5hbWUgIiRkYXJ3aW5fYXJjaGl2ZSJgCisJICBkYXJ3aW5fYXJjaGVzPWAkTElQTyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGwgfHwgdHJ1ZWAKKwkgIGlmIHRlc3QgLW4gIiRkYXJ3aW5fYXJjaGVzIjsgdGhlbgorCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCisJICAgIGRhcndpbl9hcmNoPQorCSAgICBmdW5jX3ZlcmJvc2UgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgorCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KKwkgICAgICBmdW5jX21rZGlyX3AgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisJICAgICAgJExJUE8gLXRoaW4gJGRhcndpbl9hcmNoIC1vdXRwdXQgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIgIiR7ZGFyd2luX2FyY2hpdmV9IgorCSAgICAgIGNkICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgorCSAgICAgICRSTSAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKKyAgICAgICAgICAgICMjIE9rYXkgbm93IHdlJ3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQorCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkU0VEIC1lICIkYmFzZW5hbWUiIHwgc29ydCAtdWAKKwkgICAgZGFyd2luX2ZpbGU9CisJICAgIGRhcndpbl9maWxlcz0KKwkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCisJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorCSAgICAgICRMSVBPIC1jcmVhdGUgLW91dHB1dCAiJGRhcndpbl9maWxlIiAkZGFyd2luX2ZpbGVzCisJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0CisJICAgICRSTSAtcmYgdW5mYXQtJCQKKwkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCisJICBlbHNlCisJICAgIGNkICRkYXJ3aW5fb3JpZ19kaXIKKwkgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJICBmaSAjICRkYXJ3aW5fYXJjaGVzCisJfSAjICEkb3B0X2RyeV9ydW4KKwk7OworICAgICAgKikKKyAgICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorICAgIGRvbmUKKworICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9IiRteV9vbGRvYmpzIgorfQorCisKKyMgZnVuY19lbWl0X3dyYXBwZXIgW2FyZz1ub10KKyMKKyMgRW1pdCBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBEb24ndCBkaXJlY3RseSBvcGVuIGEgZmlsZSBiZWNhdXNlIHdlIG1heSB3YW50IHRvCisjIGluY29ycG9yYXRlIHRoZSBzY3JpcHQgY29udGVudHMgd2l0aGluIGEgY3lnd2luL21pbmd3CisjIHdyYXBwZXIgZXhlY3V0YWJsZS4gIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4KKyMgZnVuY19tb2RlX2xpbmsgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlcworIyBzZXQgdGhlcmVpbi4KKyMKKyMgQVJHIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUgorIyB2YXJpYWJsZSB3aWxsIHRha2UuICBJZiAneWVzJywgdGhlbiB0aGUgZW1pdHRlZCBzY3JpcHQKKyMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGlzIHN0b3JlZCBpcworIyB0aGUgJG9iamRpciBkaXJlY3RvcnkuICBUaGlzIGlzIGEgY3lnd2luL21pbmd3LXNwZWNpZmljCisjIGJlaGF2aW9yLgorZnVuY19lbWl0X3dyYXBwZXIgKCkKK3sKKwlmdW5jX2VtaXRfd3JhcHBlcl9hcmcxPSR7MS1ub30KKworCSRFQ0hPICJcCisjISAkU0hFTEwKKworIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisjIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKyMKKyMgVGhpcyB3cmFwcGVyIHNjcmlwdCBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisjIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworZmkKK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIKKworIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgoraWYgdGVzdCBcIlwkbGlidG9vbF9pbnN0YWxsX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuCisgICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICBnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uPSckbWFjcm9fdmVyc2lvbicKKyAgbm90aW5zdF9kZXBsaWJzPSckbm90aW5zdF9kZXBsaWJzJworZWxzZQorICAjIFdoZW4gd2UgYXJlIHNvdXJjZWQgaW4gZXhlY3V0ZSBtb2RlLCBcJGZpbGUgYW5kIFwkRUNITyBhcmUgYWxyZWFkeSBzZXQuCisgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICBmaWxlPVwiXCQwXCIiCisKKyAgICBxRUNITz1gJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICRFQ0hPICJcCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCQxCitfTFRFQ0hPX0VPRicKK30KKyAgICBFQ0hPPVwiJHFFQ0hPXCIKKyAgZmkKKworIyBWZXJ5IGJhc2ljIG9wdGlvbiBwYXJzaW5nLiBUaGVzZSBvcHRpb25zIGFyZSAoYSkgc3BlY2lmaWMgdG8KKyMgdGhlIGxpYnRvb2wgd3JhcHBlciwgKGIpIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUgd3JhcHBlcgorIyAvc2NyaXB0LyBhbmQgdGhlIHdyYXBwZXIgL2V4ZWN1dGFibGUvIHdoaWNoIGlzIHVzZWQgb25seSBvbgorIyB3aW5kb3dzIHBsYXRmb3JtcywgYW5kIChjKSBhbGwgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICItLWx0LSIKKyMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgd2hpY2ggbWF0Y2gKKyMgdGhpcyBwYXR0ZXJuKS4KKyMKKyMgVGhlcmUgYXJlIG9ubHkgdHdvIHN1cHBvcnRlZCBvcHRpb25zOiAtLWx0LWRlYnVnIGFuZAorIyAtLWx0LWR1bXAtc2NyaXB0LiBUaGVyZSBpcywgZGVsaWJlcmF0ZWx5LCBubyAtLWx0LWhlbHAuCisjCisjIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGlzIHBhcnNpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZQorIyBzY3JpcHQncyAkMCB2YWx1ZSwgZm9sbG93ZWQgYnkgIiRAIi4KK2x0X29wdGlvbl9kZWJ1Zz0KK2Z1bmNfcGFyc2VfbHRfb3B0aW9ucyAoKQoreworICBsdF9zY3JpcHRfYXJnMD1cJDAKKyAgc2hpZnQKKyAgZm9yIGx0X29wdAorICBkbworICAgIGNhc2UgXCJcJGx0X29wdFwiIGluCisgICAgLS1sdC1kZWJ1ZykgbHRfb3B0aW9uX2RlYnVnPTEgOzsKKyAgICAtLWx0LWR1bXAtc2NyaXB0KQorICAgICAgICBsdF9kdW1wX0Q9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyUvW14vXSokJSUnXGAKKyAgICAgICAgdGVzdCBcIlhcJGx0X2R1bXBfRFwiID0gXCJYXCRsdF9zY3JpcHRfYXJnMFwiICYmIGx0X2R1bXBfRD0uCisgICAgICAgIGx0X2R1bXBfRj1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJV4uKi8lJSdcYAorICAgICAgICBjYXQgXCJcJGx0X2R1bXBfRC9cJGx0X2R1bXBfRlwiCisgICAgICAgIGV4aXQgMAorICAgICAgOzsKKyAgICAtLWx0LSopCisgICAgICAgIFwkRUNITyBcIlVucmVjb2duaXplZCAtLWx0LSBvcHRpb246ICdcJGx0X29wdCdcIiAxPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAjIFByaW50IHRoZSBkZWJ1ZyBiYW5uZXIgaW1tZWRpYXRlbHk6CisgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgZWNobyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IGxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cIiAxPiYyCisgIGZpCit9CisKKyMgVXNlZCB3aGVuIC0tbHQtZGVidWcuIFByaW50cyBpdHMgYXJndW1lbnRzIHRvIHN0ZG91dAorIyAocmVkaXJlY3Rpb24gaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIpCitmdW5jX2x0X2R1bXBfYXJncyAoKQoreworICBsdF9kdW1wX2FyZ3NfTj0xOworICBmb3IgbHRfYXJnCisgIGRvCisgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndltcJGx0X2R1bXBfYXJnc19OXTogXCRsdF9hcmdcIgorICAgIGx0X2R1bXBfYXJnc19OPVxgZXhwciBcJGx0X2R1bXBfYXJnc19OICsgMVxgCisgIGRvbmUKK30KKworIyBDb3JlIGZ1bmN0aW9uIGZvciBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorZnVuY19leGVjX3Byb2dyYW1fY29yZSAoKQoreworIgorICBjYXNlICRob3N0IGluCisgICMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworICAqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQorICAgICRFQ0hPICJcCisgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKyAgICAgIGZpCisgICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKyAgICA7OworCisgICopCisgICAgJEVDSE8gIlwKKyAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCisgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorICAgICAgZmkKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorICAgIDs7CisgIGVzYWMKKyAgJEVDSE8gIlwKKyAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiIDE+JjIKKyAgICAgIGV4aXQgMQorfQorCisjIEEgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KKyMgU3RyaXBzIG9wdGlvbnMgaW4gdGhlIC0tbHQtKiBuYW1lc3BhY2UgZnJvbSBcJEAgYW5kCisjIGxhdW5jaGVzIHRhcmdldCBhcHBsaWNhdGlvbiB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgorZnVuY19leGVjX3Byb2dyYW0gKCkKK3sKKyAgY2FzZSBcIiBcJCogXCIgaW4KKyAgKlxcIC0tbHQtKikKKyAgICBmb3IgbHRfd3JfYXJnCisgICAgZG8KKyAgICAgIGNhc2UgXCRsdF93cl9hcmcgaW4KKyAgICAgIC0tbHQtKikgOzsKKyAgICAgICopIHNldCB4IFwiXCRAXCIgXCJcJGx0X3dyX2FyZ1wiOyBzaGlmdDs7CisgICAgICBlc2FjCisgICAgICBzaGlmdAorICAgIGRvbmUgOzsKKyAgZXNhYworICBmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlIFwkezErXCJcJEBcIn0KK30KKworICAjIFBhcnNlIG9wdGlvbnMKKyAgZnVuY19wYXJzZV9sdF9vcHRpb25zIFwiXCQwXCIgXCR7MStcIlwkQFwifQorCisgICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCisgIHRoaXNkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qJCUlJ1xgCisgIHRlc3QgXCJ4XCR0aGlzZGlyXCIgPSBcInhcJGZpbGVcIiAmJiB0aGlzZGlyPS4KKworICAjIEZvbGxvdyBzeW1ib2xpYyBsaW5rcyB1bnRpbCB3ZSBnZXQgdG8gdGhlIHJlYWwgdGhpc2Rpci4KKyAgZmlsZT1cYGxzIC1sZCBcIlwkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAorICB3aGlsZSB0ZXN0IC1uIFwiXCRmaWxlXCI7IGRvCisgICAgZGVzdGRpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSpcJCUlJ1xgCisKKyAgICAjIElmIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gY2hhbmdlIHRoaXNkaXIuCisgICAgaWYgdGVzdCBcInhcJGRlc3RkaXJcIiAhPSBcInhcJGZpbGVcIjsgdGhlbgorICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCisgICAgICBbXFxcXC9dKiB8IFtBLVphLXpdOltcXFxcL10qKSB0aGlzZGlyPVwiXCRkZXN0ZGlyXCIgOzsKKyAgICAgICopIHRoaXNkaXI9XCJcJHRoaXNkaXIvXCRkZXN0ZGlyXCIgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorCisgICAgZmlsZT1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyVeLiovJSUnXGAKKyAgICBmaWxlPVxgbHMgLWxkIFwiXCR0aGlzZGlyL1wkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAorICBkb25lCisKKyAgIyBVc3VhbGx5ICdubycsIGV4Y2VwdCBvbiBjeWd3aW4vbWluZ3cgd2hlbiBlbWJlZGRlZCBpbnRvCisgICMgdGhlIGN3cmFwcGVyLgorICBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUj0kZnVuY19lbWl0X3dyYXBwZXJfYXJnMQorICBpZiB0ZXN0IFwiXCRXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUlwiID0gXCJ5ZXNcIjsgdGhlbgorICAgICMgc3BlY2lhbCBjYXNlIGZvciAnLicKKyAgICBpZiB0ZXN0IFwiXCR0aGlzZGlyXCIgPSBcIi5cIjsgdGhlbgorICAgICAgdGhpc2Rpcj1cYHB3ZFxgCisgICAgZmkKKyAgICAjIHJlbW92ZSAubGlicyBmcm9tIHRoaXNkaXIKKyAgICBjYXNlIFwiXCR0aGlzZGlyXCIgaW4KKyAgICAqW1xcXFwvXSRvYmpkaXIgKSB0aGlzZGlyPVxgXCRFQ0hPIFwiXCR0aGlzZGlyXCIgfCAkU0VEICdzJVtcXFxcL11bXlxcXFwvXSokJSUnXGAgOzsKKyAgICAkb2JqZGlyICkgICB0aGlzZGlyPS4gOzsKKyAgICBlc2FjCisgIGZpCisKKyAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KKyAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAorICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgorIgorCisJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICRFQ0hPICJcCisgIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKworICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwKKyAgICAgeyBmaWxlPVxgbHMgLTFkdCBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcIlwkcHJvZ2Rpci8uLi9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8ICR7U0VEfSAxcVxgOyBcXAorICAgICAgIHRlc3QgXCJYXCRmaWxlXCIgIT0gXCJYXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9OyB0aGVuCisKKyAgICBmaWxlPVwiXCRcJC1cJHByb2dyYW1cIgorCisgICAgaWYgdGVzdCAhIC1kIFwiXCRwcm9nZGlyXCI7IHRoZW4KKyAgICAgICRNS0RJUiBcIlwkcHJvZ2RpclwiCisgICAgZWxzZQorICAgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgICAgZmkiCisKKwkgICRFQ0hPICJcCisKKyAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQorICAgIGlmIHRlc3QgLW4gXCJcJHJlbGlua19jb21tYW5kXCI7IHRoZW4KKyAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgorICAgICAgZWxzZQorCSRFQ0hPIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKKwkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgZmkKKworICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8fAorICAgIHsgJFJNIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOworICAgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9CisgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgIGZpIgorCWVsc2UKKwkgICRFQ0hPICJcCisgIHByb2dyYW09JyRvdXRwdXRuYW1lJworICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorIgorCWZpCisKKwkkRUNITyAiXAorCisgIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCisKKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorCSMKKwkjIEZpeCB0aGUgRExMIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4gIERvIHRoaXMgYmVmb3JlIHByZXBlbmRpbmcKKwkjIHRvIHNobGlicGF0aCwgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoIGFyZSBQQVRIIGFuZCB1bmluc3RhbGxlZAorCSMgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4KKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorIgorCWZpCisKKwkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKwlpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIG91ciBvd24gbGlicmFyeSBwYXRoIHRvICRzaGxpYnBhdGhfdmFyCisgICAgJHNobGlicGF0aF92YXI9XCIkdGVtcF9ycGF0aFwkJHNobGlicGF0aF92YXJcIgorCisgICAgIyBTb21lIHN5c3RlbXMgY2Fubm90IGNvcGUgd2l0aCBjb2xvbi10ZXJtaW5hdGVkICRzaGxpYnBhdGhfdmFyCisgICAgIyBUaGUgc2Vjb25kIGNvbG9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gQmVPUyBSNCBzZWQKKyAgICAkc2hsaWJwYXRoX3Zhcj1cYFwkRUNITyBcIlwkJHNobGlicGF0aF92YXJcIiB8ICRTRUQgJ3MvOjoqXCQvLydcYAorCisgICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCisiCisJZmkKKworCSRFQ0hPICJcCisgICAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KKyAgICAgIGZ1bmNfZXhlY19wcm9ncmFtIFwkezErXCJcJEBcIn0KKyAgICBmaQorICBlbHNlCisgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorICAgIFwkRUNITyBcIlwkMDogZXJyb3I6IFxcXGBcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKKyAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKKyAgICBcJEVDSE8gXCJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgMT4mMgorICAgIGV4aXQgMQorICBmaQorZmlcCisiCit9CisKKworIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisjIGVtaXQgdGhlIHNvdXJjZSBjb2RlIGZvciBhIHdyYXBwZXIgZXhlY3V0YWJsZSBvbiBzdGRvdXQKKyMgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBmdW5jX21vZGVfbGluayBiZWNhdXNlCisjIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGUgc2V0IHRoZXJlaW4uCitmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjICgpCit7CisJY2F0IDw8RU9GCisKKy8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKworICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisgICBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisKKyAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKyovCitFT0YKKwkgICAgY2F0IDw8IkVPRiIKKyNpZmRlZiBfTVNDX1ZFUgorIyBkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgX01TQ19WRVIKKyMgaW5jbHVkZSA8ZGlyZWN0Lmg+CisjIGluY2x1ZGUgPHByb2Nlc3MuaD4KKyMgaW5jbHVkZSA8aW8uaD4KKyNlbHNlCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgaWZkZWYgX19DWUdXSU5fXworIyAgaW5jbHVkZSA8aW8uaD4KKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKy8qIGRlY2xhcmF0aW9ucyBvZiBub24tQU5TSSBmdW5jdGlvbnMgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KK2ludCBfcHV0ZW52IChjb25zdCBjaGFyICopOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KK2NoYXIgKnJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7CitpbnQgcHV0ZW52IChjaGFyICopOworaW50IHNldGVudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisjIGVuZGlmCisvKiAjZWxpZiBkZWZpbmVkIChvdGhlciBwbGF0Zm9ybXMpIC4uLiAqLworI2VuZGlmCisKKy8qIHBvcnRhYmlsaXR5IGRlZmluZXMsIGV4Y2x1ZGluZyBwYXRoIGhhbmRsaW5nIG1hY3JvcyAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisjIGRlZmluZSBzdGF0ICAgIF9zdGF0CisjIGRlZmluZSBjaG1vZCAgIF9jaG1vZAorIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCisjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKKyMgZGVmaW5lIFNfSVhVU1IgX1NfSUVYRUMKKyMgaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECisjICBkZWZpbmUgX0lOVFBUUl9UX0RFRklORUQKKyMgIGRlZmluZSBpbnRwdHJfdCBpbnQKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19NSU5HVzMyX18pCisjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisjIGRlZmluZSBzdGF0ICAgIF9zdGF0CisjIGRlZmluZSBjaG1vZCAgIF9jaG1vZAorIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCisjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgZGVmaW5lIEhBVkVfU0VURU5WCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisvKiAjZWxpZiBkZWZpbmVkIChvdGhlciBwbGF0Zm9ybXMpIC4uLiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBBVEhfTUFYKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAorI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCisjZWxzZQorIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0CisjZW5kaWYKKworI2lmbmRlZiBTX0lYT1RICisjIGRlZmluZSBTX0lYT1RIIDAKKyNlbmRpZgorI2lmbmRlZiBTX0lYR1JQCisjIGRlZmluZSBTX0lYR1JQIDAKKyNlbmRpZgorCisvKiBwYXRoIGhhbmRsaW5nIHBvcnRhYmlsaXR5IG1hY3JvcyAqLworI2lmbmRlZiBESVJfU0VQQVJBVE9SCisjIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJworIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKSB8fCBkZWZpbmVkIChfX0RKR1BQX18pIHx8IFwKKyAgZGVmaW5lZCAoX19PUzJfXykKKyMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworIyBlbmRpZgorIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCisjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKKwkoKChjaCkgPT0gRElSX1NFUEFSQVRPUikgfHwgKChjaCkgPT0gRElSX1NFUEFSQVRPUl8yKSkKKyNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCisjZWxzZSAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1JfMikKKyNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgRk9QRU5fV0IKKyMgZGVmaW5lIEZPUEVOX1dCICJ3IgorI2VuZGlmCisjaWZuZGVmIF9PX0JJTkFSWQorIyBkZWZpbmUgX09fQklOQVJZIDAKKyNlbmRpZgorCisjZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCisjZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKKyAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKK30gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVkKExUX0RFQlVHV1JBUFBFUikKK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAxOworI2Vsc2UKK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAwOworI2VuZGlmCisKK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJsaWJ0b29sLXdyYXBwZXIiOyAvKiBpbiBjYXNlIHhzdHJkdXAgZmFpbHMgKi8KKwordm9pZCAqeG1hbGxvYyAoc2l6ZV90IG51bSk7CitjaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOworY29uc3QgY2hhciAqYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKTsKK2NoYXIgKmZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcik7CitjaGFyICpjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpOworaW50IG1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CitpbnQgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CitjaGFyICpzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKK3ZvaWQgbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKK3N0YXRpYyBjb25zdCBjaGFyICpub25udWxsIChjb25zdCBjaGFyICpzKTsKK3N0YXRpYyBjb25zdCBjaGFyICpub25lbXB0eSAoY29uc3QgY2hhciAqcyk7Cit2b2lkIGx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworY2hhciAqbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKTsKK3ZvaWQgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7Cit2b2lkIGx0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworY2hhciAqKnByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KTsKK3ZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUgKmYpOworRU9GCisKKwkgICAgY2F0IDw8RU9GCit2b2xhdGlsZSBjb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOworRU9GCisKKwkgICAgaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJHRlbXBfcnBhdGgiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRkbGxzZWFyY2hwYXRoOiIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICIiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICJsdC0kb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gIiRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZmkKKworCisJICAgIGNhdCA8PCJFT0YiCisKKyNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCisKK3N0YXRpYyBjb25zdCBjaGFyICpsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYOworc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKK3N0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z19vcHQgICAgICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkZWJ1ZyI7CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgY2hhciAqKm5ld2FyZ3o7CisgIGludCAgbmV3YXJnYzsKKyAgY2hhciAqdG1wX3BhdGhzcGVjOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfcGF0aDsKKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX25hbWU7CisgIGNoYXIgKnRhcmdldF9uYW1lOworICBjaGFyICpsdF9hcmd2X3plcm87CisgIGludHB0cl90IHJ2YWwgPSAxMjc7CisKKyAgaW50IGk7CisKKyAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7CisgIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKworICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdAorICAgKiBhbHNvLCBjb3B5IGFsbCBub24gY3dyYXBwZXIgb3B0aW9ucyB0byBuZXdhcmd6LCBleGNlcHQKKyAgICogYXJnelswXSwgd2hpY2ggaXMgaGFuZGxlZCBkaWZmZXJlbnRseQorICAgKi8KKyAgbmV3YXJnYz0wOworICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSA9PSAwKQorCXsKK0VPRgorCSAgICBjYXNlICIkaG9zdCIgaW4KKwkgICAgICAqbWluZ3cqIHwgKmN5Z3dpbiogKQorCQkjIG1ha2Ugc3Rkb3V0IHVzZSAidW5peCIgbGluZSBlbmRpbmdzCisJCWVjaG8gIiAgICAgICAgICBzZXRtb2RlKDEsX09fQklOQVJZKTsiCisJCTs7CisJICAgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisJICBsdF9kdW1wX3NjcmlwdCAoc3Rkb3V0KTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGRlYnVnX29wdCkgPT0gMCkKKwl7CisgICAgICAgICAgbHRfZGVidWcgPSAxOworICAgICAgICAgIGNvbnRpbnVlOworCX0KKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKKyAgICAgICAgICAgICBoYXZlIGFscmVhZHkgZGVhbHQgd2l0aCwgYWJvdmUgKGlubHVkaW5nIGR1bXAtc2NyaXB0KSwgdGhlbgorICAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvci4gT3RoZXJ3aXNlLCB0YXJnZXRzIG1pZ2h0IGJlZ2luIHRvIGJlbGlldmUKKyAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorICAgICAgICAgICAgIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRpbWUgYW55IHVzZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHdlJ2xsCisgICAgICAgICAgICAgbmVlZCB0byBtYWtlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYIGEgY29uZmlndXJlLXRpbWUgb3B0aW9uCisgICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCisgICAgICAgICAgICovCisgICAgICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICJ1bnJlY29nbml6ZWQgJXMgb3B0aW9uOiAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOworICAgICAgICB9CisgICAgICAvKiBvdGhlcndpc2UgLi4uICovCisgICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKKyAgICB9CisgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CisKK0VPRgorCSAgICBjYXQgPDxFT0YKKyAgLyogVGhlIEdOVSBiYW5uZXIgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWVycm9yIGRlYnVnIG1lc3NhZ2UgKi8KKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgImxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cbiIpOworRU9GCisJICAgIGNhdCA8PCJFT0YiCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgYXJndlswXTogJXNcbiIsIGFyZ3ZbMF0pOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIHByb2dyYW1fbmFtZTogJXNcbiIsIHByb2dyYW1fbmFtZSk7CisKKyAgdG1wX3BhdGhzcGVjID0gZmluZF9leGVjdXRhYmxlIChhcmd2WzBdKTsKKyAgaWYgKHRtcF9wYXRoc3BlYyA9PSBOVUxMKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJjb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKwkJICB0bXBfcGF0aHNwZWMpOworCisgIGFjdHVhbF9jd3JhcHBlcl9wYXRoID0gY2hhc2Vfc3ltbGlua3MgKHRtcF9wYXRoc3BlYyk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiB3cmFwcGVyIG5hbWUgdHJhbnNmb3JtcyAqLworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgLyogdGFyZ2V0X25hbWUgdHJhbnNmb3JtcyAtLSB1c2UgYWN0dWFsIHRhcmdldCBwcm9ncmFtIG5hbWU7IG1pZ2h0IGhhdmUgbHQtIHByZWZpeCAqLworICB0YXJnZXRfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoVEFSR0VUX1BST0dSQU1fTkFNRSkpOworICBzdHJlbmR6YXAgKHRhcmdldF9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyICh0YXJnZXRfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgdGFyZ2V0X25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAorCQkgIHRhcmdldF9uYW1lKTsKK0VPRgorCisJICAgIGNhdCA8PEVPRgorICBuZXdhcmd6WzBdID0KKyAgICBYTUFMTE9DIChjaGFyLCAoc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkgKworCQkgICAgc3RybGVuICgiJG9iamRpciIpICsgMSArIHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX25hbWUpICsgMSkpOworICBzdHJjcHkgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiJG9iamRpciIpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIvIik7CitFT0YKKworCSAgICBjYXQgPDwiRU9GIgorICAvKiBzdG9wIGhlcmUsIGFuZCBjb3B5IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcyB0d2ljZSAqLworICB0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChuZXdhcmd6WzBdKTsKKworICAvKiBkbyBOT1Qgd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlLCBzbyB1c2UgYWN0dWFsX2N3cmFwcGVyX25hbWUgKi8KKyAgc3RyY2F0IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogRE8gd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlIGlmIGl0IGV4aXN0cywgc28gdXNlIHRhcmdldF9uYW1lICovCisgIGx0X2FyZ3ZfemVybyA9IGx0X2V4dGVuZF9zdHIgKHRtcF9wYXRoc3BlYywgdGFyZ2V0X25hbWUsIDEpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKyAgdG1wX3BhdGhzcGVjID0gTlVMTDsKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJICAgIGNhdCA8PCJFT0YiCisgIHsKKyAgICBjaGFyKiBwOworICAgIHdoaWxlICgocCA9IHN0cmNociAobmV3YXJnelswXSwgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChsdF9hcmd2X3plcm8sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICB9CitFT0YKKwkgICAgOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgbHRfc2V0ZW52ICgiQklOX1NIIiwgInhwZzQiKTsgLyogZm9yIFRydTY0ICovCisgIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KKyAgLyogVXBkYXRlIHRoZSBETEwgc2VhcmNocGF0aC4gIEVYRV9QQVRIX1ZBTFVFICgkZGxsc2VhcmNocGF0aCkgbXVzdAorICAgICBiZSBwcmVwZW5kZWQgYmVmb3JlICh0aGF0IGlzLCBhcHBlYXIgYWZ0ZXIpIExJQl9QQVRIX1ZBTFVFICgkdGVtcF9ycGF0aCkKKyAgICAgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoICpfVkFSTkFNRXMgYXJlIFBBVEggYnV0IHVuaW5zdGFsbGVkCisgICAgIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuICovCisgIGx0X3VwZGF0ZV9leGVfcGF0aCAoRVhFX1BBVEhfVkFSTkFNRSwgRVhFX1BBVEhfVkFMVUUpOworICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGx0X2FyZ3ZfemVybzogJXNcbiIsCisJCSAgbm9ubnVsbCAobHRfYXJndl96ZXJvKSk7CisgIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCisgICAgeworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBuZXdhcmd6WyVkXTogJXNcbiIsCisJCSAgICAgIGksIG5vbm51bGwgKG5ld2FyZ3pbaV0pKTsKKyAgICB9CisKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJCWNhdCA8PCJFT0YiCisgIC8qIGV4ZWN2IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBvbiBtaW5ndyBhcyBleHBlY3RlZCBvbiB1bml4ICovCisgIG5ld2FyZ3ogPSBwcmVwYXJlX3NwYXduIChuZXdhcmd6KTsKKyAgcnZhbCA9IF9zcGF3bnYgKF9QX1dBSVQsIGx0X2FyZ3ZfemVybywgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBuZXdhcmd6KTsKKyAgaWYgKHJ2YWwgPT0gLTEpCisgICAgeworICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAgICIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiAlc1xuIiwKKwkJICAgICAgbHRfYXJndl96ZXJvLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgICAgICByZXR1cm4gMTI3OworICAgIH0KKyAgcmV0dXJuIHJ2YWw7CitFT0YKKwkJOzsKKwkgICAgICAqKQorCQljYXQgPDwiRU9GIgorICBleGVjdiAobHRfYXJndl96ZXJvLCBuZXdhcmd6KTsKKyAgcmV0dXJuIHJ2YWw7IC8qID0xMjcsIGJ1dCBhdm9pZHMgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgKi8KK0VPRgorCQk7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKK30KKwordm9pZCAqCit4bWFsbG9jIChzaXplX3QgbnVtKQoreworICB2b2lkICpwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOworICBpZiAoIXApCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgIm1lbW9yeSBleGhhdXN0ZWQiKTsKKworICByZXR1cm4gcDsKK30KKworY2hhciAqCit4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHJldHVybiBzdHJpbmcgPyBzdHJjcHkgKChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSArIDEpLAorCQkJICBzdHJpbmcpIDogTlVMTDsKK30KKworY29uc3QgY2hhciAqCitiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKmJhc2U7CisKKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIG5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQorICAgIG5hbWUgKz0gMjsKKyNlbmRpZgorCisgIGZvciAoYmFzZSA9IG5hbWU7ICpuYW1lOyBuYW1lKyspCisgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKCpuYW1lKSkKKyAgICAgIGJhc2UgPSBuYW1lICsgMTsKKyAgcmV0dXJuIGJhc2U7Cit9CisKK2ludAorY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihjaGVja19leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKKyAgICAgICYmIChzdC5zdF9tb2RlICYgKFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USCkpKQorICAgIHJldHVybiAxOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBpbnQgcnZhbCA9IDA7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFrZV9leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgIHsKKyAgICAgIHJ2YWwgPSBjaG1vZCAocGF0aCwgc3Quc3RfbW9kZSB8IFNfSVhPVEggfCBTX0lYR1JQIHwgU19JWFVTUik7CisgICAgfQorICByZXR1cm4gcnZhbDsKK30KKworLyogU2VhcmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIHdyYXBwZXIuICBSZXR1cm5zCisgICBuZXdseSBhbGxvY2F0ZWQgZnVsbCBwYXRoIG5hbWUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlCisgICBEb2VzIG5vdCBjaGFzZSBzeW1saW5rcywgZXZlbiBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHRoZW0uCisqLworY2hhciAqCitmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCit7CisgIGludCBoYXNfc2xhc2ggPSAwOworICBjb25zdCBjaGFyICpwOworICBjb25zdCBjaGFyICpwX25leHQ7CisgIC8qIHN0YXRpYyBidWZmZXIgZm9yIGdldGN3ZCAqLworICBjaGFyIHRtcFtMVF9QQVRITUFYICsgMV07CisgIGludCB0bXBfbGVuOworICBjaGFyICpjb25jYXRfbmFtZTsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGZpbmRfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHdyYXBwZXIpKTsKKworICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIEFic29sdXRlIHBhdGg/ICovCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgd3JhcHBlclswXSkgJiYgd3JhcHBlclsxXSA9PSAnOicpCisgICAgeworICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKyAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJcmV0dXJuIGNvbmNhdF9uYW1lOworICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICh3cmFwcGVyWzBdKSkKKwl7CisJICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworCSAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwl9CisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgICAgfQorI2VuZGlmCisKKyAgZm9yIChwID0gd3JhcHBlcjsgKnA7IHArKykKKyAgICBpZiAoKnAgPT0gJy8nKQorICAgICAgeworCWhhc19zbGFzaCA9IDE7CisJYnJlYWs7CisgICAgICB9CisgIGlmICghaGFzX3NsYXNoKQorICAgIHsKKyAgICAgIC8qIG5vIHNsYXNoZXM7IHNlYXJjaCBQQVRIICovCisgICAgICBjb25zdCBjaGFyICpwYXRoID0gZ2V0ZW52ICgiUEFUSCIpOworICAgICAgaWYgKHBhdGggIT0gTlVMTCkKKwl7CisJICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKKwkgICAgeworCSAgICAgIGNvbnN0IGNoYXIgKnE7CisJICAgICAgc2l6ZV90IHBfbGVuOworCSAgICAgIGZvciAocSA9IHA7ICpxOyBxKyspCisJCWlmIChJU19QQVRIX1NFUEFSQVRPUiAoKnEpKQorCQkgIGJyZWFrOworCSAgICAgIHBfbGVuID0gcSAtIHA7CisJICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOworCSAgICAgIGlmIChwX2xlbiA9PSAwKQorCQl7CisJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisJCSAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworCQkgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVtwX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCQlyZXR1cm4gY29uY2F0X25hbWU7CisJICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwkgICAgfQorCX0KKyAgICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCisgICAgfQorICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCisgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICBYRlJFRSAoY29uY2F0X25hbWUpOworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqCitjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCit7CisjaWZuZGVmIFNfSVNMTksKKyAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyNlbHNlCisgIGNoYXIgYnVmW0xUX1BBVEhNQVhdOworICBzdHJ1Y3Qgc3RhdCBzOworICBjaGFyICp0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChwYXRoc3BlYyk7CisgIGNoYXIgKnA7CisgIGludCBoYXNfc3ltbGlua3MgPSAwOworICB3aGlsZSAoc3RybGVuICh0bXBfcGF0aHNwZWMpICYmICFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICAgImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCisJCSAgICAgIHRtcF9wYXRoc3BlYyk7CisgICAgICBpZiAobHN0YXQgKHRtcF9wYXRoc3BlYywgJnMpID09IDApCisJeworCSAgaWYgKFNfSVNMTksgKHMuc3RfbW9kZSkgIT0gMCkKKwkgICAgeworCSAgICAgIGhhc19zeW1saW5rcyA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgLyogc2VhcmNoIGJhY2t3YXJkcyBmb3IgbGFzdCBESVJfU0VQQVJBVE9SICovCisJICBwID0gdG1wX3BhdGhzcGVjICsgc3RybGVuICh0bXBfcGF0aHNwZWMpIC0gMTsKKwkgIHdoaWxlICgocCA+IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICBwLS07CisJICBpZiAoKHAgPT0gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHsKKwkgICAgICAvKiBubyBtb3JlIERJUl9TRVBBUkFUT1JTIGxlZnQgKi8KKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgKnAgPSAnXDAnOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgImVycm9yIGFjY2Vzc2luZyBmaWxlIFwiJXNcIjogJXMiLAorCQkgICAgdG1wX3BhdGhzcGVjLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisJfQorICAgIH0KKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgaWYgKCFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgICB9CisKKyAgdG1wX3BhdGhzcGVjID0gcmVhbHBhdGggKHBhdGhzcGVjLCBidWYpOworICBpZiAodG1wX3BhdGhzcGVjID09IDApCisgICAgeworICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJImNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworICAgIH0KKyAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisjZW5kaWYKK30KKworY2hhciAqCitzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworICBzaXplX3QgbGVuLCBwYXRsZW47CisKKyAgYXNzZXJ0IChzdHIgIT0gTlVMTCk7CisgIGFzc2VydCAocGF0ICE9IE5VTEwpOworCisgIGxlbiA9IHN0cmxlbiAoc3RyKTsKKyAgcGF0bGVuID0gc3RybGVuIChwYXQpOworCisgIGlmIChwYXRsZW4gPD0gbGVuKQorICAgIHsKKyAgICAgIHN0ciArPSBsZW4gLSBwYXRsZW47CisgICAgICBpZiAoc3RyY21wIChzdHIsIHBhdCkgPT0gMCkKKwkqc3RyID0gJ1wwJzsKKyAgICB9CisgIHJldHVybiBzdHI7Cit9CisKK3ZvaWQKK2x0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaWYgKGx0X2RlYnVnKQorICAgIHsKKyAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lKTsKKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworICAgICAgKHZvaWQpIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisgICAgICB2YV9lbmQgKGFyZ3MpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2x0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqZmlsZSwKKwkgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXApCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lLCBtb2RlKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXApOworICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKworICBpZiAoZXhpdF9zdGF0dXMgPj0gMCkKKyAgICBleGl0IChleGl0X3N0YXR1cyk7Cit9CisKK3ZvaWQKK2x0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICB2YV9saXN0IGFwOworICB2YV9zdGFydCAoYXAsIG1lc3NhZ2UpOworICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsIGZpbGUsIGxpbmUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKyAgdmFfZW5kIChhcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK25vbm51bGwgKGNvbnN0IGNoYXIgKnMpCit7CisgIHJldHVybiBzID8gcyA6ICIobnVsbCkiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitub25lbXB0eSAoY29uc3QgY2hhciAqcykKK3sKKyAgcmV0dXJuIChzICYmICEqcykgPyAiKGVtcHR5KSIgOiBub25udWxsIChzKTsKK30KKwordm9pZAorbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3NldGVudikgc2V0dGluZyAnJXMnIHRvICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAgeworI2lmZGVmIEhBVkVfU0VURU5WCisgICAgLyogYWx3YXlzIG1ha2UgYSBjb3B5LCBmb3IgY29uc2lzdGVuY3kgd2l0aCAhSEFWRV9TRVRFTlYgKi8KKyAgICBjaGFyICpzdHIgPSB4c3RyZHVwICh2YWx1ZSk7CisgICAgc2V0ZW52IChuYW1lLCBzdHIsIDEpOworI2Vsc2UKKyAgICBpbnQgbGVuID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4gKHZhbHVlKSArIDE7CisgICAgY2hhciAqc3RyID0gWE1BTExPQyAoY2hhciwgbGVuKTsKKyAgICBzcHJpbnRmIChzdHIsICIlcz0lcyIsIG5hbWUsIHZhbHVlKTsKKyAgICBpZiAocHV0ZW52IChzdHIpICE9IEVYSVRfU1VDQ0VTUykKKyAgICAgIHsKKyAgICAgICAgWEZSRUUgKHN0cik7CisgICAgICB9CisjZW5kaWYKKyAgfQorfQorCitjaGFyICoKK2x0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKK3sKKyAgY2hhciAqbmV3X3ZhbHVlOworICBpZiAob3JpZ192YWx1ZSAmJiAqb3JpZ192YWx1ZSkKKyAgICB7CisgICAgICBpbnQgb3JpZ192YWx1ZV9sZW4gPSBzdHJsZW4gKG9yaWdfdmFsdWUpOworICAgICAgaW50IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7CisgICAgICBuZXdfdmFsdWUgPSBYTUFMTE9DIChjaGFyLCBhZGRfbGVuICsgb3JpZ192YWx1ZV9sZW4gKyAxKTsKKyAgICAgIGlmICh0b19lbmQpCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgb3JpZ192YWx1ZSk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBvcmlnX3ZhbHVlX2xlbiwgYWRkKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIGFkZCk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBhZGRfbGVuLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG5ld192YWx1ZSA9IHhzdHJkdXAgKGFkZCk7CisgICAgfQorICByZXR1cm4gbmV3X3ZhbHVlOworfQorCit2b2lkCitsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IGNvcGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGggIycgKi8KKyAgICAgIGludCBsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSk7CisgICAgICB3aGlsZSAoKChsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSkpID4gMCkgJiYgSVNfUEFUSF9TRVBBUkFUT1IgKG5ld192YWx1ZVtsZW4tMV0pKQorICAgICAgICB7CisgICAgICAgICAgbmV3X3ZhbHVlW2xlbi0xXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKwordm9pZAorbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKworRU9GCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJCWNhdCA8PCJFT0YiCisKKy8qIFByZXBhcmVzIGFuIGFyZ3VtZW50IHZlY3RvciBiZWZvcmUgY2FsbGluZyBzcGF3bigpLgorICAgTm90ZSB0aGF0IHNwYXduKCkgZG9lcyBub3QgYnkgaXRzZWxmIGNhbGwgdGhlIGNvbW1hbmQgaW50ZXJwcmV0ZXIKKyAgICAgKGdldGVudiAoIkNPTVNQRUMiKSAhPSBOVUxMID8gZ2V0ZW52ICgiQ09NU1BFQyIpIDoKKyAgICAgICh7IE9TVkVSU0lPTklORk8gdjsgdi5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKE9TVkVSU0lPTklORk8pOworICAgICAgICAgR2V0VmVyc2lvbkV4KCZ2KTsKKyAgICAgICAgIHYuZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVDsKKyAgICAgIH0pID8gImNtZC5leGUiIDogImNvbW1hbmQuY29tIikuCisgICBJbnN0ZWFkIGl0IHNpbXBseSBjb25jYXRlbmF0ZXMgdGhlIGFyZ3VtZW50cywgc2VwYXJhdGVkIGJ5ICcgJywgYW5kIGNhbGxzCisgICBDcmVhdGVQcm9jZXNzKCkuICBXZSBtdXN0IHF1b3RlIHRoZSBhcmd1bWVudHMgc2luY2UgV2luMzIgQ3JlYXRlUHJvY2VzcygpCisgICBpbnRlcnByZXRzIGNoYXJhY3RlcnMgbGlrZSAnICcsICdcdCcsICdcXCcsICciJyAoYnV0IG5vdCAnPCcgYW5kICc+JykgaW4gYQorICAgc3BlY2lhbCB3YXk6CisgICAtIFNwYWNlIGFuZCB0YWIgYXJlIGludGVycHJldGVkIGFzIGRlbGltaXRlcnMuIFRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzCisgICAgIGRlbGltaXRlcnMgaWYgdGhleSBhcmUgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzOiAiLi4uIi4KKyAgIC0gVW5lc2NhcGVkIGRvdWJsZSBxdW90ZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgaW5wdXQuIFRoZWlyIG9ubHkgZWZmZWN0IGlzCisgICAgIHRoYXQgd2l0aGluIGRvdWJsZSBxdW90ZXMsIHNwYWNlIGFuZCB0YWIgYXJlIHRyZWF0ZWQgbGlrZSBub3JtYWwKKyAgICAgY2hhcmFjdGVycy4KKyAgIC0gQmFja3NsYXNoZXMgbm90IGZvbGxvd2VkIGJ5IGRvdWJsZSBxdW90ZXMgYXJlIG5vdCBzcGVjaWFsLgorICAgLSBCdXQgMipuKzEgYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgYmVjb21lCisgICAgIG4gYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgKG4gPj0gMCk6CisgICAgICAgXCIgLT4gIgorICAgICAgIFxcXCIgLT4gXCIKKyAgICAgICBcXFxcXCIgLT4gXFwiCisgKi8KKyNkZWZpbmUgU0hFTExfU1BFQ0lBTF9DSEFSUyAiXCJcXCBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorI2RlZmluZSBTSEVMTF9TUEFDRV9DSEFSUyAiIFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzciCitjaGFyICoqCitwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndikKK3sKKyAgc2l6ZV90IGFyZ2M7CisgIGNoYXIgKipuZXdfYXJndjsKKyAgc2l6ZV90IGk7CisKKyAgLyogQ291bnQgbnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCisgIGZvciAoYXJnYyA9IDA7IGFyZ3ZbYXJnY10gIT0gTlVMTDsgYXJnYysrKQorICAgIDsKKworICAvKiBBbGxvY2F0ZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KKyAgbmV3X2FyZ3YgPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKworICAvKiBQdXQgcXVvdGVkIGFyZ3VtZW50cyBpbnRvIHRoZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBhcmd2W2ldOworCisgICAgICBpZiAoc3RyaW5nWzBdID09ICdcMCcpCisJbmV3X2FyZ3ZbaV0gPSB4c3RyZHVwICgiXCJcIiIpOworICAgICAgZWxzZSBpZiAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEVDSUFMX0NIQVJTKSAhPSBOVUxMKQorCXsKKwkgIGludCBxdW90ZV9hcm91bmQgPSAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEFDRV9DSEFSUykgIT0gTlVMTCk7CisJICBzaXplX3QgbGVuZ3RoOworCSAgdW5zaWduZWQgaW50IGJhY2tzbGFzaGVzOworCSAgY29uc3QgY2hhciAqczsKKwkgIGNoYXIgKnF1b3RlZF9zdHJpbmc7CisJICBjaGFyICpwOworCisJICBsZW5ndGggPSAwOworCSAgYmFja3NsYXNoZXMgPSAwOworCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgbGVuZ3RoKys7CisJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKKwkgICAgeworCSAgICAgIGNoYXIgYyA9ICpzOworCSAgICAgIGlmIChjID09ICciJykKKwkJbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKKwkgICAgICBsZW5ndGgrKzsKKwkgICAgICBpZiAoYyA9PSAnXFwnKQorCQliYWNrc2xhc2hlcysrOworCSAgICAgIGVsc2UKKwkJYmFja3NsYXNoZXMgPSAwOworCSAgICB9CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICBsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOworCisJICBxdW90ZWRfc3RyaW5nID0gWE1BTExPQyAoY2hhciwgbGVuZ3RoICsgMSk7CisKKwkgIHAgPSBxdW90ZWRfc3RyaW5nOworCSAgYmFja3NsYXNoZXMgPSAwOworCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgKnArKyA9ICciJzsKKwkgIGZvciAocyA9IHN0cmluZzsgKnMgIT0gJ1wwJzsgcysrKQorCSAgICB7CisJICAgICAgY2hhciBjID0gKnM7CisJICAgICAgaWYgKGMgPT0gJyInKQorCQl7CisJCSAgdW5zaWduZWQgaW50IGo7CisJCSAgZm9yIChqID0gYmFja3NsYXNoZXMgKyAxOyBqID4gMDsgai0tKQorCQkgICAgKnArKyA9ICdcXCc7CisJCX0KKwkgICAgICAqcCsrID0gYzsKKwkgICAgICBpZiAoYyA9PSAnXFwnKQorCQliYWNrc2xhc2hlcysrOworCSAgICAgIGVsc2UKKwkJYmFja3NsYXNoZXMgPSAwOworCSAgICB9CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgaW50IGo7CisJICAgICAgZm9yIChqID0gYmFja3NsYXNoZXM7IGogPiAwOyBqLS0pCisJCSpwKysgPSAnXFwnOworCSAgICAgICpwKysgPSAnIic7CisJICAgIH0KKwkgICpwID0gJ1wwJzsKKworCSAgbmV3X2FyZ3ZbaV0gPSBxdW90ZWRfc3RyaW5nOworCX0KKyAgICAgIGVsc2UKKwluZXdfYXJndltpXSA9IChjaGFyICopIHN0cmluZzsKKyAgICB9CisgIG5ld19hcmd2W2FyZ2NdID0gTlVMTDsKKworICByZXR1cm4gbmV3X2FyZ3Y7Cit9CitFT0YKKwkJOzsKKwkgICAgZXNhYworCisgICAgICAgICAgICBjYXQgPDwiRU9GIgordm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSogZikKK3sKK0VPRgorCSAgICBmdW5jX2VtaXRfd3JhcHBlciB5ZXMgfAorCSAgICAgICRTRUQgLW4gLWUgJworcy9eXCguXHs3OVx9XClcKC4uKlwpL1wxXAorXDIvCitoCitzL1woW1xcIl1cKS9cXFwxL2cKK3MvJC9cXG4vCitzL1woW15cbl0qXCkuKi8gIGZwdXRzICgiXDEiLCBmKTsvcAorZworRCcKKyAgICAgICAgICAgIGNhdCA8PCJFT0YiCit9CitFT0YKK30KKyMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisKKyMgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgQVJHCisjIFRydWUgaWYgQVJHIGlzIGFuIGltcG9ydCBsaWIsIGFzIGluZGljYXRlZCBieSAkZmlsZV9tYWdpY19jbWQKK2Z1bmNfd2luMzJfaW1wb3J0X2xpYl9wICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGNhc2UgYGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2L251bGwgfCAkU0VEIC1lIDEwcWAgaW4KKyAgICAqaW1wb3J0KikgOiA7OworICAgICopIGZhbHNlIDs7CisgICAgZXNhYworfQorCisjIGZ1bmNfbW9kZV9saW5rIGFyZy4uLgorZnVuY19tb2RlX2xpbmsgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSAkaG9zdCBpbgorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisgICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCisgICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0CisgICAgICAjIHdoaWNoIHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCisgICAgICAjIGZsYWcgZm9yIGV2ZXJ5IGxpYnRvb2wgaW52b2NhdGlvbi4KKyAgICAgICMgYWxsb3dfdW5kZWZpbmVkPW5vCisKKyAgICAgICMgRklYTUU6IFVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHRoZSBhYm92ZSB3aGVuIHRyeWluZworICAgICAgIyB0byBtYWtlIGEgZGxsIHdoaWNoIGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKKyAgICAgICMgZXZlbiBhIHN0YXRpYyBsaWJyYXJ5IGlzIGJ1aWx0LiAgRm9yIG5vdywgd2UgbmVlZCB0byBzcGVjaWZ5CisgICAgICAjIC1uby11bmRlZmluZWQgb24gdGhlIGxpYnRvb2wgbGluayBsaW5lIHdoZW4gd2UgY2FuIGJlIGNlcnRhaW4KKyAgICAgICMgdGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3RhdGljIGxpYnJhcnkuCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgICopCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKyAgICBsaWJ0b29sX2FyZ3M9JG5vbm9wdAorICAgIGJhc2VfY29tcGlsZT0iJG5vbm9wdCAkQCIKKyAgICBjb21waWxlX2NvbW1hbmQ9JG5vbm9wdAorICAgIGZpbmFsaXplX2NvbW1hbmQ9JG5vbm9wdAorCisgICAgY29tcGlsZV9ycGF0aD0KKyAgICBmaW5hbGl6ZV9ycGF0aD0KKyAgICBjb21waWxlX3NobGlicGF0aD0KKyAgICBmaW5hbGl6ZV9zaGxpYnBhdGg9CisgICAgY29udmVuaWVuY2U9CisgICAgb2xkX2NvbnZlbmllbmNlPQorICAgIGRlcGxpYnM9CisgICAgb2xkX2RlcGxpYnM9CisgICAgY29tcGlsZXJfZmxhZ3M9CisgICAgbGlua2VyX2ZsYWdzPQorICAgIGRsbHNlYXJjaHBhdGg9CisgICAgbGliX3NlYXJjaF9wYXRoPWBwd2RgCisgICAgaW5zdF9wcmVmaXhfZGlyPQorICAgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorCisgICAgYXZvaWRfdmVyc2lvbj1ubworICAgIGJpbmRpcj0KKyAgICBkbGZpbGVzPQorICAgIGRscHJlZmlsZXM9CisgICAgZGxzZWxmPW5vCisgICAgZXhwb3J0X2R5bmFtaWM9bm8KKyAgICBleHBvcnRfc3ltYm9scz0KKyAgICBleHBvcnRfc3ltYm9sc19yZWdleD0KKyAgICBnZW5lcmF0ZWQ9CisgICAgbGlib2Jqcz0KKyAgICBsdGxpYnM9CisgICAgbW9kdWxlPW5vCisgICAgbm9faW5zdGFsbD1ubworICAgIG9ianM9CisgICAgbm9uX3BpY19vYmplY3RzPQorICAgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PQorICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubworICAgIHByZWxvYWQ9bm8KKyAgICBwcmV2PQorICAgIHByZXZhcmc9CisgICAgcmVsZWFzZT0KKyAgICBycGF0aD0KKyAgICB4cnBhdGg9CisgICAgcGVybV9ycGF0aD0KKyAgICB0ZW1wX3JwYXRoPQorICAgIHRocmVhZF9zYWZlPW5vCisgICAgdmluZm89CisgICAgdmluZm9fbnVtYmVyPW5vCisgICAgd2Vha19saWJzPQorICAgIHNpbmdsZV9tb2R1bGU9IiR7d2x9LXNpbmdsZV9tb2R1bGUiCisgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQorCisgICAgIyBXZSBuZWVkIHRvIGtub3cgLXN0YXRpYywgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgZmlsZW5hbWVzLgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWJyZWFrCisJOzsKKyAgICAgIC1hbGwtc3RhdGljIHwgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQorCWNhc2UgJGFyZyBpbgorCS1hbGwtc3RhdGljKQorCSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiY29tcGxldGUgc3RhdGljIGxpbmtpbmcgaXMgaW1wb3NzaWJsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24iCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisJICA7OworCS1zdGF0aWMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPWJ1aWx0CisJICA7OworCS1zdGF0aWMtbGlidG9vbC1saWJzKQorCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwkgIDs7CisJZXNhYworCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWJ1aWxkX29sZF9saWJzPXllcworCWJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICAjIFNlZSBpZiBvdXIgc2hhcmVkIGFyY2hpdmVzIGRlcGVuZCBvbiBzdGF0aWMgYXJjaGl2ZXMuCisgICAgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIGJ1aWxkX29sZF9saWJzPXllcworCisgICAgIyBHbyB0aHJvdWdoIHRoZSBhcmd1bWVudHMsIHRyYW5zZm9ybWluZyB0aGVtIG9uIHRoZSB3YXkuCisgICAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbworICAgICAgYXJnPSIkMSIKKyAgICAgIHNoaWZ0CisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgcWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnRvb2xfYXJncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKworICAgICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwljYXNlICRwcmV2IGluCisJb3V0cHV0KQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICA7OworCWVzYWMKKworCWNhc2UgJHByZXYgaW4KKwliaW5kaXIpCisJICBiaW5kaXI9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZGxmaWxlc3xkbHByZWZpbGVzKQorCSAgaWYgdGVzdCAiJHByZWxvYWQiID0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBwcmVsb2FkPXllcworCSAgZmkKKwkgIGNhc2UgJGFyZyBpbgorCSAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KKwkgIGZvcmNlKQorCSAgICBpZiB0ZXN0ICIkZGxzZWxmIiA9IG5vOyB0aGVuCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBzZWxmKQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXMgJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsc2UKKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGFyZyIKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkYXJnIgorCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlleHBzeW1zKQorCSAgZXhwb3J0X3N5bWJvbHM9IiRhcmciCisJICB0ZXN0IC1mICIkYXJnIiBcCisJICAgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgInN5bWJvbCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXhwc3ltc19yZWdleCkKKwkgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWZyYW1ld29yaykKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICAgKi0qLWRhcndpbiopCisJICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgorCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKKwkJKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKwkJICAgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgIGVzYWMKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlpbnN0X3ByZWZpeCkKKwkgIGluc3RfcHJlZml4X2Rpcj0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlvYmplY3RsaXN0KQorCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KKwkgICAgc2F2ZV9hcmc9JGFyZworCSAgICBtb3JlYXJncz0KKwkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAorCSAgICBkbworIwkgICAgICBmdW5jX2FwcGVuZCBtb3JlYXJncyAiICRmaWwiCisJICAgICAgYXJnPSRmaWwKKwkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwkgICAgICBpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCQlwaWNfb2JqZWN0PQorCQlub25fcGljX29iamVjdD0KKworCQkjIFJlYWQgdGhlIC5sbyBmaWxlCisJCWZ1bmNfc291cmNlICIkYXJnIgorCisJCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKwkJICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkJZmkKKworCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQl4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQlpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKworCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgorCQkgICAgICBwcmV2PQorCQkgICAgICBjb250aW51ZQorCQkgICAgZWxzZQorCQkgICAgICAjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorCQkgICAgICBwcmV2PWRscHJlZmlsZXMKKwkJICAgIGZpCisJCSAgZmkKKworCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCQkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgorCQkgICAgcHJldj0KKwkJICBmaQorCisJCSAgIyBBIFBJQyBvYmplY3QuCisJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCQkgIGFyZz0iJHBpY19vYmplY3QiCisJCWZpCisKKwkJIyBOb24tUElDIG9iamVjdC4KKwkJaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJCSAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkJICBmaQorCQllbHNlCisJCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCQkgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkJICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQlmaQorCSAgICAgIGVsc2UKKwkJIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJCWlmICRvcHRfZHJ5X3J1bjsgdGhlbgorCQkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkJICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQkgIGZ1bmNfbG8ybyAiJGFyZyIKKwkJICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgICAgICAgZWxzZQorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJCWZpCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJsaW5rIGlucHV0IGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgIGZpCisJICBhcmc9JHNhdmVfYXJnCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcHJlY2lvdXNfcmVnZXgpCisJICBwcmVjaW91c19maWxlc19yZWdleD0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlyZWxlYXNlKQorCSAgcmVsZWFzZT0iLSRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcnBhdGggfCB4cnBhdGgpCisJICAjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwkgIGNhc2UgJGFyZyBpbgorCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgorCSAgICBjYXNlICIkcnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBycGF0aCAiICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGVsc2UKKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGZpCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJc2hyZXh0KQorCSAgc2hyZXh0X2NtZHM9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJd2VhaykKKwkgIGZ1bmNfYXBwZW5kIHdlYWtfbGlicyAiICRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJeGNjbGlua2VyKQorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGNvbXBpbGVyKQorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXhsaW5rZXIpCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwkqKQorCSAgZXZhbCAiJHByZXY9XCJcJGFyZ1wiIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWVzYWMKKyAgICAgIGZpICMgdGVzdCAtbiAiJHByZXYiCisKKyAgICAgIHByZXZhcmc9IiRhcmciCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWFsbC1zdGF0aWMpCisJaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAjIFNlZSBjb21tZW50IGZvciAtc3RhdGljIGZsYWcgYmVsb3csIGZvciBtb3JlIGRldGFpbHMuCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWFsbG93LXVuZGVmaW5lZCkKKwkjIEZJWE1FOiByZW1vdmUgdGhpcyBmbGFnIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUuCisJZnVuY19mYXRhbF9lcnJvciAiXGAtYWxsb3ctdW5kZWZpbmVkJyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiCisJOzsKKworICAgICAgLWF2b2lkLXZlcnNpb24pCisJYXZvaWRfdmVyc2lvbj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1iaW5kaXIpCisJcHJldj1iaW5kaXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbG9wZW4pCisJcHJldj1kbGZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZGxwcmVvcGVuKQorCXByZXY9ZGxwcmVmaWxlcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWV4cG9ydC1keW5hbWljKQorCWV4cG9ydF9keW5hbWljPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWV4cG9ydC1zeW1ib2xzIHwgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4KQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAibW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKKwlmaQorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWV4cG9ydC1zeW1ib2xzIjsgdGhlbgorCSAgcHJldj1leHBzeW1zCisJZWxzZQorCSAgcHJldj1leHBzeW1zX3JlZ2V4CisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1mcmFtZXdvcmspCisJcHJldj1mcmFtZXdvcmsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1pbnN0LXByZWZpeC1kaXIpCisJcHJldj1pbnN0X3ByZWZpeAorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUaGUgbmF0aXZlIElSSVggbGlua2VyIHVuZGVyc3RhbmRzIC1MQU5HOiosIC1MSVNUOiogYW5kIC1MTk86KgorICAgICAgIyBzbywgaWYgd2Ugc2VlIHRoZXNlIGZsYWdzIGJlIGNhcmVmdWwgbm90IHRvIHRyZWF0IHRoZW0gbGlrZSAtTAorICAgICAgLUxbQS1aXVtBLVpdKjoqKQorCWNhc2UgJHdpdGhfZ2NjLyRob3N0IGluCisJbm8vKi0qLWlyaXgqIHwgLyotKi1pcml4KikKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLUwqKQorCWZ1bmNfc3RyaXBuYW1lICItTCIgJycgIiRhcmciCisJaWYgdGVzdCAteiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gXGAtTCcgYW5kIFxgJDEnIgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yIFxgLUwnIG9wdGlvbiIKKwkgIGZpCisJZmkKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwlkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkqKQorCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCSAgdGVzdCAteiAiJGFic2RpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCisJICBkaXI9IiRhYnNkaXIiCisJICA7OworCWVzYWMKKwljYXNlICIkZGVwbGlicyAiIGluCisJKiIgLUwkZGlyICIqIHwgKiIgJGFyZyAiKikKKwkgICMgV2lsbCBvbmx5IGhhcHBlbiBmb3IgYWJzb2x1dGUgb3Igc3lzcm9vdCBhcmd1bWVudHMKKwkgIDs7CisJKikKKwkgICMgUHJlc2VydmUgc3lzcm9vdCwgYnV0IG5ldmVyIGluY2x1ZGUgcmVsYXRpdmUgZGlyZWN0b3JpZXMKKwkgIGNhc2UgJGRpciBpbgorCSAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSogfCA9KikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtTCRkaXIiIDs7CisJICBlc2FjCisJICBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAkRUNITyAiJGRpciIgfCAkU0VEICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRkaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWwqKQorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiB8fCB0ZXN0ICJYJGFyZyIgPSAiWC1sbSI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKKwkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIG9yIG1hdGggbGlicmFyeSAoYXMgc3VjaCkKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vczIqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgbGlicmFyeSAoYXMgc3VjaCkKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjCisJZWxpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sY19yIjsgdGhlbgorCSBjYXNlICRob3N0IGluCisJICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICMgRG8gbm90IGluY2x1ZGUgbGliY19yIGRpcmVjdGx5LCB1c2UgLXB0aHJlYWQgZmxhZy4KKwkgICBjb250aW51ZQorCSAgIDs7CisJIGVzYWMKKwlmaQorCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW1vZHVsZSkKKwltb2R1bGU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgorICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdHwtLXN5c3Jvb3QpCisJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUgXAorICAgICAgfC10aHJlYWRzfC1mb3Blbm1wfC1vcGVubXB8LW1wfC14b3Blbm1wfC1vbXB8LXFzbXA9KikKKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkYXJnIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdWx0aV9tb2R1bGUpCisJc2luZ2xlX21vZHVsZT0iJHt3bH0tbXVsdGlfbW9kdWxlIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWZhc3QtaW5zdGFsbCkKKwlmYXN0X2luc3RhbGw9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1pbnN0YWxsKQorCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1kYXJ3aW4qIHwgKi1jZWdjYyopCisJICAjIFRoZSBQQVRIIGhhY2tlcnkgaW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MKKwkgICMgYW5kIERhcndpbiBpbiBvcmRlciBmb3IgdGhlIGxvYWRlciB0byBmaW5kIGFueSBkbGxzIGl0IG5lZWRzLgorCSAgZnVuY193YXJuaW5nICJcYC1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIKKwkgIGZ1bmNfd2FybmluZyAiYXNzdW1pbmcgXGAtbm8tZmFzdC1pbnN0YWxsJyBpbnN0ZWFkIgorCSAgZmFzdF9pbnN0YWxsPW5vCisJICA7OworCSopIG5vX2luc3RhbGw9eWVzIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLXVuZGVmaW5lZCkKKwlhbGxvd191bmRlZmluZWQ9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vYmplY3RsaXN0KQorCXByZXY9b2JqZWN0bGlzdAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW8pIHByZXY9b3V0cHV0IDs7CisKKyAgICAgIC1wcmVjaW91cy1maWxlcy1yZWdleCkKKwlwcmV2PXByZWNpb3VzX3JlZ2V4CisJY29udGludWUKKwk7OworCisgICAgICAtcmVsZWFzZSkKKwlwcmV2PXJlbGVhc2UKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1ycGF0aCkKKwlwcmV2PXJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUikKKwlwcmV2PXhycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIqKQorCWZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRhcmciCisJZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJPSopCisJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRkaXIiCisJICBkaXI9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICA7OworCSopCisJICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKwkgIDs7CisJZXNhYworCWNhc2UgIiR4cnBhdGggIiBpbgorCSoiICRkaXIgIiopIDs7CisJKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtc2hhcmVkKQorCSMgVGhlIGVmZmVjdHMgb2YgLXNoYXJlZCBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJY29udGludWUKKwk7OworCisgICAgICAtc2hyZXh0KQorCXByZXY9c2hyZXh0CisJY29udGludWUKKwk7OworCisgICAgICAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJIyBUaGUgZWZmZWN0cyBvZiAtc3RhdGljIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwkjIFdlIHVzZWQgdG8gZG8gdGhlIHNhbWUgYXMgLWFsbC1zdGF0aWMgb24gcGxhdGZvcm1zIHRoYXQKKwkjIGRpZG4ndCBoYXZlIGEgUElDIGZsYWcsIGJ1dCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBlZmZlY3RzCisJIyB3b3VsZCBiZSBlcXVpdmFsZW50IHdhcyB3cm9uZy4gIEl0IHdvdWxkIGJyZWFrIG9uIGF0IGxlYXN0CisJIyBEaWdpdGFsIFVuaXggYW5kIEFJWC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC10aHJlYWQtc2FmZSkKKwl0aHJlYWRfc2FmZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC12ZXJzaW9uLWluZm8pCisJcHJldj12aW5mbworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXZlcnNpb24tbnVtYmVyKQorCXByZXY9dmluZm8KKwl2aW5mb19udW1iZXI9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtd2VhaykKKyAgICAgICAgcHJldj13ZWFrCisJY29udGludWUKKwk7OworCisgICAgICAtV2MsKikKKwlmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBmdW5jX2FwcGVuZCBhcmcgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJOzsKKworICAgICAgLVdsLCopCisJZnVuY19zdHJpcG5hbWUgJy1XbCwnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWFyZz0KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgZnVuY19hcHBlbmQgYXJnICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgIC1YY29tcGlsZXIpCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YbGlua2VyKQorCXByZXY9eGxpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhDQ2xpbmtlcikKKwlwcmV2PXhjY2xpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyAtbXNnXyogZm9yIG9zZiBjYworICAgICAgLW1zZ18qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKworICAgICAgIyBGbGFncyB0byBiZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQsIHdpdGggcmF0aW9uYWxlOgorICAgICAgIyAtNjQsIC1taXBzWzAtOV0gICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXJbMC05XVswLTldKiAgICAgICAgc3BlY2lmeSBwcm9jZXNzb3IgZm9yIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXhhcmNoPSosIC14dGFyZ2V0PSogZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU3VuIGNvbXBpbGVyCisgICAgICAjICtEQSosICtERCogICAgICAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIEhQIGNvbXBpbGVyCisgICAgICAjIC1xKiAgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKyAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzIGZvciBHQ0MKKyAgICAgICMgLUYvcGF0aCAgICAgICAgICAgICAgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCisgICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qICBwcm9maWxpbmcgZmxhZ3MgZm9yIEdDQworICAgICAgIyBAZmlsZSAgICAgICAgICAgICAgICBHQ0MgcmVzcG9uc2UgZmlsZXMKKyAgICAgICMgLXRwPSogICAgICAgICAgICAgICAgUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgorICAgICAgIyAtLXN5c3Jvb3Q9KiAgICAgICAgICBmb3Igc3lzcm9vdCBzdXBwb3J0CisgICAgICAjIC1PKiwgLWZsdG8qLCAtZndob3ByKiwgLWZ1c2UtbGlua2VyLXBsdWdpbiBHQ0MgbGluay10aW1lIG9wdGltaXphdGlvbgorICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCisgICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCp8LXRwPSp8LS1zeXNyb290PSp8IFwKKyAgICAgIC1PKnwtZmx0byp8LWZ3aG9wcip8LWZ1c2UtbGlua2VyLXBsdWdpbikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKyAgICAgICAgY29udGludWUKKyAgICAgICAgOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcuCisgICAgICAtKiB8ICsqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisKKyAgICAgICouJG9iamV4dCkKKwkjIEEgc3RhbmRhcmQgb2JqZWN0LgorCWZ1bmNfYXBwZW5kIG9ianMgIiAkYXJnIgorCTs7CisKKyAgICAgICoubG8pCisJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KKwkgIHBpY19vYmplY3Q9CisJICBub25fcGljX29iamVjdD0KKworCSAgIyBSZWFkIHRoZSAubG8gZmlsZQorCSAgZnVuY19zb3VyY2UgIiRhcmciCisKKwkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCSAgICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCSAgICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgorCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCisJICBmaQorCisJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJICBpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJCWZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKwkJcHJldj0KKwkJY29udGludWUKKwkgICAgICBlbHNlCisJCSMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCXByZXY9ZGxwcmVmaWxlcworCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisJICAgICAgcHJldj0KKwkgICAgZmkKKworCSAgICAjIEEgUElDIG9iamVjdC4KKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBhcmc9IiRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBOb24tUElDIG9iamVjdC4KKwkgIGlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJICAgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJICAgIGZpCisJICBlbHNlCisJICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkgICAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCSAgICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgIGZpCisJZWxzZQorCSAgIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkgICAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgICAgZnVuY19sbzJvICIkYXJnIgorCSAgICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCSAgICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICouJGxpYmV4dCkKKwkjIEFuIGFyY2hpdmUuCisJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCisJZnVuY19hcHBlbmQgb2xkX2RlcGxpYnMgIiAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgKi5sYSkKKwkjIEEgbGlidG9vbC1jb250cm9sbGVkIGxpYnJhcnkuCisKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGFyZyIKKwlpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwkgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgcHJldj0KKwllbGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICMgVGhlIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCisJICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkgIHByZXY9CisJZWxzZQorCSAgZnVuY19hcHBlbmQgZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBhcmd1bWVudC4KKyAgICAgICopCisJIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCisJIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisgICAgICBlc2FjICMgYXJnCisKKyAgICAgICMgTm93IGFjdHVhbGx5IHN1YnN0aXR1dGUgdGhlIGFyZ3VtZW50IGludG8gdGhlIGNvbW1hbmRzLgorICAgICAgaWYgdGVzdCAtbiAiJGFyZyI7IHRoZW4KKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICAgZmkKKyAgICBkb25lICMgYXJndW1lbnQgcGFyc2luZyBsb29wCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllcyAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgorICAgICAgZXZhbCBhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICBmaQorCisgICAgb2xkbGlicz0KKyAgICAjIGNhbGN1bGF0ZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgd2l0aG91dCBpdHMgZGlyZWN0b3J5CisgICAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKyAgICBvdXRwdXRuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgbGlib2Jqc19zYXZlPSIkbGlib2JqcyIKKworICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorICAgICAgIyBnZXQgdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAkc2hsaWJwYXRoX3ZhcgorICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkRUNITyBcIlwkeyRzaGxpYnBhdGhfdmFyfVwiIFx8IFwkU0VEIFwncy86LyAvZ1wnXGAKKyAgICBlbHNlCisgICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KKyAgICBmaQorICAgIGV2YWwgc3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIgorICAgIGV2YWwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIKKworICAgIGZ1bmNfZGlybmFtZSAiJG91dHB1dCIgIi8iICIiCisgICAgb3V0cHV0X29iamRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkb2JqZGlyIgorICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8iCisgICAgdG9vbF9vdXRwdXRfb2JqZGlyPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KKyAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgorCisgICAgIyBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3V0cHV0CisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgIiIpCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiCisgICAgICA7OworICAgICouJGxpYmV4dCkgbGlua21vZGU9b2xkbGliIDs7CisgICAgKi5sbyB8ICouJG9iamV4dCkgbGlua21vZGU9b2JqIDs7CisgICAgKi5sYSkgbGlua21vZGU9bGliIDs7CisgICAgKikgbGlua21vZGU9cHJvZyA7OyAjIEFueXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGEgcHJvZ3JhbS4KKyAgICBlc2FjCisKKyAgICBzcGVjaWFsZGVwbGlicz0KKworICAgIGxpYnM9CisgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCisgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCisgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKyAgICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisJY2FzZSAiJGxpYnMgIiBpbgorCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgZnVuY19hcHBlbmQgbGlicyAiICRkZXBsaWIiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgbGlicz0iJHByZWRlcHMgJGxpYnMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAkcG9zdGRlcHMiCisKKyAgICAgICMgQ29tcHV0ZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlIGluICRwcmVkZXBzCisgICAgICAjICRwb3N0ZGVwcyBhbmQgbWFyayB0aGVtIGFzIHNwZWNpYWwgKGkuZS4sIHdob3NlIGR1cGxpY2F0ZXMgYXJlCisgICAgICAjIG5vdCB0byBiZSBlbGltaW5hdGVkKS4KKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgorCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbworCSAgY2FzZSAiJHByZV9wb3N0X2RlcHMgIiBpbgorCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkcHJlX3Bvc3RfZGVwcyIgOzsKKwkgIGVzYWMKKwkgIGZ1bmNfYXBwZW5kIHByZV9wb3N0X2RlcHMgIiAkcHJlX3Bvc3RfZGVwIgorCWRvbmUKKyAgICAgIGZpCisgICAgICBwcmVfcG9zdF9kZXBzPQorICAgIGZpCisKKyAgICBkZXBsaWJzPQorICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KKyAgICBuZXdsaWJfc2VhcmNoX3BhdGg9CisgICAgbmVlZF9yZWxpbms9bm8gIyB3aGV0aGVyIHdlJ3JlIGxpbmtpbmcgYW55IHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9kZXBsaWJzPSAjIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X3BhdGg9ICMgcGF0aHMgdGhhdCBjb250YWluIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgbGliKQorCXBhc3Nlcz0iY29udiBkbHByZW9wZW4gbGluayIKKwlmb3IgZmlsZSBpbiAkZGxmaWxlcyAkZGxwcmVmaWxlczsgZG8KKwkgIGNhc2UgJGZpbGUgaW4KKwkgICoubGEpIDs7CisJICAqKQorCSAgICBmdW5jX2ZhdGFsX2hlbHAgImxpYnJhcmllcyBjYW4gXGAtZGxvcGVuJyBvbmx5IGxpYnRvb2wgbGlicmFyaWVzOiAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJOzsKKyAgICBwcm9nKQorCWNvbXBpbGVfZGVwbGlicz0KKwlmaW5hbGl6ZV9kZXBsaWJzPQorCWFsbGRlcGxpYnM9bm8KKwluZXdkbGZpbGVzPQorCW5ld2RscHJlZmlsZXM9CisJcGFzc2VzPSJjb252IHNjYW4gZGxvcGVuIGRscHJlb3BlbiBsaW5rIgorCTs7CisgICAgKikgIHBhc3Nlcz0iY29udiIKKwk7OworICAgIGVzYWMKKworICAgIGZvciBwYXNzIGluICRwYXNzZXM7IGRvCisgICAgICAjIFRoZSBwcmVvcGVuIHBhc3MgaW4gbGliIG1vZGUgcmV2ZXJzZXMgJGRlcGxpYnM7IHB1dCBpdCBiYWNrIGhlcmUKKyAgICAgICMgc28gdGhhdCAtTCBjb21lcyBiZWZvcmUgbGlicyB0aGF0IG5lZWQgaXQgZm9yIGluc3RhbmNlLi4uCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIjsgdGhlbgorCSMjIEZJWE1FOiBGaW5kIHRoZSBwbGFjZSB3aGVyZSB0aGUgbGlzdCBpcyByZWJ1aWx0IGluIHRoZSB3cm9uZworCSMjICAgICAgICBvcmRlciwgYW5kIGZpeCBpdCB0aGVyZSBwcm9wZXJseQorICAgICAgICB0bXBfZGVwbGlicz0KKwlmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgdG1wX2RlcGxpYnM9IiRkZXBsaWIgJHRtcF9kZXBsaWJzIgorCWRvbmUKKwlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorCSB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiI7IHRoZW4KKwlsaWJzPSIkZGVwbGlicyIKKwlkZXBsaWJzPQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJY2FzZSAkcGFzcyBpbgorCWRsb3BlbikgbGlicz0iJGRsZmlsZXMiIDs7CisJZGxwcmVvcGVuKSBsaWJzPSIkZGxwcmVmaWxlcyIgOzsKKwlsaW5rKSBsaWJzPSIkZGVwbGlicyAlREVQTElCUyUgJGRlcGVuZGVuY3lfbGlicyIgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsZGxwcmVvcGVuIjsgdGhlbgorCSMgQ29sbGVjdCBhbmQgZm9yd2FyZCBkZXBsaWJzIG9mIHByZW9wZW5lZCBsaWJ0b29sIGxpYnMKKwlmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgIyBJZ25vcmUgbm9uLWxpYnRvb2wtbGlicworCSAgZGVwZW5kZW5jeV9saWJzPQorCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCisJICBjYXNlICRsaWIgaW4KKwkgICoubGEpCWZ1bmNfc291cmNlICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworCSAgZXNhYworCisJICAjIENvbGxlY3QgcHJlb3BlbmVkIGxpYnRvb2wgZGVwbGlicywgZXhjZXB0IGFueSB0aGlzIGxpYnJhcnkKKwkgICMgaGFzIGRlY2xhcmVkIGFzIHdlYWsgbGlicworCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorICAgICAgICAgICAgZGVwbGliX2Jhc2U9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIGNhc2UgIiAkd2Vha19saWJzICIgaW4KKwkgICAgKiIgJGRlcGxpYl9iYXNlICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWRvbmUKKwlsaWJzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCisJc2F2ZV9kZXBsaWJzPSIkZGVwbGlicyIKKwlkZXBsaWJzPQorICAgICAgZmkKKworICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KKwlsaWI9CisJZm91bmQ9bm8KKwljYXNlICRkZXBsaWIgaW4KKwktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlIFwKKyAgICAgICAgfC10aHJlYWRzfC1mb3Blbm1wfC1vcGVubXB8LW1wfC14b3Blbm1wfC1vbXB8LXFzbXA9KikKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZGVwbGliIgorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwktbCopCisJICBpZiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYiAmJiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2c7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJcYC1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZWxzZQorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZmkKKwkgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaGRpcnM7IGRvCisJICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCisJICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQorCSAgICAgIGxpYj0iJHNlYXJjaGRpci9saWIke25hbWV9JHtzZWFyY2hfZXh0fSIKKwkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCQlpZiB0ZXN0ICIkc2VhcmNoX2V4dCIgPSAiLmxhIjsgdGhlbgorCQkgIGZvdW5kPXllcworCQllbHNlCisJCSAgZm91bmQ9bm8KKwkJZmkKKwkJYnJlYWsgMgorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGRvbmUKKwkgIGlmIHRlc3QgIiRmb3VuZCIgIT0geWVzOyB0aGVuCisJICAgICMgZGVwbGliIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGxpYnRvb2wgbGlicmFyeQorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgZWxzZSAjIGRlcGxpYiBpcyBhIGxpYnRvb2wgbGlicmFyeQorCSAgICAjIElmICRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMgJiYgJGRlcGxpYiBpcyBhIHN0ZGxpYiwKKwkgICAgIyBXZSBuZWVkIHRvIGRvIHNvbWUgc3BlY2lhbCB0aGluZ3MgaGVyZSwgYW5kIG5vdCBsYXRlci4KKwkgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopCisJCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KKwkJICBsaWJyYXJ5X25hbWVzPQorCQkgIG9sZF9saWJyYXJ5PQorCQkgIGZ1bmNfc291cmNlICIkbGliIgorCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkJICAgIGxsPSIkbCIKKwkJICBkb25lCisJCSAgaWYgdGVzdCAiWCRsbCIgPSAiWCRvbGRfbGlicmFyeSIgOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKKwkJICAgIGZvdW5kPW5vCisJCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCQkgICAgbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCQkgICAgbGliPSRsYWRpci8kb2xkX2xpYnJhcnkKKwkJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkJICAgIGVsc2UKKwkJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkJICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkJICAgIGZpCisJCSAgICBjb250aW51ZQorCQkgIGZpCisJCWZpCisJCTs7CisJICAgICAgKikgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBmaQorCSAgOzsgIyAtbAorCSoubHRmcmFtZXdvcmspCisJICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCS1MKikKKwkgIGNhc2UgJGxpbmttb2RlIGluCisJICBsaWIpCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgICA7OworCSAgcHJvZykKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgY29udGludWUKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gc2NhbjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkgICAgOzsKKwkgICopCisJICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgICAgOzsKKwkgIGVzYWMgIyBsaW5rbW9kZQorCSAgY29udGludWUKKwkgIDs7ICMgLUwKKwktUiopCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBjb250aW51ZQorCSAgOzsKKwkqLmxhKQorCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJICBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgOzsKKwkqLiRsaWJleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCisJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCisJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAqKQorCSAgICAgIHZhbGlkX2FfbGliPW5vCisJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkJbWF0Y2hfcGF0dGVybiopCisJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKKwkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgIHZhbGlkX2FfbGliPXllcworCQkgIGZpCisJCTs7CisJCXBhc3NfYWxsKQorCQkgIHZhbGlkX2FfbGliPXllcworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBpZiB0ZXN0ICIkdmFsaWRfYV9saWIiICE9IHllczsgdGhlbgorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCisJCWVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCisJICAgICAgZWxzZQorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICA7OyAjICouJGxpYmV4dAorCSoubG8gfCAqLiRvYmpleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkZXBsaWIiCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgorCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCSVERVBMSUJTJSkKKwkgIGFsbGRlcGxpYnM9eWVzCisJICBjb250aW51ZQorCSAgOzsKKwllc2FjICMgY2FzZSAkZGVwbGliCisKKwlpZiB0ZXN0ICIkZm91bmQiID0geWVzIHx8IHRlc3QgLWYgIiRsaWIiOyB0aGVuIDoKKwllbHNlCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCB0aGUgbGlicmFyeSBcYCRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCBcYCRkZXBsaWInIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRsaWIiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwlsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwlkbG5hbWU9CisJZGxvcGVuPQorCWRscHJlb3Blbj0KKwlsaWJkaXI9CisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorCSMgSWYgdGhlIGxpYnJhcnkgd2FzIGluc3RhbGxlZCB3aXRoIGFuIG9sZCByZWxlYXNlIG9mIGxpYnRvb2wsCisJIyBpdCB3aWxsIG5vdCByZWRlZmluZSB2YXJpYWJsZXMgaW5zdGFsbGVkLCBvciBzaG91bGRub3RsaW5rCisJaW5zdGFsbGVkPXllcworCXNob3VsZG5vdGxpbms9bm8KKwlhdm9pZHRlbXBycGF0aD0KKworCisJIyBSZWFkIHRoZSAubGEgZmlsZQorCWZ1bmNfc291cmNlICIkbGliIgorCisJIyBDb252ZXJ0ICItZnJhbWV3b3JrIGZvbyIgdG8gImZvby5sdGZyYW1ld29yayIKKwlpZiB0ZXN0IC1uICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyI7IHRoZW4KKwkgIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCisJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiICRkZXBlbmRlbmN5X2xpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAorCSAgIHsgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB9OyB0aGVuCisJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKKwkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwkgICAgZmkKKwkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgorCSAgICBmdW5jX2FwcGVuZCBjb252ZW5pZW5jZSAiICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgZnVuY19hcHBlbmQgb2xkX2NvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IgorCSAgZmkKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorCSAgZG9uZQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gY29udgorCisKKwkjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCisJbGlua2xpYj0KKwlpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmCisJICAgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IHllcyB8fAorCSAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCxubyI7IH07IHRoZW4KKwkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5CisJZWxzZQorCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCSAgICBsaW5rbGliPSIkbCIKKwkgIGRvbmUKKwlmaQorCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisJZmkKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCWlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorCSAgZmkKKwkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8CisJICAgICB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsbmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZworCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQorCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAorCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCisJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliICRkZXBlbmRlbmN5X2xpYnMiCisJICBlbHNlCisJICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIgorCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGRsb3BlbgorCisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkbGFkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic19sYWRpcj0iJGxhZGlyIiA7OworCSopCisJICBhYnNfbGFkaXI9YGNkICIkbGFkaXIiICYmIHB3ZGAKKwkgIGlmIHRlc3QgLXogIiRhYnNfbGFkaXIiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRsYWRpciciCisJICAgIGZ1bmNfd2FybmluZyAicGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIKKwkgICAgYWJzX2xhZGlyPSIkbGFkaXIiCisJICBmaQorCSAgOzsKKwllc2FjCisJZnVuY19iYXNlbmFtZSAiJGxpYiIKKwlsYW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworCSMgRmluZCB0aGUgcmVsZXZhbnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFyeSBuYW1lLgorCWlmIHRlc3QgIlgkaW5zdGFsbGVkIiA9IFh5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgISAtZiAiJGx0X3N5c3Jvb3QkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisJICBlbHNlCisJICAgIGRpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgorCSAgICBhYnNkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKKwkgIGZpCisJICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSBYeWVzICYmIGF2b2lkdGVtcHJwYXRoPXllcworCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGxhZGlyLyRvYmpkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGRpcj0iJGxhZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbGFkaXIvJG9iamRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCisJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKKwkgIGZpCisJZmkgIyAkaW5zdGFsbGVkID0geWVzCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKwkgIGZpCisJICBjYXNlICIkaG9zdCIgaW4KKwkgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBQRS1ETExzLgorCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAjIExpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJ5IGlmIGJvdGgKKwkgICAgICAjIHN0YXRpYyBhbmQgc2hhcmVkIGFyZSBwcmVzZW50LiAgVGhlcmVmb3JlLCBlbnN1cmUgd2UgZXh0cmFjdAorCSAgICAgICMgc3ltYm9scyBmcm9tIHRoZSBpbXBvcnQgbGlicmFyeSBpZiBhIHNoYXJlZCBsaWJyYXJ5IGlzIHByZXNlbnQKKwkgICAgICAjIChvdGhlcndpc2UsIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgd2lsbCBiZSBpbmNvcnJlY3QpLiAgV2UgZG8KKwkgICAgICAjIHRoaXMgYnkgcHV0dGluZyB0aGUgaW1wb3J0IGxpYnJhcnkgbmFtZSBpbnRvICRuZXdkbHByZWZpbGVzLgorCSAgICAgICMgV2UgcmVjb3ZlciB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIGJ5ICdzYXZpbmcnIHRoZSBsYSBmaWxlCisJICAgICAgIyBuYW1lIGluIGEgc3BlY2lhbCBwdXJwb3NlIHZhcmlhYmxlLCBhbmQgKGxhdGVyKSBleHRyYWN0aW5nIHRoZQorCSAgICAgICMgZGxuYW1lIGZyb20gdGhlIGxhIGZpbGUuCisJICAgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkaXIvJGxpbmtsaWIiCisJICAgICAgICBldmFsICJsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdD1cJGFic19sYWRpci9cJGxhbmFtZSIKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgZmkKKwkgICAgOzsKKwkgICAgKiApCisJICAgICAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisJICAgICAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCisJICAgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisJICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorCSAgICAgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRkbG5hbWUiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwlmaSAjICRwYXNzID0gZGxwcmVvcGVuCisKKwlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgIyBMaW5rIHRoZSBjb252ZW5pZW5jZSBsaWJyYXJ5CisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIgIyB1c2VkIGZvciBwcm9nLHNjYW4gcGFzcworCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkKKworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgJiYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKwkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRsYWRpciIKKwkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisKKwkgIGxpbmthbGxkZXBsaWJzPW5vCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm8gfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8CisJICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgIGxpbmthbGxkZXBsaWJzPXllcworCSAgZmkKKworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgICAgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkJIDs7CisJICAgIGVzYWMKKwkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPworCSAgICBpZiB0ZXN0ICIkbGlua2FsbGRlcGxpYnMiID0geWVzOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgICMgTmVlZCB0byBoYXJkY29kZSBzaGFyZWQgbGlicmFyeSBwYXRocworCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCisJICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZpCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCisJICBkb25lICMgZm9yIGRlcGxpYgorCSAgY29udGludWUKKwlmaSAjICRsaW5rbW9kZSA9IHByb2cuLi4KKworCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCisJICAgICB7IHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSBubyB8fAorCSAgICAgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQseWVzIjsgfSB8fAorCSAgICAgICB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCisJICAgICMgV2UgbmVlZCB0byBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoCisJICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC16ICIkYXZvaWR0ZW1wcnBhdGgiIDsgdGhlbgorCSAgICAgICMgTWFrZSBzdXJlIHRoZSBycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgICAgICBjYXNlICIkdGVtcF9ycGF0aDoiIGluCisJICAgICAgKiIkYWJzZGlyOiIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKworCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaSAjICRsaW5rbW9kZSwkcGFzcyA9IHByb2csbGluay4uLgorCisJICBpZiB0ZXN0ICIkYWxsZGVwbGlicyIgPSB5ZXMgJiYKKwkgICAgIHsgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9IHBhc3NfYWxsIHx8CisJICAgICAgIHsgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYKKwkJIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgfTsgfTsgdGhlbgorCSAgICAjIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggZm9yIHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgY29udGludWUKKwkgIGZpCisJZmkKKworCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKKwl1c2Vfc3RhdGljX2xpYnM9JHByZWZlcl9zdGF0aWNfbGlicworCWlmIHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gYnVpbHQgJiYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KKwkgIHVzZV9zdGF0aWNfbGlicz1ubworCWZpCisJaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCisJICAgeyB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IG5vIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyopCisJICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZAorCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9bm8KKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPXllcworCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCSAgIyBUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkKKworCSAgIyBXYXJuIGFib3V0IHBvcnRhYmlsaXR5LCBjYW4ndCBsaW5rIGFnYWluc3QgLW1vZHVsZSdzIG9uIHNvbWUKKwkgICMgc3lzdGVtcyAoZGFyd2luKS4gIERvbid0IGJsZWF0IGFib3V0IGRsb3BlbmVkIG1vZHVsZXMgdGhvdWdoIQorCSAgZGxvcGVubW9kdWxlPSIiCisJICBmb3IgZGxwcmVtb2R1bGV0ZXN0IGluICRkbHByZWZpbGVzOyBkbworCSAgICBpZiB0ZXN0ICJYJGRscHJlbW9kdWxldGVzdCIgPSAiWCRsaWIiOyB0aGVuCisJICAgICAgZGxvcGVubW9kdWxlPSIkZGxwcmVtb2R1bGV0ZXN0IgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICBkb25lCisJICBpZiB0ZXN0IC16ICIkZGxvcGVubW9kdWxlIiAmJiB0ZXN0ICIkc2hvdWxkbm90bGluayIgPSB5ZXMgJiYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCSAgICBlY2hvCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBlbHNlCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICAgZmkKKwkgICAgJEVDSE8gIioqKiAkbGlua2xpYiBpcyBub3QgcG9ydGFibGUhIgorCSAgZmkKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYKKwkgICAgIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKwkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorCSAgICAjIHNlYXJjaCBwYXRoLgorCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7IHRoZW4KKwkgICAgIyBmaWd1cmUgb3V0IHRoZSBzb25hbWUKKwkgICAgc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJICAgIHNoaWZ0CisJICAgIHJlYWxuYW1lPSIkMSIKKwkgICAgc2hpZnQKKwkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPworCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgIHNvbmFtZT0iJGRsbmFtZSIKKwkgICAgZWxpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCisJICAgICAgIyBibGVoIHdpbmRvd3MKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCBtaW5ndyogfCAqY2VnY2MqKQorCSAgICAgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkJbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCXZlcnN1ZmZpeD0iLSRtYWpvciIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorCSAgICBlbHNlCisJICAgICAgc29uYW1lPSIkcmVhbG5hbWUiCisJICAgIGZpCisKKwkgICAgIyBNYWtlIGEgbmV3IG5hbWUgZm9yIHRoZSBleHRyYWN0X2V4cHN5bXNfY21kcyB0byB1c2UKKwkgICAgc29yb290PSIkc29uYW1lIgorCSAgICBmdW5jX2Jhc2VuYW1lICIkc29yb290IgorCSAgICBzb25hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5kbGwnICIkc29uYW1lIgorCSAgICBuZXdsaWI9bGliaW1wLSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuYQorCisJICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93CisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiICdleGl0ICQ/JworCSAgICBmaQorCisJICAgICMgQ3JlYXRlICRuZXdsaWIKKwkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG5ld2xpYiI7IHRoZW4gOjsgZWxzZQorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKwkgICAgIyBtYWtlIHN1cmUgdGhlIGxpYnJhcnkgdmFyaWFibGVzIGFyZSBwb2ludGluZyB0byB0aGUgbmV3IGxpYnJhcnkKKwkgICAgZGlyPSRvdXRwdXRfb2JqZGlyCisJICAgIGxpbmtsaWI9JG5ld2xpYgorCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgbGliX2xpbmtlZD15ZXMKKwkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCisJICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0gbm87IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCQljYXNlICRob3N0IGluCisJCSAgKi0qLXNjbzMuMnY1LjAuWzAyNF0qKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXN5c3Y0KnV3MiopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKKwkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLWRhcndpbiogKQorCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2FuIG5vdAorCQkgICAgIyBsaW5rIGFnYWluc3QgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIGVhcmxpZXIgd2FybmluZ3MKKwkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAorCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KKwkJICAgICAgaWYgdGVzdCAiWCRkbG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7IHRoZW4KKwkJCSRFQ0hPICIqKiogV2FybmluZzogbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKKwkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCisJCQkgIGVjaG8KKwkJCSAgZWNobyAiKioqIEFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGF0aWMgYXJjaGl2ZSBhdmFpbGFibGUiCisJCQkgIGVjaG8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgorCQkJZWxzZQorCQkJICBhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkJZmkKKwkJICAgICAgZWxpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJCQlhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkgICAgICBmaQorCQkgICAgZmkKKwkJZXNhYworCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSIkZGlyIiA7OworCQllc2FjCisJCWFkZF9kaXI9Ii1MJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0gbm87IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgcmVsaW5rKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KKwkJYWRkX2Rpcj0iLUwkYWJzZGlyIgorCQkjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJCSAgY2FzZSAkbGliZGlyIGluCisJCSAgICBbXFwvXSopCisJCSAgICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWFkZF9zaGxpYnBhdGg9IiRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbHNlCisJCWxpYl9saW5rZWQ9bm8KKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopIGxpYl9saW5rZWQ9bm8gOzsKKwkgICAgZXNhYworCisJICAgIGlmIHRlc3QgIiRsaWJfbGlua2VkIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVuc3VwcG9ydGVkIGhhcmRjb2RlIHByb3BlcnRpZXMiCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCisJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgorCSAgICAgICoiOiRhZGRfc2hsaWJwYXRoOiIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfc2hsaWJwYXRoICIkYWRkX3NobGlicGF0aDoiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkICRjb21waWxlX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB5ZXMgJiYKKwkJIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSB5ZXMgJiYKKwkJIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCQljYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorCQkqIjokbGliZGlyOiIqKSA7OworCQkqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICAgYWRkX3NobGlicGF0aD0KKwkgICAgYWRkX2Rpcj0KKwkgICAgYWRkPQorCSAgICAjIEZpbmFsaXplIGNvbW1hbmQgZm9yIGJvdGggaXMgc2ltcGxlOiBqdXN0IGhhcmRjb2RlIGl0LgorCSAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgorCSAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCisJICAgICAgYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokbGliZGlyOiIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CisJICAgICAgZXNhYworCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiICYmCisJCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIgOyB0aGVuCisJCWFkZD0iJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZWxzZQorCQlhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQljYXNlICRsaWJkaXIgaW4KKwkJICBbXFwvXSopCisJCSAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkX2RpciAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisJICAgIGZpCisJICBmaQorCWVsaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICMgSGVyZSB3ZSBhc3N1bWUgdGhhdCBvbmUgb2YgaGFyZGNvZGVfZGlyZWN0IG9yIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgaXMgbm90IHVuc3VwcG9ydGVkLiAgVGhpcyBpcyB2YWxpZCBvbiBhbGwga25vd24gc3RhdGljIGFuZAorCSAgIyBzaGFyZWQgcGxhdGZvcm1zLgorCSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gdW5zdXBwb3J0ZWQ7IHRoZW4KKwkgICAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBsaW5rbGliPSIkb2xkX2xpYnJhcnkiCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZmkKKwllbGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJICAjIE5vdCBhIHNoYXJlZCBsaWJyYXJ5CisJICBpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisJICAgICMgV2UncmUgdHJ5aW5nIGxpbmsgYSBzaGFyZWQgbGlicmFyeSBhZ2FpbnN0IGEgc3RhdGljIG9uZQorCSAgICAjIGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKworCSAgICAjIEp1c3QgcHJpbnQgYSB3YXJuaW5nIGFuZCBhZGQgdGhlIGxpYnJhcnkgdG8gZGVwZW5kZW5jeV9saWJzIHNvCisJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgorCSAgICBlY2hvCisJICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKKwkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKKwkgICAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgICBlY2hvICIqKiogQnV0IGFzIHlvdSB0cnkgdG8gYnVpbGQgYSBtb2R1bGUgbGlicmFyeSwgbGlidG9vbCB3aWxsIHN0aWxsIGNyZWF0ZSAiCisJICAgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmcgYXBwbGljYXRpb24iCisJICAgICAgZWNobyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgorCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJCWVjaG8KKwkJZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJCWVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJCWVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkJZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgICBsaW5rX3N0YXRpYz15ZXMKKwkgIGZpCisJZmkgIyBsaW5rIHNoYXJlZC9zdGF0aWMgbGlicmFyeT8KKworCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRkZXBlbmRlbmN5X2xpYnMiICYmCisJICAgICB7IHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiICE9IHllcyB8fAorCSAgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzIHx8CisJICAgICAgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSB5ZXM7IH07IHRoZW4KKwkgICAgIyBFeHRyYWN0IC1SIGZyb20gZGVwZW5kZW5jeV9saWJzCisJICAgIHRlbXBfZGVwbGlicz0KKwkgICAgZm9yIGxpYmRpciBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGxpYmRpciBpbgorCSAgICAgIC1SKikgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGxpYmRpciIKKwkgICAgICAgICAgIHRlbXBfeHJwYXRoPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CisJCSAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICR0ZW1wX3hycGF0aCI7OworCQkgICBlc2FjOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX2RlcGxpYnMgIiAkbGliZGlyIjs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfZGVwbGlicyIKKwkgIGZpCisKKwkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRhYnNkaXIiCisJICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKKwkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgY2FzZSAkZGVwbGliIGluCisgICAgICAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKyAgICAgICAgICAgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7OworICAgICAgICAgICAgICAqKSBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIgOzsKKyAgICAgICAgICAgIGVzYWMKKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCisgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgZG9uZQorCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIHBhdGg9CisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgLUwqKSBwYXRoPSIkZGVwbGliIiA7OworCSAgICAgICoubGEpCisJICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKwkgICAgICAgIGRlcGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJICAgICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBsaWIiICIiICIuIgorCQlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJCWNhc2UgJGRpciBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKKwkJKikKKwkJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KKwkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgorCQkgICAgYWJzZGlyPSIkZGlyIgorCQkgIGZpCisJCSAgOzsKKwkJZXNhYworCQlpZiAkR1JFUCAiXmluc3RhbGxlZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1kYXJ3aW4qKQorCQkgIGRlcGRlcGw9CisJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KKwkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbworCQkgICAgICBkZXBkZXBsPSR0bXAKKwkJICAgIGRvbmUKKwkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIgOyB0aGVuCisJCSAgICAgIGRlcGRlcGw9IiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIKKwkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTH0gLUwgJGRlcGRlcGwgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGZpCisJCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorCQkgICAgICBwYXRoPQorCQkgICAgZmkKKwkJICBmaQorCQkgIDs7CisJCSopCisJCSAgcGF0aD0iLUwkYWJzZGlyLyRvYmpkaXIiCisJCSAgOzsKKwkJZXNhYworCQllbHNlCisJCSAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY193YXJuaW5nICJcYCRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgorCisJCSAgcGF0aD0iLUwkYWJzZGlyIgorCQlmaQorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBjYXNlICIgJGRlcGxpYnMgIiBpbgorCSAgICAgICoiICRwYXRoICIqKSA7OworCSAgICAgICopIGRlcGxpYnM9IiRwYXRoICRkZXBsaWJzIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZmkgIyBsaW5rX2FsbF9kZXBsaWJzICE9IG5vCisJZmkgIyBsaW5rbW9kZSA9IGxpYgorICAgICAgZG9uZSAjIGZvciBkZXBsaWIgaW4gJGxpYnMKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gInByb2ciOyB0aGVuCisJICBjb21waWxlX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkY29tcGlsZV9kZXBsaWJzIgorCSAgZmluYWxpemVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRmaW5hbGl6ZV9kZXBsaWJzIgorCWVsc2UKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgImAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpCisgICAgICBmaQorICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcworCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KKwlpZiB0ZXN0ICIkcGFzcyIgIT0gY29udjsgdGhlbgorCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgbGliX3NlYXJjaF9wYXRoPQorCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgbmV3bGliX3NlYXJjaF9wYXRoPQorCWZpCisKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiICE9ICJwcm9nLGxpbmsiOyB0aGVuCisJICB2YXJzPSJkZXBsaWJzIgorCWVsc2UKKwkgIHZhcnM9ImNvbXBpbGVfZGVwbGlicyBmaW5hbGl6ZV9kZXBsaWJzIgorCWZpCisJZm9yIHZhciBpbiAkdmFycyBkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAjIEFkZCBsaWJyYXJpZXMgdG8gJHZhciBpbiByZXZlcnNlIG9yZGVyCisJICBldmFsIHRtcF9saWJzPVwiXCQkdmFyXCIKKwkgIG5ld19saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkdG1wX2xpYnM7IGRvCisJICAgICMgRklYTUU6IFBlZGFudGljYWxseSwgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCisJICAgICMgICAgICAgIHRoYXQgc29tZSBuYXN0eSBkZXBlbmRlbmN5IGxvb3AgaXNuJ3QgYWNjaWRlbnRhbGx5CisJICAgICMgICAgICAgIGJyb2tlbjoKKwkgICAgI25ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIKKwkgICAgIyBQcmFnbWF0aWNhbGx5LCB0aGlzIHNlZW1zIHRvIGNhdXNlIHZlcnkgZmV3IHByb2JsZW1zIGluCisJICAgICMgcHJhY3RpY2U6CisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkgICAgLVIqKSA7OworCSAgICAqKQorCSAgICAgICMgQW5kIGhlcmUgaXMgdGhlIHJlYXNvbjogd2hlbiBhIGxpYnJhcnkgYXBwZWFycyBtb3JlCisJICAgICAgIyB0aGFuIG9uY2UgYXMgYW4gZXhwbGljaXQgZGVwZW5kZW5jZSBvZiBhIGxpYnJhcnksIG9yCisJICAgICAgIyBpcyBpbXBsaWNpdGx5IGxpbmtlZCBpbiBtb3JlIHRoYW4gb25jZSBieSB0aGUKKwkgICAgICAjIGNvbXBpbGVyLCBpdCBpcyBjb25zaWRlcmVkIHNwZWNpYWwsIGFuZCBtdWx0aXBsZQorCSAgICAgICMgb2NjdXJyZW5jZXMgdGhlcmVvZiBhcmUgbm90IHJlbW92ZWQuICBDb21wYXJlIHRoaXMKKwkgICAgICAjIHdpdGggaGF2aW5nIHRoZSBzYW1lIGxpYnJhcnkgYmVpbmcgbGlzdGVkIGFzIGEKKwkgICAgICAjIGRlcGVuZGVuY3kgb2YgbXVsdGlwbGUgb3RoZXIgbGlicmFyaWVzOiBpbiB0aGlzIGNhc2UsCisJICAgICAgIyB3ZSBrbm93IChwZWRhbnRpY2FsbHksIHdlIGFzc3VtZSkgdGhlIGxpYnJhcnkgZG9lcyBub3QKKwkgICAgICAjIG5lZWQgdG8gYmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlLCBzbyB3ZSBrZWVwIG9ubHkgdGhlCisJICAgICAgIyBsYXN0IGNvcHkuICBUaGlzIGlzIG5vdCBhbHdheXMgcmlnaHQsIGJ1dCBpdCBpcyByYXJlCisJICAgICAgIyBlbm91Z2ggdGhhdCB3ZSByZXF1aXJlIHVzZXJzIHRoYXQgcmVhbGx5IG1lYW4gdG8gcGxheQorCSAgICAgICMgc3VjaCB1bnBvcnRhYmxlIGxpbmtpbmcgdHJpY2tzIHRvIGxpbmsgdGhlIGxpYnJhcnkKKwkgICAgICAjIHVzaW5nIC1XbCwtbG5hbWUsIHNvIHRoYXQgbGlidG9vbCBkb2VzIG5vdCBjb25zaWRlciBpdAorCSAgICAgICMgZm9yIGR1cGxpY2F0ZSByZW1vdmFsLgorCSAgICAgIGNhc2UgIiAkc3BlY2lhbGRlcGxpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkgICAgICAqKQorCQljYXNlICIgJG5ld19saWJzICIgaW4KKwkJKiIgJGRlcGxpYiAiKikgOzsKKwkJKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCQllc2FjCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkbmV3X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopCisJICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgZXZhbCAkdmFyPVwiJHRtcF9saWJzXCIKKwlkb25lICMgZm9yIHZhcgorICAgICAgZmkKKyAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCisgICAgICAjICh0aGV5IHN0YXkgaW4gZGVwbGlicykKKyAgICAgIHRtcF9saWJzPQorICAgICAgZm9yIGkgaW4gJGRlcGVuZGVuY3lfbGlicyA7IGRvCisJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICIgaW4KKwkqIiAkaSAiKikKKwkgIGk9IiIKKwkgIDs7CisJZXNhYworCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGkiCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIGRlcGVuZGVuY3lfbGlicz0kdG1wX2xpYnMKKyAgICBkb25lICMgZm9yIHBhc3MKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorICAgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisgICAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKyAgICBmaQorCisgICAgY2FzZSAkbGlua21vZGUgaW4KKyAgICBvbGRsaWIpCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KKyAgICAgICpcIC1sKiB8ICpcIC1MKikKKwlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDs7CisgICAgICBlc2FjCisKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLWV4cG9ydC1zeW1ib2xzJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgIG9sZGxpYnM9IiRvdXRwdXQiCisgICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xkX2RlcGxpYnMiCisgICAgICA7OworCisgICAgbGliKQorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgorICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorICAgICAgbGliKikKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OworICAgICAgKikKKwl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIKKworCWlmIHRlc3QgIiRuZWVkX2xpYl9wcmVmaXgiICE9IG5vOyB0aGVuCisJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwllbHNlCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgorCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgorCWVsc2UKKwkgIGVjaG8KKwkgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKKwkgICRFQ0hPICIqKiogb2JqZWN0cyAkb2JqcyBpcyBub3QgcG9ydGFibGUhIgorCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRvYmpzIgorCWZpCisgICAgICBmaQorCisgICAgICB0ZXN0ICIkZGxzZWxmIiAhPSBubyAmJiBcCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCisKKyAgICAgIHNldCBkdW1teSAkcnBhdGgKKyAgICAgIHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisKKyAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKworICAgICAgb2xkbGlicz0KKyAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKwlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KKwkgICMgU29tZSBjb21waWxlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIGEgYC5hbCcgZXh0ZW5zaW9uIHNvCisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBleHRlbnNpb24gYW4KKwkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KKwkgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQgJG9sZGxpYnMiCisJICBidWlsZF9saWJ0b29sX2xpYnM9Y29udmVuaWVuY2UKKwkgIGJ1aWxkX29sZF9saWJzPXllcworCWZpCisKKwl0ZXN0IC1uICIkdmluZm8iICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorCisJdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorICAgICAgZWxzZQorCisJIyBQYXJzZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVudC4KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nOicKKwlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCisJc2hpZnQKKwlJRlM9IiRzYXZlX2lmcyIKKworCXRlc3QgLW4gIiQ3IiAmJiBcCisJICBmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IHBhcmFtZXRlcnMgdG8gXGAtdmVyc2lvbi1pbmZvJyIKKworCSMgY29udmVydCBhYnNvbHV0ZSB2ZXJzaW9uIG51bWJlcnMgdG8gbGlidG9vbCBhZ2VzCisJIyB0aGlzIHJldGFpbnMgY29tcGF0aWJpbGl0eSB3aXRoIC5sYSBmaWxlcyBhbmQgYXR0ZW1wdHMKKwkjIHRvIG1ha2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQorCisJY2FzZSAkdmluZm9fbnVtYmVyIGluCisJeWVzKQorCSAgbnVtYmVyX21ham9yPSIkMSIKKwkgIG51bWJlcl9taW5vcj0iJDIiCisJICBudW1iZXJfcmV2aXNpb249IiQzIgorCSAgIworCSAgIyBUaGVyZSBhcmUgcmVhbGx5IG9ubHkgdHdvIGtpbmRzIC0tIHRob3NlIHRoYXQKKwkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCisJICAjIGFuZCB0aG9zZSB0aGF0IHN1YnRyYWN0IGFnZSBhbmQgdXNlIGFnZSBhcworCSAgIyBhIG1pbm9yIHZlcnNpb24uICBCdXQsIHRoZW4gdGhlcmUgaXMgaXJpeAorCSAgIyB3aGljaCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KKwkgICMKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgIyBjb3JyZWN0IGxpbnV4IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJICBkYXJ3aW58bGludXh8b3NmfHdpbmRvd3N8bm9uZSkKKwkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgorCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCisJICAgIHJldmlzaW9uPSIkbnVtYmVyX3JldmlzaW9uIgorCSAgICA7OworCSAgZnJlZWJzZC1hb3V0fGZyZWVic2QtZWxmfHFueHxzdW5vcykKKwkgICAgY3VycmVudD0iJG51bWJlcl9tYWpvciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGFnZT0iMCIKKwkgICAgOzsKKwkgIGlyaXh8bm9uc3RvcHV4KQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCisJICAgIDs7CisJICBlc2FjCisJICA7OworCW5vKQorCSAgY3VycmVudD0iJDEiCisJICByZXZpc2lvbj0iJDIiCisJICBhZ2U9IiQzIgorCSAgOzsKKwllc2FjCisKKwkjIENoZWNrIHRoYXQgZWFjaCBvZiB0aGUgdGhpbmdzIGFyZSB2YWxpZCBudW1iZXJzLgorCWNhc2UgJGN1cnJlbnQgaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgXGAkY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJHJldmlzaW9uIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJSRVZJU0lPTiBcYCRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJGFnZSBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciBcYCRjdXJyZW50JyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwlmaQorCisJIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgorCW1ham9yPQorCXZlcnN1ZmZpeD0KKwl2ZXJzdHJpbmc9CisJY2FzZSAkdmVyc2lvbl90eXBlIGluCisJbm9uZSkgOzsKKworCWRhcndpbikKKwkgICMgTGlrZSBMaW51eCwgYnV0IHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBhdmFpbGFibGUgaW4KKwkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgICMgRGFyd2luIGxkIGRvZXNuJ3QgbGlrZSAwIGZvciB0aGVzZSBvcHRpb25zLi4uCisJICBmdW5jX2FyaXRoICRjdXJyZW50ICsgMQorCSAgbWlub3JfY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHhsY3ZlcnN0cmluZz0iJHt3bH0tY29tcGF0aWJpbGl0eV92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQgJHt3bH0tY3VycmVudF92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCWZyZWVic2QtYW91dCkKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kcmV2aXNpb24iOworCSAgOzsKKworCWZyZWVic2QtZWxmKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCWlyaXggfCBub25zdG9wdXgpCisJICBpZiB0ZXN0ICJYJGx0X2lyaXhfaW5jcmVtZW50IiA9ICJYbm8iOyB0aGVuCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBlbHNlCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlICsgMQorCSAgZmkKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OworCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisJICBlc2FjCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JHJldmlzaW9uCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJHJldmlzaW9uIC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmciCisJICBkb25lCisKKwkgICMgQmVmb3JlIHRoaXMgcG9pbnQsICRtYWpvciBtdXN0IG5vdCBjb250YWluIGAuJy4KKwkgIG1ham9yPS4kbWFqb3IKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlsaW51eCkgIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICA7OworCisJb3NmKQorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSIkY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JGFnZQorCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbworCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2lmYWNlfS4wIgorCSAgZG9uZQorCisJICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCisJICBmdW5jX2FwcGVuZCB2ZXJzdHJpbmcgIjoke2N1cnJlbnR9LjAiCisJICA7OworCisJcW54KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCXN1bm9zKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwl3aW5kb3dzKQorCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQorCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKKwkgIDs7CisKKwkqKQorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciCisJICA7OworCWVzYWMKKworCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCisJaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkgIG1ham9yPQorCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICBkYXJ3aW4pCisJICAgICMgd2UgY2FuJ3QgY2hlY2sgZm9yICIwLjAiIGluIGFyY2hpdmVfY21kcyBkdWUgdG8gcXVvdGluZworCSAgICAjIHByb2JsZW1zLCBzbyB3ZSByZXNldCBpdCBjb21wbGV0ZWx5CisJICAgIHZlcnN0cmluZz0KKwkgICAgOzsKKwkgICopCisJICAgIHZlcnN0cmluZz0iMC4wIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgICB2ZXJzdWZmaXg9CisJICBlbHNlCisJICAgIHZlcnN1ZmZpeD0iLjAuMCIKKwkgIGZpCisJZmkKKworCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAorCWlmIHRlc3QgIiRhdm9pZF92ZXJzaW9uIiA9IHllcyAmJiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICBtYWpvcj0KKwkgIHZlcnN1ZmZpeD0KKwkgIHZlcnN0cmluZz0iIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCisJaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiCisJICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgIGZpCisJZWxzZQorCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCisJZmkKKworICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCisgICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCisgICAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCisgICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluazsgdGhlbgorCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CisJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCisJcmVtb3ZlbGlzdD0KKwl0ZW1wcmVtb3ZlbGlzdD1gJEVDSE8gIiRvdXRwdXRfb2JqZGlyLyoiYAorCWZvciBwIGluICR0ZW1wcmVtb3ZlbGlzdDsgZG8KKwkgIGNhc2UgJHAgaW4KKwkgICAgKi4kb2JqZXh0IHwgKi5nY25vKQorCSAgICAgICA7OworCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9JHtyZWxlYXNlfS4qKQorCSAgICAgICBpZiB0ZXN0ICJYJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiAhPSAiWCI7IHRoZW4KKwkJIGlmICRFQ0hPICIkcCIgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCisJCSB0aGVuCisJCSAgIGNvbnRpbnVlCisJCSBmaQorCSAgICAgICBmaQorCSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCisJICAgICAgIDs7CisJICAgICopIDs7CisJICBlc2FjCisJZG9uZQorCXRlc3QgLW4gIiRyZW1vdmVsaXN0IiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KKwlmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKworCSMgVHJhbnNmb3JtIC5sbyBmaWxlcyB0byAubyBmaWxlcy4KKwlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7ICRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgICMgRWxpbWluYXRlIGFsbCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuCisgICAgICAjZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKyAgICAgICMJbGliX3NlYXJjaF9wYXRoPWAkRUNITyAiJGxpYl9zZWFyY2hfcGF0aCAiIHwgJFNFRCAicyUgJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGxpYnM9YCRFQ0hPICIkZGVwbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiJGRlcGVuZGVuY3lfbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICNkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCXRlbXBfeHJwYXRoPQorCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorCSAgZnVuY19hcHBlbmQgdGVtcF94cnBhdGggIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIGRsZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMgdGhhdCB3b24ndCBiZSBkbHByZW9wZW5lZAorICAgICAgb2xkX2RsZmlsZXM9IiRkbGZpbGVzIgorICAgICAgZGxmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbworCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgICMgTWFrZSBzdXJlIGRscHJlZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMKKyAgICAgIG9sZF9kbHByZWZpbGVzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGRscHJlZmlsZXM9CisgICAgICBmb3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8KKwljYXNlICIkZGxwcmVmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCisJICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKKwkgICAgOzsKKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKKwkgICAgOzsKKwkgICotKi1uZXRic2QqKQorCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgOzsKKwkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKKwkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgOzsKKwkgICopCisJICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCisJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCWZpCisKKwkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCisJbmFtZV9zYXZlPSRuYW1lCisJbGlibmFtZV9zYXZlPSRsaWJuYW1lCisJcmVsZWFzZV9zYXZlPSRyZWxlYXNlCisJdmVyc3VmZml4X3NhdmU9JHZlcnN1ZmZpeAorCW1ham9yX3NhdmU9JG1ham9yCisJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKKwkjIHJlbGVhc2Ugc2hvdWxkIHNob3cgdXAgaW4gdGhlIC1sIChpZSAtbGdtcDUpIHNvIHdlIGRvbid0IHdhbnQgdG8KKwkjIGFkZCBpdCBpbiB0d2ljZS4gIElzIHRoYXQgY29ycmVjdD8KKwlyZWxlYXNlPSIiCisJdmVyc3VmZml4PSIiCisJbWFqb3I9IiIKKwluZXdkZXBsaWJzPQorCWRyb3BwZWRkZXBzPW5vCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwlwYXNzX2FsbCkKKwkgICMgRG9uJ3QgY2hlY2sgZm9yIHNoYXJlZC9zdGF0aWMuICBFdmVyeXRoaW5nIHdvcmtzLgorCSAgIyBUaGlzIG1pZ2h0IGJlIGEgbGl0dGxlIG5haXZlLiAgV2UgbWlnaHQgd2FudCB0byBjaGVjaworCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgorCSAgIyBvc2YzICYgb3NmNCBhbmQgSSdtIG5vdCByZWFsbHkgc3VyZS4uLiBKdXN0CisJICAjIGltcGxlbWVudGluZyB3aGF0IHdhcyBhbHJlYWR5IHRoZSBiZWhhdmlvci4KKwkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKKwkgIDs7CisJdGVzdF9jb21waWxlKQorCSAgIyBUaGlzIGNvZGUgc3RyZXNzZXMgdGhlICJsaWJyYXJpZXMgYXJlIHByb2dyYW1zIiBwYXJhZGlnbSB0byBpdHMKKwkgICMgbGltaXRzLiBNYXliZSBldmVuIGJyZWFrcyBpdC4gIFdlIGNvbXBpbGUgYSBwcm9ncmFtLCBsaW5raW5nIGl0CisJICAjIGFnYWluc3QgdGhlIGRlcGxpYnMgYXMgYSBwcm94eSBmb3IgdGhlIGxpYnJhcnkuICBUaGVuIHdlIGNhbiBjaGVjaworCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0LmMKKwkgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKwkgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQorRU9GCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisJICBpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGliczsgdGhlbgorCSAgICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCWlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJICAqIiAkaSAiKikKKwkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKwkJICAgIGk9IiIKKwkJICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgZGVwbGliX21hdGNoPSQxCisJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgIGVsc2UKKwkJICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgZWNobworCQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCisJCSAgICBlY2hvICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBlbHNlCisJICAgICMgRXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpcnN0IGNvbXBpbGUuICBMZXQncyB0cnkgdG8gc2FsdmFnZQorCSAgICAjIHRoZSBzaXR1YXRpb246IENvbXBpbGUgYSBzZXBhcmF0ZSBwcm9ncmFtIGZvciBlYWNoIGxpYnJhcnkuCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkJaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGk7IHRoZW4KKwkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgICAqIiAkaSAiKikKKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgICAgICBpPSIiCisJCSAgICAgIDs7CisJCSAgICBlc2FjCisJCSAgZmkKKwkJICBpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgICBkZXBsaWJfbWF0Y2g9JDEKKwkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgICAgZWxzZQorCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgICAgZWNobworCQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJICAgICAgZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCisJCSAgICAgIGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICAgIGZpCisJCSAgZmkKKwkJZWxzZQorCQkgIGRyb3BwZWRkZXBzPXllcworCQkgIGVjaG8KKwkJICAkRUNITyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgorCQkgIGVjaG8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKKwkJICBlY2hvICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgorCQkgIGVjaG8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCisJCWZpCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZmkKKwkgIDs7CisJZmlsZV9tYWdpYyopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY19nbG9iIjsgdGhlbgorCQkgIGxpYm5hbWVnbG9iPWBmdW5jX2VjaG9fYWxsICIkbGlibmFtZSIgfCAkU0VEIC1lICRmaWxlX21hZ2ljX2dsb2JgCisJCWVsc2UKKwkJICBsaWJuYW1lZ2xvYj0kbGlibmFtZQorCQlmaQorCQl0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllcyAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBpZiB0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllczsgdGhlbgorCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgorCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorCQkgICAgJG5vY2FzZWdsb2IKKwkJICBlbHNlCisJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisJCSAgZmkKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KKwkJCWNvbnRpbnVlCisJCSAgICAgIGZpCisJCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgorCQkgICAgICAjIGVuZGxlc3MgbG9vcCBiZWxvdywgaW4gY2FzZSBvZiBjeWNsaWMgbGlua3MuCisJCSAgICAgICMgV2UgbWlnaHQgc3RpbGwgZW50ZXIgYW4gZW5kbGVzcyBsb29wLCBzaW5jZSBhIGxpbmsKKwkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAorCQkgICAgICAjIGJ1dCBzbyB3aGF0PworCQkgICAgICBwb3RsaWI9IiRwb3RlbnRfbGliIgorCQkgICAgICB3aGlsZSB0ZXN0IC1oICIkcG90bGliIiAyPi9kZXYvbnVsbDsgZG8KKwkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJHtTRUR9ICdzLy4qIC0+IC8vJ2AKKwkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KKwkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OworCQkJKikgcG90bGliPWAkRUNITyAiJHBvdGxpYiIgfCAkU0VEICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKwkJCWVzYWMKKwkJICAgICAgZG9uZQorCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAorCQkJICRTRUQgLWUgMTBxIHwKKwkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkJCWFfZGVwbGliPSIiCisJCQlicmVhayAyCisJCSAgICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW1hdGNoX3BhdHRlcm4qKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCSAgYV9kZXBsaWI9IiIKKwkJICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKKwkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCisJCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCQkgICAgICBhX2RlcGxpYj0iIgorCQkgICAgICBicmVhayAyCisJCSAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIHJlZ2V4IHBhdHRlcm4gdGVzdCkiCisJCWVsc2UKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkRUNITyAiKioqIHVzaW5nIGEgcmVnZXggcGF0dGVybi4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCWZpCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorCSAgOzsKKwlub25lIHwgdW5rbm93biB8ICopCisJICBuZXdkZXBsaWJzPSIiCisJICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzLyAtbGMkLy87IHMvIC1bTFJdW14gXSovL2cnYAorCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHMgOyBkbworCSAgICAgICMgY2FuJ3QgdXNlIFhzZWQgYmVsb3csIGJlY2F1c2UgJGkgbWlnaHQgY29udGFpbiAnLycKKwkgICAgICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkdG1wX2RlcGxpYnMiIHwgJFNFRCAicywkaSwsImAKKwkgICAgZG9uZQorCSAgZmkKKwkgIGNhc2UgJHRtcF9kZXBsaWJzIGluCisJICAqWyFcCVwgXSopCisJICAgIGVjaG8KKwkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcGxhdGZvcm0uIgorCSAgICBlbHNlCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKKwkgICAgZmkKKwkgICAgZWNobyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCisJICAgIGRyb3BwZWRkZXBzPXllcworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJdmVyc3VmZml4PSR2ZXJzdWZmaXhfc2F2ZQorCW1ham9yPSRtYWpvcl9zYXZlCisJcmVsZWFzZT0kcmVsZWFzZV9zYXZlCisJbGlibmFtZT0kbGlibmFtZV9zYXZlCisJbmFtZT0kbmFtZV9zYXZlCisKKwljYXNlICRob3N0IGluCisJKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgd2l0aCB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgIGVjaG8KKwkgICAgZWNobyAiKioqIFdhcm5pbmc6IGxpYnRvb2wgY291bGQgbm90IHNhdGlzZnkgYWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkiCisJICAgICRFQ0hPICIqKiogZGVwZW5kZW5jaWVzIG9mIG1vZHVsZSAkbGlibmFtZS4gIFRoZXJlZm9yZSwgbGlidG9vbCB3aWxsIGNyZWF0ZSIKKwkgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCisJICAgIGVjaG8gIioqKiBhcHBsaWNhdGlvbiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnLiIKKwkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJICAgICAgZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkgICAgICBlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJICAgICAgZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCSAgICAgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgICBlbHNlCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGZpCisJICBlbHNlCisJICAgIGVjaG8gIioqKiBUaGUgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCisJICAgIGVjaG8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCisJICAgIGVjaG8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKworCSAgICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IG5vOyB0aGVuCisJICAgICAgZWNobworCSAgICAgIGVjaG8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCisJICAgICAgZWNobyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCisJICAgICAgZWNobyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgorCSAgICAgIGVjaG8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJCW9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkJYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgICAgZWxzZQorCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkKKwlmaQorCSMgRG9uZSBjaGVja2luZyBkZXBsaWJzIQorCWRlcGxpYnM9JG5ld2RlcGxpYnMKKyAgICAgIGZpCisgICAgICAjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisgICAgICBjYXNlICRob3N0IGluCisJKi0qLWRhcndpbiopCisJICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIGRlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworCWNhc2UgJGRlcGxpYiBpbgorCS1MKikKKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKwkgIGVzYWMKKwkgIDs7CisJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGRlcGxpYnM9IiRuZXdfbGlicyIKKworICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgorICAgICAgbGlicmFyeV9uYW1lcz0KKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgZGxuYW1lPQorCisgICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSMgUmVtb3ZlICR7d2x9IGluc3RhbmNlcyB3aGVuIGxpbmtpbmcgd2l0aCBsZC4KKwkjIEZJWE1FOiBzaG91bGQgdGVzdCB0aGUgcmlnaHQgX2NtZHMgdmFyaWFibGUuCisJY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisJICAqXCRMRFwgKikgd2w9IDs7CisgICAgICAgIGVzYWMKKwlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorCSAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworCSAgaGFyZGNvZGVfbGliZGlycz0KKwkgIGRlcF9ycGF0aD0KKwkgIHJwYXRoPSIkZmluYWxpemVfcnBhdGgiCisJICB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCQllbHNlCisJCSAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCQkgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJCSAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQkgICAgOzsKKwkJICAqKQorCQkgICAgZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJICAgICAgZWxzZQorCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJCWZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorCSAgICAgIGZpCisJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGRvbmUKKwkgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCSAgICBldmFsICJkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICAgIHJwYXRoPQorCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKwkgICAgZG9uZQorCSAgICBldmFsICIkcnVucGF0aF92YXI9JyRycGF0aFwkJHJ1bnBhdGhfdmFyJzsgZXhwb3J0ICRydW5wYXRoX3ZhciIKKwkgIGZpCisJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgorCWZpCisKKwlzaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgiCisJdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCisJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisJZmkKKworCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJc2hpZnQKKwlyZWFsbmFtZT0iJDEiCisJc2hpZnQKKworCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwllbHNlCisJICBzb25hbWU9IiRyZWFsbmFtZSIKKwlmaQorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisKKwlsaWI9IiRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZSIKKwlsaW5rbmFtZXM9CisJZm9yIGxpbmsKKwlkbworCSAgZnVuY19hcHBlbmQgbGlua25hbWVzICIgJGxpbmsiCisJZG9uZQorCisJIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKKwl0ZXN0IC16ICIkcGljX2ZsYWciICYmIGxpYm9ianM9YCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworCWRlbGZpbGVzPQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMiCisJZmkKKworCW9yaWdfZXhwb3J0X3N5bWJvbHM9CisJY2FzZSAkaG9zdF9vcyBpbgorCWN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgIyBleHBvcnRpbmcgdXNpbmcgdXNlciBzdXBwbGllZCBzeW1maWxlCisJICAgIGlmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiAhPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICMgYW5kIGl0J3MgTk9UIGFscmVhZHkgYSAuZGVmIGZpbGUuIE11c3QgZmlndXJlIG91dAorCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCisJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgorCSAgICAgICMgZXhwb3J0X3N5bWJvbHMgZ2V0cyByZWFzc2lnbmVkIGluc2lkZSB0aGUgInByZXBhcmUKKwkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCisJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCisJICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPQorCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwkgICAgZmkKKwkgIGZpCisJICA7OworCWVzYWMKKworCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgaWYgdGVzdCAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgPSB5ZXMgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBmb3IgY21kMSBpbiAkY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICAjIFRha2UgdGhlIG5vcm1hbCBicmFuY2ggaWYgdGhlIG5tX2ZpbGVfbGlzdF9zcGVjIGJyYW5jaAorCSAgICAgICMgZG9lc24ndCB3b3JrIG9yIGlmIHRvb2wgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkLgorCSAgICAgIGNhc2UgJG5tX2ZpbGVfbGlzdF9zcGVjfiR0b190b29sX2ZpbGVfY21kIGluCisJCSp+ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCB8ICp+ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgfCB+KikKKwkJICB0cnlfbm9ybWFsX2JyYW5jaD15ZXMKKwkJICBldmFsIGNtZD1cIiRjbWQxXCIKKwkJICBmdW5jX2xlbiAiICRjbWQiCisJCSAgbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwkJICA7OworCQkqKQorCQkgIHRyeV9ub3JtYWxfYnJhbmNoPW5vCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgICAgaWYgdGVzdCAiJHRyeV9ub3JtYWxfYnJhbmNoIiA9IHllcyBcCisJCSAmJiB7IHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiBcCisJCSAgICAgIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB9CisJICAgICAgdGhlbgorCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisJICAgICAgZWxpZiB0ZXN0IC1uICIkbm1fZmlsZV9saXN0X3NwZWMiOyB0aGVuCisJCWZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisJCW91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkJc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJCXNhdmVfb3V0cHV0PSRvdXRwdXQKKwkJb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lm5tCisJCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwkJZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCQlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICROTSBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCisJCWZvciBvYmogaW4gJHNhdmVfbGlib2JqczsgZG8KKwkJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkJICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKwkJZG9uZSA+ICIkb3V0cHV0IgorCQlldmFsIGNtZD1cIiRjbWQxXCIKKwkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JworCQlvdXRwdXQ9JHNhdmVfb3V0cHV0CisJCWxpYm9ianM9JHNhdmVfbGlib2JqcworCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorCSAgICAgIGVsc2UKKwkJIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGV4ZWN1dGUgaW4gb25lIHN0ZXAuCisJCWZ1bmNfdmVyYm9zZSAidXNpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZSBmb3IgZXhwb3J0IGxpc3QuLi4iCisJCXNraXBwZWRfZXhwb3J0PToKKwkJIyBCcmVhayBvdXQgZWFybHksIG90aGVyd2lzZSBza2lwcGVkX2V4cG9ydCBtYXkgYmUKKwkJIyBzZXQgdG8gZmFsc2UgYnkgYSBsYXRlciBidXQgc2hvcnRlciBjbWQuCisJCWJyZWFrCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJZmkKKworCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKKwkgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisJICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCisJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisJZmkKKworCXRtcF9kZXBsaWJzPQorCWZvciB0ZXN0X2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIGNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgorCSAgKiIgJHRlc3RfZGVwbGliICIqKSA7OworCSAgKikKKwkgICAgZnVuY19hcHBlbmQgdG1wX2RlcGxpYnMgIiAkdGVzdF9kZXBsaWIiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKworCWlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgJiYKKwkgICAgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXMgJiYKKwkgICAgdGVzdCAteiAiJGxpYm9ianMiOyB0aGVuCisJICAgICMgZXh0cmFjdCB0aGUgYXJjaGl2ZXMsIHNvIHdlIGhhdmUgb2JqZWN0cyB0byBsaXN0LgorCSAgICAjIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgdG8ganVzdCBleHRyYWN0IG9uZSBhcmNoaXZlLgorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGVsc2UKKwkgICAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgICAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAiJHRocmVhZF9zYWZlIiA9IHllcyAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZmxhZyIKKwlmaQorCisJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCisJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKScgfHwgZXhpdCAkPworCWZpCisKKwkjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgIGZpCisJZWxzZQorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICBmaQorCWZpCisKKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmCisJICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIiAmJgorCSAgIGxlbj0kZnVuY19sZW5fcmVzdWx0ICYmCisJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICA6CisJZWxzZQorCSAgIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgcGllY2V3aXNlCisJICAjIG9yLCBpZiB1c2luZyBHTlUgbGQgYW5kIHNraXBwZWRfZXhwb3J0IGlzIG5vdCA6LCB1c2UgYSBsaW5rZXIKKwkgICMgc2NyaXB0LgorCisJICAjIFNhdmUgdGhlIHZhbHVlIG9mICRvdXRwdXQgYW5kICRsaWJvYmpzIGJlY2F1c2Ugd2Ugd2FudCB0bworCSAgIyB1c2UgdGhlbSBsYXRlci4gIElmIHdlIGhhdmUgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsIHdlCisJICAjIHdhbnQgdG8gdXNlIHNhdmVfbGlib2JqcyBhcyBpdCB3YXMgYmVmb3JlCisJICAjIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIHdhcyBleHBhbmRlZCwgYmVjYXVzZSB3ZSBjYW4ndAorCSAgIyBhc3N1bWUgdGhlIGxpbmtlciB1bmRlcnN0YW5kcyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYy4KKwkgICMgVGhpcyBtYXkgaGF2ZSB0byBiZSByZXZpc2l0ZWQsIGluIGNhc2UgdG9vIG1hbnkKKwkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIGdldCBsaW5rZWQgaW4gYW5kIGVuZCB1cCBleGNlZWRpbmcKKwkgICMgdGhlIHNwZWMuCisJICBpZiB0ZXN0IC16ICIkY29udmVuaWVuY2UiIHx8IHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJICBmaQorCSAgc2F2ZV9vdXRwdXQ9JG91dHB1dAorCSAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKwkgIG91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworCSAgIyBDbGVhciB0aGUgcmVsb2FkYWJsZSBvYmplY3QgY3JlYXRpb24gY29tbWFuZCBxdWV1ZSBhbmQKKwkgICMgaW5pdGlhbGl6ZSBrIHRvIG9uZS4KKwkgIHRlc3RfY21kcz0KKwkgIGNvbmNhdF9jbWRzPQorCSAgb2JqbGlzdD0KKwkgIGxhc3Rfcm9iaj0KKwkgIGs9MQorCisJICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lmxua3NjcmlwdAorCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIEdOVSBsZCBzY3JpcHQ6ICRvdXRwdXQiCisJICAgIGVjaG8gJ0lOUFVUICgnID4gJG91dHB1dAorCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGVjaG8gJyknID4+ICRvdXRwdXQKKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICJYJGZpbGVfbGlzdF9zcGVjIiAhPSBYOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCSAgICA6ID4gJG91dHB1dAorCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCisJICAgIHNoaWZ0CisJICAgIGZpcnN0b2JqPQorCSAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllczsgdGhlbgorCSAgICAgIGZpcnN0b2JqPSIkMSAiCisJICAgICAgc2hpZnQKKwkgICAgZmkKKwkgICAgZm9yIG9iagorCSAgICBkbworCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKwkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCisJICAgICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgICAgIGxlbj0kbGVuMAorCisJICAgICAgIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBsaW5rZWQuCisJICAgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgICAgZG8KKwkJZnVuY19sZW4gIiAkb2JqIgorCQlmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJCWxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJaWYgdGVzdCAiWCRvYmpsaXN0IiA9IFggfHwKKwkJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJCSAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJCWVsc2UKKwkJICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQorCQkgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCisJCSAgaWYgdGVzdCAiJGsiIC1lcSAxIDsgdGhlbgorCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KKwkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0CisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkJICBlbHNlCisJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkJICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisJCSAgZmkKKwkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBmdW5jX2FyaXRoICRrICsgMQorCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgb2JqbGlzdD0iICRvYmoiCisJCSAgZnVuY19sZW4gIiAkbGFzdF9yb2JqIgorCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0CisJCSAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlmaQorCSAgICAgIGRvbmUKKwkgICAgICAjIEhhbmRsZSB0aGUgcmVtYWluaW5nIG9iamVjdHMgYnkgY3JlYXRpbmcgb25lIGxhc3QKKwkgICAgICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAorCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHNcIgorCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCisJICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisKKwkgICAgZWxzZQorCSAgICAgIG91dHB1dD0KKwkgICAgZmkKKworCSAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCisJICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGxpYm9ianM9JG91dHB1dAorCSAgICAgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGZpbGUuCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICBmaQorCisJICAgIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgorCisJICAgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KKwkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkJICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgIH0KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCQlsdF9leGl0PSQ/CisKKwkJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkJICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJICAgICRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCisJCWZpCisKKwkJZXhpdCAkbHRfZXhpdAorCSAgICAgIH0KKwkgICAgZG9uZQorCSAgICBJRlM9IiRzYXZlX2lmcyIKKworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCisgICAgICAgICAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICAgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgICAgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAgICAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICAgICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKKwkgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgICAgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCisJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisJICAgIGZpCisJICBmaQorCisJICBsaWJvYmpzPSRvdXRwdXQKKwkgICMgUmVzdG9yZSB0aGUgdmFsdWUgb2Ygb3V0cHV0LgorCSAgb3V0cHV0PSRzYXZlX291dHB1dAorCisJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiICYmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBmaQorCSAgIyBFeHBhbmQgdGhlIGxpYnJhcnkgbGlua2luZyBjb21tYW5kcyBhZ2FpbiB0byByZXNldCB0aGUKKwkgICMgdmFsdWUgb2YgJGxpYm9ianMgZm9yIHBpZWNld2lzZSBsaW5raW5nLgorCisJICAjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisJICAgIGVsc2UKKwkgICAgICBjbWRzPSRtb2R1bGVfY21kcworCSAgICBmaQorCSAgZWxzZQorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGRlbGZpbGVzIjsgdGhlbgorCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcyB0byAkY21kcy4KKwkgIGV2YWwgY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiCisJZmkKKworCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCWZpCisKKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwlmb3IgY21kIGluICRjbWRzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBldmFsIGNtZD1cIiRjbWRcIgorCSAgJG9wdF9zaWxlbnQgfHwgeworCSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgIH0KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJICAgIGx0X2V4aXQ9JD8KKworCSAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCSAgICBmaQorCisJICAgIGV4aXQgJGx0X2V4aXQKKwkgIH0KKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisKKwkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCSAgICBmaQorCSAgZmkKKworCSAgZXhpdCAkRVhJVF9TVUNDRVNTCisJZmkKKworCSMgQ3JlYXRlIGxpbmtzIHRvIHRoZSByZWFsIGxpYnJhcnkuCisJZm9yIGxpbmtuYW1lIGluICRsaW5rbmFtZXM7IGRvCisJICBpZiB0ZXN0ICIkcmVhbG5hbWUiICE9ICIkbGlua25hbWUiOyB0aGVuCisJICAgIGZ1bmNfc2hvd19ldmFsICcoY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRsaW5rbmFtZSIgJiYgJExOX1MgIiRyZWFsbmFtZSIgIiRsaW5rbmFtZSIpJyAnZXhpdCAkPycKKwkgIGZpCisJZG9uZQorCisJIyBJZiAtbW9kdWxlIG9yIC1leHBvcnQtZHluYW1pYyB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGRsbmFtZS4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyB8fCB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzOyB0aGVuCisJICAjIE9uIGFsbCBrbm93biBvcGVyYXRpbmcgc3lzdGVtcywgdGhlc2UgYXJlIGlkZW50aWNhbC4KKwkgIGRsbmFtZT0iJHNvbmFtZSIKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvYmopCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorICAgICAgZmkKKworICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgorICAgICAgKlwgLWwqIHwgKlwgLUwqKQorCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIGNhc2UgJG91dHB1dCBpbgorICAgICAgKi5sbykKKwl0ZXN0IC1uICIkb2JqcyRvbGRfZGVwbGlicyIgJiYgXAorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgorCisJbGlib2JqPSRvdXRwdXQKKwlmdW5jX2xvMm8gIiRsaWJvYmoiCisJb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJOzsKKyAgICAgICopCisJbGlib2JqPQorCW9iaj0iJG91dHB1dCIKKwk7OworICAgICAgZXNhYworCisgICAgICAjIERlbGV0ZSB0aGUgb2xkIG9iamVjdHMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvYmogJGxpYm9iagorCisgICAgICAjIE9iamVjdHMgZnJvbSBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBUaGlzIGFzc3VtZXMKKyAgICAgICMgc2luZ2xlLXZlcnNpb24gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgV2hlbmV2ZXIgd2UgY3JlYXRlCisgICAgICAjIGRpZmZlcmVudCBvbmVzIGZvciBQSUMvbm9uLVBJQywgdGhpcyB3ZSdsbCBoYXZlIHRvIGR1cGxpY2F0ZQorICAgICAgIyB0aGUgZXh0cmFjdGlvbi4KKyAgICAgIHJlbG9hZF9jb252X29ianM9CisgICAgICBnZW50b3A9CisgICAgICAjIHJlbG9hZF9jbWRzIHJ1bnMgJExEIGRpcmVjdGx5LCBzbyBsZXQgdXMgZ2V0IHJpZCBvZgorICAgICAgIyAtV2wgZnJvbSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBhbmQgaG9wZSB3ZSBjYW4gZ2V0IGJ5IHdpdGgKKyAgICAgICMgdHVybmluZyBjb21tYSBpbnRvIHNwYWNlLi4KKyAgICAgIHdsPQorCisgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRFQ0hPICIkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFNFRCAnc3wsfCB8ZydgCisJZWxzZQorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke29ian14IgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgSWYgd2UncmUgbm90IGJ1aWxkaW5nIHNoYXJlZCwgd2UgbmVlZCB0byB1c2Ugbm9uX3BpY19vYmpzCisgICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgbGlib2Jqcz0iJG5vbl9waWNfb2JqZWN0cyIKKworICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisgICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAvXC5saWIkL2Q7ICRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKworICAgICAgb3V0cHV0PSIkb2JqIgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisKKyAgICAgICMgRXhpdCBpZiB3ZSBhcmVuJ3QgZG9pbmcgYSBsaWJyYXJ5IG9iamVjdCBmaWxlLgorICAgICAgaWYgdGVzdCAteiAiJGxpYm9iaiI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCWZpCisKKwkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAorCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJHBpY19mbGFnIiB8fCB0ZXN0ICIkcGljX21vZGUiICE9IGRlZmF1bHQ7IHRoZW4KKwkjIE9ubHkgZG8gY29tbWFuZHMgaWYgd2UgcmVhbGx5IGhhdmUgZGlmZmVyZW50IFBJQyBvYmplY3RzLgorCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKKwlvdXRwdXQ9IiRsaWJvYmoiCisJZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworICAgICAgZmkKKworICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworCisgICAgcHJvZykKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKikgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5leGU7OworICAgICAgZXNhYworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisKKyAgICAgIHRlc3QgIiRwcmVsb2FkIiA9IHllcyBcCisgICAgICAgICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB1bmtub3duIFwKKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmX3N0YXRpYyIgPSB1bmtub3duICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGBMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1kYXJ3aW4qKQorCSMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBpdCBicmVha3MgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMKKwkjIEJ1dCBpcyBzdXBwb3NlZGx5IGZpeGVkIG9uIDEwLjQgb3IgbGF0ZXIgKHlheSEpLgorCWlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KKwkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KKwkgICAgMTAuWzAxMjNdKQorCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICA7OworCSAgZXNhYworCWZpCisJIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIiAkZmluYWxpemVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCTs7CisgICAgICBlc2FjCisKKworICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CisgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorICAgICAgbmV3X2xpYnM9CisgICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKwkqKQorCSAgY2FzZSAiICRjb21waWxlX2RlcGxpYnMgIiBpbgorCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZm9yIGRlcGxpYiBpbiAkY29tcGlsZV9kZXBsaWJzOyBkbworCWNhc2UgJGRlcGxpYiBpbgorCS1MKikKKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKwkgIGVzYWMKKwkgIDs7CisJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19saWJzIgorCisKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRjb21waWxlX2RlcGxpYnMiCisgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGZpbmFsaXplX2RlcGxpYnMiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCWZvciBsaWJkaXIgaW4gJHJwYXRoICR4cnBhdGg7IGRvCisJICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisgICAgICBmaQorCisgICAgICAjIE5vdyBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkgICAgZWxzZQorCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAke0VDSE99ICIkbGliZGlyIiB8ICR7U0VEfSAtZSAncyovbGliJCovYmluKidgCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRsaWJkaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokbGliZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9wZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgZmkKKyAgICAgIGZpbmFsaXplX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRsaWJvYmpzIiAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJIyBUcmFuc2Zvcm0gYWxsIHRoZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFyZCBvYmplY3RzLgorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCWZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJG91dHB1dG5hbWUiICJAUFJPR1JBTUAiICJubyIKKworICAgICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVsaW5rX2NtZHMiOyB0aGVuCisJZnVuY19leGVjdXRlX2NtZHMgIiRwcmVsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9eWVzCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqY2VnY2MqIHwgKm1pbmd3MzJjZSopCisgICAgICAgICMgRGlzYWJsZSB3cmFwcGVycyBmb3IgY2VnY2MgYW5kIG1pbmd3MzJjZSBob3N0cywgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBhbnl3YXkuCisgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIDs7CisgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQorICAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgaWYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IG5vIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0ICIkd3JhcHBlcnNfcmVxdWlyZWQiID0gbm87IHRoZW4KKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCisJIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCisJZXhpdF9zdGF0dXM9MAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCisKKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKwlmaQorCisJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iJworCWZpCisKKwlleGl0ICRleGl0X3N0YXR1cworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJZmluYWxpemVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRmaW5hbGl6ZV9jb21tYW5kIgorICAgICAgZmkKKworICAgICAgY29tcGlsZV92YXI9CisgICAgICBmaW5hbGl6ZV92YXI9CisgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisJICBkb25lCisJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluYWxpemVfcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJGZpbmFsaXplX3Blcm1fcnBhdGg7IGRvCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKwkgIGRvbmUKKwkgIGZpbmFsaXplX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRub19pbnN0YWxsIiA9IHllczsgdGhlbgorCSMgV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyIHNjcmlwdC4KKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0CisJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbms7IHRoZW4KKwkjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwlyZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCisJZnVuY193YXJuaW5nICJ0aGlzIHBsYXRmb3JtIGRvZXMgbm90IGxpa2UgdW5pbnN0YWxsZWQgc2hhcmVkIGxpYnJhcmllcyIKKwlmdW5jX3dhcm5pbmcgIlxgJG91dHB1dCcgd2lsbCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiICE9IG5vOyB0aGVuCisJICBsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFNFRCAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorCSAgZWxzZQorCSAgICAjIGZhc3RfaW5zdGFsbCBpcyBzZXQgdG8gbmVlZGxlc3MKKwkgICAgcmVsaW5rX2NvbW1hbmQ9CisJICBmaQorCWVsc2UKKwkgIGxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKKworICAgICAgIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZXMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisgICAgICBpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiCisJcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKKworICAgICAgIyBRdW90ZSB0aGUgcmVsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKwlmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwkgIGlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCSAgZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsc2UKKwkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZmkKKwlkb25lCisJcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJHJlbGlua19jb21tYW5kKSIKKwlyZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgbm90IGluIGRyeSBydW4gbW9kZS4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJIyB3aW4zMiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBiaW5hcnkgaWYgaXQgaGFzCisJIyBhIC5leGUgc3VmZml4LCBzbyB3ZSBzdHJpcCBpdCBvZmYgaGVyZS4KKwljYXNlICRvdXRwdXQgaW4KKwkgICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwllc2FjCisJIyB0ZXN0IGZvciBjeWd3aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBleHRlbnNpb25zCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiopCisJICAgIGV4ZWV4dD0uZXhlCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dG5hbWUiCisJICAgIG91dHB1dG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworCSAgKikgZXhlZXh0PSA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogKQorCSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb3V0cHV0IiAiIiAiLiIKKwkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIG91dHB1dF9wYXRoPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJICAgIGN3cmFwcGVyc291cmNlPSIkb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYyIKKwkgICAgY3dyYXBwZXI9IiRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlIgorCSAgICAkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjID4gJGN3cmFwcGVyc291cmNlCisKKwkgICAgIyBUaGUgd3JhcHBlciBleGVjdXRhYmxlIGlzIGJ1aWx0IHVzaW5nIHRoZSAkaG9zdCBjb21waWxlciwKKwkgICAgIyBiZWNhdXNlIGl0IGNvbnRhaW5zICRob3N0IHBhdGhzIGFuZCBmaWxlcy4gSWYgY3Jvc3MtCisJICAgICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFyZ2V0IGV4ZWN1dGFibGUsIG11c3QgYmUKKwkgICAgIyBleGVjdXRlZCBvbiB0aGUgJGhvc3Qgb3IgdW5kZXIgYW4gZW11bGF0aW9uIGVudmlyb25tZW50LgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRMVENDICRMVENGTEFHUyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCisJICAgICAgJFNUUklQICRjd3JhcHBlcgorCSAgICB9CisKKwkgICAgIyBOb3csIGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQgZm9yIGZ1bmNfc291cmNlIHVzZToKKwkgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAkY3dyYXBwZXIKKwkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICB0cmFwICIkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KKwkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiIDsgdGhlbgorCQkkY3dyYXBwZXIgLS1sdC1kdW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGVsc2UKKwkJZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmaQorCSAgICB9CisJICA7OworCSAgKiApCisJICAgICRSTSAkb3V0cHV0CisJICAgIHRyYXAgIiRSTSAkb3V0cHV0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJG91dHB1dAorCSAgICBjaG1vZCAreCAkb3V0cHV0CisJICA7OworCWVzYWMKKyAgICAgIH0KKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiB3ZSBuZWVkIHRvIGJ1aWxkIGFuIG9sZC1mYXNoaW9uZWQgYXJjaGl2ZS4KKyAgICBmb3Igb2xkbGliIGluICRvbGRsaWJzOyBkbworCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IGNvbnZlbmllbmNlOyB0aGVuCisJb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKKwlhZGRsaWJzPSIkY29udmVuaWVuY2UiCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBtb2R1bGU7IHRoZW4KKwkgIG9sZG9ianM9IiRsaWJvYmpzX3NhdmUiCisJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwllbHNlCisJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IHllcyAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiI7IHRoZW4KKwkgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRzeW1maWxlb2JqIgorCSAgZmkKKwlmaQorCWFkZGxpYnM9IiRvbGRfY29udmVuaWVuY2UiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KKwlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCWZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworCWZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorICAgICAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworICAgICAgZWxzZQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorCisJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCisJIyB0byBhdm9pZCBjcmVhdGluZyBhcmNoaXZlcyB3aXRoIGR1cGxpY2F0ZSBiYXNlbmFtZXMgaWYgd2UKKwkjIG1pZ2h0IGhhdmUgdG8gZXh0cmFjdCB0aGVtIGFmdGVyd2FyZHMsIGUuZy4sIHdoZW4gY3JlYXRpbmcgYQorCSMgc3RhdGljIGFyY2hpdmUgb3V0IG9mIGEgY29udmVuaWVuY2UgbGlicmFyeSwgb3Igd2hlbiBsaW5raW5nCisJIyB0aGUgZW50aXJldHkgb2YgYSBsaWJ0b29sIGFyY2hpdmUgaW50byBhbm90aGVyIChjdXJyZW50bHkKKwkjIG5vdCBzdXBwb3J0ZWQgYnkgbGlidG9vbCkuCisJaWYgKGZvciBvYmogaW4gJG9sZG9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGRvbmUgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorCSAgOgorCWVsc2UKKwkgIGVjaG8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgY291bnRlcj0xCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgIG9iamJhc2U9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgY2FzZSAiICRvbGRvYmpzICIgaW4KKwkgICAgIiAiKSBvbGRvYmpzPSRvYmogOzsKKwkgICAgKltcIC9dIiRvYmpiYXNlICIqKQorCSAgICAgIHdoaWxlIDo7IGRvCisJCSMgTWFrZSBzdXJlIHdlIGRvbid0IHBpY2sgYW4gYWx0ZXJuYXRlIG5hbWUgdGhhdCBhbHNvCisJCSMgb3ZlcmxhcHMuCisJCW5ld29iaj1sdCRjb3VudGVyLSRvYmpiYXNlCisJCWZ1bmNfYXJpdGggJGNvdW50ZXIgKyAxCisJCWNvdW50ZXI9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWNhc2UgIiAkb2xkb2JqcyAiIGluCisJCSpbXCAvXSIkbmV3b2JqICIqKSA7OworCQkqKSBpZiB0ZXN0ICEgLWYgIiRnZW50b3AvJG5ld29iaiI7IHRoZW4gYnJlYWs7IGZpIDs7CisJCWVzYWMKKwkgICAgICBkb25lCisJICAgICAgZnVuY19zaG93X2V2YWwgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRvYmoiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCXRvb2xfb2xkbGliPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisKKwlmdW5jX2xlbiAiICRjbWRzIgorCWxlbj0kZnVuY19sZW5fcmVzdWx0CisJaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisJZWxpZiB0ZXN0IC1uICIkYXJjaGl2ZXJfbGlzdF9zcGVjIjsgdGhlbgorCSAgZnVuY192ZXJib3NlICJ1c2luZyBjb21tYW5kIGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgZm9yIG9iaiBpbiAkb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorCSAgZG9uZSA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZAorCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZCIKKwkgIG9sZG9ianM9IiAkYXJjaGl2ZXJfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKwllbHNlCisJICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cworCSAgZnVuY192ZXJib3NlICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgorCSAgUkFOTElCPToKKwkgIG9iamxpc3Q9CisJICBjb25jYXRfY21kcz0KKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgICMgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0PworCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBsYXN0X29sZG9iaj0kb2JqCisJICBkb25lCisJICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKwkgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgbGVuPSRsZW4wCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfbGVuICIgJG9iaiIKKwkgICAgZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAorCSAgICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgorCSAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkgICAgICA6CisJICAgIGVsc2UKKwkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCisJICAgICAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiIgOyB0aGVuCisJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgICAgICBmaQorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCisJICAgICAgb2JqbGlzdD0KKwkgICAgICBsZW49JGxlbjAKKwkgICAgZmkKKwkgIGRvbmUKKwkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgIG9sZG9ianM9JG9iamxpc3QKKwkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgorCSAgZWxzZQorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmaQorCWZpCisgICAgICBmaQorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRjbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZ2VuZXJhdGVkIiAmJiBcCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yJGdlbmVyYXRlZCIKKworICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICoubGEpCisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLiRsaWJleHQiCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKyAgICAgIGZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwllbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwllbHNlCisJICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWZpCisgICAgICBkb25lCisgICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgorICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllcyA7IHRoZW4KKwlyZWxpbmtfY29tbWFuZD0KKyAgICAgIGZpCisKKyAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBvdXRwdXQ9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lImkKKwkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAqLmxhKQorCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgIC1MKikKKwkJZnVuY19zdHJpcG5hbWUgLUwgJycgIiRkZXBsaWIiCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtTCRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJCTs7CisJICAgICAgLVIqKQorCQlmdW5jX3N0cmlwbmFtZSAtUiAnJyAiJGRlcGxpYiIKKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKwkJOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIG5ld2RsZmlsZXM9CisKKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCWZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkJIyBPbmx5IHBhc3MgcHJlb3BlbmVkIGZpbGVzIHRvIHRoZSBwc2V1ZG8tYXJjaGl2ZSAoZm9yCisJCSMgZXZlbnR1YWwgbGlua2luZyB3aXRoIHRoZSBhcHAuIHRoYXQgbGlua3MgaXQpIGlmIHdlCisJCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bworCQkjIHRoZSBsaWJyYXJ5OgorCQlmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgIGVsc2UKKwkgICAgbmV3ZGxmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkYWJzIgorCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgZmkKKwkgICRSTSAkb3V0cHV0CisJICAjIHBsYWNlIGRsbmFtZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3aW4KKwkgICMgSW4gZmFjdCwgaXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCB1c2UgdGhpcyBjb2RlIGZvciBhbGwgdGFyZ2V0CisJICAjIHN5c3RlbXMgdGhhdCBjYW4ndCBoYXJkLWNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHRoZWlyIGV4ZWN1dGFibGVzCisJICAjIGFuZCB0aGF0IGhhdmUgbm8gc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZSBpbmRlcGVuZGVudCBvZiBQQVRILAorCSAgIyBidXQgaXQgdHVybnMgb3V0IHdlIGNhbid0IGVhc2lseSBkZXRlcm1pbmUgdGhhdCBmcm9tIGluc3BlY3RpbmcKKwkgICMgbGlidG9vbCB2YXJpYWJsZXMsIHNvIHdlIGhhdmUgdG8gaGFyZC1jb2RlIHRoZSBPU3MgdG8gd2hpY2ggaXQKKwkgICMgYXBwbGllcyBoZXJlOyBhdCB0aGUgbW9tZW50LCB0aGF0IG1lYW5zIHBsYXRmb3JtcyB0aGF0IHVzZSB0aGUgUEUKKwkgICMgb2JqZWN0IGZvcm1hdCB3aXRoIERMTCBmaWxlcy4gIFNlZSB0aGUgbG9uZyBjb21tZW50IGF0IHRoZSB0b3Agb2YKKwkgICMgdGVzdHMvYmluZGlyLmF0IGZvciBmdWxsIGRldGFpbHMuCisJICB0ZGxuYW1lPSRkbG5hbWUKKwkgIGNhc2UgJGhvc3QsJG91dHB1dCwkaW5zdGFsbGVkLCRtb2R1bGUsJGRsbmFtZSBpbgorCSAgICAqY3lnd2luKiwqbGFpLHllcyxubywqLmRsbCB8ICptaW5ndyosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqY2VnY2MqLCpsYWkseWVzLG5vLCouZGxsKQorCSAgICAgICMgSWYgYSAtYmluZGlyIGFyZ3VtZW50IHdhcyBzdXBwbGllZCwgcGxhY2UgdGhlIGRsbCB0aGVyZS4KKwkgICAgICBpZiB0ZXN0ICJ4JGJpbmRpciIgIT0geCA7CisJICAgICAgdGhlbgorCQlmdW5jX3JlbGF0aXZlX3BhdGggIiRpbnN0YWxsX2xpYmRpciIgIiRiaW5kaXIiCisJCXRkbG5hbWU9JGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQkZGxuYW1lCisJICAgICAgZWxzZQorCQkjIE90aGVyd2lzZSBmYWxsIGJhY2sgb24gaGV1cmlzdGljLgorCQl0ZGxuYW1lPS4uL2Jpbi8kZGxuYW1lCisJICAgICAgZmkKKwkgICAgICA7OworCSAgZXNhYworCSAgJEVDSE8gPiAkb3V0cHV0ICJcCisjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIFRoZSBuYW1lIHRoYXQgd2UgY2FuIGRsb3BlbigzKS4KK2RsbmFtZT0nJHRkbG5hbWUnCisKKyMgTmFtZXMgb2YgdGhpcyBsaWJyYXJ5LgorbGlicmFyeV9uYW1lcz0nJGxpYnJhcnlfbmFtZXMnCisKKyMgVGhlIG5hbWUgb2YgdGhlIHN0YXRpYyBhcmNoaXZlLgorb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKKworIyBMaW5rZXIgZmxhZ3MgdGhhdCBjYW4gbm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KK2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9JyRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncycKKworIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCitkZXBlbmRlbmN5X2xpYnM9JyRkZXBlbmRlbmN5X2xpYnMnCisKKyMgTmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFrIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkKK3dlYWtfbGlicmFyeV9uYW1lcz0nJHdlYWtfbGlicycKKworIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciAkbGlibmFtZS4KK2N1cnJlbnQ9JGN1cnJlbnQKK2FnZT0kYWdlCityZXZpc2lvbj0kcmV2aXNpb24KKworIyBJcyB0aGlzIGFuIGFscmVhZHkgaW5zdGFsbGVkIGxpYnJhcnk/CitpbnN0YWxsZWQ9JGluc3RhbGxlZAorCisjIFNob3VsZCB3ZSB3YXJuIGFib3V0IHBvcnRhYmlsaXR5IHdoZW4gbGlua2luZyBhZ2FpbnN0IC1tb2R1bGVzPworc2hvdWxkbm90bGluaz0kbW9kdWxlCisKKyMgRmlsZXMgdG8gZGxvcGVuL2RscHJlb3BlbgorZGxvcGVuPSckZGxmaWxlcycKK2RscHJlb3Blbj0nJGRscHJlZmlsZXMnCisKKyMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKK2xpYmRpcj0nJGluc3RhbGxfbGliZGlyJyIKKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm8gJiYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IHllczsgdGhlbgorCSAgICAkRUNITyA+PiAkb3V0cHV0ICJcCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgorCSAgZmkKKwlkb25lCisgICAgICB9CisKKyAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KKyAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCisgICAgICBmdW5jX3Nob3dfZXZhbCAnKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJG91dHB1dG5hbWUiICYmICRMTl9TICIuLi8kb3V0cHV0bmFtZSIgIiRvdXRwdXRuYW1lIiApJyAnZXhpdCAkPycKKyAgICAgIDs7CisgICAgZXNhYworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit7IHRlc3QgIiRvcHRfbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IH0gJiYKKyAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV91bmluc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfdW5pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIFJNPSIkbm9ub3B0IgorICAgIGZpbGVzPQorICAgIHJtZm9yY2U9CisgICAgZXhpdF9zdGF0dXM9MAorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWYpIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyI7IHJtZm9yY2U9eWVzIDs7CisgICAgICAtKikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIiA7OworICAgICAgKikgZnVuY19hcHBlbmQgZmlsZXMgIiAkYXJnIiA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRSTSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIFJNIHByb2dyYW0iCisKKyAgICBybWRpcnM9CisKKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKyAgICAgIGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgorCW9kaXI9IiRvYmpkaXIiCisgICAgICBlbHNlCisJb2Rpcj0iJGRpci8kb2JqZGlyIgorICAgICAgZmkKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCAmJiBvZGlyPSIkZGlyIgorCisgICAgICAjIFJlbWVtYmVyIG9kaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB0aGVuCisJY2FzZSAiICRybWRpcnMgIiBpbgorCSAgKiIgJG9kaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBybWRpcnMgIiAkb2RpciIgOzsKKwllc2FjCisgICAgICBmaQorCisgICAgICAjIERvbid0IGVycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgorICAgICAgaWYgeyB0ZXN0IC1MICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHsgdGVzdCAtaCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwk6CisgICAgICBlbGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgorCWV4aXRfc3RhdHVzPTEKKwljb250aW51ZQorICAgICAgZWxpZiB0ZXN0ICIkcm1mb3JjZSIgPSB5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgcm1maWxlcz0iJGZpbGUiCisKKyAgICAgIGNhc2UgJG5hbWUgaW4KKyAgICAgICoubGEpCisJIyBQb3NzaWJseSBhIGxpYnRvb2wgYXJjaGl2ZSwgc28gdmVyaWZ5IGl0LgorCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCisJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuIgorCSAgZG9uZQorCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG9sZF9saWJyYXJ5IgorCisJICBjYXNlICIkb3B0X21vZGUiIGluCisJICBjbGVhbikKKwkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KKwkgICAgKiIgJGRsbmFtZSAiKikgOzsKKwkgICAgKikgdGVzdCAtbiAiJGRsbmFtZSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRkbG5hbWUiIDs7CisJICAgIGVzYWMKKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1pIgorCSAgICA7OworCSAgdW5pbnN0YWxsKQorCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgorCSAgICA7OworCSAgZXNhYworCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBvYmplY3QsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgQWRkIFBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kbm9uX3BpY19vYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKikKKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW4gOyB0aGVuCisJICBub2V4ZW5hbWU9JG5hbWUKKwkgIGNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkbmFtZSIKKwkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgIyAkZmlsZSB3aXRoIC5leGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBybWZpbGVzLAorCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCisJICBpZiBmdW5jX2x0d3JhcHBlcl9wICIkZmlsZSI7IHRoZW4KKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICByZWxpbmtfY29tbWFuZD0KKwkgICAgICBmdW5jX3NvdXJjZSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgICBlbHNlCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCisJICAgIGZpCisKKwkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKwkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbmFtZSIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiWCRub2V4ZW5hbWUiICE9ICJYJG5hbWUiIDsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0ke25vZXhlbmFtZX0uYyIKKwkgICAgZmkKKwkgIGZpCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCisgICAgZG9uZQorCisgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbworICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAicm1kaXIgJGRpciA+L2Rldi9udWxsIDI+JjEiCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgJGV4aXRfc3RhdHVzCit9CisKK3sgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCB8fCB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IH0gJiYKKyAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorCit0ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKKyAgaGVscD0iJGdlbmVyaWNfaGVscCIKKyAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKK30KKwordGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCisgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisKK2lmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KKyAgZXZhbCBleGVjICIkZXhlY19jbWQiCisgIGV4aXQgJEVYSVRfRkFJTFVSRQorZmkKKworZXhpdCAkZXhpdF9zdGF0dXMKKworCisjIFRoZSBUQUdzIGJlbG93IGFyZSBkZWZpbmVkIHN1Y2ggdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbgorIyBpbiB3aGljaCB3ZSBkaXNhYmxlIGJvdGgga2luZHMgb2YgbGlicmFyaWVzLiAgR2l2ZW4gY29uZmxpY3RpbmcKKyMgY2hvaWNlcywgd2UgZ28gZm9yIGEgc3RhdGljIGxpYnJhcnksIHRoYXQgaXMgdGhlIG1vc3QgcG9ydGFibGUsCisjIHNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIHdlcmUgZGlzYWJsZWQgYmVjYXVzZQorIyB0aGUgdXNlciBhc2tlZCBmb3IgdGhhdCBvciBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQKKyMgdGhlbS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBBSVgsIGJlY2F1c2Ugd2UgZG9uJ3QKKyMgc3VwcG9ydCBoYXZpbmcgYm90aCBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgZW5hYmxlZCBhdCB0aGUgc2FtZQorIyB0aW1lIG9uIHRoYXQgcGxhdGZvcm0sIHNvIHdlIGRlZmF1bHQgdG8gYSBzaGFyZWQtb25seSBjb25maWd1cmF0aW9uLgorIyBJZiBhIGRpc2FibGUtc2hhcmVkIHRhZyBpcyBnaXZlbiwgd2UnbGwgZmFsbGJhY2sgdG8gYSBzdGF0aWMtb25seQorIyBjb25maWd1cmF0aW9uLiAgQnV0IHdlJ2xsIG5ldmVyIGdvIGZyb20gc3RhdGljLW9ubHkgdG8gc2hhcmVkLW9ubHkuCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKK2J1aWxkX2xpYnRvb2xfbGlicz1ubworYnVpbGRfb2xkX2xpYnM9eWVzCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCitidWlsZF9vbGRfbGlicz1gY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8geWVzOzsgZXNhY2AKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOnNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjoyCisjIEVuZDoKKyMgdmk6c3c9MgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2NoZWNrX2NvbXBpbGVyLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jaGVja19jb21waWxlci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDFlYmZmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jaGVja19jb21waWxlci5tNApAQCAtMCwwICsxLDEwOCBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNC0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyBfQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OX1dJVEhfVkFSKGxhbmd1YWdlLCB2YXJpYWJsZSwgb3B0aW9uKQorIworIyAgIGxhbmd1YWdlIC0gVGhlIGF1dG9jb25mIGxhbmd1YWdlIChDLCBDKyssIE9iamVjdGl2ZSBDLCBPYmplY3RpdmUgQysrLAorIyAgICAgICAgICAgICAgZXRjLikuCisjICAgdmFyaWFibGUgLSBUaGUgdmFyaWFibGUgdG8gYWRkIHRoZSBjaGVja2VkIGNvbXBpbGVyIG9wdGlvbiB0by4KKyMgICBvcHRpb24gICAtIFRoZSBjb21waWxlciBmbGFnIHRvIGNoZWNrLgorIworIyBBZGQsIGlmIHN1cHBvcnRlZCwgdGhlIHNwZWNpZmllZCBjb21waWxlciBmbGFnIGZvciB0aGUgY29tcGlsZXIgc2VsZWN0ZWQKKyMgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgdG8gdGhlIHByb3ZpZGVkIHZhcmlhYmxlLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FYX0NIRUNLX0NPTVBJTEVSX09QVElPTl9XSVRIX1ZBUl0sCitbCisgICAgQUNfTEFOR19QVVNIKCQxKQorICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgX0FDX0xBTkcgY29tcGlsZXIgdW5kZXJzdGFuZHMgJDNdKQorICAgIFNBVkVfW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTPSR7X0FDX0xBTkdfUFJFRklYW11GTEFHU30KKyAgICBTQVZFXyQyPSR7JDJ9CisgICAgX0FDX0xBTkdfUFJFRklYW11GTEFHUz0kMworICAgIEFDX1RSWV9DT01QSUxFKCxbO10sQUNfTVNHX1JFU1VMVChbeWVzXSk7IF9BQ19MQU5HX1BSRUZJWFtdRkxBR1M9IiR7U0FWRV9bXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1N9IjsgJDI9IiR7U0FWRV8kMn0gJDMiLEFDX01TR19SRVNVTFQoW25vXSk7IF9BQ19MQU5HX1BSRUZJWFtdRkxBR1M9JHtTQVZFX1tdX0FDX0xBTkdfUFJFRklYW11GTEFHU307ICQyPSR7U0FWRV8kMn0pOworICAgIHVuc2V0IFNBVkVfW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTCisgICAgdW5zZXQgU0FWRV8kMgorICAgIEFDX0xBTkdfUE9QKCQxKQorXSkKKworIworIyBfQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OKGxhbmd1YWdlLCBvcHRpb24pCisjCisjICAgbGFuZ3VhZ2UgLSBUaGUgYXV0b2NvbmYgbGFuZ3VhZ2UgKEMsIEMrKywgT2JqZWN0aXZlIEMsIE9iamVjdGl2ZSBDKyssCisjICAgICAgICAgICAgICBldGMuKS4KKyMgICBvcHRpb24gICAtIFRoZSBjb21waWxlciBmbGFnIHRvIGNoZWNrLgorIworIyBBZGQsIGlmIHN1cHBvcnRlZCwgdGhlIHNwZWNpZmllZCBjb21waWxlciBmbGFnIGZvciB0aGUgY29tcGlsZXIgc2VsZWN0ZWQKKyMgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OXSwKK1sKKyAgICBBQ19MQU5HX1BVU0goJDEpCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBfQUNfTEFORyBjb21waWxlciB1bmRlcnN0YW5kcyAkMl0pCisgICAgU0FWRV9bXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1M9JHtfQUNfTEFOR19QUkVGSVhbXUZMQUdTfQorICAgIF9BQ19MQU5HX1BSRUZJWFtdRkxBR1M9JDIKKyAgICBBQ19UUllfQ09NUElMRSgsWztdLEFDX01TR19SRVNVTFQoW3llc10pOyBfQUNfTEFOR19QUkVGSVhbXUZMQUdTPSIke1NBVkVfW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTfSAkMiIsQUNfTVNHX1JFU1VMVChbbm9dKTsgX0FDX0xBTkdfUFJFRklYW11GTEFHUz0ke1NBVkVfW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTfSk7CisgICAgdW5zZXQgU0FWRV9bXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1MKKyAgICBBQ19MQU5HX1BPUCgkMSkKK10pCisKKyMKKyMgQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OKGxhbmd1YWdlLCBbdmFyaWFibGUsXSBvcHRpb24pCisjCisjICAgbGFuZ3VhZ2UgLSBUaGUgYXV0b2NvbmYgbGFuZ3VhZ2UgKEMsIEMrKywgT2JqZWN0aXZlIEMsIE9iamVjdGl2ZSBDKyssCisjICAgICAgICAgICAgICBldGMuKS4KKyMgICB2YXJpYWJsZSAtIElmIHN1cHBsaWVkLCB0aGUgdmFyaWFibGUgdG8gYWRkIHRoZSBjaGVja2VkIGNvbXBpbGVyIG9wdGlvbgorIyAgICAgICAgICAgICAgdG8uCisjICAgb3B0aW9uICAgLSBUaGUgY29tcGlsZXIgZmxhZyB0byBjaGVjay4KKyMKKyMgQWRkLCBpZiBzdXBwb3J0ZWQsIHRoZSBzcGVjaWZpZWQgY29tcGlsZXIgZmxhZyBmb3IgdGhlIGNvbXBpbGVyIHNlbGVjdGVkCisjIGZvciB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlLCBvcHRpb25hbGx5IHNhdmluZyBpdCB0byB0aGUgc3BlY2lmaWVkIHZhcmlhYmxlLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OXSwKK1sKKyAgICBpZmVsc2UoJCMsCisgICAgICAgIDMsCisgICAgICAgIFtfQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OX1dJVEhfVkFSKCQxLCAkMiwgJDMpXSwKKyAgICAgICAgW19BWF9DSEVDS19DT01QSUxFUl9PUFRJT04oJDEsICQyKV0pCitdKQorCisjCisjIEFYX0NIRUNLX0NPTVBJTEVSX09QVElPTlMobGFuZ3VhZ2UsIFt2YXJpYWJsZSxdIG9wdGlvbiAuLi4pCisjCisjICAgbGFuZ3VhZ2UgLSBUaGUgYXV0b2NvbmYgbGFuZ3VhZ2UgKEMsIEMrKywgT2JqZWN0aXZlIEMsIE9iamVjdGl2ZSBDKyssCisjICAgICAgICAgICAgICBldGMuKS4KKyMgICB2YXJpYWJsZSAtIElmIHN1cHBsaWVkLCB0aGUgdmFyaWFibGUgdG8gYWRkIHRoZSBjaGVja2VkIGNvbXBpbGVyIG9wdGlvbgorIyAgICAgICAgICAgICAgdG8uCisjICAgb3B0aW9ucyAgLSBUaGUgY29tcGlsZXIgZmxhZ3MgdG8gY2hlY2suCisjCisjIEFkZCwgaWYgc3VwcG9ydGVkLCB0aGUgc3BlY2lmaWVkIGNvbXBpbGVyIGZsYWdzIGZvciB0aGUgY29tcGlsZXIgc2VsZWN0ZWQKKyMgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UsIG9wdGlvbmFsbHkgc2F2aW5nIGl0IHRvIHRoZSBzcGVjaWZpZWQgdmFyaWFibGUuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBWF9DSEVDS19DT01QSUxFUl9PUFRJT05TXSwKK1sKKyAgICBpZmVsc2UoJCMsCisgICAgICAgIDMsCisgICAgICAgIFsKKyAgICAgICAgICAgIGZvciBheF9jb21waWxlcl9vcHRpb24gaW4gWyQzXTsgZG8KKyAgICAgICAgICAgICAgICBfQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OX1dJVEhfVkFSKFskMV0sIFskMl0sICRheF9jb21waWxlcl9vcHRpb24pCisgICAgICAgICAgICBkb25lCisJXSwKKyAgICAgICAgWworICAgICAgICAgICAgZm9yIGF4X2NvbXBpbGVyX29wdGlvbiBpbiBbJDJdOyBkbworICAgICAgICAgICAgICAgIF9BWF9DSEVDS19DT01QSUxFUl9PUFRJT04oWyQxXSwgJGF4X2NvbXBpbGVyX29wdGlvbikKKyAgICAgICAgICAgIGRvbmUKKwldKQorXSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY2hlY2tfZmlsZS5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY2hlY2tfZmlsZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2I3MDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jaGVja19maWxlLm00CkBAIC0wLDAgKzEsNDIgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTQtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSBHTlUgTTQgYXV0b2NvbmYgbWFjcm8gZm9yIGNoZWNraW5nIGZvcgorIyAgICAgIHRoZSBleGlzdGVuY2Ugb2YgZmlsZXMuCisjCisjICAgICAgVGhlIGF1dG9jb25mIHZlcnNpb24gb2YgQUNfQ0hFQ0tfRklMRSBpcyBhYnNvbHV0ZWx5IGJyb2tlbiBpbgorIyAgICAgIHRoYXQgaXQgY2Fubm90IGNoZWNrIGZvciBmaWxlcyB3aGVuIGNyb3NzLWNvbXBpbGluZyBldmVuIHRob3VnaAorIyAgICAgIHRoZSBvbmx5IHRoaW5nIGl0IHJlbGllcyB1cG9uIGlzIGEgc2hlbGwgZmlsZSByZWFkYWJpbGl0eQorIyAgICAgIGNoZWNrLgorIworCisjIEFYX0NIRUNLX0ZJTEUoRklMRSwgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBDaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBGSUxFLgorQUNfREVGVU4oW0FYX0NIRUNLX0ZJTEVdLAorW0FTX1ZBUl9QVVNIREVGKFthY19GaWxlXSwgW2FjX2N2X2ZpbGVfJDFdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkMV0sIFthY19GaWxlXSwKK1tpZiB0ZXN0IC1yICIkMSI7IHRoZW4KKyAgQVNfVkFSX1NFVChbYWNfRmlsZV0sIFt5ZXNdKQorZWxzZQorICBBU19WQVJfU0VUKFthY19GaWxlXSwgW25vXSkKK2ZpXSkKK0FTX1ZBUl9JRihbYWNfRmlsZV0sIFt5ZXNdLCBbJDJdLCBbJDNdKQorQVNfVkFSX1BPUERFRihbYWNfRmlsZV0pZG5sCitdKSMgQVhfQ0hFQ0tfRklMRQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jaGVja19wcmVwcm9jZXNzb3IubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2NoZWNrX3ByZXByb2Nlc3Nvci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGZhYzkyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jaGVja19wcmVwcm9jZXNzb3IubTQKQEAgLTAsMCArMSwxMTYgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGEgbnVtYmVyIG9mIEdOVSBhdXRvY29uZiBNNC1zdHlsZSBtYWNyb3MKKyMgICAgICBmb3IgY2hlY2tpbmcgbGFuZ3VhZ2Utc3BlY2lmaWMgcHJlcHJvY2Vzc29yIG9wdGlvbnMuCisjCisKKyMKKyMgX0FYX0NIRUNLX1BSRVBST0NFU1NPUl9PUFRJT05fV0lUSF9WQVIobGFuZ3VhZ2UsIHZhcmlhYmxlLCBvcHRpb24pCisjCisjICAgbGFuZ3VhZ2UgLSBUaGUgYXV0b2NvbmYgbGFuZ3VhZ2UgKEMsIEMrKywgT2JqZWN0aXZlIEMsIE9iamVjdGl2ZSBDKyssCisjICAgICAgICAgICAgICBldGMuKS4KKyMgICB2YXJpYWJsZSAtIFRoZSB2YXJpYWJsZSB0byBhZGQgdGhlIGNoZWNrZWQgcHJlcHJvY2Vzc29yIG9wdGlvbiB0by4KKyMgICBvcHRpb24gICAtIFRoZSBwcmVwcm9jZXNzb3IgZmxhZyB0byBjaGVjay4KKyMKKyMgQWRkLCBpZiBzdXBwb3J0ZWQsIHRoZSBzcGVjaWZpZWQgcHJlcHJvY2Vzc29yIGZsYWcgZm9yIHRoZSBwcmVwcm9jZXNzb3IKKyMgc2VsZWN0ZWQgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgdG8gdGhlIHByb3ZpZGVkIHZhcmlhYmxlLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FYX0NIRUNLX1BSRVBST0NFU1NPUl9PUFRJT05fV0lUSF9WQVJdLAorWworICAgIEFDX0xBTkdfUFVTSCgkMSkKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIF9BQ19MQU5HIHByZXByb2Nlc3NvciB1bmRlcnN0YW5kcyAkM10pCisgICAgU0FWRV9DUFBGTEFHUz0ke0NQUEZMQUdTfQorICAgIFNBVkVfJDI9JHskMn0KKyAgICBDUFBGTEFHUz0kMworICAgIEFDX1RSWV9DUFAoLEFDX01TR19SRVNVTFQoW3llc10pOyBDUFBGTEFHUz0iJHtTQVZFX0NQUEZMQUdTfSI7ICQyPSIke1NBVkVfJDJ9ICQzIixBQ19NU0dfUkVTVUxUKFtub10pOyBDUFBGTEFHUz0ke1NBVkVfQ1BQRkxBR1N9OyAkMj0ke1NBVkVfJDJ9KTsKKyAgICB1bnNldCBTQVZFX0NQUEZMQUdTCisgICAgdW5zZXQgU0FWRV8kMgorICAgIEFDX0xBTkdfUE9QKCQxKQorXSkKKworIworIyBfQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTihsYW5ndWFnZSwgb3B0aW9uKQorIworIyAgIGxhbmd1YWdlIC0gVGhlIGF1dG9jb25mIGxhbmd1YWdlIChDLCBDKyssIE9iamVjdGl2ZSBDLCBPYmplY3RpdmUgQysrLAorIyAgICAgICAgICAgICAgZXRjLikuCisjICAgb3B0aW9uICAgLSBUaGUgcHJlcHJvY2Vzc29yIGZsYWcgdG8gY2hlY2suCisjCisjIEFkZCwgaWYgc3VwcG9ydGVkLCB0aGUgc3BlY2lmaWVkIHByZXByb2Nlc3NvciBmbGFnIGZvciB0aGUgcHJlcHJvY2Vzc29yCisjIHNlbGVjdGVkIGZvciB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FYX0NIRUNLX1BSRVBST0NFU1NPUl9PUFRJT05dLAorWworICAgIEFDX0xBTkdfUFVTSCgkMSkKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIF9BQ19MQU5HIHByZXByb2Nlc3NvciB1bmRlcnN0YW5kcyAkMl0pCisgICAgU0FWRV9DUFBGTEFHUz0ke0NQUEZMQUdTfQorICAgIENQUEZMQUdTPSQyCisgICAgQUNfVFJZX0NQUCgsQUNfTVNHX1JFU1VMVChbeWVzXSk7IENQUEZMQUdTPSIke1NBVkVfQ1BQRkxBR1N9ICQyIixBQ19NU0dfUkVTVUxUKFtub10pOyBDUFBGTEFHUz0ke1NBVkVfQ1BQRkxBR1N9KTsKKyAgICB1bnNldCBTQVZFX0NQUEZMQUdTCisgICAgQUNfTEFOR19QT1AoJDEpCitdKQorCisjCisjIEFYX0NIRUNLX1BSRVBST0NFU1NPUl9PUFRJT04obGFuZ3VhZ2UsIFt2YXJpYWJsZSxdIG9wdGlvbikKKyMKKyMgICBsYW5ndWFnZSAtIFRoZSBhdXRvY29uZiBsYW5ndWFnZSAoQywgQysrLCBPYmplY3RpdmUgQywgT2JqZWN0aXZlIEMrKywKKyMgICAgICAgICAgICAgIGV0Yy4pLgorIyAgIHZhcmlhYmxlIC0gSWYgc3VwcGxpZWQsIHRoZSB2YXJpYWJsZSB0byBhZGQgdGhlIGNoZWNrZWQgcHJlcHJvY2Vzc29yIG9wdGlvbgorIyAgICAgICAgICAgICAgdG8uCisjICAgb3B0aW9uICAgLSBUaGUgcHJlcHJvY2Vzc29yIGZsYWcgdG8gY2hlY2suCisjCisjIEFkZCwgaWYgc3VwcG9ydGVkLCB0aGUgc3BlY2lmaWVkIHByZXByb2Nlc3NvciBmbGFnIGZvciB0aGUgcHJlcHJvY2Vzc29yCisjIHNlbGVjdGVkIGZvciB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlLCBvcHRpb25hbGx5IHNhdmluZyBpdCB0byB0aGUgc3BlY2lmaWVkCisjIHZhcmlhYmxlLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTl0sCitbCisgICAgaWZlbHNlKCQjLAorICAgICAgICAzLAorICAgICAgICBbX0FYX0NIRUNLX1BSRVBST0NFU1NPUl9PUFRJT05fV0lUSF9WQVIoJDEsICQyLCAkMyldLAorICAgICAgICBbX0FYX0NIRUNLX1BSRVBST0NFU1NPUl9PUFRJT04oJDEsICQyKV0pCitdKQorCisjCisjIEFYX0NIRUNLX1BSRVBST0NFU1NPUl9PUFRJT05TKGxhbmd1YWdlLCBbdmFyaWFibGUsXSBvcHRpb24gLi4uKQorIworIyAgIGxhbmd1YWdlIC0gVGhlIGF1dG9jb25mIGxhbmd1YWdlIChDLCBDKyssIE9iamVjdGl2ZSBDLCBPYmplY3RpdmUgQysrLAorIyAgICAgICAgICAgICAgZXRjLikuCisjICAgdmFyaWFibGUgLSBJZiBzdXBwbGllZCwgdGhlIHZhcmlhYmxlIHRvIGFkZCB0aGUgY2hlY2tlZCBwcmVwcm9jZXNzb3Igb3B0aW9uCisjICAgICAgICAgICAgICB0by4KKyMgICBvcHRpb25zICAtIFRoZSBwcmVwcm9jZXNzb3IgZmxhZ3MgdG8gY2hlY2suCisjCisjIEFkZCwgaWYgc3VwcG9ydGVkLCB0aGUgc3BlY2lmaWVkIHByZXByb2Nlc3NvciBmbGFncyBmb3IgdGhlIHByZXByb2Nlc3NvcgorIyBzZWxlY3RlZCBmb3IgdGhlIHNwZWNpZmllZCBsYW5ndWFnZSwgb3B0aW9uYWxseSBzYXZpbmcgaXQgdG8gdGhlIHNwZWNpZmllZAorIyB2YXJpYWJsZS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FYX0NIRUNLX1BSRVBST0NFU1NPUl9PUFRJT05TXSwKK1sKKyAgICBpZmVsc2UoJCMsCisgICAgICAgIDMsCisgICAgICAgIFsKKyAgICAgICAgICAgIGZvciBheF9wcmVwcm9jZXNzb3Jfb3B0aW9uIGluIFskM107IGRvCisgICAgICAgICAgICAgICAgX0FYX0NIRUNLX1BSRVBST0NFU1NPUl9PUFRJT05fV0lUSF9WQVIoWyQxXSwgWyQyXSwgJGF4X3ByZXByb2Nlc3Nvcl9vcHRpb24pCisgICAgICAgICAgICBkb25lCisJXSwKKyAgICAgICAgWworICAgICAgICAgICAgZm9yIGF4X3ByZXByb2Nlc3Nvcl9vcHRpb24gaW4gWyQyXTsgZG8KKyAgICAgICAgICAgICAgICBfQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTihbJDFdLCAkYXhfcHJlcHJvY2Vzc29yX29wdGlvbikKKyAgICAgICAgICAgIGRvbmUKKwldKQorXSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY29tcGFyZV92ZXJzaW9uLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jb21wYXJlX3ZlcnNpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkYzBmZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY29tcGFyZV92ZXJzaW9uLm00CkBAIC0wLDAgKzEsMTc3IEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAgICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9jb21wYXJlX3ZlcnNpb24uaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBBWF9DT01QQVJFX1ZFUlNJT04oVkVSU0lPTl9BLCBPUCwgVkVSU0lPTl9CLCBbQUNUSU9OLUlGLVRSVUVdLCBbQUNUSU9OLUlGLUZBTFNFXSkKKyMKKyMgREVTQ1JJUFRJT04KKyMKKyMgICBUaGlzIG1hY3JvIGNvbXBhcmVzIHR3byB2ZXJzaW9uIHN0cmluZ3MuIER1ZSB0byB0aGUgdmFyaW91cyBudW1iZXIgb2YKKyMgICBtaW5vci12ZXJzaW9uIG51bWJlcnMgdGhhdCBjYW4gZXhpc3QsIGFuZCB0aGUgZmFjdCB0aGF0IHN0cmluZworIyAgIGNvbXBhcmlzb25zIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIG51bWVyaWMgY29tcGFyaXNvbnMsIHRoaXMgaXMgbm90CisjICAgbmVjZXNzYXJpbHkgdHJpdmlhbCB0byBkbyBpbiBhIGF1dG9jb25mIHNjcmlwdC4gVGhpcyBtYWNybyBtYWtlcyBkb2luZworIyAgIHRoZXNlIGNvbXBhcmlzb25zIGVhc3kuCisjCisjICAgVGhlIHNpeCBiYXNpYyBjb21wYXJpc29ucyBhcmUgYXZhaWxhYmxlLCBhcyB3ZWxsIGFzIGNoZWNraW5nIGVxdWFsaXR5CisjICAgbGltaXRlZCB0byBhIGNlcnRhaW4gbnVtYmVyIG9mIG1pbm9yLXZlcnNpb24gbGV2ZWxzLgorIworIyAgIFRoZSBvcGVyYXRvciBPUCBkZXRlcm1pbmVzIHdoYXQgdHlwZSBvZiBjb21wYXJpc29uIHRvIGRvLCBhbmQgY2FuIGJlIG9uZQorIyAgIG9mOgorIworIyAgICBlcSAgLSBlcXVhbCAodGVzdCBBID09IEIpCisjICAgIG5lICAtIG5vdCBlcXVhbCAodGVzdCBBICE9IEIpCisjICAgIGxlICAtIGxlc3MgdGhhbiBvciBlcXVhbCAodGVzdCBBIDw9IEIpCisjICAgIGdlICAtIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCAodGVzdCBBID49IEIpCisjICAgIGx0ICAtIGxlc3MgdGhhbiAodGVzdCBBIDwgQikKKyMgICAgZ3QgIC0gZ3JlYXRlciB0aGFuICh0ZXN0IEEgPiBCKQorIworIyAgIEFkZGl0aW9uYWxseSwgdGhlIGVxIGFuZCBuZSBvcGVyYXRvciBjYW4gaGF2ZSBhIG51bWJlciBhZnRlciBpdCB0byBsaW1pdAorIyAgIHRoZSB0ZXN0IHRvIHRoYXQgbnVtYmVyIG9mIG1pbm9yIHZlcnNpb25zLgorIworIyAgICBlcTAgLSBlcXVhbCB1cCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzaG9ydGVyIHZlcnNpb24KKyMgICAgbmUwIC0gbm90IGVxdWFsIHVwIHRvIHRoZSBsZW5ndGggb2YgdGhlIHNob3J0ZXIgdmVyc2lvbgorIyAgICBlcU4gLSBlcXVhbCB1cCB0byBOIHN1Yi12ZXJzaW9uIGxldmVscworIyAgICBuZU4gLSBub3QgZXF1YWwgdXAgdG8gTiBzdWItdmVyc2lvbiBsZXZlbHMKKyMKKyMgICBXaGVuIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgc2hlbGwgY29tbWFuZHMgQUNUSU9OLUlGLVRSVUUgYXJlIHJ1biwKKyMgICBvdGhlcndpc2Ugc2hlbGwgY29tbWFuZHMgQUNUSU9OLUlGLUZBTFNFIGFyZSBydW4uIFRoZSBlbnZpcm9ubWVudAorIyAgIHZhcmlhYmxlICdheF9jb21wYXJlX3ZlcnNpb24nIGlzIGFsd2F5cyBzZXQgdG8gZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnCisjICAgYXMgd2VsbC4KKyMKKyMgICBFeGFtcGxlczoKKyMKKyMgICAgIEFYX0NPTVBBUkVfVkVSU0lPTihbMy4xNS43XSxbbHRdLFszLjE1LjhdKQorIyAgICAgQVhfQ09NUEFSRV9WRVJTSU9OKFszLjE1XSxbbHRdLFszLjE1LjhdKQorIworIyAgIHdvdWxkIGJvdGggYmUgdHJ1ZS4KKyMKKyMgICAgIEFYX0NPTVBBUkVfVkVSU0lPTihbMy4xNS43XSxbZXFdLFszLjE1LjhdKQorIyAgICAgQVhfQ09NUEFSRV9WRVJTSU9OKFszLjE1XSxbZ3RdLFszLjE1LjhdKQorIworIyAgIHdvdWxkIGJvdGggYmUgZmFsc2UuCisjCisjICAgICBBWF9DT01QQVJFX1ZFUlNJT04oWzMuMTUuN10sW2VxMl0sWzMuMTUuOF0pCisjCisjICAgd291bGQgYmUgdHJ1ZSBiZWNhdXNlIGl0IGlzIG9ubHkgY29tcGFyaW5nIHR3byBtaW5vciB2ZXJzaW9ucy4KKyMKKyMgICAgIEFYX0NPTVBBUkVfVkVSU0lPTihbMy4xNS43XSxbZXEwXSxbMy4xNV0pCisjCisjICAgd291bGQgYmUgdHJ1ZSBiZWNhdXNlIGl0IGlzIG9ubHkgY29tcGFyaW5nIHRoZSBsZXNzZXIgbnVtYmVyIG9mIG1pbm9yCisjICAgdmVyc2lvbnMgb2YgdGhlIHR3byB2YWx1ZXMuCisjCisjICAgTm90ZTogVGhlIGNoYXJhY3RlcnMgdGhhdCBzZXBhcmF0ZSB0aGUgdmVyc2lvbiBudW1iZXJzIGRvIG5vdCBtYXR0ZXIuIEFuCisjICAgZW1wdHkgc3RyaW5nIGlzIHRoZSBzYW1lIGFzIHZlcnNpb24gMC4gT1AgaXMgZXZhbHVhdGVkIGJ5IGF1dG9jb25mLCBub3QKKyMgICBjb25maWd1cmUsIHNvIG11c3QgYmUgYSBzdHJpbmcsIG5vdCBhIHZhcmlhYmxlLgorIworIyAgIFRoZSBhdXRob3Igd291bGQgbGlrZSB0byBhY2tub3dsZWRnZSBHdWlkbyBEcmFoZWltIHdob3NlIGFkdmljZSBhYm91dAorIyAgIHRoZSBtNF9jYXNlIGFuZCBtNF9pZnZhbG4gZnVuY3Rpb25zIG1ha2UgdGhpcyBtYWNybyBvbmx5IGluY2x1ZGUgdGhlCisjICAgcG9ydGlvbnMgbmVjZXNzYXJ5IHRvIHBlcmZvcm0gdGhlIHNwZWNpZmljIGNvbXBhcmlzb24gc3BlY2lmaWVkIGJ5IHRoZQorIyAgIE9QIGFyZ3VtZW50IGluIHRoZSBmaW5hbCBjb25maWd1cmUgc2NyaXB0LgorIworIyBMSUNFTlNFCisjCisjICAgQ29weXJpZ2h0IChjKSAyMDA4IFRpbSBUb29sYW4gPHRvb2xhbkBlbGUudXJpLmVkdT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55CisjICAgd2FycmFudHkuCisKKyNzZXJpYWwgMTEKKworZG5sICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0FDX0RFRlVOKFtBWF9DT01QQVJFX1ZFUlNJT05dLCBbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSkKKworICAjIFVzZWQgdG8gaW5kaWNhdGUgdHJ1ZSBvciBmYWxzZSBjb25kaXRpb24KKyAgYXhfY29tcGFyZV92ZXJzaW9uPWZhbHNlCisKKyAgIyBDb252ZXJ0IHRoZSB0d28gdmVyc2lvbiBzdHJpbmdzIHRvIGJlIGNvbXBhcmVkIGludG8gYSBmb3JtYXQgdGhhdAorICAjIGFsbG93cyBhIHNpbXBsZSBzdHJpbmcgY29tcGFyaXNvbi4gIFRoZSBlbmQgcmVzdWx0IGlzIHRoYXQgYSB2ZXJzaW9uCisgICMgc3RyaW5nIG9mIHRoZSBmb3JtIDEuMTIuNS1yNjE3IHdpbGwgYmUgY29udmVydGVkIHRvIHRoZSBmb3JtCisgICMgMDAwMTAwMTIwMDA1MDYxNy4gIEluIG90aGVyIHdvcmRzLCBlYWNoIG51bWJlciBpcyB6ZXJvIHBhZGRlZCB0byBmb3VyCisgICMgZGlnaXRzLCBhbmQgbm9uIGRpZ2l0cyBhcmUgcmVtb3ZlZC4KKyAgQVNfVkFSX1BVU0hERUYoW0FdLFtheF9jb21wYXJlX3ZlcnNpb25fQV0pCisgIEE9YGVjaG8gIiQxIiB8IHNlZCAtZSAncy9cKFtbMC05XV0qXCkvWlwxWi9nJyBcCisgICAgICAgICAgICAgICAgICAgICAtZSAncy9aXChbWzAtOV1dXClaL1owXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1pcKFtbMC05XV1bWzAtOV1dXClaL1owXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1pcKFtbMC05XV1bWzAtOV1dW1swLTldXVwpWi9aMFwxWi9nJyBcCisgICAgICAgICAgICAgICAgICAgICAtZSAncy9bW14wLTldXS8vZydgCisKKyAgQVNfVkFSX1BVU0hERUYoW0JdLFtheF9jb21wYXJlX3ZlcnNpb25fQl0pCisgIEI9YGVjaG8gIiQzIiB8IHNlZCAtZSAncy9cKFtbMC05XV0qXCkvWlwxWi9nJyBcCisgICAgICAgICAgICAgICAgICAgICAtZSAncy9aXChbWzAtOV1dXClaL1owXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1pcKFtbMC05XV1bWzAtOV1dXClaL1owXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1pcKFtbMC05XV1bWzAtOV1dW1swLTldXVwpWi9aMFwxWi9nJyBcCisgICAgICAgICAgICAgICAgICAgICAtZSAncy9bW14wLTldXS8vZydgCisKKyAgZG5sICMgSW4gdGhlIGNhc2Ugb2YgbGUsIGdlLCBsdCwgYW5kIGd0LCB0aGUgc3RyaW5ncyBhcmUgc29ydGVkIGFzIG5lY2Vzc2FyeQorICBkbmwgIyB0aGVuIHRoZSBmaXJzdCBsaW5lIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZS4KKyAgZG5sICMgVGhlIHNlZCByaWdodCBhZnRlciB0aGUgZWNobyBpcyB0byByZW1vdmUgYW55IGluZGVudGVkIHdoaXRlIHNwYWNlLgorICBtNF9jYXNlKG00X3RvbG93ZXIoJDIpLAorICBbbHRdLFsKKyAgICBheF9jb21wYXJlX3ZlcnNpb249YGVjaG8gIngkQQoreCRCIiB8IHNlZCAncy9eICovLycgfCBzb3J0IC1yIHwgc2VkICJzL3gke0F9L2ZhbHNlLztzL3gke0J9L3RydWUvOzFxImAKKyAgXSwKKyAgW2d0XSxbCisgICAgYXhfY29tcGFyZV92ZXJzaW9uPWBlY2hvICJ4JEEKK3gkQiIgfCBzZWQgJ3MvXiAqLy8nIHwgc29ydCB8IHNlZCAicy94JHtBfS9mYWxzZS87cy94JHtCfS90cnVlLzsxcSJgCisgIF0sCisgIFtsZV0sWworICAgIGF4X2NvbXBhcmVfdmVyc2lvbj1gZWNobyAieCRBCit4JEIiIHwgc2VkICdzL14gKi8vJyB8IHNvcnQgfCBzZWQgInMveCR7QX0vdHJ1ZS87cy94JHtCfS9mYWxzZS87MXEiYAorICBdLAorICBbZ2VdLFsKKyAgICBheF9jb21wYXJlX3ZlcnNpb249YGVjaG8gIngkQQoreCRCIiB8IHNlZCAncy9eICovLycgfCBzb3J0IC1yIHwgc2VkICJzL3gke0F9L3RydWUvO3MveCR7Qn0vZmFsc2UvOzFxImAKKyAgXSxbCisgICAgZG5sIFNwbGl0IHRoZSBvcGVyYXRvciBmcm9tIHRoZSBzdWJ2ZXJzaW9uIGNvdW50IGlmIHByZXNlbnQuCisgICAgbTRfYm1hdGNoKG00X3N1YnN0cigkMiwyKSwKKyAgICBbMF0sWworICAgICAgIyBBIGNvdW50IG9mIHplcm8gbWVhbnMgdXNlIHRoZSBsZW5ndGggb2YgdGhlIHNob3J0ZXIgdmVyc2lvbi4KKyAgICAgICMgRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBBIGFuZCBCLgorICAgICAgYXhfY29tcGFyZV92ZXJzaW9uX2xlbl9BPWBlY2hvICIkQSIgfCAkQVdLICd7cHJpbnQobGVuZ3RoKX0nYAorICAgICAgYXhfY29tcGFyZV92ZXJzaW9uX2xlbl9CPWBlY2hvICIkQiIgfCAkQVdLICd7cHJpbnQobGVuZ3RoKX0nYAorCisgICAgICAjIFNldCBBIHRvIG5vIG1vcmUgdGhhbiBCJ3MgbGVuZ3RoIGFuZCBCIHRvIG5vIG1vcmUgdGhhbiBBJ3MgbGVuZ3RoLgorICAgICAgQT1gZWNobyAiJEEiIHwgc2VkICJzL1woLlx7JGF4X2NvbXBhcmVfdmVyc2lvbl9sZW5fQlx9XCkuKi9cMS8iYAorICAgICAgQj1gZWNobyAiJEIiIHwgc2VkICJzL1woLlx7JGF4X2NvbXBhcmVfdmVyc2lvbl9sZW5fQVx9XCkuKi9cMS8iYAorICAgIF0sCisgICAgW1swLTldK10sWworICAgICAgIyBBIGNvdW50IGdyZWF0ZXIgdGhhbiB6ZXJvIG1lYW5zIHVzZSBvbmx5IHRoYXQgbWFueSBzdWJ2ZXJzaW9ucworICAgICAgQT1gZWNobyAiJEEiIHwgc2VkICJzL1woXChbWzAtOV1dXHs0XH1cKVx7bTRfc3Vic3RyKCQyLDIpXH1cKS4qL1wxLyJgCisgICAgICBCPWBlY2hvICIkQiIgfCBzZWQgInMvXChcKFtbMC05XV1cezRcfVwpXHttNF9zdWJzdHIoJDIsMilcfVwpLiovXDEvImAKKyAgICBdLAorICAgIFsuK10sWworICAgICAgQUNfV0FSTklORygKKyAgICAgICAgW2lsbGVnYWwgT1AgbnVtZXJpYyBwYXJhbWV0ZXI6ICQyXSkKKyAgICBdLFtdKQorCisgICAgIyBQYWQgemVyb3MgYXQgZW5kIG9mIG51bWJlcnMgdG8gbWFrZSBzYW1lIGxlbmd0aC4KKyAgICBheF9jb21wYXJlX3ZlcnNpb25fdG1wX0E9IiRBYGVjaG8gJEIgfCBzZWQgJ3MvLi8wL2cnYCIKKyAgICBCPSIkQmBlY2hvICRBIHwgc2VkICdzLy4vMC9nJ2AiCisgICAgQT0iJGF4X2NvbXBhcmVfdmVyc2lvbl90bXBfQSIKKworICAgICMgQ2hlY2sgZm9yIGVxdWFsaXR5IG9yIGluZXF1YWxpdHkgYXMgbmVjZXNzYXJ5LgorICAgIG00X2Nhc2UobTRfdG9sb3dlcihtNF9zdWJzdHIoJDIsMCwyKSksCisgICAgW2VxXSxbCisgICAgICB0ZXN0ICJ4JEEiID0gIngkQiIgJiYgYXhfY29tcGFyZV92ZXJzaW9uPXRydWUKKyAgICBdLAorICAgIFtuZV0sWworICAgICAgdGVzdCAieCRBIiAhPSAieCRCIiAmJiBheF9jb21wYXJlX3ZlcnNpb249dHJ1ZQorICAgIF0sWworICAgICAgQUNfV0FSTklORyhbaWxsZWdhbCBPUCBwYXJhbWV0ZXI6ICQyXSkKKyAgICBdKQorICBdKQorCisgIEFTX1ZBUl9QT1BERUYoW0FdKWRubAorICBBU19WQVJfUE9QREVGKFtCXSlkbmwKKworICBkbmwgIyBFeGVjdXRlIEFDVElPTi1JRi1UUlVFIC8gQUNUSU9OLUlGLUZBTFNFLgorICBpZiB0ZXN0ICIkYXhfY29tcGFyZV92ZXJzaW9uIiA9ICJ0cnVlIiA7IHRoZW4KKyAgICBtNF9pZnZhbG4oWyQ0XSxbJDRdLFs6XSlkbmwKKyAgICBtNF9pZnZhbG4oWyQ1XSxbZWxzZSAkNV0pZG5sCisgIGZpCitdKSBkbmwgQVhfQ09NUEFSRV9WRVJTSU9OCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eC5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMThlNDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eC5tNApAQCAtMCwwICsxLDU2MiBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9jeHhfY29tcGlsZV9zdGRjeHguaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBBWF9DWFhfQ09NUElMRV9TVERDWFgoVkVSU0lPTiwgW2V4dHxub2V4dF0sIFttYW5kYXRvcnl8b3B0aW9uYWxdKQorIworIyBERVNDUklQVElPTgorIworIyAgIENoZWNrIGZvciBiYXNlbGluZSBsYW5ndWFnZSBjb3ZlcmFnZSBpbiB0aGUgY29tcGlsZXIgZm9yIHRoZSBzcGVjaWZpZWQKKyMgICB2ZXJzaW9uIG9mIHRoZSBDKysgc3RhbmRhcmQuICBJZiBuZWNlc3NhcnksIGFkZCBzd2l0Y2hlcyB0byBDWFggYW5kCisjICAgQ1hYQ1BQIHRvIGVuYWJsZSBzdXBwb3J0LiAgVkVSU0lPTiBtYXkgYmUgJzExJyAoZm9yIHRoZSBDKysxMSBzdGFuZGFyZCkKKyMgICBvciAnMTQnIChmb3IgdGhlIEMrKzE0IHN0YW5kYXJkKS4KKyMKKyMgICBUaGUgc2Vjb25kIGFyZ3VtZW50LCBpZiBzcGVjaWZpZWQsIGluZGljYXRlcyB3aGV0aGVyIHlvdSBpbnNpc3Qgb24gYW4KKyMgICBleHRlbmRlZCBtb2RlIChlLmcuIC1zdGQ9Z251KysxMSkgb3IgYSBzdHJpY3QgY29uZm9ybWFuY2UgbW9kZSAoZS5nLgorIyAgIC1zdGQ9YysrMTEpLiAgSWYgbmVpdGhlciBpcyBzcGVjaWZpZWQsIHlvdSBnZXQgd2hhdGV2ZXIgd29ya3MsIHdpdGgKKyMgICBwcmVmZXJlbmNlIGZvciBhbiBleHRlbmRlZCBtb2RlLgorIworIyAgIFRoZSB0aGlyZCBhcmd1bWVudCwgaWYgc3BlY2lmaWVkICdtYW5kYXRvcnknIG9yIGlmIGxlZnQgdW5zcGVjaWZpZWQsCisjICAgaW5kaWNhdGVzIHRoYXQgYmFzZWxpbmUgc3VwcG9ydCBmb3IgdGhlIHNwZWNpZmllZCBDKysgc3RhbmRhcmQgaXMKKyMgICByZXF1aXJlZCBhbmQgdGhhdCB0aGUgbWFjcm8gc2hvdWxkIGVycm9yIG91dCBpZiBubyBtb2RlIHdpdGggdGhhdAorIyAgIHN1cHBvcnQgaXMgZm91bmQuICBJZiBzcGVjaWZpZWQgJ29wdGlvbmFsJywgdGhlbiBjb25maWd1cmF0aW9uIHByb2NlZWRzCisjICAgcmVnYXJkbGVzcywgYWZ0ZXIgZGVmaW5pbmcgSEFWRV9DWFgke1ZFUlNJT059IGlmIGFuZCBvbmx5IGlmIGEKKyMgICBzdXBwb3J0aW5nIG1vZGUgaXMgZm91bmQuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDggQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisjICAgQ29weXJpZ2h0IChjKSAyMDEyIFphY2sgV2VpbmJlcmcgPHphY2t3QHBhbml4LmNvbT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTMgUm95IFN0b2duZXIgPHJveXN0Z25yQGljZXMudXRleGFzLmVkdT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTUgR29vZ2xlIEluYy47IGNvbnRyaWJ1dGVkIGJ5IEFsZXhleSBTb2tvbG92IDxzb2tvbG92QGdvb2dsZS5jb20+CisjICAgQ29weXJpZ2h0IChjKSAyMDE1IFBhdWwgTm9ybWFuIDxwZW5vcm1hbkBtYWMuY29tPgorIyAgIENvcHlyaWdodCAoYykgMjAxNSBNb3JpdHogS2xhbW1sZXIgPG1vcml0ekBrbGFtbWxlci5ldT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLCB3aXRob3V0IGFueQorIyAgIHdhcnJhbnR5LgorCisjc2VyaWFsIDQKKworZG5sICBUaGlzIG1hY3JvIGlzIGJhc2VkIG9uIHRoZSBjb2RlIGZyb20gdGhlIEFYX0NYWF9DT01QSUxFX1NURENYWF8xMSBtYWNybworZG5sICAoc2VyaWFsIHZlcnNpb24gbnVtYmVyIDEzKS4KKworQUNfREVGVU4oW0FYX0NYWF9DT01QSUxFX1NURENYWF0sIFtkbmwKKyAgbTRfaWYoWyQxXSwgWzExXSwgW10sCisgICAgICAgIFskMV0sIFsxNF0sIFtdLAorICAgICAgICBbJDFdLCBbMTddLCBbbTRfZmF0YWwoW3N1cHBvcnQgZm9yIEMrKzE3IG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXSldLAorICAgICAgICBbbTRfZmF0YWwoW2ludmFsaWQgZmlyc3QgYXJndW1lbnQgYCQxJyB0byBBWF9DWFhfQ09NUElMRV9TVERDWFhdKV0pZG5sCisgIG00X2lmKFskMl0sIFtdLCBbXSwKKyAgICAgICAgWyQyXSwgW2V4dF0sIFtdLAorICAgICAgICBbJDJdLCBbbm9leHRdLCBbXSwKKyAgICAgICAgW200X2ZhdGFsKFtpbnZhbGlkIHNlY29uZCBhcmd1bWVudCBgJDInIHRvIEFYX0NYWF9DT01QSUxFX1NURENYWF0pXSlkbmwKKyAgbTRfaWYoWyQzXSwgW10sIFtheF9jeHhfY29tcGlsZV9jeHgkMV9yZXF1aXJlZD10cnVlXSwKKyAgICAgICAgWyQzXSwgW21hbmRhdG9yeV0sIFtheF9jeHhfY29tcGlsZV9jeHgkMV9yZXF1aXJlZD10cnVlXSwKKyAgICAgICAgWyQzXSwgW29wdGlvbmFsXSwgW2F4X2N4eF9jb21waWxlX2N4eCQxX3JlcXVpcmVkPWZhbHNlXSwKKyAgICAgICAgW200X2ZhdGFsKFtpbnZhbGlkIHRoaXJkIGFyZ3VtZW50IGAkMycgdG8gQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXSldKQorICBBQ19MQU5HX1BVU0goW0MrK10pZG5sCisgIGFjX3N1Y2Nlc3M9bm8KKyAgQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciAkQ1hYIHN1cHBvcnRzIEMrKyQxIGZlYXR1cmVzIGJ5IGRlZmF1bHQsCisgIGF4X2N2X2N4eF9jb21waWxlX2N4eCQxLAorICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5XyQxXSldLAorICAgIFtheF9jdl9jeHhfY29tcGlsZV9jeHgkMT15ZXNdLAorICAgIFtheF9jdl9jeHhfY29tcGlsZV9jeHgkMT1ub10pXSkKKyAgaWYgdGVzdCB4JGF4X2N2X2N4eF9jb21waWxlX2N4eCQxID0geHllczsgdGhlbgorICAgIGFjX3N1Y2Nlc3M9eWVzCisgIGZpCisKKyAgbTRfaWYoWyQyXSwgW25vZXh0XSwgW10sIFtkbmwKKyAgaWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRoZW4KKyAgICBmb3Igc3dpdGNoIGluIC1zdGQ9Z251KyskMSAtc3RkPWdudSsrMHg7IGRvCisgICAgICBjYWNoZXZhcj1BU19UUl9TSChbYXhfY3ZfY3h4X2NvbXBpbGVfY3h4JDFfJHN3aXRjaF0pCisgICAgICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyICRDWFggc3VwcG9ydHMgQysrJDEgZmVhdHVyZXMgd2l0aCAkc3dpdGNoLAorICAgICAgICAgICAgICAgICAgICAgJGNhY2hldmFyLAorICAgICAgICBbYWNfc2F2ZV9DWFg9IiRDWFgiCisgICAgICAgICBDWFg9IiRDWFggJHN3aXRjaCIKKyAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV8kMV0pXSwKKyAgICAgICAgICBbZXZhbCAkY2FjaGV2YXI9eWVzXSwKKyAgICAgICAgICBbZXZhbCAkY2FjaGV2YXI9bm9dKQorICAgICAgICAgQ1hYPSIkYWNfc2F2ZV9DWFgiXSkKKyAgICAgIGlmIGV2YWwgdGVzdCB4XCQkY2FjaGV2YXIgPSB4eWVzOyB0aGVuCisgICAgICAgIENYWD0iJENYWCAkc3dpdGNoIgorICAgICAgICBpZiB0ZXN0IC1uICIkQ1hYQ1BQIiA7IHRoZW4KKyAgICAgICAgICBDWFhDUFA9IiRDWFhDUFAgJHN3aXRjaCIKKyAgICAgICAgZmkKKyAgICAgICAgYWNfc3VjY2Vzcz15ZXMKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICBmaV0pCisKKyAgbTRfaWYoWyQyXSwgW2V4dF0sIFtdLCBbZG5sCisgIGlmIHRlc3QgeCRhY19zdWNjZXNzID0geG5vOyB0aGVuCisgICAgZG5sIEhQJ3MgYUNDIG5lZWRzICtzdGQ9YysrMTEgYWNjb3JkaW5nIHRvOgorICAgIGRubCBodHRwOi8vaDIxMDA3Lnd3dzIuaHAuY29tL3BvcnRhbC9kb3dubG9hZC9maWxlcy91bnByb3QvYUN4eC9QREZfUmVsZWFzZV9Ob3Rlcy83NjkxNDktMDAxLnBkZgorICAgIGRubCBDcmF5J3MgY3JheUNDIG5lZWRzICItaCBzdGQ9YysrMTEiCisgICAgZm9yIHN3aXRjaCBpbiAtc3RkPWMrKyQxIC1zdGQ9YysrMHggK3N0ZD1jKyskMSAiLWggc3RkPWMrKyQxIjsgZG8KKyAgICAgIGNhY2hldmFyPUFTX1RSX1NIKFtheF9jdl9jeHhfY29tcGlsZV9jeHgkMV8kc3dpdGNoXSkKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgJENYWCBzdXBwb3J0cyBDKyskMSBmZWF0dXJlcyB3aXRoICRzd2l0Y2gsCisgICAgICAgICAgICAgICAgICAgICAkY2FjaGV2YXIsCisgICAgICAgIFthY19zYXZlX0NYWD0iJENYWCIKKyAgICAgICAgIENYWD0iJENYWCAkc3dpdGNoIgorICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5XyQxXSldLAorICAgICAgICAgIFtldmFsICRjYWNoZXZhcj15ZXNdLAorICAgICAgICAgIFtldmFsICRjYWNoZXZhcj1ub10pCisgICAgICAgICBDWFg9IiRhY19zYXZlX0NYWCJdKQorICAgICAgaWYgZXZhbCB0ZXN0IHhcJCRjYWNoZXZhciA9IHh5ZXM7IHRoZW4KKyAgICAgICAgQ1hYPSIkQ1hYICRzd2l0Y2giCisgICAgICAgIGlmIHRlc3QgLW4gIiRDWFhDUFAiIDsgdGhlbgorICAgICAgICAgIENYWENQUD0iJENYWENQUCAkc3dpdGNoIgorICAgICAgICBmaQorICAgICAgICBhY19zdWNjZXNzPXllcworICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgIGZpXSkKKyAgQUNfTEFOR19QT1AoW0MrK10pCisgIGlmIHRlc3QgeCRheF9jeHhfY29tcGlsZV9jeHgkMV9yZXF1aXJlZCA9IHh0cnVlOyB0aGVuCisgICAgaWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRoZW4KKyAgICAgIEFDX01TR19FUlJPUihbKioqIEEgY29tcGlsZXIgd2l0aCBzdXBwb3J0IGZvciBDKyskMSBsYW5ndWFnZSBmZWF0dXJlcyBpcyByZXF1aXJlZC5dKQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgeCRhY19zdWNjZXNzID0geG5vOyB0aGVuCisgICAgSEFWRV9DWFgkMT0wCisgICAgQUNfTVNHX05PVElDRShbTm8gY29tcGlsZXIgd2l0aCBDKyskMSBzdXBwb3J0IHdhcyBmb3VuZF0pCisgIGVsc2UKKyAgICBIQVZFX0NYWCQxPTEKKyAgICBBQ19ERUZJTkUoSEFWRV9DWFgkMSwxLAorICAgICAgICAgICAgICBbZGVmaW5lIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBiYXNpYyBDKyskMSBzeW50YXhdKQorICBmaQorICBBQ19TVUJTVChIQVZFX0NYWCQxKQorXSkKKworCitkbmwgIFRlc3QgYm9keSBmb3IgY2hlY2tpbmcgQysrMTEgc3VwcG9ydAorCittNF9kZWZpbmUoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfMTFdLAorICBfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5X25ld19pbl8xMQorKQorCisKK2RubCAgVGVzdCBib2R5IGZvciBjaGVja2luZyBDKysxNCBzdXBwb3J0CisKK200X2RlZmluZShbX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV8xNF0sCisgIF9BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfbmV3X2luXzExCisgIF9BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfbmV3X2luXzE0CispCisKKworZG5sICBUZXN0cyBmb3IgbmV3IGZlYXR1cmVzIGluIEMrKzExCisKK200X2RlZmluZShbX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV9uZXdfaW5fMTFdLCBbWworCisvLyBJZiB0aGUgY29tcGlsZXIgYWRtaXRzIHRoYXQgaXQgaXMgbm90IHJlYWR5IGZvciBDKysxMSwgd2h5IHRvcnR1cmUgaXQ/CisvLyBIb3BlZnVsbHksIHRoaXMgd2lsbCBzcGVlZCB1cCB0aGUgdGVzdC4KKworI2lmbmRlZiBfX2NwbHVzcGx1cworCisjZXJyb3IgIlRoaXMgaXMgbm90IGEgQysrIGNvbXBpbGVyIgorCisjZWxpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKworI2Vycm9yICJUaGlzIGlzIG5vdCBhIEMrKzExIGNvbXBpbGVyIgorCisjZWxzZQorCituYW1lc3BhY2UgY3h4MTEKK3sKKworICBuYW1lc3BhY2UgdGVzdF9zdGF0aWNfYXNzZXJ0CisgIHsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBjaGVjaworICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKFQpLCAibm90IGJpZyBlbm91Z2giKTsKKyAgICB9OworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9maW5hbF9vdmVycmlkZQorICB7CisKKyAgICBzdHJ1Y3QgQmFzZQorICAgIHsKKyAgICAgIHZpcnR1YWwgdm9pZCBmKCkge30KKyAgICB9OworCisgICAgc3RydWN0IERlcml2ZWQgOiBwdWJsaWMgQmFzZQorICAgIHsKKyAgICAgIHZpcnR1YWwgdm9pZCBmKCkgb3ZlcnJpZGUge30KKyAgICB9OworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9kb3VibGVfcmlnaHRfYW5nbGVfYnJhY2tldHMKKyAgeworCisgICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBUID4KKyAgICBzdHJ1Y3QgY2hlY2sge307CisKKyAgICB0eXBlZGVmIGNoZWNrPHZvaWQ+IHNpbmdsZV90eXBlOworICAgIHR5cGVkZWYgY2hlY2s8Y2hlY2s8dm9pZD4+IGRvdWJsZV90eXBlOworICAgIHR5cGVkZWYgY2hlY2s8Y2hlY2s8Y2hlY2s8dm9pZD4+PiB0cmlwbGVfdHlwZTsKKyAgICB0eXBlZGVmIGNoZWNrPGNoZWNrPGNoZWNrPGNoZWNrPHZvaWQ+Pj4+IHF1YWRydXBsZV90eXBlOworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9kZWNsdHlwZQorICB7CisKKyAgICBpbnQKKyAgICBmKCkKKyAgICB7CisgICAgICBpbnQgYSA9IDE7CisgICAgICBkZWNsdHlwZShhKSBiID0gMjsKKyAgICAgIHJldHVybiBhICsgYjsKKyAgICB9CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X3R5cGVfZGVkdWN0aW9uCisgIHsKKworICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyID4KKyAgICBzdHJ1Y3QgaXNfc2FtZQorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgVCA+CisgICAgc3RydWN0IGlzX3NhbWU8VCwgVD4KKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyID4KKyAgICBhdXRvCisgICAgYWRkKFQxIGExLCBUMiBhMikgLT4gZGVjbHR5cGUoYTEgKyBhMikKKyAgICB7CisgICAgICByZXR1cm4gYTEgKyBhMjsKKyAgICB9CisKKyAgICBpbnQKKyAgICB0ZXN0KGNvbnN0IGludCBjLCB2b2xhdGlsZSBpbnQgdikKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KGlzX3NhbWU8aW50LCBkZWNsdHlwZSgwKT46OnZhbHVlID09IHRydWUsICIiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKGMpPjo6dmFsdWUgPT0gZmFsc2UsICIiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKHYpPjo6dmFsdWUgPT0gZmFsc2UsICIiKTsKKyAgICAgIGF1dG8gYWMgPSBjOworICAgICAgYXV0byBhdiA9IHY7CisgICAgICBhdXRvIHN1bWkgPSBhYyArIGF2ICsgJ3gnOworICAgICAgYXV0byBzdW1mID0gYWMgKyBhdiArIDEuMDsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKGFjKT46OnZhbHVlID09IHRydWUsICIiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKGF2KT46OnZhbHVlID09IHRydWUsICIiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKHN1bWkpPjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOworICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoc3VtZik+Ojp2YWx1ZSA9PSBmYWxzZSwgIiIpOworICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoYWRkKGMsIHYpKT46OnZhbHVlID09IHRydWUsICIiKTsKKyAgICAgIHJldHVybiAoc3VtZiA+IDAuMCkgPyBzdW1pIDogYWRkKGMsIHYpOworICAgIH0KKworICB9CisKKyAgbmFtZXNwYWNlIHRlc3Rfbm9leGNlcHQKKyAgeworCisgICAgaW50IGYoKSB7IHJldHVybiAwOyB9CisgICAgaW50IGcoKSBub2V4Y2VwdCB7IHJldHVybiAwOyB9CisKKyAgICBzdGF0aWNfYXNzZXJ0KG5vZXhjZXB0KGYoKSkgPT0gZmFsc2UsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vZXhjZXB0KGcoKSkgPT0gdHJ1ZSwgIiIpOworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9jb25zdGV4cHIKKyAgeworCisgICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBDaGFyVCA+CisgICAgdW5zaWduZWQgbG9uZyBjb25zdGV4cHIKKyAgICBzdHJsZW5fY19yKGNvbnN0IENoYXJUICpjb25zdCBzLCBjb25zdCB1bnNpZ25lZCBsb25nIGFjYykgbm9leGNlcHQKKyAgICB7CisgICAgICByZXR1cm4gKnMgPyBzdHJsZW5fY19yKHMgKyAxLCBhY2MgKyAxKSA6IGFjYzsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIENoYXJUID4KKyAgICB1bnNpZ25lZCBsb25nIGNvbnN0ZXhwcgorICAgIHN0cmxlbl9jKGNvbnN0IENoYXJUICpjb25zdCBzKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIHJldHVybiBzdHJsZW5fY19yKHMsIDBVTCk7CisgICAgfQorCisgICAgc3RhdGljX2Fzc2VydChzdHJsZW5fYygiIikgPT0gMFVMLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdHJsZW5fYygiMSIpID09IDFVTCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RybGVuX2MoImV4YW1wbGUiKSA9PSA3VUwsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9jKCJhbm90aGVyXDBleGFtcGxlIikgPT0gN1VMLCAiIik7CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X3J2YWx1ZV9yZWZlcmVuY2VzCisgIHsKKworICAgIHRlbXBsYXRlIDwgaW50IE4gPgorICAgIHN0cnVjdCBhbnN3ZXIKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3RleHByIGludCB2YWx1ZSA9IE47CisgICAgfTsKKworICAgIGFuc3dlcjwxPiBmKGludCYpICAgICAgIHsgcmV0dXJuIGFuc3dlcjwxPigpOyB9CisgICAgYW5zd2VyPDI+IGYoY29uc3QgaW50JikgeyByZXR1cm4gYW5zd2VyPDI+KCk7IH0KKyAgICBhbnN3ZXI8Mz4gZihpbnQmJikgICAgICB7IHJldHVybiBhbnN3ZXI8Mz4oKTsgfQorCisgICAgdm9pZAorICAgIHRlc3QoKQorICAgIHsKKyAgICAgIGludCBpID0gMDsKKyAgICAgIGNvbnN0IGludCBjID0gMDsKKyAgICAgIHN0YXRpY19hc3NlcnQoZGVjbHR5cGUoZihpKSk6OnZhbHVlID09IDEsICIiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoZGVjbHR5cGUoZihjKSk6OnZhbHVlID09IDIsICIiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoZGVjbHR5cGUoZigwKSk6OnZhbHVlID09IDMsICIiKTsKKyAgICB9CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X3VuaWZvcm1faW5pdGlhbGl6YXRpb24KKyAgeworCisgICAgc3RydWN0IHRlc3QKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHplcm8ge307CisgICAgICBzdGF0aWMgY29uc3QgaW50IG9uZSB7MX07CisgICAgfTsKKworICAgIHN0YXRpY19hc3NlcnQodGVzdDo6emVybyA9PSAwLCAiIik7CisgICAgc3RhdGljX2Fzc2VydCh0ZXN0OjpvbmUgPT0gMSwgIiIpOworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9sYW1iZGFzCisgIHsKKworICAgIHZvaWQKKyAgICB0ZXN0MSgpCisgICAgeworICAgICAgYXV0byBsYW1iZGExID0gW10oKXt9OworICAgICAgYXV0byBsYW1iZGEyID0gbGFtYmRhMTsKKyAgICAgIGxhbWJkYTEoKTsKKyAgICAgIGxhbWJkYTIoKTsKKyAgICB9CisKKyAgICBpbnQKKyAgICB0ZXN0MigpCisgICAgeworICAgICAgYXV0byBhID0gW10oaW50IGksIGludCBqKXsgcmV0dXJuIGkgKyBqOyB9KDEsIDIpOworICAgICAgYXV0byBiID0gW10oKSAtPiBpbnQgeyByZXR1cm4gJzAnOyB9KCk7CisgICAgICBhdXRvIGMgPSBbPV0oKXsgcmV0dXJuIGEgKyBiOyB9KCk7CisgICAgICBhdXRvIGQgPSBbJl0oKXsgcmV0dXJuIGM7IH0oKTsKKyAgICAgIGF1dG8gZSA9IFthLCAmYl0oaW50IHgpIG11dGFibGUgeworICAgICAgICBjb25zdCBhdXRvIGlkZW50aXR5ID0gW10oaW50IHkpeyByZXR1cm4geTsgfTsKKyAgICAgICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgYTsgKytpKQorICAgICAgICAgIGEgKz0gYi0tOworICAgICAgICByZXR1cm4geCArIGlkZW50aXR5KGEgKyBiKTsKKyAgICAgIH0oMCk7CisgICAgICByZXR1cm4gYSArIGIgKyBjICsgZCArIGU7CisgICAgfQorCisgICAgaW50CisgICAgdGVzdDMoKQorICAgIHsKKyAgICAgIGNvbnN0IGF1dG8gbnVsbGFyeSA9IFtdKCl7IHJldHVybiAwOyB9OworICAgICAgY29uc3QgYXV0byB1bmFyeSA9IFtdKGludCB4KXsgcmV0dXJuIHg7IH07CisgICAgICB1c2luZyBudWxsYXJ5X3QgPSBkZWNsdHlwZShudWxsYXJ5KTsKKyAgICAgIHVzaW5nIHVuYXJ5X3QgPSBkZWNsdHlwZSh1bmFyeSk7CisgICAgICBjb25zdCBhdXRvIGhpZ2hlcjFzdCA9IFtdKG51bGxhcnlfdCBmKXsgcmV0dXJuIGYoKTsgfTsKKyAgICAgIGNvbnN0IGF1dG8gaGlnaGVyMm5kID0gW3VuYXJ5XShudWxsYXJ5X3QgZjEpeworICAgICAgICByZXR1cm4gW3VuYXJ5LCBmMV0odW5hcnlfdCBmMil7IHJldHVybiBmMih1bmFyeShmMSgpKSk7IH07CisgICAgICB9OworICAgICAgcmV0dXJuIGhpZ2hlcjFzdChudWxsYXJ5KSArIGhpZ2hlcjJuZChudWxsYXJ5KSh1bmFyeSk7CisgICAgfQorCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF92YXJpYWRpY190ZW1wbGF0ZXMKKyAgeworCisgICAgdGVtcGxhdGUgPGludC4uLj4KKyAgICBzdHJ1Y3Qgc3VtOworCisgICAgdGVtcGxhdGUgPGludCBOMCwgaW50Li4uIE4xdG9OPgorICAgIHN0cnVjdCBzdW08TjAsIE4xdG9OLi4uPgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB2YWx1ZSA9IE4wICsgc3VtPE4xdG9OLi4uPjo6dmFsdWU7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDw+CisgICAgc3RydWN0IHN1bTw+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHZhbHVlID0gMDsKKyAgICB9OworCisgICAgc3RhdGljX2Fzc2VydChzdW08Pjo6dmFsdWUgPT0gMCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3VtPDE+Ojp2YWx1ZSA9PSAxLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdW08MjM+Ojp2YWx1ZSA9PSAyMywgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3VtPDEsIDI+Ojp2YWx1ZSA9PSAzLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdW08NSwgNSwgMTE+Ojp2YWx1ZSA9PSAyMSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3VtPDIsIDMsIDUsIDcsIDExLCAxMz46OnZhbHVlID09IDQxLCAiIik7CisKKyAgfQorCisgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTM3MjgxODQvdGVtcGxhdGUtYWxpYXNlcy1hbmQtc2ZpbmFlCisgIC8vIENsYW5nIDMuMSBmYWlscyB3aXRoIGhlYWRlcnMgb2YgbGlic3RkKysgNC44LjMgd2hlbiB1c2luZyBzdGQ6OmZ1bmN0aW9uCisgIC8vIGJlY2F1c2Ugb2YgdGhpcy4KKyAgbmFtZXNwYWNlIHRlc3RfdGVtcGxhdGVfYWxpYXNfc2ZpbmFlCisgIHsKKworICAgIHN0cnVjdCBmb28ge307CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHVzaW5nIG1lbWJlciA9IHR5cGVuYW1lIFQ6Om1lbWJlcl90eXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGZ1bmMoLi4uKSB7fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGZ1bmMobWVtYmVyPFQ+Kikge30KKworICAgIHZvaWQgdGVzdCgpOworCisgICAgdm9pZCB0ZXN0KCkgeyBmdW5jPGZvbz4oMCk7IH0KKworICB9CisKK30gIC8vIG5hbWVzcGFjZSBjeHgxMQorCisjZW5kaWYgIC8vIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKworXV0pCisKKworZG5sICBUZXN0cyBmb3IgbmV3IGZlYXR1cmVzIGluIEMrKzE0CisKK200X2RlZmluZShbX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV9uZXdfaW5fMTRdLCBbWworCisvLyBJZiB0aGUgY29tcGlsZXIgYWRtaXRzIHRoYXQgaXQgaXMgbm90IHJlYWR5IGZvciBDKysxNCwgd2h5IHRvcnR1cmUgaXQ/CisvLyBIb3BlZnVsbHksIHRoaXMgd2lsbCBzcGVlZCB1cCB0aGUgdGVzdC4KKworI2lmbmRlZiBfX2NwbHVzcGx1cworCisjZXJyb3IgIlRoaXMgaXMgbm90IGEgQysrIGNvbXBpbGVyIgorCisjZWxpZiBfX2NwbHVzcGx1cyA8IDIwMTQwMkwKKworI2Vycm9yICJUaGlzIGlzIG5vdCBhIEMrKzE0IGNvbXBpbGVyIgorCisjZWxzZQorCituYW1lc3BhY2UgY3h4MTQKK3sKKworICBuYW1lc3BhY2UgdGVzdF9wb2x5bW9ycGhpY19sYW1iZGFzCisgIHsKKworICAgIGludAorICAgIHRlc3QoKQorICAgIHsKKyAgICAgIGNvbnN0IGF1dG8gbGFtYmRhID0gW10oYXV0byYmLi4uIGFyZ3MpeworICAgICAgICBjb25zdCBhdXRvIGlzdGlueSA9IFtdKGF1dG8geCl7CisgICAgICAgICAgcmV0dXJuIChzaXplb2YoeCkgPT0gMVVMKSA/IDEgOiAwOworICAgICAgICB9OworICAgICAgICBjb25zdCBpbnQgYXJldGlueVtdID0geyBpc3RpbnkoYXJncykuLi4gfTsKKyAgICAgICAgcmV0dXJuIGFyZXRpbnlbMF07CisgICAgICB9OworICAgICAgcmV0dXJuIGxhbWJkYSgxLCAxTCwgMS4wZiwgJzEnKTsKKyAgICB9CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2JpbmFyeV9saXRlcmFscworICB7CisKKyAgICBjb25zdGV4cHIgYXV0byBpdmlpID0gMGIwMDAwMDAwMDAwMTAxMDEwOworICAgIHN0YXRpY19hc3NlcnQoaXZpaSA9PSA0MiwgIndyb25nIHZhbHVlIik7CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2dlbmVyYWxpemVkX2NvbnN0ZXhwcgorICB7CisKKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIENoYXJUID4KKyAgICBjb25zdGV4cHIgdW5zaWduZWQgbG9uZworICAgIHN0cmxlbl9jKGNvbnN0IENoYXJUICpjb25zdCBzKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIGF1dG8gbGVuZ3RoID0gMFVMOworICAgICAgZm9yIChhdXRvIHAgPSBzOyAqcDsgKytwKQorICAgICAgICArK2xlbmd0aDsKKyAgICAgIHJldHVybiBsZW5ndGg7CisgICAgfQorCisgICAgc3RhdGljX2Fzc2VydChzdHJsZW5fYygiIikgPT0gMFVMLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdHJsZW5fYygieCIpID09IDFVTCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RybGVuX2MoInRlc3QiKSA9PSA0VUwsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9jKCJhbm90aGVyXDB0ZXN0IikgPT0gN1VMLCAiIik7CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2xhbWJkYV9pbml0X2NhcHR1cmUKKyAgeworCisgICAgaW50CisgICAgdGVzdCgpCisgICAgeworICAgICAgYXV0byB4ID0gMDsKKyAgICAgIGNvbnN0IGF1dG8gbGFtYmRhMSA9IFthID0geF0oaW50IGIpeyByZXR1cm4gYSArIGI7IH07CisgICAgICBjb25zdCBhdXRvIGxhbWJkYTIgPSBbYSA9IGxhbWJkYTEoeCldKCl7IHJldHVybiBhOyB9OworICAgICAgcmV0dXJuIGxhbWJkYTIoKTsKKyAgICB9CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2RpZ2l0X3NlcGVyYXRvcnMKKyAgeworCisgICAgY29uc3RleHByIGF1dG8gdGVuX21pbGxpb24gPSAxMDAnMDAwJzAwMDsKKyAgICBzdGF0aWNfYXNzZXJ0KHRlbl9taWxsaW9uID09IDEwMDAwMDAwMCwgIiIpOworCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9yZXR1cm5fdHlwZV9kZWR1Y3Rpb24KKyAgeworCisgICAgYXV0byBmKGludCYgeCkgeyByZXR1cm4geDsgfQorICAgIGRlY2x0eXBlKGF1dG8pIGcoaW50JiB4KSB7IHJldHVybiB4OyB9CisKKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiA+CisgICAgc3RydWN0IGlzX3NhbWUKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gdmFsdWUgPSBmYWxzZTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBUID4KKyAgICBzdHJ1Y3QgaXNfc2FtZTxULCBUPgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB2YWx1ZSA9IHRydWU7CisgICAgfTsKKworICAgIGludAorICAgIHRlc3QoKQorICAgIHsKKyAgICAgIGF1dG8geCA9IDA7CisgICAgICBzdGF0aWNfYXNzZXJ0KGlzX3NhbWU8aW50LCBkZWNsdHlwZShmKHgpKT46OnZhbHVlLCAiIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KGlzX3NhbWU8aW50JiwgZGVjbHR5cGUoZyh4KSk+Ojp2YWx1ZSwgIiIpOworICAgICAgcmV0dXJuIHg7CisgICAgfQorCisgIH0KKworfSAgLy8gbmFtZXNwYWNlIGN4eDE0CisKKyNlbmRpZiAgLy8gX19jcGx1c3BsdXMgPj0gMjAxNDAyTAorCitdXSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4XzB4Lm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMHgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjMzk4NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4XzB4Lm00CkBAIC0wLDAgKzEsMTExIEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X2N4eF9jb21waWxlX3N0ZGN4eF8weC5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBBWF9DWFhfQ09NUElMRV9TVERDWFhfMFgKKyMKKyMgREVTQ1JJUFRJT04KKyMKKyMgICBDaGVjayBmb3IgYmFzZWxpbmUgbGFuZ3VhZ2UgY292ZXJhZ2UgaW4gdGhlIGNvbXBpbGVyIGZvciB0aGUgQysrMHgKKyMgICBzdGFuZGFyZC4KKyMKKyMgICBUaGlzIG1hY3JvIGlzIGRlcHJlY2F0ZWQgYW5kIGhhcyBiZWVuIHN1cGVyc2VkZWQgYnkgdGhlCisjICAgQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXzExIG1hY3JvIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDggQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisjCisjICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisjICAgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlCisjICAgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLCB3aXRob3V0IGFueQorIyAgIHdhcnJhbnR5LgorCisjc2VyaWFsIDEwCisKK0FVX0FMSUFTKFtBQ19DWFhfQ09NUElMRV9TVERDWFhfMFhdLCBbQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXzBYXSkKK0FDX0RFRlVOKFtBWF9DWFhfQ09NUElMRV9TVERDWFhfMFhdLCBbCisgIEFDX09CU09MRVRFKFskMF0sIFs7IHVzZSBBWF9DWFhfQ09NUElMRV9TVERDWFhfMTEgaW5zdGVhZF0pCisgIEFDX0NBQ0hFX0NIRUNLKGlmIGcrKyBzdXBwb3J0cyBDKysweCBmZWF0dXJlcyB3aXRob3V0IGFkZGl0aW9uYWwgZmxhZ3MsCisgIGF4X2N2X2N4eF9jb21waWxlX2N4eDB4X25hdGl2ZSwKKyAgW0FDX0xBTkdfU0FWRQorICBBQ19MQU5HX0NQTFVTUExVUworICBBQ19UUllfQ09NUElMRShbCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBjaGVjaworICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKFQpLCAibm90IGJpZyBlbm91Z2giKTsKKyAgICB9OworCisgICAgdHlwZWRlZiBjaGVjazxjaGVjazxib29sPj4gcmlnaHRfYW5nbGVfYnJhY2tldHM7CisKKyAgICBpbnQgYTsKKyAgICBkZWNsdHlwZShhKSBiOworCisgICAgdHlwZWRlZiBjaGVjazxpbnQ+IGNoZWNrX3R5cGU7CisgICAgY2hlY2tfdHlwZSBjOworICAgIGNoZWNrX3R5cGUmJiBjciA9IHN0YXRpY19jYXN0PGNoZWNrX3R5cGUmJj4oYyk7XSwsCisgIGF4X2N2X2N4eF9jb21waWxlX2N4eDB4X25hdGl2ZT15ZXMsIGF4X2N2X2N4eF9jb21waWxlX2N4eDB4X25hdGl2ZT1ubykKKyAgQUNfTEFOR19SRVNUT1JFCisgIF0pCisKKyAgQUNfQ0FDSEVfQ0hFQ0soaWYgZysrIHN1cHBvcnRzIEMrKzB4IGZlYXR1cmVzIHdpdGggLXN0ZD1jKysweCwKKyAgYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MHhfY3h4LAorICBbQUNfTEFOR19TQVZFCisgIEFDX0xBTkdfQ1BMVVNQTFVTCisgIGFjX3NhdmVfQ1hYPSIkQ1hYIgorICBDWFg9IiRDWFggLXN0ZD1jKysweCIKKyAgQUNfVFJZX0NPTVBJTEUoWworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgY2hlY2sKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQpIDw9IHNpemVvZihUKSwgIm5vdCBiaWcgZW5vdWdoIik7CisgICAgfTsKKworICAgIHR5cGVkZWYgY2hlY2s8Y2hlY2s8Ym9vbD4+IHJpZ2h0X2FuZ2xlX2JyYWNrZXRzOworCisgICAgaW50IGE7CisgICAgZGVjbHR5cGUoYSkgYjsKKworICAgIHR5cGVkZWYgY2hlY2s8aW50PiBjaGVja190eXBlOworICAgIGNoZWNrX3R5cGUgYzsKKyAgICBjaGVja190eXBlJiYgY3IgPSBzdGF0aWNfY2FzdDxjaGVja190eXBlJiY+KGMpO10sLAorICBheF9jdl9jeHhfY29tcGlsZV9jeHgweF9jeHg9eWVzLCBheF9jdl9jeHhfY29tcGlsZV9jeHgweF9jeHg9bm8pCisgIENYWD0iJGFjX3NhdmVfQ1hYIgorICBBQ19MQU5HX1JFU1RPUkUKKyAgXSkKKworICBBQ19DQUNIRV9DSEVDSyhpZiBnKysgc3VwcG9ydHMgQysrMHggZmVhdHVyZXMgd2l0aCAtc3RkPWdudSsrMHgsCisgIGF4X2N2X2N4eF9jb21waWxlX2N4eDB4X2d4eCwKKyAgW0FDX0xBTkdfU0FWRQorICBBQ19MQU5HX0NQTFVTUExVUworICBhY19zYXZlX0NYWD0iJENYWCIKKyAgQ1hYPSIkQ1hYIC1zdGQ9Z251KysweCIKKyAgQUNfVFJZX0NPTVBJTEUoWworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgY2hlY2sKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQpIDw9IHNpemVvZihUKSwgIm5vdCBiaWcgZW5vdWdoIik7CisgICAgfTsKKworICAgIHR5cGVkZWYgY2hlY2s8Y2hlY2s8Ym9vbD4+IHJpZ2h0X2FuZ2xlX2JyYWNrZXRzOworCisgICAgaW50IGE7CisgICAgZGVjbHR5cGUoYSkgYjsKKworICAgIHR5cGVkZWYgY2hlY2s8aW50PiBjaGVja190eXBlOworICAgIGNoZWNrX3R5cGUgYzsKKyAgICBjaGVja190eXBlJiYgY3IgPSBzdGF0aWNfY2FzdDxjaGVja190eXBlJiY+KGMpO10sLAorICBheF9jdl9jeHhfY29tcGlsZV9jeHgweF9neHg9eWVzLCBheF9jdl9jeHhfY29tcGlsZV9jeHgweF9neHg9bm8pCisgIENYWD0iJGFjX3NhdmVfQ1hYIgorICBBQ19MQU5HX1JFU1RPUkUKKyAgXSkKKworICBpZiB0ZXN0ICIkYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MHhfbmF0aXZlIiA9IHllcyB8fAorICAgICB0ZXN0ICIkYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MHhfY3h4IiA9IHllcyB8fAorICAgICB0ZXN0ICIkYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MHhfZ3h4IiA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX1NURENYWF8wWCwsW0RlZmluZSBpZiBnKysgc3VwcG9ydHMgQysrMHggZmVhdHVyZXMuIF0pCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMTEubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xMS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWFkZWFmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMTEubTQKQEAgLTAsMCArMSwzOSBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9jeHhfY29tcGlsZV9zdGRjeHhfMTEuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXzExKFtleHR8bm9leHRdLCBbbWFuZGF0b3J5fG9wdGlvbmFsXSkKKyMKKyMgREVTQ1JJUFRJT04KKyMKKyMgICBDaGVjayBmb3IgYmFzZWxpbmUgbGFuZ3VhZ2UgY292ZXJhZ2UgaW4gdGhlIGNvbXBpbGVyIGZvciB0aGUgQysrMTEKKyMgICBzdGFuZGFyZDsgaWYgbmVjZXNzYXJ5LCBhZGQgc3dpdGNoZXMgdG8gQ1hYIGFuZCBDWFhDUFAgdG8gZW5hYmxlCisjICAgc3VwcG9ydC4KKyMKKyMgICBUaGlzIG1hY3JvIGlzIGEgY29udmVuaWVuY2UgYWxpYXMgZm9yIGNhbGxpbmcgdGhlIEFYX0NYWF9DT01QSUxFX1NURENYWAorIyAgIG1hY3JvIHdpdGggdGhlIHZlcnNpb24gc2V0IHRvIEMrKzExLiAgVGhlIHR3byBvcHRpb25hbCBhcmd1bWVudHMgYXJlCisjICAgZm9yd2FyZGVkIGxpdGVyYWxseSBhcyB0aGUgc2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudCByZXNwZWN0aXZlbHkuCisjICAgUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEFYX0NYWF9DT01QSUxFX1NURENYWCBtYWNybyBmb3IKKyMgICBtb3JlIGluZm9ybWF0aW9uLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgbWFjcm8sIHlvdSBhbHNvIG5lZWQgdG8KKyMgICBkb3dubG9hZCB0aGUgYXhfY3h4X2NvbXBpbGVfc3RkY3h4Lm00IGZpbGUuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDggQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisjICAgQ29weXJpZ2h0IChjKSAyMDEyIFphY2sgV2VpbmJlcmcgPHphY2t3QHBhbml4LmNvbT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTMgUm95IFN0b2duZXIgPHJveXN0Z25yQGljZXMudXRleGFzLmVkdT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTUgR29vZ2xlIEluYy47IGNvbnRyaWJ1dGVkIGJ5IEFsZXhleSBTb2tvbG92IDxzb2tvbG92QGdvb2dsZS5jb20+CisjICAgQ29weXJpZ2h0IChjKSAyMDE1IFBhdWwgTm9ybWFuIDxwZW5vcm1hbkBtYWMuY29tPgorIyAgIENvcHlyaWdodCAoYykgMjAxNSBNb3JpdHogS2xhbW1sZXIgPG1vcml0ekBrbGFtbWxlci5ldT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55CisjICAgd2FycmFudHkuCisKKyNzZXJpYWwgMTcKKworQVhfUkVRVUlSRV9ERUZJTkVEKFtBWF9DWFhfQ09NUElMRV9TVERDWFhdKQorQUNfREVGVU4oW0FYX0NYWF9DT01QSUxFX1NURENYWF8xMV0sIFtBWF9DWFhfQ09NUElMRV9TVERDWFgoWzExXSwgWyQxXSwgWyQyXSldKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMTQubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xNC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTEyM2YyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMTQubTQKQEAgLTAsMCArMSwzNCBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9jeHhfY29tcGlsZV9zdGRjeHhfMTQuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXzE0KFtleHR8bm9leHRdLCBbbWFuZGF0b3J5fG9wdGlvbmFsXSkKKyMKKyMgREVTQ1JJUFRJT04KKyMKKyMgICBDaGVjayBmb3IgYmFzZWxpbmUgbGFuZ3VhZ2UgY292ZXJhZ2UgaW4gdGhlIGNvbXBpbGVyIGZvciB0aGUgQysrMTQKKyMgICBzdGFuZGFyZDsgaWYgbmVjZXNzYXJ5LCBhZGQgc3dpdGNoZXMgdG8gQ1hYIGFuZCBDWFhDUFAgdG8gZW5hYmxlCisjICAgc3VwcG9ydC4KKyMKKyMgICBUaGlzIG1hY3JvIGlzIGEgY29udmVuaWVuY2UgYWxpYXMgZm9yIGNhbGxpbmcgdGhlIEFYX0NYWF9DT01QSUxFX1NURENYWAorIyAgIG1hY3JvIHdpdGggdGhlIHZlcnNpb24gc2V0IHRvIEMrKzE0LiAgVGhlIHR3byBvcHRpb25hbCBhcmd1bWVudHMgYXJlCisjICAgZm9yd2FyZGVkIGxpdGVyYWxseSBhcyB0aGUgc2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudCByZXNwZWN0aXZlbHkuCisjICAgUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEFYX0NYWF9DT01QSUxFX1NURENYWCBtYWNybyBmb3IKKyMgICBtb3JlIGluZm9ybWF0aW9uLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgbWFjcm8sIHlvdSBhbHNvIG5lZWQgdG8KKyMgICBkb3dubG9hZCB0aGUgYXhfY3h4X2NvbXBpbGVfc3RkY3h4Lm00IGZpbGUuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMTUgTW9yaXR6IEtsYW1tbGVyIDxtb3JpdHpAa2xhbW1sZXIuZXU+CisjCisjICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisjICAgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlCisjICAgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLCB3aXRob3V0IGFueQorIyAgIHdhcnJhbnR5LgorCisjc2VyaWFsIDQKKworQVhfUkVRVUlSRV9ERUZJTkVEKFtBWF9DWFhfQ09NUElMRV9TVERDWFhdKQorQUNfREVGVU4oW0FYX0NYWF9DT01QSUxFX1NURENYWF8xNF0sIFtBWF9DWFhfQ09NUElMRV9TVERDWFgoWzE0XSwgWyQxXSwgWyQyXSldKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9qbmlfaW5jbHVkZV9kaXIubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2puaV9pbmNsdWRlX2Rpci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWFlYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9qbmlfaW5jbHVkZV9kaXIubTQKQEAgLTAsMCArMSwxMzAgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X2puaV9pbmNsdWRlX2Rpci5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTWU5PUFNJUworIworIyAgIEFYX0pOSV9JTkNMVURFX0RJUgorIworIyBERVNDUklQVElPTgorIworIyAgIEFYX0pOSV9JTkNMVURFX0RJUiBmaW5kcyBpbmNsdWRlIGRpcmVjdG9yaWVzIG5lZWRlZCBmb3IgY29tcGlsaW5nCisjICAgcHJvZ3JhbXMgdXNpbmcgdGhlIEpOSSBpbnRlcmZhY2UuCisjCisjICAgSk5JIGluY2x1ZGUgZGlyZWN0b3JpZXMgYXJlIHVzdWFsbHkgaW4gdGhlIEphdmEgZGlzdHJpYnV0aW9uLiBUaGlzIGlzCisjICAgZGVkdWNlZCBmcm9tIHRoZSB2YWx1ZSBvZiAkSkFWQV9IT01FLCAkSkFWQUMsIG9yIHRoZSBwYXRoIHRvICJqYXZhYyIsIGluCisjICAgdGhhdCBvcmRlci4gV2hlbiB0aGlzIG1hY3JvIGNvbXBsZXRlcywgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIGlzIGxlZnQgaW4KKyMgICB0aGUgdmFyaWFibGUgSk5JX0lOQ0xVREVfRElSUy4KKyMKKyMgICBFeGFtcGxlIHVzYWdlIGZvbGxvd3M6CisjCisjICAgICBBWF9KTklfSU5DTFVERV9ESVIKKyMKKyMgICAgIGZvciBKTklfSU5DTFVERV9ESVIgaW4gJEpOSV9JTkNMVURFX0RJUlMKKyMgICAgIGRvCisjICAgICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkSk5JX0lOQ0xVREVfRElSIgorIyAgICAgZG9uZQorIworIyAgIElmIHlvdSB3YW50IHRvIGZvcmNlIGEgc3BlY2lmaWMgY29tcGlsZXI6CisjCisjICAgLSBhdCB0aGUgY29uZmlndXJlLmluIGxldmVsLCBzZXQgSkFWQUM9eW91cmNvbXBpbGVyIGJlZm9yZSBjYWxsaW5nCisjICAgQVhfSk5JX0lOQ0xVREVfRElSCisjCisjICAgLSBhdCB0aGUgY29uZmlndXJlIGxldmVsLCBzZXRlbnYgSkFWQUMKKyMKKyMgICBOb3RlOiBUaGlzIG1hY3JvIGNhbiB3b3JrIHdpdGggdGhlIGF1dG9jb25mIE00IG1hY3JvcyBmb3IgSmF2YSBwcm9ncmFtcy4KKyMgICBUaGlzIHBhcnRpY3VsYXIgbWFjcm8gaXMgbm90IHBhcnQgb2YgdGhlIG9yaWdpbmFsIHNldCBvZiBtYWNyb3MuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDggRG9uIEFuZGVyc29uIDxkZGFAc2xlZXB5Y2F0LmNvbT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55CisjICAgd2FycmFudHkuCisKKyNzZXJpYWwgMTAKKworQVVfQUxJQVMoW0FDX0pOSV9JTkNMVURFX0RJUl0sIFtBWF9KTklfSU5DTFVERV9ESVJdKQorQUNfREVGVU4oW0FYX0pOSV9JTkNMVURFX0RJUl0sWworCitKTklfSU5DTFVERV9ESVJTPSIiCisKK2lmIHRlc3QgIngkSkFWQV9IT01FIiAhPSB4OyB0aGVuCisJX0pUT1BESVI9IiRKQVZBX0hPTUUiCitlbHNlCisJaWYgdGVzdCAieCRKQVZBQyIgPSB4OyB0aGVuCisJCUpBVkFDPWphdmFjCisJZmkKKwlBQ19QQVRIX1BST0coW19BQ0pOSV9KQVZBQ10sIFskSkFWQUNdLCBbbm9dKQorCWlmIHRlc3QgIngkX0FDSk5JX0pBVkFDIiA9IHhubzsgdGhlbgorCQlBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIEpESzsgdHJ5IHNldHRpbmcgXCRKQVZBQyBvciBcJEpBVkFfSE9NRV0pCisJZmkKKwlfQUNKTklfRk9MTE9XX1NZTUxJTktTKCIkX0FDSk5JX0pBVkFDIikKKwlfSlRPUERJUj1gZWNobyAiJF9BQ0pOSV9GT0xMT1dFRCIgfCBzZWQgLWUgJ3M6Ly8qOi86ZycgLWUgJ3M6L1tbXi9dXSokOjonYAorZmkKKworY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgIGRhcndpbiopICAgICAgICBfSlRPUERJUj1gZWNobyAiJF9KVE9QRElSIiB8IHNlZCAtZSAnczovW1teL11dKiQ6OidgCisgICAgICAgICAgICAgICAgICAgICAgICBfSklOQz0iJF9KVE9QRElSL0hlYWRlcnMiOzsKKyAgICAgICAgKikgICAgICAgICAgICAgIF9KSU5DPSIkX0pUT1BESVIvaW5jbHVkZSI7OworZXNhYworX0FTX0VDSE9fTE9HKFtfSlRPUERJUj0kX0pUT1BESVJdKQorX0FTX0VDSE9fTE9HKFtfSklOQz0kX0pJTkNdKQorCisjIE9uIE1hYyBPUyBYIDEwLjYuNCwgam5pLmggaXMgYSBzeW1saW5rOgorIyAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9KYXZhVk0uZnJhbWV3b3JrL1ZlcnNpb25zL0N1cnJlbnQvSGVhZGVycy9qbmkuaAorIyAtPiAuLi8uLi9DdXJyZW50SkRLL0hlYWRlcnMvam5pLmguCisjCisjIE92ZXJyaWRlIEFDX0NIRUNLX0ZJTEUgd2l0aCBvdXIgb3duIEFYX0NIRUNLX0ZJTEUgdG8gZml4CisjIGNyb3NzLWNvbXBpbGF0aW9uIGlzc3Vlcy4KKworQVhfQ0hFQ0tfRklMRShbJF9KSU5DL2puaS5oXSwKKwlbSk5JX0lOQ0xVREVfRElSUz0iJEpOSV9JTkNMVURFX0RJUlMgJF9KSU5DIl0sCisJW19KVE9QRElSPWBlY2hvICIkX0pUT1BESVIiIHwgc2VkIC1lICdzOi9bW14vXV0qJDo6J2AKKwkgQVhfQ0hFQ0tfRklMRShbJF9KVE9QRElSL2luY2x1ZGUvam5pLmhdLAorCQlbSk5JX0lOQ0xVREVfRElSUz0iJEpOSV9JTkNMVURFX0RJUlMgJF9KVE9QRElSL2luY2x1ZGUiXSwKKyAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIEpESyBoZWFkZXIgZmlsZXNdKSkKKwldKQorCisjIGdldCB0aGUgbGlrZWx5IHN1YmRpcmVjdG9yaWVzIGZvciBzeXN0ZW0gc3BlY2lmaWMgamF2YSBpbmNsdWRlcworY2FzZSAiJGhvc3Rfb3MiIGluCitic2RpKikgICAgICAgICAgX0pOSV9JTkNfU1VCRElSUz0iYnNkb3MiOzsKK2ZyZWVic2QqKSAgICAgICBfSk5JX0lOQ19TVUJESVJTPSJmcmVlYnNkIjs7CitsaW51eCopICAgICAgICAgX0pOSV9JTkNfU1VCRElSUz0ibGludXggZ2VudW5peCI7Oworb3NmKikgICAgICAgICAgIF9KTklfSU5DX1NVQkRJUlM9ImFscGhhIjs7Citzb2xhcmlzKikgICAgICAgX0pOSV9JTkNfU1VCRElSUz0ic29sYXJpcyI7OworbWluZ3cqKQkJX0pOSV9JTkNfU1VCRElSUz0id2luMzIiOzsKK2N5Z3dpbiopCV9KTklfSU5DX1NVQkRJUlM9IndpbjMyIjs7CisqKSAgICAgICAgICAgICAgX0pOSV9JTkNfU1VCRElSUz0iZ2VudW5peCI7OworZXNhYworCisjIGFkZCBhbnkgc3ViZGlyZWN0b3JpZXMgdGhhdCBhcmUgcHJlc2VudAorZm9yIEpJTkNTVUJESVIgaW4gJF9KTklfSU5DX1NVQkRJUlMKK2RvCisgICAgaWYgdGVzdCAtZCAiJF9KVE9QRElSL2luY2x1ZGUvJEpJTkNTVUJESVIiOyB0aGVuCisgICAgICAgICBKTklfSU5DTFVERV9ESVJTPSIkSk5JX0lOQ0xVREVfRElSUyAkX0pUT1BESVIvaW5jbHVkZS8kSklOQ1NVQkRJUiIKKyAgICBmaQorZG9uZQorXSkKKworIyBfQUNKTklfRk9MTE9XX1NZTUxJTktTIDxwYXRoPgorIyBGb2xsb3dzIHN5bWJvbGljIGxpbmtzIG9uIDxwYXRoPiwKKyMgZmluYWxseSBzZXR0aW5nIHZhcmlhYmxlIF9BQ0pOSV9GT0xMT1dFRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FDSk5JX0ZPTExPV19TWU1MSU5LU10sWworIyBmaW5kIHRoZSBpbmNsdWRlIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgamF2YWMgZXhlY3V0YWJsZQorX2N1cj0iJDEiCit3aGlsZSBscyAtbGQgIiRfY3VyIiAyPi9kZXYvbnVsbCB8IGdyZXAgIiAtPiAiID4vZGV2L251bGw7IGRvCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbc3ltbGluayBmb3IgJF9jdXJdKQorICAgICAgICBfc2xpbms9YGxzIC1sZCAiJF9jdXIiIHwgc2VkICdzLy4qIC0+IC8vJ2AKKyAgICAgICAgY2FzZSAiJF9zbGluayIgaW4KKyAgICAgICAgLyopIF9jdXI9IiRfc2xpbmsiOzsKKyAgICAgICAgIyAnWCcgYXZvaWRzIHRyaWdnZXJpbmcgdW53YW50ZWQgZWNobyBvcHRpb25zLgorICAgICAgICAqKSBfY3VyPWBlY2hvICJYJF9jdXIiIHwgc2VkIC1lICdzL15YLy8nIC1lICdzOltbXi9dXSokOjonYCIkX3NsaW5rIjs7CisgICAgICAgIGVzYWMKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbJF9jdXJdKQorZG9uZQorX0FDSk5JX0ZPTExPV0VEPSIkX2N1ciIKK10pIyBfQUNKTkkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfcHJvZ19kb3h5Z2VuLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9wcm9nX2RveHlnZW4ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiMjJiMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfcHJvZ19kb3h5Z2VuLm00CkBAIC0wLDAgKzEsNTMyIEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAgICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X3Byb2dfZG94eWdlbi5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTWU5PUFNJUworIworIyAgIERYX0lOSVRfRE9YWUdFTihQUk9KRUNULU5BTUUsIERPWFlGSUxFLVBBVEgsIFtPVVRQVVQtRElSXSkKKyMgICBEWF9ET1hZR0VOX0ZFQVRVUkUoT058T0ZGKQorIyAgIERYX0RPVF9GRUFUVVJFKE9OfE9GRikKKyMgICBEWF9IVE1MX0ZFQVRVUkUoT058T0ZGKQorIyAgIERYX0NITV9GRUFUVVJFKE9OfE9GRikKKyMgICBEWF9DSElfRkVBVFVSRShPTnxPRkYpCisjICAgRFhfTUFOX0ZFQVRVUkUoT058T0ZGKQorIyAgIERYX1JURl9GRUFUVVJFKE9OfE9GRikKKyMgICBEWF9YTUxfRkVBVFVSRShPTnxPRkYpCisjICAgRFhfUERGX0ZFQVRVUkUoT058T0ZGKQorIyAgIERYX1BTX0ZFQVRVUkUoT058T0ZGKQorIworIyBERVNDUklQVElPTgorIworIyAgIFRoZSBEWF8qX0ZFQVRVUkUgbWFjcm9zIGNvbnRyb2wgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgdGhlIGdpdmVuCisjICAgRG94eWdlbiBmZWF0dXJlLiBTdXBwb3J0ZWQgZmVhdHVyZXMgYXJlICdET1hZR0VOJyBpdHNlbGYsICdET1QnIGZvcgorIyAgIGdlbmVyYXRpbmcgZ3JhcGhpY3MsICdIVE1MJyBmb3IgcGxhaW4gSFRNTCwgJ0NITScgZm9yIGNvbXByZXNzZWQgSFRNTAorIyAgIGhlbHAgKGZvciBNUyB1c2VycyksICdDSEknIGZvciBnZW5lcmF0aW5nIGEgc2VwZXJhdGUgLmNoaSBmaWxlIGJ5IHRoZQorIyAgIC5jaG0gZmlsZSwgYW5kICdNQU4nLCAnUlRGJywgJ1hNTCcsICdQREYnIGFuZCAnUFMnIGZvciB0aGUgYXBwcm9wcmlhdGUKKyMgICBvdXRwdXQgZm9ybWF0cy4gVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIERPWFlHRU5fUEFQRVJfU0laRSBtYXkgYmUKKyMgICBzcGVjaWZpZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgJ2E0d2lkZScgcGFwZXIgc2l6ZS4KKyMKKyMgICBCeSBkZWZhdWx0LCBIVE1MLCBQREYgYW5kIFBTIGRvY3VtZW50YXRpb24gaXMgZ2VuZXJhdGVkIGFzIHRoaXMgc2VlbXMgdG8KKyMgICBiZSB0aGUgbW9zdCBwb3B1bGFyIGFuZCBwb3J0YWJsZSBjb21iaW5hdGlvbi4gTUFOIHBhZ2VzIGNyZWF0ZWQgYnkKKyMgICBEb3h5Z2VuIGFyZSB1c3VhbGx5IHByb2JsZW1hdGljLCB0aG91Z2ggYnkgcGlja2luZyBhbiBhcHByb3ByaWF0ZSBzdWJzZXQKKyMgICBhbmQgZG9pbmcgc29tZSBtYXNzYWdpbmcgdGhleSBtaWdodCBiZSBiZXR0ZXIgdGhhbiBub3RoaW5nLiBDSE0gYW5kIFJURgorIyAgIGFyZSBzcGVjaWZpYyBmb3IgTVMgKG5vdGUgdGhhdCB5b3UgY2FuJ3QgZ2VuZXJhdGUgYm90aCBIVE1MIGFuZCBDSE0gYXQKKyMgICB0aGUgc2FtZSB0aW1lKS4gVGhlIFhNTCBpcyByYXRoZXIgdXNlbGVzcyB1bmxlc3MgeW91IGFwcGx5IHNwZWNpYWxpemVkCisjICAgcG9zdC1wcm9jZXNzaW5nIHRvIGl0LgorIworIyAgIFRoZSBtYWNyb3MgbWFpbmx5IGNvbnRyb2wgdGhlIGRlZmF1bHQgc3RhdGUgb2YgdGhlIGZlYXR1cmUuIFRoZSB1c2UgY2FuCisjICAgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYnkgc3BlY2lmeWluZyAtLWVuYWJsZSBvciAtLWRpc2FibGUuIFRoZSBtYWNyb3MKKyMgICBlbnN1cmUgdGhhdCBjb250cmFkaWN0b3J5IGZsYWdzIGFyZSBub3QgZ2l2ZW4gKGUuZy4sCisjICAgLS1lbmFibGUtZG94eWdlbi1odG1sIGFuZCAtLWVuYWJsZS1kb3h5Z2VuLWNobSwKKyMgICAtLWVuYWJsZS1kb3h5Z2VuLWFueXRoaW5nIHdpdGggLS1kaXNhYmxlLWRveHlnZW4sIGV0Yy4pIEZpbmFsbHksIGVhY2gKKyMgICBmZWF0dXJlIHdpbGwgYmUgYXV0b21hdGljYWxseSBkaXNhYmxlZCAod2l0aCBhIHdhcm5pbmcpIGlmIHRoZSByZXF1aXJlZAorIyAgIHByb2dyYW1zIGFyZSBtaXNzaW5nLgorIworIyAgIE9uY2UgYWxsIHRoZSBmZWF0dXJlIGRlZmF1bHRzIGhhdmUgYmVlbiBzcGVjaWZpZWQsIGNhbGwgRFhfSU5JVF9ET1hZR0VOCisjICAgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6IGEgb25lLXdvcmQgbmFtZSBmb3IgdGhlIHByb2plY3QgZm9yIHVzZQorIyAgIGFzIGEgZmlsZW5hbWUgYmFzZSBldGMuLCBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZpbGUgbmFtZSAodGhlCisjICAgZGVmYXVsdCBpcyAnRG94eWZpbGUnLCB0aGUgc2FtZSBhcyBEb3h5Z2VuJ3MgZGVmYXVsdCksIGFuZCBhbiBvcHRpb25hbAorIyAgIG91dHB1dCBkaXJlY3RvcnkgbmFtZSAodGhlIGRlZmF1bHQgaXMgJ2RveHlnZW4tZG9jJykuCisjCisjICAgQXV0b21ha2UgU3VwcG9ydAorIworIyAgIFRoZSBmb2xsb3dpbmcgaXMgYSB0ZW1wbGF0ZSBhbWluY2x1ZGUuYW0gZmlsZSBmb3IgdXNlIHdpdGggQXV0b21ha2UuCisjICAgTWFrZSB0YXJnZXRzIGFuZCB2YXJpYWJsZXMgdmFsdWVzIGFyZSBjb250cm9sbGVkIGJ5IHRoZSB2YXJpb3VzCisjICAgRFhfQ09ORF8qIGNvbmRpdGlvbmFscyBzZXQgYnkgYXV0b2NvbmYuCisjCisjICAgVGhlIHByb3ZpZGVkIHRhcmdldHMgYXJlOgorIworIyAgICAgZG94eWdlbi1kb2M6IEdlbmVyYXRlIGFsbCBkb3h5Z2VuIGRvY3VtZW50YXRpb24uCisjCisjICAgICBkb3h5Z2VuLXJ1bjogUnVuIGRveHlnZW4sIHdoaWNoIHdpbGwgZ2VuZXJhdGUgc29tZSBvZiB0aGUKKyMgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIChIVE1MLCBDSE0sIENISSwgTUFOLCBSVEYsIFhNTCkKKyMgICAgICAgICAgICAgICAgICBidXQgd2lsbCBub3QgZG8gdGhlIHBvc3QgcHJvY2Vzc2luZyByZXF1aXJlZAorIyAgICAgICAgICAgICAgICAgIGZvciB0aGUgcmVzdCBvZiBpdCAoUFMsIFBERiwgYW5kIHNvbWUgTUFOKS4KKyMKKyMgICAgIGRveHlnZW4tbWFuOiBSZW5hbWUgc29tZSBkb3h5Z2VuIGdlbmVyYXRlZCBtYW4gcGFnZXMuCisjCisjICAgICBkb3h5Z2VuLXBzOiAgR2VuZXJhdGUgZG94eWdlbiBQb3N0U2NyaXB0IGRvY3VtZW50YXRpb24uCisjCisjICAgICBkb3h5Z2VuLXBkZjogR2VuZXJhdGUgZG94eWdlbiBQREYgZG9jdW1lbnRhdGlvbi4KKyMKKyMgICBOb3RlIHRoYXQgYnkgZGVmYXVsdCB0aGVzZSBhcmUgbm90IGludGVncmF0ZWQgaW50byB0aGUgYXV0b21ha2UgdGFyZ2V0cy4KKyMgICBJZiBkb3h5Z2VuIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbWFuIHBhZ2VzLCB5b3UgY2FuIGFjaGlldmUgdGhpcworIyAgIGludGVncmF0aW9uIGJ5IHNldHRpbmcgbWFuM19NQU5TIHRvIHRoZSBsaXN0IG9mIG1hbiBwYWdlcyBnZW5lcmF0ZWQgYW5kCisjICAgdGhlbiBhZGRpbmcgdGhlIGRlcGVuZGVuY3k6CisjCisjICAgICAkKG1hbjNfTUFOUyk6IGRveHlnZW4tZG9jCisjCisjICAgVGhpcyB3aWxsIGNhdXNlIG1ha2UgdG8gcnVuIGRveHlnZW4gYW5kIGdlbmVyYXRlIGFsbCB0aGUgZG9jdW1lbnRhdGlvbi4KKyMKKyMgICBUaGUgZm9sbG93aW5nIHZhcmlhYmxlIGlzIGludGVuZGVkIGZvciB1c2UgaW4gTWFrZWZpbGUuYW06CisjCisjICAgICBEWF9DTEVBTkZJTEVTID0gZXZlcnl0aGluZyB0byBjbGVhbi4KKyMKKyMgICBUaGVuIGFkZCB0aGlzIHZhcmlhYmxlIHRvIE1PU1RMWUNMRUFORklMRVMuCisjCisjICAgICAtLS0tLSBiZWdpbiBhbWluY2x1ZGUuYW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjICAgICAjIyBGb3JtYXQtaW5kZXBlbmRlbnQgRG94eWdlbiBydWxlcy4gIyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIworIyAgICAgaWYgRFhfQ09ORF9kb2MKKyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgICAgICMjIFJ1bGVzIHNwZWNpZmljIGZvciBIVE1MIG91dHB1dC4gIyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMKKyMgICAgIGlmIERYX0NPTkRfaHRtbAorIworIyAgICAgRFhfQ0xFQU5fSFRNTCA9IEBEWF9ET0NESVJAL2h0bWwKKyMKKyMgICAgIGVuZGlmIERYX0NPTkRfaHRtbAorIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjICAgICAjIyBSdWxlcyBzcGVjaWZpYyBmb3IgQ0hNIG91dHB1dC4gIyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIworIyAgICAgaWYgRFhfQ09ORF9jaG0KKyMKKyMgICAgIERYX0NMRUFOX0NITSA9IEBEWF9ET0NESVJAL2NobQorIworIyAgICAgaWYgRFhfQ09ORF9jaGkKKyMKKyMgICAgIERYX0NMRUFOX0NISSA9IEBEWF9ET0NESVJAL0BQQUNLQUdFQC5jaGkKKyMKKyMgICAgIGVuZGlmIERYX0NPTkRfY2hpCisjCisjICAgICBlbmRpZiBEWF9DT05EX2NobQorIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjICAgICAjIyBSdWxlcyBzcGVjaWZpYyBmb3IgTUFOIG91dHB1dC4gIyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIworIyAgICAgaWYgRFhfQ09ORF9tYW4KKyMKKyMgICAgIERYX0NMRUFOX01BTiA9IEBEWF9ET0NESVJAL21hbgorIworIyAgICAgZW5kaWYgRFhfQ09ORF9tYW4KKyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyAgICAgIyMgUnVsZXMgc3BlY2lmaWMgZm9yIFJURiBvdXRwdXQuICMjCisjICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMKKyMgICAgIGlmIERYX0NPTkRfcnRmCisjCisjICAgICBEWF9DTEVBTl9SVEYgPSBARFhfRE9DRElSQC9ydGYKKyMKKyMgICAgIGVuZGlmIERYX0NPTkRfcnRmCisjCisjICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgICAgICMjIFJ1bGVzIHNwZWNpZmljIGZvciBYTUwgb3V0cHV0LiAjIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjCisjICAgICBpZiBEWF9DT05EX3htbAorIworIyAgICAgRFhfQ0xFQU5fWE1MID0gQERYX0RPQ0RJUkAveG1sCisjCisjICAgICBlbmRpZiBEWF9DT05EX3htbAorIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgICAgICMjIFJ1bGVzIHNwZWNpZmljIGZvciBQUyBvdXRwdXQuICMjCisjICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIworIyAgICAgaWYgRFhfQ09ORF9wcworIworIyAgICAgRFhfQ0xFQU5fUFMgPSBARFhfRE9DRElSQC9AUEFDS0FHRUAucHMKKyMKKyMgICAgIERYX1BTX0dPQUwgPSBkb3h5Z2VuLXBzCisjCisjICAgICBkb3h5Z2VuLXBzOiBARFhfRE9DRElSQC9AUEFDS0FHRUAucHMKKyMKKyMgICAgIEBEWF9ET0NESVJAL0BQQUNLQUdFQC5wczogQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnRhZworIyAgICAgICAgIGNkIEBEWF9ET0NESVJAL2xhdGV4OyBcCisjICAgICAgICAgcm0gLWYgKi5hdXggKi50b2MgKi5pZHggKi5pbmQgKi5pbGcgKi5sb2cgKi5vdXQ7IFwKKyMgICAgICAgICAkKERYX0xBVEVYKSByZWZtYW4udGV4OyBcCisjICAgICAgICAgJChNQUtFSU5ERVhfUEFUSCkgcmVmbWFuLmlkeDsgXAorIyAgICAgICAgICQoRFhfTEFURVgpIHJlZm1hbi50ZXg7IFwKKyMgICAgICAgICBjb3VudGRvd249NTsgXAorIyAgICAgICAgIHdoaWxlICQoRFhfRUdSRVApICdSZXJ1biAoTGFUZVh8dG8gZ2V0IGNyb3NzLXJlZmVyZW5jZXMgcmlnaHQpJyBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmbWFuLmxvZyA+IC9kZXYvbnVsbCAyPiYxIFwKKyMgICAgICAgICAgICAmJiB0ZXN0ICQkY291bnRkb3duIC1ndCAwOyBkbyBcCisjICAgICAgICAgICAgICQoRFhfTEFURVgpIHJlZm1hbi50ZXg7IFwKKyMgICAgICAgICAgICAgY291bnRkb3duPWBleHByICQkY291bnRkb3duIC0gMWA7IFwKKyMgICAgICAgICBkb25lOyBcCisjICAgICAgICAgJChEWF9EVklQUykgLW8gLi4vQFBBQ0tBR0VALnBzIHJlZm1hbi5kdmkKKyMKKyMgICAgIGVuZGlmIERYX0NPTkRfcHMKKyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyAgICAgIyMgUnVsZXMgc3BlY2lmaWMgZm9yIFBERiBvdXRwdXQuICMjCisjICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMKKyMgICAgIGlmIERYX0NPTkRfcGRmCisjCisjICAgICBEWF9DTEVBTl9QREYgPSBARFhfRE9DRElSQC9AUEFDS0FHRUAucGRmCisjCisjICAgICBEWF9QREZfR09BTCA9IGRveHlnZW4tcGRmCisjCisjICAgICBkb3h5Z2VuLXBkZjogQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnBkZgorIworIyAgICAgQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnBkZjogQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnRhZworIyAgICAgICAgIGNkIEBEWF9ET0NESVJAL2xhdGV4OyBcCisjICAgICAgICAgcm0gLWYgKi5hdXggKi50b2MgKi5pZHggKi5pbmQgKi5pbGcgKi5sb2cgKi5vdXQ7IFwKKyMgICAgICAgICAkKERYX1BERkxBVEVYKSByZWZtYW4udGV4OyBcCisjICAgICAgICAgJChEWF9NQUtFSU5ERVgpIHJlZm1hbi5pZHg7IFwKKyMgICAgICAgICAkKERYX1BERkxBVEVYKSByZWZtYW4udGV4OyBcCisjICAgICAgICAgY291bnRkb3duPTU7IFwKKyMgICAgICAgICB3aGlsZSAkKERYX0VHUkVQKSAnUmVydW4gKExhVGVYfHRvIGdldCBjcm9zcy1yZWZlcmVuY2VzIHJpZ2h0KScgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZm1hbi5sb2cgPiAvZGV2L251bGwgMj4mMSBcCisjICAgICAgICAgICAgJiYgdGVzdCAkJGNvdW50ZG93biAtZ3QgMDsgZG8gXAorIyAgICAgICAgICAgICAkKERYX1BERkxBVEVYKSByZWZtYW4udGV4OyBcCisjICAgICAgICAgICAgIGNvdW50ZG93bj1gZXhwciAkJGNvdW50ZG93biAtIDFgOyBcCisjICAgICAgICAgZG9uZTsgXAorIyAgICAgICAgIG12IHJlZm1hbi5wZGYgLi4vQFBBQ0tBR0VALnBkZgorIworIyAgICAgZW5kaWYgRFhfQ09ORF9wZGYKKyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgICAgICMjIFJ1bGVzIHNwZWNpZmljIGZvciBMYVRlWCAoc2hhcmVkIGZvciBQUyBhbmQgUERGKS4gIyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMKKyMgICAgIGlmIERYX0NPTkRfbGF0ZXgKKyMKKyMgICAgIERYX0NMRUFOX0xBVEVYID0gQERYX0RPQ0RJUkAvbGF0ZXgKKyMKKyMgICAgIGVuZGlmIERYX0NPTkRfbGF0ZXgKKyMKKyMgICAgIC5QSE9OWTogZG94eWdlbi1ydW4gZG94eWdlbi1kb2MgJChEWF9QU19HT0FMKSAkKERYX1BERl9HT0FMKQorIworIyAgICAgLklOVEVSTUVESUFURTogZG94eWdlbi1ydW4gJChEWF9QU19HT0FMKSAkKERYX1BERl9HT0FMKQorIworIyAgICAgZG94eWdlbi1ydW46IEBEWF9ET0NESVJAL0BQQUNLQUdFQC50YWcKKyMKKyMgICAgIGRveHlnZW4tZG9jOiBkb3h5Z2VuLXJ1biAkKERYX1BTX0dPQUwpICQoRFhfUERGX0dPQUwpCisjCisjICAgICBARFhfRE9DRElSQC9AUEFDS0FHRUAudGFnOiAkKERYX0NPTkZJRykgJChwa2dpbmNsdWRlX0hFQURFUlMpCisjICAgICAgICAgcm0gLXJmIEBEWF9ET0NESVJACisjICAgICAgICAgJChEWF9FTlYpICQoRFhfRE9YWUdFTikgJChzcmNkaXIpLyQoRFhfQ09ORklHKQorIworIyAgICAgRFhfQ0xFQU5GSUxFUyA9IFwKKyMgICAgICAgICBARFhfRE9DRElSQC9AUEFDS0FHRUAudGFnIFwKKyMgICAgICAgICAtciBcCisjICAgICAgICAgJChEWF9DTEVBTl9IVE1MKSBcCisjICAgICAgICAgJChEWF9DTEVBTl9DSE0pIFwKKyMgICAgICAgICAkKERYX0NMRUFOX0NISSkgXAorIyAgICAgICAgICQoRFhfQ0xFQU5fTUFOKSBcCisjICAgICAgICAgJChEWF9DTEVBTl9SVEYpIFwKKyMgICAgICAgICAkKERYX0NMRUFOX1hNTCkgXAorIyAgICAgICAgICQoRFhfQ0xFQU5fUFMpIFwKKyMgICAgICAgICAkKERYX0NMRUFOX1BERikgXAorIyAgICAgICAgICQoRFhfQ0xFQU5fTEFURVgpCisjCisjICAgICBlbmRpZiBEWF9DT05EX2RvYworIworIyAgICAgLS0tLS0gZW5kIGFtaW5jbHVkZS5hbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAwOSBPcmVuIEJlbi1LaWtpIDxvcmVuQGJlbi1raWtpLm9yZz4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55CisjICAgd2FycmFudHkuCisKKyNzZXJpYWwgMTIKKworIyMgLS0tLS0tLS0tLSMjCisjIyBEZWZhdWx0cy4gIyMKKyMjIC0tLS0tLS0tLS0jIworCitEWF9FTlY9IiIKK0FDX0RFRlVOKFtEWF9GRUFUVVJFX2RvY10sICBPTikKK0FDX0RFRlVOKFtEWF9GRUFUVVJFX2RvdF0sICBPRkYpCitBQ19ERUZVTihbRFhfRkVBVFVSRV9tYW5dLCAgT0ZGKQorQUNfREVGVU4oW0RYX0ZFQVRVUkVfaHRtbF0sIE9OKQorQUNfREVGVU4oW0RYX0ZFQVRVUkVfY2htXSwgIE9GRikKK0FDX0RFRlVOKFtEWF9GRUFUVVJFX2NoaV0sICBPRkYpCitBQ19ERUZVTihbRFhfRkVBVFVSRV9ydGZdLCAgT0ZGKQorQUNfREVGVU4oW0RYX0ZFQVRVUkVfeG1sXSwgIE9GRikKK0FDX0RFRlVOKFtEWF9GRUFUVVJFX3BkZl0sICBPTikKK0FDX0RFRlVOKFtEWF9GRUFUVVJFX3BzXSwgICBPTikKKworIyMgLS0tLS0tLS0tLS0tLS0tICMjCisjIyBQcml2YXRlIG1hY3Jvcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLSAjIworCisjIERYX0VOVl9BUFBFTkQoVkFSSUFCTEUsIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIFZBUklBQkxFPSJWQUxVRSIgdG8gRFhfRU5WIGZvciBpbnZva2luZyBkb3h5Z2VuLgorQUNfREVGVU4oW0RYX0VOVl9BUFBFTkRdLCBbQUNfU1VCU1QoW0RYX0VOVl0sIFsiJERYX0VOViAkMT0nJDInIl0pXSkKKworIyBEWF9ESVJOQU1FX0VYUFIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZCBpbnRvIGEgc2hlbGwgZXhwcmVzc2lvbiBwcmludHMgdGhlIGRpcmVjdG9yeSBwYXJ0IG9mIGEgcGF0aC4KK0FDX0RFRlVOKFtEWF9ESVJOQU1FX0VYUFJdLAorICAgICAgICAgW1tleHByICIuJDEiIDogJ1woXC5cKVteL10qJCcgXHwgIngkMSIgOiAneFwoLipcKS9bXi9dKiQnXV0pCisKKyMgRFhfSUZfRkVBVFVSRShGRUFUVVJFLCBJRi1PTiwgSUYtT0ZGKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4cGFuZHMgYWNjb3JkaW5nIHRvIHRoZSBNNCAoc3RhdGljKSBzdGF0dXMgb2YgdGhlIGZlYXR1cmUuCitBQ19ERUZVTihbRFhfSUZfRkVBVFVSRV0sIFtpZmVsc2UoRFhfRkVBVFVSRV8kMSwgT04sIFskMl0sIFskM10pXSkKKworIyBEWF9SRVFVSVJFX1BST0coVkFSSUFCTEUsIFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVxdWlyZSB0aGUgc3BlY2lmaWVkIHByb2dyYW0gdG8gYmUgZm91bmQgZm9yIHRoZSBEWF9DVVJSRU5UX0ZFQVRVUkUgdG8gd29yay4KK0FDX0RFRlVOKFtEWF9SRVFVSVJFX1BST0ddLCBbCitBQ19QQVRIX1RPT0woWyQxXSwgWyQyXSkKK2lmIHRlc3QgIiREWF9GTEFHX1tdRFhfQ1VSUkVOVF9GRUFUVVJFJCQxIiA9IDE7IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbJDIgbm90IGZvdW5kIC0gd2lsbCBub3QgRFhfQ1VSUkVOVF9ERVNDUklQVElPTl0pCisgICAgQUNfU1VCU1QoRFhfRkxBR19bXURYX0NVUlJFTlRfRkVBVFVSRSwgMCkKK2ZpCitdKQorCisjIERYX1RFU1RfRkVBVFVSRShGRUFUVVJFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIHRvIGEgc2hlbGwgZXhwcmVzc2lvbiB0ZXN0aW5nIHdoZXRoZXIgdGhlIGZlYXR1cmUgaXMgYWN0aXZlLgorQUNfREVGVU4oW0RYX1RFU1RfRkVBVFVSRV0sIFt0ZXN0ICIkRFhfRkxBR18kMSIgPSAxXSkKKworIyBEWF9DSEVDS19ERVBFTkQoUkVRVUlSRURfRkVBVFVSRSwgUkVRVUlSRURfU1RBVEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVmVyaWZ5IHRoYXQgYSByZXF1aXJlZCBmZWF0dXJlcyBoYXMgdGhlIHJpZ2h0IHN0YXRlIGJlZm9yZSB0cnlpbmcgdG8gdHVybiBvbgorIyB0aGUgRFhfQ1VSUkVOVF9GRUFUVVJFLgorQUNfREVGVU4oW0RYX0NIRUNLX0RFUEVORF0sIFsKK3Rlc3QgIiREWF9GTEFHXyQxIiA9ICIkMiIgXAorfHwgQUNfTVNHX0VSUk9SKFtkb3h5Z2VuLURYX0NVUlJFTlRfRkVBVFVSRSBpZmVsc2UoWyQyXSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlcywgY29udHJhZGljdHMpIGRveHlnZW4tRFhfQ1VSUkVOVF9GRUFUVVJFXSkKK10pCisKKyMgRFhfQ0xFQVJfREVQRU5EKEZFQVRVUkUsIFJFUVVJUkVEX0ZFQVRVUkUsIFJFUVVJUkVEX1NUQVRFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFR1cm4gb2ZmIHRoZSBEWF9DVVJSRU5UX0ZFQVRVUkUgaWYgdGhlIHJlcXVpcmVkIGZlYXR1cmUgaXMgb2ZmLgorQUNfREVGVU4oW0RYX0NMRUFSX0RFUEVORF0sIFsKK3Rlc3QgIiREWF9GTEFHXyQxIiA9ICIkMiIgfHwgQUNfU1VCU1QoRFhfRkxBR19bXURYX0NVUlJFTlRfRkVBVFVSRSwgMCkKK10pCisKKyMgRFhfRkVBVFVSRV9BUkcoRkVBVFVSRSwgREVTQ1JJUFRJT04sCisjICAgICAgICAgICAgICAgIENIRUNLX0RFUEVORCwgQ0xFQVJfREVQRU5ELAorIyAgICAgICAgICAgICAgICBSRVFVSVJFLCBETy1JRi1PTiwgRE8tSUYtT0ZGKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXJzZSB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiBjb250cm9sbGluZyBhIGZlYXR1cmUuIENIRUNLX0RFUEVORCBpcyBjYWxsZWQKKyMgaWYgdGhlIHVzZXIgZXhwbGljaXRseSB0dXJucyB0aGUgZmVhdHVyZSBvbiAoYW5kIGludm9rZXMgRFhfQ0hFQ0tfREVQRU5EKSwKKyMgb3RoZXJ3aXNlIENMRUFSX0RFUEVORCBpcyBjYWxsZWQgdG8gdHVybiBvZmYgdGhlIGRlZmF1bHQgc3RhdGUgaWYgYSByZXF1aXJlZAorIyBmZWF0dXJlIGlzIGRpc2FibGVkICh1c2luZyBEWF9DTEVBUl9ERVBFTkQpLiBSRVFVSVJFIHBlcmZvcm1zIGFkZGl0aW9uYWwKKyMgcmVxdWlyZW1lbnQgdGVzdHMgKERYX1JFUVVJUkVfUFJPRykuIEZpbmFsbHksIGFuIGF1dG9tYWtlIGZsYWcgaXMgc2V0IGFuZAorIyBETy1JRi1PTiBvciBETy1JRi1PRkYgYXJlIGNhbGxlZCBhY2NvcmRpbmcgdG8gdGhlIGZpbmFsIHN0YXRlIG9mIHRoZSBmZWF0dXJlLgorQUNfREVGVU4oW0RYX0FSR19BQkxFXSwgWworICAgIEFDX0RFRlVOKFtEWF9DVVJSRU5UX0ZFQVRVUkVdLCBbJDFdKQorICAgIEFDX0RFRlVOKFtEWF9DVVJSRU5UX0RFU0NSSVBUSU9OXSwgWyQyXSkKKyAgICBBQ19BUkdfRU5BQkxFKGRveHlnZW4tJDEsCisgICAgICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoRFhfSUZfRkVBVFVSRShbJDFdLCBbLS1kaXNhYmxlLWRveHlnZW4tJDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy0tZW5hYmxlLWRveHlnZW4tJDFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWF9JRl9GRUFUVVJFKFskMV0sIFtkb24ndCAkMl0sIFskMl0pKV0sCisgICAgICAgICAgICAgICAgICBbCitjYXNlICIkZW5hYmxldmFsIiBpbgorIygKK3l8WXx5ZXN8WWVzfFlFUykKKyAgICBBQ19TVUJTVChbRFhfRkxBR18kMV0sIDEpCisgICAgJDMKKzs7ICMoCitufE58bm98Tm98Tk8pCisgICAgQUNfU1VCU1QoW0RYX0ZMQUdfJDFdLCAwKQorOzsgIygKKyopCisgICAgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIHZhbHVlICckZW5hYmxldmFsJyBnaXZlbiB0byBkb3h5Z2VuLSQxXSkKKzs7Citlc2FjCitdLCBbCitBQ19TVUJTVChbRFhfRkxBR18kMV0sIFtEWF9JRl9GRUFUVVJFKFskMV0sIDEsIDApXSkKKyQ0CitdKQoraWYgRFhfVEVTVF9GRUFUVVJFKFskMV0pOyB0aGVuCisgICAgJDUKKyAgICA6CitmaQorQU1fQ09ORElUSU9OQUwoRFhfQ09ORF8kMSwgRFhfVEVTVF9GRUFUVVJFKFskMV0pKQoraWYgRFhfVEVTVF9GRUFUVVJFKFskMV0pOyB0aGVuCisgICAgJDYKKyAgICA6CitlbHNlCisgICAgJDcKKyAgICA6CitmaQorXSkKKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFB1YmxpYyBtYWNyb3MuICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCisjIERYX1hYWF9GRUFUVVJFKERFRkFVTFRfU1RBVEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbRFhfRE9YWUdFTl9GRUFUVVJFXSwgW0FDX0RFRlVOKFtEWF9GRUFUVVJFX2RvY10sICBbJDFdKV0pCitBQ19ERUZVTihbRFhfRE9UX0ZFQVRVUkVdLCAgICAgW0FDX0RFRlVOKFtEWF9GRUFUVVJFX2RvdF0sIFskMV0pXSkKK0FDX0RFRlVOKFtEWF9NQU5fRkVBVFVSRV0sICAgICBbQUNfREVGVU4oW0RYX0ZFQVRVUkVfbWFuXSwgIFskMV0pXSkKK0FDX0RFRlVOKFtEWF9IVE1MX0ZFQVRVUkVdLCAgICBbQUNfREVGVU4oW0RYX0ZFQVRVUkVfaHRtbF0sIFskMV0pXSkKK0FDX0RFRlVOKFtEWF9DSE1fRkVBVFVSRV0sICAgICBbQUNfREVGVU4oW0RYX0ZFQVRVUkVfY2htXSwgIFskMV0pXSkKK0FDX0RFRlVOKFtEWF9DSElfRkVBVFVSRV0sICAgICBbQUNfREVGVU4oW0RYX0ZFQVRVUkVfY2hpXSwgIFskMV0pXSkKK0FDX0RFRlVOKFtEWF9SVEZfRkVBVFVSRV0sICAgICBbQUNfREVGVU4oW0RYX0ZFQVRVUkVfcnRmXSwgIFskMV0pXSkKK0FDX0RFRlVOKFtEWF9YTUxfRkVBVFVSRV0sICAgICBbQUNfREVGVU4oW0RYX0ZFQVRVUkVfeG1sXSwgIFskMV0pXSkKK0FDX0RFRlVOKFtEWF9YTUxfRkVBVFVSRV0sICAgICBbQUNfREVGVU4oW0RYX0ZFQVRVUkVfeG1sXSwgIFskMV0pXSkKK0FDX0RFRlVOKFtEWF9QREZfRkVBVFVSRV0sICAgICBbQUNfREVGVU4oW0RYX0ZFQVRVUkVfcGRmXSwgIFskMV0pXSkKK0FDX0RFRlVOKFtEWF9QU19GRUFUVVJFXSwgICAgICBbQUNfREVGVU4oW0RYX0ZFQVRVUkVfcHNdLCAgIFskMV0pXSkKKworIyBEWF9JTklUX0RPWFlHRU4oUFJPSkVDVCwgW0NPTkZJRy1GSUxFXSwgW09VVFBVVC1ET0MtRElSXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBST0pFQ1QgYWxzbyBzZXJ2ZXMgYXMgdGhlIGJhc2UgbmFtZSBmb3IgdGhlIGRvY3VtZW50YXRpb24gZmlsZXMuCisjIFRoZSBkZWZhdWx0IENPTkZJRy1GSUxFIGlzICJEb3h5ZmlsZSIgYW5kIE9VVFBVVC1ET0MtRElSIGlzICJkb3h5Z2VuLWRvYyIuCitBQ19ERUZVTihbRFhfSU5JVF9ET1hZR0VOXSwgWworCisjIEZpbGVzOgorQUNfU1VCU1QoW0RYX1BST0pFQ1RdLCBbJDFdKQorQUNfU1VCU1QoW0RYX0NPTkZJR10sIFtpZmVsc2UoWyQyXSwgW10sIERveHlmaWxlLCBbJDJdKV0pCitBQ19TVUJTVChbRFhfRE9DRElSXSwgW2lmZWxzZShbJDNdLCBbXSwgZG94eWdlbi1kb2MsIFskM10pXSkKKworIyBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdXNlZCBpbnNpZGUgZG94eWdlbi5jZmc6CitEWF9FTlZfQVBQRU5EKFNSQ0RJUiwgJHNyY2RpcikKK0RYX0VOVl9BUFBFTkQoUFJPSkVDVCwgJERYX1BST0pFQ1QpCitEWF9FTlZfQVBQRU5EKERPQ0RJUiwgJERYX0RPQ0RJUikKK0RYX0VOVl9BUFBFTkQoVkVSU0lPTiwgJFBBQ0tBR0VfVkVSU0lPTikKKworIyBEb3h5Z2VuIGl0c2VsZjoKK0RYX0FSR19BQkxFKGRvYywgW2dlbmVyYXRlIGFueSBkb3h5Z2VuIGRvY3VtZW50YXRpb25dLAorICAgICAgICAgICAgW10sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtEWF9SRVFVSVJFX1BST0coW0RYX0RPWFlHRU5dLCBkb3h5Z2VuKQorICAgICAgICAgICAgIERYX1JFUVVJUkVfUFJPRyhbRFhfUEVSTF0sIHBlcmwpXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKFBFUkxfUEFUSCwgJERYX1BFUkwpXSkKKworIyBEb3QgZm9yIGdyYXBoaWNzOgorRFhfQVJHX0FCTEUoZG90LCBbZ2VuZXJhdGUgZ3JhcGhpY3MgZm9yIGRveHlnZW4gZG9jdW1lbnRhdGlvbl0sCisgICAgICAgICAgICBbRFhfQ0hFQ0tfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW0RYX0NMRUFSX0RFUEVORChkb2MsIDEpXSwKKyAgICAgICAgICAgIFtEWF9SRVFVSVJFX1BST0coW0RYX0RPVF0sIGRvdCldLAorICAgICAgICAgICAgW0RYX0VOVl9BUFBFTkQoSEFWRV9ET1QsIFlFUykKKyAgICAgICAgICAgICBEWF9FTlZfQVBQRU5EKERPVF9QQVRILCBbYERYX0RJUk5BTUVfRVhQUigkRFhfRE9UKWBdKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChIQVZFX0RPVCwgTk8pXSkKKworIyBNYW4gcGFnZXMgZ2VuZXJhdGlvbjoKK0RYX0FSR19BQkxFKG1hbiwgW2dlbmVyYXRlIGRveHlnZW4gbWFudWFsIHBhZ2VzXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW10sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9NQU4sIFlFUyldLAorICAgICAgICAgICAgW0RYX0VOVl9BUFBFTkQoR0VORVJBVEVfTUFOLCBOTyldKQorCisjIFJURiBmaWxlIGdlbmVyYXRpb246CitEWF9BUkdfQUJMRShydGYsIFtnZW5lcmF0ZSBkb3h5Z2VuIFJURiBkb2N1bWVudGF0aW9uXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW10sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9SVEYsIFlFUyldLAorICAgICAgICAgICAgW0RYX0VOVl9BUFBFTkQoR0VORVJBVEVfUlRGLCBOTyldKQorCisjIFhNTCBmaWxlIGdlbmVyYXRpb246CitEWF9BUkdfQUJMRSh4bWwsIFtnZW5lcmF0ZSBkb3h5Z2VuIFhNTCBkb2N1bWVudGF0aW9uXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW10sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9YTUwsIFlFUyldLAorICAgICAgICAgICAgW0RYX0VOVl9BUFBFTkQoR0VORVJBVEVfWE1MLCBOTyldKQorCisjIChDb21wcmVzc2VkKSBIVE1MIGhlbHAgZ2VuZXJhdGlvbjoKK0RYX0FSR19BQkxFKGNobSwgW2dlbmVyYXRlIGRveHlnZW4gY29tcHJlc3NlZCBIVE1MIGhlbHAgZG9jdW1lbnRhdGlvbl0sCisgICAgICAgICAgICBbRFhfQ0hFQ0tfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW0RYX0NMRUFSX0RFUEVORChkb2MsIDEpXSwKKyAgICAgICAgICAgIFtEWF9SRVFVSVJFX1BST0coW0RYX0hIQ10sIGhoYyldLAorICAgICAgICAgICAgW0RYX0VOVl9BUFBFTkQoSEhDX1BBVEgsICREWF9ISEMpCisgICAgICAgICAgICAgRFhfRU5WX0FQUEVORChHRU5FUkFURV9IVE1MLCBZRVMpCisgICAgICAgICAgICAgRFhfRU5WX0FQUEVORChHRU5FUkFURV9IVE1MSEVMUCwgWUVTKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9IVE1MSEVMUCwgTk8pXSkKKworIyBTZXBlcmF0ZSBDSEkgZmlsZSBnZW5lcmF0aW9uLgorRFhfQVJHX0FCTEUoY2hpLCBbZ2VuZXJhdGUgZG94eWdlbiBzZXBlcmF0ZSBjb21wcmVzc2VkIEhUTUwgaGVscCBpbmRleCBmaWxlXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoY2htLCAxKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGNobSwgMSldLAorICAgICAgICAgICAgW10sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9DSEksIFlFUyldLAorICAgICAgICAgICAgW0RYX0VOVl9BUFBFTkQoR0VORVJBVEVfQ0hJLCBOTyldKQorCisjIFBsYWluIEhUTUwgcGFnZXMgZ2VuZXJhdGlvbjoKK0RYX0FSR19BQkxFKGh0bWwsIFtnZW5lcmF0ZSBkb3h5Z2VuIHBsYWluIEhUTUwgZG9jdW1lbnRhdGlvbl0sCisgICAgICAgICAgICBbRFhfQ0hFQ0tfREVQRU5EKGRvYywgMSkgRFhfQ0hFQ0tfREVQRU5EKGNobSwgMCldLAorICAgICAgICAgICAgW0RYX0NMRUFSX0RFUEVORChkb2MsIDEpIERYX0NMRUFSX0RFUEVORChjaG0sIDApXSwKKyAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgW0RYX0VOVl9BUFBFTkQoR0VORVJBVEVfSFRNTCwgWUVTKV0sCisgICAgICAgICAgICBbRFhfVEVTVF9GRUFUVVJFKGNobSkgfHwgRFhfRU5WX0FQUEVORChHRU5FUkFURV9IVE1MLCBOTyldKQorCisjIFBvc3RTY3JpcHQgZmlsZSBnZW5lcmF0aW9uOgorRFhfQVJHX0FCTEUocHMsIFtnZW5lcmF0ZSBkb3h5Z2VuIFBvc3RTY3JpcHQgZG9jdW1lbnRhdGlvbl0sCisgICAgICAgICAgICBbRFhfQ0hFQ0tfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW0RYX0NMRUFSX0RFUEVORChkb2MsIDEpXSwKKyAgICAgICAgICAgIFtEWF9SRVFVSVJFX1BST0coW0RYX0xBVEVYXSwgbGF0ZXgpCisgICAgICAgICAgICAgRFhfUkVRVUlSRV9QUk9HKFtEWF9NQUtFSU5ERVhdLCBtYWtlaW5kZXgpCisgICAgICAgICAgICAgRFhfUkVRVUlSRV9QUk9HKFtEWF9EVklQU10sIGR2aXBzKQorICAgICAgICAgICAgIERYX1JFUVVJUkVfUFJPRyhbRFhfRUdSRVBdLCBlZ3JlcCldKQorCisjIFBERiBmaWxlIGdlbmVyYXRpb246CitEWF9BUkdfQUJMRShwZGYsIFtnZW5lcmF0ZSBkb3h5Z2VuIFBERiBkb2N1bWVudGF0aW9uXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW0RYX1JFUVVJUkVfUFJPRyhbRFhfUERGTEFURVhdLCBwZGZsYXRleCkKKyAgICAgICAgICAgICBEWF9SRVFVSVJFX1BST0coW0RYX01BS0VJTkRFWF0sIG1ha2VpbmRleCkKKyAgICAgICAgICAgICBEWF9SRVFVSVJFX1BST0coW0RYX0VHUkVQXSwgZWdyZXApXSkKKworIyBMYVRlWCBnZW5lcmF0aW9uIGZvciBQUyBhbmQvb3IgUERGOgorQU1fQ09ORElUSU9OQUwoRFhfQ09ORF9sYXRleCwgRFhfVEVTVF9GRUFUVVJFKHBzKSB8fCBEWF9URVNUX0ZFQVRVUkUocGRmKSkKK2lmIERYX1RFU1RfRkVBVFVSRShwcykgfHwgRFhfVEVTVF9GRUFUVVJFKHBkZik7IHRoZW4KKyAgICBEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0xBVEVYLCBZRVMpCitlbHNlCisgICAgRFhfRU5WX0FQUEVORChHRU5FUkFURV9MQVRFWCwgTk8pCitmaQorCisjIFBhcGVyIHNpemUgZm9yIFBTIGFuZC9vciBQREY6CitBQ19BUkdfVkFSKERPWFlHRU5fUEFQRVJfU0laRSwKKyAgICAgICAgICAgW2E0d2lkZSAoZGVmYXVsdCksIGE0LCBsZXR0ZXIsIGxlZ2FsIG9yIGV4ZWN1dGl2ZV0pCitjYXNlICIkRE9YWUdFTl9QQVBFUl9TSVpFIiBpbgorIygKKyIiKQorICAgIEFDX1NVQlNUKERPWFlHRU5fUEFQRVJfU0laRSwgIiIpCis7OyAjKAorYTR3aWRlfGE0fGxldHRlcnxsZWdhbHxleGVjdXRpdmUpCisgICAgRFhfRU5WX0FQUEVORChQQVBFUl9TSVpFLCAkRE9YWUdFTl9QQVBFUl9TSVpFKQorOzsgIygKKyopCisgICAgQUNfTVNHX0VSUk9SKFt1bmtub3duIERPWFlHRU5fUEFQRVJfU0laRT0nJERPWFlHRU5fUEFQRVJfU0laRSddKQorOzsKK2VzYWMKKworI0ZvciBkZWJ1Z2dpbmc6CisjZWNobyBEWF9GTEFHX2RvYz0kRFhfRkxBR19kb2MKKyNlY2hvIERYX0ZMQUdfZG90PSREWF9GTEFHX2RvdAorI2VjaG8gRFhfRkxBR19tYW49JERYX0ZMQUdfbWFuCisjZWNobyBEWF9GTEFHX2h0bWw9JERYX0ZMQUdfaHRtbAorI2VjaG8gRFhfRkxBR19jaG09JERYX0ZMQUdfY2htCisjZWNobyBEWF9GTEFHX2NoaT0kRFhfRkxBR19jaGkKKyNlY2hvIERYX0ZMQUdfcnRmPSREWF9GTEFHX3J0ZgorI2VjaG8gRFhfRkxBR194bWw9JERYX0ZMQUdfeG1sCisjZWNobyBEWF9GTEFHX3BkZj0kRFhfRkxBR19wZGYKKyNlY2hvIERYX0ZMQUdfcHM9JERYX0ZMQUdfcHMKKyNlY2hvIERYX0VOVj0kRFhfRU5WCitdKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9wdGhyZWFkLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9wdGhyZWFkLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNDA1MWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X3B0aHJlYWQubTQKQEAgLTAsMCArMSw0ODUgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgICAgICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9wdGhyZWFkLmh0bWwKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQVhfUFRIUkVBRChbQUNUSU9OLUlGLUZPVU5EWywgQUNUSU9OLUlGLU5PVC1GT1VORF1dKQorIworIyBERVNDUklQVElPTgorIworIyAgIFRoaXMgbWFjcm8gZmlndXJlcyBvdXQgaG93IHRvIGJ1aWxkIEMgcHJvZ3JhbXMgdXNpbmcgUE9TSVggdGhyZWFkcy4gSXQKKyMgICBzZXRzIHRoZSBQVEhSRUFEX0xJQlMgb3V0cHV0IHZhcmlhYmxlIHRvIHRoZSB0aHJlYWRzIGxpYnJhcnkgYW5kIGxpbmtlcgorIyAgIGZsYWdzLCBhbmQgdGhlIFBUSFJFQURfQ0ZMQUdTIG91dHB1dCB2YXJpYWJsZSB0byBhbnkgc3BlY2lhbCBDIGNvbXBpbGVyCisjICAgZmxhZ3MgdGhhdCBhcmUgbmVlZGVkLiAoVGhlIHVzZXIgY2FuIGFsc28gZm9yY2UgY2VydGFpbiBjb21waWxlcgorIyAgIGZsYWdzL2xpYnMgdG8gYmUgdGVzdGVkIGJ5IHNldHRpbmcgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzLikKKyMKKyMgICBBbHNvIHNldHMgUFRIUkVBRF9DQyB0byBhbnkgc3BlY2lhbCBDIGNvbXBpbGVyIHRoYXQgaXMgbmVlZGVkIGZvcgorIyAgIG11bHRpLXRocmVhZGVkIHByb2dyYW1zIChkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgQ0Mgb3RoZXJ3aXNlKS4gKFRoaXMKKyMgICBpcyBuZWNlc3Nhcnkgb24gQUlYIHRvIHVzZSB0aGUgc3BlY2lhbCBjY19yIGNvbXBpbGVyIGFsaWFzLikKKyMKKyMgICBOT1RFOiBZb3UgYXJlIGFzc3VtZWQgdG8gbm90IG9ubHkgY29tcGlsZSB5b3VyIHByb2dyYW0gd2l0aCB0aGVzZSBmbGFncywKKyMgICBidXQgYWxzbyB0byBsaW5rIHdpdGggdGhlbSBhcyB3ZWxsLiBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IGxpbmsgd2l0aAorIyAgICRQVEhSRUFEX0NDICRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTICRMREZMQUdTIC4uLiAkUFRIUkVBRF9MSUJTICRMSUJTCisjCisjICAgSWYgeW91IGFyZSBvbmx5IGJ1aWxkaW5nIHRocmVhZGVkIHByb2dyYW1zLCB5b3UgbWF5IHdpc2ggdG8gdXNlIHRoZXNlCisjICAgdmFyaWFibGVzIGluIHlvdXIgZGVmYXVsdCBMSUJTLCBDRkxBR1MsIGFuZCBDQzoKKyMKKyMgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisjICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorIyAgICAgQ0M9IiRQVEhSRUFEX0NDIgorIworIyAgIEluIGFkZGl0aW9uLCBpZiB0aGUgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgdGhyZWFkLWF0dHJpYnV0ZSBjb25zdGFudAorIyAgIGhhcyBhIG5vbnN0YW5kYXJkIG5hbWUsIHRoaXMgbWFjcm8gZGVmaW5lcyBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSB0bworIyAgIHRoYXQgbmFtZSAoZS5nLiBQVEhSRUFEX0NSRUFURV9VTkRFVEFDSEVEIG9uIEFJWCkuCisjCisjICAgQWxzbyBIQVZFX1BUSFJFQURfUFJJT19JTkhFUklUIGlzIGRlZmluZWQgaWYgcHRocmVhZCBpcyBmb3VuZCBhbmQgdGhlCisjICAgUFRIUkVBRF9QUklPX0lOSEVSSVQgc3ltYm9sIGlzIGRlZmluZWQgd2hlbiBjb21waWxpbmcgd2l0aAorIyAgIFBUSFJFQURfQ0ZMQUdTLgorIworIyAgIEFDVElPTi1JRi1GT1VORCBpcyBhIGxpc3Qgb2Ygc2hlbGwgY29tbWFuZHMgdG8gcnVuIGlmIGEgdGhyZWFkcyBsaWJyYXJ5CisjICAgaXMgZm91bmQsIGFuZCBBQ1RJT04tSUYtTk9ULUZPVU5EIGlzIGEgbGlzdCBvZiBjb21tYW5kcyB0byBydW4gaXQgaWYgaXQKKyMgICBpcyBub3QgZm91bmQuIElmIEFDVElPTi1JRi1GT1VORCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBhY3Rpb24KKyMgICB3aWxsIGRlZmluZSBIQVZFX1BUSFJFQUQuCisjCisjICAgUGxlYXNlIGxldCB0aGUgYXV0aG9ycyBrbm93IGlmIHRoaXMgbWFjcm8gZmFpbHMgb24gYW55IHBsYXRmb3JtLCBvciBpZgorIyAgIHlvdSBoYXZlIGFueSBvdGhlciBzdWdnZXN0aW9ucyBvciBjb21tZW50cy4gVGhpcyBtYWNybyB3YXMgYmFzZWQgb24gd29yaworIyAgIGJ5IFNHSiBvbiBhdXRvY29uZiBzY3JpcHRzIGZvciBGRlRXIChodHRwOi8vd3d3LmZmdHcub3JnLykgKHdpdGggaGVscAorIyAgIGZyb20gTS4gRnJpZ28pLCBhcyB3ZWxsIGFzIGFjX3B0aHJlYWQgYW5kIGhiX3B0aHJlYWQgbWFjcm9zIHBvc3RlZCBieQorIyAgIEFsZWphbmRybyBGb3Jlcm8gQ3VlcnZvIHRvIHRoZSBhdXRvY29uZiBtYWNybyByZXBvc2l0b3J5LiBXZSBhcmUgYWxzbworIyAgIGdyYXRlZnVsIGZvciB0aGUgaGVscGZ1bCBmZWVkYmFjayBvZiBudW1lcm91cyB1c2Vycy4KKyMKKyMgICBVcGRhdGVkIGZvciBBdXRvY29uZiAyLjY4IGJ5IERhbmllbCBSaWNoYXJkIEcuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDggU3RldmVuIEcuIEpvaG5zb24gPHN0ZXZlbmpAYWx1bS5taXQuZWR1PgorIyAgIENvcHlyaWdodCAoYykgMjAxMSBEYW5pZWwgUmljaGFyZCBHLiA8c2t1bmtAaVNLVU5LLk9SRz4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyMgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsCisjICAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyAgIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHJlc3BlY3RpdmUgQXV0b2NvbmYgTWFjcm8ncyBjb3B5cmlnaHQgb3duZXIKKyMgICBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhlIGNvbmZpZ3VyZQorIyAgIHNjcmlwdHMgdGhhdCBhcmUgdGhlIG91dHB1dCBvZiBBdXRvY29uZiB3aGVuIHByb2Nlc3NpbmcgdGhlIE1hY3JvLiBZb3UKKyMgICBuZWVkIG5vdCBmb2xsb3cgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB3aGVuIHVzaW5nCisjICAgb3IgZGlzdHJpYnV0aW5nIHN1Y2ggc2NyaXB0cywgZXZlbiB0aG91Z2ggcG9ydGlvbnMgb2YgdGhlIHRleHQgb2YgdGhlCisjICAgTWFjcm8gYXBwZWFyIGluIHRoZW0uIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBkb2VzIGdvdmVybgorIyAgIGFsbCBvdGhlciB1c2Ugb2YgdGhlIG1hdGVyaWFsIHRoYXQgY29uc3RpdHV0ZXMgdGhlIEF1dG9jb25mIE1hY3JvLgorIworIyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZSBBdXRvY29uZgorIyAgIE1hY3JvIHJlbGVhc2VkIGJ5IHRoZSBBdXRvY29uZiBBcmNoaXZlLiBXaGVuIHlvdSBtYWtlIGFuZCBkaXN0cmlidXRlIGEKKyMgICBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBBdXRvY29uZiBNYWNybywgeW91IG1heSBleHRlbmQgdGhpcyBzcGVjaWFsCisjICAgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91ciBtb2RpZmllZCB2ZXJzaW9uIGFzIHdlbGwuCisKKyNzZXJpYWwgMjMKKworQVVfQUxJQVMoW0FDWF9QVEhSRUFEXSwgW0FYX1BUSFJFQURdKQorQUNfREVGVU4oW0FYX1BUSFJFQURdLCBbCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKK0FDX1JFUVVJUkUoW0FDX1BST0dfU0VEXSkKK0FDX0xBTkdfUFVTSChbQ10pCitheF9wdGhyZWFkX29rPW5vCisKKyMgV2UgdXNlZCB0byBjaGVjayBmb3IgcHRocmVhZC5oIGZpcnN0LCBidXQgdGhpcyBmYWlscyBpZiBwdGhyZWFkLmgKKyMgcmVxdWlyZXMgc3BlY2lhbCBjb21waWxlciBmbGFncyAoZS5nLiBvbiBUcnU2NCBvciBTZXF1ZW50KS4KKyMgSXQgZ2V0cyBjaGVja2VkIGZvciBpbiB0aGUgbGluayB0ZXN0IGFueXdheS4KKworIyBGaXJzdCBvZiBhbGwsIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyBzZXQgYW55IG9mIHRoZSBQVEhSRUFEX0xJQlMsCisjIGV0Y2V0ZXJhIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIGlmIHRocmVhZHMgbGlua2luZyB3b3JrcyB1c2luZworIyB0aGVtOgoraWYgdGVzdCAieCRQVEhSRUFEX0NGTEFHUyRQVEhSRUFEX0xJQlMiICE9ICJ4IjsgdGhlbgorICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0M9IiRDQyIKKyAgICAgICAgYXhfcHRocmVhZF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgICAgYXhfcHRocmVhZF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBBU19JRihbdGVzdCAieCRQVEhSRUFEX0NDIiAhPSAieCJdLCBbQ0M9IiRQVEhSRUFEX0NDIl0pCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHB0aHJlYWRfam9pbiB1c2luZyAkQ0MgJFBUSFJFQURfQ0ZMQUdTICRQVEhSRUFEX0xJQlNdKQorICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19DQUxMKFtdLCBbcHRocmVhZF9qb2luXSldLCBbYXhfcHRocmVhZF9vaz15ZXNdKQorICAgICAgICBBQ19NU0dfUkVTVUxUKFskYXhfcHRocmVhZF9va10pCisgICAgICAgIGlmIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSAieG5vIjsgdGhlbgorICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iIgorICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCisgICAgICAgIGZpCisgICAgICAgIENDPSIkYXhfcHRocmVhZF9zYXZlX0NDIgorICAgICAgICBDRkxBR1M9IiRheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTIgorICAgICAgICBMSUJTPSIkYXhfcHRocmVhZF9zYXZlX0xJQlMiCitmaQorCisjIFdlIG11c3QgY2hlY2sgZm9yIHRoZSB0aHJlYWRzIGxpYnJhcnkgdW5kZXIgYSBudW1iZXIgb2YgZGlmZmVyZW50CisjIG5hbWVzOyB0aGUgb3JkZXJpbmcgaXMgdmVyeSBpbXBvcnRhbnQgYmVjYXVzZSBzb21lIHN5c3RlbXMKKyMgKGUuZy4gREVDKSBoYXZlIGJvdGggLWxwdGhyZWFkIGFuZCAtbHB0aHJlYWRzLCB3aGVyZSBvbmUgb2YgdGhlCisjIGxpYnJhcmllcyBpcyBicm9rZW4gKG5vbi1QT1NJWCkuCisKKyMgQ3JlYXRlIGEgbGlzdCBvZiB0aHJlYWQgZmxhZ3MgdG8gdHJ5LiAgSXRlbXMgc3RhcnRpbmcgd2l0aCBhICItIiBhcmUKKyMgQyBjb21waWxlciBmbGFncywgYW5kIG90aGVyIGl0ZW1zIGFyZSBsaWJyYXJ5IG5hbWVzLCBleGNlcHQgZm9yICJub25lIgorIyB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSB0cnkgd2l0aG91dCBhbnkgZmxhZ3MgYXQgYWxsLCBhbmQgInB0aHJlYWQtY29uZmlnIgorIyB3aGljaCBpcyBhIHByb2dyYW0gcmV0dXJuaW5nIHRoZSBmbGFncyBmb3IgdGhlIFB0aCBlbXVsYXRpb24gbGlicmFyeS4KKworYXhfcHRocmVhZF9mbGFncz0icHRocmVhZHMgbm9uZSAtS3RocmVhZCAtcHRocmVhZCAtcHRocmVhZHMgLW10aHJlYWRzIHB0aHJlYWQgLS10aHJlYWQtc2FmZSAtbXQgcHRocmVhZC1jb25maWciCisKKyMgVGhlIG9yZGVyaW5nICppcyogKHNvbWV0aW1lcykgaW1wb3J0YW50LiAgU29tZSBub3RlcyBvbiB0aGUKKyMgaW5kaXZpZHVhbCBpdGVtcyBmb2xsb3c6CisKKyMgcHRocmVhZHM6IEFJWCAobXVzdCBjaGVjayB0aGlzIGJlZm9yZSAtbHB0aHJlYWQpCisjIG5vbmU6IGluIGNhc2UgdGhyZWFkcyBhcmUgaW4gbGliYzsgc2hvdWxkIGJlIHRyaWVkIGJlZm9yZSAtS3RocmVhZCBhbmQKKyMgICAgICAgb3RoZXIgY29tcGlsZXIgZmxhZ3MgdG8gcHJldmVudCBjb250aW51YWwgY29tcGlsZXIgd2FybmluZ3MKKyMgLUt0aHJlYWQ6IFNlcXVlbnQgKHRocmVhZHMgaW4gbGliYywgYnV0IC1LdGhyZWFkIG5lZWRlZCBmb3IgcHRocmVhZC5oKQorIyAtcHRocmVhZDogTGludXgvZ2NjIChrZXJuZWwgdGhyZWFkcyksIEJTRC9nY2MgKHVzZXJsYW5kIHRocmVhZHMpLCBUcnU2NAorIyAgICAgICAgICAgKE5vdGU6IEhQIEMgcmVqZWN0cyB0aGlzIHdpdGggImJhZCBmb3JtIGZvciBgLXQnIG9wdGlvbiIpCisjIC1wdGhyZWFkczogU29sYXJpcy9nY2MgKE5vdGU6IEhQIEMgYWxzbyByZWplY3RzKQorIyAtbXQ6IFN1biBXb3Jrc2hvcCBDIChtYXkgb25seSBsaW5rIFN1bk9TIHRocmVhZHMgWy1sdGhyZWFkXSwgYnV0IGl0CisjICAgICAgZG9lc24ndCBodXJ0IHRvIGNoZWNrIHNpbmNlIHRoaXMgc29tZXRpbWVzIGRlZmluZXMgcHRocmVhZHMgYW5kCisjICAgICAgLURfUkVFTlRSQU5UIHRvbyksIEhQIEMgKG11c3QgYmUgY2hlY2tlZCBiZWZvcmUgLWxwdGhyZWFkLCB3aGljaAorIyAgICAgIGlzIHByZXNlbnQgYnV0IHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseTsgYW5kIGJlZm9yZSAtbXRocmVhZHMsCisjICAgICAgYmVjYXVzZSB0aGUgY29tcGlsZXIgaW50ZXJwcmV0cyB0aGlzIGFzICItbXQiICsgIi1ocmVhZHMiKQorIyAtbXRocmVhZHM6IE1pbmd3MzIvZ2NjLCBMeW54L2djYworIyBwdGhyZWFkOiBMaW51eCwgZXRjZXRlcmEKKyMgLS10aHJlYWQtc2FmZTogS0FJIEMrKworIyBwdGhyZWFkLWNvbmZpZzogdXNlIHB0aHJlYWQtY29uZmlnIHByb2dyYW0gKGZvciBHTlUgUHRoIGxpYnJhcnkpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKworICAgICAgICBmcmVlYnNkKikKKworICAgICAgICAjIC1rdGhyZWFkOiBGcmVlQlNEIGtlcm5lbCB0aHJlYWRzIChwcmVmZXJyZWQgdG8gLXB0aHJlYWQgc2luY2UgU01QLWFibGUpCisgICAgICAgICMgbHRocmVhZDogTGludXhUaHJlYWRzIHBvcnQgb24gRnJlZUJTRCAoYWxzbyBwcmVmZXJyZWQgdG8gLXB0aHJlYWQpCisKKyAgICAgICAgYXhfcHRocmVhZF9mbGFncz0iLWt0aHJlYWQgbHRocmVhZCAkYXhfcHRocmVhZF9mbGFncyIKKyAgICAgICAgOzsKKworICAgICAgICBocHV4KikKKworICAgICAgICAjIEZyb20gdGhlIGNjKDEpIG1hbiBwYWdlOiAiWy1tdF0gU2V0cyB2YXJpb3VzIC1EIGZsYWdzIHRvIGVuYWJsZQorICAgICAgICAjIG11bHRpLXRocmVhZGluZyBhbmQgYWxzbyBzZXRzIC1scHRocmVhZC4iCisKKyAgICAgICAgYXhfcHRocmVhZF9mbGFncz0iLW10IC1wdGhyZWFkIHB0aHJlYWQgJGF4X3B0aHJlYWRfZmxhZ3MiCisgICAgICAgIDs7CisKKyAgICAgICAgb3BlbmVkaXRpb24qKQorCisgICAgICAgICMgSUJNIHovT1MgcmVxdWlyZXMgYSBmZWF0dXJlLXRlc3QgbWFjcm8gdG8gYmUgZGVmaW5lZCBpbiBvcmRlciB0bworICAgICAgICAjIGVuYWJsZSBQT1NJWCB0aHJlYWRzIGF0IGFsbCwgc28gZ2l2ZSB0aGUgdXNlciBhIGhpbnQgaWYgdGhpcyBpcworICAgICAgICAjIG5vdCBzZXQuIChXZSBkb24ndCBkZWZpbmUgdGhlc2Ugb3Vyc2VsdmVzLCBhcyB0aGV5IGNhbiBhZmZlY3QKKyAgICAgICAgIyBvdGhlciBwb3J0aW9ucyBvZiB0aGUgc3lzdGVtIEFQSSBpbiB1bnByZWRpY3RhYmxlIHdheXMuKQorCisgICAgICAgIEFDX0VHUkVQX0NQUChbQVhfUFRIUkVBRF9aT1NfTUlTU0lOR10sCisgICAgICAgICAgICBbCisjICAgICAgICAgICAgaWYgIWRlZmluZWQoX09QRU5fVEhSRUFEUykgJiYgIWRlZmluZWQoX1VOSVgwM19USFJFQURTKQorICAgICAgICAgICAgIEFYX1BUSFJFQURfWk9TX01JU1NJTkcKKyMgICAgICAgICAgICBlbmRpZgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIFtBQ19NU0dfV0FSTihbSUJNIHovT1MgcmVxdWlyZXMgLURfT1BFTl9USFJFQURTIG9yIC1EX1VOSVgwM19USFJFQURTIHRvIGVuYWJsZSBwdGhyZWFkcyBzdXBwb3J0Ll0pXSkKKyAgICAgICAgOzsKKworICAgICAgICBzb2xhcmlzKikKKworICAgICAgICAjIE9uIFNvbGFyaXMgKGF0IGxlYXN0LCBmb3Igc29tZSB2ZXJzaW9ucyksIGxpYmMgY29udGFpbnMgc3R1YmJlZAorICAgICAgICAjIChub24tZnVuY3Rpb25hbCkgdmVyc2lvbnMgb2YgdGhlIHB0aHJlYWRzIHJvdXRpbmVzLCBzbyBsaW5rLWJhc2VkCisgICAgICAgICMgdGVzdHMgd2lsbCBlcnJvbmVvdXNseSBzdWNjZWVkLiAoTi5CLjogVGhlIHN0dWJzIGFyZSBtaXNzaW5nCisgICAgICAgICMgcHRocmVhZF9jbGVhbnVwX3B1c2gsIG9yIHJhdGhlciBhIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGlzIG1hY3JvLAorICAgICAgICAjIHNvIHdlIGNvdWxkIGNoZWNrIGZvciB0aGF0LCBidXQgd2hvIGtub3dzIHdoZXRoZXIgdGhleSdsbCBzdHViCisgICAgICAgICMgdGhhdCB0b28gaW4gYSBmdXR1cmUgbGliYy4pICBTbyB3ZSdsbCBjaGVjayBmaXJzdCBmb3IgdGhlCisgICAgICAgICMgc3RhbmRhcmQgU29sYXJpcyB3YXkgb2YgbGlua2luZyBwdGhyZWFkcyAoLW10IC1scHRocmVhZCkuCisKKyAgICAgICAgYXhfcHRocmVhZF9mbGFncz0iLW10LHB0aHJlYWQgcHRocmVhZCAkYXhfcHRocmVhZF9mbGFncyIKKyAgICAgICAgOzsKK2VzYWMKKworIyBHQ0MgZ2VuZXJhbGx5IHVzZXMgLXB0aHJlYWQsIG9yIC1wdGhyZWFkcyBvbiBzb21lIHBsYXRmb3JtcyAoZS5nLiBTUEFSQykKKworQVNfSUYoW3Rlc3QgIngkR0NDIiA9ICJ4eWVzIl0sCisgICAgICBbYXhfcHRocmVhZF9mbGFncz0iLXB0aHJlYWQgLXB0aHJlYWRzICRheF9wdGhyZWFkX2ZsYWdzIl0pCisKKyMgVGhlIHByZXNlbmNlIG9mIGEgZmVhdHVyZSB0ZXN0IG1hY3JvIHJlcXVlc3RpbmcgcmUtZW50cmFudCBmdW5jdGlvbgorIyBkZWZpbml0aW9ucyBpcywgb24gc29tZSBzeXN0ZW1zLCBhIHN0cm9uZyBoaW50IHRoYXQgcHRocmVhZHMgc3VwcG9ydCBpcworIyBjb3JyZWN0bHkgZW5hYmxlZAorCitjYXNlICRob3N0X29zIGluCisgICAgICAgIGRhcndpbiogfCBocHV4KiB8IGxpbnV4KiB8IG9zZiogfCBzb2xhcmlzKikKKyAgICAgICAgYXhfcHRocmVhZF9jaGVja19tYWNybz0iX1JFRU5UUkFOVCIKKyAgICAgICAgOzsKKworICAgICAgICBhaXgqKQorICAgICAgICBheF9wdGhyZWFkX2NoZWNrX21hY3JvPSJfVEhSRUFEX1NBRkUiCisgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgYXhfcHRocmVhZF9jaGVja19tYWNybz0iLS0iCisgICAgICAgIDs7Citlc2FjCitBU19JRihbdGVzdCAieCRheF9wdGhyZWFkX2NoZWNrX21hY3JvIiA9ICJ4LS0iXSwKKyAgICAgIFtheF9wdGhyZWFkX2NoZWNrX2NvbmQ9MF0sCisgICAgICBbYXhfcHRocmVhZF9jaGVja19jb25kPSIhZGVmaW5lZCgkYXhfcHRocmVhZF9jaGVja19tYWNybykiXSkKKworIyBBcmUgd2UgY29tcGlsaW5nIHdpdGggQ2xhbmc/CisKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRDQyBpcyBDbGFuZ10sCisgICAgW2F4X2N2X1BUSFJFQURfQ0xBTkddLAorICAgIFtheF9jdl9QVEhSRUFEX0NMQU5HPW5vCisgICAgICMgTm90ZSB0aGF0IEF1dG9jb25mIHNldHMgR0NDPXllcyBmb3IgQ2xhbmcgYXMgd2VsbCBhcyBHQ0MKKyAgICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCisgICAgICAgIEFDX0VHUkVQX0NQUChbQVhfUFRIUkVBRF9DQ19JU19DTEFOR10sCisgICAgICAgICAgICBbLyogTm90ZTogQ2xhbmcgMi43IGxhY2tzIF9fY2xhbmdfW2Etel0rX18gKi8KKyMgICAgICAgICAgICBpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgZGVmaW5lZChfX2xsdm1fXykKKyAgICAgICAgICAgICBBWF9QVEhSRUFEX0NDX0lTX0NMQU5HCisjICAgICAgICAgICAgZW5kaWYKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9DTEFORz15ZXNdKQorICAgICBmaQorICAgIF0pCitheF9wdGhyZWFkX2NsYW5nPSIkYXhfY3ZfUFRIUkVBRF9DTEFORyIKKworYXhfcHRocmVhZF9jbGFuZ193YXJuaW5nPW5vCisKKyMgQ2xhbmcgbmVlZHMgc3BlY2lhbCBoYW5kbGluZywgYmVjYXVzZSBvbGRlciB2ZXJzaW9ucyBoYW5kbGUgdGhlIC1wdGhyZWFkCisjIG9wdGlvbiBpbiBhIHJhdGhlci4uLiBpZGlvc3luY3JhdGljIHdheQorCitpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfY2xhbmciID0gInh5ZXMiOyB0aGVuCisKKyAgICAgICAgIyBDbGFuZyB0YWtlcyAtcHRocmVhZDsgaXQgaGFzIG5ldmVyIHN1cHBvcnRlZCBhbnkgb3RoZXIgZmxhZworCisgICAgICAgICMgKE5vdGUgMTogVGhpcyB3aWxsIG5lZWQgdG8gYmUgcmV2aXNpdGVkIGlmIGEgc3lzdGVtIHRoYXQgQ2xhbmcKKyAgICAgICAgIyBzdXBwb3J0cyBoYXMgUE9TSVggdGhyZWFkcyBpbiBhIHNlcGFyYXRlIGxpYnJhcnkuICBUaGlzIHRlbmRzIG5vdAorICAgICAgICAjIHRvIGJlIHRoZSB3YXkgb2YgbW9kZXJuIHN5c3RlbXMsIGJ1dCBpdCdzIGNvbmNlaXZhYmxlLikKKworICAgICAgICAjIChOb3RlIDI6IE9uIHNvbWUgc3lzdGVtcywgbm90YWJseSBEYXJ3aW4sIC1wdGhyZWFkIGlzIG5vdCBuZWVkZWQKKyAgICAgICAgIyB0byBnZXQgUE9TSVggdGhyZWFkcyBzdXBwb3J0OyB0aGUgQVBJIGlzIGFsd2F5cyBwcmVzZW50IGFuZAorICAgICAgICAjIGFjdGl2ZS4gIFdlIGNvdWxkIHJlYXNvbmFibHkgbGVhdmUgUFRIUkVBRF9DRkxBR1MgZW1wdHkuICBCdXQKKyAgICAgICAgIyAtcHRocmVhZCBkb2VzIGRlZmluZSBfUkVFTlRSQU5ULCBhbmQgd2hpbGUgdGhlIERhcndpbiBoZWFkZXJzCisgICAgICAgICMgaWdub3JlIHRoaXMgbWFjcm8sIHRoaXJkLXBhcnR5IGhlYWRlcnMgbWlnaHQgbm90LikKKworICAgICAgICBQVEhSRUFEX0NGTEFHUz0iLXB0aHJlYWQiCisgICAgICAgIFBUSFJFQURfTElCUz0KKworICAgICAgICBheF9wdGhyZWFkX29rPXllcworCisgICAgICAgICMgSG93ZXZlciwgb2xkZXIgdmVyc2lvbnMgb2YgQ2xhbmcgbWFrZSBhIHBvaW50IG9mIHdhcm5pbmcgdGhlIHVzZXIKKyAgICAgICAgIyB0aGF0LCBpbiBhbiBpbnZvY2F0aW9uIHdoZXJlIG9ubHkgbGlua2luZyBhbmQgbm8gY29tcGlsYXRpb24gaXMKKyAgICAgICAgIyB0YWtpbmcgcGxhY2UsIHRoZSAtcHRocmVhZCBvcHRpb24gaGFzIG5vIGVmZmVjdCAoImFyZ3VtZW50IHVudXNlZAorICAgICAgICAjIGR1cmluZyBjb21waWxhdGlvbiIpLiAgVGhleSBleHBlY3QgLXB0aHJlYWQgdG8gYmUgcGFzc2VkIGluIG9ubHkKKyAgICAgICAgIyB3aGVuIHNvdXJjZSBjb2RlIGlzIGJlaW5nIGNvbXBpbGVkLgorICAgICAgICAjCisgICAgICAgICMgUHJvYmxlbSBpcywgdGhpcyBpcyBhdCBvZGRzIHdpdGggdGhlIHdheSBBdXRvbWFrZSBhbmQgbW9zdCBvdGhlcgorICAgICAgICAjIEMgYnVpbGQgZnJhbWV3b3JrcyBmdW5jdGlvbiwgd2hpY2ggaXMgdGhhdCB0aGUgc2FtZSBmbGFncyB1c2VkIGluCisgICAgICAgICMgY29tcGlsYXRpb24gKENGTEFHUykgYXJlIGFsc28gdXNlZCBpbiBsaW5raW5nLiAgTWFueSBzeXN0ZW1zCisgICAgICAgICMgc3VwcG9ydGVkIGJ5IEFYX1BUSFJFQUQgcmVxdWlyZSBleGFjdGx5IHRoaXMgZm9yIFBPU0lYIHRocmVhZHMKKyAgICAgICAgIyBzdXBwb3J0LCBhbmQgaW4gZmFjdCBpdCBpcyBvZnRlbiBub3Qgc3RyYWlnaHRmb3J3YXJkIHRvIHNwZWNpZnkgYQorICAgICAgICAjIGZsYWcgdGhhdCBpcyB1c2VkIG9ubHkgaW4gdGhlIGNvbXBpbGF0aW9uIHBoYXNlIGFuZCBub3QgaW4KKyAgICAgICAgIyBsaW5raW5nLiAgU3VjaCBhIHNjZW5hcmlvIGlzIGV4dHJlbWVseSByYXJlIGluIHByYWN0aWNlLgorICAgICAgICAjCisgICAgICAgICMgRXZlbiB0aG91Z2ggdXNlIG9mIHRoZSAtcHRocmVhZCBmbGFnIGluIGxpbmtpbmcgd291bGQgb25seSBwcmludAorICAgICAgICAjIGEgd2FybmluZywgdGhpcyBjYW4gYmUgYSBudWlzYW5jZSBmb3Igd2VsbC1ydW4gc29mdHdhcmUgcHJvamVjdHMKKyAgICAgICAgIyB0aGF0IGJ1aWxkIHdpdGggLVdlcnJvci4gIFNvIGlmIHRoZSBhY3RpdmUgdmVyc2lvbiBvZiBDbGFuZyBoYXMKKyAgICAgICAgIyB0aGlzIG1pc2ZlYXR1cmUsIHdlIHNlYXJjaCBmb3IgYW4gb3B0aW9uIHRvIHNxdWFzaCBpdC4KKworICAgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBDbGFuZyBuZWVkcyBmbGFnIHRvIHByZXZlbnQgImFyZ3VtZW50IHVudXNlZCIgd2FybmluZyB3aGVuIGxpbmtpbmcgd2l0aCAtcHRocmVhZF0sCisgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9DTEFOR19OT19XQVJOX0ZMQUddLAorICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHPXVua25vd24KKyAgICAgICAgICAgICAjIENyZWF0ZSBhbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiAkYWNfbGluayB0aGF0IGNvbXBpbGVzIGFuZAorICAgICAgICAgICAgICMgbGlua3MgaW4gdHdvIHN0ZXBzICguYyAtPiAubywgLm8gLT4gZXhlKSBpbnN0ZWFkIG9mIG9uZQorICAgICAgICAgICAgICMgKC5jIC0+IGV4ZSksIGJlY2F1c2UgdGhlIHdhcm5pbmcgb2NjdXJzIG9ubHkgaW4gdGhlIHNlY29uZAorICAgICAgICAgICAgICMgc3RlcAorICAgICAgICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9hY19saW5rPSIkYWNfbGluayIKKyAgICAgICAgICAgICBheF9wdGhyZWFkX3NlZD0ncy9jb25mdGVzdFwuXCRhY19leHQvY29uZnRlc3QuJGFjX29iamV4dC9nJworICAgICAgICAgICAgIGF4X3B0aHJlYWRfbGlua19zdGVwPWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICIkYXhfcHRocmVhZF9zZWQiYAorICAgICAgICAgICAgIGF4X3B0aHJlYWRfMnN0ZXBfYWNfbGluaz0iKCRhY19jb21waWxlKSAmJiAoZWNobyA9PT09ID4mNSkgJiYgKCRheF9wdGhyZWFkX2xpbmtfc3RlcCkiCisgICAgICAgICAgICAgYXhfcHRocmVhZF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgICAgICAgICBmb3IgYXhfcHRocmVhZF90cnkgaW4gJycgLVF1bnVzZWQtYXJndW1lbnRzIC1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudCB1bmtub3duOyBkbworICAgICAgICAgICAgICAgIEFTX0lGKFt0ZXN0ICJ4JGF4X3B0aHJlYWRfdHJ5IiA9ICJ4dW5rbm93biJdLCBbYnJlYWtdKQorICAgICAgICAgICAgICAgIENGTEFHUz0iLVdlcnJvciAtV3Vua25vd24td2FybmluZy1vcHRpb24gJGF4X3B0aHJlYWRfdHJ5IC1wdGhyZWFkICRheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTIgorICAgICAgICAgICAgICAgIGFjX2xpbms9IiRheF9wdGhyZWFkX3NhdmVfYWNfbGluayIKKyAgICAgICAgICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1tpbnQgbWFpbih2b2lkKXtyZXR1cm4gMDt9XV0pXSwKKyAgICAgICAgICAgICAgICAgICAgW2FjX2xpbms9IiRheF9wdGhyZWFkXzJzdGVwX2FjX2xpbmsiCisgICAgICAgICAgICAgICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1tpbnQgbWFpbih2b2lkKXtyZXR1cm4gMDt9XV0pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbYnJlYWtdKQorICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICBhY19saW5rPSIkYXhfcHRocmVhZF9zYXZlX2FjX2xpbmsiCisgICAgICAgICAgICAgQ0ZMQUdTPSIkYXhfcHRocmVhZF9zYXZlX0NGTEFHUyIKKyAgICAgICAgICAgICBBU19JRihbdGVzdCAieCRheF9wdGhyZWFkX3RyeSIgPSAieCJdLCBbYXhfcHRocmVhZF90cnk9bm9dKQorICAgICAgICAgICAgIGF4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHPSIkYXhfcHRocmVhZF90cnkiCisgICAgICAgICAgICBdKQorCisgICAgICAgIGNhc2UgIiRheF9jdl9QVEhSRUFEX0NMQU5HX05PX1dBUk5fRkxBRyIgaW4KKyAgICAgICAgICAgICAgICBubyB8IHVua25vd24pIDs7CisgICAgICAgICAgICAgICAgKikgUFRIUkVBRF9DRkxBR1M9IiRheF9jdl9QVEhSRUFEX0NMQU5HX05PX1dBUk5fRkxBRyAkUFRIUkVBRF9DRkxBR1MiIDs7CisgICAgICAgIGVzYWMKKworZmkgIyAkYXhfcHRocmVhZF9jbGFuZyA9IHllcworCitpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInhubyI7IHRoZW4KK2ZvciBheF9wdGhyZWFkX3RyeV9mbGFnIGluICRheF9wdGhyZWFkX2ZsYWdzOyBkbworCisgICAgICAgIGNhc2UgJGF4X3B0aHJlYWRfdHJ5X2ZsYWcgaW4KKyAgICAgICAgICAgICAgICBub25lKQorICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGhvdXQgYW55IGZsYWdzXSkKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgLW10LHB0aHJlYWQpCisgICAgICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAtbXQgLWxwdGhyZWFkXSkKKyAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iLW10IgorICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iLWxwdGhyZWFkIgorICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAtKikKKyAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHRocmVhZHMgd29yayB3aXRoICRheF9wdGhyZWFkX3RyeV9mbGFnXSkKKyAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iJGF4X3B0aHJlYWRfdHJ5X2ZsYWciCisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgIHB0aHJlYWQtY29uZmlnKQorICAgICAgICAgICAgICAgIEFDX0NIRUNLX1BST0coW2F4X3B0aHJlYWRfY29uZmlnXSwgW3B0aHJlYWQtY29uZmlnXSwgW3llc10sIFtub10pCisgICAgICAgICAgICAgICAgQVNfSUYoW3Rlc3QgIngkYXhfcHRocmVhZF9jb25maWciID0gInhubyJdLCBbY29udGludWVdKQorICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSJgcHRocmVhZC1jb25maWcgLS1jZmxhZ3NgIgorICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iYHB0aHJlYWQtY29uZmlnIC0tbGRmbGFnc2AgYHB0aHJlYWQtY29uZmlnIC0tbGlic2AiCisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgdGhlIHB0aHJlYWRzIGxpYnJhcnkgLWwkYXhfcHRocmVhZF90cnlfZmxhZ10pCisgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbCRheF9wdGhyZWFkX3RyeV9mbGFnIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICBheF9wdGhyZWFkX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisKKyAgICAgICAgIyBDaGVjayBmb3IgdmFyaW91cyBmdW5jdGlvbnMuICBXZSBtdXN0IGluY2x1ZGUgcHRocmVhZC5oLAorICAgICAgICAjIHNpbmNlIHNvbWUgZnVuY3Rpb25zIG1heSBiZSBtYWNyb3MuICAoT24gdGhlIFNlcXVlbnQsIHdlCisgICAgICAgICMgbmVlZCBhIHNwZWNpYWwgZmxhZyAtS3RocmVhZCB0byBtYWtlIHRoaXMgaGVhZGVyIGNvbXBpbGUuKQorICAgICAgICAjIFdlIGNoZWNrIGZvciBwdGhyZWFkX2pvaW4gYmVjYXVzZSBpdCBpcyBpbiAtbHB0aHJlYWQgb24gSVJJWAorICAgICAgICAjIHdoaWxlIHB0aHJlYWRfY3JlYXRlIGlzIGluIGxpYmMuICBXZSBjaGVjayBmb3IgcHRocmVhZF9hdHRyX2luaXQKKyAgICAgICAgIyBkdWUgdG8gREVDIGNyYXppbmVzcyB3aXRoIC1scHRocmVhZHMuICBXZSBjaGVjayBmb3IKKyAgICAgICAgIyBwdGhyZWFkX2NsZWFudXBfcHVzaCBiZWNhdXNlIGl0IGlzIG9uZSBvZiB0aGUgZmV3IHB0aHJlYWQKKyAgICAgICAgIyBmdW5jdGlvbnMgb24gU29sYXJpcyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG5vbi1mdW5jdGlvbmFsIGxpYmMgc3R1Yi4KKyAgICAgICAgIyBXZSB0cnkgcHRocmVhZF9jcmVhdGUgb24gZ2VuZXJhbCBwcmluY2lwbGVzLgorCisgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjICAgICAgICAgICAgICAgICAgICAgICBpZiAkYXhfcHRocmVhZF9jaGVja19jb25kCisjICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgIiRheF9wdGhyZWFkX2NoZWNrX21hY3JvIG11c3QgYmUgZGVmaW5lZCIKKyMgICAgICAgICAgICAgICAgICAgICAgIGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCByb3V0aW5lKHZvaWQgKmEpIHsgYSA9IDA7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkICpzdGFydF9yb3V0aW5lKHZvaWQgKmEpIHsgcmV0dXJuIGE7IH1dLAorICAgICAgICAgICAgICAgICAgICAgICBbcHRocmVhZF90IHRoOyBwdGhyZWFkX2F0dHJfdCBhdHRyOworICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jcmVhdGUoJnRoLCAwLCBzdGFydF9yb3V0aW5lLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfam9pbih0aCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NsZWFudXBfcHVzaChyb3V0aW5lLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY2xlYW51cF9wb3AoMCkgLyogOyAqL10pXSwKKyAgICAgICAgICAgIFtheF9wdGhyZWFkX29rPXllc10sCisgICAgICAgICAgICBbXSkKKworICAgICAgICBDRkxBR1M9IiRheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTIgorICAgICAgICBMSUJTPSIkYXhfcHRocmVhZF9zYXZlX0xJQlMiCisKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbJGF4X3B0aHJlYWRfb2tdKQorICAgICAgICBBU19JRihbdGVzdCAieCRheF9wdGhyZWFkX29rIiA9ICJ4eWVzIl0sIFticmVha10pCisKKyAgICAgICAgUFRIUkVBRF9MSUJTPSIiCisgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCitkb25lCitmaQorCisjIFZhcmlvdXMgb3RoZXIgY2hlY2tzOgoraWYgdGVzdCAieCRheF9wdGhyZWFkX29rIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICBheF9wdGhyZWFkX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisKKyAgICAgICAgIyBEZXRlY3QgQUlYIGxvc3NhZ2U6IEpPSU5BQkxFIGF0dHJpYnV0ZSBpcyBjYWxsZWQgVU5ERVRBQ0hFRC4KKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBqb2luYWJsZSBwdGhyZWFkIGF0dHJpYnV0ZV0sCisgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSXSwKKyAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFI9dW5rbm93bgorICAgICAgICAgICAgIGZvciBheF9wdGhyZWFkX2F0dHIgaW4gUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgUFRIUkVBRF9DUkVBVEVfVU5ERVRBQ0hFRDsgZG8KKyAgICAgICAgICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnQgYXR0ciA9ICRheF9wdGhyZWFkX2F0dHI7IHJldHVybiBhdHRyIC8qIDsgKi9dKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFI9JGF4X3B0aHJlYWRfYXR0cjsgYnJlYWtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKyAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBdKQorICAgICAgICBBU19JRihbdGVzdCAieCRheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFIiICE9ICJ4dW5rbm93biIgJiYgXAorICAgICAgICAgICAgICAgdGVzdCAieCRheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFIiICE9ICJ4UFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUiICYmIFwKKyAgICAgICAgICAgICAgIHRlc3QgIngkYXhfcHRocmVhZF9qb2luYWJsZV9hdHRyX2RlZmluZWQiICE9ICJ4eWVzIl0sCisgICAgICAgICAgICAgIFtBQ19ERUZJTkVfVU5RVU9URUQoW1BUSFJFQURfQ1JFQVRFX0pPSU5BQkxFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJGF4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byBuZWNlc3Nhcnkgc3ltYm9sIGlmIHRoaXMgY29uc3RhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBhIG5vbi1zdGFuZGFyZCBuYW1lIG9uIHlvdXIgc3lzdGVtLl0pCisgICAgICAgICAgICAgICBheF9wdGhyZWFkX2pvaW5hYmxlX2F0dHJfZGVmaW5lZD15ZXMKKyAgICAgICAgICAgICAgXSkKKworICAgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBtb3JlIHNwZWNpYWwgZmxhZ3MgYXJlIHJlcXVpcmVkIGZvciBwdGhyZWFkc10sCisgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9TUEVDSUFMX0ZMQUdTXSwKKyAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX1NQRUNJQUxfRkxBR1M9bm8KKyAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgc29sYXJpcyopCisgICAgICAgICAgICAgYXhfY3ZfUFRIUkVBRF9TUEVDSUFMX0ZMQUdTPSItRF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyIKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIF0pCisgICAgICAgIEFTX0lGKFt0ZXN0ICJ4JGF4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUyIgIT0gInhubyIgJiYgXAorICAgICAgICAgICAgICAgdGVzdCAieCRheF9wdGhyZWFkX3NwZWNpYWxfZmxhZ3NfYWRkZWQiICE9ICJ4eWVzIl0sCisgICAgICAgICAgICAgIFtQVEhSRUFEX0NGTEFHUz0iJGF4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisgICAgICAgICAgICAgICBheF9wdGhyZWFkX3NwZWNpYWxfZmxhZ3NfYWRkZWQ9eWVzXSkKKworICAgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIFBUSFJFQURfUFJJT19JTkhFUklUXSwKKyAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVF0sCisgICAgICAgICAgICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxwdGhyZWFkLmg+XV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2ludCBpID0gUFRIUkVBRF9QUklPX0lOSEVSSVQ7XV0pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQ9eWVzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQ9bm9dKQorICAgICAgICAgICAgXSkKKyAgICAgICAgQVNfSUYoW3Rlc3QgIngkYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQiID0gInh5ZXMiICYmIFwKKyAgICAgICAgICAgICAgIHRlc3QgIngkYXhfcHRocmVhZF9wcmlvX2luaGVyaXRfZGVmaW5lZCIgIT0gInh5ZXMiXSwKKyAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9QVEhSRUFEX1BSSU9fSU5IRVJJVF0sIFsxXSwgW0hhdmUgUFRIUkVBRF9QUklPX0lOSEVSSVQuXSkKKyAgICAgICAgICAgICAgIGF4X3B0aHJlYWRfcHJpb19pbmhlcml0X2RlZmluZWQ9eWVzCisgICAgICAgICAgICAgIF0pCisKKyAgICAgICAgQ0ZMQUdTPSIkYXhfcHRocmVhZF9zYXZlX0NGTEFHUyIKKyAgICAgICAgTElCUz0iJGF4X3B0aHJlYWRfc2F2ZV9MSUJTIgorCisgICAgICAgICMgTW9yZSBBSVggbG9zc2FnZTogY29tcGlsZSB3aXRoICpfciB2YXJpYW50CisgICAgICAgIGlmIHRlc3QgIngkR0NDIiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgICBhaXgqKQorICAgICAgICAgICAgICAgIEFTX0NBU0UoWyJ4LyRDQyJdLAorICAgICAgICAgICAgICAgICAgICBbeCovYzg5fHgqL2M4OV8xMjh8eCovYzk5fHgqL2M5OV8xMjh8eCovY2N8eCovY2MxMjh8eCoveGxjfHgqL3hsY192Nnx4Ki94bGMxMjh8eCoveGxjMTI4X3Y2XSwKKyAgICAgICAgICAgICAgICAgICAgWyNoYW5kbGUgYWJzb2x1dGUgcGF0aCBkaWZmZXJlbnRseSBmcm9tIFBBVEggYmFzZWQgcHJvZ3JhbSBsb29rdXAKKyAgICAgICAgICAgICAgICAgICAgIEFTX0NBU0UoWyJ4JENDIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW3gvKl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW0FTX0lGKFtBU19FWEVDVVRBQkxFX1AoWyR7Q0N9X3JdKV0sW1BUSFJFQURfQ0M9IiR7Q0N9X3IiXSldLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19QUk9HUyhbUFRIUkVBRF9DQ10sWyR7Q0N9X3JdLFskQ0NdKV0pXSkKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICBmaQorZmkKKwordGVzdCAtbiAiJFBUSFJFQURfQ0MiIHx8IFBUSFJFQURfQ0M9IiRDQyIKKworQUNfU1VCU1QoW1BUSFJFQURfTElCU10pCitBQ19TVUJTVChbUFRIUkVBRF9DRkxBR1NdKQorQUNfU1VCU1QoW1BUSFJFQURfQ0NdKQorCisjIEZpbmFsbHksIGV4ZWN1dGUgQUNUSU9OLUlGLUZPVU5EL0FDVElPTi1JRi1OT1QtRk9VTkQ6CitpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInh5ZXMiOyB0aGVuCisgICAgICAgIGlmZWxzZShbJDFdLCxbQUNfREVGSU5FKFtIQVZFX1BUSFJFQURdLFsxXSxbRGVmaW5lIGlmIHlvdSBoYXZlIFBPU0lYIHRocmVhZHMgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMuXSldLFskMV0pCisgICAgICAgIDoKK2Vsc2UKKyAgICAgICAgYXhfcHRocmVhZF9vaz1ubworICAgICAgICAkMgorZmkKK0FDX0xBTkdfUE9QCitdKWRubCBBWF9QVEhSRUFECmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2xpYnRvb2wubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2xpYnRvb2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlMGVjZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbGlidG9vbC5tNApAQCAtMCwwICsxLDc5ODIgQEAKKyMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjICAgICAgICAgICAgICAgICBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK200X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjICAgICAgICAgICAgICAgICBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorIworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorXSkKKworIyBzZXJpYWwgNTcgTFRfSU5JVAorCisKKyMgTFRfUFJFUkVRKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBhbmQgZXhpdCBpZiB0aGlzIGxpYnRvb2wgdmVyc2lvbiBpcyBsZXNzIHRoYXQgVkVSU0lPTi4KK200X2RlZnVuKFtMVF9QUkVSRVFdLAorW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFtMVF9QQUNLQUdFX1ZFUlNJT05dKSwgWyQxXSksIC0xLAorICAgICAgIFttNF9kZWZhdWx0KFskM10sCisJCSAgIFttNF9mYXRhbChbTGlidG9vbCB2ZXJzaW9uICQxIG9yIGhpZ2hlciBpcyByZXF1aXJlZF0sCisJCSAgICAgICAgICAgICA2MyldKV0sCisgICAgICAgWyQyXSldKQorCisKKyMgX0xUX0NIRUNLX0JVSUxERElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBpZiB0aGUgYWJzb2x1dGUgYnVpbGQgZGlyZWN0b3J5IG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzCittNF9kZWZ1bihbX0xUX0NIRUNLX0JVSUxERElSXSwKK1tjYXNlIGBwd2RgIGluCisgICpcICogfCAqXAkqKQorICAgIEFDX01TR19XQVJOKFtMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gYHB3ZGBdKSA7OworZXNhYworXSkKKworCisjIExUX0lOSVQoW09QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9JTklUXSwKK1tBQ19QUkVSRVEoWzIuNThdKWRubCBXZSB1c2UgQUNfSU5DTFVERVNfREVGQVVMVAorQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xUX0xBTkddKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVERMX0lOSVRdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX0JVSUxERElSXSlkbmwKKworZG5sIEF1dG9jb25mIGRvZXNuJ3QgY2F0Y2ggdW5leHBhbmRlZCBMVF8gbWFjcm9zIGJ5IGRlZmF1bHQ6CittNF9wYXR0ZXJuX2ZvcmJpZChbXl8/TFRfW0EtWl9dKyRdKWRubAorbTRfcGF0dGVybl9hbGxvdyhbXihfTFRfRU9GfExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1d8TFRfTVVMVElfTU9EVUxFKSRdKWRubAorZG5sIGFjbG9jYWwgZG9lc24ndCBwdWxsIGx0b3B0aW9ucy5tNCwgbHRzdWdhci5tNCwgb3IgbHR2ZXJzaW9uLm00CitkbmwgdW5sZXNzIHdlIHJlcXVpcmUgYW4gQUNfREVGVU5lZCBtYWNybzoKK0FDX1JFUVVJUkUoW0xUT1BUSU9OU19WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUU1VHQVJfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVFZFUlNJT05fVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVE9CU09MRVRFX1ZFUlNJT05dKWRubAorbTRfcmVxdWlyZShbX0xUX1BST0dfTFRNQUlOXSlkbmwKKworX0xUX1NIRUxMX0lOSVQoW1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9XSkKKworZG5sIFBhcnNlIE9QVElPTlMKK19MVF9TRVRfT1BUSU9OUyhbJDBdLCBbJDFdKQorCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRsdG1haW4iCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKK0FDX1NVQlNUKExJQlRPT0wpZG5sCisKK19MVF9TRVRVUAorCisjIE9ubHkgZXhwYW5kIG9uY2U6CittNF9kZWZpbmUoW0xUX0lOSVRdKQorXSkjIExUX0lOSVQKKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQUNfUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorQVVfQUxJQVMoW0FNX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUFJPR19MSUJUT09MXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX1BST0dfTElCVE9PTF0sIFtdKQorCisKKyMgX0xUX0NDX0JBU0VOQU1FKENDKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGN1bGF0ZSBjY19iYXNlbmFtZS4gIFNraXAga25vd24gY29tcGlsZXIgd3JhcHBlcnMgYW5kIGNyb3NzLXByZWZpeC4KK200X2RlZnVuKFtfTFRfQ0NfQkFTRU5BTUVdLAorW2ZvciBjY190ZW1wIGluICQxIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltbXFwvXV1jb21waWxlIHwgY2NhY2hlIHwgKltbXFwvXV1jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbW1xcL11dZGlzdGNjIHwgcHVyaWZ5IHwgKltbXFwvXV1wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorXSkKKworCisjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJdCBpcyBva2F5IHRvIHVzZSB0aGVzZSBmaWxlIGNvbW1hbmRzIGFuZCBhc3N1bWUgdGhleSBoYXZlIGJlZW4gc2V0CisjIHNlbnNpYmx5IGFmdGVyIGBtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSknLgorbTRfZGVmdW4oW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdLAorWzogJHtDUD0iY3AgLWYifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KK10pIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCisKKworIyBfTFRfU0VUVVAKKyMgLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1NFVFVQXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorQUNfUkVRVUlSRShbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKWRubAorQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKWRubAorCitfTFRfREVDTChbXSwgW1BBVEhfU0VQQVJBVE9SXSwgWzFdLCBbVGhlIFBBVEggc2VwYXJhdG9yIGZvciB0aGUgYnVpbGQgc3lzdGVtXSlkbmwKK2RubAorX0xUX0RFQ0woW10sIFtob3N0X2FsaWFzXSwgWzBdLCBbVGhlIGhvc3Qgc3lzdGVtXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF9vc10sIFswXSlkbmwKK2RubAorX0xUX0RFQ0woW10sIFtidWlsZF9hbGlhc10sIFswXSwgW1RoZSBidWlsZCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRfb3NdLCBbMF0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19MTl9TXSlkbmwKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKK19MVF9ERUNMKFtdLCBbTE5fU10sIFsxXSwgW1doZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3NdKWRubAorZG5sCitBQ19SRVFVSVJFKFtMVF9DTURfTUFYX0xFTl0pZG5sCitfTFRfREVDTChbb2JqZXh0XSwgW2FjX29iamV4dF0sIFswXSwgW09iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4ZWV4dF0sIFswXSwgW0V4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKV0pZG5sCitkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKK200X3JlcXVpcmUoW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9PTERfQVJDSElWRV0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKK200X3JlcXVpcmUoW19MVF9XSVRIX1NZU1JPT1RdKWRubAorCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKK10pCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK19MVF9DSEVDS19PQkpESVIKKworbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisgICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KKyAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgICAgQ09MTEVDVF9OQU1FUz0KKyAgICBleHBvcnQgQ09MTEVDVF9OQU1FUworICBmaQorICA7OworZXNhYworCisjIEdsb2JhbCB2YXJpYWJsZXM6CitvZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCisKK3dpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCisKK29sZF9DQz0iJENDIgorb2xkX0NGTEFHUz0iJENGTEFHUyIKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIF9MVF9QQVRIX01BR0lDCisgIGZpCisgIDs7Citlc2FjCisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CitMVF9TVVBQT1JURURfVEFHKFtDQ10pCitfTFRfTEFOR19DX0NPTkZJRworX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKK19MVF9DT05GSUdfQ09NTUFORFMKK10pIyBfTFRfU0VUVVAKKworCisjIF9MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIGZldyBzZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscCB1cyBkbyByb2J1c3QgcXVvdGluZy4KK200X2RlZnVuKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCitbIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgorIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbWyJgJFxcXV1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woW1siYFxcXV1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCitkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCitub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKK10pCisKKyMgX0xUX1BST0dfTFRNQUlOCisjIC0tLS0tLS0tLS0tLS0tLQorIyBOb3RlIHRoYXQgdGhpcyBjb2RlIGlzIGNhbGxlZCBib3RoIGZyb20gYGNvbmZpZ3VyZScsIGFuZCBgY29uZmlnLnN0YXR1cycKKyMgbm93IHRoYXQgd2UgdXNlIEFDX0NPTkZJR19DT01NQU5EUyB0byBnZW5lcmF0ZSBsaWJ0b29sLiAgTm90YWJseSwKKyMgYGNvbmZpZy5zdGF0dXMnIGhhcyBubyB2YWx1ZSBmb3IgYWNfYXV4X2RpciB1bmxlc3Mgd2UgYXJlIHVzaW5nIEF1dG9tYWtlLAorIyBzbyB3ZSBwYXNzIGEgY29weSBhbG9uZyB0byBtYWtlIHN1cmUgaXQgaGFzIGEgc2Vuc2libGUgdmFsdWUgYW55d2F5LgorbTRfZGVmdW4oW19MVF9QUk9HX0xUTUFJTl0sCitbbTRfaWZkZWYoW0FDX1JFUVVJUkVfQVVYX0ZJTEVdLCBbQUNfUkVRVUlSRV9BVVhfRklMRShbbHRtYWluLnNoXSldKWRubAorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2FjX2F1eF9kaXI9JyRhY19hdXhfZGlyJ10pCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKK10pIyBfTFRfUFJPR19MVE1BSU4KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBY2N1bXVsYXRlIGNvZGUgZm9yIGNyZWF0aW5nIGxpYnRvb2wuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgU28gdGhhdCB3ZSBjYW4gcmVjcmVhdGUgYSBmdWxsIGxpYnRvb2wgc2NyaXB0IGluY2x1ZGluZyBhZGRpdGlvbmFsCisjIHRhZ3MsIHdlIGFjY3VtdWxhdGUgdGhlIGNodW5rcyBvZiBjb2RlIHRvIHNlbmQgdG8gQUNfQ09ORklHX0NPTU1BTkRTCisjIGluIG1hY3JvcyBhbmQgdGhlbiBtYWtlIGEgc2luZ2xlIGNhbGwgYXQgdGhlIGVuZCB1c2luZyB0aGUgYGxpYnRvb2wnCisjIGxhYmVsLgorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW0lOSVQtQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIElOSVQtQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KK200X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MX0lOSVRdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0pCisKKworIyBfTFRfQ09ORklHX0xJQlRPT0woW0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIENPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF0sCitbbTRfaWZ2YWwoWyQxXSwKKyAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdKQorCisKKyMgX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFtDT01NQU5EU10sIFtJTklUX0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09ORklHX1NBVkVfQ09NTUFORFNdLAorW19MVF9DT05GSUdfTElCVE9PTChbJDFdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWyQyXSkKK10pCisKKworIyBfTFRfRk9STUFUX0NPTU1FTlQoW0NPTU1FTlRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgbGVhZGluZyBjb21tZW50IG1hcmtzIHRvIHRoZSBzdGFydCBvZiBlYWNoIGxpbmUsIGFuZCBhIHRyYWlsaW5nCisjIGZ1bGwtc3RvcCB0byB0aGUgd2hvbGUgY29tbWVudCBpZiBvbmUgaXMgbm90IHByZXNlbnQgYWxyZWFkeS4KK200X2RlZmluZShbX0xUX0ZPUk1BVF9DT01NRU5UXSwKK1ttNF9pZnZhbChbJDFdLCBbCittNF9icGF0c3Vic3QoW200X2JwYXRzdWJzdChbJDFdLCBbXiAqXSwgWyMgXSldLAorICAgICAgICAgICAgICBbWydgJFxdXSwgW1xcXCZdKV1tNF9ibWF0Y2goWyQxXSwgW1shPy5dJF0sIFtdLCBbLl0pCispXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRklYTUU6IEVsaW1pbmF0ZSBWQVJOQU1FICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9MVF9ERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0sIFtJUy1UQUdHRUQ/XSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDT05GSUdOQU1FIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSB2YWx1ZSBpbiB0aGUgbGlidG9vbCBzY3JpcHQuCisjIFZBUk5BTUUgaXMgdGhlIChiYXNlKSBuYW1lIHVzZWQgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisjIFZBTFVFIG1heSBiZSAwLCAxIG9yIDIgZm9yIGEgY29tcHV0ZWQgcXVvdGUgZXNjYXBlZCB2YWx1ZSBiYXNlZCBvbgorIyBWQVJOQU1FLiAgQW55IG90aGVyIHZhbHVlIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KK200X2RlZmluZShbX0xUX0RFQ0xdLAorW2x0X2lmX2FwcGVuZF91bmlxKFtsdF9kZWNsX3Zhcm5hbWVzXSwgWyQyXSwgWywgXSwKKyAgICBbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbbGlidG9vbF9uYW1lXSwKKwlbbTRfaWZ2YWwoWyQxXSwgWyQxXSwgWyQyXSldKQorICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW3ZhbHVlXSwgWyQzXSkKKyAgICBtNF9pZnZhbChbJDRdLAorCVtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtkZXNjcmlwdGlvbl0sIFskNF0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sCisJW3RhZ2dlZD9dLCBbbTRfaWZ2YWwoWyQ1XSwgW3llc10sIFtub10pXSldKQorXSkKKworCisjIF9MVF9UQUdERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdERUNMXSwgW19MVF9ERUNMKFskMV0sIFskMl0sIFskM10sIFskNF0sIFt5ZXNdKV0pCisKKworIyBsdF9kZWNsX3RhZ192YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdGFnX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbeWVzXSwgJEApXSkKKworCisjIF9sdF9kZWNsX2ZpbHRlcihTVUJLRVksIFZBTFVFLCBbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX2x0X2RlY2xfZmlsdGVyXSwKK1ttNF9jYXNlKFskI10sCisgIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICBbMV0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCisgIFsyXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbM10sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgWyQzXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sICRAKV0pW11kbmwKK10pCisKKworIyBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzFdLCAkQCldKQorCisKKyMgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX2RxdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsyXSwgJEApXSkKKworCisjIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAorW200X2Fzc2VydChbJCMgPD0gMl0pZG5sCitfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICBtNF9pZnZhbChbJDJdLCBbWyQyXV0sIFttNF9kcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpXSksCisgICAgbTRfc3BsaXQobTRfbm9ybWFsaXplKG00X3F1b3RlKF9MVF9UQUdTKSksIFsgXSkpXSkKK200X2RlZmluZShbX2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9pZnZhbChbJDNdLCBbbHRfY29tYmluZShbJDFdLCBbJDJdLCBbX10sICQzKV0pXSkKKworCisjIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9hbGxfdmFybmFtZXNdLAorW18kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAorICAgICBtNF9pZihbJDJdLCBbXSwKKwkgICBtNF9xdW90ZShsdF9kZWNsX3Zhcm5hbWVzKSwKKwltNF9xdW90ZShtNF9zaGlmdCgkQCkpKSlbXWRubAorXSkKK200X2RlZmluZShbX2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tsdF9qb2luKCRALCBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbJDFdLAorCQkJbHRfZGVjbF90YWdfdmFybmFtZXMoW1ssIF1dLCBtNF9zaGlmdCgkQCkpKSlkbmwKK10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKFtWQVJOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFF1b3RlIGEgdmFyaWFibGUgdmFsdWUsIGFuZCBmb3J3YXJkIGl0IHRvIGBjb25maWcuc3RhdHVzJyBzbyB0aGF0IGl0cworIyBkZWNsYXJhdGlvbiB0aGVyZSB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgaW4gYGNvbmZpZ3VyZScuICBWQVJOQU1FCisjIG11c3QgaGF2ZSBhIHNpbmdsZSBxdW90ZSBkZWxpbWl0ZWQgdmFsdWUgZm9yIHRoaXMgdG8gd29yay4KK200X2RlZmluZShbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRV0sCitbJDE9J2AkRUNITyAiJF1bJDEiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJ10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdlIGRlbGltaXQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIHdpdGggc2luZ2xlIHF1b3Rlcywgc28gd2hlbgorIyB3ZSB3cml0ZSB0aGVtIHRvIGNvbmZpZy5zdGF0dXMsIHdlIGhhdmUgdG8gYmUgc3VyZSB0byBxdW90ZSBhbGwKKyMgZW1iZWRkZWQgc2luZ2xlIHF1b3RlcyBwcm9wZXJseS4gIEluIGNvbmZpZ3VyZSwgdGhpcyBtYWNybyBleHBhbmRzCisjIGVhY2ggdmFyaWFibGUgZGVjbGFyZWQgd2l0aCBfTFRfREVDTCAoYW5kIF9MVF9UQUdERUNMKSBpbnRvOgorIworIyAgICA8dmFyPj0nYCRFQ0hPICIkPHZhcj4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbTRfZGVmdW4oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfYWxsX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShfbHRfdmFyKV0pXSldKQorCisKKyMgX0xUX0xJQlRPT0xfVEFHUworIyAtLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCBjb21tZW50IGFuZCBsaXN0IG9mIHRhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBzY3JpcHQKK200X2RlZnVuKFtfTFRfTElCVE9PTF9UQUdTXSwKK1tfTFRfRk9STUFUX0NPTU1FTlQoW1RoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdF0pZG5sCithdmFpbGFibGVfdGFncz0iX0xUX1RBR1MiZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfREVDTEFSRShWQVJOQU1FLCBbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXh0cmFjdCB0aGUgZGljdGlvbmFyeSB2YWx1ZXMgZm9yIFZBUk5BTUUgKG9wdGlvbmFsbHkgd2l0aCBUQUcpIGFuZAorIyBleHBhbmQgdG8gYSBjb21tZW50ZWQgc2hlbGwgdmFyaWFibGUgc2V0dGluZzoKKyMKKyMgICAgIyBTb21lIGNvbW1lbnQgYWJvdXQgd2hhdCBWQVIgaXMgZm9yLgorIyAgICB2aXNpYmxlX25hbWU9JGx0X2ludGVybmFsX25hbWUKK200X2RlZmluZShbX0xUX0xJQlRPT0xfREVDTEFSRV0sCitbX0xUX0ZPUk1BVF9DT01NRU5UKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sCisJCQkJCSAgIFtkZXNjcmlwdGlvbl0pKSlbXWRubAorbTRfcHVzaGRlZihbX2xpYnRvb2xfbmFtZV0sCisgICAgbTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW2xpYnRvb2xfbmFtZV0pKSlbXWRubAorbTRfY2FzZShtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKSksCisgICAgWzBdLCBbX2xpYnRvb2xfbmFtZT1bJF0kMV0sCisgICAgWzFdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgWzJdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgW19saWJ0b29sX25hbWU9bHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSldKVtdZG5sCittNF9pZnZhbChbJDJdLCBbXyQyXSlbXW00X3BvcGRlZihbX2xpYnRvb2xfbmFtZV0pW11kbmwKK10pCisKKworIyBfTFRfTElCVE9PTF9DT05GSUdfVkFSUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGNvbW1lbnRlZCBkZWNsYXJhdGlvbnMgb2Ygbm9uLXRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMKKyMgc3VpdGFibGUgZm9yIGluc2VydGlvbiBpbiB0aGUgTElCVE9PTCBDT05GSUcgc2VjdGlvbiBvZiB0aGUgYGxpYnRvb2wnCisjIHNjcmlwdC4gIFRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgKGV2ZW4gZm9yIHRoZSBMSUJUT09MIENPTkZJRworIyBzZWN0aW9uKSBhcmUgcHJvZHVjZWQgYnkgX0xUX0xJQlRPT0xfVEFHX1ZBUlMuCittNF9kZWZ1bihbX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLAorICAgIG00X3F1b3RlKF9sdF9kZWNsX2ZpbHRlcihbdGFnZ2VkP10sIFtub10sIFtdLCBsdF9kZWNsX3Zhcm5hbWVzKSksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR19WQVJTKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9UQUdfVkFSU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyLCBbJDFdKV0pXSldKQorCisKKyMgX0xUX1RBR1ZBUihWQVJOQU1FLCBbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHVkFSXSwgW200X2lmdmFsKFskMl0sIFskMV8kMl0sIFskMV0pXSkKKworCisjIF9MVF9DT05GSUdfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZW5kIGFjY3VtdWxhdGVkIG91dHB1dCB0byAkQ09ORklHX1NUQVRVUy4gIFRoYW5rcyB0byB0aGUgbGlzdHMgb2YKKyMgdmFyaWFibGVzIGZvciBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZSBlc2NhcGluZyB3ZSBzYXZlZCBmcm9tIGNhbGxzCisjIHRvIF9MVF9ERUNMLCB3ZSBjYW4gcHV0IHF1b3RlIGVzY2FwZWQgdmFyaWFibGVzIGRlY2xhcmF0aW9ucworIyBpbnRvIGBjb25maWcuc3RhdHVzJywgYW5kIHRoZW4gdGhlIHNoZWxsIGNvZGUgdG8gcXVvdGUgZXNjYXBlIHRoZW0gaW4KKyMgZm9yIGxvb3BzIGluIGBjb25maWcuc3RhdHVzJy4gIEZpbmFsbHksIGFueSBhZGRpdGlvbmFsIGNvZGUgYWNjdW11bGF0ZWQKKyMgZnJvbSBjYWxscyB0byBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVCBpcyBleHBhbmRlZC4KK200X2RlZnVuKFtfTFRfQ09ORklHX0NPTU1BTkRTXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbTFRfT1VUUFVUXSwKKwlkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGhhcyBiZWVuIHBsYWNlZCBpbiAkQ09ORklHX0xULAorCWRubCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGFsbCBvdmVyIGFnYWluIGludG8gY29uZmlnLnN0YXR1cywKKwlkbmwgdGhlbiB3ZSB3aWxsIGhhdmUgY29uZmlnLnN0YXR1cyBydW4gJENPTkZJR19MVCBsYXRlciwgc28gaXQKKwlkbmwgbmVlZHMgdG8ga25vdyB3aGF0IG5hbWUgaXMgc3RvcmVkIHRoZXJlOgorICAgICAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgICAgIFskU0hFTEwgJENPTkZJR19MVCB8fCBBU19FWElUKDEpXSwgW0NPTkZJR19MVD0nJENPTkZJR19MVCddKV0sCisgICAgZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBpcyBkZXN0aW5lZCBmb3IgY29uZmlnLnN0YXR1cywKKyAgICBkbmwgZXhwYW5kIHRoZSBhY2N1bXVsYXRlZCBjb21tYW5kcyBhbmQgaW5pdCBjb2RlIG5vdzoKKyAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0pXSkKK10pI19MVF9DT05GSUdfQ09NTUFORFMKKworCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSwKK1sKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworZG91YmxlX3F1b3RlX3N1YnN0PSckZG91YmxlX3F1b3RlX3N1YnN0JworZGVsYXlfdmFyaWFibGVfc3Vic3Q9JyRkZWxheV92YXJpYWJsZV9zdWJzdCcKK19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworTFRDQz0nJExUQ0MnCitMVENGTEFHUz0nJExUQ0ZMQUdTJworY29tcGlsZXI9JyRjb21waWxlcl9ERUZBVUxUJworCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKK1wkW10xCitfTFRFQ0hPX0VPRicKK30KKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorXV0sIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyk7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK19MVF9PVVRQVVRfTElCVE9PTF9JTklUCitdKQorCisjIF9MVF9HRU5FUkFURURfRklMRV9JTklUKEZJTEUsIFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEdlbmVyYXRlIGEgY2hpbGQgc2NyaXB0IEZJTEUgd2l0aCBhbGwgaW5pdGlhbGl6YXRpb24gbmVjZXNzYXJ5IHRvCisjIHJldXNlIHRoZSBlbnZpcm9ubWVudCBsZWFybmVkIGJ5IHRoZSBwYXJlbnQgc2NyaXB0LCBhbmQgbWFrZSB0aGUKKyMgZmlsZSBleGVjdXRhYmxlLiAgSWYgQ09NTUVOVCBpcyBzdXBwbGllZCwgaXQgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlCisjIGAjIScgc2VxdWVuY2UgYnV0IGJlZm9yZSBpbml0aWFsaXphdGlvbiB0ZXh0IGJlZ2lucy4gIEFmdGVyIHRoaXMKKyMgbWFjcm8sIGFkZGl0aW9uYWwgdGV4dCBjYW4gYmUgYXBwZW5kZWQgdG8gRklMRSB0byBmb3JtIHRoZSBib2R5IG9mCisjIHRoZSBjaGlsZCBzY3JpcHQuICBUaGUgbWFjcm8gZW5kcyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBpZiB0aGUKKyMgZmlsZSBjb3VsZCBub3QgYmUgZnVsbHkgd3JpdHRlbiAoc3VjaCBhcyBpZiB0aGUgZGlzayBpcyBmdWxsKS4KK200X2lmZGVmKFtBU19JTklUX0dFTkVSQVRFRF0sCitbbTRfZGVmdW4oW19MVF9HRU5FUkFURURfRklMRV9JTklUXSxbQVNfSU5JVF9HRU5FUkFURUQoJEApXSldLAorW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sCitbbTRfcmVxdWlyZShbQVNfUFJFUEFSRV0pXWRubAorW200X3B1c2hkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSldZG5sCitbbHRfd3JpdGVfZmFpbD0wCitjYXQgPiQxIDw8X0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBieSAkYXNfbWUuCiskMgorU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kMSA8PFxfQVNFT0YgfHwgbHRfd3JpdGVfZmFpbD0xCitBU19TSEVMTF9TQU5JVElaRQorX0FTX1BSRVBBUkUKK2V4ZWMgQVNfTUVTU0FHRV9GRD4mMQorX0FTRU9GCit0ZXN0ICRsdF93cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkMVtdZG5sCittNF9wb3BkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSldKV0pIyBfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVAorCisjIExUX09VVFBVVAorIyAtLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBhbGxvd3MgZWFybHkgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQgKGJlZm9yZQorIyBBQ19PVVRQVVQgaXMgY2FsbGVkKSwgaW5jYXNlIGl0IGlzIHVzZWQgaW4gY29uZmlndXJlIGZvciBjb21waWxhdGlvbgorIyB0ZXN0cy4KK0FDX0RFRlVOKFtMVF9PVVRQVVRdLAorWzogJHtDT05GSUdfTFQ9Li9jb25maWcubHR9CitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkQ09ORklHX0xUXSkKK19MVF9HRU5FUkFURURfRklMRV9JTklUKFsiJENPTkZJR19MVCJdLAorWyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSBhIGxpYnRvb2wgc3R1YiB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXSkKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorbHRfY2xfc2lsZW50PWZhbHNlCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgQVNfQk9YKFtSdW5uaW5nICRhc19tZS5dKQorfSA+JkFTX01FU1NBR0VfTE9HX0ZECisKK2x0X2NsX2hlbHA9IlwKK1xgJGFzX21lJyBjcmVhdGVzIGEgbG9jYWwgbGlidG9vbCBzdHViIGZyb20gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwKK2ZvciB1c2UgaW4gZnVydGhlciBjb25maWd1cmUgdGltZSB0ZXN0cyBiZWZvcmUgdGhlIHJlYWwgbGlidG9vbCBpcworZ2VuZXJhdGVkLgorCitVc2FnZTogJFswXSBbW09QVElPTlNdXQorCisgIC1oLCAtLWhlbHAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgIC1kLCAtLWRlYnVnICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisKK1JlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCisKK2x0X2NsX3ZlcnNpb249IlwKK200X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlnLmx0W11kbmwKK200X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCitjb25maWd1cmVkIGJ5ICRbMF0sIGdlbmVyYXRlZCBieSBtNF9QQUNLQUdFX1NUUklORy4KKworQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKword2hpbGUgdGVzdCAkWyNdICE9IDAKK2RvCisgIGNhc2UgJFsxXSBpbgorICAgIC0tdmVyc2lvbiB8IC0tdiogfCAtViApCisgICAgICBlY2hvICIkbHRfY2xfdmVyc2lvbiI7IGV4aXQgMCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICBlY2hvICIkbHRfY2xfaGVscCI7IGV4aXQgMCA7OworICAgIC0tZGVidWcgfCAtLWQqIHwgLWQgKQorICAgICAgZGVidWc9OiA7OworICAgIC0tcXVpZXQgfCAtLXEqIHwgLS1zaWxlbnQgfCAtLXMqIHwgLXEgKQorICAgICAgbHRfY2xfc2lsZW50PTogOzsKKworICAgIC0qKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBvcHRpb246ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworCisgICAgKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmICRsdF9jbF9zaWxlbnQ7IHRoZW4KKyAgZXhlYyBBU19NRVNTQUdFX0ZEPi9kZXYvbnVsbAorZmkKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxfTFRFT0YKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJG9maWxlXSkKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EUworQVNfRVhJVCgwKQorX0xURU9GCitjaG1vZCAreCAiJENPTkZJR19MVCIKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBidXQgY29uZmlnLmx0IGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwKKyMgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2csIHdoaWNoIGZhaWxzIG9uIERPUywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0CisjIG9wZW4gYnkgY29uZmlndXJlLiAgSGVyZSB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsIGVmZmVjdGl2ZWx5IGNsb3NpbmcKKyMgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5sdC4KK2x0X2NsX3N1Y2Nlc3M9OgordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgbHRfY29uZmlnX2x0X2FyZ3M9IiRsdF9jb25maWdfbHRfYXJncyAtLXF1aWV0IgorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4vZGV2L251bGwKKyRTSEVMTCAiJENPTkZJR19MVCIgJGx0X2NvbmZpZ19sdF9hcmdzIHx8IGx0X2NsX3N1Y2Nlc3M9ZmFsc2UKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKKyRsdF9jbF9zdWNjZXNzIHx8IEFTX0VYSVQoMSkKK10pIyBMVF9PVVRQVVQKKworCisjIF9MVF9DT05GSUcoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgSWYgVEFHIGlzIHRoZSBidWlsdC1pbiB0YWcsIGNyZWF0ZSBhbiBpbml0aWFsIGxpYnRvb2wgc2NyaXB0IHdpdGggYQorIyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgdW50YWdnZWQgY29uZmlnIHZhcnMuICBPdGhlcndpc2UgYWRkIGNvZGUKKyMgdG8gY29uZmlnLnN0YXR1cyBmb3IgYXBwZW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG5hbWVkIGJ5IFRBRyBmcm9tIHRoZQorIyBtYXRjaGluZyB0YWdnZWQgY29uZmlnIHZhcnMuCittNF9kZWZ1bihbX0xUX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09ORklHX1NBVkVfQ09NTUFORFMoWworICBtNF9kZWZpbmUoW19MVF9UQUddLCBtNF9pZihbJDFdLCBbXSwgW0NdLCBbJDFdKSlkbmwKKyAgbTRfaWYoX0xUX1RBRywgW0NdLCBbCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICAgIGZpCisKKyAgICBjZmdmaWxlPSIke29maWxlfVQiCisgICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKKyAgICAkUk0gIiRjZmdmaWxlIgorCisgICAgY2F0IDw8X0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjISAkU0hFTEwKKworIyBgJEVDSE8gIiRvZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyMKK19MVF9DT1BZSU5HCitfTFRfTElCVE9PTF9UQUdTCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCitfTFRfTElCVE9PTF9DT05GSUdfVkFSUworX0xUX0xJQlRPT0xfVEFHX1ZBUlMKKyMgIyMjIEVORCBMSUJUT09MIENPTkZJRworCitfTFRfRU9GCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICBjYXQgPDxcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgoraWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworICBfTFRfUFJPR19MVE1BSU4KKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUworCisgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgY2htb2QgK3ggIiRvZmlsZSIKK10sCitbY2F0IDw8X0xUX0VPRiA+PiAiJG9maWxlIgorCitkbmwgVW5mb3J0dW5hdGVseSB3ZSBoYXZlIHRvIHVzZSAkMSBoZXJlLCBzaW5jZSBfTFRfVEFHIGlzIG5vdCBleHBhbmRlZAorZG5sIGluIGEgY29tbWVudCAoaWUgYWZ0ZXIgYSAjKS4KKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9MSUJUT09MX1RBR19WQVJTKF9MVF9UQUcpCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0VPRgorXSlkbmwgL200X2lmCitdLAorW200X2lmKFskMV0sIFtdLCBbCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZSddLCBbXSkKK10pZG5sIC9fTFRfQ09ORklHX1NBVkVfQ09NTUFORFMKK10pIyBfTFRfQ09ORklHCisKKworIyBMVF9TVVBQT1JURURfVEFHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyYWNlIHRoaXMgbWFjcm8gdG8gZGlzY292ZXIgd2hhdCB0YWdzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnRvb2wKKyMgLS10YWcgb3B0aW9uLCB1c2luZzoKKyMgICAgYXV0b2NvbmYgLS10cmFjZSAnTFRfU1VQUE9SVEVEX1RBRzokMScKK0FDX0RFRlVOKFtMVF9TVVBQT1JURURfVEFHXSwgW10pCisKKworIyBDIHN1cHBvcnQgaXMgYnVpbHQtaW4gZm9yIG5vdworbTRfZGVmaW5lKFtfTFRfTEFOR19DX2VuYWJsZWRdLCBbXSkKK200X2RlZmluZShbX0xUX1RBR1NdLCBbXSkKKworCisjIExUX0xBTkcoTEFORykKKyMgLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaWYgbm90IGFscmVhZHkgZW5hYmxlZC4KK0FDX0RFRlVOKFtMVF9MQU5HXSwKK1tBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCittNF9jYXNlKFskMV0sCisgIFtDXSwJCQlbX0xUX0xBTkcoQyldLAorICBbQysrXSwJCVtfTFRfTEFORyhDWFgpXSwKKyAgW0dvXSwJCQlbX0xUX0xBTkcoR08pXSwKKyAgW0phdmFdLAkJW19MVF9MQU5HKEdDSildLAorICBbRm9ydHJhbiA3N10sCQlbX0xUX0xBTkcoRjc3KV0sCisgIFtGb3J0cmFuXSwJCVtfTFRfTEFORyhGQyldLAorICBbV2luZG93cyBSZXNvdXJjZV0sCVtfTFRfTEFORyhSQyldLAorICBbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfQ09ORklHXSwKKyAgICBbX0xUX0xBTkcoJDEpXSwKKyAgICBbbTRfZmF0YWwoWyQwOiB1bnN1cHBvcnRlZCBsYW5ndWFnZTogIiQxIl0pXSldKWRubAorXSkjIExUX0xBTkcKKworCisjIF9MVF9MQU5HKExBTkdOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR10sCitbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdLAorICBbTFRfU1VQUE9SVEVEX1RBRyhbJDFdKWRubAorICBtNF9hcHBlbmQoW19MVF9UQUdTXSwgWyQxIF0pZG5sCisgIG00X2RlZmluZShbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10pZG5sCisgIF9MVF9MQU5HXyQxX0NPTkZJRygkMSldKWRubAorXSkjIF9MVF9MQU5HCisKKworbTRfaWZuZGVmKFtBQ19QUk9HX0dPXSwgWworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX0dPLiAgV2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbTRfZGVmdW4oW0FDX1BST0dfR09dLAorW0FDX0xBTkdfUFVTSChHbylkbmwKK0FDX0FSR19WQVIoW0dPQ10sICAgICBbR28gY29tcGlsZXIgY29tbWFuZF0pZG5sCitBQ19BUkdfVkFSKFtHT0ZMQUdTXSwgW0dvIGNvbXBpbGVyIGZsYWdzXSlkbmwKK19BQ19BUkdfVkFSX0xERkxBR1MoKWRubAorQUNfQ0hFQ0tfVE9PTChHT0MsIGdjY2dvKQoraWYgdGVzdCAteiAiJEdPQyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIEFDX0NIRUNLX1BST0coR09DLCBbJHthY190b29sX3ByZWZpeH1nY2Nnb10sIFske2FjX3Rvb2xfcHJlZml4fWdjY2dvXSkKKyAgZmkKK2ZpCitpZiB0ZXN0IC16ICIkR09DIjsgdGhlbgorICBBQ19DSEVDS19QUk9HKEdPQywgZ2NjZ28sIGdjY2dvLCBmYWxzZSkKK2ZpCitdKSNtNF9kZWZ1bgorXSkjbTRfaWZuZGVmCisKKworIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HX0RFRkFVTFRfQ09ORklHXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorICBbTFRfTEFORyhDWFgpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19DWFhdLCBkZWZuKFtBQ19QUk9HX0NYWF0pW0xUX0xBTkcoQ1hYKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRjc3XSwKKyAgW0xUX0xBTkcoRjc3KV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRjc3XSwgZGVmbihbQUNfUFJPR19GNzddKVtMVF9MQU5HKEY3NyldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0ZDXSwKKyAgW0xUX0xBTkcoRkMpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GQ10sIGRlZm4oW0FDX1BST0dfRkNdKVtMVF9MQU5HKEZDKV0pXSkKKworZG5sIFRoZSBjYWxsIHRvIFtBXVtNX1BST0dfR0NKXSBpcyBxdW90ZWQgbGlrZSB0aGF0IHRvIHN0b3AgYWNsb2NhbAorZG5sIHB1bGxpbmcgdGhpbmdzIGluIG5lZWRsZXNzbHkuCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLAorICBbTFRfTEFORyhHQ0opXSwKKyAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSwKKyAgICBbTFRfTEFORyhHQ0opXSwKKyAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfR0NKXSwKKyAgICAgIFtMVF9MQU5HKEdDSildLAorICAgICAgW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sCisJW200X2RlZmluZShbQUNfUFJPR19HQ0pdLCBkZWZuKFtBQ19QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sCisJW200X2RlZmluZShbQV1bTV9QUk9HX0dDSl0sIGRlZm4oW0FdW01fUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0xUX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtMVF9QUk9HX0dDSl0sIGRlZm4oW0xUX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKV0pXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HT10sCisgIFtMVF9MQU5HKEdPKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfR09dLCBkZWZuKFtBQ19QUk9HX0dPXSlbTFRfTEFORyhHTyldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX1JDXSwKKyAgW0xUX0xBTkcoUkMpXSwKKyAgW200X2RlZmluZShbTFRfUFJPR19SQ10sIGRlZm4oW0xUX1BST0dfUkNdKVtMVF9MQU5HKFJDKV0pXSkKK10pIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworCisjIE9ic29sZXRlIG1hY3JvczoKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtMVF9MQU5HKEMrKyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW0xUX0xBTkcoRm9ydHJhbiA3NyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbTFRfTEFORyhGb3J0cmFuKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbTFRfTEFORyhKYXZhKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9SQ10sIFtMVF9MQU5HKFdpbmRvd3MgUmVzb3VyY2UpXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW10pCisKKworIyBfTFRfVEFHX0NPTVBJTEVSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVEFHX0NPTVBJTEVSXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKworX0xUX0RFQ0woW0xUQ0NdLCBbQ0NdLCBbMV0sIFtBIEMgY29tcGlsZXJdKWRubAorX0xUX0RFQ0woW0xUQ0ZMQUdTXSwgW0NGTEFHU10sIFsxXSwgW0xUQ0MgY29tcGlsZXIgZmxhZ3NdKWRubAorX0xUX1RBR0RFQ0woW0NDXSwgW2NvbXBpbGVyXSwgWzFdLCBbQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlcl0pZG5sCitfTFRfVEFHREVDTChbd2l0aF9nY2NdLCBbR0NDXSwgWzBdLCBbSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/XSlkbmwKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworXSkjIF9MVF9UQUdfQ09NUElMRVIKKworCisjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGNvbXBpbGVyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgY29tcGlsZXIgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorCisKKyMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorXSkjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bl9vbmNlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sWworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBBQ19DSEVDS19UT09MKFtEU1lNVVRJTF0sIFtkc3ltdXRpbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtOTUVESVRdLCBbbm1lZGl0XSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW0xJUE9dLCBbbGlwb10sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTF0sIFtvdG9vbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTDY0XSwgW290b29sNjRdLCBbOl0pCisgICAgX0xUX0RFQ0woW10sIFtEU1lNVVRJTF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW05NRURJVF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtMSVBPXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0xdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0w2NF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNF0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnXSxbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZF0sCisgICAgICBbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwkjIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGVycm9yIGxvZywgYW5kICJzaW5nbGVfbW9kdWxlIgorCSMgYXBwZWFycyBpbiBpdCwgYXNzdW1lIHRoZSBmbGFnIGNhdXNlZCBhIGxpbmtlciB3YXJuaW5nCisgICAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIHNpbmdsZV9tb2R1bGUgY29uZnRlc3QuZXJyOyB0aGVuCisJICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKwkjIE90aGVyd2lzZSwgaWYgdGhlIG91dHB1dCB3YXMgY3JlYXRlZCB3aXRoIGEgMCBleGl0IGNvZGUgZnJvbQorCSMgdGhlIGNvbXBpbGVyLCBpdCB3b3JrZWQuCisJZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgJF9sdF9yZXN1bHQgLWVxIDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmldKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnXSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAorICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKwlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ub10pCisJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBdKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZ10sW2x0X2N2X2xkX2ZvcmNlX2xvYWRdLAorICAgICAgW2x0X2N2X2xkX2ZvcmNlX2xvYWQ9bm8KKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IGZvcmNlZF9sb2FkZWQoKSB7IHJldHVybiAyO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IG1haW4oKSB7IHJldHVybiAwO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEgMj5jb25mdGVzdC5lcnIKKyAgICAgIF9sdF9yZXN1bHQ9JD8KKyAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIGZvcmNlX2xvYWQgY29uZnRlc3QuZXJyOyB0aGVuCisJY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBlbGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAkX2x0X3Jlc3VsdCAtZXEgMCAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKKyAgICAgIGVsc2UKKwljYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKKyAgICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKyAgICBdKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luMS4qKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luW1s5MV1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkxMC5bWzAxMl1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBmaQorICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiICYmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJubyI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworXSkKKworCisjIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2tzIGZvciBsaW5rZXIgYW5kIGNvbXBpbGVyIGZlYXR1cmVzIG9uIGRhcndpbgorbTRfZGVmdW4oW19MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTXSwKK1sKKyAgbTRfcmVxdWlyZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKQorICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAieWVzIjsgdGhlbgorICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR7d2x9LWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisgICAgbTRfY2FzZShbJDFdLCBbRjc3XSwgW19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzXSwKKyAgICAgICAgICAgICAgICAgIFtGQ10sICBbX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXNdKQorICBlbHNlCisgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScnCisgIGZpCisgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIG00X2lmKFskMV0sIFtDWFhdLAorWyAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiAhPSAieWVzIjsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2RzeW11dGlsfSIKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIGZpCitdLFtdKQorICBlbHNlCisgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgZmkKK10pCisKKyMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKyMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAorIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCisjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKyMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKKyMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCisjIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KKyMgQWxsb3cgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgYWxsIHRhZ3MgdGhyb3VnaCBsdF9jdl9haXhfbGlicGF0aC4KK200X2RlZnVuKFtfTFRfU1lTX01PRFVMRV9QQVRIX0FJWF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2lmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIEFDX0NBQ0hFX1ZBTChbX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSldLAorICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWworICBsdF9haXhfbGlicGF0aF9zZWQ9J1sKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfV0nCisgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmldLFtdKQorICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9Ii91c3IvbGliOi9saWIiCisgIGZpCisgIF0pCisgIGFpeF9saWJwYXRoPSRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKQorZmkKK10pIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorCisKKyMgX0xUX1NIRUxMX0lOSVQoQVJHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9TSEVMTF9JTklUXSwKK1ttNF9kaXZlcnRfdGV4dChbTTRTSC1JTklUXSwgWyQxCitdKV0pIyBfTFRfU0hFTExfSU5JVAorCisKKworIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIGhvdyB3ZSBjYW4gZmFrZSBhbiBlY2hvIGNvbW1hbmQgdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoLgorIyBJbiBwYXJ0aWN1bGFyLCB3aXRoIEF1dG9jb25mIDIuNjAgb3IgbGF0ZXIgd2UgYWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQKKyMgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHdoaWNoIHdpbGwgZmluZCBhIHNoZWxsIHdpdGggYSBidWlsdGluCisjIHByaW50ZiAod2hpY2ggd2UgY2FuIHVzZSBhcyBhbiBlY2hvIGNvbW1hbmQpLgorbTRfZGVmdW4oW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwKK1tFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBwcmludCBzdHJpbmdzXSkKKyMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgoraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludCAtciAtLScKK2VsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50ZiAlc1xuJworZWxzZQorICAjIFVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZmFsbGJhY2sgdGhhdCBhbHdheXMgd29ya3MuCisgIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQorICB7CisgICAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyRbXTEKK19MVEVDSE9fRU9GJworICB9CisgIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKK2ZpCisKKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKyMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KK2Z1bmNfZWNob19hbGwgKCkKK3sKKyAgICAkRUNITyAiJCoiIAorfQorCitjYXNlICIkRUNITyIgaW4KKyAgcHJpbnRmKikgQUNfTVNHX1JFU1VMVChbcHJpbnRmXSkgOzsKKyAgcHJpbnQqKSBBQ19NU0dfUkVTVUxUKFtwcmludCAtcl0pIDs7CisgICopIEFDX01TR19SRVNVTFQoW2NhdF0pIDs7Citlc2FjCisKK200X2lmZGVmKFtfQVNfREVURUNUX1NVR0dFU1RFRF0sCitbX0FTX0RFVEVDVF9TVUdHRVNURUQoWworICB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0ke0JBU0hfVkVSU0lPTitzZXR9IiB8fCAoCisgICAgRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKyAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworICAgIFBBVEg9L2VtcHR5IEZQQVRIPS9lbXB0eTsgZXhwb3J0IFBBVEggRlBBVEgKKyAgICB0ZXN0ICJYYHByaW50ZiAlcyAkRUNIT2AiID0gIlgkRUNITyIgXAorICAgICAgfHwgdGVzdCAiWGBwcmludCAtciAtLSAkRUNIT2AiID0gIlgkRUNITyIgKV0pXSkKKworX0xUX0RFQ0woW10sIFtTSEVMTF0sIFsxXSwgW1NoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHNdKQorX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLCBbQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXNdKQorXSkjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisKKworIyBfTFRfV0lUSF9TWVNST09UCisjIC0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXNyb290XSkKK0FDX0FSR19XSVRIKFtzeXNyb290XSwKK1sgIC0td2l0aC1zeXNyb290Wz1ESVJdIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS5dLAorW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQorCitkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCitkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KK2x0X3N5c3Jvb3Q9CitjYXNlICR7d2l0aF9zeXNyb290fSBpbiAjKAorIHllcykKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICBmaQorICAgOzsgIygKKyAvKikKKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgIDs7ICMoCisgbm98JycpCisgICA7OyAjKAorICopCisgICBBQ19NU0dfUkVTVUxUKFske3dpdGhfc3lzcm9vdH1dKQorICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKyAgIDs7Citlc2FjCisKKyBBQ19NU0dfUkVTVUxUKFske2x0X3N5c3Jvb3Q6LW5vfV0pCitfTFRfREVDTChbXSwgW2x0X3N5c3Jvb3RdLCBbMF0sIFtUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIF1kbmwKK1tkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKKworIyBfTFRfRU5BQkxFX0xPQ0sKKyMgLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0VOQUJMRV9MT0NLXSwKK1tBQ19BUkdfRU5BQkxFKFtsaWJ0b29sLWxvY2tdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAorICAgIFthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQordGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisjIGxpYnRvb2wgc3VwcG9ydC4KK2Nhc2UgJGhvc3QgaW4KK2lhNjQtKi1ocHV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9IjY0IgorCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ1sjXWxpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJICAgIDs7CisJICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKwkgICAgOzsKKwkgIHMzOTB4LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKjY0LWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorCSAgICA7OworCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKwkgICAgOzsKKwkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorCSAgICA7OworCSAgc3BhcmMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworKi0qLXNjbzMuMnY1KikKKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCisgICAgW0FDX0xBTkdfUFVTSChDKQorICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sW1tdXSldLFtsdF9jdl9jY19uZWVkc19iZWxmPXllc10sW2x0X2N2X2NjX25lZWRzX2JlbGY9bm9dKQorICAgICBBQ19MQU5HX1BPUF0pCisgIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCisgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCisgIGZpCisgIDs7CisqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKQorICAgICAgICBjYXNlICRob3N0IGluCisgICAgICAgIGk/ODYtKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKyAgICAgICAgICA7OworICAgICAgICBzcGFyYyotKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICAjIEdOVSBsZCAyLjIxIGludHJvZHVjZWQgX3NvbDIgZW11bGF0aW9ucy4gIFVzZSB0aGVtIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgJHtMRC1sZH0gLVYgfCBncmVwIF9zb2wyID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgIExEPSIke0xELWxkfV9zb2wyIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKK2VzYWMKKworbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCitdKSMgX0xUX0VOQUJMRV9MT0NLCisKKworIyBfTFRfUFJPR19BUgorIyAtLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9QUk9HX0FSXSwKK1tBQ19DSEVDS19UT09MUyhBUiwgW2FyXSwgZmFsc2UpCis6ICR7QVI9YXJ9Cis6ICR7QVJfRkxBR1M9Y3J1fQorX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCitfTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdLCBbRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmVdKQorCitBQ19DQUNIRV9DSEVDSyhbZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnRdLCBbbHRfY3ZfYXJfYXRfZmlsZV0sCisgIFtsdF9jdl9hcl9hdF9maWxlPW5vCisgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSwKKyAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JkFTX01FU1NBR0VfTE9HX0ZEJworICAgICAgQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisJQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAgICAgXSkKKyAgXSkKKworaWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorICBhcmNoaXZlcl9saXN0X3NwZWM9CitlbHNlCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorZmkKK19MVF9ERUNMKFtdLCBbYXJjaGl2ZXJfbGlzdF9zcGVjXSwgWzFdLAorICBbSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyXSkKK10pIyBfTFRfUFJPR19BUgorCisKKyMgX0xUX0NNRF9PTERfQVJDSElWRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9PTERfQVJDSElWRV0sCitbX0xUX1BST0dfQVIKKworQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKK19MVF9ERUNMKFtdLCBbU1RSSVBdLCBbMV0sIFtBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbV0pCisKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIsIDopCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgorX0xUX0RFQ0woW10sIFtSQU5MSUJdLCBbMV0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZV0pCisKKyMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG9wZW5ic2QqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCR0b29sX29sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCitmaQorCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPXllcyA7OworICAqKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj1ubyA7OworZXNhYworX0xUX0RFQ0woW10sIFtvbGRfcG9zdGluc3RhbGxfY21kc10sIFsyXSkKK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW2xvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbl0sIFswXSwKKyAgICBbV2hldGhlciB0byB1c2UgYSBsb2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uXSkKK10pIyBfTFRfQ01EX09MRF9BUkNISVZFCisKKworIyBfTFRfQ09NUElMRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIwkJW09VVFBVVC1GSUxFXSwgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIG00X2lmKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZWxzZQorICAgIG00X2lmKFskNl0sICwgOiwgWyQ2XSkKK2ZpCitdKSMgX0xUX0NPTVBJTEVSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW19MVF9DT01QSUxFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtdKQorCisKKyMgX0xUX0xJTktFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsaW5rZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0xJTktFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTICQzIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgJDI9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCitdKQorCitpZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgorICAgIG00X2lmKFskNF0sICwgOiwgWyQ0XSkKK2Vsc2UKKyAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCitmaQorXSkjIF9MVF9MSU5LRVJfT1BUSU9OCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwgW19MVF9MSU5LRVJfT1BUSU9OXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwgW10pCisKKworIyBMVF9DTURfTUFYX0xFTgorIy0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX0NNRF9NQVhfTEVOXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK0FDX01TR19DSEVDS0lORyhbdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHNdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbWF4X2NtZF9sZW5dLCBbZG5sCisgIGk9MAorICB0ZXN0c3RyaW5nPSJBQkNEIgorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBtaW50KikKKyAgICAjIE9uIE1pTlQgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zMiopCisgICAgIyBUaGUgdGVzdCB0YWtlcyBhIGxvbmcgdGltZSBvbiBPUy8yLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyCisgICAgOzsKKworICBvc2YqKQorICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKyAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKyAgICAjCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBzY28zLjJ2NSopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorICAgIDs7CisgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWwkgXV0vLydgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CisgICAgZmkKKyAgICA7OworICAqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCitpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJGx0X2N2X3N5c19tYXhfY21kX2xlbikKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChub25lKQorZmkKK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KK19MVF9ERUNMKFtdLCBbbWF4X2NtZF9sZW5dLCBbMF0sCisgICAgW1doYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD9dKQorXSkjIExUX0NNRF9NQVhfTEVOCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbTFRfQ01EX01BWF9MRU5dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtdKQorCisKKyMgX0xUX0hFQURFUl9ETEZDTgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0hFQURFUl9ETEZDTl0sCitbQUNfQ0hFQ0tfSEVBREVSUyhbZGxmY24uaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKWRubAorXSkjIF9MVF9IRUFERVJfRExGQ04KKworCisjIF9MVF9UUllfRExPUEVOX1NFTEYgKEFDVElPTi1JRi1UUlVFLCBBQ1RJT04tSUYtVFJVRS1XLVVTQ09SRSwKKyMgICAgICAgICAgICAgICAgICAgICAgQUNUSU9OLUlGLUZBTFNFLCBBQ1RJT04tSUYtQ1JPU1MtQ09NUElMSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1RSWV9ETE9QRU5fU0VMRl0sCitbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIFskNF0KK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorWyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfV0KK19MVF9FT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSAkMSA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OworICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgICQzCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorXSkjIF9MVF9UUllfRExPUEVOX1NFTEYKKworCisjIExUX1NZU19ETE9QRU5fU0VMRgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9TWVNfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBjeWd3aW4qKQorICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSxbCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIF0pCisgICAgOzsKKworICAqKQorICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKKwkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCisgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAorCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0sCisJW0FDX0NIRUNLX0ZVTkMoW2Rsb3Blbl0sCisJICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIl0sCisJICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sCisJICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKKwkJICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiXSwKKwkgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbZGxkX2xpbmtdLAorCQkgICAgW2x0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdKQorCSAgICAgIF0pCisJICAgIF0pCisJICBdKQorCV0pCisgICAgICBdKQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisgICAgXSkKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8sICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MpCisgICAgICBdKQorICAgIGZpCisKKyAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtkbG9wZW5fc3VwcG9ydF0sIFtlbmFibGVfZGxvcGVuXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl0sIFtlbmFibGVfZGxvcGVuX3NlbGZdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmX3N0YXRpY10sIFtlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK10pIyBMVF9TWVNfRExPUEVOX1NFTEYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW0xUX1NZU19ETE9QRU5fU0VMRl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9DX08oW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIuCisjIFRoaXMgbWFjcm8gZG9lcyBub3QgaGFyZCBjb2RlIHRoZSBjb21waWxlciBsaWtlIEFDX1BST0dfQ0NfQ19PLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9DX09dLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorXSkKK19MVF9UQUdERUNMKFtjb21waWxlcl9jX29dLCBbbHRfY3ZfcHJvZ19jb21waWxlcl9jX29dLCBbMV0sCisJW0RvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz9dKQorXSkjIF9MVF9DT01QSUxFUl9DX08KKworCisjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9GSUxFX0xPQ0tTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRU5BQkxFX0xPQ0tdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09NUElMRVJfQ19PKFskMV0pCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBgLWMgLW8nLCBzbyBgbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCitfTFRfREVDTChbXSwgW25lZWRfbG9ja3NdLCBbMV0sIFtNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj9dKQorXSkjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTCisKKworIyBfTFRfQ0hFQ0tfT0JKRElSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ0hFQ0tfT0JKRElSXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAorW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQorb2JqZGlyPSRsdF9jdl9vYmpkaXIKK19MVF9ERUNMKFtdLCBbb2JqZGlyXSwgWzBdLAorICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCittNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKExUX09CSkRJUiwgIiRsdF9jdl9vYmpkaXIvIiwKKyAgW0RlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuXSkKK10pIyBfTFRfQ0hFQ0tfT0JKRElSCisKKworIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXNdKQorX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwKKyAgIHRlc3QgLW4gIiRfTFRfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8CisgICB0ZXN0ICJYJF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAorZmkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKKworaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rIHx8CisgICB0ZXN0ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiID0geWVzOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CisgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hY3Rpb25dLCBbMF0sCisgICAgW0hvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlXSkKK10pIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgKKworCisjIF9MVF9DTURfU1RSSVBMSUIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfU1RSSVBMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbXSwgW29sZF9zdHJpcGxpYl0sIFsxXSwgW0NvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N0cmlwbGliXSwgWzFdKQorXSkjIF9MVF9DTURfU1RSSVBMSUIKKworCisjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBPUlRNRSBGaWxsIGluIHlvdXIgbGQuc28gY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX1NZU19EWU5BTUlDX0xJTktFUl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQorbTRfaWYoWyQxXSwKKwlbXSwgWworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKKyAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OworICBlc2FjCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0icyw9XChbW0EtWmEtel1dOlwpLFwxLGciIDs7CisgICAgKikgbHRfc2VkX3N0cmlwX2VxPSJzLD0vLC8sZyIgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAorICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCisgICpcOyopCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICdzLzsvIC9nJ2AKKyAgICA7OworICAqKQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgIDs7CisgIGVzYWMKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsc2UKKyAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAorCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorICAgIGZpCisgIGRvbmUKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJworQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30geworICBsdF9mb289IiI7CisgIGx0X2NvdW50PTA7CisgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKKyAgICAgICAgbHRfY291bnQrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbHRfY291bnQtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbW2x0X2Zvb11dKys7IH0KKyAgaWYgKGx0X2ZyZXFbW2x0X2Zvb11dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Cit9J2AKKyAgIyBBV0sgcHJvZ3JhbSBhYm92ZSBlcnJvbmVvdXNseSBwcmVwZW5kcyAnLycgdG8gQzovZG9zL3BhdGhzCisgICMgZm9yIHRoZXNlIGhvc3RzLgorICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCisgICAgICAkU0VEICdzLC9cKFtbQS1aYS16XV06XCksXDEsZydgIDs7CisgIGVzYWMKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJGx0X05MMlNQYAorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaV0pCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeFtbNC05XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuW1swMV1dIHwgYWl4NC5bWzAxXV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFtbXi9dXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpW1s0NV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKyAgeWVzLCopCisgICAgIyBnY2MKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCittNF9pZihbJDFdLCBbXSxbCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIl0pCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworCisgICosY2wqKQorICAgICMgTmF0aXZlIE1TVkMKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworCisgICAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgICBtaW5ndyopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisgICAgICBsdF9zYXZlX2lmcz0kSUZTCisgICAgICBJRlM9JzsnCisgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisgICAgICBkbworICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW1thLXpBLVpdXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisgICAgICA7OworICAgIGN5Z3dpbiopCisgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgIDs7CisKKyAgKikKKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKyAgZXNhYworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCittNF9pZihbJDFdLCBbXSxbCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiJdKQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkW1syM11dLiopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyLiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMDFdXSogfCBmcmVlYnNkZWxmMy5bWzAxXV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1syLTldXSogfCBmcmVlYnNkZWxmMy5bWzItOV1dKiB8IFwKKyAgZnJlZWJzZDQuW1swLTVdXSB8IGZyZWVic2RlbGY0LltbMC01XV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaGFpa3UqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICBmaQorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgIyBvciBmYWlscyBvdXRyaWdodCwgc28gb3ZlcnJpZGUgYXRvbWljYWxseToKKyAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQorICA7OworCitpbnRlcml4W1szLTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgQUNfQ0FDSEVfVkFMKFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLAorICAgIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpXCI7IFwKKwkgTERGTEFHUz1cIlwkTERGTEFHUyAkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSlcIiIKKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisgICAgICBbQVNfSUYoWyAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGxdLAorCSBbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllc10pXSkKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisgICAgXSkKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFxbJF0yKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcWyRdMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorZmkKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCisKK19MVF9ERUNMKFtdLCBbdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmtdLCBbMV0sCisgICAgW1ZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorICAgIHJlc3RvcmVkIGF0IGxpbmsgdGltZV0pCitfTFRfREVDTChbXSwgW25lZWRfbGliX3ByZWZpeF0sIFswXSwKKyAgICBbRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzP10pCitfTFRfREVDTChbXSwgW25lZWRfdmVyc2lvbl0sIFswXSwgW0RvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/XSkKK19MVF9ERUNMKFtdLCBbdmVyc2lvbl90eXBlXSwgWzBdLCBbTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGVdKQorX0xUX0RFQ0woW10sIFtydW5wYXRoX3Zhcl0sIFswXSwgIFtTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfdmFyXSwgWzBdLFtTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwgWzBdLAorICAgIFtJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/XSkKK19MVF9ERUNMKFtdLCBbbGlibmFtZV9zcGVjXSwgWzFdLCBbRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXhdKQorX0xUX0RFQ0woW10sIFtsaWJyYXJ5X25hbWVzX3NwZWNdLCBbMV0sCisgICAgW1tMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorICAgIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUVdXSkKK19MVF9ERUNMKFtdLCBbc29uYW1lX3NwZWNdLCBbMV0sCisgICAgW1tUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZV1dKQorX0xUX0RFQ0woW10sIFtpbnN0YWxsX292ZXJyaWRlX21vZGVdLCBbMV0sCisgICAgW1Blcm1pc3Npb24gbW9kZSBvdmVycmlkZSBmb3IgaW5zdGFsbGF0aW9uIG9mIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtwb3N0aW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnldKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfZXZhbF0sIFsxXSwKKyAgICBbW0FzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorICAgIG5vdCBzaG93bl1dKQorX0xUX0RFQ0woW10sIFtoYXJkY29kZV9pbnRvX2xpYnNdLCBbMF0sCisgICAgW1doZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCisgICAgW0NvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitdKSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUgorCisKKyMgX0xUX1BBVEhfVE9PTF9QUkVGSVgoVE9PTCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJ5CitBQ19ERUZVTihbX0xUX1BBVEhfVE9PTF9QUkVGSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKK1tjYXNlICRNQUdJQ19DTUQgaW4KK1tbXFwvKl0gfCAgPzpbXFwvXSpdKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitkbmwgJGFjX2R1bW15IGZvcmNlcyBzcGxpdHRpbmcgb24gY29uc3RhbnQgdXNlci1zdXBwbGllZCBwYXRocy4KK2RubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKK2RubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCisgIGFjX2R1bW15PSJtNF9pZihbJDJdLCAsICRQQVRILCBbJDJdKSIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWNdKQorTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRNQUdJQ19DTUQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorX0xUX0RFQ0woW10sIFtNQUdJQ19DTURdLCBbMF0sCisJIFtVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zIHdpdGggImZpbGUiXSlkbmwKK10pIyBfTFRfUEFUSF9UT09MX1BSRUZJWAorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbX0xUX1BBVEhfVE9PTF9QUkVGSVhdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW10pCisKKworIyBfTFRfUEFUSF9NQUdJQworIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgYSBzaGFyZWQgbGlicmFyeQorbTRfZGVmdW4oW19MVF9QQVRIX01BR0lDXSwKK1tfTFRfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICBfTFRfUEFUSF9UT09MX1BSRUZJWChmaWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQorICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCitdKSMgX0xUX1BBVEhfTUFHSUMKKworCisjIExUX1BBVEhfTEQKKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCitBQ19ERUZVTihbTFRfUEFUSF9MRF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKKworQUNfQVJHX1dJVEgoW2dudS1sZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKKwlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKKyAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKyAgICBbd2l0aF9nbnVfbGQ9bm9dKWRubAorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSAkQ0NdKQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKyAgICAgIHJlX2RpcmVsdD0nL1tbXi9dXVtbXi9dXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorZWxzZQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKK2ZpCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaV0pCitMRD0iJGx0X2N2X3BhdGhfTEQiCitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJExEKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCitfTFRfUEFUSF9MRF9HTlUKK0FDX1NVQlNUKFtMRF0pCisKK19MVF9UQUdERUNMKFtdLCBbTERdLCBbMV0sIFtUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzXSkKK10pIyBMVF9QQVRIX0xECisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitBVV9BTElBUyhbQUNfUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xEXSwgW10pCisKKworIyBfTFRfUEFUSF9MRF9HTlUKKyMtIC0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BBVEhfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCitdKSMgX0xUX1BBVEhfTERfR05VCisKKworIyBfTFRfQ01EX1JFTE9BRAorIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKKyMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgorbTRfZGVmdW4oW19MVF9DTURfUkVMT0FEXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAorICBbbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJ10pCityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKyAgICBmaQorICAgIDs7CisgIGRhcndpbiopCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBlbHNlCisgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZmkKKyAgICA7OworZXNhYworX0xUX1RBR0RFQ0woW10sIFtyZWxvYWRfZmxhZ10sIFsxXSwgW0hvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXNdKWRubAorX0xUX1RBR0RFQ0woW10sIFtyZWxvYWRfY21kc10sIFsyXSlkbmwKK10pIyBfTFRfQ01EX1JFTE9BRAorCisKKyMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBjaGVjayBmb3IgbGlicmFyeSBkZXBlbmRlbmNpZXMKKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXNdLAorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCitbbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4W1s0LTldXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpW1s0NV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICAjIGZ1bmNfd2luMzJfbGliaWQgYXNzdW1lcyBCU0Qgbm0sIHNvIGRpc2FsbG93IGl0IGlmIHVzaW5nIE1TIGR1bXBiaW4uCisgIGlmICggdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiQlNEIG5tIiAmJiBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICBlbHNlCisgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKikKKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pW1szLTldXTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBmaQorICA7OworCitnbnUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitoYWlrdSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEZbIC1dWzAtOV1bMC05XSkoLWJpdCk/KCBbTE1dU0IpPyBzaGFyZWQgb2JqZWN0KCBmaWxlKT9bLCAtXSogUEEtUklTQyBbMC05XVwuWzAtOV0nXQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAorICAgIDs7CisgICopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18UEEtUklTQ1tbMC05XV1cLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRMRCBpbgorICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CisgICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OworICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7CisgICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgZXNhYworICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKK10pCisKK2ZpbGVfbWFnaWNfZ2xvYj0KK3dhbnRfbm9jYXNlZ2xvYj1ubworaWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBtaW5ndyogfCBwdzMyKikKKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisgICAgZWxzZQorICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bW1wxXV1cL1tbXDFdXVwvZzsvZyJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitmaQorCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKK19MVF9ERUNMKFtdLCBbZGVwbGlic19jaGVja19tZXRob2RdLCBbMV0sCisgICAgW01ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzXSkKK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2dsb2JdLCBbMV0sCisgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKK19MVF9ERUNMKFtdLCBbd2FudF9ub2Nhc2VnbG9iXSwgWzFdLAorICAgIFtGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKworCisjIExUX1BBVEhfTk0KKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byBhIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0xUX1BBVEhfTk1dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKV0sIGx0X2N2X3BhdGhfTk0sCitbaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgbHRfY3ZfcGF0aF9OTT0iJE5NIgorZWxzZQorICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgIGZpCisgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgorCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAorCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisJICBicmVhaworCSAgOzsKKwkqKQorCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJICAqL2Rldi9udWxsKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKwkgICAgYnJlYWsKKwkgICAgOzsKKwkgICopCisJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CisJICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICBkb25lCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQorZmldKQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgZWxzZQorICAgIEFDX0NIRUNLX1RPT0xTKERVTVBCSU4sIFtkdW1wYmluICJsaW5rIC1kdW1wIl0sIDopCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICAqQ09GRiopCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIERVTVBCSU49OgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIEFDX1NVQlNUKFtEVU1QQklOXSkKKyAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgorICAgIE5NPSIkRFVNUEJJTiIKKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCitBQ19TVUJTVChbTk1dKQorX0xUX0RFQ0woW10sIFtOTV0sIFsxXSwgW0EgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyXSlkbmwKKworQUNfQ0FDSEVfQ0hFQ0soW3RoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwKKyAgW2x0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgY2F0IGNvbmZ0ZXN0Lm91dCA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICBmaQorICBybSAtZiBjb25mdGVzdCpdKQorXSkjIExUX1BBVEhfTk0KKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQU1fUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKK0FVX0FMSUFTKFtBQ19QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX05NXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1BST0dfTk1dLCBbXSkKKworIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQorIyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsaW5rIGxpYnJhcnkuCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllc10sCitsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCwKK1tsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKworY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisgICotLWlkZW50aWZ5LXN0cmljdCopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKyAgICA7OworICBlc2FjCisgIDs7CisqKQorICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorICA7OworZXNhYworXSkKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAordGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworCitfTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAorICAgIFtDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzXSkKK10pIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorCisKKyMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvY2F0ZSB0aGUgbWFuaWZlc3QgdG9vbAorbTRfZGVmdW4oW19MVF9QQVRIX01BTklGRVNUX1RPT0xdLAorW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCit0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbF0sIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2xdLAorICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorICBNQU5JRkVTVF9UT09MPToKK2ZpCitfTFRfREVDTChbXSwgW01BTklGRVNUX1RPT0xdLCBbMV0sIFtNYW5pZmVzdCB0b29sXSlkbmwKK10pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisKKworIyBMVF9MSUJfTQorIyAtLS0tLS0tLQorIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5CitBQ19ERUZVTihbTFRfTElCX01dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0xJQk09CitjYXNlICRob3N0IGluCisqLSotYmVvcyogfCAqLSotY2VnY2MqIHwgKi0qLWN5Z3dpbiogfCAqLSotaGFpa3UqIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCisgICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAorICA7OworKi1uY3Itc3lzdjQuMyopCisgIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09Ii1sbXciKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSIkTElCTSAtbG0iKQorICA7OworKikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iLWxtIikKKyAgOzsKK2VzYWMKK0FDX1NVQlNUKFtMSUJNXSkKK10pIyBMVF9MSUJfTQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0NIRUNLX0xJQk1dLCBbTFRfTElCX01dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19DSEVDS19MSUJNXSwgW10pCisKKworIyBfTFRfQ09NUElMRVJfTk9fUlRUSShbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfTk9fUlRUSV0sCitbbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgbnZjYyopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLVhjb21waWxlciAtZm5vLWJ1aWx0aW4nIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJyA7OworICBlc2FjCisKKyAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zLAorICAgIFstZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwgW10sCisgICAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIl0pCitmaQorX0xUX1RBR0RFQ0woW25vX2J1aWx0aW5fZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9uc10pCitdKSMgX0xUX0NPTVBJTEVSX05PX1JUVEkKKworCisjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19BV0tdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KK0FDX01TR19DSEVDS0lORyhbY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdF0pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLAorWworIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCisjIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorCisjIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCitzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisKKyMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgorc3ltcGF0PSdcKFtbX0EtWmEtel1dW1tfQS1aYS16MC05XV0qXCknCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbW0JDRFRdXScKKyAgOzsKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tbQUJDREVHUlNUXV0nCisgIGZpCisgIDs7Citpcml4KiB8IG5vbnN0b3B1eCopCisgIHN5bWNvZGU9J1tbQkNERUdSU1RdXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tbQkNERUdRUlNUXV0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW1tCRFJUXV0nCisgIDs7CitzY28zLjJ2NSopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y0LjJ1dzIqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbW0FCRFRdXScKKyAgOzsKK3N5c3Y0KQorICBzeW1jb2RlPSdbW0RGTlNUVV1dJworICA7OworZXNhYworCisjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KK2Nhc2UgYCROTSAtViAyPiYxYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIHN5bWNvZGU9J1tbQUJDREdJUlNUV11dJyA7OworZXNhYworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXClbWyBdXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChsaWJbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKyAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKyAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyBbJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeF0iCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qW1sJIF1dXCgkc3ltY29kZSRzeW1jb2RlKlwpW1sJIF1dW1sJIF1dKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfTFRfRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworTFRAJnRAX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKwkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCitdKQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChvaykKK2ZpCisKKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbW0BdXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitmaQorCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCisgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb25dKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCitfTFRfREVDTChbXSwgW25tX2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yICROTV0pCitdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKworCisjIF9MVF9DT01QSUxFUl9QSUMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfUElDXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorCittNF9pZihbJDFdLCBbQ1hYXSwgWworICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworICAgICpkamdwcCopCisgICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICAgIDs7CisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorICAgICAgOzsKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICpxbngqIHwgKm50byopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4W1s0LTldXSopCisJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwllbHNlCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKwlmaQorCTs7CisgICAgICBjaG9ydXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJY3hjaDY4KikKKwkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAjIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisJIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisJbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCSAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisJOzsKKyAgICAgIGRndXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBlYysrKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKKwk7OworICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgIGZpCisJICAgIDs7CisJICBhQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCp8aWE2NCopCisJICAgICAgIyArWiB0aGUgZGVmYXVsdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgaW50ZXJpeCopCisJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisJIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PworCTs7CisgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgorCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgIyBLQUkgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgOzsKKwkgIGVjcGMqICkKKwkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgaWNwYyogKQorCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisJICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgcGdDQyogfCBwZ2NwcCopCisJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICB4bGMqIHwgeGxDKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKQorCSAgICAjIElCTSBYTCA4LjAsIDkuMCBvbiBQUEMgYW5kIEJsdWVHZW5lCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKikKKwk7OworICAgICAgKnFueCogfCAqbnRvKikKKyAgICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICAgIDs7CisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgOzsKKwkgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgRGlnaXRhbC9Db21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHBzb3MqKQorCTs7CisgICAgICBzb2xhcmlzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgIDs7CisJICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3Vub3M0KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB0YW5kZW0qKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB2eHdvcmtzKikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisJOzsKKyAgICBlc2FjCisgIGZpCitdLAorWworICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgbnZjYyopICMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVhsaW5rZXIgJworICAgICAgaWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSI7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSItWGNvbXBpbGVyICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy0tc2hhcmVkJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLS1zdGF0aWMnCisJOzsKKyAgICAgIG5hZ2ZvciopCisJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsLVdsLCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCisJOzsKKyAgICAgICopCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQ2VyZXNcIEZvcnRyYW4qIHwgKlN1bipGb3J0cmFuKlwgW1sxLTddXS4qIHwgKlN1bipGb3J0cmFuKlwgOC5bWzAtM11dKikKKwkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9JycKKwkgIDs7CisJKlN1blwgRiogfCAqU3VuKkZvcnRyYW4qKQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgOzsKKwkqU3VuXCBDKikKKwkgICMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgOzsKKyAgICAgICAgKkludGVsKlwgW1tDRl1dKkNvbXBpbGVyKikKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKwkgIDs7CisJKlBvcnRsYW5kXCBHcm91cCopCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgcmRvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorXSkKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICpkamdwcCopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgOzsKK2VzYWMKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKV0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCisgICAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKV0sCisgICAgWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAorICAgIFtjYXNlICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OworICAgICBlc2FjXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKK2ZpCitfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisJW0FkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0c10pCisKK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorCVtIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyXSkKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgorX0xUX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKKyAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcywgJDEpLAorICAkbHRfdG1wX3N0YXRpY19mbGFnLAorICBbXSwKKyAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT1dKQorX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmddKQorXSkjIF9MVF9DT01QSUxFUl9QSUMKKworCisjIF9MVF9MSU5LRVJfU0hMSUJTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKK1tBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4W1s0LTldXSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorICAgICMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkCisgICAgIyBzeW1ib2xzLCB3aGVyZWFzIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKyAgICBpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZmkKKyAgICA7OworICBwdzMyKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0iJGx0ZGxsX2NtZHMiCisgICAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIGNsKikKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKyAgICAgIDs7CisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgOzsKKyAgZXNhYworXSwgWworICBydW5wYXRoX3Zhcj0KKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBfTFRfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgorZG5sIE5vdGUgYWxzbyBhZGp1c3QgZXhjbHVkZV9leHBzeW1zIGZvciBDKysgYWJvdmUuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGVzYWMKKworICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworCisgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgorICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKyAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CisJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCisJIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuW1syLTldXSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgW1szLTldXSopIDs7CisJICAqKQorCSAgICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIiA9IHllczsgdGhlbgorICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgd2xhcmM9JyR7d2x9JworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCisgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbWzMtOV1dKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWVsc2UKKwkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwlmaX4KKwkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgOzsKKworICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgdG1wX2RpZXQ9bm8KKyAgICAgIGlmIHRlc3QgIiRob3N0X29zIiA9IGxpbnV4LWRpZXRsaWJjOyB0aGVuCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGRpZXRcICopIHRtcF9kaWV0PXllczs7CSMgbGludXgtZGlldGxpYmMgd2l0aCBzdGF0aWMgbGlua2luZyAoIWRpZXQtZHluKQorCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgdGhlbgorCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworCXhsW1tjQ11dKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKSAjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCisJICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKKwkgIHRtcF9hZGRmbGFnPSA7OworCW52Y2MqKQkjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisJICA7OworCWVzYWMKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCWVzYWMKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisgICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisJICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKwkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIGZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXhbWzQtOV1dKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsCisJIyBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKKwkgIGVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICBmaQorCWZpCisgICAgICBmaQorCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKwkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGVsc2UKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgZmkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpW1s0NV1dKikKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGNsKikKKwkjIE5hdGl2ZSBNU1ZDCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9Ii5kbGwiCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZWxzZQorCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZml+CisJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICBsaW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCV9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKwlfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisJIyBEb24ndCB1c2UgcmFubGliCisJX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKwlfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKwkgICAgKi5leGV8Ki5FWEUpIDs7CisJICAgICopCisJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisJICAgICAgOzsKKwkgIGVzYWN+CisJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKwkgIGZpJworCTs7CisgICAgICAqKQorCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPSIuZGxsIgorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIuKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJbTRfaWYoJDEsIFtdLCBbCisJICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKKwkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQorCSAgX0xUX0xJTktFUl9PUFRJT04oW2lmICRDQyB1bmRlcnN0YW5kcyAtYl0sCisJICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9fYiwgJDEpLCBbLWJdLAorCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSwKKwkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnXSldLAorCSAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10pCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisJQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2xdLAorCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKKwkgIFtzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKwkgICBBQ19MSU5LX0lGRUxTRSgKKwkgICAgIFtBQ19MQU5HX1NPVVJDRSgKKwkgICAgICAgIFtBQ19MQU5HX0NBU0UoW0NdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtGb3J0cmFuIDc3XSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSwKKwkJCSAgICAgIFtGb3J0cmFuXSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSldKV0sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllc10sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vXSkKKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCWVsc2UKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICBvcGVuYnNkW1swMV1dLiogfCBvcGVuYnNkMi5bWzAtN11dIHwgb3BlbmJzZDIuW1swLTddXS4qKQorCSAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICA7OworCSAgICopCisJICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisKKwkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAteiBkZWZzJworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwl3bGFyYz0nJHt3bH0nCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgIGVsc2UKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHt3bH0nCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworICAgICAgKikKKwkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKKwkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KKwkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKwk7OworCXNpZW1lbnMpCisJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKwkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICA7OworCW1vdG9yb2xhKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQuMyopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nLUJleHBvcnQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisgICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKyAgICAgICMgYXMgLXogZGVmcy4KKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorXSkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKK3Rlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworX0xUX1RBR1ZBUih3aXRoX2dudV9sZCwgJDEpPSR3aXRoX2dudV9sZAorCitfTFRfREVDTChbXSwgW2xpYmV4dF0sIFswXSwgW09sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKV0pZG5sCitfTFRfREVDTChbXSwgW3NocmV4dF9jbWRzXSwgWzFdLCBbU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIildKWRubAorX0xUX0RFQ0woW10sIFtleHRyYWN0X2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbl0sCisJW2x0X2N2X11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSksCisJWyRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXJyOyB0aGVuCisJICBzb25hbWU9Y29uZnRlc3QKKwkgIGxpYj1jb25mdGVzdAorCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisJICBkZXBsaWJzPQorCSAgd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCisJICBwaWNfZmxhZz0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorCSAgaWYgQUNfVFJZX0VWQUwoX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkKKwkgIHRoZW4KKwkgICAgbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICBmaQorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisJXSkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0kbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCitfTFRfVEFHREVDTChbYnVpbGRfbGlidG9vbF9uZWVkX2xjXSwgW2FyY2hpdmVfY21kc19uZWVkX2xjXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFthbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXNdLAorICAgIFtlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljXSkKK19MVF9UQUdERUNMKFtdLCBbZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zXSkKK19MVF9UQUdERUNMKFtdLCBbd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlc10pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX25lZWRzX29iamVjdF0sIFsxXSwKKyAgICBbV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHldKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzXSwgWzJdLAorICAgIFtDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfY21kc10sIFsyXSwgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisgICAgYSBzaGFyZWQgYXJjaGl2ZS5dKQorX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW3dpdGhfZ251X2xkXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3RdKQorX0xUX1RBR0RFQ0woW10sIFthbGxvd191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHRdKQorX0xUX1RBR0RFQ0woW10sIFtub191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbRmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisgICAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiAkbGliZGlyIGRvZXMgbm90IGV4aXN0XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQorICAgIGxpYnJhcnkgaXMgcmVsb2NhdGVkXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbWludXNfTF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYXV0b21hdGljXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorICAgIGFnYWluc3QgaXRdKQorX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorICAgIFtTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKK19MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKKyAgICBbV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFtdLCBbYWx3YXlzX2V4cG9ydF9zeW1ib2xzXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfc3ltYm9sc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbZXhjbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaW5jbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzXSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtc10pCitfTFRfVEFHREVDTChbXSwgW2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXNdKQorZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCitkbmwgX0xUX1RBR0RFQ0woW10sIFt0aHJlYWRfc2FmZV9mbGFnX3NwZWNdLCBbMV0sCitkbmwgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkIHNhZmUgb2JqZWN0c10pCitdKSMgX0xUX0xJTktFUl9TSExJQlMKKworCisjIF9MVF9MQU5HX0NfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitsdF9zYXZlX0NDPSIkQ0MiCitBQ19MQU5HX1BVU0goQykKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JworCitfTFRfVEFHX0NPTVBJTEVSCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorICBMVF9TWVNfRExPUEVOX1NFTEYKKyAgX0xUX0NNRF9TVFJJUExJQgorCisgICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgIGZpCisgICAgOzsKKworICBhaXhbWzQtOV1dKikKKyAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGZpCisgICAgOzsKKyAgZXNhYworICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKK0FDX0xBTkdfUE9QCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgX0xUX0xBTkdfQ19DT05GSUcKKworCisjIF9MVF9MQU5HX0NYWF9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDKysgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NYWF9DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCitpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorICBBQ19QUk9HX0NYWENQUAorZWxzZQorICBfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXMKK2ZpCisKK0FDX0xBTkdfUFVTSChDKyspCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWNwcAorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltbXV0pIHsgcmV0dXJuKDApOyB9JworCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0kQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIENGTEFHUz0kQ1hYRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKKyAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5CisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisgICAgZmkKKworICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorCisgICAgICBMVF9QQVRIX0xECisKKyAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCisgICAgICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCisgICAgICAgIHdsYXJjPScke3dsfScKKworICAgICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwKKwkgICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgZWxzZQorICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgICAgd2xhcmM9CisKKyAgICAgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KKyAgICAgICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKKyAgICAgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKKyAgICAgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCisgICAgICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKyAgICAgIGZpCisKKyAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKyAgICBlbHNlCisgICAgICBHWFg9bm8KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICB3bGFyYz0KKyAgICBmaQorCisgICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworICAgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorICAgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgICAgICBjYXNlICRsZF9mbGFnIGluCisJICAgICAgKi1icnRsKikKKwkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgICBicmVhaworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgOzsKKyAgICAgICAgICBlc2FjCisKKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgICAgZmkKKworICAgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKworICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgICA6CisJICBlbHNlCisJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorICAgICAgICAgIGVzYWMKKyAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwkgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisgICAgICAgICAgZWxzZQorCSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgICAgZWxzZQorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCisJIyBleHBvcnQuCisgICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAjIGV4ZWN1dGFibGUuCisgICAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKworICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICAgICAgZWxzZQorCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCisJICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIGVsc2UKKwkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwkgICAgZmkKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKKwkgICAgIyBsaWJyYXJpZXMuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgICAgYmVvcyopCisJaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgY2hvcnVzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICAqKQorCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwljYXNlICRHWFgsJGNjX2Jhc2VuYW1lIGluCisJLGNsKiB8IG5vLGNsKikKKwkgICMgTmF0aXZlIE1TVkMKKwkgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJICBsaWJleHQ9bGliCisJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwkgIHNocmV4dF9jbWRzPSIuZGxsIgorCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgICAgZWxzZQorCSAgICAgICRTRUQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgICBmaX4KKwkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorCSAgICBsaW5rbmFtZXM9JworCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCSAgIyBEb24ndCB1c2UgcmFubGliCisJICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworCSAgX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKwkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorCSAgICAgICouZXhlfCouRVhFKSA7OworCSAgICAgICopCisJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKwkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKwkJOzsKKwkgICAgZXNhY34KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKwkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworCSAgICBmaScKKwkgIDs7CisJKikKKwkgICMgZysrCisJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorCSAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKworCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICBlbHNlCisJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgZml+CisJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgIGVsc2UKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgZmkKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKwk7OworCisgICAgICBkZ3V4KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBlYysrKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QyLiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgZ251KikKKyAgICAgICAgOzsKKworICAgICAgaGFpa3UqKQorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGhwdXg5KikKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJICAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJICAgICAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgYUNDKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKyAgICAgICAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAjIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDEwKnxocHV4MTEqKQorICAgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKyAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkJICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkJICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBhQ0MqKQorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICBpYTY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICAqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgZXNhYworCSAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaW50ZXJpeFtbMy05XV0qKQorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorCSMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKwkjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisJIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorCSMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKwkjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCTs7CisgICAgICBpcml4NSogfCBpcml4NiopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFNHSSBDKysKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgZWxzZQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKwkgICAgICBmaQorCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgICA7OworCisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKiApCisJICAgICMgSW50ZWwgQysrCisJICAgIHdpdGhfZ251X2xkPXllcworCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSAgICAjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkgICAgICAqIlZlcnNpb24gNy4iKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgICAgICAgIHRtcF9pZHluPQorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJCWVzYWMKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgOzsKKyAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKKyAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIGNhc2UgYCRDQyAtVmAgaW4KKwkgICAgKnBnQ0NcIFtbMS01XV0uKiB8ICpwZ2NwcFwgW1sxLTVdXS4qKQorCSAgICAgIF9MVF9UQUdWQVIocHJlbGlua19jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CisJCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCInCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKwkJJFJBTkxJQiAkb2xkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKwkgIHhsKiB8IG1waXhsKiB8IGJneGwqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCSRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgICBmaQorCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCisJICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgorCSAgICAgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKKwkgICAgICAjIHdvdWxkIGJlIGJldHRlci4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBseW54b3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbTg4ayopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbXZzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBjeHgqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCSAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbmV0YnNkKikKKyAgICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJworCSAgd2xhcmM9CisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJZmkKKwkjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworCTs7CisKKyAgICAgICpudG8qIHwgKnFueCopCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisJOzsKKworICAgICAgb3BlbmJzZDIqKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG9wZW5ic2QqKQorCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisJICBmaQorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorCWVsc2UKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICAgICopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgZXNhYworCSAgICA7OworICAgICAgICAgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgY3h4KikKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkJOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+CisJICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4KKwkgICAgICAgICAgJFJNICRsaWIuZXhwJworCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCQk7OworCSAgICBlc2FjCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCIgfCAkR1JFUCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgb3NmMyopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgICAgKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgZXNhYworCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgcHNvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIHN1bm9zNCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgc29sYXJpcyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgICAgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCSAgICAgICopCisJCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCisJICAgICAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCQlfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKworCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LXogJHt3bH1kZWZzJworCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBlbHNlCisJICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCisJICAgICAgICAjIHBsYXRmb3JtLgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkgICRDQyAtRyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGZpCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkd2wkbGliZGlyJworCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkJc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKwkJKikKKwkJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBDQyopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisJIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKwkjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisJIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisJIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorCSMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorCSMgYXMgLXogZGVmcy4KKwlfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKwlfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworCXJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkb2xkb2Jqc34KKwkgICAgICAnIiRfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSIKKwkgICAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgorCSAgICAgICciJF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKSIKKwkgICAgOzsKKwkgICopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgOzsKKwllc2FjCisgICAgICA7OworCisgICAgICB0YW5kZW0qKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgdnh3b3JrcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQorICAgIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHWFgiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyAgTERDWFg9JExECisgIExEPSRsdF9zYXZlX0xECisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKyAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCitmaSAjIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRworCisKKyMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZ1bmNfc3RyaXBuYW1lX2NuZiBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisjCisjIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSAobm9uLVhTSSkgdmVyc2lvbiBvZiBmdW5jX3N0cmlwbmFtZSwKKyMgZXhjZXB0IHRoaXMgb25lIGNhbiBiZSB1c2VkIGJ5IG00IGNvZGUgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgYnkgY29uZmlndXJlLAorIyByYXRoZXIgdGhhbiB0aGUgbGlidG9vbCBzY3JpcHQuCittNF9kZWZ1bihbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0sW2RubAorQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSkKK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKK2Z1bmNfc3RyaXBuYW1lX2NuZiAoKQoreworICBjYXNlICR7Mn0gaW4KKyAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworICBlc2FjCit9ICMgZnVuY19zdHJpcG5hbWVfY25mCitdKSMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorCisjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKKyMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorbTRfZGVmdW4oW19MVF9TWVNfSElEREVOX0xJQkRFUFNdLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorQUNfUkVRVUlSRShbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0pZG5sCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KK19MVF9UQUdWQVIocHJlZGVwcywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KKworZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCitkbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAorZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAorZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKK2RubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgorbTRfaWYoWyQxXSwgW10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgoraW50IGE7Cit2b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQorX0xUX0VPRgorXSwgWyQxXSwgW0NYWF0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorY2xhc3MgRm9vCit7CitwdWJsaWM6CisgIEZvbyAodm9pZCkgeyBhID0gMDsgfQorcHJpdmF0ZToKKyAgaW50IGE7Cit9OworX0xUX0VPRgorXSwgWyQxXSwgW0Y3N10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIqNCBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitfTFRfRU9GCitdLCBbJDFdLCBbRkNdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBpbXBsaWNpdCBub25lCisgICAgICBpbnRlZ2VyIGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtHQ0pdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK3B1YmxpYyBjbGFzcyBmb28geworICBwcml2YXRlIGludCBhOworICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKKyAgICBhID0gMDsKKyAgfQorfTsKK19MVF9FT0YKK10sIFskMV0sIFtHT10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorcGFja2FnZSBmb28KK2Z1bmMgZm9vKCkgeworfQorX0xUX0VPRgorXSkKKworX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAorKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7CisqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisqXCAtZnVzZS1saW5rZXItcGx1Z2luKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tdXNlLWxpbmtlci1wbHVnaW4iIDs7Citlc2FjCisKK2RubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKK2RubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCitpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKworICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCisgICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgorICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisKKyAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworICAgIGNhc2UgJHtwcmV2fSR7cH0gaW4KKworICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KKyAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiB8fAorICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisJIHByZXY9JHAKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KKyAgICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICBmaQorICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgIGVzYWMKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBjYXNlICR7cHJldn0gaW4KKwkgLUwgfCAtUikKKwkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKwkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKwkgICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSI7IHRoZW4KKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7cHJldn0ke3B9IgorCSAgIGVsc2UKKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0gJHtwcmV2fSR7cH0iCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7cHJldn0ke3B9IgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCisJIGZpCisgICAgICAgZmkKKyAgICAgICBwcmV2PQorICAgICAgIDs7CisKKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKKyAgICAqLiRvYmpleHQpCisgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCisgICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCisJIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCisKKyAgICBlc2FjCisgIGRvbmUKKworICAjIENsZWFuIHVwLgorICBybSAtZiBhLm91dCBhLmV4ZQorZWxzZQorICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgJDEgdGVzdCBwcm9ncmFtIgorZmkKKworJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorQ0ZMQUdTPSRfbHRfbGliZGVwc19zYXZlX0NGTEFHUworCisjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorbTRfaWYoWyQxXSwgW0NYWF0sCitbY2FzZSAkaG9zdF9vcyBpbgoraW50ZXJpeFtbMy05XV0qKQorICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCisgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsJDEpPQorICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPQorICA7OworCitsaW51eCopCisgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAqU3VuXCBDKikKKyAgICAjIFN1biBDKysgNS45CisKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7CisKK3NvbGFyaXMqKQorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBDQyogfCBzdW5DQyopCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCisgICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAorICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7Citlc2FjCitdKQorCitjYXNlICIgJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCisqIiAtbGMgIiopIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OworZXNhYworIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9CitpZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgorIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc10sIFsxXSwKKyAgICBbVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwX29iamVjdHNdLCBbMV0sCisgICAgW0RlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworICAgIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcF9vYmplY3RzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoXSwgWzFdLAorICAgIFtUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworICAgIGEgc2hhcmVkIGxpYnJhcnldKQorXSkjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMKKworCisjIF9MVF9MQU5HX0Y3N19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIDc3IGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GNzdfQ09ORklHXSwKK1tBQ19MQU5HX1BVU0goRm9ydHJhbiA3NykKK2lmIHRlc3QgLXogIiRGNzciIHx8IHRlc3QgIlgkRjc3IiA9ICJYbm8iOyB0aGVuCisgIF9sdF9kaXNhYmxlX0Y3Nz15ZXMKK2ZpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KK2FjX2V4dD1mCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBGNzcgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBDQz0ke0Y3Ny0iZjc3In0KKyAgQ0ZMQUdTPSRGRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorICBHQ0M9JEc3NworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEc3NyIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9IiRsdF9zYXZlX0NDIgorICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKK2ZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfRjc3X0NPTkZJRworCisKKyMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAorW0FDX0xBTkdfUFVTSChGb3J0cmFuKQorCitpZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3QgIlgkRkMiID0gIlhubyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRkM9eWVzCitmaQorCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGZjIHRlc3Qgc291cmNlcy4KK2FjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZmMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBGQyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCisgICAgICBzdWJyb3V0aW5lIHQKKyAgICAgIHJldHVybgorICAgICAgZW5kCisiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCisgICAgICBwcm9ncmFtIHQKKyAgICAgIGVuZAorIgorCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0iJENDIgorICBsdF9zYXZlX0dDQz0kR0NDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0M9JHtGQy0iZjk1In0KKyAgQ0ZMQUdTPSRGQ0ZMQUdTCisgIGNvbXBpbGVyPSRDQworICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQorCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisJICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkYWNfY3ZfZmNfY29tcGlsZXJfZ251IgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK2ZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GQ19DT05GSUcKKworCisjIF9MVF9MQU5HX0dDSl9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX0dDSl0pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWphdmEKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0kQ0MKK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz15ZXMKK0NDPSR7R0NKLSJnY2oifQorQ0ZMQUdTPSRHQ0pGTEFHUworY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisKK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0FDX0xBTkdfUkVTVE9SRQorCitHQ0M9JGx0X3NhdmVfR0NDCitDQz0kbHRfc2F2ZV9DQworQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworXSkjIF9MVF9MQU5HX0dDSl9DT05GSUcKKworCisjIF9MVF9MQU5HX0dPX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEdvIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19HT19DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfR09dKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBHbyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Z28KKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEdvIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0icGFja2FnZSBtYWluOyBmdW5jIG1haW4oKSB7IH0iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3BhY2thZ2UgbWFpbjsgZnVuYyBtYWluKCkgeyB9JworCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9JENDCitsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9eWVzCitDQz0ke0dPQy0iZ2NjZ28ifQorQ0ZMQUdTPSRHT0ZMQUdTCitjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIEdvIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorCitBQ19MQU5HX1JFU1RPUkUKKworR0NDPSRsdF9zYXZlX0dDQworQ0M9JGx0X3NhdmVfQ0MKK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK10pIyBfTFRfTEFOR19HT19DT05GSUcKKworCisjIF9MVF9MQU5HX1JDX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19SQ19DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfUkNdKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9cmMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9CitDQz0ke1JDLSJ3aW5kcmVzIn0KK0NGTEFHUz0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIDoKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0FDX0xBTkdfUkVTVE9SRQorQ0M9JGx0X3NhdmVfQ0MKK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK10pIyBfTFRfTEFOR19SQ19DT05GSUcKKworCisjIExUX1BST0dfR0NKCisjIC0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19HQ0pdLAorW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sIFtBQ19QUk9HX0dDSl0sCisgIFttNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sIFtBXVtNX1BST0dfR0NKXSwKKyAgICBbQUNfQ0hFQ0tfVE9PTChHQ0osIGdjaiwpCisgICAgICB0ZXN0ICJ4JHtHQ0pGTEFHUytzZXR9IiA9IHhzZXQgfHwgR0NKRkxBR1M9Ii1nIC1PMiIKKyAgICAgIEFDX1NVQlNUKEdDSkZMQUdTKV0pXSlbXWRubAorXSkKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX0dDSl0sIFtMVF9QUk9HX0dDSl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfR0NKXSwgW10pCisKKworIyBMVF9QUk9HX0dPCisjIC0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX0dPXSwKK1tBQ19DSEVDS19UT09MKEdPQywgZ2NjZ28sKQorXSkKKworCisjIExUX1BST0dfUkMKKyMgLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfUkNdLAorW0FDX0NIRUNLX1RPT0woUkMsIHdpbmRyZXMsKQorXSkKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1JDXSwgW0xUX1BST0dfUkNdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1JDXSwgW10pCisKKworIyBfTFRfREVDTF9FR1JFUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3QgZ3JlcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9FR1JFUF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0ZHUkVQXSlkbmwKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKK19MVF9ERUNMKFtdLCBbR1JFUF0sIFsxXSwgW0EgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzXSkKK19MVF9ERUNMKFtdLCBbRUdSRVBdLCBbMV0sIFtBbiBFUkUgbWF0Y2hlcl0pCitfTFRfREVDTChbXSwgW0ZHUkVQXSwgWzFdLCBbQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyXSkKK2RubCBOb24tYmxlZWRpbmctZWRnZSBhdXRvY29uZiBkb2Vzbid0IHN1YnN0IEdSRVAsIHNvIGRvIGl0IGhlcmUgdG9vCitBQ19TVUJTVChbR1JFUF0pCitdKQorCisKKyMgX0xUX0RFQ0xfT0JKRFVNUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3Qgb2JqZHVtcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9PQkpEVU1QXSwKK1tBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXJdKQorQUNfU1VCU1QoW09CSkRVTVBdKQorXSkKKworIyBfTFRfREVDTF9ETExUT09MCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIERMTFRPT0wgdmFyaWFibGUgaXMgc2V0LgorbTRfZGVmdW4oW19MVF9ERUNMX0RMTFRPT0xdLAorW0FDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pCitBQ19TVUJTVChbRExMVE9PTF0pCitdKQorCisjIF9MVF9ERUNMX1NFRAorIyAtLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKKyMgYXMgZmV3IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuICBQcmVmZXIgR05VIHNlZCBpZiBmb3VuZC4KK200X2RlZnVuKFtfTFRfREVDTF9TRURdLAorW0FDX1BST0dfU0VECit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCitfTFRfREVDTChbXSwgW1NFRF0sIFsxXSwgW0Egc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorX0xUX0RFQ0woW10sIFtYc2VkXSwgWyJcJFNFRCAtZSAxcy9eWC8vIl0sCisgICAgW1NlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uXSkKK10pIyBfTFRfREVDTF9TRUQKKworbTRfaWZuZGVmKFtBQ19QUk9HX1NFRF0sIFsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisjICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19TRUQuICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICMKKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbTRfZGVmdW4oW0FDX1BST0dfU0VEXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCitbIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCisjIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKK2x0X2FjX21heD0wCitsdF9hY19jb3VudD0wCisjIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcworIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KK2ZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQorICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KKyAgbHRfYWNfY291bnQ9MAorICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KKyAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGJyZWFrCisgIGZpCisgIHdoaWxlIHRydWU7IGRvCisgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKKyAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKyAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgIGVjaG8gPj5jb25mdGVzdC5ubAorICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCisgICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhaworICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCisgICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KKyAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKyAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBmaQorICBkb25lCitkb25lCitdKQorU0VEPSRsdF9jdl9wYXRoX1NFRAorQUNfU1VCU1QoW1NFRF0pCitBQ19NU0dfUkVTVUxUKFskU0VEXSkKK10pI0FDX1BST0dfU0VECitdKSNtNF9pZm5kZWYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1NFRF0sIFtBQ19QUk9HX1NFRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwgW10pCisKKworIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgb3V0IHdoZXRoZXIgdGhlIHNoZWxsIGlzIEJvdXJuZSBvciBYU0kgY29tcGF0aWJsZSwKKyMgb3IgaGFzIHNvbWUgb3RoZXIgdXNlZnVsIGZlYXR1cmVzLgorbTRfZGVmdW4oW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzXSkKKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCit4c2lfc2hlbGw9bm8KKyggX2x0X2R1bW15PSJhL2IvYyIKKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICYmIHhzaV9zaGVsbD15ZXMKK0FDX01TR19SRVNVTFQoWyR4c2lfc2hlbGxdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW3hzaV9zaGVsbD0nJHhzaV9zaGVsbCddKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICIrPSJdKQorbHRfc2hlbGxfYXBwZW5kPW5vCisoIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkWzFdKz1cJFsyXSIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworQUNfTVNHX1JFU1VMVChbJGx0X3NoZWxsX2FwcGVuZF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJ10pCisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKK19MVF9ERUNMKFtdLCBbbHRfdW5zZXRdLCBbMF0sIFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiXSlkbmwKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKK19MVF9ERUNMKFtTUDJOTF0sIFtsdF9TUDJOTF0sIFsxXSwgW3R1cm4gc3BhY2VzIGludG8gbmV3bGluZXNdKWRubAorX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCitdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisKKworIyBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFIChGVU5DTkFNRSwgUkVQTEFDRU1FTlQtQk9EWSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEluIGAkY2ZnZmlsZScsIGxvb2sgZm9yIGZ1bmN0aW9uIEZVTkNOQU1FIGRlbGltaXRlZCBieSBgXkZVTkNOQU1FICgpJCcgYW5kCisjICdefSBGVU5DTkFNRSAnLCBhbmQgcmVwbGFjZSBpdHMgYm9keSB3aXRoIFJFUExBQ0VNRU5ULUJPRFkuCittNF9kZWZ1bihbX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRV0sCitbZG5sIHsKK3NlZCAtZSAnL14kMSAoKSQvLC9efSAjICQxIC9jXAorJDEgKClcCit7XAorbTRfYnBhdHN1YnN0cyhbJDJdLCBbJF0sIFtcXF0sIFteXChbCSBdXCldLCBbXFxcMV0pCit9ICMgRXh0ZW5kZWQtc2hlbGwgJDEgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK10pCisKKworIyBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVwbGFjZSBleGlzdGluZyBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbnMgb2Ygc2V2ZXJhbCBzaGVsbCBmdW5jdGlvbnMgd2l0aAorIyBlcXVpdmFsZW50IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aG9zZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLi4KK200X2RlZnVuKFtfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TXSwKK1tpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV0sIFtkbmwKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisgICAgZXNhY10pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19iYXNlbmFtZV0sIFtkbmwKKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lXSwgW2RubAorICAgIGNhc2UgJHsxfSBpbgorICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgICBlc2FjCisgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zdHJpcG5hbWVdLCBbZG5sCisgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1dKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfbG9uZ19vcHRdLCBbZG5sCisgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9CisgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fV0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9zaG9ydF9vcHRdLCBbZG5sCisgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P30KKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2xvMm9dLCBbZG5sCisgICAgY2FzZSAkezF9IGluCisgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CisgICAgZXNhY10pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY194Zm9ybV0sIFsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb10pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcml0aF0sIFsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSldKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbGVuXSwgWyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1dKQorZmkKKworaWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF0sIFsgICAgZXZhbCAiJHsxfSs9XFwkezJ9Il0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRfcXVvdGVkXSwgW2RubAorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCitkbmwgbTQgZXhwYW5zaW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHRoZW4gdGhlIHNoZWxsIGV2YWwgdHVybnMgdGhhdCBpbnRvIFwKKyAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Il0pCisKKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK2Vsc2UKKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK2ZpCisKK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisgIEFDX01TR19XQVJOKFtVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlXSkKK2ZpCitdKQorCisjIF9MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERldGVybWluZSB3aGljaCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKKyMgZnVuY190b19ob3N0X2ZpbGUgKGFuZCwgaW1wbGljaXRseSwgYnkgZnVuY190b19ob3N0X3BhdGgpLiAgVGhlc2UgYXJlIG5lZWRlZAorIyBmb3IgY2VydGFpbiBjcm9zcy1jb21waWxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuYXRpdmUgbWluZ3cuCittNF9kZWZ1bihbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfdG9faG9zdF9maWxlX2NtZCwKK1tjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqLSotY3lnd2luKiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgOzsKK2VzYWMKK10pCit0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCitBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0pCitfTFRfREVDTChbdG9faG9zdF9maWxlX2NtZF0sIFtsdF9jdl90b19ob3N0X2ZpbGVfY21kXSwKKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSlkbmwKKworQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl90b190b29sX2ZpbGVfY21kLAorWyNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7Citlc2FjCitdKQordG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdKQorX0xUX0RFQ0woW3RvX3Rvb2xfZmlsZV9jbWRdLCBbbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0sCisgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0XSlkbmwKK10pIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9sdG9wdGlvbnMubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2x0b3B0aW9ucy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDlhY2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9sdG9wdGlvbnMubTQKQEAgLTAsMCArMSwzODQgQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjICAgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNyBsdG9wdGlvbnMubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9QVElPTlNfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworCisjIF9MVF9NQU5HTEVfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9PUFRJT05dLAorW1tfTFRfT1BUSU9OX11tNF9icGF0c3Vic3QoJDFfXyQyLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorCisKKyMgX0xUX1NFVF9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE9QVElPTi1OQU1FIGZvciBtYWNybyBNQUNSTy1OQU1FLCBhbmQgaWYgdGhlcmUgaXMgYQorIyBtYXRjaGluZyBoYW5kbGVyIGRlZmluZWQsIGRpc3BhdGNoIHRvIGl0LiAgT3RoZXIgT1BUSU9OLU5BTUVzIGFyZQorIyBzYXZlZCBhcyBhIGZsYWcuCittNF9kZWZpbmUoW19MVF9TRVRfT1BUSU9OXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSkpZG5sCittNF9pZmRlZihfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgICAgICBfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgIFttNF93YXJuaW5nKFtVbmtub3duICQxIG9wdGlvbiBgJDInXSldKVtdZG5sCitdKQorCisKKyMgX0xUX0lGX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLVNFVCBpZiBPUFRJT04gaXMgc2V0LCBJRi1OT1QtU0VUIG90aGVyd2lzZS4KK200X2RlZmluZShbX0xUX0lGX09QVElPTl0sCitbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSksIFskM10sIFskNF0pXSkKKworCisjIF9MVF9VTkxFU1NfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCwgSUYtTk9ULVNFVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLU5PVC1TRVQgdW5sZXNzIGFsbCBvcHRpb25zIGluIE9QVElPTi1MSVNUIGZvciBNQUNSTy1OQU1FCisjIGFyZSBzZXQuCittNF9kZWZpbmUoW19MVF9VTkxFU1NfT1BUSU9OU10sCitbbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisJICAgIFttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKSwKKwkJICAgICAgW200X2RlZmluZShbJDBfZm91bmRdKV0pXSlbXWRubAorbTRfaWZkZWYoWyQwX2ZvdW5kXSwgW200X3VuZGVmaW5lKFskMF9mb3VuZF0pXSwgWyQzCitdKVtdZG5sCitdKQorCisKKyMgX0xUX1NFVF9PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9QVElPTi1MSVNUIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgTGlidG9vbCBvcHRpb25zIGFzc29jaWF0ZWQKKyMgd2l0aCBNQUNSTy1OQU1FLiAgSWYgYW55IE9QVElPTiBoYXMgYSBtYXRjaGluZyBoYW5kbGVyIGRlY2xhcmVkIHdpdGgKKyMgTFRfT1BUSU9OX0RFRklORSwgZGlzcGF0Y2ggdG8gdGhhdCBtYWNybzsgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0CisjIHRoZSB1bmtub3duIG9wdGlvbiBhbmQgZXhpdC4KK200X2RlZnVuKFtfTFRfU0VUX09QVElPTlNdLAorWyMgU2V0IG9wdGlvbnMKK200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorICAgIFtfTFRfU0VUX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKV0pCisKK200X2lmKFskMV0sW0xUX0lOSVRdLFsKKyAgZG5sCisgIGRubCBTaW1wbHkgc2V0IHNvbWUgZGVmYXVsdCB2YWx1ZXMgKGkuZSBvZmYpIGlmIGJvb2xlYW4gb3B0aW9ucyB3ZXJlIG5vdAorICBkbmwgc3BlY2lmaWVkOgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49bm8KKyAgXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sIFtlbmFibGVfd2luMzJfZGxsPW5vCisgIF0pCisgIGRubAorICBkbmwgSWYgbm8gcmVmZXJlbmNlIHdhcyBtYWRlIHRvIHZhcmlvdXMgcGFpcnMgb2Ygb3Bwb3Npbmcgb3B0aW9ucywgdGhlbgorICBkbmwgd2UgcnVuIHRoZSBkZWZhdWx0IG1vZGUgaGFuZGxlciBmb3IgdGhlIHBhaXIuICBGb3IgZXhhbXBsZSwgaWYgbmVpdGhlcgorICBkbmwgYHNoYXJlZCcgbm9yIGBkaXNhYmxlLXNoYXJlZCcgd2FzIHBhc3NlZCwgd2UgZW5hYmxlIGJ1aWxkaW5nIG9mIHNoYXJlZAorICBkbmwgYXJjaGl2ZXMgYnkgZGVmYXVsdDoKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3NoYXJlZCBkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzdGF0aWMgZGlzYWJsZS1zdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUNdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbcGljLW9ubHkgbm8tcGljXSwgW19MVF9XSVRIX1BJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGwgZGlzYWJsZS1mYXN0LWluc3RhbGxdLAorICAJCSAgIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pCisgIF0pCitdKSMgX0xUX1NFVF9PUFRJT05TCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWNyb3MgdG8gaGFuZGxlIExUX0lOSVQgb3B0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIF9MVF9NQU5HTEVfREVGVU4oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9NQU5HTEVfREVGVU5dLAorW1tfTFRfT1BUSU9OX0RFRlVOX11tNF9icGF0c3Vic3QobTRfdG91cHBlcihbJDFfXyQyXSksIFtbXkEtWjAtOV9dXSwgW19dKV0pCisKKworIyBMVF9PUFRJT05fREVGSU5FKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBDT0RFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtMVF9PUFRJT05fREVGSU5FXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwgWyQzXSlbXWRubAorXSkjIExUX09QVElPTl9ERUZJTkUKKworCisjIGRsb3BlbgorIyAtLS0tLS0KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49eWVzCitdKQorCitBVV9ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rsb3Blbl0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgZGxvcGVuJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwgW10pCisKKworIyB3aW4zMi1kbGwKKyMgLS0tLS0tLS0tCisjIERlY2xhcmUgcGFja2FnZSBzdXBwb3J0IGZvciBidWlsZGluZyB3aW4zMiBkbGwncy4KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwKK1tlbmFibGVfd2luMzJfZGxsPXllcworCitjYXNlICRob3N0IGluCisqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotY2VnY2MqKQorICBBQ19DSEVDS19UT09MKEFTLCBhcywgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCisgIDs7Citlc2FjCisKK3Rlc3QgLXogIiRBUyIgJiYgQVM9YXMKK19MVF9ERUNMKFtdLCBbQVNdLCAgICAgIFsxXSwgW0Fzc2VtYmxlciBwcm9ncmFtXSlkbmwKKwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtPYmplY3QgZHVtcGVyIHByb2dyYW1dKWRubAorXSkjIHdpbjMyLWRsbAorCitBVV9ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgd2luMzItZGxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwgW10pCisKKworIyBfTFRfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZywgYW5kIHN1cHBvcnRzIHRoZSBgc2hhcmVkJyBhbmQKKyMgYGRpc2FibGUtc2hhcmVkJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW3NoYXJlZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zaGFyZWRAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc2hhcmVkPV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX2xpYnRvb2xfbGlic10sIFtlbmFibGVfc2hhcmVkXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NIQVJFRAorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3NoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TSEFSRURdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc2hhcmVkXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zaGFyZWRdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCBbQUNfRU5BQkxFX1NIQVJFRCgkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX1NUQVRJQyhbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBzdGF0aWMnIGFuZAorIyBgZGlzYWJsZS1zdGF0aWMnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ10sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc3RhdGljXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN0YXRpY0A8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzdGF0aWMgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3N0YXRpYz1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVCkKKworICAgIF9MVF9ERUNMKFtidWlsZF9vbGRfbGlic10sIFtlbmFibGVfc3RhdGljXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NUQVRJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3N0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc3RhdGljXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zdGF0aWNdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCBbQUNfRU5BQkxFX1NUQVRJQygkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBmYXN0LWluc3RhbGwnCisjIGFuZCBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbZmFzdC1pbnN0YWxsXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZhc3QtaW5zdGFsbEA8OkA9UEtHU0A6PkBdLAorICAgIFtvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVCkKKworX0xUX0RFQ0woW2Zhc3RfaW5zdGFsbF0sIFtlbmFibGVfZmFzdF9pbnN0YWxsXSwgWzBdLAorCSBbV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uXSlkbmwKK10pIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTAorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQVVfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbZmFzdC1pbnN0YWxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAordGhlIGBmYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK0FVX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1mYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGRpc2FibGUtZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKKworCisjIF9MVF9XSVRIX1BJQyhbTU9ERV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHBpYy1vbmx5JyBhbmQgYG5vLXBpYycKKyMgTFRfSU5JVCBvcHRpb25zLgorIyBNT0RFIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGJvdGgnLgorbTRfZGVmaW5lKFtfTFRfV0lUSF9QSUNdLAorW0FDX0FSR19XSVRIKFtwaWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBpY0A8OkA9UEtHU0A6PkBdLAorCVt0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBAPDpAZGVmYXVsdD11c2UgYm90aEA6PkBdKV0sCisgICAgW2x0X3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkd2l0aHZhbCBpbgorICAgIHllc3xubykgcGljX21vZGU9JHdpdGh2YWwgOzsKKyAgICAqKQorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgbHRfcGtnIGluICR3aXRodmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkbHRfcGtnIiA9ICJYJGx0X3AiOyB0aGVuCisJICBwaWNfbW9kZT15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtwaWNfbW9kZT1kZWZhdWx0XSkKKwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1tNF9kZWZhdWx0KFskMV0sIFtkZWZhdWx0XSkKKworX0xUX0RFQ0woW10sIFtwaWNfbW9kZV0sIFswXSwgW1doYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkXSlkbmwKK10pIyBfTFRfV0lUSF9QSUMKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtwaWMtb25seV0sIFtfTFRfV0lUSF9QSUMoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbbm8tcGljXSwgW19MVF9XSVRIX1BJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWU6CitBVV9ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtwaWMtb25seV0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgcGljLW9ubHknIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwgW10pCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMVERMX0lOSVQgT3B0aW9ucyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbbm9ucmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbbm9ucmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3JlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3JlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtzdWJwcm9qZWN0XSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbc3VicHJvamVjdF0pXSkKKworbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbaW5zdGFsbGFibGVdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtpbnN0YWxsYWJsZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtjb252ZW5pZW5jZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2NvbnZlbmllbmNlXSldKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9sdHN1Z2FyLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9sdHN1Z2FyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMDBhMDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2x0c3VnYXIubTQKQEAgLTAsMCArMSwxMjMgQEAKKyMgbHRzdWdhci5tNCAtLSBsaWJ0b29sIG00IGJhc2UgbGF5ZXIuICAgICAgICAgICAgICAgICAgICAgICAgIC0qLUF1dG9jb25mLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2IGx0c3VnYXIubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVFNVR0FSX1ZFUlNJT05dLCBbbTRfaWYoWzAuMV0pXSkKKworCisjIGx0X2pvaW4oU0VQLCBBUkcxLCBbQVJHMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLCBvbWl0dGluZyBbXSBhcmd1bWVudHMgYW5kIHRoZWlyCisjIGFzc29jaWF0ZWQgc2VwYXJhdG9yLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfam9pbiBmcm9tIEF1dG9jb25mIDIuNjIsIHNpbmNlIGFsbCBlYXJsaWVyCisjIHZlcnNpb25zIGluIG00c3VnYXIgaGFkIGJ1Z3MuCittNF9kZWZpbmUoW2x0X2pvaW5dLAorW200X2lmKFskI10sIFsxXSwgW10sCisgICAgICAgWyQjXSwgWzJdLCBbWyQyXV0sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMl1fXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKK200X2RlZmluZShbX2x0X2pvaW5dLAorW200X2lmKFskIyQyXSwgWzJdLCBbXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQxJDJdXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKKworCisjIGx0X2NhcihMSVNUKQorIyBsdF9jZHIoTElTVCkKKyMgLS0tLS0tLS0tLS0tCisjIE1hbmlwdWxhdGUgbTQgbGlzdHMuCisjIFRoZXNlIG1hY3JvcyBhcmUgbmVjZXNzYXJ5IGFzIGxvbmcgYXMgd2lsbCBzdGlsbCBuZWVkIHRvIHN1cHBvcnQKKyMgQXV0b2NvbmYtMi41OSB3aGljaCBxdW90ZXMgZGlmZmVyZW50bHkuCittNF9kZWZpbmUoW2x0X2Nhcl0sIFtbJDFdXSkKK200X2RlZmluZShbbHRfY2RyXSwKK1ttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXSldLAorICAgICAgIFskI10sIDEsIFtdLAorICAgICAgIFttNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pXSkKK200X2RlZmluZShbbHRfdW5xdW90ZV0sICQxKQorCisKKyMgbHRfYXBwZW5kKE1BQ1JPLU5BTUUsIFNUUklORywgW1NFUEFSQVRPUl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWRlZmluZSBNQUNSTy1OQU1FIHRvIGhvbGQgaXRzIGZvcm1lciBjb250ZW50IHBsdXMgYFNFUEFSQVRPUidgU1RSSU5HJy4KKyMgTm90ZSB0aGF0IG5laXRoZXIgU0VQQVJBVE9SIG5vciBTVFJJTkcgYXJlIGV4cGFuZGVkOyB0aGV5IGFyZSBhcHBlbmRlZAorIyB0byBNQUNSTy1OQU1FIGFzIGlzIChsZWF2aW5nIHRoZSBleHBhbnNpb24gZm9yIHdoZW4gTUFDUk8tTkFNRSBpcyBpbnZva2VkKS4KKyMgTm8gU0VQQVJBVE9SIGlzIG91dHB1dCBpZiBNQUNSTy1OQU1FIHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZCAoZGlmZmVyZW50CisjIHRoYW4gZGVmaW5lZCBhbmQgZW1wdHkpLgorIworIyBUaGlzIG1hY3JvIGlzIG5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBBdXRvY29uZiAyLjYyLCBzaW5jZSBlYXJsaWVyCisjIHZlcnNpb25zIG9mIG00c3VnYXIgbWlzdGFrZW5seSBleHBhbmRlZCBTRVBBUkFUT1IgYnV0IG5vdCBTVFJJTkcuCittNF9kZWZpbmUoW2x0X2FwcGVuZF0sCitbbTRfZGVmaW5lKFskMV0sCisJICAgbTRfaWZkZWYoWyQxXSwgW200X2RlZm4oWyQxXSlbJDNdXSlbJDJdKV0pCisKKworCisjIGx0X2NvbWJpbmUoU0VQLCBQUkVGSVgtTElTVCwgSU5GSVgsIFNVRkZJWDEsIFtTVUZGSVgyLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGEgU0VQIGRlbGltaXRlZCBsaXN0IG9mIGFsbCBwYWlyZWQgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIG9mCisjIFBSRUZJWC1MSVNUIHdpdGggU1VGRklYMSB0aHJvdWdoIFNVRkZJWG4uICBFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QKKyMgaGFzIHRoZSBmb3JtIFBSRUZJWG1JTkZJWFNVRkZJWG4uCisjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9jb21iaW5lIGFkZGVkIGluIEF1dG9jb25mIDIuNjIuCittNF9kZWZpbmUoW2x0X2NvbWJpbmVdLAorW200X2lmKG00X2V2YWwoWyQjID4gM10pLCBbMV0sCisgICAgICAgW200X3B1c2hkZWYoW19MdF9zZXBdLCBbbTRfZGVmaW5lKFtfTHRfc2VwXSwgbTRfZGVmbihbbHRfY2FyXSkpXSldXWRubAorW1ttNF9mb3JlYWNoKFtfTHRfcHJlZml4XSwgWyQyXSwKKwkgICAgIFttNF9mb3JlYWNoKFtfTHRfc3VmZml4XSwKKwkJXW00X2RxdW90ZShtNF9kcXVvdGUobTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSkpKVssCisJW19MdF9zZXAoWyQxXSlbXW00X2RlZm4oW19MdF9wcmVmaXhdKVskM11tNF9kZWZuKFtfTHRfc3VmZml4XSldKV0pXSldKQorCisKKyMgbHRfaWZfYXBwZW5kX3VuaXEoTUFDUk8tTkFNRSwgVkFSTkFNRSwgW1NFUEFSQVRPUl0sIFtVTklRXSwgW05PVC1VTklRXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWZmIE1BQ1JPLU5BTUUgZG9lcyBub3QgeWV0IGNvbnRhaW4gVkFSTkFNRSwgdGhlbiBhcHBlbmQgaXQgKGRlbGltaXRlZAorIyBieSBTRVBBUkFUT1IgaWYgc3VwcGxpZWQpIGFuZCBleHBhbmQgVU5JUSwgZWxzZSBOT1QtVU5JUS4KK200X2RlZmluZShbbHRfaWZfYXBwZW5kX3VuaXFdLAorW200X2lmZGVmKFskMV0sCisJICBbbTRfaWYobTRfaW5kZXgoWyQzXW00X2RlZm4oWyQxXSlbJDNdLCBbJDMkMiQzXSksIFstMV0sCisJCSBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdLAorCQkgWyQ1XSldLAorCSAgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSldKQorCisKKyMgbHRfZGljdF9hZGQoRElDVCwgS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRdLAorW200X2RlZmluZShbJDEoJDIpXSwgWyQzXSldKQorCisKKyMgbHRfZGljdF9hZGRfc3Via2V5KERJQ1QsIEtFWSwgU1VCS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRfc3Via2V5XSwKK1ttNF9kZWZpbmUoWyQxKCQyOiQzKV0sIFskNF0pXSkKKworCisjIGx0X2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZldGNoXSwKK1ttNF9pZnZhbChbJDNdLAorCW00X2lmZGVmKFskMSgkMjokMyldLCBbbTRfZGVmbihbJDEoJDI6JDMpXSldKSwKKyAgICBtNF9pZmRlZihbJDEoJDIpXSwgW200X2RlZm4oWyQxKCQyKV0pXSkpXSkKKworCisjIGx0X2lmX2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSwgVkFMVUUsIElGLVRSVUUsIFtJRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2lmX2RpY3RfZmV0Y2hdLAorW200X2lmKGx0X2RpY3RfZmV0Y2goWyQxXSwgWyQyXSwgWyQzXSksIFskNF0sCisJWyQ1XSwKKyAgICBbJDZdKV0pCisKKworIyBsdF9kaWN0X2ZpbHRlcihESUNULCBbU1VCS0VZXSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBLRVksIFsuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZpbHRlcl0sCitbbTRfaWYoWyQ1XSwgW10sIFtdLAorICBbbHRfam9pbihtNF9xdW90ZShtNF9kZWZhdWx0KFskNF0sIFtbLCBdXSkpLAorICAgICAgICAgICBsdF91bnF1b3RlKG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9mb3JlYWNoKF9MdF9rZXksIGx0X2NhcihbbTRfc2hpZnRuKDQsICRAKV0pLAorCQkgICAgICBbbHRfaWZfZGljdF9mZXRjaChbJDFdLCBfTHRfa2V5LCBbJDJdLCBbJDNdLCBbX0x0X2tleSBdKV0pKSkpKV0pW11kbmwKK10pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2x0dmVyc2lvbi5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbHR2ZXJzaW9uLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTg2MDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2x0dmVyc2lvbi5tNApAQCAtMCwwICsxLDIzIEBACisjIGx0dmVyc2lvbi5tNCAtLSB2ZXJzaW9uIG51bWJlcnMJCQktKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBzZXJpYWwgMzMzNyBsdHZlcnNpb24ubTQKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKworbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40LjJdKQorbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzMzN10pCisKK0FDX0RFRlVOKFtMVFZFUlNJT05fVkVSU0lPTl0sCitbbWFjcm9fdmVyc2lvbj0nMi40LjInCittYWNyb19yZXZpc2lvbj0nMS4zMzM3JworX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCitfTFRfREVDTCgsIG1hY3JvX3JldmlzaW9uLCAwKQorXSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbHR+b2Jzb2xldGUubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2x0fm9ic29sZXRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzNkYTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2x0fm9ic29sZXRlLm00CkBAIC0wLDAgKzEsOTggQEAKKyMgbHR+b2Jzb2xldGUubTQgLS0gYWNsb2NhbCBzYXRpc2Z5aW5nIG9ic29sZXRlIGRlZmluaXRpb25zLiAgICAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNSBsdH5vYnNvbGV0ZS5tNAorCisjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KKyMKKyMgSW4gdGhlIHBhc3QgbGlidG9vbC5tNCBoYXMgcHJvdmlkZWQgbWFjcm9zIHZpYSBBQ19ERUZVTiAob3IgQVVfREVGVU4pCisjIHdoaWNoIGhhdmUgbGF0ZXIgYmVlbiBjaGFuZ2VkIHRvIG00X2RlZmluZSBhcyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZQorIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgorIworIyBUaGUgdHJvdWJsZSBpcywgYWNsb2NhbCBpcyBhIGJpdCB0aGljay4gIEl0J2xsIHNlZSB0aGUgb2xkIEFDX0RFRlVOCisjIGluIC91c3Ivc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGFuZCByZW1lbWJlciBpdCwgdGhlbiB3aGVuIGl0IHNlZXMgdXMKKyMgdXNpbmcgYSBtYWNybyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gb3VyIGxvY2FsIG00L2xpYnRvb2wubTQgaXQnbGwKKyMgcHVsbCB0aGUgb2xkIGxpYnRvb2wubTQgaW4gKGl0IGRvZXNuJ3Qgc2VlIG91ciBzaGlueSBuZXcgbTRfZGVmaW5lCisjIGFuZCBkb2Vzbid0IGtub3cgYWJvdXQgQXV0b2NvbmYgbWFjcm9zIGF0IGFsbC4pCisjCisjIFNvIHdlIHByb3ZpZGUgdGhpcyBmaWxlLCB3aGljaCBoYXMgYSBzaWxseSBmaWxlbmFtZSBzbyBpdCdzIGFsd2F5cworIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKKyMgQUNfREVGVU5zIGl0IHdhbnRzLCBidXQgd2hlbiBtNCBwcm9jZXNzZXMgaXQsIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcKKyMgYmVjYXVzZSB0aG9zZSBtYWNyb3MgYWxyZWFkeSBleGlzdCwgb3Igd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4gCisjCisjIEFueXRpbWUgd2Ugd2l0aGRyYXcgYW4gQUNfREVGVU4gb3IgQVVfREVGVU4sIHJlbWVtYmVyIHRvIGFkZCBpdCBoZXJlLgorIyBZZXMsIHRoYXQgbWVhbnMgZXZlcnkgbmFtZSBvbmNlIHRha2VuIHdpbGwgbmVlZCB0byByZW1haW4gaGVyZSB1bnRpbAorIyB3ZSBnaXZlIHVwIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyBiZWZvcmUgMS43LCBhdCB3aGljaCBwb2ludAorIyB3ZSBuZWVkIHRvIGtlZXAgb25seSB0aG9zZSBuYW1lcyB3aGljaCB3ZSBzdGlsbCByZWZlciB0by4KKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9CU09MRVRFX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKK200X2lmbmRlZihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dKV0pCittNF9pZm5kZWYoW0FDX1BST0dfRUdSRVBdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0VHUkVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TSEVMTF9JTklUXSwJCVtBQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdLAlbQUNfREVGVU4oW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0xUTUFJTl0sCQlbQUNfREVGVU4oW19MVF9QUk9HX0xUTUFJTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR1ZBUl0sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdWQVJdKV0pCittNF9pZm5kZWYoW0FDX0xURExfRU5BQkxFX0lOU1RBTExdLAlbQUNfREVGVU4oW0FDX0xURExfRU5BQkxFX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW0FDX0xURExfUFJFT1BFTl0sCQlbQUNfREVGVU4oW0FDX0xURExfUFJFT1BFTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19DT01QSUxFUl0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19DT01QSUxFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xPQ0tdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTE9DS10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX09MRF9BUkNISVZFXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSwJW0FDX0RFRlVOKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MVERMX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0pXSkKK200X2lmbmRlZihbQUNfUEFUSF9NQUdJQ10sCQlbQUNfREVGVU4oW0FDX1BBVEhfTUFHSUNdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfR05VXSwJCVtBQ19ERUZVTihbQUNfUFJPR19MRF9HTlVdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAlbQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddKV0pCittNF9pZm5kZWYoW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSwJW0FDX0RFRlVOKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0xUX0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW0xUX0FDX1BST0dfU0VEXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdKV0pCittNF9pZm5kZWYoW19MVF9DQ19CQVNFTkFNRV0sCQlbQUNfREVGVU4oW19MVF9DQ19CQVNFTkFNRV0pXSkKK200X2lmbmRlZihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwJW0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19BQ19QUk9HX0xJQlRPT0xdLAkJW0FDX0RFRlVOKFtfQUNfUFJPR19MSUJUT09MXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NFVFVQXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TRVRVUF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0NIRUNLX0RMRkNOXSwJCVtBQ19ERUZVTihbX0xUX0FDX0NIRUNLX0RMRkNOXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UQUdDT05GSUddLAkJW0FDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3XSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0NPTkZJR10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfRklMRV9MVERMTF9DXSwJW0FDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSldKQorbTRfaWZuZGVmKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sCVtBQ19ERUZVTihbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0NYWENQUF0sCQlbQUNfREVGVU4oW19MVF9BQ19QUk9HX0NYWENQUF0pXSkKK200X2lmbmRlZihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAlbQUNfREVGVU4oW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0Y3N10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0Y3N10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRkNdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19GQ10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfQ1hYXSldKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfY292ZXJhZ2UubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV9jb3ZlcmFnZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDA2NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfY292ZXJhZ2UubTQKQEAgLTAsMCArMSwxMDcgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYSBHTlUgYXV0b2NvbmYgTTQtc3R5bGUgbWFjcm8gdGhhdCBhZGRzIGFuCisjICAgICAgLS1lbmFibGUtY292ZXJhZ2UgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGhlIHBhY2thZ2UgYW5kCisjICAgICAgY29udHJvbHMgd2hldGhlciB0aGUgcGFja2FnZSB3aWxsIGJlIGJ1aWx0IGZvciBjb2RlIGNvdmVyYWdlLgorIworCisjCisjIE5MX0VOQUJMRV9DT1ZFUkFHRShkZWZhdWx0KQorIworIyAgIGRlZmF1bHQgLSBXaGV0aGVyIHRoZSBvcHRpb24gc2hvdWxkIGJlIGVuYWJsZWQgKHllcykgb3IgZGlzYWJsZWQgKG5vKQorIyAgICAgICAgICAgICBieSBkZWZhdWx0LgorIworIyBBZGRzIGFuIC0tZW5hYmxlLWNvdmVyYWdlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZSBwYWNrYWdlIHdpdGggYQorIyBkZWZhdWx0IHZhbHVlIG9mICdkZWZhdWx0JyAoc2hvdWxkIGJlIGVpdGhlciAnbm8nIG9yICd5ZXMnKSBhbmQgY29udHJvbHMKKyMgd2hldGhlciB0aGUgcGFja2FnZSB3aWxsIGJlIGJ1aWx0IHdpdGggb3Igd2l0aG91dCBjb2RlIGNvdmVyYWdlLgorIworIyBUaGUgdmFsdWUgJ25sX2N2X2J1aWxkX2NvdmVyYWdlJyB3aWxsIGJlIHNldCB0byB0aGUgcmVzdWx0LiBJbgorIyBhZGRpdGlvbiwgTkxfQ09WRVJBR0VfQ1BQRkxBR1MgYW5kIE5MX0NPVkVSQUdFX0xERkxBR1Mgd2lsbCBiZSBzZXQKKyMgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyB0byBwYXNzIHRvIHRoZSBjb21waWxlciBhbmQgbGlua2VyLAorIyByZXNwZWN0aXZlbHkuCisjCisjIE5PVEU6IFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgYXQgcHJlc2VudCBmb3IgR0NDIG9yIEdDQy1jb21wYXRpYmxlCisjICAgICAgIHRvb2xjaGFpbnMuCisjCisjIE5PVEU6IFRoZSBiZWhhdmlvciBvZiB0aGlzIGlzIGluZmx1ZW5jZWQgYnkgbmxfY3ZfYnVpbGRfb3B0aW1pemVkIGZyb20KKyMgICAgICAgTkxfRElTQUJMRV9PUFRJTUlaQVRJT04KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtOTF9FTkFCTEVfQ09WRVJBR0VdLAorWworICAgICMgQ2hlY2sgd2hldGhlciBvciBub3QgYSBkZWZhdWx0IHZhbHVlIGhhcyBiZWVuIHBhc3NlZCBpbi4KKworICAgIG00X2Nhc2UoWyQxXSwKKyAgICAgICAgW3llc10sW10sCisgICAgICAgIFtub10sW10sCisgICAgICAgIFttNF9mYXRhbChbJDA6IGludmFsaWQgZGVmYXVsdCB2YWx1ZSAnJDEnOyBtdXN0IGJlICd5ZXMnIG9yICdubyddKV0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0byBidWlsZCBjb2RlLWNvdmVyYWdlIGluc3RhbmNlcyBvZiBwcm9ncmFtcyBhbmQgbGlicmFyaWVzXSwKKyAgICAgICAgbmxfY3ZfYnVpbGRfY292ZXJhZ2UsCisgICAgICAgIFsKKyAgICAgICAgICAgIEFDX0FSR19FTkFCTEUoY292ZXJhZ2UsCisgICAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jb3ZlcmFnZV0sW0VuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBjb2RlLWNvdmVyYWdlIGluc3RhbmNlcyBAPDpAZGVmYXVsdD0kMUA6PkAuXSldLAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbiAKKworICAgICAgICAgICAgICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBubF9jdl9idWlsZF9jb3ZlcmFnZT0ke2VuYWJsZXZhbH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJHtubF9jdl9idWlsZF9vcHRpbWl6ZWR9IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtib3RoIC0tZW5hYmxlLW9wdGltaXphdGlvbiBhbmQgLS1lbmFibGUtY292ZXJhZ2UgY2Fubm90IHVzZWQuIFBsZWFzZSwgY2hvb3NlIG9uZSBvciB0aGUgb3RoZXIgdG8gZW5hYmxlLl0pCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtY292ZXJhZ2VdKQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiR7bmxfY3ZfYnVpbGRfb3B0aW1pemVkfSIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1dBUk4oWy0tZW5hYmxlLW9wdGltaXphdGlvbiB3YXMgc3BlY2lmaWVkLCBjb3ZlcmFnZSBkaXNhYmxlZF0pCisgICAgICAgICAgICAgICAgICAgICAgICBubF9jdl9idWlsZF9jb3ZlcmFnZT1ubworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX2NvdmVyYWdlPSQxCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBdKQorCisgICAgICAgICAgICBpZiB0ZXN0ICIke25sX2N2X2J1aWxkX2NvdmVyYWdlfSIgPSAieWVzIjsgdGhlbiAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiR7R0NDfSIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtHQ0Mgb3IgYSBHQ0MtY29tcGF0aWJsZSB0b29sY2hhaW4gaXMgcmVxdWlyZWQgZm9yIC0tZW5hYmxlLWNvdmVyYWdlXSkKKworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgTkxfQ09WRVJBR0VfQ1BQRkxBR1M9Ii0tY292ZXJhZ2UiCisgICAgICAgICAgICAgICAgICAgIE5MX0NPVkVSQUdFX0xERkxBR1M9Ii1sZ2NvdiIgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgIF0pCitdKQorCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX2NvdmVyYWdlX3JlcG9ydGluZy5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX2NvdmVyYWdlX3JlcG9ydGluZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjBlM2E1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfY292ZXJhZ2VfcmVwb3J0aW5nLm00CkBAIC0wLDAgKzEsMTQ5IEBACisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGEgR05VIGF1dG9jb25mIE00LXN0eWxlIG1hY3JvIHRoYXQgYWRkcyBhbgorIyAgICAgIC0tZW5hYmxlLWNvdmVyYWdlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZSBwYWNrYWdlIGFuZAorIyAgICAgIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCBmb3IgY29kZSBjb3ZlcmFnZQorIyAgICAgIHJlcG9ydGluZywgdXNpbmcgdGhlIExDT1YgcGFja2FnZS4KKyMKKworIworIyBOTF9FTkFCTEVfQ09WRVJBR0VfUkVQT1JUUyhkZWZhdWx0KQorIworIyAgIGRlZmF1bHQgLSBXaGV0aGVyIHRoZSBvcHRpb24gc2hvdWxkIGJlIGF1dG9tYXRpYyAoYXV0byksIGVuYWJsZWQKKyMgICAgICAgICAgICAgKHllcyksIG9yIGRpc2FibGVkIChubykgYnkgZGVmYXVsdC4KKyMKKyMgQWRkcyBhbiAtLWVuYWJsZS1jb3ZlcmFnZS1yZXBvcnRzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZQorIyBwYWNrYWdlIHdpdGggYSBkZWZhdWx0IHZhbHVlIG9mICdkZWZhdWx0JyAoc2hvdWxkIGJlICdhdXRvJywgJ25vJyBvcgorIyAneWVzJykgYW5kIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCB3aXRoIG9yCisjIHdpdGhvdXQgY29kZSBjb3ZlcmFnZSByZXBvcnRzLCB1c2luZyB0aGUgTENPViBwYWNrYWdlLgorIworIyBUaGUgdmFsdWUgJ25sX2N2X2J1aWxkX2NvdmVyYWdlX3JlcG9ydHMnIHdpbGwgYmUgc2V0IHRvIHRoZSByZXN1bHQuIEluCisjIGFkZGl0aW9uLCBMQ09WIHdpbGwgYmUgc2V0IHRvIHRoZSBwYXRoIG9mIHRoZSAnbGNvdicgdG9vbCBhbmQgR0VOSFRNTCB3aWxsICBiZSBzZXQgdG8gdGhlIHBhdGggb2YgdGhlICdnZW5odG1sJyB0b29sLgorIworIyBOT1RFOiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBpcyBpbmZsdWVuY2VkIGJ5IG5sX2N2X2J1aWxkX2NvdmVyYWdlIGZyb20KKyMgICAgICAgTkxfRU5BQkxFX0NPVkVSQUdFLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW05MX0VOQUJMRV9DT1ZFUkFHRV9SRVBPUlRTXSwKK1sKKyAgICAjIENoZWNrIHdoZXRoZXIgb3Igbm90IGEgZGVmYXVsdCB2YWx1ZSBoYXMgYmVlbiBwYXNzZWQgaW4uCisKKyAgICBtNF9jYXNlKFskMV0sCisgICAgICAgIFthdXRvXSxbXSwKKyAgICAgICAgW3llc10sW10sCisgICAgICAgIFtub10sW10sCisgICAgICAgIFttNF9mYXRhbChbJDA6IGludmFsaWQgZGVmYXVsdCB2YWx1ZSAnJDEnOyBtdXN0IGJlICdhdXRvJywgJ3llcycgb3IgJ25vJ10pXSkKKworICAgICMgQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBsY292IGFuZCBnZW5odG1sLCByZXF1aXJlZAorICAgICMgdG8gYnVpbGQgYW5kIGdlbmVyYXRlIHRoZSBjb3ZlcmFnZSByZXBvcnRzLgorCisgICAgQUNfUEFUSF9QUk9HKExDT1YsIGxjb3YpCisgICAgQUNfUEFUSF9QUk9HKEdFTkhUTUwsIGdlbmh0bWwpCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0byBidWlsZCBncmFwaGljYWwgY29kZSBjb3ZlcmFnZSByZXBvcnRzXSwKKyAgICAgICAgbmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0cywKKyAgICAgICAgWworICAgICAgICAgICAgQUNfQVJHX0VOQUJMRShjb3ZlcmFnZS1yZXBvcnRzLAorICAgICAgICAgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY292ZXJhZ2UtcmVwb3J0c10sW0VuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBjb2RlIGNvdmVyYWdlIHJlcG9ydHMgKHJlcXVpcmVzIGxjb3YpICBAPDpAZGVmYXVsdD0kMUA6PkAuXSldLAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbiAKKworICAgICAgICAgICAgICAgICAgICBhdXRvfG5vfHllcykKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX2NvdmVyYWdlX3JlcG9ydHM9JHtlbmFibGV2YWx9CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1jb3ZlcmFnZV0pCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgbmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0cz0kMQorICAgICAgICAgICAgICAgIF0pCisKKyAgICAgICAgICAgICMgSWYgY292ZXJhZ2UgaXMgbm90IGVuYWJsZWQsIHRoZW4gY292ZXJhZ2UgcmVwb3J0cworICAgICAgICAgICAgIyBkZWZhdWx0cyB0byAnbm8nIGlmIGl0IGlzICdhdXRvJyBvciBmYWlscyBpZiBpdCBpcworICAgICAgICAgICAgIyAneWVzJy4gT3RoZXJ3aXNlLCBhdmFpbGFiaWxpdHkgb2YgbGNvdiBhbmQgZ2VuaHRtbAorICAgICAgICAgICAgIyBjb25kaXRpb24gYmVoYXZpb3IuIExhY2sgb2YgYXZhaWxhYmlsaXR5IGZvciAneWVzJworICAgICAgICAgICAgIyByZXN1bHRzIGluIGZhaWx1cmU7IGhvd2V2ZXIsIGZvciAnYXV0bycgdGhlbiBjb3ZlcmFnZQorICAgICAgICAgICAgIyByZXBvcnRzIGRlZmF1bHQgdG8gJ25vJy4KKworICAgICAgICAgICAgY2FzZSAiJHtubF9jdl9idWlsZF9jb3ZlcmFnZX0iIGluCisKKyAgICAgICAgICAgIG5vKQorICAgICAgICAgICAgICAgIGNhc2UgIiR7bmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0c30iIGluCisKKyAgICAgICAgICAgICAgICAgICAgYXV0bykKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX2NvdmVyYWdlX3JlcG9ydHM9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICB5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoWy0tZW5hYmxlLWNvdmVyYWdlIG11c3QgYmUgYXNzZXJ0ZWQgdG8gdXNlIC0tZW5hYmxlLWNvdmVyYWdlLXJlcG9ydHMuXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAgICAgbm8pCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgIHllcykKKyAgICAgICAgICAgICAgICBjYXNlICIke25sX2N2X2J1aWxkX2NvdmVyYWdlX3JlcG9ydHN9IiBpbgorCisgICAgICAgICAgICAgICAgICAgIGF1dG8pCisgICAgICAgICAgICAgICAgICAgICAgICAjIEJvdGggbGNvdiBhbmQgZ2VuaHRtbCBtdXN0IGV4aXN0IHRvIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgICAgICAgICAgIyBlbmFibGUgY292ZXJhZ2UgcmVwb3J0cy4KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCR7TENPVn0iID0gIngiIHx8IHRlc3QgIngke0dFTkhUTUx9IiA9ICJ4IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX2NvdmVyYWdlX3JlcG9ydHM9Im5vIgorCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0cz0ieWVzIgorCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICB5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAjIEJvdGggbGNvdiBhbmQgZ2VuaHRtbCBtdXN0IGV4aXN0IHRvIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgICAgICAgICAgIyBlbmFibGUgY292ZXJhZ2UgcmVwb3J0cy4gU2luY2UgdGhlIGRlZmF1bHQgb3IgdXNlcgorICAgICAgICAgICAgICAgICAgICAgICAgIyBhc2sgaXMgJ3llcycsIHdlIG11c3QgZmFpbCBpZiBsY292IG9yIGdlbmh0bWwgY2Fubm90CisgICAgICAgICAgICAgICAgICAgICAgICAjIGJlIGZvdW5kLgorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JHtMQ09WfSIgPSAieCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kICdsY292Jy4gWW91IG11c3QgaGF2ZSB0aGUgbGNvdiBwYWNrYWdlIGluc3RhbGxlZCB0byB1c2UgY292ZXJhZ2UgcmVwb3J0cy5dKQorCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHRlc3QgIngke0dFTkhUTUx9IiA9ICJ4IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgJ2dlbmh0bWwnLiBZb3UgbXVzdCBoYXZlIHRoZSBsY292IHBhY2thZ2UgaW5zdGFsbGVkIHRvIHVzZSBjb3ZlcmFnZSByZXBvcnRzLl0pCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgdGVzdCAiJHtubF9jdl9idWlsZF9jb3ZlcmFnZV9yZXBvcnRzfSIgPSAiYXV0byI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBubF9jdl9idWlsZF9jb3ZlcmFnZV9yZXBvcnRzPSJ5ZXMiCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgICAgIG5vKQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICBlc2FjCisgICAgXSkKK10pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV9kZWJ1Zy5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX2RlYnVnLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4M2Y0M2QKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV9kZWJ1Zy5tNApAQCAtMCwwICsxLDc5IEBACisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGEgR05VIGF1dG9jb25mIE00LXN0eWxlIG1hY3JvIHRoYXQgYWRkcyBhbgorIyAgICAgIC0tZW5hYmxlLWRlYnVnIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZSBwYWNrYWdlIGFuZCBjb250cm9scworIyAgICAgIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCBmb3IgZGVidWcgaW5zdGFuY2VzIG9mIHByb2dyYW1zCisjICAgICAgYW5kIGxpYnJhcmllcy4KKyMKKworIworIyBOTF9FTkFCTEVfREVCVUcoZGVmYXVsdCkKKyMKKyMgICBkZWZhdWx0IC0gV2hldGhlciB0aGUgb3B0aW9uIHNob3VsZCBiZSBlbmFibGVkICh5ZXMpIG9yIGRpc2FibGVkIChubykKKyMgICAgICAgICAgICAgYnkgZGVmYXVsdC4KKyMKKyMgQWRkcyBhbiAtLWVuYWJsZS1kZWJ1ZyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byB0aGUgcGFja2FnZSB3aXRoIGEKKyMgZGVmYXVsdCB2YWx1ZSBvZiAnZGVmYXVsdCcgKHNob3VsZCBiZSBlaXRoZXIgJ25vJyBvciAneWVzJykgYW5kIGNvbnRyb2xzCisjIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCB3aXRoIG9yIHdpdGhvdXQgLURERUJVRyBlbmFibGVkLgorIworIyBUaGUgdmFsdWUgJ25sX2N2X2J1aWxkX2RlYnVnJyB3aWxsIGJlIHNldCB0byB0aGUgcmVzdWx0LiBJbgorIyBhZGRpdGlvbiwgdGhlIGNvbnRlbnRzIG9mIENGTEFHUywgQ1hYRkxBR1MsIE9CSkNGTEFHUywgYW5kCisjIE9CSkNYWEZMQUdTIG1heSBiZSBhbHRlcmVkIGJ5IHRoZSB1c2Ugb2YgdGhpcyBtYWNybywgYWRkaW5nIC1EREVCVUcKKyMgaWYgdGhpcyBvcHRpb24gaXMgYXNzZXJ0ZWQuCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTkxfRU5BQkxFX0RFQlVHXSwKK1sKKyAgICAjIENoZWNrIHdoZXRoZXIgb3Igbm90IGEgZGVmYXVsdCB2YWx1ZSBoYXMgYmVlbiBwYXNzZWQgaW4uCisKKyAgICBtNF9jYXNlKFskMV0sCisgICAgICAgIFt5ZXNdLFtdLAorICAgICAgICBbbm9dLFtdLAorICAgICAgICBbbTRfZmF0YWwoWyQwOiBpbnZhbGlkIGRlZmF1bHQgdmFsdWUgJyQxJzsgbXVzdCBiZSAneWVzJyBvciAnbm8nXSldKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdG8gYnVpbGQgZGVidWcgaW5zdGFuY2VzIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXNdLAorICAgICAgICBubF9jdl9idWlsZF9kZWJ1ZywKKyAgICAgICAgWworICAgICAgICAgICAgQUNfQVJHX0VOQUJMRShkZWJ1ZywKKyAgICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRlYnVnXSxbRW5hYmxlIHRoZSBnZW5lcmF0aW9uIG9mIGRlYnVnIGluc3RhbmNlcyBAPDpAZGVmYXVsdD0kMUA6PkAuXSldLAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbiAKKworICAgICAgICAgICAgICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBubF9jdl9idWlsZF9kZWJ1Zz0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWRlYnVnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBubF9jdl9idWlsZF9kZWJ1Zz0kMQorICAgICAgICAgICAgICAgIF0pCisKKyAgICAgICAgICAgIGlmIHRlc3QgIiR7bmxfY3ZfYnVpbGRfZGVidWd9IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLURERUJVRyIKKyAgICAgICAgICAgICAgICBDWFhGTEFHUz0iJHtDWFhGTEFHU30gLURERUJVRyIKKyAgICAgICAgICAgICAgICBPQkpDRkxBR1M9IiR7T0JKQ0ZMQUdTfSAtRERFQlVHIgorICAgICAgICAgICAgICAgIE9CSkNYWEZMQUdTPSIke09CSkNYWEZMQUdTfSAtRERFQlVHIgorICAgICAgICAgICAgZmkKKyAgICBdKQorXSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX2RvY3MubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV9kb2NzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YjM1NjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV9kb2NzLm00CkBAIC0wLDAgKzEsMTE3IEBACisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGEgR05VIGF1dG9jb25mIE00LXN0eWxlIG1hY3JvIHRoYXQgYWRkcyBhbgorIyAgICAgIC0tZGlzYWJsZS1kb2NzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZSBwYWNrYWdlIGFuZCBjb250cm9scworIyAgICAgIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCB3aXRoIG9yIHdpdGhvdXQgZG9jdW1lbnRhdGlvbi4KKyMKKworIworIyBOTF9FTkFCTEVfRE9DUyhkZWZhdWx0LCBkb3RfZGVmYXVsdCkKKyMKKyMgICBkZWZhdWx0ICAgICAtIFdoZXRoZXIgdGhlIG9wdGlvbiBzaG91bGQgYmUgYXV0b21hdGljIChhdXRvKSwgZW5hYmxlZAorIyAgICAgICAgICAgICAgICAgKHllcyksIGRpc2FibGVkIChubykgYnkgZGVmYXVsdC4KKyMgICBkb3RfZGVmYXVsdCAtIFdoZXRoZXIgRG94eWdlbiBzaG91bGQgdXNlIChZRVMpIG9yIG5vdCB1c2UgKE5PKQorIyAgICAgICAgICAgICAgICAgR3JhcGhWaXogZG90LgorIworIyBBZGRzIGFuIC0tZGlzYWJsZS1kb2NzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZSBwYWNrYWdlIHdpdGggYQorIyBkZWZhdWx0IHZhbHVlIG9mICdkZWZhdWx0JyAoc2hvdWxkIGJlICdhdXRvJywgJ25vJyBvciAneWVzJykgYW5kCisjIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCB3aXRoIG9yIHdpdGhvdXQgRG94eWdlbi1iYXNlZAorIyBkb2N1bWVudGF0aW9uLgorIworIyBUaGUgdmFsdWUgJ25sX2N2X2J1aWxkX2RvY3MnIHdpbGwgYmUgc2V0IHRvIHRoZSByZXN1bHQuIEluIGFkZGl0aW9uOgorIworIyAgIERPWFlHRU4gICAgICAgICAtIFdpbGwgYmUgc2V0IHRvIHRoZSBwYXRoIG9mIHRoZSBEb3h5Z2VuIGV4ZWN1dGFibGUuCisjICAgRE9UICAgICAgICAgICAgIC0gV2lsbCBiZSBzZXQgdG8gdGhlIHBhdGggb2YgdGhlIEdyYXBoVml6IGRvdAorIyAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUuCisjICAgRE9YWUdFTl9VU0VfRE9UIC0gV2lsbCBiZSBzZXQgdG8gJ05PJyBvciAnWUVTJyBkZXBlbmRpbmcgb24gd2hldGhlcgorIyAgICAgICAgICAgICAgICAgICAgIEdyYXBoVml6IGRvdCBpcyBhdmFpbGFibGUuCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTkxfRU5BQkxFX0RPQ1NdLAorWworICAgICMgQ2hlY2sgd2hldGhlciBvciBub3QgdGhlICdkZWZhdWx0JyB2YWx1ZSBpcyBzYW5lLgorCisgICAgbTRfY2FzZShbJDFdLAorICAgICAgICBbYXV0b10sW10sCisgICAgICAgIFt5ZXNdLFtdLAorICAgICAgICBbbm9dLFtdLAorICAgICAgICBbbTRfZmF0YWwoWyQwOiBpbnZhbGlkIGRlZmF1bHQgdmFsdWUgJyQxJzsgbXVzdCBiZSAnYXV0bycsICd5ZXMnIG9yICdubyddKV0pCisKKyAgICAjIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSAnZG90X2RlZmF1bHQnIHZhbHVlIGlzIHNhbmUuCisKKyAgICBtNF9jYXNlKFskMl0sCisgICAgICAgIFtZRVNdLFtdLAorICAgICAgICBbTk9dLFtdLAorICAgICAgICBbbTRfZmF0YWwoWyQwOiBpbnZhbGlkIGRlZmF1bHQgdmFsdWUgJyQyJzsgbXVzdCBiZSAnWUVTJyBvciAnTk8nXSldKQorCisgICAgRE9YWUdFTl9VU0VfRE9UPSQyCisKKyAgICBBQ19BUkdfVkFSKERPWFlHRU4sIFtEb3h5Z2VuIGV4ZWN1dGFibGVdKQorICAgIEFDX0FSR19WQVIoRE9ULCAgICAgW0dyYXBoVml6ICdkb3QnIGV4ZWN1dGFibGUsIHdoaWNoIG1heSBiZSB1c2VkLCB3aGVuIHByZXNlbnQsIHRvIGdlbmVyYXRlIERveHlnZW4gY2xhc3MgZ3JhcGhzXSkKKworICAgIEFDX1BBVEhfUFJPRyhET1hZR0VOLCBkb3h5Z2VuKQorICAgIEFDX1BBVEhfUFJPRyhET1QsIGRvdCkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRvIGJ1aWxkIGRvY3VtZW50YXRpb25dLAorICAgICAgICBubF9jdl9idWlsZF9kb2NzLAorICAgICAgICBbCisJICAgIEFDX0FSR19FTkFCTEUoZG9jcywKKwkJW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZG9jc10sW0VuYWJsZSBidWlsZGluZyBkb2N1bWVudGF0aW9uIChyZXF1aXJlcyBEb3h5Z2VuKSBAPDpAZGVmYXVsdD0kMUA6PkAuXSldLAorCQlbCisJCSAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluIAorCisJCSAgICBhdXRvfG5vfHllcykKKwkJCW5sX2N2X2J1aWxkX2RvY3M9JHtlbmFibGV2YWx9CisJCQk7OworCisJCSAgICAqKQorCQkJQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLWRvY3NdKQorCQkJOzsKKworCQkgICAgZXNhYworCQldLAorCQlbbmxfY3ZfYnVpbGRfZG9jcz0kMV0pCisKKwkgICAgaWYgdGVzdCAieCR7RE9YWUdFTn0iICE9ICJ4IjsgdGhlbgorCQlubF9jdl9oYXZlX2RveHlnZW49eWVzCisJICAgIGVsc2UKKwkJbmxfY3ZfaGF2ZV9kb3h5Z2VuPW5vCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAiJHtubF9jdl9idWlsZF9kb2NzfSIgPSAiYXV0byI7IHRoZW4KKwkJaWYgdGVzdCAiJHtubF9jdl9oYXZlX2RveHlnZW59IiA9ICJubyI7IHRoZW4KKwkJICAgIG5sX2N2X2J1aWxkX2RvY3M9bm8KKwkJZWxzZQorCQkgICAgbmxfY3ZfYnVpbGRfZG9jcz15ZXMKKwkJZmkKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIke25sX2N2X2J1aWxkX2RvY3N9IiA9ICJ5ZXMiOyB0aGVuCisJCWlmIHRlc3QgIiR7bmxfY3ZfaGF2ZV9kb3h5Z2VufSIgPSAibm8iOyB0aGVuCisJCSAgICBBQ19NU0dfRVJST1IoW0J1aWxkaW5nIGRvY3Mgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGJ1dCBEb3h5Z2VuIGNhbm5vdCBiZSBmb3VuZF0pCisJCWVsaWYgdGVzdCAiJHtubF9jdl9oYXZlX2RveHlnZW59IiA9ICJ5ZXMiOyB0aGVuCisJCSAgICBpZiB0ZXN0ICJ4JHtET1R9IiAhPSAieCI7IHRoZW4KKwkJCURPWFlHRU5fVVNFX0RPVD1ZRVMKKwkJICAgIGZpCisJCWZpCisJICAgIGZpCisgICAgXSkKKworICAgIEFDX1NVQlNUKERPWFlHRU5fVVNFX0RPVCkKK10pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV9vcHRpbWl6YXRpb24ubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV9vcHRpbWl6YXRpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZjOTQxZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX29wdGltaXphdGlvbi5tNApAQCAtMCwwICsxLDkyIEBACisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGEgR05VIGF1dG9jb25mIE00LXN0eWxlIG1hY3JvIHRoYXQgYWRkcyBhbgorIyAgICAgIC0tZW5hYmxlLW9wdGltaXphdGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbiB0byB0aGUgcGFja2FnZSBhbmQKKyMgICAgICBjb250cm9scyB3aGV0aGVyIHRoZSBwYWNrYWdlIHdpbGwgYmUgYnVpbHQgd2l0aCBvciB3aXRob3V0IGNvZGUKKyMgICAgICBvcHRpbWl6YXRpb24uCisjCisKKyMKKyMgTkxfRU5BQkxFX09QVElNSVpBVElPTihkZWZhdWx0KQorIworIyAgIGRlZmF1bHQgLSBXaGV0aGVyIHRoZSBvcHRpb24gc2hvdWxkIGJlIGVuYWJsZWQgKHllcykgb3IgZGlzYWJsZWQgKG5vKQorIyAgICAgICAgICAgICBieSBkZWZhdWx0LgorIworIyBBZGRzIGFuIC0tZW5hYmxlLW9wdGltaXphdGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbiB0byB0aGUgcGFja2FnZSB3aXRoIGEKKyMgZGVmYXVsdCB2YWx1ZSBvZiAnZGVmYXVsdCcgKHNob3VsZCBiZSBlaXRoZXIgJ25vJyBvciAneWVzJykgYW5kIGNvbnRyb2xzCisjIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCB3aXRoIG9yIHdpdGhvdXQgY29kZSBvcHRpbWl6YXRpb24uCisjCisjIFRoZSB2YWx1ZSAnbmxfY3ZfYnVpbGRfb3B0aW1pemVkJyB3aWxsIGJlIHNldCB0byB0aGUgcmVzdWx0LiBJbgorIyBhZGRpdGlvbiwgdGhlIGNvbnRlbnRzIG9mIENGTEFHUywgQ1hYRkxBR1MsIE9CSkNGTEFHUywgYW5kIE9CSkNYWEZMQUdTIG1heQorIyBiZSBhbHRlcmVkIGJ5IHRoZSB1c2Ugb2YgdGhpcyBtYWNybywgY29udmVydGluZyAtTzxzb21ldGhpbmc+IHRvIC1PMC4KKyMKKyMgTk9URTogVGhlIGJlaGF2aW9yIG9mIHRoaXMgaXMgaW5mbHVlbmNlZCBieSBubF9jdl9idWlsZF9jb3ZlcmFnZSBmcm9tCisjICAgICAgIE5MX0VOQUJMRV9DT1ZFUkFHRQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW05MX0VOQUJMRV9PUFRJTUlaQVRJT05dLAorWworICAgICMgQ2hlY2sgd2hldGhlciBvciBub3QgYSBkZWZhdWx0IHZhbHVlIGhhcyBiZWVuIHBhc3NlZCBpbi4KKworICAgIG00X2Nhc2UoWyQxXSwKKyAgICAgICAgW3llc10sW10sCisgICAgICAgIFtub10sW10sCisgICAgICAgIFttNF9mYXRhbChbJDA6IGludmFsaWQgZGVmYXVsdCB2YWx1ZSAnJDEnOyBtdXN0IGJlICd5ZXMnIG9yICdubyddKV0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0byBidWlsZCBjb2RlLW9wdGltaXplZCBpbnN0YW5jZXMgb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllc10sCisgICAgICAgIG5sX2N2X2J1aWxkX29wdGltaXplZCwKKyAgICAgICAgWworICAgICAgICAgICAgQUNfQVJHX0VOQUJMRShvcHRpbWl6YXRpb24sCisgICAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vcHRpbWl6YXRpb25dLFtFbmFibGUgdGhlIGdlbmVyYXRpb24gb2YgY29kZS1vcHRpbWl6ZWQgaW5zdGFuY2VzIEA8OkBkZWZhdWx0PSQxQDo+QC5dKV0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluIAorCisgICAgICAgICAgICAgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX29wdGltaXplZD0ke2VuYWJsZXZhbH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJHtubF9jdl9idWlsZF9jb3ZlcmFnZX0iID0gInllcyIgJiYgdGVzdCAiJHtubF9jdl9idWlsZF9vcHRpbWl6ZWR9IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtib3RoIC0tZW5hYmxlLW9wdGltaXphdGlvbiBhbmQgLS1lbmFibGUtY292ZXJhZ2UgY2Fubm90IHVzZWQuIFBsZWFzZSwgY2hvb3NlIG9uZSBvciB0aGUgb3RoZXIgdG8gZW5hYmxlLl0pCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtb3B0aW1pemVkXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIke25sX2N2X2J1aWxkX2NvdmVyYWdlfSIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1dBUk4oWy0tZW5hYmxlLWNvdmVyYWdlIHdhcyBzcGVjaWZpZWQsIG9wdGltaXphdGlvbiBkaXNhYmxlZF0pCisgICAgICAgICAgICAgICAgICAgICAgICBubF9jdl9idWlsZF9vcHRpbWl6ZWQ9bm8KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBubF9jdl9idWlsZF9vcHRpbWl6ZWQ9JDEKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIF0pCisKKyAgICAgICAgICAgIGlmIHRlc3QgIiR7bmxfY3ZfYnVpbGRfb3B0aW1pemVkfSIgPSAibm8iOyB0aGVuCisgICAgICAgICAgICAgICAgQ0ZMQUdTPSJgZWNobyAke0NGTEFHU30gfCBzZWQgLWUgJ3MsLU9bW1s6YWxudW06XV1dKiwtTzAsZydgIgorICAgICAgICAgICAgICAgIENYWEZMQUdTPSJgZWNobyAke0NYWEZMQUdTfSB8IHNlZCAtZSAncywtT1tbWzphbG51bTpdXV0qLC1PMCxnJ2AiCisgICAgICAgICAgICAgICAgT0JKQ0ZMQUdTPSJgZWNobyAke09CSkNGTEFHU30gfCBzZWQgLWUgJ3MsLU9bW1s6YWxudW06XV1dKiwtTzAsZydgIgorICAgICAgICAgICAgICAgIE9CSkNYWEZMQUdTPSJgZWNobyAke09CSkNYWEZMQUdTfSB8IHNlZCAtZSAncywtT1tbWzphbG51bTpdXV0qLC1PMCxnJ2AiCisgICAgICAgICAgICBmaQorICAgIF0pCitdKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfdGVzdHMubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV90ZXN0cy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWI3OTE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfdGVzdHMubTQKQEAgLTAsMCArMSw3MSBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgZGVmaW5lcyBhIEdOVSBhdXRvY29uZiBNNC1zdHlsZSBtYWNybyB0aGF0IGFkZHMgYW4KKyMgICAgICAtLWVuYWJsZS10ZXN0cyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byB0aGUgcGFja2FnZSBhbmQgY29udHJvbHMKKyMgICAgICB3aGV0aGVyIHRoZSBwYWNrYWdlIHdpbGwgYmUgYnVpbHQgd2l0aCBvciB3aXRob3V0IHVuaXQgYW5kCisjICAgICAgaW50ZWdyYXRpb24gdGVzdHMuCisjCisKKyMKKyMgTkxfRU5BQkxFX1RFU1RTKGRlZmF1bHQpCisjCisjICAgZGVmYXVsdCAtIFdoZXRoZXIgdGhlIG9wdGlvbiBzaG91bGQgYmUgZW5hYmxlZCAoeWVzKSBvciBkaXNhYmxlZCAobm8pCisjICAgICAgICAgICAgIGJ5IGRlZmF1bHQuCisjCisjIEFkZHMgYW4gLS1lbmFibGUtdGVzdHMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGhlIHBhY2thZ2Ugd2l0aCBhCisjIGRlZmF1bHQgdmFsdWUgb2YgJ2RlZmF1bHQnIChzaG91bGQgYmUgZWl0aGVyICdubycgb3IgJ3llcycpIGFuZAorIyBjb250cm9scyB3aGV0aGVyIHRoZSBwYWNrYWdlIHdpbGwgYmUgYnVpbHQgd2l0aCBvciB3aXRob3V0IHVuaXQgYW5kCisjIGludGVncmF0aW9uIHRlc3RzLgorIworIyBUaGUgdmFsdWUgJ25sX2N2X2J1aWxkX3Rlc3RzJyB3aWxsIGJlIHNldCB0byB0aGUgcmVzdWx0LgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBQ19ERUZVTihbTkxfRU5BQkxFX1RFU1RTXSwKK1sKKyAgICAjIENoZWNrIHdoZXRoZXIgb3Igbm90IGEgZGVmYXVsdCB2YWx1ZSBoYXMgYmVlbiBwYXNzZWQgaW4uCisKKyAgICBtNF9jYXNlKFskMV0sCisgICAgICAgIFt5ZXNdLFtdLAorICAgICAgICBbbm9dLFtdLAorICAgICAgICBbbTRfZmF0YWwoWyQwOiBpbnZhbGlkIGRlZmF1bHQgdmFsdWUgJyQxJzsgbXVzdCBiZSAneWVzJyBvciAnbm8nXSldKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdG8gYnVpbGQgdGVzdHNdLAorICAgICAgICBubF9jdl9idWlsZF90ZXN0cywKKyAgICAgICAgWworICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh0ZXN0cywKKyAgICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRlc3RzXSxbRW5hYmxlIGJ1aWxkaW5nIG9mIHRlc3RzIEA8OkBkZWZhdWx0PSQxQDo+QC5dKV0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluIAorCisgICAgICAgICAgICAgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX3Rlc3RzPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdGVzdHNdKQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX3Rlc3RzPSQxCisgICAgICAgICAgICAgICAgXSkKKyAgICBdKQorXSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX3dlcnJvci5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX3dlcnJvci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTAzMmFiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfd2Vycm9yLm00CkBAIC0wLDAgKzEsNzggQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYSBHTlUgYXV0b2NvbmYgTTQtc3R5bGUgbWFjcm8gdGhhdCBhZGRzIGFuCisjICAgICAgLS1lbmFibGUtd2FybmluZ3MtYXMtZXJyb3JzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZSBwYWNrYWdlCisjICAgICAgYW5kIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCB0byB0cmVhdCBhbGwKKyMgICAgICBjb21waWxhdGlvbiB3YXJuaW5ncyBhcyBlcnJvcnMuICAjCisKKyMKKyMgTkxfRU5BQkxFX1dFUlJPUihkZWZhdWx0KQorIworIyAgIGRlZmF1bHQgLSBXaGV0aGVyIHRoZSBvcHRpb24gc2hvdWxkIGJlIGVuYWJsZWQgKHllcykgb3IgZGlzYWJsZWQgKG5vKQorIyAgICAgICAgICAgICBieSBkZWZhdWx0LgorIworIyBBZGRzIGFuIC0tZW5hYmxlLXdhcm5pbmdzLWFzLWVycm9ycyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byB0aGUKKyMgcGFja2FnZSB3aXRoIGEgZGVmYXVsdCB2YWx1ZSBvZiAnZGVmYXVsdCcgKHNob3VsZCBiZSBlaXRoZXIgJ25vJyBvcgorIyAneWVzJykgYW5kIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCB3aXRoIG9yCisjIHdpdGhvdXQgLVdlcnJvciBlbmFibGVkLgorIworIyBUaGUgdmFsdWUgJ25sX2N2X3dhcm5pbmdzX2FzX2Vycm9ycycgd2lsbCBiZSBzZXQgdG8gdGhlIHJlc3VsdC4gSW4KKyMgYWRkaXRpb24sIHRoZSB2YXJpYWJsZSBOTF9XRVJST1JfQ1BQRkxBR1Mgd2lsbCBiZSBzZXQgdG8gdGhlCisjIGNvbXBpbGVyLXNwZWNpZmljIGZsYWcgbmVjZXNzYXJ5IHRvIGFzc2VydCB0aGlzIG9wdGlvbi4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtOTF9FTkFCTEVfV0VSUk9SXSwKK1sKKyAgICAjIENoZWNrIHdoZXRoZXIgb3Igbm90IGEgZGVmYXVsdCB2YWx1ZSBoYXMgYmVlbiBwYXNzZWQgaW4uCisKKyAgICBtNF9jYXNlKFskMV0sCisgICAgICAgIFt5ZXNdLFtdLAorICAgICAgICBbbm9dLFtdLAorICAgICAgICBbbTRfZmF0YWwoWyQwOiBpbnZhbGlkIGRlZmF1bHQgdmFsdWUgJyQxJzsgbXVzdCBiZSAneWVzJyBvciAnbm8nXSldKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdG8gdHJlYXQgYWxsIGNvbXBpbGF0aW9uIHdhcm5pbmdzIGFzIGVycm9yc10sCisgICAgICAgIG5sX2N2X3dhcm5pbmdzX2FzX2Vycm9ycywKKyAgICAgICAgWworICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh3YXJuaW5ncy1hcy1lcnJvcnMsCisgICAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS13YXJuaW5ncy1hcy1lcnJvcnNdLFtUcmVhdCBhbGwgY29tcGlsYXRpb24gd2FybmluZ3MgYXMgZXJyb3JzIEA8OkBkZWZhdWx0PSQxQDo+QC5dKV0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluIAorCisgICAgICAgICAgICAgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X3dhcm5pbmdzX2FzX2Vycm9ycz0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXdhcm5pbmdzLWFzLWVycm9yc10pCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgbmxfY3Zfd2FybmluZ3NfYXNfZXJyb3JzPSQxCisgICAgICAgICAgICAgICAgXSkKKyAgICBdKQorCisgICAgaWYgdGVzdCAiJHtubF9jdl93YXJuaW5nc19hc19lcnJvcnN9IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIEFYX0NIRUNLX0NPTVBJTEVSX09QVElPTihbQ10sIE5MX1dFUlJPUl9DUFBGTEFHUywgWy1XZXJyb3JdKQorICAgICAgICBpZiB0ZXN0ICJ4JHtOTF9XRVJST1JfQ1BQRkxBR1N9IiA9ICJ4IjsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZGV0ZXJtaW5lIGhvdyB0byB0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnMgZm9yIHlvdXIgY29tcGlsZXIgJHtDQ31dKQorICAgICAgICBmaQorICAgIGZpCitdKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9maWx0ZXJlZF9jYW5vbmljYWwubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2ZpbHRlcmVkX2Nhbm9uaWNhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWZkYjNjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9maWx0ZXJlZF9jYW5vbmljYWwubTQKQEAgLTAsMCArMSw5NyBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgZGVmaW5lcyBhIEdOVSBhdXRvY29uZiBNNC1zdHlsZSBtYWNybyBmb3IgZmlsdGVyaW5nCisjICAgICAgdGhlIGF1dG9jb25mIGNhbm9uaWNhbCBidWlsZCwgaG9zdCwgb3IgdGFyZ2V0LgorIworIyAgICAgIE1hYyBPUyBYIC8gRGFyd2luIGVuZHMgdXAgcHV0dGluZyBzb21lIHZlcnNpb25pbmcgY3J1ZnQgb24gdGhlCisjICAgICAgZW5kIG9mIGl0cyB0dXBsZXMgdGhhdCBtb3N0IHVzZXJzIG9mIHRoZXNlIHZhcmlhYmxlcyByYXJlbHkKKyMgICAgICBjYXJlIGFib3V0LgorIworCisjCisjIF9OTF9GSUxURVJFRF9DQU5PTklDQUwobmFtZSkKKyMKKyMgICBuYW1lIC0gVGhlIGV4aXN0aW5nIGF1dG9jb25mIHZhcmlhYmxlIHRvIGZpbHRlcgorIworIyAgIE1hYyBPUyBYIC8gRGFyd2luIGVuZHMgdXAgcHV0dGluZyBzb21lIHZlcnNpb25pbmcgY3J1ZnQgb24gdGhlIGVuZAorIyAgIG9mIGl0cyB0dXBsZXMgdGhhdCBtb3N0IHVzZXJzIG9mIHRoZXNlIHZhcmlhYmxlcyByYXJlbHkgY2FyZSBhYm91dC4KKyMKKyMgICBUaGlzIGZpbHRlcnMgc3VjaCB2ZXJzaW9uaW5nIGNydWZ0IGZyb20gdGhlIHZhcmlhYmxlICduYW1lJworIyAgIGdlbmVyYXRlZCBmcm9tIEFDX0NBTk9OSUNBTF88TkFNRT4gYW5kIHNhdmVzIGl0IGluCisjICAgJ25sX2ZpbHRlcmVkXzxuYW1lPicuCisjCitfTkxfRklMVEVSRURfQ0FOT05JQ0FMKG5hbWUpCitBQ19ERUZVTihbX05MX0ZJTFRFUkVEX0NBTk9OSUNBTF0sCitbCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZpbHRlcmVkICQxIHN5c3RlbSB0eXBlXSwKKyAgICAgICAgbmxfY3ZfZmlsdGVyZWRfJDEsCisgICAgICAgIG5sX2N2X2ZpbHRlcmVkXyQxPWBlY2hvICR7JDF9IHwgc2VkIC1lICdzL1tbW1s6ZGlnaXQ6XS5dXV0qJC8vZydgCisgICAgICAgIG5sX2ZpbHRlcmVkXyQxPSR7bmxfY3ZfZmlsdGVyZWRfJDF9KQorXSkKKworIworIyBOTF9GSUxURVJFRF9DQU5PTklDQUxfQlVJTEQKKyMKKyMgICBNYWMgT1MgWCAvIERhcndpbiBlbmRzIHVwIHB1dHRpbmcgc29tZSB2ZXJzaW9uaW5nIGNydWZ0IG9uIHRoZSBlbmQKKyMgICBvZiBpdHMgdHVwbGVzIHRoYXQgbW9zdCB1c2VycyBvZiB0aGVzZSB2YXJpYWJsZXMgcmFyZWx5IGNhcmUgYWJvdXQuCisjCisjICAgVGhpcyBmaWx0ZXJzIHN1Y2ggdmVyc2lvbmluZyBjcnVmdCBmcm9tIHRoZSB2YXJpYWJsZSAnYnVpbGQnCisjICAgZ2VuZXJhdGVkIGZyb20gQUNfQ0FOT05JQ0FMX0JVSUxEIGFuZCBzYXZlcyBpdCBpbgorIyAgICdubF9maWx0ZXJlZF9idWlsZCcuCisjCitOTF9GSUxURVJFRF9DQU5PTklDQUxfQlVJTEQKK0FDX0RFRlVOKFtOTF9GSUxURVJFRF9DQU5PTklDQUxfQlVJTERdLAorWworICAgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pCisgICAgX05MX0ZJTFRFUkVEX0NBTk9OSUNBTChidWlsZCkKK10pCisKKyMKKyMgTkxfRklMVEVSRURfQ0FOT05JQ0FMX0hPU1QKKyMKKyMgICBNYWMgT1MgWCAvIERhcndpbiBlbmRzIHVwIHB1dHRpbmcgc29tZSB2ZXJzaW9uaW5nIGNydWZ0IG9uIHRoZSBlbmQKKyMgICBvZiBpdHMgdHVwbGVzIHRoYXQgbW9zdCB1c2VycyBvZiB0aGVzZSB2YXJpYWJsZXMgcmFyZWx5IGNhcmUgYWJvdXQuCisjCisjICAgVGhpcyBmaWx0ZXJzIHN1Y2ggdmVyc2lvbmluZyBjcnVmdCBmcm9tIHRoZSB2YXJpYWJsZSAnaG9zdCcKKyMgICBnZW5lcmF0ZWQgZnJvbSBBQ19DQU5PTklDQUxfSE9TVCBhbmQgc2F2ZXMgaXQgaW4KKyMgICAnbmxfZmlsdGVyZWRfYnVpbGQnLgorIworTkxfRklMVEVSRURfQ0FOT05JQ0FMX0hPU1QKK0FDX0RFRlVOKFtOTF9GSUxURVJFRF9DQU5PTklDQUxfSE9TVF0sCitbCisgICAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICAgIF9OTF9GSUxURVJFRF9DQU5PTklDQUwoaG9zdCkKK10pCisKKyMKKyMgTkxfRklMVEVSRURfQ0FOT05JQ0FMX1RBUkdFVAorIworIyAgIE1hYyBPUyBYIC8gRGFyd2luIGVuZHMgdXAgcHV0dGluZyBzb21lIHZlcnNpb25pbmcgY3J1ZnQgb24gdGhlIGVuZAorIyAgIG9mIGl0cyB0dXBsZXMgdGhhdCBtb3N0IHVzZXJzIG9mIHRoZXNlIHZhcmlhYmxlcyByYXJlbHkgY2FyZSBhYm91dC4KKyMKKyMgICBUaGlzIGZpbHRlcnMgc3VjaCB2ZXJzaW9uaW5nIGNydWZ0IGZyb20gdGhlIHZhcmlhYmxlICd0YXJnZXQnCisjICAgZ2VuZXJhdGVkIGZyb20gQUNfQ0FOT05JQ0FMX1RBUkdFVCBhbmQgc2F2ZXMgaXQgaW4KKyMgICAnbmxfZmlsdGVyZWRfdGFyZ2V0Jy4KKyMKK05MX0ZJTFRFUkVEX0NBTk9OSUNBTF9UQVJHRVQKK0FDX0RFRlVOKFtOTF9GSUxURVJFRF9DQU5PTklDQUxfVEFSR0VUXSwKK1sKKyAgICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfVEFSR0VUXSkKKyAgICBfTkxfRklMVEVSRURfQ0FOT05JQ0FMKHRhcmdldCkKK10pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX3Byb2dfbG5kaXIubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX3Byb2dfbG5kaXIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1ODg1OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfcHJvZ19sbmRpci5tNApAQCAtMCwwICsxLDc2IEBACisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGEgR05VIGF1dG9jb25mIE00LXN0eWxlIG1hY3JvIGZvciBjaGVja2luZworIyAgICAgIGZvciBhIGJ1aWxkIGhvc3QtYmFzZWQgdG9vbCB0aGF0IGNhbiBzaGFkb3cgYSBkaXJlY3RvcnkgdXNpbmcKKyMgICAgICBzeW1ib2xpYyBsaW5rcywgb3N0ZW5zaWJseSBlaXRoZXIgR05VIGNwIG9yIFgxMSBsbmRpci4KKyMKKworQUNfREVGVU4oW19OTF9DSEVDS19DUF9SU10sCitbCisgICAgJDEgLVJzIDI+JjEgfCBncmVwICdtaXNzaW5nIGZpbGUgb3BlcmFuZCcgPiAvZGV2L251bGwKK10pCisKK0FDX0RFRlVOKFtfTkxfQ0hFQ0tfTE5ESVJdLAorWworICAgICQxIC1zaWxlbnQgMj4mMSB8IGdyZXAgJ3VzYWdlOiBsbmRpcicgPiAvZGV2L251bGwKK10pCisKKyMKKyMgTkxfUFJPR19MTkRJUihbZmFsbGJhY2sgR05VIGNwIHBhdGggdG8gdGVzdCwgZmFsbGJhY2sgR05VIGNwIHBhdGggdG8gc2V0XSkKKyMKKyMgICB0ZXN0IHBhdGggICAgLSBUaGUgZmFsbGJhY2sgR05VIGNwIHBhdGggYW5kIGFyZ3VtZW50cyB0byB0ZXN0IGlmIGEgc3lzdGVtCisjICAgICAgICAgICAgICAgICAgR05VIGNwIGNhbm5vdCBiZSBmb3VuZC4KKyMgICBzZXQgcGF0aCAgICAgLSBUaGUgZmFsbGJhY2sgR05VIGNwIHBhdGggYW5kIGFyZ3VtZW50cyB0byBzZXQgdG8gTE5ESVIgaWYKKyMgICAgICAgICAgICAgICAgICB0aGUgdGVzdCBwYXRoIHN1Y2NlZWRzLgorIworIyBEZXRlcm1pbmUgYW5kIGFzc2lnbiB0byBMTkRJUiwgYSBidWlsZCBob3N0LWJhc2VkIHRvb2wgdGhhdCBjYW4gc2hhZG93CisjIGEgZGlyZWN0b3J5IHVzaW5nIHN5bWJvbGljIGxpbmtzLCBhdHRlbXB0aW5nIGVpdGhlciBHTlUgY3Agb3IgWDExIGxuZGlyCisjIGFzIHByZWZlcnJlZCBkZWZhdWx0cy4KKyMKKyMgSWYgdGhlIGhvc3QgZG9lc24ndCBoYXZlIEdOVSBjcCBuYXRpdmVseSwgdGhlIGNhbGxlciBjYW4gc3BlY2lmeQorIyBib3RoIGEgR05VIGNwIHBhdGggdG8gdGVzdCBhbmQgYSBHTlUgY3AgcGF0aCB0byBzZXQgaWYgdGhlIHRlc3QgcGF0aAorIyB3YXMgc3VjY2Vzc2Z1bC4KKyMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW05MX1BST0dfTE5ESVJdLAorWworICAgIEFDX0FSR19WQVIoTE5ESVIsIFtQcm9ncmFtIGFuZCBhcmd1bWVudHMgdG8gY3JlYXRlIGEgc2hhZG93IGRpcmVjdG9yeSBvZiBzeW1ib2xpYyBsaW5rcyB0byBhbm90aGVyIGRpcmVjdG9yeSB0cmVlIChlLmcuICdjcCAtUnMnKV0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBzaGFkb3cgYSBkaXJlY3RvcnkgdHJlZV0pCisKKyAgICBpZiB0ZXN0ICJ4JHtMTkRJUn0iID0gIngiOyB0aGVuCisJaWYgYF9OTF9DSEVDS19DUF9SUyhjcClgOyB0aGVuCisJICAgIExORElSPSJjcCAtUnMiCisKKwllbGlmIGBfTkxfQ0hFQ0tfTE5ESVIobG5kaXIpYDsgdGhlbgorCSAgICBMTkRJUj0ibG5kaXIgLXNpbGVudCIKKworCWVsaWYgYF9OTF9DSEVDS19DUF9SUygkMSlgOyB0aGVuCisJICAgIExORElSPSIkMiAtUnMiCisKKwllbHNlCisJICAgIEFDX01TR19FUlJPUihbQ2Fubm90IGRldGVybWluZSBob3cgdG8gc2hhZG93IGEgZGlyZWN0b3J5IHRyZWUuIE5laXRoZXIgJ2NwIC1Scycgbm9yICdsbmRpciAtc2lsZW50JyBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlIG9yIGZ1bmN0aW9uYWwuIFBsZWFzZSBjb25zaWRlciBpbnN0YWxsaW5nIG9yIG1ha2luZyBhdmFpbGFibGUgaW4geW91ciBQQVRIIG9uZSBvZjogR05VIGNvcmV1dGlscyA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8+LCBYUXVhcnR6IChNYWMgT1MgWC1vbmx5KSA8aHR0cDovL3hxdWFydHoubWFjb3Nmb3JnZS5vcmcvPiwgb3IgbG5kaXIgPGh0dHA6Ly93d3cubWl0LmVkdS9hZnMvc2lwYi9wcm9qZWN0L3NpcGJzcmMvcnQvbG5kaXIvPi5dKQorCisJZmkKKyAgICBmaQorCisgICAgQUNfTVNHX1JFU1VMVCgke0xORElSfSkKKworICAgIEFDX1NVQlNUKExORElSKQorXSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfd2Vycm9yLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF93ZXJyb3IubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4NzJkMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfd2Vycm9yLm00CkBAIC0wLDAgKzEsMTA0IEBACisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIEdOVSBhdXRvY29uZiBNNC1zdHlsZSBtYWNyb3MgdGhhdCBlbnN1cmUgdGhlCisjICAgICAgLVdlcnJvciBjb21waWxlciBvcHRpb24gZm9yIEdDQy1iYXNlZCBvciAtY29tcGF0aWJsZSBjb21waWxlcnMKKyMgICAgICBkbyBub3QgYnJlYWsgc29tZSBhdXRvY29uZiB0ZXN0cyAoc2VlCisjICAgICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9jb25mLXBhdGNoZXMvMjAwOC0wOS9tc2cwMDAxNC5odG1sKS4KKyMKKyMgICAgICBJZiAtV2Vycm9yIGhhcyBiZWVuIHBhc3NlZCB0cmFuc2Zvcm0gaXQgaW50byAtV25vLWVycm9yIGZvcgorIyAgICAgIENQUEZMQUdTLCBDRkxBR1MsIENYWEZMQUdTLCBPQkpDRkxBR1MsIGFuZCBPQkpDWFhGTEFHUyB3aXRoCisjICAgICAgTkxfU0FWRV9XRVJST1IuIFRyYW5zZm9ybSB0aGVtIGJhY2sgYWdhaW4gd2l0aAorIyAgICAgIE5MX1JFU1RPUkVfV0VSUk9SLgorIworCisjIAorIyBfTkxfU0FWRV9XRVJST1JfRk9SX1ZBUih2YXJpYWJsZSkKKyMKKyMgICB2YXJpYWJsZSAtIFRoZSBjb21waWxlciBmbGFncyB2YXJpYWJsZSB0byBzY2FuIGZvciB0aGUgcHJlc2VuY2Ugb2YKKyMgICAgICAgICAgICAgIC1XZXJyb3IgYW5kLCBpZiBwcmVzZW50LCB0cmFuc2Zvcm0gdG8gLVduby1lcnJvci4KKyMKKyMgVGhpcyB0cmFuc2Zvcm1zLCBmb3IgdGhlIHNwZWNpZmllZCBjb21waWxlciBmbGFncyB2YXJpYWJsZSwgLVdlcnJvcgorIyB0byAtV25vLWVycm9yLCBpZiBpdCB3YXMgaXQgcHJlc2VudC4gVGhlIG9yaWdpbmFsIHN0YXRlIG1heSBiZQorIyByZXN0b3JlZCBieSBpbnZva2luZyBfTkxfUkVTVE9SRV9XRVJST1JfRk9SX1ZBUihbdmFyaWFibGVdKS4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTkxfU0FWRV9XRVJST1JfRk9SX1ZBUl0sCitbCisgICAgaWYgZWNobyAiJHskMX0iIHwgZ3JlcCAtcSAnXC1XZXJyb3InOyB0aGVuCisJJDE9ImBlY2hvICR7JDF9IHwgc2VkIC1lICdzLC1XZXJyb3JcKFtbWzpzcGFjZTpdXV1cKSwtV25vLWVycm9yXDEsZydgIgorCW5sX2hhZF8kMV93ZXJyb3I9eWVzCisgICAgZWxzZQorCW5sX2hhZF8kMV93ZXJyb3I9bm8KKyAgICBmaQorXSkKKworIworIyBfTkxfUkVTVE9SRV9XRVJST1JfRk9SX1ZBUih2YXJpYWJsZSkKKyMKKyMgICB2YXJpYWJsZSAtIFRoZSBjb21waWxlciBmbGFnIGZvciB3aGljaCB0byByZXN0b3JlIC1Xbm8tZXJyb3IgYmFjaworIyAgICAgICAgICAgICAgdG8gLVdlcnJvciBpZiBpdCB3YXMgb3JpZ2luYWxseSBwYXNzZWQgaW4gYnkgdGhlIHVzZXIgYXMKKyMgICAgICAgICAgICAgIHN1Y2guCisjCisjIFRoaXMgcmVzdG9yZXMsIGZvciB0aGUgc3BlY2lmaWVkIGNvbXBpbGVyIGZsYWdzIHZhcmlhYmxlLCAtV2Vycm9yCisjIGZyb20gLVduby1lcnJvciwgaWYgaXQgd2FzIGluaXRpYWxseSBzZXQgYXMgLVdlcnJvciBhdCB0aGUgdGltZQorIyBfTkxfU0FWRV9XRVJST1JfRk9SX1ZBUihbdmFyaWFibGVdKSB3YXMgaW52b2tlZC4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTkxfUkVTVE9SRV9XRVJST1JfRk9SX1ZBUl0sCitbCisgICAgaWYgdGVzdCAiJHtubF9oYWRfJDFfd2Vycm9yfSIgPSAieWVzIjsgdGhlbgorCSQxPSJgZWNobyAkeyQxfSB8IHNlZCAtZSAncywtV25vLWVycm9yXChbW1s6c3BhY2U6XV1dXCksLVdlcnJvclwxLGcnYCIKKyAgICBmaQorCisgICAgdW5zZXQgbmxfaGFkXyQxX3dlcnJvcgorXSkKKworIyAKKyMgTkxfU0FWRV9XRVJST1IKKyMKKyMgVGhpcyB0cmFuc2Zvcm1zLCBmb3IgZWFjaCBvZiBDRkxBR1MsIENYWEZMQUdTLCBPQkpDRkxBR1MsIGFuZAorIyBPQkpDWFhGTEFHUywgLVdlcnJvciB0byAtV25vLWVycm9yLCBpZiBpdCB3YXMgaXQgcHJlc2VudC4gVGhlCisjIG9yaWdpbmFsIHN0YXRlIG1heSBiZSByZXN0b3JlZCBieSBpbnZva2luZyBOTF9SRVNUT1JFX1dFUlJPUi4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtOTF9TQVZFX1dFUlJPUl0sCitbCisgICAgX05MX1NBVkVfV0VSUk9SX0ZPUl9WQVIoW0NQUEZMQUdTXSkKKyAgICBfTkxfU0FWRV9XRVJST1JfRk9SX1ZBUihbQ0ZMQUdTXSkKKyAgICBfTkxfU0FWRV9XRVJST1JfRk9SX1ZBUihbQ1hYRkxBR1NdKQorICAgIF9OTF9TQVZFX1dFUlJPUl9GT1JfVkFSKFtPQkpDRkxBR1NdKQorICAgIF9OTF9TQVZFX1dFUlJPUl9GT1JfVkFSKFtPQkpDWFhGTEFHU10pCitdKQorCisjCisjIE5MX1JFU1RPUkVfV0VSUk9SCisjCisjIFRoaXMgcmVzdG9yZXMsIGZvciBlYWNoIG9mIE9CSkNYWEZMQUdTLCBPQkpDRkxBR1MsIENYWEZMQUdTLCBhbmQKKyMgQ0ZMQUdTLCAtV2Vycm9yIGZyb20gLVduby1lcnJvciwgaWYgaXQgd2FzIGluaXRpYWxseSBzZXQgYXMgLVdlcnJvcgorIyBhdCB0aGUgdGltZSBOTF9TQVZFX1dFUlJPUiB3YXMgaW52b2tlZC4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtOTF9SRVNUT1JFX1dFUlJPUl0sCitbCisgICAgX05MX1JFU1RPUkVfV0VSUk9SX0ZPUl9WQVIoW09CSkNYWEZMQUdTXSkKKyAgICBfTkxfUkVTVE9SRV9XRVJST1JfRk9SX1ZBUihbT0JKQ0ZMQUdTXSkKKyAgICBfTkxfUkVTVE9SRV9XRVJST1JfRk9SX1ZBUihbQ1hYRkxBR1NdKQorICAgIF9OTF9SRVNUT1JFX1dFUlJPUl9GT1JfVkFSKFtDRkxBR1NdKQorICAgIF9OTF9SRVNUT1JFX1dFUlJPUl9GT1JfVkFSKFtDUFBGTEFHU10pCitdKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF93aXRoX3BhY2thZ2UubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX3dpdGhfcGFja2FnZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzVlYWVjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF93aXRoX3BhY2thZ2UubTQKQEAgLTAsMCArMSw3NTUgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYSBHTlUgYXV0b2NvbmYgTTQtc3R5bGUgbWFjcm8gZm9yIGNoZWNraW5nCisjICAgICAgdGhlIHByZXNlbmNlIGFuZCB2aWFiaWxpdHkgb2YgYm90aCByZXF1aXJlZCBhbmQgb3B0aW9uYWwKKyMgICAgICBkZXBlbmRlbnQgcGFja2FnZXMsIHdoaWNoIG1heSBiZSBpbnRlcm5hbCBvciBleHRlcm5hbCB0byB0aGUKKyMgICAgICBjdXJyZW50IHBhY2thZ2UuCisjCisjICAgICAgRml2ZSAoNSkgbWFjcm9zIGFyZSBtYWRlIGF2YWlsYWJsZToKKyMKKyMgICAgICAgICogTkxfV0lUSF9SRVFVSVJFRF9FWFRFUk5BTF9QQUNLQUdFCisjICAgICAgICAqIE5MX1dJVEhfT1BUSU9OQUxfRVhURVJOQUxfUEFDS0FHRQorIyAgICAgICAgKiBOTF9XSVRIX1JFUVVJUkVEX0lOVEVSTkFMX1BBQ0tBR0UKKyMgICAgICAgICogTkxfV0lUSF9PUFRJT05BTF9JTlRFUk5BTF9QQUNLQUdFCisjICAgICAgICAqIE5MX1dJVEhfUEFDS0FHRQorIworIyAgICAgIE5vdGUsIGhvd2V2ZXIsIHRoYXQgTkxfV0lUSF9QQUNLQUdFIGlzIGRlcHJlY2F0ZWQgYW5kIG1hcHMgdG8KKyMgICAgICBOTF9XSVRIX1JFUVVJUkVEX0lOVEVSTkFMX1BBQ0tBR0UuCisjCisKKyMgX05MX0FSR19XSVRIX0lOQ0xVREVTX09SX0xJQlMoUEFDS0FHRS1ESVNQT1NJVElPTiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1TT1VSQ0UsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtUFJFVFRZLU5BTUUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtV0lUSC1PUFRJT04sCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBMVVJBTC1XSVRILU9QVElPTi1IRUxQLVdPUkQsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJVEgtRElSLVZBUklBQkxFLU1PRElGSUVSKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBBQ19BUkdfV0lUSCB0aGF0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvCisjIG9wdGlvbmFsbHkgc3BlY2lmeSBhIGRlcGVuZGVudCBwYWNrYWdlIGluY2x1ZGUgYW5kIGxpbmsgbGlicmFyeQorIyBkaXJlY3RvcmllcyBpbmRlcGVuZGVudGx5IGFzCisjIC0td2l0aC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPi08UEFDS0FHRS1XSVRILU9QVElPTj49PERJUj4uCisjCisjIElmIHRoZSBwYWNrYWdlIGlzIHNwZWNpZmllZCBhcyByZXF1aXJlZCwgdGhlIHVzZSBvZgorIyAtLXdpdGhvdXQtPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT4gb3IgdGhlIHVzZSBvZgorIyAtLXdpdGgtPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT49bm8gd2lsbCByZXN1bHQgaW4gYSBmYXRhbCBlcnJvci4KKyMKKyMgQXQgdGhlIHN1Y2Nlc3NmdWwgY29uY2x1c2lvbiBvZiB0aGUgZXhlY3V0aW9uIG9mIHRoZSBtYWNybywgCisjIHR3byB2YXJpYWJsZXMgd2lsbCBiZSBkZWZpbmVkOgorIworIyAgICogbmxfd2l0aF88UEFDS0FHRS1TVUNDSU5DVC1OQU1FPgorIyAgICogPFBBQ0tBR0UtU1VDQ0lOVC1OQU1FPl88V0lUSC1ESVItVkFSSUFCTEUtTU9ESUZJRVI+X2RpcgorIworIyBUaGUgcGFja2FnZSBkaXNwb3NpdGlvbiBhbmQgc291cmNlIGFyZSBzcGVjaWZpZWQgYnk6CisjCisjICAgUEFDS0FHRS1ESVNQT1NJVElPTiAgICAgOiBUaGlzIG1heSBiZSBlaXRoZXIgJ3JlcXVpcmVkJyBpZiB0aGUgZGVwZW5kZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGlzIHJlcXVpcmVkIG9yICdvcHRpb25hbCcgaWYKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdC4KKyMgICBQQUNLQUdFLVNPVVJDRSAgICAgICAgICA6IFRoaXMgbWF5IGJlIGVpdGhlciAnaW50ZXJuYWwnIGlmIHRoZSBkZXBlbmRlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWF5IGJlIHByb3ZpZGVkIGVpdGhlcgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxseSBvciBleHRlcm5hbGx5IHRvIHRoZSBjdXJyZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG9yICdleHRlcm5hbCcgaWYgdGhlIGRlcGVuZGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYXkgb25seSBiZSBwcm92aWRlZCBvdXRzaWRlIG9mCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBwYWNrYWdlLiBUaGlzIGFsc28gc2VydmVzIGFzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlcmUgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHNjcmlwdCBleHBlY3RzIHRvIGZpbmQgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLgorIworIyBUaGUgZGVwZW5kZW50IHBhY2thZ2UgaXMgc3BlY2lmaWVkIGluIHRocmVlIGZvcm1zOgorIworIyAgIFBBQ0tBR0UtUFJFVFRZLU5BTUUgICAgIDogVGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgYnkgd2hpY2ggdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVmZXJyZWQgZm9yIGFueSBkaWFnbm9zdGljIG91dHB1dC4gRm9yCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlLCAiTXkgR3JlYXQgU29mdHdhcmUgUGFja2FnZSIuCisjICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVggOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBwcmVmaXggYXBwbGllZCB0byB2YXJpYWJsZXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgYSByZXN1bHQgb2YgcnVubmluZyB0aGlzIG1hY3JvIGZvciB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLiBGb3IgZXhhbXBsZSwgIk1HU1AiIGhlcmUgaXMgdHJhbnNmb3JtZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gTUdTUF9DUFBGTEFHUy4KKyMgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUgICA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIG5hbWUgdXNlZCBmb3IgcGtnLWNvbmZpZywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgYW5kIG9uIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGNvbW1hbmQgbGluZS4gIEZvciBleGFtcGxlLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1nc3AiIGhlcmUgaXMgdXNlZCBmb3IgLS13aXRoLW1nc3A9RElSCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAncGtnLWNvbmZpZyAtLWNmbGFncyBtZ3NwJy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19OTF9BUkdfV0lUSF9JTkNMVURFU19PUl9MSUJTXSwKK1sKKyAgICBkbmwgQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIHBhY2thZ2UgaXMgcmVxdWlyZWQKKworICAgIG00X2Nhc2UoWyQxXSwKKyAgICAgICAgW3JlcXVpcmVkXSxbXSwKKyAgICAgICAgW29wdGlvbmFsXSxbXSwKKyAgICAgICAgW200X2ZhdGFsKFskMDogaW52YWxpZCBkaXNwb3NpdGlvbiB2YWx1ZSAnJDEnOyBtdXN0IGJlICdyZXF1aXJlZCcgb3IgJ29wdGlvbmFsJ10pXSkKKworICAgIGRubCBDaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgcGFja2FnZSBpcyBpbnRlcm5hbAorCisgICAgbTRfY2FzZShbJDJdLAorICAgICAgICBbaW50ZXJuYWxdLFtdLAorICAgICAgICBbZXh0ZXJuYWxdLFtdLAorICAgICAgICBbbTRfZmF0YWwoWyQwOiBpbnZhbGlkIHNvdXJjZSB2YWx1ZSAnJDInOyBtdXN0IGJlICdpbnRlcm5hbCcgb3IgJ2V4dGVybmFsJ10pXSkKKworICAgIEFDX0FSR19XSVRIKCQ1LSQ2LAorCUFTX0hFTFBfU1RSSU5HKFstLXdpdGgtJDUtJDY9RElSXSwKKwkJICAgW1NwZWNpZnkgbG9jYXRpb24gb2YgJDEgJDMgJDcgQDw6QGRlZmF1bHQ9JDJAOj5ALl0pLAorCVsKKwkgICAgaWYgdGVzdCAiJHt3aXRodmFsfSIgPSAibm8iOyB0aGVuCisgICAgICAgICAgICAgICAgbTRfaWYoWyQxXSwKKyAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdLAorICAgICAgICAgICAgICAgICAgICAgIFtBQ19NU0dfRVJST1IoWyR7UEFDS0FHRV9OQU1FfSByZXF1aXJlcyB0aGUgJDMgcGFja2FnZS5dKV0sCisgICAgICAgICAgICAgICAgICAgICAgW25sX3dpdGhfJDU9JHt3aXRodmFsfV0pCisJICAgIGZpCisJCisJICAgIGlmIHRlc3QgIngkeyQ1X2Rpcn0iICE9ICJ4IjsgdGhlbgorCQlBQ19NU0dfV0FSTihbb3ZlcnJpZGluZyAtLXdpdGgtJDU9JHskNV9kaXJ9XSkKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIke3dpdGh2YWx9IiA9ICJpbnRlcm5hbCI7IHRoZW4KKwkJJDVfJDhfZGlyPSR7d2l0aHZhbH0KKwkJbmxfd2l0aF8kNT0ke3dpdGh2YWx9CisJICAgIGVsc2UKKwkJJDVfJDhfZGlyPSR7d2l0aHZhbH0KKwkJbmxfd2l0aF8kNT1leHRlcm5hbAorCSAgICBmaQorCV0sCisJWworCSAgICAkNV8kOF9kaXI9OworCSAgICBpZiB0ZXN0ICJ4JHtubF93aXRoXyQ1fSIgPSAieCI7IHRoZW4KKwkJbmxfd2l0aF8kNT0kMgorCSAgICBmaQorCV0pCitdKQorCisjIF9OTF9BUkdfV0lUSF9JTkNMVURFUyhQQUNLQUdFLURJU1BPU0lUSU9OLAorIyAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1TT1VSQ0UsCisjICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVBSRVRUWS1OQU1FLAorIyAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVgsCisjICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIEFDX0FSR19XSVRIIHRoYXQgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8KKyMgb3B0aW9uYWxseSBzcGVjaWZ5IGEgZGVwZW5kZW50IHBhY2thZ2UgaW5jbHVkZSBkaXJlY3RvcnkKKyMgaW5kZXBlbmRlbnRseSBhcyAtLXdpdGgtPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT4taW5jbHVkZXM9PERJUj4uCisjCisjIElmIHRoZSBwYWNrYWdlIGlzIHNwZWNpZmllZCBhcyByZXF1aXJlZCwgdGhlIHVzZSBvZgorIyAtLXdpdGhvdXQtPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT4taW5jbHVkZXMgb3IgdGhlIHVzZSBvZgorIyAtLXdpdGgtPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT4taW5jbHVkZXM9bm8gd2lsbCByZXN1bHQgaW4gYSBmYXRhbCBlcnJvci4KKyMKKyMgQXQgdGhlIHN1Y2Nlc3NmdWwgY29uY2x1c2lvbiBvZiB0aGUgZXhlY3V0aW9uIG9mIHRoZSBtYWNybywgCisjIHR3byB2YXJpYWJsZXMgd2lsbCBiZSBkZWZpbmVkOgorIworIyAgICogbmxfd2l0aF88UEFDS0FHRS1TVUNDSU5DVC1OQU1FPgorIyAgICogPFBBQ0tBR0UtU1VDQ0lOVC1OQU1FPl9oZWFkZXJfZGlyCisjCisjIFRoZSBwYWNrYWdlIGRpc3Bvc2l0aW9uIGFuZCBzb3VyY2UgYXJlIHNwZWNpZmllZCBieToKKyMKKyMgICBQQUNLQUdFLURJU1BPU0lUSU9OICAgICA6IFRoaXMgbWF5IGJlIGVpdGhlciAncmVxdWlyZWQnIGlmIHRoZSBkZXBlbmRlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgaXMgcmVxdWlyZWQgb3IgJ29wdGlvbmFsJyBpZgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90LgorIyAgIFBBQ0tBR0UtU09VUkNFICAgICAgICAgIDogVGhpcyBtYXkgYmUgZWl0aGVyICdpbnRlcm5hbCcgaWYgdGhlIGRlcGVuZGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYXkgYmUgcHJvdmlkZWQgZWl0aGVyCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGx5IG9yIGV4dGVybmFsbHkgdG8gdGhlIGN1cnJlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugb3IgJ2V4dGVybmFsJyBpZiB0aGUgZGVwZW5kZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1heSBvbmx5IGJlIHByb3ZpZGVkIG91dHNpZGUgb2YKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHBhY2thZ2UuIFRoaXMgYWxzbyBzZXJ2ZXMgYXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB3aGVyZSB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGV4cGVjdHMgdG8gZmluZCB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UuCisjCisjIFRoZSBkZXBlbmRlbnQgcGFja2FnZSBpcyBzcGVjaWZpZWQgaW4gdGhyZWUgZm9ybXM6CisjCisjICAgUEFDS0FHRS1QUkVUVFktTkFNRSAgICAgOiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSBieSB3aGljaCB0aGUgcGFja2FnZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSByZWZlcnJlZCBmb3IgYW55IGRpYWdub3N0aWMgb3V0cHV0LiBGb3IKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUsICJNeSBHcmVhdCBTb2Z0d2FyZSBQYWNrYWdlIi4KKyMgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIHByZWZpeCBhcHBsaWVkIHRvIHZhcmlhYmxlcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyBhIHJlc3VsdCBvZiBydW5uaW5nIHRoaXMgbWFjcm8gZm9yIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMuIEZvciBleGFtcGxlLCAiTUdTUCIgaGVyZSBpcyB0cmFuc2Zvcm1lZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byBNR1NQX0NQUEZMQUdTLgorIyAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSAgIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgbmFtZSB1c2VkIGZvciBwa2ctY29uZmlnLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGVtcG9yYXJ5IHZhcmlhYmxlcyBhbmQgb24gdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWdzcCIgaGVyZSBpcyB1c2VkIGZvciAtLXdpdGgtbWdzcD1ESVIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICdwa2ctY29uZmlnIC0tY2ZsYWdzIG1nc3AnLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX05MX0FSR19XSVRIX0lOQ0xVREVTXSwKK1sKKyAgICBfTkxfQVJHX1dJVEhfSU5DTFVERVNfT1JfTElCUyhbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbJDVdLCBbaW5jbHVkZXNdLCBbaGVhZGVyc10sIFtoZWFkZXJdKWRubAorXSkKKworIyBfTkxfQVJHX1dJVEhfTElCUyhQQUNLQUdFLURJU1BPU0lUSU9OLAorIyAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNPVVJDRSwKKyMgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1QUkVUVFktTkFNRSwKKyMgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVgsCisjICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgQUNfQVJHX1dJVEggdGhhdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0bworIyBvcHRpb25hbGx5IHNwZWNpZnkgYSBkZXBlbmRlbnQgcGFja2FnZSBsaW5rIGxpYnJhcnkgZGlyZWN0b3J5CisjIGluZGVwZW5kZW50bHkgYXMgLS13aXRoLTxQQUNLQUdFLVNVQ0NJTkNULU5BTUU+LWxpYnM9PERJUj4uCisjCisjIElmIHRoZSBwYWNrYWdlIGlzIHNwZWNpZmllZCBhcyByZXF1aXJlZCwgdGhlIHVzZSBvZgorIyAtLXdpdGhvdXQtPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT4tbGlicyBvciB0aGUgdXNlIG9mCisjIC0td2l0aC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPi1saWJzPW5vIHdpbGwgcmVzdWx0IGluIGEgZmF0YWwgZXJyb3IuCisjCisjIEF0IHRoZSBzdWNjZXNzZnVsIGNvbmNsdXNpb24gb2YgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbWFjcm8sIAorIyB0d28gdmFyaWFibGVzIHdpbGwgYmUgZGVmaW5lZDoKKyMKKyMgICAqIG5sX3dpdGhfPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT4KKyMgICAqIDxQQUNLQUdFLVNVQ0NJTlQtTkFNRT5fbGlicmFyeV9kaXIKKyMKKyMgVGhlIHBhY2thZ2UgZGlzcG9zaXRpb24gYW5kIHNvdXJjZSBhcmUgc3BlY2lmaWVkIGJ5OgorIworIyAgIFBBQ0tBR0UtRElTUE9TSVRJT04gICAgIDogVGhpcyBtYXkgYmUgZWl0aGVyICdyZXF1aXJlZCcgaWYgdGhlIGRlcGVuZGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBpcyByZXF1aXJlZCBvciAnb3B0aW9uYWwnIGlmCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QuCisjICAgUEFDS0FHRS1TT1VSQ0UgICAgICAgICAgOiBUaGlzIG1heSBiZSBlaXRoZXIgJ2ludGVybmFsJyBpZiB0aGUgZGVwZW5kZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1heSBiZSBwcm92aWRlZCBlaXRoZXIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsbHkgb3IgZXh0ZXJuYWxseSB0byB0aGUgY3VycmVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBvciAnZXh0ZXJuYWwnIGlmIHRoZSBkZXBlbmRlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWF5IG9ubHkgYmUgcHJvdmlkZWQgb3V0c2lkZSBvZgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgcGFja2FnZS4gVGhpcyBhbHNvIHNlcnZlcyBhcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHdoZXJlIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzY3JpcHQgZXhwZWN0cyB0byBmaW5kIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS4KKyMKKyMgVGhlIGRlcGVuZGVudCBwYWNrYWdlIGlzIHNwZWNpZmllZCBpbiB0aHJlZSBmb3JtczoKKyMKKyMgICBQQUNLQUdFLVBSRVRUWS1OQU1FICAgICA6IFRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIGJ5IHdoaWNoIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHJlZmVycmVkIGZvciBhbnkgZGlhZ25vc3RpYyBvdXRwdXQuIEZvcgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSwgIk15IEdyZWF0IFNvZnR3YXJlIFBhY2thZ2UiLgorIyAgIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgcHJlZml4IGFwcGxpZWQgdG8gdmFyaWFibGVzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFzIGEgcmVzdWx0IG9mIHJ1bm5pbmcgdGhpcyBtYWNybyBmb3IgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4gRm9yIGV4YW1wbGUsICJNR1NQIiBoZXJlIGlzIHRyYW5zZm9ybWVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIE1HU1BfQ1BQRkxBR1MuCisjICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FICAgOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBuYW1lIHVzZWQgZm9yIHBrZy1jb25maWcsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIGFuZCBvbiB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZ3NwIiBoZXJlIGlzIHVzZWQgZm9yIC0td2l0aC1tZ3NwPURJUgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgJ3BrZy1jb25maWcgLS1jZmxhZ3MgbWdzcCcuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTkxfQVJHX1dJVEhfTElCU10sCitbCisgICAgX05MX0FSR19XSVRIX0lOQ0xVREVTX09SX0xJQlMoWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSwgWyQ1XSwgW2xpYnNdLCBbbGlicmFyaWVzXSwgW2xpYnJhcnldKWRubAorXSkKKworIyBfTkxfQVJHX1dJVEhfUEFDS0FHRShQQUNLQUdFLURJU1BPU0lUSU9OLAorIyAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNPVVJDRSwKKyMgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1QUkVUVFktTkFNRSwKKyMgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVgsCisjICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgQUNfQVJHX1dJVEggdGhhdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0bworIyBvcHRpb25hbGx5IHNwZWNpZnkgYSBkZXBlbmRlbnQgcGFja2FnZSBhcworIyAtLXdpdGgtPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT49PERJUj4gb3IgdG8gaW5kZXBlbmRlbnRseSBzcGVjaWZ5IHRoZQorIyBpbmNsdWRlIGFuZCBsaW5rIGxpYnJhcnkgZGlyZWN0b3JpZXMgaW5kZXBlbmRlbnRseSBhcworIyAtLXdpdGgtPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT4taW5jbHVkZXM9PERJUj4gYW5kCisjIC0td2l0aC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPi1saWJzPTxESVI+LgorIworIyBJZiB0aGUgcGFja2FnZSBpcyBzcGVjaWZpZWQgYXMgcmVxdWlyZWQsIHRoZSB1c2Ugb2YKKyMgLS13aXRob3V0LTxQQUNLQUdFLVNVQ0NJTkNULU5BTUU+KiBvciB0aGUgdXNlIG9mCisjIC0td2l0aC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPio9bm8gd2lsbCByZXN1bHQgaW4gYSBmYXRhbCBlcnJvci4KKyMKKyMgQXQgdGhlIHN1Y2Nlc3NmdWwgY29uY2x1c2lvbiBvZiB0aGUgZXhlY3V0aW9uIG9mIHRoZSBtYWNybywgCisjIHR3byBvciBtb3JlIHZhcmlhYmxlcyB3aWxsIGJlIGRlZmluZWQ6CisjCisjICAgKiBubF93aXRoXzxQQUNLQUdFLVNVQ0NJTkNULU5BTUU+CisjICAgKiA8UEFDS0FHRS1TVUNDSU5ULU5BTUU+X2RpcgorIyAgICogPFBBQ0tBR0UtU1VDQ0lOVC1OQU1FPl9oZWFkZXJfZGlyCisjICAgKiA8UEFDS0FHRS1TVUNDSU5ULU5BTUU+X2xpYnJhcnlfZGlyCisjCisjIFRoZSBwYWNrYWdlIGRpc3Bvc2l0aW9uIGFuZCBzb3VyY2UgYXJlIHNwZWNpZmllZCBieToKKyMKKyMgICBQQUNLQUdFLURJU1BPU0lUSU9OICAgICA6IFRoaXMgbWF5IGJlIGVpdGhlciAncmVxdWlyZWQnIGlmIHRoZSBkZXBlbmRlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgaXMgcmVxdWlyZWQgb3IgJ29wdGlvbmFsJyBpZgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90LgorIyAgIFBBQ0tBR0UtU09VUkNFICAgICAgICAgIDogVGhpcyBtYXkgYmUgZWl0aGVyICdpbnRlcm5hbCcgaWYgdGhlIGRlcGVuZGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYXkgYmUgcHJvdmlkZWQgZWl0aGVyCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGx5IG9yIGV4dGVybmFsbHkgdG8gdGhlIGN1cnJlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugb3IgJ2V4dGVybmFsJyBpZiB0aGUgZGVwZW5kZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1heSBvbmx5IGJlIHByb3ZpZGVkIG91dHNpZGUgb2YKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHBhY2thZ2UuIFRoaXMgYWxzbyBzZXJ2ZXMgYXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB3aGVyZSB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGV4cGVjdHMgdG8gZmluZCB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UuCisjCisjIFRoZSBkZXBlbmRlbnQgcGFja2FnZSBpcyBzcGVjaWZpZWQgaW4gdGhyZWUgZm9ybXM6CisjCisjICAgUEFDS0FHRS1QUkVUVFktTkFNRSAgICAgOiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSBieSB3aGljaCB0aGUgcGFja2FnZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSByZWZlcnJlZCBmb3IgYW55IGRpYWdub3N0aWMgb3V0cHV0LiBGb3IKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUsICJNeSBHcmVhdCBTb2Z0d2FyZSBQYWNrYWdlIi4KKyMgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIHByZWZpeCBhcHBsaWVkIHRvIHZhcmlhYmxlcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyBhIHJlc3VsdCBvZiBydW5uaW5nIHRoaXMgbWFjcm8gZm9yIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMuIEZvciBleGFtcGxlLCAiTUdTUCIgaGVyZSBpcyB0cmFuc2Zvcm1lZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byBNR1NQX0NQUEZMQUdTLgorIyAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSAgIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgbmFtZSB1c2VkIGZvciBwa2ctY29uZmlnLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGVtcG9yYXJ5IHZhcmlhYmxlcyBhbmQgb24gdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWdzcCIgaGVyZSBpcyB1c2VkIGZvciAtLXdpdGgtbWdzcD1ESVIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICdwa2ctY29uZmlnIC0tY2ZsYWdzIG1nc3AnLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX05MX0FSR19XSVRIX1BBQ0tBR0VdLAorWworICAgIEFDX0FSR19XSVRIKCQ1LAorCUFTX0hFTFBfU1RSSU5HKFstLXdpdGgtJDU9RElSXSwKKwkJICAgW1NwZWNpZnkgbG9jYXRpb24gb2YgdGhlICQxICQzIGhlYWRlcnMgYW5kIGxpYnJhcmllcyBAPDpAZGVmYXVsdD0kMkA6PkAuXSksCisJWworCSAgICBpZiB0ZXN0ICIke3dpdGh2YWx9IiA9ICJubyI7IHRoZW4KKyAgICAgICAgICAgICAgICBtNF9pZihbJDFdLAorICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF0sCisgICAgICAgICAgICAgICAgICAgICAgW0FDX01TR19FUlJPUihbJHtQQUNLQUdFX05BTUV9IHJlcXVpcmVzIHRoZSAkMyBwYWNrYWdlLl0pXSwKKyAgICAgICAgICAgICAgICAgICAgICBbbmxfd2l0aF8kNT0ke3dpdGh2YWx9XSkKKwkgICAgZWxpZiB0ZXN0ICIke3dpdGh2YWx9IiA9ICJpbnRlcm5hbCI7IHRoZW4KKwkJJDVfZGlyPSR7d2l0aHZhbH0KKwkJbmxfd2l0aF8kNT0ke3dpdGh2YWx9CisJICAgIGVsc2UKKwkJJDVfZGlyPSR7d2l0aHZhbH0KKwkJbmxfd2l0aF8kNT1leHRlcm5hbAorCSAgICBmaQorCV0sCisJWyQ1X2Rpcj07IG5sX3dpdGhfJDU9JDJdKQorCisgICAgIyBBbGxvdyB1c2VycyB0byBzcGVjaWZ5IGV4dGVybmFsIGhlYWRlcnMgYW5kIGxpYnJhcmllcyBpbmRlcGVuZGVudGx5LgorCisgICAgX05MX0FSR19XSVRIX0lOQ0xVREVTKFskMV0sIFskMl0sIFskM10sIFskNF0sIFskNV0pZG5sCisKKyAgICBfTkxfQVJHX1dJVEhfTElCUyhbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbJDVdKWRubAorXSkKKworIyBfTkxfV0lUSF9QQUNLQUdFKFBBQ0tBR0UtRElTUE9TSVRJT04sCisjICAgICAgICAgICAgICAgICAgUEFDS0FHRS1TT1VSQ0UsCisjICAgICAgICAgICAgICAgICAgUEFDS0FHRS1QUkVUVFktTkFNRSwKKyMgICAgICAgICAgICAgICAgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCwKKyMgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUsCisjICAgICAgICAgICAgICAgICAgW0RFRkFVTFQtUEFDS0FHRS1MSUJTXSwKKyMgICAgICAgICAgICAgICAgICBbQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUVYVEVSTkFMXSwKKyMgICAgICAgICAgICAgICAgICBbQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUlOVEVSTkFMXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlLCB3aXRoIHBrZy1jb25maWcgaWYgaXQKKyMgaXMgYXZhaWxhYmxlLCBvZiB0aGUgc3BlY2lmaWVkLCBvcHRpb25hbCBvciByZXF1aXJlZCBkZXBlbmRlbnQKKyMgcGFja2FnZS4gVGhlIGRlcGVuZGVudCBwYWNrYWdlIG1heSBiZSBwcm92aWRlZCBleHRlcm5hbGx5IG9yIG1heQorIyBleGlzdCB3aXRoaW4gdGhlIGN1cnJlbnQgcGFja2FnZSBpdHNlbGYuCisjCisjIElmIHRoZSBwYWNrYWdlIGlzIHNwZWNpZmllZCBhcyByZXF1aXJlZCwgZmFpbHVyZSB0byBmaW5kIHRoZQorIyBkZXBlbmRlbnQgcGFja2FnZSB3aWxsIHJlc3VsdCBpbiBhIGZhdGFsIGVycm9yLgorIworIyBBdCB0aGUgc3VjY2Vzc2Z1bCBjb25jbHVzaW9uIG9mIHRoZSBleGVjdXRpb24gb2YgdGhlIG1hY3JvLCB0aHJlZQorIyB2YXJpYWJsZXMgd2lsbCBiZSBkZWZpbmVkOgorIworIyAgICogPFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYPl9DUFBGTEFHUworIyAgICogPFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYPl9MREZMQUdTCisjICAgKiA8UEFDS0FHRS1WQVJJQUJMRS1QUkVGSVg+X0xJQlMKKyMKKyMgSW4gYWRkaXRpb24sIHRoZSB2YXJpYWJsZToKKyMKKyMgICAqIG5sX3dpdGhfPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT4KKyMKKyMgd2lsbCB1bmNvbmRpdGlvbmFsbHkgYmUgc2V0IHRvIHRoZSBzb3VyY2Ugb2YgdGhlIHBhY2thZ2UgaWYgaXQgaXMgdG8KKyMgYmUgdXNlZCBhbmQgaXMgZm91bmQ7IG90aGVyd2lzZSwgJ25vJyBpZiBpdCBpcyBub3QgdG8gYmUgdXNlZC4KKyMKKyMgVGhlIHBhY2thZ2UgZGlzcG9zaXRpb24gYW5kIHNvdXJjZSBhcmUgc3BlY2lmaWVkIGJ5OgorIworIyAgIFBBQ0tBR0UtRElTUE9TSVRJT04gICAgIDogVGhpcyBtYXkgYmUgZWl0aGVyICdyZXF1aXJlZCcgaWYgdGhlIGRlcGVuZGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBpcyByZXF1aXJlZCBvciAnb3B0aW9uYWwnIGlmCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QuCisjICAgUEFDS0FHRS1TT1VSQ0UgICAgICAgICAgOiBUaGlzIG1heSBiZSBlaXRoZXIgJ2ludGVybmFsJyBpZiB0aGUgZGVwZW5kZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1heSBiZSBwcm92aWRlZCBlaXRoZXIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsbHkgb3IgZXh0ZXJuYWxseSB0byB0aGUgY3VycmVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBvciAnZXh0ZXJuYWwnIGlmIHRoZSBkZXBlbmRlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWF5IG9ubHkgYmUgcHJvdmlkZWQgb3V0c2lkZSBvZgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgcGFja2FnZS4gVGhpcyBhbHNvIHNlcnZlcyBhcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHdoZXJlIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzY3JpcHQgZXhwZWN0cyB0byBmaW5kIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS4KKyMKKyMgVGhlIGRlcGVuZGVudCBwYWNrYWdlIGlzIHNwZWNpZmllZCBpbiB0aHJlZSBmb3JtczoKKyMKKyMgICBQQUNLQUdFLVBSRVRUWS1OQU1FICAgICA6IFRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIGJ5IHdoaWNoIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHJlZmVycmVkIGZvciBhbnkgZGlhZ25vc3RpYyBvdXRwdXQuIEZvcgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSwgIk15IEdyZWF0IFNvZnR3YXJlIFBhY2thZ2UiLgorIyAgIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgcHJlZml4IGFwcGxpZWQgdG8gdmFyaWFibGVzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFzIGEgcmVzdWx0IG9mIHJ1bm5pbmcgdGhpcyBtYWNybyBmb3IgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4gRm9yIGV4YW1wbGUsICJNR1NQIiBoZXJlIGlzIHRyYW5zZm9ybWVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIE1HU1BfQ1BQRkxBR1MuCisjICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FICAgOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBuYW1lIHVzZWQgZm9yIHBrZy1jb25maWcsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIGFuZCBvbiB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZ3NwIiBoZXJlIGlzIHVzZWQgZm9yIC0td2l0aC1tZ3NwPURJUgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgJ3BrZy1jb25maWcgLS1jZmxhZ3MgbWdzcCcuCisjCisjIEluIGFkZGl0aW9uLCBpZiBhbnkgYWRkaXRpb25hbCwgZGVmYXVsdCBsaW5rIGxpYnJhcmllcyBhcmUgcmVxdWlyZWQKKyMgZm9yIHVzZSB3aXRoIHRoZSBwYWNrYWdlLCB0aGVzZSBhcmUgc3BlY2lmaWVkIGFzOgorIworIyAgIERFRkFVTFQtUEFDS0FHRS1MSUJTICAgIDogRGVmYXVsdCBsaW5rIGxpYnJhcmllcyByZXF1aXJlZCBmb3IgdXNlIHdpdGgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlLiBUaGVzZSBhcmUgdXNlZCBpZiBwa2ctY29uZmlnIGlzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYXZhaWxhYmxlIG9yIGNhbm5vdCBpZGVudGlmeSBhbnkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggbGlicmFyaWVzLiBGb3IgZXhhbXBsZSwgJy1sbWdzcCcuCisjCisjIElmIHRoZSBwYWNrYWdlIGlzIHNwZWNpZmllZCwgZWl0aGVyIGludGVybmFsbHkgb3IgZXh0ZXJuYWxseSwgb3B0aW9uYWwKKyMgYWN0aW9ucyBhcmUgcnVuLgorIworIyAgIEFDVElPTlMtVE8tUlVOLUlGLU5PVC1FWFRFUk5BTCA6IE9wdGlvbmFsIGFjdGlvbnMgdG8gcnVuIGlmIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGV4dGVybmFsLgorIyAgIEFDVElPTlMtVE8tUlVOLUlGLU5PVC1JTlRFUk5BTCA6IE9wdGlvbmFsIGFjdGlvbnMgdG8gcnVuIGlmIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGludGVybmFsLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX05MX1dJVEhfUEFDS0FHRV0sCitbCisgICAgIyBJbmZsdWVudGlhbCBleHRlcm5hbCB2YXJpYWJsZXMgZm9yIHRoZSBwYWNrYWdlIHN1cHBvcnQKKworICAgIEFDX0FSR19WQVIoJDRfQ1BQRkxBR1MsIFskMyBDIHByZXByb2Nlc3NvciBmbGFnc10pCisgICAgQUNfQVJHX1ZBUigkNF9MREZMQUdTLCAgWyQzIGxpbmtlciBmbGFnc10pCisgICAgQUNfQVJHX1ZBUigkNF9MSUJTLCAgICAgWyQzIGxpbmtlciBsaWJyYXJpZXNdKQorCisgICAgIyBBbGxvdyB0aGUgdXNlciB0byBzcGVjaWZ5IGJvdGggZXh0ZXJuYWwgaGVhZGVycyBhbmQgbGlicmFyaWVzCisgICAgIyB0b2dldGhlciAob3IgaW50ZXJuYWwpLgorCisgICAgX05MX0FSR19XSVRIX1BBQ0tBR0UoWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSwgWyQ1XSlkbmwKKworICAgIGlmIHRlc3QgIiR7bmxfd2l0aF8kNX0iID09ICJubyI7IHRoZW4KKwlBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIHRoZSAkMyBwYWNrYWdlXSkKKwlBQ19NU0dfUkVTVUxUKFske25sX3dpdGhfJDV9XSkKKworICAgIGVsc2UKKwlBQ19NU0dfQ0hFQ0tJTkcoW3NvdXJjZSBvZiB0aGUgJDMgcGFja2FnZV0pCisJQUNfTVNHX1JFU1VMVChbJHtubF93aXRoXyQ1fV0pCisKKwkjIElmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBvciBoYXMgZGVmYXVsdGVkIGludG8gdGhlIGludGVybmFsICQzCisJIyBwYWNrYWdlLCBzZXQgdGhlIHZhbHVlcyBhcHByb3ByaWF0ZWx5LiBPdGhlcndpc2UsIHJ1biB0aHJvdWdoIHRoZQorCSMgdXN1YWwgcm91dGluZS4KKworCWlmIHRlc3QgIiR7bmxfd2l0aF8kNX0iID0gImludGVybmFsIjsgdGhlbgorCSAgICAkNworCisJZWxzZQorCSAgICAjIFdlIGFsd2F5cyBwcmVmZXIgY2hlY2tpbmcgdGhlIHZhbHVlcyBvZiB0aGUgdmFyaW91cyAnLS13aXRoLSQ1LS4uLicgCisJICAgICMgb3B0aW9ucyBmaXJzdCB0byB1c2luZyBwa2ctY29uZmlnIGJlY2F1c2UgdGhlIGZvcm1lciBtaWdodCBiZSB1c2VkCisJICAgICMgaW4gYSBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudCBvbiBhIHN5c3RlbSB0aGF0IGFsc28gY29udGFpbnMKKwkgICAgIyBwa2ctY29uZmlnLiBJbiBzdWNoIGEgY2FzZSwgdGhlIHVzZXIgd2FudHMgd2hhdCBoZS9zaGUgc3BlY2lmaWVkCisJICAgICMgcmF0aGVyIHRoYW4gd2hhdCBwa2ctY29uZmlnIGluZGljYXRlcy4KKworCSAgICBpZiB0ZXN0ICJ4JHskNV9kaXJ9IiAhPSAieCIgLW8gIngkeyQ1X2hlYWRlcl9kaXJ9IiAhPSAieCIgLW8gIngkeyQ1X2xpYnJhcnlfZGlyfSIgIT0gIngiOyB0aGVuCisJCQlpZiB0ZXN0ICJ4JHskNV9kaXJ9IiAhPSAieCI7IHRoZW4KKwkJICAgIGlmIHRlc3QgLWQgIiR7JDVfZGlyfSI7IHRoZW4KKwkJCWlmIHRlc3QgLWQgIiR7JDVfZGlyfS9pbmNsdWRlIjsgdGhlbgorCQkJICAgICQ0X0NQUEZMQUdTPSItSSR7JDVfZGlyfS9pbmNsdWRlIgorCQkJZWxzZQorCQkJICAgICQ0X0NQUEZMQUdTPSItSSR7JDVfZGlyfSIKKwkJCWZpCisKKwkJCWlmIHRlc3QgLWQgIiR7JDVfZGlyfS9saWIiOyB0aGVuCisJCQkgICAgJDRfTERGTEFHUz0iLUwkeyQ1X2Rpcn0vbGliIgorCQkJZWxzZQorCQkJICAgICQ0X0xERkxBR1M9Ii1MJHskNV9kaXJ9IgorCQkJZmkKKwkJICAgIGVsc2UKKwkJCUFDX01TR19FUlJPUihbTm8gc3VjaCBkaXJlY3RvcnkgJHskNV9kaXJ9XSkKKwkJICAgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAieCR7JDVfaGVhZGVyX2Rpcn0iICE9ICJ4IjsgdGhlbgorCQkgICAgaWYgdGVzdCAtZCAiJHskNV9oZWFkZXJfZGlyfSI7IHRoZW4KKwkJCSQ0X0NQUEZMQUdTPSItSSR7JDVfaGVhZGVyX2Rpcn0iCisJCSAgICBlbHNlCisJCQlBQ19NU0dfRVJST1IoW05vIHN1Y2ggZGlyZWN0b3J5ICR7JDVfaGVhZGVyX2Rpcn1dKQorCQkgICAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICJ4JHskNV9saWJyYXJ5X2Rpcn0iICE9ICJ4IjsgdGhlbgorCQkgICAgaWYgdGVzdCAtZCAiJHskNV9saWJyYXJ5X2Rpcn0iOyB0aGVuCisJCQkkNF9MREZMQUdTPSItTCR7JDVfbGlicmFyeV9kaXJ9IgorCQkgICAgZWxzZQorCQkJQUNfTVNHX0VSUk9SKFtObyBzdWNoIGRpcmVjdG9yeSAkeyQ1X2xpYnJhcnlfZGlyfV0pCisJCSAgICBmaQorCQlmaQorCisJCSQ0X0xJQlM9IiR7JDRfTERGTEFHU30gJDYiCisKKwkgICAgZWxpZiB0ZXN0ICJ4JHtQS0dfQ09ORklHfSIgIT0gIngiOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgJHtQS0dfQ09ORklHfSAtLWV4aXN0cyAiJDUiOyB0aGVuCisJCSAgICAkNF9DUFBGTEFHUz0iYCR7UEtHX0NPTkZJR30gLS1jZmxhZ3MgJDVgIgorCQkgICAgJDRfTERGTEFHUz0iYCR7UEtHX0NPTkZJR30gLS1saWJzLW9ubHktTCAkNWAiCisJCSAgICAkNF9MSUJTPSJgJHtQS0dfQ09ORklHfSAtLWxpYnMtb25seS1sICQ1YCIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG00X2lmKFskMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kIHRoZSAkNSBwYWNrYWdlIHdpdGggJHtQS0dfQ09ORklHfS4gJHtQQUNLQUdFX05BTUV9IHJlcXVpcmVzIHRoZSAkNSBwYWNrYWdlLiBUcnkgaW5zdGFsbGluZyB0aGUgcGFja2FnZSBvciB1c2UgdGhlIHJlbGV2YW50IC0td2l0aCBvcHRpb25zIHRvIGNvbmZpZ3VyZS5dKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtubF93aXRoXyQ1PSJubyJdKQorICAgICAgICAgICAgICAgIGZpCisKKwkgICAgZWxzZQorICAgICAgICAgICAgICAgIG00X2lmKFskMV0sCisgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXSwKKyAgICAgICAgICAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFtDYW5ub3QgZmluZCB0aGUgJDMgcGFja2FnZS4gJHtQQUNLQUdFX05BTUV9IHJlcXVpcmVzIHRoZSAkMyBwYWNrYWdlLl0pXSwKKyAgICAgICAgICAgICAgICAgICAgICBbbmxfd2l0aF8kNT0ibm8iXSkKKwkgICAgZmkKKwlmaQorCisJQUNfU1VCU1QoJDRfQ1BQRkxBR1MpCisJQUNfU1VCU1QoJDRfTERGTEFHUykKKwlBQ19TVUJTVCgkNF9MSUJTKQorCisJaWYgdGVzdCAiJHtubF93aXRoXyQ1fSIgIT0gImludGVybmFsIiAtYSAiJHtubF93aXRoXyQ1fSIgIT0gIm5vIjsgdGhlbgorCSAgICBubF9zYXZlZF9DUFBGTEFHUz0iJHtDUFBGTEFHU30iCisJICAgIG5sX3NhdmVkX0xERkxBR1M9IiR7TERGTEFHU30iCisJICAgIG5sX3NhdmVkX0xJQlM9IiR7TElCU30iCisKKwkgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9ICR7JDRfQ1BQRkxBR1N9IgorCSAgICBMREZMQUdTPSIke0xERkxBR1N9ICR7JDRfTERGTEFHU30iCisJICAgIExJQlM9IiR7TElCU30gJHskNF9MSUJTfSIKKworCQkkOAorCisJICAgIENQUEZMQUdTPSIke25sX3NhdmVkX0NQUEZMQUdTfSIKKwkgICAgTERGTEFHUz0iJHtubF9zYXZlZF9MREZMQUdTfSIKKwkgICAgTElCUz0iJHtubF9zYXZlZF9MSUJTfSIKKwlmaQorICAgIGZpCitdKQorCisjIE5MX1dJVEhfUkVRVUlSRURfRVhURVJOQUxfUEFDS0FHRShQQUNLQUdFLVBSRVRUWS1OQU1FLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVgsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbREVGQVVMVC1QQUNLQUdFLUxJQlNdLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTlMtVE8tUlVOXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlLCB3aXRoIHBrZy1jb25maWcgaWYgaXQKKyMgaXMgYXZhaWxhYmxlLCBvZiB0aGUgc3BlY2lmaWVkLCByZXF1aXJlZCBleHRlcm5hbCBkZXBlbmRlbnQgcGFja2FnZS4KKyMKKyMgRmFpbHVyZSB0byBmaW5kIHRoZSBkZXBlbmRlbnQgcGFja2FnZSB3aWxsIHJlc3VsdCBpbiBhIGZhdGFsIGVycm9yLgorIworIyBUaGUgZGVwZW5kZW50IHBhY2thZ2UgaXMgc3BlY2lmaWVkIGluIHRocmVlIGZvcm1zOgorIworIyAgIFBBQ0tBR0UtUFJFVFRZLU5BTUUgICAgIDogVGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgYnkgd2hpY2ggdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVmZXJyZWQgZm9yIGFueSBkaWFnbm9zdGljIG91dHB1dC4gRm9yCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlLCAiTXkgR3JlYXQgU29mdHdhcmUgUGFja2FnZSIuCisjICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVggOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBwcmVmaXggYXBwbGllZCB0byB2YXJpYWJsZXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgYSByZXN1bHQgb2YgcnVubmluZyB0aGlzIG1hY3JvIGZvciB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLiBGb3IgZXhhbXBsZSwgIk1HU1AiIGhlcmUgaXMgdHJhbnNmb3JtZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gTUdTUF9DUFBGTEFHUy4KKyMgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUgICA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIG5hbWUgdXNlZCBmb3IgcGtnLWNvbmZpZywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgYW5kIG9uIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGNvbW1hbmQgbGluZS4gIEZvciBleGFtcGxlLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1nc3AiIGhlcmUgaXMgdXNlZCBmb3IgLS13aXRoLW1nc3A9RElSCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAncGtnLWNvbmZpZyAtLWNmbGFncyBtZ3NwJy4KKyMKKyMgSW4gYWRkaXRpb24sIGlmIGFueSBhZGRpdGlvbmFsLCBkZWZhdWx0IGxpbmsgbGlicmFyaWVzIGFyZSByZXF1aXJlZAorIyBmb3IgdXNlIHdpdGggdGhlIHBhY2thZ2UsIHRoZXNlIGFyZSBzcGVjaWZpZWQgYXM6CisjCisjICAgREVGQVVMVC1QQUNLQUdFLUxJQlMgICAgOiBEZWZhdWx0IGxpbmsgbGlicmFyaWVzIHJlcXVpcmVkIGZvciB1c2Ugd2l0aAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2UuIFRoZXNlIGFyZSB1c2VkIGlmIHBrZy1jb25maWcgaXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBhdmFpbGFibGUgb3IgY2Fubm90IGlkZW50aWZ5IGFueQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBsaWJyYXJpZXMuIEZvciBleGFtcGxlLCAnLWxtZ3NwJy4KKyMKKyMgSWYgdGhlIHBhY2thZ2UgaXMgc3BlY2lmaWVkLCBvcHRpb25hbCBhY3Rpb25zIGFyZSBydW4uCisjCisjICAgQUNUSU9OUy1UTy1SVU4tSUYtRk9VTkQgOiBPcHRpb25hbCBhY3Rpb25zIHRvIHJ1biBpZiB0aGUgcGFja2FnZSBpcyBmb3VuZC4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW05MX1dJVEhfUkVRVUlSRURfRVhURVJOQUxfUEFDS0FHRV0sCitbCisgICAgX05MX1dJVEhfUEFDS0FHRShbcmVxdWlyZWRdLCBbZXh0ZXJuYWxdLCBbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbOl0sIFskNV0pZG5sCitdKQorCisjIE5MX1dJVEhfT1BUSU9OQUxfRVhURVJOQUxfUEFDS0FHRShQQUNLQUdFLVBSRVRUWS1OQU1FLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVgsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbREVGQVVMVC1QQUNLQUdFLUxJQlNdLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTlMtVE8tUlVOXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlLCB3aXRoIHBrZy1jb25maWcgaWYgaXQKKyMgaXMgYXZhaWxhYmxlLCBvZiB0aGUgc3BlY2lmaWVkLCBvcHRpb25hbCBleHRlcm5hbCBkZXBlbmRlbnQgcGFja2FnZS4KKyMKKyMgRmFpbHVyZSB0byBmaW5kIHRoZSBkZXBlbmRlbnQgcGFja2FnZSB3aWxsIE5PVCByZXN1bHQgaW4gYSBmYXRhbCBlcnJvci4KKyMKKyMgVGhlIGRlcGVuZGVudCBwYWNrYWdlIGlzIHNwZWNpZmllZCBpbiB0aHJlZSBmb3JtczoKKyMKKyMgICBQQUNLQUdFLVBSRVRUWS1OQU1FICAgICA6IFRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIGJ5IHdoaWNoIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHJlZmVycmVkIGZvciBhbnkgZGlhZ25vc3RpYyBvdXRwdXQuIEZvcgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSwgIk15IEdyZWF0IFNvZnR3YXJlIFBhY2thZ2UiLgorIyAgIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgcHJlZml4IGFwcGxpZWQgdG8gdmFyaWFibGVzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFzIGEgcmVzdWx0IG9mIHJ1bm5pbmcgdGhpcyBtYWNybyBmb3IgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4gRm9yIGV4YW1wbGUsICJNR1NQIiBoZXJlIGlzIHRyYW5zZm9ybWVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIE1HU1BfQ1BQRkxBR1MuCisjICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FICAgOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBuYW1lIHVzZWQgZm9yIHBrZy1jb25maWcsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIGFuZCBvbiB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZ3NwIiBoZXJlIGlzIHVzZWQgZm9yIC0td2l0aC1tZ3NwPURJUgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgJ3BrZy1jb25maWcgLS1jZmxhZ3MgbWdzcCcuCisjCisjIEluIGFkZGl0aW9uLCBpZiBhbnkgYWRkaXRpb25hbCwgZGVmYXVsdCBsaW5rIGxpYnJhcmllcyBhcmUgcmVxdWlyZWQKKyMgZm9yIHVzZSB3aXRoIHRoZSBwYWNrYWdlLCB0aGVzZSBhcmUgc3BlY2lmaWVkIGFzOgorIworIyAgIERFRkFVTFQtUEFDS0FHRS1MSUJTICAgIDogRGVmYXVsdCBsaW5rIGxpYnJhcmllcyByZXF1aXJlZCBmb3IgdXNlIHdpdGgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlLiBUaGVzZSBhcmUgdXNlZCBpZiBwa2ctY29uZmlnIGlzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYXZhaWxhYmxlIG9yIGNhbm5vdCBpZGVudGlmeSBhbnkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggbGlicmFyaWVzLiBGb3IgZXhhbXBsZSwgJy1sbWdzcCcuCisjCisjIElmIHRoZSBwYWNrYWdlIGlzIHNwZWNpZmllZCwgb3B0aW9uYWwgYWN0aW9ucyBhcmUgcnVuLgorIworIyAgIEFDVElPTlMtVE8tUlVOLUlGLUZPVU5EIDogT3B0aW9uYWwgYWN0aW9ucyB0byBydW4gaWYgdGhlIHBhY2thZ2UgaXMgZm91bmQuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtOTF9XSVRIX09QVElPTkFMX0VYVEVSTkFMX1BBQ0tBR0VdLAorWworICAgIF9OTF9XSVRIX1BBQ0tBR0UoW29wdGlvbmFsXSwgW2V4dGVybmFsXSwgWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSwgWzpdLCBbJDVdKWRubAorXSkKKworIyBOTF9XSVRIX1JFUVVJUkVEX0lOVEVSTkFMX1BBQ0tBR0UoUEFDS0FHRS1QUkVUVFktTkFNRSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RFRkFVTFQtUEFDS0FHRS1MSUJTXSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQ1RJT05TLVRPLVJVTi1JRi1OT1QtRVhURVJOQUxdLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTlMtVE8tUlVOLUlGLU5PVC1JTlRFUk5BTF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHRlc3QgZm9yIHRoZSBwcmVzZW5jZSwgd2l0aCBwa2ctY29uZmlnIGlmIGl0CisjIGlzIGF2YWlsYWJsZSwgb2YgdGhlIHNwZWNpZmllZCwgcmVxdWlyZWQgZGVwZW5kZW50IHBhY2thZ2UuIFRoZSBkZXBlbmRlbnQKKyMgcGFja2FnZSBtYXkgYmUgcHJvdmlkZWQgZXh0ZXJuYWxseSBvciBtYXkgZXhpc3Qgd2l0aGluIHRoZSBjdXJyZW50CisjIHBhY2thZ2UgaXRzZWxmLgorIworIyBGYWlsdXJlIHRvIGZpbmQgdGhlIGRlcGVuZGVudCBwYWNrYWdlIHdpbGwgcmVzdWx0IGluIGEgZmF0YWwgZXJyb3IuCisjCisjIFRoZSBkZXBlbmRlbnQgcGFja2FnZSBpcyBzcGVjaWZpZWQgaW4gdGhyZWUgZm9ybXM6CisjCisjICAgUEFDS0FHRS1QUkVUVFktTkFNRSAgICAgOiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSBieSB3aGljaCB0aGUgcGFja2FnZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSByZWZlcnJlZCBmb3IgYW55IGRpYWdub3N0aWMgb3V0cHV0LiBGb3IKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUsICJNeSBHcmVhdCBTb2Z0d2FyZSBQYWNrYWdlIi4KKyMgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIHByZWZpeCBhcHBsaWVkIHRvIHZhcmlhYmxlcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyBhIHJlc3VsdCBvZiBydW5uaW5nIHRoaXMgbWFjcm8gZm9yIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMuIEZvciBleGFtcGxlLCAiTUdTUCIgaGVyZSBpcyB0cmFuc2Zvcm1lZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byBNR1NQX0NQUEZMQUdTLgorIyAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSAgIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgbmFtZSB1c2VkIGZvciBwa2ctY29uZmlnLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGVtcG9yYXJ5IHZhcmlhYmxlcyBhbmQgb24gdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWdzcCIgaGVyZSBpcyB1c2VkIGZvciAtLXdpdGgtbWdzcD1ESVIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICdwa2ctY29uZmlnIC0tY2ZsYWdzIG1nc3AnLgorIworIyBJbiBhZGRpdGlvbiwgaWYgYW55IGFkZGl0aW9uYWwsIGRlZmF1bHQgbGluayBsaWJyYXJpZXMgYXJlIHJlcXVpcmVkCisjIGZvciB1c2Ugd2l0aCB0aGUgcGFja2FnZSwgdGhlc2UgYXJlIHNwZWNpZmllZCBhczoKKyMKKyMgICBERUZBVUxULVBBQ0tBR0UtTElCUyAgICA6IERlZmF1bHQgbGluayBsaWJyYXJpZXMgcmVxdWlyZWQgZm9yIHVzZSB3aXRoCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFja2FnZS4gVGhlc2UgYXJlIHVzZWQgaWYgcGtnLWNvbmZpZyBpcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2YWlsYWJsZSBvciBjYW5ub3QgaWRlbnRpZnkgYW55CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGxpYnJhcmllcy4gRm9yIGV4YW1wbGUsICctbG1nc3AnLgorIworIyBJZiB0aGUgcGFja2FnZSBpcyBzcGVjaWZpZWQsIGVpdGhlciBpbnRlcm5hbGx5IG9yIGV4dGVybmFsbHksIG9wdGlvbmFsCisjIGFjdGlvbnMgYXJlIHJ1bi4KKyMKKyMgICBBQ1RJT05TLVRPLVJVTi1JRi1OT1QtRVhURVJOQUwgOiBPcHRpb25hbCBhY3Rpb25zIHRvIHJ1biBpZiB0aGUgcGFja2FnZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBleHRlcm5hbC4KKyMgICBBQ1RJT05TLVRPLVJVTi1JRi1OT1QtSU5URVJOQUwgOiBPcHRpb25hbCBhY3Rpb25zIHRvIHJ1biBpZiB0aGUgcGFja2FnZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBpbnRlcm5hbC4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW05MX1dJVEhfUkVRVUlSRURfSU5URVJOQUxfUEFDS0FHRV0sCitbCisgICAgX05MX1dJVEhfUEFDS0FHRShbcmVxdWlyZWRdLCBbaW50ZXJuYWxdLCBbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbJDVdLCBbJDZdKWRubAorXSkKKworIyBOTF9XSVRIX09QVElPTkFMX0lOVEVSTkFMX1BBQ0tBR0UoUEFDS0FHRS1QUkVUVFktTkFNRSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RFRkFVTFQtUEFDS0FHRS1MSUJTXSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQ1RJT05TLVRPLVJVTi1JRi1OT1QtRVhURVJOQUxdLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTlMtVE8tUlVOLUlGLU5PVC1JTlRFUk5BTF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHRlc3QgZm9yIHRoZSBwcmVzZW5jZSwgd2l0aCBwa2ctY29uZmlnIGlmIGl0CisjIGlzIGF2YWlsYWJsZSwgb2YgdGhlIHNwZWNpZmllZCwgb3B0aW9uYWwgZGVwZW5kZW50IHBhY2thZ2UuIFRoZSBkZXBlbmRlbnQKKyMgcGFja2FnZSBtYXkgYmUgcHJvdmlkZWQgZXh0ZXJuYWxseSBvciBtYXkgZXhpc3Qgd2l0aGluIHRoZSBjdXJyZW50CisjIHBhY2thZ2UgaXRzZWxmLgorIworIyBGYWlsdXJlIHRvIGZpbmQgdGhlIGRlcGVuZGVudCBwYWNrYWdlIHdpbGwgTk9UIHJlc3VsdCBpbiBhIGZhdGFsIGVycm9yLgorIworIyBUaGUgZGVwZW5kZW50IHBhY2thZ2UgaXMgc3BlY2lmaWVkIGluIHRocmVlIGZvcm1zOgorIworIyAgIFBBQ0tBR0UtUFJFVFRZLU5BTUUgICAgIDogVGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgYnkgd2hpY2ggdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVmZXJyZWQgZm9yIGFueSBkaWFnbm9zdGljIG91dHB1dC4gRm9yCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlLCAiTXkgR3JlYXQgU29mdHdhcmUgUGFja2FnZSIuCisjICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVggOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBwcmVmaXggYXBwbGllZCB0byB2YXJpYWJsZXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgYSByZXN1bHQgb2YgcnVubmluZyB0aGlzIG1hY3JvIGZvciB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLiBGb3IgZXhhbXBsZSwgIk1HU1AiIGhlcmUgaXMgdHJhbnNmb3JtZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gTUdTUF9DUFBGTEFHUy4KKyMgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUgICA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIG5hbWUgdXNlZCBmb3IgcGtnLWNvbmZpZywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgYW5kIG9uIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGNvbW1hbmQgbGluZS4gIEZvciBleGFtcGxlLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1nc3AiIGhlcmUgaXMgdXNlZCBmb3IgLS13aXRoLW1nc3A9RElSCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAncGtnLWNvbmZpZyAtLWNmbGFncyBtZ3NwJy4KKyMKKyMgSW4gYWRkaXRpb24sIGlmIGFueSBhZGRpdGlvbmFsLCBkZWZhdWx0IGxpbmsgbGlicmFyaWVzIGFyZSByZXF1aXJlZAorIyBmb3IgdXNlIHdpdGggdGhlIHBhY2thZ2UsIHRoZXNlIGFyZSBzcGVjaWZpZWQgYXM6CisjCisjICAgREVGQVVMVC1QQUNLQUdFLUxJQlMgICAgOiBEZWZhdWx0IGxpbmsgbGlicmFyaWVzIHJlcXVpcmVkIGZvciB1c2Ugd2l0aAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2UuIFRoZXNlIGFyZSB1c2VkIGlmIHBrZy1jb25maWcgaXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBhdmFpbGFibGUgb3IgY2Fubm90IGlkZW50aWZ5IGFueQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBsaWJyYXJpZXMuIEZvciBleGFtcGxlLCAnLWxtZ3NwJy4KKyMKKyMgSWYgdGhlIHBhY2thZ2UgaXMgc3BlY2lmaWVkLCBlaXRoZXIgaW50ZXJuYWxseSBvciBleHRlcm5hbGx5LCBvcHRpb25hbAorIyBhY3Rpb25zIGFyZSBydW4uCisjCisjICAgQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUVYVEVSTkFMIDogT3B0aW9uYWwgYWN0aW9ucyB0byBydW4gaWYgdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgZXh0ZXJuYWwuCisjICAgQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUlOVEVSTkFMIDogT3B0aW9uYWwgYWN0aW9ucyB0byBydW4gaWYgdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgaW50ZXJuYWwuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtOTF9XSVRIX09QVElPTkFMX0lOVEVSTkFMX1BBQ0tBR0VdLAorWworICAgIF9OTF9XSVRIX1BBQ0tBR0UoW29wdGlvbmFsXSwgW2ludGVybmFsXSwgWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSwgWyQ1XSwgWyQ2XSlkbmwKK10pCisKKyMgTkxfV0lUSF9QQUNLQUdFKFBBQ0tBR0UtUFJFVFRZLU5BTUUsIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYLAorIyAgICAgICAgICAgICAgICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FLCBbREVGQVVMVC1QQUNLQUdFLUxJQlNdLAorIyAgICAgICAgICAgICAgICAgW0FDVElPTlMtVE8tUlVOLUlGLU5PVC1FWFRFUk5BTF0sCisjICAgICAgICAgICAgICAgICBbQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUlOVEVSTkFMXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlLCB3aXRoIHBrZy1jb25maWcgaWYgaXQKKyMgaXMgYXZhaWxhYmxlLCBvZiB0aGUgc3BlY2lmaWVkIGRlcGVuZGVudCBwYWNrYWdlLiBUaGUgZGVwZW5kZW50CisjIHBhY2thZ2UgbWF5IGJlIHByb3ZpZGVkIGV4dGVybmFsbHkgb3IgbWF5IGV4aXN0IHdpdGhpbiB0aGUgY3VycmVudAorIyBwYWNrYWdlIGl0c2VsZi4KKyMKKyMgVGhlIGRlcGVuZGVudCBwYWNrYWdlIGlzIHNwZWNpZmllZCBpbiB0aHJlZSBmb3JtczoKKyMKKyMgICBQQUNLQUdFLVBSRVRUWS1OQU1FICAgICA6IFRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIGJ5IHdoaWNoIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHJlZmVycmVkIGZvciBhbnkgZGlhZ25vc3RpYyBvdXRwdXQuIEZvcgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSwgIk15IEdyZWF0IFNvZnR3YXJlIFBhY2thZ2UiLgorIyAgIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgcHJlZml4IGFwcGxpZWQgdG8gdmFyaWFibGVzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFzIGEgcmVzdWx0IG9mIHJ1bm5pbmcgdGhpcyBtYWNybyBmb3IgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4gRm9yIGV4YW1wbGUsICJNR1NQIiBoZXJlIGlzIHRyYW5zZm9ybWVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIE1HU1BfQ1BQRkxBR1MuCisjICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FICAgOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBuYW1lIHVzZWQgZm9yIHBrZy1jb25maWcsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIGFuZCBvbiB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZ3NwIiBoZXJlIGlzIHVzZWQgZm9yIC0td2l0aC1tZ3NwPURJUgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgJ3BrZy1jb25maWcgLS1jZmxhZ3MgbWdzcCcuCisjCisjIEluIGFkZGl0aW9uLCBpZiBhbnkgYWRkaXRpb25hbCwgZGVmYXVsdCBsaW5rIGxpYnJhcmllcyBhcmUgcmVxdWlyZWQKKyMgZm9yIHVzZSB3aXRoIHRoZSBwYWNrYWdlLCB0aGVzZSBhcmUgc3BlY2lmaWVkIGFzOgorIworIyAgIERFRkFVTFQtUEFDS0FHRS1MSUJTICAgIDogRGVmYXVsdCBsaW5rIGxpYnJhcmllcyByZXF1aXJlZCBmb3IgdXNlIHdpdGgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlLiBUaGVzZSBhcmUgdXNlZCBpZiBwa2ctY29uZmlnIGlzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYXZhaWxhYmxlIG9yIGNhbm5vdCBpZGVudGlmeSBhbnkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggbGlicmFyaWVzLiBGb3IgZXhhbXBsZSwgJy1sbWdzcCcuCisjCisjIElmIHRoZSBwYWNrYWdlIGlzIHNwZWNpZmllZCwgZWl0aGVyIGludGVybmFsbHkgb3IgZXh0ZXJuYWxseSwgb3B0aW9uYWwKKyMgYWN0aW9ucyBhcmUgcnVuLgorIworIyAgIEFDVElPTlMtVE8tUlVOLUlGLU5PVC1FWFRFUk5BTCA6IE9wdGlvbmFsIGFjdGlvbnMgdG8gcnVuIGlmIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGV4dGVybmFsLgorIyAgIEFDVElPTlMtVE8tUlVOLUlGLU5PVC1JTlRFUk5BTCA6IE9wdGlvbmFsIGFjdGlvbnMgdG8gcnVuIGlmIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGludGVybmFsLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTkxfV0lUSF9QQUNLQUdFXSwKK1sKKyAgICBtNF93YXJuKG9ic29sZXRlLCBbJDA6IHRoaXMgbWFjcm8gaGFzIGJlZW4gZGVwcmVjYXRlZC4gQ29uc2lkZXIgdXNpbmcgTkxfV0lUSF9SRVFVSVJFRF9JTlRFUk5BTF9QQUNLQUdFIGluc3RlYWQuXSkKKworICAgIE5MX1dJVEhfUkVRVUlSRURfSU5URVJOQUxfUEFDS0FHRShbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbJDVdLCBbJDZdKWRubAorXSkKKworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L3BrZy5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvcGtnLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzE4NzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L3BrZy5tNApAQCAtMCwwICsxLDE1OSBAQAorIyBwa2cubTQgLSBNYWNyb3MgdG8gbG9jYXRlIGFuZCB1dGlsaXNlIHBrZy1jb25maWcuICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBzZXJpYWwgMSAocGtnLWNvbmZpZy0wLjI0KQorIyAKKyMgQ29weXJpZ2h0IMKpIDIwMDQgU2NvdHQgSmFtZXMgUmVtbmFudCA8c2NvdHRAbmV0c3BsaXQuY29tPi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFBLR19QUk9HX1BLR19DT05GSUcoW01JTi1WRVJTSU9OXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19QUk9HX1BLR19DT05GSUddLAorW200X3BhdHRlcm5fZm9yYmlkKFteXz9QS0dfW0EtWl9dKyRdKQorbTRfcGF0dGVybl9hbGxvdyhbXlBLR19DT05GSUcoXyhQQVRIfExJQkRJUnxTWVNST09UX0RJUnxBTExPV19TWVNURU1fKENGTEFHU3xMSUJTKSkpPyRdKQorbTRfcGF0dGVybl9hbGxvdyhbXlBLR19DT05GSUdfKERJU0FCTEVfVU5JTlNUQUxMRUR8VE9QX0JVSUxEX0RJUnxERUJVR19TUEVXKSRdKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR10sIFtwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eV0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHX1BBVEhdLCBbZGlyZWN0b3JpZXMgdG8gYWRkIHRvIHBrZy1jb25maWcncyBzZWFyY2ggcGF0aF0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHX0xJQkRJUl0sIFtwYXRoIG92ZXJyaWRpbmcgcGtnLWNvbmZpZydzIGJ1aWx0LWluIHNlYXJjaCBwYXRoXSkKKworaWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9ICJ4c2V0IjsgdGhlbgorCUFDX1BBVEhfVE9PTChbUEtHX0NPTkZJR10sIFtwa2ctY29uZmlnXSkKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPW00X2RlZmF1bHQoWyQxXSwgWzAuOS4wXSkKKwlBQ19NU0dfQ0hFQ0tJTkcoW3BrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbl0pCisJaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisJCUFDX01TR19SRVNVTFQoW3llc10pCisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKFtub10pCisJCVBLR19DT05GSUc9IiIKKwlmaQorZmlbXWRubAorXSkjIFBLR19QUk9HX1BLR19DT05GSUcKKworIyBQS0dfQ0hFQ0tfRVhJU1RTKE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjCisjIENoZWNrIHRvIHNlZSB3aGV0aGVyIGEgcGFydGljdWxhciBzZXQgb2YgbW9kdWxlcyBleGlzdHMuICBTaW1pbGFyCisjIHRvIFBLR19DSEVDS19NT0RVTEVTKCksIGJ1dCBkb2VzIG5vdCBzZXQgdmFyaWFibGVzIG9yIHByaW50IGVycm9ycy4KKyMKKyMgUGxlYXNlIHJlbWVtYmVyIHRoYXQgbTQgZXhwYW5kcyBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyMgb25seSBhdCB0aGUgZmlyc3Qgb2NjdXJlbmNlIGluIGNvbmZpZ3VyZS5hYywgc28gaWYgdGhlIGZpcnN0IHBsYWNlCisjIGl0J3MgY2FsbGVkIG1pZ2h0IGJlIHNraXBwZWQgKHN1Y2ggYXMgaWYgaXQgaXMgd2l0aGluIGFuICJpZiIsIHlvdQorIyBoYXZlIHRvIGNhbGwgUEtHX0NIRUNLX0VYSVNUUyBtYW51YWxseQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19DSEVDS19FWElTVFNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICBBQ19SVU5fTE9HKFskUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJDEiXSk7IHRoZW4KKyAgbTRfZGVmYXVsdChbJDJdLCBbOl0pCittNF9pZnZhbG4oWyQzXSwgW2Vsc2UKKyAgJDNdKWRubAorZmldKQorCisjIF9QS0dfQ09ORklHKFtWQVJJQUJMRV0sIFtDT01NQU5EXSwgW01PRFVMRVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX1BLR19DT05GSUddLAorW2lmIHRlc3QgLW4gIiQkMSI7IHRoZW4KKyAgICBwa2dfY3ZfW10kMT0iJCQxIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgUEtHX0NIRUNLX0VYSVNUUyhbJDNdLAorICAgICAgICAgICAgICAgICAgICAgW3BrZ19jdl9bXSQxPWAkUEtHX0NPTkZJRyAtLVtdJDIgIiQzIiAyPi9kZXYvbnVsbGAKKwkJICAgICAgdGVzdCAieCQ/IiAhPSAieDAiICYmIHBrZ19mYWlsZWQ9eWVzIF0sCisJCSAgICAgW3BrZ19mYWlsZWQ9eWVzXSkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaVtdZG5sCitdKSMgX1BLR19DT05GSUcKKworIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURURdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQoraWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpW11kbmwKK10pIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKworCisjIFBLR19DSEVDS19NT0RVTEVTKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sCisjIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMKKyMgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhlIGZpcnN0IGNhbGwgdG8KKyMgUEtHX0NIRUNLX01PRFVMRVMgbWlnaHQgbm90IGhhcHBlbiwgeW91IHNob3VsZCBiZSBzdXJlIHRvIGluY2x1ZGUgYW4KKyMgZXhwbGljaXQgY2FsbCB0byBQS0dfUFJPR19QS0dfQ09ORklHIGluIHlvdXIgY29uZmlndXJlLmFjCisjCisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX0NIRUNLX01PRFVMRVNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAorQUNfQVJHX1ZBUihbJDFdW19DRkxBR1NdLCBbQyBjb21waWxlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCitBQ19BUkdfVkFSKFskMV1bX0xJQlNdLCBbbGlua2VyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKKworcGtnX2ZhaWxlZD1ubworQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorCitfUEtHX0NPTkZJRyhbJDFdW19DRkxBR1NdLCBbY2ZsYWdzXSwgWyQyXSkKK19QS0dfQ09ORklHKFskMV1bX0xJQlNdLCBbbGlic10sIFskMl0pCisKK200X2RlZmluZShbX1BLR19URVhUXSwgW0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgJDFbXV9DRkxBR1MKK2FuZCAkMVtdX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuXSkKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCUFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAtLWNmbGFncyAtLWxpYnMgIiQyIiAyPiYxYAorICAgICAgICBlbHNlIAorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAtLWNmbGFncyAtLWxpYnMgIiQyIiAyPiYxYAorICAgICAgICBmaQorCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncworCWVjaG8gIiQkMVtdX1BLR19FUlJPUlMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKworCW00X2RlZmF1bHQoWyQ0XSwgW0FDX01TR19FUlJPUigKK1tQYWNrYWdlIHJlcXVpcmVtZW50cyAoJDIpIHdlcmUgbm90IG1ldDoKKworJCQxX1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitfUEtHX1RFWFRdKVtdZG5sCisgICAgICAgIF0pCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAlBQ19NU0dfUkVTVUxUKFtub10pCisJbTRfZGVmYXVsdChbJDRdLCBbQUNfTVNHX0ZBSUxVUkUoCitbVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0CitpcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCitwYXRoIHRvIHBrZy1jb25maWcuCisKK19QS0dfVEVYVAorCitUbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi5dKVtdZG5sCisgICAgICAgIF0pCitlbHNlCisJJDFbXV9DRkxBR1M9JHBrZ19jdl9bXSQxW11fQ0ZMQUdTCisJJDFbXV9MSUJTPSRwa2dfY3ZfW10kMVtdX0xJQlMKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKwkkMworZmlbXWRubAorXSkjIFBLR19DSEVDS19NT0RVTEVTCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL21pc3NpbmcgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL21pc3NpbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGI5ODk3NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbWlzc2luZwpAQCAtMCwwICsxLDIxNSBAQAorIyEgL2Jpbi9zaAorIyBDb21tb24gd3JhcHBlciBmb3IgYSBmZXcgcG90ZW50aWFsbHkgbWlzc2luZyBHTlUgcHJvZ3JhbXMuCisKK3NjcmlwdHZlcnNpb249MjAxMy0xMC0yOC4xMzsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IEZyYW4sY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPiwgMTk5Ni4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIGVjaG8gMT4mMiAiVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICBleGl0IDEKK2ZpCisKK2Nhc2UgJDEgaW4KKworICAtLWlzLWxpZ2h0d2VpZ2h0KQorICAgICMgVXNlZCBieSBvdXIgYXV0b2NvbmYgbWFjcm9zIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGF2YWlsYWJsZSBtaXNzaW5nCisgICAgIyBzY3JpcHQgaXMgbW9kZXJuIGVub3VnaC4KKyAgICBleGl0IDAKKyAgICA7OworCisgIC0tcnVuKQorICAgICMgQmFjay1jb21wYXQgd2l0aCB0aGUgY2FsbGluZyBjb252ZW50aW9uIHVzZWQgYnkgb2xkZXIgYXV0b21ha2UuCisgICAgc2hpZnQKKyAgICA7OworCisgIC1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKyAgICBlY2hvICJcCiskMCBbT1BUSU9OXS4uLiBQUk9HUkFNIFtBUkdVTUVOVF0uLi4KKworUnVuICdQUk9HUkFNIFtBUkdVTUVOVF0uLi4nLCByZXR1cm5pbmcgYSBwcm9wZXIgYWR2aWNlIHdoZW4gdGhpcyBmYWlscyBkdWUKK3RvIFBST0dSQU0gYmVpbmcgbWlzc2luZyBvciB0b28gb2xkLgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisKK1N1cHBvcnRlZCBQUk9HUkFNIHZhbHVlczoKKyAgYWNsb2NhbCAgIGF1dG9jb25mICBhdXRvaGVhZGVyICAgYXV0b200dGUgIGF1dG9tYWtlICBtYWtlaW5mbworICBiaXNvbiAgICAgeWFjYyAgICAgIGZsZXggICAgICAgICBsZXggICAgICAgaGVscDJtYW4KKworVmVyc2lvbiBzdWZmaXhlcyB0byBQUk9HUkFNIGFzIHdlbGwgYXMgdGhlIHByZWZpeGVzICdnbnUtJywgJ2dudScsIGFuZAorJ2cnIGFyZSBpZ25vcmVkIHdoZW4gY2hlY2tpbmcgdGhlIG5hbWUuCisKK1NlbmQgYnVnIHJlcG9ydHMgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCisgICAgZXhpdCAkPworICAgIDs7CisKKyAgLXZ8LS12fC0tdmV8LS12ZXJ8LS12ZXJzfC0tdmVyc2l8LS12ZXJzaW98LS12ZXJzaW9uKQorICAgIGVjaG8gIm1pc3NpbmcgJHNjcmlwdHZlcnNpb24gKEdOVSBBdXRvbWFrZSkiCisgICAgZXhpdCAkPworICAgIDs7CisKKyAgLSopCisgICAgZWNobyAxPiYyICIkMDogdW5rbm93biAnJDEnIG9wdGlvbiIKKyAgICBlY2hvIDE+JjIgIlRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICBleGl0IDEKKyAgICA7OworCitlc2FjCisKKyMgUnVuIHRoZSBnaXZlbiBwcm9ncmFtLCByZW1lbWJlciBpdHMgZXhpdCBzdGF0dXMuCisiJEAiOyBzdD0kPworCisjIElmIGl0IHN1Y2NlZWRlZCwgd2UgYXJlIGRvbmUuCit0ZXN0ICRzdCAtZXEgMCAmJiBleGl0IDAKKworIyBBbHNvIGV4aXQgbm93IGlmIHdlIGl0IGZhaWxlZCAob3Igd2Fzbid0IGZvdW5kKSwgYW5kICctLXZlcnNpb24nIHdhcworIyBwYXNzZWQ7IHN1Y2ggYW4gb3B0aW9uIGlzIHBhc3NlZCBtb3N0IGxpa2VseSB0byBkZXRlY3Qgd2hldGhlciB0aGUKKyMgcHJvZ3JhbSBpcyBwcmVzZW50IGFuZCB3b3Jrcy4KK2Nhc2UgJDIgaW4gLS12ZXJzaW9ufC0taGVscCkgZXhpdCAkc3Q7OyBlc2FjCisKKyMgRXhpdCBjb2RlIDYzIG1lYW5zIHZlcnNpb24gbWlzbWF0Y2guICBUaGlzIG9mdGVuIGhhcHBlbnMgd2hlbiB0aGUgdXNlcgorIyB0cmllcyB0byB1c2UgYW4gYW5jaWVudCB2ZXJzaW9uIG9mIGEgdG9vbCBvbiBhIGZpbGUgdGhhdCByZXF1aXJlcyBhCisjIG1pbmltdW0gdmVyc2lvbi4KK2lmIHRlc3QgJHN0IC1lcSA2MzsgdGhlbgorICBtc2c9InByb2JhYmx5IHRvbyBvbGQiCitlbGlmIHRlc3QgJHN0IC1lcSAxMjc7IHRoZW4KKyAgIyBQcm9ncmFtIHdhcyBtaXNzaW5nLgorICBtc2c9Im1pc3Npbmcgb24geW91ciBzeXN0ZW0iCitlbHNlCisgICMgUHJvZ3JhbSB3YXMgZm91bmQgYW5kIGV4ZWN1dGVkLCBidXQgZmFpbGVkLiAgR2l2ZSB1cC4KKyAgZXhpdCAkc3QKK2ZpCisKK3BlcmxfVVJMPWh0dHA6Ly93d3cucGVybC5vcmcvCitmbGV4X1VSTD1odHRwOi8vZmxleC5zb3VyY2Vmb3JnZS5uZXQvCitnbnVfc29mdHdhcmVfVVJMPWh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZQorCitwcm9ncmFtX2RldGFpbHMgKCkKK3sKKyAgY2FzZSAkMSBpbgorICAgIGFjbG9jYWx8YXV0b21ha2UpCisgICAgICBlY2hvICJUaGUgJyQxJyBwcm9ncmFtIGlzIHBhcnQgb2YgdGhlIEdOVSBBdXRvbWFrZSBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9hdXRvbWFrZT4iCisgICAgICBlY2hvICJJdCBhbHNvIHJlcXVpcmVzIEdOVSBBdXRvY29uZiwgR05VIG00IGFuZCBQZXJsIGluIG9yZGVyIHRvIHJ1bjoiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYXV0b2NvbmY+IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML200Lz4iCisgICAgICBlY2hvICI8JHBlcmxfVVJMPiIKKyAgICAgIDs7CisgICAgYXV0b2NvbmZ8YXV0b200dGV8YXV0b2hlYWRlcikKKyAgICAgIGVjaG8gIlRoZSAnJDEnIHByb2dyYW0gaXMgcGFydCBvZiB0aGUgR05VIEF1dG9jb25mIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2F1dG9jb25mLz4iCisgICAgICBlY2hvICJJdCBhbHNvIHJlcXVpcmVzIEdOVSBtNCBhbmQgUGVybCBpbiBvcmRlciB0byBydW46IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML200Lz4iCisgICAgICBlY2hvICI8JHBlcmxfVVJMPiIKKyAgICAgIDs7CisgIGVzYWMKK30KKworZ2l2ZV9hZHZpY2UgKCkKK3sKKyAgIyBOb3JtYWxpemUgcHJvZ3JhbSBuYW1lIHRvIGNoZWNrIGZvci4KKyAgbm9ybWFsaXplZF9wcm9ncmFtPWBlY2hvICIkMSIgfCBzZWQgJworICAgIHMvXmdudS0vLzsgdAorICAgIHMvXmdudS8vOyB0CisgICAgcy9eZy8vOyB0J2AKKworICBwcmludGYgJyVzXG4nICInJDEnIGlzICRtc2cuIgorCisgIGNvbmZpZ3VyZV9kZXBzPSInY29uZmlndXJlLmFjJyBvciBtNCBmaWxlcyBpbmNsdWRlZCBieSAnY29uZmlndXJlLmFjJyIKKyAgY2FzZSAkbm9ybWFsaXplZF9wcm9ncmFtIGluCisgICAgYXV0b2NvbmYqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdjb25maWd1cmUuYWMnLCIKKyAgICAgIGVjaG8gIm9yIG00IGZpbGVzIGluY2x1ZGVkIGJ5IGl0LiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b2NvbmYnCisgICAgICA7OworICAgIGF1dG9oZWFkZXIqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdhY2NvbmZpZy5oJyBvciIKKyAgICAgIGVjaG8gIiRjb25maWd1cmVfZGVwcy4iCisgICAgICBwcm9ncmFtX2RldGFpbHMgJ2F1dG9oZWFkZXInCisgICAgICA7OworICAgIGF1dG9tYWtlKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCAnTWFrZWZpbGUuYW0nIG9yIgorICAgICAgZWNobyAiJGNvbmZpZ3VyZV9kZXBzLiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b21ha2UnCisgICAgICA7OworICAgIGFjbG9jYWwqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdhY2luY2x1ZGUubTQnIG9yIgorICAgICAgZWNobyAiJGNvbmZpZ3VyZV9kZXBzLiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYWNsb2NhbCcKKyAgICAgIDs7CisgICBhdXRvbTR0ZSopCisgICAgICBlY2hvICJZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIG1haW50YWluZXIgZmlsZXMgdGhhdCByZXF1aXJlIgorICAgICAgZWNobyAidGhlICdhdXRvbTR0ZScgcHJvZ3JhbSB0byBiZSByZWJ1aWx0LiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b200dGUnCisgICAgICA7OworICAgIGJpc29uKnx5YWNjKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhICcueScgZmlsZS4iCisgICAgICBlY2hvICJZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgR05VIEJpc29uIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2Jpc29uLz4iCisgICAgICA7OworICAgIGxleCp8ZmxleCopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgYSAnLmwnIGZpbGUuIgorICAgICAgZWNobyAiWW91IG1heSB3YW50IHRvIGluc3RhbGwgdGhlIEZhc3QgTGV4aWNhbCBBbmFseXplciBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZmxleF9VUkw+IgorICAgICAgOzsKKyAgICBoZWxwMm1hbiopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgYSBkZXBlbmRlbmN5IiBcCisgICAgICAgICAgICJvZiBhIG1hbiBwYWdlLiIKKyAgICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBHTlUgSGVscDJtYW4gcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvaGVscDJtYW4vPiIKKyAgICA7OworICAgIG1ha2VpbmZvKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhICcudGV4aScgZmlsZSwgb3IiCisgICAgICBlY2hvICJhbnkgb3RoZXIgZmlsZSBpbmRpcmVjdGx5IGFmZmVjdGluZyB0aGUgYXNwZWN0IG9mIHRoZSBtYW51YWwuIgorICAgICAgZWNobyAiWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgVGV4aW5mbyBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC90ZXhpbmZvLz4iCisgICAgICBlY2hvICJUaGUgc3B1cmlvdXMgbWFrZWluZm8gY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiIKKyAgICAgIGVjaG8gInVzaW5nIGEgYnVnZ3kgJ21ha2UnIChBSVgsIERVLCBJUklYKSwgaW4gd2hpY2ggY2FzZSB5b3UgbWlnaHQiCisgICAgICBlY2hvICJ3YW50IHRvIGluc3RhbGwgR05VIG1ha2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML21ha2UvPiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGVjaG8gIllvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlIHByb3BlciIKKyAgICAgIGVjaG8gInRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uICBDaGVjayB0aGUgJ1JFQURNRScgZmlsZSwgaXQiCisgICAgICBlY2hvICJvZnRlbiB0ZWxscyB5b3UgYWJvdXQgdGhlIG5lZWRlZCBwcmVyZXF1aXNpdGVzIGZvciBpbnN0YWxsaW5nIgorICAgICAgZWNobyAidGhpcyBwYWNrYWdlLiAgWW91IG1heSBhbHNvIHBlZWsgYXQgYW55IEdOVSBhcmNoaXZlIHNpdGUsIGluIgorICAgICAgZWNobyAiY2FzZSBzb21lIG90aGVyIHBhY2thZ2UgY29udGFpbnMgdGhpcyBtaXNzaW5nICckMScgcHJvZ3JhbS4iCisgICAgICA7OworICBlc2FjCit9CisKK2dpdmVfYWR2aWNlICIkMSIgfCBzZWQgLWUgJzFzL14vV0FSTklORzogLycgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAnMiwkcy9eLyAgICAgICAgIC8nID4mMgorCisjIFByb3BhZ2F0ZSB0aGUgY29ycmVjdCBleGl0IHN0YXR1cyAoZXhwZWN0ZWQgdG8gYmUgMTI3IGZvciBhIHByb2dyYW0KKyMgbm90IGZvdW5kLCA2MyBmb3IgYSBwcm9ncmFtIHRoYXQgZmFpbGVkIGR1ZSB0byB2ZXJzaW9uIG1pc21hdGNoKS4KK2V4aXQgJHN0CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbWtpbnN0YWxsZGlycyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbWtpbnN0YWxsZGlycwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MTkxYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9ta2luc3RhbGxkaXJzCkBAIC0wLDAgKzEsMTYyIEBACisjISAvYmluL3NoCisjIG1raW5zdGFsbGRpcnMgLS0tIG1ha2UgZGlyZWN0b3J5IGhpZXJhcmNoeQorCitzY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCisKKyMgT3JpZ2luYWwgYXV0aG9yOiBOb2FoIEZyaWVkbWFuIDxmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHU+CisjIENyZWF0ZWQ6IDE5OTMtMDUtMTYKKyMgUHVibGljIGRvbWFpbi4KKyMKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworbmw9JworJworSUZTPSIgIiIJJG5sIgorZXJyc3RhdHVzPTAKK2Rpcm1vZGU9CisKK3VzYWdlPSJcCitVc2FnZTogbWtpbnN0YWxsZGlycyBbLWhdIFstLWhlbHBdIFstLXZlcnNpb25dIFstbSBNT0RFXSBESVIgLi4uCisKK0NyZWF0ZSBlYWNoIGRpcmVjdG9yeSBESVIgKHdpdGggbW9kZSBNT0RFLCBpZiBzcGVjaWZpZWQpLCBpbmNsdWRpbmcgYWxsCitsZWFkaW5nIGZpbGUgbmFtZSBjb21wb25lbnRzLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKKworIyBwcm9jZXNzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLWggfCAtLWhlbHAgfCAtLWgqKSAgICAgICAgICMgLWggZm9yIGhlbHAKKyAgICAgIGVjaG8gIiR1c2FnZSIKKyAgICAgIGV4aXQgJD8KKyAgICAgIDs7CisgICAgLW0pICAgICAgICAgICAgICAgICAgICAgICAgICMgLW0gUEVSTSBhcmcKKyAgICAgIHNoaWZ0CisgICAgICB0ZXN0ICQjIC1lcSAwICYmIHsgZWNobyAiJHVzYWdlIiAxPiYyOyBleGl0IDE7IH0KKyAgICAgIGRpcm1vZGU9JDEKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgIC0tdmVyc2lvbikKKyAgICAgIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIgorICAgICAgZXhpdCAkPworICAgICAgOzsKKyAgICAtLSkgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICBzaGlmdAorICAgICAgYnJlYWsKKyAgICAgIDs7CisgICAgLSopICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5rbm93biBvcHRpb24KKyAgICAgIGVjaG8gIiR1c2FnZSIgMT4mMgorICAgICAgZXhpdCAxCisgICAgICA7OworICAgICopICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpcnN0IG5vbi1vcHQgYXJnCisgICAgICBicmVhaworICAgICAgOzsKKyAgZXNhYworZG9uZQorCitmb3IgZmlsZQorZG8KKyAgaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisgICAgc2hpZnQKKyAgZWxzZQorICAgIGJyZWFrCisgIGZpCitkb25lCisKK2Nhc2UgJCMgaW4KKyAgMCkgZXhpdCAwIDs7Citlc2FjCisKKyMgU29sYXJpcyA4J3MgbWtkaXIgLXAgaXNuJ3QgdGhyZWFkLXNhZmUuICBJZiB5b3UgbWtkaXIgLXAgYS9iIGFuZAorIyBta2RpciAtcCBhL2MgYXQgdGhlIHNhbWUgdGltZSwgYm90aCB3aWxsIGRldGVjdCB0aGF0IGEgaXMgbWlzc2luZywKKyMgb25lIHdpbGwgY3JlYXRlIGEsIHRoZW4gdGhlIG90aGVyIHdpbGwgdHJ5IHRvIGNyZWF0ZSBhIGFuZCBkaWUgd2l0aAorIyBhICJGaWxlIGV4aXN0cyIgZXJyb3IuICBUaGlzIGlzIGEgcHJvYmxlbSB3aGVuIGNhbGxpbmcgbWtpbnN0YWxsZGlycworIyBmcm9tIGEgcGFyYWxsZWwgbWFrZS4gIFdlIHVzZSAtLXZlcnNpb24gaW4gdGhlIHByb2JlIHRvIHJlc3RyaWN0CisjIG91cnNlbHZlcyB0byBHTlUgbWtkaXIsIHdoaWNoIGlzIHRocmVhZC1zYWZlLgorY2FzZSAkZGlybW9kZSBpbgorICAnJykKKyAgICBpZiBta2RpciAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisgICAgICBlY2hvICJta2RpciAtcCAtLSAkKiIKKyAgICAgIGV4ZWMgbWtkaXIgLXAgLS0gIiRAIgorICAgIGVsc2UKKyAgICAgICMgT24gTmV4dFN0ZXAgYW5kIE9wZW5TdGVwLCB0aGUgYG1rZGlyJyBjb21tYW5kIGRvZXMgbm90CisgICAgICAjIHJlY29nbml6ZSBhbnkgb3B0aW9uLiAgSXQgd2lsbCBpbnRlcnByZXQgYWxsIG9wdGlvbnMgYXMKKyAgICAgICMgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLCBhbmQgdGhlbiBhYm9ydCBiZWNhdXNlIGAuJyBhbHJlYWR5CisgICAgICAjIGV4aXN0cy4KKyAgICAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgICAgICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisgICAgZmkKKyAgICA7OworICAqKQorICAgIGlmIG1rZGlyIC1tICIkZGlybW9kZSIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisgICAgICBlY2hvICJta2RpciAtbSAkZGlybW9kZSAtcCAtLSAkKiIKKyAgICAgIGV4ZWMgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLSAiJEAiCisgICAgZWxzZQorICAgICAgIyBDbGVhbiB1cCBhZnRlciBOZXh0U3RlcCBhbmQgT3BlblN0ZXAgbWtkaXIuCisgICAgICBmb3IgZCBpbiAuLy1tIC4vLXAgLi8tLXZlcnNpb24gIi4vJGRpcm1vZGUiOworICAgICAgZG8KKyAgICAgICAgdGVzdCAtZCAkZCAmJiBybWRpciAkZAorICAgICAgZG9uZQorICAgIGZpCisgICAgOzsKK2VzYWMKKworZm9yIGZpbGUKK2RvCisgIGNhc2UgJGZpbGUgaW4KKyAgICAvKikgcGF0aGNvbXA9LyA7OworICAgICopICBwYXRoY29tcD0gOzsKKyAgZXNhYworICBvSUZTPSRJRlMKKyAgSUZTPS8KKyAgc2V0IGZub3JkICRmaWxlCisgIHNoaWZ0CisgIElGUz0kb0lGUworCisgIGZvciBkCisgIGRvCisgICAgdGVzdCAieCRkIiA9IHggJiYgY29udGludWUKKworICAgIHBhdGhjb21wPSRwYXRoY29tcCRkCisgICAgY2FzZSAkcGF0aGNvbXAgaW4KKyAgICAgIC0qKSBwYXRoY29tcD0uLyRwYXRoY29tcCA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorICAgICAgZWNobyAibWtkaXIgJHBhdGhjb21wIgorCisgICAgICBta2RpciAiJHBhdGhjb21wIiB8fCBsYXN0ZXJyPSQ/CisKKyAgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorCWVycnN0YXR1cz0kbGFzdGVycgorICAgICAgZWxzZQorCWlmIHRlc3QgISAteiAiJGRpcm1vZGUiOyB0aGVuCisJICBlY2hvICJjaG1vZCAkZGlybW9kZSAkcGF0aGNvbXAiCisJICBsYXN0ZXJyPQorCSAgY2htb2QgIiRkaXJtb2RlIiAiJHBhdGhjb21wIiB8fCBsYXN0ZXJyPSQ/CisKKwkgIGlmIHRlc3QgISAteiAiJGxhc3RlcnIiOyB0aGVuCisJICAgIGVycnN0YXR1cz0kbGFzdGVycgorCSAgZmkKKwlmaQorICAgICAgZmkKKyAgICBmaQorCisgICAgcGF0aGNvbXA9JHBhdGhjb21wLworICBkb25lCitkb25lCisKK2V4aXQgJGVycnN0YXR1cworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9weS1jb21waWxlIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9weS1jb21waWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2ZWE4NjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL3B5LWNvbXBpbGUKQEAgLTAsMCArMSwxNzAgQEAKKyMhL2Jpbi9zaAorIyBweS1jb21waWxlIC0gQ29tcGlsZSBhIFB5dGhvbiBwcm9ncmFtCisKK3NjcmlwdHZlcnNpb249MjAxMS0wNi0wOC4xMjsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKK2lmIFsgLXogIiRQWVRIT04iIF07IHRoZW4KKyAgUFlUSE9OPXB5dGhvbgorZmkKKworbWU9cHktY29tcGlsZQorCit1c2FnZV9lcnJvciAoKQoreworICBlY2hvICIkbWU6ICQqIiA+JjIKKyAgZWNobyAiVHJ5ICckbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorICBleGl0IDEKK30KKworYmFzZWRpcj0KK2Rlc3RkaXI9Cit3aGlsZSB0ZXN0ICQjIC1uZSAwOyBkbworICBjYXNlICIkMSIgaW4KKyAgICAtLWJhc2VkaXIpCisgICAgICBpZiB0ZXN0ICQjIC1sdCAyOyB0aGVuCisgICAgICAgIHVzYWdlX2Vycm9yICJvcHRpb24gJy0tYmFzZWRpcicgcmVxdWlyZXMgYW4gYXJndW1lbnQiCisgICAgICBlbHNlCisgICAgICAgIGJhc2VkaXI9JDIKKyAgICAgIGZpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAtLWRlc3RkaXIpCisgICAgICBpZiB0ZXN0ICQjIC1sdCAyOyB0aGVuCisgICAgICAgIHVzYWdlX2Vycm9yICJvcHRpb24gJy0tZGVzdGRpcicgcmVxdWlyZXMgYW4gYXJndW1lbnQiCisgICAgICBlbHNlCisgICAgICAgIGRlc3RkaXI9JDIKKyAgICAgIGZpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAtaHwtLWhlbHApCisgICAgICBjYXQgPDxcRU9GCitVc2FnZTogcHktY29tcGlsZSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBbLS1iYXNlZGlyIERJUl0gWy0tZGVzdGRpciBESVJdIEZJTEVTLi4uIgorCitCeXRlIGNvbXBpbGUgc29tZSBweXRob24gc2NyaXB0cyBGSUxFUy4gIFVzZSAtLWRlc3RkaXIgdG8gc3BlY2lmeSBhbnkKK2xlYWRpbmcgZGlyZWN0b3J5IHBhdGggdG8gdGhlIEZJTEVTIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gaW5jbHVkZSBpbiB0aGUKK2J5dGUgY29tcGlsZWQgZmlsZS4gIFNwZWNpZnkgLS1iYXNlZGlyIGZvciBhbnkgYWRkaXRpb25hbCBwYXRoIGluZm9ybWF0aW9uIHlvdQorZG8gd2FudCB0byBiZSBzaG93biBpbiB0aGUgYnl0ZSBjb21waWxlZCBmaWxlLgorCitFeGFtcGxlOgorICBweS1jb21waWxlIC0tZGVzdGRpciAvdG1wL3BrZy1yb290IC0tYmFzZWRpciAvdXNyL3NoYXJlL3Rlc3QgdGVzdC5weSB0ZXN0Mi5weQorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgICBleGl0ICQ/CisgICAgICA7OworICAgIC12fC0tdmVyc2lvbikKKyAgICAgIGVjaG8gIiRtZSAkc2NyaXB0dmVyc2lvbiIKKyAgICAgIGV4aXQgJD8KKyAgICAgIDs7CisgICAgLS0pCisgICAgICBzaGlmdAorICAgICAgYnJlYWsKKyAgICAgIDs7CisgICAgLSopCisgICAgICB1c2FnZV9lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiAnJDEnIgorICAgICAgOzsKKyAgICAqKQorICAgICAgYnJlYWsKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworZmlsZXM9JCoKK2lmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KKyAgICB1c2FnZV9lcnJvciAibm8gZmlsZXMgZ2l2ZW4iCitmaQorCisjIGlmIGJhc2VkaXIgd2FzIGdpdmVuLCB0aGVuIGl0IHNob3VsZCBiZSBwcmVwZW5kZWQgdG8gZmlsZW5hbWVzIGJlZm9yZQorIyBieXRlIGNvbXBpbGF0aW9uLgoraWYgWyAteiAiJGJhc2VkaXIiIF07IHRoZW4KKyAgICBwYXRodHJhbnM9InBhdGggPSBmaWxlIgorZWxzZQorICAgIHBhdGh0cmFucz0icGF0aCA9IG9zLnBhdGguam9pbignJGJhc2VkaXInLCBmaWxlKSIKK2ZpCisKKyMgaWYgZGVzdGRpciB3YXMgZ2l2ZW4sIHRoZW4gaXQgbmVlZHMgdG8gYmUgcHJlcGVuZGVkIHRvIHRoZSBmaWxlbmFtZSB0bworIyBieXRlIGNvbXBpbGUgYnV0IG5vdCBnbyBpbnRvIHRoZSBjb21waWxlZCBmaWxlLgoraWYgWyAteiAiJGRlc3RkaXIiIF07IHRoZW4KKyAgICBmaWxldHJhbnM9ImZpbGVwYXRoID0gcGF0aCIKK2Vsc2UKKyAgICBmaWxldHJhbnM9ImZpbGVwYXRoID0gb3MucGF0aC5ub3JtcGF0aCgnJGRlc3RkaXInICsgb3Muc2VwICsgcGF0aCkiCitmaQorCiskUFlUSE9OIC1jICIKK2ltcG9ydCBzeXMsIG9zLCBweV9jb21waWxlLCBpbXAKKworZmlsZXMgPSAnJyckZmlsZXMnJycKKworc3lzLnN0ZG91dC53cml0ZSgnQnl0ZS1jb21waWxpbmcgcHl0aG9uIG1vZHVsZXMuLi5cbicpCitmb3IgZmlsZSBpbiBmaWxlcy5zcGxpdCgpOgorICAgICRwYXRodHJhbnMKKyAgICAkZmlsZXRyYW5zCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKSBvciBub3QgKGxlbihmaWxlcGF0aCkgPj0gMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZmlsZXBhdGhbLTM6XSA9PSAnLnB5Jyk6CisJICAgIGNvbnRpbnVlCisgICAgc3lzLnN0ZG91dC53cml0ZShmaWxlKQorICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgIGlmIGhhc2F0dHIoaW1wLCAnZ2V0X3RhZycpOgorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZXBhdGgsIGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlcGF0aCksIHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVwYXRoLCBmaWxlcGF0aCArICdjJywgcGF0aCkKK3N5cy5zdGRvdXQud3JpdGUoJ1xuJykiIHx8IGV4aXQgJD8KKworIyB0aGlzIHdpbGwgZmFpbCBmb3IgcHl0aG9uIDwgMS41LCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlciAuLi4KKyRQWVRIT04gLU8gLWMgIgoraW1wb3J0IHN5cywgb3MsIHB5X2NvbXBpbGUsIGltcAorCisjIHB5cHkgZG9lcyBub3QgdXNlIC5weW8gb3B0aW1pemF0aW9uCitpZiBoYXNhdHRyKHN5cywgJ3B5cHlfdHJhbnNsYXRpb25faW5mbycpOgorICAgIHN5cy5leGl0KDApCisKK2ZpbGVzID0gJycnJGZpbGVzJycnCitzeXMuc3Rkb3V0LndyaXRlKCdCeXRlLWNvbXBpbGluZyBweXRob24gbW9kdWxlcyAob3B0aW1pemVkIHZlcnNpb25zKSAuLi5cbicpCitmb3IgZmlsZSBpbiBmaWxlcy5zcGxpdCgpOgorICAgICRwYXRodHJhbnMKKyAgICAkZmlsZXRyYW5zCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKSBvciBub3QgKGxlbihmaWxlcGF0aCkgPj0gMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZmlsZXBhdGhbLTM6XSA9PSAnLnB5Jyk6CisJICAgIGNvbnRpbnVlCisgICAgc3lzLnN0ZG91dC53cml0ZShmaWxlKQorICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgIGlmIGhhc2F0dHIoaW1wLCAnZ2V0X3RhZycpOgorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZXBhdGgsIGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlcGF0aCwgRmFsc2UpLCBwYXRoKQorICAgIGVsc2U6CisgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlcGF0aCwgZmlsZXBhdGggKyAnbycsIHBhdGgpCitzeXMuc3Rkb3V0LndyaXRlKCdcbicpIiAyPi9kZXYvbnVsbCB8fCA6CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL3Rlc3QtZHJpdmVyIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi90ZXN0LWRyaXZlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMzA2MDU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi90ZXN0LWRyaXZlcgpAQCAtMCwwICsxLDEzOSBAQAorIyEgL2Jpbi9zaAorIyB0ZXN0LWRyaXZlciAtIGJhc2ljIHRlc3RzdWl0ZSBkcml2ZXIgc2NyaXB0LgorCitzY3JpcHR2ZXJzaW9uPTIwMTMtMDctMTMuMjI7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCisjIE1ha2UgdW5jb25kaXRpb25hbCBleHBhbnNpb24gb2YgdW5kZWZpbmVkIHZhcmlhYmxlcyBhbiBlcnJvci4gIFRoaXMKKyMgaGVscHMgYSBsb3QgaW4gcHJldmVudGluZyB0eXBvLXJlbGF0ZWQgYnVncy4KK3NldCAtdQorCit1c2FnZV9lcnJvciAoKQoreworICBlY2hvICIkMDogJCoiID4mMgorICBwcmludF91c2FnZSA+JjIKKyAgZXhpdCAyCit9CisKK3ByaW50X3VzYWdlICgpCit7CisgIGNhdCA8PEVORAorVXNhZ2U6CisgIHRlc3QtZHJpdmVyIC0tdGVzdC1uYW1lPU5BTUUgLS1sb2ctZmlsZT1QQVRIIC0tdHJzLWZpbGU9UEFUSAorICAgICAgICAgICAgICBbLS1leHBlY3QtZmFpbHVyZT17eWVzfG5vfV0gWy0tY29sb3ItdGVzdHM9e3llc3xub31dCisgICAgICAgICAgICAgIFstLWVuYWJsZS1oYXJkLWVycm9ycz17eWVzfG5vfV0gWy0tXQorICAgICAgICAgICAgICBURVNULVNDUklQVCBbVEVTVC1TQ1JJUFQtQVJHVU1FTlRTXQorVGhlICctLXRlc3QtbmFtZScsICctLWxvZy1maWxlJyBhbmQgJy0tdHJzLWZpbGUnIG9wdGlvbnMgYXJlIG1hbmRhdG9yeS4KK0VORAorfQorCit0ZXN0X25hbWU9ICMgVXNlZCBmb3IgcmVwb3J0aW5nLgorbG9nX2ZpbGU9ICAjIFdoZXJlIHRvIHNhdmUgdGhlIG91dHB1dCBvZiB0aGUgdGVzdCBzY3JpcHQuCit0cnNfZmlsZT0gICMgV2hlcmUgdG8gc2F2ZSB0aGUgbWV0YWRhdGEgb2YgdGhlIHRlc3QgcnVuLgorZXhwZWN0X2ZhaWx1cmU9bm8KK2NvbG9yX3Rlc3RzPW5vCitlbmFibGVfaGFyZF9lcnJvcnM9eWVzCit3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICBjYXNlICQxIGluCisgIC0taGVscCkgcHJpbnRfdXNhZ2U7IGV4aXQgJD87OworICAtLXZlcnNpb24pIGVjaG8gInRlc3QtZHJpdmVyICRzY3JpcHR2ZXJzaW9uIjsgZXhpdCAkPzs7CisgIC0tdGVzdC1uYW1lKSB0ZXN0X25hbWU9JDI7IHNoaWZ0OzsKKyAgLS1sb2ctZmlsZSkgbG9nX2ZpbGU9JDI7IHNoaWZ0OzsKKyAgLS10cnMtZmlsZSkgdHJzX2ZpbGU9JDI7IHNoaWZ0OzsKKyAgLS1jb2xvci10ZXN0cykgY29sb3JfdGVzdHM9JDI7IHNoaWZ0OzsKKyAgLS1leHBlY3QtZmFpbHVyZSkgZXhwZWN0X2ZhaWx1cmU9JDI7IHNoaWZ0OzsKKyAgLS1lbmFibGUtaGFyZC1lcnJvcnMpIGVuYWJsZV9oYXJkX2Vycm9ycz0kMjsgc2hpZnQ7OworICAtLSkgc2hpZnQ7IGJyZWFrOzsKKyAgLSopIHVzYWdlX2Vycm9yICJpbnZhbGlkIG9wdGlvbjogJyQxJyI7OworICAgKikgYnJlYWs7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK21pc3Npbmdfb3B0cz0KK3Rlc3QgeCIkdGVzdF9uYW1lIiA9IHggJiYgbWlzc2luZ19vcHRzPSIkbWlzc2luZ19vcHRzIC0tdGVzdC1uYW1lIgordGVzdCB4IiRsb2dfZmlsZSIgID0geCAmJiBtaXNzaW5nX29wdHM9IiRtaXNzaW5nX29wdHMgLS1sb2ctZmlsZSIKK3Rlc3QgeCIkdHJzX2ZpbGUiICA9IHggJiYgbWlzc2luZ19vcHRzPSIkbWlzc2luZ19vcHRzIC0tdHJzLWZpbGUiCitpZiB0ZXN0IHgiJG1pc3Npbmdfb3B0cyIgIT0geDsgdGhlbgorICB1c2FnZV9lcnJvciAidGhlIGZvbGxvd2luZyBtYW5kYXRvcnkgb3B0aW9ucyBhcmUgbWlzc2luZzokbWlzc2luZ19vcHRzIgorZmkKKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICB1c2FnZV9lcnJvciAibWlzc2luZyBhcmd1bWVudCIKK2ZpCisKK2lmIHRlc3QgJGNvbG9yX3Rlc3RzID0geWVzOyB0aGVuCisgICMgS2VlcCB0aGlzIGluIHN5bmMgd2l0aCAnbGliL2FtL2NoZWNrLmFtOiQoYW1fX3R0eV9jb2xvcnMpJy4KKyAgcmVkPScbWzA7MzFtJyAjIFJlZC4KKyAgZ3JuPScbWzA7MzJtJyAjIEdyZWVuLgorICBsZ249JxtbMTszMm0nICMgTGlnaHQgZ3JlZW4uCisgIGJsdT0nG1sxOzM0bScgIyBCbHVlLgorICBtZ249JxtbMDszNW0nICMgTWFnZW50YS4KKyAgc3RkPScbW20nICAgICAjIE5vIGNvbG9yLgorZWxzZQorICByZWQ9IGdybj0gbGduPSBibHU9IG1nbj0gc3RkPQorZmkKKworZG9fZXhpdD0ncm0gLWYgJGxvZ19maWxlICR0cnNfZmlsZTsgKGV4aXQgJHN0KTsgZXhpdCAkc3QnCit0cmFwICJzdD0xMjk7ICRkb19leGl0IiAxCit0cmFwICJzdD0xMzA7ICRkb19leGl0IiAyCit0cmFwICJzdD0xNDE7ICRkb19leGl0IiAxMwordHJhcCAic3Q9MTQzOyAkZG9fZXhpdCIgMTUKKworIyBUZXN0IHNjcmlwdCBpcyBydW4gaGVyZS4KKyIkQCIgPiRsb2dfZmlsZSAyPiYxCitlc3RhdHVzPSQ/CitpZiB0ZXN0ICRlbmFibGVfaGFyZF9lcnJvcnMgPSBubyAmJiB0ZXN0ICRlc3RhdHVzIC1lcSA5OTsgdGhlbgorICBlc3RhdHVzPTEKK2ZpCisKK2Nhc2UgJGVzdGF0dXM6JGV4cGVjdF9mYWlsdXJlIGluCisgIDA6eWVzKSBjb2w9JHJlZCByZXM9WFBBU1MgcmVjaGVjaz15ZXMgZ2NvcHk9eWVzOzsKKyAgMDoqKSAgIGNvbD0kZ3JuIHJlcz1QQVNTICByZWNoZWNrPW5vICBnY29weT1ubzs7CisgIDc3OiopICBjb2w9JGJsdSByZXM9U0tJUCAgcmVjaGVjaz1ubyAgZ2NvcHk9eWVzOzsKKyAgOTk6KikgIGNvbD0kbWduIHJlcz1FUlJPUiByZWNoZWNrPXllcyBnY29weT15ZXM7OworICAqOnllcykgY29sPSRsZ24gcmVzPVhGQUlMIHJlY2hlY2s9bm8gIGdjb3B5PXllczs7CisgICo6KikgICBjb2w9JHJlZCByZXM9RkFJTCAgcmVjaGVjaz15ZXMgZ2NvcHk9eWVzOzsKK2VzYWMKKworIyBSZXBvcnQgb3V0Y29tZSB0byBjb25zb2xlLgorZWNobyAiJHtjb2x9JHtyZXN9JHtzdGR9OiAkdGVzdF9uYW1lIgorCisjIFJlZ2lzdGVyIHRoZSB0ZXN0IHJlc3VsdCwgYW5kIG90aGVyIHJlbGV2YW50IG1ldGFkYXRhLgorZWNobyAiOnRlc3QtcmVzdWx0OiAkcmVzIiA+ICR0cnNfZmlsZQorZWNobyAiOmdsb2JhbC10ZXN0LXJlc3VsdDogJHJlcyIgPj4gJHRyc19maWxlCitlY2hvICI6cmVjaGVjazogJHJlY2hlY2siID4+ICR0cnNfZmlsZQorZWNobyAiOmNvcHktaW4tZ2xvYmFsLWxvZzogJGdjb3B5IiA+PiAkdHJzX2ZpbGUKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcG9zdC5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcG9zdC5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDVmYThhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wb3N0LmFtCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBnZW5lcmljICJ0YWlsIiBvciBwb3N0IGF1dG9tYWtlIGhlYWRlciB0aGF0IG1heQorIyAgICAgIGJlIGluY2x1ZGVkIGluIGFueSBhdXRvbWFrZWZpbGUgdXNlZCBpbiB0aGUgYnVpbGQgdHJlZS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0L3J1bGVzLmFtCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3Bvc3QvcnVsZXMuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3Bvc3QvcnVsZXMuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgzNjkxMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcG9zdC9ydWxlcy5hbQpAQCAtMCwwICsxLDI1IEBACisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyB0aGUgYXV0b21ha2UgZm9vdGVyIGZvciBhbGwgY29tbW9uCisjICAgICAgKGkuZS4gbm9uLXRvb2xjaGFpbi1zcGVjaWZpYykgcnVsZXMuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC9ydWxlcy9jb3ZlcmFnZS5hbQoraW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0L3J1bGVzL3ByZXR0eS5hbQoraW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0L3J1bGVzL2hlYWRlcnMuYW0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcG9zdC9ydWxlcy9jb3ZlcmFnZS5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcG9zdC9ydWxlcy9jb3ZlcmFnZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTU0ODIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wb3N0L3J1bGVzL2NvdmVyYWdlLmFtCkBAIC0wLDAgKzEsMzkgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBhdXRvbWFrZSBmb290ZXIgZm9yIGFsbCBjb2RlLWNvdmVyYWdlIHJlbGF0ZWQKKyMgICAgICB0YXJnZXRzIGFuZCBydWxlcy4KKyMKKyMgICAgICBUaGlzIHJlcHJlc2VudHMgdGhlIG1pbmltdW0gaW50ZWdyYXRpb24gd2l0aCBHTlUgYXV0b3Rvb2xzCisjICAgICAgKGF1dG9tYWtlIGluIHBhcnRpY3VsYXIpIHN1Y2ggdGhhdCAnbWFrZSBjb3ZlcmFnZScgbWF5IGJlIGludm9rZWQKKyMgICAgICBhdCB0aGUgdG9wIG9mIHRoZSB0cmVlIGFuZCBhbGwgdGhlIHByZXJlcXVpc2l0ZXMgb2NjdXIgc3VjaAorIyAgICAgIHRoYXQgaXQgZXhlY3V0ZXMgc3VjY2Vzc2Z1bGx5IHdpdGggbm8gaW50ZXJ2ZW5pbmcgbWFrZSB0YXJnZXQKKyMgICAgICBpbnZvY2F0aW9ucy4gVGhlICdjaGVjay1hbScgYW5kICckKEJVSUxUX1NPVVJDRVMpJyBhcmUgdGhlIGtleQorIyAgICAgIGF1dG9tYWtlLXNwZWNpZmljIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhhdCBoYXBwZW5zLgorIworCisuUEhPTlk6IGNvdmVyYWdlIGNvdmVyYWdlLXJlY3Vyc2l2ZQorIAorY292ZXJhZ2U6IGNvdmVyYWdlLXJlY3Vyc2l2ZQorCitjb3ZlcmFnZTogY2hlY2stYW0KKworY292ZXJhZ2U6ICQoQlVJTFRfU09VUkNFUykKKworY292ZXJhZ2UtcmVjdXJzaXZlOgorCSQobmwtbWFrZS1zdWJkaXJzKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wb3N0L3J1bGVzL2hlYWRlcnMuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3Bvc3QvcnVsZXMvaGVhZGVycy5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWVkMGM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wb3N0L3J1bGVzL2hlYWRlcnMuYW0KQEAgLTAsMCArMSw0NSBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgdGhlIGF1dG9tYWtlIGZvb3RlciBmb3IgaW5zdGFsbGluZyBoZWFkZXIgZmlsZXMKKyMgICAgICBpbmRlcGVuZGVudGx5IG9mIHRoZSByZXN0IG9mIGEgcGFja2FnZS4KKyMKKyMgICAgICBQYWNrYWdlcyB0aGF0IHdpc2ggdG8gYXZhaWwgdGhlbXNlbHZlcyBvZiB0aGlzIHRhcmdldCBtYXkgd2lzaAorIyAgICAgIHRvIGFkZCB0aGUgZm9sbG93aW5nIGdvYWxzIGFuZCBkZXBlbmRlbmNpZXM6CisjCisjICAgICAgICBpbnN0YWxsLWhlYWRlcnM6IGluc3RhbGwtaW5jbHVkZUhFQURFUlMKKyMKKyMgICAgICBpbiBwbGFjZXMgd2hlcmUgdGhlIHBhY2thZ2UgdXNlcyBhbmQgZGVmaW5lcyAnaW5jbHVkZV9IRUFERVJTJyBvcgorIworIyAgICAgICAgaW5zdGFsbC1oZWFkZXJzOiBpbnN0YWxsLWRhdGEKKyMKKyMgICAgICB3aGVyZSB0aGUgcGFja2FnZSB1c2VzIGFuZCBkZWZpbmVzIGEgbW9yZSBjb21wbGV4ICdkaXN0XypfSEVBREVSUycuCisjCisjICAgICAgVGhpcyByZXByZXNlbnRzIHRoZSBtaW5pbXVtIGludGVncmF0aW9uIHdpdGggR05VIGF1dG90b29scworIyAgICAgIChhdXRvbWFrZSBpbnBhcnRpY3VsYXIpIHN1Y2ggdGhhdCAnbWFrZSBpbnN0YWxsLWhlYWRlcnMnIG1heSBiZQorIyAgICAgIGludm9rZWQgYXQgdGhlIHRvcCBvZiB0aGUgdHJlZSBhbmQgYWxsIHRoZSBwcmVyZXF1aXNpdGVzIG9jY3VyIAorIyAgICAgIHN1Y2ggdGhhdCBpdCBleGVjdXRlcyBzdWNjZXNzZnVsbHkgd2l0aCBubyBpbnRlcnZlbmluZyBtYWtlIAorIyAgICAgIHRhcmdldCBpbnZvY2F0aW9ucy4KKyMKKworLlBIT05ZOiBpbnN0YWxsLWhlYWRlcnMgaW5zdGFsbC1oZWFkZXJzLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWhlYWRlcnM6IGluc3RhbGwtaGVhZGVycy1yZWN1cnNpdmUKKworaW5zdGFsbC1oZWFkZXJzLXJlY3Vyc2l2ZToKKwkkKG5sLW1ha2Utc3ViZGlycykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcG9zdC9ydWxlcy9wcmV0dHkuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3Bvc3QvcnVsZXMvcHJldHR5LmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZWU2MDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3Bvc3QvcnVsZXMvcHJldHR5LmFtCkBAIC0wLDAgKzEsNzkgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBhdXRvbWFrZSBmb290ZXIgZm9yIGFsbCBjb2Rpbmcgc3R5bGUtcmVsYXRlZAorIyAgICAgIHRhcmdldHMgYW5kIHJ1bGVzLgorIworIyAgICAgIFRoZSByZWN1cnNpdmUgdGFyZ2V0ICdwcmV0dHknLCBpbnZva2VkIGFnYWluc3QgJyQoUFJFVFRZX1NVQkRJUlMpJywgCisjICAgICAgaXMgaW50ZW5kZWQgdG8gcmVmb3JtYXQgYSBjb2xsZWN0aW9uIG9mIHNvdXJjZSBmaWxlcywgZGVmaW5lZCBieSAKKyMgICAgICAnJChQUkVUVFlfRklMRVMpJyB1c2luZyB0aGUgcHJvZ3JhbSAnJChQUkVUVFkpJyB3aXRoIHRoZSBhcmd1bWVudHMgCisjICAgICAgJyQoUFJFVFRZX0FSR1MpJy4KKyMKKyMgICAgICBUaGUgcmVjdXJzaXZlIHRhcmdldCAncHJldHR5LWNoZWNrJyAoYW5kIGl0cyBhbGlhcyAnbGludCcpLAorIyAgICAgIGludm9rZWQgYWdhaW5zdCAnJChQUkVUVFlfU1VCRElSUyknLCBpcyBpbnRlbmRlZCB0byBvbmx5IGNoZWNrIAorIyAgICAgIGJ1dCBOT1QgcmVmb3JtYXQgYSBjb2xsZWN0aW9uIG9mIHNvdXJjZSBmaWxlcywgZGVmaW5lZCBieQorIyAgICAgICckKFBSRVRUWV9GSUxFUyknIHVzaW5nIHRoZSBwcm9ncmFtICckKFBSRVRUWV9DSEVDSyknIHdpdGggdGhlCisjICAgICAgYXJndW1lbnRzICckKFBSRVRUWV9DSEVDS19BUkdTKScuCisjCisjICAgICAgVGhpcyByZXByZXNlbnRzIHRoZSBtaW5pbXVtIGludGVncmF0aW9uIHdpdGggR05VIGF1dG90b29scworIyAgICAgIChhdXRvbWFrZSBpbnBhcnRpY3VsYXIpIHN1Y2ggdGhhdCAnbWFrZSBwcmV0dHknIGFuZCAnbWFrZQorIyAgICAgIHByZXR0eS1jaGVjaycgbWF5IGJlIGludm9rZWQgYXQgdGhlIHRvcCBvZiB0aGUgdHJlZSBhbmQgYWxsIAorIyAgICAgIHRoZSBwcmVyZXF1aXNpdGVzIG9jY3VyIHN1Y2ggdGhhdCBpdCBleGVjdXRlcyBzdWNjZXNzZnVsbHkgCisjICAgICAgd2l0aCBubyBpbnRlcnZlbmluZyBtYWtlIHRhcmdldCBpbnZvY2F0aW9ucy4gJyQoQlVJTFRfU09VUkNFUyknIAorIyAgICAgIGFyZSB0aGUga2V5IGF1dG9tYWtlLXNwZWNpZmljIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhhdCBoYXBwZW5zLgorIworCisjIG5sLW1ha2UtcHJldHR5IDxURVJTRSBPVVRQVVQgQ09NTUFORD4gPENPTU1BTkQ+IDxDT01NQU5EIEFSR1VNRU5UUz4gPFBBVEhTPgorIworIyBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgUEFUSFMsIGludm9raW5nIENPTU1BTkQgd2l0aAorIyBDT01NQU5EIEFSR1VFTUVOVFMgb24gZWFjaCBmaWxlLiBJZiBhIG5vbi12ZXJib3NlIG1ha2UgaGFzIGJlZW4KKyMgcmVxdWVzdGVkIFRFUlNFIE9VVFBVVCBDT01NQU5EIGlzIGVtaXR0ZWQgdG8gc3RhbmRhcmQgb3V0cHV0LgorCitkZWZpbmUgbmwtbWFrZS1wcmV0dHkKKyQoQU1fVl9hdClmb3IgZmlsZSBpbiAkKDQpOyBkbyBcCisgICAgJCgxKSBcCisgICAgaWYgdGVzdCAtZiAkJHtmaWxlfTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisgICAgJCgyKSAkKDMpICQke2R9LyQke2ZpbGV9IFwKKyAgICB8fCBleGl0IDE7IFwKK2RvbmUKK2VuZGVmCisKKy5QSE9OWTogcHJldHR5IHByZXR0eS1yZWN1cnNpdmUgcHJldHR5LWNoZWNrIHByZXR0eS1jaGVjay1yZWN1cnNpdmUgbGludAorCitwcmV0dHk6IHByZXR0eS1yZWN1cnNpdmUKKworcHJldHR5IHByZXR0eS1jaGVjazogJChCVUlMVF9TT1VSQ0VTKQorCisjIE1hcCB0aGUgYnVpbGQgYWN0aW9uICdsaW50JyB0byB0aGUgbW9yZSB2ZXJuYWN1bGFyICdwcmV0dHktY2hlY2snLgorCitsaW50OiBwcmV0dHktY2hlY2sKKworcHJldHR5LWNoZWNrOiBwcmV0dHktY2hlY2stcmVjdXJzaXZlCisKK3ByZXR0eS1yZWN1cnNpdmUgcHJldHR5LWNoZWNrLXJlY3Vyc2l2ZToKKwkkKGNhbGwgbmwtbWFrZS1zdWJkaXJzLXdpdGgtZGlycywkKFBSRVRUWV9TVUJESVJTKSkKKworcHJldHR5OiAkKFBSRVRUWV9GSUxFUykKK2lmbmVxICgkKFBSRVRUWSksKQorCSQoY2FsbCBubC1tYWtlLXByZXR0eSwkKEFNX1ZfUFJFVFRZKSwkKFBSRVRUWSksJChQUkVUVFlfQVJHUyksJChmaWx0ZXItb3V0ICQoQCktcmVjdXJzaXZlLCQoUFJFVFRZX0ZJTEVTKSkpCitlbmRpZgorCitwcmV0dHktY2hlY2s6ICQoUFJFVFRZX0ZJTEVTKQoraWZuZXEgKCQoUFJFVFRZX0NIRUNLKSwpCisJJChjYWxsIG5sLW1ha2UtcHJldHR5LCQoQU1fVl9QUkVUVFlfQ0hFQ0spLCQoUFJFVFRZX0NIRUNLKSwkKFBSRVRUWV9DSEVDS19BUkdTKSwkKGZpbHRlci1vdXQgJChAKS1yZWN1cnNpdmUsJChQUkVUVFlfRklMRVMpKSkKK2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NDViNWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS5hbQpAQCAtMCwwICsxLDIzIEBACisjCisjICAgIENvcHlyaWdodCAyMDE0LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyB0aGUgZ2VuZXJpYyAiaGVhZCIgb3IgcHJlIGF1dG9tYWtlIGhlYWRlciB0aGF0IG1heQorIyAgICAgIGJlIGluY2x1ZGVkIGluIGFueSBhdXRvbWFrZWZpbGUgdXNlZCBpbiB0aGUgYnVpbGQgdHJlZS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUvbWFjcm9zLmFtCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyMmJlYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy5hbQpAQCAtMCwwICsxLDg1IEBACisjCisjICAgIENvcHlyaWdodCAyMDE0LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGF1dG9tYWtlIG1hY3JvcyBjb21tb24gdG8gYWxsIG90aGVyIGF1dG9tYWtlCisjICAgICAgaGVhZGVycyBhbmQgZmlsZXMuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlL21hY3Jvcy9jb25zdGFudHMuYW0KK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlL21hY3Jvcy9wYXRocy5hbQoraW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUvbWFjcm9zL3ByZXR0eS5hbQoraW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUvbWFjcm9zL3ZlcmJvc2l0eS5hbQoraW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUvbWFjcm9zL2NvdmVyYWdlLmFtCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS9tYWNyb3Mvc3ViZGlycy5hbQorCisjCisjIGNyZWF0ZS1kaXJlY3RvcnkKKyMKKyMgQ3JlYXRlIHRoZSBkaXJlY3Rvcnkgd2l0aCB0aGUgbmFtZSBvZiB0aGUgJChAKSB2YXJpYWJsZS4KKyMKK2RlZmluZSBjcmVhdGUtZGlyZWN0b3J5CiskKEFNX1ZfTUtESVJfUCkkKE1LRElSX1ApICQoQCkKK2VuZGVmICMgY3JlYXRlLWRpcmVjdG9yeQorCisjCisjIGNyZWF0ZS1saW5rCisjCisjIENyZWF0ZSB0aGUgc3ltYm9saWMgbGluayB3aXRoIHRoZSBzb3VyY2Ugb2YgdGhlICQoPCkgdmFyaWFibGUgYW5kCisjIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgJChAKSB2YXJpYWJsZS4KKyMKK2RlZmluZSBjcmVhdGUtbGluaworJChBTV9WX0xOX1MpJChMTl9TKSAkKDwpICQoQCkKK2VuZGVmICMgY3JlYXRlLWxpbmsKKworIworIyBjaGVjay1maWxlIDxtYWNybyBzdWZmaXg+CisjCisjIENoZWNrIHdoZXRoZXIgYSBmaWxlLCByZWZlcmVuY2VkIGJ5IHRoZSAkKEApIHZhcmlhYmxlLCBzaG91bGQgYmUKKyMgdXBkYXRlZCAvIHJlZ2VuZXJhdGVkIGJhc2VkIG9uIGl0cyBkZXBlbmRlbmNpZXMsIHJlZmVyZW5jZWQgYnkgdGhlCisjICQoPCkgdmFyaWFibGUgYnkgcnVubmluZyB0aGUgbWFrZSBtYWNybyBjaGVjay1maWxlLTxtYWNybyBzdWZmaXg+LgorIworIyBUaGUgJCg8KSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGlmIHRoZSBtYWNybyB3YW50cyB0byBwcm9jZXNzCisjIGl0IGFuZCB0aGUgcHJvc3BlY3RpdmUgbmV3IG91dHB1dCBmaWxlLCB3aGljaCB0aGUgbWFjcm8gTVVTVAorIyBnZW5lcmF0ZSwgYXMgdGhlIHNlY29uZC4KKyMKKyMgVGhpcyBtYWNybyB3aWxsIGVuc3VyZSB0aGF0IGFueSByZXF1aXJlZCBwYXJlbnQgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQKKyMgcHJpb3IgdG8gaW52b2tpbmcgY2hlY2stZmlsZS08bWFjcm8gc3VmZml4Pi4KKyMKKyMgVGhpcyBtYWNybyBpcyBzaW1pbGFyIHRvIGFuZCBpbnNwaXJlZCBieSB0aGF0IGZyb20gTGludXggS2J1aWxkIGFuZAorIyBlbHNld2hlcmUuCisjCisjICAgPG1hY3JvIHN1ZmZpeD4gLSBUaGUgbmFtZSwgc3VmZml4ZWQgdG8gImNoZWNrLWZpbGUtIiwgd2hpY2ggaW5kaWNhdGVzCisjICAgICAgICAgICAgICAgICAgICB0aGUgbWFrZSBtYWNybyB0byBpbnZva2UuCisjCisjCitkZWZpbmUgY2hlY2stZmlsZQorJChBTV9WX2F0KXNldCAtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2VjaG8gJyAgQ0hFQ0sgICAgJChAKSc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiskKE1LRElSX1ApICQoZGlyICQoQCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorJChjYWxsIGNoZWNrLWZpbGUtJCgxKSwkKDwpLCQoQCkuTik7ICAgICAgICAgICAgICAgIFwKK2lmIFsgLXIgIiQoQCkiIF0gJiYgJChDTVApIC1zICIkKEApIiAiJChAKS5OIjsgdGhlbiBcCisgICAgcm0gLWYgIiQoQCkuTiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlY2hvICcgIEdFTiAgICAgICQoQCknOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXYgLWYgIiQoQCkuTiIgIiQoQCkiOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZmkKK2VuZGVmICMgY2hlY2stZmlsZQorCisKKworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvY29uc3RhbnRzLmFtIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL2NvbnN0YW50cy5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjc3YTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL2NvbnN0YW50cy5hbQpAQCAtMCwwICsxLDMwIEBACisjCisjICAgIENvcHlyaWdodCAyMDEwLTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGF1dG9tYWtlIGZpbGUgY29uc3RhbnRzIGNvbW1vbiB0byBhbGwgb3RoZXIKKyMgICAgICBhdXRvbWFrZSBoZWFkZXJzIGFuZCBmaWxlcy4KKyMKKworIworIyBDaGFyYWN0ZXIgY29uc3RhbnRzIGZvciB0aG9zZSBtYWtlIGRvZXMgbm90IG90aGVyd2lzZSBoYW5kbGUgd2VsbCBvcgorIyBuYXR1cmFsbHkuCisjCisKKyMgUGF0aCBzZXBhcmF0b3IKKworU2xhc2ggICAgICAgICAgICAgICAgICAgOj0gLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL2NvdmVyYWdlLmFtIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL2NvdmVyYWdlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTc2MmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvY292ZXJhZ2UuYW0KQEAgLTAsMCArMSwxMDYgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYXV0b21ha2UgdmFyaWFibGVzIGFuZCBtYWNyb3MgY29tbW9uIHRvIGFsbAorIyAgICAgIG90aGVyIGF1dG9tYWtlIGhlYWRlcnMgYW5kIGZpbGVzIGZvciBjb2RlIGNvdmVyYWdlLgorIworCisjIFN1ZmZpeGVzCisKKyMKKyMgU3VmZml4IGZvciB0aGUgY29kZSBjb3ZlcmFnZSByZXBvcnQgImJ1bmRsZSIuCisjCitOTF9DT1ZFUkFHRV9CVU5ETEVfU1VGRklYID0gLmxjb3YKKworIworIyBTdWZmaXggZm9yIHRoZSBsY292ICJpbmZvIiBmaWxlIGluc2lkZSB0aGUgY29kZSBjb3ZlcmFnZSByZXBvcnQgYnVuZGxlLgorIworTkxfQ09WRVJBR0VfSU5GT19TVUZGSVggICA9IC5pbmZvCisKKyMKKyMgVmVyYm9zaXR5IG1hY3JvcyBhbmQgZmxhZ3MKKyMKKworTkxfVl9MQ09WICAgICAgICAgICAgID0gJChubF9fdl9MQ09WXyQoVikpCitubF9fdl9MQ09WXyAgICAgICAgICAgPSAkKG5sX192X0xDT1ZfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCitubF9fdl9MQ09WXzAgICAgICAgICAgPSBAZWNobyAiICBMQ09WICAgICAkKEApIjsKK25sX192X0xDT1ZfMSAgICAgICAgICA9IAorCitOTF9WX0xDT1ZfRkxBR1MgICAgICAgPSAkKG5sX192X0xDT1ZfRkxBR1NfJChWKSkKK25sX192X0xDT1ZfRkxBR1NfICAgICA9ICQobmxfX3ZfTENPVl9GTEFHU18kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK25sX192X0xDT1ZfRkxBR1NfMCAgICA9IC0tcXVpZXQKK25sX192X0xDT1ZfRkxBR1NfMSAgICA9CisKK05MX1ZfR0VOSFRNTCAgICAgICAgICA9ICQobmxfX3ZfR0VOSFRNTF8kKFYpKQorbmxfX3ZfR0VOSFRNTF8gICAgICAgID0gJChubF9fdl9HRU5IVE1MXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorbmxfX3ZfR0VOSFRNTF8wICAgICAgID0gQGVjaG8gIiAgR0VOSFRNTCAgJChAKSI7CitubF9fdl9HRU5IVE1MXzEgICAgICAgPSAKKworTkxfVl9HRU5IVE1MX0ZMQUdTICAgID0gJChubF9fdl9HRU5IVE1MX0ZMQUdTXyQoVikpCitubF9fdl9HRU5IVE1MX0ZMQUdTXyAgPSAkKG5sX192X0dFTkhUTUxfRkxBR1NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCitubF9fdl9HRU5IVE1MX0ZMQUdTXzAgPSAtLXF1aWV0IAorbmxfX3ZfR0VOSFRNTF9GTEFHU18xID0KKworIworIyBnZW5lcmF0ZS1jb3ZlcmFnZS1yZXBvcnQgPGRpcmVjdG9yeT4KKyMKKyMgQ2FwdHVyZSwgdXNpbmcgbGNvdiwgYSBjb3ZlcmFnZSByZXBvcnQgZnJvbSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAnZGlyZWN0b3J5JworIyB3aXRoIGFuIGZpbmFsIG91dHB1dCAiaW5mbyIgZmlsZSBhcyBzcGVjaWZpZWQgYnkgdGhlIHRhcmdldCB2YXJpYWJsZS4KKyMKKyMgICA8ZGlyZWN0b3J5PiAtIFRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCBsY292IHNob3VsZCBzZWFyY2ggZm9yIGNvdmVyYWdlIGRhdGEgKCouZ2NubyAmICouZ2NkYSkKKyMKKyMgICAtIGNyZWF0ZSBiYXNlbGluZSBjb3ZlcmFnZSBkYXRhIGZpbGUgKGJhc2UuaW5mbykgd2l0aCAnLWl8LS1pbml0aWFsJyBvcHRpb24KKyMgICAtIGNyZWF0ZSB0ZXN0IGNvdmVyYWdlIGRhdGEgZmlsZSAodGVzdC5pbmZvKQorIyAgIC0gY29tYmluZSBiYXNlbGluZSBhbmQgdGVzdCBjb3ZlcmFnZSBkYXRhIHRvIGNyZWF0ZSB0aGUgZmluYWwgImluZm8iIGZpbGUKKyMKKyMgVGhlbiwgb24gc3VjY2VzcywgZ2VuZXJhdGUgYW4gSFRNTC1iYXNlZCBjb3ZlcmFnZSByZXBvcnQgdXNpbmcgZ2VuaHRtbC4KKyMKK2RlZmluZSBnZW5lcmF0ZS1jb3ZlcmFnZS1yZXBvcnQKKyQoTkxfVl9MQ09WKSQoTENPVikgJChOTF9WX0xDT1ZfRkxBR1MpIC0tY29uZmlnLWZpbGU9IiQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2V0Yy9sY292LmNvbmZpZyIgLS1pbml0aWFsIC0tY2FwdHVyZSAtLWRpcmVjdG9yeSAiJCgxKSIgLS1vdXRwdXQtZmlsZSAiYmFzZS5pbmZvIgorJChOTF9WX0xDT1YpJChMQ09WKSAkKE5MX1ZfTENPVl9GTEFHUykgLS1jb25maWctZmlsZT0iJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvZXRjL2xjb3YuY29uZmlnIiAtLWNhcHR1cmUgLS1kaXJlY3RvcnkgIiQoMSkiIC0tb3V0cHV0LWZpbGUgInRlc3QuaW5mbyIKKyQoTkxfVl9MQ09WKSQoTENPVikgJChOTF9WX0xDT1ZfRkxBR1MpIC0tY29uZmlnLWZpbGU9IiQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2V0Yy9sY292LmNvbmZpZyIgLS1hZGQtdHJhY2VmaWxlICJiYXNlLmluZm8iIC0tYWRkLXRyYWNlZmlsZSAidGVzdC5pbmZvIiAtLW91dHB1dC1maWxlICIkKEApIgorJChOTF9WX0dFTkhUTUwpJChHRU5IVE1MKSAkKE5MX1ZfR0VOSFRNTF9GTEFHUykgLS1jb25maWctZmlsZT0iJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvZXRjL2xjb3YuY29uZmlnIiAiJChAKSIgLS1vdXRwdXQtZGlyZWN0b3J5ICIkKEBEKSIKK2VuZGVmICMgZ2VuZXJhdGUtY292ZXJhZ2UtcmVwb3J0CisKKyMKKyMgZ2VuZXJhdGUtY292ZXJhZ2UtcmVwb3J0LXdpdGgtZmlsdGVyIDxkaXJlY3Rvcnk+IDxyZW1vdmVfZmlsdGVyPgorIworIyBDYXB0dXJlLCB1c2luZyBsY292LCBhIGNvdmVyYWdlIHJlcG9ydCBmcm9tIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5ICdkaXJlY3RvcnknIGFuZCBhIGZpbHRlciAncmVtb3ZlX2ZpbHRlcicKKyMgd2l0aCBhbiBmaW5hbCBvdXRwdXQgImluZm8iIGZpbGUgYXMgc3BlY2lmaWVkIGJ5IHRoZSB0YXJnZXQgdmFyaWFibGUuCisjCisjICAgPGRpcmVjdG9yeT4gICAgICAtIFRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCBsY292IHNob3VsZCBzZWFyY2ggZm9yIGNvdmVyYWdlIGRhdGEgKCouZ2NubyAmICouZ2NkYSkKKyMKKyMgICA8cmVtb3ZlX2ZpbHRlcj4gIC0gVGhlIGZpbHRlciBpcyBhIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2Ygc2hlbGwgd2lsZGNhcmQgcGF0dGVybnMuIChub3RlIHRoYXQgdGhleSBtYXkgbmVlZCB0byBiZSBlc2NhcGVkIGFjY29yZGluZ2x5IHRvIHByZXZlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgdGhlIHNoZWxsIGZyb20gZXhwYW5kaW5nIHRoZW0gZmlyc3QpLiBFdmVyeSBmaWxlIGVudHJ5IGluIHRyYWNlZmlsZSB3aGljaCBtYXRjaGVzIGF0IGxlYXN0IG9uZSBvZiB0aG9zZSBwYXR0ZXJucyB3aWxsIGJlIHJlbW92ZWQuCisjCisjICAgLSBjcmVhdGUgYmFzZWxpbmUgY292ZXJhZ2UgZGF0YSBmaWxlIChiYXNlLmluZm8pIHdpdGggJy1pfC0taW5pdGlhbCcgb3B0aW9uCisjICAgLSBjcmVhdGUgdGVzdCBjb3ZlcmFnZSBkYXRhIGZpbGUgKHRlc3QuaW5mbykKKyMgICAtIGNvbWJpbmUgYmFzZWxpbmUgYW5kIHRlc3QgY292ZXJhZ2UgZGF0YSB0byBjcmVhdGUgdGhlIGZpbmFsICJpbmZvIiBmaWxlCisjICAgLSByZW1vdmUgcGFydGljdWxhciBjb3ZlcmFnZSBkYXRhIHNwZWNpZmlsZWQgYnkgdGhlIHJlbW92ZV9maWx0ZXIgKG5vIGNoYW5nZSBpZiByZW1vdmVfZmlsdGVyIGlzIG51bGwpCisjCisjIFRoZW4sIG9uIHN1Y2Nlc3MsIGdlbmVyYXRlIGFuIEhUTUwtYmFzZWQgY292ZXJhZ2UgcmVwb3J0IHVzaW5nIGdlbmh0bWwuCisjCitkZWZpbmUgZ2VuZXJhdGUtY292ZXJhZ2UtcmVwb3J0LXdpdGgtZmlsdGVyCiskKE5MX1ZfTENPVikkKExDT1YpICQoTkxfVl9MQ09WX0ZMQUdTKSAtLWNvbmZpZy1maWxlPSIkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9ldGMvbGNvdi5jb25maWciIC0taW5pdGlhbCAtLWNhcHR1cmUgLS1kaXJlY3RvcnkgIiQoMSkiIC0tb3V0cHV0LWZpbGUgImJhc2UuaW5mbyIKKyQoTkxfVl9MQ09WKSQoTENPVikgJChOTF9WX0xDT1ZfRkxBR1MpIC0tY29uZmlnLWZpbGU9IiQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2V0Yy9sY292LmNvbmZpZyIgLS1jYXB0dXJlIC0tZGlyZWN0b3J5ICIkKDEpIiAtLW91dHB1dC1maWxlICJ0ZXN0LmluZm8iCiskKE5MX1ZfTENPVikkKExDT1YpICQoTkxfVl9MQ09WX0ZMQUdTKSAtLWNvbmZpZy1maWxlPSIkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9ldGMvbGNvdi5jb25maWciIC0tYWRkLXRyYWNlZmlsZSAiYmFzZS5pbmZvIiAtLWFkZC10cmFjZWZpbGUgInRlc3QuaW5mbyIgLS1vdXRwdXQtZmlsZSAiJChAKSIKKyQoTkxfVl9MQ09WKSQoTENPVikgJChOTF9WX0xDT1ZfRkxBR1MpIC0tY29uZmlnLWZpbGU9IiQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2V0Yy9sY292LmNvbmZpZyIgLS1yZW1vdmUgIiQoQCkiICQoZm9yZWFjaCBwYXR0ZXJuLCQoMiksIiQocGF0dGVybikiKSAtLW91dHB1dC1maWxlICIkKEApIgorJChOTF9WX0dFTkhUTUwpJChHRU5IVE1MKSAkKE5MX1ZfR0VOSFRNTF9GTEFHUykgLS1jb25maWctZmlsZT0iJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvZXRjL2xjb3YuY29uZmlnIiAiJChAKSIgLS1vdXRwdXQtZGlyZWN0b3J5ICIkKEBEKSIKK2VuZGVmICMgZ2VuZXJhdGUtY292ZXJhZ2UtcmVwb3J0LXdpdGgtZmlsdGVyCisKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL3BhdGhzLmFtIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL3BhdGhzLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MmI3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvcGF0aHMuYW0KQEAgLTAsMCArMSw0MiBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxMC0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgZGVmaW5lcyBhdXRvbWFrZSBtYWNyb3MgZm9yIG1hbmlwdWxhdGluZyBhbmQgcXVlcnlpbmcKKyMgICAgICBwYXRocy4KKyMKKworIyBEZXNsYXNoaWZ5IDxwYXRoPiAuLi4KKyMKKyMgRW5zdXJlIHRoYXQgdGhlcmUgaXMgTk8gdHJhaWxpbmcgZGlyZWN0b3J5IGRlbGltaXRlciBhdCB0aGUgZW5kIG9mCisjIHRoZSBzcGVjaWZpZWQgcGF0aC4KKworRGVzbGFzaGlmeSAgICAgICAgICA9ICQocGF0c3Vic3QgJSQoU2xhc2gpLCUsJCgxKSkKKworIyBTbGFzaGlmeSA8cGF0aD4gLi4uCisjCisjIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGEgc2luZ2xlIHRyYWlsaW5nIGRpcmVjdG9yeSBkZWxpbWl0ZXIgYXQgdGhlCisjIGVuZCBvZiB0aGUgc3BlY2lmaWVkIHBhdGguCisKK1NsYXNoaWZ5ICAgICAgICAgICAgPSAkKGFkZHN1ZmZpeCAkKFNsYXNoKSwkKGNhbGwgRGVzbGFzaGlmeSwkKDEpKSkKKworIworIyBJc1JlYWxQYXRoIDxwYXRoPgorIworIyBJZiB0aGUgcGF0aCBpcyBhIHJlYWwgcmF0aGVyIHRoYW4gc3ltYm9saWMgbGluayBwYXRoLCB0aGUgcGF0aCBpcyByZXR1cm5lZC4gCisKK0lzUmVhbFBhdGggICAgICAgICAgPSAkKGlmICQocGF0c3Vic3QgJChyZWFscGF0aCAkKDEpKSwsJChhYnNwYXRoICQoMSkpKSwsJCgxKSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy9wcmV0dHkuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvcHJldHR5LmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ODNjMjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvcHJldHR5LmFtCkBAIC0wLDAgKzEsNTIgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGF1dG9tYWtlIHZhcmlhYmxlcyBmb3IgcGVyZm9ybWluZyBjb2RpbmcKKyMgICAgICBzdHlsZSBmb3JtYXR0aW5nIGFuZCBjaGVja2luZy4KKyMKKworQU1fVl9QUkVUVFkgICAgICAgICAgPSAkKGFtX192X1BSRVRUWV8kKFYpKQorYW1fX3ZfUFJFVFRZXyAgICAgICAgPSAkKGFtX192X1BSRVRUWV8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X1BSRVRUWV8wICAgICAgID0gZWNobyAiICBQUkVUVFkgICAkJHtmaWxlfSI7CithbV9fdl9QUkVUVFlfMSAgICAgICA9IAorCitBTV9WX1BSRVRUWV9DSEVDSyAgICA9ICQoYW1fX3ZfUFJFVFRZX0NIRUNLXyQoVikpCithbV9fdl9QUkVUVFlfQ0hFQ0tfICA9ICQoYW1fX3ZfUFJFVFRZX0NIRUNLXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfUFJFVFRZX0NIRUNLXzAgPSBlY2hvICIgIFBSRVRUWSAgICQke2ZpbGV9IjsKK2FtX192X1BSRVRUWV9DSEVDS18xID0gCisKKyMgUFJFVFRZX0ZJTEVTCisjCisjIFRoaXMgZGVmaW5lcyB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBhZ2FpbnN0IHdoaWNoIHRoZSBQUkVUVFkgYW5kCisjIFBSRVRUWV9DSEVDSyBwcm9maWxlcyB3aWxsIGJlIGludm9rZWQgZm9yIHRoZSAncHJldHR5JyBhbmQKKyMgJ3ByZXR0eS1jaGVjaycgdGFyZ2V0cywgcmVzcGVjdGl2ZWx5LgorIworIyBUaGlzIGRlZmF1bHRzIHRvIFNPVVJDRVMgYW5kIEhFQURFUlMgYW5kIG1heSBiZSBvdmVycmlkZW4gb3IKKyMgYXBwZW5kZWQgdG8uCisKK1BSRVRUWV9GSUxFUyAgICA/PSAkKFNPVVJDRVMpICQoSEVBREVSUykKKworIyBQUkVUVFlfU1VCRElSUworIworIyBUaGlzIGRlZmluZXMgdGhlIHN1YmRpcmVjdG9yaWVzIGZvciB3aGljaCB0aGUgcmVjdXJzaXZlICdwcmV0dHknIGFuZAorIyAncHJldHR5LWNoZWNrJyB0YXJnZXRzIHdpbGwgcnVuIGFnYWluc3QuCisjCisjIFRoaXMgZGVmYXVsdHMgdG8gU1VCRElSUyBhbmQgbWF5IGJlIG92ZXJyaWRkZW4gb3IgYXBwZW5kZWQgdG8uCisKK1BSRVRUWV9TVUJESVJTICA/PSAkKFNVQkRJUlMpCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy9zdWJkaXJzLmFtIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL3N1YmRpcnMuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0Y2VmZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy9zdWJkaXJzLmFtCkBAIC0wLDAgKzEsNzggQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYXV0b21ha2UgdmFyaWFibGVzIGFuZCBtYWNyb3MgY29tbW9uIHRvIGFsbAorIyAgICAgIG90aGVyIGF1dG9tYWtlIGhlYWRlcnMgYW5kIGZpbGVzIGZvciBpbnZva2luZyBtYWtlIGluIGEgbGlzdAorIyAgICAgIG9mIHN1YmRpcmVjdG9yaWVzIHdpdGggYSBsaXN0IG9mIHRhcmdldCBnb2Fscy4KKyMKKworIworIyBubC1tYWtlLXN1YmRpcnMtd2l0aC1kaXJzLWFuZC1nb2FscyA8c3ViZGlyZWN0b3JpZXM+IDxnb2Fscz4KKyMKKyMgVGhpcyBpdGVyYXRpdmVseSBpbnZva2VzIG1ha2Ugd2l0aCB0aGUgcHJvdmlkZWQgdGFyZ2V0IGdvYWxzIGluIGVhY2gKKyMgc3ViZGlyZWN0b3J5IHNwZWNpZmllZC4KKyMKKyMgICBzdWJkaXJlY3RvcmllcyAgQSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBzdWJkaXJlY3RvcmllcyBpbiB3aGljaCB0bworIyAgICAgICAgICAgICAgICAgICBpbnZva2UgbWFrZSB3aXRoIHRoZSBwcm92aWRlZCB0YXJnZXQgZ29hbHMuCisjCisjICAgZ29hbHMgICAgICAgICAgIEEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgdGFyZ2V0IGdvYWxzIHRvCisjICAgICAgICAgICAgICAgICAgIGF0dGVtcHQgdG8gbWFrZSBpbiBlYWNoIHNwZWNpZmllZCBzdWJkaXJlY3RvcnkuCisjCitkZWZpbmUgbmwtbWFrZS1zdWJkaXJzLXdpdGgtZGlycy1hbmQtZ29hbHMKKyskKEFNX1ZfYXQpZm9yIHN1YmRpciBpbiAkKDEpOyBkbyBcCisgICAgZWNobyAiTWFraW5nICQoMikgaW4gJCR7c3ViZGlyfSI7IFwKKyAgICAkKE1BS0UpIC1DICIkJHtzdWJkaXJ9IiAkKEFNX01BS0VGTEFHUykgJCgyKSBcCisgICAgfHwgZXhpdCAxOyBcCitkb25lCitlbmRlZiAjIG5sLW1ha2Utc3ViZGlycy13aXRoLWRpcnMtYW5kLWdvYWxzCisKKyMKKyMgbmwtbWFrZS1zdWJkaXJzLXdpdGgtZGlycyA8c3ViZGlyZWN0b3JpZXM+CisjCisjIFRoaXMgaXRlcmF0aXZlbHkgaW52b2tlcyBtYWtlIHdpdGggdGhlIHRhcmdldCBnb2FscyBkZWZpbmVkIGluCisjIE1BS0VDTURHT0FMUyBpbiBlYWNoIHN1YmRpcmVjdG9yeSBzcGVjaWZpZWQuCisjCisjICAgc3ViZGlyZWN0b3JpZXMgIEEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2Ygc3ViZGlyZWN0b3JpZXMgaW4gd2hpY2ggdG8KKyMgICAgICAgICAgICAgICAgICAgaW52b2tlIG1ha2Ugd2l0aCB0aGUgcHJvdmlkZWQgdGFyZ2V0IGdvYWxzLgorIworZGVmaW5lIG5sLW1ha2Utc3ViZGlycy13aXRoLWRpcnMKKyQoY2FsbCBubC1tYWtlLXN1YmRpcnMtd2l0aC1kaXJzLWFuZC1nb2FscywkKDEpLCQoTUFLRUNNREdPQUxTKSkKK2VuZGVmICMgbmwtbWFrZS1zdWJkaXJzLXdpdGgtZGlycworCisjCisjIG5sLW1ha2Utc3ViZGlycy13aXRoLWdvYWxzIDxnb2Fscz4KKyMKKyMgVGhpcyBpdGVyYXRpdmVseSBpbnZva2VzIG1ha2Ugd2l0aCB0aGUgcHJvdmlkZWQgdGFyZ2V0IGdvYWxzIGluIHRoZQorIyBzdWJkaXJlY3RvcmllcyBkZWZpbmVkIGluIFNVQkRJUlMuCisjCisjICAgZ29hbHMgICAgICAgICAgIEEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgdGFyZ2V0IGdvYWxzIHRvCisjICAgICAgICAgICAgICAgICAgIGF0dGVtcHQgdG8gbWFrZSBpbiBTVUJESVJTLgorIworZGVmaW5lIG5sLW1ha2Utc3ViZGlycy13aXRoLWdvYWxzCiskKGNhbGwgbmwtbWFrZS1zdWJkaXJzLXdpdGgtZGlycy1hbmQtZ29hbHMsJChTVUJESVJTKSwkKDEpKQorZW5kZWYgIyBubC1tYWtlLXN1YmRpcnMtd2l0aC1nb2FscworCisjCisjIG5sLW1ha2Utc3ViZGlycworIworIyBUaGlzIGl0ZXJhdGl2ZWx5IGludm9rZXMgbWFrZSB3aXRoIHRoZSB0YXJnZXQgZ29hbHMgZGVmaW5lZCBpbgorIyBNQUtFQ01ER09BTFMgaW4gdGhlIHN1YmRpcmVjdG9yaWVzIGRlZmluZWQgaW4gU1VCRElSUy4KKyMKK2RlZmluZSBubC1tYWtlLXN1YmRpcnMKKyQoY2FsbCBubC1tYWtlLXN1YmRpcnMtd2l0aC1kaXJzLWFuZC1nb2FscywkKFNVQkRJUlMpLCQoTUFLRUNNREdPQUxTKSkKK2VuZGVmICMgbmwtbWFrZS1zdWJkaXJzCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvdmVyYm9zaXR5LmFtIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL3ZlcmJvc2l0eS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjcyYmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL3ZlcmJvc2l0eS5hbQpAQCAtMCwwICsxLDM1IEBACisjCisjICAgIENvcHlyaWdodCAyMDE0LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGF1dG9tYWtlIHZhcmlhYmxlcyBjb21tb24gdG8gYWxsIG90aGVyCisjICAgICAgYXV0b21ha2UgaGVhZGVycyBhbmQgZmlsZXMgZm9yIHNpbGVudC1ydWxlcy1zdHlsZSAoVj1bMHwxXSkgYnVpbGQKKyMgICAgICB2ZXJib3NpdHkgb3V0cHV0LgorIworCitBTV9WX0xOX1MgICAgICAgPSAkKGFtX192X0xOX1NfJChWKSkKK2FtX192X0xOX1NfICAgICA9ICQoYW1fX3ZfTE5fU18kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0xOX1NfMCAgICA9IEBlY2hvICIgIExOICAgICAgICQoQCkiOworYW1fX3ZfTE5fU18xICAgID0gCisKK0FNX1ZfTUtESVJfUCAgICA9ICQoYW1fX3ZfTUtESVJfUF8kKFYpKQorYW1fX3ZfTUtESVJfUF8gID0gJChhbV9fdl9NS0RJUl9QXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfTUtESVJfUF8wID0gQGVjaG8gIiAgTUtESVIgICAgJChAKSI7CithbV9fdl9NS0RJUl9QXzEgPSAKKworCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXRjL2xjb3YuY29uZmlnIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9ldGMvbGNvdi5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZTQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXRjL2xjb3YuY29uZmlnCkBAIC0wLDAgKzEsMTQ4IEBACisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyBhbiBsY292IGNvbmZpZ3VyYXRpb24gZmlsZSBiYXNlZCBvbiB0aGUgZGVmYXVsdAorIyAgICAgIGZyb20gL2V0Yy9sY292cmMuIFRoZSBrZXkgZGlmZmVyZW5jZSBpcyB0aGUgaW5jbHVzaW9uIG9mCisjICAgICAgJ2dlbmh0bWxfYnJhbmNoX2NvdmVyYWdlID0gMScgYW5kIGxjb3ZfYnJhbmNoX2NvdmVyYWdlID0gMScgdG8KKyMgICAgICBlbnN1cmUgdGhhdCBicmFuY2ggY292ZXJhZ2UgaXMgcmVwb3J0ZWQuCisjCisKKyMgRXh0ZXJuYWwgc3R5bGUgc2hlZXQgZmlsZQorI2dlbmh0bWxfY3NzX2ZpbGUgPSBnY292LmNzcworCisjIENvdmVyYWdlIHJhdGUgbGltaXRzCitnZW5odG1sX2hpX2xpbWl0ID0gOTAKK2dlbmh0bWxfbWVkX2xpbWl0ID0gNzUKKworIyBXaWR0aCBvZiBsaW5lIGNvdmVyYWdlIGZpZWxkIGluIHNvdXJjZSBjb2RlIHZpZXcKK2dlbmh0bWxfbGluZV9maWVsZF93aWR0aCA9IDEyCisKKyMgV2lkdGggb2YgYnJhbmNoIGNvdmVyYWdlIGZpZWxkIGluIHNvdXJjZSBjb2RlIHZpZXcKK2dlbmh0bWxfYnJhbmNoX2ZpZWxkX3dpZHRoID0gMTYKKworIyBXaWR0aCBvZiBvdmVydmlldyBpbWFnZQorZ2VuaHRtbF9vdmVydmlld193aWR0aCA9IDgwCisKKyMgUmVzb2x1dGlvbiBvZiBvdmVydmlldyBuYXZpZ2F0aW9uCitnZW5odG1sX25hdl9yZXNvbHV0aW9uID0gNAorCisjIE9mZnNldCBmb3Igc291cmNlIGNvZGUgbmF2aWdhdGlvbgorZ2VuaHRtbF9uYXZfb2Zmc2V0ID0gMTAKKworIyBEbyBub3QgcmVtb3ZlIHVudXNlZCB0ZXN0IGRlc2NyaXB0aW9ucyBpZiBub24temVybworZ2VuaHRtbF9rZWVwX2Rlc2NyaXB0aW9ucyA9IDAKKworIyBEbyBub3QgcmVtb3ZlIHByZWZpeCBmcm9tIGRpcmVjdG9yeSBuYW1lcyBpZiBub24temVybworZ2VuaHRtbF9ub19wcmVmaXggPSAwCisKKyMgRG8gbm90IGNyZWF0ZSBzb3VyY2UgY29kZSB2aWV3IGlmIG5vbi16ZXJvCitnZW5odG1sX25vX3NvdXJjZSA9IDAKKworIyBTcGVjaWZ5IHNpemUgb2YgdGFicworZ2VuaHRtbF9udW1fc3BhY2VzID0gOAorCisjIEhpZ2hsaWdodCBsaW5lcyB3aXRoIGNvbnZlcnRlZC1vbmx5IGRhdGEgaWYgbm9uLXplcm8KK2dlbmh0bWxfaGlnaGxpZ2h0ID0gMAorCisjIEluY2x1ZGUgY29sb3IgbGVnZW5kIGluIEhUTUwgb3V0cHV0IGlmIG5vbi16ZXJvCitnZW5odG1sX2xlZ2VuZCA9IDAKKworIyBJbmNsdWRlIEhUTUwgZmlsZSBhdCBzdGFydCBvZiBIVE1MIG91dHB1dAorI2dlbmh0bWxfaHRtbF9wcm9sb2cgPSBwcm9sb2cucGhwCisKKyMgSW5jbHVkZSBIVE1MIGZpbGUgYXQgZW5kIG9mIEhUTUwgb3V0cHV0CisjZ2VuaHRtbF9odG1sX2VwaWxvZyA9IGVwaWxvZy5waHAKKworIyBVc2UgY3VzdG9tIEhUTUwgZmlsZSBleHRlbnNpb24KKyNnZW5odG1sX2h0bWxfZXh0ZW5zaW9uID0gaHRtbAorCisjIENvbXByZXNzIGFsbCBnZW5lcmF0ZWQgaHRtbCBmaWxlcyB3aXRoIGd6aXAuCisjZ2VuaHRtbF9odG1sX2d6aXAgPSAxCisKKyMgSW5jbHVkZSBzb3J0ZWQgb3ZlcnZpZXcgcGFnZXMKK2dlbmh0bWxfc29ydCA9IDEKKworIyBJbmNsdWRlIGZ1bmN0aW9uIGNvdmVyYWdlIGRhdGEgZGlzcGxheQorI2dlbmh0bWxfZnVuY3Rpb25fY292ZXJhZ2UgPSAxCisKKyMgSW5jbHVkZSBicmFuY2ggY292ZXJhZ2UgZGF0YSBkaXNwbGF5CitnZW5odG1sX2JyYW5jaF9jb3ZlcmFnZSA9IDEKKworIyBTcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgc2V0IG9mIGFsbCBnZW5lcmF0ZWQgSFRNTCBwYWdlcworZ2VuaHRtbF9jaGFyc2V0PVVURi04CisKKyMgQWxsb3cgSFRNTCBtYXJrdXAgaW4gdGVzdCBjYXNlIGRlc2NyaXB0aW9uIHRleHQgaWYgbm9uLXplcm8KK2dlbmh0bWxfZGVzY19odG1sPTAKKworIyBMb2NhdGlvbiBvZiB0aGUgZ2NvdiB0b29sCisjZ2VuaW5mb19nY292X3Rvb2wgPSBnY292CisKKyMgQWRqdXN0IHRlc3QgbmFtZXMgaWYgbm9uLXplcm8KKyNnZW5pbmZvX2FkanVzdF90ZXN0bmFtZSA9IDAKKworIyBDYWxjdWxhdGUgYSBjaGVja3N1bSBmb3IgZWFjaCBsaW5lIGlmIG5vbi16ZXJvCitnZW5pbmZvX2NoZWNrc3VtID0gMAorCisjIEVuYWJsZSBsaWJ0b29sIGNvbXBhdGliaWxpdHkgbW9kZSBpZiBub24temVybworZ2VuaW5mb19jb21wYXRfbGlidG9vbCA9IDAKKworIyBTcGVjaWZ5IHdoZXRoZXIgdG8gY2FwdHVyZSBjb3ZlcmFnZSBkYXRhIGZvciBleHRlcm5hbCBzb3VyY2UKKyMgZmlsZXMKKyNnZW5pbmZvX2V4dGVybmFsID0gMQorCisjIFVzZSBnY2924oCZcyAtLWFsbC1ibG9ja3Mgb3B0aW9uIGlmIG5vbi16ZXJvCisjZ2VuaW5mb19nY292X2FsbF9ibG9ja3MgPSAxCisKKyMgU3BlY2lmeSBjb21wYXRpYmxpdHkgbW9kZXMgKHNhbWUgYXMgLS1jb21wYXQgb3B0aW9uCisjIG9mIGdlbmluZm8pCisjZ2VuaW5mb19jb21wYXQgPSBsaWJ0b29sPW9uLCBoYW1tZXI9YXV0bywgc3BsaXRfY3JjPWF1dG8KKworIyBBZGp1c3QgcGF0aCB0byBzb3VyY2UgZmlsZXMgYnkgcmVtb3Zpbmcgb3IgY2hhbmdpbmcgcGF0aAorIyBjb21wb25lbnRzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBwYXR0ZXJuIChQZXJsIHJlZ3VsYXIKKyMgZXhwcmVzc2lvbiBmb3JtYXQpCisjZ2VuaW5mb19hZGp1c3Rfc3JjX3BhdGggPSAvdG1wL2J1aWxkID0+IC91c3Ivc3JjCisKKyMgU3BlY2lmeSBpZiBnZW5pbmZvIHNob3VsZCB0cnkgdG8gYXV0b21hdGljYWxseSBkZXRlcm1pbmUKKyMgdGhlIGJhc2UtZGlyZWN0b3J5IHdoZW4gY29sbGVjdGluZyBjb3ZlcmFnZSBkYXRhLgorZ2VuaW5mb19hdXRvX2Jhc2UgPSAxCisKKyMgRGlyZWN0b3J5IGNvbnRhaW5pbmcgZ2NvdiBrZXJuZWwgZmlsZXMKK2xjb3ZfZ2Nvdl9kaXIgPSAvcHJvYy9nY292CisKKyMgTG9jYXRpb24gZm9yIHRlbXBvcmFyeSBkaXJlY3RvcmllcworbGNvdl90bXBfZGlyID0gL3RtcAorCisjIFNob3cgZnVsbCBwYXRocyBkdXJpbmcgbGlzdCBvcGVyYXRpb24gaWYgbm9uLXplcm8KK2xjb3ZfbGlzdF9mdWxsX3BhdGggPSAwCisKKyMgU3BlY2lmeSB0aGUgbWF4aW11bSB3aWR0aCBmb3IgbGlzdCBvdXRwdXQuIFRoaXMgdmFsdWUgaXMKKyMgaWdub3JlZCB3aGVuIGxjb3ZfbGlzdF9mdWxsX3BhdGggaXMgbm9uLXplcm8uCitsY292X2xpc3Rfd2lkdGggPSA4MAorCisjIFNwZWNpZnkgdGhlIG1heGltdW0gcGVyY2VudGFnZSBvZiBmaWxlIG5hbWVzIHdoaWNoIG1heSBiZQorIyB0cnVuY2F0ZWQgd2hlbiBjaG9vc2luZyBhIGRpcmVjdG9yeSBwcmVmaXggaW4gbGlzdCBvdXRwdXQuCisjIFRoaXMgdmFsdWUgaXMgaWdub3JlZCB3aGVuIGxjb3ZfbGlzdF9mdWxsX3BhdGggaXMgbm9uLXplcm8uCitsY292X2xpc3RfdHJ1bmNhdGVfbWF4ID0gMjAKKworIyBTcGVjaWZ5IGlmIGZ1bmN0aW9uIGNvdmVyYWdlIGRhdGEgc2hvdWxkIGJlIGNvbGxlY3RlZCBhbmQKKyMgcHJvY2Vzc2VkLgorbGNvdl9mdW5jdGlvbl9jb3ZlcmFnZSA9IDEKKworIyBTcGVjaWZ5IGlmIGJyYW5jaCBjb3ZlcmFnZSBkYXRhIHNob3VsZCBiZSBjb2xsZWN0ZWQgYW5kCisjIHByb2Nlc3NlZC4KK2xjb3ZfYnJhbmNoX2NvdmVyYWdlID0gMQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9Eb3h5ZmlsZS5pbiBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvRG94eWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxYzZlYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvRG94eWZpbGUuaW4KQEAgLTAsMCArMSwyMzcxIEBACisjIERveHlmaWxlIDEuOC42CisKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgc2V0dGluZ3MgdG8gYmUgdXNlZCBieSB0aGUKKyMgICAgICBkb2N1bWVudGF0aW9uIHN5c3RlbSAjIGRveHlnZW4gKHd3dy5kb3h5Z2VuLm9yZykKKyMKKyMgICAgICBUaGlzIHdhcyBpbml0aWFsbHkgYXV0b2dlbmVyYXRlZCAnZG94eXdpemFyZCcgYW5kIHRoZW4gaGFuZC10dW5lZC4KKyMKKyMgICAgICBBbGwgdGV4dCBhZnRlciBhIGhhc2ggKCMpIGlzIGNvbnNpZGVyZWQgYSBjb21tZW50IGFuZCB3aWxsIGJlCisjICAgICAgaWdub3JlZC4KKyMKKyMgICAgICBUaGUgZm9ybWF0IGlzOgorIworIyAgICAgICAgICBUQUcgPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMKKyMgICAgICBGb3IgbGlzdHMgaXRlbXMgY2FuIGFsc28gYmUgYXBwZW5kZWQgdXNpbmc6CisjCisjICAgICAgICAgIFRBRyArPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMKKyMgICAgICBWYWx1ZXMgdGhhdCBjb250YWluIHNwYWNlcyBzaG91bGQgYmUgcGxhY2VkIGJldHdlZW4gcXVvdGVzICgiICIpCisjCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoaXMgdGFnIHNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGNvbmZpZyBmaWxlCisjIHRoYXQgZm9sbG93LiBUaGUgZGVmYXVsdCBpcyBVVEYtOCB3aGljaCBpcyBhbHNvIHRoZSBlbmNvZGluZyB1c2VkIGZvciBhbGwgdGV4dAorIyBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhpcyB0YWcuIERveHlnZW4gdXNlcyBsaWJpY29udiAob3IgdGhlIGljb252CisjIGJ1aWx0IGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udgorIyBmb3IgdGhlIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogVVRGLTguCisKK0RPWFlGSUxFX0VOQ09ESU5HICAgICAgPSBVVEYtOAorCisjIFRoZSBQUk9KRUNUX05BTUUgdGFnIGlzIGEgc2luZ2xlIHdvcmQgKG9yIGEgc2VxdWVuY2Ugb2Ygd29yZHMgc3Vycm91bmRlZCBieQorIyBkb3VibGUtcXVvdGVzLCB1bmxlc3MgeW91IGFyZSB1c2luZyBEb3h5d2l6YXJkKSB0aGF0IHNob3VsZCBpZGVudGlmeSB0aGUKKyMgcHJvamVjdCBmb3Igd2hpY2ggdGhlIGRvY3VtZW50YXRpb24gaXMgZ2VuZXJhdGVkLiBUaGlzIG5hbWUgaXMgdXNlZCBpbiB0aGUKKyMgdGl0bGUgb2YgbW9zdCBnZW5lcmF0ZWQgcGFnZXMgYW5kIGluIGEgZmV3IG90aGVyIHBsYWNlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE15IFByb2plY3QuCisKK1BST0pFQ1RfTkFNRSAgICAgICAgICAgPSBAUEFDS0FHRV9OQU1FQAorCisjIFRoZSBQUk9KRUNUX05VTUJFUiB0YWcgY2FuIGJlIHVzZWQgdG8gZW50ZXIgYSBwcm9qZWN0IG9yIHJldmlzaW9uIG51bWJlci4gVGhpcworIyBjb3VsZCBiZSBoYW5keSBmb3IgYXJjaGl2aW5nIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvciBpZiBzb21lIHZlcnNpb24KKyMgY29udHJvbCBzeXN0ZW0gaXMgdXNlZC4KKworUFJPSkVDVF9OVU1CRVIgICAgICAgICA9IEBQQUNLQUdFX1ZFUlNJT05ACisKKyMgVXNpbmcgdGhlIFBST0pFQ1RfQlJJRUYgdGFnIG9uZSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbCBvbmUgbGluZSBkZXNjcmlwdGlvbgorIyBmb3IgYSBwcm9qZWN0IHRoYXQgYXBwZWFycyBhdCB0aGUgdG9wIG9mIGVhY2ggcGFnZSBhbmQgc2hvdWxkIGdpdmUgdmlld2VyIGEKKyMgcXVpY2sgaWRlYSBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGUgcHJvamVjdC4gS2VlcCB0aGUgZGVzY3JpcHRpb24gc2hvcnQuCisKK1BST0pFQ1RfQlJJRUYgICAgICAgICAgPQorCisjIFdpdGggdGhlIFBST0pFQ1RfTE9HTyB0YWcgb25lIGNhbiBzcGVjaWZ5IGFuIGxvZ28gb3IgaWNvbiB0aGF0IGlzIGluY2x1ZGVkIGluCisjIHRoZSBkb2N1bWVudGF0aW9uLiBUaGUgbWF4aW11bSBoZWlnaHQgb2YgdGhlIGxvZ28gc2hvdWxkIG5vdCBleGNlZWQgNTUgcGl4ZWxzCisjIGFuZCB0aGUgbWF4aW11bSB3aWR0aCBzaG91bGQgbm90IGV4Y2VlZCAyMDAgcGl4ZWxzLiBEb3h5Z2VuIHdpbGwgY29weSB0aGUgbG9nbworIyB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4KKworUFJPSkVDVF9MT0dPICAgICAgICAgICA9CisKKyMgVGhlIE9VVFBVVF9ESVJFQ1RPUlkgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgKHJlbGF0aXZlIG9yIGFic29sdXRlKSBwYXRoCisjIGludG8gd2hpY2ggdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYmUgd3JpdHRlbi4gSWYgYSByZWxhdGl2ZSBwYXRoIGlzCisjIGVudGVyZWQsIGl0IHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIGRveHlnZW4gd2FzIHN0YXJ0ZWQuIElmCisjIGxlZnQgYmxhbmsgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZC4KKworT1VUUFVUX0RJUkVDVE9SWSAgICAgICA9IEBhYnNfYnVpbGRkaXJACisKKyMgSWYgdGhlIENSRUFURV9TVUJESVJTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCBjcmVhdGUgNDA5NiBzdWItCisjIGRpcmVjdG9yaWVzIChpbiAyIGxldmVscykgdW5kZXIgdGhlIG91dHB1dCBkaXJlY3Rvcnkgb2YgZWFjaCBvdXRwdXQgZm9ybWF0IGFuZAorIyB3aWxsIGRpc3RyaWJ1dGUgdGhlIGdlbmVyYXRlZCBmaWxlcyBvdmVyIHRoZXNlIGRpcmVjdG9yaWVzLiBFbmFibGluZyB0aGlzCisjIG9wdGlvbiBjYW4gYmUgdXNlZnVsIHdoZW4gZmVlZGluZyBkb3h5Z2VuIGEgaHVnZSBhbW91bnQgb2Ygc291cmNlIGZpbGVzLCB3aGVyZQorIyBwdXR0aW5nIGFsbCBnZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHdvdWxkIG90aGVyd2lzZSBjYXVzZXMKKyMgcGVyZm9ybWFuY2UgcHJvYmxlbXMgZm9yIHRoZSBmaWxlIHN5c3RlbS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitDUkVBVEVfU1VCRElSUyAgICAgICAgID0gWUVTCisKKyMgVGhlIE9VVFBVVF9MQU5HVUFHRSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBsYW5ndWFnZSBpbiB3aGljaCBhbGwKKyMgZG9jdW1lbnRhdGlvbiBnZW5lcmF0ZWQgYnkgZG94eWdlbiBpcyB3cml0dGVuLiBEb3h5Z2VuIHdpbGwgdXNlIHRoaXMKKyMgaW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYWxsIGNvbnN0YW50IG91dHB1dCBpbiB0aGUgcHJvcGVyIGxhbmd1YWdlLgorIyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBBZnJpa2FhbnMsIEFyYWJpYywgQXJtZW5pYW4sIEJyYXppbGlhbiwgQ2F0YWxhbiwgQ2hpbmVzZSwKKyMgQ2hpbmVzZS1UcmFkaXRpb25hbCwgQ3JvYXRpYW4sIEN6ZWNoLCBEYW5pc2gsIER1dGNoLCBFbmdsaXNoIChVbml0ZWQgU3RhdGVzKSwKKyMgRXNwZXJhbnRvLCBGYXJzaSAoUGVyc2lhbiksIEZpbm5pc2gsIEZyZW5jaCwgR2VybWFuLCBHcmVlaywgSHVuZ2FyaWFuLAorIyBJbmRvbmVzaWFuLCBJdGFsaWFuLCBKYXBhbmVzZSwgSmFwYW5lc2UtZW4gKEphcGFuZXNlIHdpdGggRW5nbGlzaCBtZXNzYWdlcyksCisjIEtvcmVhbiwgS29yZWFuLWVuIChLb3JlYW4gd2l0aCBFbmdsaXNoIG1lc3NhZ2VzKSwgTGF0dmlhbiwgTGl0aHVhbmlhbiwKKyMgTWFjZWRvbmlhbiwgTm9yd2VnaWFuLCBQZXJzaWFuIChGYXJzaSksIFBvbGlzaCwgUG9ydHVndWVzZSwgUm9tYW5pYW4sIFJ1c3NpYW4sCisjIFNlcmJpYW4sIFNlcmJpYW4tQ3lyaWxsaWMsIFNsb3ZhaywgU2xvdmVuZSwgU3BhbmlzaCwgU3dlZGlzaCwgVHVya2lzaCwKKyMgVWtyYWluaWFuIGFuZCBWaWV0bmFtZXNlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogRW5nbGlzaC4KKworT1VUUFVUX0xBTkdVQUdFICAgICAgICA9IEVuZ2xpc2gKKworIyBJZiB0aGUgQlJJRUZfTUVNQkVSX0RFU0MgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGluY2x1ZGUgYnJpZWYgbWVtYmVyCisjIGRlc2NyaXB0aW9ucyBhZnRlciB0aGUgbWVtYmVycyB0aGF0IGFyZSBsaXN0ZWQgaW4gdGhlIGZpbGUgYW5kIGNsYXNzCisjIGRvY3VtZW50YXRpb24gKHNpbWlsYXIgdG8gSmF2YWRvYykuIFNldCB0byBOTyB0byBkaXNhYmxlIHRoaXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0JSSUVGX01FTUJFUl9ERVNDICAgICAgPSBZRVMKKworIyBJZiB0aGUgUkVQRUFUX0JSSUVGIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBwcmVwZW5kIHRoZSBicmllZgorIyBkZXNjcmlwdGlvbiBvZiBhIG1lbWJlciBvciBmdW5jdGlvbiBiZWZvcmUgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uCisjCisjIE5vdGU6IElmIGJvdGggSElERV9VTkRPQ19NRU1CRVJTIGFuZCBCUklFRl9NRU1CRVJfREVTQyBhcmUgc2V0IHRvIE5PLCB0aGUKKyMgYnJpZWYgZGVzY3JpcHRpb25zIHdpbGwgYmUgY29tcGxldGVseSBzdXBwcmVzc2VkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitSRVBFQVRfQlJJRUYgICAgICAgICAgID0gWUVTCisKKyMgVGhpcyB0YWcgaW1wbGVtZW50cyBhIHF1YXNpLWludGVsbGlnZW50IGJyaWVmIGRlc2NyaXB0aW9uIGFiYnJldmlhdG9yIHRoYXQgaXMKKyMgdXNlZCB0byBmb3JtIHRoZSB0ZXh0IGluIHZhcmlvdXMgbGlzdGluZ3MuIEVhY2ggc3RyaW5nIGluIHRoaXMgbGlzdCwgaWYgZm91bmQKKyMgYXMgdGhlIGxlYWRpbmcgdGV4dCBvZiB0aGUgYnJpZWYgZGVzY3JpcHRpb24sIHdpbGwgYmUgc3RyaXBwZWQgZnJvbSB0aGUgdGV4dAorIyBhbmQgdGhlIHJlc3VsdCwgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgd2hvbGUgbGlzdCwgaXMgdXNlZCBhcyB0aGUgYW5ub3RhdGVkCisjIHRleHQuIE90aGVyd2lzZSwgdGhlIGJyaWVmIGRlc2NyaXB0aW9uIGlzIHVzZWQgYXMtaXMuIElmIGxlZnQgYmxhbmssIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzIGFyZSB1c2VkICgkbmFtZSBpcyBhdXRvbWF0aWNhbGx5IHJlcGxhY2VkIHdpdGggdGhlIG5hbWUgb2YKKyMgdGhlIGVudGl0eSk6VGhlICRuYW1lIGNsYXNzLCBUaGUgJG5hbWUgd2lkZ2V0LCBUaGUgJG5hbWUgZmlsZSwgaXMsIHByb3ZpZGVzLAorIyBzcGVjaWZpZXMsIGNvbnRhaW5zLCByZXByZXNlbnRzLCBhLCBhbiBhbmQgdGhlLgorCitBQkJSRVZJQVRFX0JSSUVGICAgICAgID0gIlRoZSAkbmFtZSBjbGFzcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgJG5hbWUgd2lkZ2V0IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSAkbmFtZSBmaWxlIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgaXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXByZXNlbnRzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisKKyMgSWYgdGhlIEFMV0FZU19ERVRBSUxFRF9TRUMgYW5kIFJFUEVBVF9CUklFRiB0YWdzIGFyZSBib3RoIHNldCB0byBZRVMgdGhlbgorIyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBkZXRhaWxlZCBzZWN0aW9uIGV2ZW4gaWYgdGhlcmUgaXMgb25seSBhIGJyaWVmCisjIGRlc2NyaXB0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0FMV0FZU19ERVRBSUxFRF9TRUMgICAgPSBOTworCisjIElmIHRoZSBJTkxJTkVfSU5IRVJJVEVEX01FTUIgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBzaG93IGFsbAorIyBpbmhlcml0ZWQgbWVtYmVycyBvZiBhIGNsYXNzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgY2xhc3MgYXMgaWYgdGhvc2UKKyMgbWVtYmVycyB3ZXJlIG9yZGluYXJ5IGNsYXNzIG1lbWJlcnMuIENvbnN0cnVjdG9ycywgZGVzdHJ1Y3RvcnMgYW5kIGFzc2lnbm1lbnQKKyMgb3BlcmF0b3JzIG9mIHRoZSBiYXNlIGNsYXNzZXMgd2lsbCBub3QgYmUgc2hvd24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSU5MSU5FX0lOSEVSSVRFRF9NRU1CICA9IE5PCisKKyMgSWYgdGhlIEZVTExfUEFUSF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgcHJlcGVuZCB0aGUgZnVsbCBwYXRoCisjIGJlZm9yZSBmaWxlcyBuYW1lIGluIHRoZSBmaWxlIGxpc3QgYW5kIGluIHRoZSBoZWFkZXIgZmlsZXMuIElmIHNldCB0byBOTyB0aGUKKyMgc2hvcnRlc3QgcGF0aCB0aGF0IG1ha2VzIHRoZSBmaWxlIG5hbWUgdW5pcXVlIHdpbGwgYmUgdXNlZAorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitGVUxMX1BBVEhfTkFNRVMgICAgICAgID0gWUVTCisKKyMgVGhlIFNUUklQX0ZST01fUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3RyaXAgYSB1c2VyLWRlZmluZWQgcGFydCBvZiB0aGUgcGF0aC4KKyMgU3RyaXBwaW5nIGlzIG9ubHkgZG9uZSBpZiBvbmUgb2YgdGhlIHNwZWNpZmllZCBzdHJpbmdzIG1hdGNoZXMgdGhlIGxlZnQtaGFuZAorIyBwYXJ0IG9mIHRoZSBwYXRoLiBUaGUgdGFnIGNhbiBiZSB1c2VkIHRvIHNob3cgcmVsYXRpdmUgcGF0aHMgaW4gdGhlIGZpbGUgbGlzdC4KKyMgSWYgbGVmdCBibGFuayB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggZG94eWdlbiBpcyBydW4gaXMgdXNlZCBhcyB0aGUgcGF0aCB0bworIyBzdHJpcC4KKyMKKyMgTm90ZSB0aGF0IHlvdSBjYW4gc3BlY2lmeSBhYnNvbHV0ZSBwYXRocyBoZXJlLCBidXQgYWxzbyByZWxhdGl2ZSBwYXRocywgd2hpY2gKKyMgd2lsbCBiZSByZWxhdGl2ZSBmcm9tIHRoZSBkaXJlY3Rvcnkgd2hlcmUgZG94eWdlbiBpcyBzdGFydGVkLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRlVMTF9QQVRIX05BTUVTIGlzIHNldCB0byBZRVMuCisKK1NUUklQX0ZST01fUEFUSCAgICAgICAgPSBAYWJzX3RvcF9zcmNkaXJAIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBAYWJzX3RvcF9idWlsZGRpckAKKworIyBUaGUgU1RSSVBfRlJPTV9JTkNfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3RyaXAgYSB1c2VyLWRlZmluZWQgcGFydCBvZiB0aGUKKyMgcGF0aCBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgYSBjbGFzcywgd2hpY2ggdGVsbHMgdGhlIHJlYWRlciB3aGljaAorIyBoZWFkZXIgZmlsZSB0byBpbmNsdWRlIGluIG9yZGVyIHRvIHVzZSBhIGNsYXNzLiBJZiBsZWZ0IGJsYW5rIG9ubHkgdGhlIG5hbWUgb2YKKyMgdGhlIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgdXNlZC4gT3RoZXJ3aXNlIG9uZSBzaG91bGQKKyMgc3BlY2lmeSB0aGUgbGlzdCBvZiBpbmNsdWRlIHBhdGhzIHRoYXQgYXJlIG5vcm1hbGx5IHBhc3NlZCB0byB0aGUgY29tcGlsZXIKKyMgdXNpbmcgdGhlIC1JIGZsYWcuCisKK1NUUklQX0ZST01fSU5DX1BBVEggICAgPSBAYWJzX3RvcF9zcmNkaXJACisKKyMgSWYgdGhlIFNIT1JUX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgbXVjaCBzaG9ydGVyIChidXQKKyMgbGVzcyByZWFkYWJsZSkgZmlsZSBuYW1lcy4gVGhpcyBjYW4gYmUgdXNlZnVsIGlzIHlvdXIgZmlsZSBzeXN0ZW1zIGRvZXNuJ3QKKyMgc3VwcG9ydCBsb25nIG5hbWVzIGxpa2Ugb24gRE9TLCBNYWMsIG9yIENELVJPTS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTSE9SVF9OQU1FUyAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgSkFWQURPQ19BVVRPQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgaW50ZXJwcmV0IHRoZQorIyBmaXJzdCBsaW5lICh1bnRpbCB0aGUgZmlyc3QgZG90KSBvZiBhIEphdmFkb2Mtc3R5bGUgY29tbWVudCBhcyB0aGUgYnJpZWYKKyMgZGVzY3JpcHRpb24uIElmIHNldCB0byBOTywgdGhlIEphdmFkb2Mtc3R5bGUgd2lsbCBiZWhhdmUganVzdCBsaWtlIHJlZ3VsYXIgUXQtCisjIHN0eWxlIGNvbW1lbnRzICh0aHVzIHJlcXVpcmluZyBhbiBleHBsaWNpdCBAYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZgorIyBkZXNjcmlwdGlvbi4pCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSkFWQURPQ19BVVRPQlJJRUYgICAgICA9IFlFUworCisjIElmIHRoZSBRVF9BVVRPQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgaW50ZXJwcmV0IHRoZSBmaXJzdAorIyBsaW5lICh1bnRpbCB0aGUgZmlyc3QgZG90KSBvZiBhIFF0LXN0eWxlIGNvbW1lbnQgYXMgdGhlIGJyaWVmIGRlc2NyaXB0aW9uLiBJZgorIyBzZXQgdG8gTk8sIHRoZSBRdC1zdHlsZSB3aWxsIGJlaGF2ZSBqdXN0IGxpa2UgcmVndWxhciBRdC1zdHlsZSBjb21tZW50cyAodGh1cworIyByZXF1aXJpbmcgYW4gZXhwbGljaXQgXGJyaWVmIGNvbW1hbmQgZm9yIGEgYnJpZWYgZGVzY3JpcHRpb24uKQorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1FUX0FVVE9CUklFRiAgICAgICAgICAgPSBOTworCisjIFRoZSBNVUxUSUxJTkVfQ1BQX0lTX0JSSUVGIHRhZyBjYW4gYmUgc2V0IHRvIFlFUyB0byBtYWtlIGRveHlnZW4gdHJlYXQgYQorIyBtdWx0aS1saW5lIEMrKyBzcGVjaWFsIGNvbW1lbnQgYmxvY2sgKGkuZS4gYSBibG9jayBvZiAvLyEgb3IgLy8vIGNvbW1lbnRzKSBhcworIyBhIGJyaWVmIGRlc2NyaXB0aW9uLiBUaGlzIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIFRoZSBuZXcgZGVmYXVsdCBpcworIyB0byB0cmVhdCBhIG11bHRpLWxpbmUgQysrIGNvbW1lbnQgYmxvY2sgYXMgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4gU2V0IHRoaXMKKyMgdGFnIHRvIFlFUyBpZiB5b3UgcHJlZmVyIHRoZSBvbGQgYmVoYXZpb3IgaW5zdGVhZC4KKyMKKyMgTm90ZSB0aGF0IHNldHRpbmcgdGhpcyB0YWcgdG8gWUVTIGFsc28gbWVhbnMgdGhhdCByYXRpb25hbCByb3NlIGNvbW1lbnRzIGFyZQorIyBub3QgcmVjb2duaXplZCBhbnkgbW9yZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitNVUxUSUxJTkVfQ1BQX0lTX0JSSUVGID0gTk8KKworIyBJZiB0aGUgSU5IRVJJVF9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gYW4gdW5kb2N1bWVudGVkIG1lbWJlciBpbmhlcml0cyB0aGUKKyMgZG9jdW1lbnRhdGlvbiBmcm9tIGFueSBkb2N1bWVudGVkIG1lbWJlciB0aGF0IGl0IHJlLWltcGxlbWVudHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0lOSEVSSVRfRE9DUyAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgU0VQQVJBVEVfTUVNQkVSX1BBR0VTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCBwcm9kdWNlIGEKKyMgbmV3IHBhZ2UgZm9yIGVhY2ggbWVtYmVyLiBJZiBzZXQgdG8gTk8sIHRoZSBkb2N1bWVudGF0aW9uIG9mIGEgbWVtYmVyIHdpbGwgYmUKKyMgcGFydCBvZiB0aGUgZmlsZS9jbGFzcy9uYW1lc3BhY2UgdGhhdCBjb250YWlucyBpdC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTRVBBUkFURV9NRU1CRVJfUEFHRVMgID0gTk8KKworIyBUaGUgVEFCX1NJWkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIHNwYWNlcyBpbiBhIHRhYi4gRG94eWdlbgorIyB1c2VzIHRoaXMgdmFsdWUgdG8gcmVwbGFjZSB0YWJzIGJ5IHNwYWNlcyBpbiBjb2RlIGZyYWdtZW50cy4KKyMgTWluaW11bSB2YWx1ZTogMSwgbWF4aW11bSB2YWx1ZTogMTYsIGRlZmF1bHQgdmFsdWU6IDQuCisKK1RBQl9TSVpFICAgICAgICAgICAgICAgPSA0CisKKyMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIG51bWJlciBvZiBhbGlhc2VzIHRoYXQgYWN0IGFzIGNvbW1hbmRzIGluCisjIHRoZSBkb2N1bWVudGF0aW9uLiBBbiBhbGlhcyBoYXMgdGhlIGZvcm06CisjIG5hbWU9dmFsdWUKKyMgRm9yIGV4YW1wbGUgYWRkaW5nCisjICJzaWRlZWZmZWN0PUBwYXIgU2lkZSBFZmZlY3RzOlxuIgorIyB3aWxsIGFsbG93IHlvdSB0byBwdXQgdGhlIGNvbW1hbmQgXHNpZGVlZmZlY3QgKG9yIEBzaWRlZWZmZWN0KSBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbiwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSB1c2VyLWRlZmluZWQgcGFyYWdyYXBoIHdpdGggaGVhZGluZworIyAiU2lkZSBFZmZlY3RzOiIuIFlvdSBjYW4gcHV0IFxuJ3MgaW4gdGhlIHZhbHVlIHBhcnQgb2YgYW4gYWxpYXMgdG8gaW5zZXJ0CisjIG5ld2xpbmVzLgorCitBTElBU0VTICAgICAgICAgICAgICAgID0KKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbnVtYmVyIG9mIHdvcmQta2V5d29yZCBtYXBwaW5ncyAoVENMIG9ubHkpLgorIyBBIG1hcHBpbmcgaGFzIHRoZSBmb3JtICJuYW1lPXZhbHVlIi4gRm9yIGV4YW1wbGUgYWRkaW5nICJjbGFzcz1pdGNsOjpjbGFzcyIKKyMgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIHRoZSBjb21tYW5kIGNsYXNzIGluIHRoZSBpdGNsOjpjbGFzcyBtZWFuaW5nLgorCitUQ0xfU1VCU1QgICAgICAgICAgICAgID0KKworIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9GT1JfQyB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBDIHNvdXJjZXMKKyMgb25seS4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgbW9yZSB0YWlsb3JlZCBmb3IgQy4gRm9yCisjIGluc3RhbmNlLCBzb21lIG9mIHRoZSBuYW1lcyB0aGF0IGFyZSB1c2VkIHdpbGwgYmUgZGlmZmVyZW50LiBUaGUgbGlzdCBvZiBhbGwKKyMgbWVtYmVycyB3aWxsIGJlIG9taXR0ZWQsIGV0Yy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitPUFRJTUlaRV9PVVRQVVRfRk9SX0MgID0gTk8KKworIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9KQVZBIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIEphdmEgb3IKKyMgUHl0aG9uIHNvdXJjZXMgb25seS4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgbW9yZSB0YWlsb3JlZAorIyBmb3IgdGhhdCBsYW5ndWFnZS4gRm9yIGluc3RhbmNlLCBuYW1lc3BhY2VzIHdpbGwgYmUgcHJlc2VudGVkIGFzIHBhY2thZ2VzLAorIyBxdWFsaWZpZWQgc2NvcGVzIHdpbGwgbG9vayBkaWZmZXJlbnQsIGV0Yy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitPUFRJTUlaRV9PVVRQVVRfSkFWQSAgID0gTk8KKworIyBTZXQgdGhlIE9QVElNSVpFX0ZPUl9GT1JUUkFOIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIEZvcnRyYW4KKyMgc291cmNlcy4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgdGFpbG9yZWQgZm9yIEZvcnRyYW4uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworT1BUSU1JWkVfRk9SX0ZPUlRSQU4gICA9IE5PCisKKyMgU2V0IHRoZSBPUFRJTUlaRV9PVVRQVVRfVkhETCB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBWSERMCisjIHNvdXJjZXMuIERveHlnZW4gd2lsbCB0aGVuIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIHRhaWxvcmVkIGZvciBWSERMLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK09QVElNSVpFX09VVFBVVF9WSERMICAgPSBOTworCisjIERveHlnZW4gc2VsZWN0cyB0aGUgcGFyc2VyIHRvIHVzZSBkZXBlbmRpbmcgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZXMgaXQKKyMgcGFyc2VzLiBXaXRoIHRoaXMgdGFnIHlvdSBjYW4gYXNzaWduIHdoaWNoIHBhcnNlciB0byB1c2UgZm9yIGEgZ2l2ZW4KKyMgZXh0ZW5zaW9uLiBEb3h5Z2VuIGhhcyBhIGJ1aWx0LWluIG1hcHBpbmcsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIG9yIGV4dGVuZCBpdAorIyB1c2luZyB0aGlzIHRhZy4gVGhlIGZvcm1hdCBpcyBleHQ9bGFuZ3VhZ2UsIHdoZXJlIGV4dCBpcyBhIGZpbGUgZXh0ZW5zaW9uLCBhbmQKKyMgbGFuZ3VhZ2UgaXMgb25lIG9mIHRoZSBwYXJzZXJzIHN1cHBvcnRlZCBieSBkb3h5Z2VuOiBJREwsIEphdmEsIEphdmFzY3JpcHQsCisjIEMjLCBDLCBDKyssIEQsIFBIUCwgT2JqZWN0aXZlLUMsIFB5dGhvbiwgRm9ydHJhbiwgVkhETC4gRm9yIGluc3RhbmNlIHRvIG1ha2UKKyMgZG94eWdlbiB0cmVhdCAuaW5jIGZpbGVzIGFzIEZvcnRyYW4gZmlsZXMgKGRlZmF1bHQgaXMgUEhQKSwgYW5kIC5mIGZpbGVzIGFzIEMKKyMgKGRlZmF1bHQgaXMgRm9ydHJhbiksIHVzZTogaW5jPUZvcnRyYW4gZj1DLgorIworIyBOb3RlIEZvciBmaWxlcyB3aXRob3V0IGV4dGVuc2lvbiB5b3UgY2FuIHVzZSBub19leHRlbnNpb24gYXMgYSBwbGFjZWhvbGRlci4KKyMKKyMgTm90ZSB0aGF0IGZvciBjdXN0b20gZXh0ZW5zaW9ucyB5b3UgYWxzbyBuZWVkIHRvIHNldCBGSUxFX1BBVFRFUk5TIG90aGVyd2lzZQorIyB0aGUgZmlsZXMgYXJlIG5vdCByZWFkIGJ5IGRveHlnZW4uCisKK0VYVEVOU0lPTl9NQVBQSU5HICAgICAgPQorCisjIElmIHRoZSBNQVJLRE9XTl9TVVBQT1JUIHRhZyBpcyBlbmFibGVkIHRoZW4gZG94eWdlbiBwcmUtcHJvY2Vzc2VzIGFsbCBjb21tZW50cworIyBhY2NvcmRpbmcgdG8gdGhlIE1hcmtkb3duIGZvcm1hdCwgd2hpY2ggYWxsb3dzIGZvciBtb3JlIHJlYWRhYmxlCisjIGRvY3VtZW50YXRpb24uIFNlZSBodHRwOi8vZGFyaW5nZmlyZWJhbGwubmV0L3Byb2plY3RzL21hcmtkb3duLyBmb3IgZGV0YWlscy4KKyMgVGhlIG91dHB1dCBvZiBtYXJrZG93biBwcm9jZXNzaW5nIGlzIGZ1cnRoZXIgcHJvY2Vzc2VkIGJ5IGRveHlnZW4sIHNvIHlvdSBjYW4KKyMgbWl4IGRveHlnZW4sIEhUTUwsIGFuZCBYTUwgY29tbWFuZHMgd2l0aCBNYXJrZG93biBmb3JtYXR0aW5nLiBEaXNhYmxlIG9ubHkgaW4KKyMgY2FzZSBvZiBiYWNrd2FyZCBjb21wYXRpYmlsaXRpZXMgaXNzdWVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitNQVJLRE9XTl9TVVBQT1JUICAgICAgID0gWUVTCisKKyMgV2hlbiBlbmFibGVkIGRveHlnZW4gdHJpZXMgdG8gbGluayB3b3JkcyB0aGF0IGNvcnJlc3BvbmQgdG8gZG9jdW1lbnRlZAorIyBjbGFzc2VzLCBvciBuYW1lc3BhY2VzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbi4gU3VjaCBhIGxpbmsgY2FuCisjIGJlIHByZXZlbnRlZCBpbiBpbmRpdmlkdWFsIGNhc2VzIGJ5IGJ5IHB1dHRpbmcgYSAlIHNpZ24gaW4gZnJvbnQgb2YgdGhlIHdvcmQKKyMgb3IgZ2xvYmFsbHkgYnkgc2V0dGluZyBBVVRPTElOS19TVVBQT1JUIHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitBVVRPTElOS19TVVBQT1JUICAgICAgID0gWUVTCisKKyMgSWYgeW91IHVzZSBTVEwgY2xhc3NlcyAoaS5lLiBzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3IsIGV0Yy4pIGJ1dCBkbyBub3Qgd2FudAorIyB0byBpbmNsdWRlIChhIHRhZyBmaWxlIGZvcikgdGhlIFNUTCBzb3VyY2VzIGFzIGlucHV0LCB0aGVuIHlvdSBzaG91bGQgc2V0IHRoaXMKKyMgdGFnIHRvIFlFUyBpbiBvcmRlciB0byBsZXQgZG94eWdlbiBtYXRjaCBmdW5jdGlvbnMgZGVjbGFyYXRpb25zIGFuZAorIyBkZWZpbml0aW9ucyB3aG9zZSBhcmd1bWVudHMgY29udGFpbiBTVEwgY2xhc3NlcyAoZS5nLiBmdW5jKHN0ZDo6c3RyaW5nKTsKKyMgdmVyc3VzIGZ1bmMoc3RkOjpzdHJpbmcpIHt9KS4gVGhpcyBhbHNvIG1ha2UgdGhlIGluaGVyaXRhbmNlIGFuZCBjb2xsYWJvcmF0aW9uCisjIGRpYWdyYW1zIHRoYXQgaW52b2x2ZSBTVEwgY2xhc3NlcyBtb3JlIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitCVUlMVElOX1NUTF9TVVBQT1JUICAgID0gTk8KKworIyBJZiB5b3UgdXNlIE1pY3Jvc29mdCdzIEMrKy9DTEkgbGFuZ3VhZ2UsIHlvdSBzaG91bGQgc2V0IHRoaXMgb3B0aW9uIHRvIFlFUyB0bworIyBlbmFibGUgcGFyc2luZyBzdXBwb3J0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0NQUF9DTElfU1VQUE9SVCAgICAgICAgPSBOTworCisjIFNldCB0aGUgU0lQX1NVUFBPUlQgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2Ygc2lwIChzZWU6CisjIGh0dHA6Ly93d3cucml2ZXJiYW5rY29tcHV0aW5nLmNvLnVrL3NvZnR3YXJlL3NpcC9pbnRybykgc291cmNlcyBvbmx5LiBEb3h5Z2VuCisjIHdpbGwgcGFyc2UgdGhlbSBsaWtlIG5vcm1hbCBDKysgYnV0IHdpbGwgYXNzdW1lIGFsbCBjbGFzc2VzIHVzZSBwdWJsaWMgaW5zdGVhZAorIyBvZiBwcml2YXRlIGluaGVyaXRhbmNlIHdoZW4gbm8gZXhwbGljaXQgcHJvdGVjdGlvbiBrZXl3b3JkIGlzIHByZXNlbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU0lQX1NVUFBPUlQgICAgICAgICAgICA9IE5PCisKKyMgRm9yIE1pY3Jvc29mdCdzIElETCB0aGVyZSBhcmUgcHJvcGdldCBhbmQgcHJvcHB1dCBhdHRyaWJ1dGVzIHRvIGluZGljYXRlCisjIGdldHRlciBhbmQgc2V0dGVyIG1ldGhvZHMgZm9yIGEgcHJvcGVydHkuIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gWUVTIHdpbGwgbWFrZQorIyBkb3h5Z2VuIHRvIHJlcGxhY2UgdGhlIGdldCBhbmQgc2V0IG1ldGhvZHMgYnkgYSBwcm9wZXJ0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aGUgbWV0aG9kcyBhcmUgaW5kZWVkIGdldHRpbmcgb3Igc2V0dGluZyBhIHNpbXBsZQorIyB0eXBlLiBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgb3IgeW91IHdhbnQgdG8gc2hvdyB0aGUgbWV0aG9kcyBhbnl3YXksIHlvdQorIyBzaG91bGQgc2V0IHRoaXMgb3B0aW9uIHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitJRExfUFJPUEVSVFlfU1VQUE9SVCAgID0gWUVTCisKKyMgSWYgbWVtYmVyIGdyb3VwaW5nIGlzIHVzZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBESVNUUklCVVRFX0dST1VQX0RPQworIyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlbiBkb3h5Z2VuIHdpbGwgcmV1c2UgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIGZpcnN0CisjIG1lbWJlciBpbiB0aGUgZ3JvdXAgKGlmIGFueSkgZm9yIHRoZSBvdGhlciBtZW1iZXJzIG9mIHRoZSBncm91cC4gQnkgZGVmYXVsdAorIyBhbGwgbWVtYmVycyBvZiBhIGdyb3VwIG11c3QgYmUgZG9jdW1lbnRlZCBleHBsaWNpdGx5LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0RJU1RSSUJVVEVfR1JPVVBfRE9DICAgPSBOTworCisjIFNldCB0aGUgU1VCR1JPVVBJTkcgdGFnIHRvIFlFUyB0byBhbGxvdyBjbGFzcyBtZW1iZXIgZ3JvdXBzIG9mIHRoZSBzYW1lIHR5cGUKKyMgKGZvciBpbnN0YW5jZSBhIGdyb3VwIG9mIHB1YmxpYyBmdW5jdGlvbnMpIHRvIGJlIHB1dCBhcyBhIHN1Ymdyb3VwIG9mIHRoYXQKKyMgdHlwZSAoZS5nLiB1bmRlciB0aGUgUHVibGljIEZ1bmN0aW9ucyBzZWN0aW9uKS4gU2V0IGl0IHRvIE5PIHRvIHByZXZlbnQKKyMgc3ViZ3JvdXBpbmcuIEFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIGRvbmUgcGVyIGNsYXNzIHVzaW5nIHRoZQorIyBcbm9zdWJncm91cGluZyBjb21tYW5kLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTVUJHUk9VUElORyAgICAgICAgICAgID0gWUVTCisKKyMgV2hlbiB0aGUgSU5MSU5FX0dST1VQRURfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUywgY2xhc3Nlcywgc3RydWN0cyBhbmQgdW5pb25zCisjIGFyZSBzaG93biBpbnNpZGUgdGhlIGdyb3VwIGluIHdoaWNoIHRoZXkgYXJlIGluY2x1ZGVkIChlLmcuIHVzaW5nIFxpbmdyb3VwKQorIyBpbnN0ZWFkIG9mIG9uIGEgc2VwYXJhdGUgcGFnZSAoZm9yIEhUTUwgYW5kIE1hbiBwYWdlcykgb3Igc2VjdGlvbiAoZm9yIExhVGVYCisjIGFuZCBSVEYpLgorIworIyBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGRvZXMgbm90IHdvcmsgaW4gY29tYmluYXRpb24gd2l0aAorIyBTRVBBUkFURV9NRU1CRVJfUEFHRVMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSU5MSU5FX0dST1VQRURfQ0xBU1NFUyA9IE5PCisKKyMgV2hlbiB0aGUgSU5MSU5FX1NJTVBMRV9TVFJVQ1RTIHRhZyBpcyBzZXQgdG8gWUVTLCBzdHJ1Y3RzLCBjbGFzc2VzLCBhbmQgdW5pb25zCisjIHdpdGggb25seSBwdWJsaWMgZGF0YSBmaWVsZHMgb3Igc2ltcGxlIHR5cGVkZWYgZmllbGRzIHdpbGwgYmUgc2hvd24gaW5saW5lIGluCisjIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBzY29wZSBpbiB3aGljaCB0aGV5IGFyZSBkZWZpbmVkIChpLmUuIGZpbGUsCisjIG5hbWVzcGFjZSwgb3IgZ3JvdXAgZG9jdW1lbnRhdGlvbiksIHByb3ZpZGVkIHRoaXMgc2NvcGUgaXMgZG9jdW1lbnRlZC4gSWYgc2V0CisjIHRvIE5PLCBzdHJ1Y3RzLCBjbGFzc2VzLCBhbmQgdW5pb25zIGFyZSBzaG93biBvbiBhIHNlcGFyYXRlIHBhZ2UgKGZvciBIVE1MIGFuZAorIyBNYW4gcGFnZXMpIG9yIHNlY3Rpb24gKGZvciBMYVRlWCBhbmQgUlRGKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfU0lNUExFX1NUUlVDVFMgID0gTk8KKworIyBXaGVuIFRZUEVERUZfSElERVNfU1RSVUNUIHRhZyBpcyBlbmFibGVkLCBhIHR5cGVkZWYgb2YgYSBzdHJ1Y3QsIHVuaW9uLCBvcgorIyBlbnVtIGlzIGRvY3VtZW50ZWQgYXMgc3RydWN0LCB1bmlvbiwgb3IgZW51bSB3aXRoIHRoZSBuYW1lIG9mIHRoZSB0eXBlZGVmLiBTbworIyB0eXBlZGVmIHN0cnVjdCBUeXBlUyB7fSBUeXBlVCwgd2lsbCBhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYXMgYSBzdHJ1Y3QKKyMgd2l0aCBuYW1lIFR5cGVULiBXaGVuIGRpc2FibGVkIHRoZSB0eXBlZGVmIHdpbGwgYXBwZWFyIGFzIGEgbWVtYmVyIG9mIGEgZmlsZSwKKyMgbmFtZXNwYWNlLCBvciBjbGFzcy4gQW5kIHRoZSBzdHJ1Y3Qgd2lsbCBiZSBuYW1lZCBUeXBlUy4gVGhpcyBjYW4gdHlwaWNhbGx5IGJlCisjIHVzZWZ1bCBmb3IgQyBjb2RlIGluIGNhc2UgdGhlIGNvZGluZyBjb252ZW50aW9uIGRpY3RhdGVzIHRoYXQgYWxsIGNvbXBvdW5kCisjIHR5cGVzIGFyZSB0eXBlZGVmJ2VkIGFuZCBvbmx5IHRoZSB0eXBlZGVmIGlzIHJlZmVyZW5jZWQsIG5ldmVyIHRoZSB0YWcgbmFtZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitUWVBFREVGX0hJREVTX1NUUlVDVCAgID0gTk8KKworIyBUaGUgc2l6ZSBvZiB0aGUgc3ltYm9sIGxvb2t1cCBjYWNoZSBjYW4gYmUgc2V0IHVzaW5nIExPT0tVUF9DQUNIRV9TSVpFLiBUaGlzCisjIGNhY2hlIGlzIHVzZWQgdG8gcmVzb2x2ZSBzeW1ib2xzIGdpdmVuIHRoZWlyIG5hbWUgYW5kIHNjb3BlLiBTaW5jZSB0aGlzIGNhbiBiZQorIyBhbiBleHBlbnNpdmUgcHJvY2VzcyBhbmQgb2Z0ZW4gdGhlIHNhbWUgc3ltYm9sIGFwcGVhcnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlCisjIGNvZGUsIGRveHlnZW4ga2VlcHMgYSBjYWNoZSBvZiBwcmUtcmVzb2x2ZWQgc3ltYm9scy4gSWYgdGhlIGNhY2hlIGlzIHRvbyBzbWFsbAorIyBkb3h5Z2VuIHdpbGwgYmVjb21lIHNsb3dlci4gSWYgdGhlIGNhY2hlIGlzIHRvbyBsYXJnZSwgbWVtb3J5IGlzIHdhc3RlZC4gVGhlCisjIGNhY2hlIHNpemUgaXMgZ2l2ZW4gYnkgdGhpcyBmb3JtdWxhOiAyXigxNitMT09LVVBfQ0FDSEVfU0laRSkuIFRoZSB2YWxpZCByYW5nZQorIyBpcyAwLi45LCB0aGUgZGVmYXVsdCBpcyAwLCBjb3JyZXNwb25kaW5nIHRvIGEgY2FjaGUgc2l6ZSBvZiAyXjE2PTY1NTM2CisjIHN5bWJvbHMuIEF0IHRoZSBlbmQgb2YgYSBydW4gZG94eWdlbiB3aWxsIHJlcG9ydCB0aGUgY2FjaGUgdXNhZ2UgYW5kIHN1Z2dlc3QKKyMgdGhlIG9wdGltYWwgY2FjaGUgc2l6ZSBmcm9tIGEgc3BlZWQgcG9pbnQgb2Ygdmlldy4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogOSwgZGVmYXVsdCB2YWx1ZTogMC4KKworTE9PS1VQX0NBQ0hFX1NJWkUgICAgICA9IDAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCdWlsZCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBFWFRSQUNUX0FMTCB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgYXNzdW1lIGFsbCBlbnRpdGllcyBpbgorIyBkb2N1bWVudGF0aW9uIGFyZSBkb2N1bWVudGVkLCBldmVuIGlmIG5vIGRvY3VtZW50YXRpb24gd2FzIGF2YWlsYWJsZS4gUHJpdmF0ZQorIyBjbGFzcyBtZW1iZXJzIGFuZCBzdGF0aWMgZmlsZSBtZW1iZXJzIHdpbGwgYmUgaGlkZGVuIHVubGVzcyB0aGUKKyMgRVhUUkFDVF9QUklWQVRFIHJlc3BlY3RpdmVseSBFWFRSQUNUX1NUQVRJQyB0YWdzIGFyZSBzZXQgdG8gWUVTLgorIyBOb3RlOiBUaGlzIHdpbGwgYWxzbyBkaXNhYmxlIHRoZSB3YXJuaW5ncyBhYm91dCB1bmRvY3VtZW50ZWQgbWVtYmVycyB0aGF0IGFyZQorIyBub3JtYWxseSBwcm9kdWNlZCB3aGVuIFdBUk5JTkdTIGlzIHNldCB0byBZRVMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9BTEwgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfUFJJVkFURSB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgcHJpdmF0ZSBtZW1iZXJzIG9mIGEgY2xhc3Mgd2lsbAorIyBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWFRSQUNUX1BSSVZBVEUgICAgICAgID0gTk8KKworIyBJZiB0aGUgRVhUUkFDVF9QQUNLQUdFIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBtZW1iZXJzIHdpdGggcGFja2FnZSBvciBpbnRlcm5hbAorIyBzY29wZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYVFJBQ1RfUEFDS0FHRSAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFRSQUNUX1NUQVRJQyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgc3RhdGljIG1lbWJlcnMgb2YgYSBmaWxlIHdpbGwgYmUKKyMgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9TVEFUSUMgICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFRSQUNUX0xPQ0FMX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMgY2xhc3NlcyAoYW5kIHN0cnVjdHMpIGRlZmluZWQKKyMgbG9jYWxseSBpbiBzb3VyY2UgZmlsZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gSWYgc2V0IHRvIE5PCisjIG9ubHkgY2xhc3NlcyBkZWZpbmVkIGluIGhlYWRlciBmaWxlcyBhcmUgaW5jbHVkZWQuIERvZXMgbm90IGhhdmUgYW55IGVmZmVjdAorIyBmb3IgSmF2YSBzb3VyY2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitFWFRSQUNUX0xPQ0FMX0NMQVNTRVMgID0gWUVTCisKKyMgVGhpcyBmbGFnIGlzIG9ubHkgdXNlZnVsIGZvciBPYmplY3RpdmUtQyBjb2RlLiBXaGVuIHNldCB0byBZRVMgbG9jYWwgbWV0aG9kcywKKyMgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIHNlY3Rpb24gYnV0IG5vdCBpbiB0aGUgaW50ZXJmYWNlIGFyZQorIyBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gSWYgc2V0IHRvIE5PIG9ubHkgbWV0aG9kcyBpbiB0aGUgaW50ZXJmYWNlIGFyZQorIyBpbmNsdWRlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWFRSQUNUX0xPQ0FMX01FVEhPRFMgID0gTk8KKworIyBJZiB0aGlzIGZsYWcgaXMgc2V0IHRvIFlFUywgdGhlIG1lbWJlcnMgb2YgYW5vbnltb3VzIG5hbWVzcGFjZXMgd2lsbCBiZQorIyBleHRyYWN0ZWQgYW5kIGFwcGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhcyBhIG5hbWVzcGFjZSBjYWxsZWQKKyMgJ2Fub255bW91c19uYW1lc3BhY2V7ZmlsZX0nLCB3aGVyZSBmaWxlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgYmFzZSBuYW1lIG9mCisjIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGFub255bW91cyBuYW1lc3BhY2UuIEJ5IGRlZmF1bHQgYW5vbnltb3VzIG5hbWVzcGFjZQorIyBhcmUgaGlkZGVuLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYVFJBQ1RfQU5PTl9OU1BBQ0VTICAgPSBOTworCisjIElmIHRoZSBISURFX1VORE9DX01FTUJFUlMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBoaWRlIGFsbAorIyB1bmRvY3VtZW50ZWQgbWVtYmVycyBpbnNpZGUgZG9jdW1lbnRlZCBjbGFzc2VzIG9yIGZpbGVzLiBJZiBzZXQgdG8gTk8gdGhlc2UKKyMgbWVtYmVycyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSB2YXJpb3VzIG92ZXJ2aWV3cywgYnV0IG5vIGRvY3VtZW50YXRpb24KKyMgc2VjdGlvbiBpcyBnZW5lcmF0ZWQuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgRVhUUkFDVF9BTEwgaXMgZW5hYmxlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitISURFX1VORE9DX01FTUJFUlMgICAgID0gTk8KKworIyBJZiB0aGUgSElERV9VTkRPQ19DTEFTU0VTIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgaGlkZSBhbGwKKyMgdW5kb2N1bWVudGVkIGNsYXNzZXMgdGhhdCBhcmUgbm9ybWFsbHkgdmlzaWJsZSBpbiB0aGUgY2xhc3MgaGllcmFyY2h5LiBJZiBzZXQKKyMgdG8gTk8gdGhlc2UgY2xhc3NlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSB2YXJpb3VzIG92ZXJ2aWV3cy4gVGhpcyBvcHRpb24gaGFzCisjIG5vIGVmZmVjdCBpZiBFWFRSQUNUX0FMTCBpcyBlbmFibGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0hJREVfVU5ET0NfQ0xBU1NFUyAgICAgPSBOTworCisjIElmIHRoZSBISURFX0ZSSUVORF9DT01QT1VORFMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBoaWRlIGFsbCBmcmllbmQKKyMgKGNsYXNzfHN0cnVjdHx1bmlvbikgZGVjbGFyYXRpb25zLiBJZiBzZXQgdG8gTk8gdGhlc2UgZGVjbGFyYXRpb25zIHdpbGwgYmUKKyMgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9GUklFTkRfQ09NUE9VTkRTICA9IE5PCisKKyMgSWYgdGhlIEhJREVfSU5fQk9EWV9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgaGlkZSBhbnkKKyMgZG9jdW1lbnRhdGlvbiBibG9ja3MgZm91bmQgaW5zaWRlIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24uIElmIHNldCB0byBOTyB0aGVzZQorIyBibG9ja3Mgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZnVuY3Rpb24ncyBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIGJsb2NrLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0hJREVfSU5fQk9EWV9ET0NTICAgICAgPSBOTworCisjIFRoZSBJTlRFUk5BTF9ET0NTIHRhZyBkZXRlcm1pbmVzIGlmIGRvY3VtZW50YXRpb24gdGhhdCBpcyB0eXBlZCBhZnRlciBhCisjIFxpbnRlcm5hbCBjb21tYW5kIGlzIGluY2x1ZGVkLiBJZiB0aGUgdGFnIGlzIHNldCB0byBOTyB0aGVuIHRoZSBkb2N1bWVudGF0aW9uCisjIHdpbGwgYmUgZXhjbHVkZWQuIFNldCBpdCB0byBZRVMgdG8gaW5jbHVkZSB0aGUgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTlRFUk5BTF9ET0NTICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgQ0FTRV9TRU5TRV9OQU1FUyB0YWcgaXMgc2V0IHRvIE5PIHRoZW4gZG94eWdlbiB3aWxsIG9ubHkgZ2VuZXJhdGUgZmlsZQorIyBuYW1lcyBpbiBsb3dlci1jYXNlIGxldHRlcnMuIElmIHNldCB0byBZRVMgdXBwZXItY2FzZSBsZXR0ZXJzIGFyZSBhbHNvCisjIGFsbG93ZWQuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIGNsYXNzZXMgb3IgZmlsZXMgd2hvc2UgbmFtZXMgb25seSBkaWZmZXIKKyMgaW4gY2FzZSBhbmQgaWYgeW91ciBmaWxlIHN5c3RlbSBzdXBwb3J0cyBjYXNlIHNlbnNpdGl2ZSBmaWxlIG5hbWVzLiBXaW5kb3dzCisjIGFuZCBNYWMgdXNlcnMgYXJlIGFkdmlzZWQgdG8gc2V0IHRoaXMgb3B0aW9uIHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogc3lzdGVtIGRlcGVuZGVudC4KKworQ0FTRV9TRU5TRV9OQU1FUyAgICAgICA9IFlFUworCisjIElmIHRoZSBISURFX1NDT1BFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gdGhlbiBkb3h5Z2VuIHdpbGwgc2hvdyBtZW1iZXJzIHdpdGgKKyMgdGhlaXIgZnVsbCBjbGFzcyBhbmQgbmFtZXNwYWNlIHNjb3BlcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gSWYgc2V0IHRvIFlFUyB0aGUKKyMgc2NvcGUgd2lsbCBiZSBoaWRkZW4uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9TQ09QRV9OQU1FUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIFNIT1dfSU5DTFVERV9GSUxFUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBwdXQgYSBsaXN0IG9mCisjIHRoZSBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBieSBhIGZpbGUgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBmaWxlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTSE9XX0lOQ0xVREVfRklMRVMgICAgID0gWUVTCisKKyMgSWYgdGhlIFNIT1dfR1JPVVBFRF9NRU1CX0lOQyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIERveHlnZW4gd2lsbCBhZGQgZm9yIGVhY2gKKyMgZ3JvdXBlZCBtZW1iZXIgYW4gaW5jbHVkZSBzdGF0ZW1lbnQgdG8gdGhlIGRvY3VtZW50YXRpb24sIHRlbGxpbmcgdGhlIHJlYWRlcgorIyB3aGljaCBmaWxlIHRvIGluY2x1ZGUgaW4gb3JkZXIgdG8gdXNlIHRoZSBtZW1iZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU0hPV19HUk9VUEVEX01FTUJfSU5DICA9IE5PCisKKyMgSWYgdGhlIEZPUkNFX0xPQ0FMX0lOQ0xVREVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGxpc3QgaW5jbHVkZQorIyBmaWxlcyB3aXRoIGRvdWJsZSBxdW90ZXMgaW4gdGhlIGRvY3VtZW50YXRpb24gcmF0aGVyIHRoYW4gd2l0aCBzaGFycCBicmFja2V0cy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitGT1JDRV9MT0NBTF9JTkNMVURFUyAgID0gTk8KKworIyBJZiB0aGUgSU5MSU5FX0lORk8gdGFnIGlzIHNldCB0byBZRVMgdGhlbiBhIHRhZyBbaW5saW5lXSBpcyBpbnNlcnRlZCBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbiBmb3IgaW5saW5lIG1lbWJlcnMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0lOTElORV9JTkZPICAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgU09SVF9NRU1CRVJfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZQorIyAoZGV0YWlsZWQpIGRvY3VtZW50YXRpb24gb2YgZmlsZSBhbmQgY2xhc3MgbWVtYmVycyBhbHBoYWJldGljYWxseSBieSBtZW1iZXIKKyMgbmFtZS4gSWYgc2V0IHRvIE5PIHRoZSBtZW1iZXJzIHdpbGwgYXBwZWFyIGluIGRlY2xhcmF0aW9uIG9yZGVyLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTT1JUX01FTUJFUl9ET0NTICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFNPUlRfQlJJRUZfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZSBicmllZgorIyBkZXNjcmlwdGlvbnMgb2YgZmlsZSwgbmFtZXNwYWNlIGFuZCBjbGFzcyBtZW1iZXJzIGFscGhhYmV0aWNhbGx5IGJ5IG1lbWJlcgorIyBuYW1lLiBJZiBzZXQgdG8gTk8gdGhlIG1lbWJlcnMgd2lsbCBhcHBlYXIgaW4gZGVjbGFyYXRpb24gb3JkZXIuIE5vdGUgdGhhdAorIyB0aGlzIHdpbGwgYWxzbyBpbmZsdWVuY2UgdGhlIG9yZGVyIG9mIHRoZSBjbGFzc2VzIGluIHRoZSBjbGFzcyBsaXN0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NPUlRfQlJJRUZfRE9DUyAgICAgICAgPSBOTworCisjIElmIHRoZSBTT1JUX01FTUJFUlNfQ1RPUlNfMVNUIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHNvcnQgdGhlCisjIChicmllZiBhbmQgZGV0YWlsZWQpIGRvY3VtZW50YXRpb24gb2YgY2xhc3MgbWVtYmVycyBzbyB0aGF0IGNvbnN0cnVjdG9ycyBhbmQKKyMgZGVzdHJ1Y3RvcnMgYXJlIGxpc3RlZCBmaXJzdC4gSWYgc2V0IHRvIE5PIHRoZSBjb25zdHJ1Y3RvcnMgd2lsbCBhcHBlYXIgaW4gdGhlCisjIHJlc3BlY3RpdmUgb3JkZXJzIGRlZmluZWQgYnkgU09SVF9CUklFRl9ET0NTIGFuZCBTT1JUX01FTUJFUl9ET0NTLgorIyBOb3RlOiBJZiBTT1JUX0JSSUVGX0RPQ1MgaXMgc2V0IHRvIE5PIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgZm9yIHNvcnRpbmcgYnJpZWYKKyMgbWVtYmVyIGRvY3VtZW50YXRpb24uCisjIE5vdGU6IElmIFNPUlRfTUVNQkVSX0RPQ1MgaXMgc2V0IHRvIE5PIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgZm9yIHNvcnRpbmcKKyMgZGV0YWlsZWQgbWVtYmVyIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU09SVF9NRU1CRVJTX0NUT1JTXzFTVCA9IE5PCisKKyMgSWYgdGhlIFNPUlRfR1JPVVBfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUgaGllcmFyY2h5CisjIG9mIGdyb3VwIG5hbWVzIGludG8gYWxwaGFiZXRpY2FsIG9yZGVyLiBJZiBzZXQgdG8gTk8gdGhlIGdyb3VwIG5hbWVzIHdpbGwKKyMgYXBwZWFyIGluIHRoZWlyIGRlZmluZWQgb3JkZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU09SVF9HUk9VUF9OQU1FUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIFNPUlRfQllfU0NPUEVfTkFNRSB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIGNsYXNzIGxpc3Qgd2lsbCBiZSBzb3J0ZWQgYnkKKyMgZnVsbHktcXVhbGlmaWVkIG5hbWVzLCBpbmNsdWRpbmcgbmFtZXNwYWNlcy4gSWYgc2V0IHRvIE5PLCB0aGUgY2xhc3MgbGlzdCB3aWxsCisjIGJlIHNvcnRlZCBvbmx5IGJ5IGNsYXNzIG5hbWUsIG5vdCBpbmNsdWRpbmcgdGhlIG5hbWVzcGFjZSBwYXJ0LgorIyBOb3RlOiBUaGlzIG9wdGlvbiBpcyBub3QgdmVyeSB1c2VmdWwgaWYgSElERV9TQ09QRV9OQU1FUyBpcyBzZXQgdG8gWUVTLgorIyBOb3RlOiBUaGlzIG9wdGlvbiBhcHBsaWVzIG9ubHkgdG8gdGhlIGNsYXNzIGxpc3QsIG5vdCB0byB0aGUgYWxwaGFiZXRpY2FsCisjIGxpc3QuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU09SVF9CWV9TQ09QRV9OQU1FICAgICA9IE5PCisKKyMgSWYgdGhlIFNUUklDVF9QUk9UT19NQVRDSElORyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgZG94eWdlbiBmYWlscyB0byBkbyBwcm9wZXIKKyMgdHlwZSByZXNvbHV0aW9uIG9mIGFsbCBwYXJhbWV0ZXJzIG9mIGEgZnVuY3Rpb24gaXQgd2lsbCByZWplY3QgYSBtYXRjaCBiZXR3ZWVuCisjIHRoZSBwcm90b3R5cGUgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIG1lbWJlciBmdW5jdGlvbiBldmVuIGlmIHRoZXJlIGlzCisjIG9ubHkgb25lIGNhbmRpZGF0ZSBvciBpdCBpcyBvYnZpb3VzIHdoaWNoIGNhbmRpZGF0ZSB0byBjaG9vc2UgYnkgZG9pbmcgYQorIyBzaW1wbGUgc3RyaW5nIG1hdGNoLiBCeSBkaXNhYmxpbmcgU1RSSUNUX1BST1RPX01BVENISU5HIGRveHlnZW4gd2lsbCBzdGlsbAorIyBhY2NlcHQgYSBtYXRjaCBiZXR3ZWVuIHByb3RvdHlwZSBhbmQgaW1wbGVtZW50YXRpb24gaW4gc3VjaCBjYXNlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTVFJJQ1RfUFJPVE9fTUFUQ0hJTkcgID0gTk8KKworIyBUaGUgR0VORVJBVEVfVE9ET0xJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoIFlFUykgb3IgZGlzYWJsZSAoIE5PKSB0aGUKKyMgdG9kbyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFx0b2RvIGNvbW1hbmRzIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitHRU5FUkFURV9UT0RPTElTVCAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX1RFU1RMSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKCBZRVMpIG9yIGRpc2FibGUgKCBOTykgdGhlCisjIHRlc3QgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcdGVzdCBjb21tYW5kcyBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfVEVTVExJU1QgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9CVUdMSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKCBZRVMpIG9yIGRpc2FibGUgKCBOTykgdGhlIGJ1ZworIyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFxidWcgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX0JVR0xJU1QgICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfREVQUkVDQVRFRExJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoIFlFUykgb3IgZGlzYWJsZSAoIE5PKQorIyB0aGUgZGVwcmVjYXRlZCBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFxkZXByZWNhdGVkIGNvbW1hbmRzIGluCisjIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitHRU5FUkFURV9ERVBSRUNBVEVETElTVD0gWUVTCisKKyMgVGhlIEVOQUJMRURfU0VDVElPTlMgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBjb25kaXRpb25hbCBkb2N1bWVudGF0aW9uCisjIHNlY3Rpb25zLCBtYXJrZWQgYnkgXGlmIDxzZWN0aW9uX2xhYmVsPiAuLi4gXGVuZGlmIGFuZCBcY29uZCA8c2VjdGlvbl9sYWJlbD4KKyMgLi4uIFxlbmRjb25kIGJsb2Nrcy4KKworRU5BQkxFRF9TRUNUSU9OUyAgICAgICA9CisKKyMgVGhlIE1BWF9JTklUSUFMSVpFUl9MSU5FUyB0YWcgZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdGhhdCB0aGUKKyMgaW5pdGlhbCB2YWx1ZSBvZiBhIHZhcmlhYmxlIG9yIG1hY3JvIC8gZGVmaW5lIGNhbiBoYXZlIGZvciBpdCB0byBhcHBlYXIgaW4gdGhlCisjIGRvY3VtZW50YXRpb24uIElmIHRoZSBpbml0aWFsaXplciBjb25zaXN0cyBvZiBtb3JlIGxpbmVzIHRoYW4gc3BlY2lmaWVkIGhlcmUKKyMgaXQgd2lsbCBiZSBoaWRkZW4uIFVzZSBhIHZhbHVlIG9mIDAgdG8gaGlkZSBpbml0aWFsaXplcnMgY29tcGxldGVseS4gVGhlCisjIGFwcGVhcmFuY2Ugb2YgdGhlIHZhbHVlIG9mIGluZGl2aWR1YWwgdmFyaWFibGVzIGFuZCBtYWNyb3MgLyBkZWZpbmVzIGNhbiBiZQorIyBjb250cm9sbGVkIHVzaW5nIFxzaG93aW5pdGlhbGl6ZXIgb3IgXGhpZGVpbml0aWFsaXplciBjb21tYW5kIGluIHRoZQorIyBkb2N1bWVudGF0aW9uIHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAxMDAwMCwgZGVmYXVsdCB2YWx1ZTogMzAuCisKK01BWF9JTklUSUFMSVpFUl9MSU5FUyAgPSAzMAorCisjIFNldCB0aGUgU0hPV19VU0VEX0ZJTEVTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBsaXN0IG9mIGZpbGVzIGdlbmVyYXRlZCBhdAorIyB0aGUgYm90dG9tIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9mIGNsYXNzZXMgYW5kIHN0cnVjdHMuIElmIHNldCB0byBZRVMgdGhlIGxpc3QKKyMgd2lsbCBtZW50aW9uIHRoZSBmaWxlcyB0aGF0IHdlcmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU0hPV19VU0VEX0ZJTEVTICAgICAgICA9IFlFUworCisjIFNldCB0aGUgU0hPV19GSUxFUyB0YWcgdG8gTk8gdG8gZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgRmlsZXMgcGFnZS4gVGhpcworIyB3aWxsIHJlbW92ZSB0aGUgRmlsZXMgZW50cnkgZnJvbSB0aGUgUXVpY2sgSW5kZXggYW5kIGZyb20gdGhlIEZvbGRlciBUcmVlIFZpZXcKKyMgKGlmIHNwZWNpZmllZCkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NIT1dfRklMRVMgICAgICAgICAgICAgPSBZRVMKKworIyBTZXQgdGhlIFNIT1dfTkFNRVNQQUNFUyB0YWcgdG8gTk8gdG8gZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgTmFtZXNwYWNlcworIyBwYWdlLiBUaGlzIHdpbGwgcmVtb3ZlIHRoZSBOYW1lc3BhY2VzIGVudHJ5IGZyb20gdGhlIFF1aWNrIEluZGV4IGFuZCBmcm9tIHRoZQorIyBGb2xkZXIgVHJlZSBWaWV3IChpZiBzcGVjaWZpZWQpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTSE9XX05BTUVTUEFDRVMgICAgICAgID0gWUVTCisKKyMgVGhlIEZJTEVfVkVSU0lPTl9GSUxURVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcm9ncmFtIG9yIHNjcmlwdCB0aGF0CisjIGRveHlnZW4gc2hvdWxkIGludm9rZSB0byBnZXQgdGhlIGN1cnJlbnQgdmVyc2lvbiBmb3IgZWFjaCBmaWxlICh0eXBpY2FsbHkgZnJvbQorIyB0aGUgdmVyc2lvbiBjb250cm9sIHN5c3RlbSkuIERveHlnZW4gd2lsbCBpbnZva2UgdGhlIHByb2dyYW0gYnkgZXhlY3V0aW5nICh2aWEKKyMgcG9wZW4oKSkgdGhlIGNvbW1hbmQgY29tbWFuZCBpbnB1dC1maWxlLCB3aGVyZSBjb21tYW5kIGlzIHRoZSB2YWx1ZSBvZiB0aGUKKyMgRklMRV9WRVJTSU9OX0ZJTFRFUiB0YWcsIGFuZCBpbnB1dC1maWxlIGlzIHRoZSBuYW1lIG9mIGFuIGlucHV0IGZpbGUgcHJvdmlkZWQKKyMgYnkgZG94eWdlbi4gV2hhdGV2ZXIgdGhlIHByb2dyYW0gd3JpdGVzIHRvIHN0YW5kYXJkIG91dHB1dCBpcyB1c2VkIGFzIHRoZSBmaWxlCisjIHZlcnNpb24uIEZvciBhbiBleGFtcGxlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi4KKworRklMRV9WRVJTSU9OX0ZJTFRFUiAgICA9CisKKyMgVGhlIExBWU9VVF9GSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbGF5b3V0IGZpbGUgd2hpY2ggd2lsbCBiZSBwYXJzZWQKKyMgYnkgZG94eWdlbi4gVGhlIGxheW91dCBmaWxlIGNvbnRyb2xzIHRoZSBnbG9iYWwgc3RydWN0dXJlIG9mIHRoZSBnZW5lcmF0ZWQKKyMgb3V0cHV0IGZpbGVzIGluIGFuIG91dHB1dCBmb3JtYXQgaW5kZXBlbmRlbnQgd2F5LiBUbyBjcmVhdGUgdGhlIGxheW91dCBmaWxlCisjIHRoYXQgcmVwcmVzZW50cyBkb3h5Z2VuJ3MgZGVmYXVsdHMsIHJ1biBkb3h5Z2VuIHdpdGggdGhlIC1sIG9wdGlvbi4gWW91IGNhbgorIyBvcHRpb25hbGx5IHNwZWNpZnkgYSBmaWxlIG5hbWUgYWZ0ZXIgdGhlIG9wdGlvbiwgaWYgb21pdHRlZCBEb3h5Z2VuTGF5b3V0LnhtbAorIyB3aWxsIGJlIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIGxheW91dCBmaWxlLgorIworIyBOb3RlIHRoYXQgaWYgeW91IHJ1biBkb3h5Z2VuIGZyb20gYSBkaXJlY3RvcnkgY29udGFpbmluZyBhIGZpbGUgY2FsbGVkCisjIERveHlnZW5MYXlvdXQueG1sLCBkb3h5Z2VuIHdpbGwgcGFyc2UgaXQgYXV0b21hdGljYWxseSBldmVuIGlmIHRoZSBMQVlPVVRfRklMRQorIyB0YWcgaXMgbGVmdCBlbXB0eS4KKworTEFZT1VUX0ZJTEUgICAgICAgICAgICA9CisKKyMgVGhlIENJVEVfQklCX0ZJTEVTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGJpYiBmaWxlcyBjb250YWluaW5nCisjIHRoZSByZWZlcmVuY2UgZGVmaW5pdGlvbnMuIFRoaXMgbXVzdCBiZSBhIGxpc3Qgb2YgLmJpYiBmaWxlcy4gVGhlIC5iaWIKKyMgZXh0ZW5zaW9uIGlzIGF1dG9tYXRpY2FsbHkgYXBwZW5kZWQgaWYgb21pdHRlZC4gVGhpcyByZXF1aXJlcyB0aGUgYmlidGV4IHRvb2wKKyMgdG8gYmUgaW5zdGFsbGVkLiBTZWUgYWxzbyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpYlRlWCBmb3IgbW9yZSBpbmZvLgorIyBGb3IgTGFUZVggdGhlIHN0eWxlIG9mIHRoZSBiaWJsaW9ncmFwaHkgY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcKKyMgTEFURVhfQklCX1NUWUxFLiBUbyB1c2UgdGhpcyBmZWF0dXJlIHlvdSBuZWVkIGJpYnRleCBhbmQgcGVybCBhdmFpbGFibGUgaW4gdGhlCisjIHNlYXJjaCBwYXRoLiBEbyBub3QgdXNlIGZpbGUgbmFtZXMgd2l0aCBzcGFjZXMsIGJpYnRleCBjYW5ub3QgaGFuZGxlIHRoZW0uIFNlZQorIyBhbHNvIFxjaXRlIGZvciBpbmZvIGhvdyB0byBjcmVhdGUgcmVmZXJlbmNlcy4KKworQ0lURV9CSUJfRklMRVMgICAgICAgICA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gd2FybmluZyBhbmQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgUVVJRVQgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSBtZXNzYWdlcyB0aGF0IGFyZSBnZW5lcmF0ZWQgdG8KKyMgc3RhbmRhcmQgb3V0cHV0IGJ5IGRveHlnZW4uIElmIFFVSUVUIGlzIHNldCB0byBZRVMgdGhpcyBpbXBsaWVzIHRoYXQgdGhlCisjIG1lc3NhZ2VzIGFyZSBvZmYuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUVVJRVQgICAgICAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIFdBUk5JTkdTIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgd2FybmluZyBtZXNzYWdlcyB0aGF0IGFyZQorIyBnZW5lcmF0ZWQgdG8gc3RhbmRhcmQgZXJyb3IgKCBzdGRlcnIpIGJ5IGRveHlnZW4uIElmIFdBUk5JTkdTIGlzIHNldCB0byBZRVMKKyMgdGhpcyBpbXBsaWVzIHRoYXQgdGhlIHdhcm5pbmdzIGFyZSBvbi4KKyMKKyMgVGlwOiBUdXJuIHdhcm5pbmdzIG9uIHdoaWxlIHdyaXRpbmcgdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1dBUk5JTkdTICAgICAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgV0FSTl9JRl9VTkRPQ1VNRU5URUQgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlCisjIHdhcm5pbmdzIGZvciB1bmRvY3VtZW50ZWQgbWVtYmVycy4gSWYgRVhUUkFDVF9BTEwgaXMgc2V0IHRvIFlFUyB0aGVuIHRoaXMgZmxhZworIyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZGlzYWJsZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1dBUk5fSUZfVU5ET0NVTUVOVEVEICAgPSBZRVMKKworIyBJZiB0aGUgV0FSTl9JRl9ET0NfRVJST1IgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IKKyMgcG90ZW50aWFsIGVycm9ycyBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgc3VjaCBhcyBub3QgZG9jdW1lbnRpbmcgc29tZSBwYXJhbWV0ZXJzCisjIGluIGEgZG9jdW1lbnRlZCBmdW5jdGlvbiwgb3IgZG9jdW1lbnRpbmcgcGFyYW1ldGVycyB0aGF0IGRvbid0IGV4aXN0IG9yIHVzaW5nCisjIG1hcmt1cCBjb21tYW5kcyB3cm9uZ2x5LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitXQVJOX0lGX0RPQ19FUlJPUiAgICAgID0gWUVTCisKKyMgVGhpcyBXQVJOX05PX1BBUkFNRE9DIG9wdGlvbiBjYW4gYmUgZW5hYmxlZCB0byBnZXQgd2FybmluZ3MgZm9yIGZ1bmN0aW9ucyB0aGF0CisjIGFyZSBkb2N1bWVudGVkLCBidXQgaGF2ZSBubyBkb2N1bWVudGF0aW9uIGZvciB0aGVpciBwYXJhbWV0ZXJzIG9yIHJldHVybgorIyB2YWx1ZS4gSWYgc2V0IHRvIE5PIGRveHlnZW4gd2lsbCBvbmx5IHdhcm4gYWJvdXQgd3Jvbmcgb3IgaW5jb21wbGV0ZSBwYXJhbWV0ZXIKKyMgZG9jdW1lbnRhdGlvbiwgYnV0IG5vdCBhYm91dCB0aGUgYWJzZW5jZSBvZiBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1dBUk5fTk9fUEFSQU1ET0MgICAgICAgPSBOTworCisjIFRoZSBXQVJOX0ZPUk1BVCB0YWcgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgZG94eWdlbgorIyBjYW4gcHJvZHVjZS4gVGhlIHN0cmluZyBzaG91bGQgY29udGFpbiB0aGUgJGZpbGUsICRsaW5lLCBhbmQgJHRleHQgdGFncywgd2hpY2gKKyMgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZmlsZSBhbmQgbGluZSBudW1iZXIgZnJvbSB3aGljaCB0aGUgd2FybmluZyBvcmlnaW5hdGVkCisjIGFuZCB0aGUgd2FybmluZyB0ZXh0LiBPcHRpb25hbGx5IHRoZSBmb3JtYXQgbWF5IGNvbnRhaW4gJHZlcnNpb24sIHdoaWNoIHdpbGwKKyMgYmUgcmVwbGFjZWQgYnkgdGhlIHZlcnNpb24gb2YgdGhlIGZpbGUgKGlmIGl0IGNvdWxkIGJlIG9idGFpbmVkIHZpYQorIyBGSUxFX1ZFUlNJT05fRklMVEVSKQorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogJGZpbGU6JGxpbmU6ICR0ZXh0LgorCitXQVJOX0ZPUk1BVCAgICAgICAgICAgID0gIiRmaWxlOiRsaW5lOiAkdGV4dCIKKworIyBUaGUgV0FSTl9MT0dGSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZmlsZSB0byB3aGljaCB3YXJuaW5nIGFuZCBlcnJvcgorIyBtZXNzYWdlcyBzaG91bGQgYmUgd3JpdHRlbi4gSWYgbGVmdCBibGFuayB0aGUgb3V0cHV0IGlzIHdyaXR0ZW4gdG8gc3RhbmRhcmQKKyMgZXJyb3IgKHN0ZGVycikuCisKK1dBUk5fTE9HRklMRSAgICAgICAgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBpbnB1dCBmaWxlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBJTlBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluCisjIGRvY3VtZW50ZWQgc291cmNlIGZpbGVzLiBZb3UgbWF5IGVudGVyIGZpbGUgbmFtZXMgbGlrZSBteWZpbGUuY3BwIG9yCisjIGRpcmVjdG9yaWVzIGxpa2UgL3Vzci9zcmMvbXlwcm9qZWN0LiBTZXBhcmF0ZSB0aGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMgd2l0aAorIyBzcGFjZXMuCisjIE5vdGU6IElmIHRoaXMgdGFnIGlzIGVtcHR5IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBzZWFyY2hlZC4KKworSU5QVVQgICAgICAgICAgICAgICAgICA9IEBhYnNfdG9wX2J1aWxkZGlyQC9zcmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIEBhYnNfdG9wX3NyY2RpckAvaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgQGFic190b3Bfc3JjZGlyQC9kb2MKKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgdGhlIHNvdXJjZSBmaWxlcworIyB0aGF0IGRveHlnZW4gcGFyc2VzLiBJbnRlcm5hbGx5IGRveHlnZW4gdXNlcyB0aGUgVVRGLTggZW5jb2RpbmcuIERveHlnZW4gdXNlcworIyBsaWJpY29udiAob3IgdGhlIGljb252IGJ1aWx0IGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIHRoZSBsaWJpY29udgorIyBkb2N1bWVudGF0aW9uIChzZWU6IGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udikgZm9yIHRoZSBsaXN0IG9mCisjIHBvc3NpYmxlIGVuY29kaW5ncy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFVURi04LgorCitJTlBVVF9FTkNPRElORyAgICAgICAgID0gVVRGLTgKKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIElOUFVUIHRhZyBjb250YWlucyBkaXJlY3RvcmllcywgeW91IGNhbiB1c2UgdGhlCisjIEZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybnMgKGxpa2UgKi5jcHAgYW5kCisjICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuayB0aGUKKyMgZm9sbG93aW5nIHBhdHRlcm5zIGFyZSB0ZXN0ZWQ6Ki5jLCAqLmNjLCAqLmN4eCwgKi5jcHAsICouYysrLCAqLmphdmEsICouaWksCisjICouaXh4LCAqLmlwcCwgKi5pKyssICouaW5sLCAqLmlkbCwgKi5kZGwsICoub2RsLCAqLmgsICouaGgsICouaHh4LCAqLmhwcCwKKyMgKi5oKyssICouY3MsICouZCwgKi5waHAsICoucGhwNCwgKi5waHA1LCAqLnBodG1sLCAqLmluYywgKi5tLCAqLm1hcmtkb3duLAorIyAqLm1kLCAqLm1tLCAqLmRveCwgKi5weSwgKi5mOTAsICouZiwgKi5mb3IsICoudGNsLCAqLnZoZCwgKi52aGRsLCAqLnVjZiwKKyMgKi5xc2YsICouYXMgYW5kICouanMuCisKK0ZJTEVfUEFUVEVSTlMgICAgICAgICAgPSAqLmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouY2MgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouY3h4IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmNwcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5jKysgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5qYXZhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmlpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLml4eCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5pcHAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaSsrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmlubCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmhoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmh4eCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5ocHAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaCsrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmlkbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5vZGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouY3MgXAorICAgICAgICAgICAgICAgICAgICAgICAgICoucGhwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLnBocDMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaW5jIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLm0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICoubW0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICouZG94IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLnB5IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmY5MCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5mIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmZvciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi52aGQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICoudmhkbAorCisjIFRoZSBSRUNVUlNJVkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciBvciBub3Qgc3ViZGlyZWN0b3JpZXMgc2hvdWxkCisjIGJlIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyBhcyB3ZWxsLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1JFQ1VSU0lWRSAgICAgICAgICAgICAgPSBZRVMKKworIyBUaGUgRVhDTFVERSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUKKyMgZXhjbHVkZWQgZnJvbSB0aGUgSU5QVVQgc291cmNlIGZpbGVzLiBUaGlzIHdheSB5b3UgY2FuIGVhc2lseSBleGNsdWRlIGEKKyMgc3ViZGlyZWN0b3J5IGZyb20gYSBkaXJlY3RvcnkgdHJlZSB3aG9zZSByb290IGlzIHNwZWNpZmllZCB3aXRoIHRoZSBJTlBVVCB0YWcuCisjCisjIE5vdGUgdGhhdCByZWxhdGl2ZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRveHlnZW4gaXMKKyMgcnVuLgorCitFWENMVURFICAgICAgICAgICAgICAgID0KKworIyBUaGUgRVhDTFVERV9TWU1MSU5LUyB0YWcgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHdoZXRoZXIgb3Igbm90IGZpbGVzIG9yCisjIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHN5bWJvbGljIGxpbmtzIChhIFVuaXggZmlsZSBzeXN0ZW0gZmVhdHVyZSkgYXJlIGV4Y2x1ZGVkCisjIGZyb20gdGhlIGlucHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYQ0xVREVfU1lNTElOS1MgICAgICAgPSBOTworCisjIElmIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVQgdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUKKyMgRVhDTFVERV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJucyB0byBleGNsdWRlCisjIGNlcnRhaW4gZmlsZXMgZnJvbSB0aG9zZSBkaXJlY3Rvcmllcy4KKyMKKyMgTm90ZSB0aGF0IHRoZSB3aWxkY2FyZHMgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmlsZSB3aXRoIGFic29sdXRlIHBhdGgsIHNvIHRvCisjIGV4Y2x1ZGUgYWxsIHRlc3QgZGlyZWN0b3JpZXMgZm9yIGV4YW1wbGUgdXNlIHRoZSBwYXR0ZXJuICovdGVzdC8qCisKK0VYQ0xVREVfUEFUVEVSTlMgICAgICAgPQorCisjIFRoZSBFWENMVURFX1NZTUJPTFMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgc3ltYm9sIG5hbWVzCisjIChuYW1lc3BhY2VzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGV0Yy4pIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlCisjIG91dHB1dC4gVGhlIHN5bWJvbCBuYW1lIGNhbiBiZSBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lLCBhIHdvcmQsIG9yIGlmIHRoZQorIyB3aWxkY2FyZCAqIGlzIHVzZWQsIGEgc3Vic3RyaW5nLiBFeGFtcGxlczogQU5hbWVzcGFjZSwgQUNsYXNzLAorIyBBQ2xhc3M6OkFOYW1lc3BhY2UsIEFOYW1lc3BhY2U6OipUZXN0CisjCisjIE5vdGUgdGhhdCB0aGUgd2lsZGNhcmRzIGFyZSBtYXRjaGVkIGFnYWluc3QgdGhlIGZpbGUgd2l0aCBhYnNvbHV0ZSBwYXRoLCBzbyB0bworIyBleGNsdWRlIGFsbCB0ZXN0IGRpcmVjdG9yaWVzIHVzZSB0aGUgcGF0dGVybiAqL3Rlc3QvKgorCitFWENMVURFX1NZTUJPTFMgICAgICAgID0KKworIyBUaGUgRVhBTVBMRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCisjIHRoYXQgY29udGFpbiBleGFtcGxlIGNvZGUgZnJhZ21lbnRzIHRoYXQgYXJlIGluY2x1ZGVkIChzZWUgdGhlIFxpbmNsdWRlCisjIGNvbW1hbmQpLgorCitFWEFNUExFX1BBVEggICAgICAgICAgID0KKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIEVYQU1QTEVfUEFUSCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZQorIyBFWEFNUExFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm4gKGxpa2UgKi5jcHAgYW5kCisjICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuayBhbGwKKyMgZmlsZXMgYXJlIGluY2x1ZGVkLgorCitFWEFNUExFX1BBVFRFUk5TICAgICAgID0gKgorCisjIElmIHRoZSBFWEFNUExFX1JFQ1VSU0lWRSB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHN1YmRpcmVjdG9yaWVzIHdpbGwgYmUKKyMgc2VhcmNoZWQgZm9yIGlucHV0IGZpbGVzIHRvIGJlIHVzZWQgd2l0aCB0aGUgXGluY2x1ZGUgb3IgXGRvbnRpbmNsdWRlIGNvbW1hbmRzCisjIGlycmVzcGVjdGl2ZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFJFQ1VSU0lWRSB0YWcuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhBTVBMRV9SRUNVUlNJVkUgICAgICA9IE5PCisKKyMgVGhlIElNQUdFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZmlsZXMgb3IgZGlyZWN0b3JpZXMKKyMgdGhhdCBjb250YWluIGltYWdlcyB0aGF0IGFyZSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZQorIyBcaW1hZ2UgY29tbWFuZCkuCisKK0lNQUdFX1BBVEggICAgICAgICAgICAgPQorCisjIFRoZSBJTlBVVF9GSUxURVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcm9ncmFtIHRoYXQgZG94eWdlbiBzaG91bGQKKyMgaW52b2tlIHRvIGZpbHRlciBmb3IgZWFjaCBpbnB1dCBmaWxlLiBEb3h5Z2VuIHdpbGwgaW52b2tlIHRoZSBmaWx0ZXIgcHJvZ3JhbQorIyBieSBleGVjdXRpbmcgKHZpYSBwb3BlbigpKSB0aGUgY29tbWFuZDoKKyMKKyMgPGZpbHRlcj4gPGlucHV0LWZpbGU+CisjCisjIHdoZXJlIDxmaWx0ZXI+IGlzIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVRfRklMVEVSIHRhZywgYW5kIDxpbnB1dC1maWxlPiBpcyB0aGUKKyMgbmFtZSBvZiBhbiBpbnB1dCBmaWxlLiBEb3h5Z2VuIHdpbGwgdGhlbiB1c2UgdGhlIG91dHB1dCB0aGF0IHRoZSBmaWx0ZXIKKyMgcHJvZ3JhbSB3cml0ZXMgdG8gc3RhbmRhcmQgb3V0cHV0LiBJZiBGSUxURVJfUEFUVEVSTlMgaXMgc3BlY2lmaWVkLCB0aGlzIHRhZworIyB3aWxsIGJlIGlnbm9yZWQuCisjCisjIE5vdGUgdGhhdCB0aGUgZmlsdGVyIG11c3Qgbm90IGFkZCBvciByZW1vdmUgbGluZXM7IGl0IGlzIGFwcGxpZWQgYmVmb3JlIHRoZQorIyBjb2RlIGlzIHNjYW5uZWQsIGJ1dCBub3Qgd2hlbiB0aGUgb3V0cHV0IGNvZGUgaXMgZ2VuZXJhdGVkLiBJZiBsaW5lcyBhcmUgYWRkZWQKKyMgb3IgcmVtb3ZlZCwgdGhlIGFuY2hvcnMgd2lsbCBub3QgYmUgcGxhY2VkIGNvcnJlY3RseS4KKworSU5QVVRfRklMVEVSICAgICAgICAgICA9CisKKyMgVGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWx0ZXJzIG9uIGEgcGVyIGZpbGUgcGF0dGVybgorIyBiYXNpcy4gRG94eWdlbiB3aWxsIGNvbXBhcmUgdGhlIGZpbGUgbmFtZSB3aXRoIGVhY2ggcGF0dGVybiBhbmQgYXBwbHkgdGhlCisjIGZpbHRlciBpZiB0aGVyZSBpcyBhIG1hdGNoLiBUaGUgZmlsdGVycyBhcmUgYSBsaXN0IG9mIHRoZSBmb3JtOiBwYXR0ZXJuPWZpbHRlcgorIyAobGlrZSAqLmNwcD1teV9jcHBfZmlsdGVyKS4gU2VlIElOUFVUX0ZJTFRFUiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBob3cKKyMgZmlsdGVycyBhcmUgdXNlZC4gSWYgdGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgaXMgZW1wdHkgb3IgaWYgbm9uZSBvZiB0aGUKKyMgcGF0dGVybnMgbWF0Y2ggdGhlIGZpbGUgbmFtZSwgSU5QVVRfRklMVEVSIGlzIGFwcGxpZWQuCisKK0ZJTFRFUl9QQVRURVJOUyAgICAgICAgPQorCisjIElmIHRoZSBGSUxURVJfU09VUkNFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgaW5wdXQgZmlsdGVyIChpZiBzZXQgdXNpbmcKKyMgSU5QVVRfRklMVEVSICkgd2lsbCBhbHNvIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSBpbnB1dCBmaWxlcyB0aGF0IGFyZSB1c2VkIGZvcgorIyBwcm9kdWNpbmcgdGhlIHNvdXJjZSBmaWxlcyB0byBicm93c2UgKGkuZS4gd2hlbiBTT1VSQ0VfQlJPV1NFUiBpcyBzZXQgdG8gWUVTKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitGSUxURVJfU09VUkNFX0ZJTEVTICAgID0gTk8KKworIyBUaGUgRklMVEVSX1NPVVJDRV9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBzb3VyY2UgZmlsdGVycyBwZXIgZmlsZQorIyBwYXR0ZXJuLiBBIHBhdHRlcm4gd2lsbCBvdmVycmlkZSB0aGUgc2V0dGluZyBmb3IgRklMVEVSX1BBVFRFUk4gKGlmIGFueSkgYW5kCisjIGl0IGlzIGFsc28gcG9zc2libGUgdG8gZGlzYWJsZSBzb3VyY2UgZmlsdGVyaW5nIGZvciBhIHNwZWNpZmljIHBhdHRlcm4gdXNpbmcKKyMgKi5leHQ9IChzbyB3aXRob3V0IG5hbWluZyBhIGZpbHRlcikuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBGSUxURVJfU09VUkNFX0ZJTEVTIGlzIHNldCB0byBZRVMuCisKK0ZJTFRFUl9TT1VSQ0VfUEFUVEVSTlMgPQorCisjIElmIHRoZSBVU0VfTURGSUxFX0FTX01BSU5QQUdFIHRhZyByZWZlcnMgdG8gdGhlIG5hbWUgb2YgYSBtYXJrZG93biBmaWxlIHRoYXQKKyMgaXMgcGFydCBvZiB0aGUgaW5wdXQsIGl0cyBjb250ZW50cyB3aWxsIGJlIHBsYWNlZCBvbiB0aGUgbWFpbiBwYWdlCisjIChpbmRleC5odG1sKS4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBoYXZlIGEgcHJvamVjdCBvbiBmb3IgaW5zdGFuY2UgR2l0SHViCisjIGFuZCB3YW50IHRvIHJldXNlIHRoZSBpbnRyb2R1Y3Rpb24gcGFnZSBhbHNvIGZvciB0aGUgZG94eWdlbiBvdXRwdXQuCisKK1VTRV9NREZJTEVfQVNfTUFJTlBBR0UgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNvdXJjZSBicm93c2luZworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBTT1VSQ0VfQlJPV1NFUiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgd2lsbCBiZQorIyBnZW5lcmF0ZWQuIERvY3VtZW50ZWQgZW50aXRpZXMgd2lsbCBiZSBjcm9zcy1yZWZlcmVuY2VkIHdpdGggdGhlc2Ugc291cmNlcy4KKyMKKyMgTm90ZTogVG8gZ2V0IHJpZCBvZiBhbGwgc291cmNlIGNvZGUgaW4gdGhlIGdlbmVyYXRlZCBvdXRwdXQsIG1ha2Ugc3VyZSB0aGF0CisjIGFsc28gVkVSQkFUSU1fSEVBREVSUyBpcyBzZXQgdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU09VUkNFX0JST1dTRVIgICAgICAgICA9IE5PCisKKyMgU2V0dGluZyB0aGUgSU5MSU5FX1NPVVJDRVMgdGFnIHRvIFlFUyB3aWxsIGluY2x1ZGUgdGhlIGJvZHkgb2YgZnVuY3Rpb25zLAorIyBjbGFzc2VzIGFuZCBlbnVtcyBkaXJlY3RseSBpbnRvIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0lOTElORV9TT1VSQ0VTICAgICAgICAgPSBOTworCisjIFNldHRpbmcgdGhlIFNUUklQX0NPREVfQ09NTUVOVFMgdGFnIHRvIFlFUyB3aWxsIGluc3RydWN0IGRveHlnZW4gdG8gaGlkZSBhbnkKKyMgc3BlY2lhbCBjb21tZW50IGJsb2NrcyBmcm9tIGdlbmVyYXRlZCBzb3VyY2UgY29kZSBmcmFnbWVudHMuIE5vcm1hbCBDLCBDKysgYW5kCisjIEZvcnRyYW4gY29tbWVudHMgd2lsbCBhbHdheXMgcmVtYWluIHZpc2libGUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NUUklQX0NPREVfQ09NTUVOVFMgICAgPSBZRVMKKworIyBJZiB0aGUgUkVGRVJFTkNFRF9CWV9SRUxBVElPTiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGZvciBlYWNoIGRvY3VtZW50ZWQKKyMgZnVuY3Rpb24gYWxsIGRvY3VtZW50ZWQgZnVuY3Rpb25zIHJlZmVyZW5jaW5nIGl0IHdpbGwgYmUgbGlzdGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1JFRkVSRU5DRURfQllfUkVMQVRJT04gPSBOTworCisjIElmIHRoZSBSRUZFUkVOQ0VTX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZCBmdW5jdGlvbgorIyBhbGwgZG9jdW1lbnRlZCBlbnRpdGllcyBjYWxsZWQvdXNlZCBieSB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgbGlzdGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1JFRkVSRU5DRVNfUkVMQVRJT04gICAgPSBOTworCisjIElmIHRoZSBSRUZFUkVOQ0VTX0xJTktfU09VUkNFIHRhZyBpcyBzZXQgdG8gWUVTIGFuZCBTT1VSQ0VfQlJPV1NFUiB0YWcgaXMgc2V0CisjIHRvIFlFUywgdGhlbiB0aGUgaHlwZXJsaW5rcyBmcm9tIGZ1bmN0aW9ucyBpbiBSRUZFUkVOQ0VTX1JFTEFUSU9OIGFuZAorIyBSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OIGxpc3RzIHdpbGwgbGluayB0byB0aGUgc291cmNlIGNvZGUuIE90aGVyd2lzZSB0aGV5IHdpbGwKKyMgbGluayB0byB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworUkVGRVJFTkNFU19MSU5LX1NPVVJDRSA9IFlFUworCisjIElmIFNPVVJDRV9UT09MVElQUyBpcyBlbmFibGVkICh0aGUgZGVmYXVsdCkgdGhlbiBob3ZlcmluZyBhIGh5cGVybGluayBpbiB0aGUKKyMgc291cmNlIGNvZGUgd2lsbCBzaG93IGEgdG9vbHRpcCB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VjaCBhcyBwcm90b3R5cGUsCisjIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBsaW5rcyB0byB0aGUgZGVmaW5pdGlvbiBhbmQgZG9jdW1lbnRhdGlvbi4gU2luY2UgdGhpcworIyB3aWxsIG1ha2UgdGhlIEhUTUwgZmlsZSBsYXJnZXIgYW5kIGxvYWRpbmcgb2YgbGFyZ2UgZmlsZXMgYSBiaXQgc2xvd2VyLCB5b3UKKyMgY2FuIG9wdCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNPVVJDRV9CUk9XU0VSIGlzIHNldCB0byBZRVMuCisKK1NPVVJDRV9UT09MVElQUyAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgVVNFX0hUQUdTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIHJlZmVyZW5jZXMgdG8gc291cmNlIGNvZGUgd2lsbAorIyBwb2ludCB0byB0aGUgSFRNTCBnZW5lcmF0ZWQgYnkgdGhlIGh0YWdzKDEpIHRvb2wgaW5zdGVhZCBvZiBkb3h5Z2VuIGJ1aWx0LWluCisjIHNvdXJjZSBicm93c2VyLiBUaGUgaHRhZ3MgdG9vbCBpcyBwYXJ0IG9mIEdOVSdzIGdsb2JhbCBzb3VyY2UgdGFnZ2luZyBzeXN0ZW0KKyMgKHNlZSBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2xvYmFsL2dsb2JhbC5odG1sKS4gWW91IHdpbGwgbmVlZCB2ZXJzaW9uCisjIDQuOC42IG9yIGhpZ2hlci4KKyMKKyMgVG8gdXNlIGl0IGRvIHRoZSBmb2xsb3dpbmc6CisjIC0gSW5zdGFsbCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZ2xvYmFsCisjIC0gRW5hYmxlIFNPVVJDRV9CUk9XU0VSIGFuZCBVU0VfSFRBR1MgaW4gdGhlIGNvbmZpZyBmaWxlCisjIC0gTWFrZSBzdXJlIHRoZSBJTlBVVCBwb2ludHMgdG8gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlCisjIC0gUnVuIGRveHlnZW4gYXMgbm9ybWFsCisjCisjIERveHlnZW4gd2lsbCBpbnZva2UgaHRhZ3MgKGFuZCB0aGF0IHdpbGwgaW4gdHVybiBpbnZva2UgZ3RhZ3MpLCBzbyB0aGVzZQorIyB0b29scyBtdXN0IGJlIGF2YWlsYWJsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUgKGkuZS4gaW4gdGhlIHNlYXJjaCBwYXRoKS4KKyMKKyMgVGhlIHJlc3VsdDogaW5zdGVhZCBvZiB0aGUgc291cmNlIGJyb3dzZXIgZ2VuZXJhdGVkIGJ5IGRveHlnZW4sIHRoZSBsaW5rcyB0bworIyBzb3VyY2UgY29kZSB3aWxsIG5vdyBwb2ludCB0byB0aGUgb3V0cHV0IG9mIGh0YWdzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTT1VSQ0VfQlJPV1NFUiBpcyBzZXQgdG8gWUVTLgorCitVU0VfSFRBR1MgICAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgVkVSQkFUSU1fSEVBREVSUyB0YWcgaXMgc2V0IHRoZSBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYQorIyB2ZXJiYXRpbSBjb3B5IG9mIHRoZSBoZWFkZXIgZmlsZSBmb3IgZWFjaCBjbGFzcyBmb3Igd2hpY2ggYW4gaW5jbHVkZSBpcworIyBzcGVjaWZpZWQuIFNldCB0byBOTyB0byBkaXNhYmxlIHRoaXMuCisjIFNlZSBhbHNvOiBTZWN0aW9uIFxjbGFzcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworVkVSQkFUSU1fSEVBREVSUyAgICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBhbHBoYWJldGljYWwgY2xhc3MgaW5kZXgKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgQUxQSEFCRVRJQ0FMX0lOREVYIHRhZyBpcyBzZXQgdG8gWUVTLCBhbiBhbHBoYWJldGljYWwgaW5kZXggb2YgYWxsCisjIGNvbXBvdW5kcyB3aWxsIGJlIGdlbmVyYXRlZC4gRW5hYmxlIHRoaXMgaWYgdGhlIHByb2plY3QgY29udGFpbnMgYSBsb3Qgb2YKKyMgY2xhc3Nlcywgc3RydWN0cywgdW5pb25zIG9yIGludGVyZmFjZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0FMUEhBQkVUSUNBTF9JTkRFWCAgICAgPSBZRVMKKworIyBUaGUgQ09MU19JTl9BTFBIQV9JTkRFWCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4KKyMgd2hpY2ggdGhlIGFscGhhYmV0aWNhbCBpbmRleCBsaXN0IHdpbGwgYmUgc3BsaXQuCisjIE1pbmltdW0gdmFsdWU6IDEsIG1heGltdW0gdmFsdWU6IDIwLCBkZWZhdWx0IHZhbHVlOiA1LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgQUxQSEFCRVRJQ0FMX0lOREVYIGlzIHNldCB0byBZRVMuCisKK0NPTFNfSU5fQUxQSEFfSU5ERVggICAgPSA1CisKKyMgSW4gY2FzZSBhbGwgY2xhc3NlcyBpbiBhIHByb2plY3Qgc3RhcnQgd2l0aCBhIGNvbW1vbiBwcmVmaXgsIGFsbCBjbGFzc2VzIHdpbGwKKyMgYmUgcHV0IHVuZGVyIHRoZSBzYW1lIGhlYWRlciBpbiB0aGUgYWxwaGFiZXRpY2FsIGluZGV4LiBUaGUgSUdOT1JFX1BSRUZJWCB0YWcKKyMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHByZWZpeCAob3IgYSBsaXN0IG9mIHByZWZpeGVzKSB0aGF0IHNob3VsZCBiZSBpZ25vcmVkCisjIHdoaWxlIGdlbmVyYXRpbmcgdGhlIGluZGV4IGhlYWRlcnMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBBTFBIQUJFVElDQUxfSU5ERVggaXMgc2V0IHRvIFlFUy4KKworSUdOT1JFX1BSRUZJWCAgICAgICAgICA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIEhUTUwgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUwgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIEhUTUwgb3V0cHV0CisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX0hUTUwgICAgICAgICAgPSBZRVMKKworIyBUaGUgSFRNTF9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgSFRNTCBkb2NzIHdpbGwgYmUgcHV0LiBJZiBhCisjIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIHB1dCBpbiBmcm9udCBvZgorIyBpdC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiBodG1sLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX09VVFBVVCAgICAgICAgICAgID0gaHRtbAorCisjIFRoZSBIVE1MX0ZJTEVfRVhURU5TSU9OIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgZWFjaAorIyBnZW5lcmF0ZWQgSFRNTCBwYWdlIChmb3IgZXhhbXBsZTogLmh0bSwgLnBocCwgLmFzcCkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiAuaHRtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9GSUxFX0VYVEVOU0lPTiAgICA9IC5odG1sCisKKyMgVGhlIEhUTUxfSEVBREVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgdXNlci1kZWZpbmVkIEhUTUwgaGVhZGVyIGZpbGUgZm9yCisjIGVhY2ggZ2VuZXJhdGVkIEhUTUwgcGFnZS4gSWYgdGhlIHRhZyBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIHN0YW5kYXJkIGhlYWRlci4KKyMKKyMgVG8gZ2V0IHZhbGlkIEhUTUwgdGhlIGhlYWRlciBmaWxlIHRoYXQgaW5jbHVkZXMgYW55IHNjcmlwdHMgYW5kIHN0eWxlIHNoZWV0cworIyB0aGF0IGRveHlnZW4gbmVlZHMsIHdoaWNoIGlzIGRlcGVuZGVudCBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHVzZWQgKGUuZy4KKyMgdGhlIHNldHRpbmcgR0VORVJBVEVfVFJFRVZJRVcpLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gc3RhcnQgd2l0aCBhCisjIGRlZmF1bHQgaGVhZGVyIHVzaW5nCisjIGRveHlnZW4gLXcgaHRtbCBuZXdfaGVhZGVyLmh0bWwgbmV3X2Zvb3Rlci5odG1sIG5ld19zdHlsZXNoZWV0LmNzcworIyBZb3VyQ29uZmlnRmlsZQorIyBhbmQgdGhlbiBtb2RpZnkgdGhlIGZpbGUgbmV3X2hlYWRlci5odG1sLiBTZWUgYWxzbyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIgorIyBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZSBkZWZhdWx0IGhlYWRlciB0aGF0IGRveHlnZW4gbm9ybWFsbHkKKyMgdXNlcy4KKyMgTm90ZTogVGhlIGhlYWRlciBpcyBzdWJqZWN0IHRvIGNoYW5nZSBzbyB5b3UgdHlwaWNhbGx5IGhhdmUgdG8gcmVnZW5lcmF0ZSB0aGUKKyMgZGVmYXVsdCBoZWFkZXIgd2hlbiB1cGdyYWRpbmcgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIGRveHlnZW4uIEZvciBhIGRlc2NyaXB0aW9uCisjIG9mIHRoZSBwb3NzaWJsZSBtYXJrZXJzIGFuZCBibG9jayBuYW1lcyBzZWUgdGhlIGRvY3VtZW50YXRpb24uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfSEVBREVSICAgICAgICAgICAgPQorCisjIFRoZSBIVE1MX0ZPT1RFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHVzZXItZGVmaW5lZCBIVE1MIGZvb3RlciBmb3IgZWFjaAorIyBnZW5lcmF0ZWQgSFRNTCBwYWdlLiBJZiB0aGUgdGFnIGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgc3RhbmRhcmQKKyMgZm9vdGVyLiBTZWUgSFRNTF9IRUFERVIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIGEgZGVmYXVsdAorIyBmb290ZXIgYW5kIHdoYXQgc3BlY2lhbCBjb21tYW5kcyBjYW4gYmUgdXNlZCBpbnNpZGUgdGhlIGZvb3Rlci4gU2VlIGFsc28KKyMgc2VjdGlvbiAiRG94eWdlbiB1c2FnZSIgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZW5lcmF0ZSB0aGUgZGVmYXVsdCBmb290ZXIKKyMgdGhhdCBkb3h5Z2VuIG5vcm1hbGx5IHVzZXMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfRk9PVEVSICAgICAgICAgICAgPQorCisjIFRoZSBIVE1MX1NUWUxFU0hFRVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSB1c2VyLWRlZmluZWQgY2FzY2FkaW5nIHN0eWxlCisjIHNoZWV0IHRoYXQgaXMgdXNlZCBieSBlYWNoIEhUTUwgcGFnZS4gSXQgY2FuIGJlIHVzZWQgdG8gZmluZS10dW5lIHRoZSBsb29rIG9mCisjIHRoZSBIVE1MIG91dHB1dC4gSWYgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBkZWZhdWx0IHN0eWxlIHNoZWV0LgorIyBTZWUgYWxzbyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZSBzdHlsZQorIyBzaGVldCB0aGF0IGRveHlnZW4gbm9ybWFsbHkgdXNlcy4KKyMgTm90ZTogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIEhUTUxfRVhUUkFfU1RZTEVTSEVFVCBpbnN0ZWFkIG9mIHRoaXMgdGFnLCBhcworIyBpdCBpcyBtb3JlIHJvYnVzdCBhbmQgdGhpcyB0YWcgKEhUTUxfU1RZTEVTSEVFVCkgd2lsbCBpbiB0aGUgZnV0dXJlIGJlY29tZQorIyBvYnNvbGV0ZS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9TVFlMRVNIRUVUICAgICAgICA9CisKKyMgVGhlIEhUTUxfRVhUUkFfU1RZTEVTSEVFVCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbiBhZGRpdGlvbmFsIHVzZXItCisjIGRlZmluZWQgY2FzY2FkaW5nIHN0eWxlIHNoZWV0IHRoYXQgaXMgaW5jbHVkZWQgYWZ0ZXIgdGhlIHN0YW5kYXJkIHN0eWxlIHNoZWV0cworIyBjcmVhdGVkIGJ5IGRveHlnZW4uIFVzaW5nIHRoaXMgb3B0aW9uIG9uZSBjYW4gb3ZlcnJ1bGUgY2VydGFpbiBzdHlsZSBhc3BlY3RzLgorIyBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIHVzaW5nIEhUTUxfU1RZTEVTSEVFVCBzaW5jZSBpdCBkb2VzIG5vdCByZXBsYWNlIHRoZQorIyBzdGFuZGFyZCBzdHlsZSBzaGVldCBhbmQgaXMgdGhlcmVmb3IgbW9yZSByb2J1c3QgYWdhaW5zdCBmdXR1cmUgdXBkYXRlcy4KKyMgRG94eWdlbiB3aWxsIGNvcHkgdGhlIHN0eWxlIHNoZWV0IGZpbGUgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuIEZvciBhbiBleGFtcGxlCisjIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9FWFRSQV9TVFlMRVNIRUVUICA9CisKKyMgVGhlIEhUTUxfRVhUUkFfRklMRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZXh0cmEgaW1hZ2VzIG9yCisjIG90aGVyIHNvdXJjZSBmaWxlcyB3aGljaCBzaG91bGQgYmUgY29waWVkIHRvIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkuIE5vdGUKKyMgdGhhdCB0aGVzZSBmaWxlcyB3aWxsIGJlIGNvcGllZCB0byB0aGUgYmFzZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkuIFVzZSB0aGUKKyMgJHJlbHBhdGheIG1hcmtlciBpbiB0aGUgSFRNTF9IRUFERVIgYW5kL29yIEhUTUxfRk9PVEVSIGZpbGVzIHRvIGxvYWQgdGhlc2UKKyMgZmlsZXMuIEluIHRoZSBIVE1MX1NUWUxFU0hFRVQgZmlsZSwgdXNlIHRoZSBmaWxlIG5hbWUgb25seS4gQWxzbyBub3RlIHRoYXQgdGhlCisjIGZpbGVzIHdpbGwgYmUgY29waWVkIGFzLWlzOyB0aGVyZSBhcmUgbm8gY29tbWFuZHMgb3IgbWFya2VycyBhdmFpbGFibGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfRVhUUkFfRklMRVMgICAgICAgPQorCisjIFRoZSBIVE1MX0NPTE9SU1RZTEVfSFVFIHRhZyBjb250cm9scyB0aGUgY29sb3Igb2YgdGhlIEhUTUwgb3V0cHV0LiBEb3h5Z2VuCisjIHdpbGwgYWRqdXN0IHRoZSBjb2xvcnMgaW4gdGhlIHN0eWxlc2hlZXQgYW5kIGJhY2tncm91bmQgaW1hZ2VzIGFjY29yZGluZyB0bworIyB0aGlzIGNvbG9yLiBIdWUgaXMgc3BlY2lmaWVkIGFzIGFuIGFuZ2xlIG9uIGEgY29sb3J3aGVlbCwgc2VlCisjIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSHVlIGZvciBtb3JlIGluZm9ybWF0aW9uLiBGb3IgaW5zdGFuY2UgdGhlIHZhbHVlCisjIDAgcmVwcmVzZW50cyByZWQsIDYwIGlzIHllbGxvdywgMTIwIGlzIGdyZWVuLCAxODAgaXMgY3lhbiwgMjQwIGlzIGJsdWUsIDMwMAorIyBwdXJwbGUsIGFuZCAzNjAgaXMgcmVkIGFnYWluLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAzNTksIGRlZmF1bHQgdmFsdWU6IDIyMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9DT0xPUlNUWUxFX0hVRSAgICA9IDIyMAorCisjIFRoZSBIVE1MX0NPTE9SU1RZTEVfU0FUIHRhZyBjb250cm9scyB0aGUgcHVyaXR5IChvciBzYXR1cmF0aW9uKSBvZiB0aGUgY29sb3JzCisjIGluIHRoZSBIVE1MIG91dHB1dC4gRm9yIGEgdmFsdWUgb2YgMCB0aGUgb3V0cHV0IHdpbGwgdXNlIGdyYXlzY2FsZXMgb25seS4gQQorIyB2YWx1ZSBvZiAyNTUgd2lsbCBwcm9kdWNlIHRoZSBtb3N0IHZpdmlkIGNvbG9ycy4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMjU1LCBkZWZhdWx0IHZhbHVlOiAxMDAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfQ09MT1JTVFlMRV9TQVQgICAgPSAxMDAKKworIyBUaGUgSFRNTF9DT0xPUlNUWUxFX0dBTU1BIHRhZyBjb250cm9scyB0aGUgZ2FtbWEgY29ycmVjdGlvbiBhcHBsaWVkIHRvIHRoZQorIyBsdW1pbmFuY2UgY29tcG9uZW50IG9mIHRoZSBjb2xvcnMgaW4gdGhlIEhUTUwgb3V0cHV0LiBWYWx1ZXMgYmVsb3cgMTAwCisjIGdyYWR1YWxseSBtYWtlIHRoZSBvdXRwdXQgbGlnaHRlciwgd2hlcmVhcyB2YWx1ZXMgYWJvdmUgMTAwIG1ha2UgdGhlIG91dHB1dAorIyBkYXJrZXIuIFRoZSB2YWx1ZSBkaXZpZGVkIGJ5IDEwMCBpcyB0aGUgYWN0dWFsIGdhbW1hIGFwcGxpZWQsIHNvIDgwIHJlcHJlc2VudHMKKyMgYSBnYW1tYSBvZiAwLjgsIFRoZSB2YWx1ZSAyMjAgcmVwcmVzZW50cyBhIGdhbW1hIG9mIDIuMiwgYW5kIDEwMCBkb2VzIG5vdAorIyBjaGFuZ2UgdGhlIGdhbW1hLgorIyBNaW5pbXVtIHZhbHVlOiA0MCwgbWF4aW11bSB2YWx1ZTogMjQwLCBkZWZhdWx0IHZhbHVlOiA4MC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9DT0xPUlNUWUxFX0dBTU1BICA9IDgwCisKKyMgSWYgdGhlIEhUTUxfVElNRVNUQU1QIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIGZvb3RlciBvZiBlYWNoIGdlbmVyYXRlZCBIVE1MCisjIHBhZ2Ugd2lsbCBjb250YWluIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlIHBhZ2Ugd2FzIGdlbmVyYXRlZC4gU2V0dGluZyB0aGlzCisjIHRvIE5PIGNhbiBoZWxwIHdoZW4gY29tcGFyaW5nIHRoZSBvdXRwdXQgb2YgbXVsdGlwbGUgcnVucy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9USU1FU1RBTVAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBIVE1MX0RZTkFNSUNfU0VDVElPTlMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgZ2VuZXJhdGVkIEhUTUwKKyMgZG9jdW1lbnRhdGlvbiB3aWxsIGNvbnRhaW4gc2VjdGlvbnMgdGhhdCBjYW4gYmUgaGlkZGVuIGFuZCBzaG93biBhZnRlciB0aGUKKyMgcGFnZSBoYXMgbG9hZGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfRFlOQU1JQ19TRUNUSU9OUyAgPSBOTworCisjIFdpdGggSFRNTF9JTkRFWF9OVU1fRU5UUklFUyBvbmUgY2FuIGNvbnRyb2wgdGhlIHByZWZlcnJlZCBudW1iZXIgb2YgZW50cmllcworIyBzaG93biBpbiB0aGUgdmFyaW91cyB0cmVlIHN0cnVjdHVyZWQgaW5kaWNlcyBpbml0aWFsbHk7IHRoZSB1c2VyIGNhbiBleHBhbmQKKyMgYW5kIGNvbGxhcHNlIGVudHJpZXMgZHluYW1pY2FsbHkgbGF0ZXIgb24uIERveHlnZW4gd2lsbCBleHBhbmQgdGhlIHRyZWUgdG8KKyMgc3VjaCBhIGxldmVsIHRoYXQgYXQgbW9zdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBlbnRyaWVzIGFyZSB2aXNpYmxlICh1bmxlc3MKKyMgYSBmdWxseSBjb2xsYXBzZWQgdHJlZSBhbHJlYWR5IGV4Y2VlZHMgdGhpcyBhbW91bnQpLiBTbyBzZXR0aW5nIHRoZSBudW1iZXIgb2YKKyMgZW50cmllcyAxIHdpbGwgcHJvZHVjZSBhIGZ1bGwgY29sbGFwc2VkIHRyZWUgYnkgZGVmYXVsdC4gMCBpcyBhIHNwZWNpYWwgdmFsdWUKKyMgcmVwcmVzZW50aW5nIGFuIGluZmluaXRlIG51bWJlciBvZiBlbnRyaWVzIGFuZCB3aWxsIHJlc3VsdCBpbiBhIGZ1bGwgZXhwYW5kZWQKKyMgdHJlZSBieSBkZWZhdWx0LgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiA5OTk5LCBkZWZhdWx0IHZhbHVlOiAxMDAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfSU5ERVhfTlVNX0VOVFJJRVMgPSAxMDAKKworIyBJZiB0aGUgR0VORVJBVEVfRE9DU0VUIHRhZyBpcyBzZXQgdG8gWUVTLCBhZGRpdGlvbmFsIGluZGV4IGZpbGVzIHdpbGwgYmUKKyMgZ2VuZXJhdGVkIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIEFwcGxlJ3MgWGNvZGUgMyBpbnRlZ3JhdGVkIGRldmVsb3BtZW50CisjIGVudmlyb25tZW50IChzZWU6IGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3Rvb2xzL3hjb2RlLyksIGludHJvZHVjZWQgd2l0aAorIyBPU1ggMTAuNSAoTGVvcGFyZCkuIFRvIGNyZWF0ZSBhIGRvY3VtZW50YXRpb24gc2V0LCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYQorIyBNYWtlZmlsZSBpbiB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LiBSdW5uaW5nIG1ha2Ugd2lsbCBwcm9kdWNlIHRoZSBkb2NzZXQgaW4KKyMgdGhhdCBkaXJlY3RvcnkgYW5kIHJ1bm5pbmcgbWFrZSBpbnN0YWxsIHdpbGwgaW5zdGFsbCB0aGUgZG9jc2V0IGluCisjIH4vTGlicmFyeS9EZXZlbG9wZXIvU2hhcmVkL0RvY3VtZW50YXRpb24vRG9jU2V0cyBzbyB0aGF0IFhjb2RlIHdpbGwgZmluZCBpdCBhdAorIyBzdGFydHVwLiBTZWUgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdG9vbHMvY3JlYXRpbmdkb2NzZXRzd2l0aGRveHlnZW4uaHRtbAorIyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9ET0NTRVQgICAgICAgID0gTk8KKworIyBUaGlzIHRhZyBkZXRlcm1pbmVzIHRoZSBuYW1lIG9mIHRoZSBkb2NzZXQgZmVlZC4gQSBkb2N1bWVudGF0aW9uIGZlZWQgcHJvdmlkZXMKKyMgYW4gdW1icmVsbGEgdW5kZXIgd2hpY2ggbXVsdGlwbGUgZG9jdW1lbnRhdGlvbiBzZXRzIGZyb20gYSBzaW5nbGUgcHJvdmlkZXIKKyMgKHN1Y2ggYXMgYSBjb21wYW55IG9yIHByb2R1Y3Qgc3VpdGUpIGNhbiBiZSBncm91cGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogRG94eWdlbiBnZW5lcmF0ZWQgZG9jcy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ1NFVCBpcyBzZXQgdG8gWUVTLgorCitET0NTRVRfRkVFRE5BTUUgICAgICAgID0gIkRveHlnZW4gZ2VuZXJhdGVkIGRvY3MiCisKKyMgVGhpcyB0YWcgc3BlY2lmaWVzIGEgc3RyaW5nIHRoYXQgc2hvdWxkIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBkb2N1bWVudGF0aW9uCisjIHNldCBidW5kbGUuIFRoaXMgc2hvdWxkIGJlIGEgcmV2ZXJzZSBkb21haW4tbmFtZSBzdHlsZSBzdHJpbmcsIGUuZy4KKyMgY29tLm15Y29tcGFueS5NeURvY1NldC4gRG94eWdlbiB3aWxsIGFwcGVuZCAuZG9jc2V0IHRvIHRoZSBuYW1lLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogb3JnLmRveHlnZW4uUHJvamVjdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ1NFVCBpcyBzZXQgdG8gWUVTLgorCitET0NTRVRfQlVORExFX0lEICAgICAgID0gb3JnLmRveHlnZW4uUHJvamVjdAorCisjIFRoZSBET0NTRVRfUFVCTElTSEVSX0lEIHRhZyBzcGVjaWZpZXMgYSBzdHJpbmcgdGhhdCBzaG91bGQgdW5pcXVlbHkgaWRlbnRpZnkKKyMgdGhlIGRvY3VtZW50YXRpb24gcHVibGlzaGVyLiBUaGlzIHNob3VsZCBiZSBhIHJldmVyc2UgZG9tYWluLW5hbWUgc3R5bGUKKyMgc3RyaW5nLCBlLmcuIGNvbS5teWNvbXBhbnkuTXlEb2NTZXQuZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IG9yZy5kb3h5Z2VuLlB1Ymxpc2hlci4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ1NFVCBpcyBzZXQgdG8gWUVTLgorCitET0NTRVRfUFVCTElTSEVSX0lEICAgID0gb3JnLmRveHlnZW4uUHVibGlzaGVyCisKKyMgVGhlIERPQ1NFVF9QVUJMSVNIRVJfTkFNRSB0YWcgaWRlbnRpZmllcyB0aGUgZG9jdW1lbnRhdGlvbiBwdWJsaXNoZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBQdWJsaXNoZXIuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9ET0NTRVQgaXMgc2V0IHRvIFlFUy4KKworRE9DU0VUX1BVQkxJU0hFUl9OQU1FICA9IFB1Ymxpc2hlcgorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gZ2VuZXJhdGVzIHRocmVlCisjIGFkZGl0aW9uYWwgSFRNTCBpbmRleCBmaWxlczogaW5kZXguaGhwLCBpbmRleC5oaGMsIGFuZCBpbmRleC5oaGsuIFRoZQorIyBpbmRleC5oaHAgaXMgYSBwcm9qZWN0IGZpbGUgdGhhdCBjYW4gYmUgcmVhZCBieSBNaWNyb3NvZnQncyBIVE1MIEhlbHAgV29ya3Nob3AKKyMgKHNlZTogaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2VuLXVzL2Rvd25sb2FkL2RldGFpbHMuYXNweD9pZD0yMTEzOCkgb24KKyMgV2luZG93cy4KKyMKKyMgVGhlIEhUTUwgSGVscCBXb3Jrc2hvcCBjb250YWlucyBhIGNvbXBpbGVyIHRoYXQgY2FuIGNvbnZlcnQgYWxsIEhUTUwgb3V0cHV0CisjIGdlbmVyYXRlZCBieSBkb3h5Z2VuIGludG8gYSBzaW5nbGUgY29tcGlsZWQgSFRNTCBmaWxlICguY2htKS4gQ29tcGlsZWQgSFRNTAorIyBmaWxlcyBhcmUgbm93IHVzZWQgYXMgdGhlIFdpbmRvd3MgOTggaGVscCBmb3JtYXQsIGFuZCB3aWxsIHJlcGxhY2UgdGhlIG9sZAorIyBXaW5kb3dzIGhlbHAgZm9ybWF0ICguaGxwKSBvbiBhbGwgV2luZG93cyBwbGF0Zm9ybXMgaW4gdGhlIGZ1dHVyZS4gQ29tcHJlc3NlZAorIyBIVE1MIGZpbGVzIGFsc28gY29udGFpbiBhbiBpbmRleCwgYSB0YWJsZSBvZiBjb250ZW50cywgYW5kIHlvdSBjYW4gc2VhcmNoIGZvcgorIyB3b3JkcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhlIEhUTUwgd29ya3Nob3AgYWxzbyBjb250YWlucyBhIHZpZXdlciBmb3IKKyMgY29tcHJlc3NlZCBIVE1MIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0hUTUxIRUxQICAgICAgPSBOTworCisjIFRoZSBDSE1fRklMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgLmNobQorIyBmaWxlLiBZb3UgY2FuIGFkZCBhIHBhdGggaW4gZnJvbnQgb2YgdGhlIGZpbGUgaWYgdGhlIHJlc3VsdCBzaG91bGQgbm90IGJlCisjIHdyaXR0ZW4gdG8gdGhlIGh0bWwgb3V0cHV0IGRpcmVjdG9yeS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK0NITV9GSUxFICAgICAgICAgICAgICAgPQorCisjIFRoZSBISENfTE9DQVRJT04gdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIChhYnNvbHV0ZSBwYXRoCisjIGluY2x1ZGluZyBmaWxlIG5hbWUpIG9mIHRoZSBIVE1MIGhlbHAgY29tcGlsZXIgKCBoaGMuZXhlKS4gSWYgbm9uLWVtcHR5CisjIGRveHlnZW4gd2lsbCB0cnkgdG8gcnVuIHRoZSBIVE1MIGhlbHAgY29tcGlsZXIgb24gdGhlIGdlbmVyYXRlZCBpbmRleC5oaHAuCisjIFRoZSBmaWxlIGhhcyB0byBiZSBzcGVjaWZpZWQgd2l0aCBmdWxsIHBhdGguCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MSEVMUCBpcyBzZXQgdG8gWUVTLgorCitISENfTE9DQVRJT04gICAgICAgICAgID0KKworIyBUaGUgR0VORVJBVEVfQ0hJIGZsYWcgY29udHJvbHMgaWYgYSBzZXBhcmF0ZSAuY2hpIGluZGV4IGZpbGUgaXMgZ2VuZXJhdGVkICgKKyMgWUVTKSBvciB0aGF0IGl0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbWFzdGVyIC5jaG0gZmlsZSAoIE5PKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworR0VORVJBVEVfQ0hJICAgICAgICAgICA9IE5PCisKKyMgVGhlIENITV9JTkRFWF9FTkNPRElORyBpcyB1c2VkIHRvIGVuY29kZSBIdG1sSGVscCBpbmRleCAoIGhoayksIGNvbnRlbnQgKCBoaGMpCisjIGFuZCBwcm9qZWN0IGZpbGUgY29udGVudC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK0NITV9JTkRFWF9FTkNPRElORyAgICAgPQorCisjIFRoZSBCSU5BUllfVE9DIGZsYWcgY29udHJvbHMgd2hldGhlciBhIGJpbmFyeSB0YWJsZSBvZiBjb250ZW50cyBpcyBnZW5lcmF0ZWQgKAorIyBZRVMpIG9yIGEgbm9ybWFsIHRhYmxlIG9mIGNvbnRlbnRzICggTk8pIGluIHRoZSAuY2htIGZpbGUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK0JJTkFSWV9UT0MgICAgICAgICAgICAgPSBOTworCisjIFRoZSBUT0NfRVhQQU5EIGZsYWcgY2FuIGJlIHNldCB0byBZRVMgdG8gYWRkIGV4dHJhIGl0ZW1zIGZvciBncm91cCBtZW1iZXJzIHRvCisjIHRoZSB0YWJsZSBvZiBjb250ZW50cyBvZiB0aGUgSFRNTCBoZWxwIGRvY3VtZW50YXRpb24gYW5kIHRvIHRoZSB0cmVlIHZpZXcuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK1RPQ19FWFBBTkQgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBHRU5FUkFURV9RSFAgdGFnIGlzIHNldCB0byBZRVMgYW5kIGJvdGggUUhQX05BTUVTUEFDRSBhbmQKKyMgUUhQX1ZJUlRVQUxfRk9MREVSIGFyZSBzZXQsIGFuIGFkZGl0aW9uYWwgaW5kZXggZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCB0aGF0CisjIGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciBRdCdzIHFoZWxwZ2VuZXJhdG9yIHRvIGdlbmVyYXRlIGEgUXQgQ29tcHJlc3NlZCBIZWxwCisjICgucWNoKSBvZiB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9RSFAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUUhHX0xPQ0FUSU9OIHRhZyBpcyBzcGVjaWZpZWQsIHRoZSBRQ0hfRklMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeQorIyB0aGUgZmlsZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgLnFjaCBmaWxlLiBUaGUgcGF0aCBzcGVjaWZpZWQgaXMgcmVsYXRpdmUgdG8KKyMgdGhlIEhUTUwgb3V0cHV0IGZvbGRlci4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRQ0hfRklMRSAgICAgICAgICAgICAgID0KKworIyBUaGUgUUhQX05BTUVTUEFDRSB0YWcgc3BlY2lmaWVzIHRoZSBuYW1lc3BhY2UgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyBRdCBIZWxwCisjIFByb2plY3Qgb3V0cHV0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIFF0IEhlbHAgUHJvamVjdCAvIE5hbWVzcGFjZQorIyAoc2VlOiBodHRwOi8vcXQtcHJvamVjdC5vcmcvZG9jL3F0LTQuOC9xdGhlbHBwcm9qZWN0Lmh0bWwjbmFtZXNwYWNlKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IG9yZy5kb3h5Z2VuLlByb2plY3QuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhQX05BTUVTUEFDRSAgICAgICAgICA9IG9yZy5kb3h5Z2VuLlByb2plY3QKKworIyBUaGUgUUhQX1ZJUlRVQUxfRk9MREVSIHRhZyBzcGVjaWZpZXMgdGhlIG5hbWVzcGFjZSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIFF0CisjIEhlbHAgUHJvamVjdCBvdXRwdXQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgUXQgSGVscCBQcm9qZWN0IC8gVmlydHVhbAorIyBGb2xkZXJzIChzZWU6IGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCN2aXJ0dWFsLQorIyBmb2xkZXJzKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IGRvYy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfVklSVFVBTF9GT0xERVIgICAgID0gZG9jCisKKyMgSWYgdGhlIFFIUF9DVVNUX0ZJTFRFUl9OQU1FIHRhZyBpcyBzZXQsIGl0IHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGN1c3RvbQorIyBmaWx0ZXIgdG8gYWRkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIFF0IEhlbHAgUHJvamVjdCAvIEN1c3RvbQorIyBGaWx0ZXJzIChzZWU6IGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCNjdXN0b20tCisjIGZpbHRlcnMpLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FIUF9DVVNUX0ZJTFRFUl9OQU1FICAgPQorCisjIFRoZSBRSFBfQ1VTVF9GSUxURVJfQVRUUlMgdGFnIHNwZWNpZmllcyB0aGUgbGlzdCBvZiB0aGUgYXR0cmlidXRlcyBvZiB0aGUKKyMgY3VzdG9tIGZpbHRlciB0byBhZGQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgUXQgSGVscCBQcm9qZWN0IC8gQ3VzdG9tCisjIEZpbHRlcnMgKHNlZTogaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI2N1c3RvbS0KKyMgZmlsdGVycykuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhQX0NVU1RfRklMVEVSX0FUVFJTICA9CisKKyMgVGhlIFFIUF9TRUNUX0ZJTFRFUl9BVFRSUyB0YWcgc3BlY2lmaWVzIHRoZSBsaXN0IG9mIHRoZSBhdHRyaWJ1dGVzIHRoaXMKKyMgcHJvamVjdCdzIGZpbHRlciBzZWN0aW9uIG1hdGNoZXMuIFF0IEhlbHAgUHJvamVjdCAvIEZpbHRlciBBdHRyaWJ1dGVzIChzZWU6CisjIGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCNmaWx0ZXItYXR0cmlidXRlcykuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhQX1NFQ1RfRklMVEVSX0FUVFJTICA9CisKKyMgVGhlIFFIR19MT0NBVElPTiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgUXQncworIyBxaGVscGdlbmVyYXRvci4gSWYgbm9uLWVtcHR5IGRveHlnZW4gd2lsbCB0cnkgdG8gcnVuIHFoZWxwZ2VuZXJhdG9yIG9uIHRoZQorIyBnZW5lcmF0ZWQgLnFocCBmaWxlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FIR19MT0NBVElPTiAgICAgICAgICAgPQorCisjIElmIHRoZSBHRU5FUkFURV9FQ0xJUFNFSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgYWRkaXRpb25hbCBpbmRleCBmaWxlcyB3aWxsIGJlCisjIGdlbmVyYXRlZCwgdG9nZXRoZXIgd2l0aCB0aGUgSFRNTCBmaWxlcywgdGhleSBmb3JtIGFuIEVjbGlwc2UgaGVscCBwbHVnaW4uIFRvCisjIGluc3RhbGwgdGhpcyBwbHVnaW4gYW5kIG1ha2UgaXQgYXZhaWxhYmxlIHVuZGVyIHRoZSBoZWxwIGNvbnRlbnRzIG1lbnUgaW4KKyMgRWNsaXBzZSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgSFRNTCBhbmQgWE1MIGZpbGVzIG5lZWRzCisjIHRvIGJlIGNvcGllZCBpbnRvIHRoZSBwbHVnaW5zIGRpcmVjdG9yeSBvZiBlY2xpcHNlLiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5CisjIHdpdGhpbiB0aGUgcGx1Z2lucyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBFQ0xJUFNFX0RPQ19JRCB2YWx1ZS4KKyMgQWZ0ZXIgY29weWluZyBFY2xpcHNlIG5lZWRzIHRvIGJlIHJlc3RhcnRlZCBiZWZvcmUgdGhlIGhlbHAgYXBwZWFycy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9FQ0xJUFNFSEVMUCAgID0gTk8KKworIyBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgRWNsaXBzZSBoZWxwIHBsdWdpbi4gV2hlbiBpbnN0YWxsaW5nIHRoZSBwbHVnaW4KKyMgdGhlIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5pbmcgdGhlIEhUTUwgYW5kIFhNTCBmaWxlcyBzaG91bGQgYWxzbyBoYXZlIHRoaXMKKyMgbmFtZS4gRWFjaCBkb2N1bWVudGF0aW9uIHNldCBzaG91bGQgaGF2ZSBpdHMgb3duIGlkZW50aWZpZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBvcmcuZG94eWdlbi5Qcm9qZWN0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRUNMSVBTRUhFTFAgaXMgc2V0IHRvIFlFUy4KKworRUNMSVBTRV9ET0NfSUQgICAgICAgICA9IG9yZy5kb3h5Z2VuLlByb2plY3QKKworIyBJZiB5b3Ugd2FudCBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgbGF5b3V0IG9mIHRoZSBnZW5lcmF0ZWQgSFRNTCBwYWdlcyBpdCBtaWdodAorIyBiZSBuZWNlc3NhcnkgdG8gZGlzYWJsZSB0aGUgaW5kZXggYW5kIHJlcGxhY2UgaXQgd2l0aCB5b3VyIG93bi4gVGhlCisjIERJU0FCTEVfSU5ERVggdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSBjb25kZW5zZWQgaW5kZXggKHRhYnMpIGF0IHRvcAorIyBvZiBlYWNoIEhUTUwgcGFnZS4gQSB2YWx1ZSBvZiBOTyBlbmFibGVzIHRoZSBpbmRleCBhbmQgdGhlIHZhbHVlIFlFUyBkaXNhYmxlcworIyBpdC4gU2luY2UgdGhlIHRhYnMgaW4gdGhlIGluZGV4IGNvbnRhaW4gdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgdGhlIG5hdmlnYXRpb24KKyMgdHJlZSwgeW91IGNhbiBzZXQgdGhpcyBvcHRpb24gdG8gWUVTIGlmIHlvdSBhbHNvIHNldCBHRU5FUkFURV9UUkVFVklFVyB0byBZRVMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworRElTQUJMRV9JTkRFWCAgICAgICAgICA9IE5PCisKKyMgVGhlIEdFTkVSQVRFX1RSRUVWSUVXIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciBhIHRyZWUtbGlrZSBpbmRleAorIyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGdlbmVyYXRlZCB0byBkaXNwbGF5IGhpZXJhcmNoaWNhbCBpbmZvcm1hdGlvbi4gSWYgdGhlIHRhZworIyB2YWx1ZSBpcyBzZXQgdG8gWUVTLCBhIHNpZGUgcGFuZWwgd2lsbCBiZSBnZW5lcmF0ZWQgY29udGFpbmluZyBhIHRyZWUtbGlrZQorIyBpbmRleCBzdHJ1Y3R1cmUgKGp1c3QgbGlrZSB0aGUgb25lIHRoYXQgaXMgZ2VuZXJhdGVkIGZvciBIVE1MIEhlbHApLiBGb3IgdGhpcworIyB0byB3b3JrIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIEphdmFTY3JpcHQsIERIVE1MLCBDU1MgYW5kIGZyYW1lcyBpcyByZXF1aXJlZAorIyAoaS5lLiBhbnkgbW9kZXJuIGJyb3dzZXIpLiBXaW5kb3dzIHVzZXJzIGFyZSBwcm9iYWJseSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZQorIyBIVE1MIGhlbHAgZmVhdHVyZS4gVmlhIGN1c3RvbSBzdHlsZXNoZWV0cyAoc2VlIEhUTUxfRVhUUkFfU1RZTEVTSEVFVCkgb25lIGNhbgorIyBmdXJ0aGVyIGZpbmUtdHVuZSB0aGUgbG9vayBvZiB0aGUgaW5kZXguIEFzIGFuIGV4YW1wbGUsIHRoZSBkZWZhdWx0IHN0eWxlCisjIHNoZWV0IGdlbmVyYXRlZCBieSBkb3h5Z2VuIGhhcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIHB1dCBhbiBpbWFnZSBhdAorIyB0aGUgcm9vdCBvZiB0aGUgdHJlZSBpbnN0ZWFkIG9mIHRoZSBQUk9KRUNUX05BTUUuIFNpbmNlIHRoZSB0cmVlIGJhc2ljYWxseSBoYXMKKyMgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgdGhlIHRhYiBpbmRleCwgeW91IGNvdWxkIGNvbnNpZGVyIHNldHRpbmcKKyMgRElTQUJMRV9JTkRFWCB0byBZRVMgd2hlbiBlbmFibGluZyB0aGlzIG9wdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9UUkVFVklFVyAgICAgID0gWUVTCisKKyMgVGhlIEVOVU1fVkFMVUVTX1BFUl9MSU5FIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG51bWJlciBvZiBlbnVtIHZhbHVlcyB0aGF0CisjIGRveHlnZW4gd2lsbCBncm91cCBvbiBvbmUgbGluZSBpbiB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KKyMKKyMgTm90ZSB0aGF0IGEgdmFsdWUgb2YgMCB3aWxsIGNvbXBsZXRlbHkgc3VwcHJlc3MgdGhlIGVudW0gdmFsdWVzIGZyb20gYXBwZWFyaW5nCisjIGluIHRoZSBvdmVydmlldyBzZWN0aW9uLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAyMCwgZGVmYXVsdCB2YWx1ZTogNC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworRU5VTV9WQUxVRVNfUEVSX0xJTkUgICA9IDEKKworIyBJZiB0aGUgdHJlZXZpZXcgaXMgZW5hYmxlZCAoc2VlIEdFTkVSQVRFX1RSRUVWSUVXKSB0aGVuIHRoaXMgdGFnIGNhbiBiZSB1c2VkCisjIHRvIHNldCB0aGUgaW5pdGlhbCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZnJhbWUgaW4gd2hpY2ggdGhlIHRyZWUgaXMgc2hvd24uCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDE1MDAsIGRlZmF1bHQgdmFsdWU6IDI1MC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworVFJFRVZJRVdfV0lEVEggICAgICAgICA9IDI1MAorCisjIFdoZW4gdGhlIEVYVF9MSU5LU19JTl9XSU5ET1cgb3B0aW9uIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIG9wZW4gbGlua3MgdG8KKyMgZXh0ZXJuYWwgc3ltYm9scyBpbXBvcnRlZCB2aWEgdGFnIGZpbGVzIGluIGEgc2VwYXJhdGUgd2luZG93LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0VYVF9MSU5LU19JTl9XSU5ET1cgICAgPSBOTworCisjIFVzZSB0aGlzIHRhZyB0byBjaGFuZ2UgdGhlIGZvbnQgc2l6ZSBvZiBMYVRlWCBmb3JtdWxhcyBpbmNsdWRlZCBhcyBpbWFnZXMgaW4KKyMgdGhlIEhUTUwgZG9jdW1lbnRhdGlvbi4gV2hlbiB5b3UgY2hhbmdlIHRoZSBmb250IHNpemUgYWZ0ZXIgYSBzdWNjZXNzZnVsCisjIGRveHlnZW4gcnVuIHlvdSBuZWVkIHRvIG1hbnVhbGx5IHJlbW92ZSBhbnkgZm9ybV8qLnBuZyBpbWFnZXMgZnJvbSB0aGUgSFRNTAorIyBvdXRwdXQgZGlyZWN0b3J5IHRvIGZvcmNlIHRoZW0gdG8gYmUgcmVnZW5lcmF0ZWQuCisjIE1pbmltdW0gdmFsdWU6IDgsIG1heGltdW0gdmFsdWU6IDUwLCBkZWZhdWx0IHZhbHVlOiAxMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworRk9STVVMQV9GT05UU0laRSAgICAgICA9IDEwCisKKyMgVXNlIHRoZSBGT1JNVUxBX1RSQU5QQVJFTlQgdGFnIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgaW1hZ2VzCisjIGdlbmVyYXRlZCBmb3IgZm9ybXVsYXMgYXJlIHRyYW5zcGFyZW50IFBOR3MuIFRyYW5zcGFyZW50IFBOR3MgYXJlIG5vdAorIyBzdXBwb3J0ZWQgcHJvcGVybHkgZm9yIElFIDYuMCwgYnV0IGFyZSBzdXBwb3J0ZWQgb24gYWxsIG1vZGVybiBicm93c2Vycy4KKyMKKyMgTm90ZSB0aGF0IHdoZW4gY2hhbmdpbmcgdGhpcyBvcHRpb24geW91IG5lZWQgdG8gZGVsZXRlIGFueSBmb3JtXyoucG5nIGZpbGVzIGluCisjIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIHRoZSBjaGFuZ2VzIGhhdmUgZWZmZWN0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitGT1JNVUxBX1RSQU5TUEFSRU5UICAgID0gWUVTCisKKyMgRW5hYmxlIHRoZSBVU0VfTUFUSEpBWCBvcHRpb24gdG8gcmVuZGVyIExhVGVYIGZvcm11bGFzIHVzaW5nIE1hdGhKYXggKHNlZQorIyBodHRwOi8vd3d3Lm1hdGhqYXgub3JnKSB3aGljaCB1c2VzIGNsaWVudCBzaWRlIEphdmFzY3JpcHQgZm9yIHRoZSByZW5kZXJpbmcKKyMgaW5zdGVhZCBvZiB1c2luZyBwcmVyZW5kZXJlZCBiaXRtYXBzLiBVc2UgdGhpcyBpZiB5b3UgZG8gbm90IGhhdmUgTGFUZVgKKyMgaW5zdGFsbGVkIG9yIGlmIHlvdSB3YW50IHRvIGZvcm11bGFzIGxvb2sgcHJldHRpZXIgaW4gdGhlIEhUTUwgb3V0cHV0LiBXaGVuCisjIGVuYWJsZWQgeW91IG1heSBhbHNvIG5lZWQgdG8gaW5zdGFsbCBNYXRoSmF4IHNlcGFyYXRlbHkgYW5kIGNvbmZpZ3VyZSB0aGUgcGF0aAorIyB0byBpdCB1c2luZyB0aGUgTUFUSEpBWF9SRUxQQVRIIG9wdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitVU0VfTUFUSEpBWCAgICAgICAgICAgID0gTk8KKworIyBXaGVuIE1hdGhKYXggaXMgZW5hYmxlZCB5b3UgY2FuIHNldCB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IHRvIGJlIHVzZWQgZm9yCisjIHRoZSBNYXRoSmF4IG91dHB1dC4gU2VlIHRoZSBNYXRoSmF4IHNpdGUgKHNlZToKKyMgaHR0cDovL2RvY3MubWF0aGpheC5vcmcvZW4vbGF0ZXN0L291dHB1dC5odG1sKSBmb3IgbW9yZSBkZXRhaWxzLgorIyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBIVE1MLUNTUyAod2hpY2ggaXMgc2xvd2VyLCBidXQgaGFzIHRoZSBiZXN0CisjIGNvbXBhdGliaWxpdHkpLCBOYXRpdmVNTUwgKGkuZS4gTWF0aE1MKSBhbmQgU1ZHLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogSFRNTC1DU1MuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBVU0VfTUFUSEpBWCBpcyBzZXQgdG8gWUVTLgorCitNQVRISkFYX0ZPUk1BVCAgICAgICAgID0gSFRNTC1DU1MKKworIyBXaGVuIE1hdGhKYXggaXMgZW5hYmxlZCB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiByZWxhdGl2ZSB0byB0aGUgSFRNTAorIyBvdXRwdXQgZGlyZWN0b3J5IHVzaW5nIHRoZSBNQVRISkFYX1JFTFBBVEggb3B0aW9uLiBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5CisjIHNob3VsZCBjb250YWluIHRoZSBNYXRoSmF4LmpzIHNjcmlwdC4gRm9yIGluc3RhbmNlLCBpZiB0aGUgbWF0aGpheCBkaXJlY3RvcnkKKyMgaXMgbG9jYXRlZCBhdCB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LCB0aGVuCisjIE1BVEhKQVhfUkVMUEFUSCBzaG91bGQgYmUgLi4vbWF0aGpheC4gVGhlIGRlZmF1bHQgdmFsdWUgcG9pbnRzIHRvIHRoZSBNYXRoSmF4CisjIENvbnRlbnQgRGVsaXZlcnkgTmV0d29yayBzbyB5b3UgY2FuIHF1aWNrbHkgc2VlIHRoZSByZXN1bHQgd2l0aG91dCBpbnN0YWxsaW5nCisjIE1hdGhKYXguIEhvd2V2ZXIsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGluc3RhbGwgYSBsb2NhbCBjb3B5IG9mCisjIE1hdGhKYXggZnJvbSBodHRwOi8vd3d3Lm1hdGhqYXgub3JnIGJlZm9yZSBkZXBsb3ltZW50LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogaHR0cDovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFVTRV9NQVRISkFYIGlzIHNldCB0byBZRVMuCisKK01BVEhKQVhfUkVMUEFUSCAgICAgICAgPSBodHRwOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0CisKKyMgVGhlIE1BVEhKQVhfRVhURU5TSU9OUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBNYXRoSmF4CisjIGV4dGVuc2lvbiBuYW1lcyB0aGF0IHNob3VsZCBiZSBlbmFibGVkIGR1cmluZyBNYXRoSmF4IHJlbmRlcmluZy4gRm9yIGV4YW1wbGUKKyMgTUFUSEpBWF9FWFRFTlNJT05TID0gVGVYL0FNU21hdGggVGVYL0FNU3N5bWJvbHMKKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFVTRV9NQVRISkFYIGlzIHNldCB0byBZRVMuCisKK01BVEhKQVhfRVhURU5TSU9OUyAgICAgPQorCisjIFRoZSBNQVRISkFYX0NPREVGSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZmlsZSB3aXRoIGphdmFzY3JpcHQgcGllY2VzCisjIG9mIGNvZGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gc3RhcnR1cCBvZiB0aGUgTWF0aEpheCBjb2RlLiBTZWUgdGhlIE1hdGhKYXggc2l0ZQorIyAoc2VlOiBodHRwOi8vZG9jcy5tYXRoamF4Lm9yZy9lbi9sYXRlc3Qvb3V0cHV0Lmh0bWwpIGZvciBtb3JlIGRldGFpbHMuIEZvciBhbgorIyBleGFtcGxlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFVTRV9NQVRISkFYIGlzIHNldCB0byBZRVMuCisKK01BVEhKQVhfQ09ERUZJTEUgICAgICAgPQorCisjIFdoZW4gdGhlIFNFQVJDSEVOR0lORSB0YWcgaXMgZW5hYmxlZCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBzZWFyY2ggYm94IGZvcgorIyB0aGUgSFRNTCBvdXRwdXQuIFRoZSB1bmRlcmx5aW5nIHNlYXJjaCBlbmdpbmUgdXNlcyBqYXZhc2NyaXB0IGFuZCBESFRNTCBhbmQKKyMgc2hvdWxkIHdvcmsgb24gYW55IG1vZGVybiBicm93c2VyLiBOb3RlIHRoYXQgd2hlbiB1c2luZyBIVE1MIGhlbHAKKyMgKEdFTkVSQVRFX0hUTUxIRUxQKSwgUXQgaGVscCAoR0VORVJBVEVfUUhQKSwgb3IgZG9jc2V0cyAoR0VORVJBVEVfRE9DU0VUKQorIyB0aGVyZSBpcyBhbHJlYWR5IGEgc2VhcmNoIGZ1bmN0aW9uIHNvIHRoaXMgb25lIHNob3VsZCB0eXBpY2FsbHkgYmUgZGlzYWJsZWQuCisjIEZvciBsYXJnZSBwcm9qZWN0cyB0aGUgamF2YXNjcmlwdCBiYXNlZCBzZWFyY2ggZW5naW5lIGNhbiBiZSBzbG93LCB0aGVuCisjIGVuYWJsaW5nIFNFUlZFUl9CQVNFRF9TRUFSQ0ggbWF5IHByb3ZpZGUgYSBiZXR0ZXIgc29sdXRpb24uIEl0IGlzIHBvc3NpYmxlIHRvCisjIHNlYXJjaCB1c2luZyB0aGUga2V5Ym9hcmQ7IHRvIGp1bXAgdG8gdGhlIHNlYXJjaCBib3ggdXNlIDxhY2Nlc3Mga2V5PiArIFMKKyMgKHdoYXQgdGhlIDxhY2Nlc3Mga2V5PiBpcyBkZXBlbmRzIG9uIHRoZSBPUyBhbmQgYnJvd3NlciwgYnV0IGl0IGlzIHR5cGljYWxseQorIyA8Q1RSTD4sIDxBTFQ+LzxvcHRpb24+LCBvciBib3RoKS4gSW5zaWRlIHRoZSBzZWFyY2ggYm94IHVzZSB0aGUgPGN1cnNvciBkb3duCisjIGtleT4gdG8ganVtcCBpbnRvIHRoZSBzZWFyY2ggcmVzdWx0cyB3aW5kb3csIHRoZSByZXN1bHRzIGNhbiBiZSBuYXZpZ2F0ZWQKKyMgdXNpbmcgdGhlIDxjdXJzb3Iga2V5cz4uIFByZXNzIDxFbnRlcj4gdG8gc2VsZWN0IGFuIGl0ZW0gb3IgPGVzY2FwZT4gdG8gY2FuY2VsCisjIHRoZSBzZWFyY2guIFRoZSBmaWx0ZXIgb3B0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgd2hlbiB0aGUgY3Vyc29yIGlzIGluc2lkZSB0aGUKKyMgc2VhcmNoIGJveCBieSBwcmVzc2luZyA8U2hpZnQ+KzxjdXJzb3IgZG93bj4uIEFsc28gaGVyZSB1c2UgdGhlIDxjdXJzb3Iga2V5cz4KKyMgdG8gc2VsZWN0IGEgZmlsdGVyIGFuZCA8RW50ZXI+IG9yIDxlc2NhcGU+IHRvIGFjdGl2YXRlIG9yIGNhbmNlbCB0aGUgZmlsdGVyCisjIG9wdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworU0VBUkNIRU5HSU5FICAgICAgICAgICA9IFlFUworCisjIFdoZW4gdGhlIFNFUlZFUl9CQVNFRF9TRUFSQ0ggdGFnIGlzIGVuYWJsZWQgdGhlIHNlYXJjaCBlbmdpbmUgd2lsbCBiZQorIyBpbXBsZW1lbnRlZCB1c2luZyBhIHdlYiBzZXJ2ZXIgaW5zdGVhZCBvZiBhIHdlYiBjbGllbnQgdXNpbmcgSmF2YXNjcmlwdC4gVGhlcmUKKyMgYXJlIHR3byBmbGF2b3VycyBvZiB3ZWIgc2VydmVyIGJhc2VkIHNlYXJjaGluZyBkZXBlbmRpbmcgb24gdGhlCisjIEVYVEVSTkFMX1NFQVJDSCBzZXR0aW5nLiBXaGVuIGRpc2FibGVkLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBQSFAgc2NyaXB0IGZvcgorIyBzZWFyY2hpbmcgYW5kIGFuIGluZGV4IGZpbGUgdXNlZCBieSB0aGUgc2NyaXB0LiBXaGVuIEVYVEVSTkFMX1NFQVJDSCBpcworIyBlbmFibGVkIHRoZSBpbmRleGluZyBhbmQgc2VhcmNoaW5nIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGJ5IGV4dGVybmFsIHRvb2xzLiBTZWUKKyMgdGhlIHNlY3Rpb24gIkV4dGVybmFsIEluZGV4aW5nIGFuZCBTZWFyY2hpbmciIGZvciBkZXRhaWxzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworU0VSVkVSX0JBU0VEX1NFQVJDSCAgICA9IE5PCisKKyMgV2hlbiBFWFRFUk5BTF9TRUFSQ0ggdGFnIGlzIGVuYWJsZWQgZG94eWdlbiB3aWxsIG5vIGxvbmdlciBnZW5lcmF0ZSB0aGUgUEhQCisjIHNjcmlwdCBmb3Igc2VhcmNoaW5nLiBJbnN0ZWFkIHRoZSBzZWFyY2ggcmVzdWx0cyBhcmUgd3JpdHRlbiB0byBhbiBYTUwgZmlsZQorIyB3aGljaCBuZWVkcyB0byBiZSBwcm9jZXNzZWQgYnkgYW4gZXh0ZXJuYWwgaW5kZXhlci4gRG94eWdlbiB3aWxsIGludm9rZSBhbgorIyBleHRlcm5hbCBzZWFyY2ggZW5naW5lIHBvaW50ZWQgdG8gYnkgdGhlIFNFQVJDSEVOR0lORV9VUkwgb3B0aW9uIHRvIG9idGFpbiB0aGUKKyMgc2VhcmNoIHJlc3VsdHMuCisjCisjIERveHlnZW4gc2hpcHMgd2l0aCBhbiBleGFtcGxlIGluZGV4ZXIgKCBkb3h5aW5kZXhlcikgYW5kIHNlYXJjaCBlbmdpbmUKKyMgKGRveHlzZWFyY2guY2dpKSB3aGljaCBhcmUgYmFzZWQgb24gdGhlIG9wZW4gc291cmNlIHNlYXJjaCBlbmdpbmUgbGlicmFyeQorIyBYYXBpYW4gKHNlZTogaHR0cDovL3hhcGlhbi5vcmcvKS4KKyMKKyMgU2VlIHRoZSBzZWN0aW9uICJFeHRlcm5hbCBJbmRleGluZyBhbmQgU2VhcmNoaW5nIiBmb3IgZGV0YWlscy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU0VBUkNIRU5HSU5FIGlzIHNldCB0byBZRVMuCisKK0VYVEVSTkFMX1NFQVJDSCAgICAgICAgPSBOTworCisjIFRoZSBTRUFSQ0hFTkdJTkVfVVJMIHNob3VsZCBwb2ludCB0byBhIHNlYXJjaCBlbmdpbmUgaG9zdGVkIGJ5IGEgd2ViIHNlcnZlcgorIyB3aGljaCB3aWxsIHJldHVybiB0aGUgc2VhcmNoIHJlc3VsdHMgd2hlbiBFWFRFUk5BTF9TRUFSQ0ggaXMgZW5hYmxlZC4KKyMKKyMgRG94eWdlbiBzaGlwcyB3aXRoIGFuIGV4YW1wbGUgaW5kZXhlciAoIGRveHlpbmRleGVyKSBhbmQgc2VhcmNoIGVuZ2luZQorIyAoZG94eXNlYXJjaC5jZ2kpIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgb3BlbiBzb3VyY2Ugc2VhcmNoIGVuZ2luZSBsaWJyYXJ5CisjIFhhcGlhbiAoc2VlOiBodHRwOi8veGFwaWFuLm9yZy8pLiBTZWUgdGhlIHNlY3Rpb24gIkV4dGVybmFsIEluZGV4aW5nIGFuZAorIyBTZWFyY2hpbmciIGZvciBkZXRhaWxzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU0VBUkNIRU5HSU5FIGlzIHNldCB0byBZRVMuCisKK1NFQVJDSEVOR0lORV9VUkwgICAgICAgPQorCisjIFdoZW4gU0VSVkVSX0JBU0VEX1NFQVJDSCBhbmQgRVhURVJOQUxfU0VBUkNIIGFyZSBib3RoIGVuYWJsZWQgdGhlIHVuaW5kZXhlZAorIyBzZWFyY2ggZGF0YSBpcyB3cml0dGVuIHRvIGEgZmlsZSBmb3IgaW5kZXhpbmcgYnkgYW4gZXh0ZXJuYWwgdG9vbC4gV2l0aCB0aGUKKyMgU0VBUkNIREFUQV9GSUxFIHRhZyB0aGUgbmFtZSBvZiB0aGlzIGZpbGUgY2FuIGJlIHNwZWNpZmllZC4KKyMgVGhlIGRlZmF1bHQgZmlsZSBpczogc2VhcmNoZGF0YS54bWwuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworU0VBUkNIREFUQV9GSUxFICAgICAgICA9IHNlYXJjaGRhdGEueG1sCisKKyMgV2hlbiBTRVJWRVJfQkFTRURfU0VBUkNIIGFuZCBFWFRFUk5BTF9TRUFSQ0ggYXJlIGJvdGggZW5hYmxlZCB0aGUKKyMgRVhURVJOQUxfU0VBUkNIX0lEIHRhZyBjYW4gYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyIGZvciB0aGUgcHJvamVjdC4gVGhpcyBpcworIyB1c2VmdWwgaW4gY29tYmluYXRpb24gd2l0aCBFWFRSQV9TRUFSQ0hfTUFQUElOR1MgdG8gc2VhcmNoIHRocm91Z2ggbXVsdGlwbGUKKyMgcHJvamVjdHMgYW5kIHJlZGlyZWN0IHRoZSByZXN1bHRzIGJhY2sgdG8gdGhlIHJpZ2h0IHByb2plY3QuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworRVhURVJOQUxfU0VBUkNIX0lEICAgICA9CisKKyMgVGhlIEVYVFJBX1NFQVJDSF9NQVBQSU5HUyB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIHNlYXJjaGluZyB0aHJvdWdoIGRveHlnZW4KKyMgcHJvamVjdHMgb3RoZXIgdGhhbiB0aGUgb25lIGRlZmluZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUsIGJ1dCB0aGF0IGFyZQorIyBhbGwgYWRkZWQgdG8gdGhlIHNhbWUgZXh0ZXJuYWwgc2VhcmNoIGluZGV4LiBFYWNoIHByb2plY3QgbmVlZHMgdG8gaGF2ZSBhCisjIHVuaXF1ZSBpZCBzZXQgdmlhIEVYVEVSTkFMX1NFQVJDSF9JRC4gVGhlIHNlYXJjaCBtYXBwaW5nIHRoZW4gbWFwcyB0aGUgaWQgb2YKKyMgdG8gYSByZWxhdGl2ZSBsb2NhdGlvbiB3aGVyZSB0aGUgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQuIFRoZSBmb3JtYXQgaXM6CisjIEVYVFJBX1NFQVJDSF9NQVBQSU5HUyA9IHRhZ25hbWUxPWxvYzEgdGFnbmFtZTI9bG9jMiAuLi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitFWFRSQV9TRUFSQ0hfTUFQUElOR1MgID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgTGFUZVggb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBMYVRlWCBvdXRwdXQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX0xBVEVYICAgICAgICAgPSBOTworCisjIFRoZSBMQVRFWF9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgTGFUZVggZG9jcyB3aWxsIGJlIHB1dC4gSWYgYQorIyByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4gZnJvbnQgb2YKKyMgaXQuCisjIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpczogbGF0ZXguCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9PVVRQVVQgICAgICAgICAgID0gbGF0ZXgKKworIyBUaGUgTEFURVhfQ01EX05BTUUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIExhVGVYIGNvbW1hbmQgbmFtZSB0byBiZQorIyBpbnZva2VkLgorIworIyBOb3RlIHRoYXQgd2hlbiBlbmFibGluZyBVU0VfUERGTEFURVggdGhpcyBvcHRpb24gaXMgb25seSB1c2VkIGZvciBnZW5lcmF0aW5nCisjIGJpdG1hcHMgZm9yIGZvcm11bGFzIGluIHRoZSBIVE1MIG91dHB1dCwgYnV0IG5vdCBpbiB0aGUgTWFrZWZpbGUgdGhhdCBpcworIyB3cml0dGVuIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LgorIyBUaGUgZGVmYXVsdCBmaWxlIGlzOiBsYXRleC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0NNRF9OQU1FICAgICAgICAgPSBsYXRleAorCisjIFRoZSBNQUtFSU5ERVhfQ01EX05BTUUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGNvbW1hbmQgbmFtZSB0byBnZW5lcmF0ZQorIyBpbmRleCBmb3IgTGFUZVguCisjIFRoZSBkZWZhdWx0IGZpbGUgaXM6IG1ha2VpbmRleC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK01BS0VJTkRFWF9DTURfTkFNRSAgICAgPSBtYWtlaW5kZXgKKworIyBJZiB0aGUgQ09NUEFDVF9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIGdlbmVyYXRlcyBtb3JlIGNvbXBhY3QgTGFUZVgKKyMgZG9jdW1lbnRzLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIHNtYWxsIHByb2plY3RzIGFuZCBtYXkgaGVscCB0byBzYXZlIHNvbWUKKyMgdHJlZXMgaW4gZ2VuZXJhbC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworQ09NUEFDVF9MQVRFWCAgICAgICAgICA9IE5PCisKKyMgVGhlIFBBUEVSX1RZUEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgcGFwZXIgdHlwZSB0aGF0IGlzIHVzZWQgYnkgdGhlCisjIHByaW50ZXIuCisjIFBvc3NpYmxlIHZhbHVlcyBhcmU6IGE0ICgyMTAgeCAyOTcgbW0pLCBsZXR0ZXIgKDguNSB4IDExIGluY2hlcyksIGxlZ2FsICg4LjUgeAorIyAxNCBpbmNoZXMpIGFuZCBleGVjdXRpdmUgKDcuMjUgeCAxMC41IGluY2hlcykuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBhNC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK1BBUEVSX1RZUEUgICAgICAgICAgICAgPSBsZXR0ZXIKKworIyBUaGUgRVhUUkFfUEFDS0FHRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgTGFUZVggcGFja2FnZSBuYW1lcworIyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgTGFUZVggb3V0cHV0LiBUbyBnZXQgdGhlIHRpbWVzIGZvbnQgZm9yCisjIGluc3RhbmNlIHlvdSBjYW4gc3BlY2lmeQorIyBFWFRSQV9QQUNLQUdFUz10aW1lcworIyBJZiBsZWZ0IGJsYW5rIG5vIGV4dHJhIHBhY2thZ2VzIHdpbGwgYmUgaW5jbHVkZWQuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitFWFRSQV9QQUNLQUdFUyAgICAgICAgID0KKworIyBUaGUgTEFURVhfSEVBREVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcGVyc29uYWwgTGFUZVggaGVhZGVyIGZvciB0aGUKKyMgZ2VuZXJhdGVkIExhVGVYIGRvY3VtZW50LiBUaGUgaGVhZGVyIHNob3VsZCBjb250YWluIGV2ZXJ5dGhpbmcgdW50aWwgdGhlIGZpcnN0CisjIGNoYXB0ZXIuIElmIGl0IGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgc3RhbmRhcmQgaGVhZGVyLiBTZWUKKyMgc2VjdGlvbiAiRG94eWdlbiB1c2FnZSIgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBsZXQgZG94eWdlbiB3cml0ZSB0aGUKKyMgZGVmYXVsdCBoZWFkZXIgdG8gYSBzZXBhcmF0ZSBmaWxlLgorIworIyBOb3RlOiBPbmx5IHVzZSBhIHVzZXItZGVmaW5lZCBoZWFkZXIgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nISBUaGUKKyMgZm9sbG93aW5nIGNvbW1hbmRzIGhhdmUgYSBzcGVjaWFsIG1lYW5pbmcgaW5zaWRlIHRoZSBoZWFkZXI6ICR0aXRsZSwKKyMgJGRhdGV0aW1lLCAkZGF0ZSwgJGRveHlnZW52ZXJzaW9uLCAkcHJvamVjdG5hbWUsICRwcm9qZWN0bnVtYmVyLiBEb3h5Z2VuIHdpbGwKKyMgcmVwbGFjZSB0aGVtIGJ5IHJlc3BlY3RpdmVseSB0aGUgdGl0bGUgb2YgdGhlIHBhZ2UsIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUsCisjIG9ubHkgdGhlIGN1cnJlbnQgZGF0ZSwgdGhlIHZlcnNpb24gbnVtYmVyIG9mIGRveHlnZW4sIHRoZSBwcm9qZWN0IG5hbWUgKHNlZQorIyBQUk9KRUNUX05BTUUpLCBvciB0aGUgcHJvamVjdCBudW1iZXIgKHNlZSBQUk9KRUNUX05VTUJFUikuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9IRUFERVIgICAgICAgICAgID0KKworIyBUaGUgTEFURVhfRk9PVEVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcGVyc29uYWwgTGFUZVggZm9vdGVyIGZvciB0aGUKKyMgZ2VuZXJhdGVkIExhVGVYIGRvY3VtZW50LiBUaGUgZm9vdGVyIHNob3VsZCBjb250YWluIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3QKKyMgY2hhcHRlci4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBzdGFuZGFyZCBmb290ZXIuCisjCisjIE5vdGU6IE9ubHkgdXNlIGEgdXNlci1kZWZpbmVkIGZvb3RlciBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmchCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9GT09URVIgICAgICAgICAgID0KKworIyBUaGUgTEFURVhfRVhUUkFfRklMRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZXh0cmEgaW1hZ2VzIG9yCisjIG90aGVyIHNvdXJjZSBmaWxlcyB3aGljaCBzaG91bGQgYmUgY29waWVkIHRvIHRoZSBMQVRFWF9PVVRQVVQgb3V0cHV0CisjIGRpcmVjdG9yeS4gTm90ZSB0aGF0IHRoZSBmaWxlcyB3aWxsIGJlIGNvcGllZCBhcy1pczsgdGhlcmUgYXJlIG5vIGNvbW1hbmRzIG9yCisjIG1hcmtlcnMgYXZhaWxhYmxlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfRVhUUkFfRklMRVMgICAgICA9CisKKyMgSWYgdGhlIFBERl9IWVBFUkxJTktTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgTGFUZVggdGhhdCBpcyBnZW5lcmF0ZWQgaXMKKyMgcHJlcGFyZWQgZm9yIGNvbnZlcnNpb24gdG8gUERGICh1c2luZyBwczJwZGYgb3IgcGRmbGF0ZXgpLiBUaGUgUERGIGZpbGUgd2lsbAorIyBjb250YWluIGxpbmtzIChqdXN0IGxpa2UgdGhlIEhUTUwgb3V0cHV0KSBpbnN0ZWFkIG9mIHBhZ2UgcmVmZXJlbmNlcy4gVGhpcworIyBtYWtlcyB0aGUgb3V0cHV0IHN1aXRhYmxlIGZvciBvbmxpbmUgYnJvd3NpbmcgdXNpbmcgYSBQREYgdmlld2VyLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworUERGX0hZUEVSTElOS1MgICAgICAgICA9IFlFUworCisjIElmIHRoZSBMQVRFWF9QREZMQVRFWCB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHVzZSBwZGZsYXRleCB0byBnZW5lcmF0ZQorIyB0aGUgUERGIGZpbGUgZGlyZWN0bHkgZnJvbSB0aGUgTGFUZVggZmlsZXMuIFNldCB0aGlzIG9wdGlvbiB0byBZRVMgdG8gZ2V0IGEKKyMgaGlnaGVyIHF1YWxpdHkgUERGIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitVU0VfUERGTEFURVggICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIExBVEVYX0JBVENITU9ERSB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGFkZCB0aGUgXGJhdGNobW9kZQorIyBjb21tYW5kIHRvIHRoZSBnZW5lcmF0ZWQgTGFUZVggZmlsZXMuIFRoaXMgd2lsbCBpbnN0cnVjdCBMYVRlWCB0byBrZWVwIHJ1bm5pbmcKKyMgaWYgZXJyb3JzIG9jY3VyLCBpbnN0ZWFkIG9mIGFza2luZyB0aGUgdXNlciBmb3IgaGVscC4gVGhpcyBvcHRpb24gaXMgYWxzbyB1c2VkCisjIHdoZW4gZ2VuZXJhdGluZyBmb3JtdWxhcyBpbiBIVE1MLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9CQVRDSE1PREUgICAgICAgID0gTk8KKworIyBJZiB0aGUgTEFURVhfSElERV9JTkRJQ0VTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIG5vdCBpbmNsdWRlIHRoZQorIyBpbmRleCBjaGFwdGVycyAoc3VjaCBhcyBGaWxlIEluZGV4LCBDb21wb3VuZCBJbmRleCwgZXRjLikgaW4gdGhlIG91dHB1dC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfSElERV9JTkRJQ0VTICAgICA9IE5PCisKKyMgSWYgdGhlIExBVEVYX1NPVVJDRV9DT0RFIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGluY2x1ZGUgc291cmNlCisjIGNvZGUgd2l0aCBzeW50YXggaGlnaGxpZ2h0aW5nIGluIHRoZSBMYVRlWCBvdXRwdXQuCisjCisjIE5vdGUgdGhhdCB3aGljaCBzb3VyY2VzIGFyZSBzaG93biBhbHNvIGRlcGVuZHMgb24gb3RoZXIgc2V0dGluZ3Mgc3VjaCBhcworIyBTT1VSQ0VfQlJPV1NFUi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfU09VUkNFX0NPREUgICAgICA9IE5PCisKKyMgVGhlIExBVEVYX0JJQl9TVFlMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgc3R5bGUgdG8gdXNlIGZvciB0aGUKKyMgYmlibGlvZ3JhcGh5LCBlLmcuIHBsYWlubmF0LCBvciBpZWVldHIuIFNlZQorIyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpYlRlWCBhbmQgXGNpdGUgZm9yIG1vcmUgaW5mby4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IHBsYWluLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfQklCX1NUWUxFICAgICAgICA9IHBsYWluCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFJURiBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfUlRGIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBSVEYgb3V0cHV0LiBUaGUKKyMgUlRGIG91dHB1dCBpcyBvcHRpbWl6ZWQgZm9yIFdvcmQgOTcgYW5kIG1heSBub3QgbG9vayB0b28gcHJldHR5IHdpdGggb3RoZXIgUlRGCisjIHJlYWRlcnMvZWRpdG9ycy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9SVEYgICAgICAgICAgID0gTk8KKworIyBUaGUgUlRGX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBSVEYgZG9jcyB3aWxsIGJlIHB1dC4gSWYgYQorIyByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4gZnJvbnQgb2YKKyMgaXQuCisjIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpczogcnRmLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUlRGIGlzIHNldCB0byBZRVMuCisKK1JURl9PVVRQVVQgICAgICAgICAgICAgPSBydGYKKworIyBJZiB0aGUgQ09NUEFDVF9SVEYgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiBnZW5lcmF0ZXMgbW9yZSBjb21wYWN0IFJURgorIyBkb2N1bWVudHMuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3Igc21hbGwgcHJvamVjdHMgYW5kIG1heSBoZWxwIHRvIHNhdmUgc29tZQorIyB0cmVlcyBpbiBnZW5lcmFsLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9SVEYgaXMgc2V0IHRvIFlFUy4KKworQ09NUEFDVF9SVEYgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFJURl9IWVBFUkxJTktTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgUlRGIHRoYXQgaXMgZ2VuZXJhdGVkIHdpbGwKKyMgY29udGFpbiBoeXBlcmxpbmsgZmllbGRzLiBUaGUgUlRGIGZpbGUgd2lsbCBjb250YWluIGxpbmtzIChqdXN0IGxpa2UgdGhlIEhUTUwKKyMgb3V0cHV0KSBpbnN0ZWFkIG9mIHBhZ2UgcmVmZXJlbmNlcy4gVGhpcyBtYWtlcyB0aGUgb3V0cHV0IHN1aXRhYmxlIGZvciBvbmxpbmUKKyMgYnJvd3NpbmcgdXNpbmcgV29yZCBvciBzb21lIG90aGVyIFdvcmQgY29tcGF0aWJsZSByZWFkZXJzIHRoYXQgc3VwcG9ydCB0aG9zZQorIyBmaWVsZHMuCisjCisjIE5vdGU6IFdvcmRQYWQgKHdyaXRlKSBhbmQgb3RoZXJzIGRvIG5vdCBzdXBwb3J0IGxpbmtzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9SVEYgaXMgc2V0IHRvIFlFUy4KKworUlRGX0hZUEVSTElOS1MgICAgICAgICA9IE5PCisKKyMgTG9hZCBzdHlsZXNoZWV0IGRlZmluaXRpb25zIGZyb20gZmlsZS4gU3ludGF4IGlzIHNpbWlsYXIgdG8gZG94eWdlbidzIGNvbmZpZworIyBmaWxlLCBpLmUuIGEgc2VyaWVzIG9mIGFzc2lnbm1lbnRzLiBZb3Ugb25seSBoYXZlIHRvIHByb3ZpZGUgcmVwbGFjZW1lbnRzLAorIyBtaXNzaW5nIGRlZmluaXRpb25zIGFyZSBzZXQgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZS4KKyMKKyMgU2VlIGFsc28gc2VjdGlvbiAiRG94eWdlbiB1c2FnZSIgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZW5lcmF0ZSB0aGUKKyMgZGVmYXVsdCBzdHlsZSBzaGVldCB0aGF0IGRveHlnZW4gbm9ybWFsbHkgdXNlcy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitSVEZfU1RZTEVTSEVFVF9GSUxFICAgID0KKworIyBTZXQgb3B0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGdlbmVyYXRpb24gb2YgYW4gUlRGIGRvY3VtZW50LiBTeW50YXggaXMKKyMgc2ltaWxhciB0byBkb3h5Z2VuJ3MgY29uZmlnIGZpbGUuIEEgdGVtcGxhdGUgZXh0ZW5zaW9ucyBmaWxlIGNhbiBiZSBnZW5lcmF0ZWQKKyMgdXNpbmcgZG94eWdlbiAtZSBydGYgZXh0ZW5zaW9uRmlsZS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitSVEZfRVhURU5TSU9OU19GSUxFICAgID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbWFuIHBhZ2Ugb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX01BTiB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgbWFuIHBhZ2VzIGZvcgorIyBjbGFzc2VzIGFuZCBmaWxlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9NQU4gICAgICAgICAgID0gTk8KKworIyBUaGUgTUFOX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBtYW4gcGFnZXMgd2lsbCBiZSBwdXQuIElmIGEKKyMgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluIGZyb250IG9mCisjIGl0LiBBIGRpcmVjdG9yeSBtYW4zIHdpbGwgYmUgY3JlYXRlZCBpbnNpZGUgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkKKyMgTUFOX09VVFBVVC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiBtYW4uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9NQU4gaXMgc2V0IHRvIFlFUy4KKworTUFOX09VVFBVVCAgICAgICAgICAgICA9IG1hbgorCisjIFRoZSBNQU5fRVhURU5TSU9OIHRhZyBkZXRlcm1pbmVzIHRoZSBleHRlbnNpb24gdGhhdCBpcyBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkCisjIG1hbiBwYWdlcy4gSW4gY2FzZSB0aGUgbWFudWFsIHNlY3Rpb24gZG9lcyBub3Qgc3RhcnQgd2l0aCBhIG51bWJlciwgdGhlIG51bWJlcgorIyAzIGlzIHByZXBlbmRlZC4gVGhlIGRvdCAoLikgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgTUFOX0VYVEVOU0lPTiB0YWcgaXMKKyMgb3B0aW9uYWwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiAuMy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX01BTiBpcyBzZXQgdG8gWUVTLgorCitNQU5fRVhURU5TSU9OICAgICAgICAgID0gLjMKKworIyBJZiB0aGUgTUFOX0xJTktTIHRhZyBpcyBzZXQgdG8gWUVTIGFuZCBkb3h5Z2VuIGdlbmVyYXRlcyBtYW4gb3V0cHV0LCB0aGVuIGl0CisjIHdpbGwgZ2VuZXJhdGUgb25lIGFkZGl0aW9uYWwgbWFuIGZpbGUgZm9yIGVhY2ggZW50aXR5IGRvY3VtZW50ZWQgaW4gdGhlIHJlYWwKKyMgbWFuIHBhZ2UocykuIFRoZXNlIGFkZGl0aW9uYWwgZmlsZXMgb25seSBzb3VyY2UgdGhlIHJlYWwgbWFuIHBhZ2UsIGJ1dCB3aXRob3V0CisjIHRoZW0gdGhlIG1hbiBjb21tYW5kIHdvdWxkIGJlIHVuYWJsZSB0byBmaW5kIHRoZSBjb3JyZWN0IHBhZ2UuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX01BTiBpcyBzZXQgdG8gWUVTLgorCitNQU5fTElOS1MgICAgICAgICAgICAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgWE1MIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9YTUwgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGFuIFhNTCBmaWxlIHRoYXQKKyMgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29kZSBpbmNsdWRpbmcgYWxsIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworR0VORVJBVEVfWE1MICAgICAgICAgICA9IE5PCisKKyMgVGhlIFhNTF9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgWE1MIHBhZ2VzIHdpbGwgYmUgcHV0LiBJZiBhCisjIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIHB1dCBpbiBmcm9udCBvZgorIyBpdC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiB4bWwuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9YTUwgaXMgc2V0IHRvIFlFUy4KKworWE1MX09VVFBVVCAgICAgICAgICAgICA9IHhtbAorCisjIFRoZSBYTUxfU0NIRU1BIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgWE1MIHNjaGVtYSwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgYQorIyB2YWxpZGF0aW5nIFhNTCBwYXJzZXIgdG8gY2hlY2sgdGhlIHN5bnRheCBvZiB0aGUgWE1MIGZpbGVzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfWE1MIGlzIHNldCB0byBZRVMuCisKK1hNTF9TQ0hFTUEgICAgICAgICAgICAgPQorCisjIFRoZSBYTUxfRFREIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgWE1MIERURCwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgYQorIyB2YWxpZGF0aW5nIFhNTCBwYXJzZXIgdG8gY2hlY2sgdGhlIHN5bnRheCBvZiB0aGUgWE1MIGZpbGVzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfWE1MIGlzIHNldCB0byBZRVMuCisKK1hNTF9EVEQgICAgICAgICAgICAgICAgPQorCisjIElmIHRoZSBYTUxfUFJPR1JBTUxJU1RJTkcgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGR1bXAgdGhlIHByb2dyYW0KKyMgbGlzdGluZ3MgKGluY2x1ZGluZyBzeW50YXggaGlnaGxpZ2h0aW5nIGFuZCBjcm9zcy1yZWZlcmVuY2luZyBpbmZvcm1hdGlvbikgdG8KKyMgdGhlIFhNTCBvdXRwdXQuIE5vdGUgdGhhdCBlbmFibGluZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBpbmNyZWFzZSB0aGUgc2l6ZQorIyBvZiB0aGUgWE1MIG91dHB1dC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1hNTCBpcyBzZXQgdG8gWUVTLgorCitYTUxfUFJPR1JBTUxJU1RJTkcgICAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIERPQ0JPT0sgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX0RPQ0JPT0sgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIERvY2Jvb2sgZmlsZXMKKyMgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBQREYuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworR0VORVJBVEVfRE9DQk9PSyAgICAgICA9IE5PCisKKyMgVGhlIERPQ0JPT0tfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIERvY2Jvb2sgcGFnZXMgd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluCisjIGZyb250IG9mIGl0LgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IGRvY2Jvb2suCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9ET0NCT09LIGlzIHNldCB0byBZRVMuCisKK0RPQ0JPT0tfT1VUUFVUICAgICAgICAgPSBkb2Nib29rCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQXV0b0dlbiBEZWZpbml0aW9ucyBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfQVVUT0dFTl9ERUYgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGFuIEF1dG9HZW4KKyMgRGVmaW5pdGlvbnMgKHNlZSBodHRwOi8vYXV0b2dlbi5zZi5uZXQpIGZpbGUgdGhhdCBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mCisjIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcyBzdGlsbAorIyBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUgYXQgdGhlIG1vbWVudC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9BVVRPR0VOX0RFRiAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUGVybCBtb2R1bGUgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX1BFUkxNT0QgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgUGVybCBtb2R1bGUKKyMgZmlsZSB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLgorIworIyBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCBhbmQgaW5jb21wbGV0ZSBhdCB0aGUgbW9tZW50LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX1BFUkxNT0QgICAgICAgPSBOTworCisjIElmIHRoZSBQRVJMTU9EX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSB0aGUgbmVjZXNzYXJ5CisjIE1ha2VmaWxlIHJ1bGVzLCBQZXJsIHNjcmlwdHMgYW5kIExhVGVYIGNvZGUgdG8gYmUgYWJsZSB0byBnZW5lcmF0ZSBQREYgYW5kIERWSQorIyBvdXRwdXQgZnJvbSB0aGUgUGVybCBtb2R1bGUgb3V0cHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9QRVJMTU9EIGlzIHNldCB0byBZRVMuCisKK1BFUkxNT0RfTEFURVggICAgICAgICAgPSBOTworCisjIElmIHRoZSBQRVJMTU9EX1BSRVRUWSB0YWcgaXMgc2V0IHRvIFlFUyB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgbmljZWx5CisjIGZvcm1hdHRlZCBzbyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGEgaHVtYW4gcmVhZGVyLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0bworIyB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24uIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGlzIHRhZyBpcyBzZXQgdG8gTk8gdGhlCisjIHNpemUgb2YgdGhlIFBlcmwgbW9kdWxlIG91dHB1dCB3aWxsIGJlIG11Y2ggc21hbGxlciBhbmQgUGVybCB3aWxsIHBhcnNlIGl0CisjIGp1c3QgdGhlIHNhbWUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9QRVJMTU9EIGlzIHNldCB0byBZRVMuCisKK1BFUkxNT0RfUFJFVFRZICAgICAgICAgPSBZRVMKKworIyBUaGUgbmFtZXMgb2YgdGhlIG1ha2UgdmFyaWFibGVzIGluIHRoZSBnZW5lcmF0ZWQgZG94eXJ1bGVzLm1ha2UgZmlsZSBhcmUKKyMgcHJlZml4ZWQgd2l0aCB0aGUgc3RyaW5nIGNvbnRhaW5lZCBpbiBQRVJMTU9EX01BS0VWQVJfUFJFRklYLiBUaGlzIGlzIHVzZWZ1bAorIyBzbyBkaWZmZXJlbnQgZG94eXJ1bGVzLm1ha2UgZmlsZXMgaW5jbHVkZWQgYnkgdGhlIHNhbWUgTWFrZWZpbGUgZG9uJ3QKKyMgb3ZlcndyaXRlIGVhY2ggb3RoZXIncyB2YXJpYWJsZXMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9QRVJMTU9EIGlzIHNldCB0byBZRVMuCisKK1BFUkxNT0RfTUFLRVZBUl9QUkVGSVggPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBwcmVwcm9jZXNzb3IKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgRU5BQkxFX1BSRVBST0NFU1NJTkcgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGV2YWx1YXRlIGFsbAorIyBDLXByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGZvdW5kIGluIHRoZSBzb3VyY2VzIGFuZCBpbmNsdWRlIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitFTkFCTEVfUFJFUFJPQ0VTU0lORyAgID0gWUVTCisKKyMgSWYgdGhlIE1BQ1JPX0VYUEFOU0lPTiB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZXhwYW5kIGFsbCBtYWNybyBuYW1lcworIyBpbiB0aGUgc291cmNlIGNvZGUuIElmIHNldCB0byBOTyBvbmx5IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpbGwgYmUKKyMgcGVyZm9ybWVkLiBNYWNybyBleHBhbnNpb24gY2FuIGJlIGRvbmUgaW4gYSBjb250cm9sbGVkIHdheSBieSBzZXR0aW5nCisjIEVYUEFORF9PTkxZX1BSRURFRiB0byBZRVMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGlzIHNldCB0byBZRVMuCisKK01BQ1JPX0VYUEFOU0lPTiAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFBBTkRfT05MWV9QUkVERUYgYW5kIE1BQ1JPX0VYUEFOU0lPTiB0YWdzIGFyZSBib3RoIHNldCB0byBZRVMgdGhlbgorIyB0aGUgbWFjcm8gZXhwYW5zaW9uIGlzIGxpbWl0ZWQgdG8gdGhlIG1hY3JvcyBzcGVjaWZpZWQgd2l0aCB0aGUgUFJFREVGSU5FRCBhbmQKKyMgRVhQQU5EX0FTX0RFRklORUQgdGFncy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworRVhQQU5EX09OTFlfUFJFREVGICAgICA9IE5PCisKKyMgSWYgdGhlIFNFQVJDSF9JTkNMVURFUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGUgaW5jbHVkZXMgZmlsZXMgaW4gdGhlCisjIElOQ0xVREVfUEFUSCB3aWxsIGJlIHNlYXJjaGVkIGlmIGEgI2luY2x1ZGUgaXMgZm91bmQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitTRUFSQ0hfSU5DTFVERVMgICAgICAgID0gWUVTCisKKyMgVGhlIElOQ0xVREVfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB0aGF0CisjIGNvbnRhaW4gaW5jbHVkZSBmaWxlcyB0aGF0IGFyZSBub3QgaW5wdXQgZmlsZXMgYnV0IHNob3VsZCBiZSBwcm9jZXNzZWQgYnkgdGhlCisjIHByZXByb2Nlc3Nvci4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSF9JTkNMVURFUyBpcyBzZXQgdG8gWUVTLgorCitJTkNMVURFX1BBVEggICAgICAgICAgID0KKworIyBZb3UgY2FuIHVzZSB0aGUgSU5DTFVERV9GSUxFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkCisjIHBhdHRlcm5zIChsaWtlICouaCBhbmQgKi5ocHApIHRvIGZpbHRlciBvdXQgdGhlIGhlYWRlci1maWxlcyBpbiB0aGUKKyMgZGlyZWN0b3JpZXMuIElmIGxlZnQgYmxhbmssIHRoZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCBGSUxFX1BBVFRFUk5TIHdpbGwgYmUKKyMgdXNlZC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGlzIHNldCB0byBZRVMuCisKK0lOQ0xVREVfRklMRV9QQVRURVJOUyAgPQorCisjIFRoZSBQUkVERUZJTkVEIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIG1hY3JvIG5hbWVzIHRoYXQgYXJlCisjIGRlZmluZWQgYmVmb3JlIHRoZSBwcmVwcm9jZXNzb3IgaXMgc3RhcnRlZCAoc2ltaWxhciB0byB0aGUgLUQgb3B0aW9uIG9mIGUuZy4KKyMgZ2NjKS4gVGhlIGFyZ3VtZW50IG9mIHRoZSB0YWcgaXMgYSBsaXN0IG9mIG1hY3JvcyBvZiB0aGUgZm9ybTogbmFtZSBvcgorIyBuYW1lPWRlZmluaXRpb24gKG5vIHNwYWNlcykuIElmIHRoZSBkZWZpbml0aW9uIGFuZCB0aGUgIj0iIGFyZSBvbWl0dGVkLCAiPTEiCisjIGlzIGFzc3VtZWQuIFRvIHByZXZlbnQgYSBtYWNybyBkZWZpbml0aW9uIGZyb20gYmVpbmcgdW5kZWZpbmVkIHZpYSAjdW5kZWYgb3IKKyMgcmVjdXJzaXZlbHkgZXhwYW5kZWQgdXNlIHRoZSA6PSBvcGVyYXRvciBpbnN0ZWFkIG9mIHRoZSA9IG9wZXJhdG9yLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworUFJFREVGSU5FRCAgICAgICAgICAgICA9CisKKyMgSWYgdGhlIE1BQ1JPX0VYUEFOU0lPTiBhbmQgRVhQQU5EX09OTFlfUFJFREVGIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiB0aGlzCisjIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbGlzdCBvZiBtYWNybyBuYW1lcyB0aGF0IHNob3VsZCBiZSBleHBhbmRlZC4gVGhlCisjIG1hY3JvIGRlZmluaXRpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUgc291cmNlcyB3aWxsIGJlIHVzZWQuIFVzZSB0aGUgUFJFREVGSU5FRAorIyB0YWcgaWYgeW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IG1hY3JvIGRlZmluaXRpb24gdGhhdCBvdmVycnVsZXMgdGhlCisjIGRlZmluaXRpb24gZm91bmQgaW4gdGhlIHNvdXJjZSBjb2RlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworRVhQQU5EX0FTX0RFRklORUQgICAgICA9CisKKyMgSWYgdGhlIFNLSVBfRlVOQ1RJT05fTUFDUk9TIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbidzIHByZXByb2Nlc3NvciB3aWxsCisjIHJlbW92ZSBhbGwgcmVmcmVuY2VzIHRvIGZ1bmN0aW9uLWxpa2UgbWFjcm9zIHRoYXQgYXJlIGFsb25lIG9uIGEgbGluZSwgaGF2ZSBhbgorIyBhbGwgdXBwZXJjYXNlIG5hbWUsIGFuZCBkbyBub3QgZW5kIHdpdGggYSBzZW1pY29sb24uIFN1Y2ggZnVuY3Rpb24gbWFjcm9zIGFyZQorIyB0eXBpY2FsbHkgdXNlZCBmb3IgYm9pbGVyLXBsYXRlIGNvZGUsIGFuZCB3aWxsIGNvbmZ1c2UgdGhlIHBhcnNlciBpZiBub3QKKyMgcmVtb3ZlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGlzIHNldCB0byBZRVMuCisKK1NLSVBfRlVOQ1RJT05fTUFDUk9TICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBleHRlcm5hbCByZWZlcmVuY2VzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIFRBR0ZJTEVTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHRhZyBmaWxlcy4gRm9yIGVhY2ggdGFnCisjIGZpbGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBkb2N1bWVudGF0aW9uIHNob3VsZCBiZSBhZGRlZC4gVGhlIGZvcm1hdCBvZgorIyBhIHRhZyBmaWxlIHdpdGhvdXQgdGhpcyBsb2NhdGlvbiBpcyBhcyBmb2xsb3dzOgorIyBUQUdGSUxFUyA9IGZpbGUxIGZpbGUyIC4uLgorIyBBZGRpbmcgbG9jYXRpb24gZm9yIHRoZSB0YWcgZmlsZXMgaXMgZG9uZSBhcyBmb2xsb3dzOgorIyBUQUdGSUxFUyA9IGZpbGUxPWxvYzEgImZpbGUyID0gbG9jMiIgLi4uCisjIHdoZXJlIGxvYzEgYW5kIGxvYzIgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGhzIG9yIFVSTHMuIFNlZSB0aGUKKyMgc2VjdGlvbiAiTGlua2luZyB0byBleHRlcm5hbCBkb2N1bWVudGF0aW9uIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlCisjIG9mIHRhZyBmaWxlcy4KKyMgTm90ZTogRWFjaCB0YWcgZmlsZSBtdXN0IGhhdmUgYW4gdW5pcXVlIG5hbWUgKHdoZXJlIHRoZSBuYW1lIGRvZXMgTk9UIGluY2x1ZGUKKyMgdGhlIHBhdGgpLiBJZiBhIHRhZyBmaWxlIGlzIG5vdCBsb2NhdGVkIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZG94eWdlbiBpcworIyBydW4sIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgdGFnZmlsZSBoZXJlLgorCitUQUdGSUxFUyAgICAgICAgICAgICAgID0KKworIyBXaGVuIGEgZmlsZSBuYW1lIGlzIHNwZWNpZmllZCBhZnRlciBHRU5FUkFURV9UQUdGSUxFLCBkb3h5Z2VuIHdpbGwgY3JlYXRlIGEKKyMgdGFnIGZpbGUgdGhhdCBpcyBiYXNlZCBvbiB0aGUgaW5wdXQgZmlsZXMgaXQgcmVhZHMuIFNlZSBzZWN0aW9uICJMaW5raW5nIHRvCisjIGV4dGVybmFsIGRvY3VtZW50YXRpb24iIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2FnZSBvZiB0YWcgZmlsZXMuCisKK0dFTkVSQVRFX1RBR0ZJTEUgICAgICAgPQorCisjIElmIHRoZSBBTExFWFRFUk5BTFMgdGFnIGlzIHNldCB0byBZRVMgYWxsIGV4dGVybmFsIGNsYXNzIHdpbGwgYmUgbGlzdGVkIGluIHRoZQorIyBjbGFzcyBpbmRleC4gSWYgc2V0IHRvIE5PIG9ubHkgdGhlIGluaGVyaXRlZCBleHRlcm5hbCBjbGFzc2VzIHdpbGwgYmUgbGlzdGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0FMTEVYVEVSTkFMUyAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFRFUk5BTF9HUk9VUFMgdGFnIGlzIHNldCB0byBZRVMgYWxsIGV4dGVybmFsIGdyb3VwcyB3aWxsIGJlIGxpc3RlZCBpbgorIyB0aGUgbW9kdWxlcyBpbmRleC4gSWYgc2V0IHRvIE5PLCBvbmx5IHRoZSBjdXJyZW50IHByb2plY3QncyBncm91cHMgd2lsbCBiZQorIyBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VYVEVSTkFMX0dST1VQUyAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRVhURVJOQUxfUEFHRVMgdGFnIGlzIHNldCB0byBZRVMgYWxsIGV4dGVybmFsIHBhZ2VzIHdpbGwgYmUgbGlzdGVkIGluCisjIHRoZSByZWxhdGVkIHBhZ2VzIGluZGV4LiBJZiBzZXQgdG8gTk8sIG9ubHkgdGhlIGN1cnJlbnQgcHJvamVjdCdzIHBhZ2VzIHdpbGwKKyMgYmUgbGlzdGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitFWFRFUk5BTF9QQUdFUyAgICAgICAgID0gWUVTCisKKyMgVGhlIFBFUkxfUEFUSCBzaG91bGQgYmUgdGhlIGFic29sdXRlIHBhdGggYW5kIG5hbWUgb2YgdGhlIHBlcmwgc2NyaXB0CisjIGludGVycHJldGVyIChpLmUuIHRoZSByZXN1bHQgb2YgJ3doaWNoIHBlcmwnKS4KKyMgVGhlIGRlZmF1bHQgZmlsZSAod2l0aCBhYnNvbHV0ZSBwYXRoKSBpczogL3Vzci9iaW4vcGVybC4KKworUEVSTF9QQVRIICAgICAgICAgICAgICA9IEBQRVJMQAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBkb3QgdG9vbAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBjbGFzcyBkaWFncmFtCisjIChpbiBIVE1MIGFuZCBMYVRlWCkgZm9yIGNsYXNzZXMgd2l0aCBiYXNlIG9yIHN1cGVyIGNsYXNzZXMuIFNldHRpbmcgdGhlIHRhZyB0bworIyBOTyB0dXJucyB0aGUgZGlhZ3JhbXMgb2ZmLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gYWxzbyB3b3JrcyB3aXRoIEhBVkVfRE9UCisjIGRpc2FibGVkLCBidXQgaXQgaXMgcmVjb21tZW5kZWQgdG8gaW5zdGFsbCBhbmQgdXNlIGRvdCwgc2luY2UgaXQgeWllbGRzIG1vcmUKKyMgcG93ZXJmdWwgZ3JhcGhzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitDTEFTU19ESUFHUkFNUyAgICAgICAgID0gWUVTCisKKyMgWW91IGNhbiBkZWZpbmUgbWVzc2FnZSBzZXF1ZW5jZSBjaGFydHMgd2l0aGluIGRveHlnZW4gY29tbWVudHMgdXNpbmcgdGhlIFxtc2MKKyMgY29tbWFuZC4gRG94eWdlbiB3aWxsIHRoZW4gcnVuIHRoZSBtc2NnZW4gdG9vbCAoc2VlOgorIyBodHRwOi8vd3d3Lm1jdGVybmFuLm1lLnVrL21zY2dlbi8pKSB0byBwcm9kdWNlIHRoZSBjaGFydCBhbmQgaW5zZXJ0IGl0IGluIHRoZQorIyBkb2N1bWVudGF0aW9uLiBUaGUgTVNDR0VOX1BBVEggdGFnIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlCisjIHRoZSBtc2NnZW4gdG9vbCByZXNpZGVzLiBJZiBsZWZ0IGVtcHR5IHRoZSB0b29sIGlzIGFzc3VtZWQgdG8gYmUgZm91bmQgaW4gdGhlCisjIGRlZmF1bHQgc2VhcmNoIHBhdGguCisKK01TQ0dFTl9QQVRIICAgICAgICAgICAgPQorCisjIFlvdSBjYW4gaW5jbHVkZSBkaWFncmFtcyBtYWRlIHdpdGggZGlhIGluIGRveHlnZW4gZG9jdW1lbnRhdGlvbi4gRG94eWdlbiB3aWxsCisjIHRoZW4gcnVuIGRpYSB0byBwcm9kdWNlIHRoZSBkaWFncmFtIGFuZCBpbnNlcnQgaXQgaW4gdGhlIGRvY3VtZW50YXRpb24uIFRoZQorIyBESUFfUEFUSCB0YWcgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGRpYSBiaW5hcnkgcmVzaWRlcy4KKyMgSWYgbGVmdCBlbXB0eSBkaWEgaXMgYXNzdW1lZCB0byBiZSBmb3VuZCBpbiB0aGUgZGVmYXVsdCBzZWFyY2ggcGF0aC4KKworRElBX1BBVEggICAgICAgICAgICAgICA9CisKKyMgSWYgc2V0IHRvIFlFUywgdGhlIGluaGVyaXRhbmNlIGFuZCBjb2xsYWJvcmF0aW9uIGdyYXBocyB3aWxsIGhpZGUgaW5oZXJpdGFuY2UKKyMgYW5kIHVzYWdlIHJlbGF0aW9ucyBpZiB0aGUgdGFyZ2V0IGlzIHVuZG9jdW1lbnRlZCBvciBpcyBub3QgYSBjbGFzcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworSElERV9VTkRPQ19SRUxBVElPTlMgICA9IFlFUworCisjIElmIHlvdSBzZXQgdGhlIEhBVkVfRE9UIHRhZyB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgYXNzdW1lIHRoZSBkb3QgdG9vbCBpcworIyBhdmFpbGFibGUgZnJvbSB0aGUgcGF0aC4gVGhpcyB0b29sIGlzIHBhcnQgb2YgR3JhcGh2aXogKHNlZToKKyMgaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvKSwgYSBncmFwaCB2aXN1YWxpemF0aW9uIHRvb2xraXQgZnJvbSBBVCZUIGFuZCBMdWNlbnQKKyMgQmVsbCBMYWJzLiBUaGUgb3RoZXIgb3B0aW9ucyBpbiB0aGlzIHNlY3Rpb24gaGF2ZSBubyBlZmZlY3QgaWYgdGhpcyBvcHRpb24gaXMKKyMgc2V0IHRvIE5PCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSEFWRV9ET1QgICAgICAgICAgICAgICA9IEBET1hZR0VOX1VTRV9ET1RACisKKyMgVGhlIERPVF9OVU1fVEhSRUFEUyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBkb3QgaW52b2NhdGlvbnMgZG94eWdlbiBpcyBhbGxvd2VkCisjIHRvIHJ1biBpbiBwYXJhbGxlbC4gV2hlbiBzZXQgdG8gMCBkb3h5Z2VuIHdpbGwgYmFzZSB0aGlzIG9uIHRoZSBudW1iZXIgb2YKKyMgcHJvY2Vzc29ycyBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbS4gWW91IGNhbiBzZXQgaXQgZXhwbGljaXRseSB0byBhIHZhbHVlCisjIGxhcmdlciB0aGFuIDAgdG8gZ2V0IGNvbnRyb2wgb3ZlciB0aGUgYmFsYW5jZSBiZXR3ZWVuIENQVSBsb2FkIGFuZCBwcm9jZXNzaW5nCisjIHNwZWVkLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAzMiwgZGVmYXVsdCB2YWx1ZTogMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9OVU1fVEhSRUFEUyAgICAgICAgPSAwCisKKyMgV2hlbiB5b3Ugd2FudCBhIGRpZmZlcmVudGx5IGxvb2tpbmcgZm9udCBuIHRoZSBkb3QgZmlsZXMgdGhhdCBkb3h5Z2VuCisjIGdlbmVyYXRlcyB5b3UgY2FuIHNwZWNpZnkgdGhlIGZvbnQgbmFtZSB1c2luZyBET1RfRk9OVE5BTUUuIFlvdSBuZWVkIHRvIG1ha2UKKyMgc3VyZSBkb3QgaXMgYWJsZSB0byBmaW5kIHRoZSBmb250LCB3aGljaCBjYW4gYmUgZG9uZSBieSBwdXR0aW5nIGl0IGluIGEKKyMgc3RhbmRhcmQgbG9jYXRpb24gb3IgYnkgc2V0dGluZyB0aGUgRE9URk9OVFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgYnkKKyMgc2V0dGluZyBET1RfRk9OVFBBVEggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBmb250LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogSGVsdmV0aWNhLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0ZPTlROQU1FICAgICAgICAgICA9IEhlbHZldGljYQorCisjIFRoZSBET1RfRk9OVFNJWkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgc2l6ZSAoaW4gcG9pbnRzKSBvZiB0aGUgZm9udCBvZgorIyBkb3QgZ3JhcGhzLgorIyBNaW5pbXVtIHZhbHVlOiA0LCBtYXhpbXVtIHZhbHVlOiAyNCwgZGVmYXVsdCB2YWx1ZTogMTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfRk9OVFNJWkUgICAgICAgICAgID0gMTAKKworIyBCeSBkZWZhdWx0IGRveHlnZW4gd2lsbCB0ZWxsIGRvdCB0byB1c2UgdGhlIGRlZmF1bHQgZm9udCBhcyBzcGVjaWZpZWQgd2l0aAorIyBET1RfRk9OVE5BTUUuIElmIHlvdSBzcGVjaWZ5IGEgZGlmZmVyZW50IGZvbnQgdXNpbmcgRE9UX0ZPTlROQU1FIHlvdSBjYW4gc2V0CisjIHRoZSBwYXRoIHdoZXJlIGRvdCBjYW4gZmluZCBpdCB1c2luZyB0aGlzIHRhZy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9GT05UUEFUSCAgICAgICAgICAgPQorCisjIElmIHRoZSBDTEFTU19HUkFQSCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvcgorIyBlYWNoIGRvY3VtZW50ZWQgY2xhc3Mgc2hvd2luZyB0aGUgZGlyZWN0IGFuZCBpbmRpcmVjdCBpbmhlcml0YW5jZSByZWxhdGlvbnMuCisjIFNldHRpbmcgdGhpcyB0YWcgdG8gWUVTIHdpbGwgZm9yY2UgdGhlIENMQVNTX0RJQUdSQU1TIHRhZyB0byBOTy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0NMQVNTX0dSQVBIICAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ09MTEFCT1JBVElPTl9HUkFQSCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQgY2xhc3Mgc2hvd2luZyB0aGUgZGlyZWN0IGFuZCBpbmRpcmVjdCBpbXBsZW1lbnRhdGlvbgorIyBkZXBlbmRlbmNpZXMgKGluaGVyaXRhbmNlLCBjb250YWlubWVudCwgYW5kIGNsYXNzIHJlZmVyZW5jZXMgdmFyaWFibGVzKSBvZiB0aGUKKyMgY2xhc3Mgd2l0aCBvdGhlciBkb2N1bWVudGVkIGNsYXNzZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitDT0xMQUJPUkFUSU9OX0dSQVBIICAgID0gWUVTCisKKyMgSWYgdGhlIEdST1VQX0dSQVBIUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvcgorIyBncm91cHMsIHNob3dpbmcgdGhlIGRpcmVjdCBncm91cHMgZGVwZW5kZW5jaWVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworR1JPVVBfR1JBUEhTICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBVTUxfTE9PSyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgaW5oZXJpdGFuY2UgYW5kCisjIGNvbGxhYm9yYXRpb24gZGlhZ3JhbXMgaW4gYSBzdHlsZSBzaW1pbGFyIHRvIHRoZSBPTUcncyBVbmlmaWVkIE1vZGVsaW5nCisjIExhbmd1YWdlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitVTUxfTE9PSyAgICAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgVU1MX0xPT0sgdGFnIGlzIGVuYWJsZWQsIHRoZSBmaWVsZHMgYW5kIG1ldGhvZHMgYXJlIHNob3duIGluc2lkZSB0aGUKKyMgY2xhc3Mgbm9kZS4gSWYgdGhlcmUgYXJlIG1hbnkgZmllbGRzIG9yIG1ldGhvZHMgYW5kIG1hbnkgbm9kZXMgdGhlIGdyYXBoIG1heQorIyBiZWNvbWUgdG9vIGJpZyB0byBiZSB1c2VmdWwuIFRoZSBVTUxfTElNSVRfTlVNX0ZJRUxEUyB0aHJlc2hvbGQgbGltaXRzIHRoZQorIyBudW1iZXIgb2YgaXRlbXMgZm9yIGVhY2ggdHlwZSB0byBtYWtlIHRoZSBzaXplIG1vcmUgbWFuYWdlYWJsZS4gU2V0IHRoaXMgdG8gMAorIyBmb3Igbm8gbGltaXQuIE5vdGUgdGhhdCB0aGUgdGhyZXNob2xkIG1heSBiZSBleGNlZWRlZCBieSA1MCUgYmVmb3JlIHRoZSBsaW1pdAorIyBpcyBlbmZvcmNlZC4gU28gd2hlbiB5b3Ugc2V0IHRoZSB0aHJlc2hvbGQgdG8gMTAsIHVwIHRvIDE1IGZpZWxkcyBtYXkgYXBwZWFyLAorIyBidXQgaWYgdGhlIG51bWJlciBleGNlZWRzIDE1LCB0aGUgdG90YWwgYW1vdW50IG9mIGZpZWxkcyBzaG93biBpcyBsaW1pdGVkIHRvCisjIDEwLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAxMDAsIGRlZmF1bHQgdmFsdWU6IDEwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworVU1MX0xJTUlUX05VTV9GSUVMRFMgICA9IDEwCisKKyMgSWYgdGhlIFRFTVBMQVRFX1JFTEFUSU9OUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHRoZSBpbmhlcml0YW5jZSBhbmQKKyMgY29sbGFib3JhdGlvbiBncmFwaHMgd2lsbCBzaG93IHRoZSByZWxhdGlvbnMgYmV0d2VlbiB0ZW1wbGF0ZXMgYW5kIHRoZWlyCisjIGluc3RhbmNlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworVEVNUExBVEVfUkVMQVRJT05TICAgICA9IE5PCisKKyMgSWYgdGhlIElOQ0xVREVfR1JBUEgsIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGFuZCBTRUFSQ0hfSU5DTFVERVMgdGFncyBhcmUgc2V0IHRvCisjIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQgZmlsZSBzaG93aW5nIHRoZQorIyBkaXJlY3QgYW5kIGluZGlyZWN0IGluY2x1ZGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBmaWxlIHdpdGggb3RoZXIgZG9jdW1lbnRlZAorIyBmaWxlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0lOQ0xVREVfR1JBUEggICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgSU5DTFVERURfQllfR1JBUEgsIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGFuZCBTRUFSQ0hfSU5DTFVERVMgdGFncyBhcmUKKyMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQgZmlsZSBzaG93aW5nCisjIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IGluY2x1ZGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBmaWxlIHdpdGggb3RoZXIgZG9jdW1lbnRlZAorIyBmaWxlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0lOQ0xVREVEX0JZX0dSQVBIICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ0FMTF9HUkFQSCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGNhbGwKKyMgZGVwZW5kZW5jeSBncmFwaCBmb3IgZXZlcnkgZ2xvYmFsIGZ1bmN0aW9uIG9yIGNsYXNzIG1ldGhvZC4KKyMKKyMgTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbmNyZWFzZSB0aGUgdGltZSBvZiBhIHJ1bi4KKyMgU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbCBncmFwaHMgZm9yIHNlbGVjdGVkCisjIGZ1bmN0aW9ucyBvbmx5IHVzaW5nIHRoZSBcY2FsbGdyYXBoIGNvbW1hbmQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0NBTExfR1JBUEggICAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ0FMTEVSX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgY2FsbGVyCisjIGRlcGVuZGVuY3kgZ3JhcGggZm9yIGV2ZXJ5IGdsb2JhbCBmdW5jdGlvbiBvciBjbGFzcyBtZXRob2QuCisjCisjIE5vdGUgdGhhdCBlbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGhlIHRpbWUgb2YgYSBydW4uCisjIFNvIGluIG1vc3QgY2FzZXMgaXQgd2lsbCBiZSBiZXR0ZXIgdG8gZW5hYmxlIGNhbGxlciBncmFwaHMgZm9yIHNlbGVjdGVkCisjIGZ1bmN0aW9ucyBvbmx5IHVzaW5nIHRoZSBcY2FsbGVyZ3JhcGggY29tbWFuZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworQ0FMTEVSX0dSQVBIICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBHUkFQSElDQUxfSElFUkFSQ0hZIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdyYXBoaWNhbAorIyBoaWVyYXJjaHkgb2YgYWxsIGNsYXNzZXMgaW5zdGVhZCBvZiBhIHRleHR1YWwgb25lLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworR1JBUEhJQ0FMX0hJRVJBUkNIWSAgICA9IFlFUworCisjIElmIHRoZSBESVJFQ1RPUllfR1JBUEggdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc2hvdyB0aGUKKyMgZGVwZW5kZW5jaWVzIGEgZGlyZWN0b3J5IGhhcyBvbiBvdGhlciBkaXJlY3RvcmllcyBpbiBhIGdyYXBoaWNhbCB3YXkuIFRoZQorIyBkZXBlbmRlbmN5IHJlbGF0aW9ucyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgI2luY2x1ZGUgcmVsYXRpb25zIGJldHdlZW4gdGhlCisjIGZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RJUkVDVE9SWV9HUkFQSCAgICAgICAgPSBZRVMKKworIyBUaGUgRE9UX0lNQUdFX0ZPUk1BVCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBpbWFnZSBmb3JtYXQgb2YgdGhlIGltYWdlcworIyBnZW5lcmF0ZWQgYnkgZG90LgorIyBOb3RlOiBJZiB5b3UgY2hvb3NlIHN2ZyB5b3UgbmVlZCB0byBzZXQgSFRNTF9GSUxFX0VYVEVOU0lPTiB0byB4aHRtbCBpbiBvcmRlcgorIyB0byBtYWtlIHRoZSBTVkcgZmlsZXMgdmlzaWJsZSBpbiBJRSA5KyAob3RoZXIgYnJvd3NlcnMgZG8gbm90IGhhdmUgdGhpcworIyByZXF1aXJlbWVudCkuCisjIFBvc3NpYmxlIHZhbHVlcyBhcmU6IHBuZywganBnLCBnaWYgYW5kIHN2Zy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IHBuZy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9JTUFHRV9GT1JNQVQgICAgICAgPSBwbmcKKworIyBJZiBET1RfSU1BR0VfRk9STUFUIGlzIHNldCB0byBzdmcsIHRoZW4gdGhpcyBvcHRpb24gY2FuIGJlIHNldCB0byBZRVMgdG8KKyMgZW5hYmxlIGdlbmVyYXRpb24gb2YgaW50ZXJhY3RpdmUgU1ZHIGltYWdlcyB0aGF0IGFsbG93IHpvb21pbmcgYW5kIHBhbm5pbmcuCisjCisjIE5vdGUgdGhhdCB0aGlzIHJlcXVpcmVzIGEgbW9kZXJuIGJyb3dzZXIgb3RoZXIgdGhhbiBJbnRlcm5ldCBFeHBsb3Jlci4gVGVzdGVkCisjIGFuZCB3b3JraW5nIGFyZSBGaXJlZm94LCBDaHJvbWUsIFNhZmFyaSwgYW5kIE9wZXJhLgorIyBOb3RlOiBGb3IgSUUgOSsgeW91IG5lZWQgdG8gc2V0IEhUTUxfRklMRV9FWFRFTlNJT04gdG8geGh0bWwgaW4gb3JkZXIgdG8gbWFrZQorIyB0aGUgU1ZHIGZpbGVzIHZpc2libGUuIE9sZGVyIHZlcnNpb25zIG9mIElFIGRvIG5vdCBoYXZlIFNWRyBzdXBwb3J0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitJTlRFUkFDVElWRV9TVkcgICAgICAgID0gTk8KKworIyBUaGUgRE9UX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHBhdGggd2hlcmUgdGhlIGRvdCB0b29sIGNhbiBiZQorIyBmb3VuZC4gSWYgbGVmdCBibGFuaywgaXQgaXMgYXNzdW1lZCB0aGUgZG90IHRvb2wgY2FuIGJlIGZvdW5kIGluIHRoZSBwYXRoLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX1BBVEggICAgICAgICAgICAgICA9CisKKyMgVGhlIERPVEZJTEVfRElSUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB0aGF0CisjIGNvbnRhaW4gZG90IGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUgdGhlIFxkb3RmaWxlCisjIGNvbW1hbmQpLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9URklMRV9ESVJTICAgICAgICAgICA9CisKKyMgVGhlIE1TQ0ZJTEVfRElSUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB0aGF0CisjIGNvbnRhaW4gbXNjIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUgdGhlIFxtc2NmaWxlCisjIGNvbW1hbmQpLgorCitNU0NGSUxFX0RJUlMgICAgICAgICAgID0KKworIyBUaGUgRElBRklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBkaWEgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgXGRpYWZpbGUKKyMgY29tbWFuZCkuCisKK0RJQUZJTEVfRElSUyAgICAgICAgICAgPQorCisjIFRoZSBET1RfR1JBUEhfTUFYX05PREVTIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzCisjIHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGUgZ3JhcGguIElmIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gYSBncmFwaCBiZWNvbWVzCisjIGxhcmdlciB0aGFuIHRoaXMgdmFsdWUsIGRveHlnZW4gd2lsbCB0cnVuY2F0ZSB0aGUgZ3JhcGgsIHdoaWNoIGlzIHZpc3VhbGl6ZWQKKyMgYnkgcmVwcmVzZW50aW5nIGEgbm9kZSBhcyBhIHJlZCBib3guIE5vdGUgdGhhdCBkb3h5Z2VuIGlmIHRoZSBudW1iZXIgb2YgZGlyZWN0CisjIGNoaWxkcmVuIG9mIHRoZSByb290IG5vZGUgaW4gYSBncmFwaCBpcyBhbHJlYWR5IGxhcmdlciB0aGFuCisjIERPVF9HUkFQSF9NQVhfTk9ERVMgdGhlbiB0aGUgZ3JhcGggd2lsbCBub3QgYmUgc2hvd24gYXQgYWxsLiBBbHNvIG5vdGUgdGhhdAorIyB0aGUgc2l6ZSBvZiBhIGdyYXBoIGNhbiBiZSBmdXJ0aGVyIHJlc3RyaWN0ZWQgYnkgTUFYX0RPVF9HUkFQSF9ERVBUSC4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMTAwMDAsIGRlZmF1bHQgdmFsdWU6IDUwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0dSQVBIX01BWF9OT0RFUyAgICA9IDUwCisKKyMgVGhlIE1BWF9ET1RfR1JBUEhfREVQVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSBkZXB0aCBvZiB0aGUgZ3JhcGhzCisjIGdlbmVyYXRlZCBieSBkb3QuIEEgZGVwdGggdmFsdWUgb2YgMyBtZWFucyB0aGF0IG9ubHkgbm9kZXMgcmVhY2hhYmxlIGZyb20gdGhlCisjIHJvb3QgYnkgZm9sbG93aW5nIGEgcGF0aCB2aWEgYXQgbW9zdCAzIGVkZ2VzIHdpbGwgYmUgc2hvd24uIE5vZGVzIHRoYXQgbGF5CisjIGZ1cnRoZXIgZnJvbSB0aGUgcm9vdCBub2RlIHdpbGwgYmUgb21pdHRlZC4gTm90ZSB0aGF0IHNldHRpbmcgdGhpcyBvcHRpb24gdG8gMQorIyBvciAyIG1heSBncmVhdGx5IHJlZHVjZSB0aGUgY29tcHV0YXRpb24gdGltZSBuZWVkZWQgZm9yIGxhcmdlIGNvZGUgYmFzZXMuIEFsc28KKyMgbm90ZSB0aGF0IHRoZSBzaXplIG9mIGEgZ3JhcGggY2FuIGJlIGZ1cnRoZXIgcmVzdHJpY3RlZCBieQorIyBET1RfR1JBUEhfTUFYX05PREVTLiBVc2luZyBhIGRlcHRoIG9mIDAgbWVhbnMgbm8gZGVwdGggcmVzdHJpY3Rpb24uCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDEwMDAsIGRlZmF1bHQgdmFsdWU6IDAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitNQVhfRE9UX0dSQVBIX0RFUFRIICAgID0gMAorCisjIFNldCB0aGUgRE9UX1RSQU5TUEFSRU5UIHRhZyB0byBZRVMgdG8gZ2VuZXJhdGUgaW1hZ2VzIHdpdGggYSB0cmFuc3BhcmVudAorIyBiYWNrZ3JvdW5kLiBUaGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGJlY2F1c2UgZG90IG9uIFdpbmRvd3MgZG9lcyBub3Qgc2VlbQorIyB0byBzdXBwb3J0IHRoaXMgb3V0IG9mIHRoZSBib3guCisjCisjIFdhcm5pbmc6IERlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gdXNlZCwgZW5hYmxpbmcgdGhpcyBvcHRpb24gbWF5IGxlYWQgdG8KKyMgYmFkbHkgYW50aS1hbGlhc2VkIGxhYmVscyBvbiB0aGUgZWRnZXMgb2YgYSBncmFwaCAoaS5lLiB0aGV5IGJlY29tZSBoYXJkIHRvCisjIHJlYWQpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfVFJBTlNQQVJFTlQgICAgICAgID0gTk8KKworIyBTZXQgdGhlIERPVF9NVUxUSV9UQVJHRVRTIHRhZyB0byBZRVMgYWxsb3cgZG90IHRvIGdlbmVyYXRlIG11bHRpcGxlIG91dHB1dAorIyBmaWxlcyBpbiBvbmUgcnVuIChpLmUuIG11bHRpcGxlIC1vIGFuZCAtVCBvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUpLiBUaGlzCisjIG1ha2VzIGRvdCBydW4gZmFzdGVyLCBidXQgc2luY2Ugb25seSBuZXdlciB2ZXJzaW9ucyBvZiBkb3QgKD4xLjguMTApIHN1cHBvcnQKKyMgdGhpcywgdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9NVUxUSV9UQVJHRVRTICAgICAgPSBZRVMKKworIyBJZiB0aGUgR0VORVJBVEVfTEVHRU5EIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGxlZ2VuZCBwYWdlCisjIGV4cGxhaW5pbmcgdGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYm94ZXMgYW5kIGFycm93cyBpbiB0aGUgZG90IGdlbmVyYXRlZAorIyBncmFwaHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9MRUdFTkQgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIERPVF9DTEVBTlVQIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCByZW1vdmUgdGhlIGludGVybWVkaWF0ZSBkb3QKKyMgZmlsZXMgdGhhdCBhcmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdmFyaW91cyBncmFwaHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfQ0xFQU5VUCAgICAgICAgICAgID0gWUVTCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL01ha2VmaWxlLWRvYy5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtZG9jLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDdlZjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL01ha2VmaWxlLWRvYy5hbQpAQCAtMCwwICsxLDEwMiBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBHTlUgYXV0b21ha2UgdGVtcGxhdGUgZm9yIHRoZSBAUEFDS0FHRV9ERVNDUklQVElPTkAKKyMgICAgICBpbi1wYWNrYWdlLCBkb2N1bWVudGF0aW9uLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitFWFRSQV9ESVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKHNyY2RpcikvRG94eWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIworIyBPdmVycmlkZSBhdXRvdG9vbCdzIGRlZmF1bHQgbm90aW9uIG9mIHRoZSBwYWNrYWdlIHZlcnNpb24gdmFyaWFibGVzLgorIyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHdlIGNyZWF0ZSBhIGRvYyBkaXN0cmlidXRpb24gdGhhdCB0aGUKKyMgdmVyc2lvbiBpcyBhbHdheXMgdGhlIGN1cnJlbnQgdmVyc2lvbiwgbm90IHRoZSB2ZXJzaW9uIHdoZW4gdGhlCisjIHBhY2thZ2Ugd2FzIGJvb3RzdHJhcHBlZC4KKyMKK1BBQ0tBR0VfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJChzaGVsbCBjYXQgJCh0b3BfYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uKQorVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKFBBQ0tBR0VfVkVSU0lPTikKKworCitkb2NkaXN0ZGlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID89IC4KKworQFBBQ0tBR0VfU0hPUlRfTE9XRVJAX2RvY2Rpc3RfYWxpYXMgICAgICAgICAgICAgPSBcCisgICAgJChQQUNLQUdFX1RBUk5BTUUpLWRvY3MKKworQFBBQ0tBR0VfU0hPUlRfTE9XRVJAX2RvY2Rpc3RfbmFtZSAgICAgICAgICAgICAgPSBcCisgICAgJChAUEFDS0FHRV9TSE9SVF9MT1dFUkBfZG9jZGlzdF9hbGlhcyktJChWRVJTSU9OKQorCitAUEFDS0FHRV9TSE9SVF9MT1dFUkBfZG9jZGlzdF9hcmNoaXZlICAgICAgICAgICA9IFwKKyAgICAkKGRvY2Rpc3RkaXIpLyQoQFBBQ0tBR0VfU0hPUlRfTE9XRVJAX2RvY2Rpc3RfbmFtZSkudGFyLmd6CisKK0NMRUFORklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIERveHlmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChAUEFDS0FHRV9TSE9SVF9MT1dFUkBfZG9jZGlzdF9hcmNoaXZlKSAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9ET0NTCisKK2FsbC1sb2NhbDogaHRtbC9pbmRleC5odG1sCisKKyMKKyMgV2UgY2hvb3NlIHRvIG1hbnVhbGx5IHRyYW5zZm9ybSBEb3h5ZmlsZS5pbiBpbnRvIERveHlmaWxlIGhlcmUgaW4KKyMgdGhlIG1ha2VmaWxlIHJhdGhlciB0aGFuIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IHNvIHRoYXQgd2UgY2FuIHRha2UKKyMgYWR2YW50YWdlIG9mIGxpdmUsIGF0IGJ1aWxkIHRpbWUgKHJhdGhlciB0aGFuIGF0IGNvbmZpZ3VyZSB0aW1lKSwKKyMgdXBkYXRpbmcgb2YgdGhlIHBhY2thZ2UgdmVyc2lvbiBudW1iZXIuCisjCisKK0RveHlmaWxlOiAkKHNyY2RpcikvRG94eWZpbGUuaW4gTWFrZWZpbGUKKwkkKEFNX1ZfR0VOKSQoU0VEKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIC1lICJzLFxARE9YWUdFTl9VU0VfRE9UXEAsJChET1hZR0VOX1VTRV9ET1QpLGciICAgXAorCSAgICAtZSAicyxcQFBBQ0tBR0VfTkFNRVxALCQoUEFDS0FHRV9OQU1FKSxnIiAgICAgICAgIFwKKwkgICAgLWUgInMsXEBQQUNLQUdFX1ZFUlNJT05cQCwkKFBBQ0tBR0VfVkVSU0lPTiksZyIgICBcCisJICAgIC1lICJzLFxAUEVSTFxALCQoUEVSTCksZyIgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAtZSAicyxcQGFic19idWlsZGRpclxALCQoYWJzX2J1aWxkZGlyKSxnIiAgICAgICAgIFwKKwkgICAgLWUgInMsXEBhYnNfc3JjZGlyXEAsJChhYnNfc3JjZGlyKSxnIiAgICAgICAgICAgICBcCisJICAgIC1lICJzLFxAYWJzX3RvcF9idWlsZGRpclxALCQoYWJzX3RvcF9idWlsZGRpciksZyIgXAorCSAgICAtZSAicyxcQGFic190b3Bfc3JjZGlyXEAsJChhYnNfdG9wX3NyY2RpciksZyIgICAgIFwKKwkgICAgPCAiJChzcmNkaXIpL0RveHlmaWxlLmluIiA+ICIkKEApIgorCitodG1sL2luZGV4Lmh0bWw6IERveHlmaWxlCisJJChBTV9WX0dFTikkKERPWFlHRU4pICQoPCkKKworIworIyBBZGRpdGlvbiBydWxlcyBhbmQgY29tbWFuZHMgdG8gY3JlYXRlIGEgZG9jdW1lbnRhdGlvbi1vbmx5CisjIGRpc3RyaWJ1dGlvbiBvZiBAUEFDS0FHRV9TSE9SVF9MT1dFUkAKKyMKKworJChAUEFDS0FHRV9TSE9SVF9MT1dFUkBfZG9jZGlzdF9uYW1lKTogaHRtbC9pbmRleC5odG1sCisJJChBTV9WX2F0KXJtIC1mIC1yICQoQCkKKwkkKGNhbGwgY3JlYXRlLWRpcmVjdG9yeSkKKwkkKEFNX1ZfYXQpY3AgLVIgaHRtbCAkKEApCisKKyQoQFBBQ0tBR0VfU0hPUlRfTE9XRVJAX2RvY2Rpc3RfYXJjaGl2ZSk6ICQoQFBBQ0tBR0VfU0hPUlRfTE9XRVJAX2RvY2Rpc3RfbmFtZSkKKwkkKEFNX1ZfYXQpZWNobyAiICBUQVIgICAgICAkKEApIgorCSQoQU1fVl9hdCl0YXJkaXI9IiQoPCkiICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiAiJChAKSIgJiYgcm0gLXJmICQoPCkKKworZG9jZGlzdCAkKEBQQUNLQUdFX1NIT1JUX0xPV0VSQF9kb2NkaXN0X2FsaWFzKTogJChAUEFDS0FHRV9TSE9SVF9MT1dFUkBfZG9jZGlzdF9hcmNoaXZlKQorCitjbGVhbi1sb2NhbDoKKwkkKEFNX1ZfYXQpcm0gLWYgLXIgaHRtbAorCitlbmRpZiAjIEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9ET0NTCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9NYWtlZmlsZS1mcHMuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL01ha2VmaWxlLWZwcy5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDUxYmFmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9NYWtlZmlsZS1mcHMuYW0KQEAgLTAsMCArMSwyOCBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBHTlUgYXV0b21ha2UgdGVtcGxhdGUgZm9yIHRoZSBAUEFDS0FHRV9ERVNDUklQVElPTkAKKyMgICAgICBmaXJzdC1wYXJ0eSAoZS5nLiBOZXN0IExhYnMpIHNvZnR3YXJlIGRpcmVjdG9yeS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworU1VCRElSUyAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL01ha2VmaWxlLXNyYy5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtc3JjLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NWNiY2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL01ha2VmaWxlLXNyYy5hbQpAQCAtMCwwICsxLDQyIEBACisjCisjICAgIENvcHlyaWdodCAyMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgdGhlIEdOVSBhdXRvbWFrZSB0ZW1wbGF0ZSBmb3IgdGhlIEBQQUNLQUdFX0RFU0NSSVBUSU9OQC4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworbGliX0xJQlJBUklFUyAgICAgICAgICAgICAgICAgICAgICAgPSBsaWJAUEFDS0FHRV9TSE9SVF9MT1dFUkAuYQorCitsaWJAUEFDS0FHRV9TSE9SVF9MT1dFUkBfYV9DUFBGTEFHUyA9IFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGliQFBBQ0tBR0VfU0hPUlRfTE9XRVJAX2FfU09VUkNFUyAgPSBAUEFDS0FHRV9TSE9SVF9MT1dFUkAuYworCitpbmNsdWRlX0hFQURFUlMgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBAUEFDS0FHRV9TSE9SVF9MT1dFUkAuaCAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaW5zdGFsbC1oZWFkZXJzOiBpbnN0YWxsLWluY2x1ZGVIRUFERVJTCisKK2lmIEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9DT1ZFUkFHRQorQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKHdpbGRjYXJkICouZ2NkYSAqLmdjbm8pCitlbmRpZiAjIEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9DT1ZFUkFHRQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtdGVzdHMuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL01ha2VmaWxlLXRlc3RzLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Yjk0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL01ha2VmaWxlLXRlc3RzLmFtCkBAIC0wLDAgKzEsMTA3IEBACisjCisjICAgIENvcHlyaWdodCAyMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgdGhlIEdOVSBhdXRvbWFrZSB0ZW1wbGF0ZSBmb3IgdGhlIEBQQUNLQUdFX0RFU0NSSVBUSU9OQAorIyAgICAgIHVuaXQgdGVzdHMuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKKyMKKyMgTG9jYWwgaGVhZGVycyB0byBidWlsZCBhZ2FpbnN0IGFuZCBkaXN0cmlidXRlIGJ1dCBub3QgdG8gaW5zdGFsbAorIyBzaW5jZSB0aGV5IGFyZSBub3QgcGFydCBvZiB0aGUgcGFja2FnZS4KKyMKK25vaW5zdF9IRUFERVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgQFBBQ0tBR0VfU0hPUlRfTE9XRVJALXRlc3QuaCAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIworIyBPdGhlciBmaWxlcyB3ZSBkbyB3YW50IHRvIGRpc3RyaWJ1dGUgd2l0aCB0aGUgcGFja2FnZS4KKyMKK0VYVFJBX0RJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitpZiBAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQlVJTERfVEVTVFMKKyMgQyBwcmVwcm9jZXNzb3Igb3B0aW9uIGZsYWdzIHRoYXQgd2lsbCBhcHBseSB0byBhbGwgY29tcGlsZWQgb2JqZWN0cyBpbiB0aGlzCisjIG1ha2VmaWxlLgorCitBTV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NPTU1PTl9MREFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLUwke3RvcF9idWlsZGRpcn0vc3JjIC1sQFBBQ0tBR0VfU0hPUlRfTE9XRVJACisgICAgJChOVUxMKQorCisjIFRlc3QgYXBwbGljYXRpb25zIHRoYXQgc2hvdWxkIGJlIHJ1biB3aGVuIHRoZSAnY2hlY2snIHRhcmdldCBpcyBydW4uCisKK2NoZWNrX1BST0dSQU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgQFBBQ0tBR0VfU0hPUlRfTE9XRVJALXRlc3QgICAgICAgICAgICAgICAgICAgXAorICAgIEBQQUNLQUdFX1NIT1JUX0xPV0VSQC10ZXN0LWN4eCAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKKyMgVGVzdCBhcHBsaWNhdGlvbnMgYW5kIHNjcmlwdHMgdGhhdCBzaG91bGQgYmUgYnVpbHQgYW5kIHJ1biB3aGVuIHRoZQorIyAnY2hlY2snIHRhcmdldCBpcyBydW4uCisKK1RFU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChjaGVja19QUk9HUkFNUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBUaGUgYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHRoZWlyIHZhbHVlcyB0aGF0IHdpbGwgYmUKKyMgbWFkZSBhdmFpbGFibGUgdG8gYWxsIHByb2dyYW1zIGFuZCBzY3JpcHRzIGluIFRFU1RTLgorCitURVNUU19FTlZJUk9OTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworIyBTb3VyY2UsIGNvbXBpbGVyLCBhbmQgbGlua2VyIG9wdGlvbnMgZm9yIHRlc3QgcHJvZ3JhbXMuCisKK0BQQUNLQUdFX1NIT1JUX0xPV0VSQF90ZXN0X0xEQUREICAgICAgICAgICAgICAgPSAkKENPTU1PTl9MREFERCkKK0BQQUNLQUdFX1NIT1JUX0xPV0VSQF90ZXN0X1NPVVJDRVMgICAgICAgICAgICAgPSBAUEFDS0FHRV9TSE9SVF9MT1dFUkAtdGVzdC5jICAgICAgICAgICAgICAgICAKKworQFBBQ0tBR0VfU0hPUlRfTE9XRVJAX3Rlc3RfY3h4X0xEQUREICAgICAgICAgICA9ICQoQ09NTU9OX0xEQUREKQorQFBBQ0tBR0VfU0hPUlRfTE9XRVJAX3Rlc3RfY3h4X1NPVVJDRVMgICAgICAgICA9IEBQQUNLQUdFX1NIT1JUX0xPV0VSQC10ZXN0LWN4eC5jcHAgICAgICAgICAgIAorCitpZiBAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQlVJTERfQ09WRVJBR0UKK0NMRUFORklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKHdpbGRjYXJkICouZ2NkYSAqLmdjbm8pCisKK2lmIEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9DT1ZFUkFHRV9SRVBPUlRTCisjIFRoZSBidW5kbGUgc2hvdWxkIHBvc2l0aXZlbHkgYmUgcXVhbGlmaWVkIHdpdGggdGhlIGFic29sdXRlIGJ1aWxkCisjIHBhdGguIE90aGVyd2lzZSwgVlBBVEggd2lsbCBnZXQgYXV0by1wcmVmaXhlZCB0byBpdCBpZiB0aGVyZSBpcworIyBhbHJlYWR5IHN1Y2ggYSBkaXJlY3RvcnkgaW4gdGhlIG5vbi1jb2xvY2F0ZWQgc291cmNlIHRyZWUuCisKK0BQQUNLQUdFX1NIT1JUX1VQUEVSQF9DT1ZFUkFHRV9CVU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICR7YWJzX2J1aWxkZGlyfS8ke1BBQ0tBR0V9JHtOTF9DT1ZFUkFHRV9CVU5ETEVfU1VGRklYfQorQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0NPVkVSQUdFX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJHtAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQ09WRVJBR0VfQlVORExFfS8ke1BBQ0tBR0V9JHtOTF9DT1ZFUkFHRV9JTkZPX1NVRkZJWH0KKworJChAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQ09WRVJBR0VfQlVORExFKToKKwkkKGNhbGwgY3JlYXRlLWRpcmVjdG9yeSkKKworJChAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQ09WRVJBR0VfSU5GTyk6IGNoZWNrIHwgJChkaXIgJChAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQ09WRVJBR0VfSU5GTykpCisJJChjYWxsIGdlbmVyYXRlLWNvdmVyYWdlLXJlcG9ydCwke3RvcF9idWlsZGRpcn0pCisKK2NvdmVyYWdlOiAkKEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9DT1ZFUkFHRV9JTkZPKQorCitjbGVhbi1sb2NhbDogY2xlYW4tbG9jYWwtY292ZXJhZ2UKKworLlBIT05ZOiBjbGVhbi1sb2NhbC1jb3ZlcmFnZQorY2xlYW4tbG9jYWwtY292ZXJhZ2U6CisJLSQoQU1fVl9hdClybSAtcmYgJChAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQ09WRVJBR0VfQlVORExFKQorZW5kaWYgIyBAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQlVJTERfQ09WRVJBR0VfUkVQT1JUUworZW5kaWYgIyBAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQlVJTERfQ09WRVJBR0UKK2VuZGlmICMgQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0JVSUxEX1RFU1RTCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9NYWtlZmlsZS10b3BsZXZlbC5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtdG9wbGV2ZWwuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYwNThhZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtdG9wbGV2ZWwuYW0KQEAgLTAsMCArMSwxNTMgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyB0aGUgR05VIGF1dG9tYWtlIHRlbXBsYXRlIGZvciB0aGUgQFBBQ0tBR0VfREVTQ1JJUFRJT05ALgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitBTV9NQUtFRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CisKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGluY2x1ZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3JjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitFWFRSQV9ESVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAuZGVmYXVsdC12ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGJvb3RzdHJhcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYm9vdHN0cmFwLWNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHNyY2RpcikvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMgXAorICAgICQoTlVMTCkKKworQlVJTFRfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLmxvY2FsLXZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2Rpc3RfZG9jX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworRElTVENMRUFORklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLmxvY2FsLXZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKKyMKKyMgUGFja2FnZSB2ZXJzaW9uIGZpbGVzOgorIworIyAuZGVmYXVsdC12ZXJzaW9uIC0gVGhlIGRlZmF1bHQgcGFja2FnZSB2ZXJzaW9uLiBUaGlzIGZpbGUgaXMgQUxXQVlTIGNoZWNrZWQKKyMgICAgICAgICAgICAgICAgICAgIGluIGFuZCBzaG91bGQgYWx3YXlzIHJlcHJlc2VudCB0aGUgY3VycmVudCBiYXNlbGluZQorIyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgcGFja2FnZS4KKyMKKyMgLmRpc3QtdmVyc2lvbiAgICAtIFRoZSBkaXN0cmlidXRlZCBwYWNrYWdlIHZlcnNpb24uIFRoaXMgZmlsZSBpcyBORVZFUgorIyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCBpbiB3aXRoaW4gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnksIGlzIGF1dG8tCisjICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQsIGFuZCBpcyBvbmx5IGZvdW5kIGluIHRoZSBwYWNrYWdlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgLmxvY2FsLXZlcnNpb24gICAtIFRoZSBjdXJyZW50IHNvdXJjZSBjb2RlIGNvbnRyb2xsZWQgcGFja2FnZSB2ZXJzaW9uLiBUaGlzCisjICAgICAgICAgICAgICAgICAgICBmaWxlIGlzIE5FVkVSIGNoZWNrZWQgaW4gd2l0aGluIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5LAorIyAgICAgICAgICAgICAgICAgICAgaXMgYXV0by1nZW5lcmF0ZWQsIGFuZCBjYW4gYWx3YXlzIGJlIGZvdW5kIGluIGJvdGggdGhlCisjICAgICAgICAgICAgICAgICAgICBidWlsZCB0cmVlIGFuZCBkaXN0cmlidXRpb24uCisjCisjIFdoZW4gcHJlc2VudCwgdGhlIC5sb2NhbC12ZXJzaW9uIGZpbGUgaXMgcHJlZmVycmVkIGZpcnN0LCB0aGUKKyMgLmRpc3QtdmVyc2lvbiBzZWNvbmQsIGFuZCB0aGUgLmRlZmF1bHQtdmVyc2lvbiBsYXN0LgorIworCitWRVJTSU9OX0ZJTEUgICAgICAgICAgICAgICAgICAgICAgOj0gJChpZiAkKHdpbGRjYXJkICQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uKSwkKGJ1aWxkZGlyKS8ubG9jYWwtdmVyc2lvbiwkKGlmICQod2lsZGNhcmQgJChzcmNkaXIpLy5kaXN0LXZlcnNpb24pLCQoc3JjZGlyKS8uZGlzdC12ZXJzaW9uLCQoc3JjZGlyKS8uZGVmYXVsdC12ZXJzaW9uKSkKKworIworIyBPdmVycmlkZSBhdXRvdG9vbCdzIGRlZmF1bHQgbm90aW9uIG9mIHRoZSBwYWNrYWdlIHZlcnNpb24gdmFyaWFibGVzLgorIyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHdlIGNyZWF0ZSBhIHNvdXJjZSBkaXN0cmlidXRpb24gdGhhdCB0aGUKKyMgdmVyc2lvbiBpcyBhbHdheXMgdGhlIGN1cnJlbnQgdmVyc2lvbiwgbm90IHRoZSB2ZXJzaW9uIHdoZW4gdGhlCisjIHBhY2thZ2Ugd2FzIGJvb3RzdHJhcHBlZC4KKyMKKworQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX1ZFUlNJT04gICAgID89ICQoc2hlbGwgY2F0ICQoVkVSU0lPTl9GSUxFKSAyPiAvZGV2L251bGwpCisKK1BBQ0tBR0VfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAkKEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9WRVJTSU9OKQorVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQoUEFDS0FHRV9WRVJTSU9OKQorCisjCisjIGNoZWNrLWZpbGUtLmxvY2FsLXZlcnNpb24KKyMKKyMgU3BlY3VsYXRpdmVseSByZWdlbmVyYXRlIC5sb2NhbC12ZXJzaW9uIGFuZCBjaGVjayB0byBzZWUgaWYgaXQgbmVlZHMKKyMgdG8gYmUgdXBkYXRlZC4KKyMKKyMgSWYgQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX1ZFUlNJT04gaGFzIGJlZW4gc3VwcGxpZWQgYW55d2hlcmUgb3RoZXIgdGhhbiBpbiB0aGlzIGZpbGUKKyMgKHdoaWNoIGlzIGltcGxpY2l0bHkgdGhlIGNvbnRlbnRzIG9mIC5sb2NhbC12ZXJzaW9uKSwgdGhlbiB1c2UgdGhhdDsKKyMgb3RoZXJ3aXNlLCBhdHRlbXB0IHRvIGdlbmVyYXRlIGl0IGZyb20gdGhlIFNDTSBzeXN0ZW0uCisjCisjIFRoaXMgaXMgY2FsbGVkIGZyb20gJChjYWxsIGNoZWNrLWZpbGUsLmxvY2FsLXZlcnNpb24pLgorIworZGVmaW5lIGNoZWNrLWZpbGUtLmxvY2FsLXZlcnNpb24KK2lmIFsgIiQob3JpZ2luIEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9WRVJTSU9OKSIgIT0gImZpbGUiIF07IHRoZW4gXAorICAgIGVjaG8gIiQoQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX1ZFUlNJT04pIiA+ICIkKDIpIjsgICAgICAgICAgICBcCitlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9zY3JpcHRzL21rdmVyc2lvbiAgICAgICAgICAgXAorICAgICAgICAtYiAiJChAUEFDS0FHRV9TSE9SVF9VUFBFUkBfVkVSU0lPTikiICIkKHRvcF9zcmNkaXIpIiAgICBcCisgICAgICAgID4gIiQoMikiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2ZpCitlbmRlZgorCisjCisjIGNoZWNrLWZpbGUtLmRpc3QtdmVyc2lvbgorIworIyBTcGVjdWxhdGl2ZWx5IHJlZ2VuZXJhdGUgLmRpc3QtdmVyc2lvbiBhbmQgY2hlY2sgdG8gc2VlIGlmIGl0IG5lZWRzCisjIHRvIGJlIHVwZGF0ZWQuCisjCisjIFRoaXMgaXMgY2FsbGVkIGZyb20gJChjYWxsIGNoZWNrLWZpbGUsLmRpc3QtdmVyc2lvbikuCisjCitkZWZpbmUgY2hlY2stZmlsZS0uZGlzdC12ZXJzaW9uCitjYXQgIiQoMSkiID4gIiQoMikiCitlbmRlZgorCisjCisjIEEgY29udmVuaWVuY2UgdGFyZ2V0IHRvIGFsbG93IHBhY2thZ2UgdXNlcnMgdG8gZWFzaWx5IHJlcnVuIHRoZQorIyBwYWNrYWdlIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjCisuUEhPTlk6IHJlY29uZmlndXJlCityZWNvbmZpZ3VyZTogJChidWlsZGRpcikvY29uZmlnLnN0YXR1cworCSQoQU1fVl9hdCkkKDwpIC0tcmVjaGVjaworCisjCisjIFZlcnNpb24gZmlsZSByZWdlbmVyYXRpb24gcnVsZXMuCisjCisuUEhPTlk6IGZvcmNlCisKKyQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uOiAkKHNyY2RpcikvLmRlZmF1bHQtdmVyc2lvbiBmb3JjZQorCiskKGRpc3RkaXIpLy5kaXN0LXZlcnNpb246ICQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uIGZvcmNlCisKKyQoZGlzdGRpcikvLmRpc3QtdmVyc2lvbiAkKGJ1aWxkZGlyKS8ubG9jYWwtdmVyc2lvbjoKKwkkKGNhbGwgY2hlY2stZmlsZSwkKEBGKSkKKworZGlzdCBkaXN0Y2hlY2s6ICQoQlVJTFRfU09VUkNFUykKKworZGlzdC1ob29rOiAkKGRpc3RkaXIpLy5kaXN0LXZlcnNpb24KKworIworIyBUb3AtbGV2ZWwgY29udmVuaWVuY2UgdGFyZ2V0IGZvciBtYWtpbmcgYSBkb2N1bWVudGF0aW9uLW9ubHkKKyMgZGlzdHJpYnV0aW9uIHdob3NlIHJlc3VsdHMgYXBwZWFyIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGJ1aWxkIHRyZWUKKyMgaW4gdGhlIHNhbWUgZmFzaGlvbiB0aGF0IHRoZSBkaXN0cmlidXRpb24gd291bGQgYmUgZm9yICdtYWtlIGRpc3QnLgorIworCisuUEhPTlk6IGRvY2Rpc3QKK2RvY2Rpc3Q6ICQoQlVJTFRfU09VUkNFUykKKwkkKE1BS0UpIC1DIGRvYyBkb2NkaXN0ZGlyPSQoYWJzX2J1aWxkZGlyKSAkKEApCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9ib290c3RyYXAgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL2Jvb3RzdHJhcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MDUwNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9ib290c3RyYXAKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyBhIHRyYW1wb2xpbmUgc2NyaXB0IHRvIHRoZSBubGJ1aWxkLWF1dG90b29scworIyAgICAgIGJvb3RzdHJhcCBzY3JpcHQgYW5kIGF1Z21lbnRzIGl0IGJ5IHByb3ZpZGluZyB0aGUgcGF0aCB0byB0aGUKKyMgICAgICBubGJ1aWxkLWF1dG90b29scyByZXBvc2l0b3J5IGZvciB0aGlzIHByb2plY3QuCisjCisKKyMgU2V0IHRoaXMgdG8gdGhlIHJlbGF0aXZlIGxvY2F0aW9uIG9mIG5sYnVpbGQtYXV0b3Rvb2xzIHRvIHRoaXMgc2NyaXB0CisKK25sYnVpbGRfYXV0b3Rvb2xzX3N0ZW09InRoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8iCisKKyMgRXN0YWJsaXNoIHNvbWUga2V5IGRpcmVjdG9yaWVzCisKK3NyY2Rpcj1gZGlybmFtZSAkezB9YAorYWJzX3NyY2Rpcj1gcHdkYAorYWJzX3RvcF9zcmNkaXI9IiR7YWJzX3NyY2Rpcn0iCisKK2V4ZWMgJHtzcmNkaXJ9LyR7bmxidWlsZF9hdXRvdG9vbHNfc3RlbX0vc2NyaXB0cy9ib290c3RyYXAgLUkgIiR7YWJzX3RvcF9zcmNkaXJ9LyR7bmxidWlsZF9hdXRvdG9vbHNfc3RlbX0iICQqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL2NvbmZpZ3VyZS5hYyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvY29uZmlndXJlLmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NGQ5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL2NvbmZpZ3VyZS5hYwpAQCAtMCwwICsxLDM4MiBAQAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorCisjCisjICAgIENvcHlyaWdodCAyMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgdGhlIEdOVSBhdXRvY29uZiBpbnB1dCBzb3VyY2UgZmlsZSBmb3IKKyMgICAgICBAUEFDS0FHRV9ERVNDUklQVElPTkAuCisjCisKKyMKKyMgRGVjbGFyZSBhdXRvY29uZiB2ZXJzaW9uIHJlcXVpcmVtZW50cworIworQUNfUFJFUkVRKFsyLjY4XSkKKworIworIyBJbml0aWFsaXplIGF1dG9jb25mIGZvciB0aGUgcGFja2FnZQorIworQUNfSU5JVChbQFBBQ0tBR0VfU0hPUlRfVVBQRVJAXSwKKyAgICAgICAgbTRfZXN5c2NtZChbQE5MQlVJTERfQVVUT1RPT0xTX1NURU1AL3NjcmlwdHMvbWt2ZXJzaW9uIC1iIGBjYXQgLmRlZmF1bHQtdmVyc2lvbmAgLl0pLAorICAgICAgICBbQFBBQ0tBR0VfRU1BSUxAXSwKKyAgICAgICAgW0BQQUNLQUdFX1NIT1JUX0xPV0VSQF0sCisgICAgICAgIFtAUEFDS0FHRV9VUkxAXSkKKworIyBUZWxsIHRoZSByZXN0IG9mIHRoZSBidWlsZCBzeXN0ZW0gdGhlIGFic29sdXRlIHBhdGggd2hlcmUgdGhlCisjIG5sYnVpbGQtYXV0b3Rvb2xzIHJlcG9zaXRvcnkgaXMgcm9vdGVkIGF0LgorCitBQ19TVUJTVChubGJ1aWxkX2F1dG90b29sc19zdGVtLFtATkxCVUlMRF9BVVRPVE9PTFNfU1RFTUBdKQorQUNfU1VCU1QoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIsW1wke2Fic190b3Bfc3JjZGlyfS9cJHtubGJ1aWxkX2F1dG90b29sc19zdGVtfV0pCisKKyMKKyMgQFBBQ0tBR0VfU0hPUlRfVVBQRVJAIGludGVyZmFjZSBjdXJyZW50LCByZXZpc2lvbiwgYW5kIGFnZSB2ZXJzaW9ucy4KKyMKKyMgTWFpbnRhaW50ZXJzOiBQbGVhc2UgbWFuYWdlIHRoZXNlIGZpZWxkcyBhcyBmb2xsb3dzOgorIworIyAgIEludGVyZmFjZXMgcmVtb3ZlZDogICAgQ1VSUkVOVCsrLCBBR0UgPSAwLCBSRVZJU0lPTiA9IDAKKyMgICBJbnRlcmZhY2VzIGFkZGVkOiAgICAgIENVUlJFTlQrKywgQUdFKyssICAgUkVWSVNJT04gPSAwCisjICAgTm8gaW50ZXJmYWNlcyBjaGFuZ2VkOiAgICAgICAgICAgICAgICAgICAgIFJFVklTSU9OKysKKyMKKyMKK0FDX1NVQlNUKExJQkBQQUNLQUdFX1NIT1JUX1VQUEVSQF9WRVJTSU9OX0NVUlJFTlQsICBbMV0pCitBQ19TVUJTVChMSUJAUEFDS0FHRV9TSE9SVF9VUFBFUkBfVkVSU0lPTl9BR0UsICAgICAgWzBdKQorQUNfU1VCU1QoTElCQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX1ZFUlNJT05fUkVWSVNJT04sIFswXSkKK0FDX1NVQlNUKExJQkBQQUNLQUdFX1NIT1JUX1VQUEVSQF9WRVJTSU9OX0lORk8sICAgICBbJHtMSUJAUEFDS0FHRV9TSE9SVF9VUFBFUkBfVkVSU0lPTl9DVVJSRU5UfToke0xJQkBQQUNLQUdFX1NIT1JUX1VQUEVSQF9WRVJTSU9OX1JFVklTSU9OfToke0xJQkBQQUNLQUdFX1NIT1JUX1VQUEVSQF9WRVJTSU9OX0FHRX1dKQorCisjCisjIENoZWNrIHRoZSBzYW5pdHkgb2YgdGhlIHNvdXJjZSBkaXJlY3RvcnkgYnkgY2hlY2tpbmcgZm9yIHRoZQorIyBwcmVzZW5jZSBvZiBhIGtleSB3YXRjaCBmaWxlCisjCitBQ19DT05GSUdfU1JDRElSKFtpbmNsdWRlL0BQQUNLQUdFX1NIT1JUX0xPV0VSQC5oXSkKKworIworIyBUZWxsIGF1dG9jb25mIHdoZXJlIHRvIGZpbmQgYXV4aWxsaWFyeSBidWlsZCB0b29scyAoZS5nLiBjb25maWcuZ3Vlc3MsCisjIGluc3RhbGwtc2gsIG1pc3NpbmcsIGV0Yy4pCisjCitBQ19DT05GSUdfQVVYX0RJUihbQE5MQlVJTERfQVVUT1RPT0xTX1NURU1AL2F1dG9jb25mXSkKKworIworIyBUZWxsIGF1dG9jb25mIHdoZXJlIHRvIGZpbmQgYXV4aWxsaWFyeSBNNCBtYWNyb3MKKyMKK0FDX0NPTkZJR19NQUNST19ESVIoW0BOTEJVSUxEX0FVVE9UT09MU19TVEVNQC9hdXRvY29uZi9tNF0pCisKKyMKKyMgVGVsbCBhdXRvY29uZiB3aGF0IGZpbGUgdGhlIHBhY2thZ2UgaXMgdXNpbmcgdG8gYWdncmVnYXRlIEMgcHJlcHJvY2Vzc29yCisjIGRlZmluZXMuCisjCitBQ19DT05GSUdfSEVBREVSUyhbaW5jbHVkZS9AUEFDS0FHRV9TSE9SVF9MT1dFUkAtY29uZmlnLmhdKQorCisjCisjIEZpZ3VyZSBvdXQgd2hhdCB0aGUgY2Fub25pY2FsIGJ1aWxkLCBob3N0IGFuZCB0YXJnZXQgdHVwbGVzIGFyZS4KKyMKK0FDX0NBTk9OSUNBTF9CVUlMRAorQUNfQ0FOT05JQ0FMX0hPU1QKK0FDX0NBTk9OSUNBTF9UQVJHRVQKKworIworIyBNYWMgT1MgWCAvIERhcndpbiBlbmRzIHVwIHB1dHRpbmcgc29tZSB2ZXJzaW9uaW5nIGNydWZ0IG9uIHRoZSBlbmQgb2YgaXRzCisjIHR1cGxlIHRoYXQgd2UgZG9uJ3QgY2FyZSBhYm91dCBpbiB0aGlzIHNjcmlwdC4gQ3JlYXRlICJjbGVhbiIgdmFyaWFibGVzCisjIGRldm9pZCBvZiBpdC4KKyMKKworTkxfRklMVEVSRURfQ0FOT05JQ0FMX0JVSUxECitOTF9GSUxURVJFRF9DQU5PTklDQUxfSE9TVAorTkxfRklMVEVSRURfQ0FOT05JQ0FMX1RBUkdFVAorCisjCisjIENvbmZpZ3VyZSBhdXRvbWFrZSB3aXRoIHRoZSBkZXNpcmVkIG9wdGlvbnMsIGluZGljYXRpbmcgdGhhdCB0aGlzIGlzIG5vdAorIyBhIG5hdGl2ZSBHTlUgcGFja2FnZSwgdGhhdCB3ZSB3YW50ICJzaWxlbnQiIGJ1aWxkIHJ1bGVzLCBhbmQgdGhhdCB3ZSB3YW50CisjIG9iamVjdHMgYnVpbHQgaW4gdGhlIHNhbWUgc3ViZGlyZWN0b3J5IGFzIHRoZWlyIHNvdXJjZSByYXRoZXIgdGhhbiBjb2xsYXBzZWQKKyMgdG9nZXRoZXIgYXQgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisjCisjIERpc2FibGUgc2lsZW50IGJ1aWxkIHJ1bGVzIGJ5IGVpdGhlciBwYXNzaW5nIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgdG8KKyMgY29uZmlndXJlIG9yIHBhc3NpbmcgVj0xIHRvIG1ha2UKKyMKK0FNX0lOSVRfQVVUT01BS0UoWzEuMTQgZm9yZWlnbiBzaWxlbnQtcnVsZXMgc3ViZGlyLW9iamVjdHMgdGFyLXBheF0pCisKKyMKKyMgU2lsZW50IGJ1aWxkIHJ1bGVzIHJlcXVpcmVzIGF0IGxlYXN0IGF1dG9tYWtlLTEuMTEuIEVtcGxveQorIyB0ZWNobmlxdWVzIGZvciBub3QgYnJlYWtpbmcgZWFybGllciB2ZXJzaW9ucyBvZiBhdXRvbWFrZS4KKyMKK200X2lmZGVmKFtBTV9TSUxFTlRfUlVMRVNdLCBbQU1fU0lMRU5UX1JVTEVTKFt5ZXNdKV0pCitBTV9TSUxFTlRfUlVMRVMoW3llc10pCisKKyMKKyMgRW5hYmxlIG1haW50YWluZXIgbW9kZSB0byBwcmV2ZW50IHRoZSBwYWNrYWdlIGZyb20gY29uc3RhbnRseSB0cnlpbmcKKyMgdG8gcmVidWlsZCBjb25maWd1cmUsIE1ha2VmaWxlLmluLCBldGMuIFJlYnVpbGRpbmcgc3VjaCBmaWxlcyByYXJlbHksCisjIGlmIGV2ZXIsIG5lZWRzIHRvIGJlIGRvbmUgImluIHRoZSBmaWVsZCIuCisjCisjIFVzZSB0aGUgaW5jbHVkZWQgJ2Jvb3RzdHJhcCcgc2NyaXB0IGluc3RlYWQgd2hlbiBuZWNlc3NhcnkuCisjCitBTV9NQUlOVEFJTkVSX01PREUKKworIworIyBDaGVja3MgZm9yIGJ1aWxkIGhvc3QgcHJvZ3JhbXMKKyMKKworIyBJZiB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nIGFuZCB3ZSBhcmUgb24gYW4gZW1iZWRkZWQgdGFyZ2V0IHRoYXQKKyMgZG9lc24ndCBzdXBwb3J0IGluZGVwZW5kZW50LCBzdGFuZGFsb25lIGV4ZWN1dGFibGVzLCB0aGVuIGFsbAorIyBjb21waWxlciB0ZXN0cyB0aGF0IGF0dGVtcHQgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2lsbCBmYWlsLiBJbgorIyBzdWNoIGNpcmN1bXN0YW5jZXMsIHNldCBBQ19OT19FWEVDVVRBQkxFUyAoc2VlIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy8KKyMgbWwvbmV3bGliLzIwMDYvbXNnMDAzNTMuaHRtbCkuCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBkaXNhYmxlIGV4ZWN1dGFibGUgY2hlY2tpbmddKQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgICBBQ19OT19FWEVDVVRBQkxFUworICAgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorZmkKKworIyBQYXNzaW5nIC1XZXJyb3IgdG8gR0NDLWJhc2VkIG9yIC1jb21wYXRpYmxlIGNvbXBpbGVycyBicmVha3Mgc29tZQorIyBhdXRvY29uZiB0ZXN0cyAoc2VlCisjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvY29uZi1wYXRjaGVzLzIwMDgtMDkvbXNnMDAwMTQuaHRtbCkuCisjCisjIElmIC1XZXJyb3IgaGFzIGJlZW4gcGFzc2VkIHRyYW5zZm9ybSBpdCBpbnRvIC1Xbm8tZXJyb3IuIFdlJ2xsCisjIHRyYW5zZm9ybSBpdCBiYWNrIGxhdGVyIHdpdGggTkxfUkVTVE9SRV9XRVJST1IuCisKK05MX1NBVkVfV0VSUk9SCisKKyMgQ2hlY2sgZm9yIGNvbXBpbGVycy4KKyMKKyMgVGhlc2Ugc2hvdWxkIGJlIGNoZWNrZWQgQkVGT1JFIHdlIGNoZWNrIGZvciBhbmQsIGltcGxpY2l0bHksCisjIGluaXRpYWxpemUgbGlidG9vbCBzdWNoIHRoYXQgbGlidG9vbCBrbm93cyB3aGF0IGxhbmd1YWdlcyBpdCBoYXMgdG8KKyMgd29yayB3aXRoLgorCitBQ19QUk9HX0NQUAorQUNfUFJPR19DUFBfV0VSUk9SCisKK0FDX1BST0dfQ0MKK0FDX1BST0dfQ0NfQ19PCisKK0FDX1BST0dfQ1hYQ1BQCisKK0FDX1BST0dfQ1hYCitBQ19QUk9HX0NYWF9DX08KKworIyBDaGVjayBmb3Igb3RoZXIgY29tcGlsZXIgdG9vbGNoYWluIHRvb2xzLgorCitBQ19DSEVDS19UT09MKEFSLCBhcikKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIpCitBQ19DSEVDS19UT09MKE9CSkNPUFksIG9iamNvcHkpCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCkKKworIyBDaGVjayBmb3Igb3RoZXIgaG9zdCB0b29scy4KKworQUNfUFJPR19JTlNUQUxMCitBQ19QUk9HX0xOX1MKKworQUNfUEFUSF9QUk9HKENNUCwgY21wKQorQUNfUEFUSF9QUk9HKFBFUkwsIHBlcmwpCisKKyMKKyMgQ2hlY2tzIGZvciBzcGVjaWZpYyBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MKKyMKKworIworIyBDb21tb24gY29tcGlsZXIgZmxhZ3Mgd2Ugd291bGQgbGlrZSB0byBoYXZlLgorIworIyAgIC1XYWxsICAgICAgICAgICAgICAgICAgICAgICAgQ0MsIENYWAorIworCitQUk9TUEVDVElWRV9DRkxBR1M9Ii1XYWxsIgorUFJPU1BFQ1RJVkVfQ1hYRkxBR1M9IiIKKworQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OUyhbQ10sICAgJHtQUk9TUEVDVElWRV9DRkxBR1N9KQorQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OUyhbQysrXSwgJHtQUk9TUEVDVElWRV9DRkxBR1N9ICR7UFJPU1BFQ1RJVkVfQ1hYRkxBR1N9KQorCisjIENoZWNrIGZvciBhbmQgaW5pdGlhbGl6ZSBsaWJ0b29sCisKK0xUX0lOSVQKKworIworIyBEZWJ1ZyBpbnN0YW5jZXMKKyMKK0FDX01TR19OT1RJQ0UoW2NoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgZGVidWcgaW5zdGFuY2VzXSkKKworIyBEZWJ1ZworCitOTF9FTkFCTEVfREVCVUcoW25vXSkKKworQU1fQ09ORElUSU9OQUwoW0BQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9ERUJVR10sIFt0ZXN0ICIke25sX2N2X2J1aWxkX2RlYnVnfSIgPSAieWVzIl0pCisKKyMKKyMgQ29kZSBjb3ZlcmFnZSBhbmQgY29tcGlsZXIgb3B0aW1pemF0aW9uCisjCisKKyMgQ292ZXJhZ2UKKworTkxfRU5BQkxFX0NPVkVSQUdFKFtub10pCisKK0FNX0NPTkRJVElPTkFMKFtAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQlVJTERfQ09WRVJBR0VdLCBbdGVzdCAiJHtubF9jdl9idWlsZF9jb3ZlcmFnZX0iID0gInllcyJdKQorCitOTF9FTkFCTEVfQ09WRVJBR0VfUkVQT1JUUyhbYXV0b10pCisKK0FNX0NPTkRJVElPTkFMKFtAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQlVJTERfQ09WRVJBR0VfUkVQT1JUU10sIFt0ZXN0ICIke25sX2N2X2J1aWxkX2NvdmVyYWdlX3JlcG9ydHN9IiA9ICJ5ZXMiXSkKKworIyBPcHRpbWl6YXRpb24KKworTkxfRU5BQkxFX09QVElNSVpBVElPTihbeWVzXSkKKworQU1fQ09ORElUSU9OQUwoW0BQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9PUFRJTUlaRURdLCBbdGVzdCAiJHtubF9jdl9idWlsZF9vcHRpbWl6ZWR9IiA9ICJ5ZXMiXSkKKworIworIyBUZXN0cworIworQUNfTVNHX05PVElDRShbY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCB0ZXN0c10pCisKKyMgVGVzdHMKKworTkxfRU5BQkxFX1RFU1RTKFt5ZXNdKQorCitBTV9DT05ESVRJT05BTChbQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0JVSUxEX1RFU1RTXSwgW3Rlc3QgIiR7bmxfY3ZfYnVpbGRfdGVzdHN9IiA9ICJ5ZXMiXSkKKworIworIyBEb2N1bWVudGF0aW9uCisjCisKKyMgRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGRvY3VtZW50YXRpb24gKHZpYSBEb3h5Z2VuKSBzaG91bGQgYmUgYnVpbHQKKyMgb3Igbm90LCB3aXRoICdhdXRvJyBhcyB0aGUgZGVmYXVsdCBhbmQgZXN0YWJsaXNoIGEgZGVmYXVsdCBzdXBwb3J0CisjIHZhbHVlIGZvciBHcmFwaFZpeiAnZG90JyBzdXBwb3J0LgorCitOTF9FTkFCTEVfRE9DUyhbYXV0b10sW05PXSkKKworQU1fQ09ORElUSU9OQUwoQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0JVSUxEX0RPQ1MsIFt0ZXN0ICIke25sX2N2X2J1aWxkX2RvY3N9IiA9ICJ5ZXMiXSkKKworIworIyBDaGVja3MgZm9yIGxpYnJhcmllcyBhbmQgcGFja2FnZXMuCisjCisjIEF0IG1pbmltdW0sIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgYXJlIG9wdGlvbmFsLCBkZXBlbmRpbmcgb24KKyMgY29uZmlndXJhdGlvbjoKKyMKKyMgICAqIFRCRAorIworQUNfTVNHX05PVElDRShbY2hlY2tpbmcgcmVxdWlyZWQgcGFja2FnZSBkZXBlbmRlbmNpZXNdKQorCisjIE5MX1dJVEhfUEFDS0FHRSguLi4pCisKKyMgQ2hlY2sgaWYgdGhlIGJ1aWxkIGhvc3QgaGFzIHBrZy1jb25maWcKKworQUNfUEFUSF9QUk9HKFtQS0dfQ09ORklHXSxbcGtnLWNvbmZpZ10pCisKKyMKKyMgQ2hlY2sgZm9yIGhlYWRlcnMKKyMKK0FDX0hFQURFUl9TVERCT09MCitBQ19IRUFERVJfU1REQworCitBQ19DSEVDS19IRUFERVJTKFtzdGRpbnQuaF0pCitBQ19DSEVDS19IRUFERVJTKFtzdHJpbmcuaF0pCisKKyMKKyMgQ2hlY2sgZm9yIHR5cGVzIGFuZCBzdHJ1Y3R1cmVzCisjCitBQ19UWVBFX0lOVDhfVAorQUNfVFlQRV9JTlQxNl9UCitBQ19UWVBFX0lOVDMyX1QKK0FDX1RZUEVfSU5UNjRfVAorQUNfVFlQRV9VSU5UOF9UCitBQ19UWVBFX1VJTlQxNl9UCitBQ19UWVBFX1VJTlQzMl9UCitBQ19UWVBFX1VJTlQ2NF9UCisKKyMKKyMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucworIworCitpZiB0ZXN0ICIke2FjX25vX2xpbmt9IiAhPSAieWVzIjsgdGhlbgorICAgIEFDX0NIRUNLX0ZVTkNTKFttZW1jcHldKQorZmkKKworIyBBZGQgYW55IGNvZGUgY292ZXJhZ2UgQ1BQRkxBR1MgYW5kIExERkxBR1MKKworQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9ICR7TkxfQ09WRVJBR0VfQ1BQRkxBR1N9IgorTERGTEFHUz0iJHtMREZMQUdTfSAke05MX0NPVkVSQUdFX0xERkxBR1N9IgorCisjIEF0IHRoaXMgcG9pbnQsIHdlIGNhbiByZXN0b3JlIHRoZSBjb21waWxlciBmbGFncyB0byB3aGF0ZXZlciB0aGUKKyMgdXNlciBwYXNzZWQgaW4sIG5vdyB0aGF0IHdlJ3JlIGNsZWFyIG9mIGFuIC1XZXJyb3IgaXNzdWVzIGJ5CisjIHRyYW5zZm9ybWluZyAtV25vLWVycm9yIGJhY2sgdG8gLVdlcnJvci4KKworTkxfUkVTVE9SRV9XRVJST1IKKworIworIyBJZGVudGlmeSB0aGUgdmFyaW91cyBtYWtlZmlsZXMgYW5kIGF1dG8tZ2VuZXJhdGVkIGZpbGVzIGZvciB0aGUgcGFja2FnZQorIworQUNfQ09ORklHX0ZJTEVTKFsKK01ha2VmaWxlCit0aGlyZF9wYXJ0eS9NYWtlZmlsZQorc3JjL01ha2VmaWxlCit0ZXN0cy9NYWtlZmlsZQorZG9jL01ha2VmaWxlCitdKQorCisjCisjIEdlbmVyYXRlIHRoZSBhdXRvLWdlbmVyYXRlZCBmaWxlcyBmb3IgdGhlIHBhY2thZ2UKKyMKK0FDX09VVFBVVAorCisjCisjIFN1bW1hcml6ZSB0aGUgcGFja2FnZSBjb25maWd1cmF0aW9uCisjCisKK0FDX01TR19OT1RJQ0UoWworCisgIENvbmZpZ3VyYXRpb24gU3VtbWFyeQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUGFja2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1BBQ0tBR0VfTkFNRX0KKyAgVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1BBQ0tBR0VfVkVSU0lPTn0KKyAgSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0xJQkBQQUNLQUdFX1NIT1JUX1VQUEVSQF9WRVJTSU9OX0lORk8vLzovLn0KKyAgQnVpbGQgc3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke2J1aWxkfQorICBIb3N0IHN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7aG9zdH0KKyAgVGFyZ2V0IHN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke3RhcmdldH0KKyAgVGFyZ2V0IGFyY2hpdGVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgOiAke3RhcmdldF9jcHV9CisgIFRhcmdldCBPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHt0YXJnZXRfb3N9CisgIENyb3NzIGNvbXBpbGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtjcm9zc19jb21waWxpbmd9CisgIEJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgICAgICAgICAgICAgICAgICAgIDogJHtlbmFibGVfc2hhcmVkfQorICBCdWlsZCBzdGF0aWMgbGlicmFyaWVzICAgICAgICAgICAgICAgICAgICA6ICR7ZW5hYmxlX3N0YXRpY30KKyAgQnVpbGQgZGVidWcgbGlicmFyaWVzICAgICAgICAgICAgICAgICAgICAgOiAke25sX2N2X2J1aWxkX2RlYnVnfQorICBCdWlsZCBvcHRpbWl6ZWQgbGlicmFyaWVzICAgICAgICAgICAgICAgICA6ICR7bmxfY3ZfYnVpbGRfb3B0aW1pemVkfQorICBCdWlsZCBjb3ZlcmFnZSBsaWJyYXJpZXMgICAgICAgICAgICAgICAgICA6ICR7bmxfY3ZfYnVpbGRfY292ZXJhZ2V9CisgIEJ1aWxkIGNvdmVyYWdlIHJlcG9ydHMgICAgICAgICAgICAgICAgICAgIDogJHtubF9jdl9idWlsZF9jb3ZlcmFnZV9yZXBvcnRzfQorICBMY292ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7TENPVjotLX0KKyAgR2VuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0dFTkhUTUw6LS19CisgIEJ1aWxkIHRlc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtubF9jdl9idWlsZF90ZXN0c30KKyAgUHJlZml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke3ByZWZpeH0KKyAgU2hhZG93IGRpcmVjdG9yeSBwcm9ncmFtICAgICAgICAgICAgICAgICAgOiAke0xORElSfQorICBEb2N1bWVudGF0aW9uIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICA6ICR7bmxfY3ZfYnVpbGRfZG9jc30KKyAgRG94eWdlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0RPWFlHRU46LS19CisgIEdyYXBoVml6IGRvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtET1Q6LS19CisgIFBFUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtQRVJMOi0tfQorICBDIFByZXByb2Nlc3NvciAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7Q1BQfQorICBDIENvbXBpbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7Q0N9CisgIEMrKyBQcmVwcm9jZXNzb3IgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDWFhDUFB9CisgIEMrKyBDb21waWxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDWFh9CisgIEFyY2hpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtBUn0KKyAgQXJjaGl2ZSBJbmRleGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1JBTkxJQn0KKyAgU3ltYm9sIFN0cmlwcGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1NUUklQfQorICBPYmplY3QgQ29waWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7T0JKQ09QWX0KKyAgQyBQcmVwcm9jZXNzb3IgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgOiAke0NQUEZMQUdTOi0tfQorICBDIENvbXBpbGUgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7Q0ZMQUdTOi0tfQorICBDKysgQ29tcGlsZSBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7Q1hYRkxBR1M6LS19CisgIExpbmsgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtMREZMQUdTOi0tfQorICBMaW5rIGxpYnJhcmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7TElCU30KKworXSkKKworCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vc2NyaXB0cy9ib290c3RyYXAgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3NjcmlwdHMvYm9vdHN0cmFwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVjNzEwMDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3NjcmlwdHMvYm9vdHN0cmFwCkBAIC0wLDAgKzEsMjg0IEBACisjIS9iaW4vc2gKKworIworIyAgICBDb3B5cmlnaHQgMjAxNC0yMDE3IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgYSBjb252ZW5pZW5jZSBzY3JpcHQgdGhhdCB3aWxsIGJvb3RzdHJhcCB0aGUgR05VCisjICAgICAgYXV0b3Rvb2xzIHN5c3RlbSBmb3IgYSBwcm9qZWN0IGFmdGVyIGFueSBidWlsZCBzeXN0ZW0gY2hhbmdlcy4KKyMKKworIworIyB1c2FnZQorIworIyBEaXNwbGF5IHByb2dyYW0gdXNhZ2UuCisjCit1c2FnZSgpIHsKKyAgICBuYW1lPWBiYXNlbmFtZSAkMGAKKworICAgIGVjaG8gIlVzYWdlOiAke25hbWV9IFsgb3B0aW9ucyBdIFsgLXcgPHdoYXQ+IF0iCisKKyAgICBpZiBbICQxIC1uZSAwIF07IHRoZW4KKyAgICAgICAgZWNobyAiVHJ5ICcke25hbWV9IC1oJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgZmkKKworICAgIGlmIFsgJDEgLW5lIDEgXTsgdGhlbgorICAgICAgICBlY2hvICIiCisgICAgICAgIGVjaG8gIiAgLWgsIC0taGVscCAgICAgICBQcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdC4iCisgICAgICAgIGVjaG8gIiAgLUkgRElSICAgICAgICAgICBTcGVjaWZ5IGRpcmVjdG9yeSBESVIgYXMgdGhlIHJvb3Qgb2YgdGhlICIKKyAgICAgICAgZWNobyAiICAgICAgICAgICAgICAgICAgIG5sYnVpbGQtYXV0b3Rvb2xzIHJlcG9zaXRvcnkuIgorICAgICAgICBlY2hvICIgIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZWx5IHJlcG9ydCBib290c3RyYXAgcHJvZ3Jlc3MuIgorICAgICAgICBlY2hvICIgIC13LCAtLXdoYXQgV0hBVCAgU3BlY2lmeSB3aGF0IHBhcnQgb2YgdGhlIHBhY2thZ2Ugc2hvdWxkIGJlICIKKyAgICAgICAgZWNobyAiICAgICAgICAgICAgICAgICAgIGJvb3RzdHJhcHBlZDogYWxsLCBjb25maWcsIG1ha2UsIG9yIG5vbmUgIgorICAgICAgICBlY2hvICIgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQ6IGFsbCkuIgorICAgICAgICBlY2hvICIiCisgICAgZmkKKworICAgIGV4aXQgJDEKK30KKworIworIyByZW1vdmV0bXAKKyMKKyMgUmVtb3ZlIHRlbXBvcmFyeSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdXNlZCBkdXJpbmcgdGhlIHJ1biBvZiB0aGlzCisjIHNjcmlwdC4KKyMKK3JlbW92ZXRtcCgpIHsKKyAgICBpZiBbIC1uICIke0xJQlRPT0xJWkV9IiAgXSAmJiBbICIke0xJQlRPT0xJWkV9IiA9ICIke0JPT1RTVFJBUF9UTVBESVJ9L2xpYnRvb2xpemUiIF07IHRoZW4KKyAgICAgICAgcm0gLWYgIiR7TElCVE9PTElaRX0iCisgICAgZmkKKworICAgIGlmIFsgLW4gIiR7QVVUT000VEVfQ0ZHfSIgXTsgdGhlbgorICAgICAgICBybSAtZiAiJHtBVVRPTTRURV9DRkd9IgorICAgIGZpCisKKyAgICBybSAtciAtZiAiJHtCT09UU1RSQVBfVE1QRElSfSIKK30KKword2hhdD0iYWxsIgordmVyYm9zZT0KK25sYnVpbGRfYXV0b3Rvb2xzX2Rpcj0KKworIyBQYXJzZSBvdXQgYW55IGNvbW1hbmQgbGluZSBvcHRpb25zCisKK3doaWxlIFsgJHsjfSAtZ3QgMCBdOyBkbworICAgIGNhc2UgJHsxfSBpbgorICAgIC1ofC0taGVscCkKKyAgICAgICAgdXNhZ2UgMAorICAgICAgICA7OworCisgICAgLUkpCisgICAgICAgIG5sYnVpbGRfYXV0b3Rvb2xzX2Rpcj0iJHsyfSIKKyAgICAgICAgc2hpZnQgMgorICAgICAgICA7OworCisgICAgLXZ8LS12ZXJib3NlKQorICAgICAgICB2ZXJib3NlPSItLXZlcmJvc2UiCisgICAgICAgIHNoaWZ0IDEKKyAgICAgICAgOzsKKworICAgIC13fC0td2hhdCkKKyAgICAgICAgY2FzZSAiJHsyfSIgaW4KKyAgICAgICAgYWxsfG1ha2UqfGNvbmYqfG5vbmUpCisgICAgICAgICAgICB3aGF0PSIkezJ9IgorICAgICAgICAgICAgc2hpZnQgMgorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorCSAgICBlY2hvICJVbmtub3duIHdoYXQgdmFsdWUgJyR7Mn0nLiIKKyAgICAgICAgICAgIHVzYWdlIDEKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgKikKKyAgICAgICAgdXNhZ2UgMQorICAgICAgICA7OworCisgICAgZXNhYworZG9uZQorCisjIENoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgbmxidWlsZC1hdXRvdG9vbHMgZGlyZWN0b3J5CisjIGlzIHNhbmUuCisKK2lmIFsgLXogIiR7bmxidWlsZF9hdXRvdG9vbHNfZGlyfSIgXTsgdGhlbgorICAgIGVjaG8gIiQwOiBObyAtSSBvcHRpb24gc3BlY2lmaWVkLiBQbGVhc2UgcHJvdmlkZSB0aGUgbG9jYXRpb24gb2YgdGhlIG5sYnVpbGQtYXV0b3Rvb2xzIGRpcmVjdG9yeS4iCisgICAgZXhpdCAxCisKK2VsaWYgWyAhIC1kICIke25sYnVpbGRfYXV0b3Rvb2xzX2Rpcn0iIF07IHRoZW4KKyAgICBlY2hvICIkMDogTm8gc3VjaCBkaXJlY3Rvcnk6ICR7bmxidWlsZF9hdXRvdG9vbHNfZGlyfS4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBwYXRoIHRvIHRoZSBubGJ1aWxkLWF1dG90b29scyBkaXJlY3RvcnkuIgorICAgIGV4aXQgMQorCitmaQorCisjIEVzdGFibGlzaCBzb21lIGtleSBkaXJlY3RvcmllcworCitzcmNkaXI9YGRpcm5hbWUgJHswfWAKK2Fic19zcmNkaXI9YHB3ZGAKK2Fic190b3Bfc3JjZGlyPSIke2Fic19zcmNkaXJ9IgorCithYnNfdG9wX2hvc3RkaXI9IiR7bmxidWlsZF9hdXRvdG9vbHNfZGlyfS90b29scy9ob3N0IgorCisjIEZpZ3VyZSBvdXQgd2hhdCBzb3J0IG9mIGJ1aWxkIGhvc3Qgd2UgYXJlIHJ1bm5pbmcgb24sIHN0cmlwcGluZyBvZmYKKyMgYW55IHRyYWlsaW5nIHZlcnNpb24gbnVtYmVyIGluZm9ybWF0aW9uIHR5cGljYWxseSBpbmNsdWRlZCBvbiBEYXJ3aW4KKyMgLyBNYWMgT1MgWC4KKworaG9zdD1gJHtubGJ1aWxkX2F1dG90b29sc19kaXJ9L2F1dG9jb25mL2NvbmZpZy5ndWVzcyB8IHNlZCAtZSAncy9bWzpkaWdpdDpdLl0qJC8vZydgCisKKyMgSWYgcG9zc2libGUsIGF0dGVtcHQgdG8gYmUgc2VsZi1zdWZmaWNpZW50LCByZWx5aW5nIG9uIEdOVSBhdXRvdG9vbHMKKyMgZXhlY3V0YWJsZXMgaW5zdGFsbGVkIGFsb25nIHdpdGggdGhlIFNESyBpdHNlbGYuCisKK2lmIFsgLWQgIiR7YWJzX3RvcF9ob3N0ZGlyfS8ke2hvc3R9L2JpbiIgXTsgdGhlbgorICAgIGV4cG9ydCBQQVRIPSIke2Fic190b3BfaG9zdGRpcn0vJHtob3N0fS9iaW46JHtQQVRIfSIKK2ZpCisKK2lmIFsgLWQgIiR7YWJzX3RvcF9ob3N0ZGlyfS9iaW4iIF07IHRoZW4KKyAgICBleHBvcnQgUEFUSD0iJHthYnNfdG9wX2hvc3RkaXJ9L2Jpbjoke1BBVEh9IgorZmkKKworZXhwb3J0IEFDTE9DQUw9YHdoaWNoIGFjbG9jYWxgCitleHBvcnQgQVVUT0NPTkY9ImB3aGljaCBhdXRvY29uZmAiCitleHBvcnQgQVVUT0hFQURFUj0iYHdoaWNoIGF1dG9oZWFkZXJgIgorZXhwb3J0IEFVVE9NNFRFPSJgd2hpY2ggYXV0b200dGVgIgorZXhwb3J0IEFVVE9NQUtFPSJgd2hpY2ggYXV0b21ha2VgIgorZXhwb3J0IExJQlRPT0xJWkU9ImB3aGljaCBsaWJ0b29saXplIHx8IHdoaWNoIGdsaWJ0b29saXplYCIKK2V4cG9ydCBNND1gd2hpY2ggbTRgCisKKyMgRXN0YWJsaXNoLCBpZiBuZWNlc3NhcnksIHNvbWUgU0RLLXNwZWNpZmljIGRpcmVjdG9yaWVzIG5lZWRlZCB0bworIyBvdmVycmlkZSB2YXJpb3VzIHBhdGhzIGluIEdOVSBhdXRvdG9vbHMgdGhhdCBvdGhlcndpc2UgZXhwZWN0IHRvIGJlCisjIGFic29sdXRlIChlLmcuIC91c3Ivc2hhcmUsIGV0Yy4pLgorCitpZiBbIC1kICIke2Fic190b3BfaG9zdGRpcn0vc2hhcmUiIF07IHRoZW4KKyAgICBpZiBbIC1kICIke2Fic190b3BfaG9zdGRpcn0vc2hhcmUvYXV0b2NvbmYiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IEFDX01BQ1JPRElSPSIke2Fic190b3BfaG9zdGRpcn0vc2hhcmUvYXV0b2NvbmYiCisKKyAgICAgICAgZXhwb3J0IGF1dG9tNHRlX3BlcmxsaWJkaXI9IiR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hdXRvY29uZiIKKyAgICBmaQorCisgICAgaWYgWyAtZCAiJHthYnNfdG9wX2hvc3RkaXJ9L3NoYXJlL2F1dG9tYWtlLTEuMTQiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFBFUkw1TElCPSIke2Fic190b3BfaG9zdGRpcn0vc2hhcmUvYXV0b21ha2UtMS4xNDoke1BFUkw1TElCfSIKKworCW1ha2VfYWN0aW9uX29wdGlvbnM9Ii0tbGliZGlyICR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hdXRvbWFrZS0xLjE0IgorICAgIGZpCisKKyAgICBpZiBbIC1kICIke2Fic190b3BfaG9zdGRpcn0vc2hhcmUvYWNsb2NhbC0xLjE0IiBdOyB0aGVuCisgICAgICAgIGxvY2FsX2FjdGlvbl9vcHRpb25zPSItLWF1dG9tYWtlLWFjZGlyPSR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hY2xvY2FsLTEuMTQgJHtsb2NhbF9hY3Rpb25fb3B0aW9uc30iCisgICAgZmkKKworICAgIGlmIFsgLWQgIiR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hY2xvY2FsIiBdOyB0aGVuCisgICAgICAgIGxvY2FsX2FjdGlvbl9vcHRpb25zPSItLXN5c3RlbS1hY2Rpcj0ke2Fic190b3BfaG9zdGRpcn0vc2hhcmUvYWNsb2NhbCAke2xvY2FsX2FjdGlvbl9vcHRpb25zfSIKKyAgICBmaQorZmkKKworIyBCb3RoIGF1dG9tNHRlLmNmZyBhbmQgbGlidG9vbGl6ZSwgYXMgaW5zdGFsbGVkIGZyb20gc291cmNlLCB3YW50IHRvCisjIHVzZSBhYnNvbHV0ZSBmaWxlIHN5c3RlbSBwYXRocyB0aGF0IGNhbm5vdCBiZQorIyBvdmVycmlkZGVuLiBDb25zZXF1ZW50bHksIHdlIGNyZWF0ZSB0ZW1wb3JhcnksIGxvY2FsIHZlcnNpb25zIG9mCisjIHRoZXNlLCBwYXRjaGVkIHVwIHdpdGggU0RLLXNwZWNpZmljIHBhdGhzLgorCitCT09UU1RSQVBfVE1QRElSPSJgbWt0ZW1wIC1kIC90bXAvdG1wLmJvb3RzdHJhcFhYWFhYWGAiCisKK3RyYXAgInJlbW92ZXRtcCIgMSAyIDMgOSAxNQorCisjCisjIEdlbmVyYXRlIGFueSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIHBhdGNoZWQgYXQgcnVuIHRpbWUKKyMgd2l0aCB0aGUgbG9jYXRpb24gb2YgdGhlIFNESyB0cmVlLCBpbmNsdWRpbmc6CisjCisjICAgLSAgVGhlIGF1dG9tNHRlIGNvbmZpZ3VyYXRpb24gZmlsZQorIyAgIC0gIFRoZSBsaWJ0b29saXplIGV4ZWN1dGFibGUgc2NyaXB0CisjCisKK2lmIFsgLXIgIiR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hdXRvY29uZi9hdXRvbTR0ZS5jZmciIF07IHRoZW4KKyAgICBleHBvcnQgQVVUT000VEVfQ0ZHPSIke0JPT1RTVFJBUF9UTVBESVJ9L2F1dG9tNHRlLmNmZyIKKworICAgIHNlZCAtZSAicywvL3NoYXJlL2F1dG9jb25mLCR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hdXRvY29uZixnIiA8ICIke2Fic190b3BfaG9zdGRpcn0vc2hhcmUvYXV0b2NvbmYvYXV0b200dGUuY2ZnIiA+ICIke0FVVE9NNFRFX0NGR30iCitmaQorCitpZiBbIC1yICIke2Fic190b3BfaG9zdGRpcn0vJHtob3N0fS9iaW4vbGlidG9vbGl6ZSIgXTsgdGhlbgorICAgIGV4cG9ydCBMSUJUT09MSVpFPSIke0JPT1RTVFJBUF9UTVBESVJ9L2xpYnRvb2xpemUiCisKKyAgICBzZWQgLWUgInMsLy9zaGFyZS9saWJ0b29sLCR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9saWJ0b29sLGciIC1lICJzLC8vc2hhcmUvYWNsb2NhbCwke2Fic190b3BfaG9zdGRpcn0vc2hhcmUvYWNsb2NhbCxnIiA8ICIke2Fic190b3BfaG9zdGRpcn0vJHtob3N0fS9iaW4vbGlidG9vbGl6ZSIgPiAiJHtMSUJUT09MSVpFfSIKKworICAgIGNobW9kIDc3NSAiJHtMSUJUT09MSVpFfSIKK2ZpCisKK2lmIFsgLW4gIiR7dmVyYm9zZX0iIF07IHRoZW4KKyAgICBlY2hvIFBBVEg9IiR7UEFUSH0iCisKKyAgICBlY2hvIEFDTE9DQUw9IiR7QUNMT0NBTH0iCisgICAgZWNobyBBVVRPQ09ORj0iJHtBVVRPQ09ORn0iCisgICAgZWNobyBBVVRPSEVBREVSPSIke0FVVE9IRUFERVJ9IgorICAgIGVjaG8gQVVUT000VEU9IiR7QVVUT000VEV9IgorICAgIGVjaG8gQVVUT01BS0U9IiR7QVVUT01BS0V9IgorICAgIGVjaG8gTElCVE9PTElaRT0iJHtMSUJUT09MSVpFfSIKKyAgICBlY2hvIE00PSIke000fSIKKworICAgIGVjaG8gQUNfTUFDUk9ESVI9IiR7QUNfTUFDUk9ESVJ9IgorICAgIGVjaG8gQVVUT000VEVfQ0ZHPSIke0FVVE9NNFRFX0NGR30iCisgICAgZWNobyBQRVJMNUxJQj0iJHtQRVJMNUxJQn0iCisgICAgZWNobyBhdXRvbTR0ZV9wZXJsbGliZGlyPSIke2F1dG9tNHRlX3BlcmxsaWJkaXJ9IgorCisgICAgZWNobyBsb2NhbF9hY3Rpb25fb3B0aW9ucz0iJHtsb2NhbF9hY3Rpb25fb3B0aW9uc30iCisgICAgZWNobyBtYWtlX2FjdGlvbl9vcHRpb25zPSIke21ha2VfYWN0aW9uX29wdGlvbnN9IgorZmkKKworIyBTZXQgdXAgdGhlIGRlZmF1bHQgYWN0aW9ucyBmb3IgZWFjaCBib290c3RyYXAgc3RhZ2UuCisKK2xvY2FsX2FjdGlvbj0iJHtBQ0xPQ0FMfSAke3ZlcmJvc2V9ICR7bG9jYWxfYWN0aW9uX29wdGlvbnN9IgoraGVhZGVyX2FjdGlvbj0iJHtBVVRPSEVBREVSfSAke3ZlcmJvc2V9IgordG9vbF9hY3Rpb249IiR7TElCVE9PTElaRX0gJHt2ZXJib3NlfSAtLWF1dG9tYWtlIC0tY29weSAtLWZvcmNlIgorbWFrZV9hY3Rpb249IiR7QVVUT01BS0V9ICR7dmVyYm9zZX0gJHttYWtlX2FjdGlvbl9vcHRpb25zfSAtLWFkZC1taXNzaW5nIC0tY29weSIKK2NvbmZpZ19hY3Rpb249IiR7QVVUT0NPTkZ9ICR7dmVyYm9zZX0iCisKKyMgRGV0ZXJtaW5lIHdoYXQgbmVlZHMgdG8gYmUgc2hvcnQtY2lyY3VpdGVkIGJhc2VkIG9uIHRoZQorIyB1c2VyLXNwZWNpZmllZCAid2hhdCIuCisKK2Nhc2UgIiR7d2hhdH0iIGluCisKKyAgICBhbGwpCisgICAgICAgIDs7CisKKyAgICBjb25mKikKKyAgICAgICAgbG9jYWxfYWN0aW9uPXRydWUKKyAgICAgICAgaGVhZGVyX2FjdGlvbj10cnVlCisgICAgICAgIHRvb2xfYWN0aW9uPXRydWUKKyAgICAgICAgbWFrZV9hY3Rpb249dHJ1ZQorICAgICAgICA7OworCisgICAgbWFrZSopCisgICAgICAgIGxvY2FsX2FjdGlvbj10cnVlCisgICAgICAgIGhlYWRlcl9hY3Rpb249dHJ1ZQorICAgICAgICBjb25maWdfYWN0aW9uPXRydWUKKyAgICAgICAgOzsKKworICAgIG5vbmUpCisgICAgICAgIGxvY2FsX2FjdGlvbj10cnVlCisgICAgICAgIGhlYWRlcl9hY3Rpb249dHJ1ZQorICAgICAgICB0b29sX2FjdGlvbj10cnVlCisgICAgICAgIG1ha2VfYWN0aW9uPXRydWUKKyAgICAgICAgY29uZmlnX2FjdGlvbj10cnVlCisgICAgICAgIDs7CisKK2VzYWMKKworIyBCb290c3RyYXAgdGhlIHBhY2thZ2UuCisKKyR7bG9jYWxfYWN0aW9ufSAmJiAke3Rvb2xfYWN0aW9ufSAmJiAke2hlYWRlcl9hY3Rpb259ICYmICR7bWFrZV9hY3Rpb259ICYmICR7Y29uZmlnX2FjdGlvbn0KKworIyBDbGVhbiB1cCBhbnkgdGVtcG9yYXJ5IGZpbGVzIGNyZWF0ZWQuCisKK3JlbW92ZXRtcApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9zY3JpcHRzL2Jvb3RzdHJhcC1jb25maWd1cmUgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3NjcmlwdHMvYm9vdHN0cmFwLWNvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNzQ1ZTFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9zY3JpcHRzL2Jvb3RzdHJhcC1jb25maWd1cmUKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTQtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSBzY3JpcHQgd2hpY2gsIHdoZW4gcnVuIGZyb20gYSBwcm9qZWN0CisjICAgICAgYnVpbGQgZGlyZWN0b3J5IChlaXRoZXIgZGlzcGFyYXRlIG9yIGNvbG9jYXRlZCB3aXRoIHRoZQorIyAgICAgIHNvdXJjZSksIHdpbGwgYXR0ZW1wdCB0byBjbGVhbiB0aGUgYnVpbGQgZGlyZWN0b3J5LCByZWJvb3RzdHJhcAorIyAgICAgIHRoZSBwYWNrYWdlLCBhbmQgdGhlbiByZXJ1biB0aGUgY29uZmlndXJhdGlvbiBzY3JpcHQgZm9yIHRoZQorIyAgICAgIHBhY2thZ2Ugd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzLgorIworIyAgICAgIFRoaXMgc2NyaXB0IGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiB5b3UgYXJlIGNoYW5naW5nIHRoZQorIyAgICAgIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGFuZCB0ZXN0aW5nIHRob3NlIGNoYW5nZXMuCisjCisKK3NyY2Rpcj1gZGlybmFtZSAkezB9YAorYnVpbGRkaXI9LgorCisjIEJyaW5nIHRoZSBwYWNrYWdlIGJ1aWxkIGJhY2sgdG8gYSBwcmlzdGluZSBzdGF0ZS4KKworaWYgWyAtZiBjb25maWcuc3RhdHVzIF07IHRoZW4KKwltYWtlIG1haW50YWluZXItY2xlYW4KK2ZpCisKKyMgQ2hhbmdlIGRpcmVjdG9yaWVzIHRvIHRoZSBwYWNrYWdlIHNvdXJjZSBhbmQgcmVib290c3RyYXAgdGhlIHBhY2thZ2UuCisKK3B1c2hkICR7c3JjZGlyfQorCisuL2Jvb3RzdHJhcAorYm9vdHN0cmFwX3N0YXR1cz0kPworCitwb3BkCisKKyMgSWYgdGhlIHBhY2thZ2Ugd2FzIHN1Y2Nlc3NmdWxseSBib290c3RyYXBwZWQsIGNvbmZpZ3VyZSBpdC4KKworaWYgWyAke2Jvb3RzdHJhcF9zdGF0dXN9IC1lcSAwIF07IHRoZW4KKyAgICAke3NyY2Rpcn0vY29uZmlndXJlICQqCitlbHNlCisgICBleGl0ICR7Ym9vdHN0cmFwX3N0YXR1c30KK2ZpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3NjcmlwdHMvbWtza2VsZXRvbiBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vc2NyaXB0cy9ta3NrZWxldG9uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczNDkwNDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3NjcmlwdHMvbWtza2VsZXRvbgpAQCAtMCwwICsxLDIzNyBAQAorIyEvYmluL2Jhc2gKKworIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgYSBjb252ZW5pZW5jZSBzY3JpcHQgdGhhdCB3aWxsIGNyZWF0ZSBhIHNrZWxldG9uCisjICAgICAgYnVpbGQgbGF5b3V0IHVzaW5nIHRoZSBubGJ1aWxkLWF1dG90b29scyBwYWNrYWdlLgorIworCitZRUFSPWBkYXRlICIrJVkiYAorTkFNRT0iIgorREVTQ1JJUFRJT049IiIKK0RJUj0iIgorVkVSU0lPTj0iMS4wIgordmVyYm9zZT0xCisKKyMKKyMgdXNhZ2UKKyMKKyMgRGlzcGxheSBwcm9ncmFtIHVzYWdlLgorIwordXNhZ2UoKSB7CisgICAgbmFtZT1gYmFzZW5hbWUgJDBgCisKKyAgICBlY2hvICJVc2FnZTogJHtuYW1lfSBbIG9wdGlvbnMgXSIKKworICAgIGlmIFsgJDEgLW5lIDAgXTsgdGhlbgorICAgICAgICBlY2hvICJUcnkgJyR7bmFtZX0gLWgnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICBmaQorCisgICAgaWYgWyAkMSAtbmUgMSBdOyB0aGVuCisgICAgICAgIGVjaG8gIiIKKyAgICAgICAgZWNobyAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgUHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQuIgorICAgICAgICBlY2hvICIgIC1JIERJUiAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5IGRpcmVjdG9yeSBESVIgYXMgdGhlIHJvb3Qgb2YgdGhlICIKKyAgICAgICAgZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxidWlsZC1hdXRvdG9vbHMgcmVwb3NpdG9yeS4iCisgICAgICAgIGVjaG8gIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgIFZlcmJvc2VseSByZXBvcnQgbWtza2VsZXRvbiBwcm9ncmVzcyAoZGVmYXVsdDogeWVzKS4iCisgICAgICAgIGVjaG8gIiAgLS1wYWNrYWdlLWRlc2NyaXB0aW9uIERFU0MgIFNwZWNpZnkgZGVzY3JpcHRpb24gREVTQyBhcyBhIHRoZSAiCisgICAgICAgIGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgZGVzY3JpcHRpb24uIgorICAgICAgICBlY2hvICIgIC0tcGFja2FnZS1uYW1lIE5BTUUgICAgICAgICBTcGVjaWZ5IG5hbWUgTkFNRSBhcyB0aGUgcGFja2FnZSBuYW1lLiIKKyAgICAgICAgZWNobyAiICAtLXBhY2thZ2UtdmVyc2lvbiBWRVJTSU9OICAgU3BlY2lmeSB2ZXJzaW9uIFZFUlNJT04gYXMgdGhlIGluaXRpYWwgIgorICAgICAgICBlY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIGZvciB0aGUgcGFja2FnZSAoZGVmYXVsdDogJHtWRVJTSU9OfSkuIgorICAgICAgICBlY2hvICIgIC0tcGFja2FnZS15ZWFyIFlFQVIgICAgICAgICBTcGVjaWZ5IHllYXIgWUVBUiBhcyB0aGUgY3JlYXRpb24gIgorICAgICAgICBlY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZWFyIGZvciB0aGUgcGFja2FnZSAoZGVmYXVsdDogJHtZRUFSfSkuIgorICAgICAgICBlY2hvICIgIC1xLCAtLXF1aWV0ICAgICAgICAgICAgICAgICBEbyBub3QgdmVyYm9zZWx5IHJlcG9ydCBta3NrZWxldG9uIHByb2dyZXNzIChkZWZhdWx0OiBubykuIgorCisgICAgICAgIGVjaG8gIiIKKyAgICBmaQorCisgICAgZXhpdCAkMQorfQorCisjCisjIGxvZworIworbG9nKCkgeworICAgIGlmIFsgISAteiAke3ZlcmJvc2V9IF0gJiYgWyAke3ZlcmJvc2V9IC1lcSAxIF07IHRoZW4KKyAgICAgICAgZWNobyAkKgorICAgIGZpCit9CisKK3RyYW5zZm9ybSgpIHsKKyAgICBsb2NhbCBmcm9tPSIkezF9IgorICAgIGxvY2FsIHRvPSIkezJ9IgorCisgICAgc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtZSAicyxcQE5MQlVJTERfQVVUT1RPT0xTX1NURU1cQCwke0RJUn0sZyIgICAgICAgIFwKKyAgICAgICAgLWUgInMsXEBQQUNLQUdFX0RFU0NSSVBUSU9OXEAsJHtERVNDUklQVElPTn0sZyIgICBcCisgICAgICAgIC1lICJzLFxAUEFDS0FHRV9TSE9SVF9MT1dFUlxALCR7TE9XRVJ9LGciICAgICAgICAgXAorICAgICAgICAtZSAicyxcQFBBQ0tBR0VfU0hPUlRfVVBQRVJcQCwke1VQUEVSfSxnIiAgICAgICAgIFwKKyAgICAgICAgLWUgInMsXEBQQUNLQUdFX1lFQVJcQCwke1lFQVJ9LGciICAgICAgICAgICAgICAgICBcCisgICAgICAgIDwgIiR7ZnJvbX0iID4gIiR7dG99IgorfQorCitwb3B1bGF0ZSgpIHsKKyAgICBsb2NhbCBubGJ1aWxkPSIkezF9IgorICAgIGxvY2FsIHBlcm09JHsyfQorICAgIGxvY2FsIGZpbGU9IiR7M30iCisgICAgbG9jYWwgZGlyZWN0b3J5PSIkezR9IgorICAgIGxvY2FsIHN0ZW09IiR7ZmlsZSUuKn0iCisgICAgbG9jYWwgZXh0ZW5zaW9uPSIke2ZpbGUjIyoufSIKKyAgICBsb2NhbCBmcm9tCisgICAgbG9jYWwgdG8KKworICAgIGlmIFsgLXIgIiR7bmxidWlsZH0vZXhhbXBsZXMvJHtmaWxlfSIgXTsgdGhlbgorICAgICAgICBmcm9tPSIke25sYnVpbGR9L2V4YW1wbGVzLyR7ZmlsZX0iCisKKyAgICBlbGlmIFsgLXIgIiR7bmxidWlsZH0vZXhhbXBsZXMvJHtzdGVtfS0ke2RpcmVjdG9yeX0uJHtleHRlbnNpb259IiBdOyB0aGVuCisgICAgICAgIGZyb209IiR7bmxidWlsZH0vZXhhbXBsZXMvJHtzdGVtfS0ke2RpcmVjdG9yeX0uJHtleHRlbnNpb259IgorCisgICAgZWxpZiBbICIke2RpcmVjdG9yeX0iID0gIi4iIF0gJiYgWyAtciAiJHtubGJ1aWxkfS9leGFtcGxlcy8ke3N0ZW19LXRvcGxldmVsLiR7ZXh0ZW5zaW9ufSIgXTsgdGhlbgorICAgICAgICBmcm9tPSIke25sYnVpbGR9L2V4YW1wbGVzLyR7c3RlbX0tdG9wbGV2ZWwuJHtleHRlbnNpb259IgorCisgICAgZWxzZQorICAgICAgICBlY2hvICJDYW5ub3QgZmluZCBhbiBleGFtcGxlIGZpbGUgXCIke2ZpbGV9XCIgZm9yIGRpcmVjdG9yeSBcIiR7ZGlyZWN0b3J5fVwiLiIKKyAgICAgICAgZXhpdCAxCisKKyAgICBmaQorCisgICAgdG89IiR7ZGlyZWN0b3J5fS8ke2ZpbGV9IgorCisgICAgbG9nICJDcmVhdGluZyBcIiR7dG99XCIuLi4iCisKKyAgICB0cmFuc2Zvcm0gIiR7ZnJvbX0iICIke3RvfSIKKworICAgIGlmIFsgJD8gPSAwIF07IHRoZW4KKyAgICAgICAgY2htb2QgJHtwZXJtfSAiJHt0b30iCisgICAgZmkKK30KKworIworIyBsaW5rCisjCitsaW5rKCkgeworICAgIGxvY2FsIG5sYnVpbGQ9IiR7MX0iCisgICAgbG9jYWwgcGVybT0kezJ9CisgICAgbG9jYWwgc291cmNlPSIkezN9IgorICAgIGxvY2FsIGRpcmVjdG9yeT0iJHs0fSIKKyAgICBsb2NhbCBmcm9tPSIke25sYnVpbGR9L3NjcmlwdHMvJHtzb3VyY2V9IgorICAgIGxvY2FsIHRvPSIke2RpcmVjdG9yeX0vJHtzb3VyY2V9IgorCisgICAgbG9nICJDcmVhdGluZyBcIiR7dG99XCIuLi4iCisKKyAgICBsbiAtc2YgIiR7ZnJvbX0iICIke3RvfSIKK30KKworIyBQYXJzZSBvdXQgYW55IGNvbW1hbmQgbGluZSBvcHRpb25zCisKK3doaWxlIFsgJHsjfSAtZ3QgMCBdOyBkbworICAgIGlmIFsgJHsxfSA9PSAiLWgiIF0gfHwgWyAkezF9ID09ICItLWhlbHAiIF07IHRoZW4KKyAgICAgICAgdXNhZ2UgMAorCisgICAgZWxpZiBbICR7MX0gPT0gIi1JIiBdOyB0aGVuCisgICAgICAgIERJUj0iJHsyfSIKKyAgICAgICAgc2hpZnQgMgorCisgICAgZWxpZiBbICR7MX0gPT0gIi0tcGFja2FnZS1kZXNjcmlwdGlvbiIgXTsgdGhlbgorICAgICAgICBERVNDUklQVElPTj0iJHsyfSIKKyAgICAgICAgc2hpZnQgMgorCisgICAgZWxpZiBbICR7MX0gPT0gIi0tcGFja2FnZS1uYW1lIiBdOyB0aGVuCisgICAgICAgIE5BTUU9IiR7Mn0iCisgICAgICAgIHNoaWZ0IDIKKworICAgICAgICBVUFBFUj0iYGVjaG8gJHtOQU1FfSB8IHRyICdbWzpsb3dlcjpdXScgJ1tbOnVwcGVyOl1dJ2AiCisgICAgICAgIExPV0VSPSJgZWNobyAke05BTUV9IHwgdHIgJ1tbOnVwcGVyOl1dJyAnW1s6bG93ZXI6XV0nYCIKKworICAgIGVsaWYgWyAkezF9ID09ICItLXBhY2thZ2UtdmVyc2lvbiIgXTsgdGhlbgorICAgICAgICBWRVJTSU9OPSIkezJ9IgorICAgICAgICBzaGlmdCAyCisKKyAgICBlbGlmIFsgJHsxfSA9PSAiLS1wYWNrYWdlLXllYXIiIF07IHRoZW4KKyAgICAgICAgWUVBUj0iJHsyfSIKKyAgICAgICAgc2hpZnQgMgorCisgICAgZWxpZiBbICR7MX0gPT0gIi1xIiBdIHx8IFsgJHsxfSA9PSAiLS1xdWlldCIgXTsgdGhlbgorICAgICAgICB2ZXJib3NlPTAKKyAgICAgICAgc2hpZnQgMQorCisgICAgZWxpZiBbICR7MX0gPT0gIi12IiBdIHx8IFsgJHsxfSA9PSAiLS12ZXJib3NlIiBdOyB0aGVuCisgICAgICAgIHZlcmJvc2U9MQorICAgICAgICBzaGlmdCAxCisKKyAgICBlbHNlCisgICAgICAgIHVzYWdlIDEKKworICAgIGZpCitkb25lCisKKyMgU2FuaXR5IGNoZWNrIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisKK2lmIFsgLXogIiR7RElSfSIgXTsgdGhlbgorICAgIGVjaG8gIiQwOiBObyAtSSBvcHRpb24gc3BlY2lmaWVkLiBQbGVhc2UgcHJvdmlkZSB0aGUgbG9jYXRpb24gb2YgdGhlIG5sYnVpbGQtYXV0b3Rvb2xzIGRpcmVjdG9yeS4iCisgICAgZXhpdCAxCisKK2ZpCisKK2lmIFsgLXogIiR7REVTQ1JJUFRJT059IiBdOyB0aGVuCisgICAgZWNobyAiJDA6IFBsZWFzZSBwcm92aWRlIGEgcGFja2FnZSBkZXNjcmlwdGlvbiB2aWEgLS1wYWNrYWdlLWRlc2NyaXB0aW9uLiIKKyAgICBleGl0IDEKK2ZpCisKK2lmIFsgLXogIiR7TkFNRX0iIF07IHRoZW4KKyAgICBlY2hvICIkMDogUGxlYXNlIHByb3ZpZGUgYSBwYWNrYWdlIG5hbWUgdmlhIC0tcGFja2FnZS1uYW1lLiIKKyAgICBleGl0IDEKK2ZpCisKK2lmIFsgLXogIiR7VkVSU0lPTn0iIF07IHRoZW4KKyAgICBlY2hvICIkMDogUGxlYXNlIHByb3ZpZGUgYSBwYWNrYWdlIGRlZmF1bHQgdmVyc2lvbiB2aWEgLS1wYWNrYWdlLXZlcnNpb24uIgorICAgIGV4aXQgMQorZmkKKworaWYgWyAteiAiJHtZRUFSfSIgXTsgdGhlbgorICAgIGVjaG8gIiQwOiBQbGVhc2UgcHJvdmlkZSBhIHBhY2thZ2UgY3JlYXRpb24geWVhciB2aWEgLS1wYWNrYWdlLXllYXIuIgorICAgIGV4aXQgMQorZmkKKworIyBDcmVhdGUgdGhlIHNrZWxldG9uIGRpcmVjdG9yaWVzCisKK0RJUlM9ImRvYyB0aGlyZF9wYXJ0eSBpbmNsdWRlIHNyYyB0ZXN0cyIKKworZm9yIGRpciBpbiAke0RJUlN9OyBkbworICAgIGxvZyAiQ3JlYXRpbmcgXCIke2Rpcn1cIi4uLiIKKyAgICBta2RpciAtcCAiJHtkaXJ9IgorZG9uZQorCisjIFBvcHVsYXRlIHRoZSBza2VsZXRvbiBkaXJlY3RvcmllcworCitwb3B1bGF0ZSAiJHtESVJ9IiA2NjQgY29uZmlndXJlLmFjICAgICAgICAuCitwb3B1bGF0ZSAiJHtESVJ9IiA3NzUgYm9vdHN0cmFwICAgICAgICAgICAuCitwb3B1bGF0ZSAiJHtESVJ9IiA2NjQgTWFrZWZpbGUuYW0gICAgICAgICAuCitwb3B1bGF0ZSAiJHtESVJ9IiA2NjQgTWFrZWZpbGUuYW0gICAgICAgICBkb2MKK3BvcHVsYXRlICIke0RJUn0iIDY2NCBEb3h5ZmlsZS5pbiAgICAgICAgIGRvYworcG9wdWxhdGUgIiR7RElSfSIgNjY0IE1ha2VmaWxlLmFtICAgICAgICAgdGhpcmRfcGFydHkgCitwb3B1bGF0ZSAiJHtESVJ9IiA2NjQgTWFrZWZpbGUuYW0gICAgICAgICBzcmMKK3BvcHVsYXRlICIke0RJUn0iIDY2NCBNYWtlZmlsZS5hbSAgICAgICAgIHRlc3RzCitsaW5rICAgICAiJHtESVJ9IiA3NzUgYm9vdHN0cmFwLWNvbmZpZ3VyZSAuCisKKyMgQ3JlYXRlIHRoZSBkZWZhdWx0IHBhY2thZ2UgdmVyc2lvbgorCitsb2cgIkNyZWF0aW5nIGRlZmF1bHQgdmVyc2lvbiAke1ZFUlNJT059Li4uIgorCitlY2hvICIke1ZFUlNJT059IiA+ICIuZGVmYXVsdC12ZXJzaW9uIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9zY3JpcHRzL21rdmVyc2lvbiBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vc2NyaXB0cy9ta3ZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWEwYjlmOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vc2NyaXB0cy9ta3ZlcnNpb24KQEAgLTAsMCArMSwyNDUgQEAKKyMhL2Jpbi9iYXNoCisKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTEtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGF0dGVtcHRzIHRvIGZpbmQgYW5kIGdlbmVyYXRlIGEgcGFja2FnZSB2ZXJzaW9uCisjICAgICAgaW5jbHVkaW5nLCBpZiBuZWNlc3NhcnksIHRoZSBudW1iZXIgb2YgY29tbWl0cyBmcm9tIHRoZSBsYXN0CisjICAgICAgR0lUIHRhZyBhbmQgdGhlIGN1cnJlbnQgR0lUIGhhc2ggY29ycmVzcG9uZGluZyB0byBIRUFEIGZvciB0aGUKKyMgICAgICBjdXJyZW50IGJyYW5jaC4KKyMKKyMgICAgICBUaGlzIGlzIGxhcmdlbHkgY29iYmxlZCB0b2dldGhlciBmcm9tIHNpbWlsYXIgc2NyaXB0cyBpbiBvdGhlcgorIyAgICAgIHBhY2thZ2VzIHRoYXQgYXJlIG1haW50YWluZWQgaW4gR0lUIChsaW51eCwgdS1ib290LCBwYXJ0ZWQsIGV0Yy4pLgorIworIyAgICAgIFRoaXMgY2FuIHByb2R1Y2UgdmVyc2lvbiBpbmZvcm1hdGlvbiBzdWNoIGFzOgorIworIyAgICAgICAgMS4wLjEKKyMgICAgICAgIDEuMC4xLWRpcnR5CisjICAgICAgICAxLjAuMS0wMDAzMi1nYWI1MGRiYgorIyAgICAgICAgMS4wLjEtMDAwMzItZ2FiNTBkYmItZGlydHkKKyMKKworIyBDb25zdGFudHMKKworUk9PVERJUj0ke1BSRUZJWH0vCisKK0JJTkRJUj0ke1JPT1RESVJ9YmluCitEQVRBRElSPSR7Uk9PVERJUn1zaGFyZQorREVWSUNFRElSPSR7Uk9PVERJUn1kZXYKK0NPTkZESVI9JHtST09URElSfWV0YworTElCRElSPSR7Uk9PVERJUn1saWIKK0xJQkVYRUNESVI9JHtST09URElSfWxpYmV4ZWMKK1ZBUkRJUj0ke1JPT1RESVJ9dmFyCitMT0dESVI9JHtWQVJESVJ9L2xvZworTUFORElSPSR7Uk9PVERJUn1tYW4KK1NCSU5ESVI9JHtST09URElSfXNiaW4KKworVVNSRElSPSR7Uk9PVERJUn11c3IKK1VTUkJJTkRJUj0ke1VTUkRJUn0vYmluCitVU1JEQVRBRElSPSR7VVNSRElSfS9zaGFyZQorVVNSTElCRElSPSR7VVNSRElSfS9saWIKK1VTUkxJQkVYRUNESVI9JHtVU1JESVJ9L2xpYmV4ZWMKK1VTUlNCSU5ESVI9JHtVU1JESVJ9L3NiaW4KKworQVdLPSR7VVNSQklORElSfS9hd2sKK0JBU0VOQU1FPSR7VVNSQklORElSfS9iYXNlbmFtZQorQ0FUPSR7QklORElSfS9jYXQKK0VDSE89IiR7QklORElSfS9lY2hvIgorTlVMTD0ke0RFVklDRURJUn0vbnVsbAorUFJJTlRGPSR7VVNSQklORElSfS9wcmludGYKK1JNPSR7QklORElSfS9ybQorU0VEPSR7QklORElSfS9zZWQKKworVkVSU0lPTj0iIgorCisjCisjIHVzYWdlIDxzdGF0dXM+CisjCisjIERlc2NyaXB0aW9uOgorIyAgIFRoaXMgcm91dGluZSBwcmludHMgb3V0IHRoZSBwcm9wZXIgY29tbWFuZCBsaW5lIHVzYWdlIGZvciB0aGlzCisjICAgcHJvZ3JhbSBhbmQgdGhlbiBleGl0cyB3aXRoIHRoZSBzcGVjaWZpZWQgc3RhdHVzLgorIworIyBJbnB1dChzKToKKyMgICBzdGF0dXMgLSBFeGl0IHN0YXR1cyB0byBleGl0IHRoZSBwcm9ncmFtIHdpdGguCisjCisjIFJldHVybnM6CisjICAgVGhpcyBzdWJyb3V0aW5lIGRvZXMgbm90IHJldHVybi4KKyMKK3VzYWdlKCkgeworCWxvY2FsIG5hbWU9YCR7QkFTRU5BTUV9ICR7MH1gCisKKwkke0VDSE99ICJVc2FnZTogJHtuYW1lfSBbb3B0aW9uc10gWyA8cHJvamVjdCByb290PiBdIgorCisJaWYgWyAkezF9IC1uZSAwIF07IHRoZW4KKwkJJHtFQ0hPfSAiVHJ5ICcke25hbWV9IC1oJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisJZmkKKworCWlmIFsgJHsxfSAtbmUgMSBdOyB0aGVuCiske0NBVH0gPDwgRU9GCisgIC1iLCAtLWJ1aWxkLXZlcnNpb249VkVSU0lPTiAgU3BlY2lmeSBWRVJTSU9OIGFzIHRoZSBidWlsZCB2ZXJzaW9uIHRvIGdlbmVyYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgYnVpbGQgaW5mb3JtYXRpb24gYWdhaW5zdC4KKyAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgICBQcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdC4KK0VPRgorCWZpCisKKwlleGl0ICR7MX0KK30KKworIworIyBnaXR2ZXJzaW9uIDxzdHJpbmc+IDxkaXJlY3Rvcnk+IDx2ZXJzaW9uPgorIworIyBEZXNjcmlwdGlvbjoKKyMgICBUaGlzIHJvdXRpbmUgcHJpbnRzIG91dCBhbnkgR0lUIHZlcnNpb24gaW5mb3JtYXRpb24gYXBwZW5kZWQgdG8gdGhlCisjICAgZW5kIG9mIHRoZSBwYWNrYWdlIHZlcnNpb24sIGluY2x1ZGluZyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgZnJvbQorIyAgIHRoZSBsYXN0IEdJVCB0YWcgYW5kIHRoZSBjdXJyZW50IEdJVCBoYXNoIGNvcnJlc3BvbmRpbmcgdG8gSEVBRAorIyAgIGZvciB0aGUgY3VycmVudCBicmFuY2guCisjCisjIElucHV0KHMpOgorIyAgIHN0cmluZyAgICAtIFRoZSBjdXJyZW50IHZlcnNpb24gc3RyaW5nIHdoaWNoIG1heSBiZSBlbXB0eS4KKyMgICBkaXJlY3RvcnkgLSBUaGUgY3VycmVudCBkaXJlY3RvcnkuCisjICAgdmVyc2lvbiAgIC0gVGhlIG9wdGlvbmFsIGN1cnJlbnQgcGFja2FnZSB2ZXJzaW9uLgorIworIyBSZXR1cm5zOgorIyAgIE4vQQorIworZ2l0dmVyc2lvbigpIHsKKwlsb2NhbCBzdHJpbmc9IiR7MX0iCisJbG9jYWwgZGlyPSIkezJ9IgorCWxvY2FsIHZlcnNpb249IiR7M30iCisJbG9jYWwgaGVhZAorCWxvY2FsIGV4YWN0CisJbG9jYWwgZHRhZworCWxvY2FsIGdpdHZlcnNpb24KKworCSMgUmV0cmlldmUgdGhlIHNob3J0ZW5lZCwgdW5pcXVlIEdJVCBoYXNoIGFzc29jaWF0ZWQgd2l0aCB0aGUKKwkjICdIRUFEJyBHSVQgb2JqZWN0CisKKwloZWFkPWB0ZXN0IC1kIC5naXQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0IEhFQUQgMj4gJHtOVUxMfWAKKworCSMgSWYgd2UgZm91bmQgYSBoYXNoLCB3ZSBhcmUgYWN0dWFsbHkgaW4gYSBHSVQgcmVwb3NpdG9yeTsgY29udGludWUuCisKKwlpZiBbIC1uICIke2hlYWR9IiBdOyB0aGVuCisJICAgIAkjIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcG9zaXRpb24gaW4gR0lUIHRoYXQgaXMKKwkgICAgCSMgZXhhY3RseSBhdCBhbiBleGlzdGluZyB0YWcgKGUuZy4gMS4wLjIpLiBJZiB3ZSBhcmUsCisJICAgIAkjIGp1c3QgdXNlIGl0IGFuZCBhZGQgYSBkaXJ0eSBxdWFsaWZpZXIuIE90aGVyd2lzZSwKKwkgICAgCSMgd29yayB0aHJvdWdoIHRoZSBsb2dpYyB0byBkZXRlcm1pbmUgaG93IGZhciBvZmYgdGhlCisJICAgIAkjIHRhZyB0aGUgdHJlZSBpcy4KKworCSAgICAJZXhhY3Q9ImBnaXQgZGVzY3JpYmUgLS1leGFjdC1tYXRjaCAyPiAke05VTEx9YCIKKworCQlpZiBbIC16ICIke2V4YWN0fSIgXSB8fCBbIC1uICIke3ZlcnNpb259IiBdICYmIFsgIiR7dmVyc2lvbn0iICE9ICIke2V4YWN0fSIgXTsgdGhlbgorCQkJZHRhZz0iYGdpdCBkZXNjcmliZSAyPiAke05VTEx9YCIKKworCQkJIyBJZiB3ZSBhcmUgbiBjb21taXRzIGF3YXkgZnJvbSBhIHRhZywgdGhlbgorCQkJIyBwcmludCBuIGFuZCBhIHNob3J0ZW5lZCB2ZXJzaW9uIG9mIHRoZQorCQkJIyBoYXNoLiBPdGhlcndpc2UsIGp1c3QgcHJpbnQgdGhlIGhhc2guCisJCQkjCisJCQkjIElmIHdlIGFyZSBhdCBhbiBleGFjdCB2ZXJzaW9uLCB0aGVuIHRoZXJlCisJCQkjIHdvbid0IGJlIGEgZGVsdGEgb3IgYSBoYXNoLCBqdXN0IHVzZSB0aGUKKwkJCSMgZXhhY3QgdGFnLgorCisJCQlpZiBbIC1uICIke2R0YWd9IiBdOyB0aGVuCisJCQkJaWYgWyAiJHtkdGFnfSIgPT0gIiR7ZXhhY3R9IiBdOyB0aGVuCisJCQkJCWdpdHZlcnNpb249IiR7ZHRhZ30iCisJCQkJZWxzZQorCQkJCQlnaXR2ZXJzaW9uPWAke1BSSU5URn0gIiR7ZHRhZ30iIHwgJHtBV0t9IC1GICctJyAne3ByaW50ZigiJXMtJTA1ZC0lcyIsICQoTkYtMiksJChORi0xKSwkKE5GKSl9JyAyPiAke05VTEx9YAorCQkJCWZpCisKKwkJCWVsc2UKKwkJCQlnaXR2ZXJzaW9uPWAke1BSSU5URn0gImcke2hlYWR9ImAKKworCQkJZmkKKworICAgICAgICAgICAgICAgIGVsc2UKKwkJCWdpdHZlcnNpb249IiR7ZXhhY3R9IgorCisJCWZpCisKKwkJIyBVcGRhdGUgdGhlIGluZGV4IGlmIHdlIGFyZSBpbiBhIHdyaXRhYmxlIGRpcmVjdG9yeQorCQkjIHNvIHRoYXQgd2UgY2FuIHN1Y2Nlc3NmdWxseSBjaGVjayBmb3IgYSBkaXJ0eSAoaGFzCisJCSMgdW5jb21taXR0ZWQgY2hhbmdlcyBvciB1bnJlc29sdmVkIG1lcmdlcykgdHJlZS4KKworCQlpZiBbIC13ICIke2Rpcn0iIF07IHRoZW4KKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC0tdW5tZXJnZWQgPiAke05VTEx9CisJCWZpCisKKwkJIyBOb3cgY2hlY2sgZm9yIHN1Y2ggYSBkaXJ0eSB0cmVlIGFuZCBhZGQgdG8gdGhlICJzdHJpbmciCisJCSMgaWYgd2UgZm91bmQgb25lLgorCisJCWlmIGdpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQgfCByZWFkIGR1bW15OyB0aGVuCisJCSAgICAJaWYgWyAtbiAiJHtnaXR2ZXJzaW9ufSIgXTsgdGhlbgorCQkJCWdpdHZlcnNpb249IiR7Z2l0dmVyc2lvbn0tZGlydHkiCisJCQllbHNlCisJCQkJZ2l0dmVyc2lvbj0iZGlydHkiCisJCQlmaQorICAgIAkJZmkKKworCWVsc2UKKwkJZ2l0dmVyc2lvbj0iJHt2ZXJzaW9ufSIKKworCWZpCisKKwlpZiBbIC1uICIke3N0cmluZ30iIF0gJiYgWyAtbiAiJHtnaXR2ZXJzaW9ufSIgXTsgdGhlbgorCQlzdHJpbmc9IiR7c3RyaW5nfS0ke2dpdHZlcnNpb259IgorCWVsc2UKKwkJc3RyaW5nPSIke2dpdHZlcnNpb259IgorCWZpCisKKwkke1BSSU5URn0gIiR7c3RyaW5nfSIKK30KKworIworIyBNYWluIFByb2dyYW0gQm9keQorIworCit3aGlsZSBbICR7I30gLWd0IDAgXTsgZG8KKyAgICAJaWYgWyAkezE6MDoxfSA9PSAiLSIgXTsgdGhlbgorCQlpZiBbICIkezF9IiA9PSAiLWgiIF0gfHwgWyAiJHsxfSIgPT0gIi0taGVscCIgXTsgdGhlbgorCQkJdXNhZ2UgMAorCisJCWVsaWYgWyAiJHsxfSIgPT0gIi1iIiBdIHx8IFsgIiR7MX0iID09ICItLWJ1aWxkLXZlcnNpb24iIF07IHRoZW4KKwkJCXZlcnNpb249IiR7Mn0iCisJCQlzaGlmdCAyCisKKwkJZWxzZQorCQkgICAgCSR7RUNIT30gIlVua25vd24gYXJndW1lbnQgJyR7MX0nLiIKKwkJCXVzYWdlIDEKKworCQlmaQorCisJZWxzZQorCQlicmVhaworCisJZmkKK2RvbmUKKworaWYgWyAkeyN9IC1ndCAxIF07IHRoZW4KKwl1c2FnZSAxCitlbGlmIFsgJHsjfSAtZXEgMSBdOyB0aGVuCisJdHJlZT0iJHsxfSIKK2Vsc2UKKwl0cmVlPSIuIgorZmkKKworaWYgWyAiJHt0cmVlfSIgIT0gIi4iIF07IHRoZW4KKwljZCAiJHt0cmVlfSIKK2ZpCisKK1ZFUlNJT049ImBnaXR2ZXJzaW9uIFwiJHtWRVJTSU9OfVwiIC4gJHt2ZXJzaW9ufWAiCisKKyR7UFJJTlRGfSAiJHtWRVJTSU9OfSIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvTWFrZWZpbGUgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MzU3ODQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTM5IEBACisjCisjICAgIENvcHlyaWdodCAyMDE3IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIG1ha2UgZmlsZSBzdXBwb3J0cyBnZW5lcmF0aW5nIHByZWJ1aWx0IGFyY2hpdGVjdHVyZQorIyAgICAgIC1pbmRlcGVuZGVudCBhbmQgLWRlcGVuZGVudCBkaXN0cmlidXRpb25zIG9mIG5sYnVpbGQtYXV0b3Rvb2xzCisjICAgICAgYmluYXJpZXMgZm9yIHRoZSBhcmNoaXRldHVyZSBvZiB0aGUgY3VycmVudCBidWlsZCBob3N0LgorIworCitpbmNsdWRlIC4uL0NvbW1vbi5tYWsKKworIworIyBCdWlsZCBkaXJlY3RvcmllcworIworCitidWlsZGRpciAgICAgICAgIDo9IC4KK3RvcF9idWlsZGRpciAgICAgOj0gLi4KK2Fic19idWlsZGRpciAgICAgOj0gJChDVVJESVIpCithYnNfdG9wX2J1aWxkZGlyIDo9ICQoYWJzcGF0aCAkKHRvcF9idWlsZGRpcikpCisKKyMKKyMgU291cmNlIGRpcmVjdG9yaWVzCisjCisKK3NyY2RpciAgICAgICAgICAgOj0gLgordG9wX3NyY2RpciAgICAgICA6PSAuLgorYWJzX3NyY2RpciAgICAgICA6PSAkKENVUkRJUikKK2Fic190b3Bfc3JjZGlyICAgOj0gJChhYnNwYXRoICQodG9wX3NyY2RpcikpCisKKyMgRmlndXJlIG91dCB3aGF0IHNvcnQgb2YgYnVpbGQgaG9zdCB3ZSBhcmUgcnVubmluZyBvbiwgc3RyaXBwaW5nIG9mZgorIyBhbnkgdHJhaWxpbmcgdmVyc2lvbiBudW1iZXIgaW5mb3JtYXRpb24gdHlwaWNhbGx5IGluY2x1ZGVkIG9uIERhcndpbgorIyAvIE1hYyBPUyBYLgorCitob3N0ICAgICAgICAgICAgIDo9ICQoc2hlbGwgJCh0b3Bfc3JjZGlyKS9hdXRvY29uZi9jb25maWcuZ3Vlc3MgfCAkKFNFRCkgLWUgJ3MvW1s6ZGlnaXQ6XS5dKiQkLy9nJykKKworZGlzdGRpciAgICAgICAgICAgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKKworZGlzdF90Z3pfVEFSR0VUUyAgPSAke3RvcF9idWlsZGRpcn0vJHtQQUNLQUdFfS1jb21tb24tJChWRVJTSU9OKSQoVEdaX0VYVEVOU0lPTikgXAorICAgICAgICAgICAgICAgICAgICAke3RvcF9idWlsZGRpcn0vJHtQQUNLQUdFfS0ke2hvc3R9LSQoVkVSU0lPTikkKFRHWl9FWFRFTlNJT04pCisKK2Rpc3RfdHh6X1RBUkdFVFMgID0gJHt0b3BfYnVpbGRkaXJ9LyR7UEFDS0FHRX0tY29tbW9uLSQoVkVSU0lPTikkKFRYWl9FWFRFTlNJT04pIFwKKyAgICAgICAgICAgICAgICAgICAgJHt0b3BfYnVpbGRkaXJ9LyR7UEFDS0FHRX0tJHtob3N0fS0kKFZFUlNJT04pJChUWFpfRVhURU5TSU9OKQorCitkaXN0X2NvbW1vbl9ESVJTICA9IHNoYXJlIGluY2x1ZGUKK2Rpc3RfYXJjaF9ESVJTICAgID0gJChob3N0KQorCitQQUNLQUdFX1ZFUlNJT04gICA9ICQoc2hlbGwgJChDQVQpICQodG9wX2J1aWxkZGlyKS8ubG9jYWwtdmVyc2lvbikKKworVkVSU0lPTiAgICAgICAgICAgPSAkKFBBQ0tBR0VfVkVSU0lPTikKKworRElTVF9UTVBESVIgICAgICA6PSAkKHNoZWxsIG1rdGVtcCAtdSAtcCAvdG1wIC1kIHRtcC4kKFBBQ0tBR0UpLSQoVkVSU0lPTilYWFhYWFgpCitUT09MU19UTVBESVIgICAgIDo9ICQoc2hlbGwgbWt0ZW1wIC11IC1wIC90bXAgLWQgdG1wLiQoUEFDS0FHRSktJChWRVJTSU9OKVhYWFhYWCkKKworIworIyBWZXJib3NpdHkKKyMKK19OTF9WX0JVSUxEICAgICAgID0gJChfTkxfVl9CVUlMRF8kKFYpKQorX05MX1ZfQlVJTERfICAgICAgPSAkKF9OTF9WX0JVSUxEXyQoTkxfREVGQVVMVF9WRVJCT1NJVFkpKQorX05MX1ZfQlVJTERfMCAgICAgPSBAZWNobyAiICBCVUlMRCI7CitfTkxfVl9CVUlMRF8xICAgICA9IAorCitkaXN0LXRnejogJChkaXN0X3Rnel9UQVJHRVRTKQorCitkaXN0LXR4ejogJChkaXN0X3R4el9UQVJHRVRTKQorCisjCisjIFByb2R1Y2UgcHJlYnVpbHQgR05VIGF1dG90b29scyBiaW5hcmllcyBmb3IgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUKKyMgY3VycmVudCBidWlsZCBtYWNoaW5lIGFuZCBpbnN0YWxsIHRoZW0gaW4gdGhpcyBubGJ1aWxkLWF1dG90b29scworIyBwYWNrYWdlLgorIwordG9vbHM6CisJJChjYWxsIG5sLXJlbW92ZS1kaXIsJChUT09MU19UTVBESVIpKQorCSQoY2FsbCBubC1jcmVhdGUtZGlyLCQoVE9PTFNfVE1QRElSKSkKKwkkKF9OTF9WX0JVSUxEKSR7c3JjZGlyfS9wYWNrYWdlcy9idWlsZCAtLWFyY2ggJHtob3N0fSAtLXNyY2RpciAke2Fic19zcmNkaXJ9L3BhY2thZ2VzIC0tYnVpbGRkaXIgIiR7VE9PTFNfVE1QRElSfSIgLS1kZXN0ZGlyICIke2Fic190b3Bfc3JjZGlyfS90b29scy9ob3N0IgorCSQoY2FsbCBubC1yZW1vdmUtZGlyLCQoVE9PTFNfVE1QRElSKSkKKworIworIyBQcm9kdWNlIHByZWJ1aWx0IEdOVSBhdXRvdG9vbHMgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBhbmQgLWluZGVwZW5kZW50CisjIGJpbmFyaWVzIGZvciB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBjdXJyZW50IGJ1aWxkIG1hY2hpbmUgYW5kIHBhY2thZ2UKKyMgdGhlbSB1cCBmb3IgZGlzdHJpYnV0aW9uLgorIworZGlzdCB0b29sc2Rpc3Q6ICQoRElTVF9UQVJHRVRTKQorCSQoY2FsbCBubC1yZW1vdmUtZGlyLCQoRElTVF9UTVBESVIpKQorCisjCisjIFN0YWdlIHRoZSBkaXN0cmlidXRpb24gZmlsZXMgdG8gYSBkaXN0cmlidXRpb24gZGlyZWN0b3J5CisjCitzdGFnZToKKwkkKGNhbGwgbmwtcmVtb3ZlLWRpciwkKERJU1RfVE1QRElSKSkKKwkkKGNhbGwgbmwtY3JlYXRlLWRpciwkKERJU1RfVE1QRElSKSkKKwkkKF9OTF9WX0JVSUxEKSR7c3JjZGlyfS9wYWNrYWdlcy9idWlsZCAtLWFyY2ggJHtob3N0fSAtLXNyY2RpciAke2Fic19zcmNkaXJ9L3BhY2thZ2VzIC0tYnVpbGRkaXIgIiR7RElTVF9UTVBESVJ9IiAtLWRlc3RkaXIgIiR7RElTVF9UTVBESVJ9IgorCisjCisjIFByb2R1Y2UgcHJlYnVpbHQgR05VIGF1dG90b29scyBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgYmluYXJpZXMgZm9yCisjIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGN1cnJlbnQgYnVpbGQgbWFjaGluZSBhbmQgcGFja2FnZSB0aGVtIHVwCisjIGZvciBkaXN0cmlidXRpb24gaW4gdGFyLWd6aXAgZm9ybWF0LgorIworJHt0b3BfYnVpbGRkaXJ9LyR7UEFDS0FHRX0tY29tbW9uLSQoVkVSU0lPTikkKFRHWl9FWFRFTlNJT04pOiBzdGFnZQorCSQoTkxfVl9UR1opJChkaXN0X3Rnel9BUkNISVZFKSAtLWRpcmVjdG9yeSAke0RJU1RfVE1QRElSfSAkKGRpc3RfY29tbW9uX0RJUlMpIHwgJChkaXN0X3Rnel9DT01QUkVTUykgPiAiJChAKSIKKworIworIyBQcm9kdWNlIHByZWJ1aWx0IEdOVSBhdXRvdG9vbHMgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBiaW5hcmllcyBmb3IKKyMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgY3VycmVudCBidWlsZCBtYWNoaW5lIGFuZCBwYWNrYWdlIHRoZW0gdXAKKyMgZm9yIGRpc3RyaWJ1dGlvbiBpbiB0YXItZ3ppcCBmb3JtYXQuCisjCiske3RvcF9idWlsZGRpcn0vJHtQQUNLQUdFfS0ke2hvc3R9LSQoVkVSU0lPTikkKFRHWl9FWFRFTlNJT04pOiBzdGFnZQorCSQoTkxfVl9UR1opJChkaXN0X3Rnel9BUkNISVZFKSAtLWRpcmVjdG9yeSAke0RJU1RfVE1QRElSfSAkKGRpc3RfYXJjaF9ESVJTKSB8ICQoZGlzdF90Z3pfQ09NUFJFU1MpID4gIiQoQCkiCisKKyMKKyMgUHJvZHVjZSBwcmVidWlsdCBHTlUgYXV0b3Rvb2xzIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBiaW5hcmllcyBmb3IKKyMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgY3VycmVudCBidWlsZCBtYWNoaW5lIGFuZCBwYWNrYWdlIHRoZW0gdXAKKyMgZm9yIGRpc3RyaWJ1dGlvbiBpbiB0YXIteHogZm9ybWF0LgorIworJHt0b3BfYnVpbGRkaXJ9LyR7UEFDS0FHRX0tY29tbW9uLSQoVkVSU0lPTikkKFRYWl9FWFRFTlNJT04pOiBzdGFnZQorCSQoTkxfVl9UWFopJChkaXN0X3R4el9BUkNISVZFKSAtLWRpcmVjdG9yeSAke0RJU1RfVE1QRElSfSAkKGRpc3RfY29tbW9uX0RJUlMpIHwgJChkaXN0X3R4el9DT01QUkVTUykgPiAiJChAKSIKKworIworIyBQcm9kdWNlIHByZWJ1aWx0IEdOVSBhdXRvdG9vbHMgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBiaW5hcmllcyBmb3IKKyMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgY3VycmVudCBidWlsZCBtYWNoaW5lIGFuZCBwYWNrYWdlIHRoZW0gdXAKKyMgZm9yIGRpc3RyaWJ1dGlvbiBpbiB0YXIteHogZm9ybWF0LgorIworJHt0b3BfYnVpbGRkaXJ9LyR7UEFDS0FHRX0tJHtob3N0fS0kKFZFUlNJT04pJChUWFpfRVhURU5TSU9OKTogc3RhZ2UKKwkkKE5MX1ZfVFhaKSQoZGlzdF90eHpfQVJDSElWRSkgLS1kaXJlY3RvcnkgJHtESVNUX1RNUERJUn0gJChkaXN0X2FyY2hfRElSUykgfCAkKGRpc3RfdHh6X0NPTVBSRVNTKSA+ICIkKEApIgorCitjbGVhbjogY2xlYW4tbG9jYWwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvYXV0b2NvbmYvYXV0b2NvbmYudXJsIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9hdXRvY29uZi9hdXRvY29uZi51cmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlMmNhNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvYXV0b2NvbmYvYXV0b2NvbmYudXJsCkBAIC0wLDAgKzEgQEAKK2Z0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvYXV0b2NvbmYvYXV0b2NvbmYtMi42OC50YXIuZ3oKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvYXV0b2NvbmYvYXV0b2NvbmYudmVyc2lvbiBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvYXV0b2NvbmYvYXV0b2NvbmYudmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjRmMmNlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9hdXRvY29uZi9hdXRvY29uZi52ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzIuNjgKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvYXV0b21ha2UvYXV0b21ha2UudXJsIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9hdXRvbWFrZS9hdXRvbWFrZS51cmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiMTQxMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvYXV0b21ha2UvYXV0b21ha2UudXJsCkBAIC0wLDAgKzEgQEAKK2Z0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvYXV0b21ha2UvYXV0b21ha2UtMS4xNC4xLnRhci5negpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9hdXRvbWFrZS9hdXRvbWFrZS52ZXJzaW9uIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9hdXRvbWFrZS9hdXRvbWFrZS52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZTc5OWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2F1dG9tYWtlL2F1dG9tYWtlLnZlcnNpb24KQEAgLTAsMCArMSBAQAorMS4xNC4xCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2J1aWxkIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9idWlsZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYWI1NTBhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9idWlsZApAQCAtMCwwICsxLDQ5MCBAQAorIyEvYmluL3NoCisKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTQtMjAxNyBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIGEgY29udmVuaWVuY2Ugc2NyaXB0IGZvciBidWlsZGluZywgZm9yIHRoZSBjdXJyZW50CisjICAgICAgYnVpbGQgaG9zdCBzeXN0ZW0sIHRoZSBtaW5pbWFsLCBjb3JlIHNldCBvZiBHTlUgYXV0b3Rvb2xzIG9uCisjICAgICAgd2hpY2ggb3RoZXIgcHJvamVjdHMnIGJ1aWxkIHN5c3RlbXMgZGVwZW5kLgorIworCitFWFRFTlNJT05TPSJ0YXIuZ3ogdGFyLnh6IgorCitWRVJCT1NFPTAKKworc3RlbT10b29scy9wYWNrYWdlcworYWJzX3NyY2Rpcj1gcHdkYAorYWJzX3RvcF9zcmNkaXI9YGVjaG8gJHthYnNfc3JjZGlyfSB8IHNlZCAtZSBzLC8ke3N0ZW19LCxnYAorCithYnNfdG9wX2hvc3RkaXI9IiR7YWJzX3RvcF9zcmNkaXJ9L3Rvb2xzL2hvc3QiCisKKyMKKyMgdXNhZ2UKKyMKKyMgRGlzcGxheSBwcm9ncmFtIHVzYWdlLgorIwordXNhZ2UoKSB7CisgICAgbmFtZT1gYmFzZW5hbWUgJHswfWAKKworICAgIGVjaG8gIlVzYWdlOiAke25hbWV9IFsgb3B0aW9ucyBdIFsgLS0gPHBhY2thZ2U+IC4uLiBdIgorCisgICAgaWYgWyAkMSAtbmUgMCBdOyB0aGVuCisgICAgICAgIGVjaG8gIlRyeSAnJHtuYW1lfSAtaCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIGZpCisKKyAgICBpZiBbICQxIC1uZSAxIF07IHRoZW4KKyAgICAgICAgZWNobyAiIgorCWVjaG8gIiAgLS1hcmNoIEFSQ0ggICAgICBCdWlsZCB0aGUgcGFja2FnZSBmb3IgQVJDSCBob3N0IGFyY2hpdGVjdHVyZS4iCisgICAgICAgIGVjaG8gIiAgLWgsIC0taGVscCAgICAgICBQcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdC4iCisgICAgICAgIGVjaG8gIiAgLS1idWlsZGRpciBESVIgICBCdWlsZCB0aGUgcGFja2FnZXMgaW4gRElSLiIKKyAgICAgICAgZWNobyAiICAtLWRlc3RkaXIgRElSICAgIEluc3RhbGwgdGhlIGJ1aWx0IHRvb2xzIHRvIGRpcmVjdG9yeSBESVIuIgorICAgICAgICBlY2hvICIgIC0tc3JjZGlyIERJUiAgICAgRmluZCBwYWNrYWdlLCB2ZXJzaW9uLCBhbmQgVVJMIG1ldGFkYXRhIGluIERJUi4iCisgICAgICAgIGVjaG8gIiAgLXYsIC0tdmVyYm9zZSAgICBFbmFibGUgdmVyYm9zZSBvdXRwdXQuIgorICAgICAgICBlY2hvICIiCisgICAgZmkKKworICAgIGV4aXQgJDEKK30KKworIworIyBlcnJvciA8Li4uPgorIworIyBEaXNwbGF5IHRvIHN0YW5kYXJkIGVycm9yIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzCisjCitlcnJvcigpIHsKKyAgICBlY2hvICIkeyp9IiA+JjIKK30KKworIworIyB2ZXJib3NlIDwuLi4+CisjCisjIERpc3BsYXkgdG8gc3RhbmRhcmQgZXJyb3IgdGhlIHNwZWNpZmllZCBhcmd1bWVudHMKKyMKK3ZlcmJvc2UoKSB7CisgICAgZWNobyAiJHsqfSIgPiYyCit9CisKKyMKKyMgc2VwYXJhdG9yCisjCisjIERpc3BsYXkgdG8gc3RhbmRhcmQgZXJyb3IgYSBsb2cgc2VwYXJhdG9yLgorIworc2VwYXJhdG9yKCkgeworICAgIHZlcmJvc2UgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorfQorCisjCisjIHRyYWlsZXIKKyMKKyMgRGlzcGxheSB0byBzdGFuZGFyZCBlcnJvciBhIGxvZyB0cmFpbGVyLgorIwordHJhaWxlcigpIHsKKyAgICB2ZXJib3NlICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKK30KKworIworIyBiYW5uZXIgPG1lc3NhZ2UgLi4uPgorIworIyBEaXNwbGF5IHRvIHN0YW5kYXJkIGVycm9yIGEgbG9nIGJhbm5lciB3aXRoIGEgbWVzc2FnZS4KKyMKK2Jhbm5lcigpIHsKKyAgICB0cmFpbGVyCisKKyAgICB2ZXJib3NlICIkeyp9IgorfQorCisjCisjIHN1YmJhbm5lciA8bWVzc2FnZSAuLi4+CisjCisjIERpc3BsYXkgdG8gc3RhbmRhcmQgZXJyb3IgYSBsb2cgc3ViYmFubmVyIHdpdGggYSBtZXNzYWdlLgorIworc3ViYmFubmVyKCkgeworICAgIHNlcGFyYXRvcgorCisgICAgdmVyYm9zZSAiJHsqfSIKK30KKworIworIyBmaW5kX2FyY2hpdmUgPHN1YmRpcj4gPHBhY2thZ2U+IDxleHRlbnNpb25zLi4uPgorIworIyBBdHRlbXB0IHRvIGZpbmQgdGhlIHNwZWNpZmllZCBwYWNrYWdlIGFyY2hpdmUgaW4gdGhlIHByb3ZpZGVkCisjIHN1YmRpcmVjdG9yeSBtYXRjaGluZyBvbmUgb2YgdGhlIHNwZWNpZmllZCBleHRlbnNpb25zLgorIworZmluZF9hcmNoaXZlKCkgeworICAgIGxvY2FsIHN1YmRpcj0iJHsxfSIKKyAgICBsb2NhbCBwYWNrYWdlPSIkezJ9IgorICAgIGxvY2FsIGFyY2hpdmUKKworICAgIHNoaWZ0IDIKKworICAgIGZvciBleHRlbnNpb24gaW4gJHsqfTsgZG8KKyAgICAgICAgbG9jYWwgbWF5YmVfYXJjaGl2ZT0iJHtzdWJkaXJ9LyR7cGFja2FnZX0uJHtleHRlbnNpb259IgorCisgICAgICAgIHZlcmJvc2UgIiAgRklORCAgICAgJHttYXliZV9hcmNoaXZlfSIKKworICAgICAgICBpZiBbIC1yICIke21heWJlX2FyY2hpdmV9IiBdOyB0aGVuCisgICAgICAgICAgICBhcmNoaXZlPSIke21heWJlX2FyY2hpdmV9IgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBlY2hvICIke2FyY2hpdmV9IgorfQorCisjCisjIGZpbmRfdmVyc2lvbmVkX29yX25vbnZlcnNpb25lZF9hcmNoaXZlIDxzdWJkaXI+IDxwYWNrYWdlPiA8dmVyc2lvbj4gPGV4dGVuc2lvbnMuLi4+CisjCisjIEF0dGVtcHQgdG8gZmluZCB0aGUgc3BlY2lmaWVkIHZlcnNpb24tcXVhbGlmaWVkIG9yIG5vbi1xdWFsaWZpZWQKKyMgcGFja2FnZSBhcmNoaXZlIGluIHRoZSBwcm92aWRlZCBzdWJkaXJlY3RvcnkgbWF0Y2hpbmcgb25lIG9mIHRoZQorIyBzcGVjaWZpZWQgZXh0ZW5zaW9ucy4KKyMKK2ZpbmRfdmVyc2lvbmVkX29yX25vbnZlcmlvbmVkX2FyY2hpdmUoKSB7CisgICAgbG9jYWwgc3ViZGlyPSIkezF9IgorICAgIGxvY2FsIHBhY2thZ2U9IiR7Mn0iCisgICAgbG9jYWwgdmVyc2lvbj0iJHszfSIKKyAgICBsb2NhbCBmcXBhY2thZ2U9IiR7cGFja2FnZX0tJHt2ZXJzaW9ufSIKKyAgICBsb2NhbCBhcmNoaXZlCisKKyAgICBzaGlmdCAzCisKKyAgICBhcmNoaXZlPSJgZmluZF9hcmNoaXZlICR7c3ViZGlyfSAke2ZxcGFja2FnZX0gJHsqfWAiCisKKyAgICBpZiBbIC16ICIke2FyY2hpdmV9IiBdOyB0aGVuCisgICAgICAgIGFyY2hpdmU9ImBmaW5kX2FyY2hpdmUgJHtzdWJkaXJ9ICR7cGFja2FnZX0gJHsqfWAiCisgICAgZmkKKworICAgIGVjaG8gIiR7YXJjaGl2ZX0iCit9CisKKyMKKyMgZmV0Y2hfdXJsX3dpdGhfY29tbWFuZCA8ZmV0Y2hkaXI+IDx1cmw+IDxjb21tYW5kIC4uLj4KKyMKKyMgQXR0ZW1wdCB0byBmZXRjaCB0aGUgc3BlY2lmaWVkIFVSTCB0byB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5IHdpdGgKKyMgdGhlIHByb3ZpZGVkIGNvbW1hbmQuCisjCitmZXRjaF91cmxfd2l0aF9jb21tYW5kKCkgeworICAgIGxvY2FsIGZldGNoZGlyPSIkezF9IgorICAgIGxvY2FsIHVybD0iJHsyfSIKKyAgICBsb2NhbCBjdXJkaXI9ImBwd2RgIgorCisgICAgc2hpZnQgMgorCisgICAgY2QgIiR7ZmV0Y2hkaXJ9IgorCisgICAgICAgICR7Kn0gIiR7dXJsfSIKKworICAgICAgICBpZiBbICR7P30gLW5lIDAgXTsgdGhlbgorICAgICAgICAgICAgZXJyb3IgIkZhaWxlZCB0byBmZXRjaCAke3VybH0gd2l0aCAkezF9LiIKKyAgICAgICAgZmkKKworICAgIGNkICIke2N1cmRpcn0iCit9CisKKyMKKyMgZmV0Y2hfdXJsIDxmZXRjaGRpcj4gPHVybD4KKyMKKyMgQXR0ZW1wdCB0byBmZXRjaCB0aGUgc3BlY2lmaWVkIFVSTCB0byB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5IHdpdGgKKyMgZWl0aGVyIHdnZXQgb3IgY3VybC4KKyMKK2ZldGNoX3VybCgpIHsKKyAgICBsb2NhbCBmZXRjaGRpcj0iJHsxfSIKKyAgICBsb2NhbCB1cmw9IiR7Mn0iCisKKyAgICAjIFRyeSB0byBmZXRjaCB0aGUgcGFja2FnZSB1c2luZyB3Z2V0IG9yIGN1cmwKKworICAgIGZldGNoX3VybF93aXRoX2NvbW1hbmQgIiR7ZmV0Y2hkaXJ9IiAiJHt1cmx9IiB3Z2V0IC0tcXVpZXQgfHwKKyAgICAgICAgZmV0Y2hfdXJsX3dpdGhfY29tbWFuZCAiJHtmZXRjaGRpcn0iICIke3VybH0iIGN1cmwgLS1zaWxlbnQgLS1yZW1vdGUtbmFtZQorfQorCisjCisjIGZldGNoX3BhY2thZ2UgPGZpbmRkaXI+IDxmZXRjaGRpcj4gPHBhY2thZ2U+IDx2ZXJzaW9uPiA8dXJsPgorIworIyBBdHRlbXB0IHRvIGZldGNoIHRoZSBzcGVjaWZpZWQgcGFja2FnZSB2ZXJzaW9uIHRvIDxmZXRjaGRpcj4sIGlmIGEKKyMgbG9jYWwgYXJjaGl2ZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGluIDxmaW5kZGlyPiBvciA8ZmV0Y2hkaXI+LAorIyBmcm9tIHRoZSBwcm92aWRlZCBVUkwuCisjCitmZXRjaF9wYWNrYWdlKCkgeworICAgIGxvY2FsIGZpbmRkaXI9IiR7MX0iCisgICAgbG9jYWwgZmV0Y2hkaXI9IiR7Mn0iCisgICAgbG9jYWwgcGFja2FnZT0iJHszfSIKKyAgICBsb2NhbCB2ZXJzaW9uPSIkezR9IgorICAgIGxvY2FsIHVybD0iJHs1fSIKKyAgICBsb2NhbCBmcXBhY2thZ2U9IiR7cGFja2FnZX0tJHt2ZXJzaW9ufSIKKworICAgICMgQ2hlY2sgd2hldGhlciBhIGxvY2FsIGFyY2hpdmUgYWxyZWFkeSBleGlzdHMgaW4gPGZpbmRkaXI+IG9yIDxmZXRjaGRpcj4uCisKKyAgICBhcmNoaXZlPSJgZmluZF92ZXJzaW9uZWRfb3Jfbm9udmVyaW9uZWRfYXJjaGl2ZSAke2ZpbmRkaXJ9ICR7cGFja2FnZX0gJHt2ZXJzaW9ufSAke0VYVEVOU0lPTlN9YCIKKworICAgIGlmIFsgLXogIiR7YXJjaGl2ZX0iIF07IHRoZW4KKyAgICAgICAgYXJjaGl2ZT0iYGZpbmRfdmVyc2lvbmVkX29yX25vbnZlcmlvbmVkX2FyY2hpdmUgJHtmZXRjaGRpcn0gJHtwYWNrYWdlfSAke3ZlcnNpb259ICR7RVhURU5TSU9OU31gIgorICAgIGZpCisKKyAgICAjIElmIG5vIGFyY2hpdmUgd2FzIGZvdW5kLCBhdHRlbXB0IHRvIGZldGNoIGl0LgorCisgICAgaWYgWyAteiAiJHthcmNoaXZlfSIgXTsgdGhlbgorICAgICAgICB2ZXJib3NlICIgIEZFVENIICAgICR7dXJsfSIKKworICAgICAgICBmZXRjaF91cmwgIiR7ZmV0Y2hkaXJ9IiAiJHt1cmx9IgorCisgICAgZWxzZQorICAgICAgICBlcnJvciAiTm8sIGZvdW5kICR7YXJjaGl2ZX0gbG9jYWxseS4iCisKKyAgICBmaQorfQorCisjCisjIHJlbW92ZXRtcAorIworIyBSZW1vdmUgdGVtcG9yYXJ5IGZpbGVzIGFuZCBkaXJlY3RvcmllcyB1c2VkIGR1cmluZyB0aGUgcnVuIG9mIHRoaXMKKyMgc2NyaXB0LgorIworcmVtb3ZldG1wKCkgeworICAgIHJtIC1mICIke0xJQlRPT0xJWkV9IgorICAgIGlmIFsgLW4gIiR7QVVUT000VEVfQ0ZHfSIgXTsgdGhlbgorICAgICAgICBybSAtZiAiJHtBVVRPTTRURV9DRkd9IgorICAgIGZpCit9CisKKyMKKyMgYnVpbGRfcGFja2FnZSA8cGFja2FnZT4gPHZlcnNpb24+IDxob3N0PiA8YXJjaGl2ZWRpcj4gPGJ1aWxkZGlyPiA8ZGVzdGRpcj4KKyMKKyMgQnVpbGQgdGhlIHNwZWNpZmllZCBwYWNrYWdlIHZlcnNpb24gZm9yIDxob3N0PiBpbiA8YnVpbGRkaXI+IGZyb20KKyMgdGhlIGFyY2hpdmUgZm91bmQgaW4gPGFyY2hpdmVkaXI+IGFuZCBpbnN0YWxsIGl0IGludG8gdGhlIHNwZWNpZmllZAorIyBkZXN0aW5hdGlvbiBkaXJlY3RvcnksIDxkZXN0ZGlyPi4KKyMKK2J1aWxkX3BhY2thZ2UoKSB7CisgICAgbG9jYWwgcGFja2FnZT0iJHsxfSIKKyAgICBsb2NhbCB2ZXJzaW9uPSIkezJ9IgorICAgIGxvY2FsIGhvc3Q9IiR7M30iCisgICAgbG9jYWwgYXJjaGl2ZWRpcj0iJHs0fSIKKyAgICBsb2NhbCBidWlsZGRpcj0iJHs1fSIKKyAgICBsb2NhbCBkZXN0ZGlyPSIkezZ9IgorICAgIGxvY2FsIGZxcGFja2FnZT0iJHtwYWNrYWdlfS0ke3ZlcnNpb259IgorICAgIGxvY2FsIGN1cmRpcj1gcHdkYAorICAgIGxvY2FsIGFyY2hpdmUKKworICAgIHZlcmJvc2UgIiAgQ0hFQ0sgICAgJHtwYWNrYWdlfSIKKworICAgIGFyY2hpdmU9ImBmaW5kX3ZlcnNpb25lZF9vcl9ub252ZXJpb25lZF9hcmNoaXZlICR7YXJjaGl2ZWRpcn0gJHtwYWNrYWdlfSAke3ZlcnNpb259ICR7RVhURU5TSU9OU31gIgorCisgICAgaWYgWyAteiAiJHthcmNoaXZlfSIgXTsgdGhlbgorICAgICAgICBlcnJvciAiQ291bGQgbm90IGZpbmQgYW4gYXJjaGl2ZSBmb3IgJHtwYWNrYWdlfS4iCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiBbICEgLWQgIiR7YXJjaGl2ZWRpcn0vJHtmcXBhY2thZ2V9IiBdOyB0aGVuCisJdmVyYm9zZSAiICBUQVIgICAgICAke2FyY2hpdmV9IgorICAgICAgICB0YXIgLS1kaXJlY3RvcnkgIiR7YXJjaGl2ZWRpcn0iIC14ZiAiJHthcmNoaXZlfSIgfHwgZXhpdCAkez99CisgICAgZmkKKworICAgICMgSWYgcG9zc2libGUsIGF0dGVtcHQgdG8gYmUgc2VsZi1zdWZmaWNpZW50LCByZWx5aW5nIG9uIEdOVSBhdXRvdG9vbHMKKyAgICAjIGV4ZWN1dGFibGVzIGluc3RhbGxlZCBhbG9uZyB3aXRoIHRoZSBTREsgaXRzZWxmLgorCisgICAgaWYgWyAtZCAiJHtkZXN0ZGlyfS8ke2hvc3R9L2JpbiIgXTsgdGhlbgorICAgICAgICBleHBvcnQgUEFUSD0iJHtkZXN0ZGlyfS8ke2hvc3R9L2Jpbjoke1BBVEh9IgorICAgIGZpCisKKyAgICBpZiBbIC1kICIke2Rlc3RkaXJ9L2JpbiIgXTsgdGhlbgorICAgICAgICBleHBvcnQgUEFUSD0iJHtkZXN0ZGlyfS9iaW46JHtQQVRIfSIKKyAgICBmaQorCisgICAgZXhwb3J0IEFDTE9DQUw9YHdoaWNoIGFjbG9jYWxgCisgICAgZXhwb3J0IEFVVE9DT05GPSJgd2hpY2ggYXV0b2NvbmZgIgorICAgIGV4cG9ydCBBVVRPSEVBREVSPSJgd2hpY2ggYXV0b2hlYWRlcmAiCisgICAgZXhwb3J0IEFVVE9NNFRFPSJgd2hpY2ggYXV0b200dGVgIgorICAgIGV4cG9ydCBBVVRPTUFLRT0iYHdoaWNoIGF1dG9tYWtlYCIKKyAgICBleHBvcnQgTElCVE9PTElaRT0iYHdoaWNoIGxpYnRvb2xpemUgfHwgd2hpY2ggZ2xpYnRvb2xpemVgIgorICAgIGV4cG9ydCBNND1gd2hpY2ggbTRgCisKKyAgICAjIEVzdGFibGlzaCwgaWYgbmVjZXNzYXJ5LCBzb21lIFNESy1zcGVjaWZpYyBkaXJlY3RvcmllcyBuZWVkZWQgdG8KKyAgICAjIG92ZXJyaWRlIHZhcmlvdXMgcGF0aHMgaW4gR05VIGF1dG90b29scyB0aGF0IG90aGVyd2lzZSBleHBlY3QgdG8gYmUKKyAgICAjIGFic29sdXRlIChlLmcuIC91c3Ivc2hhcmUsIGV0Yy4pLgorCisgICAgaWYgWyAtZCAiJHtkZXN0ZGlyfS9zaGFyZSIgXTsgdGhlbgorICAgICAgICBpZiBbIC1kICIke2Rlc3RkaXJ9L3NoYXJlL2F1dG9jb25mIiBdOyB0aGVuCisgICAgICAgICAgICBleHBvcnQgQUNfTUFDUk9ESVI9IiR7ZGVzdGRpcn0vc2hhcmUvYXV0b2NvbmYiCisKKyAgICAgICAgICAgIGV4cG9ydCBhdXRvbTR0ZV9wZXJsbGliZGlyPSIke2Rlc3RkaXJ9L3NoYXJlL2F1dG9jb25mIgorCWZpCisKKyAgICAgICAgaWYgWyAtZCAiJHtkZXN0ZGlyfS9zaGFyZS9hdXRvbWFrZS0xLjE0IiBdOyB0aGVuCisgICAgICAgICAgICBleHBvcnQgUEVSTDVMSUI9IiR7ZGVzdGRpcn0vc2hhcmUvYXV0b21ha2UtMS4xNDoke1BFUkw1TElCfSIKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgdHJhcCAicmVtb3ZldG1wIiAxIDIgMyA5IDE1CisKKyAgICAjCisgICAgIyBHZW5lcmF0ZSBhbnkgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgbmVlZCB0byBiZSBwYXRjaGVkIGF0IHJ1biB0aW1lCisgICAgIyB3aXRoIHRoZSBsb2NhdGlvbiBvZiB0aGUgU0RLIHRyZWUsIGluY2x1ZGluZzoKKyAgICAjCisgICAgIyAgIC0gIFRoZSBhdXRvbTR0ZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAjICAgLSAgVGhlIGxpYnRvb2xpemUgZXhlY3V0YWJsZSBzY3JpcHQKKyAgICAjCisKKyAgICBpZiBbIC1yICIke2Rlc3RkaXJ9L3NoYXJlL2F1dG9jb25mL2F1dG9tNHRlLmNmZyIgXTsgdGhlbgorICAgICAgICBleHBvcnQgQVVUT000VEVfQ0ZHPSIke2Rlc3RkaXJ9L2F1dG9tNHRlLmNmZyIKKworICAgICAgICBzZWQgLWUgInMsLy9zaGFyZS9hdXRvY29uZiwke2Rlc3RkaXJ9L3NoYXJlL2F1dG9jb25mLGciIDwgIiR7ZGVzdGRpcn0vc2hhcmUvYXV0b2NvbmYvYXV0b200dGUuY2ZnIiA+ICIke0FVVE9NNFRFX0NGR30iCisgICAgZmkKKworICAgIGlmIFsgLXIgIiR7ZGVzdGRpcn0vJHtob3N0fS9iaW4vbGlidG9vbGl6ZSIgXTsgdGhlbgorICAgICAgICBleHBvcnQgTElCVE9PTElaRT0iJHtkZXN0ZGlyfS9saWJ0b29saXplIgorCisgICAgICAgIHNlZCAtZSAicywvL3NoYXJlL2xpYnRvb2wsJHtkZXN0ZGlyfS9zaGFyZS9saWJ0b29sLGciIC1lICJzLC8vc2hhcmUvYWNsb2NhbCwke2Rlc3RkaXJ9L3NoYXJlL2FjbG9jYWwsZyIgPCAiJHtkZXN0ZGlyfS8ke2hvc3R9L2Jpbi9saWJ0b29saXplIiA+ICIke0xJQlRPT0xJWkV9IgorCisgICAgICAgIGNobW9kIDc3NSAiJHtMSUJUT09MSVpFfSIKKyAgICBmaQorCisgICAgIyBDb25maWd1cmUgdGhlIHBhY2thZ2UKKworICAgIGlmIFsgJHtWRVJCT1NFfSAtZ3QgMCBdOyB0aGVuCisgICAgICAgIENPTkZJR1VSRV9GTEFHUz0iIgorICAgIGVsc2UKKyAgICAgICAgQ09ORklHVVJFX0ZMQUdTPSItLXF1aWV0IgorICAgIGZpCisKKyAgICB2ZXJib3NlICIgIENPTkZJRyAgICR7cGFja2FnZX0iCisKKyAgICBjZCAiJHtidWlsZGRpcn0iCisKKyAgICAgICAgJHthcmNoaXZlZGlyfS8ke2ZxcGFja2FnZX0vY29uZmlndXJlICR7Q09ORklHVVJFX0ZMQUdTfSAtLXByZWZpeD0vIC0tZXhlYy1wcmVmaXg9LyR7aG9zdH0gfHwgZXhpdCAkez99CisKKyAgICBjZCAiJHtjdXJkaXJ9IgorCisgICAgIyBCdWlsZCB0aGUgcGFja2FnZQorCisgICAgdmVyYm9zZSAiICBNQUtFICAgICAke3BhY2thZ2V9IgorCisgICAgbWFrZSBWPSR7VkVSQk9TRX0gLUMgIiR7YnVpbGRkaXJ9IiBhbGwgfHwgZXhpdCAkez99CisKKyAgICAjIEluc3RhbGwgLyBzdGFnZSB0aGUgcGFja2FnZQorCisgICAgdmVyYm9zZSAiICBJTlNUQUxMICAke3BhY2thZ2V9IgorCisgICAgbWFrZSBWPSR7VkVSQk9TRX0gLUMgIiR7YnVpbGRkaXJ9IiBERVNURElSPSIke2Rlc3RkaXJ9IiBpbnN0YWxsLXN0cmlwIHx8IGV4aXQgJHs/fQorCisgICAgIyBSZW1vdmUgYW55IHRlbXBvcmFyeSBmaWxlcyBjcmVhdGVkLgorCisgICAgcmVtb3ZldG1wCit9CisKKyMgUGFyc2Ugb3V0IGFueSBjb21tYW5kIGxpbmUgb3B0aW9ucworCit3aGlsZSBbICR7I30gLWd0IDAgXTsgZG8KKyAgICBjYXNlICR7MX0gaW4KKwktLWFyY2gpCisgICAgICAgICAgICBBUkNIPSR7Mn0KKyAgICAgICAgICAgIHNoaWZ0IDIKKyAgICAgICAgICAgIDs7CisKKwktaHwtLWhlbHApCisJICAgIHVzYWdlIDAKKwkgICAgOzsKKworCS0tYnVpbGRkaXIpCisJICAgIEJVSUxERElSPSR7Mn0KKwkgICAgc2hpZnQgMgorCSAgICA7OworCisJLS1kZXN0ZGlyKQorCSAgICBERVNURElSPSR7Mn0KKwkgICAgc2hpZnQgMgorCSAgICA7OworCisgICAgICAgIC0tc3JjZGlyKQorICAgICAgICAgICAgU1JDRElSPSR7Mn0KKyAgICAgICAgICAgIHNoaWZ0IDIKKwkgICAgOzsKKworICAgICAgICAtdnwtLXZlcmJvc2UpCisgICAgICAgICAgICAkKChWRVJCT1NFKyspKQorICAgICAgICAgICAgc2hpZnQgMQorCSAgICA7OworCisJLS0pCisJICAgIHNoaWZ0IDEKKwkgICAgYnJlYWsKKwkgICAgOzsKKworCSopCisgICAgICAgICAgdXNhZ2UgMQorCSAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgSWYgdGhlIGFyY2hpdGVjdHVyZSBpcyBub3Qgc3BlY2lmaWVkLCBmYWlsLgorCitpZiBbIC16ICIke0FSQ0h9IiBdOyB0aGVuCisgICAgZXJyb3IgIlRoZSBob3N0IGFyY2hpdGVjdHVyZSB3YXMgbm90IHNwZWNpZmllZCB2aWEgLS1hcmNoLiIKKworICAgIHVzYWdlIDEKK2ZpCisKKyMgSWYgdGhlIC0tYnVpbGRkaXIgb3B0aW9uIHdhc24ndCBzcGVjaWZpZWQsIHRoZW4gcHJvdmlkZSBhIGRlZmF1bHQuCisKK2lmIFsgLXogIiR7QlVJTERESVJ9IiBdOyB0aGVuCisgICAgQlVJTERESVI9ImBwd2RgIgorZmkKKworIyBJZiB0aGUgLS1kZXN0ZGlyIG9wdGlvbiB3YXNuJ3Qgc3BlY2lmaWVkLCB0aGVuIHByb3ZpZGUgYSBkZWZhdWx0LgorCitpZiBbIC16ICIke0RFU1RESVJ9IiBdOyB0aGVuCisgICAgREVTVERJUj0ke2Fic190b3BfaG9zdGRpcn0KK2ZpCisKKyMgSWYgdGhlIC0tc3JjZGlyIG9wdGlvbiB3YXNuJ3Qgc3BlY2lmaWVkLCB0aGVuIHByb3ZpZGUgYSBkZWZhdWx0LgorCitpZiBbIC16ICIke1NSQ0RJUn0iIF07IHRoZW4KKyAgICBTUkNESVI9ImBwd2RgIgorZmkKKworIyBEZXRlcm1pbmUgd2hhdCBwYWNrYWdlcyB0byBidWlsZAorCitpZiBbICR7I30gLWd0IDAgXTsgdGhlbgorICAgIFBBQ0tBR0VTPSIkeyp9IgorCitlbHNlCisgICAgUEFDS0FHRVM9ImBjYXQgJHtTUkNESVJ9L3BhY2thZ2VzYCIKKworZmkKKworIyBCdWlsZCBlYWNoIHBhY2thZ2UKKworYmFubmVyICJCdWlsZGluZyBHTlUgYXV0b3Rvb2xzIGZvciAke0FSQ0h9Li4uIgorCitmb3IgcGFja2FnZSBpbiAke1BBQ0tBR0VTfTsgZG8KKyAgICB1cmw9ImBjYXQgJHtTUkNESVJ9LyR7cGFja2FnZX0vJHtwYWNrYWdlfS51cmxgIgorICAgIHZlcnNpb249ImBjYXQgJHtTUkNESVJ9LyR7cGFja2FnZX0vJHtwYWNrYWdlfS52ZXJzaW9uYCIKKworICAgICMgRmV0Y2gsIGlmIG5lY2Vzc2FyeSwgdGhlIHBhY2thZ2UgZnJvbSB0aGUgY2Fub25pY2FsIHNvdXJjZSBsb2NhdGlvbi4KKworICAgIHN1YmJhbm5lciAiICBDSEVDSyAgICAke3BhY2thZ2V9IgorCisgICAgZmV0Y2hfcGFja2FnZSAiJHtTUkNESVJ9LyR7cGFja2FnZX0iICIke0JVSUxERElSfSIgIiR7cGFja2FnZX0iICIke3ZlcnNpb259IiAiJHt1cmx9IgorCisgICAgIyBCdWlsZCBhbmQgaW5zdGFsbCB0aGUgcGFja2FnZS4KKworICAgIHZlcmJvc2UgIiAgTUtESVIgICAgJHtCVUlMRERJUn0vYnVpbGQvJHtBUkNIfS8ke3BhY2thZ2V9LSR7dmVyc2lvbn0iCisKKyAgICBta2RpciAtcCAiJHtCVUlMRERJUn0vYnVpbGQvJHtBUkNIfS8ke3BhY2thZ2V9LSR7dmVyc2lvbn0iIHx8IGV4aXQgJHs/fQorCisgICAgYnVpbGRfcGFja2FnZSAiJHtwYWNrYWdlfSIgIiR7dmVyc2lvbn0iICIke0FSQ0h9IiAiJHtCVUlMRERJUn0iICIke0JVSUxERElSfS9idWlsZC8ke0FSQ0h9LyR7cGFja2FnZX0tJHt2ZXJzaW9ufSIgIiR7REVTVERJUn0iCitkb25lCisKK3RyYWlsZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvY29yZXV0aWxzL2NvcmV1dGlscy51cmwgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2NvcmV1dGlscy9jb3JldXRpbHMudXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlODgxYmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2NvcmV1dGlscy9jb3JldXRpbHMudXJsCkBAIC0wLDAgKzEgQEAKK2Z0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvY29yZXV0aWxzL2NvcmV1dGlscy04LjIxLnRhci54egpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9jb3JldXRpbHMvY29yZXV0aWxzLnZlcnNpb24gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2NvcmV1dGlscy9jb3JldXRpbHMudmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzFkNzA1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9jb3JldXRpbHMvY29yZXV0aWxzLnZlcnNpb24KQEAgLTAsMCArMSBAQAorOC4yMQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9saWJ0b29sL2xpYnRvb2wudXJsIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9saWJ0b29sL2xpYnRvb2wudXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYmIzYzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2xpYnRvb2wvbGlidG9vbC51cmwKQEAgLTAsMCArMSBAQAorZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9saWJ0b29sL2xpYnRvb2wtMi40LjIudGFyLmd6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2xpYnRvb2wvbGlidG9vbC52ZXJzaW9uIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9saWJ0b29sL2xpYnRvb2wudmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTgyOTlkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9saWJ0b29sL2xpYnRvb2wudmVyc2lvbgpAQCAtMCwwICsxIEBACisyLjQuMgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9tNC9tNC51cmwgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL200L200LnVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDFiODk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9tNC9tNC51cmwKQEAgLTAsMCArMSBAQAorZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9tNC9tNC0xLjQuMTcudGFyLmd6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL200L200LnZlcnNpb24gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL200L200LnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRlMGQzZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvbTQvbTQudmVyc2lvbgpAQCAtMCwwICsxIEBACisxLjQuMTcKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvbWFrZS9tYWtlLnVybCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvbWFrZS9tYWtlLnVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjllYzk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9tYWtlL21ha2UudXJsCkBAIC0wLDAgKzEgQEAKK2Z0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvbWFrZS9tYWtlLTMuODIudGFyLmd6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL21ha2UvbWFrZS52ZXJzaW9uIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9tYWtlL21ha2UudmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MThhMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9tYWtlL21ha2UudmVyc2lvbgpAQCAtMCwwICsxIEBACiszLjgyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL3BhY2thZ2VzIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9wYWNrYWdlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGQ4NzMzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9wYWNrYWdlcwpAQCAtMCwwICsxLDYgQEAKK200CithdXRvY29uZgorYXV0b21ha2UKK2xpYnRvb2wKK21ha2UKK2NvcmV1dGlscwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvYXJtX2NvbW1vbl90YWJsZXMuaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2FybV9jb21tb25fdGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0MmE1NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2FybV9jb21tb25fdGFibGVzLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTQgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICREYXRlOiAgICAgICAgMTkuIE9jdG9iZXIgMjAxNQorKiAkUmV2aXNpb246IAlWLjEuNC41IGEKKyoKKyogUHJvamVjdDogCSAgICBDTVNJUyBEU1AgTGlicmFyeQorKiBUaXRsZToJICAgIGFybV9jb21tb25fdGFibGVzLmgKKyoKKyogRGVzY3JpcHRpb246CVRoaXMgZmlsZSBoYXMgZXh0ZXJuIGRlY2xhcmF0aW9uIGZvciBjb21tb24gdGFibGVzIGxpa2UgQml0cmV2ZXJzZSwgcmVjaXByb2NhbCBldGMgd2hpY2ggYXJlIHVzZWQgYWNyb3NzIGRpZmZlcmVudCBmdW5jdGlvbnMKKyoKKyogVGFyZ2V0IFByb2Nlc3NvcjogQ29ydGV4LU00L0NvcnRleC1NMworKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKiAgICAgZGlzdHJpYnV0aW9uLgorKiAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gTElNSVRFRCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyogICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworKiAgICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBfQVJNX0NPTU1PTl9UQUJMRVNfSAorI2RlZmluZSBfQVJNX0NPTU1PTl9UQUJMRVNfSAorCisjaW5jbHVkZSAiYXJtX21hdGguaCIKKworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldlRhYmxlWzEwMjRdOworZXh0ZXJuIGNvbnN0IHExNV90IGFybVJlY2lwVGFibGVRMTVbNjRdOworZXh0ZXJuIGNvbnN0IHEzMV90IGFybVJlY2lwVGFibGVRMzFbNjRdOworLyogZXh0ZXJuIGNvbnN0IHEzMV90IHJlYWxDb2VmQVEzMVsxMDI0XTsgKi8KKy8qIGV4dGVybiBjb25zdCBxMzFfdCByZWFsQ29lZkJRMzFbMTAyNF07ICovCitleHRlcm4gY29uc3QgZmxvYXQzMl90IHR3aWRkbGVDb2VmXzE2WzMyXTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfMzJbNjRdOworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCB0d2lkZGxlQ29lZl82NFsxMjhdOworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCB0d2lkZGxlQ29lZl8xMjhbMjU2XTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfMjU2WzUxMl07CitleHRlcm4gY29uc3QgZmxvYXQzMl90IHR3aWRkbGVDb2VmXzUxMlsxMDI0XTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfMTAyNFsyMDQ4XTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfMjA0OFs0MDk2XTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfNDA5Nls4MTkyXTsKKyNkZWZpbmUgdHdpZGRsZUNvZWYgdHdpZGRsZUNvZWZfNDA5NgorZXh0ZXJuIGNvbnN0IHEzMV90IHR3aWRkbGVDb2VmXzE2X3EzMVsyNF07CitleHRlcm4gY29uc3QgcTMxX3QgdHdpZGRsZUNvZWZfMzJfcTMxWzQ4XTsKK2V4dGVybiBjb25zdCBxMzFfdCB0d2lkZGxlQ29lZl82NF9xMzFbOTZdOworZXh0ZXJuIGNvbnN0IHEzMV90IHR3aWRkbGVDb2VmXzEyOF9xMzFbMTkyXTsKK2V4dGVybiBjb25zdCBxMzFfdCB0d2lkZGxlQ29lZl8yNTZfcTMxWzM4NF07CitleHRlcm4gY29uc3QgcTMxX3QgdHdpZGRsZUNvZWZfNTEyX3EzMVs3NjhdOworZXh0ZXJuIGNvbnN0IHEzMV90IHR3aWRkbGVDb2VmXzEwMjRfcTMxWzE1MzZdOworZXh0ZXJuIGNvbnN0IHEzMV90IHR3aWRkbGVDb2VmXzIwNDhfcTMxWzMwNzJdOworZXh0ZXJuIGNvbnN0IHEzMV90IHR3aWRkbGVDb2VmXzQwOTZfcTMxWzYxNDRdOworZXh0ZXJuIGNvbnN0IHExNV90IHR3aWRkbGVDb2VmXzE2X3ExNVsyNF07CitleHRlcm4gY29uc3QgcTE1X3QgdHdpZGRsZUNvZWZfMzJfcTE1WzQ4XTsKK2V4dGVybiBjb25zdCBxMTVfdCB0d2lkZGxlQ29lZl82NF9xMTVbOTZdOworZXh0ZXJuIGNvbnN0IHExNV90IHR3aWRkbGVDb2VmXzEyOF9xMTVbMTkyXTsKK2V4dGVybiBjb25zdCBxMTVfdCB0d2lkZGxlQ29lZl8yNTZfcTE1WzM4NF07CitleHRlcm4gY29uc3QgcTE1X3QgdHdpZGRsZUNvZWZfNTEyX3ExNVs3NjhdOworZXh0ZXJuIGNvbnN0IHExNV90IHR3aWRkbGVDb2VmXzEwMjRfcTE1WzE1MzZdOworZXh0ZXJuIGNvbnN0IHExNV90IHR3aWRkbGVDb2VmXzIwNDhfcTE1WzMwNzJdOworZXh0ZXJuIGNvbnN0IHExNV90IHR3aWRkbGVDb2VmXzQwOTZfcTE1WzYxNDRdOworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCB0d2lkZGxlQ29lZl9yZmZ0XzMyWzMyXTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfcmZmdF82NFs2NF07CitleHRlcm4gY29uc3QgZmxvYXQzMl90IHR3aWRkbGVDb2VmX3JmZnRfMTI4WzEyOF07CitleHRlcm4gY29uc3QgZmxvYXQzMl90IHR3aWRkbGVDb2VmX3JmZnRfMjU2WzI1Nl07CitleHRlcm4gY29uc3QgZmxvYXQzMl90IHR3aWRkbGVDb2VmX3JmZnRfNTEyWzUxMl07CitleHRlcm4gY29uc3QgZmxvYXQzMl90IHR3aWRkbGVDb2VmX3JmZnRfMTAyNFsxMDI0XTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfcmZmdF8yMDQ4WzIwNDhdOworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCB0d2lkZGxlQ29lZl9yZmZ0XzQwOTZbNDA5Nl07CisKKworLyogZmxvYXRpbmctcG9pbnQgYml0IHJldmVyc2FsIHRhYmxlcyAqLworI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFX18xNl9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCkyMCAgKQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFX18zMl9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCk0OCAgKQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFX182NF9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCk1NiAgKQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFXzEyOF9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCkyMDggKQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFXzI1Nl9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCk0NDAgKQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFXzUxMl9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCk0NDggKQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFMTAyNF9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCkxODAwKQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFMjA0OF9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCkzODA4KQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFNDA5Nl9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCk0MDMyKQorCitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZTE2W0FSTUJJVFJFVklOREVYVEFCTEVfXzE2X1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZTMyW0FSTUJJVFJFVklOREVYVEFCTEVfXzMyX1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZTY0W0FSTUJJVFJFVklOREVYVEFCTEVfXzY0X1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZTEyOFtBUk1CSVRSRVZJTkRFWFRBQkxFXzEyOF9UQUJMRV9MRU5HVEhdOworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldkluZGV4VGFibGUyNTZbQVJNQklUUkVWSU5ERVhUQUJMRV8yNTZfVEFCTEVfTEVOR1RIXTsKK2V4dGVybiBjb25zdCB1aW50MTZfdCBhcm1CaXRSZXZJbmRleFRhYmxlNTEyW0FSTUJJVFJFVklOREVYVEFCTEVfNTEyX1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZTEwMjRbQVJNQklUUkVWSU5ERVhUQUJMRTEwMjRfVEFCTEVfTEVOR1RIXTsKK2V4dGVybiBjb25zdCB1aW50MTZfdCBhcm1CaXRSZXZJbmRleFRhYmxlMjA0OFtBUk1CSVRSRVZJTkRFWFRBQkxFMjA0OF9UQUJMRV9MRU5HVEhdOworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldkluZGV4VGFibGU0MDk2W0FSTUJJVFJFVklOREVYVEFCTEU0MDk2X1RBQkxFX0xFTkdUSF07CisKKy8qIGZpeGVkLXBvaW50IGJpdCByZXZlcnNhbCB0YWJsZXMgKi8KKyNkZWZpbmUgQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF9fXzE2X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTEyICApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfRklYRURfX18zMl9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCkyNCAgKQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFX0ZJWEVEX19fNjRfVEFCTEVfTEVOR1RIICgodWludDE2X3QpNTYgICkKKyNkZWZpbmUgQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF9fMTI4X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTExMiApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfRklYRURfXzI1Nl9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCkyNDAgKQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFX0ZJWEVEX181MTJfVEFCTEVfTEVOR1RIICgodWludDE2X3QpNDgwICkKKyNkZWZpbmUgQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF8xMDI0X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTk5MiApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfRklYRURfMjA0OF9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCkxOTg0KQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFX0ZJWEVEXzQwOTZfVEFCTEVfTEVOR1RIICgodWludDE2X3QpNDAzMikKKworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldkluZGV4VGFibGVfZml4ZWRfMTZbQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF9fXzE2X1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZV9maXhlZF8zMltBUk1CSVRSRVZJTkRFWFRBQkxFX0ZJWEVEX19fMzJfVEFCTEVfTEVOR1RIXTsKK2V4dGVybiBjb25zdCB1aW50MTZfdCBhcm1CaXRSZXZJbmRleFRhYmxlX2ZpeGVkXzY0W0FSTUJJVFJFVklOREVYVEFCTEVfRklYRURfX182NF9UQUJMRV9MRU5HVEhdOworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldkluZGV4VGFibGVfZml4ZWRfMTI4W0FSTUJJVFJFVklOREVYVEFCTEVfRklYRURfXzEyOF9UQUJMRV9MRU5HVEhdOworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldkluZGV4VGFibGVfZml4ZWRfMjU2W0FSTUJJVFJFVklOREVYVEFCTEVfRklYRURfXzI1Nl9UQUJMRV9MRU5HVEhdOworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldkluZGV4VGFibGVfZml4ZWRfNTEyW0FSTUJJVFJFVklOREVYVEFCTEVfRklYRURfXzUxMl9UQUJMRV9MRU5HVEhdOworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldkluZGV4VGFibGVfZml4ZWRfMTAyNFtBUk1CSVRSRVZJTkRFWFRBQkxFX0ZJWEVEXzEwMjRfVEFCTEVfTEVOR1RIXTsKK2V4dGVybiBjb25zdCB1aW50MTZfdCBhcm1CaXRSZXZJbmRleFRhYmxlX2ZpeGVkXzIwNDhbQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF8yMDQ4X1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZV9maXhlZF80MDk2W0FSTUJJVFJFVklOREVYVEFCTEVfRklYRURfNDA5Nl9UQUJMRV9MRU5HVEhdOworCisvKiBUYWJsZXMgZm9yIEZhc3QgTWF0aCBTaW5lIGFuZCBDb3NpbmUgKi8KK2V4dGVybiBjb25zdCBmbG9hdDMyX3Qgc2luVGFibGVfZjMyW0ZBU1RfTUFUSF9UQUJMRV9TSVpFICsgMV07CitleHRlcm4gY29uc3QgcTMxX3Qgc2luVGFibGVfcTMxW0ZBU1RfTUFUSF9UQUJMRV9TSVpFICsgMV07CitleHRlcm4gY29uc3QgcTE1X3Qgc2luVGFibGVfcTE1W0ZBU1RfTUFUSF9UQUJMRV9TSVpFICsgMV07CisKKyNlbmRpZiAvKiAgQVJNX0NPTU1PTl9UQUJMRVNfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvYXJtX2NvbnN0X3N0cnVjdHMuaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2FybV9jb25zdF9zdHJ1Y3RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2ZDA2ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2FybV9jb25zdF9zdHJ1Y3RzLmgKQEAgLTAsMCArMSw3OSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogJERhdGU6ICAgICAgICAxOS4gTWFyY2ggMjAxNQorKiAkUmV2aXNpb246IAlWLjEuNC41CisqCisqIFByb2plY3Q6IAkgICAgQ01TSVMgRFNQIExpYnJhcnkKKyogVGl0bGU6CSAgICBhcm1fY29uc3Rfc3RydWN0cy5oCisqCisqIERlc2NyaXB0aW9uOglUaGlzIGZpbGUgaGFzIGNvbnN0YW50IHN0cnVjdHMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgZm9yCisqICAgICAgICAgICAgICB1c2VyIGNvbnZlbmllbmNlLiAgRm9yIGV4YW1wbGUsIHNvbWUgY2FuIGJlIGdpdmVuIGFzCisqICAgICAgICAgICAgICBhcmd1bWVudHMgdG8gdGhlIGFybV9jZmZ0X2YzMigpIGZ1bmN0aW9uLgorKgorKiBUYXJnZXQgUHJvY2Vzc29yOiBDb3J0ZXgtTTQvQ29ydGV4LU0zCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisqICAgICBkaXN0cmlidXRpb24uCisqICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBMSU1JVEVEIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworKiAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisqICAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIF9BUk1fQ09OU1RfU1RSVUNUU19ICisjZGVmaW5lIF9BUk1fQ09OU1RfU1RSVUNUU19ICisKKyNpbmNsdWRlICJhcm1fbWF0aC5oIgorI2luY2x1ZGUgImFybV9jb21tb25fdGFibGVzLmgiCisKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9mMzIgYXJtX2NmZnRfc1JfZjMyX2xlbjE2OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX2YzMiBhcm1fY2ZmdF9zUl9mMzJfbGVuMzI7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfZjMyIGFybV9jZmZ0X3NSX2YzMl9sZW42NDsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9mMzIgYXJtX2NmZnRfc1JfZjMyX2xlbjEyODsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9mMzIgYXJtX2NmZnRfc1JfZjMyX2xlbjI1NjsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9mMzIgYXJtX2NmZnRfc1JfZjMyX2xlbjUxMjsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9mMzIgYXJtX2NmZnRfc1JfZjMyX2xlbjEwMjQ7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfZjMyIGFybV9jZmZ0X3NSX2YzMl9sZW4yMDQ4OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX2YzMiBhcm1fY2ZmdF9zUl9mMzJfbGVuNDA5NjsKKworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3EzMSBhcm1fY2ZmdF9zUl9xMzFfbGVuMTY7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTMxIGFybV9jZmZ0X3NSX3EzMV9sZW4zMjsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMzEgYXJtX2NmZnRfc1JfcTMxX2xlbjY0OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3EzMSBhcm1fY2ZmdF9zUl9xMzFfbGVuMTI4OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3EzMSBhcm1fY2ZmdF9zUl9xMzFfbGVuMjU2OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3EzMSBhcm1fY2ZmdF9zUl9xMzFfbGVuNTEyOworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3EzMSBhcm1fY2ZmdF9zUl9xMzFfbGVuMTAyNDsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMzEgYXJtX2NmZnRfc1JfcTMxX2xlbjIwNDg7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTMxIGFybV9jZmZ0X3NSX3EzMV9sZW40MDk2OworCisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTE1IGFybV9jZmZ0X3NSX3ExNV9sZW4xNjsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMTUgYXJtX2NmZnRfc1JfcTE1X2xlbjMyOworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3ExNSBhcm1fY2ZmdF9zUl9xMTVfbGVuNjQ7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTE1IGFybV9jZmZ0X3NSX3ExNV9sZW4xMjg7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTE1IGFybV9jZmZ0X3NSX3ExNV9sZW4yNTY7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTE1IGFybV9jZmZ0X3NSX3ExNV9sZW41MTI7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTE1IGFybV9jZmZ0X3NSX3ExNV9sZW4xMDI0OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3ExNSBhcm1fY2ZmdF9zUl9xMTVfbGVuMjA0ODsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMTUgYXJtX2NmZnRfc1JfcTE1X2xlbjQwOTY7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvYXJtX21hdGguaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2FybV9tYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzZjhhOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2FybV9tYXRoLmgKQEAgLTAsMCArMSw3MTU0IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIENvcHlyaWdodCAoQykgMjAxMC0yMDE1IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAkRGF0ZTogICAgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyogJFJldmlzaW9uOiAgICBWMS40LjUgYgorKgorKiBQcm9qZWN0OiAgICAgIENNU0lTIERTUCBMaWJyYXJ5CisqIFRpdGxlOiAgICAgICAgYXJtX21hdGguaAorKgorKiBEZXNjcmlwdGlvbjogIFB1YmxpYyBoZWFkZXIgZmlsZSBmb3IgQ01TSVMgRFNQIExpYnJhcnkKKyoKKyogVGFyZ2V0IFByb2Nlc3NvcjogQ29ydGV4LU03L0NvcnRleC1NNC9Db3J0ZXgtTTMvQ29ydGV4LU0wCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisqICAgICBkaXN0cmlidXRpb24uCisqICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBMSU1JVEVEIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworKiAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisqICAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgICBcbWFpbnBhZ2UgQ01TSVMgRFNQIFNvZnR3YXJlIExpYnJhcnkKKyAgICoKKyAgICogSW50cm9kdWN0aW9uCisgICAqIC0tLS0tLS0tLS0tLQorICAgKgorICAgKiBUaGlzIHVzZXIgbWFudWFsIGRlc2NyaWJlcyB0aGUgQ01TSVMgRFNQIHNvZnR3YXJlIGxpYnJhcnksCisgICAqIGEgc3VpdGUgb2YgY29tbW9uIHNpZ25hbCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyBmb3IgdXNlIG9uIENvcnRleC1NIHByb2Nlc3NvciBiYXNlZCBkZXZpY2VzLgorICAgKgorICAgKiBUaGUgbGlicmFyeSBpcyBkaXZpZGVkIGludG8gYSBudW1iZXIgb2YgZnVuY3Rpb25zIGVhY2ggY292ZXJpbmcgYSBzcGVjaWZpYyBjYXRlZ29yeToKKyAgICogLSBCYXNpYyBtYXRoIGZ1bmN0aW9ucworICAgKiAtIEZhc3QgbWF0aCBmdW5jdGlvbnMKKyAgICogLSBDb21wbGV4IG1hdGggZnVuY3Rpb25zCisgICAqIC0gRmlsdGVycworICAgKiAtIE1hdHJpeCBmdW5jdGlvbnMKKyAgICogLSBUcmFuc2Zvcm1zCisgICAqIC0gTW90b3IgY29udHJvbCBmdW5jdGlvbnMKKyAgICogLSBTdGF0aXN0aWNhbCBmdW5jdGlvbnMKKyAgICogLSBTdXBwb3J0IGZ1bmN0aW9ucworICAgKiAtIEludGVycG9sYXRpb24gZnVuY3Rpb25zCisgICAqCisgICAqIFRoZSBsaWJyYXJ5IGhhcyBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIG9wZXJhdGluZyBvbiA4LWJpdCBpbnRlZ2VycywgMTYtYml0IGludGVnZXJzLAorICAgKiAzMi1iaXQgaW50ZWdlciBhbmQgMzItYml0IGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKyAgICoKKyAgICogVXNpbmcgdGhlIExpYnJhcnkKKyAgICogLS0tLS0tLS0tLS0tCisgICAqCisgICAqIFRoZSBsaWJyYXJ5IGluc3RhbGxlciBjb250YWlucyBwcmVidWlsdCB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyaWVzIGluIHRoZSA8Y29kZT5MaWI8L2NvZGU+IGZvbGRlci4KKyAgICogLSBhcm1fY29ydGV4TTdsZmRwX21hdGgubGliIChMaXR0bGUgZW5kaWFuIGFuZCBEb3VibGUgUHJlY2lzaW9uIEZsb2F0aW5nIFBvaW50IFVuaXQgb24gQ29ydGV4LU03KQorICAgKiAtIGFybV9jb3J0ZXhNN2JmZHBfbWF0aC5saWIgKEJpZyBlbmRpYW4gYW5kIERvdWJsZSBQcmVjaXNpb24gRmxvYXRpbmcgUG9pbnQgVW5pdCBvbiBDb3J0ZXgtTTcpCisgICAqIC0gYXJtX2NvcnRleE03bGZzcF9tYXRoLmxpYiAoTGl0dGxlIGVuZGlhbiBhbmQgU2luZ2xlIFByZWNpc2lvbiBGbG9hdGluZyBQb2ludCBVbml0IG9uIENvcnRleC1NNykKKyAgICogLSBhcm1fY29ydGV4TTdiZnNwX21hdGgubGliIChCaWcgZW5kaWFuIGFuZCBTaW5nbGUgUHJlY2lzaW9uIEZsb2F0aW5nIFBvaW50IFVuaXQgb24gQ29ydGV4LU03KQorICAgKiAtIGFybV9jb3J0ZXhNN2xfbWF0aC5saWIgKExpdHRsZSBlbmRpYW4gb24gQ29ydGV4LU03KQorICAgKiAtIGFybV9jb3J0ZXhNN2JfbWF0aC5saWIgKEJpZyBlbmRpYW4gb24gQ29ydGV4LU03KQorICAgKiAtIGFybV9jb3J0ZXhNNGxmX21hdGgubGliIChMaXR0bGUgZW5kaWFuIGFuZCBGbG9hdGluZyBQb2ludCBVbml0IG9uIENvcnRleC1NNCkKKyAgICogLSBhcm1fY29ydGV4TTRiZl9tYXRoLmxpYiAoQmlnIGVuZGlhbiBhbmQgRmxvYXRpbmcgUG9pbnQgVW5pdCBvbiBDb3J0ZXgtTTQpCisgICAqIC0gYXJtX2NvcnRleE00bF9tYXRoLmxpYiAoTGl0dGxlIGVuZGlhbiBvbiBDb3J0ZXgtTTQpCisgICAqIC0gYXJtX2NvcnRleE00Yl9tYXRoLmxpYiAoQmlnIGVuZGlhbiBvbiBDb3J0ZXgtTTQpCisgICAqIC0gYXJtX2NvcnRleE0zbF9tYXRoLmxpYiAoTGl0dGxlIGVuZGlhbiBvbiBDb3J0ZXgtTTMpCisgICAqIC0gYXJtX2NvcnRleE0zYl9tYXRoLmxpYiAoQmlnIGVuZGlhbiBvbiBDb3J0ZXgtTTMpCisgICAqIC0gYXJtX2NvcnRleE0wbF9tYXRoLmxpYiAoTGl0dGxlIGVuZGlhbiBvbiBDb3J0ZXgtTTAgLyBDb3J0ZXhNMCspCisgICAqIC0gYXJtX2NvcnRleE0wYl9tYXRoLmxpYiAoQmlnIGVuZGlhbiBvbiBDb3J0ZXgtTTAgLyBDb3J0ZXhNMCspCisgICAqCisgICAqIFRoZSBsaWJyYXJ5IGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgaW4gdGhlIHB1YmxpYyBmaWxlIDxjb2RlPmFybV9tYXRoLmg8L2NvZGU+IHdoaWNoIGlzIHBsYWNlZCBpbiB0aGUgPGNvZGU+SW5jbHVkZTwvY29kZT4gZm9sZGVyLgorICAgKiBTaW1wbHkgaW5jbHVkZSB0aGlzIGZpbGUgYW5kIGxpbmsgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcnkgaW4gdGhlIGFwcGxpY2F0aW9uIGFuZCBiZWdpbiBjYWxsaW5nIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucy4gVGhlIExpYnJhcnkgc3VwcG9ydHMgc2luZ2xlCisgICAqIHB1YmxpYyBoZWFkZXIgZmlsZSA8Y29kZT4gYXJtX21hdGguaDwvY29kZT4gZm9yIENvcnRleC1NNy9NNC9NMy9NMC9NMCsgd2l0aCBsaXR0bGUgZW5kaWFuIGFuZCBiaWcgZW5kaWFuLiBTYW1lIGhlYWRlciBmaWxlIHdpbGwgYmUgdXNlZCBmb3IgZmxvYXRpbmcgcG9pbnQgdW5pdChGUFUpIHZhcmlhbnRzLgorICAgKiBEZWZpbmUgdGhlIGFwcHJvcHJpYXRlIHByZSBwcm9jZXNzb3IgTUFDUk8gQVJNX01BVEhfQ003IG9yIEFSTV9NQVRIX0NNNCBvciAgQVJNX01BVEhfQ00zIG9yCisgICAqIEFSTV9NQVRIX0NNMCBvciBBUk1fTUFUSF9DTTBQTFVTIGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpbiB0aGUgYXBwbGljYXRpb24uCisgICAqCisgICAqIEV4YW1wbGVzCisgICAqIC0tLS0tLS0tCisgICAqCisgICAqIFRoZSBsaWJyYXJ5IHNoaXBzIHdpdGggYSBudW1iZXIgb2YgZXhhbXBsZXMgd2hpY2ggZGVtb25zdHJhdGUgaG93IHRvIHVzZSB0aGUgbGlicmFyeSBmdW5jdGlvbnMuCisgICAqCisgICAqIFRvb2xjaGFpbiBTdXBwb3J0CisgICAqIC0tLS0tLS0tLS0tLQorICAgKgorICAgKiBUaGUgbGlicmFyeSBoYXMgYmVlbiBkZXZlbG9wZWQgYW5kIHRlc3RlZCB3aXRoIE1ESy1BUk0gdmVyc2lvbiA1LjE0LjAuMAorICAgKiBUaGUgbGlicmFyeSBpcyBiZWluZyB0ZXN0ZWQgaW4gR0NDIGFuZCBJQVIgdG9vbGNoYWlucyBhbmQgdXBkYXRlcyBvbiB0aGlzIGFjdGl2aXR5IHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgc2hvcnRseS4KKyAgICoKKyAgICogQnVpbGRpbmcgdGhlIExpYnJhcnkKKyAgICogLS0tLS0tLS0tLS0tCisgICAqCisgICAqIFRoZSBsaWJyYXJ5IGluc3RhbGxlciBjb250YWlucyBhIHByb2plY3QgZmlsZSB0byByZSBidWlsZCBsaWJyYXJpZXMgb24gTURLLUFSTSBUb29sIGNoYWluIGluIHRoZSA8Y29kZT5DTVNJU1xcRFNQX0xpYlxcU291cmNlXFxBUk08L2NvZGU+IGZvbGRlci4KKyAgICogLSBhcm1fY29ydGV4TV9tYXRoLnV2cHJvangKKyAgICoKKyAgICoKKyAgICogVGhlIGxpYnJhcmllcyBjYW4gYmUgYnVpbHQgYnkgb3BlbmluZyB0aGUgYXJtX2NvcnRleE1fbWF0aC51dnByb2p4IHByb2plY3QgaW4gTURLLUFSTSwgc2VsZWN0aW5nIGEgc3BlY2lmaWMgdGFyZ2V0LCBhbmQgZGVmaW5pbmcgdGhlIG9wdGlvbmFsIHByZSBwcm9jZXNzb3IgTUFDUk9zIGRldGFpbGVkIGFib3ZlLgorICAgKgorICAgKiBQcmUtcHJvY2Vzc29yIE1hY3JvcworICAgKiAtLS0tLS0tLS0tLS0KKyAgICoKKyAgICogRWFjaCBsaWJyYXJ5IHByb2plY3QgaGF2ZSBkaWZmZXJhbnQgcHJlLXByb2Nlc3NvciBtYWNyb3MuCisgICAqCisgICAqIC0gVU5BTElHTkVEX1NVUFBPUlRfRElTQUJMRToKKyAgICoKKyAgICogRGVmaW5lIG1hY3JvIFVOQUxJR05FRF9TVVBQT1JUX0RJU0FCTEUsIElmIHRoZSBzaWxpY29uIGRvZXMgbm90IHN1cHBvcnQgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MKKyAgICoKKyAgICogLSBBUk1fTUFUSF9CSUdfRU5ESUFOOgorICAgKgorICAgKiBEZWZpbmUgbWFjcm8gQVJNX01BVEhfQklHX0VORElBTiB0byBidWlsZCB0aGUgbGlicmFyeSBmb3IgYmlnIGVuZGlhbiB0YXJnZXRzLiBCeSBkZWZhdWx0IGxpYnJhcnkgYnVpbGRzIGZvciBsaXR0bGUgZW5kaWFuIHRhcmdldHMuCisgICAqCisgICAqIC0gQVJNX01BVEhfTUFUUklYX0NIRUNLOgorICAgKgorICAgKiBEZWZpbmUgbWFjcm8gQVJNX01BVEhfTUFUUklYX0NIRUNLIGZvciBjaGVja2luZyBvbiB0aGUgaW5wdXQgYW5kIG91dHB1dCBzaXplcyBvZiBtYXRyaWNlcworICAgKgorICAgKiAtIEFSTV9NQVRIX1JPVU5ESU5HOgorICAgKgorICAgKiBEZWZpbmUgbWFjcm8gQVJNX01BVEhfUk9VTkRJTkcgZm9yIHJvdW5kaW5nIG9uIHN1cHBvcnQgZnVuY3Rpb25zCisgICAqCisgICAqIC0gQVJNX01BVEhfQ014OgorICAgKgorICAgKiBEZWZpbmUgbWFjcm8gQVJNX01BVEhfQ000IGZvciBidWlsZGluZyB0aGUgbGlicmFyeSBvbiBDb3J0ZXgtTTQgdGFyZ2V0LCBBUk1fTUFUSF9DTTMgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb24gQ29ydGV4LU0zIHRhcmdldAorICAgKiBhbmQgQVJNX01BVEhfQ00wIGZvciBidWlsZGluZyBsaWJyYXJ5IG9uIENvcnRleC1NMCB0YXJnZXQsIEFSTV9NQVRIX0NNMFBMVVMgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb24gQ29ydGV4LU0wKyB0YXJnZXQsIGFuZAorICAgKiBBUk1fTUFUSF9DTTcgZm9yIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5IG9uIGNvcnRleC1NNy4KKyAgICoKKyAgICogLSBfX0ZQVV9QUkVTRU5UOgorICAgKgorICAgKiBJbml0aWFsaXplIG1hY3JvIF9fRlBVX1BSRVNFTlQgPSAxIHdoZW4gYnVpbGRpbmcgb24gRlBVIHN1cHBvcnRlZCBUYXJnZXRzLiBFbmFibGUgdGhpcyBtYWNybyBmb3IgTTRiZiBhbmQgTTRsZiBsaWJyYXJpZXMKKyAgICoKKyAgICogPGhyPgorICAgKiBDTVNJUy1EU1AgaW4gQVJNOjpDTVNJUyBQYWNrCisgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqCisgICAqIFRoZSBmb2xsb3dpbmcgZmlsZXMgcmVsZXZhbnQgdG8gQ01TSVMtRFNQIGFyZSBwcmVzZW50IGluIHRoZSA8Yj5BUk06OkNNU0lTPC9iPiBQYWNrIGRpcmVjdG9yaWVzOgorICAgKiB8RmlsZS9Gb2xkZXIgICAgICAgICAgICAgICAgICAgfENvbnRlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAqIHxcYiBDTVNJU1xcRG9jdW1lbnRhdGlvblxcRFNQICB8IFRoaXMgZG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKiB8XGIgQ01TSVNcXERTUF9MaWIgICAgICAgICAgICAgfCBTb2Z0d2FyZSBsaWNlbnNlIGFncmVlbWVudCAobGljZW5zZS50eHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICogfFxiIENNU0lTXFxEU1BfTGliXFxFeGFtcGxlcyAgIHwgRXhhbXBsZSBwcm9qZWN0cyBkZW1vbnN0cmF0aW5nIHRoZSB1c2FnZSBvZiB0aGUgbGlicmFyeSBmdW5jdGlvbnMgICAgICB8CisgICAqIHxcYiBDTVNJU1xcRFNQX0xpYlxcU291cmNlICAgICB8IFNvdXJjZSBmaWxlcyBmb3IgcmVidWlsZGluZyB0aGUgbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKgorICAgKiA8aHI+CisgICAqIFJldmlzaW9uIEhpc3Rvcnkgb2YgQ01TSVMtRFNQCisgICAqIC0tLS0tLS0tLS0tLQorICAgKiBQbGVhc2UgcmVmZXIgdG8gXHJlZiBDaGFuZ2VMb2dfcGcuCisgICAqCisgICAqIENvcHlyaWdodCBOb3RpY2UKKyAgICogLS0tLS0tLS0tLS0tCisgICAqCisgICAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE1IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgKi8KKworCisvKioKKyAqIEBkZWZncm91cCBncm91cE1hdGggQmFzaWMgTWF0aCBGdW5jdGlvbnMKKyAqLworCisvKioKKyAqIEBkZWZncm91cCBncm91cEZhc3RNYXRoIEZhc3QgTWF0aCBGdW5jdGlvbnMKKyAqIFRoaXMgc2V0IG9mIGZ1bmN0aW9ucyBwcm92aWRlcyBhIGZhc3QgYXBwcm94aW1hdGlvbiB0byBzaW5lLCBjb3NpbmUsIGFuZCBzcXVhcmUgcm9vdC4KKyAqIEFzIGNvbXBhcmVkIHRvIG1vc3Qgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgQ01TSVMgbWF0aCBsaWJyYXJ5LCB0aGUgZmFzdCBtYXRoIGZ1bmN0aW9ucworICogb3BlcmF0ZSBvbiBpbmRpdmlkdWFsIHZhbHVlcyBhbmQgbm90IGFycmF5cy4KKyAqIFRoZXJlIGFyZSBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIFExNSwgUTMxLCBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YS4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgZ3JvdXBDbXBseE1hdGggQ29tcGxleCBNYXRoIEZ1bmN0aW9ucworICogVGhpcyBzZXQgb2YgZnVuY3Rpb25zIG9wZXJhdGVzIG9uIGNvbXBsZXggZGF0YSB2ZWN0b3JzLgorICogVGhlIGRhdGEgaW4gdGhlIGNvbXBsZXggYXJyYXlzIGlzIHN0b3JlZCBpbiBhbiBpbnRlcmxlYXZlZCBmYXNoaW9uCisgKiAocmVhbCwgaW1hZywgcmVhbCwgaW1hZywgLi4uKS4KKyAqIEluIHRoZSBBUEkgZnVuY3Rpb25zLCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgaW4gYSBjb21wbGV4IGFycmF5IHJlZmVycworICogdG8gdGhlIG51bWJlciBvZiBjb21wbGV4IHZhbHVlczsgdGhlIGFycmF5IGNvbnRhaW5zIHR3aWNlIHRoaXMgbnVtYmVyIG9mCisgKiByZWFsIHZhbHVlcy4KKyAqLworCisvKioKKyAqIEBkZWZncm91cCBncm91cEZpbHRlcnMgRmlsdGVyaW5nIEZ1bmN0aW9ucworICovCisKKy8qKgorICogQGRlZmdyb3VwIGdyb3VwTWF0cml4IE1hdHJpeCBGdW5jdGlvbnMKKyAqCisgKiBUaGlzIHNldCBvZiBmdW5jdGlvbnMgcHJvdmlkZXMgYmFzaWMgbWF0cml4IG1hdGggb3BlcmF0aW9ucy4KKyAqIFRoZSBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBtYXRyaXggZGF0YSBzdHJ1Y3R1cmVzLiAgRm9yIGV4YW1wbGUsCisgKiB0aGUgdHlwZQorICogZGVmaW5pdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUgaXMgc2hvd24KKyAqIGJlbG93OgorICogPHByZT4KKyAqICAgICB0eXBlZGVmIHN0cnVjdAorICogICAgIHsKKyAqICAgICAgIHVpbnQxNl90IG51bVJvd3M7ICAgICAvLyBudW1iZXIgb2Ygcm93cyBvZiB0aGUgbWF0cml4LgorICogICAgICAgdWludDE2X3QgbnVtQ29sczsgICAgIC8vIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBtYXRyaXguCisgKiAgICAgICBmbG9hdDMyX3QgKnBEYXRhOyAgICAgLy8gcG9pbnRzIHRvIHRoZSBkYXRhIG9mIHRoZSBtYXRyaXguCisgKiAgICAgfSBhcm1fbWF0cml4X2luc3RhbmNlX2YzMjsKKyAqIDwvcHJlPgorICogVGhlcmUgYXJlIHNpbWlsYXIgZGVmaW5pdGlvbnMgZm9yIFExNSBhbmQgUTMxIGRhdGEgdHlwZXMuCisgKgorICogVGhlIHN0cnVjdHVyZSBzcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIG1hdHJpeCBhbmQgdGhlbiBwb2ludHMgdG8KKyAqIGFuIGFycmF5IG9mIGRhdGEuICBUaGUgYXJyYXkgaXMgb2Ygc2l6ZSA8Y29kZT5udW1Sb3dzIFggbnVtQ29sczwvY29kZT4KKyAqIGFuZCB0aGUgdmFsdWVzIGFyZSBhcnJhbmdlZCBpbiByb3cgb3JkZXIuICBUaGF0IGlzLCB0aGUKKyAqIG1hdHJpeCBlbGVtZW50IChpLCBqKSBpcyBzdG9yZWQgYXQ6CisgKiA8cHJlPgorICogICAgIHBEYXRhW2kqbnVtQ29scyArIGpdCisgKiA8L3ByZT4KKyAqCisgKiBccGFyIEluaXQgRnVuY3Rpb25zCisgKiBUaGVyZSBpcyBhbiBhc3NvY2lhdGVkIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBlYWNoIHR5cGUgb2YgbWF0cml4CisgKiBkYXRhIHN0cnVjdHVyZS4KKyAqIFRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBzZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIGludGVybmFsIHN0cnVjdHVyZSBmaWVsZHMuCisgKiBSZWZlciB0byB0aGUgZnVuY3Rpb24gPGNvZGU+YXJtX21hdF9pbml0X2YzMigpPC9jb2RlPiwgPGNvZGU+YXJtX21hdF9pbml0X3EzMSgpPC9jb2RlPgorICogYW5kIDxjb2RlPmFybV9tYXRfaW5pdF9xMTUoKTwvY29kZT4gZm9yIGZsb2F0aW5nLXBvaW50LCBRMzEgYW5kIFExNSB0eXBlcywgIHJlc3BlY3RpdmVseS4KKyAqCisgKiBccGFyCisgKiBVc2Ugb2YgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiBIb3dldmVyLCBpZiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyB1c2VkCisgKiB0aGVuIHRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgY2Fubm90IGJlIHBsYWNlZCBpbnRvIGEgY29uc3QgZGF0YSBzZWN0aW9uLgorICogVG8gcGxhY2UgdGhlIGluc3RhbmNlIHN0cnVjdHVyZSBpbiBhIGNvbnN0IGRhdGEKKyAqIHNlY3Rpb24sIG1hbnVhbGx5IGluaXRpYWxpemUgdGhlIGRhdGEgc3RydWN0dXJlLiAgRm9yIGV4YW1wbGU6CisgKiA8cHJlPgorICogPGNvZGU+YXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgUyA9IHtuUm93cywgbkNvbHVtbnMsIHBEYXRhfTs8L2NvZGU+CisgKiA8Y29kZT5hcm1fbWF0cml4X2luc3RhbmNlX3EzMSBTID0ge25Sb3dzLCBuQ29sdW1ucywgcERhdGF9OzwvY29kZT4KKyAqIDxjb2RlPmFybV9tYXRyaXhfaW5zdGFuY2VfcTE1IFMgPSB7blJvd3MsIG5Db2x1bW5zLCBwRGF0YX07PC9jb2RlPgorICogPC9wcmU+CisgKiB3aGVyZSA8Y29kZT5uUm93czwvY29kZT4gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygcm93cywgPGNvZGU+bkNvbHVtbnM8L2NvZGU+CisgKiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjb2x1bW5zLCBhbmQgPGNvZGU+cERhdGE8L2NvZGU+IHBvaW50cyB0byB0aGUKKyAqIGRhdGEgYXJyYXkuCisgKgorICogXHBhciBTaXplIENoZWNraW5nCisgKiBCeSBkZWZhdWx0IGFsbCBvZiB0aGUgbWF0cml4IGZ1bmN0aW9ucyBwZXJmb3JtIHNpemUgY2hlY2tpbmcgb24gdGhlIGlucHV0IGFuZAorICogb3V0cHV0IG1hdHJpY2VzLiAgRm9yIGV4YW1wbGUsIHRoZSBtYXRyaXggYWRkaXRpb24gZnVuY3Rpb24gdmVyaWZpZXMgdGhhdCB0aGUKKyAqIHR3byBpbnB1dCBtYXRyaWNlcyBhbmQgdGhlIG91dHB1dCBtYXRyaXggYWxsIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHJvd3MgYW5kCisgKiBjb2x1bW5zLiAgSWYgdGhlIHNpemUgY2hlY2sgZmFpbHMgdGhlIGZ1bmN0aW9ucyByZXR1cm46CisgKiA8cHJlPgorICogICAgIEFSTV9NQVRIX1NJWkVfTUlTTUFUQ0gKKyAqIDwvcHJlPgorICogT3RoZXJ3aXNlIHRoZSBmdW5jdGlvbnMgcmV0dXJuCisgKiA8cHJlPgorICogICAgIEFSTV9NQVRIX1NVQ0NFU1MKKyAqIDwvcHJlPgorICogVGhlcmUgaXMgc29tZSBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXRyaXggc2l6ZSBjaGVja2luZy4KKyAqIFRoZSBtYXRyaXggc2l6ZSBjaGVja2luZyBpcyBlbmFibGVkIHZpYSB0aGUgXCNkZWZpbmUKKyAqIDxwcmU+CisgKiAgICAgQVJNX01BVEhfTUFUUklYX0NIRUNLCisgKiA8L3ByZT4KKyAqIHdpdGhpbiB0aGUgbGlicmFyeSBwcm9qZWN0IHNldHRpbmdzLiAgQnkgZGVmYXVsdCB0aGlzIG1hY3JvIGlzIGRlZmluZWQKKyAqIGFuZCBzaXplIGNoZWNraW5nIGlzIGVuYWJsZWQuICBCeSBjaGFuZ2luZyB0aGUgcHJvamVjdCBzZXR0aW5ncyBhbmQKKyAqIHVuZGVmaW5pbmcgdGhpcyBtYWNybyBzaXplIGNoZWNraW5nIGlzIGVsaW1pbmF0ZWQgYW5kIHRoZSBmdW5jdGlvbnMKKyAqIHJ1biBhIGJpdCBmYXN0ZXIuICBXaXRoIHNpemUgY2hlY2tpbmcgZGlzYWJsZWQgdGhlIGZ1bmN0aW9ucyBhbHdheXMKKyAqIHJldHVybiA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPi4KKyAqLworCisvKioKKyAqIEBkZWZncm91cCBncm91cFRyYW5zZm9ybXMgVHJhbnNmb3JtIEZ1bmN0aW9ucworICovCisKKy8qKgorICogQGRlZmdyb3VwIGdyb3VwQ29udHJvbGxlciBDb250cm9sbGVyIEZ1bmN0aW9ucworICovCisKKy8qKgorICogQGRlZmdyb3VwIGdyb3VwU3RhdHMgU3RhdGlzdGljcyBGdW5jdGlvbnMKKyAqLworLyoqCisgKiBAZGVmZ3JvdXAgZ3JvdXBTdXBwb3J0IFN1cHBvcnQgRnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgZ3JvdXBJbnRlcnBvbGF0aW9uIEludGVycG9sYXRpb24gRnVuY3Rpb25zCisgKiBUaGVzZSBmdW5jdGlvbnMgcGVyZm9ybSAxLSBhbmQgMi1kaW1lbnNpb25hbCBpbnRlcnBvbGF0aW9uIG9mIGRhdGEuCisgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBpcyB1c2VkIGZvciAxLWRpbWVuc2lvbmFsIGRhdGEgYW5kCisgKiBiaWxpbmVhciBpbnRlcnBvbGF0aW9uIGlzIHVzZWQgZm9yIDItZGltZW5zaW9uYWwgZGF0YS4KKyAqLworCisvKioKKyAqIEBkZWZncm91cCBncm91cEV4YW1wbGVzIEV4YW1wbGVzCisgKi8KKyNpZm5kZWYgX0FSTV9NQVRIX0gKKyNkZWZpbmUgX0FSTV9NQVRIX0gKKworLyogaWdub3JlIHNvbWUgR0NDIHdhcm5pbmdzICovCisjaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3NpZ24tY29udmVyc2lvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1wYXJhbWV0ZXIiCisjZW5kaWYKKworI2RlZmluZSBfX0NNU0lTX0dFTkVSSUMgICAgICAgICAvKiBkaXNhYmxlIE5WSUMgYW5kIFN5c3RpY2sgZnVuY3Rpb25zICovCisKKyNpZiBkZWZpbmVkKEFSTV9NQVRIX0NNNykKKyAgI2luY2x1ZGUgImNvcmVfY203LmgiCisjZWxpZiBkZWZpbmVkIChBUk1fTUFUSF9DTTQpCisgICNpbmNsdWRlICJjb3JlX2NtNC5oIgorI2VsaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00zKQorICAjaW5jbHVkZSAiY29yZV9jbTMuaCIKKyNlbGlmIGRlZmluZWQgKEFSTV9NQVRIX0NNMCkKKyAgI2luY2x1ZGUgImNvcmVfY20wLmgiCisgICNkZWZpbmUgQVJNX01BVEhfQ00wX0ZBTUlMWQorI2VsaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00wUExVUykKKyAgI2luY2x1ZGUgImNvcmVfY20wcGx1cy5oIgorICAjZGVmaW5lIEFSTV9NQVRIX0NNMF9GQU1JTFkKKyNlbHNlCisgICNlcnJvciAiRGVmaW5lIGFjY29yZGluZyB0aGUgdXNlZCBDb3J0ZXggY29yZSBBUk1fTUFUSF9DTTcsIEFSTV9NQVRIX0NNNCwgQVJNX01BVEhfQ00zLCBBUk1fTUFUSF9DTTBQTFVTIG9yIEFSTV9NQVRIX0NNMCIKKyNlbmRpZgorCisjdW5kZWYgIF9fQ01TSVNfR0VORVJJQyAgICAgICAgIC8qIGVuYWJsZSBOVklDIGFuZCBTeXN0aWNrIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgInN0cmluZy5oIgorI2luY2x1ZGUgIm1hdGguaCIKKyNpZmRlZiAgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisgIC8qKgorICAgKiBAYnJpZWYgTWFjcm9zIHJlcXVpcmVkIGZvciByZWNpcHJvY2FsIGNhbGN1bGF0aW9uIGluIE5vcm1hbGl6ZWQgTE1TCisgICAqLworCisjZGVmaW5lIERFTFRBX1EzMSAgICAgICAgICAoMHgxMDApCisjZGVmaW5lIERFTFRBX1ExNSAgICAgICAgICAweDUKKyNkZWZpbmUgSU5ERVhfTUFTSyAgICAgICAgIDB4MDAwMDAwM0YKKyNpZm5kZWYgUEkKKyNkZWZpbmUgUEkgICAgICAgICAgICAgICAgIDMuMTQxNTkyNjUzNTg5NzlmCisjZW5kaWYKKworICAvKioKKyAgICogQGJyaWVmIE1hY3JvcyByZXF1aXJlZCBmb3IgU0lORSBhbmQgQ09TSU5FIEZhc3QgbWF0aCBhcHByb3hpbWF0aW9ucworICAgKi8KKworI2RlZmluZSBGQVNUX01BVEhfVEFCTEVfU0laRSAgNTEyCisjZGVmaW5lIEZBU1RfTUFUSF9RMzFfU0hJRlQgICAoMzIgLSAxMCkKKyNkZWZpbmUgRkFTVF9NQVRIX1ExNV9TSElGVCAgICgxNiAtIDEwKQorI2RlZmluZSBDT05UUk9MTEVSX1EzMV9TSElGVCAgKDMyIC0gOSkKKyNkZWZpbmUgVEFCTEVfU0laRSAgMjU2CisjZGVmaW5lIFRBQkxFX1NQQUNJTkdfUTMxICAgICAweDQwMDAwMAorI2RlZmluZSBUQUJMRV9TUEFDSU5HX1ExNSAgICAgMHg4MAorCisgIC8qKgorICAgKiBAYnJpZWYgTWFjcm9zIHJlcXVpcmVkIGZvciBTSU5FIGFuZCBDT1NJTkUgQ29udHJvbGxlciBmdW5jdGlvbnMKKyAgICovCisgIC8qIDEuMzEocTMxKSBGaXhlZCB2YWx1ZSBvZiAyLzM2MCAqLworICAvKiAtMSB0byArMSBpcyBkaXZpZGVkIGludG8gMzYwIHZhbHVlcyBzbyB0b3RhbCBzcGFjaW5nIGlzICgyLzM2MCkgKi8KKyNkZWZpbmUgSU5QVVRfU1BBQ0lORyAgICAgICAgIDB4QjYwQjYxCisKKyAgLyoqCisgICAqIEBicmllZiBNYWNybyBmb3IgVW5hbGlnbmVkIFN1cHBvcnQKKyAgICovCisjaWZuZGVmIFVOQUxJR05FRF9TVVBQT1JUX0RJU0FCTEUKKyAgICAjZGVmaW5lIEFMSUdONAorI2Vsc2UKKyAgI2lmIGRlZmluZWQgIChfX0dOVUNfXykKKyAgICAjZGVmaW5lIEFMSUdONCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSkKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIEFMSUdONCBfX2FsaWduKDQpCisgICNlbmRpZgorI2VuZGlmICAgLyogI2lmbmRlZiBVTkFMSUdORURfU1VQUE9SVF9ESVNBQkxFICovCisKKyAgLyoqCisgICAqIEBicmllZiBFcnJvciBzdGF0dXMgcmV0dXJuZWQgYnkgc29tZSBmdW5jdGlvbnMgaW4gdGhlIGxpYnJhcnkuCisgICAqLworCisgIHR5cGVkZWYgZW51bQorICB7CisgICAgQVJNX01BVEhfU1VDQ0VTUyA9IDAsICAgICAgICAgICAgICAgIC8qKjwgTm8gZXJyb3IgKi8KKyAgICBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiA9IC0xLCAgICAgICAgLyoqPCBPbmUgb3IgbW9yZSBhcmd1bWVudHMgYXJlIGluY29ycmVjdCAqLworICAgIEFSTV9NQVRIX0xFTkdUSF9FUlJPUiA9IC0yLCAgICAgICAgICAvKio8IExlbmd0aCBvZiBkYXRhIGJ1ZmZlciBpcyBpbmNvcnJlY3QgKi8KKyAgICBBUk1fTUFUSF9TSVpFX01JU01BVENIID0gLTMsICAgICAgICAgLyoqPCBTaXplIG9mIG1hdHJpY2VzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIG9wZXJhdGlvbi4gKi8KKyAgICBBUk1fTUFUSF9OQU5JTkYgPSAtNCwgICAgICAgICAgICAgICAgLyoqPCBOb3QtYS1udW1iZXIgKE5hTikgb3IgaW5maW5pdHkgaXMgZ2VuZXJhdGVkICovCisgICAgQVJNX01BVEhfU0lOR1VMQVIgPSAtNSwgICAgICAgICAgICAgIC8qKjwgR2VuZXJhdGVkIGJ5IG1hdHJpeCBpbnZlcnNpb24gaWYgdGhlIGlucHV0IG1hdHJpeCBpcyBzaW5ndWxhciBhbmQgY2Fubm90IGJlIGludmVydGVkLiAqLworICAgIEFSTV9NQVRIX1RFU1RfRkFJTFVSRSA9IC02ICAgICAgICAgICAvKio8IFRlc3QgRmFpbGVkICAqLworICB9IGFybV9zdGF0dXM7CisKKyAgLyoqCisgICAqIEBicmllZiA4LWJpdCBmcmFjdGlvbmFsIGRhdGEgdHlwZSBpbiAxLjcgZm9ybWF0LgorICAgKi8KKyAgdHlwZWRlZiBpbnQ4X3QgcTdfdDsKKworICAvKioKKyAgICogQGJyaWVmIDE2LWJpdCBmcmFjdGlvbmFsIGRhdGEgdHlwZSBpbiAxLjE1IGZvcm1hdC4KKyAgICovCisgIHR5cGVkZWYgaW50MTZfdCBxMTVfdDsKKworICAvKioKKyAgICogQGJyaWVmIDMyLWJpdCBmcmFjdGlvbmFsIGRhdGEgdHlwZSBpbiAxLjMxIGZvcm1hdC4KKyAgICovCisgIHR5cGVkZWYgaW50MzJfdCBxMzFfdDsKKworICAvKioKKyAgICogQGJyaWVmIDY0LWJpdCBmcmFjdGlvbmFsIGRhdGEgdHlwZSBpbiAxLjYzIGZvcm1hdC4KKyAgICovCisgIHR5cGVkZWYgaW50NjRfdCBxNjNfdDsKKworICAvKioKKyAgICogQGJyaWVmIDMyLWJpdCBmbG9hdGluZy1wb2ludCB0eXBlIGRlZmluaXRpb24uCisgICAqLworICB0eXBlZGVmIGZsb2F0IGZsb2F0MzJfdDsKKworICAvKioKKyAgICogQGJyaWVmIDY0LWJpdCBmbG9hdGluZy1wb2ludCB0eXBlIGRlZmluaXRpb24uCisgICAqLworICB0eXBlZGVmIGRvdWJsZSBmbG9hdDY0X3Q7CisKKyAgLyoqCisgICAqIEBicmllZiBkZWZpbml0aW9uIHRvIHJlYWQvd3JpdGUgdHdvIDE2IGJpdCB2YWx1ZXMuCisgICAqLworI2lmIGRlZmluZWQgX19DQ19BUk0KKyAgI2RlZmluZSBfX1NJTUQzMl9UWVBFIGludDMyX3QgX19wYWNrZWQKKyAgI2RlZmluZSBDTVNJU19VTlVTRUQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2RlZmluZSBfX1NJTUQzMl9UWVBFIGludDMyX3QKKyAgI2RlZmluZSBDTVNJU19VTlVTRUQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKworI2VsaWYgZGVmaW5lZCBfX0dOVUNfXworICAjZGVmaW5lIF9fU0lNRDMyX1RZUEUgaW50MzJfdAorICAjZGVmaW5lIENNU0lTX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorCisjZWxpZiBkZWZpbmVkIF9fSUNDQVJNX18KKyAgI2RlZmluZSBfX1NJTUQzMl9UWVBFIGludDMyX3QgX19wYWNrZWQKKyAgI2RlZmluZSBDTVNJU19VTlVTRUQKKworI2VsaWYgZGVmaW5lZCBfX0NTTUNfXworICAjZGVmaW5lIF9fU0lNRDMyX1RZUEUgaW50MzJfdAorICAjZGVmaW5lIENNU0lTX1VOVVNFRAorCisjZWxpZiBkZWZpbmVkIF9fVEFTS0lOR19fCisgICNkZWZpbmUgX19TSU1EMzJfVFlQRSBfX3VuYWxpZ25lZCBpbnQzMl90CisgICNkZWZpbmUgQ01TSVNfVU5VU0VECisKKyNlbHNlCisgICNlcnJvciBVbmtub3duIGNvbXBpbGVyCisjZW5kaWYKKworI2RlZmluZSBfX1NJTUQzMihhZGRyKSAgICAgICAgKCooX19TSU1EMzJfVFlQRSAqKikgJiAoYWRkcikpCisjZGVmaW5lIF9fU0lNRDMyX0NPTlNUKGFkZHIpICAoKF9fU0lNRDMyX1RZUEUgKikoYWRkcikpCisjZGVmaW5lIF9TSU1EMzJfT0ZGU0VUKGFkZHIpICAoKihfX1NJTUQzMl9UWVBFICopICAoYWRkcikpCisjZGVmaW5lIF9fU0lNRDY0KGFkZHIpICAgICAgICAoKihpbnQ2NF90ICoqKSAmIChhZGRyKSkKKworI2lmIGRlZmluZWQgKEFSTV9NQVRIX0NNMykgfHwgZGVmaW5lZCAoQVJNX01BVEhfQ00wX0ZBTUlMWSkKKyAgLyoqCisgICAqIEBicmllZiBkZWZpbml0aW9uIHRvIHBhY2sgdHdvIDE2IGJpdCB2YWx1ZXMuCisgICAqLworI2RlZmluZSBfX1BLSEJUKEFSRzEsIEFSRzIsIEFSRzMpICAgICAgKCAoKChpbnQzMl90KShBUkcxKSA8PCAgMCkgJiAoaW50MzJfdCkweDAwMDBGRkZGKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkoQVJHMikgPDwgQVJHMykgJiAoaW50MzJfdCkweEZGRkYwMDAwKSAgKQorI2RlZmluZSBfX1BLSFRCKEFSRzEsIEFSRzIsIEFSRzMpICAgICAgKCAoKChpbnQzMl90KShBUkcxKSA8PCAgMCkgJiAoaW50MzJfdCkweEZGRkYwMDAwKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkoQVJHMikgPj4gQVJHMykgJiAoaW50MzJfdCkweDAwMDBGRkZGKSAgKQorCisjZW5kaWYKKworCisgICAvKioKKyAgICogQGJyaWVmIGRlZmluaXRpb24gdG8gcGFjayBmb3VyIDggYml0IHZhbHVlcy4KKyAgICovCisjaWZuZGVmIEFSTV9NQVRIX0JJR19FTkRJQU4KKworI2RlZmluZSBfX1BBQ0txNyh2MCx2MSx2Mix2MykgKCAoKChpbnQzMl90KSh2MCkgPDwgIDApICYgKGludDMyX3QpMHgwMDAwMDBGRikgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGludDMyX3QpKHYxKSA8PCAgOCkgJiAoaW50MzJfdCkweDAwMDBGRjAwKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkodjIpIDw8IDE2KSAmIChpbnQzMl90KTB4MDBGRjAwMDApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnQzMl90KSh2MykgPDwgMjQpICYgKGludDMyX3QpMHhGRjAwMDAwMCkgICkKKyNlbHNlCisKKyNkZWZpbmUgX19QQUNLcTcodjAsdjEsdjIsdjMpICggKCgoaW50MzJfdCkodjMpIDw8ICAwKSAmIChpbnQzMl90KTB4MDAwMDAwRkYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnQzMl90KSh2MikgPDwgIDgpICYgKGludDMyX3QpMHgwMDAwRkYwMCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGludDMyX3QpKHYxKSA8PCAxNikgJiAoaW50MzJfdCkweDAwRkYwMDAwKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkodjApIDw8IDI0KSAmIChpbnQzMl90KTB4RkYwMDAwMDApICApCisKKyNlbmRpZgorCisKKyAgLyoqCisgICAqIEBicmllZiBDbGlwcyBRNjMgdG8gUTMxIHZhbHVlcy4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSBxMzFfdCBjbGlwX3E2M190b19xMzEoCisgIHE2M190IHgpCisgIHsKKyAgICByZXR1cm4gKChxMzFfdCkgKHggPj4gMzIpICE9ICgocTMxX3QpIHggPj4gMzEpKSA/CisgICAgICAoKDB4N0ZGRkZGRkYgXiAoKHEzMV90KSAoeCA+PiA2MykpKSkgOiAocTMxX3QpIHg7CisgIH0KKworICAvKioKKyAgICogQGJyaWVmIENsaXBzIFE2MyB0byBRMTUgdmFsdWVzLgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHExNV90IGNsaXBfcTYzX3RvX3ExNSgKKyAgcTYzX3QgeCkKKyAgeworICAgIHJldHVybiAoKHEzMV90KSAoeCA+PiAzMikgIT0gKChxMzFfdCkgeCA+PiAzMSkpID8KKyAgICAgICgoMHg3RkZGIF4gKChxMTVfdCkgKHggPj4gNjMpKSkpIDogKHExNV90KSAoeCA+PiAxNSk7CisgIH0KKworICAvKioKKyAgICogQGJyaWVmIENsaXBzIFEzMSB0byBRNyB2YWx1ZXMuCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgcTdfdCBjbGlwX3EzMV90b19xNygKKyAgcTMxX3QgeCkKKyAgeworICAgIHJldHVybiAoKHEzMV90KSAoeCA+PiAyNCkgIT0gKChxMzFfdCkgeCA+PiAyMykpID8KKyAgICAgICgoMHg3RiBeICgocTdfdCkgKHggPj4gMzEpKSkpIDogKHE3X3QpIHg7CisgIH0KKworICAvKioKKyAgICogQGJyaWVmIENsaXBzIFEzMSB0byBRMTUgdmFsdWVzLgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHExNV90IGNsaXBfcTMxX3RvX3ExNSgKKyAgcTMxX3QgeCkKKyAgeworICAgIHJldHVybiAoKHEzMV90KSAoeCA+PiAxNikgIT0gKChxMzFfdCkgeCA+PiAxNSkpID8KKyAgICAgICgoMHg3RkZGIF4gKChxMTVfdCkgKHggPj4gMzEpKSkpIDogKHExNV90KSB4OworICB9CisKKyAgLyoqCisgICAqIEBicmllZiBNdWx0aXBsaWVzIDMyIFggNjQgYW5kIHJldHVybnMgMzIgYml0IHJlc3VsdCBpbiAyLjMwIGZvcm1hdC4KKyAgICovCisKKyAgc3RhdGljIF9fSU5MSU5FIHE2M190IG11bHQzMng2NCgKKyAgcTYzX3QgeCwKKyAgcTMxX3QgeSkKKyAgeworICAgIHJldHVybiAoKCgocTYzX3QpICh4ICYgMHgwMDAwMDAwMEZGRkZGRkZGKSAqIHkpID4+IDMyKSArCisgICAgICAgICAgICAoKChxNjNfdCkgKHggPj4gMzIpICogeSkpKTsKKyAgfQorCisvKgorICAjaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00wX0ZBTUlMWSkgJiYgZGVmaW5lZCAoIF9fQ0NfQVJNICAgKQorICAjZGVmaW5lIF9fQ0xaIF9fY2x6CisgICNlbmRpZgorICovCisvKiBub3RlOiBmdW5jdGlvbiBjYW4gYmUgcmVtb3ZlZCB3aGVuIGFsbCB0b29sY2hhaW4gc3VwcG9ydCBfX0NMWiBmb3IgQ29ydGV4LU0wICovCisjaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00wX0ZBTUlMWSkgJiYgKChkZWZpbmVkIChfX0lDQ0FSTV9fKSkgICkKKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fQ0xaKAorICBxMzFfdCBkYXRhKTsKKworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19DTFooCisgIHEzMV90IGRhdGEpCisgIHsKKyAgICB1aW50MzJfdCBjb3VudCA9IDA7CisgICAgdWludDMyX3QgbWFzayA9IDB4ODAwMDAwMDA7CisKKyAgICB3aGlsZSgoZGF0YSAmIG1hc2spID09IDApCisgICAgeworICAgICAgY291bnQgKz0gMXU7CisgICAgICBtYXNrID0gbWFzayA+PiAxdTsKKyAgICB9CisKKyAgICByZXR1cm4gKGNvdW50KTsKKyAgfQorI2VuZGlmCisKKyAgLyoqCisgICAqIEBicmllZiBGdW5jdGlvbiB0byBDYWxjdWxhdGVzIDEvaW4gKHJlY2lwcm9jYWwpIHZhbHVlIG9mIFEzMSBEYXRhIHR5cGUuCisgICAqLworCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBhcm1fcmVjaXBfcTMxKAorICBxMzFfdCBpbiwKKyAgcTMxX3QgKiBkc3QsCisgIHEzMV90ICogcFJlY2lwVGFibGUpCisgIHsKKyAgICBxMzFfdCBvdXQ7CisgICAgdWludDMyX3QgdGVtcFZhbDsKKyAgICB1aW50MzJfdCBpbmRleCwgaTsKKyAgICB1aW50MzJfdCBzaWduQml0czsKKworICAgIGlmKGluID4gMCkKKyAgICB7CisgICAgICBzaWduQml0cyA9ICgodWludDMyX3QpIChfX0NMWiggaW4pIC0gMSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc2lnbkJpdHMgPSAoKHVpbnQzMl90KSAoX19DTFooLWluKSAtIDEpKTsKKyAgICB9CisKKyAgICAvKiBDb252ZXJ0IGlucHV0IHNhbXBsZSB0byAxLjMxIGZvcm1hdCAqLworICAgIGluID0gKGluIDw8IHNpZ25CaXRzKTsKKworICAgIC8qIGNhbGN1bGF0aW9uIG9mIGluZGV4IGZvciBpbml0aWFsIGFwcHJveGltYXRlZCBWYWwgKi8KKyAgICBpbmRleCA9ICh1aW50MzJfdCkoaW4gPj4gMjQpOworICAgIGluZGV4ID0gKGluZGV4ICYgSU5ERVhfTUFTSyk7CisKKyAgICAvKiAxLjMxIHdpdGggZXhwIDEgKi8KKyAgICBvdXQgPSBwUmVjaXBUYWJsZVtpbmRleF07CisKKyAgICAvKiBjYWxjdWxhdGlvbiBvZiByZWNpcHJvY2FsIHZhbHVlICovCisgICAgLyogcnVubmluZyBhcHByb3hpbWF0aW9uIGZvciB0d28gaXRlcmF0aW9ucyAqLworICAgIGZvciAoaSA9IDB1OyBpIDwgMnU7IGkrKykKKyAgICB7CisgICAgICB0ZW1wVmFsID0gKHVpbnQzMl90KSAoKChxNjNfdCkgaW4gKiBvdXQpID4+IDMxKTsKKyAgICAgIHRlbXBWYWwgPSAweDdGRkZGRkZGdSAtIHRlbXBWYWw7CisgICAgICAvKiAgICAgIDEuMzEgd2l0aCBleHAgMSAqLworICAgICAgLyogb3V0ID0gKHEzMV90KSAoKChxNjNfdCkgb3V0ICogdGVtcFZhbCkgPj4gMzApOyAqLworICAgICAgb3V0ID0gY2xpcF9xNjNfdG9fcTMxKCgocTYzX3QpIG91dCAqIHRlbXBWYWwpID4+IDMwKTsKKyAgICB9CisKKyAgICAvKiB3cml0ZSBvdXRwdXQgKi8KKyAgICAqZHN0ID0gb3V0OworCisgICAgLyogcmV0dXJuIG51bSBvZiBzaWduYml0cyBvZiBvdXQgPSAxL2luIHZhbHVlICovCisgICAgcmV0dXJuIChzaWduQml0cyArIDF1KTsKKyAgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBGdW5jdGlvbiB0byBDYWxjdWxhdGVzIDEvaW4gKHJlY2lwcm9jYWwpIHZhbHVlIG9mIFExNSBEYXRhIHR5cGUuCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgYXJtX3JlY2lwX3ExNSgKKyAgcTE1X3QgaW4sCisgIHExNV90ICogZHN0LAorICBxMTVfdCAqIHBSZWNpcFRhYmxlKQorICB7CisgICAgcTE1X3Qgb3V0ID0gMDsKKyAgICB1aW50MzJfdCB0ZW1wVmFsID0gMDsKKyAgICB1aW50MzJfdCBpbmRleCA9IDAsIGkgPSAwOworICAgIHVpbnQzMl90IHNpZ25CaXRzID0gMDsKKworICAgIGlmKGluID4gMCkKKyAgICB7CisgICAgICBzaWduQml0cyA9ICgodWludDMyX3QpKF9fQ0xaKCBpbikgLSAxNykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc2lnbkJpdHMgPSAoKHVpbnQzMl90KShfX0NMWigtaW4pIC0gMTcpKTsKKyAgICB9CisKKyAgICAvKiBDb252ZXJ0IGlucHV0IHNhbXBsZSB0byAxLjE1IGZvcm1hdCAqLworICAgIGluID0gKGluIDw8IHNpZ25CaXRzKTsKKworICAgIC8qIGNhbGN1bGF0aW9uIG9mIGluZGV4IGZvciBpbml0aWFsIGFwcHJveGltYXRlZCBWYWwgKi8KKyAgICBpbmRleCA9ICh1aW50MzJfdCkoaW4gPj4gIDgpOworICAgIGluZGV4ID0gKGluZGV4ICYgSU5ERVhfTUFTSyk7CisKKyAgICAvKiAgICAgIDEuMTUgd2l0aCBleHAgMSAgKi8KKyAgICBvdXQgPSBwUmVjaXBUYWJsZVtpbmRleF07CisKKyAgICAvKiBjYWxjdWxhdGlvbiBvZiByZWNpcHJvY2FsIHZhbHVlICovCisgICAgLyogcnVubmluZyBhcHByb3hpbWF0aW9uIGZvciB0d28gaXRlcmF0aW9ucyAqLworICAgIGZvciAoaSA9IDB1OyBpIDwgMnU7IGkrKykKKyAgICB7CisgICAgICB0ZW1wVmFsID0gKHVpbnQzMl90KSAoKChxMzFfdCkgaW4gKiBvdXQpID4+IDE1KTsKKyAgICAgIHRlbXBWYWwgPSAweDdGRkZ1IC0gdGVtcFZhbDsKKyAgICAgIC8qICAgICAgMS4xNSB3aXRoIGV4cCAxICovCisgICAgICBvdXQgPSAocTE1X3QpICgoKHEzMV90KSBvdXQgKiB0ZW1wVmFsKSA+PiAxNCk7CisgICAgICAvKiBvdXQgPSBjbGlwX3EzMV90b19xMTUoKChxMzFfdCkgb3V0ICogdGVtcFZhbCkgPj4gMTQpOyAqLworICAgIH0KKworICAgIC8qIHdyaXRlIG91dHB1dCAqLworICAgICpkc3QgPSBvdXQ7CisKKyAgICAvKiByZXR1cm4gbnVtIG9mIHNpZ25iaXRzIG9mIG91dCA9IDEvaW4gdmFsdWUgKi8KKyAgICByZXR1cm4gKHNpZ25CaXRzICsgMSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIGludHJpbmlzaWMgZnVuY3Rpb24gZm9yIG9ubHkgTTAgcHJvY2Vzc29ycworICAgKi8KKyNpZiBkZWZpbmVkKEFSTV9NQVRIX0NNMF9GQU1JTFkpCisgIHN0YXRpYyBfX0lOTElORSBxMzFfdCBfX1NTQVQoCisgIHEzMV90IHgsCisgIHVpbnQzMl90IHkpCisgIHsKKyAgICBpbnQzMl90IHBvc01heCwgbmVnTWluOworICAgIHVpbnQzMl90IGk7CisKKyAgICBwb3NNYXggPSAxOworICAgIGZvciAoaSA9IDA7IGkgPCAoeSAtIDEpOyBpKyspCisgICAgeworICAgICAgcG9zTWF4ID0gcG9zTWF4ICogMjsKKyAgICB9CisKKyAgICBpZih4ID4gMCkKKyAgICB7CisgICAgICBwb3NNYXggPSAocG9zTWF4IC0gMSk7CisKKyAgICAgIGlmKHggPiBwb3NNYXgpCisgICAgICB7CisgICAgICAgIHggPSBwb3NNYXg7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBuZWdNaW4gPSAtcG9zTWF4OworCisgICAgICBpZih4IDwgbmVnTWluKQorICAgICAgeworICAgICAgICB4ID0gbmVnTWluOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gKHgpOworICB9CisjZW5kaWYgLyogZW5kIG9mIEFSTV9NQVRIX0NNMF9GQU1JTFkgKi8KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIGludHJpbnNpYyBmdW5jdGlvbiBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisjaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00zKSB8fCBkZWZpbmVkIChBUk1fTUFUSF9DTTBfRkFNSUxZKQorCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFBREQ4IGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fUUFERDgoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHkpCisgIHsKKyAgICBxMzFfdCByLCBzLCB0LCB1OworCisgICAgciA9IF9fU1NBVCgoKCgocTMxX3QpeCA8PCAyNCkgPj4gMjQpICsgKCgocTMxX3QpeSA8PCAyNCkgPj4gMjQpKSwgOCkgJiAoaW50MzJfdCkweDAwMDAwMEZGOworICAgIHMgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDI0KSArICgoKHEzMV90KXkgPDwgMTYpID4+IDI0KSksIDgpICYgKGludDMyX3QpMHgwMDAwMDBGRjsKKyAgICB0ID0gX19TU0FUKCgoKChxMzFfdCl4IDw8ICA4KSA+PiAyNCkgKyAoKChxMzFfdCl5IDw8ICA4KSA+PiAyNCkpLCA4KSAmIChpbnQzMl90KTB4MDAwMDAwRkY7CisgICAgdSA9IF9fU1NBVCgoKCgocTMxX3QpeCAgICAgICkgPj4gMjQpICsgKCgocTMxX3QpeSAgICAgICkgPj4gMjQpKSwgOCkgJiAoaW50MzJfdCkweDAwMDAwMEZGOworCisgICAgcmV0dXJuICgodWludDMyX3QpKCh1IDw8IDI0KSB8ICh0IDw8IDE2KSB8IChzIDw8ICA4KSB8IChyICAgICAgKSkpOworICB9CisKKworICAvKgorICAgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBRU1VCOCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1FTVUI4KAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5KQorICB7CisgICAgcTMxX3QgciwgcywgdCwgdTsKKworICAgIHIgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMjQpID4+IDI0KSAtICgoKHEzMV90KXkgPDwgMjQpID4+IDI0KSksIDgpICYgKGludDMyX3QpMHgwMDAwMDBGRjsKKyAgICBzID0gX19TU0FUKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAyNCkgLSAoKChxMzFfdCl5IDw8IDE2KSA+PiAyNCkpLCA4KSAmIChpbnQzMl90KTB4MDAwMDAwRkY7CisgICAgdCA9IF9fU1NBVCgoKCgocTMxX3QpeCA8PCAgOCkgPj4gMjQpIC0gKCgocTMxX3QpeSA8PCAgOCkgPj4gMjQpKSwgOCkgJiAoaW50MzJfdCkweDAwMDAwMEZGOworICAgIHUgPSBfX1NTQVQoKCgoKHEzMV90KXggICAgICApID4+IDI0KSAtICgoKHEzMV90KXkgICAgICApID4+IDI0KSksIDgpICYgKGludDMyX3QpMHgwMDAwMDBGRjsKKworICAgIHJldHVybiAoKHVpbnQzMl90KSgodSA8PCAyNCkgfCAodCA8PCAxNikgfCAocyA8PCAgOCkgfCAociAgICAgICkpKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgUUFERDE2IGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fUUFERDE2KAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5KQorICB7CisvKiAgcTMxX3QgciwgICAgIHM7ICB3aXRob3V0IGluaXRpYWxpc2F0aW9uICdhcm1fb2Zmc2V0X3ExNSB0ZXN0JyBmYWlscyAgYnV0ICdpbnRyaW5zaWMnIHRlc3RzIHBhc3MhIGZvciBhcm1DQyAqLworICAgIHEzMV90IHIgPSAwLCBzID0gMDsKKworICAgIHIgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSArICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisgICAgcyA9IF9fU1NBVCgoKCgocTMxX3QpeCAgICAgICkgPj4gMTYpICsgKCgocTMxX3QpeSAgICAgICkgPj4gMTYpKSwgMTYpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKworICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAociAgICAgICkpKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU0hBREQxNiBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NIQUREMTYoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHkpCisgIHsKKyAgICBxMzFfdCByLCBzOworCisgICAgciA9ICgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICsgKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSA+PiAxKSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisgICAgcyA9ICgoKCgocTMxX3QpeCAgICAgICkgPj4gMTYpICsgKCgocTMxX3QpeSAgICAgICkgPj4gMTYpKSA+PiAxKSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisKKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKHMgPDwgMTYpIHwgKHIgICAgICApKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFTVUIxNiBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1FTVUIxNigKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSkKKyAgeworICAgIHEzMV90IHIsIHM7CisKKyAgICByID0gX19TU0FUKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgLSAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpLCAxNikgJiAoaW50MzJfdCkweDAwMDBGRkZGOworICAgIHMgPSBfX1NTQVQoKCgoKHEzMV90KXggICAgICApID4+IDE2KSAtICgoKHEzMV90KXkgICAgICApID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisKKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKHMgPDwgMTYpIHwgKHIgICAgICApKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNIU1VCMTYgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TSFNVQjE2KAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5KQorICB7CisgICAgcTMxX3QgciwgczsKKworICAgIHIgPSAoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAtICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgPj4gMSkgJiAoaW50MzJfdCkweDAwMDBGRkZGOworICAgIHMgPSAoKCgoKHEzMV90KXggICAgICApID4+IDE2KSAtICgoKHEzMV90KXkgICAgICApID4+IDE2KSkgPj4gMSkgJiAoaW50MzJfdCkweDAwMDBGRkZGOworCisgICAgcmV0dXJuICgodWludDMyX3QpKChzIDw8IDE2KSB8IChyICAgICAgKSkpOworICB9CisKKworICAvKgorICAgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBRQVNYIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fUUFTWCgKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSkKKyAgeworICAgIHEzMV90IHIsIHM7CisKKyAgICByID0gX19TU0FUKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgLSAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpLCAxNikgJiAoaW50MzJfdCkweDAwMDBGRkZGOworICAgIHMgPSBfX1NTQVQoKCgoKHEzMV90KXggICAgICApID4+IDE2KSArICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisKKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKHMgPDwgMTYpIHwgKHIgICAgICApKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNIQVNYIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU0hBU1goCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHkpCisgIHsKKyAgICBxMzFfdCByLCBzOworCisgICAgciA9ICgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpIC0gKCgocTMxX3QpeSAgICAgICkgPj4gMTYpKSA+PiAxKSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisgICAgcyA9ICgoKCgocTMxX3QpeCAgICAgICkgPj4gMTYpICsgKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSA+PiAxKSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisKKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKHMgPDwgMTYpIHwgKHIgICAgICApKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFTQVggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19RU0FYKAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5KQorICB7CisgICAgcTMxX3QgciwgczsKKworICAgIHIgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSArICgoKHEzMV90KXkgICAgICApID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisgICAgcyA9IF9fU1NBVCgoKCgocTMxX3QpeCAgICAgICkgPj4gMTYpIC0gKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSwgMTYpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKworICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAociAgICAgICkpKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU0hTQVggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TSFNBWCgKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSkKKyAgeworICAgIHEzMV90IHIsIHM7CisKKyAgICByID0gKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKyAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKyAgICBzID0gKCgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgLSAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKworICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAociAgICAgICkpKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01VU0RYIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01VU0RYKAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5KQorICB7CisgICAgcmV0dXJuICgodWludDMyX3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXggICAgICApID4+IDE2KSAqICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgICApKTsKKyAgfQorCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNVUFEWCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NNVUFEWCgKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSkKKyAgeworICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSAgICAgICkgPj4gMTYpKSArCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgKiAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpICAgKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFBREQgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgaW50MzJfdCBfX1FBREQoCisgIGludDMyX3QgeCwKKyAgaW50MzJfdCB5KQorICB7CisgICAgcmV0dXJuICgoaW50MzJfdCkoY2xpcF9xNjNfdG9fcTMxKChxNjNfdCl4ICsgKHEzMV90KXkpKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFTVUIgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgaW50MzJfdCBfX1FTVUIoCisgIGludDMyX3QgeCwKKyAgaW50MzJfdCB5KQorICB7CisgICAgcmV0dXJuICgoaW50MzJfdCkoY2xpcF9xNjNfdG9fcTMxKChxNjNfdCl4IC0gKHEzMV90KXkpKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNTEFEIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01MQUQoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHksCisgIHVpbnQzMl90IHN1bSkKKyAgeworICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSArCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgKiAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpICsKKyAgICAgICAgICAgICAgICAgICAgICAgKCAoKHEzMV90KXN1bSAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICApKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01MQURYIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01MQURYKAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5LAorICB1aW50MzJfdCBzdW0pCisgIHsKKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAqICgoKHEzMV90KXkgICAgICApID4+IDE2KSkgKworICAgICAgICAgICAgICAgICAgICAgICAoKCgocTMxX3QpeCAgICAgICkgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSArCisgICAgICAgICAgICAgICAgICAgICAgICggKChxMzFfdClzdW0gICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNTFNEWCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NNTFNEWCgKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSwKKyAgdWludDMyX3Qgc3VtKQorICB7CisgICAgcmV0dXJuICgodWludDMyX3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXggICAgICApID4+IDE2KSAqICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgKworICAgICAgICAgICAgICAgICAgICAgICAoICgocTMxX3Qpc3VtICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICkpOworICB9CisKKworICAvKgorICAgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTTUxBTEQgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDY0X3QgX19TTUxBTEQoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHksCisgIHVpbnQ2NF90IHN1bSkKKyAgeworLyogIHJldHVybiAoc3VtICsgKChxMTVfdCkgKHggPj4gMTYpICogKHExNV90KSAoeSA+PiAxNikpICsgKChxMTVfdCkgeCAqIChxMTVfdCkgeSkpOyAqLworICAgIHJldHVybiAoKHVpbnQ2NF90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSArCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgKiAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpICsKKyAgICAgICAgICAgICAgICAgICAgICAgKCAoKHE2M190KXN1bSAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICApKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01MQUxEWCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50NjRfdCBfX1NNTEFMRFgoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHksCisgIHVpbnQ2NF90IHN1bSkKKyAgeworLyogIHJldHVybiAoc3VtICsgKChxMTVfdCkgKHggPj4gMTYpICogKHExNV90KSB5KSkgKyAoKHExNV90KSB4ICogKHExNV90KSAoeSA+PiAxNikpOyAqLworICAgIHJldHVybiAoKHVpbnQ2NF90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSAgICAgICkgPj4gMTYpKSArCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgKiAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpICsKKyAgICAgICAgICAgICAgICAgICAgICAgKCAoKHE2M190KXN1bSAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICApKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01VQUQgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TTVVBRCgKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSkKKyAgeworICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSArCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgKiAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpICAgKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNVVNEIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01VU0QoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHkpCisgIHsKKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAqICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgLQorICAgICAgICAgICAgICAgICAgICAgICAoKCgocTMxX3QpeCAgICAgICkgPj4gMTYpICogKCgocTMxX3QpeSAgICAgICkgPj4gMTYpKSAgICkpOworICB9CisKKworICAvKgorICAgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTWFRCMTYgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TWFRCMTYoCisgIHVpbnQzMl90IHgpCisgIHsKKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKCgoKHEzMV90KXggPDwgMjQpID4+IDI0KSAmIChxMzFfdCkweDAwMDBGRkZGKSB8CisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4IDw8ICA4KSA+PiAgOCkgJiAocTMxX3QpMHhGRkZGMDAwMCkgICkpOworICB9CisKKyNlbmRpZiAvKiBkZWZpbmVkIChBUk1fTUFUSF9DTTMpIHx8IGRlZmluZWQgKEFSTV9NQVRIX0NNMF9GQU1JTFkpICovCisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFE3IEZJUiBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgIC8qKjwgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8KKyAgICBxN190ICpwU3RhdGU7ICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMrYmxvY2tTaXplLTEuICovCisgICAgcTdfdCAqcENvZWZmczsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovCisgIH0gYXJtX2Zpcl9pbnN0YW5jZV9xNzsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBGSVIgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAgICAgLyoqPCBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIHExNV90ICpwU3RhdGU7ICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMrYmxvY2tTaXplLTEuICovCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4qLworICB9IGFybV9maXJfaW5zdGFuY2VfcTE1OworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIEZJUiBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAvKio8IG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcytibG9ja1NpemUtMS4gKi8KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLworICB9IGFybV9maXJfaW5zdGFuY2VfcTMxOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgLyoqPCBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcytibG9ja1NpemUtMS4gKi8KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovCisgIH0gYXJtX2Zpcl9pbnN0YW5jZV9mMzI7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRNyBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTcgRklSIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9xNygKKyAgY29uc3QgYXJtX2Zpcl9pbnN0YW5jZV9xNyAqIFMsCisgIHE3X3QgKiBwU3JjLAorICBxN190ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTcgRklSIGZpbHRlci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFE3IEZJUiBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgTnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdGhhdCBhcmUgcHJvY2Vzc2VkLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2luaXRfcTcoCisgIGFybV9maXJfaW5zdGFuY2VfcTcgKiBTLAorICB1aW50MTZfdCBudW1UYXBzLAorICBxN190ICogcENvZWZmcywKKyAgcTdfdCAqIHBTdGF0ZSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9xMTUoCisgIGNvbnN0IGFybV9maXJfaW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmYXN0IFExNSBGSVIgZmlsdGVyIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNC4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2Zhc3RfcTE1KAorICBjb25zdCBhcm1fZmlyX2luc3RhbmNlX3ExNSAqIFMsCisgIHExNV90ICogcFNyYywKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMTUgRklSIGZpbHRlci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBOdW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiBNdXN0IGJlIGV2ZW4gYW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA0LgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IGFyZSBwcm9jZXNzZWQgYXQgYSB0aW1lLgorICAgKiBAcmV0dXJuIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYKKyAgICogPGNvZGU+bnVtVGFwczwvY29kZT4gaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fZmlyX2luaXRfcTE1KAorICBhcm1fZmlyX2luc3RhbmNlX3ExNSAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIHExNV90ICogcENvZWZmcywKKyAgcTE1X3QgKiBwU3RhdGUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBGSVIgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX3EzMSgKKyAgY29uc3QgYXJtX2Zpcl9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZhc3QgUTMxIEZJUiBmaWx0ZXIgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00LgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEZJUiBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9mYXN0X3EzMSgKKyAgY29uc3QgYXJtX2Zpcl9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEZJUiBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBOdW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IGFyZSBwcm9jZXNzZWQgYXQgYSB0aW1lLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2luaXRfcTMxKAorICBhcm1fZmlyX2luc3RhbmNlX3EzMSAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIHEzMV90ICogcENvZWZmcywKKyAgcTMxX3QgKiBwU3RhdGUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgRklSIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2YzMigKKyAgY29uc3QgYXJtX2Zpcl9pbnN0YW5jZV9mMzIgKiBTLAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgTnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdGhhdCBhcmUgcHJvY2Vzc2VkIGF0IGEgdGltZS4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9pbml0X2YzMigKKyAgYXJtX2Zpcl9pbnN0YW5jZV9mMzIgKiBTLAorICB1aW50MTZfdCBudW1UYXBzLAorICBmbG9hdDMyX3QgKiBwQ29lZmZzLAorICBmbG9hdDMyX3QgKiBwU3RhdGUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgaW50OF90IG51bVN0YWdlczsgICAgICAgIC8qKjwgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4gIE92ZXJhbGwgb3JkZXIgaXMgMipudW1TdGFnZXMuICovCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgICAgIC8qKjwgUG9pbnRzIHRvIHRoZSBhcnJheSBvZiBzdGF0ZSBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDQqbnVtU3RhZ2VzLiAqLworICAgIHExNV90ICpwQ29lZmZzOyAgICAgICAgICAvKio8IFBvaW50cyB0byB0aGUgYXJyYXkgb2YgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA1Km51bVN0YWdlcy4gKi8KKyAgICBpbnQ4X3QgcG9zdFNoaWZ0OyAgICAgICAgLyoqPCBBZGRpdGlvbmFsIHNoaWZ0LCBpbiBiaXRzLCBhcHBsaWVkIHRvIGVhY2ggb3V0cHV0IHNhbXBsZS4gKi8KKyAgfSBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfcTE1OworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBudW1TdGFnZXM7ICAgICAgLyoqPCBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAgT3ZlcmFsbCBvcmRlciBpcyAyKm51bVN0YWdlcy4gKi8KKyAgICBxMzFfdCAqcFN0YXRlOyAgICAgICAgICAgLyoqPCBQb2ludHMgdG8gdGhlIGFycmF5IG9mIHN0YXRlIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNCpudW1TdGFnZXMuICovCisgICAgcTMxX3QgKnBDb2VmZnM7ICAgICAgICAgIC8qKjwgUG9pbnRzIHRvIHRoZSBhcnJheSBvZiBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDUqbnVtU3RhZ2VzLiAqLworICAgIHVpbnQ4X3QgcG9zdFNoaWZ0OyAgICAgICAvKio8IEFkZGl0aW9uYWwgc2hpZnQsIGluIGJpdHMsIGFwcGxpZWQgdG8gZWFjaCBvdXRwdXQgc2FtcGxlLiAqLworICB9IGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9xMzE7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgbnVtU3RhZ2VzOyAgICAgIC8qKjwgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4gIE92ZXJhbGwgb3JkZXIgaXMgMipudW1TdGFnZXMuICovCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgIC8qKjwgUG9pbnRzIHRvIHRoZSBhcnJheSBvZiBzdGF0ZSBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDQqbnVtU3RhZ2VzLiAqLworICAgIGZsb2F0MzJfdCAqcENvZWZmczsgICAgICAvKio8IFBvaW50cyB0byB0aGUgYXJyYXkgb2YgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA1Km51bVN0YWdlcy4gKi8KKyAgfSBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfZjMyOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBCaXF1YWQgY2FzY2FkZSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9xMTUoCisgIGNvbnN0IGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9xMTUgKiBTLAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBCaXF1YWQgY2FzY2FkZSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVN0YWdlcyAgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBvc3RTaGlmdCAgU2hpZnQgdG8gYmUgYXBwbGllZCB0byB0aGUgb3V0cHV0LiBWYXJpZXMgYWNjb3JkaW5nIHRvIHRoZSBjb2VmZmljaWVudHMgZm9ybWF0CisgICAqLworICB2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjFfaW5pdF9xMTUoCisgIGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9xMTUgKiBTLAorICB1aW50OF90IG51bVN0YWdlcywKKyAgcTE1X3QgKiBwQ29lZmZzLAorICBxMTVfdCAqIHBTdGF0ZSwKKyAgaW50OF90IHBvc3RTaGlmdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIEZhc3QgYnV0IGxlc3MgcHJlY2lzZSBwcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIGZpbHRlciBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgQmlxdWFkIGNhc2NhZGUgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjFfZmFzdF9xMTUoCisgIGNvbnN0IGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9xMTUgKiBTLAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIKKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBCaXF1YWQgY2FzY2FkZSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9xMzEoCisgIGNvbnN0IGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRmFzdCBidXQgbGVzcyBwcmVjaXNlIHByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgQmlxdWFkIGNhc2NhZGUgZmlsdGVyIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNC4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBCaXF1YWQgY2FzY2FkZSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9mYXN0X3EzMSgKKyAgY29uc3QgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3EzMSAqIFMsCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtU3RhZ2VzICBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgcG9zdFNoaWZ0ICBTaGlmdCB0byBiZSBhcHBsaWVkIHRvIHRoZSBvdXRwdXQuIFZhcmllcyBhY2NvcmRpbmcgdG8gdGhlIGNvZWZmaWNpZW50cyBmb3JtYXQKKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9pbml0X3EzMSgKKyAgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3EzMSAqIFMsCisgIHVpbnQ4X3QgbnVtU3RhZ2VzLAorICBxMzFfdCAqIHBDb2VmZnMsCisgIHEzMV90ICogcFN0YXRlLAorICBpbnQ4X3QgcG9zdFNoaWZ0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX2YzMigKKyAgY29uc3QgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtU3RhZ2VzICBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9pbml0X2YzMigKKyAgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X2YzMiAqIFMsCisgIHVpbnQ4X3QgbnVtU3RhZ2VzLAorICBmbG9hdDMyX3QgKiBwQ29lZmZzLAorICBmbG9hdDMyX3QgKiBwU3RhdGUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVJvd3M7ICAgICAvKio8IG51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXguICAgICAqLworICAgIHVpbnQxNl90IG51bUNvbHM7ICAgICAvKio8IG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBtYXRyaXguICAqLworICAgIGZsb2F0MzJfdCAqcERhdGE7ICAgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSBvZiB0aGUgbWF0cml4LiAqLworICB9IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVJvd3M7ICAgICAvKio8IG51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXguICAgICAqLworICAgIHVpbnQxNl90IG51bUNvbHM7ICAgICAvKio8IG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBtYXRyaXguICAqLworICAgIGZsb2F0NjRfdCAqcERhdGE7ICAgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSBvZiB0aGUgbWF0cml4LiAqLworICB9IGFybV9tYXRyaXhfaW5zdGFuY2VfZjY0OworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IG1hdHJpeCBzdHJ1Y3R1cmUuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtUm93czsgICAgIC8qKjwgbnVtYmVyIG9mIHJvd3Mgb2YgdGhlIG1hdHJpeC4gICAgICovCisgICAgdWludDE2X3QgbnVtQ29sczsgICAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIG1hdHJpeC4gICovCisgICAgcTE1X3QgKnBEYXRhOyAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIG9mIHRoZSBtYXRyaXguICovCisgIH0gYXJtX21hdHJpeF9pbnN0YW5jZV9xMTU7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgbWF0cml4IHN0cnVjdHVyZS4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1Sb3dzOyAgICAgLyoqPCBudW1iZXIgb2Ygcm93cyBvZiB0aGUgbWF0cml4LiAgICAgKi8KKyAgICB1aW50MTZfdCBudW1Db2xzOyAgICAgLyoqPCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4LiAgKi8KKyAgICBxMzFfdCAqcERhdGE7ICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGRhdGEgb2YgdGhlIG1hdHJpeC4gKi8KKyAgfSBhcm1fbWF0cml4X2luc3RhbmNlX3EzMTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgbWF0cml4IGFkZGl0aW9uLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyCisgICAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfYWRkX2YzMigKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBwU3JjQSwKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBwU3JjQiwKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTE1IG1hdHJpeCBhZGRpdGlvbi4KKyAgICogQHBhcmFtW2luXSAgIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtvdXRdICBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X2FkZF9xMTUoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcFNyY0EsCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcFNyY0IsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIFEzMSBtYXRyaXggYWRkaXRpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9hZGRfcTMxKAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmNBLAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmNCLAorICBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBGbG9hdGluZy1wb2ludCwgY29tcGxleCwgbWF0cml4IG11bHRpcGxpY2F0aW9uLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyCisgICAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfY21wbHhfbXVsdF9mMzIoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcFNyY0EsCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcFNyY0IsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIFExNSwgY29tcGxleCwgIG1hdHJpeCBtdWx0aXBsaWNhdGlvbi4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X2NtcGx4X211bHRfcTE1KAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBTcmNBLAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBTcmNCLAorICBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBEc3QsCisgIHExNV90ICogcFNjcmF0Y2gpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMzEsIGNvbXBsZXgsIG1hdHJpeCBtdWx0aXBsaWNhdGlvbi4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X2NtcGx4X211bHRfcTMxKAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmNBLAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmNCLAorICBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBGbG9hdGluZy1wb2ludCBtYXRyaXggdHJhbnNwb3NlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICBwb2ludHMgdG8gdGhlIGlucHV0IG1hdHJpeAorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICBwb2ludHMgdG8gdGhlIG91dHB1dCBtYXRyaXgKKyAgICogQHJldHVybiAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIgIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+CisgICAqIG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfdHJhbnNfZjMyKAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqIHBTcmMsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIFExNSBtYXRyaXggdHJhbnNwb3NlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICBwb2ludHMgdG8gdGhlIGlucHV0IG1hdHJpeAorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICBwb2ludHMgdG8gdGhlIG91dHB1dCBtYXRyaXgKKyAgICogQHJldHVybiAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIgIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+CisgICAqIG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfdHJhbnNfcTE1KAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBTcmMsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIFEzMSBtYXRyaXggdHJhbnNwb3NlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICBwb2ludHMgdG8gdGhlIGlucHV0IG1hdHJpeAorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICBwb2ludHMgdG8gdGhlIG91dHB1dCBtYXRyaXgKKyAgICogQHJldHVybiAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIgIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+CisgICAqIG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfdHJhbnNfcTMxKAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmMsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IG1hdHJpeCBtdWx0aXBsaWNhdGlvbgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyCisgICAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfbXVsdF9mMzIoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcFNyY0EsCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcFNyY0IsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIFExNSBtYXRyaXggbXVsdGlwbGljYXRpb24KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gIHBTdGF0ZSAgcG9pbnRzIHRvIHRoZSBhcnJheSBmb3Igc3RvcmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cworICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9tdWx0X3ExNSgKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwU3JjQSwKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwU3JjQiwKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwRHN0LAorICBxMTVfdCAqIHBTdGF0ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFExNSBtYXRyaXggbXVsdGlwbGljYXRpb24gKGZhc3QgdmFyaWFudCkgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00CisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICBwU3RhdGUgIHBvaW50cyB0byB0aGUgYXJyYXkgZm9yIHN0b3JpbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMKKyAgICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyCisgICAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfbXVsdF9mYXN0X3ExNSgKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwU3JjQSwKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwU3JjQiwKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwRHN0LAorICBxMTVfdCAqIHBTdGF0ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFEzMSBtYXRyaXggbXVsdGlwbGljYXRpb24KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X211bHRfcTMxKAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmNBLAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmNCLAorICBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMzEgbWF0cml4IG11bHRpcGxpY2F0aW9uIChmYXN0IHZhcmlhbnQpIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNAorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyCisgICAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfbXVsdF9mYXN0X3EzMSgKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKiBwU3JjQSwKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKiBwU3JjQiwKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgbWF0cml4IHN1YnRyYWN0aW9uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9zdWJfZjMyKAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqIHBTcmNBLAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqIHBTcmNCLAorICBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMTUgbWF0cml4IHN1YnRyYWN0aW9uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9zdWJfcTE1KAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBTcmNBLAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBTcmNCLAorICBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMzEgbWF0cml4IHN1YnRyYWN0aW9uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9zdWJfcTMxKAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmNBLAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmNCLAorICBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBGbG9hdGluZy1wb2ludCBtYXRyaXggc2NhbGluZy4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgIHBvaW50cyB0byB0aGUgaW5wdXQgbWF0cml4CisgICAqIEBwYXJhbVtpbl0gIHNjYWxlICBzY2FsZSBmYWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byB0aGUgb3V0cHV0IG1hdHJpeAorICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9zY2FsZV9mMzIoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcFNyYywKKyAgZmxvYXQzMl90IHNjYWxlLAorICBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMTUgbWF0cml4IHNjYWxpbmcuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byBpbnB1dCBtYXRyaXgKKyAgICogQHBhcmFtW2luXSAgc2NhbGVGcmFjdCAgZnJhY3Rpb25hbCBwb3J0aW9uIG9mIHRoZSBzY2FsZSBmYWN0b3IKKyAgICogQHBhcmFtW2luXSAgc2hpZnQgICAgICAgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgdGhlIHJlc3VsdCBieQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeAorICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9zY2FsZV9xMTUoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcFNyYywKKyAgcTE1X3Qgc2NhbGVGcmFjdCwKKyAgaW50MzJfdCBzaGlmdCwKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTMxIG1hdHJpeCBzY2FsaW5nLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gaW5wdXQgbWF0cml4CisgICAqIEBwYXJhbVtpbl0gIHNjYWxlRnJhY3QgIGZyYWN0aW9uYWwgcG9ydGlvbiBvZiB0aGUgc2NhbGUgZmFjdG9yCisgICAqIEBwYXJhbVtpbl0gIHNoaWZ0ICAgICAgIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0IHRoZSByZXN1bHQgYnkKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X3NjYWxlX3EzMSgKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKiBwU3JjLAorICBxMzFfdCBzY2FsZUZyYWN0LAorICBpbnQzMl90IHNoaWZ0LAorICBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTMxIG1hdHJpeCBpbml0aWFsaXphdGlvbi4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgbWF0cml4IHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgblJvd3MgICAgIG51bWJlciBvZiByb3dzIGluIHRoZSBtYXRyaXguCisgICAqIEBwYXJhbVtpbl0gICAgIG5Db2x1bW5zICBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbWF0cml4LgorICAgKiBAcGFyYW1baW5dICAgICBwRGF0YSAgICAgcG9pbnRzIHRvIHRoZSBtYXRyaXggZGF0YSBhcnJheS4KKyAgICovCisgIHZvaWQgYXJtX21hdF9pbml0X3EzMSgKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKiBTLAorICB1aW50MTZfdCBuUm93cywKKyAgdWludDE2X3QgbkNvbHVtbnMsCisgIHEzMV90ICogcERhdGEpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTE1IG1hdHJpeCBpbml0aWFsaXphdGlvbi4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgbWF0cml4IHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgblJvd3MgICAgIG51bWJlciBvZiByb3dzIGluIHRoZSBtYXRyaXguCisgICAqIEBwYXJhbVtpbl0gICAgIG5Db2x1bW5zICBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbWF0cml4LgorICAgKiBAcGFyYW1baW5dICAgICBwRGF0YSAgICAgcG9pbnRzIHRvIHRoZSBtYXRyaXggZGF0YSBhcnJheS4KKyAgICovCisgIHZvaWQgYXJtX21hdF9pbml0X3ExNSgKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBTLAorICB1aW50MTZfdCBuUm93cywKKyAgdWludDE2X3QgbkNvbHVtbnMsCisgIHExNV90ICogcERhdGEpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgbWF0cml4IGluaXRpYWxpemF0aW9uLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBuUm93cyAgICAgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4KKyAgICogQHBhcmFtW2luXSAgICAgbkNvbHVtbnMgIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguCisgICAqIEBwYXJhbVtpbl0gICAgIHBEYXRhICAgICBwb2ludHMgdG8gdGhlIG1hdHJpeCBkYXRhIGFycmF5LgorICAgKi8KKyAgdm9pZCBhcm1fbWF0X2luaXRfZjMyKAorICBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqIFMsCisgIHVpbnQxNl90IG5Sb3dzLAorICB1aW50MTZfdCBuQ29sdW1ucywKKyAgZmxvYXQzMl90ICogcERhdGEpOworCisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBQSUQgQ29udHJvbC4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICBxMTVfdCBBMDsgICAgICAgICAgIC8qKjwgVGhlIGRlcml2ZWQgZ2FpbiwgQTAgPSBLcCArIEtpICsgS2QgLiAqLworI2lmZGVmIEFSTV9NQVRIX0NNMF9GQU1JTFkKKyAgICBxMTVfdCBBMTsKKyAgICBxMTVfdCBBMjsKKyNlbHNlCisgICAgcTMxX3QgQTE7ICAgICAgICAgICAvKio8IFRoZSBkZXJpdmVkIGdhaW4gQTEgPSAtS3AgLSAyS2QgfCBLZC4qLworI2VuZGlmCisgICAgcTE1X3Qgc3RhdGVbM107ICAgICAvKio8IFRoZSBzdGF0ZSBhcnJheSBvZiBsZW5ndGggMy4gKi8KKyAgICBxMTVfdCBLcDsgICAgICAgICAgIC8qKjwgVGhlIHByb3BvcnRpb25hbCBnYWluLiAqLworICAgIHExNV90IEtpOyAgICAgICAgICAgLyoqPCBUaGUgaW50ZWdyYWwgZ2Fpbi4gKi8KKyAgICBxMTVfdCBLZDsgICAgICAgICAgIC8qKjwgVGhlIGRlcml2YXRpdmUgZ2Fpbi4gKi8KKyAgfSBhcm1fcGlkX2luc3RhbmNlX3ExNTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBQSUQgQ29udHJvbC4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICBxMzFfdCBBMDsgICAgICAgICAgICAvKio8IFRoZSBkZXJpdmVkIGdhaW4sIEEwID0gS3AgKyBLaSArIEtkIC4gKi8KKyAgICBxMzFfdCBBMTsgICAgICAgICAgICAvKio8IFRoZSBkZXJpdmVkIGdhaW4sIEExID0gLUtwIC0gMktkLiAqLworICAgIHEzMV90IEEyOyAgICAgICAgICAgIC8qKjwgVGhlIGRlcml2ZWQgZ2FpbiwgQTIgPSBLZCAuICovCisgICAgcTMxX3Qgc3RhdGVbM107ICAgICAgLyoqPCBUaGUgc3RhdGUgYXJyYXkgb2YgbGVuZ3RoIDMuICovCisgICAgcTMxX3QgS3A7ICAgICAgICAgICAgLyoqPCBUaGUgcHJvcG9ydGlvbmFsIGdhaW4uICovCisgICAgcTMxX3QgS2k7ICAgICAgICAgICAgLyoqPCBUaGUgaW50ZWdyYWwgZ2Fpbi4gKi8KKyAgICBxMzFfdCBLZDsgICAgICAgICAgICAvKio8IFRoZSBkZXJpdmF0aXZlIGdhaW4uICovCisgIH0gYXJtX3BpZF9pbnN0YW5jZV9xMzE7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBQSUQgQ29udHJvbC4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICBmbG9hdDMyX3QgQTA7ICAgICAgICAgIC8qKjwgVGhlIGRlcml2ZWQgZ2FpbiwgQTAgPSBLcCArIEtpICsgS2QgLiAqLworICAgIGZsb2F0MzJfdCBBMTsgICAgICAgICAgLyoqPCBUaGUgZGVyaXZlZCBnYWluLCBBMSA9IC1LcCAtIDJLZC4gKi8KKyAgICBmbG9hdDMyX3QgQTI7ICAgICAgICAgIC8qKjwgVGhlIGRlcml2ZWQgZ2FpbiwgQTIgPSBLZCAuICovCisgICAgZmxvYXQzMl90IHN0YXRlWzNdOyAgICAvKio8IFRoZSBzdGF0ZSBhcnJheSBvZiBsZW5ndGggMy4gKi8KKyAgICBmbG9hdDMyX3QgS3A7ICAgICAgICAgIC8qKjwgVGhlIHByb3BvcnRpb25hbCBnYWluLiAqLworICAgIGZsb2F0MzJfdCBLaTsgICAgICAgICAgLyoqPCBUaGUgaW50ZWdyYWwgZ2Fpbi4gKi8KKyAgICBmbG9hdDMyX3QgS2Q7ICAgICAgICAgIC8qKjwgVGhlIGRlcml2YXRpdmUgZ2Fpbi4gKi8KKyAgfSBhcm1fcGlkX2luc3RhbmNlX2YzMjsKKworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBQSUQgQ29udHJvbC4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUElEIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgcmVzZXRTdGF0ZUZsYWcgIGZsYWcgdG8gcmVzZXQgdGhlIHN0YXRlLiAwID0gbm8gY2hhbmdlIGluIHN0YXRlIDEgPSByZXNldCB0aGUgc3RhdGUuCisgICAqLworICB2b2lkIGFybV9waWRfaW5pdF9mMzIoCisgIGFybV9waWRfaW5zdGFuY2VfZjMyICogUywKKyAgaW50MzJfdCByZXNldFN0YXRlRmxhZyk7CisKKworICAvKioKKyAgICogQGJyaWVmICBSZXNldCBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IFBJRCBDb250cm9sLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgUElEIENvbnRyb2wgc3RydWN0dXJlCisgICAqLworICB2b2lkIGFybV9waWRfcmVzZXRfZjMyKAorICBhcm1fcGlkX2luc3RhbmNlX2YzMiAqIFMpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgUElEIENvbnRyb2wuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBQSUQgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICByZXNldFN0YXRlRmxhZyAgZmxhZyB0byByZXNldCB0aGUgc3RhdGUuIDAgPSBubyBjaGFuZ2UgaW4gc3RhdGUgMSA9IHJlc2V0IHRoZSBzdGF0ZS4KKyAgICovCisgIHZvaWQgYXJtX3BpZF9pbml0X3EzMSgKKyAgYXJtX3BpZF9pbnN0YW5jZV9xMzEgKiBTLAorICBpbnQzMl90IHJlc2V0U3RhdGVGbGFnKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFJlc2V0IGZ1bmN0aW9uIGZvciB0aGUgUTMxIFBJRCBDb250cm9sLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgUElEIENvbnRyb2wgc3RydWN0dXJlCisgICAqLworCisgIHZvaWQgYXJtX3BpZF9yZXNldF9xMzEoCisgIGFybV9waWRfaW5zdGFuY2VfcTMxICogUyk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBQSUQgQ29udHJvbC4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IFBJRCBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIHJlc2V0U3RhdGVGbGFnICBmbGFnIHRvIHJlc2V0IHRoZSBzdGF0ZS4gMCA9IG5vIGNoYW5nZSBpbiBzdGF0ZSAxID0gcmVzZXQgdGhlIHN0YXRlLgorICAgKi8KKyAgdm9pZCBhcm1fcGlkX2luaXRfcTE1KAorICBhcm1fcGlkX2luc3RhbmNlX3ExNSAqIFMsCisgIGludDMyX3QgcmVzZXRTdGF0ZUZsYWcpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUmVzZXQgZnVuY3Rpb24gZm9yIHRoZSBRMTUgUElEIENvbnRyb2wuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgcTE1IFBJRCBDb250cm9sIHN0cnVjdHVyZQorICAgKi8KKyAgdm9pZCBhcm1fcGlkX3Jlc2V0X3ExNSgKKyAgYXJtX3BpZF9pbnN0YW5jZV9xMTUgKiBTKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgTGluZWFyIEludGVycG9sYXRlIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IG5WYWx1ZXM7ICAgICAgICAgICAvKio8IG5WYWx1ZXMgKi8KKyAgICBmbG9hdDMyX3QgeDE7ICAgICAgICAgICAgICAgLyoqPCB4MSAqLworICAgIGZsb2F0MzJfdCB4U3BhY2luZzsgICAgICAgICAvKio8IHhTcGFjaW5nICovCisgICAgZmxvYXQzMl90ICpwWURhdGE7ICAgICAgICAgIC8qKjwgcG9pbnRlciB0byB0aGUgdGFibGUgb2YgWSB2YWx1ZXMgKi8KKyAgfSBhcm1fbGluZWFyX2ludGVycF9pbnN0YW5jZV9mMzI7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBiaWxpbmVhciBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVJvd3M7ICAgLyoqPCBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZGF0YSB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCBudW1Db2xzOyAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGRhdGEgdGFibGUuICovCisgICAgZmxvYXQzMl90ICpwRGF0YTsgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSB0YWJsZS4gKi8KKyAgfSBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX2YzMjsKKworICAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbi4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1Sb3dzOyAgIC8qKjwgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGRhdGEgdGFibGUuICovCisgICAgdWludDE2X3QgbnVtQ29sczsgICAvKio8IG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBkYXRhIHRhYmxlLiAqLworICAgIHEzMV90ICpwRGF0YTsgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGRhdGEgdGFibGUuICovCisgIH0gYXJtX2JpbGluZWFyX2ludGVycF9pbnN0YW5jZV9xMzE7CisKKyAgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IGJpbGluZWFyIGludGVycG9sYXRpb24gZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtUm93czsgICAvKio8IG51bWJlciBvZiByb3dzIGluIHRoZSBkYXRhIHRhYmxlLiAqLworICAgIHVpbnQxNl90IG51bUNvbHM7ICAgLyoqPCBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZGF0YSB0YWJsZS4gKi8KKyAgICBxMTVfdCAqcERhdGE7ICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIHRhYmxlLiAqLworICB9IGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfcTE1OworCisgICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBiaWxpbmVhciBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVJvd3M7ICAgLyoqPCBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZGF0YSB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCBudW1Db2xzOyAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGRhdGEgdGFibGUuICovCisgICAgcTdfdCAqcERhdGE7ICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSB0YWJsZS4gKi8KKyAgfSBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX3E3OworCisKKyAgLyoqCisgICAqIEBicmllZiBRNyB2ZWN0b3IgbXVsdGlwbGljYXRpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fbXVsdF9xNygKKyAgcTdfdCAqIHBTcmNBLAorICBxN190ICogcFNyY0IsCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMTUgdmVjdG9yIG11bHRpcGxpY2F0aW9uLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX211bHRfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICBxMTVfdCAqIHBTcmNCLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFEzMSB2ZWN0b3IgbXVsdGlwbGljYXRpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fbXVsdF9xMzEoCisgIHEzMV90ICogcFNyY0EsCisgIHEzMV90ICogcFNyY0IsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgdmVjdG9yIG11bHRpcGxpY2F0aW9uLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX211bHRfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjQSwKKyAgZmxvYXQzMl90ICogcFNyY0IsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBDRkZUL0NJRkZUIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IGZmdExlbjsgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBGRlQuICovCisgICAgdWludDhfdCBpZmZ0RmxhZzsgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZz0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZz0xKSB0cmFuc2Zvcm0uICovCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZzsgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWc9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovCisgICAgcTE1X3QgKnBUd2lkZGxlOyAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIFNpbiB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYml0IHJldmVyc2FsIHRhYmxlLiAqLworICAgIHVpbnQxNl90IHR3aWRDb2VmTW9kaWZpZXI7ICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCBiaXRSZXZGYWN0b3I7ICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovCisgIH0gYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX3ExNTsKKworLyogRGVwcmVjYXRlZCAqLworICBhcm1fc3RhdHVzIGFybV9jZmZ0X3JhZGl4Ml9pbml0X3ExNSgKKyAgYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX3ExNSAqIFMsCisgIHVpbnQxNl90IGZmdExlbiwKKyAgdWludDhfdCBpZmZ0RmxhZywKKyAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7CisKKy8qIERlcHJlY2F0ZWQgKi8KKyAgdm9pZCBhcm1fY2ZmdF9yYWRpeDJfcTE1KAorICBjb25zdCBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3JjKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IENGRlQvQ0lGRlQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8KKyAgICB1aW50OF90IGlmZnRGbGFnOyAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnPTApIG9yIGludmVyc2UgKGlmZnRGbGFnPTEpIHRyYW5zZm9ybS4gKi8KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnOyAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZz0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWc9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8KKyAgICBxMTVfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgdWludDE2X3QgKnBCaXRSZXZUYWJsZTsgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCB0d2lkQ29lZk1vZGlmaWVyOyAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgdWludDE2X3QgYml0UmV2RmFjdG9yOyAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgYml0IHJldmVyc2FsIHRhYmxlLiAqLworICB9IGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMTU7CisKKy8qIERlcHJlY2F0ZWQgKi8KKyAgYXJtX3N0YXR1cyBhcm1fY2ZmdF9yYWRpeDRfaW5pdF9xMTUoCisgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMTUgKiBTLAorICB1aW50MTZfdCBmZnRMZW4sCisgIHVpbnQ4X3QgaWZmdEZsYWcsCisgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOworCisvKiBEZXByZWNhdGVkICovCisgIHZvaWQgYXJtX2NmZnRfcmFkaXg0X3ExNSgKKyAgY29uc3QgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3ExNSAqIFMsCisgIHExNV90ICogcFNyYyk7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBSYWRpeC0yIFEzMSBDRkZUL0NJRkZUIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IGZmdExlbjsgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBGRlQuICovCisgICAgdWludDhfdCBpZmZ0RmxhZzsgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZz0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZz0xKSB0cmFuc2Zvcm0uICovCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZzsgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWc9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovCisgICAgcTMxX3QgKnBUd2lkZGxlOyAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIFR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovCisgICAgdWludDE2X3QgdHdpZENvZWZNb2RpZmllcjsgICAgICAgLyoqPCB0d2lkZGxlIGNvZWZmaWNpZW50IG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIHVpbnQxNl90IGJpdFJldkZhY3RvcjsgICAgICAgICAgIC8qKjwgYml0IHJldmVyc2FsIG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8KKyAgfSBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfcTMxOworCisvKiBEZXByZWNhdGVkICovCisgIGFybV9zdGF0dXMgYXJtX2NmZnRfcmFkaXgyX2luaXRfcTMxKAorICBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfcTMxICogUywKKyAgdWludDE2X3QgZmZ0TGVuLAorICB1aW50OF90IGlmZnRGbGFnLAorICB1aW50OF90IGJpdFJldmVyc2VGbGFnKTsKKworLyogRGVwcmVjYXRlZCAqLworICB2b2lkIGFybV9jZmZ0X3JhZGl4Ml9xMzEoCisgIGNvbnN0IGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMpOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIENGRlQvQ0lGRlQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8KKyAgICB1aW50OF90IGlmZnRGbGFnOyAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnPTApIG9yIGludmVyc2UgKGlmZnRGbGFnPTEpIHRyYW5zZm9ybS4gKi8KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnOyAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZz0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWc9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8KKyAgICBxMzFfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgdWludDE2X3QgKnBCaXRSZXZUYWJsZTsgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCB0d2lkQ29lZk1vZGlmaWVyOyAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgdWludDE2X3QgYml0UmV2RmFjdG9yOyAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgYml0IHJldmVyc2FsIHRhYmxlLiAqLworICB9IGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMzE7CisKKy8qIERlcHJlY2F0ZWQgKi8KKyAgdm9pZCBhcm1fY2ZmdF9yYWRpeDRfcTMxKAorICBjb25zdCBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTMxICogUywKKyAgcTMxX3QgKiBwU3JjKTsKKworLyogRGVwcmVjYXRlZCAqLworICBhcm1fc3RhdHVzIGFybV9jZmZ0X3JhZGl4NF9pbml0X3EzMSgKKyAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3EzMSAqIFMsCisgIHVpbnQxNl90IGZmdExlbiwKKyAgdWludDhfdCBpZmZ0RmxhZywKKyAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBDRkZUL0NJRkZUIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IGZmdExlbjsgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8KKyAgICB1aW50OF90IGlmZnRGbGFnOyAgICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IHNlbGVjdHMgZm9yd2FyZCAoaWZmdEZsYWc9MCkgb3IgaW52ZXJzZSAoaWZmdEZsYWc9MSkgdHJhbnNmb3JtLiAqLworICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWc7ICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWc9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovCisgICAgZmxvYXQzMl90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgVHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgdWludDE2X3QgKnBCaXRSZXZUYWJsZTsgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYml0IHJldmVyc2FsIHRhYmxlLiAqLworICAgIHVpbnQxNl90IHR3aWRDb2VmTW9kaWZpZXI7ICAgICAgICAgLyoqPCB0d2lkZGxlIGNvZWZmaWNpZW50IG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIHVpbnQxNl90IGJpdFJldkZhY3RvcjsgICAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgYml0IHJldmVyc2FsIHRhYmxlLiAqLworICAgIGZsb2F0MzJfdCBvbmVieWZmdExlbjsgICAgICAgICAgICAgLyoqPCB2YWx1ZSBvZiAxL2ZmdExlbi4gKi8KKyAgfSBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfZjMyOworCisvKiBEZXByZWNhdGVkICovCisgIGFybV9zdGF0dXMgYXJtX2NmZnRfcmFkaXgyX2luaXRfZjMyKAorICBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfZjMyICogUywKKyAgdWludDE2X3QgZmZ0TGVuLAorICB1aW50OF90IGlmZnRGbGFnLAorICB1aW50OF90IGJpdFJldmVyc2VGbGFnKTsKKworLyogRGVwcmVjYXRlZCAqLworICB2b2lkIGFybV9jZmZ0X3JhZGl4Ml9mMzIoCisgIGNvbnN0IGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9mMzIgKiBTLAorICBmbG9hdDMyX3QgKiBwU3JjKTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IENGRlQvQ0lGRlQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLworICAgIHVpbnQ4X3QgaWZmdEZsYWc7ICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZz0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZz0xKSB0cmFuc2Zvcm0uICovCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZzsgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZz0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWc9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8KKyAgICBmbG9hdDMyX3QgKnBUd2lkZGxlOyAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBUd2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovCisgICAgdWludDE2X3QgdHdpZENvZWZNb2RpZmllcjsgICAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgdWludDE2X3QgYml0UmV2RmFjdG9yOyAgICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovCisgICAgZmxvYXQzMl90IG9uZWJ5ZmZ0TGVuOyAgICAgICAgICAgICAvKio8IHZhbHVlIG9mIDEvZmZ0TGVuLiAqLworICB9IGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9mMzI7CisKKy8qIERlcHJlY2F0ZWQgKi8KKyAgYXJtX3N0YXR1cyBhcm1fY2ZmdF9yYWRpeDRfaW5pdF9mMzIoCisgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9mMzIgKiBTLAorICB1aW50MTZfdCBmZnRMZW4sCisgIHVpbnQ4X3QgaWZmdEZsYWcsCisgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOworCisvKiBEZXByZWNhdGVkICovCisgIHZvaWQgYXJtX2NmZnRfcmFkaXg0X2YzMigKKyAgY29uc3QgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMpOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZml4ZWQtcG9pbnQgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBGRlQuICovCisgICAgY29uc3QgcTE1X3QgKnBUd2lkZGxlOyAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgVHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgY29uc3QgdWludDE2X3QgKnBCaXRSZXZUYWJsZTsgICAgICAvKio8IHBvaW50cyB0byB0aGUgYml0IHJldmVyc2FsIHRhYmxlLiAqLworICAgIHVpbnQxNl90IGJpdFJldkxlbmd0aDsgICAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgdGFibGUgbGVuZ3RoLiAqLworICB9IGFybV9jZmZ0X2luc3RhbmNlX3ExNTsKKwordm9pZCBhcm1fY2ZmdF9xMTUoCisgICAgY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTE1ICogUywKKyAgICBxMTVfdCAqIHAxLAorICAgIHVpbnQ4X3QgaWZmdEZsYWcsCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmaXhlZC1wb2ludCBDRkZUL0NJRkZUIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IGZmdExlbjsgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8KKyAgICBjb25zdCBxMzFfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBUd2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICBjb25zdCB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovCisgICAgdWludDE2X3QgYml0UmV2TGVuZ3RoOyAgICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCB0YWJsZSBsZW5ndGguICovCisgIH0gYXJtX2NmZnRfaW5zdGFuY2VfcTMxOworCit2b2lkIGFybV9jZmZ0X3EzMSgKKyAgICBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMzEgKiBTLAorICAgIHEzMV90ICogcDEsCisgICAgdWludDhfdCBpZmZ0RmxhZywKKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnKTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IENGRlQvQ0lGRlQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLworICAgIGNvbnN0IGZsb2F0MzJfdCAqcFR3aWRkbGU7ICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIFR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIGNvbnN0IHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCBiaXRSZXZMZW5ndGg7ICAgICAgICAgICAgIC8qKjwgYml0IHJldmVyc2FsIHRhYmxlIGxlbmd0aC4gKi8KKyAgfSBhcm1fY2ZmdF9pbnN0YW5jZV9mMzI7CisKKyAgdm9pZCBhcm1fY2ZmdF9mMzIoCisgIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHAxLAorICB1aW50OF90IGlmZnRGbGFnLAorICB1aW50OF90IGJpdFJldmVyc2VGbGFnKTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBSRkZUL1JJRkZUIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IGZmdExlblJlYWw7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSByZWFsIEZGVC4gKi8KKyAgICB1aW50OF90IGlmZnRGbGFnUjsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnUj0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZ1I9MSkgdHJhbnNmb3JtLiAqLworICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWdSOyAgICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnUj0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWdSPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovCisgICAgdWludDMyX3QgdHdpZENvZWZSTW9kaWZpZXI7ICAgICAgICAgICAgICAgLyoqPCB0d2lkZGxlIGNvZWZmaWNpZW50IG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIHExNV90ICpwVHdpZGRsZUFSZWFsOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWFsIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIHExNV90ICpwVHdpZGRsZUJSZWFsOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBpbWFnIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3ExNSAqcENmZnQ7ICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb21wbGV4IEZGVCBpbnN0YW5jZS4gKi8KKyAgfSBhcm1fcmZmdF9pbnN0YW5jZV9xMTU7CisKKyAgYXJtX3N0YXR1cyBhcm1fcmZmdF9pbml0X3ExNSgKKyAgYXJtX3JmZnRfaW5zdGFuY2VfcTE1ICogUywKKyAgdWludDMyX3QgZmZ0TGVuUmVhbCwKKyAgdWludDMyX3QgaWZmdEZsYWdSLAorICB1aW50MzJfdCBiaXRSZXZlcnNlRmxhZyk7CisKKyAgdm9pZCBhcm1fcmZmdF9xMTUoCisgIGNvbnN0IGFybV9yZmZ0X2luc3RhbmNlX3ExNSAqIFMsCisgIHExNV90ICogcFNyYywKKyAgcTE1X3QgKiBwRHN0KTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBSRkZUL1JJRkZUIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IGZmdExlblJlYWw7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIHJlYWwgRkZULiAqLworICAgIHVpbnQ4X3QgaWZmdEZsYWdSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZ1I9MCkgb3IgaW52ZXJzZSAoaWZmdEZsYWdSPTEpIHRyYW5zZm9ybS4gKi8KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnUjsgICAgICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnUj0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWdSPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovCisgICAgdWludDMyX3QgdHdpZENvZWZSTW9kaWZpZXI7ICAgICAgICAgICAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgcTMxX3QgKnBUd2lkZGxlQVJlYWw7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgcmVhbCB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICBxMzFfdCAqcFR3aWRkbGVCUmVhbDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBpbWFnIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3EzMSAqcENmZnQ7ICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvbXBsZXggRkZUIGluc3RhbmNlLiAqLworICB9IGFybV9yZmZ0X2luc3RhbmNlX3EzMTsKKworICBhcm1fc3RhdHVzIGFybV9yZmZ0X2luaXRfcTMxKAorICBhcm1fcmZmdF9pbnN0YW5jZV9xMzEgKiBTLAorICB1aW50MzJfdCBmZnRMZW5SZWFsLAorICB1aW50MzJfdCBpZmZ0RmxhZ1IsCisgIHVpbnQzMl90IGJpdFJldmVyc2VGbGFnKTsKKworICB2b2lkIGFybV9yZmZ0X3EzMSgKKyAgY29uc3QgYXJtX3JmZnRfaW5zdGFuY2VfcTMxICogUywKKyAgcTMxX3QgKiBwU3JjLAorICBxMzFfdCAqIHBEc3QpOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgUkZGVC9SSUZGVCBmdW5jdGlvbi4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBmZnRMZW5SZWFsOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSByZWFsIEZGVC4gKi8KKyAgICB1aW50MTZfdCBmZnRMZW5CeTI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBjb21wbGV4IEZGVC4gKi8KKyAgICB1aW50OF90IGlmZnRGbGFnUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IHNlbGVjdHMgZm9yd2FyZCAoaWZmdEZsYWdSPTApIG9yIGludmVyc2UgKGlmZnRGbGFnUj0xKSB0cmFuc2Zvcm0uICovCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZ1I7ICAgICAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZ1I9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnUj0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLworICAgIHVpbnQzMl90IHR3aWRDb2VmUk1vZGlmaWVyOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICBmbG9hdDMyX3QgKnBUd2lkZGxlQVJlYWw7ICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWFsIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIGZsb2F0MzJfdCAqcFR3aWRkbGVCUmVhbDsgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGltYWcgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX2YzMiAqcENmZnQ7ICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29tcGxleCBGRlQgaW5zdGFuY2UuICovCisgIH0gYXJtX3JmZnRfaW5zdGFuY2VfZjMyOworCisgIGFybV9zdGF0dXMgYXJtX3JmZnRfaW5pdF9mMzIoCisgIGFybV9yZmZ0X2luc3RhbmNlX2YzMiAqIFMsCisgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9mMzIgKiBTX0NGRlQsCisgIHVpbnQzMl90IGZmdExlblJlYWwsCisgIHVpbnQzMl90IGlmZnRGbGFnUiwKKyAgdWludDMyX3QgYml0UmV2ZXJzZUZsYWcpOworCisgIHZvaWQgYXJtX3JmZnRfZjMyKAorICBjb25zdCBhcm1fcmZmdF9pbnN0YW5jZV9mMzIgKiBTLAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBmbG9hdDMyX3QgKiBwRHN0KTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IFJGRlQvUklGRlQgZnVuY3Rpb24uCisgICAqLwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGFybV9jZmZ0X2luc3RhbmNlX2YzMiBTaW50OyAgICAgIC8qKjwgSW50ZXJuYWwgQ0ZGVCBzdHJ1Y3R1cmUuICovCisgICAgdWludDE2X3QgZmZ0TGVuUkZGVDsgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIHJlYWwgc2VxdWVuY2UgKi8KKyAgICBmbG9hdDMyX3QgKiBwVHdpZGRsZVJGRlQ7ICAgICAgICAvKio8IFR3aWRkbGUgZmFjdG9ycyByZWFsIHN0YWdlICAqLworICB9IGFybV9yZmZ0X2Zhc3RfaW5zdGFuY2VfZjMyIDsKKworYXJtX3N0YXR1cyBhcm1fcmZmdF9mYXN0X2luaXRfZjMyICgKKyAgIGFybV9yZmZ0X2Zhc3RfaW5zdGFuY2VfZjMyICogUywKKyAgIHVpbnQxNl90IGZmdExlbik7CisKK3ZvaWQgYXJtX3JmZnRfZmFzdF9mMzIoCisgIGFybV9yZmZ0X2Zhc3RfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90ICogcCwgZmxvYXQzMl90ICogcE91dCwKKyAgdWludDhfdCBpZmZ0RmxhZyk7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBEQ1Q0L0lEQ1Q0IGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IE47ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRENUNC4gKi8KKyAgICB1aW50MTZfdCBOYnkyOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBoYWxmIG9mIHRoZSBsZW5ndGggb2YgdGhlIERDVDQuICovCisgICAgZmxvYXQzMl90IG5vcm1hbGl6ZTsgICAgICAgICAgICAgICAgIC8qKjwgbm9ybWFsaXppbmcgZmFjdG9yLiAqLworICAgIGZsb2F0MzJfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgZmxvYXQzMl90ICpwQ29zRmFjdG9yOyAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb3NGYWN0b3IgdGFibGUuICovCisgICAgYXJtX3JmZnRfaW5zdGFuY2VfZjMyICpwUmZmdDsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWFsIEZGVCBpbnN0YW5jZS4gKi8KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfZjMyICpwQ2ZmdDsgLyoqPCBwb2ludHMgdG8gdGhlIGNvbXBsZXggRkZUIGluc3RhbmNlLiAqLworICB9IGFybV9kY3Q0X2luc3RhbmNlX2YzMjsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRENUNC9JRENUNC4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgZmxvYXRpbmctcG9pbnQgRENUNC9JRENUNCBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIFNfUkZGVCAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIGZsb2F0aW5nLXBvaW50IFJGRlQvUklGRlQgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBTX0NGRlQgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBmbG9hdGluZy1wb2ludCBDRkZUL0NJRkZUIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgTiAgICAgICAgICBsZW5ndGggb2YgdGhlIERDVDQuCisgICAqIEBwYXJhbVtpbl0gICAgIE5ieTIgICAgICAgaGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBEQ1Q0LgorICAgKiBAcGFyYW1baW5dICAgICBub3JtYWxpemUgIG5vcm1hbGl6aW5nIGZhY3Rvci4KKyAgICogQHJldHVybiAgICAgIGFybV9zdGF0dXMgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgPGNvZGU+ZmZ0TGVuUmVhbDwvY29kZT4gaXMgbm90IGEgc3VwcG9ydGVkIHRyYW5zZm9ybSBsZW5ndGguCisgICAqLworICBhcm1fc3RhdHVzIGFybV9kY3Q0X2luaXRfZjMyKAorICBhcm1fZGN0NF9pbnN0YW5jZV9mMzIgKiBTLAorICBhcm1fcmZmdF9pbnN0YW5jZV9mMzIgKiBTX1JGRlQsCisgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9mMzIgKiBTX0NGRlQsCisgIHVpbnQxNl90IE4sCisgIHVpbnQxNl90IE5ieTIsCisgIGZsb2F0MzJfdCBub3JtYWxpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRENUNC9JRENUNC4KKyAgICogQHBhcmFtW2luXSAgICAgUyAgICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBEQ1Q0L0lEQ1Q0IHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luLG91dF0gcElubGluZUJ1ZmZlciAgcG9pbnRzIHRvIHRoZSBpbi1wbGFjZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlci4KKyAgICovCisgIHZvaWQgYXJtX2RjdDRfZjMyKAorICBjb25zdCBhcm1fZGN0NF9pbnN0YW5jZV9mMzIgKiBTLAorICBmbG9hdDMyX3QgKiBwU3RhdGUsCisgIGZsb2F0MzJfdCAqIHBJbmxpbmVCdWZmZXIpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgRENUNC9JRENUNCBmdW5jdGlvbi4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBOOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIERDVDQuICovCisgICAgdWludDE2X3QgTmJ5MjsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgaGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBEQ1Q0LiAqLworICAgIHEzMV90IG5vcm1hbGl6ZTsgICAgICAgICAgICAgICAgICAgICAvKio8IG5vcm1hbGl6aW5nIGZhY3Rvci4gKi8KKyAgICBxMzFfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIHEzMV90ICpwQ29zRmFjdG9yOyAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29zRmFjdG9yIHRhYmxlLiAqLworICAgIGFybV9yZmZ0X2luc3RhbmNlX3EzMSAqcFJmZnQ7ICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgcmVhbCBGRlQgaW5zdGFuY2UuICovCisgICAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3EzMSAqcENmZnQ7IC8qKjwgcG9pbnRzIHRvIHRoZSBjb21wbGV4IEZGVCBpbnN0YW5jZS4gKi8KKyAgfSBhcm1fZGN0NF9pbnN0YW5jZV9xMzE7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFEzMSBEQ1Q0L0lEQ1Q0LgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBRMzEgRENUNC9JRENUNCBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIFNfUkZGVCAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIFEzMSBSRkZUL1JJRkZUIHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICAgICBTX0NGRlQgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBRMzEgQ0ZGVC9DSUZGVCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgICAgTiAgICAgICAgICBsZW5ndGggb2YgdGhlIERDVDQuCisgICAqIEBwYXJhbVtpbl0gICAgIE5ieTIgICAgICAgaGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBEQ1Q0LgorICAgKiBAcGFyYW1baW5dICAgICBub3JtYWxpemUgIG5vcm1hbGl6aW5nIGZhY3Rvci4KKyAgICogQHJldHVybiAgICAgIGFybV9zdGF0dXMgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgPGNvZGU+TjwvY29kZT4gaXMgbm90IGEgc3VwcG9ydGVkIHRyYW5zZm9ybSBsZW5ndGguCisgICAqLworICBhcm1fc3RhdHVzIGFybV9kY3Q0X2luaXRfcTMxKAorICBhcm1fZGN0NF9pbnN0YW5jZV9xMzEgKiBTLAorICBhcm1fcmZmdF9pbnN0YW5jZV9xMzEgKiBTX1JGRlQsCisgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMzEgKiBTX0NGRlQsCisgIHVpbnQxNl90IE4sCisgIHVpbnQxNl90IE5ieTIsCisgIHEzMV90IG5vcm1hbGl6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgRENUNC9JRENUNC4KKyAgICogQHBhcmFtW2luXSAgICAgUyAgICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRENUNCBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgICAgIHBvaW50cyB0byBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbixvdXRdIHBJbmxpbmVCdWZmZXIgIHBvaW50cyB0byB0aGUgaW4tcGxhY2UgaW5wdXQgYW5kIG91dHB1dCBidWZmZXIuCisgICAqLworICB2b2lkIGFybV9kY3Q0X3EzMSgKKyAgY29uc3QgYXJtX2RjdDRfaW5zdGFuY2VfcTMxICogUywKKyAgcTMxX3QgKiBwU3RhdGUsCisgIHEzMV90ICogcElubGluZUJ1ZmZlcik7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBEQ1Q0L0lEQ1Q0IGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IE47ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRENUNC4gKi8KKyAgICB1aW50MTZfdCBOYnkyOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBoYWxmIG9mIHRoZSBsZW5ndGggb2YgdGhlIERDVDQuICovCisgICAgcTE1X3Qgbm9ybWFsaXplOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgbm9ybWFsaXppbmcgZmFjdG9yLiAqLworICAgIHExNV90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgcTE1X3QgKnBDb3NGYWN0b3I7ICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb3NGYWN0b3IgdGFibGUuICovCisgICAgYXJtX3JmZnRfaW5zdGFuY2VfcTE1ICpwUmZmdDsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWFsIEZGVCBpbnN0YW5jZS4gKi8KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTE1ICpwQ2ZmdDsgLyoqPCBwb2ludHMgdG8gdGhlIGNvbXBsZXggRkZUIGluc3RhbmNlLiAqLworICB9IGFybV9kY3Q0X2luc3RhbmNlX3ExNTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IERDVDQvSURDVDQuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIFExNSBEQ1Q0L0lEQ1Q0IHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgU19SRkZUICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgUTE1IFJGRlQvUklGRlQgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBTX0NGRlQgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBRMTUgQ0ZGVC9DSUZGVCBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIE4gICAgICAgICAgbGVuZ3RoIG9mIHRoZSBEQ1Q0LgorICAgKiBAcGFyYW1baW5dICAgICBOYnkyICAgICAgIGhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgRENUNC4KKyAgICogQHBhcmFtW2luXSAgICAgbm9ybWFsaXplICBub3JtYWxpemluZyBmYWN0b3IuCisgICAqIEByZXR1cm4gICAgICBhcm1fc3RhdHVzIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIDxjb2RlPk48L2NvZGU+IGlzIG5vdCBhIHN1cHBvcnRlZCB0cmFuc2Zvcm0gbGVuZ3RoLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fZGN0NF9pbml0X3ExNSgKKyAgYXJtX2RjdDRfaW5zdGFuY2VfcTE1ICogUywKKyAgYXJtX3JmZnRfaW5zdGFuY2VfcTE1ICogU19SRkZULAorICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTE1ICogU19DRkZULAorICB1aW50MTZfdCBOLAorICB1aW50MTZfdCBOYnkyLAorICBxMTVfdCBub3JtYWxpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IERDVDQvSURDVDQuCisgICAqIEBwYXJhbVtpbl0gICAgIFMgICAgICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IERDVDQgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBwSW5saW5lQnVmZmVyICBwb2ludHMgdG8gdGhlIGluLXBsYWNlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVyLgorICAgKi8KKyAgdm9pZCBhcm1fZGN0NF9xMTUoCisgIGNvbnN0IGFybV9kY3Q0X2luc3RhbmNlX3ExNSAqIFMsCisgIHExNV90ICogcFN0YXRlLAorICBxMTVfdCAqIHBJbmxpbmVCdWZmZXIpOworCisKKyAgLyoqCisgICAqIEBicmllZiBGbG9hdGluZy1wb2ludCB2ZWN0b3IgYWRkaXRpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fYWRkX2YzMigKKyAgZmxvYXQzMl90ICogcFNyY0EsCisgIGZsb2F0MzJfdCAqIHBTcmNCLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRNyB2ZWN0b3IgYWRkaXRpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fYWRkX3E3KAorICBxN190ICogcFNyY0EsCisgIHE3X3QgKiBwU3JjQiwKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFExNSB2ZWN0b3IgYWRkaXRpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fYWRkX3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMzEgdmVjdG9yIGFkZGl0aW9uLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2FkZF9xMzEoCisgIHEzMV90ICogcFNyY0EsCisgIHEzMV90ICogcFNyY0IsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgdmVjdG9yIHN1YnRyYWN0aW9uLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX3N1Yl9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmNBLAorICBmbG9hdDMyX3QgKiBwU3JjQiwKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTcgdmVjdG9yIHN1YnRyYWN0aW9uLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX3N1Yl9xNygKKyAgcTdfdCAqIHBTcmNBLAorICBxN190ICogcFNyY0IsCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMTUgdmVjdG9yIHN1YnRyYWN0aW9uLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX3N1Yl9xMTUoCisgIHExNV90ICogcFNyY0EsCisgIHExNV90ICogcFNyY0IsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTMxIHZlY3RvciBzdWJ0cmFjdGlvbi4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9zdWJfcTMxKAorICBxMzFfdCAqIHBTcmNBLAorICBxMzFfdCAqIHBTcmNCLAorICBxMzFfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIE11bHRpcGxpZXMgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IgYnkgYSBzY2FsYXIuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgc2NhbGUgICAgICBzY2FsZSBmYWN0b3IgdG8gYmUgYXBwbGllZAorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX3NjYWxlX2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90IHNjYWxlLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBNdWx0aXBsaWVzIGEgUTcgdmVjdG9yIGJ5IGEgc2NhbGFyLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBzY2FsZUZyYWN0ICBmcmFjdGlvbmFsIHBvcnRpb24gb2YgdGhlIHNjYWxlIHZhbHVlCisgICAqIEBwYXJhbVtpbl0gIHNoaWZ0ICAgICAgIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0IHRoZSByZXN1bHQgYnkKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX3NjYWxlX3E3KAorICBxN190ICogcFNyYywKKyAgcTdfdCBzY2FsZUZyYWN0LAorICBpbnQ4X3Qgc2hpZnQsCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBNdWx0aXBsaWVzIGEgUTE1IHZlY3RvciBieSBhIHNjYWxhci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgc2NhbGVGcmFjdCAgZnJhY3Rpb25hbCBwb3J0aW9uIG9mIHRoZSBzY2FsZSB2YWx1ZQorICAgKiBAcGFyYW1baW5dICBzaGlmdCAgICAgICBudW1iZXIgb2YgYml0cyB0byBzaGlmdCB0aGUgcmVzdWx0IGJ5CisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9zY2FsZV9xMTUoCisgIHExNV90ICogcFNyYywKKyAgcTE1X3Qgc2NhbGVGcmFjdCwKKyAgaW50OF90IHNoaWZ0LAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIE11bHRpcGxpZXMgYSBRMzEgdmVjdG9yIGJ5IGEgc2NhbGFyLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBzY2FsZUZyYWN0ICBmcmFjdGlvbmFsIHBvcnRpb24gb2YgdGhlIHNjYWxlIHZhbHVlCisgICAqIEBwYXJhbVtpbl0gIHNoaWZ0ICAgICAgIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0IHRoZSByZXN1bHQgYnkKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX3NjYWxlX3EzMSgKKyAgcTMxX3QgKiBwU3JjLAorICBxMzFfdCBzY2FsZUZyYWN0LAorICBpbnQ4X3Qgc2hpZnQsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTcgdmVjdG9yIGFic29sdXRlIHZhbHVlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgYnVmZmVyCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgYnVmZmVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2Fic19xNygKKyAgcTdfdCAqIHBTcmMsCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBGbG9hdGluZy1wb2ludCB2ZWN0b3IgYWJzb2x1dGUgdmFsdWUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBidWZmZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCBidWZmZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fYWJzX2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTE1IHZlY3RvciBhYnNvbHV0ZSB2YWx1ZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IGJ1ZmZlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9hYnNfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTMxIHZlY3RvciBhYnNvbHV0ZSB2YWx1ZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IGJ1ZmZlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9hYnNfcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRG90IHByb2R1Y3Qgb2YgZmxvYXRpbmctcG9pbnQgdmVjdG9ycy4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHJlc3VsdCAgICAgb3V0cHV0IHJlc3VsdCByZXR1cm5lZCBoZXJlCisgICAqLworICB2b2lkIGFybV9kb3RfcHJvZF9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmNBLAorICBmbG9hdDMyX3QgKiBwU3JjQiwKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBmbG9hdDMyX3QgKiByZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiBEb3QgcHJvZHVjdCBvZiBRNyB2ZWN0b3JzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcmVzdWx0ICAgICBvdXRwdXQgcmVzdWx0IHJldHVybmVkIGhlcmUKKyAgICovCisgIHZvaWQgYXJtX2RvdF9wcm9kX3E3KAorICBxN190ICogcFNyY0EsCisgIHE3X3QgKiBwU3JjQiwKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxMzFfdCAqIHJlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIERvdCBwcm9kdWN0IG9mIFExNSB2ZWN0b3JzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcmVzdWx0ICAgICBvdXRwdXQgcmVzdWx0IHJldHVybmVkIGhlcmUKKyAgICovCisgIHZvaWQgYXJtX2RvdF9wcm9kX3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxNjNfdCAqIHJlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIERvdCBwcm9kdWN0IG9mIFEzMSB2ZWN0b3JzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcmVzdWx0ICAgICBvdXRwdXQgcmVzdWx0IHJldHVybmVkIGhlcmUKKyAgICovCisgIHZvaWQgYXJtX2RvdF9wcm9kX3EzMSgKKyAgcTMxX3QgKiBwU3JjQSwKKyAgcTMxX3QgKiBwU3JjQiwKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxNjNfdCAqIHJlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBTaGlmdHMgdGhlIGVsZW1lbnRzIG9mIGEgUTcgdmVjdG9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHNoaWZ0Qml0cyAgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQuICBBIHBvc2l0aXZlIHZhbHVlIHNoaWZ0cyBsZWZ0OyBhIG5lZ2F0aXZlIHZhbHVlIHNoaWZ0cyByaWdodC4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9zaGlmdF9xNygKKyAgcTdfdCAqIHBTcmMsCisgIGludDhfdCBzaGlmdEJpdHMsCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgU2hpZnRzIHRoZSBlbGVtZW50cyBvZiBhIFExNSB2ZWN0b3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgc2hpZnRCaXRzICBudW1iZXIgb2YgYml0cyB0byBzaGlmdC4gIEEgcG9zaXRpdmUgdmFsdWUgc2hpZnRzIGxlZnQ7IGEgbmVnYXRpdmUgdmFsdWUgc2hpZnRzIHJpZ2h0LgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX3NoaWZ0X3ExNSgKKyAgcTE1X3QgKiBwU3JjLAorICBpbnQ4X3Qgc2hpZnRCaXRzLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBTaGlmdHMgdGhlIGVsZW1lbnRzIG9mIGEgUTMxIHZlY3RvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBzaGlmdEJpdHMgIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LiAgQSBwb3NpdGl2ZSB2YWx1ZSBzaGlmdHMgbGVmdDsgYSBuZWdhdGl2ZSB2YWx1ZSBzaGlmdHMgcmlnaHQuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fc2hpZnRfcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIGludDhfdCBzaGlmdEJpdHMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEFkZHMgYSBjb25zdGFudCBvZmZzZXQgdG8gYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgb2Zmc2V0ICAgICBpcyB0aGUgb2Zmc2V0IHRvIGJlIGFkZGVkCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fb2Zmc2V0X2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90IG9mZnNldCwKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEFkZHMgYSBjb25zdGFudCBvZmZzZXQgdG8gYSBRNyB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgb2Zmc2V0ICAgICBpcyB0aGUgb2Zmc2V0IHRvIGJlIGFkZGVkCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fb2Zmc2V0X3E3KAorICBxN190ICogcFNyYywKKyAgcTdfdCBvZmZzZXQsCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgQWRkcyBhIGNvbnN0YW50IG9mZnNldCB0byBhIFExNSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgb2Zmc2V0ICAgICBpcyB0aGUgb2Zmc2V0IHRvIGJlIGFkZGVkCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fb2Zmc2V0X3ExNSgKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCBvZmZzZXQsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEFkZHMgYSBjb25zdGFudCBvZmZzZXQgdG8gYSBRMzEgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG9mZnNldCAgICAgaXMgdGhlIG9mZnNldCB0byBiZSBhZGRlZAorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX29mZnNldF9xMzEoCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3Qgb2Zmc2V0LAorICBxMzFfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBOZWdhdGVzIHRoZSBlbGVtZW50cyBvZiBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX25lZ2F0ZV9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBOZWdhdGVzIHRoZSBlbGVtZW50cyBvZiBhIFE3IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX25lZ2F0ZV9xNygKKyAgcTdfdCAqIHBTcmMsCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgTmVnYXRlcyB0aGUgZWxlbWVudHMgb2YgYSBRMTUgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fbmVnYXRlX3ExNSgKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBOZWdhdGVzIHRoZSBlbGVtZW50cyBvZiBhIFEzMSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9uZWdhdGVfcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIENvcGllcyB0aGUgZWxlbWVudHMgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKi8KKyAgdm9pZCBhcm1fY29weV9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBDb3BpZXMgdGhlIGVsZW1lbnRzIG9mIGEgUTcgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX2NvcHlfcTcoCisgIHE3X3QgKiBwU3JjLAorICBxN190ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIENvcGllcyB0aGUgZWxlbWVudHMgb2YgYSBRMTUgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX2NvcHlfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIENvcGllcyB0aGUgZWxlbWVudHMgb2YgYSBRMzEgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX2NvcHlfcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZpbGxzIGEgY29uc3RhbnQgdmFsdWUgaW50byBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgdmFsdWUgICAgICBpbnB1dCB2YWx1ZSB0byBiZSBmaWxsZWQKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX2ZpbGxfZjMyKAorICBmbG9hdDMyX3QgdmFsdWUsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBGaWxscyBhIGNvbnN0YW50IHZhbHVlIGludG8gYSBRNyB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHZhbHVlICAgICAgaW5wdXQgdmFsdWUgdG8gYmUgZmlsbGVkCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9maWxsX3E3KAorICBxN190IHZhbHVlLAorICBxN190ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZpbGxzIGEgY29uc3RhbnQgdmFsdWUgaW50byBhIFExNSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHZhbHVlICAgICAgaW5wdXQgdmFsdWUgdG8gYmUgZmlsbGVkCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9maWxsX3ExNSgKKyAgcTE1X3QgdmFsdWUsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZpbGxzIGEgY29uc3RhbnQgdmFsdWUgaW50byBhIFEzMSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHZhbHVlICAgICAgaW5wdXQgdmFsdWUgdG8gYmUgZmlsbGVkCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9maWxsX3EzMSgKKyAgcTMxX3QgdmFsdWUsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisvKioKKyAqIEBicmllZiBDb252b2x1dGlvbiBvZiBmbG9hdGluZy1wb2ludCBzZXF1ZW5jZXMuCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBvdXRwdXQgcmVzdWx0IGlzIHdyaXR0ZW4uICBMZW5ndGggc3JjQUxlbitzcmNCTGVuLTEuCisgKi8KKyAgdm9pZCBhcm1fY29udl9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBmbG9hdDMyX3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgZmxvYXQzMl90ICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIENvbnZvbHV0aW9uIG9mIFExNSBzZXF1ZW5jZXMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCBzcmNBTGVuK3NyY0JMZW4tMS4KKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2gxICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMiAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWluKHNyY0FMZW4sIHNyY0JMZW4pLgorICAgKi8KKyAgdm9pZCBhcm1fY29udl9vcHRfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMTVfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMTVfdCAqIHBEc3QsCisgIHExNV90ICogcFNjcmF0Y2gxLAorICBxMTVfdCAqIHBTY3JhdGNoMik7CisKKworLyoqCisgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcy4KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIG91dHB1dCByZXN1bHQgaXMgd3JpdHRlbi4gIExlbmd0aCBzcmNBTGVuK3NyY0JMZW4tMS4KKyAqLworICB2b2lkIGFybV9jb252X3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTE1X3QgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQKKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggc3JjQUxlbitzcmNCTGVuLTEuCisgICAqLworICB2b2lkIGFybV9jb252X2Zhc3RfcTE1KAorICAgICAgICAgIHExNV90ICogcFNyY0EsCisgICAgICAgICAgdWludDMyX3Qgc3JjQUxlbiwKKyAgICAgICAgICBxMTVfdCAqIHBTcmNCLAorICAgICAgICAgIHVpbnQzMl90IHNyY0JMZW4sCisgICAgICAgICAgcTE1X3QgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQKKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIHNyY0FMZW4rc3JjQkxlbi0xLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDEgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1heChzcmNBTGVuLCBzcmNCTGVuKSArIDIqbWluKHNyY0FMZW4sIHNyY0JMZW4pIC0gMi4KKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2gyICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtaW4oc3JjQUxlbiwgc3JjQkxlbikuCisgICAqLworICB2b2lkIGFybV9jb252X2Zhc3Rfb3B0X3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTE1X3QgKiBwRHN0LAorICBxMTVfdCAqIHBTY3JhdGNoMSwKKyAgcTE1X3QgKiBwU2NyYXRjaDIpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb252b2x1dGlvbiBvZiBRMzEgc2VxdWVuY2VzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCBzcmNBTGVuK3NyY0JMZW4tMS4KKyAgICovCisgIHZvaWQgYXJtX2NvbnZfcTMxKAorICBxMzFfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMzFfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMzFfdCAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb252b2x1dGlvbiBvZiBRMzEgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNAorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCBzcmNBTGVuK3NyY0JMZW4tMS4KKyAgICovCisgIHZvaWQgYXJtX2NvbnZfZmFzdF9xMzEoCisgIHEzMV90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHEzMV90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHEzMV90ICogcERzdCk7CisKKworICAgIC8qKgorICAgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTcgc2VxdWVuY2VzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggc3JjQUxlbitzcmNCTGVuLTEuCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMSAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyKG9mIHR5cGUgcTE1X3QpIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDIgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciAob2YgdHlwZSBxMTVfdCkgb2Ygc2l6ZSBtaW4oc3JjQUxlbiwgc3JjQkxlbikuCisgICAqLworICB2b2lkIGFybV9jb252X29wdF9xNygKKyAgcTdfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxN190ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHE3X3QgKiBwRHN0LAorICBxMTVfdCAqIHBTY3JhdGNoMSwKKyAgcTE1X3QgKiBwU2NyYXRjaDIpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb252b2x1dGlvbiBvZiBRNyBzZXF1ZW5jZXMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIHNyY0FMZW4rc3JjQkxlbi0xLgorICAgKi8KKyAgdm9pZCBhcm1fY29udl9xNygKKyAgcTdfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxN190ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHE3X3QgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBmbG9hdGluZy1wb2ludCBzZXF1ZW5jZXMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBmaXJzdEluZGV4ICBpcyB0aGUgZmlyc3Qgb3V0cHV0IHNhbXBsZSB0byBzdGFydCB3aXRoLgorICAgKiBAcGFyYW1baW5dICBudW1Qb2ludHMgICBpcyB0aGUgbnVtYmVyIG9mIG91dHB1dCBwb2ludHMgdG8gYmUgY29tcHV0ZWQuCisgICAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuK3NyY0JMZW4tMl0uCisgICAqLworICBhcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgZmxvYXQzMl90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGZpcnN0SW5kZXgsCisgIHVpbnQzMl90IG51bVBvaW50cyk7CisKKworICAvKioKKyAgICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcy4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguCisgICAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4KKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2gxICAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDIgICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtaW4oc3JjQUxlbiwgc3JjQkxlbikuCisgICAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuK3NyY0JMZW4tMl0uCisgICAqLworICBhcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfb3B0X3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBmaXJzdEluZGV4LAorICB1aW50MzJfdCBudW1Qb2ludHMsCisgIHExNV90ICogcFNjcmF0Y2gxLAorICBxMTVfdCAqIHBTY3JhdGNoMik7CisKKworICAvKioKKyAgICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcy4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguCisgICAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4KKyAgICogQHJldHVybiAgUmV0dXJucyBlaXRoZXIgQVJNX01BVEhfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIGNvcnJlY3RseSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiB0aGUgcmVxdWVzdGVkIHN1YnNldCBpcyBub3QgaW4gdGhlIHJhbmdlIFswIHNyY0FMZW4rc3JjQkxlbi0yXS4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX2NvbnZfcGFydGlhbF9xMTUoCisgIHExNV90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHExNV90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgZmlyc3RJbmRleCwKKyAgdWludDMyX3QgbnVtUG9pbnRzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNAorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4KKyAgICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLgorICAgKiBAcmV0dXJuICBSZXR1cm5zIGVpdGhlciBBUk1fTUFUSF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgY29ycmVjdGx5IG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIHRoZSByZXF1ZXN0ZWQgc3Vic2V0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAgc3JjQUxlbitzcmNCTGVuLTJdLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fY29udl9wYXJ0aWFsX2Zhc3RfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMTVfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGZpcnN0SW5kZXgsCisgIHVpbnQzMl90IG51bVBvaW50cyk7CisKKworICAvKioKKyAgICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQKKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguCisgICAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4KKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2gxICAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDIgICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtaW4oc3JjQUxlbiwgc3JjQkxlbikuCisgICAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuK3NyY0JMZW4tMl0uCisgICAqLworICBhcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfZmFzdF9vcHRfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMTVfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGZpcnN0SW5kZXgsCisgIHVpbnQzMl90IG51bVBvaW50cywKKyAgcTE1X3QgKiBwU2NyYXRjaDEsCisgIHExNV90ICogcFNjcmF0Y2gyKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRMzEgc2VxdWVuY2VzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4KKyAgICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLgorICAgKiBAcmV0dXJuICBSZXR1cm5zIGVpdGhlciBBUk1fTUFUSF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgY29ycmVjdGx5IG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIHRoZSByZXF1ZXN0ZWQgc3Vic2V0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAgc3JjQUxlbitzcmNCTGVuLTJdLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fY29udl9wYXJ0aWFsX3EzMSgKKyAgcTMxX3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTMxX3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBmaXJzdEluZGV4LAorICB1aW50MzJfdCBudW1Qb2ludHMpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQYXJ0aWFsIGNvbnZvbHV0aW9uIG9mIFEzMSBzZXF1ZW5jZXMgKGZhc3QgdmVyc2lvbikgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00CisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBmaXJzdEluZGV4ICBpcyB0aGUgZmlyc3Qgb3V0cHV0IHNhbXBsZSB0byBzdGFydCB3aXRoLgorICAgKiBAcGFyYW1baW5dICBudW1Qb2ludHMgICBpcyB0aGUgbnVtYmVyIG9mIG91dHB1dCBwb2ludHMgdG8gYmUgY29tcHV0ZWQuCisgICAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuK3NyY0JMZW4tMl0uCisgICAqLworICBhcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfZmFzdF9xMzEoCisgIHEzMV90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHEzMV90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgZmlyc3RJbmRleCwKKyAgdWludDMyX3QgbnVtUG9pbnRzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRNyBzZXF1ZW5jZXMKKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguCisgICAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4KKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2gxICAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyKG9mIHR5cGUgcTE1X3QpIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDIgICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgKG9mIHR5cGUgcTE1X3QpIG9mIHNpemUgbWluKHNyY0FMZW4sIHNyY0JMZW4pLgorICAgKiBAcmV0dXJuICBSZXR1cm5zIGVpdGhlciBBUk1fTUFUSF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgY29ycmVjdGx5IG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIHRoZSByZXF1ZXN0ZWQgc3Vic2V0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAgc3JjQUxlbitzcmNCTGVuLTJdLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fY29udl9wYXJ0aWFsX29wdF9xNygKKyAgcTdfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxN190ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBmaXJzdEluZGV4LAorICB1aW50MzJfdCBudW1Qb2ludHMsCisgIHExNV90ICogcFNjcmF0Y2gxLAorICBxMTVfdCAqIHBTY3JhdGNoMik7CisKKworLyoqCisgICAqIEBicmllZiBQYXJ0aWFsIGNvbnZvbHV0aW9uIG9mIFE3IHNlcXVlbmNlcy4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguCisgICAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4KKyAgICogQHJldHVybiAgUmV0dXJucyBlaXRoZXIgQVJNX01BVEhfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIGNvcnJlY3RseSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiB0aGUgcmVxdWVzdGVkIHN1YnNldCBpcyBub3QgaW4gdGhlIHJhbmdlIFswIHNyY0FMZW4rc3JjQkxlbi0yXS4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX2NvbnZfcGFydGlhbF9xNygKKyAgcTdfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxN190ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBmaXJzdEluZGV4LAorICB1aW50MzJfdCBudW1Qb2ludHMpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgRklSIGRlY2ltYXRvci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50OF90IE07ICAgICAgICAgICAgICAgICAgLyoqPCBkZWNpbWF0aW9uIGZhY3Rvci4gKi8KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzK2Jsb2NrU2l6ZS0xLiAqLworICB9IGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfcTE1OworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIEZJUiBkZWNpbWF0b3IuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDhfdCBNOyAgICAgICAgICAgICAgICAgIC8qKjwgZGVjaW1hdGlvbiBmYWN0b3IuICovCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIHEzMV90ICpwQ29lZmZzOyAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4qLworICAgIHEzMV90ICpwU3RhdGU7ICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcytibG9ja1NpemUtMS4gKi8KKyAgfSBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX3EzMTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBkZWNpbWF0b3IuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDhfdCBNOyAgICAgICAgICAgICAgICAgIC8qKjwgZGVjaW1hdGlvbiBmYWN0b3IuICovCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIGZsb2F0MzJfdCAqcENvZWZmczsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4qLworICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcytibG9ja1NpemUtMS4gKi8KKyAgfSBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX2YzMjsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBkZWNpbWF0b3IuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZGVjaW1hdG9yIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqLworICB2b2lkIGFybV9maXJfZGVjaW1hdGVfZjMyKAorICBjb25zdCBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBkZWNpbWF0b3IuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZGVjaW1hdG9yIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIE0gICAgICAgICAgZGVjaW1hdGlvbiBmYWN0b3IuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqIEByZXR1cm4gICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG9yIEFSTV9NQVRIX0xFTkdUSF9FUlJPUiBpZgorICAgKiA8Y29kZT5ibG9ja1NpemU8L2NvZGU+IGlzIG5vdCBhIG11bHRpcGxlIG9mIDxjb2RlPk08L2NvZGU+LgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fZmlyX2RlY2ltYXRlX2luaXRfZjMyKAorICBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX2YzMiAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIHVpbnQ4X3QgTSwKKyAgZmxvYXQzMl90ICogcENvZWZmcywKKyAgZmxvYXQzMl90ICogcFN0YXRlLAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBkZWNpbWF0b3IuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGRlY2ltYXRvciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2RlY2ltYXRlX3ExNSgKKyAgY29uc3QgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMTUgKiBTLAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgZGVjaW1hdG9yIChmYXN0IHZhcmlhbnQpIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNC4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgZGVjaW1hdG9yIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqLworICB2b2lkIGFybV9maXJfZGVjaW1hdGVfZmFzdF9xMTUoCisgIGNvbnN0IGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgZGVjaW1hdG9yLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgICAgTSAgICAgICAgICBkZWNpbWF0aW9uIGZhY3Rvci4KKyAgICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICogQHJldHVybiAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfTEVOR1RIX0VSUk9SIGlmCisgICAqIDxjb2RlPmJsb2NrU2l6ZTwvY29kZT4gaXMgbm90IGEgbXVsdGlwbGUgb2YgPGNvZGU+TTwvY29kZT4uCisgICAqLworICBhcm1fc3RhdHVzIGFybV9maXJfZGVjaW1hdGVfaW5pdF9xMTUoCisgIGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfcTE1ICogUywKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgdWludDhfdCBNLAorICBxMTVfdCAqIHBDb2VmZnMsCisgIHExNV90ICogcFN0YXRlLAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEZJUiBkZWNpbWF0b3IuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSBibG9ja1NpemUgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9kZWNpbWF0ZV9xMzEoCisgIGNvbnN0IGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfcTMxICogUywKKyAgcTMxX3QgKiBwU3JjLAorICBxMzFfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEZJUiBkZWNpbWF0b3IgKGZhc3QgdmFyaWFudCkgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00LgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9kZWNpbWF0ZV9mYXN0X3EzMSgKKyAgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEZJUiBkZWNpbWF0b3IuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIGRlY2ltYXRvciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBNICAgICAgICAgIGRlY2ltYXRpb24gZmFjdG9yLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLgorICAgKiBAcmV0dXJuICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9MRU5HVEhfRVJST1IgaWYKKyAgICogPGNvZGU+YmxvY2tTaXplPC9jb2RlPiBpcyBub3QgYSBtdWx0aXBsZSBvZiA8Y29kZT5NPC9jb2RlPi4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX2Zpcl9kZWNpbWF0ZV9pbml0X3EzMSgKKyAgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMzEgKiBTLAorICB1aW50MTZfdCBudW1UYXBzLAorICB1aW50OF90IE0sCisgIHEzMV90ICogcENvZWZmcywKKyAgcTMxX3QgKiBwU3RhdGUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBGSVIgaW50ZXJwb2xhdG9yLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQ4X3QgTDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCB1cHNhbXBsZSBmYWN0b3IuICovCisgICAgdWludDE2X3QgcGhhc2VMZW5ndGg7ICAgICAgICAgICAvKio8IGxlbmd0aCBvZiBlYWNoIHBvbHlwaGFzZSBmaWx0ZXIgY29tcG9uZW50LiAqLworICAgIHExNV90ICpwQ29lZmZzOyAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIEwqcGhhc2VMZW5ndGguICovCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggYmxvY2tTaXplK3BoYXNlTGVuZ3RoLTEuICovCisgIH0gYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9xMTU7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgRklSIGludGVycG9sYXRvci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50OF90IEw7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgdXBzYW1wbGUgZmFjdG9yLiAqLworICAgIHVpbnQxNl90IHBoYXNlTGVuZ3RoOyAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgZWFjaCBwb2x5cGhhc2UgZmlsdGVyIGNvbXBvbmVudC4gKi8KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBMKnBoYXNlTGVuZ3RoLiAqLworICAgIHEzMV90ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIGJsb2NrU2l6ZStwaGFzZUxlbmd0aC0xLiAqLworICB9IGFybV9maXJfaW50ZXJwb2xhdGVfaW5zdGFuY2VfcTMxOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGludGVycG9sYXRvci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50OF90IEw7ICAgICAgICAgICAgICAgICAgICAgLyoqPCB1cHNhbXBsZSBmYWN0b3IuICovCisgICAgdWludDE2X3QgcGhhc2VMZW5ndGg7ICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIGVhY2ggcG9seXBoYXNlIGZpbHRlciBjb21wb25lbnQuICovCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBMKnBoYXNlTGVuZ3RoLiAqLworICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggcGhhc2VMZW5ndGgrbnVtVGFwcy0xLiAqLworICB9IGFybV9maXJfaW50ZXJwb2xhdGVfaW5zdGFuY2VfZjMyOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBpbnRlcnBvbGF0b3IuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGludGVycG9sYXRvciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9xMTUoCisgIGNvbnN0IGFybV9maXJfaW50ZXJwb2xhdGVfaW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgaW50ZXJwb2xhdG9yLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBpbnRlcnBvbGF0b3Igc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBMICAgICAgICAgIHVwc2FtcGxlIGZhY3Rvci4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50IGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLgorICAgKiBAcmV0dXJuICAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfTEVOR1RIX0VSUk9SIGlmCisgICAqIHRoZSBmaWx0ZXIgbGVuZ3RoIDxjb2RlPm51bVRhcHM8L2NvZGU+IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBpbnRlcnBvbGF0aW9uIGZhY3RvciA8Y29kZT5MPC9jb2RlPi4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbml0X3ExNSgKKyAgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9xMTUgKiBTLAorICB1aW50OF90IEwsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIHExNV90ICogcENvZWZmcywKKyAgcTE1X3QgKiBwU3RhdGUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGludGVycG9sYXRvci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgaW50ZXJwb2xhdG9yIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2ludGVycG9sYXRlX3EzMSgKKyAgY29uc3QgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEZJUiBpbnRlcnBvbGF0b3IuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIGludGVycG9sYXRvciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIEwgICAgICAgICAgdXBzYW1wbGUgZmFjdG9yLgorICAgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnQgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqIEByZXR1cm4gICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9MRU5HVEhfRVJST1IgaWYKKyAgICogdGhlIGZpbHRlciBsZW5ndGggPGNvZGU+bnVtVGFwczwvY29kZT4gaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGludGVycG9sYXRpb24gZmFjdG9yIDxjb2RlPkw8L2NvZGU+LgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fZmlyX2ludGVycG9sYXRlX2luaXRfcTMxKAorICBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX3EzMSAqIFMsCisgIHVpbnQ4X3QgTCwKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgcTMxX3QgKiBwQ29lZmZzLAorICBxMzFfdCAqIHBTdGF0ZSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBpbnRlcnBvbGF0b3IuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgaW50ZXJwb2xhdG9yIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2ludGVycG9sYXRlX2YzMigKKyAgY29uc3QgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9mMzIgKiBTLAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgaW50ZXJwb2xhdG9yLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGludGVycG9sYXRvciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIEwgICAgICAgICAgdXBzYW1wbGUgZmFjdG9yLgorICAgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnQgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqIEByZXR1cm4gICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9MRU5HVEhfRVJST1IgaWYKKyAgICogdGhlIGZpbHRlciBsZW5ndGggPGNvZGU+bnVtVGFwczwvY29kZT4gaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGludGVycG9sYXRpb24gZmFjdG9yIDxjb2RlPkw8L2NvZGU+LgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fZmlyX2ludGVycG9sYXRlX2luaXRfZjMyKAorICBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX2YzMiAqIFMsCisgIHVpbnQ4X3QgTCwKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgZmxvYXQzMl90ICogcENvZWZmcywKKyAgZmxvYXQzMl90ICogcFN0YXRlLAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBoaWdoIHByZWNpc2lvbiBRMzEgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQ4X3QgbnVtU3RhZ2VzOyAgICAgICAvKio8IG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICBPdmVyYWxsIG9yZGVyIGlzIDIqbnVtU3RhZ2VzLiAqLworICAgIHE2M190ICpwU3RhdGU7ICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygc3RhdGUgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA0Km51bVN0YWdlcy4gKi8KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNSpudW1TdGFnZXMuICovCisgICAgdWludDhfdCBwb3N0U2hpZnQ7ICAgICAgIC8qKjwgYWRkaXRpb25hbCBzaGlmdCwgaW4gYml0cywgYXBwbGllZCB0byBlYWNoIG91dHB1dCBzYW1wbGUuICovCisgIH0gYXJtX2JpcXVhZF9jYXNfZGYxXzMyeDY0X2luc19xMzE7CisKKworICAvKioKKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGhpZ2ggcHJlY2lzaW9uIFEzMSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNfZGYxXzMyeDY0X3EzMSgKKyAgY29uc3QgYXJtX2JpcXVhZF9jYXNfZGYxXzMyeDY0X2luc19xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgaGlnaCBwcmVjaXNpb24gUTMxIEJpcXVhZCBjYXNjYWRlIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVN0YWdlcyAgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBvc3RTaGlmdCAgc2hpZnQgdG8gYmUgYXBwbGllZCB0byB0aGUgb3V0cHV0LiBWYXJpZXMgYWNjb3JkaW5nIHRvIHRoZSBjb2VmZmljaWVudHMgZm9ybWF0CisgICAqLworICB2b2lkIGFybV9iaXF1YWRfY2FzX2RmMV8zMng2NF9pbml0X3EzMSgKKyAgYXJtX2JpcXVhZF9jYXNfZGYxXzMyeDY0X2luc19xMzEgKiBTLAorICB1aW50OF90IG51bVN0YWdlcywKKyAgcTMxX3QgKiBwQ29lZmZzLAorICBxNjNfdCAqIHBTdGF0ZSwKKyAgdWludDhfdCBwb3N0U2hpZnQpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50OF90IG51bVN0YWdlczsgICAgICAgICAvKio8IG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICBPdmVyYWxsIG9yZGVyIGlzIDIqbnVtU3RhZ2VzLiAqLworICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBzdGF0ZSBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDIqbnVtU3RhZ2VzLiAqLworICAgIGZsb2F0MzJfdCAqcENvZWZmczsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDUqbnVtU3RhZ2VzLiAqLworICB9IGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2luc3RhbmNlX2YzMjsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQ4X3QgbnVtU3RhZ2VzOyAgICAgICAgIC8qKjwgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4gIE92ZXJhbGwgb3JkZXIgaXMgMipudW1TdGFnZXMuICovCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIHN0YXRlIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNCpudW1TdGFnZXMuICovCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNSpudW1TdGFnZXMuICovCisgIH0gYXJtX2JpcXVhZF9jYXNjYWRlX3N0ZXJlb19kZjJUX2luc3RhbmNlX2YzMjsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQ4X3QgbnVtU3RhZ2VzOyAgICAgICAgIC8qKjwgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4gIE92ZXJhbGwgb3JkZXIgaXMgMipudW1TdGFnZXMuICovCisgICAgZmxvYXQ2NF90ICpwU3RhdGU7ICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIHN0YXRlIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggMipudW1TdGFnZXMuICovCisgICAgZmxvYXQ2NF90ICpwQ29lZmZzOyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNSpudW1TdGFnZXMuICovCisgIH0gYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5zdGFuY2VfZjY0OworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdHJhbnNwb3NlZCBkaXJlY3QgZm9ybSBJSSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmaWx0ZXIgZGF0YSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYyVF9mMzIoCisgIGNvbnN0IGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4gMiBjaGFubmVscworICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmlsdGVyIGRhdGEgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX3N0ZXJlb19kZjJUX2YzMigKKyAgY29uc3QgYXJtX2JpcXVhZF9jYXNjYWRlX3N0ZXJlb19kZjJUX2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZpbHRlciBkYXRhIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2Y2NCgKKyAgY29uc3QgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5zdGFuY2VfZjY0ICogUywKKyAgZmxvYXQ2NF90ICogcFNyYywKKyAgZmxvYXQ2NF90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdHJhbnNwb3NlZCBkaXJlY3QgZm9ybSBJSSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmaWx0ZXIgZGF0YSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVN0YWdlcyAgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqLworICB2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2luaXRfZjMyKAorICBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYyVF9pbnN0YW5jZV9mMzIgKiBTLAorICB1aW50OF90IG51bVN0YWdlcywKKyAgZmxvYXQzMl90ICogcENvZWZmcywKKyAgZmxvYXQzMl90ICogcFN0YXRlKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdHJhbnNwb3NlZCBkaXJlY3QgZm9ybSBJSSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmaWx0ZXIgZGF0YSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVN0YWdlcyAgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqLworICB2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9zdGVyZW9fZGYyVF9pbml0X2YzMigKKyAgYXJtX2JpcXVhZF9jYXNjYWRlX3N0ZXJlb19kZjJUX2luc3RhbmNlX2YzMiAqIFMsCisgIHVpbnQ4X3QgbnVtU3RhZ2VzLAorICBmbG9hdDMyX3QgKiBwQ29lZmZzLAorICBmbG9hdDMyX3QgKiBwU3RhdGUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZpbHRlciBkYXRhIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtU3RhZ2VzICBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5pdF9mNjQoCisgIGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2luc3RhbmNlX2Y2NCAqIFMsCisgIHVpbnQ4X3QgbnVtU3RhZ2VzLAorICBmbG9hdDY0X3QgKiBwQ29lZmZzLAorICBmbG9hdDY0X3QgKiBwU3RhdGUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgRklSIGxhdHRpY2UgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVN0YWdlczsgICAgICAgICAgICAgICAgICAvKio8IG51bWJlciBvZiBmaWx0ZXIgc3RhZ2VzLiAqLworICAgIHExNV90ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLworICAgIHExNV90ICpwQ29lZmZzOyAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLworICB9IGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9xMTU7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgRklSIGxhdHRpY2UgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVN0YWdlczsgICAgICAgICAgICAgICAgICAvKio8IG51bWJlciBvZiBmaWx0ZXIgc3RhZ2VzLiAqLworICAgIHEzMV90ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLworICAgIHEzMV90ICpwQ29lZmZzOyAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLworICB9IGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9xMzE7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtU3RhZ2VzOyAgICAgICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGZpbHRlciBzdGFnZXMuICovCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovCisgIH0gYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX2YzMjsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMTUgRklSIGxhdHRpY2UgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGxhdHRpY2Ugc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dIG51bVN0YWdlcyAgbnVtYmVyIG9mIGZpbHRlciBzdGFnZXMuCisgICAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLgorICAgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9sYXR0aWNlX2luaXRfcTE1KAorICBhcm1fZmlyX2xhdHRpY2VfaW5zdGFuY2VfcTE1ICogUywKKyAgdWludDE2X3QgbnVtU3RhZ2VzLAorICBxMTVfdCAqIHBDb2VmZnMsCisgIHExNV90ICogcFN0YXRlKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGxhdHRpY2Ugc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9maXJfbGF0dGljZV9xMTUoCisgIGNvbnN0IGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9xMTUgKiBTLAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGxhdHRpY2UgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIGxhdHRpY2Ugc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dIG51bVN0YWdlcyAgbnVtYmVyIG9mIGZpbHRlciBzdGFnZXMuCisgICAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLgorICAgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuICAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuCisgICAqLworICB2b2lkIGFybV9maXJfbGF0dGljZV9pbml0X3EzMSgKKyAgYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX3EzMSAqIFMsCisgIHVpbnQxNl90IG51bVN0YWdlcywKKyAgcTMxX3QgKiBwQ29lZmZzLAorICBxMzFfdCAqIHBTdGF0ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGxhdHRpY2UgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEZJUiBsYXR0aWNlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9maXJfbGF0dGljZV9xMzEoCisgIGNvbnN0IGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisvKioKKyAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBsYXR0aWNlIGZpbHRlci4KKyAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBsYXR0aWNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gbnVtU3RhZ2VzICBudW1iZXIgb2YgZmlsdGVyIHN0YWdlcy4KKyAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLgorICogQHBhcmFtW2luXSBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuCisgKi8KKyAgdm9pZCBhcm1fZmlyX2xhdHRpY2VfaW5pdF9mMzIoCisgIGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9mMzIgKiBTLAorICB1aW50MTZfdCBudW1TdGFnZXMsCisgIGZsb2F0MzJfdCAqIHBDb2VmZnMsCisgIGZsb2F0MzJfdCAqIHBTdGF0ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgbGF0dGljZSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2xhdHRpY2VfZjMyKAorICBjb25zdCBhcm1fZmlyX2xhdHRpY2VfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IElJUiBsYXR0aWNlIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1TdGFnZXM7ICAgICAgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2Ygc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICovCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMrYmxvY2tTaXplLiAqLworICAgIHExNV90ICpwa0NvZWZmczsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgcmVmbGVjdGlvbiBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovCisgICAgcTE1X3QgKnB2Q29lZmZzOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBsYWRkZXIgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzKzEuICovCisgIH0gYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX3ExNTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBJSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtU3RhZ2VzOyAgICAgICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAqLworICAgIHEzMV90ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzK2Jsb2NrU2l6ZS4gKi8KKyAgICBxMzFfdCAqcGtDb2VmZnM7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlZmxlY3Rpb24gY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLworICAgIHEzMV90ICpwdkNvZWZmczsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgbGFkZGVyIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcysxLiAqLworICB9IGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9xMzE7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBJSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtU3RhZ2VzOyAgICAgICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAqLworICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzK2Jsb2NrU2l6ZS4gKi8KKyAgICBmbG9hdDMyX3QgKnBrQ29lZmZzOyAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlZmxlY3Rpb24gY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLworICAgIGZsb2F0MzJfdCAqcHZDb2VmZnM7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgbGFkZGVyIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcysxLiAqLworICB9IGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9mMzI7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBJSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBJSVIgbGF0dGljZSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2lpcl9sYXR0aWNlX2YzMigKKyAgY29uc3QgYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgSUlSIGxhdHRpY2UgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBJSVIgbGF0dGljZSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gbnVtU3RhZ2VzICBudW1iZXIgb2Ygc3RhZ2VzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gcGtDb2VmZnMgICBwb2ludHMgdG8gdGhlIHJlZmxlY3Rpb24gY29lZmZpY2llbnQgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuCisgICAqIEBwYXJhbVtpbl0gcHZDb2VmZnMgICBwb2ludHMgdG8gdGhlIGxhZGRlciBjb2VmZmljaWVudCBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcysxLgorICAgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcytibG9ja1NpemUtMS4KKyAgICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9paXJfbGF0dGljZV9pbml0X2YzMigKKyAgYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX2YzMiAqIFMsCisgIHVpbnQxNl90IG51bVN0YWdlcywKKyAgZmxvYXQzMl90ICogcGtDb2VmZnMsCisgIGZsb2F0MzJfdCAqIHB2Q29lZmZzLAorICBmbG9hdDMyX3QgKiBwU3RhdGUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgSUlSIGxhdHRpY2UgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIElJUiBsYXR0aWNlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1faWlyX2xhdHRpY2VfcTMxKAorICBjb25zdCBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfcTMxICogUywKKyAgcTMxX3QgKiBwU3JjLAorICBxMzFfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIElJUiBsYXR0aWNlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIElJUiBsYXR0aWNlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSBudW1TdGFnZXMgIG51bWJlciBvZiBzdGFnZXMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSBwa0NvZWZmcyAgIHBvaW50cyB0byB0aGUgcmVmbGVjdGlvbiBjb2VmZmljaWVudCBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4KKyAgICogQHBhcmFtW2luXSBwdkNvZWZmcyAgIHBvaW50cyB0byB0aGUgbGFkZGVyIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzKzEuCisgICAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzK2Jsb2NrU2l6ZS4KKyAgICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9paXJfbGF0dGljZV9pbml0X3EzMSgKKyAgYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX3EzMSAqIFMsCisgIHVpbnQxNl90IG51bVN0YWdlcywKKyAgcTMxX3QgKiBwa0NvZWZmcywKKyAgcTMxX3QgKiBwdkNvZWZmcywKKyAgcTMxX3QgKiBwU3RhdGUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgSUlSIGxhdHRpY2UgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IElJUiBsYXR0aWNlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1faWlyX2xhdHRpY2VfcTE1KAorICBjb25zdCBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworLyoqCisgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMTUgSUlSIGxhdHRpY2UgZmlsdGVyLgorICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZml4ZWQtcG9pbnQgUTE1IElJUiBsYXR0aWNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gbnVtU3RhZ2VzICBudW1iZXIgb2Ygc3RhZ2VzIGluIHRoZSBmaWx0ZXIuCisgKiBAcGFyYW1baW5dIHBrQ29lZmZzICAgcG9pbnRzIHRvIHJlZmxlY3Rpb24gY29lZmZpY2llbnQgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuCisgKiBAcGFyYW1baW5dIHB2Q29lZmZzICAgcG9pbnRzIHRvIGxhZGRlciBjb2VmZmljaWVudCBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcysxLgorICogQHBhcmFtW2luXSBwU3RhdGUgICAgIHBvaW50cyB0byBzdGF0ZSBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcytibG9ja1NpemUuCisgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAqLworICB2b2lkIGFybV9paXJfbGF0dGljZV9pbml0X3ExNSgKKyAgYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX3ExNSAqIFMsCisgIHVpbnQxNl90IG51bVN0YWdlcywKKyAgcTE1X3QgKiBwa0NvZWZmcywKKyAgcTE1X3QgKiBwdkNvZWZmcywKKyAgcTE1X3QgKiBwU3RhdGUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IExNUyBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtVGFwczsgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMrYmxvY2tTaXplLTEuICovCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovCisgICAgZmxvYXQzMl90IG11OyAgICAgICAgLyoqPCBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4gKi8KKyAgfSBhcm1fbG1zX2luc3RhbmNlX2YzMjsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgZmxvYXRpbmctcG9pbnQgTE1TIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IExNUyBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgcFJlZiAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIHJlZmVyZW5jZSBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwT3V0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBFcnIgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBlcnJvciBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9sbXNfZjMyKAorICBjb25zdCBhcm1fbG1zX2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBSZWYsCisgIGZsb2F0MzJfdCAqIHBPdXQsCisgIGZsb2F0MzJfdCAqIHBFcnIsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBmbG9hdGluZy1wb2ludCBMTVMgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBMTVMgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSBudW1UYXBzICAgIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dIG11ICAgICAgICAgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuCisgICAqIEBwYXJhbVtpbl0gYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fbG1zX2luaXRfZjMyKAorICBhcm1fbG1zX2luc3RhbmNlX2YzMiAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIGZsb2F0MzJfdCAqIHBDb2VmZnMsCisgIGZsb2F0MzJfdCAqIHBTdGF0ZSwKKyAgZmxvYXQzMl90IG11LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgTE1TIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcytibG9ja1NpemUtMS4gKi8KKyAgICBxMTVfdCAqcENvZWZmczsgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8KKyAgICBxMTVfdCBtdTsgICAgICAgICAgICAvKio8IHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLiAqLworICAgIHVpbnQzMl90IHBvc3RTaGlmdDsgIC8qKjwgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLiAqLworICB9IGFybV9sbXNfaW5zdGFuY2VfcTE1OworCisKKyAgLyoqCisgICAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBMTVMgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gbnVtVGFwcyAgICBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gbXUgICAgICAgICBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4KKyAgICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqIEBwYXJhbVtpbl0gcG9zdFNoaWZ0ICBiaXQgc2hpZnQgYXBwbGllZCB0byBjb2VmZmljaWVudHMuCisgICAqLworICB2b2lkIGFybV9sbXNfaW5pdF9xMTUoCisgIGFybV9sbXNfaW5zdGFuY2VfcTE1ICogUywKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgcTE1X3QgKiBwQ29lZmZzLAorICBxMTVfdCAqIHBTdGF0ZSwKKyAgcTE1X3QgbXUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgdWludDMyX3QgcG9zdFNoaWZ0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgUTE1IExNUyBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBwUmVmICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgcmVmZXJlbmNlIGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBPdXQgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcEVyciAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGVycm9yIGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2xtc19xMTUoCisgIGNvbnN0IGFybV9sbXNfaW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBSZWYsCisgIHExNV90ICogcE91dCwKKyAgcTE1X3QgKiBwRXJyLAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgTE1TIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8KKyAgICBxMzFfdCAqcFN0YXRlOyAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcytibG9ja1NpemUtMS4gKi8KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8KKyAgICBxMzFfdCBtdTsgICAgICAgICAgICAvKio8IHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLiAqLworICAgIHVpbnQzMl90IHBvc3RTaGlmdDsgIC8qKjwgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLiAqLworICB9IGFybV9sbXNfaW5zdGFuY2VfcTMxOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciBRMzEgTE1TIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBMTVMgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIHBSZWYgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiByZWZlcmVuY2UgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcE91dCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRXJyICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgZXJyb3IgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fbG1zX3EzMSgKKyAgY29uc3QgYXJtX2xtc19pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcFJlZiwKKyAgcTMxX3QgKiBwT3V0LAorICBxMzFfdCAqIHBFcnIsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBRMzEgTE1TIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIExNUyBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gY29lZmZpY2llbnQgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSBtdSAgICAgICAgIHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLgorICAgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICogQHBhcmFtW2luXSBwb3N0U2hpZnQgIGJpdCBzaGlmdCBhcHBsaWVkIHRvIGNvZWZmaWNpZW50cy4KKyAgICovCisgIHZvaWQgYXJtX2xtc19pbml0X3EzMSgKKyAgYXJtX2xtc19pbnN0YW5jZV9xMzEgKiBTLAorICB1aW50MTZfdCBudW1UYXBzLAorICBxMzFfdCAqIHBDb2VmZnMsCisgIHEzMV90ICogcFN0YXRlLAorICBxMzFfdCBtdSwKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICB1aW50MzJfdCBwb3N0U2hpZnQpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBub3JtYWxpemVkIExNUyBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtVGFwczsgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcytibG9ja1NpemUtMS4gKi8KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovCisgICAgZmxvYXQzMl90IG11OyAgICAgICAgIC8qKjwgc3RlcCBzaXplIHRoYXQgY29udHJvbCBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4gKi8KKyAgICBmbG9hdDMyX3QgZW5lcmd5OyAgICAgLyoqPCBzYXZlcyBwcmV2aW91cyBmcmFtZSBlbmVyZ3kuICovCisgICAgZmxvYXQzMl90IHgwOyAgICAgICAgIC8qKjwgc2F2ZXMgcHJldmlvdXMgaW5wdXQgc2FtcGxlLiAqLworICB9IGFybV9sbXNfbm9ybV9pbnN0YW5jZV9mMzI7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIGZsb2F0aW5nLXBvaW50IG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IG5vcm1hbGl6ZWQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBwUmVmICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgcmVmZXJlbmNlIGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBPdXQgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcEVyciAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGVycm9yIGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2xtc19ub3JtX2YzMigKKyAgYXJtX2xtc19ub3JtX2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBSZWYsCisgIGZsb2F0MzJfdCAqIHBPdXQsCisgIGZsb2F0MzJfdCAqIHBFcnIsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBmbG9hdGluZy1wb2ludCBub3JtYWxpemVkIExNUyBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IExNUyBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gY29lZmZpY2llbnQgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSBtdSAgICAgICAgIHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLgorICAgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2xtc19ub3JtX2luaXRfZjMyKAorICBhcm1fbG1zX25vcm1faW5zdGFuY2VfZjMyICogUywKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgZmxvYXQzMl90ICogcENvZWZmcywKKyAgZmxvYXQzMl90ICogcFN0YXRlLAorICBmbG9hdDMyX3QgbXUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBub3JtYWxpemVkIExNUyBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtVGFwczsgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIHEzMV90ICpwU3RhdGU7ICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcytibG9ja1NpemUtMS4gKi8KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovCisgICAgcTMxX3QgbXU7ICAgICAgICAgICAgIC8qKjwgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuICovCisgICAgdWludDhfdCBwb3N0U2hpZnQ7ICAgIC8qKjwgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLiAqLworICAgIHEzMV90ICpyZWNpcFRhYmxlOyAgICAvKio8IHBvaW50cyB0byB0aGUgcmVjaXByb2NhbCBpbml0aWFsIHZhbHVlIHRhYmxlLiAqLworICAgIHEzMV90IGVuZXJneTsgICAgICAgICAvKio8IHNhdmVzIHByZXZpb3VzIGZyYW1lIGVuZXJneS4gKi8KKyAgICBxMzFfdCB4MDsgICAgICAgICAgICAgLyoqPCBzYXZlcyBwcmV2aW91cyBpbnB1dCBzYW1wbGUuICovCisgIH0gYXJtX2xtc19ub3JtX2luc3RhbmNlX3EzMTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgUTMxIG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBub3JtYWxpemVkIExNUyBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgcFJlZiAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIHJlZmVyZW5jZSBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwT3V0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBFcnIgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBlcnJvciBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9sbXNfbm9ybV9xMzEoCisgIGFybV9sbXNfbm9ybV9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcFJlZiwKKyAgcTMxX3QgKiBwT3V0LAorICBxMzFfdCAqIHBFcnIsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBRMzEgbm9ybWFsaXplZCBMTVMgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgbm9ybWFsaXplZCBMTVMgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSBudW1UYXBzICAgIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dIHBDb2VmZnMgICAgcG9pbnRzIHRvIGNvZWZmaWNpZW50IGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSBwU3RhdGUgICAgIHBvaW50cyB0byBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gbXUgICAgICAgICBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4KKyAgICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqIEBwYXJhbVtpbl0gcG9zdFNoaWZ0ICBiaXQgc2hpZnQgYXBwbGllZCB0byBjb2VmZmljaWVudHMuCisgICAqLworICB2b2lkIGFybV9sbXNfbm9ybV9pbml0X3EzMSgKKyAgYXJtX2xtc19ub3JtX2luc3RhbmNlX3EzMSAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIHEzMV90ICogcENvZWZmcywKKyAgcTMxX3QgKiBwU3RhdGUsCisgIHEzMV90IG11LAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHVpbnQ4X3QgcG9zdFNoaWZ0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgLyoqPCBOdW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzK2Jsb2NrU2l6ZS0xLiAqLworICAgIHExNV90ICpwQ29lZmZzOyAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8KKyAgICBxMTVfdCBtdTsgICAgICAgICAgICAgLyoqPCBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4gKi8KKyAgICB1aW50OF90IHBvc3RTaGlmdDsgICAgLyoqPCBiaXQgc2hpZnQgYXBwbGllZCB0byBjb2VmZmljaWVudHMuICovCisgICAgcTE1X3QgKnJlY2lwVGFibGU7ICAgIC8qKjwgUG9pbnRzIHRvIHRoZSByZWNpcHJvY2FsIGluaXRpYWwgdmFsdWUgdGFibGUuICovCisgICAgcTE1X3QgZW5lcmd5OyAgICAgICAgIC8qKjwgc2F2ZXMgcHJldmlvdXMgZnJhbWUgZW5lcmd5LiAqLworICAgIHExNV90IHgwOyAgICAgICAgICAgICAvKio8IHNhdmVzIHByZXZpb3VzIGlucHV0IHNhbXBsZS4gKi8KKyAgfSBhcm1fbG1zX25vcm1faW5zdGFuY2VfcTE1OworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciBRMTUgbm9ybWFsaXplZCBMTVMgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IG5vcm1hbGl6ZWQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBwUmVmICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgcmVmZXJlbmNlIGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBPdXQgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcEVyciAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGVycm9yIGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2xtc19ub3JtX3ExNSgKKyAgYXJtX2xtc19ub3JtX2luc3RhbmNlX3ExNSAqIFMsCisgIHExNV90ICogcFNyYywKKyAgcTE1X3QgKiBwUmVmLAorICBxMTVfdCAqIHBPdXQsCisgIHExNV90ICogcEVyciwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIFExNSBub3JtYWxpemVkIExNUyBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBub3JtYWxpemVkIExNUyBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gY29lZmZpY2llbnQgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSBtdSAgICAgICAgIHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLgorICAgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICogQHBhcmFtW2luXSBwb3N0U2hpZnQgIGJpdCBzaGlmdCBhcHBsaWVkIHRvIGNvZWZmaWNpZW50cy4KKyAgICovCisgIHZvaWQgYXJtX2xtc19ub3JtX2luaXRfcTE1KAorICBhcm1fbG1zX25vcm1faW5zdGFuY2VfcTE1ICogUywKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgcTE1X3QgKiBwQ29lZmZzLAorICBxMTVfdCAqIHBTdGF0ZSwKKyAgcTE1X3QgbXUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgdWludDhfdCBwb3N0U2hpZnQpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBmbG9hdGluZy1wb2ludCBzZXF1ZW5jZXMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLgorICAgKi8KKyAgdm9pZCBhcm1fY29ycmVsYXRlX2YzMigKKyAgZmxvYXQzMl90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIGZsb2F0MzJfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBmbG9hdDMyX3QgKiBwRHN0KTsKKworCisgICAvKioKKyAgICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIFExNSBzZXF1ZW5jZXMKKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCAyICogbWF4KHNyY0FMZW4sIHNyY0JMZW4pIC0gMS4KKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2ggIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1heChzcmNBTGVuLCBzcmNCTGVuKSArIDIqbWluKHNyY0FMZW4sIHNyY0JMZW4pIC0gMi4KKyAgICovCisgIHZvaWQgYXJtX2NvcnJlbGF0ZV9vcHRfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMTVfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMTVfdCAqIHBEc3QsCisgIHExNV90ICogcFNjcmF0Y2gpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBRMTUgc2VxdWVuY2VzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCAyICogbWF4KHNyY0FMZW4sIHNyY0JMZW4pIC0gMS4KKyAgICovCisKKyAgdm9pZCBhcm1fY29ycmVsYXRlX3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTE1X3QgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQ29ycmVsYXRpb24gb2YgUTE1IHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLgorICAgKi8KKworICB2b2lkIGFybV9jb3JyZWxhdGVfZmFzdF9xMTUoCisgIHExNV90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHExNV90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHExNV90ICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIFExNSBzZXF1ZW5jZXMgKGZhc3QgdmVyc2lvbikgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00LgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaCAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLgorICAgKi8KKyAgdm9pZCBhcm1fY29ycmVsYXRlX2Zhc3Rfb3B0X3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTE1X3QgKiBwRHN0LAorICBxMTVfdCAqIHBTY3JhdGNoKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQ29ycmVsYXRpb24gb2YgUTMxIHNlcXVlbmNlcy4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggMiAqIG1heChzcmNBTGVuLCBzcmNCTGVuKSAtIDEuCisgICAqLworICB2b2lkIGFybV9jb3JyZWxhdGVfcTMxKAorICBxMzFfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMzFfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMzFfdCAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBRMzEgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNAorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCAyICogbWF4KHNyY0FMZW4sIHNyY0JMZW4pIC0gMS4KKyAgICovCisgIHZvaWQgYXJtX2NvcnJlbGF0ZV9mYXN0X3EzMSgKKyAgcTMxX3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTMxX3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTMxX3QgKiBwRHN0KTsKKworCisgLyoqCisgICAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBRNyBzZXF1ZW5jZXMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCAyICogbWF4KHNyY0FMZW4sIHNyY0JMZW4pIC0gMS4KKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2gxICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIob2YgdHlwZSBxMTVfdCkgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMiAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIChvZiB0eXBlIHExNV90KSBvZiBzaXplIG1pbihzcmNBTGVuLCBzcmNCTGVuKS4KKyAgICovCisgIHZvaWQgYXJtX2NvcnJlbGF0ZV9vcHRfcTcoCisgIHE3X3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTdfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxN190ICogcERzdCwKKyAgcTE1X3QgKiBwU2NyYXRjaDEsCisgIHExNV90ICogcFNjcmF0Y2gyKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQ29ycmVsYXRpb24gb2YgUTcgc2VxdWVuY2VzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCAyICogbWF4KHNyY0FMZW4sIHNyY0JMZW4pIC0gMS4KKyAgICovCisgIHZvaWQgYXJtX2NvcnJlbGF0ZV9xNygKKyAgcTdfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxN190ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHE3X3QgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgc3BhcnNlIEZJUiBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgdWludDE2X3Qgc3RhdGVJbmRleDsgICAgICAgICAgLyoqPCBzdGF0ZSBidWZmZXIgaW5kZXguICBQb2ludHMgdG8gdGhlIG9sZGVzdCBzYW1wbGUgaW4gdGhlIHN0YXRlIGJ1ZmZlci4gKi8KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG1heERlbGF5K2Jsb2NrU2l6ZS0xLiAqLworICAgIGZsb2F0MzJfdCAqcENvZWZmczsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovCisgICAgdWludDE2X3QgbWF4RGVsYXk7ICAgICAgICAgICAgLyoqPCBtYXhpbXVtIG9mZnNldCBzcGVjaWZpZWQgYnkgdGhlIHBUYXBEZWxheSBhcnJheS4gKi8KKyAgICBpbnQzMl90ICpwVGFwRGVsYXk7ICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2YgZGVsYXkgdmFsdWVzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLworICB9IGFybV9maXJfc3BhcnNlX2luc3RhbmNlX2YzMjsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBzcGFyc2UgRklSIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgICAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8KKyAgICB1aW50MTZfdCBzdGF0ZUluZGV4OyAgICAgICAgICAvKio8IHN0YXRlIGJ1ZmZlciBpbmRleC4gIFBvaW50cyB0byB0aGUgb2xkZXN0IHNhbXBsZSBpbiB0aGUgc3RhdGUgYnVmZmVyLiAqLworICAgIHEzMV90ICpwU3RhdGU7ICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbWF4RGVsYXkrYmxvY2tTaXplLTEuICovCisgICAgcTMxX3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8KKyAgICB1aW50MTZfdCBtYXhEZWxheTsgICAgICAgICAgICAvKio8IG1heGltdW0gb2Zmc2V0IHNwZWNpZmllZCBieSB0aGUgcFRhcERlbGF5IGFycmF5LiAqLworICAgIGludDMyX3QgKnBUYXBEZWxheTsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBkZWxheSB2YWx1ZXMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovCisgIH0gYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTMxOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IHNwYXJzZSBGSVIgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIHVpbnQxNl90IHN0YXRlSW5kZXg7ICAgICAgICAgIC8qKjwgc3RhdGUgYnVmZmVyIGluZGV4LiAgUG9pbnRzIHRvIHRoZSBvbGRlc3Qgc2FtcGxlIGluIHRoZSBzdGF0ZSBidWZmZXIuICovCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlciBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBtYXhEZWxheStibG9ja1NpemUtMS4gKi8KKyAgICBxMTVfdCAqcENvZWZmczsgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4qLworICAgIHVpbnQxNl90IG1heERlbGF5OyAgICAgICAgICAgIC8qKjwgbWF4aW11bSBvZmZzZXQgc3BlY2lmaWVkIGJ5IHRoZSBwVGFwRGVsYXkgYXJyYXkuICovCisgICAgaW50MzJfdCAqcFRhcERlbGF5OyAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGRlbGF5IHZhbHVlcy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8KKyAgfSBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xMTU7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRNyBzcGFyc2UgRklSIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgICAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8KKyAgICB1aW50MTZfdCBzdGF0ZUluZGV4OyAgICAgICAgICAvKio8IHN0YXRlIGJ1ZmZlciBpbmRleC4gIFBvaW50cyB0byB0aGUgb2xkZXN0IHNhbXBsZSBpbiB0aGUgc3RhdGUgYnVmZmVyLiAqLworICAgIHE3X3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbWF4RGVsYXkrYmxvY2tTaXplLTEuICovCisgICAgcTdfdCAqcENvZWZmczsgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8KKyAgICB1aW50MTZfdCBtYXhEZWxheTsgICAgICAgICAgICAvKio8IG1heGltdW0gb2Zmc2V0IHNwZWNpZmllZCBieSB0aGUgcFRhcERlbGF5IGFycmF5LiAqLworICAgIGludDMyX3QgKnBUYXBEZWxheTsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBkZWxheSB2YWx1ZXMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovCisgIH0gYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTc7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBzcGFyc2UgRklSIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBzcGFyc2UgRklSIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoSW4gIHBvaW50cyB0byBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc2l6ZSBibG9ja1NpemUuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqLworICB2b2lkIGFybV9maXJfc3BhcnNlX2YzMigKKyAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgZmxvYXQzMl90ICogcFNjcmF0Y2hJbiwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgc3BhcnNlIEZJUiBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBzcGFyc2UgRklSIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBudW1iZXIgb2Ygbm9uemVybyBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBUYXBEZWxheSAgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBvZmZzZXQgdGltZXMuCisgICAqIEBwYXJhbVtpbl0gICAgIG1heERlbGF5ICAgbWF4aW11bSBvZmZzZXQgdGltZSBzdXBwb3J0ZWQuCisgICAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdGhhdCB3aWxsIGJlIHByb2Nlc3NlZCBwZXIgYmxvY2suCisgICAqLworICB2b2lkIGFybV9maXJfc3BhcnNlX2luaXRfZjMyKAorICBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9mMzIgKiBTLAorICB1aW50MTZfdCBudW1UYXBzLAorICBmbG9hdDMyX3QgKiBwQ29lZmZzLAorICBmbG9hdDMyX3QgKiBwU3RhdGUsCisgIGludDMyX3QgKiBwVGFwRGVsYXksCisgIHVpbnQxNl90IG1heERlbGF5LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTMxIHNwYXJzZSBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBzcGFyc2UgRklSIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoSW4gIHBvaW50cyB0byBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc2l6ZSBibG9ja1NpemUuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqLworICB2b2lkIGFybV9maXJfc3BhcnNlX3EzMSgKKyAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTMxICogUywKKyAgcTMxX3QgKiBwU3JjLAorICBxMzFfdCAqIHBEc3QsCisgIHEzMV90ICogcFNjcmF0Y2hJbiwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIHNwYXJzZSBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIHNwYXJzZSBGSVIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBub256ZXJvIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgYXJyYXkgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgcFRhcERlbGF5ICBwb2ludHMgdG8gdGhlIGFycmF5IG9mIG9mZnNldCB0aW1lcy4KKyAgICogQHBhcmFtW2luXSAgICAgbWF4RGVsYXkgICBtYXhpbXVtIG9mZnNldCB0aW1lIHN1cHBvcnRlZC4KKyAgICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkIHBlciBibG9jay4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9zcGFyc2VfaW5pdF9xMzEoCisgIGFybV9maXJfc3BhcnNlX2luc3RhbmNlX3EzMSAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIHEzMV90ICogcENvZWZmcywKKyAgcTMxX3QgKiBwU3RhdGUsCisgIGludDMyX3QgKiBwVGFwRGVsYXksCisgIHVpbnQxNl90IG1heERlbGF5LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IHNwYXJzZSBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoSW4gICBwb2ludHMgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHNpemUgYmxvY2tTaXplLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaE91dCAgcG9pbnRzIHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiBzaXplIGJsb2NrU2l6ZS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICAgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqLworICB2b2lkIGFybV9maXJfc3BhcnNlX3ExNSgKKyAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHExNV90ICogcFNjcmF0Y2hJbiwKKyAgcTMxX3QgKiBwU2NyYXRjaE91dCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IHNwYXJzZSBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IHNwYXJzZSBGSVIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBub256ZXJvIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgYXJyYXkgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgcFRhcERlbGF5ICBwb2ludHMgdG8gdGhlIGFycmF5IG9mIG9mZnNldCB0aW1lcy4KKyAgICogQHBhcmFtW2luXSAgICAgbWF4RGVsYXkgICBtYXhpbXVtIG9mZnNldCB0aW1lIHN1cHBvcnRlZC4KKyAgICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkIHBlciBibG9jay4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9zcGFyc2VfaW5pdF9xMTUoCisgIGFybV9maXJfc3BhcnNlX2luc3RhbmNlX3ExNSAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIHExNV90ICogcENvZWZmcywKKyAgcTE1X3QgKiBwU3RhdGUsCisgIGludDMyX3QgKiBwVGFwRGVsYXksCisgIHVpbnQxNl90IG1heERlbGF5LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTcgc3BhcnNlIEZJUiBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFE3IHNwYXJzZSBGSVIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaEluICAgcG9pbnRzIHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiBzaXplIGJsb2NrU2l6ZS4KKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2hPdXQgIHBvaW50cyB0byBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc2l6ZSBibG9ja1NpemUuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX3NwYXJzZV9xNygKKyAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTcgKiBTLAorICBxN190ICogcFNyYywKKyAgcTdfdCAqIHBEc3QsCisgIHE3X3QgKiBwU2NyYXRjaEluLAorICBxMzFfdCAqIHBTY3JhdGNoT3V0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRNyBzcGFyc2UgRklSIGZpbHRlci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFE3IHNwYXJzZSBGSVIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBub256ZXJvIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgYXJyYXkgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgcFRhcERlbGF5ICBwb2ludHMgdG8gdGhlIGFycmF5IG9mIG9mZnNldCB0aW1lcy4KKyAgICogQHBhcmFtW2luXSAgICAgbWF4RGVsYXkgICBtYXhpbXVtIG9mZnNldCB0aW1lIHN1cHBvcnRlZC4KKyAgICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkIHBlciBibG9jay4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9zcGFyc2VfaW5pdF9xNygKKyAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTcgKiBTLAorICB1aW50MTZfdCBudW1UYXBzLAorICBxN190ICogcENvZWZmcywKKyAgcTdfdCAqIHBTdGF0ZSwKKyAgaW50MzJfdCAqIHBUYXBEZWxheSwKKyAgdWludDE2X3QgbWF4RGVsYXksCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBzaW5fY29zIGZ1bmN0aW9uLgorICAgKiBAcGFyYW1baW5dICB0aGV0YSAgIGlucHV0IHZhbHVlIGluIGRlZ3JlZXMKKyAgICogQHBhcmFtW291dF0gcFNpblZhbCAgcG9pbnRzIHRvIHRoZSBwcm9jZXNzZWQgc2luZSBvdXRwdXQuCisgICAqIEBwYXJhbVtvdXRdIHBDb3NWYWwgIHBvaW50cyB0byB0aGUgcHJvY2Vzc2VkIGNvcyBvdXRwdXQuCisgICAqLworICB2b2lkIGFybV9zaW5fY29zX2YzMigKKyAgZmxvYXQzMl90IHRoZXRhLAorICBmbG9hdDMyX3QgKiBwU2luVmFsLAorICBmbG9hdDMyX3QgKiBwQ29zVmFsKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFEzMSBzaW5fY29zIGZ1bmN0aW9uLgorICAgKiBAcGFyYW1baW5dICB0aGV0YSAgICBzY2FsZWQgaW5wdXQgdmFsdWUgaW4gZGVncmVlcworICAgKiBAcGFyYW1bb3V0XSBwU2luVmFsICBwb2ludHMgdG8gdGhlIHByb2Nlc3NlZCBzaW5lIG91dHB1dC4KKyAgICogQHBhcmFtW291dF0gcENvc1ZhbCAgcG9pbnRzIHRvIHRoZSBwcm9jZXNzZWQgY29zaW5lIG91dHB1dC4KKyAgICovCisgIHZvaWQgYXJtX3Npbl9jb3NfcTMxKAorICBxMzFfdCB0aGV0YSwKKyAgcTMxX3QgKiBwU2luVmFsLAorICBxMzFfdCAqIHBDb3NWYWwpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgY29tcGxleCBjb25qdWdhdGUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9jbXBseF9jb25qX2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgbnVtU2FtcGxlcyk7CisKKyAgLyoqCisgICAqIEBicmllZiAgUTMxIGNvbXBsZXggY29uanVnYXRlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfY29ual9xMzEoCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBudW1TYW1wbGVzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFExNSBjb21wbGV4IGNvbmp1Z2F0ZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X2NvbmpfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgbnVtU2FtcGxlcyk7CisKKworICAvKioKKyAgICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBjb21wbGV4IG1hZ25pdHVkZSBzcXVhcmVkCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSByZWFsIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiB0aGUgaW5wdXQgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9jbXBseF9tYWdfc3F1YXJlZF9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IG51bVNhbXBsZXMpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTMxIGNvbXBsZXggbWFnbml0dWRlIHNxdWFyZWQKKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIHJlYWwgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X21hZ19zcXVhcmVkX3EzMSgKKyAgcTMxX3QgKiBwU3JjLAorICBxMzFfdCAqIHBEc3QsCisgIHVpbnQzMl90IG51bVNhbXBsZXMpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTE1IGNvbXBsZXggbWFnbml0dWRlIHNxdWFyZWQKKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIHJlYWwgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X21hZ19zcXVhcmVkX3ExNSgKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IG51bVNhbXBsZXMpOworCisKKyAvKioKKyAgICogQGluZ3JvdXAgZ3JvdXBDb250cm9sbGVyCisgICAqLworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgUElEIFBJRCBNb3RvciBDb250cm9sCisgICAqCisgICAqIEEgUHJvcG9ydGlvbmFsIEludGVncmFsIERlcml2YXRpdmUgKFBJRCkgY29udHJvbGxlciBpcyBhIGdlbmVyaWMgZmVlZGJhY2sgY29udHJvbAorICAgKiBsb29wIG1lY2hhbmlzbSB3aWRlbHkgdXNlZCBpbiBpbmR1c3RyaWFsIGNvbnRyb2wgc3lzdGVtcy4KKyAgICogQSBQSUQgY29udHJvbGxlciBpcyB0aGUgbW9zdCBjb21tb25seSB1c2VkIHR5cGUgb2YgZmVlZGJhY2sgY29udHJvbGxlci4KKyAgICoKKyAgICogVGhpcyBzZXQgb2YgZnVuY3Rpb25zIGltcGxlbWVudHMgKFBJRCkgY29udHJvbGxlcnMKKyAgICogZm9yIFExNSwgUTMxLCBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4gIFRoZSBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBhIHNpbmdsZSBzYW1wbGUKKyAgICogb2YgZGF0YSBhbmQgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgc2luZ2xlIHByb2Nlc3NlZCB2YWx1ZS4KKyAgICogPGNvZGU+UzwvY29kZT4gcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBQSUQgY29udHJvbCBkYXRhIHN0cnVjdHVyZS4gIDxjb2RlPmluPC9jb2RlPgorICAgKiBpcyB0aGUgaW5wdXQgc2FtcGxlIHZhbHVlLiBUaGUgZnVuY3Rpb25zIHJldHVybiB0aGUgb3V0cHV0IHZhbHVlLgorICAgKgorICAgKiBccGFyIEFsZ29yaXRobToKKyAgICogPHByZT4KKyAgICogICAgeVtuXSA9IHlbbi0xXSArIEEwICogeFtuXSArIEExICogeFtuLTFdICsgQTIgKiB4W24tMl0KKyAgICogICAgQTAgPSBLcCArIEtpICsgS2QKKyAgICogICAgQTEgPSAoLUtwICkgLSAoMiAqIEtkICkKKyAgICogICAgQTIgPSBLZCAgPC9wcmU+CisgICAqCisgICAqIFxwYXIKKyAgICogd2hlcmUgXGMgS3AgaXMgcHJvcG9ydGlvbmFsIGNvbnN0YW50LCBcYyBLaSBpcyBJbnRlZ3JhbCBjb25zdGFudCBhbmQgXGMgS2QgaXMgRGVyaXZhdGl2ZSBjb25zdGFudAorICAgKgorICAgKiBccGFyCisgICAqIFxpbWFnZSBodG1sIFBJRC5naWYgIlByb3BvcnRpb25hbCBJbnRlZ3JhbCBEZXJpdmF0aXZlIENvbnRyb2xsZXIiCisgICAqCisgICAqIFxwYXIKKyAgICogVGhlIFBJRCBjb250cm9sbGVyIGNhbGN1bGF0ZXMgYW4gImVycm9yIiB2YWx1ZSBhcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCisgICAqIHRoZSBtZWFzdXJlZCBvdXRwdXQgYW5kIHRoZSByZWZlcmVuY2UgaW5wdXQuCisgICAqIFRoZSBjb250cm9sbGVyIGF0dGVtcHRzIHRvIG1pbmltaXplIHRoZSBlcnJvciBieSBhZGp1c3RpbmcgdGhlIHByb2Nlc3MgY29udHJvbCBpbnB1dHMuCisgICAqIFRoZSBwcm9wb3J0aW9uYWwgdmFsdWUgZGV0ZXJtaW5lcyB0aGUgcmVhY3Rpb24gdG8gdGhlIGN1cnJlbnQgZXJyb3IsCisgICAqIHRoZSBpbnRlZ3JhbCB2YWx1ZSBkZXRlcm1pbmVzIHRoZSByZWFjdGlvbiBiYXNlZCBvbiB0aGUgc3VtIG9mIHJlY2VudCBlcnJvcnMsCisgICAqIGFuZCB0aGUgZGVyaXZhdGl2ZSB2YWx1ZSBkZXRlcm1pbmVzIHRoZSByZWFjdGlvbiBiYXNlZCBvbiB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgZXJyb3IgaGFzIGJlZW4gY2hhbmdpbmcuCisgICAqCisgICAqIFxwYXIgSW5zdGFuY2UgU3RydWN0dXJlCisgICAqIFRoZSBHYWlucyBBMCwgQTEsIEEyIGFuZCBzdGF0ZSB2YXJpYWJsZXMgZm9yIGEgUElEIGNvbnRyb2xsZXIgYXJlIHN0b3JlZCB0b2dldGhlciBpbiBhbiBpbnN0YW5jZSBkYXRhIHN0cnVjdHVyZS4KKyAgICogQSBzZXBhcmF0ZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgbXVzdCBiZSBkZWZpbmVkIGZvciBlYWNoIFBJRCBDb250cm9sbGVyLgorICAgKiBUaGVyZSBhcmUgc2VwYXJhdGUgaW5zdGFuY2Ugc3RydWN0dXJlIGRlY2xhcmF0aW9ucyBmb3IgZWFjaCBvZiB0aGUgMyBzdXBwb3J0ZWQgZGF0YSB0eXBlcy4KKyAgICoKKyAgICogXHBhciBSZXNldCBGdW5jdGlvbnMKKyAgICogVGhlcmUgaXMgYWxzbyBhbiBhc3NvY2lhdGVkIHJlc2V0IGZ1bmN0aW9uIGZvciBlYWNoIGRhdGEgdHlwZSB3aGljaCBjbGVhcnMgdGhlIHN0YXRlIGFycmF5LgorICAgKgorICAgKiBccGFyIEluaXRpYWxpemF0aW9uIEZ1bmN0aW9ucworICAgKiBUaGVyZSBpcyBhbHNvIGFuIGFzc29jaWF0ZWQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGVhY2ggZGF0YSB0eXBlLgorICAgKiBUaGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOgorICAgKiAtIEluaXRpYWxpemVzIHRoZSBHYWlucyBBMCwgQTEsIEEyIGZyb20gS3AsS2ksIEtkIGdhaW5zLgorICAgKiAtIFplcm9zIG91dCB0aGUgdmFsdWVzIGluIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqCisgICAqIFxwYXIKKyAgICogSW5zdGFuY2Ugc3RydWN0dXJlIGNhbm5vdCBiZSBwbGFjZWQgaW50byBhIGNvbnN0IGRhdGEgc2VjdGlvbiBhbmQgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KKyAgICoKKyAgICogXHBhciBGaXhlZC1Qb2ludCBCZWhhdmlvcgorICAgKiBDYXJlIG11c3QgYmUgdGFrZW4gd2hlbiB1c2luZyB0aGUgZml4ZWQtcG9pbnQgdmVyc2lvbnMgb2YgdGhlIFBJRCBDb250cm9sbGVyIGZ1bmN0aW9ucy4KKyAgICogSW4gcGFydGljdWxhciwgdGhlIG92ZXJmbG93IGFuZCBzYXR1cmF0aW9uIGJlaGF2aW9yIG9mIHRoZSBhY2N1bXVsYXRvciB1c2VkIGluIGVhY2ggZnVuY3Rpb24gbXVzdCBiZSBjb25zaWRlcmVkLgorICAgKiBSZWZlciB0byB0aGUgZnVuY3Rpb24gc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBiZWxvdyBmb3IgdXNhZ2UgZ3VpZGVsaW5lcy4KKyAgICovCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIFBJRAorICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogQGJyaWVmICBQcm9jZXNzIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgUElEIENvbnRyb2wuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgUElEIENvbnRyb2wgc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gICAgIGluICBpbnB1dCBzYW1wbGUgdG8gcHJvY2VzcworICAgKiBAcmV0dXJuIG91dCBwcm9jZXNzZWQgb3V0cHV0IHNhbXBsZS4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSBmbG9hdDMyX3QgYXJtX3BpZF9mMzIoCisgIGFybV9waWRfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90IGluKQorICB7CisgICAgZmxvYXQzMl90IG91dDsKKworICAgIC8qIHlbbl0gPSB5W24tMV0gKyBBMCAqIHhbbl0gKyBBMSAqIHhbbi0xXSArIEEyICogeFtuLTJdICAqLworICAgIG91dCA9IChTLT5BMCAqIGluKSArCisgICAgICAoUy0+QTEgKiBTLT5zdGF0ZVswXSkgKyAoUy0+QTIgKiBTLT5zdGF0ZVsxXSkgKyAoUy0+c3RhdGVbMl0pOworCisgICAgLyogVXBkYXRlIHN0YXRlICovCisgICAgUy0+c3RhdGVbMV0gPSBTLT5zdGF0ZVswXTsKKyAgICBTLT5zdGF0ZVswXSA9IGluOworICAgIFMtPnN0YXRlWzJdID0gb3V0OworCisgICAgLyogcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovCisgICAgcmV0dXJuIChvdXQpOworCisgIH0KKworICAvKioKKyAgICogQGJyaWVmICBQcm9jZXNzIGZ1bmN0aW9uIGZvciB0aGUgUTMxIFBJRCBDb250cm9sLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBQSUQgQ29udHJvbCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgICAgaW4gIGlucHV0IHNhbXBsZSB0byBwcm9jZXNzCisgICAqIEByZXR1cm4gb3V0IHByb2Nlc3NlZCBvdXRwdXQgc2FtcGxlLgorICAgKgorICAgKiA8Yj5TY2FsaW5nIGFuZCBPdmVyZmxvdyBCZWhhdmlvcjo8L2I+CisgICAqIFxwYXIKKyAgICogVGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHVzaW5nIGFuIGludGVybmFsIDY0LWJpdCBhY2N1bXVsYXRvci4KKyAgICogVGhlIGFjY3VtdWxhdG9yIGhhcyBhIDIuNjIgZm9ybWF0IGFuZCBtYWludGFpbnMgZnVsbCBwcmVjaXNpb24gb2YgdGhlIGludGVybWVkaWF0ZSBtdWx0aXBsaWNhdGlvbiByZXN1bHRzIGJ1dCBwcm92aWRlcyBvbmx5IGEgc2luZ2xlIGd1YXJkIGJpdC4KKyAgICogVGh1cywgaWYgdGhlIGFjY3VtdWxhdG9yIHJlc3VsdCBvdmVyZmxvd3MgaXQgd3JhcHMgYXJvdW5kIHJhdGhlciB0aGFuIGNsaXAuCisgICAqIEluIG9yZGVyIHRvIGF2b2lkIG92ZXJmbG93cyBjb21wbGV0ZWx5IHRoZSBpbnB1dCBzaWduYWwgbXVzdCBiZSBzY2FsZWQgZG93biBieSAyIGJpdHMgYXMgdGhlcmUgYXJlIGZvdXIgYWRkaXRpb25zLgorICAgKiBBZnRlciBhbGwgbXVsdGlwbHktYWNjdW11bGF0ZXMgYXJlIHBlcmZvcm1lZCwgdGhlIDIuNjIgYWNjdW11bGF0b3IgaXMgdHJ1bmNhdGVkIHRvIDEuMzIgZm9ybWF0IGFuZCB0aGVuIHNhdHVyYXRlZCB0byAxLjMxIGZvcm1hdC4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSBxMzFfdCBhcm1fcGlkX3EzMSgKKyAgYXJtX3BpZF9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCBpbikKKyAgeworICAgIHE2M190IGFjYzsKKyAgICBxMzFfdCBvdXQ7CisKKyAgICAvKiBhY2MgPSBBMCAqIHhbbl0gICovCisgICAgYWNjID0gKHE2M190KSBTLT5BMCAqIGluOworCisgICAgLyogYWNjICs9IEExICogeFtuLTFdICovCisgICAgYWNjICs9IChxNjNfdCkgUy0+QTEgKiBTLT5zdGF0ZVswXTsKKworICAgIC8qIGFjYyArPSBBMiAqIHhbbi0yXSAgKi8KKyAgICBhY2MgKz0gKHE2M190KSBTLT5BMiAqIFMtPnN0YXRlWzFdOworCisgICAgLyogY29udmVydCBvdXRwdXQgdG8gMS4zMSBmb3JtYXQgdG8gYWRkIHlbbi0xXSAqLworICAgIG91dCA9IChxMzFfdCkgKGFjYyA+PiAzMXUpOworCisgICAgLyogb3V0ICs9IHlbbi0xXSAqLworICAgIG91dCArPSBTLT5zdGF0ZVsyXTsKKworICAgIC8qIFVwZGF0ZSBzdGF0ZSAqLworICAgIFMtPnN0YXRlWzFdID0gUy0+c3RhdGVbMF07CisgICAgUy0+c3RhdGVbMF0gPSBpbjsKKyAgICBTLT5zdGF0ZVsyXSA9IG91dDsKKworICAgIC8qIHJldHVybiB0byBhcHBsaWNhdGlvbiAqLworICAgIHJldHVybiAob3V0KTsKKyAgfQorCisKKyAgLyoqCisgICAqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIFExNSBQSUQgQ29udHJvbC4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IFBJRCBDb250cm9sIHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICAgICBpbiAgaW5wdXQgc2FtcGxlIHRvIHByb2Nlc3MKKyAgICogQHJldHVybiBvdXQgcHJvY2Vzc2VkIG91dHB1dCBzYW1wbGUuCisgICAqCisgICAqIDxiPlNjYWxpbmcgYW5kIE92ZXJmbG93IEJlaGF2aW9yOjwvYj4KKyAgICogXHBhcgorICAgKiBUaGUgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSA2NC1iaXQgaW50ZXJuYWwgYWNjdW11bGF0b3IuCisgICAqIEJvdGggR2FpbnMgYW5kIHN0YXRlIHZhcmlhYmxlcyBhcmUgcmVwcmVzZW50ZWQgaW4gMS4xNSBmb3JtYXQgYW5kIG11bHRpcGxpY2F0aW9ucyB5aWVsZCBhIDIuMzAgcmVzdWx0LgorICAgKiBUaGUgMi4zMCBpbnRlcm1lZGlhdGUgcmVzdWx0cyBhcmUgYWNjdW11bGF0ZWQgaW4gYSA2NC1iaXQgYWNjdW11bGF0b3IgaW4gMzQuMzAgZm9ybWF0LgorICAgKiBUaGVyZSBpcyBubyByaXNrIG9mIGludGVybmFsIG92ZXJmbG93IHdpdGggdGhpcyBhcHByb2FjaCBhbmQgdGhlIGZ1bGwgcHJlY2lzaW9uIG9mIGludGVybWVkaWF0ZSBtdWx0aXBsaWNhdGlvbnMgaXMgcHJlc2VydmVkLgorICAgKiBBZnRlciBhbGwgYWRkaXRpb25zIGhhdmUgYmVlbiBwZXJmb3JtZWQsIHRoZSBhY2N1bXVsYXRvciBpcyB0cnVuY2F0ZWQgdG8gMzQuMTUgZm9ybWF0IGJ5IGRpc2NhcmRpbmcgbG93IDE1IGJpdHMuCisgICAqIExhc3RseSwgdGhlIGFjY3VtdWxhdG9yIGlzIHNhdHVyYXRlZCB0byB5aWVsZCBhIHJlc3VsdCBpbiAxLjE1IGZvcm1hdC4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSBxMTVfdCBhcm1fcGlkX3ExNSgKKyAgYXJtX3BpZF9pbnN0YW5jZV9xMTUgKiBTLAorICBxMTVfdCBpbikKKyAgeworICAgIHE2M190IGFjYzsKKyAgICBxMTVfdCBvdXQ7CisKKyNpZm5kZWYgQVJNX01BVEhfQ00wX0ZBTUlMWQorICAgIF9fU0lNRDMyX1RZUEUgKnZzdGF0ZTsKKworICAgIC8qIEltcGxlbWVudGF0aW9uIG9mIFBJRCBjb250cm9sbGVyICovCisKKyAgICAvKiBhY2MgPSBBMCAqIHhbbl0gICovCisgICAgYWNjID0gKHEzMV90KSBfX1NNVUFEKCh1aW50MzJfdClTLT5BMCwgKHVpbnQzMl90KWluKTsKKworICAgIC8qIGFjYyArPSBBMSAqIHhbbi0xXSArIEEyICogeFtuLTJdICAqLworICAgIHZzdGF0ZSA9IF9fU0lNRDMyX0NPTlNUKFMtPnN0YXRlKTsKKyAgICBhY2MgPSAocTYzX3QpX19TTUxBTEQoKHVpbnQzMl90KVMtPkExLCAodWludDMyX3QpKnZzdGF0ZSwgKHVpbnQ2NF90KWFjYyk7CisjZWxzZQorICAgIC8qIGFjYyA9IEEwICogeFtuXSAgKi8KKyAgICBhY2MgPSAoKHEzMV90KSBTLT5BMCkgKiBpbjsKKworICAgIC8qIGFjYyArPSBBMSAqIHhbbi0xXSArIEEyICogeFtuLTJdICAqLworICAgIGFjYyArPSAocTMxX3QpIFMtPkExICogUy0+c3RhdGVbMF07CisgICAgYWNjICs9IChxMzFfdCkgUy0+QTIgKiBTLT5zdGF0ZVsxXTsKKyNlbmRpZgorCisgICAgLyogYWNjICs9IHlbbi0xXSAqLworICAgIGFjYyArPSAocTMxX3QpIFMtPnN0YXRlWzJdIDw8IDE1OworCisgICAgLyogc2F0dXJhdGUgdGhlIG91dHB1dCAqLworICAgIG91dCA9IChxMTVfdCkgKF9fU1NBVCgoYWNjID4+IDE1KSwgMTYpKTsKKworICAgIC8qIFVwZGF0ZSBzdGF0ZSAqLworICAgIFMtPnN0YXRlWzFdID0gUy0+c3RhdGVbMF07CisgICAgUy0+c3RhdGVbMF0gPSBpbjsKKyAgICBTLT5zdGF0ZVsyXSA9IG91dDsKKworICAgIC8qIHJldHVybiB0byBhcHBsaWNhdGlvbiAqLworICAgIHJldHVybiAob3V0KTsKKyAgfQorCisgIC8qKgorICAgKiBAfSBlbmQgb2YgUElEIGdyb3VwCisgICAqLworCisKKyAgLyoqCisgICAqIEBicmllZiBGbG9hdGluZy1wb2ludCBtYXRyaXggaW52ZXJzZS4KKyAgICogQHBhcmFtW2luXSAgc3JjICAgcG9pbnRzIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUgaW5wdXQgZmxvYXRpbmctcG9pbnQgbWF0cml4IHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW291dF0gZHN0ICAgcG9pbnRzIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUgb3V0cHV0IGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuCisgICAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU0laRV9NSVNNQVRDSCwgaWYgdGhlIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoLgorICAgKiBJZiB0aGUgaW5wdXQgbWF0cml4IGlzIHNpbmd1bGFyIChkb2VzIG5vdCBoYXZlIGFuIGludmVyc2UpLCB0aGVuIHRoZSBhbGdvcml0aG0gdGVybWluYXRlcyBhbmQgcmV0dXJucyBlcnJvciBzdGF0dXMgQVJNX01BVEhfU0lOR1VMQVIuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfaW52ZXJzZV9mMzIoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogc3JjLAorICBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqIGRzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IG1hdHJpeCBpbnZlcnNlLgorICAgKiBAcGFyYW1baW5dICBzcmMgICBwb2ludHMgdG8gdGhlIGluc3RhbmNlIG9mIHRoZSBpbnB1dCBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLgorICAgKiBAcGFyYW1bb3V0XSBkc3QgICBwb2ludHMgdG8gdGhlIGluc3RhbmNlIG9mIHRoZSBvdXRwdXQgZmxvYXRpbmctcG9pbnQgbWF0cml4IHN0cnVjdHVyZS4KKyAgICogQHJldHVybiBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TSVpFX01JU01BVENILCBpZiB0aGUgZGltZW5zaW9ucyBkbyBub3QgbWF0Y2guCisgICAqIElmIHRoZSBpbnB1dCBtYXRyaXggaXMgc2luZ3VsYXIgKGRvZXMgbm90IGhhdmUgYW4gaW52ZXJzZSksIHRoZW4gdGhlIGFsZ29yaXRobSB0ZXJtaW5hdGVzIGFuZCByZXR1cm5zIGVycm9yIHN0YXR1cyBBUk1fTUFUSF9TSU5HVUxBUi4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9pbnZlcnNlX2Y2NCgKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mNjQgKiBzcmMsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjY0ICogZHN0KTsKKworCisKKyAgLyoqCisgICAqIEBpbmdyb3VwIGdyb3VwQ29udHJvbGxlcgorICAgKi8KKworICAvKioKKyAgICogQGRlZmdyb3VwIGNsYXJrZSBWZWN0b3IgQ2xhcmtlIFRyYW5zZm9ybQorICAgKiBGb3J3YXJkIENsYXJrZSB0cmFuc2Zvcm0gY29udmVydHMgdGhlIGluc3RhbnRhbmVvdXMgc3RhdG9yIHBoYXNlcyBpbnRvIGEgdHdvLWNvb3JkaW5hdGUgdGltZSBpbnZhcmlhbnQgdmVjdG9yLgorICAgKiBHZW5lcmFsbHkgdGhlIENsYXJrZSB0cmFuc2Zvcm0gdXNlcyB0aHJlZS1waGFzZSBjdXJyZW50cyA8Y29kZT5JYSwgSWIgYW5kIEljPC9jb2RlPiB0byBjYWxjdWxhdGUgY3VycmVudHMKKyAgICogaW4gdGhlIHR3by1waGFzZSBvcnRob2dvbmFsIHN0YXRvciBheGlzIDxjb2RlPklhbHBoYTwvY29kZT4gYW5kIDxjb2RlPkliZXRhPC9jb2RlPi4KKyAgICogV2hlbiA8Y29kZT5JYWxwaGE8L2NvZGU+IGlzIHN1cGVycG9zZWQgd2l0aCA8Y29kZT5JYTwvY29kZT4gYXMgc2hvd24gaW4gdGhlIGZpZ3VyZSBiZWxvdworICAgKiBcaW1hZ2UgaHRtbCBjbGFya2UuZ2lmIFN0YXRvciBjdXJyZW50IHNwYWNlIHZlY3RvciBhbmQgaXRzIGNvbXBvbmVudHMgaW4gKGEsYikuCisgICAqIGFuZCA8Y29kZT5JYSArIEliICsgSWMgPSAwPC9jb2RlPiwgaW4gdGhpcyBjb25kaXRpb24gPGNvZGU+SWFscGhhPC9jb2RlPiBhbmQgPGNvZGU+SWJldGE8L2NvZGU+CisgICAqIGNhbiBiZSBjYWxjdWxhdGVkIHVzaW5nIG9ubHkgPGNvZGU+SWE8L2NvZGU+IGFuZCA8Y29kZT5JYjwvY29kZT4uCisgICAqCisgICAqIFRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbiBhIHNpbmdsZSBzYW1wbGUgb2YgZGF0YSBhbmQgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcm9jZXNzZWQgb3V0cHV0LgorICAgKiBUaGUgbGlicmFyeSBwcm92aWRlcyBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIFEzMSBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4KKyAgICogXHBhciBBbGdvcml0aG0KKyAgICogXGltYWdlIGh0bWwgY2xhcmtlRm9ybXVsYS5naWYKKyAgICogd2hlcmUgPGNvZGU+SWE8L2NvZGU+IGFuZCA8Y29kZT5JYjwvY29kZT4gYXJlIHRoZSBpbnN0YW50YW5lb3VzIHN0YXRvciBwaGFzZXMgYW5kCisgICAqIDxjb2RlPnBJYWxwaGE8L2NvZGU+IGFuZCA8Y29kZT5wSWJldGE8L2NvZGU+IGFyZSB0aGUgdHdvIGNvb3JkaW5hdGVzIG9mIHRpbWUgaW52YXJpYW50IHZlY3Rvci4KKyAgICogXHBhciBGaXhlZC1Qb2ludCBCZWhhdmlvcgorICAgKiBDYXJlIG11c3QgYmUgdGFrZW4gd2hlbiB1c2luZyB0aGUgUTMxIHZlcnNpb24gb2YgdGhlIENsYXJrZSB0cmFuc2Zvcm0uCisgICAqIEluIHBhcnRpY3VsYXIsIHRoZSBvdmVyZmxvdyBhbmQgc2F0dXJhdGlvbiBiZWhhdmlvciBvZiB0aGUgYWNjdW11bGF0b3IgdXNlZCBtdXN0IGJlIGNvbnNpZGVyZWQuCisgICAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGJlbG93IGZvciB1c2FnZSBndWlkZWxpbmVzLgorICAgKi8KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgY2xhcmtlCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKgorICAgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IENsYXJrZSB0cmFuc2Zvcm0KKyAgICogQHBhcmFtW2luXSAgSWEgICAgICAgaW5wdXQgdGhyZWUtcGhhc2UgY29vcmRpbmF0ZSA8Y29kZT5hPC9jb2RlPgorICAgKiBAcGFyYW1baW5dICBJYiAgICAgICBpbnB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmI8L2NvZGU+CisgICAqIEBwYXJhbVtvdXRdIHBJYWxwaGEgIHBvaW50cyB0byBvdXRwdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYWxwaGEKKyAgICogQHBhcmFtW291dF0gcEliZXRhICAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBiZXRhCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2xhcmtlX2YzMigKKyAgZmxvYXQzMl90IElhLAorICBmbG9hdDMyX3QgSWIsCisgIGZsb2F0MzJfdCAqIHBJYWxwaGEsCisgIGZsb2F0MzJfdCAqIHBJYmV0YSkKKyAgeworICAgIC8qIENhbGN1bGF0ZSBwSWFscGhhIHVzaW5nIHRoZSBlcXVhdGlvbiwgcElhbHBoYSA9IElhICovCisgICAgKnBJYWxwaGEgPSBJYTsKKworICAgIC8qIENhbGN1bGF0ZSBwSWJldGEgdXNpbmcgdGhlIGVxdWF0aW9uLCBwSWJldGEgPSAoMS9zcXJ0KDMpKSAqIElhICsgKDIvc3FydCgzKSkgKiBJYiAqLworICAgICpwSWJldGEgPSAoKGZsb2F0MzJfdCkgMC41NzczNTAyNjkxOSAqIElhICsgKGZsb2F0MzJfdCkgMS4xNTQ3MDA1MzgzOCAqIEliKTsKKyAgfQorCisKKyAgLyoqCisgICAqIEBicmllZiAgQ2xhcmtlIHRyYW5zZm9ybSBmb3IgUTMxIHZlcnNpb24KKyAgICogQHBhcmFtW2luXSAgSWEgICAgICAgaW5wdXQgdGhyZWUtcGhhc2UgY29vcmRpbmF0ZSA8Y29kZT5hPC9jb2RlPgorICAgKiBAcGFyYW1baW5dICBJYiAgICAgICBpbnB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmI8L2NvZGU+CisgICAqIEBwYXJhbVtvdXRdIHBJYWxwaGEgIHBvaW50cyB0byBvdXRwdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYWxwaGEKKyAgICogQHBhcmFtW291dF0gcEliZXRhICAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBiZXRhCisgICAqCisgICAqIDxiPlNjYWxpbmcgYW5kIE92ZXJmbG93IEJlaGF2aW9yOjwvYj4KKyAgICogXHBhcgorICAgKiBUaGUgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYW4gaW50ZXJuYWwgMzItYml0IGFjY3VtdWxhdG9yLgorICAgKiBUaGUgYWNjdW11bGF0b3IgbWFpbnRhaW5zIDEuMzEgZm9ybWF0IGJ5IHRydW5jYXRpbmcgbG93ZXIgMzEgYml0cyBvZiB0aGUgaW50ZXJtZWRpYXRlIG11bHRpcGxpY2F0aW9uIGluIDIuNjIgZm9ybWF0LgorICAgKiBUaGVyZSBpcyBzYXR1cmF0aW9uIG9uIHRoZSBhZGRpdGlvbiwgaGVuY2UgdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9jbGFya2VfcTMxKAorICBxMzFfdCBJYSwKKyAgcTMxX3QgSWIsCisgIHEzMV90ICogcElhbHBoYSwKKyAgcTMxX3QgKiBwSWJldGEpCisgIHsKKyAgICBxMzFfdCBwcm9kdWN0MSwgcHJvZHVjdDI7ICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgdmFyaWFibGVzIHVzZWQgdG8gc3RvcmUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgKi8KKworICAgIC8qIENhbGN1bGF0aW5nIHBJYWxwaGEgZnJvbSBJYSBieSBlcXVhdGlvbiBwSWFscGhhID0gSWEgKi8KKyAgICAqcElhbHBoYSA9IElhOworCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoMS8oc3FydCgzKSkgKiBJYSkgKi8KKyAgICBwcm9kdWN0MSA9IChxMzFfdCkgKCgocTYzX3QpIElhICogMHgyNEYzNEU4QikgPj4gMzApOworCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoMi9zcXJ0KDMpICogSWIpICovCisgICAgcHJvZHVjdDIgPSAocTMxX3QpICgoKHE2M190KSBJYiAqIDB4NDlFNjlEMTYpID4+IDMwKTsKKworICAgIC8qIHBJYmV0YSBpcyBjYWxjdWxhdGVkIGJ5IGFkZGluZyB0aGUgaW50ZXJtZWRpYXRlIHByb2R1Y3RzICovCisgICAgKnBJYmV0YSA9IF9fUUFERChwcm9kdWN0MSwgcHJvZHVjdDIpOworICB9CisKKyAgLyoqCisgICAqIEB9IGVuZCBvZiBjbGFya2UgZ3JvdXAKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiAgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBRNyB2ZWN0b3IgdG8gUTMxIHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9xN190b19xMzEoCisgIHE3X3QgKiBwU3JjLAorICBxMzFfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworCisgIC8qKgorICAgKiBAaW5ncm91cCBncm91cENvbnRyb2xsZXIKKyAgICovCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBpbnZfY2xhcmtlIFZlY3RvciBJbnZlcnNlIENsYXJrZSBUcmFuc2Zvcm0KKyAgICogSW52ZXJzZSBDbGFya2UgdHJhbnNmb3JtIGNvbnZlcnRzIHRoZSB0d28tY29vcmRpbmF0ZSB0aW1lIGludmFyaWFudCB2ZWN0b3IgaW50byBpbnN0YW50YW5lb3VzIHN0YXRvciBwaGFzZXMuCisgICAqCisgICAqIFRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbiBhIHNpbmdsZSBzYW1wbGUgb2YgZGF0YSBhbmQgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcm9jZXNzZWQgb3V0cHV0LgorICAgKiBUaGUgbGlicmFyeSBwcm92aWRlcyBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIFEzMSBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4KKyAgICogXHBhciBBbGdvcml0aG0KKyAgICogXGltYWdlIGh0bWwgY2xhcmtlSW52Rm9ybXVsYS5naWYKKyAgICogd2hlcmUgPGNvZGU+cElhPC9jb2RlPiBhbmQgPGNvZGU+cEliPC9jb2RlPiBhcmUgdGhlIGluc3RhbnRhbmVvdXMgc3RhdG9yIHBoYXNlcyBhbmQKKyAgICogPGNvZGU+SWFscGhhPC9jb2RlPiBhbmQgPGNvZGU+SWJldGE8L2NvZGU+IGFyZSB0aGUgdHdvIGNvb3JkaW5hdGVzIG9mIHRpbWUgaW52YXJpYW50IHZlY3Rvci4KKyAgICogXHBhciBGaXhlZC1Qb2ludCBCZWhhdmlvcgorICAgKiBDYXJlIG11c3QgYmUgdGFrZW4gd2hlbiB1c2luZyB0aGUgUTMxIHZlcnNpb24gb2YgdGhlIENsYXJrZSB0cmFuc2Zvcm0uCisgICAqIEluIHBhcnRpY3VsYXIsIHRoZSBvdmVyZmxvdyBhbmQgc2F0dXJhdGlvbiBiZWhhdmlvciBvZiB0aGUgYWNjdW11bGF0b3IgdXNlZCBtdXN0IGJlIGNvbnNpZGVyZWQuCisgICAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGJlbG93IGZvciB1c2FnZSBndWlkZWxpbmVzLgorICAgKi8KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgaW52X2NsYXJrZQorICAgKiBAeworICAgKi8KKworICAgLyoqCisgICAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgSW52ZXJzZSBDbGFya2UgdHJhbnNmb3JtCisgICAqIEBwYXJhbVtpbl0gIElhbHBoYSAgaW5wdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYWxwaGEKKyAgICogQHBhcmFtW2luXSAgSWJldGEgICBpbnB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBiZXRhCisgICAqIEBwYXJhbVtvdXRdIHBJYSAgICAgcG9pbnRzIHRvIG91dHB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmE8L2NvZGU+CisgICAqIEBwYXJhbVtvdXRdIHBJYiAgICAgcG9pbnRzIHRvIG91dHB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmI8L2NvZGU+CisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1faW52X2NsYXJrZV9mMzIoCisgIGZsb2F0MzJfdCBJYWxwaGEsCisgIGZsb2F0MzJfdCBJYmV0YSwKKyAgZmxvYXQzMl90ICogcElhLAorICBmbG9hdDMyX3QgKiBwSWIpCisgIHsKKyAgICAvKiBDYWxjdWxhdGluZyBwSWEgZnJvbSBJYWxwaGEgYnkgZXF1YXRpb24gcElhID0gSWFscGhhICovCisgICAgKnBJYSA9IElhbHBoYTsKKworICAgIC8qIENhbGN1bGF0aW5nIHBJYiBmcm9tIElhbHBoYSBhbmQgSWJldGEgYnkgZXF1YXRpb24gcEliID0gLSgxLzIpICogSWFscGhhICsgKHNxcnQoMykvMikgKiBJYmV0YSAqLworICAgICpwSWIgPSAtMC41ZiAqIElhbHBoYSArIDAuODY2MDI1NDAzOWYgKiBJYmV0YTsKKyAgfQorCisKKyAgLyoqCisgICAqIEBicmllZiAgSW52ZXJzZSBDbGFya2UgdHJhbnNmb3JtIGZvciBRMzEgdmVyc2lvbgorICAgKiBAcGFyYW1baW5dICBJYWxwaGEgIGlucHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGFscGhhCisgICAqIEBwYXJhbVtpbl0gIEliZXRhICAgaW5wdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYmV0YQorICAgKiBAcGFyYW1bb3V0XSBwSWEgICAgIHBvaW50cyB0byBvdXRwdXQgdGhyZWUtcGhhc2UgY29vcmRpbmF0ZSA8Y29kZT5hPC9jb2RlPgorICAgKiBAcGFyYW1bb3V0XSBwSWIgICAgIHBvaW50cyB0byBvdXRwdXQgdGhyZWUtcGhhc2UgY29vcmRpbmF0ZSA8Y29kZT5iPC9jb2RlPgorICAgKgorICAgKiA8Yj5TY2FsaW5nIGFuZCBPdmVyZmxvdyBCZWhhdmlvcjo8L2I+CisgICAqIFxwYXIKKyAgICogVGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHVzaW5nIGFuIGludGVybmFsIDMyLWJpdCBhY2N1bXVsYXRvci4KKyAgICogVGhlIGFjY3VtdWxhdG9yIG1haW50YWlucyAxLjMxIGZvcm1hdCBieSB0cnVuY2F0aW5nIGxvd2VyIDMxIGJpdHMgb2YgdGhlIGludGVybWVkaWF0ZSBtdWx0aXBsaWNhdGlvbiBpbiAyLjYyIGZvcm1hdC4KKyAgICogVGhlcmUgaXMgc2F0dXJhdGlvbiBvbiB0aGUgc3VidHJhY3Rpb24sIGhlbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1faW52X2NsYXJrZV9xMzEoCisgIHEzMV90IElhbHBoYSwKKyAgcTMxX3QgSWJldGEsCisgIHEzMV90ICogcElhLAorICBxMzFfdCAqIHBJYikKKyAgeworICAgIHEzMV90IHByb2R1Y3QxLCBwcm9kdWN0MjsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLworCisgICAgLyogQ2FsY3VsYXRpbmcgcElhIGZyb20gSWFscGhhIGJ5IGVxdWF0aW9uIHBJYSA9IElhbHBoYSAqLworICAgICpwSWEgPSBJYWxwaGE7CisKKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5ICgxLygyKnNxcnQoMykpICogSWEpICovCisgICAgcHJvZHVjdDEgPSAocTMxX3QpICgoKHE2M190KSAoSWFscGhhKSAqICgweDQwMDAwMDAwKSkgPj4gMzEpOworCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoMS9zcXJ0KDMpICogcEliKSAqLworICAgIHByb2R1Y3QyID0gKHEzMV90KSAoKChxNjNfdCkgKEliZXRhKSAqICgweDZFRDlFQkExKSkgPj4gMzEpOworCisgICAgLyogcEliIGlzIGNhbGN1bGF0ZWQgYnkgc3VidHJhY3RpbmcgdGhlIHByb2R1Y3RzICovCisgICAgKnBJYiA9IF9fUVNVQihwcm9kdWN0MiwgcHJvZHVjdDEpOworICB9CisKKyAgLyoqCisgICAqIEB9IGVuZCBvZiBpbnZfY2xhcmtlIGdyb3VwCisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTcgdmVjdG9yIHRvIFExNSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKi8KKyAgdm9pZCBhcm1fcTdfdG9fcTE1KAorICBxN190ICogcFNyYywKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKworICAvKioKKyAgICogQGluZ3JvdXAgZ3JvdXBDb250cm9sbGVyCisgICAqLworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgcGFyayBWZWN0b3IgUGFyayBUcmFuc2Zvcm0KKyAgICoKKyAgICogRm9yd2FyZCBQYXJrIHRyYW5zZm9ybSBjb252ZXJ0cyB0aGUgaW5wdXQgdHdvLWNvb3JkaW5hdGUgdmVjdG9yIHRvIGZsdXggYW5kIHRvcnF1ZSBjb21wb25lbnRzLgorICAgKiBUaGUgUGFyayB0cmFuc2Zvcm0gY2FuIGJlIHVzZWQgdG8gcmVhbGl6ZSB0aGUgdHJhbnNmb3JtYXRpb24gb2YgdGhlIDxjb2RlPklhbHBoYTwvY29kZT4gYW5kIHRoZSA8Y29kZT5JYmV0YTwvY29kZT4gY3VycmVudHMKKyAgICogZnJvbSB0aGUgc3RhdGlvbmFyeSB0byB0aGUgbW92aW5nIHJlZmVyZW5jZSBmcmFtZSBhbmQgY29udHJvbCB0aGUgc3BhdGlhbCByZWxhdGlvbnNoaXAgYmV0d2VlbgorICAgKiB0aGUgc3RhdG9yIHZlY3RvciBjdXJyZW50IGFuZCByb3RvciBmbHV4IHZlY3Rvci4KKyAgICogSWYgd2UgY29uc2lkZXIgdGhlIGQgYXhpcyBhbGlnbmVkIHdpdGggdGhlIHJvdG9yIGZsdXgsIHRoZSBkaWFncmFtIGJlbG93IHNob3dzIHRoZQorICAgKiBjdXJyZW50IHZlY3RvciBhbmQgdGhlIHJlbGF0aW9uc2hpcCBmcm9tIHRoZSB0d28gcmVmZXJlbmNlIGZyYW1lczoKKyAgICogXGltYWdlIGh0bWwgcGFyay5naWYgIlN0YXRvciBjdXJyZW50IHNwYWNlIHZlY3RvciBhbmQgaXRzIGNvbXBvbmVudCBpbiAoYSxiKSBhbmQgaW4gdGhlIGQscSByb3RhdGluZyByZWZlcmVuY2UgZnJhbWUiCisgICAqCisgICAqIFRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbiBhIHNpbmdsZSBzYW1wbGUgb2YgZGF0YSBhbmQgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcm9jZXNzZWQgb3V0cHV0LgorICAgKiBUaGUgbGlicmFyeSBwcm92aWRlcyBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIFEzMSBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4KKyAgICogXHBhciBBbGdvcml0aG0KKyAgICogXGltYWdlIGh0bWwgcGFya0Zvcm11bGEuZ2lmCisgICAqIHdoZXJlIDxjb2RlPklhbHBoYTwvY29kZT4gYW5kIDxjb2RlPkliZXRhPC9jb2RlPiBhcmUgdGhlIHN0YXRvciB2ZWN0b3IgY29tcG9uZW50cywKKyAgICogPGNvZGU+cElkPC9jb2RlPiBhbmQgPGNvZGU+cElxPC9jb2RlPiBhcmUgcm90b3IgdmVjdG9yIGNvbXBvbmVudHMgYW5kIDxjb2RlPmNvc1ZhbDwvY29kZT4gYW5kIDxjb2RlPnNpblZhbDwvY29kZT4gYXJlIHRoZQorICAgKiBjb3NpbmUgYW5kIHNpbmUgdmFsdWVzIG9mIHRoZXRhIChyb3RvciBmbHV4IHBvc2l0aW9uKS4KKyAgICogXHBhciBGaXhlZC1Qb2ludCBCZWhhdmlvcgorICAgKiBDYXJlIG11c3QgYmUgdGFrZW4gd2hlbiB1c2luZyB0aGUgUTMxIHZlcnNpb24gb2YgdGhlIFBhcmsgdHJhbnNmb3JtLgorICAgKiBJbiBwYXJ0aWN1bGFyLCB0aGUgb3ZlcmZsb3cgYW5kIHNhdHVyYXRpb24gYmVoYXZpb3Igb2YgdGhlIGFjY3VtdWxhdG9yIHVzZWQgbXVzdCBiZSBjb25zaWRlcmVkLgorICAgKiBSZWZlciB0byB0aGUgZnVuY3Rpb24gc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBiZWxvdyBmb3IgdXNhZ2UgZ3VpZGVsaW5lcy4KKyAgICovCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHBhcmsKKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiBGbG9hdGluZy1wb2ludCBQYXJrIHRyYW5zZm9ybQorICAgKiBAcGFyYW1baW5dICBJYWxwaGEgIGlucHV0IHR3by1waGFzZSB2ZWN0b3IgY29vcmRpbmF0ZSBhbHBoYQorICAgKiBAcGFyYW1baW5dICBJYmV0YSAgIGlucHV0IHR3by1waGFzZSB2ZWN0b3IgY29vcmRpbmF0ZSBiZXRhCisgICAqIEBwYXJhbVtvdXRdIHBJZCAgICAgcG9pbnRzIHRvIG91dHB1dCAgIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBkCisgICAqIEBwYXJhbVtvdXRdIHBJcSAgICAgcG9pbnRzIHRvIG91dHB1dCAgIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBxCisgICAqIEBwYXJhbVtpbl0gIHNpblZhbCAgc2luZSB2YWx1ZSBvZiByb3RhdGlvbiBhbmdsZSB0aGV0YQorICAgKiBAcGFyYW1baW5dICBjb3NWYWwgIGNvc2luZSB2YWx1ZSBvZiByb3RhdGlvbiBhbmdsZSB0aGV0YQorICAgKgorICAgKiBUaGUgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgZm9yd2FyZCBQYXJrIHRyYW5zZm9ybS4KKyAgICoKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9wYXJrX2YzMigKKyAgZmxvYXQzMl90IElhbHBoYSwKKyAgZmxvYXQzMl90IEliZXRhLAorICBmbG9hdDMyX3QgKiBwSWQsCisgIGZsb2F0MzJfdCAqIHBJcSwKKyAgZmxvYXQzMl90IHNpblZhbCwKKyAgZmxvYXQzMl90IGNvc1ZhbCkKKyAgeworICAgIC8qIENhbGN1bGF0ZSBwSWQgdXNpbmcgdGhlIGVxdWF0aW9uLCBwSWQgPSBJYWxwaGEgKiBjb3NWYWwgKyBJYmV0YSAqIHNpblZhbCAqLworICAgICpwSWQgPSBJYWxwaGEgKiBjb3NWYWwgKyBJYmV0YSAqIHNpblZhbDsKKworICAgIC8qIENhbGN1bGF0ZSBwSXEgdXNpbmcgdGhlIGVxdWF0aW9uLCBwSXEgPSAtIElhbHBoYSAqIHNpblZhbCArIEliZXRhICogY29zVmFsICovCisgICAgKnBJcSA9IC1JYWxwaGEgKiBzaW5WYWwgKyBJYmV0YSAqIGNvc1ZhbDsKKyAgfQorCisKKyAgLyoqCisgICAqIEBicmllZiAgUGFyayB0cmFuc2Zvcm0gZm9yIFEzMSB2ZXJzaW9uCisgICAqIEBwYXJhbVtpbl0gIElhbHBoYSAgaW5wdXQgdHdvLXBoYXNlIHZlY3RvciBjb29yZGluYXRlIGFscGhhCisgICAqIEBwYXJhbVtpbl0gIEliZXRhICAgaW5wdXQgdHdvLXBoYXNlIHZlY3RvciBjb29yZGluYXRlIGJldGEKKyAgICogQHBhcmFtW291dF0gcElkICAgICBwb2ludHMgdG8gb3V0cHV0IHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBkCisgICAqIEBwYXJhbVtvdXRdIHBJcSAgICAgcG9pbnRzIHRvIG91dHB1dCByb3RvciByZWZlcmVuY2UgZnJhbWUgcQorICAgKiBAcGFyYW1baW5dICBzaW5WYWwgIHNpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGEKKyAgICogQHBhcmFtW2luXSAgY29zVmFsICBjb3NpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGEKKyAgICoKKyAgICogPGI+U2NhbGluZyBhbmQgT3ZlcmZsb3cgQmVoYXZpb3I6PC9iPgorICAgKiBccGFyCisgICAqIFRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB1c2luZyBhbiBpbnRlcm5hbCAzMi1iaXQgYWNjdW11bGF0b3IuCisgICAqIFRoZSBhY2N1bXVsYXRvciBtYWludGFpbnMgMS4zMSBmb3JtYXQgYnkgdHJ1bmNhdGluZyBsb3dlciAzMSBiaXRzIG9mIHRoZSBpbnRlcm1lZGlhdGUgbXVsdGlwbGljYXRpb24gaW4gMi42MiBmb3JtYXQuCisgICAqIFRoZXJlIGlzIHNhdHVyYXRpb24gb24gdGhlIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiwgaGVuY2UgdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9wYXJrX3EzMSgKKyAgcTMxX3QgSWFscGhhLAorICBxMzFfdCBJYmV0YSwKKyAgcTMxX3QgKiBwSWQsCisgIHEzMV90ICogcElxLAorICBxMzFfdCBzaW5WYWwsCisgIHEzMV90IGNvc1ZhbCkKKyAgeworICAgIHEzMV90IHByb2R1Y3QxLCBwcm9kdWN0MjsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLworICAgIHEzMV90IHByb2R1Y3QzLCBwcm9kdWN0NDsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLworCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoSWFscGhhICogY29zVmFsKSAqLworICAgIHByb2R1Y3QxID0gKHEzMV90KSAoKChxNjNfdCkgKElhbHBoYSkgKiAoY29zVmFsKSkgPj4gMzEpOworCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoSWJldGEgKiBzaW5WYWwpICovCisgICAgcHJvZHVjdDIgPSAocTMxX3QpICgoKHE2M190KSAoSWJldGEpICogKHNpblZhbCkpID4+IDMxKTsKKworCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoSWFscGhhICogc2luVmFsKSAqLworICAgIHByb2R1Y3QzID0gKHEzMV90KSAoKChxNjNfdCkgKElhbHBoYSkgKiAoc2luVmFsKSkgPj4gMzEpOworCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoSWJldGEgKiBjb3NWYWwpICovCisgICAgcHJvZHVjdDQgPSAocTMxX3QpICgoKHE2M190KSAoSWJldGEpICogKGNvc1ZhbCkpID4+IDMxKTsKKworICAgIC8qIENhbGN1bGF0ZSBwSWQgYnkgYWRkaW5nIHRoZSB0d28gaW50ZXJtZWRpYXRlIHByb2R1Y3RzIDEgYW5kIDIgKi8KKyAgICAqcElkID0gX19RQUREKHByb2R1Y3QxLCBwcm9kdWN0Mik7CisKKyAgICAvKiBDYWxjdWxhdGUgcElxIGJ5IHN1YnRyYWN0aW5nIHRoZSB0d28gaW50ZXJtZWRpYXRlIHByb2R1Y3RzIDMgZnJvbSA0ICovCisgICAgKnBJcSA9IF9fUVNVQihwcm9kdWN0NCwgcHJvZHVjdDMpOworICB9CisKKyAgLyoqCisgICAqIEB9IGVuZCBvZiBwYXJrIGdyb3VwCisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTcgdmVjdG9yIHRvIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgaXMgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKi8KKyAgdm9pZCBhcm1fcTdfdG9fZmxvYXQoCisgIHE3X3QgKiBwU3JjLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBpbmdyb3VwIGdyb3VwQ29udHJvbGxlcgorICAgKi8KKworICAvKioKKyAgICogQGRlZmdyb3VwIGludl9wYXJrIFZlY3RvciBJbnZlcnNlIFBhcmsgdHJhbnNmb3JtCisgICAqIEludmVyc2UgUGFyayB0cmFuc2Zvcm0gY29udmVydHMgdGhlIGlucHV0IGZsdXggYW5kIHRvcnF1ZSBjb21wb25lbnRzIHRvIHR3by1jb29yZGluYXRlIHZlY3Rvci4KKyAgICoKKyAgICogVGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uIGEgc2luZ2xlIHNhbXBsZSBvZiBkYXRhIGFuZCBlYWNoIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByb2Nlc3NlZCBvdXRwdXQuCisgICAqIFRoZSBsaWJyYXJ5IHByb3ZpZGVzIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgUTMxIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzLgorICAgKiBccGFyIEFsZ29yaXRobQorICAgKiBcaW1hZ2UgaHRtbCBwYXJrSW52Rm9ybXVsYS5naWYKKyAgICogd2hlcmUgPGNvZGU+cElhbHBoYTwvY29kZT4gYW5kIDxjb2RlPnBJYmV0YTwvY29kZT4gYXJlIHRoZSBzdGF0b3IgdmVjdG9yIGNvbXBvbmVudHMsCisgICAqIDxjb2RlPklkPC9jb2RlPiBhbmQgPGNvZGU+SXE8L2NvZGU+IGFyZSByb3RvciB2ZWN0b3IgY29tcG9uZW50cyBhbmQgPGNvZGU+Y29zVmFsPC9jb2RlPiBhbmQgPGNvZGU+c2luVmFsPC9jb2RlPiBhcmUgdGhlCisgICAqIGNvc2luZSBhbmQgc2luZSB2YWx1ZXMgb2YgdGhldGEgKHJvdG9yIGZsdXggcG9zaXRpb24pLgorICAgKiBccGFyIEZpeGVkLVBvaW50IEJlaGF2aW9yCisgICAqIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHVzaW5nIHRoZSBRMzEgdmVyc2lvbiBvZiB0aGUgUGFyayB0cmFuc2Zvcm0uCisgICAqIEluIHBhcnRpY3VsYXIsIHRoZSBvdmVyZmxvdyBhbmQgc2F0dXJhdGlvbiBiZWhhdmlvciBvZiB0aGUgYWNjdW11bGF0b3IgdXNlZCBtdXN0IGJlIGNvbnNpZGVyZWQuCisgICAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGJlbG93IGZvciB1c2FnZSBndWlkZWxpbmVzLgorICAgKi8KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgaW52X3BhcmsKKyAgICogQHsKKyAgICovCisKKyAgIC8qKgorICAgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IEludmVyc2UgUGFyayB0cmFuc2Zvcm0KKyAgICogQHBhcmFtW2luXSAgSWQgICAgICAgaW5wdXQgY29vcmRpbmF0ZSBvZiByb3RvciByZWZlcmVuY2UgZnJhbWUgZAorICAgKiBAcGFyYW1baW5dICBJcSAgICAgICBpbnB1dCBjb29yZGluYXRlIG9mIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBxCisgICAqIEBwYXJhbVtvdXRdIHBJYWxwaGEgIHBvaW50cyB0byBvdXRwdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYWxwaGEKKyAgICogQHBhcmFtW291dF0gcEliZXRhICAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBiZXRhCisgICAqIEBwYXJhbVtpbl0gIHNpblZhbCAgIHNpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGEKKyAgICogQHBhcmFtW2luXSAgY29zVmFsICAgY29zaW5lIHZhbHVlIG9mIHJvdGF0aW9uIGFuZ2xlIHRoZXRhCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1faW52X3BhcmtfZjMyKAorICBmbG9hdDMyX3QgSWQsCisgIGZsb2F0MzJfdCBJcSwKKyAgZmxvYXQzMl90ICogcElhbHBoYSwKKyAgZmxvYXQzMl90ICogcEliZXRhLAorICBmbG9hdDMyX3Qgc2luVmFsLAorICBmbG9hdDMyX3QgY29zVmFsKQorICB7CisgICAgLyogQ2FsY3VsYXRlIHBJYWxwaGEgdXNpbmcgdGhlIGVxdWF0aW9uLCBwSWFscGhhID0gSWQgKiBjb3NWYWwgLSBJcSAqIHNpblZhbCAqLworICAgICpwSWFscGhhID0gSWQgKiBjb3NWYWwgLSBJcSAqIHNpblZhbDsKKworICAgIC8qIENhbGN1bGF0ZSBwSWJldGEgdXNpbmcgdGhlIGVxdWF0aW9uLCBwSWJldGEgPSBJZCAqIHNpblZhbCArIElxICogY29zVmFsICovCisgICAgKnBJYmV0YSA9IElkICogc2luVmFsICsgSXEgKiBjb3NWYWw7CisgIH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgIEludmVyc2UgUGFyayB0cmFuc2Zvcm0gZm9yICAgUTMxIHZlcnNpb24KKyAgICogQHBhcmFtW2luXSAgSWQgICAgICAgaW5wdXQgY29vcmRpbmF0ZSBvZiByb3RvciByZWZlcmVuY2UgZnJhbWUgZAorICAgKiBAcGFyYW1baW5dICBJcSAgICAgICBpbnB1dCBjb29yZGluYXRlIG9mIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBxCisgICAqIEBwYXJhbVtvdXRdIHBJYWxwaGEgIHBvaW50cyB0byBvdXRwdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYWxwaGEKKyAgICogQHBhcmFtW291dF0gcEliZXRhICAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBiZXRhCisgICAqIEBwYXJhbVtpbl0gIHNpblZhbCAgIHNpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGEKKyAgICogQHBhcmFtW2luXSAgY29zVmFsICAgY29zaW5lIHZhbHVlIG9mIHJvdGF0aW9uIGFuZ2xlIHRoZXRhCisgICAqCisgICAqIDxiPlNjYWxpbmcgYW5kIE92ZXJmbG93IEJlaGF2aW9yOjwvYj4KKyAgICogXHBhcgorICAgKiBUaGUgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYW4gaW50ZXJuYWwgMzItYml0IGFjY3VtdWxhdG9yLgorICAgKiBUaGUgYWNjdW11bGF0b3IgbWFpbnRhaW5zIDEuMzEgZm9ybWF0IGJ5IHRydW5jYXRpbmcgbG93ZXIgMzEgYml0cyBvZiB0aGUgaW50ZXJtZWRpYXRlIG11bHRpcGxpY2F0aW9uIGluIDIuNjIgZm9ybWF0LgorICAgKiBUaGVyZSBpcyBzYXR1cmF0aW9uIG9uIHRoZSBhZGRpdGlvbiwgaGVuY2UgdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9pbnZfcGFya19xMzEoCisgIHEzMV90IElkLAorICBxMzFfdCBJcSwKKyAgcTMxX3QgKiBwSWFscGhhLAorICBxMzFfdCAqIHBJYmV0YSwKKyAgcTMxX3Qgc2luVmFsLAorICBxMzFfdCBjb3NWYWwpCisgIHsKKyAgICBxMzFfdCBwcm9kdWN0MSwgcHJvZHVjdDI7ICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgdmFyaWFibGVzIHVzZWQgdG8gc3RvcmUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgKi8KKyAgICBxMzFfdCBwcm9kdWN0MywgcHJvZHVjdDQ7ICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgdmFyaWFibGVzIHVzZWQgdG8gc3RvcmUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgKi8KKworICAgIC8qIEludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgYnkgKElkICogY29zVmFsKSAqLworICAgIHByb2R1Y3QxID0gKHEzMV90KSAoKChxNjNfdCkgKElkKSAqIChjb3NWYWwpKSA+PiAzMSk7CisKKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJcSAqIHNpblZhbCkgKi8KKyAgICBwcm9kdWN0MiA9IChxMzFfdCkgKCgocTYzX3QpIChJcSkgKiAoc2luVmFsKSkgPj4gMzEpOworCisKKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJZCAqIHNpblZhbCkgKi8KKyAgICBwcm9kdWN0MyA9IChxMzFfdCkgKCgocTYzX3QpIChJZCkgKiAoc2luVmFsKSkgPj4gMzEpOworCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoSXEgKiBjb3NWYWwpICovCisgICAgcHJvZHVjdDQgPSAocTMxX3QpICgoKHE2M190KSAoSXEpICogKGNvc1ZhbCkpID4+IDMxKTsKKworICAgIC8qIENhbGN1bGF0ZSBwSWFscGhhIGJ5IHVzaW5nIHRoZSB0d28gaW50ZXJtZWRpYXRlIHByb2R1Y3RzIDEgYW5kIDIgKi8KKyAgICAqcElhbHBoYSA9IF9fUVNVQihwcm9kdWN0MSwgcHJvZHVjdDIpOworCisgICAgLyogQ2FsY3VsYXRlIHBJYmV0YSBieSB1c2luZyB0aGUgdHdvIGludGVybWVkaWF0ZSBwcm9kdWN0cyAzIGFuZCA0ICovCisgICAgKnBJYmV0YSA9IF9fUUFERChwcm9kdWN0NCwgcHJvZHVjdDMpOworICB9CisKKyAgLyoqCisgICAqIEB9IGVuZCBvZiBJbnZlcnNlIHBhcmsgZ3JvdXAKKyAgICovCisKKworICAvKioKKyAgICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFEzMSB2ZWN0b3IgdG8gZmxvYXRpbmctcG9pbnQgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9xMzFfdG9fZmxvYXQoCisgIHEzMV90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworICAvKioKKyAgICogQGluZ3JvdXAgZ3JvdXBJbnRlcnBvbGF0aW9uCisgICAqLworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgTGluZWFySW50ZXJwb2xhdGUgTGluZWFyIEludGVycG9sYXRpb24KKyAgICoKKyAgICogTGluZWFyIGludGVycG9sYXRpb24gaXMgYSBtZXRob2Qgb2YgY3VydmUgZml0dGluZyB1c2luZyBsaW5lYXIgcG9seW5vbWlhbHMuCisgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIHdvcmtzIGJ5IGVmZmVjdGl2ZWx5IGRyYXdpbmcgYSBzdHJhaWdodCBsaW5lIGJldHdlZW4gdHdvIG5laWdoYm9yaW5nIHNhbXBsZXMgYW5kIHJldHVybmluZyB0aGUgYXBwcm9wcmlhdGUgcG9pbnQgYWxvbmcgdGhhdCBsaW5lCisgICAqCisgICAqIFxwYXIKKyAgICogXGltYWdlIGh0bWwgTGluZWFySW50ZXJwLmdpZiAiTGluZWFyIGludGVycG9sYXRpb24iCisgICAqCisgICAqIFxwYXIKKyAgICogQSAgTGluZWFyIEludGVycG9sYXRlIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYW4gb3V0cHV0IHZhbHVlKHkpLCBmb3IgdGhlIGlucHV0KHgpCisgICAqIHVzaW5nIGxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIHRoZSBpbnB1dCB2YWx1ZXMgeDAsIHgxKCBuZWFyZXN0IGlucHV0IHZhbHVlcykgYW5kIHRoZSBvdXRwdXQgdmFsdWVzIHkwIGFuZCB5MShuZWFyZXN0IG91dHB1dCB2YWx1ZXMpCisgICAqCisgICAqIFxwYXIgQWxnb3JpdGhtOgorICAgKiA8cHJlPgorICAgKiAgICAgICB5ID0geTAgKyAoeCAtIHgwKSAqICgoeTEgLSB5MCkvKHgxLXgwKSkKKyAgICogICAgICAgd2hlcmUgeDAsIHgxIGFyZSBuZWFyZXN0IHZhbHVlcyBvZiBpbnB1dCB4CisgICAqICAgICAgICAgICAgIHkwLCB5MSBhcmUgbmVhcmVzdCB2YWx1ZXMgdG8gb3V0cHV0IHkKKyAgICogPC9wcmU+CisgICAqCisgICAqIFxwYXIKKyAgICogVGhpcyBzZXQgb2YgZnVuY3Rpb25zIGltcGxlbWVudHMgTGluZWFyIGludGVycG9sYXRpb24gcHJvY2VzcworICAgKiBmb3IgUTcsIFExNSwgUTMxLCBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4gIFRoZSBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBhIHNpbmdsZQorICAgKiBzYW1wbGUgb2YgZGF0YSBhbmQgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgc2luZ2xlIHByb2Nlc3NlZCB2YWx1ZS4KKyAgICogPGNvZGU+UzwvY29kZT4gcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBMaW5lYXIgSW50ZXJwb2xhdGUgZnVuY3Rpb24gZGF0YSBzdHJ1Y3R1cmUuCisgICAqIDxjb2RlPng8L2NvZGU+IGlzIHRoZSBpbnB1dCBzYW1wbGUgdmFsdWUuIFRoZSBmdW5jdGlvbnMgcmV0dXJucyB0aGUgb3V0cHV0IHZhbHVlLgorICAgKgorICAgKiBccGFyCisgICAqIGlmIHggaXMgb3V0c2lkZSBvZiB0aGUgdGFibGUgYm91bmRhcnksIExpbmVhciBpbnRlcnBvbGF0aW9uIHJldHVybnMgZmlyc3QgdmFsdWUgb2YgdGhlIHRhYmxlCisgICAqIGlmIHggaXMgYmVsb3cgaW5wdXQgcmFuZ2UgYW5kIHJldHVybnMgbGFzdCB2YWx1ZSBvZiB0YWJsZSBpZiB4IGlzIGFib3ZlIHJhbmdlLgorICAgKi8KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgTGluZWFySW50ZXJwb2xhdGUKKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IExpbmVhciBJbnRlcnBvbGF0aW9uIEZ1bmN0aW9uLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgTGluZWFyIEludGVycG9sYXRpb24gc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gICAgIHggIGlucHV0IHNhbXBsZSB0byBwcm9jZXNzCisgICAqIEByZXR1cm4geSBwcm9jZXNzZWQgb3V0cHV0IHNhbXBsZS4KKyAgICoKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSBmbG9hdDMyX3QgYXJtX2xpbmVhcl9pbnRlcnBfZjMyKAorICBhcm1fbGluZWFyX2ludGVycF9pbnN0YW5jZV9mMzIgKiBTLAorICBmbG9hdDMyX3QgeCkKKyAgeworICAgIGZsb2F0MzJfdCB5OworICAgIGZsb2F0MzJfdCB4MCwgeDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lYXJlc3QgaW5wdXQgdmFsdWVzICovCisgICAgZmxvYXQzMl90IHkwLCB5MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVhcmVzdCBvdXRwdXQgdmFsdWVzICovCisgICAgZmxvYXQzMl90IHhTcGFjaW5nID0gUy0+eFNwYWNpbmc7ICAgICAgICAgICAgLyogc3BhY2luZyBiZXR3ZWVuIGlucHV0IHZhbHVlcyAqLworICAgIGludDMyX3QgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IHZhcmlhYmxlICovCisgICAgZmxvYXQzMl90ICpwWURhdGEgPSBTLT5wWURhdGE7ICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBvdXRwdXQgdGFibGUgKi8KKworICAgIC8qIENhbGN1bGF0aW9uIG9mIGluZGV4ICovCisgICAgaSA9IChpbnQzMl90KSAoKHggLSBTLT54MSkgLyB4U3BhY2luZyk7CisKKyAgICBpZihpIDwgMCkKKyAgICB7CisgICAgICAvKiBJbmlhdGlsaXplIG91dHB1dCBmb3IgYmVsb3cgc3BlY2lmaWVkIHJhbmdlIGFzIGxlYXN0IG91dHB1dCB2YWx1ZSBvZiB0YWJsZSAqLworICAgICAgeSA9IHBZRGF0YVswXTsKKyAgICB9CisgICAgZWxzZSBpZigodWludDMyX3QpaSA+PSBTLT5uVmFsdWVzKQorICAgIHsKKyAgICAgIC8qIEluaWF0aWxpemUgb3V0cHV0IGZvciBhYm92ZSBzcGVjaWZpZWQgcmFuZ2UgYXMgbGFzdCBvdXRwdXQgdmFsdWUgb2YgdGFibGUgKi8KKyAgICAgIHkgPSBwWURhdGFbUy0+blZhbHVlcyAtIDFdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogQ2FsY3VsYXRpb24gb2YgbmVhcmVzdCBpbnB1dCB2YWx1ZXMgKi8KKyAgICAgIHgwID0gUy0+eDEgKyAgaSAgICAgICogeFNwYWNpbmc7CisgICAgICB4MSA9IFMtPngxICsgKGkgKyAxKSAqIHhTcGFjaW5nOworCisgICAgICAvKiBSZWFkIG9mIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLworICAgICAgeTAgPSBwWURhdGFbaV07CisgICAgICB5MSA9IHBZRGF0YVtpICsgMV07CisKKyAgICAgIC8qIENhbGN1bGF0aW9uIG9mIG91dHB1dCAqLworICAgICAgeSA9IHkwICsgKHggLSB4MCkgKiAoKHkxIC0geTApIC8gKHgxIC0geDApKTsKKworICAgIH0KKworICAgIC8qIHJldHVybnMgb3V0cHV0IHZhbHVlICovCisgICAgcmV0dXJuICh5KTsKKyAgfQorCisKKyAgIC8qKgorICAgKgorICAgKiBAYnJpZWYgIFByb2Nlc3MgZnVuY3Rpb24gZm9yIHRoZSBRMzEgTGluZWFyIEludGVycG9sYXRpb24gRnVuY3Rpb24uCisgICAqIEBwYXJhbVtpbl0gcFlEYXRhICAgcG9pbnRlciB0byBRMzEgTGluZWFyIEludGVycG9sYXRpb24gdGFibGUKKyAgICogQHBhcmFtW2luXSB4ICAgICAgICBpbnB1dCBzYW1wbGUgdG8gcHJvY2VzcworICAgKiBAcGFyYW1baW5dIG5WYWx1ZXMgIG51bWJlciBvZiB0YWJsZSB2YWx1ZXMKKyAgICogQHJldHVybiB5IHByb2Nlc3NlZCBvdXRwdXQgc2FtcGxlLgorICAgKgorICAgKiBccGFyCisgICAqIElucHV0IHNhbXBsZSA8Y29kZT54PC9jb2RlPiBpcyBpbiAxMi4yMCBmb3JtYXQgd2hpY2ggY29udGFpbnMgMTIgYml0cyBmb3IgdGFibGUgaW5kZXggYW5kIDIwIGJpdHMgZm9yIGZyYWN0aW9uYWwgcGFydC4KKyAgICogVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCBtYXhpbXVtIG9mIHRhYmxlIHNpemUgMl4xMi4KKyAgICoKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSBxMzFfdCBhcm1fbGluZWFyX2ludGVycF9xMzEoCisgIHEzMV90ICogcFlEYXRhLAorICBxMzFfdCB4LAorICB1aW50MzJfdCBuVmFsdWVzKQorICB7CisgICAgcTMxX3QgeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3V0cHV0ICovCisgICAgcTMxX3QgeTAsIHkxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVhcmVzdCBvdXRwdXQgdmFsdWVzICovCisgICAgcTMxX3QgZnJhY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJhY3Rpb25hbCBwYXJ0ICovCisgICAgaW50MzJfdCBpbmRleDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5kZXggdG8gcmVhZCBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8KKworICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLworICAgIC8qIDEyIGJpdHMgZm9yIHRoZSB0YWJsZSBpbmRleCAqLworICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovCisgICAgaW5kZXggPSAoKHggJiAocTMxX3QpMHhGRkYwMDAwMCkgPj4gMjApOworCisgICAgaWYoaW5kZXggPj0gKGludDMyX3QpKG5WYWx1ZXMgLSAxKSkKKyAgICB7CisgICAgICByZXR1cm4gKHBZRGF0YVtuVmFsdWVzIC0gMV0pOworICAgIH0KKyAgICBlbHNlIGlmKGluZGV4IDwgMCkKKyAgICB7CisgICAgICByZXR1cm4gKHBZRGF0YVswXSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiAyMCBiaXRzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0ICovCisgICAgICAvKiBzaGlmdCBsZWZ0IGJ5IDExIHRvIGtlZXAgZnJhY3QgaW4gMS4zMSBmb3JtYXQgKi8KKyAgICAgIGZyYWN0ID0gKHggJiAweDAwMEZGRkZGKSA8PCAxMTsKKworICAgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4IGluIDEuMzEocTMxKSBmb3JtYXQgKi8KKyAgICAgIHkwID0gcFlEYXRhW2luZGV4XTsKKyAgICAgIHkxID0gcFlEYXRhW2luZGV4ICsgMV07CisKKyAgICAgIC8qIENhbGN1bGF0aW9uIG9mIHkwICogKDEtZnJhY3QpIGFuZCB5IGlzIGluIDIuMzAgZm9ybWF0ICovCisgICAgICB5ID0gKChxMzFfdCkgKChxNjNfdCkgeTAgKiAoMHg3RkZGRkZGRiAtIGZyYWN0KSA+PiAzMikpOworCisgICAgICAvKiBDYWxjdWxhdGlvbiBvZiB5MCAqICgxLWZyYWN0KSArIHkxICpmcmFjdCBhbmQgeSBpcyBpbiAyLjMwIGZvcm1hdCAqLworICAgICAgeSArPSAoKHEzMV90KSAoKChxNjNfdCkgeTEgKiBmcmFjdCkgPj4gMzIpKTsKKworICAgICAgLyogQ29udmVydCB5IHRvIDEuMzEgZm9ybWF0ICovCisgICAgICByZXR1cm4gKHkgPDwgMXUpOworICAgIH0KKyAgfQorCisKKyAgLyoqCisgICAqCisgICAqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIFExNSBMaW5lYXIgSW50ZXJwb2xhdGlvbiBGdW5jdGlvbi4KKyAgICogQHBhcmFtW2luXSBwWURhdGEgICBwb2ludGVyIHRvIFExNSBMaW5lYXIgSW50ZXJwb2xhdGlvbiB0YWJsZQorICAgKiBAcGFyYW1baW5dIHggICAgICAgIGlucHV0IHNhbXBsZSB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtpbl0gblZhbHVlcyAgbnVtYmVyIG9mIHRhYmxlIHZhbHVlcworICAgKiBAcmV0dXJuIHkgcHJvY2Vzc2VkIG91dHB1dCBzYW1wbGUuCisgICAqCisgICAqIFxwYXIKKyAgICogSW5wdXQgc2FtcGxlIDxjb2RlPng8L2NvZGU+IGlzIGluIDEyLjIwIGZvcm1hdCB3aGljaCBjb250YWlucyAxMiBiaXRzIGZvciB0YWJsZSBpbmRleCBhbmQgMjAgYml0cyBmb3IgZnJhY3Rpb25hbCBwYXJ0LgorICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBzdXBwb3J0IG1heGltdW0gb2YgdGFibGUgc2l6ZSAyXjEyLgorICAgKgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHExNV90IGFybV9saW5lYXJfaW50ZXJwX3ExNSgKKyAgcTE1X3QgKiBwWURhdGEsCisgIHEzMV90IHgsCisgIHVpbnQzMl90IG5WYWx1ZXMpCisgIHsKKyAgICBxNjNfdCB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgKi8KKyAgICBxMTVfdCB5MCwgeTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8KKyAgICBxMzFfdCBmcmFjdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcmFjdGlvbmFsIHBhcnQgKi8KKyAgICBpbnQzMl90IGluZGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmRleCB0byByZWFkIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLworCisgICAgLyogSW5wdXQgaXMgaW4gMTIuMjAgZm9ybWF0ICovCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8KKyAgICBpbmRleCA9ICgoeCAmIChpbnQzMl90KTB4RkZGMDAwMDApID4+IDIwKTsKKworICAgIGlmKGluZGV4ID49IChpbnQzMl90KShuVmFsdWVzIC0gMSkpCisgICAgeworICAgICAgcmV0dXJuIChwWURhdGFbblZhbHVlcyAtIDFdKTsKKyAgICB9CisgICAgZWxzZSBpZihpbmRleCA8IDApCisgICAgeworICAgICAgcmV0dXJuIChwWURhdGFbMF0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLworICAgICAgLyogZnJhY3QgaXMgaW4gMTIuMjAgZm9ybWF0ICovCisgICAgICBmcmFjdCA9ICh4ICYgMHgwMDBGRkZGRik7CisKKyAgICAgIC8qIFJlYWQgdHdvIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyBmcm9tIHRoZSBpbmRleCAqLworICAgICAgeTAgPSBwWURhdGFbaW5kZXhdOworICAgICAgeTEgPSBwWURhdGFbaW5kZXggKyAxXTsKKworICAgICAgLyogQ2FsY3VsYXRpb24gb2YgeTAgKiAoMS1mcmFjdCkgYW5kIHkgaXMgaW4gMTMuMzUgZm9ybWF0ICovCisgICAgICB5ID0gKChxNjNfdCkgeTAgKiAoMHhGRkZGRiAtIGZyYWN0KSk7CisKKyAgICAgIC8qIENhbGN1bGF0aW9uIG9mICh5MCAqICgxLWZyYWN0KSArIHkxICogZnJhY3QpIGFuZCB5IGlzIGluIDEzLjM1IGZvcm1hdCAqLworICAgICAgeSArPSAoKHE2M190KSB5MSAqIChmcmFjdCkpOworCisgICAgICAvKiBjb252ZXJ0IHkgdG8gMS4xNSBmb3JtYXQgKi8KKyAgICAgIHJldHVybiAocTE1X3QpICh5ID4+IDIwKTsKKyAgICB9CisgIH0KKworCisgIC8qKgorICAgKgorICAgKiBAYnJpZWYgIFByb2Nlc3MgZnVuY3Rpb24gZm9yIHRoZSBRNyBMaW5lYXIgSW50ZXJwb2xhdGlvbiBGdW5jdGlvbi4KKyAgICogQHBhcmFtW2luXSBwWURhdGEgICBwb2ludGVyIHRvIFE3IExpbmVhciBJbnRlcnBvbGF0aW9uIHRhYmxlCisgICAqIEBwYXJhbVtpbl0geCAgICAgICAgaW5wdXQgc2FtcGxlIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW2luXSBuVmFsdWVzICBudW1iZXIgb2YgdGFibGUgdmFsdWVzCisgICAqIEByZXR1cm4geSBwcm9jZXNzZWQgb3V0cHV0IHNhbXBsZS4KKyAgICoKKyAgICogXHBhcgorICAgKiBJbnB1dCBzYW1wbGUgPGNvZGU+eDwvY29kZT4gaXMgaW4gMTIuMjAgZm9ybWF0IHdoaWNoIGNvbnRhaW5zIDEyIGJpdHMgZm9yIHRhYmxlIGluZGV4IGFuZCAyMCBiaXRzIGZvciBmcmFjdGlvbmFsIHBhcnQuCisgICAqIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgbWF4aW11bSBvZiB0YWJsZSBzaXplIDJeMTIuCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgcTdfdCBhcm1fbGluZWFyX2ludGVycF9xNygKKyAgcTdfdCAqIHBZRGF0YSwKKyAgcTMxX3QgeCwKKyAgdWludDMyX3QgblZhbHVlcykKKyAgeworICAgIHEzMV90IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG91dHB1dCAqLworICAgIHE3X3QgeTAsIHkxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLworICAgIHEzMV90IGZyYWN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyYWN0aW9uYWwgcGFydCAqLworICAgIHVpbnQzMl90IGluZGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IHRvIHJlYWQgbmVhcmVzdCBvdXRwdXQgdmFsdWVzICovCisKKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8KKyAgICAvKiBJbmRleCB2YWx1ZSBjYWxjdWxhdGlvbiAqLworICAgIGlmICh4IDwgMCkKKyAgICB7CisgICAgICByZXR1cm4gKHBZRGF0YVswXSk7CisgICAgfQorICAgIGluZGV4ID0gKHggPj4gMjApICYgMHhmZmY7CisKKyAgICBpZihpbmRleCA+PSAoblZhbHVlcyAtIDEpKQorICAgIHsKKyAgICAgIHJldHVybiAocFlEYXRhW25WYWx1ZXMgLSAxXSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiAyMCBiaXRzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0ICovCisgICAgICAvKiBmcmFjdCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8KKyAgICAgIGZyYWN0ID0gKHggJiAweDAwMEZGRkZGKTsKKworICAgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4IGFuZCBhcmUgaW4gMS43KHE3KSBmb3JtYXQgKi8KKyAgICAgIHkwID0gcFlEYXRhW2luZGV4XTsKKyAgICAgIHkxID0gcFlEYXRhW2luZGV4ICsgMV07CisKKyAgICAgIC8qIENhbGN1bGF0aW9uIG9mIHkwICogKDEtZnJhY3QgKSBhbmQgeSBpcyBpbiAxMy4yNyhxMjcpIGZvcm1hdCAqLworICAgICAgeSA9ICgoeTAgKiAoMHhGRkZGRiAtIGZyYWN0KSkpOworCisgICAgICAvKiBDYWxjdWxhdGlvbiBvZiB5MSAqIGZyYWN0ICsgeTAgKiAoMS1mcmFjdCkgYW5kIHkgaXMgaW4gMTMuMjcocTI3KSBmb3JtYXQgKi8KKyAgICAgIHkgKz0gKHkxICogZnJhY3QpOworCisgICAgICAvKiBjb252ZXJ0IHkgdG8gMS43KHE3KSBmb3JtYXQgKi8KKyAgICAgIHJldHVybiAocTdfdCkgKHkgPj4gMjApOworICAgICB9CisgIH0KKworICAvKioKKyAgICogQH0gZW5kIG9mIExpbmVhckludGVycG9sYXRlIGdyb3VwCisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgIEZhc3QgYXBwcm94aW1hdGlvbiB0byB0aGUgdHJpZ29ub21ldHJpYyBzaW5lIGZ1bmN0aW9uIGZvciBmbG9hdGluZy1wb2ludCBkYXRhLgorICAgKiBAcGFyYW1baW5dIHggIGlucHV0IHZhbHVlIGluIHJhZGlhbnMuCisgICAqIEByZXR1cm4gIHNpbih4KS4KKyAgICovCisgIGZsb2F0MzJfdCBhcm1fc2luX2YzMigKKyAgZmxvYXQzMl90IHgpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgRmFzdCBhcHByb3hpbWF0aW9uIHRvIHRoZSB0cmlnb25vbWV0cmljIHNpbmUgZnVuY3Rpb24gZm9yIFEzMSBkYXRhLgorICAgKiBAcGFyYW1baW5dIHggIFNjYWxlZCBpbnB1dCB2YWx1ZSBpbiByYWRpYW5zLgorICAgKiBAcmV0dXJuICBzaW4oeCkuCisgICAqLworICBxMzFfdCBhcm1fc2luX3EzMSgKKyAgcTMxX3QgeCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBGYXN0IGFwcHJveGltYXRpb24gdG8gdGhlIHRyaWdvbm9tZXRyaWMgc2luZSBmdW5jdGlvbiBmb3IgUTE1IGRhdGEuCisgICAqIEBwYXJhbVtpbl0geCAgU2NhbGVkIGlucHV0IHZhbHVlIGluIHJhZGlhbnMuCisgICAqIEByZXR1cm4gIHNpbih4KS4KKyAgICovCisgIHExNV90IGFybV9zaW5fcTE1KAorICBxMTVfdCB4KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZhc3QgYXBwcm94aW1hdGlvbiB0byB0aGUgdHJpZ29ub21ldHJpYyBjb3NpbmUgZnVuY3Rpb24gZm9yIGZsb2F0aW5nLXBvaW50IGRhdGEuCisgICAqIEBwYXJhbVtpbl0geCAgaW5wdXQgdmFsdWUgaW4gcmFkaWFucy4KKyAgICogQHJldHVybiAgY29zKHgpLgorICAgKi8KKyAgZmxvYXQzMl90IGFybV9jb3NfZjMyKAorICBmbG9hdDMyX3QgeCk7CisKKworICAvKioKKyAgICogQGJyaWVmIEZhc3QgYXBwcm94aW1hdGlvbiB0byB0aGUgdHJpZ29ub21ldHJpYyBjb3NpbmUgZnVuY3Rpb24gZm9yIFEzMSBkYXRhLgorICAgKiBAcGFyYW1baW5dIHggIFNjYWxlZCBpbnB1dCB2YWx1ZSBpbiByYWRpYW5zLgorICAgKiBAcmV0dXJuICBjb3MoeCkuCisgICAqLworICBxMzFfdCBhcm1fY29zX3EzMSgKKyAgcTMxX3QgeCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBGYXN0IGFwcHJveGltYXRpb24gdG8gdGhlIHRyaWdvbm9tZXRyaWMgY29zaW5lIGZ1bmN0aW9uIGZvciBRMTUgZGF0YS4KKyAgICogQHBhcmFtW2luXSB4ICBTY2FsZWQgaW5wdXQgdmFsdWUgaW4gcmFkaWFucy4KKyAgICogQHJldHVybiAgY29zKHgpLgorICAgKi8KKyAgcTE1X3QgYXJtX2Nvc19xMTUoCisgIHExNV90IHgpOworCisKKyAgLyoqCisgICAqIEBpbmdyb3VwIGdyb3VwRmFzdE1hdGgKKyAgICovCisKKworICAvKioKKyAgICogQGRlZmdyb3VwIFNRUlQgU3F1YXJlIFJvb3QKKyAgICoKKyAgICogQ29tcHV0ZXMgdGhlIHNxdWFyZSByb290IG9mIGEgbnVtYmVyLgorICAgKiBUaGVyZSBhcmUgc2VwYXJhdGUgZnVuY3Rpb25zIGZvciBRMTUsIFEzMSwgYW5kIGZsb2F0aW5nLXBvaW50IGRhdGEgdHlwZXMuCisgICAqIFRoZSBzcXVhcmUgcm9vdCBmdW5jdGlvbiBpcyBjb21wdXRlZCB1c2luZyB0aGUgTmV3dG9uLVJhcGhzb24gYWxnb3JpdGhtLgorICAgKiBUaGlzIGlzIGFuIGl0ZXJhdGl2ZSBhbGdvcml0aG0gb2YgdGhlIGZvcm06CisgICAqIDxwcmU+CisgICAqICAgICAgeDEgPSB4MCAtIGYoeDApL2YnKHgwKQorICAgKiA8L3ByZT4KKyAgICogd2hlcmUgPGNvZGU+eDE8L2NvZGU+IGlzIHRoZSBjdXJyZW50IGVzdGltYXRlLAorICAgKiA8Y29kZT54MDwvY29kZT4gaXMgdGhlIHByZXZpb3VzIGVzdGltYXRlLCBhbmQKKyAgICogPGNvZGU+ZicoeDApPC9jb2RlPiBpcyB0aGUgZGVyaXZhdGl2ZSBvZiA8Y29kZT5mKCk8L2NvZGU+IGV2YWx1YXRlZCBhdCA8Y29kZT54MDwvY29kZT4uCisgICAqIEZvciB0aGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24sIHRoZSBhbGdvcml0aG0gcmVkdWNlcyB0bzoKKyAgICogPHByZT4KKyAgICogICAgIHgwID0gaW4vMiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5pdGlhbCBndWVzc10KKyAgICogICAgIHgxID0gMS8yICogKCB4MCArIGluIC8geDApICAgICAgICBbZWFjaCBpdGVyYXRpb25dCisgICAqIDwvcHJlPgorICAgKi8KKworCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBTUVJUCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IHNxdWFyZSByb290IGZ1bmN0aW9uLgorICAgKiBAcGFyYW1baW5dICBpbiAgICBpbnB1dCB2YWx1ZS4KKyAgICogQHBhcmFtW291dF0gcE91dCAgc3F1YXJlIHJvb3Qgb2YgaW5wdXQgdmFsdWUuCisgICAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbnB1dCB2YWx1ZSBpcyBwb3NpdGl2ZSB2YWx1ZSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZgorICAgKiA8Y29kZT5pbjwvY29kZT4gaXMgbmVnYXRpdmUgdmFsdWUgYW5kIHJldHVybnMgemVybyBvdXRwdXQgZm9yIG5lZ2F0aXZlIHZhbHVlcy4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSBhcm1fc3RhdHVzIGFybV9zcXJ0X2YzMigKKyAgZmxvYXQzMl90IGluLAorICBmbG9hdDMyX3QgKiBwT3V0KQorICB7CisgICAgaWYoaW4gPj0gMC4wZikKKyAgICB7CisKKyNpZiAgIChfX0ZQVV9VU0VEID09IDEpICYmIGRlZmluZWQgKCBfX0NDX0FSTSAgICkKKyAgICAgICpwT3V0ID0gX19zcXJ0Zihpbik7CisjZWxpZiAoX19GUFVfVVNFRCA9PSAxKSAmJiAoZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkpCisgICAgICAqcE91dCA9IF9fYnVpbHRpbl9zcXJ0Zihpbik7CisjZWxpZiAoX19GUFVfVVNFRCA9PSAxKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorICAgICAgKnBPdXQgPSBfX2J1aWx0aW5fc3FydGYoaW4pOworI2VsaWYgKF9fRlBVX1VTRUQgPT0gMSkgJiYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKSAmJiAoX19WRVJfXyA+PSA2MDQwMDAwKQorICAgICAgX19BU00oIlZTUVJULkYzMiAlMCwlMSIgOiAiPXQiKCpwT3V0KSA6ICJ0IihpbikpOworI2Vsc2UKKyAgICAgICpwT3V0ID0gc3FydGYoaW4pOworI2VuZGlmCisKKyAgICAgIHJldHVybiAoQVJNX01BVEhfU1VDQ0VTUyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAqcE91dCA9IDAuMGY7CisgICAgICByZXR1cm4gKEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SKTsKKyAgICB9CisgIH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgUTMxIHNxdWFyZSByb290IGZ1bmN0aW9uLgorICAgKiBAcGFyYW1baW5dICBpbiAgICBpbnB1dCB2YWx1ZS4gIFRoZSByYW5nZSBvZiB0aGUgaW5wdXQgdmFsdWUgaXMgWzAgKzEpIG9yIDB4MDAwMDAwMDAgdG8gMHg3RkZGRkZGRi4KKyAgICogQHBhcmFtW291dF0gcE91dCAgc3F1YXJlIHJvb3Qgb2YgaW5wdXQgdmFsdWUuCisgICAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbnB1dCB2YWx1ZSBpcyBwb3NpdGl2ZSB2YWx1ZSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZgorICAgKiA8Y29kZT5pbjwvY29kZT4gaXMgbmVnYXRpdmUgdmFsdWUgYW5kIHJldHVybnMgemVybyBvdXRwdXQgZm9yIG5lZ2F0aXZlIHZhbHVlcy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX3NxcnRfcTMxKAorICBxMzFfdCBpbiwKKyAgcTMxX3QgKiBwT3V0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFExNSBzcXVhcmUgcm9vdCBmdW5jdGlvbi4KKyAgICogQHBhcmFtW2luXSAgaW4gICAgaW5wdXQgdmFsdWUuICBUaGUgcmFuZ2Ugb2YgdGhlIGlucHV0IHZhbHVlIGlzIFswICsxKSBvciAweDAwMDAgdG8gMHg3RkZGLgorICAgKiBAcGFyYW1bb3V0XSBwT3V0ICBzcXVhcmUgcm9vdCBvZiBpbnB1dCB2YWx1ZS4KKyAgICogQHJldHVybiBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGlucHV0IHZhbHVlIGlzIHBvc2l0aXZlIHZhbHVlIG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmCisgICAqIDxjb2RlPmluPC9jb2RlPiBpcyBuZWdhdGl2ZSB2YWx1ZSBhbmQgcmV0dXJucyB6ZXJvIG91dHB1dCBmb3IgbmVnYXRpdmUgdmFsdWVzLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fc3FydF9xMTUoCisgIHExNV90IGluLAorICBxMTVfdCAqIHBPdXQpOworCisgIC8qKgorICAgKiBAfSBlbmQgb2YgU1FSVCBncm91cAorICAgKi8KKworCisgIC8qKgorICAgKiBAYnJpZWYgZmxvYXRpbmctcG9pbnQgQ2lyY3VsYXIgd3JpdGUgZnVuY3Rpb24uCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2lyY3VsYXJXcml0ZV9mMzIoCisgIGludDMyX3QgKiBjaXJjQnVmZmVyLAorICBpbnQzMl90IEwsCisgIHVpbnQxNl90ICogd3JpdGVPZmZzZXQsCisgIGludDMyX3QgYnVmZmVySW5jLAorICBjb25zdCBpbnQzMl90ICogc3JjLAorICBpbnQzMl90IHNyY0luYywKKyAgdWludDMyX3QgYmxvY2tTaXplKQorICB7CisgICAgdWludDMyX3QgaSA9IDB1OworICAgIGludDMyX3Qgd09mZnNldDsKKworICAgIC8qIENvcHkgdGhlIHZhbHVlIG9mIEluZGV4IHBvaW50ZXIgdGhhdCBwb2ludHMKKyAgICAgKiB0byB0aGUgY3VycmVudCBsb2NhdGlvbiB3aGVyZSB0aGUgaW5wdXQgc2FtcGxlcyB0byBiZSBjb3BpZWQgKi8KKyAgICB3T2Zmc2V0ID0gKndyaXRlT2Zmc2V0OworCisgICAgLyogTG9vcCBvdmVyIHRoZSBibG9ja1NpemUgKi8KKyAgICBpID0gYmxvY2tTaXplOworCisgICAgd2hpbGUoaSA+IDB1KQorICAgIHsKKyAgICAgIC8qIGNvcHkgdGhlIGlucHV0IHNhbXBsZSB0byB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisgICAgICBjaXJjQnVmZmVyW3dPZmZzZXRdID0gKnNyYzsKKworICAgICAgLyogVXBkYXRlIHRoZSBpbnB1dCBwb2ludGVyICovCisgICAgICBzcmMgKz0gc3JjSW5jOworCisgICAgICAvKiBDaXJjdWxhcmx5IHVwZGF0ZSB3T2Zmc2V0LiAgV2F0Y2ggb3V0IGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWUgKi8KKyAgICAgIHdPZmZzZXQgKz0gYnVmZmVySW5jOworICAgICAgaWYod09mZnNldCA+PSBMKQorICAgICAgICB3T2Zmc2V0IC09IEw7CisKKyAgICAgIC8qIERlY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovCisgICAgICBpLS07CisgICAgfQorCisgICAgLyogVXBkYXRlIHRoZSBpbmRleCBwb2ludGVyICovCisgICAgKndyaXRlT2Zmc2V0ID0gKHVpbnQxNl90KXdPZmZzZXQ7CisgIH0KKworCisKKyAgLyoqCisgICAqIEBicmllZiBmbG9hdGluZy1wb2ludCBDaXJjdWxhciBSZWFkIGZ1bmN0aW9uLgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2NpcmN1bGFyUmVhZF9mMzIoCisgIGludDMyX3QgKiBjaXJjQnVmZmVyLAorICBpbnQzMl90IEwsCisgIGludDMyX3QgKiByZWFkT2Zmc2V0LAorICBpbnQzMl90IGJ1ZmZlckluYywKKyAgaW50MzJfdCAqIGRzdCwKKyAgaW50MzJfdCAqIGRzdF9iYXNlLAorICBpbnQzMl90IGRzdF9sZW5ndGgsCisgIGludDMyX3QgZHN0SW5jLAorICB1aW50MzJfdCBibG9ja1NpemUpCisgIHsKKyAgICB1aW50MzJfdCBpID0gMHU7CisgICAgaW50MzJfdCByT2Zmc2V0LCBkc3RfZW5kOworCisgICAgLyogQ29weSB0aGUgdmFsdWUgb2YgSW5kZXggcG9pbnRlciB0aGF0IHBvaW50cworICAgICAqIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uIGZyb20gd2hlcmUgdGhlIGlucHV0IHNhbXBsZXMgdG8gYmUgcmVhZCAqLworICAgIHJPZmZzZXQgPSAqcmVhZE9mZnNldDsKKyAgICBkc3RfZW5kID0gKGludDMyX3QpIChkc3RfYmFzZSArIGRzdF9sZW5ndGgpOworCisgICAgLyogTG9vcCBvdmVyIHRoZSBibG9ja1NpemUgKi8KKyAgICBpID0gYmxvY2tTaXplOworCisgICAgd2hpbGUoaSA+IDB1KQorICAgIHsKKyAgICAgIC8qIGNvcHkgdGhlIHNhbXBsZSBmcm9tIHRoZSBjaXJjdWxhciBidWZmZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAqLworICAgICAgKmRzdCA9IGNpcmNCdWZmZXJbck9mZnNldF07CisKKyAgICAgIC8qIFVwZGF0ZSB0aGUgaW5wdXQgcG9pbnRlciAqLworICAgICAgZHN0ICs9IGRzdEluYzsKKworICAgICAgaWYoZHN0ID09IChpbnQzMl90ICopIGRzdF9lbmQpCisgICAgICB7CisgICAgICAgIGRzdCA9IGRzdF9iYXNlOworICAgICAgfQorCisgICAgICAvKiBDaXJjdWxhcmx5IHVwZGF0ZSByT2Zmc2V0LiAgV2F0Y2ggb3V0IGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWUgICovCisgICAgICByT2Zmc2V0ICs9IGJ1ZmZlckluYzsKKworICAgICAgaWYock9mZnNldCA+PSBMKQorICAgICAgeworICAgICAgICByT2Zmc2V0IC09IEw7CisgICAgICB9CisKKyAgICAgIC8qIERlY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovCisgICAgICBpLS07CisgICAgfQorCisgICAgLyogVXBkYXRlIHRoZSBpbmRleCBwb2ludGVyICovCisgICAgKnJlYWRPZmZzZXQgPSByT2Zmc2V0OworICB9CisKKworICAvKioKKyAgICogQGJyaWVmIFExNSBDaXJjdWxhciB3cml0ZSBmdW5jdGlvbi4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9jaXJjdWxhcldyaXRlX3ExNSgKKyAgcTE1X3QgKiBjaXJjQnVmZmVyLAorICBpbnQzMl90IEwsCisgIHVpbnQxNl90ICogd3JpdGVPZmZzZXQsCisgIGludDMyX3QgYnVmZmVySW5jLAorICBjb25zdCBxMTVfdCAqIHNyYywKKyAgaW50MzJfdCBzcmNJbmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSkKKyAgeworICAgIHVpbnQzMl90IGkgPSAwdTsKKyAgICBpbnQzMl90IHdPZmZzZXQ7CisKKyAgICAvKiBDb3B5IHRoZSB2YWx1ZSBvZiBJbmRleCBwb2ludGVyIHRoYXQgcG9pbnRzCisgICAgICogdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gd2hlcmUgdGhlIGlucHV0IHNhbXBsZXMgdG8gYmUgY29waWVkICovCisgICAgd09mZnNldCA9ICp3cml0ZU9mZnNldDsKKworICAgIC8qIExvb3Agb3ZlciB0aGUgYmxvY2tTaXplICovCisgICAgaSA9IGJsb2NrU2l6ZTsKKworICAgIHdoaWxlKGkgPiAwdSkKKyAgICB7CisgICAgICAvKiBjb3B5IHRoZSBpbnB1dCBzYW1wbGUgdG8gdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworICAgICAgY2lyY0J1ZmZlclt3T2Zmc2V0XSA9ICpzcmM7CisKKyAgICAgIC8qIFVwZGF0ZSB0aGUgaW5wdXQgcG9pbnRlciAqLworICAgICAgc3JjICs9IHNyY0luYzsKKworICAgICAgLyogQ2lyY3VsYXJseSB1cGRhdGUgd09mZnNldC4gIFdhdGNoIG91dCBmb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlICovCisgICAgICB3T2Zmc2V0ICs9IGJ1ZmZlckluYzsKKyAgICAgIGlmKHdPZmZzZXQgPj0gTCkKKyAgICAgICAgd09mZnNldCAtPSBMOworCisgICAgICAvKiBEZWNyZW1lbnQgdGhlIGxvb3AgY291bnRlciAqLworICAgICAgaS0tOworICAgIH0KKworICAgIC8qIFVwZGF0ZSB0aGUgaW5kZXggcG9pbnRlciAqLworICAgICp3cml0ZU9mZnNldCA9ICh1aW50MTZfdCl3T2Zmc2V0OworICB9CisKKworICAvKioKKyAgICogQGJyaWVmIFExNSBDaXJjdWxhciBSZWFkIGZ1bmN0aW9uLgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2NpcmN1bGFyUmVhZF9xMTUoCisgIHExNV90ICogY2lyY0J1ZmZlciwKKyAgaW50MzJfdCBMLAorICBpbnQzMl90ICogcmVhZE9mZnNldCwKKyAgaW50MzJfdCBidWZmZXJJbmMsCisgIHExNV90ICogZHN0LAorICBxMTVfdCAqIGRzdF9iYXNlLAorICBpbnQzMl90IGRzdF9sZW5ndGgsCisgIGludDMyX3QgZHN0SW5jLAorICB1aW50MzJfdCBibG9ja1NpemUpCisgIHsKKyAgICB1aW50MzJfdCBpID0gMDsKKyAgICBpbnQzMl90IHJPZmZzZXQsIGRzdF9lbmQ7CisKKyAgICAvKiBDb3B5IHRoZSB2YWx1ZSBvZiBJbmRleCBwb2ludGVyIHRoYXQgcG9pbnRzCisgICAgICogdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gZnJvbSB3aGVyZSB0aGUgaW5wdXQgc2FtcGxlcyB0byBiZSByZWFkICovCisgICAgck9mZnNldCA9ICpyZWFkT2Zmc2V0OworCisgICAgZHN0X2VuZCA9IChpbnQzMl90KSAoZHN0X2Jhc2UgKyBkc3RfbGVuZ3RoKTsKKworICAgIC8qIExvb3Agb3ZlciB0aGUgYmxvY2tTaXplICovCisgICAgaSA9IGJsb2NrU2l6ZTsKKworICAgIHdoaWxlKGkgPiAwdSkKKyAgICB7CisgICAgICAvKiBjb3B5IHRoZSBzYW1wbGUgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgKi8KKyAgICAgICpkc3QgPSBjaXJjQnVmZmVyW3JPZmZzZXRdOworCisgICAgICAvKiBVcGRhdGUgdGhlIGlucHV0IHBvaW50ZXIgKi8KKyAgICAgIGRzdCArPSBkc3RJbmM7CisKKyAgICAgIGlmKGRzdCA9PSAocTE1X3QgKikgZHN0X2VuZCkKKyAgICAgIHsKKyAgICAgICAgZHN0ID0gZHN0X2Jhc2U7CisgICAgICB9CisKKyAgICAgIC8qIENpcmN1bGFybHkgdXBkYXRlIHdPZmZzZXQuICBXYXRjaCBvdXQgZm9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZSAqLworICAgICAgck9mZnNldCArPSBidWZmZXJJbmM7CisKKyAgICAgIGlmKHJPZmZzZXQgPj0gTCkKKyAgICAgIHsKKyAgICAgICAgck9mZnNldCAtPSBMOworICAgICAgfQorCisgICAgICAvKiBEZWNyZW1lbnQgdGhlIGxvb3AgY291bnRlciAqLworICAgICAgaS0tOworICAgIH0KKworICAgIC8qIFVwZGF0ZSB0aGUgaW5kZXggcG9pbnRlciAqLworICAgICpyZWFkT2Zmc2V0ID0gck9mZnNldDsKKyAgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBRNyBDaXJjdWxhciB3cml0ZSBmdW5jdGlvbi4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9jaXJjdWxhcldyaXRlX3E3KAorICBxN190ICogY2lyY0J1ZmZlciwKKyAgaW50MzJfdCBMLAorICB1aW50MTZfdCAqIHdyaXRlT2Zmc2V0LAorICBpbnQzMl90IGJ1ZmZlckluYywKKyAgY29uc3QgcTdfdCAqIHNyYywKKyAgaW50MzJfdCBzcmNJbmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSkKKyAgeworICAgIHVpbnQzMl90IGkgPSAwdTsKKyAgICBpbnQzMl90IHdPZmZzZXQ7CisKKyAgICAvKiBDb3B5IHRoZSB2YWx1ZSBvZiBJbmRleCBwb2ludGVyIHRoYXQgcG9pbnRzCisgICAgICogdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gd2hlcmUgdGhlIGlucHV0IHNhbXBsZXMgdG8gYmUgY29waWVkICovCisgICAgd09mZnNldCA9ICp3cml0ZU9mZnNldDsKKworICAgIC8qIExvb3Agb3ZlciB0aGUgYmxvY2tTaXplICovCisgICAgaSA9IGJsb2NrU2l6ZTsKKworICAgIHdoaWxlKGkgPiAwdSkKKyAgICB7CisgICAgICAvKiBjb3B5IHRoZSBpbnB1dCBzYW1wbGUgdG8gdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworICAgICAgY2lyY0J1ZmZlclt3T2Zmc2V0XSA9ICpzcmM7CisKKyAgICAgIC8qIFVwZGF0ZSB0aGUgaW5wdXQgcG9pbnRlciAqLworICAgICAgc3JjICs9IHNyY0luYzsKKworICAgICAgLyogQ2lyY3VsYXJseSB1cGRhdGUgd09mZnNldC4gIFdhdGNoIG91dCBmb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlICovCisgICAgICB3T2Zmc2V0ICs9IGJ1ZmZlckluYzsKKyAgICAgIGlmKHdPZmZzZXQgPj0gTCkKKyAgICAgICAgd09mZnNldCAtPSBMOworCisgICAgICAvKiBEZWNyZW1lbnQgdGhlIGxvb3AgY291bnRlciAqLworICAgICAgaS0tOworICAgIH0KKworICAgIC8qIFVwZGF0ZSB0aGUgaW5kZXggcG9pbnRlciAqLworICAgICp3cml0ZU9mZnNldCA9ICh1aW50MTZfdCl3T2Zmc2V0OworICB9CisKKworICAvKioKKyAgICogQGJyaWVmIFE3IENpcmN1bGFyIFJlYWQgZnVuY3Rpb24uCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2lyY3VsYXJSZWFkX3E3KAorICBxN190ICogY2lyY0J1ZmZlciwKKyAgaW50MzJfdCBMLAorICBpbnQzMl90ICogcmVhZE9mZnNldCwKKyAgaW50MzJfdCBidWZmZXJJbmMsCisgIHE3X3QgKiBkc3QsCisgIHE3X3QgKiBkc3RfYmFzZSwKKyAgaW50MzJfdCBkc3RfbGVuZ3RoLAorICBpbnQzMl90IGRzdEluYywKKyAgdWludDMyX3QgYmxvY2tTaXplKQorICB7CisgICAgdWludDMyX3QgaSA9IDA7CisgICAgaW50MzJfdCByT2Zmc2V0LCBkc3RfZW5kOworCisgICAgLyogQ29weSB0aGUgdmFsdWUgb2YgSW5kZXggcG9pbnRlciB0aGF0IHBvaW50cworICAgICAqIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uIGZyb20gd2hlcmUgdGhlIGlucHV0IHNhbXBsZXMgdG8gYmUgcmVhZCAqLworICAgIHJPZmZzZXQgPSAqcmVhZE9mZnNldDsKKworICAgIGRzdF9lbmQgPSAoaW50MzJfdCkgKGRzdF9iYXNlICsgZHN0X2xlbmd0aCk7CisKKyAgICAvKiBMb29wIG92ZXIgdGhlIGJsb2NrU2l6ZSAqLworICAgIGkgPSBibG9ja1NpemU7CisKKyAgICB3aGlsZShpID4gMHUpCisgICAgeworICAgICAgLyogY29weSB0aGUgc2FtcGxlIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciB0byB0aGUgZGVzdGluYXRpb24gYnVmZmVyICovCisgICAgICAqZHN0ID0gY2lyY0J1ZmZlcltyT2Zmc2V0XTsKKworICAgICAgLyogVXBkYXRlIHRoZSBpbnB1dCBwb2ludGVyICovCisgICAgICBkc3QgKz0gZHN0SW5jOworCisgICAgICBpZihkc3QgPT0gKHE3X3QgKikgZHN0X2VuZCkKKyAgICAgIHsKKyAgICAgICAgZHN0ID0gZHN0X2Jhc2U7CisgICAgICB9CisKKyAgICAgIC8qIENpcmN1bGFybHkgdXBkYXRlIHJPZmZzZXQuICBXYXRjaCBvdXQgZm9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZSAqLworICAgICAgck9mZnNldCArPSBidWZmZXJJbmM7CisKKyAgICAgIGlmKHJPZmZzZXQgPj0gTCkKKyAgICAgIHsKKyAgICAgICAgck9mZnNldCAtPSBMOworICAgICAgfQorCisgICAgICAvKiBEZWNyZW1lbnQgdGhlIGxvb3AgY291bnRlciAqLworICAgICAgaS0tOworICAgIH0KKworICAgIC8qIFVwZGF0ZSB0aGUgaW5kZXggcG9pbnRlciAqLworICAgICpyZWFkT2Zmc2V0ID0gck9mZnNldDsKKyAgfQorCisKKyAgLyoqCisgICAqIEBicmllZiAgU3VtIG9mIHRoZSBzcXVhcmVzIG9mIHRoZSBlbGVtZW50cyBvZiBhIFEzMSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fcG93ZXJfcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTYzX3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFN1bSBvZiB0aGUgc3F1YXJlcyBvZiB0aGUgZWxlbWVudHMgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fcG93ZXJfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIGZsb2F0MzJfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgU3VtIG9mIHRoZSBzcXVhcmVzIG9mIHRoZSBlbGVtZW50cyBvZiBhIFExNSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fcG93ZXJfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTYzX3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFN1bSBvZiB0aGUgc3F1YXJlcyBvZiB0aGUgZWxlbWVudHMgb2YgYSBRNyB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fcG93ZXJfcTcoCisgIHE3X3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHEzMV90ICogcFJlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBNZWFuIHZhbHVlIG9mIGEgUTcgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4KKyAgICovCisgIHZvaWQgYXJtX21lYW5fcTcoCisgIHE3X3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHE3X3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIE1lYW4gdmFsdWUgb2YgYSBRMTUgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4KKyAgICovCisgIHZvaWQgYXJtX21lYW5fcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTE1X3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIE1lYW4gdmFsdWUgb2YgYSBRMzEgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4KKyAgICovCisgIHZvaWQgYXJtX21lYW5fcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTMxX3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIE1lYW4gdmFsdWUgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fbWVhbl9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgZmxvYXQzMl90ICogcFJlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBWYXJpYW5jZSBvZiB0aGUgZWxlbWVudHMgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fdmFyX2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBmbG9hdDMyX3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFZhcmlhbmNlIG9mIHRoZSBlbGVtZW50cyBvZiBhIFEzMSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fdmFyX3EzMSgKKyAgcTMxX3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHEzMV90ICogcFJlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBWYXJpYW5jZSBvZiB0aGUgZWxlbWVudHMgb2YgYSBRMTUgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4KKyAgICovCisgIHZvaWQgYXJtX3Zhcl9xMTUoCisgIHExNV90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxMTVfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUm9vdCBNZWFuIFNxdWFyZSBvZiB0aGUgZWxlbWVudHMgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fcm1zX2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBmbG9hdDMyX3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFJvb3QgTWVhbiBTcXVhcmUgb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTMxIHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV9ybXNfcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTMxX3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFJvb3QgTWVhbiBTcXVhcmUgb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTE1IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV9ybXNfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTE1X3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgZWxlbWVudHMgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fc3RkX2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBmbG9hdDMyX3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgZWxlbWVudHMgb2YgYSBRMzEgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4KKyAgICovCisgIHZvaWQgYXJtX3N0ZF9xMzEoCisgIHEzMV90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxMzFfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgU3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBlbGVtZW50cyBvZiBhIFExNSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fc3RkX3ExNSgKKyAgcTE1X3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHExNV90ICogcFJlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBjb21wbGV4IG1hZ25pdHVkZQorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgcmVhbCBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gdGhlIGlucHV0IHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfbWFnX2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgbnVtU2FtcGxlcyk7CisKKworICAvKioKKyAgICogQGJyaWVmICBRMzEgY29tcGxleCBtYWduaXR1ZGUKKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIHJlYWwgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X21hZ19xMzEoCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBudW1TYW1wbGVzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFExNSBjb21wbGV4IG1hZ25pdHVkZQorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgcmVhbCBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gdGhlIGlucHV0IHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfbWFnX3ExNSgKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IG51bVNhbXBsZXMpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTE1IGNvbXBsZXggZG90IHByb2R1Y3QKKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcmVhbFJlc3VsdCAgcmVhbCBwYXJ0IG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgaGVyZQorICAgKiBAcGFyYW1bb3V0XSBpbWFnUmVzdWx0ICBpbWFnaW5hcnkgcGFydCBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGhlcmUKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X2RvdF9wcm9kX3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgdWludDMyX3QgbnVtU2FtcGxlcywKKyAgcTMxX3QgKiByZWFsUmVzdWx0LAorICBxMzFfdCAqIGltYWdSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTMxIGNvbXBsZXggZG90IHByb2R1Y3QKKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcmVhbFJlc3VsdCAgcmVhbCBwYXJ0IG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgaGVyZQorICAgKiBAcGFyYW1bb3V0XSBpbWFnUmVzdWx0ICBpbWFnaW5hcnkgcGFydCBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGhlcmUKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X2RvdF9wcm9kX3EzMSgKKyAgcTMxX3QgKiBwU3JjQSwKKyAgcTMxX3QgKiBwU3JjQiwKKyAgdWludDMyX3QgbnVtU2FtcGxlcywKKyAgcTYzX3QgKiByZWFsUmVzdWx0LAorICBxNjNfdCAqIGltYWdSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgY29tcGxleCBkb3QgcHJvZHVjdAorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSByZWFsUmVzdWx0ICByZWFsIHBhcnQgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBoZXJlCisgICAqIEBwYXJhbVtvdXRdIGltYWdSZXN1bHQgIGltYWdpbmFyeSBwYXJ0IG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgaGVyZQorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfZG90X3Byb2RfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjQSwKKyAgZmxvYXQzMl90ICogcFNyY0IsCisgIHVpbnQzMl90IG51bVNhbXBsZXMsCisgIGZsb2F0MzJfdCAqIHJlYWxSZXN1bHQsCisgIGZsb2F0MzJfdCAqIGltYWdSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTE1IGNvbXBsZXgtYnktcmVhbCBtdWx0aXBsaWNhdGlvbgorICAgKiBAcGFyYW1baW5dICBwU3JjQ21wbHggICBwb2ludHMgdG8gdGhlIGNvbXBsZXggaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNSZWFsICAgIHBvaW50cyB0byB0aGUgcmVhbCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcENtcGx4RHN0ICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X211bHRfcmVhbF9xMTUoCisgIHExNV90ICogcFNyY0NtcGx4LAorICBxMTVfdCAqIHBTcmNSZWFsLAorICBxMTVfdCAqIHBDbXBseERzdCwKKyAgdWludDMyX3QgbnVtU2FtcGxlcyk7CisKKworICAvKioKKyAgICogQGJyaWVmICBRMzEgY29tcGxleC1ieS1yZWFsIG11bHRpcGxpY2F0aW9uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNDbXBseCAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY1JlYWwgICAgcG9pbnRzIHRvIHRoZSByZWFsIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwQ21wbHhEc3QgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfbXVsdF9yZWFsX3EzMSgKKyAgcTMxX3QgKiBwU3JjQ21wbHgsCisgIHEzMV90ICogcFNyY1JlYWwsCisgIHEzMV90ICogcENtcGx4RHN0LAorICB1aW50MzJfdCBudW1TYW1wbGVzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IGNvbXBsZXgtYnktcmVhbCBtdWx0aXBsaWNhdGlvbgorICAgKiBAcGFyYW1baW5dICBwU3JjQ21wbHggICBwb2ludHMgdG8gdGhlIGNvbXBsZXggaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNSZWFsICAgIHBvaW50cyB0byB0aGUgcmVhbCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcENtcGx4RHN0ICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X211bHRfcmVhbF9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmNDbXBseCwKKyAgZmxvYXQzMl90ICogcFNyY1JlYWwsCisgIGZsb2F0MzJfdCAqIHBDbXBseERzdCwKKyAgdWludDMyX3QgbnVtU2FtcGxlcyk7CisKKworICAvKioKKyAgICogQGJyaWVmICBNaW5pbXVtIHZhbHVlIG9mIGEgUTcgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKiBAcGFyYW1bb3V0XSByZXN1bHQgICAgIGlzIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGluZGV4ICAgICAgaXMgdGhlIGFycmF5IGluZGV4IG9mIHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSBpbnB1dCBidWZmZXIuCisgICAqLworICB2b2lkIGFybV9taW5fcTcoCisgIHE3X3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHE3X3QgKiByZXN1bHQsCisgIHVpbnQzMl90ICogaW5kZXgpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgTWluaW11bSB2YWx1ZSBvZiBhIFExNSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgcEluZGV4ICAgICBpcyB0aGUgYXJyYXkgaW5kZXggb2YgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIGlucHV0IGJ1ZmZlci4KKyAgICovCisgIHZvaWQgYXJtX21pbl9xMTUoCisgIHExNV90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxMTVfdCAqIHBSZXN1bHQsCisgIHVpbnQzMl90ICogcEluZGV4KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIE1pbmltdW0gdmFsdWUgb2YgYSBRMzEgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtvdXRdIHBJbmRleCAgICAgaXMgdGhlIGFycmF5IGluZGV4IG9mIHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSBpbnB1dCBidWZmZXIuCisgICAqLworICB2b2lkIGFybV9taW5fcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTMxX3QgKiBwUmVzdWx0LAorICB1aW50MzJfdCAqIHBJbmRleCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBNaW5pbXVtIHZhbHVlIG9mIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtvdXRdIHBJbmRleCAgICAgaXMgdGhlIGFycmF5IGluZGV4IG9mIHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSBpbnB1dCBidWZmZXIuCisgICAqLworICB2b2lkIGFybV9taW5fZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIGZsb2F0MzJfdCAqIHBSZXN1bHQsCisgIHVpbnQzMl90ICogcEluZGV4KTsKKworCisvKioKKyAqIEBicmllZiBNYXhpbXVtIHZhbHVlIG9mIGEgUTcgdmVjdG9yLgorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcgorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBsZW5ndGggb2YgdGhlIGlucHV0IHZlY3RvcgorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUKKyAqIEBwYXJhbVtvdXRdIHBJbmRleCAgICAgaW5kZXggb2YgbWF4aW11bSB2YWx1ZSByZXR1cm5lZCBoZXJlCisgKi8KKyAgdm9pZCBhcm1fbWF4X3E3KAorICBxN190ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxN190ICogcFJlc3VsdCwKKyAgdWludDMyX3QgKiBwSW5kZXgpOworCisKKy8qKgorICogQGJyaWVmIE1heGltdW0gdmFsdWUgb2YgYSBRMTUgdmVjdG9yLgorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcgorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBsZW5ndGggb2YgdGhlIGlucHV0IHZlY3RvcgorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUKKyAqIEBwYXJhbVtvdXRdIHBJbmRleCAgICAgaW5kZXggb2YgbWF4aW11bSB2YWx1ZSByZXR1cm5lZCBoZXJlCisgKi8KKyAgdm9pZCBhcm1fbWF4X3ExNSgKKyAgcTE1X3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHExNV90ICogcFJlc3VsdCwKKyAgdWludDMyX3QgKiBwSW5kZXgpOworCisKKy8qKgorICogQGJyaWVmIE1heGltdW0gdmFsdWUgb2YgYSBRMzEgdmVjdG9yLgorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcgorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBsZW5ndGggb2YgdGhlIGlucHV0IHZlY3RvcgorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUKKyAqIEBwYXJhbVtvdXRdIHBJbmRleCAgICAgaW5kZXggb2YgbWF4aW11bSB2YWx1ZSByZXR1cm5lZCBoZXJlCisgKi8KKyAgdm9pZCBhcm1fbWF4X3EzMSgKKyAgcTMxX3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHEzMV90ICogcFJlc3VsdCwKKyAgdWludDMyX3QgKiBwSW5kZXgpOworCisKKy8qKgorICogQGJyaWVmIE1heGltdW0gdmFsdWUgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgYnVmZmVyCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGxlbmd0aCBvZiB0aGUgaW5wdXQgdmVjdG9yCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIG1heGltdW0gdmFsdWUgcmV0dXJuZWQgaGVyZQorICogQHBhcmFtW291dF0gcEluZGV4ICAgICBpbmRleCBvZiBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUKKyAqLworICB2b2lkIGFybV9tYXhfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIGZsb2F0MzJfdCAqIHBSZXN1bHQsCisgIHVpbnQzMl90ICogcEluZGV4KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFExNSBjb21wbGV4LWJ5LWNvbXBsZXggbXVsdGlwbGljYXRpb24KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9jbXBseF9tdWx0X2NtcGx4X3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBudW1TYW1wbGVzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFEzMSBjb21wbGV4LWJ5LWNvbXBsZXggbXVsdGlwbGljYXRpb24KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9jbXBseF9tdWx0X2NtcGx4X3EzMSgKKyAgcTMxX3QgKiBwU3JjQSwKKyAgcTMxX3QgKiBwU3JjQiwKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBudW1TYW1wbGVzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IGNvbXBsZXgtYnktY29tcGxleCBtdWx0aXBsaWNhdGlvbgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X211bHRfY21wbHhfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjQSwKKyAgZmxvYXQzMl90ICogcFNyY0IsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IG51bVNhbXBsZXMpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIGZsb2F0aW5nLXBvaW50IHZlY3RvciB0byBRMzEgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgZmxvYXRpbmctcG9pbnQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBRMzEgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGxlbmd0aCBvZiB0aGUgaW5wdXQgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9mbG9hdF90b19xMzEoCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBmbG9hdGluZy1wb2ludCB2ZWN0b3IgdG8gUTE1IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGZsb2F0aW5nLXBvaW50IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgUTE1IG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBsZW5ndGggb2YgdGhlIGlucHV0IHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fZmxvYXRfdG9fcTE1KAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgZmxvYXRpbmctcG9pbnQgdmVjdG9yIHRvIFE3IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGZsb2F0aW5nLXBvaW50IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgUTcgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGxlbmd0aCBvZiB0aGUgaW5wdXQgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9mbG9hdF90b19xNygKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFEzMSB2ZWN0b3IgdG8gUTE1IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgaXMgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKi8KKyAgdm9pZCBhcm1fcTMxX3RvX3ExNSgKKyAgcTMxX3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFEzMSB2ZWN0b3IgdG8gUTcgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9xMzFfdG9fcTcoCisgIHEzMV90ICogcFNyYywKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFExNSB2ZWN0b3IgdG8gZmxvYXRpbmctcG9pbnQgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9xMTVfdG9fZmxvYXQoCisgIHExNV90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTE1IHZlY3RvciB0byBRMzEgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9xMTVfdG9fcTMxKAorICBxMTVfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTE1IHZlY3RvciB0byBRNyB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIGlzIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX3ExNV90b19xNygKKyAgcTE1X3QgKiBwU3JjLAorICBxN190ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAaW5ncm91cCBncm91cEludGVycG9sYXRpb24KKyAgICovCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBCaWxpbmVhckludGVycG9sYXRlIEJpbGluZWFyIEludGVycG9sYXRpb24KKyAgICoKKyAgICogQmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBpcyBhbiBleHRlbnNpb24gb2YgbGluZWFyIGludGVycG9sYXRpb24gYXBwbGllZCB0byBhIHR3byBkaW1lbnNpb25hbCBncmlkLgorICAgKiBUaGUgdW5kZXJseWluZyBmdW5jdGlvbiA8Y29kZT5mKHgsIHkpPC9jb2RlPiBpcyBzYW1wbGVkIG9uIGEgcmVndWxhciBncmlkIGFuZCB0aGUgaW50ZXJwb2xhdGlvbiBwcm9jZXNzCisgICAqIGRldGVybWluZXMgdmFsdWVzIGJldHdlZW4gdGhlIGdyaWQgcG9pbnRzLgorICAgKiBCaWxpbmVhciBpbnRlcnBvbGF0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdHdvIHN0ZXAgbGluZWFyIGludGVycG9sYXRpb24sIGZpcnN0IGluIHRoZSB4LWRpbWVuc2lvbiBhbmQgdGhlbiBpbiB0aGUgeS1kaW1lbnNpb24uCisgICAqIEJpbGluZWFyIGludGVycG9sYXRpb24gaXMgb2Z0ZW4gdXNlZCBpbiBpbWFnZSBwcm9jZXNzaW5nIHRvIHJlc2NhbGUgaW1hZ2VzLgorICAgKiBUaGUgQ01TSVMgRFNQIGxpYnJhcnkgcHJvdmlkZXMgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbnMgZm9yIFE3LCBRMTUsIFEzMSwgYW5kIGZsb2F0aW5nLXBvaW50IGRhdGEgdHlwZXMuCisgICAqCisgICAqIDxiPkFsZ29yaXRobTwvYj4KKyAgICogXHBhcgorICAgKiBUaGUgaW5zdGFuY2Ugc3RydWN0dXJlIHVzZWQgYnkgdGhlIGJpbGluZWFyIGludGVycG9sYXRpb24gZnVuY3Rpb25zIGRlc2NyaWJlcyBhIHR3byBkaW1lbnNpb25hbCBkYXRhIHRhYmxlLgorICAgKiBGb3IgZmxvYXRpbmctcG9pbnQsIHRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhczoKKyAgICogPHByZT4KKyAgICogICB0eXBlZGVmIHN0cnVjdAorICAgKiAgIHsKKyAgICogICAgIHVpbnQxNl90IG51bVJvd3M7CisgICAqICAgICB1aW50MTZfdCBudW1Db2xzOworICAgKiAgICAgZmxvYXQzMl90ICpwRGF0YTsKKyAgICogfSBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX2YzMjsKKyAgICogPC9wcmU+CisgICAqCisgICAqIFxwYXIKKyAgICogd2hlcmUgPGNvZGU+bnVtUm93czwvY29kZT4gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGU7CisgICAqIDxjb2RlPm51bUNvbHM8L2NvZGU+IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHRhYmxlOworICAgKiBhbmQgPGNvZGU+cERhdGE8L2NvZGU+IHBvaW50cyB0byBhbiBhcnJheSBvZiBzaXplIDxjb2RlPm51bVJvd3MqbnVtQ29sczwvY29kZT4gdmFsdWVzLgorICAgKiBUaGUgZGF0YSB0YWJsZSA8Y29kZT5wVGFibGU8L2NvZGU+IGlzIG9yZ2FuaXplZCBpbiByb3cgb3JkZXIgYW5kIHRoZSBzdXBwbGllZCBkYXRhIHZhbHVlcyBmYWxsIG9uIGludGVnZXIgaW5kZXhlcy4KKyAgICogVGhhdCBpcywgdGFibGUgZWxlbWVudCAoeCx5KSBpcyBsb2NhdGVkIGF0IDxjb2RlPnBUYWJsZVt4ICsgeSpudW1Db2xzXTwvY29kZT4gd2hlcmUgeCBhbmQgeSBhcmUgaW50ZWdlcnMuCisgICAqCisgICAqIFxwYXIKKyAgICogTGV0IDxjb2RlPih4LCB5KTwvY29kZT4gc3BlY2lmeSB0aGUgZGVzaXJlZCBpbnRlcnBvbGF0aW9uIHBvaW50LiAgVGhlbiBkZWZpbmU6CisgICAqIDxwcmU+CisgICAqICAgICBYRiA9IGZsb29yKHgpCisgICAqICAgICBZRiA9IGZsb29yKHkpCisgICAqIDwvcHJlPgorICAgKiBccGFyCisgICAqIFRoZSBpbnRlcnBvbGF0ZWQgb3V0cHV0IHBvaW50IGlzIGNvbXB1dGVkIGFzOgorICAgKiA8cHJlPgorICAgKiAgZih4LCB5KSA9IGYoWEYsIFlGKSAqICgxLSh4LVhGKSkgKiAoMS0oeS1ZRikpCisgICAqICAgICAgICAgICArIGYoWEYrMSwgWUYpICogKHgtWEYpKigxLSh5LVlGKSkKKyAgICogICAgICAgICAgICsgZihYRiwgWUYrMSkgKiAoMS0oeC1YRikpKih5LVlGKQorICAgKiAgICAgICAgICAgKyBmKFhGKzEsIFlGKzEpICogKHgtWEYpKih5LVlGKQorICAgKiA8L3ByZT4KKyAgICogTm90ZSB0aGF0IHRoZSBjb29yZGluYXRlcyAoeCwgeSkgY29udGFpbiBpbnRlZ2VyIGFuZCBmcmFjdGlvbmFsIGNvbXBvbmVudHMuCisgICAqIFRoZSBpbnRlZ2VyIGNvbXBvbmVudHMgc3BlY2lmeSB3aGljaCBwb3J0aW9uIG9mIHRoZSB0YWJsZSB0byB1c2Ugd2hpbGUgdGhlCisgICAqIGZyYWN0aW9uYWwgY29tcG9uZW50cyBjb250cm9sIHRoZSBpbnRlcnBvbGF0aW9uIHByb2Nlc3Nvci4KKyAgICoKKyAgICogXHBhcgorICAgKiBpZiAoeCx5KSBhcmUgb3V0c2lkZSBvZiB0aGUgdGFibGUgYm91bmRhcnksIEJpbGluZWFyIGludGVycG9sYXRpb24gcmV0dXJucyB6ZXJvIG91dHB1dC4KKyAgICovCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIEJpbGluZWFySW50ZXJwb2xhdGUKKyAgICogQHsKKyAgICovCisKKworICAvKioKKyAgKgorICAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbi4KKyAgKiBAcGFyYW1baW4sb3V0XSBTICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGludGVycG9sYXRpb24gc3RydWN0dXJlLgorICAqIEBwYXJhbVtpbl0gICAgIFggIGludGVycG9sYXRpb24gY29vcmRpbmF0ZS4KKyAgKiBAcGFyYW1baW5dICAgICBZICBpbnRlcnBvbGF0aW9uIGNvb3JkaW5hdGUuCisgICogQHJldHVybiBvdXQgaW50ZXJwb2xhdGVkIHZhbHVlLgorICAqLworICBzdGF0aWMgX19JTkxJTkUgZmxvYXQzMl90IGFybV9iaWxpbmVhcl9pbnRlcnBfZjMyKAorICBjb25zdCBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCBYLAorICBmbG9hdDMyX3QgWSkKKyAgeworICAgIGZsb2F0MzJfdCBvdXQ7CisgICAgZmxvYXQzMl90IGYwMCwgZjAxLCBmMTAsIGYxMTsKKyAgICBmbG9hdDMyX3QgKnBEYXRhID0gUy0+cERhdGE7CisgICAgaW50MzJfdCB4SW5kZXgsIHlJbmRleCwgaW5kZXg7CisgICAgZmxvYXQzMl90IHhkaWZmLCB5ZGlmZjsKKyAgICBmbG9hdDMyX3QgYjEsIGIyLCBiMywgYjQ7CisKKyAgICB4SW5kZXggPSAoaW50MzJfdCkgWDsKKyAgICB5SW5kZXggPSAoaW50MzJfdCkgWTsKKworICAgIC8qIENhcmUgdGFrZW4gZm9yIHRhYmxlIG91dHNpZGUgYm91bmRhcnkgKi8KKyAgICAvKiBSZXR1cm5zIHplcm8gb3V0cHV0IHdoZW4gdmFsdWVzIGFyZSBvdXRzaWRlIHRhYmxlIGJvdW5kYXJ5ICovCisgICAgaWYoeEluZGV4IDwgMCB8fCB4SW5kZXggPiAoUy0+bnVtUm93cyAtIDEpIHx8IHlJbmRleCA8IDAgfHwgeUluZGV4ID4gKFMtPm51bUNvbHMgLSAxKSkKKyAgICB7CisgICAgICByZXR1cm4gKDApOworICAgIH0KKworICAgIC8qIENhbGN1bGF0aW9uIG9mIGluZGV4IGZvciB0d28gbmVhcmVzdCBwb2ludHMgaW4gWC1kaXJlY3Rpb24gKi8KKyAgICBpbmRleCA9ICh4SW5kZXggLSAxKSArICh5SW5kZXggLSAxKSAqIFMtPm51bUNvbHM7CisKKworICAgIC8qIFJlYWQgdHdvIG5lYXJlc3QgcG9pbnRzIGluIFgtZGlyZWN0aW9uICovCisgICAgZjAwID0gcERhdGFbaW5kZXhdOworICAgIGYwMSA9IHBEYXRhW2luZGV4ICsgMV07CisKKyAgICAvKiBDYWxjdWxhdGlvbiBvZiBpbmRleCBmb3IgdHdvIG5lYXJlc3QgcG9pbnRzIGluIFktZGlyZWN0aW9uICovCisgICAgaW5kZXggPSAoeEluZGV4IC0gMSkgKyAoeUluZGV4KSAqIFMtPm51bUNvbHM7CisKKworICAgIC8qIFJlYWQgdHdvIG5lYXJlc3QgcG9pbnRzIGluIFktZGlyZWN0aW9uICovCisgICAgZjEwID0gcERhdGFbaW5kZXhdOworICAgIGYxMSA9IHBEYXRhW2luZGV4ICsgMV07CisKKyAgICAvKiBDYWxjdWxhdGlvbiBvZiBpbnRlcm1lZGlhdGUgdmFsdWVzICovCisgICAgYjEgPSBmMDA7CisgICAgYjIgPSBmMDEgLSBmMDA7CisgICAgYjMgPSBmMTAgLSBmMDA7CisgICAgYjQgPSBmMDAgLSBmMDEgLSBmMTAgKyBmMTE7CisKKyAgICAvKiBDYWxjdWxhdGlvbiBvZiBmcmFjdGlvbmFsIHBhcnQgaW4gWCAqLworICAgIHhkaWZmID0gWCAtIHhJbmRleDsKKworICAgIC8qIENhbGN1bGF0aW9uIG9mIGZyYWN0aW9uYWwgcGFydCBpbiBZICovCisgICAgeWRpZmYgPSBZIC0geUluZGV4OworCisgICAgLyogQ2FsY3VsYXRpb24gb2YgYmktbGluZWFyIGludGVycG9sYXRlZCBvdXRwdXQgKi8KKyAgICBvdXQgPSBiMSArIGIyICogeGRpZmYgKyBiMyAqIHlkaWZmICsgYjQgKiB4ZGlmZiAqIHlkaWZmOworCisgICAgLyogcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovCisgICAgcmV0dXJuIChvdXQpOworICB9CisKKworICAvKioKKyAgKgorICAqIEBicmllZiAgUTMxIGJpbGluZWFyIGludGVycG9sYXRpb24uCisgICogQHBhcmFtW2luLG91dF0gUyAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBpbnRlcnBvbGF0aW9uIHN0cnVjdHVyZS4KKyAgKiBAcGFyYW1baW5dICAgICBYICBpbnRlcnBvbGF0aW9uIGNvb3JkaW5hdGUgaW4gMTIuMjAgZm9ybWF0LgorICAqIEBwYXJhbVtpbl0gICAgIFkgIGludGVycG9sYXRpb24gY29vcmRpbmF0ZSBpbiAxMi4yMCBmb3JtYXQuCisgICogQHJldHVybiBvdXQgaW50ZXJwb2xhdGVkIHZhbHVlLgorICAqLworICBzdGF0aWMgX19JTkxJTkUgcTMxX3QgYXJtX2JpbGluZWFyX2ludGVycF9xMzEoCisgIGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfcTMxICogUywKKyAgcTMxX3QgWCwKKyAgcTMxX3QgWSkKKyAgeworICAgIHEzMV90IG91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBvdXRwdXQgKi8KKyAgICBxMzFfdCBhY2MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgKi8KKyAgICBxMzFfdCB4ZnJhY3QsIHlmcmFjdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBYLCBZIGZyYWN0aW9uYWwgcGFydHMgKi8KKyAgICBxMzFfdCB4MSwgeDIsIHkxLCB5MjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8KKyAgICBpbnQzMl90IHJJLCBjSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSb3cgYW5kIGNvbHVtbiBpbmRpY2VzICovCisgICAgcTMxX3QgKnBZRGF0YSA9IFMtPnBEYXRhOyAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBvdXRwdXQgdGFibGUgdmFsdWVzICovCisgICAgdWludDMyX3QgbkNvbHMgPSBTLT5udW1Db2xzOyAgICAgICAgICAgICAgICAgLyogbnVtIG9mIHJvd3MgKi8KKworICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLworICAgIC8qIDEyIGJpdHMgZm9yIHRoZSB0YWJsZSBpbmRleCAqLworICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovCisgICAgckkgPSAoKFggJiAocTMxX3QpMHhGRkYwMDAwMCkgPj4gMjApOworCisgICAgLyogSW5wdXQgaXMgaW4gMTIuMjAgZm9ybWF0ICovCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8KKyAgICBjSSA9ICgoWSAmIChxMzFfdCkweEZGRjAwMDAwKSA+PiAyMCk7CisKKyAgICAvKiBDYXJlIHRha2VuIGZvciB0YWJsZSBvdXRzaWRlIGJvdW5kYXJ5ICovCisgICAgLyogUmV0dXJucyB6ZXJvIG91dHB1dCB3aGVuIHZhbHVlcyBhcmUgb3V0c2lkZSB0YWJsZSBib3VuZGFyeSAqLworICAgIGlmKHJJIDwgMCB8fCBySSA+IChTLT5udW1Sb3dzIC0gMSkgfHwgY0kgPCAwIHx8IGNJID4gKFMtPm51bUNvbHMgLSAxKSkKKyAgICB7CisgICAgICByZXR1cm4gKDApOworICAgIH0KKworICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8KKyAgICAvKiBzaGlmdCBsZWZ0IHhmcmFjdCBieSAxMSB0byBrZWVwIDEuMzEgZm9ybWF0ICovCisgICAgeGZyYWN0ID0gKFggJiAweDAwMEZGRkZGKSA8PCAxMXU7CisKKyAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggKi8KKyAgICB4MSA9IHBZRGF0YVsockkpICsgKGludDMyX3QpbkNvbHMgKiAoY0kpICAgIF07CisgICAgeDIgPSBwWURhdGFbKHJJKSArIChpbnQzMl90KW5Db2xzICogKGNJKSArIDFdOworCisgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLworICAgIC8qIHNoaWZ0IGxlZnQgeWZyYWN0IGJ5IDExIHRvIGtlZXAgMS4zMSBmb3JtYXQgKi8KKyAgICB5ZnJhY3QgPSAoWSAmIDB4MDAwRkZGRkYpIDw8IDExdTsKKworICAgIC8qIFJlYWQgdHdvIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyBmcm9tIHRoZSBpbmRleCAqLworICAgIHkxID0gcFlEYXRhWyhySSkgKyAoaW50MzJfdCluQ29scyAqIChjSSArIDEpICAgIF07CisgICAgeTIgPSBwWURhdGFbKHJJKSArIChpbnQzMl90KW5Db2xzICogKGNJICsgMSkgKyAxXTsKKworICAgIC8qIENhbGN1bGF0aW9uIG9mIHgxICogKDEteGZyYWN0ICkgKiAoMS15ZnJhY3QpIGFuZCBhY2MgaXMgaW4gMy4yOShxMjkpIGZvcm1hdCAqLworICAgIG91dCA9ICgocTMxX3QpICgoKHE2M190KSB4MSAgKiAoMHg3RkZGRkZGRiAtIHhmcmFjdCkpID4+IDMyKSk7CisgICAgYWNjID0gKChxMzFfdCkgKCgocTYzX3QpIG91dCAqICgweDdGRkZGRkZGIC0geWZyYWN0KSkgPj4gMzIpKTsKKworICAgIC8qIHgyICogKHhmcmFjdCkgKiAoMS15ZnJhY3QpICBpbiAzLjI5KHEyOSkgYW5kIGFkZGluZyB0byBhY2MgKi8KKyAgICBvdXQgPSAoKHEzMV90KSAoKHE2M190KSB4MiAqICgweDdGRkZGRkZGIC0geWZyYWN0KSA+PiAzMikpOworICAgIGFjYyArPSAoKHEzMV90KSAoKHE2M190KSBvdXQgKiAoeGZyYWN0KSA+PiAzMikpOworCisgICAgLyogeTEgKiAoMSAtIHhmcmFjdCkgKiAoeWZyYWN0KSAgaW4gMy4yOShxMjkpIGFuZCBhZGRpbmcgdG8gYWNjICovCisgICAgb3V0ID0gKChxMzFfdCkgKChxNjNfdCkgeTEgKiAoMHg3RkZGRkZGRiAtIHhmcmFjdCkgPj4gMzIpKTsKKyAgICBhY2MgKz0gKChxMzFfdCkgKChxNjNfdCkgb3V0ICogKHlmcmFjdCkgPj4gMzIpKTsKKworICAgIC8qIHkyICogKHhmcmFjdCkgKiAoeWZyYWN0KSAgaW4gMy4yOShxMjkpIGFuZCBhZGRpbmcgdG8gYWNjICovCisgICAgb3V0ID0gKChxMzFfdCkgKChxNjNfdCkgeTIgKiAoeGZyYWN0KSA+PiAzMikpOworICAgIGFjYyArPSAoKHEzMV90KSAoKHE2M190KSBvdXQgKiAoeWZyYWN0KSA+PiAzMikpOworCisgICAgLyogQ29udmVydCBhY2MgdG8gMS4zMShxMzEpIGZvcm1hdCAqLworICAgIHJldHVybiAoKHEzMV90KShhY2MgPDwgMikpOworICB9CisKKworICAvKioKKyAgKiBAYnJpZWYgIFExNSBiaWxpbmVhciBpbnRlcnBvbGF0aW9uLgorICAqIEBwYXJhbVtpbixvdXRdIFMgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBzdHJ1Y3R1cmUuCisgICogQHBhcmFtW2luXSAgICAgWCAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlIGluIDEyLjIwIGZvcm1hdC4KKyAgKiBAcGFyYW1baW5dICAgICBZICBpbnRlcnBvbGF0aW9uIGNvb3JkaW5hdGUgaW4gMTIuMjAgZm9ybWF0LgorICAqIEByZXR1cm4gb3V0IGludGVycG9sYXRlZCB2YWx1ZS4KKyAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHExNV90IGFybV9iaWxpbmVhcl9pbnRlcnBfcTE1KAorICBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX3ExNSAqIFMsCisgIHEzMV90IFgsCisgIHEzMV90IFkpCisgIHsKKyAgICBxNjNfdCBhY2MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgKi8KKyAgICBxMzFfdCBvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3Jhcnkgb3V0cHV0ICovCisgICAgcTE1X3QgeDEsIHgyLCB5MSwgeTI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVhcmVzdCBvdXRwdXQgdmFsdWVzICovCisgICAgcTMxX3QgeGZyYWN0LCB5ZnJhY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgLyogWCwgWSBmcmFjdGlvbmFsIHBhcnRzICovCisgICAgaW50MzJfdCBySSwgY0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUm93IGFuZCBjb2x1bW4gaW5kaWNlcyAqLworICAgIHExNV90ICpwWURhdGEgPSBTLT5wRGF0YTsgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gb3V0cHV0IHRhYmxlIHZhbHVlcyAqLworICAgIHVpbnQzMl90IG5Db2xzID0gUy0+bnVtQ29sczsgICAgICAgICAgICAgICAgIC8qIG51bSBvZiByb3dzICovCisKKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8KKyAgICAvKiBJbmRleCB2YWx1ZSBjYWxjdWxhdGlvbiAqLworICAgIHJJID0gKChYICYgKHEzMV90KTB4RkZGMDAwMDApID4+IDIwKTsKKworICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLworICAgIC8qIDEyIGJpdHMgZm9yIHRoZSB0YWJsZSBpbmRleCAqLworICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovCisgICAgY0kgPSAoKFkgJiAocTMxX3QpMHhGRkYwMDAwMCkgPj4gMjApOworCisgICAgLyogQ2FyZSB0YWtlbiBmb3IgdGFibGUgb3V0c2lkZSBib3VuZGFyeSAqLworICAgIC8qIFJldHVybnMgemVybyBvdXRwdXQgd2hlbiB2YWx1ZXMgYXJlIG91dHNpZGUgdGFibGUgYm91bmRhcnkgKi8KKyAgICBpZihySSA8IDAgfHwgckkgPiAoUy0+bnVtUm93cyAtIDEpIHx8IGNJIDwgMCB8fCBjSSA+IChTLT5udW1Db2xzIC0gMSkpCisgICAgeworICAgICAgcmV0dXJuICgwKTsKKyAgICB9CisKKyAgICAvKiAyMCBiaXRzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0ICovCisgICAgLyogeGZyYWN0IHNob3VsZCBiZSBpbiAxMi4yMCBmb3JtYXQgKi8KKyAgICB4ZnJhY3QgPSAoWCAmIDB4MDAwRkZGRkYpOworCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4ICovCisgICAgeDEgPSBwWURhdGFbKCh1aW50MzJfdClySSkgKyBuQ29scyAqICgodWludDMyX3QpY0kpICAgIF07CisgICAgeDIgPSBwWURhdGFbKCh1aW50MzJfdClySSkgKyBuQ29scyAqICgodWludDMyX3QpY0kpICsgMV07CisKKyAgICAvKiAyMCBiaXRzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0ICovCisgICAgLyogeWZyYWN0IHNob3VsZCBiZSBpbiAxMi4yMCBmb3JtYXQgKi8KKyAgICB5ZnJhY3QgPSAoWSAmIDB4MDAwRkZGRkYpOworCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4ICovCisgICAgeTEgPSBwWURhdGFbKCh1aW50MzJfdClySSkgKyBuQ29scyAqICgodWludDMyX3QpY0kgKyAxKSAgICBdOworICAgIHkyID0gcFlEYXRhWygodWludDMyX3QpckkpICsgbkNvbHMgKiAoKHVpbnQzMl90KWNJICsgMSkgKyAxXTsKKworICAgIC8qIENhbGN1bGF0aW9uIG9mIHgxICogKDEteGZyYWN0ICkgKiAoMS15ZnJhY3QpIGFuZCBhY2MgaXMgaW4gMTMuNTEgZm9ybWF0ICovCisKKyAgICAvKiB4MSBpcyBpbiAxLjE1KHExNSksIHhmcmFjdCBpbiAxMi4yMCBmb3JtYXQgYW5kIG91dCBpcyBpbiAxMy4zNSBmb3JtYXQgKi8KKyAgICAvKiBjb252ZXJ0IDEzLjM1IHRvIDEzLjMxIGJ5IHJpZ2h0IHNoaWZ0aW5nICBhbmQgb3V0IGlzIGluIDEuMzEgKi8KKyAgICBvdXQgPSAocTMxX3QpICgoKHE2M190KSB4MSAqICgweEZGRkZGIC0geGZyYWN0KSkgPj4gNHUpOworICAgIGFjYyA9ICgocTYzX3QpIG91dCAqICgweEZGRkZGIC0geWZyYWN0KSk7CisKKyAgICAvKiB4MiAqICh4ZnJhY3QpICogKDEteWZyYWN0KSAgaW4gMS41MSBhbmQgYWRkaW5nIHRvIGFjYyAqLworICAgIG91dCA9IChxMzFfdCkgKCgocTYzX3QpIHgyICogKDB4RkZGRkYgLSB5ZnJhY3QpKSA+PiA0dSk7CisgICAgYWNjICs9ICgocTYzX3QpIG91dCAqICh4ZnJhY3QpKTsKKworICAgIC8qIHkxICogKDEgLSB4ZnJhY3QpICogKHlmcmFjdCkgIGluIDEuNTEgYW5kIGFkZGluZyB0byBhY2MgKi8KKyAgICBvdXQgPSAocTMxX3QpICgoKHE2M190KSB5MSAqICgweEZGRkZGIC0geGZyYWN0KSkgPj4gNHUpOworICAgIGFjYyArPSAoKHE2M190KSBvdXQgKiAoeWZyYWN0KSk7CisKKyAgICAvKiB5MiAqICh4ZnJhY3QpICogKHlmcmFjdCkgIGluIDEuNTEgYW5kIGFkZGluZyB0byBhY2MgKi8KKyAgICBvdXQgPSAocTMxX3QpICgoKHE2M190KSB5MiAqICh4ZnJhY3QpKSA+PiA0dSk7CisgICAgYWNjICs9ICgocTYzX3QpIG91dCAqICh5ZnJhY3QpKTsKKworICAgIC8qIGFjYyBpcyBpbiAxMy41MSBmb3JtYXQgYW5kIGRvd24gc2hpZnQgYWNjIGJ5IDM2IHRpbWVzICovCisgICAgLyogQ29udmVydCBvdXQgdG8gMS4xNSBmb3JtYXQgKi8KKyAgICByZXR1cm4gKChxMTVfdCkoYWNjID4+IDM2KSk7CisgIH0KKworCisgIC8qKgorICAqIEBicmllZiAgUTcgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbi4KKyAgKiBAcGFyYW1baW4sb3V0XSBTICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGludGVycG9sYXRpb24gc3RydWN0dXJlLgorICAqIEBwYXJhbVtpbl0gICAgIFggIGludGVycG9sYXRpb24gY29vcmRpbmF0ZSBpbiAxMi4yMCBmb3JtYXQuCisgICogQHBhcmFtW2luXSAgICAgWSAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlIGluIDEyLjIwIGZvcm1hdC4KKyAgKiBAcmV0dXJuIG91dCBpbnRlcnBvbGF0ZWQgdmFsdWUuCisgICovCisgIHN0YXRpYyBfX0lOTElORSBxN190IGFybV9iaWxpbmVhcl9pbnRlcnBfcTcoCisgIGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfcTcgKiBTLAorICBxMzFfdCBYLAorICBxMzFfdCBZKQorICB7CisgICAgcTYzX3QgYWNjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3V0cHV0ICovCisgICAgcTMxX3Qgb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IG91dHB1dCAqLworICAgIHEzMV90IHhmcmFjdCwgeWZyYWN0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFgsIFkgZnJhY3Rpb25hbCBwYXJ0cyAqLworICAgIHE3X3QgeDEsIHgyLCB5MSwgeTI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLworICAgIGludDMyX3QgckksIGNJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJvdyBhbmQgY29sdW1uIGluZGljZXMgKi8KKyAgICBxN190ICpwWURhdGEgPSBTLT5wRGF0YTsgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG91dHB1dCB0YWJsZSB2YWx1ZXMgKi8KKyAgICB1aW50MzJfdCBuQ29scyA9IFMtPm51bUNvbHM7ICAgICAgICAgICAgICAgICAvKiBudW0gb2Ygcm93cyAqLworCisgICAgLyogSW5wdXQgaXMgaW4gMTIuMjAgZm9ybWF0ICovCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8KKyAgICBySSA9ICgoWCAmIChxMzFfdCkweEZGRjAwMDAwKSA+PiAyMCk7CisKKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8KKyAgICAvKiBJbmRleCB2YWx1ZSBjYWxjdWxhdGlvbiAqLworICAgIGNJID0gKChZICYgKHEzMV90KTB4RkZGMDAwMDApID4+IDIwKTsKKworICAgIC8qIENhcmUgdGFrZW4gZm9yIHRhYmxlIG91dHNpZGUgYm91bmRhcnkgKi8KKyAgICAvKiBSZXR1cm5zIHplcm8gb3V0cHV0IHdoZW4gdmFsdWVzIGFyZSBvdXRzaWRlIHRhYmxlIGJvdW5kYXJ5ICovCisgICAgaWYockkgPCAwIHx8IHJJID4gKFMtPm51bVJvd3MgLSAxKSB8fCBjSSA8IDAgfHwgY0kgPiAoUy0+bnVtQ29scyAtIDEpKQorICAgIHsKKyAgICAgIHJldHVybiAoMCk7CisgICAgfQorCisgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLworICAgIC8qIHhmcmFjdCBzaG91bGQgYmUgaW4gMTIuMjAgZm9ybWF0ICovCisgICAgeGZyYWN0ID0gKFggJiAocTMxX3QpMHgwMDBGRkZGRik7CisKKyAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggKi8KKyAgICB4MSA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSkgICAgXTsKKyAgICB4MiA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSkgKyAxXTsKKworICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8KKyAgICAvKiB5ZnJhY3Qgc2hvdWxkIGJlIGluIDEyLjIwIGZvcm1hdCAqLworICAgIHlmcmFjdCA9IChZICYgKHEzMV90KTB4MDAwRkZGRkYpOworCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4ICovCisgICAgeTEgPSBwWURhdGFbKCh1aW50MzJfdClySSkgKyBuQ29scyAqICgodWludDMyX3QpY0kgKyAxKSAgICBdOworICAgIHkyID0gcFlEYXRhWygodWludDMyX3QpckkpICsgbkNvbHMgKiAoKHVpbnQzMl90KWNJICsgMSkgKyAxXTsKKworICAgIC8qIENhbGN1bGF0aW9uIG9mIHgxICogKDEteGZyYWN0ICkgKiAoMS15ZnJhY3QpIGFuZCBhY2MgaXMgaW4gMTYuNDcgZm9ybWF0ICovCisgICAgb3V0ID0gKCh4MSAqICgweEZGRkZGIC0geGZyYWN0KSkpOworICAgIGFjYyA9ICgoKHE2M190KSBvdXQgKiAoMHhGRkZGRiAtIHlmcmFjdCkpKTsKKworICAgIC8qIHgyICogKHhmcmFjdCkgKiAoMS15ZnJhY3QpICBpbiAyLjIyIGFuZCBhZGRpbmcgdG8gYWNjICovCisgICAgb3V0ID0gKCh4MiAqICgweEZGRkZGIC0geWZyYWN0KSkpOworICAgIGFjYyArPSAoKChxNjNfdCkgb3V0ICogKHhmcmFjdCkpKTsKKworICAgIC8qIHkxICogKDEgLSB4ZnJhY3QpICogKHlmcmFjdCkgIGluIDIuMjIgYW5kIGFkZGluZyB0byBhY2MgKi8KKyAgICBvdXQgPSAoKHkxICogKDB4RkZGRkYgLSB4ZnJhY3QpKSk7CisgICAgYWNjICs9ICgoKHE2M190KSBvdXQgKiAoeWZyYWN0KSkpOworCisgICAgLyogeTIgKiAoeGZyYWN0KSAqICh5ZnJhY3QpICBpbiAyLjIyIGFuZCBhZGRpbmcgdG8gYWNjICovCisgICAgb3V0ID0gKCh5MiAqICh5ZnJhY3QpKSk7CisgICAgYWNjICs9ICgoKHE2M190KSBvdXQgKiAoeGZyYWN0KSkpOworCisgICAgLyogYWNjIGluIDE2LjQ3IGZvcm1hdCBhbmQgZG93biBzaGlmdCBieSA0MCB0byBjb252ZXJ0IHRvIDEuNyBmb3JtYXQgKi8KKyAgICByZXR1cm4gKChxN190KShhY2MgPj4gNDApKTsKKyAgfQorCisgIC8qKgorICAgKiBAfSBlbmQgb2YgQmlsaW5lYXJJbnRlcnBvbGF0ZSBncm91cAorICAgKi8KKworCisvKiBTTU1MQVIgKi8KKyNkZWZpbmUgbXVsdEFjY18zMngzMl9rZWVwMzJfUihhLCB4LCB5KSBcCisgICAgYSA9IChxMzFfdCkgKCgoKChxNjNfdCkgYSkgPDwgMzIpICsgKChxNjNfdCkgeCAqIHkpICsgMHg4MDAwMDAwMExMICkgPj4gMzIpCisKKy8qIFNNTUxTUiAqLworI2RlZmluZSBtdWx0U3ViXzMyeDMyX2tlZXAzMl9SKGEsIHgsIHkpIFwKKyAgICBhID0gKHEzMV90KSAoKCgoKHE2M190KSBhKSA8PCAzMikgLSAoKHE2M190KSB4ICogeSkgKyAweDgwMDAwMDAwTEwgKSA+PiAzMikKKworLyogU01NVUxSICovCisjZGVmaW5lIG11bHRfMzJ4MzJfa2VlcDMyX1IoYSwgeCwgeSkgXAorICAgIGEgPSAocTMxX3QpICgoKHE2M190KSB4ICogeSArIDB4ODAwMDAwMDBMTCApID4+IDMyKQorCisvKiBTTU1MQSAqLworI2RlZmluZSBtdWx0QWNjXzMyeDMyX2tlZXAzMihhLCB4LCB5KSBcCisgICAgYSArPSAocTMxX3QpICgoKHE2M190KSB4ICogeSkgPj4gMzIpCisKKy8qIFNNTUxTICovCisjZGVmaW5lIG11bHRTdWJfMzJ4MzJfa2VlcDMyKGEsIHgsIHkpIFwKKyAgICBhIC09IChxMzFfdCkgKCgocTYzX3QpIHggKiB5KSA+PiAzMikKKworLyogU01NVUwgKi8KKyNkZWZpbmUgbXVsdF8zMngzMl9rZWVwMzIoYSwgeCwgeSkgXAorICAgIGEgPSAocTMxX3QpICgoKHE2M190KSB4ICogeSApID4+IDMyKQorCisKKyNpZiBkZWZpbmVkICggX19DQ19BUk0gKQorICAvKiBFbnRlciBsb3cgb3B0aW1pemF0aW9uIHJlZ2lvbiAtIHBsYWNlIGRpcmVjdGx5IGFib3ZlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKyAgI2lmIGRlZmluZWQoIEFSTV9NQVRIX0NNNCApIHx8IGRlZmluZWQoIEFSTV9NQVRIX0NNNykKKyAgICAjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVIgXAorICAgICAgIF9QcmFnbWEgKCJwdXNoIikgICAgICAgICBcCisgICAgICAgX1ByYWdtYSAoIk8xIikKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVIKKyAgI2VuZGlmCisKKyAgLyogRXhpdCBsb3cgb3B0aW1pemF0aW9uIHJlZ2lvbiAtIHBsYWNlIGRpcmVjdGx5IGFmdGVyIGVuZCBvZiBmdW5jdGlvbiBkZWZpbml0aW9uICovCisgICNpZiBkZWZpbmVkKCBBUk1fTUFUSF9DTTQgKSB8fCBkZWZpbmVkKCBBUk1fTUFUSF9DTTcpCisgICAgI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VYSVQgXAorICAgICAgIF9QcmFnbWEgKCJwb3AiKQorICAjZWxzZQorICAgICNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FWElUCisgICNlbmRpZgorCisgIC8qIEVudGVyIGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWJvdmUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworICAjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRU5URVIKKworICAvKiBFeGl0IGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWZ0ZXIgZW5kIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKyAgI2RlZmluZSBJQVJfT05MWV9MT1dfT1BUSU1JWkFUSU9OX0VYSVQKKworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VOVEVSCisgICNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FWElUCisgICNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUgorICAjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRVhJVAorCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorICAjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVIgX19hdHRyaWJ1dGVfXygoIG9wdGltaXplKCItTzEiKSApKQorICAjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRVhJVAorICAjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRU5URVIKKyAgI2RlZmluZSBJQVJfT05MWV9MT1dfT1BUSU1JWkFUSU9OX0VYSVQKKworI2VsaWYgZGVmaW5lZChfX0lDQ0FSTV9fKQorICAvKiBFbnRlciBsb3cgb3B0aW1pemF0aW9uIHJlZ2lvbiAtIHBsYWNlIGRpcmVjdGx5IGFib3ZlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKyAgI2lmIGRlZmluZWQoIEFSTV9NQVRIX0NNNCApIHx8IGRlZmluZWQoIEFSTV9NQVRIX0NNNykKKyAgICAjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVIgXAorICAgICAgIF9QcmFnbWEgKCJvcHRpbWl6ZT1sb3ciKQorICAjZWxzZQorICAgICNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FTlRFUgorICAjZW5kaWYKKworICAvKiBFeGl0IGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWZ0ZXIgZW5kIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKyAgI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VYSVQKKworICAvKiBFbnRlciBsb3cgb3B0aW1pemF0aW9uIHJlZ2lvbiAtIHBsYWNlIGRpcmVjdGx5IGFib3ZlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKyAgI2lmIGRlZmluZWQoIEFSTV9NQVRIX0NNNCApIHx8IGRlZmluZWQoIEFSTV9NQVRIX0NNNykKKyAgICAjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRU5URVIgXAorICAgICAgIF9QcmFnbWEgKCJvcHRpbWl6ZT1sb3ciKQorICAjZWxzZQorICAgICNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUgorICAjZW5kaWYKKworICAvKiBFeGl0IGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWZ0ZXIgZW5kIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKyAgI2RlZmluZSBJQVJfT05MWV9MT1dfT1BUSU1JWkFUSU9OX0VYSVQKKworI2VsaWYgZGVmaW5lZChfX0NTTUNfXykKKyAgI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VOVEVSCisgICNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FWElUCisgICNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUgorICAjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRVhJVAorCisjZWxpZiBkZWZpbmVkKF9fVEFTS0lOR19fKQorICAjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVIKKyAgI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VYSVQKKyAgI2RlZmluZSBJQVJfT05MWV9MT1dfT1BUSU1JWkFUSU9OX0VOVEVSCisgICNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FWElUCisKKyNlbmRpZgorCisKKyNpZmRlZiAgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworI2VuZGlmIC8qIF9BUk1fTUFUSF9IICovCisKKy8qKgorICoKKyAqIEVuZCBvZiBmaWxlLgorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jbXNpc19hcm1jYy5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY21zaXNfYXJtY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGM0OWM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY21zaXNfYXJtY2MuaApAQCAtMCwwICsxLDczNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNtc2lzX2FybWNjLmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTSBDb3JlIEZ1bmN0aW9uL0luc3RydWN0aW9uIEhlYWRlciBGaWxlCisgKiBAdmVyc2lvbiAgVjQuMzAKKyAqIEBkYXRlICAgICAyMC4gT2N0b2JlciAyMDE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNSBBUk0gTElNSVRFRAorCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAqCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKyNpZm5kZWYgX19DTVNJU19BUk1DQ19ICisjZGVmaW5lIF9fQ01TSVNfQVJNQ0NfSAorCisKKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA8IDQwMDY3NykKKyAgI2Vycm9yICJQbGVhc2UgdXNlIEFSTSBDb21waWxlciBUb29sY2hhaW4gVjQuMC42Nzcgb3IgbGF0ZXIhIgorI2VuZGlmCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29yZSBGdW5jdGlvbiBBY2Nlc3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgICAgXGRlZmdyb3VwIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zIENNU0lTIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucworICBAeworICovCisKKy8qIGludHJpbnNpYyB2b2lkIF9fZW5hYmxlX2lycSgpOyAgICAgKi8KKy8qIGludHJpbnNpYyB2b2lkIF9fZGlzYWJsZV9pcnEoKTsgICAgKi8KKworLyoqCisgIFxicmllZiAgIEdldCBDb250cm9sIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIENvbnRyb2wgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9DT05UUk9MKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnQ29udHJvbCAgICAgICAgIF9fQVNNKCJjb250cm9sIik7CisgIHJldHVybihfX3JlZ0NvbnRyb2wpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQ29udHJvbCBSZWdpc3RlcgorICBcZGV0YWlscyBXcml0ZXMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBDb250cm9sIFJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBjb250cm9sICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlIHRvIHNldAorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9DT05UUk9MKHVpbnQzMl90IGNvbnRyb2wpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnQ29udHJvbCAgICAgICAgIF9fQVNNKCJjb250cm9sIik7CisgIF9fcmVnQ29udHJvbCA9IGNvbnRyb2w7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBJUFNSIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIElQU1IgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBJUFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9JUFNSKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnSVBTUiAgICAgICAgICBfX0FTTSgiaXBzciIpOworICByZXR1cm4oX19yZWdJUFNSKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEFQU1IgUmVnaXN0ZXIKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgQVBTUiBSZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgIEFQU1IgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0FQU1Iodm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdBUFNSICAgICAgICAgIF9fQVNNKCJhcHNyIik7CisgIHJldHVybihfX3JlZ0FQU1IpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgeFBTUiBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSB4UFNSIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgeFBTUiBSZWdpc3RlciB2YWx1ZQorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfeFBTUih2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ1hQU1IgICAgICAgICAgX19BU00oInhwc3IiKTsKKyAgcmV0dXJuKF9fcmVnWFBTUik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApLgorICBccmV0dXJuICAgICAgICAgICAgICAgUFNQIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9QU1Aodm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdQcm9jZXNzU3RhY2tQb2ludGVyICBfX0FTTSgicHNwIik7CisgIHJldHVybihfX3JlZ1Byb2Nlc3NTdGFja1BvaW50ZXIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkuCisgIFxwYXJhbSBbaW5dICAgIHRvcE9mUHJvY1N0YWNrICBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BTUCh1aW50MzJfdCB0b3BPZlByb2NTdGFjaykKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdQcm9jZXNzU3RhY2tQb2ludGVyICBfX0FTTSgicHNwIik7CisgIF9fcmVnUHJvY2Vzc1N0YWNrUG9pbnRlciA9IHRvcE9mUHJvY1N0YWNrOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgTWFpbiBTdGFjayBQb2ludGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIE1TUCBSZWdpc3RlciB2YWx1ZQorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfTVNQKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnTWFpblN0YWNrUG9pbnRlciAgICAgX19BU00oIm1zcCIpOworICByZXR1cm4oX19yZWdNYWluU3RhY2tQb2ludGVyKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IE1haW4gU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLgorICBccGFyYW0gW2luXSAgICB0b3BPZk1haW5TdGFjayAgTWFpbiBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldAorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9NU1AodWludDMyX3QgdG9wT2ZNYWluU3RhY2spCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnTWFpblN0YWNrUG9pbnRlciAgICAgX19BU00oIm1zcCIpOworICBfX3JlZ01haW5TdGFja1BvaW50ZXIgPSB0b3BPZk1haW5TdGFjazsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFByaW9yaXR5IE1hc2sKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcHJpb3JpdHkgbWFzayBiaXQgZnJvbSB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgIFByaW9yaXR5IE1hc2sgdmFsdWUKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X1BSSU1BU0sodm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdQcmlNYXNrICAgICAgICAgX19BU00oInByaW1hc2siKTsKKyAgcmV0dXJuKF9fcmVnUHJpTWFzayk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBNYXNrCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBwcmlNYXNrICBQcmlvcml0eSBNYXNrCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BSSU1BU0sodWludDMyX3QgcHJpTWFzaykKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdQcmlNYXNrICAgICAgICAgX19BU00oInByaW1hc2siKTsKKyAgX19yZWdQcmlNYXNrID0gKHByaU1hc2spOworfQorCisKKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgRklRCisgIFxkZXRhaWxzIEVuYWJsZXMgRklRIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIEYtYml0IGluIHRoZSBDUFNSLgorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLgorICovCisjZGVmaW5lIF9fZW5hYmxlX2ZhdWx0X2lycSAgICAgICAgICAgICAgICBfX2VuYWJsZV9maXEKKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBGSVEKKyAgXGRldGFpbHMgRGlzYWJsZXMgRklRIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgRi1iaXQgaW4gdGhlIENQU1IuCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuCisgKi8KKyNkZWZpbmUgX19kaXNhYmxlX2ZhdWx0X2lycSAgICAgICAgICAgICAgIF9fZGlzYWJsZV9maXEKKworCisvKioKKyAgXGJyaWVmICAgR2V0IEJhc2UgUHJpb3JpdHkKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgdmFsdWUKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90ICBfX2dldF9CQVNFUFJJKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnQmFzZVByaSAgICAgICAgIF9fQVNNKCJiYXNlcHJpIik7CisgIHJldHVybihfX3JlZ0Jhc2VQcmkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfQkFTRVBSSSh1aW50MzJfdCBiYXNlUHJpKQoreworICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ0Jhc2VQcmkgICAgICAgICBfX0FTTSgiYmFzZXByaSIpOworICBfX3JlZ0Jhc2VQcmkgPSAoYmFzZVByaSAmIDB4RkZVKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IEJhc2UgUHJpb3JpdHkgd2l0aCBjb25kaXRpb24KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgb25seSBpZiBCQVNFUFJJIG1hc2tpbmcgaXMgZGlzYWJsZWQsCisgICAgICAgICAgIG9yIHRoZSBuZXcgdmFsdWUgaW5jcmVhc2VzIHRoZSBCQVNFUFJJIHByaW9yaXR5IGxldmVsLgorICBccGFyYW0gW2luXSAgICBiYXNlUHJpICBCYXNlIFByaW9yaXR5IHZhbHVlIHRvIHNldAorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJX01BWCh1aW50MzJfdCBiYXNlUHJpKQoreworICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ0Jhc2VQcmlNYXggICAgICBfX0FTTSgiYmFzZXByaV9tYXgiKTsKKyAgX19yZWdCYXNlUHJpTWF4ID0gKGJhc2VQcmkgJiAweEZGVSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBGYXVsdCBNYXNrCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZhdWx0IE1hc2sgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGYXVsdCBNYXNrIHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9GQVVMVE1BU0sodm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdGYXVsdE1hc2sgICAgICAgX19BU00oImZhdWx0bWFzayIpOworICByZXR1cm4oX19yZWdGYXVsdE1hc2spOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgRmF1bHQgTWFzaworICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgRmF1bHQgTWFzayByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgZmF1bHRNYXNrICBGYXVsdCBNYXNrIHZhbHVlIHRvIHNldAorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9GQVVMVE1BU0sodWludDMyX3QgZmF1bHRNYXNrKQoreworICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ0ZhdWx0TWFzayAgICAgICBfX0FTTSgiZmF1bHRtYXNrIik7CisgIF9fcmVnRmF1bHRNYXNrID0gKGZhdWx0TWFzayAmICh1aW50MzJfdCkxKTsKK30KKworI2VuZGlmIC8qIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkgKi8KKworCisjaWYgICAgICAgKF9fQ09SVEVYX00gPT0gMHgwNFUpIHx8IChfX0NPUlRFWF9NID09IDB4MDdVKQorCisvKioKKyAgXGJyaWVmICAgR2V0IEZQU0NSCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIgdmFsdWUKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZQU0NSKHZvaWQpCit7CisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQorICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ2Zwc2NyICAgICAgICAgX19BU00oImZwc2NyIik7CisgIHJldHVybihfX3JlZ2Zwc2NyKTsKKyNlbHNlCisgICByZXR1cm4oMFUpOworI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBGUFNDUgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIGZwc2NyICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCB2YWx1ZSB0byBzZXQKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfRlBTQ1IodWludDMyX3QgZnBzY3IpCit7CisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQorICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ2Zwc2NyICAgICAgICAgX19BU00oImZwc2NyIik7CisgIF9fcmVnZnBzY3IgPSAoZnBzY3IpOworI2VuZGlmCit9CisKKyNlbmRpZiAvKiAoX19DT1JURVhfTSA9PSAweDA0VSkgfHwgKF9fQ09SVEVYX00gPT0gMHgwN1UpICovCisKKworCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX1JlZ0FjY0Z1bmN0aW9ucyAqLworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqIFxkZWZncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlIENNU0lTIENvcmUgSW5zdHJ1Y3Rpb24gSW50ZXJmYWNlCisgIEFjY2VzcyB0byBkZWRpY2F0ZWQgaW5zdHJ1Y3Rpb25zCisgIEB7CisqLworCisvKioKKyAgXGJyaWVmICAgTm8gT3BlcmF0aW9uCisgIFxkZXRhaWxzIE5vIE9wZXJhdGlvbiBkb2VzIG5vdGhpbmcuIFRoaXMgaW5zdHJ1Y3Rpb24gY2FuIGJlIHVzZWQgZm9yIGNvZGUgYWxpZ25tZW50IHB1cnBvc2VzLgorICovCisjZGVmaW5lIF9fTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25vcAorCisKKy8qKgorICBcYnJpZWYgICBXYWl0IEZvciBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgV2FpdCBGb3IgSW50ZXJydXB0IGlzIGEgaGludCBpbnN0cnVjdGlvbiB0aGF0IHN1c3BlbmRzIGV4ZWN1dGlvbiB1bnRpbCBvbmUgb2YgYSBudW1iZXIgb2YgZXZlbnRzIG9jY3Vycy4KKyAqLworI2RlZmluZSBfX1dGSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193ZmkKKworCisvKioKKyAgXGJyaWVmICAgV2FpdCBGb3IgRXZlbnQKKyAgXGRldGFpbHMgV2FpdCBGb3IgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgcGVybWl0cyB0aGUgcHJvY2Vzc29yIHRvIGVudGVyCisgICAgICAgICAgIGEgbG93LXBvd2VyIHN0YXRlIHVudGlsIG9uZSBvZiBhIG51bWJlciBvZiBldmVudHMgb2NjdXJzLgorICovCisjZGVmaW5lIF9fV0ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dmZQorCisKKy8qKgorICBcYnJpZWYgICBTZW5kIEV2ZW50CisgIFxkZXRhaWxzIFNlbmQgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uLiBJdCBjYXVzZXMgYW4gZXZlbnQgdG8gYmUgc2lnbmFsZWQgdG8gdGhlIENQVS4KKyAqLworI2RlZmluZSBfX1NFViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXYKKworCisvKioKKyAgXGJyaWVmICAgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIEJhcnJpZXIKKyAgXGRldGFpbHMgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIEJhcnJpZXIgZmx1c2hlcyB0aGUgcGlwZWxpbmUgaW4gdGhlIHByb2Nlc3NvciwKKyAgICAgICAgICAgc28gdGhhdCBhbGwgaW5zdHJ1Y3Rpb25zIGZvbGxvd2luZyB0aGUgSVNCIGFyZSBmZXRjaGVkIGZyb20gY2FjaGUgb3IgbWVtb3J5LAorICAgICAgICAgICBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gY29tcGxldGVkLgorICovCisjZGVmaW5lIF9fSVNCKCkgZG8ge1wKKyAgICAgICAgICAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTtcCisgICAgICAgICAgICAgICAgICAgX19pc2IoMHhGKTtcCisgICAgICAgICAgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7XAorICAgICAgICAgICAgICAgIH0gd2hpbGUgKDBVKQorCisvKioKKyAgXGJyaWVmICAgRGF0YSBTeW5jaHJvbml6YXRpb24gQmFycmllcgorICBcZGV0YWlscyBBY3RzIGFzIGEgc3BlY2lhbCBraW5kIG9mIERhdGEgTWVtb3J5IEJhcnJpZXIuCisgICAgICAgICAgIEl0IGNvbXBsZXRlcyB3aGVuIGFsbCBleHBsaWNpdCBtZW1vcnkgYWNjZXNzZXMgYmVmb3JlIHRoaXMgaW5zdHJ1Y3Rpb24gY29tcGxldGUuCisgKi8KKyNkZWZpbmUgX19EU0IoKSBkbyB7XAorICAgICAgICAgICAgICAgICAgIF9fc2NoZWR1bGVfYmFycmllcigpO1wKKyAgICAgICAgICAgICAgICAgICBfX2RzYigweEYpO1wKKyAgICAgICAgICAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTtcCisgICAgICAgICAgICAgICAgfSB3aGlsZSAoMFUpCisKKy8qKgorICBcYnJpZWYgICBEYXRhIE1lbW9yeSBCYXJyaWVyCisgIFxkZXRhaWxzIEVuc3VyZXMgdGhlIGFwcGFyZW50IG9yZGVyIG9mIHRoZSBleHBsaWNpdCBtZW1vcnkgb3BlcmF0aW9ucyBiZWZvcmUKKyAgICAgICAgICAgYW5kIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiwgd2l0aG91dCBlbnN1cmluZyB0aGVpciBjb21wbGV0aW9uLgorICovCisjZGVmaW5lIF9fRE1CKCkgZG8ge1wKKyAgICAgICAgICAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTtcCisgICAgICAgICAgICAgICAgICAgX19kbWIoMHhGKTtcCisgICAgICAgICAgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7XAorICAgICAgICAgICAgICAgIH0gd2hpbGUgKDBVKQorCisvKioKKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgzMiBiaXQpCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGludGVnZXIgdmFsdWUuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQorICovCisjZGVmaW5lIF9fUkVWICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JldgorCisKKy8qKgorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgKDE2IGJpdCkKKyAgXGRldGFpbHMgUmV2ZXJzZXMgdGhlIGJ5dGUgb3JkZXIgaW4gdHdvIHVuc2lnbmVkIHNob3J0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlCisgKi8KKyNpZm5kZWYgX19OT19FTUJFRERFRF9BU00KK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXYxNl90ZXh0IikpKSBfX1NUQVRJQ19JTkxJTkUgX19BU00gdWludDMyX3QgX19SRVYxNih1aW50MzJfdCB2YWx1ZSkKK3sKKyAgcmV2MTYgcjAsIHIwCisgIGJ4IGxyCit9CisjZW5kaWYKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciBpbiBzaWduZWQgc2hvcnQgdmFsdWUKKyAgXGRldGFpbHMgUmV2ZXJzZXMgdGhlIGJ5dGUgb3JkZXIgaW4gYSBzaWduZWQgc2hvcnQgdmFsdWUgd2l0aCBzaWduIGV4dGVuc2lvbiB0byBpbnRlZ2VyLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworI2lmbmRlZiBfX05PX0VNQkVEREVEX0FTTQorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldnNoX3RleHQiKSkpIF9fU1RBVElDX0lOTElORSBfX0FTTSBpbnQzMl90IF9fUkVWU0goaW50MzJfdCB2YWx1ZSkKK3sKKyAgcmV2c2ggcjAsIHIwCisgIGJ4IGxyCit9CisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgUm90YXRlIFJpZ2h0IGluIHVuc2lnbmVkIHZhbHVlICgzMiBiaXQpCisgIFxkZXRhaWxzIFJvdGF0ZSBSaWdodCAoaW1tZWRpYXRlKSBwcm92aWRlcyB0aGUgdmFsdWUgb2YgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgcm90YXRlZCBieSBhIHZhcmlhYmxlIG51bWJlciBvZiBiaXRzLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcm90YXRlCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBOdW1iZXIgb2YgQml0cyB0byByb3RhdGUKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJvdGF0ZWQgdmFsdWUKKyAqLworI2RlZmluZSBfX1JPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yb3IKKworCisvKioKKyAgXGJyaWVmICAgQnJlYWtwb2ludAorICBcZGV0YWlscyBDYXVzZXMgdGhlIHByb2Nlc3NvciB0byBlbnRlciBEZWJ1ZyBzdGF0ZS4KKyAgICAgICAgICAgRGVidWcgdG9vbHMgY2FuIHVzZSB0aGlzIHRvIGludmVzdGlnYXRlIHN5c3RlbSBzdGF0ZSB3aGVuIHRoZSBpbnN0cnVjdGlvbiBhdCBhIHBhcnRpY3VsYXIgYWRkcmVzcyBpcyByZWFjaGVkLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgaXMgaWdub3JlZCBieSB0aGUgcHJvY2Vzc29yLgorICAgICAgICAgICAgICAgICBJZiByZXF1aXJlZCwgYSBkZWJ1Z2dlciBjYW4gdXNlIGl0IHRvIHN0b3JlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJyZWFrcG9pbnQuCisgKi8KKyNkZWZpbmUgX19CS1BUKHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgX19icmVha3BvaW50KHZhbHVlKQorCisKKy8qKgorICBcYnJpZWYgICBSZXZlcnNlIGJpdCBvcmRlciBvZiB2YWx1ZQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYml0IG9yZGVyIG9mIHRoZSBnaXZlbiB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlCisgKi8KKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpCisgICNkZWZpbmUgX19SQklUICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JiaXQKKyNlbHNlCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUkJJVCh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworICBpbnQzMl90IHMgPSA0IC8qc2l6ZW9mKHYpKi8gKiA4IC0gMTsgLyogZXh0cmEgc2hpZnQgbmVlZGVkIGF0IGVuZCAqLworCisgIHJlc3VsdCA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAvKiByIHdpbGwgYmUgcmV2ZXJzZWQgYml0cyBvZiB2OyBmaXJzdCBnZXQgTFNCIG9mIHYgKi8KKyAgZm9yICh2YWx1ZSA+Pj0gMVU7IHZhbHVlOyB2YWx1ZSA+Pj0gMVUpCisgIHsKKyAgICByZXN1bHQgPDw9IDFVOworICAgIHJlc3VsdCB8PSB2YWx1ZSAmIDFVOworICAgIHMtLTsKKyAgfQorICByZXN1bHQgPDw9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hpZnQgd2hlbiB2J3MgaGlnaGVzdCBiaXRzIGFyZSB6ZXJvICovCisgIHJldHVybihyZXN1bHQpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIENvdW50IGxlYWRpbmcgemVyb3MKKyAgXGRldGFpbHMgQ291bnRzIHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBhIGRhdGEgdmFsdWUuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gY291bnQgdGhlIGxlYWRpbmcgemVyb3MKKyAgXHJldHVybiAgICAgICAgICAgICBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBpbiB2YWx1ZQorICovCisjZGVmaW5lIF9fQ0xaICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NsegorCisKKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpCisKKy8qKgorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQ4X3QgYXQgKCpwdHIpCisgKi8KKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA8IDUwNjAwMjApCisgICNkZWZpbmUgX19MRFJFWEIocHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90ICkgX19sZHJleChwdHIpKQorI2Vsc2UKKyAgI2RlZmluZSBfX0xEUkVYQihwdHIpICAgICAgICAgIF9QcmFnbWEoInB1c2giKSBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDM3MzEiKSAoKHVpbnQ4X3QgKSBfX2xkcmV4KHB0cikpICBfUHJhZ21hKCJwb3AiKQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQorICovCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPCA1MDYwMDIwKQorICAjZGVmaW5lIF9fTERSRVhIKHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpIF9fbGRyZXgocHRyKSkKKyNlbHNlCisgICNkZWZpbmUgX19MRFJFWEgocHRyKSAgICAgICAgICBfUHJhZ21hKCJwdXNoIikgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcyAzNzMxIikgKCh1aW50MTZfdCkgX19sZHJleChwdHIpKSAgX1ByYWdtYSgicG9wIikKKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikKKyAqLworI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OIDwgNTA2MDAyMCkKKyAgI2RlZmluZSBfX0xEUkVYVyhwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90ICkgX19sZHJleChwdHIpKQorI2Vsc2UKKyAgI2RlZmluZSBfX0xEUkVYVyhwdHIpICAgICAgICAgIF9QcmFnbWEoInB1c2giKSBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDM3MzEiKSAoKHVpbnQzMl90ICkgX19sZHJleChwdHIpKSAgX1ByYWdtYSgicG9wIikKKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkCisgKi8KKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA8IDUwNjAwMjApCisgICNkZWZpbmUgX19TVFJFWEIodmFsdWUsIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJleCh2YWx1ZSwgcHRyKQorI2Vsc2UKKyAgI2RlZmluZSBfX1NUUkVYQih2YWx1ZSwgcHRyKSAgIF9QcmFnbWEoInB1c2giKSBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDM3MzEiKSBfX3N0cmV4KHZhbHVlLCBwdHIpICAgICAgICBfUHJhZ21hKCJwb3AiKQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZAorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZAorICovCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPCA1MDYwMDIwKQorICAjZGVmaW5lIF9fU1RSRVhIKHZhbHVlLCBwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZXgodmFsdWUsIHB0cikKKyNlbHNlCisgICNkZWZpbmUgX19TVFJFWEgodmFsdWUsIHB0cikgICBfUHJhZ21hKCJwdXNoIikgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcyAzNzMxIikgX19zdHJleCh2YWx1ZSwgcHRyKSAgICAgICAgX1ByYWdtYSgicG9wIikKKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQKKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQKKyAqLworI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OIDwgNTA2MDAyMCkKKyAgI2RlZmluZSBfX1NUUkVYVyh2YWx1ZSwgcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmV4KHZhbHVlLCBwdHIpCisjZWxzZQorICAjZGVmaW5lIF9fU1RSRVhXKHZhbHVlLCBwdHIpICAgX1ByYWdtYSgicHVzaCIpIF9QcmFnbWEoImRpYWdfc3VwcHJlc3MgMzczMSIpIF9fc3RyZXgodmFsdWUsIHB0cikgICAgICAgIF9QcmFnbWEoInBvcCIpCisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgUmVtb3ZlIHRoZSBleGNsdXNpdmUgbG9jaworICBcZGV0YWlscyBSZW1vdmVzIHRoZSBleGNsdXNpdmUgbG9jayB3aGljaCBpcyBjcmVhdGVkIGJ5IExEUkVYLgorICovCisjZGVmaW5lIF9fQ0xSRVggICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NscmV4CisKKworLyoqCisgIFxicmllZiAgIFNpZ25lZCBTYXR1cmF0ZQorICBcZGV0YWlscyBTYXR1cmF0ZXMgYSBzaWduZWQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gYmUgc2F0dXJhdGVkCisgIFxwYXJhbSBbaW5dICAgIHNhdCAgQml0IHBvc2l0aW9uIHRvIHNhdHVyYXRlIHRvICgxLi4zMikKKyAgXHJldHVybiAgICAgICAgICAgICBTYXR1cmF0ZWQgdmFsdWUKKyAqLworI2RlZmluZSBfX1NTQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zc2F0CisKKworLyoqCisgIFxicmllZiAgIFVuc2lnbmVkIFNhdHVyYXRlCisgIFxkZXRhaWxzIFNhdHVyYXRlcyBhbiB1bnNpZ25lZCB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBiZSBzYXR1cmF0ZWQKKyAgXHBhcmFtIFtpbl0gICAgc2F0ICBCaXQgcG9zaXRpb24gdG8gc2F0dXJhdGUgdG8gKDAuLjMxKQorICBccmV0dXJuICAgICAgICAgICAgIFNhdHVyYXRlZCB2YWx1ZQorICovCisjZGVmaW5lIF9fVVNBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VzYXQKKworCisvKioKKyAgXGJyaWVmICAgUm90YXRlIFJpZ2h0IHdpdGggRXh0ZW5kICgzMiBiaXQpCisgIFxkZXRhaWxzIE1vdmVzIGVhY2ggYml0IG9mIGEgYml0c3RyaW5nIHJpZ2h0IGJ5IG9uZSBiaXQuCisgICAgICAgICAgIFRoZSBjYXJyeSBpbnB1dCBpcyBzaGlmdGVkIGluIGF0IHRoZSBsZWZ0IGVuZCBvZiB0aGUgYml0c3RyaW5nLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcm90YXRlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSb3RhdGVkIHZhbHVlCisgKi8KKyNpZm5kZWYgX19OT19FTUJFRERFRF9BU00KK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5ycnhfdGV4dCIpKSkgX19TVEFUSUNfSU5MSU5FIF9fQVNNIHVpbnQzMl90IF9fUlJYKHVpbnQzMl90IHZhbHVlKQoreworICBycnggcjAsIHIwCisgIGJ4IGxyCit9CisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQ4X3QgYXQgKCpwdHIpCisgKi8KKyNkZWZpbmUgX19MRFJCVChwdHIpICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCApICBfX2xkcnQocHRyKSkKKworCisvKioKKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MTZfdCBhdCAoKnB0cikKKyAqLworI2RlZmluZSBfX0xEUkhUKHB0cikgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkgIF9fbGRydChwdHIpKQorCisKKy8qKgorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQzMl90IGF0ICgqcHRyKQorICovCisjZGVmaW5lIF9fTERSVChwdHIpICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90ICkgX19sZHJ0KHB0cikpCisKKworLyoqCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCisjZGVmaW5lIF9fU1RSQlQodmFsdWUsIHB0cikgICAgICAgICAgICAgICBfX3N0cnQodmFsdWUsIHB0cikKKworCisvKioKKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAqLworI2RlZmluZSBfX1NUUkhUKHZhbHVlLCBwdHIpICAgICAgICAgICAgICAgX19zdHJ0KHZhbHVlLCBwdHIpCisKKworLyoqCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgKi8KKyNkZWZpbmUgX19TVFJUKHZhbHVlLCBwdHIpICAgICAgICAgICAgICAgIF9fc3RydCh2YWx1ZSwgcHRyKQorCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPj0gMHgwM1UpIHx8IChfX0NPUlRFWF9TQyA+PSAzMDBVKSAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVfSW5zdHJ1Y3Rpb25JbnRlcmZhY2UgKi8KKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjICBDb21waWxlciBzcGVjaWZpYyBJbnRyaW5zaWNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKiBcZGVmZ3JvdXAgQ01TSVNfU0lNRF9pbnRyaW5zaWNzIENNU0lTIFNJTUQgSW50cmluc2ljcworICBBY2Nlc3MgdG8gZGVkaWNhdGVkIFNJTUQgaW5zdHJ1Y3Rpb25zCisgIEB7CisqLworCisjaWYgKF9fQ09SVEVYX00gPj0gMHgwNFUpICAvKiBvbmx5IGZvciBDb3J0ZXgtTTQgYW5kIGFib3ZlICovCisKKyNkZWZpbmUgX19TQUREOCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2FkZDgKKyNkZWZpbmUgX19RQUREOCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcWFkZDgKKyNkZWZpbmUgX19TSEFERDggICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2hhZGQ4CisjZGVmaW5lIF9fVUFERDggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VhZGQ4CisjZGVmaW5lIF9fVVFBREQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VxYWRkOAorI2RlZmluZSBfX1VIQUREOCAgICAgICAgICAgICAgICAgICAgICAgICAgX191aGFkZDgKKyNkZWZpbmUgX19TU1VCOCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3N1YjgKKyNkZWZpbmUgX19RU1VCOCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcXN1YjgKKyNkZWZpbmUgX19TSFNVQjggICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2hzdWI4CisjZGVmaW5lIF9fVVNVQjggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VzdWI4CisjZGVmaW5lIF9fVVFTVUI4ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Vxc3ViOAorI2RlZmluZSBfX1VIU1VCOCAgICAgICAgICAgICAgICAgICAgICAgICAgX191aHN1YjgKKyNkZWZpbmUgX19TQUREMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2FkZDE2CisjZGVmaW5lIF9fUUFERDE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3FhZGQxNgorI2RlZmluZSBfX1NIQUREMTYgICAgICAgICAgICAgICAgICAgICAgICAgX19zaGFkZDE2CisjZGVmaW5lIF9fVUFERDE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VhZGQxNgorI2RlZmluZSBfX1VRQUREMTYgICAgICAgICAgICAgICAgICAgICAgICAgX191cWFkZDE2CisjZGVmaW5lIF9fVUhBREQxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3VoYWRkMTYKKyNkZWZpbmUgX19TU1VCMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3N1YjE2CisjZGVmaW5lIF9fUVNVQjE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3FzdWIxNgorI2RlZmluZSBfX1NIU1VCMTYgICAgICAgICAgICAgICAgICAgICAgICAgX19zaHN1YjE2CisjZGVmaW5lIF9fVVNVQjE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VzdWIxNgorI2RlZmluZSBfX1VRU1VCMTYgICAgICAgICAgICAgICAgICAgICAgICAgX191cXN1YjE2CisjZGVmaW5lIF9fVUhTVUIxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Voc3ViMTYKKyNkZWZpbmUgX19TQVNYICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2FzeAorI2RlZmluZSBfX1FBU1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgX19xYXN4CisjZGVmaW5lIF9fU0hBU1ggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NoYXN4CisjZGVmaW5lIF9fVUFTWCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Vhc3gKKyNkZWZpbmUgX19VUUFTWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXFhc3gKKyNkZWZpbmUgX19VSEFTWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWhhc3gKKyNkZWZpbmUgX19TU0FYICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3NheAorI2RlZmluZSBfX1FTQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgX19xc2F4CisjZGVmaW5lIF9fU0hTQVggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Noc2F4CisjZGVmaW5lIF9fVVNBWCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VzYXgKKyNkZWZpbmUgX19VUVNBWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXFzYXgKKyNkZWZpbmUgX19VSFNBWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWhzYXgKKyNkZWZpbmUgX19VU0FEOCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXNhZDgKKyNkZWZpbmUgX19VU0FEQTggICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXNhZGE4CisjZGVmaW5lIF9fU1NBVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NzYXQxNgorI2RlZmluZSBfX1VTQVQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgX191c2F0MTYKKyNkZWZpbmUgX19VWFRCMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXh0YjE2CisjZGVmaW5lIF9fVVhUQUIxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3V4dGFiMTYKKyNkZWZpbmUgX19TWFRCMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3h0YjE2CisjZGVmaW5lIF9fU1hUQUIxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3N4dGFiMTYKKyNkZWZpbmUgX19TTVVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc211YWQKKyNkZWZpbmUgX19TTVVBRFggICAgICAgICAgICAgICAgICAgICAgICAgIF9fc211YWR4CisjZGVmaW5lIF9fU01MQUQgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtbGFkCisjZGVmaW5lIF9fU01MQURYICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtbGFkeAorI2RlZmluZSBfX1NNTEFMRCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbWxhbGQKKyNkZWZpbmUgX19TTUxBTERYICAgICAgICAgICAgICAgICAgICAgICAgIF9fc21sYWxkeAorI2RlZmluZSBfX1NNVVNEICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbXVzZAorI2RlZmluZSBfX1NNVVNEWCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbXVzZHgKKyNkZWZpbmUgX19TTUxTRCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc21sc2QKKyNkZWZpbmUgX19TTUxTRFggICAgICAgICAgICAgICAgICAgICAgICAgIF9fc21sc2R4CisjZGVmaW5lIF9fU01MU0xEICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtbHNsZAorI2RlZmluZSBfX1NNTFNMRFggICAgICAgICAgICAgICAgICAgICAgICAgX19zbWxzbGR4CisjZGVmaW5lIF9fU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlbAorI2RlZmluZSBfX1FBREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19xYWRkCisjZGVmaW5lIF9fUVNVQiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3FzdWIKKworI2RlZmluZSBfX1BLSEJUKEFSRzEsQVJHMixBUkczKSAgICAgICAgICAoICgoKCh1aW50MzJfdCkoQVJHMSkpICAgICAgICAgICkgJiAweDAwMDBGRkZGVUwpIHwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgodWludDMyX3QpKEFSRzIpKSA8PCAoQVJHMykpICYgMHhGRkZGMDAwMFVMKSAgKQorCisjZGVmaW5lIF9fUEtIVEIoQVJHMSxBUkcyLEFSRzMpICAgICAgICAgICggKCgoKHVpbnQzMl90KShBUkcxKSkgICAgICAgICAgKSAmIDB4RkZGRjAwMDBVTCkgfCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKCh1aW50MzJfdCkoQVJHMikpID4+IChBUkczKSkgJiAweDAwMDBGRkZGVUwpICApCisKKyNkZWZpbmUgX19TTU1MQShBUkcxLEFSRzIsQVJHMykgICAgICAgICAgKCAoaW50MzJfdCkoKCgoaW50NjRfdCkoQVJHMSkgKiAoQVJHMikpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbnQ2NF90KShBUkczKSA8PCAzMlUpICAgICApID4+IDMyVSkpCisKKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDA0KSAqLworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0lNRF9pbnRyaW5zaWNzICovCisKKworI2VuZGlmIC8qIF9fQ01TSVNfQVJNQ0NfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY21zaXNfYXJtY2NfVjYuaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2Ntc2lzX2FybWNjX1Y2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxMzI0MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2Ntc2lzX2FybWNjX1Y2LmgKQEAgLTAsMCArMSwxODAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY21zaXNfYXJtY2NfVjYuaAorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NIENvcmUgRnVuY3Rpb24vSW5zdHJ1Y3Rpb24gSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmbmRlZiBfX0NNU0lTX0FSTUNDX1Y2X0gKKyNkZWZpbmUgX19DTVNJU19BUk1DQ19WNl9ICisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDb3JlIEZ1bmN0aW9uIEFjY2VzcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgQ01TSVMgQ29yZSBSZWdpc3RlciBBY2Nlc3MgRnVuY3Rpb25zCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIEVuYWJsZSBJUlEgSW50ZXJydXB0cworICBcZGV0YWlscyBFbmFibGVzIElSUSBpbnRlcnJ1cHRzIGJ5IGNsZWFyaW5nIHRoZSBJLWJpdCBpbiB0aGUgQ1BTUi4KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZW5hYmxlX2lycSh2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoImNwc2llIGkiIDogOiA6ICJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBJUlEgSW50ZXJydXB0cworICBcZGV0YWlscyBEaXNhYmxlcyBJUlEgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBJLWJpdCBpbiB0aGUgQ1BTUi4KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZGlzYWJsZV9pcnEodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJjcHNpZCBpIiA6IDogOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBDb250cm9sIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIENvbnRyb2wgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfQ09OVFJPTCh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGNvbnRyb2wiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgR2V0IENvbnRyb2wgUmVnaXN0ZXIgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIG5vbi1zZWN1cmUgQ29udHJvbCBSZWdpc3RlciB3aGVuIGluIHNlY3VyZSBtb2RlLgorICBccmV0dXJuICAgICAgICAgICAgICAgbm9uLXNlY3VyZSBDb250cm9sIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfQ09OVFJPTF9OUyh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGNvbnRyb2xfbnMiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQ29udHJvbCBSZWdpc3RlcgorICBcZGV0YWlscyBXcml0ZXMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBDb250cm9sIFJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBjb250cm9sICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfQ09OVFJPTCh1aW50MzJfdCBjb250cm9sKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBjb250cm9sLCAlMCIgOiA6ICJyIiAoY29udHJvbCkgOiAibWVtb3J5Iik7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIFNldCBDb250cm9sIFJlZ2lzdGVyIChub24tc2VjdXJlKQorICBcZGV0YWlscyBXcml0ZXMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIENvbnRyb2wgUmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxwYXJhbSBbaW5dICAgIGNvbnRyb2wgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9DT05UUk9MX05TKHVpbnQzMl90IGNvbnRyb2wpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIGNvbnRyb2xfbnMsICUwIiA6IDogInIiIChjb250cm9sKSA6ICJtZW1vcnkiKTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBHZXQgSVBTUiBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBJUFNSIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgSVBTUiBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0lQU1Iodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBpcHNyIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIEdldCBJUFNSIFJlZ2lzdGVyIChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBub24tc2VjdXJlIElQU1IgUmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBJUFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfSVBTUl9OUyh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGlwc3JfbnMiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQVBTUiBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBBUFNSIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgQVBTUiBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0FQU1Iodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBhcHNyIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIEdldCBBUFNSIFJlZ2lzdGVyIChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBub24tc2VjdXJlIEFQU1IgUmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBBUFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfQVBTUl9OUyh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGFwc3JfbnMiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBHZXQgeFBTUiBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSB4UFNSIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgeFBTUiBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X3hQU1Iodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCB4cHNyIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIEdldCB4UFNSIFJlZ2lzdGVyIChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBub24tc2VjdXJlIHhQU1IgUmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxyZXR1cm4gICAgICAgICAgICAgICB4UFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfeFBTUl9OUyh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIHhwc3JfbnMiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIFBTUCBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X1BTUCh2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIHBzcCIgIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgR2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlciAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbm9uLXNlY3VyZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQU1AgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9QU1BfTlModm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBwc3BfbnMiICA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApLgorICBccGFyYW0gW2luXSAgICB0b3BPZlByb2NTdGFjayAgUHJvY2VzcyBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFNQKHVpbnQzMl90IHRvcE9mUHJvY1N0YWNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBwc3AsICUwIiA6IDogInIiICh0b3BPZlByb2NTdGFjaykgOiAic3AiKTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlciAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccGFyYW0gW2luXSAgICB0b3BPZlByb2NTdGFjayAgUHJvY2VzcyBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfUFNQX05TKHVpbnQzMl90IHRvcE9mUHJvY1N0YWNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBwc3BfbnMsICUwIiA6IDogInIiICh0b3BPZlByb2NTdGFjaykgOiAic3AiKTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBHZXQgTWFpbiBTdGFjayBQb2ludGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIE1TUCBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X01TUCh2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIG1zcCIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKy8qKgorICBcYnJpZWYgICBHZXQgTWFpbiBTdGFjayBQb2ludGVyIChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBub24tc2VjdXJlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIE1TUCBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X01TUF9OUyh2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIG1zcF9ucyIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFNldCBNYWluIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKS4KKyAgXHBhcmFtIFtpbl0gICAgdG9wT2ZNYWluU3RhY2sgIE1haW4gU3RhY2sgUG9pbnRlciB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X01TUCh1aW50MzJfdCB0b3BPZk1haW5TdGFjaykKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgbXNwLCAlMCIgOiA6ICJyIiAodG9wT2ZNYWluU3RhY2spIDogInNwIik7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIFNldCBNYWluIFN0YWNrIFBvaW50ZXIgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHBhcmFtIFtpbl0gICAgdG9wT2ZNYWluU3RhY2sgIE1haW4gU3RhY2sgUG9pbnRlciB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X01TUF9OUyh1aW50MzJfdCB0b3BPZk1haW5TdGFjaykKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgbXNwX25zLCAlMCIgOiA6ICJyIiAodG9wT2ZNYWluU3RhY2spIDogInNwIik7Cit9CisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgR2V0IFByaW9yaXR5IE1hc2sKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcHJpb3JpdHkgbWFzayBiaXQgZnJvbSB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgIFByaW9yaXR5IE1hc2sgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9QUklNQVNLKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgcHJpbWFzayIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKy8qKgorICBcYnJpZWYgICBHZXQgUHJpb3JpdHkgTWFzayAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgbm9uLXNlY3VyZSBwcmlvcml0eSBtYXNrIGJpdCBmcm9tIHRoZSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccmV0dXJuICAgICAgICAgICAgICAgUHJpb3JpdHkgTWFzayB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X1BSSU1BU0tfTlModm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBwcmltYXNrX25zIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgU2V0IFByaW9yaXR5IE1hc2sKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIHByaU1hc2sgIFByaW9yaXR5IE1hc2sKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BSSU1BU0sodWludDMyX3QgcHJpTWFzaykKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgcHJpbWFzaywgJTAiIDogOiAiciIgKHByaU1hc2spIDogIm1lbW9yeSIpOworfQorCisKKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKy8qKgorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgTWFzayAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgUHJpb3JpdHkgTWFzayBSZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHBhcmFtIFtpbl0gICAgcHJpTWFzayAgUHJpb3JpdHkgTWFzaworICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfUFJJTUFTS19OUyh1aW50MzJfdCBwcmlNYXNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBwcmltYXNrX25zLCAlMCIgOiA6ICJyIiAocHJpTWFzaykgOiAibWVtb3J5Iik7Cit9CisjZW5kaWYKKworCisjaWYgKChfX0FSTV9BUkNIXzdNX18gPT0gMVUpIHx8IChfX0FSTV9BUkNIXzdFTV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF84TV9fID09IDFVKSkgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgaWYgdGhpcyBpcyBvayBmb3IgY29ydGV4ID49MyAqLworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEZJUQorICBcZGV0YWlscyBFbmFibGVzIEZJUSBpbnRlcnJ1cHRzIGJ5IGNsZWFyaW5nIHRoZSBGLWJpdCBpbiB0aGUgQ1BTUi4KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZW5hYmxlX2ZhdWx0X2lycSh2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoImNwc2llIGYiIDogOiA6ICJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBGSVEKKyAgXGRldGFpbHMgRGlzYWJsZXMgRklRIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgRi1iaXQgaW4gdGhlIENQU1IuCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2Rpc2FibGVfZmF1bHRfaXJxKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiY3BzaWQgZiIgOiA6IDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQmFzZSBQcmlvcml0eQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgQmFzZSBQcmlvcml0eSByZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0JBU0VQUkkodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBiYXNlcHJpIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIEdldCBCYXNlIFByaW9yaXR5IChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBub24tc2VjdXJlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfQkFTRVBSSV9OUyh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGJhc2VwcmlfbnMiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0JBU0VQUkkodWludDMyX3QgdmFsdWUpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIGJhc2VwcmksICUwIiA6IDogInIiICh2YWx1ZSkgOiAibWVtb3J5Iik7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5IChub24tc2VjdXJlKQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccGFyYW0gW2luXSAgICBiYXNlUHJpICBCYXNlIFByaW9yaXR5IHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfQkFTRVBSSV9OUyh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgYmFzZXByaV9ucywgJTAiIDogOiAiciIgKHZhbHVlKSA6ICJtZW1vcnkiKTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eSB3aXRoIGNvbmRpdGlvbgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3RlciBvbmx5IGlmIEJBU0VQUkkgbWFza2luZyBpcyBkaXNhYmxlZCwKKyAgICAgICAgICAgb3IgdGhlIG5ldyB2YWx1ZSBpbmNyZWFzZXMgdGhlIEJBU0VQUkkgcHJpb3JpdHkgbGV2ZWwuCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJX01BWCh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgYmFzZXByaV9tYXgsICUwIiA6IDogInIiICh2YWx1ZSkgOiAibWVtb3J5Iik7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5IHdpdGggY29uZGl0aW9uIChub25fc2VjdXJlKQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlIG9ubHkgaWYgQkFTRVBSSSBtYXNraW5nIGlzIGRpc2FibGVkLAorCSAgICAgICBvciB0aGUgbmV3IHZhbHVlIGluY3JlYXNlcyB0aGUgQkFTRVBSSSBwcmlvcml0eSBsZXZlbC4KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X0JBU0VQUklfTUFYX05TKHVpbnQzMl90IHZhbHVlKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBiYXNlcHJpX21heF9ucywgJTAiIDogOiAiciIgKHZhbHVlKSA6ICJtZW1vcnkiKTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBHZXQgRmF1bHQgTWFzaworICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBGYXVsdCBNYXNrIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgRmF1bHQgTWFzayByZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZBVUxUTUFTSyh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGZhdWx0bWFzayIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKy8qKgorICBcYnJpZWYgICBHZXQgRmF1bHQgTWFzayAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbm9uLXNlY3VyZSBGYXVsdCBNYXNrIHJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccmV0dXJuICAgICAgICAgICAgICAgRmF1bHQgTWFzayByZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X0ZBVUxUTUFTS19OUyh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGZhdWx0bWFza19ucyIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFNldCBGYXVsdCBNYXNrCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBGYXVsdCBNYXNrIHJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBmYXVsdE1hc2sgIEZhdWx0IE1hc2sgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9GQVVMVE1BU0sodWludDMyX3QgZmF1bHRNYXNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBmYXVsdG1hc2ssICUwIiA6IDogInIiIChmYXVsdE1hc2spIDogIm1lbW9yeSIpOworfQorCisKKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKy8qKgorICBcYnJpZWYgICBTZXQgRmF1bHQgTWFzayAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgRmF1bHQgTWFzayByZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHBhcmFtIFtpbl0gICAgZmF1bHRNYXNrICBGYXVsdCBNYXNrIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfRkFVTFRNQVNLX05TKHVpbnQzMl90IGZhdWx0TWFzaykKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgZmF1bHRtYXNrX25zLCAlMCIgOiA6ICJyIiAoZmF1bHRNYXNrKSA6ICJtZW1vcnkiKTsKK30KKyNlbmRpZgorCisKKyNlbmRpZiAvKiAoKF9fQVJNX0FSQ0hfN01fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICovCisKKworI2lmIChfX0FSTV9BUkNIXzhNX18gPT0gMVUpCisKKy8qKgorICBcYnJpZWYgICBHZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0CisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCAoUFNQTElNKS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIFBTUExJTSBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X1BTUExJTSh2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIHBzcGxpbSIgIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpICYmIChfX0FSTV9BUkNIX1BST0ZJTEUgPT0gJ00nKSAgICAgLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBwcmVkZWZpbmVkIG1hY3JvIGZvciBtYWlubGluZSAqLworLyoqCisgIFxicmllZiAgIEdldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgTGltaXQgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG5vbi1zZWN1cmUgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0IChQU1BMSU0pIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccmV0dXJuICAgICAgICAgICAgICAgUFNQTElNIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfUFNQTElNX05TKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgcHNwbGltX25zIiAgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFNldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgTGltaXQKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCAoUFNQTElNKS4KKyAgXHBhcmFtIFtpbl0gICAgUHJvY1N0YWNrUHRyTGltaXQgIFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BTUExJTSh1aW50MzJfdCBQcm9jU3RhY2tQdHJMaW1pdCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgcHNwbGltLCAlMCIgOiA6ICJyIiAoUHJvY1N0YWNrUHRyTGltaXQpKTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpICYmIChfX0FSTV9BUkNIX1BST0ZJTEUgPT0gJ00nKSAgICAgLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBwcmVkZWZpbmVkIG1hY3JvIGZvciBtYWlubGluZSAqLworLyoqCisgIFxicmllZiAgIFNldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCAoUFNQTElNKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHBhcmFtIFtpbl0gICAgUHJvY1N0YWNrUHRyTGltaXQgIFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X1BTUExJTV9OUyh1aW50MzJfdCBQcm9jU3RhY2tQdHJMaW1pdCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgcHNwbGltX25zLCAlMFxuIiA6IDogInIiIChQcm9jU3RhY2tQdHJMaW1pdCkpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIEdldCBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTWFpbiBTdGFjayBQb2ludGVyIExpbWl0IChNU1BMSU0pLgorICBccmV0dXJuICAgICAgICAgICAgICAgTVNQTElNIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfTVNQTElNKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgbXNwbGltIiA6ICI9ciIgKHJlc3VsdCkgKTsKKworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpICYmIChfX0FSTV9BUkNIX1BST0ZJTEUgPT0gJ00nKSAgICAgLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBwcmVkZWZpbmVkIG1hY3JvIGZvciBtYWlubGluZSAqLworLyoqCisgIFxicmllZiAgIEdldCBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG5vbi1zZWN1cmUgTWFpbiBTdGFjayBQb2ludGVyIExpbWl0KE1TUExJTSkgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBNU1BMSU0gUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9NU1BMSU1fTlModm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBtc3BsaW1fbnMiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBTZXQgTWFpbiBTdGFjayBQb2ludGVyIExpbWl0CisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgKE1TUExJTSkuCisgIFxwYXJhbSBbaW5dICAgIE1haW5TdGFja1B0ckxpbWl0ICBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9NU1BMSU0odWludDMyX3QgTWFpblN0YWNrUHRyTGltaXQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIG1zcGxpbSwgJTAiIDogOiAiciIgKE1haW5TdGFja1B0ckxpbWl0KSk7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKSAmJiAoX19BUk1fQVJDSF9QUk9GSUxFID09ICdNJykgICAgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgcHJlZGVmaW5lZCBtYWNybyBmb3IgbWFpbmxpbmUgKi8KKy8qKgorICBcYnJpZWYgICBTZXQgTWFpbiBTdGFjayBQb2ludGVyIExpbWl0IChub24tc2VjdXJlKQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgKE1TUExJTSkgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxwYXJhbSBbaW5dICAgIE1haW5TdGFja1B0ckxpbWl0ICBNYWluIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9NU1BMSU1fTlModWludDMyX3QgTWFpblN0YWNrUHRyTGltaXQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIG1zcGxpbV9ucywgJTAiIDogOiAiciIgKE1haW5TdGFja1B0ckxpbWl0KSk7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIChfX0FSTV9BUkNIXzhNX18gPT0gMVUpICovCisKKworI2lmICgoX19BUk1fQVJDSF83RU1fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIHRoaXMgaXMgb2sgZm9yIGNvcnRleCA+PTQgKi8KKworLyoqCisgIFxicmllZiAgIEdldCBGUFNDUgorICBcZGV0YWlscyBldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIgdmFsdWUKKyAqLworI2RlZmluZSBfX2dldF9GUFNDUiAgICAgIF9fYnVpbHRpbl9hcm1fZ2V0X2Zwc2NyCisjaWYgMAorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9GUFNDUih2b2lkKQoreworI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLworICBfX0FTTSB2b2xhdGlsZSAoIlZNUlMgJTAsIGZwc2NyIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgX19BU00gdm9sYXRpbGUgKCIiKTsKKyAgcmV0dXJuKHJlc3VsdCk7CisjZWxzZQorICAgcmV0dXJuKDApOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIEdldCBGUFNDUiAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbm9uLXNlY3VyZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfRlBTQ1JfTlModm9pZCkKK3sKKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpCisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVtcHR5IGFzbSBzdGF0ZW1lbnQgd29ya3MgYXMgYSBzY2hlZHVsaW5nIGJhcnJpZXIgKi8KKyAgX19BU00gdm9sYXRpbGUgKCJWTVJTICUwLCBmcHNjcl9ucyIgOiAiPXIiIChyZXN1bHQpICk7CisgIF9fQVNNIHZvbGF0aWxlICgiIik7CisgIHJldHVybihyZXN1bHQpOworI2Vsc2UKKyAgIHJldHVybigwKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFNldCBGUFNDUgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIGZwc2NyICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCB2YWx1ZSB0byBzZXQKKyAqLworI2RlZmluZSBfX3NldF9GUFNDUiAgICAgIF9fYnVpbHRpbl9hcm1fc2V0X2Zwc2NyCisjaWYgMAorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0ZQU0NSKHVpbnQzMl90IGZwc2NyKQoreworI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkKKyAgX19BU00gdm9sYXRpbGUgKCIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBhc20gc3RhdGVtZW50IHdvcmtzIGFzIGEgc2NoZWR1bGluZyBiYXJyaWVyICovCisgIF9fQVNNIHZvbGF0aWxlICgiVk1TUiBmcHNjciwgJTAiIDogOiAiciIgKGZwc2NyKSA6ICJ2ZnBjYyIpOworICBfX0FTTSB2b2xhdGlsZSAoIiIpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIFNldCBGUFNDUiAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxwYXJhbSBbaW5dICAgIGZwc2NyICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X0ZQU0NSX05TKHVpbnQzMl90IGZwc2NyKQoreworI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkKKyAgX19BU00gdm9sYXRpbGUgKCIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBhc20gc3RhdGVtZW50IHdvcmtzIGFzIGEgc2NoZWR1bGluZyBiYXJyaWVyICovCisgIF9fQVNNIHZvbGF0aWxlICgiVk1TUiBmcHNjcl9ucywgJTAiIDogOiAiciIgKGZwc2NyKSA6ICJ2ZnBjYyIpOworICBfX0FTTSB2b2xhdGlsZSAoIiIpOworI2VuZGlmCit9CisjZW5kaWYKKworI2VuZGlmIC8qICgoX19BUk1fQVJDSF83RU1fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICovCisKKworCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX1JlZ0FjY0Z1bmN0aW9ucyAqLworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqIFxkZWZncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlIENNU0lTIENvcmUgSW5zdHJ1Y3Rpb24gSW50ZXJmYWNlCisgIEFjY2VzcyB0byBkZWRpY2F0ZWQgaW5zdHJ1Y3Rpb25zCisgIEB7CisqLworCisvKiBEZWZpbmUgbWFjcm9zIGZvciBwb3J0aW5nIHRvIGJvdGggdGh1bWIxIGFuZCB0aHVtYjIuCisgKiBGb3IgdGh1bWIxLCB1c2UgbG93IHJlZ2lzdGVyIChyMC1yNyksIHNwZWNpZmllZCBieSBjb25zdHJhaW50ICJsIgorICogT3RoZXJ3aXNlLCB1c2UgZ2VuZXJhbCByZWdpc3RlcnMsIHNwZWNpZmllZCBieSBjb25zdHJhaW50ICJyIiAqLworI2lmIGRlZmluZWQgKF9fdGh1bWJfXykgJiYgIWRlZmluZWQgKF9fdGh1bWIyX18pCisjZGVmaW5lIF9fQ01TSVNfR0NDX09VVF9SRUcocikgIj1sIiAocikKKyNkZWZpbmUgX19DTVNJU19HQ0NfVVNFX1JFRyhyKSAibCIgKHIpCisjZWxzZQorI2RlZmluZSBfX0NNU0lTX0dDQ19PVVRfUkVHKHIpICI9ciIgKHIpCisjZGVmaW5lIF9fQ01TSVNfR0NDX1VTRV9SRUcocikgInIiIChyKQorI2VuZGlmCisKKy8qKgorICBcYnJpZWYgICBObyBPcGVyYXRpb24KKyAgXGRldGFpbHMgTm8gT3BlcmF0aW9uIGRvZXMgbm90aGluZy4gVGhpcyBpbnN0cnVjdGlvbiBjYW4gYmUgdXNlZCBmb3IgY29kZSBhbGlnbm1lbnQgcHVycG9zZXMuCisgKi8KKyNkZWZpbmUgX19OT1AgICAgICAgICAgX19idWlsdGluX2FybV9ub3AKKworLyoqCisgIFxicmllZiAgIFdhaXQgRm9yIEludGVycnVwdAorICBcZGV0YWlscyBXYWl0IEZvciBJbnRlcnJ1cHQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgc3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIG9uZSBvZiBhIG51bWJlciBvZiBldmVudHMgb2NjdXJzLgorICovCisjZGVmaW5lIF9fV0ZJICAgICAgICAgIF9fYnVpbHRpbl9hcm1fd2ZpCisKKworLyoqCisgIFxicmllZiAgIFdhaXQgRm9yIEV2ZW50CisgIFxkZXRhaWxzIFdhaXQgRm9yIEV2ZW50IGlzIGEgaGludCBpbnN0cnVjdGlvbiB0aGF0IHBlcm1pdHMgdGhlIHByb2Nlc3NvciB0byBlbnRlcgorICAgICAgICAgICBhIGxvdy1wb3dlciBzdGF0ZSB1bnRpbCBvbmUgb2YgYSBudW1iZXIgb2YgZXZlbnRzIG9jY3Vycy4KKyAqLworI2RlZmluZSBfX1dGRSAgICAgICAgICBfX2J1aWx0aW5fYXJtX3dmZQorCisKKy8qKgorICBcYnJpZWYgICBTZW5kIEV2ZW50CisgIFxkZXRhaWxzIFNlbmQgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uLiBJdCBjYXVzZXMgYW4gZXZlbnQgdG8gYmUgc2lnbmFsZWQgdG8gdGhlIENQVS4KKyAqLworI2RlZmluZSBfX1NFViAgICAgICAgICBfX2J1aWx0aW5fYXJtX3NldgorCisKKy8qKgorICBcYnJpZWYgICBJbnN0cnVjdGlvbiBTeW5jaHJvbml6YXRpb24gQmFycmllcgorICBcZGV0YWlscyBJbnN0cnVjdGlvbiBTeW5jaHJvbml6YXRpb24gQmFycmllciBmbHVzaGVzIHRoZSBwaXBlbGluZSBpbiB0aGUgcHJvY2Vzc29yLAorICAgICAgICAgICBzbyB0aGF0IGFsbCBpbnN0cnVjdGlvbnMgZm9sbG93aW5nIHRoZSBJU0IgYXJlIGZldGNoZWQgZnJvbSBjYWNoZSBvciBtZW1vcnksCisgICAgICAgICAgIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWQuCisgKi8KKyNkZWZpbmUgX19JU0IoKSAgICAgICAgX19idWlsdGluX2FybV9pc2IoMHhGKTsKKworLyoqCisgIFxicmllZiAgIERhdGEgU3luY2hyb25pemF0aW9uIEJhcnJpZXIKKyAgXGRldGFpbHMgQWN0cyBhcyBhIHNwZWNpYWwga2luZCBvZiBEYXRhIE1lbW9yeSBCYXJyaWVyLgorICAgICAgICAgICBJdCBjb21wbGV0ZXMgd2hlbiBhbGwgZXhwbGljaXQgbWVtb3J5IGFjY2Vzc2VzIGJlZm9yZSB0aGlzIGluc3RydWN0aW9uIGNvbXBsZXRlLgorICovCisjZGVmaW5lIF9fRFNCKCkgICAgICAgIF9fYnVpbHRpbl9hcm1fZHNiKDB4Rik7CisKKworLyoqCisgIFxicmllZiAgIERhdGEgTWVtb3J5IEJhcnJpZXIKKyAgXGRldGFpbHMgRW5zdXJlcyB0aGUgYXBwYXJlbnQgb3JkZXIgb2YgdGhlIGV4cGxpY2l0IG1lbW9yeSBvcGVyYXRpb25zIGJlZm9yZQorICAgICAgICAgICBhbmQgYWZ0ZXIgdGhlIGluc3RydWN0aW9uLCB3aXRob3V0IGVuc3VyaW5nIHRoZWlyIGNvbXBsZXRpb24uCisgKi8KKyNkZWZpbmUgX19ETUIoKSAgICAgICAgX19idWlsdGluX2FybV9kbWIoMHhGKTsKKworCisvKioKKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgzMiBiaXQpCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGludGVnZXIgdmFsdWUuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQorICovCisjZGVmaW5lIF9fUkVWICAgICAgICAgIF9fYnVpbHRpbl9ic3dhcDMyCisKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciAoMTYgYml0KQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiB0d28gdW5zaWduZWQgc2hvcnQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworI2RlZmluZSBfX1JFVjE2ICAgICAgICAgIF9fYnVpbHRpbl9ic3dhcDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBpZiBfX2J1aWx0aW5fYnN3YXAxNiBjb3VsZCBiZSB1c2VkICovCisjaWYgMAorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JFVjE2KHVpbnQzMl90IHZhbHVlKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJyZXYxNiAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyAocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcgKHZhbHVlKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgaW4gc2lnbmVkIHNob3J0IHZhbHVlCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGEgc2lnbmVkIHNob3J0IHZhbHVlIHdpdGggc2lnbiBleHRlbnNpb24gdG8gaW50ZWdlci4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlCisgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIF9fYnVpbHRpbl9ic3dhcDE2IGNvdWxkIGJlIHVzZWQgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgaW50MzJfdCBfX1JFVlNIKGludDMyX3QgdmFsdWUpCit7CisgIGludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicmV2c2ggJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcgKHJlc3VsdCkgOiBfX0NNU0lTX0dDQ19VU0VfUkVHICh2YWx1ZSkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFJvdGF0ZSBSaWdodCBpbiB1bnNpZ25lZCB2YWx1ZSAoMzIgYml0KQorICBcZGV0YWlscyBSb3RhdGUgUmlnaHQgKGltbWVkaWF0ZSkgcHJvdmlkZXMgdGhlIHZhbHVlIG9mIHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIHJvdGF0ZWQgYnkgYSB2YXJpYWJsZSBudW1iZXIgb2YgYml0cy4KKyAgXHBhcmFtIFtpbl0gICAgb3AxICBWYWx1ZSB0byByb3RhdGUKKyAgXHBhcmFtIFtpbl0gICAgb3AyICBOdW1iZXIgb2YgQml0cyB0byByb3RhdGUKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJvdGF0ZWQgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JPUih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgcmV0dXJuIChvcDEgPj4gb3AyKSB8IChvcDEgPDwgKDMyVSAtIG9wMikpOworfQorCisKKy8qKgorICBcYnJpZWYgICBCcmVha3BvaW50CisgIFxkZXRhaWxzIENhdXNlcyB0aGUgcHJvY2Vzc29yIHRvIGVudGVyIERlYnVnIHN0YXRlLgorICAgICAgICAgICAgRGVidWcgdG9vbHMgY2FuIHVzZSB0aGlzIHRvIGludmVzdGlnYXRlIHN5c3RlbSBzdGF0ZSB3aGVuIHRoZSBpbnN0cnVjdGlvbiBhdCBhIHBhcnRpY3VsYXIgYWRkcmVzcyBpcyByZWFjaGVkLgorICAgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBpcyBpZ25vcmVkIGJ5IHRoZSBwcm9jZXNzb3IuCisgICAgICAgICAgICAgICAgICAgSWYgcmVxdWlyZWQsIGEgZGVidWdnZXIgY2FuIHVzZSBpdCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBicmVha3BvaW50LgorICovCisjZGVmaW5lIF9fQktQVCh2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fQVNNIHZvbGF0aWxlICgiYmtwdCAiI3ZhbHVlKQorCisKKy8qKgorICBcYnJpZWYgICBSZXZlcnNlIGJpdCBvcmRlciBvZiB2YWx1ZQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYml0IG9yZGVyIG9mIHRoZSBnaXZlbiB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlCisgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIF9fYnVpbHRpbl9hcm1fcmJpdCBpcyBzdXBwb3J0ZWQgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19SQklUKHVpbnQzMl90IHZhbHVlKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyNpZiAoKF9fQVJNX0FSQ0hfN01fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfN0VNX18gPT0gMVUpIHx8IChfX0FSTV9BUkNIXzhNX18gPT0gMVUpKSAgLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBpZiB0aGlzIGlzIG9rIGZvciBjb3J0ZXggPj0zICovCisgICBfX0FTTSB2b2xhdGlsZSAoInJiaXQgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKHZhbHVlKSApOworI2Vsc2UKKyAgaW50MzJfdCBzID0gNCAvKnNpemVvZih2KSovICogOCAtIDE7IC8qIGV4dHJhIHNoaWZ0IG5lZWRlZCBhdCBlbmQgKi8KKworICByZXN1bHQgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgLyogciB3aWxsIGJlIHJldmVyc2VkIGJpdHMgb2YgdjsgZmlyc3QgZ2V0IExTQiBvZiB2ICovCisgIGZvciAodmFsdWUgPj49IDFVOyB2YWx1ZTsgdmFsdWUgPj49IDFVKQorICB7CisgICAgcmVzdWx0IDw8PSAxVTsKKyAgICByZXN1bHQgfD0gdmFsdWUgJiAxVTsKKyAgICBzLS07CisgIH0KKyAgcmVzdWx0IDw8PSBzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNoaWZ0IHdoZW4gdidzIGhpZ2hlc3QgYml0cyBhcmUgemVybyAqLworI2VuZGlmCisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBDb3VudCBsZWFkaW5nIHplcm9zCisgIFxkZXRhaWxzIENvdW50cyB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2YgYSBkYXRhIHZhbHVlLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGNvdW50IHRoZSBsZWFkaW5nIHplcm9zCisgIFxyZXR1cm4gICAgICAgICAgICAgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3MgaW4gdmFsdWUKKyAqLworI2RlZmluZSBfX0NMWiAgICAgICAgICAgICBfX2J1aWx0aW5fY2x6CisKKworI2lmICgoX19BUk1fQVJDSF83TV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF83RU1fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIHRoaXMgaXMgb2sgZm9yIGNvcnRleCA+PTMgKi8KKworLyoqCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikKKyAqLworI2RlZmluZSBfX0xEUkVYQiAgICAgICAgKHVpbnQ4X3QpX19idWlsdGluX2FybV9sZHJleAorCisKKy8qKgorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MTZfdCBhdCAoKnB0cikKKyAqLworI2RlZmluZSBfX0xEUkVYSCAgICAgICAgKHVpbnQxNl90KV9fYnVpbHRpbl9hcm1fbGRyZXgKKworCisvKioKKyAgXGJyaWVmICAgTERSIEV4Y2x1c2l2ZSAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpCisgKi8KKyNkZWZpbmUgX19MRFJFWFcgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX2xkcmV4CisKKworLyoqCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQKKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQKKyAqLworI2RlZmluZSBfX1NUUkVYQiAgICAgICAgKHVpbnQzMl90KV9fYnVpbHRpbl9hcm1fc3RyZXgKKworCisvKioKKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkCisgKi8KKyNkZWZpbmUgX19TVFJFWEggICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX3N0cmV4CisKKworLyoqCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZAorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZAorICovCisjZGVmaW5lIF9fU1RSRVhXICAgICAgICAodWludDMyX3QpX19idWlsdGluX2FybV9zdHJleAorCisKKy8qKgorICBcYnJpZWYgICBSZW1vdmUgdGhlIGV4Y2x1c2l2ZSBsb2NrCisgIFxkZXRhaWxzIFJlbW92ZXMgdGhlIGV4Y2x1c2l2ZSBsb2NrIHdoaWNoIGlzIGNyZWF0ZWQgYnkgTERSRVguCisgKi8KKyNkZWZpbmUgX19DTFJFWCAgICAgICAgICAgICBfX2J1aWx0aW5fYXJtX2NscmV4CisKKworLyoqCisgIFxicmllZiAgIFNpZ25lZCBTYXR1cmF0ZQorICBcZGV0YWlscyBTYXR1cmF0ZXMgYSBzaWduZWQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gYmUgc2F0dXJhdGVkCisgIFxwYXJhbSBbaW5dICAgIHNhdCAgQml0IHBvc2l0aW9uIHRvIHNhdHVyYXRlIHRvICgxLi4zMikKKyAgXHJldHVybiAgICAgICAgICAgICBTYXR1cmF0ZWQgdmFsdWUKKyAqLworLyojZGVmaW5lIF9fU1NBVCAgICAgICAgICAgICBfX2J1aWx0aW5fYXJtX3NzYXQqLworI2RlZmluZSBfX1NTQVQoQVJHMSxBUkcyKSBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSk7IFwKKyAgX19BU00gKCJzc2F0ICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJJIiAoQVJHMiksICJyIiAoX19BUkcxKSApOyBcCisgIF9fUkVTOyBcCisgfSkKKworCisvKioKKyAgXGJyaWVmICAgVW5zaWduZWQgU2F0dXJhdGUKKyAgXGRldGFpbHMgU2F0dXJhdGVzIGFuIHVuc2lnbmVkIHZhbHVlLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGJlIHNhdHVyYXRlZAorICBccGFyYW0gW2luXSAgICBzYXQgIEJpdCBwb3NpdGlvbiB0byBzYXR1cmF0ZSB0byAoMC4uMzEpCisgIFxyZXR1cm4gICAgICAgICAgICAgU2F0dXJhdGVkIHZhbHVlCisgKi8KKyNkZWZpbmUgX19VU0FUICAgICAgICAgICAgIF9fYnVpbHRpbl9hcm1fdXNhdAorI2lmIDAKKyNkZWZpbmUgX19VU0FUKEFSRzEsQVJHMikgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXAorICBfX0FTTSAoInVzYXQgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwKKyAgX19SRVM7IFwKKyB9KQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFJvdGF0ZSBSaWdodCB3aXRoIEV4dGVuZCAoMzIgYml0KQorICBcZGV0YWlscyBNb3ZlcyBlYWNoIGJpdCBvZiBhIGJpdHN0cmluZyByaWdodCBieSBvbmUgYml0LgorICAgICAgICAgICBUaGUgY2FycnkgaW5wdXQgaXMgc2hpZnRlZCBpbiBhdCB0aGUgbGVmdCBlbmQgb2YgdGhlIGJpdHN0cmluZy4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJvdGF0ZQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUlJYKHVpbnQzMl90IHZhbHVlKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJycnggJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcgKHJlc3VsdCkgOiBfX0NNU0lTX0dDQ19VU0VfUkVHICh2YWx1ZSkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgX19MRFJCVCh2b2xhdGlsZSB1aW50OF90ICpwdHIpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcmJ0ICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqcHRyKSApOworICAgcmV0dXJuICgodWludDhfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovCit9CisKKworLyoqCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDE2X3QgYXQgKCpwdHIpCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDE2X3QgX19MRFJIVCh2b2xhdGlsZSB1aW50MTZfdCAqcHRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJsZHJodCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJRIiAoKnB0cikgKTsKKyAgIHJldHVybiAoKHVpbnQxNl90KSByZXN1bHQpOyAgICAvKiBBZGQgZXhwbGljaXQgdHlwZSBjYXN0IGhlcmUgKi8KK30KKworCisvKioKKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX0xEUlQodm9sYXRpbGUgdWludDMyX3QgKnB0cikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgIF9fQVNNIHZvbGF0aWxlICgibGRydCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJRIiAoKnB0cikgKTsKKyAgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RSQlQodWludDhfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDhfdCAqcHRyKQoreworICAgX19BU00gdm9sYXRpbGUgKCJzdHJidCAlMSwgJTAiIDogIj1RIiAoKnB0cikgOiAiciIgKCh1aW50MzJfdCl2YWx1ZSkgKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RSSFQodWludDE2X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQxNl90ICpwdHIpCit7CisgICBfX0FTTSB2b2xhdGlsZSAoInN0cmh0ICUxLCAlMCIgOiAiPVEiICgqcHRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworfQorCisKKy8qKgorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJUKHVpbnQzMl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MzJfdCAqcHRyKQoreworICAgX19BU00gdm9sYXRpbGUgKCJzdHJ0ICUxLCAlMCIgOiAiPVEiICgqcHRyKSA6ICJyIiAodmFsdWUpICk7Cit9CisKKyNlbmRpZiAvKiAoKF9fQVJNX0FSQ0hfN01fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfN0VNX18gPT0gMVUpIHx8IChfX0FSTV9BUkNIXzhNX18gPT0gMVUpKSAqLworCisKKyNpZiAoX19BUk1fQVJDSF84TV9fID09IDFVKQorCisvKioKKyAgXGJyaWVmICAgTG9hZC1BY3F1aXJlICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBMREFCIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQ4X3QgYXQgKCpwdHIpCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBfX0xEQUIodm9sYXRpbGUgdWludDhfdCAqcHRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJsZGFiICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqcHRyKSApOworICAgcmV0dXJuICgodWludDhfdCkgcmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgTG9hZC1BY3F1aXJlICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgTERBSCBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MTZfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MTZfdCBfX0xEQUgodm9sYXRpbGUgdWludDE2X3QgKnB0cikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgIF9fQVNNIHZvbGF0aWxlICgibGRhaCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJRIiAoKnB0cikgKTsKKyAgIHJldHVybiAoKHVpbnQxNl90KSByZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBMREEgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19MREEodm9sYXRpbGUgdWludDMyX3QgKnB0cikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgIF9fQVNNIHZvbGF0aWxlICgibGRhICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqcHRyKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFN0b3JlLVJlbGVhc2UgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFNUTEIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RMQih1aW50OF90IHZhbHVlLCB2b2xhdGlsZSB1aW50OF90ICpwdHIpCit7CisgICBfX0FTTSB2b2xhdGlsZSAoInN0bGIgJTEsICUwIiA6ICI9USIgKCpwdHIpIDogInIiICgodWludDMyX3QpdmFsdWUpICk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFN0b3JlLVJlbGVhc2UgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBTVExIIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVExIKHVpbnQxNl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MTZfdCAqcHRyKQoreworICAgX19BU00gdm9sYXRpbGUgKCJzdGxoICUxLCAlMCIgOiAiPVEiICgqcHRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworfQorCisKKy8qKgorICBcYnJpZWYgICBTdG9yZS1SZWxlYXNlICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgU1RMIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVEwodWludDMyX3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQzMl90ICpwdHIpCit7CisgICBfX0FTTSB2b2xhdGlsZSAoInN0bCAlMSwgJTAiIDogIj1RIiAoKnB0cikgOiAiciIgKCh1aW50MzJfdCl2YWx1ZSkgKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgTG9hZC1BY3F1aXJlIEV4Y2x1c2l2ZSAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgTERBQiBleGNsdXNpdmUgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikKKyAqLworI2RlZmluZSAgICAgX19MREFFWEIgICAgICAgICAgICAgICAgICh1aW50OF90KV9fYnVpbHRpbl9hcm1fbGRhZXgKKworCisvKioKKyAgXGJyaWVmICAgTG9hZC1BY3F1aXJlIEV4Y2x1c2l2ZSAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIExEQUggZXhjbHVzaXZlIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQorICovCisjZGVmaW5lICAgICBfX0xEQUVYSCAgICAgICAgICAgICAgICAgKHVpbnQxNl90KV9fYnVpbHRpbl9hcm1fbGRhZXgKKworCisvKioKKyAgXGJyaWVmICAgTG9hZC1BY3F1aXJlIEV4Y2x1c2l2ZSAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIExEQSBleGNsdXNpdmUgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpCisgKi8KKyNkZWZpbmUgICAgIF9fTERBRVggICAgICAgICAgICAgICAgICAodWludDMyX3QpX19idWlsdGluX2FybV9sZGFleAorCisKKy8qKgorICBcYnJpZWYgICBTdG9yZS1SZWxlYXNlIEV4Y2x1c2l2ZSAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgU1RMQiBleGNsdXNpdmUgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQKKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQKKyAqLworI2RlZmluZSAgICAgX19TVExFWEIgICAgICAgICAgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX3N0bGV4CisKKworLyoqCisgIFxicmllZiAgIFN0b3JlLVJlbGVhc2UgRXhjbHVzaXZlICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgU1RMSCBleGNsdXNpdmUgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkCisgKi8KKyNkZWZpbmUgICAgIF9fU1RMRVhIICAgICAgICAgICAgICAgICAodWludDMyX3QpX19idWlsdGluX2FybV9zdGxleAorCisKKy8qKgorICBcYnJpZWYgICBTdG9yZS1SZWxlYXNlIEV4Y2x1c2l2ZSAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFNUTCBleGNsdXNpdmUgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkCisgKi8KKyNkZWZpbmUgICAgIF9fU1RMRVggICAgICAgICAgICAgICAgICAodWludDMyX3QpX19idWlsdGluX2FybV9zdGxleAorCisjZW5kaWYgLyogKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlICovCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29tcGlsZXIgc3BlY2lmaWMgSW50cmluc2ljcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGRlZmdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyBDTVNJUyBTSU1EIEludHJpbnNpY3MKKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBTSU1EIGluc3RydWN0aW9ucworICBAeworKi8KKworI2lmIChfX0FSTV9GRUFUVVJFX0RTUCA9PSAxVSkgICAgICAgIC8qIFRvRG86ICBBUk1DQ19WNjogVGhpcyBzaG91bGQgYmUgQVJDSCA+PSBBUk12Ny1NICsgU0lNRCAqLworCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0FERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaGFkZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWFkZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic3N1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicXN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSFNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1c3ViOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXFzdWI4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aHN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2FkZDE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUUFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSEFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaGFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1YWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUUFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cWFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic3N1YjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUVNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSFNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaHN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1c3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUVNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cXN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNhc3ggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWFzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cWFzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aGFzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNzYXggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXNheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cXNheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aHNheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTQUQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1c2FkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTQURBOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1c2FkYTggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKyNkZWZpbmUgX19TU0FUMTYoQVJHMSxBUkcyKSBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcCisgIF9fQVNNICgic3NhdDE2ICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJJIiAoQVJHMiksICJyIiAoX19BUkcxKSApOyBcCisgIF9fUkVTOyBcCisgfSkKKworI2RlZmluZSBfX1VTQVQxNihBUkcxLEFSRzIpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSk7IFwKKyAgX19BU00gKCJ1c2F0MTYgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVhUQjE2KHVpbnQzMl90IG9wMSkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXh0YjE2ICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VWFRBQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1eHRhYjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1hUQjE2KHVpbnQzMl90IG9wMSkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic3h0YjE2ICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TWFRBQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzeHRhYjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VQUQgICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic211YWQgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVBRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbXVhZHggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxBRCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxBRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTEFMRCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykKK3sKKyAgdW5pb24gbGxyZWdfdXsKKyAgICB1aW50MzJfdCB3MzJbMl07CisgICAgdWludDY0X3QgdzY0OworICB9IGxscjsKKyAgbGxyLnc2NCA9IGFjYzsKKworI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWxkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMF0pLCAiPXIiIChsbHIudzMyWzFdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMF0pLCAiMSIgKGxsci53MzJbMV0pICk7CisjZWxzZSAgICAgICAgICAgICAgIC8qIEJpZyBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxhbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlsxXSksICI9ciIgKGxsci53MzJbMF0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlsxXSksICIxIiAobGxyLnczMlswXSkgKTsKKyNlbmRpZgorCisgIHJldHVybihsbHIudzY0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTEFMRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpCit7CisgIHVuaW9uIGxscmVnX3V7CisgICAgdWludDMyX3QgdzMyWzJdOworICAgIHVpbnQ2NF90IHc2NDsKKyAgfSBsbHI7CisgIGxsci53NjQgPSBhY2M7CisKKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlswXSksICI9ciIgKGxsci53MzJbMV0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlswXSksICIxIiAobGxyLnczMlsxXSkgKTsKKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlsxXSksICI9ciIgKGxsci53MzJbMF0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlsxXSksICIxIiAobGxyLnczMlswXSkgKTsKKyNlbmRpZgorCisgIHJldHVybihsbHIudzY0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVVNEICAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtdXNkICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VU0RYICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic211c2R4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MU0QgKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSwgInIiIChvcDMpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MU0RYICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDY0X3QgX19TTUxTTEQgKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpCit7CisgIHVuaW9uIGxscmVnX3V7CisgICAgdWludDMyX3QgdzMyWzJdOworICAgIHVpbnQ2NF90IHc2NDsKKyAgfSBsbHI7CisgIGxsci53NjQgPSBhY2M7CisKKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzBdKSwgIj1yIiAobGxyLnczMlsxXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzBdKSwgIjEiIChsbHIudzMyWzFdKSApOworI2Vsc2UgICAgICAgICAgICAgICAvKiBCaWcgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sc2xkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMV0pLCAiPXIiIChsbHIudzMyWzBdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMV0pLCAiMSIgKGxsci53MzJbMF0pICk7CisjZW5kaWYKKworICByZXR1cm4obGxyLnc2NCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDY0X3QgX19TTUxTTERYICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQoreworICB1bmlvbiBsbHJlZ191eworICAgIHVpbnQzMl90IHczMlsyXTsKKyAgICB1aW50NjRfdCB3NjQ7CisgIH0gbGxyOworICBsbHIudzY0ID0gYWNjOworCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzbGR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMF0pLCAiPXIiIChsbHIudzMyWzFdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMF0pLCAiMSIgKGxsci53MzJbMV0pICk7CisjZWxzZSAgICAgICAgICAgICAgIC8qIEJpZyBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzbGR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMV0pLCAiPXIiIChsbHIudzMyWzBdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMV0pLCAiMSIgKGxsci53MzJbMF0pICk7CisjZW5kaWYKKworICByZXR1cm4obGxyLnc2NCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TRUwgICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2VsICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FICBpbnQzMl90IF9fUUFERCggaW50MzJfdCBvcDEsICBpbnQzMl90IG9wMikKK3sKKyAgaW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxYWRkICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FICBpbnQzMl90IF9fUVNVQiggaW50MzJfdCBvcDEsICBpbnQzMl90IG9wMikKK3sKKyAgaW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc3ViICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisjZGVmaW5lIF9fUEtIQlQoQVJHMSxBUkcyLEFSRzMpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSksIF9fQVJHMiA9IChBUkcyKTsgXAorICBfX0FTTSAoInBraGJ0ICUwLCAlMSwgJTIsIGxzbCAlMyIgOiAiPXIiIChfX1JFUykgOiAgInIiIChfX0FSRzEpLCAiciIgKF9fQVJHMiksICJJIiAoQVJHMykgICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCisjZGVmaW5lIF9fUEtIVEIoQVJHMSxBUkcyLEFSRzMpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSksIF9fQVJHMiA9IChBUkcyKTsgXAorICBpZiAoQVJHMyA9PSAwKSBcCisgICAgX19BU00gKCJwa2h0YiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSAgKTsgXAorICBlbHNlIFwKKyAgICBfX0FTTSAoInBraHRiICUwLCAlMSwgJTIsIGFzciAlMyIgOiAiPXIiIChfX1JFUykgOiAgInIiIChfX0FSRzEpLCAiciIgKF9fQVJHMiksICJJIiAoQVJHMykgICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01NTEEgKGludDMyX3Qgb3AxLCBpbnQzMl90IG9wMiwgaW50MzJfdCBvcDMpCit7CisgaW50MzJfdCByZXN1bHQ7CisKKyBfX0FTTSB2b2xhdGlsZSAoInNtbWxhICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKHJlc3VsdCk6ICJyIiAgKG9wMSksICJyIiAob3AyKSwgInIiIChvcDMpICk7CisgcmV0dXJuKHJlc3VsdCk7Cit9CisKKyNlbmRpZiAvKiAoX19BUk1fRkVBVFVSRV9EU1AgPT0gMVUpICovCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgKi8KKworCisjZW5kaWYgLyogX19DTVNJU19BUk1DQ19WNl9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jbXNpc19nY2MuaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2Ntc2lzX2djYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODlmYmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jbXNpc19nY2MuaApAQCAtMCwwICsxLDEzNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjbXNpc19nY2MuaAorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NIENvcmUgRnVuY3Rpb24vSW5zdHJ1Y3Rpb24gSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmbmRlZiBfX0NNU0lTX0dDQ19ICisjZGVmaW5lIF9fQ01TSVNfR0NDX0gKKworLyogaWdub3JlIHNvbWUgR0NDIHdhcm5pbmdzICovCisjaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3NpZ24tY29udmVyc2lvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1wYXJhbWV0ZXIiCisjZW5kaWYKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgRnVuY3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKiBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICAgIFxkZWZncm91cCBDTVNJU19Db3JlX1JlZ0FjY0Z1bmN0aW9ucyBDTVNJUyBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIElSUSBJbnRlcnJ1cHRzCisgIFxkZXRhaWxzIEVuYWJsZXMgSVJRIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIEktYml0IGluIHRoZSBDUFNSLgorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLgorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZW5hYmxlX2lycSh2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoImNwc2llIGkiIDogOiA6ICJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBJUlEgSW50ZXJydXB0cworICBcZGV0YWlscyBEaXNhYmxlcyBJUlEgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBJLWJpdCBpbiB0aGUgQ1BTUi4KKyAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4KKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2Rpc2FibGVfaXJxKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiY3BzaWQgaSIgOiA6IDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQ29udHJvbCBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBDb250cm9sIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgQ29udHJvbCBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9DT05UUk9MKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgY29udHJvbCIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQ29udHJvbCBSZWdpc3RlcgorICBcZGV0YWlscyBXcml0ZXMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBDb250cm9sIFJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBjb250cm9sICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0NPTlRST0wodWludDMyX3QgY29udHJvbCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgY29udHJvbCwgJTAiIDogOiAiciIgKGNvbnRyb2wpIDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgSVBTUiBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBJUFNSIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgSVBTUiBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9JUFNSKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgaXBzciIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQVBTUiBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBBUFNSIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgQVBTUiBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9BUFNSKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgYXBzciIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgeFBTUiBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSB4UFNSIFJlZ2lzdGVyLgorCisgICAgXHJldHVybiAgICAgICAgICAgICAgIHhQU1IgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfeFBTUih2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIHhwc3IiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQU1AgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfUFNQKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgcHNwXG4iICA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKS4KKyAgXHBhcmFtIFtpbl0gICAgdG9wT2ZQcm9jU3RhY2sgIFByb2Nlc3MgU3RhY2sgUG9pbnRlciB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9QU1AodWludDMyX3QgdG9wT2ZQcm9jU3RhY2spCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIHBzcCwgJTBcbiIgOiA6ICJyIiAodG9wT2ZQcm9jU3RhY2spIDogInNwIik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBNYWluIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLgorICBccmV0dXJuICAgICAgICAgICAgICAgTVNQIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X01TUCh2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIG1zcFxuIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBNYWluIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKS4KKworICAgIFxwYXJhbSBbaW5dICAgIHRvcE9mTWFpblN0YWNrICBNYWluIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfTVNQKHVpbnQzMl90IHRvcE9mTWFpblN0YWNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBtc3AsICUwXG4iIDogOiAiciIgKHRvcE9mTWFpblN0YWNrKSA6ICJzcCIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUHJpb3JpdHkgTWFzaworICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwcmlvcml0eSBtYXNrIGJpdCBmcm9tIHRoZSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgUHJpb3JpdHkgTWFzayB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9QUklNQVNLKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgcHJpbWFzayIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgTWFzaworICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgcHJpTWFzayAgUHJpb3JpdHkgTWFzaworICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BSSU1BU0sodWludDMyX3QgcHJpTWFzaykKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgcHJpbWFzaywgJTAiIDogOiAiciIgKHByaU1hc2spIDogIm1lbW9yeSIpOworfQorCisKKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkKKworLyoqCisgIFxicmllZiAgIEVuYWJsZSBGSVEKKyAgXGRldGFpbHMgRW5hYmxlcyBGSVEgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgRi1iaXQgaW4gdGhlIENQU1IuCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19lbmFibGVfZmF1bHRfaXJxKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiY3BzaWUgZiIgOiA6IDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIEZJUQorICBcZGV0YWlscyBEaXNhYmxlcyBGSVEgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBGLWJpdCBpbiB0aGUgQ1BTUi4KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4KKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2Rpc2FibGVfZmF1bHRfaXJxKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiY3BzaWQgZiIgOiA6IDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQmFzZSBQcmlvcml0eQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgQmFzZSBQcmlvcml0eSByZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9CQVNFUFJJKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgYmFzZXByaSIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJKHVpbnQzMl90IHZhbHVlKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBiYXNlcHJpLCAlMCIgOiA6ICJyIiAodmFsdWUpIDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eSB3aXRoIGNvbmRpdGlvbgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3RlciBvbmx5IGlmIEJBU0VQUkkgbWFza2luZyBpcyBkaXNhYmxlZCwKKyAgICAgICAgICAgb3IgdGhlIG5ldyB2YWx1ZSBpbmNyZWFzZXMgdGhlIEJBU0VQUkkgcHJpb3JpdHkgbGV2ZWwuCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfQkFTRVBSSV9NQVgodWludDMyX3QgdmFsdWUpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIGJhc2VwcmlfbWF4LCAlMCIgOiA6ICJyIiAodmFsdWUpIDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgRmF1bHQgTWFzaworICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBGYXVsdCBNYXNrIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgRmF1bHQgTWFzayByZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9GQVVMVE1BU0sodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBmYXVsdG1hc2siIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IEZhdWx0IE1hc2sKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEZhdWx0IE1hc2sgcmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIGZhdWx0TWFzayAgRmF1bHQgTWFzayB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9GQVVMVE1BU0sodWludDMyX3QgZmF1bHRNYXNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBmYXVsdG1hc2ssICUwIiA6IDogInIiIChmYXVsdE1hc2spIDogIm1lbW9yeSIpOworfQorCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPj0gMHgwM1UpICovCisKKworI2lmICAgICAgIChfX0NPUlRFWF9NID09IDB4MDRVKSB8fCAoX19DT1JURVhfTSA9PSAweDA3VSkKKworLyoqCisgIFxicmllZiAgIEdldCBGUFNDUgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZQU0NSKHZvaWQpCit7CisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQorICB1aW50MzJfdCByZXN1bHQ7CisKKyAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLworICBfX0FTTSB2b2xhdGlsZSAoIiIpOworICBfX0FTTSB2b2xhdGlsZSAoIlZNUlMgJTAsIGZwc2NyIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgX19BU00gdm9sYXRpbGUgKCIiKTsKKyAgcmV0dXJuKHJlc3VsdCk7CisjZWxzZQorICAgcmV0dXJuKDApOworI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBGUFNDUgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIGZwc2NyICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9GUFNDUih1aW50MzJfdCBmcHNjcikKK3sKKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpCisgIC8qIEVtcHR5IGFzbSBzdGF0ZW1lbnQgd29ya3MgYXMgYSBzY2hlZHVsaW5nIGJhcnJpZXIgKi8KKyAgX19BU00gdm9sYXRpbGUgKCIiKTsKKyAgX19BU00gdm9sYXRpbGUgKCJWTVNSIGZwc2NyLCAlMCIgOiA6ICJyIiAoZnBzY3IpIDogInZmcGNjIik7CisgIF9fQVNNIHZvbGF0aWxlICgiIik7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIChfX0NPUlRFWF9NID09IDB4MDRVKSB8fCAoX19DT1JURVhfTSA9PSAweDA3VSkgKi8KKworCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zICovCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGRlZmdyb3VwIENNU0lTX0NvcmVfSW5zdHJ1Y3Rpb25JbnRlcmZhY2UgQ01TSVMgQ29yZSBJbnN0cnVjdGlvbiBJbnRlcmZhY2UKKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBpbnN0cnVjdGlvbnMKKyAgQHsKKyovCisKKy8qIERlZmluZSBtYWNyb3MgZm9yIHBvcnRpbmcgdG8gYm90aCB0aHVtYjEgYW5kIHRodW1iMi4KKyAqIEZvciB0aHVtYjEsIHVzZSBsb3cgcmVnaXN0ZXIgKHIwLXI3KSwgc3BlY2lmaWVkIGJ5IGNvbnN0cmFpbnQgImwiCisgKiBPdGhlcndpc2UsIHVzZSBnZW5lcmFsIHJlZ2lzdGVycywgc3BlY2lmaWVkIGJ5IGNvbnN0cmFpbnQgInIiICovCisjaWYgZGVmaW5lZCAoX190aHVtYl9fKSAmJiAhZGVmaW5lZCAoX190aHVtYjJfXykKKyNkZWZpbmUgX19DTVNJU19HQ0NfT1VUX1JFRyhyKSAiPWwiIChyKQorI2RlZmluZSBfX0NNU0lTX0dDQ19VU0VfUkVHKHIpICJsIiAocikKKyNlbHNlCisjZGVmaW5lIF9fQ01TSVNfR0NDX09VVF9SRUcocikgIj1yIiAocikKKyNkZWZpbmUgX19DTVNJU19HQ0NfVVNFX1JFRyhyKSAiciIgKHIpCisjZW5kaWYKKworLyoqCisgIFxicmllZiAgIE5vIE9wZXJhdGlvbgorICBcZGV0YWlscyBObyBPcGVyYXRpb24gZG9lcyBub3RoaW5nLiBUaGlzIGluc3RydWN0aW9uIGNhbiBiZSB1c2VkIGZvciBjb2RlIGFsaWdubWVudCBwdXJwb3Nlcy4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fTk9QKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgibm9wIik7Cit9CisKKworLyoqCisgIFxicmllZiAgIFdhaXQgRm9yIEludGVycnVwdAorICBcZGV0YWlscyBXYWl0IEZvciBJbnRlcnJ1cHQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgc3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIG9uZSBvZiBhIG51bWJlciBvZiBldmVudHMgb2NjdXJzLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19XRkkodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJ3ZmkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgV2FpdCBGb3IgRXZlbnQKKyAgXGRldGFpbHMgV2FpdCBGb3IgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgcGVybWl0cyB0aGUgcHJvY2Vzc29yIHRvIGVudGVyCisgICAgYSBsb3ctcG93ZXIgc3RhdGUgdW50aWwgb25lIG9mIGEgbnVtYmVyIG9mIGV2ZW50cyBvY2N1cnMuCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1dGRSh2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoIndmZSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZW5kIEV2ZW50CisgIFxkZXRhaWxzIFNlbmQgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uLiBJdCBjYXVzZXMgYW4gZXZlbnQgdG8gYmUgc2lnbmFsZWQgdG8gdGhlIENQVS4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU0VWKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgic2V2Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEluc3RydWN0aW9uIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyCisgIFxkZXRhaWxzIEluc3RydWN0aW9uIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyIGZsdXNoZXMgdGhlIHBpcGVsaW5lIGluIHRoZSBwcm9jZXNzb3IsCisgICAgICAgICAgIHNvIHRoYXQgYWxsIGluc3RydWN0aW9ucyBmb2xsb3dpbmcgdGhlIElTQiBhcmUgZmV0Y2hlZCBmcm9tIGNhY2hlIG9yIG1lbW9yeSwKKyAgICAgICAgICAgYWZ0ZXIgdGhlIGluc3RydWN0aW9uIGhhcyBiZWVuIGNvbXBsZXRlZC4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fSVNCKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiaXNiIDB4RiI6OjoibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIERhdGEgU3luY2hyb25pemF0aW9uIEJhcnJpZXIKKyAgXGRldGFpbHMgQWN0cyBhcyBhIHNwZWNpYWwga2luZCBvZiBEYXRhIE1lbW9yeSBCYXJyaWVyLgorICAgICAgICAgICBJdCBjb21wbGV0ZXMgd2hlbiBhbGwgZXhwbGljaXQgbWVtb3J5IGFjY2Vzc2VzIGJlZm9yZSB0aGlzIGluc3RydWN0aW9uIGNvbXBsZXRlLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19EU0Iodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJkc2IgMHhGIjo6OiJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGF0YSBNZW1vcnkgQmFycmllcgorICBcZGV0YWlscyBFbnN1cmVzIHRoZSBhcHBhcmVudCBvcmRlciBvZiB0aGUgZXhwbGljaXQgbWVtb3J5IG9wZXJhdGlvbnMgYmVmb3JlCisgICAgICAgICAgIGFuZCBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24sIHdpdGhvdXQgZW5zdXJpbmcgdGhlaXIgY29tcGxldGlvbi4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fRE1CKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiZG1iIDB4RiI6OjoibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciAoMzIgYml0KQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiBpbnRlZ2VyIHZhbHVlLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JFVih1aW50MzJfdCB2YWx1ZSkKK3sKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA1KQorICByZXR1cm4gX19idWlsdGluX2Jzd2FwMzIodmFsdWUpOworI2Vsc2UKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicmV2ICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHIChyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyAodmFsdWUpICk7CisgIHJldHVybihyZXN1bHQpOworI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciAoMTYgYml0KQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiB0d28gdW5zaWduZWQgc2hvcnQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JFVjE2KHVpbnQzMl90IHZhbHVlKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJyZXYxNiAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyAocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcgKHZhbHVlKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyIGluIHNpZ25lZCBzaG9ydCB2YWx1ZQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiBhIHNpZ25lZCBzaG9ydCB2YWx1ZSB3aXRoIHNpZ24gZXh0ZW5zaW9uIHRvIGludGVnZXIuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIGludDMyX3QgX19SRVZTSChpbnQzMl90IHZhbHVlKQoreworI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDgpCisgIHJldHVybiAoc2hvcnQpX19idWlsdGluX2Jzd2FwMTYodmFsdWUpOworI2Vsc2UKKyAgaW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJyZXZzaCAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyAocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcgKHZhbHVlKSApOworICByZXR1cm4ocmVzdWx0KTsKKyNlbmRpZgorfQorCisKKy8qKgorICBcYnJpZWYgICBSb3RhdGUgUmlnaHQgaW4gdW5zaWduZWQgdmFsdWUgKDMyIGJpdCkKKyAgXGRldGFpbHMgUm90YXRlIFJpZ2h0IChpbW1lZGlhdGUpIHByb3ZpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciByb3RhdGVkIGJ5IGEgdmFyaWFibGUgbnVtYmVyIG9mIGJpdHMuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByb3RhdGUKKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIE51bWJlciBvZiBCaXRzIHRvIHJvdGF0ZQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUk9SKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICByZXR1cm4gKG9wMSA+PiBvcDIpIHwgKG9wMSA8PCAoMzJVIC0gb3AyKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEJyZWFrcG9pbnQKKyAgXGRldGFpbHMgQ2F1c2VzIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXIgRGVidWcgc3RhdGUuCisgICAgICAgICAgIERlYnVnIHRvb2xzIGNhbiB1c2UgdGhpcyB0byBpbnZlc3RpZ2F0ZSBzeXN0ZW0gc3RhdGUgd2hlbiB0aGUgaW5zdHJ1Y3Rpb24gYXQgYSBwYXJ0aWN1bGFyIGFkZHJlc3MgaXMgcmVhY2hlZC4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIGlzIGlnbm9yZWQgYnkgdGhlIHByb2Nlc3Nvci4KKyAgICAgICAgICAgICAgICAgSWYgcmVxdWlyZWQsIGEgZGVidWdnZXIgY2FuIHVzZSBpdCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBicmVha3BvaW50LgorICovCisjZGVmaW5lIF9fQktQVCh2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fQVNNIHZvbGF0aWxlICgiYmtwdCAiI3ZhbHVlKQorCisKKy8qKgorICBcYnJpZWYgICBSZXZlcnNlIGJpdCBvcmRlciBvZiB2YWx1ZQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYml0IG9yZGVyIG9mIHRoZSBnaXZlbiB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19SQklUKHVpbnQzMl90IHZhbHVlKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpCisgICBfX0FTTSB2b2xhdGlsZSAoInJiaXQgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKHZhbHVlKSApOworI2Vsc2UKKyAgaW50MzJfdCBzID0gNCAvKnNpemVvZih2KSovICogOCAtIDE7IC8qIGV4dHJhIHNoaWZ0IG5lZWRlZCBhdCBlbmQgKi8KKworICByZXN1bHQgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgLyogciB3aWxsIGJlIHJldmVyc2VkIGJpdHMgb2YgdjsgZmlyc3QgZ2V0IExTQiBvZiB2ICovCisgIGZvciAodmFsdWUgPj49IDFVOyB2YWx1ZTsgdmFsdWUgPj49IDFVKQorICB7CisgICAgcmVzdWx0IDw8PSAxVTsKKyAgICByZXN1bHQgfD0gdmFsdWUgJiAxVTsKKyAgICBzLS07CisgIH0KKyAgcmVzdWx0IDw8PSBzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNoaWZ0IHdoZW4gdidzIGhpZ2hlc3QgYml0cyBhcmUgemVybyAqLworI2VuZGlmCisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBDb3VudCBsZWFkaW5nIHplcm9zCisgIFxkZXRhaWxzIENvdW50cyB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2YgYSBkYXRhIHZhbHVlLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGNvdW50IHRoZSBsZWFkaW5nIHplcm9zCisgIFxyZXR1cm4gICAgICAgICAgICAgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3MgaW4gdmFsdWUKKyAqLworI2RlZmluZSBfX0NMWiAgICAgICAgICAgICBfX2J1aWx0aW5fY2x6CisKKworI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkKKworLyoqCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50OF90IF9fTERSRVhCKHZvbGF0aWxlIHVpbnQ4X3QgKmFkZHIpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisjaWYgKF9fR05VQ19fID4gNCkgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gOCkKKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyZXhiICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqYWRkcikgKTsKKyNlbHNlCisgICAgLyogUHJpb3IgdG8gR0NDIDQuOCwgIlEiIHdpbGwgYmUgZXhwYW5kZWQgdG8gW3J4LCAjMF0gd2hpY2ggaXMgbm90CisgICAgICAgYWNjZXB0ZWQgYnkgYXNzZW1ibGVyLiBTbyBoYXMgdG8gdXNlIGZvbGxvd2luZyBsZXNzIGVmZmljaWVudCBwYXR0ZXJuLgorICAgICovCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcmV4YiAlMCwgWyUxXSIgOiAiPXIiIChyZXN1bHQpIDogInIiIChhZGRyKSA6ICJtZW1vcnkiICk7CisjZW5kaWYKKyAgIHJldHVybiAoKHVpbnQ4X3QpIHJlc3VsdCk7ICAgIC8qIEFkZCBleHBsaWNpdCB0eXBlIGNhc3QgaGVyZSAqLworfQorCisKKy8qKgorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MTZfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MTZfdCBfX0xEUkVYSCh2b2xhdGlsZSB1aW50MTZfdCAqYWRkcikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA4KQorICAgX19BU00gdm9sYXRpbGUgKCJsZHJleGggJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCphZGRyKSApOworI2Vsc2UKKyAgICAvKiBQcmlvciB0byBHQ0MgNC44LCAiUSIgd2lsbCBiZSBleHBhbmRlZCB0byBbcngsICMwXSB3aGljaCBpcyBub3QKKyAgICAgICBhY2NlcHRlZCBieSBhc3NlbWJsZXIuIFNvIGhhcyB0byB1c2UgZm9sbG93aW5nIGxlc3MgZWZmaWNpZW50IHBhdHRlcm4uCisgICAgKi8KKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyZXhoICUwLCBbJTFdIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKGFkZHIpIDogIm1lbW9yeSIgKTsKKyNlbmRpZgorICAgcmV0dXJuICgodWludDE2X3QpIHJlc3VsdCk7ICAgIC8qIEFkZCBleHBsaWNpdCB0eXBlIGNhc3QgaGVyZSAqLworfQorCisKKy8qKgorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX0xEUkVYVyh2b2xhdGlsZSB1aW50MzJfdCAqYWRkcikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyZXggJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCphZGRyKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQKKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NUUkVYQih1aW50OF90IHZhbHVlLCB2b2xhdGlsZSB1aW50OF90ICphZGRyKQoreworICAgdWludDMyX3QgcmVzdWx0OworCisgICBfX0FTTSB2b2xhdGlsZSAoInN0cmV4YiAlMCwgJTIsICUxIiA6ICI9JnIiIChyZXN1bHQpLCAiPVEiICgqYWRkcikgOiAiciIgKCh1aW50MzJfdCl2YWx1ZSkgKTsKKyAgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQKKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NUUkVYSCh1aW50MTZfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDE2X3QgKmFkZHIpCit7CisgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RyZXhoICUwLCAlMiwgJTEiIDogIj0mciIgKHJlc3VsdCksICI9USIgKCphZGRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZAorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1RSRVhXKHVpbnQzMl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MzJfdCAqYWRkcikKK3sKKyAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJzdHJleCAlMCwgJTIsICUxIiA6ICI9JnIiIChyZXN1bHQpLCAiPVEiICgqYWRkcikgOiAiciIgKHZhbHVlKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFJlbW92ZSB0aGUgZXhjbHVzaXZlIGxvY2sKKyAgXGRldGFpbHMgUmVtb3ZlcyB0aGUgZXhjbHVzaXZlIGxvY2sgd2hpY2ggaXMgY3JlYXRlZCBieSBMRFJFWC4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fQ0xSRVgodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJjbHJleCIgOjo6ICJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2lnbmVkIFNhdHVyYXRlCisgIFxkZXRhaWxzIFNhdHVyYXRlcyBhIHNpZ25lZCB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBiZSBzYXR1cmF0ZWQKKyAgXHBhcmFtIFtpbl0gICAgc2F0ICBCaXQgcG9zaXRpb24gdG8gc2F0dXJhdGUgdG8gKDEuLjMyKQorICBccmV0dXJuICAgICAgICAgICAgIFNhdHVyYXRlZCB2YWx1ZQorICovCisjZGVmaW5lIF9fU1NBVChBUkcxLEFSRzIpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSk7IFwKKyAgX19BU00gKCJzc2F0ICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJJIiAoQVJHMiksICJyIiAoX19BUkcxKSApOyBcCisgIF9fUkVTOyBcCisgfSkKKworCisvKioKKyAgXGJyaWVmICAgVW5zaWduZWQgU2F0dXJhdGUKKyAgXGRldGFpbHMgU2F0dXJhdGVzIGFuIHVuc2lnbmVkIHZhbHVlLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGJlIHNhdHVyYXRlZAorICBccGFyYW0gW2luXSAgICBzYXQgIEJpdCBwb3NpdGlvbiB0byBzYXR1cmF0ZSB0byAoMC4uMzEpCisgIFxyZXR1cm4gICAgICAgICAgICAgU2F0dXJhdGVkIHZhbHVlCisgKi8KKyNkZWZpbmUgX19VU0FUKEFSRzEsQVJHMikgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXAorICBfX0FTTSAoInVzYXQgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCisKKy8qKgorICBcYnJpZWYgICBSb3RhdGUgUmlnaHQgd2l0aCBFeHRlbmQgKDMyIGJpdCkKKyAgXGRldGFpbHMgTW92ZXMgZWFjaCBiaXQgb2YgYSBiaXRzdHJpbmcgcmlnaHQgYnkgb25lIGJpdC4KKyAgICAgICAgICAgVGhlIGNhcnJ5IGlucHV0IGlzIHNoaWZ0ZWQgaW4gYXQgdGhlIGxlZnQgZW5kIG9mIHRoZSBiaXRzdHJpbmcuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByb3RhdGUKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJvdGF0ZWQgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JSWCh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicnJ4ICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHIChyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyAodmFsdWUpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50OF90IF9fTERSQlQodm9sYXRpbGUgdWludDhfdCAqYWRkcikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA4KQorICAgX19BU00gdm9sYXRpbGUgKCJsZHJidCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJRIiAoKmFkZHIpICk7CisjZWxzZQorICAgIC8qIFByaW9yIHRvIEdDQyA0LjgsICJRIiB3aWxsIGJlIGV4cGFuZGVkIHRvIFtyeCwgIzBdIHdoaWNoIGlzIG5vdAorICAgICAgIGFjY2VwdGVkIGJ5IGFzc2VtYmxlci4gU28gaGFzIHRvIHVzZSBmb2xsb3dpbmcgbGVzcyBlZmZpY2llbnQgcGF0dGVybi4KKyAgICAqLworICAgX19BU00gdm9sYXRpbGUgKCJsZHJidCAlMCwgWyUxXSIgOiAiPXIiIChyZXN1bHQpIDogInIiIChhZGRyKSA6ICJtZW1vcnkiICk7CisjZW5kaWYKKyAgIHJldHVybiAoKHVpbnQ4X3QpIHJlc3VsdCk7ICAgIC8qIEFkZCBleHBsaWNpdCB0eXBlIGNhc3QgaGVyZSAqLworfQorCisKKy8qKgorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IF9fTERSSFQodm9sYXRpbGUgdWludDE2X3QgKmFkZHIpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisjaWYgKF9fR05VQ19fID4gNCkgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gOCkKKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyaHQgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCphZGRyKSApOworI2Vsc2UKKyAgICAvKiBQcmlvciB0byBHQ0MgNC44LCAiUSIgd2lsbCBiZSBleHBhbmRlZCB0byBbcngsICMwXSB3aGljaCBpcyBub3QKKyAgICAgICBhY2NlcHRlZCBieSBhc3NlbWJsZXIuIFNvIGhhcyB0byB1c2UgZm9sbG93aW5nIGxlc3MgZWZmaWNpZW50IHBhdHRlcm4uCisgICAgKi8KKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyaHQgJTAsIFslMV0iIDogIj1yIiAocmVzdWx0KSA6ICJyIiAoYWRkcikgOiAibWVtb3J5IiApOworI2VuZGlmCisgICByZXR1cm4gKCh1aW50MTZfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovCit9CisKKworLyoqCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19MRFJUKHZvbGF0aWxlIHVpbnQzMl90ICphZGRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJsZHJ0ICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqYWRkcikgKTsKKyAgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RSQlQodWludDhfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDhfdCAqYWRkcikKK3sKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RyYnQgJTEsICUwIiA6ICI9USIgKCphZGRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworfQorCisKKy8qKgorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJIVCh1aW50MTZfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDE2X3QgKmFkZHIpCit7CisgICBfX0FTTSB2b2xhdGlsZSAoInN0cmh0ICUxLCAlMCIgOiAiPVEiICgqYWRkcikgOiAiciIgKCh1aW50MzJfdCl2YWx1ZSkgKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RSVCh1aW50MzJfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDMyX3QgKmFkZHIpCit7CisgICBfX0FTTSB2b2xhdGlsZSAoInN0cnQgJTEsICUwIiA6ICI9USIgKCphZGRyKSA6ICJyIiAodmFsdWUpICk7Cit9CisKKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSAqLworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMgIENvbXBpbGVyIHNwZWNpZmljIEludHJpbnNpY3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqIFxkZWZncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgQ01TSVMgU0lNRCBJbnRyaW5zaWNzCisgIEFjY2VzcyB0byBkZWRpY2F0ZWQgU0lNRCBpbnN0cnVjdGlvbnMKKyAgQHsKKyovCisKKyNpZiAoX19DT1JURVhfTSA+PSAweDA0VSkgIC8qIG9ubHkgZm9yIENvcnRleC1NNCBhbmQgYWJvdmUgKi8KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2FkZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2hhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1YWRkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSEFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVoYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicXN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaHN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzdWI4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXFzdWI4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhzdWI4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0FERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUUFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2hhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUUFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cWFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVoYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1NVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUVNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2hzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUVNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cXN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVoc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0FTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2FzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaGFzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1YXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cWFzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSEFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhhc3ggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1NBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic3NheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaHNheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1c2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cXNheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSFNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhzYXggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNBRDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzYWQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTQURBOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1c2FkYTggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKyNkZWZpbmUgX19TU0FUMTYoQVJHMSxBUkcyKSBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSk7IFwKKyAgX19BU00gKCJzc2F0MTYgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCisjZGVmaW5lIF9fVVNBVDE2KEFSRzEsQVJHMikgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXAorICBfX0FTTSAoInVzYXQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXAorICBfX1JFUzsgXAorIH0pCisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVhUQjE2KHVpbnQzMl90IG9wMSkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXh0YjE2ICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVhUQUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXh0YWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TWFRCMTYodWludDMyX3Qgb3AxKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzeHRiMTYgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSkpOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TWFRBQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzeHRhYjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVUFEICAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtdWFkICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVUFEWCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtdWFkeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxBRCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MQURYICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbWxhZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQoreworICB1bmlvbiBsbHJlZ191eworICAgIHVpbnQzMl90IHczMlsyXTsKKyAgICB1aW50NjRfdCB3NjQ7CisgIH0gbGxyOworICBsbHIudzY0ID0gYWNjOworCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxhbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlswXSksICI9ciIgKGxsci53MzJbMV0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlswXSksICIxIiAobGxyLnczMlsxXSkgKTsKKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzFdKSwgIj1yIiAobGxyLnczMlswXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzFdKSwgIjEiIChsbHIudzMyWzBdKSApOworI2VuZGlmCisKKyAgcmV0dXJuKGxsci53NjQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTEFMRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpCit7CisgIHVuaW9uIGxscmVnX3V7CisgICAgdWludDMyX3QgdzMyWzJdOworICAgIHVpbnQ2NF90IHc2NDsKKyAgfSBsbHI7CisgIGxsci53NjQgPSBhY2M7CisKKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlswXSksICI9ciIgKGxsci53MzJbMV0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlswXSksICIxIiAobGxyLnczMlsxXSkgKTsKKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlsxXSksICI9ciIgKGxsci53MzJbMF0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlsxXSksICIxIiAobGxyLnczMlswXSkgKTsKKyNlbmRpZgorCisgIHJldHVybihsbHIudzY0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVTRCAgKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbXVzZCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVTRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbXVzZHggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MU0QgKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSwgInIiIChvcDMpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTFNEWCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic21sc2R4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSwgInIiIChvcDMpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTFNMRCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykKK3sKKyAgdW5pb24gbGxyZWdfdXsKKyAgICB1aW50MzJfdCB3MzJbMl07CisgICAgdWludDY0X3QgdzY0OworICB9IGxscjsKKyAgbGxyLnc2NCA9IGFjYzsKKworI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sc2xkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMF0pLCAiPXIiIChsbHIudzMyWzFdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMF0pLCAiMSIgKGxsci53MzJbMV0pICk7CisjZWxzZSAgICAgICAgICAgICAgIC8qIEJpZyBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlsxXSksICI9ciIgKGxsci53MzJbMF0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlsxXSksICIxIiAobGxyLnczMlswXSkgKTsKKyNlbmRpZgorCisgIHJldHVybihsbHIudzY0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDY0X3QgX19TTUxTTERYICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQoreworICB1bmlvbiBsbHJlZ191eworICAgIHVpbnQzMl90IHczMlsyXTsKKyAgICB1aW50NjRfdCB3NjQ7CisgIH0gbGxyOworICBsbHIudzY0ID0gYWNjOworCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzbGR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMF0pLCAiPXIiIChsbHIudzMyWzFdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMF0pLCAiMSIgKGxsci53MzJbMV0pICk7CisjZWxzZSAgICAgICAgICAgICAgIC8qIEJpZyBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzbGR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMV0pLCAiPXIiIChsbHIudzMyWzBdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMV0pLCAiMSIgKGxsci53MzJbMF0pICk7CisjZW5kaWYKKworICByZXR1cm4obGxyLnc2NCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0VMICAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNlbCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgIGludDMyX3QgX19RQUREKCBpbnQzMl90IG9wMSwgIGludDMyX3Qgb3AyKQoreworICBpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhZGQgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FICBpbnQzMl90IF9fUVNVQiggaW50MzJfdCBvcDEsICBpbnQzMl90IG9wMikKK3sKKyAgaW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc3ViICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisjZGVmaW5lIF9fUEtIQlQoQVJHMSxBUkcyLEFSRzMpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSksIF9fQVJHMiA9IChBUkcyKTsgXAorICBfX0FTTSAoInBraGJ0ICUwLCAlMSwgJTIsIGxzbCAlMyIgOiAiPXIiIChfX1JFUykgOiAgInIiIChfX0FSRzEpLCAiciIgKF9fQVJHMiksICJJIiAoQVJHMykgICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCisjZGVmaW5lIF9fUEtIVEIoQVJHMSxBUkcyLEFSRzMpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSksIF9fQVJHMiA9IChBUkcyKTsgXAorICBpZiAoQVJHMyA9PSAwKSBcCisgICAgX19BU00gKCJwa2h0YiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSAgKTsgXAorICBlbHNlIFwKKyAgICBfX0FTTSAoInBraHRiICUwLCAlMSwgJTIsIGFzciAlMyIgOiAiPXIiIChfX1JFUykgOiAgInIiIChfX0FSRzEpLCAiciIgKF9fQVJHMiksICJJIiAoQVJHMykgICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTUxBIChpbnQzMl90IG9wMSwgaW50MzJfdCBvcDIsIGludDMyX3Qgb3AzKQoreworIGludDMyX3QgcmVzdWx0OworCisgX19BU00gdm9sYXRpbGUgKCJzbW1sYSAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpOiAiciIgIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworIHJldHVybihyZXN1bHQpOworfQorCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPj0gMHgwNCkgKi8KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyAqLworCisKKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisjZW5kaWYgLyogX19DTVNJU19HQ0NfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbTAuaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY20wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExZGFkNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY20wLmgKQEAgLTAsMCArMSw3OTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjb3JlX2NtMC5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0wIENvcmUgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9DTTBfSF9HRU5FUklDCisjZGVmaW5lIF9fQ09SRV9DTTBfSF9HRU5FUklDCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgIFxwYWdlIENNU0lTX01JU1JBX0V4Y2VwdGlvbnMgIE1JU1JBLUM6MjAwNCBDb21wbGlhbmNlIEV4Y2VwdGlvbnMKKyAgQ01TSVMgdmlvbGF0ZXMgdGhlIGZvbGxvd2luZyBNSVNSQS1DOjIwMDQgcnVsZXM6CisKKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDguNSwgb2JqZWN0L2Z1bmN0aW9uIGRlZmluaXRpb24gaW4gaGVhZGVyIGZpbGUuPGJyPgorICAgICBGdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBoZWFkZXIgZmlsZXMgYXJlIHVzZWQgdG8gYWxsb3cgJ2lubGluaW5nJy4KKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgMTguNCwgZGVjbGFyYXRpb24gb2YgdW5pb24gdHlwZSBvciBvYmplY3Qgb2YgdW5pb24gdHlwZTogJ3suLi59Jy48YnI+CisgICAgIFVuaW9ucyBhcmUgdXNlZCBmb3IgZWZmZWN0aXZlIHJlcHJlc2VudGF0aW9uIG9mIGNvcmUgcmVnaXN0ZXJzLgorCisgICBcbGkgQWR2aXNvcnkgUnVsZSAxOS43LCBGdW5jdGlvbi1saWtlIG1hY3JvIGRlZmluZWQuPGJyPgorICAgICBGdW5jdGlvbi1saWtlIG1hY3JvcyBhcmUgdXNlZCB0byBhbGxvdyBtb3JlIGVmZmljaWVudCBjb2RlLgorICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBDTVNJUyBkZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcaW5ncm91cCBDb3J0ZXhfTTAKKyAgQHsKKyAqLworCisvKiAgQ01TSVMgQ00wIGRlZmluaXRpb25zICovCisjZGVmaW5lIF9fQ00wX0NNU0lTX1ZFUlNJT05fTUFJTiAgKDB4MDRVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBbMzE6MTZdIENNU0lTIEhBTCBtYWluIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTBfQ01TSVNfVkVSU0lPTl9TVUIgICAoMHgxRVUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFsxNTowXSAgQ01TSVMgSEFMIHN1YiB2ZXJzaW9uICovCisjZGVmaW5lIF9fQ00wX0NNU0lTX1ZFUlNJT04gICAgICAgKChfX0NNMF9DTVNJU19WRVJTSU9OX01BSU4gPDwgMTZVKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQ00wX0NNU0lTX1ZFUlNJT05fU1VCICAgICAgICAgICApICAgICAgICAvKiE8IENNU0lTIEhBTCB2ZXJzaW9uIG51bWJlciAqLworCisjZGVmaW5lIF9fQ09SVEVYX00gICAgICAgICAgICAgICAgKDB4MDBVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3J0ZXgtTSBDb3JlICovCisKKworI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIF9faW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBfX2lubGluZQorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBJQVIgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBJQVIgQ29tcGlsZXIuIE9ubHkgYXZhaWxhYmxlIGluIEhpZ2ggb3B0aW1pemF0aW9uIG1vZGUhICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBUSSBDQ1MgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgVEFTS0lORyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjZGVmaW5lIF9fcGFja2VkCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBDT1NNSUMgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlci4gVXNlIC1wYzk5IG9uIGNvbXBpbGUgbGluZSAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxzZQorICAjZXJyb3IgVW5rbm93biBjb21waWxlcgorI2VuZGlmCisKKy8qKiBfX0ZQVV9VU0VEIGluZGljYXRlcyB3aGV0aGVyIGFuIEZQVSBpcyB1c2VkIG9yIG5vdC4KKyAgICBUaGlzIGNvcmUgZG9lcyBub3Qgc3VwcG9ydCBhbiBGUFUgYXQgYWxsCisqLworI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisKKyNpZiBkZWZpbmVkICggX19DQ19BUk0gKQorICAjaWYgZGVmaW5lZCBfX1RBUkdFVF9GUFVfVkZQCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2lmIGRlZmluZWQgX19BUk1fUENTX1ZGUAorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNpZiBkZWZpbmVkIChfX1ZGUF9GUF9fKSAmJiAhZGVmaW5lZChfX1NPRlRGUF9fKQorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2lmIGRlZmluZWQgX19BUk1WRlBfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2lmIGRlZmluZWQgX19USV9WRlBfU1VQUE9SVF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgI2lmIGRlZmluZWQgX19GUFVfVkZQX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjaWYgKCBfX0NTTUNfXyAmIDB4NDAwVSkKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZW5kaWYKKworI2luY2x1ZGUgImNvcmVfY21JbnN0ci5oIiAgICAgICAgICAgICAgICAvKiBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAqLworI2luY2x1ZGUgImNvcmVfY21GdW5jLmgiICAgICAgICAgICAgICAgICAvKiBDb3JlIEZ1bmN0aW9uIEFjY2VzcyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DT1JFX0NNMF9IX0dFTkVSSUMgKi8KKworI2lmbmRlZiBfX0NNU0lTX0dFTkVSSUMKKworI2lmbmRlZiBfX0NPUkVfQ00wX0hfREVQRU5EQU5UCisjZGVmaW5lIF9fQ09SRV9DTTBfSF9ERVBFTkRBTlQKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogY2hlY2sgZGV2aWNlIGRlZmluZXMgYW5kIHVzZSBkZWZhdWx0cyAqLworI2lmIGRlZmluZWQgX19DSEVDS19ERVZJQ0VfREVGSU5FUworICAjaWZuZGVmIF9fQ00wX1JFVgorICAgICNkZWZpbmUgX19DTTBfUkVWICAgICAgICAgICAgICAgMHgwMDAwVQorICAgICN3YXJuaW5nICJfX0NNMF9SRVYgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX05WSUNfUFJJT19CSVRTCisgICAgI2RlZmluZSBfX05WSUNfUFJJT19CSVRTICAgICAgICAgIDJVCisgICAgI3dhcm5pbmcgIl9fTlZJQ19QUklPX0JJVFMgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnCisgICAgI2RlZmluZSBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnICAgIDBVCisgICAgI3dhcm5pbmcgIl9fVmVuZG9yX1N5c1RpY2tDb25maWcgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisjZW5kaWYKKworLyogSU8gZGVmaW5pdGlvbnMgKGFjY2VzcyByZXN0cmljdGlvbnMgdG8gcGVyaXBoZXJhbCByZWdpc3RlcnMpICovCisvKioKKyAgICBcZGVmZ3JvdXAgQ01TSVNfZ2xvYl9kZWZzIENNU0lTIEdsb2JhbCBEZWZpbmVzCisKKyAgICA8c3Ryb25nPklPIFR5cGUgUXVhbGlmaWVyczwvc3Ryb25nPiBhcmUgdXNlZAorICAgIFxsaSB0byBzcGVjaWZ5IHRoZSBhY2Nlc3MgdG8gcGVyaXBoZXJhbCB2YXJpYWJsZXMuCisgICAgXGxpIGZvciBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBwZXJpcGhlcmFsIHJlZ2lzdGVyIGRlYnVnIGluZm9ybWF0aW9uLgorKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworICAjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8KKyNlbHNlCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2VuZGlmCisjZGVmaW5lICAgICBfX08gICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAnd3JpdGUgb25seScgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU8gICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHBlcm1pc3Npb25zICovCisKKy8qIGZvbGxvd2luZyBkZWZpbmVzIHNob3VsZCBiZSB1c2VkIGZvciBzdHJ1Y3R1cmUgbWVtYmVycyAqLworI2RlZmluZSAgICAgX19JTSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAvKiEgRGVmaW5lcyAncmVhZCBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX09NICAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICd3cml0ZSBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX0lPTSAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ29ydGV4X00wICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEFic3RyYWN0aW9uCisgIENvcmUgUmVnaXN0ZXIgY29udGFpbjoKKyAgLSBDb3JlIFJlZ2lzdGVyCisgIC0gQ29yZSBOVklDIFJlZ2lzdGVyCisgIC0gQ29yZSBTQ0IgUmVnaXN0ZXIKKyAgLSBDb3JlIFN5c1RpY2sgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX2NvcmVfcmVnaXN0ZXIgRGVmaW5lcyBhbmQgVHlwZSBEZWZpbml0aW9ucworICBcYnJpZWYgVHlwZSBkZWZpbml0aW9ucyBhbmQgZGVmaW5lcyBmb3IgQ29ydGV4LU0gcHJvY2Vzc29yIGJhc2VkIGRldmljZXMuCisqLworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19DT1JFICBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXJzCisgIFxicmllZiAgICAgIENvcmUgUmVnaXN0ZXIgdHlwZSBkZWZpbml0aW9ucy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKEFQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyODsgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uMjcgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBBUFNSX1R5cGU7CisKKy8qIEFQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQVBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogTWFzayAqLworCisjZGVmaW5lIEFQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgSW50ZXJydXB0IFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChJUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyMzsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IElQU1JfVHlwZTsKKworLyogSVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJUFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IElQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgU3BlY2lhbC1QdXJwb3NlIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVycyAoeFBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MTU7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjIzICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFQ6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI0ICBUaHVtYiBiaXQgICAgICAgIChyZWFkIDApICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMTozOyAgICAgICAgICAgICAgIC8qITwgYml0OiAyNS4uMjcgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSB4UFNSX1R5cGU7CisKKy8qIHhQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgeFBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogTWFzayAqLworCisjZGVmaW5lIHhQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1RfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBUIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVF9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1RfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgTWFzayAqLworCisjZGVmaW5lIHhQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgeFBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBDb250cm9sIFJlZ2lzdGVycyAoQ09OVFJPTCkuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjE7ICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMCAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBTUFNFTDoxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMSAgU3RhY2sgdG8gYmUgdXNlZCAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6MzA7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDIuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBDT05UUk9MX1R5cGU7CisKKy8qIENPTlRST0wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IENPTlRST0xfU1BTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19DT1JFICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfTlZJQyAgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKQorICBcYnJpZWYgICAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgTlZJQyBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IElTRVJbMVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzMxVV07CisgIF9fSU9NIHVpbnQzMl90IElDRVJbMVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSU0VSVkVEMVszMVVdOworICBfX0lPTSB1aW50MzJfdCBJU1BSWzFVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxMDAgKFIvVykgIEludGVycnVwdCBTZXQgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMzFVXTsKKyAgX19JT00gdWludDMyX3QgSUNQUlsxVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbMzFVXTsKKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzY0VV07CisgIF9fSU9NIHVpbnQzMl90IElQWzhVXTsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwMCAoUi9XKSAgSW50ZXJydXB0IFByaW9yaXR5IFJlZ2lzdGVyICovCit9ICBOVklDX1R5cGU7CisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX05WSUMgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1NDQiAgICAgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIChTQ0IpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBDUFVJRDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIENQVUlEIEJhc2UgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgSUNTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBJbnRlcnJ1cHQgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwOworICBfX0lPTSB1aW50MzJfdCBBSVJDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBTQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMTsKKyAgX19JT00gdWludDMyX3QgU0hQWzJVXTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDFDIChSL1cpICBTeXN0ZW0gSGFuZGxlcnMgUHJpb3JpdHkgUmVnaXN0ZXJzLiBbMF0gaXMgUkVTRVJWRUQgKi8KKyAgX19JT00gdWludDMyX3QgU0hDU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworfSBTQ0JfVHlwZTsKKworLyogU0NCIENQVUlEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX01zayAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfUG9zICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9WQVJJQU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Nc2sgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fUG9zICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fTXNrICAgICAgICAgICAgICAgKDB4RkZGVUwgPDwgU0NCX0NQVUlEX1BBUlROT19Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Nc2sgICAgICAgICAgICAgKDB4RlVMIC8qPDwgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyovKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gTWFzayAqLworCisvKiBTQ0IgSW50ZXJydXB0IENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcyAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfTXNrICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MpICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX01zayAgICAgICAgICAgICgweDFGRlVMIC8qPDwgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MqLykgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBNYXNrICovCisKKy8qIFNDQiBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZX01zayAgICAgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX1BvcyAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZU1RBVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfTXNrICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zKSAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcyAgICAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IEVORElBTkVTUyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfRU5ESUFORVNTX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX0VORElBTkVTU19Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IEVORElBTkVTUyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcyAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfTXNrICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX1BvcykgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIE1hc2sgKi8KKworLyogU0NCIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NFVk9OUEVORF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TRVZPTlBFTkRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTRVZPTlBFTkQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX1BvcyAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NMRUVQREVFUF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TTEVFUERFRVBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUERFRVAgTWFzayAqLworCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQT05FWElUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBPTkVYSVRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQT05FWElUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQT05FWElUIE1hc2sgKi8KKworLyogU0NCIENvbmZpZ3VyYXRpb24gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQ0NSX1NUS0FMSUdOX1BvcyAgICAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBTVEtBTElHTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1NUS0FMSUdOX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9TVEtBTElHTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBTVEtBTElHTiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVU5BTElHTl9UUlAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9VTkFMSUdOX1RSUF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfVU5BTElHTl9UUlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVU5BTElHTl9UUlAgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Nc2sgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TVkNBTExQRU5ERURfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TQ0IgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1N5c1RpY2sgICAgIFN5c3RlbSBUaWNrIFRpbWVyIChTeXNUaWNrKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBUaW1lciBSZWdpc3RlcnMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gVGltZXIgKFN5c1RpY2spLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIFN5c1RpY2sgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IExPQUQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgU3lzVGljayBSZWxvYWQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgVkFMOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBTeXNUaWNrIEN1cnJlbnQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQ0FMSUI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSLyApICBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyICovCit9IFN5c1RpY2tfVHlwZTsKKworLyogU3lzVGljayBDb250cm9sIC8gU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2sgICAgICAgICAgICAoMVVMIC8qPDwgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MqLykgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgTWFzayAqLworCisvKiBTeXNUaWNrIFJlbG9hZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ3VycmVudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Nc2sgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX01zayAgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zKi8pICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TeXNUaWNrICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19Db3JlRGVidWcgICAgICAgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMgKENvcmVEZWJ1ZykKKyAgXGJyaWVmICAgIENvcnRleC1NMCBDb3JlIERlYnVnIFJlZ2lzdGVycyAoRENCIHJlZ2lzdGVycywgU0hDU1IsIGFuZCBERlNSKSBhcmUgb25seSBhY2Nlc3NpYmxlIG92ZXIgREFQIGFuZCBub3QgdmlhIHByb2Nlc3Nvci4KKyAgICAgICAgICAgIFRoZXJlZm9yZSB0aGV5IGFyZSBub3QgY292ZXJlZCBieSB0aGUgQ29ydGV4LU0wIGhlYWRlciBmaWxlLgorICBAeworICovCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19Db3JlRGVidWcgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2JpdGZpZWxkICAgICBDb3JlIHJlZ2lzdGVyIGJpdCBmaWVsZCBtYWNyb3MKKyAgXGJyaWVmICAgICAgTWFjcm9zIGZvciB1c2Ugd2l0aCBiaXQgZmllbGQgZGVmaW5pdGlvbnMgKHh4eF9Qb3MsIHh4eF9Nc2spLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBNYXNrIGFuZCBzaGlmdCBhIGJpdCBmaWVsZCB2YWx1ZSBmb3IgdXNlIGluIGEgcmVnaXN0ZXIgYml0IHJhbmdlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHRoZSBiaXQgZmllbGQuCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9WQUwyRkxEKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSA8PCBmaWVsZCAjIyBfUG9zKSAmIGZpZWxkICMjIF9Nc2spCisKKy8qKgorICBcYnJpZWYgICAgIE1hc2sgYW5kIHNoaWZ0IGEgcmVnaXN0ZXIgdmFsdWUgdG8gZXh0cmFjdCBhIGJpdCBmaWxlZCB2YWx1ZS4KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiByZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIGJpdCBmaWVsZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9GTEQyVkFMKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSAmIGZpZWxkICMjIF9Nc2spID4+IGZpZWxkICMjIF9Qb3MpCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX2NvcmVfYml0ZmllbGQgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2Jhc2UgICAgIENvcmUgRGVmaW5pdGlvbnMKKyAgXGJyaWVmICAgICAgRGVmaW5pdGlvbnMgZm9yIGJhc2UgYWRkcmVzc2VzLCB1bmlvbnMsIGFuZCBzdHJ1Y3R1cmVzLgorICBAeworICovCisKKy8qIE1lbW9yeSBtYXBwaW5nIG9mIENvcnRleC1NMCBIYXJkd2FyZSAqLworI2RlZmluZSBTQ1NfQkFTRSAgICAgICAgICAgICgweEUwMDBFMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgU3BhY2UgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFN5c1RpY2tfQkFTRSAgICAgICAgKFNDU19CQVNFICsgIDB4MDAxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBOVklDX0JBU0UgICAgICAgICAgIChTQ1NfQkFTRSArICAweDAxMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU0NCX0JBU0UgICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDAwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIEJsb2NrIEJhc2UgQWRkcmVzcyAqLworCisjZGVmaW5lIFNDQiAgICAgICAgICAgICAgICAgKChTQ0JfVHlwZSAgICAgICAqKSAgICAgU0NCX0JBU0UgICAgICApICAgLyohPCBTQ0IgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgU3lzVGljayAgICAgICAgICAgICAoKFN5c1RpY2tfVHlwZSAgICopICAgICBTeXNUaWNrX0JBU0UgICkgICAvKiE8IFN5c1RpY2sgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgTlZJQyAgICAgICAgICAgICAgICAoKE5WSUNfVHlwZSAgICAgICopICAgICBOVklDX0JBU0UgICAgICkgICAvKiE8IE5WSUMgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKworCisvKkB9ICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIKKyAgQ29yZSBGdW5jdGlvbiBJbnRlcmZhY2UgY29udGFpbnM6CisgIC0gQ29yZSBOVklDIEZ1bmN0aW9ucworICAtIENvcmUgU3lzVGljayBGdW5jdGlvbnMKKyAgLSBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UgRnVuY3Rpb25zIGFuZCBJbnN0cnVjdGlvbnMgUmVmZXJlbmNlCisqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICBOVklDIGZ1bmN0aW9ucyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyBOVklDIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgbWFuYWdlIGludGVycnVwdHMgYW5kIGV4Y2VwdGlvbnMgdmlhIHRoZSBOVklDLgorICBAeworICovCisKKy8qIEludGVycnVwdCBQcmlvcml0aWVzIGFyZSBXT1JEIGFjY2Vzc2libGUgb25seSB1bmRlciBBUk12Nk0gICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoZSBmb2xsb3dpbmcgTUFDUk9TIGhhbmRsZSBnZW5lcmF0aW9uIG9mIHRoZSByZWdpc3RlciBvZmZzZXQgYW5kIGJ5dGUgbWFza3MgKi8KKyNkZWZpbmUgX0JJVF9TSElGVChJUlFuKSAgICAgICAgICggICgoKCh1aW50MzJfdCkoaW50MzJfdCkoSVJRbikpICAgICAgICAgKSAgICAgICYgIDB4MDNVTCkgKiA4VUwpCisjZGVmaW5lIF9TSFBfSURYKElSUW4pICAgICAgICAgICAoICgoKCgodWludDMyX3QpKGludDMyX3QpKElSUW4pKSAmIDB4MEZVTCktOFVMKSA+PiAgICAyVUwpICAgICAgKQorI2RlZmluZSBfSVBfSURYKElSUW4pICAgICAgICAgICAgKCAgICgoKHVpbnQzMl90KShpbnQzMl90KShJUlFuKSkgICAgICAgICAgICAgICAgPj4gICAgMlVMKSAgICAgICkKKworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBFbmFibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRW5hYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JU0VSWzBVXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIERpc2FibGUgRXh0ZXJuYWwgSW50ZXJydXB0CisgIFxkZXRhaWxzIERpc2FibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRGlzYWJsZUlSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNFUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHBlbmRpbmcgcmVnaXN0ZXIgaW4gdGhlIE5WSUMgYW5kIHJldHVybnMgdGhlIHBlbmRpbmcgYml0IGZvciB0aGUgc3BlY2lmaWVkIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IHBlbmRpbmcuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBwZW5kaW5nLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUMtPklTUFJbMFVdICYgKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBTZXRzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTUFJbMFVdID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgQ2xlYXIgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgQ2xlYXJzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0NsZWFyUGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNQUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgXG5vdGUgICAgVGhlIHByaW9yaXR5IGNhbm5vdCBiZSBzZXQgZm9yIGV2ZXJ5IGNvcmUgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxwYXJhbSBbaW5dICBwcmlvcml0eSAgUHJpb3JpdHkgdG8gc2V0LgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuLCB1aW50MzJfdCBwcmlvcml0eSkKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICBTQ0ItPlNIUFtfU0hQX0lEWChJUlFuKV0gPSAoKHVpbnQzMl90KShTQ0ItPlNIUFtfU0hQX0lEWChJUlFuKV0gJiB+KDB4RkZVTCA8PCBfQklUX1NISUZUKElSUW4pKSkgfAorICAgICAgICgoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpIDw8IF9CSVRfU0hJRlQoSVJRbikpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBOVklDLT5JUFtfSVBfSURYKElSUW4pXSAgPSAoKHVpbnQzMl90KShOVklDLT5JUFtfSVBfSURYKElSUW4pXSAgJiB+KDB4RkZVTCA8PCBfQklUX1NISUZUKElSUW4pKSkgfAorICAgICAgICgoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpIDw8IF9CSVRfU0hJRlQoSVJRbikpKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgbnVtYmVyIGNhbiBiZSBwb3NpdGl2ZSB0byBzcGVjaWZ5IGFuIGV4dGVybmFsIChkZXZpY2Ugc3BlY2lmaWMpIGludGVycnVwdCwKKyAgICAgICAgICAgb3IgbmVnYXRpdmUgdG8gc3BlY2lmeSBhbiBpbnRlcm5hbCAoY29yZSkgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgSW50ZXJydXB0IFByaW9yaXR5LgorICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGlzIGFsaWduZWQgYXV0b21hdGljYWxseSB0byB0aGUgaW1wbGVtZW50ZWQgcHJpb3JpdHkgYml0cyBvZiB0aGUgbWljcm9jb250cm9sbGVyLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbikKK3sKKworICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkKKyAgeworICAgIHJldHVybigodWludDMyX3QpKCgoU0NCLT5TSFBbX1NIUF9JRFgoSVJRbildID4+IF9CSVRfU0hJRlQoSVJRbikgKSAmICh1aW50MzJfdCkweEZGVUwpID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JUFsgX0lQX0lEWChJUlFuKV0gPj4gX0JJVF9TSElGVChJUlFuKSApICYgKHVpbnQzMl90KTB4RkZVTCkgPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gUmVzZXQKKyAgXGRldGFpbHMgSW5pdGlhdGVzIGEgc3lzdGVtIHJlc2V0IHJlcXVlc3QgdG8gcmVzZXQgdGhlIE1DVS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TeXN0ZW1SZXNldCh2b2lkKQoreworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgYWxsIG91dHN0YW5kaW5nIG1lbW9yeSBhY2Nlc3NlcyBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJlZCB3cml0ZSBhcmUgY29tcGxldGVkIGJlZm9yZSByZXNldCAqLworICBTQ0ItPkFJUkNSICA9ICgoMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayk7CisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBjb21wbGV0aW9uIG9mIG1lbW9yeSBhY2Nlc3MgKi8KKworICBmb3IoOzspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YWl0IHVudGlsIHJlc2V0ICovCisgIHsKKyAgICBfX05PUCgpOworICB9Cit9CisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyAqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICBTeXNUaWNrIGZ1bmN0aW9uICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgU3lzVGljayBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IGNvbmZpZ3VyZSB0aGUgU3lzdGVtLgorICBAeworICovCisKKyNpZiAoX19WZW5kb3JfU3lzVGlja0NvbmZpZyA9PSAwVSkKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBUaWNrIENvbmZpZ3VyYXRpb24KKyAgXGRldGFpbHMgSW5pdGlhbGl6ZXMgdGhlIFN5c3RlbSBUaW1lciBhbmQgaXRzIGludGVycnVwdCwgYW5kIHN0YXJ0cyB0aGUgU3lzdGVtIFRpY2sgVGltZXIuCisgICAgICAgICAgIENvdW50ZXIgaXMgaW4gZnJlZSBydW5uaW5nIG1vZGUgdG8gZ2VuZXJhdGUgcGVyaW9kaWMgaW50ZXJydXB0cy4KKyAgXHBhcmFtIFtpbl0gIHRpY2tzICBOdW1iZXIgb2YgdGlja3MgYmV0d2VlbiB0d28gaW50ZXJydXB0cy4KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQuCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkLgorICBcbm90ZSAgICBXaGVuIHRoZSB2YXJpYWJsZSA8Yj5fX1ZlbmRvcl9TeXNUaWNrQ29uZmlnPC9iPiBpcyBzZXQgdG8gMSwgdGhlbiB0aGUKKyAgICAgICAgICAgZnVuY3Rpb24gPGI+U3lzVGlja19Db25maWc8L2I+IGlzIG5vdCBpbmNsdWRlZC4gSW4gdGhpcyBjYXNlLCB0aGUgZmlsZSA8Yj48aT5kZXZpY2U8L2k+Lmg8L2I+CisgICAgICAgICAgIG11c3QgY29udGFpbiBhIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgU3lzVGlja19Db25maWcodWludDMyX3QgdGlja3MpCit7CisgIGlmICgodGlja3MgLSAxVUwpID4gU3lzVGlja19MT0FEX1JFTE9BRF9Nc2spCisgIHsKKyAgICByZXR1cm4gKDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2FkIHZhbHVlIGltcG9zc2libGUgKi8KKyAgfQorCisgIFN5c1RpY2stPkxPQUQgID0gKHVpbnQzMl90KSh0aWNrcyAtIDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCByZWxvYWQgcmVnaXN0ZXIgKi8KKyAgTlZJQ19TZXRQcmlvcml0eSAoU3lzVGlja19JUlFuLCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpIC0gMVVMKTsgLyogc2V0IFByaW9yaXR5IGZvciBTeXN0aWNrIEludGVycnVwdCAqLworICBTeXNUaWNrLT5WQUwgICA9IDBVTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2FkIHRoZSBTeXNUaWNrIENvdW50ZXIgVmFsdWUgKi8KKyAgU3lzVGljay0+Q1RSTCAgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgU3lzVGljayBJUlEgYW5kIFN5c1RpY2sgVGltZXIgKi8KKyAgcmV0dXJuICgwVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gc3VjY2Vzc2Z1bCAqLworfQorCisjZW5kaWYKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ00wX0hfREVQRU5EQU5UICovCisKKyNlbmRpZiAvKiBfX0NNU0lTX0dFTkVSSUMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY20wcGx1cy5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbTBwbHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0YWEzOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY20wcGx1cy5oCkBAIC0wLDAgKzEsOTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY29yZV9jbTBwbHVzLmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTTArIENvcmUgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9DTTBQTFVTX0hfR0VORVJJQworI2RlZmluZSBfX0NPUkVfQ00wUExVU19IX0dFTkVSSUMKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAgXHBhZ2UgQ01TSVNfTUlTUkFfRXhjZXB0aW9ucyAgTUlTUkEtQzoyMDA0IENvbXBsaWFuY2UgRXhjZXB0aW9ucworICBDTVNJUyB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIE1JU1JBLUM6MjAwNCBydWxlczoKKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgOC41LCBvYmplY3QvZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBoZWFkZXIgZmlsZS48YnI+CisgICAgIEZ1bmN0aW9uIGRlZmluaXRpb25zIGluIGhlYWRlciBmaWxlcyBhcmUgdXNlZCB0byBhbGxvdyAnaW5saW5pbmcnLgorCisgICBcbGkgUmVxdWlyZWQgUnVsZSAxOC40LCBkZWNsYXJhdGlvbiBvZiB1bmlvbiB0eXBlIG9yIG9iamVjdCBvZiB1bmlvbiB0eXBlOiAney4uLn0nLjxicj4KKyAgICAgVW5pb25zIGFyZSB1c2VkIGZvciBlZmZlY3RpdmUgcmVwcmVzZW50YXRpb24gb2YgY29yZSByZWdpc3RlcnMuCisKKyAgIFxsaSBBZHZpc29yeSBSdWxlIDE5LjcsIEZ1bmN0aW9uLWxpa2UgbWFjcm8gZGVmaW5lZC48YnI+CisgICAgIEZ1bmN0aW9uLWxpa2UgbWFjcm9zIGFyZSB1c2VkIHRvIGFsbG93IG1vcmUgZWZmaWNpZW50IGNvZGUuCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIENNU0lTIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxpbmdyb3VwIENvcnRleC1NMCsKKyAgQHsKKyAqLworCisvKiAgQ01TSVMgQ00wKyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBfX0NNMFBMVVNfQ01TSVNfVkVSU0lPTl9NQUlOICgweDA0VSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzMxOjE2XSBDTVNJUyBIQUwgbWFpbiB2ZXJzaW9uICovCisjZGVmaW5lIF9fQ00wUExVU19DTVNJU19WRVJTSU9OX1NVQiAgKDB4MUVVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBbMTU6MF0gIENNU0lTIEhBTCBzdWIgdmVyc2lvbiAqLworI2RlZmluZSBfX0NNMFBMVVNfQ01TSVNfVkVSU0lPTiAgICAgICgoX19DTTBQTFVTX0NNU0lTX1ZFUlNJT05fTUFJTiA8PCAxNlUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19DTTBQTFVTX0NNU0lTX1ZFUlNJT05fU1VCICAgICAgICAgICApIC8qITwgQ01TSVMgSEFMIHZlcnNpb24gbnVtYmVyICovCisKKyNkZWZpbmUgX19DT1JURVhfTSAgICAgICAgICAgICAgICAoMHgwMFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcnRleC1NIENvcmUgKi8KKworCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIElBUiBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIElBUiBDb21waWxlci4gT25seSBhdmFpbGFibGUgaW4gSGlnaCBvcHRpbWl6YXRpb24gbW9kZSEgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRJIENDUyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNkZWZpbmUgX19wYWNrZWQKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyLiBVc2UgLXBjOTkgb24gY29tcGlsZSBsaW5lICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbHNlCisgICNlcnJvciBVbmtub3duIGNvbXBpbGVyCisjZW5kaWYKKworLyoqIF9fRlBVX1VTRUQgaW5kaWNhdGVzIHdoZXRoZXIgYW4gRlBVIGlzIHVzZWQgb3Igbm90LgorICAgIFRoaXMgY29yZSBkb2VzIG5vdCBzdXBwb3J0IGFuIEZQVSBhdCBhbGwKKyovCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKworI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNpZiBkZWZpbmVkIF9fVEFSR0VUX0ZQVV9WRlAKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjaWYgZGVmaW5lZCBfX0FSTV9QQ1NfVkZQCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2lmIGRlZmluZWQgKF9fVkZQX0ZQX18pICYmICFkZWZpbmVkKF9fU09GVEZQX18pCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjaWYgZGVmaW5lZCBfX0FSTVZGUF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjaWYgZGVmaW5lZCBfX1RJX1ZGUF9TVVBQT1JUX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjaWYgZGVmaW5lZCBfX0ZQVV9WRlBfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNpZiAoIF9fQ1NNQ19fICYgMHg0MDBVKQorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSAiY29yZV9jbUluc3RyLmgiICAgICAgICAgICAgICAgIC8qIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICovCisjaW5jbHVkZSAiY29yZV9jbUZ1bmMuaCIgICAgICAgICAgICAgICAgIC8qIENvcmUgRnVuY3Rpb24gQWNjZXNzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ00wUExVU19IX0dFTkVSSUMgKi8KKworI2lmbmRlZiBfX0NNU0lTX0dFTkVSSUMKKworI2lmbmRlZiBfX0NPUkVfQ00wUExVU19IX0RFUEVOREFOVAorI2RlZmluZSBfX0NPUkVfQ00wUExVU19IX0RFUEVOREFOVAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBjaGVjayBkZXZpY2UgZGVmaW5lcyBhbmQgdXNlIGRlZmF1bHRzICovCisjaWYgZGVmaW5lZCBfX0NIRUNLX0RFVklDRV9ERUZJTkVTCisgICNpZm5kZWYgX19DTTBQTFVTX1JFVgorICAgICNkZWZpbmUgX19DTTBQTFVTX1JFViAgICAgICAgICAgICAweDAwMDBVCisgICAgI3dhcm5pbmcgIl9fQ00wUExVU19SRVYgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX01QVV9QUkVTRU5UCisgICAgI2RlZmluZSBfX01QVV9QUkVTRU5UICAgICAgICAgICAgIDBVCisgICAgI3dhcm5pbmcgIl9fTVBVX1BSRVNFTlQgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX1ZUT1JfUFJFU0VOVAorICAgICNkZWZpbmUgX19WVE9SX1BSRVNFTlQgICAgICAgICAgICAwVQorICAgICN3YXJuaW5nICJfX1ZUT1JfUFJFU0VOVCBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTlZJQ19QUklPX0JJVFMKKyAgICAjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgMlUKKyAgICAjd2FybmluZyAiX19OVklDX1BSSU9fQklUUyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fVmVuZG9yX1N5c1RpY2tDb25maWcKKyAgICAjZGVmaW5lIF9fVmVuZG9yX1N5c1RpY2tDb25maWcgICAgMFUKKyAgICAjd2FybmluZyAiX19WZW5kb3JfU3lzVGlja0NvbmZpZyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKyNlbmRpZgorCisvKiBJTyBkZWZpbml0aW9ucyAoYWNjZXNzIHJlc3RyaWN0aW9ucyB0byBwZXJpcGhlcmFsIHJlZ2lzdGVycykgKi8KKy8qKgorICAgIFxkZWZncm91cCBDTVNJU19nbG9iX2RlZnMgQ01TSVMgR2xvYmFsIERlZmluZXMKKworICAgIDxzdHJvbmc+SU8gVHlwZSBRdWFsaWZpZXJzPC9zdHJvbmc+IGFyZSB1c2VkCisgICAgXGxpIHRvIHNwZWNpZnkgdGhlIGFjY2VzcyB0byBwZXJpcGhlcmFsIHZhcmlhYmxlcy4KKyAgICBcbGkgZm9yIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIHBlcmlwaGVyYWwgcmVnaXN0ZXIgZGVidWcgaW5mb3JtYXRpb24uCisqLworI2lmZGVmIF9fY3BsdXNwbHVzCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2Vsc2UKKyAgI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovCisjZW5kaWYKKyNkZWZpbmUgICAgIF9fTyAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICd3cml0ZSBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19JTyAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgLyB3cml0ZScgcGVybWlzc2lvbnMgKi8KKworLyogZm9sbG93aW5nIGRlZmluZXMgc2hvdWxkIGJlIHVzZWQgZm9yIHN0cnVjdHVyZSBtZW1iZXJzICovCisjZGVmaW5lICAgICBfX0lNICAgICB2b2xhdGlsZSBjb25zdCAgICAgIC8qISBEZWZpbmVzICdyZWFkIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fT00gICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3dyaXRlIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU9NICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3JlYWQgLyB3cml0ZScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworCisvKkB9IGVuZCBvZiBncm91cCBDb3J0ZXgtTTArICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEFic3RyYWN0aW9uCisgIENvcmUgUmVnaXN0ZXIgY29udGFpbjoKKyAgLSBDb3JlIFJlZ2lzdGVyCisgIC0gQ29yZSBOVklDIFJlZ2lzdGVyCisgIC0gQ29yZSBTQ0IgUmVnaXN0ZXIKKyAgLSBDb3JlIFN5c1RpY2sgUmVnaXN0ZXIKKyAgLSBDb3JlIE1QVSBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfY29yZV9yZWdpc3RlciBEZWZpbmVzIGFuZCBUeXBlIERlZmluaXRpb25zCisgIFxicmllZiBUeXBlIGRlZmluaXRpb25zIGFuZCBkZWZpbmVzIGZvciBDb3J0ZXgtTSBwcm9jZXNzb3IgYmFzZWQgZGV2aWNlcy4KKyovCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX0NPUkUgIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcnMKKyAgXGJyaWVmICAgICAgQ29yZSBSZWdpc3RlciB0eXBlIGRlZmluaXRpb25zLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoQVBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjI4OyAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4yNyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IEFQU1JfVHlwZTsKKworLyogQVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBBUFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIEFQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBJbnRlcnJ1cHQgUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKElQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgSVNSOjk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uIDggIEV4Y2VwdGlvbiBudW1iZXIgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjIzOyAgICAgICAgICAgICAgLyohPCBiaXQ6ICA5Li4zMSAgUmVzZXJ2ZWQgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gSVBTUl9UeXBlOworCisvKiBJUFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSBJUFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgSVBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBTcGVjaWFsLVB1cnBvc2UgUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXJzICh4UFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoxNTsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMjMgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgVDoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjQgIFRodW1iIGJpdCAgICAgICAgKHJlYWQgMCkgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOjM7ICAgICAgICAgICAgICAgLyohPCBiaXQ6IDI1Li4yNyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IHhQU1JfVHlwZTsKKworLyogeFBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSB4UFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIHhQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9UX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9JU1JfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfSVNSX01zayAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCB4UFNSX0lTUl9Qb3MqLykgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIENvbnRyb2wgUmVnaXN0ZXJzIChDT05UUk9MKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IG5QUklWOjE7ICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAwICBFeGVjdXRpb24gcHJpdmlsZWdlIGluIFRocmVhZCBtb2RlICovCisgICAgdWludDMyX3QgU1BTRUw6MTsgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDEgIFN0YWNrIHRvIGJlIHVzZWQgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOjMwOyAgICAgICAgICAgICAgLyohPCBiaXQ6ICAyLi4zMSAgUmVzZXJ2ZWQgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gQ09OVFJPTF9UeXBlOworCisvKiBDT05UUk9MIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIENPTlRST0xfU1BTRUxfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IFNQU0VMIFBvc2l0aW9uICovCisjZGVmaW5lIENPTlRST0xfU1BTRUxfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBDT05UUk9MX1NQU0VMX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IFNQU0VMIE1hc2sgKi8KKworI2RlZmluZSBDT05UUk9MX25QUklWX1BvcyAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBuUFJJViBQb3NpdGlvbiAqLworI2RlZmluZSBDT05UUk9MX25QUklWX01zayAgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBDT05UUk9MX25QUklWX1BvcyovKSAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBuUFJJViBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NPUkUgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19OVklDICBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpCisgIFxicmllZiAgICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBOVklDIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgSVNFUlsxVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMzFVXTsKKyAgX19JT00gdWludDMyX3QgSUNFUlsxVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJTRVJWRUQxWzMxVV07CisgIF9fSU9NIHVpbnQzMl90IElTUFJbMVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDEwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBQZW5kaW5nIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlszMVVdOworICBfX0lPTSB1aW50MzJfdCBJQ1BSWzFVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxODAgKFIvVykgIEludGVycnVwdCBDbGVhciBQZW5kaW5nIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1szMVVdOworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDRbNjRVXTsKKyAgX19JT00gdWludDMyX3QgSVBbOFVdOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzAwIChSL1cpICBJbnRlcnJ1cHQgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KK30gIE5WSUNfVHlwZTsKKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTlZJQyAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NCICAgICBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU0gIHVpbnQzMl90IENQVUlEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgQ1BVSUQgQmFzZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBJQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEludGVycnVwdCBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworI2lmIChfX1ZUT1JfUFJFU0VOVCA9PSAxVSkKKyAgX19JT00gdWludDMyX3QgVlRPUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBWZWN0b3IgVGFibGUgT2Zmc2V0IFJlZ2lzdGVyICovCisjZWxzZQorICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDA7CisjZW5kaWYKKyAgX19JT00gdWludDMyX3QgQUlSQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgU0NSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIENvbmZpZ3VyYXRpb24gQ29udHJvbCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDE7CisgIF9fSU9NIHVpbnQzMl90IFNIUFsyVV07ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxQyAoUi9XKSAgU3lzdGVtIEhhbmRsZXJzIFByaW9yaXR5IFJlZ2lzdGVycy4gWzBdIGlzIFJFU0VSVkVEICovCisgIF9fSU9NIHVpbnQzMl90IFNIQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgKi8KK30gU0NCX1R5cGU7CisKKy8qIFNDQiBDUFVJRCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfUG9zICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IElNUExFTUVOVEVSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Nc2sgICAgICAgICAgKDB4RkZVTCA8PCBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfUG9zKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX1BvcyAgICAgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfVkFSSUFOVF9Nc2sgICAgICAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1BVSURfVkFSSUFOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFZBUklBTlQgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9BUkNISVRFQ1RVUkVfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogQVJDSElURUNUVVJFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9BUkNISVRFQ1RVUkVfTXNrICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9BUkNISVRFQ1RVUkVfUG9zKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogQVJDSElURUNUVVJFIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfUEFSVE5PX1BvcyAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFBBUlROTyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfUEFSVE5PX01zayAgICAgICAgICAgICAgICgweEZGRlVMIDw8IFNDQl9DUFVJRF9QQVJUTk9fUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFBBUlROTyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBSRVZJU0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fTXNrICAgICAgICAgICAgICgweEZVTCAvKjw8IFNDQl9DUFVJRF9SRVZJU0lPTl9Qb3MqLykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIE1hc2sgKi8KKworLyogU0NCIEludGVycnVwdCBDb250cm9sIFN0YXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBOTUlQRU5EU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX05NSVBFTkRTRVRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9OTUlQRU5EU0VUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBOTUlQRU5EU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZTRVRfUG9zICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1ZTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVkNMUl9Qb3MgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVkNMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUU0VUX1BvcyAgICAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVFNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNUU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RDTFJfUG9zICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUQ0xSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zICAgICAgICAgICAgMjNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQUkVFTVBUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBSRUVNUFRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQUkVFTVBUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQUkVFTVBUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcyAgICAgICAgICAgIDIyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUEVORElORyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9JU1JQRU5ESU5HX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfSVNSUEVORElOR19Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUEVORElORyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfUG9zICAgICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX01zayAgICAgICAgICAgKDB4MUZGVUwgPDwgU0NCX0lDU1JfVkVDVFBFTkRJTkdfUG9zKSAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUUEVORElORyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RBQ1RJVkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVEFDVElWRV9Nc2sgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zKi8pICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RBQ1RJVkUgTWFzayAqLworCisjaWYgKF9fVlRPUl9QUkVTRU5UID09IDFVKQorLyogU0NCIEludGVycnVwdCBDb250cm9sIFN0YXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9WVE9SX1RCTE9GRl9Qb3MgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxPRkYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1ZUT1JfVEJMT0ZGX01zayAgICAgICAgICAgICAgICAoMHhGRkZGRkZVTCA8PCBTQ0JfVlRPUl9UQkxPRkZfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTE9GRiBNYXNrICovCisjZW5kaWYKKworLyogU0NCIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Nc2sgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MpICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zICAgICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfUG9zICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX1BvcyAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Nc2sgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfUG9zICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgTWFzayAqLworCisvKiBTQ0IgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fUG9zICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1NUS0FMSUdOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcyAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcyAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX01zayAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDQiAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU3lzVGljayAgICAgU3lzdGVtIFRpY2sgVGltZXIgKFN5c1RpY2spCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIFRpbWVyIFJlZ2lzdGVycy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBUaW1lciAoU3lzVGljaykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgU3lzVGljayBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgTE9BRDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBTeXNUaWNrIFJlbG9hZCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBWQUw7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFN5c1RpY2sgQ3VycmVudCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBDQUxJQjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvICkgIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgKi8KK30gU3lzVGlja19UeXBlOworCisvKiBTeXNUaWNrIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcykgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICgxVUwgLyo8PCBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBNYXNrICovCisKKy8qIFN5c1RpY2sgUmVsb2FkIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIE1hc2sgKi8KKworLyogU3lzVGljayBDdXJyZW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIE1hc2sgKi8KKworLyogU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX01zayAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX1BvcyAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfTXNrICAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9TS0VXX1BvcykgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19DQUxJQl9URU5NU19Qb3MqLykgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1N5c1RpY2sgKi8KKworI2lmIChfX01QVV9QUkVTRU5UID09IDFVKQorLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19NUFUgICAgIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBUWVBFOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIE1QVSBUeXBlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgTVBVIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUk5SOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBNUFUgUmVnaW9uIFJOUmJlciBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KK30gTVBVX1R5cGU7CisKKy8qIE1QVSBUeXBlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fUG9zICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fTXNrICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfVFlQRV9JUkVHSU9OX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIE1hc2sgKi8KKworI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX1BvcyAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX01zayAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1RZUEVfRFJFR0lPTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1RZUEVfU0VQQVJBVEVfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IFNFUEFSQVRFIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX1NFUEFSQVRFX01zayAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9UWVBFX1NFUEFSQVRFX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBTRVBBUkFURSBNYXNrICovCisKKy8qIE1QVSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBQUklWREVGRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX1BSSVZERUZFTkFfTXNrICAgICAgICAgICAgKDFVTCA8PCBNUFVfQ1RSTF9QUklWREVGRU5BX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBQUklWREVGRU5BIE1hc2sgKi8KKworI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Qb3MgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfSEZOTUlFTkFfTXNrICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9DVFJMX0hGTk1JRU5BX1BvcykgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEhGTk1JRU5BIE1hc2sgKi8KKworI2RlZmluZSBNUFVfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX0VOQUJMRV9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9DVFJMX0VOQUJMRV9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBFTkFCTEUgTWFzayAqLworCisvKiBNUFUgUmVnaW9uIE51bWJlciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUk5SX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUk5SOiBSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JOUl9SRUdJT05fTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgTVBVX1JOUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJOUjogUkVHSU9OIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Qb3MgICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Nc2sgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZVTCA8PCBNUFVfUkJBUl9BRERSX1BvcykgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQkFSX1ZBTElEX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9WQUxJRF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JCQVJfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogVkFMSUQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQkFSX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfUkVHSU9OX01zayAgICAgICAgICAgICAgICAoMHhGVUwgLyo8PCBNUFVfUkJBUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFJFR0lPTiBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9SQVNSX0FUVFJTX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBmaWVsZCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9BVFRSU19Nc2sgICAgICAgICAgICAgICAgICgweEZGRkZVTCA8PCBNUFVfUkFTUl9BVFRSU19Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgZmllbGQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1hOX1BvcyAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5YTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9YTl9Nc2sgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfWE5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuWE4gTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0FQX1BvcyAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5BUCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9BUF9Nc2sgICAgICAgICAgICAgICAgICAgICgweDdVTCA8PCBNUFVfUkFTUl9BUF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQVAgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1RFWF9Qb3MgICAgICAgICAgICAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5URVggUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfVEVYX01zayAgICAgICAgICAgICAgICAgICAoMHg3VUwgPDwgTVBVX1JBU1JfVEVYX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlRFWCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU19Qb3MgICAgICAgICAgICAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlMgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX1NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlMgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5DIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5DIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9CX1BvcyAgICAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9CX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU1JEX1BvcyAgICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFN1Yi1SZWdpb24gRGlzYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TUkRfTXNrICAgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1JBU1JfU1JEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogU3ViLVJlZ2lvbiBEaXNhYmxlIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TSVpFX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIFNpemUgRmllbGQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU0laRV9Nc2sgICAgICAgICAgICAgICAgICAoMHgxRlVMIDw8IE1QVV9SQVNSX1NJWkVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBTaXplIEZpZWxkIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIGVuYWJsZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX1JBU1JfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBlbmFibGUgYml0IERpc2FibGUgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19NUFUgKi8KKyNlbmRpZgorCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZURlYnVnICAgICAgIENvcmUgRGVidWcgUmVnaXN0ZXJzIChDb3JlRGVidWcpCisgIFxicmllZiAgICBDb3J0ZXgtTTArIENvcmUgRGVidWcgUmVnaXN0ZXJzIChEQ0IgcmVnaXN0ZXJzLCBTSENTUiwgYW5kIERGU1IpIGFyZSBvbmx5IGFjY2Vzc2libGUgb3ZlciBEQVAgYW5kIG5vdCB2aWEgcHJvY2Vzc29yLgorICAgICAgICAgICAgVGhlcmVmb3JlIHRoZXkgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoZSBDb3J0ZXgtTTArIGhlYWRlciBmaWxlLgorICBAeworICovCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19Db3JlRGVidWcgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2JpdGZpZWxkICAgICBDb3JlIHJlZ2lzdGVyIGJpdCBmaWVsZCBtYWNyb3MKKyAgXGJyaWVmICAgICAgTWFjcm9zIGZvciB1c2Ugd2l0aCBiaXQgZmllbGQgZGVmaW5pdGlvbnMgKHh4eF9Qb3MsIHh4eF9Nc2spLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBNYXNrIGFuZCBzaGlmdCBhIGJpdCBmaWVsZCB2YWx1ZSBmb3IgdXNlIGluIGEgcmVnaXN0ZXIgYml0IHJhbmdlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHRoZSBiaXQgZmllbGQuCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9WQUwyRkxEKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSA8PCBmaWVsZCAjIyBfUG9zKSAmIGZpZWxkICMjIF9Nc2spCisKKy8qKgorICBcYnJpZWYgICAgIE1hc2sgYW5kIHNoaWZ0IGEgcmVnaXN0ZXIgdmFsdWUgdG8gZXh0cmFjdCBhIGJpdCBmaWxlZCB2YWx1ZS4KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiByZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIGJpdCBmaWVsZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9GTEQyVkFMKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSAmIGZpZWxkICMjIF9Nc2spID4+IGZpZWxkICMjIF9Qb3MpCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX2NvcmVfYml0ZmllbGQgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2Jhc2UgICAgIENvcmUgRGVmaW5pdGlvbnMKKyAgXGJyaWVmICAgICAgRGVmaW5pdGlvbnMgZm9yIGJhc2UgYWRkcmVzc2VzLCB1bmlvbnMsIGFuZCBzdHJ1Y3R1cmVzLgorICBAeworICovCisKKy8qIE1lbW9yeSBtYXBwaW5nIG9mIENvcnRleC1NMCsgSGFyZHdhcmUgKi8KKyNkZWZpbmUgU0NTX0JBU0UgICAgICAgICAgICAoMHhFMDAwRTAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIFNwYWNlIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBTeXNUaWNrX0JBU0UgICAgICAgIChTQ1NfQkFTRSArICAweDAwMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgTlZJQ19CQVNFICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMTAwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IE5WSUMgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFNDQl9CQVNFICAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEQwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBCbG9jayBCYXNlIEFkZHJlc3MgKi8KKworI2RlZmluZSBTQ0IgICAgICAgICAgICAgICAgICgoU0NCX1R5cGUgICAgICAgKikgICAgIFNDQl9CQVNFICAgICAgKSAgIC8qITwgU0NCIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIFN5c1RpY2sgICAgICAgICAgICAgKChTeXNUaWNrX1R5cGUgICAqKSAgICAgU3lzVGlja19CQVNFICApICAgLyohPCBTeXNUaWNrIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIE5WSUMgICAgICAgICAgICAgICAgKChOVklDX1R5cGUgICAgICAqKSAgICAgTlZJQ19CQVNFICAgICApICAgLyohPCBOVklDIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisKKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxVSkKKyAgI2RlZmluZSBNUFVfQkFTRSAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDkwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKi8KKyAgI2RlZmluZSBNUFUgICAgICAgICAgICAgICAoKE1QVV9UeXBlICAgICAgICopICAgICBNUFVfQkFTRSAgICAgICkgICAvKiE8IE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKi8KKyNlbmRpZgorCisvKkB9ICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIKKyAgQ29yZSBGdW5jdGlvbiBJbnRlcmZhY2UgY29udGFpbnM6CisgIC0gQ29yZSBOVklDIEZ1bmN0aW9ucworICAtIENvcmUgU3lzVGljayBGdW5jdGlvbnMKKyAgLSBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UgRnVuY3Rpb25zIGFuZCBJbnN0cnVjdGlvbnMgUmVmZXJlbmNlCisqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICBOVklDIGZ1bmN0aW9ucyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyBOVklDIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgbWFuYWdlIGludGVycnVwdHMgYW5kIGV4Y2VwdGlvbnMgdmlhIHRoZSBOVklDLgorICBAeworICovCisKKy8qIEludGVycnVwdCBQcmlvcml0aWVzIGFyZSBXT1JEIGFjY2Vzc2libGUgb25seSB1bmRlciBBUk12Nk0gICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoZSBmb2xsb3dpbmcgTUFDUk9TIGhhbmRsZSBnZW5lcmF0aW9uIG9mIHRoZSByZWdpc3RlciBvZmZzZXQgYW5kIGJ5dGUgbWFza3MgKi8KKyNkZWZpbmUgX0JJVF9TSElGVChJUlFuKSAgICAgICAgICggICgoKCh1aW50MzJfdCkoaW50MzJfdCkoSVJRbikpICAgICAgICAgKSAgICAgICYgIDB4MDNVTCkgKiA4VUwpCisjZGVmaW5lIF9TSFBfSURYKElSUW4pICAgICAgICAgICAoICgoKCgodWludDMyX3QpKGludDMyX3QpKElSUW4pKSAmIDB4MEZVTCktOFVMKSA+PiAgICAyVUwpICAgICAgKQorI2RlZmluZSBfSVBfSURYKElSUW4pICAgICAgICAgICAgKCAgICgoKHVpbnQzMl90KShpbnQzMl90KShJUlFuKSkgICAgICAgICAgICAgICAgPj4gICAgMlVMKSAgICAgICkKKworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBFbmFibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRW5hYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JU0VSWzBVXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIERpc2FibGUgRXh0ZXJuYWwgSW50ZXJydXB0CisgIFxkZXRhaWxzIERpc2FibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRGlzYWJsZUlSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNFUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHBlbmRpbmcgcmVnaXN0ZXIgaW4gdGhlIE5WSUMgYW5kIHJldHVybnMgdGhlIHBlbmRpbmcgYml0IGZvciB0aGUgc3BlY2lmaWVkIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IHBlbmRpbmcuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBwZW5kaW5nLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUMtPklTUFJbMFVdICYgKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBTZXRzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTUFJbMFVdID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgQ2xlYXIgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgQ2xlYXJzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0NsZWFyUGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNQUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgXG5vdGUgICAgVGhlIHByaW9yaXR5IGNhbm5vdCBiZSBzZXQgZm9yIGV2ZXJ5IGNvcmUgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxwYXJhbSBbaW5dICBwcmlvcml0eSAgUHJpb3JpdHkgdG8gc2V0LgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuLCB1aW50MzJfdCBwcmlvcml0eSkKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICBTQ0ItPlNIUFtfU0hQX0lEWChJUlFuKV0gPSAoKHVpbnQzMl90KShTQ0ItPlNIUFtfU0hQX0lEWChJUlFuKV0gJiB+KDB4RkZVTCA8PCBfQklUX1NISUZUKElSUW4pKSkgfAorICAgICAgICgoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpIDw8IF9CSVRfU0hJRlQoSVJRbikpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBOVklDLT5JUFtfSVBfSURYKElSUW4pXSAgPSAoKHVpbnQzMl90KShOVklDLT5JUFtfSVBfSURYKElSUW4pXSAgJiB+KDB4RkZVTCA8PCBfQklUX1NISUZUKElSUW4pKSkgfAorICAgICAgICgoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpIDw8IF9CSVRfU0hJRlQoSVJRbikpKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgbnVtYmVyIGNhbiBiZSBwb3NpdGl2ZSB0byBzcGVjaWZ5IGFuIGV4dGVybmFsIChkZXZpY2Ugc3BlY2lmaWMpIGludGVycnVwdCwKKyAgICAgICAgICAgb3IgbmVnYXRpdmUgdG8gc3BlY2lmeSBhbiBpbnRlcm5hbCAoY29yZSkgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgSW50ZXJydXB0IFByaW9yaXR5LgorICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGlzIGFsaWduZWQgYXV0b21hdGljYWxseSB0byB0aGUgaW1wbGVtZW50ZWQgcHJpb3JpdHkgYml0cyBvZiB0aGUgbWljcm9jb250cm9sbGVyLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbikKK3sKKworICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkKKyAgeworICAgIHJldHVybigodWludDMyX3QpKCgoU0NCLT5TSFBbX1NIUF9JRFgoSVJRbildID4+IF9CSVRfU0hJRlQoSVJRbikgKSAmICh1aW50MzJfdCkweEZGVUwpID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JUFsgX0lQX0lEWChJUlFuKV0gPj4gX0JJVF9TSElGVChJUlFuKSApICYgKHVpbnQzMl90KTB4RkZVTCkgPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gUmVzZXQKKyAgXGRldGFpbHMgSW5pdGlhdGVzIGEgc3lzdGVtIHJlc2V0IHJlcXVlc3QgdG8gcmVzZXQgdGhlIE1DVS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TeXN0ZW1SZXNldCh2b2lkKQoreworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgYWxsIG91dHN0YW5kaW5nIG1lbW9yeSBhY2Nlc3NlcyBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJlZCB3cml0ZSBhcmUgY29tcGxldGVkIGJlZm9yZSByZXNldCAqLworICBTQ0ItPkFJUkNSICA9ICgoMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayk7CisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBjb21wbGV0aW9uIG9mIG1lbW9yeSBhY2Nlc3MgKi8KKworICBmb3IoOzspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YWl0IHVudGlsIHJlc2V0ICovCisgIHsKKyAgICBfX05PUCgpOworICB9Cit9CisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyAqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICBTeXNUaWNrIGZ1bmN0aW9uICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgU3lzVGljayBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IGNvbmZpZ3VyZSB0aGUgU3lzdGVtLgorICBAeworICovCisKKyNpZiAoX19WZW5kb3JfU3lzVGlja0NvbmZpZyA9PSAwVSkKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBUaWNrIENvbmZpZ3VyYXRpb24KKyAgXGRldGFpbHMgSW5pdGlhbGl6ZXMgdGhlIFN5c3RlbSBUaW1lciBhbmQgaXRzIGludGVycnVwdCwgYW5kIHN0YXJ0cyB0aGUgU3lzdGVtIFRpY2sgVGltZXIuCisgICAgICAgICAgIENvdW50ZXIgaXMgaW4gZnJlZSBydW5uaW5nIG1vZGUgdG8gZ2VuZXJhdGUgcGVyaW9kaWMgaW50ZXJydXB0cy4KKyAgXHBhcmFtIFtpbl0gIHRpY2tzICBOdW1iZXIgb2YgdGlja3MgYmV0d2VlbiB0d28gaW50ZXJydXB0cy4KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQuCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkLgorICBcbm90ZSAgICBXaGVuIHRoZSB2YXJpYWJsZSA8Yj5fX1ZlbmRvcl9TeXNUaWNrQ29uZmlnPC9iPiBpcyBzZXQgdG8gMSwgdGhlbiB0aGUKKyAgICAgICAgICAgZnVuY3Rpb24gPGI+U3lzVGlja19Db25maWc8L2I+IGlzIG5vdCBpbmNsdWRlZC4gSW4gdGhpcyBjYXNlLCB0aGUgZmlsZSA8Yj48aT5kZXZpY2U8L2k+Lmg8L2I+CisgICAgICAgICAgIG11c3QgY29udGFpbiBhIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgU3lzVGlja19Db25maWcodWludDMyX3QgdGlja3MpCit7CisgIGlmICgodGlja3MgLSAxVUwpID4gU3lzVGlja19MT0FEX1JFTE9BRF9Nc2spCisgIHsKKyAgICByZXR1cm4gKDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2FkIHZhbHVlIGltcG9zc2libGUgKi8KKyAgfQorCisgIFN5c1RpY2stPkxPQUQgID0gKHVpbnQzMl90KSh0aWNrcyAtIDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCByZWxvYWQgcmVnaXN0ZXIgKi8KKyAgTlZJQ19TZXRQcmlvcml0eSAoU3lzVGlja19JUlFuLCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpIC0gMVVMKTsgLyogc2V0IFByaW9yaXR5IGZvciBTeXN0aWNrIEludGVycnVwdCAqLworICBTeXNUaWNrLT5WQUwgICA9IDBVTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2FkIHRoZSBTeXNUaWNrIENvdW50ZXIgVmFsdWUgKi8KKyAgU3lzVGljay0+Q1RSTCAgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgU3lzVGljayBJUlEgYW5kIFN5c1RpY2sgVGltZXIgKi8KKyAgcmV0dXJuICgwVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gc3VjY2Vzc2Z1bCAqLworfQorCisjZW5kaWYKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ00wUExVU19IX0RFUEVOREFOVCAqLworCisjZW5kaWYgLyogX19DTVNJU19HRU5FUklDICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtMy5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGFjNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbTMuaApAQCAtMCwwICsxLDE3NjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjb3JlX2NtMy5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0zIENvcmUgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9DTTNfSF9HRU5FUklDCisjZGVmaW5lIF9fQ09SRV9DTTNfSF9HRU5FUklDCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgIFxwYWdlIENNU0lTX01JU1JBX0V4Y2VwdGlvbnMgIE1JU1JBLUM6MjAwNCBDb21wbGlhbmNlIEV4Y2VwdGlvbnMKKyAgQ01TSVMgdmlvbGF0ZXMgdGhlIGZvbGxvd2luZyBNSVNSQS1DOjIwMDQgcnVsZXM6CisKKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDguNSwgb2JqZWN0L2Z1bmN0aW9uIGRlZmluaXRpb24gaW4gaGVhZGVyIGZpbGUuPGJyPgorICAgICBGdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBoZWFkZXIgZmlsZXMgYXJlIHVzZWQgdG8gYWxsb3cgJ2lubGluaW5nJy4KKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgMTguNCwgZGVjbGFyYXRpb24gb2YgdW5pb24gdHlwZSBvciBvYmplY3Qgb2YgdW5pb24gdHlwZTogJ3suLi59Jy48YnI+CisgICAgIFVuaW9ucyBhcmUgdXNlZCBmb3IgZWZmZWN0aXZlIHJlcHJlc2VudGF0aW9uIG9mIGNvcmUgcmVnaXN0ZXJzLgorCisgICBcbGkgQWR2aXNvcnkgUnVsZSAxOS43LCBGdW5jdGlvbi1saWtlIG1hY3JvIGRlZmluZWQuPGJyPgorICAgICBGdW5jdGlvbi1saWtlIG1hY3JvcyBhcmUgdXNlZCB0byBhbGxvdyBtb3JlIGVmZmljaWVudCBjb2RlLgorICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBDTVNJUyBkZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcaW5ncm91cCBDb3J0ZXhfTTMKKyAgQHsKKyAqLworCisvKiAgQ01TSVMgQ00zIGRlZmluaXRpb25zICovCisjZGVmaW5lIF9fQ00zX0NNU0lTX1ZFUlNJT05fTUFJTiAgKDB4MDRVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBbMzE6MTZdIENNU0lTIEhBTCBtYWluIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTNfQ01TSVNfVkVSU0lPTl9TVUIgICAoMHgxRVUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFsxNTowXSAgQ01TSVMgSEFMIHN1YiB2ZXJzaW9uICovCisjZGVmaW5lIF9fQ00zX0NNU0lTX1ZFUlNJT04gICAgICAgKChfX0NNM19DTVNJU19WRVJTSU9OX01BSU4gPDwgMTZVKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQ00zX0NNU0lTX1ZFUlNJT05fU1VCICAgICAgICAgICApICAgICAgICAvKiE8IENNU0lTIEhBTCB2ZXJzaW9uIG51bWJlciAqLworCisjZGVmaW5lIF9fQ09SVEVYX00gICAgICAgICAgICAgICAgKDB4MDNVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3J0ZXgtTSBDb3JlICovCisKKworI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIF9faW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBfX2lubGluZQorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBJQVIgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBJQVIgQ29tcGlsZXIuIE9ubHkgYXZhaWxhYmxlIGluIEhpZ2ggb3B0aW1pemF0aW9uIG1vZGUhICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBUSSBDQ1MgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgVEFTS0lORyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjZGVmaW5lIF9fcGFja2VkCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBDT1NNSUMgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlci4gVXNlIC1wYzk5IG9uIGNvbXBpbGUgbGluZSAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxzZQorICAjZXJyb3IgVW5rbm93biBjb21waWxlcgorI2VuZGlmCisKKy8qKiBfX0ZQVV9VU0VEIGluZGljYXRlcyB3aGV0aGVyIGFuIEZQVSBpcyB1c2VkIG9yIG5vdC4KKyAgICBUaGlzIGNvcmUgZG9lcyBub3Qgc3VwcG9ydCBhbiBGUFUgYXQgYWxsCisqLworI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisKKyNpZiBkZWZpbmVkICggX19DQ19BUk0gKQorICAjaWYgZGVmaW5lZCBfX1RBUkdFVF9GUFVfVkZQCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2lmIGRlZmluZWQgX19BUk1fUENTX1ZGUAorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNpZiBkZWZpbmVkIChfX1ZGUF9GUF9fKSAmJiAhZGVmaW5lZChfX1NPRlRGUF9fKQorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2lmIGRlZmluZWQgX19BUk1WRlBfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2lmIGRlZmluZWQgX19USV9WRlBfU1VQUE9SVF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgI2lmIGRlZmluZWQgX19GUFVfVkZQX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjaWYgKCBfX0NTTUNfXyAmIDB4NDAwVSkKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZW5kaWYKKworI2luY2x1ZGUgImNvcmVfY21JbnN0ci5oIiAgICAgICAgICAgICAgICAvKiBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAqLworI2luY2x1ZGUgImNvcmVfY21GdW5jLmgiICAgICAgICAgICAgICAgICAvKiBDb3JlIEZ1bmN0aW9uIEFjY2VzcyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DT1JFX0NNM19IX0dFTkVSSUMgKi8KKworI2lmbmRlZiBfX0NNU0lTX0dFTkVSSUMKKworI2lmbmRlZiBfX0NPUkVfQ00zX0hfREVQRU5EQU5UCisjZGVmaW5lIF9fQ09SRV9DTTNfSF9ERVBFTkRBTlQKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogY2hlY2sgZGV2aWNlIGRlZmluZXMgYW5kIHVzZSBkZWZhdWx0cyAqLworI2lmIGRlZmluZWQgX19DSEVDS19ERVZJQ0VfREVGSU5FUworICAjaWZuZGVmIF9fQ00zX1JFVgorICAgICNkZWZpbmUgX19DTTNfUkVWICAgICAgICAgICAgICAgMHgwMjAwVQorICAgICN3YXJuaW5nICJfX0NNM19SRVYgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX01QVV9QUkVTRU5UCisgICAgI2RlZmluZSBfX01QVV9QUkVTRU5UICAgICAgICAgICAgIDBVCisgICAgI3dhcm5pbmcgIl9fTVBVX1BSRVNFTlQgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX05WSUNfUFJJT19CSVRTCisgICAgI2RlZmluZSBfX05WSUNfUFJJT19CSVRTICAgICAgICAgIDRVCisgICAgI3dhcm5pbmcgIl9fTlZJQ19QUklPX0JJVFMgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnCisgICAgI2RlZmluZSBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnICAgIDBVCisgICAgI3dhcm5pbmcgIl9fVmVuZG9yX1N5c1RpY2tDb25maWcgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisjZW5kaWYKKworLyogSU8gZGVmaW5pdGlvbnMgKGFjY2VzcyByZXN0cmljdGlvbnMgdG8gcGVyaXBoZXJhbCByZWdpc3RlcnMpICovCisvKioKKyAgICBcZGVmZ3JvdXAgQ01TSVNfZ2xvYl9kZWZzIENNU0lTIEdsb2JhbCBEZWZpbmVzCisKKyAgICA8c3Ryb25nPklPIFR5cGUgUXVhbGlmaWVyczwvc3Ryb25nPiBhcmUgdXNlZAorICAgIFxsaSB0byBzcGVjaWZ5IHRoZSBhY2Nlc3MgdG8gcGVyaXBoZXJhbCB2YXJpYWJsZXMuCisgICAgXGxpIGZvciBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBwZXJpcGhlcmFsIHJlZ2lzdGVyIGRlYnVnIGluZm9ybWF0aW9uLgorKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworICAjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8KKyNlbHNlCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2VuZGlmCisjZGVmaW5lICAgICBfX08gICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAnd3JpdGUgb25seScgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU8gICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHBlcm1pc3Npb25zICovCisKKy8qIGZvbGxvd2luZyBkZWZpbmVzIHNob3VsZCBiZSB1c2VkIGZvciBzdHJ1Y3R1cmUgbWVtYmVycyAqLworI2RlZmluZSAgICAgX19JTSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAvKiEgRGVmaW5lcyAncmVhZCBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX09NICAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICd3cml0ZSBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX0lPTSAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ29ydGV4X00zICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEFic3RyYWN0aW9uCisgIENvcmUgUmVnaXN0ZXIgY29udGFpbjoKKyAgLSBDb3JlIFJlZ2lzdGVyCisgIC0gQ29yZSBOVklDIFJlZ2lzdGVyCisgIC0gQ29yZSBTQ0IgUmVnaXN0ZXIKKyAgLSBDb3JlIFN5c1RpY2sgUmVnaXN0ZXIKKyAgLSBDb3JlIERlYnVnIFJlZ2lzdGVyCisgIC0gQ29yZSBNUFUgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX2NvcmVfcmVnaXN0ZXIgRGVmaW5lcyBhbmQgVHlwZSBEZWZpbml0aW9ucworICBcYnJpZWYgVHlwZSBkZWZpbml0aW9ucyBhbmQgZGVmaW5lcyBmb3IgQ29ydGV4LU0gcHJvY2Vzc29yIGJhc2VkIGRldmljZXMuCisqLworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19DT1JFICBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXJzCisgIFxicmllZiAgICAgIENvcmUgUmVnaXN0ZXIgdHlwZSBkZWZpbml0aW9ucy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKEFQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyNzsgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uMjYgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgUToxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjcgIFNhdHVyYXRpb24gY29uZGl0aW9uIGZsYWcgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IEFQU1JfVHlwZTsKKworLyogQVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBBUFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIEFQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgTWFzayAqLworCisjZGVmaW5lIEFQU1JfUV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFEgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9RX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfUV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogUSBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIEludGVycnVwdCBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoSVBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MjM7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBJUFNSX1R5cGU7CisKKy8qIElQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVBTUl9JU1JfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIFBvc2l0aW9uICovCisjZGVmaW5lIElQU1JfSVNSX01zayAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBJUFNSX0lTUl9Qb3MqLykgICAgICAgICAgICAgICAgICAvKiE8IElQU1I6IElTUiBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIFNwZWNpYWwtUHVycG9zZSBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlcnMgKHhQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgSVNSOjk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uIDggIEV4Y2VwdGlvbiBudW1iZXIgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjE1OyAgICAgICAgICAgICAgLyohPCBiaXQ6ICA5Li4yMyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBUOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNCAgVGh1bWIgYml0ICAgICAgICAocmVhZCAwKSAqLworICAgIHVpbnQzMl90IElUOjI7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogMjUuLjI2ICBzYXZlZCBJVCBzdGF0ZSAgIChyZWFkIDApICovCisgICAgdWludDMyX3QgUToxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjcgIFNhdHVyYXRpb24gY29uZGl0aW9uIGZsYWcgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IHhQU1JfVHlwZTsKKworLyogeFBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSB4UFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIHhQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgTWFzayAqLworCisjZGVmaW5lIHhQU1JfUV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFEgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9RX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfUV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogUSBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9JVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9JVF9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAoM1VMIDw8IHhQU1JfSVRfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVQgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9UX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9JU1JfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfSVNSX01zayAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCB4UFNSX0lTUl9Qb3MqLykgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIENvbnRyb2wgUmVnaXN0ZXJzIChDT05UUk9MKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IG5QUklWOjE7ICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAwICBFeGVjdXRpb24gcHJpdmlsZWdlIGluIFRocmVhZCBtb2RlICovCisgICAgdWludDMyX3QgU1BTRUw6MTsgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDEgIFN0YWNrIHRvIGJlIHVzZWQgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOjMwOyAgICAgICAgICAgICAgLyohPCBiaXQ6ICAyLi4zMSAgUmVzZXJ2ZWQgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gQ09OVFJPTF9UeXBlOworCisvKiBDT05UUk9MIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIENPTlRST0xfU1BTRUxfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IFNQU0VMIFBvc2l0aW9uICovCisjZGVmaW5lIENPTlRST0xfU1BTRUxfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBDT05UUk9MX1NQU0VMX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IFNQU0VMIE1hc2sgKi8KKworI2RlZmluZSBDT05UUk9MX25QUklWX1BvcyAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBuUFJJViBQb3NpdGlvbiAqLworI2RlZmluZSBDT05UUk9MX25QUklWX01zayAgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBDT05UUk9MX25QUklWX1BvcyovKSAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBuUFJJViBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NPUkUgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19OVklDICBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpCisgIFxicmllZiAgICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBOVklDIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgSVNFUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMjRVXTsKKyAgX19JT00gdWludDMyX3QgSUNFUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJTRVJWRUQxWzI0VV07CisgIF9fSU9NIHVpbnQzMl90IElTUFJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDEwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBQZW5kaW5nIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlsyNFVdOworICBfX0lPTSB1aW50MzJfdCBJQ1BSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxODAgKFIvVykgIEludGVycnVwdCBDbGVhciBQZW5kaW5nIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1syNFVdOworICBfX0lPTSB1aW50MzJfdCBJQUJSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyMDAgKFIvVykgIEludGVycnVwdCBBY3RpdmUgYml0IFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENFs1NlVdOworICBfX0lPTSB1aW50OF90ICBJUFsyNDBVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDAgKFIvVykgIEludGVycnVwdCBQcmlvcml0eSBSZWdpc3RlciAoOEJpdCB3aWRlKSAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDVbNjQ0VV07CisgIF9fT00gIHVpbnQzMl90IFNUSVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEUwMCAoIC9XKSAgU29mdHdhcmUgVHJpZ2dlciBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KK30gIE5WSUNfVHlwZTsKKworLyogU29mdHdhcmUgVHJpZ2dlcmVkIEludGVycnVwdCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBOVklDX1NUSVJfSU5USURfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTVElSOiBJTlRMSU5FU05VTSBQb3NpdGlvbiAqLworI2RlZmluZSBOVklDX1NUSVJfSU5USURfTXNrICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgTlZJQ19TVElSX0lOVElEX1BvcyovKSAgICAgICAgLyohPCBTVElSOiBJTlRMSU5FU05VTSBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX05WSUMgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1NDQiAgICAgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIChTQ0IpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBDUFVJRDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIENQVUlEIEJhc2UgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgSUNTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBJbnRlcnJ1cHQgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgVlRPUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBWZWN0b3IgVGFibGUgT2Zmc2V0IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEFJUkNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFNDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ0NSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDhfdCAgU0hQWzEyVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBTeXN0ZW0gSGFuZGxlcnMgUHJpb3JpdHkgUmVnaXN0ZXJzICg0LTcsIDgtMTEsIDEyLTE1KSAqLworICBfX0lPTSB1aW50MzJfdCBTSENTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjQgKFIvVykgIFN5c3RlbSBIYW5kbGVyIENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyOCAoUi9XKSAgQ29uZmlndXJhYmxlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBIRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMkMgKFIvVykgIEhhcmRGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgREZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDMwIChSL1cpICBEZWJ1ZyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgTU1GQVI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM0IChSL1cpICBNZW1NYW5hZ2UgRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBCRkFSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzggKFIvVykgIEJ1c0ZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQUZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDNDIChSL1cpICBBdXhpbGlhcnkgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IFBGUlsyVV07ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0MCAoUi8gKSAgUHJvY2Vzc29yIEZlYXR1cmUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgREZSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQ4IChSLyApICBEZWJ1ZyBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IEFEUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0QyAoUi8gKSAgQXV4aWxpYXJ5IEZlYXR1cmUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgTU1GUls0VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDUwIChSLyApICBNZW1vcnkgTW9kZWwgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBJU0FSWzVVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNjAgKFIvICkgIEluc3RydWN0aW9uIFNldCBBdHRyaWJ1dGVzIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFs1VV07CisgIF9fSU9NIHVpbnQzMl90IENQQUNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4OCAoUi9XKSAgQ29wcm9jZXNzb3IgQWNjZXNzIENvbnRyb2wgUmVnaXN0ZXIgKi8KK30gU0NCX1R5cGU7CisKKy8qIFNDQiBDUFVJRCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfUG9zICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IElNUExFTUVOVEVSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Nc2sgICAgICAgICAgKDB4RkZVTCA8PCBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfUG9zKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX1BvcyAgICAgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfVkFSSUFOVF9Nc2sgICAgICAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1BVSURfVkFSSUFOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFZBUklBTlQgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9BUkNISVRFQ1RVUkVfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogQVJDSElURUNUVVJFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9BUkNISVRFQ1RVUkVfTXNrICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9BUkNISVRFQ1RVUkVfUG9zKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogQVJDSElURUNUVVJFIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfUEFSVE5PX1BvcyAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFBBUlROTyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfUEFSVE5PX01zayAgICAgICAgICAgICAgICgweEZGRlVMIDw8IFNDQl9DUFVJRF9QQVJUTk9fUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFBBUlROTyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBSRVZJU0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fTXNrICAgICAgICAgICAgICgweEZVTCAvKjw8IFNDQl9DUFVJRF9SRVZJU0lPTl9Qb3MqLykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIE1hc2sgKi8KKworLyogU0NCIEludGVycnVwdCBDb250cm9sIFN0YXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBOTUlQRU5EU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX05NSVBFTkRTRVRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9OTUlQRU5EU0VUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBOTUlQRU5EU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZTRVRfUG9zICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1ZTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVkNMUl9Qb3MgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVkNMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUU0VUX1BvcyAgICAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVFNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNUU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RDTFJfUG9zICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUQ0xSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zICAgICAgICAgICAgMjNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQUkVFTVBUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBSRUVNUFRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQUkVFTVBUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQUkVFTVBUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcyAgICAgICAgICAgIDIyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUEVORElORyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9JU1JQRU5ESU5HX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfSVNSUEVORElOR19Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUEVORElORyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfUG9zICAgICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX01zayAgICAgICAgICAgKDB4MUZGVUwgPDwgU0NCX0lDU1JfVkVDVFBFTkRJTkdfUG9zKSAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUUEVORElORyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUkVUVE9CQVNFX1BvcyAgICAgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFJFVFRPQkFTRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9SRVRUT0JBU0VfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUkVUVE9CQVNFX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUkVUVE9CQVNFIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX01zayAgICAgICAgICAgICgweDFGRlVMIC8qPDwgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MqLykgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBNYXNrICovCisKKy8qIFNDQiBWZWN0b3IgVGFibGUgT2Zmc2V0IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjaWYgKF9fQ00zX1JFViA8IDB4MDIwMVUpICAgICAgICAgICAgICAgICAgIC8qIGNvcmUgcjJwMSAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxCQVNFX1BvcyAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMQkFTRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxCQVNFX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1ZUT1JfVEJMQkFTRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMQkFTRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1ZUT1JfVEJMT0ZGX1BvcyAgICAgICAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTE9GRiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfTXNrICAgICAgICAgICAgICAgICgweDNGRkZGRlVMIDw8IFNDQl9WVE9SX1RCTE9GRl9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIE1hc2sgKi8KKyNlbHNlCisjZGVmaW5lIFNDQl9WVE9SX1RCTE9GRl9Qb3MgICAgICAgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxPRkYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1ZUT1JfVEJMT0ZGX01zayAgICAgICAgICAgICAgICAoMHgxRkZGRkZGVUwgPDwgU0NCX1ZUT1JfVEJMT0ZGX1BvcykgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTE9GRiBNYXNrICovCisjZW5kaWYKKworLyogU0NCIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Nc2sgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MpICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zICAgICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFBSSUdST1VQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2sgICAgICAgICAgICAgKDdVTCA8PCBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogUFJJR1JPVVAgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX01zayAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MpICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUUkVTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Nc2sgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Qb3MqLykgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUUkVTRVQgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfUG9zICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgTWFzayAqLworCisvKiBTQ0IgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fUG9zICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1NUS0FMSUdOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX0JGSEZOTUlHTl9Qb3MgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBCRkhGTk1JR04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9CRkhGTk1JR05fTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfQkZIRk5NSUdOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogQkZIRk5NSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX0RJVl8wX1RSUF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBESVZfMF9UUlAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9ESVZfMF9UUlBfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfRElWXzBfVFJQX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogRElWXzBfVFJQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcyAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9VU0VSU0VUTVBFTkRfUG9zICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVVNFUlNFVE1QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfVVNFUlNFVE1QRU5EX01zayAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VTRVJTRVRNUEVORF9Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVTRVJTRVRNUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Qb3MgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogTk9OQkFTRVRIUkRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Nc2sgICAgICAgICAoMVVMIC8qPDwgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Qb3MqLykgICAgICAgIC8qITwgU0NCIENDUjogTk9OQkFTRVRIUkRFTkEgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcyAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxURU5BIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRFTkEgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxURU5BX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEVOQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Nc2sgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TVkNBTExQRU5ERURfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MgICAgICAgMTRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcyAgICAgICAxM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfTXNrICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcykgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUUEVOREVEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Nc2sgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zKSAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9TWVNUSUNLQUNUX1BvcyAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1lTVElDS0FDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1lTVElDS0FDVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNZU1RJQ0tBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfUG9zICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfUEVORFNWQUNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfTU9OSVRPUkFDVF9Qb3MgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1PTklUT1JBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01PTklUT1JBQ1RfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NT05JVE9SQUNUX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNT05JVE9SQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX1BvcyAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTEFDVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcyAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfUG9zICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX01zayAgICAgICAgICAoMVVMIC8qPDwgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX1BvcyovKSAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEFDVCBNYXNrICovCisKKy8qIFNDQiBDb25maWd1cmFibGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DRlNSX1VTR0ZBVUxUU1JfUG9zICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBVc2FnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfVVNHRkFVTFRTUl9Nc2sgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0NGU1JfVVNHRkFVTFRTUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENGU1I6IFVzYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NGU1JfQlVTRkFVTFRTUl9Qb3MgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IEJ1cyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfQlVTRkFVTFRTUl9Nc2sgICAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DRlNSX0JVU0ZBVUxUU1JfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IEJ1cyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DRlNSX01FTUZBVUxUU1JfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBNZW1vcnkgTWFuYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9NRU1GQVVMVFNSX01zayAgICAgICAgICAgICgweEZGVUwgLyo8PCBTQ0JfQ0ZTUl9NRU1GQVVMVFNSX1BvcyovKSAgICAgICAgLyohPCBTQ0IgQ0ZTUjogTWVtb3J5IE1hbmFnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgTWFzayAqLworCisvKiBTQ0IgSGFyZCBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0hGU1JfREVCVUdFVlRfUG9zICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IERFQlVHRVZUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX0RFQlVHRVZUX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9ERUJVR0VWVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBERUJVR0VWVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0hGU1JfRk9SQ0VEX1BvcyAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IEZPUkNFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSEZTUl9GT1JDRURfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0hGU1JfRk9SQ0VEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogRk9SQ0VEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSEZTUl9WRUNUVEJMX1BvcyAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogVkVDVFRCTCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSEZTUl9WRUNUVEJMX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0hGU1JfVkVDVFRCTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogVkVDVFRCTCBNYXNrICovCisKKy8qIFNDQiBEZWJ1ZyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0RGU1JfRVhURVJOQUxfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEVYVEVSTkFMIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX0VYVEVSTkFMX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9FWFRFUk5BTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBFWFRFUk5BTCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfVkNBVENIX1BvcyAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IFZDQVRDSCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9WQ0FUQ0hfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfVkNBVENIX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogVkNBVENIIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9EV1RUUkFQX1BvcyAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRFdUVFJBUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9EV1RUUkFQX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfRFdUVFJBUF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRFdUVFJBUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfQktQVF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEJLUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfQktQVF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX0JLUFRfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEJLUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX0hBTFRFRF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBIQUxURUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfSEFMVEVEX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0RGU1JfSEFMVEVEX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEhBTFRFRCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDQiAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NuU0NCIFN5c3RlbSBDb250cm9scyBub3QgaW4gU0NCIChTQ25TQ0IpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2wgYW5kIElEIFJlZ2lzdGVyIG5vdCBpbiB0aGUgU0NCCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgSUQgUmVnaXN0ZXIgbm90IGluIHRoZSBTQ0IuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07CisgIF9fSU0gIHVpbnQzMl90IElDVFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi8gKSAgSW50ZXJydXB0IENvbnRyb2xsZXIgVHlwZSBSZWdpc3RlciAqLworI2lmICgoZGVmaW5lZCBfX0NNM19SRVYpICYmIChfX0NNM19SRVYgPj0gMHgyMDBVKSkKKyAgX19JT00gdWludDMyX3QgQUNUTFI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBBdXhpbGlhcnkgQ29udHJvbCBSZWdpc3RlciAqLworI2Vsc2UKKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxWzFVXTsKKyNlbmRpZgorfSBTQ25TQ0JfVHlwZTsKKworLyogSW50ZXJydXB0IENvbnRyb2xsZXIgVHlwZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ25TQ0JfSUNUUl9JTlRMSU5FU05VTV9Qb3MgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJQ1RSOiBJTlRMSU5FU05VTSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ25TQ0JfSUNUUl9JTlRMSU5FU05VTV9Nc2sgICAgICAgICgweEZVTCAvKjw8IFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX1BvcyovKSAgLyohPCBJQ1RSOiBJTlRMSU5FU05VTSBNYXNrICovCisKKy8qIEF1eGlsaWFyeSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisKKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0ZPTERfUG9zICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0ZPTEQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0ZPTERfTXNrICAgICAgICAgICAoMVVMIDw8IFNDblNDQl9BQ1RMUl9ESVNGT0xEX1BvcykgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0ZPTEQgTWFzayAqLworCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNERUZXQlVGX1BvcyAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNERUZXQlVGIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNERUZXQlVGX01zayAgICAgICAgKDFVTCA8PCBTQ25TQ0JfQUNUTFJfRElTREVGV0JVRl9Qb3MpICAgICAgICAvKiE8IEFDVExSOiBESVNERUZXQlVGIE1hc2sgKi8KKworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTTUNZQ0lOVF9Qb3MgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRElTTUNZQ0lOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTTUNZQ0lOVF9Nc2sgICAgICAgICgxVUwgLyo8PCBTQ25TQ0JfQUNUTFJfRElTTUNZQ0lOVF9Qb3MqLykgICAgLyohPCBBQ1RMUjogRElTTUNZQ0lOVCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDbm90U0NCICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TeXNUaWNrICAgICBTeXN0ZW0gVGljayBUaW1lciAoU3lzVGljaykKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gVGltZXIgUmVnaXN0ZXJzLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIFRpbWVyIChTeXNUaWNrKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBTeXNUaWNrIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBMT0FEOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIFN5c1RpY2sgUmVsb2FkIFZhbHVlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFZBTDsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgU3lzVGljayBDdXJyZW50IFZhbHVlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IENBTElCOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi8gKSAgU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciAqLworfSBTeXNUaWNrX1R5cGU7CisKKy8qIFN5c1RpY2sgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcyAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrICAgICAgICAgICAgKDFVTCAvKjw8IFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zKi8pICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIE1hc2sgKi8KKworLyogU3lzVGljayBSZWxvYWQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBMT0FEOiBSRUxPQUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19MT0FEX1JFTE9BRF9Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zKi8pICAgIC8qITwgU3lzVGljayBMT0FEOiBSRUxPQUQgTWFzayAqLworCisvKiBTeXNUaWNrIEN1cnJlbnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBWQUw6IENVUlJFTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19WQUxfQ1VSUkVOVF9Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zKi8pICAgIC8qITwgU3lzVGljayBWQUw6IENVUlJFTlQgTWFzayAqLworCisvKiBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfTXNrICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX05PUkVGX1BvcykgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfUG9zICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX1NLRVdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU3lzVGljayAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfSVRNICAgICBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIChJVE0pCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCAoSVRNKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCBSZWdpc3RlciAoSVRNKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19PTSAgdW5pb24KKyAgeworICAgIF9fT00gIHVpbnQ4X3QgICAgdTg7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IDgtYml0ICovCisgICAgX19PTSAgdWludDE2X3QgICB1MTY7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgMTYtYml0ICovCisgICAgX19PTSAgdWludDMyX3QgICB1MzI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgMzItYml0ICovCisgIH0gIFBPUlQgWzMyVV07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgUmVnaXN0ZXJzICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFs4NjRVXTsKKyAgX19JT00gdWludDMyX3QgVEVSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTAwIChSL1cpICBJVE0gVHJhY2UgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMVsxNVVdOworICBfX0lPTSB1aW50MzJfdCBUUFI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFNDAgKFIvVykgIElUTSBUcmFjZSBQcml2aWxlZ2UgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzE1VV07CisgIF9fSU9NIHVpbnQzMl90IFRDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEU4MCAoUi9XKSAgSVRNIFRyYWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzI5VV07CisgIF9fT00gIHVpbnQzMl90IElXUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGOCAoIC9XKSAgSVRNIEludGVncmF0aW9uIFdyaXRlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IElSUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGQyAoUi8gKSAgSVRNIEludGVncmF0aW9uIFJlYWQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgSU1DUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RjAwIChSL1cpICBJVE0gSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENFs0M1VdOworICBfX09NICB1aW50MzJfdCBMQVI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQjAgKCAvVykgIElUTSBMb2NrIEFjY2VzcyBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBMU1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQjQgKFIvICkgIElUTSBMb2NrIFN0YXR1cyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDVbNlVdOworICBfX0lNICB1aW50MzJfdCBQSUQ0OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRDAgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM0ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDU7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZENCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzUgKi8KKyAgX19JTSAgdWludDMyX3QgUElENjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkQ4IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNiAqLworICBfX0lNICB1aW50MzJfdCBQSUQ3OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGREMgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM3ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDA7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFMCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzAgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkU0IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMSAqLworICBfX0lNICB1aW50MzJfdCBQSUQyOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRTggKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMyICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDM7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFQyAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzMgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkYwIChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMCAqLworICBfX0lNICB1aW50MzJfdCBDSUQxOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRjQgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMxICovCisgIF9fSU0gIHVpbnQzMl90IENJRDI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGOCAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzIgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMzsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkZDIChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMyAqLworfSBJVE1fVHlwZTsKKworLyogSVRNIFRyYWNlIFByaXZpbGVnZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fVFBSX1BSSVZNQVNLX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVFBSOiBQUklWTUFTSyBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVFBSX1BSSVZNQVNLX01zayAgICAgICAgICAgICAgICgweEZVTCAvKjw8IElUTV9UUFJfUFJJVk1BU0tfUG9zKi8pICAgICAgICAgICAgLyohPCBJVE0gVFBSOiBQUklWTUFTSyBNYXNrICovCisKKy8qIElUTSBUcmFjZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9UQ1JfQlVTWV9Qb3MgICAgICAgICAgICAgICAgICAgMjNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEJVU1kgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9CVVNZX01zayAgICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQlVTWSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9UcmFjZUJ1c0lEX1BvcyAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQVRCSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9UcmFjZUJ1c0lEX01zayAgICAgICAgICAgICAoMHg3RlVMIDw8IElUTV9UQ1JfVHJhY2VCdXNJRF9Qb3MpICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQVRCSUQgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfR1RTRlJFUV9Qb3MgICAgICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEdsb2JhbCB0aW1lc3RhbXAgZnJlcXVlbmN5IFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfR1RTRlJFUV9Nc2sgICAgICAgICAgICAgICAgKDNVTCA8PCBJVE1fVENSX0dUU0ZSRVFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEdsb2JhbCB0aW1lc3RhbXAgZnJlcXVlbmN5IE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1RTUHJlc2NhbGVfUG9zICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU1ByZXNjYWxlIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfVFNQcmVzY2FsZV9Nc2sgICAgICAgICAgICAgKDNVTCA8PCBJVE1fVENSX1RTUHJlc2NhbGVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTUHJlc2NhbGUgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfU1dPRU5BX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNXT0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1NXT0VOQV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9TV09FTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTV09FTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfRFdURU5BX1BvcyAgICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IERXVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0RXVEVOQV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9EV1RFTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBEV1RFTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfU1lOQ0VOQV9Qb3MgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNZTkNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9TWU5DRU5BX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfU1lOQ0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1lOQ0VOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9UU0VOQV9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9UU0VOQV9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfVFNFTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNFTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfSVRNRU5BX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IElUTSBFbmFibGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfSVRNRU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9UQ1JfSVRNRU5BX1BvcyovKSAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IElUTSBFbmFibGUgYml0IE1hc2sgKi8KKworLyogSVRNIEludGVncmF0aW9uIFdyaXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9JV1JfQVRWQUxJRE1fUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBJV1I6IEFUVkFMSURNIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9JV1JfQVRWQUxJRE1fTXNrICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9JV1JfQVRWQUxJRE1fUG9zKi8pICAgICAgICAgICAgICAvKiE8IElUTSBJV1I6IEFUVkFMSURNIE1hc2sgKi8KKworLyogSVRNIEludGVncmF0aW9uIFJlYWQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0lSUl9BVFJFQURZTV9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIElSUjogQVRSRUFEWU0gUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0lSUl9BVFJFQURZTV9Nc2sgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0lSUl9BVFJFQURZTV9Qb3MqLykgICAgICAgICAgICAgIC8qITwgSVRNIElSUjogQVRSRUFEWU0gTWFzayAqLworCisvKiBJVE0gSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9JTUNSX0lOVEVHUkFUSU9OX1BvcyAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBJTUNSOiBJTlRFR1JBVElPTiBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fSU1DUl9JTlRFR1JBVElPTl9Nc2sgICAgICAgICAgICgxVUwgLyo8PCBJVE1fSU1DUl9JTlRFR1JBVElPTl9Qb3MqLykgICAgICAgICAgLyohPCBJVE0gSU1DUjogSU5URUdSQVRJT04gTWFzayAqLworCisvKiBJVE0gTG9jayBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0xTUl9CeXRlQWNjX1BvcyAgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQnl0ZUFjYyBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fTFNSX0J5dGVBY2NfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX0xTUl9CeXRlQWNjX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBCeXRlQWNjIE1hc2sgKi8KKworI2RlZmluZSBJVE1fTFNSX0FjY2Vzc19Qb3MgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBBY2Nlc3MgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0xTUl9BY2Nlc3NfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9MU1JfQWNjZXNzX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQWNjZXNzIE1hc2sgKi8KKworI2RlZmluZSBJVE1fTFNSX1ByZXNlbnRfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBQcmVzZW50IFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9MU1JfUHJlc2VudF9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9MU1JfUHJlc2VudF9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IFByZXNlbnQgTWFzayAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX0lUTSAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfRFdUICAgICBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIChEV1QpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSAoRFdUKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSBSZWdpc3RlciAoRFdUKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENZQ0NOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgQ3ljbGUgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1BJQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBDUEkgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRVhDQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBFeGNlcHRpb24gT3ZlcmhlYWQgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgU0xFRVBDTlQ7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBTbGVlcCBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBMU1VDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIExTVSBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBGT0xEQ05UOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIEZvbGRlZC1pbnN0cnVjdGlvbiBDb3VudCBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBQQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMUMgKFIvICkgIFByb2dyYW0gQ291bnRlciBTYW1wbGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ09NUDA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDIwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDAgKi8KKyAgX19JT00gdWludDMyX3QgTUFTSzA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDAgKi8KKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04wOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAwICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVAxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAxICovCisgIF9fSU9NIHVpbnQzMl90IE1BU0sxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzNCAoUi9XKSAgTWFzayBSZWdpc3RlciAxICovCisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMTsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzOCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMSAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QMjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMiAqLworICBfX0lPTSB1aW50MzJfdCBNQVNLMjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMiAqLworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjI7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzFVXTsKKyAgX19JT00gdWludDMyX3QgQ09NUDM7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDUwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDMgKi8KKyAgX19JT00gdWludDMyX3QgTUFTSzM7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDU0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDMgKi8KKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04zOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDU4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAzICovCit9IERXVF9UeXBlOworCisvKiBEV1QgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfQ1RSTF9OVU1DT01QX1BvcyAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTlVNQ09NUCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OVU1DT01QX01zayAgICAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9OVU1DT01QX1BvcykgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTlVNQ09NUCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9UUkNQS1RfUG9zICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PVFJDUEtUIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05PVFJDUEtUX01zayAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PVFJDUEtUX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1RSQ1BLVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9FWFRUUklHX1BvcyAgICAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PRVhUVFJJRyBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT0VYVFRSSUdfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT0VYVFRSSUdfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9FWFRUUklHIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT0NZQ0NOVF9Qb3MgICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9DWUNDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9DWUNDTlRfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9DWUNDTlRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PQ1lDQ05UIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT1BSRkNOVF9Qb3MgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9QUkZDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9QUkZDTlRfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9QUkZDTlRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PUFJGQ05UIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DWUNFVlRFTkFfUG9zICAgICAgICAgICAgIDIyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NZQ0VWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NZQ0VWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0ZPTERFVlRFTkFfUG9zICAgICAgICAgICAgMjFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBGT0xERVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0ZPTERFVlRFTkFfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0ZPTERFVlRFTkFfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBGT0xERVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9MU1VFVlRFTkFfUG9zICAgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTFNVRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0xTVUVWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0xTVUVWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBMU1VFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1NMRUVQRVZURU5BX1BvcyAgICAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBTTEVFUEVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Nc2sgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Qb3MpICAgICAgICAgLyohPCBEV1QgQ1RSTDogU0xFRVBFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0VYQ0VWVEVOQV9Qb3MgICAgICAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfRVhDRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRVhDRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ0VWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1BJRVZURU5BX1BvcyAgICAgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENQSUVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DUElFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DUElFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1BJRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9FWENUUkNFTkFfUG9zICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDVFJDRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0VYQ1RSQ0VOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0VYQ1RSQ0VOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENUUkNFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1BDU0FNUExFTkFfUG9zICAgICAgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQQ1NBTVBMRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1BDU0FNUExFTkFfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX1BDU0FNUExFTkFfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQQ1NBTVBMRU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9TWU5DVEFQX1BvcyAgICAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogU1lOQ1RBUCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9TWU5DVEFQX01zayAgICAgICAgICAgICAgICgweDNVTCA8PCBEV1RfQ1RSTF9TWU5DVEFQX1BvcykgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogU1lOQ1RBUCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1lDVEFQX1BvcyAgICAgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ1RBUCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DWUNUQVBfTXNrICAgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DWUNUQVBfUG9zKSAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDVEFQIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9QT1NUSU5JVF9Qb3MgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVElOSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfUE9TVElOSVRfTXNrICAgICAgICAgICAgICAoMHhGVUwgPDwgRFdUX0NUUkxfUE9TVElOSVRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RJTklUIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9QT1NUUFJFU0VUX1BvcyAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVFBSRVNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9QT1NUUFJFU0VUX01zayAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9QT1NUUFJFU0VUX1BvcykgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVFBSRVNFVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1lDQ05URU5BX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0NOVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DWUNDTlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCAvKjw8IERXVF9DVFJMX0NZQ0NOVEVOQV9Qb3MqLykgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDQ05URU5BIE1hc2sgKi8KKworLyogRFdUIENQSSBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfQ1BJQ05UX0NQSUNOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1BJQ05UOiBDUElDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NQSUNOVF9DUElDTlRfTXNrICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0NQSUNOVF9DUElDTlRfUG9zKi8pICAgICAgIC8qITwgRFdUIENQSUNOVDogQ1BJQ05UIE1hc2sgKi8KKworLyogRFdUIEV4Y2VwdGlvbiBPdmVyaGVhZCBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfRVhDQ05UX0VYQ0NOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRVhDQ05UOiBFWENDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0VYQ0NOVF9FWENDTlRfTXNrICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0VYQ0NOVF9FWENDTlRfUG9zKi8pICAgICAgIC8qITwgRFdUIEVYQ0NOVDogRVhDQ05UIE1hc2sgKi8KKworLyogRFdUIFNsZWVwIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9TTEVFUENOVF9TTEVFUENOVF9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBTTEVFUENOVDogU0xFRVBDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX01zayAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX1BvcyovKSAgIC8qITwgRFdUIFNMRUVQQ05UOiBTTEVFUENOVCBNYXNrICovCisKKy8qIERXVCBMU1UgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0xTVUNOVF9MU1VDTlRfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIExTVUNOVDogTFNVQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9MU1VDTlRfTFNVQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9MU1VDTlRfTFNVQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBMU1VDTlQ6IExTVUNOVCBNYXNrICovCisKKy8qIERXVCBGb2xkZWQtaW5zdHJ1Y3Rpb24gQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0ZPTERDTlRfRk9MRENOVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZPTERDTlQ6IEZPTERDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZPTERDTlRfRk9MRENOVF9Nc2sgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0ZPTERDTlRfRk9MRENOVF9Qb3MqLykgICAgIC8qITwgRFdUIEZPTERDTlQ6IEZPTERDTlQgTWFzayAqLworCisvKiBEV1QgQ29tcGFyYXRvciBNYXNrIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9NQVNLX01BU0tfUG9zICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBNQVNLOiBNQVNLIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9NQVNLX01BU0tfTXNrICAgICAgICAgICAgICAgICAgKDB4MUZVTCAvKjw8IERXVF9NQVNLX01BU0tfUG9zKi8pICAgICAgICAgICAvKiE8IERXVCBNQVNLOiBNQVNLIE1hc2sgKi8KKworLyogRFdUIENvbXBhcmF0b3IgRnVuY3Rpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX01BVENIRURfUG9zICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBNQVRDSEVEIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9NQVRDSEVEX01zayAgICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9NQVRDSEVEX1BvcykgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTUFUQ0hFRCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjFfUG9zICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIxIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIxX01zayAgICAgICAgKDB4RlVMIDw8IERXVF9GVU5DVElPTl9EQVRBVkFERFIxX1BvcykgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjBfUG9zICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIwIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIwX01zayAgICAgICAgKDB4RlVMIDw8IERXVF9GVU5DVElPTl9EQVRBVkFERFIwX1BvcykgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Qb3MgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVlNJWkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Nc2sgICAgICAgICAoMHgzVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Qb3MpICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVlNJWkUgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9MTksxRU5BX1BvcyAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTE5LMUVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fTE5LMUVOQV9Nc2sgICAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fTE5LMUVOQV9Qb3MpICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IExOSzFFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVk1BVENIX1BvcyAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZNQVRDSCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZNQVRDSF9Nc2sgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZNQVRDSF9Qb3MpICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWTUFUQ0ggTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9DWUNNQVRDSF9Qb3MgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogQ1lDTUFUQ0ggUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX01zayAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX1BvcykgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBDWUNNQVRDSCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Qb3MgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBFTUlUUkFOR0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Nc2sgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Qb3MpICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBFTUlUUkFOR0UgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9GVU5DVElPTl9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogRlVOQ1RJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0ZVTkNUSU9OX01zayAgICAgICAgICAoMHhGVUwgLyo8PCBEV1RfRlVOQ1RJT05fRlVOQ1RJT05fUG9zKi8pICAgIC8qITwgRFdUIEZVTkNUSU9OOiBGVU5DVElPTiBNYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfRFdUICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19UUEkgICAgIFRyYWNlIFBvcnQgSW50ZXJmYWNlIChUUEkpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgVHJhY2UgUG9ydCBJbnRlcmZhY2UgKFRQSSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFRyYWNlIFBvcnQgSW50ZXJmYWNlIFJlZ2lzdGVyIChUUEkpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBTU1BTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIFN1cHBvcnRlZCBQYXJhbGxlbCBQb3J0IFNpemUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1NQU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBDdXJyZW50IFBhcmFsbGVsIFBvcnQgU2l6ZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMlVdOworICBfX0lPTSB1aW50MzJfdCBBQ1BSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIEFzeW5jaHJvbm91cyBDbG9jayBQcmVzY2FsZXIgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxWzU1VV07CisgIF9fSU9NIHVpbnQzMl90IFNQUFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDBGMCAoUi9XKSAgU2VsZWN0ZWQgUGluIFByb3RvY29sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlsxMzFVXTsKKyAgX19JTSAgdWludDMyX3QgRkZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzAwIChSLyApICBGb3JtYXR0ZXIgYW5kIEZsdXNoIFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBGRkNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDQgKFIvVykgIEZvcm1hdHRlciBhbmQgRmx1c2ggQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBGU0NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDggKFIvICkgIEZvcm1hdHRlciBTeW5jaHJvbml6YXRpb24gQ291bnRlciBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbNzU5VV07CisgIF9fSU0gIHVpbnQzMl90IFRSSUdHRVI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVFOCAoUi8gKSAgVFJJR0dFUiAqLworICBfX0lNICB1aW50MzJfdCBGSUZPMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRUMgKFIvICkgIEludGVncmF0aW9uIEVUTSBEYXRhICovCisgIF9fSU0gIHVpbnQzMl90IElUQVRCQ1RSMjsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGMCAoUi8gKSAgSVRBVEJDVFIyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENFsxVV07CisgIF9fSU0gIHVpbnQzMl90IElUQVRCQ1RSMDsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGOCAoUi8gKSAgSVRBVEJDVFIwICovCisgIF9fSU0gIHVpbnQzMl90IEZJRk8xOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGQyAoUi8gKSAgSW50ZWdyYXRpb24gSVRNIERhdGEgKi8KKyAgX19JT00gdWludDMyX3QgSVRDVFJMOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RjAwIChSL1cpICBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ1WzM5VV07CisgIF9fSU9NIHVpbnQzMl90IENMQUlNU0VUOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZBMCAoUi9XKSAgQ2xhaW0gdGFnIHNldCAqLworICBfX0lPTSB1aW50MzJfdCBDTEFJTUNMUjsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQTQgKFIvVykgIENsYWltIHRhZyBjbGVhciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDdbOFVdOworICBfX0lNICB1aW50MzJfdCBERVZJRDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQzggKFIvICkgIFRQSVVfREVWSUQgKi8KKyAgX19JTSAgdWludDMyX3QgREVWVFlQRTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkNDIChSLyApICBUUElVX0RFVlRZUEUgKi8KK30gVFBJX1R5cGU7CisKKy8qIFRQSSBBc3luY2hyb25vdXMgQ2xvY2sgUHJlc2NhbGVyIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9BQ1BSX1BSRVNDQUxFUl9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBBQ1BSOiBQUkVTQ0FMRVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0FDUFJfUFJFU0NBTEVSX01zayAgICAgICAgICAgICAoMHgxRkZGVUwgLyo8PCBUUElfQUNQUl9QUkVTQ0FMRVJfUG9zKi8pICAgIC8qITwgVFBJIEFDUFI6IFBSRVNDQUxFUiBNYXNrICovCisKKy8qIFRQSSBTZWxlY3RlZCBQaW4gUHJvdG9jb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX1NQUFJfVFhNT0RFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIFNQUFI6IFRYTU9ERSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfU1BQUl9UWE1PREVfTXNrICAgICAgICAgICAgICAgICgweDNVTCAvKjw8IFRQSV9TUFBSX1RYTU9ERV9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgU1BQUjogVFhNT0RFIE1hc2sgKi8KKworLyogVFBJIEZvcm1hdHRlciBhbmQgRmx1c2ggU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9GRlNSX0Z0Tm9uU3RvcF9Qb3MgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdE5vblN0b3AgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRnROb25TdG9wX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGU1JfRnROb25TdG9wX1BvcykgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0Tm9uU3RvcCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGU1JfVENQcmVzZW50X1BvcyAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IFRDUHJlc2VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9UQ1ByZXNlbnRfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZTUl9UQ1ByZXNlbnRfUG9zKSAgICAgICAgICAgLyohPCBUUEkgRkZTUjogVENQcmVzZW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZTUl9GdFN0b3BwZWRfUG9zICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnRTdG9wcGVkIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX0Z0U3RvcHBlZF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRlNSX0Z0U3RvcHBlZF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdFN0b3BwZWQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GRlNSX0ZsSW5Qcm9nX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGbEluUHJvZyBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9GbEluUHJvZ19Nc2sgICAgICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9GRlNSX0ZsSW5Qcm9nX1BvcyovKSAgICAgICAgLyohPCBUUEkgRkZTUjogRmxJblByb2cgTWFzayAqLworCisvKiBUUEkgRm9ybWF0dGVyIGFuZCBGbHVzaCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9GRkNSX1RyaWdJbl9Qb3MgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBUcmlnSW4gUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGQ1JfVHJpZ0luX01zayAgICAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGQ1JfVHJpZ0luX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IFRyaWdJbiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGQ1JfRW5GQ29udF9Qb3MgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IEVuRkNvbnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGQ1JfRW5GQ29udF9Nc2sgICAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGQ1JfRW5GQ29udF9Qb3MpICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IEVuRkNvbnQgTWFzayAqLworCisvKiBUUEkgVFJJR0dFUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfVFJJR0dFUl9UUklHR0VSX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgVFJJR0dFUjogVFJJR0dFUiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfVFJJR0dFUl9UUklHR0VSX01zayAgICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9UUklHR0VSX1RSSUdHRVJfUG9zKi8pICAgICAgLyohPCBUUEkgVFJJR0dFUjogVFJJR0dFUiBNYXNrICovCisKKy8qIFRQSSBJbnRlZ3JhdGlvbiBFVE0gRGF0YSBSZWdpc3RlciBEZWZpbml0aW9ucyAoRklGTzApICovCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX0FUVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fQVRWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9ieXRlY291bnRfUG9zICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9JVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX2J5dGVjb3VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9BVFZBTElEX1BvcyAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fQVRWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfRVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9BVFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9ieXRlY291bnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0VUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fYnl0ZWNvdW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNMl9Qb3MgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTIgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTJfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMF9FVE0yX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0yIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNMV9Qb3MgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTEgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTFfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMF9FVE0xX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0xIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNMF9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTAgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTBfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgVFBJX0ZJRk8wX0VUTTBfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0wIE1hc2sgKi8KKworLyogVFBJIElUQVRCQ1RSMiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfSVRBVEJDVFIyX0FUUkVBRFlfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRBVEJDVFIyOiBBVFJFQURZIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9JVEFUQkNUUjJfQVRSRUFEWV9Nc2sgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQVRCQ1RSMl9BVFJFQURZX1BvcyovKSAgICAvKiE8IFRQSSBJVEFUQkNUUjI6IEFUUkVBRFkgTWFzayAqLworCisvKiBUUEkgSW50ZWdyYXRpb24gSVRNIERhdGEgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKEZJRk8xKSAqLworI2RlZmluZSBUUElfRklGTzFfSVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9BVFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9JVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX0FUVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfSVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfSVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9ieXRlY291bnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX0FUVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0VUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fQVRWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfUG9zICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9FVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX2J5dGVjb3VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTJfUG9zICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0yIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0yX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBUUElfRklGTzFfSVRNMl9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTFfUG9zICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0xIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0xX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBUUElfRklGTzFfSVRNMV9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMSBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTBfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0wIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0wX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IFRQSV9GSUZPMV9JVE0wX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMCBNYXNrICovCisKKy8qIFRQSSBJVEFUQkNUUjAgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0lUQVRCQ1RSMF9BVFJFQURZX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIElUQVRCQ1RSMDogQVRSRUFEWSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfSVRBVEJDVFIwX0FUUkVBRFlfTXNrICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9JVEFUQkNUUjBfQVRSRUFEWV9Qb3MqLykgICAgLyohPCBUUEkgSVRBVEJDVFIwOiBBVFJFQURZIE1hc2sgKi8KKworLyogVFBJIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfSVRDVFJMX01vZGVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRDVFJMOiBNb2RlIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9JVENUUkxfTW9kZV9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQ1RSTF9Nb2RlX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBJVENUUkw6IE1vZGUgTWFzayAqLworCisvKiBUUEkgREVWSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0RFVklEX05SWlZBTElEX1BvcyAgICAgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBOUlpWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfTlJaVkFMSURfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfTlJaVkFMSURfUG9zKSAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE5SWlZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfTUFOQ1ZBTElEX1BvcyAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1BTkNWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfTUFOQ1ZBTElEX01zayAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfTUFOQ1ZBTElEX1BvcykgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1BTkNWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX1BUSU5WQUxJRF9Qb3MgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBQVElOVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX1BUSU5WQUxJRF9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX1BUSU5WQUxJRF9Qb3MpICAgICAgICAgIC8qITwgVFBJIERFVklEOiBQVElOVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9NaW5CdWZTel9Qb3MgICAgICAgICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTWluQnVmU3ogUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX01pbkJ1ZlN6X01zayAgICAgICAgICAgICAoMHg3VUwgPDwgVFBJX0RFVklEX01pbkJ1ZlN6X1BvcykgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNaW5CdWZTeiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX0FzeW5DbGtJbl9Qb3MgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBBc3luQ2xrSW4gUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX0FzeW5DbGtJbl9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX0FzeW5DbGtJbl9Qb3MpICAgICAgICAgIC8qITwgVFBJIERFVklEOiBBc3luQ2xrSW4gTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9OclRyYWNlSW5wdXRfUG9zICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTnJUcmFjZUlucHV0IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9OclRyYWNlSW5wdXRfTXNrICAgICAgICAgKDB4MUZVTCAvKjw8IFRQSV9ERVZJRF9OclRyYWNlSW5wdXRfUG9zKi8pICAvKiE8IFRQSSBERVZJRDogTnJUcmFjZUlucHV0IE1hc2sgKi8KKworLyogVFBJIERFVlRZUEUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0RFVlRZUEVfTWFqb3JUeXBlX1BvcyAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVlRZUEU6IE1ham9yVHlwZSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWVFlQRV9NYWpvclR5cGVfTXNrICAgICAgICAgICgweEZVTCA8PCBUUElfREVWVFlQRV9NYWpvclR5cGVfUG9zKSAgICAgICAgLyohPCBUUEkgREVWVFlQRTogTWFqb3JUeXBlIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWVFlQRV9TdWJUeXBlX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWVFlQRTogU3ViVHlwZSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWVFlQRV9TdWJUeXBlX01zayAgICAgICAgICAgICgweEZVTCAvKjw8IFRQSV9ERVZUWVBFX1N1YlR5cGVfUG9zKi8pICAgICAgLyohPCBUUEkgREVWVFlQRTogU3ViVHlwZSBNYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfVFBJICovCisKKworI2lmIChfX01QVV9QUkVTRU5UID09IDFVKQorLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19NUFUgICAgIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBUWVBFOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIE1QVSBUeXBlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgTVBVIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUk5SOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBNUFUgUmVnaW9uIFJOUmJlciBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkJBUl9BMTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBNUFUgQWxpYXMgMSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1JfQTE7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxOCAoUi9XKSAgTVBVIEFsaWFzIDEgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSX0EyOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMUMgKFIvVykgIE1QVSBBbGlhcyAyIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUl9BMjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDIwIChSL1cpICBNUFUgQWxpYXMgMiBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTM7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgTVBVIEFsaWFzIDMgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQVNSX0EzOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjggKFIvVykgIE1QVSBBbGlhcyAzIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KK30gTVBVX1R5cGU7CisKKy8qIE1QVSBUeXBlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fUG9zICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fTXNrICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfVFlQRV9JUkVHSU9OX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIE1hc2sgKi8KKworI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX1BvcyAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX01zayAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1RZUEVfRFJFR0lPTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1RZUEVfU0VQQVJBVEVfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IFNFUEFSQVRFIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX1NFUEFSQVRFX01zayAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9UWVBFX1NFUEFSQVRFX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBTRVBBUkFURSBNYXNrICovCisKKy8qIE1QVSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBQUklWREVGRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX1BSSVZERUZFTkFfTXNrICAgICAgICAgICAgKDFVTCA8PCBNUFVfQ1RSTF9QUklWREVGRU5BX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBQUklWREVGRU5BIE1hc2sgKi8KKworI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Qb3MgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfSEZOTUlFTkFfTXNrICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9DVFJMX0hGTk1JRU5BX1BvcykgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEhGTk1JRU5BIE1hc2sgKi8KKworI2RlZmluZSBNUFVfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX0VOQUJMRV9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9DVFJMX0VOQUJMRV9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBFTkFCTEUgTWFzayAqLworCisvKiBNUFUgUmVnaW9uIE51bWJlciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUk5SX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUk5SOiBSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JOUl9SRUdJT05fTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgTVBVX1JOUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJOUjogUkVHSU9OIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Qb3MgICAgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Nc2sgICAgICAgICAgICAgICAgICAoMHg3RkZGRkZGVUwgPDwgTVBVX1JCQVJfQUREUl9Qb3MpICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQkFSX1ZBTElEX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9WQUxJRF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JCQVJfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogVkFMSUQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQkFSX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfUkVHSU9OX01zayAgICAgICAgICAgICAgICAoMHhGVUwgLyo8PCBNUFVfUkJBUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFJFR0lPTiBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9SQVNSX0FUVFJTX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBmaWVsZCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9BVFRSU19Nc2sgICAgICAgICAgICAgICAgICgweEZGRkZVTCA8PCBNUFVfUkFTUl9BVFRSU19Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgZmllbGQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1hOX1BvcyAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5YTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9YTl9Nc2sgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfWE5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuWE4gTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0FQX1BvcyAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5BUCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9BUF9Nc2sgICAgICAgICAgICAgICAgICAgICgweDdVTCA8PCBNUFVfUkFTUl9BUF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQVAgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1RFWF9Qb3MgICAgICAgICAgICAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5URVggUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfVEVYX01zayAgICAgICAgICAgICAgICAgICAoMHg3VUwgPDwgTVBVX1JBU1JfVEVYX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlRFWCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU19Qb3MgICAgICAgICAgICAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlMgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX1NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlMgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5DIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5DIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9CX1BvcyAgICAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9CX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU1JEX1BvcyAgICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFN1Yi1SZWdpb24gRGlzYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TUkRfTXNrICAgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1JBU1JfU1JEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogU3ViLVJlZ2lvbiBEaXNhYmxlIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TSVpFX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIFNpemUgRmllbGQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU0laRV9Nc2sgICAgICAgICAgICAgICAgICAoMHgxRlVMIDw8IE1QVV9SQVNSX1NJWkVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBTaXplIEZpZWxkIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIGVuYWJsZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX1JBU1JfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBlbmFibGUgYml0IERpc2FibGUgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19NUFUgKi8KKyNlbmRpZgorCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZURlYnVnICAgICAgIENvcmUgRGVidWcgUmVnaXN0ZXJzIChDb3JlRGVidWcpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIENvcmUgRGVidWcgUmVnaXN0ZXIgKENvcmVEZWJ1ZykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IERIQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgRGVidWcgSGFsdGluZyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19PTSAgdWludDMyX3QgRENSU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0ICggL1cpICBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIFNlbGVjdG9yIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERDUkRSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgRGVidWcgQ29yZSBSZWdpc3RlciBEYXRhIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERFTUNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRGVidWcgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgKi8KK30gQ29yZURlYnVnX1R5cGU7CisKKy8qIERlYnVnIEhhbHRpbmcgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9EQkdLRVlfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogREJHS0VZIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9EQkdLRVlfTXNrICAgICAgICAgKDB4RkZGRlVMIDw8IENvcmVEZWJ1Z19ESENTUl9EQkdLRVlfUG9zKSAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogREJHS0VZIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Qb3MgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVTRVRfU1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVTRVRfU1RfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1JFU0VUX1NUX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFU0VUX1NUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfUG9zICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVUSVJFX1NUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFVElSRV9TVF9Nc2sgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfUG9zKSAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRVRJUkVfU1QgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Qb3MgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19MT0NLVVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfTE9DS1VQX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0xPQ0tVUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfUG9zICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1NMRUVQIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1NMRUVQX01zayAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19TTEVFUF9Qb3MpICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19TTEVFUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Qb3MgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0hBTFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0hBTFQgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Qb3MgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRUdSRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVHUkRZX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFR1JEWSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX1BvcyAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NOQVBTVEFMTCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TTkFQU1RBTExfTXNrICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX1BvcykgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU05BUFNUQUxMIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Qb3MgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfTUFTS0lOVFMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfTUFTS0lOVFNfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX01BU0tJTlRTX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX01BU0tJTlRTIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TVEVQX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU1RFUCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TVEVQX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU1RFUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfSEFMVF9Qb3MgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0hBTFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfSEFMVF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0hBTFQgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0RFQlVHRU5fUG9zICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19ERUJVR0VOIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0RFQlVHRU5fTXNrICAgICAgKDFVTCAvKjw8IENvcmVEZWJ1Z19ESENTUl9DX0RFQlVHRU5fUG9zKi8pICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19ERUJVR0VOIE1hc2sgKi8KKworLyogRGVidWcgQ29yZSBSZWdpc3RlciBTZWxlY3RvciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHV25SX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1duUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHV25SX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1duUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1NFTF9Qb3MgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1NFTF9Nc2sgICAgICAgICAoMHgxRlVMIC8qPDwgQ29yZURlYnVnX0RDUlNSX1JFR1NFTF9Qb3MqLykgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdTRUwgTWFzayAqLworCisvKiBEZWJ1ZyBFeGNlcHRpb24gYW5kIE1vbml0b3IgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX1BvcyAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFRSQ0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFRSQ0VOQSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9SRVFfUG9zICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fUkVRIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUkVRX01zayAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Qb3MpICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1JFUSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX1BvcyAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fU1RFUCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1NURVBfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9TVEVQIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfUG9zICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUEVORF9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1BFTkQgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fRU5fUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX0VOIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fRU5fTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX0VOIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSEFSREVSUl9Qb3MgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0hBUkRFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0hBUkRFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19IQVJERVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSU5URVJSX1BvcyAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0lOVEVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSU5URVJSX01zayAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Qb3MpICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0lOVEVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0JVU0VSUl9Qb3MgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19CVVNFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0JVU0VSUl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfUG9zKSAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19CVVNFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19TVEFURVJSX1BvcyAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfU1RBVEVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfU1RBVEVSUl9Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX1NUQVRFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DSEtFUlJfUG9zICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ0hLRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DSEtFUlJfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX1BvcykgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ0hLRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTk9DUEVSUl9Qb3MgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX05PQ1BFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX05PQ1BFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19OT0NQRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfUG9zICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX01NRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19NTUVSUl9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTU1FUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfUG9zICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ09SRVJFU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfTXNrICAgKDFVTCAvKjw8IENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfUG9zKi8pICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ09SRVJFU0VUIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfQ29yZURlYnVnICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfY29yZV9iaXRmaWVsZCAgICAgQ29yZSByZWdpc3RlciBiaXQgZmllbGQgbWFjcm9zCisgIFxicmllZiAgICAgIE1hY3JvcyBmb3IgdXNlIHdpdGggYml0IGZpZWxkIGRlZmluaXRpb25zICh4eHhfUG9zLCB4eHhfTXNrKS4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICAgTWFzayBhbmQgc2hpZnQgYSBiaXQgZmllbGQgdmFsdWUgZm9yIHVzZSBpbiBhIHJlZ2lzdGVyIGJpdCByYW5nZS4KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiB0aGUgYml0IGZpZWxkLgorICBccmV0dXJuICAgICAgICAgICBNYXNrZWQgYW5kIHNoaWZ0ZWQgdmFsdWUuCisqLworI2RlZmluZSBfVkFMMkZMRChmaWVsZCwgdmFsdWUpICAgICgodmFsdWUgPDwgZmllbGQgIyMgX1BvcykgJiBmaWVsZCAjIyBfTXNrKQorCisvKioKKyAgXGJyaWVmICAgICBNYXNrIGFuZCBzaGlmdCBhIHJlZ2lzdGVyIHZhbHVlIHRvIGV4dHJhY3QgYSBiaXQgZmlsZWQgdmFsdWUuCisgIFxwYXJhbVtpbl0gZmllbGQgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCBiaXQgZmllbGQgdmFsdWUuCisqLworI2RlZmluZSBfRkxEMlZBTChmaWVsZCwgdmFsdWUpICAgICgodmFsdWUgJiBmaWVsZCAjIyBfTXNrKSA+PiBmaWVsZCAjIyBfUG9zKQorCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19jb3JlX2JpdGZpZWxkICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfY29yZV9iYXNlICAgICBDb3JlIERlZmluaXRpb25zCisgIFxicmllZiAgICAgIERlZmluaXRpb25zIGZvciBiYXNlIGFkZHJlc3NlcywgdW5pb25zLCBhbmQgc3RydWN0dXJlcy4KKyAgQHsKKyAqLworCisvKiBNZW1vcnkgbWFwcGluZyBvZiBDb3J0ZXgtTTMgSGFyZHdhcmUgKi8KKyNkZWZpbmUgU0NTX0JBU0UgICAgICAgICAgICAoMHhFMDAwRTAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIFNwYWNlIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBJVE1fQkFTRSAgICAgICAgICAgICgweEUwMDAwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBEV1RfQkFTRSAgICAgICAgICAgICgweEUwMDAxMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBUUElfQkFTRSAgICAgICAgICAgICgweEUwMDQwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBDb3JlRGVidWdfQkFTRSAgICAgICgweEUwMDBFREYwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZSBEZWJ1ZyBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU3lzVGlja19CQVNFICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIE5WSUNfQkFTRSAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MDEwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBTQ0JfQkFTRSAgICAgICAgICAgIChTQ1NfQkFTRSArICAweDBEMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgQmxvY2sgQmFzZSBBZGRyZXNzICovCisKKyNkZWZpbmUgU0NuU0NCICAgICAgICAgICAgICAoKFNDblNDQl9UeXBlICAgICopICAgICBTQ1NfQkFTRSAgICAgICkgICAvKiE8IFN5c3RlbSBjb250cm9sIFJlZ2lzdGVyIG5vdCBpbiBTQ0IgKi8KKyNkZWZpbmUgU0NCICAgICAgICAgICAgICAgICAoKFNDQl9UeXBlICAgICAgICopICAgICBTQ0JfQkFTRSAgICAgICkgICAvKiE8IFNDQiBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBTeXNUaWNrICAgICAgICAgICAgICgoU3lzVGlja19UeXBlICAgKikgICAgIFN5c1RpY2tfQkFTRSAgKSAgIC8qITwgU3lzVGljayBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBOVklDICAgICAgICAgICAgICAgICgoTlZJQ19UeXBlICAgICAgKikgICAgIE5WSUNfQkFTRSAgICAgKSAgIC8qITwgTlZJQyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBJVE0gICAgICAgICAgICAgICAgICgoSVRNX1R5cGUgICAgICAgKikgICAgIElUTV9CQVNFICAgICAgKSAgIC8qITwgSVRNIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIERXVCAgICAgICAgICAgICAgICAgKChEV1RfVHlwZSAgICAgICAqKSAgICAgRFdUX0JBU0UgICAgICApICAgLyohPCBEV1QgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgVFBJICAgICAgICAgICAgICAgICAoKFRQSV9UeXBlICAgICAgICopICAgICBUUElfQkFTRSAgICAgICkgICAvKiE8IFRQSSBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBDb3JlRGVidWcgICAgICAgICAgICgoQ29yZURlYnVnX1R5cGUgKikgICAgIENvcmVEZWJ1Z19CQVNFKSAgIC8qITwgQ29yZSBEZWJ1ZyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMVUpCisgICNkZWZpbmUgTVBVX0JBU0UgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEQ5MFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICovCisgICNkZWZpbmUgTVBVICAgICAgICAgICAgICAgKChNUFVfVHlwZSAgICAgICAqKSAgICAgTVBVX0JBU0UgICAgICApICAgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICovCisjZW5kaWYKKworLypAfSAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyCisgIENvcmUgRnVuY3Rpb24gSW50ZXJmYWNlIGNvbnRhaW5zOgorICAtIENvcmUgTlZJQyBGdW5jdGlvbnMKKyAgLSBDb3JlIFN5c1RpY2sgRnVuY3Rpb25zCisgIC0gQ29yZSBEZWJ1ZyBGdW5jdGlvbnMKKyAgLSBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UgRnVuY3Rpb25zIGFuZCBJbnN0cnVjdGlvbnMgUmVmZXJlbmNlCisqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICBOVklDIGZ1bmN0aW9ucyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyBOVklDIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgbWFuYWdlIGludGVycnVwdHMgYW5kIGV4Y2VwdGlvbnMgdmlhIHRoZSBOVklDLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgR3JvdXBpbmcKKyAgXGRldGFpbHMgU2V0cyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgdXNpbmcgdGhlIHJlcXVpcmVkIHVubG9jayBzZXF1ZW5jZS4KKyAgICAgICAgICAgVGhlIHBhcmFtZXRlciBQcmlvcml0eUdyb3VwIGlzIGFzc2lnbmVkIHRvIHRoZSBmaWVsZCBTQ0ItPkFJUkNSIFsxMDo4XSBQUklHUk9VUCBmaWVsZC4KKyAgICAgICAgICAgT25seSB2YWx1ZXMgZnJvbSAwLi43IGFyZSB1c2VkLgorICAgICAgICAgICBJbiBjYXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBhbmQgYXZhaWxhYmxlCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpLCB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0LgorICBccGFyYW0gW2luXSAgICAgIFByaW9yaXR5R3JvdXAgIFByaW9yaXR5IGdyb3VwaW5nIGZpZWxkLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5R3JvdXBpbmcodWludDMyX3QgUHJpb3JpdHlHcm91cCkKK3sKKyAgdWludDMyX3QgcmVnX3ZhbHVlOworICB1aW50MzJfdCBQcmlvcml0eUdyb3VwVG1wID0gKFByaW9yaXR5R3JvdXAgJiAodWludDMyX3QpMHgwN1VMKTsgICAgICAgICAgICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLworCisgIHJlZ192YWx1ZSAgPSAgU0NCLT5BSVJDUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkIG9sZCByZWdpc3RlciBjb25maWd1cmF0aW9uICAgICovCisgIHJlZ192YWx1ZSAmPSB+KCh1aW50MzJfdCkoU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrIHwgU0NCX0FJUkNSX1BSSUdST1VQX01zaykpOyAvKiBjbGVhciBiaXRzIHRvIGNoYW5nZSAgICAgICAgICAgICAgICovCisgIHJlZ192YWx1ZSAgPSAgKHJlZ192YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpIHwKKyAgICAgICAgICAgICAgICAoUHJpb3JpdHlHcm91cFRtcCA8PCA4VSkgICAgICAgICAgICAgICAgICAgICAgKTsgICAgICAgICAgICAgIC8qIEluc2VydCB3cml0ZSBrZXkgYW5kIHByaW9ydHkgZ3JvdXAgKi8KKyAgU0NCLT5BSVJDUiA9ICByZWdfdmFsdWU7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQcmlvcml0eSBHcm91cGluZworICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgZnJvbSB0aGUgTlZJQyBJbnRlcnJ1cHQgQ29udHJvbGxlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgICBQcmlvcml0eSBncm91cGluZyBmaWVsZCAoU0NCLT5BSVJDUiBbMTA6OF0gUFJJR1JPVVAgZmllbGQpLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQcmlvcml0eUdyb3VwaW5nKHZvaWQpCit7CisgIHJldHVybiAoKHVpbnQzMl90KSgoU0NCLT5BSVJDUiAmIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2spID4+IFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBFbmFibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRW5hYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JU0VSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgRGlzYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19EaXNhYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JQ0VSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwZW5kaW5nIHJlZ2lzdGVyIGluIHRoZSBOVklDIGFuZCByZXR1cm5zIHRoZSBwZW5kaW5nIGJpdCBmb3IgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICAwICBJbnRlcnJ1cHQgc3RhdHVzIGlzIG5vdCBwZW5kaW5nLgorICBccmV0dXJuICAgICAgICAgICAgIDEgIEludGVycnVwdCBzdGF0dXMgaXMgcGVuZGluZy4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JU1BSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldICYgKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBTZXRzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBDbGVhciBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBDbGVhcnMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JQ1BSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEFjdGl2ZSBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgUmVhZHMgdGhlIGFjdGl2ZSByZWdpc3RlciBpbiBOVklDIGFuZCByZXR1cm5zIHRoZSBhY3RpdmUgYml0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgMCAgSW50ZXJydXB0IHN0YXR1cyBpcyBub3QgYWN0aXZlLgorICBccmV0dXJuICAgICAgICAgICAgIDEgIEludGVycnVwdCBzdGF0dXMgaXMgYWN0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRBY3RpdmUoSVJRbl9UeXBlIElSUW4pCit7CisgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SUFCUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgXG5vdGUgICAgVGhlIHByaW9yaXR5IGNhbm5vdCBiZSBzZXQgZm9yIGV2ZXJ5IGNvcmUgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxwYXJhbSBbaW5dICBwcmlvcml0eSAgUHJpb3JpdHkgdG8gc2V0LgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuLCB1aW50MzJfdCBwcmlvcml0eSkKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICBTQ0ItPlNIUFsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4RlVMKS00VUxdID0gKHVpbnQ4X3QpKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBOVklDLT5JUFsoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pXSAgICAgICAgICAgICAgID0gKHVpbnQ4X3QpKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgbnVtYmVyIGNhbiBiZSBwb3NpdGl2ZSB0byBzcGVjaWZ5IGFuIGV4dGVybmFsIChkZXZpY2Ugc3BlY2lmaWMpIGludGVycnVwdCwKKyAgICAgICAgICAgb3IgbmVnYXRpdmUgdG8gc3BlY2lmeSBhbiBpbnRlcm5hbCAoY29yZSkgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgSW50ZXJydXB0IFByaW9yaXR5LgorICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGlzIGFsaWduZWQgYXV0b21hdGljYWxseSB0byB0aGUgaW1wbGVtZW50ZWQgcHJpb3JpdHkgYml0cyBvZiB0aGUgbWljcm9jb250cm9sbGVyLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbikKK3sKKworICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkKKyAgeworICAgIHJldHVybigoKHVpbnQzMl90KVNDQi0+U0hQWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHhGVUwpLTRVTF0gPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4oKCh1aW50MzJfdClOVklDLT5JUFsoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pXSAgICAgICAgICAgICAgID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgRW5jb2RlIFByaW9yaXR5CisgIFxkZXRhaWxzIEVuY29kZXMgdGhlIHByaW9yaXR5IGZvciBhbiBpbnRlcnJ1cHQgd2l0aCB0aGUgZ2l2ZW4gcHJpb3JpdHkgZ3JvdXAsCisgICAgICAgICAgIHByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUsIGFuZCBzdWJwcmlvcml0eSB2YWx1ZS4KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQorICAgICAgICAgICBwcmlvcml0eSBiaXRzIChfX05WSUNfUFJJT19CSVRTKSwgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByaW9yaXR5IGdyb3VwIGlzIHNldC4KKyAgXHBhcmFtIFtpbl0gICAgIFByaW9yaXR5R3JvdXAgIFVzZWQgcHJpb3JpdHkgZ3JvdXAuCisgIFxwYXJhbSBbaW5dICAgUHJlZW1wdFByaW9yaXR5ICBQcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICBccGFyYW0gW2luXSAgICAgICBTdWJQcmlvcml0eSAgU3VicHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgIFxyZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICBFbmNvZGVkIHByaW9yaXR5LiBWYWx1ZSBjYW4gYmUgdXNlZCBpbiB0aGUgZnVuY3Rpb24gXHJlZiBOVklDX1NldFByaW9yaXR5KCkuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0VuY29kZVByaW9yaXR5ICh1aW50MzJfdCBQcmlvcml0eUdyb3VwLCB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHksIHVpbnQzMl90IFN1YlByaW9yaXR5KQoreworICB1aW50MzJfdCBQcmlvcml0eUdyb3VwVG1wID0gKFByaW9yaXR5R3JvdXAgJiAodWludDMyX3QpMHgwN1VMKTsgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovCisgIHVpbnQzMl90IFByZWVtcHRQcmlvcml0eUJpdHM7CisgIHVpbnQzMl90IFN1YlByaW9yaXR5Qml0czsKKworICBQcmVlbXB0UHJpb3JpdHlCaXRzID0gKCg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKSA+ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpID8gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSA6ICh1aW50MzJfdCkoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCk7CisgIFN1YlByaW9yaXR5Qml0cyAgICAgPSAoKFByaW9yaXR5R3JvdXBUbXAgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA8ICh1aW50MzJfdCk3VUwpID8gKHVpbnQzMl90KTBVTCA6ICh1aW50MzJfdCkoKFByaW9yaXR5R3JvdXBUbXAgLSA3VUwpICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSk7CisKKyAgcmV0dXJuICgKKyAgICAgICAgICAgKChQcmVlbXB0UHJpb3JpdHkgJiAodWludDMyX3QpKCgxVUwgPDwgKFByZWVtcHRQcmlvcml0eUJpdHMpKSAtIDFVTCkpIDw8IFN1YlByaW9yaXR5Qml0cykgfAorICAgICAgICAgICAoKFN1YlByaW9yaXR5ICAgICAmICh1aW50MzJfdCkoKDFVTCA8PCAoU3ViUHJpb3JpdHlCaXRzICAgICkpIC0gMVVMKSkpCisgICAgICAgICApOworfQorCisKKy8qKgorICBcYnJpZWYgICBEZWNvZGUgUHJpb3JpdHkKKyAgXGRldGFpbHMgRGVjb2RlcyBhbiBpbnRlcnJ1cHQgcHJpb3JpdHkgdmFsdWUgd2l0aCBhIGdpdmVuIHByaW9yaXR5IGdyb3VwIHRvCisgICAgICAgICAgIHByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUgYW5kIHN1YnByaW9yaXR5IHZhbHVlLgorICAgICAgICAgICBJbiBjYXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBhbmQgYXZhaWxhYmxlCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuCisgIFxwYXJhbSBbaW5dICAgICAgICAgUHJpb3JpdHkgICBQcmlvcml0eSB2YWx1ZSwgd2hpY2ggY2FuIGJlIHJldHJpZXZlZCB3aXRoIHRoZSBmdW5jdGlvbiBccmVmIE5WSUNfR2V0UHJpb3JpdHkoKS4KKyAgXHBhcmFtIFtpbl0gICAgIFByaW9yaXR5R3JvdXAgIFVzZWQgcHJpb3JpdHkgZ3JvdXAuCisgIFxwYXJhbSBbb3V0XSBwUHJlZW1wdFByaW9yaXR5ICBQcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICBccGFyYW0gW291dF0gICAgIHBTdWJQcmlvcml0eSAgU3VicHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRGVjb2RlUHJpb3JpdHkgKHVpbnQzMl90IFByaW9yaXR5LCB1aW50MzJfdCBQcmlvcml0eUdyb3VwLCB1aW50MzJfdCogY29uc3QgcFByZWVtcHRQcmlvcml0eSwgdWludDMyX3QqIGNvbnN0IHBTdWJQcmlvcml0eSkKK3sKKyAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLworICB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHlCaXRzOworICB1aW50MzJfdCBTdWJQcmlvcml0eUJpdHM7CisKKyAgUHJlZW1wdFByaW9yaXR5Qml0cyA9ICgoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCkgPiAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA/ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykgOiAodWludDMyX3QpKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApOworICBTdWJQcmlvcml0eUJpdHMgICAgID0gKChQcmlvcml0eUdyb3VwVG1wICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPCAodWludDMyX3QpN1VMKSA/ICh1aW50MzJfdCkwVUwgOiAodWludDMyX3QpKChQcmlvcml0eUdyb3VwVG1wIC0gN1VMKSArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpOworCisgICpwUHJlZW1wdFByaW9yaXR5ID0gKFByaW9yaXR5ID4+IFN1YlByaW9yaXR5Qml0cykgJiAodWludDMyX3QpKCgxVUwgPDwgKFByZWVtcHRQcmlvcml0eUJpdHMpKSAtIDFVTCk7CisgICpwU3ViUHJpb3JpdHkgICAgID0gKFByaW9yaXR5ICAgICAgICAgICAgICAgICAgICkgJiAodWludDMyX3QpKCgxVUwgPDwgKFN1YlByaW9yaXR5Qml0cyAgICApKSAtIDFVTCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBSZXNldAorICBcZGV0YWlscyBJbml0aWF0ZXMgYSBzeXN0ZW0gcmVzZXQgcmVxdWVzdCB0byByZXNldCB0aGUgTUNVLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1N5c3RlbVJlc2V0KHZvaWQpCit7CisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBhbGwgb3V0c3RhbmRpbmcgbWVtb3J5IGFjY2Vzc2VzIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkIHdyaXRlIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHJlc2V0ICovCisgIFNDQi0+QUlSQ1IgID0gKHVpbnQzMl90KSgoMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChTQ0ItPkFJUkNSICYgU0NCX0FJUkNSX1BSSUdST1VQX01zaykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2sgICAgKTsgICAgICAgICAvKiBLZWVwIHByaW9yaXR5IGdyb3VwIHVuY2hhbmdlZCAqLworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgY29tcGxldGlvbiBvZiBtZW1vcnkgYWNjZXNzICovCisKKyAgZm9yKDs7KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2FpdCB1bnRpbCByZXNldCAqLworICB7CisgICAgX19OT1AoKTsKKyAgfQorfQorCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX05WSUNGdW5jdGlvbnMgKi8KKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgU3lzVGljayBmdW5jdGlvbiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zIFN5c1RpY2sgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBjb25maWd1cmUgdGhlIFN5c3RlbS4KKyAgQHsKKyAqLworCisjaWYgKF9fVmVuZG9yX1N5c1RpY2tDb25maWcgPT0gMFUpCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gVGljayBDb25maWd1cmF0aW9uCisgIFxkZXRhaWxzIEluaXRpYWxpemVzIHRoZSBTeXN0ZW0gVGltZXIgYW5kIGl0cyBpbnRlcnJ1cHQsIGFuZCBzdGFydHMgdGhlIFN5c3RlbSBUaWNrIFRpbWVyLgorICAgICAgICAgICBDb3VudGVyIGlzIGluIGZyZWUgcnVubmluZyBtb2RlIHRvIGdlbmVyYXRlIHBlcmlvZGljIGludGVycnVwdHMuCisgIFxwYXJhbSBbaW5dICB0aWNrcyAgTnVtYmVyIG9mIHRpY2tzIGJldHdlZW4gdHdvIGludGVycnVwdHMuCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkLgorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZC4KKyAgXG5vdGUgICAgV2hlbiB0aGUgdmFyaWFibGUgPGI+X19WZW5kb3JfU3lzVGlja0NvbmZpZzwvYj4gaXMgc2V0IHRvIDEsIHRoZW4gdGhlCisgICAgICAgICAgIGZ1bmN0aW9uIDxiPlN5c1RpY2tfQ29uZmlnPC9iPiBpcyBub3QgaW5jbHVkZWQuIEluIHRoaXMgY2FzZSwgdGhlIGZpbGUgPGI+PGk+ZGV2aWNlPC9pPi5oPC9iPgorICAgICAgICAgICBtdXN0IGNvbnRhaW4gYSB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFN5c1RpY2tfQ29uZmlnKHVpbnQzMl90IHRpY2tzKQoreworICBpZiAoKHRpY2tzIC0gMVVMKSA+IFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrKQorICB7CisgICAgcmV0dXJuICgxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbG9hZCB2YWx1ZSBpbXBvc3NpYmxlICovCisgIH0KKworICBTeXNUaWNrLT5MT0FEICA9ICh1aW50MzJfdCkodGlja3MgLSAxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgcmVsb2FkIHJlZ2lzdGVyICovCisgIE5WSUNfU2V0UHJpb3JpdHkgKFN5c1RpY2tfSVJRbiwgKDFVTCA8PCBfX05WSUNfUFJJT19CSVRTKSAtIDFVTCk7IC8qIHNldCBQcmlvcml0eSBmb3IgU3lzdGljayBJbnRlcnJ1cHQgKi8KKyAgU3lzVGljay0+VkFMICAgPSAwVUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9hZCB0aGUgU3lzVGljayBDb3VudGVyIFZhbHVlICovCisgIFN5c1RpY2stPkNUUkwgID0gU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgIHwKKyAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfRU5BQkxFX01zazsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIFN5c1RpY2sgSVJRIGFuZCBTeXNUaWNrIFRpbWVyICovCisgIHJldHVybiAoMFVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIHN1Y2Nlc3NmdWwgKi8KK30KKworI2VuZGlmCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfU3lzVGlja0Z1bmN0aW9ucyAqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBEZWJ1ZyBJbi9PdXRwdXQgZnVuY3Rpb24gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19jb3JlX0RlYnVnRnVuY3Rpb25zIElUTSBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB0aGUgSVRNIGRlYnVnIGludGVyZmFjZS4KKyAgQHsKKyAqLworCitleHRlcm4gdm9sYXRpbGUgaW50MzJfdCBJVE1fUnhCdWZmZXI7ICAgICAgICAgICAgICAgICAgICAvKiE8IEV4dGVybmFsIHZhcmlhYmxlIHRvIHJlY2VpdmUgY2hhcmFjdGVycy4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIElUTV9SWEJVRkZFUl9FTVBUWSAgIDB4NUFBNTVBQTVVIC8qITwgVmFsdWUgaWRlbnRpZnlpbmcgXHJlZiBJVE1fUnhCdWZmZXIgaXMgcmVhZHkgZm9yIG5leHQgY2hhcmFjdGVyLiAqLworCisKKy8qKgorICBcYnJpZWYgICBJVE0gU2VuZCBDaGFyYWN0ZXIKKyAgXGRldGFpbHMgVHJhbnNtaXRzIGEgY2hhcmFjdGVyIHZpYSB0aGUgSVRNIGNoYW5uZWwgMCwgYW5kCisgICAgICAgICAgIFxsaSBKdXN0IHJldHVybnMgd2hlbiBubyBkZWJ1Z2dlciBpcyBjb25uZWN0ZWQgdGhhdCBoYXMgYm9va2VkIHRoZSBvdXRwdXQuCisgICAgICAgICAgIFxsaSBJcyBibG9ja2luZyB3aGVuIGEgZGVidWdnZXIgaXMgY29ubmVjdGVkLCBidXQgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBzZW50IGhhcyBub3QgYmVlbiB0cmFuc21pdHRlZC4KKyAgXHBhcmFtIFtpbl0gICAgIGNoICBDaGFyYWN0ZXIgdG8gdHJhbnNtaXQuCisgIFxyZXR1cm5zICAgICAgICAgICAgQ2hhcmFjdGVyIHRvIHRyYW5zbWl0LgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgSVRNX1NlbmRDaGFyICh1aW50MzJfdCBjaCkKK3sKKyAgaWYgKCgoSVRNLT5UQ1IgJiBJVE1fVENSX0lUTUVOQV9Nc2spICE9IDBVTCkgJiYgICAgICAvKiBJVE0gZW5hYmxlZCAqLworICAgICAgKChJVE0tPlRFUiAmIDFVTCAgICAgICAgICAgICAgICkgIT0gMFVMKSAgICkgICAgIC8qIElUTSBQb3J0ICMwIGVuYWJsZWQgKi8KKyAgeworICAgIHdoaWxlIChJVE0tPlBPUlRbMFVdLnUzMiA9PSAwVUwpCisgICAgeworICAgICAgX19OT1AoKTsKKyAgICB9CisgICAgSVRNLT5QT1JUWzBVXS51OCA9ICh1aW50OF90KWNoOworICB9CisgIHJldHVybiAoY2gpOworfQorCisKKy8qKgorICBcYnJpZWYgICBJVE0gUmVjZWl2ZSBDaGFyYWN0ZXIKKyAgXGRldGFpbHMgSW5wdXRzIGEgY2hhcmFjdGVyIHZpYSB0aGUgZXh0ZXJuYWwgdmFyaWFibGUgXHJlZiBJVE1fUnhCdWZmZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgUmVjZWl2ZWQgY2hhcmFjdGVyLgorICBccmV0dXJuICAgICAgICAgLTEgIE5vIGNoYXJhY3RlciBwZW5kaW5nLgorICovCitfX1NUQVRJQ19JTkxJTkUgaW50MzJfdCBJVE1fUmVjZWl2ZUNoYXIgKHZvaWQpCit7CisgIGludDMyX3QgY2ggPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisKKyAgaWYgKElUTV9SeEJ1ZmZlciAhPSBJVE1fUlhCVUZGRVJfRU1QVFkpCisgIHsKKyAgICBjaCA9IElUTV9SeEJ1ZmZlcjsKKyAgICBJVE1fUnhCdWZmZXIgPSBJVE1fUlhCVUZGRVJfRU1QVFk7ICAgICAgIC8qIHJlYWR5IGZvciBuZXh0IGNoYXJhY3RlciAqLworICB9CisKKyAgcmV0dXJuIChjaCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIElUTSBDaGVjayBDaGFyYWN0ZXIKKyAgXGRldGFpbHMgQ2hlY2tzIHdoZXRoZXIgYSBjaGFyYWN0ZXIgaXMgcGVuZGluZyBmb3IgcmVhZGluZyBpbiB0aGUgdmFyaWFibGUgXHJlZiBJVE1fUnhCdWZmZXIuCisgIFxyZXR1cm4gICAgICAgICAgMCAgTm8gY2hhcmFjdGVyIGF2YWlsYWJsZS4KKyAgXHJldHVybiAgICAgICAgICAxICBDaGFyYWN0ZXIgYXZhaWxhYmxlLgorICovCitfX1NUQVRJQ19JTkxJTkUgaW50MzJfdCBJVE1fQ2hlY2tDaGFyICh2b2lkKQoreworCisgIGlmIChJVE1fUnhCdWZmZXIgPT0gSVRNX1JYQlVGRkVSX0VNUFRZKQorICB7CisgICAgcmV0dXJuICgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuICgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisgIH0KK30KKworLypAfSBlbmQgb2YgQ01TSVNfY29yZV9EZWJ1Z0Z1bmN0aW9ucyAqLworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DT1JFX0NNM19IX0RFUEVOREFOVCAqLworCisjZW5kaWYgLyogX19DTVNJU19HRU5FUklDICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtNC5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbTQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzg0MGViCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbTQuaApAQCAtMCwwICsxLDE5MzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjb3JlX2NtNC5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU00IENvcmUgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9DTTRfSF9HRU5FUklDCisjZGVmaW5lIF9fQ09SRV9DTTRfSF9HRU5FUklDCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgIFxwYWdlIENNU0lTX01JU1JBX0V4Y2VwdGlvbnMgIE1JU1JBLUM6MjAwNCBDb21wbGlhbmNlIEV4Y2VwdGlvbnMKKyAgQ01TSVMgdmlvbGF0ZXMgdGhlIGZvbGxvd2luZyBNSVNSQS1DOjIwMDQgcnVsZXM6CisKKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDguNSwgb2JqZWN0L2Z1bmN0aW9uIGRlZmluaXRpb24gaW4gaGVhZGVyIGZpbGUuPGJyPgorICAgICBGdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBoZWFkZXIgZmlsZXMgYXJlIHVzZWQgdG8gYWxsb3cgJ2lubGluaW5nJy4KKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgMTguNCwgZGVjbGFyYXRpb24gb2YgdW5pb24gdHlwZSBvciBvYmplY3Qgb2YgdW5pb24gdHlwZTogJ3suLi59Jy48YnI+CisgICAgIFVuaW9ucyBhcmUgdXNlZCBmb3IgZWZmZWN0aXZlIHJlcHJlc2VudGF0aW9uIG9mIGNvcmUgcmVnaXN0ZXJzLgorCisgICBcbGkgQWR2aXNvcnkgUnVsZSAxOS43LCBGdW5jdGlvbi1saWtlIG1hY3JvIGRlZmluZWQuPGJyPgorICAgICBGdW5jdGlvbi1saWtlIG1hY3JvcyBhcmUgdXNlZCB0byBhbGxvdyBtb3JlIGVmZmljaWVudCBjb2RlLgorICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBDTVNJUyBkZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcaW5ncm91cCBDb3J0ZXhfTTQKKyAgQHsKKyAqLworCisvKiAgQ01TSVMgQ000IGRlZmluaXRpb25zICovCisjZGVmaW5lIF9fQ000X0NNU0lTX1ZFUlNJT05fTUFJTiAgKDB4MDRVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBbMzE6MTZdIENNU0lTIEhBTCBtYWluIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTRfQ01TSVNfVkVSU0lPTl9TVUIgICAoMHgxRVUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFsxNTowXSAgQ01TSVMgSEFMIHN1YiB2ZXJzaW9uICovCisjZGVmaW5lIF9fQ000X0NNU0lTX1ZFUlNJT04gICAgICAgKChfX0NNNF9DTVNJU19WRVJTSU9OX01BSU4gPDwgMTZVKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQ000X0NNU0lTX1ZFUlNJT05fU1VCICAgICAgICAgICApICAgICAgICAvKiE8IENNU0lTIEhBTCB2ZXJzaW9uIG51bWJlciAqLworCisjZGVmaW5lIF9fQ09SVEVYX00gICAgICAgICAgICAgICAgKDB4MDRVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3J0ZXgtTSBDb3JlICovCisKKworI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIF9faW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBfX2lubGluZQorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBJQVIgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBJQVIgQ29tcGlsZXIuIE9ubHkgYXZhaWxhYmxlIGluIEhpZ2ggb3B0aW1pemF0aW9uIG1vZGUhICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBUSSBDQ1MgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgVEFTS0lORyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjZGVmaW5lIF9fcGFja2VkCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBDT1NNSUMgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlci4gVXNlIC1wYzk5IG9uIGNvbXBpbGUgbGluZSAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxzZQorICAjZXJyb3IgVW5rbm93biBjb21waWxlcgorI2VuZGlmCisKKy8qKiBfX0ZQVV9VU0VEIGluZGljYXRlcyB3aGV0aGVyIGFuIEZQVSBpcyB1c2VkIG9yIG5vdC4KKyAgICBGb3IgdGhpcywgX19GUFVfUFJFU0VOVCBoYXMgdG8gYmUgY2hlY2tlZCBwcmlvciB0byBtYWtpbmcgdXNlIG9mIEZQVSBzcGVjaWZpYyByZWdpc3RlcnMgYW5kIGZ1bmN0aW9ucy4KKyovCisjaWYgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgI2lmIGRlZmluZWQgX19UQVJHRVRfRlBVX1ZGUAorICAgICNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQorICAgICNlbHNlCisgICAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKyAgICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2lmIGRlZmluZWQgX19BUk1fUENTX1ZGUAorICAgICNpZiAoX19GUFVfUFJFU0VOVCA9PSAxKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICN3YXJuaW5nICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNpZiBkZWZpbmVkIChfX1ZGUF9GUF9fKSAmJiAhZGVmaW5lZChfX1NPRlRGUF9fKQorICAgICNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQorICAgICNlbHNlCisgICAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKyAgICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjaWYgZGVmaW5lZCBfX0FSTVZGUF9fCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19UTVM0NzBfXyApCisgICNpZiBkZWZpbmVkIF9fVElfVkZQX1NVUFBPUlRfXworICAgICNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQorICAgICNlbHNlCisgICAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKyAgICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgI2lmIGRlZmluZWQgX19GUFVfVkZQX18KKyAgICAjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNpZiAoIF9fQ1NNQ19fICYgMHg0MDBVKQorICAgICNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQorICAgICNlbHNlCisgICAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKyAgICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworI2VuZGlmCisKKyNpbmNsdWRlICJjb3JlX2NtSW5zdHIuaCIgICAgICAgICAgICAgICAgLyogQ29yZSBJbnN0cnVjdGlvbiBBY2Nlc3MgKi8KKyNpbmNsdWRlICJjb3JlX2NtRnVuYy5oIiAgICAgICAgICAgICAgICAgLyogQ29yZSBGdW5jdGlvbiBBY2Nlc3MgKi8KKyNpbmNsdWRlICJjb3JlX2NtU2ltZC5oIiAgICAgICAgICAgICAgICAgLyogQ29tcGlsZXIgc3BlY2lmaWMgU0lNRCBJbnRyaW5zaWNzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ000X0hfR0VORVJJQyAqLworCisjaWZuZGVmIF9fQ01TSVNfR0VORVJJQworCisjaWZuZGVmIF9fQ09SRV9DTTRfSF9ERVBFTkRBTlQKKyNkZWZpbmUgX19DT1JFX0NNNF9IX0RFUEVOREFOVAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBjaGVjayBkZXZpY2UgZGVmaW5lcyBhbmQgdXNlIGRlZmF1bHRzICovCisjaWYgZGVmaW5lZCBfX0NIRUNLX0RFVklDRV9ERUZJTkVTCisgICNpZm5kZWYgX19DTTRfUkVWCisgICAgI2RlZmluZSBfX0NNNF9SRVYgICAgICAgICAgICAgICAweDAwMDBVCisgICAgI3dhcm5pbmcgIl9fQ000X1JFViBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fRlBVX1BSRVNFTlQKKyAgICAjZGVmaW5lIF9fRlBVX1BSRVNFTlQgICAgICAgICAgICAgMFUKKyAgICAjd2FybmluZyAiX19GUFVfUFJFU0VOVCBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTVBVX1BSRVNFTlQKKyAgICAjZGVmaW5lIF9fTVBVX1BSRVNFTlQgICAgICAgICAgICAgMFUKKyAgICAjd2FybmluZyAiX19NUFVfUFJFU0VOVCBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTlZJQ19QUklPX0JJVFMKKyAgICAjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgNFUKKyAgICAjd2FybmluZyAiX19OVklDX1BSSU9fQklUUyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fVmVuZG9yX1N5c1RpY2tDb25maWcKKyAgICAjZGVmaW5lIF9fVmVuZG9yX1N5c1RpY2tDb25maWcgICAgMFUKKyAgICAjd2FybmluZyAiX19WZW5kb3JfU3lzVGlja0NvbmZpZyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKyNlbmRpZgorCisvKiBJTyBkZWZpbml0aW9ucyAoYWNjZXNzIHJlc3RyaWN0aW9ucyB0byBwZXJpcGhlcmFsIHJlZ2lzdGVycykgKi8KKy8qKgorICAgIFxkZWZncm91cCBDTVNJU19nbG9iX2RlZnMgQ01TSVMgR2xvYmFsIERlZmluZXMKKworICAgIDxzdHJvbmc+SU8gVHlwZSBRdWFsaWZpZXJzPC9zdHJvbmc+IGFyZSB1c2VkCisgICAgXGxpIHRvIHNwZWNpZnkgdGhlIGFjY2VzcyB0byBwZXJpcGhlcmFsIHZhcmlhYmxlcy4KKyAgICBcbGkgZm9yIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIHBlcmlwaGVyYWwgcmVnaXN0ZXIgZGVidWcgaW5mb3JtYXRpb24uCisqLworI2lmZGVmIF9fY3BsdXNwbHVzCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2Vsc2UKKyAgI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovCisjZW5kaWYKKyNkZWZpbmUgICAgIF9fTyAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICd3cml0ZSBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19JTyAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgLyB3cml0ZScgcGVybWlzc2lvbnMgKi8KKworLyogZm9sbG93aW5nIGRlZmluZXMgc2hvdWxkIGJlIHVzZWQgZm9yIHN0cnVjdHVyZSBtZW1iZXJzICovCisjZGVmaW5lICAgICBfX0lNICAgICB2b2xhdGlsZSBjb25zdCAgICAgIC8qISBEZWZpbmVzICdyZWFkIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fT00gICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3dyaXRlIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU9NICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3JlYWQgLyB3cml0ZScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworCisvKkB9IGVuZCBvZiBncm91cCBDb3J0ZXhfTTQgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQWJzdHJhY3Rpb24KKyAgQ29yZSBSZWdpc3RlciBjb250YWluOgorICAtIENvcmUgUmVnaXN0ZXIKKyAgLSBDb3JlIE5WSUMgUmVnaXN0ZXIKKyAgLSBDb3JlIFNDQiBSZWdpc3RlcgorICAtIENvcmUgU3lzVGljayBSZWdpc3RlcgorICAtIENvcmUgRGVidWcgUmVnaXN0ZXIKKyAgLSBDb3JlIE1QVSBSZWdpc3RlcgorICAtIENvcmUgRlBVIFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxkZWZncm91cCBDTVNJU19jb3JlX3JlZ2lzdGVyIERlZmluZXMgYW5kIFR5cGUgRGVmaW5pdGlvbnMKKyAgXGJyaWVmIFR5cGUgZGVmaW5pdGlvbnMgYW5kIGRlZmluZXMgZm9yIENvcnRleC1NIHByb2Nlc3NvciBiYXNlZCBkZXZpY2VzLgorKi8KKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfQ09SRSAgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVycworICBcYnJpZWYgICAgICBDb3JlIFJlZ2lzdGVyIHR5cGUgZGVmaW5pdGlvbnMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIEFwcGxpY2F0aW9uIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChBUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MTY7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLjE1ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IEdFOjQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogMTYuLjE5ICBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgZmxhZ3MgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOjc7ICAgICAgICAgICAgICAgLyohPCBiaXQ6IDIwLi4yNiAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBROjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNyAgU2F0dXJhdGlvbiBjb25kaXRpb24gZmxhZyAqLworICAgIHVpbnQzMl90IFY6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI4ICBPdmVyZmxvdyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgQzoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjkgIENhcnJ5IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBaOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgTjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzEgIE5lZ2F0aXZlIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gQVBTUl9UeXBlOworCisvKiBBUFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEFQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9OX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1pfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9aX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgTWFzayAqLworCisjZGVmaW5lIEFQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9RX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogUSBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1FfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9RX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBRIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX0dFX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBHRSBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX0dFX01zayAgICAgICAgICAgICAgICAgICAgICAgICgweEZVTCA8PCBBUFNSX0dFX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBHRSBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIEludGVycnVwdCBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoSVBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MjM7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBJUFNSX1R5cGU7CisKKy8qIElQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVBTUl9JU1JfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIFBvc2l0aW9uICovCisjZGVmaW5lIElQU1JfSVNSX01zayAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBJUFNSX0lTUl9Qb3MqLykgICAgICAgICAgICAgICAgICAvKiE8IElQU1I6IElTUiBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIFNwZWNpYWwtUHVycG9zZSBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlcnMgKHhQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgSVNSOjk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uIDggIEV4Y2VwdGlvbiBudW1iZXIgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjc7ICAgICAgICAgICAgICAgLyohPCBiaXQ6ICA5Li4xNSAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBHRTo0OyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6IDE2Li4xOSAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIGZsYWdzICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMTo0OyAgICAgICAgICAgICAgIC8qITwgYml0OiAyMC4uMjMgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgVDoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjQgIFRodW1iIGJpdCAgICAgICAgKHJlYWQgMCkgKi8KKyAgICB1aW50MzJfdCBJVDoyOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6IDI1Li4yNiAgc2F2ZWQgSVQgc3RhdGUgICAocmVhZCAwKSAqLworICAgIHVpbnQzMl90IFE6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI3ICBTYXR1cmF0aW9uIGNvbmRpdGlvbiBmbGFnICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSB4UFNSX1R5cGU7CisKKy8qIHhQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgeFBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogTWFzayAqLworCisjZGVmaW5lIHhQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1FfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBRIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfUV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1FfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFEgTWFzayAqLworCisjZGVmaW5lIHhQU1JfSVRfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElUIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfSVRfTXNrICAgICAgICAgICAgICAgICAgICAgICAgKDNVTCA8PCB4UFNSX0lUX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElUIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1RfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBUIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVF9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1RfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgTWFzayAqLworCisjZGVmaW5lIHhQU1JfR0VfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEdFIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfR0VfTXNrICAgICAgICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IHhQU1JfR0VfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEdFIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IHhQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQ29udHJvbCBSZWdpc3RlcnMgKENPTlRST0wpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgblBSSVY6MTsgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDAgIEV4ZWN1dGlvbiBwcml2aWxlZ2UgaW4gVGhyZWFkIG1vZGUgKi8KKyAgICB1aW50MzJfdCBTUFNFTDoxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMSAgU3RhY2sgdG8gYmUgdXNlZCAqLworICAgIHVpbnQzMl90IEZQQ0E6MTsgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAyICBGUCBleHRlbnNpb24gYWN0aXZlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjI5OyAgICAgICAgICAgICAgLyohPCBiaXQ6ICAzLi4zMSAgUmVzZXJ2ZWQgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gQ09OVFJPTF9UeXBlOworCisvKiBDT05UUk9MIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIENPTlRST0xfRlBDQV9Qb3MgICAgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IEZQQ0EgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9GUENBX01zayAgICAgICAgICAgICAgICAgICAoMVVMIDw8IENPTlRST0xfRlBDQV9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogRlBDQSBNYXNrICovCisKKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IENPTlRST0xfU1BTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgTWFzayAqLworCisjZGVmaW5lIENPTlRST0xfblBSSVZfUG9zICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IG5QUklWIFBvc2l0aW9uICovCisjZGVmaW5lIENPTlRST0xfblBSSVZfTXNrICAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IENPTlRST0xfblBSSVZfUG9zKi8pICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IG5QUklWIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfQ09SRSAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX05WSUMgIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykKKyAgXGJyaWVmICAgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE5WSUMgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBJU0VSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIEludGVycnVwdCBTZXQgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsyNFVdOworICBfX0lPTSB1aW50MzJfdCBJQ0VSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODAgKFIvVykgIEludGVycnVwdCBDbGVhciBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUlNFUlZFRDFbMjRVXTsKKyAgX19JT00gdWludDMyX3QgSVNQUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzI0VV07CisgIF9fSU9NIHVpbnQzMl90IElDUFJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDE4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzI0VV07CisgIF9fSU9NIHVpbnQzMl90IElBQlJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDIwMCAoUi9XKSAgSW50ZXJydXB0IEFjdGl2ZSBiaXQgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzU2VV07CisgIF9fSU9NIHVpbnQ4X3QgIElQWzI0MFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwMCAoUi9XKSAgSW50ZXJydXB0IFByaW9yaXR5IFJlZ2lzdGVyICg4Qml0IHdpZGUpICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENVs2NDRVXTsKKyAgX19PTSAgdWludDMyX3QgU1RJUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTAwICggL1cpICBTb2Z0d2FyZSBUcmlnZ2VyIEludGVycnVwdCBSZWdpc3RlciAqLworfSAgTlZJQ19UeXBlOworCisvKiBTb2Z0d2FyZSBUcmlnZ2VyZWQgSW50ZXJydXB0IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE5WSUNfU1RJUl9JTlRJRF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNUSVI6IElOVExJTkVTTlVNIFBvc2l0aW9uICovCisjZGVmaW5lIE5WSUNfU1RJUl9JTlRJRF9Nc2sgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBOVklDX1NUSVJfSU5USURfUG9zKi8pICAgICAgICAvKiE8IFNUSVI6IElOVExJTkVTTlVNIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTlZJQyAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NCICAgICBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU0gIHVpbnQzMl90IENQVUlEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgQ1BVSUQgQmFzZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBJQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEludGVycnVwdCBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBWVE9SOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFZlY3RvciBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQUlSQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgU0NSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIENvbmZpZ3VyYXRpb24gQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50OF90ICBTSFBbMTJVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIFN5c3RlbSBIYW5kbGVycyBQcmlvcml0eSBSZWdpc3RlcnMgKDQtNywgOC0xMSwgMTItMTUpICovCisgIF9fSU9NIHVpbnQzMl90IFNIQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ0ZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI4IChSL1cpICBDb25maWd1cmFibGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEhGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyQyAoUi9XKSAgSGFyZEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBERlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzAgKFIvVykgIERlYnVnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBNTUZBUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzQgKFIvVykgIE1lbU1hbmFnZSBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEJGQVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzOCAoUi9XKSAgQnVzRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBBRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwM0MgKFIvVykgIEF1eGlsaWFyeSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgUEZSWzJVXTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQwIChSLyApICBQcm9jZXNzb3IgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBERlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDggKFIvICkgIERlYnVnIEZlYXR1cmUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQURSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDRDIChSLyApICBBdXhpbGlhcnkgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBNTUZSWzRVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTAgKFIvICkgIE1lbW9yeSBNb2RlbCBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IElTQVJbNVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA2MCAoUi8gKSAgSW5zdHJ1Y3Rpb24gU2V0IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzVVXTsKKyAgX19JT00gdWludDMyX3QgQ1BBQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDg4IChSL1cpICBDb3Byb2Nlc3NvciBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlciAqLworfSBTQ0JfVHlwZTsKKworLyogU0NCIENQVUlEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX01zayAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfUG9zICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9WQVJJQU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Nc2sgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fUG9zICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fTXNrICAgICAgICAgICAgICAgKDB4RkZGVUwgPDwgU0NCX0NQVUlEX1BBUlROT19Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Nc2sgICAgICAgICAgICAgKDB4RlVMIC8qPDwgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyovKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gTWFzayAqLworCisvKiBTQ0IgSW50ZXJydXB0IENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcyAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfTXNrICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MpICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9SRVRUT0JBU0VfUG9zICAgICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUkVUVE9CQVNFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1JFVFRPQkFTRV9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9SRVRUT0JBU0VfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBSRVRUT0JBU0UgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfTXNrICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyovKSAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIE1hc2sgKi8KKworLyogU0NCIFZlY3RvciBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1ZUT1JfVEJMT0ZGX1BvcyAgICAgICAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTE9GRiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfTXNrICAgICAgICAgICAgICAgICgweDFGRkZGRkZVTCA8PCBTQ0JfVlRPUl9UQkxPRkZfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIE1hc2sgKi8KKworLyogU0NCIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Nc2sgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MpICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zICAgICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFBSSUdST1VQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2sgICAgICAgICAgICAgKDdVTCA8PCBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogUFJJR1JPVVAgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX01zayAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MpICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUUkVTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Nc2sgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Qb3MqLykgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUUkVTRVQgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfUG9zICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgTWFzayAqLworCisvKiBTQ0IgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fUG9zICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1NUS0FMSUdOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX0JGSEZOTUlHTl9Qb3MgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBCRkhGTk1JR04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9CRkhGTk1JR05fTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfQkZIRk5NSUdOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogQkZIRk5NSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX0RJVl8wX1RSUF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBESVZfMF9UUlAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9ESVZfMF9UUlBfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfRElWXzBfVFJQX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogRElWXzBfVFJQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcyAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9VU0VSU0VUTVBFTkRfUG9zICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVVNFUlNFVE1QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfVVNFUlNFVE1QRU5EX01zayAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VTRVJTRVRNUEVORF9Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVTRVJTRVRNUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Qb3MgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogTk9OQkFTRVRIUkRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Nc2sgICAgICAgICAoMVVMIC8qPDwgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Qb3MqLykgICAgICAgIC8qITwgU0NCIENDUjogTk9OQkFTRVRIUkRFTkEgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcyAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxURU5BIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRFTkEgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxURU5BX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEVOQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Nc2sgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TVkNBTExQRU5ERURfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MgICAgICAgMTRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcyAgICAgICAxM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfTXNrICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcykgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUUEVOREVEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Nc2sgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zKSAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9TWVNUSUNLQUNUX1BvcyAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1lTVElDS0FDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1lTVElDS0FDVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNZU1RJQ0tBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfUG9zICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfUEVORFNWQUNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfTU9OSVRPUkFDVF9Qb3MgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1PTklUT1JBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01PTklUT1JBQ1RfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NT05JVE9SQUNUX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNT05JVE9SQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX1BvcyAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTEFDVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcyAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfUG9zICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX01zayAgICAgICAgICAoMVVMIC8qPDwgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX1BvcyovKSAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEFDVCBNYXNrICovCisKKy8qIFNDQiBDb25maWd1cmFibGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DRlNSX1VTR0ZBVUxUU1JfUG9zICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBVc2FnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfVVNHRkFVTFRTUl9Nc2sgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0NGU1JfVVNHRkFVTFRTUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENGU1I6IFVzYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NGU1JfQlVTRkFVTFRTUl9Qb3MgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IEJ1cyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfQlVTRkFVTFRTUl9Nc2sgICAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DRlNSX0JVU0ZBVUxUU1JfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IEJ1cyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DRlNSX01FTUZBVUxUU1JfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBNZW1vcnkgTWFuYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9NRU1GQVVMVFNSX01zayAgICAgICAgICAgICgweEZGVUwgLyo8PCBTQ0JfQ0ZTUl9NRU1GQVVMVFNSX1BvcyovKSAgICAgICAgLyohPCBTQ0IgQ0ZTUjogTWVtb3J5IE1hbmFnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgTWFzayAqLworCisvKiBTQ0IgSGFyZCBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0hGU1JfREVCVUdFVlRfUG9zICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IERFQlVHRVZUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX0RFQlVHRVZUX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9ERUJVR0VWVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBERUJVR0VWVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0hGU1JfRk9SQ0VEX1BvcyAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IEZPUkNFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSEZTUl9GT1JDRURfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0hGU1JfRk9SQ0VEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogRk9SQ0VEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSEZTUl9WRUNUVEJMX1BvcyAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogVkVDVFRCTCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSEZTUl9WRUNUVEJMX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0hGU1JfVkVDVFRCTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogVkVDVFRCTCBNYXNrICovCisKKy8qIFNDQiBEZWJ1ZyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0RGU1JfRVhURVJOQUxfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEVYVEVSTkFMIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX0VYVEVSTkFMX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9FWFRFUk5BTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBFWFRFUk5BTCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfVkNBVENIX1BvcyAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IFZDQVRDSCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9WQ0FUQ0hfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfVkNBVENIX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogVkNBVENIIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9EV1RUUkFQX1BvcyAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRFdUVFJBUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9EV1RUUkFQX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfRFdUVFJBUF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRFdUVFJBUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfQktQVF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEJLUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfQktQVF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX0JLUFRfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEJLUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX0hBTFRFRF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBIQUxURUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfSEFMVEVEX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0RGU1JfSEFMVEVEX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEhBTFRFRCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDQiAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NuU0NCIFN5c3RlbSBDb250cm9scyBub3QgaW4gU0NCIChTQ25TQ0IpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2wgYW5kIElEIFJlZ2lzdGVyIG5vdCBpbiB0aGUgU0NCCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgSUQgUmVnaXN0ZXIgbm90IGluIHRoZSBTQ0IuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07CisgIF9fSU0gIHVpbnQzMl90IElDVFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi8gKSAgSW50ZXJydXB0IENvbnRyb2xsZXIgVHlwZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBBQ1RMUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIEF1eGlsaWFyeSBDb250cm9sIFJlZ2lzdGVyICovCit9IFNDblNDQl9UeXBlOworCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBUeXBlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX1BvcyAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElDVFI6IElOVExJTkVTTlVNIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX01zayAgICAgICAgKDB4RlVMIC8qPDwgU0NuU0NCX0lDVFJfSU5UTElORVNOVU1fUG9zKi8pICAvKiE8IElDVFI6IElOVExJTkVTTlVNIE1hc2sgKi8KKworLyogQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU09PRlBfUG9zICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU09PRlAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU09PRlBfTXNrICAgICAgICAgICAoMVVMIDw8IFNDblNDQl9BQ1RMUl9ESVNPT0ZQX1BvcykgICAgICAgICAgIC8qITwgQUNUTFI6IERJU09PRlAgTWFzayAqLworCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNGUENBX1BvcyAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNGUENBIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNGUENBX01zayAgICAgICAgICAgKDFVTCA8PCBTQ25TQ0JfQUNUTFJfRElTRlBDQV9Qb3MpICAgICAgICAgICAvKiE8IEFDVExSOiBESVNGUENBIE1hc2sgKi8KKworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTRk9MRF9Qb3MgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRElTRk9MRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTRk9MRF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NuU0NCX0FDVExSX0RJU0ZPTERfUG9zKSAgICAgICAgICAgLyohPCBBQ1RMUjogRElTRk9MRCBNYXNrICovCisKKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0RFRldCVUZfUG9zICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0RFRldCVUYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0RFRldCVUZfTXNrICAgICAgICAoMVVMIDw8IFNDblNDQl9BQ1RMUl9ESVNERUZXQlVGX1BvcykgICAgICAgIC8qITwgQUNUTFI6IERJU0RFRldCVUYgTWFzayAqLworCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX1BvcyAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNNQ1lDSU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX01zayAgICAgICAgKDFVTCAvKjw8IFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX1BvcyovKSAgICAvKiE8IEFDVExSOiBESVNNQ1lDSU5UIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0Nub3RTQ0IgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1N5c1RpY2sgICAgIFN5c3RlbSBUaWNrIFRpbWVyIChTeXNUaWNrKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBUaW1lciBSZWdpc3RlcnMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gVGltZXIgKFN5c1RpY2spLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIFN5c1RpY2sgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IExPQUQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgU3lzVGljayBSZWxvYWQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgVkFMOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBTeXNUaWNrIEN1cnJlbnQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQ0FMSUI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSLyApICBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyICovCit9IFN5c1RpY2tfVHlwZTsKKworLyogU3lzVGljayBDb250cm9sIC8gU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2sgICAgICAgICAgICAoMVVMIC8qPDwgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MqLykgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgTWFzayAqLworCisvKiBTeXNUaWNrIFJlbG9hZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ3VycmVudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Nc2sgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX01zayAgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zKi8pICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TeXNUaWNrICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19JVE0gICAgIEluc3RydW1lbnRhdGlvbiBUcmFjZSBNYWNyb2NlbGwgKElUTSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIChJVE0pCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIFJlZ2lzdGVyIChJVE0pLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX09NICB1bmlvbgorICB7CisgICAgX19PTSAgdWludDhfdCAgICB1ODsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgOC1iaXQgKi8KKyAgICBfX09NICB1aW50MTZfdCAgIHUxNjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCAxNi1iaXQgKi8KKyAgICBfX09NICB1aW50MzJfdCAgIHUzMjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCAzMi1iaXQgKi8KKyAgfSAgUE9SVCBbMzJVXTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCBSZWdpc3RlcnMgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzg2NFVdOworICBfX0lPTSB1aW50MzJfdCBURVI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFMDAgKFIvVykgIElUTSBUcmFjZSBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxWzE1VV07CisgIF9fSU9NIHVpbnQzMl90IFRQUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEU0MCAoUi9XKSAgSVRNIFRyYWNlIFByaXZpbGVnZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMTVVXTsKKyAgX19JT00gdWludDMyX3QgVENSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTgwIChSL1cpICBJVE0gVHJhY2UgQ29udHJvbCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbMjlVXTsKKyAgX19PTSAgdWludDMyX3QgSVdSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUY4ICggL1cpICBJVE0gSW50ZWdyYXRpb24gV3JpdGUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgSVJSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUZDIChSLyApICBJVE0gSW50ZWdyYXRpb24gUmVhZCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBJTUNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGMDAgKFIvVykgIElUTSBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzQzVV07CisgIF9fT00gIHVpbnQzMl90IExBUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZCMCAoIC9XKSAgSVRNIExvY2sgQWNjZXNzIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IExTUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZCNCAoUi8gKSAgSVRNIExvY2sgU3RhdHVzIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENVs2VV07CisgIF9fSU0gIHVpbnQzMl90IFBJRDQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEMCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzQgKi8KKyAgX19JTSAgdWludDMyX3QgUElENTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkQ0IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNSAqLworICBfX0lNICB1aW50MzJfdCBQSUQ2OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRDggKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM2ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDc7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEQyAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzcgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkUwIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMCAqLworICBfX0lNICB1aW50MzJfdCBQSUQxOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRTQgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMxICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFOCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzIgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMzsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkVDIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMyAqLworICBfX0lNICB1aW50MzJfdCBDSUQwOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRjAgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMwICovCisgIF9fSU0gIHVpbnQzMl90IENJRDE7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGNCAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzEgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkY4IChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMiAqLworICBfX0lNICB1aW50MzJfdCBDSUQzOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRkMgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMzICovCit9IElUTV9UeXBlOworCisvKiBJVE0gVHJhY2UgUHJpdmlsZWdlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9UUFJfUFJJVk1BU0tfUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUUFI6IFBSSVZNQVNLIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UUFJfUFJJVk1BU0tfTXNrICAgICAgICAgICAgICAgKDB4RlVMIC8qPDwgSVRNX1RQUl9QUklWTUFTS19Qb3MqLykgICAgICAgICAgICAvKiE8IElUTSBUUFI6IFBSSVZNQVNLIE1hc2sgKi8KKworLyogSVRNIFRyYWNlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX1RDUl9CVVNZX1BvcyAgICAgICAgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQlVTWSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0JVU1lfTXNrICAgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9CVVNZX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBCVVNZIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1RyYWNlQnVzSURfUG9zICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBBVEJJRCBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1RyYWNlQnVzSURfTXNrICAgICAgICAgICAgICgweDdGVUwgPDwgSVRNX1RDUl9UcmFjZUJ1c0lEX1BvcykgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBBVEJJRCBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9HVFNGUkVRX1BvcyAgICAgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogR2xvYmFsIHRpbWVzdGFtcCBmcmVxdWVuY3kgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9HVFNGUkVRX01zayAgICAgICAgICAgICAgICAoM1VMIDw8IElUTV9UQ1JfR1RTRlJFUV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogR2xvYmFsIHRpbWVzdGFtcCBmcmVxdWVuY3kgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfVFNQcmVzY2FsZV9Qb3MgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTUHJlc2NhbGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9UU1ByZXNjYWxlX01zayAgICAgICAgICAgICAoM1VMIDw8IElUTV9UQ1JfVFNQcmVzY2FsZV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNQcmVzY2FsZSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9TV09FTkFfUG9zICAgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1dPRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfU1dPRU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX1NXT0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNXT0VOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9EV1RFTkFfUG9zICAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogRFdURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfRFdURU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX0RXVEVOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IERXVEVOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9TWU5DRU5BX1BvcyAgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1lOQ0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1NZTkNFTkFfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9TWU5DRU5BX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTWU5DRU5BIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1RTRU5BX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1RTRU5BX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9UU0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU0VOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9JVE1FTkFfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogSVRNIEVuYWJsZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9JVE1FTkFfTXNrICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX1RDUl9JVE1FTkFfUG9zKi8pICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogSVRNIEVuYWJsZSBiaXQgTWFzayAqLworCisvKiBJVE0gSW50ZWdyYXRpb24gV3JpdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0lXUl9BVFZBTElETV9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIElXUjogQVRWQUxJRE0gUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0lXUl9BVFZBTElETV9Nc2sgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0lXUl9BVFZBTElETV9Qb3MqLykgICAgICAgICAgICAgIC8qITwgSVRNIElXUjogQVRWQUxJRE0gTWFzayAqLworCisvKiBJVE0gSW50ZWdyYXRpb24gUmVhZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fSVJSX0FUUkVBRFlNX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gSVJSOiBBVFJFQURZTSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fSVJSX0FUUkVBRFlNX01zayAgICAgICAgICAgICAgICgxVUwgLyo8PCBJVE1fSVJSX0FUUkVBRFlNX1BvcyovKSAgICAgICAgICAgICAgLyohPCBJVE0gSVJSOiBBVFJFQURZTSBNYXNrICovCisKKy8qIElUTSBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0lNQ1JfSU5URUdSQVRJT05fUG9zICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIElNQ1I6IElOVEVHUkFUSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9JTUNSX0lOVEVHUkFUSU9OX01zayAgICAgICAgICAgKDFVTCAvKjw8IElUTV9JTUNSX0lOVEVHUkFUSU9OX1BvcyovKSAgICAgICAgICAvKiE8IElUTSBJTUNSOiBJTlRFR1JBVElPTiBNYXNrICovCisKKy8qIElUTSBMb2NrIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fTFNSX0J5dGVBY2NfUG9zICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBCeXRlQWNjIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9MU1JfQnl0ZUFjY19Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fTFNSX0J5dGVBY2NfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEJ5dGVBY2MgTWFzayAqLworCisjZGVmaW5lIElUTV9MU1JfQWNjZXNzX1BvcyAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEFjY2VzcyBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fTFNSX0FjY2Vzc19Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX0xTUl9BY2Nlc3NfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBBY2Nlc3MgTWFzayAqLworCisjZGVmaW5lIElUTV9MU1JfUHJlc2VudF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IFByZXNlbnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0xTUl9QcmVzZW50X01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0xTUl9QcmVzZW50X1BvcyovKSAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogUHJlc2VudCBNYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfSVRNICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19EV1QgICAgIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgKERXVCkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIChEV1QpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIFJlZ2lzdGVyIChEV1QpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1lDQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBDeWNsZSBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDUElDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIENQSSBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBFWENDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEV4Y2VwdGlvbiBPdmVyaGVhZCBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBTTEVFUENOVDsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIFNsZWVwIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IExTVUNOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgTFNVIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEZPTERDTlQ7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxOCAoUi9XKSAgRm9sZGVkLWluc3RydWN0aW9uIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IFBDU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxQyAoUi8gKSAgUHJvZ3JhbSBDb3VudGVyIFNhbXBsZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDT01QMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMCAqLworICBfX0lPTSB1aW50MzJfdCBNQVNLMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMCAqLworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjA7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDAgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzFVXTsKKyAgX19JT00gdWludDMyX3QgQ09NUDE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDMwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDEgKi8KKyAgX19JT00gdWludDMyX3QgTUFTSzE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDEgKi8KKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04xOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAxICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMVsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVAyOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0MCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAyICovCisgIF9fSU9NIHVpbnQzMl90IE1BU0syOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0NCAoUi9XKSAgTWFzayBSZWdpc3RlciAyICovCisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMjsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0OCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMiAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QMzsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMyAqLworICBfX0lPTSB1aW50MzJfdCBNQVNLMzsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMyAqLworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjM7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDMgKi8KK30gRFdUX1R5cGU7CisKKy8qIERXVCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9DVFJMX05VTUNPTVBfUG9zICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOVU1DT01QIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05VTUNPTVBfTXNrICAgICAgICAgICAgICAgKDB4RlVMIDw8IERXVF9DVFJMX05VTUNPTVBfUG9zKSAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOVU1DT01QIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT1RSQ1BLVF9Qb3MgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9UUkNQS1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9UUkNQS1RfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9UUkNQS1RfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PVFJDUEtUIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT0VYVFRSSUdfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9FWFRUUklHIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05PRVhUVFJJR19Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PRVhUVFJJR19Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0VYVFRSSUcgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX05PQ1lDQ05UX1BvcyAgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0NZQ0NOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT0NZQ0NOVF9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT0NZQ0NOVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9DWUNDTlQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX05PUFJGQ05UX1BvcyAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1BSRkNOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT1BSRkNOVF9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT1BSRkNOVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9QUkZDTlQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NZQ0VWVEVOQV9Qb3MgICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1lDRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfQ1lDRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0VWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfRk9MREVWVEVOQV9Qb3MgICAgICAgICAgICAyMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEZPTERFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfRk9MREVWVEVOQV9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRk9MREVWVEVOQV9Qb3MpICAgICAgICAgIC8qITwgRFdUIENUUkw6IEZPTERFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0xTVUVWVEVOQV9Qb3MgICAgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBMU1VFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTFNVRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTFNVRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IExTVUVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfU0xFRVBFVlRFTkFfUG9zICAgICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFNMRUVQRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1NMRUVQRVZURU5BX01zayAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX1NMRUVQRVZURU5BX1BvcykgICAgICAgICAvKiE8IERXVCBDVFJMOiBTTEVFUEVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfRVhDRVZURU5BX1BvcyAgICAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ0VWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9FWENFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9FWENFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DUElFVlRFTkFfUG9zICAgICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1BJRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NQSUVWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NQSUVWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDUElFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0VYQ1RSQ0VOQV9Qb3MgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENUUkNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfRVhDVFJDRU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRVhDVFJDRU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ1RSQ0VOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfUENTQU1QTEVOQV9Qb3MgICAgICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBDU0FNUExFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfUENTQU1QTEVOQV9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfUENTQU1QTEVOQV9Qb3MpICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBDU0FNUExFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1NZTkNUQVBfUG9zICAgICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBTWU5DVEFQIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1NZTkNUQVBfTXNrICAgICAgICAgICAgICAgKDB4M1VMIDw8IERXVF9DVFJMX1NZTkNUQVBfUG9zKSAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBTWU5DVEFQIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DWUNUQVBfUG9zICAgICAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDVEFQIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NZQ1RBUF9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NZQ1RBUF9Qb3MpICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNUQVAgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1BPU1RJTklUX1BvcyAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUSU5JVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9QT1NUSU5JVF9Nc2sgICAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9QT1NUSU5JVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVElOSVQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1BPU1RQUkVTRVRfUG9zICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUUFJFU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1BPU1RQUkVTRVRfTXNrICAgICAgICAgICAgKDB4RlVMIDw8IERXVF9DVFJMX1BPU1RQUkVTRVRfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUUFJFU0VUIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DWUNDTlRFTkFfUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDQ05URU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NZQ0NOVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIC8qPDwgRFdUX0NUUkxfQ1lDQ05URU5BX1BvcyovKSAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNDTlRFTkEgTWFzayAqLworCisvKiBEV1QgQ1BJIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9DUElDTlRfQ1BJQ05UX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDUElDTlQ6IENQSUNOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1BJQ05UX0NQSUNOVF9Nc2sgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfQ1BJQ05UX0NQSUNOVF9Qb3MqLykgICAgICAgLyohPCBEV1QgQ1BJQ05UOiBDUElDTlQgTWFzayAqLworCisvKiBEV1QgRXhjZXB0aW9uIE92ZXJoZWFkIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9FWENDTlRfRVhDQ05UX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBFWENDTlQ6IEVYQ0NOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRVhDQ05UX0VYQ0NOVF9Nc2sgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfRVhDQ05UX0VYQ0NOVF9Qb3MqLykgICAgICAgLyohPCBEV1QgRVhDQ05UOiBFWENDTlQgTWFzayAqLworCisvKiBEV1QgU2xlZXAgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIFNMRUVQQ05UOiBTTEVFUENOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfTXNrICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfUG9zKi8pICAgLyohPCBEV1QgU0xFRVBDTlQ6IFNMRUVQQ05UIE1hc2sgKi8KKworLyogRFdUIExTVSBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfTFNVQ05UX0xTVUNOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgTFNVQ05UOiBMU1VDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0xTVUNOVF9MU1VDTlRfTXNrICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0xTVUNOVF9MU1VDTlRfUG9zKi8pICAgICAgIC8qITwgRFdUIExTVUNOVDogTFNVQ05UIE1hc2sgKi8KKworLyogRFdUIEZvbGRlZC1pbnN0cnVjdGlvbiBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfRk9MRENOVF9GT0xEQ05UX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRk9MRENOVDogRk9MRENOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRk9MRENOVF9GT0xEQ05UX01zayAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfRk9MRENOVF9GT0xEQ05UX1BvcyovKSAgICAgLyohPCBEV1QgRk9MRENOVDogRk9MRENOVCBNYXNrICovCisKKy8qIERXVCBDb21wYXJhdG9yIE1hc2sgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX01BU0tfTUFTS19Qb3MgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIE1BU0s6IE1BU0sgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX01BU0tfTUFTS19Nc2sgICAgICAgICAgICAgICAgICAoMHgxRlVMIC8qPDwgRFdUX01BU0tfTUFTS19Qb3MqLykgICAgICAgICAgIC8qITwgRFdUIE1BU0s6IE1BU0sgTWFzayAqLworCisvKiBEV1QgQ29tcGFyYXRvciBGdW5jdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fTUFUQ0hFRF9Qb3MgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IE1BVENIRUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX01BVENIRURfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX01BVENIRURfUG9zKSAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBNQVRDSEVEIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMV9Qb3MgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjFfTXNrICAgICAgICAoMHhGVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjFfUG9zKSAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIxIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMF9Qb3MgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjBfTXNrICAgICAgICAoMHhGVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjBfUG9zKSAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIwIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX1BvcyAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWU0laRSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX01zayAgICAgICAgICgweDNVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX1BvcykgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWU0laRSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0xOSzFFTkFfUG9zICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBMTksxRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9MTksxRU5BX01zayAgICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9MTksxRU5BX1BvcykgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTE5LMUVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWTUFUQ0hfUG9zICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVk1BVENIIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVk1BVENIX01zayAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9EQVRBVk1BVENIX1BvcykgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZNQVRDSCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX1BvcyAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBDWUNNQVRDSCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fQ1lDTUFUQ0hfTXNrICAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fQ1lDTUFUQ0hfUG9zKSAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IENZQ01BVENIIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fRU1JVFJBTkdFX1BvcyAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IEVNSVRSQU5HRSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fRU1JVFJBTkdFX01zayAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fRU1JVFJBTkdFX1BvcykgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IEVNSVRSQU5HRSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0ZVTkNUSU9OX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBGVU5DVElPTiBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fRlVOQ1RJT05fTXNrICAgICAgICAgICgweEZVTCAvKjw8IERXVF9GVU5DVElPTl9GVU5DVElPTl9Qb3MqLykgICAgLyohPCBEV1QgRlVOQ1RJT046IEZVTkNUSU9OIE1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19EV1QgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1RQSSAgICAgVHJhY2UgUG9ydCBJbnRlcmZhY2UgKFRQSSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBUcmFjZSBQb3J0IEludGVyZmFjZSAoVFBJKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgVHJhY2UgUG9ydCBJbnRlcmZhY2UgUmVnaXN0ZXIgKFRQSSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IFNTUFNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgU3VwcG9ydGVkIFBhcmFsbGVsIFBvcnQgU2l6ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDU1BTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEN1cnJlbnQgUGFyYWxsZWwgUG9ydCBTaXplIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsyVV07CisgIF9fSU9NIHVpbnQzMl90IEFDUFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgQXN5bmNocm9ub3VzIENsb2NrIFByZXNjYWxlciBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbNTVVXTsKKyAgX19JT00gdWludDMyX3QgU1BQUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MEYwIChSL1cpICBTZWxlY3RlZCBQaW4gUHJvdG9jb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzEzMVVdOworICBfX0lNICB1aW50MzJfdCBGRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDAgKFIvICkgIEZvcm1hdHRlciBhbmQgRmx1c2ggU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEZGQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwNCAoUi9XKSAgRm9ybWF0dGVyIGFuZCBGbHVzaCBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IEZTQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwOCAoUi8gKSAgRm9ybWF0dGVyIFN5bmNocm9uaXphdGlvbiBDb3VudGVyIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1s3NTlVXTsKKyAgX19JTSAgdWludDMyX3QgVFJJR0dFUjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUU4IChSLyApICBUUklHR0VSICovCisgIF9fSU0gIHVpbnQzMl90IEZJRk8wOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVFQyAoUi8gKSAgSW50ZWdyYXRpb24gRVRNIERhdGEgKi8KKyAgX19JTSAgdWludDMyX3QgSVRBVEJDVFIyOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUYwIChSLyApICBJVEFUQkNUUjIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzFVXTsKKyAgX19JTSAgdWludDMyX3QgSVRBVEJDVFIwOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUY4IChSLyApICBJVEFUQkNUUjAgKi8KKyAgX19JTSAgdWludDMyX3QgRklGTzE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUZDIChSLyApICBJbnRlZ3JhdGlvbiBJVE0gRGF0YSAqLworICBfX0lPTSB1aW50MzJfdCBJVENUUkw7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGMDAgKFIvVykgIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDVbMzlVXTsKKyAgX19JT00gdWludDMyX3QgQ0xBSU1TRVQ7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkEwIChSL1cpICBDbGFpbSB0YWcgc2V0ICovCisgIF9fSU9NIHVpbnQzMl90IENMQUlNQ0xSOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZBNCAoUi9XKSAgQ2xhaW0gdGFnIGNsZWFyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEN1s4VV07CisgIF9fSU0gIHVpbnQzMl90IERFVklEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZDOCAoUi8gKSAgVFBJVV9ERVZJRCAqLworICBfX0lNICB1aW50MzJfdCBERVZUWVBFOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQ0MgKFIvICkgIFRQSVVfREVWVFlQRSAqLworfSBUUElfVHlwZTsKKworLyogVFBJIEFzeW5jaHJvbm91cyBDbG9jayBQcmVzY2FsZXIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0FDUFJfUFJFU0NBTEVSX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEFDUFI6IFBSRVNDQUxFUiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfQUNQUl9QUkVTQ0FMRVJfTXNrICAgICAgICAgICAgICgweDFGRkZVTCAvKjw8IFRQSV9BQ1BSX1BSRVNDQUxFUl9Qb3MqLykgICAgLyohPCBUUEkgQUNQUjogUFJFU0NBTEVSIE1hc2sgKi8KKworLyogVFBJIFNlbGVjdGVkIFBpbiBQcm90b2NvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfU1BQUl9UWE1PREVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgU1BQUjogVFhNT0RFIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9TUFBSX1RYTU9ERV9Nc2sgICAgICAgICAgICAgICAgKDB4M1VMIC8qPDwgVFBJX1NQUFJfVFhNT0RFX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBTUFBSOiBUWE1PREUgTWFzayAqLworCisvKiBUUEkgRm9ybWF0dGVyIGFuZCBGbHVzaCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRnROb25TdG9wX1BvcyAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0Tm9uU3RvcCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9GdE5vblN0b3BfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZTUl9GdE5vblN0b3BfUG9zKSAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnROb25TdG9wIE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZTUl9UQ1ByZXNlbnRfUG9zICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogVENQcmVzZW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX1RDUHJlc2VudF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRlNSX1RDUHJlc2VudF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBUQ1ByZXNlbnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GRlNSX0Z0U3RvcHBlZF9Qb3MgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdFN0b3BwZWQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRnRTdG9wcGVkX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGU1JfRnRTdG9wcGVkX1BvcykgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0U3RvcHBlZCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGU1JfRmxJblByb2dfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZsSW5Qcm9nIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX0ZsSW5Qcm9nX01zayAgICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0ZGU1JfRmxJblByb2dfUG9zKi8pICAgICAgICAvKiE8IFRQSSBGRlNSOiBGbEluUHJvZyBNYXNrICovCisKKy8qIFRQSSBGb3JtYXR0ZXIgYW5kIEZsdXNoIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0ZGQ1JfVHJpZ0luX1BvcyAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IFRyaWdJbiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZDUl9UcmlnSW5fTXNrICAgICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZDUl9UcmlnSW5fUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogVHJpZ0luIE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZDUl9FbkZDb250X1BvcyAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogRW5GQ29udCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZDUl9FbkZDb250X01zayAgICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZDUl9FbkZDb250X1BvcykgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogRW5GQ29udCBNYXNrICovCisKKy8qIFRQSSBUUklHR0VSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9UUklHR0VSX1RSSUdHRVJfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBUUklHR0VSOiBUUklHR0VSIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9UUklHR0VSX1RSSUdHRVJfTXNrICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX1RSSUdHRVJfVFJJR0dFUl9Qb3MqLykgICAgICAvKiE8IFRQSSBUUklHR0VSOiBUUklHR0VSIE1hc2sgKi8KKworLyogVFBJIEludGVncmF0aW9uIEVUTSBEYXRhIFJlZ2lzdGVyIERlZmluaXRpb25zIChGSUZPMCkgKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX1BvcyAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fQVRWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfSVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfSVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9BVFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfSVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9ieXRlY291bnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0lUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fYnl0ZWNvdW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9BVFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9FVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX0FUVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfRVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9ieXRlY291bnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0yX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNMl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8wX0VUTTJfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTIgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0xX1BvcyAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNMV9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8wX0VUTTFfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTEgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0wX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNMF9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBUUElfRklGTzBfRVRNMF9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTAgTWFzayAqLworCisvKiBUUEkgSVRBVEJDVFIyIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9JVEFUQkNUUjJfQVRSRUFEWV9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBJVEFUQkNUUjI6IEFUUkVBRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0lUQVRCQ1RSMl9BVFJFQURZX01zayAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfSVRBVEJDVFIyX0FUUkVBRFlfUG9zKi8pICAgIC8qITwgVFBJIElUQVRCQ1RSMjogQVRSRUFEWSBNYXNrICovCisKKy8qIFRQSSBJbnRlZ3JhdGlvbiBJVE0gRGF0YSBSZWdpc3RlciBEZWZpbml0aW9ucyAoRklGTzEpICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX0FUVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0lUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fQVRWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9ieXRlY291bnRfUG9zICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX2J5dGVjb3VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9BVFZBTElEX1BvcyAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fQVRWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfRVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfRVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9BVFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfRVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9ieXRlY291bnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fYnl0ZWNvdW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfSVRNMl9Qb3MgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTIgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTJfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMV9JVE0yX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0yIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfSVRNMV9Qb3MgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTEgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTFfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMV9JVE0xX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0xIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfSVRNMF9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTAgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTBfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgVFBJX0ZJRk8xX0lUTTBfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0wIE1hc2sgKi8KKworLyogVFBJIElUQVRCQ1RSMCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfSVRBVEJDVFIwX0FUUkVBRFlfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRBVEJDVFIwOiBBVFJFQURZIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9JVEFUQkNUUjBfQVRSRUFEWV9Nc2sgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQVRCQ1RSMF9BVFJFQURZX1BvcyovKSAgICAvKiE8IFRQSSBJVEFUQkNUUjA6IEFUUkVBRFkgTWFzayAqLworCisvKiBUUEkgSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9JVENUUkxfTW9kZV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBJVENUUkw6IE1vZGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0lUQ1RSTF9Nb2RlX01zayAgICAgICAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfSVRDVFJMX01vZGVfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIElUQ1RSTDogTW9kZSBNYXNrICovCisKKy8qIFRQSSBERVZJRCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfREVWSURfTlJaVkFMSURfUG9zICAgICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE5SWlZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9OUlpWQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9OUlpWQUxJRF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTlJaVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9NQU5DVkFMSURfUG9zICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTUFOQ1ZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9NQU5DVkFMSURfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9NQU5DVkFMSURfUG9zKSAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTUFOQ1ZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfUFRJTlZBTElEX1BvcyAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IFBUSU5WQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfUFRJTlZBTElEX01zayAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfUFRJTlZBTElEX1BvcykgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IFBUSU5WQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX01pbkJ1ZlN6X1BvcyAgICAgICAgICAgICAgNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNaW5CdWZTeiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfTWluQnVmU3pfTXNrICAgICAgICAgICAgICgweDdVTCA8PCBUUElfREVWSURfTWluQnVmU3pfUG9zKSAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1pbkJ1ZlN6IE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfQXN5bkNsa0luX1BvcyAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IEFzeW5DbGtJbiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfQXN5bkNsa0luX01zayAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfQXN5bkNsa0luX1BvcykgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IEFzeW5DbGtJbiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX05yVHJhY2VJbnB1dF9Qb3MgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBOclRyYWNlSW5wdXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX05yVHJhY2VJbnB1dF9Nc2sgICAgICAgICAoMHgxRlVMIC8qPDwgVFBJX0RFVklEX05yVHJhY2VJbnB1dF9Qb3MqLykgIC8qITwgVFBJIERFVklEOiBOclRyYWNlSW5wdXQgTWFzayAqLworCisvKiBUUEkgREVWVFlQRSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfREVWVFlQRV9NYWpvclR5cGVfUG9zICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWVFlQRTogTWFqb3JUeXBlIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZUWVBFX01ham9yVHlwZV9Nc2sgICAgICAgICAgKDB4RlVMIDw8IFRQSV9ERVZUWVBFX01ham9yVHlwZV9Qb3MpICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBNYWpvclR5cGUgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZUWVBFX1N1YlR5cGVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBTdWJUeXBlIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZUWVBFX1N1YlR5cGVfTXNrICAgICAgICAgICAgKDB4RlVMIC8qPDwgVFBJX0RFVlRZUEVfU3ViVHlwZV9Qb3MqLykgICAgICAvKiE8IFRQSSBERVZUWVBFOiBTdWJUeXBlIE1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19UUEkgKi8KKworCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMVUpCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX01QVSAgICAgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU0gIHVpbnQzMl90IFRZUEU7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgTVBVIFR5cGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBNUFUgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSTlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIE1QVSBSZWdpb24gUk5SYmVyIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSX0ExOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIE1QVSBBbGlhcyAxIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUl9BMTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBNUFUgQWxpYXMgMSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxQyAoUi9XKSAgTVBVIEFsaWFzIDIgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQVNSX0EyOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjAgKFIvVykgIE1QVSBBbGlhcyAyIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkJBUl9BMzsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBNUFUgQWxpYXMgMyBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1JfQTM7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyOCAoUi9XKSAgTVBVIEFsaWFzIDMgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworfSBNUFVfVHlwZTsKKworLyogTVBVIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1RZUEVfSVJFR0lPTl9Qb3MgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IElSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfSVJFR0lPTl9Nc2sgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9UWVBFX0lSRUdJT05fUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IElSRUdJT04gTWFzayAqLworCisjZGVmaW5lIE1QVV9UWVBFX0RSRUdJT05fUG9zICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBEUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX0RSRUdJT05fTXNrICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfVFlQRV9EUkVHSU9OX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBEUkVHSU9OIE1hc2sgKi8KKworI2RlZmluZSBNUFVfVFlQRV9TRVBBUkFURV9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogU0VQQVJBVEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfU0VQQVJBVEVfTXNrICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX1RZUEVfU0VQQVJBVEVfUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IFNFUEFSQVRFIE1hc2sgKi8KKworLyogTVBVIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX0NUUkxfUFJJVkRFRkVOQV9Qb3MgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IFBSSVZERUZFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfUFJJVkRFRkVOQV9Nc2sgICAgICAgICAgICAoMVVMIDw8IE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IFBSSVZERUZFTkEgTWFzayAqLworCisjZGVmaW5lIE1QVV9DVFJMX0hGTk1JRU5BX1BvcyAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBIRk5NSUVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgTVBVX0NUUkxfSEZOTUlFTkFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgTWFzayAqLworCisjZGVmaW5lIE1QVV9DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEVOQUJMRSBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gTnVtYmVyIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9STlJfUkVHSU9OX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSTlI6IFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUk5SX1JFR0lPTl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBNUFVfUk5SX1JFR0lPTl9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgUk5SOiBSRUdJT04gTWFzayAqLworCisvKiBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUkJBUl9BRERSX1BvcyAgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogQUREUiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9BRERSX01zayAgICAgICAgICAgICAgICAgICgweDdGRkZGRkZVTCA8PCBNUFVfUkJBUl9BRERSX1BvcykgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogQUREUiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JCQVJfVkFMSURfUG9zICAgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX1ZBTElEX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkJBUl9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JCQVJfUkVHSU9OX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9SRUdJT05fTXNrICAgICAgICAgICAgICAgICgweEZVTCAvKjw8IE1QVV9SQkFSX1JFR0lPTl9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogUkVHSU9OIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JBU1JfQVRUUlNfUG9zICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IE1QVSBSZWdpb24gQXR0cmlidXRlIGZpZWxkIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0FUVFJTX01zayAgICAgICAgICAgICAgICAgKDB4RkZGRlVMIDw8IE1QVV9SQVNSX0FUVFJTX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBmaWVsZCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfWE5fUG9zICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlhOIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1hOX01zayAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9YTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5YTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfQVBfUG9zICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkFQIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0FQX01zayAgICAgICAgICAgICAgICAgICAgKDB4N1VMIDw8IE1QVV9SQVNSX0FQX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5BUCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfVEVYX1BvcyAgICAgICAgICAgICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlRFWCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9URVhfTXNrICAgICAgICAgICAgICAgICAgICgweDdVTCA8PCBNUFVfUkFTUl9URVhfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuVEVYIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TX1BvcyAgICAgICAgICAgICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuUyBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfU19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuUyBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkMgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkMgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0JfUG9zICAgICAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5CIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0JfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9CX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5CIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TUkRfUG9zICAgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogU3ViLVJlZ2lvbiBEaXNhYmxlIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1NSRF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfUkFTUl9TUkRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBTdWItUmVnaW9uIERpc2FibGUgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1NJWkVfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gU2l6ZSBGaWVsZCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TSVpFX01zayAgICAgICAgICAgICAgICAgICgweDFGVUwgPDwgTVBVX1JBU1JfU0laRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIFNpemUgRmllbGQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0VOQUJMRV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gZW5hYmxlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9FTkFCTEVfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfUkFTUl9FTkFCTEVfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIGVuYWJsZSBiaXQgRGlzYWJsZSBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX01QVSAqLworI2VuZGlmCisKKworI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19GUFUgICAgIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMVVdOworICBfX0lPTSB1aW50MzJfdCBGUENDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEZsb2F0aW5nLVBvaW50IENvbnRleHQgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBGUENBUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIEZsb2F0aW5nLVBvaW50IENvbnRleHQgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBGUERTQ1I7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEZsb2F0aW5nLVBvaW50IERlZmF1bHQgU3RhdHVzIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgTVZGUjA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSLyApICBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAwICovCisgIF9fSU0gIHVpbnQzMl90IE1WRlIxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi8gKSAgTWVkaWEgYW5kIEZQIEZlYXR1cmUgUmVnaXN0ZXIgMSAqLworfSBGUFVfVHlwZTsKKworLyogRmxvYXRpbmctUG9pbnQgQ29udGV4dCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEZQVV9GUENDUl9BU1BFTl9Qb3MgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBBU1BFTiBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0FTUEVOX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9BU1BFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEFTUEVOIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX0xTUEVOX1BvcyAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IExTUEVOIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9MU1BFTl9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfTFNQRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMU1BFTiBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9NT05SRFlfUG9zICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBNT05SRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX01PTlJEWV9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9NT05SRFlfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IE1PTlJEWSBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9CRlJEWV9Qb3MgICAgICAgICAgICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBCRlJEWSBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfQkZSRFlfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX0JGUkRZX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogQkZSRFkgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfTU1SRFlfUG9zICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTU1SRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX01NUkRZX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9NTVJEWV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IE1NUkRZIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX0hGUkRZX1BvcyAgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEhGUkRZIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9IRlJEWV9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfSEZSRFlfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBIRlJEWSBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9USFJFQURfUG9zICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBwcm9jZXNzb3IgbW9kZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX1RIUkVBRF9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9USFJFQURfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IHByb2Nlc3NvciBtb2RlIGFjdGl2ZSBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9VU0VSX1BvcyAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBwcml2aWxlZ2UgbGV2ZWwgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9VU0VSX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfVVNFUl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBwcml2aWxlZ2UgbGV2ZWwgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfTFNQQUNUX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTGF6eSBzdGF0ZSBwcmVzZXJ2YXRpb24gYWN0aXZlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfTFNQQUNUX01zayAgICAgICAgICAgICAgICgxVUwgLyo8PCBGUFVfRlBDQ1JfTFNQQUNUX1BvcyovKSAgICAgICAgICAgICAgLyohPCBGUENDUjogTGF6eSBzdGF0ZSBwcmVzZXJ2YXRpb24gYWN0aXZlIGJpdCBNYXNrICovCisKKy8qIEZsb2F0aW5nLVBvaW50IENvbnRleHQgQWRkcmVzcyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBGUFVfRlBDQVJfQUREUkVTU19Qb3MgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENBUjogQUREUkVTUyBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0FSX0FERFJFU1NfTXNrICAgICAgICAgICAgICAoMHgxRkZGRkZGRlVMIDw8IEZQVV9GUENBUl9BRERSRVNTX1BvcykgICAgICAgIC8qITwgRlBDQVI6IEFERFJFU1MgYml0IE1hc2sgKi8KKworLyogRmxvYXRpbmctUG9pbnQgRGVmYXVsdCBTdGF0dXMgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBGUFVfRlBEU0NSX0FIUF9Qb3MgICAgICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEFIUCBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQRFNDUl9BSFBfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUERTQ1JfQUhQX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBBSFAgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBEU0NSX0ROX1BvcyAgICAgICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEROIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBEU0NSX0ROX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQRFNDUl9ETl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEROIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQRFNDUl9GWl9Qb3MgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBGWiBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQRFNDUl9GWl9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUERTQ1JfRlpfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBGWiBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUERTQ1JfUk1vZGVfUG9zICAgICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogUk1vZGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUERTQ1JfUk1vZGVfTXNrICAgICAgICAgICAgICAgKDNVTCA8PCBGUFVfRlBEU0NSX1JNb2RlX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogUk1vZGUgYml0IE1hc2sgKi8KKworLyogTWVkaWEgYW5kIEZQIEZlYXR1cmUgUmVnaXN0ZXIgMCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBGUFVfTVZGUjBfRlBfcm91bmRpbmdfbW9kZXNfUG9zICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRlAgcm91bmRpbmcgbW9kZXMgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjBfRlBfcm91bmRpbmdfbW9kZXNfTXNrICAgICgweEZVTCA8PCBGUFVfTVZGUjBfRlBfcm91bmRpbmdfbW9kZXNfUG9zKSAgICAgLyohPCBNVkZSMDogRlAgcm91bmRpbmcgbW9kZXMgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIwX1Nob3J0X3ZlY3RvcnNfUG9zICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IFNob3J0IHZlY3RvcnMgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjBfU2hvcnRfdmVjdG9yc19Nc2sgICAgICAgICgweEZVTCA8PCBGUFVfTVZGUjBfU2hvcnRfdmVjdG9yc19Qb3MpICAgICAgICAgLyohPCBNVkZSMDogU2hvcnQgdmVjdG9ycyBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfU3F1YXJlX3Jvb3RfUG9zICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogU3F1YXJlIHJvb3QgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjBfU3F1YXJlX3Jvb3RfTXNrICAgICAgICAgICgweEZVTCA8PCBGUFVfTVZGUjBfU3F1YXJlX3Jvb3RfUG9zKSAgICAgICAgICAgLyohPCBNVkZSMDogU3F1YXJlIHJvb3QgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIwX0RpdmlkZV9Qb3MgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IERpdmlkZSBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9EaXZpZGVfTXNrICAgICAgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9EaXZpZGVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBEaXZpZGUgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIwX0ZQX2V4Y2VwX3RyYXBwaW5nX1BvcyAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IEZQIGV4Y2VwdGlvbiB0cmFwcGluZyBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9GUF9leGNlcF90cmFwcGluZ19Nc2sgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9GUF9leGNlcF90cmFwcGluZ19Qb3MpICAgICAvKiE8IE1WRlIwOiBGUCBleGNlcHRpb24gdHJhcHBpbmcgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIwX0RvdWJsZV9wcmVjaXNpb25fUG9zICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IERvdWJsZS1wcmVjaXNpb24gYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjBfRG91YmxlX3ByZWNpc2lvbl9Nc2sgICAgICgweEZVTCA8PCBGUFVfTVZGUjBfRG91YmxlX3ByZWNpc2lvbl9Qb3MpICAgICAgLyohPCBNVkZSMDogRG91YmxlLXByZWNpc2lvbiBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfU2luZ2xlX3ByZWNpc2lvbl9Qb3MgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogU2luZ2xlLXByZWNpc2lvbiBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9TaW5nbGVfcHJlY2lzaW9uX01zayAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9TaW5nbGVfcHJlY2lzaW9uX1BvcykgICAgICAvKiE8IE1WRlIwOiBTaW5nbGUtcHJlY2lzaW9uIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMF9BX1NJTURfcmVnaXN0ZXJzX1BvcyAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBBX1NJTUQgcmVnaXN0ZXJzIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX0FfU0lNRF9yZWdpc3RlcnNfTXNrICAgICAoMHhGVUwgLyo8PCBGUFVfTVZGUjBfQV9TSU1EX3JlZ2lzdGVyc19Qb3MqLykgIC8qITwgTVZGUjA6IEFfU0lNRCByZWdpc3RlcnMgYml0cyBNYXNrICovCisKKy8qIE1lZGlhIGFuZCBGUCBGZWF0dXJlIFJlZ2lzdGVyIDEgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRlBVX01WRlIxX0ZQX2Z1c2VkX01BQ19Qb3MgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IEZQIGZ1c2VkIE1BQyBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMV9GUF9mdXNlZF9NQUNfTXNrICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMV9GUF9mdXNlZF9NQUNfUG9zKSAgICAgICAgICAvKiE8IE1WRlIxOiBGUCBmdXNlZCBNQUMgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIxX0ZQX0hQRlBfUG9zICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IEZQIEhQRlAgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjFfRlBfSFBGUF9Nc2sgICAgICAgICAgICAgICgweEZVTCA8PCBGUFVfTVZGUjFfRlBfSFBGUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRlAgSFBGUCBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjFfRF9OYU5fbW9kZV9Qb3MgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRF9OYU4gbW9kZSBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMV9EX05hTl9tb2RlX01zayAgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMV9EX05hTl9tb2RlX1BvcykgICAgICAgICAgICAvKiE8IE1WRlIxOiBEX05hTiBtb2RlIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMV9GdFpfbW9kZV9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBGdFogbW9kZSBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMV9GdFpfbW9kZV9Nc2sgICAgICAgICAgICAgKDB4RlVMIC8qPDwgRlBVX01WRlIxX0Z0Wl9tb2RlX1BvcyovKSAgICAgICAgICAvKiE8IE1WRlIxOiBGdFogbW9kZSBiaXRzIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfRlBVICovCisjZW5kaWYKKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAgICAgICBDb3JlIERlYnVnIFJlZ2lzdGVycyAoQ29yZURlYnVnKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIENvcmUgRGVidWcgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBDb3JlIERlYnVnIFJlZ2lzdGVyIChDb3JlRGVidWcpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBESENTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIERlYnVnIEhhbHRpbmcgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fT00gIHVpbnQzMl90IERDUlNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoIC9XKSAgRGVidWcgQ29yZSBSZWdpc3RlciBTZWxlY3RvciBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBEQ1JEUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIERlYnVnIENvcmUgUmVnaXN0ZXIgRGF0YSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBERU1DUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIERlYnVnIEV4Y2VwdGlvbiBhbmQgTW9uaXRvciBDb250cm9sIFJlZ2lzdGVyICovCit9IENvcmVEZWJ1Z19UeXBlOworCisvKiBEZWJ1ZyBIYWx0aW5nIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfREJHS0VZX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IERCR0tFWSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfREJHS0VZX01zayAgICAgICAgICgweEZGRkZVTCA8PCBDb3JlRGVidWdfREhDU1JfREJHS0VZX1BvcykgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IERCR0tFWSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVTRVRfU1RfUG9zICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFU0VUX1NUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFU0VUX1NUX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRVNFVF9TVCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVUSVJFX1NUX1BvcyAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFVElSRV9TVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfTXNrICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfUkVUSVJFX1NUX1BvcykgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVUSVJFX1NUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19MT0NLVVBfUG9zICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfTE9DS1VQIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19MT0NLVVBfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19MT0NLVVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1NMRUVQX1BvcyAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19TTEVFUCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19TTEVFUF9Nc2sgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfUG9zKSAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfU0xFRVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfUG9zICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19IQUxUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19IQUxUX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19IQUxUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRUdSRFlfUG9zICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVHUkRZIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRUdSRFlfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRUdSRFkgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Qb3MgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TTkFQU1RBTEwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX01zayAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Qb3MpICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NOQVBTVEFMTCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfTUFTS0lOVFNfUG9zICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX01BU0tJTlRTIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX01BU0tJTlRTX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19NQVNLSU5UUyBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Qb3MgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NURVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX1NURVBfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NURVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfUG9zICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19IQUxUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19IQUxUX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19IQUxUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX1BvcyAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfREVCVUdFTiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX01zayAgICAgICgxVUwgLyo8PCBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX1BvcyovKSAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfREVCVUdFTiBNYXNrICovCisKKy8qIERlYnVnIENvcmUgUmVnaXN0ZXIgU2VsZWN0b3IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdXblIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19EQ1JTUl9SRUdXblJfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdXblIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfUG9zICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHU0VMIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfTXNrICAgICAgICAgKDB4MUZVTCAvKjw8IENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfUG9zKi8pICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHU0VMIE1hc2sgKi8KKworLyogRGVidWcgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Qb3MgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBUUkNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBUUkNFTkEgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUkVRX1BvcyAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1JFUSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Nc2sgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9SRVFfUG9zKSAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9SRVEgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fU1RFUF9Qb3MgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1NURVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9NT05fU1RFUF9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fU1RFUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9QRU5EX1BvcyAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fUEVORCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9QRU5EX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9QRU5EIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9FTiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9FTl9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9FTiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0hBUkRFUlJfUG9zICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19IQVJERVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfSEFSREVSUl9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSEFSREVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Qb3MgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19JTlRFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19JTlRFUlJfUG9zKSAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19JTlRFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfUG9zICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQlVTRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfQlVTRVJSX1BvcykgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQlVTRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfU1RBVEVSUl9Qb3MgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX1NUQVRFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19TVEFURVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19TVEFURVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX1BvcyAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NIS0VSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX01zayAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0NIS0VSUl9Qb3MpICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NIS0VSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX05PQ1BFUlJfUG9zICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19OT0NQRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfTk9DUEVSUl9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTk9DUEVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX01NRVJSX1BvcyAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19NTUVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX01NRVJSX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX01NRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX1BvcyAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NPUkVSRVNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX01zayAgICgxVUwgLyo8PCBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX1BvcyovKSAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NPUkVSRVNFVCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYml0ZmllbGQgICAgIENvcmUgcmVnaXN0ZXIgYml0IGZpZWxkIG1hY3JvcworICBcYnJpZWYgICAgICBNYWNyb3MgZm9yIHVzZSB3aXRoIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAoeHh4X1BvcywgeHh4X01zaykuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIE1hc2sgYW5kIHNoaWZ0IGEgYml0IGZpZWxkIHZhbHVlIGZvciB1c2UgaW4gYSByZWdpc3RlciBiaXQgcmFuZ2UuCisgIFxwYXJhbVtpbl0gZmllbGQgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgdGhlIGJpdCBmaWVsZC4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIHZhbHVlLgorKi8KKyNkZWZpbmUgX1ZBTDJGTEQoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlIDw8IGZpZWxkICMjIF9Qb3MpICYgZmllbGQgIyMgX01zaykKKworLyoqCisgIFxicmllZiAgICAgTWFzayBhbmQgc2hpZnQgYSByZWdpc3RlciB2YWx1ZSB0byBleHRyYWN0IGEgYml0IGZpbGVkIHZhbHVlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICBNYXNrZWQgYW5kIHNoaWZ0ZWQgYml0IGZpZWxkIHZhbHVlLgorKi8KKyNkZWZpbmUgX0ZMRDJWQUwoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlICYgZmllbGQgIyMgX01zaykgPj4gZmllbGQgIyMgX1BvcykKKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfY29yZV9iaXRmaWVsZCAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYmFzZSAgICAgQ29yZSBEZWZpbml0aW9ucworICBcYnJpZWYgICAgICBEZWZpbml0aW9ucyBmb3IgYmFzZSBhZGRyZXNzZXMsIHVuaW9ucywgYW5kIHN0cnVjdHVyZXMuCisgIEB7CisgKi8KKworLyogTWVtb3J5IG1hcHBpbmcgb2YgQ29ydGV4LU00IEhhcmR3YXJlICovCisjZGVmaW5lIFNDU19CQVNFICAgICAgICAgICAgKDB4RTAwMEUwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBTcGFjZSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgSVRNX0JBU0UgICAgICAgICAgICAoMHhFMDAwMDAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgRFdUX0JBU0UgICAgICAgICAgICAoMHhFMDAwMTAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgVFBJX0JBU0UgICAgICAgICAgICAoMHhFMDA0MDAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0JBU0UgICAgICAoMHhFMDAwRURGMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmUgRGVidWcgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFN5c1RpY2tfQkFTRSAgICAgICAgKFNDU19CQVNFICsgIDB4MDAxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBOVklDX0JBU0UgICAgICAgICAgIChTQ1NfQkFTRSArICAweDAxMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU0NCX0JBU0UgICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDAwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIEJsb2NrIEJhc2UgQWRkcmVzcyAqLworCisjZGVmaW5lIFNDblNDQiAgICAgICAgICAgICAgKChTQ25TQ0JfVHlwZSAgICAqKSAgICAgU0NTX0JBU0UgICAgICApICAgLyohPCBTeXN0ZW0gY29udHJvbCBSZWdpc3RlciBub3QgaW4gU0NCICovCisjZGVmaW5lIFNDQiAgICAgICAgICAgICAgICAgKChTQ0JfVHlwZSAgICAgICAqKSAgICAgU0NCX0JBU0UgICAgICApICAgLyohPCBTQ0IgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgU3lzVGljayAgICAgICAgICAgICAoKFN5c1RpY2tfVHlwZSAgICopICAgICBTeXNUaWNrX0JBU0UgICkgICAvKiE8IFN5c1RpY2sgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgTlZJQyAgICAgICAgICAgICAgICAoKE5WSUNfVHlwZSAgICAgICopICAgICBOVklDX0JBU0UgICAgICkgICAvKiE8IE5WSUMgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgSVRNICAgICAgICAgICAgICAgICAoKElUTV9UeXBlICAgICAgICopICAgICBJVE1fQkFTRSAgICAgICkgICAvKiE8IElUTSBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBEV1QgICAgICAgICAgICAgICAgICgoRFdUX1R5cGUgICAgICAgKikgICAgIERXVF9CQVNFICAgICAgKSAgIC8qITwgRFdUIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIFRQSSAgICAgICAgICAgICAgICAgKChUUElfVHlwZSAgICAgICAqKSAgICAgVFBJX0JBU0UgICAgICApICAgLyohPCBUUEkgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgQ29yZURlYnVnICAgICAgICAgICAoKENvcmVEZWJ1Z19UeXBlICopICAgICBDb3JlRGVidWdfQkFTRSkgICAvKiE8IENvcmUgRGVidWcgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKworI2lmIChfX01QVV9QUkVTRU5UID09IDFVKQorICAjZGVmaW5lIE1QVV9CQVNFICAgICAgICAgIChTQ1NfQkFTRSArICAweDBEOTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAqLworICAjZGVmaW5lIE1QVSAgICAgICAgICAgICAgICgoTVBVX1R5cGUgICAgICAgKikgICAgIE1QVV9CQVNFICAgICAgKSAgIC8qITwgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAqLworI2VuZGlmCisKKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkKKyAgI2RlZmluZSBGUFVfQkFTRSAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRjMwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEZsb2F0aW5nIFBvaW50IFVuaXQgKi8KKyAgI2RlZmluZSBGUFUgICAgICAgICAgICAgICAoKEZQVV9UeXBlICAgICAgICopICAgICBGUFVfQkFTRSAgICAgICkgICAvKiE8IEZsb2F0aW5nIFBvaW50IFVuaXQgKi8KKyNlbmRpZgorCisvKkB9ICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIKKyAgQ29yZSBGdW5jdGlvbiBJbnRlcmZhY2UgY29udGFpbnM6CisgIC0gQ29yZSBOVklDIEZ1bmN0aW9ucworICAtIENvcmUgU3lzVGljayBGdW5jdGlvbnMKKyAgLSBDb3JlIERlYnVnIEZ1bmN0aW9ucworICAtIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZSBGdW5jdGlvbnMgYW5kIEluc3RydWN0aW9ucyBSZWZlcmVuY2UKKyovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIE5WSUMgZnVuY3Rpb25zICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zIE5WSUMgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBtYW5hZ2UgaW50ZXJydXB0cyBhbmQgZXhjZXB0aW9ucyB2aWEgdGhlIE5WSUMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBHcm91cGluZworICBcZGV0YWlscyBTZXRzIHRoZSBwcmlvcml0eSBncm91cGluZyBmaWVsZCB1c2luZyB0aGUgcmVxdWlyZWQgdW5sb2NrIHNlcXVlbmNlLgorICAgICAgICAgICBUaGUgcGFyYW1ldGVyIFByaW9yaXR5R3JvdXAgaXMgYXNzaWduZWQgdG8gdGhlIGZpZWxkIFNDQi0+QUlSQ1IgWzEwOjhdIFBSSUdST1VQIGZpZWxkLgorICAgICAgICAgICBPbmx5IHZhbHVlcyBmcm9tIDAuLjcgYXJlIHVzZWQuCisgICAgICAgICAgIEluIGNhc2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHByaW9yaXR5IGdyb3VwaW5nIGFuZCBhdmFpbGFibGUKKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUyksIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuCisgIFxwYXJhbSBbaW5dICAgICAgUHJpb3JpdHlHcm91cCAgUHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UHJpb3JpdHlHcm91cGluZyh1aW50MzJfdCBQcmlvcml0eUdyb3VwKQoreworICB1aW50MzJfdCByZWdfdmFsdWU7CisgIHVpbnQzMl90IFByaW9yaXR5R3JvdXBUbXAgPSAoUHJpb3JpdHlHcm91cCAmICh1aW50MzJfdCkweDA3VUwpOyAgICAgICAgICAgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovCisKKyAgcmVnX3ZhbHVlICA9ICBTQ0ItPkFJUkNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWQgb2xkIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gICAgKi8KKyAgcmVnX3ZhbHVlICY9IH4oKHVpbnQzMl90KShTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2sgfCBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSk7IC8qIGNsZWFyIGJpdHMgdG8gY2hhbmdlICAgICAgICAgICAgICAgKi8KKyAgcmVnX3ZhbHVlICA9ICAocmVnX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDVGQVVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgfAorICAgICAgICAgICAgICAgIChQcmlvcml0eUdyb3VwVG1wIDw8IDhVKSAgICAgICAgICAgICAgICAgICAgICApOyAgICAgICAgICAgICAgLyogSW5zZXJ0IHdyaXRlIGtleSBhbmQgcHJpb3J0eSBncm91cCAqLworICBTQ0ItPkFJUkNSID0gIHJlZ192YWx1ZTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFByaW9yaXR5IEdyb3VwaW5nCisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwcmlvcml0eSBncm91cGluZyBmaWVsZCBmcm9tIHRoZSBOVklDIEludGVycnVwdCBDb250cm9sbGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgIFByaW9yaXR5IGdyb3VwaW5nIGZpZWxkIChTQ0ItPkFJUkNSIFsxMDo4XSBQUklHUk9VUCBmaWVsZCkuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFByaW9yaXR5R3JvdXBpbmcodm9pZCkKK3sKKyAgcmV0dXJuICgodWludDMyX3QpKChTQ0ItPkFJUkNSICYgU0NCX0FJUkNSX1BSSUdST1VQX01zaykgPj4gU0NCX0FJUkNSX1BSSUdST1VQX1BvcykpOworfQorCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgRXh0ZXJuYWwgSW50ZXJydXB0CisgIFxkZXRhaWxzIEVuYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19FbmFibGVJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTRVJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBEaXNhYmxlcyBhIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0Rpc2FibGVJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklDRVJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHBlbmRpbmcgcmVnaXN0ZXIgaW4gdGhlIE5WSUMgYW5kIHJldHVybnMgdGhlIHBlbmRpbmcgYml0IGZvciB0aGUgc3BlY2lmaWVkIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IHBlbmRpbmcuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBwZW5kaW5nLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUMtPklTUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gJiAoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpICE9IDBVTCkgPyAxVUwgOiAwVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIFNldHMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SVNQUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIENsZWFyIFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIENsZWFycyB0aGUgcGVuZGluZyBiaXQgb2YgYW4gZXh0ZXJuYWwgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19DbGVhclBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklDUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQWN0aXZlIEludGVycnVwdAorICBcZGV0YWlscyBSZWFkcyB0aGUgYWN0aXZlIHJlZ2lzdGVyIGluIE5WSUMgYW5kIHJldHVybnMgdGhlIGFjdGl2ZSBiaXQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICAwICBJbnRlcnJ1cHQgc3RhdHVzIGlzIG5vdCBhY3RpdmUuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBhY3RpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldEFjdGl2ZShJUlFuX1R5cGUgSVJRbikKK3sKKyAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JQUJSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldICYgKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBJbnRlcnJ1cHQgUHJpb3JpdHkKKyAgXGRldGFpbHMgU2V0cyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorICBcbm90ZSAgICBUaGUgcHJpb3JpdHkgY2Fubm90IGJlIHNldCBmb3IgZXZlcnkgY29yZSBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHBhcmFtIFtpbl0gIHByaW9yaXR5ICBQcmlvcml0eSB0byBzZXQuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90IHByaW9yaXR5KQoreworICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkKKyAgeworICAgIFNDQi0+U0hQWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHhGVUwpLTRVTF0gPSAodWludDhfdCkoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpOworICB9CisgIGVsc2UKKyAgeworICAgIE5WSUMtPklQWygodWludDMyX3QpKGludDMyX3QpSVJRbildICAgICAgICAgICAgICAgPSAodWludDhfdCkoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBJbnRlcnJ1cHQgUHJpb3JpdHkKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgICAgICAgICAgVGhlIGludGVycnVwdCBudW1iZXIgY2FuIGJlIHBvc2l0aXZlIHRvIHNwZWNpZnkgYW4gZXh0ZXJuYWwgKGRldmljZSBzcGVjaWZpYykgaW50ZXJydXB0LAorICAgICAgICAgICBvciBuZWdhdGl2ZSB0byBzcGVjaWZ5IGFuIGludGVybmFsIChjb3JlKSBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICBJbnRlcnJ1cHQgUHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgaXMgYWxpZ25lZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBpbXBsZW1lbnRlZCBwcmlvcml0eSBiaXRzIG9mIHRoZSBtaWNyb2NvbnRyb2xsZXIuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuKQoreworCisgIGlmICgoaW50MzJfdCkoSVJRbikgPCAwKQorICB7CisgICAgcmV0dXJuKCgodWludDMyX3QpU0NCLT5TSFBbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweEZVTCktNFVMXSA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigoKHVpbnQzMl90KU5WSUMtPklQWygodWludDMyX3QpKGludDMyX3QpSVJRbildICAgICAgICAgICAgICAgPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBFbmNvZGUgUHJpb3JpdHkKKyAgXGRldGFpbHMgRW5jb2RlcyB0aGUgcHJpb3JpdHkgZm9yIGFuIGludGVycnVwdCB3aXRoIHRoZSBnaXZlbiBwcmlvcml0eSBncm91cCwKKyAgICAgICAgICAgcHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSwgYW5kIHN1YnByaW9yaXR5IHZhbHVlLgorICAgICAgICAgICBJbiBjYXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBhbmQgYXZhaWxhYmxlCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpLCB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0LgorICBccGFyYW0gW2luXSAgICAgUHJpb3JpdHlHcm91cCAgVXNlZCBwcmlvcml0eSBncm91cC4KKyAgXHBhcmFtIFtpbl0gICBQcmVlbXB0UHJpb3JpdHkgIFByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgIFxwYXJhbSBbaW5dICAgICAgIFN1YlByaW9yaXR5ICBTdWJwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4KKyAgXHJldHVybiAgICAgICAgICAgICAgICAgICAgICAgIEVuY29kZWQgcHJpb3JpdHkuIFZhbHVlIGNhbiBiZSB1c2VkIGluIHRoZSBmdW5jdGlvbiBccmVmIE5WSUNfU2V0UHJpb3JpdHkoKS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfRW5jb2RlUHJpb3JpdHkgKHVpbnQzMl90IFByaW9yaXR5R3JvdXAsIHVpbnQzMl90IFByZWVtcHRQcmlvcml0eSwgdWludDMyX3QgU3ViUHJpb3JpdHkpCit7CisgIHVpbnQzMl90IFByaW9yaXR5R3JvdXBUbXAgPSAoUHJpb3JpdHlHcm91cCAmICh1aW50MzJfdCkweDA3VUwpOyAgIC8qIG9ubHkgdmFsdWVzIDAuLjcgYXJlIHVzZWQgICAgICAgICAgKi8KKyAgdWludDMyX3QgUHJlZW1wdFByaW9yaXR5Qml0czsKKyAgdWludDMyX3QgU3ViUHJpb3JpdHlCaXRzOworCisgIFByZWVtcHRQcmlvcml0eUJpdHMgPSAoKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApID4gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpIDogKHVpbnQzMl90KSg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKTsKKyAgU3ViUHJpb3JpdHlCaXRzICAgICA9ICgoUHJpb3JpdHlHcm91cFRtcCArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpIDwgKHVpbnQzMl90KTdVTCkgPyAodWludDMyX3QpMFVMIDogKHVpbnQzMl90KSgoUHJpb3JpdHlHcm91cFRtcCAtIDdVTCkgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKTsKKworICByZXR1cm4gKAorICAgICAgICAgICAoKFByZWVtcHRQcmlvcml0eSAmICh1aW50MzJfdCkoKDFVTCA8PCAoUHJlZW1wdFByaW9yaXR5Qml0cykpIC0gMVVMKSkgPDwgU3ViUHJpb3JpdHlCaXRzKSB8CisgICAgICAgICAgICgoU3ViUHJpb3JpdHkgICAgICYgKHVpbnQzMl90KSgoMVVMIDw8IChTdWJQcmlvcml0eUJpdHMgICAgKSkgLSAxVUwpKSkKKyAgICAgICAgICk7Cit9CisKKworLyoqCisgIFxicmllZiAgIERlY29kZSBQcmlvcml0eQorICBcZGV0YWlscyBEZWNvZGVzIGFuIGludGVycnVwdCBwcmlvcml0eSB2YWx1ZSB3aXRoIGEgZ2l2ZW4gcHJpb3JpdHkgZ3JvdXAgdG8KKyAgICAgICAgICAgcHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSBhbmQgc3VicHJpb3JpdHkgdmFsdWUuCisgICAgICAgICAgIEluIGNhc2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHByaW9yaXR5IGdyb3VwaW5nIGFuZCBhdmFpbGFibGUKKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUykgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByaW9yaXR5IGdyb3VwIGlzIHNldC4KKyAgXHBhcmFtIFtpbl0gICAgICAgICBQcmlvcml0eSAgIFByaW9yaXR5IHZhbHVlLCB3aGljaCBjYW4gYmUgcmV0cmlldmVkIHdpdGggdGhlIGZ1bmN0aW9uIFxyZWYgTlZJQ19HZXRQcmlvcml0eSgpLgorICBccGFyYW0gW2luXSAgICAgUHJpb3JpdHlHcm91cCAgVXNlZCBwcmlvcml0eSBncm91cC4KKyAgXHBhcmFtIFtvdXRdIHBQcmVlbXB0UHJpb3JpdHkgIFByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgIFxwYXJhbSBbb3V0XSAgICAgcFN1YlByaW9yaXR5ICBTdWJwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19EZWNvZGVQcmlvcml0eSAodWludDMyX3QgUHJpb3JpdHksIHVpbnQzMl90IFByaW9yaXR5R3JvdXAsIHVpbnQzMl90KiBjb25zdCBwUHJlZW1wdFByaW9yaXR5LCB1aW50MzJfdCogY29uc3QgcFN1YlByaW9yaXR5KQoreworICB1aW50MzJfdCBQcmlvcml0eUdyb3VwVG1wID0gKFByaW9yaXR5R3JvdXAgJiAodWludDMyX3QpMHgwN1VMKTsgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovCisgIHVpbnQzMl90IFByZWVtcHRQcmlvcml0eUJpdHM7CisgIHVpbnQzMl90IFN1YlByaW9yaXR5Qml0czsKKworICBQcmVlbXB0UHJpb3JpdHlCaXRzID0gKCg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKSA+ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpID8gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSA6ICh1aW50MzJfdCkoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCk7CisgIFN1YlByaW9yaXR5Qml0cyAgICAgPSAoKFByaW9yaXR5R3JvdXBUbXAgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA8ICh1aW50MzJfdCk3VUwpID8gKHVpbnQzMl90KTBVTCA6ICh1aW50MzJfdCkoKFByaW9yaXR5R3JvdXBUbXAgLSA3VUwpICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSk7CisKKyAgKnBQcmVlbXB0UHJpb3JpdHkgPSAoUHJpb3JpdHkgPj4gU3ViUHJpb3JpdHlCaXRzKSAmICh1aW50MzJfdCkoKDFVTCA8PCAoUHJlZW1wdFByaW9yaXR5Qml0cykpIC0gMVVMKTsKKyAgKnBTdWJQcmlvcml0eSAgICAgPSAoUHJpb3JpdHkgICAgICAgICAgICAgICAgICAgKSAmICh1aW50MzJfdCkoKDFVTCA8PCAoU3ViUHJpb3JpdHlCaXRzICAgICkpIC0gMVVMKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU3lzdGVtIFJlc2V0CisgIFxkZXRhaWxzIEluaXRpYXRlcyBhIHN5c3RlbSByZXNldCByZXF1ZXN0IHRvIHJlc2V0IHRoZSBNQ1UuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU3lzdGVtUmVzZXQodm9pZCkKK3sKKyAgX19EU0IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIGFsbCBvdXRzdGFuZGluZyBtZW1vcnkgYWNjZXNzZXMgaW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyZWQgd3JpdGUgYXJlIGNvbXBsZXRlZCBiZWZvcmUgcmVzZXQgKi8KKyAgU0NCLT5BSVJDUiAgPSAodWludDMyX3QpKCgweDVGQVVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNDQi0+QUlSQ1IgJiBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayAgICApOyAgICAgICAgIC8qIEtlZXAgcHJpb3JpdHkgZ3JvdXAgdW5jaGFuZ2VkICovCisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBjb21wbGV0aW9uIG9mIG1lbW9yeSBhY2Nlc3MgKi8KKworICBmb3IoOzspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YWl0IHVudGlsIHJlc2V0ICovCisgIHsKKyAgICBfX05PUCgpOworICB9Cit9CisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyAqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICBTeXNUaWNrIGZ1bmN0aW9uICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgU3lzVGljayBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IGNvbmZpZ3VyZSB0aGUgU3lzdGVtLgorICBAeworICovCisKKyNpZiAoX19WZW5kb3JfU3lzVGlja0NvbmZpZyA9PSAwVSkKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBUaWNrIENvbmZpZ3VyYXRpb24KKyAgXGRldGFpbHMgSW5pdGlhbGl6ZXMgdGhlIFN5c3RlbSBUaW1lciBhbmQgaXRzIGludGVycnVwdCwgYW5kIHN0YXJ0cyB0aGUgU3lzdGVtIFRpY2sgVGltZXIuCisgICAgICAgICAgIENvdW50ZXIgaXMgaW4gZnJlZSBydW5uaW5nIG1vZGUgdG8gZ2VuZXJhdGUgcGVyaW9kaWMgaW50ZXJydXB0cy4KKyAgXHBhcmFtIFtpbl0gIHRpY2tzICBOdW1iZXIgb2YgdGlja3MgYmV0d2VlbiB0d28gaW50ZXJydXB0cy4KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQuCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkLgorICBcbm90ZSAgICBXaGVuIHRoZSB2YXJpYWJsZSA8Yj5fX1ZlbmRvcl9TeXNUaWNrQ29uZmlnPC9iPiBpcyBzZXQgdG8gMSwgdGhlbiB0aGUKKyAgICAgICAgICAgZnVuY3Rpb24gPGI+U3lzVGlja19Db25maWc8L2I+IGlzIG5vdCBpbmNsdWRlZC4gSW4gdGhpcyBjYXNlLCB0aGUgZmlsZSA8Yj48aT5kZXZpY2U8L2k+Lmg8L2I+CisgICAgICAgICAgIG11c3QgY29udGFpbiBhIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgU3lzVGlja19Db25maWcodWludDMyX3QgdGlja3MpCit7CisgIGlmICgodGlja3MgLSAxVUwpID4gU3lzVGlja19MT0FEX1JFTE9BRF9Nc2spCisgIHsKKyAgICByZXR1cm4gKDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2FkIHZhbHVlIGltcG9zc2libGUgKi8KKyAgfQorCisgIFN5c1RpY2stPkxPQUQgID0gKHVpbnQzMl90KSh0aWNrcyAtIDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCByZWxvYWQgcmVnaXN0ZXIgKi8KKyAgTlZJQ19TZXRQcmlvcml0eSAoU3lzVGlja19JUlFuLCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpIC0gMVVMKTsgLyogc2V0IFByaW9yaXR5IGZvciBTeXN0aWNrIEludGVycnVwdCAqLworICBTeXNUaWNrLT5WQUwgICA9IDBVTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2FkIHRoZSBTeXNUaWNrIENvdW50ZXIgVmFsdWUgKi8KKyAgU3lzVGljay0+Q1RSTCAgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgU3lzVGljayBJUlEgYW5kIFN5c1RpY2sgVGltZXIgKi8KKyAgcmV0dXJuICgwVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gc3VjY2Vzc2Z1bCAqLworfQorCisjZW5kaWYKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zICovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIERlYnVnIEluL091dHB1dCBmdW5jdGlvbiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX2NvcmVfRGVidWdGdW5jdGlvbnMgSVRNIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgYWNjZXNzIHRoZSBJVE0gZGVidWcgaW50ZXJmYWNlLgorICBAeworICovCisKK2V4dGVybiB2b2xhdGlsZSBpbnQzMl90IElUTV9SeEJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgIC8qITwgRXh0ZXJuYWwgdmFyaWFibGUgdG8gcmVjZWl2ZSBjaGFyYWN0ZXJzLiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgSVRNX1JYQlVGRkVSX0VNUFRZICAgMHg1QUE1NUFBNVUgLyohPCBWYWx1ZSBpZGVudGlmeWluZyBccmVmIElUTV9SeEJ1ZmZlciBpcyByZWFkeSBmb3IgbmV4dCBjaGFyYWN0ZXIuICovCisKKworLyoqCisgIFxicmllZiAgIElUTSBTZW5kIENoYXJhY3RlcgorICBcZGV0YWlscyBUcmFuc21pdHMgYSBjaGFyYWN0ZXIgdmlhIHRoZSBJVE0gY2hhbm5lbCAwLCBhbmQKKyAgICAgICAgICAgXGxpIEp1c3QgcmV0dXJucyB3aGVuIG5vIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZCB0aGF0IGhhcyBib29rZWQgdGhlIG91dHB1dC4KKyAgICAgICAgICAgXGxpIElzIGJsb2NraW5nIHdoZW4gYSBkZWJ1Z2dlciBpcyBjb25uZWN0ZWQsIGJ1dCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHNlbnQgaGFzIG5vdCBiZWVuIHRyYW5zbWl0dGVkLgorICBccGFyYW0gW2luXSAgICAgY2ggIENoYXJhY3RlciB0byB0cmFuc21pdC4KKyAgXHJldHVybnMgICAgICAgICAgICBDaGFyYWN0ZXIgdG8gdHJhbnNtaXQuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBJVE1fU2VuZENoYXIgKHVpbnQzMl90IGNoKQoreworICBpZiAoKChJVE0tPlRDUiAmIElUTV9UQ1JfSVRNRU5BX01zaykgIT0gMFVMKSAmJiAgICAgIC8qIElUTSBlbmFibGVkICovCisgICAgICAoKElUTS0+VEVSICYgMVVMICAgICAgICAgICAgICAgKSAhPSAwVUwpICAgKSAgICAgLyogSVRNIFBvcnQgIzAgZW5hYmxlZCAqLworICB7CisgICAgd2hpbGUgKElUTS0+UE9SVFswVV0udTMyID09IDBVTCkKKyAgICB7CisgICAgICBfX05PUCgpOworICAgIH0KKyAgICBJVE0tPlBPUlRbMFVdLnU4ID0gKHVpbnQ4X3QpY2g7CisgIH0KKyAgcmV0dXJuIChjaCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIElUTSBSZWNlaXZlIENoYXJhY3RlcgorICBcZGV0YWlscyBJbnB1dHMgYSBjaGFyYWN0ZXIgdmlhIHRoZSBleHRlcm5hbCB2YXJpYWJsZSBccmVmIElUTV9SeEJ1ZmZlci4KKyAgXHJldHVybiAgICAgICAgICAgICBSZWNlaXZlZCBjaGFyYWN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAtMSAgTm8gY2hhcmFjdGVyIHBlbmRpbmcuCisgKi8KK19fU1RBVElDX0lOTElORSBpbnQzMl90IElUTV9SZWNlaXZlQ2hhciAodm9pZCkKK3sKKyAgaW50MzJfdCBjaCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKworICBpZiAoSVRNX1J4QnVmZmVyICE9IElUTV9SWEJVRkZFUl9FTVBUWSkKKyAgeworICAgIGNoID0gSVRNX1J4QnVmZmVyOworICAgIElUTV9SeEJ1ZmZlciA9IElUTV9SWEJVRkZFUl9FTVBUWTsgICAgICAgLyogcmVhZHkgZm9yIG5leHQgY2hhcmFjdGVyICovCisgIH0KKworICByZXR1cm4gKGNoKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgSVRNIENoZWNrIENoYXJhY3RlcgorICBcZGV0YWlscyBDaGVja3Mgd2hldGhlciBhIGNoYXJhY3RlciBpcyBwZW5kaW5nIGZvciByZWFkaW5nIGluIHRoZSB2YXJpYWJsZSBccmVmIElUTV9SeEJ1ZmZlci4KKyAgXHJldHVybiAgICAgICAgICAwICBObyBjaGFyYWN0ZXIgYXZhaWxhYmxlLgorICBccmV0dXJuICAgICAgICAgIDEgIENoYXJhY3RlciBhdmFpbGFibGUuCisgKi8KK19fU1RBVElDX0lOTElORSBpbnQzMl90IElUTV9DaGVja0NoYXIgKHZvaWQpCit7CisKKyAgaWYgKElUTV9SeEJ1ZmZlciA9PSBJVE1fUlhCVUZGRVJfRU1QVFkpCisgIHsKKyAgICByZXR1cm4gKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKyAgfQorfQorCisvKkB9IGVuZCBvZiBDTVNJU19jb3JlX0RlYnVnRnVuY3Rpb25zICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ000X0hfREVQRU5EQU5UICovCisKKyNlbmRpZiAvKiBfX0NNU0lTX0dFTkVSSUMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY203LmggYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNzUzMGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtNy5oCkBAIC0wLDAgKzEsMjUxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNvcmVfY203LmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTTcgQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX19DT1JFX0NNN19IX0dFTkVSSUMKKyNkZWZpbmUgX19DT1JFX0NNN19IX0dFTkVSSUMKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAgXHBhZ2UgQ01TSVNfTUlTUkFfRXhjZXB0aW9ucyAgTUlTUkEtQzoyMDA0IENvbXBsaWFuY2UgRXhjZXB0aW9ucworICBDTVNJUyB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIE1JU1JBLUM6MjAwNCBydWxlczoKKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgOC41LCBvYmplY3QvZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBoZWFkZXIgZmlsZS48YnI+CisgICAgIEZ1bmN0aW9uIGRlZmluaXRpb25zIGluIGhlYWRlciBmaWxlcyBhcmUgdXNlZCB0byBhbGxvdyAnaW5saW5pbmcnLgorCisgICBcbGkgUmVxdWlyZWQgUnVsZSAxOC40LCBkZWNsYXJhdGlvbiBvZiB1bmlvbiB0eXBlIG9yIG9iamVjdCBvZiB1bmlvbiB0eXBlOiAney4uLn0nLjxicj4KKyAgICAgVW5pb25zIGFyZSB1c2VkIGZvciBlZmZlY3RpdmUgcmVwcmVzZW50YXRpb24gb2YgY29yZSByZWdpc3RlcnMuCisKKyAgIFxsaSBBZHZpc29yeSBSdWxlIDE5LjcsIEZ1bmN0aW9uLWxpa2UgbWFjcm8gZGVmaW5lZC48YnI+CisgICAgIEZ1bmN0aW9uLWxpa2UgbWFjcm9zIGFyZSB1c2VkIHRvIGFsbG93IG1vcmUgZWZmaWNpZW50IGNvZGUuCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIENNU0lTIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxpbmdyb3VwIENvcnRleF9NNworICBAeworICovCisKKy8qICBDTVNJUyBDTTcgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgX19DTTdfQ01TSVNfVkVSU0lPTl9NQUlOICAoMHgwNFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFszMToxNl0gQ01TSVMgSEFMIG1haW4gdmVyc2lvbiAqLworI2RlZmluZSBfX0NNN19DTVNJU19WRVJTSU9OX1NVQiAgICgweDFFVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzE1OjBdICBDTVNJUyBIQUwgc3ViIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTdfQ01TSVNfVkVSU0lPTiAgICAgICAoKF9fQ003X0NNU0lTX1ZFUlNJT05fTUFJTiA8PCAxNlUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19DTTdfQ01TSVNfVkVSU0lPTl9TVUIgICAgICAgICAgICkgICAgICAgIC8qITwgQ01TSVMgSEFMIHZlcnNpb24gbnVtYmVyICovCisKKyNkZWZpbmUgX19DT1JURVhfTSAgICAgICAgICAgICAgICAoMHgwN1UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcnRleC1NIENvcmUgKi8KKworCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIElBUiBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIElBUiBDb21waWxlci4gT25seSBhdmFpbGFibGUgaW4gSGlnaCBvcHRpbWl6YXRpb24gbW9kZSEgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRJIENDUyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNkZWZpbmUgX19wYWNrZWQKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyLiBVc2UgLXBjOTkgb24gY29tcGlsZSBsaW5lICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbHNlCisgICNlcnJvciBVbmtub3duIGNvbXBpbGVyCisjZW5kaWYKKworLyoqIF9fRlBVX1VTRUQgaW5kaWNhdGVzIHdoZXRoZXIgYW4gRlBVIGlzIHVzZWQgb3Igbm90LgorICAgIEZvciB0aGlzLCBfX0ZQVV9QUkVTRU5UIGhhcyB0byBiZSBjaGVja2VkIHByaW9yIHRvIG1ha2luZyB1c2Ugb2YgRlBVIHNwZWNpZmljIHJlZ2lzdGVycyBhbmQgZnVuY3Rpb25zLgorKi8KKyNpZiBkZWZpbmVkICggX19DQ19BUk0gKQorICAjaWYgZGVmaW5lZCBfX1RBUkdFVF9GUFVfVkZQCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjaWYgZGVmaW5lZCBfX0FSTV9QQ1NfVkZQCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDEpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI3dhcm5pbmcgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKyAgICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2lmIGRlZmluZWQgKF9fVkZQX0ZQX18pICYmICFkZWZpbmVkKF9fU09GVEZQX18pCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNpZiBkZWZpbmVkIF9fQVJNVkZQX18KKyAgICAjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2lmIGRlZmluZWQgX19USV9WRlBfU1VQUE9SVF9fCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjaWYgZGVmaW5lZCBfX0ZQVV9WRlBfXworICAgICNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQorICAgICNlbHNlCisgICAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKyAgICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkKKyAgI2lmICggX19DU01DX18gJiAweDQwMFUpCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZW5kaWYKKworI2luY2x1ZGUgImNvcmVfY21JbnN0ci5oIiAgICAgICAgICAgICAgICAvKiBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAqLworI2luY2x1ZGUgImNvcmVfY21GdW5jLmgiICAgICAgICAgICAgICAgICAvKiBDb3JlIEZ1bmN0aW9uIEFjY2VzcyAqLworI2luY2x1ZGUgImNvcmVfY21TaW1kLmgiICAgICAgICAgICAgICAgICAvKiBDb21waWxlciBzcGVjaWZpYyBTSU1EIEludHJpbnNpY3MgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09SRV9DTTdfSF9HRU5FUklDICovCisKKyNpZm5kZWYgX19DTVNJU19HRU5FUklDCisKKyNpZm5kZWYgX19DT1JFX0NNN19IX0RFUEVOREFOVAorI2RlZmluZSBfX0NPUkVfQ003X0hfREVQRU5EQU5UCisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGNoZWNrIGRldmljZSBkZWZpbmVzIGFuZCB1c2UgZGVmYXVsdHMgKi8KKyNpZiBkZWZpbmVkIF9fQ0hFQ0tfREVWSUNFX0RFRklORVMKKyAgI2lmbmRlZiBfX0NNN19SRVYKKyAgICAjZGVmaW5lIF9fQ003X1JFViAgICAgICAgICAgICAgIDB4MDAwMFUKKyAgICAjd2FybmluZyAiX19DTTdfUkVWIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19GUFVfUFJFU0VOVAorICAgICNkZWZpbmUgX19GUFVfUFJFU0VOVCAgICAgICAgICAgICAwVQorICAgICN3YXJuaW5nICJfX0ZQVV9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19NUFVfUFJFU0VOVAorICAgICNkZWZpbmUgX19NUFVfUFJFU0VOVCAgICAgICAgICAgICAwVQorICAgICN3YXJuaW5nICJfX01QVV9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19JQ0FDSEVfUFJFU0VOVAorICAgICNkZWZpbmUgX19JQ0FDSEVfUFJFU0VOVCAgICAgICAgICAwVQorICAgICN3YXJuaW5nICJfX0lDQUNIRV9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19EQ0FDSEVfUFJFU0VOVAorICAgICNkZWZpbmUgX19EQ0FDSEVfUFJFU0VOVCAgICAgICAgICAwVQorICAgICN3YXJuaW5nICJfX0RDQUNIRV9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19EVENNX1BSRVNFTlQKKyAgICAjZGVmaW5lIF9fRFRDTV9QUkVTRU5UICAgICAgICAgICAgMFUKKyAgICAjd2FybmluZyAiX19EVENNX1BSRVNFTlQgICAgICAgIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19OVklDX1BSSU9fQklUUworICAgICNkZWZpbmUgX19OVklDX1BSSU9fQklUUyAgICAgICAgICAzVQorICAgICN3YXJuaW5nICJfX05WSUNfUFJJT19CSVRTIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19WZW5kb3JfU3lzVGlja0NvbmZpZworICAgICNkZWZpbmUgX19WZW5kb3JfU3lzVGlja0NvbmZpZyAgICAwVQorICAgICN3YXJuaW5nICJfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorI2VuZGlmCisKKy8qIElPIGRlZmluaXRpb25zIChhY2Nlc3MgcmVzdHJpY3Rpb25zIHRvIHBlcmlwaGVyYWwgcmVnaXN0ZXJzKSAqLworLyoqCisgICAgXGRlZmdyb3VwIENNU0lTX2dsb2JfZGVmcyBDTVNJUyBHbG9iYWwgRGVmaW5lcworCisgICAgPHN0cm9uZz5JTyBUeXBlIFF1YWxpZmllcnM8L3N0cm9uZz4gYXJlIHVzZWQKKyAgICBcbGkgdG8gc3BlY2lmeSB0aGUgYWNjZXNzIHRvIHBlcmlwaGVyYWwgdmFyaWFibGVzLgorICAgIFxsaSBmb3IgYXV0b21hdGljIGdlbmVyYXRpb24gb2YgcGVyaXBoZXJhbCByZWdpc3RlciBkZWJ1ZyBpbmZvcm1hdGlvbi4KKyovCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovCisjZWxzZQorICAjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSBjb25zdCAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8KKyNlbmRpZgorI2RlZmluZSAgICAgX19PICAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3dyaXRlIG9ubHknIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX0lPICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCAvIHdyaXRlJyBwZXJtaXNzaW9ucyAqLworCisvKiBmb2xsb3dpbmcgZGVmaW5lcyBzaG91bGQgYmUgdXNlZCBmb3Igc3RydWN0dXJlIG1lbWJlcnMgKi8KKyNkZWZpbmUgICAgIF9fSU0gICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgLyohIERlZmluZXMgJ3JlYWQgb25seScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19PTSAgICAgdm9sYXRpbGUgICAgICAgICAgICAvKiEgRGVmaW5lcyAnd3JpdGUgb25seScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19JT00gICAgdm9sYXRpbGUgICAgICAgICAgICAvKiEgRGVmaW5lcyAncmVhZCAvIHdyaXRlJyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENvcnRleF9NNyAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBSZWdpc3RlciBBYnN0cmFjdGlvbgorICBDb3JlIFJlZ2lzdGVyIGNvbnRhaW46CisgIC0gQ29yZSBSZWdpc3RlcgorICAtIENvcmUgTlZJQyBSZWdpc3RlcgorICAtIENvcmUgU0NCIFJlZ2lzdGVyCisgIC0gQ29yZSBTeXNUaWNrIFJlZ2lzdGVyCisgIC0gQ29yZSBEZWJ1ZyBSZWdpc3RlcgorICAtIENvcmUgTVBVIFJlZ2lzdGVyCisgIC0gQ29yZSBGUFUgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX2NvcmVfcmVnaXN0ZXIgRGVmaW5lcyBhbmQgVHlwZSBEZWZpbml0aW9ucworICBcYnJpZWYgVHlwZSBkZWZpbml0aW9ucyBhbmQgZGVmaW5lcyBmb3IgQ29ydGV4LU0gcHJvY2Vzc29yIGJhc2VkIGRldmljZXMuCisqLworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19DT1JFICBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXJzCisgIFxicmllZiAgICAgIENvcmUgUmVnaXN0ZXIgdHlwZSBkZWZpbml0aW9ucy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKEFQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoxNjsgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uMTUgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgR0U6NDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAxNi4uMTkgIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCBmbGFncyAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6NzsgICAgICAgICAgICAgICAvKiE8IGJpdDogMjAuLjI2ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFE6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI3ICBTYXR1cmF0aW9uIGNvbmRpdGlvbiBmbGFnICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBBUFNSX1R5cGU7CisKKy8qIEFQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQVBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogTWFzayAqLworCisjZGVmaW5lIEFQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1FfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBRIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfUV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1FfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFEgTWFzayAqLworCisjZGVmaW5lIEFQU1JfR0VfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEdFIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfR0VfTXNrICAgICAgICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IEFQU1JfR0VfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEdFIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgSW50ZXJydXB0IFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChJUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyMzsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IElQU1JfVHlwZTsKKworLyogSVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJUFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IElQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgU3BlY2lhbC1QdXJwb3NlIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVycyAoeFBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6NzsgICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjE1ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IEdFOjQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogMTYuLjE5ICBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgZmxhZ3MgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOjQ7ICAgICAgICAgICAgICAgLyohPCBiaXQ6IDIwLi4yMyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBUOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNCAgVGh1bWIgYml0ICAgICAgICAocmVhZCAwKSAqLworICAgIHVpbnQzMl90IElUOjI7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogMjUuLjI2ICBzYXZlZCBJVCBzdGF0ZSAgIChyZWFkIDApICovCisgICAgdWludDMyX3QgUToxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjcgIFNhdHVyYXRpb24gY29uZGl0aW9uIGZsYWcgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IHhQU1JfVHlwZTsKKworLyogeFBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSB4UFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIHhQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgTWFzayAqLworCisjZGVmaW5lIHhQU1JfUV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFEgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9RX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfUV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogUSBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9JVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9JVF9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAoM1VMIDw8IHhQU1JfSVRfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVQgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9UX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9HRV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogR0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9HRV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGVUwgPDwgeFBTUl9HRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogR0UgTWFzayAqLworCisjZGVmaW5lIHhQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgeFBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBDb250cm9sIFJlZ2lzdGVycyAoQ09OVFJPTCkuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBuUFJJVjoxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMCAgRXhlY3V0aW9uIHByaXZpbGVnZSBpbiBUaHJlYWQgbW9kZSAqLworICAgIHVpbnQzMl90IFNQU0VMOjE7ICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAxICBTdGFjayB0byBiZSB1c2VkICovCisgICAgdWludDMyX3QgRlBDQToxOyAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDIgIEZQIGV4dGVuc2lvbiBhY3RpdmUgZmxhZyAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6Mjk7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDMuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBDT05UUk9MX1R5cGU7CisKKy8qIENPTlRST0wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ09OVFJPTF9GUENBX1BvcyAgICAgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogRlBDQSBQb3NpdGlvbiAqLworI2RlZmluZSBDT05UUk9MX0ZQQ0FfTXNrICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQ09OVFJPTF9GUENBX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBGUENBIE1hc2sgKi8KKworI2RlZmluZSBDT05UUk9MX1NQU0VMX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTUFNFTCBQb3NpdGlvbiAqLworI2RlZmluZSBDT05UUk9MX1NQU0VMX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgQ09OVFJPTF9TUFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTUFNFTCBNYXNrICovCisKKyNkZWZpbmUgQ09OVFJPTF9uUFJJVl9Qb3MgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogblBSSVYgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9uUFJJVl9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgQ09OVFJPTF9uUFJJVl9Qb3MqLykgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogblBSSVYgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19DT1JFICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfTlZJQyAgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKQorICBcYnJpZWYgICAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgTlZJQyBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IElTRVJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzI0VV07CisgIF9fSU9NIHVpbnQzMl90IElDRVJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSU0VSVkVEMVsyNFVdOworICBfX0lPTSB1aW50MzJfdCBJU1BSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxMDAgKFIvVykgIEludGVycnVwdCBTZXQgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMjRVXTsKKyAgX19JT00gdWludDMyX3QgSUNQUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbMjRVXTsKKyAgX19JT00gdWludDMyX3QgSUFCUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjAwIChSL1cpICBJbnRlcnJ1cHQgQWN0aXZlIGJpdCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDRbNTZVXTsKKyAgX19JT00gdWludDhfdCAgSVBbMjQwVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzAwIChSL1cpICBJbnRlcnJ1cHQgUHJpb3JpdHkgUmVnaXN0ZXIgKDhCaXQgd2lkZSkgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ1WzY0NFVdOworICBfX09NICB1aW50MzJfdCBTVElSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFMDAgKCAvVykgIFNvZnR3YXJlIFRyaWdnZXIgSW50ZXJydXB0IFJlZ2lzdGVyICovCit9ICBOVklDX1R5cGU7CisKKy8qIFNvZnR3YXJlIFRyaWdnZXJlZCBJbnRlcnJ1cHQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTlZJQ19TVElSX0lOVElEX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1RJUjogSU5UTElORVNOVU0gUG9zaXRpb24gKi8KKyNkZWZpbmUgTlZJQ19TVElSX0lOVElEX01zayAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IE5WSUNfU1RJUl9JTlRJRF9Qb3MqLykgICAgICAgIC8qITwgU1RJUjogSU5UTElORVNOVU0gTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19OVklDICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TQ0IgICAgIFN5c3RlbSBDb250cm9sIEJsb2NrIChTQ0IpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JTSAgdWludDMyX3QgQ1BVSUQ7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBDUFVJRCBCYXNlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IElDU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgSW50ZXJydXB0IENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFZUT1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgVmVjdG9yIFRhYmxlIE9mZnNldCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBBSVJDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBTQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQ4X3QgIFNIUFJbMTJVXTsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxOCAoUi9XKSAgU3lzdGVtIEhhbmRsZXJzIFByaW9yaXR5IFJlZ2lzdGVycyAoNC03LCA4LTExLCAxMi0xNSkgKi8KKyAgX19JT00gdWludDMyX3QgU0hDU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjggKFIvVykgIENvbmZpZ3VyYWJsZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgSEZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDJDIChSL1cpICBIYXJkRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzMCAoUi9XKSAgRGVidWcgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IE1NRkFSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzNCAoUi9XKSAgTWVtTWFuYWdlIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQkZBUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM4IChSL1cpICBCdXNGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEFGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzQyAoUi9XKSAgQXV4aWxpYXJ5IEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBJRF9QRlJbMlVdOyAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDAgKFIvICkgIFByb2Nlc3NvciBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IElEX0RGUjsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0OCAoUi8gKSAgRGVidWcgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBJRF9BRlI7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNEMgKFIvICkgIEF1eGlsaWFyeSBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IElEX01GUls0VV07ICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1MCAoUi8gKSAgTWVtb3J5IE1vZGVsIEZlYXR1cmUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgSURfSVNBUls1VV07ICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDYwIChSLyApICBJbnN0cnVjdGlvbiBTZXQgQXR0cmlidXRlcyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMVVdOworICBfX0lNICB1aW50MzJfdCBDTElEUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNzggKFIvICkgIENhY2hlIExldmVsIElEIHJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IENUUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA3QyAoUi8gKSAgQ2FjaGUgVHlwZSByZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBDQ1NJRFI7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODAgKFIvICkgIENhY2hlIFNpemUgSUQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1NTRUxSOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDg0IChSL1cpICBDYWNoZSBTaXplIFNlbGVjdGlvbiBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDUEFDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODggKFIvVykgIENvcHJvY2Vzc29yIEFjY2VzcyBDb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1s5M1VdOworICBfX09NICB1aW50MzJfdCBTVElSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyMDAgKCAvVykgIFNvZnR3YXJlIFRyaWdnZXJlZCBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzE1VV07CisgIF9fSU0gIHVpbnQzMl90IE1WRlIwOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDI0MCAoUi8gKSAgTWVkaWEgYW5kIFZGUCBGZWF0dXJlIFJlZ2lzdGVyIDAgKi8KKyAgX19JTSAgdWludDMyX3QgTVZGUjE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjQ0IChSLyApICBNZWRpYSBhbmQgVkZQIEZlYXR1cmUgUmVnaXN0ZXIgMSAqLworICBfX0lNICB1aW50MzJfdCBNVkZSMjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyNDggKFIvICkgIE1lZGlhIGFuZCBWRlAgRmVhdHVyZSBSZWdpc3RlciAxICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENVsxVV07CisgIF9fT00gIHVpbnQzMl90IElDSUFMTFU7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDI1MCAoIC9XKSAgSS1DYWNoZSBJbnZhbGlkYXRlIEFsbCB0byBQb1UgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ2WzFVXTsKKyAgX19PTSAgdWludDMyX3QgSUNJTVZBVTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjU4ICggL1cpICBJLUNhY2hlIEludmFsaWRhdGUgYnkgTVZBIHRvIFBvVSAqLworICBfX09NICB1aW50MzJfdCBEQ0lNVkFDOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyNUMgKCAvVykgIEQtQ2FjaGUgSW52YWxpZGF0ZSBieSBNVkEgdG8gUG9DICovCisgIF9fT00gIHVpbnQzMl90IERDSVNXOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDI2MCAoIC9XKSAgRC1DYWNoZSBJbnZhbGlkYXRlIGJ5IFNldC13YXkgKi8KKyAgX19PTSAgdWludDMyX3QgRENDTVZBVTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjY0ICggL1cpICBELUNhY2hlIENsZWFuIGJ5IE1WQSB0byBQb1UgKi8KKyAgX19PTSAgdWludDMyX3QgRENDTVZBQzsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjY4ICggL1cpICBELUNhY2hlIENsZWFuIGJ5IE1WQSB0byBQb0MgKi8KKyAgX19PTSAgdWludDMyX3QgRENDU1c7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjZDICggL1cpICBELUNhY2hlIENsZWFuIGJ5IFNldC13YXkgKi8KKyAgX19PTSAgdWludDMyX3QgRENDSU1WQUM7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjcwICggL1cpICBELUNhY2hlIENsZWFuIGFuZCBJbnZhbGlkYXRlIGJ5IE1WQSB0byBQb0MgKi8KKyAgX19PTSAgdWludDMyX3QgRENDSVNXOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4Mjc0ICggL1cpICBELUNhY2hlIENsZWFuIGFuZCBJbnZhbGlkYXRlIGJ5IFNldC13YXkgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ3WzZVXTsKKyAgX19JT00gdWludDMyX3QgSVRDTUNSOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjkwIChSL1cpICBJbnN0cnVjdGlvbiBUaWdodGx5LUNvdXBsZWQgTWVtb3J5IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRFRDTUNSOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4Mjk0IChSL1cpICBEYXRhIFRpZ2h0bHktQ291cGxlZCBNZW1vcnkgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyAgX19JT00gdWludDMyX3QgQUhCUENSOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4Mjk4IChSL1cpICBBSEJQIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ0FDUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjlDIChSL1cpICBMMSBDYWNoZSBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEFIQlNDUjsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDJBMCAoUi9XKSAgQUhCIFNsYXZlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ4WzFVXTsKKyAgX19JT00gdWludDMyX3QgQUJGU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MkE4IChSL1cpICBBdXhpbGlhcnkgQnVzIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworfSBTQ0JfVHlwZTsKKworLyogU0NCIENQVUlEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX01zayAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfUG9zICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9WQVJJQU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Nc2sgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fUG9zICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fTXNrICAgICAgICAgICAgICAgKDB4RkZGVUwgPDwgU0NCX0NQVUlEX1BBUlROT19Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Nc2sgICAgICAgICAgICAgKDB4RlVMIC8qPDwgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyovKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gTWFzayAqLworCisvKiBTQ0IgSW50ZXJydXB0IENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcyAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfTXNrICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MpICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9SRVRUT0JBU0VfUG9zICAgICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUkVUVE9CQVNFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1JFVFRPQkFTRV9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9SRVRUT0JBU0VfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBSRVRUT0JBU0UgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfTXNrICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyovKSAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIE1hc2sgKi8KKworLyogU0NCIFZlY3RvciBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1ZUT1JfVEJMT0ZGX1BvcyAgICAgICAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTE9GRiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfTXNrICAgICAgICAgICAgICAgICgweDFGRkZGRkZVTCA8PCBTQ0JfVlRPUl9UQkxPRkZfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIE1hc2sgKi8KKworLyogU0NCIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Nc2sgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MpICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zICAgICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFBSSUdST1VQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2sgICAgICAgICAgICAgKDdVTCA8PCBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogUFJJR1JPVVAgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX01zayAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MpICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUUkVTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Nc2sgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Qb3MqLykgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUUkVTRVQgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfUG9zICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgTWFzayAqLworCisvKiBTQ0IgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DQ1JfQlBfUG9zICAgICAgICAgICAgICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IEJyYW5jaCBwcmVkaWN0aW9uIGVuYWJsZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9CUF9Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfQlBfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogQnJhbmNoIHByZWRpY3Rpb24gZW5hYmxlIGJpdCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9JQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogSW5zdHJ1Y3Rpb24gY2FjaGUgZW5hYmxlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0lDX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9JQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBJbnN0cnVjdGlvbiBjYWNoZSBlbmFibGUgYml0IE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX0RDX1BvcyAgICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBDYWNoZSBlbmFibGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfRENfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX0RDX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IENhY2hlIGVuYWJsZSBiaXQgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fUG9zICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1NUS0FMSUdOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX0JGSEZOTUlHTl9Qb3MgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBCRkhGTk1JR04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9CRkhGTk1JR05fTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfQkZIRk5NSUdOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogQkZIRk5NSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX0RJVl8wX1RSUF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBESVZfMF9UUlAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9ESVZfMF9UUlBfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfRElWXzBfVFJQX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogRElWXzBfVFJQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcyAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9VU0VSU0VUTVBFTkRfUG9zICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVVNFUlNFVE1QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfVVNFUlNFVE1QRU5EX01zayAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VTRVJTRVRNUEVORF9Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVTRVJTRVRNUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Qb3MgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogTk9OQkFTRVRIUkRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Nc2sgICAgICAgICAoMVVMIC8qPDwgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Qb3MqLykgICAgICAgIC8qITwgU0NCIENDUjogTk9OQkFTRVRIUkRFTkEgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcyAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxURU5BIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRFTkEgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxURU5BX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEVOQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Nc2sgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TVkNBTExQRU5ERURfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MgICAgICAgMTRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcyAgICAgICAxM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfTXNrICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcykgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUUEVOREVEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Nc2sgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zKSAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9TWVNUSUNLQUNUX1BvcyAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1lTVElDS0FDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1lTVElDS0FDVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNZU1RJQ0tBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfUG9zICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfUEVORFNWQUNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfTU9OSVRPUkFDVF9Qb3MgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1PTklUT1JBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01PTklUT1JBQ1RfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NT05JVE9SQUNUX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNT05JVE9SQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX1BvcyAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTEFDVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcyAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfUG9zICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX01zayAgICAgICAgICAoMVVMIC8qPDwgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX1BvcyovKSAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEFDVCBNYXNrICovCisKKy8qIFNDQiBDb25maWd1cmFibGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DRlNSX1VTR0ZBVUxUU1JfUG9zICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBVc2FnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfVVNHRkFVTFRTUl9Nc2sgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0NGU1JfVVNHRkFVTFRTUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENGU1I6IFVzYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NGU1JfQlVTRkFVTFRTUl9Qb3MgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IEJ1cyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfQlVTRkFVTFRTUl9Nc2sgICAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DRlNSX0JVU0ZBVUxUU1JfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IEJ1cyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DRlNSX01FTUZBVUxUU1JfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBNZW1vcnkgTWFuYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9NRU1GQVVMVFNSX01zayAgICAgICAgICAgICgweEZGVUwgLyo8PCBTQ0JfQ0ZTUl9NRU1GQVVMVFNSX1BvcyovKSAgICAgICAgLyohPCBTQ0IgQ0ZTUjogTWVtb3J5IE1hbmFnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgTWFzayAqLworCisvKiBTQ0IgSGFyZCBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0hGU1JfREVCVUdFVlRfUG9zICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IERFQlVHRVZUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX0RFQlVHRVZUX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9ERUJVR0VWVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBERUJVR0VWVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0hGU1JfRk9SQ0VEX1BvcyAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IEZPUkNFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSEZTUl9GT1JDRURfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0hGU1JfRk9SQ0VEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogRk9SQ0VEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSEZTUl9WRUNUVEJMX1BvcyAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogVkVDVFRCTCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSEZTUl9WRUNUVEJMX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0hGU1JfVkVDVFRCTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogVkVDVFRCTCBNYXNrICovCisKKy8qIFNDQiBEZWJ1ZyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0RGU1JfRVhURVJOQUxfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEVYVEVSTkFMIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX0VYVEVSTkFMX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9FWFRFUk5BTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBFWFRFUk5BTCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfVkNBVENIX1BvcyAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IFZDQVRDSCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9WQ0FUQ0hfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfVkNBVENIX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogVkNBVENIIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9EV1RUUkFQX1BvcyAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRFdUVFJBUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9EV1RUUkFQX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfRFdUVFJBUF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRFdUVFJBUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfQktQVF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEJLUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfQktQVF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX0JLUFRfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEJLUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX0hBTFRFRF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBIQUxURUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfSEFMVEVEX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0RGU1JfSEFMVEVEX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEhBTFRFRCBNYXNrICovCisKKy8qIFNDQiBDYWNoZSBMZXZlbCBJRCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQ0xJRFJfTE9VVV9Qb3MgICAgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0xJRFI6IExvVVUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NMSURSX0xPVVVfTXNrICAgICAgICAgICAgICAgICAoN1VMIDw8IFNDQl9DTElEUl9MT1VVX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENMSURSOiBMb1VVIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0xJRFJfTE9DX1BvcyAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0xJRFI6IExvQyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0xJRFJfTE9DX01zayAgICAgICAgICAgICAgICAgICg3VUwgPDwgU0NCX0NMSURSX0xPQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0xJRFI6IExvQyBNYXNrICovCisKKy8qIFNDQiBDYWNoZSBUeXBlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DVFJfRk9STUFUX1BvcyAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IEZvcm1hdCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1RSX0ZPUk1BVF9Nc2sgICAgICAgICAgICAgICAgICg3VUwgPDwgU0NCX0NUUl9GT1JNQVRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1RSOiBGb3JtYXQgTWFzayAqLworCisjZGVmaW5lIFNDQl9DVFJfQ1dHX1BvcyAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IENXRyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1RSX0NXR19Nc2sgICAgICAgICAgICAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1RSX0NXR19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1RSOiBDV0cgTWFzayAqLworCisjZGVmaW5lIFNDQl9DVFJfRVJHX1BvcyAgICAgICAgICAgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IEVSRyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1RSX0VSR19Nc2sgICAgICAgICAgICAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1RSX0VSR19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1RSOiBFUkcgTWFzayAqLworCisjZGVmaW5lIFNDQl9DVFJfRE1JTkxJTkVfUG9zICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IERtaW5MaW5lIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DVFJfRE1JTkxJTkVfTXNrICAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DVFJfRE1JTkxJTkVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IERtaW5MaW5lIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1RSX0lNSU5MSU5FX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1RSOiBJbUluTGluZSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1RSX0lNSU5MSU5FX01zayAgICAgICAgICAgICAgICgweEZVTCAvKjw8IFNDQl9DVFJfSU1JTkxJTkVfUG9zKi8pICAgICAgICAgICAgLyohPCBTQ0IgQ1RSOiBJbUluTGluZSBNYXNrICovCisKKy8qIFNDQiBDYWNoZSBTaXplIElEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DQ1NJRFJfV1RfUG9zICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IFdUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1NJRFJfV1RfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NTSURSX1dUX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IFdUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NTSURSX1dCX1BvcyAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NTSURSOiBXQiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NTSURSX1dCX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDU0lEUl9XQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NTSURSOiBXQiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDU0lEUl9SQV9Qb3MgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogUkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDU0lEUl9SQV9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1NJRFJfUkFfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogUkEgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1NJRFJfV0FfUG9zICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IFdBIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1NJRFJfV0FfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NTSURSX1dBX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IFdBIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NTSURSX05VTVNFVFNfUG9zICAgICAgICAgICAgIDEzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NTSURSOiBOdW1TZXRzIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1NJRFJfTlVNU0VUU19Nc2sgICAgICAgICAgICAgKDB4N0ZGRlVMIDw8IFNDQl9DQ1NJRFJfTlVNU0VUU19Qb3MpICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IE51bVNldHMgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1NJRFJfQVNTT0NJQVRJVklUWV9Qb3MgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IEFzc29jaWF0aXZpdHkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDU0lEUl9BU1NPQ0lBVElWSVRZX01zayAgICAgICAoMHgzRkZVTCA8PCBTQ0JfQ0NTSURSX0FTU09DSUFUSVZJVFlfUG9zKSAgICAgIC8qITwgU0NCIENDU0lEUjogQXNzb2NpYXRpdml0eSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDU0lEUl9MSU5FU0laRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogTGluZVNpemUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDU0lEUl9MSU5FU0laRV9Nc2sgICAgICAgICAgICAoN1VMIC8qPDwgU0NCX0NDU0lEUl9MSU5FU0laRV9Qb3MqLykgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogTGluZVNpemUgTWFzayAqLworCisvKiBTQ0IgQ2FjaGUgU2l6ZSBTZWxlY3Rpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NTU0VMUl9MRVZFTF9Qb3MgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENTU0VMUjogTGV2ZWwgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NTU0VMUl9MRVZFTF9Nc2sgICAgICAgICAgICAgICAoN1VMIDw8IFNDQl9DU1NFTFJfTEVWRUxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENTU0VMUjogTGV2ZWwgTWFzayAqLworCisjZGVmaW5lIFNDQl9DU1NFTFJfSU5EX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDU1NFTFI6IEluRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1NTRUxSX0lORF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfQ1NTRUxSX0lORF9Qb3MqLykgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1NTRUxSOiBJbkQgTWFzayAqLworCisvKiBTQ0IgU29mdHdhcmUgVHJpZ2dlcmVkIEludGVycnVwdCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU1RJUl9JTlRJRF9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU1RJUjogSU5USUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NUSVJfSU5USURfTXNrICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IFNDQl9TVElSX0lOVElEX1BvcyovKSAgICAgICAgICAgIC8qITwgU0NCIFNUSVI6IElOVElEIE1hc2sgKi8KKworLyogU0NCIEQtQ2FjaGUgSW52YWxpZGF0ZSBieSBTZXQtd2F5IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9EQ0lTV19XQVlfUG9zICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0lTVzogV2F5IFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9EQ0lTV19XQVlfTXNrICAgICAgICAgICAgICAgICAgKDNVTCA8PCBTQ0JfRENJU1dfV0FZX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0lTVzogV2F5IE1hc2sgKi8KKworI2RlZmluZSBTQ0JfRENJU1dfU0VUX1BvcyAgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENJU1c6IFNldCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfRENJU1dfU0VUX01zayAgICAgICAgICAgICAgICAgICgweDFGRlVMIDw8IFNDQl9EQ0lTV19TRVRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENJU1c6IFNldCBNYXNrICovCisKKy8qIFNDQiBELUNhY2hlIENsZWFuIGJ5IFNldC13YXkgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0RDQ1NXX1dBWV9Qb3MgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERDQ1NXOiBXYXkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RDQ1NXX1dBWV9Nc2sgICAgICAgICAgICAgICAgICAoM1VMIDw8IFNDQl9EQ0NTV19XQVlfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERDQ1NXOiBXYXkgTWFzayAqLworCisjZGVmaW5lIFNDQl9EQ0NTV19TRVRfUG9zICAgICAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0NTVzogU2V0IFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9EQ0NTV19TRVRfTXNrICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgPDwgU0NCX0RDQ1NXX1NFVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0NTVzogU2V0IE1hc2sgKi8KKworLyogU0NCIEQtQ2FjaGUgQ2xlYW4gYW5kIEludmFsaWRhdGUgYnkgU2V0LXdheSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfRENDSVNXX1dBWV9Qb3MgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENDSVNXOiBXYXkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RDQ0lTV19XQVlfTXNrICAgICAgICAgICAgICAgICAoM1VMIDw8IFNDQl9EQ0NJU1dfV0FZX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERDQ0lTVzogV2F5IE1hc2sgKi8KKworI2RlZmluZSBTQ0JfRENDSVNXX1NFVF9Qb3MgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENDSVNXOiBTZXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RDQ0lTV19TRVRfTXNrICAgICAgICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfRENDSVNXX1NFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIERDQ0lTVzogU2V0IE1hc2sgKi8KKworLyogSW5zdHJ1Y3Rpb24gVGlnaHRseS1Db3VwbGVkIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9JVENNQ1JfU1pfUG9zICAgICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJVENNQ1I6IFNaIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JVENNQ1JfU1pfTXNrICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9JVENNQ1JfU1pfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJVENNQ1I6IFNaIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSVRDTUNSX1JFVEVOX1BvcyAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSVRDTUNSOiBSRVRFTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSVRDTUNSX1JFVEVOX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lUQ01DUl9SRVRFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSVRDTUNSOiBSRVRFTiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lUQ01DUl9STVdfUG9zICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElUQ01DUjogUk1XIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JVENNQ1JfUk1XX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSVRDTUNSX1JNV19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJVENNQ1I6IFJNVyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lUQ01DUl9FTl9Qb3MgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElUQ01DUjogRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lUQ01DUl9FTl9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0lUQ01DUl9FTl9Qb3MqLykgICAgICAgICAgICAgICAgIC8qITwgU0NCIElUQ01DUjogRU4gTWFzayAqLworCisvKiBEYXRhIFRpZ2h0bHktQ291cGxlZCBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfRFRDTUNSX1NaX1BvcyAgICAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRFRDTUNSOiBTWiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfRFRDTUNSX1NaX01zayAgICAgICAgICAgICAgICAgICgweEZVTCA8PCBTQ0JfRFRDTUNSX1NaX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRFRDTUNSOiBTWiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RUQ01DUl9SRVRFTl9Qb3MgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERUQ01DUjogUkVURU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RUQ01DUl9SRVRFTl9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9EVENNQ1JfUkVURU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEVENNQ1I6IFJFVEVOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfRFRDTUNSX1JNV19Qb3MgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRFRDTUNSOiBSTVcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RUQ01DUl9STVdfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9EVENNQ1JfUk1XX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERUQ01DUjogUk1XIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfRFRDTUNSX0VOX1BvcyAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRFRDTUNSOiBFTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfRFRDTUNSX0VOX01zayAgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfRFRDTUNSX0VOX1BvcyovKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRFRDTUNSOiBFTiBNYXNrICovCisKKy8qIEFIQlAgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQUhCUENSX1NaX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUhCUENSOiBTWiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUhCUENSX1NaX01zayAgICAgICAgICAgICAgICAgICg3VUwgPDwgU0NCX0FIQlBDUl9TWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUhCUENSOiBTWiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FIQlBDUl9FTl9Qb3MgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFIQlBDUjogRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FIQlBDUl9FTl9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0FIQlBDUl9FTl9Qb3MqLykgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFIQlBDUjogRU4gTWFzayAqLworCisvKiBMMSBDYWNoZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DQUNSX0ZPUkNFV1RfUG9zICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQUNSOiBGT1JDRVdUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQUNSX0ZPUkNFV1RfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0FDUl9GT1JDRVdUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQUNSOiBGT1JDRVdUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0FDUl9FQ0NFTl9Qb3MgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0FDUjogRUNDRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NBQ1JfRUNDRU5fTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQUNSX0VDQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENBQ1I6IEVDQ0VOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0FDUl9TSVdUX1BvcyAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0FDUjogU0lXVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0FDUl9TSVdUX01zayAgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfQ0FDUl9TSVdUX1BvcyovKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0FDUjogU0lXVCBNYXNrICovCisKKy8qIEFIQlMgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQUhCU0NSX0lOSVRDT1VOVF9Qb3MgICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUhCU0NSOiBJTklUQ09VTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FIQlNDUl9JTklUQ09VTlRfTXNrICAgICAgICAgICAoMHgxRlVMIDw8IFNDQl9BSEJQQ1JfSU5JVENPVU5UX1BvcykgICAgICAgICAgIC8qITwgU0NCIEFIQlNDUjogSU5JVENPVU5UIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUhCU0NSX1RQUklfUG9zICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUhCU0NSOiBUUFJJIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSEJTQ1JfVFBSSV9Nc2sgICAgICAgICAgICAgICAgKDB4MUZGVUwgPDwgU0NCX0FIQlBDUl9UUFJJX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBBSEJTQ1I6IFRQUkkgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSEJTQ1JfQ1RMX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSEJTQ1I6IENUTCBQb3NpdGlvbiovCisjZGVmaW5lIFNDQl9BSEJTQ1JfQ1RMX01zayAgICAgICAgICAgICAgICAgKDNVTCAvKjw8IFNDQl9BSEJQQ1JfQ1RMX1BvcyovKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSEJTQ1I6IENUTCBNYXNrICovCisKKy8qIEF1eGlsaWFyeSBCdXMgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9BQkZTUl9BWElNVFlQRV9Qb3MgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBQkZTUjogQVhJTVRZUEUgUG9zaXRpb24qLworI2RlZmluZSBTQ0JfQUJGU1JfQVhJTVRZUEVfTXNrICAgICAgICAgICAgICgzVUwgPDwgU0NCX0FCRlNSX0FYSU1UWVBFX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUJGU1I6IEFYSU1UWVBFIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUJGU1JfRVBQQl9Qb3MgICAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUJGU1I6IEVQUEIgUG9zaXRpb24qLworI2RlZmluZSBTQ0JfQUJGU1JfRVBQQl9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0FCRlNSX0VQUEJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUJGU1I6IEVQUEIgTWFzayAqLworCisjZGVmaW5lIFNDQl9BQkZTUl9BWElNX1BvcyAgICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBQkZTUjogQVhJTSBQb3NpdGlvbiovCisjZGVmaW5lIFNDQl9BQkZTUl9BWElNX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUJGU1JfQVhJTV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBQkZTUjogQVhJTSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FCRlNSX0FIQlBfUG9zICAgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFCRlNSOiBBSEJQIFBvc2l0aW9uKi8KKyNkZWZpbmUgU0NCX0FCRlNSX0FIQlBfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9BQkZTUl9BSEJQX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFCRlNSOiBBSEJQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUJGU1JfRFRDTV9Qb3MgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUJGU1I6IERUQ00gUG9zaXRpb24qLworI2RlZmluZSBTQ0JfQUJGU1JfRFRDTV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0FCRlNSX0RUQ01fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUJGU1I6IERUQ00gTWFzayAqLworCisjZGVmaW5lIFNDQl9BQkZTUl9JVENNX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBQkZTUjogSVRDTSBQb3NpdGlvbiovCisjZGVmaW5lIFNDQl9BQkZTUl9JVENNX01zayAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IFNDQl9BQkZTUl9JVENNX1BvcyovKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBBQkZTUjogSVRDTSBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDQiAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NuU0NCIFN5c3RlbSBDb250cm9scyBub3QgaW4gU0NCIChTQ25TQ0IpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2wgYW5kIElEIFJlZ2lzdGVyIG5vdCBpbiB0aGUgU0NCCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgSUQgUmVnaXN0ZXIgbm90IGluIHRoZSBTQ0IuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07CisgIF9fSU0gIHVpbnQzMl90IElDVFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi8gKSAgSW50ZXJydXB0IENvbnRyb2xsZXIgVHlwZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBBQ1RMUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIEF1eGlsaWFyeSBDb250cm9sIFJlZ2lzdGVyICovCit9IFNDblNDQl9UeXBlOworCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBUeXBlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX1BvcyAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElDVFI6IElOVExJTkVTTlVNIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX01zayAgICAgICAgKDB4RlVMIC8qPDwgU0NuU0NCX0lDVFJfSU5UTElORVNOVU1fUG9zKi8pICAvKiE8IElDVFI6IElOVExJTkVTTlVNIE1hc2sgKi8KKworLyogQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0lUTUFUQkZMVVNIX1BvcyAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0lUTUFUQkZMVVNIIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNJVE1BVEJGTFVTSF9Nc2sgICAgKDFVTCA8PCBTQ25TQ0JfQUNUTFJfRElTSVRNQVRCRkxVU0hfUG9zKSAgICAvKiE8IEFDVExSOiBESVNJVE1BVEJGTFVTSCBNYXNrICovCisKKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU1JBTU9ERV9Qb3MgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU1JBTU9ERSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTUkFNT0RFX01zayAgICAgICAgICgxVUwgPDwgU0NuU0NCX0FDVExSX0RJU1JBTU9ERV9Qb3MpICAgICAgICAgLyohPCBBQ1RMUjogRElTUkFNT0RFIE1hc2sgKi8KKworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRlBFWENPRElTX1BvcyAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRlBFWENPRElTIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9GUEVYQ09ESVNfTXNrICAgICAgICAgKDFVTCA8PCBTQ25TQ0JfQUNUTFJfRlBFWENPRElTX1BvcykgICAgICAgICAvKiE8IEFDVExSOiBGUEVYQ09ESVMgTWFzayAqLworCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNGT0xEX1BvcyAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNGT0xEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNGT0xEX01zayAgICAgICAgICAgKDFVTCA8PCBTQ25TQ0JfQUNUTFJfRElTRk9MRF9Qb3MpICAgICAgICAgICAvKiE8IEFDVExSOiBESVNGT0xEIE1hc2sgKi8KKworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTTUNZQ0lOVF9Qb3MgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRElTTUNZQ0lOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTTUNZQ0lOVF9Nc2sgICAgICAgICgxVUwgLyo8PCBTQ25TQ0JfQUNUTFJfRElTTUNZQ0lOVF9Qb3MqLykgICAgLyohPCBBQ1RMUjogRElTTUNZQ0lOVCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDbm90U0NCICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TeXNUaWNrICAgICBTeXN0ZW0gVGljayBUaW1lciAoU3lzVGljaykKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gVGltZXIgUmVnaXN0ZXJzLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIFRpbWVyIChTeXNUaWNrKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBTeXNUaWNrIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBMT0FEOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIFN5c1RpY2sgUmVsb2FkIFZhbHVlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFZBTDsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgU3lzVGljayBDdXJyZW50IFZhbHVlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IENBTElCOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi8gKSAgU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciAqLworfSBTeXNUaWNrX1R5cGU7CisKKy8qIFN5c1RpY2sgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcyAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrICAgICAgICAgICAgKDFVTCAvKjw8IFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zKi8pICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIE1hc2sgKi8KKworLyogU3lzVGljayBSZWxvYWQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBMT0FEOiBSRUxPQUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19MT0FEX1JFTE9BRF9Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zKi8pICAgIC8qITwgU3lzVGljayBMT0FEOiBSRUxPQUQgTWFzayAqLworCisvKiBTeXNUaWNrIEN1cnJlbnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBWQUw6IENVUlJFTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19WQUxfQ1VSUkVOVF9Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zKi8pICAgIC8qITwgU3lzVGljayBWQUw6IENVUlJFTlQgTWFzayAqLworCisvKiBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfTXNrICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX05PUkVGX1BvcykgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfUG9zICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX1NLRVdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU3lzVGljayAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfSVRNICAgICBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIChJVE0pCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCAoSVRNKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCBSZWdpc3RlciAoSVRNKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19PTSAgdW5pb24KKyAgeworICAgIF9fT00gIHVpbnQ4X3QgICAgdTg7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IDgtYml0ICovCisgICAgX19PTSAgdWludDE2X3QgICB1MTY7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgMTYtYml0ICovCisgICAgX19PTSAgdWludDMyX3QgICB1MzI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgMzItYml0ICovCisgIH0gIFBPUlQgWzMyVV07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgUmVnaXN0ZXJzICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFs4NjRVXTsKKyAgX19JT00gdWludDMyX3QgVEVSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTAwIChSL1cpICBJVE0gVHJhY2UgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMVsxNVVdOworICBfX0lPTSB1aW50MzJfdCBUUFI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFNDAgKFIvVykgIElUTSBUcmFjZSBQcml2aWxlZ2UgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzE1VV07CisgIF9fSU9NIHVpbnQzMl90IFRDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEU4MCAoUi9XKSAgSVRNIFRyYWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzI5VV07CisgIF9fT00gIHVpbnQzMl90IElXUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGOCAoIC9XKSAgSVRNIEludGVncmF0aW9uIFdyaXRlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IElSUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGQyAoUi8gKSAgSVRNIEludGVncmF0aW9uIFJlYWQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgSU1DUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RjAwIChSL1cpICBJVE0gSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENFs0M1VdOworICBfX09NICB1aW50MzJfdCBMQVI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQjAgKCAvVykgIElUTSBMb2NrIEFjY2VzcyBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBMU1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQjQgKFIvICkgIElUTSBMb2NrIFN0YXR1cyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDVbNlVdOworICBfX0lNICB1aW50MzJfdCBQSUQ0OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRDAgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM0ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDU7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZENCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzUgKi8KKyAgX19JTSAgdWludDMyX3QgUElENjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkQ4IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNiAqLworICBfX0lNICB1aW50MzJfdCBQSUQ3OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGREMgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM3ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDA7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFMCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzAgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkU0IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMSAqLworICBfX0lNICB1aW50MzJfdCBQSUQyOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRTggKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMyICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDM7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFQyAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzMgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkYwIChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMCAqLworICBfX0lNICB1aW50MzJfdCBDSUQxOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRjQgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMxICovCisgIF9fSU0gIHVpbnQzMl90IENJRDI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGOCAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzIgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMzsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkZDIChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMyAqLworfSBJVE1fVHlwZTsKKworLyogSVRNIFRyYWNlIFByaXZpbGVnZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fVFBSX1BSSVZNQVNLX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVFBSOiBQUklWTUFTSyBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVFBSX1BSSVZNQVNLX01zayAgICAgICAgICAgICAgICgweEZVTCAvKjw8IElUTV9UUFJfUFJJVk1BU0tfUG9zKi8pICAgICAgICAgICAgLyohPCBJVE0gVFBSOiBQUklWTUFTSyBNYXNrICovCisKKy8qIElUTSBUcmFjZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9UQ1JfQlVTWV9Qb3MgICAgICAgICAgICAgICAgICAgMjNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEJVU1kgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9CVVNZX01zayAgICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQlVTWSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9UcmFjZUJ1c0lEX1BvcyAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQVRCSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9UcmFjZUJ1c0lEX01zayAgICAgICAgICAgICAoMHg3RlVMIDw8IElUTV9UQ1JfVHJhY2VCdXNJRF9Qb3MpICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQVRCSUQgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfR1RTRlJFUV9Qb3MgICAgICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEdsb2JhbCB0aW1lc3RhbXAgZnJlcXVlbmN5IFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfR1RTRlJFUV9Nc2sgICAgICAgICAgICAgICAgKDNVTCA8PCBJVE1fVENSX0dUU0ZSRVFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEdsb2JhbCB0aW1lc3RhbXAgZnJlcXVlbmN5IE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1RTUHJlc2NhbGVfUG9zICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU1ByZXNjYWxlIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfVFNQcmVzY2FsZV9Nc2sgICAgICAgICAgICAgKDNVTCA8PCBJVE1fVENSX1RTUHJlc2NhbGVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTUHJlc2NhbGUgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfU1dPRU5BX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNXT0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1NXT0VOQV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9TV09FTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTV09FTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfRFdURU5BX1BvcyAgICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IERXVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0RXVEVOQV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9EV1RFTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBEV1RFTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfU1lOQ0VOQV9Qb3MgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNZTkNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9TWU5DRU5BX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfU1lOQ0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1lOQ0VOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9UU0VOQV9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9UU0VOQV9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfVFNFTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNFTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfSVRNRU5BX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IElUTSBFbmFibGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfSVRNRU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9UQ1JfSVRNRU5BX1BvcyovKSAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IElUTSBFbmFibGUgYml0IE1hc2sgKi8KKworLyogSVRNIEludGVncmF0aW9uIFdyaXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9JV1JfQVRWQUxJRE1fUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBJV1I6IEFUVkFMSURNIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9JV1JfQVRWQUxJRE1fTXNrICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9JV1JfQVRWQUxJRE1fUG9zKi8pICAgICAgICAgICAgICAvKiE8IElUTSBJV1I6IEFUVkFMSURNIE1hc2sgKi8KKworLyogSVRNIEludGVncmF0aW9uIFJlYWQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0lSUl9BVFJFQURZTV9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIElSUjogQVRSRUFEWU0gUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0lSUl9BVFJFQURZTV9Nc2sgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0lSUl9BVFJFQURZTV9Qb3MqLykgICAgICAgICAgICAgIC8qITwgSVRNIElSUjogQVRSRUFEWU0gTWFzayAqLworCisvKiBJVE0gSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9JTUNSX0lOVEVHUkFUSU9OX1BvcyAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBJTUNSOiBJTlRFR1JBVElPTiBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fSU1DUl9JTlRFR1JBVElPTl9Nc2sgICAgICAgICAgICgxVUwgLyo8PCBJVE1fSU1DUl9JTlRFR1JBVElPTl9Qb3MqLykgICAgICAgICAgLyohPCBJVE0gSU1DUjogSU5URUdSQVRJT04gTWFzayAqLworCisvKiBJVE0gTG9jayBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0xTUl9CeXRlQWNjX1BvcyAgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQnl0ZUFjYyBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fTFNSX0J5dGVBY2NfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX0xTUl9CeXRlQWNjX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBCeXRlQWNjIE1hc2sgKi8KKworI2RlZmluZSBJVE1fTFNSX0FjY2Vzc19Qb3MgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBBY2Nlc3MgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0xTUl9BY2Nlc3NfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9MU1JfQWNjZXNzX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQWNjZXNzIE1hc2sgKi8KKworI2RlZmluZSBJVE1fTFNSX1ByZXNlbnRfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBQcmVzZW50IFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9MU1JfUHJlc2VudF9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9MU1JfUHJlc2VudF9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IFByZXNlbnQgTWFzayAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX0lUTSAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfRFdUICAgICBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIChEV1QpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSAoRFdUKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSBSZWdpc3RlciAoRFdUKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENZQ0NOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgQ3ljbGUgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1BJQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBDUEkgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRVhDQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBFeGNlcHRpb24gT3ZlcmhlYWQgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgU0xFRVBDTlQ7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBTbGVlcCBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBMU1VDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIExTVSBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBGT0xEQ05UOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIEZvbGRlZC1pbnN0cnVjdGlvbiBDb3VudCBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBQQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMUMgKFIvICkgIFByb2dyYW0gQ291bnRlciBTYW1wbGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ09NUDA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDIwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDAgKi8KKyAgX19JT00gdWludDMyX3QgTUFTSzA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDAgKi8KKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04wOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAwICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVAxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAxICovCisgIF9fSU9NIHVpbnQzMl90IE1BU0sxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzNCAoUi9XKSAgTWFzayBSZWdpc3RlciAxICovCisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMTsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzOCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMSAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QMjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMiAqLworICBfX0lPTSB1aW50MzJfdCBNQVNLMjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMiAqLworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjI7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzFVXTsKKyAgX19JT00gdWludDMyX3QgQ09NUDM7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDUwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDMgKi8KKyAgX19JT00gdWludDMyX3QgTUFTSzM7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDU0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDMgKi8KKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04zOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDU4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAzICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1s5ODFVXTsKKyAgX19PTSAgdWludDMyX3QgTEFSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkIwICggIFcpICBMb2NrIEFjY2VzcyBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBMU1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQjQgKFIgICkgIExvY2sgU3RhdHVzIFJlZ2lzdGVyICovCit9IERXVF9UeXBlOworCisvKiBEV1QgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfQ1RSTF9OVU1DT01QX1BvcyAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTlVNQ09NUCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OVU1DT01QX01zayAgICAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9OVU1DT01QX1BvcykgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTlVNQ09NUCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9UUkNQS1RfUG9zICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PVFJDUEtUIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05PVFJDUEtUX01zayAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PVFJDUEtUX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1RSQ1BLVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9FWFRUUklHX1BvcyAgICAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PRVhUVFJJRyBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT0VYVFRSSUdfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT0VYVFRSSUdfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9FWFRUUklHIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT0NZQ0NOVF9Qb3MgICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9DWUNDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9DWUNDTlRfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9DWUNDTlRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PQ1lDQ05UIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT1BSRkNOVF9Qb3MgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9QUkZDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9QUkZDTlRfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9QUkZDTlRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PUFJGQ05UIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DWUNFVlRFTkFfUG9zICAgICAgICAgICAgIDIyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NZQ0VWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NZQ0VWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0ZPTERFVlRFTkFfUG9zICAgICAgICAgICAgMjFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBGT0xERVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0ZPTERFVlRFTkFfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0ZPTERFVlRFTkFfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBGT0xERVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9MU1VFVlRFTkFfUG9zICAgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTFNVRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0xTVUVWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0xTVUVWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBMU1VFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1NMRUVQRVZURU5BX1BvcyAgICAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBTTEVFUEVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Nc2sgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Qb3MpICAgICAgICAgLyohPCBEV1QgQ1RSTDogU0xFRVBFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0VYQ0VWVEVOQV9Qb3MgICAgICAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfRVhDRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRVhDRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ0VWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1BJRVZURU5BX1BvcyAgICAgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENQSUVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DUElFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DUElFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1BJRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9FWENUUkNFTkFfUG9zICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDVFJDRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0VYQ1RSQ0VOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0VYQ1RSQ0VOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENUUkNFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1BDU0FNUExFTkFfUG9zICAgICAgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQQ1NBTVBMRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1BDU0FNUExFTkFfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX1BDU0FNUExFTkFfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQQ1NBTVBMRU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9TWU5DVEFQX1BvcyAgICAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogU1lOQ1RBUCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9TWU5DVEFQX01zayAgICAgICAgICAgICAgICgweDNVTCA8PCBEV1RfQ1RSTF9TWU5DVEFQX1BvcykgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogU1lOQ1RBUCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1lDVEFQX1BvcyAgICAgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ1RBUCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DWUNUQVBfTXNrICAgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DWUNUQVBfUG9zKSAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDVEFQIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9QT1NUSU5JVF9Qb3MgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVElOSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfUE9TVElOSVRfTXNrICAgICAgICAgICAgICAoMHhGVUwgPDwgRFdUX0NUUkxfUE9TVElOSVRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RJTklUIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9QT1NUUFJFU0VUX1BvcyAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVFBSRVNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9QT1NUUFJFU0VUX01zayAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9QT1NUUFJFU0VUX1BvcykgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVFBSRVNFVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1lDQ05URU5BX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0NOVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DWUNDTlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCAvKjw8IERXVF9DVFJMX0NZQ0NOVEVOQV9Qb3MqLykgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDQ05URU5BIE1hc2sgKi8KKworLyogRFdUIENQSSBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfQ1BJQ05UX0NQSUNOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1BJQ05UOiBDUElDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NQSUNOVF9DUElDTlRfTXNrICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0NQSUNOVF9DUElDTlRfUG9zKi8pICAgICAgIC8qITwgRFdUIENQSUNOVDogQ1BJQ05UIE1hc2sgKi8KKworLyogRFdUIEV4Y2VwdGlvbiBPdmVyaGVhZCBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfRVhDQ05UX0VYQ0NOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRVhDQ05UOiBFWENDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0VYQ0NOVF9FWENDTlRfTXNrICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0VYQ0NOVF9FWENDTlRfUG9zKi8pICAgICAgIC8qITwgRFdUIEVYQ0NOVDogRVhDQ05UIE1hc2sgKi8KKworLyogRFdUIFNsZWVwIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9TTEVFUENOVF9TTEVFUENOVF9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBTTEVFUENOVDogU0xFRVBDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX01zayAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX1BvcyovKSAgIC8qITwgRFdUIFNMRUVQQ05UOiBTTEVFUENOVCBNYXNrICovCisKKy8qIERXVCBMU1UgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0xTVUNOVF9MU1VDTlRfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIExTVUNOVDogTFNVQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9MU1VDTlRfTFNVQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9MU1VDTlRfTFNVQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBMU1VDTlQ6IExTVUNOVCBNYXNrICovCisKKy8qIERXVCBGb2xkZWQtaW5zdHJ1Y3Rpb24gQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0ZPTERDTlRfRk9MRENOVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZPTERDTlQ6IEZPTERDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZPTERDTlRfRk9MRENOVF9Nc2sgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0ZPTERDTlRfRk9MRENOVF9Qb3MqLykgICAgIC8qITwgRFdUIEZPTERDTlQ6IEZPTERDTlQgTWFzayAqLworCisvKiBEV1QgQ29tcGFyYXRvciBNYXNrIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9NQVNLX01BU0tfUG9zICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBNQVNLOiBNQVNLIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9NQVNLX01BU0tfTXNrICAgICAgICAgICAgICAgICAgKDB4MUZVTCAvKjw8IERXVF9NQVNLX01BU0tfUG9zKi8pICAgICAgICAgICAvKiE8IERXVCBNQVNLOiBNQVNLIE1hc2sgKi8KKworLyogRFdUIENvbXBhcmF0b3IgRnVuY3Rpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX01BVENIRURfUG9zICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBNQVRDSEVEIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9NQVRDSEVEX01zayAgICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9NQVRDSEVEX1BvcykgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTUFUQ0hFRCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjFfUG9zICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIxIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIxX01zayAgICAgICAgKDB4RlVMIDw8IERXVF9GVU5DVElPTl9EQVRBVkFERFIxX1BvcykgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjBfUG9zICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIwIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIwX01zayAgICAgICAgKDB4RlVMIDw8IERXVF9GVU5DVElPTl9EQVRBVkFERFIwX1BvcykgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Qb3MgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVlNJWkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Nc2sgICAgICAgICAoMHgzVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Qb3MpICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVlNJWkUgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9MTksxRU5BX1BvcyAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTE5LMUVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fTE5LMUVOQV9Nc2sgICAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fTE5LMUVOQV9Qb3MpICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IExOSzFFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVk1BVENIX1BvcyAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZNQVRDSCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZNQVRDSF9Nc2sgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZNQVRDSF9Qb3MpICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWTUFUQ0ggTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9DWUNNQVRDSF9Qb3MgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogQ1lDTUFUQ0ggUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX01zayAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX1BvcykgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBDWUNNQVRDSCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Qb3MgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBFTUlUUkFOR0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Nc2sgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Qb3MpICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBFTUlUUkFOR0UgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9GVU5DVElPTl9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogRlVOQ1RJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0ZVTkNUSU9OX01zayAgICAgICAgICAoMHhGVUwgLyo8PCBEV1RfRlVOQ1RJT05fRlVOQ1RJT05fUG9zKi8pICAgIC8qITwgRFdUIEZVTkNUSU9OOiBGVU5DVElPTiBNYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfRFdUICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19UUEkgICAgIFRyYWNlIFBvcnQgSW50ZXJmYWNlIChUUEkpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgVHJhY2UgUG9ydCBJbnRlcmZhY2UgKFRQSSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFRyYWNlIFBvcnQgSW50ZXJmYWNlIFJlZ2lzdGVyIChUUEkpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBTU1BTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIFN1cHBvcnRlZCBQYXJhbGxlbCBQb3J0IFNpemUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1NQU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBDdXJyZW50IFBhcmFsbGVsIFBvcnQgU2l6ZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMlVdOworICBfX0lPTSB1aW50MzJfdCBBQ1BSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIEFzeW5jaHJvbm91cyBDbG9jayBQcmVzY2FsZXIgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxWzU1VV07CisgIF9fSU9NIHVpbnQzMl90IFNQUFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDBGMCAoUi9XKSAgU2VsZWN0ZWQgUGluIFByb3RvY29sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlsxMzFVXTsKKyAgX19JTSAgdWludDMyX3QgRkZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzAwIChSLyApICBGb3JtYXR0ZXIgYW5kIEZsdXNoIFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBGRkNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDQgKFIvVykgIEZvcm1hdHRlciBhbmQgRmx1c2ggQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBGU0NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDggKFIvICkgIEZvcm1hdHRlciBTeW5jaHJvbml6YXRpb24gQ291bnRlciBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbNzU5VV07CisgIF9fSU0gIHVpbnQzMl90IFRSSUdHRVI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVFOCAoUi8gKSAgVFJJR0dFUiAqLworICBfX0lNICB1aW50MzJfdCBGSUZPMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRUMgKFIvICkgIEludGVncmF0aW9uIEVUTSBEYXRhICovCisgIF9fSU0gIHVpbnQzMl90IElUQVRCQ1RSMjsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGMCAoUi8gKSAgSVRBVEJDVFIyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENFsxVV07CisgIF9fSU0gIHVpbnQzMl90IElUQVRCQ1RSMDsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGOCAoUi8gKSAgSVRBVEJDVFIwICovCisgIF9fSU0gIHVpbnQzMl90IEZJRk8xOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGQyAoUi8gKSAgSW50ZWdyYXRpb24gSVRNIERhdGEgKi8KKyAgX19JT00gdWludDMyX3QgSVRDVFJMOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RjAwIChSL1cpICBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ1WzM5VV07CisgIF9fSU9NIHVpbnQzMl90IENMQUlNU0VUOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZBMCAoUi9XKSAgQ2xhaW0gdGFnIHNldCAqLworICBfX0lPTSB1aW50MzJfdCBDTEFJTUNMUjsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQTQgKFIvVykgIENsYWltIHRhZyBjbGVhciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDdbOFVdOworICBfX0lNICB1aW50MzJfdCBERVZJRDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQzggKFIvICkgIFRQSVVfREVWSUQgKi8KKyAgX19JTSAgdWludDMyX3QgREVWVFlQRTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkNDIChSLyApICBUUElVX0RFVlRZUEUgKi8KK30gVFBJX1R5cGU7CisKKy8qIFRQSSBBc3luY2hyb25vdXMgQ2xvY2sgUHJlc2NhbGVyIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9BQ1BSX1BSRVNDQUxFUl9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBBQ1BSOiBQUkVTQ0FMRVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0FDUFJfUFJFU0NBTEVSX01zayAgICAgICAgICAgICAoMHgxRkZGVUwgLyo8PCBUUElfQUNQUl9QUkVTQ0FMRVJfUG9zKi8pICAgIC8qITwgVFBJIEFDUFI6IFBSRVNDQUxFUiBNYXNrICovCisKKy8qIFRQSSBTZWxlY3RlZCBQaW4gUHJvdG9jb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX1NQUFJfVFhNT0RFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIFNQUFI6IFRYTU9ERSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfU1BQUl9UWE1PREVfTXNrICAgICAgICAgICAgICAgICgweDNVTCAvKjw8IFRQSV9TUFBSX1RYTU9ERV9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgU1BQUjogVFhNT0RFIE1hc2sgKi8KKworLyogVFBJIEZvcm1hdHRlciBhbmQgRmx1c2ggU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9GRlNSX0Z0Tm9uU3RvcF9Qb3MgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdE5vblN0b3AgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRnROb25TdG9wX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGU1JfRnROb25TdG9wX1BvcykgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0Tm9uU3RvcCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGU1JfVENQcmVzZW50X1BvcyAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IFRDUHJlc2VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9UQ1ByZXNlbnRfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZTUl9UQ1ByZXNlbnRfUG9zKSAgICAgICAgICAgLyohPCBUUEkgRkZTUjogVENQcmVzZW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZTUl9GdFN0b3BwZWRfUG9zICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnRTdG9wcGVkIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX0Z0U3RvcHBlZF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRlNSX0Z0U3RvcHBlZF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdFN0b3BwZWQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GRlNSX0ZsSW5Qcm9nX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGbEluUHJvZyBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9GbEluUHJvZ19Nc2sgICAgICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9GRlNSX0ZsSW5Qcm9nX1BvcyovKSAgICAgICAgLyohPCBUUEkgRkZTUjogRmxJblByb2cgTWFzayAqLworCisvKiBUUEkgRm9ybWF0dGVyIGFuZCBGbHVzaCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9GRkNSX1RyaWdJbl9Qb3MgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBUcmlnSW4gUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGQ1JfVHJpZ0luX01zayAgICAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGQ1JfVHJpZ0luX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IFRyaWdJbiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGQ1JfRW5GQ29udF9Qb3MgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IEVuRkNvbnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGQ1JfRW5GQ29udF9Nc2sgICAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGQ1JfRW5GQ29udF9Qb3MpICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IEVuRkNvbnQgTWFzayAqLworCisvKiBUUEkgVFJJR0dFUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfVFJJR0dFUl9UUklHR0VSX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgVFJJR0dFUjogVFJJR0dFUiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfVFJJR0dFUl9UUklHR0VSX01zayAgICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9UUklHR0VSX1RSSUdHRVJfUG9zKi8pICAgICAgLyohPCBUUEkgVFJJR0dFUjogVFJJR0dFUiBNYXNrICovCisKKy8qIFRQSSBJbnRlZ3JhdGlvbiBFVE0gRGF0YSBSZWdpc3RlciBEZWZpbml0aW9ucyAoRklGTzApICovCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX0FUVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fQVRWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9ieXRlY291bnRfUG9zICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9JVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX2J5dGVjb3VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9BVFZBTElEX1BvcyAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fQVRWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfRVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9BVFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9ieXRlY291bnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0VUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fYnl0ZWNvdW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNMl9Qb3MgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTIgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTJfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMF9FVE0yX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0yIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNMV9Qb3MgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTEgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTFfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMF9FVE0xX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0xIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNMF9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTAgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTBfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgVFBJX0ZJRk8wX0VUTTBfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0wIE1hc2sgKi8KKworLyogVFBJIElUQVRCQ1RSMiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfSVRBVEJDVFIyX0FUUkVBRFlfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRBVEJDVFIyOiBBVFJFQURZIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9JVEFUQkNUUjJfQVRSRUFEWV9Nc2sgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQVRCQ1RSMl9BVFJFQURZX1BvcyovKSAgICAvKiE8IFRQSSBJVEFUQkNUUjI6IEFUUkVBRFkgTWFzayAqLworCisvKiBUUEkgSW50ZWdyYXRpb24gSVRNIERhdGEgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKEZJRk8xKSAqLworI2RlZmluZSBUUElfRklGTzFfSVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9BVFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9JVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX0FUVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfSVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfSVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9ieXRlY291bnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX0FUVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0VUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fQVRWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfUG9zICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9FVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX2J5dGVjb3VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTJfUG9zICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0yIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0yX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBUUElfRklGTzFfSVRNMl9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTFfUG9zICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0xIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0xX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBUUElfRklGTzFfSVRNMV9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMSBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTBfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0wIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0wX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IFRQSV9GSUZPMV9JVE0wX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMCBNYXNrICovCisKKy8qIFRQSSBJVEFUQkNUUjAgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0lUQVRCQ1RSMF9BVFJFQURZX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIElUQVRCQ1RSMDogQVRSRUFEWSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfSVRBVEJDVFIwX0FUUkVBRFlfTXNrICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9JVEFUQkNUUjBfQVRSRUFEWV9Qb3MqLykgICAgLyohPCBUUEkgSVRBVEJDVFIwOiBBVFJFQURZIE1hc2sgKi8KKworLyogVFBJIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfSVRDVFJMX01vZGVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRDVFJMOiBNb2RlIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9JVENUUkxfTW9kZV9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQ1RSTF9Nb2RlX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBJVENUUkw6IE1vZGUgTWFzayAqLworCisvKiBUUEkgREVWSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0RFVklEX05SWlZBTElEX1BvcyAgICAgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBOUlpWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfTlJaVkFMSURfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfTlJaVkFMSURfUG9zKSAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE5SWlZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfTUFOQ1ZBTElEX1BvcyAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1BTkNWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfTUFOQ1ZBTElEX01zayAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfTUFOQ1ZBTElEX1BvcykgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1BTkNWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX1BUSU5WQUxJRF9Qb3MgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBQVElOVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX1BUSU5WQUxJRF9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX1BUSU5WQUxJRF9Qb3MpICAgICAgICAgIC8qITwgVFBJIERFVklEOiBQVElOVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9NaW5CdWZTel9Qb3MgICAgICAgICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTWluQnVmU3ogUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX01pbkJ1ZlN6X01zayAgICAgICAgICAgICAoMHg3VUwgPDwgVFBJX0RFVklEX01pbkJ1ZlN6X1BvcykgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNaW5CdWZTeiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX0FzeW5DbGtJbl9Qb3MgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBBc3luQ2xrSW4gUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX0FzeW5DbGtJbl9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX0FzeW5DbGtJbl9Qb3MpICAgICAgICAgIC8qITwgVFBJIERFVklEOiBBc3luQ2xrSW4gTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9OclRyYWNlSW5wdXRfUG9zICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTnJUcmFjZUlucHV0IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9OclRyYWNlSW5wdXRfTXNrICAgICAgICAgKDB4MUZVTCAvKjw8IFRQSV9ERVZJRF9OclRyYWNlSW5wdXRfUG9zKi8pICAvKiE8IFRQSSBERVZJRDogTnJUcmFjZUlucHV0IE1hc2sgKi8KKworLyogVFBJIERFVlRZUEUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0RFVlRZUEVfTWFqb3JUeXBlX1BvcyAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVlRZUEU6IE1ham9yVHlwZSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWVFlQRV9NYWpvclR5cGVfTXNrICAgICAgICAgICgweEZVTCA8PCBUUElfREVWVFlQRV9NYWpvclR5cGVfUG9zKSAgICAgICAgLyohPCBUUEkgREVWVFlQRTogTWFqb3JUeXBlIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWVFlQRV9TdWJUeXBlX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWVFlQRTogU3ViVHlwZSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWVFlQRV9TdWJUeXBlX01zayAgICAgICAgICAgICgweEZVTCAvKjw8IFRQSV9ERVZUWVBFX1N1YlR5cGVfUG9zKi8pICAgICAgLyohPCBUUEkgREVWVFlQRTogU3ViVHlwZSBNYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfVFBJICovCisKKworI2lmIChfX01QVV9QUkVTRU5UID09IDFVKQorLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19NUFUgICAgIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBUWVBFOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIE1QVSBUeXBlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgTVBVIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUk5SOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBNUFUgUmVnaW9uIFJOUmJlciBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkJBUl9BMTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBNUFUgQWxpYXMgMSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1JfQTE7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxOCAoUi9XKSAgTVBVIEFsaWFzIDEgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSX0EyOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMUMgKFIvVykgIE1QVSBBbGlhcyAyIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUl9BMjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDIwIChSL1cpICBNUFUgQWxpYXMgMiBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTM7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgTVBVIEFsaWFzIDMgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQVNSX0EzOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjggKFIvVykgIE1QVSBBbGlhcyAzIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KK30gTVBVX1R5cGU7CisKKy8qIE1QVSBUeXBlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fUG9zICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fTXNrICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfVFlQRV9JUkVHSU9OX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIE1hc2sgKi8KKworI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX1BvcyAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX01zayAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1RZUEVfRFJFR0lPTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1RZUEVfU0VQQVJBVEVfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IFNFUEFSQVRFIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX1NFUEFSQVRFX01zayAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9UWVBFX1NFUEFSQVRFX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBTRVBBUkFURSBNYXNrICovCisKKy8qIE1QVSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBQUklWREVGRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX1BSSVZERUZFTkFfTXNrICAgICAgICAgICAgKDFVTCA8PCBNUFVfQ1RSTF9QUklWREVGRU5BX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBQUklWREVGRU5BIE1hc2sgKi8KKworI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Qb3MgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfSEZOTUlFTkFfTXNrICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9DVFJMX0hGTk1JRU5BX1BvcykgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEhGTk1JRU5BIE1hc2sgKi8KKworI2RlZmluZSBNUFVfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX0VOQUJMRV9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9DVFJMX0VOQUJMRV9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBFTkFCTEUgTWFzayAqLworCisvKiBNUFUgUmVnaW9uIE51bWJlciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUk5SX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUk5SOiBSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JOUl9SRUdJT05fTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgTVBVX1JOUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJOUjogUkVHSU9OIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Qb3MgICAgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Nc2sgICAgICAgICAgICAgICAgICAoMHg3RkZGRkZGVUwgPDwgTVBVX1JCQVJfQUREUl9Qb3MpICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQkFSX1ZBTElEX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9WQUxJRF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JCQVJfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogVkFMSUQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQkFSX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfUkVHSU9OX01zayAgICAgICAgICAgICAgICAoMHhGVUwgLyo8PCBNUFVfUkJBUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFJFR0lPTiBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9SQVNSX0FUVFJTX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBmaWVsZCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9BVFRSU19Nc2sgICAgICAgICAgICAgICAgICgweEZGRkZVTCA8PCBNUFVfUkFTUl9BVFRSU19Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgZmllbGQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1hOX1BvcyAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5YTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9YTl9Nc2sgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfWE5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuWE4gTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0FQX1BvcyAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5BUCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9BUF9Nc2sgICAgICAgICAgICAgICAgICAgICgweDdVTCA8PCBNUFVfUkFTUl9BUF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQVAgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1RFWF9Qb3MgICAgICAgICAgICAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5URVggUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfVEVYX01zayAgICAgICAgICAgICAgICAgICAoMHg3VUwgPDwgTVBVX1JBU1JfVEVYX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlRFWCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU19Qb3MgICAgICAgICAgICAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlMgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX1NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlMgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5DIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5DIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9CX1BvcyAgICAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9CX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU1JEX1BvcyAgICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFN1Yi1SZWdpb24gRGlzYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TUkRfTXNrICAgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1JBU1JfU1JEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogU3ViLVJlZ2lvbiBEaXNhYmxlIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TSVpFX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIFNpemUgRmllbGQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU0laRV9Nc2sgICAgICAgICAgICAgICAgICAoMHgxRlVMIDw8IE1QVV9SQVNSX1NJWkVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBTaXplIEZpZWxkIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIGVuYWJsZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX1JBU1JfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBlbmFibGUgYml0IERpc2FibGUgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19NUFUgKi8KKyNlbmRpZgorCisKKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfRlBVICAgICBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgRmxvYXRpbmcgUG9pbnQgVW5pdCAoRlBVKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgRmxvYXRpbmcgUG9pbnQgVW5pdCAoRlBVKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzFVXTsKKyAgX19JT00gdWludDMyX3QgRlBDQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBGbG9hdGluZy1Qb2ludCBDb250ZXh0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRlBDQVI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBGbG9hdGluZy1Qb2ludCBDb250ZXh0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRlBEU0NSOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBGbG9hdGluZy1Qb2ludCBEZWZhdWx0IFN0YXR1cyBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IE1WRlIwOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi8gKSAgTWVkaWEgYW5kIEZQIEZlYXR1cmUgUmVnaXN0ZXIgMCAqLworICBfX0lNICB1aW50MzJfdCBNVkZSMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvICkgIE1lZGlhIGFuZCBGUCBGZWF0dXJlIFJlZ2lzdGVyIDEgKi8KKyAgX19JTSAgdWludDMyX3QgTVZGUjI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSLyApICBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAyICovCit9IEZQVV9UeXBlOworCisvKiBGbG9hdGluZy1Qb2ludCBDb250ZXh0IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0FTUEVOX1BvcyAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEFTUEVOIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfQVNQRU5fTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX0FTUEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogQVNQRU4gYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfTFNQRU5fUG9zICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTFNQRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0xTUEVOX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9MU1BFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IExTUEVOIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX01PTlJEWV9Qb3MgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IE1PTlJEWSBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfTU9OUkRZX01zayAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX01PTlJEWV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTU9OUkRZIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX0JGUkRZX1BvcyAgICAgICAgICAgICAgICAgNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEJGUkRZIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9CRlJEWV9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfQkZSRFlfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBCRlJEWSBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9NTVJEWV9Qb3MgICAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBNTVJEWSBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfTU1SRFlfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX01NUkRZX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTU1SRFkgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfSEZSRFlfUG9zICAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogSEZSRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0hGUkRZX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9IRlJEWV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEhGUkRZIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX1RIUkVBRF9Qb3MgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IHByb2Nlc3NvciBtb2RlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfVEhSRUFEX01zayAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX1RIUkVBRF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogcHJvY2Vzc29yIG1vZGUgYWN0aXZlIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX1VTRVJfUG9zICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IHByaXZpbGVnZSBsZXZlbCBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX1VTRVJfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9VU0VSX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IHByaXZpbGVnZSBsZXZlbCBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9MU1BBQ1RfUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMYXp5IHN0YXRlIHByZXNlcnZhdGlvbiBhY3RpdmUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9MU1BBQ1RfTXNrICAgICAgICAgICAgICAgKDFVTCAvKjw8IEZQVV9GUENDUl9MU1BBQ1RfUG9zKi8pICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMYXp5IHN0YXRlIHByZXNlcnZhdGlvbiBhY3RpdmUgYml0IE1hc2sgKi8KKworLyogRmxvYXRpbmctUG9pbnQgQ29udGV4dCBBZGRyZXNzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEZQVV9GUENBUl9BRERSRVNTX1BvcyAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0FSOiBBRERSRVNTIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQVJfQUREUkVTU19Nc2sgICAgICAgICAgICAgICgweDFGRkZGRkZGVUwgPDwgRlBVX0ZQQ0FSX0FERFJFU1NfUG9zKSAgICAgICAgLyohPCBGUENBUjogQUREUkVTUyBiaXQgTWFzayAqLworCisvKiBGbG9hdGluZy1Qb2ludCBEZWZhdWx0IFN0YXR1cyBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEZQVV9GUERTQ1JfQUhQX1BvcyAgICAgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogQUhQIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBEU0NSX0FIUF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQRFNDUl9BSFBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEFIUCBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUERTQ1JfRE5fUG9zICAgICAgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogRE4gYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUERTQ1JfRE5fTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBEU0NSX0ROX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogRE4gYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBEU0NSX0ZaX1BvcyAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEZaIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBEU0NSX0ZaX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQRFNDUl9GWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEZaIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQRFNDUl9STW9kZV9Qb3MgICAgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBSTW9kZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQRFNDUl9STW9kZV9Nc2sgICAgICAgICAgICAgICAoM1VMIDw8IEZQVV9GUERTQ1JfUk1vZGVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBSTW9kZSBiaXQgTWFzayAqLworCisvKiBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAwIERlZmluaXRpb25zICovCisjZGVmaW5lIEZQVV9NVkZSMF9GUF9yb3VuZGluZ19tb2Rlc19Qb3MgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBGUCByb3VuZGluZyBtb2RlcyBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9GUF9yb3VuZGluZ19tb2Rlc19Nc2sgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9GUF9yb3VuZGluZ19tb2Rlc19Qb3MpICAgICAvKiE8IE1WRlIwOiBGUCByb3VuZGluZyBtb2RlcyBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfU2hvcnRfdmVjdG9yc19Qb3MgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogU2hvcnQgdmVjdG9ycyBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9TaG9ydF92ZWN0b3JzX01zayAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9TaG9ydF92ZWN0b3JzX1BvcykgICAgICAgICAvKiE8IE1WRlIwOiBTaG9ydCB2ZWN0b3JzIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMF9TcXVhcmVfcm9vdF9Qb3MgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBTcXVhcmUgcm9vdCBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9TcXVhcmVfcm9vdF9Nc2sgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9TcXVhcmVfcm9vdF9Qb3MpICAgICAgICAgICAvKiE8IE1WRlIwOiBTcXVhcmUgcm9vdCBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfRGl2aWRlX1BvcyAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRGl2aWRlIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX0RpdmlkZV9Nc2sgICAgICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0RpdmlkZV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IERpdmlkZSBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfRlBfZXhjZXBfdHJhcHBpbmdfUG9zICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRlAgZXhjZXB0aW9uIHRyYXBwaW5nIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX0ZQX2V4Y2VwX3RyYXBwaW5nX01zayAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0ZQX2V4Y2VwX3RyYXBwaW5nX1BvcykgICAgIC8qITwgTVZGUjA6IEZQIGV4Y2VwdGlvbiB0cmFwcGluZyBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfRG91YmxlX3ByZWNpc2lvbl9Qb3MgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRG91YmxlLXByZWNpc2lvbiBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9Eb3VibGVfcHJlY2lzaW9uX01zayAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9Eb3VibGVfcHJlY2lzaW9uX1BvcykgICAgICAvKiE8IE1WRlIwOiBEb3VibGUtcHJlY2lzaW9uIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMF9TaW5nbGVfcHJlY2lzaW9uX1BvcyAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBTaW5nbGUtcHJlY2lzaW9uIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX1NpbmdsZV9wcmVjaXNpb25fTXNrICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX1NpbmdsZV9wcmVjaXNpb25fUG9zKSAgICAgIC8qITwgTVZGUjA6IFNpbmdsZS1wcmVjaXNpb24gYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIwX0FfU0lNRF9yZWdpc3RlcnNfUG9zICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IEFfU0lNRCByZWdpc3RlcnMgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjBfQV9TSU1EX3JlZ2lzdGVyc19Nc2sgICAgICgweEZVTCAvKjw8IEZQVV9NVkZSMF9BX1NJTURfcmVnaXN0ZXJzX1BvcyovKSAgLyohPCBNVkZSMDogQV9TSU1EIHJlZ2lzdGVycyBiaXRzIE1hc2sgKi8KKworLyogTWVkaWEgYW5kIEZQIEZlYXR1cmUgUmVnaXN0ZXIgMSBEZWZpbml0aW9ucyAqLworI2RlZmluZSBGUFVfTVZGUjFfRlBfZnVzZWRfTUFDX1BvcyAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRlAgZnVzZWQgTUFDIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIxX0ZQX2Z1c2VkX01BQ19Nc2sgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIxX0ZQX2Z1c2VkX01BQ19Qb3MpICAgICAgICAgIC8qITwgTVZGUjE6IEZQIGZ1c2VkIE1BQyBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjFfRlBfSFBGUF9Qb3MgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRlAgSFBGUCBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMV9GUF9IUEZQX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMV9GUF9IUEZQX1BvcykgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBGUCBIUEZQIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMV9EX05hTl9tb2RlX1BvcyAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBEX05hTiBtb2RlIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIxX0RfTmFOX21vZGVfTXNrICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIxX0RfTmFOX21vZGVfUG9zKSAgICAgICAgICAgIC8qITwgTVZGUjE6IERfTmFOIG1vZGUgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIxX0Z0Wl9tb2RlX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IEZ0WiBtb2RlIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIxX0Z0Wl9tb2RlX01zayAgICAgICAgICAgICAoMHhGVUwgLyo8PCBGUFVfTVZGUjFfRnRaX21vZGVfUG9zKi8pICAgICAgICAgIC8qITwgTVZGUjE6IEZ0WiBtb2RlIGJpdHMgTWFzayAqLworCisvKiBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAyIERlZmluaXRpb25zICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0ZQVSAqLworI2VuZGlmCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19Db3JlRGVidWcgICAgICAgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMgKENvcmVEZWJ1ZykKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBDb3JlIERlYnVnIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgQ29yZSBEZWJ1ZyBSZWdpc3RlciAoQ29yZURlYnVnKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgREhDU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBEZWJ1ZyBIYWx0aW5nIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworICBfX09NICB1aW50MzJfdCBEQ1JTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKCAvVykgIERlYnVnIENvcmUgUmVnaXN0ZXIgU2VsZWN0b3IgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRENSRFI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIERhdGEgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgREVNQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBEZWJ1ZyBFeGNlcHRpb24gYW5kIE1vbml0b3IgQ29udHJvbCBSZWdpc3RlciAqLworfSBDb3JlRGVidWdfVHlwZTsKKworLyogRGVidWcgSGFsdGluZyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0RCR0tFWV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBEQkdLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0RCR0tFWV9Nc2sgICAgICAgICAoMHhGRkZGVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0RCR0tFWV9Qb3MpICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBEQkdLRVkgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFU0VUX1NUX1BvcyAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRVNFVF9TVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfUkVTRVRfU1RfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVTRVRfU1QgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFVElSRV9TVF9Qb3MgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRVRJUkVfU1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVUSVJFX1NUX01zayAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1JFVElSRV9TVF9Qb3MpICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFVElSRV9TVCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfTE9DS1VQX1BvcyAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0xPQ0tVUCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19MT0NLVVBfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfTE9DS1VQX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfTE9DS1VQIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19TTEVFUF9Qb3MgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfU0xFRVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfTXNrICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1NMRUVQX1BvcykgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1NMRUVQIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19IQUxUX1BvcyAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfSEFMVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19IQUxUX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfSEFMVCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVHUkRZX1BvcyAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFR1JEWSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRUdSRFlfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfUkVHUkRZX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVHUkRZIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TTkFQU1RBTExfUG9zICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU05BUFNUQUxMIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Nc2sgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19TTkFQU1RBTExfUG9zKSAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TTkFQU1RBTEwgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX01BU0tJTlRTX1BvcyAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19NQVNLSU5UUyBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfTUFTS0lOVFNfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfTUFTS0lOVFMgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NURVBfUG9zICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TVEVQIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NURVBfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19TVEVQX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TVEVQIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19IQUxUX1BvcyAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfSEFMVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19IQUxUX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfSEFMVF9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfSEFMVCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfREVCVUdFTl9Qb3MgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0RFQlVHRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfREVCVUdFTl9Nc2sgICAgICAoMVVMIC8qPDwgQ29yZURlYnVnX0RIQ1NSX0NfREVCVUdFTl9Qb3MqLykgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0RFQlVHRU4gTWFzayAqLworCisvKiBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIFNlbGVjdG9yIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdXblJfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHV25SIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdXblJfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfRENSU1JfUkVHV25SX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHV25SIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHU0VMX1BvcyAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1NFTCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHU0VMX01zayAgICAgICAgICgweDFGVUwgLyo8PCBDb3JlRGVidWdfRENSU1JfUkVHU0VMX1BvcyovKSAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1NFTCBNYXNrICovCisKKy8qIERlYnVnIEV4Y2VwdGlvbiBhbmQgTW9uaXRvciBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfUG9zICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVFJDRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVFJDRU5BIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Qb3MgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9SRVEgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9SRVFfTXNrICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9NT05fUkVRX1BvcykgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fUkVRIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1NURVBfUG9zICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9TVEVQIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fU1RFUF9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX1NURVBfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1NURVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUEVORF9Qb3MgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1BFTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9QRU5EX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9NT05fUEVORF9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fUEVORCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9FTl9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9FTl9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9NT05fRU5fUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fRU4gTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX1BvcyAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSEFSREVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSEFSREVSUl9Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0hBUkRFUlJfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0hBUkRFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19JTlRFUlJfUG9zICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSU5URVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19JTlRFUlJfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfSU5URVJSX1BvcykgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSU5URVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQlVTRVJSX1BvcyAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0JVU0VSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQlVTRVJSX01zayAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0JVU0VSUl9Qb3MpICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0JVU0VSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfUG9zICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19TVEFURVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19TVEFURVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfU1RBVEVSUl9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfU1RBVEVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0NIS0VSUl9Qb3MgICAgICAgNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19DSEtFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0NIS0VSUl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19DSEtFUlJfUG9zKSAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19DSEtFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX1BvcyAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTk9DUEVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTk9DUEVSUl9Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX05PQ1BFUlJfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX05PQ1BFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19NTUVSUl9Qb3MgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTU1FUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX01NRVJSX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19NTUVSUl9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19NTUVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0NPUkVSRVNFVF9Qb3MgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19DT1JFUkVTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0NPUkVSRVNFVF9Nc2sgICAoMVVMIC8qPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0NPUkVSRVNFVF9Qb3MqLykgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19DT1JFUkVTRVQgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19Db3JlRGVidWcgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2JpdGZpZWxkICAgICBDb3JlIHJlZ2lzdGVyIGJpdCBmaWVsZCBtYWNyb3MKKyAgXGJyaWVmICAgICAgTWFjcm9zIGZvciB1c2Ugd2l0aCBiaXQgZmllbGQgZGVmaW5pdGlvbnMgKHh4eF9Qb3MsIHh4eF9Nc2spLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBNYXNrIGFuZCBzaGlmdCBhIGJpdCBmaWVsZCB2YWx1ZSBmb3IgdXNlIGluIGEgcmVnaXN0ZXIgYml0IHJhbmdlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHRoZSBiaXQgZmllbGQuCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9WQUwyRkxEKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSA8PCBmaWVsZCAjIyBfUG9zKSAmIGZpZWxkICMjIF9Nc2spCisKKy8qKgorICBcYnJpZWYgICAgIE1hc2sgYW5kIHNoaWZ0IGEgcmVnaXN0ZXIgdmFsdWUgdG8gZXh0cmFjdCBhIGJpdCBmaWxlZCB2YWx1ZS4KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiByZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIGJpdCBmaWVsZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9GTEQyVkFMKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSAmIGZpZWxkICMjIF9Nc2spID4+IGZpZWxkICMjIF9Qb3MpCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX2NvcmVfYml0ZmllbGQgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2Jhc2UgICAgIENvcmUgRGVmaW5pdGlvbnMKKyAgXGJyaWVmICAgICAgRGVmaW5pdGlvbnMgZm9yIGJhc2UgYWRkcmVzc2VzLCB1bmlvbnMsIGFuZCBzdHJ1Y3R1cmVzLgorICBAeworICovCisKKy8qIE1lbW9yeSBtYXBwaW5nIG9mIENvcnRleC1NNCBIYXJkd2FyZSAqLworI2RlZmluZSBTQ1NfQkFTRSAgICAgICAgICAgICgweEUwMDBFMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgU3BhY2UgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIElUTV9CQVNFICAgICAgICAgICAgKDB4RTAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIERXVF9CQVNFICAgICAgICAgICAgKDB4RTAwMDEwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFRQSV9CQVNFICAgICAgICAgICAgKDB4RTAwNDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIENvcmVEZWJ1Z19CQVNFICAgICAgKDB4RTAwMEVERjBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlIERlYnVnIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBTeXNUaWNrX0JBU0UgICAgICAgIChTQ1NfQkFTRSArICAweDAwMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgTlZJQ19CQVNFICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMTAwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IE5WSUMgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFNDQl9CQVNFICAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEQwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBCbG9jayBCYXNlIEFkZHJlc3MgKi8KKworI2RlZmluZSBTQ25TQ0IgICAgICAgICAgICAgICgoU0NuU0NCX1R5cGUgICAgKikgICAgIFNDU19CQVNFICAgICAgKSAgIC8qITwgU3lzdGVtIGNvbnRyb2wgUmVnaXN0ZXIgbm90IGluIFNDQiAqLworI2RlZmluZSBTQ0IgICAgICAgICAgICAgICAgICgoU0NCX1R5cGUgICAgICAgKikgICAgIFNDQl9CQVNFICAgICAgKSAgIC8qITwgU0NCIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIFN5c1RpY2sgICAgICAgICAgICAgKChTeXNUaWNrX1R5cGUgICAqKSAgICAgU3lzVGlja19CQVNFICApICAgLyohPCBTeXNUaWNrIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIE5WSUMgICAgICAgICAgICAgICAgKChOVklDX1R5cGUgICAgICAqKSAgICAgTlZJQ19CQVNFICAgICApICAgLyohPCBOVklDIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIElUTSAgICAgICAgICAgICAgICAgKChJVE1fVHlwZSAgICAgICAqKSAgICAgSVRNX0JBU0UgICAgICApICAgLyohPCBJVE0gY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgRFdUICAgICAgICAgICAgICAgICAoKERXVF9UeXBlICAgICAgICopICAgICBEV1RfQkFTRSAgICAgICkgICAvKiE8IERXVCBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBUUEkgICAgICAgICAgICAgICAgICgoVFBJX1R5cGUgICAgICAgKikgICAgIFRQSV9CQVNFICAgICAgKSAgIC8qITwgVFBJIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIENvcmVEZWJ1ZyAgICAgICAgICAgKChDb3JlRGVidWdfVHlwZSAqKSAgICAgQ29yZURlYnVnX0JBU0UpICAgLyohPCBDb3JlIERlYnVnIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisKKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxVSkKKyAgI2RlZmluZSBNUFVfQkFTRSAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDkwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKi8KKyAgI2RlZmluZSBNUFUgICAgICAgICAgICAgICAoKE1QVV9UeXBlICAgICAgICopICAgICBNUFVfQkFTRSAgICAgICkgICAvKiE8IE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKi8KKyNlbmRpZgorCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICNkZWZpbmUgRlBVX0JBU0UgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEYzMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBGbG9hdGluZyBQb2ludCBVbml0ICovCisgICNkZWZpbmUgRlBVICAgICAgICAgICAgICAgKChGUFVfVHlwZSAgICAgICAqKSAgICAgRlBVX0JBU0UgICAgICApICAgLyohPCBGbG9hdGluZyBQb2ludCBVbml0ICovCisjZW5kaWYKKworLypAfSAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyCisgIENvcmUgRnVuY3Rpb24gSW50ZXJmYWNlIGNvbnRhaW5zOgorICAtIENvcmUgTlZJQyBGdW5jdGlvbnMKKyAgLSBDb3JlIFN5c1RpY2sgRnVuY3Rpb25zCisgIC0gQ29yZSBEZWJ1ZyBGdW5jdGlvbnMKKyAgLSBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UgRnVuY3Rpb25zIGFuZCBJbnN0cnVjdGlvbnMgUmVmZXJlbmNlCisqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICBOVklDIGZ1bmN0aW9ucyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyBOVklDIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgbWFuYWdlIGludGVycnVwdHMgYW5kIGV4Y2VwdGlvbnMgdmlhIHRoZSBOVklDLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgR3JvdXBpbmcKKyAgXGRldGFpbHMgU2V0cyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgdXNpbmcgdGhlIHJlcXVpcmVkIHVubG9jayBzZXF1ZW5jZS4KKyAgICAgICAgICAgVGhlIHBhcmFtZXRlciBQcmlvcml0eUdyb3VwIGlzIGFzc2lnbmVkIHRvIHRoZSBmaWVsZCBTQ0ItPkFJUkNSIFsxMDo4XSBQUklHUk9VUCBmaWVsZC4KKyAgICAgICAgICAgT25seSB2YWx1ZXMgZnJvbSAwLi43IGFyZSB1c2VkLgorICAgICAgICAgICBJbiBjYXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBhbmQgYXZhaWxhYmxlCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpLCB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0LgorICBccGFyYW0gW2luXSAgICAgIFByaW9yaXR5R3JvdXAgIFByaW9yaXR5IGdyb3VwaW5nIGZpZWxkLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5R3JvdXBpbmcodWludDMyX3QgUHJpb3JpdHlHcm91cCkKK3sKKyAgdWludDMyX3QgcmVnX3ZhbHVlOworICB1aW50MzJfdCBQcmlvcml0eUdyb3VwVG1wID0gKFByaW9yaXR5R3JvdXAgJiAodWludDMyX3QpMHgwN1VMKTsgICAgICAgICAgICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLworCisgIHJlZ192YWx1ZSAgPSAgU0NCLT5BSVJDUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkIG9sZCByZWdpc3RlciBjb25maWd1cmF0aW9uICAgICovCisgIHJlZ192YWx1ZSAmPSB+KCh1aW50MzJfdCkoU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrIHwgU0NCX0FJUkNSX1BSSUdST1VQX01zaykpOyAvKiBjbGVhciBiaXRzIHRvIGNoYW5nZSAgICAgICAgICAgICAgICovCisgIHJlZ192YWx1ZSAgPSAgKHJlZ192YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpIHwKKyAgICAgICAgICAgICAgICAoUHJpb3JpdHlHcm91cFRtcCA8PCA4VSkgICAgICAgICAgICAgICAgICAgICAgKTsgICAgICAgICAgICAgIC8qIEluc2VydCB3cml0ZSBrZXkgYW5kIHByaW9ydHkgZ3JvdXAgKi8KKyAgU0NCLT5BSVJDUiA9ICByZWdfdmFsdWU7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQcmlvcml0eSBHcm91cGluZworICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgZnJvbSB0aGUgTlZJQyBJbnRlcnJ1cHQgQ29udHJvbGxlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgICBQcmlvcml0eSBncm91cGluZyBmaWVsZCAoU0NCLT5BSVJDUiBbMTA6OF0gUFJJR1JPVVAgZmllbGQpLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQcmlvcml0eUdyb3VwaW5nKHZvaWQpCit7CisgIHJldHVybiAoKHVpbnQzMl90KSgoU0NCLT5BSVJDUiAmIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2spID4+IFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBFbmFibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRW5hYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JU0VSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgRGlzYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19EaXNhYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JQ0VSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwZW5kaW5nIHJlZ2lzdGVyIGluIHRoZSBOVklDIGFuZCByZXR1cm5zIHRoZSBwZW5kaW5nIGJpdCBmb3IgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICAwICBJbnRlcnJ1cHQgc3RhdHVzIGlzIG5vdCBwZW5kaW5nLgorICBccmV0dXJuICAgICAgICAgICAgIDEgIEludGVycnVwdCBzdGF0dXMgaXMgcGVuZGluZy4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JU1BSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldICYgKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBTZXRzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBDbGVhciBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBDbGVhcnMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JQ1BSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEFjdGl2ZSBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgUmVhZHMgdGhlIGFjdGl2ZSByZWdpc3RlciBpbiBOVklDIGFuZCByZXR1cm5zIHRoZSBhY3RpdmUgYml0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgMCAgSW50ZXJydXB0IHN0YXR1cyBpcyBub3QgYWN0aXZlLgorICBccmV0dXJuICAgICAgICAgICAgIDEgIEludGVycnVwdCBzdGF0dXMgaXMgYWN0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRBY3RpdmUoSVJRbl9UeXBlIElSUW4pCit7CisgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SUFCUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgXG5vdGUgICAgVGhlIHByaW9yaXR5IGNhbm5vdCBiZSBzZXQgZm9yIGV2ZXJ5IGNvcmUgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxwYXJhbSBbaW5dICBwcmlvcml0eSAgUHJpb3JpdHkgdG8gc2V0LgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuLCB1aW50MzJfdCBwcmlvcml0eSkKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICBTQ0ItPlNIUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweEZVTCktNFVMXSA9ICh1aW50OF90KSgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYgKHVpbnQzMl90KTB4RkZVTCk7CisgIH0KKyAgZWxzZQorICB7CisgICAgTlZJQy0+SVBbKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKV0gICAgICAgICAgICAgICAgPSAodWludDhfdCkoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBJbnRlcnJ1cHQgUHJpb3JpdHkKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgICAgICAgICAgVGhlIGludGVycnVwdCBudW1iZXIgY2FuIGJlIHBvc2l0aXZlIHRvIHNwZWNpZnkgYW4gZXh0ZXJuYWwgKGRldmljZSBzcGVjaWZpYykgaW50ZXJydXB0LAorICAgICAgICAgICBvciBuZWdhdGl2ZSB0byBzcGVjaWZ5IGFuIGludGVybmFsIChjb3JlKSBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICBJbnRlcnJ1cHQgUHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgaXMgYWxpZ25lZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBpbXBsZW1lbnRlZCBwcmlvcml0eSBiaXRzIG9mIHRoZSBtaWNyb2NvbnRyb2xsZXIuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuKQoreworCisgIGlmICgoaW50MzJfdCkoSVJRbikgPCAwKQorICB7CisgICAgcmV0dXJuKCgodWludDMyX3QpU0NCLT5TSFBSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHhGVUwpLTRVTF0gPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4oKCh1aW50MzJfdClOVklDLT5JUFsoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pXSAgICAgICAgICAgICAgICA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIEVuY29kZSBQcmlvcml0eQorICBcZGV0YWlscyBFbmNvZGVzIHRoZSBwcmlvcml0eSBmb3IgYW4gaW50ZXJydXB0IHdpdGggdGhlIGdpdmVuIHByaW9yaXR5IGdyb3VwLAorICAgICAgICAgICBwcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlLCBhbmQgc3VicHJpb3JpdHkgdmFsdWUuCisgICAgICAgICAgIEluIGNhc2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHByaW9yaXR5IGdyb3VwaW5nIGFuZCBhdmFpbGFibGUKKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUyksIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuCisgIFxwYXJhbSBbaW5dICAgICBQcmlvcml0eUdyb3VwICBVc2VkIHByaW9yaXR5IGdyb3VwLgorICBccGFyYW0gW2luXSAgIFByZWVtcHRQcmlvcml0eSAgUHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4KKyAgXHBhcmFtIFtpbl0gICAgICAgU3ViUHJpb3JpdHkgIFN1YnByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICBccmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAgRW5jb2RlZCBwcmlvcml0eS4gVmFsdWUgY2FuIGJlIHVzZWQgaW4gdGhlIGZ1bmN0aW9uIFxyZWYgTlZJQ19TZXRQcmlvcml0eSgpLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19FbmNvZGVQcmlvcml0eSAodWludDMyX3QgUHJpb3JpdHlHcm91cCwgdWludDMyX3QgUHJlZW1wdFByaW9yaXR5LCB1aW50MzJfdCBTdWJQcmlvcml0eSkKK3sKKyAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLworICB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHlCaXRzOworICB1aW50MzJfdCBTdWJQcmlvcml0eUJpdHM7CisKKyAgUHJlZW1wdFByaW9yaXR5Qml0cyA9ICgoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCkgPiAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA/ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykgOiAodWludDMyX3QpKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApOworICBTdWJQcmlvcml0eUJpdHMgICAgID0gKChQcmlvcml0eUdyb3VwVG1wICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPCAodWludDMyX3QpN1VMKSA/ICh1aW50MzJfdCkwVUwgOiAodWludDMyX3QpKChQcmlvcml0eUdyb3VwVG1wIC0gN1VMKSArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpOworCisgIHJldHVybiAoCisgICAgICAgICAgICgoUHJlZW1wdFByaW9yaXR5ICYgKHVpbnQzMl90KSgoMVVMIDw8IChQcmVlbXB0UHJpb3JpdHlCaXRzKSkgLSAxVUwpKSA8PCBTdWJQcmlvcml0eUJpdHMpIHwKKyAgICAgICAgICAgKChTdWJQcmlvcml0eSAgICAgJiAodWludDMyX3QpKCgxVUwgPDwgKFN1YlByaW9yaXR5Qml0cyAgICApKSAtIDFVTCkpKQorICAgICAgICAgKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGVjb2RlIFByaW9yaXR5CisgIFxkZXRhaWxzIERlY29kZXMgYW4gaW50ZXJydXB0IHByaW9yaXR5IHZhbHVlIHdpdGggYSBnaXZlbiBwcmlvcml0eSBncm91cCB0bworICAgICAgICAgICBwcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIGFuZCBzdWJwcmlvcml0eSB2YWx1ZS4KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQorICAgICAgICAgICBwcmlvcml0eSBiaXRzIChfX05WSUNfUFJJT19CSVRTKSB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0LgorICBccGFyYW0gW2luXSAgICAgICAgIFByaW9yaXR5ICAgUHJpb3JpdHkgdmFsdWUsIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCB0aGUgZnVuY3Rpb24gXHJlZiBOVklDX0dldFByaW9yaXR5KCkuCisgIFxwYXJhbSBbaW5dICAgICBQcmlvcml0eUdyb3VwICBVc2VkIHByaW9yaXR5IGdyb3VwLgorICBccGFyYW0gW291dF0gcFByZWVtcHRQcmlvcml0eSAgUHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4KKyAgXHBhcmFtIFtvdXRdICAgICBwU3ViUHJpb3JpdHkgIFN1YnByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0RlY29kZVByaW9yaXR5ICh1aW50MzJfdCBQcmlvcml0eSwgdWludDMyX3QgUHJpb3JpdHlHcm91cCwgdWludDMyX3QqIGNvbnN0IHBQcmVlbXB0UHJpb3JpdHksIHVpbnQzMl90KiBjb25zdCBwU3ViUHJpb3JpdHkpCit7CisgIHVpbnQzMl90IFByaW9yaXR5R3JvdXBUbXAgPSAoUHJpb3JpdHlHcm91cCAmICh1aW50MzJfdCkweDA3VUwpOyAgIC8qIG9ubHkgdmFsdWVzIDAuLjcgYXJlIHVzZWQgICAgICAgICAgKi8KKyAgdWludDMyX3QgUHJlZW1wdFByaW9yaXR5Qml0czsKKyAgdWludDMyX3QgU3ViUHJpb3JpdHlCaXRzOworCisgIFByZWVtcHRQcmlvcml0eUJpdHMgPSAoKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApID4gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpIDogKHVpbnQzMl90KSg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKTsKKyAgU3ViUHJpb3JpdHlCaXRzICAgICA9ICgoUHJpb3JpdHlHcm91cFRtcCArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpIDwgKHVpbnQzMl90KTdVTCkgPyAodWludDMyX3QpMFVMIDogKHVpbnQzMl90KSgoUHJpb3JpdHlHcm91cFRtcCAtIDdVTCkgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKTsKKworICAqcFByZWVtcHRQcmlvcml0eSA9IChQcmlvcml0eSA+PiBTdWJQcmlvcml0eUJpdHMpICYgKHVpbnQzMl90KSgoMVVMIDw8IChQcmVlbXB0UHJpb3JpdHlCaXRzKSkgLSAxVUwpOworICAqcFN1YlByaW9yaXR5ICAgICA9IChQcmlvcml0eSAgICAgICAgICAgICAgICAgICApICYgKHVpbnQzMl90KSgoMVVMIDw8IChTdWJQcmlvcml0eUJpdHMgICAgKSkgLSAxVUwpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gUmVzZXQKKyAgXGRldGFpbHMgSW5pdGlhdGVzIGEgc3lzdGVtIHJlc2V0IHJlcXVlc3QgdG8gcmVzZXQgdGhlIE1DVS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TeXN0ZW1SZXNldCh2b2lkKQoreworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgYWxsIG91dHN0YW5kaW5nIG1lbW9yeSBhY2Nlc3NlcyBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJlZCB3cml0ZSBhcmUgY29tcGxldGVkIGJlZm9yZSByZXNldCAqLworICBTQ0ItPkFJUkNSICA9ICh1aW50MzJfdCkoKDB4NUZBVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0NCLT5BSVJDUiAmIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrICAgICk7ICAgICAgICAgLyogS2VlcCBwcmlvcml0eSBncm91cCB1bmNoYW5nZWQgKi8KKyAgX19EU0IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIGNvbXBsZXRpb24gb2YgbWVtb3J5IGFjY2VzcyAqLworCisgIGZvcig7OykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhaXQgdW50aWwgcmVzZXQgKi8KKyAgeworICAgIF9fTk9QKCk7CisgIH0KK30KKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zICovCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIEZQVSBmdW5jdGlvbnMgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX0ZwdUZ1bmN0aW9ucyBGUFUgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbiB0aGF0IHByb3ZpZGVzIEZQVSB0eXBlLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBnZXQgRlBVIHR5cGUKKyAgXGRldGFpbHMgcmV0dXJucyB0aGUgRlBVIHR5cGUKKyAgXHJldHVybnMKKyAgIC0gXGIgIDA6IE5vIEZQVQorICAgLSBcYiAgMTogU2luZ2xlIHByZWNpc2lvbiBGUFUKKyAgIC0gXGIgIDI6IERvdWJsZSArIFNpbmdsZSBwcmVjaXNpb24gRlBVCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBTQ0JfR2V0RlBVVHlwZSh2b2lkKQoreworICB1aW50MzJfdCBtdmZyMDsKKworICBtdmZyMCA9IFNDQi0+TVZGUjA7CisgIGlmICAgICAgICAoKG12ZnIwICYgMHgwMDAwMEZGMFVMKSA9PSAweDIyMFVMKQorICB7CisgICAgcmV0dXJuIDJVTDsgICAgICAgICAgIC8qIERvdWJsZSArIFNpbmdsZSBwcmVjaXNpb24gRlBVICovCisgIH0KKyAgZWxzZSBpZiAoKG12ZnIwICYgMHgwMDAwMEZGMFVMKSA9PSAweDAyMFVMKQorICB7CisgICAgcmV0dXJuIDFVTDsgICAgICAgICAgIC8qIFNpbmdsZSBwcmVjaXNpb24gRlBVICovCisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIDBVTDsgICAgICAgICAgIC8qIE5vIEZQVSAqLworICB9Cit9CisKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9GcHVGdW5jdGlvbnMgKi8KKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDYWNoZSBmdW5jdGlvbnMgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX0NhY2hlRnVuY3Rpb25zIENhY2hlIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgY29uZmlndXJlIEluc3RydWN0aW9uIGFuZCBEYXRhIGNhY2hlLgorICBAeworICovCisKKy8qIENhY2hlIFNpemUgSUQgUmVnaXN0ZXIgTWFjcm9zICovCisjZGVmaW5lIENDU0lEUl9XQVlTKHgpICAgICAgICAgKCgoeCkgJiBTQ0JfQ0NTSURSX0FTU09DSUFUSVZJVFlfTXNrKSA+PiBTQ0JfQ0NTSURSX0FTU09DSUFUSVZJVFlfUG9zKQorI2RlZmluZSBDQ1NJRFJfU0VUUyh4KSAgICAgICAgICgoKHgpICYgU0NCX0NDU0lEUl9OVU1TRVRTX01zayAgICAgICkgPj4gU0NCX0NDU0lEUl9OVU1TRVRTX1BvcyAgICAgICkKKworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEktQ2FjaGUKKyAgXGRldGFpbHMgVHVybnMgb24gSS1DYWNoZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NCX0VuYWJsZUlDYWNoZSAodm9pZCkKK3sKKyAgI2lmIChfX0lDQUNIRV9QUkVTRU5UID09IDFVKQorICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKKyAgICBTQ0ItPklDSUFMTFUgPSAwVUw7ICAgICAgICAgICAgICAgICAgICAgLyogaW52YWxpZGF0ZSBJLUNhY2hlICovCisgICAgU0NCLT5DQ1IgfD0gICh1aW50MzJfdClTQ0JfQ0NSX0lDX01zazsgIC8qIGVuYWJsZSBJLUNhY2hlICovCisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICAjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBJLUNhY2hlCisgIFxkZXRhaWxzIFR1cm5zIG9mZiBJLUNhY2hlCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ0JfRGlzYWJsZUlDYWNoZSAodm9pZCkKK3sKKyAgI2lmIChfX0lDQUNIRV9QUkVTRU5UID09IDFVKQorICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKKyAgICBTQ0ItPkNDUiAmPSB+KHVpbnQzMl90KVNDQl9DQ1JfSUNfTXNrOyAgLyogZGlzYWJsZSBJLUNhY2hlICovCisgICAgU0NCLT5JQ0lBTExVID0gMFVMOyAgICAgICAgICAgICAgICAgICAgIC8qIGludmFsaWRhdGUgSS1DYWNoZSAqLworICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKKyAgI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIEludmFsaWRhdGUgSS1DYWNoZQorICBcZGV0YWlscyBJbnZhbGlkYXRlcyBJLUNhY2hlCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ0JfSW52YWxpZGF0ZUlDYWNoZSAodm9pZCkKK3sKKyAgI2lmIChfX0lDQUNIRV9QUkVTRU5UID09IDFVKQorICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKKyAgICBTQ0ItPklDSUFMTFUgPSAwVUw7CisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICAjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEQtQ2FjaGUKKyAgXGRldGFpbHMgVHVybnMgb24gRC1DYWNoZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NCX0VuYWJsZURDYWNoZSAodm9pZCkKK3sKKyAgI2lmIChfX0RDQUNIRV9QUkVTRU5UID09IDFVKQorICAgIHVpbnQzMl90IGNjc2lkcjsKKyAgICB1aW50MzJfdCBzZXRzOworICAgIHVpbnQzMl90IHdheXM7CisKKyAgICBTQ0ItPkNTU0VMUiA9ICgwVSA8PCAxVSkgfCAwVTsgICAgICAgICAgLyogTGV2ZWwgMSBkYXRhIGNhY2hlICovCisgICAgX19EU0IoKTsKKworICAgIGNjc2lkciA9IFNDQi0+Q0NTSURSOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGludmFsaWRhdGUgRC1DYWNoZSAqLworICAgIHNldHMgPSAodWludDMyX3QpKENDU0lEUl9TRVRTKGNjc2lkcikpOworICAgIGRvIHsKKyAgICAgIHdheXMgPSAodWludDMyX3QpKENDU0lEUl9XQVlTKGNjc2lkcikpOworICAgICAgZG8geworICAgICAgICBTQ0ItPkRDSVNXID0gKCgoc2V0cyA8PCBTQ0JfRENJU1dfU0VUX1BvcykgJiBTQ0JfRENJU1dfU0VUX01zaykgfAorICAgICAgICAgICAgICAgICAgICAgICgod2F5cyA8PCBTQ0JfRENJU1dfV0FZX1BvcykgJiBTQ0JfRENJU1dfV0FZX01zaykgICk7CisgICAgICAgICNpZiBkZWZpbmVkICggX19DQ19BUk0gKQorICAgICAgICAgIF9fc2NoZWR1bGVfYmFycmllcigpOworICAgICAgICAjZW5kaWYKKyAgICAgIH0gd2hpbGUgKHdheXMtLSk7CisgICAgfSB3aGlsZShzZXRzLS0pOworICAgIF9fRFNCKCk7CisKKyAgICBTQ0ItPkNDUiB8PSAgKHVpbnQzMl90KVNDQl9DQ1JfRENfTXNrOyAgLyogZW5hYmxlIEQtQ2FjaGUgKi8KKworICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKKyAgI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIERpc2FibGUgRC1DYWNoZQorICBcZGV0YWlscyBUdXJucyBvZmYgRC1DYWNoZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NCX0Rpc2FibGVEQ2FjaGUgKHZvaWQpCit7CisgICNpZiAoX19EQ0FDSEVfUFJFU0VOVCA9PSAxVSkKKyAgICB1aW50MzJfdCBjY3NpZHI7CisgICAgdWludDMyX3Qgc2V0czsKKyAgICB1aW50MzJfdCB3YXlzOworCisgICAgU0NCLT5DU1NFTFIgPSAoMFUgPDwgMVUpIHwgMFU7ICAgICAgICAgIC8qIExldmVsIDEgZGF0YSBjYWNoZSAqLworICAgIF9fRFNCKCk7CisKKyAgICBjY3NpZHIgPSBTQ0ItPkNDU0lEUjsKKworICAgIFNDQi0+Q0NSICY9IH4odWludDMyX3QpU0NCX0NDUl9EQ19Nc2s7ICAvKiBkaXNhYmxlIEQtQ2FjaGUgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbGVhbiAmIGludmFsaWRhdGUgRC1DYWNoZSAqLworICAgIHNldHMgPSAodWludDMyX3QpKENDU0lEUl9TRVRTKGNjc2lkcikpOworICAgIGRvIHsKKyAgICAgIHdheXMgPSAodWludDMyX3QpKENDU0lEUl9XQVlTKGNjc2lkcikpOworICAgICAgZG8geworICAgICAgICBTQ0ItPkRDQ0lTVyA9ICgoKHNldHMgPDwgU0NCX0RDQ0lTV19TRVRfUG9zKSAmIFNDQl9EQ0NJU1dfU0VUX01zaykgfAorICAgICAgICAgICAgICAgICAgICAgICAoKHdheXMgPDwgU0NCX0RDQ0lTV19XQVlfUG9zKSAmIFNDQl9EQ0NJU1dfV0FZX01zaykgICk7CisgICAgICAgICNpZiBkZWZpbmVkICggX19DQ19BUk0gKQorICAgICAgICAgIF9fc2NoZWR1bGVfYmFycmllcigpOworICAgICAgICAjZW5kaWYKKyAgICAgIH0gd2hpbGUgKHdheXMtLSk7CisgICAgfSB3aGlsZShzZXRzLS0pOworCisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICAjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgSW52YWxpZGF0ZSBELUNhY2hlCisgIFxkZXRhaWxzIEludmFsaWRhdGVzIEQtQ2FjaGUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNDQl9JbnZhbGlkYXRlRENhY2hlICh2b2lkKQoreworICAjaWYgKF9fRENBQ0hFX1BSRVNFTlQgPT0gMVUpCisgICAgdWludDMyX3QgY2NzaWRyOworICAgIHVpbnQzMl90IHNldHM7CisgICAgdWludDMyX3Qgd2F5czsKKworICAgIFNDQi0+Q1NTRUxSID0gKDBVIDw8IDFVKSB8IDBVOyAgICAgICAgICAvKiBMZXZlbCAxIGRhdGEgY2FjaGUgKi8KKyAgICBfX0RTQigpOworCisgICAgY2NzaWRyID0gU0NCLT5DQ1NJRFI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW52YWxpZGF0ZSBELUNhY2hlICovCisgICAgc2V0cyA9ICh1aW50MzJfdCkoQ0NTSURSX1NFVFMoY2NzaWRyKSk7CisgICAgZG8geworICAgICAgd2F5cyA9ICh1aW50MzJfdCkoQ0NTSURSX1dBWVMoY2NzaWRyKSk7CisgICAgICBkbyB7CisgICAgICAgIFNDQi0+RENJU1cgPSAoKChzZXRzIDw8IFNDQl9EQ0lTV19TRVRfUG9zKSAmIFNDQl9EQ0lTV19TRVRfTXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgKCh3YXlzIDw8IFNDQl9EQ0lTV19XQVlfUG9zKSAmIFNDQl9EQ0lTV19XQVlfTXNrKSAgKTsKKyAgICAgICAgI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7CisgICAgICAgICNlbmRpZgorICAgICAgfSB3aGlsZSAod2F5cy0tKTsKKyAgICB9IHdoaWxlKHNldHMtLSk7CisKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisgICNlbmRpZgorfQorCisKKy8qKgorICBcYnJpZWYgICBDbGVhbiBELUNhY2hlCisgIFxkZXRhaWxzIENsZWFucyBELUNhY2hlCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ0JfQ2xlYW5EQ2FjaGUgKHZvaWQpCit7CisgICNpZiAoX19EQ0FDSEVfUFJFU0VOVCA9PSAxVSkKKyAgICB1aW50MzJfdCBjY3NpZHI7CisgICAgdWludDMyX3Qgc2V0czsKKyAgICB1aW50MzJfdCB3YXlzOworCisgICAgU0NCLT5DU1NFTFIgPSAoMFUgPDwgMVUpIHwgMFU7ICAgICAgICAgIC8qIExldmVsIDEgZGF0YSBjYWNoZSAqLworICAgIF9fRFNCKCk7CisKKyAgICBjY3NpZHIgPSBTQ0ItPkNDU0lEUjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbGVhbiBELUNhY2hlICovCisgICAgc2V0cyA9ICh1aW50MzJfdCkoQ0NTSURSX1NFVFMoY2NzaWRyKSk7CisgICAgZG8geworICAgICAgd2F5cyA9ICh1aW50MzJfdCkoQ0NTSURSX1dBWVMoY2NzaWRyKSk7CisgICAgICBkbyB7CisgICAgICAgIFNDQi0+RENDU1cgPSAoKChzZXRzIDw8IFNDQl9EQ0NTV19TRVRfUG9zKSAmIFNDQl9EQ0NTV19TRVRfTXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgKCh3YXlzIDw8IFNDQl9EQ0NTV19XQVlfUG9zKSAmIFNDQl9EQ0NTV19XQVlfTXNrKSAgKTsKKyAgICAgICAgI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7CisgICAgICAgICNlbmRpZgorICAgICAgfSB3aGlsZSAod2F5cy0tKTsKKyAgICB9IHdoaWxlKHNldHMtLSk7CisKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisgICNlbmRpZgorfQorCisKKy8qKgorICBcYnJpZWYgICBDbGVhbiAmIEludmFsaWRhdGUgRC1DYWNoZQorICBcZGV0YWlscyBDbGVhbnMgYW5kIEludmFsaWRhdGVzIEQtQ2FjaGUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNDQl9DbGVhbkludmFsaWRhdGVEQ2FjaGUgKHZvaWQpCit7CisgICNpZiAoX19EQ0FDSEVfUFJFU0VOVCA9PSAxVSkKKyAgICB1aW50MzJfdCBjY3NpZHI7CisgICAgdWludDMyX3Qgc2V0czsKKyAgICB1aW50MzJfdCB3YXlzOworCisgICAgU0NCLT5DU1NFTFIgPSAoMFUgPDwgMVUpIHwgMFU7ICAgICAgICAgIC8qIExldmVsIDEgZGF0YSBjYWNoZSAqLworICAgIF9fRFNCKCk7CisKKyAgICBjY3NpZHIgPSBTQ0ItPkNDU0lEUjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbGVhbiAmIGludmFsaWRhdGUgRC1DYWNoZSAqLworICAgIHNldHMgPSAodWludDMyX3QpKENDU0lEUl9TRVRTKGNjc2lkcikpOworICAgIGRvIHsKKyAgICAgIHdheXMgPSAodWludDMyX3QpKENDU0lEUl9XQVlTKGNjc2lkcikpOworICAgICAgZG8geworICAgICAgICBTQ0ItPkRDQ0lTVyA9ICgoKHNldHMgPDwgU0NCX0RDQ0lTV19TRVRfUG9zKSAmIFNDQl9EQ0NJU1dfU0VUX01zaykgfAorICAgICAgICAgICAgICAgICAgICAgICAoKHdheXMgPDwgU0NCX0RDQ0lTV19XQVlfUG9zKSAmIFNDQl9EQ0NJU1dfV0FZX01zaykgICk7CisgICAgICAgICNpZiBkZWZpbmVkICggX19DQ19BUk0gKQorICAgICAgICAgIF9fc2NoZWR1bGVfYmFycmllcigpOworICAgICAgICAjZW5kaWYKKyAgICAgIH0gd2hpbGUgKHdheXMtLSk7CisgICAgfSB3aGlsZShzZXRzLS0pOworCisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICAjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgRC1DYWNoZSBJbnZhbGlkYXRlIGJ5IGFkZHJlc3MKKyAgXGRldGFpbHMgSW52YWxpZGF0ZXMgRC1DYWNoZSBmb3IgdGhlIGdpdmVuIGFkZHJlc3MKKyAgXHBhcmFtW2luXSAgIGFkZHIgICAgYWRkcmVzcyAoYWxpZ25lZCB0byAzMi1ieXRlIGJvdW5kYXJ5KQorICBccGFyYW1baW5dICAgZHNpemUgICBzaXplIG9mIG1lbW9yeSBibG9jayAoaW4gbnVtYmVyIG9mIGJ5dGVzKQorKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNDQl9JbnZhbGlkYXRlRENhY2hlX2J5X0FkZHIgKHVpbnQzMl90ICphZGRyLCBpbnQzMl90IGRzaXplKQoreworICAjaWYgKF9fRENBQ0hFX1BSRVNFTlQgPT0gMVUpCisgICAgIGludDMyX3Qgb3Bfc2l6ZSA9IGRzaXplOworICAgIHVpbnQzMl90IG9wX2FkZHIgPSAodWludDMyX3QpYWRkcjsKKyAgICAgaW50MzJfdCBsaW5lc2l6ZSA9IDMyVTsgICAgICAgICAgICAgICAgLyogaW4gQ29ydGV4LU03IHNpemUgb2YgY2FjaGUgbGluZSBpcyBmaXhlZCB0byA4IHdvcmRzICgzMiBieXRlcykgKi8KKworICAgIF9fRFNCKCk7CisKKyAgICB3aGlsZSAob3Bfc2l6ZSA+IDApIHsKKyAgICAgIFNDQi0+RENJTVZBQyA9IG9wX2FkZHI7CisgICAgICBvcF9hZGRyICs9IGxpbmVzaXplOworICAgICAgb3Bfc2l6ZSAtPSBsaW5lc2l6ZTsKKyAgICB9CisKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisgICNlbmRpZgorfQorCisKKy8qKgorICBcYnJpZWYgICBELUNhY2hlIENsZWFuIGJ5IGFkZHJlc3MKKyAgXGRldGFpbHMgQ2xlYW5zIEQtQ2FjaGUgZm9yIHRoZSBnaXZlbiBhZGRyZXNzCisgIFxwYXJhbVtpbl0gICBhZGRyICAgIGFkZHJlc3MgKGFsaWduZWQgdG8gMzItYnl0ZSBib3VuZGFyeSkKKyAgXHBhcmFtW2luXSAgIGRzaXplICAgc2l6ZSBvZiBtZW1vcnkgYmxvY2sgKGluIG51bWJlciBvZiBieXRlcykKKyovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ0JfQ2xlYW5EQ2FjaGVfYnlfQWRkciAodWludDMyX3QgKmFkZHIsIGludDMyX3QgZHNpemUpCit7CisgICNpZiAoX19EQ0FDSEVfUFJFU0VOVCA9PSAxKQorICAgICBpbnQzMl90IG9wX3NpemUgPSBkc2l6ZTsKKyAgICB1aW50MzJfdCBvcF9hZGRyID0gKHVpbnQzMl90KSBhZGRyOworICAgICBpbnQzMl90IGxpbmVzaXplID0gMzJVOyAgICAgICAgICAgICAgICAvKiBpbiBDb3J0ZXgtTTcgc2l6ZSBvZiBjYWNoZSBsaW5lIGlzIGZpeGVkIHRvIDggd29yZHMgKDMyIGJ5dGVzKSAqLworCisgICAgX19EU0IoKTsKKworICAgIHdoaWxlIChvcF9zaXplID4gMCkgeworICAgICAgU0NCLT5EQ0NNVkFDID0gb3BfYWRkcjsKKyAgICAgIG9wX2FkZHIgKz0gbGluZXNpemU7CisgICAgICBvcF9zaXplIC09IGxpbmVzaXplOworICAgIH0KKworICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKKyAgI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIEQtQ2FjaGUgQ2xlYW4gYW5kIEludmFsaWRhdGUgYnkgYWRkcmVzcworICBcZGV0YWlscyBDbGVhbnMgYW5kIGludmFsaWRhdGVzIERfQ2FjaGUgZm9yIHRoZSBnaXZlbiBhZGRyZXNzCisgIFxwYXJhbVtpbl0gICBhZGRyICAgIGFkZHJlc3MgKGFsaWduZWQgdG8gMzItYnl0ZSBib3VuZGFyeSkKKyAgXHBhcmFtW2luXSAgIGRzaXplICAgc2l6ZSBvZiBtZW1vcnkgYmxvY2sgKGluIG51bWJlciBvZiBieXRlcykKKyovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ0JfQ2xlYW5JbnZhbGlkYXRlRENhY2hlX2J5X0FkZHIgKHVpbnQzMl90ICphZGRyLCBpbnQzMl90IGRzaXplKQoreworICAjaWYgKF9fRENBQ0hFX1BSRVNFTlQgPT0gMVUpCisgICAgIGludDMyX3Qgb3Bfc2l6ZSA9IGRzaXplOworICAgIHVpbnQzMl90IG9wX2FkZHIgPSAodWludDMyX3QpIGFkZHI7CisgICAgIGludDMyX3QgbGluZXNpemUgPSAzMlU7ICAgICAgICAgICAgICAgIC8qIGluIENvcnRleC1NNyBzaXplIG9mIGNhY2hlIGxpbmUgaXMgZml4ZWQgdG8gOCB3b3JkcyAoMzIgYnl0ZXMpICovCisKKyAgICBfX0RTQigpOworCisgICAgd2hpbGUgKG9wX3NpemUgPiAwKSB7CisgICAgICBTQ0ItPkRDQ0lNVkFDID0gb3BfYWRkcjsKKyAgICAgIG9wX2FkZHIgKz0gbGluZXNpemU7CisgICAgICBvcF9zaXplIC09IGxpbmVzaXplOworICAgIH0KKworICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKKyAgI2VuZGlmCit9CisKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9DYWNoZUZ1bmN0aW9ucyAqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICBTeXNUaWNrIGZ1bmN0aW9uICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgU3lzVGljayBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IGNvbmZpZ3VyZSB0aGUgU3lzdGVtLgorICBAeworICovCisKKyNpZiAoX19WZW5kb3JfU3lzVGlja0NvbmZpZyA9PSAwVSkKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBUaWNrIENvbmZpZ3VyYXRpb24KKyAgXGRldGFpbHMgSW5pdGlhbGl6ZXMgdGhlIFN5c3RlbSBUaW1lciBhbmQgaXRzIGludGVycnVwdCwgYW5kIHN0YXJ0cyB0aGUgU3lzdGVtIFRpY2sgVGltZXIuCisgICAgICAgICAgIENvdW50ZXIgaXMgaW4gZnJlZSBydW5uaW5nIG1vZGUgdG8gZ2VuZXJhdGUgcGVyaW9kaWMgaW50ZXJydXB0cy4KKyAgXHBhcmFtIFtpbl0gIHRpY2tzICBOdW1iZXIgb2YgdGlja3MgYmV0d2VlbiB0d28gaW50ZXJydXB0cy4KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQuCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkLgorICBcbm90ZSAgICBXaGVuIHRoZSB2YXJpYWJsZSA8Yj5fX1ZlbmRvcl9TeXNUaWNrQ29uZmlnPC9iPiBpcyBzZXQgdG8gMSwgdGhlbiB0aGUKKyAgICAgICAgICAgZnVuY3Rpb24gPGI+U3lzVGlja19Db25maWc8L2I+IGlzIG5vdCBpbmNsdWRlZC4gSW4gdGhpcyBjYXNlLCB0aGUgZmlsZSA8Yj48aT5kZXZpY2U8L2k+Lmg8L2I+CisgICAgICAgICAgIG11c3QgY29udGFpbiBhIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgU3lzVGlja19Db25maWcodWludDMyX3QgdGlja3MpCit7CisgIGlmICgodGlja3MgLSAxVUwpID4gU3lzVGlja19MT0FEX1JFTE9BRF9Nc2spCisgIHsKKyAgICByZXR1cm4gKDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2FkIHZhbHVlIGltcG9zc2libGUgKi8KKyAgfQorCisgIFN5c1RpY2stPkxPQUQgID0gKHVpbnQzMl90KSh0aWNrcyAtIDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCByZWxvYWQgcmVnaXN0ZXIgKi8KKyAgTlZJQ19TZXRQcmlvcml0eSAoU3lzVGlja19JUlFuLCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpIC0gMVVMKTsgLyogc2V0IFByaW9yaXR5IGZvciBTeXN0aWNrIEludGVycnVwdCAqLworICBTeXNUaWNrLT5WQUwgICA9IDBVTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2FkIHRoZSBTeXNUaWNrIENvdW50ZXIgVmFsdWUgKi8KKyAgU3lzVGljay0+Q1RSTCAgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgU3lzVGljayBJUlEgYW5kIFN5c1RpY2sgVGltZXIgKi8KKyAgcmV0dXJuICgwVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gc3VjY2Vzc2Z1bCAqLworfQorCisjZW5kaWYKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zICovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIERlYnVnIEluL091dHB1dCBmdW5jdGlvbiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX2NvcmVfRGVidWdGdW5jdGlvbnMgSVRNIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgYWNjZXNzIHRoZSBJVE0gZGVidWcgaW50ZXJmYWNlLgorICBAeworICovCisKK2V4dGVybiB2b2xhdGlsZSBpbnQzMl90IElUTV9SeEJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgIC8qITwgRXh0ZXJuYWwgdmFyaWFibGUgdG8gcmVjZWl2ZSBjaGFyYWN0ZXJzLiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgSVRNX1JYQlVGRkVSX0VNUFRZICAgMHg1QUE1NUFBNVUgLyohPCBWYWx1ZSBpZGVudGlmeWluZyBccmVmIElUTV9SeEJ1ZmZlciBpcyByZWFkeSBmb3IgbmV4dCBjaGFyYWN0ZXIuICovCisKKworLyoqCisgIFxicmllZiAgIElUTSBTZW5kIENoYXJhY3RlcgorICBcZGV0YWlscyBUcmFuc21pdHMgYSBjaGFyYWN0ZXIgdmlhIHRoZSBJVE0gY2hhbm5lbCAwLCBhbmQKKyAgICAgICAgICAgXGxpIEp1c3QgcmV0dXJucyB3aGVuIG5vIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZCB0aGF0IGhhcyBib29rZWQgdGhlIG91dHB1dC4KKyAgICAgICAgICAgXGxpIElzIGJsb2NraW5nIHdoZW4gYSBkZWJ1Z2dlciBpcyBjb25uZWN0ZWQsIGJ1dCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHNlbnQgaGFzIG5vdCBiZWVuIHRyYW5zbWl0dGVkLgorICBccGFyYW0gW2luXSAgICAgY2ggIENoYXJhY3RlciB0byB0cmFuc21pdC4KKyAgXHJldHVybnMgICAgICAgICAgICBDaGFyYWN0ZXIgdG8gdHJhbnNtaXQuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBJVE1fU2VuZENoYXIgKHVpbnQzMl90IGNoKQoreworICBpZiAoKChJVE0tPlRDUiAmIElUTV9UQ1JfSVRNRU5BX01zaykgIT0gMFVMKSAmJiAgICAgIC8qIElUTSBlbmFibGVkICovCisgICAgICAoKElUTS0+VEVSICYgMVVMICAgICAgICAgICAgICAgKSAhPSAwVUwpICAgKSAgICAgLyogSVRNIFBvcnQgIzAgZW5hYmxlZCAqLworICB7CisgICAgd2hpbGUgKElUTS0+UE9SVFswVV0udTMyID09IDBVTCkKKyAgICB7CisgICAgICBfX05PUCgpOworICAgIH0KKyAgICBJVE0tPlBPUlRbMFVdLnU4ID0gKHVpbnQ4X3QpY2g7CisgIH0KKyAgcmV0dXJuIChjaCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIElUTSBSZWNlaXZlIENoYXJhY3RlcgorICBcZGV0YWlscyBJbnB1dHMgYSBjaGFyYWN0ZXIgdmlhIHRoZSBleHRlcm5hbCB2YXJpYWJsZSBccmVmIElUTV9SeEJ1ZmZlci4KKyAgXHJldHVybiAgICAgICAgICAgICBSZWNlaXZlZCBjaGFyYWN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAtMSAgTm8gY2hhcmFjdGVyIHBlbmRpbmcuCisgKi8KK19fU1RBVElDX0lOTElORSBpbnQzMl90IElUTV9SZWNlaXZlQ2hhciAodm9pZCkKK3sKKyAgaW50MzJfdCBjaCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKworICBpZiAoSVRNX1J4QnVmZmVyICE9IElUTV9SWEJVRkZFUl9FTVBUWSkKKyAgeworICAgIGNoID0gSVRNX1J4QnVmZmVyOworICAgIElUTV9SeEJ1ZmZlciA9IElUTV9SWEJVRkZFUl9FTVBUWTsgICAgICAgLyogcmVhZHkgZm9yIG5leHQgY2hhcmFjdGVyICovCisgIH0KKworICByZXR1cm4gKGNoKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgSVRNIENoZWNrIENoYXJhY3RlcgorICBcZGV0YWlscyBDaGVja3Mgd2hldGhlciBhIGNoYXJhY3RlciBpcyBwZW5kaW5nIGZvciByZWFkaW5nIGluIHRoZSB2YXJpYWJsZSBccmVmIElUTV9SeEJ1ZmZlci4KKyAgXHJldHVybiAgICAgICAgICAwICBObyBjaGFyYWN0ZXIgYXZhaWxhYmxlLgorICBccmV0dXJuICAgICAgICAgIDEgIENoYXJhY3RlciBhdmFpbGFibGUuCisgKi8KK19fU1RBVElDX0lOTElORSBpbnQzMl90IElUTV9DaGVja0NoYXIgKHZvaWQpCit7CisKKyAgaWYgKElUTV9SeEJ1ZmZlciA9PSBJVE1fUlhCVUZGRVJfRU1QVFkpCisgIHsKKyAgICByZXR1cm4gKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKyAgfQorfQorCisvKkB9IGVuZCBvZiBDTVNJU19jb3JlX0RlYnVnRnVuY3Rpb25zICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ003X0hfREVQRU5EQU5UICovCisKKyNlbmRpZiAvKiBfX0NNU0lTX0dFTkVSSUMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY21GdW5jLmggYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtRnVuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MmE0OGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtRnVuYy5oCkBAIC0wLDAgKzEsODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjb3JlX2NtRnVuYy5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gQ29yZSBGdW5jdGlvbiBBY2Nlc3MgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9DTUZVTkNfSAorI2RlZmluZSBfX0NPUkVfQ01GVU5DX0gKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgRnVuY3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKiBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICAgIFxkZWZncm91cCBDTVNJU19Db3JlX1JlZ0FjY0Z1bmN0aW9ucyBDTVNJUyBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWxWaWV3IENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAgIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNpbmNsdWRlICJjbXNpc19hcm1jYy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBBUk0gQ29tcGlsZXIgVjYgLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjaW5jbHVkZSAiY21zaXNfYXJtY2NfVjYuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0gR05VIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2luY2x1ZGUgImNtc2lzX2djYy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBJQ0MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNpbmNsdWRlIDxjbXNpc19pYXIuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gVEkgQ0NTIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjaW5jbHVkZSA8Y21zaXNfY2NzLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFRBU0tJTkcgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApCisgIC8qCisgICAqIFRoZSBDTVNJUyBmdW5jdGlvbnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGFzIGludHJpbnNpY3MgaW4gdGhlIGNvbXBpbGVyLgorICAgKiBQbGVhc2UgdXNlICJjYXJtIC0/aSIgdG8gZ2V0IGFuIHVwIHRvIGRhdGUgbGlzdCBvZiBhbGwgaW50cmluc2ljcywKKyAgICogSW5jbHVkaW5nIHRoZSBDTVNJUyBvbmVzLgorICAgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gQ09TTUlDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkKKyAgI2luY2x1ZGUgPGNtc2lzX2NzbS5oPgorCisjZW5kaWYKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgKi8KKworI2VuZGlmIC8qIF9fQ09SRV9DTUZVTkNfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbUluc3RyLmggYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtSW5zdHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDc0YjBlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbUluc3RyLmgKQEAgLTAsMCArMSw4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNvcmVfY21JbnN0ci5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gQ29yZSBJbnN0cnVjdGlvbiBBY2Nlc3MgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9DTUlOU1RSX0gKKyNkZWZpbmUgX19DT1JFX0NNSU5TVFJfSAorCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqIFxkZWZncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlIENNU0lTIENvcmUgSW5zdHJ1Y3Rpb24gSW50ZXJmYWNlCisgIEFjY2VzcyB0byBkZWRpY2F0ZWQgaW5zdHJ1Y3Rpb25zCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBSZWFsVmlldyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjaW5jbHVkZSAiY21zaXNfYXJtY2MuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0gQVJNIENvbXBpbGVyIFY2IC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2luY2x1ZGUgImNtc2lzX2FybWNjX1Y2LmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEdOVSBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNpbmNsdWRlICJjbXNpc19nY2MuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0gSUNDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjaW5jbHVkZSA8Y21zaXNfaWFyLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFRJIENDUyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2luY2x1ZGUgPGNtc2lzX2Njcy5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUQVNLSU5HIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAvKgorICAgKiBUaGUgQ01TSVMgZnVuY3Rpb25zIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBhcyBpbnRyaW5zaWNzIGluIHRoZSBjb21waWxlci4KKyAgICogUGxlYXNlIHVzZSAiY2FybSAtP2kiIHRvIGdldCBhbiB1cCB0byBkYXRlIGxpc3Qgb2YgYWxsIGludHJpbnNpY3MsCisgICAqIEluY2x1ZGluZyB0aGUgQ01TSVMgb25lcy4KKyAgICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIENPU01JQyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNpbmNsdWRlIDxjbXNpc19jc20uaD4KKworI2VuZGlmCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSAqLworCisjZW5kaWYgLyogX19DT1JFX0NNSU5TVFJfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbVNpbWQuaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY21TaW1kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiZjVjMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY21TaW1kLmgKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNvcmVfY21TaW1kLmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTSBTSU1EIEhlYWRlciBGaWxlCisgKiBAdmVyc2lvbiAgVjQuMzAKKyAqIEBkYXRlICAgICAyMC4gT2N0b2JlciAyMDE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNSBBUk0gTElNSVRFRAorCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAqCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKyNpZiAgIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAjcHJhZ21hIHN5c3RlbV9pbmNsdWRlICAgICAgICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlIGZvciBNSVNSQSBjaGVjayAqLworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI3ByYWdtYSBjbGFuZyBzeXN0ZW1faGVhZGVyICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlICovCisjZW5kaWYKKworI2lmbmRlZiBfX0NPUkVfQ01TSU1EX0gKKyNkZWZpbmUgX19DT1JFX0NNU0lNRF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29tcGlsZXIgc3BlY2lmaWMgSW50cmluc2ljcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGRlZmdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyBDTVNJUyBTSU1EIEludHJpbnNpY3MKKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBTSU1EIGluc3RydWN0aW9ucworICBAeworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gUmVhbFZpZXcgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgI2luY2x1ZGUgImNtc2lzX2FybWNjLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEFSTSBDb21waWxlciBWNiAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNpbmNsdWRlICJjbXNpc19hcm1jY19WNi5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBHTlUgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAjaW5jbHVkZSAiY21zaXNfZ2NjLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIElDQyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2luY2x1ZGUgPGNtc2lzX2lhci5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUSSBDQ1MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19UTVM0NzBfXyApCisgICNpbmNsdWRlIDxjbXNpc19jY3MuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gVEFTS0lORyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgLyoKKyAgICogVGhlIENNU0lTIGZ1bmN0aW9ucyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYXMgaW50cmluc2ljcyBpbiB0aGUgY29tcGlsZXIuCisgICAqIFBsZWFzZSB1c2UgImNhcm0gLT9pIiB0byBnZXQgYW4gdXAgdG8gZGF0ZSBsaXN0IG9mIGFsbCBpbnRyaW5zaWNzLAorICAgKiBJbmNsdWRpbmcgdGhlIENNU0lTIG9uZXMuCisgICAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBDT1NNSUMgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjaW5jbHVkZSA8Y21zaXNfY3NtLmg+CisKKyNlbmRpZgorCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DT1JFX0NNU0lNRF9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX3NjMDAwLmggYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX3NjMDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE0ZGJkOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfc2MwMDAuaApAQCAtMCwwICsxLDkyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNvcmVfc2MwMDAuaAorICogQGJyaWVmICAgIENNU0lTIFNDMDAwIENvcmUgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9TQzAwMF9IX0dFTkVSSUMKKyNkZWZpbmUgX19DT1JFX1NDMDAwX0hfR0VORVJJQworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICBccGFnZSBDTVNJU19NSVNSQV9FeGNlcHRpb25zICBNSVNSQS1DOjIwMDQgQ29tcGxpYW5jZSBFeGNlcHRpb25zCisgIENNU0lTIHZpb2xhdGVzIHRoZSBmb2xsb3dpbmcgTUlTUkEtQzoyMDA0IHJ1bGVzOgorCisgICBcbGkgUmVxdWlyZWQgUnVsZSA4LjUsIG9iamVjdC9mdW5jdGlvbiBkZWZpbml0aW9uIGluIGhlYWRlciBmaWxlLjxicj4KKyAgICAgRnVuY3Rpb24gZGVmaW5pdGlvbnMgaW4gaGVhZGVyIGZpbGVzIGFyZSB1c2VkIHRvIGFsbG93ICdpbmxpbmluZycuCisKKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDE4LjQsIGRlY2xhcmF0aW9uIG9mIHVuaW9uIHR5cGUgb3Igb2JqZWN0IG9mIHVuaW9uIHR5cGU6ICd7Li4ufScuPGJyPgorICAgICBVbmlvbnMgYXJlIHVzZWQgZm9yIGVmZmVjdGl2ZSByZXByZXNlbnRhdGlvbiBvZiBjb3JlIHJlZ2lzdGVycy4KKworICAgXGxpIEFkdmlzb3J5IFJ1bGUgMTkuNywgRnVuY3Rpb24tbGlrZSBtYWNybyBkZWZpbmVkLjxicj4KKyAgICAgRnVuY3Rpb24tbGlrZSBtYWNyb3MgYXJlIHVzZWQgdG8gYWxsb3cgbW9yZSBlZmZpY2llbnQgY29kZS4KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgQ01TSVMgZGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGluZ3JvdXAgU0MwMDAKKyAgQHsKKyAqLworCisvKiAgQ01TSVMgU0MwMDAgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgX19TQzAwMF9DTVNJU19WRVJTSU9OX01BSU4gICgweDA0VSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFszMToxNl0gQ01TSVMgSEFMIG1haW4gdmVyc2lvbiAqLworI2RlZmluZSBfX1NDMDAwX0NNU0lTX1ZFUlNJT05fU1VCICAgKDB4MUVVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzE1OjBdICBDTVNJUyBIQUwgc3ViIHZlcnNpb24gKi8KKyNkZWZpbmUgX19TQzAwMF9DTVNJU19WRVJTSU9OICAgICAgICgoX19TQzAwMF9DTVNJU19WRVJTSU9OX01BSU4gPDwgMTZVKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19TQzAwMF9DTVNJU19WRVJTSU9OX1NVQiAgICAgICAgICAgKSAgICAvKiE8IENNU0lTIEhBTCB2ZXJzaW9uIG51bWJlciAqLworCisjZGVmaW5lIF9fQ09SVEVYX1NDICAgICAgICAgICAgICAgICAoMDAwVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3J0ZXggc2VjdXJlIGNvcmUgKi8KKworCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIElBUiBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIElBUiBDb21waWxlci4gT25seSBhdmFpbGFibGUgaW4gSGlnaCBvcHRpbWl6YXRpb24gbW9kZSEgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRJIENDUyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNkZWZpbmUgX19wYWNrZWQKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyLiBVc2UgLXBjOTkgb24gY29tcGlsZSBsaW5lICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbHNlCisgICNlcnJvciBVbmtub3duIGNvbXBpbGVyCisjZW5kaWYKKworLyoqIF9fRlBVX1VTRUQgaW5kaWNhdGVzIHdoZXRoZXIgYW4gRlBVIGlzIHVzZWQgb3Igbm90LgorICAgIFRoaXMgY29yZSBkb2VzIG5vdCBzdXBwb3J0IGFuIEZQVSBhdCBhbGwKKyovCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKworI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNpZiBkZWZpbmVkIF9fVEFSR0VUX0ZQVV9WRlAKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjaWYgZGVmaW5lZCBfX0FSTV9QQ1NfVkZQCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2lmIGRlZmluZWQgKF9fVkZQX0ZQX18pICYmICFkZWZpbmVkKF9fU09GVEZQX18pCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjaWYgZGVmaW5lZCBfX0FSTVZGUF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjaWYgZGVmaW5lZCBfX1RJX1ZGUF9TVVBQT1JUX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjaWYgZGVmaW5lZCBfX0ZQVV9WRlBfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNpZiAoIF9fQ1NNQ19fICYgMHg0MDBVKQorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSAiY29yZV9jbUluc3RyLmgiICAgICAgICAgICAgICAgIC8qIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICovCisjaW5jbHVkZSAiY29yZV9jbUZ1bmMuaCIgICAgICAgICAgICAgICAgIC8qIENvcmUgRnVuY3Rpb24gQWNjZXNzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfU0MwMDBfSF9HRU5FUklDICovCisKKyNpZm5kZWYgX19DTVNJU19HRU5FUklDCisKKyNpZm5kZWYgX19DT1JFX1NDMDAwX0hfREVQRU5EQU5UCisjZGVmaW5lIF9fQ09SRV9TQzAwMF9IX0RFUEVOREFOVAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBjaGVjayBkZXZpY2UgZGVmaW5lcyBhbmQgdXNlIGRlZmF1bHRzICovCisjaWYgZGVmaW5lZCBfX0NIRUNLX0RFVklDRV9ERUZJTkVTCisgICNpZm5kZWYgX19TQzAwMF9SRVYKKyAgICAjZGVmaW5lIF9fU0MwMDBfUkVWICAgICAgICAgICAgIDB4MDAwMFUKKyAgICAjd2FybmluZyAiX19TQzAwMF9SRVYgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX01QVV9QUkVTRU5UCisgICAgI2RlZmluZSBfX01QVV9QUkVTRU5UICAgICAgICAgICAgIDBVCisgICAgI3dhcm5pbmcgIl9fTVBVX1BSRVNFTlQgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX05WSUNfUFJJT19CSVRTCisgICAgI2RlZmluZSBfX05WSUNfUFJJT19CSVRTICAgICAgICAgIDJVCisgICAgI3dhcm5pbmcgIl9fTlZJQ19QUklPX0JJVFMgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnCisgICAgI2RlZmluZSBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnICAgIDBVCisgICAgI3dhcm5pbmcgIl9fVmVuZG9yX1N5c1RpY2tDb25maWcgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisjZW5kaWYKKworLyogSU8gZGVmaW5pdGlvbnMgKGFjY2VzcyByZXN0cmljdGlvbnMgdG8gcGVyaXBoZXJhbCByZWdpc3RlcnMpICovCisvKioKKyAgICBcZGVmZ3JvdXAgQ01TSVNfZ2xvYl9kZWZzIENNU0lTIEdsb2JhbCBEZWZpbmVzCisKKyAgICA8c3Ryb25nPklPIFR5cGUgUXVhbGlmaWVyczwvc3Ryb25nPiBhcmUgdXNlZAorICAgIFxsaSB0byBzcGVjaWZ5IHRoZSBhY2Nlc3MgdG8gcGVyaXBoZXJhbCB2YXJpYWJsZXMuCisgICAgXGxpIGZvciBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBwZXJpcGhlcmFsIHJlZ2lzdGVyIGRlYnVnIGluZm9ybWF0aW9uLgorKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworICAjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8KKyNlbHNlCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2VuZGlmCisjZGVmaW5lICAgICBfX08gICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAnd3JpdGUgb25seScgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU8gICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHBlcm1pc3Npb25zICovCisKKy8qIGZvbGxvd2luZyBkZWZpbmVzIHNob3VsZCBiZSB1c2VkIGZvciBzdHJ1Y3R1cmUgbWVtYmVycyAqLworI2RlZmluZSAgICAgX19JTSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAvKiEgRGVmaW5lcyAncmVhZCBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX09NICAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICd3cml0ZSBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX0lPTSAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgU0MwMDAgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQWJzdHJhY3Rpb24KKyAgQ29yZSBSZWdpc3RlciBjb250YWluOgorICAtIENvcmUgUmVnaXN0ZXIKKyAgLSBDb3JlIE5WSUMgUmVnaXN0ZXIKKyAgLSBDb3JlIFNDQiBSZWdpc3RlcgorICAtIENvcmUgU3lzVGljayBSZWdpc3RlcgorICAtIENvcmUgTVBVIFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxkZWZncm91cCBDTVNJU19jb3JlX3JlZ2lzdGVyIERlZmluZXMgYW5kIFR5cGUgRGVmaW5pdGlvbnMKKyAgXGJyaWVmIFR5cGUgZGVmaW5pdGlvbnMgYW5kIGRlZmluZXMgZm9yIENvcnRleC1NIHByb2Nlc3NvciBiYXNlZCBkZXZpY2VzLgorKi8KKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfQ09SRSAgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVycworICBcYnJpZWYgICAgICBDb3JlIFJlZ2lzdGVyIHR5cGUgZGVmaW5pdGlvbnMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIEFwcGxpY2F0aW9uIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChBUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6Mjg7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLjI3ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFY6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI4ICBPdmVyZmxvdyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgQzoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjkgIENhcnJ5IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBaOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgTjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzEgIE5lZ2F0aXZlIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gQVBTUl9UeXBlOworCisvKiBBUFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEFQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9OX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1pfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9aX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgTWFzayAqLworCisjZGVmaW5lIEFQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIEludGVycnVwdCBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoSVBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MjM7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBJUFNSX1R5cGU7CisKKy8qIElQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVBTUl9JU1JfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIFBvc2l0aW9uICovCisjZGVmaW5lIElQU1JfSVNSX01zayAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBJUFNSX0lTUl9Qb3MqLykgICAgICAgICAgICAgICAgICAvKiE8IElQU1I6IElTUiBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIFNwZWNpYWwtUHVycG9zZSBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlcnMgKHhQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgSVNSOjk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uIDggIEV4Y2VwdGlvbiBudW1iZXIgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjE1OyAgICAgICAgICAgICAgLyohPCBiaXQ6ICA5Li4yMyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBUOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNCAgVGh1bWIgYml0ICAgICAgICAocmVhZCAwKSAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6MzsgICAgICAgICAgICAgICAvKiE8IGJpdDogMjUuLjI3ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFY6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI4ICBPdmVyZmxvdyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgQzoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjkgIENhcnJ5IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBaOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgTjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzEgIE5lZ2F0aXZlIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30geFBTUl9UeXBlOworCisvKiB4UFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIHhQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9OX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogTiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1pfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9aX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBaIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEMgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogViBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9UX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1RfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9UX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBUIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IHhQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQ29udHJvbCBSZWdpc3RlcnMgKENPTlRST0wpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoxOyAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDAgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgU1BTRUw6MTsgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDEgIFN0YWNrIHRvIGJlIHVzZWQgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOjMwOyAgICAgICAgICAgICAgLyohPCBiaXQ6ICAyLi4zMSAgUmVzZXJ2ZWQgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gQ09OVFJPTF9UeXBlOworCisvKiBDT05UUk9MIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIENPTlRST0xfU1BTRUxfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IFNQU0VMIFBvc2l0aW9uICovCisjZGVmaW5lIENPTlRST0xfU1BTRUxfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBDT05UUk9MX1NQU0VMX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IFNQU0VMIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfQ09SRSAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX05WSUMgIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykKKyAgXGJyaWVmICAgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE5WSUMgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBJU0VSWzFVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIEludGVycnVwdCBTZXQgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFszMVVdOworICBfX0lPTSB1aW50MzJfdCBJQ0VSWzFVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODAgKFIvVykgIEludGVycnVwdCBDbGVhciBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUlNFUlZFRDFbMzFVXTsKKyAgX19JT00gdWludDMyX3QgSVNQUlsxVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzMxVV07CisgIF9fSU9NIHVpbnQzMl90IElDUFJbMVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDE4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzMxVV07CisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENFs2NFVdOworICBfX0lPTSB1aW50MzJfdCBJUFs4VV07ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDAgKFIvVykgIEludGVycnVwdCBQcmlvcml0eSBSZWdpc3RlciAqLworfSAgTlZJQ19UeXBlOworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19OVklDICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TQ0IgICAgIFN5c3RlbSBDb250cm9sIEJsb2NrIChTQ0IpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JTSAgdWludDMyX3QgQ1BVSUQ7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBDUFVJRCBCYXNlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IElDU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgSW50ZXJydXB0IENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFZUT1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgVmVjdG9yIFRhYmxlIE9mZnNldCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBBSVJDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBTQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07CisgIF9fSU9NIHVpbnQzMl90IFNIUFsyVV07ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxQyAoUi9XKSAgU3lzdGVtIEhhbmRsZXJzIFByaW9yaXR5IFJlZ2lzdGVycy4gWzBdIGlzIFJFU0VSVkVEICovCisgIF9fSU9NIHVpbnQzMl90IFNIQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxWzE1NFVdOworICBfX0lPTSB1aW50MzJfdCBTRkNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyOTAgKFIvVykgIFNlY3VyaXR5IEZlYXR1cmVzIENvbnRyb2wgUmVnaXN0ZXIgKi8KK30gU0NCX1R5cGU7CisKKy8qIFNDQiBDUFVJRCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfUG9zICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IElNUExFTUVOVEVSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Nc2sgICAgICAgICAgKDB4RkZVTCA8PCBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfUG9zKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX1BvcyAgICAgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfVkFSSUFOVF9Nc2sgICAgICAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1BVSURfVkFSSUFOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFZBUklBTlQgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9BUkNISVRFQ1RVUkVfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogQVJDSElURUNUVVJFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9BUkNISVRFQ1RVUkVfTXNrICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9BUkNISVRFQ1RVUkVfUG9zKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogQVJDSElURUNUVVJFIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfUEFSVE5PX1BvcyAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFBBUlROTyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfUEFSVE5PX01zayAgICAgICAgICAgICAgICgweEZGRlVMIDw8IFNDQl9DUFVJRF9QQVJUTk9fUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFBBUlROTyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBSRVZJU0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fTXNrICAgICAgICAgICAgICgweEZVTCAvKjw8IFNDQl9DUFVJRF9SRVZJU0lPTl9Qb3MqLykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIE1hc2sgKi8KKworLyogU0NCIEludGVycnVwdCBDb250cm9sIFN0YXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBOTUlQRU5EU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX05NSVBFTkRTRVRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9OTUlQRU5EU0VUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBOTUlQRU5EU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZTRVRfUG9zICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1ZTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVkNMUl9Qb3MgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVkNMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUU0VUX1BvcyAgICAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVFNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNUU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RDTFJfUG9zICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUQ0xSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zICAgICAgICAgICAgMjNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQUkVFTVBUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBSRUVNUFRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQUkVFTVBUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQUkVFTVBUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcyAgICAgICAgICAgIDIyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUEVORElORyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9JU1JQRU5ESU5HX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfSVNSUEVORElOR19Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUEVORElORyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfUG9zICAgICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX01zayAgICAgICAgICAgKDB4MUZGVUwgPDwgU0NCX0lDU1JfVkVDVFBFTkRJTkdfUG9zKSAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUUEVORElORyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RBQ1RJVkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVEFDVElWRV9Nc2sgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zKi8pICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RBQ1RJVkUgTWFzayAqLworCisvKiBTQ0IgSW50ZXJydXB0IENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1ZUT1JfVEJMT0ZGX1BvcyAgICAgICAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTE9GRiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfTXNrICAgICAgICAgICAgICAgICgweDFGRkZGRkZVTCA8PCBTQ0JfVlRPUl9UQkxPRkZfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIE1hc2sgKi8KKworLyogU0NCIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Nc2sgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MpICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zICAgICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfUG9zICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX1BvcyAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Nc2sgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfUG9zICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgTWFzayAqLworCisvKiBTQ0IgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fUG9zICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1NUS0FMSUdOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcyAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcyAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX01zayAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDQiAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NuU0NCIFN5c3RlbSBDb250cm9scyBub3QgaW4gU0NCIChTQ25TQ0IpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2wgYW5kIElEIFJlZ2lzdGVyIG5vdCBpbiB0aGUgU0NCCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgSUQgUmVnaXN0ZXIgbm90IGluIHRoZSBTQ0IuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsyVV07CisgIF9fSU9NIHVpbnQzMl90IEFDVExSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIgKi8KK30gU0NuU0NCX1R5cGU7CisKKy8qIEF1eGlsaWFyeSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX1BvcyAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNNQ1lDSU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX01zayAgICAgICAgKDFVTCAvKjw8IFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX1BvcyovKSAgICAvKiE8IEFDVExSOiBESVNNQ1lDSU5UIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0Nub3RTQ0IgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1N5c1RpY2sgICAgIFN5c3RlbSBUaWNrIFRpbWVyIChTeXNUaWNrKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBUaW1lciBSZWdpc3RlcnMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gVGltZXIgKFN5c1RpY2spLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIFN5c1RpY2sgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IExPQUQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgU3lzVGljayBSZWxvYWQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgVkFMOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBTeXNUaWNrIEN1cnJlbnQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQ0FMSUI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSLyApICBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyICovCit9IFN5c1RpY2tfVHlwZTsKKworLyogU3lzVGljayBDb250cm9sIC8gU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2sgICAgICAgICAgICAoMVVMIC8qPDwgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MqLykgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgTWFzayAqLworCisvKiBTeXNUaWNrIFJlbG9hZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ3VycmVudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Nc2sgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX01zayAgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zKi8pICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TeXNUaWNrICovCisKKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxVSkKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfTVBVICAgICBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JTSAgdWludDMyX3QgVFlQRTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBNUFUgVHlwZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIE1QVSBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJOUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgTVBVIFJlZ2lvbiBSTlJiZXIgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkJBUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQVNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovCit9IE1QVV9UeXBlOworCisvKiBNUFUgVHlwZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfVFlQRV9JUkVHSU9OX1BvcyAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogSVJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfVFlQRV9JUkVHSU9OX01zayAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1RZUEVfSVJFR0lPTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogSVJFR0lPTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1RZUEVfRFJFR0lPTl9Qb3MgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IERSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfRFJFR0lPTl9Nc2sgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9UWVBFX0RSRUdJT05fUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IERSRUdJT04gTWFzayAqLworCisjZGVmaW5lIE1QVV9UWVBFX1NFUEFSQVRFX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBTRVBBUkFURSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfVFlQRV9TRVBBUkFURV9Nc2sgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfVFlQRV9TRVBBUkFURV9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogU0VQQVJBVEUgTWFzayAqLworCisvKiBNUFUgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfQ1RSTF9QUklWREVGRU5BX1BvcyAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogUFJJVkRFRkVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfQ1RSTF9QUklWREVGRU5BX01zayAgICAgICAgICAgICgxVUwgPDwgTVBVX0NUUkxfUFJJVkRFRkVOQV9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogUFJJVkRFRkVOQSBNYXNrICovCisKKyNkZWZpbmUgTVBVX0NUUkxfSEZOTUlFTkFfUG9zICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEhGTk1JRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX0hGTk1JRU5BX01zayAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfQ1RSTF9IRk5NSUVOQV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBIRk5NSUVOQSBNYXNrICovCisKKyNkZWZpbmUgTVBVX0NUUkxfRU5BQkxFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEVOQUJMRSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfQ1RSTF9FTkFCTEVfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfQ1RSTF9FTkFCTEVfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogRU5BQkxFIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBOdW1iZXIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JOUl9SRUdJT05fUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJOUjogUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9STlJfUkVHSU9OX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IE1QVV9STlJfUkVHSU9OX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBSTlI6IFJFR0lPTiBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9SQkFSX0FERFJfUG9zICAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBBRERSIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX0FERFJfTXNrICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGVUwgPDwgTVBVX1JCQVJfQUREUl9Qb3MpICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBBRERSIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkJBUl9WQUxJRF9Qb3MgICAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfVkFMSURfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQkFSX1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkJBUl9SRUdJT05fUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX1JFR0lPTl9Nc2sgICAgICAgICAgICAgICAgKDB4RlVMIC8qPDwgTVBVX1JCQVJfUkVHSU9OX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBSRUdJT04gTWFzayAqLworCisvKiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUkFTUl9BVFRSU19Qb3MgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgZmllbGQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQVRUUlNfTXNrICAgICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgTVBVX1JBU1JfQVRUUlNfUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IE1QVSBSZWdpb24gQXR0cmlidXRlIGZpZWxkIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9YTl9Qb3MgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuWE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfWE5fTXNrICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX1hOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlhOIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9BUF9Qb3MgICAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQVBfTXNrICAgICAgICAgICAgICAgICAgICAoMHg3VUwgPDwgTVBVX1JBU1JfQVBfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkFQIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9URVhfUG9zICAgICAgICAgICAgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuVEVYIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1RFWF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4N1VMIDw8IE1QVV9SQVNSX1RFWF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5URVggTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1NfUG9zICAgICAgICAgICAgICAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5TIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1NfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9TX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5TIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQyBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQyBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfQl9Qb3MgICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkIgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQl9Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX0JfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkIgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1NSRF9Qb3MgICAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBTdWItUmVnaW9uIERpc2FibGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU1JEX01zayAgICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9SQVNSX1NSRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFN1Yi1SZWdpb24gRGlzYWJsZSBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU0laRV9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBTaXplIEZpZWxkIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1NJWkVfTXNrICAgICAgICAgICAgICAgICAgKDB4MUZVTCA8PCBNUFVfUkFTUl9TSVpFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gU2l6ZSBGaWVsZCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfRU5BQkxFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBlbmFibGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0VOQUJMRV9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9SQVNSX0VOQUJMRV9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gZW5hYmxlIGJpdCBEaXNhYmxlIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTVBVICovCisjZW5kaWYKKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAgICAgICBDb3JlIERlYnVnIFJlZ2lzdGVycyAoQ29yZURlYnVnKQorICBcYnJpZWYgICAgU0MwMDAgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMgKERDQiByZWdpc3RlcnMsIFNIQ1NSLCBhbmQgREZTUikgYXJlIG9ubHkgYWNjZXNzaWJsZSBvdmVyIERBUCBhbmQgbm90IHZpYSBwcm9jZXNzb3IuCisgICAgICAgICAgICBUaGVyZWZvcmUgdGhleSBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIFNDMDAwIGhlYWRlciBmaWxlLgorICBAeworICovCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19Db3JlRGVidWcgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2JpdGZpZWxkICAgICBDb3JlIHJlZ2lzdGVyIGJpdCBmaWVsZCBtYWNyb3MKKyAgXGJyaWVmICAgICAgTWFjcm9zIGZvciB1c2Ugd2l0aCBiaXQgZmllbGQgZGVmaW5pdGlvbnMgKHh4eF9Qb3MsIHh4eF9Nc2spLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBNYXNrIGFuZCBzaGlmdCBhIGJpdCBmaWVsZCB2YWx1ZSBmb3IgdXNlIGluIGEgcmVnaXN0ZXIgYml0IHJhbmdlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHRoZSBiaXQgZmllbGQuCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9WQUwyRkxEKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSA8PCBmaWVsZCAjIyBfUG9zKSAmIGZpZWxkICMjIF9Nc2spCisKKy8qKgorICBcYnJpZWYgICAgIE1hc2sgYW5kIHNoaWZ0IGEgcmVnaXN0ZXIgdmFsdWUgdG8gZXh0cmFjdCBhIGJpdCBmaWxlZCB2YWx1ZS4KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiByZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIGJpdCBmaWVsZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9GTEQyVkFMKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSAmIGZpZWxkICMjIF9Nc2spID4+IGZpZWxkICMjIF9Qb3MpCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX2NvcmVfYml0ZmllbGQgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2Jhc2UgICAgIENvcmUgRGVmaW5pdGlvbnMKKyAgXGJyaWVmICAgICAgRGVmaW5pdGlvbnMgZm9yIGJhc2UgYWRkcmVzc2VzLCB1bmlvbnMsIGFuZCBzdHJ1Y3R1cmVzLgorICBAeworICovCisKKy8qIE1lbW9yeSBtYXBwaW5nIG9mIFNDMDAwIEhhcmR3YXJlICovCisjZGVmaW5lIFNDU19CQVNFICAgICAgICAgICAgKDB4RTAwMEUwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBTcGFjZSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU3lzVGlja19CQVNFICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIE5WSUNfQkFTRSAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MDEwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBTQ0JfQkFTRSAgICAgICAgICAgIChTQ1NfQkFTRSArICAweDBEMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgQmxvY2sgQmFzZSBBZGRyZXNzICovCisKKyNkZWZpbmUgU0NuU0NCICAgICAgICAgICAgICAoKFNDblNDQl9UeXBlICAgICopICAgICBTQ1NfQkFTRSAgICAgICkgICAvKiE8IFN5c3RlbSBjb250cm9sIFJlZ2lzdGVyIG5vdCBpbiBTQ0IgKi8KKyNkZWZpbmUgU0NCICAgICAgICAgICAgICAgICAoKFNDQl9UeXBlICAgICAgICopICAgICBTQ0JfQkFTRSAgICAgICkgICAvKiE8IFNDQiBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBTeXNUaWNrICAgICAgICAgICAgICgoU3lzVGlja19UeXBlICAgKikgICAgIFN5c1RpY2tfQkFTRSAgKSAgIC8qITwgU3lzVGljayBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBOVklDICAgICAgICAgICAgICAgICgoTlZJQ19UeXBlICAgICAgKikgICAgIE5WSUNfQkFTRSAgICAgKSAgIC8qITwgTlZJQyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMVUpCisgICNkZWZpbmUgTVBVX0JBU0UgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEQ5MFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICovCisgICNkZWZpbmUgTVBVICAgICAgICAgICAgICAgKChNUFVfVHlwZSAgICAgICAqKSAgICAgTVBVX0JBU0UgICAgICApICAgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICovCisjZW5kaWYKKworLypAfSAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyCisgIENvcmUgRnVuY3Rpb24gSW50ZXJmYWNlIGNvbnRhaW5zOgorICAtIENvcmUgTlZJQyBGdW5jdGlvbnMKKyAgLSBDb3JlIFN5c1RpY2sgRnVuY3Rpb25zCisgIC0gQ29yZSBSZWdpc3RlciBBY2Nlc3MgRnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxkZWZncm91cCBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlIEZ1bmN0aW9ucyBhbmQgSW5zdHJ1Y3Rpb25zIFJlZmVyZW5jZQorKi8KKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgTlZJQyBmdW5jdGlvbnMgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX05WSUNGdW5jdGlvbnMgTlZJQyBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBpbnRlcnJ1cHRzIGFuZCBleGNlcHRpb25zIHZpYSB0aGUgTlZJQy4KKyAgQHsKKyAqLworCisvKiBJbnRlcnJ1cHQgUHJpb3JpdGllcyBhcmUgV09SRCBhY2Nlc3NpYmxlIG9ubHkgdW5kZXIgQVJNdjZNICAgICAgICAgICAgICAgICAgICovCisvKiBUaGUgZm9sbG93aW5nIE1BQ1JPUyBoYW5kbGUgZ2VuZXJhdGlvbiBvZiB0aGUgcmVnaXN0ZXIgb2Zmc2V0IGFuZCBieXRlIG1hc2tzICovCisjZGVmaW5lIF9CSVRfU0hJRlQoSVJRbikgICAgICAgICAoICAoKCgodWludDMyX3QpKGludDMyX3QpKElSUW4pKSAgICAgICAgICkgICAgICAmICAweDAzVUwpICogOFVMKQorI2RlZmluZSBfU0hQX0lEWChJUlFuKSAgICAgICAgICAgKCAoKCgoKHVpbnQzMl90KShpbnQzMl90KShJUlFuKSkgJiAweDBGVUwpLThVTCkgPj4gICAgMlVMKSAgICAgICkKKyNkZWZpbmUgX0lQX0lEWChJUlFuKSAgICAgICAgICAgICggICAoKCh1aW50MzJfdCkoaW50MzJfdCkoSVJRbikpICAgICAgICAgICAgICAgID4+ICAgIDJVTCkgICAgICApCisKKworLyoqCisgIFxicmllZiAgIEVuYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgRW5hYmxlcyBhIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0VuYWJsZUlSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SVNFUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBEaXNhYmxlcyBhIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0Rpc2FibGVJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklDRVJbMFVdID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwZW5kaW5nIHJlZ2lzdGVyIGluIHRoZSBOVklDIGFuZCByZXR1cm5zIHRoZSBwZW5kaW5nIGJpdCBmb3IgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICAwICBJbnRlcnJ1cHQgc3RhdHVzIGlzIG5vdCBwZW5kaW5nLgorICBccmV0dXJuICAgICAgICAgICAgIDEgIEludGVycnVwdCBzdGF0dXMgaXMgcGVuZGluZy4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JU1BSWzBVXSAmICgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgU2V0cyB0aGUgcGVuZGluZyBiaXQgb2YgYW4gZXh0ZXJuYWwgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JU1BSWzBVXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIENsZWFyIFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIENsZWFycyB0aGUgcGVuZGluZyBiaXQgb2YgYW4gZXh0ZXJuYWwgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19DbGVhclBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklDUFJbMFVdID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IEludGVycnVwdCBQcmlvcml0eQorICBcZGV0YWlscyBTZXRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisgIFxub3RlICAgIFRoZSBwcmlvcml0eSBjYW5ub3QgYmUgc2V0IGZvciBldmVyeSBjb3JlIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccGFyYW0gW2luXSAgcHJpb3JpdHkgIFByaW9yaXR5IHRvIHNldC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbiwgdWludDMyX3QgcHJpb3JpdHkpCit7CisgIGlmICgoaW50MzJfdCkoSVJRbikgPCAwKQorICB7CisgICAgU0NCLT5TSFBbX1NIUF9JRFgoSVJRbildID0gKCh1aW50MzJfdCkoU0NCLT5TSFBbX1NIUF9JRFgoSVJRbildICYgfigweEZGVUwgPDwgX0JJVF9TSElGVChJUlFuKSkpIHwKKyAgICAgICAoKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKSA8PCBfQklUX1NISUZUKElSUW4pKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgTlZJQy0+SVBbX0lQX0lEWChJUlFuKV0gID0gKCh1aW50MzJfdCkoTlZJQy0+SVBbX0lQX0lEWChJUlFuKV0gICYgfigweEZGVUwgPDwgX0JJVF9TSElGVChJUlFuKSkpIHwKKyAgICAgICAoKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKSA8PCBfQklUX1NISUZUKElSUW4pKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEludGVycnVwdCBQcmlvcml0eQorICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorICAgICAgICAgICBUaGUgaW50ZXJydXB0IG51bWJlciBjYW4gYmUgcG9zaXRpdmUgdG8gc3BlY2lmeSBhbiBleHRlcm5hbCAoZGV2aWNlIHNwZWNpZmljKSBpbnRlcnJ1cHQsCisgICAgICAgICAgIG9yIG5lZ2F0aXZlIHRvIHNwZWNpZnkgYW4gaW50ZXJuYWwgKGNvcmUpIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIEludGVycnVwdCBQcmlvcml0eS4KKyAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBpcyBhbGlnbmVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIGltcGxlbWVudGVkIHByaW9yaXR5IGJpdHMgb2YgdGhlIG1pY3JvY29udHJvbGxlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4pCit7CisKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICByZXR1cm4oKHVpbnQzMl90KSgoKFNDQi0+U0hQW19TSFBfSURYKElSUW4pXSA+PiBfQklUX1NISUZUKElSUW4pICkgJiAodWludDMyX3QpMHhGRlVMKSA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SVBbIF9JUF9JRFgoSVJRbildID4+IF9CSVRfU0hJRlQoSVJRbikgKSAmICh1aW50MzJfdCkweEZGVUwpID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgU3lzdGVtIFJlc2V0CisgIFxkZXRhaWxzIEluaXRpYXRlcyBhIHN5c3RlbSByZXNldCByZXF1ZXN0IHRvIHJlc2V0IHRoZSBNQ1UuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU3lzdGVtUmVzZXQodm9pZCkKK3sKKyAgX19EU0IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIGFsbCBvdXRzdGFuZGluZyBtZW1vcnkgYWNjZXNzZXMgaW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyZWQgd3JpdGUgYXJlIGNvbXBsZXRlZCBiZWZvcmUgcmVzZXQgKi8KKyAgU0NCLT5BSVJDUiAgPSAoKDB4NUZBVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSB8CisgICAgICAgICAgICAgICAgIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2spOworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgY29tcGxldGlvbiBvZiBtZW1vcnkgYWNjZXNzICovCisKKyAgZm9yKDs7KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2FpdCB1bnRpbCByZXNldCAqLworICB7CisgICAgX19OT1AoKTsKKyAgfQorfQorCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX05WSUNGdW5jdGlvbnMgKi8KKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgU3lzVGljayBmdW5jdGlvbiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zIFN5c1RpY2sgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBjb25maWd1cmUgdGhlIFN5c3RlbS4KKyAgQHsKKyAqLworCisjaWYgKF9fVmVuZG9yX1N5c1RpY2tDb25maWcgPT0gMFUpCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gVGljayBDb25maWd1cmF0aW9uCisgIFxkZXRhaWxzIEluaXRpYWxpemVzIHRoZSBTeXN0ZW0gVGltZXIgYW5kIGl0cyBpbnRlcnJ1cHQsIGFuZCBzdGFydHMgdGhlIFN5c3RlbSBUaWNrIFRpbWVyLgorICAgICAgICAgICBDb3VudGVyIGlzIGluIGZyZWUgcnVubmluZyBtb2RlIHRvIGdlbmVyYXRlIHBlcmlvZGljIGludGVycnVwdHMuCisgIFxwYXJhbSBbaW5dICB0aWNrcyAgTnVtYmVyIG9mIHRpY2tzIGJldHdlZW4gdHdvIGludGVycnVwdHMuCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkLgorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZC4KKyAgXG5vdGUgICAgV2hlbiB0aGUgdmFyaWFibGUgPGI+X19WZW5kb3JfU3lzVGlja0NvbmZpZzwvYj4gaXMgc2V0IHRvIDEsIHRoZW4gdGhlCisgICAgICAgICAgIGZ1bmN0aW9uIDxiPlN5c1RpY2tfQ29uZmlnPC9iPiBpcyBub3QgaW5jbHVkZWQuIEluIHRoaXMgY2FzZSwgdGhlIGZpbGUgPGI+PGk+ZGV2aWNlPC9pPi5oPC9iPgorICAgICAgICAgICBtdXN0IGNvbnRhaW4gYSB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFN5c1RpY2tfQ29uZmlnKHVpbnQzMl90IHRpY2tzKQoreworICBpZiAoKHRpY2tzIC0gMVVMKSA+IFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrKQorICB7CisgICAgcmV0dXJuICgxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbG9hZCB2YWx1ZSBpbXBvc3NpYmxlICovCisgIH0KKworICBTeXNUaWNrLT5MT0FEICA9ICh1aW50MzJfdCkodGlja3MgLSAxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgcmVsb2FkIHJlZ2lzdGVyICovCisgIE5WSUNfU2V0UHJpb3JpdHkgKFN5c1RpY2tfSVJRbiwgKDFVTCA8PCBfX05WSUNfUFJJT19CSVRTKSAtIDFVTCk7IC8qIHNldCBQcmlvcml0eSBmb3IgU3lzdGljayBJbnRlcnJ1cHQgKi8KKyAgU3lzVGljay0+VkFMICAgPSAwVUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9hZCB0aGUgU3lzVGljayBDb3VudGVyIFZhbHVlICovCisgIFN5c1RpY2stPkNUUkwgID0gU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgIHwKKyAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfRU5BQkxFX01zazsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIFN5c1RpY2sgSVJRIGFuZCBTeXNUaWNrIFRpbWVyICovCisgIHJldHVybiAoMFVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIHN1Y2Nlc3NmdWwgKi8KK30KKworI2VuZGlmCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfU3lzVGlja0Z1bmN0aW9ucyAqLworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DT1JFX1NDMDAwX0hfREVQRU5EQU5UICovCisKKyNlbmRpZiAvKiBfX0NNU0lTX0dFTkVSSUMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfc2MzMDAuaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfc2MzMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmQxOGFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9zYzMwMC5oCkBAIC0wLDAgKzEsMTc0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNvcmVfc2MzMDAuaAorICogQGJyaWVmICAgIENNU0lTIFNDMzAwIENvcmUgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9TQzMwMF9IX0dFTkVSSUMKKyNkZWZpbmUgX19DT1JFX1NDMzAwX0hfR0VORVJJQworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICBccGFnZSBDTVNJU19NSVNSQV9FeGNlcHRpb25zICBNSVNSQS1DOjIwMDQgQ29tcGxpYW5jZSBFeGNlcHRpb25zCisgIENNU0lTIHZpb2xhdGVzIHRoZSBmb2xsb3dpbmcgTUlTUkEtQzoyMDA0IHJ1bGVzOgorCisgICBcbGkgUmVxdWlyZWQgUnVsZSA4LjUsIG9iamVjdC9mdW5jdGlvbiBkZWZpbml0aW9uIGluIGhlYWRlciBmaWxlLjxicj4KKyAgICAgRnVuY3Rpb24gZGVmaW5pdGlvbnMgaW4gaGVhZGVyIGZpbGVzIGFyZSB1c2VkIHRvIGFsbG93ICdpbmxpbmluZycuCisKKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDE4LjQsIGRlY2xhcmF0aW9uIG9mIHVuaW9uIHR5cGUgb3Igb2JqZWN0IG9mIHVuaW9uIHR5cGU6ICd7Li4ufScuPGJyPgorICAgICBVbmlvbnMgYXJlIHVzZWQgZm9yIGVmZmVjdGl2ZSByZXByZXNlbnRhdGlvbiBvZiBjb3JlIHJlZ2lzdGVycy4KKworICAgXGxpIEFkdmlzb3J5IFJ1bGUgMTkuNywgRnVuY3Rpb24tbGlrZSBtYWNybyBkZWZpbmVkLjxicj4KKyAgICAgRnVuY3Rpb24tbGlrZSBtYWNyb3MgYXJlIHVzZWQgdG8gYWxsb3cgbW9yZSBlZmZpY2llbnQgY29kZS4KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgQ01TSVMgZGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGluZ3JvdXAgU0MzMDAwCisgIEB7CisgKi8KKworLyogIENNU0lTIFNDMzAwIGRlZmluaXRpb25zICovCisjZGVmaW5lIF9fU0MzMDBfQ01TSVNfVkVSU0lPTl9NQUlOICAoMHgwNFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBbMzE6MTZdIENNU0lTIEhBTCBtYWluIHZlcnNpb24gKi8KKyNkZWZpbmUgX19TQzMwMF9DTVNJU19WRVJTSU9OX1NVQiAgICgweDFFVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFsxNTowXSAgQ01TSVMgSEFMIHN1YiB2ZXJzaW9uICovCisjZGVmaW5lIF9fU0MzMDBfQ01TSVNfVkVSU0lPTiAgICAgICAoKF9fU0MzMDBfQ01TSVNfVkVSU0lPTl9NQUlOIDw8IDE2VSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fU0MzMDBfQ01TSVNfVkVSU0lPTl9TVUIgICAgICAgICAgICkgICAgLyohPCBDTVNJUyBIQUwgdmVyc2lvbiBudW1iZXIgKi8KKworI2RlZmluZSBfX0NPUlRFWF9TQyAgICAgICAgICAgICAgICAgKDMwMFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29ydGV4IHNlY3VyZSBjb3JlICovCisKKworI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIF9faW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBfX2lubGluZQorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBJQVIgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBJQVIgQ29tcGlsZXIuIE9ubHkgYXZhaWxhYmxlIGluIEhpZ2ggb3B0aW1pemF0aW9uIG1vZGUhICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBUSSBDQ1MgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgVEFTS0lORyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjZGVmaW5lIF9fcGFja2VkCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBDT1NNSUMgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlci4gVXNlIC1wYzk5IG9uIGNvbXBpbGUgbGluZSAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxzZQorICAjZXJyb3IgVW5rbm93biBjb21waWxlcgorI2VuZGlmCisKKy8qKiBfX0ZQVV9VU0VEIGluZGljYXRlcyB3aGV0aGVyIGFuIEZQVSBpcyB1c2VkIG9yIG5vdC4KKyAgICBUaGlzIGNvcmUgZG9lcyBub3Qgc3VwcG9ydCBhbiBGUFUgYXQgYWxsCisqLworI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisKKyNpZiBkZWZpbmVkICggX19DQ19BUk0gKQorICAjaWYgZGVmaW5lZCBfX1RBUkdFVF9GUFVfVkZQCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2lmIGRlZmluZWQgX19BUk1fUENTX1ZGUAorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNpZiBkZWZpbmVkIChfX1ZGUF9GUF9fKSAmJiAhZGVmaW5lZChfX1NPRlRGUF9fKQorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2lmIGRlZmluZWQgX19BUk1WRlBfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2lmIGRlZmluZWQgX19USV9WRlBfU1VQUE9SVF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgI2lmIGRlZmluZWQgX19GUFVfVkZQX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjaWYgKCBfX0NTTUNfXyAmIDB4NDAwVSkKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZW5kaWYKKworI2luY2x1ZGUgImNvcmVfY21JbnN0ci5oIiAgICAgICAgICAgICAgICAvKiBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAqLworI2luY2x1ZGUgImNvcmVfY21GdW5jLmgiICAgICAgICAgICAgICAgICAvKiBDb3JlIEZ1bmN0aW9uIEFjY2VzcyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DT1JFX1NDMzAwX0hfR0VORVJJQyAqLworCisjaWZuZGVmIF9fQ01TSVNfR0VORVJJQworCisjaWZuZGVmIF9fQ09SRV9TQzMwMF9IX0RFUEVOREFOVAorI2RlZmluZSBfX0NPUkVfU0MzMDBfSF9ERVBFTkRBTlQKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogY2hlY2sgZGV2aWNlIGRlZmluZXMgYW5kIHVzZSBkZWZhdWx0cyAqLworI2lmIGRlZmluZWQgX19DSEVDS19ERVZJQ0VfREVGSU5FUworICAjaWZuZGVmIF9fU0MzMDBfUkVWCisgICAgI2RlZmluZSBfX1NDMzAwX1JFViAgICAgICAgICAgICAgIDB4MDAwMFUKKyAgICAjd2FybmluZyAiX19TQzMwMF9SRVYgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX01QVV9QUkVTRU5UCisgICAgI2RlZmluZSBfX01QVV9QUkVTRU5UICAgICAgICAgICAgIDBVCisgICAgI3dhcm5pbmcgIl9fTVBVX1BSRVNFTlQgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX05WSUNfUFJJT19CSVRTCisgICAgI2RlZmluZSBfX05WSUNfUFJJT19CSVRTICAgICAgICAgIDRVCisgICAgI3dhcm5pbmcgIl9fTlZJQ19QUklPX0JJVFMgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnCisgICAgI2RlZmluZSBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnICAgIDBVCisgICAgI3dhcm5pbmcgIl9fVmVuZG9yX1N5c1RpY2tDb25maWcgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisjZW5kaWYKKworLyogSU8gZGVmaW5pdGlvbnMgKGFjY2VzcyByZXN0cmljdGlvbnMgdG8gcGVyaXBoZXJhbCByZWdpc3RlcnMpICovCisvKioKKyAgICBcZGVmZ3JvdXAgQ01TSVNfZ2xvYl9kZWZzIENNU0lTIEdsb2JhbCBEZWZpbmVzCisKKyAgICA8c3Ryb25nPklPIFR5cGUgUXVhbGlmaWVyczwvc3Ryb25nPiBhcmUgdXNlZAorICAgIFxsaSB0byBzcGVjaWZ5IHRoZSBhY2Nlc3MgdG8gcGVyaXBoZXJhbCB2YXJpYWJsZXMuCisgICAgXGxpIGZvciBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBwZXJpcGhlcmFsIHJlZ2lzdGVyIGRlYnVnIGluZm9ybWF0aW9uLgorKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworICAjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8KKyNlbHNlCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2VuZGlmCisjZGVmaW5lICAgICBfX08gICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAnd3JpdGUgb25seScgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU8gICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHBlcm1pc3Npb25zICovCisKKy8qIGZvbGxvd2luZyBkZWZpbmVzIHNob3VsZCBiZSB1c2VkIGZvciBzdHJ1Y3R1cmUgbWVtYmVycyAqLworI2RlZmluZSAgICAgX19JTSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAvKiEgRGVmaW5lcyAncmVhZCBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX09NICAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICd3cml0ZSBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX0lPTSAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgU0MzMDAgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQWJzdHJhY3Rpb24KKyAgQ29yZSBSZWdpc3RlciBjb250YWluOgorICAtIENvcmUgUmVnaXN0ZXIKKyAgLSBDb3JlIE5WSUMgUmVnaXN0ZXIKKyAgLSBDb3JlIFNDQiBSZWdpc3RlcgorICAtIENvcmUgU3lzVGljayBSZWdpc3RlcgorICAtIENvcmUgRGVidWcgUmVnaXN0ZXIKKyAgLSBDb3JlIE1QVSBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfY29yZV9yZWdpc3RlciBEZWZpbmVzIGFuZCBUeXBlIERlZmluaXRpb25zCisgIFxicmllZiBUeXBlIGRlZmluaXRpb25zIGFuZCBkZWZpbmVzIGZvciBDb3J0ZXgtTSBwcm9jZXNzb3IgYmFzZWQgZGV2aWNlcy4KKyovCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX0NPUkUgIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcnMKKyAgXGJyaWVmICAgICAgQ29yZSBSZWdpc3RlciB0eXBlIGRlZmluaXRpb25zLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoQVBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjI3OyAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4yNiAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBROjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNyAgU2F0dXJhdGlvbiBjb25kaXRpb24gZmxhZyAqLworICAgIHVpbnQzMl90IFY6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI4ICBPdmVyZmxvdyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgQzoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjkgIENhcnJ5IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBaOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgTjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzEgIE5lZ2F0aXZlIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gQVBTUl9UeXBlOworCisvKiBBUFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEFQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9OX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1pfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9aX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgTWFzayAqLworCisjZGVmaW5lIEFQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9RX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogUSBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1FfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9RX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBRIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgSW50ZXJydXB0IFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChJUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyMzsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IElQU1JfVHlwZTsKKworLyogSVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJUFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IElQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgU3BlY2lhbC1QdXJwb3NlIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVycyAoeFBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MTU7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjIzICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFQ6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI0ICBUaHVtYiBiaXQgICAgICAgIChyZWFkIDApICovCisgICAgdWludDMyX3QgSVQ6MjsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAyNS4uMjYgIHNhdmVkIElUIHN0YXRlICAgKHJlYWQgMCkgKi8KKyAgICB1aW50MzJfdCBROjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNyAgU2F0dXJhdGlvbiBjb25kaXRpb24gZmxhZyAqLworICAgIHVpbnQzMl90IFY6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI4ICBPdmVyZmxvdyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgQzoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjkgIENhcnJ5IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBaOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgTjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzEgIE5lZ2F0aXZlIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30geFBTUl9UeXBlOworCisvKiB4UFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIHhQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9OX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogTiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1pfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9aX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBaIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEMgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogViBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9RX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogUSBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1FfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9RX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBRIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0lUX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJVCBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0lUX01zayAgICAgICAgICAgICAgICAgICAgICAgICgzVUwgPDwgeFBTUl9JVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJVCBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9UX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1RfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9UX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBUIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IHhQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQ29udHJvbCBSZWdpc3RlcnMgKENPTlRST0wpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgblBSSVY6MTsgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDAgIEV4ZWN1dGlvbiBwcml2aWxlZ2UgaW4gVGhyZWFkIG1vZGUgKi8KKyAgICB1aW50MzJfdCBTUFNFTDoxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMSAgU3RhY2sgdG8gYmUgdXNlZCAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6MzA7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDIuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBDT05UUk9MX1R5cGU7CisKKy8qIENPTlRST0wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IENPTlRST0xfU1BTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgTWFzayAqLworCisjZGVmaW5lIENPTlRST0xfblBSSVZfUG9zICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IG5QUklWIFBvc2l0aW9uICovCisjZGVmaW5lIENPTlRST0xfblBSSVZfTXNrICAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IENPTlRST0xfblBSSVZfUG9zKi8pICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IG5QUklWIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfQ09SRSAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX05WSUMgIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykKKyAgXGJyaWVmICAgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE5WSUMgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBJU0VSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIEludGVycnVwdCBTZXQgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsyNFVdOworICBfX0lPTSB1aW50MzJfdCBJQ0VSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODAgKFIvVykgIEludGVycnVwdCBDbGVhciBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUlNFUlZFRDFbMjRVXTsKKyAgX19JT00gdWludDMyX3QgSVNQUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzI0VV07CisgIF9fSU9NIHVpbnQzMl90IElDUFJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDE4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzI0VV07CisgIF9fSU9NIHVpbnQzMl90IElBQlJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDIwMCAoUi9XKSAgSW50ZXJydXB0IEFjdGl2ZSBiaXQgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzU2VV07CisgIF9fSU9NIHVpbnQ4X3QgIElQWzI0MFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwMCAoUi9XKSAgSW50ZXJydXB0IFByaW9yaXR5IFJlZ2lzdGVyICg4Qml0IHdpZGUpICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENVs2NDRVXTsKKyAgX19PTSAgdWludDMyX3QgU1RJUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTAwICggL1cpICBTb2Z0d2FyZSBUcmlnZ2VyIEludGVycnVwdCBSZWdpc3RlciAqLworfSAgTlZJQ19UeXBlOworCisvKiBTb2Z0d2FyZSBUcmlnZ2VyZWQgSW50ZXJydXB0IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE5WSUNfU1RJUl9JTlRJRF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNUSVI6IElOVExJTkVTTlVNIFBvc2l0aW9uICovCisjZGVmaW5lIE5WSUNfU1RJUl9JTlRJRF9Nc2sgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBOVklDX1NUSVJfSU5USURfUG9zKi8pICAgICAgICAvKiE8IFNUSVI6IElOVExJTkVTTlVNIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTlZJQyAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NCICAgICBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU0gIHVpbnQzMl90IENQVUlEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgQ1BVSUQgQmFzZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBJQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEludGVycnVwdCBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBWVE9SOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFZlY3RvciBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQUlSQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgU0NSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIENvbmZpZ3VyYXRpb24gQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50OF90ICBTSFBbMTJVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIFN5c3RlbSBIYW5kbGVycyBQcmlvcml0eSBSZWdpc3RlcnMgKDQtNywgOC0xMSwgMTItMTUpICovCisgIF9fSU9NIHVpbnQzMl90IFNIQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ0ZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI4IChSL1cpICBDb25maWd1cmFibGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEhGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyQyAoUi9XKSAgSGFyZEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBERlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzAgKFIvVykgIERlYnVnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBNTUZBUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzQgKFIvVykgIE1lbU1hbmFnZSBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEJGQVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzOCAoUi9XKSAgQnVzRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBBRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwM0MgKFIvVykgIEF1eGlsaWFyeSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgUEZSWzJVXTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQwIChSLyApICBQcm9jZXNzb3IgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBERlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDggKFIvICkgIERlYnVnIEZlYXR1cmUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQURSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDRDIChSLyApICBBdXhpbGlhcnkgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBNTUZSWzRVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTAgKFIvICkgIE1lbW9yeSBNb2RlbCBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IElTQVJbNVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA2MCAoUi8gKSAgSW5zdHJ1Y3Rpb24gU2V0IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzVVXTsKKyAgX19JT00gdWludDMyX3QgQ1BBQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDg4IChSL1cpICBDb3Byb2Nlc3NvciBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbMTI5VV07CisgIF9fSU9NIHVpbnQzMl90IFNGQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDI5MCAoUi9XKSAgU2VjdXJpdHkgRmVhdHVyZXMgQ29udHJvbCBSZWdpc3RlciAqLworfSBTQ0JfVHlwZTsKKworLyogU0NCIENQVUlEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX01zayAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfUG9zICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9WQVJJQU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Nc2sgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fUG9zICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fTXNrICAgICAgICAgICAgICAgKDB4RkZGVUwgPDwgU0NCX0NQVUlEX1BBUlROT19Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Nc2sgICAgICAgICAgICAgKDB4RlVMIC8qPDwgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyovKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gTWFzayAqLworCisvKiBTQ0IgSW50ZXJydXB0IENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcyAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfTXNrICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MpICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9SRVRUT0JBU0VfUG9zICAgICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUkVUVE9CQVNFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1JFVFRPQkFTRV9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9SRVRUT0JBU0VfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBSRVRUT0JBU0UgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfTXNrICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyovKSAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIE1hc2sgKi8KKworLyogU0NCIFZlY3RvciBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1ZUT1JfVEJMQkFTRV9Qb3MgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTEJBU0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1ZUT1JfVEJMQkFTRV9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9WVE9SX1RCTEJBU0VfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTEJBU0UgTWFzayAqLworCisjZGVmaW5lIFNDQl9WVE9SX1RCTE9GRl9Qb3MgICAgICAgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxPRkYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1ZUT1JfVEJMT0ZGX01zayAgICAgICAgICAgICAgICAoMHgzRkZGRkZVTCA8PCBTQ0JfVlRPUl9UQkxPRkZfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTE9GRiBNYXNrICovCisKKy8qIFNDQiBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZX01zayAgICAgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX1BvcyAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZU1RBVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfTXNrICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zKSAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcyAgICAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IEVORElBTkVTUyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfRU5ESUFORVNTX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX0VORElBTkVTU19Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IEVORElBTkVTUyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1BSSUdST1VQX1BvcyAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBQUklHUk9VUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrICAgICAgICAgICAgICg3VUwgPDwgU0NCX0FJUkNSX1BSSUdST1VQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFBSSUdST1VQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfUG9zICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX1BvcyAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Nc2sgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUUkVTRVRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVFJFU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUUkVTRVRfTXNrICAgICAgICAgICAgKDFVTCAvKjw8IFNDQl9BSVJDUl9WRUNUUkVTRVRfUG9zKi8pICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVFJFU0VUIE1hc2sgKi8KKworLyogU0NCIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NFVk9OUEVORF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TRVZPTlBFTkRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTRVZPTlBFTkQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX1BvcyAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NMRUVQREVFUF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TTEVFUERFRVBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUERFRVAgTWFzayAqLworCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQT05FWElUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBPTkVYSVRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQT05FWElUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQT05FWElUIE1hc2sgKi8KKworLyogU0NCIENvbmZpZ3VyYXRpb24gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQ0NSX1NUS0FMSUdOX1BvcyAgICAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBTVEtBTElHTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1NUS0FMSUdOX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9TVEtBTElHTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBTVEtBTElHTiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9CRkhGTk1JR05fUG9zICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogQkZIRk5NSUdOIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfQkZIRk5NSUdOX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX0JGSEZOTUlHTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IEJGSEZOTUlHTiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9ESVZfMF9UUlBfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogRElWXzBfVFJQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfRElWXzBfVFJQX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX0RJVl8wX1RSUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IERJVl8wX1RSUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVU5BTElHTl9UUlAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9VTkFMSUdOX1RSUF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfVU5BTElHTl9UUlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVU5BTElHTl9UUlAgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfVVNFUlNFVE1QRU5EX1BvcyAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVTRVJTRVRNUEVORCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1VTRVJTRVRNUEVORF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9VU0VSU0VUTVBFTkRfUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVU0VSU0VUTVBFTkQgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfTk9OQkFTRVRIUkRFTkFfUG9zICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IE5PTkJBU0VUSFJERU5BIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfTk9OQkFTRVRIUkRFTkFfTXNrICAgICAgICAgKDFVTCAvKjw8IFNDQl9DQ1JfTk9OQkFTRVRIUkRFTkFfUG9zKi8pICAgICAgICAvKiE8IFNDQiBDQ1I6IE5PTkJBU0VUSFJERU5BIE1hc2sgKi8KKworLyogU0NCIFN5c3RlbSBIYW5kbGVyIENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVEVOQV9Qb3MgICAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9VU0dGQVVMVEVOQV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEVOQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxURU5BX1BvcyAgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX0JVU0ZBVUxURU5BX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxURU5BIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRFTkFfUG9zICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfTUVNRkFVTFRFTkFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRFTkEgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExQRU5ERURfUG9zICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExQRU5ERURfTXNrICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMUEVOREVEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRQRU5ERURfUG9zICAgICAgIDE0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Nc2sgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRQRU5ERURfUG9zKSAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVFBFTkRFRF9Qb3MgICAgICAgMTNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NRU1GQVVMVFBFTkRFRF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUUEVOREVEX1BvcyAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfTXNrICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxUUEVOREVEX1BvcykgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUUEVOREVEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfU1lTVElDS0FDVF9Qb3MgICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNZU1RJQ0tBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TWVNUSUNLQUNUX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTWVNUSUNLQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfUEVORFNWQUNUX1BvcyAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFBFTkRTVkFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfUEVORFNWQUNUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1BFTkRTVkFDVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFBFTkRTVkFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01PTklUT1JBQ1RfUG9zICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNT05JVE9SQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9NT05JVE9SQUNUX01zayAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfTU9OSVRPUkFDVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTU9OSVRPUkFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTEFDVF9Qb3MgICAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTEFDVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TVkNBTExBQ1RfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVEFDVF9Qb3MgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9VU0dGQVVMVEFDVF9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUQUNUX1BvcyAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX0JVU0ZBVUxUQUNUX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRBQ1RfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Nc2sgICAgICAgICAgKDFVTCAvKjw8IFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Qb3MqLykgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRBQ1QgTWFzayAqLworCisvKiBTQ0IgQ29uZmlndXJhYmxlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQ0ZTUl9VU0dGQVVMVFNSX1BvcyAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogVXNhZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX1VTR0ZBVUxUU1JfTXNrICAgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9DRlNSX1VTR0ZBVUxUU1JfUG9zKSAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBVc2FnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DRlNSX0JVU0ZBVUxUU1JfUG9zICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBCdXMgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX0JVU0ZBVUxUU1JfTXNrICAgICAgICAgICAgKDB4RkZVTCA8PCBTQ0JfQ0ZTUl9CVVNGQVVMVFNSX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBCdXMgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9NRU1GQVVMVFNSX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogTWVtb3J5IE1hbmFnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfTUVNRkFVTFRTUl9Nc2sgICAgICAgICAgICAoMHhGRlVMIC8qPDwgU0NCX0NGU1JfTUVNRkFVTFRTUl9Qb3MqLykgICAgICAgIC8qITwgU0NCIENGU1I6IE1lbW9yeSBNYW5hZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIE1hc2sgKi8KKworLyogU0NCIEhhcmQgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9IRlNSX0RFQlVHRVZUX1BvcyAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBERUJVR0VWVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSEZTUl9ERUJVR0VWVF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0hGU1JfREVCVUdFVlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogREVCVUdFVlQgTWFzayAqLworCisjZGVmaW5lIFNDQl9IRlNSX0ZPUkNFRF9Qb3MgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBGT1JDRUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0hGU1JfRk9SQ0VEX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9IRlNSX0ZPUkNFRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IEZPUkNFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0hGU1JfVkVDVFRCTF9Qb3MgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IFZFQ1RUQkwgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0hGU1JfVkVDVFRCTF9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9IRlNSX1ZFQ1RUQkxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IFZFQ1RUQkwgTWFzayAqLworCisvKiBTQ0IgRGVidWcgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9ERlNSX0VYVEVSTkFMX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBFWFRFUk5BTCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9FWFRFUk5BTF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfRVhURVJOQUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRVhURVJOQUwgTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX1ZDQVRDSF9Qb3MgICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBWQ0FUQ0ggUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfVkNBVENIX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX1ZDQVRDSF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IFZDQVRDSCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfRFdUVFJBUF9Qb3MgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IERXVFRSQVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfRFdUVFJBUF9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX0RXVFRSQVBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IERXVFRSQVAgTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX0JLUFRfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBCS1BUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX0JLUFRfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9CS1BUX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBCS1BUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9IQUxURURfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogSEFMVEVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX0hBTFRFRF9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IFNDQl9ERlNSX0hBTFRFRF9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBIQUxURUQgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TQ0IgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1NDblNDQiBTeXN0ZW0gQ29udHJvbHMgbm90IGluIFNDQiAoU0NuU0NCKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBDb250cm9sIGFuZCBJRCBSZWdpc3RlciBub3QgaW4gdGhlIFNDQgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIENvbnRyb2wgYW5kIElEIFJlZ2lzdGVyIG5vdCBpbiB0aGUgU0NCLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMVVdOworICBfX0lNICB1aW50MzJfdCBJQ1RSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvICkgIEludGVycnVwdCBDb250cm9sbGVyIFR5cGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxWzFVXTsKK30gU0NuU0NCX1R5cGU7CisKKy8qIEludGVycnVwdCBDb250cm9sbGVyIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NuU0NCX0lDVFJfSU5UTElORVNOVU1fUG9zICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSUNUUjogSU5UTElORVNOVU0gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0lDVFJfSU5UTElORVNOVU1fTXNrICAgICAgICAoMHhGVUwgLyo8PCBTQ25TQ0JfSUNUUl9JTlRMSU5FU05VTV9Qb3MqLykgIC8qITwgSUNUUjogSU5UTElORVNOVU0gTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TQ25vdFNDQiAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU3lzVGljayAgICAgU3lzdGVtIFRpY2sgVGltZXIgKFN5c1RpY2spCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIFRpbWVyIFJlZ2lzdGVycy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBUaW1lciAoU3lzVGljaykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgU3lzVGljayBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgTE9BRDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBTeXNUaWNrIFJlbG9hZCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBWQUw7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFN5c1RpY2sgQ3VycmVudCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBDQUxJQjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvICkgIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgKi8KK30gU3lzVGlja19UeXBlOworCisvKiBTeXNUaWNrIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcykgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICgxVUwgLyo8PCBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBNYXNrICovCisKKy8qIFN5c1RpY2sgUmVsb2FkIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIE1hc2sgKi8KKworLyogU3lzVGljayBDdXJyZW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIE1hc2sgKi8KKworLyogU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX01zayAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX1BvcyAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfTXNrICAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9TS0VXX1BvcykgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19DQUxJQl9URU5NU19Qb3MqLykgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1N5c1RpY2sgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0lUTSAgICAgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCAoSVRNKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIEluc3RydW1lbnRhdGlvbiBUcmFjZSBNYWNyb2NlbGwgKElUTSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIEluc3RydW1lbnRhdGlvbiBUcmFjZSBNYWNyb2NlbGwgUmVnaXN0ZXIgKElUTSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fT00gIHVuaW9uCisgIHsKKyAgICBfX09NICB1aW50OF90ICAgIHU4OyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCA4LWJpdCAqLworICAgIF9fT00gIHVpbnQxNl90ICAgdTE2OyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IDE2LWJpdCAqLworICAgIF9fT00gIHVpbnQzMl90ICAgdTMyOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IDMyLWJpdCAqLworICB9ICBQT1JUIFszMlVdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IFJlZ2lzdGVycyAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbODY0VV07CisgIF9fSU9NIHVpbnQzMl90IFRFUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEUwMCAoUi9XKSAgSVRNIFRyYWNlIEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbMTVVXTsKKyAgX19JT00gdWludDMyX3QgVFBSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTQwIChSL1cpICBJVE0gVHJhY2UgUHJpdmlsZWdlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlsxNVVdOworICBfX0lPTSB1aW50MzJfdCBUQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFODAgKFIvVykgIElUTSBUcmFjZSBDb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1syOVVdOworICBfX09NICB1aW50MzJfdCBJV1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRjggKCAvVykgIElUTSBJbnRlZ3JhdGlvbiBXcml0ZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBJUlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRkMgKFIvICkgIElUTSBJbnRlZ3JhdGlvbiBSZWFkIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IElNQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEYwMCAoUi9XKSAgSVRNIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDRbNDNVXTsKKyAgX19PTSAgdWludDMyX3QgTEFSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkIwICggL1cpICBJVE0gTG9jayBBY2Nlc3MgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgTFNSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkI0IChSLyApICBJVE0gTG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ1WzZVXTsKKyAgX19JTSAgdWludDMyX3QgUElENDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkQwIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNCAqLworICBfX0lNICB1aW50MzJfdCBQSUQ1OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRDQgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM1ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDY7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEOCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzYgKi8KKyAgX19JTSAgdWludDMyX3QgUElENzsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkRDIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNyAqLworICBfX0lNICB1aW50MzJfdCBQSUQwOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRTAgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMwICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDE7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFNCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzEgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkU4IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMiAqLworICBfX0lNICB1aW50MzJfdCBQSUQzOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRUMgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMzICovCisgIF9fSU0gIHVpbnQzMl90IENJRDA7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGMCAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzAgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkY0IChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMSAqLworICBfX0lNICB1aW50MzJfdCBDSUQyOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRjggKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMyICovCisgIF9fSU0gIHVpbnQzMl90IENJRDM7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGQyAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzMgKi8KK30gSVRNX1R5cGU7CisKKy8qIElUTSBUcmFjZSBQcml2aWxlZ2UgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX1RQUl9QUklWTUFTS19Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRQUjogUFJJVk1BU0sgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RQUl9QUklWTUFTS19Nc2sgICAgICAgICAgICAgICAoMHhGVUwgLyo8PCBJVE1fVFBSX1BSSVZNQVNLX1BvcyovKSAgICAgICAgICAgIC8qITwgSVRNIFRQUjogUFJJVk1BU0sgTWFzayAqLworCisvKiBJVE0gVHJhY2UgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fVENSX0JVU1lfUG9zICAgICAgICAgICAgICAgICAgIDIzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBCVVNZIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfQlVTWV9Nc2sgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX0JVU1lfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEJVU1kgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfVHJhY2VCdXNJRF9Qb3MgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEFUQklEIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfVHJhY2VCdXNJRF9Nc2sgICAgICAgICAgICAgKDB4N0ZVTCA8PCBJVE1fVENSX1RyYWNlQnVzSURfUG9zKSAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEFUQklEIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX0dUU0ZSRVFfUG9zICAgICAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBHbG9iYWwgdGltZXN0YW1wIGZyZXF1ZW5jeSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0dUU0ZSRVFfTXNrICAgICAgICAgICAgICAgICgzVUwgPDwgSVRNX1RDUl9HVFNGUkVRX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBHbG9iYWwgdGltZXN0YW1wIGZyZXF1ZW5jeSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9UU1ByZXNjYWxlX1BvcyAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNQcmVzY2FsZSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1RTUHJlc2NhbGVfTXNrICAgICAgICAgICAgICgzVUwgPDwgSVRNX1RDUl9UU1ByZXNjYWxlX1BvcykgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU1ByZXNjYWxlIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1NXT0VOQV9Qb3MgICAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTV09FTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9TV09FTkFfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfU1dPRU5BX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1dPRU5BIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX0RXVEVOQV9Qb3MgICAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBEV1RFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9EV1RFTkFfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfRFdURU5BX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogRFdURU5BIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1NZTkNFTkFfUG9zICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTWU5DRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfU1lOQ0VOQV9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX1NZTkNFTkFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNZTkNFTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfVFNFTkFfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfVFNFTkFfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX1RTRU5BX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTRU5BIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX0lUTUVOQV9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBJVE0gRW5hYmxlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0lUTUVOQV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBJVE1fVENSX0lUTUVOQV9Qb3MqLykgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBJVE0gRW5hYmxlIGJpdCBNYXNrICovCisKKy8qIElUTSBJbnRlZ3JhdGlvbiBXcml0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fSVdSX0FUVkFMSURNX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gSVdSOiBBVFZBTElETSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fSVdSX0FUVkFMSURNX01zayAgICAgICAgICAgICAgICgxVUwgLyo8PCBJVE1fSVdSX0FUVkFMSURNX1BvcyovKSAgICAgICAgICAgICAgLyohPCBJVE0gSVdSOiBBVFZBTElETSBNYXNrICovCisKKy8qIElUTSBJbnRlZ3JhdGlvbiBSZWFkIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9JUlJfQVRSRUFEWU1fUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBJUlI6IEFUUkVBRFlNIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9JUlJfQVRSRUFEWU1fTXNrICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9JUlJfQVRSRUFEWU1fUG9zKi8pICAgICAgICAgICAgICAvKiE8IElUTSBJUlI6IEFUUkVBRFlNIE1hc2sgKi8KKworLyogSVRNIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fSU1DUl9JTlRFR1JBVElPTl9Qb3MgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gSU1DUjogSU5URUdSQVRJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0lNQ1JfSU5URUdSQVRJT05fTXNrICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0lNQ1JfSU5URUdSQVRJT05fUG9zKi8pICAgICAgICAgIC8qITwgSVRNIElNQ1I6IElOVEVHUkFUSU9OIE1hc2sgKi8KKworLyogSVRNIExvY2sgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9MU1JfQnl0ZUFjY19Qb3MgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEJ5dGVBY2MgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0xTUl9CeXRlQWNjX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9MU1JfQnl0ZUFjY19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQnl0ZUFjYyBNYXNrICovCisKKyNkZWZpbmUgSVRNX0xTUl9BY2Nlc3NfUG9zICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQWNjZXNzIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9MU1JfQWNjZXNzX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fTFNSX0FjY2Vzc19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEFjY2VzcyBNYXNrICovCisKKyNkZWZpbmUgSVRNX0xTUl9QcmVzZW50X1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogUHJlc2VudCBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fTFNSX1ByZXNlbnRfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBJVE1fTFNSX1ByZXNlbnRfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBQcmVzZW50IE1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19JVE0gKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0RXVCAgICAgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSAoRFdUKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgKERXVCkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgUmVnaXN0ZXIgKERXVCkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDWUNDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEN5Y2xlIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENQSUNOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgQ1BJIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEVYQ0NOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRXhjZXB0aW9uIE92ZXJoZWFkIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFNMRUVQQ05UOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgU2xlZXAgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgTFNVQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBMU1UgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRk9MRENOVDsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBGb2xkZWQtaW5zdHJ1Y3Rpb24gQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgUENTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDFDIChSLyApICBQcm9ncmFtIENvdW50ZXIgU2FtcGxlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENPTVAwOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAwICovCisgIF9fSU9NIHVpbnQzMl90IE1BU0swOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgTWFzayBSZWdpc3RlciAwICovCisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMDsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyOCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMCAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMSAqLworICBfX0lPTSB1aW50MzJfdCBNQVNLMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMSAqLworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjE7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDEgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxWzFVXTsKKyAgX19JT00gdWludDMyX3QgQ09NUDI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDIgKi8KKyAgX19JT00gdWludDMyX3QgTUFTSzI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQ0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDIgKi8KKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04yOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQ4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVAzOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1MCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAzICovCisgIF9fSU9NIHVpbnQzMl90IE1BU0szOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1NCAoUi9XKSAgTWFzayBSZWdpc3RlciAzICovCisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMzsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1OCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMyAqLworfSBEV1RfVHlwZTsKKworLyogRFdUIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0NUUkxfTlVNQ09NUF9Qb3MgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5VTUNPTVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTlVNQ09NUF9Nc2sgICAgICAgICAgICAgICAoMHhGVUwgPDwgRFdUX0NUUkxfTlVNQ09NUF9Qb3MpICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5VTUNPTVAgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX05PVFJDUEtUX1BvcyAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1RSQ1BLVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT1RSQ1BLVF9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT1RSQ1BLVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9UUkNQS1QgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX05PRVhUVFJJR19Qb3MgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0VYVFRSSUcgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9FWFRUUklHX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9FWFRUUklHX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PRVhUVFJJRyBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9DWUNDTlRfUG9zICAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PQ1lDQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05PQ1lDQ05UX01zayAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PQ1lDQ05UX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0NZQ0NOVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9QUkZDTlRfUG9zICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PUFJGQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05PUFJGQ05UX01zayAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PUFJGQ05UX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1BSRkNOVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1lDRVZURU5BX1BvcyAgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0VWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DWUNFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DWUNFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9GT0xERVZURU5BX1BvcyAgICAgICAgICAgIDIxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRk9MREVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9GT0xERVZURU5BX01zayAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9GT0xERVZURU5BX1BvcykgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRk9MREVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTFNVRVZURU5BX1BvcyAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IExTVUVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9MU1VFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9MU1VFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTFNVRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Qb3MgICAgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogU0xFRVBFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfU0xFRVBFVlRFTkFfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfU0xFRVBFVlRFTkFfUG9zKSAgICAgICAgIC8qITwgRFdUIENUUkw6IFNMRUVQRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9FWENFVlRFTkFfUG9zICAgICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0VYQ0VWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0VYQ0VWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NQSUVWVEVOQV9Qb3MgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDUElFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1BJRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfQ1BJRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENQSUVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfRVhDVFJDRU5BX1BvcyAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ1RSQ0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9FWENUUkNFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9FWENUUkNFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDVFJDRU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9QQ1NBTVBMRU5BX1BvcyAgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUENTQU1QTEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9QQ1NBTVBMRU5BX01zayAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9QQ1NBTVBMRU5BX1BvcykgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUENTQU1QTEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfU1lOQ1RBUF9Qb3MgICAgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFNZTkNUQVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfU1lOQ1RBUF9Nc2sgICAgICAgICAgICAgICAoMHgzVUwgPDwgRFdUX0NUUkxfU1lOQ1RBUF9Qb3MpICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFNZTkNUQVAgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NZQ1RBUF9Qb3MgICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNUQVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1lDVEFQX01zayAgICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfQ1lDVEFQX1BvcykgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ1RBUCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfUE9TVElOSVRfUG9zICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RJTklUIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1BPU1RJTklUX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IERXVF9DVFJMX1BPU1RJTklUX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUSU5JVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfUE9TVFBSRVNFVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RQUkVTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfUE9TVFBSRVNFVF9Nc2sgICAgICAgICAgICAoMHhGVUwgPDwgRFdUX0NUUkxfUE9TVFBSRVNFVF9Qb3MpICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RQUkVTRVQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NZQ0NOVEVOQV9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNDTlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1lDQ05URU5BX01zayAgICAgICAgICAgICAoMHgxVUwgLyo8PCBEV1RfQ1RSTF9DWUNDTlRFTkFfUG9zKi8pICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0NOVEVOQSBNYXNrICovCisKKy8qIERXVCBDUEkgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0NQSUNOVF9DUElDTlRfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENQSUNOVDogQ1BJQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DUElDTlRfQ1BJQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9DUElDTlRfQ1BJQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBDUElDTlQ6IENQSUNOVCBNYXNrICovCisKKy8qIERXVCBFeGNlcHRpb24gT3ZlcmhlYWQgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0VYQ0NOVF9FWENDTlRfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEVYQ0NOVDogRVhDQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9FWENDTlRfRVhDQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9FWENDTlRfRVhDQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBFWENDTlQ6IEVYQ0NOVCBNYXNrICovCisKKy8qIERXVCBTbGVlcCBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgU0xFRVBDTlQ6IFNMRUVQQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9TTEVFUENOVF9TTEVFUENOVF9Nc2sgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9TTEVFUENOVF9TTEVFUENOVF9Qb3MqLykgICAvKiE8IERXVCBTTEVFUENOVDogU0xFRVBDTlQgTWFzayAqLworCisvKiBEV1QgTFNVIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9MU1VDTlRfTFNVQ05UX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBMU1VDTlQ6IExTVUNOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfTFNVQ05UX0xTVUNOVF9Nc2sgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfTFNVQ05UX0xTVUNOVF9Qb3MqLykgICAgICAgLyohPCBEV1QgTFNVQ05UOiBMU1VDTlQgTWFzayAqLworCisvKiBEV1QgRm9sZGVkLWluc3RydWN0aW9uIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9GT0xEQ05UX0ZPTERDTlRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGT0xEQ05UOiBGT0xEQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GT0xEQ05UX0ZPTERDTlRfTXNrICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9GT0xEQ05UX0ZPTERDTlRfUG9zKi8pICAgICAvKiE8IERXVCBGT0xEQ05UOiBGT0xEQ05UIE1hc2sgKi8KKworLyogRFdUIENvbXBhcmF0b3IgTWFzayBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfTUFTS19NQVNLX1BvcyAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgTUFTSzogTUFTSyBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfTUFTS19NQVNLX01zayAgICAgICAgICAgICAgICAgICgweDFGVUwgLyo8PCBEV1RfTUFTS19NQVNLX1BvcyovKSAgICAgICAgICAgLyohPCBEV1QgTUFTSzogTUFTSyBNYXNrICovCisKKy8qIERXVCBDb21wYXJhdG9yIEZ1bmN0aW9uIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9NQVRDSEVEX1BvcyAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTUFUQ0hFRCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fTUFUQ0hFRF9Nc2sgICAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fTUFUQ0hFRF9Qb3MpICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IE1BVENIRUQgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIxX1BvcyAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMV9Nc2sgICAgICAgICgweEZVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZBRERSMV9Qb3MpICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjEgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIwX1BvcyAgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMF9Nc2sgICAgICAgICgweEZVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZBRERSMF9Qb3MpICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjAgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVlNJWkVfUG9zICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZTSVpFIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVlNJWkVfTXNrICAgICAgICAgKDB4M1VMIDw8IERXVF9GVU5DVElPTl9EQVRBVlNJWkVfUG9zKSAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZTSVpFIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fTE5LMUVOQV9Qb3MgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IExOSzFFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0xOSzFFTkFfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0xOSzFFTkFfUG9zKSAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBMTksxRU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZNQVRDSF9Qb3MgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWTUFUQ0ggUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWTUFUQ0hfTXNrICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWTUFUQ0hfUG9zKSAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVk1BVENIIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fQ1lDTUFUQ0hfUG9zICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IENZQ01BVENIIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9DWUNNQVRDSF9Nc2sgICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9DWUNNQVRDSF9Qb3MpICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogQ1lDTUFUQ0ggTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9FTUlUUkFOR0VfUG9zICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogRU1JVFJBTkdFIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9FTUlUUkFOR0VfTXNrICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9FTUlUUkFOR0VfUG9zKSAgICAgICAvKiE8IERXVCBGVU5DVElPTjogRU1JVFJBTkdFIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fRlVOQ1RJT05fUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IEZVTkNUSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9GVU5DVElPTl9Nc2sgICAgICAgICAgKDB4RlVMIC8qPDwgRFdUX0ZVTkNUSU9OX0ZVTkNUSU9OX1BvcyovKSAgICAvKiE8IERXVCBGVU5DVElPTjogRlVOQ1RJT04gTWFzayAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX0RXVCAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfVFBJICAgICBUcmFjZSBQb3J0IEludGVyZmFjZSAoVFBJKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFRyYWNlIFBvcnQgSW50ZXJmYWNlIChUUEkpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBUcmFjZSBQb3J0IEludGVyZmFjZSBSZWdpc3RlciAoVFBJKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgU1NQU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBTdXBwb3J0ZWQgUGFyYWxsZWwgUG9ydCBTaXplIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENTUFNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgQ3VycmVudCBQYXJhbGxlbCBQb3J0IFNpemUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzJVXTsKKyAgX19JT00gdWludDMyX3QgQUNQUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBBc3luY2hyb25vdXMgQ2xvY2sgUHJlc2NhbGVyIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMVs1NVVdOworICBfX0lPTSB1aW50MzJfdCBTUFBSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwRjAgKFIvVykgIFNlbGVjdGVkIFBpbiBQcm90b2NvbCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMTMxVV07CisgIF9fSU0gIHVpbnQzMl90IEZGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwMCAoUi8gKSAgRm9ybWF0dGVyIGFuZCBGbHVzaCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRkZDUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzA0IChSL1cpICBGb3JtYXR0ZXIgYW5kIEZsdXNoIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgRlNDUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzA4IChSLyApICBGb3JtYXR0ZXIgU3luY2hyb25pemF0aW9uIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzc1OVVdOworICBfX0lNICB1aW50MzJfdCBUUklHR0VSOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRTggKFIvICkgIFRSSUdHRVIgKi8KKyAgX19JTSAgdWludDMyX3QgRklGTzA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUVDIChSLyApICBJbnRlZ3JhdGlvbiBFVE0gRGF0YSAqLworICBfX0lNICB1aW50MzJfdCBJVEFUQkNUUjI7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRjAgKFIvICkgIElUQVRCQ1RSMiAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDRbMVVdOworICBfX0lNICB1aW50MzJfdCBJVEFUQkNUUjA7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRjggKFIvICkgIElUQVRCQ1RSMCAqLworICBfX0lNICB1aW50MzJfdCBGSUZPMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRkMgKFIvICkgIEludGVncmF0aW9uIElUTSBEYXRhICovCisgIF9fSU9NIHVpbnQzMl90IElUQ1RSTDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEYwMCAoUi9XKSAgSW50ZWdyYXRpb24gTW9kZSBDb250cm9sICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENVszOVVdOworICBfX0lPTSB1aW50MzJfdCBDTEFJTVNFVDsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQTAgKFIvVykgIENsYWltIHRhZyBzZXQgKi8KKyAgX19JT00gdWludDMyX3QgQ0xBSU1DTFI7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkE0IChSL1cpICBDbGFpbSB0YWcgY2xlYXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ3WzhVXTsKKyAgX19JTSAgdWludDMyX3QgREVWSUQ7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkM4IChSLyApICBUUElVX0RFVklEICovCisgIF9fSU0gIHVpbnQzMl90IERFVlRZUEU7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZDQyAoUi8gKSAgVFBJVV9ERVZUWVBFICovCit9IFRQSV9UeXBlOworCisvKiBUUEkgQXN5bmNocm9ub3VzIENsb2NrIFByZXNjYWxlciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfQUNQUl9QUkVTQ0FMRVJfUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgQUNQUjogUFJFU0NBTEVSIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9BQ1BSX1BSRVNDQUxFUl9Nc2sgICAgICAgICAgICAgKDB4MUZGRlVMIC8qPDwgVFBJX0FDUFJfUFJFU0NBTEVSX1BvcyovKSAgICAvKiE8IFRQSSBBQ1BSOiBQUkVTQ0FMRVIgTWFzayAqLworCisvKiBUUEkgU2VsZWN0ZWQgUGluIFByb3RvY29sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9TUFBSX1RYTU9ERV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBTUFBSOiBUWE1PREUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX1NQUFJfVFhNT0RFX01zayAgICAgICAgICAgICAgICAoMHgzVUwgLyo8PCBUUElfU1BQUl9UWE1PREVfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIFNQUFI6IFRYTU9ERSBNYXNrICovCisKKy8qIFRQSSBGb3JtYXR0ZXIgYW5kIEZsdXNoIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfRkZTUl9GdE5vblN0b3BfUG9zICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnROb25TdG9wIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX0Z0Tm9uU3RvcF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRlNSX0Z0Tm9uU3RvcF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdE5vblN0b3AgTWFzayAqLworCisjZGVmaW5lIFRQSV9GRlNSX1RDUHJlc2VudF9Qb3MgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBUQ1ByZXNlbnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfVENQcmVzZW50X01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGU1JfVENQcmVzZW50X1BvcykgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IFRDUHJlc2VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGU1JfRnRTdG9wcGVkX1BvcyAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0U3RvcHBlZCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9GdFN0b3BwZWRfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZTUl9GdFN0b3BwZWRfUG9zKSAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnRTdG9wcGVkIE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZTUl9GbEluUHJvZ19Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRmxJblByb2cgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRmxJblByb2dfTXNrICAgICAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfRkZTUl9GbEluUHJvZ19Qb3MqLykgICAgICAgIC8qITwgVFBJIEZGU1I6IEZsSW5Qcm9nIE1hc2sgKi8KKworLyogVFBJIEZvcm1hdHRlciBhbmQgRmx1c2ggQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfRkZDUl9UcmlnSW5fUG9zICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogVHJpZ0luIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRkNSX1RyaWdJbl9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRkNSX1RyaWdJbl9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBUcmlnSW4gTWFzayAqLworCisjZGVmaW5lIFRQSV9GRkNSX0VuRkNvbnRfUG9zICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBFbkZDb250IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRkNSX0VuRkNvbnRfTXNrICAgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRkNSX0VuRkNvbnRfUG9zKSAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBFbkZDb250IE1hc2sgKi8KKworLyogVFBJIFRSSUdHRVIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX1RSSUdHRVJfVFJJR0dFUl9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIFRSSUdHRVI6IFRSSUdHRVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX1RSSUdHRVJfVFJJR0dFUl9Nc2sgICAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfVFJJR0dFUl9UUklHR0VSX1BvcyovKSAgICAgIC8qITwgVFBJIFRSSUdHRVI6IFRSSUdHRVIgTWFzayAqLworCisvKiBUUEkgSW50ZWdyYXRpb24gRVRNIERhdGEgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKEZJRk8wKSAqLworI2RlZmluZSBUUElfRklGTzBfSVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9BVFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9JVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX0FUVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfSVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfSVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9ieXRlY291bnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX0FUVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0VUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fQVRWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9ieXRlY291bnRfUG9zICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9FVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX2J5dGVjb3VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTJfUG9zICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0yIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0yX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBUUElfRklGTzBfRVRNMl9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTFfUG9zICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0xIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0xX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBUUElfRklGTzBfRVRNMV9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMSBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTBfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0wIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0wX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IFRQSV9GSUZPMF9FVE0wX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMCBNYXNrICovCisKKy8qIFRQSSBJVEFUQkNUUjIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0lUQVRCQ1RSMl9BVFJFQURZX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIElUQVRCQ1RSMjogQVRSRUFEWSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfSVRBVEJDVFIyX0FUUkVBRFlfTXNrICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9JVEFUQkNUUjJfQVRSRUFEWV9Qb3MqLykgICAgLyohPCBUUEkgSVRBVEJDVFIyOiBBVFJFQURZIE1hc2sgKi8KKworLyogVFBJIEludGVncmF0aW9uIElUTSBEYXRhIFJlZ2lzdGVyIERlZmluaXRpb25zIChGSUZPMSkgKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9BVFZBTElEX1BvcyAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fQVRWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfSVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfSVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9BVFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfSVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9ieXRlY291bnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0lUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fYnl0ZWNvdW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfRVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9BVFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9FVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX0FUVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfRVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfRVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9ieXRlY291bnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0yX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfSVRNMl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8xX0lUTTJfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTIgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0xX1BvcyAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfSVRNMV9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8xX0lUTTFfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTEgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0wX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfSVRNMF9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBUUElfRklGTzFfSVRNMF9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTAgTWFzayAqLworCisvKiBUUEkgSVRBVEJDVFIwIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9JVEFUQkNUUjBfQVRSRUFEWV9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBJVEFUQkNUUjA6IEFUUkVBRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0lUQVRCQ1RSMF9BVFJFQURZX01zayAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfSVRBVEJDVFIwX0FUUkVBRFlfUG9zKi8pICAgIC8qITwgVFBJIElUQVRCQ1RSMDogQVRSRUFEWSBNYXNrICovCisKKy8qIFRQSSBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0lUQ1RSTF9Nb2RlX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIElUQ1RSTDogTW9kZSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfSVRDVFJMX01vZGVfTXNrICAgICAgICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9JVENUUkxfTW9kZV9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgSVRDVFJMOiBNb2RlIE1hc2sgKi8KKworLyogVFBJIERFVklEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9ERVZJRF9OUlpWQUxJRF9Qb3MgICAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTlJaVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX05SWlZBTElEX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX05SWlZBTElEX1BvcykgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBOUlpWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX01BTkNWQUxJRF9Qb3MgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNQU5DVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX01BTkNWQUxJRF9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX01BTkNWQUxJRF9Qb3MpICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNQU5DVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9QVElOVkFMSURfUG9zICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogUFRJTlZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9QVElOVkFMSURfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9QVElOVkFMSURfUG9zKSAgICAgICAgICAvKiE8IFRQSSBERVZJRDogUFRJTlZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfTWluQnVmU3pfUG9zICAgICAgICAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1pbkJ1ZlN6IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9NaW5CdWZTel9Nc2sgICAgICAgICAgICAgKDB4N1VMIDw8IFRQSV9ERVZJRF9NaW5CdWZTel9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTWluQnVmU3ogTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9Bc3luQ2xrSW5fUG9zICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogQXN5bkNsa0luIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9Bc3luQ2xrSW5fTXNrICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9Bc3luQ2xrSW5fUG9zKSAgICAgICAgICAvKiE8IFRQSSBERVZJRDogQXN5bkNsa0luIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfTnJUcmFjZUlucHV0X1BvcyAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE5yVHJhY2VJbnB1dCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfTnJUcmFjZUlucHV0X01zayAgICAgICAgICgweDFGVUwgLyo8PCBUUElfREVWSURfTnJUcmFjZUlucHV0X1BvcyovKSAgLyohPCBUUEkgREVWSUQ6IE5yVHJhY2VJbnB1dCBNYXNrICovCisKKy8qIFRQSSBERVZUWVBFIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9ERVZUWVBFX01ham9yVHlwZV9Qb3MgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBNYWpvclR5cGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVlRZUEVfTWFqb3JUeXBlX01zayAgICAgICAgICAoMHhGVUwgPDwgVFBJX0RFVlRZUEVfTWFqb3JUeXBlX1BvcykgICAgICAgIC8qITwgVFBJIERFVlRZUEU6IE1ham9yVHlwZSBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVlRZUEVfU3ViVHlwZV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVlRZUEU6IFN1YlR5cGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVlRZUEVfU3ViVHlwZV9Nc2sgICAgICAgICAgICAoMHhGVUwgLyo8PCBUUElfREVWVFlQRV9TdWJUeXBlX1BvcyovKSAgICAgIC8qITwgVFBJIERFVlRZUEU6IFN1YlR5cGUgTWFzayAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX1RQSSAqLworCisKKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxVSkKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfTVBVICAgICBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JTSAgdWludDMyX3QgVFlQRTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBNUFUgVHlwZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIE1QVSBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJOUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgTVBVIFJlZ2lvbiBSTlJiZXIgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkJBUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQVNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTE7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgTVBVIEFsaWFzIDEgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQVNSX0ExOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIE1QVSBBbGlhcyAxIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkJBUl9BMjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDFDIChSL1cpICBNUFUgQWxpYXMgMiBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1JfQTI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyMCAoUi9XKSAgTVBVIEFsaWFzIDIgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSX0EzOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjQgKFIvVykgIE1QVSBBbGlhcyAzIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUl9BMzsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI4IChSL1cpICBNUFUgQWxpYXMgMyBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovCit9IE1QVV9UeXBlOworCisvKiBNUFUgVHlwZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfVFlQRV9JUkVHSU9OX1BvcyAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogSVJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfVFlQRV9JUkVHSU9OX01zayAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1RZUEVfSVJFR0lPTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogSVJFR0lPTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1RZUEVfRFJFR0lPTl9Qb3MgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IERSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfRFJFR0lPTl9Nc2sgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9UWVBFX0RSRUdJT05fUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IERSRUdJT04gTWFzayAqLworCisjZGVmaW5lIE1QVV9UWVBFX1NFUEFSQVRFX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBTRVBBUkFURSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfVFlQRV9TRVBBUkFURV9Nc2sgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfVFlQRV9TRVBBUkFURV9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogU0VQQVJBVEUgTWFzayAqLworCisvKiBNUFUgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfQ1RSTF9QUklWREVGRU5BX1BvcyAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogUFJJVkRFRkVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfQ1RSTF9QUklWREVGRU5BX01zayAgICAgICAgICAgICgxVUwgPDwgTVBVX0NUUkxfUFJJVkRFRkVOQV9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogUFJJVkRFRkVOQSBNYXNrICovCisKKyNkZWZpbmUgTVBVX0NUUkxfSEZOTUlFTkFfUG9zICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEhGTk1JRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX0hGTk1JRU5BX01zayAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfQ1RSTF9IRk5NSUVOQV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBIRk5NSUVOQSBNYXNrICovCisKKyNkZWZpbmUgTVBVX0NUUkxfRU5BQkxFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEVOQUJMRSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfQ1RSTF9FTkFCTEVfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfQ1RSTF9FTkFCTEVfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogRU5BQkxFIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBOdW1iZXIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JOUl9SRUdJT05fUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJOUjogUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9STlJfUkVHSU9OX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IE1QVV9STlJfUkVHSU9OX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBSTlI6IFJFR0lPTiBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9SQkFSX0FERFJfUG9zICAgICAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBBRERSIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX0FERFJfTXNrICAgICAgICAgICAgICAgICAgKDB4N0ZGRkZGRlVMIDw8IE1QVV9SQkFSX0FERFJfUG9zKSAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBBRERSIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkJBUl9WQUxJRF9Qb3MgICAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfVkFMSURfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQkFSX1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkJBUl9SRUdJT05fUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX1JFR0lPTl9Nc2sgICAgICAgICAgICAgICAgKDB4RlVMIC8qPDwgTVBVX1JCQVJfUkVHSU9OX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBSRUdJT04gTWFzayAqLworCisvKiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUkFTUl9BVFRSU19Qb3MgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgZmllbGQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQVRUUlNfTXNrICAgICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgTVBVX1JBU1JfQVRUUlNfUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IE1QVSBSZWdpb24gQXR0cmlidXRlIGZpZWxkIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9YTl9Qb3MgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuWE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfWE5fTXNrICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX1hOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlhOIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9BUF9Qb3MgICAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQVBfTXNrICAgICAgICAgICAgICAgICAgICAoMHg3VUwgPDwgTVBVX1JBU1JfQVBfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkFQIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9URVhfUG9zICAgICAgICAgICAgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuVEVYIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1RFWF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4N1VMIDw8IE1QVV9SQVNSX1RFWF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5URVggTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1NfUG9zICAgICAgICAgICAgICAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5TIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1NfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9TX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5TIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQyBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQyBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfQl9Qb3MgICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkIgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQl9Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX0JfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkIgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1NSRF9Qb3MgICAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBTdWItUmVnaW9uIERpc2FibGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU1JEX01zayAgICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9SQVNSX1NSRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFN1Yi1SZWdpb24gRGlzYWJsZSBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU0laRV9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBTaXplIEZpZWxkIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1NJWkVfTXNrICAgICAgICAgICAgICAgICAgKDB4MUZVTCA8PCBNUFVfUkFTUl9TSVpFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gU2l6ZSBGaWVsZCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfRU5BQkxFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBlbmFibGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0VOQUJMRV9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9SQVNSX0VOQUJMRV9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gZW5hYmxlIGJpdCBEaXNhYmxlIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTVBVICovCisjZW5kaWYKKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAgICAgICBDb3JlIERlYnVnIFJlZ2lzdGVycyAoQ29yZURlYnVnKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIENvcmUgRGVidWcgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBDb3JlIERlYnVnIFJlZ2lzdGVyIChDb3JlRGVidWcpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBESENTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIERlYnVnIEhhbHRpbmcgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fT00gIHVpbnQzMl90IERDUlNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoIC9XKSAgRGVidWcgQ29yZSBSZWdpc3RlciBTZWxlY3RvciBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBEQ1JEUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIERlYnVnIENvcmUgUmVnaXN0ZXIgRGF0YSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBERU1DUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIERlYnVnIEV4Y2VwdGlvbiBhbmQgTW9uaXRvciBDb250cm9sIFJlZ2lzdGVyICovCit9IENvcmVEZWJ1Z19UeXBlOworCisvKiBEZWJ1ZyBIYWx0aW5nIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfREJHS0VZX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IERCR0tFWSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfREJHS0VZX01zayAgICAgICAgICgweEZGRkZVTCA8PCBDb3JlRGVidWdfREhDU1JfREJHS0VZX1BvcykgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IERCR0tFWSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVTRVRfU1RfUG9zICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFU0VUX1NUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFU0VUX1NUX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRVNFVF9TVCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVUSVJFX1NUX1BvcyAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFVElSRV9TVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfTXNrICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfUkVUSVJFX1NUX1BvcykgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVUSVJFX1NUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19MT0NLVVBfUG9zICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfTE9DS1VQIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19MT0NLVVBfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19MT0NLVVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1NMRUVQX1BvcyAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19TTEVFUCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19TTEVFUF9Nc2sgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfUG9zKSAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfU0xFRVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfUG9zICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19IQUxUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19IQUxUX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19IQUxUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRUdSRFlfUG9zICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVHUkRZIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRUdSRFlfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRUdSRFkgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Qb3MgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TTkFQU1RBTEwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX01zayAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Qb3MpICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NOQVBTVEFMTCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfTUFTS0lOVFNfUG9zICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX01BU0tJTlRTIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX01BU0tJTlRTX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19NQVNLSU5UUyBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Qb3MgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NURVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX1NURVBfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NURVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfUG9zICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19IQUxUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19IQUxUX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19IQUxUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX1BvcyAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfREVCVUdFTiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX01zayAgICAgICgxVUwgLyo8PCBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX1BvcyovKSAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfREVCVUdFTiBNYXNrICovCisKKy8qIERlYnVnIENvcmUgUmVnaXN0ZXIgU2VsZWN0b3IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdXblIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19EQ1JTUl9SRUdXblJfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdXblIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfUG9zICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHU0VMIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfTXNrICAgICAgICAgKDB4MUZVTCAvKjw8IENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfUG9zKi8pICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHU0VMIE1hc2sgKi8KKworLyogRGVidWcgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Qb3MgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBUUkNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBUUkNFTkEgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUkVRX1BvcyAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1JFUSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Nc2sgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9SRVFfUG9zKSAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9SRVEgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fU1RFUF9Qb3MgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1NURVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9NT05fU1RFUF9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fU1RFUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9QRU5EX1BvcyAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fUEVORCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9QRU5EX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9QRU5EIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9FTiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9FTl9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9FTiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0hBUkRFUlJfUG9zICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19IQVJERVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfSEFSREVSUl9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSEFSREVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Qb3MgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19JTlRFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19JTlRFUlJfUG9zKSAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19JTlRFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfUG9zICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQlVTRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfQlVTRVJSX1BvcykgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQlVTRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfU1RBVEVSUl9Qb3MgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX1NUQVRFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19TVEFURVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19TVEFURVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX1BvcyAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NIS0VSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX01zayAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0NIS0VSUl9Qb3MpICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NIS0VSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX05PQ1BFUlJfUG9zICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19OT0NQRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfTk9DUEVSUl9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTk9DUEVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX01NRVJSX1BvcyAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19NTUVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX01NRVJSX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX01NRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX1BvcyAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NPUkVSRVNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX01zayAgICgxVUwgLyo8PCBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX1BvcyovKSAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NPUkVSRVNFVCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYml0ZmllbGQgICAgIENvcmUgcmVnaXN0ZXIgYml0IGZpZWxkIG1hY3JvcworICBcYnJpZWYgICAgICBNYWNyb3MgZm9yIHVzZSB3aXRoIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAoeHh4X1BvcywgeHh4X01zaykuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIE1hc2sgYW5kIHNoaWZ0IGEgYml0IGZpZWxkIHZhbHVlIGZvciB1c2UgaW4gYSByZWdpc3RlciBiaXQgcmFuZ2UuCisgIFxwYXJhbVtpbl0gZmllbGQgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgdGhlIGJpdCBmaWVsZC4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIHZhbHVlLgorKi8KKyNkZWZpbmUgX1ZBTDJGTEQoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlIDw8IGZpZWxkICMjIF9Qb3MpICYgZmllbGQgIyMgX01zaykKKworLyoqCisgIFxicmllZiAgICAgTWFzayBhbmQgc2hpZnQgYSByZWdpc3RlciB2YWx1ZSB0byBleHRyYWN0IGEgYml0IGZpbGVkIHZhbHVlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICBNYXNrZWQgYW5kIHNoaWZ0ZWQgYml0IGZpZWxkIHZhbHVlLgorKi8KKyNkZWZpbmUgX0ZMRDJWQUwoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlICYgZmllbGQgIyMgX01zaykgPj4gZmllbGQgIyMgX1BvcykKKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfY29yZV9iaXRmaWVsZCAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYmFzZSAgICAgQ29yZSBEZWZpbml0aW9ucworICBcYnJpZWYgICAgICBEZWZpbml0aW9ucyBmb3IgYmFzZSBhZGRyZXNzZXMsIHVuaW9ucywgYW5kIHN0cnVjdHVyZXMuCisgIEB7CisgKi8KKworLyogTWVtb3J5IG1hcHBpbmcgb2YgQ29ydGV4LU0zIEhhcmR3YXJlICovCisjZGVmaW5lIFNDU19CQVNFICAgICAgICAgICAgKDB4RTAwMEUwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBTcGFjZSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgSVRNX0JBU0UgICAgICAgICAgICAoMHhFMDAwMDAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgRFdUX0JBU0UgICAgICAgICAgICAoMHhFMDAwMTAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgVFBJX0JBU0UgICAgICAgICAgICAoMHhFMDA0MDAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0JBU0UgICAgICAoMHhFMDAwRURGMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmUgRGVidWcgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFN5c1RpY2tfQkFTRSAgICAgICAgKFNDU19CQVNFICsgIDB4MDAxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBOVklDX0JBU0UgICAgICAgICAgIChTQ1NfQkFTRSArICAweDAxMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU0NCX0JBU0UgICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDAwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIEJsb2NrIEJhc2UgQWRkcmVzcyAqLworCisjZGVmaW5lIFNDblNDQiAgICAgICAgICAgICAgKChTQ25TQ0JfVHlwZSAgICAqKSAgICAgU0NTX0JBU0UgICAgICApICAgLyohPCBTeXN0ZW0gY29udHJvbCBSZWdpc3RlciBub3QgaW4gU0NCICovCisjZGVmaW5lIFNDQiAgICAgICAgICAgICAgICAgKChTQ0JfVHlwZSAgICAgICAqKSAgICAgU0NCX0JBU0UgICAgICApICAgLyohPCBTQ0IgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgU3lzVGljayAgICAgICAgICAgICAoKFN5c1RpY2tfVHlwZSAgICopICAgICBTeXNUaWNrX0JBU0UgICkgICAvKiE8IFN5c1RpY2sgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgTlZJQyAgICAgICAgICAgICAgICAoKE5WSUNfVHlwZSAgICAgICopICAgICBOVklDX0JBU0UgICAgICkgICAvKiE8IE5WSUMgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgSVRNICAgICAgICAgICAgICAgICAoKElUTV9UeXBlICAgICAgICopICAgICBJVE1fQkFTRSAgICAgICkgICAvKiE8IElUTSBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBEV1QgICAgICAgICAgICAgICAgICgoRFdUX1R5cGUgICAgICAgKikgICAgIERXVF9CQVNFICAgICAgKSAgIC8qITwgRFdUIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIFRQSSAgICAgICAgICAgICAgICAgKChUUElfVHlwZSAgICAgICAqKSAgICAgVFBJX0JBU0UgICAgICApICAgLyohPCBUUEkgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgQ29yZURlYnVnICAgICAgICAgICAoKENvcmVEZWJ1Z19UeXBlICopICAgICBDb3JlRGVidWdfQkFTRSkgICAvKiE8IENvcmUgRGVidWcgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKworI2lmIChfX01QVV9QUkVTRU5UID09IDFVKQorICAjZGVmaW5lIE1QVV9CQVNFICAgICAgICAgIChTQ1NfQkFTRSArICAweDBEOTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAqLworICAjZGVmaW5lIE1QVSAgICAgICAgICAgICAgICgoTVBVX1R5cGUgICAgICAgKikgICAgIE1QVV9CQVNFICAgICAgKSAgIC8qITwgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAqLworI2VuZGlmCisKKy8qQH0gKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICBIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcgorICBDb3JlIEZ1bmN0aW9uIEludGVyZmFjZSBjb250YWluczoKKyAgLSBDb3JlIE5WSUMgRnVuY3Rpb25zCisgIC0gQ29yZSBTeXNUaWNrIEZ1bmN0aW9ucworICAtIENvcmUgRGVidWcgRnVuY3Rpb25zCisgIC0gQ29yZSBSZWdpc3RlciBBY2Nlc3MgRnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxkZWZncm91cCBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlIEZ1bmN0aW9ucyBhbmQgSW5zdHJ1Y3Rpb25zIFJlZmVyZW5jZQorKi8KKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgTlZJQyBmdW5jdGlvbnMgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX05WSUNGdW5jdGlvbnMgTlZJQyBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBpbnRlcnJ1cHRzIGFuZCBleGNlcHRpb25zIHZpYSB0aGUgTlZJQy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICAgU2V0IFByaW9yaXR5IEdyb3VwaW5nCisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IGdyb3VwaW5nIGZpZWxkIHVzaW5nIHRoZSByZXF1aXJlZCB1bmxvY2sgc2VxdWVuY2UuCisgICAgICAgICAgIFRoZSBwYXJhbWV0ZXIgUHJpb3JpdHlHcm91cCBpcyBhc3NpZ25lZCB0byB0aGUgZmllbGQgU0NCLT5BSVJDUiBbMTA6OF0gUFJJR1JPVVAgZmllbGQuCisgICAgICAgICAgIE9ubHkgdmFsdWVzIGZyb20gMC4uNyBhcmUgdXNlZC4KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQorICAgICAgICAgICBwcmlvcml0eSBiaXRzIChfX05WSUNfUFJJT19CSVRTKSwgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByaW9yaXR5IGdyb3VwIGlzIHNldC4KKyAgXHBhcmFtIFtpbl0gICAgICBQcmlvcml0eUdyb3VwICBQcmlvcml0eSBncm91cGluZyBmaWVsZC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TZXRQcmlvcml0eUdyb3VwaW5nKHVpbnQzMl90IFByaW9yaXR5R3JvdXApCit7CisgIHVpbnQzMl90IHJlZ192YWx1ZTsKKyAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgICAgICAgICAgIC8qIG9ubHkgdmFsdWVzIDAuLjcgYXJlIHVzZWQgICAgICAgICAgKi8KKworICByZWdfdmFsdWUgID0gIFNDQi0+QUlSQ1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZCBvbGQgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiAgICAqLworICByZWdfdmFsdWUgJj0gfigodWludDMyX3QpKFNDQl9BSVJDUl9WRUNUS0VZX01zayB8IFNDQl9BSVJDUl9QUklHUk9VUF9Nc2spKTsgLyogY2xlYXIgYml0cyB0byBjaGFuZ2UgICAgICAgICAgICAgICAqLworICByZWdfdmFsdWUgID0gIChyZWdfdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NUZBVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSB8CisgICAgICAgICAgICAgICAgKFByaW9yaXR5R3JvdXBUbXAgPDwgOFUpICAgICAgICAgICAgICAgICAgICAgICk7ICAgICAgICAgICAgICAvKiBJbnNlcnQgd3JpdGUga2V5IGFuZCBwcmlvcnR5IGdyb3VwICovCisgIFNDQi0+QUlSQ1IgPSAgcmVnX3ZhbHVlOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUHJpb3JpdHkgR3JvdXBpbmcKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHByaW9yaXR5IGdyb3VwaW5nIGZpZWxkIGZyb20gdGhlIE5WSUMgSW50ZXJydXB0IENvbnRyb2xsZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICAgUHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgKFNDQi0+QUlSQ1IgWzEwOjhdIFBSSUdST1VQIGZpZWxkKS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UHJpb3JpdHlHcm91cGluZyh2b2lkKQoreworICByZXR1cm4gKCh1aW50MzJfdCkoKFNDQi0+QUlSQ1IgJiBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSA+PiBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEVuYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgRW5hYmxlcyBhIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0VuYWJsZUlSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SVNFUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIERpc2FibGUgRXh0ZXJuYWwgSW50ZXJydXB0CisgIFxkZXRhaWxzIERpc2FibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRGlzYWJsZUlSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNFUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBSZWFkcyB0aGUgcGVuZGluZyByZWdpc3RlciBpbiB0aGUgTlZJQyBhbmQgcmV0dXJucyB0aGUgcGVuZGluZyBiaXQgZm9yIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgMCAgSW50ZXJydXB0IHN0YXR1cyBpcyBub3QgcGVuZGluZy4KKyAgXHJldHVybiAgICAgICAgICAgICAxICBJbnRlcnJ1cHQgc3RhdHVzIGlzIHBlbmRpbmcuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SVNQUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgU2V0cyB0aGUgcGVuZGluZyBiaXQgb2YgYW4gZXh0ZXJuYWwgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JU1BSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgQ2xlYXIgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgQ2xlYXJzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0NsZWFyUGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNQUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBBY3RpdmUgSW50ZXJydXB0CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBhY3RpdmUgcmVnaXN0ZXIgaW4gTlZJQyBhbmQgcmV0dXJucyB0aGUgYWN0aXZlIGJpdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IGFjdGl2ZS4KKyAgXHJldHVybiAgICAgICAgICAgICAxICBJbnRlcnJ1cHQgc3RhdHVzIGlzIGFjdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0QWN0aXZlKElSUW5fVHlwZSBJUlFuKQoreworICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUMtPklBQlJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gJiAoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpICE9IDBVTCkgPyAxVUwgOiAwVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IEludGVycnVwdCBQcmlvcml0eQorICBcZGV0YWlscyBTZXRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisgIFxub3RlICAgIFRoZSBwcmlvcml0eSBjYW5ub3QgYmUgc2V0IGZvciBldmVyeSBjb3JlIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccGFyYW0gW2luXSAgcHJpb3JpdHkgIFByaW9yaXR5IHRvIHNldC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbiwgdWludDMyX3QgcHJpb3JpdHkpCit7CisgIGlmICgoaW50MzJfdCkoSVJRbikgPCAwKQorICB7CisgICAgU0NCLT5TSFBbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweEZVTCktNFVMXSA9ICh1aW50OF90KSgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYgKHVpbnQzMl90KTB4RkZVTCk7CisgIH0KKyAgZWxzZQorICB7CisgICAgTlZJQy0+SVBbKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKV0gICAgICAgICAgICAgICA9ICh1aW50OF90KSgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYgKHVpbnQzMl90KTB4RkZVTCk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEludGVycnVwdCBQcmlvcml0eQorICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorICAgICAgICAgICBUaGUgaW50ZXJydXB0IG51bWJlciBjYW4gYmUgcG9zaXRpdmUgdG8gc3BlY2lmeSBhbiBleHRlcm5hbCAoZGV2aWNlIHNwZWNpZmljKSBpbnRlcnJ1cHQsCisgICAgICAgICAgIG9yIG5lZ2F0aXZlIHRvIHNwZWNpZnkgYW4gaW50ZXJuYWwgKGNvcmUpIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIEludGVycnVwdCBQcmlvcml0eS4KKyAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBpcyBhbGlnbmVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIGltcGxlbWVudGVkIHByaW9yaXR5IGJpdHMgb2YgdGhlIG1pY3JvY29udHJvbGxlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4pCit7CisKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICByZXR1cm4oKCh1aW50MzJfdClTQ0ItPlNIUFsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4RlVMKS00VUxdID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuKCgodWludDMyX3QpTlZJQy0+SVBbKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKV0gICAgICAgICAgICAgICA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIEVuY29kZSBQcmlvcml0eQorICBcZGV0YWlscyBFbmNvZGVzIHRoZSBwcmlvcml0eSBmb3IgYW4gaW50ZXJydXB0IHdpdGggdGhlIGdpdmVuIHByaW9yaXR5IGdyb3VwLAorICAgICAgICAgICBwcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlLCBhbmQgc3VicHJpb3JpdHkgdmFsdWUuCisgICAgICAgICAgIEluIGNhc2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHByaW9yaXR5IGdyb3VwaW5nIGFuZCBhdmFpbGFibGUKKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUyksIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuCisgIFxwYXJhbSBbaW5dICAgICBQcmlvcml0eUdyb3VwICBVc2VkIHByaW9yaXR5IGdyb3VwLgorICBccGFyYW0gW2luXSAgIFByZWVtcHRQcmlvcml0eSAgUHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4KKyAgXHBhcmFtIFtpbl0gICAgICAgU3ViUHJpb3JpdHkgIFN1YnByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICBccmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAgRW5jb2RlZCBwcmlvcml0eS4gVmFsdWUgY2FuIGJlIHVzZWQgaW4gdGhlIGZ1bmN0aW9uIFxyZWYgTlZJQ19TZXRQcmlvcml0eSgpLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19FbmNvZGVQcmlvcml0eSAodWludDMyX3QgUHJpb3JpdHlHcm91cCwgdWludDMyX3QgUHJlZW1wdFByaW9yaXR5LCB1aW50MzJfdCBTdWJQcmlvcml0eSkKK3sKKyAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLworICB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHlCaXRzOworICB1aW50MzJfdCBTdWJQcmlvcml0eUJpdHM7CisKKyAgUHJlZW1wdFByaW9yaXR5Qml0cyA9ICgoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCkgPiAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA/ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykgOiAodWludDMyX3QpKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApOworICBTdWJQcmlvcml0eUJpdHMgICAgID0gKChQcmlvcml0eUdyb3VwVG1wICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPCAodWludDMyX3QpN1VMKSA/ICh1aW50MzJfdCkwVUwgOiAodWludDMyX3QpKChQcmlvcml0eUdyb3VwVG1wIC0gN1VMKSArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpOworCisgIHJldHVybiAoCisgICAgICAgICAgICgoUHJlZW1wdFByaW9yaXR5ICYgKHVpbnQzMl90KSgoMVVMIDw8IChQcmVlbXB0UHJpb3JpdHlCaXRzKSkgLSAxVUwpKSA8PCBTdWJQcmlvcml0eUJpdHMpIHwKKyAgICAgICAgICAgKChTdWJQcmlvcml0eSAgICAgJiAodWludDMyX3QpKCgxVUwgPDwgKFN1YlByaW9yaXR5Qml0cyAgICApKSAtIDFVTCkpKQorICAgICAgICAgKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGVjb2RlIFByaW9yaXR5CisgIFxkZXRhaWxzIERlY29kZXMgYW4gaW50ZXJydXB0IHByaW9yaXR5IHZhbHVlIHdpdGggYSBnaXZlbiBwcmlvcml0eSBncm91cCB0bworICAgICAgICAgICBwcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIGFuZCBzdWJwcmlvcml0eSB2YWx1ZS4KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQorICAgICAgICAgICBwcmlvcml0eSBiaXRzIChfX05WSUNfUFJJT19CSVRTKSB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0LgorICBccGFyYW0gW2luXSAgICAgICAgIFByaW9yaXR5ICAgUHJpb3JpdHkgdmFsdWUsIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCB0aGUgZnVuY3Rpb24gXHJlZiBOVklDX0dldFByaW9yaXR5KCkuCisgIFxwYXJhbSBbaW5dICAgICBQcmlvcml0eUdyb3VwICBVc2VkIHByaW9yaXR5IGdyb3VwLgorICBccGFyYW0gW291dF0gcFByZWVtcHRQcmlvcml0eSAgUHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4KKyAgXHBhcmFtIFtvdXRdICAgICBwU3ViUHJpb3JpdHkgIFN1YnByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0RlY29kZVByaW9yaXR5ICh1aW50MzJfdCBQcmlvcml0eSwgdWludDMyX3QgUHJpb3JpdHlHcm91cCwgdWludDMyX3QqIGNvbnN0IHBQcmVlbXB0UHJpb3JpdHksIHVpbnQzMl90KiBjb25zdCBwU3ViUHJpb3JpdHkpCit7CisgIHVpbnQzMl90IFByaW9yaXR5R3JvdXBUbXAgPSAoUHJpb3JpdHlHcm91cCAmICh1aW50MzJfdCkweDA3VUwpOyAgIC8qIG9ubHkgdmFsdWVzIDAuLjcgYXJlIHVzZWQgICAgICAgICAgKi8KKyAgdWludDMyX3QgUHJlZW1wdFByaW9yaXR5Qml0czsKKyAgdWludDMyX3QgU3ViUHJpb3JpdHlCaXRzOworCisgIFByZWVtcHRQcmlvcml0eUJpdHMgPSAoKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApID4gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpIDogKHVpbnQzMl90KSg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKTsKKyAgU3ViUHJpb3JpdHlCaXRzICAgICA9ICgoUHJpb3JpdHlHcm91cFRtcCArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpIDwgKHVpbnQzMl90KTdVTCkgPyAodWludDMyX3QpMFVMIDogKHVpbnQzMl90KSgoUHJpb3JpdHlHcm91cFRtcCAtIDdVTCkgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKTsKKworICAqcFByZWVtcHRQcmlvcml0eSA9IChQcmlvcml0eSA+PiBTdWJQcmlvcml0eUJpdHMpICYgKHVpbnQzMl90KSgoMVVMIDw8IChQcmVlbXB0UHJpb3JpdHlCaXRzKSkgLSAxVUwpOworICAqcFN1YlByaW9yaXR5ICAgICA9IChQcmlvcml0eSAgICAgICAgICAgICAgICAgICApICYgKHVpbnQzMl90KSgoMVVMIDw8IChTdWJQcmlvcml0eUJpdHMgICAgKSkgLSAxVUwpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gUmVzZXQKKyAgXGRldGFpbHMgSW5pdGlhdGVzIGEgc3lzdGVtIHJlc2V0IHJlcXVlc3QgdG8gcmVzZXQgdGhlIE1DVS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TeXN0ZW1SZXNldCh2b2lkKQoreworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgYWxsIG91dHN0YW5kaW5nIG1lbW9yeSBhY2Nlc3NlcyBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJlZCB3cml0ZSBhcmUgY29tcGxldGVkIGJlZm9yZSByZXNldCAqLworICBTQ0ItPkFJUkNSICA9ICh1aW50MzJfdCkoKDB4NUZBVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0NCLT5BSVJDUiAmIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrICAgICk7ICAgICAgICAgLyogS2VlcCBwcmlvcml0eSBncm91cCB1bmNoYW5nZWQgKi8KKyAgX19EU0IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIGNvbXBsZXRpb24gb2YgbWVtb3J5IGFjY2VzcyAqLworCisgIGZvcig7OykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhaXQgdW50aWwgcmVzZXQgKi8KKyAgeworICAgIF9fTk9QKCk7CisgIH0KK30KKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zICovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgIFN5c1RpY2sgZnVuY3Rpb24gICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfU3lzVGlja0Z1bmN0aW9ucyBTeXNUaWNrIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgY29uZmlndXJlIHRoZSBTeXN0ZW0uCisgIEB7CisgKi8KKworI2lmIChfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnID09IDBVKQorCisvKioKKyAgXGJyaWVmICAgU3lzdGVtIFRpY2sgQ29uZmlndXJhdGlvbgorICBcZGV0YWlscyBJbml0aWFsaXplcyB0aGUgU3lzdGVtIFRpbWVyIGFuZCBpdHMgaW50ZXJydXB0LCBhbmQgc3RhcnRzIHRoZSBTeXN0ZW0gVGljayBUaW1lci4KKyAgICAgICAgICAgQ291bnRlciBpcyBpbiBmcmVlIHJ1bm5pbmcgbW9kZSB0byBnZW5lcmF0ZSBwZXJpb2RpYyBpbnRlcnJ1cHRzLgorICBccGFyYW0gW2luXSAgdGlja3MgIE51bWJlciBvZiB0aWNrcyBiZXR3ZWVuIHR3byBpbnRlcnJ1cHRzLgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZC4KKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQuCisgIFxub3RlICAgIFdoZW4gdGhlIHZhcmlhYmxlIDxiPl9fVmVuZG9yX1N5c1RpY2tDb25maWc8L2I+IGlzIHNldCB0byAxLCB0aGVuIHRoZQorICAgICAgICAgICBmdW5jdGlvbiA8Yj5TeXNUaWNrX0NvbmZpZzwvYj4gaXMgbm90IGluY2x1ZGVkLiBJbiB0aGlzIGNhc2UsIHRoZSBmaWxlIDxiPjxpPmRldmljZTwvaT4uaDwvYj4KKyAgICAgICAgICAgbXVzdCBjb250YWluIGEgdmVuZG9yLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBTeXNUaWNrX0NvbmZpZyh1aW50MzJfdCB0aWNrcykKK3sKKyAgaWYgKCh0aWNrcyAtIDFVTCkgPiBTeXNUaWNrX0xPQURfUkVMT0FEX01zaykKKyAgeworICAgIHJldHVybiAoMVVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWxvYWQgdmFsdWUgaW1wb3NzaWJsZSAqLworICB9CisKKyAgU3lzVGljay0+TE9BRCAgPSAodWludDMyX3QpKHRpY2tzIC0gMVVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHJlbG9hZCByZWdpc3RlciAqLworICBOVklDX1NldFByaW9yaXR5IChTeXNUaWNrX0lSUW4sICgxVUwgPDwgX19OVklDX1BSSU9fQklUUykgLSAxVUwpOyAvKiBzZXQgUHJpb3JpdHkgZm9yIFN5c3RpY2sgSW50ZXJydXB0ICovCisgIFN5c1RpY2stPlZBTCAgID0gMFVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvYWQgdGhlIFN5c1RpY2sgQ291bnRlciBWYWx1ZSAqLworICBTeXNUaWNrLT5DVFJMICA9IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrIHwKKyAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBTeXNUaWNrIElSUSBhbmQgU3lzVGljayBUaW1lciAqLworICByZXR1cm4gKDBVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGdW5jdGlvbiBzdWNjZXNzZnVsICovCit9CisKKyNlbmRpZgorCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgKi8KKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRGVidWcgSW4vT3V0cHV0IGZ1bmN0aW9uICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfY29yZV9EZWJ1Z0Z1bmN0aW9ucyBJVE0gRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBhY2Nlc3MgdGhlIElUTSBkZWJ1ZyBpbnRlcmZhY2UuCisgIEB7CisgKi8KKworZXh0ZXJuIHZvbGF0aWxlIGludDMyX3QgSVRNX1J4QnVmZmVyOyAgICAgICAgICAgICAgICAgICAgLyohPCBFeHRlcm5hbCB2YXJpYWJsZSB0byByZWNlaXZlIGNoYXJhY3RlcnMuICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBJVE1fUlhCVUZGRVJfRU1QVFkgICAweDVBQTU1QUE1VSAvKiE8IFZhbHVlIGlkZW50aWZ5aW5nIFxyZWYgSVRNX1J4QnVmZmVyIGlzIHJlYWR5IGZvciBuZXh0IGNoYXJhY3Rlci4gKi8KKworCisvKioKKyAgXGJyaWVmICAgSVRNIFNlbmQgQ2hhcmFjdGVyCisgIFxkZXRhaWxzIFRyYW5zbWl0cyBhIGNoYXJhY3RlciB2aWEgdGhlIElUTSBjaGFubmVsIDAsIGFuZAorICAgICAgICAgICBcbGkgSnVzdCByZXR1cm5zIHdoZW4gbm8gZGVidWdnZXIgaXMgY29ubmVjdGVkIHRoYXQgaGFzIGJvb2tlZCB0aGUgb3V0cHV0LgorICAgICAgICAgICBcbGkgSXMgYmxvY2tpbmcgd2hlbiBhIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZCwgYnV0IHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgc2VudCBoYXMgbm90IGJlZW4gdHJhbnNtaXR0ZWQuCisgIFxwYXJhbSBbaW5dICAgICBjaCAgQ2hhcmFjdGVyIHRvIHRyYW5zbWl0LgorICBccmV0dXJucyAgICAgICAgICAgIENoYXJhY3RlciB0byB0cmFuc21pdC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IElUTV9TZW5kQ2hhciAodWludDMyX3QgY2gpCit7CisgIGlmICgoKElUTS0+VENSICYgSVRNX1RDUl9JVE1FTkFfTXNrKSAhPSAwVUwpICYmICAgICAgLyogSVRNIGVuYWJsZWQgKi8KKyAgICAgICgoSVRNLT5URVIgJiAxVUwgICAgICAgICAgICAgICApICE9IDBVTCkgICApICAgICAvKiBJVE0gUG9ydCAjMCBlbmFibGVkICovCisgIHsKKyAgICB3aGlsZSAoSVRNLT5QT1JUWzBVXS51MzIgPT0gMFVMKQorICAgIHsKKyAgICAgIF9fTk9QKCk7CisgICAgfQorICAgIElUTS0+UE9SVFswVV0udTggPSAodWludDhfdCljaDsKKyAgfQorICByZXR1cm4gKGNoKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgSVRNIFJlY2VpdmUgQ2hhcmFjdGVyCisgIFxkZXRhaWxzIElucHV0cyBhIGNoYXJhY3RlciB2aWEgdGhlIGV4dGVybmFsIHZhcmlhYmxlIFxyZWYgSVRNX1J4QnVmZmVyLgorICBccmV0dXJuICAgICAgICAgICAgIFJlY2VpdmVkIGNoYXJhY3Rlci4KKyAgXHJldHVybiAgICAgICAgIC0xICBObyBjaGFyYWN0ZXIgcGVuZGluZy4KKyAqLworX19TVEFUSUNfSU5MSU5FIGludDMyX3QgSVRNX1JlY2VpdmVDaGFyICh2b2lkKQoreworICBpbnQzMl90IGNoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworCisgIGlmIChJVE1fUnhCdWZmZXIgIT0gSVRNX1JYQlVGRkVSX0VNUFRZKQorICB7CisgICAgY2ggPSBJVE1fUnhCdWZmZXI7CisgICAgSVRNX1J4QnVmZmVyID0gSVRNX1JYQlVGRkVSX0VNUFRZOyAgICAgICAvKiByZWFkeSBmb3IgbmV4dCBjaGFyYWN0ZXIgKi8KKyAgfQorCisgIHJldHVybiAoY2gpOworfQorCisKKy8qKgorICBcYnJpZWYgICBJVE0gQ2hlY2sgQ2hhcmFjdGVyCisgIFxkZXRhaWxzIENoZWNrcyB3aGV0aGVyIGEgY2hhcmFjdGVyIGlzIHBlbmRpbmcgZm9yIHJlYWRpbmcgaW4gdGhlIHZhcmlhYmxlIFxyZWYgSVRNX1J4QnVmZmVyLgorICBccmV0dXJuICAgICAgICAgIDAgIE5vIGNoYXJhY3RlciBhdmFpbGFibGUuCisgIFxyZXR1cm4gICAgICAgICAgMSAgQ2hhcmFjdGVyIGF2YWlsYWJsZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIGludDMyX3QgSVRNX0NoZWNrQ2hhciAodm9pZCkKK3sKKworICBpZiAoSVRNX1J4QnVmZmVyID09IElUTV9SWEJVRkZFUl9FTVBUWSkKKyAgeworICAgIHJldHVybiAoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybiAoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworICB9Cit9CisKKy8qQH0gZW5kIG9mIENNU0lTX2NvcmVfRGVidWdGdW5jdGlvbnMgKi8KKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09SRV9TQzMwMF9IX0RFUEVOREFOVCAqLworCisjZW5kaWYgLyogX19DTVNJU19HRU5FUklDICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9NS1c0MVo0LmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9NS1c0MVo0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3MTA1NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L01LVzQxWjQuaApAQCAtMCwwICsxLDEzMDIzIEBACisvKgorKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKiogICAgIFByb2Nlc3NvcnM6ICAgICAgICAgIE1LVzQxWjI1NlZIVDQKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICBNS1c0MVo1MTJDQVQ0CisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgTUtXNDFaNTEyVkhUNAorKioKKyoqICAgICBDb21waWxlcnM6ICAgICAgICAgICBLZWlsIEFSTSBDL0MrKyBDb21waWxlcgorKiogICAgICAgICAgICAgICAgICAgICAgICAgIEdOVSBDIENvbXBpbGVyCisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgSUFSIEFOU0kgQy9DKysgQ29tcGlsZXIgZm9yIEFSTQorKiogICAgICAgICAgICAgICAgICAgICAgICAgIE1DVVhwcmVzc28gQ29tcGlsZXIKKyoqCisqKiAgICAgUmVmZXJlbmNlIG1hbnVhbDogICAgTUtXNDFaNTEyUk0gUmV2LiAwLjEsIDA0LzIwMTYKKyoqICAgICBWZXJzaW9uOiAgICAgICAgICAgICByZXYuIDEuMCwgMjAxNS0wOS0yMworKiogICAgIEJ1aWxkOiAgICAgICAgICAgICAgIGIxNzAyMTMKKyoqCisqKiAgICAgQWJzdHJhY3Q6CisqKiAgICAgICAgIENNU0lTIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIGZvciBNS1c0MVo0CisqKgorKiogICAgIENvcHlyaWdodCAxOTk3LTIwMTYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyoqICAgICBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorKiogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisqKiAgICAgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKioKKyoqICAgICBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisqKiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqKgorKiogICAgIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisqKiAgICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyoqICAgICAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqKgorKiogICAgIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworKiogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworKiogICAgICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqKgorKiogICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyoqICAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiogICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyoqICAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorKiogICAgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKiogICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyoqICAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyoqICAgICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiogICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisqKiAgICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqKgorKiogICAgIGh0dHA6ICAgICAgICAgICAgICAgICB3d3cubnhwLmNvbQorKiogICAgIG1haWw6ICAgICAgICAgICAgICAgICBzdXBwb3J0QG54cC5jb20KKyoqCisqKiAgICAgUmV2aXNpb25zOgorKiogICAgIC0gcmV2LiAxLjAgKDIwMTUtMDktMjMpCisqKiAgICAgICAgIEluaXRpYWwgdmVyc2lvbi4KKyoqCisqKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisqLworCisvKiEKKyAqIEBmaWxlIE1LVzQxWjQuaAorICogQHZlcnNpb24gMS4wCisgKiBAZGF0ZSAyMDE1LTA5LTIzCisgKiBAYnJpZWYgQ01TSVMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgZm9yIE1LVzQxWjQKKyAqCisgKiBDTVNJUyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBmb3IgTUtXNDFaNAorICovCisKKyNpZm5kZWYgX01LVzQxWjRfSF8KKyNkZWZpbmUgX01LVzQxWjRfSF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN5bWJvbCBwcmV2ZW50aW5nIHJlcGVhdGVkIGluY2x1c2lvbiAqLworCisvKiogTWVtb3J5IG1hcCBtYWpvciB2ZXJzaW9uIChtZW1vcnkgbWFwcyB3aXRoIGVxdWFsIG1ham9yIHZlcnNpb24gbnVtYmVyIGFyZQorICogY29tcGF0aWJsZSkgKi8KKyNkZWZpbmUgTUNVX01FTV9NQVBfVkVSU0lPTiAweDAxMDBVCisvKiogTWVtb3J5IG1hcCBtaW5vciB2ZXJzaW9uICovCisjZGVmaW5lIE1DVV9NRU1fTUFQX1ZFUlNJT05fTUlOT1IgMHgwMDAwVQorCisjaWYgIWRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdwZWRhbnRpYyIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtYXliZS11bmluaXRpYWxpemVkIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV29sZC1zdHlsZS1kZWNsYXJhdGlvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdvdmVycmlkZS1pbml0IgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEludGVycnVwdCB2ZWN0b3IgbnVtYmVycworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIEludGVycnVwdF92ZWN0b3JfbnVtYmVycyBJbnRlcnJ1cHQgdmVjdG9yIG51bWJlcnMKKyAqIEB7CisgKi8KKworLyoqIEludGVycnVwdCBOdW1iZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTlVNQkVSX09GX0lOVF9WRUNUT1JTIDQ4ICAgICAgICAgICAgICAgICAvKio8IE51bWJlciBvZiBpbnRlcnJ1cHRzIGluIHRoZSBWZWN0b3IgdGFibGUgKi8KKwordHlwZWRlZiBlbnVtIElSUW4geworICAvKiBBdXhpbGlhcnkgY29uc3RhbnRzICovCisgIE5vdEF2YWlsX0lSUW4gICAgICAgICAgICAgICAgPSAtMTI4LCAgICAgICAgICAgICAvKio8IE5vdCBhdmFpbGFibGUgZGV2aWNlIHNwZWNpZmljIGludGVycnVwdCAqLworCisgIC8qIENvcmUgaW50ZXJydXB0cyAqLworICBOb25NYXNrYWJsZUludF9JUlFuICAgICAgICAgID0gLTE0LCAgICAgICAgICAgICAgLyoqPCBOb24gTWFza2FibGUgSW50ZXJydXB0ICovCisgIEhhcmRGYXVsdF9JUlFuICAgICAgICAgICAgICAgPSAtMTMsICAgICAgICAgICAgICAvKio8IENvcnRleC1NMCBTViBIYXJkIEZhdWx0IEludGVycnVwdCAqLworICBTVkNhbGxfSVJRbiAgICAgICAgICAgICAgICAgID0gLTUsICAgICAgICAgICAgICAgLyoqPCBDb3J0ZXgtTTAgU1YgQ2FsbCBJbnRlcnJ1cHQgKi8KKyAgUGVuZFNWX0lSUW4gICAgICAgICAgICAgICAgICA9IC0yLCAgICAgICAgICAgICAgIC8qKjwgQ29ydGV4LU0wIFBlbmQgU1YgSW50ZXJydXB0ICovCisgIFN5c1RpY2tfSVJRbiAgICAgICAgICAgICAgICAgPSAtMSwgICAgICAgICAgICAgICAvKio8IENvcnRleC1NMCBTeXN0ZW0gVGljayBJbnRlcnJ1cHQgKi8KKworICAvKiBEZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0cyAqLworICBETUEwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgICAgICAgLyoqPCBETUEgY2hhbm5lbCAwIHRyYW5zZmVyIGNvbXBsZXRlICovCisgIERNQTFfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgICAgICAvKio8IERNQSBjaGFubmVsIDEgdHJhbnNmZXIgY29tcGxldGUgKi8KKyAgRE1BMl9JUlFuICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAgICAgIC8qKjwgRE1BIGNoYW5uZWwgMiB0cmFuc2ZlciBjb21wbGV0ZSAqLworICBETUEzX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMywgICAgICAgICAgICAgICAgLyoqPCBETUEgY2hhbm5lbCAzIHRyYW5zZmVyIGNvbXBsZXRlICovCisgIFJlc2VydmVkMjBfSVJRbiAgICAgICAgICAgICAgPSA0LCAgICAgICAgICAgICAgICAvKio8IFJlc2VydmVkIGludGVycnVwdCAqLworICBGVEZBX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNSwgICAgICAgICAgICAgICAgLyoqPCBDb21tYW5kIGNvbXBsZXRlIGFuZCByZWFkIGNvbGxpc2lvbiAqLworICBMVkRfTFZXX0RDRENfSVJRbiAgICAgICAgICAgID0gNiwgICAgICAgICAgICAgICAgLyoqPCBMb3ctdm9sdGFnZSBkZXRlY3QsIGxvdy12b2x0YWdlIHdhcm5pbmcsIERDREMgKi8KKyAgTExXVV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDcsICAgICAgICAgICAgICAgIC8qKjwgTG93IGxlYWthZ2Ugd2FrZXVwIFVuaXQgKi8KKyAgSTJDMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDgsICAgICAgICAgICAgICAgIC8qKjwgSTJDMCBpbnRlcnJ1cHQgKi8KKyAgSTJDMV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDksICAgICAgICAgICAgICAgIC8qKjwgSTJDMSBpbnRlcnJ1cHQgKi8KKyAgU1BJMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDEwLCAgICAgICAgICAgICAgIC8qKjwgU1BJMCBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMgKi8KKyAgVFNJMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDExLCAgICAgICAgICAgICAgIC8qKjwgVFNJMCBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMgKi8KKyAgTFBVQVJUMF9JUlFuICAgICAgICAgICAgICAgICA9IDEyLCAgICAgICAgICAgICAgIC8qKjwgTFBVQVJUMCBzdGF0dXMgYW5kIGVycm9yICovCisgIFRSTkcwX0lSUW4gICAgICAgICAgICAgICAgICAgPSAxMywgICAgICAgICAgICAgICAvKio8IFRSTkcwIGludGVycnVwdCAqLworICBDTVRfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gMTQsICAgICAgICAgICAgICAgLyoqPCBDTVQgaW50ZXJydXB0ICovCisgIEFEQzBfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAxNSwgICAgICAgICAgICAgICAvKio8IEFEQzAgaW50ZXJydXB0ICovCisgIENNUDBfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAxNiwgICAgICAgICAgICAgICAvKio8IENNUDAgaW50ZXJydXB0ICovCisgIFRQTTBfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAxNywgICAgICAgICAgICAgICAvKio8IFRQTTAgc2luZ2xlIGludGVycnVwdCB2ZWN0b3IgZm9yIGFsbCBzb3VyY2VzICovCisgIFRQTTFfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAxOCwgICAgICAgICAgICAgICAvKio8IFRQTTEgc2luZ2xlIGludGVycnVwdCB2ZWN0b3IgZm9yIGFsbCBzb3VyY2VzICovCisgIFRQTTJfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAxOSwgICAgICAgICAgICAgICAvKio8IFRQTTIgc2luZ2xlIGludGVycnVwdCB2ZWN0b3IgZm9yIGFsbCBzb3VyY2VzICovCisgIFJUQ19JUlFuICAgICAgICAgICAgICAgICAgICAgPSAyMCwgICAgICAgICAgICAgICAvKio8IFJUQyBhbGFybSAqLworICBSVENfU2Vjb25kc19JUlFuICAgICAgICAgICAgID0gMjEsICAgICAgICAgICAgICAgLyoqPCBSVEMgc2Vjb25kcyAqLworICBQSVRfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gMjIsICAgICAgICAgICAgICAgLyoqPCBQSVQgaW50ZXJydXB0ICovCisgIExUQzBfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAyMywgICAgICAgICAgICAgICAvKio8IExUQzAgaW50ZXJydXB0ICovCisgIFJhZGlvXzBfSVJRbiAgICAgICAgICAgICAgICAgPSAyNCwgICAgICAgICAgICAgICAvKio8IEJUTEUsIFpJR0JFRSwgQU5ULCBHRU5GU0sgaW50ZXJydXB0IDAgKi8KKyAgREFDMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDI1LCAgICAgICAgICAgICAgIC8qKjwgREFDMCBpbnRlcnJ1cHQgKi8KKyAgUmFkaW9fMV9JUlFuICAgICAgICAgICAgICAgICA9IDI2LCAgICAgICAgICAgICAgIC8qKjwgQlRMRSwgWklHQkVFLCBBTlQsIEdFTkZTSyBpbnRlcnJ1cHQgMSAqLworICBNQ0dfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gMjcsICAgICAgICAgICAgICAgLyoqPCBNQ0cgaW50ZXJydXB0ICovCisgIExQVE1SMF9JUlFuICAgICAgICAgICAgICAgICAgPSAyOCwgICAgICAgICAgICAgICAvKio8IExQVE1SMCBpbnRlcnJ1cHQgKi8KKyAgU1BJMV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDI5LCAgICAgICAgICAgICAgIC8qKjwgU1BJMSBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMgKi8KKyAgUE9SVEFfSVJRbiAgICAgICAgICAgICAgICAgICA9IDMwLCAgICAgICAgICAgICAgIC8qKjwgUE9SVEEgUGluIGRldGVjdCAqLworICBQT1JUQl9QT1JUQ19JUlFuICAgICAgICAgICAgID0gMzEgICAgICAgICAgICAgICAgLyoqPCBQT1JUQiBhbmQgUE9SVEMgUGluIGRldGVjdCAqLworfSBJUlFuX1R5cGU7CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgSW50ZXJydXB0X3ZlY3Rvcl9udW1iZXJzICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gQ29ydGV4IE0wIENvcmUgQ29uZmlndXJhdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIENvcnRleF9Db3JlX0NvbmZpZ3VyYXRpb24gQ29ydGV4IE0wIENvcmUgQ29uZmlndXJhdGlvbgorICogQHsKKyAqLworCisjZGVmaW5lIF9fQ00wUExVU19SRVYgICAgICAgICAgICAgICAgICAweDAwMDAgICAgLyoqPCBDb3JlIHJldmlzaW9uIHIwcDAgKi8KKyNkZWZpbmUgX19NUFVfUFJFU0VOVCAgICAgICAgICAgICAgICAgIDAgICAgICAgICAvKio8IERlZmluZXMgaWYgYW4gTVBVIGlzIHByZXNlbnQgb3Igbm90ICovCisjZGVmaW5lIF9fVlRPUl9QUkVTRU5UICAgICAgICAgICAgICAgICAxICAgICAgICAgLyoqPCBEZWZpbmVzIGlmIFZUT1IgaXMgcHJlc2VudCBvciBub3QgKi8KKyNkZWZpbmUgX19OVklDX1BSSU9fQklUUyAgICAgICAgICAgICAgIDIgICAgICAgICAvKio8IE51bWJlciBvZiBwcmlvcml0eSBiaXRzIGltcGxlbWVudGVkIGluIHRoZSBOVklDICovCisjZGVmaW5lIF9fVmVuZG9yX1N5c1RpY2tDb25maWcgICAgICAgICAwICAgICAgICAgLyoqPCBWZW5kb3Igc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgU3lzVGlja0NvbmZpZyBpcyBkZWZpbmVkICovCisKKyNpbmNsdWRlICJjb3JlX2NtMHBsdXMuaCIgICAgICAgICAgICAgIC8qIENvcmUgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgKi8KKyNpbmNsdWRlICJzeXN0ZW1fTUtXNDFaNC5oIiAgICAgICAgICAgIC8qIERldmljZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgKi8KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBDb3J0ZXhfQ29yZV9Db25maWd1cmF0aW9uICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTWFwcGluZyBJbmZvcm1hdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIE1hcHBpbmdfSW5mb3JtYXRpb24gTWFwcGluZyBJbmZvcm1hdGlvbgorICogQHsKKyAqLworCisvKiogTWFwcGluZyBJbmZvcm1hdGlvbiAqLworLyohCisgKiBAYWRkdG9ncm91cCBlZG1hX3JlcXVlc3QKKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBTdHJ1Y3R1cmUgZm9yIHRoZSBETUEgaGFyZHdhcmUgcmVxdWVzdAorICoKKyAqIERlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3IgdGhlIERNQSBoYXJkd2FyZSByZXF1ZXN0IGNvbGxlY3Rpb25zLiBUaGUgdXNlciBjYW4gY29uZmlndXJlIHRoZQorICogaGFyZHdhcmUgcmVxdWVzdCBpbnRvIERNQU1VWCB0byB0cmlnZ2VyIHRoZSBETUEgdHJhbnNmZXIgYWNjb3JkaW5nbHkuIFRoZSBpbmRleAorICogb2YgdGhlIGhhcmR3YXJlIHJlcXVlc3QgdmFyaWVzIGFjY29yZGluZyAgdG8gdGhlIHRvIFNvQy4KKyAqLwordHlwZWRlZiBlbnVtIF9kbWFfcmVxdWVzdF9zb3VyY2UKK3sKKyAgICBrRG1hUmVxdWVzdE11eDBEaXNhYmxlICAgICAgICAgID0gMHwweDEwMFUsICAgIC8qKjwgRE1BTVVYIFRyaWdnZXJEaXNhYmxlZC4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDEgICAgICAgID0gMXwweDEwMFUsICAgIC8qKjwgUmVzZXJ2ZWQxICovCisgICAga0RtYVJlcXVlc3RNdXgwTFBVQVJUMFJ4ICAgICAgICA9IDJ8MHgxMDBVLCAgICAvKio8IExQVUFSVDAgUmVjZWl2ZS4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBMUFVBUlQwVHggICAgICAgID0gM3wweDEwMFUsICAgIC8qKjwgTFBVQVJUMCBUcmFuc21pdC4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDQgICAgICAgID0gNHwweDEwMFUsICAgIC8qKjwgUmVzZXJ2ZWQ0ICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQ1ICAgICAgICA9IDV8MHgxMDBVLCAgICAvKio8IFJlc2VydmVkNSAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkNiAgICAgICAgPSA2fDB4MTAwVSwgICAgLyoqPCBSZXNlcnZlZDYgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDcgICAgICAgID0gN3wweDEwMFUsICAgIC8qKjwgUmVzZXJ2ZWQ3ICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQ4ICAgICAgICA9IDh8MHgxMDBVLCAgICAvKio8IFJlc2VydmVkOCAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkOSAgICAgICAgPSA5fDB4MTAwVSwgICAgLyoqPCBSZXNlcnZlZDkgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDEwICAgICAgID0gMTB8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQxMCAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkMTEgICAgICAgPSAxMXwweDEwMFUsICAgLyoqPCBSZXNlcnZlZDExICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQxMiAgICAgICA9IDEyfDB4MTAwVSwgICAvKio8IFJlc2VydmVkMTIgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDEzICAgICAgID0gMTN8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQxMyAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkMTQgICAgICAgPSAxNHwweDEwMFUsICAgLyoqPCBSZXNlcnZlZDE0ICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQxNSAgICAgICA9IDE1fDB4MTAwVSwgICAvKio8IFJlc2VydmVkMTUgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBTUEkwUnggICAgICAgICAgID0gMTZ8MHgxMDBVLCAgIC8qKjwgU1BJMCBSZWNlaXZlLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFNQSTBUeCAgICAgICAgICAgPSAxN3wweDEwMFUsICAgLyoqPCBTUEkwIFRyYW5zbWl0LiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFNQSTFSeCAgICAgICAgICAgPSAxOHwweDEwMFUsICAgLyoqPCBTUEkxIFJlY2VpdmUuICovCisgICAga0RtYVJlcXVlc3RNdXgwU1BJMVR4ICAgICAgICAgICA9IDE5fDB4MTAwVSwgICAvKio8IFNQSTEgVHJhbnNtaXQuICovCisgICAga0RtYVJlcXVlc3RNdXgwTFRDMElucHV0RklGTyAgICA9IDIwfDB4MTAwVSwgICAvKio8IExUQzAgSW5wdXQgRklGTy4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBMVEMwT3V0cHV0RklGTyAgID0gMjF8MHgxMDBVLCAgIC8qKjwgTFRDMCBPdXRwdXQgRklGTy4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBJMkMwICAgICAgICAgICAgID0gMjJ8MHgxMDBVLCAgIC8qKjwgSTJDMC4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBJMkMxICAgICAgICAgICAgID0gMjN8MHgxMDBVLCAgIC8qKjwgSTJDMS4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBUUE0wQ2hhbm5lbDAgICAgID0gMjR8MHgxMDBVLCAgIC8qKjwgVFBNMCBDMFYuICovCisgICAga0RtYVJlcXVlc3RNdXgwVFBNMENoYW5uZWwxICAgICA9IDI1fDB4MTAwVSwgICAvKio8IFRQTTAgQzFWLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFRQTTBDaGFubmVsMiAgICAgPSAyNnwweDEwMFUsICAgLyoqPCBUUE0wIEMyVi4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBUUE0wQ2hhbm5lbDMgICAgID0gMjd8MHgxMDBVLCAgIC8qKjwgVFBNMCBDM1YuICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQyOCAgICAgICA9IDI4fDB4MTAwVSwgICAvKio8IFJlc2VydmVkMjggKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDI5ICAgICAgID0gMjl8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQyOSAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkMzAgICAgICAgPSAzMHwweDEwMFUsICAgLyoqPCBSZXNlcnZlZDMwICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQzMSAgICAgICA9IDMxfDB4MTAwVSwgICAvKio8IFJlc2VydmVkMzEgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBUUE0xQ2hhbm5lbDAgICAgID0gMzJ8MHgxMDBVLCAgIC8qKjwgVFBNMSBDMFYuICovCisgICAga0RtYVJlcXVlc3RNdXgwVFBNMUNoYW5uZWwxICAgICA9IDMzfDB4MTAwVSwgICAvKio8IFRQTTEgQzFWLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFRQTTJDaGFubmVsMCAgICAgPSAzNHwweDEwMFUsICAgLyoqPCBUUE0yIEMwVi4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBUUE0yQ2hhbm5lbDEgICAgID0gMzV8MHgxMDBVLCAgIC8qKjwgVFBNMiBDMVYuICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQzNiAgICAgICA9IDM2fDB4MTAwVSwgICAvKio8IFJlc2VydmVkMzYgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDM3ICAgICAgID0gMzd8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQzNyAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkMzggICAgICAgPSAzOHwweDEwMFUsICAgLyoqPCBSZXNlcnZlZDM4ICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQzOSAgICAgICA9IDM5fDB4MTAwVSwgICAvKio8IFJlc2VydmVkMzkgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBBREMwICAgICAgICAgICAgID0gNDB8MHgxMDBVLCAgIC8qKjwgQURDMC4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDQxICAgICAgID0gNDF8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQ0MSAqLworICAgIGtEbWFSZXF1ZXN0TXV4MENNUDAgICAgICAgICAgICAgPSA0MnwweDEwMFUsICAgLyoqPCBDTVAwLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkNDMgICAgICAgPSA0M3wweDEwMFUsICAgLyoqPCBSZXNlcnZlZDQzICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQ0NCAgICAgICA9IDQ0fDB4MTAwVSwgICAvKio8IFJlc2VydmVkNDQgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBEQUMwICAgICAgICAgICAgID0gNDV8MHgxMDBVLCAgIC8qKjwgREFDMC4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDQ2ICAgICAgID0gNDZ8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQ0NiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MENNVCAgICAgICAgICAgICAgPSA0N3wweDEwMFUsICAgLyoqPCBDTVQuICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQ0OCAgICAgICA9IDQ4fDB4MTAwVSwgICAvKio8IFJlc2VydmVkNDggKi8KKyAgICBrRG1hUmVxdWVzdE11eDBQb3J0QSAgICAgICAgICAgID0gNDl8MHgxMDBVLCAgIC8qKjwgUFRBLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFBvcnRCICAgICAgICAgICAgPSA1MHwweDEwMFUsICAgLyoqPCBQVEIuICovCisgICAga0RtYVJlcXVlc3RNdXgwUG9ydEMgICAgICAgICAgICA9IDUxfDB4MTAwVSwgICAvKio8IFBUQy4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDUyICAgICAgID0gNTJ8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQ1MiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkNTMgICAgICAgPSA1M3wweDEwMFUsICAgLyoqPCBSZXNlcnZlZDUzICovCisgICAga0RtYVJlcXVlc3RNdXgwVFBNME92ZXJmbG93ICAgICA9IDU0fDB4MTAwVSwgICAvKio8IFRQTTAuICovCisgICAga0RtYVJlcXVlc3RNdXgwVFBNMU92ZXJmbG93ICAgICA9IDU1fDB4MTAwVSwgICAvKio8IFRQTTEuICovCisgICAga0RtYVJlcXVlc3RNdXgwVFBNMk92ZXJmbG93ICAgICA9IDU2fDB4MTAwVSwgICAvKio8IFRQTTIuICovCisgICAga0RtYVJlcXVlc3RNdXgwVFNJMCAgICAgICAgICAgICA9IDU3fDB4MTAwVSwgICAvKio8IFRTSTAuICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQ1OCAgICAgICA9IDU4fDB4MTAwVSwgICAvKio8IFJlc2VydmVkNTggKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDU5ICAgICAgID0gNTl8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQ1OSAqLworICAgIGtEbWFSZXF1ZXN0TXV4MEFsd2F5c09uNjAgICAgICAgPSA2MHwweDEwMFUsICAgLyoqPCBETUFNVVggQWx3YXlzIEVuYWJsZWQgc2xvdC4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBBbHdheXNPbjYxICAgICAgID0gNjF8MHgxMDBVLCAgIC8qKjwgRE1BTVVYIEFsd2F5cyBFbmFibGVkIHNsb3QuICovCisgICAga0RtYVJlcXVlc3RNdXgwQWx3YXlzT242MiAgICAgICA9IDYyfDB4MTAwVSwgICAvKio8IERNQU1VWCBBbHdheXMgRW5hYmxlZCBzbG90LiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MEFsd2F5c09uNjMgICAgICAgPSA2M3wweDEwMFUsICAgLyoqPCBETUFNVVggQWx3YXlzIEVuYWJsZWQgc2xvdC4gKi8KK30gZG1hX3JlcXVlc3Rfc291cmNlX3Q7CisKKy8qIEB9ICovCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBNYXBwaW5nX0luZm9ybWF0aW9uICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gRGV2aWNlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUGVyaXBoZXJhbF9hY2Nlc3NfbGF5ZXIgRGV2aWNlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKworLyoKKyoqIFN0YXJ0IG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucworKi8KKworI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKQorICAjcHJhZ21hIHB1c2gKKyAgI3ByYWdtYSBhbm9uX3VuaW9ucworI2VsaWYgZGVmaW5lZChfX0dOVUNfXykKKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCisgICNwcmFnbWEgbGFuZ3VhZ2U9ZXh0ZW5kZWQKKyNlbHNlCisgICNlcnJvciBOb3Qgc3VwcG9ydGVkIGNvbXBpbGVyIHR5cGUKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBBREMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBBRENfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgQURDIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBBREMgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IFNDMVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVycyAxLCBhcnJheSBvZmZzZXQ6IDB4MCwgYXJyYXkgc3RlcDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgQ0ZHMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDMyX3QgQ0ZHMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIsIG9mZnNldDogMHhDICovCisgIF9fSSAgdWludDMyX3QgUlsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBEYXRhIFJlc3VsdCBSZWdpc3RlciwgYXJyYXkgb2Zmc2V0OiAweDEwLCBhcnJheSBzdGVwOiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBDVjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29tcGFyZSBWYWx1ZSBSZWdpc3RlcnMsIG9mZnNldDogMHgxOCAqLworICBfX0lPIHVpbnQzMl90IENWMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb21wYXJlIFZhbHVlIFJlZ2lzdGVycywgb2Zmc2V0OiAweDFDICovCisgIF9fSU8gdWludDMyX3QgU0MyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAyLCBvZmZzZXQ6IDB4MjAgKi8KKyAgX19JTyB1aW50MzJfdCBTQzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyIDMsIG9mZnNldDogMHgyNCAqLworICBfX0lPIHVpbnQzMl90IE9GUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgT2Zmc2V0IENvcnJlY3Rpb24gUmVnaXN0ZXIsIG9mZnNldDogMHgyOCAqLworICBfX0lPIHVpbnQzMl90IFBHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgUGx1cy1TaWRlIEdhaW4gUmVnaXN0ZXIsIG9mZnNldDogMHgyQyAqLworICBfX0lPIHVpbnQzMl90IE1HOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgTWludXMtU2lkZSBHYWluIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MzAgKi8KKyAgX19JTyB1aW50MzJfdCBDTFBEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIFBsdXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MzQgKi8KKyAgX19JTyB1aW50MzJfdCBDTFBTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIFBsdXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MzggKi8KKyAgX19JTyB1aW50MzJfdCBDTFA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIFBsdXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4M0MgKi8KKyAgX19JTyB1aW50MzJfdCBDTFAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIFBsdXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NDAgKi8KKyAgX19JTyB1aW50MzJfdCBDTFAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIFBsdXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NDQgKi8KKyAgX19JTyB1aW50MzJfdCBDTFAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIFBsdXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NDggKi8KKyAgX19JTyB1aW50MzJfdCBDTFAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIFBsdXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NEMgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbNF07CisgIF9fSU8gdWludDMyX3QgQ0xNRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBNaW51cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHg1NCAqLworICBfX0lPIHVpbnQzMl90IENMTVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgTWludXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NTggKi8KKyAgX19JTyB1aW50MzJfdCBDTE00OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIE1pbnVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDVDICovCisgIF9fSU8gdWludDMyX3QgQ0xNMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBNaW51cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHg2MCAqLworICBfX0lPIHVpbnQzMl90IENMTTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgTWludXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NjQgKi8KKyAgX19JTyB1aW50MzJfdCBDTE0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIE1pbnVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDY4ICovCisgIF9fSU8gdWludDMyX3QgQ0xNMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBNaW51cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHg2QyAqLworfSBBRENfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gQURDIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgQURDX1JlZ2lzdGVyX01hc2tzIEFEQyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgU0MxIC0gQURDIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcnMgMSAqLworI2RlZmluZSBBRENfU0MxX0FEQ0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFGVSkKKyNkZWZpbmUgQURDX1NDMV9BRENIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19TQzFfQURDSCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfU0MxX0FEQ0hfU0hJRlQpKSAmIEFEQ19TQzFfQURDSF9NQVNLKQorI2RlZmluZSBBRENfU0MxX0RJRkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgQURDX1NDMV9ESUZGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIEFEQ19TQzFfRElGRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfU0MxX0RJRkZfU0hJRlQpKSAmIEFEQ19TQzFfRElGRl9NQVNLKQorI2RlZmluZSBBRENfU0MxX0FJRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgQURDX1NDMV9BSUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIEFEQ19TQzFfQUlFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfU0MxX0FJRU5fU0hJRlQpKSAmIEFEQ19TQzFfQUlFTl9NQVNLKQorI2RlZmluZSBBRENfU0MxX0NPQ09fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgQURDX1NDMV9DT0NPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIEFEQ19TQzFfQ09DTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfU0MxX0NPQ09fU0hJRlQpKSAmIEFEQ19TQzFfQ09DT19NQVNLKQorCisvKiBUaGUgY291bnQgb2YgQURDX1NDMSAqLworI2RlZmluZSBBRENfU0MxX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKworLyohIEBuYW1lIENGRzEgLSBBREMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIEFEQ19DRkcxX0FESUNMS19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIEFEQ19DRkcxX0FESUNMS19TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0ZHMV9BRElDTEsoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NGRzFfQURJQ0xLX1NISUZUKSkgJiBBRENfQ0ZHMV9BRElDTEtfTUFTSykKKyNkZWZpbmUgQURDX0NGRzFfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhDVSkKKyNkZWZpbmUgQURDX0NGRzFfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIEFEQ19DRkcxX01PREUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0ZHMV9NT0RFX1NISUZUKSkgJiBBRENfQ0ZHMV9NT0RFX01BU0spCisjZGVmaW5lIEFEQ19DRkcxX0FETFNNUF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBBRENfQ0ZHMV9BRExTTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgQURDX0NGRzFfQURMU01QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DRkcxX0FETFNNUF9TSElGVCkpICYgQURDX0NGRzFfQURMU01QX01BU0spCisjZGVmaW5lIEFEQ19DRkcxX0FESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NjBVKQorI2RlZmluZSBBRENfQ0ZHMV9BRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgQURDX0NGRzFfQURJVih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DRkcxX0FESVZfU0hJRlQpKSAmIEFEQ19DRkcxX0FESVZfTUFTSykKKyNkZWZpbmUgQURDX0NGRzFfQURMUENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIEFEQ19DRkcxX0FETFBDX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBBRENfQ0ZHMV9BRExQQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NGRzFfQURMUENfU0hJRlQpKSAmIEFEQ19DRkcxX0FETFBDX01BU0spCisKKy8qISBAbmFtZSBDRkcyIC0gQURDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSBBRENfQ0ZHMl9BRExTVFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBBRENfQ0ZHMl9BRExTVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NGRzJfQURMU1RTKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DRkcyX0FETFNUU19TSElGVCkpICYgQURDX0NGRzJfQURMU1RTX01BU0spCisjZGVmaW5lIEFEQ19DRkcyX0FESFNDX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIEFEQ19DRkcyX0FESFNDX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBBRENfQ0ZHMl9BREhTQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NGRzJfQURIU0NfU0hJRlQpKSAmIEFEQ19DRkcyX0FESFNDX01BU0spCisjZGVmaW5lIEFEQ19DRkcyX0FEQUNLRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIEFEQ19DRkcyX0FEQUNLRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBBRENfQ0ZHMl9BREFDS0VOKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NGRzJfQURBQ0tFTl9TSElGVCkpICYgQURDX0NGRzJfQURBQ0tFTl9NQVNLKQorI2RlZmluZSBBRENfQ0ZHMl9NVVhTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgQURDX0NGRzJfTVVYU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIEFEQ19DRkcyX01VWFNFTCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0ZHMl9NVVhTRUxfU0hJRlQpKSAmIEFEQ19DRkcyX01VWFNFTF9NQVNLKQorCisvKiEgQG5hbWUgUiAtIEFEQyBEYXRhIFJlc3VsdCBSZWdpc3RlciAqLworI2RlZmluZSBBRENfUl9EX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBBRENfUl9EX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX1JfRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19SX0RfU0hJRlQpKSAmIEFEQ19SX0RfTUFTSykKKworLyogVGhlIGNvdW50IG9mIEFEQ19SICovCisjZGVmaW5lIEFEQ19SX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorCisvKiEgQG5hbWUgQ1YxIC0gQ29tcGFyZSBWYWx1ZSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQURDX0NWMV9DVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgQURDX0NWMV9DVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19DVjFfQ1YoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ1YxX0NWX1NISUZUKSkgJiBBRENfQ1YxX0NWX01BU0spCisKKy8qISBAbmFtZSBDVjIgLSBDb21wYXJlIFZhbHVlIFJlZ2lzdGVycyAqLworI2RlZmluZSBBRENfQ1YyX0NWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBBRENfQ1YyX0NWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NWMl9DVih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DVjJfQ1ZfU0hJRlQpKSAmIEFEQ19DVjJfQ1ZfTUFTSykKKworLyohIEBuYW1lIFNDMiAtIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIEFEQ19TQzJfUkVGU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIEFEQ19TQzJfUkVGU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfU0MyX1JFRlNFTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX1NDMl9SRUZTRUxfU0hJRlQpKSAmIEFEQ19TQzJfUkVGU0VMX01BU0spCisjZGVmaW5lIEFEQ19TQzJfRE1BRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIEFEQ19TQzJfRE1BRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBBRENfU0MyX0RNQUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX1NDMl9ETUFFTl9TSElGVCkpICYgQURDX1NDMl9ETUFFTl9NQVNLKQorI2RlZmluZSBBRENfU0MyX0FDUkVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBBRENfU0MyX0FDUkVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgQURDX1NDMl9BQ1JFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzJfQUNSRU5fU0hJRlQpKSAmIEFEQ19TQzJfQUNSRU5fTUFTSykKKyNkZWZpbmUgQURDX1NDMl9BQ0ZHVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIEFEQ19TQzJfQUNGR1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBBRENfU0MyX0FDRkdUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX1NDMl9BQ0ZHVF9TSElGVCkpICYgQURDX1NDMl9BQ0ZHVF9NQVNLKQorI2RlZmluZSBBRENfU0MyX0FDRkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgQURDX1NDMl9BQ0ZFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIEFEQ19TQzJfQUNGRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfU0MyX0FDRkVfU0hJRlQpKSAmIEFEQ19TQzJfQUNGRV9NQVNLKQorI2RlZmluZSBBRENfU0MyX0FEVFJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgQURDX1NDMl9BRFRSR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIEFEQ19TQzJfQURUUkcoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfU0MyX0FEVFJHX1NISUZUKSkgJiBBRENfU0MyX0FEVFJHX01BU0spCisjZGVmaW5lIEFEQ19TQzJfQURBQ1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBBRENfU0MyX0FEQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgQURDX1NDMl9BREFDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzJfQURBQ1RfU0hJRlQpKSAmIEFEQ19TQzJfQURBQ1RfTUFTSykKKworLyohIEBuYW1lIFNDMyAtIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAzICovCisjZGVmaW5lIEFEQ19TQzNfQVZHU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIEFEQ19TQzNfQVZHU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfU0MzX0FWR1MoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX1NDM19BVkdTX1NISUZUKSkgJiBBRENfU0MzX0FWR1NfTUFTSykKKyNkZWZpbmUgQURDX1NDM19BVkdFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgQURDX1NDM19BVkdFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIEFEQ19TQzNfQVZHRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfU0MzX0FWR0VfU0hJRlQpKSAmIEFEQ19TQzNfQVZHRV9NQVNLKQorI2RlZmluZSBBRENfU0MzX0FEQ09fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBBRENfU0MzX0FEQ09fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgQURDX1NDM19BRENPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzNfQURDT19TSElGVCkpICYgQURDX1NDM19BRENPX01BU0spCisjZGVmaW5lIEFEQ19TQzNfQ0FMRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBBRENfU0MzX0NBTEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgQURDX1NDM19DQUxGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzNfQ0FMRl9TSElGVCkpICYgQURDX1NDM19DQUxGX01BU0spCisjZGVmaW5lIEFEQ19TQzNfQ0FMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBBRENfU0MzX0NBTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgQURDX1NDM19DQUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzNfQ0FMX1NISUZUKSkgJiBBRENfU0MzX0NBTF9NQVNLKQorCisvKiEgQG5hbWUgT0ZTIC0gQURDIE9mZnNldCBDb3JyZWN0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19PRlNfT0ZTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIEFEQ19PRlNfT0ZTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfT0ZTX09GUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX09GU19PRlNfU0hJRlQpKSAmIEFEQ19PRlNfT0ZTX01BU0spCisKKy8qISBAbmFtZSBQRyAtIEFEQyBQbHVzLVNpZGUgR2FpbiBSZWdpc3RlciAqLworI2RlZmluZSBBRENfUEdfUEdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBBRENfUEdfUEdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX1BHX1BHKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19QR19QR19TSElGVCkpICYgQURDX1BHX1BHX01BU0spCisKKy8qISBAbmFtZSBNRyAtIEFEQyBNaW51cy1TaWRlIEdhaW4gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX01HX01HX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgQURDX01HX01HX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19NR19NRyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfTUdfTUdfU0hJRlQpKSAmIEFEQ19NR19NR19NQVNLKQorCisvKiEgQG5hbWUgQ0xQRCAtIEFEQyBQbHVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBBRENfQ0xQRF9DTFBEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDNGVSkKKyNkZWZpbmUgQURDX0NMUERfQ0xQRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19DTFBEX0NMUEQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0xQRF9DTFBEX1NISUZUKSkgJiBBRENfQ0xQRF9DTFBEX01BU0spCisKKy8qISBAbmFtZSBDTFBTIC0gQURDIFBsdXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19DTFBTX0NMUFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M0ZVKQorI2RlZmluZSBBRENfQ0xQU19DTFBTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NMUFNfQ0xQUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DTFBTX0NMUFNfU0hJRlQpKSAmIEFEQ19DTFBTX0NMUFNfTUFTSykKKworLyohIEBuYW1lIENMUDQgLSBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX0NMUDRfQ0xQNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzRkZVKQorI2RlZmluZSBBRENfQ0xQNF9DTFA0X1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NMUDRfQ0xQNCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DTFA0X0NMUDRfU0hJRlQpKSAmIEFEQ19DTFA0X0NMUDRfTUFTSykKKworLyohIEBuYW1lIENMUDMgLSBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX0NMUDNfQ0xQM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVKQorI2RlZmluZSBBRENfQ0xQM19DTFAzX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NMUDNfQ0xQMyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DTFAzX0NMUDNfU0hJRlQpKSAmIEFEQ19DTFAzX0NMUDNfTUFTSykKKworLyohIEBuYW1lIENMUDIgLSBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX0NMUDJfQ0xQMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEFEQ19DTFAyX0NMUDJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0xQMl9DTFAyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NMUDJfQ0xQMl9TSElGVCkpICYgQURDX0NMUDJfQ0xQMl9NQVNLKQorCisvKiEgQG5hbWUgQ0xQMSAtIEFEQyBQbHVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBBRENfQ0xQMV9DTFAxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDdGVSkKKyNkZWZpbmUgQURDX0NMUDFfQ0xQMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19DTFAxX0NMUDEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0xQMV9DTFAxX1NISUZUKSkgJiBBRENfQ0xQMV9DTFAxX01BU0spCisKKy8qISBAbmFtZSBDTFAwIC0gQURDIFBsdXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19DTFAwX0NMUDBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M0ZVKQorI2RlZmluZSBBRENfQ0xQMF9DTFAwX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NMUDBfQ0xQMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DTFAwX0NMUDBfU0hJRlQpKSAmIEFEQ19DTFAwX0NMUDBfTUFTSykKKworLyohIEBuYW1lIENMTUQgLSBBREMgTWludXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19DTE1EX0NMTURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M0ZVKQorI2RlZmluZSBBRENfQ0xNRF9DTE1EX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NMTURfQ0xNRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DTE1EX0NMTURfU0hJRlQpKSAmIEFEQ19DTE1EX0NMTURfTUFTSykKKworLyohIEBuYW1lIENMTVMgLSBBREMgTWludXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19DTE1TX0NMTVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M0ZVKQorI2RlZmluZSBBRENfQ0xNU19DTE1TX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NMTVNfQ0xNUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DTE1TX0NMTVNfU0hJRlQpKSAmIEFEQ19DTE1TX0NMTVNfTUFTSykKKworLyohIEBuYW1lIENMTTQgLSBBREMgTWludXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19DTE00X0NMTTRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M0ZGVSkKKyNkZWZpbmUgQURDX0NMTTRfQ0xNNF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19DTE00X0NMTTQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0xNNF9DTE00X1NISUZUKSkgJiBBRENfQ0xNNF9DTE00X01BU0spCisKKy8qISBAbmFtZSBDTE0zIC0gQURDIE1pbnVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBBRENfQ0xNM19DTE0zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlUpCisjZGVmaW5lIEFEQ19DTE0zX0NMTTNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0xNM19DTE0zKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NMTTNfQ0xNM19TSElGVCkpICYgQURDX0NMTTNfQ0xNM19NQVNLKQorCisvKiEgQG5hbWUgQ0xNMiAtIEFEQyBNaW51cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX0NMTTJfQ0xNMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEFEQ19DTE0yX0NMTTJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0xNMl9DTE0yKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NMTTJfQ0xNMl9TSElGVCkpICYgQURDX0NMTTJfQ0xNMl9NQVNLKQorCisvKiEgQG5hbWUgQ0xNMSAtIEFEQyBNaW51cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX0NMTTFfQ0xNMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg3RlUpCisjZGVmaW5lIEFEQ19DTE0xX0NMTTFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0xNMV9DTE0xKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NMTTFfQ0xNMV9TSElGVCkpICYgQURDX0NMTTFfQ0xNMV9NQVNLKQorCisvKiEgQG5hbWUgQ0xNMCAtIEFEQyBNaW51cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX0NMTTBfQ0xNMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIEFEQ19DTE0wX0NMTTBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0xNMF9DTE0wKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NMTTBfQ0xNMF9TSElGVCkpICYgQURDX0NMTTBfQ0xNMF9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgQURDX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogQURDIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgQURDMCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQURDMF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAzQjAwMHUpCisvKiogUGVyaXBoZXJhbCBBREMwIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBBREMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX1R5cGUgKilBREMwX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgQURDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgQURDX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEFEQzBfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgQURDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBBRENfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQURDMCB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBBREMgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIEFEQ19JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBBREMwX0lSUW4gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIEFEQ19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEFOVCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIEFOVF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBBTlQgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIEFOVCAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgSVJRX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IElSUSBDT05UUk9MLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IEVWRU5UX1RNUjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFVkVOVCBUSU1FUiwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBUMV9DTVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVDEgQ09NUEFSRSwgb2Zmc2V0OiAweDggKi8KKyAgX19JTyB1aW50MzJfdCBUMl9DTVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVDIgQ09NUEFSRSwgb2Zmc2V0OiAweEMgKi8KKyAgX19JICB1aW50MzJfdCBUSU1FU1RBTVA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVElNRVNUQU1QLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50MzJfdCBYQ1ZSX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNDRUlWRVIgQ09OVFJPTCwgb2Zmc2V0OiAweDE0ICovCisgIF9fSSAgdWludDMyX3QgWENWUl9TVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRSQU5TQ0VJVkVSIFNUQVRVUywgb2Zmc2V0OiAweDE4ICovCisgIF9fSU8gdWludDMyX3QgWENWUl9DRkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRSQU5TQ0VJVkVSIENPTkZJR1VSQVRJT04sIG9mZnNldDogMHgxQyAqLworICBfX0lPIHVpbnQzMl90IENIQU5ORUxfTlVNOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDSEFOTkVMIE5VTUJFUiwgb2Zmc2V0OiAweDIwICovCisgIF9fSU8gdWludDMyX3QgVFhfUE9XRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRSQU5TTUlUIFBPV0VSLCBvZmZzZXQ6IDB4MjQgKi8KKyAgX19JTyB1aW50MzJfdCBOVFdfQURSX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTkVUV09SSyBBRERSRVNTIENPTlRST0wsIG9mZnNldDogMHgyOCAqLworICBfX0lPIHVpbnQzMl90IE5UV19BRFJfMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBORVRXT1JLIEFERFJFU1MgMCwgb2Zmc2V0OiAweDJDICovCisgIF9fSU8gdWludDMyX3QgTlRXX0FEUl8xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5FVFdPUksgQUREUkVTUyAxLCBvZmZzZXQ6IDB4MzAgKi8KKyAgX19JTyB1aW50MzJfdCBOVFdfQURSXzI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTkVUV09SSyBBRERSRVNTIDIsIG9mZnNldDogMHgzNCAqLworICBfX0lPIHVpbnQzMl90IE5UV19BRFJfMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBORVRXT1JLIEFERFJFU1MgMywgb2Zmc2V0OiAweDM4ICovCisgIF9fSU8gdWludDMyX3QgUlhfV0FURVJNQVJLOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFJYIFdBVEVSTUFSSywgb2Zmc2V0OiAweDNDICovCisgIF9fSU8gdWludDMyX3QgRFNNX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERTTSBDT05UUk9MLCBvZmZzZXQ6IDB4NDAgKi8KKyAgX19JICB1aW50MzJfdCBQQVJUX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUEFSVCBJRCwgb2Zmc2V0OiAweDQ0ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzE4NF07CisgIF9fSU8gdWludDE2X3QgUEFDS0VUX0JVRkZFUls2NF07ICAgICAgICAgICAgICAgICAvKio8IFBBQ0tFVCBCVUZGRVIsIGFycmF5IG9mZnNldDogMHgxMDAsIGFycmF5IHN0ZXA6IDB4MiAqLworfSBBTlRfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gQU5UIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgQU5UX1JlZ2lzdGVyX01hc2tzIEFOVCBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgSVJRX0NUUkwgLSBJUlEgQ09OVFJPTCAqLworI2RlZmluZSBBTlRfSVJRX0NUUkxfU0VRX0VORF9JUlFfTUFTSyAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfU0VRX0VORF9JUlFfU0hJRlQgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1NFUV9FTkRfSVJRKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9TRVFfRU5EX0lSUV9TSElGVCkpICYgQU5UX0lSUV9DVFJMX1NFUV9FTkRfSVJRX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UWF9JUlFfTUFTSyAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UWF9JUlFfU0hJRlQgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVFhfSVJRKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1RYX0lSUV9TSElGVCkpICYgQU5UX0lSUV9DVFJMX1RYX0lSUV9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfSVJRX01BU0sgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfSVJRX1NISUZUICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1JYX0lSUSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9SWF9JUlFfU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9SWF9JUlFfTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX05UV19BRFJfSVJRX01BU0sgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX05UV19BRFJfSVJRX1NISUZUICAgICAgICAgICAoM1UpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9OVFdfQURSX0lSUSh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfTlRXX0FEUl9JUlFfU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9OVFdfQURSX0lSUV9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVDFfSVJRX01BU0sgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1QxX0lSUV9TSElGVCAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UMV9JUlEoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfVDFfSVJRX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfVDFfSVJRX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UMl9JUlFfTUFTSyAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVDJfSVJRX1NISUZUICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1QyX0lSUSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9UMl9JUlFfU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9UMl9JUlFfTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX01BU0sgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUV9TSElGVCAgICAgICAgKDZVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUExMX1VOTE9DS19JUlEoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1dBS0VfSVJRX01BU0sgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9XQUtFX0lSUV9TSElGVCAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfV0FLRV9JUlEoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1dBS0VfSVJRX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfV0FLRV9JUlFfTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfTUFTSyAgICAgICAoMHgxMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9TSElGVCAgICAgICg4VSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlEoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9SWF9XQVRFUk1BUktfSVJRX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVFNNX0lSUV9NQVNLICAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UU01fSVJRX1NISUZUICAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVFNNX0lSUSh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1RTTV9JUlFfU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9UU01fSVJRX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9TRVFfRU5EX0lSUV9FTl9NQVNLICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfU0VRX0VORF9JUlFfRU5fU0hJRlQgICAgICAgICgxNlUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9TRVFfRU5EX0lSUV9FTih4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfU0VRX0VORF9JUlFfRU5fU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9TRVFfRU5EX0lSUV9FTl9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVFhfSVJRX0VOX01BU0sgICAgICAgICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1RYX0lSUV9FTl9TSElGVCAgICAgICAgICAgICAoMTdVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVFhfSVJRX0VOKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1RYX0lSUV9FTl9TSElGVCkpICYgQU5UX0lSUV9DVFJMX1RYX0lSUV9FTl9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfSVJRX0VOX01BU0sgICAgICAgICAgICAgICgweDQwMDAwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1JYX0lSUV9FTl9TSElGVCAgICAgICAgICAgICAoMThVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfSVJRX0VOKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1JYX0lSUV9FTl9TSElGVCkpICYgQU5UX0lSUV9DVFJMX1JYX0lSUV9FTl9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfTlRXX0FEUl9JUlFfRU5fTUFTSyAgICAgICAgICgweDgwMDAwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX05UV19BRFJfSVJRX0VOX1NISUZUICAgICAgICAoMTlVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfTlRXX0FEUl9JUlFfRU4oeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX05UV19BRFJfSVJRX0VOX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfTlRXX0FEUl9JUlFfRU5fTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1QxX0lSUV9FTl9NQVNLICAgICAgICAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVDFfSVJRX0VOX1NISUZUICAgICAgICAgICAgICgyMFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UMV9JUlFfRU4oeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfVDFfSVJRX0VOX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfVDFfSVJRX0VOX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UMl9JUlFfRU5fTUFTSyAgICAgICAgICAgICAgKDB4MjAwMDAwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1QyX0lSUV9FTl9TSElGVCAgICAgICAgICAgICAoMjFVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVDJfSVJRX0VOKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1QyX0lSUV9FTl9TSElGVCkpICYgQU5UX0lSUV9DVFJMX1QyX0lSUV9FTl9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfRU5fTUFTSyAgICAgICgweDQwMDAwMFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUV9FTl9TSElGVCAgICAgKDIyVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX0VOKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUV9FTl9TSElGVCkpICYgQU5UX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX0VOX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9XQUtFX0lSUV9FTl9NQVNLICAgICAgICAgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1dBS0VfSVJRX0VOX1NISUZUICAgICAgICAgICAoMjNVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfV0FLRV9JUlFfRU4oeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1dBS0VfSVJRX0VOX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfV0FLRV9JUlFfRU5fTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfRU5fTUFTSyAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfRU5fU0hJRlQgICAoMjRVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9FTih4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfRU5fU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9SWF9XQVRFUk1BUktfSVJRX0VOX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UU01fSVJRX0VOX01BU0sgICAgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UU01fSVJRX0VOX1NISUZUICAgICAgICAgICAgKDI1VSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1RTTV9JUlFfRU4oeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9UU01fSVJRX0VOX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfVFNNX0lSUV9FTl9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfQU5UX0lSUV9FTl9NQVNLICAgICAgICAgICAgICgweDQwMDAwMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfQU5UX0lSUV9FTl9TSElGVCAgICAgICAgICAgICgyNlUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9BTlRfSVJRX0VOKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfQU5UX0lSUV9FTl9TSElGVCkpICYgQU5UX0lSUV9DVFJMX0FOVF9JUlFfRU5fTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX0NSQ19JR05PUkVfTUFTSyAgICAgICAgICAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX0NSQ19JR05PUkVfU0hJRlQgICAgICAgICAgICAoMjdVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfQ1JDX0lHTk9SRSh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX0NSQ19JR05PUkVfU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9DUkNfSUdOT1JFX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9DUkNfVkFMSURfTUFTSyAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfQ1JDX1ZBTElEX1NISUZUICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9DUkNfVkFMSUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfQ1JDX1ZBTElEX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfQ1JDX1ZBTElEX01BU0spCisKKy8qISBAbmFtZSBFVkVOVF9UTVIgLSBFVkVOVCBUSU1FUiAqLworI2RlZmluZSBBTlRfRVZFTlRfVE1SX0VWRU5UX1RNUl9NQVNLICAgICAgICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX1NISUZUICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfRVZFTlRfVE1SX0VWRU5UX1RNUih4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0VWRU5UX1RNUl9FVkVOVF9UTVJfU0hJRlQpKSAmIEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX01BU0spCisjZGVmaW5lIEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX0xEX01BU0sgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX0xEX1NISUZUICAgICAgICAgKDI0VSkKKyNkZWZpbmUgQU5UX0VWRU5UX1RNUl9FVkVOVF9UTVJfTEQoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX0xEX1NISUZUKSkgJiBBTlRfRVZFTlRfVE1SX0VWRU5UX1RNUl9MRF9NQVNLKQorI2RlZmluZSBBTlRfRVZFTlRfVE1SX0VWRU5UX1RNUl9BRERfTUFTSyAgICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBBTlRfRVZFTlRfVE1SX0VWRU5UX1RNUl9BRERfU0hJRlQgICAgICAgICgyNVUpCisjZGVmaW5lIEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX0FERCh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfRVZFTlRfVE1SX0VWRU5UX1RNUl9BRERfU0hJRlQpKSAmIEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX0FERF9NQVNLKQorCisvKiEgQG5hbWUgVDFfQ01QIC0gVDEgQ09NUEFSRSAqLworI2RlZmluZSBBTlRfVDFfQ01QX1QxX0NNUF9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIEFOVF9UMV9DTVBfVDFfQ01QX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfVDFfQ01QX1QxX0NNUCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1QxX0NNUF9UMV9DTVBfU0hJRlQpKSAmIEFOVF9UMV9DTVBfVDFfQ01QX01BU0spCisjZGVmaW5lIEFOVF9UMV9DTVBfVDFfQ01QX0VOX01BU0sgICAgICAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIEFOVF9UMV9DTVBfVDFfQ01QX0VOX1NISUZUICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgQU5UX1QxX0NNUF9UMV9DTVBfRU4oeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9UMV9DTVBfVDFfQ01QX0VOX1NISUZUKSkgJiBBTlRfVDFfQ01QX1QxX0NNUF9FTl9NQVNLKQorCisvKiEgQG5hbWUgVDJfQ01QIC0gVDIgQ09NUEFSRSAqLworI2RlZmluZSBBTlRfVDJfQ01QX1QyX0NNUF9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIEFOVF9UMl9DTVBfVDJfQ01QX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfVDJfQ01QX1QyX0NNUCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1QyX0NNUF9UMl9DTVBfU0hJRlQpKSAmIEFOVF9UMl9DTVBfVDJfQ01QX01BU0spCisjZGVmaW5lIEFOVF9UMl9DTVBfVDJfQ01QX0VOX01BU0sgICAgICAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIEFOVF9UMl9DTVBfVDJfQ01QX0VOX1NISUZUICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgQU5UX1QyX0NNUF9UMl9DTVBfRU4oeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9UMl9DTVBfVDJfQ01QX0VOX1NISUZUKSkgJiBBTlRfVDJfQ01QX1QyX0NNUF9FTl9NQVNLKQorCisvKiEgQG5hbWUgVElNRVNUQU1QIC0gVElNRVNUQU1QICovCisjZGVmaW5lIEFOVF9USU1FU1RBTVBfVElNRVNUQU1QX01BU0sgICAgICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgQU5UX1RJTUVTVEFNUF9USU1FU1RBTVBfU0hJRlQgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFOVF9USU1FU1RBTVBfVElNRVNUQU1QKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfVElNRVNUQU1QX1RJTUVTVEFNUF9TSElGVCkpICYgQU5UX1RJTUVTVEFNUF9USU1FU1RBTVBfTUFTSykKKworLyohIEBuYW1lIFhDVlJfQ1RSTCAtIFRSQU5TQ0VJVkVSIENPTlRST0wgKi8KKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9TRVFDTURfTUFTSyAgICAgICAgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9TRVFDTURfU0hJRlQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NUUkxfU0VRQ01EKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9DVFJMX1NFUUNNRF9TSElGVCkpICYgQU5UX1hDVlJfQ1RSTF9TRVFDTURfTUFTSykKKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9UWF9QS1RfTEVOR1RIX01BU0sgICAgICAgICAoMHgzRjAwVSkKKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9UWF9QS1RfTEVOR1RIX1NISUZUICAgICAgICAoOFUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NUUkxfVFhfUEtUX0xFTkdUSCh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9DVFJMX1RYX1BLVF9MRU5HVEhfU0hJRlQpKSAmIEFOVF9YQ1ZSX0NUUkxfVFhfUEtUX0xFTkdUSF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9DVFJMX1JYX1BLVF9MRU5HVEhfTUFTSyAgICAgICAgICgweDNGMDAwMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NUUkxfUlhfUEtUX0xFTkdUSF9TSElGVCAgICAgICAgKDE2VSkKKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9SWF9QS1RfTEVOR1RIKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX0NUUkxfUlhfUEtUX0xFTkdUSF9TSElGVCkpICYgQU5UX1hDVlJfQ1RSTF9SWF9QS1RfTEVOR1RIX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX0NUUkxfQ01EREVDX0NTX01BU0sgICAgICAgICAgICAgKDB4NzAwMDAwMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NUUkxfQ01EREVDX0NTX1NISUZUICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9DTURERUNfQ1MoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX0NUUkxfQ01EREVDX0NTX1NISUZUKSkgJiBBTlRfWENWUl9DVFJMX0NNRERFQ19DU19NQVNLKQorI2RlZmluZSBBTlRfWENWUl9DVFJMX1hDVlJfQlVTWV9NQVNLICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9YQ1ZSX0JVU1lfU0hJRlQgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBBTlRfWENWUl9DVFJMX1hDVlJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfQ1RSTF9YQ1ZSX0JVU1lfU0hJRlQpKSAmIEFOVF9YQ1ZSX0NUUkxfWENWUl9CVVNZX01BU0spCisKKy8qISBAbmFtZSBYQ1ZSX1NUUyAtIFRSQU5TQ0VJVkVSIFNUQVRVUyAqLworI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfU1RBUlRfVDFfUEVORF9NQVNLICAgICAgICgweDFVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfU1RBUlRfVDFfUEVORF9TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1RYX1NUQVJUX1QxX1BFTkQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19UWF9TVEFSVF9UMV9QRU5EX1NISUZUKSkgJiBBTlRfWENWUl9TVFNfVFhfU1RBUlRfVDFfUEVORF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfU1RBUlRfVDJfUEVORF9NQVNLICAgICAgICgweDJVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfU1RBUlRfVDJfUEVORF9TSElGVCAgICAgICgxVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1RYX1NUQVJUX1QyX1BFTkQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19UWF9TVEFSVF9UMl9QRU5EX1NISUZUKSkgJiBBTlRfWENWUl9TVFNfVFhfU1RBUlRfVDJfUEVORF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfSU5fV0FSTVVQX01BU0sgICAgICAgICAgICgweDRVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfSU5fV0FSTVVQX1NISUZUICAgICAgICAgICgyVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1RYX0lOX1dBUk1VUCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19UWF9JTl9XQVJNVVBfU0hJRlQpKSAmIEFOVF9YQ1ZSX1NUU19UWF9JTl9XQVJNVVBfTUFTSykKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1RYX0lOX1BST0dSRVNTX01BU0sgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1RYX0lOX1BST0dSRVNTX1NISUZUICAgICAgICAoM1UpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19UWF9JTl9QUk9HUkVTUyh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9TVFNfVFhfSU5fUFJPR1JFU1NfU0hJRlQpKSAmIEFOVF9YQ1ZSX1NUU19UWF9JTl9QUk9HUkVTU19NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfSU5fV0FSTUROX01BU0sgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1RYX0lOX1dBUk1ETl9TSElGVCAgICAgICAgICAoNFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19UWF9JTl9XQVJNRE4oeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9TVFNfVFhfSU5fV0FSTUROX1NISUZUKSkgJiBBTlRfWENWUl9TVFNfVFhfSU5fV0FSTUROX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9TVEFSVF9UMV9QRU5EX01BU0sgICAgICAgKDB4MjBVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfU1RBUlRfVDFfUEVORF9TSElGVCAgICAgICg1VSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX1NUQVJUX1QxX1BFTkQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19SWF9TVEFSVF9UMV9QRU5EX1NISUZUKSkgJiBBTlRfWENWUl9TVFNfUlhfU1RBUlRfVDFfUEVORF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfU1RBUlRfVDJfUEVORF9NQVNLICAgICAgICgweDQwVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX1NUQVJUX1QyX1BFTkRfU0hJRlQgICAgICAoNlUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9TVEFSVF9UMl9QRU5EKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9TVFNfUlhfU1RBUlRfVDJfUEVORF9TSElGVCkpICYgQU5UX1hDVlJfU1RTX1JYX1NUQVJUX1QyX1BFTkRfTUFTSykKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX1NUT1BfVDFfUEVORF9NQVNLICAgICAgICAoMHg4MFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9TVE9QX1QxX1BFTkRfU0hJRlQgICAgICAgKDdVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfU1RPUF9UMV9QRU5EKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfU1RTX1JYX1NUT1BfVDFfUEVORF9TSElGVCkpICYgQU5UX1hDVlJfU1RTX1JYX1NUT1BfVDFfUEVORF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfU1RPUF9UMl9QRU5EX01BU0sgICAgICAgICgweDEwMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9TVE9QX1QyX1BFTkRfU0hJRlQgICAgICAgKDhVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfU1RPUF9UMl9QRU5EKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfU1RTX1JYX1NUT1BfVDJfUEVORF9TSElGVCkpICYgQU5UX1hDVlJfU1RTX1JYX1NUT1BfVDJfUEVORF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfSU5fV0FSTVVQX01BU0sgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9JTl9XQVJNVVBfU0hJRlQgICAgICAgICAgKDlVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfSU5fV0FSTVVQKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfU1RTX1JYX0lOX1dBUk1VUF9TSElGVCkpICYgQU5UX1hDVlJfU1RTX1JYX0lOX1dBUk1VUF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfSU5fU0VBUkNIX01BU0sgICAgICAgICAgICgweDQwMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9JTl9TRUFSQ0hfU0hJRlQgICAgICAgICAgKDEwVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX0lOX1NFQVJDSCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19SWF9JTl9TRUFSQ0hfU0hJRlQpKSAmIEFOVF9YQ1ZSX1NUU19SWF9JTl9TRUFSQ0hfTUFTSykKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX0lOX1BST0dSRVNTX01BU0sgICAgICAgICAoMHg4MDBVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfSU5fUFJPR1JFU1NfU0hJRlQgICAgICAgICgxMVUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9JTl9QUk9HUkVTUyh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9TVFNfUlhfSU5fUFJPR1JFU1NfU0hJRlQpKSAmIEFOVF9YQ1ZSX1NUU19SWF9JTl9QUk9HUkVTU19NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfSU5fV0FSTUROX01BU0sgICAgICAgICAgICgweDEwMDBVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfSU5fV0FSTUROX1NISUZUICAgICAgICAgICgxMlUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9JTl9XQVJNRE4oeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9TVFNfUlhfSU5fV0FSTUROX1NISUZUKSkgJiBBTlRfWENWUl9TVFNfUlhfSU5fV0FSTUROX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19DUkNfVkFMSURfTUFTSyAgICAgICAgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19DUkNfVkFMSURfU0hJRlQgICAgICAgICAgICAgKDE1VSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX0NSQ19WQUxJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19DUkNfVkFMSURfU0hJRlQpKSAmIEFOVF9YQ1ZSX1NUU19DUkNfVkFMSURfTUFTSykKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JTU0lfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlNTSV9TSElGVCAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SU1NJKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9TVFNfUlNTSV9TSElGVCkpICYgQU5UX1hDVlJfU1RTX1JTU0lfTUFTSykKKworLyohIEBuYW1lIFhDVlJfQ0ZHIC0gVFJBTlNDRUlWRVIgQ09ORklHVVJBVElPTiAqLworI2RlZmluZSBBTlRfWENWUl9DRkdfVFhfV0hJVEVOX0RJU19NQVNLICAgICAgICAgICgweDFVKQorI2RlZmluZSBBTlRfWENWUl9DRkdfVFhfV0hJVEVOX0RJU19TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgQU5UX1hDVlJfQ0ZHX1RYX1dISVRFTl9ESVMoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX0NGR19UWF9XSElURU5fRElTX1NISUZUKSkgJiBBTlRfWENWUl9DRkdfVFhfV0hJVEVOX0RJU19NQVNLKQorI2RlZmluZSBBTlRfWENWUl9DRkdfUlhfREVXSElURU5fRElTX01BU0sgICAgICAgICgweDJVKQorI2RlZmluZSBBTlRfWENWUl9DRkdfUlhfREVXSElURU5fRElTX1NISUZUICAgICAgICgxVSkKKyNkZWZpbmUgQU5UX1hDVlJfQ0ZHX1JYX0RFV0hJVEVOX0RJUyh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX0NGR19SWF9ERVdISVRFTl9ESVNfU0hJRlQpKSAmIEFOVF9YQ1ZSX0NGR19SWF9ERVdISVRFTl9ESVNfTUFTSykKKyNkZWZpbmUgQU5UX1hDVlJfQ0ZHX1NXX0NSQ19FTl9NQVNLICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgQU5UX1hDVlJfQ0ZHX1NXX0NSQ19FTl9TSElGVCAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19TV19DUkNfRU4oeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9DRkdfU1dfQ1JDX0VOX1NISUZUKSkgJiBBTlRfWENWUl9DRkdfU1dfQ1JDX0VOX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19QUkVBTUJMRV9TWl9NQVNLICAgICAgICAgICAgKDB4MzBVKQorI2RlZmluZSBBTlRfWENWUl9DRkdfUFJFQU1CTEVfU1pfU0hJRlQgICAgICAgICAgICg0VSkKKyNkZWZpbmUgQU5UX1hDVlJfQ0ZHX1BSRUFNQkxFX1NaKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX0NGR19QUkVBTUJMRV9TWl9TSElGVCkpICYgQU5UX1hDVlJfQ0ZHX1BSRUFNQkxFX1NaX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19UWF9XQVJNVVBfTUFTSyAgICAgICAgICAgICAgKDB4RkYwMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19UWF9XQVJNVVBfU0hJRlQgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBBTlRfWENWUl9DRkdfVFhfV0FSTVVQKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfQ0ZHX1RYX1dBUk1VUF9TSElGVCkpICYgQU5UX1hDVlJfQ0ZHX1RYX1dBUk1VUF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9DRkdfUlhfV0FSTVVQX01BU0sgICAgICAgICAgICAgICgweEZGMDAwMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19SWF9XQVJNVVBfU0hJRlQgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgQU5UX1hDVlJfQ0ZHX1JYX1dBUk1VUCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX0NGR19SWF9XQVJNVVBfU0hJRlQpKSAmIEFOVF9YQ1ZSX0NGR19SWF9XQVJNVVBfTUFTSykKKworLyohIEBuYW1lIENIQU5ORUxfTlVNIC0gQ0hBTk5FTCBOVU1CRVIgKi8KKyNkZWZpbmUgQU5UX0NIQU5ORUxfTlVNX0NIQU5ORUxfTlVNX01BU0sgICAgICAgICAoMHg3RlUpCisjZGVmaW5lIEFOVF9DSEFOTkVMX05VTV9DSEFOTkVMX05VTV9TSElGVCAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfQ0hBTk5FTF9OVU1fQ0hBTk5FTF9OVU0oeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0NIQU5ORUxfTlVNX0NIQU5ORUxfTlVNX1NISUZUKSkgJiBBTlRfQ0hBTk5FTF9OVU1fQ0hBTk5FTF9OVU1fTUFTSykKKworLyohIEBuYW1lIFRYX1BPV0VSIC0gVFJBTlNNSVQgUE9XRVIgKi8KKyNkZWZpbmUgQU5UX1RYX1BPV0VSX1RYX1BPV0VSX01BU0sgICAgICAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIEFOVF9UWF9QT1dFUl9UWF9QT1dFUl9TSElGVCAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfVFhfUE9XRVJfVFhfUE9XRVIoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1RYX1BPV0VSX1RYX1BPV0VSX1NISUZUKSkgJiBBTlRfVFhfUE9XRVJfVFhfUE9XRVJfTUFTSykKKworLyohIEBuYW1lIE5UV19BRFJfQ1RSTCAtIE5FVFdPUksgQUREUkVTUyBDT05UUk9MICovCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9FTl9NQVNLICAgICAgICAgKDB4RlUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9FTl9TSElGVCAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfRU4oeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX0VOX1NISUZUKSkgJiBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfRU5fTUFTSykKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX01DSF9NQVNLICAgICAgICAoMHhGMFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9NQ0hfU0hJRlQgICAgICAgKDRVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfTUNIKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX01DSF9TSElGVCkpICYgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX01DSF9NQVNLKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIwX1NaX01BU0sgICAgICAgICgweDMwMFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjBfU1pfU0hJRlQgICAgICAgKDhVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIwX1NaKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSMF9TWl9TSElGVCkpICYgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSMF9TWl9NQVNLKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIxX1NaX01BU0sgICAgICAgICgweEMwMFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjFfU1pfU0hJRlQgICAgICAgKDEwVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSMV9TWih4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjFfU1pfU0hJRlQpKSAmIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjFfU1pfTUFTSykKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSMl9TWl9NQVNLICAgICAgICAoMHgzMDAwVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSMl9TWl9TSElGVCAgICAgICAoMTJVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIyX1NaKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSMl9TWl9TSElGVCkpICYgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSMl9TWl9NQVNLKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIzX1NaX01BU0sgICAgICAgICgweEMwMDBVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIzX1NaX1NISUZUICAgICAgICgxNFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjNfU1ooeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIzX1NaX1NISUZUKSkgJiBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIzX1NaX01BU0spCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIwX01BU0sgICAgICAgKDB4NzAwMDBVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMF9TSElGVCAgICAgICgxNlUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIwKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMF9TSElGVCkpICYgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjBfTUFTSykKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjFfTUFTSyAgICAgICAoMHg3MDAwMDBVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMV9TSElGVCAgICAgICgyMFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIxKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMV9TSElGVCkpICYgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjFfTUFTSykKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjJfTUFTSyAgICAgICAoMHg3MDAwMDAwVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjJfU0hJRlQgICAgICAoMjRVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMih4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjJfU0hJRlQpKSAmIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIyX01BU0spCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIzX01BU0sgICAgICAgKDB4NzAwMDAwMDBVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSM19TSElGVCAgICAgICgyOFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIzKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSM19TSElGVCkpICYgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjNfTUFTSykKKworLyohIEBuYW1lIE5UV19BRFJfMCAtIE5FVFdPUksgQUREUkVTUyAwICovCisjZGVmaW5lIEFOVF9OVFdfQURSXzBfTlRXX0FEUl8wX01BU0sgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBBTlRfTlRXX0FEUl8wX05UV19BRFJfMF9TSElGVCAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfMF9OVFdfQURSXzAoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9OVFdfQURSXzBfTlRXX0FEUl8wX1NISUZUKSkgJiBBTlRfTlRXX0FEUl8wX05UV19BRFJfMF9NQVNLKQorCisvKiEgQG5hbWUgTlRXX0FEUl8xIC0gTkVUV09SSyBBRERSRVNTIDEgKi8KKyNkZWZpbmUgQU5UX05UV19BRFJfMV9OVFdfQURSXzFfTUFTSyAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEFOVF9OVFdfQURSXzFfTlRXX0FEUl8xX1NISUZUICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfTlRXX0FEUl8xX05UV19BRFJfMSh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX05UV19BRFJfMV9OVFdfQURSXzFfU0hJRlQpKSAmIEFOVF9OVFdfQURSXzFfTlRXX0FEUl8xX01BU0spCisKKy8qISBAbmFtZSBOVFdfQURSXzIgLSBORVRXT1JLIEFERFJFU1MgMiAqLworI2RlZmluZSBBTlRfTlRXX0FEUl8yX05UV19BRFJfMl9NQVNLICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfMl9OVFdfQURSXzJfU0hJRlQgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFOVF9OVFdfQURSXzJfTlRXX0FEUl8yKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfTlRXX0FEUl8yX05UV19BRFJfMl9TSElGVCkpICYgQU5UX05UV19BRFJfMl9OVFdfQURSXzJfTUFTSykKKworLyohIEBuYW1lIE5UV19BRFJfMyAtIE5FVFdPUksgQUREUkVTUyAzICovCisjZGVmaW5lIEFOVF9OVFdfQURSXzNfTlRXX0FEUl8zX01BU0sgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBBTlRfTlRXX0FEUl8zX05UV19BRFJfM19TSElGVCAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfM19OVFdfQURSXzMoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9OVFdfQURSXzNfTlRXX0FEUl8zX1NISUZUKSkgJiBBTlRfTlRXX0FEUl8zX05UV19BRFJfM19NQVNLKQorCisvKiEgQG5hbWUgUlhfV0FURVJNQVJLIC0gUlggV0FURVJNQVJLICovCisjZGVmaW5lIEFOVF9SWF9XQVRFUk1BUktfUlhfV0FURVJNQVJLX01BU0sgICAgICAgKDB4N0ZVKQorI2RlZmluZSBBTlRfUlhfV0FURVJNQVJLX1JYX1dBVEVSTUFSS19TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgQU5UX1JYX1dBVEVSTUFSS19SWF9XQVRFUk1BUksoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9SWF9XQVRFUk1BUktfUlhfV0FURVJNQVJLX1NISUZUKSkgJiBBTlRfUlhfV0FURVJNQVJLX1JYX1dBVEVSTUFSS19NQVNLKQorI2RlZmluZSBBTlRfUlhfV0FURVJNQVJLX0JZVEVfQ09VTlRFUl9NQVNLICAgICAgICgweDdGMDAwMFUpCisjZGVmaW5lIEFOVF9SWF9XQVRFUk1BUktfQllURV9DT1VOVEVSX1NISUZUICAgICAgKDE2VSkKKyNkZWZpbmUgQU5UX1JYX1dBVEVSTUFSS19CWVRFX0NPVU5URVIoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9SWF9XQVRFUk1BUktfQllURV9DT1VOVEVSX1NISUZUKSkgJiBBTlRfUlhfV0FURVJNQVJLX0JZVEVfQ09VTlRFUl9NQVNLKQorCisvKiEgQG5hbWUgRFNNX0NUUkwgLSBEU00gQ09OVFJPTCAqLworI2RlZmluZSBBTlRfRFNNX0NUUkxfQU5UX1NMRUVQX0VOX01BU0sgICAgICAgICAgICgweDFVKQorI2RlZmluZSBBTlRfRFNNX0NUUkxfQU5UX1NMRUVQX0VOX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgQU5UX0RTTV9DVFJMX0FOVF9TTEVFUF9FTih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9EU01fQ1RSTF9BTlRfU0xFRVBfRU5fU0hJRlQpKSAmIEFOVF9EU01fQ1RSTF9BTlRfU0xFRVBfRU5fTUFTSykKKworLyohIEBuYW1lIFBBUlRfSUQgLSBQQVJUIElEICovCisjZGVmaW5lIEFOVF9QQVJUX0lEX1BBUlRfSURfTUFTSyAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBBTlRfUEFSVF9JRF9QQVJUX0lEX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQU5UX1BBUlRfSURfUEFSVF9JRCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9QQVJUX0lEX1BBUlRfSURfU0hJRlQpKSAmIEFOVF9QQVJUX0lEX1BBUlRfSURfTUFTSykKKworLyohIEBuYW1lIFBBQ0tFVF9CVUZGRVIgLSBQQUNLRVQgQlVGRkVSICovCisjZGVmaW5lIEFOVF9QQUNLRVRfQlVGRkVSX1BBQ0tFVF9CVUZGRVJfTUFTSyAgICAgKDB4RkZGRlUpCisjZGVmaW5lIEFOVF9QQUNLRVRfQlVGRkVSX1BBQ0tFVF9CVUZGRVJfU0hJRlQgICAgKDBVKQorI2RlZmluZSBBTlRfUEFDS0VUX0JVRkZFUl9QQUNLRVRfQlVGRkVSKHgpICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgQU5UX1BBQ0tFVF9CVUZGRVJfUEFDS0VUX0JVRkZFUl9TSElGVCkpICYgQU5UX1BBQ0tFVF9CVUZGRVJfUEFDS0VUX0JVRkZFUl9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgQU5UX1BBQ0tFVF9CVUZGRVIgKi8KKyNkZWZpbmUgQU5UX1BBQ0tFVF9CVUZGRVJfQ09VTlQgICAgICAgICAgICAgICAgICAoNjRVKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgQU5UX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogQU5UIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgQU5UIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBTlRfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDVFMDAwdSkKKy8qKiBQZXJpcGhlcmFsIEFOVCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgQU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFOVF9UeXBlICopQU5UX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgQU5UIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgQU5UX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEFOVF9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBBTlQgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIEFOVF9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBBTlQgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIEFOVF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEJUTEVfUkYgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBCVExFX1JGX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIEJUTEVfUkYgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIEJUTEVfUkYgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFsxNTM2XTsKKyAgX19JICB1aW50MTZfdCBCTEVfUEFSVF9JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQkxVRVRPT1RIIExPVyBFTkVSR1kgUEFSVCBJRCwgb2Zmc2V0OiAweDYwMCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMVsyXTsKKyAgX19JICB1aW50MTZfdCBEU01fU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQkxFIERTTSBTVEFUVVMsIG9mZnNldDogMHg2MDQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzJbMl07CisgIF9fSU8gdWludDE2X3QgTUlTQ19DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEJMVUVUT09USCBMT1cgRU5FUkdZIE1JU0NFTExBTkVPVVMgQ09OVFJPTCwgb2Zmc2V0OiAweDYwOCAqLworfSBCVExFX1JGX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEJUTEVfUkYgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBCVExFX1JGX1JlZ2lzdGVyX01hc2tzIEJUTEVfUkYgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIEJMRV9QQVJUX0lEIC0gQkxVRVRPT1RIIExPVyBFTkVSR1kgUEFSVCBJRCAqLworI2RlZmluZSBCVExFX1JGX0JMRV9QQVJUX0lEX0JMRV9QQVJUX0lEX01BU0sgICAgICgweEZGRkZVKQorI2RlZmluZSBCVExFX1JGX0JMRV9QQVJUX0lEX0JMRV9QQVJUX0lEX1NISUZUICAgICgwVSkKKyNkZWZpbmUgQlRMRV9SRl9CTEVfUEFSVF9JRF9CTEVfUEFSVF9JRCh4KSAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IEJUTEVfUkZfQkxFX1BBUlRfSURfQkxFX1BBUlRfSURfU0hJRlQpKSAmIEJUTEVfUkZfQkxFX1BBUlRfSURfQkxFX1BBUlRfSURfTUFTSykKKworLyohIEBuYW1lIERTTV9TVEFUVVMgLSBCTEUgRFNNIFNUQVRVUyAqLworI2RlZmluZSBCVExFX1JGX0RTTV9TVEFUVVNfT1JGX1NZU0NMS19SRVFfTUFTSyAgICgweDFVKQorI2RlZmluZSBCVExFX1JGX0RTTV9TVEFUVVNfT1JGX1NZU0NMS19SRVFfU0hJRlQgICgwVSkKKyNkZWZpbmUgQlRMRV9SRl9EU01fU1RBVFVTX09SRl9TWVNDTEtfUkVRKHgpICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IEJUTEVfUkZfRFNNX1NUQVRVU19PUkZfU1lTQ0xLX1JFUV9TSElGVCkpICYgQlRMRV9SRl9EU01fU1RBVFVTX09SRl9TWVNDTEtfUkVRX01BU0spCisjZGVmaW5lIEJUTEVfUkZfRFNNX1NUQVRVU19SSUZfTExfQUNUSVZFX01BU0sgICAgKDB4MlUpCisjZGVmaW5lIEJUTEVfUkZfRFNNX1NUQVRVU19SSUZfTExfQUNUSVZFX1NISUZUICAgKDFVKQorI2RlZmluZSBCVExFX1JGX0RTTV9TVEFUVVNfUklGX0xMX0FDVElWRSh4KSAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgQlRMRV9SRl9EU01fU1RBVFVTX1JJRl9MTF9BQ1RJVkVfU0hJRlQpKSAmIEJUTEVfUkZfRFNNX1NUQVRVU19SSUZfTExfQUNUSVZFX01BU0spCisjZGVmaW5lIEJUTEVfUkZfRFNNX1NUQVRVU19YQ1ZSX0JVU1lfTUFTSyAgICAgICAgKDB4NFUpCisjZGVmaW5lIEJUTEVfUkZfRFNNX1NUQVRVU19YQ1ZSX0JVU1lfU0hJRlQgICAgICAgKDJVKQorI2RlZmluZSBCVExFX1JGX0RTTV9TVEFUVVNfWENWUl9CVVNZKHgpICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgQlRMRV9SRl9EU01fU1RBVFVTX1hDVlJfQlVTWV9TSElGVCkpICYgQlRMRV9SRl9EU01fU1RBVFVTX1hDVlJfQlVTWV9NQVNLKQorCisvKiEgQG5hbWUgTUlTQ19DVFJMIC0gQkxVRVRPT1RIIExPVyBFTkVSR1kgTUlTQ0VMTEFORU9VUyBDT05UUk9MICovCisjZGVmaW5lIEJUTEVfUkZfTUlTQ19DVFJMX1RTTV9JTlRSX0VOX01BU0sgICAgICAgKDB4MlUpCisjZGVmaW5lIEJUTEVfUkZfTUlTQ19DVFJMX1RTTV9JTlRSX0VOX1NISUZUICAgICAgKDFVKQorI2RlZmluZSBCVExFX1JGX01JU0NfQ1RSTF9UU01fSU5UUl9FTih4KSAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgQlRMRV9SRl9NSVNDX0NUUkxfVFNNX0lOVFJfRU5fU0hJRlQpKSAmIEJUTEVfUkZfTUlTQ19DVFJMX1RTTV9JTlRSX0VOX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBCVExFX1JGX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogQlRMRV9SRiAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIEJUTEVfUkYgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEJUTEVfUkZfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNUIwMDB1KQorLyoqIFBlcmlwaGVyYWwgQlRMRV9SRiBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgQlRMRV9SRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJUTEVfUkZfVHlwZSAqKUJUTEVfUkZfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBCVExFX1JGIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgQlRMRV9SRl9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICB7IEJUTEVfUkZfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgQlRMRV9SRiBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgQlRMRV9SRl9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICB7IEJUTEVfUkYgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIEJUTEVfUkZfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDTVAgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBDTVBfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgQ01QIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBDTVAgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQ4X3QgQ1IwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVAgQ29udHJvbCBSZWdpc3RlciAwLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQ4X3QgQ1IxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVAgQ29udHJvbCBSZWdpc3RlciAxLCBvZmZzZXQ6IDB4MSAqLworICBfX0lPIHVpbnQ4X3QgRlBSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVAgRmlsdGVyIFBlcmlvZCBSZWdpc3Rlciwgb2Zmc2V0OiAweDIgKi8KKyAgX19JTyB1aW50OF90IFNDUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ01QIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDMgKi8KKyAgX19JTyB1aW50OF90IERBQ0NSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgREFDIENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDhfdCBNVVhDUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1VWCBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NSAqLworfSBDTVBfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gQ01QIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgQ01QX1JlZ2lzdGVyX01hc2tzIENNUCBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgQ1IwIC0gQ01QIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBDTVBfQ1IwX0hZU1RDVFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBDTVBfQ1IwX0hZU1RDVFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01QX0NSMF9IWVNUQ1RSKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfQ1IwX0hZU1RDVFJfU0hJRlQpKSAmIENNUF9DUjBfSFlTVENUUl9NQVNLKQorI2RlZmluZSBDTVBfQ1IwX0ZJTFRFUl9DTlRfTUFTSyAgICAgICAgICAgICAgICAgICgweDcwVSkKKyNkZWZpbmUgQ01QX0NSMF9GSUxURVJfQ05UX1NISUZUICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIENNUF9DUjBfRklMVEVSX0NOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX0NSMF9GSUxURVJfQ05UX1NISUZUKSkgJiBDTVBfQ1IwX0ZJTFRFUl9DTlRfTUFTSykKKworLyohIEBuYW1lIENSMSAtIENNUCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgQ01QX0NSMV9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgQ01QX0NSMV9FTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIENNUF9DUjFfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX0NSMV9FTl9TSElGVCkpICYgQ01QX0NSMV9FTl9NQVNLKQorI2RlZmluZSBDTVBfQ1IxX09QRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBDTVBfQ1IxX09QRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgQ01QX0NSMV9PUEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfQ1IxX09QRV9TSElGVCkpICYgQ01QX0NSMV9PUEVfTUFTSykKKyNkZWZpbmUgQ01QX0NSMV9DT1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgQ01QX0NSMV9DT1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIENNUF9DUjFfQ09TKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX0NSMV9DT1NfU0hJRlQpKSAmIENNUF9DUjFfQ09TX01BU0spCisjZGVmaW5lIENNUF9DUjFfSU5WX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIENNUF9DUjFfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBDTVBfQ1IxX0lOVih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNUF9DUjFfSU5WX1NISUZUKSkgJiBDTVBfQ1IxX0lOVl9NQVNLKQorI2RlZmluZSBDTVBfQ1IxX1BNT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgQ01QX0NSMV9QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIENNUF9DUjFfUE1PREUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX0NSMV9QTU9ERV9TSElGVCkpICYgQ01QX0NSMV9QTU9ERV9NQVNLKQorI2RlZmluZSBDTVBfQ1IxX1RSSUdNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgQ01QX0NSMV9UUklHTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIENNUF9DUjFfVFJJR00oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX0NSMV9UUklHTV9TSElGVCkpICYgQ01QX0NSMV9UUklHTV9NQVNLKQorI2RlZmluZSBDTVBfQ1IxX1dFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgQ01QX0NSMV9XRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIENNUF9DUjFfV0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX0NSMV9XRV9TSElGVCkpICYgQ01QX0NSMV9XRV9NQVNLKQorI2RlZmluZSBDTVBfQ1IxX1NFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgQ01QX0NSMV9TRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIENNUF9DUjFfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX0NSMV9TRV9TSElGVCkpICYgQ01QX0NSMV9TRV9NQVNLKQorCisvKiEgQG5hbWUgRlBSIC0gQ01QIEZpbHRlciBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01QX0ZQUl9GSUxUX1BFUl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIENNUF9GUFJfRklMVF9QRVJfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBDTVBfRlBSX0ZJTFRfUEVSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNUF9GUFJfRklMVF9QRVJfU0hJRlQpKSAmIENNUF9GUFJfRklMVF9QRVJfTUFTSykKKworLyohIEBuYW1lIFNDUiAtIENNUCBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01QX1NDUl9DT1VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgQ01QX1NDUl9DT1VUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIENNUF9TQ1JfQ09VVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX1NDUl9DT1VUX1NISUZUKSkgJiBDTVBfU0NSX0NPVVRfTUFTSykKKyNkZWZpbmUgQ01QX1NDUl9DRkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgQ01QX1NDUl9DRkZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIENNUF9TQ1JfQ0ZGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX1NDUl9DRkZfU0hJRlQpKSAmIENNUF9TQ1JfQ0ZGX01BU0spCisjZGVmaW5lIENNUF9TQ1JfQ0ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIENNUF9TQ1JfQ0ZSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBDTVBfU0NSX0NGUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNUF9TQ1JfQ0ZSX1NISUZUKSkgJiBDTVBfU0NSX0NGUl9NQVNLKQorI2RlZmluZSBDTVBfU0NSX0lFRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBDTVBfU0NSX0lFRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgQ01QX1NDUl9JRUYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfU0NSX0lFRl9TSElGVCkpICYgQ01QX1NDUl9JRUZfTUFTSykKKyNkZWZpbmUgQ01QX1NDUl9JRVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIENNUF9TQ1JfSUVSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBDTVBfU0NSX0lFUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNUF9TQ1JfSUVSX1NISUZUKSkgJiBDTVBfU0NSX0lFUl9NQVNLKQorI2RlZmluZSBDTVBfU0NSX0RNQUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgQ01QX1NDUl9ETUFFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIENNUF9TQ1JfRE1BRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX1NDUl9ETUFFTl9TSElGVCkpICYgQ01QX1NDUl9ETUFFTl9NQVNLKQorCisvKiEgQG5hbWUgREFDQ1IgLSBEQUMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBDTVBfREFDQ1JfVk9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDNGVSkKKyNkZWZpbmUgQ01QX0RBQ0NSX1ZPU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIENNUF9EQUNDUl9WT1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX0RBQ0NSX1ZPU0VMX1NISUZUKSkgJiBDTVBfREFDQ1JfVk9TRUxfTUFTSykKKyNkZWZpbmUgQ01QX0RBQ0NSX1ZSU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIENNUF9EQUNDUl9WUlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBDTVBfREFDQ1JfVlJTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNUF9EQUNDUl9WUlNFTF9TSElGVCkpICYgQ01QX0RBQ0NSX1ZSU0VMX01BU0spCisjZGVmaW5lIENNUF9EQUNDUl9EQUNFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBDTVBfREFDQ1JfREFDRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgQ01QX0RBQ0NSX0RBQ0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfREFDQ1JfREFDRU5fU0hJRlQpKSAmIENNUF9EQUNDUl9EQUNFTl9NQVNLKQorCisvKiEgQG5hbWUgTVVYQ1IgLSBNVVggQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBDTVBfTVVYQ1JfTVNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDdVKQorI2RlZmluZSBDTVBfTVVYQ1JfTVNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01QX01VWENSX01TRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfTVVYQ1JfTVNFTF9TSElGVCkpICYgQ01QX01VWENSX01TRUxfTUFTSykKKyNkZWZpbmUgQ01QX01VWENSX1BTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgzOFUpCisjZGVmaW5lIENNUF9NVVhDUl9QU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBDTVBfTVVYQ1JfUFNFTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNUF9NVVhDUl9QU0VMX1NISUZUKSkgJiBDTVBfTVVYQ1JfUFNFTF9NQVNLKQorI2RlZmluZSBDTVBfTVVYQ1JfUFNUTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgQ01QX01VWENSX1BTVE1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIENNUF9NVVhDUl9QU1RNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX01VWENSX1BTVE1fU0hJRlQpKSAmIENNUF9NVVhDUl9QU1RNX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBDTVBfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBDTVAgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBDTVAwIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDTVAwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDczMDAwdSkKKy8qKiBQZXJpcGhlcmFsIENNUDAgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIENNUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDTVBfVHlwZSAqKUNNUDBfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBDTVAgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBDTVBfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ01QMF9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBDTVAgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIENNUF9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDTVAwIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIENNUCBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgQ01QX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENNUDBfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgQ01QX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gQ01UIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgQ01UX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIENNVCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogQ01UIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50OF90IENHSDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ01UIENhcnJpZXIgR2VuZXJhdG9yIEhpZ2ggRGF0YSBSZWdpc3RlciAxLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQ4X3QgQ0dMMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgQ2FycmllciBHZW5lcmF0b3IgTG93IERhdGEgUmVnaXN0ZXIgMSwgb2Zmc2V0OiAweDEgKi8KKyAgX19JTyB1aW50OF90IENHSDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ01UIENhcnJpZXIgR2VuZXJhdG9yIEhpZ2ggRGF0YSBSZWdpc3RlciAyLCBvZmZzZXQ6IDB4MiAqLworICBfX0lPIHVpbnQ4X3QgQ0dMMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgQ2FycmllciBHZW5lcmF0b3IgTG93IERhdGEgUmVnaXN0ZXIgMiwgb2Zmc2V0OiAweDMgKi8KKyAgX19JTyB1aW50OF90IE9DOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ01UIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQ4X3QgTVNDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgTW9kdWxhdG9yIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDUgKi8KKyAgX19JTyB1aW50OF90IENNRDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ01UIE1vZHVsYXRvciBEYXRhIFJlZ2lzdGVyIE1hcmsgSGlnaCwgb2Zmc2V0OiAweDYgKi8KKyAgX19JTyB1aW50OF90IENNRDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ01UIE1vZHVsYXRvciBEYXRhIFJlZ2lzdGVyIE1hcmsgTG93LCBvZmZzZXQ6IDB4NyAqLworICBfX0lPIHVpbnQ4X3QgQ01EMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgTW9kdWxhdG9yIERhdGEgUmVnaXN0ZXIgU3BhY2UgSGlnaCwgb2Zmc2V0OiAweDggKi8KKyAgX19JTyB1aW50OF90IENNRDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ01UIE1vZHVsYXRvciBEYXRhIFJlZ2lzdGVyIFNwYWNlIExvdywgb2Zmc2V0OiAweDkgKi8KKyAgX19JTyB1aW50OF90IFBQUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ01UIFByaW1hcnkgUHJlc2NhbGVyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QSAqLworICBfX0lPIHVpbnQ4X3QgRE1BOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgUmVnaXN0ZXIsIG9mZnNldDogMHhCICovCit9IENNVF9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDTVQgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBDTVRfUmVnaXN0ZXJfTWFza3MgQ01UIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBDR0gxIC0gQ01UIENhcnJpZXIgR2VuZXJhdG9yIEhpZ2ggRGF0YSBSZWdpc3RlciAxICovCisjZGVmaW5lIENNVF9DR0gxX1BIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBDTVRfQ0dIMV9QSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01UX0NHSDFfUEgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfQ0dIMV9QSF9TSElGVCkpICYgQ01UX0NHSDFfUEhfTUFTSykKKworLyohIEBuYW1lIENHTDEgLSBDTVQgQ2FycmllciBHZW5lcmF0b3IgTG93IERhdGEgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBDTVRfQ0dMMV9QTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgQ01UX0NHTDFfUExfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIENNVF9DR0wxX1BMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX0NHTDFfUExfU0hJRlQpKSAmIENNVF9DR0wxX1BMX01BU0spCisKKy8qISBAbmFtZSBDR0gyIC0gQ01UIENhcnJpZXIgR2VuZXJhdG9yIEhpZ2ggRGF0YSBSZWdpc3RlciAyICovCisjZGVmaW5lIENNVF9DR0gyX1NIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBDTVRfQ0dIMl9TSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01UX0NHSDJfU0goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfQ0dIMl9TSF9TSElGVCkpICYgQ01UX0NHSDJfU0hfTUFTSykKKworLyohIEBuYW1lIENHTDIgLSBDTVQgQ2FycmllciBHZW5lcmF0b3IgTG93IERhdGEgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBDTVRfQ0dMMl9TTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgQ01UX0NHTDJfU0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIENNVF9DR0wyX1NMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX0NHTDJfU0xfU0hJRlQpKSAmIENNVF9DR0wyX1NMX01BU0spCisKKy8qISBAbmFtZSBPQyAtIENNVCBPdXRwdXQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBDTVRfT0NfSVJPUEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgQ01UX09DX0lST1BFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIENNVF9PQ19JUk9QRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX09DX0lST1BFTl9TSElGVCkpICYgQ01UX09DX0lST1BFTl9NQVNLKQorI2RlZmluZSBDTVRfT0NfQ01UUE9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgQ01UX09DX0NNVFBPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIENNVF9PQ19DTVRQT0woeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX09DX0NNVFBPTF9TSElGVCkpICYgQ01UX09DX0NNVFBPTF9NQVNLKQorI2RlZmluZSBDTVRfT0NfSVJPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgQ01UX09DX0lST0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIENNVF9PQ19JUk9MKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX09DX0lST0xfU0hJRlQpKSAmIENNVF9PQ19JUk9MX01BU0spCisKKy8qISBAbmFtZSBNU0MgLSBDTVQgTW9kdWxhdG9yIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBDTVRfTVNDX01DR0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBDTVRfTVNDX01DR0VOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01UX01TQ19NQ0dFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfTVNDX01DR0VOX1NISUZUKSkgJiBDTVRfTVNDX01DR0VOX01BU0spCisjZGVmaW5lIENNVF9NU0NfRU9DSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIENNVF9NU0NfRU9DSUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBDTVRfTVNDX0VPQ0lFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNVF9NU0NfRU9DSUVfU0hJRlQpKSAmIENNVF9NU0NfRU9DSUVfTUFTSykKKyNkZWZpbmUgQ01UX01TQ19GU0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgQ01UX01TQ19GU0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIENNVF9NU0NfRlNLKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX01TQ19GU0tfU0hJRlQpKSAmIENNVF9NU0NfRlNLX01BU0spCisjZGVmaW5lIENNVF9NU0NfQkFTRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIENNVF9NU0NfQkFTRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBDTVRfTVNDX0JBU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNVF9NU0NfQkFTRV9TSElGVCkpICYgQ01UX01TQ19CQVNFX01BU0spCisjZGVmaW5lIENNVF9NU0NfRVhTUENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBDTVRfTVNDX0VYU1BDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgQ01UX01TQ19FWFNQQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfTVNDX0VYU1BDX1NISUZUKSkgJiBDTVRfTVNDX0VYU1BDX01BU0spCisjZGVmaW5lIENNVF9NU0NfQ01URElWX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4NjBVKQorI2RlZmluZSBDTVRfTVNDX0NNVERJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgQ01UX01TQ19DTVRESVYoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfTVNDX0NNVERJVl9TSElGVCkpICYgQ01UX01TQ19DTVRESVZfTUFTSykKKyNkZWZpbmUgQ01UX01TQ19FT0NGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIENNVF9NU0NfRU9DRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBDTVRfTVNDX0VPQ0YoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNVF9NU0NfRU9DRl9TSElGVCkpICYgQ01UX01TQ19FT0NGX01BU0spCisKKy8qISBAbmFtZSBDTUQxIC0gQ01UIE1vZHVsYXRvciBEYXRhIFJlZ2lzdGVyIE1hcmsgSGlnaCAqLworI2RlZmluZSBDTVRfQ01EMV9NQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgQ01UX0NNRDFfTUJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIENNVF9DTUQxX01CKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX0NNRDFfTUJfU0hJRlQpKSAmIENNVF9DTUQxX01CX01BU0spCisKKy8qISBAbmFtZSBDTUQyIC0gQ01UIE1vZHVsYXRvciBEYXRhIFJlZ2lzdGVyIE1hcmsgTG93ICovCisjZGVmaW5lIENNVF9DTUQyX01CX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBDTVRfQ01EMl9NQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01UX0NNRDJfTUIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfQ01EMl9NQl9TSElGVCkpICYgQ01UX0NNRDJfTUJfTUFTSykKKworLyohIEBuYW1lIENNRDMgLSBDTVQgTW9kdWxhdG9yIERhdGEgUmVnaXN0ZXIgU3BhY2UgSGlnaCAqLworI2RlZmluZSBDTVRfQ01EM19TQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgQ01UX0NNRDNfU0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIENNVF9DTUQzX1NCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX0NNRDNfU0JfU0hJRlQpKSAmIENNVF9DTUQzX1NCX01BU0spCisKKy8qISBAbmFtZSBDTUQ0IC0gQ01UIE1vZHVsYXRvciBEYXRhIFJlZ2lzdGVyIFNwYWNlIExvdyAqLworI2RlZmluZSBDTVRfQ01ENF9TQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgQ01UX0NNRDRfU0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIENNVF9DTUQ0X1NCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX0NNRDRfU0JfU0hJRlQpKSAmIENNVF9DTUQ0X1NCX01BU0spCisKKy8qISBAbmFtZSBQUFMgLSBDTVQgUHJpbWFyeSBQcmVzY2FsZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01UX1BQU19QUFNESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgQ01UX1BQU19QUFNESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIENNVF9QUFNfUFBTRElWKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX1BQU19QUFNESVZfU0hJRlQpKSAmIENNVF9QUFNfUFBTRElWX01BU0spCisKKy8qISBAbmFtZSBETUEgLSBDTVQgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01UX0RNQV9ETUFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgQ01UX0RNQV9ETUFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIENNVF9ETUFfRE1BKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX0RNQV9ETUFfU0hJRlQpKSAmIENNVF9ETUFfRE1BX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBDTVRfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBDTVQgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBDTVQgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENNVF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNjIwMDB1KQorLyoqIFBlcmlwaGVyYWwgQ01UIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBDTVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ01UX1R5cGUgKilDTVRfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBDTVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBDTVRfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ01UX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIENNVCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgQ01UX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENNVCB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBDTVQgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIENNVF9JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDTVRfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgQ01UX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gREFDIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgREFDX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIERBQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogREFDIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldDogMHgwLCBhcnJheSBzdGVwOiAweDIgKi8KKyAgICBfX0lPIHVpbnQ4X3QgREFUTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQUMgRGF0YSBMb3cgUmVnaXN0ZXIsIGFycmF5IG9mZnNldDogMHgwLCBhcnJheSBzdGVwOiAweDIgKi8KKyAgICBfX0lPIHVpbnQ4X3QgREFUSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQUMgRGF0YSBIaWdoIFJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4MSwgYXJyYXkgc3RlcDogMHgyICovCisgIH0gREFUWzJdOworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFsyOF07CisgIF9fSU8gdWludDhfdCBTUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERBQyBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHgyMCAqLworICBfX0lPIHVpbnQ4X3QgQzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQUMgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDIxICovCisgIF9fSU8gdWludDhfdCBDMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERBQyBDb250cm9sIFJlZ2lzdGVyIDEsIG9mZnNldDogMHgyMiAqLworICBfX0lPIHVpbnQ4X3QgQzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQUMgQ29udHJvbCBSZWdpc3RlciAyLCBvZmZzZXQ6IDB4MjMgKi8KK30gREFDX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIERBQyBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIERBQ19SZWdpc3Rlcl9NYXNrcyBEQUMgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIERBVEwgLSBEQUMgRGF0YSBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgREFDX0RBVExfREFUQTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIERBQ19EQVRMX0RBVEEwX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBEQUNfREFUTF9EQVRBMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19EQVRMX0RBVEEwX1NISUZUKSkgJiBEQUNfREFUTF9EQVRBMF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgREFDX0RBVEwgKi8KKyNkZWZpbmUgREFDX0RBVExfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisKKy8qISBAbmFtZSBEQVRIIC0gREFDIERhdGEgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSBEQUNfREFUSF9EQVRBMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBEQUNfREFUSF9EQVRBMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgREFDX0RBVEhfREFUQTEoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfREFUSF9EQVRBMV9TSElGVCkpICYgREFDX0RBVEhfREFUQTFfTUFTSykKKworLyogVGhlIGNvdW50IG9mIERBQ19EQVRIICovCisjZGVmaW5lIERBQ19EQVRIX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorCisvKiEgQG5hbWUgU1IgLSBEQUMgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERBQ19TUl9EQUNCRlJQQkZfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIERBQ19TUl9EQUNCRlJQQkZfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBEQUNfU1JfREFDQkZSUEJGKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19TUl9EQUNCRlJQQkZfU0hJRlQpKSAmIERBQ19TUl9EQUNCRlJQQkZfTUFTSykKKyNkZWZpbmUgREFDX1NSX0RBQ0JGUlBURl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgREFDX1NSX0RBQ0JGUlBURl9TSElGVCAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIERBQ19TUl9EQUNCRlJQVEYoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgREFDX1NSX0RBQ0JGUlBURl9TSElGVCkpICYgREFDX1NSX0RBQ0JGUlBURl9NQVNLKQorI2RlZmluZSBEQUNfU1JfREFDQkZXTUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBEQUNfU1JfREFDQkZXTUZfU0hJRlQgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgREFDX1NSX0RBQ0JGV01GKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfU1JfREFDQkZXTUZfU0hJRlQpKSAmIERBQ19TUl9EQUNCRldNRl9NQVNLKQorCisvKiEgQG5hbWUgQzAgLSBEQUMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBEQUNfQzBfREFDQkJJRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBEQUNfQzBfREFDQkJJRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgREFDX0MwX0RBQ0JCSUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfQzBfREFDQkJJRU5fU0hJRlQpKSAmIERBQ19DMF9EQUNCQklFTl9NQVNLKQorI2RlZmluZSBEQUNfQzBfREFDQlRJRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBEQUNfQzBfREFDQlRJRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgREFDX0MwX0RBQ0JUSUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfQzBfREFDQlRJRU5fU0hJRlQpKSAmIERBQ19DMF9EQUNCVElFTl9NQVNLKQorI2RlZmluZSBEQUNfQzBfREFDQldJRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBEQUNfQzBfREFDQldJRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgREFDX0MwX0RBQ0JXSUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfQzBfREFDQldJRU5fU0hJRlQpKSAmIERBQ19DMF9EQUNCV0lFTl9NQVNLKQorI2RlZmluZSBEQUNfQzBfTFBFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBEQUNfQzBfTFBFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgREFDX0MwX0xQRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfQzBfTFBFTl9TSElGVCkpICYgREFDX0MwX0xQRU5fTUFTSykKKyNkZWZpbmUgREFDX0MwX0RBQ1NXVFJHX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIERBQ19DMF9EQUNTV1RSR19TSElGVCAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBEQUNfQzBfREFDU1dUUkcoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMF9EQUNTV1RSR19TSElGVCkpICYgREFDX0MwX0RBQ1NXVFJHX01BU0spCisjZGVmaW5lIERBQ19DMF9EQUNUUkdTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBEQUNfQzBfREFDVFJHU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgREFDX0MwX0RBQ1RSR1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfQzBfREFDVFJHU0VMX1NISUZUKSkgJiBEQUNfQzBfREFDVFJHU0VMX01BU0spCisjZGVmaW5lIERBQ19DMF9EQUNSRlNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBEQUNfQzBfREFDUkZTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgREFDX0MwX0RBQ1JGUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfQzBfREFDUkZTX1NISUZUKSkgJiBEQUNfQzBfREFDUkZTX01BU0spCisjZGVmaW5lIERBQ19DMF9EQUNFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBEQUNfQzBfREFDRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgREFDX0MwX0RBQ0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfQzBfREFDRU5fU0hJRlQpKSAmIERBQ19DMF9EQUNFTl9NQVNLKQorCisvKiEgQG5hbWUgQzEgLSBEQUMgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIERBQ19DMV9EQUNCRkVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIERBQ19DMV9EQUNCRkVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBEQUNfQzFfREFDQkZFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMV9EQUNCRkVOX1NISUZUKSkgJiBEQUNfQzFfREFDQkZFTl9NQVNLKQorI2RlZmluZSBEQUNfQzFfREFDQkZNRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBEQUNfQzFfREFDQkZNRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgREFDX0MxX0RBQ0JGTUQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfQzFfREFDQkZNRF9TSElGVCkpICYgREFDX0MxX0RBQ0JGTURfTUFTSykKKyNkZWZpbmUgREFDX0MxX0RBQ0JGV01fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxOFUpCisjZGVmaW5lIERBQ19DMV9EQUNCRldNX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBEQUNfQzFfREFDQkZXTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMV9EQUNCRldNX1NISUZUKSkgJiBEQUNfQzFfREFDQkZXTV9NQVNLKQorI2RlZmluZSBEQUNfQzFfRE1BRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgREFDX0MxX0RNQUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERBQ19DMV9ETUFFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgREFDX0MxX0RNQUVOX1NISUZUKSkgJiBEQUNfQzFfRE1BRU5fTUFTSykKKworLyohIEBuYW1lIEMyIC0gREFDIENvbnRyb2wgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBEQUNfQzJfREFDQkZVUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBEQUNfQzJfREFDQkZVUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgREFDX0MyX0RBQ0JGVVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfQzJfREFDQkZVUF9TSElGVCkpICYgREFDX0MyX0RBQ0JGVVBfTUFTSykKKyNkZWZpbmUgREFDX0MyX0RBQ0JGUlBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIERBQ19DMl9EQUNCRlJQX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBEQUNfQzJfREFDQkZSUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMl9EQUNCRlJQX1NISUZUKSkgJiBEQUNfQzJfREFDQkZSUF9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgREFDX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogREFDIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgREFDMCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgREFDMF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAzRjAwMHUpCisvKiogUGVyaXBoZXJhbCBEQUMwIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBEQUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREFDX1R5cGUgKilEQUMwX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgREFDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgREFDX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IERBQzBfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgREFDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBEQUNfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgREFDMCB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBEQUMgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIERBQ19JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBEQUMwX0lSUW4gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIERBQ19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIERDREMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBEQ0RDX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIERDREMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIERDREMgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IFJFRzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ0RDIFJFR0lTVEVSIDAsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgUkVHMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERDREMgUkVHSVNURVIgMSwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBSRUcyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENEQyBSRUdJU1RFUiAyLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQzMl90IFJFRzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ0RDIFJFR0lTVEVSIDMsIG9mZnNldDogMHhDICovCisgIF9fSU8gdWludDMyX3QgUkVHNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERDREMgUkVHSVNURVIgNCwgb2Zmc2V0OiAweDEwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzRdOworICBfX0lPIHVpbnQzMl90IFJFRzY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ0RDIFJFR0lTVEVSIDYsIG9mZnNldDogMHgxOCAqLworICBfX0lPIHVpbnQzMl90IFJFRzc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ0RDIFJFR0lTVEVSIDcsIG9mZnNldDogMHgxQyAqLworfSBEQ0RDX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIERDREMgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBEQ0RDX1JlZ2lzdGVyX01hc2tzIERDREMgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFJFRzAgLSBEQ0RDIFJFR0lTVEVSIDAgKi8KKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfRElTQUJMRV9BVVRPX0NMS19TV0lUQ0hfTUFTSyAoMHgyVSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfRElTQUJMRV9BVVRPX0NMS19TV0lUQ0hfU0hJRlQgKDFVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19ESVNBQkxFX0FVVE9fQ0xLX1NXSVRDSCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9EQ0RDX0RJU0FCTEVfQVVUT19DTEtfU1dJVENIX1NISUZUKSkgJiBEQ0RDX1JFRzBfRENEQ19ESVNBQkxFX0FVVE9fQ0xLX1NXSVRDSF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19TRUxfQ0xLX01BU0sgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19TRUxfQ0xLX1NISUZUICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfU0VMX0NMSyh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9EQ0RDX1NFTF9DTEtfU0hJRlQpKSAmIERDRENfUkVHMF9EQ0RDX1NFTF9DTEtfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfUFdEX09TQ19JTlRfTUFTSyAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfUFdEX09TQ19JTlRfU0hJRlQgICAgICAgICAoM1UpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX1BXRF9PU0NfSU5UKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzBfRENEQ19QV0RfT1NDX0lOVF9TSElGVCkpICYgRENEQ19SRUcwX0RDRENfUFdEX09TQ19JTlRfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfTFBfREZfQ01QX0VOQUJMRV9NQVNLICAgICAoMHgyMDBVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19MUF9ERl9DTVBfRU5BQkxFX1NISUZUICAgICg5VSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfTFBfREZfQ01QX0VOQUJMRSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9EQ0RDX0xQX0RGX0NNUF9FTkFCTEVfU0hJRlQpKSAmIERDRENfUkVHMF9EQ0RDX0xQX0RGX0NNUF9FTkFCTEVfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfVkJBVF9ESVZfQ1RSTF9NQVNLICAgICAgICAoMHhDMDBVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19WQkFUX0RJVl9DVFJMX1NISUZUICAgICAgICgxMFUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX1ZCQVRfRElWX0NUUkwoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzBfRENEQ19WQkFUX0RJVl9DVFJMX1NISUZUKSkgJiBEQ0RDX1JFRzBfRENEQ19WQkFUX0RJVl9DVFJMX01BU0spCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX0xQX1NUQVRFX0hZU19MX01BU0sgICAgICAgKDB4NjAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19MUF9TVEFURV9IWVNfTF9TSElGVCAgICAgICgxN1UpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX0xQX1NUQVRFX0hZU19MKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzBfRENEQ19MUF9TVEFURV9IWVNfTF9TSElGVCkpICYgRENEQ19SRUcwX0RDRENfTFBfU1RBVEVfSFlTX0xfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfTFBfU1RBVEVfSFlTX0hfTUFTSyAgICAgICAoMHgxODAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19MUF9TVEFURV9IWVNfSF9TSElGVCAgICAgICgxOVUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX0xQX1NUQVRFX0hZU19IKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzBfRENEQ19MUF9TVEFURV9IWVNfSF9TSElGVCkpICYgRENEQ19SRUcwX0RDRENfTFBfU1RBVEVfSFlTX0hfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX0hZU1RfTFBfQ09NUF9BREpfTUFTSyAgICAgICAgICAoMHgyMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzBfSFlTVF9MUF9DT01QX0FESl9TSElGVCAgICAgICAgICgyMVUpCisjZGVmaW5lIERDRENfUkVHMF9IWVNUX0xQX0NPTVBfQURKKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzBfSFlTVF9MUF9DT01QX0FESl9TSElGVCkpICYgRENEQ19SRUcwX0hZU1RfTFBfQ09NUF9BREpfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX0hZU1RfTFBfQ01QX0RJU0FCTEVfTUFTSyAgICAgICAoMHg0MDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzBfSFlTVF9MUF9DTVBfRElTQUJMRV9TSElGVCAgICAgICgyMlUpCisjZGVmaW5lIERDRENfUkVHMF9IWVNUX0xQX0NNUF9ESVNBQkxFKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzBfSFlTVF9MUF9DTVBfRElTQUJMRV9TSElGVCkpICYgRENEQ19SRUcwX0hZU1RfTFBfQ01QX0RJU0FCTEVfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX09GRlNFVF9SU05TX0xQX0FESl9NQVNLICAgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzBfT0ZGU0VUX1JTTlNfTFBfQURKX1NISUZUICAgICAgICgyM1UpCisjZGVmaW5lIERDRENfUkVHMF9PRkZTRVRfUlNOU19MUF9BREooeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzBfT0ZGU0VUX1JTTlNfTFBfQURKX1NISUZUKSkgJiBEQ0RDX1JFRzBfT0ZGU0VUX1JTTlNfTFBfQURKX01BU0spCisjZGVmaW5lIERDRENfUkVHMF9PRkZTRVRfUlNOU19MUF9ESVNBQkxFX01BU0sgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9PRkZTRVRfUlNOU19MUF9ESVNBQkxFX1NISUZUICAgKDI0VSkKKyNkZWZpbmUgRENEQ19SRUcwX09GRlNFVF9SU05TX0xQX0RJU0FCTEUoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9PRkZTRVRfUlNOU19MUF9ESVNBQkxFX1NISUZUKSkgJiBEQ0RDX1JFRzBfT0ZGU0VUX1JTTlNfTFBfRElTQUJMRV9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19MRVNTX0lfTUFTSyAgICAgICAgICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19MRVNTX0lfU0hJRlQgICAgICAgICAgICAgICgyNVUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX0xFU1NfSSh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzBfRENEQ19MRVNTX0lfU0hJRlQpKSAmIERDRENfUkVHMF9EQ0RDX0xFU1NfSV9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfUFdEX0NNUF9PRkZTRVRfTUFTSyAgICAgICAgICAgICgweDQwMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzBfUFdEX0NNUF9PRkZTRVRfU0hJRlQgICAgICAgICAgICgyNlUpCisjZGVmaW5lIERDRENfUkVHMF9QV0RfQ01QX09GRlNFVCh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzBfUFdEX0NNUF9PRkZTRVRfU0hJRlQpKSAmIERDRENfUkVHMF9QV0RfQ01QX09GRlNFVF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19YVEFMT0tfRElTQUJMRV9NQVNLICAgICAgICgweDgwMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19YVEFMT0tfRElTQUJMRV9TSElGVCAgICAgICgyN1UpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX1hUQUxPS19ESVNBQkxFKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzBfRENEQ19YVEFMT0tfRElTQUJMRV9TSElGVCkpICYgRENEQ19SRUcwX0RDRENfWFRBTE9LX0RJU0FCTEVfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX1BTV0lUQ0hfU1RBVFVTX01BU0sgICAgICAgICAgICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9QU1dJVENIX1NUQVRVU19TSElGVCAgICAgICAgICAgKDI4VSkKKyNkZWZpbmUgRENEQ19SRUcwX1BTV0lUQ0hfU1RBVFVTKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9QU1dJVENIX1NUQVRVU19TSElGVCkpICYgRENEQ19SRUcwX1BTV0lUQ0hfU1RBVFVTX01BU0spCisjZGVmaW5lIERDRENfUkVHMF9WTFBTX0NPTkZJR19EQ0RDX0hQX01BU0sgICAgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzBfVkxQU19DT05GSUdfRENEQ19IUF9TSElGVCAgICAgICgyOVUpCisjZGVmaW5lIERDRENfUkVHMF9WTFBTX0NPTkZJR19EQ0RDX0hQKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzBfVkxQU19DT05GSUdfRENEQ19IUF9TSElGVCkpICYgRENEQ19SRUcwX1ZMUFNfQ09ORklHX0RDRENfSFBfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX1ZMUFJfVkxQV19DT05GSUdfRENEQ19IUF9NQVNLICAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9WTFBSX1ZMUFdfQ09ORklHX0RDRENfSFBfU0hJRlQgKDMwVSkKKyNkZWZpbmUgRENEQ19SRUcwX1ZMUFJfVkxQV19DT05GSUdfRENEQ19IUCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9WTFBSX1ZMUFdfQ09ORklHX0RDRENfSFBfU0hJRlQpKSAmIERDRENfUkVHMF9WTFBSX1ZMUFdfQ09ORklHX0RDRENfSFBfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfU1RTX0RDX09LX01BU0sgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX1NUU19EQ19PS19TSElGVCAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfU1RTX0RDX09LKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9EQ0RDX1NUU19EQ19PS19TSElGVCkpICYgRENEQ19SRUcwX0RDRENfU1RTX0RDX09LX01BU0spCisKKy8qISBAbmFtZSBSRUcxIC0gRENEQyBSRUdJU1RFUiAxICovCisjZGVmaW5lIERDRENfUkVHMV9QT1NMSU1JVF9CVUNLX0lOX01BU0sgICAgICAgICAgKDB4N0ZVKQorI2RlZmluZSBEQ0RDX1JFRzFfUE9TTElNSVRfQlVDS19JTl9TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgRENEQ19SRUcxX1BPU0xJTUlUX0JVQ0tfSU4oeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMV9QT1NMSU1JVF9CVUNLX0lOX1NISUZUKSkgJiBEQ0RDX1JFRzFfUE9TTElNSVRfQlVDS19JTl9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzFfUE9TTElNSVRfQk9PU1RfSU5fTUFTSyAgICAgICAgICgweDNGODBVKQorI2RlZmluZSBEQ0RDX1JFRzFfUE9TTElNSVRfQk9PU1RfSU5fU0hJRlQgICAgICAgICg3VSkKKyNkZWZpbmUgRENEQ19SRUcxX1BPU0xJTUlUX0JPT1NUX0lOKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMV9QT1NMSU1JVF9CT09TVF9JTl9TSElGVCkpICYgRENEQ19SRUcxX1BPU0xJTUlUX0JPT1NUX0lOX01BU0spCisjZGVmaW5lIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0NNX0hTVF9USFJFU0hfTUFTSyAoMHgyMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9DTV9IU1RfVEhSRVNIX1NISUZUICgyMVUpCisjZGVmaW5lIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0NNX0hTVF9USFJFU0goeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9DTV9IU1RfVEhSRVNIX1NISUZUKSkgJiBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9DTV9IU1RfVEhSRVNIX01BU0spCisjZGVmaW5lIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0RGX0hTVF9USFJFU0hfTUFTSyAoMHg0MDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9ERl9IU1RfVEhSRVNIX1NISUZUICgyMlUpCisjZGVmaW5lIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0RGX0hTVF9USFJFU0goeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9ERl9IU1RfVEhSRVNIX1NISUZUKSkgJiBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9ERl9IU1RfVEhSRVNIX01BU0spCisjZGVmaW5lIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0VOX0NNX0hZU1RfTUFTSyAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUcxX0RDRENfTE9PUENUUkxfRU5fQ01fSFlTVF9TSElGVCAoMjNVKQorI2RlZmluZSBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9FTl9DTV9IWVNUKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcxX0RDRENfTE9PUENUUkxfRU5fQ01fSFlTVF9TSElGVCkpICYgRENEQ19SRUcxX0RDRENfTE9PUENUUkxfRU5fQ01fSFlTVF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9FTl9ERl9IWVNUX01BU0sgICgweDEwMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9FTl9ERl9IWVNUX1NISUZUICgyNFUpCisjZGVmaW5lIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0VOX0RGX0hZU1QoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9FTl9ERl9IWVNUX1NISUZUKSkgJiBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9FTl9ERl9IWVNUX01BU0spCisKKy8qISBAbmFtZSBSRUcyIC0gRENEQyBSRUdJU1RFUiAyICovCisjZGVmaW5lIERDRENfUkVHMl9EQ0RDX0xPT1BDVFJMX0hZU1RfU0lHTl9NQVNLICAgKDB4MjAwMFUpCisjZGVmaW5lIERDRENfUkVHMl9EQ0RDX0xPT1BDVFJMX0hZU1RfU0lHTl9TSElGVCAgKDEzVSkKKyNkZWZpbmUgRENEQ19SRUcyX0RDRENfTE9PUENUUkxfSFlTVF9TSUdOKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMl9EQ0RDX0xPT1BDVFJMX0hZU1RfU0lHTl9TSElGVCkpICYgRENEQ19SRUcyX0RDRENfTE9PUENUUkxfSFlTVF9TSUdOX01BU0spCisjZGVmaW5lIERDRENfUkVHMl9EQ0RDX0JBVFRNT05JVE9SX0VOX0JBVEFESl9NQVNLICgweDgwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzJfRENEQ19CQVRUTU9OSVRPUl9FTl9CQVRBREpfU0hJRlQgKDE1VSkKKyNkZWZpbmUgRENEQ19SRUcyX0RDRENfQkFUVE1PTklUT1JfRU5fQkFUQURKKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMl9EQ0RDX0JBVFRNT05JVE9SX0VOX0JBVEFESl9TSElGVCkpICYgRENEQ19SRUcyX0RDRENfQkFUVE1PTklUT1JfRU5fQkFUQURKX01BU0spCisjZGVmaW5lIERDRENfUkVHMl9EQ0RDX0JBVFRNT05JVE9SX0JBVFRfVkFMX01BU0sgKDB4M0ZGMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMl9EQ0RDX0JBVFRNT05JVE9SX0JBVFRfVkFMX1NISUZUICgxNlUpCisjZGVmaW5lIERDRENfUkVHMl9EQ0RDX0JBVFRNT05JVE9SX0JBVFRfVkFMKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzJfRENEQ19CQVRUTU9OSVRPUl9CQVRUX1ZBTF9TSElGVCkpICYgRENEQ19SRUcyX0RDRENfQkFUVE1PTklUT1JfQkFUVF9WQUxfTUFTSykKKworLyohIEBuYW1lIFJFRzMgLSBEQ0RDIFJFR0lTVEVSIDMgKi8KKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA4Q1RSTF9UUkdfTUFTSyAgICAgICAoMHgzRlUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQOENUUkxfVFJHX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19WREQxUDhDVFJMX1RSRyh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUczX0RDRENfVkREMVA4Q1RSTF9UUkdfU0hJRlQpKSAmIERDRENfUkVHM19EQ0RDX1ZERDFQOENUUkxfVFJHX01BU0spCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfVFJHX0JVQ0tfTUFTSyAgKDB4N0MwVSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA1Q1RSTF9UUkdfQlVDS19TSElGVCAoNlUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfVFJHX0JVQ0soeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX1RSR19CVUNLX1NISUZUKSkgJiBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX1RSR19CVUNLX01BU0spCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfVFJHX0JPT1NUX01BU0sgKDB4RjgwMFUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfVFJHX0JPT1NUX1NISUZUICgxMVUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfVFJHX0JPT1NUKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX1RSR19CT09TVF9TSElGVCkpICYgRENEQ19SRUczX0RDRENfVkREMVA1Q1RSTF9UUkdfQk9PU1RfTUFTSykKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA1Q1RSTF9BREpUTl9NQVNLICAgICAoMHgxRTAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX0FESlROX1NISUZUICAgICgxN1UpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfQURKVE4oeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX0FESlROX1NISUZUKSkgJiBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX0FESlROX01BU0spCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9EQ19IQUxGQ0xLX1BVTFNFRF9NQVNLICgweDIwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9EQ19IQUxGQ0xLX1BVTFNFRF9TSElGVCAoMjFVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRENfSEFMRkNMS19QVUxTRUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRENfSEFMRkNMS19QVUxTRURfU0hJRlQpKSAmIERDRENfUkVHM19EQ0RDX01JTlBXUl9EQ19IQUxGQ0xLX1BVTFNFRF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRE9VQkxFX0ZFVFNfUFVMU0VEX01BU0sgKDB4NDAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfTUlOUFdSX0RPVUJMRV9GRVRTX1BVTFNFRF9TSElGVCAoMjJVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRE9VQkxFX0ZFVFNfUFVMU0VEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUczX0RDRENfTUlOUFdSX0RPVUJMRV9GRVRTX1BVTFNFRF9TSElGVCkpICYgRENEQ19SRUczX0RDRENfTUlOUFdSX0RPVUJMRV9GRVRTX1BVTFNFRF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfSEFMRl9GRVRTX1BVTFNFRF9NQVNLICgweDgwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9IQUxGX0ZFVFNfUFVMU0VEX1NISUZUICgyM1UpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9IQUxGX0ZFVFNfUFVMU0VEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUczX0RDRENfTUlOUFdSX0hBTEZfRkVUU19QVUxTRURfU0hJRlQpKSAmIERDRENfUkVHM19EQ0RDX01JTlBXUl9IQUxGX0ZFVFNfUFVMU0VEX01BU0spCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9EQ19IQUxGQ0xLX01BU0sgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9EQ19IQUxGQ0xLX1NISUZUICAgKDI0VSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfTUlOUFdSX0RDX0hBTEZDTEsoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHM19EQ0RDX01JTlBXUl9EQ19IQUxGQ0xLX1NISUZUKSkgJiBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRENfSEFMRkNMS19NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRE9VQkxFX0ZFVFNfTUFTSyAgICgweDIwMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRE9VQkxFX0ZFVFNfU0hJRlQgICgyNVUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9ET1VCTEVfRkVUUyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRE9VQkxFX0ZFVFNfU0hJRlQpKSAmIERDRENfUkVHM19EQ0RDX01JTlBXUl9ET1VCTEVfRkVUU19NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfSEFMRl9GRVRTX01BU0sgICAgICgweDQwMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfSEFMRl9GRVRTX1NISUZUICAgICgyNlUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9IQUxGX0ZFVFMoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfSEFMRl9GRVRTX1NISUZUKSkgJiBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfSEFMRl9GRVRTX01BU0spCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfRElTQUJMRV9TVEVQX01BU0sgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX0RJU0FCTEVfU1RFUF9TSElGVCAoMjlVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX0RJU0FCTEVfU1RFUCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfRElTQUJMRV9TVEVQX1NISUZUKSkgJiBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX0RJU0FCTEVfU1RFUF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19WREQxUDhDVFJMX0RJU0FCTEVfU1RFUF9NQVNLICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA4Q1RSTF9ESVNBQkxFX1NURVBfU0hJRlQgKDMwVSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA4Q1RSTF9ESVNBQkxFX1NURVAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzNfRENEQ19WREQxUDhDVFJMX0RJU0FCTEVfU1RFUF9TSElGVCkpICYgRENEQ19SRUczX0RDRENfVkREMVA4Q1RSTF9ESVNBQkxFX1NURVBfTUFTSykKKworLyohIEBuYW1lIFJFRzQgLSBEQ0RDIFJFR0lTVEVSIDQgKi8KKyNkZWZpbmUgRENEQ19SRUc0X0RDRENfU1dfU0hVVERPV05fTUFTSyAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgRENEQ19SRUc0X0RDRENfU1dfU0hVVERPV05fU0hJRlQgICAgICAgICAoMFUpCisjZGVmaW5lIERDRENfUkVHNF9EQ0RDX1NXX1NIVVRET1dOKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzRfRENEQ19TV19TSFVURE9XTl9TSElGVCkpICYgRENEQ19SRUc0X0RDRENfU1dfU0hVVERPV05fTUFTSykKKyNkZWZpbmUgRENEQ19SRUc0X1VOTE9DS19NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIERDRENfUkVHNF9VTkxPQ0tfU0hJRlQgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgRENEQ19SRUc0X1VOTE9DSyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHNF9VTkxPQ0tfU0hJRlQpKSAmIERDRENfUkVHNF9VTkxPQ0tfTUFTSykKKworLyohIEBuYW1lIFJFRzYgLSBEQ0RDIFJFR0lTVEVSIDYgKi8KKyNkZWZpbmUgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX1JJU0VfRU5fTUFTSyAgICAgICAoMHgxVSkKKyNkZWZpbmUgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX1JJU0VfRU5fU0hJRlQgICAgICAoMFUpCisjZGVmaW5lIERDRENfUkVHNl9QU1dJVENIX0lOVF9SSVNFX0VOKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfUklTRV9FTl9TSElGVCkpICYgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX1JJU0VfRU5fTUFTSykKKyNkZWZpbmUgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX0ZBTExfRU5fTUFTSyAgICAgICAoMHgyVSkKKyNkZWZpbmUgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX0ZBTExfRU5fU0hJRlQgICAgICAoMVUpCisjZGVmaW5lIERDRENfUkVHNl9QU1dJVENIX0lOVF9GQUxMX0VOKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfRkFMTF9FTl9TSElGVCkpICYgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX0ZBTExfRU5fTUFTSykKKyNkZWZpbmUgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX0NMRUFSX01BU0sgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX0NMRUFSX1NISUZUICAgICAgICAoMlUpCisjZGVmaW5lIERDRENfUkVHNl9QU1dJVENIX0lOVF9DTEVBUih4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfQ0xFQVJfU0hJRlQpKSAmIERDRENfUkVHNl9QU1dJVENIX0lOVF9DTEVBUl9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfTVVURV9NQVNLICAgICAgICAgICgweDhVKQorI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfTVVURV9TSElGVCAgICAgICAgICgzVSkKKyNkZWZpbmUgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX01VVEUoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHNl9QU1dJVENIX0lOVF9NVVRFX1NISUZUKSkgJiBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfTVVURV9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfU1RTX01BU0sgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX1NUU19TSElGVCAgICAgICAgICAoMzFVKQorI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfU1RTKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX1NUU19TSElGVCkpICYgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX1NUU19NQVNLKQorCisvKiEgQG5hbWUgUkVHNyAtIERDREMgUkVHSVNURVIgNyAqLworI2RlZmluZSBEQ0RDX1JFRzdfSU5URUdSQVRPUl9WQUxVRV9NQVNLICAgICAgICAgICgweDdGRkZGVSkKKyNkZWZpbmUgRENEQ19SRUc3X0lOVEVHUkFUT1JfVkFMVUVfU0hJRlQgICAgICAgICAoMFUpCisjZGVmaW5lIERDRENfUkVHN19JTlRFR1JBVE9SX1ZBTFVFKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzdfSU5URUdSQVRPUl9WQUxVRV9TSElGVCkpICYgRENEQ19SRUc3X0lOVEVHUkFUT1JfVkFMVUVfTUFTSykKKyNkZWZpbmUgRENEQ19SRUc3X0lOVEVHUkFUT1JfVkFMVUVfU0VMX01BU0sgICAgICAoMHg4MDAwMFUpCisjZGVmaW5lIERDRENfUkVHN19JTlRFR1JBVE9SX1ZBTFVFX1NFTF9TSElGVCAgICAgKDE5VSkKKyNkZWZpbmUgRENEQ19SRUc3X0lOVEVHUkFUT1JfVkFMVUVfU0VMKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHN19JTlRFR1JBVE9SX1ZBTFVFX1NFTF9TSElGVCkpICYgRENEQ19SRUc3X0lOVEVHUkFUT1JfVkFMVUVfU0VMX01BU0spCisjZGVmaW5lIERDRENfUkVHN19QVUxTRV9SVU5fU1BFRURVUF9NQVNLICAgICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUc3X1BVTFNFX1JVTl9TUEVFRFVQX1NISUZUICAgICAgICAoMjBVKQorI2RlZmluZSBEQ0RDX1JFRzdfUFVMU0VfUlVOX1NQRUVEVVAoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUc3X1BVTFNFX1JVTl9TUEVFRFVQX1NISUZUKSkgJiBEQ0RDX1JFRzdfUFVMU0VfUlVOX1NQRUVEVVBfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIERDRENfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBEQ0RDIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgRENEQyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgRENEQ19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA1QTAwMHUpCisvKiogUGVyaXBoZXJhbCBEQ0RDIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBEQ0RDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRENEQ19UeXBlICopRENEQ19CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIERDREMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBEQ0RDX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgIHsgRENEQ19CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBEQ0RDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBEQ0RDX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgRENEQyB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgRENEQ19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIERNQSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIERNQV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBETUEgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIERNQSAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgQ1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgIF9fSSAgdWludDMyX3QgRVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVycm9yIFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbNF07CisgIF9fSU8gdWludDMyX3QgRVJROyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVuYWJsZSBSZXF1ZXN0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMVs0XTsKKyAgX19JTyB1aW50MzJfdCBFRUk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRW5hYmxlIEVycm9yIEludGVycnVwdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDE0ICovCisgIF9fTyAgdWludDhfdCBDRUVJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENsZWFyIEVuYWJsZSBFcnJvciBJbnRlcnJ1cHQgUmVnaXN0ZXIsIG9mZnNldDogMHgxOCAqLworICBfX08gIHVpbnQ4X3QgU0VFSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgRW5hYmxlIEVycm9yIEludGVycnVwdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDE5ICovCisgIF9fTyAgdWludDhfdCBDRVJROyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENsZWFyIEVuYWJsZSBSZXF1ZXN0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MUEgKi8KKyAgX19PICB1aW50OF90IFNFUlE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU2V0IEVuYWJsZSBSZXF1ZXN0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MUIgKi8KKyAgX19PICB1aW50OF90IENETkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2xlYXIgRE9ORSBTdGF0dXMgQml0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MUMgKi8KKyAgX19PICB1aW50OF90IFNTUlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU2V0IFNUQVJUIEJpdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDFEICovCisgIF9fTyAgdWludDhfdCBDRVJSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENsZWFyIEVycm9yIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MUUgKi8KKyAgX19PICB1aW50OF90IENJTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2xlYXIgSW50ZXJydXB0IFJlcXVlc3QgUmVnaXN0ZXIsIG9mZnNldDogMHgxRiAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMls0XTsKKyAgX19JTyB1aW50MzJfdCBJTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSW50ZXJydXB0IFJlcXVlc3QgUmVnaXN0ZXIsIG9mZnNldDogMHgyNCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfM1s0XTsKKyAgX19JTyB1aW50MzJfdCBFUlI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXJyb3IgUmVnaXN0ZXIsIG9mZnNldDogMHgyQyAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfNFs0XTsKKyAgX19JICB1aW50MzJfdCBIUlM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSGFyZHdhcmUgUmVxdWVzdCBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHgzNCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfNVsxMl07CisgIF9fSU8gdWludDMyX3QgRUFSUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVuYWJsZSBBc3luY2hyb25vdXMgUmVxdWVzdCBpbiBTdG9wIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NDQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzZbMTg0XTsKKyAgX19JTyB1aW50OF90IERDSFBSSTM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2hhbm5lbCBuIFByaW9yaXR5IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTAwICovCisgIF9fSU8gdWludDhfdCBEQ0hQUkkyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENoYW5uZWwgbiBQcmlvcml0eSBSZWdpc3Rlciwgb2Zmc2V0OiAweDEwMSAqLworICBfX0lPIHVpbnQ4X3QgRENIUFJJMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDaGFubmVsIG4gUHJpb3JpdHkgUmVnaXN0ZXIsIG9mZnNldDogMHgxMDIgKi8KKyAgX19JTyB1aW50OF90IERDSFBSSTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2hhbm5lbCBuIFByaW9yaXR5IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTAzICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF83WzM4MzZdOworICBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDEwMDAsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNBRERSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUQ0QgU291cmNlIEFkZHJlc3MsIGFycmF5IG9mZnNldDogMHgxMDAwLCBhcnJheSBzdGVwOiAweDIwICovCisgICAgX19JTyB1aW50MTZfdCBTT0ZGOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVENEIFNpZ25lZCBTb3VyY2UgQWRkcmVzcyBPZmZzZXQsIGFycmF5IG9mZnNldDogMHgxMDA0LCBhcnJheSBzdGVwOiAweDIwICovCisgICAgX19JTyB1aW50MTZfdCBBVFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVENEIFRyYW5zZmVyIEF0dHJpYnV0ZXMsIGFycmF5IG9mZnNldDogMHgxMDA2LCBhcnJheSBzdGVwOiAweDIwICovCisgICAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldDogMHgxMDA4LCBhcnJheSBzdGVwOiAweDIwICovCisgICAgICBfX0lPIHVpbnQzMl90IE5CWVRFU19NTE5POyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUQ0QgTWlub3IgQnl0ZSBDb3VudCAoTWlub3IgTG9vcCBNYXBwaW5nIERpc2FibGVkKSwgYXJyYXkgb2Zmc2V0OiAweDEwMDgsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICAgIF9fSU8gdWludDMyX3QgTkJZVEVTX01MT0ZGTk87ICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBTaWduZWQgTWlub3IgTG9vcCBPZmZzZXQgKE1pbm9yIExvb3AgTWFwcGluZyBFbmFibGVkIGFuZCBPZmZzZXQgRGlzYWJsZWQpLCBhcnJheSBvZmZzZXQ6IDB4MTAwOCwgYXJyYXkgc3RlcDogMHgyMCAqLworICAgICAgX19JTyB1aW50MzJfdCBOQllURVNfTUxPRkZZRVM7ICAgICAgICAgICAgICAgICAgIC8qKjwgVENEIFNpZ25lZCBNaW5vciBMb29wIE9mZnNldCAoTWlub3IgTG9vcCBNYXBwaW5nIGFuZCBPZmZzZXQgRW5hYmxlZCksIGFycmF5IG9mZnNldDogMHgxMDA4LCBhcnJheSBzdGVwOiAweDIwICovCisgICAgfTsKKyAgICBfX0lPIHVpbnQzMl90IFNMQVNUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUQ0QgTGFzdCBTb3VyY2UgQWRkcmVzcyBBZGp1c3RtZW50LCBhcnJheSBvZmZzZXQ6IDB4MTAwQywgYXJyYXkgc3RlcDogMHgyMCAqLworICAgIF9fSU8gdWludDMyX3QgREFERFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBEZXN0aW5hdGlvbiBBZGRyZXNzLCBhcnJheSBvZmZzZXQ6IDB4MTAxMCwgYXJyYXkgc3RlcDogMHgyMCAqLworICAgIF9fSU8gdWludDE2X3QgRE9GRjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBTaWduZWQgRGVzdGluYXRpb24gQWRkcmVzcyBPZmZzZXQsIGFycmF5IG9mZnNldDogMHgxMDE0LCBhcnJheSBzdGVwOiAweDIwICovCisgICAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldDogMHgxMDE2LCBhcnJheSBzdGVwOiAweDIwICovCisgICAgICBfX0lPIHVpbnQxNl90IENJVEVSX0VMSU5LTk87ICAgICAgICAgICAgICAgICAgICAgLyoqPCBUQ0QgQ3VycmVudCBNaW5vciBMb29wIExpbmssIE1ham9yIExvb3AgQ291bnQgKENoYW5uZWwgTGlua2luZyBEaXNhYmxlZCksIGFycmF5IG9mZnNldDogMHgxMDE2LCBhcnJheSBzdGVwOiAweDIwICovCisgICAgICBfX0lPIHVpbnQxNl90IENJVEVSX0VMSU5LWUVTOyAgICAgICAgICAgICAgICAgICAgLyoqPCBUQ0QgQ3VycmVudCBNaW5vciBMb29wIExpbmssIE1ham9yIExvb3AgQ291bnQgKENoYW5uZWwgTGlua2luZyBFbmFibGVkKSwgYXJyYXkgb2Zmc2V0OiAweDEwMTYsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICB9OworICAgIF9fSU8gdWludDMyX3QgRExBU1RfU0dBOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBMYXN0IERlc3RpbmF0aW9uIEFkZHJlc3MgQWRqdXN0bWVudC9TY2F0dGVyIEdhdGhlciBBZGRyZXNzLCBhcnJheSBvZmZzZXQ6IDB4MTAxOCwgYXJyYXkgc3RlcDogMHgyMCAqLworICAgIF9fSU8gdWludDE2X3QgQ1NSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBDb250cm9sIGFuZCBTdGF0dXMsIGFycmF5IG9mZnNldDogMHgxMDFDLCBhcnJheSBzdGVwOiAweDIwICovCisgICAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldDogMHgxMDFFLCBhcnJheSBzdGVwOiAweDIwICovCisgICAgICBfX0lPIHVpbnQxNl90IEJJVEVSX0VMSU5LTk87ICAgICAgICAgICAgICAgICAgICAgLyoqPCBUQ0QgQmVnaW5uaW5nIE1pbm9yIExvb3AgTGluaywgTWFqb3IgTG9vcCBDb3VudCAoQ2hhbm5lbCBMaW5raW5nIERpc2FibGVkKSwgYXJyYXkgb2Zmc2V0OiAweDEwMUUsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICAgIF9fSU8gdWludDE2X3QgQklURVJfRUxJTktZRVM7ICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBCZWdpbm5pbmcgTWlub3IgTG9vcCBMaW5rLCBNYWpvciBMb29wIENvdW50IChDaGFubmVsIExpbmtpbmcgRW5hYmxlZCksIGFycmF5IG9mZnNldDogMHgxMDFFLCBhcnJheSBzdGVwOiAweDIwICovCisgICAgfTsKKyAgfSBUQ0RbNF07Cit9IERNQV9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBETUEgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBETUFfUmVnaXN0ZXJfTWFza3MgRE1BIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBDUiAtIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0NSX0VEQkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgRE1BX0NSX0VEQkdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIERNQV9DUl9FREJHKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfQ1JfRURCR19TSElGVCkpICYgRE1BX0NSX0VEQkdfTUFTSykKKyNkZWZpbmUgRE1BX0NSX0VSQ0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgRE1BX0NSX0VSQ0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIERNQV9DUl9FUkNBKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfQ1JfRVJDQV9TSElGVCkpICYgRE1BX0NSX0VSQ0FfTUFTSykKKyNkZWZpbmUgRE1BX0NSX0hPRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIERNQV9DUl9IT0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBETUFfQ1JfSE9FKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0NSX0hPRV9TSElGVCkpICYgRE1BX0NSX0hPRV9NQVNLKQorI2RlZmluZSBETUFfQ1JfSEFMVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgRE1BX0NSX0hBTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIERNQV9DUl9IQUxUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfQ1JfSEFMVF9TSElGVCkpICYgRE1BX0NSX0hBTFRfTUFTSykKKyNkZWZpbmUgRE1BX0NSX0NMTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIERNQV9DUl9DTE1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBETUFfQ1JfQ0xNKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0NSX0NMTV9TSElGVCkpICYgRE1BX0NSX0NMTV9NQVNLKQorI2RlZmluZSBETUFfQ1JfRU1MTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRE1BX0NSX0VNTE1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERNQV9DUl9FTUxNKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfQ1JfRU1MTV9TSElGVCkpICYgRE1BX0NSX0VNTE1fTUFTSykKKyNkZWZpbmUgRE1BX0NSX0VDWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIERNQV9DUl9FQ1hfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgRE1BX0NSX0VDWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9DUl9FQ1hfU0hJRlQpKSAmIERNQV9DUl9FQ1hfTUFTSykKKyNkZWZpbmUgRE1BX0NSX0NYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMFUpCisjZGVmaW5lIERNQV9DUl9DWF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDE3VSkKKyNkZWZpbmUgRE1BX0NSX0NYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9DUl9DWF9TSElGVCkpICYgRE1BX0NSX0NYX01BU0spCisjZGVmaW5lIERNQV9DUl9BQ1RJVkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBETUFfQ1JfQUNUSVZFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIERNQV9DUl9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfQ1JfQUNUSVZFX1NISUZUKSkgJiBETUFfQ1JfQUNUSVZFX01BU0spCisKKy8qISBAbmFtZSBFUyAtIEVycm9yIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBETUFfRVNfREJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBETUFfRVNfREJFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0VTX0RCRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FU19EQkVfU0hJRlQpKSAmIERNQV9FU19EQkVfTUFTSykKKyNkZWZpbmUgRE1BX0VTX1NCRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgRE1BX0VTX1NCRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIERNQV9FU19TQkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVNfU0JFX1NISUZUKSkgJiBETUFfRVNfU0JFX01BU0spCisjZGVmaW5lIERNQV9FU19TR0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIERNQV9FU19TR0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBETUFfRVNfU0dFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VTX1NHRV9TSElGVCkpICYgRE1BX0VTX1NHRV9NQVNLKQorI2RlZmluZSBETUFfRVNfTkNFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBETUFfRVNfTkNFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgRE1BX0VTX05DRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FU19OQ0VfU0hJRlQpKSAmIERNQV9FU19OQ0VfTUFTSykKKyNkZWZpbmUgRE1BX0VTX0RPRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIERNQV9FU19ET0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBETUFfRVNfRE9FKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VTX0RPRV9TSElGVCkpICYgRE1BX0VTX0RPRV9NQVNLKQorI2RlZmluZSBETUFfRVNfREFFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgRE1BX0VTX0RBRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIERNQV9FU19EQUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVNfREFFX1NISUZUKSkgJiBETUFfRVNfREFFX01BU0spCisjZGVmaW5lIERNQV9FU19TT0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBETUFfRVNfU09FX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRE1BX0VTX1NPRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FU19TT0VfU0hJRlQpKSAmIERNQV9FU19TT0VfTUFTSykKKyNkZWZpbmUgRE1BX0VTX1NBRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9FU19TQUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfRVNfU0FFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VTX1NBRV9TSElGVCkpICYgRE1BX0VTX1NBRV9NQVNLKQorI2RlZmluZSBETUFfRVNfRVJSQ0hOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDMwMFUpCisjZGVmaW5lIERNQV9FU19FUlJDSE5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBETUFfRVNfRVJSQ0hOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VTX0VSUkNITl9TSElGVCkpICYgRE1BX0VTX0VSUkNITl9NQVNLKQorI2RlZmluZSBETUFfRVNfQ1BFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDBVKQorI2RlZmluZSBETUFfRVNfQ1BFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgxNFUpCisjZGVmaW5lIERNQV9FU19DUEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVNfQ1BFX1NISUZUKSkgJiBETUFfRVNfQ1BFX01BU0spCisjZGVmaW5lIERNQV9FU19FQ1hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBETUFfRVNfRUNYX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIERNQV9FU19FQ1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVNfRUNYX1NISUZUKSkgJiBETUFfRVNfRUNYX01BU0spCisjZGVmaW5lIERNQV9FU19WTERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBETUFfRVNfVkxEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIERNQV9FU19WTEQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVNfVkxEX1NISUZUKSkgJiBETUFfRVNfVkxEX01BU0spCisKKy8qISBAbmFtZSBFUlEgLSBFbmFibGUgUmVxdWVzdCBSZWdpc3RlciAqLworI2RlZmluZSBETUFfRVJRX0VSUTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBETUFfRVJRX0VSUTBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0VSUV9FUlEwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FUlFfRVJRMF9TSElGVCkpICYgRE1BX0VSUV9FUlEwX01BU0spCisjZGVmaW5lIERNQV9FUlFfRVJRMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIERNQV9FUlFfRVJRMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBETUFfRVJRX0VSUTEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VSUV9FUlExX1NISUZUKSkgJiBETUFfRVJRX0VSUTFfTUFTSykKKyNkZWZpbmUgRE1BX0VSUV9FUlEyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgRE1BX0VSUV9FUlEyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIERNQV9FUlFfRVJRMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVJRX0VSUTJfU0hJRlQpKSAmIERNQV9FUlFfRVJRMl9NQVNLKQorI2RlZmluZSBETUFfRVJRX0VSUTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBETUFfRVJRX0VSUTNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgRE1BX0VSUV9FUlEzKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FUlFfRVJRM19TSElGVCkpICYgRE1BX0VSUV9FUlEzX01BU0spCisKKy8qISBAbmFtZSBFRUkgLSBFbmFibGUgRXJyb3IgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9FRUlfRUVJMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIERNQV9FRUlfRUVJMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfRUVJX0VFSTAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VFSV9FRUkwX1NISUZUKSkgJiBETUFfRUVJX0VFSTBfTUFTSykKKyNkZWZpbmUgRE1BX0VFSV9FRUkxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgRE1BX0VFSV9FRUkxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIERNQV9FRUlfRUVJMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRUVJX0VFSTFfU0hJRlQpKSAmIERNQV9FRUlfRUVJMV9NQVNLKQorI2RlZmluZSBETUFfRUVJX0VFSTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBETUFfRUVJX0VFSTJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgRE1BX0VFSV9FRUkyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FRUlfRUVJMl9TSElGVCkpICYgRE1BX0VFSV9FRUkyX01BU0spCisjZGVmaW5lIERNQV9FRUlfRUVJM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIERNQV9FRUlfRUVJM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBETUFfRUVJX0VFSTMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VFSV9FRUkzX1NISUZUKSkgJiBETUFfRUVJX0VFSTNfTUFTSykKKworLyohIEBuYW1lIENFRUkgLSBDbGVhciBFbmFibGUgRXJyb3IgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9DRUVJX0NFRUlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIERNQV9DRUVJX0NFRUlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfQ0VFSV9DRUVJKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRUVJX0NFRUlfU0hJRlQpKSAmIERNQV9DRUVJX0NFRUlfTUFTSykKKyNkZWZpbmUgRE1BX0NFRUlfQ0FFRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIERNQV9DRUVJX0NBRUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBETUFfQ0VFSV9DQUVFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRUVJX0NBRUVfU0hJRlQpKSAmIERNQV9DRUVJX0NBRUVfTUFTSykKKyNkZWZpbmUgRE1BX0NFRUlfTk9QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9DRUVJX05PUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfQ0VFSV9OT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRUVJX05PUF9TSElGVCkpICYgRE1BX0NFRUlfTk9QX01BU0spCisKKy8qISBAbmFtZSBTRUVJIC0gU2V0IEVuYWJsZSBFcnJvciBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX1NFRUlfU0VFSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgRE1BX1NFRUlfU0VFSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9TRUVJX1NFRUkoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX1NFRUlfU0VFSV9TSElGVCkpICYgRE1BX1NFRUlfU0VFSV9NQVNLKQorI2RlZmluZSBETUFfU0VFSV9TQUVFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRE1BX1NFRUlfU0FFRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIERNQV9TRUVJX1NBRUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX1NFRUlfU0FFRV9TSElGVCkpICYgRE1BX1NFRUlfU0FFRV9NQVNLKQorI2RlZmluZSBETUFfU0VFSV9OT1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRE1BX1NFRUlfTk9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERNQV9TRUVJX05PUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX1NFRUlfTk9QX1NISUZUKSkgJiBETUFfU0VFSV9OT1BfTUFTSykKKworLyohIEBuYW1lIENFUlEgLSBDbGVhciBFbmFibGUgUmVxdWVzdCBSZWdpc3RlciAqLworI2RlZmluZSBETUFfQ0VSUV9DRVJRX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBETUFfQ0VSUV9DRVJRX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0NFUlFfQ0VSUSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfQ0VSUV9DRVJRX1NISUZUKSkgJiBETUFfQ0VSUV9DRVJRX01BU0spCisjZGVmaW5lIERNQV9DRVJRX0NBRVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBETUFfQ0VSUV9DQUVSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRE1BX0NFUlFfQ0FFUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfQ0VSUV9DQUVSX1NISUZUKSkgJiBETUFfQ0VSUV9DQUVSX01BU0spCisjZGVmaW5lIERNQV9DRVJRX05PUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBETUFfQ0VSUV9OT1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgRE1BX0NFUlFfTk9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfQ0VSUV9OT1BfU0hJRlQpKSAmIERNQV9DRVJRX05PUF9NQVNLKQorCisvKiEgQG5hbWUgU0VSUSAtIFNldCBFbmFibGUgUmVxdWVzdCBSZWdpc3RlciAqLworI2RlZmluZSBETUFfU0VSUV9TRVJRX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBETUFfU0VSUV9TRVJRX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX1NFUlFfU0VSUSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfU0VSUV9TRVJRX1NISUZUKSkgJiBETUFfU0VSUV9TRVJRX01BU0spCisjZGVmaW5lIERNQV9TRVJRX1NBRVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBETUFfU0VSUV9TQUVSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRE1BX1NFUlFfU0FFUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfU0VSUV9TQUVSX1NISUZUKSkgJiBETUFfU0VSUV9TQUVSX01BU0spCisjZGVmaW5lIERNQV9TRVJRX05PUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBETUFfU0VSUV9OT1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgRE1BX1NFUlFfTk9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfU0VSUV9OT1BfU0hJRlQpKSAmIERNQV9TRVJRX05PUF9NQVNLKQorCisvKiEgQG5hbWUgQ0RORSAtIENsZWFyIERPTkUgU3RhdHVzIEJpdCBSZWdpc3RlciAqLworI2RlZmluZSBETUFfQ0RORV9DRE5FX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBETUFfQ0RORV9DRE5FX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0NETkVfQ0RORSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfQ0RORV9DRE5FX1NISUZUKSkgJiBETUFfQ0RORV9DRE5FX01BU0spCisjZGVmaW5lIERNQV9DRE5FX0NBRE5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBETUFfQ0RORV9DQUROX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRE1BX0NETkVfQ0FETih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfQ0RORV9DQUROX1NISUZUKSkgJiBETUFfQ0RORV9DQUROX01BU0spCisjZGVmaW5lIERNQV9DRE5FX05PUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBETUFfQ0RORV9OT1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgRE1BX0NETkVfTk9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfQ0RORV9OT1BfU0hJRlQpKSAmIERNQV9DRE5FX05PUF9NQVNLKQorCisvKiEgQG5hbWUgU1NSVCAtIFNldCBTVEFSVCBCaXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX1NTUlRfU1NSVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgRE1BX1NTUlRfU1NSVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9TU1JUX1NTUlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX1NTUlRfU1NSVF9TSElGVCkpICYgRE1BX1NTUlRfU1NSVF9NQVNLKQorI2RlZmluZSBETUFfU1NSVF9TQVNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRE1BX1NTUlRfU0FTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIERNQV9TU1JUX1NBU1QoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX1NTUlRfU0FTVF9TSElGVCkpICYgRE1BX1NTUlRfU0FTVF9NQVNLKQorI2RlZmluZSBETUFfU1NSVF9OT1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRE1BX1NTUlRfTk9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERNQV9TU1JUX05PUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX1NTUlRfTk9QX1NISUZUKSkgJiBETUFfU1NSVF9OT1BfTUFTSykKKworLyohIEBuYW1lIENFUlIgLSBDbGVhciBFcnJvciBSZWdpc3RlciAqLworI2RlZmluZSBETUFfQ0VSUl9DRVJSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBETUFfQ0VSUl9DRVJSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0NFUlJfQ0VSUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfQ0VSUl9DRVJSX1NISUZUKSkgJiBETUFfQ0VSUl9DRVJSX01BU0spCisjZGVmaW5lIERNQV9DRVJSX0NBRUlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBETUFfQ0VSUl9DQUVJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRE1BX0NFUlJfQ0FFSSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfQ0VSUl9DQUVJX1NISUZUKSkgJiBETUFfQ0VSUl9DQUVJX01BU0spCisjZGVmaW5lIERNQV9DRVJSX05PUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBETUFfQ0VSUl9OT1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgRE1BX0NFUlJfTk9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfQ0VSUl9OT1BfU0hJRlQpKSAmIERNQV9DRVJSX05PUF9NQVNLKQorCisvKiEgQG5hbWUgQ0lOVCAtIENsZWFyIEludGVycnVwdCBSZXF1ZXN0IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9DSU5UX0NJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIERNQV9DSU5UX0NJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfQ0lOVF9DSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DSU5UX0NJTlRfU0hJRlQpKSAmIERNQV9DSU5UX0NJTlRfTUFTSykKKyNkZWZpbmUgRE1BX0NJTlRfQ0FJUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIERNQV9DSU5UX0NBSVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBETUFfQ0lOVF9DQUlSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DSU5UX0NBSVJfU0hJRlQpKSAmIERNQV9DSU5UX0NBSVJfTUFTSykKKyNkZWZpbmUgRE1BX0NJTlRfTk9QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9DSU5UX05PUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfQ0lOVF9OT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DSU5UX05PUF9TSElGVCkpICYgRE1BX0NJTlRfTk9QX01BU0spCisKKy8qISBAbmFtZSBJTlQgLSBJbnRlcnJ1cHQgUmVxdWVzdCBSZWdpc3RlciAqLworI2RlZmluZSBETUFfSU5UX0lOVDBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBETUFfSU5UX0lOVDBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0lOVF9JTlQwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9JTlRfSU5UMF9TSElGVCkpICYgRE1BX0lOVF9JTlQwX01BU0spCisjZGVmaW5lIERNQV9JTlRfSU5UMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIERNQV9JTlRfSU5UMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBETUFfSU5UX0lOVDEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0lOVF9JTlQxX1NISUZUKSkgJiBETUFfSU5UX0lOVDFfTUFTSykKKyNkZWZpbmUgRE1BX0lOVF9JTlQyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgRE1BX0lOVF9JTlQyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIERNQV9JTlRfSU5UMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfSU5UX0lOVDJfU0hJRlQpKSAmIERNQV9JTlRfSU5UMl9NQVNLKQorI2RlZmluZSBETUFfSU5UX0lOVDNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBETUFfSU5UX0lOVDNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgRE1BX0lOVF9JTlQzKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9JTlRfSU5UM19TSElGVCkpICYgRE1BX0lOVF9JTlQzX01BU0spCisKKy8qISBAbmFtZSBFUlIgLSBFcnJvciBSZWdpc3RlciAqLworI2RlZmluZSBETUFfRVJSX0VSUjBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBETUFfRVJSX0VSUjBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0VSUl9FUlIwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FUlJfRVJSMF9TSElGVCkpICYgRE1BX0VSUl9FUlIwX01BU0spCisjZGVmaW5lIERNQV9FUlJfRVJSMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIERNQV9FUlJfRVJSMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBETUFfRVJSX0VSUjEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VSUl9FUlIxX1NISUZUKSkgJiBETUFfRVJSX0VSUjFfTUFTSykKKyNkZWZpbmUgRE1BX0VSUl9FUlIyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgRE1BX0VSUl9FUlIyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIERNQV9FUlJfRVJSMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVJSX0VSUjJfU0hJRlQpKSAmIERNQV9FUlJfRVJSMl9NQVNLKQorI2RlZmluZSBETUFfRVJSX0VSUjNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBETUFfRVJSX0VSUjNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgRE1BX0VSUl9FUlIzKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FUlJfRVJSM19TSElGVCkpICYgRE1BX0VSUl9FUlIzX01BU0spCisKKy8qISBAbmFtZSBIUlMgLSBIYXJkd2FyZSBSZXF1ZXN0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBETUFfSFJTX0hSUzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBETUFfSFJTX0hSUzBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0hSU19IUlMwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9IUlNfSFJTMF9TSElGVCkpICYgRE1BX0hSU19IUlMwX01BU0spCisjZGVmaW5lIERNQV9IUlNfSFJTMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIERNQV9IUlNfSFJTMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBETUFfSFJTX0hSUzEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0hSU19IUlMxX1NISUZUKSkgJiBETUFfSFJTX0hSUzFfTUFTSykKKyNkZWZpbmUgRE1BX0hSU19IUlMyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgRE1BX0hSU19IUlMyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIERNQV9IUlNfSFJTMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfSFJTX0hSUzJfU0hJRlQpKSAmIERNQV9IUlNfSFJTMl9NQVNLKQorI2RlZmluZSBETUFfSFJTX0hSUzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBETUFfSFJTX0hSUzNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgRE1BX0hSU19IUlMzKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9IUlNfSFJTM19TSElGVCkpICYgRE1BX0hSU19IUlMzX01BU0spCisKKy8qISBAbmFtZSBFQVJTIC0gRW5hYmxlIEFzeW5jaHJvbm91cyBSZXF1ZXN0IGluIFN0b3AgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0VBUlNfRURSRVFfMF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgRE1BX0VBUlNfRURSRVFfMF9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9FQVJTX0VEUkVRXzAoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRUFSU19FRFJFUV8wX1NISUZUKSkgJiBETUFfRUFSU19FRFJFUV8wX01BU0spCisjZGVmaW5lIERNQV9FQVJTX0VEUkVRXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIERNQV9FQVJTX0VEUkVRXzFfU0hJRlQgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBETUFfRUFSU19FRFJFUV8xKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VBUlNfRURSRVFfMV9TSElGVCkpICYgRE1BX0VBUlNfRURSRVFfMV9NQVNLKQorI2RlZmluZSBETUFfRUFSU19FRFJFUV8yX01BU0sgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBETUFfRUFSU19FRFJFUV8yX1NISUZUICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgRE1BX0VBUlNfRURSRVFfMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FQVJTX0VEUkVRXzJfU0hJRlQpKSAmIERNQV9FQVJTX0VEUkVRXzJfTUFTSykKKyNkZWZpbmUgRE1BX0VBUlNfRURSRVFfM19NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgRE1BX0VBUlNfRURSRVFfM19TSElGVCAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIERNQV9FQVJTX0VEUkVRXzMoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRUFSU19FRFJFUV8zX1NISUZUKSkgJiBETUFfRUFSU19FRFJFUV8zX01BU0spCisKKy8qISBAbmFtZSBEQ0hQUkkzIC0gQ2hhbm5lbCBuIFByaW9yaXR5IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9EQ0hQUkkzX0NIUFJJX01BU0sgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIERNQV9EQ0hQUkkzX0NIUFJJX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfRENIUFJJM19DSFBSSSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9EQ0hQUkkzX0NIUFJJX1NISUZUKSkgJiBETUFfRENIUFJJM19DSFBSSV9NQVNLKQorI2RlZmluZSBETUFfRENIUFJJM19EUEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTNfRFBBX1NISUZUICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIERNQV9EQ0hQUkkzX0RQQSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTNfRFBBX1NISUZUKSkgJiBETUFfRENIUFJJM19EUEFfTUFTSykKKyNkZWZpbmUgRE1BX0RDSFBSSTNfRUNQX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9EQ0hQUkkzX0VDUF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfRENIUFJJM19FQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9EQ0hQUkkzX0VDUF9TSElGVCkpICYgRE1BX0RDSFBSSTNfRUNQX01BU0spCisKKy8qISBAbmFtZSBEQ0hQUkkyIC0gQ2hhbm5lbCBuIFByaW9yaXR5IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9EQ0hQUkkyX0NIUFJJX01BU0sgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIERNQV9EQ0hQUkkyX0NIUFJJX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfRENIUFJJMl9DSFBSSSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9EQ0hQUkkyX0NIUFJJX1NISUZUKSkgJiBETUFfRENIUFJJMl9DSFBSSV9NQVNLKQorI2RlZmluZSBETUFfRENIUFJJMl9EUEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTJfRFBBX1NISUZUICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIERNQV9EQ0hQUkkyX0RQQSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTJfRFBBX1NISUZUKSkgJiBETUFfRENIUFJJMl9EUEFfTUFTSykKKyNkZWZpbmUgRE1BX0RDSFBSSTJfRUNQX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9EQ0hQUkkyX0VDUF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfRENIUFJJMl9FQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9EQ0hQUkkyX0VDUF9TSElGVCkpICYgRE1BX0RDSFBSSTJfRUNQX01BU0spCisKKy8qISBAbmFtZSBEQ0hQUkkxIC0gQ2hhbm5lbCBuIFByaW9yaXR5IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9EQ0hQUkkxX0NIUFJJX01BU0sgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIERNQV9EQ0hQUkkxX0NIUFJJX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfRENIUFJJMV9DSFBSSSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9EQ0hQUkkxX0NIUFJJX1NISUZUKSkgJiBETUFfRENIUFJJMV9DSFBSSV9NQVNLKQorI2RlZmluZSBETUFfRENIUFJJMV9EUEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTFfRFBBX1NISUZUICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIERNQV9EQ0hQUkkxX0RQQSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTFfRFBBX1NISUZUKSkgJiBETUFfRENIUFJJMV9EUEFfTUFTSykKKyNkZWZpbmUgRE1BX0RDSFBSSTFfRUNQX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9EQ0hQUkkxX0VDUF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfRENIUFJJMV9FQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9EQ0hQUkkxX0VDUF9TSElGVCkpICYgRE1BX0RDSFBSSTFfRUNQX01BU0spCisKKy8qISBAbmFtZSBEQ0hQUkkwIC0gQ2hhbm5lbCBuIFByaW9yaXR5IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9EQ0hQUkkwX0NIUFJJX01BU0sgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIERNQV9EQ0hQUkkwX0NIUFJJX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfRENIUFJJMF9DSFBSSSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9EQ0hQUkkwX0NIUFJJX1NISUZUKSkgJiBETUFfRENIUFJJMF9DSFBSSV9NQVNLKQorI2RlZmluZSBETUFfRENIUFJJMF9EUEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTBfRFBBX1NISUZUICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIERNQV9EQ0hQUkkwX0RQQSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTBfRFBBX1NISUZUKSkgJiBETUFfRENIUFJJMF9EUEFfTUFTSykKKyNkZWZpbmUgRE1BX0RDSFBSSTBfRUNQX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9EQ0hQUkkwX0VDUF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfRENIUFJJMF9FQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9EQ0hQUkkwX0VDUF9TSElGVCkpICYgRE1BX0RDSFBSSTBfRUNQX01BU0spCisKKy8qISBAbmFtZSBTQUREUiAtIFRDRCBTb3VyY2UgQWRkcmVzcyAqLworI2RlZmluZSBETUFfU0FERFJfU0FERFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgRE1BX1NBRERSX1NBRERSX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9TQUREUl9TQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfU0FERFJfU0FERFJfU0hJRlQpKSAmIERNQV9TQUREUl9TQUREUl9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgRE1BX1NBRERSICovCisjZGVmaW5lIERNQV9TQUREUl9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgU09GRiAtIFRDRCBTaWduZWQgU291cmNlIEFkZHJlc3MgT2Zmc2V0ICovCisjZGVmaW5lIERNQV9TT0ZGX1NPRkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIERNQV9TT0ZGX1NPRkZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfU09GRl9TT0ZGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX1NPRkZfU09GRl9TSElGVCkpICYgRE1BX1NPRkZfU09GRl9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgRE1BX1NPRkYgKi8KKyNkZWZpbmUgRE1BX1NPRkZfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBBVFRSIC0gVENEIFRyYW5zZmVyIEF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgRE1BX0FUVFJfRFNJWkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg3VSkKKyNkZWZpbmUgRE1BX0FUVFJfRFNJWkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9BVFRSX0RTSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQVRUUl9EU0laRV9TSElGVCkpICYgRE1BX0FUVFJfRFNJWkVfTUFTSykKKyNkZWZpbmUgRE1BX0FUVFJfRE1PRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGOFUpCisjZGVmaW5lIERNQV9BVFRSX0RNT0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBETUFfQVRUUl9ETU9EKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0FUVFJfRE1PRF9TSElGVCkpICYgRE1BX0FUVFJfRE1PRF9NQVNLKQorI2RlZmluZSBETUFfQVRUUl9TU0laRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDcwMFUpCisjZGVmaW5lIERNQV9BVFRSX1NTSVpFX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBETUFfQVRUUl9TU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0FUVFJfU1NJWkVfU0hJRlQpKSAmIERNQV9BVFRSX1NTSVpFX01BU0spCisjZGVmaW5lIERNQV9BVFRSX1NNT0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RjgwMFUpCisjZGVmaW5lIERNQV9BVFRSX1NNT0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDExVSkKKyNkZWZpbmUgRE1BX0FUVFJfU01PRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9BVFRSX1NNT0RfU0hJRlQpKSAmIERNQV9BVFRSX1NNT0RfTUFTSykKKworLyogVGhlIGNvdW50IG9mIERNQV9BVFRSICovCisjZGVmaW5lIERNQV9BVFRSX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgTkJZVEVTX01MTk8gLSBUQ0QgTWlub3IgQnl0ZSBDb3VudCAoTWlub3IgTG9vcCBNYXBwaW5nIERpc2FibGVkKSAqLworI2RlZmluZSBETUFfTkJZVEVTX01MTk9fTkJZVEVTX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgRE1BX05CWVRFU19NTE5PX05CWVRFU19TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9OQllURVNfTUxOT19OQllURVMoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfTkJZVEVTX01MTk9fTkJZVEVTX1NISUZUKSkgJiBETUFfTkJZVEVTX01MTk9fTkJZVEVTX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfTkJZVEVTX01MTk8gKi8KKyNkZWZpbmUgRE1BX05CWVRFU19NTE5PX0NPVU5UICAgICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBOQllURVNfTUxPRkZOTyAtIFRDRCBTaWduZWQgTWlub3IgTG9vcCBPZmZzZXQgKE1pbm9yIExvb3AgTWFwcGluZyBFbmFibGVkIGFuZCBPZmZzZXQgRGlzYWJsZWQpICovCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZOT19OQllURVNfTUFTSyAgICAgICAgICAgKDB4M0ZGRkZGRkZVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGTk9fTkJZVEVTX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRk5PX05CWVRFUyh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9OQllURVNfTUxPRkZOT19OQllURVNfU0hJRlQpKSAmIERNQV9OQllURVNfTUxPRkZOT19OQllURVNfTUFTSykKKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRk5PX0RNTE9FX01BU0sgICAgICAgICAgICAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZOT19ETUxPRV9TSElGVCAgICAgICAgICAgKDMwVSkKKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRk5PX0RNTE9FKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9OQllURVNfTUxPRkZOT19ETUxPRV9TSElGVCkpICYgRE1BX05CWVRFU19NTE9GRk5PX0RNTE9FX01BU0spCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZOT19TTUxPRV9NQVNLICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGTk9fU01MT0VfU0hJRlQgICAgICAgICAgICgzMVUpCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZOT19TTUxPRSh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfTkJZVEVTX01MT0ZGTk9fU01MT0VfU0hJRlQpKSAmIERNQV9OQllURVNfTUxPRkZOT19TTUxPRV9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgRE1BX05CWVRFU19NTE9GRk5PICovCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZOT19DT1VOVCAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgTkJZVEVTX01MT0ZGWUVTIC0gVENEIFNpZ25lZCBNaW5vciBMb29wIE9mZnNldCAoTWlub3IgTG9vcCBNYXBwaW5nIGFuZCBPZmZzZXQgRW5hYmxlZCkgKi8KKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRllFU19OQllURVNfTUFTSyAgICAgICAgICAoMHgzRkZVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX05CWVRFU19TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRllFU19OQllURVMoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9OQllURVNfTUxPRkZZRVNfTkJZVEVTX1NISUZUKSkgJiBETUFfTkJZVEVTX01MT0ZGWUVTX05CWVRFU19NQVNLKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX01MT0ZGX01BU0sgICAgICAgICAgICgweDNGRkZGQzAwVSkKKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRllFU19NTE9GRl9TSElGVCAgICAgICAgICAoMTBVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX01MT0ZGKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX05CWVRFU19NTE9GRllFU19NTE9GRl9TSElGVCkpICYgRE1BX05CWVRFU19NTE9GRllFU19NTE9GRl9NQVNLKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX0RNTE9FX01BU0sgICAgICAgICAgICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRllFU19ETUxPRV9TSElGVCAgICAgICAgICAoMzBVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX0RNTE9FKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX05CWVRFU19NTE9GRllFU19ETUxPRV9TSElGVCkpICYgRE1BX05CWVRFU19NTE9GRllFU19ETUxPRV9NQVNLKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX1NNTE9FX01BU0sgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRllFU19TTUxPRV9TSElGVCAgICAgICAgICAoMzFVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX1NNTE9FKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX05CWVRFU19NTE9GRllFU19TTUxPRV9TSElGVCkpICYgRE1BX05CWVRFU19NTE9GRllFU19TTUxPRV9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgRE1BX05CWVRFU19NTE9GRllFUyAqLworI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX0NPVU5UICAgICAgICAgICAgICAgICg0VSkKKworLyohIEBuYW1lIFNMQVNUIC0gVENEIExhc3QgU291cmNlIEFkZHJlc3MgQWRqdXN0bWVudCAqLworI2RlZmluZSBETUFfU0xBU1RfU0xBU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgRE1BX1NMQVNUX1NMQVNUX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9TTEFTVF9TTEFTVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfU0xBU1RfU0xBU1RfU0hJRlQpKSAmIERNQV9TTEFTVF9TTEFTVF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgRE1BX1NMQVNUICovCisjZGVmaW5lIERNQV9TTEFTVF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgREFERFIgLSBUQ0QgRGVzdGluYXRpb24gQWRkcmVzcyAqLworI2RlZmluZSBETUFfREFERFJfREFERFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgRE1BX0RBRERSX0RBRERSX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9EQUREUl9EQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfREFERFJfREFERFJfU0hJRlQpKSAmIERNQV9EQUREUl9EQUREUl9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgRE1BX0RBRERSICovCisjZGVmaW5lIERNQV9EQUREUl9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgRE9GRiAtIFRDRCBTaWduZWQgRGVzdGluYXRpb24gQWRkcmVzcyBPZmZzZXQgKi8KKyNkZWZpbmUgRE1BX0RPRkZfRE9GRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgRE1BX0RPRkZfRE9GRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9ET0ZGX0RPRkYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfRE9GRl9ET0ZGX1NISUZUKSkgJiBETUFfRE9GRl9ET0ZGX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfRE9GRiAqLworI2RlZmluZSBETUFfRE9GRl9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKworLyohIEBuYW1lIENJVEVSX0VMSU5LTk8gLSBUQ0QgQ3VycmVudCBNaW5vciBMb29wIExpbmssIE1ham9yIExvb3AgQ291bnQgKENoYW5uZWwgTGlua2luZyBEaXNhYmxlZCkgKi8KKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LTk9fQ0lURVJfTUFTSyAgICAgICAgICAgICAoMHg3RkZGVSkKKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LTk9fQ0lURVJfU0hJRlQgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9DSVRFUl9FTElOS05PX0NJVEVSKHgpICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQ0lURVJfRUxJTktOT19DSVRFUl9TSElGVCkpICYgRE1BX0NJVEVSX0VMSU5LTk9fQ0lURVJfTUFTSykKKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LTk9fRUxJTktfTUFTSyAgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LTk9fRUxJTktfU0hJRlQgICAgICAgICAgICAoMTVVKQorI2RlZmluZSBETUFfQ0lURVJfRUxJTktOT19FTElOSyh4KSAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0NJVEVSX0VMSU5LTk9fRUxJTktfU0hJRlQpKSAmIERNQV9DSVRFUl9FTElOS05PX0VMSU5LX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfQ0lURVJfRUxJTktOTyAqLworI2RlZmluZSBETUFfQ0lURVJfRUxJTktOT19DT1VOVCAgICAgICAgICAgICAgICAgICg0VSkKKworLyohIEBuYW1lIENJVEVSX0VMSU5LWUVTIC0gVENEIEN1cnJlbnQgTWlub3IgTG9vcCBMaW5rLCBNYWpvciBMb29wIENvdW50IChDaGFubmVsIExpbmtpbmcgRW5hYmxlZCkgKi8KKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LWUVTX0NJVEVSX01BU0sgICAgICAgICAgICAoMHgxRkZVKQorI2RlZmluZSBETUFfQ0lURVJfRUxJTktZRVNfQ0lURVJfU0hJRlQgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LWUVTX0NJVEVSKHgpICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9DSVRFUl9FTElOS1lFU19DSVRFUl9TSElGVCkpICYgRE1BX0NJVEVSX0VMSU5LWUVTX0NJVEVSX01BU0spCisjZGVmaW5lIERNQV9DSVRFUl9FTElOS1lFU19MSU5LQ0hfTUFTSyAgICAgICAgICAgKDB4NjAwVSkKKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LWUVTX0xJTktDSF9TSElGVCAgICAgICAgICAoOVUpCisjZGVmaW5lIERNQV9DSVRFUl9FTElOS1lFU19MSU5LQ0goeCkgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQ0lURVJfRUxJTktZRVNfTElOS0NIX1NISUZUKSkgJiBETUFfQ0lURVJfRUxJTktZRVNfTElOS0NIX01BU0spCisjZGVmaW5lIERNQV9DSVRFUl9FTElOS1lFU19FTElOS19NQVNLICAgICAgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIERNQV9DSVRFUl9FTElOS1lFU19FTElOS19TSElGVCAgICAgICAgICAgKDE1VSkKKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LWUVTX0VMSU5LKHgpICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9DSVRFUl9FTElOS1lFU19FTElOS19TSElGVCkpICYgRE1BX0NJVEVSX0VMSU5LWUVTX0VMSU5LX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfQ0lURVJfRUxJTktZRVMgKi8KKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LWUVTX0NPVU5UICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBETEFTVF9TR0EgLSBUQ0QgTGFzdCBEZXN0aW5hdGlvbiBBZGRyZXNzIEFkanVzdG1lbnQvU2NhdHRlciBHYXRoZXIgQWRkcmVzcyAqLworI2RlZmluZSBETUFfRExBU1RfU0dBX0RMQVNUU0dBX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgRE1BX0RMQVNUX1NHQV9ETEFTVFNHQV9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9ETEFTVF9TR0FfRExBU1RTR0EoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRExBU1RfU0dBX0RMQVNUU0dBX1NISUZUKSkgJiBETUFfRExBU1RfU0dBX0RMQVNUU0dBX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfRExBU1RfU0dBICovCisjZGVmaW5lIERNQV9ETEFTVF9TR0FfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgQ1NSIC0gVENEIENvbnRyb2wgYW5kIFN0YXR1cyAqLworI2RlZmluZSBETUFfQ1NSX1NUQVJUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBETUFfQ1NSX1NUQVJUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0NTUl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9DU1JfU1RBUlRfU0hJRlQpKSAmIERNQV9DU1JfU1RBUlRfTUFTSykKKyNkZWZpbmUgRE1BX0NTUl9JTlRNQUpPUl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgRE1BX0NTUl9JTlRNQUpPUl9TSElGVCAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIERNQV9DU1JfSU5UTUFKT1IoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQ1NSX0lOVE1BSk9SX1NISUZUKSkgJiBETUFfQ1NSX0lOVE1BSk9SX01BU0spCisjZGVmaW5lIERNQV9DU1JfSU5USEFMRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIERNQV9DU1JfSU5USEFMRl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBETUFfQ1NSX0lOVEhBTEYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0NTUl9JTlRIQUxGX1NISUZUKSkgJiBETUFfQ1NSX0lOVEhBTEZfTUFTSykKKyNkZWZpbmUgRE1BX0NTUl9EUkVRX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgRE1BX0NTUl9EUkVRX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIERNQV9DU1JfRFJFUSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQ1NSX0RSRVFfU0hJRlQpKSAmIERNQV9DU1JfRFJFUV9NQVNLKQorI2RlZmluZSBETUFfQ1NSX0VTR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgRE1BX0NTUl9FU0dfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIERNQV9DU1JfRVNHKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQ1NSX0VTR19TSElGVCkpICYgRE1BX0NTUl9FU0dfTUFTSykKKyNkZWZpbmUgRE1BX0NTUl9NQUpPUkVMSU5LX01BU0sgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIERNQV9DU1JfTUFKT1JFTElOS19TSElGVCAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBETUFfQ1NSX01BSk9SRUxJTksoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0NTUl9NQUpPUkVMSU5LX1NISUZUKSkgJiBETUFfQ1NSX01BSk9SRUxJTktfTUFTSykKKyNkZWZpbmUgRE1BX0NTUl9BQ1RJVkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIERNQV9DU1JfQUNUSVZFX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBETUFfQ1NSX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0NTUl9BQ1RJVkVfU0hJRlQpKSAmIERNQV9DU1JfQUNUSVZFX01BU0spCisjZGVmaW5lIERNQV9DU1JfRE9ORV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBETUFfQ1NSX0RPTkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgRE1BX0NTUl9ET05FKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9DU1JfRE9ORV9TSElGVCkpICYgRE1BX0NTUl9ET05FX01BU0spCisjZGVmaW5lIERNQV9DU1JfTUFKT1JMSU5LQ0hfTUFTSyAgICAgICAgICAgICAgICAgKDB4MzAwVSkKKyNkZWZpbmUgRE1BX0NTUl9NQUpPUkxJTktDSF9TSElGVCAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIERNQV9DU1JfTUFKT1JMSU5LQ0goeCkgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQ1NSX01BSk9STElOS0NIX1NISUZUKSkgJiBETUFfQ1NSX01BSk9STElOS0NIX01BU0spCisjZGVmaW5lIERNQV9DU1JfQldDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QzAwMFUpCisjZGVmaW5lIERNQV9DU1JfQldDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDE0VSkKKyNkZWZpbmUgRE1BX0NTUl9CV0MoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9DU1JfQldDX1NISUZUKSkgJiBETUFfQ1NSX0JXQ19NQVNLKQorCisvKiBUaGUgY291bnQgb2YgRE1BX0NTUiAqLworI2RlZmluZSBETUFfQ1NSX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKworLyohIEBuYW1lIEJJVEVSX0VMSU5LTk8gLSBUQ0QgQmVnaW5uaW5nIE1pbm9yIExvb3AgTGluaywgTWFqb3IgTG9vcCBDb3VudCAoQ2hhbm5lbCBMaW5raW5nIERpc2FibGVkKSAqLworI2RlZmluZSBETUFfQklURVJfRUxJTktOT19CSVRFUl9NQVNLICAgICAgICAgICAgICgweDdGRkZVKQorI2RlZmluZSBETUFfQklURVJfRUxJTktOT19CSVRFUl9TSElGVCAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0JJVEVSX0VMSU5LTk9fQklURVIoeCkgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9CSVRFUl9FTElOS05PX0JJVEVSX1NISUZUKSkgJiBETUFfQklURVJfRUxJTktOT19CSVRFUl9NQVNLKQorI2RlZmluZSBETUFfQklURVJfRUxJTktOT19FTElOS19NQVNLICAgICAgICAgICAgICgweDgwMDBVKQorI2RlZmluZSBETUFfQklURVJfRUxJTktOT19FTElOS19TSElGVCAgICAgICAgICAgICgxNVUpCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS05PX0VMSU5LKHgpICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQklURVJfRUxJTktOT19FTElOS19TSElGVCkpICYgRE1BX0JJVEVSX0VMSU5LTk9fRUxJTktfTUFTSykKKworLyogVGhlIGNvdW50IG9mIERNQV9CSVRFUl9FTElOS05PICovCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS05PX0NPVU5UICAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgQklURVJfRUxJTktZRVMgLSBUQ0QgQmVnaW5uaW5nIE1pbm9yIExvb3AgTGluaywgTWFqb3IgTG9vcCBDb3VudCAoQ2hhbm5lbCBMaW5raW5nIEVuYWJsZWQpICovCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS1lFU19CSVRFUl9NQVNLICAgICAgICAgICAgKDB4MUZGVSkKKyNkZWZpbmUgRE1BX0JJVEVSX0VMSU5LWUVTX0JJVEVSX1NISUZUICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS1lFU19CSVRFUih4KSAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQklURVJfRUxJTktZRVNfQklURVJfU0hJRlQpKSAmIERNQV9CSVRFUl9FTElOS1lFU19CSVRFUl9NQVNLKQorI2RlZmluZSBETUFfQklURVJfRUxJTktZRVNfTElOS0NIX01BU0sgICAgICAgICAgICgweDYwMFUpCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS1lFU19MSU5LQ0hfU0hJRlQgICAgICAgICAgKDlVKQorI2RlZmluZSBETUFfQklURVJfRUxJTktZRVNfTElOS0NIKHgpICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0JJVEVSX0VMSU5LWUVTX0xJTktDSF9TSElGVCkpICYgRE1BX0JJVEVSX0VMSU5LWUVTX0xJTktDSF9NQVNLKQorI2RlZmluZSBETUFfQklURVJfRUxJTktZRVNfRUxJTktfTUFTSyAgICAgICAgICAgICgweDgwMDBVKQorI2RlZmluZSBETUFfQklURVJfRUxJTktZRVNfRUxJTktfU0hJRlQgICAgICAgICAgICgxNVUpCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS1lFU19FTElOSyh4KSAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQklURVJfRUxJTktZRVNfRUxJTktfU0hJRlQpKSAmIERNQV9CSVRFUl9FTElOS1lFU19FTElOS19NQVNLKQorCisvKiBUaGUgY291bnQgb2YgRE1BX0JJVEVSX0VMSU5LWUVTICovCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS1lFU19DT1VOVCAgICAgICAgICAgICAgICAgKDRVKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgRE1BX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogRE1BIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgRE1BIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBETUFfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDA4MDAwdSkKKy8qKiBQZXJpcGhlcmFsIERNQSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgRE1BMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERNQV9UeXBlICopRE1BX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgRE1BX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IERNQV9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBETUEgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIERNQV9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBETUEwIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIERNQSBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgRE1BX0NITl9JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsgRE1BMF9JUlFuLCBETUExX0lSUW4sIERNQTJfSVJRbiwgRE1BM19JUlFuIH0gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIERNQV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIERNQU1VWCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIERNQU1VWF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBETUFNVVggUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIERNQU1VWCAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDhfdCBDSENGR1s0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENoYW5uZWwgQ29uZmlndXJhdGlvbiByZWdpc3RlciwgYXJyYXkgb2Zmc2V0OiAweDAsIGFycmF5IHN0ZXA6IDB4MSAqLworfSBETUFNVVhfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gRE1BTVVYIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgRE1BTVVYX1JlZ2lzdGVyX01hc2tzIERNQU1VWCBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgQ0hDRkcgLSBDaGFubmVsIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BTVVYX0NIQ0ZHX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIERNQU1VWF9DSENGR19TT1VSQ0VfU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFNVVhfQ0hDRkdfU09VUkNFKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQU1VWF9DSENGR19TT1VSQ0VfU0hJRlQpKSAmIERNQU1VWF9DSENGR19TT1VSQ0VfTUFTSykKKyNkZWZpbmUgRE1BTVVYX0NIQ0ZHX1RSSUdfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIERNQU1VWF9DSENGR19UUklHX1NISUZUICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBETUFNVVhfQ0hDRkdfVFJJRyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQU1VWF9DSENGR19UUklHX1NISUZUKSkgJiBETUFNVVhfQ0hDRkdfVFJJR19NQVNLKQorI2RlZmluZSBETUFNVVhfQ0hDRkdfRU5CTF9NQVNLICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRE1BTVVYX0NIQ0ZHX0VOQkxfU0hJRlQgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERNQU1VWF9DSENGR19FTkJMKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BTVVYX0NIQ0ZHX0VOQkxfU0hJRlQpKSAmIERNQU1VWF9DSENGR19FTkJMX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFNVVhfQ0hDRkcgKi8KKyNkZWZpbmUgRE1BTVVYX0NIQ0ZHX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBETUFNVVhfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBETUFNVVggLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBETUFNVVgwIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBETUFNVVgwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDIxMDAwdSkKKy8qKiBQZXJpcGhlcmFsIERNQU1VWDAgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIERNQU1VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChETUFNVVhfVHlwZSAqKURNQU1VWDBfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBETUFNVVhfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgIHsgRE1BTVVYMF9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBETUFNVVggcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIERNQU1VWF9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgeyBETUFNVVgwIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBETUFNVVhfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBGR1BJTyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIEZHUElPX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIEZHUElPIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBGR1BJTyAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgUERPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBvcnQgRGF0YSBPdXRwdXQgUmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgIF9fTyAgdWludDMyX3QgUFNPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBvcnQgU2V0IE91dHB1dCBSZWdpc3Rlciwgb2Zmc2V0OiAweDQgKi8KKyAgX19PICB1aW50MzJfdCBQQ09SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9ydCBDbGVhciBPdXRwdXQgUmVnaXN0ZXIsIG9mZnNldDogMHg4ICovCisgIF9fTyAgdWludDMyX3QgUFRPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBvcnQgVG9nZ2xlIE91dHB1dCBSZWdpc3Rlciwgb2Zmc2V0OiAweEMgKi8KKyAgX19JICB1aW50MzJfdCBQRElSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9ydCBEYXRhIElucHV0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50MzJfdCBQRERSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9ydCBEYXRhIERpcmVjdGlvbiBSZWdpc3Rlciwgb2Zmc2V0OiAweDE0ICovCit9IEZHUElPX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEZHUElPIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgRkdQSU9fUmVnaXN0ZXJfTWFza3MgRkdQSU8gUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFBET1IgLSBQb3J0IERhdGEgT3V0cHV0IFJlZ2lzdGVyICovCisjZGVmaW5lIEZHUElPX1BET1JfUERPX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBGR1BJT19QRE9SX1BET19TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRkdQSU9fUERPUl9QRE8oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEZHUElPX1BET1JfUERPX1NISUZUKSkgJiBGR1BJT19QRE9SX1BET19NQVNLKQorCisvKiEgQG5hbWUgUFNPUiAtIFBvcnQgU2V0IE91dHB1dCBSZWdpc3RlciAqLworI2RlZmluZSBGR1BJT19QU09SX1BUU09fTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgRkdQSU9fUFNPUl9QVFNPX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZHUElPX1BTT1JfUFRTTyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBGR1BJT19QU09SX1BUU09fU0hJRlQpKSAmIEZHUElPX1BTT1JfUFRTT19NQVNLKQorCisvKiEgQG5hbWUgUENPUiAtIFBvcnQgQ2xlYXIgT3V0cHV0IFJlZ2lzdGVyICovCisjZGVmaW5lIEZHUElPX1BDT1JfUFRDT19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBGR1BJT19QQ09SX1BUQ09fU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRkdQSU9fUENPUl9QVENPKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEZHUElPX1BDT1JfUFRDT19TSElGVCkpICYgRkdQSU9fUENPUl9QVENPX01BU0spCisKKy8qISBAbmFtZSBQVE9SIC0gUG9ydCBUb2dnbGUgT3V0cHV0IFJlZ2lzdGVyICovCisjZGVmaW5lIEZHUElPX1BUT1JfUFRUT19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBGR1BJT19QVE9SX1BUVE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRkdQSU9fUFRPUl9QVFRPKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEZHUElPX1BUT1JfUFRUT19TSElGVCkpICYgRkdQSU9fUFRPUl9QVFRPX01BU0spCisKKy8qISBAbmFtZSBQRElSIC0gUG9ydCBEYXRhIElucHV0IFJlZ2lzdGVyICovCisjZGVmaW5lIEZHUElPX1BESVJfUERJX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBGR1BJT19QRElSX1BESV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRkdQSU9fUERJUl9QREkoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEZHUElPX1BESVJfUERJX1NISUZUKSkgJiBGR1BJT19QRElSX1BESV9NQVNLKQorCisvKiEgQG5hbWUgUEREUiAtIFBvcnQgRGF0YSBEaXJlY3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRkdQSU9fUEREUl9QRERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEZHUElPX1BERFJfUEREX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGR1BJT19QRERSX1BERCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRkdQSU9fUEREUl9QRERfU0hJRlQpKSAmIEZHUElPX1BERFJfUEREX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBGR1BJT19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIEZHUElPIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgRkdQSU9BIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBGR1BJT0FfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEY4MDAwMDAwdSkKKy8qKiBQZXJpcGhlcmFsIEZHUElPQSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgRkdQSU9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZHUElPX1R5cGUgKilGR1BJT0FfQkFTRSkKKy8qKiBQZXJpcGhlcmFsIEZHUElPQiBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgRkdQSU9CX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGODAwMDA0MHUpCisvKiogUGVyaXBoZXJhbCBGR1BJT0IgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIEZHUElPQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGR1BJT19UeXBlICopRkdQSU9CX0JBU0UpCisvKiogUGVyaXBoZXJhbCBGR1BJT0MgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEZHUElPQ19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RjgwMDAwODB1KQorLyoqIFBlcmlwaGVyYWwgRkdQSU9DIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBGR1BJT0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkdQSU9fVHlwZSAqKUZHUElPQ19CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIEZHUElPIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgRkdQSU9fQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICB7IEZHUElPQV9CQVNFLCBGR1BJT0JfQkFTRSwgRkdQSU9DX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIEZHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBGR1BJT19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgIHsgRkdQSU9BLCBGR1BJT0IsIEZHUElPQyB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgRkdQSU9fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBGVEZBIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgRlRGQV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBGVEZBIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBGVEZBIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50OF90IEZTVEFUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQ4X3QgRkNORkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MSAqLworICBfX0kgIHVpbnQ4X3QgRlNFQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBTZWN1cml0eSBSZWdpc3Rlciwgb2Zmc2V0OiAweDIgKi8KKyAgX19JICB1aW50OF90IEZPUFQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRmxhc2ggT3B0aW9uIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MyAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0IzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0IyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4NSAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0IxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4NiAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0IwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4NyAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0I3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0I2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4OSAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0I1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4QSAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0I0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4QiAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0JCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4QyAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0JBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4RCAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0I5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4RSAqLworICBfX0lPIHVpbnQ4X3QgRkNDT0I4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4RiAqLworICBfX0lPIHVpbnQ4X3QgRlBST1QzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQcm9ncmFtIEZsYXNoIFByb3RlY3Rpb24gUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50OF90IEZQUk9UMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUHJvZ3JhbSBGbGFzaCBQcm90ZWN0aW9uIFJlZ2lzdGVycywgb2Zmc2V0OiAweDExICovCisgIF9fSU8gdWludDhfdCBGUFJPVDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFByb2dyYW0gRmxhc2ggUHJvdGVjdGlvbiBSZWdpc3RlcnMsIG9mZnNldDogMHgxMiAqLworICBfX0lPIHVpbnQ4X3QgRlBST1QwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQcm9ncmFtIEZsYXNoIFByb3RlY3Rpb24gUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MTMgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbNF07CisgIF9fSSAgdWludDhfdCBYQUNDSDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEV4ZWN1dGUtb25seSBBY2Nlc3MgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MTggKi8KKyAgX19JICB1aW50OF90IFhBQ0NIMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMsIG9mZnNldDogMHgxOSAqLworICBfX0kgIHVpbnQ4X3QgWEFDQ0gxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycywgb2Zmc2V0OiAweDFBICovCisgIF9fSSAgdWludDhfdCBYQUNDSDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEV4ZWN1dGUtb25seSBBY2Nlc3MgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MUIgKi8KKyAgX19JICB1aW50OF90IFhBQ0NMMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMsIG9mZnNldDogMHgxQyAqLworICBfX0kgIHVpbnQ4X3QgWEFDQ0wyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycywgb2Zmc2V0OiAweDFEICovCisgIF9fSSAgdWludDhfdCBYQUNDTDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEV4ZWN1dGUtb25seSBBY2Nlc3MgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MUUgKi8KKyAgX19JICB1aW50OF90IFhBQ0NMMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMsIG9mZnNldDogMHgxRiAqLworICBfX0kgIHVpbnQ4X3QgU0FDQ0gzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycywgb2Zmc2V0OiAweDIwICovCisgIF9fSSAgdWludDhfdCBTQUNDSDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN1cGVydmlzb3Itb25seSBBY2Nlc3MgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MjEgKi8KKyAgX19JICB1aW50OF90IFNBQ0NIMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMsIG9mZnNldDogMHgyMiAqLworICBfX0kgIHVpbnQ4X3QgU0FDQ0gwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycywgb2Zmc2V0OiAweDIzICovCisgIF9fSSAgdWludDhfdCBTQUNDTDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN1cGVydmlzb3Itb25seSBBY2Nlc3MgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MjQgKi8KKyAgX19JICB1aW50OF90IFNBQ0NMMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMsIG9mZnNldDogMHgyNSAqLworICBfX0kgIHVpbnQ4X3QgU0FDQ0wxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycywgb2Zmc2V0OiAweDI2ICovCisgIF9fSSAgdWludDhfdCBTQUNDTDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN1cGVydmlzb3Itb25seSBBY2Nlc3MgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MjcgKi8KKyAgX19JICB1aW50OF90IEZBQ1NTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRmxhc2ggQWNjZXNzIFNlZ21lbnQgU2l6ZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDI4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8xWzJdOworICBfX0kgIHVpbnQ4X3QgRkFDU047ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBBY2Nlc3MgU2VnbWVudCBOdW1iZXIgUmVnaXN0ZXIsIG9mZnNldDogMHgyQiAqLworfSBGVEZBX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEZURkEgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBGVEZBX1JlZ2lzdGVyX01hc2tzIEZURkEgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIEZTVEFUIC0gRmxhc2ggU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEZURkFfRlNUQVRfTUdTVEFUMF9NQVNLICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIEZURkFfRlNUQVRfTUdTVEFUMF9TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZTVEFUX01HU1RBVDAoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRlNUQVRfTUdTVEFUMF9TSElGVCkpICYgRlRGQV9GU1RBVF9NR1NUQVQwX01BU0spCisjZGVmaW5lIEZURkFfRlNUQVRfRlBWSU9MX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBGVEZBX0ZTVEFUX0ZQVklPTF9TSElGVCAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgRlRGQV9GU1RBVF9GUFZJT0woeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZTVEFUX0ZQVklPTF9TSElGVCkpICYgRlRGQV9GU1RBVF9GUFZJT0xfTUFTSykKKyNkZWZpbmUgRlRGQV9GU1RBVF9BQ0NFUlJfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIEZURkFfRlNUQVRfQUNDRVJSX1NISUZUICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBGVEZBX0ZTVEFUX0FDQ0VSUih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRlNUQVRfQUNDRVJSX1NISUZUKSkgJiBGVEZBX0ZTVEFUX0FDQ0VSUl9NQVNLKQorI2RlZmluZSBGVEZBX0ZTVEFUX1JEQ09MRVJSX01BU0sgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRlRGQV9GU1RBVF9SRENPTEVSUl9TSElGVCAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIEZURkFfRlNUQVRfUkRDT0xFUlIoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GU1RBVF9SRENPTEVSUl9TSElGVCkpICYgRlRGQV9GU1RBVF9SRENPTEVSUl9NQVNLKQorI2RlZmluZSBGVEZBX0ZTVEFUX0NDSUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRlRGQV9GU1RBVF9DQ0lGX1NISUZUICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIEZURkFfRlNUQVRfQ0NJRih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GU1RBVF9DQ0lGX1NISUZUKSkgJiBGVEZBX0ZTVEFUX0NDSUZfTUFTSykKKworLyohIEBuYW1lIEZDTkZHIC0gRmxhc2ggQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBGVEZBX0ZDTkZHX0VSU1NVU1BfTUFTSyAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgRlRGQV9GQ05GR19FUlNTVVNQX1NISUZUICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIEZURkFfRkNORkdfRVJTU1VTUCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GQ05GR19FUlNTVVNQX1NISUZUKSkgJiBGVEZBX0ZDTkZHX0VSU1NVU1BfTUFTSykKKyNkZWZpbmUgRlRGQV9GQ05GR19FUlNBUkVRX01BU0sgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIEZURkFfRkNORkdfRVJTQVJFUV9TSElGVCAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBGVEZBX0ZDTkZHX0VSU0FSRVEoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkNORkdfRVJTQVJFUV9TSElGVCkpICYgRlRGQV9GQ05GR19FUlNBUkVRX01BU0spCisjZGVmaW5lIEZURkFfRkNORkdfUkRDT0xMSUVfTUFTSyAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBGVEZBX0ZDTkZHX1JEQ09MTElFX1NISUZUICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRlRGQV9GQ05GR19SRENPTExJRSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZDTkZHX1JEQ09MTElFX1NISUZUKSkgJiBGVEZBX0ZDTkZHX1JEQ09MTElFX01BU0spCisjZGVmaW5lIEZURkFfRkNORkdfQ0NJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBGVEZBX0ZDTkZHX0NDSUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgRlRGQV9GQ05GR19DQ0lFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZDTkZHX0NDSUVfU0hJRlQpKSAmIEZURkFfRkNORkdfQ0NJRV9NQVNLKQorCisvKiEgQG5hbWUgRlNFQyAtIEZsYXNoIFNlY3VyaXR5IFJlZ2lzdGVyICovCisjZGVmaW5lIEZURkFfRlNFQ19TRUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIEZURkFfRlNFQ19TRUNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZTRUNfU0VDKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRlNFQ19TRUNfU0hJRlQpKSAmIEZURkFfRlNFQ19TRUNfTUFTSykKKyNkZWZpbmUgRlRGQV9GU0VDX0ZTTEFDQ19NQVNLICAgICAgICAgICAgICAgICAgICAoMHhDVSkKKyNkZWZpbmUgRlRGQV9GU0VDX0ZTTEFDQ19TSElGVCAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIEZURkFfRlNFQ19GU0xBQ0MoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GU0VDX0ZTTEFDQ19TSElGVCkpICYgRlRGQV9GU0VDX0ZTTEFDQ19NQVNLKQorI2RlZmluZSBGVEZBX0ZTRUNfTUVFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDMwVSkKKyNkZWZpbmUgRlRGQV9GU0VDX01FRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIEZURkFfRlNFQ19NRUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GU0VDX01FRU5fU0hJRlQpKSAmIEZURkFfRlNFQ19NRUVOX01BU0spCisjZGVmaW5lIEZURkFfRlNFQ19LRVlFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4QzBVKQorI2RlZmluZSBGVEZBX0ZTRUNfS0VZRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRlRGQV9GU0VDX0tFWUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZTRUNfS0VZRU5fU0hJRlQpKSAmIEZURkFfRlNFQ19LRVlFTl9NQVNLKQorCisvKiEgQG5hbWUgRk9QVCAtIEZsYXNoIE9wdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBGVEZBX0ZPUFRfT1BUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GT1BUX09QVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRk9QVF9PUFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GT1BUX09QVF9TSElGVCkpICYgRlRGQV9GT1BUX09QVF9NQVNLKQorCisvKiEgQG5hbWUgRkNDT0IzIC0gRmxhc2ggQ29tbW9uIENvbW1hbmQgT2JqZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZDQ09CM19DQ09Cbl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjNfQ0NPQm5fU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRkNDT0IzX0NDT0JuKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GQ0NPQjNfQ0NPQm5fU0hJRlQpKSAmIEZURkFfRkNDT0IzX0NDT0JuX01BU0spCisKKy8qISBAbmFtZSBGQ0NPQjIgLSBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRkNDT0IyX0NDT0JuX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZDQ09CMl9DQ09Cbl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjJfQ0NPQm4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZDQ09CMl9DQ09Cbl9TSElGVCkpICYgRlRGQV9GQ0NPQjJfQ0NPQm5fTUFTSykKKworLyohIEBuYW1lIEZDQ09CMSAtIEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9GQ0NPQjFfQ0NPQm5fTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfRkNDT0IxX0NDT0JuX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZDQ09CMV9DQ09Cbih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkNDT0IxX0NDT0JuX1NISUZUKSkgJiBGVEZBX0ZDQ09CMV9DQ09Cbl9NQVNLKQorCisvKiEgQG5hbWUgRkNDT0IwIC0gRmxhc2ggQ29tbW9uIENvbW1hbmQgT2JqZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZDQ09CMF9DQ09Cbl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjBfQ0NPQm5fU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRkNDT0IwX0NDT0JuKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GQ0NPQjBfQ0NPQm5fU0hJRlQpKSAmIEZURkFfRkNDT0IwX0NDT0JuX01BU0spCisKKy8qISBAbmFtZSBGQ0NPQjcgLSBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRkNDT0I3X0NDT0JuX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZDQ09CN19DQ09Cbl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjdfQ0NPQm4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZDQ09CN19DQ09Cbl9TSElGVCkpICYgRlRGQV9GQ0NPQjdfQ0NPQm5fTUFTSykKKworLyohIEBuYW1lIEZDQ09CNiAtIEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9GQ0NPQjZfQ0NPQm5fTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfRkNDT0I2X0NDT0JuX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZDQ09CNl9DQ09Cbih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkNDT0I2X0NDT0JuX1NISUZUKSkgJiBGVEZBX0ZDQ09CNl9DQ09Cbl9NQVNLKQorCisvKiEgQG5hbWUgRkNDT0I1IC0gRmxhc2ggQ29tbW9uIENvbW1hbmQgT2JqZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZDQ09CNV9DQ09Cbl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjVfQ0NPQm5fU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRkNDT0I1X0NDT0JuKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GQ0NPQjVfQ0NPQm5fU0hJRlQpKSAmIEZURkFfRkNDT0I1X0NDT0JuX01BU0spCisKKy8qISBAbmFtZSBGQ0NPQjQgLSBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRkNDT0I0X0NDT0JuX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZDQ09CNF9DQ09Cbl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjRfQ0NPQm4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZDQ09CNF9DQ09Cbl9TSElGVCkpICYgRlRGQV9GQ0NPQjRfQ0NPQm5fTUFTSykKKworLyohIEBuYW1lIEZDQ09CQiAtIEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9GQ0NPQkJfQ0NPQm5fTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfRkNDT0JCX0NDT0JuX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZDQ09CQl9DQ09Cbih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkNDT0JCX0NDT0JuX1NISUZUKSkgJiBGVEZBX0ZDQ09CQl9DQ09Cbl9NQVNLKQorCisvKiEgQG5hbWUgRkNDT0JBIC0gRmxhc2ggQ29tbW9uIENvbW1hbmQgT2JqZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZDQ09CQV9DQ09Cbl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQkFfQ0NPQm5fU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRkNDT0JBX0NDT0JuKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GQ0NPQkFfQ0NPQm5fU0hJRlQpKSAmIEZURkFfRkNDT0JBX0NDT0JuX01BU0spCisKKy8qISBAbmFtZSBGQ0NPQjkgLSBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRkNDT0I5X0NDT0JuX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZDQ09COV9DQ09Cbl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjlfQ0NPQm4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZDQ09COV9DQ09Cbl9TSElGVCkpICYgRlRGQV9GQ0NPQjlfQ0NPQm5fTUFTSykKKworLyohIEBuYW1lIEZDQ09COCAtIEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9GQ0NPQjhfQ0NPQm5fTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfRkNDT0I4X0NDT0JuX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZDQ09COF9DQ09Cbih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkNDT0I4X0NDT0JuX1NISUZUKSkgJiBGVEZBX0ZDQ09COF9DQ09Cbl9NQVNLKQorCisvKiEgQG5hbWUgRlBST1QzIC0gUHJvZ3JhbSBGbGFzaCBQcm90ZWN0aW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZQUk9UM19QUk9UX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GUFJPVDNfUFJPVF9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRlBST1QzX1BST1QoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GUFJPVDNfUFJPVF9TSElGVCkpICYgRlRGQV9GUFJPVDNfUFJPVF9NQVNLKQorCisvKiEgQG5hbWUgRlBST1QyIC0gUHJvZ3JhbSBGbGFzaCBQcm90ZWN0aW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZQUk9UMl9QUk9UX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GUFJPVDJfUFJPVF9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRlBST1QyX1BST1QoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GUFJPVDJfUFJPVF9TSElGVCkpICYgRlRGQV9GUFJPVDJfUFJPVF9NQVNLKQorCisvKiEgQG5hbWUgRlBST1QxIC0gUHJvZ3JhbSBGbGFzaCBQcm90ZWN0aW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZQUk9UMV9QUk9UX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GUFJPVDFfUFJPVF9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRlBST1QxX1BST1QoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GUFJPVDFfUFJPVF9TSElGVCkpICYgRlRGQV9GUFJPVDFfUFJPVF9NQVNLKQorCisvKiEgQG5hbWUgRlBST1QwIC0gUHJvZ3JhbSBGbGFzaCBQcm90ZWN0aW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZQUk9UMF9QUk9UX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GUFJPVDBfUFJPVF9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRlBST1QwX1BST1QoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GUFJPVDBfUFJPVF9TSElGVCkpICYgRlRGQV9GUFJPVDBfUFJPVF9NQVNLKQorCisvKiEgQG5hbWUgWEFDQ0gzIC0gRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9YQUNDSDNfWEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfWEFDQ0gzX1hBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1hBQ0NIM19YQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfWEFDQ0gzX1hBX1NISUZUKSkgJiBGVEZBX1hBQ0NIM19YQV9NQVNLKQorCisvKiEgQG5hbWUgWEFDQ0gyIC0gRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9YQUNDSDJfWEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfWEFDQ0gyX1hBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1hBQ0NIMl9YQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfWEFDQ0gyX1hBX1NISUZUKSkgJiBGVEZBX1hBQ0NIMl9YQV9NQVNLKQorCisvKiEgQG5hbWUgWEFDQ0gxIC0gRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9YQUNDSDFfWEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfWEFDQ0gxX1hBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1hBQ0NIMV9YQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfWEFDQ0gxX1hBX1NISUZUKSkgJiBGVEZBX1hBQ0NIMV9YQV9NQVNLKQorCisvKiEgQG5hbWUgWEFDQ0gwIC0gRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9YQUNDSDBfWEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfWEFDQ0gwX1hBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1hBQ0NIMF9YQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfWEFDQ0gwX1hBX1NISUZUKSkgJiBGVEZBX1hBQ0NIMF9YQV9NQVNLKQorCisvKiEgQG5hbWUgWEFDQ0wzIC0gRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9YQUNDTDNfWEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfWEFDQ0wzX1hBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1hBQ0NMM19YQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfWEFDQ0wzX1hBX1NISUZUKSkgJiBGVEZBX1hBQ0NMM19YQV9NQVNLKQorCisvKiEgQG5hbWUgWEFDQ0wyIC0gRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9YQUNDTDJfWEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfWEFDQ0wyX1hBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1hBQ0NMMl9YQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfWEFDQ0wyX1hBX1NISUZUKSkgJiBGVEZBX1hBQ0NMMl9YQV9NQVNLKQorCisvKiEgQG5hbWUgWEFDQ0wxIC0gRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9YQUNDTDFfWEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfWEFDQ0wxX1hBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1hBQ0NMMV9YQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfWEFDQ0wxX1hBX1NISUZUKSkgJiBGVEZBX1hBQ0NMMV9YQV9NQVNLKQorCisvKiEgQG5hbWUgWEFDQ0wwIC0gRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9YQUNDTDBfWEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfWEFDQ0wwX1hBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1hBQ0NMMF9YQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfWEFDQ0wwX1hBX1NISUZUKSkgJiBGVEZBX1hBQ0NMMF9YQV9NQVNLKQorCisvKiEgQG5hbWUgU0FDQ0gzIC0gU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9TQUNDSDNfU0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfU0FDQ0gzX1NBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1NBQ0NIM19TQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfU0FDQ0gzX1NBX1NISUZUKSkgJiBGVEZBX1NBQ0NIM19TQV9NQVNLKQorCisvKiEgQG5hbWUgU0FDQ0gyIC0gU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9TQUNDSDJfU0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfU0FDQ0gyX1NBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1NBQ0NIMl9TQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfU0FDQ0gyX1NBX1NISUZUKSkgJiBGVEZBX1NBQ0NIMl9TQV9NQVNLKQorCisvKiEgQG5hbWUgU0FDQ0gxIC0gU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9TQUNDSDFfU0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfU0FDQ0gxX1NBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1NBQ0NIMV9TQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfU0FDQ0gxX1NBX1NISUZUKSkgJiBGVEZBX1NBQ0NIMV9TQV9NQVNLKQorCisvKiEgQG5hbWUgU0FDQ0gwIC0gU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9TQUNDSDBfU0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfU0FDQ0gwX1NBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1NBQ0NIMF9TQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfU0FDQ0gwX1NBX1NISUZUKSkgJiBGVEZBX1NBQ0NIMF9TQV9NQVNLKQorCisvKiEgQG5hbWUgU0FDQ0wzIC0gU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9TQUNDTDNfU0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfU0FDQ0wzX1NBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1NBQ0NMM19TQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfU0FDQ0wzX1NBX1NISUZUKSkgJiBGVEZBX1NBQ0NMM19TQV9NQVNLKQorCisvKiEgQG5hbWUgU0FDQ0wyIC0gU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9TQUNDTDJfU0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfU0FDQ0wyX1NBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1NBQ0NMMl9TQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfU0FDQ0wyX1NBX1NISUZUKSkgJiBGVEZBX1NBQ0NMMl9TQV9NQVNLKQorCisvKiEgQG5hbWUgU0FDQ0wxIC0gU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9TQUNDTDFfU0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfU0FDQ0wxX1NBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1NBQ0NMMV9TQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfU0FDQ0wxX1NBX1NISUZUKSkgJiBGVEZBX1NBQ0NMMV9TQV9NQVNLKQorCisvKiEgQG5hbWUgU0FDQ0wwIC0gU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9TQUNDTDBfU0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfU0FDQ0wwX1NBX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX1NBQ0NMMF9TQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfU0FDQ0wwX1NBX1NISUZUKSkgJiBGVEZBX1NBQ0NMMF9TQV9NQVNLKQorCisvKiEgQG5hbWUgRkFDU1MgLSBGbGFzaCBBY2Nlc3MgU2VnbWVudCBTaXplIFJlZ2lzdGVyICovCisjZGVmaW5lIEZURkFfRkFDU1NfU0dTSVpFX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZBQ1NTX1NHU0laRV9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GQUNTU19TR1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZBQ1NTX1NHU0laRV9TSElGVCkpICYgRlRGQV9GQUNTU19TR1NJWkVfTUFTSykKKworLyohIEBuYW1lIEZBQ1NOIC0gRmxhc2ggQWNjZXNzIFNlZ21lbnQgTnVtYmVyIFJlZ2lzdGVyICovCisjZGVmaW5lIEZURkFfRkFDU05fTlVNU0dfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZBQ1NOX05VTVNHX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GQUNTTl9OVU1TRyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZBQ1NOX05VTVNHX1NISUZUKSkgJiBGVEZBX0ZBQ1NOX05VTVNHX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBGVEZBX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogRlRGQSAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIEZURkEgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEZURkFfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMjAwMDB1KQorLyoqIFBlcmlwaGVyYWwgRlRGQSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgRlRGQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZURkFfVHlwZSAqKUZURkFfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBGVEZBIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgRlRGQV9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICB7IEZURkFfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgRlRGQSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgRlRGQV9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEZURkEgfQorLyoqIEludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgRlRGQSBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgRlRGQV9DT01NQU5EX0NPTVBMRVRFX0lSUVMgICAgICAgICAgICAgICB7IEZURkFfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgRlRGQV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEdFTkZTSyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIEdFTkZTS19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBHRU5GU0sgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIEdFTkZTSyAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgSVJRX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IElSUSBDT05UUk9MLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IEVWRU5UX1RNUjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFVkVOVCBUSU1FUiwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBUMV9DTVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVDEgQ09NUEFSRSwgb2Zmc2V0OiAweDggKi8KKyAgX19JTyB1aW50MzJfdCBUMl9DTVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVDIgQ09NUEFSRSwgb2Zmc2V0OiAweEMgKi8KKyAgX19JICB1aW50MzJfdCBUSU1FU1RBTVA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVElNRVNUQU1QLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50MzJfdCBYQ1ZSX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNDRUlWRVIgQ09OVFJPTCwgb2Zmc2V0OiAweDE0ICovCisgIF9fSSAgdWludDMyX3QgWENWUl9TVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRSQU5TQ0VJVkVSIFNUQVRVUywgb2Zmc2V0OiAweDE4ICovCisgIF9fSU8gdWludDMyX3QgWENWUl9DRkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRSQU5TQ0VJVkVSIENPTkZJR1VSQVRJT04sIG9mZnNldDogMHgxQyAqLworICBfX0lPIHVpbnQzMl90IENIQU5ORUxfTlVNOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDSEFOTkVMIE5VTUJFUiwgb2Zmc2V0OiAweDIwICovCisgIF9fSU8gdWludDMyX3QgVFhfUE9XRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRSQU5TTUlUIFBPV0VSLCBvZmZzZXQ6IDB4MjQgKi8KKyAgX19JTyB1aW50MzJfdCBOVFdfQURSX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTkVUV09SSyBBRERSRVNTIENPTlRST0wsIG9mZnNldDogMHgyOCAqLworICBfX0lPIHVpbnQzMl90IE5UV19BRFJfMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBORVRXT1JLIEFERFJFU1MgMCwgb2Zmc2V0OiAweDJDICovCisgIF9fSU8gdWludDMyX3QgTlRXX0FEUl8xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5FVFdPUksgQUREUkVTUyAxLCBvZmZzZXQ6IDB4MzAgKi8KKyAgX19JTyB1aW50MzJfdCBOVFdfQURSXzI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTkVUV09SSyBBRERSRVNTIDIsIG9mZnNldDogMHgzNCAqLworICBfX0lPIHVpbnQzMl90IE5UV19BRFJfMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBORVRXT1JLIEFERFJFU1MgMywgb2Zmc2V0OiAweDM4ICovCisgIF9fSU8gdWludDMyX3QgUlhfV0FURVJNQVJLOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFJFQ0VJVkUgV0FURVJNQVJLLCBvZmZzZXQ6IDB4M0MgKi8KKyAgX19JTyB1aW50MzJfdCBEU01fQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRFNNIENPTlRST0wsIG9mZnNldDogMHg0MCAqLworICBfX0kgIHVpbnQzMl90IFBBUlRfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQQVJUIElELCBvZmZzZXQ6IDB4NDQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbMjRdOworICBfX0lPIHVpbnQzMl90IFBBQ0tFVF9DRkc7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQQUNLRVQgQ09ORklHVVJBVElPTiwgb2Zmc2V0OiAweDYwICovCisgIF9fSU8gdWludDMyX3QgSDBfQ0ZHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEgwIENPTkZJR1VSQVRJT04sIG9mZnNldDogMHg2NCAqLworICBfX0lPIHVpbnQzMl90IEgxX0NGRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBIMSBDT05GSUdVUkFUSU9OLCBvZmZzZXQ6IDB4NjggKi8KKyAgX19JTyB1aW50MzJfdCBDUkNfQ0ZHOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ1JDIENPTkZJR1VSQVRJT04sIG9mZnNldDogMHg2QyAqLworICBfX0lPIHVpbnQzMl90IENSQ19JTklUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDUkMgSU5JVElBTElaQVRJT04sIG9mZnNldDogMHg3MCAqLworICBfX0lPIHVpbnQzMl90IENSQ19QT0xZOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDUkMgUE9MWU5PTUlBTCwgb2Zmc2V0OiAweDc0ICovCisgIF9fSU8gdWludDMyX3QgQ1JDX1hPUl9PVVQ7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IENSQyBYT1IgT1VULCBvZmZzZXQ6IDB4NzggKi8KKyAgX19JTyB1aW50MzJfdCBXSElURU5fQ0ZHOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgV0hJVEVORVIgQ09ORklHVVJBVElPTiwgb2Zmc2V0OiAweDdDICovCisgIF9fSU8gdWludDMyX3QgV0hJVEVOX1BPTFk7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFdISVRFTkVSIFBPTFlOT01JQUwsIG9mZnNldDogMHg4MCAqLworICBfX0lPIHVpbnQzMl90IFdISVRFTl9TWl9USFI7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBXSElURU5FUiBTSVpFIFRIUkVTSE9MRCwgb2Zmc2V0OiAweDg0ICovCisgIF9fSU8gdWludDMyX3QgQklUUkFURTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEJJVCBSQVRFLCBvZmZzZXQ6IDB4ODggKi8KKyAgX19JTyB1aW50MzJfdCBQQl9QQVJUSVRJT047ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUEFDS0VUIEJVRkZFUiBQQVJUSVRJT04gUE9JTlQsIG9mZnNldDogMHg4QyAqLworfSBHRU5GU0tfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gR0VORlNLIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgR0VORlNLX1JlZ2lzdGVyX01hc2tzIEdFTkZTSyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgSVJRX0NUUkwgLSBJUlEgQ09OVFJPTCAqLworI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfU0VRX0VORF9JUlFfTUFTSyAgICAgICAgICgweDFVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfU0VRX0VORF9JUlFfU0hJRlQgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1NFUV9FTkRfSVJRKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9TRVFfRU5EX0lSUV9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX1NFUV9FTkRfSVJRX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UWF9JUlFfTUFTSyAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UWF9JUlFfU0hJRlQgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVFhfSVJRKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1RYX0lSUV9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX1RYX0lSUV9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfSVJRX01BU0sgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfSVJRX1NISUZUICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1JYX0lSUSh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9SWF9JUlFfU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9SWF9JUlFfTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX05UV19BRFJfSVJRX01BU0sgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX05UV19BRFJfSVJRX1NISUZUICAgICAgICAoM1UpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9OVFdfQURSX0lSUSh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfTlRXX0FEUl9JUlFfU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9OVFdfQURSX0lSUV9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVDFfSVJRX01BU0sgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1QxX0lSUV9TSElGVCAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UMV9JUlEoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfVDFfSVJRX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfVDFfSVJRX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UMl9JUlFfTUFTSyAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVDJfSVJRX1NISUZUICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1QyX0lSUSh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9UMl9JUlFfU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9UMl9JUlFfTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX01BU0sgICAgICAoMHg0MFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUV9TSElGVCAgICAgKDZVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUExMX1VOTE9DS19JUlEoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1dBS0VfSVJRX01BU0sgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9XQUtFX0lSUV9TSElGVCAgICAgICAgICAgKDdVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfV0FLRV9JUlEoeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1dBS0VfSVJRX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfV0FLRV9JUlFfTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfTUFTSyAgICAoMHgxMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9TSElGVCAgICg4VSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlEoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9SWF9XQVRFUk1BUktfSVJRX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVFNNX0lSUV9NQVNLICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UU01fSVJRX1NISUZUICAgICAgICAgICAgKDlVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVFNNX0lSUSh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1RTTV9JUlFfU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9UU01fSVJRX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9TRVFfRU5EX0lSUV9FTl9NQVNLICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfU0VRX0VORF9JUlFfRU5fU0hJRlQgICAgICgxNlUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9TRVFfRU5EX0lSUV9FTih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfU0VRX0VORF9JUlFfRU5fU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9TRVFfRU5EX0lSUV9FTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVFhfSVJRX0VOX01BU0sgICAgICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1RYX0lSUV9FTl9TSElGVCAgICAgICAgICAoMTdVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVFhfSVJRX0VOKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1RYX0lSUV9FTl9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX1RYX0lSUV9FTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfSVJRX0VOX01BU0sgICAgICAgICAgICgweDQwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1JYX0lSUV9FTl9TSElGVCAgICAgICAgICAoMThVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfSVJRX0VOKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1JYX0lSUV9FTl9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX1JYX0lSUV9FTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfTlRXX0FEUl9JUlFfRU5fTUFTSyAgICAgICgweDgwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX05UV19BRFJfSVJRX0VOX1NISUZUICAgICAoMTlVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfTlRXX0FEUl9JUlFfRU4oeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX05UV19BRFJfSVJRX0VOX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfTlRXX0FEUl9JUlFfRU5fTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1QxX0lSUV9FTl9NQVNLICAgICAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVDFfSVJRX0VOX1NISUZUICAgICAgICAgICgyMFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UMV9JUlFfRU4oeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfVDFfSVJRX0VOX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfVDFfSVJRX0VOX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UMl9JUlFfRU5fTUFTSyAgICAgICAgICAgKDB4MjAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1QyX0lSUV9FTl9TSElGVCAgICAgICAgICAoMjFVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVDJfSVJRX0VOKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1QyX0lSUV9FTl9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX1QyX0lSUV9FTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfRU5fTUFTSyAgICgweDQwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUV9FTl9TSElGVCAgKDIyVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX0VOKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUV9FTl9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX0VOX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9XQUtFX0lSUV9FTl9NQVNLICAgICAgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1dBS0VfSVJRX0VOX1NISUZUICAgICAgICAoMjNVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfV0FLRV9JUlFfRU4oeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1dBS0VfSVJRX0VOX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfV0FLRV9JUlFfRU5fTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfRU5fTUFTSyAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfRU5fU0hJRlQgKDI0VSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfRU4oeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9SWF9XQVRFUk1BUktfSVJRX0VOX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9FTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVFNNX0lSUV9FTl9NQVNLICAgICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVFNNX0lSUV9FTl9TSElGVCAgICAgICAgICgyNVUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UU01fSVJRX0VOKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfVFNNX0lSUV9FTl9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX1RTTV9JUlFfRU5fTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX0dFTkVSSUNfRlNLX0lSUV9FTl9NQVNLICAoMHg0MDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX0dFTkVSSUNfRlNLX0lSUV9FTl9TSElGVCAoMjZVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfR0VORVJJQ19GU0tfSVJRX0VOKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX0dFTkVSSUNfRlNLX0lSUV9FTl9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX0dFTkVSSUNfRlNLX0lSUV9FTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfQ1JDX0lHTk9SRV9NQVNLICAgICAgICAgICgweDgwMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfQ1JDX0lHTk9SRV9TSElGVCAgICAgICAgICgyN1UpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9DUkNfSUdOT1JFKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfQ1JDX0lHTk9SRV9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX0NSQ19JR05PUkVfTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX0NSQ19WQUxJRF9NQVNLICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9DUkNfVkFMSURfU0hJRlQgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX0NSQ19WQUxJRCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9DUkNfVkFMSURfU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9DUkNfVkFMSURfTUFTSykKKworLyohIEBuYW1lIEVWRU5UX1RNUiAtIEVWRU5UIFRJTUVSICovCisjZGVmaW5lIEdFTkZTS19FVkVOVF9UTVJfRVZFTlRfVE1SX01BU0sgICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfU0hJRlQgICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19FVkVOVF9UTVJfRVZFTlRfVE1SKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfRVZFTlRfVE1SX0VWRU5UX1RNUl9TSElGVCkpICYgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfTUFTSykKKyNkZWZpbmUgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfTERfTUFTSyAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfTERfU0hJRlQgICAgICAoMjRVKQorI2RlZmluZSBHRU5GU0tfRVZFTlRfVE1SX0VWRU5UX1RNUl9MRCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfTERfU0hJRlQpKSAmIEdFTkZTS19FVkVOVF9UTVJfRVZFTlRfVE1SX0xEX01BU0spCisjZGVmaW5lIEdFTkZTS19FVkVOVF9UTVJfRVZFTlRfVE1SX0FERF9NQVNLICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19FVkVOVF9UTVJfRVZFTlRfVE1SX0FERF9TSElGVCAgICAgKDI1VSkKKyNkZWZpbmUgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfQUREKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19FVkVOVF9UTVJfRVZFTlRfVE1SX0FERF9TSElGVCkpICYgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfQUREX01BU0spCisKKy8qISBAbmFtZSBUMV9DTVAgLSBUMSBDT01QQVJFICovCisjZGVmaW5lIEdFTkZTS19UMV9DTVBfVDFfQ01QX01BU0sgICAgICAgICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgR0VORlNLX1QxX0NNUF9UMV9DTVBfU0hJRlQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19UMV9DTVBfVDFfQ01QKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfVDFfQ01QX1QxX0NNUF9TSElGVCkpICYgR0VORlNLX1QxX0NNUF9UMV9DTVBfTUFTSykKKyNkZWZpbmUgR0VORlNLX1QxX0NNUF9UMV9DTVBfRU5fTUFTSyAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX1QxX0NNUF9UMV9DTVBfRU5fU0hJRlQgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBHRU5GU0tfVDFfQ01QX1QxX0NNUF9FTih4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1QxX0NNUF9UMV9DTVBfRU5fU0hJRlQpKSAmIEdFTkZTS19UMV9DTVBfVDFfQ01QX0VOX01BU0spCisKKy8qISBAbmFtZSBUMl9DTVAgLSBUMiBDT01QQVJFICovCisjZGVmaW5lIEdFTkZTS19UMl9DTVBfVDJfQ01QX01BU0sgICAgICAgICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgR0VORlNLX1QyX0NNUF9UMl9DTVBfU0hJRlQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19UMl9DTVBfVDJfQ01QKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfVDJfQ01QX1QyX0NNUF9TSElGVCkpICYgR0VORlNLX1QyX0NNUF9UMl9DTVBfTUFTSykKKyNkZWZpbmUgR0VORlNLX1QyX0NNUF9UMl9DTVBfRU5fTUFTSyAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX1QyX0NNUF9UMl9DTVBfRU5fU0hJRlQgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBHRU5GU0tfVDJfQ01QX1QyX0NNUF9FTih4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1QyX0NNUF9UMl9DTVBfRU5fU0hJRlQpKSAmIEdFTkZTS19UMl9DTVBfVDJfQ01QX0VOX01BU0spCisKKy8qISBAbmFtZSBUSU1FU1RBTVAgLSBUSU1FU1RBTVAgKi8KKyNkZWZpbmUgR0VORlNLX1RJTUVTVEFNUF9USU1FU1RBTVBfTUFTSyAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBHRU5GU0tfVElNRVNUQU1QX1RJTUVTVEFNUF9TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX1RJTUVTVEFNUF9USU1FU1RBTVAoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19USU1FU1RBTVBfVElNRVNUQU1QX1NISUZUKSkgJiBHRU5GU0tfVElNRVNUQU1QX1RJTUVTVEFNUF9NQVNLKQorCisvKiEgQG5hbWUgWENWUl9DVFJMIC0gVFJBTlNDRUlWRVIgQ09OVFJPTCAqLworI2RlZmluZSBHRU5GU0tfWENWUl9DVFJMX1NFUUNNRF9NQVNLICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DVFJMX1NFUUNNRF9TSElGVCAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ1RSTF9TRVFDTUQoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX0NUUkxfU0VRQ01EX1NISUZUKSkgJiBHRU5GU0tfWENWUl9DVFJMX1NFUUNNRF9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9DVFJMX0NNRERFQ19DU19NQVNLICAgICAgICAgICgweDcwMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DVFJMX0NNRERFQ19DU19TSElGVCAgICAgICAgICgyNFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NUUkxfQ01EREVDX0NTKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9DVFJMX0NNRERFQ19DU19TSElGVCkpICYgR0VORlNLX1hDVlJfQ1RSTF9DTURERUNfQ1NfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ1RSTF9YQ1ZSX0JVU1lfTUFTSyAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NUUkxfWENWUl9CVVNZX1NISUZUICAgICAgICAgKDMxVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ1RSTF9YQ1ZSX0JVU1koeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX0NUUkxfWENWUl9CVVNZX1NISUZUKSkgJiBHRU5GU0tfWENWUl9DVFJMX1hDVlJfQlVTWV9NQVNLKQorCisvKiEgQG5hbWUgWENWUl9TVFMgLSBUUkFOU0NFSVZFUiBTVEFUVVMgKi8KKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX1NUQVJUX1QxX1BFTkRfTUFTSyAgICAoMHgxVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX1NUQVJUX1QxX1BFTkRfU0hJRlQgICAoMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19UWF9TVEFSVF9UMV9QRU5EKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfVFhfU1RBUlRfVDFfUEVORF9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX1RYX1NUQVJUX1QxX1BFTkRfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX1NUQVJUX1QyX1BFTkRfTUFTSyAgICAoMHgyVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX1NUQVJUX1QyX1BFTkRfU0hJRlQgICAoMVUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19UWF9TVEFSVF9UMl9QRU5EKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfVFhfU1RBUlRfVDJfUEVORF9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX1RYX1NUQVJUX1QyX1BFTkRfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX0lOX1dBUk1VUF9NQVNLICAgICAgICAoMHg0VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX0lOX1dBUk1VUF9TSElGVCAgICAgICAoMlUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19UWF9JTl9XQVJNVVAoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfVFhfSU5fV0FSTVVQX1NISUZUKSkgJiBHRU5GU0tfWENWUl9TVFNfVFhfSU5fV0FSTVVQX01BU0spCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19UWF9JTl9QUk9HUkVTU19NQVNLICAgICAgKDB4OFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19UWF9JTl9QUk9HUkVTU19TSElGVCAgICAgKDNVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfVFhfSU5fUFJPR1JFU1MoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfU1RTX1RYX0lOX1BST0dSRVNTX1NISUZUKSkgJiBHRU5GU0tfWENWUl9TVFNfVFhfSU5fUFJPR1JFU1NfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX0lOX1dBUk1ETl9NQVNLICAgICAgICAoMHgxMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19UWF9JTl9XQVJNRE5fU0hJRlQgICAgICAgKDRVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfVFhfSU5fV0FSTUROKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfU1RTX1RYX0lOX1dBUk1ETl9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX1RYX0lOX1dBUk1ETl9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfU1RBUlRfVDFfUEVORF9NQVNLICAgICgweDIwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX1NUQVJUX1QxX1BFTkRfU0hJRlQgICAoNVUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9TVEFSVF9UMV9QRU5EKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfUlhfU1RBUlRfVDFfUEVORF9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX1JYX1NUQVJUX1QxX1BFTkRfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX1NUQVJUX1QyX1BFTkRfTUFTSyAgICAoMHg0MFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9TVEFSVF9UMl9QRU5EX1NISUZUICAgKDZVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfU1RBUlRfVDJfUEVORCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfU1RTX1JYX1NUQVJUX1QyX1BFTkRfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX1NUU19SWF9TVEFSVF9UMl9QRU5EX01BU0spCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9TVE9QX1QxX1BFTkRfTUFTSyAgICAgKDB4ODBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfU1RPUF9UMV9QRU5EX1NISUZUICAgICg3VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX1NUT1BfVDFfUEVORCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19SWF9TVE9QX1QxX1BFTkRfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX1NUU19SWF9TVE9QX1QxX1BFTkRfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX1NUT1BfVDJfUEVORF9NQVNLICAgICAoMHgxMDBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfU1RPUF9UMl9QRU5EX1NISUZUICAgICg4VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX1NUT1BfVDJfUEVORCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19SWF9TVE9QX1QyX1BFTkRfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX1NUU19SWF9TVE9QX1QyX1BFTkRfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1dBUk1VUF9NQVNLICAgICAgICAoMHgyMDBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfSU5fV0FSTVVQX1NISUZUICAgICAgICg5VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1dBUk1VUCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19SWF9JTl9XQVJNVVBfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX1NUU19SWF9JTl9XQVJNVVBfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1NFQVJDSF9NQVNLICAgICAgICAoMHg0MDBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfSU5fU0VBUkNIX1NISUZUICAgICAgICgxMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9JTl9TRUFSQ0goeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfUlhfSU5fU0VBUkNIX1NISUZUKSkgJiBHRU5GU0tfWENWUl9TVFNfUlhfSU5fU0VBUkNIX01BU0spCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9JTl9QUk9HUkVTU19NQVNLICAgICAgKDB4ODAwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1BST0dSRVNTX1NISUZUICAgICAoMTFVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfSU5fUFJPR1JFU1MoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1BST0dSRVNTX1NISUZUKSkgJiBHRU5GU0tfWENWUl9TVFNfUlhfSU5fUFJPR1JFU1NfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1dBUk1ETl9NQVNLICAgICAgICAoMHgxMDAwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1dBUk1ETl9TSElGVCAgICAgICAoMTJVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfSU5fV0FSTUROKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1dBUk1ETl9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1dBUk1ETl9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfTFFJX1ZBTElEX01BU0sgICAgICAgICAgICgweDQwMDBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfTFFJX1ZBTElEX1NISUZUICAgICAgICAgICgxNFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19MUUlfVkFMSUQoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfTFFJX1ZBTElEX1NISUZUKSkgJiBHRU5GU0tfWENWUl9TVFNfTFFJX1ZBTElEX01BU0spCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19DUkNfVkFMSURfTUFTSyAgICAgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19DUkNfVkFMSURfU0hJRlQgICAgICAgICAgKDE1VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX0NSQ19WQUxJRCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19DUkNfVkFMSURfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX1NUU19DUkNfVkFMSURfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JTU0lfTUFTSyAgICAgICAgICAgICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlNTSV9TSElGVCAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SU1NJKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfUlNTSV9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX1JTU0lfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX0xRSV9NQVNLICAgICAgICAgICAgICAgICAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19MUUlfU0hJRlQgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX0xRSSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19MUUlfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX1NUU19MUUlfTUFTSykKKworLyohIEBuYW1lIFhDVlJfQ0ZHIC0gVFJBTlNDRUlWRVIgQ09ORklHVVJBVElPTiAqLworI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfVFhfV0hJVEVOX0RJU19NQVNLICAgICAgICgweDFVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfVFhfV0hJVEVOX0RJU19TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ0ZHX1RYX1dISVRFTl9ESVMoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX0NGR19UWF9XSElURU5fRElTX1NISUZUKSkgJiBHRU5GU0tfWENWUl9DRkdfVFhfV0hJVEVOX0RJU19NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfUlhfREVXSElURU5fRElTX01BU0sgICAgICgweDJVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfUlhfREVXSElURU5fRElTX1NISUZUICAgICgxVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ0ZHX1JYX0RFV0hJVEVOX0RJUyh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX0NGR19SWF9ERVdISVRFTl9ESVNfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX0NGR19SWF9ERVdISVRFTl9ESVNfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ0ZHX1NXX0NSQ19FTl9NQVNLICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ0ZHX1NXX0NSQ19FTl9TSElGVCAgICAgICAgICAoMlUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19TV19DUkNfRU4oeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9DRkdfU1dfQ1JDX0VOX1NISUZUKSkgJiBHRU5GU0tfWENWUl9DRkdfU1dfQ1JDX0VOX01BU0spCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19QUkVBTUJMRV9TWl9NQVNLICAgICAgICAgKDB4NzBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfUFJFQU1CTEVfU1pfU0hJRlQgICAgICAgICg0VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ0ZHX1BSRUFNQkxFX1NaKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX0NGR19QUkVBTUJMRV9TWl9TSElGVCkpICYgR0VORlNLX1hDVlJfQ0ZHX1BSRUFNQkxFX1NaX01BU0spCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19UWF9XQVJNVVBfTUFTSyAgICAgICAgICAgKDB4RkYwMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19UWF9XQVJNVVBfU0hJRlQgICAgICAgICAgKDhVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfVFhfV0FSTVVQKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfQ0ZHX1RYX1dBUk1VUF9TSElGVCkpICYgR0VORlNLX1hDVlJfQ0ZHX1RYX1dBUk1VUF9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfUlhfV0FSTVVQX01BU0sgICAgICAgICAgICgweEZGMDAwMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19SWF9XQVJNVVBfU0hJRlQgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ0ZHX1JYX1dBUk1VUCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX0NGR19SWF9XQVJNVVBfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX0NGR19SWF9XQVJNVVBfTUFTSykKKworLyohIEBuYW1lIENIQU5ORUxfTlVNIC0gQ0hBTk5FTCBOVU1CRVIgKi8KKyNkZWZpbmUgR0VORlNLX0NIQU5ORUxfTlVNX0NIQU5ORUxfTlVNX01BU0sgICAgICAoMHg3RlUpCisjZGVmaW5lIEdFTkZTS19DSEFOTkVMX05VTV9DSEFOTkVMX05VTV9TSElGVCAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfQ0hBTk5FTF9OVU1fQ0hBTk5FTF9OVU0oeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0NIQU5ORUxfTlVNX0NIQU5ORUxfTlVNX1NISUZUKSkgJiBHRU5GU0tfQ0hBTk5FTF9OVU1fQ0hBTk5FTF9OVU1fTUFTSykKKworLyohIEBuYW1lIFRYX1BPV0VSIC0gVFJBTlNNSVQgUE9XRVIgKi8KKyNkZWZpbmUgR0VORlNLX1RYX1BPV0VSX1RYX1BPV0VSX01BU0sgICAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIEdFTkZTS19UWF9QT1dFUl9UWF9QT1dFUl9TSElGVCAgICAgICAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfVFhfUE9XRVJfVFhfUE9XRVIoeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1RYX1BPV0VSX1RYX1BPV0VSX1NISUZUKSkgJiBHRU5GU0tfVFhfUE9XRVJfVFhfUE9XRVJfTUFTSykKKworLyohIEBuYW1lIE5UV19BRFJfQ1RSTCAtIE5FVFdPUksgQUREUkVTUyBDT05UUk9MICovCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9FTl9NQVNLICAgICAgKDB4RlUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9FTl9TSElGVCAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfRU4oeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX0VOX1NISUZUKSkgJiBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfRU5fTUFTSykKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX01DSF9NQVNLICAgICAoMHhGMFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9NQ0hfU0hJRlQgICAgKDRVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfTUNIKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX01DSF9TSElGVCkpICYgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX01DSF9NQVNLKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIwX1NaX01BU0sgICAgICgweDMwMFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjBfU1pfU0hJRlQgICAgKDhVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIwX1NaKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSMF9TWl9TSElGVCkpICYgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSMF9TWl9NQVNLKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIxX1NaX01BU0sgICAgICgweEMwMFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjFfU1pfU0hJRlQgICAgKDEwVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSMV9TWih4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjFfU1pfU0hJRlQpKSAmIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjFfU1pfTUFTSykKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSMl9TWl9NQVNLICAgICAoMHgzMDAwVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSMl9TWl9TSElGVCAgICAoMTJVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIyX1NaKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSMl9TWl9TSElGVCkpICYgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSMl9TWl9NQVNLKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIzX1NaX01BU0sgICAgICgweEMwMDBVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIzX1NaX1NISUZUICAgICgxNFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjNfU1ooeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIzX1NaX1NISUZUKSkgJiBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIzX1NaX01BU0spCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIwX01BU0sgICAgKDB4NzAwMDBVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMF9TSElGVCAgICgxNlUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIwKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMF9TSElGVCkpICYgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjBfTUFTSykKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjFfTUFTSyAgICAoMHg3MDAwMDBVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMV9TSElGVCAgICgyMFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIxKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMV9TSElGVCkpICYgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjFfTUFTSykKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjJfTUFTSyAgICAoMHg3MDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjJfU0hJRlQgICAoMjRVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMih4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjJfU0hJRlQpKSAmIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIyX01BU0spCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIzX01BU0sgICAgKDB4NzAwMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSM19TSElGVCAgICgyOFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIzKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSM19TSElGVCkpICYgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjNfTUFTSykKKworLyohIEBuYW1lIE5UV19BRFJfMCAtIE5FVFdPUksgQUREUkVTUyAwICovCisjZGVmaW5lIEdFTkZTS19OVFdfQURSXzBfTlRXX0FEUl8wX01BU0sgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl8wX05UV19BRFJfMF9TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfMF9OVFdfQURSXzAoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19OVFdfQURSXzBfTlRXX0FEUl8wX1NISUZUKSkgJiBHRU5GU0tfTlRXX0FEUl8wX05UV19BRFJfMF9NQVNLKQorCisvKiEgQG5hbWUgTlRXX0FEUl8xIC0gTkVUV09SSyBBRERSRVNTIDEgKi8KKyNkZWZpbmUgR0VORlNLX05UV19BRFJfMV9OVFdfQURSXzFfTUFTSyAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSXzFfTlRXX0FEUl8xX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl8xX05UV19BRFJfMSh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX05UV19BRFJfMV9OVFdfQURSXzFfU0hJRlQpKSAmIEdFTkZTS19OVFdfQURSXzFfTlRXX0FEUl8xX01BU0spCisKKy8qISBAbmFtZSBOVFdfQURSXzIgLSBORVRXT1JLIEFERFJFU1MgMiAqLworI2RlZmluZSBHRU5GU0tfTlRXX0FEUl8yX05UV19BRFJfMl9NQVNLICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfMl9OVFdfQURSXzJfU0hJRlQgICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSXzJfTlRXX0FEUl8yKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfTlRXX0FEUl8yX05UV19BRFJfMl9TSElGVCkpICYgR0VORlNLX05UV19BRFJfMl9OVFdfQURSXzJfTUFTSykKKworLyohIEBuYW1lIE5UV19BRFJfMyAtIE5FVFdPUksgQUREUkVTUyAzICovCisjZGVmaW5lIEdFTkZTS19OVFdfQURSXzNfTlRXX0FEUl8zX01BU0sgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl8zX05UV19BRFJfM19TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfM19OVFdfQURSXzMoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19OVFdfQURSXzNfTlRXX0FEUl8zX1NISUZUKSkgJiBHRU5GU0tfTlRXX0FEUl8zX05UV19BRFJfM19NQVNLKQorCisvKiEgQG5hbWUgUlhfV0FURVJNQVJLIC0gUkVDRUlWRSBXQVRFUk1BUksgKi8KKyNkZWZpbmUgR0VORlNLX1JYX1dBVEVSTUFSS19SWF9XQVRFUk1BUktfTUFTSyAgICAoMHgxRkZGVSkKKyNkZWZpbmUgR0VORlNLX1JYX1dBVEVSTUFSS19SWF9XQVRFUk1BUktfU0hJRlQgICAoMFUpCisjZGVmaW5lIEdFTkZTS19SWF9XQVRFUk1BUktfUlhfV0FURVJNQVJLKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfUlhfV0FURVJNQVJLX1JYX1dBVEVSTUFSS19TSElGVCkpICYgR0VORlNLX1JYX1dBVEVSTUFSS19SWF9XQVRFUk1BUktfTUFTSykKKyNkZWZpbmUgR0VORlNLX1JYX1dBVEVSTUFSS19CWVRFX0NPVU5URVJfTUFTSyAgICAoMHgxRkZGMDAwMFUpCisjZGVmaW5lIEdFTkZTS19SWF9XQVRFUk1BUktfQllURV9DT1VOVEVSX1NISUZUICAgKDE2VSkKKyNkZWZpbmUgR0VORlNLX1JYX1dBVEVSTUFSS19CWVRFX0NPVU5URVIoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19SWF9XQVRFUk1BUktfQllURV9DT1VOVEVSX1NISUZUKSkgJiBHRU5GU0tfUlhfV0FURVJNQVJLX0JZVEVfQ09VTlRFUl9NQVNLKQorCisvKiEgQG5hbWUgRFNNX0NUUkwgLSBEU00gQ09OVFJPTCAqLworI2RlZmluZSBHRU5GU0tfRFNNX0NUUkxfR0VORVJJQ19GU0tfU0xFRVBfRU5fTUFTSyAoMHgxVSkKKyNkZWZpbmUgR0VORlNLX0RTTV9DVFJMX0dFTkVSSUNfRlNLX1NMRUVQX0VOX1NISUZUICgwVSkKKyNkZWZpbmUgR0VORlNLX0RTTV9DVFJMX0dFTkVSSUNfRlNLX1NMRUVQX0VOKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19EU01fQ1RSTF9HRU5FUklDX0ZTS19TTEVFUF9FTl9TSElGVCkpICYgR0VORlNLX0RTTV9DVFJMX0dFTkVSSUNfRlNLX1NMRUVQX0VOX01BU0spCisKKy8qISBAbmFtZSBQQVJUX0lEIC0gUEFSVCBJRCAqLworI2RlZmluZSBHRU5GU0tfUEFSVF9JRF9QQVJUX0lEX01BU0sgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgR0VORlNLX1BBUlRfSURfUEFSVF9JRF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19QQVJUX0lEX1BBUlRfSUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfUEFSVF9JRF9QQVJUX0lEX1NISUZUKSkgJiBHRU5GU0tfUEFSVF9JRF9QQVJUX0lEX01BU0spCisKKy8qISBAbmFtZSBQQUNLRVRfQ0ZHIC0gUEFDS0VUIENPTkZJR1VSQVRJT04gKi8KKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX1NaX01BU0sgICAgICAgICAoMHgxRlUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9TWl9TSElGVCAgICAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfU1ooeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX1NaX1NISUZUKSkgJiBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfU1pfTUFTSykKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX0JJVF9PUkRfTUFTSyAgICAoMHgyMFUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9CSVRfT1JEX1NISUZUICAgKDVVKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfQklUX09SRCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX0JJVF9PUkRfU0hJRlQpKSAmIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9CSVRfT1JEX01BU0spCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX1NZTkNfQUREUl9TWl9NQVNLICAgICAgKDB4QzBVKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19TWU5DX0FERFJfU1pfU0hJRlQgICAgICg2VSkKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfU1lOQ19BRERSX1NaKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19QQUNLRVRfQ0ZHX1NZTkNfQUREUl9TWl9TSElGVCkpICYgR0VORlNLX1BBQ0tFVF9DRkdfU1lOQ19BRERSX1NaX01BU0spCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9BREpfTUFTSyAgICAgICAgKDB4M0YwMFUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9BREpfU0hJRlQgICAgICAgKDhVKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfQURKKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX0FESl9TSElGVCkpICYgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX0FESl9NQVNLKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfRkFJTF9NQVNLICAgICAgICgweDgwMDBVKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfRkFJTF9TSElGVCAgICAgICgxNVUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9GQUlMKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfRkFJTF9TSElGVCkpICYgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX0ZBSUxfTUFTSykKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfSDBfU1pfTUFTSyAgICAgICAgICAgICAoMHgxRjAwMDBVKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19IMF9TWl9TSElGVCAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0gwX1NaKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfUEFDS0VUX0NGR19IMF9TWl9TSElGVCkpICYgR0VORlNLX1BBQ0tFVF9DRkdfSDBfU1pfTUFTSykKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfSDBfRkFJTF9NQVNLICAgICAgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19IMF9GQUlMX1NISUZUICAgICAgICAgICgyM1UpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0gwX0ZBSUwoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfUEFDS0VUX0NGR19IMF9GQUlMX1NISUZUKSkgJiBHRU5GU0tfUEFDS0VUX0NGR19IMF9GQUlMX01BU0spCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0gxX1NaX01BU0sgICAgICAgICAgICAgKDB4MUYwMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19IMV9TWl9TSElGVCAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0gxX1NaKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfUEFDS0VUX0NGR19IMV9TWl9TSElGVCkpICYgR0VORlNLX1BBQ0tFVF9DRkdfSDFfU1pfTUFTSykKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfSDFfRkFJTF9NQVNLICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0gxX0ZBSUxfU0hJRlQgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfSDFfRkFJTCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19QQUNLRVRfQ0ZHX0gxX0ZBSUxfU0hJRlQpKSAmIEdFTkZTS19QQUNLRVRfQ0ZHX0gxX0ZBSUxfTUFTSykKKworLyohIEBuYW1lIEgwX0NGRyAtIEgwIENPTkZJR1VSQVRJT04gKi8KKyNkZWZpbmUgR0VORlNLX0gwX0NGR19IMF9NQVRDSF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgR0VORlNLX0gwX0NGR19IMF9NQVRDSF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19IMF9DRkdfSDBfTUFUQ0goeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSDBfQ0ZHX0gwX01BVENIX1NISUZUKSkgJiBHRU5GU0tfSDBfQ0ZHX0gwX01BVENIX01BU0spCisjZGVmaW5lIEdFTkZTS19IMF9DRkdfSDBfTUFTS19NQVNLICAgICAgICAgICAgICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBHRU5GU0tfSDBfQ0ZHX0gwX01BU0tfU0hJRlQgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIEdFTkZTS19IMF9DRkdfSDBfTUFTSyh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSDBfQ0ZHX0gwX01BU0tfU0hJRlQpKSAmIEdFTkZTS19IMF9DRkdfSDBfTUFTS19NQVNLKQorCisvKiEgQG5hbWUgSDFfQ0ZHIC0gSDEgQ09ORklHVVJBVElPTiAqLworI2RlZmluZSBHRU5GU0tfSDFfQ0ZHX0gxX01BVENIX01BU0sgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBHRU5GU0tfSDFfQ0ZHX0gxX01BVENIX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX0gxX0NGR19IMV9NQVRDSCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19IMV9DRkdfSDFfTUFUQ0hfU0hJRlQpKSAmIEdFTkZTS19IMV9DRkdfSDFfTUFUQ0hfTUFTSykKKyNkZWZpbmUgR0VORlNLX0gxX0NGR19IMV9NQVNLX01BU0sgICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIEdFTkZTS19IMV9DRkdfSDFfTUFTS19TSElGVCAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgR0VORlNLX0gxX0NGR19IMV9NQVNLKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19IMV9DRkdfSDFfTUFTS19TSElGVCkpICYgR0VORlNLX0gxX0NGR19IMV9NQVNLX01BU0spCisKKy8qISBAbmFtZSBDUkNfQ0ZHIC0gQ1JDIENPTkZJR1VSQVRJT04gKi8KKyNkZWZpbmUgR0VORlNLX0NSQ19DRkdfQ1JDX1NaX01BU0sgICAgICAgICAgICAgICAoMHg3VSkKKyNkZWZpbmUgR0VORlNLX0NSQ19DRkdfQ1JDX1NaX1NISUZUICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19DUkNfQ0ZHX0NSQ19TWih4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfQ1JDX0NGR19DUkNfU1pfU0hJRlQpKSAmIEdFTkZTS19DUkNfQ0ZHX0NSQ19TWl9NQVNLKQorI2RlZmluZSBHRU5GU0tfQ1JDX0NGR19DUkNfU1RBUlRfQllURV9NQVNLICAgICAgICgweEYwMFUpCisjZGVmaW5lIEdFTkZTS19DUkNfQ0ZHX0NSQ19TVEFSVF9CWVRFX1NISUZUICAgICAgKDhVKQorI2RlZmluZSBHRU5GU0tfQ1JDX0NGR19DUkNfU1RBUlRfQllURSh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0NSQ19DRkdfQ1JDX1NUQVJUX0JZVEVfU0hJRlQpKSAmIEdFTkZTS19DUkNfQ0ZHX0NSQ19TVEFSVF9CWVRFX01BU0spCisjZGVmaW5lIEdFTkZTS19DUkNfQ0ZHX0NSQ19SRUZfSU5fTUFTSyAgICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBHRU5GU0tfQ1JDX0NGR19DUkNfUkVGX0lOX1NISUZUICAgICAgICAgICgxNlUpCisjZGVmaW5lIEdFTkZTS19DUkNfQ0ZHX0NSQ19SRUZfSU4oeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfQ1JDX0NGR19DUkNfUkVGX0lOX1NISUZUKSkgJiBHRU5GU0tfQ1JDX0NGR19DUkNfUkVGX0lOX01BU0spCisjZGVmaW5lIEdFTkZTS19DUkNfQ0ZHX0NSQ19SRUZfT1VUX01BU0sgICAgICAgICAgKDB4MjAwMDBVKQorI2RlZmluZSBHRU5GU0tfQ1JDX0NGR19DUkNfUkVGX09VVF9TSElGVCAgICAgICAgICgxN1UpCisjZGVmaW5lIEdFTkZTS19DUkNfQ0ZHX0NSQ19SRUZfT1VUKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfQ1JDX0NGR19DUkNfUkVGX09VVF9TSElGVCkpICYgR0VORlNLX0NSQ19DRkdfQ1JDX1JFRl9PVVRfTUFTSykKKyNkZWZpbmUgR0VORlNLX0NSQ19DRkdfQ1JDX0JZVEVfT1JEX01BU0sgICAgICAgICAoMHg0MDAwMFUpCisjZGVmaW5lIEdFTkZTS19DUkNfQ0ZHX0NSQ19CWVRFX09SRF9TSElGVCAgICAgICAgKDE4VSkKKyNkZWZpbmUgR0VORlNLX0NSQ19DRkdfQ1JDX0JZVEVfT1JEKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19DUkNfQ0ZHX0NSQ19CWVRFX09SRF9TSElGVCkpICYgR0VORlNLX0NSQ19DRkdfQ1JDX0JZVEVfT1JEX01BU0spCisKKy8qISBAbmFtZSBDUkNfSU5JVCAtIENSQyBJTklUSUFMSVpBVElPTiAqLworI2RlZmluZSBHRU5GU0tfQ1JDX0lOSVRfQ1JDX1NFRURfTUFTSyAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgR0VORlNLX0NSQ19JTklUX0NSQ19TRUVEX1NISUZUICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19DUkNfSU5JVF9DUkNfU0VFRCh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfQ1JDX0lOSVRfQ1JDX1NFRURfU0hJRlQpKSAmIEdFTkZTS19DUkNfSU5JVF9DUkNfU0VFRF9NQVNLKQorCisvKiEgQG5hbWUgQ1JDX1BPTFkgLSBDUkMgUE9MWU5PTUlBTCAqLworI2RlZmluZSBHRU5GU0tfQ1JDX1BPTFlfQ1JDX1BPTFlfTUFTSyAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgR0VORlNLX0NSQ19QT0xZX0NSQ19QT0xZX1NISUZUICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19DUkNfUE9MWV9DUkNfUE9MWSh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfQ1JDX1BPTFlfQ1JDX1BPTFlfU0hJRlQpKSAmIEdFTkZTS19DUkNfUE9MWV9DUkNfUE9MWV9NQVNLKQorCisvKiEgQG5hbWUgQ1JDX1hPUl9PVVQgLSBDUkMgWE9SIE9VVCAqLworI2RlZmluZSBHRU5GU0tfQ1JDX1hPUl9PVVRfQ1JDX1hPUl9PVVRfTUFTSyAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgR0VORlNLX0NSQ19YT1JfT1VUX0NSQ19YT1JfT1VUX1NISUZUICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19DUkNfWE9SX09VVF9DUkNfWE9SX09VVCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfQ1JDX1hPUl9PVVRfQ1JDX1hPUl9PVVRfU0hJRlQpKSAmIEdFTkZTS19DUkNfWE9SX09VVF9DUkNfWE9SX09VVF9NQVNLKQorCisvKiEgQG5hbWUgV0hJVEVOX0NGRyAtIFdISVRFTkVSIENPTkZJR1VSQVRJT04gKi8KKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1NUQVJUX01BU0sgICAgICAoMHgzVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1NUQVJUX1NISUZUICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9TVEFSVCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fU1RBUlRfU0hJRlQpKSAmIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9TVEFSVF9NQVNLKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fRU5EX01BU0sgICAgICAgICgweDRVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fRU5EX1NISUZUICAgICAgICgyVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX0VORCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9FTkRfU0hJRlQpKSAmIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9FTkRfTUFTSykKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX0I0X0NSQ19NQVNLICAgICAoMHg4VSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX0I0X0NSQ19TSElGVCAgICAoM1UpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9CNF9DUkMoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fQjRfQ1JDX1NISUZUKSkgJiBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fQjRfQ1JDX01BU0spCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9QT0xZX1RZUEVfTUFTSyAgKDB4MTBVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fUE9MWV9UWVBFX1NISUZUICg0VSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1BPTFlfVFlQRSh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9QT0xZX1RZUEVfU0hJRlQpKSAmIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9QT0xZX1RZUEVfTUFTSykKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1JFRl9JTl9NQVNLICAgICAoMHgyMFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9SRUZfSU5fU0hJRlQgICAgKDVVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fUkVGX0lOKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1JFRl9JTl9TSElGVCkpICYgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1JFRl9JTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fUEFZTE9BRF9SRUlOSVRfTUFTSyAoMHg0MFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9QQVlMT0FEX1JFSU5JVF9TSElGVCAoNlUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9QQVlMT0FEX1JFSU5JVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9QQVlMT0FEX1JFSU5JVF9TSElGVCkpICYgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1BBWUxPQURfUkVJTklUX01BU0spCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9TSVpFX01BU0sgICAgICAgKDB4RjAwVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1NJWkVfU0hJRlQgICAgICAoOFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9TSVpFKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fU0laRV9TSElGVCkpICYgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1NJWkVfTUFTSykKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfTUFOQ0hFU1RFUl9FTl9NQVNLICAgICAoMHgxMDAwVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfTUFOQ0hFU1RFUl9FTl9TSElGVCAgICAoMTJVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX0VOKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1dISVRFTl9DRkdfTUFOQ0hFU1RFUl9FTl9TSElGVCkpICYgR0VORlNLX1dISVRFTl9DRkdfTUFOQ0hFU1RFUl9FTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX0lOVl9NQVNLICAgICgweDIwMDBVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX0lOVl9TSElGVCAgICgxM1UpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX01BTkNIRVNURVJfSU5WKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX0lOVl9TSElGVCkpICYgR0VORlNLX1dISVRFTl9DRkdfTUFOQ0hFU1RFUl9JTlZfTUFTSykKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfTUFOQ0hFU1RFUl9TVEFSVF9NQVNLICAoMHg0MDAwVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfTUFOQ0hFU1RFUl9TVEFSVF9TSElGVCAoMTRVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX1NUQVJUKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1dISVRFTl9DRkdfTUFOQ0hFU1RFUl9TVEFSVF9TSElGVCkpICYgR0VORlNLX1dISVRFTl9DRkdfTUFOQ0hFU1RFUl9TVEFSVF9NQVNLKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fSU5JVF9NQVNLICAgICAgICgweDFGRjAwMDBVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fSU5JVF9TSElGVCAgICAgICgxNlUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9JTklUKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fSU5JVF9TSElGVCkpICYgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX0lOSVRfTUFTSykKKworLyohIEBuYW1lIFdISVRFTl9QT0xZIC0gV0hJVEVORVIgUE9MWU5PTUlBTCAqLworI2RlZmluZSBHRU5GU0tfV0hJVEVOX1BPTFlfV0hJVEVOX1BPTFlfTUFTSyAgICAgICgweDFGRlUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fUE9MWV9XSElURU5fUE9MWV9TSElGVCAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX1BPTFlfV0hJVEVOX1BPTFkoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1dISVRFTl9QT0xZX1dISVRFTl9QT0xZX1NISUZUKSkgJiBHRU5GU0tfV0hJVEVOX1BPTFlfV0hJVEVOX1BPTFlfTUFTSykKKworLyohIEBuYW1lIFdISVRFTl9TWl9USFIgLSBXSElURU5FUiBTSVpFIFRIUkVTSE9MRCAqLworI2RlZmluZSBHRU5GU0tfV0hJVEVOX1NaX1RIUl9XSElURU5fU1pfVEhSX01BU0sgICgweEZGRlUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fU1pfVEhSX1dISVRFTl9TWl9USFJfU0hJRlQgKDBVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX1NaX1RIUl9XSElURU5fU1pfVEhSKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1dISVRFTl9TWl9USFJfV0hJVEVOX1NaX1RIUl9TSElGVCkpICYgR0VORlNLX1dISVRFTl9TWl9USFJfV0hJVEVOX1NaX1RIUl9NQVNLKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX1NaX1RIUl9MRU5HVEhfTUFYX01BU0sgICAgICgweDdGMDAwMFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fU1pfVEhSX0xFTkdUSF9NQVhfU0hJRlQgICAgKDE2VSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9TWl9USFJfTEVOR1RIX01BWCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19XSElURU5fU1pfVEhSX0xFTkdUSF9NQVhfU0hJRlQpKSAmIEdFTkZTS19XSElURU5fU1pfVEhSX0xFTkdUSF9NQVhfTUFTSykKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9TWl9USFJfUkVDX0JBRF9QS1RfTUFTSyAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX1NaX1RIUl9SRUNfQkFEX1BLVF9TSElGVCAgICgyM1UpCisjZGVmaW5lIEdFTkZTS19XSElURU5fU1pfVEhSX1JFQ19CQURfUEtUKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfV0hJVEVOX1NaX1RIUl9SRUNfQkFEX1BLVF9TSElGVCkpICYgR0VORlNLX1dISVRFTl9TWl9USFJfUkVDX0JBRF9QS1RfTUFTSykKKworLyohIEBuYW1lIEJJVFJBVEUgLSBCSVQgUkFURSAqLworI2RlZmluZSBHRU5GU0tfQklUUkFURV9CSVRSQVRFX01BU0sgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBHRU5GU0tfQklUUkFURV9CSVRSQVRFX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX0JJVFJBVEVfQklUUkFURSh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19CSVRSQVRFX0JJVFJBVEVfU0hJRlQpKSAmIEdFTkZTS19CSVRSQVRFX0JJVFJBVEVfTUFTSykKKworLyohIEBuYW1lIFBCX1BBUlRJVElPTiAtIFBBQ0tFVCBCVUZGRVIgUEFSVElUSU9OIFBPSU5UICovCisjZGVmaW5lIEdFTkZTS19QQl9QQVJUSVRJT05fUEJfUEFSVElUSU9OX01BU0sgICAgKDB4N0ZGVSkKKyNkZWZpbmUgR0VORlNLX1BCX1BBUlRJVElPTl9QQl9QQVJUSVRJT05fU0hJRlQgICAoMFUpCisjZGVmaW5lIEdFTkZTS19QQl9QQVJUSVRJT05fUEJfUEFSVElUSU9OKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfUEJfUEFSVElUSU9OX1BCX1BBUlRJVElPTl9TSElGVCkpICYgR0VORlNLX1BCX1BBUlRJVElPTl9QQl9QQVJUSVRJT05fTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIEdFTkZTS19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIEdFTkZTSyAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIEdFTkZTSyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgR0VORlNLX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA1RjAwMHUpCisvKiogUGVyaXBoZXJhbCBHRU5GU0sgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIEdFTkZTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChHRU5GU0tfVHlwZSAqKUdFTkZTS19CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIEdFTkZTSyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIEdFTkZTS19CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgeyBHRU5GU0tfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgR0VORlNLIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBHRU5GU0tfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgIHsgR0VORlNLIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBHRU5GU0tfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBHUElPIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgR1BJT19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBHUElPIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBHUElPIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBQRE9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9ydCBEYXRhIE91dHB1dCBSZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgX19PICB1aW50MzJfdCBQU09SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9ydCBTZXQgT3V0cHV0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICBfX08gIHVpbnQzMl90IFBDT1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb3J0IENsZWFyIE91dHB1dCBSZWdpc3Rlciwgb2Zmc2V0OiAweDggKi8KKyAgX19PICB1aW50MzJfdCBQVE9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9ydCBUb2dnbGUgT3V0cHV0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworICBfX0kgIHVpbnQzMl90IFBESVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb3J0IERhdGEgSW5wdXQgUmVnaXN0ZXIsIG9mZnNldDogMHgxMCAqLworICBfX0lPIHVpbnQzMl90IFBERFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb3J0IERhdGEgRGlyZWN0aW9uIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTQgKi8KK30gR1BJT19UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBHUElPIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgR1BJT19SZWdpc3Rlcl9NYXNrcyBHUElPIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBQRE9SIC0gUG9ydCBEYXRhIE91dHB1dCBSZWdpc3RlciAqLworI2RlZmluZSBHUElPX1BET1JfUERPX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgR1BJT19QRE9SX1BET19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdQSU9fUERPUl9QRE8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHUElPX1BET1JfUERPX1NISUZUKSkgJiBHUElPX1BET1JfUERPX01BU0spCisKKy8qISBAbmFtZSBQU09SIC0gUG9ydCBTZXQgT3V0cHV0IFJlZ2lzdGVyICovCisjZGVmaW5lIEdQSU9fUFNPUl9QVFNPX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBHUElPX1BTT1JfUFRTT19TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR1BJT19QU09SX1BUU08oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdQSU9fUFNPUl9QVFNPX1NISUZUKSkgJiBHUElPX1BTT1JfUFRTT19NQVNLKQorCisvKiEgQG5hbWUgUENPUiAtIFBvcnQgQ2xlYXIgT3V0cHV0IFJlZ2lzdGVyICovCisjZGVmaW5lIEdQSU9fUENPUl9QVENPX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBHUElPX1BDT1JfUFRDT19TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR1BJT19QQ09SX1BUQ08oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdQSU9fUENPUl9QVENPX1NISUZUKSkgJiBHUElPX1BDT1JfUFRDT19NQVNLKQorCisvKiEgQG5hbWUgUFRPUiAtIFBvcnQgVG9nZ2xlIE91dHB1dCBSZWdpc3RlciAqLworI2RlZmluZSBHUElPX1BUT1JfUFRUT19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgR1BJT19QVE9SX1BUVE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdQSU9fUFRPUl9QVFRPKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHUElPX1BUT1JfUFRUT19TSElGVCkpICYgR1BJT19QVE9SX1BUVE9fTUFTSykKKworLyohIEBuYW1lIFBESVIgLSBQb3J0IERhdGEgSW5wdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BJT19QRElSX1BESV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEdQSU9fUERJUl9QRElfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBHUElPX1BESVJfUERJKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR1BJT19QRElSX1BESV9TSElGVCkpICYgR1BJT19QRElSX1BESV9NQVNLKQorCisvKiEgQG5hbWUgUEREUiAtIFBvcnQgRGF0YSBEaXJlY3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BJT19QRERSX1BERF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEdQSU9fUEREUl9QRERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBHUElPX1BERFJfUEREKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR1BJT19QRERSX1BERF9TSElGVCkpICYgR1BJT19QRERSX1BERF9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgR1BJT19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIEdQSU8gLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBHUElPQSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgR1BJT0FfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDBGRjAwMHUpCisvKiogUGVyaXBoZXJhbCBHUElPQSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgR1BJT0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEdQSU9fVHlwZSAqKUdQSU9BX0JBU0UpCisvKiogUGVyaXBoZXJhbCBHUElPQiBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgR1BJT0JfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDBGRjA0MHUpCisvKiogUGVyaXBoZXJhbCBHUElPQiBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgR1BJT0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEdQSU9fVHlwZSAqKUdQSU9CX0JBU0UpCisvKiogUGVyaXBoZXJhbCBHUElPQyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgR1BJT0NfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDBGRjA4MHUpCisvKiogUGVyaXBoZXJhbCBHUElPQyBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgR1BJT0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEdQSU9fVHlwZSAqKUdQSU9DX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgR1BJTyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIEdQSU9fQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBHUElPQV9CQVNFLCBHUElPQl9CQVNFLCBHUElPQ19CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBHUElPX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgR1BJT0EsIEdQSU9CLCBHUElPQyB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgR1BJT19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEkyQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIEkyQ19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBJMkMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIEkyQyAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDhfdCBBMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEkyQyBBZGRyZXNzIFJlZ2lzdGVyIDEsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDhfdCBGOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEkyQyBGcmVxdWVuY3kgRGl2aWRlciByZWdpc3Rlciwgb2Zmc2V0OiAweDEgKi8KKyAgX19JTyB1aW50OF90IEMxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSTJDIENvbnRyb2wgUmVnaXN0ZXIgMSwgb2Zmc2V0OiAweDIgKi8KKyAgX19JTyB1aW50OF90IFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSTJDIFN0YXR1cyByZWdpc3Rlciwgb2Zmc2V0OiAweDMgKi8KKyAgX19JTyB1aW50OF90IEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSTJDIERhdGEgSS9PIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQ4X3QgQzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJMkMgQ29udHJvbCBSZWdpc3RlciAyLCBvZmZzZXQ6IDB4NSAqLworICBfX0lPIHVpbnQ4X3QgRkxUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJMkMgUHJvZ3JhbW1hYmxlIElucHV0IEdsaXRjaCBGaWx0ZXIgUmVnaXN0ZXIsIG9mZnNldDogMHg2ICovCisgIF9fSU8gdWludDhfdCBSQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEkyQyBSYW5nZSBBZGRyZXNzIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4NyAqLworICBfX0lPIHVpbnQ4X3QgU01COyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJMkMgU01CdXMgQ29udHJvbCBhbmQgU3RhdHVzIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQ4X3QgQTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJMkMgQWRkcmVzcyBSZWdpc3RlciAyLCBvZmZzZXQ6IDB4OSAqLworICBfX0lPIHVpbnQ4X3QgU0xUSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJMkMgU0NMIExvdyBUaW1lb3V0IFJlZ2lzdGVyIEhpZ2gsIG9mZnNldDogMHhBICovCisgIF9fSU8gdWludDhfdCBTTFRMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEkyQyBTQ0wgTG93IFRpbWVvdXQgUmVnaXN0ZXIgTG93LCBvZmZzZXQ6IDB4QiAqLworICBfX0lPIHVpbnQ4X3QgUzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJMkMgU3RhdHVzIHJlZ2lzdGVyIDIsIG9mZnNldDogMHhDICovCit9IEkyQ19UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBJMkMgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBJMkNfUmVnaXN0ZXJfTWFza3MgSTJDIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBBMSAtIEkyQyBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgSTJDX0ExX0FEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRVUpCisjZGVmaW5lIEkyQ19BMV9BRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBJMkNfQTFfQUQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19BMV9BRF9TSElGVCkpICYgSTJDX0ExX0FEX01BU0spCisKKy8qISBAbmFtZSBGIC0gSTJDIEZyZXF1ZW5jeSBEaXZpZGVyIHJlZ2lzdGVyICovCisjZGVmaW5lIEkyQ19GX0lDUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4M0ZVKQorI2RlZmluZSBJMkNfRl9JQ1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgSTJDX0ZfSUNSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfRl9JQ1JfU0hJRlQpKSAmIEkyQ19GX0lDUl9NQVNLKQorI2RlZmluZSBJMkNfRl9NVUxUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweEMwVSkKKyNkZWZpbmUgSTJDX0ZfTVVMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIEkyQ19GX01VTFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0ZfTVVMVF9TSElGVCkpICYgSTJDX0ZfTVVMVF9NQVNLKQorCisvKiEgQG5hbWUgQzEgLSBJMkMgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIEkyQ19DMV9ETUFFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIEkyQ19DMV9ETUFFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBJMkNfQzFfRE1BRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19DMV9ETUFFTl9TSElGVCkpICYgSTJDX0MxX0RNQUVOX01BU0spCisjZGVmaW5lIEkyQ19DMV9XVUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIEkyQ19DMV9XVUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBJMkNfQzFfV1VFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19DMV9XVUVOX1NISUZUKSkgJiBJMkNfQzFfV1VFTl9NQVNLKQorI2RlZmluZSBJMkNfQzFfUlNUQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBJMkNfQzFfUlNUQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgSTJDX0MxX1JTVEEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfQzFfUlNUQV9TSElGVCkpICYgSTJDX0MxX1JTVEFfTUFTSykKKyNkZWZpbmUgSTJDX0MxX1RYQUtfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgSTJDX0MxX1RYQUtfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIEkyQ19DMV9UWEFLKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0MxX1RYQUtfU0hJRlQpKSAmIEkyQ19DMV9UWEFLX01BU0spCisjZGVmaW5lIEkyQ19DMV9UWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBJMkNfQzFfVFhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgSTJDX0MxX1RYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfQzFfVFhfU0hJRlQpKSAmIEkyQ19DMV9UWF9NQVNLKQorI2RlZmluZSBJMkNfQzFfTVNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgSTJDX0MxX01TVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIEkyQ19DMV9NU1QoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0MxX01TVF9TSElGVCkpICYgSTJDX0MxX01TVF9NQVNLKQorI2RlZmluZSBJMkNfQzFfSUlDSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgSTJDX0MxX0lJQ0lFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIEkyQ19DMV9JSUNJRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0MxX0lJQ0lFX1NISUZUKSkgJiBJMkNfQzFfSUlDSUVfTUFTSykKKyNkZWZpbmUgSTJDX0MxX0lJQ0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIEkyQ19DMV9JSUNFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBJMkNfQzFfSUlDRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19DMV9JSUNFTl9TSElGVCkpICYgSTJDX0MxX0lJQ0VOX01BU0spCisKKy8qISBAbmFtZSBTIC0gSTJDIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJMkNfU19SWEFLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBJMkNfU19SWEFLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgSTJDX1NfUlhBSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU19SWEFLX1NISUZUKSkgJiBJMkNfU19SWEFLX01BU0spCisjZGVmaW5lIEkyQ19TX0lJQ0lGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIEkyQ19TX0lJQ0lGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBJMkNfU19JSUNJRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19TX0lJQ0lGX1NISUZUKSkgJiBJMkNfU19JSUNJRl9NQVNLKQorI2RlZmluZSBJMkNfU19TUldfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBJMkNfU19TUldfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgSTJDX1NfU1JXKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU19TUldfU0hJRlQpKSAmIEkyQ19TX1NSV19NQVNLKQorI2RlZmluZSBJMkNfU19SQU1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBJMkNfU19SQU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgSTJDX1NfUkFNKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU19SQU1fU0hJRlQpKSAmIEkyQ19TX1JBTV9NQVNLKQorI2RlZmluZSBJMkNfU19BUkJMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgSTJDX1NfQVJCTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIEkyQ19TX0FSQkwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NfQVJCTF9TSElGVCkpICYgSTJDX1NfQVJCTF9NQVNLKQorI2RlZmluZSBJMkNfU19CVVNZX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgSTJDX1NfQlVTWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIEkyQ19TX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NfQlVTWV9TSElGVCkpICYgSTJDX1NfQlVTWV9NQVNLKQorI2RlZmluZSBJMkNfU19JQUFTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgSTJDX1NfSUFBU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIEkyQ19TX0lBQVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NfSUFBU19TSElGVCkpICYgSTJDX1NfSUFBU19NQVNLKQorI2RlZmluZSBJMkNfU19UQ0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgSTJDX1NfVENGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIEkyQ19TX1RDRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NfVENGX1NISUZUKSkgJiBJMkNfU19UQ0ZfTUFTSykKKworLyohIEBuYW1lIEQgLSBJMkMgRGF0YSBJL08gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSTJDX0RfREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEkyQ19EX0RBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBJMkNfRF9EQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19EX0RBVEFfU0hJRlQpKSAmIEkyQ19EX0RBVEFfTUFTSykKKworLyohIEBuYW1lIEMyIC0gSTJDIENvbnRyb2wgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBJMkNfQzJfQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdVKQorI2RlZmluZSBJMkNfQzJfQURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgSTJDX0MyX0FEKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfQzJfQURfU0hJRlQpKSAmIEkyQ19DMl9BRF9NQVNLKQorI2RlZmluZSBJMkNfQzJfUk1FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBJMkNfQzJfUk1FTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgSTJDX0MyX1JNRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfQzJfUk1FTl9TSElGVCkpICYgSTJDX0MyX1JNRU5fTUFTSykKKyNkZWZpbmUgSTJDX0MyX1NCUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIEkyQ19DMl9TQlJDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBJMkNfQzJfU0JSQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19DMl9TQlJDX1NISUZUKSkgJiBJMkNfQzJfU0JSQ19NQVNLKQorI2RlZmluZSBJMkNfQzJfSERSU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgSTJDX0MyX0hEUlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIEkyQ19DMl9IRFJTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0MyX0hEUlNfU0hJRlQpKSAmIEkyQ19DMl9IRFJTX01BU0spCisjZGVmaW5lIEkyQ19DMl9BREVYVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBJMkNfQzJfQURFWFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgSTJDX0MyX0FERVhUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfQzJfQURFWFRfU0hJRlQpKSAmIEkyQ19DMl9BREVYVF9NQVNLKQorI2RlZmluZSBJMkNfQzJfR0NBRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgSTJDX0MyX0dDQUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIEkyQ19DMl9HQ0FFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0MyX0dDQUVOX1NISUZUKSkgJiBJMkNfQzJfR0NBRU5fTUFTSykKKworLyohIEBuYW1lIEZMVCAtIEkyQyBQcm9ncmFtbWFibGUgSW5wdXQgR2xpdGNoIEZpbHRlciBSZWdpc3RlciAqLworI2RlZmluZSBJMkNfRkxUX0ZMVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBJMkNfRkxUX0ZMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgSTJDX0ZMVF9GTFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfRkxUX0ZMVF9TSElGVCkpICYgSTJDX0ZMVF9GTFRfTUFTSykKKyNkZWZpbmUgSTJDX0ZMVF9TVEFSVEZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIEkyQ19GTFRfU1RBUlRGX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBJMkNfRkxUX1NUQVJURih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19GTFRfU1RBUlRGX1NISUZUKSkgJiBJMkNfRkxUX1NUQVJURl9NQVNLKQorI2RlZmluZSBJMkNfRkxUX1NTSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgSTJDX0ZMVF9TU0lFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIEkyQ19GTFRfU1NJRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0ZMVF9TU0lFX1NISUZUKSkgJiBJMkNfRkxUX1NTSUVfTUFTSykKKyNkZWZpbmUgSTJDX0ZMVF9TVE9QRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIEkyQ19GTFRfU1RPUEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBJMkNfRkxUX1NUT1BGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19GTFRfU1RPUEZfU0hJRlQpKSAmIEkyQ19GTFRfU1RPUEZfTUFTSykKKyNkZWZpbmUgSTJDX0ZMVF9TSEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIEkyQ19GTFRfU0hFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBJMkNfRkxUX1NIRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19GTFRfU0hFTl9TSElGVCkpICYgSTJDX0ZMVF9TSEVOX01BU0spCisKKy8qISBAbmFtZSBSQSAtIEkyQyBSYW5nZSBBZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIEkyQ19SQV9SQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkVVKQorI2RlZmluZSBJMkNfUkFfUkFEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgSTJDX1JBX1JBRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfUkFfUkFEX1NISUZUKSkgJiBJMkNfUkFfUkFEX01BU0spCisKKy8qISBAbmFtZSBTTUIgLSBJMkMgU01CdXMgQ29udHJvbCBhbmQgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEkyQ19TTUJfU0hURjJJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIEkyQ19TTUJfU0hURjJJRV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBJMkNfU01CX1NIVEYySUUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19TTUJfU0hURjJJRV9TSElGVCkpICYgSTJDX1NNQl9TSFRGMklFX01BU0spCisjZGVmaW5lIEkyQ19TTUJfU0hURjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIEkyQ19TTUJfU0hURjJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBJMkNfU01CX1NIVEYyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19TTUJfU0hURjJfU0hJRlQpKSAmIEkyQ19TTUJfU0hURjJfTUFTSykKKyNkZWZpbmUgSTJDX1NNQl9TSFRGMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgSTJDX1NNQl9TSFRGMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIEkyQ19TTUJfU0hURjEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NNQl9TSFRGMV9TSElGVCkpICYgSTJDX1NNQl9TSFRGMV9NQVNLKQorI2RlZmluZSBJMkNfU01CX1NMVEZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBJMkNfU01CX1NMVEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgSTJDX1NNQl9TTFRGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU01CX1NMVEZfU0hJRlQpKSAmIEkyQ19TTUJfU0xURl9NQVNLKQorI2RlZmluZSBJMkNfU01CX1RDS1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgSTJDX1NNQl9UQ0tTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIEkyQ19TTUJfVENLU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NNQl9UQ0tTRUxfU0hJRlQpKSAmIEkyQ19TTUJfVENLU0VMX01BU0spCisjZGVmaW5lIEkyQ19TTUJfU0lJQ0FFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBJMkNfU01CX1NJSUNBRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgSTJDX1NNQl9TSUlDQUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU01CX1NJSUNBRU5fU0hJRlQpKSAmIEkyQ19TTUJfU0lJQ0FFTl9NQVNLKQorI2RlZmluZSBJMkNfU01CX0FMRVJURU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgSTJDX1NNQl9BTEVSVEVOX1NISUZUICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIEkyQ19TTUJfQUxFUlRFTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NNQl9BTEVSVEVOX1NISUZUKSkgJiBJMkNfU01CX0FMRVJURU5fTUFTSykKKyNkZWZpbmUgSTJDX1NNQl9GQUNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIEkyQ19TTUJfRkFDS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBJMkNfU01CX0ZBQ0soeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19TTUJfRkFDS19TSElGVCkpICYgSTJDX1NNQl9GQUNLX01BU0spCisKKy8qISBAbmFtZSBBMiAtIEkyQyBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgSTJDX0EyX1NBRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRVUpCisjZGVmaW5lIEkyQ19BMl9TQURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBJMkNfQTJfU0FEKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19BMl9TQURfU0hJRlQpKSAmIEkyQ19BMl9TQURfTUFTSykKKworLyohIEBuYW1lIFNMVEggLSBJMkMgU0NMIExvdyBUaW1lb3V0IFJlZ2lzdGVyIEhpZ2ggKi8KKyNkZWZpbmUgSTJDX1NMVEhfU1NMVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEkyQ19TTFRIX1NTTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBJMkNfU0xUSF9TU0xUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19TTFRIX1NTTFRfU0hJRlQpKSAmIEkyQ19TTFRIX1NTTFRfTUFTSykKKworLyohIEBuYW1lIFNMVEwgLSBJMkMgU0NMIExvdyBUaW1lb3V0IFJlZ2lzdGVyIExvdyAqLworI2RlZmluZSBJMkNfU0xUTF9TU0xUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgSTJDX1NMVExfU1NMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEkyQ19TTFRMX1NTTFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NMVExfU1NMVF9TSElGVCkpICYgSTJDX1NMVExfU1NMVF9NQVNLKQorCisvKiEgQG5hbWUgUzIgLSBJMkMgU3RhdHVzIHJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgSTJDX1MyX0VNUFRZX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgSTJDX1MyX0VNUFRZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEkyQ19TMl9FTVBUWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1MyX0VNUFRZX1NISUZUKSkgJiBJMkNfUzJfRU1QVFlfTUFTSykKKyNkZWZpbmUgSTJDX1MyX0VSUk9SX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgSTJDX1MyX0VSUk9SX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIEkyQ19TMl9FUlJPUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1MyX0VSUk9SX1NISUZUKSkgJiBJMkNfUzJfRVJST1JfTUFTSykKKyNkZWZpbmUgSTJDX1MyX0RGRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgSTJDX1MyX0RGRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIEkyQ19TMl9ERkVOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1MyX0RGRU5fU0hJRlQpKSAmIEkyQ19TMl9ERkVOX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBJMkNfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBJMkMgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBJMkMwIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBJMkMwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDY2MDAwdSkKKy8qKiBQZXJpcGhlcmFsIEkyQzAgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIEkyQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJMkNfVHlwZSAqKUkyQzBfQkFTRSkKKy8qKiBQZXJpcGhlcmFsIEkyQzEgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEkyQzFfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNjcwMDB1KQorLyoqIFBlcmlwaGVyYWwgSTJDMSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgSTJDMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEkyQ19UeXBlICopSTJDMV9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIEkyQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIEkyQ19CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBJMkMwX0JBU0UsIEkyQzFfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgSTJDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBJMkNfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgSTJDMCwgSTJDMSB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBJMkMgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIEkyQ19JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBJMkMwX0lSUW4sIEkyQzFfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgSTJDX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTExXVSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIExMV1VfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgTExXVSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogTExXVSAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDhfdCBQRTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExMV1UgUGluIEVuYWJsZSAxIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQ4X3QgUEUyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMTFdVIFBpbiBFbmFibGUgMiByZWdpc3Rlciwgb2Zmc2V0OiAweDEgKi8KKyAgX19JTyB1aW50OF90IFBFMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTExXVSBQaW4gRW5hYmxlIDMgcmVnaXN0ZXIsIG9mZnNldDogMHgyICovCisgIF9fSU8gdWludDhfdCBQRTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExMV1UgUGluIEVuYWJsZSA0IHJlZ2lzdGVyLCBvZmZzZXQ6IDB4MyAqLworICBfX0lPIHVpbnQ4X3QgTUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMTFdVIE1vZHVsZSBFbmFibGUgcmVnaXN0ZXIsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDhfdCBGMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExMV1UgRmxhZyAxIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4NSAqLworICBfX0lPIHVpbnQ4X3QgRjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMTFdVIEZsYWcgMiByZWdpc3Rlciwgb2Zmc2V0OiAweDYgKi8KKyAgX19JICB1aW50OF90IEYzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTExXVSBGbGFnIDMgcmVnaXN0ZXIsIG9mZnNldDogMHg3ICovCisgIF9fSU8gdWludDhfdCBGSUxUMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExMV1UgUGluIEZpbHRlciAxIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQ4X3QgRklMVDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMTFdVIFBpbiBGaWx0ZXIgMiByZWdpc3Rlciwgb2Zmc2V0OiAweDkgKi8KK30gTExXVV9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBMTFdVIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTExXVV9SZWdpc3Rlcl9NYXNrcyBMTFdVIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBQRTEgLSBMTFdVIFBpbiBFbmFibGUgMSByZWdpc3RlciAqLworI2RlZmluZSBMTFdVX1BFMV9XVVBFMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBMTFdVX1BFMV9XVVBFMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTExXVV9QRTFfV1VQRTAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX1BFMV9XVVBFMF9TSElGVCkpICYgTExXVV9QRTFfV1VQRTBfTUFTSykKKyNkZWZpbmUgTExXVV9QRTFfV1VQRTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhDVSkKKyNkZWZpbmUgTExXVV9QRTFfV1VQRTFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIExMV1VfUEUxX1dVUEUxKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9QRTFfV1VQRTFfU0hJRlQpKSAmIExMV1VfUEUxX1dVUEUxX01BU0spCisjZGVmaW5lIExMV1VfUEUxX1dVUEUyX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MzBVKQorI2RlZmluZSBMTFdVX1BFMV9XVVBFMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgTExXVV9QRTFfV1VQRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX1BFMV9XVVBFMl9TSElGVCkpICYgTExXVV9QRTFfV1VQRTJfTUFTSykKKyNkZWZpbmUgTExXVV9QRTFfV1VQRTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhDMFUpCisjZGVmaW5lIExMV1VfUEUxX1dVUEUzX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBMTFdVX1BFMV9XVVBFMyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfUEUxX1dVUEUzX1NISUZUKSkgJiBMTFdVX1BFMV9XVVBFM19NQVNLKQorCisvKiEgQG5hbWUgUEUyIC0gTExXVSBQaW4gRW5hYmxlIDIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTExXVV9QRTJfV1VQRTRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgTExXVV9QRTJfV1VQRTRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExMV1VfUEUyX1dVUEU0KHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9QRTJfV1VQRTRfU0hJRlQpKSAmIExMV1VfUEUyX1dVUEU0X01BU0spCisjZGVmaW5lIExMV1VfUEUyX1dVUEU1X01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4Q1UpCisjZGVmaW5lIExMV1VfUEUyX1dVUEU1X1NISUZUICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBMTFdVX1BFMl9XVVBFNSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfUEUyX1dVUEU1X1NISUZUKSkgJiBMTFdVX1BFMl9XVVBFNV9NQVNLKQorI2RlZmluZSBMTFdVX1BFMl9XVVBFNl9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDMwVSkKKyNkZWZpbmUgTExXVV9QRTJfV1VQRTZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIExMV1VfUEUyX1dVUEU2KHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9QRTJfV1VQRTZfU0hJRlQpKSAmIExMV1VfUEUyX1dVUEU2X01BU0spCisjZGVmaW5lIExMV1VfUEUyX1dVUEU3X01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4QzBVKQorI2RlZmluZSBMTFdVX1BFMl9XVVBFN19TSElGVCAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTExXVV9QRTJfV1VQRTcoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX1BFMl9XVVBFN19TSElGVCkpICYgTExXVV9QRTJfV1VQRTdfTUFTSykKKworLyohIEBuYW1lIFBFMyAtIExMV1UgUGluIEVuYWJsZSAzIHJlZ2lzdGVyICovCisjZGVmaW5lIExMV1VfUEUzX1dVUEU4X01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIExMV1VfUEUzX1dVUEU4X1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMTFdVX1BFM19XVVBFOCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfUEUzX1dVUEU4X1NISUZUKSkgJiBMTFdVX1BFM19XVVBFOF9NQVNLKQorI2RlZmluZSBMTFdVX1BFM19XVVBFOV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweENVKQorI2RlZmluZSBMTFdVX1BFM19XVVBFOV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTExXVV9QRTNfV1VQRTkoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX1BFM19XVVBFOV9TSElGVCkpICYgTExXVV9QRTNfV1VQRTlfTUFTSykKKyNkZWZpbmUgTExXVV9QRTNfV1VQRTEwX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgzMFUpCisjZGVmaW5lIExMV1VfUEUzX1dVUEUxMF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBMTFdVX1BFM19XVVBFMTAoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfUEUzX1dVUEUxMF9TSElGVCkpICYgTExXVV9QRTNfV1VQRTEwX01BU0spCisjZGVmaW5lIExMV1VfUEUzX1dVUEUxMV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4QzBVKQorI2RlZmluZSBMTFdVX1BFM19XVVBFMTFfU0hJRlQgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTExXVV9QRTNfV1VQRTExKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX1BFM19XVVBFMTFfU0hJRlQpKSAmIExMV1VfUEUzX1dVUEUxMV9NQVNLKQorCisvKiEgQG5hbWUgUEU0IC0gTExXVSBQaW4gRW5hYmxlIDQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTExXVV9QRTRfV1VQRTEyX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgTExXVV9QRTRfV1VQRTEyX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExMV1VfUEU0X1dVUEUxMih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9QRTRfV1VQRTEyX1NISUZUKSkgJiBMTFdVX1BFNF9XVVBFMTJfTUFTSykKKyNkZWZpbmUgTExXVV9QRTRfV1VQRTEzX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhDVSkKKyNkZWZpbmUgTExXVV9QRTRfV1VQRTEzX1NISUZUICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIExMV1VfUEU0X1dVUEUxMyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9QRTRfV1VQRTEzX1NISUZUKSkgJiBMTFdVX1BFNF9XVVBFMTNfTUFTSykKKyNkZWZpbmUgTExXVV9QRTRfV1VQRTE0X01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgzMFUpCisjZGVmaW5lIExMV1VfUEU0X1dVUEUxNF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBMTFdVX1BFNF9XVVBFMTQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfUEU0X1dVUEUxNF9TSElGVCkpICYgTExXVV9QRTRfV1VQRTE0X01BU0spCisjZGVmaW5lIExMV1VfUEU0X1dVUEUxNV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4QzBVKQorI2RlZmluZSBMTFdVX1BFNF9XVVBFMTVfU0hJRlQgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTExXVV9QRTRfV1VQRTE1KHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX1BFNF9XVVBFMTVfU0hJRlQpKSAmIExMV1VfUEU0X1dVUEUxNV9NQVNLKQorCisvKiEgQG5hbWUgTUUgLSBMTFdVIE1vZHVsZSBFbmFibGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTExXVV9NRV9XVU1FMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExMV1VfTUVfV1VNRTAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9NRV9XVU1FMF9TSElGVCkpICYgTExXVV9NRV9XVU1FMF9NQVNLKQorI2RlZmluZSBMTFdVX01FX1dVTUUxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBMTFdVX01FX1dVTUUxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX01FX1dVTUUxX1NISUZUKSkgJiBMTFdVX01FX1dVTUUxX01BU0spCisjZGVmaW5lIExMV1VfTUVfV1VNRTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIExMV1VfTUVfV1VNRTJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBMTFdVX01FX1dVTUUyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfTUVfV1VNRTJfU0hJRlQpKSAmIExMV1VfTUVfV1VNRTJfTUFTSykKKyNkZWZpbmUgTExXVV9NRV9XVU1FM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIExMV1VfTUVfV1VNRTMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9NRV9XVU1FM19TSElGVCkpICYgTExXVV9NRV9XVU1FM19NQVNLKQorI2RlZmluZSBMTFdVX01FX1dVTUU0X01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FNF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIExMV1VfTUVfV1VNRTQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9NRV9XVU1FNF9TSElGVCkpICYgTExXVV9NRV9XVU1FNF9NQVNLKQorI2RlZmluZSBMTFdVX01FX1dVTUU1X01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FNV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIExMV1VfTUVfV1VNRTUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9NRV9XVU1FNV9TSElGVCkpICYgTExXVV9NRV9XVU1FNV9NQVNLKQorI2RlZmluZSBMTFdVX01FX1dVTUU2X01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FNl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIExMV1VfTUVfV1VNRTYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9NRV9XVU1FNl9TSElGVCkpICYgTExXVV9NRV9XVU1FNl9NQVNLKQorI2RlZmluZSBMTFdVX01FX1dVTUU3X01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FN19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIExMV1VfTUVfV1VNRTcoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9NRV9XVU1FN19TSElGVCkpICYgTExXVV9NRV9XVU1FN19NQVNLKQorCisvKiEgQG5hbWUgRjEgLSBMTFdVIEZsYWcgMSByZWdpc3RlciAqLworI2RlZmluZSBMTFdVX0YxX1dVRjBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBMTFdVX0YxX1dVRjBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTExXVV9GMV9XVUYwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YxX1dVRjBfU0hJRlQpKSAmIExMV1VfRjFfV1VGMF9NQVNLKQorI2RlZmluZSBMTFdVX0YxX1dVRjFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBMTFdVX0YxX1dVRjFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTExXVV9GMV9XVUYxKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YxX1dVRjFfU0hJRlQpKSAmIExMV1VfRjFfV1VGMV9NQVNLKQorI2RlZmluZSBMTFdVX0YxX1dVRjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBMTFdVX0YxX1dVRjJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTExXVV9GMV9XVUYyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YxX1dVRjJfU0hJRlQpKSAmIExMV1VfRjFfV1VGMl9NQVNLKQorI2RlZmluZSBMTFdVX0YxX1dVRjNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBMTFdVX0YxX1dVRjNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTExXVV9GMV9XVUYzKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YxX1dVRjNfU0hJRlQpKSAmIExMV1VfRjFfV1VGM19NQVNLKQorI2RlZmluZSBMTFdVX0YxX1dVRjRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgTExXVV9GMV9XVUY0X1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIExMV1VfRjFfV1VGNCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GMV9XVUY0X1NISUZUKSkgJiBMTFdVX0YxX1dVRjRfTUFTSykKKyNkZWZpbmUgTExXVV9GMV9XVUY1X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIExMV1VfRjFfV1VGNV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBMTFdVX0YxX1dVRjUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjFfV1VGNV9TSElGVCkpICYgTExXVV9GMV9XVUY1X01BU0spCisjZGVmaW5lIExMV1VfRjFfV1VGNl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBMTFdVX0YxX1dVRjZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTExXVV9GMV9XVUY2KHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YxX1dVRjZfU0hJRlQpKSAmIExMV1VfRjFfV1VGNl9NQVNLKQorI2RlZmluZSBMTFdVX0YxX1dVRjdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgTExXVV9GMV9XVUY3X1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIExMV1VfRjFfV1VGNyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GMV9XVUY3X1NISUZUKSkgJiBMTFdVX0YxX1dVRjdfTUFTSykKKworLyohIEBuYW1lIEYyIC0gTExXVSBGbGFnIDIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTExXVV9GMl9XVUY4X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTExXVV9GMl9XVUY4X1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExMV1VfRjJfV1VGOCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GMl9XVUY4X1NISUZUKSkgJiBMTFdVX0YyX1dVRjhfTUFTSykKKyNkZWZpbmUgTExXVV9GMl9XVUY5X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgTExXVV9GMl9XVUY5X1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIExMV1VfRjJfV1VGOSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GMl9XVUY5X1NISUZUKSkgJiBMTFdVX0YyX1dVRjlfTUFTSykKKyNkZWZpbmUgTExXVV9GMl9XVUYxMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgTExXVV9GMl9XVUYxMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIExMV1VfRjJfV1VGMTAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GMl9XVUYxMF9TSElGVCkpICYgTExXVV9GMl9XVUYxMF9NQVNLKQorI2RlZmluZSBMTFdVX0YyX1dVRjExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBMTFdVX0YyX1dVRjExX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTExXVV9GMl9XVUYxMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YyX1dVRjExX1NISUZUKSkgJiBMTFdVX0YyX1dVRjExX01BU0spCisjZGVmaW5lIExMV1VfRjJfV1VGMTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBMTFdVX0YyX1dVRjEyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgTExXVV9GMl9XVUYxMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YyX1dVRjEyX1NISUZUKSkgJiBMTFdVX0YyX1dVRjEyX01BU0spCisjZGVmaW5lIExMV1VfRjJfV1VGMTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBMTFdVX0YyX1dVRjEzX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgTExXVV9GMl9XVUYxMyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YyX1dVRjEzX1NISUZUKSkgJiBMTFdVX0YyX1dVRjEzX01BU0spCisjZGVmaW5lIExMV1VfRjJfV1VGMTRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBMTFdVX0YyX1dVRjE0X1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTExXVV9GMl9XVUYxNCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YyX1dVRjE0X1NISUZUKSkgJiBMTFdVX0YyX1dVRjE0X01BU0spCisjZGVmaW5lIExMV1VfRjJfV1VGMTVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBMTFdVX0YyX1dVRjE1X1NISUZUICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgTExXVV9GMl9XVUYxNSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YyX1dVRjE1X1NISUZUKSkgJiBMTFdVX0YyX1dVRjE1X01BU0spCisKKy8qISBAbmFtZSBGMyAtIExMV1UgRmxhZyAzIHJlZ2lzdGVyICovCisjZGVmaW5lIExMV1VfRjNfTVdVRjBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMTFdVX0YzX01XVUYwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjNfTVdVRjBfU0hJRlQpKSAmIExMV1VfRjNfTVdVRjBfTUFTSykKKyNkZWZpbmUgTExXVV9GM19NV1VGMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgTExXVV9GM19NV1VGMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GM19NV1VGMV9TSElGVCkpICYgTExXVV9GM19NV1VGMV9NQVNLKQorI2RlZmluZSBMTFdVX0YzX01XVUYyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBMTFdVX0YzX01XVUYyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTExXVV9GM19NV1VGMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YzX01XVUYyX1NISUZUKSkgJiBMTFdVX0YzX01XVUYyX01BU0spCisjZGVmaW5lIExMV1VfRjNfTVdVRjNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBMTFdVX0YzX01XVUYzKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjNfTVdVRjNfU0hJRlQpKSAmIExMV1VfRjNfTVdVRjNfTUFTSykKKyNkZWZpbmUgTExXVV9GM19NV1VGNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBMTFdVX0YzX01XVUY0KHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjNfTVdVRjRfU0hJRlQpKSAmIExMV1VfRjNfTVdVRjRfTUFTSykKKyNkZWZpbmUgTExXVV9GM19NV1VGNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBMTFdVX0YzX01XVUY1KHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjNfTVdVRjVfU0hJRlQpKSAmIExMV1VfRjNfTVdVRjVfTUFTSykKKyNkZWZpbmUgTExXVV9GM19NV1VGNl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBMTFdVX0YzX01XVUY2KHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjNfTVdVRjZfU0hJRlQpKSAmIExMV1VfRjNfTVdVRjZfTUFTSykKKyNkZWZpbmUgTExXVV9GM19NV1VGN19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBMTFdVX0YzX01XVUY3KHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjNfTVdVRjdfU0hJRlQpKSAmIExMV1VfRjNfTVdVRjdfTUFTSykKKworLyohIEBuYW1lIEZJTFQxIC0gTExXVSBQaW4gRmlsdGVyIDEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTExXVV9GSUxUMV9GSUxUU0VMX01BU0sgICAgICAgICAgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgTExXVV9GSUxUMV9GSUxUU0VMX1NISUZUICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExMV1VfRklMVDFfRklMVFNFTCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GSUxUMV9GSUxUU0VMX1NISUZUKSkgJiBMTFdVX0ZJTFQxX0ZJTFRTRUxfTUFTSykKKyNkZWZpbmUgTExXVV9GSUxUMV9GSUxURV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg2MFUpCisjZGVmaW5lIExMV1VfRklMVDFfRklMVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBMTFdVX0ZJTFQxX0ZJTFRFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRklMVDFfRklMVEVfU0hJRlQpKSAmIExMV1VfRklMVDFfRklMVEVfTUFTSykKKyNkZWZpbmUgTExXVV9GSUxUMV9GSUxURl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIExMV1VfRklMVDFfRklMVEZfU0hJRlQgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBMTFdVX0ZJTFQxX0ZJTFRGKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRklMVDFfRklMVEZfU0hJRlQpKSAmIExMV1VfRklMVDFfRklMVEZfTUFTSykKKworLyohIEBuYW1lIEZJTFQyIC0gTExXVSBQaW4gRmlsdGVyIDIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTExXVV9GSUxUMl9GSUxUU0VMX01BU0sgICAgICAgICAgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgTExXVV9GSUxUMl9GSUxUU0VMX1NISUZUICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExMV1VfRklMVDJfRklMVFNFTCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GSUxUMl9GSUxUU0VMX1NISUZUKSkgJiBMTFdVX0ZJTFQyX0ZJTFRTRUxfTUFTSykKKyNkZWZpbmUgTExXVV9GSUxUMl9GSUxURV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg2MFUpCisjZGVmaW5lIExMV1VfRklMVDJfRklMVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBMTFdVX0ZJTFQyX0ZJTFRFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRklMVDJfRklMVEVfU0hJRlQpKSAmIExMV1VfRklMVDJfRklMVEVfTUFTSykKKyNkZWZpbmUgTExXVV9GSUxUMl9GSUxURl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIExMV1VfRklMVDJfRklMVEZfU0hJRlQgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBMTFdVX0ZJTFQyX0ZJTFRGKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRklMVDJfRklMVEZfU0hJRlQpKSAmIExMV1VfRklMVDJfRklMVEZfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIExMV1VfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBMTFdVIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgTExXVSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgTExXVV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA3QzAwMHUpCisvKiogUGVyaXBoZXJhbCBMTFdVIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBMTFdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTExXVV9UeXBlICopTExXVV9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIExMV1UgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBMTFdVX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTExXVV9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBMTFdVIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBMTFdVX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTExXVSB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBMTFdVIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBMTFdVX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTExXVV9JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBMTFdVX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTFBUTVIgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBMUFRNUl9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBMUFRNUiBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogTFBUTVIgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IENTUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMb3cgUG93ZXIgVGltZXIgQ29udHJvbCBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgUFNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExvdyBQb3dlciBUaW1lciBQcmVzY2FsZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBDTVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTG93IFBvd2VyIFRpbWVyIENvbXBhcmUgUmVnaXN0ZXIsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDMyX3QgQ05SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExvdyBQb3dlciBUaW1lciBDb3VudGVyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworfSBMUFRNUl9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBMUFRNUiBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIExQVE1SX1JlZ2lzdGVyX01hc2tzIExQVE1SIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBDU1IgLSBMb3cgUG93ZXIgVGltZXIgQ29udHJvbCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFBUTVJfQ1NSX1RFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTFBUTVJfQ1NSX1RFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExQVE1SX0NTUl9URU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFRNUl9DU1JfVEVOX1NISUZUKSkgJiBMUFRNUl9DU1JfVEVOX01BU0spCisjZGVmaW5lIExQVE1SX0NTUl9UTVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIExQVE1SX0NTUl9UTVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBMUFRNUl9DU1JfVE1TKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBUTVJfQ1NSX1RNU19TSElGVCkpICYgTFBUTVJfQ1NSX1RNU19NQVNLKQorI2RlZmluZSBMUFRNUl9DU1JfVEZDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBMUFRNUl9DU1JfVEZDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTFBUTVJfQ1NSX1RGQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVE1SX0NTUl9URkNfU0hJRlQpKSAmIExQVE1SX0NTUl9URkNfTUFTSykKKyNkZWZpbmUgTFBUTVJfQ1NSX1RQUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgTFBUTVJfQ1NSX1RQUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIExQVE1SX0NTUl9UUFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFRNUl9DU1JfVFBQX1NISUZUKSkgJiBMUFRNUl9DU1JfVFBQX01BU0spCisjZGVmaW5lIExQVE1SX0NTUl9UUFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MzBVKQorI2RlZmluZSBMUFRNUl9DU1JfVFBTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgTFBUTVJfQ1NSX1RQUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVE1SX0NTUl9UUFNfU0hJRlQpKSAmIExQVE1SX0NTUl9UUFNfTUFTSykKKyNkZWZpbmUgTFBUTVJfQ1NSX1RJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIExQVE1SX0NTUl9USUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBMUFRNUl9DU1JfVElFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBUTVJfQ1NSX1RJRV9TSElGVCkpICYgTFBUTVJfQ1NSX1RJRV9NQVNLKQorI2RlZmluZSBMUFRNUl9DU1JfVENGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgTFBUTVJfQ1NSX1RDRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIExQVE1SX0NTUl9UQ0YoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFRNUl9DU1JfVENGX1NISUZUKSkgJiBMUFRNUl9DU1JfVENGX01BU0spCisKKy8qISBAbmFtZSBQU1IgLSBMb3cgUG93ZXIgVGltZXIgUHJlc2NhbGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFBUTVJfUFNSX1BDU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgTFBUTVJfUFNSX1BDU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExQVE1SX1BTUl9QQ1MoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFRNUl9QU1JfUENTX1NISUZUKSkgJiBMUFRNUl9QU1JfUENTX01BU0spCisjZGVmaW5lIExQVE1SX1BTUl9QQllQX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIExQVE1SX1BTUl9QQllQX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBMUFRNUl9QU1JfUEJZUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBUTVJfUFNSX1BCWVBfU0hJRlQpKSAmIExQVE1SX1BTUl9QQllQX01BU0spCisjZGVmaW5lIExQVE1SX1BTUl9QUkVTQ0FMRV9NQVNLICAgICAgICAgICAgICAgICAgKDB4NzhVKQorI2RlZmluZSBMUFRNUl9QU1JfUFJFU0NBTEVfU0hJRlQgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTFBUTVJfUFNSX1BSRVNDQUxFKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVE1SX1BTUl9QUkVTQ0FMRV9TSElGVCkpICYgTFBUTVJfUFNSX1BSRVNDQUxFX01BU0spCisKKy8qISBAbmFtZSBDTVIgLSBMb3cgUG93ZXIgVGltZXIgQ29tcGFyZSBSZWdpc3RlciAqLworI2RlZmluZSBMUFRNUl9DTVJfQ09NUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBMUFRNUl9DTVJfQ09NUEFSRV9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFBUTVJfQ01SX0NPTVBBUkUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVE1SX0NNUl9DT01QQVJFX1NISUZUKSkgJiBMUFRNUl9DTVJfQ09NUEFSRV9NQVNLKQorCisvKiEgQG5hbWUgQ05SIC0gTG93IFBvd2VyIFRpbWVyIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFBUTVJfQ05SX0NPVU5URVJfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgTFBUTVJfQ05SX0NPVU5URVJfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExQVE1SX0NOUl9DT1VOVEVSKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFRNUl9DTlJfQ09VTlRFUl9TSElGVCkpICYgTFBUTVJfQ05SX0NPVU5URVJfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIExQVE1SX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogTFBUTVIgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBMUFRNUjAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIExQVE1SMF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNDAwMDB1KQorLyoqIFBlcmlwaGVyYWwgTFBUTVIwIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBMUFRNUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTFBUTVJfVHlwZSAqKUxQVE1SMF9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgTFBUTVJfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICB7IExQVE1SMF9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBMUFRNUiBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgTFBUTVJfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICB7IExQVE1SMCB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBMUFRNUiBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgTFBUTVJfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IExQVE1SMF9JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBMUFRNUl9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIExQVUFSVCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIExQVUFSVF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBMUFVBUlQgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIExQVUFSVCAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgQkFVRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExQVUFSVCBCYXVkIFJhdGUgUmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgU1RBVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExQVUFSVCBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExQVUFSVCBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQzMl90IERBVEE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMUFVBUlQgRGF0YSBSZWdpc3Rlciwgb2Zmc2V0OiAweEMgKi8KKyAgX19JTyB1aW50MzJfdCBNQVRDSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTFBVQVJUIE1hdGNoIEFkZHJlc3MgUmVnaXN0ZXIsIG9mZnNldDogMHgxMCAqLworICBfX0lPIHVpbnQzMl90IE1PRElSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMUFVBUlQgTW9kZW0gSXJEQSBSZWdpc3Rlciwgb2Zmc2V0OiAweDE0ICovCit9IExQVUFSVF9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBMUFVBUlQgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBMUFVBUlRfUmVnaXN0ZXJfTWFza3MgTFBVQVJUIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBCQVVEIC0gTFBVQVJUIEJhdWQgUmF0ZSBSZWdpc3RlciAqLworI2RlZmluZSBMUFVBUlRfQkFVRF9TQlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDFGRkZVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9TQlJfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfU0JSKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9CQVVEX1NCUl9TSElGVCkpICYgTFBVQVJUX0JBVURfU0JSX01BU0spCisjZGVmaW5lIExQVUFSVF9CQVVEX1NCTlNfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MjAwMFUpCisjZGVmaW5lIExQVUFSVF9CQVVEX1NCTlNfU0hJRlQgICAgICAgICAgICAgICAgICAgKDEzVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfU0JOUyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9CQVVEX1NCTlNfU0hJRlQpKSAmIExQVUFSVF9CQVVEX1NCTlNfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0JBVURfUlhFREdJRV9NQVNLICAgICAgICAgICAgICAgICAoMHg0MDAwVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfUlhFREdJRV9TSElGVCAgICAgICAgICAgICAgICAoMTRVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9SWEVER0lFKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0JBVURfUlhFREdJRV9TSElGVCkpICYgTFBVQVJUX0JBVURfUlhFREdJRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQkFVRF9MQktESUVfTUFTSyAgICAgICAgICAgICAgICAgICgweDgwMDBVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9MQktESUVfU0hJRlQgICAgICAgICAgICAgICAgICgxNVUpCisjZGVmaW5lIExQVUFSVF9CQVVEX0xCS0RJRSh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQkFVRF9MQktESUVfU0hJRlQpKSAmIExQVUFSVF9CQVVEX0xCS0RJRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQkFVRF9SRVNZTkNESVNfTUFTSyAgICAgICAgICAgICAgICgweDEwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfUkVTWU5DRElTX1NISUZUICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9SRVNZTkNESVMoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0JBVURfUkVTWU5DRElTX1NISUZUKSkgJiBMUFVBUlRfQkFVRF9SRVNZTkNESVNfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0JBVURfQk9USEVER0VfTUFTSyAgICAgICAgICAgICAgICAoMHgyMDAwMFUpCisjZGVmaW5lIExQVUFSVF9CQVVEX0JPVEhFREdFX1NISUZUICAgICAgICAgICAgICAgKDE3VSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfQk9USEVER0UoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9CQVVEX0JPVEhFREdFX1NISUZUKSkgJiBMUFVBUlRfQkFVRF9CT1RIRURHRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQkFVRF9NQVRDRkdfTUFTSyAgICAgICAgICAgICAgICAgICgweEMwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfTUFUQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAoMThVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9NQVRDRkcoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0JBVURfTUFUQ0ZHX1NISUZUKSkgJiBMUFVBUlRfQkFVRF9NQVRDRkdfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0JBVURfUkRNQUVfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgyMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9SRE1BRV9TSElGVCAgICAgICAgICAgICAgICAgICgyMVUpCisjZGVmaW5lIExQVUFSVF9CQVVEX1JETUFFKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQkFVRF9SRE1BRV9TSElGVCkpICYgTFBVQVJUX0JBVURfUkRNQUVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0JBVURfVERNQUVfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9URE1BRV9TSElGVCAgICAgICAgICAgICAgICAgICgyM1UpCisjZGVmaW5lIExQVUFSVF9CQVVEX1RETUFFKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQkFVRF9URE1BRV9TSElGVCkpICYgTFBVQVJUX0JBVURfVERNQUVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0JBVURfT1NSX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgxRjAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9CQVVEX09TUl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfT1NSKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9CQVVEX09TUl9TSElGVCkpICYgTFBVQVJUX0JBVURfT1NSX01BU0spCisjZGVmaW5lIExQVUFSVF9CQVVEX00xMF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9NMTBfU0hJRlQgICAgICAgICAgICAgICAgICAgICgyOVUpCisjZGVmaW5lIExQVUFSVF9CQVVEX00xMCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQkFVRF9NMTBfU0hJRlQpKSAmIExQVUFSVF9CQVVEX00xMF9NQVNLKQorI2RlZmluZSBMUFVBUlRfQkFVRF9NQUVOMl9NQVNLICAgICAgICAgICAgICAgICAgICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfTUFFTjJfU0hJRlQgICAgICAgICAgICAgICAgICAoMzBVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9NQUVOMih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0JBVURfTUFFTjJfU0hJRlQpKSAmIExQVUFSVF9CQVVEX01BRU4yX01BU0spCisjZGVmaW5lIExQVUFSVF9CQVVEX01BRU4xX01BU0sgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9NQUVOMV9TSElGVCAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIExQVUFSVF9CQVVEX01BRU4xKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQkFVRF9NQUVOMV9TSElGVCkpICYgTFBVQVJUX0JBVURfTUFFTjFfTUFTSykKKworLyohIEBuYW1lIFNUQVQgLSBMUFVBUlQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIExQVUFSVF9TVEFUX01BMkZfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4NDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX01BMkZfU0hJRlQgICAgICAgICAgICAgICAgICAgKDE0VSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTUEyRih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX01BMkZfU0hJRlQpKSAmIExQVUFSVF9TVEFUX01BMkZfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTUExRl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTUExRl9TSElGVCAgICAgICAgICAgICAgICAgICAoMTVVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9NQTFGKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfTUExRl9TSElGVCkpICYgTFBVQVJUX1NUQVRfTUExRl9NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9QRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9QRih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfUEZfU0hJRlQpKSAmIExQVUFSVF9TVEFUX1BGX01BU0spCisjZGVmaW5lIExQVUFSVF9TVEFUX0ZFX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9GRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgxN1UpCisjZGVmaW5lIExQVUFSVF9TVEFUX0ZFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfU1RBVF9GRV9TSElGVCkpICYgTFBVQVJUX1NUQVRfRkVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX05GX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDE4VSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTkYoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX05GX1NISUZUKSkgJiBMUFVBUlRfU1RBVF9ORl9NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9PUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfT1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMTlVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9PUih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfT1JfU0hJRlQpKSAmIExQVUFSVF9TVEFUX09SX01BU0spCisjZGVmaW5lIExQVUFSVF9TVEFUX0lETEVfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfSURMRV9TSElGVCAgICAgICAgICAgICAgICAgICAoMjBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfSURMRV9TSElGVCkpICYgTFBVQVJUX1NUQVRfSURMRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9SRFJGX01BU0sgICAgICAgICAgICAgICAgICAgICgweDIwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX1JEUkZfU0hJRlQgICAgICAgICAgICAgICAgICAgKDIxVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUkRSRih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX1JEUkZfU0hJRlQpKSAmIExQVUFSVF9TVEFUX1JEUkZfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfVENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9UQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICgyMlUpCisjZGVmaW5lIExQVUFSVF9TVEFUX1RDKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfU1RBVF9UQ19TSElGVCkpICYgTFBVQVJUX1NUQVRfVENfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfVERSRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9URFJFX1NISUZUICAgICAgICAgICAgICAgICAgICgyM1UpCisjZGVmaW5lIExQVUFSVF9TVEFUX1REUkUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfU1RBVF9URFJFX1NISUZUKSkgJiBMUFVBUlRfU1RBVF9URFJFX01BU0spCisjZGVmaW5lIExQVUFSVF9TVEFUX1JBRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX1JBRl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUkFGKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX1JBRl9TSElGVCkpICYgTFBVQVJUX1NUQVRfUkFGX01BU0spCisjZGVmaW5lIExQVUFSVF9TVEFUX0xCS0RFX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX0xCS0RFX1NISUZUICAgICAgICAgICAgICAgICAgKDI1VSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTEJLREUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX0xCS0RFX1NISUZUKSkgJiBMUFVBUlRfU1RBVF9MQktERV9NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9CUksxM19NQVNLICAgICAgICAgICAgICAgICAgICgweDQwMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9CUksxM19TSElGVCAgICAgICAgICAgICAgICAgICgyNlUpCisjZGVmaW5lIExQVUFSVF9TVEFUX0JSSzEzKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfU1RBVF9CUksxM19TSElGVCkpICYgTFBVQVJUX1NUQVRfQlJLMTNfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUldVSURfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUldVSURfU0hJRlQgICAgICAgICAgICAgICAgICAoMjdVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9SV1VJRCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfUldVSURfU0hJRlQpKSAmIExQVUFSVF9TVEFUX1JXVUlEX01BU0spCisjZGVmaW5lIExQVUFSVF9TVEFUX1JYSU5WX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9SWElOVl9TSElGVCAgICAgICAgICAgICAgICAgICgyOFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX1JYSU5WKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfU1RBVF9SWElOVl9TSElGVCkpICYgTFBVQVJUX1NUQVRfUlhJTlZfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTVNCRl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX01TQkZfU0hJRlQgICAgICAgICAgICAgICAgICAgKDI5VSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTVNCRih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX01TQkZfU0hJRlQpKSAmIExQVUFSVF9TVEFUX01TQkZfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUlhFREdJRl9NQVNLICAgICAgICAgICAgICAgICAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX1JYRURHSUZfU0hJRlQgICAgICAgICAgICAgICAgKDMwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUlhFREdJRih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX1JYRURHSUZfU0hJRlQpKSAmIExQVUFSVF9TVEFUX1JYRURHSUZfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTEJLRElGX01BU0sgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX0xCS0RJRl9TSElGVCAgICAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTEJLRElGKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX0xCS0RJRl9TSElGVCkpICYgTFBVQVJUX1NUQVRfTEJLRElGX01BU0spCisKKy8qISBAbmFtZSBDVFJMIC0gTFBVQVJUIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFBVQVJUX0NUUkxfUFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1BUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9QVF9TSElGVCkpICYgTFBVQVJUX0NUUkxfUFRfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1BFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9QRV9TSElGVCkpICYgTFBVQVJUX0NUUkxfUEVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfSUxUX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfSUxUX1NISUZUICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIExQVUFSVF9DVFJMX0lMVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9JTFRfU0hJRlQpKSAmIExQVUFSVF9DVFJMX0lMVF9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9XQUtFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9XQUtFX1NISUZUICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfV0FLRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1dBS0VfU0hJRlQpKSAmIExQVUFSVF9DVFJMX1dBS0VfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX01fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9NKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfTV9TSElGVCkpICYgTFBVQVJUX0NUUkxfTV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9SU1JDX01BU0sgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUlNSQ19TSElGVCAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1JTUkMoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9SU1JDX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9SU1JDX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX0RPWkVFTl9NQVNLICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9ET1pFRU5fU0hJRlQgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfRE9aRUVOKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX0RPWkVFTl9TSElGVCkpICYgTFBVQVJUX0NUUkxfRE9aRUVOX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX0xPT1BTX01BU0sgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9MT09QU19TSElGVCAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfTE9PUFMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX0xPT1BTX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9MT09QU19NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9JRExFQ0ZHX01BU0sgICAgICAgICAgICAgICAgICgweDcwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX0lETEVDRkdfU0hJRlQgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9JRExFQ0ZHKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfSURMRUNGR19TSElGVCkpICYgTFBVQVJUX0NUUkxfSURMRUNGR19NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9NQTJJRV9NQVNLICAgICAgICAgICAgICAgICAgICgweDQwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9NQTJJRV9TSElGVCAgICAgICAgICAgICAgICAgICgxNFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX01BMklFKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9NQTJJRV9TSElGVCkpICYgTFBVQVJUX0NUUkxfTUEySUVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfTUExSUVfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfTUExSUVfU0hJRlQgICAgICAgICAgICAgICAgICAoMTVVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9NQTFJRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfTUExSUVfU0hJRlQpKSAmIExQVUFSVF9DVFJMX01BMUlFX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1NCS19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9TQktfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1NCSyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9TQktfU0hJRlQpKSAmIExQVUFSVF9DVFJMX1NCS19NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9SV1VfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUldVX1NISUZUICAgICAgICAgICAgICAgICAgICAoMTdVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9SV1UoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfUldVX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9SV1VfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1JFX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDE4VSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1JFX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9SRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9URV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMTlVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9URSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfVEVfU0hJRlQpKSAmIExQVUFSVF9DVFJMX1RFX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX0lMSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfSUxJRV9TSElGVCAgICAgICAgICAgICAgICAgICAoMjBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9JTElFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfSUxJRV9TSElGVCkpICYgTFBVQVJUX0NUUkxfSUxJRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9SSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDIwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1JJRV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDIxVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUklFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1JJRV9TSElGVCkpICYgTFBVQVJUX0NUUkxfUklFX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1RDSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfVENJRV9TSElGVCAgICAgICAgICAgICAgICAgICAoMjJVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9UQ0lFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfVENJRV9TSElGVCkpICYgTFBVQVJUX0NUUkxfVENJRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9USUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1RJRV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDIzVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfVElFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1RJRV9TSElGVCkpICYgTFBVQVJUX0NUUkxfVElFX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1BFSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1BFSUVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUEVJRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1BFSUVfU0hJRlQpKSAmIExQVUFSVF9DVFJMX1BFSUVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfRkVJRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfRkVJRV9TSElGVCAgICAgICAgICAgICAgICAgICAoMjVVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9GRUlFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfRkVJRV9TSElGVCkpICYgTFBVQVJUX0NUUkxfRkVJRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9ORUlFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDQwMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9ORUlFX1NISUZUICAgICAgICAgICAgICAgICAgICgyNlUpCisjZGVmaW5lIExQVUFSVF9DVFJMX05FSUUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9ORUlFX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9ORUlFX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX09SSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX09SSUVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDI3VSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfT1JJRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX09SSUVfU0hJRlQpKSAmIExQVUFSVF9DVFJMX09SSUVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfVFhJTlZfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1RYSU5WX1NISUZUICAgICAgICAgICAgICAgICAgKDI4VSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfVFhJTlYoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1RYSU5WX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9UWElOVl9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9UWERJUl9NQVNLICAgICAgICAgICAgICAgICAgICgweDIwMDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfVFhESVJfU0hJRlQgICAgICAgICAgICAgICAgICAoMjlVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9UWERJUih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfVFhESVJfU0hJRlQpKSAmIExQVUFSVF9DVFJMX1RYRElSX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1I5VDhfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9SOVQ4X1NISUZUICAgICAgICAgICAgICAgICAgICgzMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1I5VDgoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9SOVQ4X1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9SOVQ4X01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1I4VDlfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9SOFQ5X1NISUZUICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1I4VDkoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9SOFQ5X1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9SOFQ5X01BU0spCisKKy8qISBAbmFtZSBEQVRBIC0gTFBVQVJUIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjBUMF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjBUMF9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1IwVDAoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfREFUQV9SMFQwX1NISUZUKSkgJiBMUFVBUlRfREFUQV9SMFQwX01BU0spCisjZGVmaW5lIExQVUFSVF9EQVRBX1IxVDFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1IxVDFfU0hJRlQgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SMVQxKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0RBVEFfUjFUMV9TSElGVCkpICYgTFBVQVJUX0RBVEFfUjFUMV9NQVNLKQorI2RlZmluZSBMUFVBUlRfREFUQV9SMlQyX01BU0sgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SMlQyX1NISUZUICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjJUMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX1IyVDJfU0hJRlQpKSAmIExQVUFSVF9EQVRBX1IyVDJfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjNUM19NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjNUM19TSElGVCAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIExQVUFSVF9EQVRBX1IzVDMoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfREFUQV9SM1QzX1NISUZUKSkgJiBMUFVBUlRfREFUQV9SM1QzX01BU0spCisjZGVmaW5lIExQVUFSVF9EQVRBX1I0VDRfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SNFQ0X1NISUZUICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjRUNCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX1I0VDRfU0hJRlQpKSAmIExQVUFSVF9EQVRBX1I0VDRfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjVUNV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1I1VDVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SNVQ1KHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0RBVEFfUjVUNV9TSElGVCkpICYgTFBVQVJUX0RBVEFfUjVUNV9NQVNLKQorI2RlZmluZSBMUFVBUlRfREFUQV9SNlQ2X01BU0sgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjZUNl9TSElGVCAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1I2VDYoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfREFUQV9SNlQ2X1NISUZUKSkgJiBMUFVBUlRfREFUQV9SNlQ2X01BU0spCisjZGVmaW5lIExQVUFSVF9EQVRBX1I3VDdfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SN1Q3X1NISUZUICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjdUNyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX1I3VDdfU0hJRlQpKSAmIExQVUFSVF9EQVRBX1I3VDdfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjhUOF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SOFQ4X1NISUZUICAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjhUOCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX1I4VDhfU0hJRlQpKSAmIExQVUFSVF9EQVRBX1I4VDhfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjlUOV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyMDBVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SOVQ5X1NISUZUICAgICAgICAgICAgICAgICAgICg5VSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjlUOSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX1I5VDlfU0hJRlQpKSAmIExQVUFSVF9EQVRBX1I5VDlfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0RBVEFfSURMSU5FX01BU0sgICAgICAgICAgICAgICAgICAoMHg4MDBVKQorI2RlZmluZSBMUFVBUlRfREFUQV9JRExJTkVfU0hJRlQgICAgICAgICAgICAgICAgICgxMVUpCisjZGVmaW5lIExQVUFSVF9EQVRBX0lETElORSh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfREFUQV9JRExJTkVfU0hJRlQpKSAmIExQVUFSVF9EQVRBX0lETElORV9NQVNLKQorI2RlZmluZSBMUFVBUlRfREFUQV9SWEVNUFRfTUFTSyAgICAgICAgICAgICAgICAgICgweDEwMDBVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SWEVNUFRfU0hJRlQgICAgICAgICAgICAgICAgICgxMlUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1JYRU1QVCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfREFUQV9SWEVNUFRfU0hJRlQpKSAmIExQVUFSVF9EQVRBX1JYRU1QVF9NQVNLKQorI2RlZmluZSBMUFVBUlRfREFUQV9GUkVUU0NfTUFTSyAgICAgICAgICAgICAgICAgICgweDIwMDBVKQorI2RlZmluZSBMUFVBUlRfREFUQV9GUkVUU0NfU0hJRlQgICAgICAgICAgICAgICAgICgxM1UpCisjZGVmaW5lIExQVUFSVF9EQVRBX0ZSRVRTQyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfREFUQV9GUkVUU0NfU0hJRlQpKSAmIExQVUFSVF9EQVRBX0ZSRVRTQ19NQVNLKQorI2RlZmluZSBMUFVBUlRfREFUQV9QQVJJVFlFX01BU0sgICAgICAgICAgICAgICAgICgweDQwMDBVKQorI2RlZmluZSBMUFVBUlRfREFUQV9QQVJJVFlFX1NISUZUICAgICAgICAgICAgICAgICgxNFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1BBUklUWUUoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfREFUQV9QQVJJVFlFX1NISUZUKSkgJiBMUFVBUlRfREFUQV9QQVJJVFlFX01BU0spCisjZGVmaW5lIExQVUFSVF9EQVRBX05PSVNZX01BU0sgICAgICAgICAgICAgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX05PSVNZX1NISUZUICAgICAgICAgICAgICAgICAgKDE1VSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfTk9JU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX05PSVNZX1NISUZUKSkgJiBMUFVBUlRfREFUQV9OT0lTWV9NQVNLKQorCisvKiEgQG5hbWUgTUFUQ0ggLSBMUFVBUlQgTWF0Y2ggQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBMUFVBUlRfTUFUQ0hfTUExX01BU0sgICAgICAgICAgICAgICAgICAgICgweDNGRlUpCisjZGVmaW5lIExQVUFSVF9NQVRDSF9NQTFfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMUFVBUlRfTUFUQ0hfTUExKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX01BVENIX01BMV9TSElGVCkpICYgTFBVQVJUX01BVENIX01BMV9NQVNLKQorI2RlZmluZSBMUFVBUlRfTUFUQ0hfTUEyX01BU0sgICAgICAgICAgICAgICAgICAgICgweDNGRjAwMDBVKQorI2RlZmluZSBMUFVBUlRfTUFUQ0hfTUEyX1NISUZUICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIExQVUFSVF9NQVRDSF9NQTIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfTUFUQ0hfTUEyX1NISUZUKSkgJiBMUFVBUlRfTUFUQ0hfTUEyX01BU0spCisKKy8qISBAbmFtZSBNT0RJUiAtIExQVUFSVCBNb2RlbSBJckRBIFJlZ2lzdGVyICovCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UWENUU0VfTUFTSyAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UWENUU0VfU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVFhDVFNFKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX01PRElSX1RYQ1RTRV9TSElGVCkpICYgTFBVQVJUX01PRElSX1RYQ1RTRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVFhSVFNFX01BU0sgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVFhSVFNFX1NISUZUICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTFBVQVJUX01PRElSX1RYUlRTRSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9NT0RJUl9UWFJUU0VfU0hJRlQpKSAmIExQVUFSVF9NT0RJUl9UWFJUU0VfTUFTSykKKyNkZWZpbmUgTFBVQVJUX01PRElSX1RYUlRTUE9MX01BU0sgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgTFBVQVJUX01PRElSX1RYUlRTUE9MX1NISUZUICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UWFJUU1BPTCh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfTU9ESVJfVFhSVFNQT0xfU0hJRlQpKSAmIExQVUFSVF9NT0RJUl9UWFJUU1BPTF9NQVNLKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfUlhSVFNFX01BU0sgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfUlhSVFNFX1NISUZUICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTFBVQVJUX01PRElSX1JYUlRTRSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9NT0RJUl9SWFJUU0VfU0hJRlQpKSAmIExQVUFSVF9NT0RJUl9SWFJUU0VfTUFTSykKKyNkZWZpbmUgTFBVQVJUX01PRElSX1RYQ1RTQ19NQVNLICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UWENUU0NfU0hJRlQgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVFhDVFNDKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX01PRElSX1RYQ1RTQ19TSElGVCkpICYgTFBVQVJUX01PRElSX1RYQ1RTQ19NQVNLKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVFhDVFNTUkNfTUFTSyAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgTFBVQVJUX01PRElSX1RYQ1RTU1JDX1NISUZUICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UWENUU1NSQyh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfTU9ESVJfVFhDVFNTUkNfU0hJRlQpKSAmIExQVUFSVF9NT0RJUl9UWENUU1NSQ19NQVNLKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVE5QX01BU0sgICAgICAgICAgICAgICAgICAgICgweDMwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX01PRElSX1ROUF9TSElGVCAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVE5QKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX01PRElSX1ROUF9TSElGVCkpICYgTFBVQVJUX01PRElSX1ROUF9NQVNLKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfSVJFTl9NQVNLICAgICAgICAgICAgICAgICAgICgweDQwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX01PRElSX0lSRU5fU0hJRlQgICAgICAgICAgICAgICAgICAoMThVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfSVJFTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX01PRElSX0lSRU5fU0hJRlQpKSAmIExQVUFSVF9NT0RJUl9JUkVOX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBMUFVBUlRfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBMUFVBUlQgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBMUFVBUlQwIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBMUFVBUlQwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDU0MDAwdSkKKy8qKiBQZXJpcGhlcmFsIExQVUFSVDAgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIExQVUFSVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMUFVBUlRfVHlwZSAqKUxQVUFSVDBfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBMUFVBUlRfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgIHsgTFBVQVJUMF9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIExQVUFSVF9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgeyBMUFVBUlQwIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIExQVUFSVCBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgTFBVQVJUX1JYX1RYX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICB7IExQVUFSVDBfSVJRbiB9CisjZGVmaW5lIExQVUFSVF9FUlJfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBMUFVBUlQwX0lSUW4gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIExQVUFSVF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIExUQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIExUQ19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBMVEMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIExUQyAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgTUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1vZGUgUmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzRdOworICBfX0lPIHVpbnQzMl90IEtTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBLZXkgU2l6ZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDggKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbNF07CisgIF9fSU8gdWludDMyX3QgRFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERhdGEgU2l6ZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDEwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8yWzRdOworICBfX0lPIHVpbnQzMl90IElDVlM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJQ1YgU2l6ZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDE4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8zWzIwXTsKKyAgX19JTyB1aW50MzJfdCBDT007ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29tbWFuZCBSZWdpc3Rlciwgb2Zmc2V0OiAweDMwICovCisgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHgzNCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfNFs4XTsKKyAgX19JTyB1aW50MzJfdCBDVzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2xlYXIgV3JpdHRlbiBSZWdpc3Rlciwgb2Zmc2V0OiAweDQwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF81WzRdOworICBfX0lPIHVpbnQzMl90IFNUQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHg0OCAqLworICBfX0kgIHVpbnQzMl90IEVTVEE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFcnJvciBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHg0QyAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfNls4XTsKKyAgX19JTyB1aW50MzJfdCBBQURTWjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQUFEIFNpemUgUmVnaXN0ZXIsIG9mZnNldDogMHg1OCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfN1sxNjRdOworICBfX0lPIHVpbnQzMl90IENUWFsxNF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb250ZXh0IFJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4MTAwLCBhcnJheSBzdGVwOiAweDQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzhbMjAwXTsKKyAgX19JTyB1aW50MzJfdCBLRVlbNF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgS2V5IFJlZ2lzdGVycywgYXJyYXkgb2Zmc2V0OiAweDIwMCwgYXJyYXkgc3RlcDogMHg0ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF85WzczNl07CisgIF9fSSAgdWludDMyX3QgVklEMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFZlcnNpb24gSUQgUmVnaXN0ZXIsIG9mZnNldDogMHg0RjAgKi8KKyAgX19JICB1aW50MzJfdCBWSUQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVmVyc2lvbiBJRCAyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NEY0ICovCisgIF9fSSAgdWludDMyX3QgQ0hBVklEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENIQSBWZXJzaW9uIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NEY4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8xMFs3MDhdOworICBfX0kgIHVpbnQzMl90IEZJRk9TVEE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGSUZPIFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDdDMCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMTFbMjhdOworICBfX08gIHVpbnQzMl90IElGSUZPOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJbnB1dCBEYXRhIEZJRk8sIG9mZnNldDogMHg3RTAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzEyWzEyXTsKKyAgX19JICB1aW50MzJfdCBPRklGTzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgT3V0cHV0IERhdGEgRklGTywgb2Zmc2V0OiAweDdGMCAqLworfSBMVENfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTFRDIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTFRDX1JlZ2lzdGVyX01hc2tzIExUQyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgTUQgLSBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIExUQ19NRF9FTkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIExUQ19NRF9FTkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfTURfRU5DKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX01EX0VOQ19TSElGVCkpICYgTFRDX01EX0VOQ19NQVNLKQorI2RlZmluZSBMVENfTURfSUNWX1RFU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBMVENfTURfSUNWX1RFU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTFRDX01EX0lDVl9URVNUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19NRF9JQ1ZfVEVTVF9TSElGVCkpICYgTFRDX01EX0lDVl9URVNUX01BU0spCisjZGVmaW5lIExUQ19NRF9BU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4Q1UpCisjZGVmaW5lIExUQ19NRF9BU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBMVENfTURfQVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX01EX0FTX1NISUZUKSkgJiBMVENfTURfQVNfTUFTSykKKyNkZWZpbmUgTFRDX01EX0FBSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkYwVSkKKyNkZWZpbmUgTFRDX01EX0FBSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIExUQ19NRF9BQUkoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfTURfQUFJX1NISUZUKSkgJiBMVENfTURfQUFJX01BU0spCisjZGVmaW5lIExUQ19NRF9BTEdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgTFRDX01EX0FMR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBMVENfTURfQUxHKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX01EX0FMR19TSElGVCkpICYgTFRDX01EX0FMR19NQVNLKQorCisvKiEgQG5hbWUgS1MgLSBLZXkgU2l6ZSBSZWdpc3RlciAqLworI2RlZmluZSBMVENfS1NfS1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFGVSkKKyNkZWZpbmUgTFRDX0tTX0tTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExUQ19LU19LUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfS1NfS1NfU0hJRlQpKSAmIExUQ19LU19LU19NQVNLKQorCisvKiEgQG5hbWUgRFMgLSBEYXRhIFNpemUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRDX0RTX0RTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZVKQorI2RlZmluZSBMVENfRFNfRFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFRDX0RTX0RTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19EU19EU19TSElGVCkpICYgTFRDX0RTX0RTX01BU0spCisKKy8qISBAbmFtZSBJQ1ZTIC0gSUNWIFNpemUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRDX0lDVlNfSUNWU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxRlUpCisjZGVmaW5lIExUQ19JQ1ZTX0lDVlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfSUNWU19JQ1ZTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0lDVlNfSUNWU19TSElGVCkpICYgTFRDX0lDVlNfSUNWU19NQVNLKQorCisvKiEgQG5hbWUgQ09NIC0gQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBMVENfQ09NX0FMTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBMVENfQ09NX0FMTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFRDX0NPTV9BTEwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DT01fQUxMX1NISUZUKSkgJiBMVENfQ09NX0FMTF9NQVNLKQorI2RlZmluZSBMVENfQ09NX0FFU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBMVENfQ09NX0FFU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTFRDX0NPTV9BRVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DT01fQUVTX1NISUZUKSkgJiBMVENfQ09NX0FFU19NQVNLKQorCisvKiEgQG5hbWUgQ1RMIC0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBMVENfQ1RMX0lNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBMVENfQ1RMX0lNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFRDX0NUTF9JTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DVExfSU1fU0hJRlQpKSAmIExUQ19DVExfSU1fTUFTSykKKyNkZWZpbmUgTFRDX0NUTF9JRkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBMVENfQ1RMX0lGRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgTFRDX0NUTF9JRkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DVExfSUZFX1NISUZUKSkgJiBMVENfQ1RMX0lGRV9NQVNLKQorI2RlZmluZSBMVENfQ1RMX0lGUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIExUQ19DVExfSUZSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBMVENfQ1RMX0lGUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NUTF9JRlJfU0hJRlQpKSAmIExUQ19DVExfSUZSX01BU0spCisjZGVmaW5lIExUQ19DVExfT0ZFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIExUQ19DVExfT0ZFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgTFRDX0NUTF9PRkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DVExfT0ZFX1NISUZUKSkgJiBMVENfQ1RMX09GRV9NQVNLKQorI2RlZmluZSBMVENfQ1RMX09GUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDBVKQorI2RlZmluZSBMVENfQ1RMX09GUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgxM1UpCisjZGVmaW5lIExUQ19DVExfT0ZSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ1RMX09GUl9TSElGVCkpICYgTFRDX0NUTF9PRlJfTUFTSykKKyNkZWZpbmUgTFRDX0NUTF9JRlNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIExUQ19DVExfSUZTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgTFRDX0NUTF9JRlMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DVExfSUZTX1NISUZUKSkgJiBMVENfQ1RMX0lGU19NQVNLKQorI2RlZmluZSBMVENfQ1RMX09GU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgTFRDX0NUTF9PRlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMTdVKQorI2RlZmluZSBMVENfQ1RMX09GUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NUTF9PRlNfU0hJRlQpKSAmIExUQ19DVExfT0ZTX01BU0spCisjZGVmaW5lIExUQ19DVExfS0lTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgTFRDX0NUTF9LSVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMjBVKQorI2RlZmluZSBMVENfQ1RMX0tJUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NUTF9LSVNfU0hJRlQpKSAmIExUQ19DVExfS0lTX01BU0spCisjZGVmaW5lIExUQ19DVExfS09TX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwVSkKKyNkZWZpbmUgTFRDX0NUTF9LT1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMjFVKQorI2RlZmluZSBMVENfQ1RMX0tPUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NUTF9LT1NfU0hJRlQpKSAmIExUQ19DVExfS09TX01BU0spCisjZGVmaW5lIExUQ19DVExfQ0lTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwVSkKKyNkZWZpbmUgTFRDX0NUTF9DSVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMjJVKQorI2RlZmluZSBMVENfQ1RMX0NJUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NUTF9DSVNfU0hJRlQpKSAmIExUQ19DVExfQ0lTX01BU0spCisjZGVmaW5lIExUQ19DVExfQ09TX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgTFRDX0NUTF9DT1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMjNVKQorI2RlZmluZSBMVENfQ1RMX0NPUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NUTF9DT1NfU0hJRlQpKSAmIExUQ19DVExfQ09TX01BU0spCisjZGVmaW5lIExUQ19DVExfS0FMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBMVENfQ1RMX0tBTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIExUQ19DVExfS0FMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ1RMX0tBTF9TSElGVCkpICYgTFRDX0NUTF9LQUxfTUFTSykKKworLyohIEBuYW1lIENXIC0gQ2xlYXIgV3JpdHRlbiBSZWdpc3RlciAqLworI2RlZmluZSBMVENfQ1dfQ01fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBMVENfQ1dfQ01fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFRDX0NXX0NNKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DV19DTV9TSElGVCkpICYgTFRDX0NXX0NNX01BU0spCisjZGVmaW5lIExUQ19DV19DRFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIExUQ19DV19DRFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBMVENfQ1dfQ0RTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NXX0NEU19TSElGVCkpICYgTFRDX0NXX0NEU19NQVNLKQorI2RlZmluZSBMVENfQ1dfQ0lDVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBMVENfQ1dfQ0lDVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTFRDX0NXX0NJQ1YoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DV19DSUNWX1NISUZUKSkgJiBMVENfQ1dfQ0lDVl9NQVNLKQorI2RlZmluZSBMVENfQ1dfQ0NSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgTFRDX0NXX0NDUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIExUQ19DV19DQ1IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ1dfQ0NSX1NISUZUKSkgJiBMVENfQ1dfQ0NSX01BU0spCisjZGVmaW5lIExUQ19DV19DS1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBMVENfQ1dfQ0tSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTFRDX0NXX0NLUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DV19DS1JfU0hJRlQpKSAmIExUQ19DV19DS1JfTUFTSykKKyNkZWZpbmUgTFRDX0NXX0NPRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIExUQ19DV19DT0ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDMwVSkKKyNkZWZpbmUgTFRDX0NXX0NPRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DV19DT0ZfU0hJRlQpKSAmIExUQ19DV19DT0ZfTUFTSykKKyNkZWZpbmUgTFRDX0NXX0NJRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIExUQ19DV19DSUZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgTFRDX0NXX0NJRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DV19DSUZfU0hJRlQpKSAmIExUQ19DV19DSUZfTUFTSykKKworLyohIEBuYW1lIFNUQSAtIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBMVENfU1RBX0FCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBMVENfU1RBX0FCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTFRDX1NUQV9BQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19TVEFfQUJfU0hJRlQpKSAmIExUQ19TVEFfQUJfTUFTSykKKyNkZWZpbmUgTFRDX1NUQV9ESV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIExUQ19TVEFfRElfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgTFRDX1NUQV9ESSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19TVEFfRElfU0hJRlQpKSAmIExUQ19TVEFfRElfTUFTSykKKyNkZWZpbmUgTFRDX1NUQV9FSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBMVENfU1RBX0VJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgyMFUpCisjZGVmaW5lIExUQ19TVEFfRUkoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfU1RBX0VJX1NISUZUKSkgJiBMVENfU1RBX0VJX01BU0spCisKKy8qISBAbmFtZSBFU1RBIC0gRXJyb3IgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIExUQ19FU1RBX0VSUklEMV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RlUpCisjZGVmaW5lIExUQ19FU1RBX0VSUklEMV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfRVNUQV9FUlJJRDEoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0VTVEFfRVJSSUQxX1NISUZUKSkgJiBMVENfRVNUQV9FUlJJRDFfTUFTSykKKyNkZWZpbmUgTFRDX0VTVEFfQ0wxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGMDBVKQorI2RlZmluZSBMVENfRVNUQV9DTDFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgTFRDX0VTVEFfQ0wxKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19FU1RBX0NMMV9TSElGVCkpICYgTFRDX0VTVEFfQ0wxX01BU0spCisKKy8qISBAbmFtZSBBQURTWiAtIEFBRCBTaXplIFJlZ2lzdGVyICovCisjZGVmaW5lIExUQ19BQURTWl9BQURTWl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RlUpCisjZGVmaW5lIExUQ19BQURTWl9BQURTWl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfQUFEU1pfQUFEU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0FBRFNaX0FBRFNaX1NISUZUKSkgJiBMVENfQUFEU1pfQUFEU1pfTUFTSykKKyNkZWZpbmUgTFRDX0FBRFNaX0FMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIExUQ19BQURTWl9BTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgTFRDX0FBRFNaX0FMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19BQURTWl9BTF9TSElGVCkpICYgTFRDX0FBRFNaX0FMX01BU0spCisKKy8qISBAbmFtZSBDVFggLSBDb250ZXh0IFJlZ2lzdGVyICovCisjZGVmaW5lIExUQ19DVFhfQ1RYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBMVENfQ1RYX0NUWF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFRDX0NUWF9DVFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DVFhfQ1RYX1NISUZUKSkgJiBMVENfQ1RYX0NUWF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgTFRDX0NUWCAqLworI2RlZmluZSBMVENfQ1RYX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNFUpCisKKy8qISBAbmFtZSBLRVkgLSBLZXkgUmVnaXN0ZXJzICovCisjZGVmaW5lIExUQ19LRVlfS0VZX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBMVENfS0VZX0tFWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFRDX0tFWV9LRVkoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19LRVlfS0VZX1NISUZUKSkgJiBMVENfS0VZX0tFWV9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgTFRDX0tFWSAqLworI2RlZmluZSBMVENfS0VZX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKworLyohIEBuYW1lIFZJRDEgLSBWZXJzaW9uIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIExUQ19WSUQxX01JTl9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBMVENfVklEMV9NSU5fUkVWX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFRDX1ZJRDFfTUlOX1JFVih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19WSUQxX01JTl9SRVZfU0hJRlQpKSAmIExUQ19WSUQxX01JTl9SRVZfTUFTSykKKyNkZWZpbmUgTFRDX1ZJRDFfTUFKX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRjAwVSkKKyNkZWZpbmUgTFRDX1ZJRDFfTUFKX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIExUQ19WSUQxX01BSl9SRVYoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfVklEMV9NQUpfUkVWX1NISUZUKSkgJiBMVENfVklEMV9NQUpfUkVWX01BU0spCisjZGVmaW5lIExUQ19WSUQxX0lQX0lEX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBMVENfVklEMV9JUF9JRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIExUQ19WSUQxX0lQX0lEKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfVklEMV9JUF9JRF9TSElGVCkpICYgTFRDX1ZJRDFfSVBfSURfTUFTSykKKworLyohIEBuYW1lIFZJRDIgLSBWZXJzaW9uIElEIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRDX1ZJRDJfRUNPX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIExUQ19WSUQyX0VDT19SRVZfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfVklEMl9FQ09fUkVWKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX1ZJRDJfRUNPX1JFVl9TSElGVCkpICYgTFRDX1ZJRDJfRUNPX1JFVl9NQVNLKQorI2RlZmluZSBMVENfVklEMl9BUkNIX0VSQV9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGMDBVKQorI2RlZmluZSBMVENfVklEMl9BUkNIX0VSQV9TSElGVCAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgTFRDX1ZJRDJfQVJDSF9FUkEoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19WSUQyX0FSQ0hfRVJBX1NISUZUKSkgJiBMVENfVklEMl9BUkNIX0VSQV9NQVNLKQorCisvKiEgQG5hbWUgQ0hBVklEIC0gQ0hBIFZlcnNpb24gSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRDX0NIQVZJRF9BRVNSRVZfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgTFRDX0NIQVZJRF9BRVNSRVZfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExUQ19DSEFWSURfQUVTUkVWKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ0hBVklEX0FFU1JFVl9TSElGVCkpICYgTFRDX0NIQVZJRF9BRVNSRVZfTUFTSykKKyNkZWZpbmUgTFRDX0NIQVZJRF9BRVNWSURfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGMFUpCisjZGVmaW5lIExUQ19DSEFWSURfQUVTVklEX1NISUZUICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBMVENfQ0hBVklEX0FFU1ZJRCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NIQVZJRF9BRVNWSURfU0hJRlQpKSAmIExUQ19DSEFWSURfQUVTVklEX01BU0spCisKKy8qISBAbmFtZSBGSUZPU1RBIC0gRklGTyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRDX0ZJRk9TVEFfSUZMX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg3RlUpCisjZGVmaW5lIExUQ19GSUZPU1RBX0lGTF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfRklGT1NUQV9JRkwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0ZJRk9TVEFfSUZMX1NISUZUKSkgJiBMVENfRklGT1NUQV9JRkxfTUFTSykKKyNkZWZpbmUgTFRDX0ZJRk9TVEFfSUZGX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgTFRDX0ZJRk9TVEFfSUZGX1NISUZUICAgICAgICAgICAgICAgICAgICAoMTVVKQorI2RlZmluZSBMVENfRklGT1NUQV9JRkYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0ZJRk9TVEFfSUZGX1NISUZUKSkgJiBMVENfRklGT1NUQV9JRkZfTUFTSykKKyNkZWZpbmUgTFRDX0ZJRk9TVEFfT0ZMX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg3RjAwMDBVKQorI2RlZmluZSBMVENfRklGT1NUQV9PRkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIExUQ19GSUZPU1RBX09GTCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfRklGT1NUQV9PRkxfU0hJRlQpKSAmIExUQ19GSUZPU1RBX09GTF9NQVNLKQorI2RlZmluZSBMVENfRklGT1NUQV9PRkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgTFRDX0ZJRk9TVEFfT0ZGX1NISUZUICAgICAgICAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBMVENfRklGT1NUQV9PRkYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0ZJRk9TVEFfT0ZGX1NISUZUKSkgJiBMVENfRklGT1NUQV9PRkZfTUFTSykKKworLyohIEBuYW1lIElGSUZPIC0gSW5wdXQgRGF0YSBGSUZPICovCisjZGVmaW5lIExUQ19JRklGT19JRklGT19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBMVENfSUZJRk9fSUZJRk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFRDX0lGSUZPX0lGSUZPKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19JRklGT19JRklGT19TSElGVCkpICYgTFRDX0lGSUZPX0lGSUZPX01BU0spCisKKy8qISBAbmFtZSBPRklGTyAtIE91dHB1dCBEYXRhIEZJRk8gKi8KKyNkZWZpbmUgTFRDX09GSUZPX09GSUZPX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIExUQ19PRklGT19PRklGT19TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfT0ZJRk9fT0ZJRk8oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX09GSUZPX09GSUZPX1NISUZUKSkgJiBMVENfT0ZJRk9fT0ZJRk9fTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIExUQ19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIExUQyAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIExUQzAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIExUQzBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNTgwMDB1KQorLyoqIFBlcmlwaGVyYWwgTFRDMCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgTFRDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExUQ19UeXBlICopTFRDMF9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIExUQ19CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBMVEMwX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIExUQyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgTFRDX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IExUQzAgfQorLyoqIEludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgTFRDIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBMVENfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTFRDMF9JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBMVENfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBNQ0cgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBNQ0dfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgTUNHIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBNQ0cgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQ4X3QgQzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNQ0cgQ29udHJvbCAxIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQ4X3QgQzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNQ0cgQ29udHJvbCAyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MSAqLworICBfX0lPIHVpbnQ4X3QgQzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNQ0cgQ29udHJvbCAzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MiAqLworICBfX0lPIHVpbnQ4X3QgQzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNQ0cgQ29udHJvbCA0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MyAqLworICBfX0kgIHVpbnQ4X3QgQzU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNQ0cgQ29udHJvbCA1IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQ4X3QgQzY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNQ0cgQ29udHJvbCA2IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NSAqLworICBfX0kgIHVpbnQ4X3QgUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNQ0cgU3RhdHVzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NiAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFsxXTsKKyAgX19JTyB1aW50OF90IFNDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTUNHIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDggKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbMV07CisgIF9fSU8gdWludDhfdCBBVENWSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1DRyBBdXRvIFRyaW0gQ29tcGFyZSBWYWx1ZSBIaWdoIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QSAqLworICBfX0lPIHVpbnQ4X3QgQVRDVkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNQ0cgQXV0byBUcmltIENvbXBhcmUgVmFsdWUgTG93IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QiAqLworICBfX0lPIHVpbnQ4X3QgQzc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNQ0cgQ29udHJvbCA3IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworICBfX0lPIHVpbnQ4X3QgQzg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNQ0cgQ29udHJvbCA4IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RCAqLworfSBNQ0dfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTUNHIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTUNHX1JlZ2lzdGVyX01hc2tzIE1DRyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgQzEgLSBNQ0cgQ29udHJvbCAxIFJlZ2lzdGVyICovCisjZGVmaW5lIE1DR19DMV9JUkVGU1RFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIE1DR19DMV9JUkVGU1RFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ0dfQzFfSVJFRlNURU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DMV9JUkVGU1RFTl9TSElGVCkpICYgTUNHX0MxX0lSRUZTVEVOX01BU0spCisjZGVmaW5lIE1DR19DMV9JUkNMS0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIE1DR19DMV9JUkNMS0VOX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBNQ0dfQzFfSVJDTEtFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DMV9JUkNMS0VOX1NISUZUKSkgJiBNQ0dfQzFfSVJDTEtFTl9NQVNLKQorI2RlZmluZSBNQ0dfQzFfSVJFRlNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBNQ0dfQzFfSVJFRlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTUNHX0MxX0lSRUZTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzFfSVJFRlNfU0hJRlQpKSAmIE1DR19DMV9JUkVGU19NQVNLKQorI2RlZmluZSBNQ0dfQzFfRlJESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDM4VSkKKyNkZWZpbmUgTUNHX0MxX0ZSRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIE1DR19DMV9GUkRJVih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX0MxX0ZSRElWX1NISUZUKSkgJiBNQ0dfQzFfRlJESVZfTUFTSykKKyNkZWZpbmUgTUNHX0MxX0NMS1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhDMFUpCisjZGVmaW5lIE1DR19DMV9DTEtTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBNQ0dfQzFfQ0xLUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DMV9DTEtTX1NISUZUKSkgJiBNQ0dfQzFfQ0xLU19NQVNLKQorCisvKiEgQG5hbWUgQzIgLSBNQ0cgQ29udHJvbCAyIFJlZ2lzdGVyICovCisjZGVmaW5lIE1DR19DMl9JUkNTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIE1DR19DMl9JUkNTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ0dfQzJfSVJDUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DMl9JUkNTX1NISUZUKSkgJiBNQ0dfQzJfSVJDU19NQVNLKQorI2RlZmluZSBNQ0dfQzJfTFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBNQ0dfQzJfTFBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTUNHX0MyX0xQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzJfTFBfU0hJRlQpKSAmIE1DR19DMl9MUF9NQVNLKQorI2RlZmluZSBNQ0dfQzJfRVJFRlNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBNQ0dfQzJfRVJFRlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTUNHX0MyX0VSRUZTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzJfRVJFRlNfU0hJRlQpKSAmIE1DR19DMl9FUkVGU19NQVNLKQorI2RlZmluZSBNQ0dfQzJfSEdPX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBNQ0dfQzJfSEdPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTUNHX0MyX0hHTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzJfSEdPX1NISUZUKSkgJiBNQ0dfQzJfSEdPX01BU0spCisjZGVmaW5lIE1DR19DMl9SQU5HRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MzBVKQorI2RlZmluZSBNQ0dfQzJfUkFOR0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgTUNHX0MyX1JBTkdFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzJfUkFOR0VfU0hJRlQpKSAmIE1DR19DMl9SQU5HRV9NQVNLKQorI2RlZmluZSBNQ0dfQzJfRkNGVFJJTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgTUNHX0MyX0ZDRlRSSU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIE1DR19DMl9GQ0ZUUklNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX0MyX0ZDRlRSSU1fU0hJRlQpKSAmIE1DR19DMl9GQ0ZUUklNX01BU0spCisjZGVmaW5lIE1DR19DMl9MT0NSRTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBNQ0dfQzJfTE9DUkUwX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgTUNHX0MyX0xPQ1JFMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzJfTE9DUkUwX1NISUZUKSkgJiBNQ0dfQzJfTE9DUkUwX01BU0spCisKKy8qISBAbmFtZSBDMyAtIE1DRyBDb250cm9sIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNHX0MzX1NDVFJJTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIE1DR19DM19TQ1RSSU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ0dfQzNfU0NUUklNKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DM19TQ1RSSU1fU0hJRlQpKSAmIE1DR19DM19TQ1RSSU1fTUFTSykKKworLyohIEBuYW1lIEM0IC0gTUNHIENvbnRyb2wgNCBSZWdpc3RlciAqLworI2RlZmluZSBNQ0dfQzRfU0NGVFJJTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBNQ0dfQzRfU0NGVFJJTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTUNHX0M0X1NDRlRSSU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzRfU0NGVFJJTV9TSElGVCkpICYgTUNHX0M0X1NDRlRSSU1fTUFTSykKKyNkZWZpbmUgTUNHX0M0X0ZDVFJJTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxRVUpCisjZGVmaW5lIE1DR19DNF9GQ1RSSU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBNQ0dfQzRfRkNUUklNKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DNF9GQ1RSSU1fU0hJRlQpKSAmIE1DR19DNF9GQ1RSSU1fTUFTSykKKyNkZWZpbmUgTUNHX0M0X0RSU1RfRFJTX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg2MFUpCisjZGVmaW5lIE1DR19DNF9EUlNUX0RSU19TSElGVCAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBNQ0dfQzRfRFJTVF9EUlMoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DNF9EUlNUX0RSU19TSElGVCkpICYgTUNHX0M0X0RSU1RfRFJTX01BU0spCisjZGVmaW5lIE1DR19DNF9ETVgzMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBNQ0dfQzRfRE1YMzJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgTUNHX0M0X0RNWDMyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzRfRE1YMzJfU0hJRlQpKSAmIE1DR19DNF9ETVgzMl9NQVNLKQorCisvKiEgQG5hbWUgQzYgLSBNQ0cgQ29udHJvbCA2IFJlZ2lzdGVyICovCisjZGVmaW5lIE1DR19DNl9DTUUwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBNQ0dfQzZfQ01FMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgTUNHX0M2X0NNRTAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzZfQ01FMF9TSElGVCkpICYgTUNHX0M2X0NNRTBfTUFTSykKKworLyohIEBuYW1lIFMgLSBNQ0cgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1DR19TX0lSQ1NUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIE1DR19TX0lSQ1NUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ0dfU19JUkNTVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19TX0lSQ1NUX1NISUZUKSkgJiBNQ0dfU19JUkNTVF9NQVNLKQorI2RlZmluZSBNQ0dfU19PU0NJTklUMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBNQ0dfU19PU0NJTklUMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTUNHX1NfT1NDSU5JVDAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfU19PU0NJTklUMF9TSElGVCkpICYgTUNHX1NfT1NDSU5JVDBfTUFTSykKKyNkZWZpbmUgTUNHX1NfQ0xLU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhDVSkKKyNkZWZpbmUgTUNHX1NfQ0xLU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIE1DR19TX0NMS1NUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX1NfQ0xLU1RfU0hJRlQpKSAmIE1DR19TX0NMS1NUX01BU0spCisjZGVmaW5lIE1DR19TX0lSRUZTVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBNQ0dfU19JUkVGU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgTUNHX1NfSVJFRlNUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfU19JUkVGU1RfU0hJRlQpKSAmIE1DR19TX0lSRUZTVF9NQVNLKQorCisvKiEgQG5hbWUgU0MgLSBNQ0cgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1DR19TQ19MT0NTMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIE1DR19TQ19MT0NTMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ0dfU0NfTE9DUzAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19TQ19MT0NTMF9TSElGVCkpICYgTUNHX1NDX0xPQ1MwX01BU0spCisjZGVmaW5lIE1DR19TQ19GQ1JESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RVUpCisjZGVmaW5lIE1DR19TQ19GQ1JESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBNQ0dfU0NfRkNSRElWKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19TQ19GQ1JESVZfU0hJRlQpKSAmIE1DR19TQ19GQ1JESVZfTUFTSykKKyNkZWZpbmUgTUNHX1NDX0ZMVFBSU1JWX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIE1DR19TQ19GTFRQUlNSVl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBNQ0dfU0NfRkxUUFJTUlYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19TQ19GTFRQUlNSVl9TSElGVCkpICYgTUNHX1NDX0ZMVFBSU1JWX01BU0spCisjZGVmaW5lIE1DR19TQ19BVE1GX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBNQ0dfU0NfQVRNRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgTUNHX1NDX0FUTUYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfU0NfQVRNRl9TSElGVCkpICYgTUNHX1NDX0FUTUZfTUFTSykKKyNkZWZpbmUgTUNHX1NDX0FUTVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIE1DR19TQ19BVE1TX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBNQ0dfU0NfQVRNUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19TQ19BVE1TX1NISUZUKSkgJiBNQ0dfU0NfQVRNU19NQVNLKQorI2RlZmluZSBNQ0dfU0NfQVRNRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgTUNHX1NDX0FUTUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIE1DR19TQ19BVE1FKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX1NDX0FUTUVfU0hJRlQpKSAmIE1DR19TQ19BVE1FX01BU0spCisKKy8qISBAbmFtZSBBVENWSCAtIE1DRyBBdXRvIFRyaW0gQ29tcGFyZSBWYWx1ZSBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lIE1DR19BVENWSF9BVENWSF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBNQ0dfQVRDVkhfQVRDVkhfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTUNHX0FUQ1ZIX0FUQ1ZIKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQVRDVkhfQVRDVkhfU0hJRlQpKSAmIE1DR19BVENWSF9BVENWSF9NQVNLKQorCisvKiEgQG5hbWUgQVRDVkwgLSBNQ0cgQXV0byBUcmltIENvbXBhcmUgVmFsdWUgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lIE1DR19BVENWTF9BVENWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBNQ0dfQVRDVkxfQVRDVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTUNHX0FUQ1ZMX0FUQ1ZMKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQVRDVkxfQVRDVkxfU0hJRlQpKSAmIE1DR19BVENWTF9BVENWTF9NQVNLKQorCisvKiEgQG5hbWUgQzcgLSBNQ0cgQ29udHJvbCA3IFJlZ2lzdGVyICovCisjZGVmaW5lIE1DR19DN19PU0NTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIE1DR19DN19PU0NTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ0dfQzdfT1NDU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DN19PU0NTRUxfU0hJRlQpKSAmIE1DR19DN19PU0NTRUxfTUFTSykKKworLyohIEBuYW1lIEM4IC0gTUNHIENvbnRyb2wgOCBSZWdpc3RlciAqLworI2RlZmluZSBNQ0dfQzhfTE9DUzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBNQ0dfQzhfTE9DUzFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTUNHX0M4X0xPQ1MxKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzhfTE9DUzFfU0hJRlQpKSAmIE1DR19DOF9MT0NTMV9NQVNLKQorI2RlZmluZSBNQ0dfQzhfQ01FMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgTUNHX0M4X0NNRTFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIE1DR19DOF9DTUUxKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX0M4X0NNRTFfU0hJRlQpKSAmIE1DR19DOF9DTUUxX01BU0spCisjZGVmaW5lIE1DR19DOF9MT0NSRTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBNQ0dfQzhfTE9DUkUxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgTUNHX0M4X0xPQ1JFMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzhfTE9DUkUxX1NISUZUKSkgJiBNQ0dfQzhfTE9DUkUxX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBNQ0dfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBNQ0cgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBNQ0cgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIE1DR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNjQwMDB1KQorLyoqIFBlcmlwaGVyYWwgTUNHIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBNQ0cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUNHX1R5cGUgKilNQ0dfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBNQ0cgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBNQ0dfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTUNHX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIE1DRyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgTUNHX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IE1DRyB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBNQ0cgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIE1DR19JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBNQ0dfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgTUNHX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTUNNIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTUNNX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIE1DTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogTUNNIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbOF07CisgIF9fSSAgdWludDE2X3QgUExBU0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENyb3NzYmFyIFN3aXRjaCAoQVhCUykgU2xhdmUgQ29uZmlndXJhdGlvbiwgb2Zmc2V0OiAweDggKi8KKyAgX19JICB1aW50MTZfdCBQTEFNQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ3Jvc3NiYXIgU3dpdGNoIChBWEJTKSBNYXN0ZXIgQ29uZmlndXJhdGlvbiwgb2Zmc2V0OiAweEEgKi8KKyAgX19JTyB1aW50MzJfdCBQTEFDUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGxhdGZvcm0gQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweEMgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbNDhdOworICBfX0lPIHVpbnQzMl90IENQTzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb21wdXRlIE9wZXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NDAgKi8KK30gTUNNX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIE1DTSBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIE1DTV9SZWdpc3Rlcl9NYXNrcyBNQ00gUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFBMQVNDIC0gQ3Jvc3NiYXIgU3dpdGNoIChBWEJTKSBTbGF2ZSBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIE1DTV9QTEFTQ19BU0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBNQ01fUExBU0NfQVNDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTUNNX1BMQVNDX0FTQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IE1DTV9QTEFTQ19BU0NfU0hJRlQpKSAmIE1DTV9QTEFTQ19BU0NfTUFTSykKKworLyohIEBuYW1lIFBMQU1DIC0gQ3Jvc3NiYXIgU3dpdGNoIChBWEJTKSBNYXN0ZXIgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBNQ01fUExBTUNfQU1DX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTUNNX1BMQU1DX0FNQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1DTV9QTEFNQ19BTUMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBNQ01fUExBTUNfQU1DX1NISUZUKSkgJiBNQ01fUExBTUNfQU1DX01BU0spCisKKy8qISBAbmFtZSBQTEFDUiAtIFBsYXRmb3JtIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNNX1BMQUNSX0FSQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDBVKQorI2RlZmluZSBNQ01fUExBQ1JfQVJCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg5VSkKKyNkZWZpbmUgTUNNX1BMQUNSX0FSQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1DTV9QTEFDUl9BUkJfU0hJRlQpKSAmIE1DTV9QTEFDUl9BUkJfTUFTSykKKyNkZWZpbmUgTUNNX1BMQUNSX0NGQ0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0MDBVKQorI2RlZmluZSBNQ01fUExBQ1JfQ0ZDQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICgxMFUpCisjZGVmaW5lIE1DTV9QTEFDUl9DRkNDKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNQ01fUExBQ1JfQ0ZDQ19TSElGVCkpICYgTUNNX1BMQUNSX0NGQ0NfTUFTSykKKyNkZWZpbmUgTUNNX1BMQUNSX0RGQ0RBX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MDBVKQorI2RlZmluZSBNQ01fUExBQ1JfREZDREFfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxMVUpCisjZGVmaW5lIE1DTV9QTEFDUl9ERkNEQSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNQ01fUExBQ1JfREZDREFfU0hJRlQpKSAmIE1DTV9QTEFDUl9ERkNEQV9NQVNLKQorI2RlZmluZSBNQ01fUExBQ1JfREZDSUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDEwMDBVKQorI2RlZmluZSBNQ01fUExBQ1JfREZDSUNfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxMlUpCisjZGVmaW5lIE1DTV9QTEFDUl9ERkNJQyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNQ01fUExBQ1JfREZDSUNfU0hJRlQpKSAmIE1DTV9QTEFDUl9ERkNJQ19NQVNLKQorI2RlZmluZSBNQ01fUExBQ1JfREZDQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDIwMDBVKQorI2RlZmluZSBNQ01fUExBQ1JfREZDQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICgxM1UpCisjZGVmaW5lIE1DTV9QTEFDUl9ERkNDKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNQ01fUExBQ1JfREZDQ19TSElGVCkpICYgTUNNX1BMQUNSX0RGQ0NfTUFTSykKKyNkZWZpbmUgTUNNX1BMQUNSX0VGRFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwVSkKKyNkZWZpbmUgTUNNX1BMQUNSX0VGRFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMTRVKQorI2RlZmluZSBNQ01fUExBQ1JfRUZEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTUNNX1BMQUNSX0VGRFNfU0hJRlQpKSAmIE1DTV9QTEFDUl9FRkRTX01BU0spCisjZGVmaW5lIE1DTV9QTEFDUl9ERkNTX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIE1DTV9QTEFDUl9ERkNTX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDE1VSkKKyNkZWZpbmUgTUNNX1BMQUNSX0RGQ1MoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1DTV9QTEFDUl9ERkNTX1NISUZUKSkgJiBNQ01fUExBQ1JfREZDU19NQVNLKQorI2RlZmluZSBNQ01fUExBQ1JfRVNGQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwVSkKKyNkZWZpbmUgTUNNX1BMQUNSX0VTRkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBNQ01fUExBQ1JfRVNGQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTUNNX1BMQUNSX0VTRkNfU0hJRlQpKSAmIE1DTV9QTEFDUl9FU0ZDX01BU0spCisKKy8qISBAbmFtZSBDUE8gLSBDb21wdXRlIE9wZXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1DTV9DUE9fQ1BPUkVRX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIE1DTV9DUE9fQ1BPUkVRX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ01fQ1BPX0NQT1JFUSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTUNNX0NQT19DUE9SRVFfU0hJRlQpKSAmIE1DTV9DUE9fQ1BPUkVRX01BU0spCisjZGVmaW5lIE1DTV9DUE9fQ1BPQUNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIE1DTV9DUE9fQ1BPQUNLX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBNQ01fQ1BPX0NQT0FDSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTUNNX0NQT19DUE9BQ0tfU0hJRlQpKSAmIE1DTV9DUE9fQ1BPQUNLX01BU0spCisjZGVmaW5lIE1DTV9DUE9fQ1BPV09JX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIE1DTV9DUE9fQ1BPV09JX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBNQ01fQ1BPX0NQT1dPSSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTUNNX0NQT19DUE9XT0lfU0hJRlQpKSAmIE1DTV9DUE9fQ1BPV09JX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBNQ01fUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBNQ00gLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBNQ00gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIE1DTV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RjAwMDMwMDB1KQorLyoqIFBlcmlwaGVyYWwgTUNNIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBNQ00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUNNX1R5cGUgKilNQ01fQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBNQ00gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBNQ01fQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTUNNX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIE1DTSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgTUNNX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IE1DTSB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgTUNNX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTVRCIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTVRCX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIE1UQiBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogTVRCIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBQT1NJVElPTjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTVRCIFBvc2l0aW9uIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IE1BU1RFUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNVEIgTWFzdGVyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IEZMT1c7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNVEIgRmxvdyBSZWdpc3Rlciwgb2Zmc2V0OiAweDggKi8KKyAgX19JICB1aW50MzJfdCBfQkFTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1UQiBCYXNlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFszODI0XTsKKyAgX19JICB1aW50MzJfdCBNT0RFQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RjAwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8xWzE1Nl07CisgIF9fSSAgdWludDMyX3QgVEFHU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENsYWltIFRBRyBTZXQgUmVnaXN0ZXIsIG9mZnNldDogMHhGQTAgKi8KKyAgX19JICB1aW50MzJfdCBUQUdDTEVBUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2xhaW0gVEFHIENsZWFyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkE0ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8yWzhdOworICBfX0kgIHVpbnQzMl90IExPQ0tBQ0NFU1M7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMb2NrIEFjY2VzcyBSZWdpc3Rlciwgb2Zmc2V0OiAweEZCMCAqLworICBfX0kgIHVpbnQzMl90IExPQ0tTVEFUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMb2NrIFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweEZCNCAqLworICBfX0kgIHVpbnQzMl90IEFVVEhTVEFUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBdXRoZW50aWNhdGlvbiBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHhGQjggKi8KKyAgX19JICB1aW50MzJfdCBERVZJQ0VBUkNIOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGV2aWNlIEFyY2hpdGVjdHVyZSBSZWdpc3Rlciwgb2Zmc2V0OiAweEZCQyAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfM1s4XTsKKyAgX19JICB1aW50MzJfdCBERVZJQ0VDRkc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGV2aWNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIsIG9mZnNldDogMHhGQzggKi8KKyAgX19JICB1aW50MzJfdCBERVZJQ0VUWVBJRDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGV2aWNlIFR5cGUgSWRlbnRpZmllciBSZWdpc3Rlciwgb2Zmc2V0OiAweEZDQyAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElENDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkQwICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQ1OyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRDQgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDY7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZEOCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElENzsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkRDICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRTAgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZFNCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElEMjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkU4ICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRUMgKi8KKyAgX19JICB1aW50MzJfdCBDT01QSURbNF07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29tcG9uZW50IElEIFJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4RkYwLCBhcnJheSBzdGVwOiAweDQgKi8KK30gTVRCX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIE1UQiBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIE1UQl9SZWdpc3Rlcl9NYXNrcyBNVEIgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFBPU0lUSU9OIC0gTVRCIFBvc2l0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9QT1NJVElPTl9XUkFQX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIE1UQl9QT1NJVElPTl9XUkFQX1NISUZUICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBNVEJfUE9TSVRJT05fV1JBUCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX1BPU0lUSU9OX1dSQVBfU0hJRlQpKSAmIE1UQl9QT1NJVElPTl9XUkFQX01BU0spCisjZGVmaW5lIE1UQl9QT1NJVElPTl9QT0lOVEVSX01BU0sgICAgICAgICAgICAgICAgKDB4RkZGRkZGRjhVKQorI2RlZmluZSBNVEJfUE9TSVRJT05fUE9JTlRFUl9TSElGVCAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTVRCX1BPU0lUSU9OX1BPSU5URVIoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9QT1NJVElPTl9QT0lOVEVSX1NISUZUKSkgJiBNVEJfUE9TSVRJT05fUE9JTlRFUl9NQVNLKQorCisvKiEgQG5hbWUgTUFTVEVSIC0gTVRCIE1hc3RlciBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfTUFTVEVSX01BU0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDFGVSkKKyNkZWZpbmUgTVRCX01BU1RFUl9NQVNLX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9NQVNURVJfTUFTSyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfTUFTVEVSX01BU0tfU0hJRlQpKSAmIE1UQl9NQVNURVJfTUFTS19NQVNLKQorI2RlZmluZSBNVEJfTUFTVEVSX1RTVEFSVEVOX01BU0sgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgTVRCX01BU1RFUl9UU1RBUlRFTl9TSElGVCAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIE1UQl9NQVNURVJfVFNUQVJURU4oeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfTUFTVEVSX1RTVEFSVEVOX1NISUZUKSkgJiBNVEJfTUFTVEVSX1RTVEFSVEVOX01BU0spCisjZGVmaW5lIE1UQl9NQVNURVJfVFNUT1BFTl9NQVNLICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBNVEJfTUFTVEVSX1RTVE9QRU5fU0hJRlQgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTVRCX01BU1RFUl9UU1RPUEVOKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9NQVNURVJfVFNUT1BFTl9TSElGVCkpICYgTVRCX01BU1RFUl9UU1RPUEVOX01BU0spCisjZGVmaW5lIE1UQl9NQVNURVJfU0ZSV1BSSVZfTUFTSyAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBNVEJfTUFTVEVSX1NGUldQUklWX1NISUZUICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgTVRCX01BU1RFUl9TRlJXUFJJVih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9NQVNURVJfU0ZSV1BSSVZfU0hJRlQpKSAmIE1UQl9NQVNURVJfU0ZSV1BSSVZfTUFTSykKKyNkZWZpbmUgTVRCX01BU1RFUl9SQU1QUklWX01BU0sgICAgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBNVEJfTUFTVEVSX1JBTVBSSVZfU0hJRlQgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgTVRCX01BU1RFUl9SQU1QUklWKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9NQVNURVJfUkFNUFJJVl9TSElGVCkpICYgTVRCX01BU1RFUl9SQU1QUklWX01BU0spCisjZGVmaW5lIE1UQl9NQVNURVJfSEFMVFJFUV9NQVNLICAgICAgICAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgTVRCX01BU1RFUl9IQUxUUkVRX1NISUZUICAgICAgICAgICAgICAgICAoOVUpCisjZGVmaW5lIE1UQl9NQVNURVJfSEFMVFJFUSh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfTUFTVEVSX0hBTFRSRVFfU0hJRlQpKSAmIE1UQl9NQVNURVJfSEFMVFJFUV9NQVNLKQorI2RlZmluZSBNVEJfTUFTVEVSX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgTVRCX01BU1RFUl9FTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBNVEJfTUFTVEVSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX01BU1RFUl9FTl9TSElGVCkpICYgTVRCX01BU1RFUl9FTl9NQVNLKQorCisvKiEgQG5hbWUgRkxPVyAtIE1UQiBGbG93IFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9GTE9XX0FVVE9TVE9QX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIE1UQl9GTE9XX0FVVE9TVE9QX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfRkxPV19BVVRPU1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX0ZMT1dfQVVUT1NUT1BfU0hJRlQpKSAmIE1UQl9GTE9XX0FVVE9TVE9QX01BU0spCisjZGVmaW5lIE1UQl9GTE9XX0FVVE9IQUxUX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIE1UQl9GTE9XX0FVVE9IQUxUX1NISUZUICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBNVEJfRkxPV19BVVRPSEFMVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX0ZMT1dfQVVUT0hBTFRfU0hJRlQpKSAmIE1UQl9GTE9XX0FVVE9IQUxUX01BU0spCisjZGVmaW5lIE1UQl9GTE9XX1dBVEVSTUFSS19NQVNLICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRjhVKQorI2RlZmluZSBNVEJfRkxPV19XQVRFUk1BUktfU0hJRlQgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTVRCX0ZMT1dfV0FURVJNQVJLKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9GTE9XX1dBVEVSTUFSS19TSElGVCkpICYgTVRCX0ZMT1dfV0FURVJNQVJLX01BU0spCisKKy8qISBAbmFtZSBCQVNFIC0gTVRCIEJhc2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX0JBU0VfQkFTRUFERFJfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9CQVNFX0JBU0VBRERSX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfQkFTRV9CQVNFQUREUih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX0JBU0VfQkFTRUFERFJfU0hJRlQpKSAmIE1UQl9CQVNFX0JBU0VBRERSX01BU0spCisKKy8qISBAbmFtZSBNT0RFQ1RSTCAtIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfTU9ERUNUUkxfTU9ERUNUUkxfTUFTSyAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCX01PREVDVFJMX01PREVDVFJMX1NISUZUICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9NT0RFQ1RSTF9NT0RFQ1RSTCh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfTU9ERUNUUkxfTU9ERUNUUkxfU0hJRlQpKSAmIE1UQl9NT0RFQ1RSTF9NT0RFQ1RSTF9NQVNLKQorCisvKiEgQG5hbWUgVEFHU0VUIC0gQ2xhaW0gVEFHIFNldCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfVEFHU0VUX1RBR1NFVF9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCX1RBR1NFVF9UQUdTRVRfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9UQUdTRVRfVEFHU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfVEFHU0VUX1RBR1NFVF9TSElGVCkpICYgTVRCX1RBR1NFVF9UQUdTRVRfTUFTSykKKworLyohIEBuYW1lIFRBR0NMRUFSIC0gQ2xhaW0gVEFHIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9UQUdDTEVBUl9UQUdDTEVBUl9NQVNLICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfVEFHQ0xFQVJfVEFHQ0xFQVJfU0hJRlQgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX1RBR0NMRUFSX1RBR0NMRUFSKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9UQUdDTEVBUl9UQUdDTEVBUl9TSElGVCkpICYgTVRCX1RBR0NMRUFSX1RBR0NMRUFSX01BU0spCisKKy8qISBAbmFtZSBMT0NLQUNDRVNTIC0gTG9jayBBY2Nlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX0xPQ0tBQ0NFU1NfTE9DS0FDQ0VTU19NQVNLICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9MT0NLQUNDRVNTX0xPQ0tBQ0NFU1NfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfTE9DS0FDQ0VTU19MT0NLQUNDRVNTKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX0xPQ0tBQ0NFU1NfTE9DS0FDQ0VTU19TSElGVCkpICYgTVRCX0xPQ0tBQ0NFU1NfTE9DS0FDQ0VTU19NQVNLKQorCisvKiEgQG5hbWUgTE9DS1NUQVQgLSBMb2NrIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfTE9DS1NUQVRfTE9DS1NUQVRfTUFTSyAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCX0xPQ0tTVEFUX0xPQ0tTVEFUX1NISUZUICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9MT0NLU1RBVF9MT0NLU1RBVCh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfTE9DS1NUQVRfTE9DS1NUQVRfU0hJRlQpKSAmIE1UQl9MT0NLU1RBVF9MT0NLU1RBVF9NQVNLKQorCisvKiEgQG5hbWUgQVVUSFNUQVQgLSBBdXRoZW50aWNhdGlvbiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDBfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDBfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9BVVRIU1RBVF9CSVQwKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfQVVUSFNUQVRfQklUMF9TSElGVCkpICYgTVRCX0FVVEhTVEFUX0JJVDBfTUFTSykKKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDFfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDFfU0hJRlQgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIE1UQl9BVVRIU1RBVF9CSVQxKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfQVVUSFNUQVRfQklUMV9TSElGVCkpICYgTVRCX0FVVEhTVEFUX0JJVDFfTUFTSykKKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDJfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDJfU0hJRlQgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIE1UQl9BVVRIU1RBVF9CSVQyKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfQVVUSFNUQVRfQklUMl9TSElGVCkpICYgTVRCX0FVVEhTVEFUX0JJVDJfTUFTSykKKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDNfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDNfU0hJRlQgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIE1UQl9BVVRIU1RBVF9CSVQzKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfQVVUSFNUQVRfQklUM19TSElGVCkpICYgTVRCX0FVVEhTVEFUX0JJVDNfTUFTSykKKworLyohIEBuYW1lIERFVklDRUFSQ0ggLSBEZXZpY2UgQXJjaGl0ZWN0dXJlIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9ERVZJQ0VBUkNIX0RFVklDRUFSQ0hfTUFTSyAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfREVWSUNFQVJDSF9ERVZJQ0VBUkNIX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX0RFVklDRUFSQ0hfREVWSUNFQVJDSCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9ERVZJQ0VBUkNIX0RFVklDRUFSQ0hfU0hJRlQpKSAmIE1UQl9ERVZJQ0VBUkNIX0RFVklDRUFSQ0hfTUFTSykKKworLyohIEBuYW1lIERFVklDRUNGRyAtIERldmljZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9ERVZJQ0VDRkdfREVWSUNFQ0ZHX01BU0sgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfREVWSUNFQ0ZHX0RFVklDRUNGR19TSElGVCAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX0RFVklDRUNGR19ERVZJQ0VDRkcoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9ERVZJQ0VDRkdfREVWSUNFQ0ZHX1NISUZUKSkgJiBNVEJfREVWSUNFQ0ZHX0RFVklDRUNGR19NQVNLKQorCisvKiEgQG5hbWUgREVWSUNFVFlQSUQgLSBEZXZpY2UgVHlwZSBJZGVudGlmaWVyIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9ERVZJQ0VUWVBJRF9ERVZJQ0VUWVBJRF9NQVNLICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfREVWSUNFVFlQSURfREVWSUNFVFlQSURfU0hJRlQgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX0RFVklDRVRZUElEX0RFVklDRVRZUElEKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9ERVZJQ0VUWVBJRF9ERVZJQ0VUWVBJRF9TSElGVCkpICYgTVRCX0RFVklDRVRZUElEX0RFVklDRVRZUElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDQgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9QRVJJUEhJRDRfUEVSSVBISURfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfUEVSSVBISUQ0X1BFUklQSElEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX1BFUklQSElENF9QRVJJUEhJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9QRVJJUEhJRDRfUEVSSVBISURfU0hJRlQpKSAmIE1UQl9QRVJJUEhJRDRfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElENSAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX1BFUklQSElENV9QRVJJUEhJRF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9QRVJJUEhJRDVfUEVSSVBISURfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfUEVSSVBISUQ1X1BFUklQSElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX1BFUklQSElENV9QRVJJUEhJRF9TSElGVCkpICYgTVRCX1BFUklQSElENV9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQ2IC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfUEVSSVBISUQ2X1BFUklQSElEX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCX1BFUklQSElENl9QRVJJUEhJRF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9QRVJJUEhJRDZfUEVSSVBISUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfUEVSSVBISUQ2X1BFUklQSElEX1NISUZUKSkgJiBNVEJfUEVSSVBISUQ2X1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDcgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9QRVJJUEhJRDdfUEVSSVBISURfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfUEVSSVBISUQ3X1BFUklQSElEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX1BFUklQSElEN19QRVJJUEhJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9QRVJJUEhJRDdfUEVSSVBISURfU0hJRlQpKSAmIE1UQl9QRVJJUEhJRDdfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElEMCAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX1BFUklQSElEMF9QRVJJUEhJRF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9QRVJJUEhJRDBfUEVSSVBISURfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfUEVSSVBISUQwX1BFUklQSElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX1BFUklQSElEMF9QRVJJUEhJRF9TSElGVCkpICYgTVRCX1BFUklQSElEMF9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQxIC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfUEVSSVBISUQxX1BFUklQSElEX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCX1BFUklQSElEMV9QRVJJUEhJRF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9QRVJJUEhJRDFfUEVSSVBISUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfUEVSSVBISUQxX1BFUklQSElEX1NISUZUKSkgJiBNVEJfUEVSSVBISUQxX1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDIgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9QRVJJUEhJRDJfUEVSSVBISURfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfUEVSSVBISUQyX1BFUklQSElEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX1BFUklQSElEMl9QRVJJUEhJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9QRVJJUEhJRDJfUEVSSVBISURfU0hJRlQpKSAmIE1UQl9QRVJJUEhJRDJfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElEMyAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX1BFUklQSElEM19QRVJJUEhJRF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9QRVJJUEhJRDNfUEVSSVBISURfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfUEVSSVBISUQzX1BFUklQSElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX1BFUklQSElEM19QRVJJUEhJRF9TSElGVCkpICYgTVRCX1BFUklQSElEM19QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgQ09NUElEIC0gQ29tcG9uZW50IElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9DT01QSURfQ09NUElEX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfQ09NUElEX0NPTVBJRF9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX0NPTVBJRF9DT01QSUQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9DT01QSURfQ09NUElEX1NISUZUKSkgJiBNVEJfQ09NUElEX0NPTVBJRF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgTVRCX0NPTVBJRCAqLworI2RlZmluZSBNVEJfQ09NUElEX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIE1UQl9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIE1UQiAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIE1UQiBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgTVRCX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMDAwMHUpCisvKiogUGVyaXBoZXJhbCBNVEIgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIE1UQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNVEJfVHlwZSAqKU1UQl9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIE1UQiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIE1UQl9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBNVEJfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTVRCIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBNVEJfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTVRCIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBNVEJfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBNVEJEV1QgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBNVEJEV1RfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgTVRCRFdUIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBNVEJEV1QgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0kgIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNVEIgRFdUIENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzI4XTsKKyAgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldDogMHgyMCwgYXJyYXkgc3RlcDogMHgxMCAqLworICAgIF9fSU8gdWludDMyX3QgQ09NUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1UQl9EV1QgQ29tcGFyYXRvciBSZWdpc3RlciwgYXJyYXkgb2Zmc2V0OiAweDIwLCBhcnJheSBzdGVwOiAweDEwICovCisgICAgX19JTyB1aW50MzJfdCBNQVNLOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTVRCX0RXVCBDb21wYXJhdG9yIE1hc2sgUmVnaXN0ZXIsIGFycmF5IG9mZnNldDogMHgyNCwgYXJyYXkgc3RlcDogMHgxMCAqLworICAgIF9fSU8gdWludDMyX3QgRkNUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1UQl9EV1QgQ29tcGFyYXRvciBGdW5jdGlvbiBSZWdpc3RlciAwLi5NVEJfRFdUIENvbXBhcmF0b3IgRnVuY3Rpb24gUmVnaXN0ZXIgMSwgYXJyYXkgb2Zmc2V0OiAweDI4LCBhcnJheSBzdGVwOiAweDEwICovCisgICAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbNF07CisgIH0gQ09NUEFSQVRPUlsyXTsKKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbNDQ4XTsKKyAgX19JTyB1aW50MzJfdCBUQkNUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTVRCX0RXVCBUcmFjZSBCdWZmZXIgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDIwMCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMlszNTI0XTsKKyAgX19JICB1aW50MzJfdCBERVZJQ0VDRkc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGV2aWNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIsIG9mZnNldDogMHhGQzggKi8KKyAgX19JICB1aW50MzJfdCBERVZJQ0VUWVBJRDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGV2aWNlIFR5cGUgSWRlbnRpZmllciBSZWdpc3Rlciwgb2Zmc2V0OiAweEZDQyAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElENDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkQwICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQ1OyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRDQgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDY7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZEOCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElENzsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkRDICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRTAgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZFNCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElEMjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkU4ICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRUMgKi8KKyAgX19JICB1aW50MzJfdCBDT01QSURbNF07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29tcG9uZW50IElEIFJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4RkYwLCBhcnJheSBzdGVwOiAweDQgKi8KK30gTVRCRFdUX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIE1UQkRXVCBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIE1UQkRXVF9SZWdpc3Rlcl9NYXNrcyBNVEJEV1QgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIENUUkwgLSBNVEIgRFdUIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCRFdUX0NUUkxfRFdUQ0ZHQ1RSTF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGVSkKKyNkZWZpbmUgTVRCRFdUX0NUUkxfRFdUQ0ZHQ1RSTF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQkRXVF9DVFJMX0RXVENGR0NUUkwoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJEV1RfQ1RSTF9EV1RDRkdDVFJMX1NISUZUKSkgJiBNVEJEV1RfQ1RSTF9EV1RDRkdDVFJMX01BU0spCisjZGVmaW5lIE1UQkRXVF9DVFJMX05VTUNNUF9NQVNLICAgICAgICAgICAgICAgICAgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBNVEJEV1RfQ1RSTF9OVU1DTVBfU0hJRlQgICAgICAgICAgICAgICAgICgyOFUpCisjZGVmaW5lIE1UQkRXVF9DVFJMX05VTUNNUCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJEV1RfQ1RSTF9OVU1DTVBfU0hJRlQpKSAmIE1UQkRXVF9DVFJMX05VTUNNUF9NQVNLKQorCisvKiEgQG5hbWUgQ09NUCAtIE1UQl9EV1QgQ29tcGFyYXRvciBSZWdpc3RlciAqLworI2RlZmluZSBNVEJEV1RfQ09NUF9DT01QX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCRFdUX0NPTVBfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQkRXVF9DT01QX0NPTVAoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJEV1RfQ09NUF9DT01QX1NISUZUKSkgJiBNVEJEV1RfQ09NUF9DT01QX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBNVEJEV1RfQ09NUCAqLworI2RlZmluZSBNVEJEV1RfQ09NUF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKworLyohIEBuYW1lIE1BU0sgLSBNVEJfRFdUIENvbXBhcmF0b3IgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBNVEJEV1RfTUFTS19NQVNLX01BU0sgICAgICAgICAgICAgICAgICAgICgweDFGVSkKKyNkZWZpbmUgTVRCRFdUX01BU0tfTUFTS19TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQkRXVF9NQVNLX01BU0soeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJEV1RfTUFTS19NQVNLX1NISUZUKSkgJiBNVEJEV1RfTUFTS19NQVNLX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBNVEJEV1RfTUFTSyAqLworI2RlZmluZSBNVEJEV1RfTUFTS19DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKworLyohIEBuYW1lIEZDVCAtIE1UQl9EV1QgQ29tcGFyYXRvciBGdW5jdGlvbiBSZWdpc3RlciAwLi5NVEJfRFdUIENvbXBhcmF0b3IgRnVuY3Rpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSBNVEJEV1RfRkNUX0ZVTkNUSU9OX01BU0sgICAgICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBNVEJEV1RfRkNUX0ZVTkNUSU9OX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX0ZDVF9GVU5DVElPTih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9GQ1RfRlVOQ1RJT05fU0hJRlQpKSAmIE1UQkRXVF9GQ1RfRlVOQ1RJT05fTUFTSykKKyNkZWZpbmUgTVRCRFdUX0ZDVF9EQVRBVk1BVENIX01BU0sgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBNVEJEV1RfRkNUX0RBVEFWTUFUQ0hfU0hJRlQgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgTVRCRFdUX0ZDVF9EQVRBVk1BVENIKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9GQ1RfREFUQVZNQVRDSF9TSElGVCkpICYgTVRCRFdUX0ZDVF9EQVRBVk1BVENIX01BU0spCisjZGVmaW5lIE1UQkRXVF9GQ1RfREFUQVZTSVpFX01BU0sgICAgICAgICAgICAgICAgKDB4QzAwVSkKKyNkZWZpbmUgTVRCRFdUX0ZDVF9EQVRBVlNJWkVfU0hJRlQgICAgICAgICAgICAgICAoMTBVKQorI2RlZmluZSBNVEJEV1RfRkNUX0RBVEFWU0laRSh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX0ZDVF9EQVRBVlNJWkVfU0hJRlQpKSAmIE1UQkRXVF9GQ1RfREFUQVZTSVpFX01BU0spCisjZGVmaW5lIE1UQkRXVF9GQ1RfREFUQVZBRERSMF9NQVNLICAgICAgICAgICAgICAgKDB4RjAwMFUpCisjZGVmaW5lIE1UQkRXVF9GQ1RfREFUQVZBRERSMF9TSElGVCAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgTVRCRFdUX0ZDVF9EQVRBVkFERFIwKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9GQ1RfREFUQVZBRERSMF9TSElGVCkpICYgTVRCRFdUX0ZDVF9EQVRBVkFERFIwX01BU0spCisjZGVmaW5lIE1UQkRXVF9GQ1RfTUFUQ0hFRF9NQVNLICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIE1UQkRXVF9GQ1RfTUFUQ0hFRF9TSElGVCAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgTVRCRFdUX0ZDVF9NQVRDSEVEKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9GQ1RfTUFUQ0hFRF9TSElGVCkpICYgTVRCRFdUX0ZDVF9NQVRDSEVEX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBNVEJEV1RfRkNUICovCisjZGVmaW5lIE1UQkRXVF9GQ1RfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorCisvKiEgQG5hbWUgVEJDVFJMIC0gTVRCX0RXVCBUcmFjZSBCdWZmZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJEV1RfVEJDVFJMX0FDT01QMF9NQVNLICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBNVEJEV1RfVEJDVFJMX0FDT01QMF9TSElGVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX1RCQ1RSTF9BQ09NUDAoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9UQkNUUkxfQUNPTVAwX1NISUZUKSkgJiBNVEJEV1RfVEJDVFJMX0FDT01QMF9NQVNLKQorI2RlZmluZSBNVEJEV1RfVEJDVFJMX0FDT01QMV9NQVNLICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBNVEJEV1RfVEJDVFJMX0FDT01QMV9TSElGVCAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTVRCRFdUX1RCQ1RSTF9BQ09NUDEoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9UQkNUUkxfQUNPTVAxX1NISUZUKSkgJiBNVEJEV1RfVEJDVFJMX0FDT01QMV9NQVNLKQorI2RlZmluZSBNVEJEV1RfVEJDVFJMX05VTUNPTVBfTUFTSyAgICAgICAgICAgICAgICgweEYwMDAwMDAwVSkKKyNkZWZpbmUgTVRCRFdUX1RCQ1RSTF9OVU1DT01QX1NISUZUICAgICAgICAgICAgICAoMjhVKQorI2RlZmluZSBNVEJEV1RfVEJDVFJMX05VTUNPTVAoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX1RCQ1RSTF9OVU1DT01QX1NISUZUKSkgJiBNVEJEV1RfVEJDVFJMX05VTUNPTVBfTUFTSykKKworLyohIEBuYW1lIERFVklDRUNGRyAtIERldmljZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQkRXVF9ERVZJQ0VDRkdfREVWSUNFQ0ZHX01BU0sgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJEV1RfREVWSUNFQ0ZHX0RFVklDRUNGR19TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX0RFVklDRUNGR19ERVZJQ0VDRkcoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9ERVZJQ0VDRkdfREVWSUNFQ0ZHX1NISUZUKSkgJiBNVEJEV1RfREVWSUNFQ0ZHX0RFVklDRUNGR19NQVNLKQorCisvKiEgQG5hbWUgREVWSUNFVFlQSUQgLSBEZXZpY2UgVHlwZSBJZGVudGlmaWVyIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQkRXVF9ERVZJQ0VUWVBJRF9ERVZJQ0VUWVBJRF9NQVNLICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJEV1RfREVWSUNFVFlQSURfREVWSUNFVFlQSURfU0hJRlQgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX0RFVklDRVRZUElEX0RFVklDRVRZUElEKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9ERVZJQ0VUWVBJRF9ERVZJQ0VUWVBJRF9TSElGVCkpICYgTVRCRFdUX0RFVklDRVRZUElEX0RFVklDRVRZUElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDQgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDRfUEVSSVBISURfTUFTSyAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJEV1RfUEVSSVBISUQ0X1BFUklQSElEX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX1BFUklQSElENF9QRVJJUEhJRCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9QRVJJUEhJRDRfUEVSSVBISURfU0hJRlQpKSAmIE1UQkRXVF9QRVJJUEhJRDRfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElENSAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCRFdUX1BFUklQSElENV9QRVJJUEhJRF9NQVNLICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDVfUEVSSVBISURfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJEV1RfUEVSSVBISUQ1X1BFUklQSElEKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX1BFUklQSElENV9QRVJJUEhJRF9TSElGVCkpICYgTVRCRFdUX1BFUklQSElENV9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQ2IC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJEV1RfUEVSSVBISUQ2X1BFUklQSElEX01BU0sgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCRFdUX1BFUklQSElENl9QRVJJUEhJRF9TSElGVCAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDZfUEVSSVBISUQoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJEV1RfUEVSSVBISUQ2X1BFUklQSElEX1NISUZUKSkgJiBNVEJEV1RfUEVSSVBISUQ2X1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDcgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDdfUEVSSVBISURfTUFTSyAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJEV1RfUEVSSVBISUQ3X1BFUklQSElEX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX1BFUklQSElEN19QRVJJUEhJRCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9QRVJJUEhJRDdfUEVSSVBISURfU0hJRlQpKSAmIE1UQkRXVF9QRVJJUEhJRDdfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElEMCAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCRFdUX1BFUklQSElEMF9QRVJJUEhJRF9NQVNLICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDBfUEVSSVBISURfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJEV1RfUEVSSVBISUQwX1BFUklQSElEKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX1BFUklQSElEMF9QRVJJUEhJRF9TSElGVCkpICYgTVRCRFdUX1BFUklQSElEMF9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQxIC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJEV1RfUEVSSVBISUQxX1BFUklQSElEX01BU0sgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCRFdUX1BFUklQSElEMV9QRVJJUEhJRF9TSElGVCAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDFfUEVSSVBISUQoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJEV1RfUEVSSVBISUQxX1BFUklQSElEX1NISUZUKSkgJiBNVEJEV1RfUEVSSVBISUQxX1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDIgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDJfUEVSSVBISURfTUFTSyAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJEV1RfUEVSSVBISUQyX1BFUklQSElEX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX1BFUklQSElEMl9QRVJJUEhJRCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9QRVJJUEhJRDJfUEVSSVBISURfU0hJRlQpKSAmIE1UQkRXVF9QRVJJUEhJRDJfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElEMyAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCRFdUX1BFUklQSElEM19QRVJJUEhJRF9NQVNLICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDNfUEVSSVBISURfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJEV1RfUEVSSVBISUQzX1BFUklQSElEKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX1BFUklQSElEM19QRVJJUEhJRF9TSElGVCkpICYgTVRCRFdUX1BFUklQSElEM19QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgQ09NUElEIC0gQ29tcG9uZW50IElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQkRXVF9DT01QSURfQ09NUElEX01BU0sgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJEV1RfQ09NUElEX0NPTVBJRF9TSElGVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX0NPTVBJRF9DT01QSUQoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9DT01QSURfQ09NUElEX1NISUZUKSkgJiBNVEJEV1RfQ09NUElEX0NPTVBJRF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgTVRCRFdUX0NPTVBJRCAqLworI2RlZmluZSBNVEJEV1RfQ09NUElEX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICg0VSkKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIE1UQkRXVF9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIE1UQkRXVCAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIE1UQkRXVCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgTVRCRFdUX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMTAwMHUpCisvKiogUGVyaXBoZXJhbCBNVEJEV1QgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIE1UQkRXVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNVEJEV1RfVHlwZSAqKU1UQkRXVF9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIE1UQkRXVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIE1UQkRXVF9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgeyBNVEJEV1RfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTVRCRFdUIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBNVEJEV1RfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgIHsgTVRCRFdUIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBNVEJEV1RfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBOViBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIE5WX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIE5WIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBOViAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSSAgdWludDhfdCBCQUNLS0VZMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEJhY2tkb29yIENvbXBhcmlzb24gS2V5IDMuLCBvZmZzZXQ6IDB4MCAqLworICBfX0kgIHVpbnQ4X3QgQkFDS0tFWTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBCYWNrZG9vciBDb21wYXJpc29uIEtleSAyLiwgb2Zmc2V0OiAweDEgKi8KKyAgX19JICB1aW50OF90IEJBQ0tLRVkxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQmFja2Rvb3IgQ29tcGFyaXNvbiBLZXkgMS4sIG9mZnNldDogMHgyICovCisgIF9fSSAgdWludDhfdCBCQUNLS0VZMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEJhY2tkb29yIENvbXBhcmlzb24gS2V5IDAuLCBvZmZzZXQ6IDB4MyAqLworICBfX0kgIHVpbnQ4X3QgQkFDS0tFWTc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBCYWNrZG9vciBDb21wYXJpc29uIEtleSA3Liwgb2Zmc2V0OiAweDQgKi8KKyAgX19JICB1aW50OF90IEJBQ0tLRVk2OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQmFja2Rvb3IgQ29tcGFyaXNvbiBLZXkgNi4sIG9mZnNldDogMHg1ICovCisgIF9fSSAgdWludDhfdCBCQUNLS0VZNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEJhY2tkb29yIENvbXBhcmlzb24gS2V5IDUuLCBvZmZzZXQ6IDB4NiAqLworICBfX0kgIHVpbnQ4X3QgQkFDS0tFWTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBCYWNrZG9vciBDb21wYXJpc29uIEtleSA0Liwgb2Zmc2V0OiAweDcgKi8KKyAgX19JICB1aW50OF90IEZQUk9UMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTm9uLXZvbGF0aWxlIFAtRmxhc2ggUHJvdGVjdGlvbiAxIC0gTG93IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OCAqLworICBfX0kgIHVpbnQ4X3QgRlBST1QyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBOb24tdm9sYXRpbGUgUC1GbGFzaCBQcm90ZWN0aW9uIDEgLSBIaWdoIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OSAqLworICBfX0kgIHVpbnQ4X3QgRlBST1QxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBOb24tdm9sYXRpbGUgUC1GbGFzaCBQcm90ZWN0aW9uIDAgLSBMb3cgUmVnaXN0ZXIsIG9mZnNldDogMHhBICovCisgIF9fSSAgdWludDhfdCBGUFJPVDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5vbi12b2xhdGlsZSBQLUZsYXNoIFByb3RlY3Rpb24gMCAtIEhpZ2ggUmVnaXN0ZXIsIG9mZnNldDogMHhCICovCisgIF9fSSAgdWludDhfdCBGU0VDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5vbi12b2xhdGlsZSBGbGFzaCBTZWN1cml0eSBSZWdpc3Rlciwgb2Zmc2V0OiAweEMgKi8KKyAgX19JICB1aW50OF90IEZPUFQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTm9uLXZvbGF0aWxlIEZsYXNoIE9wdGlvbiBSZWdpc3Rlciwgb2Zmc2V0OiAweEQgKi8KK30gTlZfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTlYgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBOVl9SZWdpc3Rlcl9NYXNrcyBOViBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgQkFDS0tFWTMgLSBCYWNrZG9vciBDb21wYXJpc29uIEtleSAzLiAqLworI2RlZmluZSBOVl9CQUNLS0VZM19LRVlfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTlZfQkFDS0tFWTNfS0VZX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE5WX0JBQ0tLRVkzX0tFWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfQkFDS0tFWTNfS0VZX1NISUZUKSkgJiBOVl9CQUNLS0VZM19LRVlfTUFTSykKKworLyohIEBuYW1lIEJBQ0tLRVkyIC0gQmFja2Rvb3IgQ29tcGFyaXNvbiBLZXkgMi4gKi8KKyNkZWZpbmUgTlZfQkFDS0tFWTJfS0VZX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIE5WX0JBQ0tLRVkyX0tFWV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBOVl9CQUNLS0VZMl9LRVkoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0JBQ0tLRVkyX0tFWV9TSElGVCkpICYgTlZfQkFDS0tFWTJfS0VZX01BU0spCisKKy8qISBAbmFtZSBCQUNLS0VZMSAtIEJhY2tkb29yIENvbXBhcmlzb24gS2V5IDEuICovCisjZGVmaW5lIE5WX0JBQ0tLRVkxX0tFWV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBOVl9CQUNLS0VZMV9LRVlfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTlZfQkFDS0tFWTFfS0VZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9CQUNLS0VZMV9LRVlfU0hJRlQpKSAmIE5WX0JBQ0tLRVkxX0tFWV9NQVNLKQorCisvKiEgQG5hbWUgQkFDS0tFWTAgLSBCYWNrZG9vciBDb21wYXJpc29uIEtleSAwLiAqLworI2RlZmluZSBOVl9CQUNLS0VZMF9LRVlfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTlZfQkFDS0tFWTBfS0VZX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE5WX0JBQ0tLRVkwX0tFWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfQkFDS0tFWTBfS0VZX1NISUZUKSkgJiBOVl9CQUNLS0VZMF9LRVlfTUFTSykKKworLyohIEBuYW1lIEJBQ0tLRVk3IC0gQmFja2Rvb3IgQ29tcGFyaXNvbiBLZXkgNy4gKi8KKyNkZWZpbmUgTlZfQkFDS0tFWTdfS0VZX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIE5WX0JBQ0tLRVk3X0tFWV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBOVl9CQUNLS0VZN19LRVkoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0JBQ0tLRVk3X0tFWV9TSElGVCkpICYgTlZfQkFDS0tFWTdfS0VZX01BU0spCisKKy8qISBAbmFtZSBCQUNLS0VZNiAtIEJhY2tkb29yIENvbXBhcmlzb24gS2V5IDYuICovCisjZGVmaW5lIE5WX0JBQ0tLRVk2X0tFWV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBOVl9CQUNLS0VZNl9LRVlfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTlZfQkFDS0tFWTZfS0VZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9CQUNLS0VZNl9LRVlfU0hJRlQpKSAmIE5WX0JBQ0tLRVk2X0tFWV9NQVNLKQorCisvKiEgQG5hbWUgQkFDS0tFWTUgLSBCYWNrZG9vciBDb21wYXJpc29uIEtleSA1LiAqLworI2RlZmluZSBOVl9CQUNLS0VZNV9LRVlfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTlZfQkFDS0tFWTVfS0VZX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE5WX0JBQ0tLRVk1X0tFWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfQkFDS0tFWTVfS0VZX1NISUZUKSkgJiBOVl9CQUNLS0VZNV9LRVlfTUFTSykKKworLyohIEBuYW1lIEJBQ0tLRVk0IC0gQmFja2Rvb3IgQ29tcGFyaXNvbiBLZXkgNC4gKi8KKyNkZWZpbmUgTlZfQkFDS0tFWTRfS0VZX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIE5WX0JBQ0tLRVk0X0tFWV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBOVl9CQUNLS0VZNF9LRVkoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0JBQ0tLRVk0X0tFWV9TSElGVCkpICYgTlZfQkFDS0tFWTRfS0VZX01BU0spCisKKy8qISBAbmFtZSBGUFJPVDMgLSBOb24tdm9sYXRpbGUgUC1GbGFzaCBQcm90ZWN0aW9uIDEgLSBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTlZfRlBST1QzX1BST1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIE5WX0ZQUk9UM19QUk9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBOVl9GUFJPVDNfUFJPVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0ZQUk9UM19QUk9UX1NISUZUKSkgJiBOVl9GUFJPVDNfUFJPVF9NQVNLKQorCisvKiEgQG5hbWUgRlBST1QyIC0gTm9uLXZvbGF0aWxlIFAtRmxhc2ggUHJvdGVjdGlvbiAxIC0gSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSBOVl9GUFJPVDJfUFJPVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTlZfRlBST1QyX1BST1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE5WX0ZQUk9UMl9QUk9UKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfRlBST1QyX1BST1RfU0hJRlQpKSAmIE5WX0ZQUk9UMl9QUk9UX01BU0spCisKKy8qISBAbmFtZSBGUFJPVDEgLSBOb24tdm9sYXRpbGUgUC1GbGFzaCBQcm90ZWN0aW9uIDAgLSBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTlZfRlBST1QxX1BST1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIE5WX0ZQUk9UMV9QUk9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBOVl9GUFJPVDFfUFJPVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0ZQUk9UMV9QUk9UX1NISUZUKSkgJiBOVl9GUFJPVDFfUFJPVF9NQVNLKQorCisvKiEgQG5hbWUgRlBST1QwIC0gTm9uLXZvbGF0aWxlIFAtRmxhc2ggUHJvdGVjdGlvbiAwIC0gSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSBOVl9GUFJPVDBfUFJPVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTlZfRlBST1QwX1BST1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE5WX0ZQUk9UMF9QUk9UKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfRlBST1QwX1BST1RfU0hJRlQpKSAmIE5WX0ZQUk9UMF9QUk9UX01BU0spCisKKy8qISBAbmFtZSBGU0VDIC0gTm9uLXZvbGF0aWxlIEZsYXNoIFNlY3VyaXR5IFJlZ2lzdGVyICovCisjZGVmaW5lIE5WX0ZTRUNfU0VDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIE5WX0ZTRUNfU0VDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBOVl9GU0VDX1NFQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0ZTRUNfU0VDX1NISUZUKSkgJiBOVl9GU0VDX1NFQ19NQVNLKQorI2RlZmluZSBOVl9GU0VDX0ZTTEFDQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweENVKQorI2RlZmluZSBOVl9GU0VDX0ZTTEFDQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTlZfRlNFQ19GU0xBQ0MoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9GU0VDX0ZTTEFDQ19TSElGVCkpICYgTlZfRlNFQ19GU0xBQ0NfTUFTSykKKyNkZWZpbmUgTlZfRlNFQ19NRUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgzMFUpCisjZGVmaW5lIE5WX0ZTRUNfTUVFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBOVl9GU0VDX01FRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0ZTRUNfTUVFTl9TSElGVCkpICYgTlZfRlNFQ19NRUVOX01BU0spCisjZGVmaW5lIE5WX0ZTRUNfS0VZRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4QzBVKQorI2RlZmluZSBOVl9GU0VDX0tFWUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTlZfRlNFQ19LRVlFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9GU0VDX0tFWUVOX1NISUZUKSkgJiBOVl9GU0VDX0tFWUVOX01BU0spCisKKy8qISBAbmFtZSBGT1BUIC0gTm9uLXZvbGF0aWxlIEZsYXNoIE9wdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBOVl9GT1BUX0xQQk9PVDBfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBOVl9GT1BUX0xQQk9PVDBfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTlZfRk9QVF9MUEJPT1QwKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9GT1BUX0xQQk9PVDBfU0hJRlQpKSAmIE5WX0ZPUFRfTFBCT09UMF9NQVNLKQorI2RlZmluZSBOVl9GT1BUX05NSV9ESVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBOVl9GT1BUX05NSV9ESVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTlZfRk9QVF9OTUlfRElTKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9GT1BUX05NSV9ESVNfU0hJRlQpKSAmIE5WX0ZPUFRfTk1JX0RJU19NQVNLKQorI2RlZmluZSBOVl9GT1BUX1JFU0VUX1BJTl9DRkdfTUFTSyAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBOVl9GT1BUX1JFU0VUX1BJTl9DRkdfU0hJRlQgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTlZfRk9QVF9SRVNFVF9QSU5fQ0ZHKHgpICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9GT1BUX1JFU0VUX1BJTl9DRkdfU0hJRlQpKSAmIE5WX0ZPUFRfUkVTRVRfUElOX0NGR19NQVNLKQorI2RlZmluZSBOVl9GT1BUX0xQQk9PVDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgTlZfRk9QVF9MUEJPT1QxX1NISUZUICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIE5WX0ZPUFRfTFBCT09UMSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfRk9QVF9MUEJPT1QxX1NISUZUKSkgJiBOVl9GT1BUX0xQQk9PVDFfTUFTSykKKyNkZWZpbmUgTlZfRk9QVF9GQVNUX0lOSVRfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIE5WX0ZPUFRfRkFTVF9JTklUX1NISUZUICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBOVl9GT1BUX0ZBU1RfSU5JVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0ZPUFRfRkFTVF9JTklUX1NISUZUKSkgJiBOVl9GT1BUX0ZBU1RfSU5JVF9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgTlZfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBOViAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIEZURkFfRmxhc2hDb25maWcgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEZURkFfRmxhc2hDb25maWdfQkFTRSAgICAgICAgICAgICAgICAgICAgKDB4NDAwdSkKKy8qKiBQZXJpcGhlcmFsIEZURkFfRmxhc2hDb25maWcgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIEZURkFfRmxhc2hDb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgKChOVl9UeXBlICopRlRGQV9GbGFzaENvbmZpZ19CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIE5WIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgTlZfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEZURkFfRmxhc2hDb25maWdfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTlYgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIE5WX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBGVEZBX0ZsYXNoQ29uZmlnIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBOVl9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFBJVCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFBJVF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBQSVQgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFBJVCAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgTUNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBJVCBNb2R1bGUgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbMjIwXTsKKyAgX19JICB1aW50MzJfdCBMVE1SNjRIOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUElUIFVwcGVyIExpZmV0aW1lIFRpbWVyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RTAgKi8KKyAgX19JICB1aW50MzJfdCBMVE1SNjRMOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUElUIExvd2VyIExpZmV0aW1lIFRpbWVyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RTQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbMjRdOworICBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDEwMCwgYXJyYXkgc3RlcDogMHgxMCAqLworICAgIF9fSU8gdWludDMyX3QgTERWQUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRpbWVyIExvYWQgVmFsdWUgUmVnaXN0ZXIsIGFycmF5IG9mZnNldDogMHgxMDAsIGFycmF5IHN0ZXA6IDB4MTAgKi8KKyAgICBfX0kgIHVpbnQzMl90IENWQUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDdXJyZW50IFRpbWVyIFZhbHVlIFJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4MTA0LCBhcnJheSBzdGVwOiAweDEwICovCisgICAgX19JTyB1aW50MzJfdCBUQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGltZXIgQ29udHJvbCBSZWdpc3RlciwgYXJyYXkgb2Zmc2V0OiAweDEwOCwgYXJyYXkgc3RlcDogMHgxMCAqLworICAgIF9fSU8gdWludDMyX3QgVEZMRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRpbWVyIEZsYWcgUmVnaXN0ZXIsIGFycmF5IG9mZnNldDogMHgxMEMsIGFycmF5IHN0ZXA6IDB4MTAgKi8KKyAgfSBDSEFOTkVMWzJdOworfSBQSVRfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUElUIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUElUX1JlZ2lzdGVyX01hc2tzIFBJVCBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgTUNSIC0gUElUIE1vZHVsZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJVF9NQ1JfRlJaX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFBJVF9NQ1JfRlJaX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBQSVRfTUNSX0ZSWih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUElUX01DUl9GUlpfU0hJRlQpKSAmIFBJVF9NQ1JfRlJaX01BU0spCisjZGVmaW5lIFBJVF9NQ1JfTURJU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFBJVF9NQ1JfTURJU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBQSVRfTUNSX01ESVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUElUX01DUl9NRElTX1NISUZUKSkgJiBQSVRfTUNSX01ESVNfTUFTSykKKworLyohIEBuYW1lIExUTVI2NEggLSBQSVQgVXBwZXIgTGlmZXRpbWUgVGltZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElUX0xUTVI2NEhfTFRIX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFBJVF9MVE1SNjRIX0xUSF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBQSVRfTFRNUjY0SF9MVEgoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUElUX0xUTVI2NEhfTFRIX1NISUZUKSkgJiBQSVRfTFRNUjY0SF9MVEhfTUFTSykKKworLyohIEBuYW1lIExUTVI2NEwgLSBQSVQgTG93ZXIgTGlmZXRpbWUgVGltZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElUX0xUTVI2NExfTFRMX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFBJVF9MVE1SNjRMX0xUTF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBQSVRfTFRNUjY0TF9MVEwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUElUX0xUTVI2NExfTFRMX1NISUZUKSkgJiBQSVRfTFRNUjY0TF9MVExfTUFTSykKKworLyohIEBuYW1lIExEVkFMIC0gVGltZXIgTG9hZCBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBQSVRfTERWQUxfVFNWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUElUX0xEVkFMX1RTVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBJVF9MRFZBTF9UU1YoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQSVRfTERWQUxfVFNWX1NISUZUKSkgJiBQSVRfTERWQUxfVFNWX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBQSVRfTERWQUwgKi8KKyNkZWZpbmUgUElUX0xEVkFMX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisKKy8qISBAbmFtZSBDVkFMIC0gQ3VycmVudCBUaW1lciBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBQSVRfQ1ZBTF9UVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUElUX0NWQUxfVFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBJVF9DVkFMX1RWTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQSVRfQ1ZBTF9UVkxfU0hJRlQpKSAmIFBJVF9DVkFMX1RWTF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgUElUX0NWQUwgKi8KKyNkZWZpbmUgUElUX0NWQUxfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisKKy8qISBAbmFtZSBUQ1RSTCAtIFRpbWVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElUX1RDVFJMX1RFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgUElUX1RDVFJMX1RFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBJVF9UQ1RSTF9URU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQSVRfVENUUkxfVEVOX1NISUZUKSkgJiBQSVRfVENUUkxfVEVOX01BU0spCisjZGVmaW5lIFBJVF9UQ1RSTF9USUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFBJVF9UQ1RSTF9USUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBQSVRfVENUUkxfVElFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUElUX1RDVFJMX1RJRV9TSElGVCkpICYgUElUX1RDVFJMX1RJRV9NQVNLKQorI2RlZmluZSBQSVRfVENUUkxfQ0hOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBQSVRfVENUUkxfQ0hOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgUElUX1RDVFJMX0NITih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFBJVF9UQ1RSTF9DSE5fU0hJRlQpKSAmIFBJVF9UQ1RSTF9DSE5fTUFTSykKKworLyogVGhlIGNvdW50IG9mIFBJVF9UQ1RSTCAqLworI2RlZmluZSBQSVRfVENUUkxfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKworLyohIEBuYW1lIFRGTEcgLSBUaW1lciBGbGFnIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJVF9URkxHX1RJRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFBJVF9URkxHX1RJRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBQSVRfVEZMR19USUYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUElUX1RGTEdfVElGX1NISUZUKSkgJiBQSVRfVEZMR19USUZfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFBJVF9URkxHICovCisjZGVmaW5lIFBJVF9URkxHX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUElUX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogUElUIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgUElUIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBQSVRfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDM3MDAwdSkKKy8qKiBQZXJpcGhlcmFsIFBJVCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgUElUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJVF9UeXBlICopUElUX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgUElUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgUElUX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFBJVF9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBQSVQgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFBJVF9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBQSVQgfQorLyoqIEludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgUElUIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBQSVRfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyBQSVRfSVJRbiwgUElUX0lSUW4gfSB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUElUX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUE1DIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUE1DX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFBNQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogUE1DIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50OF90IExWRFNDMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTG93IFZvbHRhZ2UgRGV0ZWN0IFN0YXR1cyBBbmQgQ29udHJvbCAxIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQ4X3QgTFZEU0MyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMb3cgVm9sdGFnZSBEZXRlY3QgU3RhdHVzIEFuZCBDb250cm9sIDIgcmVnaXN0ZXIsIG9mZnNldDogMHgxICovCisgIF9fSU8gdWludDhfdCBSRUdTQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlZ3VsYXRvciBTdGF0dXMgQW5kIENvbnRyb2wgcmVnaXN0ZXIsIG9mZnNldDogMHgyICovCit9IFBNQ19UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBQTUMgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBQTUNfUmVnaXN0ZXJfTWFza3MgUE1DIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBMVkRTQzEgLSBMb3cgVm9sdGFnZSBEZXRlY3QgU3RhdHVzIEFuZCBDb250cm9sIDEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE1DX0xWRFNDMV9MVkRWX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgUE1DX0xWRFNDMV9MVkRWX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBNQ19MVkRTQzFfTFZEVih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUE1DX0xWRFNDMV9MVkRWX1NISUZUKSkgJiBQTUNfTFZEU0MxX0xWRFZfTUFTSykKKyNkZWZpbmUgUE1DX0xWRFNDMV9MVkRSRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFBNQ19MVkRTQzFfTFZEUkVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBQTUNfTFZEU0MxX0xWRFJFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFBNQ19MVkRTQzFfTFZEUkVfU0hJRlQpKSAmIFBNQ19MVkRTQzFfTFZEUkVfTUFTSykKKyNkZWZpbmUgUE1DX0xWRFNDMV9MVkRJRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFBNQ19MVkRTQzFfTFZESUVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBQTUNfTFZEU0MxX0xWRElFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFBNQ19MVkRTQzFfTFZESUVfU0hJRlQpKSAmIFBNQ19MVkRTQzFfTFZESUVfTUFTSykKKyNkZWZpbmUgUE1DX0xWRFNDMV9MVkRBQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFBNQ19MVkRTQzFfTFZEQUNLX1NISUZUICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBQTUNfTFZEU0MxX0xWREFDSyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFBNQ19MVkRTQzFfTFZEQUNLX1NISUZUKSkgJiBQTUNfTFZEU0MxX0xWREFDS19NQVNLKQorI2RlZmluZSBQTUNfTFZEU0MxX0xWREZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgUE1DX0xWRFNDMV9MVkRGX1NISUZUICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIFBNQ19MVkRTQzFfTFZERih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUE1DX0xWRFNDMV9MVkRGX1NISUZUKSkgJiBQTUNfTFZEU0MxX0xWREZfTUFTSykKKworLyohIEBuYW1lIExWRFNDMiAtIExvdyBWb2x0YWdlIERldGVjdCBTdGF0dXMgQW5kIENvbnRyb2wgMiByZWdpc3RlciAqLworI2RlZmluZSBQTUNfTFZEU0MyX0xWV1ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBQTUNfTFZEU0MyX0xWV1ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUE1DX0xWRFNDMl9MVldWKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBQTUNfTFZEU0MyX0xWV1ZfU0hJRlQpKSAmIFBNQ19MVkRTQzJfTFZXVl9NQVNLKQorI2RlZmluZSBQTUNfTFZEU0MyX0xWV0lFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgUE1DX0xWRFNDMl9MVldJRV9TSElGVCAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFBNQ19MVkRTQzJfTFZXSUUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUE1DX0xWRFNDMl9MVldJRV9TSElGVCkpICYgUE1DX0xWRFNDMl9MVldJRV9NQVNLKQorI2RlZmluZSBQTUNfTFZEU0MyX0xWV0FDS19NQVNLICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgUE1DX0xWRFNDMl9MVldBQ0tfU0hJRlQgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFBNQ19MVkRTQzJfTFZXQUNLKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUE1DX0xWRFNDMl9MVldBQ0tfU0hJRlQpKSAmIFBNQ19MVkRTQzJfTFZXQUNLX01BU0spCisjZGVmaW5lIFBNQ19MVkRTQzJfTFZXRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBQTUNfTFZEU0MyX0xWV0ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgUE1DX0xWRFNDMl9MVldGKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBQTUNfTFZEU0MyX0xWV0ZfU0hJRlQpKSAmIFBNQ19MVkRTQzJfTFZXRl9NQVNLKQorCisvKiEgQG5hbWUgUkVHU0MgLSBSZWd1bGF0b3IgU3RhdHVzIEFuZCBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBNQ19SRUdTQ19CR0JFX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFBNQ19SRUdTQ19CR0JFX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBQTUNfUkVHU0NfQkdCRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFBNQ19SRUdTQ19CR0JFX1NISUZUKSkgJiBQTUNfUkVHU0NfQkdCRV9NQVNLKQorI2RlZmluZSBQTUNfUkVHU0NfUkVHT05TX01BU0sgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBQTUNfUkVHU0NfUkVHT05TX1NISUZUICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgUE1DX1JFR1NDX1JFR09OUyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBQTUNfUkVHU0NfUkVHT05TX1NISUZUKSkgJiBQTUNfUkVHU0NfUkVHT05TX01BU0spCisjZGVmaW5lIFBNQ19SRUdTQ19BQ0tJU09fTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFBNQ19SRUdTQ19BQ0tJU09fU0hJRlQgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBQTUNfUkVHU0NfQUNLSVNPKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFBNQ19SRUdTQ19BQ0tJU09fU0hJRlQpKSAmIFBNQ19SRUdTQ19BQ0tJU09fTUFTSykKKyNkZWZpbmUgUE1DX1JFR1NDX1ZMUE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFBNQ19SRUdTQ19WTFBPX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBQTUNfUkVHU0NfVkxQTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFBNQ19SRUdTQ19WTFBPX1NISUZUKSkgJiBQTUNfUkVHU0NfVkxQT19NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUE1DX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogUE1DIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgUE1DIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBQTUNfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDdEMDAwdSkKKy8qKiBQZXJpcGhlcmFsIFBNQyBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgUE1DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBNQ19UeXBlICopUE1DX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgUE1DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgUE1DX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFBNQ19CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBQTUMgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFBNQ19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBQTUMgfQorLyoqIEludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgUE1DIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBQTUNfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTFZEX0xWV19EQ0RDX0lSUW4gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFBNQ19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFBPUlQgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBQT1JUX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFBPUlQgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFBPUlQgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IFBDUlszMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQaW4gQ29udHJvbCBSZWdpc3RlciBuLCBhcnJheSBvZmZzZXQ6IDB4MCwgYXJyYXkgc3RlcDogMHg0ICovCisgIF9fTyAgdWludDMyX3QgR1BDTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdsb2JhbCBQaW4gQ29udHJvbCBMb3cgUmVnaXN0ZXIsIG9mZnNldDogMHg4MCAqLworICBfX08gIHVpbnQzMl90IEdQQ0hSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBHbG9iYWwgUGluIENvbnRyb2wgSGlnaCBSZWdpc3Rlciwgb2Zmc2V0OiAweDg0ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzI0XTsKKyAgX19JTyB1aW50MzJfdCBJU0ZSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSW50ZXJydXB0IFN0YXR1cyBGbGFnIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QTAgKi8KK30gUE9SVF9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBQT1JUIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUE9SVF9SZWdpc3Rlcl9NYXNrcyBQT1JUIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBQQ1IgLSBQaW4gQ29udHJvbCBSZWdpc3RlciBuICovCisjZGVmaW5lIFBPUlRfUENSX1BTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFBPUlRfUENSX1BTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBQT1JUX1BDUl9QUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUE9SVF9QQ1JfUFNfU0hJRlQpKSAmIFBPUlRfUENSX1BTX01BU0spCisjZGVmaW5lIFBPUlRfUENSX1BFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFBPUlRfUENSX1BFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBQT1JUX1BDUl9QRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUE9SVF9QQ1JfUEVfU0hJRlQpKSAmIFBPUlRfUENSX1BFX01BU0spCisjZGVmaW5lIFBPUlRfUENSX1NSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFBPUlRfUENSX1NSRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBQT1JUX1BDUl9TUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUE9SVF9QQ1JfU1JFX1NISUZUKSkgJiBQT1JUX1BDUl9TUkVfTUFTSykKKyNkZWZpbmUgUE9SVF9QQ1JfUEZFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFBPUlRfUENSX1BGRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBQT1JUX1BDUl9QRkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUE9SVF9QQ1JfUEZFX1NISUZUKSkgJiBQT1JUX1BDUl9QRkVfTUFTSykKKyNkZWZpbmUgUE9SVF9QQ1JfRFNFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFBPUlRfUENSX0RTRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBQT1JUX1BDUl9EU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUE9SVF9QQ1JfRFNFX1NISUZUKSkgJiBQT1JUX1BDUl9EU0VfTUFTSykKKyNkZWZpbmUgUE9SVF9QQ1JfTVVYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg3MDBVKQorI2RlZmluZSBQT1JUX1BDUl9NVVhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgUE9SVF9QQ1JfTVVYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFBPUlRfUENSX01VWF9TSElGVCkpICYgUE9SVF9QQ1JfTVVYX01BU0spCisjZGVmaW5lIFBPUlRfUENSX0lSUUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RjAwMDBVKQorI2RlZmluZSBQT1JUX1BDUl9JUlFDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFBPUlRfUENSX0lSUUMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQT1JUX1BDUl9JUlFDX1NISUZUKSkgJiBQT1JUX1BDUl9JUlFDX01BU0spCisjZGVmaW5lIFBPUlRfUENSX0lTRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFBPUlRfUENSX0lTRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgUE9SVF9QQ1JfSVNGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFBPUlRfUENSX0lTRl9TSElGVCkpICYgUE9SVF9QQ1JfSVNGX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBQT1JUX1BDUiAqLworI2RlZmluZSBQT1JUX1BDUl9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMlUpCisKKy8qISBAbmFtZSBHUENMUiAtIEdsb2JhbCBQaW4gQ29udHJvbCBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVF9HUENMUl9HUFdEX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgUE9SVF9HUENMUl9HUFdEX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBPUlRfR1BDTFJfR1BXRCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQT1JUX0dQQ0xSX0dQV0RfU0hJRlQpKSAmIFBPUlRfR1BDTFJfR1BXRF9NQVNLKQorI2RlZmluZSBQT1JUX0dQQ0xSX0dQV0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgUE9SVF9HUENMUl9HUFdFX1NISUZUICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBQT1JUX0dQQ0xSX0dQV0UoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUE9SVF9HUENMUl9HUFdFX1NISUZUKSkgJiBQT1JUX0dQQ0xSX0dQV0VfTUFTSykKKworLyohIEBuYW1lIEdQQ0hSIC0gR2xvYmFsIFBpbiBDb250cm9sIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVF9HUENIUl9HUFdEX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgUE9SVF9HUENIUl9HUFdEX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBPUlRfR1BDSFJfR1BXRCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQT1JUX0dQQ0hSX0dQV0RfU0hJRlQpKSAmIFBPUlRfR1BDSFJfR1BXRF9NQVNLKQorI2RlZmluZSBQT1JUX0dQQ0hSX0dQV0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgUE9SVF9HUENIUl9HUFdFX1NISUZUICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBQT1JUX0dQQ0hSX0dQV0UoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUE9SVF9HUENIUl9HUFdFX1NISUZUKSkgJiBQT1JUX0dQQ0hSX0dQV0VfTUFTSykKKworLyohIEBuYW1lIElTRlIgLSBJbnRlcnJ1cHQgU3RhdHVzIEZsYWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVF9JU0ZSX0lTRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFBPUlRfSVNGUl9JU0ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBQT1JUX0lTRlJfSVNGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUE9SVF9JU0ZSX0lTRl9TSElGVCkpICYgUE9SVF9JU0ZSX0lTRl9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUE9SVF9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFBPUlQgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBQT1JUQSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUE9SVEFfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA0OTAwMHUpCisvKiogUGVyaXBoZXJhbCBQT1JUQSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgUE9SVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPUlRfVHlwZSAqKVBPUlRBX0JBU0UpCisvKiogUGVyaXBoZXJhbCBQT1JUQiBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUE9SVEJfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA0QTAwMHUpCisvKiogUGVyaXBoZXJhbCBQT1JUQiBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgUE9SVEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPUlRfVHlwZSAqKVBPUlRCX0JBU0UpCisvKiogUGVyaXBoZXJhbCBQT1JUQyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUE9SVENfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA0QjAwMHUpCisvKiogUGVyaXBoZXJhbCBQT1JUQyBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgUE9SVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPUlRfVHlwZSAqKVBPUlRDX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgUE9SVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFBPUlRfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBQT1JUQV9CQVNFLCBQT1JUQl9CQVNFLCBQT1JUQ19CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBQT1JUIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBQT1JUX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUE9SVEEsIFBPUlRCLCBQT1JUQyB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBQT1JUIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBQT1JUX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUE9SVEFfSVJRbiwgUE9SVEJfUE9SVENfSVJRbiwgUE9SVEJfUE9SVENfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUE9SVF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFJDTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFJDTV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBSQ00gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFJDTSAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSSAgdWludDhfdCBTUlMwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN5c3RlbSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgMCwgb2Zmc2V0OiAweDAgKi8KKyAgX19JICB1aW50OF90IFNSUzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3lzdGVtIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAxLCBvZmZzZXQ6IDB4MSAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFsyXTsKKyAgX19JTyB1aW50OF90IFJQRkM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVzZXQgUGluIEZpbHRlciBDb250cm9sIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQ4X3QgUlBGVzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZXNldCBQaW4gRmlsdGVyIFdpZHRoIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4NSAqLworfSBSQ01fVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUkNNIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUkNNX1JlZ2lzdGVyX01hc2tzIFJDTSBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgU1JTMCAtIFN5c3RlbSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBSQ01fU1JTMF9XQUtFVVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBSQ01fU1JTMF9XQUtFVVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUkNNX1NSUzBfV0FLRVVQKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBSQ01fU1JTMF9XQUtFVVBfU0hJRlQpKSAmIFJDTV9TUlMwX1dBS0VVUF9NQVNLKQorI2RlZmluZSBSQ01fU1JTMF9MVkRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBSQ01fU1JTMF9MVkRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgUkNNX1NSUzBfTFZEKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBSQ01fU1JTMF9MVkRfU0hJRlQpKSAmIFJDTV9TUlMwX0xWRF9NQVNLKQorI2RlZmluZSBSQ01fU1JTMF9MT0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBSQ01fU1JTMF9MT0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgUkNNX1NSUzBfTE9DKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBSQ01fU1JTMF9MT0NfU0hJRlQpKSAmIFJDTV9TUlMwX0xPQ19NQVNLKQorI2RlZmluZSBSQ01fU1JTMF9XRE9HX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgUkNNX1NSUzBfV0RPR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFJDTV9TUlMwX1dET0coeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUkNNX1NSUzBfV0RPR19TSElGVCkpICYgUkNNX1NSUzBfV0RPR19NQVNLKQorI2RlZmluZSBSQ01fU1JTMF9QSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgUkNNX1NSUzBfUElOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFJDTV9TUlMwX1BJTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUkNNX1NSUzBfUElOX1NISUZUKSkgJiBSQ01fU1JTMF9QSU5fTUFTSykKKyNkZWZpbmUgUkNNX1NSUzBfUE9SX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFJDTV9TUlMwX1BPUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBSQ01fU1JTMF9QT1IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFJDTV9TUlMwX1BPUl9TSElGVCkpICYgUkNNX1NSUzBfUE9SX01BU0spCisKKy8qISBAbmFtZSBTUlMxIC0gU3lzdGVtIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAxICovCisjZGVmaW5lIFJDTV9TUlMxX0xPQ0tVUF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFJDTV9TUlMxX0xPQ0tVUF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBSQ01fU1JTMV9MT0NLVVAoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFJDTV9TUlMxX0xPQ0tVUF9TSElGVCkpICYgUkNNX1NSUzFfTE9DS1VQX01BU0spCisjZGVmaW5lIFJDTV9TUlMxX1NXX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFJDTV9TUlMxX1NXX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBSQ01fU1JTMV9TVyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFJDTV9TUlMxX1NXX1NISUZUKSkgJiBSQ01fU1JTMV9TV19NQVNLKQorI2RlZmluZSBSQ01fU1JTMV9NRE1fQVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBSQ01fU1JTMV9NRE1fQVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgUkNNX1NSUzFfTURNX0FQKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBSQ01fU1JTMV9NRE1fQVBfU0hJRlQpKSAmIFJDTV9TUlMxX01ETV9BUF9NQVNLKQorI2RlZmluZSBSQ01fU1JTMV9TQUNLRVJSX01BU0sgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgUkNNX1NSUzFfU0FDS0VSUl9TSElGVCAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFJDTV9TUlMxX1NBQ0tFUlIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUkNNX1NSUzFfU0FDS0VSUl9TSElGVCkpICYgUkNNX1NSUzFfU0FDS0VSUl9NQVNLKQorCisvKiEgQG5hbWUgUlBGQyAtIFJlc2V0IFBpbiBGaWx0ZXIgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBSQ01fUlBGQ19SU1RGTFRTUldfTUFTSyAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBSQ01fUlBGQ19SU1RGTFRTUldfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUkNNX1JQRkNfUlNURkxUU1JXKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBSQ01fUlBGQ19SU1RGTFRTUldfU0hJRlQpKSAmIFJDTV9SUEZDX1JTVEZMVFNSV19NQVNLKQorI2RlZmluZSBSQ01fUlBGQ19SU1RGTFRTU19NQVNLICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBSQ01fUlBGQ19SU1RGTFRTU19TSElGVCAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgUkNNX1JQRkNfUlNURkxUU1MoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBSQ01fUlBGQ19SU1RGTFRTU19TSElGVCkpICYgUkNNX1JQRkNfUlNURkxUU1NfTUFTSykKKworLyohIEBuYW1lIFJQRlcgLSBSZXNldCBQaW4gRmlsdGVyIFdpZHRoIHJlZ2lzdGVyICovCisjZGVmaW5lIFJDTV9SUEZXX1JTVEZMVFNFTF9NQVNLICAgICAgICAgICAgICAgICAgKDB4MUZVKQorI2RlZmluZSBSQ01fUlBGV19SU1RGTFRTRUxfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUkNNX1JQRldfUlNURkxUU0VMKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBSQ01fUlBGV19SU1RGTFRTRUxfU0hJRlQpKSAmIFJDTV9SUEZXX1JTVEZMVFNFTF9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUkNNX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogUkNNIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgUkNNIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBSQ01fQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDdGMDAwdSkKKy8qKiBQZXJpcGhlcmFsIFJDTSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgUkNNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJDTV9UeXBlICopUkNNX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgUkNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgUkNNX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFJDTV9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBSQ00gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFJDTV9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBSQ00gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFJDTV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFJGU1lTIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUkZTWVNfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgUkZTWVMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFJGU1lTIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBSRUdbOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVnaXN0ZXIgZmlsZSByZWdpc3RlciwgYXJyYXkgb2Zmc2V0OiAweDAsIGFycmF5IHN0ZXA6IDB4NCAqLworfSBSRlNZU19UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBSRlNZUyBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFJGU1lTX1JlZ2lzdGVyX01hc2tzIFJGU1lTIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBSRUcgLSBSZWdpc3RlciBmaWxlIHJlZ2lzdGVyICovCisjZGVmaW5lIFJGU1lTX1JFR19MTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBSRlNZU19SRUdfTExfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUkZTWVNfUkVHX0xMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJGU1lTX1JFR19MTF9TSElGVCkpICYgUkZTWVNfUkVHX0xMX01BU0spCisjZGVmaW5lIFJGU1lTX1JFR19MSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkYwMFUpCisjZGVmaW5lIFJGU1lTX1JFR19MSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBSRlNZU19SRUdfTEgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUkZTWVNfUkVHX0xIX1NISUZUKSkgJiBSRlNZU19SRUdfTEhfTUFTSykKKyNkZWZpbmUgUkZTWVNfUkVHX0hMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBSRlNZU19SRUdfSExfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFJGU1lTX1JFR19ITCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSRlNZU19SRUdfSExfU0hJRlQpKSAmIFJGU1lTX1JFR19ITF9NQVNLKQorI2RlZmluZSBSRlNZU19SRUdfSEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgUkZTWVNfUkVHX0hIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBSRlNZU19SRUdfSEgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUkZTWVNfUkVHX0hIX1NISUZUKSkgJiBSRlNZU19SRUdfSEhfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFJGU1lTX1JFRyAqLworI2RlZmluZSBSRlNZU19SRUdfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICg4VSkKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFJGU1lTX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogUkZTWVMgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBSRlNZUyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUkZTWVNfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA0MTAwMHUpCisvKiogUGVyaXBoZXJhbCBSRlNZUyBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgUkZTWVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJGU1lTX1R5cGUgKilSRlNZU19CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFJGU1lTIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgUkZTWVNfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICB7IFJGU1lTX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFJGU1lTIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBSRlNZU19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUkZTWVMgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFJGU1lTX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUk9NIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUk9NX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFJPTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogUk9NIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JICB1aW50MzJfdCBFTlRSWVszXTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRW50cnksIGFycmF5IG9mZnNldDogMHgwLCBhcnJheSBzdGVwOiAweDQgKi8KKyAgX19JICB1aW50MzJfdCBUQUJMRU1BUks7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRW5kIG9mIFRhYmxlIE1hcmtlciBSZWdpc3Rlciwgb2Zmc2V0OiAweEMgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbNDAyOF07CisgIF9fSSAgdWludDMyX3QgU1lTQUNDRVNTOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN5c3RlbSBBY2Nlc3MgUmVnaXN0ZXIsIG9mZnNldDogMHhGQ0MgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZEMCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElENTsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkQ0ICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQ2OyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRDggKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZEQyAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElEMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkUwICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRTQgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZFOCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElEMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkVDICovCisgIF9fSSAgdWludDMyX3QgQ09NUElEWzRdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbXBvbmVudCBJRCBSZWdpc3RlciwgYXJyYXkgb2Zmc2V0OiAweEZGMCwgYXJyYXkgc3RlcDogMHg0ICovCit9IFJPTV9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBST00gUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBST01fUmVnaXN0ZXJfTWFza3MgUk9NIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBFTlRSWSAtIEVudHJ5ICovCisjZGVmaW5lIFJPTV9FTlRSWV9FTlRSWV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBST01fRU5UUllfRU5UUllfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUk9NX0VOVFJZX0VOVFJZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJPTV9FTlRSWV9FTlRSWV9TSElGVCkpICYgUk9NX0VOVFJZX0VOVFJZX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBST01fRU5UUlkgKi8KKyNkZWZpbmUgUk9NX0VOVFJZX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAoM1UpCisKKy8qISBAbmFtZSBUQUJMRU1BUksgLSBFbmQgb2YgVGFibGUgTWFya2VyIFJlZ2lzdGVyICovCisjZGVmaW5lIFJPTV9UQUJMRU1BUktfTUFSS19NQVNLICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBST01fVEFCTEVNQVJLX01BUktfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUk9NX1RBQkxFTUFSS19NQVJLKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJPTV9UQUJMRU1BUktfTUFSS19TSElGVCkpICYgUk9NX1RBQkxFTUFSS19NQVJLX01BU0spCisKKy8qISBAbmFtZSBTWVNBQ0NFU1MgLSBTeXN0ZW0gQWNjZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFJPTV9TWVNBQ0NFU1NfU1lTQUNDRVNTX01BU0sgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBST01fU1lTQUNDRVNTX1NZU0FDQ0VTU19TSElGVCAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUk9NX1NZU0FDQ0VTU19TWVNBQ0NFU1MoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJPTV9TWVNBQ0NFU1NfU1lTQUNDRVNTX1NISUZUKSkgJiBST01fU1lTQUNDRVNTX1NZU0FDQ0VTU19NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQ0IC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBST01fUEVSSVBISUQ0X1BFUklQSElEX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUk9NX1BFUklQSElENF9QRVJJUEhJRF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJPTV9QRVJJUEhJRDRfUEVSSVBISUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBST01fUEVSSVBISUQ0X1BFUklQSElEX1NISUZUKSkgJiBST01fUEVSSVBISUQ0X1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDUgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFJPTV9QRVJJUEhJRDVfUEVSSVBISURfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBST01fUEVSSVBISUQ1X1BFUklQSElEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUk9NX1BFUklQSElENV9QRVJJUEhJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJPTV9QRVJJUEhJRDVfUEVSSVBISURfU0hJRlQpKSAmIFJPTV9QRVJJUEhJRDVfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElENiAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUk9NX1BFUklQSElENl9QRVJJUEhJRF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFJPTV9QRVJJUEhJRDZfUEVSSVBISURfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBST01fUEVSSVBISUQ2X1BFUklQSElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUk9NX1BFUklQSElENl9QRVJJUEhJRF9TSElGVCkpICYgUk9NX1BFUklQSElENl9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQ3IC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBST01fUEVSSVBISUQ3X1BFUklQSElEX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUk9NX1BFUklQSElEN19QRVJJUEhJRF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJPTV9QRVJJUEhJRDdfUEVSSVBISUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBST01fUEVSSVBISUQ3X1BFUklQSElEX1NISUZUKSkgJiBST01fUEVSSVBISUQ3X1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDAgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFJPTV9QRVJJUEhJRDBfUEVSSVBISURfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBST01fUEVSSVBISUQwX1BFUklQSElEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUk9NX1BFUklQSElEMF9QRVJJUEhJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJPTV9QRVJJUEhJRDBfUEVSSVBISURfU0hJRlQpKSAmIFJPTV9QRVJJUEhJRDBfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElEMSAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUk9NX1BFUklQSElEMV9QRVJJUEhJRF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFJPTV9QRVJJUEhJRDFfUEVSSVBISURfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBST01fUEVSSVBISUQxX1BFUklQSElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUk9NX1BFUklQSElEMV9QRVJJUEhJRF9TSElGVCkpICYgUk9NX1BFUklQSElEMV9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQyIC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBST01fUEVSSVBISUQyX1BFUklQSElEX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUk9NX1BFUklQSElEMl9QRVJJUEhJRF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJPTV9QRVJJUEhJRDJfUEVSSVBISUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBST01fUEVSSVBISUQyX1BFUklQSElEX1NISUZUKSkgJiBST01fUEVSSVBISUQyX1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDMgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFJPTV9QRVJJUEhJRDNfUEVSSVBISURfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBST01fUEVSSVBISUQzX1BFUklQSElEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUk9NX1BFUklQSElEM19QRVJJUEhJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJPTV9QRVJJUEhJRDNfUEVSSVBISURfU0hJRlQpKSAmIFJPTV9QRVJJUEhJRDNfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIENPTVBJRCAtIENvbXBvbmVudCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBST01fQ09NUElEX0NPTVBJRF9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUk9NX0NPTVBJRF9DT01QSURfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJPTV9DT01QSURfQ09NUElEKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBST01fQ09NUElEX0NPTVBJRF9TSElGVCkpICYgUk9NX0NPTVBJRF9DT01QSURfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFJPTV9DT01QSUQgKi8KKyNkZWZpbmUgUk9NX0NPTVBJRF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBST01fUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBST00gLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBST00gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFJPTV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RjAwMDIwMDB1KQorLyoqIFBlcmlwaGVyYWwgUk9NIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBST00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUk9NX1R5cGUgKilST01fQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBST00gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBST01fQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUk9NX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFJPTSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgUk9NX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFJPTSB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUk9NX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUlNJTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFJTSU1fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgUlNJTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogUlNJTSAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgQ09OVFJPTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJhZGlvIFN5c3RlbSBDb250cm9sLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IEFDVElWRV9ERUxBWTsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSYWRpbyBBY3RpdmUgRWFybHkgV2FybmluZywgb2Zmc2V0OiAweDQgKi8KKyAgX19JICB1aW50MzJfdCBNQUNfTVNCOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmFkaW8gTUFDIEFkZHJlc3MsIG9mZnNldDogMHg4ICovCisgIF9fSSAgdWludDMyX3QgTUFDX0xTQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJhZGlvIE1BQyBBZGRyZXNzLCBvZmZzZXQ6IDB4QyAqLworICBfX0lPIHVpbnQzMl90IE1JU0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSYWRpbyBNaXNjZWxsYW5lb3VzLCBvZmZzZXQ6IDB4MTAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbMjM2XTsKKyAgX19JICB1aW50MzJfdCBEU01fVElNRVI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGVlcCBTbGVlcCBUaW1lciwgb2Zmc2V0OiAweDEwMCAqLworICBfX0lPIHVpbnQzMl90IERTTV9DT05UUk9MOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEZWVwIFNsZWVwIFRpbWVyIENvbnRyb2wsIG9mZnNldDogMHgxMDQgKi8KKyAgX19JTyB1aW50MzJfdCBEU01fT1NDX09GRlNFVDsgICAgICAgICAgICAgICAgICAgIC8qKjwgRGVlcCBTbGVlcCBXYWtldXAgVGltZSBPZmZzZXQsIG9mZnNldDogMHgxMDggKi8KKyAgX19JTyB1aW50MzJfdCBBTlRfU0xFRVA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQU5UIExpbmsgTGF5ZXIgU2xlZXAgVGltZSwgb2Zmc2V0OiAweDEwQyAqLworICBfX0lPIHVpbnQzMl90IEFOVF9XQUtFOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBTlQgTGluayBMYXllciBXYWtlIFRpbWUsIG9mZnNldDogMHgxMTAgKi8KKyAgX19JTyB1aW50MzJfdCBaSUdfU0xFRVA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgODAyLjE1LjQgTGluayBMYXllciBTbGVlcCBUaW1lLCBvZmZzZXQ6IDB4MTE0ICovCisgIF9fSU8gdWludDMyX3QgWklHX1dBS0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IDgwMi4xNS40IExpbmsgTGF5ZXIgV2FrZSBUaW1lLCBvZmZzZXQ6IDB4MTE4ICovCisgIF9fSU8gdWludDMyX3QgR0VOX1NMRUVQOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdlbmVyaWMgRlNLIExpbmsgTGF5ZXIgU2xlZXAgVGltZSwgb2Zmc2V0OiAweDExQyAqLworICBfX0lPIHVpbnQzMl90IEdFTl9XQUtFOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBHZW5lcmljIEZTSyBMaW5rIExheWVyIFdha2UgVGltZSwgb2Zmc2V0OiAweDEyMCAqLworICBfX0lPIHVpbnQzMl90IFJGX09TQ19DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSYWRpbyBPc2NpbGxhdG9yIENvbnRyb2wsIG9mZnNldDogMHgxMjQgKi8KKyAgX19JTyB1aW50MzJfdCBBTkFfVEVTVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmFkaW8gQW5hbG9nIFRlc3QgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MTI4ICovCisgIF9fSU8gdWludDMyX3QgQU5BX1RSSU07ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJhZGlvIEFuYWxvZyBUcmltIFJlZ2lzdGVycywgb2Zmc2V0OiAweDEyQyAqLworfSBSU0lNX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFJTSU0gUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBSU0lNX1JlZ2lzdGVyX01hc2tzIFJTSU0gUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIENPTlRST0wgLSBSYWRpbyBTeXN0ZW0gQ29udHJvbCAqLworI2RlZmluZSBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfRU5fTUFTSyAgICAgICgweDFVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfRU5fU0hJRlQgICAgICgwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX0VOKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9FTl9TSElGVCkpICYgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX0VOX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9TVEFUX01BU0sgICAgKDB4MlUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9TVEFUX1NISUZUICAgKDFVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfU1RBVCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX1NUQVRfU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9TVEFUX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9JTlRfRU5fTUFTSyAgKDB4MTBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfSU5UX0VOX1NISUZUICg0VSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX0lOVF9FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9JTlRfRU5fU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9JTlRfRU5fTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX0lOVF9NQVNLICAgICAoMHgyMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9JTlRfU0hJRlQgICAgKDVVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfSU5UKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX0lOVF9TSElGVCkpICYgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX0lOVF9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkZfT1NDX0VOX01BU0sgICAgICAgICAgICAgICgweEYwMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SRl9PU0NfRU5fU0hJRlQgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkZfT1NDX0VOKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX1JGX09TQ19FTl9TSElGVCkpICYgUlNJTV9DT05UUk9MX1JGX09TQ19FTl9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fR0FTS0VUX0JZUEFTU19PVlJEX0VOX01BU0sgKDB4MTAwMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfRU5fU0hJRlQgKDEyVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JBRElPX0dBU0tFVF9CWVBBU1NfT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfRU5fU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JBRElPX0dBU0tFVF9CWVBBU1NfT1ZSRF9NQVNLICgweDIwMDBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fR0FTS0VUX0JZUEFTU19PVlJEX1NISUZUICgxM1UpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfUkFESU9fR0FTS0VUX0JZUEFTU19PVlJEX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfUkFESU9fR0FTS0VUX0JZUEFTU19PVlJEX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9JUFBfT0JFXzNWX0JMRV9BQ1RJVkVfMV9NQVNLICgweDEwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0lQUF9PQkVfM1ZfQkxFX0FDVElWRV8xX1NISUZUICgxNlUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9JUFBfT0JFXzNWX0JMRV9BQ1RJVkVfMSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfSVBQX09CRV8zVl9CTEVfQUNUSVZFXzFfU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9JUFBfT0JFXzNWX0JMRV9BQ1RJVkVfMV9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfSVBQX09CRV8zVl9CTEVfQUNUSVZFXzJfTUFTSyAoMHgyMDAwMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9JUFBfT0JFXzNWX0JMRV9BQ1RJVkVfMl9TSElGVCAoMTdVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfSVBQX09CRV8zVl9CTEVfQUNUSVZFXzIoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX0lQUF9PQkVfM1ZfQkxFX0FDVElWRV8yX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfSVBQX09CRV8zVl9CTEVfQUNUSVZFXzJfTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JBRElPX1JBTV9BQ0NFU1NfT1ZSRF9FTl9NQVNLICgweDQwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JBRElPX1JBTV9BQ0NFU1NfT1ZSRF9FTl9TSElGVCAoMThVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fUkFNX0FDQ0VTU19PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX1JBRElPX1JBTV9BQ0NFU1NfT1ZSRF9FTl9TSElGVCkpICYgUlNJTV9DT05UUk9MX1JBRElPX1JBTV9BQ0NFU1NfT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fUkFNX0FDQ0VTU19PVlJEX01BU0sgICgweDgwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JBRElPX1JBTV9BQ0NFU1NfT1ZSRF9TSElGVCAoMTlVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fUkFNX0FDQ0VTU19PVlJEKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX1JBRElPX1JBTV9BQ0NFU1NfT1ZSRF9TSElGVCkpICYgUlNJTV9DT05UUk9MX1JBRElPX1JBTV9BQ0NFU1NfT1ZSRF9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUlNJTV9EU01fRVhJVF9NQVNLICAgICAgICAgICgweDEwMDAwMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SU0lNX0RTTV9FWElUX1NISUZUICAgICAgICAgKDIwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JTSU1fRFNNX0VYSVQoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9SU0lNX0RTTV9FWElUX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfUlNJTV9EU01fRVhJVF9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUlNJTV9TVE9QX0FDS19PVlJEX0VOX01BU0sgICgweDQwMDAwMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SU0lNX1NUT1BfQUNLX09WUkRfRU5fU0hJRlQgKDIyVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JTSU1fU1RPUF9BQ0tfT1ZSRF9FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9SU0lNX1NUT1BfQUNLX09WUkRfRU5fU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9SU0lNX1NUT1BfQUNLX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JTSU1fU1RPUF9BQ0tfT1ZSRF9NQVNLICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUlNJTV9TVE9QX0FDS19PVlJEX1NISUZUICAgICgyM1UpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SU0lNX1NUT1BfQUNLX09WUkQoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfUlNJTV9TVE9QX0FDS19PVlJEX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfUlNJTV9TVE9QX0FDS19PVlJEX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SRl9PU0NfUkVBRFlfTUFTSyAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SRl9PU0NfUkVBRFlfU0hJRlQgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWSh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9SRl9PU0NfUkVBRFlfU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9SRl9PU0NfUkVBRFlfTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWV9PVlJEX0VOX01BU0sgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWV9PVlJEX0VOX1NISUZUICAoMjVVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX09WUkRfRU4oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWV9PVlJEX0VOX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWV9PVlJEX01BU0sgICAgICAoMHg0MDAwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWV9PVlJEX1NISUZUICAgICAoMjZVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX09WUkQoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWV9PVlJEX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX09WUkRfTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0JMT0NLX1NPQ19SRVNFVFNfTUFTSyAgICAgICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTE9DS19TT0NfUkVTRVRTX1NISUZUICAgICAgKDI4VSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0JMT0NLX1NPQ19SRVNFVFMoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9CTE9DS19TT0NfUkVTRVRTX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfQkxPQ0tfU09DX1JFU0VUU19NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxPQ0tfUkFESU9fT1VUUFVUU19NQVNLICAgICgweDIwMDAwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0JMT0NLX1JBRElPX09VVFBVVFNfU0hJRlQgICAoMjlVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxPQ0tfUkFESU9fT1VUUFVUUyh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX0JMT0NLX1JBRElPX09VVFBVVFNfU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9CTE9DS19SQURJT19PVVRQVVRTX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9BTExPV19ERlRfUkVTRVRTX01BU0sgICAgICAgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQUxMT1dfREZUX1JFU0VUU19TSElGVCAgICAgICgzMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9BTExPV19ERlRfUkVTRVRTKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfQUxMT1dfREZUX1JFU0VUU19TSElGVCkpICYgUlNJTV9DT05UUk9MX0FMTE9XX0RGVF9SRVNFVFNfTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JBRElPX1JFU0VUX0JJVF9NQVNLICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SQURJT19SRVNFVF9CSVRfU0hJRlQgICAgICAgKDMxVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JBRElPX1JFU0VUX0JJVCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9SQURJT19SRVNFVF9CSVRfU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9SQURJT19SRVNFVF9CSVRfTUFTSykKKworLyohIEBuYW1lIEFDVElWRV9ERUxBWSAtIFJhZGlvIEFjdGl2ZSBFYXJseSBXYXJuaW5nICovCisjZGVmaW5lIFJTSU1fQUNUSVZFX0RFTEFZX0JMRV9GSU5FX0RFTEFZX01BU0sgICAgKDB4M0ZVKQorI2RlZmluZSBSU0lNX0FDVElWRV9ERUxBWV9CTEVfRklORV9ERUxBWV9TSElGVCAgICgwVSkKKyNkZWZpbmUgUlNJTV9BQ1RJVkVfREVMQVlfQkxFX0ZJTkVfREVMQVkoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQUNUSVZFX0RFTEFZX0JMRV9GSU5FX0RFTEFZX1NISUZUKSkgJiBSU0lNX0FDVElWRV9ERUxBWV9CTEVfRklORV9ERUxBWV9NQVNLKQorI2RlZmluZSBSU0lNX0FDVElWRV9ERUxBWV9CTEVfQ09BUlNFX0RFTEFZX01BU0sgICgweEYwMDAwVSkKKyNkZWZpbmUgUlNJTV9BQ1RJVkVfREVMQVlfQkxFX0NPQVJTRV9ERUxBWV9TSElGVCAoMTZVKQorI2RlZmluZSBSU0lNX0FDVElWRV9ERUxBWV9CTEVfQ09BUlNFX0RFTEFZKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BQ1RJVkVfREVMQVlfQkxFX0NPQVJTRV9ERUxBWV9TSElGVCkpICYgUlNJTV9BQ1RJVkVfREVMQVlfQkxFX0NPQVJTRV9ERUxBWV9NQVNLKQorCisvKiEgQG5hbWUgTUFDX01TQiAtIFJhZGlvIE1BQyBBZGRyZXNzICovCisjZGVmaW5lIFJTSU1fTUFDX01TQl9NQUNfQUREUl9NU0JfTUFTSyAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBSU0lNX01BQ19NU0JfTUFDX0FERFJfTVNCX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgUlNJTV9NQUNfTVNCX01BQ19BRERSX01TQih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fTUFDX01TQl9NQUNfQUREUl9NU0JfU0hJRlQpKSAmIFJTSU1fTUFDX01TQl9NQUNfQUREUl9NU0JfTUFTSykKKworLyohIEBuYW1lIE1BQ19MU0IgLSBSYWRpbyBNQUMgQWRkcmVzcyAqLworI2RlZmluZSBSU0lNX01BQ19MU0JfTUFDX0FERFJfTFNCX01BU0sgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUlNJTV9NQUNfTFNCX01BQ19BRERSX0xTQl9TSElGVCAgICAgICAgICAoMFUpCisjZGVmaW5lIFJTSU1fTUFDX0xTQl9NQUNfQUREUl9MU0IoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX01BQ19MU0JfTUFDX0FERFJfTFNCX1NISUZUKSkgJiBSU0lNX01BQ19MU0JfTUFDX0FERFJfTFNCX01BU0spCisKKy8qISBAbmFtZSBNSVNDIC0gUmFkaW8gTWlzY2VsbGFuZW91cyAqLworI2RlZmluZSBSU0lNX01JU0NfQU5BTE9HX1RFU1RfRU5fTUFTSyAgICAgICAgICAgICgweDFGVSkKKyNkZWZpbmUgUlNJTV9NSVNDX0FOQUxPR19URVNUX0VOX1NISUZUICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJTSU1fTUlTQ19BTkFMT0dfVEVTVF9FTih4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX01JU0NfQU5BTE9HX1RFU1RfRU5fU0hJRlQpKSAmIFJTSU1fTUlTQ19BTkFMT0dfVEVTVF9FTl9NQVNLKQorI2RlZmluZSBSU0lNX01JU0NfUkFESU9fVkVSU0lPTl9NQVNLICAgICAgICAgICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgUlNJTV9NSVNDX1JBRElPX1ZFUlNJT05fU0hJRlQgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBSU0lNX01JU0NfUkFESU9fVkVSU0lPTih4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9NSVNDX1JBRElPX1ZFUlNJT05fU0hJRlQpKSAmIFJTSU1fTUlTQ19SQURJT19WRVJTSU9OX01BU0spCisKKy8qISBAbmFtZSBEU01fVElNRVIgLSBEZWVwIFNsZWVwIFRpbWVyICovCisjZGVmaW5lIFJTSU1fRFNNX1RJTUVSX0RTTV9USU1FUl9NQVNLICAgICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgUlNJTV9EU01fVElNRVJfRFNNX1RJTUVSX1NISUZUICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJTSU1fRFNNX1RJTUVSX0RTTV9USU1FUih4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9USU1FUl9EU01fVElNRVJfU0hJRlQpKSAmIFJTSU1fRFNNX1RJTUVSX0RTTV9USU1FUl9NQVNLKQorCisvKiEgQG5hbWUgRFNNX0NPTlRST0wgLSBEZWVwIFNsZWVwIFRpbWVyIENvbnRyb2wgKi8KKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fQU5UX1JFQURZX01BU0sgICAgICAoMHgxVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fQU5UX1JFQURZX1NISUZUICAgICAoMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX0FOVF9SRUFEWSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0RTTV9BTlRfUkVBRFlfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfRFNNX0FOVF9SRUFEWV9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9ERUVQX1NMRUVQX1NUQVRVU19NQVNLICgweDJVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9ERUVQX1NMRUVQX1NUQVRVU19TSElGVCAoMVUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX0RFRVBfU0xFRVBfU1RBVFVTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9BTlRfREVFUF9TTEVFUF9TVEFUVVNfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfQU5UX0RFRVBfU0xFRVBfU1RBVFVTX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX0FOVF9GSU5JU0hFRF9NQVNLICAgKDB4NFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX0FOVF9GSU5JU0hFRF9TSElGVCAgKDJVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9BTlRfRklOSVNIRUQoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9EU01fQU5UX0ZJTklTSEVEX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0RTTV9BTlRfRklOSVNIRURfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX1JFUVVFU1RfRU5fTUFTSyAoMHg4VSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX1JFUVVFU1RfRU5fU0hJRlQgKDNVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfUkVRVUVTVF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19SRVFVRVNUX0VOX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfUkVRVUVTVF9FTl9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9TTEVFUF9SRVFVRVNUX01BU0sgICgweDEwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfU0xFRVBfUkVRVUVTVF9TSElGVCAoNFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NMRUVQX1JFUVVFU1QoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0FOVF9TTEVFUF9SRVFVRVNUX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0FOVF9TTEVFUF9SRVFVRVNUX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19SRVFfTUFTSyAgICAgKDB4MjBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfUkVRX1NISUZUICAgICg1VSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX1JFUSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19SRVFfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19SRVFfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX0lOVEVSUlVQVF9FTl9NQVNLICgweDQwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX0lOVEVSUlVQVF9FTl9TSElGVCAoNlUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19JTlRFUlJVUFRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfSU5URVJSVVBUX0VOX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfSU5URVJSVVBUX0VOX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19SRVFfSU5UX01BU0sgKDB4ODBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfUkVRX0lOVF9TSElGVCAoN1UpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19SRVFfSU5UKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfUkVRX0lOVF9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX1JFUV9JTlRfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fR0VOX1JFQURZX01BU0sgICAgICAoMHgxMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9HRU5fUkVBRFlfU0hJRlQgICAgICg4VSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fR0VOX1JFQURZKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfRFNNX0dFTl9SRUFEWV9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9EU01fR0VOX1JFQURZX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX0RFRVBfU0xFRVBfU1RBVFVTX01BU0sgKDB4MjAwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9HRU5fREVFUF9TTEVFUF9TVEFUVVNfU0hJRlQgKDlVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9ERUVQX1NMRUVQX1NUQVRVUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfR0VOX0RFRVBfU0xFRVBfU1RBVFVTX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0dFTl9ERUVQX1NMRUVQX1NUQVRVU19NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9HRU5fRklOSVNIRURfTUFTSyAgICgweDQwMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX0dFTl9GSU5JU0hFRF9TSElGVCAgKDEwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fR0VOX0ZJTklTSEVEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfRFNNX0dFTl9GSU5JU0hFRF9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9EU01fR0VOX0ZJTklTSEVEX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19SRVFVRVNUX0VOX01BU0sgKDB4ODAwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9HRU5fU1lTQ0xLX1JFUVVFU1RfRU5fU0hJRlQgKDExVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9HRU5fU1lTQ0xLX1JFUVVFU1RfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRVUVTVF9FTl9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9HRU5fU1lTQ0xLX1JFUVVFU1RfRU5fTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9HRU5fU0xFRVBfUkVRVUVTVF9NQVNLICAoMHgxMDAwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9HRU5fU0xFRVBfUkVRVUVTVF9TSElGVCAoMTJVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TTEVFUF9SRVFVRVNUKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9HRU5fU0xFRVBfUkVRVUVTVF9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9HRU5fU0xFRVBfUkVRVUVTVF9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRX01BU0sgICAgICgweDIwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRX1NISUZUICAgICgxM1UpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19SRVEoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19JTlRFUlJVUFRfRU5fTUFTSyAoMHg0MDAwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9HRU5fU1lTQ0xLX0lOVEVSUlVQVF9FTl9TSElGVCAoMTRVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfSU5URVJSVVBUX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9HRU5fU1lTQ0xLX0lOVEVSUlVQVF9FTl9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9HRU5fU1lTQ0xLX0lOVEVSUlVQVF9FTl9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRX0lOVF9NQVNLICgweDgwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRX0lOVF9TSElGVCAoMTVVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRX0lOVCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9HRU5fU1lTQ0xLX1JFUV9JTlRfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19SRVFfSU5UX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX1pJR19SRUFEWV9NQVNLICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9aSUdfUkVBRFlfU0hJRlQgICAgICgxNlUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX1pJR19SRUFEWSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0RTTV9aSUdfUkVBRFlfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfRFNNX1pJR19SRUFEWV9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19ERUVQX1NMRUVQX1NUQVRVU19NQVNLICgweDIwMDAwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfREVFUF9TTEVFUF9TVEFUVVNfU0hJRlQgKDE3VSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfREVFUF9TTEVFUF9TVEFUVVMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX1pJR19ERUVQX1NMRUVQX1NUQVRVU19TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9aSUdfREVFUF9TTEVFUF9TVEFUVVNfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fWklHX0ZJTklTSEVEX01BU0sgICAoMHg0MDAwMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX1pJR19GSU5JU0hFRF9TSElGVCAgKDE4VSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fWklHX0ZJTklTSEVEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfRFNNX1pJR19GSU5JU0hFRF9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9EU01fWklHX0ZJTklTSEVEX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVFVRVNUX0VOX01BU0sgKDB4ODAwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfUkVRVUVTVF9FTl9TSElGVCAoMTlVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfUkVRVUVTVF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVFVRVNUX0VOX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfUkVRVUVTVF9FTl9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19TTEVFUF9SRVFVRVNUX01BU0sgICgweDEwMDAwMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX1NMRUVQX1JFUVVFU1RfU0hJRlQgKDIwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfU0xFRVBfUkVRVUVTVCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfWklHX1NMRUVQX1JFUVVFU1RfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfWklHX1NMRUVQX1JFUVVFU1RfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfU1lTQ0xLX1JFUV9NQVNLICAgICAoMHgyMDAwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfUkVRX1NISUZUICAgICgyMVUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVEoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfUkVRX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfUkVRX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19JTlRFUlJVUFRfRU5fTUFTSyAoMHg0MDAwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfSU5URVJSVVBUX0VOX1NISUZUICgyMlUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19JTlRFUlJVUFRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfSU5URVJSVVBUX0VOX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfSU5URVJSVVBUX0VOX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVFfSU5UX01BU0sgKDB4ODAwMDAwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfU1lTQ0xLX1JFUV9JTlRfU0hJRlQgKDIzVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfU1lTQ0xLX1JFUV9JTlQoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVFfSU5UX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfUkVRX0lOVF9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9USU1FUl9DTFJfTUFTSyAgICAgICgweDgwMDAwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9USU1FUl9DTFJfU0hJRlQgICAgICgyN1UpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX1RJTUVSX0NMUih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0RTTV9USU1FUl9DTFJfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfRFNNX1RJTUVSX0NMUl9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9USU1FUl9FTl9NQVNLICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fVElNRVJfRU5fU0hJRlQgICAgICAoMzFVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9USU1FUl9FTih4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9EU01fVElNRVJfRU5fU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfRFNNX1RJTUVSX0VOX01BU0spCisKKy8qISBAbmFtZSBEU01fT1NDX09GRlNFVCAtIERlZXAgU2xlZXAgV2FrZXVwIFRpbWUgT2Zmc2V0ICovCisjZGVmaW5lIFJTSU1fRFNNX09TQ19PRkZTRVRfRFNNX09TQ19TVEFCSUxJWkVfVElNRV9NQVNLICgweDNGRlUpCisjZGVmaW5lIFJTSU1fRFNNX09TQ19PRkZTRVRfRFNNX09TQ19TVEFCSUxJWkVfVElNRV9TSElGVCAoMFUpCisjZGVmaW5lIFJTSU1fRFNNX09TQ19PRkZTRVRfRFNNX09TQ19TVEFCSUxJWkVfVElNRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX09TQ19PRkZTRVRfRFNNX09TQ19TVEFCSUxJWkVfVElNRV9TSElGVCkpICYgUlNJTV9EU01fT1NDX09GRlNFVF9EU01fT1NDX1NUQUJJTElaRV9USU1FX01BU0spCisKKy8qISBAbmFtZSBBTlRfU0xFRVAgLSBBTlQgTGluayBMYXllciBTbGVlcCBUaW1lICovCisjZGVmaW5lIFJTSU1fQU5UX1NMRUVQX0FOVF9TTEVFUF9USU1FX01BU0sgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgUlNJTV9BTlRfU0xFRVBfQU5UX1NMRUVQX1RJTUVfU0hJRlQgICAgICAoMFUpCisjZGVmaW5lIFJTSU1fQU5UX1NMRUVQX0FOVF9TTEVFUF9USU1FKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOVF9TTEVFUF9BTlRfU0xFRVBfVElNRV9TSElGVCkpICYgUlNJTV9BTlRfU0xFRVBfQU5UX1NMRUVQX1RJTUVfTUFTSykKKworLyohIEBuYW1lIEFOVF9XQUtFIC0gQU5UIExpbmsgTGF5ZXIgV2FrZSBUaW1lICovCisjZGVmaW5lIFJTSU1fQU5UX1dBS0VfQU5UX1dBS0VfVElNRV9NQVNLICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgUlNJTV9BTlRfV0FLRV9BTlRfV0FLRV9USU1FX1NISUZUICAgICAgICAoMFUpCisjZGVmaW5lIFJTSU1fQU5UX1dBS0VfQU5UX1dBS0VfVElNRSh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOVF9XQUtFX0FOVF9XQUtFX1RJTUVfU0hJRlQpKSAmIFJTSU1fQU5UX1dBS0VfQU5UX1dBS0VfVElNRV9NQVNLKQorCisvKiEgQG5hbWUgWklHX1NMRUVQIC0gODAyLjE1LjQgTGluayBMYXllciBTbGVlcCBUaW1lICovCisjZGVmaW5lIFJTSU1fWklHX1NMRUVQX1pJR19TTEVFUF9USU1FX01BU0sgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgUlNJTV9aSUdfU0xFRVBfWklHX1NMRUVQX1RJTUVfU0hJRlQgICAgICAoMFUpCisjZGVmaW5lIFJTSU1fWklHX1NMRUVQX1pJR19TTEVFUF9USU1FKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1pJR19TTEVFUF9aSUdfU0xFRVBfVElNRV9TSElGVCkpICYgUlNJTV9aSUdfU0xFRVBfWklHX1NMRUVQX1RJTUVfTUFTSykKKworLyohIEBuYW1lIFpJR19XQUtFIC0gODAyLjE1LjQgTGluayBMYXllciBXYWtlIFRpbWUgKi8KKyNkZWZpbmUgUlNJTV9aSUdfV0FLRV9aSUdfV0FLRV9USU1FX01BU0sgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBSU0lNX1pJR19XQUtFX1pJR19XQUtFX1RJTUVfU0hJRlQgICAgICAgICgwVSkKKyNkZWZpbmUgUlNJTV9aSUdfV0FLRV9aSUdfV0FLRV9USU1FKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fWklHX1dBS0VfWklHX1dBS0VfVElNRV9TSElGVCkpICYgUlNJTV9aSUdfV0FLRV9aSUdfV0FLRV9USU1FX01BU0spCisKKy8qISBAbmFtZSBHRU5fU0xFRVAgLSBHZW5lcmljIEZTSyBMaW5rIExheWVyIFNsZWVwIFRpbWUgKi8KKyNkZWZpbmUgUlNJTV9HRU5fU0xFRVBfR0VOX1NMRUVQX1RJTUVfTUFTSyAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBSU0lNX0dFTl9TTEVFUF9HRU5fU0xFRVBfVElNRV9TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgUlNJTV9HRU5fU0xFRVBfR0VOX1NMRUVQX1RJTUUoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fR0VOX1NMRUVQX0dFTl9TTEVFUF9USU1FX1NISUZUKSkgJiBSU0lNX0dFTl9TTEVFUF9HRU5fU0xFRVBfVElNRV9NQVNLKQorCisvKiEgQG5hbWUgR0VOX1dBS0UgLSBHZW5lcmljIEZTSyBMaW5rIExheWVyIFdha2UgVGltZSAqLworI2RlZmluZSBSU0lNX0dFTl9XQUtFX0dFTl9XQUtFX1RJTUVfTUFTSyAgICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIFJTSU1fR0VOX1dBS0VfR0VOX1dBS0VfVElNRV9TSElGVCAgICAgICAgKDBVKQorI2RlZmluZSBSU0lNX0dFTl9XQUtFX0dFTl9XQUtFX1RJTUUoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9HRU5fV0FLRV9HRU5fV0FLRV9USU1FX1NISUZUKSkgJiBSU0lNX0dFTl9XQUtFX0dFTl9XQUtFX1RJTUVfTUFTSykKKworLyohIEBuYW1lIFJGX09TQ19DVFJMIC0gUmFkaW8gT3NjaWxsYXRvciBDb250cm9sICovCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9BTENfQ09VTlRfU0VMX01BU0sgKDB4M1UpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9BTENfQ09VTlRfU0VMX1NISUZUICgwVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0FMQ19DT1VOVF9TRUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfQUxDX0NPVU5UX1NFTF9TSElGVCkpICYgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0FMQ19DT1VOVF9TRUxfTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0FMQ19PTl9NQVNLICAgICAoMHg0VSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0FMQ19PTl9TSElGVCAgICAoMlUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9BTENfT04oeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfQUxDX09OX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfQUxDX09OX01BU0spCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkZfT1NDX0JZUEFTU19FTl9NQVNLICAgKDB4OFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkZfT1NDX0JZUEFTU19FTl9TSElGVCAgKDNVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JGX09TQ19CWVBBU1NfRU4oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9SRl9PU0NfQ1RSTF9SRl9PU0NfQllQQVNTX0VOX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX1JGX09TQ19CWVBBU1NfRU5fTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0NPTVBfQklBU19NQVNLICAoMHgxRjBVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfQ09NUF9CSUFTX1NISUZUICg0VSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0NPTVBfQklBUyh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9DT01QX0JJQVNfU0hJRlQpKSAmIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9DT01QX0JJQVNfTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0RDX0NPVVBfTU9ERV9FTl9NQVNLICgweDIwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9EQ19DT1VQX01PREVfRU5fU0hJRlQgKDlVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfRENfQ09VUF9NT0RFX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0RDX0NPVVBfTU9ERV9FTl9TSElGVCkpICYgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0RDX0NPVVBfTU9ERV9FTl9NQVNLKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfRElBR1NFTF9NQVNLICAgICgweDQwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9ESUFHU0VMX1NISUZUICAgKDEwVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0RJQUdTRUwoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9ESUFHU0VMX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfRElBR1NFTF9NQVNLKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfRElHX0NMS19PTl9NQVNLICgweDgwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9ESUdfQ0xLX09OX1NISUZUICgxMVUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9ESUdfQ0xLX09OKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfRElHX0NMS19PTl9TSElGVCkpICYgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0RJR19DTEtfT05fTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0dNX01BU0sgICAgICAgICAoMHgxRjAwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9HTV9TSElGVCAgICAgICAgKDEyVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0dNKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9HTV9TSElGVCkpICYgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0dNX01BU0spCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9PTl9PVlJEX01BU0sgICAgKDB4MjAwMDBVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfT05fT1ZSRF9TSElGVCAgICgxN1UpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9PTl9PVlJEKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfT05fT1ZSRF9TSElGVCkpICYgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX09OX09WUkRfTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX09OX09WUkRfT05fTUFTSyAoMHg0MDAwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9PTl9PVlJEX09OX1NISUZUICgxOFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9PTl9PVlJEX09OKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfT05fT1ZSRF9PTl9TSElGVCkpICYgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX09OX09WUkRfT05fTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX1JFQURZX0NPVU5UX1NFTF9NQVNLICgweDMwMDAwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9SRUFEWV9DT1VOVF9TRUxfU0hJRlQgKDIwVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX1JFQURZX0NPVU5UX1NFTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9SRUFEWV9DT1VOVF9TRUxfU0hJRlQpKSAmIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9SRUFEWV9DT1VOVF9TRUxfTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX1JGX0VOX1NFTF9NQVNLICgweDgwMDAwMDBVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfUkZfRU5fU0VMX1NISUZUICgyN1UpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19SRl9FTl9TRUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfUkZfRU5fU0VMX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfUkZfRU5fU0VMX01BU0spCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19PVlJEX01BU0sgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfT1ZSRF9TSElGVCAoMjhVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfT1ZSRCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX09WUkRfU0hJRlQpKSAmIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19PVlJEX01BU0spCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19PVlJEX0VOX01BU0sgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfT1ZSRF9FTl9TSElGVCAoMjlVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19PVlJEX0VOX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX1JGX0FCT1JUX09WUkRfTUFTSyAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fUkZfQUJPUlRfT1ZSRF9TSElGVCAoMzBVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX1JGX0FCT1JUX09WUkQoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19SRl9BQk9SVF9PVlJEX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX1JBRElPX1JGX0FCT1JUX09WUkRfTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19SRl9BQk9SVF9PVlJEX0VOX01BU0sgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX1JGX0FCT1JUX09WUkRfRU5fU0hJRlQgKDMxVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19SRl9BQk9SVF9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19SRl9BQk9SVF9PVlJEX0VOX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX1JBRElPX1JGX0FCT1JUX09WUkRfRU5fTUFTSykKKworLyohIEBuYW1lIEFOQV9URVNUIC0gUmFkaW8gQW5hbG9nIFRlc3QgUmVnaXN0ZXJzICovCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkJfTERPX0xTX0JZUF9NQVNLICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkJfTERPX0xTX0JZUF9TSElGVCAgICAgICAgKDBVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JCX0xET19MU19CWVAoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVEVTVF9CQl9MRE9fTFNfQllQX1NISUZUKSkgJiBSU0lNX0FOQV9URVNUX0JCX0xET19MU19CWVBfTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9MRE9fTFNfRElBR1NFTF9NQVNLICAgICAoMHgyVSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9MRE9fTFNfRElBR1NFTF9TSElGVCAgICAoMVUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkJfTERPX0xTX0RJQUdTRUwoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9URVNUX0JCX0xET19MU19ESUFHU0VMX1NISUZUKSkgJiBSU0lNX0FOQV9URVNUX0JCX0xET19MU19ESUFHU0VMX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkJfTERPX1hPX0JZUF9PTl9NQVNLICAgICAgKDB4NFUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkJfTERPX1hPX0JZUF9PTl9TSElGVCAgICAgKDJVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JCX0xET19YT19CWVBfT04oeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVEVTVF9CQl9MRE9fWE9fQllQX09OX1NISUZUKSkgJiBSU0lNX0FOQV9URVNUX0JCX0xET19YT19CWVBfT05fTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9MRE9fWE9fRElBR1NFTF9NQVNLICAgICAoMHg4VSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9MRE9fWE9fRElBR1NFTF9TSElGVCAgICAoM1UpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkJfTERPX1hPX0RJQUdTRUwoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9URVNUX0JCX0xET19YT19ESUFHU0VMX1NISUZUKSkgJiBSU0lNX0FOQV9URVNUX0JCX0xET19YT19ESUFHU0VMX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkJfWFRBTF9URVNUX01BU0sgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JCX1hUQUxfVEVTVF9TSElGVCAgICAgICAgICg0VSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9YVEFMX1RFU1QoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RFU1RfQkJfWFRBTF9URVNUX1NISUZUKSkgJiBSU0lNX0FOQV9URVNUX0JCX1hUQUxfVEVTVF9NQVNLKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JHX0RJQUdCVUZfTUFTSyAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CR19ESUFHQlVGX1NISUZUICAgICAgICAgICAoNVUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkdfRElBR0JVRih4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9URVNUX0JHX0RJQUdCVUZfU0hJRlQpKSAmIFJTSU1fQU5BX1RFU1RfQkdfRElBR0JVRl9NQVNLKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JHX0RJQUdTRUxfTUFTSyAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CR19ESUFHU0VMX1NISUZUICAgICAgICAgICAoNlUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkdfRElBR1NFTCh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9URVNUX0JHX0RJQUdTRUxfU0hJRlQpKSAmIFJTSU1fQU5BX1RFU1RfQkdfRElBR1NFTF9NQVNLKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JHX1NUQVJUVVBGT1JDRV9NQVNLICAgICAgICgweDgwVSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CR19TVEFSVFVQRk9SQ0VfU0hJRlQgICAgICAoN1UpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkdfU1RBUlRVUEZPUkNFKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9URVNUX0JHX1NUQVJUVVBGT1JDRV9TSElGVCkpICYgUlNJTV9BTkFfVEVTVF9CR19TVEFSVFVQRk9SQ0VfTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9ESUFHXzEyMzRfT05fTUFTSyAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0RJQUdfMTIzNF9PTl9TSElGVCAgICAgICAgICg4VSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9ESUFHXzEyMzRfT04oeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RFU1RfRElBR18xMjM0X09OX1NISUZUKSkgJiBSU0lNX0FOQV9URVNUX0RJQUdfMTIzNF9PTl9NQVNLKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0RJQUcyU09DQURDX0RFQ19NQVNLICAgICAgICgweDYwMFUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfRElBRzJTT0NBRENfREVDX1NISUZUICAgICAgKDlVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0RJQUcyU09DQURDX0RFQyh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVEVTVF9ESUFHMlNPQ0FEQ19ERUNfU0hJRlQpKSAmIFJTSU1fQU5BX1RFU1RfRElBRzJTT0NBRENfREVDX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfRElBRzJTT0NBRENfREVDX09OX01BU0sgICAgKDB4ODAwVSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9ESUFHMlNPQ0FEQ19ERUNfT05fU0hJRlQgICAoMTFVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0RJQUcyU09DQURDX0RFQ19PTih4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVEVTVF9ESUFHMlNPQ0FEQ19ERUNfT05fU0hJRlQpKSAmIFJTSU1fQU5BX1RFU1RfRElBRzJTT0NBRENfREVDX09OX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfRElBR0NPREVfTUFTSyAgICAgICAgICAgICAgKDB4NzAwMFUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfRElBR0NPREVfU0hJRlQgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9ESUFHQ09ERSh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RFU1RfRElBR0NPREVfU0hJRlQpKSAmIFJTSU1fQU5BX1RFU1RfRElBR0NPREVfTUFTSykKKworLyohIEBuYW1lIEFOQV9UUklNIC0gUmFkaW8gQW5hbG9nIFRyaW0gUmVnaXN0ZXJzICovCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfTERPX0xTX1NQQVJFX01BU0sgICAgICAgKDB4M1UpCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfTERPX0xTX1NQQVJFX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBSU0lNX0FOQV9UUklNX0JCX0xET19MU19TUEFSRSh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVFJJTV9CQl9MRE9fTFNfU1BBUkVfU0hJRlQpKSAmIFJTSU1fQU5BX1RSSU1fQkJfTERPX0xTX1NQQVJFX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfTERPX0xTX1RSSU1fTUFTSyAgICAgICAgKDB4MzhVKQorI2RlZmluZSBSU0lNX0FOQV9UUklNX0JCX0xET19MU19UUklNX1NISUZUICAgICAgICgzVSkKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9MRE9fTFNfVFJJTSh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RSSU1fQkJfTERPX0xTX1RSSU1fU0hJRlQpKSAmIFJTSU1fQU5BX1RSSU1fQkJfTERPX0xTX1RSSU1fTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9MRE9fWE9fU1BBUkVfTUFTSyAgICAgICAoMHhDMFUpCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfTERPX1hPX1NQQVJFX1NISUZUICAgICAgKDZVKQorI2RlZmluZSBSU0lNX0FOQV9UUklNX0JCX0xET19YT19TUEFSRSh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVFJJTV9CQl9MRE9fWE9fU1BBUkVfU0hJRlQpKSAmIFJTSU1fQU5BX1RSSU1fQkJfTERPX1hPX1NQQVJFX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfTERPX1hPX1RSSU1fTUFTSyAgICAgICAgKDB4NzAwVSkKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9MRE9fWE9fVFJJTV9TSElGVCAgICAgICAoOFUpCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfTERPX1hPX1RSSU0oeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9UUklNX0JCX0xET19YT19UUklNX1NISUZUKSkgJiBSU0lNX0FOQV9UUklNX0JCX0xET19YT19UUklNX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfWFRBTF9TUEFSRV9NQVNLICAgICAgICAgKDB4RjgwMFUpCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfWFRBTF9TUEFSRV9TSElGVCAgICAgICAgKDExVSkKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9YVEFMX1NQQVJFKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RSSU1fQkJfWFRBTF9TUEFSRV9TSElGVCkpICYgUlNJTV9BTkFfVFJJTV9CQl9YVEFMX1NQQVJFX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfWFRBTF9UUklNX01BU0sgICAgICAgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9YVEFMX1RSSU1fU0hJRlQgICAgICAgICAoMTZVKQorI2RlZmluZSBSU0lNX0FOQV9UUklNX0JCX1hUQUxfVFJJTSh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVFJJTV9CQl9YVEFMX1RSSU1fU0hJRlQpKSAmIFJTSU1fQU5BX1RSSU1fQkJfWFRBTF9UUklNX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkdfMVZfVFJJTV9NQVNLICAgICAgICAgICAgKDB4RjAwMDAwMFUpCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkdfMVZfVFJJTV9TSElGVCAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CR18xVl9UUklNKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RSSU1fQkdfMVZfVFJJTV9TSElGVCkpICYgUlNJTV9BTkFfVFJJTV9CR18xVl9UUklNX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkdfSUJJQVNfNVVfVFJJTV9NQVNLICAgICAgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBSU0lNX0FOQV9UUklNX0JHX0lCSUFTXzVVX1RSSU1fU0hJRlQgICAgICgyOFUpCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkdfSUJJQVNfNVVfVFJJTSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9UUklNX0JHX0lCSUFTXzVVX1RSSU1fU0hJRlQpKSAmIFJTSU1fQU5BX1RSSU1fQkdfSUJJQVNfNVVfVFJJTV9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUlNJTV9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFJTSU0gLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBSU0lNIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBSU0lNX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDU5MDAwdSkKKy8qKiBQZXJpcGhlcmFsIFJTSU0gYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFJTSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSU0lNX1R5cGUgKilSU0lNX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgUlNJTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFJTSU1fQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBSU0lNX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFJTSU0gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFJTSU1fQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBSU0lNIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBSU0lNX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUlRDIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUlRDX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFJUQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogUlRDIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBUU1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlRDIFRpbWUgU2Vjb25kcyBSZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50MzJfdCBUUFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlRDIFRpbWUgUHJlc2NhbGVyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IFRBUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSVEMgVGltZSBBbGFybSBSZWdpc3Rlciwgb2Zmc2V0OiAweDggKi8KKyAgX19JTyB1aW50MzJfdCBUQ1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlRDIFRpbWUgQ29tcGVuc2F0aW9uIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworICBfX0lPIHVpbnQzMl90IENSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSVEMgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDEwICovCisgIF9fSU8gdWludDMyX3QgU1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJUQyBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHgxNCAqLworICBfX0lPIHVpbnQzMl90IExSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSVEMgTG9jayBSZWdpc3Rlciwgb2Zmc2V0OiAweDE4ICovCisgIF9fSU8gdWludDMyX3QgSUVSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJUQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MUMgKi8KK30gUlRDX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFJUQyBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFJUQ19SZWdpc3Rlcl9NYXNrcyBSVEMgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFRTUiAtIFJUQyBUaW1lIFNlY29uZHMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1RTUl9UU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFJUQ19UU1JfVFNSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBSVENfVFNSX1RTUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX1RTUl9UU1JfU0hJRlQpKSAmIFJUQ19UU1JfVFNSX01BU0spCisKKy8qISBAbmFtZSBUUFIgLSBSVEMgVGltZSBQcmVzY2FsZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1RQUl9UUFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgUlRDX1RQUl9UUFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJUQ19UUFJfVFBSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfVFBSX1RQUl9TSElGVCkpICYgUlRDX1RQUl9UUFJfTUFTSykKKworLyohIEBuYW1lIFRBUiAtIFJUQyBUaW1lIEFsYXJtIFJlZ2lzdGVyICovCisjZGVmaW5lIFJUQ19UQVJfVEFSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBSVENfVEFSX1RBUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUlRDX1RBUl9UQVIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19UQVJfVEFSX1NISUZUKSkgJiBSVENfVEFSX1RBUl9NQVNLKQorCisvKiEgQG5hbWUgVENSIC0gUlRDIFRpbWUgQ29tcGVuc2F0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFJUQ19UQ1JfVENSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBSVENfVENSX1RDUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUlRDX1RDUl9UQ1IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19UQ1JfVENSX1NISUZUKSkgJiBSVENfVENSX1RDUl9NQVNLKQorI2RlZmluZSBSVENfVENSX0NJUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGMDBVKQorI2RlZmluZSBSVENfVENSX0NJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgUlRDX1RDUl9DSVIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19UQ1JfQ0lSX1NISUZUKSkgJiBSVENfVENSX0NJUl9NQVNLKQorI2RlZmluZSBSVENfVENSX1RDVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGMDAwMFUpCisjZGVmaW5lIFJUQ19UQ1JfVENWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgUlRDX1RDUl9UQ1YoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19UQ1JfVENWX1NISUZUKSkgJiBSVENfVENSX1RDVl9NQVNLKQorI2RlZmluZSBSVENfVENSX0NJQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgUlRDX1RDUl9DSUNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBSVENfVENSX0NJQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX1RDUl9DSUNfU0hJRlQpKSAmIFJUQ19UQ1JfQ0lDX01BU0spCisKKy8qISBAbmFtZSBDUiAtIFJUQyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFJUQ19DUl9TV1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFJUQ19DUl9TV1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBSVENfQ1JfU1dSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0NSX1NXUl9TSElGVCkpICYgUlRDX0NSX1NXUl9NQVNLKQorI2RlZmluZSBSVENfQ1JfV1BFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBSVENfQ1JfV1BFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgUlRDX0NSX1dQRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19DUl9XUEVfU0hJRlQpKSAmIFJUQ19DUl9XUEVfTUFTSykKKyNkZWZpbmUgUlRDX0NSX1NVUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgUlRDX0NSX1NVUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFJUQ19DUl9TVVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfQ1JfU1VQX1NISUZUKSkgJiBSVENfQ1JfU1VQX01BU0spCisjZGVmaW5lIFJUQ19DUl9VTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFJUQ19DUl9VTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBSVENfQ1JfVU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0NSX1VNX1NISUZUKSkgJiBSVENfQ1JfVU1fTUFTSykKKyNkZWZpbmUgUlRDX0NSX1dQU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFJUQ19DUl9XUFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBSVENfQ1JfV1BTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0NSX1dQU19TSElGVCkpICYgUlRDX0NSX1dQU19NQVNLKQorI2RlZmluZSBSVENfQ1JfT1NDRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMFUpCisjZGVmaW5lIFJUQ19DUl9PU0NFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBSVENfQ1JfT1NDRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0NSX09TQ0VfU0hJRlQpKSAmIFJUQ19DUl9PU0NFX01BU0spCisjZGVmaW5lIFJUQ19DUl9DTEtPX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgUlRDX0NSX0NMS09fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoOVUpCisjZGVmaW5lIFJUQ19DUl9DTEtPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfQ1JfQ0xLT19TSElGVCkpICYgUlRDX0NSX0NMS09fTUFTSykKKyNkZWZpbmUgUlRDX0NSX1NDMTZQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDBVKQorI2RlZmluZSBSVENfQ1JfU0MxNlBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxMFUpCisjZGVmaW5lIFJUQ19DUl9TQzE2UCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfQ1JfU0MxNlBfU0hJRlQpKSAmIFJUQ19DUl9TQzE2UF9NQVNLKQorI2RlZmluZSBSVENfQ1JfU0M4UF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMFUpCisjZGVmaW5lIFJUQ19DUl9TQzhQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDExVSkKKyNkZWZpbmUgUlRDX0NSX1NDOFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19DUl9TQzhQX1NISUZUKSkgJiBSVENfQ1JfU0M4UF9NQVNLKQorI2RlZmluZSBSVENfQ1JfU0M0UF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDBVKQorI2RlZmluZSBSVENfQ1JfU0M0UF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgxMlUpCisjZGVmaW5lIFJUQ19DUl9TQzRQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfQ1JfU0M0UF9TSElGVCkpICYgUlRDX0NSX1NDNFBfTUFTSykKKyNkZWZpbmUgUlRDX0NSX1NDMlBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwVSkKKyNkZWZpbmUgUlRDX0NSX1NDMlBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMTNVKQorI2RlZmluZSBSVENfQ1JfU0MyUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0NSX1NDMlBfU0hJRlQpKSAmIFJUQ19DUl9TQzJQX01BU0spCisKKy8qISBAbmFtZSBTUiAtIFJUQyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1NSX1RJRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgUlRDX1NSX1RJRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJUQ19TUl9USUYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfU1JfVElGX1NISUZUKSkgJiBSVENfU1JfVElGX01BU0spCisjZGVmaW5lIFJUQ19TUl9UT0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFJUQ19TUl9UT0ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBSVENfU1JfVE9GKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX1NSX1RPRl9TSElGVCkpICYgUlRDX1NSX1RPRl9NQVNLKQorI2RlZmluZSBSVENfU1JfVEFGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBSVENfU1JfVEFGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgUlRDX1NSX1RBRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19TUl9UQUZfU0hJRlQpKSAmIFJUQ19TUl9UQUZfTUFTSykKKyNkZWZpbmUgUlRDX1NSX1RDRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFJUQ19TUl9UQ0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBSVENfU1JfVENFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX1NSX1RDRV9TSElGVCkpICYgUlRDX1NSX1RDRV9NQVNLKQorCisvKiEgQG5hbWUgTFIgLSBSVEMgTG9jayBSZWdpc3RlciAqLworI2RlZmluZSBSVENfTFJfVENMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBSVENfTFJfVENMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgUlRDX0xSX1RDTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19MUl9UQ0xfU0hJRlQpKSAmIFJUQ19MUl9UQ0xfTUFTSykKKyNkZWZpbmUgUlRDX0xSX0NSTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFJUQ19MUl9DUkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBSVENfTFJfQ1JMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0xSX0NSTF9TSElGVCkpICYgUlRDX0xSX0NSTF9NQVNLKQorI2RlZmluZSBSVENfTFJfU1JMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgUlRDX0xSX1NSTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFJUQ19MUl9TUkwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfTFJfU1JMX1NISUZUKSkgJiBSVENfTFJfU1JMX01BU0spCisjZGVmaW5lIFJUQ19MUl9MUkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBSVENfTFJfTFJMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgUlRDX0xSX0xSTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19MUl9MUkxfU0hJRlQpKSAmIFJUQ19MUl9MUkxfTUFTSykKKworLyohIEBuYW1lIElFUiAtIFJUQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFJUQ19JRVJfVElJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFJUQ19JRVJfVElJRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBSVENfSUVSX1RJSUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0lFUl9USUlFX1NISUZUKSkgJiBSVENfSUVSX1RJSUVfTUFTSykKKyNkZWZpbmUgUlRDX0lFUl9UT0lFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgUlRDX0lFUl9UT0lFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFJUQ19JRVJfVE9JRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfSUVSX1RPSUVfU0hJRlQpKSAmIFJUQ19JRVJfVE9JRV9NQVNLKQorI2RlZmluZSBSVENfSUVSX1RBSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBSVENfSUVSX1RBSUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgUlRDX0lFUl9UQUlFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19JRVJfVEFJRV9TSElGVCkpICYgUlRDX0lFUl9UQUlFX01BU0spCisjZGVmaW5lIFJUQ19JRVJfVFNJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBSVENfSUVSX1RTSUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgUlRDX0lFUl9UU0lFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19JRVJfVFNJRV9TSElGVCkpICYgUlRDX0lFUl9UU0lFX01BU0spCisjZGVmaW5lIFJUQ19JRVJfV1BPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBSVENfSUVSX1dQT05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgUlRDX0lFUl9XUE9OKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19JRVJfV1BPTl9TSElGVCkpICYgUlRDX0lFUl9XUE9OX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBSVENfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBSVEMgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBSVEMgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFJUQ19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwM0QwMDB1KQorLyoqIFBlcmlwaGVyYWwgUlRDIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBSVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUlRDX1R5cGUgKilSVENfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBSVENfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUlRDX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFJUQyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgUlRDX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFJUQyB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBSVEMgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIFJUQ19JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBSVENfSVJRbiB9CisjZGVmaW5lIFJUQ19TRUNPTkRTX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgeyBSVENfU2Vjb25kc19JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBSVENfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTSU0gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBTSU1fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgU0lNIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBTSU0gLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IFNPUFQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTeXN0ZW0gT3B0aW9ucyBSZWdpc3RlciAxLCBvZmZzZXQ6IDB4MCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFs0MDk2XTsKKyAgX19JTyB1aW50MzJfdCBTT1BUMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3lzdGVtIE9wdGlvbnMgUmVnaXN0ZXIgMiwgb2Zmc2V0OiAweDEwMDQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbNF07CisgIF9fSU8gdWludDMyX3QgU09QVDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN5c3RlbSBPcHRpb25zIFJlZ2lzdGVyIDQsIG9mZnNldDogMHgxMDBDICovCisgIF9fSU8gdWludDMyX3QgU09QVDU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN5c3RlbSBPcHRpb25zIFJlZ2lzdGVyIDUsIG9mZnNldDogMHgxMDEwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8yWzRdOworICBfX0lPIHVpbnQzMl90IFNPUFQ3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTeXN0ZW0gT3B0aW9ucyBSZWdpc3RlciA3LCBvZmZzZXQ6IDB4MTAxOCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfM1s4XTsKKyAgX19JICB1aW50MzJfdCBTRElEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3lzdGVtIERldmljZSBJZGVudGlmaWNhdGlvbiBSZWdpc3Rlciwgb2Zmc2V0OiAweDEwMjQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzRbMTJdOworICBfX0lPIHVpbnQzMl90IFNDR0M0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTeXN0ZW0gQ2xvY2sgR2F0aW5nIENvbnRyb2wgUmVnaXN0ZXIgNCwgb2Zmc2V0OiAweDEwMzQgKi8KKyAgX19JTyB1aW50MzJfdCBTQ0dDNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3lzdGVtIENsb2NrIEdhdGluZyBDb250cm9sIFJlZ2lzdGVyIDUsIG9mZnNldDogMHgxMDM4ICovCisgIF9fSU8gdWludDMyX3QgU0NHQzY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN5c3RlbSBDbG9jayBHYXRpbmcgQ29udHJvbCBSZWdpc3RlciA2LCBvZmZzZXQ6IDB4MTAzQyAqLworICBfX0lPIHVpbnQzMl90IFNDR0M3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTeXN0ZW0gQ2xvY2sgR2F0aW5nIENvbnRyb2wgUmVnaXN0ZXIgNywgb2Zmc2V0OiAweDEwNDAgKi8KKyAgX19JTyB1aW50MzJfdCBDTEtESVYxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3lzdGVtIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgMSwgb2Zmc2V0OiAweDEwNDQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzVbNF07CisgIF9fSU8gdWludDMyX3QgRkNGRzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSwgb2Zmc2V0OiAweDEwNEMgKi8KKyAgX19JICB1aW50MzJfdCBGQ0ZHMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRmxhc2ggQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyLCBvZmZzZXQ6IDB4MTA1MCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfNls0XTsKKyAgX19JICB1aW50MzJfdCBVSURNSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVW5pcXVlIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyIE1pZC1IaWdoLCBvZmZzZXQ6IDB4MTA1OCAqLworICBfX0kgIHVpbnQzMl90IFVJRE1MOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBVbmlxdWUgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgTWlkIExvdywgb2Zmc2V0OiAweDEwNUMgKi8KKyAgX19JICB1aW50MzJfdCBVSURMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVW5pcXVlIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyIExvdywgb2Zmc2V0OiAweDEwNjAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzdbMTU2XTsKKyAgX19JTyB1aW50MzJfdCBDT1BDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ09QIENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHgxMTAwICovCisgIF9fTyAgdWludDMyX3QgU1JWQ09QOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNlcnZpY2UgQ09QLCBvZmZzZXQ6IDB4MTEwNCAqLworfSBTSU1fVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gU0lNIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgU0lNX1JlZ2lzdGVyX01hc2tzIFNJTSBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgU09QVDEgLSBTeXN0ZW0gT3B0aW9ucyBSZWdpc3RlciAxICovCisjZGVmaW5lIFNJTV9TT1BUMV9PU0MzMktPVVRfTUFTSyAgICAgICAgICAgICAgICAgKDB4MzAwMDBVKQorI2RlZmluZSBTSU1fU09QVDFfT1NDMzJLT1VUX1NISUZUICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFNJTV9TT1BUMV9PU0MzMktPVVQoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDFfT1NDMzJLT1VUX1NISUZUKSkgJiBTSU1fU09QVDFfT1NDMzJLT1VUX01BU0spCisjZGVmaW5lIFNJTV9TT1BUMV9PU0MzMktTRUxfTUFTSyAgICAgICAgICAgICAgICAgKDB4QzAwMDBVKQorI2RlZmluZSBTSU1fU09QVDFfT1NDMzJLU0VMX1NISUZUICAgICAgICAgICAgICAgICgxOFUpCisjZGVmaW5lIFNJTV9TT1BUMV9PU0MzMktTRUwoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDFfT1NDMzJLU0VMX1NISUZUKSkgJiBTSU1fU09QVDFfT1NDMzJLU0VMX01BU0spCisKKy8qISBAbmFtZSBTT1BUMiAtIFN5c3RlbSBPcHRpb25zIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgU0lNX1NPUFQyX0NMS09VVFNFTF9NQVNLICAgICAgICAgICAgICAgICAoMHhFMFUpCisjZGVmaW5lIFNJTV9TT1BUMl9DTEtPVVRTRUxfU0hJRlQgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBTSU1fU09QVDJfQ0xLT1VUU0VMKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NPUFQyX0NMS09VVFNFTF9TSElGVCkpICYgU0lNX1NPUFQyX0NMS09VVFNFTF9NQVNLKQorI2RlZmluZSBTSU1fU09QVDJfVFBNU1JDX01BU0sgICAgICAgICAgICAgICAgICAgICgweDMwMDAwMDBVKQorI2RlZmluZSBTSU1fU09QVDJfVFBNU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFNJTV9TT1BUMl9UUE1TUkMoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDJfVFBNU1JDX1NISUZUKSkgJiBTSU1fU09QVDJfVFBNU1JDX01BU0spCisjZGVmaW5lIFNJTV9TT1BUMl9MUFVBUlQwU1JDX01BU0sgICAgICAgICAgICAgICAgKDB4QzAwMDAwMFUpCisjZGVmaW5lIFNJTV9TT1BUMl9MUFVBUlQwU1JDX1NISUZUICAgICAgICAgICAgICAgKDI2VSkKKyNkZWZpbmUgU0lNX1NPUFQyX0xQVUFSVDBTUkMoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUMl9MUFVBUlQwU1JDX1NISUZUKSkgJiBTSU1fU09QVDJfTFBVQVJUMFNSQ19NQVNLKQorCisvKiEgQG5hbWUgU09QVDQgLSBTeXN0ZW0gT3B0aW9ucyBSZWdpc3RlciA0ICovCisjZGVmaW5lIFNJTV9TT1BUNF9UUE0xQ0gwU1JDX01BU0sgICAgICAgICAgICAgICAgKDB4NDAwMDBVKQorI2RlZmluZSBTSU1fU09QVDRfVFBNMUNIMFNSQ19TSElGVCAgICAgICAgICAgICAgICgxOFUpCisjZGVmaW5lIFNJTV9TT1BUNF9UUE0xQ0gwU1JDKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDRfVFBNMUNIMFNSQ19TSElGVCkpICYgU0lNX1NPUFQ0X1RQTTFDSDBTUkNfTUFTSykKKyNkZWZpbmUgU0lNX1NPUFQ0X1RQTTJDSDBTUkNfTUFTSyAgICAgICAgICAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBTSU1fU09QVDRfVFBNMkNIMFNSQ19TSElGVCAgICAgICAgICAgICAgICgyMFUpCisjZGVmaW5lIFNJTV9TT1BUNF9UUE0yQ0gwU1JDKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDRfVFBNMkNIMFNSQ19TSElGVCkpICYgU0lNX1NPUFQ0X1RQTTJDSDBTUkNfTUFTSykKKyNkZWZpbmUgU0lNX1NPUFQ0X1RQTTBDTEtTRUxfTUFTSyAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgU0lNX1NPUFQ0X1RQTTBDTEtTRUxfU0hJRlQgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBTSU1fU09QVDRfVFBNMENMS1NFTCh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NPUFQ0X1RQTTBDTEtTRUxfU0hJRlQpKSAmIFNJTV9TT1BUNF9UUE0wQ0xLU0VMX01BU0spCisjZGVmaW5lIFNJTV9TT1BUNF9UUE0xQ0xLU0VMX01BU0sgICAgICAgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFNJTV9TT1BUNF9UUE0xQ0xLU0VMX1NISUZUICAgICAgICAgICAgICAgKDI1VSkKKyNkZWZpbmUgU0lNX1NPUFQ0X1RQTTFDTEtTRUwoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUNF9UUE0xQ0xLU0VMX1NISUZUKSkgJiBTSU1fU09QVDRfVFBNMUNMS1NFTF9NQVNLKQorI2RlZmluZSBTSU1fU09QVDRfVFBNMkNMS1NFTF9NQVNLICAgICAgICAgICAgICAgICgweDQwMDAwMDBVKQorI2RlZmluZSBTSU1fU09QVDRfVFBNMkNMS1NFTF9TSElGVCAgICAgICAgICAgICAgICgyNlUpCisjZGVmaW5lIFNJTV9TT1BUNF9UUE0yQ0xLU0VMKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDRfVFBNMkNMS1NFTF9TSElGVCkpICYgU0lNX1NPUFQ0X1RQTTJDTEtTRUxfTUFTSykKKworLyohIEBuYW1lIFNPUFQ1IC0gU3lzdGVtIE9wdGlvbnMgUmVnaXN0ZXIgNSAqLworI2RlZmluZSBTSU1fU09QVDVfTFBVQVJUMFRYU1JDX01BU0sgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBTSU1fU09QVDVfTFBVQVJUMFRYU1JDX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU0lNX1NPUFQ1X0xQVUFSVDBUWFNSQyh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUNV9MUFVBUlQwVFhTUkNfU0hJRlQpKSAmIFNJTV9TT1BUNV9MUFVBUlQwVFhTUkNfTUFTSykKKyNkZWZpbmUgU0lNX1NPUFQ1X0xQVUFSVDBSWFNSQ19NQVNLICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgU0lNX1NPUFQ1X0xQVUFSVDBSWFNSQ19TSElGVCAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFNJTV9TT1BUNV9MUFVBUlQwUlhTUkMoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDVfTFBVQVJUMFJYU1JDX1NISUZUKSkgJiBTSU1fU09QVDVfTFBVQVJUMFJYU1JDX01BU0spCisjZGVmaW5lIFNJTV9TT1BUNV9MUFVBUlQwT0RFX01BU0sgICAgICAgICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBTSU1fU09QVDVfTFBVQVJUME9ERV9TSElGVCAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFNJTV9TT1BUNV9MUFVBUlQwT0RFKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDVfTFBVQVJUME9ERV9TSElGVCkpICYgU0lNX1NPUFQ1X0xQVUFSVDBPREVfTUFTSykKKworLyohIEBuYW1lIFNPUFQ3IC0gU3lzdGVtIE9wdGlvbnMgUmVnaXN0ZXIgNyAqLworI2RlZmluZSBTSU1fU09QVDdfQURDMFRSR1NFTF9NQVNLICAgICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBTSU1fU09QVDdfQURDMFRSR1NFTF9TSElGVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU0lNX1NPUFQ3X0FEQzBUUkdTRUwoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUN19BREMwVFJHU0VMX1NISUZUKSkgJiBTSU1fU09QVDdfQURDMFRSR1NFTF9NQVNLKQorI2RlZmluZSBTSU1fU09QVDdfQURDMFBSRVRSR1NFTF9NQVNLICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgU0lNX1NPUFQ3X0FEQzBQUkVUUkdTRUxfU0hJRlQgICAgICAgICAgICAoNFUpCisjZGVmaW5lIFNJTV9TT1BUN19BREMwUFJFVFJHU0VMKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDdfQURDMFBSRVRSR1NFTF9TSElGVCkpICYgU0lNX1NPUFQ3X0FEQzBQUkVUUkdTRUxfTUFTSykKKyNkZWZpbmUgU0lNX1NPUFQ3X0FEQzBBTFRUUkdFTl9NQVNLICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFNJTV9TT1BUN19BREMwQUxUVFJHRU5fU0hJRlQgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBTSU1fU09QVDdfQURDMEFMVFRSR0VOKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NPUFQ3X0FEQzBBTFRUUkdFTl9TSElGVCkpICYgU0lNX1NPUFQ3X0FEQzBBTFRUUkdFTl9NQVNLKQorCisvKiEgQG5hbWUgU0RJRCAtIFN5c3RlbSBEZXZpY2UgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0lNX1NESURfUElOSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgU0lNX1NESURfUElOSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNJTV9TRElEX1BJTklEKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0RJRF9QSU5JRF9TSElGVCkpICYgU0lNX1NESURfUElOSURfTUFTSykKKyNkZWZpbmUgU0lNX1NESURfRElFSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGODBVKQorI2RlZmluZSBTSU1fU0RJRF9ESUVJRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgU0lNX1NESURfRElFSUQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TRElEX0RJRUlEX1NISUZUKSkgJiBTSU1fU0RJRF9ESUVJRF9NQVNLKQorI2RlZmluZSBTSU1fU0RJRF9SRVZJRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEYwMDBVKQorI2RlZmluZSBTSU1fU0RJRF9SRVZJRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgxMlUpCisjZGVmaW5lIFNJTV9TRElEX1JFVklEKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0RJRF9SRVZJRF9TSElGVCkpICYgU0lNX1NESURfUkVWSURfTUFTSykKKyNkZWZpbmUgU0lNX1NESURfU1JBTVNJWkVfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGMDAwMFUpCisjZGVmaW5lIFNJTV9TRElEX1NSQU1TSVpFX1NISUZUICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgU0lNX1NESURfU1JBTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TRElEX1NSQU1TSVpFX1NISUZUKSkgJiBTSU1fU0RJRF9TUkFNU0laRV9NQVNLKQorI2RlZmluZSBTSU1fU0RJRF9TRVJJRVNJRF9NQVNLICAgICAgICAgICAgICAgICAgICgweEYwMDAwMFUpCisjZGVmaW5lIFNJTV9TRElEX1NFUklFU0lEX1NISUZUICAgICAgICAgICAgICAgICAgKDIwVSkKKyNkZWZpbmUgU0lNX1NESURfU0VSSUVTSUQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TRElEX1NFUklFU0lEX1NISUZUKSkgJiBTSU1fU0RJRF9TRVJJRVNJRF9NQVNLKQorI2RlZmluZSBTSU1fU0RJRF9TVUJGQU1JRF9NQVNLICAgICAgICAgICAgICAgICAgICgweDMwMDAwMDBVKQorI2RlZmluZSBTSU1fU0RJRF9TVUJGQU1JRF9TSElGVCAgICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFNJTV9TRElEX1NVQkZBTUlEKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0RJRF9TVUJGQU1JRF9TSElGVCkpICYgU0lNX1NESURfU1VCRkFNSURfTUFTSykKKyNkZWZpbmUgU0lNX1NESURfRkFNSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIFNJTV9TRElEX0ZBTUlEX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDI4VSkKKyNkZWZpbmUgU0lNX1NESURfRkFNSUQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TRElEX0ZBTUlEX1NISUZUKSkgJiBTSU1fU0RJRF9GQU1JRF9NQVNLKQorCisvKiEgQG5hbWUgU0NHQzQgLSBTeXN0ZW0gQ2xvY2sgR2F0aW5nIENvbnRyb2wgUmVnaXN0ZXIgNCAqLworI2RlZmluZSBTSU1fU0NHQzRfQ01UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBTSU1fU0NHQzRfQ01UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgU0lNX1NDR0M0X0NNVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNF9DTVRfU0hJRlQpKSAmIFNJTV9TQ0dDNF9DTVRfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M0X0kyQzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFNJTV9TQ0dDNF9JMkMwX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBTSU1fU0NHQzRfSTJDMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M0X0kyQzBfU0hJRlQpKSAmIFNJTV9TQ0dDNF9JMkMwX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNF9JMkMxX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBTSU1fU0NHQzRfSTJDMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgU0lNX1NDR0M0X0kyQzEoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNF9JMkMxX1NISUZUKSkgJiBTSU1fU0NHQzRfSTJDMV9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzRfQ01QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M0X0NNUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMTlVKQorI2RlZmluZSBTSU1fU0NHQzRfQ01QKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M0X0NNUF9TSElGVCkpICYgU0lNX1NDR0M0X0NNUF9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzRfVlJFRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNF9WUkVGX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDIwVSkKKyNkZWZpbmUgU0lNX1NDR0M0X1ZSRUYoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNF9WUkVGX1NISUZUKSkgJiBTSU1fU0NHQzRfVlJFRl9NQVNLKQorCisvKiEgQG5hbWUgU0NHQzUgLSBTeXN0ZW0gQ2xvY2sgR2F0aW5nIENvbnRyb2wgUmVnaXN0ZXIgNSAqLworI2RlZmluZSBTSU1fU0NHQzVfTFBUTVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBTSU1fU0NHQzVfTFBUTVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU0lNX1NDR0M1X0xQVE1SKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9MUFRNUl9TSElGVCkpICYgU0lNX1NDR0M1X0xQVE1SX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNV9UU0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBTSU1fU0NHQzVfVFNJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgU0lNX1NDR0M1X1RTSSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9UU0lfU0hJRlQpKSAmIFNJTV9TQ0dDNV9UU0lfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M1X1BPUlRBX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgyMDBVKQorI2RlZmluZSBTSU1fU0NHQzVfUE9SVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICg5VSkKKyNkZWZpbmUgU0lNX1NDR0M1X1BPUlRBKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9QT1JUQV9TSElGVCkpICYgU0lNX1NDR0M1X1BPUlRBX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNV9QT1JUQl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M1X1BPUlRCX1NISUZUICAgICAgICAgICAgICAgICAgICAoMTBVKQorI2RlZmluZSBTSU1fU0NHQzVfUE9SVEIoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M1X1BPUlRCX1NISUZUKSkgJiBTSU1fU0NHQzVfUE9SVEJfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M1X1BPUlRDX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MDBVKQorI2RlZmluZSBTSU1fU0NHQzVfUE9SVENfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxMVUpCisjZGVmaW5lIFNJTV9TQ0dDNV9QT1JUQyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzVfUE9SVENfU0hJRlQpKSAmIFNJTV9TQ0dDNV9QT1JUQ19NQVNLKQorI2RlZmluZSBTSU1fU0NHQzVfTFBVQVJUMF9NQVNLICAgICAgICAgICAgICAgICAgICgweDEwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9MUFVBUlQwX1NISUZUICAgICAgICAgICAgICAgICAgKDIwVSkKKyNkZWZpbmUgU0lNX1NDR0M1X0xQVUFSVDAoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9MUFVBUlQwX1NISUZUKSkgJiBTSU1fU0NHQzVfTFBVQVJUMF9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzVfTFRDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzVfTFRDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9MVEMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzVfTFRDX1NISUZUKSkgJiBTSU1fU0NHQzVfTFRDX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNV9SU0lNX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9SU0lNX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDI1VSkKKyNkZWZpbmUgU0lNX1NDR0M1X1JTSU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9SU0lNX1NISUZUKSkgJiBTSU1fU0NHQzVfUlNJTV9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzVfRENEQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwMDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzVfRENEQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICgyNlUpCisjZGVmaW5lIFNJTV9TQ0dDNV9EQ0RDKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzVfRENEQ19TSElGVCkpICYgU0lNX1NDR0M1X0RDRENfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M1X0JUTExfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M1X0JUTExfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMjdVKQorI2RlZmluZSBTSU1fU0NHQzVfQlRMTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M1X0JUTExfU0hJRlQpKSAmIFNJTV9TQ0dDNV9CVExMX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNV9QSFlESUdfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzVfUEhZRElHX1NISUZUICAgICAgICAgICAgICAgICAgICgyOFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9QSFlESUcoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzVfUEhZRElHX1NISUZUKSkgJiBTSU1fU0NHQzVfUEhZRElHX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNV9aaWdCZWVfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzVfWmlnQmVlX1NISUZUICAgICAgICAgICAgICAgICAgICgyOVUpCisjZGVmaW5lIFNJTV9TQ0dDNV9aaWdCZWUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzVfWmlnQmVlX1NISUZUKSkgJiBTSU1fU0NHQzVfWmlnQmVlX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNV9BTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzVfQU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgzMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9BTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzVfQU5UX1NISUZUKSkgJiBTSU1fU0NHQzVfQU5UX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNV9HRU5fRlNLX01BU0sgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzVfR0VOX0ZTS19TSElGVCAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIFNJTV9TQ0dDNV9HRU5fRlNLKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzVfR0VOX0ZTS19TSElGVCkpICYgU0lNX1NDR0M1X0dFTl9GU0tfTUFTSykKKworLyohIEBuYW1lIFNDR0M2IC0gU3lzdGVtIENsb2NrIEdhdGluZyBDb250cm9sIFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgU0lNX1NDR0M2X0ZURl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgU0lNX1NDR0M2X0ZURl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNJTV9TQ0dDNl9GVEYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzZfRlRGX1NISUZUKSkgJiBTSU1fU0NHQzZfRlRGX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNl9ETUFNVVhfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFNJTV9TQ0dDNl9ETUFNVVhfU0hJRlQgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBTSU1fU0NHQzZfRE1BTVVYKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M2X0RNQU1VWF9TSElGVCkpICYgU0lNX1NDR0M2X0RNQU1VWF9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzZfVFJOR19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNl9UUk5HX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBTSU1fU0NHQzZfVFJORyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M2X1RSTkdfU0hJRlQpKSAmIFNJTV9TQ0dDNl9UUk5HX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNl9TUEkwX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNl9TUEkwX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgU0lNX1NDR0M2X1NQSTAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNl9TUEkwX1NISUZUKSkgJiBTSU1fU0NHQzZfU1BJMF9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzZfU1BJMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDIwMDBVKQorI2RlZmluZSBTSU1fU0NHQzZfU1BJMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgxM1UpCisjZGVmaW5lIFNJTV9TQ0dDNl9TUEkxKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzZfU1BJMV9TSElGVCkpICYgU0lNX1NDR0M2X1NQSTFfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M2X1BJVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzZfUElUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyM1UpCisjZGVmaW5lIFNJTV9TQ0dDNl9QSVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzZfUElUX1NISUZUKSkgJiBTSU1fU0NHQzZfUElUX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNl9UUE0wX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNl9UUE0wX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgU0lNX1NDR0M2X1RQTTAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNl9UUE0wX1NISUZUKSkgJiBTSU1fU0NHQzZfVFBNMF9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzZfVFBNMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzZfVFBNMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyNVUpCisjZGVmaW5lIFNJTV9TQ0dDNl9UUE0xKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzZfVFBNMV9TSElGVCkpICYgU0lNX1NDR0M2X1RQTTFfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M2X1RQTTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M2X1RQTTJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMjZVKQorI2RlZmluZSBTSU1fU0NHQzZfVFBNMih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M2X1RQTTJfU0hJRlQpKSAmIFNJTV9TQ0dDNl9UUE0yX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNl9BREMwX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNl9BREMwX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDI3VSkKKyNkZWZpbmUgU0lNX1NDR0M2X0FEQzAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNl9BREMwX1NISUZUKSkgJiBTSU1fU0NHQzZfQURDMF9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzZfUlRDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDAwMDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M2X1JUQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMjlVKQorI2RlZmluZSBTSU1fU0NHQzZfUlRDKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M2X1JUQ19TSElGVCkpICYgU0lNX1NDR0M2X1JUQ19NQVNLKQorI2RlZmluZSBTSU1fU0NHQzZfREFDMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M2X0RBQzBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBTSU1fU0NHQzZfREFDMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M2X0RBQzBfU0hJRlQpKSAmIFNJTV9TQ0dDNl9EQUMwX01BU0spCisKKy8qISBAbmFtZSBTQ0dDNyAtIFN5c3RlbSBDbG9jayBHYXRpbmcgQ29udHJvbCBSZWdpc3RlciA3ICovCisjZGVmaW5lIFNJTV9TQ0dDN19ETUFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwVSkKKyNkZWZpbmUgU0lNX1NDR0M3X0RNQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFNJTV9TQ0dDN19ETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzdfRE1BX1NISUZUKSkgJiBTSU1fU0NHQzdfRE1BX01BU0spCisKKy8qISBAbmFtZSBDTEtESVYxIC0gU3lzdGVtIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTSU1fQ0xLRElWMV9PVVRESVY0X01BU0sgICAgICAgICAgICAgICAgICgweDcwMDAwVSkKKyNkZWZpbmUgU0lNX0NMS0RJVjFfT1VURElWNF9TSElGVCAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBTSU1fQ0xLRElWMV9PVVRESVY0KHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX0NMS0RJVjFfT1VURElWNF9TSElGVCkpICYgU0lNX0NMS0RJVjFfT1VURElWNF9NQVNLKQorI2RlZmluZSBTSU1fQ0xLRElWMV9PVVRESVYxX01BU0sgICAgICAgICAgICAgICAgICgweEYwMDAwMDAwVSkKKyNkZWZpbmUgU0lNX0NMS0RJVjFfT1VURElWMV9TSElGVCAgICAgICAgICAgICAgICAoMjhVKQorI2RlZmluZSBTSU1fQ0xLRElWMV9PVVRESVYxKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX0NMS0RJVjFfT1VURElWMV9TSElGVCkpICYgU0lNX0NMS0RJVjFfT1VURElWMV9NQVNLKQorCisvKiEgQG5hbWUgRkNGRzEgLSBGbGFzaCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU0lNX0ZDRkcxX0ZMQVNIRElTX01BU0sgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgU0lNX0ZDRkcxX0ZMQVNIRElTX1NISUZUICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNJTV9GQ0ZHMV9GTEFTSERJUyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fRkNGRzFfRkxBU0hESVNfU0hJRlQpKSAmIFNJTV9GQ0ZHMV9GTEFTSERJU19NQVNLKQorI2RlZmluZSBTSU1fRkNGRzFfRkxBU0hET1pFX01BU0sgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBTSU1fRkNGRzFfRkxBU0hET1pFX1NISUZUICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgU0lNX0ZDRkcxX0ZMQVNIRE9aRSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9GQ0ZHMV9GTEFTSERPWkVfU0hJRlQpKSAmIFNJTV9GQ0ZHMV9GTEFTSERPWkVfTUFTSykKKyNkZWZpbmUgU0lNX0ZDRkcxX1BGU0laRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMDAwVSkKKyNkZWZpbmUgU0lNX0ZDRkcxX1BGU0laRV9TSElGVCAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBTSU1fRkNGRzFfUEZTSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX0ZDRkcxX1BGU0laRV9TSElGVCkpICYgU0lNX0ZDRkcxX1BGU0laRV9NQVNLKQorCisvKiEgQG5hbWUgRkNGRzIgLSBGbGFzaCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgU0lNX0ZDRkcyX01BWEFERFIxX01BU0sgICAgICAgICAgICAgICAgICAoMHg3RjAwMDBVKQorI2RlZmluZSBTSU1fRkNGRzJfTUFYQUREUjFfU0hJRlQgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFNJTV9GQ0ZHMl9NQVhBRERSMSh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fRkNGRzJfTUFYQUREUjFfU0hJRlQpKSAmIFNJTV9GQ0ZHMl9NQVhBRERSMV9NQVNLKQorI2RlZmluZSBTSU1fRkNGRzJfTUFYQUREUjBfTUFTSyAgICAgICAgICAgICAgICAgICgweDdGMDAwMDAwVSkKKyNkZWZpbmUgU0lNX0ZDRkcyX01BWEFERFIwX1NISUZUICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBTSU1fRkNGRzJfTUFYQUREUjAoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX0ZDRkcyX01BWEFERFIwX1NISUZUKSkgJiBTSU1fRkNGRzJfTUFYQUREUjBfTUFTSykKKworLyohIEBuYW1lIFVJRE1IIC0gVW5pcXVlIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyIE1pZC1IaWdoICovCisjZGVmaW5lIFNJTV9VSURNSF9VSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFNJTV9VSURNSF9VSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTSU1fVUlETUhfVUlEKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1VJRE1IX1VJRF9TSElGVCkpICYgU0lNX1VJRE1IX1VJRF9NQVNLKQorCisvKiEgQG5hbWUgVUlETUwgLSBVbmlxdWUgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgTWlkIExvdyAqLworI2RlZmluZSBTSU1fVUlETUxfVUlEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgU0lNX1VJRE1MX1VJRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNJTV9VSURNTF9VSUQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fVUlETUxfVUlEX1NISUZUKSkgJiBTSU1fVUlETUxfVUlEX01BU0spCisKKy8qISBAbmFtZSBVSURMIC0gVW5pcXVlIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyIExvdyAqLworI2RlZmluZSBTSU1fVUlETF9VSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgU0lNX1VJRExfVUlEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNJTV9VSURMX1VJRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fVUlETF9VSURfU0hJRlQpKSAmIFNJTV9VSURMX1VJRF9NQVNLKQorCisvKiEgQG5hbWUgQ09QQyAtIENPUCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNJTV9DT1BDX0NPUFdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFNJTV9DT1BDX0NPUFdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTSU1fQ09QQ19DT1BXKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX0NPUENfQ09QV19TSElGVCkpICYgU0lNX0NPUENfQ09QV19NQVNLKQorI2RlZmluZSBTSU1fQ09QQ19DT1BDTEtTX01BU0sgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBTSU1fQ09QQ19DT1BDTEtTX1NISUZUICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgU0lNX0NPUENfQ09QQ0xLUyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9DT1BDX0NPUENMS1NfU0hJRlQpKSAmIFNJTV9DT1BDX0NPUENMS1NfTUFTSykKKyNkZWZpbmUgU0lNX0NPUENfQ09QVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhDVSkKKyNkZWZpbmUgU0lNX0NPUENfQ09QVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFNJTV9DT1BDX0NPUFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fQ09QQ19DT1BUX1NISUZUKSkgJiBTSU1fQ09QQ19DT1BUX01BU0spCisjZGVmaW5lIFNJTV9DT1BDX0NPUFNUUEVOX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBTSU1fQ09QQ19DT1BTVFBFTl9TSElGVCAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgU0lNX0NPUENfQ09QU1RQRU4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9DT1BDX0NPUFNUUEVOX1NISUZUKSkgJiBTSU1fQ09QQ19DT1BTVFBFTl9NQVNLKQorI2RlZmluZSBTSU1fQ09QQ19DT1BEQkdFTl9NQVNLICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgU0lNX0NPUENfQ09QREJHRU5fU0hJRlQgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFNJTV9DT1BDX0NPUERCR0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fQ09QQ19DT1BEQkdFTl9TSElGVCkpICYgU0lNX0NPUENfQ09QREJHRU5fTUFTSykKKyNkZWZpbmUgU0lNX0NPUENfQ09QQ0xLU0VMX01BU0sgICAgICAgICAgICAgICAgICAoMHhDMFUpCisjZGVmaW5lIFNJTV9DT1BDX0NPUENMS1NFTF9TSElGVCAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBTSU1fQ09QQ19DT1BDTEtTRUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX0NPUENfQ09QQ0xLU0VMX1NISUZUKSkgJiBTSU1fQ09QQ19DT1BDTEtTRUxfTUFTSykKKworLyohIEBuYW1lIFNSVkNPUCAtIFNlcnZpY2UgQ09QICovCisjZGVmaW5lIFNJTV9TUlZDT1BfU1JWQ09QX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBTSU1fU1JWQ09QX1NSVkNPUF9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU0lNX1NSVkNPUF9TUlZDT1AoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TUlZDT1BfU1JWQ09QX1NISUZUKSkgJiBTSU1fU1JWQ09QX1NSVkNPUF9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgU0lNX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogU0lNIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgU0lNIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBTSU1fQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDQ3MDAwdSkKKy8qKiBQZXJpcGhlcmFsIFNJTSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgU0lNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJTV9UeXBlICopU0lNX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgU0lNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgU0lNX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFNJTV9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBTSU0gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFNJTV9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBTSU0gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFNJTV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFNNQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFNNQ19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBTTUMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFNNQyAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDhfdCBQTVBST1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBvd2VyIE1vZGUgUHJvdGVjdGlvbiByZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50OF90IFBNQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG93ZXIgTW9kZSBDb250cm9sIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4MSAqLworICBfX0lPIHVpbnQ4X3QgU1RPUENUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdG9wIENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHgyICovCisgIF9fSSAgdWludDhfdCBQTVNUQVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBvd2VyIE1vZGUgU3RhdHVzIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4MyAqLworfSBTTUNfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gU01DIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgU01DX1JlZ2lzdGVyX01hc2tzIFNNQyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgUE1QUk9UIC0gUG93ZXIgTW9kZSBQcm90ZWN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIFNNQ19QTVBST1RfQVZMTFNfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFNNQ19QTVBST1RfQVZMTFNfU0hJRlQgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBTTUNfUE1QUk9UX0FWTExTKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFNNQ19QTVBST1RfQVZMTFNfU0hJRlQpKSAmIFNNQ19QTVBST1RfQVZMTFNfTUFTSykKKyNkZWZpbmUgU01DX1BNUFJPVF9BTExTX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgU01DX1BNUFJPVF9BTExTX1NISUZUICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIFNNQ19QTVBST1RfQUxMUyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgU01DX1BNUFJPVF9BTExTX1NISUZUKSkgJiBTTUNfUE1QUk9UX0FMTFNfTUFTSykKKyNkZWZpbmUgU01DX1BNUFJPVF9BVkxQX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFNNQ19QTVBST1RfQVZMUF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBTTUNfUE1QUk9UX0FWTFAoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFNNQ19QTVBST1RfQVZMUF9TSElGVCkpICYgU01DX1BNUFJPVF9BVkxQX01BU0spCisKKy8qISBAbmFtZSBQTUNUUkwgLSBQb3dlciBNb2RlIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU01DX1BNQ1RSTF9TVE9QTV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg3VSkKKyNkZWZpbmUgU01DX1BNQ1RSTF9TVE9QTV9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNNQ19QTUNUUkxfU1RPUE0oeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgU01DX1BNQ1RSTF9TVE9QTV9TSElGVCkpICYgU01DX1BNQ1RSTF9TVE9QTV9NQVNLKQorI2RlZmluZSBTTUNfUE1DVFJMX1NUT1BBX01BU0sgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBTTUNfUE1DVFJMX1NUT1BBX1NISUZUICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgU01DX1BNQ1RSTF9TVE9QQSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBTTUNfUE1DVFJMX1NUT1BBX1NISUZUKSkgJiBTTUNfUE1DVFJMX1NUT1BBX01BU0spCisjZGVmaW5lIFNNQ19QTUNUUkxfUlVOTV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NjBVKQorI2RlZmluZSBTTUNfUE1DVFJMX1JVTk1fU0hJRlQgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgU01DX1BNQ1RSTF9SVU5NKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBTTUNfUE1DVFJMX1JVTk1fU0hJRlQpKSAmIFNNQ19QTUNUUkxfUlVOTV9NQVNLKQorCisvKiEgQG5hbWUgU1RPUENUUkwgLSBTdG9wIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU01DX1NUT1BDVFJMX0xMU01fTUFTSyAgICAgICAgICAgICAgICAgICAoMHg3VSkKKyNkZWZpbmUgU01DX1NUT1BDVFJMX0xMU01fU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNNQ19TVE9QQ1RSTF9MTFNNKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgU01DX1NUT1BDVFJMX0xMU01fU0hJRlQpKSAmIFNNQ19TVE9QQ1RSTF9MTFNNX01BU0spCisjZGVmaW5lIFNNQ19TVE9QQ1RSTF9SQU0yUE9fTUFTSyAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBTTUNfU1RPUENUUkxfUkFNMlBPX1NISUZUICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgU01DX1NUT1BDVFJMX1JBTTJQTyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBTTUNfU1RPUENUUkxfUkFNMlBPX1NISUZUKSkgJiBTTUNfU1RPUENUUkxfUkFNMlBPX01BU0spCisjZGVmaW5lIFNNQ19TVE9QQ1RSTF9QT1JQT19NQVNLICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBTTUNfU1RPUENUUkxfUE9SUE9fU0hJRlQgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgU01DX1NUT1BDVFJMX1BPUlBPKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBTTUNfU1RPUENUUkxfUE9SUE9fU0hJRlQpKSAmIFNNQ19TVE9QQ1RSTF9QT1JQT19NQVNLKQorI2RlZmluZSBTTUNfU1RPUENUUkxfUFNUT1BPX01BU0sgICAgICAgICAgICAgICAgICgweEMwVSkKKyNkZWZpbmUgU01DX1NUT1BDVFJMX1BTVE9QT19TSElGVCAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFNNQ19TVE9QQ1RSTF9QU1RPUE8oeCkgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgU01DX1NUT1BDVFJMX1BTVE9QT19TSElGVCkpICYgU01DX1NUT1BDVFJMX1BTVE9QT19NQVNLKQorCisvKiEgQG5hbWUgUE1TVEFUIC0gUG93ZXIgTW9kZSBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU01DX1BNU1RBVF9QTVNUQVRfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIFNNQ19QTVNUQVRfUE1TVEFUX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTTUNfUE1TVEFUX1BNU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFNNQ19QTVNUQVRfUE1TVEFUX1NISUZUKSkgJiBTTUNfUE1TVEFUX1BNU1RBVF9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgU01DX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogU01DIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgU01DIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBTTUNfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDdFMDAwdSkKKy8qKiBQZXJpcGhlcmFsIFNNQyBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgU01DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNNQ19UeXBlICopU01DX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgU01DX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFNNQ19CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBTTUMgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFNNQ19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBTTUMgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFNNQ19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFNQSSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFNQSV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBTUEkgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFNQSSAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgTUNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1vZHVsZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFs0XTsKKyAgX19JTyB1aW50MzJfdCBUQ1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVHJhbnNmZXIgQ291bnQgUmVnaXN0ZXIsIG9mZnNldDogMHg4ICovCisgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4QyAqLworICAgIF9fSU8gdWludDMyX3QgQ1RBUlsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENsb2NrIGFuZCBUcmFuc2ZlciBBdHRyaWJ1dGVzIFJlZ2lzdGVyIChJbiBNYXN0ZXIgTW9kZSksIGFycmF5IG9mZnNldDogMHhDLCBhcnJheSBzdGVwOiAweDQgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUQVJfU0xBVkVbMV07ICAgICAgICAgICAgICAgICAgICAgLyoqPCBDbG9jayBhbmQgVHJhbnNmZXIgQXR0cmlidXRlcyBSZWdpc3RlciAoSW4gU2xhdmUgTW9kZSksIGFycmF5IG9mZnNldDogMHhDLCBhcnJheSBzdGVwOiAweDQgKi8KKyAgfTsKKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbMjRdOworICBfX0lPIHVpbnQzMl90IFNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHgyQyAqLworICBfX0lPIHVpbnQzMl90IFJTRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBETUEvSW50ZXJydXB0IFJlcXVlc3QgU2VsZWN0IGFuZCBFbmFibGUgUmVnaXN0ZXIsIG9mZnNldDogMHgzMCAqLworICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDM0ICovCisgICAgX19JTyB1aW50MzJfdCBQVVNIUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUFVTSCBUWCBGSUZPIFJlZ2lzdGVyIEluIE1hc3RlciBNb2RlLCBvZmZzZXQ6IDB4MzQgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBVU0hSX1NMQVZFOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQVVNIIFRYIEZJRk8gUmVnaXN0ZXIgSW4gU2xhdmUgTW9kZSwgb2Zmc2V0OiAweDM0ICovCisgIH07CisgIF9fSSAgdWludDMyX3QgUE9QUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBPUCBSWCBGSUZPIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MzggKi8KKyAgX19JICB1aW50MzJfdCBUWEZSMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVHJhbnNtaXQgRklGTyBSZWdpc3RlcnMsIG9mZnNldDogMHgzQyAqLworICBfX0kgIHVpbnQzMl90IFRYRlIxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUcmFuc21pdCBGSUZPIFJlZ2lzdGVycywgb2Zmc2V0OiAweDQwICovCisgIF9fSSAgdWludDMyX3QgVFhGUjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRyYW5zbWl0IEZJRk8gUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4NDQgKi8KKyAgX19JICB1aW50MzJfdCBUWEZSMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVHJhbnNtaXQgRklGTyBSZWdpc3RlcnMsIG9mZnNldDogMHg0OCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMls0OF07CisgIF9fSSAgdWludDMyX3QgUlhGUjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmUgRklGTyBSZWdpc3RlcnMsIG9mZnNldDogMHg3QyAqLworICBfX0kgIHVpbnQzMl90IFJYRlIxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlIEZJRk8gUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4ODAgKi8KKyAgX19JICB1aW50MzJfdCBSWEZSMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBGSUZPIFJlZ2lzdGVycywgb2Zmc2V0OiAweDg0ICovCisgIF9fSSAgdWludDMyX3QgUlhGUjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmUgRklGTyBSZWdpc3RlcnMsIG9mZnNldDogMHg4OCAqLworfSBTUElfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gU1BJIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgU1BJX1JlZ2lzdGVyX01hc2tzIFNQSSBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgTUNSIC0gTW9kdWxlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BJX01DUl9IQUxUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgU1BJX01DUl9IQUxUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNQSV9NQ1JfSEFMVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfTUNSX0hBTFRfU0hJRlQpKSAmIFNQSV9NQ1JfSEFMVF9NQVNLKQorI2RlZmluZSBTUElfTUNSX1NNUExfUFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDMwMFUpCisjZGVmaW5lIFNQSV9NQ1JfU01QTF9QVF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBTUElfTUNSX1NNUExfUFQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX01DUl9TTVBMX1BUX1NISUZUKSkgJiBTUElfTUNSX1NNUExfUFRfTUFTSykKKyNkZWZpbmUgU1BJX01DUl9DTFJfUlhGX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg0MDBVKQorI2RlZmluZSBTUElfTUNSX0NMUl9SWEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxMFUpCisjZGVmaW5lIFNQSV9NQ1JfQ0xSX1JYRih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfTUNSX0NMUl9SWEZfU0hJRlQpKSAmIFNQSV9NQ1JfQ0xSX1JYRl9NQVNLKQorI2RlZmluZSBTUElfTUNSX0NMUl9UWEZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwMFUpCisjZGVmaW5lIFNQSV9NQ1JfQ0xSX1RYRl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDExVSkKKyNkZWZpbmUgU1BJX01DUl9DTFJfVFhGKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfQ0xSX1RYRl9TSElGVCkpICYgU1BJX01DUl9DTFJfVFhGX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfRElTX1JYRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIFNQSV9NQ1JfRElTX1JYRl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgU1BJX01DUl9ESVNfUlhGKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfRElTX1JYRl9TSElGVCkpICYgU1BJX01DUl9ESVNfUlhGX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfRElTX1RYRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMFUpCisjZGVmaW5lIFNQSV9NQ1JfRElTX1RYRl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDEzVSkKKyNkZWZpbmUgU1BJX01DUl9ESVNfVFhGKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfRElTX1RYRl9TSElGVCkpICYgU1BJX01DUl9ESVNfVFhGX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfTURJU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMFUpCisjZGVmaW5lIFNQSV9NQ1JfTURJU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDE0VSkKKyNkZWZpbmUgU1BJX01DUl9NRElTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfTURJU19TSElGVCkpICYgU1BJX01DUl9NRElTX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfRE9aRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIFNQSV9NQ1JfRE9aRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDE1VSkKKyNkZWZpbmUgU1BJX01DUl9ET1pFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfRE9aRV9TSElGVCkpICYgU1BJX01DUl9ET1pFX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfUENTSVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RjAwMDBVKQorI2RlZmluZSBTUElfTUNSX1BDU0lTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFNQSV9NQ1JfUENTSVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfTUNSX1BDU0lTX1NISUZUKSkgJiBTUElfTUNSX1BDU0lTX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfUk9PRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFNQSV9NQ1JfUk9PRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgU1BJX01DUl9ST09FKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfUk9PRV9TSElGVCkpICYgU1BJX01DUl9ST09FX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfTVRGRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIFNQSV9NQ1JfTVRGRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDI2VSkKKyNkZWZpbmUgU1BJX01DUl9NVEZFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfTVRGRV9TSElGVCkpICYgU1BJX01DUl9NVEZFX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfRlJaX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFNQSV9NQ1JfRlJaX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDI3VSkKKyNkZWZpbmUgU1BJX01DUl9GUlooeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfRlJaX1NISUZUKSkgJiBTUElfTUNSX0ZSWl9NQVNLKQorI2RlZmluZSBTUElfTUNSX0RDT05GX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDMwMDAwMDAwVSkKKyNkZWZpbmUgU1BJX01DUl9EQ09ORl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMjhVKQorI2RlZmluZSBTUElfTUNSX0RDT05GKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX01DUl9EQ09ORl9TSElGVCkpICYgU1BJX01DUl9EQ09ORl9NQVNLKQorI2RlZmluZSBTUElfTUNSX0NPTlRfU0NLRV9NQVNLICAgICAgICAgICAgICAgICAgICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgU1BJX01DUl9DT05UX1NDS0VfU0hJRlQgICAgICAgICAgICAgICAgICAoMzBVKQorI2RlZmluZSBTUElfTUNSX0NPTlRfU0NLRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX01DUl9DT05UX1NDS0VfU0hJRlQpKSAmIFNQSV9NQ1JfQ09OVF9TQ0tFX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfTVNUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBTUElfTUNSX01TVFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIFNQSV9NQ1JfTVNUUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfTUNSX01TVFJfU0hJRlQpKSAmIFNQSV9NQ1JfTVNUUl9NQVNLKQorCisvKiEgQG5hbWUgVENSIC0gVHJhbnNmZXIgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BJX1RDUl9TUElfVENOVF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFNQSV9UQ1JfU1BJX1RDTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgU1BJX1RDUl9TUElfVENOVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9UQ1JfU1BJX1RDTlRfU0hJRlQpKSAmIFNQSV9UQ1JfU1BJX1RDTlRfTUFTSykKKworLyohIEBuYW1lIENUQVIgLSBDbG9jayBhbmQgVHJhbnNmZXIgQXR0cmlidXRlcyBSZWdpc3RlciAoSW4gTWFzdGVyIE1vZGUpICovCisjZGVmaW5lIFNQSV9DVEFSX0JSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RlUpCisjZGVmaW5lIFNQSV9DVEFSX0JSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTUElfQ1RBUl9CUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfQlJfU0hJRlQpKSAmIFNQSV9DVEFSX0JSX01BU0spCisjZGVmaW5lIFNQSV9DVEFSX0RUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RjBVKQorI2RlZmluZSBTUElfQ1RBUl9EVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgU1BJX0NUQVJfRFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9DVEFSX0RUX1NISUZUKSkgJiBTUElfQ1RBUl9EVF9NQVNLKQorI2RlZmluZSBTUElfQ1RBUl9BU0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweEYwMFUpCisjZGVmaW5lIFNQSV9DVEFSX0FTQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBTUElfQ1RBUl9BU0MoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfQVNDX1NISUZUKSkgJiBTUElfQ1RBUl9BU0NfTUFTSykKKyNkZWZpbmUgU1BJX0NUQVJfQ1NTQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwVSkKKyNkZWZpbmUgU1BJX0NUQVJfQ1NTQ0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMTJVKQorI2RlZmluZSBTUElfQ1RBUl9DU1NDSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfQ1NTQ0tfU0hJRlQpKSAmIFNQSV9DVEFSX0NTU0NLX01BU0spCisjZGVmaW5lIFNQSV9DVEFSX1BCUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MzAwMDBVKQorI2RlZmluZSBTUElfQ1RBUl9QQlJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFNQSV9DVEFSX1BCUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9QQlJfU0hJRlQpKSAmIFNQSV9DVEFSX1BCUl9NQVNLKQorI2RlZmluZSBTUElfQ1RBUl9QRFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweEMwMDAwVSkKKyNkZWZpbmUgU1BJX0NUQVJfUERUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMThVKQorI2RlZmluZSBTUElfQ1RBUl9QRFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfUERUX1NISUZUKSkgJiBTUElfQ1RBUl9QRFRfTUFTSykKKyNkZWZpbmUgU1BJX0NUQVJfUEFTQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzMDAwMDBVKQorI2RlZmluZSBTUElfQ1RBUl9QQVNDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyMFUpCisjZGVmaW5lIFNQSV9DVEFSX1BBU0MoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9QQVNDX1NISUZUKSkgJiBTUElfQ1RBUl9QQVNDX01BU0spCisjZGVmaW5lIFNQSV9DVEFSX1BDU1NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4QzAwMDAwVSkKKyNkZWZpbmUgU1BJX0NUQVJfUENTU0NLX1NISUZUICAgICAgICAgICAgICAgICAgICAoMjJVKQorI2RlZmluZSBTUElfQ1RBUl9QQ1NTQ0soeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfUENTU0NLX1NISUZUKSkgJiBTUElfQ1RBUl9QQ1NTQ0tfTUFTSykKKyNkZWZpbmUgU1BJX0NUQVJfTFNCRkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgU1BJX0NUQVJfTFNCRkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBTUElfQ1RBUl9MU0JGRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfTFNCRkVfU0hJRlQpKSAmIFNQSV9DVEFSX0xTQkZFX01BU0spCisjZGVmaW5lIFNQSV9DVEFSX0NQSEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFNQSV9DVEFSX0NQSEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDI1VSkKKyNkZWZpbmUgU1BJX0NUQVJfQ1BIQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9DVEFSX0NQSEFfU0hJRlQpKSAmIFNQSV9DVEFSX0NQSEFfTUFTSykKKyNkZWZpbmUgU1BJX0NUQVJfQ1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDAwVSkKKyNkZWZpbmUgU1BJX0NUQVJfQ1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMjZVKQorI2RlZmluZSBTUElfQ1RBUl9DUE9MKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfQ1BPTF9TSElGVCkpICYgU1BJX0NUQVJfQ1BPTF9NQVNLKQorI2RlZmluZSBTUElfQ1RBUl9GTVNaX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDc4MDAwMDAwVSkKKyNkZWZpbmUgU1BJX0NUQVJfRk1TWl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMjdVKQorI2RlZmluZSBTUElfQ1RBUl9GTVNaKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfRk1TWl9TSElGVCkpICYgU1BJX0NUQVJfRk1TWl9NQVNLKQorI2RlZmluZSBTUElfQ1RBUl9EQlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgU1BJX0NUQVJfREJSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBTUElfQ1RBUl9EQlIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfREJSX1NISUZUKSkgJiBTUElfQ1RBUl9EQlJfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFNQSV9DVEFSICovCisjZGVmaW5lIFNQSV9DVEFSX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorCisvKiEgQG5hbWUgQ1RBUl9TTEFWRSAtIENsb2NrIGFuZCBUcmFuc2ZlciBBdHRyaWJ1dGVzIFJlZ2lzdGVyIChJbiBTbGF2ZSBNb2RlKSAqLworI2RlZmluZSBTUElfQ1RBUl9TTEFWRV9DUEhBX01BU0sgICAgICAgICAgICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBTUElfQ1RBUl9TTEFWRV9DUEhBX1NISUZUICAgICAgICAgICAgICAgICgyNVUpCisjZGVmaW5lIFNQSV9DVEFSX1NMQVZFX0NQSEEoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9TTEFWRV9DUEhBX1NISUZUKSkgJiBTUElfQ1RBUl9TTEFWRV9DUEhBX01BU0spCisjZGVmaW5lIFNQSV9DVEFSX1NMQVZFX0NQT0xfTUFTSyAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIFNQSV9DVEFSX1NMQVZFX0NQT0xfU0hJRlQgICAgICAgICAgICAgICAgKDI2VSkKKyNkZWZpbmUgU1BJX0NUQVJfU0xBVkVfQ1BPTCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9DVEFSX1NMQVZFX0NQT0xfU0hJRlQpKSAmIFNQSV9DVEFSX1NMQVZFX0NQT0xfTUFTSykKKyNkZWZpbmUgU1BJX0NUQVJfU0xBVkVfRk1TWl9NQVNLICAgICAgICAgICAgICAgICAoMHg3ODAwMDAwMFUpCisjZGVmaW5lIFNQSV9DVEFSX1NMQVZFX0ZNU1pfU0hJRlQgICAgICAgICAgICAgICAgKDI3VSkKKyNkZWZpbmUgU1BJX0NUQVJfU0xBVkVfRk1TWih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9DVEFSX1NMQVZFX0ZNU1pfU0hJRlQpKSAmIFNQSV9DVEFSX1NMQVZFX0ZNU1pfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFNQSV9DVEFSX1NMQVZFICovCisjZGVmaW5lIFNQSV9DVEFSX1NMQVZFX0NPVU5UICAgICAgICAgICAgICAgICAgICAgKDFVKQorCisvKiEgQG5hbWUgU1IgLSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BJX1NSX1BPUE5YVFBUUl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgU1BJX1NSX1BPUE5YVFBUUl9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNQSV9TUl9QT1BOWFRQVFIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfU1JfUE9QTlhUUFRSX1NISUZUKSkgJiBTUElfU1JfUE9QTlhUUFRSX01BU0spCisjZGVmaW5lIFNQSV9TUl9SWENUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4RjBVKQorI2RlZmluZSBTUElfU1JfUlhDVFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgU1BJX1NSX1JYQ1RSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9TUl9SWENUUl9TSElGVCkpICYgU1BJX1NSX1JYQ1RSX01BU0spCisjZGVmaW5lIFNQSV9TUl9UWE5YVFBUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RjAwVSkKKyNkZWZpbmUgU1BJX1NSX1RYTlhUUFRSX1NISUZUICAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFNQSV9TUl9UWE5YVFBUUih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfU1JfVFhOWFRQVFJfU0hJRlQpKSAmIFNQSV9TUl9UWE5YVFBUUl9NQVNLKQorI2RlZmluZSBTUElfU1JfVFhDVFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweEYwMDBVKQorI2RlZmluZSBTUElfU1JfVFhDVFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxMlUpCisjZGVmaW5lIFNQSV9TUl9UWENUUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfU1JfVFhDVFJfU0hJRlQpKSAmIFNQSV9TUl9UWENUUl9NQVNLKQorI2RlZmluZSBTUElfU1JfUkZERl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgU1BJX1NSX1JGREZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMTdVKQorI2RlZmluZSBTUElfU1JfUkZERih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1NSX1JGREZfU0hJRlQpKSAmIFNQSV9TUl9SRkRGX01BU0spCisjZGVmaW5lIFNQSV9TUl9SRk9GX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDBVKQorI2RlZmluZSBTUElfU1JfUkZPRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgxOVUpCisjZGVmaW5lIFNQSV9TUl9SRk9GKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfU1JfUkZPRl9TSElGVCkpICYgU1BJX1NSX1JGT0ZfTUFTSykKKyNkZWZpbmUgU1BJX1NSX1RGRkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgU1BJX1NSX1RGRkZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMjVVKQorI2RlZmluZSBTUElfU1JfVEZGRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1NSX1RGRkZfU0hJRlQpKSAmIFNQSV9TUl9URkZGX01BU0spCisjZGVmaW5lIFNQSV9TUl9URlVGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFNQSV9TUl9URlVGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDI3VSkKKyNkZWZpbmUgU1BJX1NSX1RGVUYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9TUl9URlVGX1NISUZUKSkgJiBTUElfU1JfVEZVRl9NQVNLKQorI2RlZmluZSBTUElfU1JfRU9RRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwMDAwVSkKKyNkZWZpbmUgU1BJX1NSX0VPUUZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMjhVKQorI2RlZmluZSBTUElfU1JfRU9RRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1NSX0VPUUZfU0hJRlQpKSAmIFNQSV9TUl9FT1FGX01BU0spCisjZGVmaW5lIFNQSV9TUl9UWFJYU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBTUElfU1JfVFhSWFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzMFUpCisjZGVmaW5lIFNQSV9TUl9UWFJYUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfU1JfVFhSWFNfU0hJRlQpKSAmIFNQSV9TUl9UWFJYU19NQVNLKQorI2RlZmluZSBTUElfU1JfVENGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgU1BJX1NSX1RDRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBTUElfU1JfVENGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1NSX1RDRl9TSElGVCkpICYgU1BJX1NSX1RDRl9NQVNLKQorCisvKiEgQG5hbWUgUlNFUiAtIERNQS9JbnRlcnJ1cHQgUmVxdWVzdCBTZWxlY3QgYW5kIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBTUElfUlNFUl9SRkRGX0RJUlNfTUFTSyAgICAgICAgICAgICAgICAgICgweDEwMDAwVSkKKyNkZWZpbmUgU1BJX1JTRVJfUkZERl9ESVJTX1NISUZUICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBTUElfUlNFUl9SRkRGX0RJUlMoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1JTRVJfUkZERl9ESVJTX1NISUZUKSkgJiBTUElfUlNFUl9SRkRGX0RJUlNfTUFTSykKKyNkZWZpbmUgU1BJX1JTRVJfUkZERl9SRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMFUpCisjZGVmaW5lIFNQSV9SU0VSX1JGREZfUkVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDE3VSkKKyNkZWZpbmUgU1BJX1JTRVJfUkZERl9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9SU0VSX1JGREZfUkVfU0hJRlQpKSAmIFNQSV9SU0VSX1JGREZfUkVfTUFTSykKKyNkZWZpbmUgU1BJX1JTRVJfUkZPRl9SRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMFUpCisjZGVmaW5lIFNQSV9SU0VSX1JGT0ZfUkVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDE5VSkKKyNkZWZpbmUgU1BJX1JTRVJfUkZPRl9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9SU0VSX1JGT0ZfUkVfU0hJRlQpKSAmIFNQSV9SU0VSX1JGT0ZfUkVfTUFTSykKKyNkZWZpbmUgU1BJX1JTRVJfVEZGRl9ESVJTX01BU0sgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgU1BJX1JTRVJfVEZGRl9ESVJTX1NISUZUICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBTUElfUlNFUl9URkZGX0RJUlMoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1JTRVJfVEZGRl9ESVJTX1NISUZUKSkgJiBTUElfUlNFUl9URkZGX0RJUlNfTUFTSykKKyNkZWZpbmUgU1BJX1JTRVJfVEZGRl9SRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgU1BJX1JTRVJfVEZGRl9SRV9TSElGVCAgICAgICAgICAgICAgICAgICAoMjVVKQorI2RlZmluZSBTUElfUlNFUl9URkZGX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1JTRVJfVEZGRl9SRV9TSElGVCkpICYgU1BJX1JTRVJfVEZGRl9SRV9NQVNLKQorI2RlZmluZSBTUElfUlNFUl9URlVGX1JFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDBVKQorI2RlZmluZSBTUElfUlNFUl9URlVGX1JFX1NISUZUICAgICAgICAgICAgICAgICAgICgyN1UpCisjZGVmaW5lIFNQSV9SU0VSX1RGVUZfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUlNFUl9URlVGX1JFX1NISUZUKSkgJiBTUElfUlNFUl9URlVGX1JFX01BU0spCisjZGVmaW5lIFNQSV9SU0VSX0VPUUZfUkVfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBTUElfUlNFUl9FT1FGX1JFX1NISUZUICAgICAgICAgICAgICAgICAgICgyOFUpCisjZGVmaW5lIFNQSV9SU0VSX0VPUUZfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUlNFUl9FT1FGX1JFX1NISUZUKSkgJiBTUElfUlNFUl9FT1FGX1JFX01BU0spCisjZGVmaW5lIFNQSV9SU0VSX1RDRl9SRV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBTUElfUlNFUl9UQ0ZfUkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIFNQSV9SU0VSX1RDRl9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUlNFUl9UQ0ZfUkVfU0hJRlQpKSAmIFNQSV9SU0VSX1RDRl9SRV9NQVNLKQorCisvKiEgQG5hbWUgUFVTSFIgLSBQVVNIIFRYIEZJRk8gUmVnaXN0ZXIgSW4gTWFzdGVyIE1vZGUgKi8KKyNkZWZpbmUgU1BJX1BVU0hSX1RYREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgU1BJX1BVU0hSX1RYREFUQV9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNQSV9QVVNIUl9UWERBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUFVTSFJfVFhEQVRBX1NISUZUKSkgJiBTUElfUFVTSFJfVFhEQVRBX01BU0spCisjZGVmaW5lIFNQSV9QVVNIUl9QQ1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RjAwMDBVKQorI2RlZmluZSBTUElfUFVTSFJfUENTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFNQSV9QVVNIUl9QQ1MoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUFVTSFJfUENTX1NISUZUKSkgJiBTUElfUFVTSFJfUENTX01BU0spCisjZGVmaW5lIFNQSV9QVVNIUl9DVENOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIFNQSV9QVVNIUl9DVENOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDI2VSkKKyNkZWZpbmUgU1BJX1BVU0hSX0NUQ05UKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9QVVNIUl9DVENOVF9TSElGVCkpICYgU1BJX1BVU0hSX0NUQ05UX01BU0spCisjZGVmaW5lIFNQSV9QVVNIUl9FT1FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFNQSV9QVVNIUl9FT1FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDI3VSkKKyNkZWZpbmUgU1BJX1BVU0hSX0VPUSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9QVVNIUl9FT1FfU0hJRlQpKSAmIFNQSV9QVVNIUl9FT1FfTUFTSykKKyNkZWZpbmUgU1BJX1BVU0hSX0NUQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg3MDAwMDAwMFUpCisjZGVmaW5lIFNQSV9QVVNIUl9DVEFTX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDI4VSkKKyNkZWZpbmUgU1BJX1BVU0hSX0NUQVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9QVVNIUl9DVEFTX1NISUZUKSkgJiBTUElfUFVTSFJfQ1RBU19NQVNLKQorI2RlZmluZSBTUElfUFVTSFJfQ09OVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgU1BJX1BVU0hSX0NPTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBTUElfUFVTSFJfQ09OVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1BVU0hSX0NPTlRfU0hJRlQpKSAmIFNQSV9QVVNIUl9DT05UX01BU0spCisKKy8qISBAbmFtZSBQVVNIUl9TTEFWRSAtIFBVU0ggVFggRklGTyBSZWdpc3RlciBJbiBTbGF2ZSBNb2RlICovCisjZGVmaW5lIFNQSV9QVVNIUl9TTEFWRV9UWERBVEFfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFNQSV9QVVNIUl9TTEFWRV9UWERBVEFfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTUElfUFVTSFJfU0xBVkVfVFhEQVRBKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1BVU0hSX1NMQVZFX1RYREFUQV9TSElGVCkpICYgU1BJX1BVU0hSX1NMQVZFX1RYREFUQV9NQVNLKQorCisvKiEgQG5hbWUgUE9QUiAtIFBPUCBSWCBGSUZPIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQSV9QT1BSX1JYREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBTUElfUE9QUl9SWERBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU1BJX1BPUFJfUlhEQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9QT1BSX1JYREFUQV9TSElGVCkpICYgU1BJX1BPUFJfUlhEQVRBX01BU0spCisKKy8qISBAbmFtZSBUWEZSMCAtIFRyYW5zbWl0IEZJRk8gUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQSV9UWEZSMF9UWERBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFNQSV9UWEZSMF9UWERBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTUElfVFhGUjBfVFhEQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1RYRlIwX1RYREFUQV9TSElGVCkpICYgU1BJX1RYRlIwX1RYREFUQV9NQVNLKQorI2RlZmluZSBTUElfVFhGUjBfVFhDTURfVFhEQVRBX01BU0sgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgU1BJX1RYRlIwX1RYQ01EX1RYREFUQV9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBTUElfVFhGUjBfVFhDTURfVFhEQVRBKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1RYRlIwX1RYQ01EX1RYREFUQV9TSElGVCkpICYgU1BJX1RYRlIwX1RYQ01EX1RYREFUQV9NQVNLKQorCisvKiEgQG5hbWUgVFhGUjEgLSBUcmFuc21pdCBGSUZPIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUElfVFhGUjFfVFhEQVRBX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBTUElfVFhGUjFfVFhEQVRBX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU1BJX1RYRlIxX1RYREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9UWEZSMV9UWERBVEFfU0hJRlQpKSAmIFNQSV9UWEZSMV9UWERBVEFfTUFTSykKKyNkZWZpbmUgU1BJX1RYRlIxX1RYQ01EX1RYREFUQV9NQVNLICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFNQSV9UWEZSMV9UWENNRF9UWERBVEFfU0hJRlQgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgU1BJX1RYRlIxX1RYQ01EX1RYREFUQSh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9UWEZSMV9UWENNRF9UWERBVEFfU0hJRlQpKSAmIFNQSV9UWEZSMV9UWENNRF9UWERBVEFfTUFTSykKKworLyohIEBuYW1lIFRYRlIyIC0gVHJhbnNtaXQgRklGTyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BJX1RYRlIyX1RYREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgU1BJX1RYRlIyX1RYREFUQV9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNQSV9UWEZSMl9UWERBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfVFhGUjJfVFhEQVRBX1NISUZUKSkgJiBTUElfVFhGUjJfVFhEQVRBX01BU0spCisjZGVmaW5lIFNQSV9UWEZSMl9UWENNRF9UWERBVEFfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBTUElfVFhGUjJfVFhDTURfVFhEQVRBX1NISUZUICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFNQSV9UWEZSMl9UWENNRF9UWERBVEEoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfVFhGUjJfVFhDTURfVFhEQVRBX1NISUZUKSkgJiBTUElfVFhGUjJfVFhDTURfVFhEQVRBX01BU0spCisKKy8qISBAbmFtZSBUWEZSMyAtIFRyYW5zbWl0IEZJRk8gUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQSV9UWEZSM19UWERBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFNQSV9UWEZSM19UWERBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTUElfVFhGUjNfVFhEQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1RYRlIzX1RYREFUQV9TSElGVCkpICYgU1BJX1RYRlIzX1RYREFUQV9NQVNLKQorI2RlZmluZSBTUElfVFhGUjNfVFhDTURfVFhEQVRBX01BU0sgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgU1BJX1RYRlIzX1RYQ01EX1RYREFUQV9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBTUElfVFhGUjNfVFhDTURfVFhEQVRBKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1RYRlIzX1RYQ01EX1RYREFUQV9TSElGVCkpICYgU1BJX1RYRlIzX1RYQ01EX1RYREFUQV9NQVNLKQorCisvKiEgQG5hbWUgUlhGUjAgLSBSZWNlaXZlIEZJRk8gUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQSV9SWEZSMF9SWERBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBTUElfUlhGUjBfUlhEQVRBX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU1BJX1JYRlIwX1JYREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9SWEZSMF9SWERBVEFfU0hJRlQpKSAmIFNQSV9SWEZSMF9SWERBVEFfTUFTSykKKworLyohIEBuYW1lIFJYRlIxIC0gUmVjZWl2ZSBGSUZPIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUElfUlhGUjFfUlhEQVRBX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgU1BJX1JYRlIxX1JYREFUQV9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNQSV9SWEZSMV9SWERBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUlhGUjFfUlhEQVRBX1NISUZUKSkgJiBTUElfUlhGUjFfUlhEQVRBX01BU0spCisKKy8qISBAbmFtZSBSWEZSMiAtIFJlY2VpdmUgRklGTyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BJX1JYRlIyX1JYREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFNQSV9SWEZSMl9SWERBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTUElfUlhGUjJfUlhEQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1JYRlIyX1JYREFUQV9TSElGVCkpICYgU1BJX1JYRlIyX1JYREFUQV9NQVNLKQorCisvKiEgQG5hbWUgUlhGUjMgLSBSZWNlaXZlIEZJRk8gUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQSV9SWEZSM19SWERBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBTUElfUlhGUjNfUlhEQVRBX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU1BJX1JYRlIzX1JYREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9SWEZSM19SWERBVEFfU0hJRlQpKSAmIFNQSV9SWEZSM19SWERBVEFfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFNQSV9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFNQSSAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFNQSTAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFNQSTBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMkMwMDB1KQorLyoqIFBlcmlwaGVyYWwgU1BJMCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgU1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNQSV9UeXBlICopU1BJMF9CQVNFKQorLyoqIFBlcmlwaGVyYWwgU1BJMSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgU1BJMV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAyRDAwMHUpCisvKiogUGVyaXBoZXJhbCBTUEkxIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBTUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1BJX1R5cGUgKilTUEkxX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgU1BJX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFNQSTBfQkFTRSwgU1BJMV9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBTUEkgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFNQSV9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBTUEkwLCBTUEkxIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIFNQSSBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgU1BJX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFNQSTBfSVJRbiwgU1BJMV9JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBTUElfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBUUE0gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBUUE1fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgVFBNIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBUUE0gLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IFNDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0dXMgYW5kIENvbnRyb2wsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvdW50ZXIsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgTU9EOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1vZHVsbywgb2Zmc2V0OiAweDggKi8KKyAgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldDogMHhDLCBhcnJheSBzdGVwOiAweDggKi8KKyAgICBfX0lPIHVpbnQzMl90IENuU0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDaGFubmVsIChuKSBTdGF0dXMgYW5kIENvbnRyb2wsIGFycmF5IG9mZnNldDogMHhDLCBhcnJheSBzdGVwOiAweDggKi8KKyAgICBfX0lPIHVpbnQzMl90IENuVjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDaGFubmVsIChuKSBWYWx1ZSwgYXJyYXkgb2Zmc2V0OiAweDEwLCBhcnJheSBzdGVwOiAweDggKi8KKyAgfSBDT05UUk9MU1s0XTsKKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbMzZdOworICBfX0lPIHVpbnQzMl90IFNUQVRVUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDYXB0dXJlIGFuZCBDb21wYXJlIFN0YXR1cywgb2Zmc2V0OiAweDUwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8xWzE2XTsKKyAgX19JTyB1aW50MzJfdCBDT01CSU5FOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29tYmluZSBDaGFubmVsIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NjQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzJbOF07CisgIF9fSU8gdWludDMyX3QgUE9MOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENoYW5uZWwgUG9sYXJpdHksIG9mZnNldDogMHg3MCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfM1s0XTsKKyAgX19JTyB1aW50MzJfdCBGSUxURVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRmlsdGVyIENvbnRyb2wsIG9mZnNldDogMHg3OCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfNFs0XTsKKyAgX19JTyB1aW50MzJfdCBRRENUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUXVhZHJhdHVyZSBEZWNvZGVyIENvbnRyb2wgYW5kIFN0YXR1cywgb2Zmc2V0OiAweDgwICovCisgIF9fSU8gdWludDMyX3QgQ09ORjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbmZpZ3VyYXRpb24sIG9mZnNldDogMHg4NCAqLworfSBUUE1fVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gVFBNIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgVFBNX1JlZ2lzdGVyX01hc2tzIFRQTSBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgU0MgLSBTdGF0dXMgYW5kIENvbnRyb2wgKi8KKyNkZWZpbmUgVFBNX1NDX1BTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3VSkKKyNkZWZpbmUgVFBNX1NDX1BTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRQTV9TQ19QUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fU0NfUFNfU0hJRlQpKSAmIFRQTV9TQ19QU19NQVNLKQorI2RlZmluZSBUUE1fU0NfQ01PRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDE4VSkKKyNkZWZpbmUgVFBNX1NDX0NNT0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIFRQTV9TQ19DTU9EKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fU0NfQ01PRF9TSElGVCkpICYgVFBNX1NDX0NNT0RfTUFTSykKKyNkZWZpbmUgVFBNX1NDX0NQV01TX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFRQTV9TQ19DUFdNU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBUUE1fU0NfQ1BXTVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1NDX0NQV01TX1NISUZUKSkgJiBUUE1fU0NfQ1BXTVNfTUFTSykKKyNkZWZpbmUgVFBNX1NDX1RPSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFRQTV9TQ19UT0lFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBUUE1fU0NfVE9JRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1NDX1RPSUVfU0hJRlQpKSAmIFRQTV9TQ19UT0lFX01BU0spCisjZGVmaW5lIFRQTV9TQ19UT0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBUUE1fU0NfVE9GX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgVFBNX1NDX1RPRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9TQ19UT0ZfU0hJRlQpKSAmIFRQTV9TQ19UT0ZfTUFTSykKKyNkZWZpbmUgVFBNX1NDX0RNQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBUUE1fU0NfRE1BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgVFBNX1NDX0RNQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9TQ19ETUFfU0hJRlQpKSAmIFRQTV9TQ19ETUFfTUFTSykKKworLyohIEBuYW1lIENOVCAtIENvdW50ZXIgKi8KKyNkZWZpbmUgVFBNX0NOVF9DT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgVFBNX0NOVF9DT1VOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRQTV9DTlRfQ09VTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ05UX0NPVU5UX1NISUZUKSkgJiBUUE1fQ05UX0NPVU5UX01BU0spCisKKy8qISBAbmFtZSBNT0QgLSBNb2R1bG8gKi8KKyNkZWZpbmUgVFBNX01PRF9NT0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgVFBNX01PRF9NT0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRQTV9NT0RfTU9EKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fTU9EX01PRF9TSElGVCkpICYgVFBNX01PRF9NT0RfTUFTSykKKworLyohIEBuYW1lIENuU0MgLSBDaGFubmVsIChuKSBTdGF0dXMgYW5kIENvbnRyb2wgKi8KKyNkZWZpbmUgVFBNX0NuU0NfRE1BX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgVFBNX0NuU0NfRE1BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRQTV9DblNDX0RNQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ25TQ19ETUFfU0hJRlQpKSAmIFRQTV9DblNDX0RNQV9NQVNLKQorI2RlZmluZSBUUE1fQ25TQ19FTFNBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBUUE1fQ25TQ19FTFNBX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgVFBNX0NuU0NfRUxTQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DblNDX0VMU0FfU0hJRlQpKSAmIFRQTV9DblNDX0VMU0FfTUFTSykKKyNkZWZpbmUgVFBNX0NuU0NfRUxTQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgVFBNX0NuU0NfRUxTQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIFRQTV9DblNDX0VMU0IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ25TQ19FTFNCX1NISUZUKSkgJiBUUE1fQ25TQ19FTFNCX01BU0spCisjZGVmaW5lIFRQTV9DblNDX01TQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBUUE1fQ25TQ19NU0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgVFBNX0NuU0NfTVNBKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DblNDX01TQV9TSElGVCkpICYgVFBNX0NuU0NfTVNBX01BU0spCisjZGVmaW5lIFRQTV9DblNDX01TQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBUUE1fQ25TQ19NU0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgVFBNX0NuU0NfTVNCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DblNDX01TQl9TSElGVCkpICYgVFBNX0NuU0NfTVNCX01BU0spCisjZGVmaW5lIFRQTV9DblNDX0NISUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBUUE1fQ25TQ19DSElFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgVFBNX0NuU0NfQ0hJRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DblNDX0NISUVfU0hJRlQpKSAmIFRQTV9DblNDX0NISUVfTUFTSykKKyNkZWZpbmUgVFBNX0NuU0NfQ0hGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFRQTV9DblNDX0NIRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBUUE1fQ25TQ19DSEYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NuU0NfQ0hGX1NISUZUKSkgJiBUUE1fQ25TQ19DSEZfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFRQTV9DblNDICovCisjZGVmaW5lIFRQTV9DblNDX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgQ25WIC0gQ2hhbm5lbCAobikgVmFsdWUgKi8KKyNkZWZpbmUgVFBNX0NuVl9WQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgVFBNX0NuVl9WQUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRQTV9DblZfVkFMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ25WX1ZBTF9TSElGVCkpICYgVFBNX0NuVl9WQUxfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFRQTV9DblYgKi8KKyNkZWZpbmUgVFBNX0NuVl9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBTVEFUVVMgLSBDYXB0dXJlIGFuZCBDb21wYXJlIFN0YXR1cyAqLworI2RlZmluZSBUUE1fU1RBVFVTX0NIMEZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBUUE1fU1RBVFVTX0NIMEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFBNX1NUQVRVU19DSDBGKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9TVEFUVVNfQ0gwRl9TSElGVCkpICYgVFBNX1NUQVRVU19DSDBGX01BU0spCisjZGVmaW5lIFRQTV9TVEFUVVNfQ0gxRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFRQTV9TVEFUVVNfQ0gxRl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBUUE1fU1RBVFVTX0NIMUYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1NUQVRVU19DSDFGX1NISUZUKSkgJiBUUE1fU1RBVFVTX0NIMUZfTUFTSykKKyNkZWZpbmUgVFBNX1NUQVRVU19DSDJGX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgVFBNX1NUQVRVU19DSDJGX1NISUZUICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFRQTV9TVEFUVVNfQ0gyRih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fU1RBVFVTX0NIMkZfU0hJRlQpKSAmIFRQTV9TVEFUVVNfQ0gyRl9NQVNLKQorI2RlZmluZSBUUE1fU1RBVFVTX0NIM0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBUUE1fU1RBVFVTX0NIM0ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgVFBNX1NUQVRVU19DSDNGKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9TVEFUVVNfQ0gzRl9TSElGVCkpICYgVFBNX1NUQVRVU19DSDNGX01BU0spCisjZGVmaW5lIFRQTV9TVEFUVVNfVE9GX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwVSkKKyNkZWZpbmUgVFBNX1NUQVRVU19UT0ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFRQTV9TVEFUVVNfVE9GKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fU1RBVFVTX1RPRl9TSElGVCkpICYgVFBNX1NUQVRVU19UT0ZfTUFTSykKKworLyohIEBuYW1lIENPTUJJTkUgLSBDb21iaW5lIENoYW5uZWwgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFBNX0NPTUJJTkVfQ09NQklORTBfTUFTSyAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgVFBNX0NPTUJJTkVfQ09NQklORTBfU0hJRlQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRQTV9DT01CSU5FX0NPTUJJTkUwKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ09NQklORV9DT01CSU5FMF9TSElGVCkpICYgVFBNX0NPTUJJTkVfQ09NQklORTBfTUFTSykKKyNkZWZpbmUgVFBNX0NPTUJJTkVfQ09NU1dBUDBfTUFTSyAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgVFBNX0NPTUJJTkVfQ09NU1dBUDBfU0hJRlQgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFRQTV9DT01CSU5FX0NPTVNXQVAwKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ09NQklORV9DT01TV0FQMF9TSElGVCkpICYgVFBNX0NPTUJJTkVfQ09NU1dBUDBfTUFTSykKKyNkZWZpbmUgVFBNX0NPTUJJTkVfQ09NQklORTFfTUFTSyAgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBUUE1fQ09NQklORV9DT01CSU5FMV9TSElGVCAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgVFBNX0NPTUJJTkVfQ09NQklORTEoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DT01CSU5FX0NPTUJJTkUxX1NISUZUKSkgJiBUUE1fQ09NQklORV9DT01CSU5FMV9NQVNLKQorI2RlZmluZSBUUE1fQ09NQklORV9DT01TV0FQMV9NQVNLICAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIFRQTV9DT01CSU5FX0NPTVNXQVAxX1NISUZUICAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBUUE1fQ09NQklORV9DT01TV0FQMSh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTUJJTkVfQ09NU1dBUDFfU0hJRlQpKSAmIFRQTV9DT01CSU5FX0NPTVNXQVAxX01BU0spCisKKy8qISBAbmFtZSBQT0wgLSBDaGFubmVsIFBvbGFyaXR5ICovCisjZGVmaW5lIFRQTV9QT0xfUE9MMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFRQTV9QT0xfUE9MMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUE1fUE9MX1BPTDAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1BPTF9QT0wwX1NISUZUKSkgJiBUUE1fUE9MX1BPTDBfTUFTSykKKyNkZWZpbmUgVFBNX1BPTF9QT0wxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgVFBNX1BPTF9QT0wxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFRQTV9QT0xfUE9MMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fUE9MX1BPTDFfU0hJRlQpKSAmIFRQTV9QT0xfUE9MMV9NQVNLKQorI2RlZmluZSBUUE1fUE9MX1BPTDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBUUE1fUE9MX1BPTDJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgVFBNX1BPTF9QT0wyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9QT0xfUE9MMl9TSElGVCkpICYgVFBNX1BPTF9QT0wyX01BU0spCisjZGVmaW5lIFRQTV9QT0xfUE9MM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFRQTV9QT0xfUE9MM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBUUE1fUE9MX1BPTDMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1BPTF9QT0wzX1NISUZUKSkgJiBUUE1fUE9MX1BPTDNfTUFTSykKKworLyohIEBuYW1lIEZJTFRFUiAtIEZpbHRlciBDb250cm9sICovCisjZGVmaW5lIFRQTV9GSUxURVJfQ0gwRlZBTF9NQVNLICAgICAgICAgICAgICAgICAgKDB4RlUpCisjZGVmaW5lIFRQTV9GSUxURVJfQ0gwRlZBTF9TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUE1fRklMVEVSX0NIMEZWQUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0ZJTFRFUl9DSDBGVkFMX1NISUZUKSkgJiBUUE1fRklMVEVSX0NIMEZWQUxfTUFTSykKKyNkZWZpbmUgVFBNX0ZJTFRFUl9DSDFGVkFMX01BU0sgICAgICAgICAgICAgICAgICAoMHhGMFUpCisjZGVmaW5lIFRQTV9GSUxURVJfQ0gxRlZBTF9TSElGVCAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBUUE1fRklMVEVSX0NIMUZWQUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0ZJTFRFUl9DSDFGVkFMX1NISUZUKSkgJiBUUE1fRklMVEVSX0NIMUZWQUxfTUFTSykKKyNkZWZpbmUgVFBNX0ZJTFRFUl9DSDJGVkFMX01BU0sgICAgICAgICAgICAgICAgICAoMHhGMDBVKQorI2RlZmluZSBUUE1fRklMVEVSX0NIMkZWQUxfU0hJRlQgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgVFBNX0ZJTFRFUl9DSDJGVkFMKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9GSUxURVJfQ0gyRlZBTF9TSElGVCkpICYgVFBNX0ZJTFRFUl9DSDJGVkFMX01BU0spCisjZGVmaW5lIFRQTV9GSUxURVJfQ0gzRlZBTF9NQVNLICAgICAgICAgICAgICAgICAgKDB4RjAwMFUpCisjZGVmaW5lIFRQTV9GSUxURVJfQ0gzRlZBTF9TSElGVCAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgVFBNX0ZJTFRFUl9DSDNGVkFMKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9GSUxURVJfQ0gzRlZBTF9TSElGVCkpICYgVFBNX0ZJTFRFUl9DSDNGVkFMX01BU0spCisKKy8qISBAbmFtZSBRRENUUkwgLSBRdWFkcmF0dXJlIERlY29kZXIgQ29udHJvbCBhbmQgU3RhdHVzICovCisjZGVmaW5lIFRQTV9RRENUUkxfUVVBREVOX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFRQTV9RRENUUkxfUVVBREVOX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUE1fUURDVFJMX1FVQURFTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1FEQ1RSTF9RVUFERU5fU0hJRlQpKSAmIFRQTV9RRENUUkxfUVVBREVOX01BU0spCisjZGVmaW5lIFRQTV9RRENUUkxfVE9GRElSX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFRQTV9RRENUUkxfVE9GRElSX1NISUZUICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBUUE1fUURDVFJMX1RPRkRJUih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1FEQ1RSTF9UT0ZESVJfU0hJRlQpKSAmIFRQTV9RRENUUkxfVE9GRElSX01BU0spCisjZGVmaW5lIFRQTV9RRENUUkxfUVVBRElSX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFRQTV9RRENUUkxfUVVBRElSX1NISUZUICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBUUE1fUURDVFJMX1FVQURJUih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1FEQ1RSTF9RVUFESVJfU0hJRlQpKSAmIFRQTV9RRENUUkxfUVVBRElSX01BU0spCisjZGVmaW5lIFRQTV9RRENUUkxfUVVBRE1PREVfTUFTSyAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFRQTV9RRENUUkxfUVVBRE1PREVfU0hJRlQgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBUUE1fUURDVFJMX1FVQURNT0RFKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1FEQ1RSTF9RVUFETU9ERV9TSElGVCkpICYgVFBNX1FEQ1RSTF9RVUFETU9ERV9NQVNLKQorCisvKiEgQG5hbWUgQ09ORiAtIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVFBNX0NPTkZfRE9aRUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFRQTV9DT05GX0RPWkVFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBUUE1fQ09ORl9ET1pFRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTkZfRE9aRUVOX1NISUZUKSkgJiBUUE1fQ09ORl9ET1pFRU5fTUFTSykKKyNkZWZpbmUgVFBNX0NPTkZfREJHTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhDMFUpCisjZGVmaW5lIFRQTV9DT05GX0RCR01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBUUE1fQ09ORl9EQkdNT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTkZfREJHTU9ERV9TSElGVCkpICYgVFBNX0NPTkZfREJHTU9ERV9NQVNLKQorI2RlZmluZSBUUE1fQ09ORl9HVEJTWU5DX01BU0sgICAgICAgICAgICAgICAgICAgICgweDEwMFUpCisjZGVmaW5lIFRQTV9DT05GX0dUQlNZTkNfU0hJRlQgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBUUE1fQ09ORl9HVEJTWU5DKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTkZfR1RCU1lOQ19TSElGVCkpICYgVFBNX0NPTkZfR1RCU1lOQ19NQVNLKQorI2RlZmluZSBUUE1fQ09ORl9HVEJFRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIFRQTV9DT05GX0dUQkVFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBUUE1fQ09ORl9HVEJFRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTkZfR1RCRUVOX1NISUZUKSkgJiBUUE1fQ09ORl9HVEJFRU5fTUFTSykKKyNkZWZpbmUgVFBNX0NPTkZfQ1NPVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIFRQTV9DT05GX0NTT1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFBNX0NPTkZfQ1NPVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DT05GX0NTT1RfU0hJRlQpKSAmIFRQTV9DT05GX0NTT1RfTUFTSykKKyNkZWZpbmUgVFBNX0NPTkZfQ1NPT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMFUpCisjZGVmaW5lIFRQTV9DT05GX0NTT09fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDE3VSkKKyNkZWZpbmUgVFBNX0NPTkZfQ1NPTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DT05GX0NTT09fU0hJRlQpKSAmIFRQTV9DT05GX0NTT09fTUFTSykKKyNkZWZpbmUgVFBNX0NPTkZfQ1JPVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMFUpCisjZGVmaW5lIFRQTV9DT05GX0NST1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDE4VSkKKyNkZWZpbmUgVFBNX0NPTkZfQ1JPVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DT05GX0NST1RfU0hJRlQpKSAmIFRQTV9DT05GX0NST1RfTUFTSykKKyNkZWZpbmUgVFBNX0NPTkZfQ1BPVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMFUpCisjZGVmaW5lIFRQTV9DT05GX0NQT1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDE5VSkKKyNkZWZpbmUgVFBNX0NPTkZfQ1BPVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DT05GX0NQT1RfU0hJRlQpKSAmIFRQTV9DT05GX0NQT1RfTUFTSykKKyNkZWZpbmUgVFBNX0NPTkZfVFJHUE9MX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDBVKQorI2RlZmluZSBUUE1fQ09ORl9UUkdQT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICgyMlUpCisjZGVmaW5lIFRQTV9DT05GX1RSR1BPTCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ09ORl9UUkdQT0xfU0hJRlQpKSAmIFRQTV9DT05GX1RSR1BPTF9NQVNLKQorI2RlZmluZSBUUE1fQ09ORl9UUkdTUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMFUpCisjZGVmaW5lIFRQTV9DT05GX1RSR1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgKDIzVSkKKyNkZWZpbmUgVFBNX0NPTkZfVFJHU1JDKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DT05GX1RSR1NSQ19TSElGVCkpICYgVFBNX0NPTkZfVFJHU1JDX01BU0spCisjZGVmaW5lIFRQTV9DT05GX1RSR1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RjAwMDAwMFUpCisjZGVmaW5lIFRQTV9DT05GX1RSR1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgVFBNX0NPTkZfVFJHU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DT05GX1RSR1NFTF9TSElGVCkpICYgVFBNX0NPTkZfVFJHU0VMX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBUUE1fUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBUUE0gLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBUUE0wIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBUUE0wX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDM4MDAwdSkKKy8qKiBQZXJpcGhlcmFsIFRQTTAgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFRQTTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUE1fVHlwZSAqKVRQTTBfQkFTRSkKKy8qKiBQZXJpcGhlcmFsIFRQTTEgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFRQTTFfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMzkwMDB1KQorLyoqIFBlcmlwaGVyYWwgVFBNMSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgVFBNMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRQTV9UeXBlICopVFBNMV9CQVNFKQorLyoqIFBlcmlwaGVyYWwgVFBNMiBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgVFBNMl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAzQTAwMHUpCisvKiogUGVyaXBoZXJhbCBUUE0yIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBUUE0yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFBNX1R5cGUgKilUUE0yX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgVFBNX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFRQTTBfQkFTRSwgVFBNMV9CQVNFLCBUUE0yX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFRQTSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgVFBNX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFRQTTAsIFRQTTEsIFRQTTIgfQorLyoqIEludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgVFBNIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBUUE1fSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgVFBNMF9JUlFuLCBUUE0xX0lSUW4sIFRQTTJfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgVFBNX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gVFJORyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFRSTkdfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgVFJORyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogVFJORyAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgTUNUTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1pc2NlbGxhbmVvdXMgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50MzJfdCBTQ01JU0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgTWlzY2VsbGFuZW91cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBQS1JSTkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9rZXIgUmFuZ2UgUmVnaXN0ZXIsIG9mZnNldDogMHg4ICovCisgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4QyAqLworICAgIF9fSU8gdWludDMyX3QgUEtSTUFYOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBva2VyIE1heGltdW0gTGltaXQgUmVnaXN0ZXIsIG9mZnNldDogMHhDICovCisgICAgX19JICB1aW50MzJfdCBQS1JTUTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9rZXIgU3F1YXJlIENhbGN1bGF0aW9uIFJlc3VsdCBSZWdpc3Rlciwgb2Zmc2V0OiAweEMgKi8KKyAgfTsKKyAgX19JTyB1aW50MzJfdCBTRENUTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU2VlZCBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTAgKi8KKyAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldDogMHgxNCAqLworICAgIF9fSU8gdWludDMyX3QgU0JMSU07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNwYXJzZSBCaXQgTGltaXQgUmVnaXN0ZXIsIG9mZnNldDogMHgxNCAqLworICAgIF9fSSAgdWludDMyX3QgVE9UU0FNOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRvdGFsIFNhbXBsZXMgUmVnaXN0ZXIsIG9mZnNldDogMHgxNCAqLworICB9OworICBfX0lPIHVpbnQzMl90IEZSUU1JTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGcmVxdWVuY3kgQ291bnQgTWluaW11bSBMaW1pdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDE4ICovCisgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4MUMgKi8KKyAgICBfX0kgIHVpbnQzMl90IEZSUUNOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGcmVxdWVuY3kgQ291bnQgUmVnaXN0ZXIsIG9mZnNldDogMHgxQyAqLworICAgIF9fSU8gdWludDMyX3QgRlJRTUFYOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZyZXF1ZW5jeSBDb3VudCBNYXhpbXVtIExpbWl0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MUMgKi8KKyAgfTsKKyAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldDogMHgyMCAqLworICAgIF9fSSAgdWludDMyX3QgU0NNQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIE1vbm9iaXQgQ291bnQgUmVnaXN0ZXIsIG9mZnNldDogMHgyMCAqLworICAgIF9fSU8gdWludDMyX3QgU0NNTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIE1vbm9iaXQgTGltaXQgUmVnaXN0ZXIsIG9mZnNldDogMHgyMCAqLworICB9OworICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDI0ICovCisgICAgX19JICB1aW50MzJfdCBTQ1IxQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAxIENvdW50IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MjQgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNDUjFMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDEgTGltaXQgUmVnaXN0ZXIsIG9mZnNldDogMHgyNCAqLworICB9OworICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDI4ICovCisgICAgX19JICB1aW50MzJfdCBTQ1IyQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAyIENvdW50IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MjggKi8KKyAgICBfX0lPIHVpbnQzMl90IFNDUjJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDIgTGltaXQgUmVnaXN0ZXIsIG9mZnNldDogMHgyOCAqLworICB9OworICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDJDICovCisgICAgX19JICB1aW50MzJfdCBTQ1IzQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAzIENvdW50IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MkMgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNDUjNMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDMgTGltaXQgUmVnaXN0ZXIsIG9mZnNldDogMHgyQyAqLworICB9OworICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDMwICovCisgICAgX19JICB1aW50MzJfdCBTQ1I0QzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA0IENvdW50IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MzAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNDUjRMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDQgTGltaXQgUmVnaXN0ZXIsIG9mZnNldDogMHgzMCAqLworICB9OworICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDM0ICovCisgICAgX19JICB1aW50MzJfdCBTQ1I1QzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA1IENvdW50IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MzQgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNDUjVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDUgTGltaXQgUmVnaXN0ZXIsIG9mZnNldDogMHgzNCAqLworICB9OworICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDM4ICovCisgICAgX19JICB1aW50MzJfdCBTQ1I2UEM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA2KyBDb3VudCBSZWdpc3Rlciwgb2Zmc2V0OiAweDM4ICovCisgICAgX19JTyB1aW50MzJfdCBTQ1I2UEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA2KyBMaW1pdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDM4ICovCisgIH07CisgIF9fSSAgdWludDMyX3QgU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDNDICovCisgIF9fSSAgdWludDMyX3QgRU5UWzE2XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVudHJvcHkgUmVhZCBSZWdpc3RlciwgYXJyYXkgb2Zmc2V0OiAweDQwLCBhcnJheSBzdGVwOiAweDQgKi8KKyAgX19JICB1aW50MzJfdCBQS1JDTlQxMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgMSBhbmQgMCBSZWdpc3Rlciwgb2Zmc2V0OiAweDgwICovCisgIF9fSSAgdWludDMyX3QgUEtSQ05UMzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIFBva2VyIENvdW50IDMgYW5kIDIgUmVnaXN0ZXIsIG9mZnNldDogMHg4NCAqLworICBfX0kgIHVpbnQzMl90IFBLUkNOVDU0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCA1IGFuZCA0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4ODggKi8KKyAgX19JICB1aW50MzJfdCBQS1JDTlQ3NjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgNyBhbmQgNiBSZWdpc3Rlciwgb2Zmc2V0OiAweDhDICovCisgIF9fSSAgdWludDMyX3QgUEtSQ05UOTg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIFBva2VyIENvdW50IDkgYW5kIDggUmVnaXN0ZXIsIG9mZnNldDogMHg5MCAqLworICBfX0kgIHVpbnQzMl90IFBLUkNOVEJBOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCBCIGFuZCBBIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OTQgKi8KKyAgX19JICB1aW50MzJfdCBQS1JDTlREQzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgRCBhbmQgQyBSZWdpc3Rlciwgb2Zmc2V0OiAweDk4ICovCisgIF9fSSAgdWludDMyX3QgUEtSQ05URkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIFBva2VyIENvdW50IEYgYW5kIEUgUmVnaXN0ZXIsIG9mZnNldDogMHg5QyAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFsxNl07CisgIF9fSU8gdWludDMyX3QgU0VDX0NGRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNlY3VyaXR5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIsIG9mZnNldDogMHhCMCAqLworICBfX0lPIHVpbnQzMl90IElOVF9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweEI0ICovCisgIF9fSU8gdWludDMyX3QgSU5UX01BU0s7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1hc2sgUmVnaXN0ZXIsIG9mZnNldDogMHhCOCAqLworICBfX0lPIHVpbnQzMl90IElOVF9TVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QkMgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbNDhdOworICBfX0kgIHVpbnQzMl90IFZJRDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBWZXJzaW9uIElEIFJlZ2lzdGVyIChNUyksIG9mZnNldDogMHhGMCAqLworICBfX0kgIHVpbnQzMl90IFZJRDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBWZXJzaW9uIElEIFJlZ2lzdGVyIChMUyksIG9mZnNldDogMHhGNCAqLworfSBUUk5HX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFRSTkcgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBUUk5HX1JlZ2lzdGVyX01hc2tzIFRSTkcgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIE1DVEwgLSBNaXNjZWxsYW5lb3VzIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19NQ1RMX1NBTVBfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgVFJOR19NQ1RMX1NBTVBfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfTUNUTF9TQU1QX01PREUoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX01DVExfU0FNUF9NT0RFX1NISUZUKSkgJiBUUk5HX01DVExfU0FNUF9NT0RFX01BU0spCisjZGVmaW5lIFRSTkdfTUNUTF9PU0NfRElWX01BU0sgICAgICAgICAgICAgICAgICAgKDB4Q1UpCisjZGVmaW5lIFRSTkdfTUNUTF9PU0NfRElWX1NISUZUICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBUUk5HX01DVExfT1NDX0RJVih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19NQ1RMX09TQ19ESVZfU0hJRlQpKSAmIFRSTkdfTUNUTF9PU0NfRElWX01BU0spCisjZGVmaW5lIFRSTkdfTUNUTF9VTlVTRURfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBUUk5HX01DVExfVU5VU0VEX1NISUZUICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgVFJOR19NQ1RMX1VOVVNFRCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfTUNUTF9VTlVTRURfU0hJRlQpKSAmIFRSTkdfTUNUTF9VTlVTRURfTUFTSykKKyNkZWZpbmUgVFJOR19NQ1RMX1RSTkdfQUNDX01BU0sgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFRSTkdfTUNUTF9UUk5HX0FDQ19TSElGVCAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBUUk5HX01DVExfVFJOR19BQ0MoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19NQ1RMX1RSTkdfQUNDX1NISUZUKSkgJiBUUk5HX01DVExfVFJOR19BQ0NfTUFTSykKKyNkZWZpbmUgVFJOR19NQ1RMX1JTVF9ERUZfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFRSTkdfTUNUTF9SU1RfREVGX1NISUZUICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBUUk5HX01DVExfUlNUX0RFRih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19NQ1RMX1JTVF9ERUZfU0hJRlQpKSAmIFRSTkdfTUNUTF9SU1RfREVGX01BU0spCisjZGVmaW5lIFRSTkdfTUNUTF9GT1JfU0NMS19NQVNLICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBUUk5HX01DVExfRk9SX1NDTEtfU0hJRlQgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgVFJOR19NQ1RMX0ZPUl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfTUNUTF9GT1JfU0NMS19TSElGVCkpICYgVFJOR19NQ1RMX0ZPUl9TQ0xLX01BU0spCisjZGVmaW5lIFRSTkdfTUNUTF9GQ1RfRkFJTF9NQVNLICAgICAgICAgICAgICAgICAgKDB4MTAwVSkKKyNkZWZpbmUgVFJOR19NQ1RMX0ZDVF9GQUlMX1NISUZUICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFRSTkdfTUNUTF9GQ1RfRkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX01DVExfRkNUX0ZBSUxfU0hJRlQpKSAmIFRSTkdfTUNUTF9GQ1RfRkFJTF9NQVNLKQorI2RlZmluZSBUUk5HX01DVExfRkNUX1ZBTF9NQVNLICAgICAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIFRSTkdfTUNUTF9GQ1RfVkFMX1NISUZUICAgICAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBUUk5HX01DVExfRkNUX1ZBTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19NQ1RMX0ZDVF9WQUxfU0hJRlQpKSAmIFRSTkdfTUNUTF9GQ1RfVkFMX01BU0spCisjZGVmaW5lIFRSTkdfTUNUTF9FTlRfVkFMX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NDAwVSkKKyNkZWZpbmUgVFJOR19NQ1RMX0VOVF9WQUxfU0hJRlQgICAgICAgICAgICAgICAgICAoMTBVKQorI2RlZmluZSBUUk5HX01DVExfRU5UX1ZBTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19NQ1RMX0VOVF9WQUxfU0hJRlQpKSAmIFRSTkdfTUNUTF9FTlRfVkFMX01BU0spCisjZGVmaW5lIFRSTkdfTUNUTF9UU1RfT1VUX01BU0sgICAgICAgICAgICAgICAgICAgKDB4ODAwVSkKKyNkZWZpbmUgVFJOR19NQ1RMX1RTVF9PVVRfU0hJRlQgICAgICAgICAgICAgICAgICAoMTFVKQorI2RlZmluZSBUUk5HX01DVExfVFNUX09VVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19NQ1RMX1RTVF9PVVRfU0hJRlQpKSAmIFRSTkdfTUNUTF9UU1RfT1VUX01BU0spCisjZGVmaW5lIFRSTkdfTUNUTF9FUlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIFRSTkdfTUNUTF9FUlJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgVFJOR19NQ1RMX0VSUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfTUNUTF9FUlJfU0hJRlQpKSAmIFRSTkdfTUNUTF9FUlJfTUFTSykKKyNkZWZpbmUgVFJOR19NQ1RMX1RTVE9QX09LX01BU0sgICAgICAgICAgICAgICAgICAoMHgyMDAwVSkKKyNkZWZpbmUgVFJOR19NQ1RMX1RTVE9QX09LX1NISUZUICAgICAgICAgICAgICAgICAoMTNVKQorI2RlZmluZSBUUk5HX01DVExfVFNUT1BfT0soeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19NQ1RMX1RTVE9QX09LX1NISUZUKSkgJiBUUk5HX01DVExfVFNUT1BfT0tfTUFTSykKKyNkZWZpbmUgVFJOR19NQ1RMX1BSR01fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIFRSTkdfTUNUTF9QUkdNX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19NQ1RMX1BSR00oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfTUNUTF9QUkdNX1NISUZUKSkgJiBUUk5HX01DVExfUFJHTV9NQVNLKQorCisvKiEgQG5hbWUgU0NNSVNDIC0gU3RhdGlzdGljYWwgQ2hlY2sgTWlzY2VsbGFuZW91cyBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDTUlTQ19MUlVOX01BWF9NQVNLICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgVFJOR19TQ01JU0NfTFJVTl9NQVhfU0hJRlQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0NNSVNDX0xSVU5fTUFYKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDTUlTQ19MUlVOX01BWF9TSElGVCkpICYgVFJOR19TQ01JU0NfTFJVTl9NQVhfTUFTSykKKyNkZWZpbmUgVFJOR19TQ01JU0NfUlRZX0NUX01BU0sgICAgICAgICAgICAgICAgICAoMHhGMDAwMFUpCisjZGVmaW5lIFRSTkdfU0NNSVNDX1JUWV9DVF9TSElGVCAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19TQ01JU0NfUlRZX0NUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NNSVNDX1JUWV9DVF9TSElGVCkpICYgVFJOR19TQ01JU0NfUlRZX0NUX01BU0spCisKKy8qISBAbmFtZSBQS1JSTkcgLSBQb2tlciBSYW5nZSBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1BLUlJOR19QS1JfUk5HX01BU0sgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUk5HX1BLUlJOR19QS1JfUk5HX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19QS1JSTkdfUEtSX1JORyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSUk5HX1BLUl9STkdfU0hJRlQpKSAmIFRSTkdfUEtSUk5HX1BLUl9STkdfTUFTSykKKworLyohIEBuYW1lIFBLUk1BWCAtIFBva2VyIE1heGltdW0gTGltaXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19QS1JNQVhfUEtSX01BWF9NQVNLICAgICAgICAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBUUk5HX1BLUk1BWF9QS1JfTUFYX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19QS1JNQVhfUEtSX01BWCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSTUFYX1BLUl9NQVhfU0hJRlQpKSAmIFRSTkdfUEtSTUFYX1BLUl9NQVhfTUFTSykKKworLyohIEBuYW1lIFBLUlNRIC0gUG9rZXIgU3F1YXJlIENhbGN1bGF0aW9uIFJlc3VsdCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1BLUlNRX1BLUl9TUV9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIFRSTkdfUEtSU1FfUEtSX1NRX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1BLUlNRX1BLUl9TUSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JTUV9QS1JfU1FfU0hJRlQpKSAmIFRSTkdfUEtSU1FfUEtSX1NRX01BU0spCisKKy8qISBAbmFtZSBTRENUTCAtIFNlZWQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NEQ1RMX1NBTVBfU0laRV9NQVNLICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUk5HX1NEQ1RMX1NBTVBfU0laRV9TSElGVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TRENUTF9TQU1QX1NJWkUoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0RDVExfU0FNUF9TSVpFX1NISUZUKSkgJiBUUk5HX1NEQ1RMX1NBTVBfU0laRV9NQVNLKQorI2RlZmluZSBUUk5HX1NEQ1RMX0VOVF9ETFlfTUFTSyAgICAgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19TRENUTF9FTlRfRExZX1NISUZUICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1NEQ1RMX0VOVF9ETFkoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TRENUTF9FTlRfRExZX1NISUZUKSkgJiBUUk5HX1NEQ1RMX0VOVF9ETFlfTUFTSykKKworLyohIEBuYW1lIFNCTElNIC0gU3BhcnNlIEJpdCBMaW1pdCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NCTElNX1NCX0xJTV9NQVNLICAgICAgICAgICAgICAgICAgICgweDNGRlUpCisjZGVmaW5lIFRSTkdfU0JMSU1fU0JfTElNX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NCTElNX1NCX0xJTSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQkxJTV9TQl9MSU1fU0hJRlQpKSAmIFRSTkdfU0JMSU1fU0JfTElNX01BU0spCisKKy8qISBAbmFtZSBUT1RTQU0gLSBUb3RhbCBTYW1wbGVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfVE9UU0FNX1RPVF9TQU1fTUFTSyAgICAgICAgICAgICAgICAgKDB4RkZGRkZVKQorI2RlZmluZSBUUk5HX1RPVFNBTV9UT1RfU0FNX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19UT1RTQU1fVE9UX1NBTSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfVE9UU0FNX1RPVF9TQU1fU0hJRlQpKSAmIFRSTkdfVE9UU0FNX1RPVF9TQU1fTUFTSykKKworLyohIEBuYW1lIEZSUU1JTiAtIEZyZXF1ZW5jeSBDb3VudCBNaW5pbXVtIExpbWl0IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfRlJRTUlOX0ZSUV9NSU5fTUFTSyAgICAgICAgICAgICAgICAgKDB4M0ZGRkZGVSkKKyNkZWZpbmUgVFJOR19GUlFNSU5fRlJRX01JTl9TSElGVCAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfRlJRTUlOX0ZSUV9NSU4oeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX0ZSUU1JTl9GUlFfTUlOX1NISUZUKSkgJiBUUk5HX0ZSUU1JTl9GUlFfTUlOX01BU0spCisKKy8qISBAbmFtZSBGUlFDTlQgLSBGcmVxdWVuY3kgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19GUlFDTlRfRlJRX0NUX01BU0sgICAgICAgICAgICAgICAgICAoMHgzRkZGRkZVKQorI2RlZmluZSBUUk5HX0ZSUUNOVF9GUlFfQ1RfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19GUlFDTlRfRlJRX0NUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfRlJRQ05UX0ZSUV9DVF9TSElGVCkpICYgVFJOR19GUlFDTlRfRlJRX0NUX01BU0spCisKKy8qISBAbmFtZSBGUlFNQVggLSBGcmVxdWVuY3kgQ291bnQgTWF4aW11bSBMaW1pdCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX0ZSUU1BWF9GUlFfTUFYX01BU0sgICAgICAgICAgICAgICAgICgweDNGRkZGRlUpCisjZGVmaW5lIFRSTkdfRlJRTUFYX0ZSUV9NQVhfU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX0ZSUU1BWF9GUlFfTUFYKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19GUlFNQVhfRlJRX01BWF9TSElGVCkpICYgVFJOR19GUlFNQVhfRlJRX01BWF9NQVNLKQorCisvKiEgQG5hbWUgU0NNQyAtIFN0YXRpc3RpY2FsIENoZWNrIE1vbm9iaXQgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19TQ01DX01PTk9fQ1RfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgVFJOR19TQ01DX01PTk9fQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0NNQ19NT05PX0NUKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDTUNfTU9OT19DVF9TSElGVCkpICYgVFJOR19TQ01DX01PTk9fQ1RfTUFTSykKKworLyohIEBuYW1lIFNDTUwgLSBTdGF0aXN0aWNhbCBDaGVjayBNb25vYml0IExpbWl0IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0NNTF9NT05PX01BWF9NQVNLICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRSTkdfU0NNTF9NT05PX01BWF9TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NDTUxfTU9OT19NQVgoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ01MX01PTk9fTUFYX1NISUZUKSkgJiBUUk5HX1NDTUxfTU9OT19NQVhfTUFTSykKKyNkZWZpbmUgVFJOR19TQ01MX01PTk9fUk5HX01BU0sgICAgICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfU0NNTF9NT05PX1JOR19TSElGVCAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19TQ01MX01PTk9fUk5HKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NNTF9NT05PX1JOR19TSElGVCkpICYgVFJOR19TQ01MX01PTk9fUk5HX01BU0spCisKKy8qISBAbmFtZSBTQ1IxQyAtIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDUjFDX1IxXzBfQ1RfTUFTSyAgICAgICAgICAgICAgICAgICgweDdGRkZVKQorI2RlZmluZSBUUk5HX1NDUjFDX1IxXzBfQ1RfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TQ1IxQ19SMV8wX0NUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSMUNfUjFfMF9DVF9TSElGVCkpICYgVFJOR19TQ1IxQ19SMV8wX0NUX01BU0spCisjZGVmaW5lIFRSTkdfU0NSMUNfUjFfMV9DVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4N0ZGRjAwMDBVKQorI2RlZmluZSBUUk5HX1NDUjFDX1IxXzFfQ1RfU0hJRlQgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU0NSMUNfUjFfMV9DVCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjFDX1IxXzFfQ1RfU0hJRlQpKSAmIFRSTkdfU0NSMUNfUjFfMV9DVF9NQVNLKQorCisvKiEgQG5hbWUgU0NSMUwgLSBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDEgTGltaXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19TQ1IxTF9SVU4xX01BWF9NQVNLICAgICAgICAgICAgICAgICAoMHg3RkZGVSkKKyNkZWZpbmUgVFJOR19TQ1IxTF9SVU4xX01BWF9TSElGVCAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0NSMUxfUlVOMV9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjFMX1JVTjFfTUFYX1NISUZUKSkgJiBUUk5HX1NDUjFMX1JVTjFfTUFYX01BU0spCisjZGVmaW5lIFRSTkdfU0NSMUxfUlVOMV9STkdfTUFTSyAgICAgICAgICAgICAgICAgKDB4N0ZGRjAwMDBVKQorI2RlZmluZSBUUk5HX1NDUjFMX1JVTjFfUk5HX1NISUZUICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU0NSMUxfUlVOMV9STkcoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjFMX1JVTjFfUk5HX1NISUZUKSkgJiBUUk5HX1NDUjFMX1JVTjFfUk5HX01BU0spCisKKy8qISBAbmFtZSBTQ1IyQyAtIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMiBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDUjJDX1IyXzBfQ1RfTUFTSyAgICAgICAgICAgICAgICAgICgweDNGRkZVKQorI2RlZmluZSBUUk5HX1NDUjJDX1IyXzBfQ1RfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TQ1IyQ19SMl8wX0NUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSMkNfUjJfMF9DVF9TSElGVCkpICYgVFJOR19TQ1IyQ19SMl8wX0NUX01BU0spCisjZGVmaW5lIFRSTkdfU0NSMkNfUjJfMV9DVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4M0ZGRjAwMDBVKQorI2RlZmluZSBUUk5HX1NDUjJDX1IyXzFfQ1RfU0hJRlQgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU0NSMkNfUjJfMV9DVCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjJDX1IyXzFfQ1RfU0hJRlQpKSAmIFRSTkdfU0NSMkNfUjJfMV9DVF9NQVNLKQorCisvKiEgQG5hbWUgU0NSMkwgLSBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDIgTGltaXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19TQ1IyTF9SVU4yX01BWF9NQVNLICAgICAgICAgICAgICAgICAoMHgzRkZGVSkKKyNkZWZpbmUgVFJOR19TQ1IyTF9SVU4yX01BWF9TSElGVCAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0NSMkxfUlVOMl9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjJMX1JVTjJfTUFYX1NISUZUKSkgJiBUUk5HX1NDUjJMX1JVTjJfTUFYX01BU0spCisjZGVmaW5lIFRSTkdfU0NSMkxfUlVOMl9STkdfTUFTSyAgICAgICAgICAgICAgICAgKDB4M0ZGRjAwMDBVKQorI2RlZmluZSBUUk5HX1NDUjJMX1JVTjJfUk5HX1NISUZUICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU0NSMkxfUlVOMl9STkcoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjJMX1JVTjJfUk5HX1NISUZUKSkgJiBUUk5HX1NDUjJMX1JVTjJfUk5HX01BU0spCisKKy8qISBAbmFtZSBTQ1IzQyAtIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMyBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDUjNDX1IzXzBfQ1RfTUFTSyAgICAgICAgICAgICAgICAgICgweDFGRkZVKQorI2RlZmluZSBUUk5HX1NDUjNDX1IzXzBfQ1RfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TQ1IzQ19SM18wX0NUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSM0NfUjNfMF9DVF9TSElGVCkpICYgVFJOR19TQ1IzQ19SM18wX0NUX01BU0spCisjZGVmaW5lIFRSTkdfU0NSM0NfUjNfMV9DVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4MUZGRjAwMDBVKQorI2RlZmluZSBUUk5HX1NDUjNDX1IzXzFfQ1RfU0hJRlQgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU0NSM0NfUjNfMV9DVCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjNDX1IzXzFfQ1RfU0hJRlQpKSAmIFRSTkdfU0NSM0NfUjNfMV9DVF9NQVNLKQorCisvKiEgQG5hbWUgU0NSM0wgLSBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDMgTGltaXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19TQ1IzTF9SVU4zX01BWF9NQVNLICAgICAgICAgICAgICAgICAoMHgxRkZGVSkKKyNkZWZpbmUgVFJOR19TQ1IzTF9SVU4zX01BWF9TSElGVCAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0NSM0xfUlVOM19NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjNMX1JVTjNfTUFYX1NISUZUKSkgJiBUUk5HX1NDUjNMX1JVTjNfTUFYX01BU0spCisjZGVmaW5lIFRSTkdfU0NSM0xfUlVOM19STkdfTUFTSyAgICAgICAgICAgICAgICAgKDB4MUZGRjAwMDBVKQorI2RlZmluZSBUUk5HX1NDUjNMX1JVTjNfUk5HX1NISUZUICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU0NSM0xfUlVOM19STkcoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjNMX1JVTjNfUk5HX1NISUZUKSkgJiBUUk5HX1NDUjNMX1JVTjNfUk5HX01BU0spCisKKy8qISBAbmFtZSBTQ1I0QyAtIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggNCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDUjRDX1I0XzBfQ1RfTUFTSyAgICAgICAgICAgICAgICAgICgweEZGRlUpCisjZGVmaW5lIFRSTkdfU0NSNENfUjRfMF9DVF9TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NDUjRDX1I0XzBfQ1QoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1I0Q19SNF8wX0NUX1NISUZUKSkgJiBUUk5HX1NDUjRDX1I0XzBfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19TQ1I0Q19SNF8xX0NUX01BU0sgICAgICAgICAgICAgICAgICAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19TQ1I0Q19SNF8xX0NUX1NISUZUICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1NDUjRDX1I0XzFfQ1QoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1I0Q19SNF8xX0NUX1NISUZUKSkgJiBUUk5HX1NDUjRDX1I0XzFfQ1RfTUFTSykKKworLyohIEBuYW1lIFNDUjRMIC0gU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA0IExpbWl0IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0NSNExfUlVONF9NQVhfTUFTSyAgICAgICAgICAgICAgICAgKDB4RkZGVSkKKyNkZWZpbmUgVFJOR19TQ1I0TF9SVU40X01BWF9TSElGVCAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0NSNExfUlVONF9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjRMX1JVTjRfTUFYX1NISUZUKSkgJiBUUk5HX1NDUjRMX1JVTjRfTUFYX01BU0spCisjZGVmaW5lIFRSTkdfU0NSNExfUlVONF9STkdfTUFTSyAgICAgICAgICAgICAgICAgKDB4RkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfU0NSNExfUlVONF9STkdfU0hJRlQgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19TQ1I0TF9SVU40X1JORyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSNExfUlVONF9STkdfU0hJRlQpKSAmIFRSTkdfU0NSNExfUlVONF9STkdfTUFTSykKKworLyohIEBuYW1lIFNDUjVDIC0gU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA1IENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0NSNUNfUjVfMF9DVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4N0ZGVSkKKyNkZWZpbmUgVFJOR19TQ1I1Q19SNV8wX0NUX1NISUZUICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0NSNUNfUjVfMF9DVCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjVDX1I1XzBfQ1RfU0hJRlQpKSAmIFRSTkdfU0NSNUNfUjVfMF9DVF9NQVNLKQorI2RlZmluZSBUUk5HX1NDUjVDX1I1XzFfQ1RfTUFTSyAgICAgICAgICAgICAgICAgICgweDdGRjAwMDBVKQorI2RlZmluZSBUUk5HX1NDUjVDX1I1XzFfQ1RfU0hJRlQgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU0NSNUNfUjVfMV9DVCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjVDX1I1XzFfQ1RfU0hJRlQpKSAmIFRSTkdfU0NSNUNfUjVfMV9DVF9NQVNLKQorCisvKiEgQG5hbWUgU0NSNUwgLSBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDUgTGltaXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19TQ1I1TF9SVU41X01BWF9NQVNLICAgICAgICAgICAgICAgICAoMHg3RkZVKQorI2RlZmluZSBUUk5HX1NDUjVMX1JVTjVfTUFYX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TQ1I1TF9SVU41X01BWCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSNUxfUlVONV9NQVhfU0hJRlQpKSAmIFRSTkdfU0NSNUxfUlVONV9NQVhfTUFTSykKKyNkZWZpbmUgVFJOR19TQ1I1TF9SVU41X1JOR19NQVNLICAgICAgICAgICAgICAgICAoMHg3RkYwMDAwVSkKKyNkZWZpbmUgVFJOR19TQ1I1TF9SVU41X1JOR19TSElGVCAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1NDUjVMX1JVTjVfUk5HKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1I1TF9SVU41X1JOR19TSElGVCkpICYgVFJOR19TQ1I1TF9SVU41X1JOR19NQVNLKQorCisvKiEgQG5hbWUgU0NSNlBDIC0gU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA2KyBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDUjZQQ19SNlBfMF9DVF9NQVNLICAgICAgICAgICAgICAgICgweDdGRlUpCisjZGVmaW5lIFRSTkdfU0NSNlBDX1I2UF8wX0NUX1NISUZUICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NDUjZQQ19SNlBfMF9DVCh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1I2UENfUjZQXzBfQ1RfU0hJRlQpKSAmIFRSTkdfU0NSNlBDX1I2UF8wX0NUX01BU0spCisjZGVmaW5lIFRSTkdfU0NSNlBDX1I2UF8xX0NUX01BU0sgICAgICAgICAgICAgICAgKDB4N0ZGMDAwMFUpCisjZGVmaW5lIFRSTkdfU0NSNlBDX1I2UF8xX0NUX1NISUZUICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19TQ1I2UENfUjZQXzFfQ1QoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSNlBDX1I2UF8xX0NUX1NISUZUKSkgJiBUUk5HX1NDUjZQQ19SNlBfMV9DVF9NQVNLKQorCisvKiEgQG5hbWUgU0NSNlBMIC0gU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA2KyBMaW1pdCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDUjZQTF9SVU42UF9NQVhfTUFTSyAgICAgICAgICAgICAgICgweDdGRlUpCisjZGVmaW5lIFRSTkdfU0NSNlBMX1JVTjZQX01BWF9TSElGVCAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NDUjZQTF9SVU42UF9NQVgoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1I2UExfUlVONlBfTUFYX1NISUZUKSkgJiBUUk5HX1NDUjZQTF9SVU42UF9NQVhfTUFTSykKKyNkZWZpbmUgVFJOR19TQ1I2UExfUlVONlBfUk5HX01BU0sgICAgICAgICAgICAgICAoMHg3RkYwMDAwVSkKKyNkZWZpbmUgVFJOR19TQ1I2UExfUlVONlBfUk5HX1NISUZUICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1NDUjZQTF9SVU42UF9STkcoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1I2UExfUlVONlBfUk5HX1NISUZUKSkgJiBUUk5HX1NDUjZQTF9SVU42UF9STkdfTUFTSykKKworLyohIEBuYW1lIFNUQVRVUyAtIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NUQVRVU19URjFCUjBfTUFTSyAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjFCUjBfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEYxQlIwKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU1RBVFVTX1RGMUJSMF9TSElGVCkpICYgVFJOR19TVEFUVVNfVEYxQlIwX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGMUJSMV9NQVNLICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGMUJSMV9TSElGVCAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjFCUjEoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEYxQlIxX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URjFCUjFfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEYyQlIwX01BU0sgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEYyQlIwX1NISUZUICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGMkJSMCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NUQVRVU19URjJCUjBfU0hJRlQpKSAmIFRSTkdfU1RBVFVTX1RGMkJSMF9NQVNLKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjJCUjFfTUFTSyAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjJCUjFfU0hJRlQgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEYyQlIxKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU1RBVFVTX1RGMkJSMV9TSElGVCkpICYgVFJOR19TVEFUVVNfVEYyQlIxX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGM0JSMF9NQVNLICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjNCUjBfU0hJRlQgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEYzQlIwKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU1RBVFVTX1RGM0JSMF9TSElGVCkpICYgVFJOR19TVEFUVVNfVEYzQlIwX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGM0JSMV9NQVNLICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjNCUjFfU0hJRlQgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEYzQlIxKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU1RBVFVTX1RGM0JSMV9TSElGVCkpICYgVFJOR19TVEFUVVNfVEYzQlIxX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNEJSMF9NQVNLICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjRCUjBfU0hJRlQgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY0QlIwKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU1RBVFVTX1RGNEJSMF9TSElGVCkpICYgVFJOR19TVEFUVVNfVEY0QlIwX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNEJSMV9NQVNLICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjRCUjFfU0hJRlQgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY0QlIxKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU1RBVFVTX1RGNEJSMV9TSElGVCkpICYgVFJOR19TVEFUVVNfVEY0QlIxX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNUJSMF9NQVNLICAgICAgICAgICAgICAgICAgKDB4MTAwVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY1QlIwX1NISUZUICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNUJSMCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NUQVRVU19URjVCUjBfU0hJRlQpKSAmIFRSTkdfU1RBVFVTX1RGNUJSMF9NQVNLKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjVCUjFfTUFTSyAgICAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNUJSMV9TSElGVCAgICAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjVCUjEoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEY1QlIxX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URjVCUjFfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY2UEJSMF9NQVNLICAgICAgICAgICAgICAgICAoMHg0MDBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjZQQlIwX1NISUZUICAgICAgICAgICAgICAgICgxMFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNlBCUjAoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NUQVRVU19URjZQQlIwX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URjZQQlIwX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNlBCUjFfTUFTSyAgICAgICAgICAgICAgICAgKDB4ODAwVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY2UEJSMV9TSElGVCAgICAgICAgICAgICAgICAoMTFVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjZQQlIxKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEY2UEJSMV9TSElGVCkpICYgVFJOR19TVEFUVVNfVEY2UEJSMV9NQVNLKQorI2RlZmluZSBUUk5HX1NUQVRVU19URlNCX01BU0sgICAgICAgICAgICAgICAgICAgICgweDEwMDBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URlNCX1NISUZUICAgICAgICAgICAgICAgICAgICgxMlUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGU0IoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NUQVRVU19URlNCX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URlNCX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGTFJfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MjAwMFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGTFJfU0hJRlQgICAgICAgICAgICAgICAgICAgKDEzVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEZMUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU1RBVFVTX1RGTFJfU0hJRlQpKSAmIFRSTkdfU1RBVFVTX1RGTFJfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEZQX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEZQX1NISUZUICAgICAgICAgICAgICAgICAgICAoMTRVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URlAoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEZQX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URlBfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEZNQl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEZNQl9TSElGVCAgICAgICAgICAgICAgICAgICAoMTVVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URk1CKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEZNQl9TSElGVCkpICYgVFJOR19TVEFUVVNfVEZNQl9NQVNLKQorI2RlZmluZSBUUk5HX1NUQVRVU19SRVRSWV9DVF9NQVNLICAgICAgICAgICAgICAgICgweEYwMDAwVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfUkVUUllfQ1RfU0hJRlQgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1NUQVRVU19SRVRSWV9DVCh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfUkVUUllfQ1RfU0hJRlQpKSAmIFRSTkdfU1RBVFVTX1JFVFJZX0NUX01BU0spCisKKy8qISBAbmFtZSBFTlQgLSBFbnRyb3B5IFJlYWQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19FTlRfRU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFRSTkdfRU5UX0VOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX0VOVF9FTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19FTlRfRU5UX1NISUZUKSkgJiBUUk5HX0VOVF9FTlRfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFRSTkdfRU5UICovCisjZGVmaW5lIFRSTkdfRU5UX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKworLyohIEBuYW1lIFBLUkNOVDEwIC0gU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgMSBhbmQgMCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1BLUkNOVDEwX1BLUl8wX0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUk5HX1BLUkNOVDEwX1BLUl8wX0NUX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlQxMF9QS1JfMF9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UMTBfUEtSXzBfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UMTBfUEtSXzBfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19QS1JDTlQxMF9QS1JfMV9DVF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfUEtSQ05UMTBfUEtSXzFfQ1RfU0hJRlQgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19QS1JDTlQxMF9QS1JfMV9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UMTBfUEtSXzFfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UMTBfUEtSXzFfQ1RfTUFTSykKKworLyohIEBuYW1lIFBLUkNOVDMyIC0gU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgMyBhbmQgMiBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1BLUkNOVDMyX1BLUl8yX0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUk5HX1BLUkNOVDMyX1BLUl8yX0NUX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlQzMl9QS1JfMl9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UMzJfUEtSXzJfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UMzJfUEtSXzJfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19QS1JDTlQzMl9QS1JfM19DVF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfUEtSQ05UMzJfUEtSXzNfQ1RfU0hJRlQgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19QS1JDTlQzMl9QS1JfM19DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UMzJfUEtSXzNfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UMzJfUEtSXzNfQ1RfTUFTSykKKworLyohIEBuYW1lIFBLUkNOVDU0IC0gU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgNSBhbmQgNCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1BLUkNOVDU0X1BLUl80X0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUk5HX1BLUkNOVDU0X1BLUl80X0NUX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlQ1NF9QS1JfNF9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UNTRfUEtSXzRfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UNTRfUEtSXzRfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19QS1JDTlQ1NF9QS1JfNV9DVF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfUEtSQ05UNTRfUEtSXzVfQ1RfU0hJRlQgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19QS1JDTlQ1NF9QS1JfNV9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UNTRfUEtSXzVfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UNTRfUEtSXzVfQ1RfTUFTSykKKworLyohIEBuYW1lIFBLUkNOVDc2IC0gU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgNyBhbmQgNiBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1BLUkNOVDc2X1BLUl82X0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUk5HX1BLUkNOVDc2X1BLUl82X0NUX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlQ3Nl9QS1JfNl9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UNzZfUEtSXzZfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UNzZfUEtSXzZfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19QS1JDTlQ3Nl9QS1JfN19DVF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfUEtSQ05UNzZfUEtSXzdfQ1RfU0hJRlQgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19QS1JDTlQ3Nl9QS1JfN19DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UNzZfUEtSXzdfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UNzZfUEtSXzdfQ1RfTUFTSykKKworLyohIEBuYW1lIFBLUkNOVDk4IC0gU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgOSBhbmQgOCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1BLUkNOVDk4X1BLUl84X0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUk5HX1BLUkNOVDk4X1BLUl84X0NUX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlQ5OF9QS1JfOF9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UOThfUEtSXzhfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UOThfUEtSXzhfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19QS1JDTlQ5OF9QS1JfOV9DVF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfUEtSQ05UOThfUEtSXzlfQ1RfU0hJRlQgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19QS1JDTlQ5OF9QS1JfOV9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UOThfUEtSXzlfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UOThfUEtSXzlfQ1RfTUFTSykKKworLyohIEBuYW1lIFBLUkNOVEJBIC0gU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgQiBhbmQgQSBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1BLUkNOVEJBX1BLUl9BX0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUk5HX1BLUkNOVEJBX1BLUl9BX0NUX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlRCQV9QS1JfQV9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UQkFfUEtSX0FfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UQkFfUEtSX0FfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19QS1JDTlRCQV9QS1JfQl9DVF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfUEtSQ05UQkFfUEtSX0JfQ1RfU0hJRlQgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19QS1JDTlRCQV9QS1JfQl9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05UQkFfUEtSX0JfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05UQkFfUEtSX0JfQ1RfTUFTSykKKworLyohIEBuYW1lIFBLUkNOVERDIC0gU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgRCBhbmQgQyBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1BLUkNOVERDX1BLUl9DX0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUk5HX1BLUkNOVERDX1BLUl9DX0NUX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlREQ19QS1JfQ19DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05URENfUEtSX0NfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05URENfUEtSX0NfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19QS1JDTlREQ19QS1JfRF9DVF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfUEtSQ05URENfUEtSX0RfQ1RfU0hJRlQgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19QS1JDTlREQ19QS1JfRF9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05URENfUEtSX0RfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05URENfUEtSX0RfQ1RfTUFTSykKKworLyohIEBuYW1lIFBLUkNOVEZFIC0gU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgRiBhbmQgRSBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1BLUkNOVEZFX1BLUl9FX0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUk5HX1BLUkNOVEZFX1BLUl9FX0NUX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlRGRV9QS1JfRV9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05URkVfUEtSX0VfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05URkVfUEtSX0VfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19QS1JDTlRGRV9QS1JfRl9DVF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfUEtSQ05URkVfUEtSX0ZfQ1RfU0hJRlQgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19QS1JDTlRGRV9QS1JfRl9DVCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfUEtSQ05URkVfUEtSX0ZfQ1RfU0hJRlQpKSAmIFRSTkdfUEtSQ05URkVfUEtSX0ZfQ1RfTUFTSykKKworLyohIEBuYW1lIFNFQ19DRkcgLSBTZWN1cml0eSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0VDX0NGR19TSDBfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFRSTkdfU0VDX0NGR19TSDBfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NFQ19DRkdfU0gwKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TRUNfQ0ZHX1NIMF9TSElGVCkpICYgVFJOR19TRUNfQ0ZHX1NIMF9NQVNLKQorI2RlZmluZSBUUk5HX1NFQ19DRkdfTk9fUFJHTV9NQVNLICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBUUk5HX1NFQ19DRkdfTk9fUFJHTV9TSElGVCAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgVFJOR19TRUNfQ0ZHX05PX1BSR00oeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0VDX0NGR19OT19QUkdNX1NISUZUKSkgJiBUUk5HX1NFQ19DRkdfTk9fUFJHTV9NQVNLKQorI2RlZmluZSBUUk5HX1NFQ19DRkdfU0tfVkFMX01BU0sgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBUUk5HX1NFQ19DRkdfU0tfVkFMX1NISUZUICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgVFJOR19TRUNfQ0ZHX1NLX1ZBTCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0VDX0NGR19TS19WQUxfU0hJRlQpKSAmIFRSTkdfU0VDX0NGR19TS19WQUxfTUFTSykKKworLyohIEBuYW1lIElOVF9DVFJMIC0gSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19JTlRfQ1RSTF9IV19FUlJfTUFTSyAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgVFJOR19JTlRfQ1RSTF9IV19FUlJfU0hJRlQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfSU5UX0NUUkxfSFdfRVJSKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX0lOVF9DVFJMX0hXX0VSUl9TSElGVCkpICYgVFJOR19JTlRfQ1RSTF9IV19FUlJfTUFTSykKKyNkZWZpbmUgVFJOR19JTlRfQ1RSTF9FTlRfVkFMX01BU0sgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgVFJOR19JTlRfQ1RSTF9FTlRfVkFMX1NISUZUICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFRSTkdfSU5UX0NUUkxfRU5UX1ZBTCh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX0lOVF9DVFJMX0VOVF9WQUxfU0hJRlQpKSAmIFRSTkdfSU5UX0NUUkxfRU5UX1ZBTF9NQVNLKQorI2RlZmluZSBUUk5HX0lOVF9DVFJMX0ZSUV9DVF9GQUlMX01BU0sgICAgICAgICAgICgweDRVKQorI2RlZmluZSBUUk5HX0lOVF9DVFJMX0ZSUV9DVF9GQUlMX1NISUZUICAgICAgICAgICgyVSkKKyNkZWZpbmUgVFJOR19JTlRfQ1RSTF9GUlFfQ1RfRkFJTCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfSU5UX0NUUkxfRlJRX0NUX0ZBSUxfU0hJRlQpKSAmIFRSTkdfSU5UX0NUUkxfRlJRX0NUX0ZBSUxfTUFTSykKKyNkZWZpbmUgVFJOR19JTlRfQ1RSTF9VTlVTRURfTUFTSyAgICAgICAgICAgICAgICAoMHhGRkZGRkZGOFUpCisjZGVmaW5lIFRSTkdfSU5UX0NUUkxfVU5VU0VEX1NISUZUICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBUUk5HX0lOVF9DVFJMX1VOVVNFRCh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19JTlRfQ1RSTF9VTlVTRURfU0hJRlQpKSAmIFRSTkdfSU5UX0NUUkxfVU5VU0VEX01BU0spCisKKy8qISBAbmFtZSBJTlRfTUFTSyAtIE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19JTlRfTUFTS19IV19FUlJfTUFTSyAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgVFJOR19JTlRfTUFTS19IV19FUlJfU0hJRlQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfSU5UX01BU0tfSFdfRVJSKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX0lOVF9NQVNLX0hXX0VSUl9TSElGVCkpICYgVFJOR19JTlRfTUFTS19IV19FUlJfTUFTSykKKyNkZWZpbmUgVFJOR19JTlRfTUFTS19FTlRfVkFMX01BU0sgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgVFJOR19JTlRfTUFTS19FTlRfVkFMX1NISUZUICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFRSTkdfSU5UX01BU0tfRU5UX1ZBTCh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX0lOVF9NQVNLX0VOVF9WQUxfU0hJRlQpKSAmIFRSTkdfSU5UX01BU0tfRU5UX1ZBTF9NQVNLKQorI2RlZmluZSBUUk5HX0lOVF9NQVNLX0ZSUV9DVF9GQUlMX01BU0sgICAgICAgICAgICgweDRVKQorI2RlZmluZSBUUk5HX0lOVF9NQVNLX0ZSUV9DVF9GQUlMX1NISUZUICAgICAgICAgICgyVSkKKyNkZWZpbmUgVFJOR19JTlRfTUFTS19GUlFfQ1RfRkFJTCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfSU5UX01BU0tfRlJRX0NUX0ZBSUxfU0hJRlQpKSAmIFRSTkdfSU5UX01BU0tfRlJRX0NUX0ZBSUxfTUFTSykKKworLyohIEBuYW1lIElOVF9TVEFUVVMgLSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfSU5UX1NUQVRVU19IV19FUlJfTUFTSyAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFRSTkdfSU5UX1NUQVRVU19IV19FUlJfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX0lOVF9TVEFUVVNfSFdfRVJSKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19JTlRfU1RBVFVTX0hXX0VSUl9TSElGVCkpICYgVFJOR19JTlRfU1RBVFVTX0hXX0VSUl9NQVNLKQorI2RlZmluZSBUUk5HX0lOVF9TVEFUVVNfRU5UX1ZBTF9NQVNLICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBUUk5HX0lOVF9TVEFUVVNfRU5UX1ZBTF9TSElGVCAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgVFJOR19JTlRfU1RBVFVTX0VOVF9WQUwoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfSU5UX1NUQVRVU19FTlRfVkFMX1NISUZUKSkgJiBUUk5HX0lOVF9TVEFUVVNfRU5UX1ZBTF9NQVNLKQorI2RlZmluZSBUUk5HX0lOVF9TVEFUVVNfRlJRX0NUX0ZBSUxfTUFTSyAgICAgICAgICgweDRVKQorI2RlZmluZSBUUk5HX0lOVF9TVEFUVVNfRlJRX0NUX0ZBSUxfU0hJRlQgICAgICAgICgyVSkKKyNkZWZpbmUgVFJOR19JTlRfU1RBVFVTX0ZSUV9DVF9GQUlMKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfSU5UX1NUQVRVU19GUlFfQ1RfRkFJTF9TSElGVCkpICYgVFJOR19JTlRfU1RBVFVTX0ZSUV9DVF9GQUlMX01BU0spCisKKy8qISBAbmFtZSBWSUQxIC0gVmVyc2lvbiBJRCBSZWdpc3RlciAoTVMpICovCisjZGVmaW5lIFRSTkdfVklEMV9NSU5fUkVWX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBUUk5HX1ZJRDFfTUlOX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19WSUQxX01JTl9SRVYoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfVklEMV9NSU5fUkVWX1NISUZUKSkgJiBUUk5HX1ZJRDFfTUlOX1JFVl9NQVNLKQorI2RlZmluZSBUUk5HX1ZJRDFfTUFKX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGMDBVKQorI2RlZmluZSBUUk5HX1ZJRDFfTUFKX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgVFJOR19WSUQxX01BSl9SRVYoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfVklEMV9NQUpfUkVWX1NISUZUKSkgJiBUUk5HX1ZJRDFfTUFKX1JFVl9NQVNLKQorI2RlZmluZSBUUk5HX1ZJRDFfSVBfSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19WSUQxX0lQX0lEX1NISUZUICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1ZJRDFfSVBfSUQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19WSUQxX0lQX0lEX1NISUZUKSkgJiBUUk5HX1ZJRDFfSVBfSURfTUFTSykKKworLyohIEBuYW1lIFZJRDIgLSBWZXJzaW9uIElEIFJlZ2lzdGVyIChMUykgKi8KKyNkZWZpbmUgVFJOR19WSUQyX0NPTkZJR19PUFRfTUFTSyAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIFRSTkdfVklEMl9DT05GSUdfT1BUX1NISUZUICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1ZJRDJfQ09ORklHX09QVCh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19WSUQyX0NPTkZJR19PUFRfU0hJRlQpKSAmIFRSTkdfVklEMl9DT05GSUdfT1BUX01BU0spCisjZGVmaW5lIFRSTkdfVklEMl9FQ09fUkVWX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkYwMFUpCisjZGVmaW5lIFRSTkdfVklEMl9FQ09fUkVWX1NISUZUICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBUUk5HX1ZJRDJfRUNPX1JFVih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19WSUQyX0VDT19SRVZfU0hJRlQpKSAmIFRSTkdfVklEMl9FQ09fUkVWX01BU0spCisjZGVmaW5lIFRSTkdfVklEMl9JTlRHX09QVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgVFJOR19WSUQyX0lOVEdfT1BUX1NISUZUICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1ZJRDJfSU5UR19PUFQoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19WSUQyX0lOVEdfT1BUX1NISUZUKSkgJiBUUk5HX1ZJRDJfSU5UR19PUFRfTUFTSykKKyNkZWZpbmUgVFJOR19WSUQyX0VSQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFRSTkdfVklEMl9FUkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgVFJOR19WSUQyX0VSQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfVklEMl9FUkFfU0hJRlQpKSAmIFRSTkdfVklEMl9FUkFfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFRSTkdfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBUUk5HIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgVFJORzAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFRSTkcwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMjkwMDB1KQorLyoqIFBlcmlwaGVyYWwgVFJORzAgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFRSTkcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUk5HX1R5cGUgKilUUk5HMF9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFRSTkcgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBUUk5HX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgIHsgVFJORzBfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgVFJORyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgVFJOR19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFRSTkcwIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIFRSTkcgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIFRSTkdfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBUUk5HMF9JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBUUk5HX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gVFNJIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgVFNJX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFRTSSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogVFNJIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBHRU5DUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNJIEdlbmVyYWwgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IERBVEE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU0kgREFUQSBSZWdpc3Rlciwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBUU0hEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNJIFRocmVzaG9sZCBSZWdpc3Rlciwgb2Zmc2V0OiAweDggKi8KK30gVFNJX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFRTSSBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFRTSV9SZWdpc3Rlcl9NYXNrcyBUU0kgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIEdFTkNTIC0gVFNJIEdlbmVyYWwgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFRTSV9HRU5DU19DVVJTV19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFRTSV9HRU5DU19DVVJTV19TSElGVCAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBUU0lfR0VOQ1NfQ1VSU1coeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX0dFTkNTX0NVUlNXX1NISUZUKSkgJiBUU0lfR0VOQ1NfQ1VSU1dfTUFTSykKKyNkZWZpbmUgVFNJX0dFTkNTX0VPU0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgVFNJX0dFTkNTX0VPU0ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFRTSV9HRU5DU19FT1NGKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfR0VOQ1NfRU9TRl9TSElGVCkpICYgVFNJX0dFTkNTX0VPU0ZfTUFTSykKKyNkZWZpbmUgVFNJX0dFTkNTX1NDTklQX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgVFNJX0dFTkNTX1NDTklQX1NISUZUICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIFRTSV9HRU5DU19TQ05JUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfR0VOQ1NfU0NOSVBfU0hJRlQpKSAmIFRTSV9HRU5DU19TQ05JUF9NQVNLKQorI2RlZmluZSBUU0lfR0VOQ1NfU1RNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgVFNJX0dFTkNTX1NUTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIFRTSV9HRU5DU19TVE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfR0VOQ1NfU1RNX1NISUZUKSkgJiBUU0lfR0VOQ1NfU1RNX01BU0spCisjZGVmaW5lIFRTSV9HRU5DU19TVFBFX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBUU0lfR0VOQ1NfU1RQRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgVFNJX0dFTkNTX1NUUEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19TVFBFX1NISUZUKSkgJiBUU0lfR0VOQ1NfU1RQRV9NQVNLKQorI2RlZmluZSBUU0lfR0VOQ1NfVFNJSUVOX01BU0sgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgVFNJX0dFTkNTX1RTSUlFTl9TSElGVCAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFRTSV9HRU5DU19UU0lJRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfR0VOQ1NfVFNJSUVOX1NISUZUKSkgJiBUU0lfR0VOQ1NfVFNJSUVOX01BU0spCisjZGVmaW5lIFRTSV9HRU5DU19UU0lFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBUU0lfR0VOQ1NfVFNJRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgVFNJX0dFTkNTX1RTSUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19UU0lFTl9TSElGVCkpICYgVFNJX0dFTkNTX1RTSUVOX01BU0spCisjZGVmaW5lIFRTSV9HRU5DU19OU0NOX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MUYwMFUpCisjZGVmaW5lIFRTSV9HRU5DU19OU0NOX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBUU0lfR0VOQ1NfTlNDTih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX0dFTkNTX05TQ05fU0hJRlQpKSAmIFRTSV9HRU5DU19OU0NOX01BU0spCisjZGVmaW5lIFRTSV9HRU5DU19QU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4RTAwMFUpCisjZGVmaW5lIFRTSV9HRU5DU19QU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDEzVSkKKyNkZWZpbmUgVFNJX0dFTkNTX1BTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19QU19TSElGVCkpICYgVFNJX0dFTkNTX1BTX01BU0spCisjZGVmaW5lIFRTSV9HRU5DU19FWFRDSFJHX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NzAwMDBVKQorI2RlZmluZSBUU0lfR0VOQ1NfRVhUQ0hSR19TSElGVCAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRTSV9HRU5DU19FWFRDSFJHKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfR0VOQ1NfRVhUQ0hSR19TSElGVCkpICYgVFNJX0dFTkNTX0VYVENIUkdfTUFTSykKKyNkZWZpbmUgVFNJX0dFTkNTX0RWT0xUX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgxODAwMDBVKQorI2RlZmluZSBUU0lfR0VOQ1NfRFZPTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxOVUpCisjZGVmaW5lIFRTSV9HRU5DU19EVk9MVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfR0VOQ1NfRFZPTFRfU0hJRlQpKSAmIFRTSV9HRU5DU19EVk9MVF9NQVNLKQorI2RlZmluZSBUU0lfR0VOQ1NfUkVGQ0hSR19NQVNLICAgICAgICAgICAgICAgICAgICgweEUwMDAwMFUpCisjZGVmaW5lIFRTSV9HRU5DU19SRUZDSFJHX1NISUZUICAgICAgICAgICAgICAgICAgKDIxVSkKKyNkZWZpbmUgVFNJX0dFTkNTX1JFRkNIUkcoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19SRUZDSFJHX1NISUZUKSkgJiBUU0lfR0VOQ1NfUkVGQ0hSR19NQVNLKQorI2RlZmluZSBUU0lfR0VOQ1NfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEYwMDAwMDBVKQorI2RlZmluZSBUU0lfR0VOQ1NfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFRTSV9HRU5DU19NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfR0VOQ1NfTU9ERV9TSElGVCkpICYgVFNJX0dFTkNTX01PREVfTUFTSykKKyNkZWZpbmUgVFNJX0dFTkNTX0VTT1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFRTSV9HRU5DU19FU09SX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDI4VSkKKyNkZWZpbmUgVFNJX0dFTkNTX0VTT1IoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19FU09SX1NISUZUKSkgJiBUU0lfR0VOQ1NfRVNPUl9NQVNLKQorI2RlZmluZSBUU0lfR0VOQ1NfT1VUUkdGX01BU0sgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgVFNJX0dFTkNTX09VVFJHRl9TSElGVCAgICAgICAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBUU0lfR0VOQ1NfT1VUUkdGKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX0dFTkNTX09VVFJHRl9TSElGVCkpICYgVFNJX0dFTkNTX09VVFJHRl9NQVNLKQorCisvKiEgQG5hbWUgREFUQSAtIFRTSSBEQVRBIFJlZ2lzdGVyICovCisjZGVmaW5lIFRTSV9EQVRBX1RTSUNOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRTSV9EQVRBX1RTSUNOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUU0lfREFUQV9UU0lDTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX0RBVEFfVFNJQ05UX1NISUZUKSkgJiBUU0lfREFUQV9UU0lDTlRfTUFTSykKKyNkZWZpbmUgVFNJX0RBVEFfU1dUU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDBVKQorI2RlZmluZSBUU0lfREFUQV9TV1RTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyMlUpCisjZGVmaW5lIFRTSV9EQVRBX1NXVFMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfREFUQV9TV1RTX1NISUZUKSkgJiBUU0lfREFUQV9TV1RTX01BU0spCisjZGVmaW5lIFRTSV9EQVRBX0RNQUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgVFNJX0RBVEFfRE1BRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMjNVKQorI2RlZmluZSBUU0lfREFUQV9ETUFFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX0RBVEFfRE1BRU5fU0hJRlQpKSAmIFRTSV9EQVRBX0RNQUVOX01BU0spCisjZGVmaW5lIFRTSV9EQVRBX1RTSUNIX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBUU0lfREFUQV9UU0lDSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyOFUpCisjZGVmaW5lIFRTSV9EQVRBX1RTSUNIKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfREFUQV9UU0lDSF9TSElGVCkpICYgVFNJX0RBVEFfVFNJQ0hfTUFTSykKKworLyohIEBuYW1lIFRTSEQgLSBUU0kgVGhyZXNob2xkIFJlZ2lzdGVyICovCisjZGVmaW5lIFRTSV9UU0hEX1RIUkVTTF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRTSV9UU0hEX1RIUkVTTF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUU0lfVFNIRF9USFJFU0woeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX1RTSERfVEhSRVNMX1NISUZUKSkgJiBUU0lfVFNIRF9USFJFU0xfTUFTSykKKyNkZWZpbmUgVFNJX1RTSERfVEhSRVNIX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRTSV9UU0hEX1RIUkVTSF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFNJX1RTSERfVEhSRVNIKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9UU0hEX1RIUkVTSF9TSElGVCkpICYgVFNJX1RTSERfVEhSRVNIX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBUU0lfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBUU0kgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBUU0kwIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBUU0kwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDQ1MDAwdSkKKy8qKiBQZXJpcGhlcmFsIFRTSTAgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFRTSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUU0lfVHlwZSAqKVRTSTBfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBUU0lfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgVFNJMF9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBUU0kgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFRTSV9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBUU0kwIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIFRTSSBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgVFNJX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFRTSTBfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgVFNJX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gVlJFRiBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFZSRUZfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgVlJFRiBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogVlJFRiAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDhfdCBUUk07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFZSRUYgVHJpbSBSZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50OF90IFNDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVlJFRiBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHgxICovCit9IFZSRUZfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gVlJFRiBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFZSRUZfUmVnaXN0ZXJfTWFza3MgVlJFRiBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgVFJNIC0gVlJFRiBUcmltIFJlZ2lzdGVyICovCisjZGVmaW5lIFZSRUZfVFJNX1RSSU1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M0ZVKQorI2RlZmluZSBWUkVGX1RSTV9UUklNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVlJFRl9UUk1fVFJJTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBWUkVGX1RSTV9UUklNX1NISUZUKSkgJiBWUkVGX1RSTV9UUklNX01BU0spCisjZGVmaW5lIFZSRUZfVFJNX0NIT1BFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBWUkVGX1RSTV9DSE9QRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgVlJFRl9UUk1fQ0hPUEVOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBWUkVGX1RSTV9DSE9QRU5fU0hJRlQpKSAmIFZSRUZfVFJNX0NIT1BFTl9NQVNLKQorCisvKiEgQG5hbWUgU0MgLSBWUkVGIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBWUkVGX1NDX01PREVfTFZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBWUkVGX1NDX01PREVfTFZfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVlJFRl9TQ19NT0RFX0xWKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBWUkVGX1NDX01PREVfTFZfU0hJRlQpKSAmIFZSRUZfU0NfTU9ERV9MVl9NQVNLKQorI2RlZmluZSBWUkVGX1NDX1ZSRUZTVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBWUkVGX1NDX1ZSRUZTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgVlJFRl9TQ19WUkVGU1QoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBWUkVGX1NDX1ZSRUZTVF9TSElGVCkpICYgVlJFRl9TQ19WUkVGU1RfTUFTSykKKyNkZWZpbmUgVlJFRl9TQ19JQ09NUEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFZSRUZfU0NfSUNPTVBFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBWUkVGX1NDX0lDT01QRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFZSRUZfU0NfSUNPTVBFTl9TSElGVCkpICYgVlJFRl9TQ19JQ09NUEVOX01BU0spCisjZGVmaW5lIFZSRUZfU0NfUkVHRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBWUkVGX1NDX1JFR0VOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgVlJFRl9TQ19SRUdFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBWUkVGX1NDX1JFR0VOX1NISUZUKSkgJiBWUkVGX1NDX1JFR0VOX01BU0spCisjZGVmaW5lIFZSRUZfU0NfVlJFRkVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBWUkVGX1NDX1ZSRUZFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgVlJFRl9TQ19WUkVGRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBWUkVGX1NDX1ZSRUZFTl9TSElGVCkpICYgVlJFRl9TQ19WUkVGRU5fTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFZSRUZfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBWUkVGIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgVlJFRiBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgVlJFRl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA3NDAwMHUpCisvKiogUGVyaXBoZXJhbCBWUkVGIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBWUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVlJFRl9UeXBlICopVlJFRl9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFZSRUYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBWUkVGX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgIHsgVlJFRl9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBWUkVGIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBWUkVGX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgVlJFRiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgVlJFRl9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfQU5BTE9HIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9BTkFMT0dfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgWENWUl9BTkFMT0cgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFhDVlJfQU5BTE9HIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBCQl9MRE9fMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkYgQW5hbG9nIEJhc2ViYW5kIExETyBDb250cm9sIDEsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgQkJfTERPXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJGIEFuYWxvZyBCYXNlYmFuZCBMRE8gQ29udHJvbCAyLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IFJYX0FEQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSRiBBbmFsb2cgQURDIENvbnRyb2wsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDMyX3QgUlhfQkJBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJGIEFuYWxvZyBCQkEgQ29udHJvbCwgb2Zmc2V0OiAweEMgKi8KKyAgX19JTyB1aW50MzJfdCBSWF9MTkE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkYgQW5hbG9nIExOQSBDb250cm9sLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50MzJfdCBSWF9UWkE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkYgQW5hbG9nIFRaQSBDb250cm9sLCBvZmZzZXQ6IDB4MTQgKi8KKyAgX19JTyB1aW50MzJfdCBSWF9BVVhQTEw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkYgQW5hbG9nIEF1eCBQTEwgQ29udHJvbCwgb2Zmc2V0OiAweDE4ICovCisgIF9fSU8gdWludDMyX3QgU1lfQ1RSTF8xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJGIEFuYWxvZyBTeW50aGVzaXplciBDb250cm9sIDEsIG9mZnNldDogMHgxQyAqLworICBfX0lPIHVpbnQzMl90IFNZX0NUUkxfMjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSRiBBbmFsb2cgU3ludGhlc2l6ZXIgQ29udHJvbCAyLCBvZmZzZXQ6IDB4MjAgKi8KKyAgX19JTyB1aW50MzJfdCBUWF9EQUNfUEE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkYgQW5hbG9nIFRYIEhQTSBEQUMgYW5kIFBBIENvbnRyb2wsIG9mZnNldDogMHgyNCAqLworICBfX0lPIHVpbnQzMl90IEJBTFVOX1RYOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSRiBBbmFsb2cgQmFsdW4gVFggTW9kZSBDb250cm9sLCBvZmZzZXQ6IDB4MjggKi8KKyAgX19JTyB1aW50MzJfdCBCQUxVTl9SWDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkYgQW5hbG9nIEJhbHVuIFJYIE1vZGUgQ29udHJvbCwgb2Zmc2V0OiAweDJDICovCisgIF9fSSAgdWludDMyX3QgREZUX09CU1ZfMTsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJGIEFuYWxvZyBERlQgT2JzZXJ2YXRpb24gUmVnaXN0ZXIgMSwgb2Zmc2V0OiAweDMwICovCisgIF9fSU8gdWludDMyX3QgREZUX09CU1ZfMjsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJGIEFuYWxvZyBERlQgT2JzZXJ2YXRpb24gUmVnaXN0ZXIgMiwgb2Zmc2V0OiAweDM0ICovCit9IFhDVlJfQU5BTE9HX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfQU5BTE9HIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9BTkFMT0dfUmVnaXN0ZXJfTWFza3MgWENWUl9BTkFMT0cgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIEJCX0xET18xIC0gUkYgQW5hbG9nIEJhc2ViYW5kIExETyBDb250cm9sIDEgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19CWVBfTUFTSyAoMHgxVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19CWVBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX0JZUCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfQllQX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX0JZUF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX0RJQUdTRUxfTUFTSyAoMHgyVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19ESUFHU0VMX1NISUZUICgxVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19ESUFHU0VMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX0RJQUdTRUxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19TUEFSRV9NQVNLICgweENVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX1NQQVJFX1NISUZUICgyVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19TUEFSRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfU1BBUkVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfU1BBUkVfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19UUklNX01BU0sgKDB4NzBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX1RSSU1fU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX1RSSU0oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX1RSSU1fU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfVFJJTV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX0JZUF9NQVNLICgweDEwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfQllQX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0JCQV9CWVAoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfQllQX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX0JZUF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX0RJQUdTRUxfTUFTSyAoMHgyMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX0RJQUdTRUxfU0hJRlQgKDlVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX0RJQUdTRUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX1NQQVJFX01BU0sgKDB4QzAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0JCQV9TUEFSRV9TSElGVCAoMTBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX1NQQVJFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0JCQV9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0JCQV9TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX1RSSU1fTUFTSyAoMHg3MDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0JCQV9UUklNX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfVFJJTSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX1RSSU1fU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfVFJJTV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19CWVBfTUFTSyAoMHgxMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19GREJLX0JZUF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19CWVAoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfQllQX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19CWVBfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfRElBR1NFTF9NQVNLICgweDIwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfRElBR1NFTF9TSElGVCAoMTdVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19ESUFHU0VMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19TUEFSRV9NQVNLICgweEMwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfU1BBUkVfU0hJRlQgKDE4VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfU1BBUkUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfU1BBUkVfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfVFJJTV9NQVNLICgweDcwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19GREJLX1RSSU1fU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfVFJJTSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19GREJLX1RSSU1fU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19GREJLX1RSSU1fTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0hGX0JZUF9NQVNLICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0hGX0JZUF9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfQllQKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0hGX0JZUF9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0hGX0JZUF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfRElBR1NFTF9NQVNLICgweDIwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfRElBR1NFTF9TSElGVCAoMjVVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfRElBR1NFTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfU1BBUkVfTUFTSyAoMHhDMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0hGX1NQQVJFX1NISUZUICgyNlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9TUEFSRSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfU1BBUkVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfVFJJTV9NQVNLICgweDcwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0hGX1RSSU1fU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0hGX1RSSU0oeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9UUklNX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfVFJJTV9NQVNLKQorCisvKiEgQG5hbWUgQkJfTERPXzIgLSBSRiBBbmFsb2cgQmFzZWJhbmQgTERPIENvbnRyb2wgMiAqLworI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfQllQX01BU0sgICgweDFVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfQllQX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX0JZUCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9CWVBfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9CWVBfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX0RJQUdTRUxfTUFTSyAoMHgyVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX0RJQUdTRUxfU0hJRlQgKDFVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfRElBR1NFTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfU1BBUkVfTUFTSyAoMHhDVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX1NQQVJFX1NISUZUICgyVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX1NQQVJFKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9UUklNX01BU0sgKDB4NzBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfVFJJTV9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9UUklNKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfVFJJTV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX1RSSU1fTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT19TUEFSRV9NQVNLICgweDMwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09fU1BBUkVfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPX1NQQVJFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT19TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT19TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPTE9fQllQX01BU0sgKDB4NDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX0JZUF9TSElGVCAoMTBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPTE9fQllQKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX0JZUF9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX0JZUF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPTE9fRElBR1NFTF9NQVNLICgweDgwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09MT19ESUFHU0VMX1NISUZUICgxMVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09MT19ESUFHU0VMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09MT19ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09MT19UUklNX01BU0sgKDB4NzAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09MT19UUklNX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09MT19UUklNKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX1RSSU1fU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09MT19UUklNX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WVFJFRl9ESUFHU0VMX01BU0sgKDB4MTAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVlRSRUZfRElBR1NFTF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVlRSRUZfRElBR1NFTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WVFJFRl9ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVlRSRUZfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVlRSRUZfVENfTUFTSyAoMHg2MDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WVFJFRl9UQ19TSElGVCAoMTdVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVlRSRUZfVEMoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZUUkVGX1RDX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVlRSRUZfVENfTUFTSykKKworLyohIEBuYW1lIFJYX0FEQyAtIFJGIEFuYWxvZyBBREMgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX0JVTVBfTUFTSyAgICAgICgweEZGVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19CVU1QX1NISUZUICAgICAoMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfQlVNUCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX0JVTVBfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfQlVNUF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX0ZTX1NFTF9NQVNLICAgICgweDMwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfRlNfU0VMX1NISUZUICAgKDhVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX0ZTX1NFTCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19GU19TRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfRlNfU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfSV9ESUFHU0VMX01BU0sgKDB4NDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19JX0RJQUdTRUxfU0hJRlQgKDEwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19JX0RJQUdTRUwoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfSV9ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX0lfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX1FfRElBR1NFTF9NQVNLICgweDgwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfUV9ESUFHU0VMX1NISUZUICgxMVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfUV9ESUFHU0VMKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX1FfRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19RX0RJQUdTRUxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19TUEFSRV9NQVNLICAgICAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19TUEFSRV9TSElGVCAgICAoMTJVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX1NQQVJFKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19TUEFSRV9NQVNLKQorCisvKiEgQG5hbWUgUlhfQkJBIC0gUkYgQW5hbG9nIEJCQSBDb250cm9sICovCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgICAgKDB4N1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX1NISUZUICAgKDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQ1VSX0JVTVBfTUFTSyAgKDB4OFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQ1VSX0JVTVBfU0hJRlQgKDNVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0NVUl9CVU1QKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9DVVJfQlVNUF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9DVVJfQlVNUF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUwxX01BU0sgICgweDEwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMMV9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDEoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUwxX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUwxX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDJfTUFTSyAgKDB4MjBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUwyX1NISUZUICg1VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMMih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDJfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDJfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMM19NQVNLICAoMHg0MFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDNfU0hJRlQgKDZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUwzKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMM19TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMM19NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUw0X01BU0sgICgweDgwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMNF9TSElGVCAoN1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDQoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUw0X1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUw0X01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfU1BBUkVfTUFTSyAgICAgKDB4M0YwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9TUEFSRV9TSElGVCAgICAoMTZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX1NQQVJFKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSyAgICgweDcwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfU0hJRlQgICgyNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9TUEFSRV9NQVNLICAgICgweDcwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfU1BBUkVfU0hJRlQgICAoMjhVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9TUEFSRSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfU1BBUkVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX1NQQVJFX01BU0spCisKKy8qISBAbmFtZSBSWF9MTkEgLSBSRiBBbmFsb2cgTE5BIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9CVU1QX01BU0sgICAgICAoMHhGVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9CVU1QX1NISUZUICAgICAoMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfQlVNUCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX0JVTVBfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfQlVNUF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX0hHX0RJQUdTRUxfTUFTSyAoMHgxMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfSEdfRElBR1NFTF9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfSEdfRElBR1NFTCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX0hHX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfSEdfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX0hJWl9FTkFCTEVfTUFTSyAoMHgyMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfSElaX0VOQUJMRV9TSElGVCAoNVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfSElaX0VOQUJMRSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX0hJWl9FTkFCTEVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfSElaX0VOQUJMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX0xHX0RJQUdTRUxfTUFTSyAoMHg0MFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfTEdfRElBR1NFTF9TSElGVCAoNlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfTEdfRElBR1NFTCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX0xHX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfTEdfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX1NQQVJFX01BU0sgICAgICgweDMwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfU1BBUkVfU0hJRlQgICAgKDhVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX1NQQVJFKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTUlYRVJfQlVNUF9NQVNLICAgICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX01JWEVSX0JVTVBfU0hJRlQgICAoMTZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTUlYRVJfQlVNUCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfTE5BX1JYX01JWEVSX0JVTVBfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9NSVhFUl9CVU1QX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9NSVhFUl9TUEFSRV9NQVNLICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX01JWEVSX1NQQVJFX1NISUZUICAoMjBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTUlYRVJfU1BBUkUoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfTE5BX1JYX01JWEVSX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTUlYRVJfU1BBUkVfTUFTSykKKworLyohIEBuYW1lIFJYX1RaQSAtIFJGIEFuYWxvZyBUWkEgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLICAgICgweDdVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9TSElGVCAgICgwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0NVUl9CVU1QX01BU0sgICgweDhVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0NVUl9CVU1QX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9DVVJfQlVNUCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQ1VSX0JVTVBfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQ1VSX0JVTVBfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9HQUlOX0JVTVBfTUFTSyAoMHgxMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfR0FJTl9CVU1QX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9HQUlOX0JVTVAoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfR0FJTl9CVU1QX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0dBSU5fQlVNUF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX1NQQVJFX01BU0sgICAgICgweDNGMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfU1BBUkVfU0hJRlQgICAgKDE2VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9TUEFSRSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfU1BBUkVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfU1BBUkVfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTFfRElBR1NFTF9NQVNLICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTFfRElBR1NFTF9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBMV9ESUFHU0VMKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTFfRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTFfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBMl9ESUFHU0VMX01BU0sgICgweDIwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBMl9ESUFHU0VMX1NISUZUICgyNVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkEyX0RJQUdTRUwoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBMl9ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBMl9ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkEzX0RJQUdTRUxfTUFTSyAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkEzX0RJQUdTRUxfU0hJRlQgKDI2VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTNfRElBR1NFTCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkEzX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkEzX0RJQUdTRUxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTRfRElBR1NFTF9NQVNLICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTRfRElBR1NFTF9TSElGVCAoMjdVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBNF9ESUFHU0VMKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTRfRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTRfRElBR1NFTF9NQVNLKQorCisvKiEgQG5hbWUgUlhfQVVYUExMIC0gUkYgQW5hbG9nIEF1eCBQTEwgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfQklBU19UUklNX01BU0sgICAgICgweDdVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfQklBU19UUklNX1NISUZUICAgICgwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX0JJQVNfVFJJTSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9CSUFTX1RSSU1fU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9CSUFTX1RSSU1fTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX0RJQUdTRUwxX01BU0sgICAgICAoMHg4VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX0RJQUdTRUwxX1NISUZUICAgICAoM1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9ESUFHU0VMMSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfRElBR1NFTDFfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9ESUFHU0VMMV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfRElBR1NFTDJfTUFTSyAgICAgICgweDEwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX0RJQUdTRUwyX1NISUZUICAgICAoNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9ESUFHU0VMMih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfRElBR1NFTDJfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9ESUFHU0VMMl9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfTEZfQ05UTF9NQVNLICAgICAgICgweEUwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX0xGX0NOVExfU0hJRlQgICAgICAoNVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9MRl9DTlRMKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfTEZfQ05UTF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQVVYUExMX0xGX0NOVExfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX1NQQVJFX01BU0sgICAgICAgICAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfU1BBUkVfU0hJRlQgICAgICAgICg4VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX1NQQVJFKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQVVYUExMX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9WQ09fREFDX1JFRl9BREpVU1RfTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX1ZDT19EQUNfUkVGX0FESlVTVF9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfVkNPX0RBQ19SRUZfQURKVVNUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQVVYUExMX1ZDT19EQUNfUkVGX0FESlVTVF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQVVYUExMX1ZDT19EQUNfUkVGX0FESlVTVF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfVlRVTkVfVEVTVE1PREVfTUFTSyAoMHgxMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9WVFVORV9URVNUTU9ERV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfVlRVTkVfVEVTVE1PREUoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQVVYUExMX1ZUVU5FX1RFU1RNT0RFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfVlRVTkVfVEVTVE1PREVfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX1JYVFhfQkFMX0JJQVNUX01BU0sgKDB4MzAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX1JYVFhfQkFMX0JJQVNUX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX0JBTF9CSUFTVCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfUlhUWF9CQUxfQklBU1RfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX0JBTF9CSUFTVF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfUlhUWF9CQUxfU1BBUkVfTUFTSyAoMHg3MDAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX1JYVFhfQkFMX1NQQVJFX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX0JBTF9TUEFSRSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfUlhUWF9CQUxfU1BBUkVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX0JBTF9TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfUlhUWF9SQ0NBTF9ESUFHU0VMX01BU0sgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfUlhUWF9SQ0NBTF9ESUFHU0VMX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX1JDQ0FMX0RJQUdTRUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfUlhUWF9SQ0NBTF9ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfUlhUWF9SQ0NBTF9ESUFHU0VMX01BU0spCisKKy8qISBAbmFtZSBTWV9DVFJMXzEgLSBSRiBBbmFsb2cgU3ludGhlc2l6ZXIgQ29udHJvbCAxICovCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9ESVZOX1NQQVJFX01BU0sgKDB4MVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9ESVZOX1NQQVJFX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0RJVk5fU1BBUkUoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9ESVZOX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfRElWTl9TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfRkNBTF9TUEFSRV9NQVNLICgweDJVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfRkNBTF9TUEFSRV9TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9GQ0FMX1NQQVJFKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfRkNBTF9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0ZDQUxfU1BBUkVfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0JVTVBfUlRMT19GREJLX01BU0sgKDB4MzBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fQlVNUF9SVExPX0ZEQktfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fQlVNUF9SVExPX0ZEQksoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fQlVNUF9SVExPX0ZEQktfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19CVU1QX1JUTE9fRkRCS19NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fQlVNUF9SVExPX1JYX01BU0sgKDB4QzBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fQlVNUF9SVExPX1JYX1NISUZUICg2VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0JVTVBfUlRMT19SWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19CVU1QX1JUTE9fUlhfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19CVU1QX1JUTE9fUlhfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0JVTVBfUlRMT19UWF9NQVNLICgweDMwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19CVU1QX1JUTE9fVFhfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fQlVNUF9SVExPX1RYKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0JVTVBfUlRMT19UWF9TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0JVTVBfUlRMT19UWF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fRElBR1NFTF9NQVNLICgweDQwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19ESUFHU0VMX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19ESUFHU0VMKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0RJQUdTRUxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX1NQQVJFX01BU0sgICAoMHg3MDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX1NQQVJFX1NISUZUICAoMTJVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fU1BBUkUoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fU1BBUkVfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xQRl9GSUxUX0NUUkxfTUFTSyAoMHg3MDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MUEZfRklMVF9DVFJMX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MUEZfRklMVF9DVFJMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xQRl9GSUxUX0NUUkxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MUEZfRklMVF9DVFJMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MUEZfU1BBUkVfTUFTSyAgKDB4ODAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTFBGX1NQQVJFX1NISUZUICgxOVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MUEZfU1BBUkUoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTFBGX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTFBGX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9ESUFHU0VMX01BU0sgKDB4MTAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX0RJQUdTRUxfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX0RJQUdTRUwoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfUENIX1RVTkVfTUFTSyAoMHg2MDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfUENIX1RVTkVfU0hJRlQgKDIxVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX1BDSF9UVU5FKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9QQ0hfVFVORV9TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX1BDSF9UVU5FX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9QQ0hfU0VMX01BU0sgKDB4ODAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX1BDSF9TRUxfU0hJRlQgKDIzVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX1BDSF9TRUwoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9QQ0hfU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfUENIX1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfU1BBUkVfTUFTSyAgICgweDMwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfU1BBUkVfU0hJRlQgICgyNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9TUEFSRSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfU1BBUkVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfVlRVTkVfT1ZFUlJJREVfVEVTVF9NT0RFX01BU0sgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfVlRVTkVfT1ZFUlJJREVfVEVTVF9NT0RFX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9WVFVORV9PVkVSUklERV9URVNUX01PREUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfVlRVTkVfT1ZFUlJJREVfVEVTVF9NT0RFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfVlRVTkVfT1ZFUlJJREVfVEVTVF9NT0RFX01BU0spCisKKy8qISBAbmFtZSBTWV9DVFJMXzIgLSBSRiBBbmFsb2cgU3ludGhlc2l6ZXIgQ29udHJvbCAyICovCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fQklBU19NQVNLICAgKDB4N1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fQklBU19TSElGVCAgKDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0JJQVMoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19CSUFTX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0JJQVNfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19ESUFHU0VMX01BU0sgKDB4OFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fRElBR1NFTF9TSElGVCAoM1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fRElBR1NFTCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWX01BU0sgICAgICgweDcwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVl9TSElGVCAgICAoNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1YoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0sgICAgKDB4NzAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fU0hJRlQgICAoOFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19QS19ERVRfT05fTUFTSyAoMHgxMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19QS19ERVRfT05fU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19QS19ERVRfT04oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX1BLX0RFVF9PTl9TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19QS19ERVRfT05fTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19TUEFSRV9NQVNLICAoMHgxQzAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fU1BBUkVfU0hJRlQgKDE0VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19TUEFSRSh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fU1BBUkVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fU1BBUkVfTUFTSykKKworLyohIEBuYW1lIFRYX0RBQ19QQSAtIFJGIEFuYWxvZyBUWCBIUE0gREFDIGFuZCBQQSBDb250cm9sICovCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfQlVNUF9DQVBfTUFTSyAoMHgzVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19CVU1QX0NBUF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfQlVNUF9DQVAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0JVTVBfQ0FQX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0JVTVBfQ0FQX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfQlVNUF9JREFDX01BU0sgKDB4MThVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0JVTVBfSURBQ19TSElGVCAoM1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfQlVNUF9JREFDKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19CVU1QX0lEQUNfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfQlVNUF9JREFDX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfQlVNUF9STE9BRF9NQVNLICgweEMwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19CVU1QX1JMT0FEX1NISUZUICg2VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19CVU1QX1JMT0FEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19CVU1QX1JMT0FEX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0JVTVBfUkxPQURfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19ESUFHU0VMX01BU0sgKDB4MjAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19ESUFHU0VMX1NISUZUICg5VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19ESUFHU0VMKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfSU5WRVJUX0NMS19NQVNLICgweDQwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfSU5WRVJUX0NMS19TSElGVCAoMTBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0lOVkVSVF9DTEsoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0lOVkVSVF9DTEtfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfSU5WRVJUX0NMS19NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX09QQU1QX0RJQUdTRUxfTUFTSyAoMHg4MDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX09QQU1QX0RJQUdTRUxfU0hJRlQgKDExVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19PUEFNUF9ESUFHU0VMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19PUEFNUF9ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX09QQU1QX0RJQUdTRUxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19TUEFSRV9NQVNLICAoMHhFMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19TUEFSRV9TSElGVCAoMTNVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX1NQQVJFKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfQlVNUF9WQklBU19NQVNLICgweEUwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX0JVTVBfVkJJQVNfU0hJRlQgKDE3VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX0JVTVBfVkJJQVMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfQlVNUF9WQklBU19TSElGVCkpICYgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX0JVTVBfVkJJQVNfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX0RJQUdTRUxfTUFTSyAoMHgyMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfRElBR1NFTF9TSElGVCAoMjFVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfRElBR1NFTCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9QQV9ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9QQV9TUEFSRV9NQVNLICAgKDB4MzgwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9QQV9TUEFSRV9TSElGVCAgKDIzVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX1NQQVJFKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9QQV9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX1NQQVJFX01BU0spCisKKy8qISBAbmFtZSBCQUxVTl9UWCAtIFJGIEFuYWxvZyBCYWx1biBUWCBNb2RlIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfQkFMVU5fVFhfUlhUWF9CQUxfVFhfQ09ERV9NQVNLICgweEZGRkZGRlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JBTFVOX1RYX1JYVFhfQkFMX1RYX0NPREVfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQUxVTl9UWF9SWFRYX0JBTF9UWF9DT0RFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkFMVU5fVFhfUlhUWF9CQUxfVFhfQ09ERV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkFMVU5fVFhfUlhUWF9CQUxfVFhfQ09ERV9NQVNLKQorCisvKiEgQG5hbWUgQkFMVU5fUlggLSBSRiBBbmFsb2cgQmFsdW4gUlggTW9kZSBDb250cm9sICovCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JBTFVOX1JYX1JYVFhfQkFMX1JYX0NPREVfTUFTSyAoMHhGRkZGRkZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQUxVTl9SWF9SWFRYX0JBTF9SWF9DT0RFX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkFMVU5fUlhfUlhUWF9CQUxfUlhfQ09ERSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JBTFVOX1JYX1JYVFhfQkFMX1JYX0NPREVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JBTFVOX1JYX1JYVFhfQkFMX1JYX0NPREVfTUFTSykKKworLyohIEBuYW1lIERGVF9PQlNWXzEgLSBSRiBBbmFsb2cgREZUIE9ic2VydmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMV9ERlRfRlJFUV9DT1VOVEVSX01BU0sgKDB4N0ZGRkZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8xX0RGVF9GUkVRX0NPVU5URVJfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8xX0RGVF9GUkVRX0NPVU5URVIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8xX0RGVF9GUkVRX0NPVU5URVJfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzFfREZUX0ZSRVFfQ09VTlRFUl9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8xX0NUVU5FX01BWF9ESUZGX01BU0sgKDB4RkYwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzFfQ1RVTkVfTUFYX0RJRkZfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMV9DVFVORV9NQVhfRElGRih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0RGVF9PQlNWXzFfQ1RVTkVfTUFYX0RJRkZfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzFfQ1RVTkVfTUFYX0RJRkZfTUFTSykKKworLyohIEBuYW1lIERGVF9PQlNWXzIgLSBSRiBBbmFsb2cgREZUIE9ic2VydmF0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9NQVhfRElGRl9NQVNLICgweDFGRkZGVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9NQVhfRElGRl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzJfU1lOX0JJU1RfTUFYX0RJRkYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8yX1NZTl9CSVNUX01BWF9ESUZGX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8yX1NZTl9CSVNUX01BWF9ESUZGX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzJfU1lOX0JJU1RfTUFYX0RJRkZfQ0hfTUFTSyAoMHg3RjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzJfU1lOX0JJU1RfTUFYX0RJRkZfQ0hfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9NQVhfRElGRl9DSCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0RGVF9PQlNWXzJfU1lOX0JJU1RfTUFYX0RJRkZfQ0hfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzJfU1lOX0JJU1RfTUFYX0RJRkZfQ0hfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9JR05PUkVfRkFJTFNfTUFTSyAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzJfU1lOX0JJU1RfSUdOT1JFX0ZBSUxTX1NISUZUICgzMVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzJfU1lOX0JJU1RfSUdOT1JFX0ZBSUxTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9JR05PUkVfRkFJTFNfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzJfU1lOX0JJU1RfSUdOT1JFX0ZBSUxTX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX0FOQUxPR19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFhDVlJfQU5BTE9HIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgWENWUl9BTkEgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFhDVlJfQU5BX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNUM1MDB1KQorLyoqIFBlcmlwaGVyYWwgWENWUl9BTkEgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFhDVlJfQU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChYQ1ZSX0FOQUxPR19UeXBlICopWENWUl9BTkFfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX0FOQUxPRyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgeyBYQ1ZSX0FOQV9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX0FOQUxPRyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICB7IFhDVlJfQU5BIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX0FOQUxPR19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfQ1RSTCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFhDVlJfQ1RSTF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBYQ1ZSX0NUUkwgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFhDVlJfQ1RSTCAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgWENWUl9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRSQU5TQ0VJVkVSIENPTlRST0wsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgWENWUl9TVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRSQU5TQ0VJVkVSIFNUQVRVUywgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBCTEVfQVJCX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQkxFIEFSQklUUkFUSU9OIENPTlRST0wsIG9mZnNldDogMHg4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzRdOworICBfX0lPIHVpbnQzMl90IE9WRVJXUklURV9WRVI7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBPVkVSV1JJVEUgVkVSU0lPTiwgb2Zmc2V0OiAweDEwICovCisgIF9fSU8gdWludDMyX3QgRE1BX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRSQU5TQ0VJVkVSIERNQSBDT05UUk9MLCBvZmZzZXQ6IDB4MTQgKi8KKyAgX19JICB1aW50MzJfdCBETUFfREFUQTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNDRUlWRVIgRE1BIERBVEEsIG9mZnNldDogMHgxOCAqLworICBfX0lPIHVpbnQzMl90IERURVNUX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBESUdJVEFMIFRFU1QgTVVYIENPTlRST0wsIG9mZnNldDogMHgxQyAqLworICBfX0lPIHVpbnQzMl90IFBBQ0tFVF9SQU1fQ1RSTDsgICAgICAgICAgICAgICAgICAgLyoqPCBQQUNLRVQgUkFNIENPTlRST0wsIG9mZnNldDogMHgyMCAqLworICBfX0lPIHVpbnQzMl90IEZBRF9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGQUQgQ09OVFJPTCwgb2Zmc2V0OiAweDI0ICovCisgIF9fSU8gdWludDMyX3QgTFBQU19DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExPVyBQT1dFUiBQUkVBTUJMRSBTRUFSQ0ggQ09OVFJPTCwgb2Zmc2V0OiAweDI4ICovCisgIF9fSU8gdWludDMyX3QgUkZfTk9UX0FMTE9XRURfQ1RSTDsgICAgICAgICAgICAgICAvKio8IFdJRkkgQ09FWElTVEVOQ0UgQ09OVFJPTCwgb2Zmc2V0OiAweDJDICovCisgIF9fSU8gdWludDMyX3QgQ1JDV19DRkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENSQy9XSElURU5FUiBDT05UUk9MLCBvZmZzZXQ6IDB4MzAgKi8KKyAgX19JICB1aW50MzJfdCBDUkNfRUNfTUFTSzsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ1JDIEVSUk9SIENPUlJFQ1RJT04gTUFTSywgb2Zmc2V0OiAweDM0ICovCisgIF9fSSAgdWludDMyX3QgQ1JDX1JFU19PVVQ7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IENSQyBSRVNVTFQsIG9mZnNldDogMHgzOCAqLworfSBYQ1ZSX0NUUkxfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9DVFJMIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9DVFJMX1JlZ2lzdGVyX01hc2tzIFhDVlJfQ1RSTCBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgWENWUl9DVFJMIC0gVFJBTlNDRUlWRVIgQ09OVFJPTCAqLworI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0sgICAgICAgICgweEZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX1NISUZUICAgICAgICgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfU0hJRlQpKSAmIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLICAgICAoMHg3MFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkNfU0hJRlQgICAgKDRVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JFRl9DTEtfRlJFUV9NQVNLICAgICgweDMwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkVGX0NMS19GUkVRX1NISUZUICAgKDhVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JFRl9DTEtfRlJFUSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfQ1RSTF9SRUZfQ0xLX0ZSRVFfU0hJRlQpKSAmIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkVGX0NMS19GUkVRX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfU09DX1JGX09TQ19DTEtfR0FURV9FTl9NQVNLICgweDgwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfU09DX1JGX09TQ19DTEtfR0FURV9FTl9TSElGVCAoMTFVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1NPQ19SRl9PU0NfQ0xLX0dBVEVfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfWENWUl9DVFJMX1NPQ19SRl9PU0NfQ0xLX0dBVEVfRU5fU0hJRlQpKSAmIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfU09DX1JGX09TQ19DTEtfR0FURV9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9NQVNLICAgICAgICgweDMwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9TSElGVCAgICAgICgxMlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUxfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9SQURJTzBfSVJRX1NFTF9NQVNLICAoMHg3MDAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8wX0lSUV9TRUxfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9SQURJTzBfSVJRX1NFTCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8wX0lSUV9TRUxfU0hJRlQpKSAmIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8wX0lSUV9TRUxfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9SQURJTzFfSVJRX1NFTF9NQVNLICAoMHg3MDAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMV9JUlFfU0VMX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8xX0lSUV9TRUwoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMV9JUlFfU0VMX1NISUZUKSkgJiBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMV9JUlFfU0VMX01BU0spCisKKy8qISBAbmFtZSBYQ1ZSX1NUQVRVUyAtIFRSQU5TQ0VJVkVSIFNUQVRVUyAqLworI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0NPVU5UX01BU0sgICAgICgweEZGVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9DT1VOVF9TSElGVCAgICAoMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fQ09VTlQoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0NPVU5UX1NISUZUKSkgJiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0NPVU5UX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19QTExfU0VRX1NUQVRFX01BU0sgKDB4RjAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1BMTF9TRVFfU1RBVEVfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfUExMX1NFUV9TVEFURSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1BMTF9TRVFfU1RBVEVfU0hJRlQpKSAmIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19QTExfU0VRX1NUQVRFX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19SWF9NT0RFX01BU0sgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19SWF9NT0RFX1NISUZUICAgICAgKDEyVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1JYX01PREUoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19SWF9NT0RFX1NISUZUKSkgJiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfUlhfTU9ERV9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFhfTU9ERV9NQVNLICAgICAgICgweDIwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFhfTU9ERV9TSElGVCAgICAgICgxM1UpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UWF9NT0RFKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFhfTU9ERV9TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RYX01PREVfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX0JUTEVfU1lTQ0xLX1JFUV9NQVNLICgweDEwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX0JUTEVfU1lTQ0xLX1JFUV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfQlRMRV9TWVNDTEtfUkVRKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfU1RBVFVTX0JUTEVfU1lTQ0xLX1JFUV9TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX0JUTEVfU1lTQ0xLX1JFUV9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfUklGX0xMX0FDVElWRV9NQVNLICgweDIwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1JJRl9MTF9BQ1RJVkVfU0hJRlQgKDE3VSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1JJRl9MTF9BQ1RJVkUoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19SSUZfTExfQUNUSVZFX1NISUZUKSkgJiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfUklGX0xMX0FDVElWRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfWFRBTF9SRUFEWV9NQVNLICAgICgweDQwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1hUQUxfUkVBRFlfU0hJRlQgICAoMThVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfWFRBTF9SRUFEWSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1hUQUxfUkVBRFlfU0hJRlQpKSAmIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19YVEFMX1JFQURZX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19TT0NfVVNJTkdfUkZfT1NDX0NMS19NQVNLICgweDgwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1NPQ19VU0lOR19SRl9PU0NfQ0xLX1NISUZUICgxOVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19TT0NfVVNJTkdfUkZfT1NDX0NMSyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19TT0NfVVNJTkdfUkZfT1NDX0NMS19TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1NPQ19VU0lOR19SRl9PU0NfQ0xLX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fSVJRMF9NQVNLICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fSVJRMF9TSElGVCAgICAgKDI0VSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9JUlEwKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fSVJRMF9TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9JUlEwX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fSVJRMV9NQVNLICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fSVJRMV9TSElGVCAgICAgKDI1VSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9JUlExKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fSVJRMV9TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9JUlExX01BU0spCisKKy8qISBAbmFtZSBCTEVfQVJCX0NUUkwgLSBCTEUgQVJCSVRSQVRJT04gQ09OVFJPTCAqLworI2RlZmluZSBYQ1ZSX0NUUkxfQkxFX0FSQl9DVFJMX0JMRV9SRUxJTlFVSVNIX01BU0sgKDB4MVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9CTEVfQVJCX0NUUkxfQkxFX1JFTElOUVVJU0hfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQkxFX0FSQl9DVFJMX0JMRV9SRUxJTlFVSVNIKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0JMRV9BUkJfQ1RSTF9CTEVfUkVMSU5RVUlTSF9TSElGVCkpICYgWENWUl9DVFJMX0JMRV9BUkJfQ1RSTF9CTEVfUkVMSU5RVUlTSF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfQkxFX0FSQl9DVFJMX1hDVlJfQlVTWV9NQVNLICAgICgweDJVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQkxFX0FSQl9DVFJMX1hDVlJfQlVTWV9TSElGVCAgICgxVSkKKyNkZWZpbmUgWENWUl9DVFJMX0JMRV9BUkJfQ1RSTF9YQ1ZSX0JVU1koeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9CTEVfQVJCX0NUUkxfWENWUl9CVVNZX1NISUZUKSkgJiBYQ1ZSX0NUUkxfQkxFX0FSQl9DVFJMX1hDVlJfQlVTWV9NQVNLKQorCisvKiEgQG5hbWUgT1ZFUldSSVRFX1ZFUiAtIE9WRVJXUklURSBWRVJTSU9OICovCisjZGVmaW5lIFhDVlJfQ1RSTF9PVkVSV1JJVEVfVkVSX09WRVJXUklURV9WRVJfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9PVkVSV1JJVEVfVkVSX09WRVJXUklURV9WRVJfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfT1ZFUldSSVRFX1ZFUl9PVkVSV1JJVEVfVkVSKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX09WRVJXUklURV9WRVJfT1ZFUldSSVRFX1ZFUl9TSElGVCkpICYgWENWUl9DVFJMX09WRVJXUklURV9WRVJfT1ZFUldSSVRFX1ZFUl9NQVNLKQorCisvKiEgQG5hbWUgRE1BX0NUUkwgLSBUUkFOU0NFSVZFUiBETUEgQ09OVFJPTCAqLworI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1BBR0VfTUFTSyAgICAgICAgICgweEZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1BBR0VfU0hJRlQgICAgICAgICgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9QQUdFKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfUEFHRV9TSElGVCkpICYgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9QQUdFX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfQ1RSTF9TSU5HTEVfUkVRX01PREVfTUFTSyAgKDB4MTBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfU0lOR0xFX1JFUV9NT0RFX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9DVFJMX1NJTkdMRV9SRVFfTU9ERSh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9ETUFfQ1RSTF9TSU5HTEVfUkVRX01PREVfU0hJRlQpKSAmIFhDVlJfQ1RSTF9ETUFfQ1RSTF9TSU5HTEVfUkVRX01PREVfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9DVFJMX0JZUEFTU19ETUFfU1lOQ19NQVNLICAoMHgyMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfQ1RSTF9CWVBBU1NfRE1BX1NZTkNfU0hJRlQgKDVVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfQllQQVNTX0RNQV9TWU5DKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0RNQV9DVFJMX0JZUEFTU19ETUFfU1lOQ19TSElGVCkpICYgWENWUl9DVFJMX0RNQV9DVFJMX0JZUEFTU19ETUFfU1lOQ19NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RSSUdHRVJSRURfTUFTSyAgICgweDQwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9UUklHR0VSUkVEX1NISUZUICAoNlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVFJJR0dFUlJFRCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RSSUdHRVJSRURfU0hJRlQpKSAmIFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVFJJR0dFUlJFRF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RJTUVEX09VVF9NQVNLICAgICgweDgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9USU1FRF9PVVRfU0hJRlQgICAoN1UpCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVElNRURfT1VUKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RJTUVEX09VVF9TSElGVCkpICYgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9USU1FRF9PVVRfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9USU1FT1VUX01BU0sgICAgICAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RJTUVPVVRfU0hJRlQgICAgICg4VSkKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9USU1FT1VUKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVElNRU9VVF9TSElGVCkpICYgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9USU1FT1VUX01BU0spCisKKy8qISBAbmFtZSBETUFfREFUQSAtIFRSQU5TQ0VJVkVSIERNQSBEQVRBICovCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfREFUQV9ETUFfREFUQV9NQVNLICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0RBVEFfRE1BX0RBVEFfU0hJRlQgICAgICAgICgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9EQVRBX0RNQV9EQVRBKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9ETUFfREFUQV9ETUFfREFUQV9TSElGVCkpICYgWENWUl9DVFJMX0RNQV9EQVRBX0RNQV9EQVRBX01BU0spCisKKy8qISBAbmFtZSBEVEVTVF9DVFJMIC0gRElHSVRBTCBURVNUIE1VWCBDT05UUk9MICovCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX1BBR0VfTUFTSyAgICAgKDB4M0ZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9QQUdFX1NISUZUICAgICgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfUEFHRSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX1BBR0VfU0hJRlQpKSAmIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX1BBR0VfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfRU5fTUFTSyAgICAgICAoMHg4MFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX0VOX1NISUZUICAgICAgKDdVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9FTih4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfRU5fU0hJRlQpKSAmIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX0VOX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0dQSU8wX09WTEFZX1BJTl9NQVNLICgweEYwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0dQSU8wX09WTEFZX1BJTl9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0dQSU8wX09WTEFZX1BJTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9HUElPMF9PVkxBWV9QSU5fU0hJRlQpKSAmIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0dQSU8wX09WTEFZX1BJTl9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9HUElPMV9PVkxBWV9QSU5fTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfR1BJTzFfT1ZMQVlfUElOX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0dQSU8xX09WTEFZX1BJTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9HUElPMV9PVkxBWV9QSU5fU0hJRlQpKSAmIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0dQSU8xX09WTEFZX1BJTl9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9UU01fR1BJT19PVkxBWV9NQVNLICgweDMwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfVFNNX0dQSU9fT1ZMQVlfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfVFNNX0dQSU9fT1ZMQVkoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1RTTV9HUElPX09WTEFZX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9UU01fR1BJT19PVkxBWV9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9TSEZUX01BU0sgICAgICgweDcwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9TSEZUX1NISUZUICAgICgyNFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX1NIRlQoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9TSEZUX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9TSEZUX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1JBV19NT0RFX0lfTUFTSyAgICAgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9SQVdfTU9ERV9JX1NISUZUICAgICgyOFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1JBV19NT0RFX0koeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9SQVdfTU9ERV9JX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9SQVdfTU9ERV9JX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1JBV19NT0RFX1FfTUFTSyAgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9SQVdfTU9ERV9RX1NISUZUICAgICgyOVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1JBV19NT0RFX1EoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9SQVdfTU9ERV9RX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9SQVdfTU9ERV9RX01BU0spCisKKy8qISBAbmFtZSBQQUNLRVRfUkFNX0NUUkwgLSBQQUNLRVQgUkFNIENPTlRST0wgKi8KKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfUEFHRV9NQVNLICAoMHhGVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfUEFHRV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1BBR0UoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19QQUdFX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19QQUdFX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUEJfUFJPVEVDVF9NQVNLICgweDEwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9QQl9QUk9URUNUX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9QQl9QUk9URUNUKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUEJfUFJPVEVDVF9TSElGVCkpICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9QQl9QUk9URUNUX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfWENWUl9SQU1fQUxMT1dfTUFTSyAoMHgyMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfWENWUl9SQU1fQUxMT1dfU0hJRlQgKDVVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1hDVlJfUkFNX0FMTE9XKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9YQ1ZSX1JBTV9BTExPV19TSElGVCkpICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9YQ1ZSX1JBTV9BTExPV19NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0FMTF9QUk9UT0NPTFNfQUxMT1dfTUFTSyAoMHg0MFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfQUxMX1BST1RPQ09MU19BTExPV19TSElGVCAoNlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfQUxMX1BST1RPQ09MU19BTExPVyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfQUxMX1BST1RPQ09MU19BTExPV19TSElGVCkpICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9BTExfUFJPVE9DT0xTX0FMTE9XX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1RSSUdHRVJSRURfTUFTSyAoMHg4MFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1RSSUdHRVJSRURfU0hJRlQgKDdVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19UUklHR0VSUkVEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfVFJJR0dFUlJFRF9TSElGVCkpICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfVFJJR0dFUlJFRF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19SQU1fRlVMTF9NQVNLICgweDMwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1JBTV9GVUxMX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfUkFNX0ZVTEwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19SQU1fRlVMTF9TSElGVCkpICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfUkFNX0ZVTExfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NMS19PTl9PVlJEX0VOX01BU0sgKDB4NDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NMS19PTl9PVlJEX0VOX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMF9DTEtfT05fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMF9DTEtfT05fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NMS19PTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMF9DTEtfT05fT1ZSRF9NQVNLICgweDgwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMF9DTEtfT05fT1ZSRF9TSElGVCAoMTFVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0xLX09OX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0xLX09OX09WUkRfU0hJRlQpKSAmIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMF9DTEtfT05fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0xLX09OX09WUkRfRU5fTUFTSyAoMHgxMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NMS19PTl9PVlJEX0VOX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DTEtfT05fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DTEtfT05fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NMS19PTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DTEtfT05fT1ZSRF9NQVNLICgweDIwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0xLX09OX09WUkRfU0hJRlQgKDEzVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NMS19PTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NMS19PTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0xLX09OX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NFX09OX09WUkRfRU5fTUFTSyAoMHg0MDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NFX09OX09WUkRfRU5fU0hJRlQgKDE0VSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NFX09OX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0VfT05fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NFX09OX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NFX09OX09WUkRfTUFTSyAoMHg4MDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NFX09OX09WUkRfU0hJRlQgKDE1VSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NFX09OX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0VfT05fT1ZSRF9TSElGVCkpICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NFX09OX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NFX09OX09WUkRfRU5fTUFTSyAoMHgxMDAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DRV9PTl9PVlJEX0VOX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DRV9PTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NFX09OX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DRV9PTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DRV9PTl9PVlJEX01BU0sgKDB4MjAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0VfT05fT1ZSRF9TSElGVCAoMTdVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0VfT05fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DRV9PTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0VfT05fT1ZSRF9NQVNLKQorCisvKiEgQG5hbWUgRkFEX0NUUkwgLSBGQUQgQ09OVFJPTCAqLworI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfRkFEX0VOX01BU0sgICAgICAgICAgICgweDFVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfRkFEX0VOX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0ZBRF9FTih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9GQURfQ1RSTF9GQURfRU5fU0hJRlQpKSAmIFhDVlJfQ1RSTF9GQURfQ1RSTF9GQURfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfTUFTSyAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfU0hJRlQgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9TSElGVCkpICYgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfRU5fTUFTSyAgICAgICAgICAoMHgzMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX0VOX1NISUZUICAgICAgICAgKDRVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9FTih4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfRU5fU0hJRlQpKSAmIFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX0VOX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX0haX01BU0sgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9IWl9TSElGVCAgICAgICAgICg2VSkKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfSFooeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX0haX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9IWl9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9DVFJMTU9ERV9NQVNLICAgICgweDgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfQ1RSTE1PREVfU0hJRlQgICAoN1UpCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX0NUUkxNT0RFKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9DVFJMTU9ERV9TSElGVCkpICYgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfQ1RSTE1PREVfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfUE9MX01BU0sgICAgICAgICAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9QT0xfU0hJRlQgICAgICAgICg4VSkKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfUE9MKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX1BPTF9TSElGVCkpICYgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfUE9MX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9GQURfTk9UX0dQSU9fTUFTSyAgICAgKDB4RjAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9GQURfTk9UX0dQSU9fU0hJRlQgICAgKDEyVSkKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0ZBRF9OT1RfR1BJTyh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9GQURfQ1RSTF9GQURfTk9UX0dQSU9fU0hJRlQpKSAmIFhDVlJfQ1RSTF9GQURfQ1RSTF9GQURfTk9UX0dQSU9fTUFTSykKKworLyohIEBuYW1lIExQUFNfQ1RSTCAtIExPVyBQT1dFUiBQUkVBTUJMRSBTRUFSQ0ggQ09OVFJPTCAqLworI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfRU5BQkxFX01BU0sgICAgICgweDFVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfRU5BQkxFX1NISUZUICAgICgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0VOQUJMRSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19FTkFCTEVfU0hJRlQpKSAmIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19FTkFCTEVfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1RaQV9BTExPV19NQVNLICAoMHgyVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1RaQV9BTExPV19TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19UWkFfQUxMT1coeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfVFpBX0FMTE9XX1NISUZUKSkgJiBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfVFpBX0FMTE9XX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19CQkFfQUxMT1dfTUFTSyAgKDB4NFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19CQkFfQUxMT1dfU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfQkJBX0FMTE9XKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0JCQV9BTExPV19TSElGVCkpICYgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0JCQV9BTExPV19NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfQURDX0FMTE9XX01BU0sgICgweDhVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfQURDX0FMTE9XX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0FEQ19BTExPVyh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19BRENfQUxMT1dfU0hJRlQpKSAmIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19BRENfQUxMT1dfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RDT0NfQUxMT1dfTUFTSyAoMHgxMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19EQ09DX0FMTE9XX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RDT0NfQUxMT1coeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19EQ09DX0FMTE9XX1NISUZUKSkgJiBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfRENPQ19BTExPV19NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfUERFVF9BTExPV19NQVNLICgweDIwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1BERVRfQUxMT1dfU0hJRlQgKDVVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfUERFVF9BTExPVyh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1BERVRfQUxMT1dfU0hJRlQpKSAmIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19QREVUX0FMTE9XX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19TWV9MT19BTExPV19NQVNLICgweDQwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NZX0xPX0FMTE9XX1NISUZUICg2VSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NZX0xPX0FMTE9XKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19TWV9MT19BTExPV19TSElGVCkpICYgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NZX0xPX0FMTE9XX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19TWV9MT19CVUZfQUxMT1dfTUFTSyAoMHg4MFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19TWV9MT19CVUZfQUxMT1dfU0hJRlQgKDdVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfU1lfTE9fQlVGX0FMTE9XKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NZX0xPX0JVRl9BTExPV19TSElGVCkpICYgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NZX0xPX0JVRl9BTExPV19NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfUlhfRElHX0FMTE9XX01BU0sgKDB4MTAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1JYX0RJR19BTExPV19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19SWF9ESUdfQUxMT1coeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfUlhfRElHX0FMTE9XX1NISUZUKSkgJiBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfUlhfRElHX0FMTE9XX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19EQ09DX0RJR19BTExPV19NQVNLICgweDIwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19EQ09DX0RJR19BTExPV19TSElGVCAoOVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19EQ09DX0RJR19BTExPVyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19EQ09DX0RJR19BTExPV19TSElGVCkpICYgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RDT0NfRElHX0FMTE9XX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19TVEFSVF9SWF9NQVNLICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NUQVJUX1JYX1NISUZUICAoMTZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfU1RBUlRfUlgoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NUQVJUX1JYX1NISUZUKSkgJiBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfU1RBUlRfUlhfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RFU1RfUlhfTUFTSyAgICAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19ERVNUX1JYX1NISUZUICAgKDI0VSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RFU1RfUlgoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19ERVNUX1JYX1NISUZUKSkgJiBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfREVTVF9SWF9NQVNLKQorCisvKiEgQG5hbWUgUkZfTk9UX0FMTE9XRURfQ1RSTCAtIFdJRkkgQ09FWElTVEVOQ0UgQ09OVFJPTCAqLworI2RlZmluZSBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9OT19UWF9NQVNLICgweDFVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9OT19UWF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX05PX1RYKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfTk9fVFhfU0hJRlQpKSAmIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX05PX1RYX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX05PX1JYX01BU0sgKDB4MlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX05PX1JYX1NISUZUICgxVSkKKyNkZWZpbmUgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfTk9fUlgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9OT19SWF9TSElGVCkpICYgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfTk9fUlhfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfQVNTRVJURURfTUFTSyAoMHg0VSkKKyNkZWZpbmUgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfQVNTRVJURURfU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9BU1NFUlRFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX0FTU0VSVEVEX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9BU1NFUlRFRF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9UWF9BQk9SVF9NQVNLICgweDhVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9UWF9BQk9SVF9TSElGVCAoM1UpCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX1RYX0FCT1JUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfVFhfQUJPUlRfU0hJRlQpKSAmIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX1RYX0FCT1JUX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX1JYX0FCT1JUX01BU0sgKDB4MTBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9SWF9BQk9SVF9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX1JYX0FCT1JUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfUlhfQUJPUlRfU0hJRlQpKSAmIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX1JYX0FCT1JUX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX01BU0sgKDB4MjBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9TSElGVCAoNVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfU0hJRlQpKSAmIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX01BU0spCisKKy8qISBAbmFtZSBDUkNXX0NGRyAtIENSQy9XSElURU5FUiBDT05UUk9MICovCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNXX0VOX01BU0sgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNXX0VOX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDV19FTih4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ1dfRU5fU0hJRlQpKSAmIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNXX0VOX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfWkVST19NQVNLICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfWkVST19TSElGVCAgICAgICAgKDFVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX1pFUk8oeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19aRVJPX1NISUZUKSkgJiBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX1pFUk9fTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQVJMWV9GQUlMX01BU0sgICAoMHg0VSkKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQVJMWV9GQUlMX1NISUZUICAoMlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUFSTFlfRkFJTCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VBUkxZX0ZBSUxfU0hJRlQpKSAmIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUFSTFlfRkFJTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX1JFU19PVVRfVkxEX01BU0sgICgweDhVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX1JFU19PVVRfVkxEX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19SRVNfT1VUX1ZMRCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfUkVTX09VVF9WTERfU0hJRlQpKSAmIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfUkVTX09VVF9WTERfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQ19PRkZTRVRfTUFTSyAgICAoMHg3RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQ19PRkZTRVRfU0hJRlQgICAoMTZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VDX09GRlNFVCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQ19PRkZTRVRfU0hJRlQpKSAmIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUNfT0ZGU0VUX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUNfRE9ORV9NQVNLICAgICAgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VDX0RPTkVfU0hJRlQgICAgICgyOFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUNfRE9ORSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VDX0RPTkVfU0hJRlQpKSAmIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUNfRE9ORV9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VDX0ZBSUxfTUFTSyAgICAgICgweDIwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQ19GQUlMX1NISUZUICAgICAoMjlVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VDX0ZBSUwoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQ19GQUlMX1NISUZUKSkgJiBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VDX0ZBSUxfTUFTSykKKworLyohIEBuYW1lIENSQ19FQ19NQVNLIC0gQ1JDIEVSUk9SIENPUlJFQ1RJT04gTUFTSyAqLworI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDX0VDX01BU0tfQ1JDX0VDX01BU0tfTUFTSyAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ19FQ19NQVNLX0NSQ19FQ19NQVNLX1NISUZUICAoMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNfRUNfTUFTS19DUkNfRUNfTUFTSyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfQ1JDX0VDX01BU0tfQ1JDX0VDX01BU0tfU0hJRlQpKSAmIFhDVlJfQ1RSTF9DUkNfRUNfTUFTS19DUkNfRUNfTUFTS19NQVNLKQorCisvKiEgQG5hbWUgQ1JDX1JFU19PVVQgLSBDUkMgUkVTVUxUICovCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNfUkVTX09VVF9DUkNfUkVTX09VVF9NQVNLICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDX1JFU19PVVRfQ1JDX1JFU19PVVRfU0hJRlQgICgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ19SRVNfT1VUX0NSQ19SRVNfT1VUKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9DUkNfUkVTX09VVF9DUkNfUkVTX09VVF9TSElGVCkpICYgWENWUl9DVFJMX0NSQ19SRVNfT1VUX0NSQ19SRVNfT1VUX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX0NUUkxfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBYQ1ZSX0NUUkwgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBYQ1ZSX01JU0MgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFhDVlJfTUlTQ19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNUMyODB1KQorLyoqIFBlcmlwaGVyYWwgWENWUl9NSVNDIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBYQ1ZSX01JU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoWENWUl9DVFJMX1R5cGUgKilYQ1ZSX01JU0NfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX0NUUkwgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBYQ1ZSX0NUUkxfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgIHsgWENWUl9NSVNDX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfQ1RSTCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgWENWUl9DVFJMX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICB7IFhDVlJfTUlTQyB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgWENWUl9DVFJMX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9QSFkgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1BIWV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBYQ1ZSX1BIWSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogWENWUl9QSFkgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IFBIWV9QUkVfUkVGMDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQUkVBTUJMRSBSRUZFUkVOQ0UgV0FWRUZPUk0gMCwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50MzJfdCBQUkVfUkVGMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUFJFQU1CTEUgUkVGRVJFTkNFIFdBVkVGT1JNIDEsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgUFJFX1JFRjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBSRUFNQkxFIFJFRkVSRU5DRSBXQVZFRk9STSAyLCBvZmZzZXQ6IDB4OCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFsyMF07CisgIF9fSU8gdWludDMyX3QgQ0ZHMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBIWSBDT05GSUdVUkFUSU9OIFJFR0lTVEVSIDEsIG9mZnNldDogMHgyMCAqLworICBfX0lPIHVpbnQzMl90IENGRzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQSFkgQ09ORklHVVJBVElPTiBSRUdJU1RFUiAyLCBvZmZzZXQ6IDB4MjQgKi8KKyAgX19JTyB1aW50MzJfdCBFTF9DRkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUEhZIEVBUkxZL0xBVEUgQ09ORklHVVJBVElPTiBSRUdJU1RFUiwgb2Zmc2V0OiAweDI4ICovCisgIF9fSU8gdWludDMyX3QgTlRXX0FEUl9CU007ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBIWSBORVRXT1JLIEFERFJFU1MgRk9SIEJTTSwgb2Zmc2V0OiAweDJDICovCisgIF9fSSAgdWludDMyX3QgU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBIWSBTVEFUVVMgUkVHSVNURVIsIG9mZnNldDogMHgzMCAqLworfSBYQ1ZSX1BIWV9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBYQ1ZSX1BIWSBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFhDVlJfUEhZX1JlZ2lzdGVyX01hc2tzIFhDVlJfUEhZIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBQSFlfUFJFX1JFRjAgLSBQUkVBTUJMRSBSRUZFUkVOQ0UgV0FWRUZPUk0gMCAqLworI2RlZmluZSBYQ1ZSX1BIWV9QSFlfUFJFX1JFRjBfRlNLX1BSRUFNQkxFX1JFRjBfTUFTSyAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFhDVlJfUEhZX1BIWV9QUkVfUkVGMF9GU0tfUFJFQU1CTEVfUkVGMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUEhZX1BIWV9QUkVfUkVGMF9GU0tfUFJFQU1CTEVfUkVGMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX1BIWV9QUkVfUkVGMF9GU0tfUFJFQU1CTEVfUkVGMF9TSElGVCkpICYgWENWUl9QSFlfUEhZX1BSRV9SRUYwX0ZTS19QUkVBTUJMRV9SRUYwX01BU0spCisKKy8qISBAbmFtZSBQUkVfUkVGMSAtIFBSRUFNQkxFIFJFRkVSRU5DRSBXQVZFRk9STSAxICovCisjZGVmaW5lIFhDVlJfUEhZX1BSRV9SRUYxX0ZTS19QUkVBTUJMRV9SRUYxX01BU0sgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBYQ1ZSX1BIWV9QUkVfUkVGMV9GU0tfUFJFQU1CTEVfUkVGMV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUEhZX1BSRV9SRUYxX0ZTS19QUkVBTUJMRV9SRUYxKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9QUkVfUkVGMV9GU0tfUFJFQU1CTEVfUkVGMV9TSElGVCkpICYgWENWUl9QSFlfUFJFX1JFRjFfRlNLX1BSRUFNQkxFX1JFRjFfTUFTSykKKworLyohIEBuYW1lIFBSRV9SRUYyIC0gUFJFQU1CTEUgUkVGRVJFTkNFIFdBVkVGT1JNIDIgKi8KKyNkZWZpbmUgWENWUl9QSFlfUFJFX1JFRjJfRlNLX1BSRUFNQkxFX1JFRjJfTUFTSyAoMHhGRkZGVSkKKyNkZWZpbmUgWENWUl9QSFlfUFJFX1JFRjJfRlNLX1BSRUFNQkxFX1JFRjJfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9QUkVfUkVGMl9GU0tfUFJFQU1CTEVfUkVGMih4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfUFJFX1JFRjJfRlNLX1BSRUFNQkxFX1JFRjJfU0hJRlQpKSAmIFhDVlJfUEhZX1BSRV9SRUYyX0ZTS19QUkVBTUJMRV9SRUYyX01BU0spCisKKy8qISBAbmFtZSBDRkcxIC0gUEhZIENPTkZJR1VSQVRJT04gUkVHSVNURVIgMSAqLworI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLX01BU0sgICAgICAgICAgICgweDJVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLX1NISUZUICAgICAgICAgICgxVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9BQV9QTEFZQkFDSyh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzFfQUFfUExBWUJBQ0tfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzFfQUFfUExBWUJBQ0tfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9BQV9PVVRQVVRfU0VMX01BU0sgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9BQV9PVVRQVVRfU0VMX1NISUZUICAgICAgICAoMlUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTCh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcxX0FBX09VVFBVVF9TRUxfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0ZTS19CSVRfSU5WRVJUX01BU0sgICAgICAgICgweDhVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0ZTS19CSVRfSU5WRVJUX1NISUZUICAgICAgICgzVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzFfRlNLX0JJVF9JTlZFUlRfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzFfRlNLX0JJVF9JTlZFUlRfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9SRlUwMF9NQVNLICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfUkZVMDBfU0hJRlQgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX1JGVTAwKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMV9SRlUwMF9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMV9SRlUwMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEVfTUFTSyAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9CU01fRU5fQkxFX1NISUZUICAgICAgICAgICAoNVUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfQlNNX0VOX0JMRSh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEVfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzFfQlNNX0VOX0JMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0RFTU9EX0NMS19NT0RFX01BU0sgICAgICAgICgweEMwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERV9TSElGVCAgICAgICAoNlUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfREVNT0RfQ0xLX01PREUoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcxX0RFTU9EX0NMS19NT0RFX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcxX0RFTU9EX0NMS19NT0RFX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfQ1RTX1RIUkVTSF9NQVNLICAgICAgICAgICAgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfQ1RTX1RIUkVTSF9TSElGVCAgICAgICAgICAgKDhVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMV9DVFNfVEhSRVNIX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0hfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVRfTUFTSyAgICAgICAoMHg3MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0ZTS19GVFNfVElNRU9VVF9TSElGVCAgICAgICgyMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfRlNLX0ZUU19USU1FT1VUKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcxX0ZTS19GVFNfVElNRU9VVF9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVRfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9SRlUwMV9NQVNLICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9SRlUwMV9TSElGVCAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX1JGVTAxKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMV9SRlUwMV9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMV9SRlUwMV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX1JGVTAyX01BU0sgICAgICAgICAgICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX1JGVTAyX1NISUZUICAgICAgICAgICAgICAgICgyNVUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfUkZVMDIoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcxX1JGVTAyX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcxX1JGVTAyX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfQkxFX05UV19BRFJfVEhSX01BU0sgICAgICAgKDB4NzAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0JMRV9OVFdfQURSX1RIUl9TSElGVCAgICAgICgyOFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfQkxFX05UV19BRFJfVEhSKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcxX0JMRV9OVFdfQURSX1RIUl9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMV9CTEVfTlRXX0FEUl9USFJfTUFTSykKKworLyohIEBuYW1lIENGRzIgLSBQSFkgQ09ORklHVVJBVElPTiBSRUdJU1RFUiAyICovCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHX01BU0sgICAgICAgKDB4RlUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEdfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDNfTUFTSyAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTAzX1NISUZUICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwMyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUkZVMDNfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUkZVMDNfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwNF9NQVNLICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDRfU0hJRlQgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTA0KHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMl9SRlUwNF9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMl9SRlUwNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTA1X01BU0sgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwNV9TSElGVCAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDUoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcyX1JGVTA1X1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1JGVTA1X01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDZfTUFTSyAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTA2X1NISUZUICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwNih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUkZVMDZfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUkZVMDZfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOX01BU0sgICAgICAgICAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU5fU0hJRlQgICAgICAgICg4VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTl9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDdfTUFTSyAgICAgICAgICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTA3X1NISUZUICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDcoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcyX1JGVTA3X1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1JGVTA3X01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDhfTUFTSyAgICAgICAgICAgICAgICAgKDB4MjAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTA4X1NISUZUICAgICAgICAgICAgICAgICgxN1UpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDgoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcyX1JGVTA4X1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1JGVTA4X01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDlfTUFTSyAgICAgICAgICAgICAgICAgKDB4NDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTA5X1NISUZUICAgICAgICAgICAgICAgICgxOFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDkoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcyX1JGVTA5X1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1JGVTA5X01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTBfTUFTSyAgICAgICAgICAgICAgICAgKDB4ODAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTEwX1NISUZUICAgICAgICAgICAgICAgICgxOVUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTAoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcyX1JGVTEwX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1JGVTEwX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTFfTUFTSyAgICAgICAgICAgICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxMV9TSElGVCAgICAgICAgICAgICAgICAoMjBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTExKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMl9SRlUxMV9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMl9SRlUxMV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTEyX01BU0sgICAgICAgICAgICAgICAgICgweDIwMDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTJfU0hJRlQgICAgICAgICAgICAgICAgKDIxVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxMih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUkZVMTJfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUkZVMTJfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxM19NQVNLICAgICAgICAgICAgICAgICAoMHg0MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTEzX1NISUZUICAgICAgICAgICAgICAgICgyMlUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTMoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcyX1JGVTEzX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1JGVTEzX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTRfTUFTSyAgICAgICAgICAgICAgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxNF9TSElGVCAgICAgICAgICAgICAgICAoMjNVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTE0KHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMl9SRlUxNF9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMl9SRlUxNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTE1X01BU0sgICAgICAgICAgICAgICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTE1X1NISUZUICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTUoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcyX1JGVTE1X1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1JGVTE1X01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTZfTUFTSyAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTZfU0hJRlQgICAgICAgICAgICAgICAgKDI1VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxNih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUkZVMTZfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUkZVMTZfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9QSFlfQ0xLX09OX01BU0sgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUEhZX0NMS19PTl9TSElGVCAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9QSFlfQ0xLX09OKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUEhZX0NMS19PTl9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMl9QSFlfQ0xLX09OX01BU0spCisKKy8qISBAbmFtZSBFTF9DRkcgLSBQSFkgRUFSTFkvTEFURSBDT05GSUdVUkFUSU9OIFJFR0lTVEVSICovCisjZGVmaW5lIFhDVlJfUEhZX0VMX0NGR19FTF9FTkFCTEVfTUFTSyAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFhDVlJfUEhZX0VMX0NGR19FTF9FTkFCTEVfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9FTF9DRkdfRUxfRU5BQkxFKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRV9TSElGVCkpICYgWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfRU5BQkxFX01BU0sgICAgICAgICgweDJVKQorI2RlZmluZSBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfRU5BQkxFX1NISUZUICAgICAgICgxVSkKKyNkZWZpbmUgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX0VOQUJMRSh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEVfU0hJRlQpKSAmIFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEVfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX1dJTl9TSVpFX01BU0sgICAgICAoMHg0VSkKKyNkZWZpbmUgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX1dJTl9TSVpFX1NISUZUICAgICAoMlUpCisjZGVmaW5lIFhDVlJfUEhZX0VMX0NGR19FTF9aQl9XSU5fU0laRSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfV0lOX1NJWkVfU0hJRlQpKSAmIFhDVlJfUEhZX0VMX0NGR19FTF9aQl9XSU5fU0laRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9FTF9DRkdfRUxfV0lOX1NJWkVfTUFTSyAgICAgICAgICgweEYwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0VMX0NGR19FTF9XSU5fU0laRV9TSElGVCAgICAgICAgKDhVKQorI2RlZmluZSBYQ1ZSX1BIWV9FTF9DRkdfRUxfV0lOX1NJWkUoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfRUxfQ0ZHX0VMX1dJTl9TSVpFX1NISUZUKSkgJiBYQ1ZSX1BIWV9FTF9DRkdfRUxfV0lOX1NJWkVfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfRUxfQ0ZHX0VMX0lOVEVSVkFMX01BU0sgICAgICAgICAoMHgzRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9FTF9DRkdfRUxfSU5URVJWQUxfU0hJRlQgICAgICAgICgxNlUpCisjZGVmaW5lIFhDVlJfUEhZX0VMX0NGR19FTF9JTlRFUlZBTCh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9FTF9DRkdfRUxfSU5URVJWQUxfU0hJRlQpKSAmIFhDVlJfUEhZX0VMX0NGR19FTF9JTlRFUlZBTF9NQVNLKQorCisvKiEgQG5hbWUgTlRXX0FEUl9CU00gLSBQSFkgTkVUV09SSyBBRERSRVNTIEZPUiBCU00gKi8KKyNkZWZpbmUgWENWUl9QSFlfTlRXX0FEUl9CU01fTlRXX0FEUl9CU01fTUFTSyAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFhDVlJfUEhZX05UV19BRFJfQlNNX05UV19BRFJfQlNNX1NISUZUICAgKDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9OVFdfQURSX0JTTV9OVFdfQURSX0JTTSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfTlRXX0FEUl9CU01fTlRXX0FEUl9CU01fU0hJRlQpKSAmIFhDVlJfUEhZX05UV19BRFJfQlNNX05UV19BRFJfQlNNX01BU0spCisKKy8qISBAbmFtZSBTVEFUVVMgLSBQSFkgU1RBVFVTIFJFR0lTVEVSICovCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19QUkVBTUJMRV9GT1VORF9NQVNLICAgICAgKDB4MVUpCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19QUkVBTUJMRV9GT1VORF9TSElGVCAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfUFJFQU1CTEVfRk9VTkQoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfU1RBVFVTX1BSRUFNQkxFX0ZPVU5EX1NISUZUKSkgJiBYQ1ZSX1BIWV9TVEFUVVNfUFJFQU1CTEVfRk9VTkRfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX0FBX1NGRF9NQVRDSEVEX01BU0sgICAgICAoMHgyVSkKKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX0FBX1NGRF9NQVRDSEVEX1NISUZUICAgICAoMVUpCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19BQV9TRkRfTUFUQ0hFRCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9TVEFUVVNfQUFfU0ZEX01BVENIRURfU0hJRlQpKSAmIFhDVlJfUEhZX1NUQVRVU19BQV9TRkRfTUFUQ0hFRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfQUFfTUFUQ0hFRF9NQVNLICAgICAgICAgICgweEYwVSkKKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX0FBX01BVENIRURfU0hJRlQgICAgICAgICAoNFUpCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19BQV9NQVRDSEVEKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9TVEFUVVNfQUFfTUFUQ0hFRF9TSElGVCkpICYgWENWUl9QSFlfU1RBVFVTX0FBX01BVENIRURfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX0hBTU1JTkdfRElTVEFOQ0VfTUFTSyAgICAoMHg3MDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfSEFNTUlOR19ESVNUQU5DRV9TSElGVCAgICg4VSkKKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX0hBTU1JTkdfRElTVEFOQ0UoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX1NUQVRVU19IQU1NSU5HX0RJU1RBTkNFX1NISUZUKSkgJiBYQ1ZSX1BIWV9TVEFUVVNfSEFNTUlOR19ESVNUQU5DRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfREFUQV9GSUZPX0RFUFRIX01BU0sgICAgICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfREFUQV9GSUZPX0RFUFRIX1NISUZUICAgICgxMlUpCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19EQVRBX0ZJRk9fREVQVEgoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9TVEFUVVNfREFUQV9GSUZPX0RFUFRIX1NISUZUKSkgJiBYQ1ZSX1BIWV9TVEFUVVNfREFUQV9GSUZPX0RFUFRIX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19DRk9fRVNUSU1BVEVfTUFTSyAgICAgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX0NGT19FU1RJTUFURV9TSElGVCAgICAgICAoMTZVKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfQ0ZPX0VTVElNQVRFKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfU1RBVFVTX0NGT19FU1RJTUFURV9TSElGVCkpICYgWENWUl9QSFlfU1RBVFVTX0NGT19FU1RJTUFURV9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgWENWUl9QSFlfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBYQ1ZSX1BIWSAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFhDVlJfUEhZIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBYQ1ZSX1BIWV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDVDNDAwdSkKKy8qKiBQZXJpcGhlcmFsIFhDVlJfUEhZIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBYQ1ZSX1BIWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoWENWUl9QSFlfVHlwZSAqKVhDVlJfUEhZX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgWENWUl9QSFkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBYQ1ZSX1BIWV9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgIHsgWENWUl9QSFlfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgWENWUl9QSFkgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFhDVlJfUEhZX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgeyBYQ1ZSX1BIWSB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgWENWUl9QSFlfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBYQ1ZSX1BLVF9SQU0gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1BLVF9SQU1fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgWENWUl9QS1RfUkFNIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBYQ1ZSX1BLVF9SQU0gLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQxNl90IFBBQ0tFVF9SQU1fMFs1NDRdOyAgICAgICAgICAgICAgICAgLyoqPCBTaGFyZWQgUGFja2V0IFJBTSBmb3IgbXVsdGlwbGUgTGluayBMYXllciB1c2FnZS4sIGFycmF5IG9mZnNldDogMHgwLCBhcnJheSBzdGVwOiAweDIgKi8KKyAgX19JTyB1aW50MTZfdCBQQUNLRVRfUkFNXzFbNTQ0XTsgICAgICAgICAgICAgICAgIC8qKjwgU2hhcmVkIFBhY2tldCBSQU0gZm9yIG11bHRpcGxlIExpbmsgTGF5ZXIgdXNhZ2UuLCBhcnJheSBvZmZzZXQ6IDB4NDQwLCBhcnJheSBzdGVwOiAweDIgKi8KK30gWENWUl9QS1RfUkFNX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfUEtUX1JBTSBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFhDVlJfUEtUX1JBTV9SZWdpc3Rlcl9NYXNrcyBYQ1ZSX1BLVF9SQU0gUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFBBQ0tFVF9SQU1fMCAtIFNoYXJlZCBQYWNrZXQgUkFNIGZvciBtdWx0aXBsZSBMaW5rIExheWVyIHVzYWdlLiAqLworI2RlZmluZSBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8wX0xTQllURV9NQVNLICAgICgweEZGVSkKKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMF9MU0JZVEVfU0hJRlQgICAoMFUpCisjZGVmaW5lIFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzBfTFNCWVRFKHgpICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8wX0xTQllURV9TSElGVCkpICYgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMF9MU0JZVEVfTUFTSykKKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMF9NU0JZVEVfTUFTSyAgICAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMF9NU0JZVEVfU0hJRlQgICAoOFUpCisjZGVmaW5lIFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzBfTVNCWVRFKHgpICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8wX01TQllURV9TSElGVCkpICYgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMF9NU0JZVEVfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzAgKi8KKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMF9DT1VOVCAgICAgICAgICAoNTQ0VSkKKworLyohIEBuYW1lIFBBQ0tFVF9SQU1fMSAtIFNoYXJlZCBQYWNrZXQgUkFNIGZvciBtdWx0aXBsZSBMaW5rIExheWVyIHVzYWdlLiAqLworI2RlZmluZSBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8xX0xTQllURV9NQVNLICAgICgweEZGVSkKKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMV9MU0JZVEVfU0hJRlQgICAoMFUpCisjZGVmaW5lIFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzFfTFNCWVRFKHgpICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8xX0xTQllURV9TSElGVCkpICYgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMV9MU0JZVEVfTUFTSykKKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMV9NU0JZVEVfTUFTSyAgICAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMV9NU0JZVEVfU0hJRlQgICAoOFUpCisjZGVmaW5lIFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzFfTVNCWVRFKHgpICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8xX01TQllURV9TSElGVCkpICYgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMV9NU0JZVEVfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzEgKi8KKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMV9DT1VOVCAgICAgICAgICAoNTQ0VSkKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfUEtUX1JBTV9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFhDVlJfUEtUX1JBTSAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFhDVlJfUEtUX1JBTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgWENWUl9QS1RfUkFNX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA1QzcwMHUpCisvKiogUGVyaXBoZXJhbCBYQ1ZSX1BLVF9SQU0gYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFhDVlJfUEtUX1JBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChYQ1ZSX1BLVF9SQU1fVHlwZSAqKVhDVlJfUEtUX1JBTV9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfUEtUX1JBTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFhDVlJfUEtUX1JBTV9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgeyBYQ1ZSX1BLVF9SQU1fQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgWENWUl9QS1RfUkFNIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBYQ1ZSX1BLVF9SQU1fQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgIHsgWENWUl9QS1RfUkFNIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1BLVF9SQU1fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBYQ1ZSX1BMTF9ESUcgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1BMTF9ESUdfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgWENWUl9QTExfRElHIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBYQ1ZSX1BMTF9ESUcgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IEhQTV9CVU1QOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgSFBNIEFuYWxvZyBCdW1wIENvbnRyb2wsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgTU9EX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBNb2R1bGF0aW9uIENvbnRyb2wsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgQ0hBTl9NQVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBDaGFubmVsIE1hcHBpbmcsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDMyX3QgTE9DS19ERVRFQ1Q7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBMb2NrIERldGVjdCBDb250cm9sLCBvZmZzZXQ6IDB4QyAqLworICBfX0lPIHVpbnQzMl90IEhQTV9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgSGlnaCBQb3J0IE1vZHVsYXRvciBDb250cm9sLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50MzJfdCBIUE1DQUxfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIEhpZ2ggUG9ydCBDYWxpYnJhdGlvbiBDb250cm9sLCBvZmZzZXQ6IDB4MTQgKi8KKyAgX19JTyB1aW50MzJfdCBIUE1fQ0FMMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIEhpZ2ggUG9ydCBDYWxpYnJhdGlvbiBSZXN1bHQgMSwgb2Zmc2V0OiAweDE4ICovCisgIF9fSU8gdWludDMyX3QgSFBNX0NBTDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBIaWdoIFBvcnQgQ2FsaWJyYXRpb24gUmVzdWx0IDIsIG9mZnNldDogMHgxQyAqLworICBfX0lPIHVpbnQzMl90IEhQTV9TRE1fUkVTOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgSGlnaCBQb3J0IFNpZ21hIERlbHRhIFJlc3VsdHMsIG9mZnNldDogMHgyMCAqLworICBfX0lPIHVpbnQzMl90IExQTV9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgTG93IFBvcnQgTW9kdWxhdG9yIENvbnRyb2wsIG9mZnNldDogMHgyNCAqLworICBfX0lPIHVpbnQzMl90IExQTV9TRE1fQ1RSTDE7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgTG93IFBvcnQgU2lnbWEgRGVsdGEgQ29udHJvbCAxLCBvZmZzZXQ6IDB4MjggKi8KKyAgX19JTyB1aW50MzJfdCBMUE1fU0RNX0NUUkwyOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIExvdyBQb3J0IFNpZ21hIERlbHRhIENvbnRyb2wgMiwgb2Zmc2V0OiAweDJDICovCisgIF9fSU8gdWludDMyX3QgTFBNX1NETV9DVFJMMzsgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBMb3cgUG9ydCBTaWdtYSBEZWx0YSBDb250cm9sIDMsIG9mZnNldDogMHgzMCAqLworICBfX0kgIHVpbnQzMl90IExQTV9TRE1fUkVTMTsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgTG93IFBvcnQgU2lnbWEgRGVsdGEgUmVzdWx0IDEsIG9mZnNldDogMHgzNCAqLworICBfX0kgIHVpbnQzMl90IExQTV9TRE1fUkVTMjsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgTG93IFBvcnQgU2lnbWEgRGVsdGEgUmVzdWx0IDIsIG9mZnNldDogMHgzOCAqLworICBfX0lPIHVpbnQzMl90IERFTEFZX01BVENIOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgRGVsYXkgTWF0Y2hpbmcsIG9mZnNldDogMHgzQyAqLworICBfX0lPIHVpbnQzMl90IENUVU5FX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgQ29hcnNlIFR1bmUgQ29udHJvbCwgb2Zmc2V0OiAweDQwICovCisgIF9fSSAgdWludDMyX3QgQ1RVTkVfQ05UNjsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBDb2Fyc2UgVHVuZSBDb3VudCA2LCBvZmZzZXQ6IDB4NDQgKi8KKyAgX19JICB1aW50MzJfdCBDVFVORV9DTlQ1XzQ7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIENvYXJzZSBUdW5lIENvdW50cyA1IGFuZCA0LCBvZmZzZXQ6IDB4NDggKi8KKyAgX19JICB1aW50MzJfdCBDVFVORV9DTlQzXzI7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIENvYXJzZSBUdW5lIENvdW50cyAzIGFuZCAyLCBvZmZzZXQ6IDB4NEMgKi8KKyAgX19JICB1aW50MzJfdCBDVFVORV9DTlQxXzA7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIENvYXJzZSBUdW5lIENvdW50cyAxIGFuZCAwLCBvZmZzZXQ6IDB4NTAgKi8KKyAgX19JICB1aW50MzJfdCBDVFVORV9SRVM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIENvYXJzZSBUdW5lIFJlc3VsdHMsIG9mZnNldDogMHg1NCAqLworfSBYQ1ZSX1BMTF9ESUdfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9QTExfRElHIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9QTExfRElHX1JlZ2lzdGVyX01hc2tzIFhDVlJfUExMX0RJRyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgSFBNX0JVTVAgLSBQTEwgSFBNIEFuYWxvZyBCdW1wIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9WQ01fVFhfTUFTSyAgICAoMHg3VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9WQ01fVFhfU0hJRlQgICAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQlVNUF9IUE1fVkNNX1RYKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX1ZDTV9UWF9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9WQ01fVFhfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9WQ01fQ0FMX01BU0sgICAoMHg3MFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQlVNUF9IUE1fVkNNX0NBTF9TSElGVCAgKDRVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX1ZDTV9DQUwoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9WQ01fQ0FMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX1ZDTV9DQUxfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9GREJfUkVTX1RYX01BU0sgKDB4MzAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9GREJfUkVTX1RYX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9GREJfUkVTX1RYKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fQlVNUF9IUE1fRkRCX1JFU19UWF9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9GREJfUkVTX1RYX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQlVNUF9IUE1fRkRCX1JFU19DQUxfTUFTSyAoMHgzMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9GREJfUkVTX0NBTF9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX0ZEQl9SRVNfQ0FMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9GREJfUkVTX0NBTF9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9GREJfUkVTX0NBTF9NQVNLKQorCisvKiEgQG5hbWUgTU9EX0NUUkwgLSBQTEwgTW9kdWxhdGlvbiBDb250cm9sICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9NT0RVTEFUSU9OX1dPUkRfTUFOVUFMX01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9NT0RVTEFUSU9OX1dPUkRfTUFOVUFMX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX01PRFVMQVRJT05fV09SRF9NQU5VQUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfTU9EVUxBVElPTl9XT1JEX01BTlVBTF9TSElGVCkpICYgWENWUl9QTExfRElHX01PRF9DVFJMX01PRFVMQVRJT05fV09SRF9NQU5VQUxfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX01PRF9ESVNBQkxFX01BU0sgICAoMHg4MDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX01PRF9ESVNBQkxFX1NISUZUICAoMTVVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfTU9EX0RJU0FCTEUoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX01PRF9DVFJMX01PRF9ESVNBQkxFX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfTU9EX0RJU0FCTEVfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9NT0RfTUFOVUFMX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9NT0RfTUFOVUFMX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fTU9EX01BTlVBTCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX01PRF9NQU5VQUxfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fTU9EX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX01PRF9ESVNBQkxFX01BU0sgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fTU9EX0RJU0FCTEVfU0hJRlQgKDI3VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9NT0RfRElTQUJMRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fTU9EX0RJU0FCTEVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fTU9EX0RJU0FCTEVfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9TRE1fT1VUX01BTlVBTF9NQVNLICgweDMwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9TRE1fT1VUX01BTlVBTF9TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX1NETV9PVVRfTUFOVUFMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9TRE1fT1VUX01BTlVBTF9TSElGVCkpICYgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9TRE1fT1VUX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX1NETV9PVVRfRElTQUJMRV9NQVNLICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9TRE1fT1VUX0RJU0FCTEVfU0hJRlQgKDMxVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9TRE1fT1VUX0RJU0FCTEUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX1NETV9PVVRfRElTQUJMRV9TSElGVCkpICYgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9TRE1fT1VUX0RJU0FCTEVfTUFTSykKKworLyohIEBuYW1lIENIQU5fTUFQIC0gUExMIENoYW5uZWwgTWFwcGluZyAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQ0hBTk5FTF9OVU1fTUFTSyAgICgweDdGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NIQU5fTUFQX0NIQU5ORUxfTlVNX1NISUZUICAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DSEFOX01BUF9DSEFOTkVMX05VTSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQ0hBTk5FTF9OVU1fU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DSEFOX01BUF9DSEFOTkVMX05VTV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk9DX01BU0sgICAgICAgICAgICgweDEwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DSEFOX01BUF9CT0NfU0hJRlQgICAgICAgICAgKDhVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk9DKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0NIQU5fTUFQX0JPQ19TSElGVCkpICYgWENWUl9QTExfRElHX0NIQU5fTUFQX0JPQ19NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk1SX01BU0sgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DSEFOX01BUF9CTVJfU0hJRlQgICAgICAgICAgKDlVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk1SKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0NIQU5fTUFQX0JNUl9TSElGVCkpICYgWENWUl9QTExfRElHX0NIQU5fTUFQX0JNUl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfWk9DX01BU0sgICAgICAgICAgICgweDQwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DSEFOX01BUF9aT0NfU0hJRlQgICAgICAgICAgKDEwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NIQU5fTUFQX1pPQyh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DSEFOX01BUF9aT0NfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DSEFOX01BUF9aT0NfTUFTSykKKworLyohIEBuYW1lIExPQ0tfREVURUNUIC0gUExMIExvY2sgRGV0ZWN0IENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NUX0ZBSUxfTUFTSyAgICAoMHgxVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NUX0ZBSUxfU0hJRlQgICAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9DVF9GQUlMKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RfRkFJTF9TSElGVCkpICYgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NUX0ZBSUxfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NURkZfTUFTSyAgICAgICAoMHgyVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NURkZfU0hJRlQgICAgICAoMVUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9DVEZGKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RGRl9TSElGVCkpICYgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NURkZfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NTX0ZBSUxfTUFTSyAgICAoMHg0VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NTX0ZBSUxfU0hJRlQgICAoMlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9DU19GQUlMKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1NfRkFJTF9TSElGVCkpICYgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NTX0ZBSUxfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NTRkZfTUFTSyAgICAgICAoMHg4VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NTRkZfU0hJRlQgICAgICAoM1UpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9DU0ZGKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1NGRl9TSElGVCkpICYgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NTRkZfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUX0ZBSUxfTUFTSyAgICAoMHgxMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVF9GQUlMX1NISUZUICAgKDRVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRfRkFJTCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUX0ZBSUxfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVF9GQUlMX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZGX01BU0sgICAgICAgKDB4MjBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRGRl9TSElGVCAgICAgICg1VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURkYoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZGX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRGRl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfVEFGRl9NQVNLICAgICAgICgweDgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX1RBRkZfU0hJRlQgICAgICAoN1UpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9UQUZGKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfVEFGRl9TSElGVCkpICYgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX1RBRkZfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NUVU5FX0xERl9MRVZfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RVTkVfTERGX0xFVl9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9DVFVORV9MREZfTEVWKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NUVU5FX0xERl9MRVZfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9DVFVORV9MREZfTEVWX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZfUlhfVEhSU0hfTUFTSyAoMHgzRjAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZfUlhfVEhSU0hfU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURl9SWF9USFJTSCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZfUlhfVEhSU0hfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZfUlhfVEhSU0hfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19SWF9NQVNLICAgICAoMHg4MDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVFdfUlhfU0hJRlQgICAgKDE5VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19SWCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVFdfUlhfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVFdfUlhfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURl9UWF9USFJTSF9NQVNLICgweDNGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRGX1RYX1RIUlNIX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZfVFhfVEhSU0goeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRGX1RYX1RIUlNIX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRGX1RYX1RIUlNIX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVFdfVFhfTUFTSyAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVFdfVFhfU0hJRlQgICAgKDI3VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19UWCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVFdfVFhfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVFdfVFhfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZSRVFfQ09VTlRfR09fTUFTSyAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX0dPX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX0dPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZSRVFfQ09VTlRfR09fU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX0dPX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX0ZJTklTSEVEX01BU0sgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlJFUV9DT1VOVF9GSU5JU0hFRF9TSElGVCAoMjlVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlJFUV9DT1VOVF9GSU5JU0hFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX0ZJTklTSEVEX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlJFUV9DT1VOVF9GSU5JU0hFRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlJFUV9DT1VOVF9USU1FX01BU0sgKDB4QzAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlJFUV9DT1VOVF9USU1FX1NISUZUICgzMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX1RJTUUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlJFUV9DT1VOVF9USU1FX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlJFUV9DT1VOVF9USU1FX01BU0spCisKKy8qISBAbmFtZSBIUE1fQ1RSTCAtIFBMTCBIaWdoIFBvcnQgTW9kdWxhdG9yIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fSU5fTUFOVUFMX01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fSU5fTUFOVUFMX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fSU5fTUFOVUFMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fSU5fTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9JTl9NQU5VQUxfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQRkZfTUFTSyAgICAgICAgICAoMHgyMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQRkZfU0hJRlQgICAgICAgICAoMTNVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBGRih4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQRkZfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUEZGX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fU0RNX09VVF9JTlZFUlRfTUFTSyAoMHg0MDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fT1VUX0lOVkVSVF9TSElGVCAoMTRVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9PVVRfSU5WRVJUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fT1VUX0lOVkVSVF9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fT1VUX0lOVkVSVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9JTl9ESVNBQkxFX01BU0sgKDB4ODAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fU0RNX0lOX0RJU0FCTEVfU0hJRlQgKDE1VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fSU5fRElTQUJMRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fU0RNX0lOX0RJU0FCTEVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fU0RNX0lOX0RJU0FCTEVfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9MRlNSX1NJWkVfTUFTSyAoMHg3MDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fTEZTUl9TSVpFX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fTEZTUl9TSVpFKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0xGU1JfU0laRV9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9MRlNSX1NJWkVfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9EVEhfU0NMX01BU0sgICAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0RUSF9TQ0xfU0hJRlQgICgyMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fRFRIX1NDTCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0RUSF9TQ0xfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fRFRIX1NDTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0RUSF9FTl9NQVNLICAgICgweDgwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fRFRIX0VOX1NISUZUICAgKDIzVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9EVEhfRU4oeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fRFRIX0VOX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0RUSF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0lOVEVHRVJfU0NBTEVfTUFTSyAoMHgzMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9JTlRFR0VSX1NDQUxFX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fSU5URUdFUl9TQ0FMRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fSU5URUdFUl9TQ0FMRV9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9JTlRFR0VSX1NDQUxFX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fSU5URUdFUl9JTlZFUlRfTUFTSyAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9JTlRFR0VSX0lOVkVSVF9TSElGVCAoMjdVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0lOVEVHRVJfSU5WRVJUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9JTlRFR0VSX0lOVkVSVF9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9JTlRFR0VSX0lOVkVSVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0NBTF9JTlZFUlRfTUFTSyAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fQ0FMX0lOVkVSVF9TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0NBTF9JTlZFUlQoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9DQUxfSU5WRVJUX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0NBTF9JTlZFUlRfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9NT0RfSU5fSU5WRVJUX01BU0sgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX01PRF9JTl9JTlZFUlRfU0hJRlQgKDMxVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9NT0RfSU5fSU5WRVJUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9NT0RfSU5fSU5WRVJUX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX01PRF9JTl9JTlZFUlRfTUFTSykKKworLyohIEBuYW1lIEhQTUNBTF9DVFJMIC0gUExMIEhpZ2ggUG9ydCBDYWxpYnJhdGlvbiBDb250cm9sICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0ZBQ1RPUl9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9GQUNUT1JfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9GQUNUT1IoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9GQUNUT1JfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0ZBQ1RPUl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9OT1RfQlVNUEVEX01BU0sgKDB4MjAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX05PVF9CVU1QRURfU0hJRlQgKDEzVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfTk9UX0JVTVBFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX05PVF9CVU1QRURfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX05PVF9CVU1QRURfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfQ09VTlRfU0NBTEVfTUFTSyAoMHg0MDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfQ09VTlRfU0NBTEVfU0hJRlQgKDE0VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfQ09VTlRfU0NBTEUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9DT1VOVF9TQ0FMRV9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfQ09VTlRfU0NBTEVfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQX0NBTF9ESVNBQkxFX01BU0sgKDB4ODAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUF9DQUxfRElTQUJMRV9TSElGVCAoMTVVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBfQ0FMX0RJU0FCTEUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBfQ0FMX0RJU0FCTEVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUF9DQUxfRElTQUJMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9GQUNUT1JfTUFOVUFMX01BU0sgKDB4MUZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9GQUNUT1JfTUFOVUFMX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0ZBQ1RPUl9NQU5VQUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9GQUNUT1JfTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9GQUNUT1JfTUFOVUFMX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0FSUkFZX1NJWkVfTUFTSyAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0FSUkFZX1NJWkVfU0hJRlQgKDMwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfQVJSQVlfU0laRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0FSUkFZX1NJWkVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0FSUkFZX1NJWkVfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfVElNRV9NQVNLICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfVElNRV9TSElGVCAoMzFVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9USU1FKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfVElNRV9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfVElNRV9NQVNLKQorCisvKiEgQG5hbWUgSFBNX0NBTDEgLSBQTEwgSGlnaCBQb3J0IENhbGlicmF0aW9uIFJlc3VsdCAxICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ0FMMV9IUE1fQ09VTlRfMV9NQVNLICAgKDB4N0ZGRkZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfSFBNX0NPVU5UXzFfU0hJRlQgICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwxX0hQTV9DT1VOVF8xKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fQ0FMMV9IUE1fQ09VTlRfMV9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9DQUwxX0hQTV9DT1VOVF8xX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ0FMMV9DU19XVF9NQVNLICAgICAgICAgKDB4NzAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwxX0NTX1dUX1NISUZUICAgICAgICAoMjBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfV1QoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DQUwxX0NTX1dUX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfV1RfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwxX0NTX0ZXX01BU0sgICAgICAgICAoMHg3MDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwxX0NTX0ZXX1NISUZUICAgICAgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfRlcoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DQUwxX0NTX0ZXX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfRldfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwxX0NTX0ZDTlRfTUFTSyAgICAgICAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ0FMMV9DU19GQ05UX1NISUZUICAgICAgKDI4VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwxX0NTX0ZDTlQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fQ0FMMV9DU19GQ05UX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfRkNOVF9NQVNLKQorCisvKiEgQG5hbWUgSFBNX0NBTDIgLSBQTEwgSGlnaCBQb3J0IENhbGlicmF0aW9uIFJlc3VsdCAyICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ0FMMl9IUE1fQ09VTlRfMl9NQVNLICAgKDB4N0ZGRkZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDJfSFBNX0NPVU5UXzJfU0hJRlQgICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwyX0hQTV9DT1VOVF8yKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fQ0FMMl9IUE1fQ09VTlRfMl9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9DQUwyX0hQTV9DT1VOVF8yX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ0FMMl9DU19SQ19NQVNLICAgICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwyX0NTX1JDX1NISUZUICAgICAgICAoMjBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDJfQ1NfUkMoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DQUwyX0NTX1JDX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDJfQ1NfUkNfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwyX0NTX0ZUX01BU0sgICAgICAgICAoMHgxRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ0FMMl9DU19GVF9TSElGVCAgICAgICAgKDI0VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwyX0NTX0ZUKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fQ0FMMl9DU19GVF9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9DQUwyX0NTX0ZUX01BU0spCisKKy8qISBAbmFtZSBIUE1fU0RNX1JFUyAtIFBMTCBIaWdoIFBvcnQgU2lnbWEgRGVsdGEgUmVzdWx0cyAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX05VTV9TRUxFQ1RFRF9NQVNLICgweDNGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fU0RNX1JFU19IUE1fTlVNX1NFTEVDVEVEX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9TRE1fUkVTX0hQTV9OVU1fU0VMRUNURUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX05VTV9TRUxFQ1RFRF9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9TRE1fUkVTX0hQTV9OVU1fU0VMRUNURURfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9TRE1fUkVTX0hQTV9ERU5PTV9NQVNLICAoMHgzRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9TRE1fUkVTX0hQTV9ERU5PTV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0RFTk9NKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9TRE1fUkVTX0hQTV9ERU5PTV9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9TRE1fUkVTX0hQTV9ERU5PTV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0NPVU5UX0FESlVTVF9NQVNLICgweEYwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9TRE1fUkVTX0hQTV9DT1VOVF9BREpVU1RfU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9TRE1fUkVTX0hQTV9DT1VOVF9BREpVU1QoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0NPVU5UX0FESlVTVF9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9TRE1fUkVTX0hQTV9DT1VOVF9BREpVU1RfTUFTSykKKworLyohIEBuYW1lIExQTV9DVFJMIC0gUExMIExvdyBQb3J0IE1vZHVsYXRvciBDb250cm9sICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9QTExfTERfTUFOVUFMX01BU0sgKDB4M0ZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfUExMX0xEX01BTlVBTF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9QTExfTERfTUFOVUFMKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfUExMX0xEX01BTlVBTF9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9DVFJMX1BMTF9MRF9NQU5VQUxfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX1BMTF9MRF9ESVNBQkxFX01BU0sgKDB4ODAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX1BMTF9MRF9ESVNBQkxFX1NISUZUICgxMVUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9QTExfTERfRElTQUJMRSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfUExMX0xEX0RJU0FCTEVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9QTExfTERfRElTQUJMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBGRl9NQVNLICAgICAgICAgICgweDIwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBGRl9TSElGVCAgICAgICAgICgxM1UpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUEZGKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBGRl9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQRkZfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TRE1fSU5WX01BU0sgICAoMHg0MDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TRE1fSU5WX1NISUZUICAoMTRVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NETV9JTlYoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TRE1fSU5WX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NETV9JTlZfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9ESVNBQkxFX01BU0sgICAoMHg4MDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9ESVNBQkxFX1NISUZUICAoMTVVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RJU0FCTEUoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9ESVNBQkxFX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RJU0FCTEVfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EVEhfU0NMX01BU0sgICAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRFRIX1NDTF9TSElGVCAgKDE2VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EVEhfU0NMKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRFRIX1NDTF9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EVEhfU0NMX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRF9DVFJMX01BU0sgICAgKDB4NDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EX0NUUkxfU0hJRlQgICAoMjJVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RfQ1RSTCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EX0NUUkxfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRF9DVFJMX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRF9PVlJEX01BU0sgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EX09WUkRfU0hJRlQgICAoMjNVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RfT1ZSRCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EX09WUkRfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRF9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fU0NBTEVfTUFTSyAgICAgKDB4RjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fU0NBTEVfU0hJRlQgICAgKDI0VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TQ0FMRSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fU0NBTEVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fU0NBTEVfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TRE1fVVNFX05FR19NQVNLICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TRE1fVVNFX05FR19TSElGVCAoMzFVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NETV9VU0VfTkVHKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TRE1fVVNFX05FR19TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TRE1fVVNFX05FR19NQVNLKQorCisvKiEgQG5hbWUgTFBNX1NETV9DVFJMMSAtIFBMTCBMb3cgUG9ydCBTaWdtYSBEZWx0YSBDb250cm9sIDEgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEdfU0VMRUNURURfTUFTSyAoMHg3RlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHX1NFTEVDVEVEX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEdfU0VMRUNURUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19TRUxFQ1RFRF9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEdfU0VMRUNURURfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfSFBNX0FSUkFZX0JJQVNfTUFTSyAoMHg3RjAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfSFBNX0FSUkFZX0JJQVNfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9IUE1fQVJSQVlfQklBUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0hQTV9BUlJBWV9CSUFTX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9IUE1fQVJSQVlfQklBU19NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19NQVNLICgweDdGMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEdfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfU0RNX01BUF9ESVNBQkxFX01BU0sgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9TRE1fTUFQX0RJU0FCTEVfU0hJRlQgKDMxVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfU0RNX01BUF9ESVNBQkxFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfU0RNX01BUF9ESVNBQkxFX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9TRE1fTUFQX0RJU0FCTEVfTUFTSykKKworLyohIEBuYW1lIExQTV9TRE1fQ1RSTDIgLSBQTEwgTG93IFBvcnQgU2lnbWEgRGVsdGEgQ29udHJvbCAyICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwyX0xQTV9OVU1fTUFTSyAgKDB4RkZGRkZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwyX0xQTV9OVU1fU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMl9MUE1fTlVNKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDJfTFBNX05VTV9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDJfTFBNX05VTV9NQVNLKQorCisvKiEgQG5hbWUgTFBNX1NETV9DVFJMMyAtIFBMTCBMb3cgUG9ydCBTaWdtYSBEZWx0YSBDb250cm9sIDMgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDNfTFBNX0RFTk9NX01BU0sgKDB4RkZGRkZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwzX0xQTV9ERU5PTV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwzX0xQTV9ERU5PTSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMM19MUE1fREVOT01fU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwzX0xQTV9ERU5PTV9NQVNLKQorCisvKiEgQG5hbWUgTFBNX1NETV9SRVMxIC0gUExMIExvdyBQb3J0IFNpZ21hIERlbHRhIFJlc3VsdCAxICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX1JFUzFfTFBNX05VTV9TRUxFQ1RFRF9NQVNLICgweEZGRkZGRkZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9SRVMxX0xQTV9OVU1fU0VMRUNURURfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9SRVMxX0xQTV9OVU1fU0VMRUNURUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9SRVMxX0xQTV9OVU1fU0VMRUNURURfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MUE1fU0RNX1JFUzFfTFBNX05VTV9TRUxFQ1RFRF9NQVNLKQorCisvKiEgQG5hbWUgTFBNX1NETV9SRVMyIC0gUExMIExvdyBQb3J0IFNpZ21hIERlbHRhIFJlc3VsdCAyICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX1JFUzJfTFBNX0RFTk9NX1NFTEVDVEVEX01BU0sgKDB4RkZGRkZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX1JFUzJfTFBNX0RFTk9NX1NFTEVDVEVEX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fUkVTMl9MUE1fREVOT01fU0VMRUNURUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9SRVMyX0xQTV9ERU5PTV9TRUxFQ1RFRF9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9TRE1fUkVTMl9MUE1fREVOT01fU0VMRUNURURfTUFTSykKKworLyohIEBuYW1lIERFTEFZX01BVENIIC0gUExMIERlbGF5IE1hdGNoaW5nICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19ERUxBWV9NQVRDSF9MUE1fU0RNX0RFTEFZX01BU0sgKDB4RlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19ERUxBWV9NQVRDSF9MUE1fU0RNX0RFTEFZX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0xQTV9TRE1fREVMQVkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfREVMQVlfTUFUQ0hfTFBNX1NETV9ERUxBWV9TSElGVCkpICYgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0xQTV9TRE1fREVMQVlfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0hQTV9TRE1fREVMQVlfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfREVMQVlfTUFUQ0hfSFBNX1NETV9ERUxBWV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19ERUxBWV9NQVRDSF9IUE1fU0RNX0RFTEFZKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0hQTV9TRE1fREVMQVlfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19ERUxBWV9NQVRDSF9IUE1fU0RNX0RFTEFZX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19ERUxBWV9NQVRDSF9IUE1fSU5URUdFUl9ERUxBWV9NQVNLICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0hQTV9JTlRFR0VSX0RFTEFZX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19ERUxBWV9NQVRDSF9IUE1fSU5URUdFUl9ERUxBWSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19ERUxBWV9NQVRDSF9IUE1fSU5URUdFUl9ERUxBWV9TSElGVCkpICYgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0hQTV9JTlRFR0VSX0RFTEFZX01BU0spCisKKy8qISBAbmFtZSBDVFVORV9DVFJMIC0gUExMIENvYXJzZSBUdW5lIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfVEFSR0VUX01BTlVBTF9NQVNLICgweEZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX1RBUkdFVF9NQU5VQUxfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9UQVJHRVRfTUFOVUFMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfVEFSR0VUX01BTlVBTF9TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfVEFSR0VUX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9UQVJHRVRfRElTQUJMRV9NQVNLICgweDgwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9UQVJHRVRfRElTQUJMRV9TSElGVCAoMTVVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9UQVJHRVRfRElTQUJMRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX1RBUkdFVF9ESVNBQkxFX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9UQVJHRVRfRElTQUJMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9BREpVU1RfTUFTSyAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX0FESlVTVF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9BREpVU1QoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfQURKVVNUX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9BREpVU1RfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfTUFOVUFMX01BU0sgKDB4N0YwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9NQU5VQUxfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfTUFOVUFMKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX01BTlVBTF9TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfTUFOVUFMX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX0RJU0FCTEVfTUFTSyAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX0RJU0FCTEVfU0hJRlQgKDMxVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfRElTQUJMRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX0RJU0FCTEVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX0RJU0FCTEVfTUFTSykKKworLyohIEBuYW1lIENUVU5FX0NOVDYgLSBQTEwgQ29hcnNlIFR1bmUgQ291bnQgNiAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UNl9DVFVORV9DT1VOVF82X01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQ2X0NUVU5FX0NPVU5UXzZfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UNl9DVFVORV9DT1VOVF82KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0NUVU5FX0NOVDZfQ1RVTkVfQ09VTlRfNl9TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX0NOVDZfQ1RVTkVfQ09VTlRfNl9NQVNLKQorCisvKiEgQG5hbWUgQ1RVTkVfQ05UNV80IC0gUExMIENvYXJzZSBUdW5lIENvdW50cyA1IGFuZCA0ICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQ1XzRfQ1RVTkVfQ09VTlRfNF9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UNV80X0NUVU5FX0NPVU5UXzRfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UNV80X0NUVU5FX0NPVU5UXzQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UNV80X0NUVU5FX0NPVU5UXzRfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DVFVORV9DTlQ1XzRfQ1RVTkVfQ09VTlRfNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UNV80X0NUVU5FX0NPVU5UXzVfTUFTSyAoMHgxRkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQ1XzRfQ1RVTkVfQ09VTlRfNV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UNV80X0NUVU5FX0NPVU5UXzUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UNV80X0NUVU5FX0NPVU5UXzVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DVFVORV9DTlQ1XzRfQ1RVTkVfQ09VTlRfNV9NQVNLKQorCisvKiEgQG5hbWUgQ1RVTkVfQ05UM18yIC0gUExMIENvYXJzZSBUdW5lIENvdW50cyAzIGFuZCAyICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQzXzJfQ1RVTkVfQ09VTlRfMl9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UM18yX0NUVU5FX0NPVU5UXzJfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UM18yX0NUVU5FX0NPVU5UXzIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UM18yX0NUVU5FX0NPVU5UXzJfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DVFVORV9DTlQzXzJfQ1RVTkVfQ09VTlRfMl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UM18yX0NUVU5FX0NPVU5UXzNfTUFTSyAoMHgxRkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQzXzJfQ1RVTkVfQ09VTlRfM19TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UM18yX0NUVU5FX0NPVU5UXzMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UM18yX0NUVU5FX0NPVU5UXzNfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DVFVORV9DTlQzXzJfQ1RVTkVfQ09VTlRfM19NQVNLKQorCisvKiEgQG5hbWUgQ1RVTkVfQ05UMV8wIC0gUExMIENvYXJzZSBUdW5lIENvdW50cyAxIGFuZCAwICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQxXzBfQ1RVTkVfQ09VTlRfMF9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UMV8wX0NUVU5FX0NPVU5UXzBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UMV8wX0NUVU5FX0NPVU5UXzAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UMV8wX0NUVU5FX0NPVU5UXzBfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DVFVORV9DTlQxXzBfQ1RVTkVfQ09VTlRfMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UMV8wX0NUVU5FX0NPVU5UXzFfTUFTSyAoMHgxRkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQxXzBfQ1RVTkVfQ09VTlRfMV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UMV8wX0NUVU5FX0NPVU5UXzEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UMV8wX0NUVU5FX0NPVU5UXzFfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DVFVORV9DTlQxXzBfQ1RVTkVfQ09VTlRfMV9NQVNLKQorCisvKiEgQG5hbWUgQ1RVTkVfUkVTIC0gUExMIENvYXJzZSBUdW5lIFJlc3VsdHMgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX1JFU19DVFVORV9TRUxFQ1RFRF9NQVNLICgweDdGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX1JFU19DVFVORV9TRUxFQ1RFRF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9SRVNfQ1RVTkVfU0VMRUNURUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfUkVTX0NUVU5FX1NFTEVDVEVEX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfQ1RVTkVfUkVTX0NUVU5FX1NFTEVDVEVEX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9SRVNfQ1RVTkVfQkVTVF9ESUZGX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9SRVNfQ1RVTkVfQkVTVF9ESUZGX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX1JFU19DVFVORV9CRVNUX0RJRkYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfUkVTX0NUVU5FX0JFU1RfRElGRl9TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX1JFU19DVFVORV9CRVNUX0RJRkZfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX1JFU19DVFVORV9GUkVRX1NFTEVDVEVEX01BU0sgKDB4RkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9SRVNfQ1RVTkVfRlJFUV9TRUxFQ1RFRF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfUkVTX0NUVU5FX0ZSRVFfU0VMRUNURUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfUkVTX0NUVU5FX0ZSRVFfU0VMRUNURURfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DVFVORV9SRVNfQ1RVTkVfRlJFUV9TRUxFQ1RFRF9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgWENWUl9QTExfRElHX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogWENWUl9QTExfRElHIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgWENWUl9QTExfRElHIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDVDMjI0dSkKKy8qKiBQZXJpcGhlcmFsIFhDVlJfUExMX0RJRyBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFhDVlJfUExMX0RJR19UeXBlICopWENWUl9QTExfRElHX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgWENWUl9QTExfRElHIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICB7IFhDVlJfUExMX0RJR19CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1BMTF9ESUcgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgeyBYQ1ZSX1BMTF9ESUcgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfUExMX0RJR19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfUlhfRElHIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9SWF9ESUdfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgWENWUl9SWF9ESUcgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFhDVlJfUlhfRElHIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBSWF9ESUdfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlggRGlnaXRhbCBDb250cm9sLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IEFHQ19DVFJMXzA7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBR0MgQ29udHJvbCAwLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IEFHQ19DVFJMXzE7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBR0MgQ29udHJvbCAxLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQzMl90IEFHQ19DVFJMXzI7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBR0MgQ29udHJvbCAyLCBvZmZzZXQ6IDB4QyAqLworICBfX0lPIHVpbnQzMl90IEFHQ19DVFJMXzM7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBR0MgQ29udHJvbCAzLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JICB1aW50MzJfdCBBR0NfU1RBVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQUdDIFN0YXR1cywgb2Zmc2V0OiAweDE0ICovCisgIF9fSU8gdWludDMyX3QgUlNTSV9DVFJMXzA7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJTU0kgQ29udHJvbCAwLCBvZmZzZXQ6IDB4MTggKi8KKyAgX19JICB1aW50MzJfdCBSU1NJX0NUUkxfMTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlNTSSBDb250cm9sIDEsIG9mZnNldDogMHgxQyAqLworICBfX0kgIHVpbnQzMl90IFJTU0lfREZUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSU1NJIERGVCwgb2Zmc2V0OiAweDIwICovCisgIF9fSU8gdWludDMyX3QgRENPQ19DVFJMXzA7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgQ29udHJvbCAwLCBvZmZzZXQ6IDB4MjQgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX0NUUkxfMTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBDb250cm9sIDEsIG9mZnNldDogMHgyOCAqLworICBfX0lPIHVpbnQzMl90IERDT0NfREFDX0lOSVQ7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIERBQyBJbml0aWFsaXphdGlvbiwgb2Zmc2V0OiAweDJDICovCisgIF9fSU8gdWludDMyX3QgRENPQ19ESUdfTUFOOyAgICAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgRGlnaXRhbCBDb3JyZWN0aW9uIE1hbnVhbCBPdmVycmlkZSwgb2Zmc2V0OiAweDMwICovCisgIF9fSU8gdWludDMyX3QgRENPQ19DQUxfR0FJTjsgICAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgQ2FsaWJyYXRpb24gR2Fpbiwgb2Zmc2V0OiAweDM0ICovCisgIF9fSSAgdWludDMyX3QgRENPQ19TVEFUOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgU3RhdHVzLCBvZmZzZXQ6IDB4MzggKi8KKyAgX19JICB1aW50MzJfdCBEQ09DX0RDX0VTVDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBEQyBFc3RpbWF0ZSwgb2Zmc2V0OiAweDNDICovCisgIF9fSU8gdWludDMyX3QgRENPQ19DQUxfUkNQOyAgICAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgQ2FsaWJyYXRpb24gUmVjaXByb2NhbHMsIG9mZnNldDogMHg0MCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFs0XTsKKyAgX19JTyB1aW50MzJfdCBJUU1DX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSVFNQyBDb250cm9sLCBvZmZzZXQ6IDB4NDggKi8KKyAgX19JTyB1aW50MzJfdCBJUU1DX0NBTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSVFNQyBDYWxpYnJhdGlvbiwgb2Zmc2V0OiAweDRDICovCisgIF9fSU8gdWludDMyX3QgTE5BX0dBSU5fVkFMXzNfMDsgICAgICAgICAgICAgICAgICAvKio8IExOQV9HQUlOIFN0ZXAgVmFsdWVzIDMuLjAsIG9mZnNldDogMHg1MCAqLworICBfX0lPIHVpbnQzMl90IExOQV9HQUlOX1ZBTF83XzQ7ICAgICAgICAgICAgICAgICAgLyoqPCBMTkFfR0FJTiBTdGVwIFZhbHVlcyA3Li40LCBvZmZzZXQ6IDB4NTQgKi8KKyAgX19JTyB1aW50MzJfdCBMTkFfR0FJTl9WQUxfODsgICAgICAgICAgICAgICAgICAgIC8qKjwgTE5BX0dBSU4gU3RlcCBWYWx1ZXMgOCwgb2Zmc2V0OiAweDU4ICovCisgIF9fSU8gdWludDMyX3QgQkJBX1JFU19UVU5FX1ZBTF83XzA7ICAgICAgICAgICAgICAvKio8IEJCQSBSZXNpc3RvciBUdW5lIFZhbHVlcyA3Li4wLCBvZmZzZXQ6IDB4NUMgKi8KKyAgX19JTyB1aW50MzJfdCBCQkFfUkVTX1RVTkVfVkFMXzEwXzg7ICAgICAgICAgICAgIC8qKjwgQkJBIFJlc2lzdG9yIFR1bmUgVmFsdWVzIDEwLi44LCBvZmZzZXQ6IDB4NjAgKi8KKyAgX19JTyB1aW50MzJfdCBMTkFfR0FJTl9MSU5fVkFMXzJfMDsgICAgICAgICAgICAgIC8qKjwgTE5BIExpbmVhciBHYWluIFZhbHVlcyAyLi4wLCBvZmZzZXQ6IDB4NjQgKi8KKyAgX19JTyB1aW50MzJfdCBMTkFfR0FJTl9MSU5fVkFMXzVfMzsgICAgICAgICAgICAgIC8qKjwgTE5BIExpbmVhciBHYWluIFZhbHVlcyA1Li4zLCBvZmZzZXQ6IDB4NjggKi8KKyAgX19JTyB1aW50MzJfdCBMTkFfR0FJTl9MSU5fVkFMXzhfNjsgICAgICAgICAgICAgIC8qKjwgTE5BIExpbmVhciBHYWluIFZhbHVlcyA4Li42LCBvZmZzZXQ6IDB4NkMgKi8KKyAgX19JTyB1aW50MzJfdCBMTkFfR0FJTl9MSU5fVkFMXzk7ICAgICAgICAgICAgICAgIC8qKjwgTE5BIExpbmVhciBHYWluIFZhbHVlcyA5LCBvZmZzZXQ6IDB4NzAgKi8KKyAgX19JTyB1aW50MzJfdCBCQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzA7ICAgICAgICAgIC8qKjwgQkJBIFJlc2lzdG9yIFR1bmUgVmFsdWVzIDMuLjAsIG9mZnNldDogMHg3NCAqLworICBfX0lPIHVpbnQzMl90IEJCQV9SRVNfVFVORV9MSU5fVkFMXzdfNDsgICAgICAgICAgLyoqPCBCQkEgUmVzaXN0b3IgVHVuZSBWYWx1ZXMgNy4uNCwgb2Zmc2V0OiAweDc4ICovCisgIF9fSU8gdWludDMyX3QgQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfODsgICAgICAgICAvKio8IEJCQSBSZXNpc3RvciBUdW5lIFZhbHVlcyAxMC4uOCwgb2Zmc2V0OiAweDdDICovCisgIF9fSU8gdWludDMyX3QgQUdDX0dBSU5fVEJMXzAzXzAwOyAgICAgICAgICAgICAgICAvKio8IEFHQyBHYWluIFRhYmxlcyBTdGVwIDAzLi4wMCwgb2Zmc2V0OiAweDgwICovCisgIF9fSU8gdWludDMyX3QgQUdDX0dBSU5fVEJMXzA3XzA0OyAgICAgICAgICAgICAgICAvKio8IEFHQyBHYWluIFRhYmxlcyBTdGVwIDA3Li4wNCwgb2Zmc2V0OiAweDg0ICovCisgIF9fSU8gdWludDMyX3QgQUdDX0dBSU5fVEJMXzExXzA4OyAgICAgICAgICAgICAgICAvKio8IEFHQyBHYWluIFRhYmxlcyBTdGVwIDExLi4wOCwgb2Zmc2V0OiAweDg4ICovCisgIF9fSU8gdWludDMyX3QgQUdDX0dBSU5fVEJMXzE1XzEyOyAgICAgICAgICAgICAgICAvKio8IEFHQyBHYWluIFRhYmxlcyBTdGVwIDE1Li4xMiwgb2Zmc2V0OiAweDhDICovCisgIF9fSU8gdWludDMyX3QgQUdDX0dBSU5fVEJMXzE5XzE2OyAgICAgICAgICAgICAgICAvKio8IEFHQyBHYWluIFRhYmxlcyBTdGVwIDE5Li4xNiwgb2Zmc2V0OiAweDkwICovCisgIF9fSU8gdWludDMyX3QgQUdDX0dBSU5fVEJMXzIzXzIwOyAgICAgICAgICAgICAgICAvKio8IEFHQyBHYWluIFRhYmxlcyBTdGVwIDIzLi4yMCwgb2Zmc2V0OiAweDk0ICovCisgIF9fSU8gdWludDMyX3QgQUdDX0dBSU5fVEJMXzI2XzI0OyAgICAgICAgICAgICAgICAvKio8IEFHQyBHYWluIFRhYmxlcyBTdGVwIDI2Li4yNCwgb2Zmc2V0OiAweDk4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8xWzRdOworICBfX0lPIHVpbnQzMl90IERDT0NfT0ZGU0VUWzI3XTsgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIE9mZnNldCwgYXJyYXkgb2Zmc2V0OiAweEEwLCBhcnJheSBzdGVwOiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX0JCQV9TVEVQOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBCQkEgREFDIFN0ZXAsIG9mZnNldDogMHgxMEMgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX1RaQV9TVEVQXzA7ICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBUWkEgREFDIFN0ZXAgMCwgb2Zmc2V0OiAweDExMCAqLworICBfX0lPIHVpbnQzMl90IERDT0NfVFpBX1NURVBfMTsgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIFRaQSBEQUMgU3RlcCAxLCBvZmZzZXQ6IDB4MTE0ICovCisgIF9fSU8gdWludDMyX3QgRENPQ19UWkFfU1RFUF8yOyAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgVFpBIERBQyBTdGVwIDIsIG9mZnNldDogMHgxMTggKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX1RaQV9TVEVQXzM7ICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBUWkEgREFDIFN0ZXAgMywgb2Zmc2V0OiAweDExQyAqLworICBfX0lPIHVpbnQzMl90IERDT0NfVFpBX1NURVBfNDsgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIFRaQSBEQUMgU3RlcCA0LCBvZmZzZXQ6IDB4MTIwICovCisgIF9fSU8gdWludDMyX3QgRENPQ19UWkFfU1RFUF81OyAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgVFpBIERBQyBTdGVwIDUsIG9mZnNldDogMHgxMjQgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX1RaQV9TVEVQXzY7ICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBUWkEgREFDIFN0ZXAgNiwgb2Zmc2V0OiAweDEyOCAqLworICBfX0lPIHVpbnQzMl90IERDT0NfVFpBX1NURVBfNzsgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIFRaQSBEQUMgU3RlcCA3LCBvZmZzZXQ6IDB4MTJDICovCisgIF9fSU8gdWludDMyX3QgRENPQ19UWkFfU1RFUF84OyAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgVFpBIERBQyBTdGVwIDUsIG9mZnNldDogMHgxMzAgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX1RaQV9TVEVQXzk7ICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBUWkEgREFDIFN0ZXAgOSwgb2Zmc2V0OiAweDEzNCAqLworICBfX0lPIHVpbnQzMl90IERDT0NfVFpBX1NURVBfMTA7ICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIFRaQSBEQUMgU3RlcCAxMCwgb2Zmc2V0OiAweDEzOCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMls0NF07CisgIF9fSSAgdWludDMyX3QgRENPQ19DQUxfQUxQSEE7ICAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgQ2FsaWJyYXRpb24gQWxwaGEsIG9mZnNldDogMHgxNjggKi8KKyAgX19JICB1aW50MzJfdCBEQ09DX0NBTF9CRVRBX1E7ICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBDYWxpYnJhdGlvbiBCZXRhIFEsIG9mZnNldDogMHgxNkMgKi8KKyAgX19JICB1aW50MzJfdCBEQ09DX0NBTF9CRVRBX0k7ICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBDYWxpYnJhdGlvbiBCZXRhIEksIG9mZnNldDogMHgxNzAgKi8KKyAgX19JICB1aW50MzJfdCBEQ09DX0NBTF9HQU1NQTsgICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBDYWxpYnJhdGlvbiBHYW1tYSwgb2Zmc2V0OiAweDE3NCAqLworICBfX0lPIHVpbnQzMl90IERDT0NfQ0FMX0lJUjsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIENhbGlicmF0aW9uIElJUiwgb2Zmc2V0OiAweDE3OCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfM1s0XTsKKyAgX19JICB1aW50MzJfdCBEQ09DX0NBTFszXTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBDYWxpYnJhdGlvbiBSZXN1bHQsIGFycmF5IG9mZnNldDogMHgxODAsIGFycmF5IHN0ZXA6IDB4NCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfNFs0XTsKKyAgX19JTyB1aW50MzJfdCBDQ0FfRURfTFFJX0NUUkxfMDsgICAgICAgICAgICAgICAgIC8qKjwgUlhfRElHIENDQSBFRCBMUUkgQ29udHJvbCBSZWdpc3RlciAwLCBvZmZzZXQ6IDB4MTkwICovCisgIF9fSU8gdWludDMyX3QgQ0NBX0VEX0xRSV9DVFJMXzE7ICAgICAgICAgICAgICAgICAvKio8IFJYX0RJRyBDQ0EgRUQgTFFJIENvbnRyb2wgUmVnaXN0ZXIgMSwgb2Zmc2V0OiAweDE5NCAqLworICBfX0kgIHVpbnQzMl90IENDQV9FRF9MUUlfU1RBVF8wOyAgICAgICAgICAgICAgICAgLyoqPCBSWF9ESUcgQ0NBIEVEIExRSSBTdGF0dXMgUmVnaXN0ZXIgMCwgb2Zmc2V0OiAweDE5OCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfNVs0XTsKKyAgX19JTyB1aW50MzJfdCBSWF9DSEZfQ09FRl8wOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCAwLCBvZmZzZXQ6IDB4MUEwICovCisgIF9fSU8gdWludDMyX3QgUlhfQ0hGX0NPRUZfMTsgICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgMSwgb2Zmc2V0OiAweDFBNCAqLworICBfX0lPIHVpbnQzMl90IFJYX0NIRl9DT0VGXzI7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDIsIG9mZnNldDogMHgxQTggKi8KKyAgX19JTyB1aW50MzJfdCBSWF9DSEZfQ09FRl8zOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCAzLCBvZmZzZXQ6IDB4MUFDICovCisgIF9fSU8gdWludDMyX3QgUlhfQ0hGX0NPRUZfNDsgICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgNCwgb2Zmc2V0OiAweDFCMCAqLworICBfX0lPIHVpbnQzMl90IFJYX0NIRl9DT0VGXzU7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDUsIG9mZnNldDogMHgxQjQgKi8KKyAgX19JTyB1aW50MzJfdCBSWF9DSEZfQ09FRl82OyAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCA2LCBvZmZzZXQ6IDB4MUI4ICovCisgIF9fSU8gdWludDMyX3QgUlhfQ0hGX0NPRUZfNzsgICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgNywgb2Zmc2V0OiAweDFCQyAqLworICBfX0lPIHVpbnQzMl90IFJYX0NIRl9DT0VGXzg7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDgsIG9mZnNldDogMHgxQzAgKi8KKyAgX19JTyB1aW50MzJfdCBSWF9DSEZfQ09FRl85OyAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCA5LCBvZmZzZXQ6IDB4MUM0ICovCisgIF9fSU8gdWludDMyX3QgUlhfQ0hGX0NPRUZfMTA7ICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgMTAsIG9mZnNldDogMHgxQzggKi8KKyAgX19JTyB1aW50MzJfdCBSWF9DSEZfQ09FRl8xMTsgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCAxMSwgb2Zmc2V0OiAweDFDQyAqLworICBfX0lPIHVpbnQzMl90IEFHQ19NQU5fQUdDX0lEWDsgICAgICAgICAgICAgICAgICAgLyoqPCBBR0MgTWFudWFsIEFHQyBJbmRleCwgb2Zmc2V0OiAweDFEMCAqLworICBfX0lPIHVpbnQzMl90IERDX1JFU0lEX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQyBSZXNpZHVhbCBDb250cm9sLCBvZmZzZXQ6IDB4MUQ0ICovCisgIF9fSSAgdWludDMyX3QgRENfUkVTSURfRVNUOyAgICAgICAgICAgICAgICAgICAgICAvKio8IERDIFJlc2lkdWFsIEVzdGltYXRlLCBvZmZzZXQ6IDB4MUQ4ICovCisgIF9fSU8gdWludDMyX3QgUlhfUkNDQUxfQ1RSTDA7ICAgICAgICAgICAgICAgICAgICAvKio8IFJYIFJDIENhbGlicmF0aW9uIENvbnRyb2wwLCBvZmZzZXQ6IDB4MURDICovCisgIF9fSU8gdWludDMyX3QgUlhfUkNDQUxfQ1RSTDE7ICAgICAgICAgICAgICAgICAgICAvKio8IFJYIFJDIENhbGlicmF0aW9uIENvbnRyb2wxLCBvZmZzZXQ6IDB4MUUwICovCisgIF9fSSAgdWludDMyX3QgUlhfUkNDQUxfU1RBVDsgICAgICAgICAgICAgICAgICAgICAvKio8IFJYIFJDIENhbGlicmF0aW9uIFN0YXR1cywgb2Zmc2V0OiAweDFFNCAqLworICBfX0lPIHVpbnQzMl90IEFVWFBMTF9GQ0FMX0NUUkw7ICAgICAgICAgICAgICAgICAgLyoqPCBBdXggUExMIEZyZXF1ZW5jeSBDYWxpYnJhdGlvbiBDb250cm9sLCBvZmZzZXQ6IDB4MUU4ICovCisgIF9fSSAgdWludDMyX3QgQVVYUExMX0ZDQUxfQ05UNjsgICAgICAgICAgICAgICAgICAvKio8IEF1eCBQTEwgRnJlcXVlbmN5IENhbGlicmF0aW9uIENvdW50IDYsIG9mZnNldDogMHgxRUMgKi8KKyAgX19JICB1aW50MzJfdCBBVVhQTExfRkNBTF9DTlQ1XzQ7ICAgICAgICAgICAgICAgIC8qKjwgQXV4IFBMTCBGcmVxdWVuY3kgQ2FsaWJyYXRpb24gQ291bnQgNSBhbmQgNCwgb2Zmc2V0OiAweDFGMCAqLworICBfX0kgIHVpbnQzMl90IEFVWFBMTF9GQ0FMX0NOVDNfMjsgICAgICAgICAgICAgICAgLyoqPCBBdXggUExMIEZyZXF1ZW5jeSBDYWxpYnJhdGlvbiBDb3VudCAzIGFuZCAyLCBvZmZzZXQ6IDB4MUY0ICovCisgIF9fSSAgdWludDMyX3QgQVVYUExMX0ZDQUxfQ05UMV8wOyAgICAgICAgICAgICAgICAvKio8IEF1eCBQTEwgRnJlcXVlbmN5IENhbGlicmF0aW9uIENvdW50IDEgYW5kIDAsIG9mZnNldDogMHgxRjggKi8KKyAgX19JTyB1aW50MzJfdCBSWERJR19ERlQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlhESUcgREZULCBvZmZzZXQ6IDB4MUZDICovCit9IFhDVlJfUlhfRElHX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfUlhfRElHIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9SWF9ESUdfUmVnaXN0ZXJfTWFza3MgWENWUl9SWF9ESUcgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFJYX0RJR19DVFJMIC0gUlggRGlnaXRhbCBDb250cm9sICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19ORUdFREdFX01BU0sgKDB4MVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19ORUdFREdFX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX05FR0VER0UoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfTkVHRURHRV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX05FR0VER0VfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQ0hfRklMVF9CWVBBU1NfTUFTSyAoMHgyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQ0hfRklMVF9CWVBBU1NfU0hJRlQgKDFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9DSF9GSUxUX0JZUEFTUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0NIX0ZJTFRfQllQQVNTX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9DSF9GSUxUX0JZUEFTU19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfUkFXX0VOX01BU0sgKDB4NFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19SQVdfRU5fU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfUkFXX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX1JBV19FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX1JBV19FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfUE9MX01BU0sgICgweDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfUE9MX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX1BPTCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19QT0xfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19QT0xfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfT1NSX01BU0sgKDB4NzBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1JfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1IoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1JfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMX01BU0sgKDB4MTAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTF9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX05PUk1fRU5fTUFTSyAgKDB4MjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfTk9STV9FTl9TSElGVCAoOVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX05PUk1fRU4oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9OT1JNX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9OT1JNX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1JTU0lfRU5fTUFTSyAgKDB4NDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfUlNTSV9FTl9TSElGVCAoMTBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9SU1NJX0VOKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfUlNTSV9FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfUlNTSV9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BR0NfRU5fTUFTSyAgICgweDgwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FHQ19FTl9TSElGVCAgKDExVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQUdDX0VOKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FHQ19FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQUdDX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfRU5fTUFTSyAgKDB4MTAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfRU5fU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19DQUxfRU5fTUFTSyAoMHgyMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19DQUxfRU5fU0hJRlQgKDEzVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19DQUxfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ09DX0NBTF9FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19DQUxfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfSVFfU1dBUF9NQVNLICAoMHg0MDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfSVFfU1dBUF9TSElGVCAoMTRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9JUV9TV0FQKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfSVFfU1dBUF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfSVFfU1dBUF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTl9NQVNLICgweDgwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTl9TSElGVCAoMTVVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfRU5fTUFTSyAgICgweDEwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX0VOX1NISUZUICAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfRU4oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX1JBVEVfTUFTSyAoMHgyMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFX1NISUZUICgxN1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfUkFURV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX1JBVEVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRE1BX0RURVNUX0VOX01BU0sgKDB4NDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ETUFfRFRFU1RfRU5fU0hJRlQgKDE4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRE1BX0RURVNUX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRE1BX0RURVNUX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ETUFfRFRFU1RfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfR0FJTl9NQVNLICgweDFGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9HQUlOX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0dBSU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9HQUlOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9HQUlOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0haRF9DT1JSX0RJU19NQVNLICgweDIwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9IWkRfQ09SUl9ESVNfU0hJRlQgKDI1VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfSFpEX0NPUlJfRElTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfSFpEX0NPUlJfRElTX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9IWkRfQ09SUl9ESVNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfSEFaQVJEX01BU0sgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9IQVpBUkRfU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfSEFaQVJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfSEFaQVJEX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9IQVpBUkRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfUlNTSV9GSUxUX0hBWkFSRF9NQVNLICgweDIwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfUlNTSV9GSUxUX0hBWkFSRF9TSElGVCAoMjlVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9SU1NJX0ZJTFRfSEFaQVJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfUlNTSV9GSUxUX0hBWkFSRF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfUlNTSV9GSUxUX0hBWkFSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9TQVRfSV9NQVNLICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfU0FUX0lfU0hJRlQgKDMwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfU0FUX0koeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9TQVRfSV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfU0FUX0lfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfU0FUX1FfTUFTSyAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX1NBVF9RX1NISUZUICgzMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX1NBVF9RKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfU0FUX1FfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX1NBVF9RX01BU0spCisKKy8qISBAbmFtZSBBR0NfQ1RSTF8wIC0gQUdDIENvbnRyb2wgMCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX1NMT1dfQUdDX0VOX01BU0sgICgweDFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX1NMT1dfQUdDX0VOX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9TTE9XX0FHQ19FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfU0xPV19BR0NfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfU0xPV19BR0NfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9TTE9XX0FHQ19TUkNfTUFTSyAoMHg2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9TTE9XX0FHQ19TUkNfU0hJRlQgKDFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX1NMT1dfQUdDX1NSQyh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9TTE9XX0FHQ19TUkNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfU0xPV19BR0NfU1JDX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0ZSRUVaRV9FTl9NQVNLICgweDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19GUkVFWkVfRU5fU0hJRlQgKDNVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19GUkVFWkVfRU4oeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRlJFRVpFX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19GUkVFWkVfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRlJFRVpFX1BSRV9PUl9BQV9NQVNLICgweDEwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRlJFRVpFX1BSRV9PUl9BQV9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0ZSRUVaRV9QUkVfT1JfQUEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19GUkVFWkVfUFJFX09SX0FBX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19GUkVFWkVfUFJFX09SX0FBX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX0VOX01BU0sgICAgKDB4NDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19VUF9FTl9TSElGVCAgICg2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfRU4oeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19VUF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19VUF9TUkNfTUFTSyAgICgweDgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfU1JDX1NISUZUICAoN1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX1NSQyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19VUF9TUkNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX1NSQ19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX0JCQV9TVEVQX1NaX01BU0sgKDB4RjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9CQkFfU1RFUF9TWl9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fQkJBX1NURVBfU1ooeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX0JCQV9TVEVQX1NaX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX0JCQV9TVEVQX1NaX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fTE5BX1NURVBfU1pfTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9MTkFfU1RFUF9TWl9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX0xOQV9TVEVQX1NaKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9MTkFfU1RFUF9TWl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9MTkFfU1RFUF9TWl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19VUF9SU1NJX1RIUkVTSF9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX1JTU0lfVEhSRVNIX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX1JTU0lfVEhSRVNIKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfUlNTSV9USFJFU0hfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX1JTU0lfVEhSRVNIX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fUlNTSV9USFJFU0hfTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fUlNTSV9USFJFU0hfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fUlNTSV9USFJFU0hfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fUlNTSV9USFJFU0hfTUFTSykKKworLyohIEBuYW1lIEFHQ19DVFJMXzEgLSBBR0MgQ29udHJvbCAxICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfQkJBX0FMVF9DT0RFX01BU0sgKDB4RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfQkJBX0FMVF9DT0RFX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9CQkFfQUxUX0NPREUoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfQkJBX0FMVF9DT0RFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0JCQV9BTFRfQ09ERV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9BTFRfQ09ERV9NQVNLICgweEZGMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0FMVF9DT0RFX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfQUxUX0NPREUoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0FMVF9DT0RFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9BTFRfQ09ERV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9VU0VSX0dBSU5fTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfVVNFUl9HQUlOX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX1VTRVJfR0FJTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9VU0VSX0dBSU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX1VTRVJfR0FJTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0JCQV9VU0VSX0dBSU5fTUFTSyAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfQkJBX1VTRVJfR0FJTl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0JCQV9VU0VSX0dBSU4oeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9CQkFfVVNFUl9HQUlOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0JCQV9VU0VSX0dBSU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0xOQV9HQUlOX0VOX01BU0sgKDB4MTAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0xOQV9HQUlOX0VOX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfVVNFUl9MTkFfR0FJTl9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfVVNFUl9MTkFfR0FJTl9FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0xOQV9HQUlOX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfVVNFUl9CQkFfR0FJTl9FTl9NQVNLICgweDIwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfVVNFUl9CQkFfR0FJTl9FTl9TSElGVCAoMjFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfQkJBX0dBSU5fRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfQkJBX0dBSU5fRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfVVNFUl9CQkFfR0FJTl9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1BSRVNMT1dfRU5fTUFTSyAgICgweDQwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfUFJFU0xPV19FTl9TSElGVCAgKDIyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9QUkVTTE9XX0VOKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfUFJFU0xPV19FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9QUkVTTE9XX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0dBSU5fU0VUVExFX1RJTUVfTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0dBSU5fU0VUVExFX1RJTUVfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfR0FJTl9TRVRUTEVfVElNRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0dBSU5fU0VUVExFX1RJTUVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0dBSU5fU0VUVExFX1RJTUVfTUFTSykKKworLyohIEBuYW1lIEFHQ19DVFJMXzIgLSBBR0MgQ29udHJvbCAyICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfUlNUX01BU0sgKDB4MVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfUlNUX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9SU1QoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfUlNUX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1JTVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1JTVF9NQVNLICgweDJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1JTVF9TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfUlNUKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1JTVF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9SU1RfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9NQU5fUERFVF9SU1RfTUFTSyAoMHg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9NQU5fUERFVF9SU1RfU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX01BTl9QREVUX1JTVCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9NQU5fUERFVF9SU1RfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfTUFOX1BERVRfUlNUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUVfTUFTSyAoMHhGRjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE9fTUFTSyAoMHg3MDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE9fU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MT19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSElfTUFTSyAoMHgzODAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJX1NISUZUICgxNVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSElfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPX01BU0sgKDB4MUMwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE9fU0hJRlQgKDE4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MT19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSElfTUFTSyAoMHhFMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISV9TSElGVCAoMjFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRV9NQVNLICgweDNGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkVfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9MTkFfTEdfT05fT1ZSX01BU0sgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0xOQV9MR19PTl9PVlJfU0hJRlQgKDMwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9MTkFfTEdfT05fT1ZSKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfTE5BX0xHX09OX09WUl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9MTkFfTEdfT05fT1ZSX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfTE5BX0hHX09OX09WUl9NQVNLICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9MTkFfSEdfT05fT1ZSX1NISUZUICgzMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfTE5BX0hHX09OX09WUih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0xOQV9IR19PTl9PVlJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfTE5BX0hHX09OX09WUl9NQVNLKQorCisvKiEgQG5hbWUgQUdDX0NUUkxfMyAtIEFHQyBDb250cm9sIDMgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfVU5GUkVFWkVfVElNRV9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19VTkZSRUVaRV9USU1FX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfVU5GUkVFWkVfVElNRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX1VORlJFRVpFX1RJTUVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX1VORlJFRVpFX1RJTUVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfUERFVF9MT19ETFlfTUFTSyAoMHhFMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfUERFVF9MT19ETFlfU0hJRlQgKDEzVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfUERFVF9MT19ETFkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19QREVUX0xPX0RMWV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfUERFVF9MT19ETFlfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfUlNTSV9ERUxUX0gyU19NQVNLICgweDdGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX1JTU0lfREVMVF9IMlNfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfUlNTSV9ERUxUX0gyUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX1JTU0lfREVMVF9IMlNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX1JTU0lfREVMVF9IMlNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfSDJTX1NURVBfU1pfTUFTSyAoMHhGODAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfSDJTX1NURVBfU1pfU0hJRlQgKDIzVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfSDJTX1NURVBfU1ooeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19IMlNfU1RFUF9TWl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfSDJTX1NURVBfU1pfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfVVBfU1RFUF9TWl9NQVNLICgweEYwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfVVBfU1RFUF9TWl9TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19VUF9TVEVQX1NaKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfVVBfU1RFUF9TWl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfVVBfU1RFUF9TWl9NQVNLKQorCisvKiEgQG5hbWUgQUdDX1NUQVQgLSBBR0MgU3RhdHVzICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX0JCQV9QREVUX0xPX1NUQVRfTUFTSyAoMHgxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfQkJBX1BERVRfTE9fU1RBVF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX0JCQV9QREVUX0xPX1NUQVQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9CQkFfUERFVF9MT19TVEFUX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9CQkFfUERFVF9MT19TVEFUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX0JCQV9QREVUX0hJX1NUQVRfTUFTSyAoMHgyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfQkJBX1BERVRfSElfU1RBVF9TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX0JCQV9QREVUX0hJX1NUQVQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9CQkFfUERFVF9ISV9TVEFUX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9CQkFfUERFVF9ISV9TVEFUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX1RaQV9QREVUX0xPX1NUQVRfTUFTSyAoMHg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfVFpBX1BERVRfTE9fU1RBVF9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX1RaQV9QREVUX0xPX1NUQVQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9UWkFfUERFVF9MT19TVEFUX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9UWkFfUERFVF9MT19TVEFUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX1RaQV9QREVUX0hJX1NUQVRfTUFTSyAoMHg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfVFpBX1BERVRfSElfU1RBVF9TSElGVCAoM1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX1RaQV9QREVUX0hJX1NUQVQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9UWkFfUERFVF9ISV9TVEFUX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9UWkFfUERFVF9ISV9TVEFUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX0NVUlJfQUdDX0lEWF9NQVNLICAgKDB4MUYwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfQ1VSUl9BR0NfSURYX1NISUZUICAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX0NVUlJfQUdDX0lEWCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9DVVJSX0FHQ19JRFhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19TVEFUX0NVUlJfQUdDX0lEWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9BR0NfRlJPWkVOX01BU0sgICAgICgweDIwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX0FHQ19GUk9aRU5fU0hJRlQgICAgKDlVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9BR0NfRlJPWkVOKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX1NUQVRfQUdDX0ZST1pFTl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX1NUQVRfQUdDX0ZST1pFTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9SU1NJX0FEQ19SQVdfTUFTSyAgICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX1JTU0lfQURDX1JBV19TSElGVCAgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfUlNTSV9BRENfUkFXKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19TVEFUX1JTU0lfQURDX1JBV19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX1NUQVRfUlNTSV9BRENfUkFXX01BU0spCisKKy8qISBAbmFtZSBSU1NJX0NUUkxfMCAtIFJTU0kgQ29udHJvbCAwICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfVVNFX1ZBTFNfTUFTSyAoMHgxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9VU0VfVkFMU19TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfVVNFX1ZBTFMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX1VTRV9WQUxTX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX1VTRV9WQUxTX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9TUkNfTUFTSyAoMHg2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9IT0xEX1NSQ19TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9TUkMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfU1JDX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfU1JDX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9FTl9NQVNLICgweDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfRU5fU0hJRlQgKDNVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfRU4oeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9IT0xEX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9JSVJfQ1dfV0VJR0hUX01BU0sgKDB4NjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0lJUl9DV19XRUlHSFRfU0hJRlQgKDVVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0lJUl9DV19XRUlHSFQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0lJUl9DV19XRUlHSFRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX0NXX1dFSUdIVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX05fV0lORE9XX0FWR19NQVNLICgweDMwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfTl9XSU5ET1dfQVZHX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9OX1dJTkRPV19BVkcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX05fV0lORE9XX0FWR19TSElGVCkpICYgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9OX1dJTkRPV19BVkdfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9IT0xEX0RFTEFZX01BU0sgKDB4RkMwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9ERUxBWV9TSElGVCAoMTBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfREVMQVkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfREVMQVlfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9ERUxBWV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0lJUl9XRUlHSFRfTUFTSyAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX1dFSUdIVF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0lJUl9XRUlHSFQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0lJUl9XRUlHSFRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX1dFSUdIVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX1ZMRF9TRVRUTEVfTUFTSyAoMHg3MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX1ZMRF9TRVRUTEVfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9WTERfU0VUVExFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9WTERfU0VUVExFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX1ZMRF9TRVRUTEVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9BREpfTUFTSyAgICAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfQURKX1NISUZUICAgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9BREooeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfQURKX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0FESl9NQVNLKQorCisvKiEgQG5hbWUgUlNTSV9DVFJMXzEgLSBSU1NJIENvbnRyb2wgMSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMV9SU1NJX09VVF9NQVNLICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzFfUlNTSV9PVVRfU0hJRlQgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMV9SU1NJX09VVCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzFfUlNTSV9PVVRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8xX1JTU0lfT1VUX01BU0spCisKKy8qISBAbmFtZSBSU1NJX0RGVCAtIFJTU0kgREZUICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfREZUX0RGVF9NQUdfTUFTSyAgICAgICAgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfREZUX0RGVF9NQUdfU0hJRlQgICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0RGVF9ERlRfTUFHKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlNTSV9ERlRfREZUX01BR19TSElGVCkpICYgWENWUl9SWF9ESUdfUlNTSV9ERlRfREZUX01BR19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0RGVF9ERlRfTk9JU0VfTUFTSyAgICAgICgweDFGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9ERlRfREZUX05PSVNFX1NISUZUICAgICAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0RGVF9ERlRfTk9JU0UoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlNTSV9ERlRfREZUX05PSVNFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SU1NJX0RGVF9ERlRfTk9JU0VfTUFTSykKKworLyohIEBuYW1lIERDT0NfQ1RSTF8wIC0gRENPQyBDb250cm9sIDAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19NSURQV1JfVFJLX0RJU19NQVNLICgweDFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX01JRFBXUl9UUktfRElTX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19NSURQV1JfVFJLX0RJUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfTUlEUFdSX1RSS19ESVNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfTUlEUFdSX1RSS19ESVNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19NQU5fTUFTSyAgICAoMHgyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19NQU5fU0hJRlQgICAoMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfTUFOKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX01BTl9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19NQU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19UUktfRVNUX09WUl9NQVNLICgweDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX1RSS19FU1RfT1ZSX1NISUZUICgyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19UUktfRVNUX09WUih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfVFJLX0VTVF9PVlJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfVFJLX0VTVF9PVlJfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSRUNUX1NSQ19NQVNLICgweDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfU1JDX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSRUNUX1NSQyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9TUkNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9TUkNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSRUNUX0VOX01BU0sgKDB4MTBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfRU5fU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9UUkFDS19GUk9NX1pFUk9fTUFTSyAoMHgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX1RSQUNLX0ZST01fWkVST19TSElGVCAoNVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX1RSQUNLX0ZST01fWkVSTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX1RSQUNLX0ZST01fWkVST19TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfVFJBQ0tfRlJPTV9aRVJPX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0JCQV9DT1JSX1BPTF9NQVNLICgweDQwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfQkJBX0NPUlJfUE9MX1NISUZUICg2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfQkJBX0NPUlJfUE9MKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0JCQV9DT1JSX1BPTF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfQkJBX0NPUlJfUE9MX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX1RaQV9DT1JSX1BPTF9NQVNLICgweDgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfVFpBX0NPUlJfUE9MX1NISUZUICg3VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfVFpBX0NPUlJfUE9MKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX1RaQV9DT1JSX1BPTF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfVFpBX0NPUlJfUE9MX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ0FMX0RVUkFUSU9OX01BU0sgKDB4MUYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ0FMX0RVUkFUSU9OX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DQUxfRFVSQVRJT04oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NBTF9EVVJBVElPTl9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DQUxfRFVSQVRJT05fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0RMWV9NQVNLICgweDFGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9ETFlfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0RMWSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9ETFlfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9ETFlfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0hPTERfVElNRV9NQVNLICgweDdGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0hPTERfVElNRV9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfSE9MRF9USU1FKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0hPTERfVElNRV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0hPTERfVElNRV9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19DVFJMXzEgLSBEQ09DIENvbnRyb2wgMSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfSURYX01BU0sgKDB4M1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9JRFhfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfSURYKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0lEWF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0lEWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9JRFhfTUFTSyAoMHgxQ1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0lEWF9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0lEWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0lEWF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfSURYX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0lEWF9NQVNLICgweEUwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfSURYX1NISUZUICg1VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfSURYKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfSURYX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19JRFhfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19UUktfRVNUX0dTX0NOVF9NQVNLICgweDcwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19FU1RfR1NfQ05UX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX0VTVF9HU19DTlQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19FU1RfR1NfQ05UX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19FU1RfR1NfQ05UX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9HU19JRFhfTUFTSyAoMHgzMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9HU19JRFhfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0dTX0lEWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9HU19JRFhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9HU19JRFhfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfR1NfSURYX01BU0sgKDB4MUMwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfR1NfSURYX1NISUZUICgxOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0dTX0lEWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0dTX0lEWF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfR1NfSURYX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0dTX0lEWF9NQVNLICgweEUwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0dTX0lEWF9TSElGVCAoMjFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19HU19JRFgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19HU19JRFhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0dTX0lEWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19NSU5fQUdDX0lEWF9NQVNLICgweDFGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19UUktfTUlOX0FHQ19JRFhfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19UUktfTUlOX0FHQ19JRFgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19NSU5fQUdDX0lEWF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19UUktfTUlOX0FHQ19JRFhfTUFTSykKKworLyohIEBuYW1lIERDT0NfREFDX0lOSVQgLSBEQ09DIERBQyBJbml0aWFsaXphdGlvbiAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfSV9NQVNLICgweDNGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX0lfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfSSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9JX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfSV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUV9NQVNLICgweDNGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX1FfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9JX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX0lfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX0koeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfSV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX0lfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX1FfTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9RX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9RKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX1FfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9RX01BU0spCisKKy8qISBAbmFtZSBEQ09DX0RJR19NQU4gLSBEQ09DIERpZ2l0YWwgQ29ycmVjdGlvbiBNYW51YWwgT3ZlcnJpZGUgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19ESUdfTUFOX0RJR19EQ09DX0lOSVRfSV9NQVNLICgweEZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfRElHX01BTl9ESUdfRENPQ19JTklUX0lfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RJR19NQU5fRElHX0RDT0NfSU5JVF9JKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19ESUdfTUFOX0RJR19EQ09DX0lOSVRfSV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19ESUdfTUFOX0RJR19EQ09DX0lOSVRfSV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RJR19NQU5fRElHX0RDT0NfSU5JVF9RX01BU0sgKDB4RkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfRElHX01BTl9ESUdfRENPQ19JTklUX1FfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19ESUdfTUFOX0RJR19EQ09DX0lOSVRfUSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfRElHX01BTl9ESUdfRENPQ19JTklUX1FfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfRElHX01BTl9ESUdfRENPQ19JTklUX1FfTUFTSykKKworLyohIEBuYW1lIERDT0NfQ0FMX0dBSU4gLSBEQ09DIENhbGlicmF0aW9uIEdhaW4gKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjFfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfQkJBX0NBTF9HQUlOMV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4xKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4xX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4xX01BU0sgKDB4RjAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4xX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4xKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4xX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4yX01BU0sgKDB4RjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfQkJBX0NBTF9HQUlOMl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfQkJBX0NBTF9HQUlOMih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4yX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfQkJBX0NBTF9HQUlOMl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfTE5BX0NBTF9HQUlOMl9NQVNLICgweEYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4yX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4yKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4yX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4zX01BU0sgKDB4RjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4zX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4zKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4zX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4zX01BU0sgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfTE5BX0NBTF9HQUlOM19TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfTE5BX0NBTF9HQUlOMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4zX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfTE5BX0NBTF9HQUlOM19NQVNLKQorCisvKiEgQG5hbWUgRENPQ19TVEFUIC0gRENPQyBTdGF0dXMgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19TVEFUX0JCQV9EQ09DX0lfTUFTSyAgICAoMHgzRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9CQkFfRENPQ19JX1NISUZUICAgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1NUQVRfQkJBX0RDT0NfSSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19TVEFUX0JCQV9EQ09DX0lfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9CQkFfRENPQ19JX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9CQkFfRENPQ19RX01BU0sgICAgKDB4M0YwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9CQkFfRENPQ19RX1NISUZUICAgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1NUQVRfQkJBX0RDT0NfUSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19TVEFUX0JCQV9EQ09DX1FfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9CQkFfRENPQ19RX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9UWkFfRENPQ19JX01BU0sgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19TVEFUX1RaQV9EQ09DX0lfU0hJRlQgICAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1NUQVRfVFpBX0RDT0NfSSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19TVEFUX1RaQV9EQ09DX0lfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9UWkFfRENPQ19JX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9UWkFfRENPQ19RX01BU0sgICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1NUQVRfVFpBX0RDT0NfUV9TSElGVCAgICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9UWkFfRENPQ19RKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1NUQVRfVFpBX0RDT0NfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19TVEFUX1RaQV9EQ09DX1FfTUFTSykKKworLyohIEBuYW1lIERDT0NfRENfRVNUIC0gRENPQyBEQyBFc3RpbWF0ZSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RDX0VTVF9EQ19FU1RfSV9NQVNLICAgICgweEZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfRENfRVNUX0RDX0VTVF9JX1NISUZUICAgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RDX0VTVF9EQ19FU1RfSSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19EQ19FU1RfRENfRVNUX0lfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfRENfRVNUX0RDX0VTVF9JX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfRENfRVNUX0RDX0VTVF9RX01BU0sgICAgKDB4RkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfRENfRVNUX0RDX0VTVF9RX1NISUZUICAgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQ19FU1RfRENfRVNUX1EoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfRENfRVNUX0RDX0VTVF9RX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0RDX0VTVF9EQ19FU1RfUV9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19DQUxfUkNQIC0gRENPQyBDYWxpYnJhdGlvbiBSZWNpcHJvY2FscyAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9SQ1BfRENPQ19UTVBfQ0FMQ19SRUNJUF9NQVNLICgweDdGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX1JDUF9EQ09DX1RNUF9DQUxDX1JFQ0lQX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfUkNQX0RDT0NfVE1QX0NBTENfUkVDSVAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9SQ1BfRENPQ19UTVBfQ0FMQ19SRUNJUF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfUkNQX0RDT0NfVE1QX0NBTENfUkVDSVBfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfUkNQX0FMUEhBX0NBTENfUkVDSVBfTUFTSyAoMHg3RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfUkNQX0FMUEhBX0NBTENfUkVDSVBfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfUkNQX0FMUEhBX0NBTENfUkVDSVAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9SQ1BfQUxQSEFfQ0FMQ19SRUNJUF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfUkNQX0FMUEhBX0NBTENfUkVDSVBfTUFTSykKKworLyohIEBuYW1lIElRTUNfQ1RSTCAtIElRTUMgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19JUU1DX0NUUkxfSVFNQ19DQUxfRU5fTUFTSyAgICgweDFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19JUU1DX0NUUkxfSVFNQ19DQUxfRU5fU0hJRlQgICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfSVFNQ19DVFJMX0lRTUNfQ0FMX0VOKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX0NBTF9FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfSVFNQ19DVFJMX0lRTUNfQ0FMX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX05VTV9JVEVSX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX05VTV9JVEVSX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfSVFNQ19DVFJMX0lRTUNfTlVNX0lURVIoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX05VTV9JVEVSX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19JUU1DX0NUUkxfSVFNQ19OVU1fSVRFUl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19JUU1DX0NUUkxfSVFNQ19EQ19HQUlOX0FESl9NQVNLICgweDdGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19JUU1DX0NUUkxfSVFNQ19EQ19HQUlOX0FESl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19JUU1DX0NUUkxfSVFNQ19EQ19HQUlOX0FESih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX0RDX0dBSU5fQURKX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19JUU1DX0NUUkxfSVFNQ19EQ19HQUlOX0FESl9NQVNLKQorCisvKiEgQG5hbWUgSVFNQ19DQUwgLSBJUU1DIENhbGlicmF0aW9uICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ0FMX0lRTUNfR0FJTl9BREpfTUFTSyAgKDB4N0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfSVFNQ19DQUxfSVFNQ19HQUlOX0FESl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ0FMX0lRTUNfR0FJTl9BREooeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19JUU1DX0NBTF9JUU1DX0dBSU5fQURKX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19JUU1DX0NBTF9JUU1DX0dBSU5fQURKX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ0FMX0lRTUNfUEhBU0VfQURKX01BU0sgKDB4RkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ0FMX0lRTUNfUEhBU0VfQURKX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ0FMX0lRTUNfUEhBU0VfQURKKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19JUU1DX0NBTF9JUU1DX1BIQVNFX0FESl9TSElGVCkpICYgWENWUl9SWF9ESUdfSVFNQ19DQUxfSVFNQ19QSEFTRV9BREpfTUFTSykKKworLyohIEBuYW1lIExOQV9HQUlOX1ZBTF8zXzAgLSBMTkFfR0FJTiBTdGVwIFZhbHVlcyAzLi4wICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzBfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8wKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMF9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8xX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzFfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8xKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMV9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8yX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8yKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMl9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8zX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8zX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8zX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8zX01BU0spCisKKy8qISBAbmFtZSBMTkFfR0FJTl9WQUxfN180IC0gTE5BX0dBSU4gU3RlcCBWYWx1ZXMgNy4uNCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF80X01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF80X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNV9NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF81X1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNl9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzZfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzZfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfN19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfN19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF83KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfN19TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfN19NQVNLKQorCisvKiEgQG5hbWUgTE5BX0dBSU5fVkFMXzggLSBMTkFfR0FJTiBTdGVwIFZhbHVlcyA4ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF84X0xOQV9HQUlOX1ZBTF84X01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfOF9MTkFfR0FJTl9WQUxfOF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF84X0xOQV9HQUlOX1ZBTF84KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzhfTE5BX0dBSU5fVkFMXzhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF84X0xOQV9HQUlOX1ZBTF84X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF84X0xOQV9HQUlOX1ZBTF85X01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF84X0xOQV9HQUlOX1ZBTF85X1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzhfTE5BX0dBSU5fVkFMXzkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfOF9MTkFfR0FJTl9WQUxfOV9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzhfTE5BX0dBSU5fVkFMXzlfTUFTSykKKworLyohIEBuYW1lIEJCQV9SRVNfVFVORV9WQUxfN18wIC0gQkJBIFJlc2lzdG9yIFR1bmUgVmFsdWVzIDcuLjAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8wX01BU0sgKDB4RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfMF9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8wX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfMV9NQVNLICgweEYwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8xX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8xKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8xX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8yX01BU0sgKDB4RjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8yX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8yKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8yX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzJfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8zX01BU0sgKDB4RjAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfM19TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfM19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzRfTUFTSyAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzVfTUFTSyAoMHhGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzVfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF81KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF81X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF82X01BU0sgKDB4RjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNl9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzdfTUFTSyAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfN19TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzdfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfN19NQVNLKQorCisvKiEgQG5hbWUgQkJBX1JFU19UVU5FX1ZBTF8xMF84IC0gQkJBIFJlc2lzdG9yIFR1bmUgVmFsdWVzIDEwLi44ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfVkFMXzhfTUFTSyAoMHhGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfOF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfVkFMXzgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF84X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF84X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfVkFMXzlfTUFTSyAoMHhGMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfVkFMXzlfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF85KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfOV9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfOV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF8xMF9NQVNLICgweEYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfVkFMXzEwX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfMTAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF8xMF9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfMTBfTUFTSykKKworLyohIEBuYW1lIExOQV9HQUlOX0xJTl9WQUxfMl8wIC0gTE5BIExpbmVhciBHYWluIFZhbHVlcyAyLi4wICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMF9NQVNLICgweDNGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMF9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8wX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMV9NQVNLICgweEZGQzAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8xX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMV9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8xX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMl9NQVNLICgweDNGRjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8yX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMl9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8yX01BU0spCisKKy8qISBAbmFtZSBMTkFfR0FJTl9MSU5fVkFMXzVfMyAtIExOQSBMaW5lYXIgR2FpbiBWYWx1ZXMgNS4uMyAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzNfTUFTSyAoMHgzRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzNfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfM19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzRfTUFTSyAoMHhGRkMwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfNF9TSElGVCAoMTBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzVfTUFTSyAoMHgzRkYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfNV9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfNV9NQVNLKQorCisvKiEgQG5hbWUgTE5BX0dBSU5fTElOX1ZBTF84XzYgLSBMTkEgTGluZWFyIEdhaW4gVmFsdWVzIDguLjYgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF82X01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF82X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF82KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF82X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzZfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF83X01BU0sgKDB4RkZDMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzdfU0hJRlQgKDEwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF83KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF83X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzdfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF84X01BU0sgKDB4M0ZGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzhfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF84KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF84X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzhfTUFTSykKKworLyohIEBuYW1lIExOQV9HQUlOX0xJTl9WQUxfOSAtIExOQSBMaW5lYXIgR2FpbiBWYWx1ZXMgOSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzlfTE5BX0dBSU5fTElOX1ZBTF85X01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF85X0xOQV9HQUlOX0xJTl9WQUxfOV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOV9MTkFfR0FJTl9MSU5fVkFMXzkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzlfTE5BX0dBSU5fTElOX1ZBTF85X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzlfTE5BX0dBSU5fTElOX1ZBTF85X01BU0spCisKKy8qISBAbmFtZSBCQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzAgLSBCQkEgUmVzaXN0b3IgVHVuZSBWYWx1ZXMgMy4uMCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMF9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8wX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMV9NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8xKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8xX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8yX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzJfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMl9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzJfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8zX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8zKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8zX01BU0spCisKKy8qISBAbmFtZSBCQkFfUkVTX1RVTkVfTElOX1ZBTF83XzQgLSBCQkEgUmVzaXN0b3IgVHVuZSBWYWx1ZXMgNy4uNCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNF9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzRfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF80X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNV9NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF81KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF81X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF82X01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzZfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNl9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzZfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF83X1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF83KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF83X01BU0spCisKKy8qISBAbmFtZSBCQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF84IC0gQkJBIFJlc2lzdG9yIFR1bmUgVmFsdWVzIDEwLi44ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfOF9NQVNLICgweDNGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfOF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfOCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfOF9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF84X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfOV9NQVNLICgweEZGQzAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF85X1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfOSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfOV9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF85X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfTUFTSyAoMHgzRkYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfTUFTSykKKworLyohIEBuYW1lIEFHQ19HQUlOX1RCTF8wM18wMCAtIEFHQyBHYWluIFRhYmxlcyBTdGVwIDAzLi4wMCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDBfTUFTSyAoMHhGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAwX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAwKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAwX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDBfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAwX01BU0sgKDB4RjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDBfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDFfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDFfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDFfTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAxX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAxX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMl9NQVNLICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAyX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAyX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMl9NQVNLICgweEYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMl9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDNfTUFTSyAoMHhGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAzX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wM19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAzX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wM19NQVNLICgweEYwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAzX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wM19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAzX01BU0spCisKKy8qISBAbmFtZSBBR0NfR0FJTl9UQkxfMDdfMDQgLSBBR0MgR2FpbiBUYWJsZXMgU3RlcCAwNy4uMDQgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA0X01BU0sgKDB4RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA0X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNF9NQVNLICgweEYwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA0X1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA0KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA0X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA1X01BU0sgKDB4RjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA1X1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA1KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA1X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA1X01BU0sgKDB4RjAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNV9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDZfTUFTSyAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDZfTUFTSyAoMHhGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDZfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA2KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA2X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDZfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA3X01BU0sgKDB4RjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wN19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDdfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wN19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDdfTUFTSyAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wN19TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDdfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wN19NQVNLKQorCisvKiEgQG5hbWUgQUdDX0dBSU5fVEJMXzExXzA4IC0gQUdDIEdhaW4gVGFibGVzIFN0ZXAgMTEuLjA4ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8wOF9NQVNLICgweEZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMDhfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMDgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMDhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8wOF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMDhfTUFTSyAoMHhGMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8wOF9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8wOCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8wOF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzA4X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8wOV9NQVNLICgweEYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8wOV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8wOSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8wOV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzA5X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8wOV9NQVNLICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMDlfU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzA5KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzA5X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMDlfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzEwX01BU0sgKDB4RjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMTBfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzEwKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzEwX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMTBfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzEwX01BU0sgKDB4RjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzEwX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8xMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8xMF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzEwX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8xMV9NQVNLICgweEYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMTFfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzExKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzExX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMTFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzExX01BU0sgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMTFfU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzExKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzExX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMTFfTUFTSykKKworLyohIEBuYW1lIEFHQ19HQUlOX1RCTF8xNV8xMiAtIEFHQyBHYWluIFRhYmxlcyBTdGVwIDE1Li4xMiAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTJfTUFTSyAoMHhGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzEyX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzEyKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzEyX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTJfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzEyX01BU0sgKDB4RjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTJfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xMl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTNfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTNfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xM19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTNfTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzEzX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xM19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzEzX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xNF9NQVNLICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzE0X1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xNCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xNF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzE0X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xNF9NQVNLICgweEYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xNF9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTVfTUFTSyAoMHhGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzE1X1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xNSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xNV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzE1X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xNV9NQVNLICgweEYwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzE1X1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xNSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xNV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzE1X01BU0spCisKKy8qISBAbmFtZSBBR0NfR0FJTl9UQkxfMTlfMTYgLSBBR0MgR2FpbiBUYWJsZXMgU3RlcCAxOS4uMTYgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE2X01BU0sgKDB4RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xNl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xNih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xNl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE2X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xNl9NQVNLICgweEYwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE2X1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE2KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE2X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTZfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE3X01BU0sgKDB4RjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE3X1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE3KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE3X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTdfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE3X01BU0sgKDB4RjAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xN19TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTdfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xN19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMThfTUFTSyAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xOF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMThfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xOF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMThfTUFTSyAoMHhGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMThfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE4KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE4X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMThfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE5X01BU0sgKDB4RjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xOV9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTlfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xOV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTlfTUFTSyAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xOV9TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTlfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xOV9NQVNLKQorCisvKiEgQG5hbWUgQUdDX0dBSU5fVEJMXzIzXzIwIC0gQUdDIEdhaW4gVGFibGVzIFN0ZXAgMjMuLjIwICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMF9NQVNLICgweEZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjBfTUFTSyAoMHhGMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMF9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIwX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMV9NQVNLICgweEYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIxX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMV9NQVNLICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjFfU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIxKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIxX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIyX01BU0sgKDB4RjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjJfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIyKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIyX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjJfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIyX01BU0sgKDB4RjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIyX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIyX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yM19NQVNLICgweEYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjNfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIzKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIzX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIzX01BU0sgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjNfU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIzKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIzX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjNfTUFTSykKKworLyohIEBuYW1lIEFHQ19HQUlOX1RCTF8yNl8yNCAtIEFHQyBHYWluIFRhYmxlcyBTdGVwIDI2Li4yNCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjRfTUFTSyAoMHhGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0JCQV9HQUlOXzI0X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0JCQV9HQUlOXzI0KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0JCQV9HQUlOXzI0X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0xOQV9HQUlOXzI0X01BU0sgKDB4RjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfTE5BX0dBSU5fMjRfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfTE5BX0dBSU5fMjQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfTE5BX0dBSU5fMjRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjVfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjVfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfTE5BX0dBSU5fMjVfTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0xOQV9HQUlOXzI1X1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0xOQV9HQUlOXzI1X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNl9NQVNLICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0JCQV9HQUlOXzI2X1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0JCQV9HQUlOXzI2X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNl9NQVNLICgweEYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNl9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfTE5BX0dBSU5fMjYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfTE5BX0dBSU5fMjZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNl9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19PRkZTRVQgLSBEQ09DIE9mZnNldCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX0JCQV9PRkZTRVRfSV9NQVNLICgweDNGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19CQkFfT0ZGU0VUX0lfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX0JCQV9PRkZTRVRfSSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfQkJBX09GRlNFVF9JX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX0JCQV9PRkZTRVRfSV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX0JCQV9PRkZTRVRfUV9NQVNLICgweDNGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX0JCQV9PRkZTRVRfUV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfQkJBX09GRlNFVF9RKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19CQkFfT0ZGU0VUX1FfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfQkJBX09GRlNFVF9RX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfVFpBX09GRlNFVF9JX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19UWkFfT0ZGU0VUX0lfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19UWkFfT0ZGU0VUX0koeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX1RaQV9PRkZTRVRfSV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19UWkFfT0ZGU0VUX0lfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19UWkFfT0ZGU0VUX1FfTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfVFpBX09GRlNFVF9RX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfVFpBX09GRlNFVF9RKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19UWkFfT0ZGU0VUX1FfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfVFpBX09GRlNFVF9RX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9DT1VOVCAgICAgICAgICAgICgyN1UpCisKKy8qISBAbmFtZSBEQ09DX0JCQV9TVEVQIC0gRENPQyBCQkEgREFDIFN0ZXAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19CQkFfU1RFUF9CQkFfRENPQ19TVEVQX1JFQ0lQX01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUF9SRUNJUF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUF9SRUNJUCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUF9SRUNJUF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19CQkFfU1RFUF9CQkFfRENPQ19TVEVQX1JFQ0lQX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUF9NQVNLICgweDFGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0JCQV9TVEVQX0JCQV9EQ09DX1NURVBfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19CQkFfU1RFUF9CQkFfRENPQ19TVEVQKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19CQkFfU1RFUF9CQkFfRENPQ19TVEVQX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0JCQV9TVEVQX0JCQV9EQ09DX1NURVBfTUFTSykKKworLyohIEBuYW1lIERDT0NfVFpBX1NURVBfMCAtIERDT0MgVFpBIERBQyBTdGVwIDAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8wX0RDT0NfVFpBX1NURVBfUkNQXzBfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8wX0RDT0NfVFpBX1NURVBfUkNQXzBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzBfRENPQ19UWkFfU1RFUF9SQ1BfMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMF9EQ09DX1RaQV9TVEVQX1JDUF8wX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzBfRENPQ19UWkFfU1RFUF9SQ1BfMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzBfRENPQ19UWkFfU1RFUF9HQUlOXzBfTUFTSyAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8wX0RDT0NfVFpBX1NURVBfR0FJTl8wX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMF9EQ09DX1RaQV9TVEVQX0dBSU5fMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMF9EQ09DX1RaQV9TVEVQX0dBSU5fMF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8wX0RDT0NfVFpBX1NURVBfR0FJTl8wX01BU0spCisKKy8qISBAbmFtZSBEQ09DX1RaQV9TVEVQXzEgLSBEQ09DIFRaQSBEQUMgU3RlcCAxICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMV9EQ09DX1RaQV9TVEVQX1JDUF8xX01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMV9EQ09DX1RaQV9TVEVQX1JDUF8xX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xX0RDT0NfVFpBX1NURVBfUkNQXzEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzFfRENPQ19UWkFfU1RFUF9SQ1BfMV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xX0RDT0NfVFpBX1NURVBfUkNQXzFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xX0RDT0NfVFpBX1NURVBfR0FJTl8xX01BU0sgKDB4RkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMV9EQ09DX1RaQV9TVEVQX0dBSU5fMV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzFfRENPQ19UWkFfU1RFUF9HQUlOXzEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzFfRENPQ19UWkFfU1RFUF9HQUlOXzFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMV9EQ09DX1RaQV9TVEVQX0dBSU5fMV9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19UWkFfU1RFUF8yIC0gRENPQyBUWkEgREFDIFN0ZXAgMiAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzJfRENPQ19UWkFfU1RFUF9SQ1BfMl9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzJfRENPQ19UWkFfU1RFUF9SQ1BfMl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX1JDUF8yKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8yX0RDT0NfVFpBX1NURVBfUkNQXzJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX1JDUF8yX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX0dBSU5fMl9NQVNLICgweEZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzJfRENPQ19UWkFfU1RFUF9HQUlOXzJfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8yX0RDT0NfVFpBX1NURVBfR0FJTl8yKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8yX0RDT0NfVFpBX1NURVBfR0FJTl8yX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzJfRENPQ19UWkFfU1RFUF9HQUlOXzJfTUFTSykKKworLyohIEBuYW1lIERDT0NfVFpBX1NURVBfMyAtIERDT0MgVFpBIERBQyBTdGVwIDMgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8zX0RDT0NfVFpBX1NURVBfUkNQXzNfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8zX0RDT0NfVFpBX1NURVBfUkNQXzNfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzNfRENPQ19UWkFfU1RFUF9SQ1BfMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfM19EQ09DX1RaQV9TVEVQX1JDUF8zX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzNfRENPQ19UWkFfU1RFUF9SQ1BfM19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzNfRENPQ19UWkFfU1RFUF9HQUlOXzNfTUFTSyAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8zX0RDT0NfVFpBX1NURVBfR0FJTl8zX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfM19EQ09DX1RaQV9TVEVQX0dBSU5fMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfM19EQ09DX1RaQV9TVEVQX0dBSU5fM19TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8zX0RDT0NfVFpBX1NURVBfR0FJTl8zX01BU0spCisKKy8qISBAbmFtZSBEQ09DX1RaQV9TVEVQXzQgLSBEQ09DIFRaQSBEQUMgU3RlcCA0ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNF9EQ09DX1RaQV9TVEVQX1JDUF80X01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNF9EQ09DX1RaQV9TVEVQX1JDUF80X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF80X0RDT0NfVFpBX1NURVBfUkNQXzQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzRfRENPQ19UWkFfU1RFUF9SQ1BfNF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF80X0RDT0NfVFpBX1NURVBfUkNQXzRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF80X0RDT0NfVFpBX1NURVBfR0FJTl80X01BU0sgKDB4RkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNF9EQ09DX1RaQV9TVEVQX0dBSU5fNF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzRfRENPQ19UWkFfU1RFUF9HQUlOXzQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzRfRENPQ19UWkFfU1RFUF9HQUlOXzRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNF9EQ09DX1RaQV9TVEVQX0dBSU5fNF9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19UWkFfU1RFUF81IC0gRENPQyBUWkEgREFDIFN0ZXAgNSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzVfRENPQ19UWkFfU1RFUF9SQ1BfNV9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzVfRENPQ19UWkFfU1RFUF9SQ1BfNV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX1JDUF81KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF81X0RDT0NfVFpBX1NURVBfUkNQXzVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX1JDUF81X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX0dBSU5fNV9NQVNLICgweEZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzVfRENPQ19UWkFfU1RFUF9HQUlOXzVfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF81X0RDT0NfVFpBX1NURVBfR0FJTl81KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF81X0RDT0NfVFpBX1NURVBfR0FJTl81X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzVfRENPQ19UWkFfU1RFUF9HQUlOXzVfTUFTSykKKworLyohIEBuYW1lIERDT0NfVFpBX1NURVBfNiAtIERDT0MgVFpBIERBQyBTdGVwIDYgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfUkNQXzZfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfUkNQXzZfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzZfRENPQ19UWkFfU1RFUF9SQ1BfNih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNl9EQ09DX1RaQV9TVEVQX1JDUF82X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzZfRENPQ19UWkFfU1RFUF9SQ1BfNl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzZfRENPQ19UWkFfU1RFUF9HQUlOXzZfTUFTSyAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfR0FJTl82X1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNl9EQ09DX1RaQV9TVEVQX0dBSU5fNih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNl9EQ09DX1RaQV9TVEVQX0dBSU5fNl9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfR0FJTl82X01BU0spCisKKy8qISBAbmFtZSBEQ09DX1RaQV9TVEVQXzcgLSBEQ09DIFRaQSBEQUMgU3RlcCA3ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfN19EQ09DX1RaQV9TVEVQX1JDUF83X01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfN19EQ09DX1RaQV9TVEVQX1JDUF83X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF83X0RDT0NfVFpBX1NURVBfUkNQXzcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9SQ1BfN19TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF83X0RDT0NfVFpBX1NURVBfUkNQXzdfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF83X0RDT0NfVFpBX1NURVBfR0FJTl83X01BU0sgKDB4MUZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9HQUlOXzdfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF83X0RDT0NfVFpBX1NURVBfR0FJTl83KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF83X0RDT0NfVFpBX1NURVBfR0FJTl83X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9HQUlOXzdfTUFTSykKKworLyohIEBuYW1lIERDT0NfVFpBX1NURVBfOCAtIERDT0MgVFpBIERBQyBTdGVwIDUgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF84X0RDT0NfVFpBX1NURVBfUkNQXzhfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF84X0RDT0NfVFpBX1NURVBfUkNQXzhfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzhfRENPQ19UWkFfU1RFUF9SQ1BfOCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX1JDUF84X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzhfRENPQ19UWkFfU1RFUF9SQ1BfOF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzhfRENPQ19UWkFfU1RFUF9HQUlOXzhfTUFTSyAoMHgxRkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX0dBSU5fOF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzhfRENPQ19UWkFfU1RFUF9HQUlOXzgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzhfRENPQ19UWkFfU1RFUF9HQUlOXzhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX0dBSU5fOF9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19UWkFfU1RFUF85IC0gRENPQyBUWkEgREFDIFN0ZXAgOSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzlfRENPQ19UWkFfU1RFUF9SQ1BfOV9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzlfRENPQ19UWkFfU1RFUF9SQ1BfOV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX1JDUF85KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF85X0RDT0NfVFpBX1NURVBfUkNQXzlfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX1JDUF85X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX0dBSU5fOV9NQVNLICgweDNGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF85X0RDT0NfVFpBX1NURVBfR0FJTl85X1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX0dBSU5fOSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX0dBSU5fOV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF85X0RDT0NfVFpBX1NURVBfR0FJTl85X01BU0spCisKKy8qISBAbmFtZSBEQ09DX1RaQV9TVEVQXzEwIC0gRENPQyBUWkEgREFDIFN0ZXAgMTAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX1JDUF8xMF9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzEwX0RDT0NfVFpBX1NURVBfUkNQXzEwX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX1JDUF8xMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMTBfRENPQ19UWkFfU1RFUF9SQ1BfMTBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMTBfRENPQ19UWkFfU1RFUF9SQ1BfMTBfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX0dBSU5fMTBfTUFTSyAoMHgzRkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMTBfRENPQ19UWkFfU1RFUF9HQUlOXzEwX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMTBfRENPQ19UWkFfU1RFUF9HQUlOXzEwKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX0dBSU5fMTBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMTBfRENPQ19UWkFfU1RFUF9HQUlOXzEwX01BU0spCisKKy8qISBAbmFtZSBEQ09DX0NBTF9BTFBIQSAtIERDT0MgQ2FsaWJyYXRpb24gQWxwaGEgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfQUxQSEFfRENPQ19DQUxfQUxQSEFfSV9NQVNLICgweDdGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0FMUEhBX0RDT0NfQ0FMX0FMUEhBX0lfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9BTFBIQV9EQ09DX0NBTF9BTFBIQV9JKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfQUxQSEFfRENPQ19DQUxfQUxQSEFfSV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfQUxQSEFfRENPQ19DQUxfQUxQSEFfSV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9BTFBIQV9EQ09DX0NBTF9BTFBIQV9RX01BU0sgKDB4N0ZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0FMUEhBX0RDT0NfQ0FMX0FMUEhBX1FfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfQUxQSEFfRENPQ19DQUxfQUxQSEFfUSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0FMUEhBX0RDT0NfQ0FMX0FMUEhBX1FfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0FMUEhBX0RDT0NfQ0FMX0FMUEhBX1FfTUFTSykKKworLyohIEBuYW1lIERDT0NfQ0FMX0JFVEFfUSAtIERDT0MgQ2FsaWJyYXRpb24gQmV0YSBRICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0JFVEFfUV9EQ09DX0NBTF9CRVRBX1FfTUFTSyAoMHgxRkZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0JFVEFfUV9EQ09DX0NBTF9CRVRBX1FfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9CRVRBX1FfRENPQ19DQUxfQkVUQV9RKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfQkVUQV9RX0RDT0NfQ0FMX0JFVEFfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfQkVUQV9RX0RDT0NfQ0FMX0JFVEFfUV9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19DQUxfQkVUQV9JIC0gRENPQyBDYWxpYnJhdGlvbiBCZXRhIEkgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfQkVUQV9JX0RDT0NfQ0FMX0JFVEFfSV9NQVNLICgweDFGRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfQkVUQV9JX0RDT0NfQ0FMX0JFVEFfSV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0JFVEFfSV9EQ09DX0NBTF9CRVRBX0koeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9CRVRBX0lfRENPQ19DQUxfQkVUQV9JX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9CRVRBX0lfRENPQ19DQUxfQkVUQV9JX01BU0spCisKKy8qISBAbmFtZSBEQ09DX0NBTF9HQU1NQSAtIERDT0MgQ2FsaWJyYXRpb24gR2FtbWEgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FNTUFfRENPQ19DQUxfR0FNTUFfSV9NQVNLICgweEZGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQU1NQV9EQ09DX0NBTF9HQU1NQV9JX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FNTUFfRENPQ19DQUxfR0FNTUFfSSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBTU1BX0RDT0NfQ0FMX0dBTU1BX0lfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBTU1BX0RDT0NfQ0FMX0dBTU1BX0lfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FNTUFfRENPQ19DQUxfR0FNTUFfUV9NQVNLICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FNTUFfRENPQ19DQUxfR0FNTUFfUV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQU1NQV9EQ09DX0NBTF9HQU1NQV9RKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FNTUFfRENPQ19DQUxfR0FNTUFfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FNTUFfRENPQ19DQUxfR0FNTUFfUV9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19DQUxfSUlSIC0gRENPQyBDYWxpYnJhdGlvbiBJSVIgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjFBX0lEWF9NQVNLICgweDNVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMUFfSURYX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjFBX0lEWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIxQV9JRFhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIxQV9JRFhfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjJBX0lEWF9NQVNLICgweENVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMkFfSURYX1NISUZUICgyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjJBX0lEWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIyQV9JRFhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIyQV9JRFhfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjNBX0lEWF9NQVNLICgweDMwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjNBX0lEWF9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIzQV9JRFgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSM0FfSURYX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSM0FfSURYX01BU0spCisKKy8qISBAbmFtZSBEQ09DX0NBTCAtIERDT0MgQ2FsaWJyYXRpb24gUmVzdWx0ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0RDT0NfQ0FMX1JFU19JX01BU0sgKDB4RkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfRENPQ19DQUxfUkVTX0lfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9EQ09DX0NBTF9SRVNfSSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfRENPQ19DQUxfUkVTX0lfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0RDT0NfQ0FMX1JFU19JX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0RDT0NfQ0FMX1JFU19RX01BU0sgKDB4RkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0RDT0NfQ0FMX1JFU19RX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0RDT0NfQ0FMX1JFU19RKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9EQ09DX0NBTF9SRVNfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfRENPQ19DQUxfUkVTX1FfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFhDVlJfUlhfRElHX0RDT0NfQ0FMICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0NPVU5UICAgICAgICAgICAgICAgKDNVKQorCisvKiEgQG5hbWUgQ0NBX0VEX0xRSV9DVFJMXzAgLSBSWF9ESUcgQ0NBIEVEIExRSSBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfTFFJX0NPUlJfVEhSRVNIX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9MUUlfQ09SUl9USFJFU0hfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9MUUlfQ09SUl9USFJFU0goeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9MUUlfQ09SUl9USFJFU0hfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0xRSV9DT1JSX1RIUkVTSF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9DT1JSX0NOVFJfVEhSRVNIX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0NPUlJfQ05UUl9USFJFU0hfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9DT1JSX0NOVFJfVEhSRVNIKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfQ09SUl9DTlRSX1RIUkVTSF9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfQ09SUl9DTlRSX1RIUkVTSF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9MUUlfQ05UUl9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0xRSV9DTlRSX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0xRSV9DTlRSKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfTFFJX0NOVFJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0xRSV9DTlRSX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX1NOUl9BREpfTUFTSyAoMHgzRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX1NOUl9BREpfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfU05SX0FESih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX1NOUl9BREpfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX1NOUl9BREpfTUFTSykKKworLyohIEBuYW1lIENDQV9FRF9MUUlfQ1RSTF8xIC0gUlhfRElHIENDQSBFRCBMUUkgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1JTU0lfTk9JU0VfQVZHX0RFTEFZX01BU0sgKDB4M0ZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9SU1NJX05PSVNFX0FWR19ERUxBWV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1JTU0lfTk9JU0VfQVZHX0RFTEFZKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfUlNTSV9OT0lTRV9BVkdfREVMQVlfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1JTU0lfTk9JU0VfQVZHX0RFTEFZX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1JTU0lfTk9JU0VfQVZHX0ZBQ1RPUl9NQVNLICgweDFDMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1JTU0lfTk9JU0VfQVZHX0ZBQ1RPUl9TSElGVCAoNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1JTU0lfTk9JU0VfQVZHX0ZBQ1RPUih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1JTU0lfTk9JU0VfQVZHX0ZBQ1RPUl9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfUlNTSV9OT0lTRV9BVkdfRkFDVE9SX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9SU1NJX1dFSUdIVF9NQVNLICgweEUwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9SU1NJX1dFSUdIVF9TSElGVCAoOVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9SU1NJX1dFSUdIVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9SU1NJX1dFSUdIVF9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX1JTU0lfV0VJR0hUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9SU1NJX1NFTlNfTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX1JTU0lfU0VOU19TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9MUUlfUlNTSV9TRU5TKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX1JTU0lfU0VOU19TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX1JTU0lfU0VOU19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TTlJfTFFJX0RJU19NQVNLICgweDEwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU05SX0xRSV9ESVNfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU05SX0xRSV9ESVMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TTlJfTFFJX0RJU19TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU05SX0xRSV9ESVNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU0VMX1NOUl9NT0RFX01BU0sgKDB4MjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TRUxfU05SX01PREVfU0hJRlQgKDE3VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU0VMX1NOUl9NT0RFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU0VMX1NOUl9NT0RFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TRUxfU05SX01PREVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUVBU19UUkFOU19UT19JRExFX01BU0sgKDB4NDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NRUFTX1RSQU5TX1RPX0lETEVfU0hJRlQgKDE4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUVBU19UUkFOU19UT19JRExFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUVBU19UUkFOU19UT19JRExFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NRUFTX1RSQU5TX1RPX0lETEVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfQ0NBMV9FRF9FTl9ESVNfTUFTSyAoMHg4MDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0NDQTFfRURfRU5fRElTX1NISUZUICgxOVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0NDQTFfRURfRU5fRElTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfQ0NBMV9FRF9FTl9ESVNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0NDQTFfRURfRU5fRElTX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX01BTl9NRUFTX0NPTVBMRVRFX01BU0sgKDB4MTAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUFOX01FQVNfQ09NUExFVEVfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUFOX01FQVNfQ09NUExFVEUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NQU5fTUVBU19DT01QTEVURV9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUFOX01FQVNfQ09NUExFVEVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUFOX0FBX01BVENIX01BU0sgKDB4MjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUFOX0FBX01BVENIX1NISUZUICgyMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX01BTl9BQV9NQVRDSCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX01BTl9BQV9NQVRDSF9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUFOX0FBX01BVENIX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1NOUl9MUUlfV0VJR0hUX01BU0sgKDB4RjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1NOUl9MUUlfV0VJR0hUX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1NOUl9MUUlfV0VJR0hUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU05SX0xRSV9XRUlHSFRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1NOUl9MUUlfV0VJR0hUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9CSUFTX01BU0sgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9MUUlfQklBU19TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9MUUlfQklBUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9CSUFTX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9MUUlfQklBU19NQVNLKQorCisvKiEgQG5hbWUgQ0NBX0VEX0xRSV9TVEFUXzAgLSBSWF9ESUcgQ0NBIEVEIExRSSBTdGF0dXMgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9MUUlfT1VUX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9MUUlfT1VUX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfTFFJX09VVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0xRSV9PVVRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0xRSV9PVVRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfRURfT1VUX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0VEX09VVF9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0VEX09VVCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9FRF9PVVRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0VEX09VVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9TTlJfT1VUX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfU05SX09VVF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9TTlJfT1VUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfU05SX09VVF9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfU05SX09VVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9DQ0ExX1NUQVRFX01BU0sgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0NDQTFfU1RBVEVfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfQ0NBMV9TVEFURSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0NDQTFfU1RBVEVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0NDQTFfU1RBVEVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfTUVBU19DT01QTEVURV9NQVNLICgweDIwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9NRUFTX0NPTVBMRVRFX1NISUZUICgyNVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX01FQVNfQ09NUExFVEUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9NRUFTX0NPTVBMRVRFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9NRUFTX0NPTVBMRVRFX01BU0spCisKKy8qISBAbmFtZSBSWF9DSEZfQ09FRl8wIC0gUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCAwICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzBfUlhfQ0hfRklMVF9IMF9NQVNLICgweDNGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMF9SWF9DSF9GSUxUX0gwX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMF9SWF9DSF9GSUxUX0gwKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMF9SWF9DSF9GSUxUX0gwX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8wX1JYX0NIX0ZJTFRfSDBfTUFTSykKKworLyohIEBuYW1lIFJYX0NIRl9DT0VGXzEgLSBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDEgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMV9SWF9DSF9GSUxUX0gxX01BU0sgKDB4M0ZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8xX1JYX0NIX0ZJTFRfSDFfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8xX1JYX0NIX0ZJTFRfSDEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8xX1JYX0NIX0ZJTFRfSDFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzFfUlhfQ0hfRklMVF9IMV9NQVNLKQorCisvKiEgQG5hbWUgUlhfQ0hGX0NPRUZfMiAtIFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgMiAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8yX1JYX0NIX0ZJTFRfSDJfTUFTSyAoMHg3RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzJfUlhfQ0hfRklMVF9IMl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzJfUlhfQ0hfRklMVF9IMih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzJfUlhfQ0hfRklMVF9IMl9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMl9SWF9DSF9GSUxUX0gyX01BU0spCisKKy8qISBAbmFtZSBSWF9DSEZfQ09FRl8zIC0gUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCAzICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzNfUlhfQ0hfRklMVF9IM19NQVNLICgweDdGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfM19SWF9DSF9GSUxUX0gzX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfM19SWF9DSF9GSUxUX0gzKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfM19SWF9DSF9GSUxUX0gzX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8zX1JYX0NIX0ZJTFRfSDNfTUFTSykKKworLyohIEBuYW1lIFJYX0NIRl9DT0VGXzQgLSBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDQgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfNF9SWF9DSF9GSUxUX0g0X01BU0sgKDB4N0ZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl80X1JYX0NIX0ZJTFRfSDRfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl80X1JYX0NIX0ZJTFRfSDQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl80X1JYX0NIX0ZJTFRfSDRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzRfUlhfQ0hfRklMVF9INF9NQVNLKQorCisvKiEgQG5hbWUgUlhfQ0hGX0NPRUZfNSAtIFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgNSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl81X1JYX0NIX0ZJTFRfSDVfTUFTSyAoMHg3RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzVfUlhfQ0hfRklMVF9INV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzVfUlhfQ0hfRklMVF9INSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzVfUlhfQ0hfRklMVF9INV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfNV9SWF9DSF9GSUxUX0g1X01BU0spCisKKy8qISBAbmFtZSBSWF9DSEZfQ09FRl82IC0gUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCA2ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzZfUlhfQ0hfRklMVF9INl9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfNl9SWF9DSF9GSUxUX0g2X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfNl9SWF9DSF9GSUxUX0g2KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfNl9SWF9DSF9GSUxUX0g2X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl82X1JYX0NIX0ZJTFRfSDZfTUFTSykKKworLyohIEBuYW1lIFJYX0NIRl9DT0VGXzcgLSBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDcgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfN19SWF9DSF9GSUxUX0g3X01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl83X1JYX0NIX0ZJTFRfSDdfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl83X1JYX0NIX0ZJTFRfSDcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl83X1JYX0NIX0ZJTFRfSDdfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzdfUlhfQ0hfRklMVF9IN19NQVNLKQorCisvKiEgQG5hbWUgUlhfQ0hGX0NPRUZfOCAtIFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgOCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl84X1JYX0NIX0ZJTFRfSDhfTUFTSyAoMHgxRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl84X1JYX0NIX0ZJTFRfSDhfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl84X1JYX0NIX0ZJTFRfSDgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl84X1JYX0NIX0ZJTFRfSDhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzhfUlhfQ0hfRklMVF9IOF9NQVNLKQorCisvKiEgQG5hbWUgUlhfQ0hGX0NPRUZfOSAtIFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgOSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl85X1JYX0NIX0ZJTFRfSDlfTUFTSyAoMHgxRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl85X1JYX0NIX0ZJTFRfSDlfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl85X1JYX0NIX0ZJTFRfSDkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl85X1JYX0NIX0ZJTFRfSDlfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzlfUlhfQ0hfRklMVF9IOV9NQVNLKQorCisvKiEgQG5hbWUgUlhfQ0hGX0NPRUZfMTAgLSBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDEwICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzEwX1JYX0NIX0ZJTFRfSDEwX01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMTBfUlhfQ0hfRklMVF9IMTBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8xMF9SWF9DSF9GSUxUX0gxMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzEwX1JYX0NIX0ZJTFRfSDEwX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8xMF9SWF9DSF9GSUxUX0gxMF9NQVNLKQorCisvKiEgQG5hbWUgUlhfQ0hGX0NPRUZfMTEgLSBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDExICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzExX1JYX0NIX0ZJTFRfSDExX01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMTFfUlhfQ0hfRklMVF9IMTFfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8xMV9SWF9DSF9GSUxUX0gxMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzExX1JYX0NIX0ZJTFRfSDExX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8xMV9SWF9DSF9GSUxUX0gxMV9NQVNLKQorCisvKiEgQG5hbWUgQUdDX01BTl9BR0NfSURYIC0gQUdDIE1hbnVhbCBBR0MgSW5kZXggKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX01BTl9BR0NfSURYX0FHQ19NQU5fSURYX01BU0sgKDB4MUYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX01BTl9BR0NfSURYX0FHQ19NQU5fSURYX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19NQU5fQUdDX0lEWF9BR0NfTUFOX0lEWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19NQU5fQUdDX0lEWF9BR0NfTUFOX0lEWF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX01BTl9BR0NfSURYX0FHQ19NQU5fSURYX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19NQU5fQUdDX0lEWF9BR0NfTUFOX0lEWF9FTl9NQVNLICgweDEwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfTUFOX0FHQ19JRFhfQUdDX01BTl9JRFhfRU5fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX01BTl9BR0NfSURYX0FHQ19NQU5fSURYX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX01BTl9BR0NfSURYX0FHQ19NQU5fSURYX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfTUFOX0FHQ19JRFhfQUdDX01BTl9JRFhfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX01BTl9BR0NfSURYX0FHQ19EQ09DX1NUQVJUX1BUX01BU0sgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19NQU5fQUdDX0lEWF9BR0NfRENPQ19TVEFSVF9QVF9TSElGVCAoMjVVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfTUFOX0FHQ19JRFhfQUdDX0RDT0NfU1RBUlRfUFQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfTUFOX0FHQ19JRFhfQUdDX0RDT0NfU1RBUlRfUFRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19NQU5fQUdDX0lEWF9BR0NfRENPQ19TVEFSVF9QVF9NQVNLKQorCisvKiEgQG5hbWUgRENfUkVTSURfQ1RSTCAtIERDIFJlc2lkdWFsIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9OV0lOX01BU0sgKDB4N0ZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX05XSU5fU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX05XSU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX05XSU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTldJTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0lURVJfRlJFRVpFX01BU0sgKDB4RjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9JVEVSX0ZSRUVaRV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfSVRFUl9GUkVFWkUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0lURVJfRlJFRVpFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0lURVJfRlJFRVpFX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfQUxQSEFfTUFTSyAoMHg3MDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9BTFBIQV9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0FMUEhBKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9BTFBIQV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9BTFBIQV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0RMWV9NQVNLICgweDcwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9ETFlfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9ETFkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0RMWV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9ETFlfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9FWFRfRENfRU5fTUFTSyAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0VYVF9EQ19FTl9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0VYVF9EQ19FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRVhUX0RDX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0VYVF9EQ19FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX01JTl9BR0NfSURYX01BU0sgKDB4MUYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX01JTl9BR0NfSURYX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTUlOX0FHQ19JRFgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX01JTl9BR0NfSURYX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX01JTl9BR0NfSURYX01BU0spCisKKy8qISBAbmFtZSBEQ19SRVNJRF9FU1QgLSBEQyBSZXNpZHVhbCBFc3RpbWF0ZSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9FU1RfRENfUkVTSURfT0ZGU0VUX0lfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfRVNUX0RDX1JFU0lEX09GRlNFVF9JX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfRVNUX0RDX1JFU0lEX09GRlNFVF9JKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENfUkVTSURfRVNUX0RDX1JFU0lEX09GRlNFVF9JX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9FU1RfRENfUkVTSURfT0ZGU0VUX0lfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfRVNUX0RDX1JFU0lEX09GRlNFVF9RX01BU0sgKDB4MUZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9FU1RfRENfUkVTSURfT0ZGU0VUX1FfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfRVNUX0RDX1JFU0lEX09GRlNFVF9RKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENfUkVTSURfRVNUX0RDX1JFU0lEX09GRlNFVF9RX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9FU1RfRENfUkVTSURfT0ZGU0VUX1FfTUFTSykKKworLyohIEBuYW1lIFJYX1JDQ0FMX0NUUkwwIC0gUlggUkMgQ2FsaWJyYXRpb24gQ29udHJvbDAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVF9NQVNLICgweEZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTF9NQVNLICgweDFGMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUxfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTX01BU0sgKDB4MjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJU19TSElGVCAoOVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFlfTUFTSyAoMHgzMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWV9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVl9NQVNLICgweDgwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVl9TSElGVCAoMTVVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUX01BU0sgKDB4RjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUxfTUFTSyAoMHgxRjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTF9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTX01BU0sgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVNfU0hJRlQgKDI1VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVNfTUFTSykKKworLyohIEBuYW1lIFJYX1JDQ0FMX0NUUkwxIC0gUlggUkMgQ2FsaWJyYXRpb24gQ29udHJvbDEgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVF9NQVNLICgweEZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTF9NQVNLICgweDFGMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUxfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTX01BU0sgKDB4MjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJU19TSElGVCAoOVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUX01BU0sgKDB4RjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTF9NQVNLICgweDFGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTF9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJU19NQVNLICgweDIwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJU19TSElGVCAoMjVVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJU19NQVNLKQorCisvKiEgQG5hbWUgUlhfUkNDQUxfU1RBVCAtIFJYIFJDIENhbGlicmF0aW9uIFN0YXR1cyAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX1JDQ0FMX0NPREVfTUFTSyAoMHgxRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfUkNDQUxfQ09ERV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfUkNDQUxfQ09ERSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX1JDQ0FMX0NPREVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfUkNDQUxfQ09ERV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX0FEQ19SQ0NBTF9NQVNLICgweDNFMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQURDX1JDQ0FMX1NISUZUICg1VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9BRENfUkNDQUwoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQURDX1JDQ0FMX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX0FEQ19SQ0NBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX0JCQTJfUkNDQUxfTUFTSyAoMHg3QzAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9CQkEyX1JDQ0FMX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQkJBMl9SQ0NBTCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX0JCQTJfUkNDQUxfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQkJBMl9SQ0NBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX0JCQV9SQ0NBTF9NQVNLICgweDFGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQkJBX1JDQ0FMX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQkJBX1JDQ0FMKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX0JCQV9SQ0NBTF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9CQkFfUkNDQUxfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9UWkFfUkNDQUxfTUFTSyAoMHgzRTAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9UWkFfUkNDQUxfU0hJRlQgKDIxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9UWkFfUkNDQUwoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfVFpBX1JDQ0FMX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX1RaQV9SQ0NBTF9NQVNLKQorCisvKiEgQG5hbWUgQVVYUExMX0ZDQUxfQ1RSTCAtIEF1eCBQTEwgRnJlcXVlbmN5IENhbGlicmF0aW9uIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9EQUNfQ0FMX0FESlVTVF9NQU5VQUxfTUFTSyAoMHg3RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfREFDX0NBTF9BREpVU1RfTUFOVUFMX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9EQUNfQ0FMX0FESlVTVF9NQU5VQUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0RBQ19DQUxfQURKVVNUX01BTlVBTF9TSElGVCkpICYgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9EQUNfQ0FMX0FESlVTVF9NQU5VQUxfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9BVVhQTExfREFDX0NBTF9BREpVU1RfRElTX01BU0sgKDB4ODBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0FVWFBMTF9EQUNfQ0FMX0FESlVTVF9ESVNfU0hJRlQgKDdVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0FVWFBMTF9EQUNfQ0FMX0FESlVTVF9ESVMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0FVWFBMTF9EQUNfQ0FMX0FESlVTVF9ESVNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfQVVYUExMX0RBQ19DQUxfQURKVVNUX0RJU19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfUlVOX0NOVF9NQVNLICgweDEwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfRkNBTF9SVU5fQ05UX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9GQ0FMX1JVTl9DTlQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfUlVOX0NOVF9TSElGVCkpICYgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9GQ0FMX1JVTl9DTlRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9GQ0FMX0NPTVBfSU5WX01BU0sgKDB4MjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9GQ0FMX0NPTVBfSU5WX1NISUZUICg5VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9GQ0FMX0NPTVBfSU5WKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9GQ0FMX0NPTVBfSU5WX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfQ09NUF9JTlZfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9GQ0FMX1NNUF9ETFlfTUFTSyAoMHhDMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfU01QX0RMWV9TSElGVCAoMTBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfU01QX0RMWSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfRkNBTF9TTVBfRExZX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfU01QX0RMWV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0RBQ19DQUxfQURKVVNUX01BU0sgKDB4N0YwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9EQUNfQ0FMX0FESlVTVF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0RBQ19DQUxfQURKVVNUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9EQUNfQ0FMX0FESlVTVF9TSElGVCkpICYgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9EQUNfQ0FMX0FESlVTVF9NQVNLKQorCisvKiEgQG5hbWUgQVVYUExMX0ZDQUxfQ05UNiAtIEF1eCBQTEwgRnJlcXVlbmN5IENhbGlicmF0aW9uIENvdW50IDYgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNl9GQ0FMX0NPVU5UXzZfTUFTSyAoMHgzRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ2X0ZDQUxfQ09VTlRfNl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDZfRkNBTF9DT1VOVF82KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNl9GQ0FMX0NPVU5UXzZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDZfRkNBTF9DT1VOVF82X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDZfRkNBTF9CRVNURElGRl9NQVNLICgweDNGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ2X0ZDQUxfQkVTVERJRkZfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNl9GQ0FMX0JFU1RESUZGKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNl9GQ0FMX0JFU1RESUZGX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ2X0ZDQUxfQkVTVERJRkZfTUFTSykKKworLyohIEBuYW1lIEFVWFBMTF9GQ0FMX0NOVDVfNCAtIEF1eCBQTEwgRnJlcXVlbmN5IENhbGlicmF0aW9uIENvdW50IDUgYW5kIDQgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNV80X0ZDQUxfQ09VTlRfNF9NQVNLICgweDNGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDVfNF9GQ0FMX0NPVU5UXzRfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ1XzRfRkNBTF9DT1VOVF80KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNV80X0ZDQUxfQ09VTlRfNF9TSElGVCkpICYgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNV80X0ZDQUxfQ09VTlRfNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ1XzRfRkNBTF9DT1VOVF81X01BU0sgKDB4M0ZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDVfNF9GQ0FMX0NPVU5UXzVfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNV80X0ZDQUxfQ09VTlRfNSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDVfNF9GQ0FMX0NPVU5UXzVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDVfNF9GQ0FMX0NPVU5UXzVfTUFTSykKKworLyohIEBuYW1lIEFVWFBMTF9GQ0FMX0NOVDNfMiAtIEF1eCBQTEwgRnJlcXVlbmN5IENhbGlicmF0aW9uIENvdW50IDMgYW5kIDIgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UM18yX0ZDQUxfQ09VTlRfMl9NQVNLICgweDNGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDNfMl9GQ0FMX0NPVU5UXzJfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQzXzJfRkNBTF9DT1VOVF8yKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UM18yX0ZDQUxfQ09VTlRfMl9TSElGVCkpICYgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UM18yX0ZDQUxfQ09VTlRfMl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQzXzJfRkNBTF9DT1VOVF8zX01BU0sgKDB4M0ZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDNfMl9GQ0FMX0NPVU5UXzNfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UM18yX0ZDQUxfQ09VTlRfMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDNfMl9GQ0FMX0NPVU5UXzNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDNfMl9GQ0FMX0NPVU5UXzNfTUFTSykKKworLyohIEBuYW1lIEFVWFBMTF9GQ0FMX0NOVDFfMCAtIEF1eCBQTEwgRnJlcXVlbmN5IENhbGlicmF0aW9uIENvdW50IDEgYW5kIDAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UMV8wX0ZDQUxfQ09VTlRfMF9NQVNLICgweDNGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDFfMF9GQ0FMX0NPVU5UXzBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQxXzBfRkNBTF9DT1VOVF8wKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UMV8wX0ZDQUxfQ09VTlRfMF9TSElGVCkpICYgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UMV8wX0ZDQUxfQ09VTlRfMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQxXzBfRkNBTF9DT1VOVF8xX01BU0sgKDB4M0ZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDFfMF9GQ0FMX0NPVU5UXzFfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UMV8wX0ZDQUxfQ09VTlRfMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDFfMF9GQ0FMX0NPVU5UXzFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDFfMF9GQ0FMX0NPVU5UXzFfTUFTSykKKworLyohIEBuYW1lIFJYRElHX0RGVCAtIFJYRElHIERGVCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfRlJFUV9NQVNLICgweDdVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfRlJFUV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9GUkVRKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfRlJFUV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX0ZSRVFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX1NDQUxFX01BU0sgKDB4OFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9TQ0FMRV9TSElGVCAoM1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9TQ0FMRSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfU0NBTEVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9TQ0FMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfVFpBX0VOX01BU0sgKDB4MTBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfVFpBX0VOX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX1RaQV9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9UWkFfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9UWkFfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX0JCQV9FTl9NQVNLICgweDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX0JCQV9FTl9TSElGVCAoNVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9CQkFfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfQkJBX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfQkJBX0VOX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1JYX0RJR19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFhDVlJfUlhfRElHIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgWENWUl9SWF9ESUcgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNUMwMDB1KQorLyoqIFBlcmlwaGVyYWwgWENWUl9SWF9ESUcgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFhDVlJfUlhfRElHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChYQ1ZSX1JYX0RJR19UeXBlICopWENWUl9SWF9ESUdfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1JYX0RJRyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgeyBYQ1ZSX1JYX0RJR19CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1JYX0RJRyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICB7IFhDVlJfUlhfRElHIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1JYX0RJR19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfVFNNIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9UU01fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgWENWUl9UU00gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFhDVlJfVFNNIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNDRUlWRVIgU0VRVUVOQ0UgTUFOQUdFUiBDT05UUk9MLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IEVORF9PRl9TRVE7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU00gRU5EIE9GIFNFUVVFTkNFLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IE9WUkQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU00gT1ZFUlJJREUgUkVHSVNURVIgMCwgb2Zmc2V0OiAweDggKi8KKyAgX19JTyB1aW50MzJfdCBPVlJEMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNNIE9WRVJSSURFIFJFR0lTVEVSIDEsIG9mZnNldDogMHhDICovCisgIF9fSU8gdWludDMyX3QgT1ZSRDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTSBPVkVSUklERSBSRUdJU1RFUiAyLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50MzJfdCBPVlJEMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNNIE9WRVJSSURFIFJFR0lTVEVSIDMsIG9mZnNldDogMHgxNCAqLworICBfX0lPIHVpbnQzMl90IFBBX1BPV0VSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQQSBQT1dFUiwgb2Zmc2V0OiAweDE4ICovCisgIF9fSU8gdWludDMyX3QgUEFfUkFNUF9UQkwwOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFBBIFJBTVAgVEFCTEUgMCwgb2Zmc2V0OiAweDFDICovCisgIF9fSU8gdWludDMyX3QgUEFfUkFNUF9UQkwxOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFBBIFJBTVAgVEFCTEUgMSwgb2Zmc2V0OiAweDIwICovCisgIF9fSU8gdWludDMyX3QgUkVDWUNMRV9DT1VOVDsgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTSBSRUNZQ0xFIENPVU5ULCBvZmZzZXQ6IDB4MjQgKi8KKyAgX19JTyB1aW50MzJfdCBGQVNUX0NUUkwxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNNIEZBU1QgV0FSTVVQIENPTlRST0wgUkVHSVNURVIgMSwgb2Zmc2V0OiAweDI4ICovCisgIF9fSU8gdWludDMyX3QgRkFTVF9DVFJMMjsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTSBGQVNUIFdBUk1VUCBDT05UUk9MIFJFR0lTVEVSIDIsIG9mZnNldDogMHgyQyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMDAsIG9mZnNldDogMHgzMCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMDEsIG9mZnNldDogMHgzNCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMDIsIG9mZnNldDogMHgzOCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMDMsIG9mZnNldDogMHgzQyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMDQsIG9mZnNldDogMHg0MCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzA1OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMDUsIG9mZnNldDogMHg0NCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzA2OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMDYsIG9mZnNldDogMHg0OCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzA3OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMDcsIG9mZnNldDogMHg0QyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzA4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMDgsIG9mZnNldDogMHg1MCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzA5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMDksIG9mZnNldDogMHg1NCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMTAsIG9mZnNldDogMHg1OCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzExOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMTEsIG9mZnNldDogMHg1QyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzEyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMTIsIG9mZnNldDogMHg2MCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzEzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMTMsIG9mZnNldDogMHg2NCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzE0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMTQsIG9mZnNldDogMHg2OCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzE1OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMTUsIG9mZnNldDogMHg2QyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzE2OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMTYsIG9mZnNldDogMHg3MCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzE3OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMTcsIG9mZnNldDogMHg3NCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzE4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMTgsIG9mZnNldDogMHg3OCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzE5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMTksIG9mZnNldDogMHg3QyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzIwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMjAsIG9mZnNldDogMHg4MCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzIxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMjEsIG9mZnNldDogMHg4NCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzIyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMjIsIG9mZnNldDogMHg4OCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzIzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMjMsIG9mZnNldDogMHg4QyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzI0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMjQsIG9mZnNldDogMHg5MCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzI1OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMjUsIG9mZnNldDogMHg5NCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzI2OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMjYsIG9mZnNldDogMHg5OCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzI3OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMjcsIG9mZnNldDogMHg5QyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzI4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMjgsIG9mZnNldDogMHhBMCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzI5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMjksIG9mZnNldDogMHhBNCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzMwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMzAsIG9mZnNldDogMHhBOCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzMxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMzEsIG9mZnNldDogMHhBQyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMzIsIG9mZnNldDogMHhCMCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzMzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMzMsIG9mZnNldDogMHhCNCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzM0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMzQsIG9mZnNldDogMHhCOCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzM1OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMzUsIG9mZnNldDogMHhCQyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzM2OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMzYsIG9mZnNldDogMHhDMCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzM3OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMzcsIG9mZnNldDogMHhDNCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzM4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMzgsIG9mZnNldDogMHhDOCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzM5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HMzksIG9mZnNldDogMHhDQyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNDAsIG9mZnNldDogMHhEMCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNDEsIG9mZnNldDogMHhENCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNDIsIG9mZnNldDogMHhEOCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNDMsIG9mZnNldDogMHhEQyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzQ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNDQsIG9mZnNldDogMHhFMCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzQ1OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNDUsIG9mZnNldDogMHhFNCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzQ2OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNDYsIG9mZnNldDogMHhFOCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzQ3OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNDcsIG9mZnNldDogMHhFQyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzQ4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNDgsIG9mZnNldDogMHhGMCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzQ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNDksIG9mZnNldDogMHhGNCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzUwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNTAsIG9mZnNldDogMHhGOCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzUxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNTEsIG9mZnNldDogMHhGQyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzUyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNTIsIG9mZnNldDogMHgxMDAgKi8KKyAgX19JTyB1aW50MzJfdCBUSU1JTkc1MzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNNX1RJTUlORzUzLCBvZmZzZXQ6IDB4MTA0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc1NCwgb2Zmc2V0OiAweDEwOCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzU1OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNTUsIG9mZnNldDogMHgxMEMgKi8KKyAgX19JTyB1aW50MzJfdCBUSU1JTkc1NjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNNX1RJTUlORzU2LCBvZmZzZXQ6IDB4MTEwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNTc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc1Nywgb2Zmc2V0OiAweDExNCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzU4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNTgsIG9mZnNldDogMHgxMTggKi8KK30gWENWUl9UU01fVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9UU00gUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1RTTV9SZWdpc3Rlcl9NYXNrcyBYQ1ZSX1RTTSBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgQ1RSTCAtIFRSQU5TQ0VJVkVSIFNFUVVFTkNFIE1BTkFHRVIgQ09OVFJPTCAqLworI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0ZPUkNFX1RYX0VOX01BU0sgICAgICAgICAgICgweDRVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0ZPUkNFX1RYX0VOX1NISUZUICAgICAgICAgICgyVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9GT1JDRV9UWF9FTih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0NUUkxfRk9SQ0VfVFhfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX0NUUkxfRk9SQ0VfVFhfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9GT1JDRV9SWF9FTl9NQVNLICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9GT1JDRV9SWF9FTl9TSElGVCAgICAgICAgICAoM1UpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfRk9SQ0VfUlhfRU4oeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9DVFJMX0ZPUkNFX1JYX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9DVFJMX0ZPUkNFX1JYX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfUEFfUkFNUF9TRUxfTUFTSyAgICAgICAgICAgKDB4MzBVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX1BBX1JBTVBfU0VMX1NISUZUICAgICAgICAgICg0VSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9QQV9SQU1QX1NFTCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0NUUkxfUEFfUkFNUF9TRUxfU0hJRlQpKSAmIFhDVlJfVFNNX0NUUkxfUEFfUkFNUF9TRUxfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9EQVRBX1BBRERJTkdfRU5fTUFTSyAgICAgICAoMHhDMFUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfREFUQV9QQURESU5HX0VOX1NISUZUICAgICAgKDZVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0RBVEFfUEFERElOR19FTih4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fQ1RSTF9EQVRBX1BBRERJTkdfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX0NUUkxfREFUQV9QQURESU5HX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfVFNNX0lSUTBfRU5fTUFTSyAgICAgICAgICAgKDB4MTAwVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9UU01fSVJRMF9FTl9TSElGVCAgICAgICAgICAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfVFNNX0lSUTBfRU4oeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9DVFJMX1RTTV9JUlEwX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9DVFJMX1RTTV9JUlEwX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfVFNNX0lSUTFfRU5fTUFTSyAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9UU01fSVJRMV9FTl9TSElGVCAgICAgICAgICAoOVUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfVFNNX0lSUTFfRU4oeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9DVFJMX1RTTV9JUlExX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9DVFJMX1RTTV9JUlExX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfUkFNUF9ETl9ERUxBWV9NQVNLICAgICAgICAgKDB4RjAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfUkFNUF9ETl9ERUxBWV9TSElGVCAgICAgICAgKDEyVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9SQU1QX0ROX0RFTEFZKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0NUUkxfUkFNUF9ETl9ERUxBWV9TSElGVCkpICYgWENWUl9UU01fQ1RSTF9SQU1QX0ROX0RFTEFZX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfVFhfQUJPUlRfRElTX01BU0sgICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX1RYX0FCT1JUX0RJU19TSElGVCAgICAgICAgICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfVFhfQUJPUlRfRElTKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9DVFJMX1RYX0FCT1JUX0RJU19TSElGVCkpICYgWENWUl9UU01fQ1RSTF9UWF9BQk9SVF9ESVNfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9SWF9BQk9SVF9ESVNfTUFTSyAgICAgICAgICAoMHgyMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfUlhfQUJPUlRfRElTX1NISUZUICAgICAgICAgKDE3VSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9SWF9BQk9SVF9ESVMoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0NUUkxfUlhfQUJPUlRfRElTX1NISUZUKSkgJiBYQ1ZSX1RTTV9DVFJMX1JYX0FCT1JUX0RJU19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0NUVU5FX01BU0sgICAgICAgICgweDQwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9BQk9SVF9PTl9DVFVORV9TSElGVCAgICAgICAoMThVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0NUVU5FKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fQ1RSTF9BQk9SVF9PTl9DVFVORV9TSElGVCkpICYgWENWUl9UU01fQ1RSTF9BQk9SVF9PTl9DVFVORV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0NZQ0xFX1NMSVBfTUFTSyAgICgweDgwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9BQk9SVF9PTl9DWUNMRV9TTElQX1NISUZUICAoMTlVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0NZQ0xFX1NMSVAoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fQ1RSTF9BQk9SVF9PTl9DWUNMRV9TTElQX1NISUZUKSkgJiBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0NZQ0xFX1NMSVBfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9BQk9SVF9PTl9GUkVRX1RBUkdfTUFTSyAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0ZSRVFfVEFSR19TSElGVCAgICgyMFUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfQUJPUlRfT05fRlJFUV9UQVJHKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0ZSRVFfVEFSR19TSElGVCkpICYgWENWUl9UU01fQ1RSTF9BQk9SVF9PTl9GUkVRX1RBUkdfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9CS1BUX01BU0sgICAgICAgICAgICAgICAgICAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfQktQVF9TSElGVCAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9CS1BUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0NUUkxfQktQVF9TSElGVCkpICYgWENWUl9UU01fQ1RSTF9CS1BUX01BU0spCisKKy8qISBAbmFtZSBFTkRfT0ZfU0VRIC0gVFNNIEVORCBPRiBTRVFVRU5DRSAqLworI2RlZmluZSBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVV9NQVNLICAgICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV1VfU0hJRlQgICAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1RYX1dVKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVV9TSElGVCkpICYgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV1VfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV0RfTUFTSyAgICAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV0RfU0hJRlQgICAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1RYX1dEKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XRF9TSElGVCkpICYgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV0RfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV1VfTUFTSyAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9TSElGVCAgICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9TSElGVCkpICYgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV1VfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV0RfTUFTSyAgICAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dEX1NISUZUICAgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV0QoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dEX1NISUZUKSkgJiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XRF9NQVNLKQorCisvKiEgQG5hbWUgT1ZSRDAgLSBUU00gT1ZFUlJJREUgUkVHSVNURVIgMCAqLworI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fSEZfRU5fT1ZSRF9FTl9NQVNLICgweDFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fSEZfRU5fT1ZSRF9FTl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19IRl9FTl9PVlJEX0VOKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fSEZfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX0hGX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0hGX0VOX09WUkRfTUFTSyAgICAoMHgyVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0hGX0VOX09WUkRfU0hJRlQgICAoMVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19IRl9FTl9PVlJEKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fSEZfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX0hGX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0FEQ0RBQ19FTl9PVlJEX0VOX01BU0sgKDB4NFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19BRENEQUNfRU5fT1ZSRF9FTl9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19BRENEQUNfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX0xET19BRENEQUNfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX0FEQ0RBQ19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19BRENEQUNfRU5fT1ZSRF9NQVNLICgweDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkRfU0hJRlQgKDNVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkQoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX0FEQ0RBQ19FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0JCQV9FTl9PVlJEX0VOX01BU0sgKDB4MTBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQkJBX0VOX09WUkRfRU5fU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQkJBX0VOX09WUkRfRU4oeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX0JCQV9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQkJBX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0JCQV9FTl9PVlJEX01BU0sgICAoMHgyMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19CQkFfRU5fT1ZSRF9TSElGVCAgKDVVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQkJBX0VOX09WUkQoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX0JCQV9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQkJBX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1BEX0VOX09WUkRfRU5fTUFTSyAoMHg0MFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19QRF9FTl9PVlJEX0VOX1NISUZUICg2VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1BEX0VOX09WUkRfRU4oeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX0xET19QRF9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fUERfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fUERfRU5fT1ZSRF9NQVNLICAgICgweDgwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1BEX0VOX09WUkRfU0hJRlQgICAoN1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19QRF9FTl9PVlJEKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fUERfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX1BEX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfRU5fT1ZSRF9FTl9NQVNLICgweDEwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19GREJLX0VOX09WUkRfRU5fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19FTl9PVlJEX01BU0sgICgweDIwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19GREJLX0VOX09WUkRfU0hJRlQgKDlVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19FTl9PVlJEKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fRU5fT1ZSRF9FTl9NQVNLICgweDQwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19FTl9PVlJEX0VOX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19FTl9PVlJEX01BU0sgKDB4ODAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0VOX09WUkRfU0hJRlQgKDExVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0VOX09WUkQoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVlRSRUZfRU5fT1ZSRF9FTl9NQVNLICgweDEwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVlRSRUZfRU5fT1ZSRF9FTl9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVlRSRUZfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX0xET19WVFJFRl9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVlRSRUZfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVlRSRUZfRU5fT1ZSRF9NQVNLICgweDIwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVlRSRUZfRU5fT1ZSRF9TSElGVCAoMTNVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVlRSRUZfRU5fT1ZSRCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZUUkVGX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19WVFJFRl9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19GREJLX0JMRUVEX0VOX09WUkRfRU5fTUFTSyAoMHg0MDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfQkxFRURfRU5fT1ZSRF9FTl9TSElGVCAoMTRVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19CTEVFRF9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfQkxFRURfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfQkxFRURfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19CTEVFRF9FTl9PVlJEX01BU0sgKDB4ODAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19GREJLX0JMRUVEX0VOX09WUkRfU0hJRlQgKDE1VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfQkxFRURfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX0xET19GREJLX0JMRUVEX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19GREJLX0JMRUVEX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX09WUkRfRU5fTUFTSyAoMHgxMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19CTEVFRF9FTl9PVlJEX0VOX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19CTEVFRF9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19CTEVFRF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19CTEVFRF9FTl9PVlJEX01BU0sgKDB4MjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fT1ZSRF9TSElGVCAoMTdVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19CTEVFRF9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9PVlJEX0VOX01BU0sgKDB4NDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9PVlJEX0VOX1NISUZUICgxOFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX09WUkRfTUFTSyAoMHg4MDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX09WUkRfU0hJRlQgKDE5VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9PVlJEX0VOX01BU0sgKDB4MTAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9PVlJEX0VOX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fT1ZSRF9NQVNLICgweDIwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fT1ZSRF9TSElGVCAoMjFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX09WUkRfRU5fTUFTSyAoMHg0MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX09WUkRfRU5fU0hJRlQgKDIyVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9PVlJEX01BU0sgKDB4ODAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9PVlJEX1NISUZUICgyM1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfREFDX1JFRl9DTEtfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfREFDX1JFRl9DTEtfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfQVVYUExMX1JFRl9DTEtfRU5fT1ZSRF9FTl9NQVNLICgweDEwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0FVWFBMTF9SRUZfQ0xLX0VOX09WUkRfRU5fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9BVVhQTExfUkVGX0NMS19FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9BVVhQTExfUkVGX0NMS19FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0FVWFBMTF9SRUZfQ0xLX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9BVVhQTExfUkVGX0NMS19FTl9PVlJEX01BU0sgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfQVVYUExMX1JFRl9DTEtfRU5fT1ZSRF9TSElGVCAoMjVVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0FVWFBMTF9SRUZfQ0xLX0VOX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0FVWFBMTF9SRUZfQ0xLX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfQVVYUExMX1JFRl9DTEtfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fQVVUT1RVTkVfRU5fT1ZSRF9FTl9NQVNLICgweDQwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fQVVUT1RVTkVfRU5fT1ZSRF9FTl9TSElGVCAoMjZVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fQVVUT1RVTkVfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX1NZX1ZDT19BVVRPVFVORV9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fQVVUT1RVTkVfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fQVVUT1RVTkVfRU5fT1ZSRF9NQVNLICgweDgwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fQVVUT1RVTkVfRU5fT1ZSRF9TSElGVCAoMjdVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fQVVUT1RVTkVfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX1NZX1ZDT19BVVRPVFVORV9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fQVVUT1RVTkVfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9QRF9DWUNMRV9TTElQX0xEX0VOX09WUkRfRU5fTUFTSyAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1BEX0NZQ0xFX1NMSVBfTERfRU5fT1ZSRF9FTl9TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9QRF9DWUNMRV9TTElQX0xEX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9TWV9QRF9DWUNMRV9TTElQX0xEX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX1NZX1BEX0NZQ0xFX1NMSVBfTERfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9QRF9DWUNMRV9TTElQX0xEX0VOX09WUkRfTUFTSyAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1BEX0NZQ0xFX1NMSVBfTERfRU5fT1ZSRF9TSElGVCAoMjlVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9QRF9DWUNMRV9TTElQX0xEX0VOX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9TWV9QRF9DWUNMRV9TTElQX0xEX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX1NZX1BEX0NZQ0xFX1NMSVBfTERfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fRU5fT1ZSRF9FTl9NQVNLICAgICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfU1lfVkNPX0VOX09WUkRfRU5fU0hJRlQgICAoMzBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fRU5fT1ZSRF9FTih4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfU1lfVkNPX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19FTl9PVlJEX01BU0sgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fRU5fT1ZSRF9TSElGVCAgICAgICgzMVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19FTl9PVlJEKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfU1lfVkNPX0VOX09WUkRfTUFTSykKKworLyohIEBuYW1lIE9WUkQxIC0gVFNNIE9WRVJSSURFIFJFR0lTVEVSIDEgKi8KKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fUlhfQlVGX0VOX09WUkRfRU5fTUFTSyAoMHgxVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fUlhfQlVGX0VOX09WUkRfRU5fU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9CVUZfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0JVRl9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9CVUZfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9CVUZfRU5fT1ZSRF9NQVNLICgweDJVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9CVUZfRU5fT1ZSRF9TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0JVRl9FTl9PVlJEKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9CVUZfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfU1lfTE9fUlhfQlVGX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fVFhfQlVGX0VOX09WUkRfRU5fTUFTSyAoMHg0VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fVFhfQlVGX0VOX09WUkRfRU5fU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9CVUZfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0JVRl9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9CVUZfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9CVUZfRU5fT1ZSRF9NQVNLICgweDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9CVUZfRU5fT1ZSRF9TSElGVCAoM1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0JVRl9FTl9PVlJEKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9CVUZfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfU1lfTE9fVFhfQlVGX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9FTl9PVlJEX0VOX01BU0sgICAoMHgxMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fRU5fT1ZSRF9FTl9TSElGVCAgKDRVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9ESVZOX0VOX09WUkRfRU4oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9ESVZOX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9FTl9PVlJEX01BU0sgICAgICAoMHgyMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fRU5fT1ZSRF9TSElGVCAgICAgKDVVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9ESVZOX0VOX09WUkQoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9ESVZOX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9PVlJEX0VOX01BU0sgKDB4NDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX09WUkRfRU5fU0hJRlQgKDZVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX09WUkRfTUFTSyAoMHg4MFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9TSElGVCAoN1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX1BEX0VOX09WUkRfRU5fTUFTSyAgICAgKDB4MTAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfUERfRU5fT1ZSRF9FTl9TSElGVCAgICAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX1BEX0VOX09WUkRfRU4oeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX1BEX0VOX09WUkRfTUFTSyAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfUERfRU5fT1ZSRF9TSElGVCAgICAgICAoOVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX1BEX0VOX09WUkQoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX0RJVk5fRU5fT1ZSRF9FTl9NQVNLICgweDQwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX0RJVk5fRU5fT1ZSRF9FTl9TSElGVCAoMTBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19ESVZOX0VOX09WUkRfRU4oeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfU1lfTE9fRElWTl9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19ESVZOX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fRElWTl9FTl9PVlJEX01BU0sgICAoMHg4MDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19ESVZOX0VOX09WUkRfU0hJRlQgICgxMVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX0RJVk5fRU5fT1ZSRCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19ESVZOX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX0xPX0RJVk5fRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9FTl9PVlJEX0VOX01BU0sgICgweDEwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9FTl9PVlJEX0VOX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0VOX09WUkRfRU4oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0VOX09WUkRfTUFTSyAgICAgKDB4MjAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0VOX09WUkRfU0hJRlQgICAgKDEzVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fUlhfRU5fT1ZSRCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fVFhfRU5fT1ZSRF9FTl9NQVNLICAoMHg0MDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fVFhfRU5fT1ZSRF9FTl9TSElGVCAoMTRVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9FTl9PVlJEX0VOKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfU1lfTE9fVFhfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfU1lfTE9fVFhfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9FTl9PVlJEX01BU0sgICAgICgweDgwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9FTl9PVlJEX1NISUZUICAgICgxNVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0VOX09WUkQoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fQ0FMX0VOX09WUkRfRU5fTUFTSyAoMHgxMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fQ0FMX0VOX09WUkRfRU5fU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9DQUxfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fQ0FMX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fQ0FMX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9DQUxfRU5fT1ZSRF9NQVNLICAoMHgyMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fQ0FMX0VOX09WUkRfU0hJRlQgKDE3VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9DQUxfRU5fT1ZSRCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fQ0FMX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fQ0FMX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfTUlYRVJfRU5fT1ZSRF9FTl9NQVNLICAoMHg0MDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX01JWEVSX0VOX09WUkRfRU5fU0hJRlQgKDE4VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfTUlYRVJfRU5fT1ZSRF9FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1JYX01JWEVSX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1JYX01JWEVSX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfTUlYRVJfRU5fT1ZSRF9NQVNLICAgICAoMHg4MDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX01JWEVSX0VOX09WUkRfU0hJRlQgICAgKDE5VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfTUlYRVJfRU5fT1ZSRCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1JYX01JWEVSX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1JYX01JWEVSX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfVFhfUEFfRU5fT1ZSRF9FTl9NQVNLICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9UWF9QQV9FTl9PVlJEX0VOX1NISUZUICAgICgyMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1RYX1BBX0VOX09WUkRfRU4oeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9UWF9QQV9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9UWF9QQV9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1RYX1BBX0VOX09WUkRfTUFTSyAgICAgICAgKDB4MjAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfVFhfUEFfRU5fT1ZSRF9TSElGVCAgICAgICAoMjFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9UWF9QQV9FTl9PVlJEKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfVFhfUEFfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfVFhfUEFfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfSV9FTl9PVlJEX0VOX01BU0sgICgweDQwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19JX0VOX09WUkRfRU5fU0hJRlQgKDIyVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQURDX0lfRU5fT1ZSRF9FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1JYX0FEQ19JX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19JX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQURDX0lfRU5fT1ZSRF9NQVNLICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfSV9FTl9PVlJEX1NISUZUICAgICgyM1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19JX0VOX09WUkQoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfSV9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfSV9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19RX0VOX09WUkRfRU5fTUFTSyAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19RX0VOX09WUkRfRU5fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQURDX1FfRU5fT1ZSRF9FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1JYX0FEQ19RX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19RX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQURDX1FfRU5fT1ZSRF9NQVNLICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQURDX1FfRU5fT1ZSRF9TSElGVCAgICAoMjVVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUV9FTl9PVlJEKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfUlhfQURDX1FfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfUlhfQURDX1FfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUkVTRVRfRU5fT1ZSRF9FTl9NQVNLICgweDQwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUkVTRVRfRU5fT1ZSRF9FTl9TSElGVCAoMjZVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUkVTRVRfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1JYX0FEQ19SRVNFVF9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUkVTRVRfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUkVTRVRfRU5fT1ZSRF9NQVNLICgweDgwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUkVTRVRfRU5fT1ZSRF9TSElGVCAoMjdVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUkVTRVRfRU5fT1ZSRCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfUlhfQURDX1JFU0VUX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19SRVNFVF9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9JX0VOX09WUkRfRU5fTUFTSyAgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfSV9FTl9PVlJEX0VOX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9JX0VOX09WUkRfRU4oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfSV9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfSV9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9JX0VOX09WUkRfTUFTSyAgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfSV9FTl9PVlJEX1NISUZUICAgICgyOVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9JX0VOX09WUkQoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfSV9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfSV9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9RX0VOX09WUkRfRU5fTUFTSyAgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfUV9FTl9PVlJEX0VOX1NISUZUICgzMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9RX0VOX09WUkRfRU4oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfUV9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfUV9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9RX0VOX09WUkRfTUFTSyAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfUV9FTl9PVlJEX1NISUZUICAgICgzMVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9RX0VOX09WUkQoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfUV9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9SWF9CQkFfUV9FTl9PVlJEX01BU0spCisKKy8qISBAbmFtZSBPVlJEMiAtIFRTTSBPVkVSUklERSBSRUdJU1RFUiAyICovCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9QREVUX0VOX09WUkRfRU5fTUFTSyAoMHgxVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfQkJBX1BERVRfRU5fT1ZSRF9FTl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9QREVUX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfUERFVF9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfUERFVF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9QREVUX0VOX09WUkRfTUFTSyAgKDB4MlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9QREVUX0VOX09WUkRfU0hJRlQgKDFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfUERFVF9FTl9PVlJEKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfQkJBX1BERVRfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfQkJBX1BERVRfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfRENPQ19FTl9PVlJEX0VOX01BU0sgKDB4NFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9EQ09DX0VOX09WUkRfRU5fU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfRENPQ19FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfQkJBX0RDT0NfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfQkJBX0RDT0NfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfRENPQ19FTl9PVlJEX01BU0sgICgweDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfRENPQ19FTl9PVlJEX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfQkJBX0RDT0NfRU5fT1ZSRCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX0JCQV9EQ09DX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9EQ09DX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfTE5BX0VOX09WUkRfRU5fTUFTSyAgICAoMHgxMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0xOQV9FTl9PVlJEX0VOX1NISUZUICAgKDRVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9MTkFfRU5fT1ZSRF9FTih4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfTE5BX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX0xOQV9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0xOQV9FTl9PVlJEX01BU0sgICAgICAgKDB4MjBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9MTkFfRU5fT1ZSRF9TSElGVCAgICAgICg1VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfTE5BX0VOX09WUkQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX0xOQV9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9SWF9MTkFfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfSV9FTl9PVlJEX0VOX01BU0sgICgweDQwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX0lfRU5fT1ZSRF9FTl9TSElGVCAoNlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9JX0VOX09WUkRfRU4oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfSV9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfSV9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9JX0VOX09WUkRfTUFTSyAgICAgKDB4ODBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfSV9FTl9PVlJEX1NISUZUICAgICg3VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX0lfRU5fT1ZSRCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX1RaQV9JX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9JX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1FfRU5fT1ZSRF9FTl9NQVNLICAoMHgxMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUV9FTl9PVlJEX0VOX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1FfRU5fT1ZSRF9FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX1RaQV9RX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9RX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1FfRU5fT1ZSRF9NQVNLICAgICAoMHgyMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUV9FTl9PVlJEX1NISUZUICAgICg5VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1FfRU5fT1ZSRCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX1RaQV9RX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9RX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1BERVRfRU5fT1ZSRF9FTl9NQVNLICgweDQwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9QREVUX0VOX09WUkRfRU5fU0hJRlQgKDEwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1BERVRfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX1RaQV9QREVUX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9QREVUX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1BERVRfRU5fT1ZSRF9NQVNLICAoMHg4MDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUERFVF9FTl9PVlJEX1NISUZUICgxMVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9QREVUX0VOX09WUkQoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUERFVF9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUERFVF9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9EQ09DX0VOX09WUkRfRU5fTUFTSyAoMHgxMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX0RDT0NfRU5fT1ZSRF9FTl9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfRENPQ19FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfVFpBX0RDT0NfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfVFpBX0RDT0NfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfRENPQ19FTl9PVlJEX01BU0sgICgweDIwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfRENPQ19FTl9PVlJEX1NISUZUICgxM1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9EQ09DX0VOX09WUkQoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfRENPQ19FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfRENPQ19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1BMTF9ESUdfRU5fT1ZSRF9FTl9NQVNLICAgKDB4NDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1BMTF9ESUdfRU5fT1ZSRF9FTl9TSElGVCAgKDE0VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUExMX0RJR19FTl9PVlJEX0VOKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1BMTF9ESUdfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUExMX0RJR19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1BMTF9ESUdfRU5fT1ZSRF9NQVNLICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1BMTF9ESUdfRU5fT1ZSRF9TSElGVCAgICAgKDE1VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUExMX0RJR19FTl9PVlJEKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1BMTF9ESUdfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUExMX0RJR19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1RYX0RJR19FTl9PVlJEX0VOX01BU0sgICAgKDB4MTAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9UWF9ESUdfRU5fT1ZSRF9FTl9TSElGVCAgICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1RYX0RJR19FTl9PVlJEX0VOKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9UWF9ESUdfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfVFhfRElHX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfVFhfRElHX0VOX09WUkRfTUFTSyAgICAgICAoMHgyMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1RYX0RJR19FTl9PVlJEX1NISUZUICAgICAgKDE3VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfVFhfRElHX0VOX09WUkQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1RYX0RJR19FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9UWF9ESUdfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9ESUdfRU5fT1ZSRF9FTl9NQVNLICAgICgweDQwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfRElHX0VOX09WUkRfRU5fU0hJRlQgICAoMThVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9ESUdfRU5fT1ZSRF9FTih4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfRElHX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX0RJR19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0RJR19FTl9PVlJEX01BU0sgICAgICAgKDB4ODAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9ESUdfRU5fT1ZSRF9TSElGVCAgICAgICgxOVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0RJR19FTl9PVlJEKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9ESUdfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfRElHX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfSU5JVF9PVlJEX0VOX01BU0sgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9JTklUX09WUkRfRU5fU0hJRlQgICAgICgyMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0lOSVRfT1ZSRF9FTih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9JTklUX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX0lOSVRfT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9JTklUX09WUkRfTUFTSyAgICAgICAgICgweDIwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0lOSVRfT1ZSRF9TSElGVCAgICAgICAgKDIxVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfSU5JVF9PVlJEKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX0lOSVRfT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfSU5JVF9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1NJR01BX0RFTFRBX0VOX09WUkRfRU5fTUFTSyAoMHg0MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9TSUdNQV9ERUxUQV9FTl9PVlJEX0VOX1NISUZUICgyMlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1NJR01BX0RFTFRBX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9TSUdNQV9ERUxUQV9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9TSUdNQV9ERUxUQV9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1NJR01BX0RFTFRBX0VOX09WUkRfTUFTSyAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfU0lHTUFfREVMVEFfRU5fT1ZSRF9TSElGVCAoMjNVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9TSUdNQV9ERUxUQV9FTl9PVlJEKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfU0lHTUFfREVMVEFfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfU0lHTUFfREVMVEFfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9QSFlfRU5fT1ZSRF9FTl9NQVNLICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9QSFlfRU5fT1ZSRF9FTl9TSElGVCAgICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1BIWV9FTl9PVlJEX0VOKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9QSFlfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfUEhZX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfUEhZX0VOX09WUkRfTUFTSyAgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfUEhZX0VOX09WUkRfU0hJRlQgICAgICAoMjVVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9QSFlfRU5fT1ZSRCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfUEhZX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX1BIWV9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX0RDT0NfRU5fT1ZSRF9FTl9NQVNLICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX0RDT0NfRU5fT1ZSRF9FTl9TSElGVCAgICAgKDI2VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRENPQ19FTl9PVlJEX0VOKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX0RDT0NfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfRENPQ19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX0RDT0NfRU5fT1ZSRF9NQVNLICAgICAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX0RDT0NfRU5fT1ZSRF9TSElGVCAgICAgICAgKDI3VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRENPQ19FTl9PVlJEKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX0RDT0NfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfRENPQ19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX0RDT0NfSU5JVF9PVlJEX0VOX01BU0sgICAgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9EQ09DX0lOSVRfT1ZSRF9FTl9TSElGVCAgICgyOFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX0RDT0NfSU5JVF9PVlJEX0VOKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9EQ09DX0lOSVRfT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfRENPQ19JTklUX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRENPQ19JTklUX09WUkRfTUFTSyAgICAgICAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX0RDT0NfSU5JVF9PVlJEX1NISUZUICAgICAgKDI5VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRENPQ19JTklUX09WUkQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX0RDT0NfSU5JVF9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9EQ09DX0lOSVRfT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9GUkVRX1RBUkdfTERfRU5fT1ZSRF9FTl9NQVNLICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRlJFUV9UQVJHX0xEX0VOX09WUkRfRU5fU0hJRlQgKDMwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRlJFUV9UQVJHX0xEX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9GUkVRX1RBUkdfTERfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfRlJFUV9UQVJHX0xEX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRlJFUV9UQVJHX0xEX0VOX09WUkRfTUFTSyAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX0ZSRVFfVEFSR19MRF9FTl9PVlJEX1NISUZUICgzMVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX0ZSRVFfVEFSR19MRF9FTl9PVlJEKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9GUkVRX1RBUkdfTERfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfRlJFUV9UQVJHX0xEX0VOX09WUkRfTUFTSykKKworLyohIEBuYW1lIE9WUkQzIC0gVFNNIE9WRVJSSURFIFJFR0lTVEVSIDMgKi8KKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMF9FTl9PVlJEX0VOX01BU0sgKDB4MVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTBfRU5fT1ZSRF9FTl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTBfRU5fT1ZSRF9FTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUwX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTBfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUwX0VOX09WUkRfTUFTSyAgICgweDJVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUwX0VOX09WUkRfU0hJRlQgICgxVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMF9FTl9PVlJEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTBfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMF9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTFfRU5fT1ZSRF9FTl9NQVNLICgweDRVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUxX0VOX09WUkRfRU5fU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUxX0VOX09WUkRfRU4oeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMV9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUxX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMV9FTl9PVlJEX01BU0sgICAoMHg4VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMV9FTl9PVlJEX1NISUZUICAoM1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTFfRU5fT1ZSRCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUxX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTFfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUyX0VOX09WUkRfRU5fTUFTSyAoMHgxMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTJfRU5fT1ZSRF9FTl9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTJfRU5fT1ZSRF9FTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUyX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTJfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUyX0VOX09WUkRfTUFTSyAgICgweDIwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMl9FTl9PVlJEX1NISUZUICAoNVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTJfRU5fT1ZSRCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUyX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTJfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUzX0VOX09WUkRfRU5fTUFTSyAoMHg0MFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTNfRU5fT1ZSRF9FTl9TSElGVCAoNlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTNfRU5fT1ZSRF9FTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUzX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTNfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUzX0VOX09WUkRfTUFTSyAgICgweDgwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFM19FTl9PVlJEX1NISUZUICAoN1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTNfRU5fT1ZSRCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUzX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTNfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9CSUFTX0VOX09WUkRfRU5fTUFTSyAoMHgxMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9CSUFTX0VOX09WUkRfRU5fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9CSUFTX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9CSUFTX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0JJQVNfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9CSUFTX0VOX09WUkRfTUFTSyAoMHgyMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9CSUFTX0VOX09WUkRfU0hJRlQgKDlVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9CSUFTX0VOX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9CSUFTX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0JJQVNfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9WQ09fRU5fT1ZSRF9FTl9NQVNLICgweDQwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1ZDT19FTl9PVlJEX0VOX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1ZDT19FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfVkNPX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1ZDT19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1ZDT19FTl9PVlJEX01BU0sgKDB4ODAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfVkNPX0VOX09WUkRfU0hJRlQgKDExVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfVkNPX0VOX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9WQ09fRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfVkNPX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRkNBTF9FTl9PVlJEX0VOX01BU0sgKDB4MTAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0ZDQUxfRU5fT1ZSRF9FTl9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9GQ0FMX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9GQ0FMX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0ZDQUxfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9GQ0FMX0VOX09WUkRfTUFTSyAoMHgyMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRkNBTF9FTl9PVlJEX1NISUZUICgxM1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0ZDQUxfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0ZDQUxfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRkNBTF9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0xGX0VOX09WUkRfRU5fTUFTSyAoMHg0MDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfTEZfRU5fT1ZSRF9FTl9TSElGVCAoMTRVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9MRl9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfTEZfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfTEZfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9MRl9FTl9PVlJEX01BU0sgKDB4ODAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0xGX0VOX09WUkRfU0hJRlQgKDE1VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfTEZfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0xGX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0xGX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfRU5fT1ZSRF9FTl9NQVNLICgweDEwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfRU5fT1ZSRF9FTl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9FTl9PVlJEX01BU0sgKDB4MjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9FTl9PVlJEX1NISUZUICgxN1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0VOX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0xGX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9FTl9NQVNLICgweDQwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9PVlJEX0VOX1NISUZUICgxOFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0xGX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0xGX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0xGX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9NQVNLICgweDgwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9PVlJEX1NISUZUICgxOVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0xGX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0xGX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fT1ZSRF9FTl9NQVNLICgweDEwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fT1ZSRF9FTl9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9BRENfQlVGX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9BRENfQlVGX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9BRENfQlVGX0VOX09WUkRfTUFTSyAoMHgyMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9BRENfQlVGX0VOX09WUkRfU0hJRlQgKDIxVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9BRENfQlVGX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9PVlJEX0VOX01BU0sgKDB4NDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9PVlJEX0VOX1NISUZUICgyMlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0RJR19CVUZfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0RJR19CVUZfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0RJR19CVUZfRU5fT1ZSRF9NQVNLICgweDgwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0RJR19CVUZfRU5fT1ZSRF9TSElGVCAoMjNVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0RJR19CVUZfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX1JDQ0FMX0VOX09WUkRfRU5fTUFTSyAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9SQ0NBTF9FTl9PVlJEX0VOX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfUkNDQUxfRU5fT1ZSRF9FTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX1JDQ0FMX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYVFhfUkNDQUxfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX1JDQ0FMX0VOX09WUkRfTUFTSyAgICgweDIwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX1JDQ0FMX0VOX09WUkRfU0hJRlQgICgyNVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfUkNDQUxfRU5fT1ZSRCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX1JDQ0FMX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYVFhfUkNDQUxfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UWF9IUE1fREFDX0VOX09WUkRfRU5fTUFTSyAoMHg0MDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFhfSFBNX0RBQ19FTl9PVlJEX0VOX1NISUZUICgyNlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RYX0hQTV9EQUNfRU5fT1ZSRF9FTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19UWF9IUE1fREFDX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1RYX0hQTV9EQUNfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UWF9IUE1fREFDX0VOX09WUkRfTUFTSyAgICgweDgwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UWF9IUE1fREFDX0VOX09WUkRfU0hJRlQgICgyN1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RYX0hQTV9EQUNfRU5fT1ZSRCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19UWF9IUE1fREFDX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1RYX0hQTV9EQUNfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UWF9NT0RFX09WUkRfRU5fTUFTSyAgICAgICgweDEwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFhfTU9ERV9PVlJEX0VOX1NISUZUICAgICAoMjhVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UWF9NT0RFX09WUkRfRU4oeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfVFhfTU9ERV9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19UWF9NT0RFX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFhfTU9ERV9PVlJEX01BU0sgICAgICAgICAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RYX01PREVfT1ZSRF9TSElGVCAgICAgICAgKDI5VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFhfTU9ERV9PVlJEKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1RYX01PREVfT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfVFhfTU9ERV9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYX01PREVfT1ZSRF9FTl9NQVNLICAgICAgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWF9NT0RFX09WUkRfRU5fU0hJRlQgICAgICgzMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYX01PREVfT1ZSRF9FTih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWF9NT0RFX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYX01PREVfT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWF9NT0RFX09WUkRfTUFTSyAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhfTU9ERV9PVlJEX1NISUZUICAgICAgICAoMzFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWF9NT0RFX09WUkQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfUlhfTU9ERV9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19SWF9NT0RFX09WUkRfTUFTSykKKworLyohIEBuYW1lIFBBX1BPV0VSIC0gUEEgUE9XRVIgKi8KKyNkZWZpbmUgWENWUl9UU01fUEFfUE9XRVJfUEFfUE9XRVJfTUFTSyAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1BPV0VSX1BBX1BPV0VSX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9QT1dFUl9QQV9QT1dFUih4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fUEFfUE9XRVJfUEFfUE9XRVJfU0hJRlQpKSAmIFhDVlJfVFNNX1BBX1BPV0VSX1BBX1BPV0VSX01BU0spCisKKy8qISBAbmFtZSBQQV9SQU1QX1RCTDAgLSBQQSBSQU1QIFRBQkxFIDAgKi8KKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAwX01BU0sgICAgICAoMHgzRlUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMF9TSElGVCAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDAoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAwX1NISUZUKSkgJiBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDBfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAxX01BU0sgICAgICAoMHgzRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAxX1NISUZUICAgICAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDFfU0hJRlQpKSAmIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDJfTUFTSyAgICAgICgweDNGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMl9TSElGVCAgICAgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAyKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMl9TSElGVCkpICYgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAyX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QM19NQVNLICAgICAgKDB4M0YwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDNfU0hJRlQgICAgICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMyh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDNfU0hJRlQpKSAmIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QM19NQVNLKQorCisvKiEgQG5hbWUgUEFfUkFNUF9UQkwxIC0gUEEgUkFNUCBUQUJMRSAxICovCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNF9NQVNLICAgICAgKDB4M0ZVKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDRfU0hJRlQgICAgICgwVSkKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA0KHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNF9TSElGVCkpICYgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA0X01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNV9NQVNLICAgICAgKDB4M0YwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNV9TSElGVCAgICAgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDUoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA1X1NISUZUKSkgJiBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDVfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA2X01BU0sgICAgICAoMHgzRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDZfU0hJRlQgICAgICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDZfU0hJRlQpKSAmIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDdfTUFTSyAgICAgICgweDNGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA3X1NISUZUICAgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDcoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA3X1NISUZUKSkgJiBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDdfTUFTSykKKworLyohIEBuYW1lIFJFQ1lDTEVfQ09VTlQgLSBUU00gUkVDWUNMRSBDT1VOVCAqLworI2RlZmluZSBYQ1ZSX1RTTV9SRUNZQ0xFX0NPVU5UX1JFQ1lDTEVfQ09VTlQwX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9SRUNZQ0xFX0NPVU5UX1JFQ1lDTEVfQ09VTlQwX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1JFQ1lDTEVfQ09VTlRfUkVDWUNMRV9DT1VOVDBfU0hJRlQpKSAmIFhDVlJfVFNNX1JFQ1lDTEVfQ09VTlRfUkVDWUNMRV9DT1VOVDBfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMV9NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9SRUNZQ0xFX0NPVU5UX1JFQ1lDTEVfQ09VTlQxX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1JFQ1lDTEVfQ09VTlRfUkVDWUNMRV9DT1VOVDFfU0hJRlQpKSAmIFhDVlJfVFNNX1JFQ1lDTEVfQ09VTlRfUkVDWUNMRV9DT1VOVDFfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMl9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1JFQ1lDTEVfQ09VTlRfUkVDWUNMRV9DT1VOVDJfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1JFQ1lDTEVfQ09VTlRfUkVDWUNMRV9DT1VOVDJfU0hJRlQpKSAmIFhDVlJfVFNNX1JFQ1lDTEVfQ09VTlRfUkVDWUNMRV9DT1VOVDJfTUFTSykKKworLyohIEBuYW1lIEZBU1RfQ1RSTDEgLSBUU00gRkFTVCBXQVJNVVAgQ09OVFJPTCBSRUdJU1RFUiAxICovCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9UWF9XVV9FTl9NQVNLICAgKDB4MVUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9UWF9XVV9FTl9TSElGVCAgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfVFhfV1VfRU4oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1RYX1dVX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfVFhfV1VfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1JYX1dVX0VOX01BU0sgICAoMHgyVSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1JYX1dVX0VOX1NISUZUICAoMVUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9SWF9XVV9FTih4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfUlhfV1VfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9SWF9XVV9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfUlgyVFhfRU5fTUFTSyAgICgweDRVKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfUlgyVFhfRU5fU0hJRlQgICgyVSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1JYMlRYX0VOKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9SWDJUWF9FTl9TSElGVCkpICYgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1JYMlRYX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9XVV9DTEVBUl9NQVNLICAgKDB4OFUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9XVV9DTEVBUl9TSElGVCAgKDNVKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfV1VfQ0xFQVIoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1dVX0NMRUFSX1NISUZUKSkgJiBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfV1VfQ0xFQVJfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1JYMlRYX1NUQVJUX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9SWDJUWF9TVEFSVF9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9SWDJUWF9TVEFSVCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfUlgyVFhfU1RBUlRfU0hJRlQpKSAmIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9SWDJUWF9TVEFSVF9NQVNLKQorCisvKiEgQG5hbWUgRkFTVF9DVFJMMiAtIFRTTSBGQVNUIFdBUk1VUCBDT05UUk9MIFJFR0lTVEVSIDIgKi8KKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX1NUQVJUX1RYX01BU0sgICAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9TVEFSVF9UWF9TSElGVCAgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfU1RBUlRfVFgoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX1NUQVJUX1RYX1NISUZUKSkgJiBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfU1RBUlRfVFhfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX0RFU1RfVFhfTUFTSyAgICAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX0RFU1RfVFhfU0hJRlQgICAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9ERVNUX1RYKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfREVTVF9UWF9TSElGVCkpICYgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX0RFU1RfVFhfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX1NUQVJUX1JYX01BU0sgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfU1RBUlRfUlhfU0hJRlQgICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9TVEFSVF9SWCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfU1RBUlRfUlhfU0hJRlQpKSAmIFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9TVEFSVF9SWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfREVTVF9SWF9NQVNLICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX0RFU1RfUlhfU0hJRlQgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfREVTVF9SWCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX0RFU1RfUlhfU0hJRlQpKSAmIFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9ERVNUX1JYX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcwMCAtIFRTTV9USU1JTkcwMCAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9UWF9ISSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1RYX0xPKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fUlhfSEkoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1JYX0xPKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcwMSAtIFRTTV9USU1JTkcwMSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzAxX0JCX0xET19BRENEQUNfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzAxX0JCX0xET19BRENEQUNfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzAxX0JCX0xET19BRENEQUNfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzAxX0JCX0xET19BRENEQUNfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAxX0JCX0xET19BRENEQUNfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzAxX0JCX0xET19BRENEQUNfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzAxX0JCX0xET19BRENEQUNfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMDIgLSBUU01fVElNSU5HMDIgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDJfQkJfTERPX0JCQV9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAyX0JCX0xET19CQkFfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDJfQkJfTERPX0JCQV9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzAyX0JCX0xET19CQkFfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzAyX0JCX0xET19CQkFfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDJfQkJfTERPX0JCQV9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDJfQkJfTERPX0JCQV9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMl9CQl9MRE9fQkJBX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDJfQkJfTERPX0JCQV9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDJfQkJfTERPX0JCQV9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMDMgLSBUU01fVElNSU5HMDMgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fVFhfSEkoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9UWF9MTyh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1JYX0hJKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9SWF9MTyh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMDQgLSBUU01fVElNSU5HMDQgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMDUgLSBUU01fVElNSU5HMDUgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA1X0JCX0xET19WQ09MT19FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA1X0JCX0xET19WQ09MT19FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA1X0JCX0xET19WQ09MT19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA1X0JCX0xET19WQ09MT19FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA1X0JCX0xET19WQ09MT19FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA1X0JCX0xET19WQ09MT19FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcwNiAtIFRTTV9USU1JTkcwNiAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDZfQkJfTERPX1ZUUkVGX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDZfQkJfTERPX1ZUUkVGX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDZfQkJfTERPX1ZUUkVGX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDZfQkJfTERPX1ZUUkVGX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDZfQkJfTERPX1ZUUkVGX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDZfQkJfTERPX1ZUUkVGX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzA3IC0gVFNNX1RJTUlORzA3ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzA4IC0gVFNNX1RJTUlORzA4ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwOF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwOF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwOF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMDkgLSBUU01fVElNSU5HMDkgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMTAgLSBUU01fVElNSU5HMTAgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzExIC0gVFNNX1RJTUlORzExICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzExX0JCX1hUQUxfREFDX1JFRl9DTEtfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzExX0JCX1hUQUxfREFDX1JFRl9DTEtfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMV9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTFfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTFfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMV9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzExX0JCX1hUQUxfREFDX1JFRl9DTEtfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMV9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTFfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTFfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9UWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMTIgLSBUU01fVElNSU5HMTIgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTJfUlhUWF9BVVhQTExfVkNPX1JFRl9DTEtfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMl9SWFRYX0FVWFBMTF9WQ09fUkVGX0NMS19FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMl9SWFRYX0FVWFBMTF9WQ09fUkVGX0NMS19FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzEyX1JYVFhfQVVYUExMX1ZDT19SRUZfQ0xLX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxMl9SWFRYX0FVWFBMTF9WQ09fUkVGX0NMS19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMl9SWFRYX0FVWFBMTF9WQ09fUkVGX0NMS19FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTJfUlhUWF9BVVhQTExfVkNPX1JFRl9DTEtfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTJfUlhUWF9BVVhQTExfVkNPX1JFRl9DTEtfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxMl9SWFRYX0FVWFBMTF9WQ09fUkVGX0NMS19FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTJfUlhUWF9BVVhQTExfVkNPX1JFRl9DTEtfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzEzIC0gVFNNX1RJTUlORzEzICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxM19TWV9WQ09fQVVUT1RVTkVfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxM19TWV9WQ09fQVVUT1RVTkVfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxM19TWV9WQ09fQVVUT1RVTkVfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxM19TWV9WQ09fQVVUT1RVTkVfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxM19TWV9WQ09fQVVUT1RVTkVfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxM19TWV9WQ09fQVVUT1RVTkVfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMTQgLSBUU01fVElNSU5HMTQgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxNF9TWV9QRF9DWUNMRV9TTElQX0xEX0ZUX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxNF9TWV9QRF9DWUNMRV9TTElQX0xEX0ZUX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxNF9TWV9QRF9DWUNMRV9TTElQX0xEX0ZUX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxNF9TWV9QRF9DWUNMRV9TTElQX0xEX0ZUX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNF9TWV9QRF9DWUNMRV9TTElQX0xEX0ZUX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxNF9TWV9QRF9DWUNMRV9TTElQX0xEX0ZUX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxNF9TWV9QRF9DWUNMRV9TTElQX0xEX0ZUX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzE1IC0gVFNNX1RJTUlORzE1ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9UWF9ISV9NQVNLICAgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fVFhfSElfU0hJRlQgICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1RYX0hJKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9UWF9MT19NQVNLICAgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9UWF9MT19TSElGVCAgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fVFhfTE8oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1JYX0hJX01BU0sgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fUlhfSElfU0hJRlQgICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9SWF9ISSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fUlhfTE9fTUFTSyAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1JYX0xPX1NISUZUICAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fUlhfTE8oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzE2IC0gVFNNX1RJTUlORzE2ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE2X1NZX0xPX1JYX0JVRl9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE2X1NZX0xPX1JYX0JVRl9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNl9TWV9MT19SWF9CVUZfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxNl9TWV9MT19SWF9CVUZfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE2X1NZX0xPX1JYX0JVRl9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNl9TWV9MT19SWF9CVUZfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE2X1NZX0xPX1JYX0JVRl9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNl9TWV9MT19SWF9CVUZfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxNl9TWV9MT19SWF9CVUZfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE2X1NZX0xPX1JYX0JVRl9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMTcgLSBUU01fVElNSU5HMTcgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTdfU1lfTE9fVFhfQlVGX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxN19TWV9MT19UWF9CVUZfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxN19TWV9MT19UWF9CVUZfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxN19TWV9MT19UWF9CVUZfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE3X1NZX0xPX1RYX0JVRl9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxN19TWV9MT19UWF9CVUZfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTdfU1lfTE9fVFhfQlVGX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTdfU1lfTE9fVFhfQlVGX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTdfU1lfTE9fVFhfQlVGX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxN19TWV9MT19UWF9CVUZfRU5fVFhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzE4IC0gVFNNX1RJTUlORzE4ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE4X1NZX0RJVk5fRU5fVFhfSElfTUFTSyAgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9UWF9ISSh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE4X1NZX0RJVk5fRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE4X1NZX0RJVk5fRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9UWF9MT19NQVNLICAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE4X1NZX0RJVk5fRU5fVFhfTE8oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE4X1NZX0RJVk5fRU5fUlhfSElfTUFTSyAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1JYX0hJKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1JYX0xPX01BU0sgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1JYX0xPKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMTkgLSBUU01fVElNSU5HMTkgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxOV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxOV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxOV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxOV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxOV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxOV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzIwIC0gVFNNX1RJTUlORzIwICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1RYX0hJX01BU0sgICAgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9UWF9ISV9TSElGVCAgICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjBfU1lfUERfRU5fVFhfSEkoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9UWF9MT19NQVNLICAgICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9UWF9MT19TSElGVCAgICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjBfU1lfUERfRU5fVFhfTE8oeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9SWF9ISV9NQVNLICAgICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1JYX0hJX1NISUZUICAgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjBfU1lfUERfRU5fUlhfSEkoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9SWF9MT19NQVNLICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjBfU1lfUERfRU5fUlhfTE9fU0hJRlQgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9SWF9MTyh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjBfU1lfUERfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcyMSAtIFRTTV9USU1JTkcyMSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzIxX1NZX0xPX0RJVk5fRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzIxX1NZX0xPX0RJVk5fRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzIxX1NZX0xPX0RJVk5fRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzIxX1NZX0xPX0RJVk5fRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIxX1NZX0xPX0RJVk5fRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzIxX1NZX0xPX0RJVk5fRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzIxX1NZX0xPX0RJVk5fRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMjIgLSBUU01fVElNSU5HMjIgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjJfU1lfTE9fUlhfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMl9TWV9MT19SWF9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMl9TWV9MT19SWF9FTl9SWF9ISSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjJfU1lfTE9fUlhfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzIyX1NZX0xPX1JYX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIyX1NZX0xPX1JYX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMl9TWV9MT19SWF9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMl9TWV9MT19SWF9FTl9SWF9MTyh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjJfU1lfTE9fUlhfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzIyX1NZX0xPX1JYX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcyMyAtIFRTTV9USU1JTkcyMyAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyM19TWV9MT19UWF9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjNfU1lfTE9fVFhfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyM19TWV9MT19UWF9FTl9UWF9ISSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjNfU1lfTE9fVFhfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzIzX1NZX0xPX1RYX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIzX1NZX0xPX1RYX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIzX1NZX0xPX1RYX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjNfU1lfTE9fVFhfRU5fVFhfTE8oeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzIzX1NZX0xPX1RYX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyM19TWV9MT19UWF9FTl9UWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMjQgLSBUU01fVElNSU5HMjQgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMjUgLSBUU01fVElNSU5HMjUgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjVfUlhfTE5BX01JWEVSX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjVfUlhfTE5BX01JWEVSX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI1X1JYX0xOQV9NSVhFUl9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI1X1JYX0xOQV9NSVhFUl9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjVfUlhfTE5BX01JWEVSX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI1X1JYX0xOQV9NSVhFUl9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjVfUlhfTE5BX01JWEVSX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI1X1JYX0xOQV9NSVhFUl9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI1X1JYX0xOQV9NSVhFUl9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjVfUlhfTE5BX01JWEVSX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcyNiAtIFRTTV9USU1JTkcyNiAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNl9UWF9QQV9FTl9UWF9ISV9NQVNLICAgICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjZfVFhfUEFfRU5fVFhfSElfU0hJRlQgICAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI2X1RYX1BBX0VOX1RYX0hJKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyNl9UWF9QQV9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjZfVFhfUEFfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjZfVFhfUEFfRU5fVFhfTE9fTUFTSyAgICAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjZfVFhfUEFfRU5fVFhfTE9fU0hJRlQgICAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI2X1RYX1BBX0VOX1RYX0xPKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyNl9UWF9QQV9FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjZfVFhfUEFfRU5fVFhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzI3IC0gVFNNX1RJTUlORzI3ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI3X1JYX0FEQ19JX1FfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyN19SWF9BRENfSV9RX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI3X1JYX0FEQ19JX1FfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyN19SWF9BRENfSV9RX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyN19SWF9BRENfSV9RX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI3X1JYX0FEQ19JX1FfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI3X1JYX0FEQ19JX1FfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjdfUlhfQURDX0lfUV9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI3X1JYX0FEQ19JX1FfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzI3X1JYX0FEQ19JX1FfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzI4IC0gVFNNX1RJTUlORzI4ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI4X1JYX0FEQ19SRVNFVF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI4X1JYX0FEQ19SRVNFVF9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyOF9SWF9BRENfUkVTRVRfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyOF9SWF9BRENfUkVTRVRfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzI4X1JYX0FEQ19SRVNFVF9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyOF9SWF9BRENfUkVTRVRfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI4X1JYX0FEQ19SRVNFVF9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyOF9SWF9BRENfUkVTRVRfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyOF9SWF9BRENfUkVTRVRfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzI4X1JYX0FEQ19SRVNFVF9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMjkgLSBUU01fVElNSU5HMjkgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjlfUlhfQkJBX0lfUV9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI5X1JYX0JCQV9JX1FfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjlfUlhfQkJBX0lfUV9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI5X1JYX0JCQV9JX1FfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzI5X1JYX0JCQV9JX1FfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjlfUlhfQkJBX0lfUV9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjlfUlhfQkJBX0lfUV9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyOV9SWF9CQkFfSV9RX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjlfUlhfQkJBX0lfUV9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjlfUlhfQkJBX0lfUV9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMzAgLSBUU01fVElNSU5HMzAgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzBfUlhfQkJBX1BERVRfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMF9SWF9CQkFfUERFVF9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMF9SWF9CQkFfUERFVF9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzMwX1JYX0JCQV9QREVUX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczMF9SWF9CQkFfUERFVF9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMF9SWF9CQkFfUERFVF9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzBfUlhfQkJBX1BERVRfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzBfUlhfQkJBX1BERVRfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczMF9SWF9CQkFfUERFVF9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzBfUlhfQkJBX1BERVRfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzMxIC0gVFNNX1RJTUlORzMxICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMxX1JYX0JCQV9UWkFfRENPQ19FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMxX1JYX0JCQV9UWkFfRENPQ19FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMV9SWF9CQkFfVFpBX0RDT0NfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczMV9SWF9CQkFfVFpBX0RDT0NfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzMxX1JYX0JCQV9UWkFfRENPQ19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMV9SWF9CQkFfVFpBX0RDT0NfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMxX1JYX0JCQV9UWkFfRENPQ19FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMV9SWF9CQkFfVFpBX0RDT0NfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczMV9SWF9CQkFfVFpBX0RDT0NfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzMxX1JYX0JCQV9UWkFfRENPQ19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMzIgLSBUU01fVElNSU5HMzIgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzJfUlhfVFpBX0lfUV9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMyX1JYX1RaQV9JX1FfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzJfUlhfVFpBX0lfUV9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzMyX1JYX1RaQV9JX1FfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzMyX1JYX1RaQV9JX1FfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzJfUlhfVFpBX0lfUV9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzJfUlhfVFpBX0lfUV9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMl9SWF9UWkFfSV9RX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzJfUlhfVFpBX0lfUV9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzJfUlhfVFpBX0lfUV9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMzMgLSBUU01fVElNSU5HMzMgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzNfUlhfVFpBX1BERVRfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczM19SWF9UWkFfUERFVF9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczM19SWF9UWkFfUERFVF9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzMzX1JYX1RaQV9QREVUX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczM19SWF9UWkFfUERFVF9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczM19SWF9UWkFfUERFVF9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzNfUlhfVFpBX1BERVRfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzNfUlhfVFpBX1BERVRfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczM19SWF9UWkFfUERFVF9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzNfUlhfVFpBX1BERVRfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzM0IC0gVFNNX1RJTUlORzM0ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM0X1BMTF9ESUdfRU5fVFhfSElfTUFTSyAgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9UWF9ISSh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzM0X1BMTF9ESUdfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzM0X1BMTF9ESUdfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9UWF9MT19NQVNLICAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM0X1BMTF9ESUdfRU5fVFhfTE8oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM0X1BMTF9ESUdfRU5fUlhfSElfTUFTSyAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1JYX0hJKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1JYX0xPX01BU0sgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1JYX0xPKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMzUgLSBUU01fVElNSU5HMzUgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzVfVFhfRElHX0VOX1RYX0hJX01BU0sgICAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM1X1RYX0RJR19FTl9UWF9ISV9TSElGVCAgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNV9UWF9ESUdfRU5fVFhfSEkoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzVfVFhfRElHX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczNV9UWF9ESUdfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzVfVFhfRElHX0VOX1RYX0xPX01BU0sgICAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzVfVFhfRElHX0VOX1RYX0xPX1NISUZUICAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM1X1RYX0RJR19FTl9UWF9MTyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczNV9UWF9ESUdfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzM1X1RYX0RJR19FTl9UWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMzYgLSBUU01fVElNSU5HMzYgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzZfUlhfRElHX0VOX1JYX0hJX01BU0sgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNl9SWF9ESUdfRU5fUlhfSElfU0hJRlQgICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM2X1JYX0RJR19FTl9SWF9ISSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczNl9SWF9ESUdfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzM2X1JYX0RJR19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNl9SWF9ESUdfRU5fUlhfTE9fTUFTSyAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzZfUlhfRElHX0VOX1JYX0xPX1NISUZUICAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNl9SWF9ESUdfRU5fUlhfTE8oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzZfUlhfRElHX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczNl9SWF9ESUdfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzM3IC0gVFNNX1RJTUlORzM3ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM3X1JYX0lOSVRfUlhfSElfTUFTSyAgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzdfUlhfSU5JVF9SWF9ISV9TSElGVCAgICAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczN19SWF9JTklUX1JYX0hJKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzdfUlhfSU5JVF9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzdfUlhfSU5JVF9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczN19SWF9JTklUX1JYX0xPX01BU0sgICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzdfUlhfSU5JVF9SWF9MT19TSElGVCAgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczN19SWF9JTklUX1JYX0xPKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzdfUlhfSU5JVF9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzdfUlhfSU5JVF9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMzggLSBUU01fVElNSU5HMzggKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMzkgLSBUU01fVElNSU5HMzkgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzlfUlhfUEhZX0VOX1JYX0hJX01BU0sgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOV9SWF9QSFlfRU5fUlhfSElfU0hJRlQgICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM5X1JYX1BIWV9FTl9SWF9ISSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczOV9SWF9QSFlfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzM5X1JYX1BIWV9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOV9SWF9QSFlfRU5fUlhfTE9fTUFTSyAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzlfUlhfUEhZX0VOX1JYX0xPX1NISUZUICAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOV9SWF9QSFlfRU5fUlhfTE8oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzlfUlhfUEhZX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczOV9SWF9QSFlfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzQwIC0gVFNNX1RJTUlORzQwICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQwX0RDT0NfRU5fUlhfSElfTUFTSyAgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDBfRENPQ19FTl9SWF9ISV9TSElGVCAgICAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0MF9EQ09DX0VOX1JYX0hJKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDBfRENPQ19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDBfRENPQ19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0MF9EQ09DX0VOX1JYX0xPX01BU0sgICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDBfRENPQ19FTl9SWF9MT19TSElGVCAgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0MF9EQ09DX0VOX1JYX0xPKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDBfRENPQ19FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDBfRENPQ19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNDEgLSBUU01fVElNSU5HNDEgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDFfRENPQ19JTklUX1JYX0hJX01BU0sgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0MV9EQ09DX0lOSVRfUlhfSElfU0hJRlQgICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQxX0RDT0NfSU5JVF9SWF9ISSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0MV9EQ09DX0lOSVRfUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQxX0RDT0NfSU5JVF9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0MV9EQ09DX0lOSVRfUlhfTE9fTUFTSyAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDFfRENPQ19JTklUX1JYX0xPX1NISUZUICAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0MV9EQ09DX0lOSVRfUlhfTE8oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDFfRENPQ19JTklUX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0MV9EQ09DX0lOSVRfUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzQyIC0gVFNNX1RJTUlORzQyICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0Ml9TQVJfQURDX1RSSUdfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0Ml9TQVJfQURDX1RSSUdfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0Ml9TQVJfQURDX1RSSUdfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0Ml9TQVJfQURDX1RSSUdfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0Ml9TQVJfQURDX1RSSUdfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0Ml9TQVJfQURDX1RSSUdfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNDMgLSBUU01fVElNSU5HNDMgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzQ0IC0gVFNNX1RJTUlORzQ0ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDRfVFNNX1NQQVJFMV9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDRfVFNNX1NQQVJFMV9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDRfVFNNX1NQQVJFMV9FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDRfVFNNX1NQQVJFMV9FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDRfVFNNX1NQQVJFMV9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDRfVFNNX1NQQVJFMV9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDRfVFNNX1NQQVJFMV9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc0NSAtIFRTTV9USU1JTkc0NSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ1X1RTTV9TUEFSRTJfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ1X1RTTV9TUEFSRTJfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ1X1RTTV9TUEFSRTJfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ1X1RTTV9TUEFSRTJfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ1X1RTTV9TUEFSRTJfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ1X1RTTV9TUEFSRTJfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ1X1RTTV9TUEFSRTJfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNDYgLSBUU01fVElNSU5HNDYgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0Nl9UU01fU1BBUkUzX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0Nl9UU01fU1BBUkUzX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0Nl9UU01fU1BBUkUzX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0Nl9UU01fU1BBUkUzX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0Nl9UU01fU1BBUkUzX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0Nl9UU01fU1BBUkUzX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0Nl9UU01fU1BBUkUzX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzQ3IC0gVFNNX1RJTUlORzQ3ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc0OCAtIFRTTV9USU1JTkc0OCAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNDkgLSBUU01fVElNSU5HNDkgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0OV9HUElPMl9UUklHX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0OV9HUElPMl9UUklHX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0OV9HUElPMl9UUklHX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0OV9HUElPMl9UUklHX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OV9HUElPMl9UUklHX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0OV9HUElPMl9UUklHX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0OV9HUElPMl9UUklHX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzUwIC0gVFNNX1RJTUlORzUwICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc1MSAtIFRTTV9USU1JTkc1MSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MV9SWFRYX0FVWFBMTF9CSUFTX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTFfUlhUWF9BVVhQTExfQklBU19FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MV9SWFRYX0FVWFBMTF9CSUFTX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTFfUlhUWF9BVVhQTExfQklBU19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTFfUlhUWF9BVVhQTExfQklBU19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MV9SWFRYX0FVWFBMTF9CSUFTX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MV9SWFRYX0FVWFBMTF9CSUFTX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUxX1JYVFhfQVVYUExMX0JJQVNfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1MV9SWFRYX0FVWFBMTF9CSUFTX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1MV9SWFRYX0FVWFBMTF9CSUFTX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc1MiAtIFRTTV9USU1JTkc1MiAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1Ml9SWFRYX0FVWFBMTF9GQ0FMX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTJfUlhUWF9BVVhQTExfRkNBTF9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1Ml9SWFRYX0FVWFBMTF9GQ0FMX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTJfUlhUWF9BVVhQTExfRkNBTF9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTJfUlhUWF9BVVhQTExfRkNBTF9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1Ml9SWFRYX0FVWFBMTF9GQ0FMX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1Ml9SWFRYX0FVWFBMTF9GQ0FMX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUyX1JYVFhfQVVYUExMX0ZDQUxfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1Ml9SWFRYX0FVWFBMTF9GQ0FMX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1Ml9SWFRYX0FVWFBMTF9GQ0FMX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc1MyAtIFRTTV9USU1JTkc1MyAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1M19SWFRYX0FVWFBMTF9MRl9QRF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUzX1JYVFhfQVVYUExMX0xGX1BEX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUzX1JYVFhfQVVYUExMX0xGX1BEX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTNfUlhUWF9BVVhQTExfTEZfUERfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzUzX1JYVFhfQVVYUExMX0xGX1BEX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUzX1JYVFhfQVVYUExMX0xGX1BEX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1M19SWFRYX0FVWFBMTF9MRl9QRF9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1M19SWFRYX0FVWFBMTF9MRl9QRF9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzUzX1JYVFhfQVVYUExMX0xGX1BEX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1M19SWFRYX0FVWFBMTF9MRl9QRF9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNTQgLSBUU01fVElNSU5HNTQgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTRfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzU0X1JYVFhfQVVYUExMX1BEX0xGX0ZJTFRFUl9DSEFSR0VfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTRfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzU0X1JYVFhfQVVYUExMX1BEX0xGX0ZJTFRFUl9DSEFSR0VfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzU0X1JYVFhfQVVYUExMX1BEX0xGX0ZJTFRFUl9DSEFSR0VfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTRfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTRfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1NF9SWFRYX0FVWFBMTF9QRF9MRl9GSUxURVJfQ0hBUkdFX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTRfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTRfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNTUgLSBUU01fVElNSU5HNTUgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTVfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzU1X1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTVfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzU1X1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzU1X1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTVfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTVfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1NV9SWFRYX0FVWFBMTF9BRENfQlVGX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTVfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTVfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNTYgLSBUU01fVElNSU5HNTYgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTZfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzU2X1JYVFhfQVVYUExMX0RJR19CVUZfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTZfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzU2X1JYVFhfQVVYUExMX0RJR19CVUZfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzU2X1JYVFhfQVVYUExMX0RJR19CVUZfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTZfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTZfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1Nl9SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTZfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTZfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNTcgLSBUU01fVElNSU5HNTcgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTdfUlhUWF9SQ0NBTF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzU3X1JYVFhfUkNDQUxfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTdfUlhUWF9SQ0NBTF9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzU3X1JYVFhfUkNDQUxfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzU3X1JYVFhfUkNDQUxfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTdfUlhUWF9SQ0NBTF9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTdfUlhUWF9SQ0NBTF9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1N19SWFRYX1JDQ0FMX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTdfUlhUWF9SQ0NBTF9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTdfUlhUWF9SQ0NBTF9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNTggLSBUU01fVElNSU5HNTggKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNThfVFhfSFBNX0RBQ19FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNThfVFhfSFBNX0RBQ19FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzU4X1RYX0hQTV9EQUNfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1OF9UWF9IUE1fREFDX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1OF9UWF9IUE1fREFDX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzU4X1RYX0hQTV9EQUNfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNThfVFhfSFBNX0RBQ19FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzU4X1RYX0hQTV9EQUNfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1OF9UWF9IUE1fREFDX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1OF9UWF9IUE1fREFDX0VOX1RYX0xPX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1RTTV9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFhDVlJfVFNNIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgWENWUl9UU00gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFhDVlJfVFNNX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNUMyQzB1KQorLyoqIFBlcmlwaGVyYWwgWENWUl9UU00gYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFhDVlJfVFNNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChYQ1ZSX1RTTV9UeXBlICopWENWUl9UU01fQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1RTTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFhDVlJfVFNNX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgeyBYQ1ZSX1RTTV9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1RTTSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgWENWUl9UU01fQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICB7IFhDVlJfVFNNIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1RTTV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfVFhfRElHIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9UWF9ESUdfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgWENWUl9UWF9ESUcgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFhDVlJfVFhfRElHIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFggRGlnaXRhbCBDb250cm9sLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IERBVEFfUEFERElORzsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUWCBEYXRhIFBhZGRpbmcsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgR0ZTS19DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRYIEdGU0sgTW9kdWxhdG9yIENvbnRyb2wsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDMyX3QgR0ZTS19DT0VGRjI7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRYIEdGU0sgRmlsdGVyIENvZWZmaWNpZW50cyAyLCBvZmZzZXQ6IDB4QyAqLworICBfX0lPIHVpbnQzMl90IEdGU0tfQ09FRkYxOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUWCBHRlNLIEZpbHRlciBDb2VmZmljaWVudHMgMSwgb2Zmc2V0OiAweDEwICovCisgIF9fSU8gdWludDMyX3QgRlNLX1NDQUxFOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRYIEZTSyBNb2R1bGF0aW9uIExldmVscywgb2Zmc2V0OiAweDE0ICovCisgIF9fSU8gdWludDMyX3QgREZUX1BBVFRFUk47ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRYIERGVCBNb2R1bGF0aW9uIFBhdHRlcm4sIG9mZnNldDogMHgxOCAqLworICBfX0lPIHVpbnQzMl90IFJGX0RGVF9CSVNUXzE7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBUWCBERlQgQ29udHJvbCAxLCBvZmZzZXQ6IDB4MUMgKi8KKyAgX19JTyB1aW50MzJfdCBSRl9ERlRfQklTVF8yOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFggREZUIENvbnRyb2wgMiwgb2Zmc2V0OiAweDIwICovCit9IFhDVlJfVFhfRElHX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfVFhfRElHIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9UWF9ESUdfUmVnaXN0ZXJfTWFza3MgWENWUl9UWF9ESUcgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIENUUkwgLSBUWCBEaWdpdGFsIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERV9NQVNLICAgICAoMHhGVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERV9TSElGVCAgICAoMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREUoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9MRU5HVEhfTUFTSyAgICAgICAgKDB4NzBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfTEVOR1RIX1NISUZUICAgICAgICg0VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0xFTkdUSCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0NUUkxfTEZTUl9MRU5HVEhfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9MRU5HVEhfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0VOX01BU0sgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9FTl9TSElGVCAgICAgICAgICAgKDdVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfRU4oeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0VOX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTF9NQVNLICAgICAgICAoMHg3MDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX0RGVF9DTEtfU0VMX1NISUZUICAgICAgICg4VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0NUUkxfREZUX0NMS19TRUxfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0NUUkxfREZUX0NMS19TRUxfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9UWF9ERlRfRU5fTUFTSyAgICAgICAgICAoMHg4MDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX1RYX0RGVF9FTl9TSElGVCAgICAgICAgICgxMVUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfVFhfREZUX0VOKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19DVFJMX1RYX0RGVF9FTl9TSElGVCkpICYgWENWUl9UWF9ESUdfQ1RSTF9UWF9ERlRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9TT0NfVEVTVF9TRUxfTUFTSyAgICAgICAoMHgzMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9TT0NfVEVTVF9TRUxfU0hJRlQgICAgICAoMTJVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX1NPQ19URVNUX1NFTCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfQ1RSTF9TT0NfVEVTVF9TRUxfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0NUUkxfU09DX1RFU1RfU0VMX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfVFhfQ0FQVFVSRV9QT0xfTUFTSyAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX1RYX0NBUFRVUkVfUE9MX1NISUZUICAgICgxNlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfVFhfQ0FQVFVSRV9QT0woeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19DVFJMX1RYX0NBUFRVUkVfUE9MX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19DVFJMX1RYX0NBUFRVUkVfUE9MX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfRlJFUV9XT1JEX0FESl9NQVNLICAgICAgKDB4RkZDMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX0ZSRVFfV09SRF9BREpfU0hJRlQgICAgICgyMlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfRlJFUV9XT1JEX0FESih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19DVFJMX0ZSRVFfV09SRF9BREpfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0NUUkxfRlJFUV9XT1JEX0FESl9NQVNLKQorCisvKiEgQG5hbWUgREFUQV9QQURESU5HIC0gVFggRGF0YSBQYWRkaW5nICovCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19EQVRBX1BBRERJTkdfUEFUXzBfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19EQVRBX1BBRERJTkdfUEFUXzBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREFUQV9QQURESU5HX1BBVF8wKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfREFUQV9QQURESU5HX0RBVEFfUEFERElOR19QQVRfMF9TSElGVCkpICYgWENWUl9UWF9ESUdfREFUQV9QQURESU5HX0RBVEFfUEFERElOR19QQVRfMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREFUQV9QQURESU5HX1BBVF8xX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19EQVRBX1BBRERJTkdfUEFUXzFfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREFUQV9QQURESU5HX1BBVF8xKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfREFUQV9QQURESU5HX0RBVEFfUEFERElOR19QQVRfMV9TSElGVCkpICYgWENWUl9UWF9ESUdfREFUQV9QQURESU5HX0RBVEFfUEFERElOR19QQVRfMV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREZUX0xGU1JfT1VUX01BU0sgKDB4N0ZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREZUX0xGU1JfT1VUX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19ERlRfTEZTUl9PVVQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREZUX0xGU1JfT1VUX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREZUX0xGU1JfT1VUX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19MUk1fTUFTSyAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfTFJNX1NISUZUICAgICAgICgzMVUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19MUk0oeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfTFJNX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfTFJNX01BU0spCisKKy8qISBAbmFtZSBHRlNLX0NUUkwgLSBUWCBHRlNLIE1vZHVsYXRvciBDb250cm9sICovCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01VTFRJUExZX1RBQkxFX01BTlVBTF9NQVNLICgweEZGRkZVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NVUxUSVBMWV9UQUJMRV9NQU5VQUxfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NVUxUSVBMWV9UQUJMRV9NQU5VQUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NVUxUSVBMWV9UQUJMRV9NQU5VQUxfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01VTFRJUExZX1RBQkxFX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NSV9NQVNLICAgICAgICgweDMwMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUlfU0hJRlQgICAgICAoMTZVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NSSh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUlfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01JX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01MRF9NQVNLICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUxEX1NISUZUICAgICAoMjBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NTEQoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUxEX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NTERfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfRkxEX01BU0sgICAgICAoMHgyMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19GTERfU0hJRlQgICAgICgyMVUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX0ZMRCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19GTERfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX0ZMRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NT0RfSU5ERVhfU0NBTElOR19NQVNLICgweDcwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NT0RfSU5ERVhfU0NBTElOR19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NT0RfSU5ERVhfU0NBTElORyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01PRF9JTkRFWF9TQ0FMSU5HX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NT0RfSU5ERVhfU0NBTElOR19NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSX09WUkRfRU5fTUFTSyAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfT1ZSRF9FTl9TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRF9NQVNLICgweDIwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8wX09WUkRfU0hJRlQgKDI5VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8wX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRF9TSElGVCkpICYgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8wX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8xX09WUkRfTUFTSyAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMV9PVlJEX1NISUZUICgzMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMV9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8xX09WUkRfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMV9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMl9PVlJEX01BU0sgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzJfT1ZSRF9TSElGVCAoMzFVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzJfT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzJfT1ZSRF9NQVNLKQorCisvKiEgQG5hbWUgR0ZTS19DT0VGRjIgLSBUWCBHRlNLIEZpbHRlciBDb2VmZmljaWVudHMgMiAqLworI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NPRUZGMl9HRlNLX0ZJTFRFUl9DT0VGRl9NQU5VQUwyX01BU0sgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NPRUZGMl9HRlNLX0ZJTFRFUl9DT0VGRl9NQU5VQUwyX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DT0VGRjJfR0ZTS19GSUxURVJfQ09FRkZfTUFOVUFMMih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0dGU0tfQ09FRkYyX0dGU0tfRklMVEVSX0NPRUZGX01BTlVBTDJfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0dGU0tfQ09FRkYyX0dGU0tfRklMVEVSX0NPRUZGX01BTlVBTDJfTUFTSykKKworLyohIEBuYW1lIEdGU0tfQ09FRkYxIC0gVFggR0ZTSyBGaWx0ZXIgQ29lZmZpY2llbnRzIDEgKi8KKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DT0VGRjFfR0ZTS19GSUxURVJfQ09FRkZfTUFOVUFMMV9NQVNLICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DT0VGRjFfR0ZTS19GSUxURVJfQ09FRkZfTUFOVUFMMV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ09FRkYxX0dGU0tfRklMVEVSX0NPRUZGX01BTlVBTDEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19HRlNLX0NPRUZGMV9HRlNLX0ZJTFRFUl9DT0VGRl9NQU5VQUwxX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19HRlNLX0NPRUZGMV9HRlNLX0ZJTFRFUl9DT0VGRl9NQU5VQUwxX01BU0spCisKKy8qISBAbmFtZSBGU0tfU0NBTEUgLSBUWCBGU0sgTW9kdWxhdGlvbiBMZXZlbHMgKi8KKyNkZWZpbmUgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzBfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMV9NQVNLICgweDFGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzFfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMV9TSElGVCkpICYgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzFfTUFTSykKKworLyohIEBuYW1lIERGVF9QQVRURVJOIC0gVFggREZUIE1vZHVsYXRpb24gUGF0dGVybiAqLworI2RlZmluZSBYQ1ZSX1RYX0RJR19ERlRfUEFUVEVSTl9ERlRfTU9EX1BBVFRFUk5fTUFTSyAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0RGVF9QQVRURVJOX0RGVF9NT0RfUEFUVEVSTl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0RGVF9QQVRURVJOX0RGVF9NT0RfUEFUVEVSTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0RGVF9QQVRURVJOX0RGVF9NT0RfUEFUVEVSTl9TSElGVCkpICYgWENWUl9UWF9ESUdfREZUX1BBVFRFUk5fREZUX01PRF9QQVRURVJOX01BU0spCisKKy8qISBAbmFtZSBSRl9ERlRfQklTVF8xIC0gVFggREZUIENvbnRyb2wgMSAqLworI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfR09fTUFTSyAoMHgxVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX0dPX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX0dPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX0dPX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfR09fTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX0ZJTklTSEVEX01BU0sgKDB4MlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9GSU5JU0hFRF9TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9GSU5JU0hFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9GSU5JU0hFRF9TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX0ZJTklTSEVEX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9SRVNVTFRfTUFTSyAoMHg0VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX1JFU1VMVF9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9SRVNVTFQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfUkVTVUxUX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfUkVTVUxUX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9USFJTSExEX01BU0sgKDB4RjBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfVEhSU0hMRF9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9USFJTSExEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX1RIUlNITERfU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9USFJTSExEX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfTUFYX0RJRkZfTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9NQVhfRElGRl9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfTUFYX0RJRkYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX01BWF9ESUZGX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX01BWF9ESUZGX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfTUFYX0RJRkZfQ0hfTUFTSyAoMHg3RjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX01BWF9ESUZGX0NIX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfTUFYX0RJRkZfQ0goeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX01BWF9ESUZGX0NIX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX01BWF9ESUZGX0NIX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0ZSRVFfTUFTSyAoMHg3MDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9QQV9BTV9NT0RfRlJFUV9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9GUkVRKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9QQV9BTV9NT0RfRlJFUV9TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9QQV9BTV9NT0RfRlJFUV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9FTlRSSUVTX01BU0sgKDB4NzAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9FTlRSSUVTX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0VOVFJJRVMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9FTlRSSUVTX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9FTlRSSUVTX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0VOX01BU0sgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9FTl9TSElGVCAoMzFVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0VOX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9FTl9NQVNLKQorCisvKiEgQG5hbWUgUkZfREZUX0JJU1RfMiAtIFRYIERGVCBDb250cm9sIDIgKi8KKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9HT19NQVNLICgweDFVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX0dPX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9HTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfR09fU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfR09fTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9GSU5JU0hFRF9NQVNLICgweDJVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX0ZJTklTSEVEX1NISUZUICgxVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9GSU5JU0hFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfRklOSVNIRURfU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfRklOSVNIRURfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9SRVNVTFRfTUFTSyAoMHg0VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9SRVNVTFRfU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX1JFU1VMVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfUkVTVUxUX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX1JFU1VMVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX0FMTF9DSEFOTkVMU19NQVNLICgweDhVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX0FMTF9DSEFOTkVMU19TSElGVCAoM1UpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfQUxMX0NIQU5ORUxTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9BTExfQ0hBTk5FTFNfU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfQUxMX0NIQU5ORUxTX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfRlJFUV9DT1VOVF9USFJFU0hPTERfTUFTSyAoMHhGRjBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0ZSRVFfQ09VTlRfVEhSRVNIT0xEX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9GUkVRX0NPVU5UX1RIUkVTSE9MRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfRlJFUV9DT1VOVF9USFJFU0hPTERfU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfRlJFUV9DT1VOVF9USFJFU0hPTERfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfR09fTUFTSyAoMHgxMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfR09fU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfR08oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9HT19TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfR09fTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfRklOSVNIRURfTUFTSyAoMHgyMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfRklOSVNIRURfU0hJRlQgKDEzVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfRklOSVNIRUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9GSU5JU0hFRF9TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfRklOSVNIRURfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfUkVTVUxUX01BU0sgKDB4NDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0lOTF9CSVNUX1JFU1VMVF9TSElGVCAoMTRVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9SRVNVTFQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9SRVNVTFRfU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0lOTF9CSVNUX1JFU1VMVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9ETkxfQklTVF9HT19NQVNLICgweDEwMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfR09fU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfR08oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9ETkxfQklTVF9HT19TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfR09fTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfRklOSVNIRURfTUFTSyAoMHgyMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0ROTF9CSVNUX0ZJTklTSEVEX1NISUZUICgxN1UpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0ROTF9CSVNUX0ZJTklTSEVEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfRklOSVNIRURfU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0ROTF9CSVNUX0ZJTklTSEVEX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0ROTF9CSVNUX1JFU1VMVF9NQVNLICgweDQwMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfUkVTVUxUX1NISUZUICgxOFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0ROTF9CSVNUX1JFU1VMVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0ROTF9CSVNUX1JFU1VMVF9TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfUkVTVUxUX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfREZUX01BWF9SQU1fU0laRV9NQVNLICgweDFGRjAwMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9ERlRfTUFYX1JBTV9TSVpFX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfREZUX01BWF9SQU1fU0laRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfREZUX01BWF9SQU1fU0laRV9TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9ERlRfTUFYX1JBTV9TSVpFX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1RYX0RJR19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFhDVlJfVFhfRElHIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgWENWUl9UWF9ESUcgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFhDVlJfVFhfRElHX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNUMyMDB1KQorLyoqIFBlcmlwaGVyYWwgWENWUl9UWF9ESUcgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFhDVlJfVFhfRElHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChYQ1ZSX1RYX0RJR19UeXBlICopWENWUl9UWF9ESUdfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1RYX0RJRyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFhDVlJfVFhfRElHX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgeyBYQ1ZSX1RYX0RJR19CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1RYX0RJRyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgWENWUl9UWF9ESUdfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICB7IFhDVlJfVFhfRElHIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1RYX0RJR19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfWkJERU0gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1pCREVNX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFhDVlJfWkJERU0gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFhDVlJfWkJERU0gLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IENPUlJfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCA4MDIuMTUuNCBERU1PRCBDT1JSRUxMQVRPUiBDT05UUk9MLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IFBOX1RZUEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCA4MDIuMTUuNCBERU1PRCBQTiBUWVBFLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IFBOX0NPREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCA4MDIuMTUuNCBERU1PRCBQTiBDT0RFLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQzMl90IFNZTkNfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCA4MDIuMTUuNCBERU1PRCBTWU1CT0wgU1lOQyBDT05UUk9MLCBvZmZzZXQ6IDB4QyAqLworICBfX0lPIHVpbnQzMl90IENDQV9MUUlfU1JDOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCA4MDIuMTUuNCBDQ0EvTFFJIFNPVVJDRSwgb2Zmc2V0OiAweDEwICovCisgIF9fSU8gdWludDMyX3QgRkFEX1RIUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZBRCBDT1JSRUxBVE9SIFRIUkVTSE9MRCwgb2Zmc2V0OiAweDE0ICovCisgIF9fSU8gdWludDMyX3QgWkJERU1fQUZDOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IDgwMi4xNS40IEFGQyBTVEFUVVMsIG9mZnNldDogMHgxOCAqLworfSBYQ1ZSX1pCREVNX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfWkJERU0gUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1pCREVNX1JlZ2lzdGVyX01hc2tzIFhDVlJfWkJERU0gUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIENPUlJfQ1RSTCAtIDgwMi4xNS40IERFTU9EIENPUlJFTExBVE9SIENPTlRST0wgKi8KKyNkZWZpbmUgWENWUl9aQkRFTV9DT1JSX0NUUkxfQ09SUl9WVF9NQVNLICAgICAgICAoMHhGRlUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ09SUl9DVFJMX0NPUlJfVlRfU0hJRlQgICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9DT1JSX1ZUKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9DT1JSX0NUUkxfQ09SUl9WVF9TSElGVCkpICYgWENWUl9aQkRFTV9DT1JSX0NUUkxfQ09SUl9WVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9DT1JSX05WQUxfTUFTSyAgICAgICgweDcwMFUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ09SUl9DVFJMX0NPUlJfTlZBTF9TSElGVCAgICAgKDhVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9DT1JSX05WQUwoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9DT1JSX0NUUkxfQ09SUl9OVkFMX1NISUZUKSkgJiBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9DT1JSX05WQUxfTUFTSykKKyNkZWZpbmUgWENWUl9aQkRFTV9DT1JSX0NUUkxfTUFYX0NPUlJfRU5fTUFTSyAgICAoMHg4MDBVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9NQVhfQ09SUl9FTl9TSElGVCAgICgxMVUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ09SUl9DVFJMX01BWF9DT1JSX0VOKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9NQVhfQ09SUl9FTl9TSElGVCkpICYgWENWUl9aQkRFTV9DT1JSX0NUUkxfTUFYX0NPUlJfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9aQkRFTV9DT1JSX0NUUkxfWkJERU1fQ0xLX09OX01BU0sgICAoMHg4MDAwVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9DT1JSX0NUUkxfWkJERU1fQ0xLX09OX1NISUZUICAoMTVVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9aQkRFTV9DTEtfT04oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9DT1JSX0NUUkxfWkJERU1fQ0xLX09OX1NISUZUKSkgJiBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9aQkRFTV9DTEtfT05fTUFTSykKKyNkZWZpbmUgWENWUl9aQkRFTV9DT1JSX0NUUkxfUlhfTUFYX0NPUlJfTUFTSyAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9SWF9NQVhfQ09SUl9TSElGVCAgICgxNlUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ09SUl9DVFJMX1JYX01BWF9DT1JSKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9SWF9NQVhfQ09SUl9TSElGVCkpICYgWENWUl9aQkRFTV9DT1JSX0NUUkxfUlhfTUFYX0NPUlJfTUFTSykKKyNkZWZpbmUgWENWUl9aQkRFTV9DT1JSX0NUUkxfUlhfTUFYX1BSRUFNQkxFX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9SWF9NQVhfUFJFQU1CTEVfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9aQkRFTV9DT1JSX0NUUkxfUlhfTUFYX1BSRUFNQkxFKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fQ09SUl9DVFJMX1JYX01BWF9QUkVBTUJMRV9TSElGVCkpICYgWENWUl9aQkRFTV9DT1JSX0NUUkxfUlhfTUFYX1BSRUFNQkxFX01BU0spCisKKy8qISBAbmFtZSBQTl9UWVBFIC0gODAyLjE1LjQgREVNT0QgUE4gVFlQRSAqLworI2RlZmluZSBYQ1ZSX1pCREVNX1BOX1RZUEVfUE5fVFlQRV9NQVNLICAgICAgICAgICgweDFVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1BOX1RZUEVfUE5fVFlQRV9TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9QTl9UWVBFX1BOX1RZUEUoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fUE5fVFlQRV9QTl9UWVBFX1NISUZUKSkgJiBYQ1ZSX1pCREVNX1BOX1RZUEVfUE5fVFlQRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1pCREVNX1BOX1RZUEVfVFhfSU5WX01BU0sgICAgICAgICAgICgweDJVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1BOX1RZUEVfVFhfSU5WX1NISUZUICAgICAgICAgICgxVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9QTl9UWVBFX1RYX0lOVih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fUE5fVFlQRV9UWF9JTlZfU0hJRlQpKSAmIFhDVlJfWkJERU1fUE5fVFlQRV9UWF9JTlZfTUFTSykKKworLyohIEBuYW1lIFBOX0NPREUgLSA4MDIuMTUuNCBERU1PRCBQTiBDT0RFICovCisjZGVmaW5lIFhDVlJfWkJERU1fUE5fQ09ERV9QTl9MU0JfTUFTSyAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFhDVlJfWkJERU1fUE5fQ09ERV9QTl9MU0JfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1BOX0NPREVfUE5fTFNCKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9QTl9DT0RFX1BOX0xTQl9TSElGVCkpICYgWENWUl9aQkRFTV9QTl9DT0RFX1BOX0xTQl9NQVNLKQorI2RlZmluZSBYQ1ZSX1pCREVNX1BOX0NPREVfUE5fTVNCX01BU0sgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9QTl9DT0RFX1BOX01TQl9TSElGVCAgICAgICAgICAoMTZVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1BOX0NPREVfUE5fTVNCKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9QTl9DT0RFX1BOX01TQl9TSElGVCkpICYgWENWUl9aQkRFTV9QTl9DT0RFX1BOX01TQl9NQVNLKQorCisvKiEgQG5hbWUgU1lOQ19DVFJMIC0gODAyLjE1LjQgREVNT0QgU1lNQk9MIFNZTkMgQ09OVFJPTCAqLworI2RlZmluZSBYQ1ZSX1pCREVNX1NZTkNfQ1RSTF9TWU5DX1BFUl9NQVNLICAgICAgICgweDdVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1NZTkNfQ1RSTF9TWU5DX1BFUl9TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9TWU5DX0NUUkxfU1lOQ19QRVIoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fU1lOQ19DVFJMX1NZTkNfUEVSX1NISUZUKSkgJiBYQ1ZSX1pCREVNX1NZTkNfQ1RSTF9TWU5DX1BFUl9NQVNLKQorI2RlZmluZSBYQ1ZSX1pCREVNX1NZTkNfQ1RSTF9UUkFDS19FTkFCTEVfTUFTSyAgICgweDhVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1NZTkNfQ1RSTF9UUkFDS19FTkFCTEVfU0hJRlQgICgzVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9TWU5DX0NUUkxfVFJBQ0tfRU5BQkxFKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fU1lOQ19DVFJMX1RSQUNLX0VOQUJMRV9TSElGVCkpICYgWENWUl9aQkRFTV9TWU5DX0NUUkxfVFJBQ0tfRU5BQkxFX01BU0spCisKKy8qISBAbmFtZSBDQ0FfTFFJX1NSQyAtIDgwMi4xNS40IENDQS9MUUkgU09VUkNFICovCisjZGVmaW5lIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfQ0NBMV9GUk9NX1JYX0RJR19NQVNLICgweDFVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NDQV9MUUlfU1JDX0NDQTFfRlJPTV9SWF9ESUdfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NDQV9MUUlfU1JDX0NDQTFfRlJPTV9SWF9ESUcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX0NDQV9MUUlfU1JDX0NDQTFfRlJPTV9SWF9ESUdfU0hJRlQpKSAmIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfQ0NBMV9GUk9NX1JYX0RJR19NQVNLKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NDQV9MUUlfU1JDX0xRSV9GUk9NX1JYX0RJR19NQVNLICgweDJVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NDQV9MUUlfU1JDX0xRSV9GUk9NX1JYX0RJR19TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfTFFJX0ZST01fUlhfRElHKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9DQ0FfTFFJX1NSQ19MUUlfRlJPTV9SWF9ESUdfU0hJRlQpKSAmIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfTFFJX0ZST01fUlhfRElHX01BU0spCisjZGVmaW5lIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfTFFJX1NUQVJUX0FUX1NGRF9NQVNLICgweDRVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NDQV9MUUlfU1JDX0xRSV9TVEFSVF9BVF9TRkRfU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NDQV9MUUlfU1JDX0xRSV9TVEFSVF9BVF9TRkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX0NDQV9MUUlfU1JDX0xRSV9TVEFSVF9BVF9TRkRfU0hJRlQpKSAmIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfTFFJX1NUQVJUX0FUX1NGRF9NQVNLKQorCisvKiEgQG5hbWUgRkFEX1RIUiAtIEZBRCBDT1JSRUxBVE9SIFRIUkVTSE9MRCAqLworI2RlZmluZSBYQ1ZSX1pCREVNX0ZBRF9USFJfRkFEX1RIUl9NQVNLICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9GQURfVEhSX0ZBRF9USFJfU0hJRlQgICAgICAgICAoMFUpCisjZGVmaW5lIFhDVlJfWkJERU1fRkFEX1RIUl9GQURfVEhSKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX0ZBRF9USFJfRkFEX1RIUl9TSElGVCkpICYgWENWUl9aQkRFTV9GQURfVEhSX0ZBRF9USFJfTUFTSykKKworLyohIEBuYW1lIFpCREVNX0FGQyAtIDgwMi4xNS40IEFGQyBTVEFUVVMgKi8KKyNkZWZpbmUgWENWUl9aQkRFTV9aQkRFTV9BRkNfQUZDX0VOX01BU0sgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9aQkRFTV9BRkNfQUZDX0VOX1NISUZUICAgICAgICAoMFUpCisjZGVmaW5lIFhDVlJfWkJERU1fWkJERU1fQUZDX0FGQ19FTih4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX1pCREVNX0FGQ19BRkNfRU5fU0hJRlQpKSAmIFhDVlJfWkJERU1fWkJERU1fQUZDX0FGQ19FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1pCREVNX1pCREVNX0FGQ19EQ0RfRU5fTUFTSyAgICAgICAgICgweDJVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1pCREVNX0FGQ19EQ0RfRU5fU0hJRlQgICAgICAgICgxVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9aQkRFTV9BRkNfRENEX0VOKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fWkJERU1fQUZDX0RDRF9FTl9TSElGVCkpICYgWENWUl9aQkRFTV9aQkRFTV9BRkNfRENEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfWkJERU1fWkJERU1fQUZDX0FGQ19PVVRfTUFTSyAgICAgICAgKDB4MUYwMFUpCisjZGVmaW5lIFhDVlJfWkJERU1fWkJERU1fQUZDX0FGQ19PVVRfU0hJRlQgICAgICAgKDhVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1pCREVNX0FGQ19BRkNfT1VUKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9aQkRFTV9BRkNfQUZDX09VVF9TSElGVCkpICYgWENWUl9aQkRFTV9aQkRFTV9BRkNfQUZDX09VVF9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgWENWUl9aQkRFTV9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFhDVlJfWkJERU0gLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBYQ1ZSX1pCREVNIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBYQ1ZSX1pCREVNX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDVDNDgwdSkKKy8qKiBQZXJpcGhlcmFsIFhDVlJfWkJERU0gYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFhDVlJfWkJERU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChYQ1ZSX1pCREVNX1R5cGUgKilYQ1ZSX1pCREVNX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgWENWUl9aQkRFTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFhDVlJfWkJERU1fQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgeyBYQ1ZSX1pCREVNX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfWkJERU0gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFhDVlJfWkJERU1fQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgeyBYQ1ZSX1pCREVNIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1pCREVNX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWkxMIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWkxMX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFpMTCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogWkxMIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBJUlFTVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSU5URVJSVVBUIFJFUVVFU1QgU1RBVFVTLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IFBIWV9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQSFkgQ09OVFJPTCwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBFVkVOVF9UTVI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRVZFTlQgVElNRVIsIG9mZnNldDogMHg4ICovCisgIF9fSSAgdWludDMyX3QgVElNRVNUQU1QOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRJTUVTVEFNUCwgb2Zmc2V0OiAweEMgKi8KKyAgX19JTyB1aW50MzJfdCBUMUNNUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVDEgQ09NUEFSRSwgb2Zmc2V0OiAweDEwICovCisgIF9fSU8gdWludDMyX3QgVDJDTVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFQyIENPTVBBUkUsIG9mZnNldDogMHgxNCAqLworICBfX0lPIHVpbnQzMl90IFQyUFJJTUVDTVA7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUMiBQUklNRSBDT01QQVJFLCBvZmZzZXQ6IDB4MTggKi8KKyAgX19JTyB1aW50MzJfdCBUM0NNUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVDMgQ09NUEFSRSwgb2Zmc2V0OiAweDFDICovCisgIF9fSU8gdWludDMyX3QgVDRDTVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFQ0IENPTVBBUkUsIG9mZnNldDogMHgyMCAqLworICBfX0lPIHVpbnQzMl90IFBBX1BXUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQQSBQT1dFUiwgb2Zmc2V0OiAweDI0ICovCisgIF9fSU8gdWludDMyX3QgQ0hBTk5FTF9OVU0wOyAgICAgICAgICAgICAgICAgICAgICAvKio8IENIQU5ORUwgTlVNQkVSIDAsIG9mZnNldDogMHgyOCAqLworICBfX0kgIHVpbnQzMl90IExRSV9BTkRfUlNTSTsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMUUkgQU5EIFJTU0ksIG9mZnNldDogMHgyQyAqLworICBfX0lPIHVpbnQzMl90IE1BQ1NIT1JUQUREUlMwOyAgICAgICAgICAgICAgICAgICAgLyoqPCBNQUMgU0hPUlQgQUREUkVTUyAwLCBvZmZzZXQ6IDB4MzAgKi8KKyAgX19JTyB1aW50MzJfdCBNQUNMT05HQUREUlMwX0xTQjsgICAgICAgICAgICAgICAgIC8qKjwgTUFDIExPTkcgQUREUkVTUyAwIExTQiwgb2Zmc2V0OiAweDM0ICovCisgIF9fSU8gdWludDMyX3QgTUFDTE9OR0FERFJTMF9NU0I7ICAgICAgICAgICAgICAgICAvKio8IE1BQyBMT05HIEFERFJFU1MgMCBNU0IsIG9mZnNldDogMHgzOCAqLworICBfX0lPIHVpbnQzMl90IFJYX0ZSQU1FX0ZJTFRFUjsgICAgICAgICAgICAgICAgICAgLyoqPCBSRUNFSVZFIEZSQU1FIEZJTFRFUiwgb2Zmc2V0OiAweDNDICovCisgIF9fSU8gdWludDMyX3QgQ0NBX0xRSV9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAvKio8IENDQSBBTkQgTFFJIENPTlRST0wsIG9mZnNldDogMHg0MCAqLworICBfX0lPIHVpbnQzMl90IENDQTJfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDQ0EyIENPTlRST0wsIG9mZnNldDogMHg0NCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFs0XTsKKyAgX19JTyB1aW50MzJfdCBEU01fQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRFNNIENPTlRST0wsIG9mZnNldDogMHg0QyAqLworICBfX0lPIHVpbnQzMl90IEJTTV9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBCU00gQ09OVFJPTCwgb2Zmc2V0OiAweDUwICovCisgIF9fSU8gdWludDMyX3QgTUFDU0hPUlRBRERSUzE7ICAgICAgICAgICAgICAgICAgICAvKio8IE1BQyBTSE9SVCBBRERSRVNTIEZPUiBQQU4xLCBvZmZzZXQ6IDB4NTQgKi8KKyAgX19JTyB1aW50MzJfdCBNQUNMT05HQUREUlMxX0xTQjsgICAgICAgICAgICAgICAgIC8qKjwgTUFDIExPTkcgQUREUkVTUyAxIExTQiwgb2Zmc2V0OiAweDU4ICovCisgIF9fSU8gdWludDMyX3QgTUFDTE9OR0FERFJTMV9NU0I7ICAgICAgICAgICAgICAgICAvKio8IE1BQyBMT05HIEFERFJFU1MgMSBNU0IsIG9mZnNldDogMHg1QyAqLworICBfX0lPIHVpbnQzMl90IERVQUxfUEFOX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBEVUFMIFBBTiBDT05UUk9MLCBvZmZzZXQ6IDB4NjAgKi8KKyAgX19JTyB1aW50MzJfdCBDSEFOTkVMX05VTTE7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ0hBTk5FTCBOVU1CRVIgMSwgb2Zmc2V0OiAweDY0ICovCisgIF9fSU8gdWludDMyX3QgU0FNX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNBTSBDT05UUk9MLCBvZmZzZXQ6IDB4NjggKi8KKyAgX19JTyB1aW50MzJfdCBTQU1fVEFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU09VUkNFIEFERFJFU1MgTUFOQUdFTUVOVCBUQUJMRSwgb2Zmc2V0OiAweDZDICovCisgIF9fSSAgdWludDMyX3QgU0FNX01BVENIOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNPVVJDRSBBRERSRVNTIE1BTkFHRU1FTlQgTUFUQ0gsIG9mZnNldDogMHg3MCAqLworICBfX0kgIHVpbnQzMl90IFNBTV9GUkVFX0lEWDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTQU0gRlJFRSBJTkRFWCwgb2Zmc2V0OiAweDc0ICovCisgIF9fSU8gdWludDMyX3QgU0VRX0NUUkxfU1RTOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFNFUVVFTkNFIENPTlRST0wgQU5EIFNUQVRVUywgb2Zmc2V0OiAweDc4ICovCisgIF9fSU8gdWludDMyX3QgQUNLREVMQVk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFDSyBERUxBWSwgb2Zmc2V0OiAweDdDICovCisgIF9fSU8gdWludDMyX3QgRklMVEVSRkFJTF9DT0RFOyAgICAgICAgICAgICAgICAgICAvKio8IEZJTFRFUiBGQUlMIENPREUsIG9mZnNldDogMHg4MCAqLworICBfX0lPIHVpbnQzMl90IFJYX1dUUl9NQVJLOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSRUNFSVZFIFdBVEVSIE1BUkssIG9mZnNldDogMHg4NCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMVs0XTsKKyAgX19JTyB1aW50MzJfdCBTTE9UX1BSRUxPQUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU0xPVCBQUkVMT0FELCBvZmZzZXQ6IDB4OEMgKi8KKyAgX19JICB1aW50MzJfdCBTRVFfU1RBVEU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgODAyLjE1LjQgU0VRVUVOQ0UgU1RBVEUsIG9mZnNldDogMHg5MCAqLworICBfX0lPIHVpbnQzMl90IFRNUl9QUkVTQ0FMRTsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUSU1FUiBQUkVTQ0FMRVIsIG9mZnNldDogMHg5NCAqLworICBfX0lPIHVpbnQzMl90IExFTklFTkNZX0xTQjsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMRU5JRU5DWSBMU0IsIG9mZnNldDogMHg5OCAqLworICBfX0lPIHVpbnQzMl90IExFTklFTkNZX01TQjsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMRU5JRU5DWSBNU0IsIG9mZnNldDogMHg5QyAqLworICBfX0kgIHVpbnQzMl90IFBBUlRfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQQVJUIElELCBvZmZzZXQ6IDB4QTAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzJbOTJdOworICBfX0lPIHVpbnQxNl90IFBLVF9CVUZGRVJfVFhbNjRdOyAgICAgICAgICAgICAgICAgLyoqPCBQYWNrZXQgQnVmZmVyIFRYLCBhcnJheSBvZmZzZXQ6IDB4MTAwLCBhcnJheSBzdGVwOiAweDIgKi8KKyAgX19JTyB1aW50MTZfdCBQS1RfQlVGRkVSX1JYWzY0XTsgICAgICAgICAgICAgICAgIC8qKjwgUGFja2V0IEJ1ZmZlciBSWCwgYXJyYXkgb2Zmc2V0OiAweDE4MCwgYXJyYXkgc3RlcDogMHgyICovCit9IFpMTF9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBaTEwgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBaTExfUmVnaXN0ZXJfTWFza3MgWkxMIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBJUlFTVFMgLSBJTlRFUlJVUFQgUkVRVUVTVCBTVEFUVVMgKi8KKyNkZWZpbmUgWkxMX0lSUVNUU19TRVFJUlFfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19TRVFJUlFfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfU0VRSVJRKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1NFUUlSUV9TSElGVCkpICYgWkxMX0lSUVNUU19TRVFJUlFfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19UWElSUV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UWElSUV9TSElGVCAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFpMTF9JUlFTVFNfVFhJUlEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1RYSVJRX1NISUZUKSkgJiBaTExfSVJRU1RTX1RYSVJRX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfUlhJUlFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfUlhJUlFfU0hJRlQgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBaTExfSVJRU1RTX1JYSVJRKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19SWElSUV9TSElGVCkpICYgWkxMX0lSUVNUU19SWElSUV9NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX0NDQUlSUV9NQVNLICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBaTExfSVJRU1RTX0NDQUlSUV9TSElGVCAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19DQ0FJUlEoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfQ0NBSVJRX1NISUZUKSkgJiBaTExfSVJRU1RTX0NDQUlSUV9NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX1JYV1RSTVJLSVJRX01BU0sgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19SWFdUUk1SS0lSUV9TSElGVCAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfUlhXVFJNUktJUlEoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1JYV1RSTVJLSVJRX1NISUZUKSkgJiBaTExfSVJRU1RTX1JYV1RSTVJLSVJRX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfRklMVEVSRkFJTF9JUlFfTUFTSyAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBaTExfSVJRU1RTX0ZJTFRFUkZBSUxfSVJRX1NISUZUICAgICAgICAgICg1VSkKKyNkZWZpbmUgWkxMX0lSUVNUU19GSUxURVJGQUlMX0lSUSh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfRklMVEVSRkFJTF9JUlFfU0hJRlQpKSAmIFpMTF9JUlFTVFNfRklMVEVSRkFJTF9JUlFfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19QTExfVU5MT0NLX0lSUV9NQVNLICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfUExMX1VOTE9DS19JUlFfU0hJRlQgICAgICAgICAgKDZVKQorI2RlZmluZSBaTExfSVJRU1RTX1BMTF9VTkxPQ0tfSVJRKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19QTExfVU5MT0NLX0lSUV9TSElGVCkpICYgWkxMX0lSUVNUU19QTExfVU5MT0NLX0lSUV9NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX1JYX0ZSTV9QRU5EX01BU0sgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19SWF9GUk1fUEVORF9TSElGVCAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIFpMTF9JUlFTVFNfUlhfRlJNX1BFTkQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1JYX0ZSTV9QRU5EX1NISUZUKSkgJiBaTExfSVJRU1RTX1JYX0ZSTV9QRU5EX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfV0FLRV9JUlFfTUFTSyAgICAgICAgICAgICAgICAgKDB4MTAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19XQUtFX0lSUV9TSElGVCAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfV0FLRV9JUlEoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1dBS0VfSVJRX1NISUZUKSkgJiBaTExfSVJRU1RTX1dBS0VfSVJRX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfVFNNX0lSUV9NQVNLICAgICAgICAgICAgICAgICAgKDB4NDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UU01fSVJRX1NISUZUICAgICAgICAgICAgICAgICAoMTBVKQorI2RlZmluZSBaTExfSVJRU1RTX1RTTV9JUlEoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19UU01fSVJRX1NISUZUKSkgJiBaTExfSVJRU1RTX1RTTV9JUlFfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19FTkhfUEtUX1NUQVRVU19NQVNLICAgICAgICAgICAoMHg4MDBVKQorI2RlZmluZSBaTExfSVJRU1RTX0VOSF9QS1RfU1RBVFVTX1NISUZUICAgICAgICAgICgxMVUpCisjZGVmaW5lIFpMTF9JUlFTVFNfRU5IX1BLVF9TVEFUVVMoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX0VOSF9QS1RfU1RBVFVTX1NISUZUKSkgJiBaTExfSVJRU1RTX0VOSF9QS1RfU1RBVFVTX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfUElfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfUElfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19QSSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfUElfU0hJRlQpKSAmIFpMTF9JUlFTVFNfUElfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19TUkNBRERSX01BU0sgICAgICAgICAgICAgICAgICAoMHgyMDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19TUkNBRERSX1NISUZUICAgICAgICAgICAgICAgICAoMTNVKQorI2RlZmluZSBaTExfSVJRU1RTX1NSQ0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19TUkNBRERSX1NISUZUKSkgJiBaTExfSVJRU1RTX1NSQ0FERFJfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19DQ0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19DQ0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMTRVKQorI2RlZmluZSBaTExfSVJRU1RTX0NDQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19DQ0FfU0hJRlQpKSAmIFpMTF9JUlFTVFNfQ0NBX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfQ1JDVkFMSURfTUFTSyAgICAgICAgICAgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfQ1JDVkFMSURfU0hJRlQgICAgICAgICAgICAgICAgKDE1VSkKKyNkZWZpbmUgWkxMX0lSUVNUU19DUkNWQUxJRCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfQ1JDVkFMSURfU0hJRlQpKSAmIFpMTF9JUlFTVFNfQ1JDVkFMSURfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIxSVJRX01BU0sgICAgICAgICAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SMUlSUV9TSElGVCAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIxSVJRKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfVE1SMUlSUV9TSElGVCkpICYgWkxMX0lSUVNUU19UTVIxSVJRX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SMklSUV9NQVNLICAgICAgICAgICAgICAgICAgKDB4MjAwMDBVKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjJJUlFfU0hJRlQgICAgICAgICAgICAgICAgICgxN1UpCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SMklSUSh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1RNUjJJUlFfU0hJRlQpKSAmIFpMTF9JUlFTVFNfVE1SMklSUV9NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjNJUlFfTUFTSyAgICAgICAgICAgICAgICAgICgweDQwMDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIzSVJRX1NISUZUICAgICAgICAgICAgICAgICAoMThVKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjNJUlEoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19UTVIzSVJRX1NISUZUKSkgJiBaTExfSVJRU1RTX1RNUjNJUlFfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVI0SVJRX01BU0sgICAgICAgICAgICAgICAgICAoMHg4MDAwMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SNElSUV9TSElGVCAgICAgICAgICAgICAgICAgKDE5VSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVI0SVJRKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfVE1SNElSUV9TSElGVCkpICYgWkxMX0lSUVNUU19UTVI0SVJRX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SMU1TS19NQVNLICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIxTVNLX1NISUZUICAgICAgICAgICAgICAgICAoMjBVKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjFNU0soeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19UTVIxTVNLX1NISUZUKSkgJiBaTExfSVJRU1RTX1RNUjFNU0tfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIyTVNLX01BU0sgICAgICAgICAgICAgICAgICAoMHgyMDAwMDBVKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjJNU0tfU0hJRlQgICAgICAgICAgICAgICAgICgyMVUpCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SMk1TSyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1RNUjJNU0tfU0hJRlQpKSAmIFpMTF9JUlFTVFNfVE1SMk1TS19NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjNNU0tfTUFTSyAgICAgICAgICAgICAgICAgICgweDQwMDAwMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SM01TS19TSElGVCAgICAgICAgICAgICAgICAgKDIyVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIzTVNLKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfVE1SM01TS19TSElGVCkpICYgWkxMX0lSUVNUU19UTVIzTVNLX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SNE1TS19NQVNLICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVI0TVNLX1NISUZUICAgICAgICAgICAgICAgICAoMjNVKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjRNU0soeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19UTVI0TVNLX1NISUZUKSkgJiBaTExfSVJRU1RTX1RNUjRNU0tfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19SWF9GUkFNRV9MRU5HVEhfTUFTSyAgICAgICAgICAoMHg3RjAwMDAwMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfUlhfRlJBTUVfTEVOR1RIX1NISUZUICAgICAgICAgKDI0VSkKKyNkZWZpbmUgWkxMX0lSUVNUU19SWF9GUkFNRV9MRU5HVEgoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfUlhfRlJBTUVfTEVOR1RIX1NISUZUKSkgJiBaTExfSVJRU1RTX1JYX0ZSQU1FX0xFTkdUSF9NQVNLKQorCisvKiEgQG5hbWUgUEhZX0NUUkwgLSBQSFkgQ09OVFJPTCAqLworI2RlZmluZSBaTExfUEhZX0NUUkxfWENWU0VRX01BU0sgICAgICAgICAgICAgICAgICgweDdVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfWENWU0VRX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1hDVlNFUSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9YQ1ZTRVFfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9YQ1ZTRVFfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0FVVE9BQ0tfTUFTSyAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0FVVE9BQ0tfU0hJRlQgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9BVVRPQUNLKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfQVVUT0FDS19TSElGVCkpICYgWkxMX1BIWV9DVFJMX0FVVE9BQ0tfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1JYQUNLUlFEX01BU0sgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9SWEFDS1JRRF9TSElGVCAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfUlhBQ0tSUUQoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1JYQUNLUlFEX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfUlhBQ0tSUURfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0NDQUJGUlRYX01BU0sgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9DQ0FCRlJUWF9TSElGVCAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfQ0NBQkZSVFgoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX0NDQUJGUlRYX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfQ0NBQkZSVFhfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1NMT1RURURfTUFTSyAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9TTE9UVEVEX1NISUZUICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfU0xPVFRFRCh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1NMT1RURURfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9TTE9UVEVEX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UTVJUUklHRU5fTUFTSyAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVE1SVFJJR0VOX1NISUZUICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RNUlRSSUdFTih4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9UTVJUUklHRU5fU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9UTVJUUklHRU5fTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLICAgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfU0VRTVNLX1NISUZUICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1NFUU1TSyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9TRVFNU0tfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9TRVFNU0tfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RYTVNLX01BU0sgICAgICAgICAgICAgICAgICAoMHgyMDBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVFhNU0tfU0hJRlQgICAgICAgICAgICAgICAgICg5VSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RYTVNLKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9UWE1TS19TSElGVCkpICYgWkxMX1BIWV9DVFJMX1RYTVNLX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9SWE1TS19NQVNLICAgICAgICAgICAgICAgICAgKDB4NDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1JYTVNLX1NISUZUICAgICAgICAgICAgICAgICAoMTBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfUlhNU0soeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1JYTVNLX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfUlhNU0tfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0NDQU1TS19NQVNLICAgICAgICAgICAgICAgICAoMHg4MDBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfQ0NBTVNLX1NISUZUICAgICAgICAgICAgICAgICgxMVUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9DQ0FNU0soeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfQ0NBTVNLX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfQ0NBTVNLX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9SWF9XTVJLX01TS19NQVNLICAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9SWF9XTVJLX01TS19TSElGVCAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1JYX1dNUktfTVNLKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9SWF9XTVJLX01TS19TSElGVCkpICYgWkxMX1BIWV9DVFJMX1JYX1dNUktfTVNLX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9GSUxURVJGQUlMX01TS19NQVNLICAgICAgICAgKDB4MjAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9GSUxURVJGQUlMX01TS19TSElGVCAgICAgICAgKDEzVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0ZJTFRFUkZBSUxfTVNLKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9GSUxURVJGQUlMX01TS19TSElGVCkpICYgWkxMX1BIWV9DVFJMX0ZJTFRFUkZBSUxfTVNLX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9QTExfVU5MT0NLX01TS19NQVNLICAgICAgICAgKDB4NDAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9QTExfVU5MT0NLX01TS19TSElGVCAgICAgICAgKDE0VSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1BMTF9VTkxPQ0tfTVNLKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9QTExfVU5MT0NLX01TS19TSElGVCkpICYgWkxMX1BIWV9DVFJMX1BMTF9VTkxPQ0tfTVNLX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9DUkNfTVNLX01BU0sgICAgICAgICAgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9DUkNfTVNLX1NISUZUICAgICAgICAgICAgICAgKDE1VSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0NSQ19NU0soeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9DUkNfTVNLX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfQ1JDX01TS19NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfV0FLRV9NU0tfTUFTSyAgICAgICAgICAgICAgICgweDEwMDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1dBS0VfTVNLX1NISUZUICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfV0FLRV9NU0soeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1dBS0VfTVNLX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfV0FLRV9NU0tfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RTTV9NU0tfTUFTSyAgICAgICAgICAgICAgICAoMHg0MDAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UU01fTVNLX1NISUZUICAgICAgICAgICAgICAgKDE4VSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RTTV9NU0soeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9UU01fTVNLX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfVFNNX01TS19NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVE1SMUNNUF9FTl9NQVNLICAgICAgICAgICAgICgweDEwMDAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UTVIxQ01QX0VOX1NISUZUICAgICAgICAgICAgKDIwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RNUjFDTVBfRU4oeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9UTVIxQ01QX0VOX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfVE1SMUNNUF9FTl9NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVE1SMkNNUF9FTl9NQVNLICAgICAgICAgICAgICgweDIwMDAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UTVIyQ01QX0VOX1NISUZUICAgICAgICAgICAgKDIxVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RNUjJDTVBfRU4oeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9UTVIyQ01QX0VOX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfVE1SMkNNUF9FTl9NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVE1SM0NNUF9FTl9NQVNLICAgICAgICAgICAgICgweDQwMDAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UTVIzQ01QX0VOX1NISUZUICAgICAgICAgICAgKDIyVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RNUjNDTVBfRU4oeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9UTVIzQ01QX0VOX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfVE1SM0NNUF9FTl9NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVE1SNENNUF9FTl9NQVNLICAgICAgICAgICAgICgweDgwMDAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UTVI0Q01QX0VOX1NISUZUICAgICAgICAgICAgKDIzVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RNUjRDTVBfRU4oeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9UTVI0Q01QX0VOX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfVE1SNENNUF9FTl9NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVEMyUFJJTUVfRU5fTUFTSyAgICAgICAgICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVEMyUFJJTUVfRU5fU0hJRlQgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UQzJQUklNRV9FTih4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfVEMyUFJJTUVfRU5fU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9UQzJQUklNRV9FTl9NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfUFJPTUlTQ1VPVVNfTUFTSyAgICAgICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfUFJPTUlTQ1VPVVNfU0hJRlQgICAgICAgICAgICgyNVUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9QUk9NSVNDVU9VUyh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfUFJPTUlTQ1VPVVNfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9QUk9NSVNDVU9VU19NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfQ0NBVFlQRV9NQVNLICAgICAgICAgICAgICAgICgweDE4MDAwMDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0NDQVRZUEVfU0hJRlQgICAgICAgICAgICAgICAoMjdVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfQ0NBVFlQRSh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX0NDQVRZUEVfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9DQ0FUWVBFX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9QQU5DT1JETlRSMF9NQVNLICAgICAgICAgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfUEFOQ09SRE5UUjBfU0hJRlQgICAgICAgICAgICgyOVUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9QQU5DT1JETlRSMCh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfUEFOQ09SRE5UUjBfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9QQU5DT1JETlRSMF9NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVEMzVE1PVVRfTUFTSyAgICAgICAgICAgICAgICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RDM1RNT1VUX1NISUZUICAgICAgICAgICAgICAoMzBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVEMzVE1PVVQoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1RDM1RNT1VUX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfVEMzVE1PVVRfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RSQ1ZfTVNLX01BU0sgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UUkNWX01TS19TSElGVCAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RSQ1ZfTVNLKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9UUkNWX01TS19TSElGVCkpICYgWkxMX1BIWV9DVFJMX1RSQ1ZfTVNLX01BU0spCisKKy8qISBAbmFtZSBFVkVOVF9UTVIgLSBFVkVOVCBUSU1FUiAqLworI2RlZmluZSBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9MRF9NQVNLICAgICAgICAgICgweDFVKQorI2RlZmluZSBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9MRF9TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfTEQoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX0xEX1NISUZUKSkgJiBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9MRF9NQVNLKQorI2RlZmluZSBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9BRERfTUFTSyAgICAgICAgICgweDJVKQorI2RlZmluZSBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9BRERfU0hJRlQgICAgICAgICgxVSkKKyNkZWZpbmUgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfQUREKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX0FERF9TSElGVCkpICYgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfQUREX01BU0spCisjZGVmaW5lIFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX0ZSQUNfTUFTSyAgICAgICAgKDB4RjBVKQorI2RlZmluZSBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9GUkFDX1NISUZUICAgICAgICg0VSkKKyNkZWZpbmUgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfRlJBQyh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX0ZSQUNfU0hJRlQpKSAmIFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX0ZSQUNfTUFTSykKKyNkZWZpbmUgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfTUFTSyAgICAgICAgICAgICAoMHhGRkZGRkYwMFUpCisjZGVmaW5lIFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX1NISUZUICAgICAgICAgICAgKDhVKQorI2RlZmluZSBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUih4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfU0hJRlQpKSAmIFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX01BU0spCisKKy8qISBAbmFtZSBUSU1FU1RBTVAgLSBUSU1FU1RBTVAgKi8KKyNkZWZpbmUgWkxMX1RJTUVTVEFNUF9USU1FU1RBTVBfTUFTSyAgICAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBaTExfVElNRVNUQU1QX1RJTUVTVEFNUF9TSElGVCAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1RJTUVTVEFNUF9USU1FU1RBTVAoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9USU1FU1RBTVBfVElNRVNUQU1QX1NISUZUKSkgJiBaTExfVElNRVNUQU1QX1RJTUVTVEFNUF9NQVNLKQorCisvKiEgQG5hbWUgVDFDTVAgLSBUMSBDT01QQVJFICovCisjZGVmaW5lIFpMTF9UMUNNUF9UMUNNUF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgWkxMX1QxQ01QX1QxQ01QX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9UMUNNUF9UMUNNUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfVDFDTVBfVDFDTVBfU0hJRlQpKSAmIFpMTF9UMUNNUF9UMUNNUF9NQVNLKQorCisvKiEgQG5hbWUgVDJDTVAgLSBUMiBDT01QQVJFICovCisjZGVmaW5lIFpMTF9UMkNNUF9UMkNNUF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgWkxMX1QyQ01QX1QyQ01QX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9UMkNNUF9UMkNNUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfVDJDTVBfVDJDTVBfU0hJRlQpKSAmIFpMTF9UMkNNUF9UMkNNUF9NQVNLKQorCisvKiEgQG5hbWUgVDJQUklNRUNNUCAtIFQyIFBSSU1FIENPTVBBUkUgKi8KKyNkZWZpbmUgWkxMX1QyUFJJTUVDTVBfVDJQUklNRUNNUF9NQVNLICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgWkxMX1QyUFJJTUVDTVBfVDJQUklNRUNNUF9TSElGVCAgICAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9UMlBSSU1FQ01QX1QyUFJJTUVDTVAoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfVDJQUklNRUNNUF9UMlBSSU1FQ01QX1NISUZUKSkgJiBaTExfVDJQUklNRUNNUF9UMlBSSU1FQ01QX01BU0spCisKKy8qISBAbmFtZSBUM0NNUCAtIFQzIENPTVBBUkUgKi8KKyNkZWZpbmUgWkxMX1QzQ01QX1QzQ01QX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBaTExfVDNDTVBfVDNDTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1QzQ01QX1QzQ01QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9UM0NNUF9UM0NNUF9TSElGVCkpICYgWkxMX1QzQ01QX1QzQ01QX01BU0spCisKKy8qISBAbmFtZSBUNENNUCAtIFQ0IENPTVBBUkUgKi8KKyNkZWZpbmUgWkxMX1Q0Q01QX1Q0Q01QX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBaTExfVDRDTVBfVDRDTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1Q0Q01QX1Q0Q01QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9UNENNUF9UNENNUF9TSElGVCkpICYgWkxMX1Q0Q01QX1Q0Q01QX01BU0spCisKKy8qISBAbmFtZSBQQV9QV1IgLSBQQSBQT1dFUiAqLworI2RlZmluZSBaTExfUEFfUFdSX1BBX1BXUl9NQVNLICAgICAgICAgICAgICAgICAgICgweDNGVSkKKyNkZWZpbmUgWkxMX1BBX1BXUl9QQV9QV1JfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9QQV9QV1JfUEFfUFdSKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEFfUFdSX1BBX1BXUl9TSElGVCkpICYgWkxMX1BBX1BXUl9QQV9QV1JfTUFTSykKKworLyohIEBuYW1lIENIQU5ORUxfTlVNMCAtIENIQU5ORUwgTlVNQkVSIDAgKi8KKyNkZWZpbmUgWkxMX0NIQU5ORUxfTlVNMF9DSEFOTkVMX05VTTBfTUFTSyAgICAgICAoMHg3RlUpCisjZGVmaW5lIFpMTF9DSEFOTkVMX05VTTBfQ0hBTk5FTF9OVU0wX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBaTExfQ0hBTk5FTF9OVU0wX0NIQU5ORUxfTlVNMCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0NIQU5ORUxfTlVNMF9DSEFOTkVMX05VTTBfU0hJRlQpKSAmIFpMTF9DSEFOTkVMX05VTTBfQ0hBTk5FTF9OVU0wX01BU0spCisKKy8qISBAbmFtZSBMUUlfQU5EX1JTU0kgLSBMUUkgQU5EIFJTU0kgKi8KKyNkZWZpbmUgWkxMX0xRSV9BTkRfUlNTSV9MUUlfVkFMVUVfTUFTSyAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIFpMTF9MUUlfQU5EX1JTU0lfTFFJX1ZBTFVFX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfTFFJX0FORF9SU1NJX0xRSV9WQUxVRSh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0xRSV9BTkRfUlNTSV9MUUlfVkFMVUVfU0hJRlQpKSAmIFpMTF9MUUlfQU5EX1JTU0lfTFFJX1ZBTFVFX01BU0spCisjZGVmaW5lIFpMTF9MUUlfQU5EX1JTU0lfUlNTSV9NQVNLICAgICAgICAgICAgICAgKDB4RkYwMFUpCisjZGVmaW5lIFpMTF9MUUlfQU5EX1JTU0lfUlNTSV9TSElGVCAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBaTExfTFFJX0FORF9SU1NJX1JTU0koeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0xRSV9BTkRfUlNTSV9SU1NJX1NISUZUKSkgJiBaTExfTFFJX0FORF9SU1NJX1JTU0lfTUFTSykKKyNkZWZpbmUgWkxMX0xRSV9BTkRfUlNTSV9DQ0ExX0VEX0ZOTF9NQVNLICAgICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBaTExfTFFJX0FORF9SU1NJX0NDQTFfRURfRk5MX1NISUZUICAgICAgICgxNlUpCisjZGVmaW5lIFpMTF9MUUlfQU5EX1JTU0lfQ0NBMV9FRF9GTkwoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfTFFJX0FORF9SU1NJX0NDQTFfRURfRk5MX1NISUZUKSkgJiBaTExfTFFJX0FORF9SU1NJX0NDQTFfRURfRk5MX01BU0spCisKKy8qISBAbmFtZSBNQUNTSE9SVEFERFJTMCAtIE1BQyBTSE9SVCBBRERSRVNTIDAgKi8KKyNkZWZpbmUgWkxMX01BQ1NIT1JUQUREUlMwX01BQ1BBTklEMF9NQVNLICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgWkxMX01BQ1NIT1JUQUREUlMwX01BQ1BBTklEMF9TSElGVCAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9NQUNTSE9SVEFERFJTMF9NQUNQQU5JRDAoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfTUFDU0hPUlRBRERSUzBfTUFDUEFOSUQwX1NISUZUKSkgJiBaTExfTUFDU0hPUlRBRERSUzBfTUFDUEFOSUQwX01BU0spCisjZGVmaW5lIFpMTF9NQUNTSE9SVEFERFJTMF9NQUNTSE9SVEFERFJTMF9NQVNLICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBaTExfTUFDU0hPUlRBRERSUzBfTUFDU0hPUlRBRERSUzBfU0hJRlQgICgxNlUpCisjZGVmaW5lIFpMTF9NQUNTSE9SVEFERFJTMF9NQUNTSE9SVEFERFJTMCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfTUFDU0hPUlRBRERSUzBfTUFDU0hPUlRBRERSUzBfU0hJRlQpKSAmIFpMTF9NQUNTSE9SVEFERFJTMF9NQUNTSE9SVEFERFJTMF9NQVNLKQorCisvKiEgQG5hbWUgTUFDTE9OR0FERFJTMF9MU0IgLSBNQUMgTE9ORyBBRERSRVNTIDAgTFNCICovCisjZGVmaW5lIFpMTF9NQUNMT05HQUREUlMwX0xTQl9NQUNMT05HQUREUlMwX0xTQl9NQVNLICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgWkxMX01BQ0xPTkdBRERSUzBfTFNCX01BQ0xPTkdBRERSUzBfTFNCX1NISUZUICgwVSkKKyNkZWZpbmUgWkxMX01BQ0xPTkdBRERSUzBfTFNCX01BQ0xPTkdBRERSUzBfTFNCKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX01BQ0xPTkdBRERSUzBfTFNCX01BQ0xPTkdBRERSUzBfTFNCX1NISUZUKSkgJiBaTExfTUFDTE9OR0FERFJTMF9MU0JfTUFDTE9OR0FERFJTMF9MU0JfTUFTSykKKworLyohIEBuYW1lIE1BQ0xPTkdBRERSUzBfTVNCIC0gTUFDIExPTkcgQUREUkVTUyAwIE1TQiAqLworI2RlZmluZSBaTExfTUFDTE9OR0FERFJTMF9NU0JfTUFDTE9OR0FERFJTMF9NU0JfTUFTSyAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFpMTF9NQUNMT05HQUREUlMwX01TQl9NQUNMT05HQUREUlMwX01TQl9TSElGVCAoMFUpCisjZGVmaW5lIFpMTF9NQUNMT05HQUREUlMwX01TQl9NQUNMT05HQUREUlMwX01TQih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9NQUNMT05HQUREUlMwX01TQl9NQUNMT05HQUREUlMwX01TQl9TSElGVCkpICYgWkxMX01BQ0xPTkdBRERSUzBfTVNCX01BQ0xPTkdBRERSUzBfTVNCX01BU0spCisKKy8qISBAbmFtZSBSWF9GUkFNRV9GSUxURVIgLSBSRUNFSVZFIEZSQU1FIEZJTFRFUiAqLworI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0JFQUNPTl9GVF9NQVNLICAgICAgICgweDFVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0JFQUNPTl9GVF9TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9CRUFDT05fRlQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfQkVBQ09OX0ZUX1NISUZUKSkgJiBaTExfUlhfRlJBTUVfRklMVEVSX0JFQUNPTl9GVF9NQVNLKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0RBVEFfRlRfTUFTSyAgICAgICAgICgweDJVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0RBVEFfRlRfU0hJRlQgICAgICAgICgxVSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9EQVRBX0ZUKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfREFUQV9GVF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9EQVRBX0ZUX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfQUNLX0ZUX01BU0sgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfQUNLX0ZUX1NISUZUICAgICAgICAgKDJVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0FDS19GVCh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ0tfRlRfU0hJRlQpKSAmIFpMTF9SWF9GUkFNRV9GSUxURVJfQUNLX0ZUX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfQ01EX0ZUX01BU0sgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfQ01EX0ZUX1NISUZUICAgICAgICAgKDNVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0NNRF9GVCh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9DTURfRlRfU0hJRlQpKSAmIFpMTF9SWF9GUkFNRV9GSUxURVJfQ01EX0ZUX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfTExETl9GVF9NQVNLICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0xMRE5fRlRfU0hJRlQgICAgICAgICg0VSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9MTEROX0ZUKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfTExETl9GVF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9MTEROX0ZUX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfTVVMVElQVVJQT1NFX0ZUX01BU0sgKDB4MjBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX01VTFRJUFVSUE9TRV9GVF9TSElGVCAoNVUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfTVVMVElQVVJQT1NFX0ZUKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX01VTFRJUFVSUE9TRV9GVF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9NVUxUSVBVUlBPU0VfRlRfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9OU19GVF9NQVNLICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfTlNfRlRfU0hJRlQgICAgICAgICAgKDZVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX05TX0ZUKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9OU19GVF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9OU19GVF9NQVNLKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0VYVEVOREVEX0ZUX01BU0sgICAgICgweDgwVSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9FWFRFTkRFRF9GVF9TSElGVCAgICAoN1UpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRVhURU5ERURfRlQoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX0VYVEVOREVEX0ZUX1NISUZUKSkgJiBaTExfUlhfRlJBTUVfRklMVEVSX0VYVEVOREVEX0ZUX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlJNX1ZFUl9GSUxURVJfTUFTSyAgKDB4RjAwVSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GUk1fVkVSX0ZJTFRFUl9TSElGVCAoOFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlJNX1ZFUl9GSUxURVIoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX0ZSTV9WRVJfRklMVEVSX1NISUZUKSkgJiBaTExfUlhfRlJBTUVfRklMVEVSX0ZSTV9WRVJfRklMVEVSX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfQUNUSVZFX1BST01JU0NVT1VTX01BU0sgKDB4NDAwMFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfQUNUSVZFX1BST01JU0NVT1VTX1NISUZUICgxNFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfQUNUSVZFX1BST01JU0NVT1VTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ1RJVkVfUFJPTUlTQ1VPVVNfU0hJRlQpKSAmIFpMTF9SWF9GUkFNRV9GSUxURVJfQUNUSVZFX1BST01JU0NVT1VTX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRVhURU5ERURfRkNTX0NIS19NQVNLICgweDgwMDBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0VYVEVOREVEX0ZDU19DSEtfU0hJRlQgKDE1VSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9FWFRFTkRFRF9GQ1NfQ0hLKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfRVhURU5ERURfRkNTX0NIS19TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9FWFRFTkRFRF9GQ1NfQ0hLX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0JFQUNPTl9SRUNEX01BU0sgKDB4MTAwMDBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9CRUFDT05fUkVDRF9TSElGVCAoMTZVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9CRUFDT05fUkVDRCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfQkVBQ09OX1JFQ0RfU0hJRlQpKSAmIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0JFQUNPTl9SRUNEX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0RBVEFfUkVDRF9NQVNLICAgKDB4MjAwMDBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9EQVRBX1JFQ0RfU0hJRlQgICgxN1UpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0RBVEFfUkVDRCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9EQVRBX1JFQ0RfU0hJRlQpKSAmIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0RBVEFfUkVDRF9NQVNLKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9BQ0tfUkVDRF9NQVNLICAgICgweDQwMDAwVSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfQUNLX1JFQ0RfU0hJRlQgICAoMThVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9BQ0tfUkVDRCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfQUNLX1JFQ0RfU0hJRlQpKSAmIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0FDS19SRUNEX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0NNRF9SRUNEX01BU0sgICAgKDB4ODAwMDBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9DTURfUkVDRF9TSElGVCAgICgxOVUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0NNRF9SRUNEKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9DTURfUkVDRF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfQ01EX1JFQ0RfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9MTEROX1JFQ0RfTUFTSyAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0xMRE5fUkVDRF9TSElGVCAgICAgICgyMFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfTExETl9SRUNEKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX0xMRE5fUkVDRF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9MTEROX1JFQ0RfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9NVUxUSVBVUlBPU0VfUkVDRF9NQVNLICgweDIwMDAwMFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfTVVMVElQVVJQT1NFX1JFQ0RfU0hJRlQgKDIxVSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9NVUxUSVBVUlBPU0VfUkVDRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfTVVMVElQVVJQT1NFX1JFQ0RfU0hJRlQpKSAmIFpMTF9SWF9GUkFNRV9GSUxURVJfTVVMVElQVVJQT1NFX1JFQ0RfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9FWFRFTkRFRF9SRUNEX01BU0sgICAoMHg4MDAwMDBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0VYVEVOREVEX1JFQ0RfU0hJRlQgICgyM1UpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRVhURU5ERURfUkVDRCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX0VYVEVOREVEX1JFQ0RfU0hJRlQpKSAmIFpMTF9SWF9GUkFNRV9GSUxURVJfRVhURU5ERURfUkVDRF9NQVNLKQorCisvKiEgQG5hbWUgQ0NBX0xRSV9DVFJMIC0gQ0NBIEFORCBMUUkgQ09OVFJPTCAqLworI2RlZmluZSBaTExfQ0NBX0xRSV9DVFJMX0NDQTFfVEhSRVNIX01BU0sgICAgICAgICgweEZGVSkKKyNkZWZpbmUgWkxMX0NDQV9MUUlfQ1RSTF9DQ0ExX1RIUkVTSF9TSElGVCAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9DQ0FfTFFJX0NUUkxfQ0NBMV9USFJFU0goeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfQ0NBX0xRSV9DVFJMX0NDQTFfVEhSRVNIX1NISUZUKSkgJiBaTExfQ0NBX0xRSV9DVFJMX0NDQTFfVEhSRVNIX01BU0spCisjZGVmaW5lIFpMTF9DQ0FfTFFJX0NUUkxfTFFJX09GRlNFVF9DT01QX01BU0sgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWkxMX0NDQV9MUUlfQ1RSTF9MUUlfT0ZGU0VUX0NPTVBfU0hJRlQgICAoMTZVKQorI2RlZmluZSBaTExfQ0NBX0xRSV9DVFJMX0xRSV9PRkZTRVRfQ09NUCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0NDQV9MUUlfQ1RSTF9MUUlfT0ZGU0VUX0NPTVBfU0hJRlQpKSAmIFpMTF9DQ0FfTFFJX0NUUkxfTFFJX09GRlNFVF9DT01QX01BU0spCisjZGVmaW5lIFpMTF9DQ0FfTFFJX0NUUkxfQ0NBM19BTkRfTk9UX09SX01BU0sgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFpMTF9DQ0FfTFFJX0NUUkxfQ0NBM19BTkRfTk9UX09SX1NISUZUICAgKDI3VSkKKyNkZWZpbmUgWkxMX0NDQV9MUUlfQ1RSTF9DQ0EzX0FORF9OT1RfT1IoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9DQ0FfTFFJX0NUUkxfQ0NBM19BTkRfTk9UX09SX1NISUZUKSkgJiBaTExfQ0NBX0xRSV9DVFJMX0NDQTNfQU5EX05PVF9PUl9NQVNLKQorCisvKiEgQG5hbWUgQ0NBMl9DVFJMIC0gQ0NBMiBDT05UUk9MICovCisjZGVmaW5lIFpMTF9DQ0EyX0NUUkxfQ0NBMl9OVU1fQ09SUl9QRUFLU19NQVNLICAgKDB4RlUpCisjZGVmaW5lIFpMTF9DQ0EyX0NUUkxfQ0NBMl9OVU1fQ09SUl9QRUFLU19TSElGVCAgKDBVKQorI2RlZmluZSBaTExfQ0NBMl9DVFJMX0NDQTJfTlVNX0NPUlJfUEVBS1MoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0NDQTJfQ1RSTF9DQ0EyX05VTV9DT1JSX1BFQUtTX1NISUZUKSkgJiBaTExfQ0NBMl9DVFJMX0NDQTJfTlVNX0NPUlJfUEVBS1NfTUFTSykKKyNkZWZpbmUgWkxMX0NDQTJfQ1RSTF9DQ0EyX01JTl9OVU1fQ09SUl9USF9NQVNLICAoMHg3MFUpCisjZGVmaW5lIFpMTF9DQ0EyX0NUUkxfQ0NBMl9NSU5fTlVNX0NPUlJfVEhfU0hJRlQgKDRVKQorI2RlZmluZSBaTExfQ0NBMl9DVFJMX0NDQTJfTUlOX05VTV9DT1JSX1RIKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0NDQTJfQ1RSTF9DQ0EyX01JTl9OVU1fQ09SUl9USF9TSElGVCkpICYgWkxMX0NDQTJfQ1RSTF9DQ0EyX01JTl9OVU1fQ09SUl9USF9NQVNLKQorI2RlZmluZSBaTExfQ0NBMl9DVFJMX0NDQTJfQ09SUl9USFJFU0hfTUFTSyAgICAgICgweEZGMDBVKQorI2RlZmluZSBaTExfQ0NBMl9DVFJMX0NDQTJfQ09SUl9USFJFU0hfU0hJRlQgICAgICg4VSkKKyNkZWZpbmUgWkxMX0NDQTJfQ1RSTF9DQ0EyX0NPUlJfVEhSRVNIKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9DQ0EyX0NUUkxfQ0NBMl9DT1JSX1RIUkVTSF9TSElGVCkpICYgWkxMX0NDQTJfQ1RSTF9DQ0EyX0NPUlJfVEhSRVNIX01BU0spCisKKy8qISBAbmFtZSBEU01fQ1RSTCAtIERTTSBDT05UUk9MICovCisjZGVmaW5lIFpMTF9EU01fQ1RSTF9aSUdCRUVfU0xFRVBfRU5fTUFTSyAgICAgICAgKDB4MVUpCisjZGVmaW5lIFpMTF9EU01fQ1RSTF9aSUdCRUVfU0xFRVBfRU5fU0hJRlQgICAgICAgKDBVKQorI2RlZmluZSBaTExfRFNNX0NUUkxfWklHQkVFX1NMRUVQX0VOKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0RTTV9DVFJMX1pJR0JFRV9TTEVFUF9FTl9TSElGVCkpICYgWkxMX0RTTV9DVFJMX1pJR0JFRV9TTEVFUF9FTl9NQVNLKQorCisvKiEgQG5hbWUgQlNNX0NUUkwgLSBCU00gQ09OVFJPTCAqLworI2RlZmluZSBaTExfQlNNX0NUUkxfQlNNX0VOX01BU0sgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBaTExfQlNNX0NUUkxfQlNNX0VOX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX0JTTV9DVFJMX0JTTV9FTih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9CU01fQ1RSTF9CU01fRU5fU0hJRlQpKSAmIFpMTF9CU01fQ1RSTF9CU01fRU5fTUFTSykKKworLyohIEBuYW1lIE1BQ1NIT1JUQUREUlMxIC0gTUFDIFNIT1JUIEFERFJFU1MgRk9SIFBBTjEgKi8KKyNkZWZpbmUgWkxMX01BQ1NIT1JUQUREUlMxX01BQ1BBTklEMV9NQVNLICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgWkxMX01BQ1NIT1JUQUREUlMxX01BQ1BBTklEMV9TSElGVCAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9NQUNTSE9SVEFERFJTMV9NQUNQQU5JRDEoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfTUFDU0hPUlRBRERSUzFfTUFDUEFOSUQxX1NISUZUKSkgJiBaTExfTUFDU0hPUlRBRERSUzFfTUFDUEFOSUQxX01BU0spCisjZGVmaW5lIFpMTF9NQUNTSE9SVEFERFJTMV9NQUNTSE9SVEFERFJTMV9NQVNLICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBaTExfTUFDU0hPUlRBRERSUzFfTUFDU0hPUlRBRERSUzFfU0hJRlQgICgxNlUpCisjZGVmaW5lIFpMTF9NQUNTSE9SVEFERFJTMV9NQUNTSE9SVEFERFJTMSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfTUFDU0hPUlRBRERSUzFfTUFDU0hPUlRBRERSUzFfU0hJRlQpKSAmIFpMTF9NQUNTSE9SVEFERFJTMV9NQUNTSE9SVEFERFJTMV9NQVNLKQorCisvKiEgQG5hbWUgTUFDTE9OR0FERFJTMV9MU0IgLSBNQUMgTE9ORyBBRERSRVNTIDEgTFNCICovCisjZGVmaW5lIFpMTF9NQUNMT05HQUREUlMxX0xTQl9NQUNMT05HQUREUlMxX0xTQl9NQVNLICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgWkxMX01BQ0xPTkdBRERSUzFfTFNCX01BQ0xPTkdBRERSUzFfTFNCX1NISUZUICgwVSkKKyNkZWZpbmUgWkxMX01BQ0xPTkdBRERSUzFfTFNCX01BQ0xPTkdBRERSUzFfTFNCKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX01BQ0xPTkdBRERSUzFfTFNCX01BQ0xPTkdBRERSUzFfTFNCX1NISUZUKSkgJiBaTExfTUFDTE9OR0FERFJTMV9MU0JfTUFDTE9OR0FERFJTMV9MU0JfTUFTSykKKworLyohIEBuYW1lIE1BQ0xPTkdBRERSUzFfTVNCIC0gTUFDIExPTkcgQUREUkVTUyAxIE1TQiAqLworI2RlZmluZSBaTExfTUFDTE9OR0FERFJTMV9NU0JfTUFDTE9OR0FERFJTMV9NU0JfTUFTSyAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFpMTF9NQUNMT05HQUREUlMxX01TQl9NQUNMT05HQUREUlMxX01TQl9TSElGVCAoMFUpCisjZGVmaW5lIFpMTF9NQUNMT05HQUREUlMxX01TQl9NQUNMT05HQUREUlMxX01TQih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9NQUNMT05HQUREUlMxX01TQl9NQUNMT05HQUREUlMxX01TQl9TSElGVCkpICYgWkxMX01BQ0xPTkdBRERSUzFfTVNCX01BQ0xPTkdBRERSUzFfTVNCX01BU0spCisKKy8qISBAbmFtZSBEVUFMX1BBTl9DVFJMIC0gRFVBTCBQQU4gQ09OVFJPTCAqLworI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9BQ1RJVkVfTkVUV09SS19NQVNLICAgICgweDFVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9BQ1RJVkVfTkVUV09SS19TSElGVCAgICgwVSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfQUNUSVZFX05FVFdPUksoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9EVUFMX1BBTl9DVFJMX0FDVElWRV9ORVRXT1JLX1NISUZUKSkgJiBaTExfRFVBTF9QQU5fQ1RSTF9BQ1RJVkVfTkVUV09SS19NQVNLKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9EVUFMX1BBTl9BVVRPX01BU0sgICAgICgweDJVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9EVUFMX1BBTl9BVVRPX1NISUZUICAgICgxVSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfRFVBTF9QQU5fQVVUTyh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9EVUFMX1BBTl9DVFJMX0RVQUxfUEFOX0FVVE9fU0hJRlQpKSAmIFpMTF9EVUFMX1BBTl9DVFJMX0RVQUxfUEFOX0FVVE9fTUFTSykKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfUEFOQ09SRE5UUjFfTUFTSyAgICAgICAoMHg0VSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfUEFOQ09SRE5UUjFfU0hJRlQgICAgICAoMlUpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX1BBTkNPUkROVFIxKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfRFVBTF9QQU5fQ1RSTF9QQU5DT1JETlRSMV9TSElGVCkpICYgWkxMX0RVQUxfUEFOX0NUUkxfUEFOQ09SRE5UUjFfTUFTSykKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfQ1VSUkVOVF9ORVRXT1JLX01BU0sgICAoMHg4VSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfQ1VSUkVOVF9ORVRXT1JLX1NISUZUICAoM1UpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX0NVUlJFTlRfTkVUV09SSyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfRFVBTF9QQU5fQ1RSTF9DVVJSRU5UX05FVFdPUktfU0hJRlQpKSAmIFpMTF9EVUFMX1BBTl9DVFJMX0NVUlJFTlRfTkVUV09SS19NQVNLKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9aQl9EUF9DSEFOX09WUkRfRU5fTUFTSyAoMHgxMFUpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX1pCX0RQX0NIQU5fT1ZSRF9FTl9TSElGVCAoNFUpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX1pCX0RQX0NIQU5fT1ZSRF9FTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfRFVBTF9QQU5fQ1RSTF9aQl9EUF9DSEFOX09WUkRfRU5fU0hJRlQpKSAmIFpMTF9EVUFMX1BBTl9DVFJMX1pCX0RQX0NIQU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9aQl9EUF9DSEFOX09WUkRfU0VMX01BU0sgKDB4MjBVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9aQl9EUF9DSEFOX09WUkRfU0VMX1NISUZUICg1VSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfWkJfRFBfQ0hBTl9PVlJEX1NFTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9EVUFMX1BBTl9DVFJMX1pCX0RQX0NIQU5fT1ZSRF9TRUxfU0hJRlQpKSAmIFpMTF9EVUFMX1BBTl9DVFJMX1pCX0RQX0NIQU5fT1ZSRF9TRUxfTUFTSykKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfRFVBTF9QQU5fRFdFTExfTUFTSyAgICAoMHhGRjAwVSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfRFVBTF9QQU5fRFdFTExfU0hJRlQgICAoOFUpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX0RVQUxfUEFOX0RXRUxMKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfRFVBTF9QQU5fQ1RSTF9EVUFMX1BBTl9EV0VMTF9TSElGVCkpICYgWkxMX0RVQUxfUEFOX0NUUkxfRFVBTF9QQU5fRFdFTExfTUFTSykKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfRFVBTF9QQU5fUkVNQUlOX01BU0sgICAoMHgzRjAwMDBVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9EVUFMX1BBTl9SRU1BSU5fU0hJRlQgICgxNlUpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX0RVQUxfUEFOX1JFTUFJTih4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfRFVBTF9QQU5fQ1RSTF9EVUFMX1BBTl9SRU1BSU5fU0hJRlQpKSAmIFpMTF9EVUFMX1BBTl9DVFJMX0RVQUxfUEFOX1JFTUFJTl9NQVNLKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9SRUNEX09OX1BBTjBfTUFTSyAgICAgICgweDQwMDAwMFUpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX1JFQ0RfT05fUEFOMF9TSElGVCAgICAgKDIyVSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfUkVDRF9PTl9QQU4wKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9EVUFMX1BBTl9DVFJMX1JFQ0RfT05fUEFOMF9TSElGVCkpICYgWkxMX0RVQUxfUEFOX0NUUkxfUkVDRF9PTl9QQU4wX01BU0spCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX1JFQ0RfT05fUEFOMV9NQVNLICAgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfUkVDRF9PTl9QQU4xX1NISUZUICAgICAoMjNVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9SRUNEX09OX1BBTjEoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0RVQUxfUEFOX0NUUkxfUkVDRF9PTl9QQU4xX1NISUZUKSkgJiBaTExfRFVBTF9QQU5fQ1RSTF9SRUNEX09OX1BBTjFfTUFTSykKKworLyohIEBuYW1lIENIQU5ORUxfTlVNMSAtIENIQU5ORUwgTlVNQkVSIDEgKi8KKyNkZWZpbmUgWkxMX0NIQU5ORUxfTlVNMV9DSEFOTkVMX05VTTFfTUFTSyAgICAgICAoMHg3RlUpCisjZGVmaW5lIFpMTF9DSEFOTkVMX05VTTFfQ0hBTk5FTF9OVU0xX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBaTExfQ0hBTk5FTF9OVU0xX0NIQU5ORUxfTlVNMSh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0NIQU5ORUxfTlVNMV9DSEFOTkVMX05VTTFfU0hJRlQpKSAmIFpMTF9DSEFOTkVMX05VTTFfQ0hBTk5FTF9OVU0xX01BU0spCisKKy8qISBAbmFtZSBTQU1fQ1RSTCAtIFNBTSBDT05UUk9MICovCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQVAwX0VOX01BU0sgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQVAwX0VOX1NISUZUICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfU0FNX0NUUkxfU0FQMF9FTih4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9DVFJMX1NBUDBfRU5fU0hJRlQpKSAmIFpMTF9TQU1fQ1RSTF9TQVAwX0VOX01BU0spCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUEwX0VOX01BU0sgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUEwX0VOX1NISUZUICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBaTExfU0FNX0NUUkxfU0FBMF9FTih4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9DVFJMX1NBQTBfRU5fU0hJRlQpKSAmIFpMTF9TQU1fQ1RSTF9TQUEwX0VOX01BU0spCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQVAxX0VOX01BU0sgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQVAxX0VOX1NISUZUICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBaTExfU0FNX0NUUkxfU0FQMV9FTih4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9DVFJMX1NBUDFfRU5fU0hJRlQpKSAmIFpMTF9TQU1fQ1RSTF9TQVAxX0VOX01BU0spCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUExX0VOX01BU0sgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUExX0VOX1NISUZUICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBaTExfU0FNX0NUUkxfU0FBMV9FTih4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9DVFJMX1NBQTFfRU5fU0hJRlQpKSAmIFpMTF9TQU1fQ1RSTF9TQUExX0VOX01BU0spCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUEwX1NUQVJUX01BU0sgICAgICAgICAgICAgKDB4RkYwMFUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUEwX1NUQVJUX1NISUZUICAgICAgICAgICAgKDhVKQorI2RlZmluZSBaTExfU0FNX0NUUkxfU0FBMF9TVEFSVCh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9DVFJMX1NBQTBfU1RBUlRfU0hJRlQpKSAmIFpMTF9TQU1fQ1RSTF9TQUEwX1NUQVJUX01BU0spCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQVAxX1NUQVJUX01BU0sgICAgICAgICAgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBUDFfU1RBUlRfU0hJRlQgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBaTExfU0FNX0NUUkxfU0FQMV9TVEFSVCh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9DVFJMX1NBUDFfU1RBUlRfU0hJRlQpKSAmIFpMTF9TQU1fQ1RSTF9TQVAxX1NUQVJUX01BU0spCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUExX1NUQVJUX01BU0sgICAgICAgICAgICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBaTExfU0FNX0NUUkxfU0FBMV9TVEFSVF9TSElGVCAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUExX1NUQVJUKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX0NUUkxfU0FBMV9TVEFSVF9TSElGVCkpICYgWkxMX1NBTV9DVFJMX1NBQTFfU1RBUlRfTUFTSykKKworLyohIEBuYW1lIFNBTV9UQUJMRSAtIFNPVVJDRSBBRERSRVNTIE1BTkFHRU1FTlQgVEFCTEUgKi8KKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfTUFTSyAgICAgICAgICAgICAoMHg3RlUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX1NISUZUICAgICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWCh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfU0hJRlQpKSAmIFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX01BU0spCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX1dSX01BU0sgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9XUl9TSElGVCAgICAgICAgICg3VSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfV1IoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX1dSX1NISUZUKSkgJiBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9XUl9NQVNLKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX1NBTV9DSEVDS1NVTV9NQVNLICAgICAgICAgICgweEZGRkYwMFUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0NIRUNLU1VNX1NISUZUICAgICAgICAgKDhVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX1NBTV9DSEVDS1NVTSh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9UQUJMRV9TQU1fQ0hFQ0tTVU1fU0hJRlQpKSAmIFpMTF9TQU1fVEFCTEVfU0FNX0NIRUNLU1VNX01BU0spCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX0lOVl9NQVNLICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX0lOVl9TSElGVCAgICAgICAgKDI0VSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfSU5WKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX0lOVl9TSElGVCkpICYgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfSU5WX01BU0spCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX0VOX01BU0sgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX0VOX1NISUZUICAgICAgICAgKDI1VSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfRU4oeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX0VOX1NISUZUKSkgJiBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9FTl9NQVNLKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX0FDS19GUk1fUE5EX01BU0sgICAgICAgICAgICgweDQwMDAwMDBVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX0FDS19GUk1fUE5EX1NISUZUICAgICAgICAgICgyNlUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfQUNLX0ZSTV9QTkQoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX1RBQkxFX0FDS19GUk1fUE5EX1NISUZUKSkgJiBaTExfU0FNX1RBQkxFX0FDS19GUk1fUE5EX01BU0spCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfQUNLX0ZSTV9QTkRfQ1RSTF9NQVNLICAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfQUNLX0ZSTV9QTkRfQ1RSTF9TSElGVCAgICAgKDI3VSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9BQ0tfRlJNX1BORF9DVFJMKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fVEFCTEVfQUNLX0ZSTV9QTkRfQ1RSTF9TSElGVCkpICYgWkxMX1NBTV9UQUJMRV9BQ0tfRlJNX1BORF9DVFJMX01BU0spCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfRklORF9GUkVFX0lEWF9NQVNLICAgICAgICAgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX0ZJTkRfRlJFRV9JRFhfU0hJRlQgICAgICAgICgyOFUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfRklORF9GUkVFX0lEWCh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX1RBQkxFX0ZJTkRfRlJFRV9JRFhfU0hJRlQpKSAmIFpMTF9TQU1fVEFCTEVfRklORF9GUkVFX0lEWF9NQVNLKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX0lOVkFMSURBVEVfQUxMX01BU0sgICAgICAgICgweDIwMDAwMDAwVSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9JTlZBTElEQVRFX0FMTF9TSElGVCAgICAgICAoMjlVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX0lOVkFMSURBVEVfQUxMKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9UQUJMRV9JTlZBTElEQVRFX0FMTF9TSElGVCkpICYgWkxMX1NBTV9UQUJMRV9JTlZBTElEQVRFX0FMTF9NQVNLKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX1NBTV9CVVNZX01BU0sgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fQlVTWV9TSElGVCAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX1NBTV9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9UQUJMRV9TQU1fQlVTWV9TSElGVCkpICYgWkxMX1NBTV9UQUJMRV9TQU1fQlVTWV9NQVNLKQorCisvKiEgQG5hbWUgU0FNX01BVENIIC0gU09VUkNFIEFERFJFU1MgTUFOQUdFTUVOVCBNQVRDSCAqLworI2RlZmluZSBaTExfU0FNX01BVENIX1NBUDBfTUFUQ0hfTUFTSyAgICAgICAgICAgICgweDdGVSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQVAwX01BVENIX1NISUZUICAgICAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FQMF9NQVRDSCh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX01BVENIX1NBUDBfTUFUQ0hfU0hJRlQpKSAmIFpMTF9TQU1fTUFUQ0hfU0FQMF9NQVRDSF9NQVNLKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBUDBfQUREUl9QUkVTRU5UX01BU0sgICAgICgweDgwVSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQVAwX0FERFJfUFJFU0VOVF9TSElGVCAgICAoN1UpCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FQMF9BRERSX1BSRVNFTlQoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX01BVENIX1NBUDBfQUREUl9QUkVTRU5UX1NISUZUKSkgJiBaTExfU0FNX01BVENIX1NBUDBfQUREUl9QUkVTRU5UX01BU0spCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FBMF9NQVRDSF9NQVNLICAgICAgICAgICAgKDB4N0YwMFUpCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FBMF9NQVRDSF9TSElGVCAgICAgICAgICAgKDhVKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBQTBfTUFUQ0goeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9NQVRDSF9TQUEwX01BVENIX1NISUZUKSkgJiBaTExfU0FNX01BVENIX1NBQTBfTUFUQ0hfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQUEwX0FERFJfQUJTRU5UX01BU0sgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQUEwX0FERFJfQUJTRU5UX1NISUZUICAgICAoMTVVKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBQTBfQUREUl9BQlNFTlQoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9NQVRDSF9TQUEwX0FERFJfQUJTRU5UX1NISUZUKSkgJiBaTExfU0FNX01BVENIX1NBQTBfQUREUl9BQlNFTlRfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQVAxX01BVENIX01BU0sgICAgICAgICAgICAoMHg3RjAwMDBVKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBUDFfTUFUQ0hfU0hJRlQgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FQMV9NQVRDSCh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX01BVENIX1NBUDFfTUFUQ0hfU0hJRlQpKSAmIFpMTF9TQU1fTUFUQ0hfU0FQMV9NQVRDSF9NQVNLKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBUDFfQUREUl9QUkVTRU5UX01BU0sgICAgICgweDgwMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FQMV9BRERSX1BSRVNFTlRfU0hJRlQgICAgKDIzVSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQVAxX0FERFJfUFJFU0VOVCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fTUFUQ0hfU0FQMV9BRERSX1BSRVNFTlRfU0hJRlQpKSAmIFpMTF9TQU1fTUFUQ0hfU0FQMV9BRERSX1BSRVNFTlRfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQUExX01BVENIX01BU0sgICAgICAgICAgICAoMHg3RjAwMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FBMV9NQVRDSF9TSElGVCAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQUExX01BVENIKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fTUFUQ0hfU0FBMV9NQVRDSF9TSElGVCkpICYgWkxMX1NBTV9NQVRDSF9TQUExX01BVENIX01BU0spCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FBMV9BRERSX0FCU0VOVF9NQVNLICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBQTFfQUREUl9BQlNFTlRfU0hJRlQgICAgICgzMVUpCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FBMV9BRERSX0FCU0VOVCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX01BVENIX1NBQTFfQUREUl9BQlNFTlRfU0hJRlQpKSAmIFpMTF9TQU1fTUFUQ0hfU0FBMV9BRERSX0FCU0VOVF9NQVNLKQorCisvKiEgQG5hbWUgU0FNX0ZSRUVfSURYIC0gU0FNIEZSRUUgSU5ERVggKi8KKyNkZWZpbmUgWkxMX1NBTV9GUkVFX0lEWF9TQVAwXzFTVF9GUkVFX0lEWF9NQVNLICAoMHhGRlUpCisjZGVmaW5lIFpMTF9TQU1fRlJFRV9JRFhfU0FQMF8xU1RfRlJFRV9JRFhfU0hJRlQgKDBVKQorI2RlZmluZSBaTExfU0FNX0ZSRUVfSURYX1NBUDBfMVNUX0ZSRUVfSURYKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9GUkVFX0lEWF9TQVAwXzFTVF9GUkVFX0lEWF9TSElGVCkpICYgWkxMX1NBTV9GUkVFX0lEWF9TQVAwXzFTVF9GUkVFX0lEWF9NQVNLKQorI2RlZmluZSBaTExfU0FNX0ZSRUVfSURYX1NBQTBfMVNUX0ZSRUVfSURYX01BU0sgICgweEZGMDBVKQorI2RlZmluZSBaTExfU0FNX0ZSRUVfSURYX1NBQTBfMVNUX0ZSRUVfSURYX1NISUZUICg4VSkKKyNkZWZpbmUgWkxMX1NBTV9GUkVFX0lEWF9TQUEwXzFTVF9GUkVFX0lEWCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fRlJFRV9JRFhfU0FBMF8xU1RfRlJFRV9JRFhfU0hJRlQpKSAmIFpMTF9TQU1fRlJFRV9JRFhfU0FBMF8xU1RfRlJFRV9JRFhfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9GUkVFX0lEWF9TQVAxXzFTVF9GUkVFX0lEWF9NQVNLICAoMHhGRjAwMDBVKQorI2RlZmluZSBaTExfU0FNX0ZSRUVfSURYX1NBUDFfMVNUX0ZSRUVfSURYX1NISUZUICgxNlUpCisjZGVmaW5lIFpMTF9TQU1fRlJFRV9JRFhfU0FQMV8xU1RfRlJFRV9JRFgoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX0ZSRUVfSURYX1NBUDFfMVNUX0ZSRUVfSURYX1NISUZUKSkgJiBaTExfU0FNX0ZSRUVfSURYX1NBUDFfMVNUX0ZSRUVfSURYX01BU0spCisjZGVmaW5lIFpMTF9TQU1fRlJFRV9JRFhfU0FBMV8xU1RfRlJFRV9JRFhfTUFTSyAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBaTExfU0FNX0ZSRUVfSURYX1NBQTFfMVNUX0ZSRUVfSURYX1NISUZUICgyNFUpCisjZGVmaW5lIFpMTF9TQU1fRlJFRV9JRFhfU0FBMV8xU1RfRlJFRV9JRFgoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX0ZSRUVfSURYX1NBQTFfMVNUX0ZSRUVfSURYX1NISUZUKSkgJiBaTExfU0FNX0ZSRUVfSURYX1NBQTFfMVNUX0ZSRUVfSURYX01BU0spCisKKy8qISBAbmFtZSBTRVFfQ1RSTF9TVFMgLSBTRVFVRU5DRSBDT05UUk9MIEFORCBTVEFUVVMgKi8KKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19DTFJfTkVXX1NFUV9JTkhJQklUX01BU0sgKDB4NFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfQ0xSX05FV19TRVFfSU5ISUJJVF9TSElGVCAoMlUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfQ0xSX05FV19TRVFfSU5ISUJJVCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX0NMUl9ORVdfU0VRX0lOSElCSVRfU0hJRlQpKSAmIFpMTF9TRVFfQ1RSTF9TVFNfQ0xSX05FV19TRVFfSU5ISUJJVF9NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX0VWRU5UX1RNUl9ET19OT1RfTEFUQ0hfTUFTSyAoMHg4VSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19FVkVOVF9UTVJfRE9fTk9UX0xBVENIX1NISUZUICgzVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19FVkVOVF9UTVJfRE9fTk9UX0xBVENIKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9DVFJMX1NUU19FVkVOVF9UTVJfRE9fTk9UX0xBVENIX1NISUZUKSkgJiBaTExfU0VRX0NUUkxfU1RTX0VWRU5UX1RNUl9ET19OT1RfTEFUQ0hfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19MQVRDSF9QUkVBTUJMRV9NQVNLICAgICAoMHgxMFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfTEFUQ0hfUFJFQU1CTEVfU0hJRlQgICAgKDRVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX0xBVENIX1BSRUFNQkxFKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9DVFJMX1NUU19MQVRDSF9QUkVBTUJMRV9TSElGVCkpICYgWkxMX1NFUV9DVFJMX1NUU19MQVRDSF9QUkVBTUJMRV9NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX05PX1JYX1JFQ1lDTEVfTUFTSyAgICAgICgweDIwVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19OT19SWF9SRUNZQ0xFX1NISUZUICAgICAoNVUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfTk9fUlhfUkVDWUNMRSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX05PX1JYX1JFQ1lDTEVfU0hJRlQpKSAmIFpMTF9TRVFfQ1RSTF9TVFNfTk9fUlhfUkVDWUNMRV9NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX0ZPUkNFX0NSQ19FUlJPUl9NQVNLICAgICgweDQwVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19GT1JDRV9DUkNfRVJST1JfU0hJRlQgICAoNlUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfRk9SQ0VfQ1JDX0VSUk9SKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX0ZPUkNFX0NSQ19FUlJPUl9TSElGVCkpICYgWkxMX1NFUV9DVFJMX1NUU19GT1JDRV9DUkNfRVJST1JfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19DT05USU5VT1VTX0VOX01BU0sgICAgICAoMHg4MFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfQ09OVElOVU9VU19FTl9TSElGVCAgICAgKDdVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX0NPTlRJTlVPVVNfRU4oeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9DVFJMX1NUU19DT05USU5VT1VTX0VOX1NISUZUKSkgJiBaTExfU0VRX0NUUkxfU1RTX0NPTlRJTlVPVVNfRU5fTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19YQ1ZTRVFfQUNUVUFMX01BU0sgICAgICAoMHg3MDBVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1hDVlNFUV9BQ1RVQUxfU0hJRlQgICAgICg4VSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19YQ1ZTRVFfQUNUVUFMKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfWENWU0VRX0FDVFVBTF9TSElGVCkpICYgWkxMX1NFUV9DVFJMX1NUU19YQ1ZTRVFfQUNUVUFMX01BU0spCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfU0VRX0lETEVfTUFTSyAgICAgICAgICAgKDB4ODAwVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19TRVFfSURMRV9TSElGVCAgICAgICAgICAoMTFVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1NFUV9JRExFKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9DVFJMX1NUU19TRVFfSURMRV9TSElGVCkpICYgWkxMX1NFUV9DVFJMX1NUU19TRVFfSURMRV9NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX05FV19TRVFfSU5ISUJJVF9NQVNLICAgICgweDEwMDBVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX05FV19TRVFfSU5ISUJJVF9TSElGVCAgICgxMlUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfTkVXX1NFUV9JTkhJQklUKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX05FV19TRVFfSU5ISUJJVF9TSElGVCkpICYgWkxMX1NFUV9DVFJMX1NUU19ORVdfU0VRX0lOSElCSVRfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19SWF9USU1FT1VUX1BFTkRJTkdfTUFTSyAoMHgyMDAwVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19SWF9USU1FT1VUX1BFTkRJTkdfU0hJRlQgKDEzVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19SWF9USU1FT1VUX1BFTkRJTkcoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfUlhfVElNRU9VVF9QRU5ESU5HX1NISUZUKSkgJiBaTExfU0VRX0NUUkxfU1RTX1JYX1RJTUVPVVRfUEVORElOR19NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1JYX01PREVfTUFTSyAgICAgICAgICAgICgweDQwMDBVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1JYX01PREVfU0hJRlQgICAgICAgICAgICgxNFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfUlhfTU9ERSh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX1JYX01PREVfU0hJRlQpKSAmIFpMTF9TRVFfQ1RSTF9TVFNfUlhfTU9ERV9NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1RNUjJfU0VRX1RSSUdfQVJNRURfTUFTSyAoMHg4MDAwVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19UTVIyX1NFUV9UUklHX0FSTUVEX1NISUZUICgxNVUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfVE1SMl9TRVFfVFJJR19BUk1FRCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX1RNUjJfU0VRX1RSSUdfQVJNRURfU0hJRlQpKSAmIFpMTF9TRVFfQ1RSTF9TVFNfVE1SMl9TRVFfVFJJR19BUk1FRF9NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1NFUV9UX1NUQVRVU19NQVNLICAgICAgICgweDNGMDAwMFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfU0VRX1RfU1RBVFVTX1NISUZUICAgICAgKDE2VSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19TRVFfVF9TVEFUVVMoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfU0VRX1RfU1RBVFVTX1NISUZUKSkgJiBaTExfU0VRX0NUUkxfU1RTX1NFUV9UX1NUQVRVU19NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1NXX0FCT1JURURfTUFTSyAgICAgICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1NXX0FCT1JURURfU0hJRlQgICAgICAgICgyNFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfU1dfQUJPUlRFRCh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX1NXX0FCT1JURURfU0hJRlQpKSAmIFpMTF9TRVFfQ1RSTF9TVFNfU1dfQUJPUlRFRF9NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1RDM19BQk9SVEVEX01BU0sgICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1RDM19BQk9SVEVEX1NISUZUICAgICAgICgyNVUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfVEMzX0FCT1JURUQoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX1RDM19BQk9SVEVEX1NISUZUKSkgJiBaTExfU0VRX0NUUkxfU1RTX1RDM19BQk9SVEVEX01BU0spCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfUExMX0FCT1JURURfTUFTSyAgICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfUExMX0FCT1JURURfU0hJRlQgICAgICAgKDI2VSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19QTExfQUJPUlRFRCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfUExMX0FCT1JURURfU0hJRlQpKSAmIFpMTF9TRVFfQ1RSTF9TVFNfUExMX0FCT1JURURfTUFTSykKKworLyohIEBuYW1lIEFDS0RFTEFZIC0gQUNLIERFTEFZICovCisjZGVmaW5lIFpMTF9BQ0tERUxBWV9BQ0tERUxBWV9NQVNLICAgICAgICAgICAgICAgKDB4M0ZVKQorI2RlZmluZSBaTExfQUNLREVMQVlfQUNLREVMQVlfU0hJRlQgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX0FDS0RFTEFZX0FDS0RFTEFZKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9BQ0tERUxBWV9BQ0tERUxBWV9TSElGVCkpICYgWkxMX0FDS0RFTEFZX0FDS0RFTEFZX01BU0spCisjZGVmaW5lIFpMTF9BQ0tERUxBWV9UWERFTEFZX01BU0sgICAgICAgICAgICAgICAgKDB4M0YwMFUpCisjZGVmaW5lIFpMTF9BQ0tERUxBWV9UWERFTEFZX1NISUZUICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBaTExfQUNLREVMQVlfVFhERUxBWSh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0FDS0RFTEFZX1RYREVMQVlfU0hJRlQpKSAmIFpMTF9BQ0tERUxBWV9UWERFTEFZX01BU0spCisKKy8qISBAbmFtZSBGSUxURVJGQUlMX0NPREUgLSBGSUxURVIgRkFJTCBDT0RFICovCisjZGVmaW5lIFpMTF9GSUxURVJGQUlMX0NPREVfRklMVEVSRkFJTF9DT0RFX01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWkxMX0ZJTFRFUkZBSUxfQ09ERV9GSUxURVJGQUlMX0NPREVfU0hJRlQgKDBVKQorI2RlZmluZSBaTExfRklMVEVSRkFJTF9DT0RFX0ZJTFRFUkZBSUxfQ09ERSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0ZJTFRFUkZBSUxfQ09ERV9GSUxURVJGQUlMX0NPREVfU0hJRlQpKSAmIFpMTF9GSUxURVJGQUlMX0NPREVfRklMVEVSRkFJTF9DT0RFX01BU0spCisjZGVmaW5lIFpMTF9GSUxURVJGQUlMX0NPREVfRklMVEVSRkFJTF9QQU5fU0VMX01BU0sgKDB4ODAwMFUpCisjZGVmaW5lIFpMTF9GSUxURVJGQUlMX0NPREVfRklMVEVSRkFJTF9QQU5fU0VMX1NISUZUICgxNVUpCisjZGVmaW5lIFpMTF9GSUxURVJGQUlMX0NPREVfRklMVEVSRkFJTF9QQU5fU0VMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0ZJTFRFUkZBSUxfQ09ERV9GSUxURVJGQUlMX1BBTl9TRUxfU0hJRlQpKSAmIFpMTF9GSUxURVJGQUlMX0NPREVfRklMVEVSRkFJTF9QQU5fU0VMX01BU0spCisKKy8qISBAbmFtZSBSWF9XVFJfTUFSSyAtIFJFQ0VJVkUgV0FURVIgTUFSSyAqLworI2RlZmluZSBaTExfUlhfV1RSX01BUktfUlhfV1RSX01BUktfTUFTSyAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgWkxMX1JYX1dUUl9NQVJLX1JYX1dUUl9NQVJLX1NISUZUICAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9SWF9XVFJfTUFSS19SWF9XVFJfTUFSSyh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfV1RSX01BUktfUlhfV1RSX01BUktfU0hJRlQpKSAmIFpMTF9SWF9XVFJfTUFSS19SWF9XVFJfTUFSS19NQVNLKQorCisvKiEgQG5hbWUgU0xPVF9QUkVMT0FEIC0gU0xPVCBQUkVMT0FEICovCisjZGVmaW5lIFpMTF9TTE9UX1BSRUxPQURfU0xPVF9QUkVMT0FEX01BU0sgICAgICAgKDB4RkZVKQorI2RlZmluZSBaTExfU0xPVF9QUkVMT0FEX1NMT1RfUFJFTE9BRF9TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1NMT1RfUFJFTE9BRF9TTE9UX1BSRUxPQUQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TTE9UX1BSRUxPQURfU0xPVF9QUkVMT0FEX1NISUZUKSkgJiBaTExfU0xPVF9QUkVMT0FEX1NMT1RfUFJFTE9BRF9NQVNLKQorCisvKiEgQG5hbWUgU0VRX1NUQVRFIC0gODAyLjE1LjQgU0VRVUVOQ0UgU1RBVEUgKi8KKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9TRVFfU1RBVEVfTUFTSyAgICAgICAgICAgICAoMHgxRlUpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfU0VRX1NUQVRFX1NISUZUICAgICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX1NFUV9TVEFURSh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9TVEFURV9TRVFfU1RBVEVfU0hJRlQpKSAmIFpMTF9TRVFfU1RBVEVfU0VRX1NUQVRFX01BU0spCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfUFJFQU1CTEVfREVUX01BU0sgICAgICAgICAgKDB4MTAwVSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9QUkVBTUJMRV9ERVRfU0hJRlQgICAgICAgICAoOFUpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfUFJFQU1CTEVfREVUKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX1NUQVRFX1BSRUFNQkxFX0RFVF9TSElGVCkpICYgWkxMX1NFUV9TVEFURV9QUkVBTUJMRV9ERVRfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9TRkRfREVUX01BU0sgICAgICAgICAgICAgICAoMHgyMDBVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX1NGRF9ERVRfU0hJRlQgICAgICAgICAgICAgICg5VSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9TRkRfREVUKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfU1RBVEVfU0ZEX0RFVF9TSElGVCkpICYgWkxMX1NFUV9TVEFURV9TRkRfREVUX01BU0spCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfRklMVEVSRkFJTF9GTEFHX1NFTF9NQVNLICAgKDB4NDAwVSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9GSUxURVJGQUlMX0ZMQUdfU0VMX1NISUZUICAoMTBVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX0ZJTFRFUkZBSUxfRkxBR19TRUwoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9TVEFURV9GSUxURVJGQUlMX0ZMQUdfU0VMX1NISUZUKSkgJiBaTExfU0VRX1NUQVRFX0ZJTFRFUkZBSUxfRkxBR19TRUxfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9DUkNWQUxJRF9NQVNLICAgICAgICAgICAgICAoMHg4MDBVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX0NSQ1ZBTElEX1NISUZUICAgICAgICAgICAgICgxMVUpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfQ1JDVkFMSUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX1NUQVRFX0NSQ1ZBTElEX1NISUZUKSkgJiBaTExfU0VRX1NUQVRFX0NSQ1ZBTElEX01BU0spCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfUExMX0FCT1JUX01BU0sgICAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfUExMX0FCT1JUX1NISUZUICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9QTExfQUJPUlQoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfU1RBVEVfUExMX0FCT1JUX1NISUZUKSkgJiBaTExfU0VRX1NUQVRFX1BMTF9BQk9SVF9NQVNLKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX1BMTF9BQk9SVEVEX01BU0sgICAgICAgICAgICgweDIwMDBVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX1BMTF9BQk9SVEVEX1NISUZUICAgICAgICAgICgxM1UpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfUExMX0FCT1JURUQoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX1NUQVRFX1BMTF9BQk9SVEVEX1NISUZUKSkgJiBaTExfU0VRX1NUQVRFX1BMTF9BQk9SVEVEX01BU0spCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfUlhfQllURV9DT1VOVF9NQVNLICAgICAgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9SWF9CWVRFX0NPVU5UX1NISUZUICAgICAgICAoMTZVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX1JYX0JZVEVfQ09VTlQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9TVEFURV9SWF9CWVRFX0NPVU5UX1NISUZUKSkgJiBaTExfU0VRX1NUQVRFX1JYX0JZVEVfQ09VTlRfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9DQ0NBX0JVU1lfQ05UX01BU0sgICAgICAgICAoMHgzRjAwMDAwMFUpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfQ0NDQV9CVVNZX0NOVF9TSElGVCAgICAgICAgKDI0VSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9DQ0NBX0JVU1lfQ05UKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfU1RBVEVfQ0NDQV9CVVNZX0NOVF9TSElGVCkpICYgWkxMX1NFUV9TVEFURV9DQ0NBX0JVU1lfQ05UX01BU0spCisKKy8qISBAbmFtZSBUTVJfUFJFU0NBTEUgLSBUSU1FUiBQUkVTQ0FMRVIgKi8KKyNkZWZpbmUgWkxMX1RNUl9QUkVTQ0FMRV9UTVJfUFJFU0NBTEVfTUFTSyAgICAgICAoMHg3VSkKKyNkZWZpbmUgWkxMX1RNUl9QUkVTQ0FMRV9UTVJfUFJFU0NBTEVfU0hJRlQgICAgICAoMFUpCisjZGVmaW5lIFpMTF9UTVJfUFJFU0NBTEVfVE1SX1BSRVNDQUxFKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfVE1SX1BSRVNDQUxFX1RNUl9QUkVTQ0FMRV9TSElGVCkpICYgWkxMX1RNUl9QUkVTQ0FMRV9UTVJfUFJFU0NBTEVfTUFTSykKKworLyohIEBuYW1lIExFTklFTkNZX0xTQiAtIExFTklFTkNZIExTQiAqLworI2RlZmluZSBaTExfTEVOSUVOQ1lfTFNCX0xFTklFTkNZX0xTQl9NQVNLICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgWkxMX0xFTklFTkNZX0xTQl9MRU5JRU5DWV9MU0JfU0hJRlQgICAgICAoMFUpCisjZGVmaW5lIFpMTF9MRU5JRU5DWV9MU0JfTEVOSUVOQ1lfTFNCKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfTEVOSUVOQ1lfTFNCX0xFTklFTkNZX0xTQl9TSElGVCkpICYgWkxMX0xFTklFTkNZX0xTQl9MRU5JRU5DWV9MU0JfTUFTSykKKworLyohIEBuYW1lIExFTklFTkNZX01TQiAtIExFTklFTkNZIE1TQiAqLworI2RlZmluZSBaTExfTEVOSUVOQ1lfTVNCX0xFTklFTkNZX01TQl9NQVNLICAgICAgICgweEZGVSkKKyNkZWZpbmUgWkxMX0xFTklFTkNZX01TQl9MRU5JRU5DWV9NU0JfU0hJRlQgICAgICAoMFUpCisjZGVmaW5lIFpMTF9MRU5JRU5DWV9NU0JfTEVOSUVOQ1lfTVNCKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfTEVOSUVOQ1lfTVNCX0xFTklFTkNZX01TQl9TSElGVCkpICYgWkxMX0xFTklFTkNZX01TQl9MRU5JRU5DWV9NU0JfTUFTSykKKworLyohIEBuYW1lIFBBUlRfSUQgLSBQQVJUIElEICovCisjZGVmaW5lIFpMTF9QQVJUX0lEX1BBUlRfSURfTUFTSyAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBaTExfUEFSVF9JRF9QQVJUX0lEX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1BBUlRfSURfUEFSVF9JRCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QQVJUX0lEX1BBUlRfSURfU0hJRlQpKSAmIFpMTF9QQVJUX0lEX1BBUlRfSURfTUFTSykKKworLyohIEBuYW1lIFBLVF9CVUZGRVJfVFggLSBQYWNrZXQgQnVmZmVyIFRYICovCisjZGVmaW5lIFpMTF9QS1RfQlVGRkVSX1RYX1BLVF9CVUZGRVJfVFhfTUFTSyAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFpMTF9QS1RfQlVGRkVSX1RYX1BLVF9CVUZGRVJfVFhfU0hJRlQgICAgKDBVKQorI2RlZmluZSBaTExfUEtUX0JVRkZFUl9UWF9QS1RfQlVGRkVSX1RYKHgpICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgWkxMX1BLVF9CVUZGRVJfVFhfUEtUX0JVRkZFUl9UWF9TSElGVCkpICYgWkxMX1BLVF9CVUZGRVJfVFhfUEtUX0JVRkZFUl9UWF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgWkxMX1BLVF9CVUZGRVJfVFggKi8KKyNkZWZpbmUgWkxMX1BLVF9CVUZGRVJfVFhfQ09VTlQgICAgICAgICAgICAgICAgICAoNjRVKQorCisvKiEgQG5hbWUgUEtUX0JVRkZFUl9SWCAtIFBhY2tldCBCdWZmZXIgUlggKi8KKyNkZWZpbmUgWkxMX1BLVF9CVUZGRVJfUlhfUEtUX0JVRkZFUl9SWF9NQVNLICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgWkxMX1BLVF9CVUZGRVJfUlhfUEtUX0JVRkZFUl9SWF9TSElGVCAgICAoMFUpCisjZGVmaW5lIFpMTF9QS1RfQlVGRkVSX1JYX1BLVF9CVUZGRVJfUlgoeCkgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBaTExfUEtUX0JVRkZFUl9SWF9QS1RfQlVGRkVSX1JYX1NISUZUKSkgJiBaTExfUEtUX0JVRkZFUl9SWF9QS1RfQlVGRkVSX1JYX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBaTExfUEtUX0JVRkZFUl9SWCAqLworI2RlZmluZSBaTExfUEtUX0JVRkZFUl9SWF9DT1VOVCAgICAgICAgICAgICAgICAgICg2NFUpCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBaTExfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBaTEwgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBaTEwgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFpMTF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNUQwMDB1KQorLyoqIFBlcmlwaGVyYWwgWkxMIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBaTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoWkxMX1R5cGUgKilaTExfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBaTEwgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBaTExfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgWkxMX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFpMTCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgWkxMX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFpMTCB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgWkxMX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyoKKyoqIEVuZCBvZiBzZWN0aW9uIHVzaW5nIGFub255bW91cyB1bmlvbnMKKyovCisKKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikKKyAgI3ByYWdtYSBwb3AKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pCisgIC8qIGxlYXZlIGFub255bW91cyB1bmlvbnMgZW5hYmxlZCAqLworI2VsaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQorICAjcHJhZ21hIGxhbmd1YWdlPWRlZmF1bHQKKyNlbHNlCisgICNlcnJvciBOb3Qgc3VwcG9ydGVkIGNvbXBpbGVyIHR5cGUKKyNlbmRpZgorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFBlcmlwaGVyYWxfYWNjZXNzX2xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTWFjcm9zIGZvciB1c2Ugd2l0aCBiaXQgZmllbGQgZGVmaW5pdGlvbnMgKHh4eF9TSElGVCwgeHh4X01BU0spLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIEJpdF9GaWVsZF9HZW5lcmljX01hY3JvcyBNYWNyb3MgZm9yIHVzZSB3aXRoIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAoeHh4X1NISUZULCB4eHhfTUFTSykuCisgKiBAeworICovCisKKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikKKyAgI2lmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIKKyAgI2VuZGlmCisjZWxpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCisgICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUKKyNlbmRpZgorCisvKioKKyAqIEBicmllZiBNYXNrIGFuZCBsZWZ0LXNoaWZ0IGEgYml0IGZpZWxkIHZhbHVlIGZvciB1c2UgaW4gYSByZWdpc3RlciBiaXQgcmFuZ2UuCisgKiBAcGFyYW0gZmllbGQgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIHRoZSBiaXQgZmllbGQuCisgKiBAcmV0dXJuIE1hc2tlZCBhbmQgc2hpZnRlZCB2YWx1ZS4KKyAqLworI2RlZmluZSBOWFBfVkFMMkZMRChmaWVsZCwgdmFsdWUpICAgICgoKHZhbHVlKSA8PCAoZmllbGQgIyMgX1NISUZUKSkgJiAoZmllbGQgIyMgX01BU0spKQorLyoqCisgKiBAYnJpZWYgTWFzayBhbmQgcmlnaHQtc2hpZnQgYSByZWdpc3RlciB2YWx1ZSB0byBleHRyYWN0IGEgYml0IGZpZWxkIHZhbHVlLgorICogQHBhcmFtIGZpZWxkIE5hbWUgb2YgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0aGUgcmVnaXN0ZXIuCisgKiBAcmV0dXJuIE1hc2tlZCBhbmQgc2hpZnRlZCBiaXQgZmllbGQgdmFsdWUuCisgKi8KKyNkZWZpbmUgTlhQX0ZMRDJWQUwoZmllbGQsIHZhbHVlKSAgICAoKCh2YWx1ZSkgJiAoZmllbGQgIyMgX01BU0spKSA+PiAoZmllbGQgIyMgX1NISUZUKSkKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBCaXRfRmllbGRfR2VuZXJpY19NYWNyb3MgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTREsgQ29tcGF0aWJpbGl0eQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFNES19Db21wYXRpYmlsaXR5X1N5bWJvbHMgU0RLIENvbXBhdGliaWxpdHkKKyAqIEB7CisgKi8KKworI2RlZmluZSBEU1BJMCAgICAgICAgICAgICAgICAgICAgIFNQSTAKKyNkZWZpbmUgRFNQSTEgICAgICAgICAgICAgICAgICAgICBTUEkxCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgU0RLX0NvbXBhdGliaWxpdHlfU3ltYm9scyAqLworCisKKyNlbmRpZiAgLyogX01LVzQxWjRfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvTUtXNDFaNF9mZWF0dXJlcy5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvTUtXNDFaNF9mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlN2ZlZTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9NS1c0MVo0X2ZlYXR1cmVzLmgKQEAgLTAsMCArMSwyMDIwIEBACisvKgorKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKiogICAgIFZlcnNpb246ICAgICAgICAgICAgIHJldi4gMS4wLCAyMDE1LTA5LTIzCisqKiAgICAgQnVpbGQ6ICAgICAgICAgICAgICAgYjE3MDIyOAorKioKKyoqICAgICBBYnN0cmFjdDoKKyoqICAgICAgICAgQ2hpcCBzcGVjaWZpYyBtb2R1bGUgZmVhdHVyZXMuCisqKgorKiogICAgIENvcHlyaWdodCAyMDE2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisqKiAgICAgQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyoqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorKiogICAgIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoqCisqKiAgICAgbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorKiogICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKioKKyoqICAgICBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworKiogICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisqKiAgICAgICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKioKKyoqICAgICBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyoqICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyoqICAgICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKioKKyoqICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisqKiAgICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyoqICAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisqKiAgICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyoqICAgICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyoqICAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqKiAgICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisqKiAgICAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyoqICAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworKiogICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKioKKyoqICAgICBodHRwOiAgICAgICAgICAgICAgICAgd3d3Lm54cC5jb20KKyoqICAgICBtYWlsOiAgICAgICAgICAgICAgICAgc3VwcG9ydEBueHAuY29tCisqKgorKiogICAgIFJldmlzaW9uczoKKyoqICAgICAtIHJldi4gMS4wICgyMDE1LTA5LTIzKQorKiogICAgICAgICBJbml0aWFsIHZlcnNpb24uCisqKgorKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKi8KKworI2lmbmRlZiBfTUtXNDFaNF9GRUFUVVJFU19IXworI2RlZmluZSBfTUtXNDFaNF9GRUFUVVJFU19IXworCisvKiBTT0MgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBBQ01QIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfQUNNUF9DT1VOVCAoMCkKKy8qIEBicmllZiBBREMxNiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0FEQzE2X0NPVU5UICgxKQorLyogQGJyaWVmIEFEQzEyIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfQURDMTJfQ09VTlQgKDApCisvKiBAYnJpZWYgQUZFIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfQUZFX0NPVU5UICgwKQorLyogQGJyaWVmIEFJUFMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19BSVBTX0NPVU5UICgwKQorLyogQGJyaWVmIEFPSSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0FPSV9DT1VOVCAoMCkKKy8qIEBicmllZiBBWEJTIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfQVhCU19DT1VOVCAoMCkKKy8qIEBicmllZiBBU01DIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfQVNNQ19DT1VOVCAoMCkKKy8qIEBicmllZiBDQURDIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfQ0FEQ19DT1VOVCAoMCkKKy8qIEBicmllZiBGTEVYQ0FOIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRkxFWENBTl9DT1VOVCAoMCkKKy8qIEBicmllZiBNTUNBVSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX01NQ0FVX0NPVU5UICgwKQorLyogQGJyaWVmIENNUCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0NNUF9DT1VOVCAoMSkKKy8qIEBicmllZiBDTVQgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19DTVRfQ09VTlQgKDEpCisvKiBAYnJpZWYgQ05DIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfQ05DX0NPVU5UICgwKQorLyogQGJyaWVmIENSQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0NSQ19DT1VOVCAoMCkKKy8qIEBicmllZiBEQUMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19EQUNfQ09VTlQgKDEpCisvKiBAYnJpZWYgREFDMzIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19EQUMzMl9DT1VOVCAoMCkKKy8qIEBicmllZiBEQ0RDIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRENEQ19DT1VOVCAoMSkKKy8qIEBicmllZiBERFIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19ERFJfQ09VTlQgKDApCisvKiBAYnJpZWYgRE1BIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UICgwKQorLyogQGJyaWVmIEVETUEgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UICgxKQorLyogQGJyaWVmIERNQU1VWCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0RNQU1VWF9DT1VOVCAoMSkKKy8qIEBicmllZiBEUlkgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19EUllfQ09VTlQgKDApCisvKiBAYnJpZWYgRFNQSSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0RTUElfQ09VTlQgKDIpCisvKiBAYnJpZWYgRU1WU0lNIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRU1WU0lNX0NPVU5UICgwKQorLyogQGJyaWVmIEVOQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0VOQ19DT1VOVCAoMCkKKy8qIEBicmllZiBFTkVUIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRU5FVF9DT1VOVCAoMCkKKy8qIEBicmllZiBFV00gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19FV01fQ09VTlQgKDApCisvKiBAYnJpZWYgRkIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19GQl9DT1VOVCAoMCkKKy8qIEBicmllZiBGR1BJTyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0ZHUElPX0NPVU5UICgzKQorLyogQGJyaWVmIEZMRVhJTyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0ZMRVhJT19DT1VOVCAoMCkKKy8qIEBicmllZiBGTUMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19GTUNfQ09VTlQgKDApCisvKiBAYnJpZWYgRlNLRFQgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19GU0tEVF9DT1VOVCAoMCkKKy8qIEBicmllZiBGVEZBIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRlRGQV9DT1VOVCAoMSkKKy8qIEBicmllZiBGVEZFIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRlRGRV9DT1VOVCAoMCkKKy8qIEBicmllZiBGVEZMIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRlRGTF9DT1VOVCAoMCkKKy8qIEBicmllZiBGVE0gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19GVE1fQ09VTlQgKDApCisvKiBAYnJpZWYgRlRNUkEgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19GVE1SQV9DT1VOVCAoMCkKKy8qIEBicmllZiBGVE1SRSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0ZUTVJFX0NPVU5UICgwKQorLyogQGJyaWVmIEZUTVJIIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRlRNUkhfQ09VTlQgKDApCisvKiBAYnJpZWYgR1BJTyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0dQSU9fQ09VTlQgKDMpCisvKiBAYnJpZWYgSFNBREMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19IU0FEQ19DT1VOVCAoMCkKKy8qIEBicmllZiBJMkMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19JMkNfQ09VTlQgKDIpCisvKiBAYnJpZWYgSTJTIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfSTJTX0NPVU5UICgwKQorLyogQGJyaWVmIElDUyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0lDU19DT1VOVCAoMCkKKy8qIEBicmllZiBJTlRNVVggYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19JTlRNVVhfQ09VTlQgKDApCisvKiBAYnJpZWYgSVJRIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfSVJRX0NPVU5UICgwKQorLyogQGJyaWVmIEtCSSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0tCSV9DT1VOVCAoMCkKKy8qIEBicmllZiBTTENEIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfU0xDRF9DT1VOVCAoMCkKKy8qIEBicmllZiBMQ0RDIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTENEQ19DT1VOVCAoMCkKKy8qIEBicmllZiBMRE8gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19MRE9fQ09VTlQgKDApCisvKiBAYnJpZWYgTExXVSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0xMV1VfQ09VTlQgKDEpCisvKiBAYnJpZWYgTE1FTSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0xNRU1fQ09VTlQgKDApCisvKiBAYnJpZWYgTFBJMkMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19MUEkyQ19DT1VOVCAoMCkKKy8qIEBicmllZiBMUElUIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTFBJVF9DT1VOVCAoMCkKKy8qIEBicmllZiBMUFNDSSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0xQU0NJX0NPVU5UICgwKQorLyogQGJyaWVmIExQU1BJIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTFBTUElfQ09VTlQgKDApCisvKiBAYnJpZWYgTFBUTVIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19MUFRNUl9DT1VOVCAoMSkKKy8qIEBicmllZiBMUFRQTSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0xQVFBNX0NPVU5UICgwKQorLyogQGJyaWVmIExQVUFSVCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0xQVUFSVF9DT1VOVCAoMSkKKy8qIEBicmllZiBMVEMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19MVENfQ09VTlQgKDEpCisvKiBAYnJpZWYgTUMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19NQ19DT1VOVCAoMCkKKy8qIEBicmllZiBNQ0cgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19NQ0dfQ09VTlQgKDEpCisvKiBAYnJpZWYgTUNHTElURSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX01DR0xJVEVfQ09VTlQgKDApCisvKiBAYnJpZWYgTUNNIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTUNNX0NPVU5UICgxKQorLyogQGJyaWVmIE1NQVUgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19NTUFVX0NPVU5UICgwKQorLyogQGJyaWVmIE1NRFZTUSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX01NRFZTUV9DT1VOVCAoMCkKKy8qIEBicmllZiBTWVNNUFUgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19TWVNNUFVfQ09VTlQgKDApCisvKiBAYnJpZWYgTVNDQU4gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19NU0NBTl9DT1VOVCAoMCkKKy8qIEBicmllZiBNU0NNIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTVNDTV9DT1VOVCAoMCkKKy8qIEBicmllZiBNVEIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19NVEJfQ09VTlQgKDEpCisvKiBAYnJpZWYgTVRCRFdUIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTVRCRFdUX0NPVU5UICgxKQorLyogQGJyaWVmIE1VIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTVVfQ09VTlQgKDApCisvKiBAYnJpZWYgTkZDIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTkZDX0NPVU5UICgwKQorLyogQGJyaWVmIE9QQU1QIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfT1BBTVBfQ09VTlQgKDApCisvKiBAYnJpZWYgT1NDIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfT1NDX0NPVU5UICgwKQorLyogQGJyaWVmIE9TQzMyIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfT1NDMzJfQ09VTlQgKDApCisvKiBAYnJpZWYgT1RGQUQgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19PVEZBRF9DT1VOVCAoMCkKKy8qIEBicmllZiBQREIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19QREJfQ09VTlQgKDApCisvKiBAYnJpZWYgUENDIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUENDX0NPVU5UICgwKQorLyogQGJyaWVmIFBHQSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1BHQV9DT1VOVCAoMCkKKy8qIEBicmllZiBQSVQgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19QSVRfQ09VTlQgKDEpCisvKiBAYnJpZWYgUE1DIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUE1DX0NPVU5UICgxKQorLyogQGJyaWVmIFBPUlQgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19QT1JUX0NPVU5UICgzKQorLyogQGJyaWVmIFBXTSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1BXTV9DT1VOVCAoMCkKKy8qIEBicmllZiBQV1QgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19QV1RfQ09VTlQgKDApCisvKiBAYnJpZWYgUXVhZFNQSSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1F1YWRTUElfQ09VTlQgKDApCisvKiBAYnJpZWYgUkNNIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUkNNX0NPVU5UICgxKQorLyogQGJyaWVmIFJGU1lTIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUkZTWVNfQ09VTlQgKDEpCisvKiBAYnJpZWYgUkZWQkFUIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUkZWQkFUX0NPVU5UICgwKQorLyogQGJyaWVmIFJORyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1JOR19DT1VOVCAoMCkKKy8qIEBicmllZiBSTkdCIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUk5HQl9DT1VOVCAoMCkKKy8qIEBicmllZiBST00gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19ST01fQ09VTlQgKDEpCisvKiBAYnJpZWYgUlNJTSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1JTSU1fQ09VTlQgKDEpCisvKiBAYnJpZWYgUlRDIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUlRDX0NPVU5UICgxKQorLyogQGJyaWVmIFNDRyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1NDR19DT1VOVCAoMCkKKy8qIEBicmllZiBTQ0kgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19TQ0lfQ09VTlQgKDApCisvKiBAYnJpZWYgU0RIQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1NESENfQ09VTlQgKDApCisvKiBAYnJpZWYgU0RSQU0gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19TRFJBTV9DT1VOVCAoMCkKKy8qIEBicmllZiBTRU1BNDIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19TRU1BNDJfQ09VTlQgKDApCisvKiBAYnJpZWYgU0lNIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfU0lNX0NPVU5UICgxKQorLyogQGJyaWVmIFNNQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1NNQ19DT1VOVCAoMSkKKy8qIEBicmllZiBTUEkgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19TUElfQ09VTlQgKDApCisvKiBAYnJpZWYgVE1SIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfVE1SX0NPVU5UICgwKQorLyogQGJyaWVmIFRQTSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1RQTV9DT1VOVCAoMykKKy8qIEBicmllZiBUUkdNVVggYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19UUkdNVVhfQ09VTlQgKDApCisvKiBAYnJpZWYgVFJJQU1QIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfVFJJQU1QX0NPVU5UICgwKQorLyogQGJyaWVmIFRSTkcgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19UUk5HX0NPVU5UICgxKQorLyogQGJyaWVmIFRTSSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1RTSV9DT1VOVCAoMSkKKy8qIEBicmllZiBUU1RNUiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1RTVE1SX0NPVU5UICgwKQorLyogQGJyaWVmIFVBUlQgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19VQVJUX0NPVU5UICgwKQorLyogQGJyaWVmIFVTQiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1VTQl9DT1VOVCAoMCkKKy8qIEBicmllZiBVU0JEQ0QgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19VU0JEQ0RfQ09VTlQgKDApCisvKiBAYnJpZWYgVVNCSFMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19VU0JIU19DT1VOVCAoMCkKKy8qIEBicmllZiBVU0JIU0RDRCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1VTQkhTRENEX0NPVU5UICgwKQorLyogQGJyaWVmIFVTQlBIWSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1VTQlBIWV9DT1VOVCAoMCkKKy8qIEBicmllZiBWUkVGIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfVlJFRl9DT1VOVCAoMSkKKy8qIEBicmllZiBXRE9HIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfV0RPR19DT1VOVCAoMCkKKy8qIEBicmllZiBYQkFSIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfWEJBUl9DT1VOVCAoMCkKKy8qIEBicmllZiBYQkFSQSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1hCQVJBX0NPVU5UICgwKQorLyogQGJyaWVmIFhCQVJCIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfWEJBUkJfQ09VTlQgKDApCisvKiBAYnJpZWYgWENWUiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1hDVlJfQ09VTlQgKDEpCisvKiBAYnJpZWYgWFJEQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1hSRENfQ09VTlQgKDApCisvKiBAYnJpZWYgWkxMIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfWkxMX0NPVU5UICgxKQorCisvKiBBREMxNiBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEhhcyBQcm9ncmFtbWFibGUgR2FpbiBBbXBsaWZpZXIgKFBHQSkgaW4gQURDIChyZWdpc3RlciBQR0EpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBICgwKQorLyogQGJyaWVmIEhhcyBQR0EgY2hvcHBpbmcgY29udHJvbCBpbiBBREMgKGJpdCBQR0FbUEdBQ0hQYl0gb3IgUEdBW1BHQUNIUF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBX0NIT1BQSU5HICgwKQorLyogQGJyaWVmIEhhcyBQR0Egb2Zmc2V0IG1lYXN1cmVtZW50IG1vZGUgaW4gQURDIChiaXQgUEdBW1BHQU9GU01dKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQV9PRkZTRVRfTUVBU1VSRU1FTlQgKDApCisvKiBAYnJpZWYgSGFzIERNQSBzdXBwb3J0IChiaXQgU0MyW0RNQUVOXSBvciBTQzRbRE1BRU5dKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0RNQSAoMSkKKy8qIEBicmllZiBIYXMgZGlmZmVyZW50aWFsIG1vZGUgKGJpdGZpZWxkIFNDMXhbRElGRl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFICgxKQorLyogQGJyaWVmIEhhcyBGSUZPIChiaXQgU0M0W0FGREVQXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19GSUZPICgwKQorLyogQGJyaWVmIEZJRk8gc2l6ZSBpZiBhdmFpbGFibGUgKGJpdGZpZWxkIFNDNFtBRkRFUF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9BREMxNl9GSUZPX1NJWkUgKDApCisvKiBAYnJpZWYgSGFzIGNoYW5uZWwgc2V0IGEvYiBtdWx0aXBsZXhvciAoYml0ZmllbGQgQ0ZHMltNVVhTRUxdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX01VWF9TRUxFQ1QgKDEpCisvKiBAYnJpZWYgSGFzIEhXIHRyaWdnZXIgbWFza2luZyAoYml0ZmllbGQgU0M1W0hUUkdNQVNLRV0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19IV19UUklHR0VSX01BU0sgKDApCisvKiBAYnJpZWYgSGFzIGNhbGlicmF0aW9uIGZlYXR1cmUgKGJpdCBTQzNbQ0FMXSBhbmQgcmVnaXN0ZXJzIENMUHgsIENMTXgpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04gKDEpCisvKiBAYnJpZWYgSGFzIEhXIGF2ZXJhZ2luZyAoYml0IFNDM1tBVkdFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19IV19BVkVSQUdFICgxKQorLyogQGJyaWVmIEhhcyBvZmZzZXQgY29ycmVjdGlvbiAocmVnaXN0ZXIgT0ZTKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX09GRlNFVF9DT1JSRUNUSU9OICgxKQorLyogQGJyaWVmIE1heGltdW0gQURDIHJlc29sdXRpb24uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0FEQzE2X01BWF9SRVNPTFVUSU9OICgxNikKKy8qIEBicmllZiBOdW1iZXIgb2YgU0MxeCBhbmQgUnggcmVnaXN0ZXIgcGFpcnMgKGNvbnZlcnNpb24gY29udHJvbCBhbmQgcmVzdWx0IHJlZ2lzdGVycykuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0FEQzE2X0NPTlZFUlNJT05fQ09OVFJPTF9DT1VOVCAoMikKKworLyogQlRMRV9SRiBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogTm8gZmVhdHVyZSBkZWZpbml0aW9ucyAqLworCisvKiBDTVAgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBIYXMgVHJpZ2dlciBtb2RlIGluIENNUCAocmVnaXN0ZXIgYml0IGZpZWxkIENSMVtUUklHTV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9DTVBfSEFTX1RSSUdHRVJfTU9ERSAoMSkKKy8qIEBicmllZiBIYXMgV2luZG93IG1vZGUgaW4gQ01QIChyZWdpc3RlciBiaXQgZmllbGQgQ1IxW1dFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0NNUF9IQVNfV0lORE9XX01PREUgKDApCisvKiBAYnJpZWYgSGFzIEV4dGVybmFsIHNhbXBsZSBzdXBwb3J0ZWQgaW4gQ01QIChyZWdpc3RlciBiaXQgZmllbGQgQ1IxW1NFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0NNUF9IQVNfRVhURVJOQUxfU0FNUExFX1NVUFBPUlQgKDApCisvKiBAYnJpZWYgSGFzIERNQSBzdXBwb3J0IGluIENNUCAocmVnaXN0ZXIgYml0IGZpZWxkIFNDUltETUFFTl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9DTVBfSEFTX0RNQSAoMSkKKy8qIEBicmllZiBIYXMgUGFzcyBUaHJvdWdoIG1vZGUgaW4gQ01QIChyZWdpc3RlciBiaXQgZmllbGQgTVVYQ1JbUFNUTV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9DTVBfSEFTX1BBU1NfVEhST1VHSF9NT0RFICgwKQorLyogQGJyaWVmIEhhcyBEQUMgVGVzdCBmdW5jdGlvbiBpbiBDTVAgKHJlZ2lzdGVyIERBQ1RFU1QpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9DTVBfSEFTX0RBQ19URVNUICgwKQorCisvKiBDT1AgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBIYXMgdGhlIENPUCBEZWJ1ZyBFbmFibGUgYml0IChDT1BDW0NPUERCR0VOXSkgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQ09QX0hBU19ERUJVR19FTkFCTEUgKDEpCisvKiBAYnJpZWYgSGFzIHRoZSBDT1AgU3RvcCBtb2RlIEVuYWJsZSBiaXQgKENPUENbQ09QU1RQRU5dKSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9DT1BfSEFTX1NUT1BfRU5BQkxFICgxKQorLyogQGJyaWVmIEhhcyBtb3JlIGNsb2NrIHNvdXJjZXMgbGlrZSBNQ0dJUkMgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQ09QX0hBU19NT1JFX0NMS1NSQyAoMSkKKy8qIEBicmllZiBIYXMgdGhlIHRpbWVvdXQgbG9uZyBhbmQgc2hvcnQgbW9kZSBiaXQgKENPUENbQ09QQ0xLU10pICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0NPUF9IQVNfTE9OR1RJTUVfTU9ERSAoMSkKKworLyogREFDIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgRGVmaW5lIHRoZSBzaXplIG9mIGhhcmR3YXJlIGJ1ZmZlciAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9EQUNfQlVGRkVSX1NJWkUgKDIpCisvKiBAYnJpZWYgRGVmaW5lIHdoZXRoZXIgdGhlIGJ1ZmZlciBzdXBwb3J0cyB3YXRlcm1hcmsgZXZlbnQgZGV0ZWN0aW9uIG9yIG5vdC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OICgxKQorLyogQGJyaWVmIERlZmluZSB3aGV0aGVyIHRoZSBidWZmZXIgc3VwcG9ydHMgd2F0ZXJtYXJrIHNlbGVjdGlvbiBkZXRlY3Rpb24gb3Igbm90LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19TRUxFQ1RJT04gKDEpCisvKiBAYnJpZWYgRGVmaW5lIHdoZXRoZXIgdGhlIGJ1ZmZlciBzdXBwb3J0cyB3YXRlcm1hcmsgZXZlbnQgMSB3b3JkIGJlZm9yZSBidWZmZXIgdXBwZXIgbGltaXQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLXzFfV09SRCAoMSkKKy8qIEBicmllZiBEZWZpbmUgd2hldGhlciB0aGUgYnVmZmVyIHN1cHBvcnRzIHdhdGVybWFyayBldmVudCAyIHdvcmRzIGJlZm9yZSBidWZmZXIgdXBwZXIgbGltaXQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLXzJfV09SRFMgKDEpCisvKiBAYnJpZWYgRGVmaW5lIHdoZXRoZXIgdGhlIGJ1ZmZlciBzdXBwb3J0cyB3YXRlcm1hcmsgZXZlbnQgMyB3b3JkcyBiZWZvcmUgYnVmZmVyIHVwcGVyIGxpbWl0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS18zX1dPUkRTICgxKQorLyogQGJyaWVmIERlZmluZSB3aGV0aGVyIHRoZSBidWZmZXIgc3VwcG9ydHMgd2F0ZXJtYXJrIGV2ZW50IDQgd29yZHMgYmVmb3JlIGJ1ZmZlciB1cHBlciBsaW1pdC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfNF9XT1JEUyAoMSkKKy8qIEBicmllZiBEZWZpbmUgd2hldGhlciBGSUZPIGJ1ZmZlciBtb2RlIGlzIGF2YWlsYWJsZSBvciBub3QuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RBQ19IQVNfQlVGRkVSX0ZJRk9fTU9ERSAoMCkKKy8qIEBicmllZiBEZWZpbmUgd2hldGhlciBzd2luZyBidWZmZXIgbW9kZSBpcyBhdmFpbGFibGUgb3Igbm90Li4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfREFDX0hBU19CVUZGRVJfU1dJTkdfTU9ERSAoMCkKKworLyogRENEQyBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEhhcyBWREQxUDUgYml0cyBpbiBEQ0RDIFJFRzMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RDRENfUkVHM19IQVNfVkREMVA1X0JJVFMgKDEpCisvKiBAYnJpZWYgSGFzIFZERDFQNDUgYml0cyBpbiBEQ0RDIFJFRzMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RDRENfUkVHM19IQVNfVkREMVA0NV9CSVRTICgwKQorCisvKiBFRE1BIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgTnVtYmVyIG9mIERNQSBjaGFubmVscyAocmVsYXRlZCB0byBudW1iZXIgb2YgcmVnaXN0ZXJzIFRDRCwgRENIUFJJLCBiaXQgZmllbGRzIEVSUVtFUlFuXSwgRUVJW0VFSW5dLCBJTlRbSU5Ubl0sIEVSUltFUlJuXSwgSFJTW0hSU25dIGFuZCBiaXQgZmllbGQgd2lkdGhzIEVTW0VSUkNITl0sIENFRUlbQ0VFSV0sIFNFRUlbU0VFSV0sIENFUlFbQ0VSUV0sIFNFUlFbU0VSUV0sIENETkVbQ0RORV0sIFNTUlRbU1NSVF0sIENFUlJbQ0VSUl0sIENJTlRbQ0lOVF0sIFRDRG5fQ0lURVJfRUxJTktZRVNbTElOS0NIXSwgVENEbl9DU1JbTUFKT1JMSU5LQ0hdLCBUQ0RuX0JJVEVSX0VMSU5LWUVTW0xJTktDSF0pLiAoVmFsaWQgb25seSBmb3IgZURNQSBtb2R1bGVzLikgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCAoNCkKKy8qIEBicmllZiBUb3RhbCBudW1iZXIgb2YgRE1BIGNoYW5uZWxzIG9uIGFsbCBtb2R1bGVzLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9FRE1BX0RNQU1VWF9DSEFOTkVMUyAoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQgKiA0KQorLyogQGJyaWVmIE51bWJlciBvZiBETUEgY2hhbm5lbCBncm91cHMgKHJlZ2lzdGVyIGJpdCBmaWVsZHMgQ1JbRVJHQV0sIENSW0dSUG5QUkldLCBFU1tHUEVdLCBEQ0hQUkluW0dSUFBSSV0pLiAoVmFsaWQgb25seSBmb3IgZURNQSBtb2R1bGVzLikgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRURNQV9DSEFOTkVMX0dST1VQX0NPVU5UICgxKQorLyogQGJyaWVmIEhhcyBETUFfRXJyb3IgaW50ZXJydXB0IHZlY3Rvci4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRURNQV9IQVNfRVJST1JfSVJRICgwKQorLyogQGJyaWVmIE51bWJlciBvZiBETUEgY2hhbm5lbHMgd2l0aCBhc3luY2hyb25vdXMgcmVxdWVzdCBjYXBhYmlsaXR5IChyZWdpc3RlciBFQVJTKS4gKFZhbGlkIG9ubHkgZm9yIGVETUEgbW9kdWxlcy4pICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0VETUFfQVNZTkNIUk9fUkVRVUVTVF9DSEFOTkVMX0NPVU5UICg0KQorCisvKiBETUFNVVggbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBOdW1iZXIgb2YgRE1BIGNoYW5uZWxzIChyZWxhdGVkIHRvIG51bWJlciBvZiByZWdpc3RlciBDSENGR24pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9ETUFNVVhfTU9EVUxFX0NIQU5ORUwgKDQpCisvKiBAYnJpZWYgVG90YWwgbnVtYmVyIG9mIERNQSBjaGFubmVscyBvbiBhbGwgbW9kdWxlcy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRE1BTVVYX0RNQU1VWF9DSEFOTkVMUyAoRlNMX0ZFQVRVUkVfU09DX0RNQU1VWF9DT1VOVCAqIDQpCisvKiBAYnJpZWYgSGFzIHRoZSBwZXJpb2RpYyB0cmlnZ2VyIGNhcGFiaWxpdHkgZm9yIHRoZSB0cmlnZ2VyZWQgRE1BIGNoYW5uZWwgKHJlZ2lzdGVyIGJpdCBDSENGRzBbVFJJR10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9ETUFNVVhfSEFTX1RSSUcgKDEpCisKKy8qIEZMQVNIIG1vZHVsZSBmZWF0dXJlcyAqLworCisjaWYgZGVmaW5lZChDUFVfTUtXNDFaMjU2VkhUNCkKKyAgICAvKiBAYnJpZWYgSXMgb2YgdHlwZSBGVEZBLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGQSAoMSkKKyAgICAvKiBAYnJpZWYgSXMgb2YgdHlwZSBGVEZFLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGRSAoMCkKKyAgICAvKiBAYnJpZWYgSXMgb2YgdHlwZSBGVEZMLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGTCAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGZsYWdzIGluZGljYXRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgRmxleFJBTSAocmVnaXN0ZXIgYml0cyBGQ05GR1tFRUVSRFldLCBGQ05GR1tSQU1SRFldIGFuZCBGQ05GR1tQRkxTSF0pLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfUkFNX0ZMQUdTICgwKQorICAgIC8qIEBicmllZiBIYXMgcHJvZ3JhbSBmbGFzaCBzd2FwcGluZyBzdGF0dXMgZmxhZyAocmVnaXN0ZXIgYml0IEZDTkZHW1NXQVBdKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QRkxBU0hfU1dBUFBJTkdfU1RBVFVTX0ZMQUcgKDApCisgICAgLyogQGJyaWVmIEhhcyBFRVBST00gcmVnaW9uIHByb3RlY3Rpb24gKHJlZ2lzdGVyIEZFUFJPVCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRUVST01fUkVHSU9OX1BST1RFQ1RJT04gKDApCisgICAgLyogQGJyaWVmIEhhcyBkYXRhIGZsYXNoIHJlZ2lvbiBwcm90ZWN0aW9uIChyZWdpc3RlciBGRFBST1QpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0RBVEFfRkxBU0hfUkVHSU9OX1BST1RFQ1RJT04gKDApCisgICAgLyogQGJyaWVmIEhhcyBmbGFzaCBhY2Nlc3MgY29udHJvbCAocmVnaXN0ZXJzIFhBQ0NIbiwgU0FDQ0huLCB3aGVyZSBuIGlzIGEgbnVtYmVyLCBGQUNTUyBhbmQgRkFDU04pLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0FDQ0VTU19DT05UUk9MICgxKQorICAgIC8qIEBicmllZiBIYXMgZmxhc2ggY2FjaGUgY29udHJvbCBpbiBGTUMgbW9kdWxlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZNQ19GTEFTSF9DQUNIRV9DT05UUk9MUyAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGZsYXNoIGNhY2hlIGNvbnRyb2wgaW4gTUNNIG1vZHVsZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19NQ01fRkxBU0hfQ0FDSEVfQ09OVFJPTFMgKDEpCisgICAgLyogQGJyaWVmIEhhcyBmbGFzaCBjYWNoZSBjb250cm9sIGluIE1TQ00gbW9kdWxlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX01TQ01fRkxBU0hfQ0FDSEVfQ09OVFJPTFMgKDApCisgICAgLyogQGJyaWVmIEhhcyBwcmVmZXRjaCBzcGVjdWxhdGlvbiBjb250cm9sIGluIGZsYXNoLCBzdWNoIGFzIGt2NXguICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIICgwKQorICAgIC8qIEBicmllZiBQLUZsYXNoIHN0YXJ0IGFkZHJlc3MuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU1RBUlRfQUREUkVTUyAoMHgwMDAwMDAwMCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBibG9jayBjb3VudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19DT1VOVCAoMikKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBibG9jayBzaXplLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1NJWkUgKDEzMTA3MikKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBzZWN0b3Igc2l6ZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19TRUNUT1JfU0laRSAoMjA0OCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCB3cml0ZSB1bml0IHNpemUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfV1JJVEVfVU5JVF9TSVpFICg0KQorICAgIC8qIEBicmllZiBQLUZsYXNoIGRhdGEgcGF0aCB3aWR0aC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19EQVRBX1BBVEhfV0lEVEggKDgpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggYmxvY2sgc3dhcCBmZWF0dXJlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BGTEFTSF9CTE9DS19TV0FQICgwKQorICAgIC8qIEBicmllZiBQLUZsYXNoIHByb3RlY3Rpb24gcmVnaW9uIGNvdW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1BST1RFQ1RJT05fUkVHSU9OX0NPVU5UICgzMikKKyAgICAvKiBAYnJpZWYgSGFzIEZsZXhOVk0gbWVtb3J5LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfTlZNICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHN0YXJ0IGFkZHJlc3MuIChWYWxpZCBvbmx5IGlmIEZsZXhOVk0gaXMgYXZhaWxhYmxlLikgKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX1NUQVJUX0FERFJFU1MgKDB4MDAwMDAwMDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gYmxvY2sgY291bnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9CTE9DS19DT1VOVCAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBibG9jayBzaXplLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfU0laRSAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBzZWN0b3Igc2l6ZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0JMT0NLX1NFQ1RPUl9TSVpFICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHdyaXRlIHVuaXQgc2l6ZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0JMT0NLX1dSSVRFX1VOSVRfU0laRSAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBkYXRhIHBhdGggd2lkdGguICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX0JMT0NLX0RBVEFfUEFUSF9XSURUSCAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIEZsZXhSQU0gbWVtb3J5LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfUkFNICgwKQorICAgIC8qIEBicmllZiBGbGV4UkFNIHN0YXJ0IGFkZHJlc3MuIChWYWxpZCBvbmx5IGlmIEZsZXhSQU0gaXMgYXZhaWxhYmxlLikgKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfUkFNX1NUQVJUX0FERFJFU1MgKDB4MDAwMDAwMDApCisgICAgLyogQGJyaWVmIEZsZXhSQU0gc2l6ZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfUkFNX1NJWkUgKDApCisgICAgLyogQGJyaWVmIEhhcyAweDAwIFJlYWQgMXMgQmxvY2sgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEXzFTX0JMT0NLX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MDEgUmVhZCAxcyBTZWN0aW9uIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF8xU19TRUNUSU9OX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MDIgUHJvZ3JhbSBDaGVjayBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fQ0hFQ0tfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHgwMyBSZWFkIFJlc291cmNlIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF9SRVNPVVJDRV9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDA2IFByb2dyYW0gTG9uZ3dvcmQgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX0xPTkdXT1JEX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MDcgUHJvZ3JhbSBQaHJhc2UgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX1BIUkFTRV9DTUQgKDApCisgICAgLyogQGJyaWVmIEhhcyAweDA4IEVyYXNlIEZsYXNoIEJsb2NrIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRVJBU0VfRkxBU0hfQkxPQ0tfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHgwOSBFcmFzZSBGbGFzaCBTZWN0b3IgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FUkFTRV9GTEFTSF9TRUNUT1JfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHgwQiBQcm9ncmFtIFNlY3Rpb24gY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX1NFQ1RJT05fQ01EICgwKQorICAgIC8qIEBicmllZiBIYXMgMHg0MCBSZWFkIDFzIEFsbCBCbG9ja3MgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEXzFTX0FMTF9CTE9DS1NfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHg0MSBSZWFkIE9uY2UgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX09OQ0VfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHg0MyBQcm9ncmFtIE9uY2UgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX09OQ0VfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHg0NCBFcmFzZSBBbGwgQmxvY2tzIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRVJBU0VfQUxMX0JMT0NLU19DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDQ1IFZlcmlmeSBCYWNrZG9vciBBY2Nlc3MgS2V5IGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfVkVSSUZZX0JBQ0tET09SX0FDQ0VTU19LRVlfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHg0NiBTd2FwIENvbnRyb2wgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TV0FQX0NPTlRST0xfQ01EICgwKQorICAgIC8qIEBicmllZiBIYXMgMHg0OSBFcmFzZSBBbGwgQmxvY2tzIFVuc2VjdXJlIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRVJBU0VfQUxMX0JMT0NLU19VTlNFQ1VSRV9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDRBIFJlYWQgMXMgQWxsIEV4ZWN1dGUtb25seSBTZWdtZW50cyBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfMVNfQUxMX0VYRUNVVEVfT05MWV9TRUdNRU5UU19DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDRCIEVyYXNlIEFsbCBFeGVjdXRlLW9ubHkgU2VnbWVudHMgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FUkFTRV9BTExfRVhFQ1VURV9PTkxZX1NFR01FTlRTX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4ODAgUHJvZ3JhbSBQYXJ0aXRpb24gY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX1BBUlRJVElPTl9DTUQgKDApCisgICAgLyogQGJyaWVmIEhhcyAweDgxIFNldCBGbGV4UkFNIEZ1bmN0aW9uIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01EICgwKQorICAgIC8qIEBicmllZiBQLUZsYXNoIEVyYXNlL1JlYWQgMXN0IGFsbCBibG9jayBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX0NNRF9BRERSRVNTX0FMSUdNRU5UICg0KQorICAgIC8qIEBicmllZiBQLUZsYXNoIEVyYXNlIHNlY3RvciBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1NFQ1RPUl9DTURfQUREUkVTU19BTElHTUVOVCAoOCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBScm9ncmFtL1ZlcmlmeSBzZWN0aW9uIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU0VDVElPTl9DTURfQUREUkVTU19BTElHTUVOVCAoOCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBSZWFkIHJlc291cmNlIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfUkVTT1VSQ0VfQ01EX0FERFJFU1NfQUxJR01FTlQgKDQpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggUHJvZ3JhbSBjaGVjayBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0NIRUNLX0NNRF9BRERSRVNTX0FMSUdNRU5UICg0KQorICAgIC8qIEBicmllZiBQLUZsYXNoIFByb2dyYW0gY2hlY2sgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TV0FQX0NPTlRST0xfQ01EX0FERFJFU1NfQUxJR01FTlQgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gRXJhc2UvUmVhZCAxc3QgYWxsIGJsb2NrIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9CTE9DS19DTURfQUREUkVTU19BTElHTUVOVCAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBFcmFzZSBzZWN0b3IgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX1NFQ1RPUl9DTURfQUREUkVTU19BTElHTUVOVCAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBScm9ncmFtL1ZlcmlmeSBzZWN0aW9uIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9TRUNUSU9OX0NNRF9BRERSRVNTX0FMSUdNRU5UICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIFJlYWQgcmVzb3VyY2UgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX1JFU09VUkNFX0NNRF9BRERSRVNTX0FMSUdNRU5UICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIFByb2dyYW0gY2hlY2sgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0NIRUNLX0NNRF9BRERSRVNTX0FMSUdNRU5UICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDAwMDAgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMDAgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMDAwMSBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAwMSAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAwMDEwIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMDEwICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDAwMTEgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMTEgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMDEwMCBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDEwMCAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAwMTAxIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMTAxICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDAxMTAgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMTAgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMDExMSBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDExMSAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAxMDAwIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMDAwICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDEwMDEgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMDEgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMTAxMCBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAxMCAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAxMDExIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMDExICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDExMDAgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMDAgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMTEwMSBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTEwMSAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAxMTEwIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMTEwICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDExMTEgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMTEgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMDAwMCBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMDAwICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMDAwMSBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMDAxICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMDAxMCBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMDEwICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMDAxMSBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMDExICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMDEwMCBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMTAwICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMDEwMSBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMTAxICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMDExMCBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMTEwICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMDExMSBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMTExICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMTAwMCBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMDAwICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMTAwMSBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMDAxICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMTAxMCBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMDEwICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMTAxMSBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMDExICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMTEwMCBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMTAwICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMTEwMSBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMTAxICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMTExMCBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMTEwICgweEZGRkYpCisgICAgLyogQGJyaWVmIEVtdWxhdGVkIGVlcHJvbSBzaXplIGNvZGUgMTExMSBtYXBwaW5nIHRvIGVtdWxhdGVkIGVlcHJvbSBzaXplIGluIGJ5dGVzICgweEZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMTExICgweEZGRkYpCisjZWxpZiBkZWZpbmVkKENQVV9NS1c0MVo1MTJDQVQ0KSB8fCBkZWZpbmVkKENQVV9NS1c0MVo1MTJWSFQ0KQorICAgIC8qIEBicmllZiBJcyBvZiB0eXBlIEZURkEuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZBICgxKQorICAgIC8qIEBicmllZiBJcyBvZiB0eXBlIEZURkUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZFICgwKQorICAgIC8qIEBicmllZiBJcyBvZiB0eXBlIEZURkwuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZMICgwKQorICAgIC8qIEBicmllZiBIYXMgZmxhZ3MgaW5kaWNhdGluZyB0aGUgc3RhdHVzIG9mIHRoZSBGbGV4UkFNIChyZWdpc3RlciBiaXRzIEZDTkZHW0VFRVJEWV0sIEZDTkZHW1JBTVJEWV0gYW5kIEZDTkZHW1BGTFNIXSkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9SQU1fRkxBR1MgKDApCisgICAgLyogQGJyaWVmIEhhcyBwcm9ncmFtIGZsYXNoIHN3YXBwaW5nIHN0YXR1cyBmbGFnIChyZWdpc3RlciBiaXQgRkNORkdbU1dBUF0pLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BGTEFTSF9TV0FQUElOR19TVEFUVVNfRkxBRyAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIEVFUFJPTSByZWdpb24gcHJvdGVjdGlvbiAocmVnaXN0ZXIgRkVQUk9UKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FRVJPTV9SRUdJT05fUFJPVEVDVElPTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGRhdGEgZmxhc2ggcmVnaW9uIHByb3RlY3Rpb24gKHJlZ2lzdGVyIEZEUFJPVCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfREFUQV9GTEFTSF9SRUdJT05fUFJPVEVDVElPTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGZsYXNoIGFjY2VzcyBjb250cm9sIChyZWdpc3RlcnMgWEFDQ0huLCBTQUNDSG4sIHdoZXJlIG4gaXMgYSBudW1iZXIsIEZBQ1NTIGFuZCBGQUNTTikuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wgKDEpCisgICAgLyogQGJyaWVmIEhhcyBmbGFzaCBjYWNoZSBjb250cm9sIGluIEZNQyBtb2R1bGUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRk1DX0ZMQVNIX0NBQ0hFX0NPTlRST0xTICgwKQorICAgIC8qIEBicmllZiBIYXMgZmxhc2ggY2FjaGUgY29udHJvbCBpbiBNQ00gbW9kdWxlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX01DTV9GTEFTSF9DQUNIRV9DT05UUk9MUyAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIGZsYXNoIGNhY2hlIGNvbnRyb2wgaW4gTVNDTSBtb2R1bGUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfTVNDTV9GTEFTSF9DQUNIRV9DT05UUk9MUyAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIHByZWZldGNoIHNwZWN1bGF0aW9uIGNvbnRyb2wgaW4gZmxhc2gsIHN1Y2ggYXMga3Y1eC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0ggKDApCisgICAgLyogQGJyaWVmIFAtRmxhc2ggc3RhcnQgYWRkcmVzcy4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TVEFSVF9BRERSRVNTICgweDAwMDAwMDAwKQorICAgIC8qIEBicmllZiBQLUZsYXNoIGJsb2NrIGNvdW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX0NPVU5UICgyKQorICAgIC8qIEBicmllZiBQLUZsYXNoIGJsb2NrIHNpemUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfU0laRSAoMjYyMTQ0KQorICAgIC8qIEBicmllZiBQLUZsYXNoIHNlY3RvciBzaXplLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1NFQ1RPUl9TSVpFICgyMDQ4KQorICAgIC8qIEBicmllZiBQLUZsYXNoIHdyaXRlIHVuaXQgc2l6ZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19XUklURV9VTklUX1NJWkUgKDQpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggZGF0YSBwYXRoIHdpZHRoLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX0RBVEFfUEFUSF9XSURUSCAoOCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBibG9jayBzd2FwIGZlYXR1cmUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVAgKDApCisgICAgLyogQGJyaWVmIFAtRmxhc2ggcHJvdGVjdGlvbiByZWdpb24gY291bnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfUFJPVEVDVElPTl9SRUdJT05fQ09VTlQgKDMyKQorICAgIC8qIEBicmllZiBIYXMgRmxleE5WTSBtZW1vcnkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9OVk0gKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gc3RhcnQgYWRkcmVzcy4gKFZhbGlkIG9ubHkgaWYgRmxleE5WTSBpcyBhdmFpbGFibGUuKSAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fU1RBUlRfQUREUkVTUyAoMHgwMDAwMDAwMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBibG9jayBjb3VudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0JMT0NLX0NPVU5UICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIGJsb2NrIHNpemUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9CTE9DS19TSVpFICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHNlY3RvciBzaXplLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfU0VDVE9SX1NJWkUgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gd3JpdGUgdW5pdCBzaXplLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfV1JJVEVfVU5JVF9TSVpFICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIGRhdGEgcGF0aCB3aWR0aC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfQkxPQ0tfREFUQV9QQVRIX1dJRFRIICgwKQorICAgIC8qIEBicmllZiBIYXMgRmxleFJBTSBtZW1vcnkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9SQU0gKDApCisgICAgLyogQGJyaWVmIEZsZXhSQU0gc3RhcnQgYWRkcmVzcy4gKFZhbGlkIG9ubHkgaWYgRmxleFJBTSBpcyBhdmFpbGFibGUuKSAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9SQU1fU1RBUlRfQUREUkVTUyAoMHgwMDAwMDAwMCkKKyAgICAvKiBAYnJpZWYgRmxleFJBTSBzaXplLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9SQU1fU0laRSAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MDAgUmVhZCAxcyBCbG9jayBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfMVNfQkxPQ0tfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHgwMSBSZWFkIDFzIFNlY3Rpb24gY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEXzFTX1NFQ1RJT05fQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHgwMiBQcm9ncmFtIENoZWNrIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9DSEVDS19DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDAzIFJlYWQgUmVzb3VyY2UgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MDYgUHJvZ3JhbSBMb25nd29yZCBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fTE9OR1dPUkRfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHgwNyBQcm9ncmFtIFBocmFzZSBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fUEhSQVNFX0NNRCAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MDggRXJhc2UgRmxhc2ggQmxvY2sgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FUkFTRV9GTEFTSF9CTE9DS19DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDA5IEVyYXNlIEZsYXNoIFNlY3RvciBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0ZMQVNIX1NFQ1RPUl9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDBCIFByb2dyYW0gU2VjdGlvbiBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fU0VDVElPTl9DTUQgKDApCisgICAgLyogQGJyaWVmIEhhcyAweDQwIFJlYWQgMXMgQWxsIEJsb2NrcyBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfMVNfQUxMX0JMT0NLU19DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDQxIFJlYWQgT25jZSBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfT05DRV9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDQzIFByb2dyYW0gT25jZSBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fT05DRV9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDQ0IEVyYXNlIEFsbCBCbG9ja3MgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FUkFTRV9BTExfQkxPQ0tTX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NDUgVmVyaWZ5IEJhY2tkb29yIEFjY2VzcyBLZXkgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19WRVJJRllfQkFDS0RPT1JfQUNDRVNTX0tFWV9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDQ2IFN3YXAgQ29udHJvbCBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NXQVBfQ09OVFJPTF9DTUQgKDApCisgICAgLyogQGJyaWVmIEhhcyAweDQ5IEVyYXNlIEFsbCBCbG9ja3MgVW5zZWN1cmUgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FUkFTRV9BTExfQkxPQ0tTX1VOU0VDVVJFX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NEEgUmVhZCAxcyBBbGwgRXhlY3V0ZS1vbmx5IFNlZ21lbnRzIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF8xU19BTExfRVhFQ1VURV9PTkxZX1NFR01FTlRTX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NEIgRXJhc2UgQWxsIEV4ZWN1dGUtb25seSBTZWdtZW50cyBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0FMTF9FWEVDVVRFX09OTFlfU0VHTUVOVFNfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHg4MCBQcm9ncmFtIFBhcnRpdGlvbiBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fUEFSVElUSU9OX0NNRCAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIDB4ODEgU2V0IEZsZXhSQU0gRnVuY3Rpb24gY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TRVRfRkxFWFJBTV9GVU5DVElPTl9DTUQgKDApCisgICAgLyogQGJyaWVmIFAtRmxhc2ggRXJhc2UvUmVhZCAxc3QgYWxsIGJsb2NrIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfQ01EX0FERFJFU1NfQUxJR01FTlQgKDQpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggRXJhc2Ugc2VjdG9yIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU0VDVE9SX0NNRF9BRERSRVNTX0FMSUdNRU5UICg4KQorICAgIC8qIEBicmllZiBQLUZsYXNoIFJyb2dyYW0vVmVyaWZ5IHNlY3Rpb24gY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TRUNUSU9OX0NNRF9BRERSRVNTX0FMSUdNRU5UICg4KQorICAgIC8qIEBicmllZiBQLUZsYXNoIFJlYWQgcmVzb3VyY2UgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9SRVNPVVJDRV9DTURfQUREUkVTU19BTElHTUVOVCAoNCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBQcm9ncmFtIGNoZWNrIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQ0hFQ0tfQ01EX0FERFJFU1NfQUxJR01FTlQgKDQpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggUHJvZ3JhbSBjaGVjayBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1NXQVBfQ09OVFJPTF9DTURfQUREUkVTU19BTElHTUVOVCAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBFcmFzZS9SZWFkIDFzdCBhbGwgYmxvY2sgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0JMT0NLX0NNRF9BRERSRVNTX0FMSUdNRU5UICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIEVyYXNlIHNlY3RvciBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fU0VDVE9SX0NNRF9BRERSRVNTX0FMSUdNRU5UICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIFJyb2dyYW0vVmVyaWZ5IHNlY3Rpb24gY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX1NFQ1RJT05fQ01EX0FERFJFU1NfQUxJR01FTlQgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gUmVhZCByZXNvdXJjZSBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fUkVTT1VSQ0VfQ01EX0FERFJFU1NfQUxJR01FTlQgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gUHJvZ3JhbSBjaGVjayBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQ0hFQ0tfQ01EX0FERFJFU1NfQUxJR01FTlQgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMDAwMCBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAwMCAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAwMDAxIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMDAxICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDAwMTAgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMTAgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMDAxMSBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAxMSAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAwMTAwIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMTAwICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDAxMDEgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMDEgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMDExMCBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDExMCAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAwMTExIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMTExICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDEwMDAgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMDAgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMTAwMSBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAwMSAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAxMDEwIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMDEwICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDEwMTEgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMTEgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMTEwMCBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTEwMCAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAxMTAxIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMTAxICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDExMTAgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMTAgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMTExMSBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTExMSAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMDAwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAwMDAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMDAxIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAwMDEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMDEwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAwMTAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMDExIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAwMTEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMTAwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAxMDAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMTAxIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAxMDEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMTEwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAxMTAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMTExIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAxMTEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMDAwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzEwMDAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMDAxIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzEwMDEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMDEwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzEwMTAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMDExIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzEwMTEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMTAwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzExMDAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMTAxIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzExMDEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMTEwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzExMTAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMTExIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzExMTEgKDB4RkZGRikKKyNlbmRpZiAvKiBkZWZpbmVkKENQVV9NS1c0MVoyNTZWSFQ0KSAqLworCisvKiBHRU5GU0sgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIE5vIGZlYXR1cmUgZGVmaW5pdGlvbnMgKi8KKworLyogR1BJTyBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEhhcyBmYXN0IChzaW5nbGUgY3ljbGUpIGFjY2VzcyBjYXBhYmlsaXR5IHZpYSBhIGRlZGljYXRlZCBtZW1vcnkgcmVnaW9uLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9HUElPX0hBU19GQVNUX0dQSU8gKDEpCisvKiBAYnJpZWYgSGFzIHBvcnQgaW5wdXQgZGlzYWJsZSByZWdpc3RlciAoUElEUikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0dQSU9fSEFTX0lOUFVUX0RJU0FCTEUgKDApCisvKiBAYnJpZWYgSGFzIGRlZGljYXRlZCBpbnRlcnJ1cHQgdmVjdG9yLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9HUElPX0hBU19QT1JUX0lOVEVSUlVQVF9WRUNUT1IgKDEpCisKKy8qIEkyQyBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEhhcyBTeXN0ZW0gTWFuYWdlbWVudCBCdXMgc3VwcG9ydCAocmVnaXN0ZXJzIFNNQiwgQTIsIFNMVEwgYW5kIFNMVEgpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9JMkNfSEFTX1NNQlVTICgxKQorLyogQGJyaWVmIE1heGltdW0gc3VwcG9ydGVkIGJhdWQgcmF0ZSBpbiBraWxvYml0IHBlciBzZWNvbmQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0kyQ19NQVhfQkFVRF9LQlBTICg0MDApCisvKiBAYnJpZWYgSXMgYWZmZWN0ZWQgYnkgZXJyYXRhIHdpdGggSUQgNjA3MCAocmVwZWF0IHN0YXJ0IGNhbm5vdCBiZSBnZW5lcmF0ZWQgaWYgdGhlIEZbTVVMVF0gYml0IGZpZWxkIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfSTJDX0hBU19FUlJBVEFfNjA3MCAoMCkKKy8qIEBicmllZiBIYXMgRE1BIHN1cHBvcnQgKHJlZ2lzdGVyIGJpdCBDMVtETUFFTl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9JMkNfSEFTX0RNQV9TVVBQT1JUICgxKQorLyogQGJyaWVmIEhhcyBJMkMgYnVzIHN0YXJ0IGFuZCBzdG9wIGRldGVjdGlvbiAocmVnaXN0ZXIgYml0cyBGTFRbU1NJRV0sIEZMVFtTVEFSVEZdIGFuZCBGTFRbU1RPUEZdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCAoMSkKKy8qIEBicmllZiBIYXMgSTJDIGJ1cyBzdG9wIGRldGVjdGlvbiAocmVnaXN0ZXIgYml0cyBGTFRbU1RPUElFXSBhbmQgRkxUW1NUT1BGXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QgKDApCisvKiBAYnJpZWYgSGFzIEkyQyBidXMgc3RvcCBob2xkIG9mZiAocmVnaXN0ZXIgYml0IEZMVFtTSEVOXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9IT0xEX09GRiAoMSkKKy8qIEBicmllZiBNYXhpbXVtIHdpZHRoIG9mIHRoZSBnbGl0Y2ggZmlsdGVyIGluIG51bWJlciBvZiBidXMgY2xvY2tzLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9JMkNfTUFYX0dMSVRDSF9GSUxURVJfV0lEVEggKDE1KQorLyogQGJyaWVmIEhhcyBjb250cm9sIG9mIHRoZSBkcml2ZSBjYXBhYmlsaXR5IG9mIHRoZSBJMkMgcGlucy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfSTJDX0hBU19ISUdIX0RSSVZFX1NFTEVDVElPTiAoMSkKKy8qIEBicmllZiBIYXMgZG91YmxlIGJ1ZmZlcmluZyBzdXBwb3J0IChyZWdpc3RlciBTMikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUklORyAoMSkKKy8qIEBicmllZiBIYXMgZG91YmxlIGJ1ZmZlciBlbmFibGUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUl9FTkFCTEUgKDEpCisKKy8qIExMV1UgbW9kdWxlIGZlYXR1cmVzICovCisKKyNpZiBkZWZpbmVkKENQVV9NS1c0MVoyNTZWSFQ0KSB8fCBkZWZpbmVkKENQVV9NS1c0MVo1MTJWSFQ0KQorICAgIC8qIEBicmllZiBNYXhpbXVtIG51bWJlciBvZiBwaW5zIChtYXhpbWFsIGluZGV4IHBsdXMgb25lKSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKDE2KQorICAgIC8qIEBicmllZiBIYXMgcGlucyA4LTE1IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfRVhURVJOQUxfUElOX0dST1VQMiAoMSkKKyAgICAvKiBAYnJpZWYgTWF4aW11bSBudW1iZXIgb2YgaW50ZXJuYWwgbW9kdWxlcyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEUgKDgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBkaWdpdGFsIGZpbHRlcnMuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSICgyKQorICAgIC8qIEBicmllZiBIYXMgTUYgcmVnaXN0ZXIuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19NRiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIFBGIHJlZ2lzdGVyLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfUEYgKDApCisgICAgLyogQGJyaWVmIEhhcyBwb3NzaWJpbGl0eSB0byBlbmFibGUgcmVzZXQgaW4gbG93IGxlYWthZ2UgcG93ZXIgbW9kZSBhbmQgZW5hYmxlIGRpZ2l0YWwgZmlsdGVyIGZvciBSRVNFVCBwaW4gKHJlZ2lzdGVyIExMV1VfUlNUKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1JFU0VUX0VOQUJMRSAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIG5vIGludGVybmFsIG1vZHVsZSB3YWtldXAgZmxhZyByZWdpc3Rlci4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX05PX0lOVEVSTkFMX01PRFVMRV9XQUtFVVBfRkxBR19SRUcgKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4wICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMF9HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjBfR1BJT19QSU4gKDE2KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDEgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMSAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjFfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xX0dQSU9fUElOICgxNykKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjIgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yX0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMl9HUElPX1BJTiAoMTgpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4zICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOM19HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjNfR1BJT19QSU4gKDE5KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDQgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElONCAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjRfR1BJT19JRFggKEdQSU9BX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU40X0dQSU9fUElOICgxNikKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiA1IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjUgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU41X0dQSU9fSURYIChHUElPQV9JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElONV9HUElPX1BJTiAoMTcpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gNiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU42ICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElONl9HUElPX0lEWCAoR1BJT0FfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjZfR1BJT19QSU4gKDE4KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDcgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElONyAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjdfR1BJT19JRFggKEdQSU9BX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU43X0dQSU9fUElOICgxOSkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiA4IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjggKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU44X0dQSU9fSURYIChHUElPQl9JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOOF9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiA5IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjkgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU45X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjlfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTAgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTAgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xMF9HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjEwX0dQSU9fUElOICgyKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDExIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjExICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTFfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xMV9HUElPX1BJTiAoMykKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxMiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xMiAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjEyX0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTJfR1BJT19QSU4gKDQpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTMgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTMgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xM19HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjEzX0dQSU9fUElOICg1KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDE0IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjE0ICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTRfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xNF9HUElPX1BJTiAoNikKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxNSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xNSAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE1X0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTVfR1BJT19QSU4gKDcpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTYgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTYgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xNl9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xNl9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxNyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xNyAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE3X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE3X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDE4IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjE4ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMThfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMThfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTkgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTkgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xOV9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xOV9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyMCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yMCAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIwX0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIwX0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDIxIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjIxICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjFfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjFfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjIgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjIgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yMl9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yMl9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyMyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yMyAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIzX0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIzX0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDI0IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjI0ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjRfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjRfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjUgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjUgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yNV9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yNV9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyNiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yNiAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI2X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI2X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDI3IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjI3ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjdfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjdfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjggY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjggKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yOF9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yOF9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyOSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yOSAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI5X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI5X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDMwIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjMwICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMzBfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMzBfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMzEgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMzEgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4zMV9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4zMV9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSAwIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTAgKDEpCisgICAgLyogQGJyaWVmIEhhcyBpbnRlcm5hbCBtb2R1bGUgMSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEUxICgxKQorICAgIC8qIEBicmllZiBIYXMgaW50ZXJuYWwgbW9kdWxlIDIgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFMiAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSAzIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTMgKDEpCisgICAgLyogQGJyaWVmIEhhcyBpbnRlcm5hbCBtb2R1bGUgNCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEU0ICgxKQorICAgIC8qIEBicmllZiBIYXMgaW50ZXJuYWwgbW9kdWxlIDUgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFNSAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSA2IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTYgKDApCisgICAgLyogQGJyaWVmIEhhcyBpbnRlcm5hbCBtb2R1bGUgNyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEU3ICgxKQorICAgIC8qIEBicmllZiBIYXMgVmVyc2lvbiBJRCBSZWdpc3RlciAoTExXVV9WRVJJRCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19WRVJJRCAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIFBhcmFtZXRlciBSZWdpc3RlciAoTExXVV9QQVJBTSkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19QQVJBTSAoMCkKKyAgICAvKiBAYnJpZWYgV2lkdGggb2YgcmVnaXN0ZXJzIG9mIHRoZSBMTFdVLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggKDgpCisgICAgLyogQGJyaWVmIEhhcyBETUEgRW5hYmxlIHJlZ2lzdGVyIChMTFdVX0RFKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0RNQV9FTkFCTEVfUkVHICgwKQorI2VsaWYgZGVmaW5lZChDUFVfTUtXNDFaNTEyQ0FUNCkKKyAgICAvKiBAYnJpZWYgTWF4aW11bSBudW1iZXIgb2YgcGlucyAobWF4aW1hbCBpbmRleCBwbHVzIG9uZSkgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOICgxNikKKyAgICAvKiBAYnJpZWYgSGFzIHBpbnMgOC0xNSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0VYVEVSTkFMX1BJTl9HUk9VUDIgKDEpCisgICAgLyogQGJyaWVmIE1heGltdW0gbnVtYmVyIG9mIGludGVybmFsIG1vZHVsZXMgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFICg4KQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZGlnaXRhbCBmaWx0ZXJzLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiAoMikKKyAgICAvKiBAYnJpZWYgSGFzIE1GIHJlZ2lzdGVyLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfTUYgKDApCisgICAgLyogQGJyaWVmIEhhcyBQRiByZWdpc3Rlci4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BGICgwKQorICAgIC8qIEBicmllZiBIYXMgcG9zc2liaWxpdHkgdG8gZW5hYmxlIHJlc2V0IGluIGxvdyBsZWFrYWdlIHBvd2VyIG1vZGUgYW5kIGVuYWJsZSBkaWdpdGFsIGZpbHRlciBmb3IgUkVTRVQgcGluIChyZWdpc3RlciBMTFdVX1JTVCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19SRVNFVF9FTkFCTEUgKDApCisgICAgLyogQGJyaWVmIEhhcyBubyBpbnRlcm5hbCBtb2R1bGUgd2FrZXVwIGZsYWcgcmVnaXN0ZXIuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19OT19JTlRFUk5BTF9NT0RVTEVfV0FLRVVQX0ZMQUdfUkVHICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDAgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMCAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjBfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4wX0dQSU9fUElOICgxNikKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjEgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xX0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMV9HUElPX1BJTiAoMTcpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMl9HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjJfR1BJT19QSU4gKDE4KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDMgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMyAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjNfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4zX0dQSU9fUElOICgxOSkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiA0IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjQgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU40X0dQSU9fSURYIChHUElPQV9JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElONF9HUElPX1BJTiAoMTYpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gNSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU41ICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElONV9HUElPX0lEWCAoR1BJT0FfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjVfR1BJT19QSU4gKDE3KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDYgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElONiAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjZfR1BJT19JRFggKEdQSU9BX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU42X0dQSU9fUElOICgxOCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiA3IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjcgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU43X0dQSU9fSURYIChHUElPQV9JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElON19HUElPX1BJTiAoMTkpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gOCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU44ICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOOF9HUElPX0lEWCAoR1BJT0JfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjhfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gOSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU45ICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOOV9HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjlfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTAgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTAgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xMF9HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjEwX0dQSU9fUElOICgyKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDExIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjExICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTFfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xMV9HUElPX1BJTiAoMykKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxMiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xMiAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjEyX0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTJfR1BJT19QSU4gKDQpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTMgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTMgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xM19HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjEzX0dQSU9fUElOICg1KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDE0IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjE0ICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTRfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xNF9HUElPX1BJTiAoNikKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxNSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xNSAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE1X0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTVfR1BJT19QSU4gKDcpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTYgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTYgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xNl9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xNl9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxNyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xNyAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE3X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE3X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDE4IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjE4ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMThfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMThfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTkgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTkgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xOV9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xOV9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyMCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yMCAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIwX0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIwX0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDIxIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjIxICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjFfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjFfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjIgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjIgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yMl9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yMl9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyMyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yMyAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIzX0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIzX0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDI0IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjI0ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjRfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjRfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjUgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjUgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yNV9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yNV9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyNiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yNiAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI2X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI2X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDI3IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjI3ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjdfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjdfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjggY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjggKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yOF9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yOF9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyOSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yOSAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI5X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI5X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDMwIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjMwICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMzBfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMzBfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMzEgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMzEgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4zMV9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4zMV9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSAwIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTAgKDEpCisgICAgLyogQGJyaWVmIEhhcyBpbnRlcm5hbCBtb2R1bGUgMSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEUxICgxKQorICAgIC8qIEBicmllZiBIYXMgaW50ZXJuYWwgbW9kdWxlIDIgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFMiAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSAzIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTMgKDEpCisgICAgLyogQGJyaWVmIEhhcyBpbnRlcm5hbCBtb2R1bGUgNCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEU0ICgxKQorICAgIC8qIEBicmllZiBIYXMgaW50ZXJuYWwgbW9kdWxlIDUgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFNSAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSA2IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTYgKDApCisgICAgLyogQGJyaWVmIEhhcyBpbnRlcm5hbCBtb2R1bGUgNyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEU3ICgxKQorICAgIC8qIEBicmllZiBIYXMgVmVyc2lvbiBJRCBSZWdpc3RlciAoTExXVV9WRVJJRCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19WRVJJRCAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIFBhcmFtZXRlciBSZWdpc3RlciAoTExXVV9QQVJBTSkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19QQVJBTSAoMCkKKyAgICAvKiBAYnJpZWYgV2lkdGggb2YgcmVnaXN0ZXJzIG9mIHRoZSBMTFdVLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggKDgpCisgICAgLyogQGJyaWVmIEhhcyBETUEgRW5hYmxlIHJlZ2lzdGVyIChMTFdVX0RFKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0RNQV9FTkFCTEVfUkVHICgwKQorI2VuZGlmIC8qIGRlZmluZWQoQ1BVX01LVzQxWjI1NlZIVDQpIHx8IGRlZmluZWQoQ1BVX01LVzQxWjUxMlZIVDQpICovCisKKy8qIExQVE1SIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgSGFzIHNoYXJlZCBpbnRlcnJ1cHQgaGFuZGxlciB3aXRoIGFub3RoZXIgTFBUTVIgbW9kdWxlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFRNUl9IQVNfU0hBUkVEX0lSUV9IQU5ETEVSICgwKQorLyogQGJyaWVmIFdoZXRoZXIgTFBUTVIgY291bnRlciBpcyAzMiBiaXRzIHdpZHRoLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFRNUl9DTlJfV0lEVEhfSVNfMzJCICgwKQorLyogQGJyaWVmIEhhcyB0aW1lciBETUEgcmVxdWVzdCBlbmFibGUgKHJlZ2lzdGVyIGJpdCBDU1JbVERSRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFRNUl9IQVNfQ1NSX1REUkUgKDApCisKKy8qIExQVUFSVCBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIExQVUFSVDAgYW5kIExQVUFSVDEgaGFzIHNoYXJlZCBpbnRlcnJ1cHQgdmVjdG9yLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NIQVJFRF9JUlEwX0lSUTEgKDApCisvKiBAYnJpZWYgSGFzIHJlY2VpdmUgRklGTyBvdmVyZmxvdyBkZXRlY3Rpb24gKGJpdCBmaWVsZCBDRklGT1tSWE9GRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0lSUV9FWFRFTkRFRF9GVU5DVElPTlMgKDApCisvKiBAYnJpZWYgSGFzIGxvdyBwb3dlciBmZWF0dXJlcyAoY2FuIGJlIGVuYWJsZWQgaW4gd2FpdCBtb2RlIHZpYSByZWdpc3RlciBiaXQgQzFbRE9aRUVOXSBvciBDVFJMW0RPWkVFTl0gaWYgdGhlIHJlZ2lzdGVycyBhcmUgMzItYml0IHdpZGUpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0xPV19QT1dFUl9VQVJUX1NVUFBPUlQgKDEpCisvKiBAYnJpZWYgSGFzIGV4dGVuZGVkIGRhdGEgcmVnaXN0ZXIgRUQgKG9yIGV4dHJhIGZsYWdzIGluIHRoZSBEQVRBIHJlZ2lzdGVyIGlmIHRoZSByZWdpc3RlcnMgYXJlIDMyLWJpdCB3aWRlKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19FWFRFTkRFRF9EQVRBX1JFR0lTVEVSX0ZMQUdTICgxKQorLyogQGJyaWVmIENhcGFjaXR5IChudW1iZXIgb2YgZW50cmllcykgb2YgdGhlIHRyYW5zbWl0L3JlY2VpdmUgRklGTyAob3IgemVybyBpZiBubyBGSUZPIGlzIGF2YWlsYWJsZSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTyAoMCkKKy8qIEBicmllZiBIYXMgMzItYml0IHJlZ2lzdGVyIE1PRElSICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTU9ESVIgKDEpCisvKiBAYnJpZWYgSGFyZHdhcmUgZmxvdyBjb250cm9sIChSVFMsIENUUykgaXMgc3VwcG9ydGVkLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX01PREVNX1NVUFBPUlQgKDEpCisvKiBAYnJpZWYgSW5mcmFyZWQgKG1vZHVsYXRpb24pIGlzIHN1cHBvcnRlZC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19JUl9TVVBQT1JUICgxKQorLyogQGJyaWVmIDIgYml0cyBsb25nIHN0b3AgYml0IGlzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TVE9QX0JJVF9DT05GSUdfU1VQUE9SVCAoMSkKKy8qIEBicmllZiBJZiAxMC1iaXQgbW9kZSBpcyBzdXBwb3J0ZWQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfMTBCSVRfREFUQV9TVVBQT1JUICgxKQorLyogQGJyaWVmIElmIDctYml0IG1vZGUgaXMgc3VwcG9ydGVkLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUICgwKQorLyogQGJyaWVmIEJhdWQgcmF0ZSBmaW5lIGFkanVzdG1lbnQgaXMgYXZhaWxhYmxlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0JBVURfUkFURV9GSU5FX0FESlVTVF9TVVBQT1JUICgwKQorLyogQGJyaWVmIEJhdWQgcmF0ZSBvdmVyc2FtcGxpbmcgaXMgYXZhaWxhYmxlIChoYXMgYml0IGZpZWxkcyBDNFtPU1JdLCBDNVtCT1RIRURHRV0sIEM1W1JFU1lOQ0RJU10gb3IgQkFVRFtPU1JdLCBCQVVEW0JPVEhFREdFXSwgQkFVRFtSRVNZTkNESVNdIGlmIHRoZSByZWdpc3RlcnMgYXJlIDMyLWJpdCB3aWRlKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19CQVVEX1JBVEVfT1ZFUl9TQU1QTElOR19TVVBQT1JUICgxKQorLyogQGJyaWVmIEJhdWQgcmF0ZSBvdmVyc2FtcGxpbmcgaXMgYXZhaWxhYmxlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1JYX1JFU1lOQ19TVVBQT1JUICgxKQorLyogQGJyaWVmIEJhdWQgcmF0ZSBvdmVyc2FtcGxpbmcgaXMgYXZhaWxhYmxlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0JPVEhfRURHRV9TQU1QTElOR19TVVBQT1JUICgxKQorLyogQGJyaWVmIFBlcmlwaGVyYWwgdHlwZS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0lTX1NDSSAoMSkKKy8qIEBicmllZiBDYXBhY2l0eSAobnVtYmVyIG9mIGVudHJpZXMpIG9mIHRoZSB0cmFuc21pdC9yZWNlaXZlIEZJRk8gKG9yIHplcm8gaWYgbm8gRklGTyBpcyBhdmFpbGFibGUpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfRklGT19TSVpFbih4KSAoMCkKKy8qIEBicmllZiBNYXhpbWFsIGRhdGEgd2lkdGggd2l0aG91dCBwYXJpdHkgYml0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfTUFYX0RBVEFfV0lEVEhfV0lUSF9OT19QQVJJVFkgKDEwKQorLyogQGJyaWVmIE1heGltYWwgZGF0YSB3aWR0aCB3aXRoIHBhcml0eSBiaXQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9NQVhfREFUQV9XSURUSF9XSVRIX1BBUklUWSAoOSkKKy8qIEBicmllZiBTdXBwb3J0cyB0d28gbWF0Y2ggYWRkcmVzc2VzIHRvIGZpbHRlciBpbmNvbWluZyBmcmFtZXMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfQUREUkVTU19NQVRDSElORyAoMSkKKy8qIEBicmllZiBIYXMgdHJhbnNtaXR0ZXIvcmVjZWl2ZXIgRE1BIGVuYWJsZSBiaXRzIEM1W1RETUFFXS9DNVtSRE1BRV0gKG9yIEJBVURbVERNQUVdL0JBVURbUkRNQUVdIGlmIHRoZSByZWdpc3RlcnMgYXJlIDMyLWJpdCB3aWRlKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19ETUFfRU5BQkxFICgxKQorLyogQGJyaWVmIEhhcyB0cmFuc21pdHRlci9yZWNlaXZlciBETUEgc2VsZWN0IGJpdHMgQzRbVERNQVNdL0M0W1JETUFTXSwgcmVzcC4gQzVbVERNQVNdL0M1W1JETUFTXSBpZiBJU19TQ0kgPSAwLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0RNQV9TRUxFQ1QgKDApCisvKiBAYnJpZWYgRGF0YSBjaGFyYWN0ZXIgYml0IG9yZGVyIHNlbGVjdGlvbiBpcyBzdXBwb3J0ZWQgKGJpdCBmaWVsZCBTMltNU0JGXSBvciBTVEFUW01TQkZdIGlmIHRoZSByZWdpc3RlcnMgYXJlIDMyLWJpdCB3aWRlKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19CSVRfT1JERVJfU0VMRUNUICgxKQorLyogQGJyaWVmIEhhcyBzbWFydCBjYXJkIChJU083ODE2IHByb3RvY29sKSBzdXBwb3J0IGFuZCBubyBpbXByb3ZlZCBzbWFydCBjYXJkIHN1cHBvcnQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU01BUlRfQ0FSRF9TVVBQT1JUICgwKQorLyogQGJyaWVmIEhhcyBpbXByb3ZlZCBzbWFydCBjYXJkIChJU083ODE2IHByb3RvY29sKSBzdXBwb3J0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0lNUFJPVkVEX1NNQVJUX0NBUkRfU1VQUE9SVCAoMCkKKy8qIEBicmllZiBIYXMgbG9jYWwgb3BlcmF0aW9uIG5ldHdvcmsgKENFQTcwOS4xLUIgcHJvdG9jb2wpIHN1cHBvcnQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTE9DQUxfT1BFUkFUSU9OX05FVFdPUktfU1VQUE9SVCAoMCkKKy8qIEBicmllZiBIYXMgMzItYml0IHJlZ2lzdGVycyAoQkFVRCwgU1RBVCwgQ1RSTCwgREFUQSwgTUFUQ0gsIE1PRElSKSBpbnN0ZWFkIG9mIDgtYml0IChCREgsIEJETCwgQzEsIFMxLCBELCBldGMuKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU18zMkJJVF9SRUdJU1RFUlMgKDEpCisvKiBAYnJpZWYgTGluIGJyZWFrIGRldGVjdCBhdmFpbGFibGUgKGhhcyBiaXQgQkFVRFtMQktESUVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUICgxKQorLyogQGJyaWVmIFVBUlQgc3RvcHMgaW4gV2FpdCBtb2RlIGF2YWlsYWJsZSAoaGFzIGJpdCBDMVtVQVJUU1dBSV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1dBSVRfTU9ERV9PUEVSQVRJT04gKDApCisvKiBAYnJpZWYgSGFzIHNlcGFyYXRlIERNQSBSWCBhbmQgVFggcmVxdWVzdHMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oeCkgKDEpCisvKiBAYnJpZWYgSGFzIHNlcGFyYXRlIFJYIGFuZCBUWCBpbnRlcnJ1cHRzLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUSAoMCkKKy8qIEBicmllZiBIYXMgTFBBVVJUX1BBUkFNLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1BBUkFNICgwKQorLyogQGJyaWVmIEhhcyBMUFVBUlRfVkVSSUQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfVkVSSUQgKDApCisvKiBAYnJpZWYgSGFzIExQVUFSVF9HTE9CQUwuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfR0xPQkFMICgwKQorLyogQGJyaWVmIEhhcyBMUFVBUlRfUElOQ0ZHLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1BJTkNGRyAoMCkKKworLyogTFRDIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgTFRDIG1vZHVsZSBzdXBwb3J0cyBERVMgYWxnb3JpdGhtLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MVENfSEFTX0RFUyAoMCkKKy8qIEBicmllZiBMVEMgbW9kdWxlIHN1cHBvcnRzIFBLSEEgYWxnb3JpdGhtLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEgKDApCisvKiBAYnJpZWYgTFRDIG1vZHVsZSBzdXBwb3J0cyBTSEEgYWxnb3JpdGhtLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAoMCkKKy8qIEBicmllZiBMVEMgbW9kdWxlIHN1cHBvcnRzIEFFUyBHQ00gbW9kZS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFRDX0hBU19HQ00gKDApCisvKiBAYnJpZWYgTFRDIG1vZHVsZSBzdXBwb3J0cyBEUEFNUyByZWdpc3RlcnMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xUQ19IQVNfRFBBTVMgKDApCisvKiBAYnJpZWYgTFRDIG1vZHVsZSBzdXBwb3J0cyBBRVMgd2l0aCAyNCBieXRlcyBrZXkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xUQ19IQVNfQUVTMTkyICgwKQorLyogQGJyaWVmIExUQyBtb2R1bGUgc3VwcG9ydHMgQUVTIHdpdGggMzIgYnl0ZXMga2V5LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MVENfSEFTX0FFUzI1NiAoMCkKKworLyogTUNHIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgUFJESVYgYmFzZSB2YWx1ZSAoZGl2aWRlciBvZiByZWdpc3RlciBiaXQgZmllbGQgW1BSRElWXSB6ZXJvIHZhbHVlKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX1BMTF9QUkRJVl9CQVNFICgwKQorLyogQGJyaWVmIE1heGltdW0gUExMIGV4dGVybmFsIHJlZmVyZW5jZSBkaXZpZGVyIHZhbHVlIChtYXguIHZhbHVlIG9mIHJlZ2lzdGVyIGJpdCBmaWVsZCBDNVtQUlZESVZdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX1BMTF9QUkRJVl9NQVggKDApCisvKiBAYnJpZWYgVkNPIGRpdmlkZXIgYmFzZSB2YWx1ZSAobXVsdGlwbHkgZmFjdG9yIG9mIHJlZ2lzdGVyIGJpdCBmaWVsZCBDNltWRElWXSB6ZXJvIHZhbHVlKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX1BMTF9WRElWX0JBU0UgKDApCisvKiBAYnJpZWYgUExMIHJlZmVyZW5jZSBjbG9jayBsb3cgcmFuZ2UuIE9TQ0NMSy9QTExfUi4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX1BMTF9SRUZfTUlOICgwKQorLyogQGJyaWVmIFBMTCByZWZlcmVuY2UgY2xvY2sgaGlnaCByYW5nZS4gT1NDQ0xLL1BMTF9SLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfUExMX1JFRl9NQVggKDApCisvKiBAYnJpZWYgVGhlIFBMTCBjbG9jayBpcyBkaXZpZGVkIGJ5IDIgYmVmb3JlIFZDTyBkaXZpZGVyLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX1BMTF9JTlRFUk5BTF9ESVYgKDApCisvKiBAYnJpZWYgRlJESVYgc3VwcG9ydHMgMTI4MC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX0ZSRElWX1NVUFBPUlRfMTI4MCAoMSkKKy8qIEBicmllZiBGUkRJViBzdXBwb3J0cyAxNTM2LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfRlJESVZfU1VQUE9SVF8xNTM2ICgxKQorLyogQGJyaWVmIE1DR0ZGQ0xLIGRpdmlkZXIuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19GRkNMS19ESVYgKDEpCisvKiBAYnJpZWYgSXMgUExMIGNsb2NrIGRpdmlkZWQgYnkgMiBiZWZvcmUgTUNHIFBMTC9GTEwgY2xvY2sgc2VsZWN0aW9uIGluIHRoZSBTSU0gbW9kdWxlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX1BMTF9FWFRSQV9ESVYgKDApCisvKiBAYnJpZWYgSGFzIDMya0h6IFJUQyBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgKHJlZ2lzdGVyIGJpdHMgQzhbTE9DUzFdLCBDOFtDTUUxXSwgQzhbTE9DUkUxXSBhbmQgUlRDIG1vZHVsZSBhcmUgcHJlc2VudCkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfUlRDXzMySyAoMSkKKy8qIEBicmllZiBIYXMgUExMMSBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgKHJlZ2lzdGVycyBDMTAsIEMxMSwgQzEyLCBTMikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfUExMMSAoMCkKKy8qIEBicmllZiBIYXMgNDhNSHogaW50ZXJuYWwgb3NjaWxsYXRvci4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX0hBU19JUkNfNDhNICgwKQorLyogQGJyaWVmIEhhcyBPU0MxIGV4dGVybmFsIG9zY2lsbGF0b3IgKHJlZ2lzdGVycyBDMTAsIEMxMSwgQzEyLCBTMikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfT1NDMSAoMCkKKy8qIEBicmllZiBIYXMgZmFzdCBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZmluZSB0cmltIChyZWdpc3RlciBiaXQgQzJbRkNGVFJJTV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX0ZDRlRSSU0gKDEpCisvKiBAYnJpZWYgSGFzIFBMTCBsb3NzIG9mIGxvY2sgcmVzZXQgKHJlZ2lzdGVyIGJpdCBDOFtMT0xSRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX0xPTFJFICgwKQorLyogQGJyaWVmIEhhcyBNQ0cgT1NDIGNsb2NrIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IEM3W09TQ1NFTF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfVVNFX09TQ1NFTCAoMSkKKy8qIEBicmllZiBIYXMgUExMIGV4dGVybmFsIHJlZmVyZW5jZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdHMgQzVbUExMUkVGU0VMMF0gYW5kIEMxMVtQTExSRUZTRUwxXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19VU0VfUExMUkVGU0VMICgwKQorLyogQGJyaWVmIFRCRCAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfVVNFX1NZU1RFTV9DTE9DSyAoMCkKKy8qIEBicmllZiBIYXMgcGhhc2UtbG9ja2VkIGxvb3AgKFBMTCkgKHJlZ2lzdGVyIEM1IGFuZCBiaXRzIEM2W1ZESVZdLCBDNltQTExTXSwgQzZbTE9MSUUwXSwgU1tQTExTVF0sIFNbTE9DSzBdLCBTW0xPTFMwXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfUExMICgwKQorLyogQGJyaWVmIEhhcyBwaGFzZS1sb2NrZWQgbG9vcCAoUExMKSBQUkRJViAocmVnaXN0ZXIgQzVbUFJESVZdLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX1BMTF9QUkRJViAoMCkKKy8qIEBicmllZiBIYXMgcGhhc2UtbG9ja2VkIGxvb3AgKFBMTCkgVkRJViAocmVnaXN0ZXIgQzZbVkRJVl0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfUExMX1ZESVYgKDApCisvKiBAYnJpZWYgUExML09TQyByZWxhdGVkIHJlZ2lzdGVyIGJpdCBmaWVsZHMgaGF2ZSBQTEwvT1NDIGluZGV4IGluIHRoZWlyIG5hbWUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfUExMX09TQ19JTkRFWCAoMCkKKy8qIEBicmllZiBIYXMgZnJlcXVlbmN5LWxvY2tlZCBsb29wIChGTEwpIChyZWdpc3RlciBBVENWSCwgQVRDVkwgYW5kIGJpdHMgQzFbSVJFRlNdLCBDMVtGUkRJVl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX0ZMTCAoMSkKKy8qIEBicmllZiBIYXMgUExMIGV4dGVybmFsIHRvIE1DRyAoQzlbUExMX0NNRV0sIEM5W1BMTF9MT0NSRV0sIEM5W0VYVF9QTExfTE9DU10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX0VYVEVSTkFMX1BMTCAoMCkKKy8qIEBicmllZiBIYXMgY3J5c3RhbCBvc2NpbGxhdG9yIG9yIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBsb3cgcG93ZXIgY29udHJvbHMgKHJlZ2lzdGVyIGJpdHMgQzJbSEdPXSwgQzJbUkFOR0VdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX0hBU19FWFRfUkVGX0xPV19QT1dFUl9DT05UUk9MICgxKQorLyogQGJyaWVmIEhhcyBQTEwvRkxMIHNlbGVjdGlvbiBhcyBNQ0cgb3V0cHV0IChyZWdpc3RlciBiaXQgQzZbUExMU10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX1BMTF9GTExfU0VMRUNUSU9OICgwKQorLyogQGJyaWVmIEhhcyBQTEwgb3V0cHV0IHNlbGVjdGlvbiAoUExMMC9QTEwxLCBQTEwvZXh0ZXJuYWwgUExMKSAocmVnaXN0ZXIgYml0IEMxMVtQTExDU10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX1BMTF9PVVRQVVRfU0VMRUNUSU9OICgwKQorLyogQGJyaWVmIEhhcyBhdXRvbWF0aWMgdHJpbSBtYWNoaW5lIChyZWdpc3RlcnMgQVRDVkgsIEFUQ1ZMIGFuZCBiaXRzIFNDW0FUTUZdLCBTQ1tBVE1TXSwgU0NbQVRNRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX0FVVE9fVFJJTV9NQUNISU5FICgxKQorLyogQGJyaWVmIEhhcyBleHRlcm5hbCBjbG9jayBtb25pdG9yIChyZWdpc3RlciBiaXQgQzZbQ01FXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfRVhURVJOQUxfQ0xPQ0tfTU9OSVRPUiAoMSkKKy8qIEBicmllZiBIYXMgbG93IGZyZXF1ZW5jeSBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgKElSQykgKHJlZ2lzdGVycyBMVFJJTVJORywgTEZSSU0sIExTVFJJTSBhbmQgYml0IE1DW0xJUkNfRElWMl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX0xPV19GUkVRX0lSQyAoMCkKKy8qIEBicmllZiBIYXMgaGlnaCBmcmVxdWVuY3kgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIChJUkMpIChyZWdpc3RlcnMgSENUUklNLCBIVFRSSU0sIEhGVFJJTSBhbmQgYml0IE1DW0hJUkNFTl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX0hJR0hfRlJFUV9JUkMgKDApCisvKiBAYnJpZWYgSGFzIFBFSSBtb2RlIG9yIFBCSSBtb2RlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX1BMTF9JTlRFUk5BTF9NT0RFICgwKQorLyogQGJyaWVmIFJlc2V0IGNsb2NrIG1vZGUgaXMgQkxQSS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX1JFU0VUX0lTX0JMUEkgKDApCisKKy8qIGludGVycnVwdCBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIExvd2VzdCBpbnRlcnJ1cHQgcmVxdWVzdCBudW1iZXIuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0lOVEVSUlVQVF9JUlFfTUlOICgtMTQpCisvKiBAYnJpZWYgSGlnaGVzdCBpbnRlcnJ1cHQgcmVxdWVzdCBudW1iZXIuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0lOVEVSUlVQVF9JUlFfTUFYICgzMSkKKworLyogUElUIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgTnVtYmVyIG9mIGNoYW5uZWxzIChyZWxhdGVkIHRvIG51bWJlciBvZiByZWdpc3RlcnMgTERWQUxuLCBDVkFMbiwgVENUUkxuLCBURkxHbikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BJVF9USU1FUl9DT1VOVCAoMikKKy8qIEBicmllZiBIYXMgbGlmZXRpbWUgdGltZXIgKHJlbGF0ZWQgdG8gZXhpc3RlbmNlIG9mIHJlZ2lzdGVycyBMVE1SNjRMIGFuZCBMVE1SNjRIKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUElUX0hBU19MSUZFVElNRV9USU1FUiAoMSkKKy8qIEBicmllZiBIYXMgY2hhaW4gbW9kZSAocmVsYXRlZCB0byBleGlzdGVuY2Ugb2YgcmVnaXN0ZXIgYml0IGZpZWxkIFRDVFJMbltDSE5dKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUElUX0hBU19DSEFJTl9NT0RFICgxKQorLyogQGJyaWVmIEhhcyBzaGFyZWQgaW50ZXJydXB0IGhhbmRsZXIgKGhhcyBub3QgaW5kaXZpZHVhbCBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgZWFjaCBjaGFubmVsKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUElUX0hBU19TSEFSRURfSVJRX0hBTkRMRVIgKDEpCisKKy8qIFBNQyBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEhhcyBCYW5kZ2FwIEVuYWJsZSBJbiBWTFB4IE9wZXJhdGlvbiBzdXBwb3J0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHRU4gKDApCisvKiBAYnJpZWYgSGFzIEJhbmRnYXAgQnVmZmVyIEVuYWJsZS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JFICgxKQorLyogQGJyaWVmIEhhcyBCYW5kZ2FwIEJ1ZmZlciBEcml2ZSBTZWxlY3QuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRFMgKDApCisvKiBAYnJpZWYgSGFzIExvdy1Wb2x0YWdlIERldGVjdCBWb2x0YWdlIFNlbGVjdCBzdXBwb3J0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QTUNfSEFTX0xWRFYgKDEpCisvKiBAYnJpZWYgSGFzIExvdy1Wb2x0YWdlIFdhcm5pbmcgVm9sdGFnZSBTZWxlY3Qgc3VwcG9ydC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE1DX0hBU19MVldWICgxKQorLyogQGJyaWVmIEhhcyBMUE8uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BNQ19IQVNfTFBPICgwKQorLyogQGJyaWVmIEhhcyBWTFB4IG9wdGlvbiBQTUNfUkVHU0NbVkxQT10uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BNQ19IQVNfVkxQTyAoMSkKKy8qIEBicmllZiBIYXMgYWNrbm93bGVkZ2UgaXNvbGF0aW9uIHN1cHBvcnQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BNQ19IQVNfQUNLSVNPICgxKQorLyogQGJyaWVmIEhhcyBSZWd1bGF0b3IgSW4gRnVsbCBQZXJmb3JtYW5jZSBNb2RlIFN0YXR1cyBCaXQgUE1DX1JFR1NDW1JFR0ZQTV0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BNQ19IQVNfUkVHRlBNICgwKQorLyogQGJyaWVmIEhhcyBSZWd1bGF0b3IgSW4gUnVuIFJlZ3VsYXRpb24gU3RhdHVzIEJpdCBQTUNfUkVHU0NbUkVHT05TXS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE1DX0hBU19SRUdPTlMgKDEpCisvKiBAYnJpZWYgSGFzIFBNQ19IVkRTQzEuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BNQ19IQVNfSFZEU0MxICgwKQorLyogQGJyaWVmIEhhcyBQTUNfUEFSQU0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BNQ19IQVNfUEFSQU0gKDApCisvKiBAYnJpZWYgSGFzIFBNQ19WRVJJRC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE1DX0hBU19WRVJJRCAoMCkKKworLyogUE9SVCBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEhhcyBjb250cm9sIGxvY2sgKHJlZ2lzdGVyIGJpdCBQQ1JbTEtdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUElOX0NPTlRST0xfTE9DSyAoMCkKKy8qIEBicmllZiBIYXMgb3BlbiBkcmFpbiBjb250cm9sIChyZWdpc3RlciBiaXQgUENSW09ERV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QT1JUX0hBU19PUEVOX0RSQUlOICgwKQorLyogQGJyaWVmIEhhcyBkaWdpdGFsIGZpbHRlciAocmVnaXN0ZXJzIERGRVIsIERGQ1IgYW5kIERGV1IpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QT1JUX0hBU19ESUdJVEFMX0ZJTFRFUiAoMCkKKy8qIEBicmllZiBIYXMgRE1BIHJlcXVlc3QgKHJlZ2lzdGVyIGJpdCBmaWVsZCBQQ1JbSVJRQ10gdmFsdWVzKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfRE1BX1JFUVVFU1QgKDEpCisvKiBAYnJpZWYgSGFzIHB1bGwgcmVzaXN0b3Igc2VsZWN0aW9uIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUFVMTF9TRUxFQ1RJT04gKDEpCisvKiBAYnJpZWYgSGFzIHB1bGwgcmVzaXN0b3IgZW5hYmxlIChyZWdpc3RlciBiaXQgUENSW1BFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BVTExfRU5BQkxFICgxKQorLyogQGJyaWVmIEhhcyBzbGV3IHJhdGUgY29udHJvbCAocmVnaXN0ZXIgYml0IFBDUltTUkVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfU0xFV19SQVRFICgxKQorLyogQGJyaWVmIEhhcyBwYXNzaXZlIGZpbHRlciAocmVnaXN0ZXIgYml0IGZpZWxkIFBDUltQRkVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUEFTU0lWRV9GSUxURVIgKDEpCisvKiBAYnJpZWYgSGFzIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgKHJlZ2lzdGVyIGJpdCBQQ1JbRFNFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RSSVZFX1NUUkVOR1RIICgxKQorLyogQGJyaWVmIEhhcyBzZXBhcmF0ZSBkcml2ZSBzdHJlbmd0aCByZWdpc3RlciAoSERSVkUpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QT1JUX0hBU19EUklWRV9TVFJFTkdUSF9SRUdJU1RFUiAoMCkKKy8qIEBicmllZiBIYXMgZ2xpdGNoIGZpbHRlciAocmVnaXN0ZXIgSU9GTFQpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QT1JUX0hBU19HTElUQ0hfRklMVEVSICgwKQorLyogQGJyaWVmIERlZmluZXMgd2lkdGggb2YgUENSW01VWF0gZmllbGQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BPUlRfUENSX01VWF9XSURUSCAoMykKKy8qIEBicmllZiBIYXMgZGVkaWNhdGVkIGludGVycnVwdCB2ZWN0b3IuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0lOVEVSUlVQVF9WRUNUT1IgKDEpCisvKiBAYnJpZWYgSGFzIG11bHRpcGxlIHBpbiBJUlEgY29uZmlndXJhdGlvbiAocmVnaXN0ZXIgR0lDTFIgYW5kIEdJQ0hSKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfTVVMVElQTEVfSVJRX0NPTkZJRyAoMCkKKy8qIEBicmllZiBEZWZpbmVzIHdoZXRoZXIgUENSW0lSUUNdIGJpdC1maWVsZCBoYXMgZmxhZyBzdGF0ZXMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0lSUUNfRkxBRyAoMCkKKy8qIEBicmllZiBEZWZpbmVzIHdoZXRoZXIgUENSW0lSUUNdIGJpdC1maWVsZCBoYXMgdHJpZ2dlciBzdGF0ZXMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0lSUUNfVFJJR0dFUiAoMCkKKworLyogUkFESU8gbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBaaWdiZWUgYXZhaWxhYmlsaXR5LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQURJT19IQVNfWklHQkVFICgxKQorLyogQGJyaWVmIEJsdWV0b290aCBhdmFpbGFiaWxpdHkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JBRElPX0hBU19CTEUgKDEpCisvKiBAYnJpZWYgQU5UIGF2YWlsYWJpbGl0eSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQURJT19IQVNfQU5UICgxKQorLyogQGJyaWVmIEdlbmVyaWMgRlNLIG1vZHVsZSBhdmFpbGFiaWxpdHkgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkFESU9fSEFTX0dFTkZTSyAoMSkKKy8qIEBicmllZiBNYWpvciB2ZXJzaW9uIG9mIHRoZSByYWRpbyBzdWJtb2R1bGUgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkFESU9fVkVSU0lPTl9NQUpPUiAoMikKKy8qIEBicmllZiBNaW5vciB2ZXJzaW9uIG9mIHRoZSByYWRpbyBzdWJtb2R1bGUgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkFESU9fVkVSU0lPTl9NSU5PUiAoMCkKKworLyogUkNNIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgSGFzIExvc3Mtb2YtTG9jayBSZXNldCBzdXBwb3J0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQ01fSEFTX0xPTCAoMCkKKy8qIEBicmllZiBIYXMgTG9zcy1vZi1DbG9jayBSZXNldCBzdXBwb3J0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQ01fSEFTX0xPQyAoMSkKKy8qIEBicmllZiBIYXMgSlRBRyBnZW5lcmF0ZWQgUmVzZXQgc3VwcG9ydC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkNNX0hBU19KVEFHICgwKQorLyogQGJyaWVmIEhhcyBFelBvcnQgZ2VuZXJhdGVkIFJlc2V0IHN1cHBvcnQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JDTV9IQVNfRVpQT1JUICgwKQorLyogQGJyaWVmIEhhcyBiaXQtZmllbGQgaW5kaWNhdGluZyBFWlBfTVNfQiBwaW4gc3RhdGUgZHVyaW5nIGxhc3QgcmVzZXQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JDTV9IQVNfRVpQTVMgKDApCisvKiBAYnJpZWYgSGFzIGJvb3QgUk9NIGNvbmZpZ3VyYXRpb24sIE1SW0JPT1RST01dLCBGTVtGT1JDRVJPTV0gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkNNX0hBU19CT09UUk9NICgwKQorLyogQGJyaWVmIEhhcyBzdGlja3kgc3lzdGVtIHJlc2V0IHN0YXR1cyByZWdpc3RlciBSQ01fU1NSUzAgYW5kIFJDTV9TU1JTMS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkNNX0hBU19TU1JTICgwKQorLyogQGJyaWVmIEhhcyBWZXJzaW9uIElEIFJlZ2lzdGVyIChSQ01fVkVSSUQpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQ01fSEFTX1ZFUklEICgwKQorLyogQGJyaWVmIEhhcyBQYXJhbWV0ZXIgUmVnaXN0ZXIgKFJDTV9QQVJBTSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JDTV9IQVNfUEFSQU0gKDApCisvKiBAYnJpZWYgSGFzIFJlc2V0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgUkNNX1NSSUUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JDTV9IQVNfU1JJRSAoMCkKKy8qIEBicmllZiBXaWR0aCBvZiByZWdpc3RlcnMgb2YgdGhlIFJDTS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCAoOCkKKy8qIEBicmllZiBIYXMgQ29yZSAxIGdlbmVyYXRlZCBSZXNldCBzdXBwb3J0IFJDTV9TUlNbQ09SRTFdICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JDTV9IQVNfQ09SRTEgKDApCisvKiBAYnJpZWYgSGFzIE1ETS1BUCBzeXN0ZW0gcmVzZXQgc3VwcG9ydCBSQ01fU1JTMVtNRE1fQVBdICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JDTV9IQVNfTURNX0FQICgxKQorLyogQGJyaWVmIEhhcyB3YWtldXAgcmVzZXQgZmVhdHVyZS4gUmVnaXN0ZXIgYml0IFNSU1tXQUtFVVBdLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQ01fSEFTX1dBS0VVUCAoMSkKKworLyogUlNJTSBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogTm8gZmVhdHVyZSBkZWZpbml0aW9ucyAqLworCisvKiBSVEMgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBIYXMgd2FrZXVwIHBpbi4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUlRDX0hBU19XQUtFVVBfUElOICgxKQorLyogQGJyaWVmIEhhcyB3YWtldXAgcGluIHNlbGVjdGlvbiAoYml0IGZpZWxkIENSW1dQU10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SVENfSEFTX1dBS0VVUF9QSU5fU0VMRUNUSU9OICgxKQorLyogQGJyaWVmIEhhcyBsb3cgcG93ZXIgZmVhdHVyZXMgKHJlZ2lzdGVycyBNRVIsIE1DTFIgYW5kIE1DSFIpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SVENfSEFTX01PTk9UT05JQyAoMCkKKy8qIEBicmllZiBIYXMgcmVhZC93cml0ZSBhY2Nlc3MgY29udHJvbCAocmVnaXN0ZXJzIFdBUiBhbmQgUkFSKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUlRDX0hBU19BQ0NFU1NfQ09OVFJPTCAoMCkKKy8qIEBicmllZiBIYXMgc2VjdXJpdHkgZmVhdHVyZXMgKHJlZ2lzdGVycyBUVFNSLCBNRVIsIE1DTFIgYW5kIE1DSFIpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SVENfSEFTX1NFQ1VSSVRZICgwKQorLyogQGJyaWVmIEhhcyBSVENfQ0xLSU4gYXZhaWxhYmxlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SVENfSEFTX1JUQ19DTEtJTiAoMCkKKy8qIEBicmllZiBIYXMgcHJlc2NhbGVyIGFkanVzdCBmb3IgTFBPLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SVENfSEFTX0xQT19BREpVU1QgKDApCisvKiBAYnJpZWYgSGFzIENsb2NrIFBpbiBFbmFibGUgZmllbGQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JUQ19IQVNfQ1BFICgwKQorLyogQGJyaWVmIEhhcyBUaW1lciBTZWNvbmRzIEludGVycnVwdCBDb25maWd1cmF0aW9uIGZpZWxkLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SVENfSEFTX1RTSUMgKDApCisvKiBAYnJpZWYgSGFzIE9TQyBjYXBhY2l0b3Igc2V0dGluZyBSVENfQ1JbU0MyUCB+IFNDMTZQXSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SVENfSEFTX09TQ19TQ1hQICgxKQorCisvKiBTSU0gbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBIYXMgVVNCIEZTIGRpdmlkZXIuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9VU0JGU19VU0VfU1BFQ0lBTF9ESVZJREVSICgwKQorLyogQGJyaWVmIElzIFBMTCBjbG9jayBkaXZpZGVkIGJ5IDIgYmVmb3JlIE1DRyBQTEwvRkxMIGNsb2NrIHNlbGVjdGlvbi4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX1BMTENMS19VU0VfU1BFQ0lBTF9ESVZJREVSICgwKQorLyogQGJyaWVmIEhhcyBSQU0gc2l6ZSBzcGVjaWZpY2F0aW9uIChyZWdpc3RlciBiaXQgZmllbGQgU09QVDFbUkFNU0laRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19SQU1TSVpFICgwKQorLyogQGJyaWVmIEhhcyAzMmsgb3NjaWxsYXRvciBjbG9jayBvdXRwdXQgKHJlZ2lzdGVyIGJpdCBTT1BUMVtPU0MzMktPVVRdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfT1NDMzJLX09VVCAoMSkKKy8qIEBicmllZiBIYXMgMzJrIG9zY2lsbGF0b3IgY2xvY2sgc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgZmllbGQgU09QVDFbT1NDMzJLU0VMXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX09TQzMyS19TRUxFQ1RJT04gKDEpCisvKiBAYnJpZWYgMzJrIG9zY2lsbGF0b3IgY2xvY2sgc2VsZWN0aW9uIHdpZHRoICh3aWR0aCBvZiByZWdpc3RlciBiaXQgZmllbGQgU09QVDFbT1NDMzJLU0VMXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfT1NDMzJLX1NFTEVDVElPTl9XSURUSCAoMikKKy8qIEBicmllZiBIYXMgUlRDIGNsb2NrIG91dHB1dCBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltSVENDTEtPVVRTRUxdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfUlRDX0NMT0NLX09VVF9TRUxFQ1RJT04gKDApCisvKiBAYnJpZWYgSGFzIFVTQiB2b2x0YWdlIHJlZ3VsYXRvciAocmVnaXN0ZXIgYml0cyBTT1BUMVtVU0JWU1RCWV0sIFNPUFQxW1VTQlNTVEJZXSwgU09QVDFbVVNCUkVHRU5dLCBTT1BUMUNGR1tVUldFXSwgU09QVDFDRkdbVVZTV0VdLCBTT1BUMUNGR1tVU1NXRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JfVk9MVEFHRV9SRUdVTEFUT1IgKDApCisvKiBAYnJpZWYgVVNCIGhhcyBpbnRlZ3JhdGVkIFBIWSAocmVnaXN0ZXIgYml0cyBVU0JQSFlDVExbVVNCVlJFR1NFTF0sIFVTQlBIWUNUTFtVU0JWUkVHUERdLCBVU0JQSFlDVExbVVNCM1ZPVVRUUkddLCBVU0JQSFlDVExbVVNCRElTSUxJTV0sIFNPUFQyW1VTQlNMU1JDXSwgU09QVDJbVVNCUkVHRU5dKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVVNCX1BIWSAoMCkKKy8qIEBicmllZiBIYXMgUFRENyBwYWQgZHJpdmUgc3RyZW5ndGggY29udHJvbCAocmVnaXN0ZXIgYml0IFNPUFQyW1BURDdQQURdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfUFREN1BBRCAoMCkKKy8qIEBicmllZiBIYXMgRmxleEJ1cyBzZWN1cml0eSBsZXZlbCBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltGQlNMXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0ZCU0wgKDApCisvKiBAYnJpZWYgSGFzIG51bWJlciBvZiBGbGV4QnVzIGhvbGQgY3ljbGUgYmVmb3JlIEZsZXhCdXMgY2FuIHJlbGVhc2UgYnVzIChyZWdpc3RlciBiaXQgU09QVDZbUENSXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1BDUiAoMCkKKy8qIEBicmllZiBIYXMgbnVtYmVyIG9mIE5GQyBob2xkIGN5Y2xlIGluIGNhc2Ugb2YgRmxleEJ1cyByZXF1ZXN0IChyZWdpc3RlciBiaXQgU09QVDZbTUNDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX01DQyAoMCkKKy8qIEBicmllZiBIYXMgVUFSVCBvcGVuIGRyYWluIGVuYWJsZSAocmVnaXN0ZXIgYml0cyBVQVJUbk9ERSwgd2hlcmUgbiBpcyBhIG51bWJlciwgaW4gcmVnaXN0ZXIgU09QVDUpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19PREUgKDApCisvKiBAYnJpZWYgTnVtYmVyIG9mIExQVUFSVCBtb2R1bGVzIChudW1iZXIgb2YgcmVnaXN0ZXIgYml0cyBMUFVBUlRuLCB3aGVyZSBuIGlzIGEgbnVtYmVyLCBpbiByZWdpc3RlciBTQ0dDNSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfTFBVQVJUX0NPVU5UICgxKQorLyogQGJyaWVmIE51bWJlciBvZiBVQVJUIG1vZHVsZXMgKG51bWJlciBvZiByZWdpc3RlciBiaXRzIFVBUlRuLCB3aGVyZSBuIGlzIGEgbnVtYmVyLCBpbiByZWdpc3RlciBTQ0dDNCkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfVUFSVF9DT1VOVCAoMCkKKy8qIEBicmllZiBIYXMgVUFSVDAgb3BlbiBkcmFpbiBlbmFibGUgKHJlZ2lzdGVyIGJpdCBTT1BUNVtVQVJUME9ERV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VQVJUMF9PREUgKDApCisvKiBAYnJpZWYgSGFzIFVBUlQxIG9wZW4gZHJhaW4gZW5hYmxlIChyZWdpc3RlciBiaXQgU09QVDVbVUFSVDFPREVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVUFSVDFfT0RFICgwKQorLyogQGJyaWVmIEhhcyBVQVJUMiBvcGVuIGRyYWluIGVuYWJsZSAocmVnaXN0ZXIgYml0IFNPUFQ1W1VBUlQyT0RFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VBUlQyX09ERSAoMCkKKy8qIEBicmllZiBIYXMgTFBVQVJUMCBvcGVuIGRyYWluIGVuYWJsZSAocmVnaXN0ZXIgYml0IFNPUFQ1W0xQVUFSVDBPREVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfTFBVQVJUMF9PREUgKDEpCisvKiBAYnJpZWYgSGFzIExQVUFSVDEgb3BlbiBkcmFpbiBlbmFibGUgKHJlZ2lzdGVyIGJpdCBTT1BUNVtMUFVBUlQxT0RFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0xQVUFSVDFfT0RFICgwKQorLyogQGJyaWVmIEhhcyBDTVQvVUFSVCBwYWQgZHJpdmUgc3RyZW5ndGggY29udHJvbCAocmVnaXN0ZXIgYml0IFNPUFQyW0NNVFVBUlRQQURdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfQ01UVUFSVFBBRCAoMCkKKy8qIEBicmllZiBIYXMgTFBVQVJUMCB0cmFuc21pdCBkYXRhIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUNVtMUFVBUlQwVFhTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfTFBVQVJUMF9UWF9TUkMgKDEpCisvKiBAYnJpZWYgSGFzIExQVUFSVDAgcmVjZWl2ZSBkYXRhIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUNVtMUFVBUlQwUlhTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfTFBVQVJUMF9SWF9TUkMgKDEpCisvKiBAYnJpZWYgSGFzIExQVUFSVDEgdHJhbnNtaXQgZGF0YSBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDVbTFBVQVJUMVRYU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0xQVUFSVDFfVFhfU1JDICgwKQorLyogQGJyaWVmIEhhcyBMUFVBUlQxIHJlY2VpdmUgZGF0YSBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDVbTFBVQVJUMVJYU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0xQVUFSVDFfUlhfU1JDICgwKQorLyogQGJyaWVmIEhhcyBVQVJUMCB0cmFuc21pdCBkYXRhIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUNVtVQVJUMFRYU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VBUlQwX1RYX1NSQyAoMCkKKy8qIEBicmllZiBVQVJUMCB0cmFuc21pdCBkYXRhIHNvdXJjZSBzZWxlY3Rpb24gd2lkdGggKHdpZHRoIG9mIHJlZ2lzdGVyIGJpdCBTT1BUNVtVQVJUMFRYU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfVUFSVDBfVFhfU1JDX1dJRFRIICgwKQorLyogQGJyaWVmIEhhcyBVQVJUMCByZWNlaXZlIGRhdGEgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQ1W1VBUlQwUlhTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVUFSVDBfUlhfU1JDICgwKQorLyogQGJyaWVmIFVBUlQwIHJlY2VpdmUgZGF0YSBzb3VyY2Ugc2VsZWN0aW9uIHdpZHRoICh3aWR0aCBvZiByZWdpc3RlciBiaXQgU09QVDVbVUFSVDBSWFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX1VBUlQwX1JYX1NSQ19XSURUSCAoMCkKKy8qIEBicmllZiBIYXMgVUFSVDEgdHJhbnNtaXQgZGF0YSBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDVbVUFSVDFUWFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VQVJUMV9UWF9TUkMgKDApCisvKiBAYnJpZWYgSGFzIFVBUlQxIHJlY2VpdmUgZGF0YSBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDVbVUFSVDFSWFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VQVJUMV9SWF9TUkMgKDApCisvKiBAYnJpZWYgVUFSVDEgcmVjZWl2ZSBkYXRhIHNvdXJjZSBzZWxlY3Rpb24gd2lkdGggKHdpZHRoIG9mIHJlZ2lzdGVyIGJpdCBTT1BUNVtVQVJUMVJYU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfVUFSVDFfUlhfU1JDX1dJRFRIICgwKQorLyogQGJyaWVmIEhhcyBGVE0gbW9kdWxlKHMpIGNvbmZpZ3VyYXRpb24uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0ZUTSAoMCkKKy8qIEBicmllZiBOdW1iZXIgb2YgRlRNIG1vZHVsZXMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfRlRNX0NPVU5UICgwKQorLyogQGJyaWVmIE51bWJlciBvZiBGVE0gdHJpZ2dlcnMgd2l0aCBzZWxlY3RhYmxlIHNvdXJjZS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9GVE1fVFJJR0dFUl9DT1VOVCAoMCkKKy8qIEBicmllZiBIYXMgRlRNMCB0cmlnZ2VycyBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXRzIFNPUFQ0W0ZUTTBUUkduU1JDXSwgd2hlcmUgbiBpcyBhIG51bWJlcikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0ZUTTBfVFJJR0dFUiAoMCkKKy8qIEBicmllZiBIYXMgRlRNMyB0cmlnZ2VycyBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXRzIFNPUFQ0W0ZUTTNUUkduU1JDXSwgd2hlcmUgbiBpcyBhIG51bWJlcikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0ZUTTNfVFJJR0dFUiAoMCkKKy8qIEBicmllZiBIYXMgRlRNMSBjaGFubmVsIDAgaW5wdXQgY2FwdHVyZSBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDRbRlRNMUNIMFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19GVE0xX0NIQU5ORUxTICgwKQorLyogQGJyaWVmIEhhcyBGVE0yIGNoYW5uZWwgMCBpbnB1dCBjYXB0dXJlIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUNFtGVE0yQ0gwU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0ZUTTJfQ0hBTk5FTFMgKDApCisvKiBAYnJpZWYgSGFzIEZUTTMgY2hhbm5lbCAwIGlucHV0IGNhcHR1cmUgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQ0W0ZUTTNDSDBTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfRlRNM19DSEFOTkVMUyAoMCkKKy8qIEBicmllZiBIYXMgRlRNMiBjaGFubmVsIDEgaW5wdXQgY2FwdHVyZSBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDRbRlRNMkNIMVNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19GVE0yX0NIQU5ORUwxICgwKQorLyogQGJyaWVmIE51bWJlciBvZiBjb25maWd1cmFibGUgRlRNMCBmYXVsdCBkZXRlY3Rpb24gaW5wdXQgKG51bWJlciBvZiByZWdpc3RlciBiaXRzIFNPUFQ0W0ZUTTBGTFRuXSwgd2hlcmUgbiBpcyBhIG51bWJlciBzdGFydGluZyBmcm9tIHplcm8pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0ZUTTBfRkFVTFRfQ09VTlQgKDApCisvKiBAYnJpZWYgTnVtYmVyIG9mIGNvbmZpZ3VyYWJsZSBGVE0xIGZhdWx0IGRldGVjdGlvbiBpbnB1dCAobnVtYmVyIG9mIHJlZ2lzdGVyIGJpdHMgU09QVDRbRlRNMUZMVG5dLCB3aGVyZSBuIGlzIGEgbnVtYmVyIHN0YXJ0aW5nIGZyb20gemVybykuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfRlRNMV9GQVVMVF9DT1VOVCAoMCkKKy8qIEBicmllZiBOdW1iZXIgb2YgY29uZmlndXJhYmxlIEZUTTIgZmF1bHQgZGV0ZWN0aW9uIGlucHV0IChudW1iZXIgb2YgcmVnaXN0ZXIgYml0cyBTT1BUNFtGVE0yRkxUbl0sIHdoZXJlIG4gaXMgYSBudW1iZXIgc3RhcnRpbmcgZnJvbSB6ZXJvKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9GVE0yX0ZBVUxUX0NPVU5UICgwKQorLyogQGJyaWVmIE51bWJlciBvZiBjb25maWd1cmFibGUgRlRNMyBmYXVsdCBkZXRlY3Rpb24gaW5wdXQgKG51bWJlciBvZiByZWdpc3RlciBiaXRzIFNPUFQ0W0ZUTTNGTFRuXSwgd2hlcmUgbiBpcyBhIG51bWJlciBzdGFydGluZyBmcm9tIHplcm8pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0ZUTTNfRkFVTFRfQ09VTlQgKDApCisvKiBAYnJpZWYgSGFzIEZUTSBoYXJkd2FyZSB0cmlnZ2VyIDAgc29mdHdhcmUgc3luY2hyb25pemF0aW9uIChyZWdpc3RlciBiaXQgU09QVDhbRlRNblNZTkNCSVRdLCB3aGVyZSBuIGlzIGEgbW9kdWxlIGluc3RhbmNlIGluZGV4KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfRlRNX1RSSUdHRVJfU1lOQyAoMCkKKy8qIEBicmllZiBIYXMgRlRNIGNoYW5uZWxzIG91dHB1dCBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDhbRlRNeE9DSG5TUkNdLCB3aGVyZSB4IGlzIGEgbW9kdWxlIGluc3RhbmNlIGluZGV4IGFuZCBuIGlzIGEgY2hhbm5lbCBpbmRleCkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0ZUTV9DSEFOTkVMU19PVVRQVVRfU1JDICgwKQorLyogQGJyaWVmIEhhcyBUUE0gbW9kdWxlKHMpIGNvbmZpZ3VyYXRpb24uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1RQTSAoMSkKKy8qIEBicmllZiBUaGUgaGlnaGVzdCBUUE0gbW9kdWxlIGluZGV4LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX01BWF9UUE1fSU5ERVggKDIpCisvKiBAYnJpZWYgSGFzIFRQTSBtb2R1bGUgd2l0aCBpbmRleCAwLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19UUE0wICgxKQorLyogQGJyaWVmIEhhcyBUUE0wIGNsb2NrIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IGZpZWxkIFNPUFQ0W1RQTTBDTEtTRUxdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVFBNMF9DTEtfU0VMICgxKQorLyogQGJyaWVmIElzIFRQTSBjaGFubmVscyBjb25maWd1cmF0aW9uIGluIHRoZSBTT1BUNCAobm90IFNPUFQ5KSByZWdpc3RlciAocmVnaXN0ZXIgYml0cyBUUE1uQ0gwU1JDLCBUUE1uQ0xLU0VMLCB3aGVyZSBuIGlzIGEgbW9kdWxlIGluc3RhbmNlIGluZGV4KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVFBNX0NIQU5ORUxTX0NPTkZJR19JTl9TT1BUNF9SRUcgKDEpCisvKiBAYnJpZWYgSGFzIFRQTTEgY2hhbm5lbCAwIGlucHV0IGNhcHR1cmUgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IGZpZWxkIFNPUFQ0W1RQTTFDSDBTUkNdIG9yIFNPUFQ5W1RQTTFDSDBTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVFBNMV9DSDBfU1JDX1NFTEVDVElPTiAoMSkKKy8qIEBicmllZiBIYXMgVFBNMSBjbG9jayBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBmaWVsZCBTT1BUNFtUUE0xQ0xLU0VMXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1RQTTFfQ0xLX1NFTCAoMSkKKy8qIEBicmllZiBUUE0xIGNoYW5uZWwgMCBpbnB1dCBjYXB0dXJlIHNvdXJjZSBzZWxlY3Rpb24gd2lkdGggKHdpZHRoIG9mIHJlZ2lzdGVyIGJpdCBmaWVsZCBTT1BUNFtUUE0xQ0gwU1JDXSBvciBTT1BUOVtUUE0xQ0gwU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfVFBNMV9DSDBfU1JDX1NFTEVDVElPTl9XSURUSCAoMSkKKy8qIEBicmllZiBIYXMgVFBNMiBjaGFubmVsIDAgaW5wdXQgY2FwdHVyZSBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgZmllbGQgU09QVDRbVFBNMkNIMFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19UUE0yX0NIMF9TUkNfU0VMRUNUSU9OICgxKQorLyogQGJyaWVmIEhhcyBUUE0yIGNsb2NrIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IGZpZWxkIFNPUFQ0W1RQTTJDTEtTRUxdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVFBNMl9DTEtfU0VMICgxKQorLyogQGJyaWVmIEhhcyBQTEwvRkxMIGNsb2NrIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IGZpZWxkIFNPUFQyW1BMTEZMTFNFTF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19QTExfRkxMX1NFTEVDVElPTiAoMCkKKy8qIEBicmllZiBQTEwvRkxMIGNsb2NrIHNlbGVjdGlvbiB3aWR0aCAod2lkdGggb2YgcmVnaXN0ZXIgYml0IGZpZWxkIFNPUFQyW1BMTEZMTFNFTF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX1BMTF9GTExfU0VMRUNUSU9OX1dJRFRIICgwKQorLyogQGJyaWVmIEhhcyBORkMgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQyW05GQ1NSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19ORkNTUkMgKDApCisvKiBAYnJpZWYgSGFzIGVTREhDIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltFU0RIQ1NSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19FU0RIQ1NSQyAoMCkKKy8qIEBicmllZiBIYXMgU0RIQyBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDJbU0RIQ1NSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19TREhDU1JDICgwKQorLyogQGJyaWVmIEhhcyBMQ0RDIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdHMgU09QVDJbTENEQ1NSQ10sIFNPUFQyW0xDRENfQ0xLU0VMXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0xDRENTUkMgKDApCisvKiBAYnJpZWYgSGFzIEVORVQgdGltZXN0YW1wIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltUSU1FU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1RJTUVTUkMgKDApCisvKiBAYnJpZWYgSGFzIEVORVQgUk1JSSBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDJbUk1JSVNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19STUlJU1JDICgwKQorLyogQGJyaWVmIEhhcyBVU0IgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQyW1VTQlNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JTUkMgKDApCisvKiBAYnJpZWYgSGFzIFVTQiBGUyBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDJbVVNCRlNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JGU1JDICgwKQorLyogQGJyaWVmIEhhcyBVU0IgSFMgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQyW1VTQkhTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVVNCSFNSQyAoMCkKKy8qIEBicmllZiBIYXMgTFBVQVJUIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltMUFVBUlRTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfTFBVQVJUU1JDICgwKQorLyogQGJyaWVmIEhhcyBMUFVBUlQwIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltMUFVBUlQwU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0xQVUFSVDBTUkMgKDEpCisvKiBAYnJpZWYgSGFzIExQVUFSVDEgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQyW0xQVUFSVDFTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfTFBVQVJUMVNSQyAoMCkKKy8qIEBicmllZiBIYXMgRkxFWElPU1JDIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltGTEVYSU9TUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfRkxFWElPU1JDICgwKQorLyogQGJyaWVmIEhhcyBVQVJUMCBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDJbVUFSVDBTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVUFSVDBTUkMgKDApCisvKiBAYnJpZWYgSGFzIFRQTSBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDJbVFBNU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1RQTVNSQyAoMSkKKy8qIEBicmllZiBIYXMgZGVidWcgdHJhY2UgY2xvY2sgc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDJbVFJBQ0VDTEtTRUxdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVFJBQ0VfQ0xLU0VMICgwKQorLyogQGJyaWVmIE51bWJlciBvZiBBREMgbW9kdWxlcyAocmVnaXN0ZXIgYml0cyBTT1BUN1tBRENuVFJHU0VMXSwgU09QVDdbQURDblBSRVRSR1NFTF0sIFNPUFQ3W0FEQ25BTFRUUkdTRUxdLCB3aGVyZSBuIGlzIGEgbW9kdWxlIGluc3RhbmNlIGluZGV4KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9BRENfQ09VTlQgKDEpCisvKiBAYnJpZWYgQURDMCBhbHRlcm5hdGUgdHJpZ2dlciBlbmFibGUgd2lkdGggKHdpZHRoIG9mIGJpdCBmaWVsZCBBREMwQUxUVFJHRU4gb2YgcmVnaXN0ZXIgU09QVDcpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0FEQzBBTFRUUkdFTl9XSURUSCAoMSkKKy8qIEBicmllZiBBREMxIGFsdGVybmF0ZSB0cmlnZ2VyIGVuYWJsZSB3aWR0aCAod2lkdGggb2YgYml0IGZpZWxkIEFEQzFBTFRUUkdFTiBvZiByZWdpc3RlciBTT1BUNykuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfQURDMUFMVFRSR0VOX1dJRFRIICgwKQorLyogQGJyaWVmIEFEQzIgYWx0ZXJuYXRlIHRyaWdnZXIgZW5hYmxlIHdpZHRoICh3aWR0aCBvZiBiaXQgZmllbGQgQURDMkFMVFRSR0VOIG9mIHJlZ2lzdGVyIFNPUFQ3KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9BREMyQUxUVFJHRU5fV0lEVEggKDApCisvKiBAYnJpZWYgQURDMyBhbHRlcm5hdGUgdHJpZ2dlciBlbmFibGUgd2lkdGggKHdpZHRoIG9mIGJpdCBmaWVsZCBBREMzQUxUVFJHRU4gb2YgcmVnaXN0ZXIgU09QVDcpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0FEQzNBTFRUUkdFTl9XSURUSCAoMCkKKy8qIEBicmllZiBIU0FEQzAgY29udmVydGVyIEEgYWx0ZXJuYXRlIHRyaWdnZXIgZW5hYmxlIHdpZHRoICh3aWR0aCBvZiBiaXQgZmllbGQgSFNBREMwQUFMVFRSR0VOIG9mIHJlZ2lzdGVyIFNPUFQ3KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IU0FEQzBBQUxUVFJHRU5fV0lEVEggKDApCisvKiBAYnJpZWYgSFNBREMxIGNvbnZlcnRlciBBIGFsdGVybmF0ZSB0cmlnZ2VyIGVuYWJsZSB3aWR0aCAod2lkdGggb2YgYml0IGZpZWxkIEhTQURDMUFBTFRUUkdFTiBvZiByZWdpc3RlciBTT1BUNykuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSFNBREMxQUFMVFRSR0VOX1dJRFRIICgwKQorLyogQGJyaWVmIEFEQyBjb252ZXJ0ZXIgQSBhbHRlcm5hdGUgdHJpZ2dlciBlbmFibGUgd2lkdGggKHdpZHRoIG9mIGJpdCBmaWVsZCBBRENBQUxUVFJHRU4gb2YgcmVnaXN0ZXIgU09QVDcpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0FEQ0FBTFRUUkdFTl9XSURUSCAoMCkKKy8qIEBicmllZiBIU0FEQzAgY29udmVydGVyIEIgYWx0ZXJuYXRlIHRyaWdnZXIgZW5hYmxlIHdpZHRoICh3aWR0aCBvZiBiaXQgZmllbGQgSFNBREMwQkFMVFRSR0VOIG9mIHJlZ2lzdGVyIFNPUFQ3KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IU0FEQzBCQUxUVFJHRU5fV0lEVEggKDApCisvKiBAYnJpZWYgSFNBREMxIGNvbnZlcnRlciBCIGFsdGVybmF0ZSB0cmlnZ2VyIGVuYWJsZSB3aWR0aCAod2lkdGggb2YgYml0IGZpZWxkIEhTQURDMUJBTFRUUkdFTiBvZiByZWdpc3RlciBTT1BUNykuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSFNBREMxQkFMVFRSR0VOX1dJRFRIICgwKQorLyogQGJyaWVmIEFEQyBjb252ZXJ0ZXIgQiBhbHRlcm5hdGUgdHJpZ2dlciBlbmFibGUgd2lkdGggKHdpZHRoIG9mIGJpdCBmaWVsZCBBRENCQUxUVFJHRU4gb2YgcmVnaXN0ZXIgU09QVDcpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0FEQ0JBTFRUUkdFTl9XSURUSCAoMCkKKy8qIEBicmllZiBIYXMgY2xvY2sgMiBvdXRwdXQgZGl2aWRlciAocmVnaXN0ZXIgYml0IGZpZWxkIENMS0RJVjFbT1VURElWMl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRElWSURFUl9IQVNfT1VURElWMiAoMCkKKy8qIEBicmllZiBIYXMgY2xvY2sgMyBvdXRwdXQgZGl2aWRlciAocmVnaXN0ZXIgYml0IGZpZWxkIENMS0RJVjFbT1VURElWM10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRElWSURFUl9IQVNfT1VURElWMyAoMCkKKy8qIEBicmllZiBIYXMgY2xvY2sgNCBvdXRwdXQgZGl2aWRlciAocmVnaXN0ZXIgYml0IGZpZWxkIENMS0RJVjFbT1VURElWNF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRElWSURFUl9IQVNfT1VURElWNCAoMSkKKy8qIEBicmllZiBDbG9jayA0IG91dHB1dCBkaXZpZGVyIHdpZHRoICh3aWR0aCBvZiByZWdpc3RlciBiaXQgZmllbGQgQ0xLRElWMVtPVVRESVY0XSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9ESVZJREVSX09VVERJVjRfV0lEVEggKDMpCisvKiBAYnJpZWYgSGFzIGNsb2NrIDUgb3V0cHV0IGRpdmlkZXIgKHJlZ2lzdGVyIGJpdCBmaWVsZCBDTEtESVYxW09VVERJVjVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0RJVklERVJfSEFTX09VVERJVjUgKDApCisvKiBAYnJpZWYgSGFzIFVTQiBjbG9jayBkaXZpZGVyIChyZWdpc3RlciBiaXQgZmllbGQgQ0xLRElWMltVU0JESVZdIGFuZCBDTEtESVYyW1VTQkZSQUNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0RJVklERVJfSEFTX1VTQkRJViAoMCkKKy8qIEBicmllZiBIYXMgVVNCIEZTIGNsb2NrIGRpdmlkZXIgKHJlZ2lzdGVyIGJpdCBmaWVsZCBDTEtESVYyW1VTQkZTRElWXSBhbmQgQ0xLRElWMltVU0JGU0ZSQUNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0RJVklERVJfSEFTX1VTQkZTRElWICgwKQorLyogQGJyaWVmIEhhcyBVU0IgSFMgY2xvY2sgZGl2aWRlciAocmVnaXN0ZXIgYml0IGZpZWxkIENMS0RJVjJbVVNCSFNESVZdIGFuZCBDTEtESVYyW1VTQkhTRlJBQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRElWSURFUl9IQVNfVVNCSFNESVYgKDApCisvKiBAYnJpZWYgSGFzIFBMTC9GTEwgY2xvY2sgZGl2aWRlciAocmVnaXN0ZXIgYml0IGZpZWxkIENMS0RJVjNbUExMRkxMRElWXSBhbmQgQ0xLRElWM1tQTExGTExGUkFDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9ESVZJREVSX0hBU19QTExGTExESVYgKDApCisvKiBAYnJpZWYgSGFzIExDREMgY2xvY2sgZGl2aWRlciAocmVnaXN0ZXIgYml0IGZpZWxkIENMS0RJVjNbTENEQ0RJVl0gYW5kIENMS0RJVjNbTENEQ0ZSQUNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0RJVklERVJfSEFTX0xDRENESVYgKDApCisvKiBAYnJpZWYgSGFzIHRyYWNlIGNsb2NrIGRpdmlkZXIgKHJlZ2lzdGVyIGJpdCBmaWVsZCBDTEtESVY0W1RSQUNFRElWXSBhbmQgQ0xLRElWNFtUUkFDRUZSQUNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0RJVklERVJfSEFTX1RSQUNFRElWICgwKQorLyogQGJyaWVmIEhhcyBORkMgY2xvY2sgZGl2aWRlciAocmVnaXN0ZXIgYml0IGZpZWxkIENMS0RJVjRbTkZDRElWXSBhbmQgQ0xLRElWNFtORkNGUkFDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9ESVZJREVSX0hBU19ORkNESVYgKDApCisvKiBAYnJpZWYgSGFzIEtpbmV0aXMgZmFtaWx5IElEIChyZWdpc3RlciBiaXQgZmllbGQgU0RJRFtGQU1JTFlJRF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fU0RJRF9IQVNfRkFNSUxZSUQgKDApCisvKiBAYnJpZWYgSGFzIEtpbmV0aXMgZmFtaWx5IElEIChyZWdpc3RlciBiaXQgZmllbGQgU0RJRFtGQU1JRF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fU0RJRF9IQVNfRkFNSUQgKDEpCisvKiBAYnJpZWYgSGFzIEtpbmV0aXMgc3ViLWZhbWlseSBJRCAocmVnaXN0ZXIgYml0IGZpZWxkIFNESURbU1VCRkFNSURdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX1NESURfSEFTX1NVQkZBTUlEICgxKQorLyogQGJyaWVmIEhhcyBLaW5ldGlzIHNlcmllcyBJRCAocmVnaXN0ZXIgYml0IGZpZWxkIFNESURbU0VSSUVTSURdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX1NESURfSEFTX1NFUklFU0lEICgxKQorLyogQGJyaWVmIEhhcyBkZXZpY2UgZGllIElEIChyZWdpc3RlciBiaXQgZmllbGQgU0RJRFtESUVJRF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fU0RJRF9IQVNfRElFSUQgKDEpCisvKiBAYnJpZWYgSGFzIHN5c3RlbSBTUkFNIHNpemUgc3BlY2lmaWVyIChyZWdpc3RlciBiaXQgZmllbGQgU0RJRFtTUkFNU0laRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fU0RJRF9IQVNfU1JBTVNJWkUgKDEpCisvKiBAYnJpZWYgSGFzIGZsYXNoIG1vZGUgKHJlZ2lzdGVyIGJpdCBGQ0ZHMVtGTEFTSERPWkVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0ZDRkdfSEFTX0ZMQVNIRE9aRSAoMSkKKy8qIEBicmllZiBIYXMgZmxhc2ggZGlzYWJsZSAocmVnaXN0ZXIgYml0IEZDRkcxW0ZMQVNIRElTXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9GQ0ZHX0hBU19GTEFTSERJUyAoMSkKKy8qIEBicmllZiBIYXMgRlRGRSBkaXNhYmxlIChyZWdpc3RlciBiaXQgRkNGRzFbRlRGRElTXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9GQ0ZHX0hBU19GVEZESVMgKDApCisvKiBAYnJpZWYgSGFzIEZsZXhOVk0gc2l6ZSBzcGVjaWZpZXIgKHJlZ2lzdGVyIGJpdCBmaWVsZCBGQ0ZHMVtOVk1TSVpFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9GQ0ZHX0hBU19OVk1TSVpFICgxKQorLyogQGJyaWVmIEhhcyBFRVBST00gc2l6ZSBzcGVjaWZpZXIgKHJlZ2lzdGVyIGJpdCBmaWVsZCBGQ0ZHMVtFRVNJWkVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0ZDRkdfSEFTX0VFU0laRSAoMCkKKy8qIEBicmllZiBIYXMgRmxleE5WTSBwYXJ0aXRpb24gKHJlZ2lzdGVyIGJpdCBmaWVsZCBGQ0ZHMVtERVBBUlRdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0ZDRkdfSEFTX0RFUEFSVCAoMCkKKy8qIEBicmllZiBNYXhpbXVtIGZsYXNoIGFkZHJlc3MgYmxvY2sgMCBhZGRyZXNzIHNwZWNpZmllciAocmVnaXN0ZXIgYml0IGZpZWxkIEZDRkcyW01BWEFERFIwXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9GQ0ZHX0hBU19NQVhBRERSMCAoMSkKKy8qIEBicmllZiBNYXhpbXVtIGZsYXNoIGFkZHJlc3MgYmxvY2sgMSBhZGRyZXNzIHNwZWNpZmllciAocmVnaXN0ZXIgYml0IGZpZWxkIEZDRkcyW01BWEFERFIxXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9GQ0ZHX0hBU19NQVhBRERSMSAoMSkKKy8qIEBicmllZiBNYXhpbXVtIGZsYXNoIGFkZHJlc3MgYmxvY2sgMCBvciAxIGFkZHJlc3Mgc3BlY2lmaWVyIChyZWdpc3RlciBiaXQgZmllbGQgRkNGRzJbTUFYQUREUjAxXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9GQ0ZHX0hBU19NQVhBRERSMDEgKDApCisvKiBAYnJpZWYgTWF4aW11bSBmbGFzaCBhZGRyZXNzIGJsb2NrIDIgb3IgMyBhZGRyZXNzIHNwZWNpZmllciAocmVnaXN0ZXIgYml0IGZpZWxkIEZDRkcyW01BWEFERFIyM10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRkNGR19IQVNfTUFYQUREUjIzICgwKQorLyogQGJyaWVmIEhhcyBwcm9ncmFtIGZsYXNoIGF2YWlsYWJpbGl0eSBzcGVjaWZpZXIgKHJlZ2lzdGVyIGJpdCBGQ0ZHMltQRkxTSF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRkNGR19IQVNfUEZMU0ggKDEpCisvKiBAYnJpZWYgSGFzIHByb2dyYW0gZmxhc2ggc3dhcHBpbmcgKHJlZ2lzdGVyIGJpdCBGQ0ZHMltTV0FQUEZMU0hdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0ZDRkdfSEFTX1BGTFNIX1NXQVAgKDEpCisvKiBAYnJpZWYgSGFzIG1pc2NlbGxhbmlvdXMgY29udHJvbCByZWdpc3RlciAocmVnaXN0ZXIgTUNSKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0hBU19NSVNDX0NPTlRST0xTICgwKQorLyogQGJyaWVmIEhhcyBDT1Agd2F0Y2hkb2cgKHJlZ2lzdGVycyBDT1BDIGFuZCBTUlZDT1ApLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fSEFTX0NPUF9XQVRDSERPRyAoMSkKKy8qIEBicmllZiBIYXMgQ09QIHdhdGNoZG9nIHN0b3AgKHJlZ2lzdGVyIGJpdHMgQ09QQ1tDT1BTVFBFTl0sIENPUENbQ09QREJHRU5dIGFuZCBDT1BDW0NPUENMS1NFTF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fSEFTX0NPUF9TVE9QICgxKQorLyogQGJyaWVmIEhhcyBMTFdVIGNsb2NrIGdhdGUgYml0IChlLmcgU0lNX1NDR0M0KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0hBU19TQ0dDX0xMV1UgKDApCisKKy8qIFNNQyBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEhhcyBwYXJ0aWFsIHN0b3Agb3B0aW9uIChyZWdpc3RlciBiaXQgU1RPUENUUkxbUFNUT1BPXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfUFNUT1BPICgxKQorLyogQGJyaWVmIEhhcyBMUE8gcG93ZXIgb3B0aW9uIChyZWdpc3RlciBiaXQgU1RPUENUUkxbTFBPUE9dKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX0hBU19MUE9QTyAoMCkKKy8qIEBicmllZiBIYXMgUE9SIHBvd2VyIG9wdGlvbiAocmVnaXN0ZXIgYml0IFNUT1BDVFJMW1BPUlBPXSBvciBWTExTQ1RSTFtQT1JQT10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfSEFTX1BPUlBPICgxKQorLyogQGJyaWVmIEhhcyBsb3cgcG93ZXIgd2FrZXVwIG9uIGludGVycnVwdCAocmVnaXN0ZXIgYml0IFBNQ1RSTFtMUFdVSV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQV1VJICgwKQorLyogQGJyaWVmIEhhcyBMTFMgb3IgVkxMUyBtb2RlIGNvbnRyb2wgKHJlZ2lzdGVyIGJpdCBTVE9QQ1RSTFtMTFNNXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUgKDEpCisvKiBAYnJpZWYgSGFzIFZMTFMgbW9kZSBjb250cm9sIChyZWdpc3RlciBiaXQgVkxMU0NUUkxbVkxMU01dKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX1VTRV9WTExTQ1RSTF9SRUcgKDApCisvKiBAYnJpZWYgSGFzIFZMTFMgbW9kZSBjb250cm9sIChyZWdpc3RlciBiaXQgU1RPUENUUkxbVkxMU01dKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX1VTRV9TVE9QQ1RSTF9WTExTTSAoMCkKKy8qIEBicmllZiBIYXMgUkFNIHBhcnRpdGlvbiAyIHBvd2VyIG9wdGlvbiAocmVnaXN0ZXIgYml0IFNUT1BDVFJMW1JBTTJQT10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfSEFTX1JBTTJfUE9XRVJfT1BUSU9OICgxKQorLyogQGJyaWVmIEhhcyBoaWdoIHNwZWVkIHJ1biBtb2RlIChyZWdpc3RlciBiaXQgUE1QUk9UW0FIU1JVTl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfSEFTX0hJR0hfU1BFRURfUlVOX01PREUgKDApCisvKiBAYnJpZWYgSGFzIGxvdyBsZWFrYWdlIHN0b3AgbW9kZSAocmVnaXN0ZXIgYml0IFBNUFJPVFtBTExTXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfTE9XX0xFQUtBR0VfU1RPUF9NT0RFICgxKQorLyogQGJyaWVmIEhhcyB2ZXJ5IGxvdyBsZWFrYWdlIHN0b3AgbW9kZSAocmVnaXN0ZXIgYml0IFBNUFJPVFtBVkxMU10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUllfTE9XX0xFQUtBR0VfU1RPUF9NT0RFICgxKQorLyogQGJyaWVmIEhhcyBzdG9wIHN1Ym1vZGUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfU1VCX1NUT1BfTU9ERSAoMSkKKy8qIEBicmllZiBIYXMgc3RvcCBzdWJtb2RlIDAoVkxMUzApLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfSEFTX1NUT1BfU1VCTU9ERTAgKDEpCisvKiBAYnJpZWYgSGFzIHN0b3Agc3VibW9kZSAyKFZMTFMyKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX0hBU19TVE9QX1NVQk1PREUyICgxKQorLyogQGJyaWVmIEhhcyBTTUNfUEFSQU0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfUEFSQU0gKDApCisvKiBAYnJpZWYgSGFzIFNNQ19WRVJJRC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJJRCAoMCkKKy8qIEBicmllZiBIYXMgc3RvcCBhYm9ydCBmbGFnIChyZWdpc3RlciBiaXQgUE1DVFJMW1NUT1BBXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfUE1DVFJMX1NUT1BBICgxKQorLyogQGJyaWVmIEhhcyB0YW1wZXIgcmVzZXQgKHJlZ2lzdGVyIGJpdCBTUlNbVEFNUEVSXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfU1JTX1RBTVBFUiAoMCkKKy8qIEBicmllZiBIYXMgc2VjdXJpdHkgdmlvbGF0aW9uIHJlc2V0IChyZWdpc3RlciBiaXQgU1JTW1NFQ1ZJT10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfSEFTX1NSU19TRUNWSU8gKDApCisKKy8qIERTUEkgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBSZWNlaXZlL3RyYW5zbWl0IEZJRk8gc2l6ZSBpbiBudW1iZXIgb2YgaXRlbXMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RTUElfRklGT19TSVpFbih4KSAoNCkKKy8qIEBicmllZiBNYXhpbXVtIHRyYW5zZmVyIGRhdGEgd2lkdGggaW4gYml0cy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRFNQSV9NQVhfREFUQV9XSURUSCAoMTYpCisvKiBAYnJpZWYgTWF4aW11bSBudW1iZXIgb2YgY2hpcCBzZWxlY3QgcGlucy4gKFJlZmxlY3RzIHRoZSB3aWR0aCBvZiByZWdpc3RlciBiaXQgZmllbGQgUFVTSFJbUENTXS4pICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RTUElfTUFYX0NISVBfU0VMRUNUX0NPVU5UICg0KQorLyogQGJyaWVmIE51bWJlciBvZiBjaGlwIHNlbGVjdCBwaW5zLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9EU1BJX0NISVBfU0VMRUNUX0NPVU5UICgzKQorLyogQGJyaWVmIEhhcyBjaGlwIHNlbGVjdCBzdHJvYmUgY2FwYWJpbGl0eSBvbiB0aGUgUENTNSBwaW4uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RTUElfSEFTX0NISVBfU0VMRUNUX1NUUk9CRSAoMCkKKy8qIEBicmllZiBIYXMgc2VwYXJhdGVkIFRYREFUQSBhbmQgQ01EIEZJRk9zIChyZWdpc3RlciBTUkVYKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfVFhEQVRBX0NNRF9GSUZPICgwKQorLyogQGJyaWVmIEhhcyAxNi1iaXQgZGF0YSB0cmFuc2ZlciBzdXBwb3J0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9EU1BJXzE2QklUX1RSQU5TRkVSUyAoMSkKKy8qIEBicmllZiBIYXMgc2VwYXJhdGUgRE1BIFJYIGFuZCBUWCByZXF1ZXN0cy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oeCkgKDEpCisKKy8qIFN5c1RpY2sgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBTeXN0aWNrIGhhcyBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2suICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NZU1RJQ0tfSEFTX0VYVF9SRUYgKDEpCisvKiBAYnJpZWYgU3lzdGljayBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgaXMgY29yZSBjbG9jayBkaXZpZGVkIGJ5IHRoaXMgdmFsdWUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NZU1RJQ0tfRVhUX1JFRl9DT1JFX0RJViAoMTYpCisKKy8qIFRQTSBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEJ1cyBjbG9jayBpcyB0aGUgc291cmNlIGNsb2NrIGZvciB0aGUgbW9kdWxlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fQlVTX0NMT0NLICgwKQorLyogQGJyaWVmIE51bWJlciBvZiBjaGFubmVscy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVFBNX0NIQU5ORUxfQ09VTlRuKHgpIFwKKyAgICAoKHgpID09IFRQTTAgPyAoNCkgOiBcCisgICAgKCh4KSA9PSBUUE0xID8gKDIpIDogXAorICAgICgoeCkgPT0gVFBNMiA/ICgyKSA6ICgtMSkpKSkKKy8qIEBicmllZiBIYXMgY291bnRlciByZXNldCBieSB0aGUgc2VsZWN0ZWQgaW5wdXQgY2FwdHVyZSBldmVudCAocmVnaXN0ZXIgYml0cyBDMFNDW0lDUlNUXSwgQzFTQ1tJQ1JTVF0sIC4uLikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09VTlRFUl9SRVNFVF9CWV9DQVBUVVJFX0VWRU5UICgwKQorLyogQGJyaWVmIEhhcyBUUE1fUEFSQU0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1RQTV9IQVNfUEFSQU0gKDApCisvKiBAYnJpZWYgSGFzIFRQTV9WRVJJRC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVFBNX0hBU19WRVJJRCAoMCkKKy8qIEBicmllZiBIYXMgVFBNX0dMT0JBTC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVFBNX0hBU19HTE9CQUwgKDApCisvKiBAYnJpZWYgSGFzIFRQTV9UUklHLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fSEFTX1RSSUcgKDApCisvKiBAYnJpZWYgSGFzIGNvdW50ZXIgcGF1c2Ugb24gdHJpZ2dlci4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVFBNX0hBU19QQVVTRV9DT1VOVEVSX09OX1RSSUdHRVIgKDEpCisvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHRyaWdnZXIgc2VsZWN0aW9uLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fSEFTX0VYVEVSTkFMX1RSSUdHRVJfU0VMRUNUSU9OICgxKQorLyogQGJyaWVmIEhhcyBUUE1fQ09NQklORSByZWdpc3Rlci4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FICgxKQorLyogQGJyaWVmIFdoZXRoZXIgQ09NQklORSByZWdpc3RlciBoYXMgZWZmZWN0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fQ09NQklORV9IQVNfRUZGRUNUbih4KSBcCisgICAgKCh4KSA9PSBUUE0wID8gKDApIDogXAorICAgICgoeCkgPT0gVFBNMSA/ICgxKSA6IFwKKyAgICAoKHgpID09IFRQTTIgPyAoMSkgOiAoLTEpKSkpCisvKiBAYnJpZWYgSGFzIFRQTV9QT0wuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1RQTV9IQVNfUE9MICgxKQorLyogQGJyaWVmIEhhcyBUUE1fRklMVEVSIHJlZ2lzdGVyLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fSEFTX0ZJTFRFUiAoMSkKKy8qIEBicmllZiBXaGV0aGVyIEZJTFRFUiByZWdpc3RlciBoYXMgZWZmZWN0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fRklMVEVSX0hBU19FRkZFQ1RuKHgpIFwKKyAgICAoKHgpID09IFRQTTAgPyAoMCkgOiBcCisgICAgKCh4KSA9PSBUUE0xID8gKDEpIDogXAorICAgICgoeCkgPT0gVFBNMiA/ICgxKSA6ICgtMSkpKSkKKy8qIEBicmllZiBIYXMgVFBNX1FEQ1RSTCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwgKDEpCisvKiBAYnJpZWYgV2hldGhlciBRRENUUkwgcmVnaXN0ZXIgaGFzIGVmZmVjdC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVFBNX1FEQ1RSTF9IQVNfRUZGRUNUbih4KSBcCisgICAgKCh4KSA9PSBUUE0wID8gKDApIDogXAorICAgICgoeCkgPT0gVFBNMSA/ICgxKSA6IFwKKyAgICAoKHgpID09IFRQTTIgPyAoMSkgOiAoLTEpKSkpCisKKy8qIFRSTkcgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIE5vIGZlYXR1cmUgZGVmaW5pdGlvbnMgKi8KKworLyogVFNJIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgVFNJIG1vZHVsZSB2ZXJzaW9uLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UU0lfVkVSU0lPTiAoNCkKKy8qIEBicmllZiBIYXMgZW5kLW9mLXNjYW4gRE1BIHRyYW5zZmVyIHJlcXVlc3QgZW5hYmxlIChyZWdpc3RlciBiaXQgR0VOQ1NbRU9TRE1FT10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UU0lfSEFTX0VORF9PRl9TQ0FOX0RNQV9FTkFCTEUgKDApCisvKiBAYnJpZWYgTnVtYmVyIG9mIFRTSSBjaGFubmVscy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVFNJX0NIQU5ORUxfQ09VTlQgKDE2KQorCisvKiBWUkVGIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgSGFzIGNob3Agb3NjaWxsYXRvciAoYml0IFRSTVtDSE9QRU5dKSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9WUkVGX0hBU19DSE9QX09TQyAoMSkKKy8qIEBicmllZiBIYXMgc2Vjb25kIG9yZGVyIGN1cnZhdHVyZSBjb21wZW5zYXRpb24gKGJpdCBTQ1tJQ09NUEVOXSkgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVlJFRl9IQVNfQ09NUEVOU0FUSU9OICgxKQorLyogQGJyaWVmIElmIGhpZ2gvbG93IGJ1ZmZlciBtb2RlIHN1cHBvcnRlZCAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9WUkVGX01PREVfTFZfVFlQRSAoMSkKKy8qIEBicmllZiBNb2R1bGUgaGFzIGFsc28gbG93IHJlZmVyZW5jZSAocmVnaXN0ZXJzIFZSRUZML1ZSRUZIKSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9WUkVGX0hBU19MT1dfUkVGRVJFTkNFICgwKQorLyogQGJyaWVmIEhhcyBWUkVGX1RSTTQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1ZSRUZfSEFTX1RSTTQgKDApCisKKy8qIFhDVlJfQU5BTE9HIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBObyBmZWF0dXJlIGRlZmluaXRpb25zICovCisKKy8qIFhDVlJfUEhZIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBObyBmZWF0dXJlIGRlZmluaXRpb25zICovCisKKy8qIFpMTCBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogTm8gZmVhdHVyZSBkZWZpbml0aW9ucyAqLworCisjZW5kaWYgLyogX01LVzQxWjRfRkVBVFVSRVNfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9YQ1ZSX1Rlc3QveGN2cl90ZXN0X2Zzay5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9YQ1ZSX1Rlc3QveGN2cl90ZXN0X2Zzay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNWMxMTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL1hDVlJfVGVzdC94Y3ZyX3Rlc3RfZnNrLmMKQEAgLTAsMCArMSwyMTIgQEAKKy8qIQorKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorKgorKiBcZmlsZQorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisjaW5jbHVkZSAieGN2cl90ZXN0X2Zzay5oIgorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFByaXZhdGUgdHlwZSBkZWZpbml0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworZW51bSB7CisgICAgZ0RmdE5vcm1hbF9jICAgICAgICAgID0gMCwKKyAgICBnRGZ0VHhOb01vZF9DYXJyaWVyX2MgPSAxLAorICAgIGdEZnRUeFBhdHRlcm5fYyAgICAgICA9IDIsCisgICAgZ0RmdFR4UmFuZG9tX2MgICAgICAgID0gMywKK307CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUHJpdmF0ZSBtZW1vcnkgZGVjbGFyYXRpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUHVibGljIHByb3RvdHlwZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3ZvaWQgWGN2ckZza01vZFR4KHZvaWQpOwordm9pZCBYY3ZyRnNrTm9Nb2RUeCh2b2lkKTsKK3ZvaWQgWGN2ckZza0lkbGUodm9pZCk7Cit2b2lkIFhjdnJGc2tUeFJhbmQodm9pZCk7Cit2b2lkIFhjdnJGc2tMb2FkUGF0dGVybih1aW50MzJfdCB1MzJQYXR0ZXJuKTsKK3ZvaWQgWGN2ckZza1NldFR4UG93ZXIodWludDhfdCB1OFR4UG93KTsKK3ZvaWQgWGN2ckZza1NldFR4Q2hhbm5lbCh1aW50OF90IHU4VHhDaGFuKTsKK3ZvaWQgWGN2ckZza1Jlc3RvcmVUWENvbnRyb2wodm9pZCk7Cit1aW50OF90IFhjdnJGc2tHZXRJbnN0YW50UnNzaSh2b2lkKTsKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBYY3ZyRnNrTW9kVHgKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBYY3ZyRnNrTW9kVHgodm9pZCkKK3sKKyAgICBYY3ZyRnNrSWRsZSgpOworICAgIFhDVlJfVFhfRElHLT5DVFJMICY9IH4oWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTF9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREVfTUFTSyk7CisgICAgWENWUl9UWF9ESUctPkNUUkwgfD0gWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERShnRGZ0VHhQYXR0ZXJuX2MpIHwKKyAgICBYQ1ZSX1RYX0RJR19DVFJMX1RYX0RGVF9FTl9NQVNLOworICAgIFhDVlJfTUlTQy0+RFRFU1RfQ1RSTCB8PSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9FTl9NQVNLOworICAgIFhDVlJfVFNNLT5DVFJMIHw9IFhDVlJfVFNNX0NUUkxfRk9SQ0VfVFhfRU5fTUFTSzsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBYY3ZyRnNrTm9Nb2RUeAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIFhjdnJGc2tOb01vZFR4KHZvaWQpCit7CisgICAgWGN2ckZza0lkbGUoKTsKKyAgICBYQ1ZSX1RYX0RJRy0+Q1RSTCAmPSB+KFhDVlJfVFhfRElHX0NUUkxfREZUX0NMS19TRUxfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFX01BU0spOworICAgIFhDVlJfVFhfRElHLT5DVFJMIHw9IFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREUoZ0RmdFR4Tm9Nb2RfQ2Fycmllcl9jKTsKKyAgICBYQ1ZSX01JU0MtPkRURVNUX0NUUkwgfD0gWENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfRU5fTUFTSzsKKyAgICBYQ1ZSX1RTTS0+Q1RSTCB8PSBYQ1ZSX1RTTV9DVFJMX0ZPUkNFX1RYX0VOX01BU0s7Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogWGN2ckZza0lkbGUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBYY3ZyRnNrSWRsZSh2b2lkKQoreworICAgIFhDVlJfVFhfRElHLT5DVFJMICY9IH4oWENWUl9UWF9ESUdfQ1RSTF9UWF9ERlRfRU5fTUFTSyB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0VOX01BU0sgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREVfTUFTSyk7CisgICAgWENWUl9UU00tPkNUUkwgJj0gflhDVlJfVFNNX0NUUkxfRk9SQ0VfVFhfRU5fTUFTSzsKKyAgICBYQ1ZSX01JU0MtPkRURVNUX0NUUkwgJj0gflhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX0VOX01BU0s7Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogWGN2ckZza1R4UmFuZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIFhjdnJGc2tUeFJhbmQodm9pZCkKK3sKKyAgICBYY3ZyRnNrSWRsZSgpOworICAgIFhDVlJfVFhfRElHLT5DVFJMICY9IH4oWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTF9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREVfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfTEVOR1RIX01BU0spOworICAgIFhDVlJfVFhfRElHLT5DVFJMIHw9IFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREUoZ0RmdFR4UmFuZG9tX2MpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfTEVOR1RIKDApIHwgLyogbGVuZ3RoIDkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfRU5fTUFTSzsKKyAgICBYQ1ZSX01JU0MtPkRURVNUX0NUUkwgfD0gWENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfRU5fTUFTSzsKKyAgICBYQ1ZSX1RTTS0+Q1RSTCB8PSBYQ1ZSX1RTTV9DVFJMX0ZPUkNFX1RYX0VOX01BU0s7Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogWGN2ckZza0xvYWRQYXR0ZXJuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgWGN2ckZza0xvYWRQYXR0ZXJuKHVpbnQzMl90IHUzMlBhdHRlcm4pCit7CisgICAgWENWUl9UWF9ESUctPkRGVF9QQVRURVJOID0gdTMyUGF0dGVybjsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBYY3ZyRnNrR2V0SW5zdGFudFJzc2kKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDhfdCBYY3ZyRnNrR2V0SW5zdGFudFJzc2kodm9pZCkKK3sKKyAgICB1aW50OF90IHU4UnNzaTsKKyAgICB1aW50MzJfdCB0MSx0Mix0MzsKKyAgICB0MSA9IFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTDsKKyAgICB0MiA9IFhDVlJfUlhfRElHLT5SU1NJX0NUUkxfMDsKKyAgICB0MyA9IFhDVlJfUEhZLT5DRkcxOworICAgIFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTCA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19ORUdFREdFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9DSF9GSUxUX0JZUEFTUygxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX1JBV19FTigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX1BPTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfT1NSKDEpIHwgLyogMT1PU1I4LCAyPU9TUjE2LCA0PU9TUjMyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfTk9STV9FTigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfUlNTSV9FTigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQUdDX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ09DX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ09DX0NBTF9FTigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfSVFfU1dBUCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19FTigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX1JBVEUoMCkgfCAvKiBTb3VyY2UgUmF0ZSAwIGlzIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ETUFfRFRFU1RfRU4oMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0dBSU4oMjIpIHwgLyogRGVjIGZpbHQgZ2FpbiBmb3IgU1JDIHJhdGUgPT0gIDAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9IWkRfQ09SUl9ESVMoMSkgOworCisgICAgWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8wICY9IH5YQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0lJUl9XRUlHSFRfTUFTSzsKKyAgICBYQ1ZSX1JYX0RJRy0+UlNTSV9DVFJMXzAgfD0gIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX1dFSUdIVCgweDUpOworCisgICAgWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8wICY9IH5YQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX05fV0lORE9XX0FWR19NQVNLOworICAgIFhDVlJfUlhfRElHLT5SU1NJX0NUUkxfMCB8PSAgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9OX1dJTkRPV19BVkcoMHgzKTsgCisKKyAgICB1aW50MzJfdCB0ZW1wID0gWENWUl9QSFktPkNGRzE7CisgICAgdGVtcCAmPSB+WENWUl9QSFlfQ0ZHMV9DVFNfVEhSRVNIX01BU0s7CisgICAgdGVtcCB8PSBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goMHhGRik7CisgICAgWENWUl9QSFktPkNGRzEgPSB0ZW1wOworCisgICAgWENWUl9Gb3JjZVJ4V3UoKTsKKyAgICBmb3IodWludDMyX3QgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQorICAgIHsKKyAgICAgICAgX19hc20oIm5vcCIpOworICAgIH0KKyAgICB1OFJzc2kgPSAodWludDhfdCkoKFhDVlJfUlhfRElHLT5SU1NJX0NUUkxfMSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzFfUlNTSV9PVVRfTUFTSykgPj4gCisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMV9SU1NJX09VVF9TSElGVCk7CisgICAgWENWUl9Gb3JjZVJ4V2QoKTsKKworICAgIFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTCA9IHQxOworICAgIFhDVlJfUlhfRElHLT5SU1NJX0NUUkxfMCA9IHQyOworICAgIFhDVlJfUEhZLT5DRkcxID0gdDM7CisgICAgcmV0dXJuIHU4UnNzaTsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBYY3ZyRnNrU2V0VHhQb3dlcgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIFhjdnJGc2tTZXRUeFBvd2VyKHVpbnQ4X3QgdThUeFBvdykKK3sKKyAgICByZXR1cm47Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogWGN2ckZza1NldFR4Q2hhbm5lbAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIFhjdnJGc2tTZXRUeENoYW5uZWwodWludDhfdCB1OFR4Q2hhbikKK3sKKyAgICByZXR1cm47Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogWGN2ckZza1Jlc3RvcmVUWENvbnRyb2wKKyogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHVzZXIgc2hvdWxkIHN3aXRjaCB0bworKiBwcmV2aW91cyBwcm90b2NvbCBhbmQgc2V0IHRoZSBwcm90b2NvbCBjaGFubmVsIHRvIGRlZmF1bHQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBYY3ZyRnNrUmVzdG9yZVRYQ29udHJvbCh2b2lkKQoreworICAgIHJldHVybjsKK30KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9YQ1ZSX1Rlc3QveGN2cl90ZXN0X2Zzay5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9YQ1ZSX1Rlc3QveGN2cl90ZXN0X2Zzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYmU5MmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL1hDVlJfVGVzdC94Y3ZyX3Rlc3RfZnNrLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qIQorKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorKgorKiBcZmlsZQorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBfX1hDVlJfVEVTVF9GU0tfSF9fCisjZGVmaW5lIF9fWENWUl9URVNUX0ZTS19IX18KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQdWJsaWMgdHlwZSBkZWZpbml0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFB1YmxpYyBwcm90b3R5cGVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFxicmllZiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGluc3RhbnQgUlNTSSB2YWx1ZSBhbmQgcmV0dXJucyBpdCBhcyB1bnNpZ25lZCBieXRlLgorKgorKiBccGFyYW1baW5dIE5vbmUuCisqCisqIFxpbmdyb3VwIFRlc3RGdW5jdGlvbnMKKyoKKyogXGRldGFpbHMgSW5pdGlhbGl6YXRpb24gb2YgdGhlIHhjdnIgaXMgbmVjZXNzYXJ5IHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdWludDhfdCBYY3ZyRnNrR2V0SW5zdGFudFJzc2kodm9pZCk7CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHRyYW5zY2VpdmVyIGludG8gY29udGludW91cyBtb2R1bGF0ZWQgdHJhbnNtaXNzaW9uLgorKgorKiBccGFyYW1baW5dIE5vbmUuCisqCisqIFxpbmdyb3VwIFRlc3RGdW5jdGlvbnMKKyoKKyogXGRldGFpbHMgSW5pdGlhbGl6YXRpb24gb2YgdGhlIHhjdnIgYW5kIGNhbGxpbmcgWGN2ckZza0xvYWRQYXR0ZXJuIGFyZSBuZWNlc3NhcnkKKyogICAgICAgICBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIHZvaWQgWGN2ckZza01vZFR4KHZvaWQpOworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSB0cmFuc2NlaXZlciBpbnRvIGNvbnRpbnVvdXMgdW5tb2R1bGF0ZWQgdHJhbnNtaXNzaW9uLgorKgorKiBccGFyYW1baW5dIE5vbmUuCisqCisqIFxpbmdyb3VwIFRlc3RGdW5jdGlvbnMKKyoKKyogXGRldGFpbHMgCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB2b2lkIFhjdnJGc2tOb01vZFR4KHZvaWQpOworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSB0cmFuc2NlaXZlciBpbnRvIGlkbGUuCisqCisqIFxwYXJhbVtpbl0gTm9uZS4KKyoKKyogXGluZ3JvdXAgVGVzdEZ1bmN0aW9ucworKgorKiBcZGV0YWlscyAKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIHZvaWQgWGN2ckZza0lkbGUodm9pZCk7CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHRyYW5zY2VpdmVyIGludG8gY29udGludW91cyBtb2R1bGF0ZWQgdHJhbnNtaXNzaW9uLgorKgorKiBccGFyYW1baW5dIE5vbmUuCisqCisqIFxpbmdyb3VwIFRlc3RGdW5jdGlvbnMKKyoKKyogXGRldGFpbHMgVGhlIG1vZHVsYXRpb24gdXNlZCBpcyBhIHBzZXVkby1yYW5kb20gcGF0dGVybiBnZW5lcmF0ZWQgdXNpbmcgYSBMRlNSLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdm9pZCBYY3ZyRnNrVHhSYW5kKHZvaWQpOworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBsb2FkcyBhIDMyIGJpdCB2YWx1ZSBpbnRvIHRoZSBwYXR0ZXJuIHJlZ2lzdGVyIHVzZWQgYnkgWGN2ckZza01vZFR4LgorKgorKiBccGFyYW1baW5dIHUzMlBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gYmUgbG9hZGVkLgorKgorKiBcaW5ncm91cCBUZXN0RnVuY3Rpb25zCisqCisqIFxkZXRhaWxzIAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdm9pZCBYY3ZyRnNrTG9hZFBhdHRlcm4odWludDMyX3QgdTMyUGF0dGVybik7CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIGdpdmVzIHR4IHBvd2VyIGNvbnRyb2wgdG8geGN2ciBhbmQgc2V0cyB0aGUgcG93ZXIgdG8gdThUeFBvdy4KKyoKKyogXHBhcmFtW2luXSB1OFR4UG93IFZhbHVlcyBzaG91bGQgYmUgYmV0d2VlbiAweDAwIGFuZCAweDBGLgorKgorKiBcaW5ncm91cCBUZXN0RnVuY3Rpb25zCisqCisqIFxkZXRhaWxzIAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdm9pZCBYY3ZyRnNrU2V0VHhQb3dlcih1aW50OF90IHU4VHhQb3cpOworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBnaXZlcyB0eCBjaGFubmVsIGNvbnRyb2wgdG8geGN2ciBhbmQgc2V0cyB0aGUgY2hhbm5lbCB0byB1OFR4Q2hhbi4KKyoKKyogXHBhcmFtW2luXSB1OFR4Q2hhbiBWYWx1ZXMgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMzkuCisqCisqIFxpbmdyb3VwIFRlc3RGdW5jdGlvbnMKKyoKKyogXGRldGFpbHMgCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB2b2lkIFhjdnJGc2tTZXRUeENoYW5uZWwodWludDhfdCB1OFR4Q2hhbik7CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIGdpdmVzIHR4IGNoYW5uZWwgY29udHJvbCBhbmQgcG93ZXIgdG8gdGhlIHVwcGVyIGxheWVyLgorKgorKiBccGFyYW1baW5dIE5vbmUuCisqCisqIFxpbmdyb3VwIFRlc3RGdW5jdGlvbnMKKyoKKyogXGRldGFpbHMgQ2FsbCB0aGlzIGZ1bmN0aW9uIG9ubHkgaWYgWGN2ckZza1NldFR4Q2hhbm5lbCBvciBYY3ZyRnNrU2V0VHhQb3dlciB3ZXJlIGNhbGxlZAorKiAgICAgICAgIHByZXZpb3VzbHkuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB2b2lkIFhjdnJGc2tSZXN0b3JlVFhDb250cm9sKHZvaWQpOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfYW50X2NvbmZpZy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfYW50X2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOWExMDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9hbnRfY29uZmlnLmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgYW50X21vZGVfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEFOVF9NT0RFLAorICAgIC5zY2djNV9jbG9ja19lbmFfYml0cyA9IFNJTV9TQ0dDNV9QSFlESUdfTUFTSyAKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgIHwgU0lNX1NDR0M1X0FOVF9NQVNLCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAsCisKKyAgICAvKiBYQ1ZSX01JU0MgY29uZmlncyAqLworICAgIC54Y3ZyX2N0cmwubWFzayA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9NQVNLLAorICAgIC54Y3ZyX2N0cmwuaW5pdCA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0woMykgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkMoNykgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMKDEpLAorCisgICAgLyogWENWUl9QSFkgY29uZmlncyAqLworICAgIC5waHlfcHJlX3JlZjBfaW5pdCA9IFJXMFBTKDAsIDB4MUIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUygxLCAweDFDVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDIsIDB4MUNVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoMywgMHgxQ1UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUyg0LCAweDFEVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDUsIDB4MURVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoNiwgMHgxRVUgJiAweDNVKSwgLyogUGhhc2UgaW5mbyAjNiBvdmVybGFwcyB0d28gaW5pdGlhbGl6YXRpb24gd29yZHMgLSBvbmx5IG5lZWQgdHdvIGxvd2VzdCBiaXRzKi8KKyAgICAucGh5X3ByZV9yZWYxX2luaXQgPSAoMHgxRSkgPj4gMiB8IC8qIFBoYXNlIGluZm8gIzYgb3ZlcmxhcHMgdHdvIGluaXRpYWxpemF0aW9uIHdvcmRzICAtIG1hbnVhbGx5IGNvbXB1dGUgdGhlIHNoaWZ0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgUlcxUFMoNywgMHgxRVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUyg4LCAweDFFVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDksIDB4MUVVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcxUFMoMTAsIDB4MUVVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcxUFMoMTEsIDB4MURVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcxUFMoMTIsIDB4MURVICYgMHhGVSksIC8qIFBoYXNlIGluZm8gIzEyIG92ZXJsYXBzIHR3byBpbml0aWFsaXphdGlvbiB3b3JkcyAqLworICAgIC5waHlfcHJlX3JlZjJfaW5pdCA9ICgweDFEKSA+PiA0IHwgLyogUGhhc2UgaW5mbyAjMTIgb3ZlcmxhcHMgdHdvIGluaXRpYWxpemF0aW9uIHdvcmRzIC0gbWFudWFsbHkgY29tcHV0ZSB0aGUgc2hpZnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzJQUygxMywgMHgxQ1UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzJQUygxNCwgMHgxQ1UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzJQUygxNSwgMHgxQ1UpLAorCisgICAgLnBoeV9jZmcxX2luaXQgPSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTCgxKSB8IAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goMHhGOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVQoMiksCisKKyAgICAucGh5X2VsX2NmZ19pbml0ID0gWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRSgxKSAKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgfCBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfRU5BQkxFKDApCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAsCisKKyAgICAvKiBYQ1ZSX1JYX0RJRyBjb25maWdzICovCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfUkFURSgwKSwKKworICAgIC5yeF9kaWdfY3RybF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTCgwKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOKDEpLCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisKKyAgICAuYWdjX2N0cmxfMF9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSCgweEZGKSwKKyAgICAvKiBYQ1ZSX1RTTSBjb25maWdzICovCisjaWYgKERBVEFfUEFERElOR19FTikKKyAgICAudHNtX3RpbWluZ18zNV9pbml0ID0gQjAoVFhfRElHX0VOX0FTU0VSVCtUWF9ESUdfRU5fVFhfSElfQURKKSwKKyNlbHNlCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQpLAorI2VuZGlmIC8qIChEQVRBX1BBRERJTkdfRU4pICovCisKKyAgICAvKiBYQ1ZSX1RYX0RJRyBjb25maWdzICovCisgICAgLnR4X2dmc2tfY3RybCA9IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01VTFRJUExZX1RBQkxFX01BTlVBTCgweDQwMDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUkoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NTEQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19GTEQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NT0RfSU5ERVhfU0NBTElORygwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfT1ZSRF9FTigwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMF9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8xX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzJfT1ZSRCgwKSwKKyAgICAudHhfZ2Zza19jb2VmZjFfMjZtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMl8yNm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYxXzMybWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjJfMzJtaHogPSAwLAorfTsKKworLyogTU9ERSAmIERBVEEgUkFURSBjb21iaW5lZCBjb25maWd1cmF0aW9uICovCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9BTlRfMW1icHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEFOVF9NT0RFLAorICAgIC5kYXRhX3JhdGUgPSBEUl8xTUJQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg1KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg1KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDUpLCAvKiBUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHg2KSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDEyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweEZGRkIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4RkZGNSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkYwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRUMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZFQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkYzLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweDAwMDEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDAxNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDJGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDksCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNUQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwNjksCisKKyAgICAgLyogQU5UIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGOSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkY0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRUQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZFNywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkU3LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRUUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZGRCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDE1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMzEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0RSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2NiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA3MywKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMCkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMCkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2JsZV9jb25maWcuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2JsZV9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTRiMGNjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfYmxlX2NvbmZpZy5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IGJsZV9tb2RlX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBCTEVfTU9ERSwKKyAgICAuc2NnYzVfY2xvY2tfZW5hX2JpdHMgPSBTSU1fU0NHQzVfUEhZRElHX01BU0sgfCBTSU1fU0NHQzVfQlRMTF9NQVNLLAorCisgICAgLyogWENWUl9NSVNDIGNvbmZpZ3MgKi8KKyAgICAueGN2cl9jdHJsLm1hc2sgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkNfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUxfTUFTSywKKyAgICAueGN2cl9jdHJsLmluaXQgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTCgxKSwKKworICAgIC8qIFhDVlJfUEhZIGNvbmZpZ3MgKi8KKyAgICAucGh5X3ByZV9yZWYwX2luaXQgPSBSVzBQUygwLCAweDE5KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoMSwgMHgxOVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUygyLCAweDFBVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDMsIDB4MUJVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoNCwgMHgxQ1UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUyg1LCAweDFDVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDYsIDB4MURVICYgMHgzVSksIC8qIFBoYXNlIGluZm8gIzYgb3ZlcmxhcHMgdHdvIGluaXRpYWxpemF0aW9uIHdvcmRzICovCisgICAgLnBoeV9wcmVfcmVmMV9pbml0ID0gKDB4MUQpID4+IDIgfCAvKiBQaGFzZSBpbmZvICM2IG92ZXJsYXBzIHR3byBpbml0aWFsaXphdGlvbiB3b3JkcyAtIG1hbnVhbGx5IGNvbXB1dGUgdGhlIHNoaWZ0Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUyg3LCAweDFFVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDgsIDB4MUVVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcxUFMoOSwgMHgxRVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUygxMCwgMHgxRFUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUygxMSwgMHgxQ1UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUygxMiwgMHgxQ1UgJiAweEZVKSwgLyogUGhhc2UgaW5mbyAjMTIgb3ZlcmxhcHMgdHdvIGluaXRpYWxpemF0aW9uIHdvcmRzICovCisgICAgLnBoeV9wcmVfcmVmMl9pbml0ID0gKDB4MUMpID4+IDQgfCAvKiBQaGFzZSBpbmZvICMxMiBvdmVybGFwcyB0d28gaW5pdGlhbGl6YXRpb24gd29yZHMgLSBtYW51YWxseSBjb21wdXRlIHRoZSBzaGlmdCovCisgICAgICAgICAgICAgICAgICAgICAgICAgUlcyUFMoMTMsIDB4MUJVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcyUFMoMTQsIDB4MUFVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcyUFMoMTUsIDB4MTlVKSwKKworICAgIC5waHlfY2ZnMV9pbml0ID0gWENWUl9QSFlfQ0ZHMV9BQV9QTEFZQkFDSygwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0FBX09VVFBVVF9TRUwoMSkgfCAKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfRlNLX0JJVF9JTlZFUlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9CU01fRU5fQkxFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfREVNT0RfQ0xLX01PREUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9DVFNfVEhSRVNIKDIyMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVQoMiksCisKKyAgICAucGh5X2VsX2NmZ19pbml0ID0gWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRSgxKSAvKiBQZXIgU01CICovCisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgICAgIHwgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX0VOQUJMRSgwKQorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgLAorCisgICAgLyogWENWUl9SWF9ESUcgY29uZmlncyAqLworICAgIC5yeF9kaWdfY3RybF9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTCgwKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOKDEpIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX1JBVEUoMCksCisKKyAgICAucnhfZGlnX2N0cmxfaW5pdF8zMm1oeiA9ICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOKDEpLCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisKKyAgICAuYWdjX2N0cmxfMF9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSCgweEZGKSwKKyAgICAvKiBYQ1ZSX1RTTSBjb25maWdzICovCisjaWYgKERBVEFfUEFERElOR19FTikKKyAgICAudHNtX3RpbWluZ18zNV9pbml0ID0gQjAoVFhfRElHX0VOX0FTU0VSVCtUWF9ESUdfRU5fVFhfSElfQURKKSwKKyNlbHNlCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQpLAorI2VuZGlmIC8qIChEQVRBX1BBRERJTkdfRU4pICovCisKKyAgICAvKiBYQ1ZSX1RYX0RJRyBjb25maWdzICovCisgICAgLnR4X2dmc2tfY3RybCA9IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01VTFRJUExZX1RBQkxFX01BTlVBTCgweDQwMDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUkoMSkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NTEQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19GTEQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NT0RfSU5ERVhfU0NBTElORygwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfT1ZSRF9FTigwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMF9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8xX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzJfT1ZSRCgwKSwKKyAgICAudHhfZ2Zza19jb2VmZjFfMjZtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMl8yNm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYxXzMybWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjJfMzJtaHogPSAwLAorfTsKKworLyogTU9ERSAmIERBVEEgUkFURSBjb21iaW5lZCBjb25maWd1cmF0aW9uICovCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9CTEVfMW1icHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEJMRV9NT0RFLAorICAgIC5kYXRhX3JhdGUgPSBEUl8xTUJQUywKKyAgICAKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoNCkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoNCksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCg0KSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4QSkgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDEyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBCTEUgMjZNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRjYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkVFLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRUYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMTcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAyRiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQ2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDU5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDYzLAorCisgICAgLyogQkxFIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGQSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkY1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRUYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZFQiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkVCLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDE1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMzAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0QSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA1RiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA2QiwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMCkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMCkgLAorfTsKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfY29tbW9uX2NvbmZpZy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfY29tbW9uX2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNzdkM2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9jb21tb25fY29uZmlnLmMKQEAgLTAsMCArMSw2MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitjb25zdCB4Y3ZyX2NvbW1vbl9jb25maWdfdCB4Y3ZyX2NvbW1vbl9jb25maWcgPQoreworICAgIC8qIFhDVlJfQU5BIGNvbmZpZ3MgKi8KKyAgICAuYW5hX3N5X2N0cmwxLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTFBGX0ZJTFRfQ1RSTF9NQVNLLAorICAgIC5hbmFfc3lfY3RybDEuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MUEZfRklMVF9DVFJMKDMpLCAvKiBQTEwgQW5hbG9nIExvb3AgRmlsdGVyICovCisKKyNkZWZpbmUgaHBtX3ZjbV90eCAwCisjZGVmaW5lIGhwbV92Y21fY2FsIDEKKyNkZWZpbmUgaHBtX2ZkYl9yZXNfdHggMAorI2RlZmluZSBocG1fZmRiX3Jlc19jYWwgMQorI2RlZmluZSBtb2R1bGF0aW9uX3dvcmRfbWFudWFsIDAKKyNkZWZpbmUgbW9kX2Rpc2FibGUgMAorI2RlZmluZSBocG1fbW9kX21hbnVhbCAwCisjZGVmaW5lIGhwbV9tb2RfZGlzYWJsZSAwCisjZGVmaW5lIGhwbV9zZG1fb3V0X21hbnVhbCAwCisjZGVmaW5lIGhwbV9zZG1fb3V0X2Rpc2FibGUgMAorI2RlZmluZSBjaGFubmVsX251bSAwCisjZGVmaW5lIGJvYyAwCisjZGVmaW5lIGJtciAxCisjZGVmaW5lIHpvYyAwCisjZGVmaW5lIGN0dW5lX2xkZl9sZXYgOAorI2RlZmluZSBmdGZfcnhfdGhyc2ggMzMKKyNkZWZpbmUgZnR3X3J4IDAKKyNkZWZpbmUgZnRmX3R4X3RocnNoIDYKKyNkZWZpbmUgZnR3X3R4IDAKKyNkZWZpbmUgZnJlcV9jb3VudF9nbyAwCisjZGVmaW5lIGZyZXFfY291bnRfdGltZSAwCisjZGVmaW5lIGhwbV9zZG1faW5fbWFudWFsIDAKKyNkZWZpbmUgaHBtX3NkbV9vdXRfaW52ZXJ0IDAKKyNkZWZpbmUgaHBtX3NkbV9pbl9kaXNhYmxlIDAKKyNkZWZpbmUgaHBtX2xmc3Jfc2l6ZSA0CisjZGVmaW5lIGhwbV9kdGhfc2NsIDAKKyNkZWZpbmUgaHBtX2R0aF9lbiAxCisjZGVmaW5lIGhwbV9pbnRlZ2VyX3NjYWxlIDAKKyNkZWZpbmUgaHBtX2ludGVnZXJfaW52ZXJ0IDAKKyNkZWZpbmUgaHBtX2NhbF9pbnZlcnQgMQorI2RlZmluZSBocG1fbW9kX2luX2ludmVydCAxCisjZGVmaW5lIGhwbV9jYWxfbm90X2J1bXBlZCAwCisjZGVmaW5lIGhwbV9jYWxfY291bnRfc2NhbGUgMAorI2RlZmluZSBocF9jYWxfZGlzYWJsZSAwCisjZGVmaW5lIGhwbV9jYWxfZmFjdG9yX21hbnVhbCAwCisjZGVmaW5lIGhwbV9jYWxfYXJyYXlfc2l6ZSAxCisjZGVmaW5lIGhwbV9jYWxfdGltZSAwCisjZGVmaW5lIGhwbV9zZG1fZGVub20gMjU2CisjZGVmaW5lIGhwbV9jb3VudF9hZGp1c3QgMAorI2RlZmluZSBwbGxfbGRfbWFudWFsIDAKKyNkZWZpbmUgcGxsX2xkX2Rpc2FibGUgMAorI2RlZmluZSBscG1fc2RtX2ludiAwCisjZGVmaW5lIGxwbV9kaXNhYmxlIDAKKyNkZWZpbmUgbHBtX2R0aF9zY2wgOAorI2RlZmluZSBscG1fZF9jdHJsIDEKKyNkZWZpbmUgbHBtX2Rfb3ZyZCAxCisjZGVmaW5lIGxwbV9zY2FsZSA4CisjZGVmaW5lIGxwbV9zZG1fdXNlX25lZyAwCisjZGVmaW5lIGhwbV9hcnJheV9iaWFzIDAKKyNkZWZpbmUgbHBtX2ludGcgMzgKKyNkZWZpbmUgc2RtX21hcF9kaXNhYmxlIDAKKyNkZWZpbmUgbHBtX3NkbV9kZWxheSA0CisjZGVmaW5lIGhwbV9zZG1fZGVsYXkgMAorI2RlZmluZSBocG1faW50ZWdlcl9kZWxheSAwCisjZGVmaW5lIGN0dW5lX3RhcmdldF9tYW51YWwgMAorI2RlZmluZSBjdHVuZV90YXJnZXRfZGlzYWJsZSAwCisjZGVmaW5lIGN0dW5lX2FkanVzdCAwCisjZGVmaW5lIGN0dW5lX21hbnVhbCAwCisjZGVmaW5lIGN0dW5lX2Rpc2FibGUgMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgLnBsbF9ocG1fYnVtcCA9IFhDVlJfUExMX0RJR19IUE1fQlVNUF9IUE1fRkRCX1JFU19DQUwoaHBtX2ZkYl9yZXNfY2FsKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1fQlVNUF9IUE1fRkRCX1JFU19UWChocG1fZmRiX3Jlc190eCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX1ZDTV9DQUwoaHBtX3ZjbV9jYWwpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9WQ01fVFgoaHBtX3ZjbV90eCksCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICAucGxsX21vZF9jdHJsID0gWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9NT0RfRElTQUJMRShocG1fbW9kX2Rpc2FibGUpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9NT0RfTUFOVUFMKGhwbV9tb2RfbWFudWFsKSB8IAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX1NETV9PVVRfRElTQUJMRShocG1fc2RtX291dF9kaXNhYmxlKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fU0RNX09VVF9NQU5VQUwoaHBtX3NkbV9vdXRfbWFudWFsKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9NT0RfRElTQUJMRShtb2RfZGlzYWJsZSkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfTU9EVUxBVElPTl9XT1JEX01BTlVBTChtb2R1bGF0aW9uX3dvcmRfbWFudWFsKSwKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIC5wbGxfY2hhbl9tYXAgPSBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk1SKGJtcikgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk9DKGJvYykgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQ0hBTk5FTF9OVU0oY2hhbm5lbF9udW0pCisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgIHwgWENWUl9QTExfRElHX0NIQU5fTUFQX1pPQyh6b2MpCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAsCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICAucGxsX2xvY2tfZGV0ZWN0ID0gWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NUVU5FX0xERl9MRVYoY3R1bmVfbGRmX2xldikgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlJFUV9DT1VOVF9HTyhmcmVxX2NvdW50X2dvKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX1RJTUUoZnJlcV9jb3VudF90aW1lKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZfUlhfVEhSU0goZnRmX3J4X3RocnNoKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZfVFhfVEhSU0goZnRmX3R4X3RocnNoKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVFdfUlgoZnR3X3J4KSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVFdfVFgoZnR3X3R4KSwKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIC5wbGxfaHBtX2N0cmwgPSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0NBTF9JTlZFUlQoaHBtX2NhbF9pbnZlcnQpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9EVEhfRU4oaHBtX2R0aF9lbikgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0RUSF9TQ0woaHBtX2R0aF9zY2wpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9JTlRFR0VSX0lOVkVSVChocG1faW50ZWdlcl9pbnZlcnQpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9JTlRFR0VSX1NDQUxFKGhwbV9pbnRlZ2VyX3NjYWxlKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fTEZTUl9TSVpFKGhwbV9sZnNyX3NpemUpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9NT0RfSU5fSU5WRVJUKGhwbV9tb2RfaW5faW52ZXJ0KSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fU0RNX0lOX0RJU0FCTEUoaHBtX3NkbV9pbl9kaXNhYmxlKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fU0RNX0lOX01BTlVBTChocG1fc2RtX2luX21hbnVhbCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9PVVRfSU5WRVJUKGhwbV9zZG1fb3V0X2ludmVydCksCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgLnBsbF9ocG1jYWxfY3RybCA9IFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUF9DQUxfRElTQUJMRShocF9jYWxfZGlzYWJsZSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9BUlJBWV9TSVpFKGhwbV9jYWxfYXJyYXlfc2l6ZSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9DT1VOVF9TQ0FMRShocG1fY2FsX2NvdW50X3NjYWxlKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0ZBQ1RPUl9NQU5VQUwoaHBtX2NhbF9mYWN0b3JfbWFudWFsKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX05PVF9CVU1QRUQoaHBtX2NhbF9ub3RfYnVtcGVkKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX1RJTUUoaHBtX2NhbF90aW1lKSwKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAucGxsX2hwbV9zZG1fcmVzID0gWENWUl9QTExfRElHX0hQTV9TRE1fUkVTX0hQTV9DT1VOVF9BREpVU1QoaHBtX2NvdW50X2FkanVzdCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0RFTk9NKGhwbV9zZG1fZGVub20pLAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAucGxsX2xwbV9jdHJsID0gWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EX0NUUkwobHBtX2RfY3RybCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RfT1ZSRChscG1fZF9vdnJkKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRElTQUJMRShscG1fZGlzYWJsZSkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RUSF9TQ0wobHBtX2R0aF9zY2wpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TQ0FMRShscG1fc2NhbGUpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TRE1fSU5WKGxwbV9zZG1faW52KSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fU0RNX1VTRV9ORUcobHBtX3NkbV91c2VfbmVnKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9QTExfTERfRElTQUJMRShwbGxfbGRfZGlzYWJsZSkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfUExMX0xEX01BTlVBTChwbGxfbGRfbWFudWFsKSwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLnBsbF9scG1fc2RtX2N0cmwxID0gWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfSFBNX0FSUkFZX0JJQVMoaHBtX2FycmF5X2JpYXMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5URyhscG1faW50ZykgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX1NETV9NQVBfRElTQUJMRShzZG1fbWFwX2Rpc2FibGUpLAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAucGxsX2RlbGF5X21hdGNoID0gWENWUl9QTExfRElHX0RFTEFZX01BVENIX0hQTV9JTlRFR0VSX0RFTEFZKGhwbV9pbnRlZ2VyX2RlbGF5KSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19ERUxBWV9NQVRDSF9IUE1fU0RNX0RFTEFZKGhwbV9zZG1fZGVsYXkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0xQTV9TRE1fREVMQVkobHBtX3NkbV9kZWxheSksCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC5wbGxfY3R1bmVfY3RybCA9IFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX0FESlVTVChjdHVuZV9hZGp1c3QpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9ESVNBQkxFKGN0dW5lX2Rpc2FibGUpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9NQU5VQUwoY3R1bmVfbWFudWFsKSB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfVEFSR0VUX0RJU0FCTEUoY3R1bmVfdGFyZ2V0X2Rpc2FibGUpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9UQVJHRVRfTUFOVUFMKGN0dW5lX3RhcmdldF9tYW51YWwpLAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICAvKiBOT1RFOiBDbG9jayBzcGVjaWZpYyBzZXR0aW5ncyBhcmUgZW1iZWRkZWQgaW4gdGhlIG1vZGUgZGVwZW5kZW50IGNvbmZpZ3MgKi8KKyAgICAucnhfZGlnX2N0cmxfaW5pdCA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19ORUdFREdFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0NIX0ZJTFRfQllQQVNTKDApIHwKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX1JBV19FTigwKSB8CisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19QT0woMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfTk9STV9FTigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9SU1NJX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FHQ19FTigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ09DX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfQ0FMX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0lRX1NXQVAoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRE1BX0RURVNUX0VOKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0haRF9DT1JSX0RJUygxKSwKKworICAgIC5hZ2NfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX1NMT1dfQUdDX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9TTE9XX0FHQ19TUkMoMikgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19GUkVFWkVfRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19GUkVFWkVfUFJFX09SX0FBKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19VUF9TUkMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX0JCQV9TVEVQX1NaKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9MTkFfU1RFUF9TWigyKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX1JTU0lfVEhSRVNIKDB4ZTcpLAorCisgICAgLmFnY19jdHJsXzNfaW5pdCA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX1VORlJFRVpFX1RJTUUoMjEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfUERFVF9MT19ETFkoMikgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19SU1NJX0RFTFRfSDJTKDIwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX0gyU19TVEVQX1NaKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfVVBfU1RFUF9TWigyKSwgICAgCisKKyAgICAvKiBEQ09DIGNvbmZpZ3MgKi8KKyAgICAuZGNvY19jdHJsXzBfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ0FMX0RVUkFUSU9OKDE2KSB8IC8qIE9ubHkgdGhlIGR1cmF0aW9uIGNoYW5nZXMgYmV0d2VlbiAyNk1IeiBhbmQgMzJNSHogcmVmIG9zYyBzZXR0aW5ncyAqLworI2lmIChSQURJT19JU19HRU5fMlAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DQUxfQ0hFQ0tfRU4oMCkgfAorI2VuZGlmIC8qIChSQURJT19JU19HRU5fMlAxKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfVFJBQ0tfRlJPTV9aRVJPKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9FTigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9UWkFfQ09SUl9QT0woMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfQkJBX0NPUlJfUE9MKDApIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfU1JDKDEpLAorICAgIC5kY29jX2N0cmxfMF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DQUxfRFVSQVRJT04oMjApIHwgLyogT25seSB0aGUgZHVyYXRpb24gY2hhbmdlcyBiZXR3ZWVuIDI2TUh6IGFuZCAzMk1IeiByZWYgb3NjIHNldHRpbmdzICovCisjaWYgKFJBRElPX0lTX0dFTl8yUDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NBTF9DSEVDS19FTigwKSB8CisjZW5kaWYgLyogKFJBRElPX0lTX0dFTl8yUDEpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9UUkFDS19GUk9NX1pFUk8oMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSRUNUX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX1RaQV9DT1JSX1BPTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9CQkFfQ09SUl9QT0woMCkgfCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfU1JDKDEpLAorICAgIAorICAgIC5kY29jX2N0cmxfMV9pbml0ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19UUktfTUlOX0FHQ19JRFgoMjYpLAorCisgICAgLmRjX3Jlc2lkX2N0cmxfaW5pdCA9IFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfSVRFUl9GUkVFWkUoNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0FMUEhBKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9FWFRfRENfRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX01JTl9BR0NfSURYKDI2KSwKKworICAgIC5kY29jX2NhbF9nYWluX2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfQkJBX0NBTF9HQUlOMSgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4xKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjIoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfTE5BX0NBTF9HQUlOMigyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4zKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjMoMSkgLAorCisgICAgLmRjb2NfY2FsX3JjcF9pbml0ID0gWENWUl9SWF9ESUdfRENPQ19DQUxfUkNQX0FMUEhBX0NBTENfUkVDSVAoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX1JDUF9EQ09DX1RNUF9DQUxDX1JFQ0lQKDcxMSksCisKKyAgICAubG5hX2dhaW5fdmFsXzNfMCA9IFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzAoMHgxRFUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzEoMHgzMlUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzIoMHgwOVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzMoMHgzOFUpLAorCisgICAgLmxuYV9nYWluX3ZhbF83XzQgPSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF80KDB4NEZVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF81KDB4NUJVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF82KDB4NzJVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF83KDB4OEFVKSwKKyAgICAubG5hX2dhaW5fdmFsXzggPSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfOF9MTkFfR0FJTl9WQUxfOCgweEEwVSkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF84X0xOQV9HQUlOX1ZBTF85KDB4QjZVKSwKKworICAgIC5iYmFfcmVzX3R1bmVfdmFsXzdfMCA9IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfMCgweDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzEoMHgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8yKDB4MCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfMygweDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzQoMHgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF81KDB4MCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNigweDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzcoMHhGKSwKKyAgICAuYmJhX3Jlc190dW5lX3ZhbF8xMF84ID0gWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfOCgweDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfOSgweDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfMTAoMHgyKSwKKworICAgIC5sbmFfZ2Fpbl9saW5fdmFsXzJfMF9pbml0ID0gWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8wKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzJfMF9MTkFfR0FJTl9MSU5fVkFMXzIoMSksCisKKyAgICAubG5hX2dhaW5fbGluX3ZhbF81XzNfaW5pdCA9IFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfMygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzQoNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF81XzNfTE5BX0dBSU5fTElOX1ZBTF81KDcpLAorCisgICAgLmxuYV9nYWluX2xpbl92YWxfOF82X2luaXQgPSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzYoMTQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOF82X0xOQV9HQUlOX0xJTl9WQUxfNygyNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF84KDUwKSwKKworICAgIC5sbmFfZ2Fpbl9saW5fdmFsXzlfaW5pdCA9IFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOV9MTkFfR0FJTl9MSU5fVkFMXzkoOTEpLAorCisgICAgLmJiYV9yZXNfdHVuZV9saW5fdmFsXzNfMF9pbml0ID0gWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzAoOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8xKDExKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzIoMTYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMygyMiksCisKKyAgICAuYmJhX3Jlc190dW5lX2xpbl92YWxfN180X2luaXQgPSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF81KDQ0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzYoNjIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNyg0MiksIC8qIEhhcyAyIGZyYWN0aW9uYWwgYml0cyB1bmxpa2Ugb3RoZXIgQkJBX1JFU19UVU5FX0xJTl9WQUxzICovCisKKyAgICAuYmJhX3Jlc190dW5lX2xpbl92YWxfMTBfOF9pbml0ID0gWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF84KDEyOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9MSU5fVkFMXzkoMTg4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTAoMjg4KSwKKworICAgIC5kY29jX2JiYV9zdGVwX2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX0JCQV9TVEVQX0JCQV9EQ09DX1NURVBfUkVDSVAoOTM5KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUCgyNzkpLAorCisgICAgLmRjb2NfdHphX3N0ZXBfMDBfaW5pdCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMF9EQ09DX1RaQV9TVEVQX0dBSU5fMCg3NykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzBfRENPQ19UWkFfU1RFUF9SQ1BfMCgzNDA0KSwKKyAgICAuZGNvY190emFfc3RlcF8wMV9pbml0ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xX0RDT0NfVFpBX1NURVBfR0FJTl8xKDEwOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzFfRENPQ19UWkFfU1RFUF9SQ1BfMSgyNDM5KSwKKyAgICAuZGNvY190emFfc3RlcF8wMl9pbml0ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8yX0RDT0NfVFpBX1NURVBfR0FJTl8yKDE1NSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzJfRENPQ19UWkFfU1RFUF9SQ1BfMigxNjkxKSwKKyAgICAuZGNvY190emFfc3RlcF8wM19pbml0ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8zX0RDT0NfVFpBX1NURVBfR0FJTl8zKDIyMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzNfRENPQ19UWkFfU1RFUF9SQ1BfMygxMTkyKSwKKyAgICAuZGNvY190emFfc3RlcF8wNF9pbml0ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF80X0RDT0NfVFpBX1NURVBfR0FJTl80KDMxNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzRfRENPQ19UWkFfU1RFUF9SQ1BfNCg4MzUpLAorICAgIC5kY29jX3R6YV9zdGVwXzA1X2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzVfRENPQ19UWkFfU1RFUF9HQUlOXzUoNDM2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX1JDUF81KDYwMSksCisgICAgLmRjb2NfdHphX3N0ZXBfMDZfaW5pdCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNl9EQ09DX1RaQV9TVEVQX0dBSU5fNig2MTQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfUkNQXzYoNDI3KSwKKyAgICAuZGNvY190emFfc3RlcF8wN19pbml0ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF83X0RDT0NfVFpBX1NURVBfR0FJTl83KDg0NSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9SQ1BfNygzMTApLAorICAgIC5kY29jX3R6YV9zdGVwXzA4X2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzhfRENPQ19UWkFfU1RFUF9HQUlOXzgoMTI1NikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzhfRENPQ19UWkFfU1RFUF9SQ1BfOCgyMDkpLAorICAgIC5kY29jX3R6YV9zdGVwXzA5X2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzlfRENPQ19UWkFfU1RFUF9HQUlOXzkoMTgwNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzlfRENPQ19UWkFfU1RFUF9SQ1BfOSgxNDUpLAorICAgIC5kY29jX3R6YV9zdGVwXzEwX2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzEwX0RDT0NfVFpBX1NURVBfR0FJTl8xMCgyNjUzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMTBfRENPQ19UWkFfU1RFUF9SQ1BfMTAoOTkpLAorI2lmIChSQURJT19JU19HRU5fMlAxKQorICAgIC5kY29jX2NhbF9mYWlsX3RoX2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9GQUlMX1RIX0RDT0NfQ0FMX0JFVEFfRl9USCgyMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9GQUlMX1RIX0RDT0NfQ0FMX0FMUEhBX0ZfVEgoMTApLAorICAgIC5kY29jX2NhbF9wYXNzX3RoX2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9QQVNTX1RIX0RDT0NfQ0FMX0JFVEFfUF9USCgxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9QQVNTX1RIX0RDT0NfQ0FMX0FMUEhBX1BfVEgoMiksCisjZW5kaWYgLyogKFJBRElPX0lTX0dFTl8yUDEpICovCisgICAgLyogQUdDIENvbmZpZ3MgKi8gICAgCisgICAgLmFnY19nYWluX3RibF8wM18wMF9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAwKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDAoMCkgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDEoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMSgxKSB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMigyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAyKDEpIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAzKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDMoMiksCisKKyAgICAuYWdjX2dhaW5fdGJsXzA3XzA0X2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDQoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA1KDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNigzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA2KDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDcoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNygyKSwKKworICAgIC5hZ2NfZ2Fpbl90YmxfMTFfMDhfaW5pdCA9IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8wOCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzA4KDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMDkoNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8wOSgyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzEwKDQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMTAoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8xMSg0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzExKDQpLAorCisgICAgLmFnY19nYWluX3RibF8xNV8xMl9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzEyKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTIoNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xMyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzEzKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTQoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xNCg0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzE1KDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTUoNSksCisKKyAgICAuYWdjX2dhaW5fdGJsXzE5XzE2X2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTYoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xNig2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE3KDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTcoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xOCg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE4KDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xOSg3KSwKKworICAgIC5hZ2NfZ2Fpbl90YmxfMjNfMjBfaW5pdCA9IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMCg4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIwKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjEoOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIyKDkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjIoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMyg5KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIzKDcpLAorCisgICAgLmFnY19nYWluX3RibF8yNl8yNF9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0xOQV9HQUlOXzI0KDkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjQoOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNSg5KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0JCQV9HQUlOXzI1KDkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfTE5BX0dBSU5fMjYoOSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNigxMCksCisgICAgCisgICAgLnJzc2lfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX1VTRV9WQUxTKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9TUkMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9IT0xEX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX0NXX1dFSUdIVCgwKSB8CisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfTl9XSU5ET1dfQVZHKDEpIHwKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX05fV0lORE9XX05CKDEpIHwKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9IT0xEX0RFTEFZKDQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX1dFSUdIVCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX1ZMRF9TRVRUTEUoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9BREooMHhFOCkgLAorCisgICAgLmNjYV9lZF9scWlfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9MUUlfQ09SUl9USFJFU0goMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfQ09SUl9DTlRSX1RIUkVTSCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9MUUlfQ05UUigweDFBKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9TTlJfQURKKDApLAorCisgICAgLmNjYV9lZF9scWlfY3RybF8xX2luaXQgPSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9SU1NJX05PSVNFX0FWR19ERUxBWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9SU1NJX05PSVNFX0FWR19GQUNUT1IoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX1JTU0lfV0VJR0hUKDB4NCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX1JTU0lfU0VOUygweDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1NOUl9MUUlfRElTKDApIHwKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU0VMX1NOUl9NT0RFKDApIHwKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUVBU19UUkFOU19UT19JRExFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0NDQTFfRURfRU5fRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX01BTl9NRUFTX0NPTVBMRVRFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX01BTl9BQV9NQVRDSCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TTlJfTFFJX1dFSUdIVCgweDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9CSUFTKDB4MiksCisKKyAgICAvKiBYQ1ZSX1RTTSBjb25maWdzICovCisgICAgLnRzbV9jdHJsID0gWENWUl9UU01fQ1RSTF9QQV9SQU1QX1NFTChQQV9SQU1QX1NFTCkgfAorICAgICAgICAgICAgICAgIFhDVlJfVFNNX0NUUkxfREFUQV9QQURESU5HX0VOKERBVEFfUEFERElOR19FTikgfAorICAgICAgICAgICAgICAgIFhDVlJfVFNNX0NUUkxfVFNNX0lSUTBfRU4oMCkgfAorICAgICAgICAgICAgICAgIFhDVlJfVFNNX0NUUkxfVFNNX0lSUTFfRU4oMCkgfAorICAgICAgICAgICAgICAgIFhDVlJfVFNNX0NUUkxfUkFNUF9ETl9ERUxBWSgweDQpIHwKKyAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9DVFJMX1RYX0FCT1JUX0RJUygwKSB8CisgICAgICAgICAgICAgICAgWENWUl9UU01fQ1RSTF9SWF9BQk9SVF9ESVMoMCkgfAorICAgICAgICAgICAgICAgIFhDVlJfVFNNX0NUUkxfQUJPUlRfT05fQ1RVTkUoMCkgfAorICAgICAgICAgICAgICAgIFhDVlJfVFNNX0NUUkxfQUJPUlRfT05fQ1lDTEVfU0xJUCgwKSB8CisgICAgICAgICAgICAgICAgWENWUl9UU01fQ1RSTF9BQk9SVF9PTl9GUkVRX1RBUkcoMCkgfAorICAgICAgICAgICAgICAgIFhDVlJfVFNNX0NUUkxfQktQVCgweEZGKSAsCisKKyAgICAudHNtX292cmQyX2luaXQgPSBYQ1ZSX1RTTV9PVlJEMl9GUkVRX1RBUkdfTERfRU5fT1ZSRCgwKSB8IFhDVlJfVFNNX09WUkQyX0ZSRVFfVEFSR19MRF9FTl9PVlJEX0VOX01BU0ssCisgICAgLmVuZF9vZl9zZXFfaW5pdF8yNm1oeiA9IEIzKEVORF9PRl9SWF9XRF8yNk1IWikgfCBCMihFTkRfT0ZfUlhfV1VfMjZNSFopIHwgQjEoRU5EX09GX1RYX1dEKSB8IEIwKEVORF9PRl9UWF9XVSksCisgICAgLmVuZF9vZl9zZXFfaW5pdF8zMm1oeiA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMihFTkRfT0ZfUlhfV1UpIHwgQjEoRU5EX09GX1RYX1dEKSB8IEIwKEVORF9PRl9UWF9XVSksCisKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgIC5scHBzX2N0cmxfaW5pdCA9IEIzKDEwMikgfCBCMig0MCkgfCBCMSgwKSB8IEIwKDApLAorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisKKyAgICAudHNtX2Zhc3RfY3RybDJfaW5pdF8yNm1oeiA9IEIzKDEwMiArIEFERF9GT1JfMjZNSFopIHwgQjIoNDAgKyBBRERfRk9SXzI2TUhaKSB8IEIxKDY2KSB8IEIwKDgpLAorICAgIC50c21fZmFzdF9jdHJsMl9pbml0XzMybWh6ID0gQjMoMTAyKSB8IEIyKDQwKSB8IEIxKDY2KSB8IEIwKDgpLAorCisgICAgLnBhX3JhbXBfdGJsXzBfaW5pdCA9IFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMChQQV9SQU1QXzApIHwgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAxKFBBX1JBTVBfMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDIoUEFfUkFNUF8yKSB8IFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMyhQQV9SQU1QXzMpLAorICAgIC5wYV9yYW1wX3RibF8xX2luaXQgPSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDQoUEFfUkFNUF80KSB8IFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNShQQV9SQU1QXzUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA2KFBBX1JBTVBfNikgfCBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDcoUEFfUkFNUF83KSwKKworICAgIC5yZWN5Y2xlX2NvdW50X2luaXRfMjZtaHogPSBCMygwKSB8IEIyKDB4MUMgKyBBRERfRk9SXzI2TUhaKSB8IEIxKDB4MDYpIHwgQjAoMHg2NiArIEFERF9GT1JfMjZNSFopLAorICAgIC5yZWN5Y2xlX2NvdW50X2luaXRfMjZtaHogPSBCMygwKSB8IEIyKDB4MUMpIHwgQjEoMHgwNikgfCBCMCgweDY2KSwKKworICAgIC50c21fdGltaW5nXzAwX2luaXQgPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgwMCkgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHgwMCksIC8qIGJiX2xkb19oZl9lbiAqLworICAgIC50c21fdGltaW5nXzAxX2luaXQgPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgwMCkgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHgwMCksIC8qIGJiX2xkb19hZGNkYWNfZW4gKi8KKyAgICAudHNtX3RpbWluZ18wMl9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDApIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogYmJfbGRvX2JiYV9lbiAqLworICAgIC50c21fdGltaW5nXzAzX2luaXQgPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgwMCkgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHgwMCksIC8qIGJiX2xkb19wZF9lbiAqLworICAgIC50c21fdGltaW5nXzA0X2luaXQgPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgwMCkgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHgwMCksIC8qIGJiX2xkb19mZGJrX2VuICovCisgICAgLnRzbV90aW1pbmdfMDVfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDAwKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDAwKSwgLyogYmJfbGRvX3Zjb2xvX2VuICovCisgICAgLnRzbV90aW1pbmdfMDZfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDAwKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDAwKSwgLyogYmJfbGRvX3Z0cmVmX2VuICovCisgICAgLnRzbV90aW1pbmdfMDdfaW5pdCA9IEIzKDB4MDUpIHwgQjIoMHgwMCkgfCBCMSgweDA1KSB8IEIwKDB4MDApLCAvKiBiYl9sZG9fZmRia19ibGVlZF9lbiAqLworICAgIC50c21fdGltaW5nXzA4X2luaXQgPSBCMygweDAzKSB8IEIyKDB4MDApIHwgQjEoMHgwMykgfCBCMCgweDAwKSwgLyogYmJfbGRvX3Zjb2xvX2JsZWVkX2VuICovCisgICAgLnRzbV90aW1pbmdfMDlfaW5pdCA9IEIzKDB4MDMpIHwgQjIoMHgwMCkgfCBCMSgweDAzKSB8IEIwKDB4MDApLCAvKiBiYl9sZG9fdmNvbG9fZmFzdGNoYXJnZV9lbiAqLworCisgICAgLnRzbV90aW1pbmdfMTBfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDAzICsgQVVYX1BMTF9ERUxBWSkgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHgwMyksIC8qIGJiX3h0YWxfcGxsX3JlZl9jbGtfZW4gKi8KKyAgICAudHNtX3RpbWluZ18xMV9pbml0ID0gQjMoMHhGRikgfCBCMigweEZGKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDAzKSwgLyogYmJfeHRhbF9kYWNfcmVmX2Nsa19lbiAqLworICAgIC50c21fdGltaW5nXzEyX2luaXQgPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgwMyArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogcnh0eF9hdXhwbGxfdmNvX3JlZl9jbGtfZW4gKi8KKyAgICAudHNtX3RpbWluZ18xM19pbml0ID0gQjMoMHgxOCkgfCBCMigweDAwKSB8IEIxKDB4NEMpIHwgQjAoMHgwMCksIC8qIHN5X3Zjb19hdXRvdHVuZV9lbiAqLworICAgIC50c21fdGltaW5nXzE0X2luaXRfMjZtaHogPSBCMyhFTkRfT0ZfUlhfV0RfMjZNSFopIHwgQjIoMHgzMStBRERfRk9SXzI2TUhaKSB8IEIxKEVORF9PRl9UWF9XVSArIFBEX0NZQ0xFX1NMSVBfVFhfTE9fQURKKSB8IEIwKDB4NjMgKyBQRF9DWUNMRV9TTElQX1RYX0hJX0FESiksIC8qIHN5X3BkX2N5Y2xlX3NsaXBfbGRfZnRfZW4gKi8KKyAgICAudHNtX3RpbWluZ18xNF9pbml0XzMybWh6ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MzEgKyBBVVhfUExMX0RFTEFZKSB8IEIxKEVORF9PRl9UWF9XVSArIFBEX0NZQ0xFX1NMSVBfVFhfTE9fQURKKSB8IEIwKDB4NjMgKyBQRF9DWUNMRV9TTElQX1RYX0hJX0FESiksCisgICAgLnRzbV90aW1pbmdfMTVfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDAzICsgQVVYX1BMTF9ERUxBWSkgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHgwMyksIC8qIHN5X3Zjb19lbiAqLworICAgIC50c21fdGltaW5nXzE2X2luaXRfMjZtaHogPSBCMyhFTkRfT0ZfUlhfV0RfMjZNSFopIHwgQjIoMHgxQyArIEFERF9GT1JfMjZNSFopIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogc3lfbG9fcnhfYnVmX2VuICovCisgICAgLnRzbV90aW1pbmdfMTZfaW5pdF8zMm1oeiA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDFDICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorICAgIC50c21fdGltaW5nXzE3X2luaXQgPSBCMygweEZGKSB8IEIyKDB4RkYpIHwgQjEoRU5EX09GX1RYX1dEKSB8IEIwKDB4NTUpLCAvKiBzeV9sb190eF9idWZfZW4gKi8KKyAgICAudHNtX3RpbWluZ18xOF9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDUgKyBBVVhfUExMX0RFTEFZKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDA1KSwgLyogc3lfZGl2bl9lbiAqLworICAgIC50c21fdGltaW5nXzE5X2luaXQgPSBCMygweDE4K0FVWF9QTExfREVMQVkpIHwgQjIoMHgwMyArIEFVWF9QTExfREVMQVkpIHwgQjEoMHg0QykgfCBCMCgweDAzKSwgLyogc3lfcGRfZmlsdGVyX2NoYXJnZV9lbiAqLworCisgICAgLnRzbV90aW1pbmdfMjBfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDAzICsgQVVYX1BMTF9ERUxBWSkgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHgwMyksIC8qIHN5X3BkX2VuICovCisgICAgLnRzbV90aW1pbmdfMjFfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDA0ICsgQVVYX1BMTF9ERUxBWSkgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHgwNCksIC8qIHN5X2xvX2Rpdm5fZW4gKi8KKyAgICAudHNtX3RpbWluZ18yMl9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDQgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgICAgICAgICAgIEIwKDB4RkYpLCAvKiBzeV9sb19yeF9lbiAqLworICAgIC50c21fdGltaW5nXzIzX2luaXQgPSBCMygweEZGKSB8IEIyKDB4RkYpIHwgQjEoRU5EX09GX1RYX1dEKSB8IEIwKDB4MDQpLCAvKnN5X2xvX3R4X2VuICAqLworICAgIC50c21fdGltaW5nXzI0X2luaXQgPSBCMygweDE4KSB8IEIyKDB4MDApIHwgQjEoMHg0QykgfCBCMCgweDAwKSwgLyogc3lfZGl2bl9jYWxfZW4gKi8KKyAgICAudHNtX3RpbWluZ18yNV9pbml0XzI2bWh6ID0gQjMoRU5EX09GX1JYX1dEXzI2TUhaKSB8IEIyKDB4MUQgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeF9sbmFfbWl4ZXJfZW4gKi8KKyAgICAudHNtX3RpbWluZ18yNV9pbml0XzMybWh6ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MUQgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksCisgICAgLnRzbV90aW1pbmdfMjZfaW5pdCA9IEIzKDB4RkYpIHwgQjIoMHhGRikgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHg1OCksIC8qIHR4X3BhX2VuICovCisgICAgLnRzbV90aW1pbmdfMjdfaW5pdF8yNm1oeiA9IEIzKEVORF9PRl9SWF9XRF8yNk1IWikgfCBCMigweDIwICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogcnhfYWRjX2lfcV9lbiAqLworICAgIC50c21fdGltaW5nXzI3X2luaXRfMzJtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgyMCArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ18yOF9pbml0XzI2bWh6ID0gQjMoMHgyMSArIEFERF9GT1JfMjZNSFopIHwgQjIoMHgyMCArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4X2FkY19yZXNldF9lbiAqLworICAgIC50c21fdGltaW5nXzI4X2luaXRfMzJtaHogPSBCMygweDIxICsgQVVYX1BMTF9ERUxBWSkgfCBCMigweDIwICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorICAgIC50c21fdGltaW5nXzI5X2luaXRfMjZtaHogPSBCMyhFTkRfT0ZfUlhfV0RfMjZNSFopIHwgQjIoMHgxRSArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4X2JiYV9pX3FfZW4gKi8KKyAgICAudHNtX3RpbWluZ18yOV9pbml0XzMybWh6ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MUUgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksCisKKyAgICAudHNtX3RpbWluZ18zMF9pbml0XzI2bWh6ID0gQjMoRU5EX09GX1JYX1dEXzI2TUhaKSB8IEIyKDB4MjAgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeF9iYmFfcGRldF9lbiAqLworICAgIC50c21fdGltaW5nXzMwX2luaXRfMzJtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgyMCArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ18zMV9pbml0XzI2bWh6ID0gQjMoRU5EX09GX1JYX1dEXzI2TUhaKSB8IEIyKDB4MUYgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeF9iYmFfdHphX2Rjb2NfZW4gKi8KKyAgICAudHNtX3RpbWluZ18zMV9pbml0XzMybWh6ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MUYgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksCisgICAgLnRzbV90aW1pbmdfMzJfaW5pdF8yNm1oeiA9IEIzKEVORF9PRl9SWF9XRF8yNk1IWikgfCBCMigweDFEICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogcnhfdHphX2lfcV9lbiAqLworICAgIC50c21fdGltaW5nXzMyX2luaXRfMzJtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgxRCArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ18zM19pbml0XzI2bWh6ID0gQjMoRU5EX09GX1JYX1dEXzI2TUhaKSB8IEIyKDB4MjAgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeF90emFfcGRldF9lbiAqLworICAgIC50c21fdGltaW5nXzMzX2luaXRfMzJtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgyMCArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ18zNF9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDcgKyBBVVhfUExMX0RFTEFZKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDA3KSwgLyogcGxsX2RpZ19lbiAqLworICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMygweEZGKSB8IEIyKDB4RkYpIHwgQjEoRU5EX09GX1RYX1dEKSwgLyogdHhfZGlnX2VuIC0gQnl0ZSAwIGNvbWVzIGZyb20gbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworICAgIC50c21fdGltaW5nXzM2X2luaXRfMjZtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHg2NiArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4X2RpZ19lbiAqLworICAgIC50c21fdGltaW5nXzM2X2luaXRfMzJtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHg2NiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ18zN19pbml0XzI2bWh6ID0gQjMoMHg2NyArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIyKDB4NjYgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeF9pbml0ICovCisgICAgLnRzbV90aW1pbmdfMzdfaW5pdF8zMm1oeiA9IEIzKDB4NjcgKyBBVVhfUExMX0RFTEFZKSB8IEIyKDB4NjYgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksCisgICAgLnRzbV90aW1pbmdfMzhfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDBFICsgQVVYX1BMTF9ERUxBWSkgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHg0MiksIC8qIHNpZ21hX2RlbHRhX2VuICovCisgICAgLnRzbV90aW1pbmdfMzlfaW5pdF8yNm1oeiA9IEIzKEVORF9PRl9SWF9XRF8yNk1IWikgfCBCMigweDY2ICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogcnhfcGh5X2VuICovCisgICAgLnRzbV90aW1pbmdfMzlfaW5pdF8zMm1oeiA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDY2ICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorCisgICAgLnRzbV90aW1pbmdfNDBfaW5pdF8yNm1oeiA9IEIzKEVORF9PRl9SWF9XRF8yNk1IWikgfCBCMigweDI2ICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogZGNvY19lbiAqLworICAgIC50c21fdGltaW5nXzQwX2luaXRfMzJtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgyNiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ180MV9pbml0XzI2bWh6ID0gQjMoMHgyNyArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIyKDB4MjYgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiBkY29jX2luaXQgKi8KKyAgICAudHNtX3RpbWluZ180MV9pbml0XzMybWh6ID0gQjMoMHgyNyArIEFVWF9QTExfREVMQVkpIHwgQjIoMHgyNiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ181MV9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDMgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4dHhfYXV4cGxsX2JpYXNfZW4gKi8KKyAgICAudHNtX3RpbWluZ181Ml9pbml0XzI2bWh6ID0gQjMoMHgxNyArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIyKDB4MDYgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeHR4X2F1eHBsbF9mY2FsX2VuICovCisgICAgLnRzbV90aW1pbmdfNTJfaW5pdF8zMm1oeiA9IEIzKDB4MTcgKyBBVVhfUExMX0RFTEFZKSB8IEIyKDB4MDYgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksCisgICAgLnRzbV90aW1pbmdfNTNfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDAzICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeHR4X2F1eHBsbF9sZl9wZF9lbiAqLworICAgIC50c21fdGltaW5nXzU0X2luaXRfMjZtaHogPSBCMygweDE3ICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjIoMHgwMyArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4dHhfYXV4cGxsX3BkX2xmX2ZpbHRlcl9jaGFyZ2VfZW4gKi8KKyAgICAudHNtX3RpbWluZ181NF9pbml0XzMybWh6ID0gQjMoMHgxNyArIEFVWF9QTExfREVMQVkpIHwgQjIoMHgwMyArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ181NV9pbml0XzI2bWh6ID0gQjMoRU5EX09GX1JYX1dEXzI2TUhaKSB8IEIyKDB4MjAgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeHR4X2F1eHBsbF9hZGNfYnVmX2VuICovCisgICAgLnRzbV90aW1pbmdfNTVfaW5pdF8zMm1oeiA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDIwICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorICAgIC50c21fdGltaW5nXzU2X2luaXRfMjZtaHogPSBCMyhFTkRfT0ZfUlhfV0RfMjZNSFopIHwgQjIoMHgyMCArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4dHhfYXV4cGxsX2RpZ19idWZfZW4gKi8KKyAgICAudHNtX3RpbWluZ181Nl9pbml0XzMybWh6ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MjAgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksCisgICAgLnRzbV90aW1pbmdfNTdfaW5pdCA9IEIzKDB4MUEgKyBBVVhfUExMX0RFTEFZKSB8IEIyKDB4MDMgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qcnh0eF9yY2NhbF9lbiAgKi8KKyAgICAudHNtX3RpbWluZ181OF9pbml0ID0gQjMoMHhGRikgfCBCMigweEZGKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDAzKSwgLyogdHhfaHBtX2RhY19lbiAqLworCisvKiBYQ1ZSX1RYX0RJRyBjb25maWdzICovCisjZGVmaW5lIHJhZGlvX2RmdF9tb2RlIDAKKyNkZWZpbmUgbGZzcl9sZW5ndGggNAorI2RlZmluZSBsZnNyX2VuIDAKKyNkZWZpbmUgZGZ0X2Nsa19zZWwgNAorI2RlZmluZSB0eF9kZnRfZW4gMAorI2RlZmluZSBzb2NfdGVzdF9zZWwgMAorI2RlZmluZSB0eF9jYXB0dXJlX3BvbCAwCisjZGVmaW5lIGZyZXFfd29yZF9hZGogMAorI2RlZmluZSBscm0gMAorI2RlZmluZSBkYXRhX3BhZGRpbmdfcGF0XzEgMHg1NQorI2RlZmluZSBkYXRhX3BhZGRpbmdfcGF0XzAgMHhBQQorI2RlZmluZSBnZnNrX211bHRpcGx5X3RhYmxlX21hbnVhbCAwCisjZGVmaW5lIGdmc2tfbWkgMQorI2RlZmluZSBnZnNrX21sZCAwCisjZGVmaW5lIGdmc2tfZmxkIDAKKyNkZWZpbmUgZ2Zza19tb2RfaW5kZXhfc2NhbGluZyAwCisjZGVmaW5lIHR4X2ltYWdlX2ZpbHRlcl9vdnJkX2VuIDAKKyNkZWZpbmUgdHhfaW1hZ2VfZmlsdGVyXzBfb3ZyZCAwCisjZGVmaW5lIHR4X2ltYWdlX2ZpbHRlcl8xX292cmQgMAorI2RlZmluZSB0eF9pbWFnZV9maWx0ZXJfMl9vdnJkIDAKKyNkZWZpbmUgZ2Zza19maWx0ZXJfY29lZmZfbWFudWFsMiAweEMwNjMwNDAxCisjZGVmaW5lIGdmc2tfZmlsdGVyX2NvZWZmX21hbnVhbDEgMHhCQjI5OTYwRAorI2RlZmluZSBmc2tfbW9kdWxhdGlvbl9zY2FsZV8wIDB4MTgwMAorI2RlZmluZSBmc2tfbW9kdWxhdGlvbl9zY2FsZV8xIDB4MDgwMAorI2RlZmluZSBkZnRfbW9kX3BhdHRlcm52YWwgMAorI2RlZmluZSBjdHVuZV9iaXN0X2dvIDAKKyNkZWZpbmUgY3R1bmVfYmlzdF90aHJzaGxkIDAKKyNkZWZpbmUgcGFfYW1fbW9kX2ZyZXEgMAorI2RlZmluZSBwYV9hbV9tb2RfZW50cmllcyAwCisjZGVmaW5lIHBhX2FtX21vZF9lbiAwCisjZGVmaW5lIHN5bl9iaXN0X2dvIDAKKyNkZWZpbmUgc3luX2Jpc3RfYWxsX2NoYW5uZWxzIDAKKyNkZWZpbmUgZnJlcV9jb3VudF90aHJlc2hvbGQgMAorI2RlZmluZSBocG1faW5sX2Jpc3RfZ28gMAorI2RlZmluZSBocG1fZG5sX2Jpc3RfZ28gMAorI2RlZmluZSBkZnRfbWF4X3JhbV9zaXplIDAKKworICAgIC50eF9jdHJsID0gWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERShyYWRpb19kZnRfbW9kZSkgfAorICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0xFTkdUSChsZnNyX2xlbmd0aCkgfAorICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0VOKGxmc3JfZW4pIHwKKyAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfREZUX0NMS19TRUwoZGZ0X2Nsa19zZWwpIHwKKyAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfVFhfREZUX0VOKHR4X2RmdF9lbikgfAorICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9TT0NfVEVTVF9TRUwoc29jX3Rlc3Rfc2VsKSB8CisgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX1RYX0NBUFRVUkVfUE9MKHR4X2NhcHR1cmVfcG9sKSB8CisgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0ZSRVFfV09SRF9BREooZnJlcV93b3JkX2FkaiksCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC50eF9kYXRhX3BhZGRpbmcgPSBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfTFJNKGxybSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREFUQV9QQURESU5HX1BBVF8xKGRhdGFfcGFkZGluZ19wYXRfMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREFUQV9QQURESU5HX1BBVF8wKGRhdGFfcGFkZGluZ19wYXRfMCksCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC50eF9kZnRfcGF0dGVybiA9IFhDVlJfVFhfRElHX0RGVF9QQVRURVJOX0RGVF9NT0RfUEFUVEVSTihkZnRfbW9kX3BhdHRlcm52YWwpLAorI2lmICFSQURJT19JU19HRU5fMlAxCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC5yZl9kZnRfYmlzdF8xID0gWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX0dPKGN0dW5lX2Jpc3RfZ28pIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9USFJTSExEKGN0dW5lX2Jpc3RfdGhyc2hsZCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9QQV9BTV9NT0RfRlJFUShwYV9hbV9tb2RfZnJlcSkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9QQV9BTV9NT0RfRU5UUklFUyhwYV9hbV9tb2RfZW50cmllcykgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9QQV9BTV9NT0RfRU4ocGFfYW1fbW9kX2VuKSwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLnJmX2RmdF9iaXN0XzIgPSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX0dPKHN5bl9iaXN0X2dvKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX0FMTF9DSEFOTkVMUyhzeW5fYmlzdF9hbGxfY2hhbm5lbHMpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfRlJFUV9DT1VOVF9USFJFU0hPTEQoZnJlcV9jb3VudF90aHJlc2hvbGQpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0lOTF9CSVNUX0dPKGhwbV9pbmxfYmlzdF9nbykgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfR08oaHBtX2RubF9iaXN0X2dvKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0RGVF9NQVhfUkFNX1NJWkUoZGZ0X21heF9yYW1fc2l6ZSksCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KK307CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHAzX2hfMHA1X2NvbmZpZy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDNfaF8wcDVfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJiNWUzNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHAzX2hfMHA1X2NvbmZpZy5jCkBAIC0wLDAgKzEsMzUzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTU9ERSBvbmx5IGNvbmZpZ3VyYXRpb24gKi8KK2NvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBnZnNrX2J0XzBwM19oXzBwNV9tb2RlX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBHRlNLX0JUXzBwM19oXzBwNSwKKyAgICAuc2NnYzVfY2xvY2tfZW5hX2JpdHMgPSBTSU1fU0NHQzVfUEhZRElHX01BU0sgfCBTSU1fU0NHQzVfR0VOX0ZTS19NQVNLLAorCisgICAgLyogWENWUl9NSVNDIGNvbmZpZ3MgKi8KKyAgICAueGN2cl9jdHJsLm1hc2sgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkNfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUxfTUFTSywKKyAgICAueGN2cl9jdHJsLmluaXQgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTCgxKSwKKworICAgIC8qIFhDVlJfUEhZIGNvbmZpZ3MgKi8KKyAgICAucGh5X3ByZV9yZWYwX2luaXQgPSAweDdCQ0RFQjM5LAorICAgIC5waHlfcHJlX3JlZjFfaW5pdCA9IDB4Q0VGN0RFRjcsCisgICAgLnBoeV9wcmVfcmVmMl9pbml0ID0gMHgwMDAwQ0VCNywKKworICAgIC5waHlfY2ZnMV9pbml0ID0gWENWUl9QSFlfQ0ZHMV9BQV9QTEFZQkFDSygxKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0FBX09VVFBVVF9TRUwoMSkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goMHhkYSkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVQoMiksCisKKyAgICAucGh5X2VsX2NmZ19pbml0ID0gWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRSgxKQorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICB8IFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEUoMCkKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICwKKworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICAucnhfZGlnX2N0cmxfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFKDApLAorCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSksIC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKworICAgIC5hZ2NfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX1JTU0lfVEhSRVNIKDB4RkYpLAorCisgICAgLyogWENWUl9UU00gY29uZmlncyAqLworI2lmIChEQVRBX1BBRERJTkdfRU4pCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQrVFhfRElHX0VOX1RYX0hJX0FESiksCisjZWxzZQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUKSwKKyNlbmRpZiAvKiAoREFUQV9QQURESU5HX0VOKSAqLworCisgICAgLyogWENWUl9UWF9ESUcgY29uZmlncyAqLworICAgIC50eF9nZnNrX2N0cmwgPSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NVUxUSVBMWV9UQUJMRV9NQU5VQUwoMHg0MDAwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01JKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfRkxEKDEpIHwgLyogVXNlIEdGU0sgTWFudWFsIEZpbHRlciBDb2VmZnMgKi8KKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTU9EX0lOREVYX1NDQUxJTkcoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSX09WUkRfRU4oMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMV9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8yX09WUkQoMCksCisgICAgLnR4X2dmc2tfY29lZmYxXzI2bWh6ID0gKDEwN1UpIDw8IDAgfCAvKiBjb2VmZiAyLzEzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE2NFUpIDw8IDcgfCAvKiBjb2VmZiA2LzkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTI1VSkgPDwgMTYgfCAvKiBjb2VmIDMvMTIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTY5VSkgPDwgMjMsIC8qIGNvZWZmIDcvOCAqLworICAgIC50eF9nZnNrX2NvZWZmMl8yNm1oeiA9ICg3MlUpIDw8IDAgfCAvKiBjb2VmZiAwLzE1ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDkwVSkgPDwgOCB8IC8qIGNvZWZmIDEvMTQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQxVSkgPDwgMTYgfCAvKiBjb2VmZiA0LzExICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE1NVUpIDw8IDI0LCAvKiBjb2VmZiA1LzEwICovCisgICAgLnR4X2dmc2tfY29lZmYxXzMybWh6ID0gKDcwVSkgPDwgMCB8IC8qIGNvZWZmIDIvMTMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMjE2VSkgPDwgNyB8IC8qIGNvZWZmIDYvOSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMDVVKSA8PCAxNiB8IC8qIGNvZWYgMy8xMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyMzNVKSA8PCAyMywgLyogY29lZmYgNy84ICovCisgICAgLnR4X2dmc2tfY29lZmYyXzMybWh6ID0gKDI1VSkgPDwgMCB8IC8qIGNvZWZmIDAvMTUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNDRVKSA8PCA4IHwgLyogY29lZmYgMS8xNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNDVVKSA8PCAxNiB8IC8qIGNvZWZmIDQvMTEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTg0VSkgPDwgMjQsIC8qIGNvZWZmIDUvMTAgKi8KK307CisKKy8qIE1PREUgJiBEQVRBIFJBVEUgY29tYmluZWQgY29uZmlndXJhdGlvbiAqLworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDNfaF8wcDVfMW1icHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHAzX2hfMHA1LAorICAgIC5kYXRhX3JhdGUgPSBEUl8xTUJQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg0KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg0KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDQpLCAvKlRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweEEpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGRiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkZELAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRjksCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGNCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkYyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDExLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMjgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0MSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA1NSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA2MSwKKworICAgIC8qIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkZGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRkEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGNCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkYwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZGOSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDBCLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMjUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0MywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA1QywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA2QSwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMCkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMCkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHAzX2hfMHA1XzUwMGticHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHAzX2hfMHA1LAorICAgIC5kYXRhX3JhdGUgPSBEUl81MDBLQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweDgpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGNywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkYzLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZGOSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDBBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMjMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0MCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA1OSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA2OCwKKworICAgIC8qIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGQSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkYzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRUYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZGMywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMUQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAzRiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA1RiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA3MiwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygxKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMSkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHAzX2hfMHA1XzI1MGticHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHAzX2hfMHA1LAorICAgIC5kYXRhX3JhdGUgPSBEUl8yNTBLQlBTLAorICAgIAorICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg1KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg1KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDUpLCAvKiBUWkFfQldfU0VMICovIAorICAgICAgICAgICAgIAorICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4NikgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDIyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkZGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFRSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRjcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAxNCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDNDLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY0LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDdELAorCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwNSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkU4LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRUYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAwQiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDM4LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY4LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDg2LAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDEpICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygxKSwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwNV9oXzBwMzJfY29uZmlnLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwNV9oXzBwMzJfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUzNjZjZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA1X2hfMHAzMl9jb25maWcuYwpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfeGN2ci5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1PREUgb25seSBjb25maWd1cmF0aW9uICovCitjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgZ2Zza19idF8wcDVfaF8wcDMyX21vZGVfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA1X2hfMHAzMiwKKyAgICAuc2NnYzVfY2xvY2tfZW5hX2JpdHMgPSBTSU1fU0NHQzVfUEhZRElHX01BU0sgfCBTSU1fU0NHQzVfR0VOX0ZTS19NQVNLLAorCisgICAgLyogWENWUl9NSVNDIGNvbmZpZ3MgKi8KKyAgICAueGN2cl9jdHJsLm1hc2sgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkNfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUxfTUFTSywKKyAgICAueGN2cl9jdHJsLmluaXQgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTCgxKSwKKyAgICAgICAgICAgICAgICAgICAgIAorICAgIC8qIFhDVlJfUEhZIGNvbmZpZ3MgKi8KKyAgICAucGh5X3ByZV9yZWYwX2luaXQgPSAweEJCREU3MzlCLAorICAgIC5waHlfcHJlX3JlZjFfaW5pdCA9IDB4REVGQkRFRjcsCisgICAgLnBoeV9wcmVfcmVmMl9pbml0ID0gMHgwMDAwRTczOSwKKworICAgIC5waHlfY2ZnMV9pbml0ID0gWENWUl9QSFlfQ0ZHMV9BQV9QTEFZQkFDSygxKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0FBX09VVFBVVF9TRUwoMSkgfCAKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfRlNLX0JJVF9JTlZFUlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9CU01fRU5fQkxFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfREVNT0RfQ0xLX01PREUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9DVFNfVEhSRVNIKDB4RjApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfRlNLX0ZUU19USU1FT1VUKDIpLAorCisgICAgLnBoeV9lbF9jZmdfaW5pdCA9IFhDVlJfUEhZX0VMX0NGR19FTF9FTkFCTEUoMSkKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgfCBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfRU5BQkxFKDApCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAsCisKKyAgICAvKiBYQ1ZSX1JYX0RJRyBjb25maWdzICovCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfUkFURSgwKSwKKworICAgIC5yeF9kaWdfY3RybF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTCgwKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOKDEpLCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisKKyAgICAuYWdjX2N0cmxfMF9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSCgweEZGKSwKKworICAgIC8qIFhDVlJfVFNNIGNvbmZpZ3MgKi8KKyNpZiAoREFUQV9QQURESU5HX0VOKQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUK1RYX0RJR19FTl9UWF9ISV9BREopLAorI2Vsc2UKKyAgICAudHNtX3RpbWluZ18zNV9pbml0ID0gQjAoVFhfRElHX0VOX0FTU0VSVCksCisjZW5kaWYgLyogKERBVEFfUEFERElOR19FTikgKi8KKworICAgIC8qIFhDVlJfVFhfRElHIGNvbmZpZ3MgKi8KKyAgICAudHhfZ2Zza19jdHJsID0gWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTVVMVElQTFlfVEFCTEVfTUFOVUFMKDB4NDAwMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NSSgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01MRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX0ZMRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01PRF9JTkRFWF9TQ0FMSU5HKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl9PVlJEX0VOKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8wX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzFfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMl9PVlJEKDApLAorICAgIC50eF9nZnNrX2NvZWZmMV8yNm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYyXzI2bWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjFfMzJtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMl8zMm1oeiA9IDAsCit9OworCisvKiBNT0RFICYgREFUQSBSQVRFIGNvbWJpbmVkIGNvbmZpZ3VyYXRpb24gKi8KK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMHAzMl8xbWJwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8wcDMyLAorICAgIC5kYXRhX3JhdGUgPSBEUl8xTUJQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg1KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg1KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDUpLCAvKiBUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHg0KSAsCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDEyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweEZGRkIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4RkZGNSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkYwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRUMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZFQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkYzLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweDAwMDEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDAxNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDJGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDksCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNUQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwNjksCisgICAgCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkY5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRjQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZFRCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkU3LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRTcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFRSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkZELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMTUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAzMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDRFLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY2LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDczLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygwKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygwKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDMyXzUwMGticHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA1X2hfMHAzMiwKKyAgICAuZGF0YV9yYXRlID0gRFJfNTAwS0JQUywKKyAgICAKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoNSkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoNSksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCg1KSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4NCkgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGQSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkYzLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRUUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFRiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkY4LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMEEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAyNSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQzLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDVELAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDZCLAorCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGRSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkY2LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRUQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFOSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkVGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMDEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAyMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQ0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDc3LAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDEpIHwKKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMSkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygxKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDMyXzI1MGticHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA1X2hfMHAzMiwKKyAgICAuZGF0YV9yYXRlID0gRFJfMjUwS0JQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg1KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg1KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDUpLCAvKiBUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHg0KSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMjIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSgyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4RkZGRCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkY4LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRjEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZFQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkVELAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRjcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDAwQiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDI3LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwNzAsCisKKyAgICAvKiAzMk1IeiBDaGFubmVsIEZpbHRlciAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDA1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZGQywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkYwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRTgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZFRiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDBCLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwMzgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwODYsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMSkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDEpICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwNV9oXzBwNV9jb25maWcuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA1X2hfMHA1X2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1N2QwNjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwNV9oXzBwNV9jb25maWcuYwpAQCAtMCwwICsxLDM1NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfeGN2ci5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1PREUgb25seSBjb25maWd1cmF0aW9uICovCitjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgZ2Zza19idF8wcDVfaF8wcDVfbW9kZV9jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8wcDUsCisgICAgLnNjZ2M1X2Nsb2NrX2VuYV9iaXRzID0gU0lNX1NDR0M1X1BIWURJR19NQVNLIHwgU0lNX1NDR0M1X0dFTl9GU0tfTUFTSywKKworICAgIC8qIFhDVlJfTUlTQyBjb25maWdzICovCisgICAgLnhjdnJfY3RybC5tYXNrID0gWENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTF9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMX01BU0ssCisgICAgLnhjdnJfY3RybC5pbml0ID0gWENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTCg4KSB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQyg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUwoMSksCisKKyAgICAucGh5X3ByZV9yZWYwX2luaXQgPSBSVzBQUygwLCAweDE5KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoMSwgMHgxOVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUygyLCAweDFBVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDMsIDB4MUJVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoNCwgMHgxQ1UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUyg1LCAweDFDVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDYsIDB4MURVICYgMHgzVSksIC8qIFBoYXNlIGluZm8gIzYgb3ZlcmxhcHMgdHdvIGluaXRpYWxpemF0aW9uIHdvcmRzICovCisgICAgLnBoeV9wcmVfcmVmMV9pbml0ID0gKDB4MUQpID4+IDIgfCAvKiBQaGFzZSBpbmZvICM2IG92ZXJsYXBzIHR3byBpbml0aWFsaXphdGlvbiB3b3JkcyAtIG1hbnVhbGx5IGNvbXB1dGUgdGhlIHNoaWZ0Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUyg3LCAweDFFVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDgsIDB4MUVVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcxUFMoOSwgMHgxRVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUygxMCwgMHgxRFUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUygxMSwgMHgxQ1UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUygxMiwgMHgxQ1UgJiAweEZVKSwgLyogUGhhc2UgaW5mbyAjMTIgb3ZlcmxhcHMgdHdvIGluaXRpYWxpemF0aW9uIHdvcmRzICovCisgICAgLnBoeV9wcmVfcmVmMl9pbml0ID0gKDB4MUMpID4+IDQgfCAvKiBQaGFzZSBpbmZvICMxMiBvdmVybGFwcyB0d28gaW5pdGlhbGl6YXRpb24gd29yZHMgLSBtYW51YWxseSBjb21wdXRlIHRoZSBzaGlmdCovCisgICAgICAgICAgICAgICAgICAgICAgICAgUlcyUFMoMTMsIDB4MUJVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcyUFMoMTQsIDB4MUFVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcyUFMoMTUsIDB4MTlVKSwKKworICAgIC5waHlfY2ZnMV9pbml0ID0gWENWUl9QSFlfQ0ZHMV9BQV9QTEFZQkFDSygxKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0FBX09VVFBVVF9TRUwoMSkgfCAKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfRlNLX0JJVF9JTlZFUlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9CU01fRU5fQkxFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfREVNT0RfQ0xLX01PREUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9DVFNfVEhSRVNIKDIwNSkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVQoMiksCisKKyAgICAucGh5X2VsX2NmZ19pbml0ID0gWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRSgxKQorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICB8IFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEUoMCkKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICwKKyAgICAvKiBYQ1ZSX1JYX0RJRyBjb25maWdzICovCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfUkFURSgwKSwKKworICAgIC5yeF9kaWdfY3RybF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTCgwKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOKDEpLCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisKKyAgICAuYWdjX2N0cmxfMF9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSCgweEZGKSwKKworICAgIC8qIFhDVlJfVFNNIGNvbmZpZ3MgKi8KKyNpZiAoREFUQV9QQURESU5HX0VOKQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUK1RYX0RJR19FTl9UWF9ISV9BREopLAorI2Vsc2UKKyAgICAudHNtX3RpbWluZ18zNV9pbml0ID0gQjAoVFhfRElHX0VOX0FTU0VSVCksCisjZW5kaWYgLyogKERBVEFfUEFERElOR19FTikgKi8KKworICAgIC8qIFhDVlJfVFhfRElHIGNvbmZpZ3MgKi8KKyAgICAudHhfZ2Zza19jdHJsID0gWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTVVMVElQTFlfVEFCTEVfTUFOVUFMKDB4NDAwMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NSSgxKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01MRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX0ZMRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01PRF9JTkRFWF9TQ0FMSU5HKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl9PVlJEX0VOKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8wX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzFfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMl9PVlJEKDApLAorICAgIC50eF9nZnNrX2NvZWZmMV8yNm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYyXzI2bWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjFfMzJtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMl8zMm1oeiA9IDAsCit9OworCisvKiBNT0RFICYgREFUQSBSQVRFIGNvbWJpbmVkIGNvbmZpZ3VyYXRpb24gKi8KKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDVfMW1icHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA1X2hfMHA1LAorICAgIC5kYXRhX3JhdGUgPSBEUl8xTUJQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg0KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg0KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDQpLCAvKlRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweEEpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQkxFIDI2TUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGQSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkY2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRjEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZFRSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkVGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4MDAwNCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDE3LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0NiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA1OSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA2MywKKworICAgIC8qIEJMRSAzMk1IeiBDaGFubmVsIEZpbHRlciAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweEZGRkEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4RkZGNSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkVGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRUIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZFQiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkYyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweDAwMDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDAxNSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDMwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNEEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNUYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwNkIsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDApICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDApICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwNV81MDBrYnBzX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBHRlNLX0JUXzBwNV9oXzBwNSwKKyAgICAuZGF0YV9yYXRlID0gRFJfNTAwS0JQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg1KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg1KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDUpLCAvKiBUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHg4KSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkZFLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRjUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZFQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkU4LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRUUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDIwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwNzksCisgICAgCisgICAgLyogMzJNSHogKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDA1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRUYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFNiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkU3LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRjgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAxOSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDgwLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDEpICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygxKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDVfMjUwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8wcDUsCisgICAgLmRhdGFfcmF0ZSA9IERSXzI1MEtCUFMsCisgICAgCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweDYpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgyMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkZELAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRjgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRUQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZGNywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDBCLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMjcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0NiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2MCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA3MCwKKworICAgIC8qIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkZELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRjgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRUQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZGNiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDBBLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMjcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0NiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2MSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA3MSwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygxKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMSkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA1X2hfMHA3X2NvbmZpZy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDVfaF8wcDdfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2ODBiNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA1X2hfMHA3X2NvbmZpZy5jCkBAIC0wLDAgKzEsMzQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTU9ERSBvbmx5IGNvbmZpZ3VyYXRpb24gKi8KK2NvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBnZnNrX2J0XzBwNV9oXzBwN19tb2RlX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBHRlNLX0JUXzBwNV9oXzBwNywKKyAgICAuc2NnYzVfY2xvY2tfZW5hX2JpdHMgPSBTSU1fU0NHQzVfUEhZRElHX01BU0sgfCBTSU1fU0NHQzVfR0VOX0ZTS19NQVNLLAorCisgICAgLyogWENWUl9NSVNDIGNvbmZpZ3MgKi8KKyAgICAueGN2cl9jdHJsLm1hc2sgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkNfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUxfTUFTSywKKyAgICAueGN2cl9jdHJsLmluaXQgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTCgxKSwKKworICAgIC8qIFhDVlJfUEhZIGNvbmZpZ3MgKi8KKyAgICAucGh5X3ByZV9yZWYwX2luaXQgPSAweDM3QUNFMkY3LAorICAgIC5waHlfcHJlX3JlZjFfaW5pdCA9IDB4QURGM0JERUYsCisgICAgLnBoeV9wcmVfcmVmMl9pbml0ID0gMHgwMDAwQkUzMywKKworICAgIC5waHlfY2ZnMV9pbml0ID0gWENWUl9QSFlfQ0ZHMV9BQV9QTEFZQkFDSygxKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0FBX09VVFBVVF9TRUwoMSkgfCAKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfRlNLX0JJVF9JTlZFUlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9CU01fRU5fQkxFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfREVNT0RfQ0xLX01PREUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9DVFNfVEhSRVNIKDB4Q0QpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfRlNLX0ZUU19USU1FT1VUKDIpLAorCisgICAgLnBoeV9lbF9jZmdfaW5pdCA9IFhDVlJfUEhZX0VMX0NGR19FTF9FTkFCTEUoMSkKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgfCBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfRU5BQkxFKDApCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAsCisKKyAgICAvKiBYQ1ZSX1JYX0RJRyBjb25maWdzICovCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfUkFURSgwKSwKKworICAgIC5yeF9kaWdfY3RybF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTCgwKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOKDEpLCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisKKyAgICAuYWdjX2N0cmxfMF9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSCgweEZGKSwKKworICAgIC8qIFhDVlJfVFNNIGNvbmZpZ3MgKi8KKyNpZiAoREFUQV9QQURESU5HX0VOKQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUICsgVFhfRElHX0VOX1RYX0hJX0FESiksCisjZWxzZQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUKSwKKyNlbmRpZiAvKiAoREFUQV9QQURESU5HX0VOKSAqLworICAgIAorICAgIC8qIFhDVlJfVFhfRElHIGNvbmZpZ3MgKi8KKyAgICAudHhfZ2Zza19jdHJsID0gWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTVVMVElQTFlfVEFCTEVfTUFOVUFMKDB4NDAwMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NSSgyKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01MRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX0ZMRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01PRF9JTkRFWF9TQ0FMSU5HKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl9PVlJEX0VOKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8wX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzFfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMl9PVlJEKDApLAorICAgIC50eF9nZnNrX2NvZWZmMV8yNm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYyXzI2bWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjFfMzJtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMl8zMm1oeiA9IDAsCit9OworCisvKiBNT0RFICYgREFUQSBSQVRFIGNvbWJpbmVkIGNvbmZpZ3VyYXRpb24gKi8KK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMHA3XzFtYnBzX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBHRlNLX0JUXzBwNV9oXzBwNywKKyAgICAuZGF0YV9yYXRlID0gRFJfMU1CUFMsCisKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDEpLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoMykgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoMyksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCgzKSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4QSkgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDEyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkY5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFQSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAxQiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDdDLAorCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkZDLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFOSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkU5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRjcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAxNiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDgyLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygwKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygwKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDdfNTAwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8wcDcsCisgICAgLmRhdGFfcmF0ZSA9IERSXzUwMEtCUFMsCisgICAgCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweDgpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkY2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRTgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFMiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMEMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAzRCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2RiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA4RiwKKworICAgIC8qIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAwNiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkZDLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRUMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZERiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkUzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAzOCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA3MiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA5OCwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygxKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMSkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMHA3XzI1MGticHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA1X2hfMHA3LAorICAgIC5kYXRhX3JhdGUgPSBEUl8yNTBLQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweDYpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgyMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAwNSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkZFLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkVBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMDUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAzNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2QiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA4RCwKKworICAgIC8qIDMyTUh6IENoYW5uZWwgRmlsdGVyICovICAKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkZGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwNCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDA4LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGOCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkU2LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRTIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4RkZGQSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDJFLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDZELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDk4LAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDEpICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygxKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDVfaF8xcDBfY29uZmlnLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwNV9oXzFwMF9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWM2ZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDVfaF8xcDBfY29uZmlnLmMKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNT0RFIG9ubHkgY29uZmlndXJhdGlvbiAqLworY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IGdmc2tfYnRfMHA1X2hfMXAwX21vZGVfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA1X2hfMXAwLAorICAgIC5zY2djNV9jbG9ja19lbmFfYml0cyA9IFNJTV9TQ0dDNV9QSFlESUdfTUFTSyB8IFNJTV9TQ0dDNV9HRU5fRlNLX01BU0ssCisKKyAgICAvKiBYQ1ZSX01JU0MgY29uZmlncyAqLworICAgIC54Y3ZyX2N0cmwubWFzayA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9NQVNLLAorICAgIC54Y3ZyX2N0cmwuaW5pdCA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0woOCkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkMoNykgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMKDEpLAorCisgICAgLyogWENWUl9QSFkgY29uZmlncyAqLyAgIAorICAgIC5waHlfcHJlX3JlZjBfaW5pdCA9IDB4RjM4QjUyNzMsCisgICAgLnBoeV9wcmVfcmVmMV9pbml0ID0gMHg4Q0VGOUNFNiwKKyAgICAucGh5X3ByZV9yZWYyX2luaXQgPSAweDAwMDA5RDJELAorCisgICAgLnBoeV9jZmcxX2luaXQgPSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTCgxKSB8IAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goMHhiMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVQoMiksCisKKyAgICAucGh5X2VsX2NmZ19pbml0ID0gWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRSgxKQorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICB8IFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEUoMCkKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICwKKyAgICAvKiBYQ1ZSX1JYX0RJRyBjb25maWdzICovCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfUkFURSgwKSwKKworICAgIC5yeF9kaWdfY3RybF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTCgwKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOKDEpLCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisKKyAgICAuYWdjX2N0cmxfMF9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSCgweEZGKSwKKworICAgIC8qIFhDVlJfVFNNIGNvbmZpZ3MgKi8KKyNpZiAoREFUQV9QQURESU5HX0VOKQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUICsgVFhfRElHX0VOX1RYX0hJX0FESiksCisjZWxzZQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUKSwKKyNlbmRpZiAvKiAoREFUQV9QQURESU5HX0VOKSAqLworCisgICAgLyogWENWUl9UWF9ESUcgY29uZmlncyAqLworICAgIC50eF9nZnNrX2N0cmwgPSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NVUxUSVBMWV9UQUJMRV9NQU5VQUwoMHg0MDAwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01JKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfRkxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTU9EX0lOREVYX1NDQUxJTkcoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSX09WUkRfRU4oMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMV9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8yX09WUkQoMCksCisgICAgLnR4X2dmc2tfY29lZmYxXzI2bWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjJfMjZtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMV8zMm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYyXzMybWh6ID0gMCwKK307CisKKy8qIE1PREUgJiBEQVRBIFJBVEUgY29tYmluZWQgY29uZmlndXJhdGlvbiAqLworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8xcDBfMW1icHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA1X2hfMXAwLAorICAgIC5kYXRhX3JhdGUgPSBEUl8xTUJQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMSksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCgzKSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCgzKSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDMpLCAvKiBUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHhBKSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDExKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwNCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDA2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZGOSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkVCLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRTIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZFOSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDA4LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwM0EsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwOTAsCisKKyAgICAvKiAzMk1IeiBDaGFubmVsIEZpbHRlciAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDA3LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweDAwMDgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkYwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRTAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZFMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHhGRkZELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwMzQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNzIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwOUEsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDApICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDApICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzFwMF81MDBrYnBzX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBHRlNLX0JUXzBwNV9oXzFwMCwKKyAgICAuZGF0YV9yYXRlID0gRFJfNTAwS0JQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg1KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg1KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDUpLCAvKiBUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHg4KSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweEZGRkQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4RkZFQSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkYzLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweDAwMjEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4MDAxMywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkM5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRUUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDA1RSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweEZGNEUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweEZGRkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAxOEYsCisgICAgCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDEyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMTEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZFMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkVFLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweDAwMzQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGRCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkI3LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwM0IsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDA0RiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHhGRjVCLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHhGRkI1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMThCLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygwKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygwKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8xcDBfMjUwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8xcDAsCisgICAgLmRhdGFfcmF0ZSA9IERSXzI1MEtCUFMsCisKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoNSkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoNSksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCg1KSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4NikgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDIyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkZFLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDExLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweDAwMEIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGOCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkUwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRDcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4RkZGMCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDJBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDZGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDlFLAorICAgIAorICAgIC8qIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGQSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkY5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAwRiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHgwMDE5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweDAwMEMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFQiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkNELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweEZGRDcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAxNywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA3NSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDBCQiwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygxKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMSkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA3X2hfMHA1X2NvbmZpZy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDdfaF8wcDVfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmNmM4NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA3X2hfMHA1X2NvbmZpZy5jCkBAIC0wLDAgKzEsMzUzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTU9ERSBvbmx5IGNvbmZpZ3VyYXRpb24gKi8KK2NvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBnZnNrX2J0XzBwN19oXzBwNV9tb2RlX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBHRlNLX0JUXzBwN19oXzBwNSwKKyAgICAuc2NnYzVfY2xvY2tfZW5hX2JpdHMgPSBTSU1fU0NHQzVfUEhZRElHX01BU0sgfCBTSU1fU0NHQzVfR0VOX0ZTS19NQVNLLAorCisgICAgLyogWENWUl9NSVNDIGNvbmZpZ3MgKi8KKyAgICAueGN2cl9jdHJsLm1hc2sgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkNfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUxfTUFTSywKKyAgICAueGN2cl9jdHJsLmluaXQgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTCgxKSwKKyAgICAgICAgICAgICAgICAgICAgIAorICAgIC8qIFhDVlJfUEhZIGNvbmZpZ3MgKi8KKyAgICAucGh5X3ByZV9yZWYwX2luaXQgPSAweDc5Q0RFQjM5LAorICAgIC5waHlfcHJlX3JlZjFfaW5pdCA9IDB4Q0U3N0RFRjcsCisgICAgLnBoeV9wcmVfcmVmMl9pbml0ID0gMHgwMDAwQ0VCNywKKworICAgIC5waHlfY2ZnMV9pbml0ID0gWENWUl9QSFlfQ0ZHMV9BQV9QTEFZQkFDSygxKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0FBX09VVFBVVF9TRUwoMSkgfCAKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfRlNLX0JJVF9JTlZFUlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9CU01fRU5fQkxFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfREVNT0RfQ0xLX01PREUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9DVFNfVEhSRVNIKDB4YjApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfRlNLX0ZUU19USU1FT1VUKDIpLAorCisgICAgLnBoeV9lbF9jZmdfaW5pdCA9IFhDVlJfUEhZX0VMX0NGR19FTF9FTkFCTEUoMSkKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgfCBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfRU5BQkxFKDApCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAsCisKKyAgICAvKiBYQ1ZSX1JYX0RJRyBjb25maWdzICovCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSksIC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFKDApLAorCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSksIC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKworICAgIC5hZ2NfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX1JTU0lfVEhSRVNIKDB4RkYpLAorCisgICAgLyogWENWUl9UU00gY29uZmlncyAqLworI2lmIChEQVRBX1BBRERJTkdfRU4pCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQrVFhfRElHX0VOX1RYX0hJX0FESiksCisjZWxzZQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUKSwKKyNlbmRpZiAvKiAoREFUQV9QQURESU5HX0VOKSAqLworCisgICAgLyogWENWUl9UWF9ESUcgY29uZmlncyAqLworICAgIC50eF9nZnNrX2N0cmwgPSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NVUxUSVBMWV9UQUJMRV9NQU5VQUwoMHg0MDAwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01JKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfRkxEKDEpIHwgLyogVXNlIEdGU0sgTWFudWFsIEZpbHRlciBDb2VmZnMgKi8KKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTU9EX0lOREVYX1NDQUxJTkcoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSX09WUkRfRU4oMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMV9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8yX09WUkQoMCksCisgICAgLnR4X2dmc2tfY29lZmYxXzI2bWh6ID0gKDI3VSkgPDwgMCB8IC8qIENvZWZmIDIvMTMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMjc2VSkgPDwgNyB8IC8qIENvZWZmIDYvOSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2MlUpIDw8IDE2IHwgLyogQ29lZiAzLzEyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMyNlUpIDw8IDIzLCAvKiBDb2VmZiA3LzggKi8KKyAgICAudHhfZ2Zza19jb2VmZjJfMjZtaHogPSAoM1UpIDw8IDAgfCAvKiBDb2VmZiAwLzE1ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEwVSkgPDwgOCB8IC8qIENvZWZmIDEvMTQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTIxVSkgPDwgMTYgfCAvKiBDb2VmZiA0LzExICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5OFUpIDw8IDI0LCAvKiBDb2VmZiA1LzEwICovCisgICAgLnR4X2dmc2tfY29lZmYxXzMybWh6ID0gKDFVKSA8PCAwIHwgLyogQ29lZmYgMi8xMyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMzBVKSA8PCA3IHwgLyogQ29lZmYgNi85ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDdVKSA8PCAxNiB8IC8qIENvZWYgMy8xMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1MTBVKSA8PCAyMywgLyogQ29lZmYgNy84ICovCisgICAgLnR4X2dmc2tfY29lZmYyXzMybWh6ID0gKDBVKSA8PCAwIHwgLyogQ29lZmYgMC8xNSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkgPDwgOCB8IC8qIENvZWZmIDEvMTQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzdVKSA8PCAxNiB8IC8qIENvZWZmIDQvMTEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTM4VSkgPDwgMjQsIC8qIENvZWZmIDUvMTAgKi8KK307CisKKy8qIE1PREUgJiBEQVRBIFJBVEUgY29tYmluZWQgY29uZmlndXJhdGlvbiAqLworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDdfaF8wcDVfMW1icHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA3X2hfMHA1LAorICAgIC5kYXRhX3JhdGUgPSBEUl8xTUJQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCgzKSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCgzKSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDMpLCAvKlRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweEEpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRkUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGOCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkYxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRUYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZGNCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMjAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0MSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA1RSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA3MCwKKworICAgIC8qIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGQSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkYyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRUIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFRCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkZELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMUIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0MSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2NSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA3QSwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMCkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMCkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA3X2hfMHA1XzUwMGticHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA3X2hfMHA1LAorICAgIC5kYXRhX3JhdGUgPSBEUl81MDBLQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweDgpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkZGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRjgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGQSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHgwMDBBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweDAwMTksCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4MDAwOSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkRCLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweEZGQzEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4RkZGNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA3MiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDBERCwKKworICAgIC8qIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGNCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkZELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweDAwMTYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4MDAxQSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweEZGQkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4RkZFMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2OSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDBFRCwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygxKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMSkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA3X2hfMHA1XzI1MGticHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA3X2hfMHA1LAorICAgIC5kYXRhX3JhdGUgPSBEUl8yNTBLQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweDYpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgyMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAwNSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkZFLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkVBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMDUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAzNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2QiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA4RCwKKyAgICAKKyAgICAvKiAzMk1IeiBDaGFubmVsIEZpbHRlciAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweEZGRkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweDAwMDgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4MDAwNCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkY4LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRTYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZFMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwMkUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNkQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwOTgsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMSkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDEpICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZjOTU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWcuYwpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfeGN2ci5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT0gREFUQSBSQVRFIE9OTFkgc2V0dGluZ3MgPT09PT09PT09PT09PT09Ki8KKy8qIQorICogQGJyaWVmIFhDVlIgMU1icHMgREFUQSBSQVRFIHNwZWNpZmljIGNvbmZpZ3VyZSBzdHJ1Y3R1cmUKKyAqLworY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyXzFtYnBzX2NvbmZpZyA9Cit7CisgICAgLmRhdGFfcmF0ZSA9IERSXzFNQlBTLAorICAgIC5waHlfZWxfY2ZnX2luaXQgPSBYQ1ZSX1BIWV9FTF9DRkdfRUxfV0lOX1NJWkUoMHhGKSB8CisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX1dJTl9TSVpFKDApIHwKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9FTF9DRkdfRUxfSU5URVJWQUwoMHgyMCkgLAorICAgIC5yeF9kaWdfY3RybF9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfT1NSKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0dBSU4oMTYpLAorICAgIC5yeF9kaWdfY3RybF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfT1NSKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0dBSU4oMTYpLAorCisgICAgLmFnY19jdHJsXzFfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0dBSU5fU0VUVExFX1RJTUUoMTApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9QUkVTTE9XX0VOKFBSRVNMT1dfRU5BKSwKKyAgICAuYWdjX2N0cmxfMV9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfR0FJTl9TRVRUTEVfVElNRSgxMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1BSRVNMT1dfRU4oUFJFU0xPV19FTkEpLAorCisgICAgLmRjb2NfY3RybF8wX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfRExZKDEwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfSE9MRF9USU1FKDIxKSwKKyAgICAuZGNvY19jdHJsXzBfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9ETFkoMTIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9IT0xEX1RJTUUoMjYpLAorICAgIAorICAgIC5kY29jX2N0cmxfMV9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfSURYKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX0VTVF9HU19DTlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0dTX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9HU19JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfR1NfSURYKDMpLAorCisgICAgLmRjb2NfY3RybF8xX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19UUktfRVNUX0dTX0NOVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfR1NfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0dTX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19HU19JRFgoMyksCisKKyAgICAuZGNvY19jYWxfaWlyX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSM0FfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMkFfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMUFfSURYKDIpLAorICAgIC5kY29jX2NhbF9paXJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIzQV9JRFgoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIyQV9JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIxQV9JRFgoMiksCisKKyAgICAuZGNfcmVzaWRfY3RybF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTldJTigzMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9ETFkoNiksCisgICAgLmRjX3Jlc2lkX2N0cmxfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX05XSU4oNDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRExZKDcpLAorfTsKKworLyohCisgKiBAYnJpZWYgWENWUiA1MDBLIGJwcyBEQVRBIFJBVEUgc3BlY2lmaWMgY29uZmlndXJlIHN0cnVjdHVyZQorICovCitjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfNTAwa2Jwc19jb25maWcgPQoreworICAgIC5kYXRhX3JhdGUgPSBEUl81MDBLQlBTLAorICAgIC5waHlfZWxfY2ZnX2luaXQgPSBYQ1ZSX1BIWV9FTF9DRkdfRUxfV0lOX1NJWkUoMHg4KSB8CisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX1dJTl9TSVpFKDApIHwKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9FTF9DRkdfRUxfSU5URVJWQUwoMHgxMCksCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1IoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfR0FJTigxNiksCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1IoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfR0FJTigxNiksCisKKyAgICAuYWdjX2N0cmxfMV9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfR0FJTl9TRVRUTEVfVElNRSgxNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1BSRVNMT1dfRU4oUFJFU0xPV19FTkEpLAorICAgIC5hZ2NfY3RybF8xX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9HQUlOX1NFVFRMRV9USU1FKDE4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfUFJFU0xPV19FTihQUkVTTE9XX0VOQSksCisKKyAgICAuZGNvY19jdHJsXzBfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9ETFkoMTMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9IT0xEX1RJTUUoMjkpLAorICAgIC5kY29jX2N0cmxfMF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0RMWSgxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0hPTERfVElNRSgzNiksCisKKyAgICAuZGNvY19jdHJsXzFfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfSURYKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0lEWCgyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19FU1RfR1NfQ05UKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9HU19JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfR1NfSURYKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0dTX0lEWCgyKSwKKworICAgIC5kY29jX2N0cmxfMV9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX0VTVF9HU19DTlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0dTX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9HU19JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfR1NfSURYKDIpLAorCisgICAgLmRjb2NfY2FsX2lpcl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjNBX0lEWCgyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjJBX0lEWCgyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjFBX0lEWCgyKSwKKyAgICAuZGNvY19jYWxfaWlyX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSM0FfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMkFfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMUFfSURYKDIpLAorCisgICAgLmRjX3Jlc2lkX2N0cmxfMjZtaHogPSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX05XSU4oMjYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRExZKDQpLAorICAgIC5kY19yZXNpZF9jdHJsXzMybWh6ID0gWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9OV0lOKDMyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0RMWSg0KSwKK307CisKKy8qIQorICogQGJyaWVmIFhDVlIgMjUwSyBicHMgREFUQSBSQVRFIHNwZWNpZmljIGNvbmZpZ3VyZSBzdHJ1Y3R1cmUKKyAqLworY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyXzI1MGticHNfY29uZmlnID0KK3sKKyAgICAuZGF0YV9yYXRlID0gRFJfMjUwS0JQUywKKyAgICAucGh5X2VsX2NmZ19pbml0ID0gWENWUl9QSFlfRUxfQ0ZHX0VMX1dJTl9TSVpFKDB4NCkgfAorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0VMX0NGR19FTF9aQl9XSU5fU0laRSgwKSB8CisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfRUxfQ0ZHX0VMX0lOVEVSVkFMKDB4OCkgLAorICAgIC5yeF9kaWdfY3RybF9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfT1NSKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0dBSU4oMTYpLAorICAgIC5yeF9kaWdfY3RybF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfT1NSKDQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0dBSU4oMTYpLAorCisgICAgLmFnY19jdHJsXzFfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0dBSU5fU0VUVExFX1RJTUUoMTgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9QUkVTTE9XX0VOKFBSRVNMT1dfRU5BKSwKKyAgICAuYWdjX2N0cmxfMV9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfR0FJTl9TRVRUTEVfVElNRSgyMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1BSRVNMT1dfRU4oUFJFU0xPV19FTkEpLAorCisgICAgLmRjb2NfY3RybF8wX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfRExZKDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfSE9MRF9USU1FKDM0KSwKKyAgICAuZGNvY19jdHJsXzBfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9ETFkoMjApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9IT0xEX1RJTUUoNDIpLAorCisgICAgLmRjb2NfY3RybF8xX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19UUktfRVNUX0dTX0NOVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfR1NfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0dTX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19HU19JRFgoMiksCisKKyAgICAuZGNvY19jdHJsXzFfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfSURYKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19FU1RfR1NfQ05UKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9HU19JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfR1NfSURYKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0dTX0lEWCgyKSwKKworICAgIC5kY29jX2NhbF9paXJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIzQV9JRFgoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIyQV9JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIxQV9JRFgoMSksCisgICAgLmRjb2NfY2FsX2lpcl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjNBX0lEWCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjJBX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjFBX0lEWCgxKSwKKworICAgIC5kY19yZXNpZF9jdHJsXzI2bWh6ID0gWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9OV0lOKDEzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0RMWSg0KSwKKyAgICAuZGNfcmVzaWRfY3RybF8zMm1oeiA9IFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTldJTigxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9ETFkoNCksCit9OworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9tc2tfY29uZmlnLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9tc2tfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlYjM4YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX21za19jb25maWcuYwpAQCAtMCwwICsxLDM0MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfeGN2ci5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1PREUgb25seSBjb25maWd1cmF0aW9uICovCitjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgbXNrX21vZGVfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IE1TSywKKyAgICAuc2NnYzVfY2xvY2tfZW5hX2JpdHMgPSBTSU1fU0NHQzVfUEhZRElHX01BU0sgfCBTSU1fU0NHQzVfR0VOX0ZTS19NQVNLLAorCisgICAgLyogWENWUl9NSVNDIGNvbmZpZ3MgKi8KKyAgICAueGN2cl9jdHJsLm1hc2sgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkNfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUxfTUFTSywKKyAgICAueGN2cl9jdHJsLmluaXQgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MKDkpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDKDQpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTCgxKSwKKworICAgIC8qIFhDVlJfUEhZIGNvbmZpZ3MgKi8KKyAgICAucGh5X3ByZV9yZWYwX2luaXQgPSAweDc5Q0RFQjM4LAorICAgIC5waHlfcHJlX3JlZjFfaW5pdCA9IDB4Q0U3N0RGRjcsCisgICAgLnBoeV9wcmVfcmVmMl9pbml0ID0gMHgwMDAwQ0VCNywKKworICAgIC5waHlfY2ZnMV9pbml0ID0gWENWUl9QSFlfQ0ZHMV9BQV9QTEFZQkFDSygwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0FBX09VVFBVVF9TRUwoMSkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goMjA4VSkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVQoMiksCisKKyAgICAucGh5X2VsX2NmZ19pbml0ID0gWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRSgxKQorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgIHwgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX0VOQUJMRSgwKQorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICwKKworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICAucnhfZGlnX2N0cmxfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFKDApLAorCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSksIC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKworICAgIC5hZ2NfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX1JTU0lfVEhSRVNIKDB4RkYpLAorCisgICAgLyogWENWUl9UU00gY29uZmlncyAqLworI2lmIChEQVRBX1BBRERJTkdfRU4pCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQrVFhfRElHX0VOX1RYX0hJX0FESiksCisjZWxzZQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUKSwKKyNlbmRpZiAvKiAoREFUQV9QQURESU5HX0VOKSAqLworCisgICAgLyogWENWUl9UWF9ESUcgY29uZmlncyAqLworICAgIC50eF9nZnNrX2N0cmwgPSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NVUxUSVBMWV9UQUJMRV9NQU5VQUwoMHg0MDAwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01JKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfRkxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTU9EX0lOREVYX1NDQUxJTkcoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSX09WUkRfRU4oMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMV9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8yX09WUkQoMCksCisgICAgLnR4X2dmc2tfY29lZmYxXzI2bWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjJfMjZtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMV8zMm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYyXzMybWh6ID0gMCwKK307CisKKy8qIE1PREUgJiBEQVRBIFJBVEUgY29tYmluZWQgY29uZmlndXJhdGlvbiAqLworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfTVNLXzFtYnBzX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBNU0ssCisgICAgLmRhdGFfcmF0ZSA9IERSXzFNQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDMpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDMpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoMyksIC8qVFpBX0JXX1NFTCAqLworCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHhBKSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDExKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC8qIE1TSyAxTUJQUyBjaGFubmVsIGZpbHRlciAgQCAyNk1IeiBSRiBPU0MgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkY5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFQSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAxQiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDdDLAorCisgICAgLyogTVNLIDFNQlBTIGNoYW5uZWwgZmlsdGVyICBAIDMyTUh6IFJGIE9TQyAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZGMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkU5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRTksCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZGNywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDE2LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjksCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwODIsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDApICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDApICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9NU0tfNTAwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gTVNLLAorICAgIC5kYXRhX3JhdGUgPSBEUl81MDBLQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweGEpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLyogTVNLIDUwMEtCUFMgY2hhbm5lbCBmaWx0ZXIgQCAyNk1IeiBSRiBPU0MgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDA1LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFRCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkUyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRTcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAwNSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDM4LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDZGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDkyLAorCisgICAgLyogTVNLIDUwMEtCUFMgY2hhbm5lbCBmaWx0ZXIgQCAzMk1IeiBSRiBPU0MgKi8gCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGRiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAwOSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkUwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweEZGRkEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAzMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA3MSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA5QywKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMCkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMCkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX01TS18yNTBrYnBzX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBNU0ssCisgICAgLmRhdGFfcmF0ZSA9IERSXzI1MEtCUFMsCisKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoNSkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoNSksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCg1KSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4OCkgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDIyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGOCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweDAwMEEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4MDAxOSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHgwMDA5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGREIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4RkZDMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHhGRkY2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDcyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMERELAorCisgICAgLyogTVNLIDI1MEtCUFMgY2hhbm5lbCBmaWx0ZXIgQCAzMk1IeiBSRiBPU0MgKi8gCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGNCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkZELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweDAwMTYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4MDAxQSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweEZGQkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4RkZFMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2OSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDBFRCwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygxKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMSkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX3pnYmVfY29uZmlnLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl96Z2JlX2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZDZmNWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl96Z2JlX2NvbmZpZy5jCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IHpnYmVfbW9kZV9jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gWklHQkVFX01PREUsCisgICAgLnNjZ2M1X2Nsb2NrX2VuYV9iaXRzID0gU0lNX1NDR0M1X1BIWURJR19NQVNLIHwgU0lNX1NDR0M1X1ppZ0JlZV9NQVNLLAorCisgICAgLyogWENWUl9NSVNDIGNvbmZpZ3MgKi8KKyAgICAueGN2cl9jdHJsLm1hc2sgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkNfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUxfTUFTSywKKyAgICAueGN2cl9jdHJsLmluaXQgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MKDQpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTCgyKSwKKworICAgIC8qIFhDVlJfUEhZIGNvbmZpZ3MgKi8KKyAgICAucGh5X3ByZV9yZWYwX2luaXQgPSAweDAsIC8qIE5vdCB1c2VkIGluIFppZ2JlZSAqLworICAgIC5waHlfcHJlX3JlZjFfaW5pdCA9IDB4MCwgLyogTm90IHVzZWQgaW4gWmlnYmVlICovCisgICAgLnBoeV9wcmVfcmVmMl9pbml0ID0gMHgwLCAvKiBOb3QgdXNlZCBpbiBaaWdiZWUgKi8KKworICAgIC5waHlfY2ZnMV9pbml0ID0gWENWUl9QSFlfQ0ZHMV9BQV9QTEFZQkFDSygwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0FBX09VVFBVVF9TRUwoMSkgfCAKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfRlNLX0JJVF9JTlZFUlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9CU01fRU5fQkxFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfREVNT0RfQ0xLX01PREUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9DVFNfVEhSRVNIKDB4QzApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfRlNLX0ZUU19USU1FT1VUKDIpLAorCisgICAgLnBoeV9lbF9jZmdfaW5pdCA9IFhDVlJfUEhZX0VMX0NGR19FTF9FTkFCTEUoMSkKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICB8IFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEUoMCkKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICwKKworICAgIC8qIFhDVlJfUExMX0RJRyBjb25maWdzICovCisKKyAgICAvKiBYQ1ZSX1JYX0RJRyBjb25maWdzICovCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDEpIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfUkFURSgwKSwKKworICAgIC5yeF9kaWdfY3RybF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTCgxKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOKDEpLCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisKKyAgICAuYWdjX2N0cmxfMF9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSCgweEZGKSwKKyAgICAvKiBYQ1ZSX1RTTSBjb25maWdzICovCisjaWYgKERBVEFfUEFERElOR19FTikKKyAgICAudHNtX3RpbWluZ18zNV9pbml0ID0gQjAoVFhfRElHX0VOX0FTU0VSVCtaR0JFX1RYX0RJR19FTl9UWF9ISV9BREopLCAvKiBEQVRBX1BBRERJTkcgYWRqdXN0bWVudHMgYXJlIHNwZWNpZmllZCByZWxhdGl2ZSB0byB0aGUgbm9uLVppZ2JlZSBiYXNlIHRpbWluZyAqLyAKKyNlbHNlCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFpHQkVfVFhfRElHX0VOX0FTU0VSVCksCisjZW5kaWYgLyogKERBVEFfUEFERElOR19FTikgKi8KKworICAgIC8qIFhDVlJfVFhfRElHIGNvbmZpZ3MgKi8KKyAgICAudHhfZ2Zza19jdHJsID0gWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTVVMVElQTFlfVEFCTEVfTUFOVUFMKDB4NDAwMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NSSgxKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01MRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX0ZMRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01PRF9JTkRFWF9TQ0FMSU5HKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl9PVlJEX0VOKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8wX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzFfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMl9PVlJEKDApICwKKyAgICAudHhfZ2Zza19jb2VmZjFfMjZtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMl8yNm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYxXzMybWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjJfMzJtaHogPSAwLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfWklHQkVFXzUwMGticHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IFpJR0JFRV9NT0RFLAorICAgIC5kYXRhX3JhdGUgPSBEUl81MDBLQlBTLAorICAgIAorICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMSksIC8qIFZDTyBLVk0gKi8KKworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDEpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDEpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoMSksIC8qVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4QSkgLAorICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGRiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkZGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAwOCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHgwMDBBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweDAwMDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFOCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkQ3LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweEZGRTYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAyMiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA3NSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDBCMiwKKworICAgICAvKiBJRUVFIDgwMi4xNS40IDMyTUh6IENoYW5uZWwgRmlsdGVyIC0tIDEuNTUvMS4yNS81LzAuOTcvQjUgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkZGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwNSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHgwMDFELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMjUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4RkZDRSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHhGRkExLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDQwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMTI0LAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygwKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygwKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworLyogQ1VTVE9NIGRhdGFyYXRlIGRlcGVuZGVudCBjb25maWcgc3RydWN0dXJlIGZvciBPTkxZIDgwMi4xNS40ICovCisvKiEKKyAqIEBicmllZiAgWENWUiA1MDBLIGJwcyBEQVRBIFJBVEUgc3BlY2lmaWMgY29uZmlndXJlIHN0cnVjdHVyZQorICovCitjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfODAyXzE1XzRfNTAwa2Jwc19jb25maWcgPQoreworICAgIC5kYXRhX3JhdGUgPSBEUl81MDBLQlBTLAorICAgIC5waHlfZWxfY2ZnX2luaXQgPSBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfV0lOX1NJWkUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9FTF9DRkdfRUxfV0lOX1NJWkUoMHg4KSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0VMX0NGR19FTF9JTlRFUlZBTCgweDEwKSAsCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1IoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfR0FJTigxNiksCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1IoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfR0FJTigxNiksCisKKyAgICAuYWdjX2N0cmxfMV9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfR0FJTl9TRVRUTEVfVElNRSgxMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1BSRVNMT1dfRU4oUFJFU0xPV19FTkEpLAorICAgIC5hZ2NfY3RybF8xX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9HQUlOX1NFVFRMRV9USU1FKDEwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfUFJFU0xPV19FTihQUkVTTE9XX0VOQSksCisKKyAgICAuZGNvY19jdHJsXzBfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9ETFkoMTMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9IT0xEX1RJTUUoMjkpLAorICAgIC5kY29jX2N0cmxfMF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0RMWSgyMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0hPTERfVElNRSg0NyksCisKKyAgICAuZGNvY19jdHJsXzFfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfSURYKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0lEWCgyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19FU1RfR1NfQ05UKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9HU19JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfR1NfSURYKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0dTX0lEWCgyKSwKKworICAgIC5kY29jX2N0cmxfMV9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX0VTVF9HU19DTlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0dTX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9HU19JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfR1NfSURYKDIpLAorCisgICAgLmRjb2NfY2FsX2lpcl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjNBX0lEWCgyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjJBX0lEWCgyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjFBX0lEWCgyKSwKKyAgICAuZGNvY19jYWxfaWlyX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSM0FfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMkFfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMUFfSURYKDEpLAorCisgICAgLmRjX3Jlc2lkX2N0cmxfMjZtaHogPSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX05XSU4oMjYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRExZKDQpLAorICAgIC5kY19yZXNpZF9jdHJsXzMybWh6ID0gWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9OV0lOKDQ4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0RMWSgwKSwKK307CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZGJnX3JhbV9jYXB0dXJlLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2RiZ19yYW1fY2FwdHVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTlhODIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2RiZ19yYW1fY2FwdHVyZS5jCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisjaW5jbHVkZSAiZGJnX3JhbV9jYXB0dXJlLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBSQURJT19JU19HRU5fM1AwCisjZGVmaW5lIFBLVF9SQU1fU0laRV8xNkJfV09SRFMgICgxMTUyKSAvKiBOdW1iZXIgb2YgMTZiaXQgZW50cmllcyBpbiBlYWNoIFBhY2tldCBSQU0gYmFuayAqLworI2Vsc2UKKyNkZWZpbmUgUEtUX1JBTV9TSVpFXzE2Ql9XT1JEUyAgKDU0NCkgLyogTnVtYmVyIG9mIDE2Yml0IGVudHJpZXMgaW4gZWFjaCBQYWNrZXQgUkFNIGJhbmsgKi8KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisjZGVmaW5lIFNJR05fRVhUTkRfMTJfMTYoeCkgICAgICgoeCkgfCAoKCh4KSAmIDB4ODAwKSA/IDB4RjAwMCA6IDB4MCkpCisjZGVmaW5lIFNJR05fRVhUTkRfNV84KHgpICAgICAgICgoeCkgfCAoKCh4KSAmIDB4MTApID8gMHhFMCA6IDB4MCkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZGJnX3JhbV9pbml0KHZvaWQpCit7CisgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMIHw9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RNQV9EVEVTVF9FTl9NQVNLOyAgLyogVHVybnMgb24gY2xvY2tpbmcgdG8gRE1BL0RCRyBibG9ja3MgKi8KKyAgICBYQ1ZSX01JU0MtPlBBQ0tFVF9SQU1fQ1RSTCB8PSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1hDVlJfUkFNX0FMTE9XX01BU0s7ICAvKiBNYWtlIFBLVCBSQU0gYXZhaWxhYmxlIHRvIGp1c3QgWENWUiAqLworCisgICAgLyogU29tZSBleHRlcm5hbCBjb2RlIG11c3QgcGVyZm9ybSB0aGUgUlggd2FybXVwIHJlcXVlc3QuICovCit9CisKKworZGJnUmFtU3RhdHVzX3QgZGJnX3JhbV9jYXB0dXJlKHVpbnQ4X3QgZGJnX3BhZ2UsIHVpbnQxNl90IGJ1ZmZlcl9zel9ieXRlcywgdm9pZCAqIHJlc3VsdF9idWZmZXIpCit7CisgICAgZGJnUmFtU3RhdHVzX3Qgc3RhdHVzID0gREJHX1JBTV9TVUNDRVNTOworICAgIHVpbnQzMl90IHRlbXA7CisgICAgdm9sYXRpbGUgdWludDhfdCAqcGt0X3JhbV9wdHIwLCAqcGt0X3JhbV9wdHIxOworICAgIHVpbnQ4X3QgKiBvdXRwdXRfcHRyOworICAgIHVpbnQxNl90IGk7CisKKyAgICAvKiBTb21lIGV4dGVybmFsIGNvZGUgbXVzdCBwZXJmb3JtIHRoZSBSWCB3YXJtdXAgcmVxdWVzdCBhZnRlciB0aGUgZGJnX3JhbV9pbml0KCkgY2FsbCAqLworCisgICAgaWYgKHJlc3VsdF9idWZmZXIgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IERCR19SQU1fRkFJTF9OVUxMX1BPSU5URVI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChidWZmZXJfc3pfYnl0ZXMgPiAoNTQ0KjIqMikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IERCR19SQU1fRkFJTF9TQU1QTEVfTlVNX0xJTUlUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcCA9IFhDVlJfTUlTQy0+UEFDS0VUX1JBTV9DVFJMICYgflhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1BBR0VfTUFTSzsKKyAgICAgICAgICAgIHN3aXRjaCAoZGJnX3BhZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBEQkdfUEFHRV9SWERJR0lROgorICAgICAgICAgICAgICAgIGNhc2UgREJHX1BBR0VfUkFXQURDSVE6CisgICAgICAgICAgICAgICAgY2FzZSBEQkdfUEFHRV9EQ0VTVElROgorICAgICAgICAgICAgICAgICAgICBYQ1ZSX01JU0MtPlBBQ0tFVF9SQU1fQ1RSTCA9ICB0ZW1wIHwgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfUEFHRShkYmdfcGFnZSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCEoWENWUl9NSVNDLT5QQUNLRVRfUkFNX0NUUkwgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19SQU1fRlVMTCgyKSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXRpbmcgZm9yIFBLVF9SQU0gdG8gZmlsbCwgd2FpdCBmb3IgUEtUX1JBTV8xIGZ1bGwgdG8gZW5zdXJlIGNvbXBsZXRlIG1lbW9yeSBpcyBmaWxsZWQuICovCisgICAgICAgICAgICAgICAgICAgIH0gICAKKyAgICAgICAgICAgICAgICAgICAgLyogQ29weSB0byBvdXRwdXQgYnkgYnl0ZXMgdG8gYXZvaWQgYW55IGFjY2VzcyBzaXplIHByb2JsZW1zIGluIDE2IGJpdCBwYWNrZXQgUkFNLiAqLworICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcHRyID0gcmVzdWx0X2J1ZmZlcjsKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICBwa3RfcmFtX3B0cjAgPSAodm9sYXRpbGUgdWludDhfdCAqKSYoWENWUl9QS1RfUkFNLT5QQUNLRVRfUkFNXzBbMF0pOworICAgICAgICAgICAgICAgICAgICBwa3RfcmFtX3B0cjEgPSAodm9sYXRpbGUgdWludDhfdCAqKSYoWENWUl9QS1RfUkFNLT5QQUNLRVRfUkFNXzFbMF0pOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgcGt0X3JhbV9wdHIwID0gKHZvbGF0aWxlIHVpbnQ4X3QgKikmKFhDVlJfUEtUX1JBTS0+UEFDS0VUX1JBTVswXSk7CisgICAgICAgICAgICAgICAgICAgIHBrdF9yYW1fcHRyMSA9ICh2b2xhdGlsZSB1aW50OF90ICopJihYQ1ZSX1BLVF9SQU0tPlBBQ0tFVF9SQU1bWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fQ09VTlQ+PjFdKTsgLyogU2Vjb25kIHBhY2tldCBSQU0gc3RhcnRzIGhhbGZ3YXkgdGhyb3VnaCAqLworI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICAgICAgICAgICAgICAgIC8qIEZvciAqSVEgcGFnZXMgSSBhbmQgUSBhcmUgc3RvcmVkIGFsdGVybmF0ZWx5IGluIHBhY2tldCByYW0gMCAmIDEgKi8KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9zel9ieXRlcyAvIDQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgKm91dHB1dF9wdHIrKyA9ICpwa3RfcmFtX3B0cjArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXRwdXRfcHRyKysgPSAqcGt0X3JhbV9wdHIwKys7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3V0cHV0X3B0cisrID0gKnBrdF9yYW1fcHRyMSsrOworICAgICAgICAgICAgICAgICAgICAgICAgKm91dHB1dF9wdHIrKyA9ICpwa3RfcmFtX3B0cjErKzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgREJHX1BBR0VfUlhJTlBIOgorICAgICAgICAgICAgICAgIGNhc2UgREJHX1BBR0VfREVNT0RfSEFSRDoKKyAgICAgICAgICAgICAgICBjYXNlIERCR19QQUdFX0RFTU9EX1NPRlQ6CisgICAgICAgICAgICAgICAgY2FzZSBEQkdfUEFHRV9ERU1PRF9EQVRBOgorICAgICAgICAgICAgICAgIGNhc2UgREJHX1BBR0VfREVNT0RfQ0ZPX1BIOgorICAgICAgICAgICAgICAgICAgICBYQ1ZSX01JU0MtPlBBQ0tFVF9SQU1fQ1RSTCA9ICB0ZW1wIHwgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfUEFHRShkYmdfcGFnZSk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKFhDVlJfTUlTQy0+UEFDS0VUX1JBTV9DVFJMICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfUkFNX0ZVTEwoMikpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0aW5nIGZvciBQS1RfUkFNIHRvIGZpbGwsIHdhaXQgZm9yIFBLVF9SQU1fMSBmdWxsIHRvIGVuc3VyZSBjb21wbGV0ZSBtZW1vcnkgaXMgZmlsbGVkLiAqLworICAgICAgICAgICAgICAgICAgICB9ICAgCisgICAgICAgICAgICAgICAgICAgIC8qIENvcHkgdG8gb3V0cHV0IGJ5IGJ5dGVzIHRvIGF2b2lkIGFueSBhY2Nlc3Mgc2l6ZSBwcm9ibGVtcyBpbiAxNiBiaXQgcGFja2V0IFJBTS4gKi8KKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3B0ciA9IHJlc3VsdF9idWZmZXI7CisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgICAgcGt0X3JhbV9wdHIwID0gKHZvbGF0aWxlIHVpbnQ4X3QgKikmKFhDVlJfUEtUX1JBTS0+UEFDS0VUX1JBTV8wWzBdKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIHBrdF9yYW1fcHRyMCA9ICh2b2xhdGlsZSB1aW50OF90ICopJihYQ1ZSX1BLVF9SQU0tPlBBQ0tFVF9SQU1bMF0pOworI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaXMgZm9yIG5vbiBJL1EgKi8KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9zel9ieXRlczsgaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3V0cHV0X3B0ciA9ICpwa3RfcmFtX3B0cjA7CisgICAgICAgICAgICAgICAgICAgICAgICBwa3RfcmFtX3B0cjArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIERCR19QQUdFX0lETEU6CisgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IERCR19SQU1fRkFJTF9QQUdFX0VSUk9SOyAvKiBJbGxlZ2FsIGNhcHR1cmUgcGFnZSByZXF1ZXN0LiAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFhDVlJfTUlTQy0+UEFDS0VUX1JBTV9DVFJMICY9IH5YQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19QQUdFX01BU0s7IC8qIENsZWFyIERCR19QQUdFIHRvIHRlcm1pbmF0ZSB0aGUgYWNxdWlzaXRpb24gKi8KKworICAgIC8qIFByb2Nlc3MgdGhlIHNhbXBsZXMgYW5kIGNvcHkgdG8gb3V0cHV0IHBvaW50ZXIgKi8KKworICAgIFhDVlJfTUlTQy0+UEFDS0VUX1JBTV9DVFJMICY9IH5YQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1hDVlJfUkFNX0FMTE9XX01BU0s7IC8qIE1ha2UgUEtUIFJBTSBhdmFpbGFibGUgdG8gcHJvdG9jb2wgYmxvY2tzICovCisgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMICY9IH5YQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ETUFfRFRFU1RfRU5fTUFTSzsgLyogVHVybnMgb2ZmIGNsb2NraW5nIHRvIERNQS9EQkcgYmxvY2tzICovCisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2RiZ19yYW1fY2FwdHVyZS5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9kYmdfcmFtX2NhcHR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWJiYTdkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9kYmdfcmFtX2NhcHR1cmUuaApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9EQkdfUkFNX0NBUFRVUkVfSF8KKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyNkZWZpbmUgX0RCR19SQU1fQ0FQVFVSRV9IXworLyogY2xhbmctZm9ybWF0IG9uICovCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKworLyohCisgKiBAYWRkdG9ncm91cCB4Y3ZyCisgKiBAeworICovCisKKy8qISBAZmlsZSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBhZ2UgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgREJHX1BBR0VfSURMRSAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIERCR19QQUdFX1JYRElHSVEgICAgICAgICgweDAxKQorI2RlZmluZSBEQkdfUEFHRV9SQVdBRENJUSAgICAgICAoMHgwNCkKKyNkZWZpbmUgREJHX1BBR0VfRENFU1RJUSAgICAgICAgKDB4MDcpCisjZGVmaW5lIERCR19QQUdFX1JYSU5QSCAgICAgICAgICgweDBBKQorI2RlZmluZSBEQkdfUEFHRV9ERU1PRF9IQVJEICAgICAoMHgwQikKKyNkZWZpbmUgREJHX1BBR0VfREVNT0RfU09GVCAgICAgKDB4MEMpCisjZGVmaW5lIERCR19QQUdFX0RFTU9EX0RBVEEgICAgICgweDBEKQorI2RlZmluZSBEQkdfUEFHRV9ERU1PRF9DRk9fUEggICAoMHgwRSkKKwordHlwZWRlZiBlbnVtIF9kYmdSYW1TdGF0dXMKK3sKKyAgICBEQkdfUkFNX1NVQ0NFU1MgPSAwLAorICAgIERCR19SQU1fRkFJTF9TQU1QTEVfTlVNX0xJTUlUID0gMSwKKyAgICBEQkdfUkFNX0ZBSUxfUEFHRV9FUlJPUiA9IDIsCisgICAgREJHX1JBTV9GQUlMX05VTExfUE9JTlRFUiA9IDMsCisgICAgREJHX1JBTV9JTlZBTElEX1RSSUdfU0VUVElORyA9IDQsCisgICAgREJHX1JBTV9GQUlMX05PVF9FTk9VR0hfU0FNUExFUyA9IDUsCisgICAgREJHX1JBTV9DQVBUVVJFX05PVF9DT01QTEVURSA9IDYsIC8qIE5vdCBhbiBlcnJvciByZXNwb25zZSwgYnV0IGFuIGluZGljYXRpb24gdGhhdCBjYXB0dXJlIGlzbid0IGNvbXBsZXRlIGZvciBzdGF0dXMgcG9sbGluZyAqLworfSBkYmdSYW1TdGF0dXNfdDsKKworI2lmIFJBRElPX0lTX0dFTl8zUDAKK3R5cGVkZWYgZW51bSBfZGJnUmFtU3RhcnRUcmlnZ2VyVHlwZQoreworICAgIE5PX1NUQVJUX1RSSUcgPSAwLAorICAgIFNUQVJUX09OX0ZTS19QUkVBTUJMRV9GT1VORCA9IDEsCisgICAgU1RBUlRfT05fRlNLX0FBX01BVENIID0gMiwKKyAgICBTVEFSVF9PTl9aQkRFTU9EX1BSRUFNQkxFX0ZPVU5EID0gMywKKyAgICBTVEFSVF9PTl9aQkRFTU9EX1NGRF9NQVRDSCA9IDQsCisgICAgU1RBUlRfT05fQUdDX0RDT0NfR0FJTl9DSEcgPSA1LAorICAgIFNUQVJUX09OX1RTTV9SWF9ESUdfRU4gPSA2LAorICAgIFNUQVJUX09OX1RTTV9TUEFSRTJfRU4gPSA3LAorICAgIElOVkFMSURfU1RBUlRfVFJJRyA9IDgKK30gZGJnUmFtU3RhcnRUcmlnZ2VyVHlwZTsKKwordHlwZWRlZiBlbnVtIF9kYmdSYW1TdG9wVHJpZ2dlclR5cGUKK3sKKyAgICBOT19TVE9QX1RSSUcgPSAwLAorICAgIFNUT1BfT05fRlNLX1BSRUFNQkxFX0ZPVU5EID0gMSwKKyAgICBTVE9QX09OX0ZTS19BQV9NQVRDSCA9IDIsCisgICAgU1RPUF9PTl9aQkRFTU9EX1BSRUFNQkxFX0ZPVU5EID0gMywKKyAgICBTVE9QX09OX1pCREVNT0RfU0ZEX01BVENIID0gNCwKKyAgICBTVE9QX09OX0FHQ19EQ09DX0dBSU5fQ0hHID0gNSwKKyAgICBTVE9QX09OX1RTTV9SWF9ESUdfRU4gPSA2LAorICAgIFNUT1BfT05fVFNNX1NQQVJFM19FTiA9IDcsCisgICAgU1RPUF9PTl9UU01fUExMX1VOTE9DSyA9IDgsCisgICAgU1RPUF9PTl9CTEVfQ1JDX0VSUk9SX0lOQyA9IDksCisgICAgU1RPUF9PTl9DUkNfRkFJTF9aR0JFX0dFTkZTSyA9IDEwLAorICAgIFNUT1BfT05fR0VORlNLX0hFQURFUl9GQUlMID0gMTEsCisgICAgSU5WQUxJRF9TVE9QX1RSSUcgPSAxMgorfSBkYmdSYW1TdG9wVHJpZ2dlclR5cGU7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgZm9yIHNhbXBsZSBjYXB0dXJlIHRvIHBhY2tldCBSQU0uCisgKgorICogXHJldHVybiBOb25lLgorICoKKyAqIFxkZXRhaWxzIAorICogVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCBzb21lIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgY2FsbGluZyByb3V0aW5lIGJvdGggc2V0CisgKiB0aGUgY2hhbm5lbCBhbmQgZm9yY2UgUlggd2FybXVwIGJlZm9yZSBjYWxsaW5nIDo6ZGJnX3JhbV9jYXB0dXJlKCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRiZ19yYW1faW5pdCh2b2lkKTsKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGFueSBzdGF0ZSByZXN0b3JhdGlvbiBhdCB0aGUgY29tcGxldGlvbiBvZiBQS1QgUkFNIGNhcHR1cmUuCisgKiAKKyAqIFxkZXRhaWxzCisgKiBBbnkgY2xvY2tzIGVuYWJsZWQgdG8gdGhlIHBhY2tldCBSQU0gY2FwdHVyZSBjaXJjdWl0cnkgYXJlIGRpc2FibGVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkYmdfcmFtX3JlbGVhc2Uodm9pZCk7CisKKyNpZiBSQURJT19JU19HRU5fM1AwCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gaW5pdGlhdGVzIHRoZSBjYXB0dXJlIG9mIHRyYW5zY2VpdmVyIGRhdGEgdG8gdGhlIHRyYW5zY2VpdmVyIHBhY2tldCBSQU0uCisgKgorICogXHBhcmFtW2luXSBkYmdfcGFnZSAtIFRoZSBwYWdlIHNlbGVjdG9yIChEQkdfUEFHRSkuCisgKiBccGFyYW1baW5dIGRiZ19zdGFydF90cmlnZ2VyIC0gVGhlIHRyaWdnZXIgdG8gc3RhcnQgYWNxdWlzaXRpb24gKG11c3QgYmUgIm5vIHRyaWdnZXIiIGlmIGEgc3RvcCB0cmlnZ2VyIGlzIGVuYWJsZWQpLgorICogXHBhcmFtW2luXSBkYmdfc3RvcF90cmlnZ2VyIC0gVGhlIHRyaWdnZXIgdG8gc3RvcCBhY3F1aXNpdGlvbiAobXVzdCBiZSAibm8gdHJpZ2dlciIgaWYgYSBzdGFydCB0cmlnZ2VyIGlzIGVuYWJsZWQpLgorICoKKyAqIFxyZXR1cm4gU3RhdHVzIG9mIHRoZSByZXF1ZXN0LgorICoKKyAqIFxkZXRhaWxzIAorICogVGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlIHByb2Nlc3Mgb2YgY2FwdHVyaW5nIGRhdGEgdG8gdGhlIHBhY2tldCBSQU0uIERlcGVuZGluZyB1cG9uIHRoZSBzdGFydCBhbmQgc3RvcCB0cmlnZ2VyCisgKiBzZXR0aW5ncywgdGhlIGFjdHVhbCBjYXB0dXJlIHByb2Nlc3MgY2FuIHRha2UgYW4gaW5kZXRlcm1pbmF0ZSBhbW91bnQgb2YgdGltZS4gT3RoZXIgQVBJcyBhcmUgcHJvdmlkZWQgdG8gCisgKiBwZXJmb3JtIGEgYmxvY2tpbmcgd2FpdCBmb3IgY29tcGxldGlvbiBvciBhbGxvdyBwb2xsaW5nIGZvciBjb21wbGV0aW9uIG9mIHRoZSBjYXB0dXJlLgorICogQWZ0ZXIgYW55IGNhcHR1cmUgaGFzIGNvbXBsZXRlZCwgYSBzZXBhcmF0ZSByb3V0aW5lIG11c3QgYmUgY2FsbGVkIHRvIHBvc3Rwcm9jZXNzIHRoZSBjYXB0dXJlIGFuZCBjb3B5IGFsbAorICogZGF0YSBvdXQgb2YgdGhlIHBhY2tldCBSQU0gaW50byBhIG5vcm1hbCBSQU0gYnVmZmVyLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZGJnUmFtU3RhdHVzX3QgZGJnX3JhbV9zdGFydF9jYXB0dXJlKHVpbnQ4X3QgZGJnX3BhZ2UsIGRiZ1JhbVN0YXJ0VHJpZ2dlclR5cGUgc3RhcnRfdHJpZywgZGJnUmFtU3RvcFRyaWdnZXJUeXBlIHN0b3BfdHJpZyk7CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIGJsb2NraW5nIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgdGhlIGNhcHR1cmUgb2YgdHJhbnNjZWl2ZXIgZGF0YSB0byB0aGUgdHJhbnNjZWl2ZXIgcGFja2V0IFJBTS4KKyAqCisgKiBccmV0dXJuIFN0YXR1cyBvZiB0aGUgcmVxdWVzdCwgREJHX1JBTV9TVUNDRVNTIGlmIGNhcHR1cmUgaXMgY29tcGxldGUuCisgKgorICogXGRldGFpbHMgCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgd2FpdCBsb29wIGZvciBjYXB0dXJlIGNvbXBsZXRpb24gYW5kIG1heSB0YWtlIGFuIGluZGV0ZXJtaW5hdGUgYW1vdW50IG9mIHRpbWUgZm9yIAorICogc29tZSBjYXB0dXJlIHRyaWdnZXIgdHlwZXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitkYmdSYW1TdGF0dXNfdCBkYmdfcmFtX3dhaXRfZm9yX2NvbXBsZXRlKHZvaWQpOyAvKiBCbG9ja2luZyB3YWl0IGZvciBjYXB0dXJlIGNvbXBsZXRpb24sIG5vIG1hdHRlciB3aGF0IHRyaWdnZXIgdHlwZSAqLworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gcG9sbHMgdGhlIHN0YXRlIG9mIHRoZSBjYXB0dXJlIG9mIHRyYW5zY2VpdmVyIGRhdGEgdG8gdGhlIHRyYW5zY2VpdmVyIHBhY2tldCBSQU0uCisgKgorICogXHJldHVybiBTdGF0dXMgb2YgdGhlIHJlcXVlc3QsIERCR19SQU1fU1VDQ0VTUyBpZiBjYXB0dXJlIGlzIGNvbXBsZXRlLCBEQkdfUkFNX0NBUFRVUkVfTk9UX0NPTVBMRVRFIGlmIG5vdCBjb21wbGV0ZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitkYmdSYW1TdGF0dXNfdCBkYmdfcmFtX3BvbGxfY2FwdHVyZV9zdGF0dXModm9pZCk7IC8qIE5vbi1ibG9ja2luZyBjb21wbGV0aW9uIGNoZWNrLCBqdXN0IHJlYWRzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgY2FwdXJlICovCisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIGNhcHR1cmVkIGRhdGEgaW50byBhIHVzYWJsZSBvcmRlciBhbmQgY29waWVzIGZyb20gcGFja2V0IFJBTSB0byBub3JtYWwgUkFNLgorICoKKyAqIFxwYXJhbVtpbl0gZGJnX3BhZ2UgLSBUaGUgcGFnZSBzZWxlY3RvciAoREJHX1BBR0UpLgorICogXHBhcmFtW2luXSBidWZmZXJfc3pfYnl0ZXMgLSBUaGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciAoaW4gYnl0ZXMpCisgKiBccGFyYW1baW5dIHJlc3VsdF9idWZmZXIgLSBUaGUgcG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlciBvZiBhIHNpemUgbGFyZ2UgZW5vdWdoIGZvciB0aGUgc2FtcGxlcy4KKyAqCisgKiBccmV0dXJuIE5vbmUuCisgKgorICogXGRldGFpbHMgCisgKiBEYXRhIGlzIGNvcGllZCBmcm9tIHBhY2tldCBSQU0gaW4gYnl0ZXMgdG8gZW5zdXJlIG5vIGFjY2VzcyBwcm9ibGVtcy4gRGF0YSBpcyB1bnBhY2tlZCBmcm9tIHBhY2tldCBSQU0gCisgKiAoZWl0aGVyIHNlcXVlbnRpYWxseSBjYXB0dXJlZCBvciBzaW11bHRhbmVvdXNseSBjYXB0dXJlZCkgaW50byBhIGxpbmVhciBSQU0gYnVmZmVyIGluIHN5c3RlbSBSQU0uIAorICogSWYgYSBzdGFydCB0cmlnZ2VyIGlzIGVuYWJsZWQgdGhlbiB0aGUgZmlyc3QgYnVmZmVyX3N6X2J5dGVzIHRoYXQgYXJlIGNhcHR1cmVkIGFyZSBjb3BpZWQgb3V0LgorICogSWYgYSBzdG9wIHRyaWdnZXIgaXMgZW5hYmxlZCB0aGVuIHRoZSBsYXN0IGJ1ZmZlcl9zel9ieXRlcyB0aGF0IGFyZSBjYXB0dXJlZCBhcmUgY29waWVkIG91dC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RiZ1JhbVN0YXR1c190IGRiZ19yYW1fcG9zdHByb2NfY2FwdHVyZSh1aW50OF90IGRiZ19wYWdlLCB1aW50MTZfdCBidWZmZXJfc3pfYnl0ZXMsIHZvaWQgKiByZXN1bHRfYnVmZmVyKTsgLyogcG9zdHByb2Nlc3MgYSBjYXB0dXJlIHRvIHVucGFjayBkYXRhICovCisKKyNlbHNlCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gY2FwdHVyZXMgdHJhbnNjZWl2ZXIgZGF0YSB0byB0aGUgdHJhbnNjZWl2ZXIgcGFja2V0IFJBTS4KKyAqCisgKiBccGFyYW1baW5dIGRiZ19wYWdlIC0gVGhlIHBhZ2Ugc2VsZWN0b3IgKERCR19QQUdFKS4KKyAqIFxwYXJhbVtpbl0gYnVmZmVyX3N6X2J5dGVzIC0gVGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgKGluIGJ5dGVzKQorICogXHBhcmFtW2luXSByZXN1bHRfYnVmZmVyIC0gVGhlIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIgb2YgYSBzaXplIGxhcmdlIGVub3VnaCBmb3IgdGhlIHNhbXBsZXMuCisgKgorICogXHJldHVybiBOb25lLgorICoKKyAqIFxkZXRhaWxzIAorICogVGhlIGNhcHR1cmUgdG8gcGFja2V0IFJBTSBhbHdheXMgY2FwdHVyZXMgYSBmdWxsIFBLVF9SQU0gd29ydGggb2Ygc2FtcGxlcy4gVGhlIHNhbXBsZXMgd2lsbCBiZSAKKyAqIGNvcGllZCB0byB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgcmVzdWx0X2J1ZmZlciBwYXJhbWV0ZXIgdW50aWwgYnVmZmVyX3N6X2J5dGVzIHdvcnRoIG9mIGRhdGEgaGF2ZQorICogYmVlbiBjb3BpZWQuIERhdGEgd2lsbCBiZSBjb3BpZWQgCisgKiBOT1RFOiBUaGlzIHJvdXRpbmUgaGFzIGEgc2xpZ2h0IGhhemFyZCBvZiBnZXR0aW5nIHN0dWNrIHdhaXRpbmcgZm9yIGRlYnVnIFJBTSB0byBmaWxsIHVwIHdoZW4gUlggaGFzCisgKiBub3QgYmVlbiBlbmFibGVkIG9yIFJYIGVuZHMgYmVmb3JlIHRoZSBSQU0gZmlsbHMgdXAgKHN1Y2ggYXMgd2hlbiBjYXB0dXJpbmcgcGFja2V0IGRhdGEgKS4gSXQgaXMgCisgKiBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggbWFudWFsbHkgdHJpZ2dlcmVkIFJYIHdoZXJlIFJYIGRhdGEgd2lsbCBjb250aW51ZSBhcyBsb25nIGFzIG5lZWRlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RiZ1JhbVN0YXR1c190IGRiZ19yYW1fY2FwdHVyZSh1aW50OF90IGRiZ19wYWdlLCB1aW50MTZfdCBidWZmZXJfc3pfYnl0ZXMsIHZvaWQgKiByZXN1bHRfYnVmZmVyKTsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKy8qIEB9ICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfREJHX1JBTV9DQVBUVVJFX0hfICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZG1hX2NhcHR1cmUuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZG1hX2NhcHR1cmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmVmZmZmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9kbWFfY2FwdHVyZS5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJNS1c0MVo0LmgiCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKyNpbmNsdWRlICJmc2xfZWRtYS5oIgorI2luY2x1ZGUgImZzbF9kbWFtdXguaCIKKyNpbmNsdWRlICJkbWFfY2FwdHVyZS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBLVF9SQU1fU0laRV8xNkJfV09SRFMgICg1NDQpIC8qIE51bWJlciBvZiAxNmJpdCBlbnRyaWVzIGluIGVhY2ggUGFja2V0IFJBTSAqLworI2RlZmluZSBTSUdOX0VYVE5EXzEyXzE2KHgpICAgICAoKHgpIHwgKCgoeCkgJiAweDgwMCkgPyAweEYwMDAgOiAweDApKQorI2RlZmluZSBTSUdOX0VYVE5EXzVfOCh4KSAgICAgICAoKHgpIHwgKCgoeCkgJiAweDEwKSA/IDB4RTAgOiAweDApKQorCitjb25zdCBkbWFfY2FwdHVyZV9sdXRfdCBkbWFfdGFibGUgW0RNQV9QQUdFX01BWF0gPSAKK3sKKyAgLyogRE1BX1BBR0UgICAgICAgICAgICAgICBPU1IgKi8KKyAgICB7RE1BX1BBR0VfSURMRSwgICAgICAgICAweEZ9LAorICAgIHtETUFfUEFHRV9SWERJR0lRLCAgICAgIDB4NH0sCisgICAge0RNQV9QQUdFX1JYRElHSSwgICAgICAgMHgyfSwKKyAgICB7RE1BX1BBR0VfUlhESUdRLCAgICAgICAweDJ9LAorICAgIHtETUFfUEFHRV9SQVdBRENJUSwgICAgIDB4Mn0sCisgICAge0RNQV9QQUdFX1JBV0FEQ0ksICAgICAgMHgxfSwKKyAgICB7RE1BX1BBR0VfUkFXQURDUSwgICAgICAweDF9LAorICAgIHtETUFfUEFHRV9EQ0VTVElRLCAgICAgIDB4NH0sCisgICAge0RNQV9QQUdFX0RDRVNUSSwgICAgICAgMHgyfSwKKyAgICB7RE1BX1BBR0VfRENFU1RRLCAgICAgICAweDJ9LAorICAgIHtETUFfUEFHRV9SWElOUEgsICAgICAgIDB4MX0sCisgICAge0RNQV9QQUdFX0RFTU9EX0hBUkQsICAgMHhGfSwKKyAgICB7RE1BX1BBR0VfREVNT0RfU09GVCwgICAweEZ9LAorICAgIHtETUFfUEFHRV9ERU1PRF9EQVRBLCAgIDB4Rn0sCisgICAge0RNQV9QQUdFX0RFTU9EX0NGT19QSCwgMHhGfSwgIAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSW5pdGlhbGl6ZSB0byBhbiBpbnZhbGlkIHZhbHVlLiAqLwordWludDhfdCBvc3JfdGVtcCA9IDB4RjsKK2VkbWFfaGFuZGxlX3QgZ19FRE1BX0hhbmRsZTsKK3ZvbGF0aWxlIGJvb2wgZ19UcmFuc2Zlcl9Eb25lID0gZmFsc2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBVc2VyIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBFRE1BIHRyYW5zZmVyLiAqLwordm9pZCBFRE1BX0NhbGxiYWNrKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqcGFyYW0sIGJvb2wgdHJhbnNmZXJEb25lLCB1aW50MzJfdCB0Y2RzKQoreworICAgIGlmICh0cmFuc2ZlckRvbmUpCisgICAgeworICAgICAgICBnX1RyYW5zZmVyX0RvbmUgPSB0cnVlOworICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYV9pbml0KHZvaWQpCit7ICAgCisgICAgZWRtYV9jb25maWdfdCBkbWFDb25maWc7CisgICAgCisgICAgLyogQ29uZmlndXJlIERNQU1VWCAqLworICAgIERNQU1VWF9Jbml0KERNQU1VWDApOworICAgIERNQU1VWF9TZXRTb3VyY2UoRE1BTVVYMCwgMCwgMTEpOworICAgIERNQU1VWF9FbmFibGVDaGFubmVsKERNQU1VWDAsIDApOworICAgIAorICAgIC8qIENvbmZpZ3VyZSBFRE1BIHRyYW5zZmVyICovCisgICAgRURNQV9HZXREZWZhdWx0Q29uZmlnKCZkbWFDb25maWcpOworICAgIEVETUFfSW5pdChETUEwLCAmZG1hQ29uZmlnKTsKKyAgICBFRE1BX0NyZWF0ZUhhbmRsZSgmZ19FRE1BX0hhbmRsZSwgRE1BMCwgMCk7CisgICAgRURNQV9TZXRDYWxsYmFjaygmZ19FRE1BX0hhbmRsZSwgRURNQV9DYWxsYmFjaywgTlVMTCk7CisgICAgCisgICAgLyogVHVybnMgb24gY2xvY2tpbmcgdG8gRE1BL0RCRyBibG9ja3MgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgfD0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRE1BX0RURVNUX0VOX01BU0s7CisgICAgLyogU2F2ZSBjdXJyZW50IG9zciBjb25maWcgKi8KKyAgICBvc3JfdGVtcCA9IChYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1JfTUFTSykgPj4gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfT1NSX1NISUZUOworCisgICAgLyogU29tZSBleHRlcm5hbCBjb2RlIG11c3QgcGVyZm9ybSB0aGUgUlggd2FybXVwIHJlcXVlc3QgKi8KK30KKworZG1hU3RhdHVzX3QgZG1hX3dhaXRfZm9yX2NvbXBsZXRlKHZvaWQpCit7CisgICAgZG1hU3RhdHVzX3Qgc3RhdHVzID0gRE1BX1NVQ0NFU1M7CisgICAgCisgICAgLyogV2FpdCBmb3IgRURNQSB0cmFuc2ZlciBmaW5pc2ggKi8KKyAgICB3aGlsZSAoZ19UcmFuc2Zlcl9Eb25lICE9IHRydWUpCisgICAgeworICAgICAgICAvKiBUaW1lb3V0ICovCisgICAgICAgIGlmIChYQ1ZSX01JU0MtPkRNQV9DVFJMICYgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9USU1FRF9PVVRfTUFTSykKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2xlYXIgZmxhZyAqLworICAgICAgICAgICAgWENWUl9NSVNDLT5ETUFfQ1RSTCB8PSBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RJTUVEX09VVF9NQVNLOworCisgICAgICAgICAgICAvKiBDYXB0dXJlIGVycm9yICovCisgICAgICAgICAgICBzdGF0dXMgPSBETUFfQ0FQVFVSRV9OT1RfQ09NUExFVEU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qIFJlbGVhc2UgRE1BIG1vZHVsZSAqLworICAgIGRtYV9yZWxlYXNlKCk7CisgICAgCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworZG1hU3RhdHVzX3QgZG1hX3BvbGxfY2FwdHVyZV9zdGF0dXModm9pZCkKK3sgIAorICBkbWFTdGF0dXNfdCBzdGF0dXMgPSBETUFfU1VDQ0VTUzsKKyAgCisgIGlmIChnX1RyYW5zZmVyX0RvbmUgIT0gdHJ1ZSkKKyAgeworICAgICAgLyogVGltZW91dCAqLworICAgICAgaWYgKFhDVlJfTUlTQy0+RE1BX0NUUkwgJiBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RJTUVEX09VVF9NQVNLKQorICAgICAgeworICAgICAgICAgIC8qIENsZWFyIGZsYWcgKi8KKyAgICAgICAgICBYQ1ZSX01JU0MtPkRNQV9DVFJMIHw9IFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVElNRURfT1VUX01BU0s7CisgICAgICAgICAgLyogUmVsZWFzZSBETUEgbW9kdWxlICovCisgICAgICAgICAgZG1hX3JlbGVhc2UoKTsKKyAgICAgICAgICAvKiBDYXB0dXJlIGVycm9yICovCisgICAgICAgICAgc3RhdHVzID0gRE1BX0NBUFRVUkVfTk9UX0NPTVBMRVRFOworICAgICAgfQorICB9CisgIAorICByZXR1cm4gc3RhdHVzOworfQorCit2b2lkIGRtYV9yZWxlYXNlKHZvaWQpCit7ICAgCisgICAgLyogUmVzdGFydCBmbGFnICovCisgICAgZ19UcmFuc2Zlcl9Eb25lID0gZmFsc2U7CisgICAgCisgICAgLyogRGlzYWJsZSBETUEgKi8KKyAgICBYQ1ZSX01JU0MtPkRNQV9DVFJMICY9IH5YQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1BBR0VfTUFTSzsgCisgICAgCisgICAgLyogR2Fza2V0IGJ5cGFzcyBkaXNhYmxlICovCisgICAgUlNJTS0+Q09OVFJPTCAmPSB+KFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfRU5fTUFTSyB8IAorICAgICAgICAgICAgICAgICAgICAgICBSU0lNX0NPTlRST0xfUkFESU9fR0FTS0VUX0JZUEFTU19PVlJEX01BU0spOyAKKyAgICAKKyAgICAvKiBSZXN0b3JlIHByZXZpb3VzIG9zciBjb25maWcgKGlmIGFueSkgKi8KKyAgICBpZiAob3NyX3RlbXAgIT0gMHhGKQorICAgIHsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMICY9IH5YQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1JfTUFTSzsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMIHw9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUihvc3JfdGVtcCk7CisgICAgICAgIG9zcl90ZW1wID0gMHhGOworICAgIH0KK30KKworI2lmIFJBRElPX0lTX0dFTl8zUDAKK2RtYVN0YXR1c190IGRtYV9zdGFydF9jYXB0dXJlKHVpbnQ4X3QgZGJnX3BhZ2UsIHVpbnQxNl90IGJ1ZmZlcl9zel9ieXRlcywgdm9pZCAqIHJlc3VsdF9idWZmZXIsIGRtYVN0YXJ0VHJpZ2dlclR5cGUgc3RhcnRfdHJpZykKK3sKKwkKK30KKyNlbHNlCitkbWFTdGF0dXNfdCBkbWFfY2FwdHVyZSh1aW50OF90IGRtYV9wYWdlLCB1aW50MTZfdCBidWZmZXJfc3pfYnl0ZXMsIHVpbnQzMl90ICogcmVzdWx0X2J1ZmZlcikKK3sKKyAgICBkbWFTdGF0dXNfdCBzdGF0dXMgPSBETUFfU1VDQ0VTUzsKKyAgICAKKyAgICAvKiBTb21lIGV4dGVybmFsIGNvZGUgbXVzdCBwZXJmb3JtIHRoZSBSWCB3YXJtdXAgcmVxdWVzdCBhZnRlciB0aGUgZF9pbml0KCkgY2FsbC4gKi8KKyAgICBpZiAocmVzdWx0X2J1ZmZlciA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gRE1BX0ZBSUxfTlVMTF9QT0lOVEVSOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoYnVmZmVyX3N6X2J5dGVzID4gKDQwOTYpKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBETUFfRkFJTF9TQU1QTEVfTlVNX0xJTUlUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgdGVtcCA9IFhDVlJfTUlTQy0+RE1BX0NUUkwgJiB+WENWUl9DVFJMX0RNQV9DVFJMX0RNQV9QQUdFX01BU0s7CisgICAgICAgICAgICBlZG1hX3RyYW5zZmVyX2NvbmZpZ190IHRyYW5zZmVyQ29uZmlnOworICAgICAgICAgICAgCisgICAgICAgICAgICAvKiBXYWl0IGZvciBOZXR3b3JrIEFkZHJlc3MgTWF0Y2ggdG8gc3RhcnQgY2FwdHVyaW5nICovCisvLyAgICAgICAgICAgIHdoaWxlICghKChYQ1ZSX01JU0MtPkRNQV9DVFJMICYgWENWUl9DVFJMX0QgIE1BX0NUUkxfRE1BX1RSSUdHRVJSRURfTUFTSykpKTsgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoZG1hX3BhZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIERNQV9QQUdFX1JYRElHSVE6CisgICAgICAgICAgICBjYXNlIERNQV9QQUdFX1JBV0FEQ0lROgorICAgICAgICAgICAgY2FzZSBETUFfUEFHRV9EQ0VTVElROgorICAgICAgICAgICAgY2FzZSBETUFfUEFHRV9SWElOUEg6CisgICAgICAgICAgICBjYXNlIERNQV9QQUdFX0RFTU9EX0NGT19QSDoKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBTZXQgT1NSICovCisgICAgICAgICAgICAgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMICY9IH5YQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1JfTUFTSzsKKyAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgfD0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfT1NSKGRtYV90YWJsZVtkbWFfcGFnZV0ub3NyKTsgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogU2luZ2xlIHJlcXVlc3QgbW9kZSAqLworICAgICAgICAgICAgICAgIFhDVlJfTUlTQy0+RE1BX0NUUkwgfD0gWENWUl9DVFJMX0RNQV9DVFJMX1NJTkdMRV9SRVFfTU9ERV9NQVNLOworICAgICAgICAgICAgICAgIFhDVlJfTUlTQy0+RE1BX0NUUkwgJj0gflhDVlJfQ1RSTF9ETUFfQ1RSTF9CWVBBU1NfRE1BX1NZTkNfTUFTSzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBHYXNrZXQgYnlwYXNzIGRpc2FibGUgKi8KKyAgICAgICAgICAgICAgICBSU0lNLT5DT05UUk9MICY9IH4oUlNJTV9DT05UUk9MX1JBRElPX0dBU0tFVF9CWVBBU1NfT1ZSRF9FTl9NQVNLIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfTUFTSyk7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRE1BX1BBR0VfREVNT0RfSEFSRDoKKyAgICAgICAgICAgIGNhc2UgRE1BX1BBR0VfREVNT0RfU09GVDoKKyAgICAgICAgICAgIGNhc2UgRE1BX1BBR0VfREVNT0RfREFUQToKKyAgICAgICAgICAgICAgICAvKiBEYXRhIHJhdGUgaXMgdG9vIGxvdyB0byB1c2UgU2luZ2xlIFJlcSBtb2RlICovCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogUmVxdWVzdCBwZXIgc2FtcGxlIG1vZGUgKi8KKyAgICAgICAgICAgICAgICBYQ1ZSX01JU0MtPkRNQV9DVFJMICY9IFhDVlJfQ1RSTF9ETUFfQ1RSTF9TSU5HTEVfUkVRX01PREVfTUFTSzsKKyAgICAgICAgICAgICAgICBYQ1ZSX01JU0MtPkRNQV9DVFJMIHw9IFhDVlJfQ1RSTF9ETUFfQ1RSTF9CWVBBU1NfRE1BX1NZTkNfTUFTSzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBHYXNrZXQgYnlwYXNzIGVuYWJsZSAqLworICAgICAgICAgICAgICAgIFJTSU0tPkNPTlRST0wgfD0gKFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfRU5fTUFTSyB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfTUFTSyk7ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRE1BX1BBR0VfSURMRToKKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgIAorICAgICAgICAgICAgICAgIC8qIElsbGVnYWwgY2FwdHVyZSBwYWdlIHJlcXVlc3QgKi8KKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBETUFfRkFJTF9QQUdFX0VSUk9SOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc3RhdHVzID09IERNQV9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNlbGVjdCBETUFfcGFnZSAqLworICAgICAgICAgICAgICAgIFhDVlJfTUlTQy0+RE1BX0NUUkwgPSAgdGVtcCB8IFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfUEFHRShkbWFfcGFnZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogRURNQSB0cmFuc2ZlciBjb25maWcgKi8KKyAgICAgICAgICAgICAgICBFRE1BX1ByZXBhcmVUcmFuc2ZlcigmdHJhbnNmZXJDb25maWcsIC8qIENvbmZpZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKSZYQ1ZSX01JU0MtPkRNQV9EQVRBLCAvKiBTb3VyY2UgYWRkcmVzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1aW50MzJfdCksIC8qIFNvdXJjZSBhZGRyZXNzIHdpZHRoKGJ5dGVzKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9idWZmZXIsIC8qIERlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKnJlc3VsdF9idWZmZXIpLCAvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIHdpZHRoICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90KSwgLyogVHJhbnNmZXIgYnl0ZXMgcGVyIGNoYW5uZWwgcmVxdWVzdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zel9ieXRlcywgLyogQnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRURNQV9QZXJpcGhlcmFsVG9NZW1vcnkpOyAvKiBUcmFuc2ZlciB0eXBlICovCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRURNQV9TdWJtaXRUcmFuc2ZlcigmZ19FRE1BX0hhbmRsZSwgJnRyYW5zZmVyQ29uZmlnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRURNQV9TdGFydFRyYW5zZmVyKCZnX0VETUFfSGFuZGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gc3RhdHVzOwkKK30KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2RtYV9jYXB0dXJlLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2RtYV9jYXB0dXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4NjM0YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZG1hX2NhcHR1cmUuaApAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9ETUFfQ0FQVFVSRV9IXworI2RlZmluZSBfRE1BX0NBUFRVUkVfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyNpbmNsdWRlICJLMzJXMDQyUzFNMl9NMFAuaCIKKyNlbHNlCisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgeGN2cgorICogQHsKKyAqLworCisvKiEgQGZpbGUqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQYWdlIGRlZmluaXRpb25zICovCisjZGVmaW5lIERNQV9QQUdFX0lETEUgICAgICAgICAgICgweDAwKQorI2RlZmluZSBETUFfUEFHRV9SWERJR0lRICAgICAgICAoMHgwMSkKKyNkZWZpbmUgRE1BX1BBR0VfUlhESUdJICAgICAgICAgKDB4MDIpCisjZGVmaW5lIERNQV9QQUdFX1JYRElHUSAgICAgICAgICgweDAzKQorI2RlZmluZSBETUFfUEFHRV9SQVdBRENJUSAgICAgICAoMHgwNCkKKyNkZWZpbmUgRE1BX1BBR0VfUkFXQURDSSAgICAgICAgKDB4MDUpCisjZGVmaW5lIERNQV9QQUdFX1JBV0FEQ1EgICAgICAgICgweDA2KQorI2RlZmluZSBETUFfUEFHRV9EQ0VTVElRICAgICAgICAoMHgwNykKKyNkZWZpbmUgRE1BX1BBR0VfRENFU1RJICAgICAgICAgKDB4MDgpCisjZGVmaW5lIERNQV9QQUdFX0RDRVNUUSAgICAgICAgICgweDA5KQorI2RlZmluZSBETUFfUEFHRV9SWElOUEggICAgICAgICAoMHgwQSkKKyNkZWZpbmUgRE1BX1BBR0VfREVNT0RfSEFSRCAgICAgKDB4MEIpCisjZGVmaW5lIERNQV9QQUdFX0RFTU9EX1NPRlQgICAgICgweDBDKQorI2RlZmluZSBETUFfUEFHRV9ERU1PRF9EQVRBICAgICAoMHgwRCkKKyNkZWZpbmUgRE1BX1BBR0VfREVNT0RfQ0ZPX1BIICAgKDB4MEUpCisKKyNkZWZpbmUgRE1BX1BBR0VfTUFYICAgKDB4MEYpCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDhfdCBkbWFfcGFnZTsKKyAgICB1aW50OF90IG9zcjsKK30gZG1hX2NhcHR1cmVfbHV0X3Q7CisKK3R5cGVkZWYgZW51bSBfZG1hU3RhdHVzCit7CisgICAgRE1BX1NVQ0NFU1MgPSAwLAorICAgIERNQV9GQUlMX1NBTVBMRV9OVU1fTElNSVQgPSAxLAorICAgIERNQV9GQUlMX1BBR0VfRVJST1IgPSAyLAorICAgIERNQV9GQUlMX05VTExfUE9JTlRFUiA9IDMsCisgICAgRE1BX0lOVkFMSURfVFJJR19TRVRUSU5HID0gNCwKKyAgICBETUFfRkFJTF9OT1RfRU5PVUdIX1NBTVBMRVMgPSA1LAorICAgIERNQV9DQVBUVVJFX05PVF9DT01QTEVURSA9IDYsICAgICAvKiBOb3QgYW4gZXJyb3IgcmVzcG9uc2UsIGJ1dCBhbiBpbmRpY2F0aW9uIHRoYXQgY2FwdHVyZSBpc24ndCBjb21wbGV0ZSBmb3Igc3RhdHVzIHBvbGxpbmcuICovCit9IGRtYVN0YXR1c190OyAKKworI2lmIFJBRElPX0lTX0dFTl8zUDAKK3R5cGVkZWYgZW51bSBkbWFTdGFydFRyaWdnZXJUeXBlCit7CisgICAgTk9fRE1BX1NUQVJUX1RSSUcgPSAwLAorICAgIFNUQVJUX0RNQV9PTl9GU0tfUFJFQU1CTEVfRk9VTkQgPSAxLAorICAgIFNUQVJUX0RNQV9PTl9GU0tfQUFfTUFUQ0ggPSAyLAorICAgIFNUQVJUX0RNQV9PTl9aQkRFTU9EX1BSRUFNQkxFX0ZPVU5EID0gMywKKyAgICBTVEFSVF9ETUFfT05fWkJERU1PRF9TRkRfTUFUQ0ggPSA0LAorICAgIFNUQVJUX0RNQV9PTl9BR0NfRENPQ19HQUlOX0NIRyA9IDUsCisgICAgU1RBUlRfRE1BX09OX1RTTV9SWF9ESUdfRU4gPSA2LAorICAgIFNUQVJUX09ETUFfTl9UU01fU1BBUkUyX0VOID0gNywKKyAgICBJTlZBTElEX0RNQV9TVEFSVF9UUklHID0gOAorfSBkbWFTdGFydFRyaWdnZXJUeXBlOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgZm9yIHNhbXBsZSBjYXB0dXJlIHRvIHN5c3RlbSBSQU0gdXNpbmcgRE1BLgorKgorKiBccmV0dXJuIE5vbmUuCisqCisqIFxkZXRhaWxzIAorKiBUaGlzIHJvdXRpbmUgYXNzdW1lcyB0aGF0IHNvbWUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBjYWxsaW5nIHJvdXRpbmUgYm90aCBzZXQKKyogdGhlIGNoYW5uZWwgYW5kIGZvcmNlIFJYIHdhcm11cCBiZWZvcmUgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgY2FwdHVyZSByb3V0aW5lLgorKiBUaGlzIHJvdXRpbmUgbWF5IGNvcnJ1cHQgdGhlIE9TUiB2YWx1ZSBvZiB0aGUgc3lzdGVtIGJ1dCByZXN0b3JlcyBpdCBpbiB0aGUgOjpkbWFfcmVsZWFzZSgpIHJvdXRpbmUuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hX2luaXQodm9pZCk7CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgYmxvY2tpbmcgd2FpdCBmb3IgY29tcGxldGlvbiBvZiB0aGUgY2FwdHVyZSBvZiB0cmFuc2NlaXZlciBkYXRhIHRvIHRoZSBzeXN0ZW0gUkFNLgorKgorKiBccmV0dXJuIFN0YXR1cyBvZiB0aGUgcmVxdWVzdCwgRE1BX1NVQ0NFU1MgaWYgY2FwdHVyZSBpcyBjb21wbGV0ZS4KKyoKKyogXGRldGFpbHMgCisqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSB3YWl0IGxvb3AgZm9yIGNhcHR1cmUgY29tcGxldGlvbiBhbmQgbWF5IHRha2UgYW4gaW5kZXRlcm1pbmF0ZSBhbW91bnQgb2YgdGltZSBmb3IgCisqIHNvbWUgY2FwdHVyZSB0cmlnZ2VyIHR5cGVzLgorKiBCbG9ja2luZyB3YWl0IGZvciBjYXB0dXJlIGNvbXBsZXRpb24sIG5vIG1hdHRlciB3aGF0IHRyaWdnZXIgdHlwZS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZG1hU3RhdHVzX3QgZG1hX3dhaXRfZm9yX2NvbXBsZXRlKHZvaWQpOworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBwb2xscyB0aGUgc3RhdGUgb2YgdGhlIGNhcHR1cmUgb2YgdHJhbnNjZWl2ZXIgZGF0YSB0byB0aGUgdHJhbnNjZWl2ZXIgcGFja2V0IFJBTS4KKyoKKyogXHJldHVybiBTdGF0dXMgb2YgdGhlIHJlcXVlc3QsIERNQV9TVUNDRVNTIGlmIGNhcHR1cmUgaXMgY29tcGxldGUsIERNQV9DQVBUVVJFX05PVF9DT01QTEVURSBpZiBub3QgY29tcGxldGUuCisqCisqIFxkZXRhaWxzCisqIE5vbi1ibG9ja2luZyBjb21wbGV0aW9uIGNoZWNrLCBqdXN0IHJlYWRzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgY2FwdXJlLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitkbWFTdGF0dXNfdCBkbWFfcG9sbF9jYXB0dXJlX3N0YXR1cyh2b2lkKTsKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYW55IHN0YXRlIHJlc3RvcmF0aW9uIGF0IHRoZSBjb21wbGV0aW9uIG9mIERNQSBjYXB0dXJlIHRvIHN5c3RlbSBSQU0uCisqIAorKiBcZGV0YWlscworKiBCZWNhdXNlIERNQSBjYXB0dXJlIG9ubHkgd29ya3MgYXQgc3BlY2lmaWMgT1NSIHZhbHVlcyB0aGUgRE1BIGNhcHR1cmUgcm91dGluZXMgbXVzdCBmb3JjZSB0aGUgT1NSIHRvIHRoZQorKiBzdXBwb3J0ZWQgdmFsdWUgd2hlbiBjYXB0dXJpbmcgZGF0YS4gVGhpcyBmb3JjZWQgT1NSIHZhbHVlIG11c3QgYmUgcmVzdG9yZWQgYWZ0ZXIgRE1BIG9wZXJhdGlvbnMgYXJlIGNvbXBsZXRlLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYV9yZWxlYXNlKHZvaWQpOworCisjaWYgUkFESU9fSVNfR0VOXzNQMAorLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gaW5pdGlhdGVzIHRoZSBjYXB0dXJlIG9mIHRyYW5zY2VpdmVyIGRhdGEgdG8gdGhlIHN5c3RlbSBSQU0uCisqCisqIFxwYXJhbVtpbl0gZGJnX3BhZ2UgLSBUaGUgcGFnZSBzZWxlY3RvciAoREJHX1BBR0UpLgorKiBccGFyYW1baW5dIGJ1ZmZlcl9zel9ieXRlcyAtIFRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyIChpbiBieXRlcykKKyogXHBhcmFtW2luXSByZXN1bHRfYnVmZmVyIC0gVGhlIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIgb2YgYSBzaXplIGxhcmdlIGVub3VnaCBmb3IgdGhlIHNhbXBsZXMuCisqIFxwYXJhbVtpbl0gZGJnX3N0YXJ0X3RyaWdnZXIgLSBUaGUgdHJpZ2dlciB0byBzdGFydCBhY3F1aXNpdGlvbiAobXVzdCBiZSAibm8gdHJpZ2dlciIgaWYgYSBzdG9wIHRyaWdnZXIgaXMgZW5hYmxlZCkuCisqCisqIFxyZXR1cm4gU3RhdHVzIG9mIHRoZSByZXF1ZXN0LgorKgorKiBcZGV0YWlscyAKKyogVGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlIHByb2Nlc3Mgb2YgY2FwdHVyaW5nIGRhdGEgdG8gdGhlIHN5c3RlbSBSQU0uIERlcGVuZGluZyB1cG9uIHRoZSBzdGFydCAgdHJpZ2dlcgorKiBzZXR0aW5ncywgdGhlIGFjdHVhbCBjYXB0dXJlIHByb2Nlc3MgY2FuIHRha2UgYW4gaW5kZXRlcm1pbmF0ZSBhbW91bnQgb2YgdGltZS4gT3RoZXIgQVBJcyBhcmUgcHJvdmlkZWQgdG8gCisqIHBlcmZvcm0gYSBibG9ja2luZyB3YWl0IGZvciBjb21wbGV0aW9uIG9yIGFsbG93IHBvbGxpbmcgZm9yIGNvbXBsZXRpb24gb2YgdGhlIGNhcHR1cmUuCisqIEFmdGVyIGFueSBjYXB0dXJlIGhhcyBjb21wbGV0ZWQsIGRhdGEgd2lsbCBiZSBsZWZ0IGluIHN5c3RlbSBSQU0uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RtYVN0YXR1c190IGRtYV9zdGFydF9jYXB0dXJlKHVpbnQ4X3QgZGJnX3BhZ2UsIHVpbnQxNl90IGJ1ZmZlcl9zel9ieXRlcywgdm9pZCAqIHJlc3VsdF9idWZmZXIsIGRtYVN0YXJ0VHJpZ2dlclR5cGUgc3RhcnRfdHJpZyk7CisKKyNlbHNlIC8qIEdlbiAyLjAgdmVyc2lvbiAqLworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gY2FwdHVyZXMgdHJhbnNjZWl2ZXIgZGF0YSB0byB0aGUgdHJhbnNjZWl2ZXIgcGFja2V0IFJBTS4KKyoKKyogXHBhcmFtW2luXSBkbWFfcGFnZSAtIFRoZSBwYWdlIHNlbGVjdG9yIChEQkdfUEFHRSkuCisqIFxwYXJhbVtpbl0gYnVmZmVyX3N6X2J5dGVzIC0gVGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgKGluIGJ5dGVzKQorKiBccGFyYW1baW5dIHJlc3VsdF9idWZmZXIgLSBUaGUgcG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlciBvZiBhIHNpemUgbGFyZ2UgZW5vdWdoIGZvciB0aGUgc2FtcGxlcy4KKyoKKyogXHJldHVybiBOb25lLgorKgorKiBcZGV0YWlscyAKKyogVGhlIGNhcHR1cmUgdG8gc3lzdGVtIFJBTSAuIFRoZSBzYW1wbGVzIHdpbGwgYmUgCisqIGNvcGllZCB0byB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgcmVzdWx0X2J1ZmZlciBwYXJhbWV0ZXIgdW50aWwgYnVmZmVyX3N6X2J5dGVzIHdvcnRoIG9mIGRhdGEgaGF2ZQorKiBiZWVuIGNvcGllZC4gRGF0YSB3aWxsIGJlIGNvcGllZCAKKyogTk9URTogVGhpcyByb3V0aW5lIGhhcyBhIHNsaWdodCBoYXphcmQgb2YgZ2V0dGluZyBzdHVjayB3YWl0aW5nIGZvciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBidXRlcyB3aGVuIFJYIGhhcworKiBub3QgYmVlbiBlbmFibGVkIG9yIFJYIGVuZHMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgYnl0ZSBjb3VudCBpcyBhY2hpZXZlZCAoc3VjaCBhcyB3aGVuIGNhcHR1cmluZyBwYWNrZXQgZGF0YSApLiBJdCBpcyAKKyogaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIG1hbnVhbGx5IHRyaWdnZXJlZCBSWCB3aGVyZSBSWCBkYXRhIHdpbGwgY29udGludWUgYXMgbG9uZyBhcyBuZWVkZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RtYVN0YXR1c190IGRtYV9jYXB0dXJlKHVpbnQ4X3QgZG1hX3BhZ2UsIHVpbnQxNl90IGJ1ZmZlcl9zel9ieXRlcywgdWludDMyX3QgKiByZXN1bHRfYnVmZmVyKTsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKy8qIEB9ICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRE1BX0NBUFRVUkVfSF8gKi8KKworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2ZzbF94Y3ZyLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2ZzbF94Y3ZyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjMTUzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZnNsX3hjdnIuYwpAQCAtMCwwICsxLDIxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKyNpbmNsdWRlICJmc2xfeGN2cl90cmltLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgImlmcl9yYWRpby5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIGNoYW5uZWxNYXBUYWJsZVNpemUgKDEyOFUpCisjZGVmaW5lIGdQbGxEZW5vbV9jICAgICAgICAgMHgwMjAwMDAwMFUgLyogRGVub21pbmF0b3IgaXMgYSBjb25zdGFudCB2YWx1ZSAqLworI2RlZmluZSBBQlMoeCkgKCh4KSA+IDAgPyAoeCkgOiAtKHgpKQorCisjaWZuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRSAgICAgICAgICAgICAgICAgICAgICAgICh0cnVlKQorI2VuZGlmCisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgICAgICAgICAgICAgICAgICAgICAgIChmYWxzZSkKKyNlbmRpZgorI2RlZmluZSBSRl9PU0NJTExBVE9SX1NUQVlTX09OICAgICAoZmFsc2UpIC8qIENvbnRyb2wgd2hldGhlciBSRl9PU0MgY2FuIGJlIGxlZnQgb24gYWxsIHRoZSB0aW1lLiAqLworI2RlZmluZSBSRl9PU0NJTExBVE9SX1JFQURZICAgICAgICAoKFJTSU0tPkNPTlRST0wgJiBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX01BU0spICE9IDB4MFUpCisKKyNpZm5kZWYgRVhURVJOQUxfQ0xPQ0tfR0VOCisjZGVmaW5lIEVYVEVSTkFMX0NMT0NLX0dFTiAgIDAKKyNlbmRpZgorCisjZGVmaW5lIEFOVF9BICAgMQorI2RlZmluZSBBTlRfQiAgIDAKKworI2lmbmRlZiBYQ1ZSX0NPRVhfUkZfQUNUSVZFX1BJTgorI2RlZmluZSBYQ1ZSX0NPRVhfUkZfQUNUSVZFX1BJTiBBTlRfQgorI2VuZGlmIC8qIFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOICovCisKK3R5cGVkZWYgc3RydWN0IHhjdnJfcGxsQ2hhbm5lbF90YWcKK3sKKyAgICB1bnNpZ25lZCBpbnQgaW50ZWdlcjsKKyAgICB1bnNpZ25lZCBpbnQgbnVtZXJhdG9yOworfSB4Y3ZyX3BsbENoYW5uZWxfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIFhjdnJQYW5pYyhYQ1ZSX1BBTklDX0lEX1QgcGFuaWNfaWQsIHVpbnQzMl90IHBhbmljX2FkZHJlc3MpOwordm9pZCByZl9vc2Nfc3RhcnR1cCh2b2lkKTsKK3ZvaWQgcmZfb3NjX3NodXRkb3duKHZvaWQpOworZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlKTsKK2V4dGVybiBkb3VibGUgcm91bmQgKGRvdWJsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgcGFuaWNfZnB0ciBzX1BhbmljRnVuY3Rpb25QdHIgPSBOVUxMOworY29uc3QgeGN2cl9wbGxDaGFubmVsX3QgbWFwVGFibGUgW2NoYW5uZWxNYXBUYWJsZVNpemVdID0KK3sKKyAgICB7MHgwMDAwMDAyNSwgMHgwN0MwMDAwMH0sIC8qIDAgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwN0M4MDAwMH0sIC8qIDEgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwN0QwMDAwMH0sIC8qIDIgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwN0Q4MDAwMH0sIC8qIDMgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwN0UwMDAwMH0sIC8qIDQgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwN0U4MDAwMH0sIC8qIDUgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwN0YwMDAwMH0sIC8qIDYgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwN0Y4MDAwMH0sIC8qIDcgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDAwMDAwMH0sIC8qIDggKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDA4MDAwMH0sIC8qIDkgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDEwMDAwMH0sIC8qIDEwICovCisgICAgezB4MDAwMDAwMjUsIDB4MDAxODAwMDB9LCAvKiAxMSAqLworICAgIHsweDAwMDAwMDI1LCAweDAwMjAwMDAwfSwgLyogMTIgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDI4MDAwMH0sIC8qIDEzICovCisgICAgezB4MDAwMDAwMjUsIDB4MDAzMDAwMDB9LCAvKiAxNCAqLworICAgIHsweDAwMDAwMDI1LCAweDAwMzgwMDAwfSwgLyogMTUgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDQwMDAwMH0sIC8qIDE2ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDA0ODAwMDB9LCAvKiAxNyAqLworICAgIHsweDAwMDAwMDI1LCAweDAwNTAwMDAwfSwgLyogMTggKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDU4MDAwMH0sIC8qIDE5ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDA2MDAwMDB9LCAvKiAyMCAqLworICAgIHsweDAwMDAwMDI1LCAweDAwNjgwMDAwfSwgLyogMjEgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDcwMDAwMH0sIC8qIDIyICovCisgICAgezB4MDAwMDAwMjUsIDB4MDA3ODAwMDB9LCAvKiAyMyAqLworICAgIHsweDAwMDAwMDI1LCAweDAwODAwMDAwfSwgLyogMjQgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDg4MDAwMH0sIC8qIDI1ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDA5MDAwMDB9LCAvKiAyNiAqLworICAgIHsweDAwMDAwMDI1LCAweDAwOTgwMDAwfSwgLyogMjcgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMEEwMDAwMH0sIC8qIDI4ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDBBODAwMDB9LCAvKiAyOSAqLworICAgIHsweDAwMDAwMDI1LCAweDAwQjAwMDAwfSwgLyogMzAgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMEI4MDAwMH0sIC8qIDMxICovCisgICAgezB4MDAwMDAwMjUsIDB4MDBDMDAwMDB9LCAvKiAzMiAqLworICAgIHsweDAwMDAwMDI1LCAweDAwQzgwMDAwfSwgLyogMzMgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMEQwMDAwMH0sIC8qIDM0ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDBEODAwMDB9LCAvKiAzNSAqLworICAgIHsweDAwMDAwMDI1LCAweDAwRTAwMDAwfSwgLyogMzYgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMEU4MDAwMH0sIC8qIDM3ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDBGMDAwMDB9LCAvKiAzOCAqLworICAgIHsweDAwMDAwMDI1LCAweDAwRjgwMDAwfSwgLyogMzkgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMTAwMDAwMH0sIC8qIDQwICovCisgICAgezB4MDAwMDAwMjYsIDB4MDcwODAwMDB9LCAvKiA0MSAqLworICAgIHsweDAwMDAwMDI2LCAweDA3MTAwMDAwfSwgLyogNDIgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzE4MDAwMH0sIC8qIDQzICovCisgICAgezB4MDAwMDAwMjYsIDB4MDcyMDAwMDB9LCAvKiA0NCAqLworICAgIHsweDAwMDAwMDI2LCAweDA3MjgwMDAwfSwgLyogNDUgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzMwMDAwMH0sIC8qIDQ2ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDczODAwMDB9LCAvKiA0NyAqLworICAgIHsweDAwMDAwMDI2LCAweDA3NDAwMDAwfSwgLyogNDggKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzQ4MDAwMH0sIC8qIDQ5ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDc1MDAwMDB9LCAvKiA1MCAqLworICAgIHsweDAwMDAwMDI2LCAweDA3NTgwMDAwfSwgLyogNTEgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzYwMDAwMH0sIC8qIDUyICovCisgICAgezB4MDAwMDAwMjYsIDB4MDc2ODAwMDB9LCAvKiA1MyAqLworICAgIHsweDAwMDAwMDI2LCAweDA3NzAwMDAwfSwgLyogNTQgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzc4MDAwMH0sIC8qIDU1ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDc4MDAwMDB9LCAvKiA1NiAqLworICAgIHsweDAwMDAwMDI2LCAweDA3ODgwMDAwfSwgLyogNTcgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzkwMDAwMH0sIC8qIDU4ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDc5ODAwMDB9LCAvKiA1OSAqLworICAgIHsweDAwMDAwMDI2LCAweDA3QTAwMDAwfSwgLyogNjAgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwN0E4MDAwMH0sIC8qIDYxICovCisgICAgezB4MDAwMDAwMjYsIDB4MDdCMDAwMDB9LCAvKiA2MiAqLworICAgIHsweDAwMDAwMDI2LCAweDA3QjgwMDAwfSwgLyogNjMgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwN0MwMDAwMH0sIC8qIDY0ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDdDODAwMDB9LCAvKiA2NSAqLworICAgIHsweDAwMDAwMDI2LCAweDA3RDAwMDAwfSwgLyogNjYgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwN0Q4MDAwMH0sIC8qIDY3ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDdFMDAwMDB9LCAvKiA2OCAqLworICAgIHsweDAwMDAwMDI2LCAweDA3RTgwMDAwfSwgLyogNjkgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwN0YwMDAwMH0sIC8qIDcwICovCisgICAgezB4MDAwMDAwMjYsIDB4MDdGODAwMDB9LCAvKiA3MSAqLworICAgIHsweDAwMDAwMDI2LCAweDAwMDAwMDAwfSwgLyogNzIgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDA4MDAwMH0sIC8qIDczICovCisgICAgezB4MDAwMDAwMjYsIDB4MDAxMDAwMDB9LCAvKiA3NCAqLworICAgIHsweDAwMDAwMDI2LCAweDAwMTgwMDAwfSwgLyogNzUgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDIwMDAwMH0sIC8qIDc2ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDAyODAwMDB9LCAvKiA3NyAqLworICAgIHsweDAwMDAwMDI2LCAweDAwMzAwMDAwfSwgLyogNzggKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDM4MDAwMH0sIC8qIDc5ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDA0MDAwMDB9LCAvKiA4MCAqLworICAgIHsweDAwMDAwMDI2LCAweDAwNDgwMDAwfSwgLyogODEgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDUwMDAwMH0sIC8qIDgyICovCisgICAgezB4MDAwMDAwMjYsIDB4MDA1ODAwMDB9LCAvKiA4MyAqLworICAgIHsweDAwMDAwMDI2LCAweDAwNjAwMDAwfSwgLyogODQgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDY4MDAwMH0sIC8qIDg1ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDA3MDAwMDB9LCAvKiA4NiAqLworICAgIHsweDAwMDAwMDI2LCAweDAwNzgwMDAwfSwgLyogODcgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDgwMDAwMH0sIC8qIDg4ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDA4ODAwMDB9LCAvKiA4OSAqLworICAgIHsweDAwMDAwMDI2LCAweDAwOTAwMDAwfSwgLyogOTAgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDk4MDAwMH0sIC8qIDkxICovCisgICAgezB4MDAwMDAwMjYsIDB4MDBBMDAwMDB9LCAvKiA5MiAqLworICAgIHsweDAwMDAwMDI2LCAweDAwQTgwMDAwfSwgLyogOTMgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMEIwMDAwMH0sIC8qIDk0ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDBCODAwMDB9LCAvKiA5NSAqLworICAgIHsweDAwMDAwMDI2LCAweDAwQzAwMDAwfSwgLyogOTYgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMEM4MDAwMH0sIC8qIDk3ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDBEMDAwMDB9LCAvKiA5OCAqLworICAgIHsweDAwMDAwMDI2LCAweDAwRDgwMDAwfSwgLyogOTkgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMEUwMDAwMH0sIC8qIDEwMCAqLworICAgIHsweDAwMDAwMDI2LCAweDAwRTgwMDAwfSwgLyogMTAxICovCisgICAgezB4MDAwMDAwMjYsIDB4MDBGMDAwMDB9LCAvKiAxMDIgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMEY4MDAwMH0sIC8qIDEwMyAqLworICAgIHsweDAwMDAwMDI2LCAweDAxMDAwMDAwfSwgLyogMTA0ICovCisgICAgezB4MDAwMDAwMjcsIDB4MDcwODAwMDB9LCAvKiAxMDUgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzEwMDAwMH0sIC8qIDEwNiAqLworICAgIHsweDAwMDAwMDI3LCAweDA3MTgwMDAwfSwgLyogMTA3ICovCisgICAgezB4MDAwMDAwMjcsIDB4MDcyMDAwMDB9LCAvKiAxMDggKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzI4MDAwMH0sIC8qIDEwOSAqLworICAgIHsweDAwMDAwMDI3LCAweDA3MzAwMDAwfSwgLyogMTEwICovCisgICAgezB4MDAwMDAwMjcsIDB4MDczODAwMDB9LCAvKiAxMTEgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzQwMDAwMH0sIC8qIDExMiAqLworICAgIHsweDAwMDAwMDI3LCAweDA3NDgwMDAwfSwgLyogMTEzICovCisgICAgezB4MDAwMDAwMjcsIDB4MDc1MDAwMDB9LCAvKiAxMTQgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzU4MDAwMH0sIC8qIDExNSAqLworICAgIHsweDAwMDAwMDI3LCAweDA3NjAwMDAwfSwgLyogMTE2ICovCisgICAgezB4MDAwMDAwMjcsIDB4MDc2ODAwMDB9LCAvKiAxMTcgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzcwMDAwMH0sIC8qIDExOCAqLworICAgIHsweDAwMDAwMDI3LCAweDA3NzgwMDAwfSwgLyogMTE5ICovCisgICAgezB4MDAwMDAwMjcsIDB4MDc4MDAwMDB9LCAvKiAxMjAgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzg4MDAwMH0sIC8qIDEyMSAqLworICAgIHsweDAwMDAwMDI3LCAweDA3OTAwMDAwfSwgLyogMTIyICovCisgICAgezB4MDAwMDAwMjcsIDB4MDc5ODAwMDB9LCAvKiAxMjMgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwN0EwMDAwMH0sIC8qIDEyNCAqLworICAgIHsweDAwMDAwMDI3LCAweDA3QTgwMDAwfSwgLyogMTI1ICovCisgICAgezB4MDAwMDAwMjcsIDB4MDdCMDAwMDB9LCAvKiAxMjYgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwN0I4MDAwMH0gIC8qIDEyNyAqLworfTsKKworLyogUmVnaXN0ZXJzIGZvciB0aW1pbmcgb2YgVFggJiBSWCAqLworI2lmIFJBRElPX0lTX0dFTl8zUDAKK3VpbnQxNl90IHR4X3J4X29uX2RlbGF5ID0gVFhfUlhfT05fREVMaW5pdDsKK3VpbnQxNl90IHR4X3J4X3N5bnRoX2RlbGF5ID0gVFhfUlhfU1lOVEhfaW5pdDsKKyNlbHNlCisjaWYgUkZfT1NDXzI2TUhaID09IDEKK3VpbnQxNl90IHR4X3J4X29uX2RlbGF5ID0gVFhfUlhfT05fREVMQVlfVkFMXzI2TUhaOworI2Vsc2UKK3VpbnQxNl90IHR4X3J4X29uX2RlbGF5ID0gVFhfUlhfT05fREVMQVlfVkFMOworI2VuZGlmIC8qIFJGX09TQ18yNk1IWiA9PSAxICovCit1aW50MTZfdCB0eF9yeF9zeW50aF9kZWxheSA9IFRYX1JYX1NZTlRIX0RFTEFZX1ZBTDsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKy8qIE5PVEU6IFRoZXNlIGFycmF5cyBNVVNUIGJlIG9yZGVyZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHJhZGlvX21vZGVfdCBlbnVtZXJhdGlvbi4gKi8KKyNpZiBSQURJT19JU19HRU5fM1AwCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKiBtb2RlX2NvbmZpZ3NfZHJfMm1icHNbTlVNX1JBRElPX01PREVTXSA9Cit7CisgICAgKHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKU5VTEwsIC8qIDJNYnBzIHJhdGUgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBtb2RlICovCisgICAgKHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKU5VTEwsIC8qIDJNYnBzIHJhdGUgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBtb2RlICovCisgICAgKHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKU5VTEwsIC8qIDJNYnBzIHJhdGUgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBtb2RlICovCisgICAgJnhjdnJfR0ZTS19CVF8wcDVfaF8wcDVfMm1icHNfY29uZmlnLAorICAgICZ4Y3ZyX0dGU0tfQlRfMHA1X2hfMHAzMl8ybWJwc19jb25maWcsCisgICAgKHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKU5VTEwsIC8qIDJNYnBzIHJhdGUgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBtb2RlICovCisgICAgKHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKU5VTEwsIC8qIDJNYnBzIHJhdGUgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBtb2RlICovCisgICAgJnhjdnJfR0ZTS19CVF8wcDNfaF8wcDVfMm1icHNfY29uZmlnLAorICAgICZ4Y3ZyX0dGU0tfQlRfMHA3X2hfMHA1XzJtYnBzX2NvbmZpZywKKyAgICAmeGN2cl9NU0tfMm1icHNfY29uZmlnLAorfTsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqIG1vZGVfY29uZmlnc19kcl8xbWJwc1tOVU1fUkFESU9fTU9ERVNdID0KK3sKKyAgICAmeGN2cl9CTEVfMW1icHNfY29uZmlnLAorI2lmIFJBRElPX0lTX0dFTl8yUDEKKyAgICBOVUxMLAorICAgIE5VTEwsCisjZWxzZQorICAgICZ4Y3ZyX1pJR0JFRV81MDBrYnBzX2NvbmZpZywgLyogODAyLjE1LjQgb25seSBzdXBwb3J0cyBvbmUgY29uZmlndXJhdGlvbiAqLworICAgICZ4Y3ZyX0FOVF8xbWJwc19jb25maWcsCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzJQMSAqLworICAgICZ4Y3ZyX0dGU0tfQlRfMHA1X2hfMHA1XzFtYnBzX2NvbmZpZywKKyAgICAmeGN2cl9HRlNLX0JUXzBwNV9oXzBwMzJfMW1icHNfY29uZmlnLAorICAgICZ4Y3ZyX0dGU0tfQlRfMHA1X2hfMHA3XzFtYnBzX2NvbmZpZywKKyAgICAmeGN2cl9HRlNLX0JUXzBwNV9oXzFwMF8xbWJwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDNfaF8wcDVfMW1icHNfY29uZmlnLAorICAgICZ4Y3ZyX0dGU0tfQlRfMHA3X2hfMHA1XzFtYnBzX2NvbmZpZywKKyAgICAmeGN2cl9NU0tfMW1icHNfY29uZmlnLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICogbW9kZV9jb25maWdzX2RyXzUwMGticHNbTlVNX1JBRElPX01PREVTXSA9Cit7CisgICAgJnhjdnJfQkxFXzFtYnBzX2NvbmZpZywgLyogSW52YWxpZCBvcHRpb24gKi8KKyNpZiBSQURJT19JU19HRU5fMlAxCisgICAgTlVMTCwKKyAgICBOVUxMLAorI2Vsc2UKKyAgICAmeGN2cl9aSUdCRUVfNTAwa2Jwc19jb25maWcsIC8qIDgwMi4xNS40IHNldHRpbmcgKi8KKyAgICAmeGN2cl9BTlRfMW1icHNfY29uZmlnLCAvKiBJbnZhbGlkIG9wdGlvbiAqLworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAmeGN2cl9HRlNLX0JUXzBwNV9oXzBwNV81MDBrYnBzX2NvbmZpZywKKyAgICAmeGN2cl9HRlNLX0JUXzBwNV9oXzBwMzJfNTAwa2Jwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDVfaF8wcDdfNTAwa2Jwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDVfaF8xcDBfNTAwa2Jwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDNfaF8wcDVfNTAwa2Jwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDdfaF8wcDVfNTAwa2Jwc19jb25maWcsCisgICAgJnhjdnJfTVNLXzUwMGticHNfY29uZmlnLAorfTsKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqIG1vZGVfY29uZmlnc19kcl8yNTBrYnBzW05VTV9SQURJT19NT0RFU10gPQoreworICAgICZ4Y3ZyX0JMRV8xbWJwc19jb25maWcsIC8qIEludmFsaWQgb3B0aW9uICovCisjaWYgUkFESU9fSVNfR0VOXzJQMQorICAgIE5VTEwsCisgICAgTlVMTCwKKyNlbHNlCisgICAgJnhjdnJfWklHQkVFXzUwMGticHNfY29uZmlnLCAvKiA4MDIuMTUuNCBvbmx5IHN1cHBvcnRzIG9uZSBjb25maWd1cmF0aW9uICovCisgICAgJnhjdnJfQU5UXzFtYnBzX2NvbmZpZywgLyogSW52YWxpZCBvcHRpb24gKi8KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fMlAxICovCisgICAgJnhjdnJfR0ZTS19CVF8wcDVfaF8wcDVfMjUwa2Jwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDVfaF8wcDMyXzI1MGticHNfY29uZmlnLAorICAgICZ4Y3ZyX0dGU0tfQlRfMHA1X2hfMHA3XzI1MGticHNfY29uZmlnLAorICAgICZ4Y3ZyX0dGU0tfQlRfMHA1X2hfMXAwXzI1MGticHNfY29uZmlnLAorICAgICZ4Y3ZyX0dGU0tfQlRfMHAzX2hfMHA1XzI1MGticHNfY29uZmlnLAorICAgICZ4Y3ZyX0dGU0tfQlRfMHA3X2hfMHA1XzI1MGticHNfY29uZmlnLAorICAgICZ4Y3ZyX01TS18yNTBrYnBzX2NvbmZpZywKK307CisKK3N0YXRpYyB4Y3ZyX2N1cnJDb25maWdfdCBjdXJyZW50X3hjdnJfY29uZmlnOworCit2b2lkIHJmX29zY19zdGFydHVwKHZvaWQpCit7CisgICAgaWYgKCFSRl9PU0NJTExBVE9SX1JFQURZKQorICAgIHsKKyAgICAgICAgUlNJTS0+Q09OVFJPTCB8PSBSU0lNX0NPTlRST0xfUkZfT1NDX0VOX01BU0s7CisgICAgfQorICAgIHdoaWxlICghUkZfT1NDSUxMQVRPUl9SRUFEWSkKKyAgICB7CisgICAgICAgIC8qIFdhaXQgZm9yIFJGX09TQ19SRUFEWSB0byBiZSBhc3NlcnRlZCBiZWZvcmUgY29udGludWluZyAqLworICAgIH0KK30KKwordm9pZCByZl9vc2Nfc2h1dGRvd24odm9pZCkKK3sKKyAgICBpZiAoIVJGX09TQ0lMTEFUT1JfU1RBWVNfT04pCisgICAgeworICAgICAgICBSU0lNLT5DT05UUk9MICY9IH5SU0lNX0NPTlRST0xfUkZfT1NDX0VOX01BU0s7CisgICAgfQorfQorICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit4Y3ZyU3RhdHVzX3QgWENWUl9Jbml0KHJhZGlvX21vZGVfdCByYWRpb19tb2RlLCBkYXRhX3JhdGVfdCBkYXRhX3JhdGUpCit7CisgICAgY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICogbW9kZV9kYXRhcmF0ZV9jb25maWc7CisgICAgY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCAqIGRhdGFyYXRlX2NvbmZpZyA7CisgICAgY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190ICogcmFkaW9fbW9kZV9jZmc7CisgICAgY29uc3QgeGN2cl9jb21tb25fY29uZmlnX3QgKiByYWRpb19jb21tb25fY29uZmlnOworCisgICAgeGN2clN0YXR1c190IHN0YXR1czsKKworICAgIElGUl9TV19UUklNX1RCTF9FTlRSWV9UIHN3X3RyaW1fdGJsW10gPQorICAgIHsKKyAgICAgICAge1RSSU1fU1RBVFVTLCAwLCBGQUxTRX0sIC8qPCBGZXRjaCB0aGUgdHJpbSBzdGF0dXMgd29yZCBpZiBhdmFpbGFibGUuKi8KKyAgICAgICAge1RSSU1fVkVSU0lPTiwgMCwgRkFMU0V9IC8qPCBGZXRjaCB0aGUgdHJpbSB2ZXJzaW9uIG51bWJlciBpZiBhdmFpbGFibGUuKi8KKyAgICB9OworICAgIGNvbnN0IHVpbnQ4X3QgTlVNX1RSSU1fVEJMX0VOVFJJRVMgPSBzaXplb2Yoc3dfdHJpbV90YmwpL3NpemVvZihJRlJfU1dfVFJJTV9UQkxfRU5UUllfVCk7CisKKyNpZm5kZWYgU0lNVUxBVElPTgorCisjaWYgKEVYVEVSTkFMX0NMT0NLX0dFTikKKyAgICBSU0lNLT5SRl9PU0NfQ1RSTCB8PSBSU0lNX1JGX09TQ19DVFJMX1JGX09TQ19CWVBBU1NfRU5fTUFTSzsgLyogT25seSB3aGVuIGV4dGVybmFsIGNsb2NrIGlzIGJlaW5nIHVzZWQgKi8KKyNlbmRpZiAvKiBFWFRFUk5BTF9DTE9DS19HRU4gKi8KKworI2lmIFJBRElPX0lTX0dFTl8yUDAKKyAgICBSU0lNLT5SRl9PU0NfQ1RSTCAmPSB+UlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX09WUkRfTUFTSzsgLyogU2V0IEVYVF9PU0NfT1ZSRCB2YWx1ZSB0byB6ZXJvICovCisgICAgUlNJTS0+UkZfT1NDX0NUUkwgfD0gUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX09WUkRfRU5fTUFTSzsgLyogRW5hYmxlIG92ZXItcmlkZSB3aXRoIHplcm8gdmFsdWUgKi8gICAKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fMlAwICovCisKKyAgICAvKiBDaGVjayB0aGF0IHRoaXMgaXMgdGhlIHByb3BlciByYWRpbyB2ZXJzaW9uICovCisgICAgeworICAgICAgICB1aW50OF90IHJhZGlvX2lkID0gKChSU0lNLT5NSVNDICYgUlNJTV9NSVNDX1JBRElPX1ZFUlNJT05fTUFTSyk+PlJTSU1fTUlTQ19SQURJT19WRVJTSU9OX1NISUZUKTsKKworICAgICAgICBpZiAoCisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgICAgICAgICAgKHJhZGlvX2lkICE9IDB4NSkgLyogS1czIEdlbjMgKi8KKyNlbGlmIFJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgIChyYWRpb19pZCAhPSAweDUpIC8qIEtXMzUgR2VuMi4xICovCisjZWxzZQorICAgICAgICAgICAgKHJhZGlvX2lkICE9IDB4MykgJiYgIC8qIEtXNDEvMzEvMjEgdjEgKi8KKyAgICAgICAgICAgIChyYWRpb19pZCAhPSAweEIpIC8qIEtXNDEvMzEvMjEgdjEuMSAqLworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKyAgICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgICAgWGN2clBhbmljKFdST05HX1JBRElPX0lEX0RFVEVDVEVELCAodWludDMyX3QpJlhDVlJfSW5pdCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgLyogQXNzZXJ0IFJhZGlvIFJ1biBSZXF1ZXN0IGFuZCB3YWl0IGZvciBhY2sgZnJvbSBTUE0uICovCisgICAgUlNJTS0+UE9XRVIgfD0gUlNJTV9QT1dFUl9SU0lNX1JVTl9SRVFVRVNUX01BU0s7CisgICAgd2hpbGUgKChSU0lNLT5QT1dFUiAmIFJTSU1fUE9XRVJfU1BNX1JVTl9BQ0tfU1RBVF9NQVNLKSA9PSAwKQorICAgIHsKKyAgICB9CisgICAgUlNJTS0+Q09OVFJPTCB8PSBSU0lNX0NPTlRST0xfUlNJTV9DR0NfWENWUl9FTl9NQVNLOyAKKyAgICByZl9vc2Nfc3RhcnR1cCgpOyAvKiBTdGFydCBSRl9PU0MgdG8gYWxsb3cgcmFkaW8gcmVnaXN0ZXJzIGFjY2VzcyAqLworI2Vsc2UKKyAgICBTSU0tPlNDR0M1IHw9IFNJTV9TQ0dDNV9QSFlESUdfTUFTSzsKKworICAgIC8qIExvYWQgSUZSIHRyaW0gdmFsdWVzICovCisgICAgaGFuZGxlX2lmcigmc3dfdHJpbV90YmxbMF0sIE5VTV9UUklNX1RCTF9FTlRSSUVTKTsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKyNlbmRpZiAvKiBpZm5kZWYgU0lNVUxBVElPTiAqLworCisgICAgLyogUGVyZm9ybSB0aGUgZGVzaXJlZCBYQ1ZSIGluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uICovCisgICAgc3RhdHVzID0gWENWUl9HZXREZWZhdWx0Q29uZmlnKHJhZGlvX21vZGUsIGRhdGFfcmF0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB4Y3ZyX2NvbW1vbl9jb25maWdfdCAqKikmcmFkaW9fY29tbW9uX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKiopJnJhZGlvX21vZGVfY2ZnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKikmbW9kZV9kYXRhcmF0ZV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCAqKikmZGF0YXJhdGVfY29uZmlnKTsKKwkJCQkJCQkJICAKKyAgICBpZiAoc3RhdHVzID09IGdYY3ZyU3VjY2Vzc19jKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gWENWUl9Db25maWd1cmUoKGNvbnN0IHhjdnJfY29tbW9uX2NvbmZpZ190ICopcmFkaW9fY29tbW9uX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKilyYWRpb19tb2RlX2NmZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKiltb2RlX2RhdGFyYXRlX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190ICopZGF0YXJhdGVfY29uZmlnLCAyNSwgWENWUl9GSVJTVF9JTklUKTsKKyAgICAgICAgY3VycmVudF94Y3ZyX2NvbmZpZy5yYWRpb19tb2RlID0gcmFkaW9fbW9kZTsKKyAgICAgICAgY3VycmVudF94Y3ZyX2NvbmZpZy5kYXRhX3JhdGUgPSBkYXRhX3JhdGU7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBYQ1ZSX0RlaW5pdCh2b2lkKQoreworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICByZl9vc2Nfc2h1dGRvd24oKTsKKyAgICBSU0lNLT5QT1dFUiB8PSBSU0lNX1BPV0VSX1JTSU1fU1RPUF9NT0RFX01BU0s7IC8qIFNldCByYWRpbyBzdG9wIG1vZGUgdG8gUlZMTFMgKi8KKyAgICBSU0lNLT5QT1dFUiAmPSB+UlNJTV9QT1dFUl9SU0lNX1JVTl9SRVFVRVNUX01BU0s7IC8qIENsZWFyIFJVTiByZXF1ZXN0ICovCisjZWxzZQorCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworfQorCit4Y3ZyU3RhdHVzX3QgWENWUl9HZXREZWZhdWx0Q29uZmlnKHJhZGlvX21vZGVfdCByYWRpb19tb2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9yYXRlX3QgZGF0YV9yYXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGN2cl9jb21tb25fY29uZmlnX3QgKiogY29tX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqKiBtb2RlX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKiBtb2RlX2RhdGFyYXRlX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgKiogZGF0YXJhdGVfY29uZmlnKQoreworICAgIHhjdnJTdGF0dXNfdCBzdGF0dXMgPSBnWGN2clN1Y2Nlc3NfYzsKKyAgICAvKiBDb21tb24gY29uZmlndXJhdGlvbiBwb2ludGVyICovCisgICAgKmNvbV9jb25maWcgPSAoY29uc3QgeGN2cl9jb21tb25fY29uZmlnX3QgKikmeGN2cl9jb21tb25fY29uZmlnOworCisgICAgLyogTW9kZSBkZXBlbmRlbnQgY29uZmlndXJhdGlvbiBwb2ludGVyICovCisgICAgc3dpdGNoIChyYWRpb19tb2RlKQorICAgIHsKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICBjYXNlIFpJR0JFRV9NT0RFOgorICAgICAgICAgICAgKm1vZGVfY29uZmlnID0gKCBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKikmemdiZV9tb2RlX2NvbmZpZzsgLyogWmlnYmVlIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFOVF9NT0RFOgorICAgICAgICAgICAgKm1vZGVfY29uZmlnID0gKCBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKikmYW50X21vZGVfY29uZmlnOyAvKiBBTlQgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAgICAgY2FzZSBCTEVfTU9ERToKKyAgICAgICAgICAgICptb2RlX2NvbmZpZyA9ICggY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190ICopJmJsZV9tb2RlX2NvbmZpZzsgLyogQkxFIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMHA1OgorICAgICAgICAgICAgKm1vZGVfY29uZmlnID0gKCBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKikmZ2Zza19idF8wcDVfaF8wcDVfbW9kZV9jb25maWc7IC8qIEdGU0tfQlRfMHA1X2hfMHA1IGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMHAzMjoKKyAgICAgICAgICAgICptb2RlX2NvbmZpZyA9ICggY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190ICopJmdmc2tfYnRfMHA1X2hfMHAzMl9tb2RlX2NvbmZpZzsgLyogR0ZTS19CVF8wcDVfaF8wcDMyIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMHA3OgorICAgICAgICAgICAgKm1vZGVfY29uZmlnID0gKCBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKikmZ2Zza19idF8wcDVfaF8wcDdfbW9kZV9jb25maWc7IC8qIEdGU0tfQlRfMHA1X2hfMHA3IGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMXAwOgorICAgICAgICAgICAgKm1vZGVfY29uZmlnID0gKCBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKikmZ2Zza19idF8wcDVfaF8xcDBfbW9kZV9jb25maWc7IC8qIEdGU0tfQlRfMHA1X2hfMXAwIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdGU0tfQlRfMHAzX2hfMHA1OgorICAgICAgICAgICAgKm1vZGVfY29uZmlnID0gKCBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKikmZ2Zza19idF8wcDNfaF8wcDVfbW9kZV9jb25maWc7IC8qIEdGU0tfQlRfMHAzX2hfMHA1IGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdGU0tfQlRfMHA3X2hfMHA1OgorICAgICAgICAgICAgKm1vZGVfY29uZmlnID0gKCBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKikmZ2Zza19idF8wcDdfaF8wcDVfbW9kZV9jb25maWc7IC8qIEdGU0tfQlRfMHA3X2hfMHA1IGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1TSzoKKyAgICAgICAgICAgICptb2RlX2NvbmZpZyA9ICggY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190ICopJm1za19tb2RlX2NvbmZpZzsgLyogTVNLIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAKKyAgICAgICAgICAgIHN0YXR1cyA9IGdYY3ZySW52YWxpZFBhcmFtZXRlcnNfYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIERhdGEgcmF0ZSBkZXBlbmRlbnQgYW5kIG1vZGVYZGF0YXJhdGUgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb24gcG9pbnRlcnMgKi8KKyAgICBpZiAoc3RhdHVzID09IGdYY3ZyU3VjY2Vzc19jKSAvKiBPbmx5IGF0dGVtcHQgdGhpcyBwb2ludGVyIGFzc2lnbm1lbnQgcHJvY2VzcyBpZiBwcmlvciBzd2l0Y2goKSBzdGF0ZW1lbnQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAqLworICAgIHsKKyAgICAgICAgc3dpdGNoIChkYXRhX3JhdGUpCisgICAgICAgIHsKKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgICAgICAgICBjYXNlIERSXzJNQlBTOgorICAgICAgICAgICAgICAgIGlmICgocmFkaW9fbW9kZSA9PSBHRlNLX0JUXzBwNV9oXzBwNykgfHwgKHJhZGlvX21vZGUgPT0gR0ZTS19CVF8wcDVfaF8xcDApIHx8IChyYWRpb19tb2RlID09IFpJR0JFRV9NT0RFKSB8fCAocmFkaW9fbW9kZSA9PSBCTEVfTU9ERSkgfHwgKHJhZGlvX21vZGUgPT0gQU5UX01PREUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqZGF0YXJhdGVfY29uZmlnID0gKGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgKikmeGN2cl8ybWJwc19jb25maWc7IC8qIDJNYnBzIGRhdGFyYXRlIGNvbmZpZ3VyYXRpb25zICovCisgICAgICAgICAgICAgICAgICAgICptb2RlX2RhdGFyYXRlX2NvbmZpZyA9IChjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKiltb2RlX2NvbmZpZ3NfZHJfMm1icHNbcmFkaW9fbW9kZV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKyAgICAgICAgICAgIGNhc2UgRFJfMU1CUFM6CisgICAgICAgICAgICAgICAgKmRhdGFyYXRlX2NvbmZpZyA9IChjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190ICopJnhjdnJfMW1icHNfY29uZmlnOyAvKiAxTWJwcyBkYXRhcmF0ZSBjb25maWd1cmF0aW9ucyAqLworICAgICAgICAgICAgICAgICptb2RlX2RhdGFyYXRlX2NvbmZpZyA9IChjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKiltb2RlX2NvbmZpZ3NfZHJfMW1icHNbcmFkaW9fbW9kZV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERSXzUwMEtCUFM6CisgICAgICAgICAgICAgICAgaWYgKHJhZGlvX21vZGUgPT0gWklHQkVFX01PREUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBTZWUgZnNsX3hjdnJfemdiZV9jb25maWcuYyBmb3Igc2V0dGluZ3MgKi8KKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAqZGF0YXJhdGVfY29uZmlnID0gKGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgKikmeGN2cl84MDJfMTVfNF81MDBrYnBzX2NvbmZpZzsgLyogNTAwS2JwcyBkYXRhcmF0ZSBjb25maWd1cmF0aW9ucyAqLworI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpkYXRhcmF0ZV9jb25maWcgPSAoY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCAqKSZ4Y3ZyXzUwMGticHNfY29uZmlnOyAvKiA1MDBLYnBzIGRhdGFyYXRlIGNvbmZpZ3VyYXRpb25zICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICptb2RlX2RhdGFyYXRlX2NvbmZpZyA9IChjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKiltb2RlX2NvbmZpZ3NfZHJfNTAwa2Jwc1tyYWRpb19tb2RlXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRFJfMjUwS0JQUzoKKyAgICAgICAgICAgICAgICAqZGF0YXJhdGVfY29uZmlnID0gKGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgKikmeGN2cl8yNTBrYnBzX2NvbmZpZzsgLyogMjUwS2JwcyBkYXRhcmF0ZSBjb25maWd1cmF0aW9ucyAqLworICAgICAgICAgICAgICAgICptb2RlX2RhdGFyYXRlX2NvbmZpZyA9IChjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKiltb2RlX2NvbmZpZ3NfZHJfMjUwa2Jwc1tyYWRpb19tb2RlXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworeGN2clN0YXR1c190IFhDVlJfQ29uZmlndXJlKGNvbnN0IHhjdnJfY29tbW9uX2NvbmZpZ190ICpjb21fY29uZmlnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKm1vZGVfY29uZmlnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKm1vZGVfZGF0YXJhdGVfY29uZmlnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190ICpkYXRhcmF0ZV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgdGVtcERlZ0MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfSU5JVF9NT0RFX0NIR19UIGZpcnN0X2luaXQpCit7CisgICAgeGN2clN0YXR1c190IGNvbmZpZ19zdGF0dXMgPSBnWGN2clN1Y2Nlc3NfYzsKKyAgICB1aW50MzJfdCB0ZW1wOyAKKworICAgIC8qIFR1cm4gb24gdGhlIG1vZHVsZSBjbG9ja3MgYmVmb3JlIGRvaW5nIGFueXRoaW5nICovCisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgIFJTSU0tPkNPTlRST0wgfD0gbW9kZV9jb25maWctPnNjZ2M1X2Nsb2NrX2VuYV9iaXRzOyAvKiBTYW1lIGJpdCBzdG9yYWdlIGlzIHVzZWQgYnV0IFJTSU0gYml0IGFzc2lnbm1lbnRzIGFyZSBhcHBsaWVkICovCisjZWxzZQorICAgIFNJTS0+U0NHQzUgfD0gbW9kZV9jb25maWctPnNjZ2M1X2Nsb2NrX2VuYV9iaXRzOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIFhDVlJfQU5BIGNvbmZpZ3MgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgIC8qIENvbmZpZ3VyZSBQTEwgTG9vcCBGaWx0ZXIgKi8KKyAgICBpZiAoZmlyc3RfaW5pdCkKKyAgICB7CisgICAgICAgIFhDVlJfQU5BLT5TWV9DVFJMXzEgJj0gfmNvbV9jb25maWctPmFuYV9zeV9jdHJsMS5tYXNrOworICAgICAgICBYQ1ZSX0FOQS0+U1lfQ1RSTF8xIHw9IGNvbV9jb25maWctPmFuYV9zeV9jdHJsMS5pbml0OworICAgIH0KKworICAgIC8qIENvbmZpZ3VyZSBWQ08gS1ZNICovCisgICAgWENWUl9BTkEtPlNZX0NUUkxfMiAmPSB+bW9kZV9kYXRhcmF0ZV9jb25maWctPmFuYV9zeV9jdHJsMi5tYXNrOworICAgIFhDVlJfQU5BLT5TWV9DVFJMXzIgfD0gbW9kZV9kYXRhcmF0ZV9jb25maWctPmFuYV9zeV9jdHJsMi5pbml0OworCisgICAgLyogQ29uZmlndXJlIGFuYWxvZyBmaWx0ZXIgYmFuZHdpZHRoICovCisgICAgWENWUl9BTkEtPlJYX0JCQSAmPSB+bW9kZV9kYXRhcmF0ZV9jb25maWctPmFuYV9yeF9iYmEubWFzazsKKyAgICBYQ1ZSX0FOQS0+UlhfQkJBIHw9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5hbmFfcnhfYmJhLmluaXQ7CisgICAgWENWUl9BTkEtPlJYX1RaQSAmPSB+bW9kZV9kYXRhcmF0ZV9jb25maWctPmFuYV9yeF90emEubWFzazsKKyAgICBYQ1ZSX0FOQS0+UlhfVFpBIHw9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5hbmFfcnhfdHphLmluaXQ7CisKKyNpZiBSQURJT19JU19HRU5fMlAwCisgICAgaWYgKGZpcnN0X2luaXQpCisgICAgeworICAgICAgICB0ZW1wID0gWENWUl9BTkEtPlRYX0RBQ19QQTsKKyAgICAgICAgdGVtcCAmPSB+WENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX0JVTVBfVkJJQVNfTUFTSzsKKyAgICAgICAgdGVtcCB8PSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfQlVNUF9WQklBUyg0KTsKKyAgICAgICAgWENWUl9BTkEtPlRYX0RBQ19QQSA9IHRlbXA7CisKKyAgICAgICAgdGVtcCA9IFhDVlJfQU5BLT5CQl9MRE9fMjsKKyAgICAgICAgdGVtcCAmPSB+WENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX1RSSU1fTUFTSzsKKyAgICAgICAgdGVtcCB8PSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPTE9fVFJJTSgwKTsKKyAgICAgICAgWENWUl9BTkEtPkJCX0xET18yID0gdGVtcDsKKworICAgICAgICB0ZW1wID0gWENWUl9BTkEtPlJYX0xOQTsKKyAgICAgICAgdGVtcCAmPSB+WENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9CVU1QX01BU0s7CisgICAgICAgIHRlbXAgfD0gWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9CVU1QKDEpOworICAgICAgICBYQ1ZSX0FOQS0+UlhfTE5BID0gdGVtcDsKKworICAgICAgICB0ZW1wID0gWENWUl9BTkEtPkJCX0xET18xOworICAgICAgICB0ZW1wICY9IH5YQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19UUklNX01BU0s7CisgICAgICAgIHRlbXAgfD0gWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfVFJJTSgxKTsKKyAgICAgICAgWENWUl9BTkEtPkJCX0xET18xID0gdGVtcDsKKyAgICB9CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzJQMCAqLworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogWENWUl9NSVNDIGNvbmZpZ3MgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICB0ZW1wID0gWENWUl9NSVNDLT5YQ1ZSX0NUUkw7CisgICAgdGVtcCAmPSB+KG1vZGVfY29uZmlnLT54Y3ZyX2N0cmwubWFzayB8IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkVGX0NMS19GUkVRX01BU0spOworICAgIHRlbXAgfD0gbW9kZV9jb25maWctPnhjdnJfY3RybC5pbml0OworCQorI2lmIFJGX09TQ18yNk1IWiA9PSAxCisgICAgeworICAgICAgICB0ZW1wIHw9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkVGX0NMS19GUkVRKDEpOworICAgIH0KKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworCisgICAgWENWUl9NSVNDLT5YQ1ZSX0NUUkwgPSB0ZW1wOworCisjaWYgUkFESU9fSVNfR0VOXzJQMQorICAgIFhDVlJfTUlTQy0+RkFEX0NUUkwgJj0gflhDVlJfQ1RSTF9GQURfQ1RSTF9GQURfTk9UX0dQSU9fTUFTSzsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fMlAxICovCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBYQ1ZSX1BIWSBjb25maWdzICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgIFhDVlJfUEhZLT5QSFlfRlNLX1BEX0NGRzAgPSBtb2RlX2NvbmZpZy0+cGh5X2Zza19wZF9jZmcwOworICAgIFhDVlJfUEhZLT5QSFlfRlNLX1BEX0NGRzEgPSBtb2RlX2NvbmZpZy0+cGh5X2Zza19wZF9jZmcxOworICAgIFhDVlJfUEhZLT5QSFlfRlNLX0NGRyA9IG1vZGVfY29uZmlnLT5waHlfZnNrX2NmZzsKKyAgICBYQ1ZSX1BIWS0+UEhZX0ZTS19NSVNDID0gbW9kZV9jb25maWctPnBoeV9mc2tfbWlzYyB8IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5waHlfZnNrX21pc2NfbW9kZV9kYXRhcmF0ZTsKKyAgICBYQ1ZSX1BIWS0+RlNLX0ZBRF9DVFJMID0gbW9kZV9jb25maWctPnBoeV9mYWRfY3RybDsKKyNlbHNlCisgICAgWENWUl9QSFktPlBIWV9QUkVfUkVGMCA9IG1vZGVfY29uZmlnLT5waHlfcHJlX3JlZjBfaW5pdDsKKyAgICBYQ1ZSX1BIWS0+UFJFX1JFRjEgPSBtb2RlX2NvbmZpZy0+cGh5X3ByZV9yZWYxX2luaXQ7CisgICAgWENWUl9QSFktPlBSRV9SRUYyID0gbW9kZV9jb25maWctPnBoeV9wcmVfcmVmMl9pbml0OworICAgIFhDVlJfUEhZLT5DRkcxID0gbW9kZV9jb25maWctPnBoeV9jZmcxX2luaXQ7CisgICAgWENWUl9QSFktPkNGRzIgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cGh5X2NmZzJfaW5pdDsKKyAgICBYQ1ZSX1BIWS0+RUxfQ0ZHID0gbW9kZV9jb25maWctPnBoeV9lbF9jZmdfaW5pdCB8IGRhdGFyYXRlX2NvbmZpZy0+cGh5X2VsX2NmZ19pbml0OyAvKiBFTF9XSU5fU0laRSBhbmQgRUxfSU5URVJWQUwgYXJlIGRhdGFyYXRlIGRlcGVuZGVudCwgKi8KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBYQ1ZSX1BMTF9ESUcgY29uZmlncyAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIGlmIChmaXJzdF9pbml0KQorICAgIHsKKyAgICAgICAgWENWUl9QTExfRElHLT5IUE1fQlVNUCA9IGNvbV9jb25maWctPnBsbF9ocG1fYnVtcDsKKyAgICAgICAgWENWUl9QTExfRElHLT5NT0RfQ1RSTCA9IGNvbV9jb25maWctPnBsbF9tb2RfY3RybDsKKyAgICAgICAgWENWUl9QTExfRElHLT5DSEFOX01BUCA9IGNvbV9jb25maWctPnBsbF9jaGFuX21hcDsKKyAgICAgICAgWENWUl9QTExfRElHLT5MT0NLX0RFVEVDVCA9IGNvbV9jb25maWctPnBsbF9sb2NrX2RldGVjdDsKKyAgICAgICAgWENWUl9QTExfRElHLT5IUE1fQ1RSTCA9IGNvbV9jb25maWctPnBsbF9ocG1fY3RybDsKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICBYQ1ZSX1BMTF9ESUctPkhQTUNBTF9DVFJMID0gY29tX2NvbmZpZy0+cGxsX2hwbWNhbF9jdHJsOworI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICAgIFhDVlJfUExMX0RJRy0+SFBNX1NETV9SRVMgPSBjb21fY29uZmlnLT5wbGxfaHBtX3NkbV9yZXM7CisgICAgICAgIFhDVlJfUExMX0RJRy0+TFBNX0NUUkwgPSBjb21fY29uZmlnLT5wbGxfbHBtX2N0cmw7CisgICAgICAgIFhDVlJfUExMX0RJRy0+TFBNX1NETV9DVFJMMSA9IGNvbV9jb25maWctPnBsbF9scG1fc2RtX2N0cmwxOworICAgICAgICBYQ1ZSX1BMTF9ESUctPkRFTEFZX01BVENIID0gY29tX2NvbmZpZy0+cGxsX2RlbGF5X21hdGNoOworICAgICAgICBYQ1ZSX1BMTF9ESUctPkNUVU5FX0NUUkwgPSBjb21fY29uZmlnLT5wbGxfY3R1bmVfY3RybDsKKyAgICB9CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBYQ1ZSX1JYX0RJRyBjb25maWdzICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICAvKiBDb25maWd1cmUgUkYgQXV4IFBMTCBmb3IgcHJvcGVyIG9wZXJhdGlvbiBiYXNlZCBvbiBleHRlcm5hbCBjbG9jayBmcmVxdWVuY3kgKi8KKyAgICBpZiAoZmlyc3RfaW5pdCkKKyAgICB7CisgICAgICAgIHRlbXAgPSBYQ1ZSX0FOQS0+UlhfQVVYUExMOworICAgICAgICB0ZW1wICY9IH5YQ1ZSX0FOQUxPR19SWF9BVVhQTExfVkNPX0RBQ19SRUZfQURKVVNUX01BU0s7CisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcCB8PSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfVkNPX0RBQ19SRUZfQURKVVNUKDQpOworICAgICAgICB9CisjZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wIHw9IFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9WQ09fREFDX1JFRl9BREpVU1QoNyk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworICAgICAgICBYQ1ZSX0FOQS0+UlhfQVVYUExMID0gdGVtcDsKKyAgICB9CisgICAgCisgICAgLyogQ29uZmlndXJlIFJYX0RJR19DVFJMICovCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyAgICB7CisgICAgICAgIHRlbXAgPSBjb21fY29uZmlnLT5yeF9kaWdfY3RybF9pbml0IHwgLyogQ29tbW9uIHBvcnRpb24gb2YgUlhfRElHX0NUUkwgaW5pdCAqLworICAgICAgICAgICAgICAgbW9kZV9jb25maWctPnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogfCAvKiBNb2RlICBzcGVjaWZpYyBwb3J0aW9uIG9mIFJYX0RJR19DVFJMIGluaXQgKi8KKyAgICAgICAgICAgICAgIGRhdGFyYXRlX2NvbmZpZy0+cnhfZGlnX2N0cmxfaW5pdF8yNm1oeiB8IC8qIERhdGFyYXRlIHNwZWNpZmljIHBvcnRpb24gb2YgUlhfRElHX0NUUkwgaW5pdCAqLworICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX0VOX01BU0s7IC8qIEFsd2F5cyBlbmFibGUgdGhlIHNhbXBsZSByYXRlIGNvbnZlcnRlciBmb3IgMjZNSHogKi8KKyAgICB9CisjZWxzZQorICAgIHsKKyAgICAgICAgdGVtcCA9IGNvbV9jb25maWctPnJ4X2RpZ19jdHJsX2luaXQgfCAvKiBDb21tb24gcG9ydGlvbiBvZiBSWF9ESUdfQ1RSTCBpbml0ICovCisgICAgICAgICAgICAgICBtb2RlX2NvbmZpZy0+cnhfZGlnX2N0cmxfaW5pdF8zMm1oeiB8IC8qIE1vZGUgc3BlY2lmaWMgcG9ydGlvbiBvZiBSWF9ESUdfQ1RSTCBpbml0ICovCisgICAgICAgICAgICAgICBkYXRhcmF0ZV9jb25maWctPnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogfCAvKiBEYXRhcmF0ZSBzcGVjaWZpYyBwb3J0aW9uIG9mIFJYX0RJR19DVFJMIGluaXQgKi8KKyAgICAgICAgICAgICAgIDA7IC8qIEFsd2F5cyBkaXNhYmxlIHRoZSBzYW1wbGUgcmF0ZSBjb252ZXJ0ZXIgZm9yIDMyTUh6ICovCisgICAgfQorI2VuZGlmIC8qIFJGX09TQ18yNk1IWiA9PSAxICovCisKKyAgICB0ZW1wIHw9IGNvbV9jb25maWctPnJ4X2RpZ19jdHJsX2luaXQ7ICAvKiBDb21tb24gcG9ydGlvbiBvZiBSWF9ESUdfQ1RSTCBpbml0ICovCisgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMID0gdGVtcDsKKworICAgIC8qIERDT0NfQ0FMX0lJUiAqLworI2lmIFJGX09TQ18yNk1IWiA9PSAxCisgICAgeworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DQUxfSUlSID0gZGF0YXJhdGVfY29uZmlnLT5kY29jX2NhbF9paXJfaW5pdF8yNm1oejsKKyAgICB9CisjZWxzZQorICAgIHsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQ0FMX0lJUiA9IGRhdGFyYXRlX2NvbmZpZy0+ZGNvY19jYWxfaWlyX2luaXRfMzJtaHo7CisgICAgfQorI2VuZGlmIC8qIFJGX09TQ18yNk1IWiA9PSAxICovCisKKyAgICAvKiBEQ19SRVNJRF9DVFJMICovCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyAgICB7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ19SRVNJRF9DVFJMID0gY29tX2NvbmZpZy0+ZGNfcmVzaWRfY3RybF9pbml0IHwgZGF0YXJhdGVfY29uZmlnLT5kY19yZXNpZF9jdHJsXzI2bWh6OworICAgIH0KKyNlbHNlCisgICAgeworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENfUkVTSURfQ1RSTCA9IGNvbV9jb25maWctPmRjX3Jlc2lkX2N0cmxfaW5pdCB8IGRhdGFyYXRlX2NvbmZpZy0+ZGNfcmVzaWRfY3RybF8zMm1oejsKKyAgICB9CisjZW5kaWYgLyogUkZfT1NDXzI2TUhaID09IDEgKi8KKworICAgIC8qIERDT0NfQ1RSTF8wICAmIF8xICovCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyAgICB7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMCA9IGNvbV9jb25maWctPmRjb2NfY3RybF8wX2luaXRfMjZtaHogfCBkYXRhcmF0ZV9jb25maWctPmRjb2NfY3RybF8wX2luaXRfMjZtaHo7IC8qIENvbWJpbmUgY29tbW9uIGFuZCBkYXRhcmF0ZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzEgPSBjb21fY29uZmlnLT5kY29jX2N0cmxfMV9pbml0IHwgZGF0YXJhdGVfY29uZmlnLT5kY29jX2N0cmxfMV9pbml0XzI2bWh6OyAvKiBDb21iaW5lIGNvbW1vbiBhbmQgZGF0YXJhdGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMiA9IGRhdGFyYXRlX2NvbmZpZy0+ZGNvY19jdHJsXzJfaW5pdF8yNm1oejsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKyAgICB9CisjZWxzZQorICAgIHsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8wID0gY29tX2NvbmZpZy0+ZGNvY19jdHJsXzBfaW5pdF8zMm1oeiB8IGRhdGFyYXRlX2NvbmZpZy0+ZGNvY19jdHJsXzBfaW5pdF8zMm1oejsgLyogQ29tYmluZSBjb21tb24gYW5kIGRhdGFyYXRlIHNwZWNpZmljIHNldHRpbmdzICovCisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMSA9IGNvbV9jb25maWctPmRjb2NfY3RybF8xX2luaXQgfCBkYXRhcmF0ZV9jb25maWctPmRjb2NfY3RybF8xX2luaXRfMzJtaHo7IC8qIENvbWJpbmUgY29tbW9uIGFuZCBkYXRhcmF0ZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8yID0gZGF0YXJhdGVfY29uZmlnLT5kY29jX2N0cmxfMl9pbml0XzMybWh6OworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKyAgICB9CisjZW5kaWYgLyogUkZfT1NDXzI2TUhaID09IDEgKi8KKyAgICBpZiAoZmlyc3RfaW5pdCkKKyAgICB7CisgICAgICAgIC8qIERDT0NfQ0FMX0dBSU4gKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQ0FMX0dBSU4gPSBjb21fY29uZmlnLT5kY29jX2NhbF9nYWluX2luaXQ7CisKKyAgICAgICAgLyogRENPQ19DQUxfUkNQICovCisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX0NBTF9SQ1AgPSBjb21fY29uZmlnLT5kY29jX2NhbF9yY3BfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkxOQV9HQUlOX1ZBTF8zXzAgPSBjb21fY29uZmlnLT5sbmFfZ2Fpbl92YWxfM18wOworICAgICAgICBYQ1ZSX1JYX0RJRy0+TE5BX0dBSU5fVkFMXzdfNCA9IGNvbV9jb25maWctPmxuYV9nYWluX3ZhbF83XzQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5MTkFfR0FJTl9WQUxfOCA9IGNvbV9jb25maWctPmxuYV9nYWluX3ZhbF84OworICAgICAgICBYQ1ZSX1JYX0RJRy0+QkJBX1JFU19UVU5FX1ZBTF83XzAgPSBjb21fY29uZmlnLT5iYmFfcmVzX3R1bmVfdmFsXzdfMDsKKyAgICAgICAgWENWUl9SWF9ESUctPkJCQV9SRVNfVFVORV9WQUxfMTBfOCA9IGNvbV9jb25maWctPmJiYV9yZXNfdHVuZV92YWxfMTBfODsKKworICAgICAgICAvKiBMTkFfR0FJTl9MSU5fVkFMICovCisgICAgICAgIFhDVlJfUlhfRElHLT5MTkFfR0FJTl9MSU5fVkFMXzJfMCA9IGNvbV9jb25maWctPmxuYV9nYWluX2xpbl92YWxfMl8wX2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5MTkFfR0FJTl9MSU5fVkFMXzVfMyA9IGNvbV9jb25maWctPmxuYV9nYWluX2xpbl92YWxfNV8zX2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5MTkFfR0FJTl9MSU5fVkFMXzhfNiA9IGNvbV9jb25maWctPmxuYV9nYWluX2xpbl92YWxfOF82X2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5MTkFfR0FJTl9MSU5fVkFMXzkgPSBjb21fY29uZmlnLT5sbmFfZ2Fpbl9saW5fdmFsXzlfaW5pdDsKKworICAgICAgICAvKiBCQkFfUkVTX1RVTkVfTElOX1ZBTCAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+QkJBX1JFU19UVU5FX0xJTl9WQUxfM18wID0gY29tX2NvbmZpZy0+YmJhX3Jlc190dW5lX2xpbl92YWxfM18wX2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzQgPSBjb21fY29uZmlnLT5iYmFfcmVzX3R1bmVfbGluX3ZhbF83XzRfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkJCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzggPSBjb21fY29uZmlnLT5iYmFfcmVzX3R1bmVfbGluX3ZhbF8xMF84X2luaXQ7CisKKyAgICAgICAgLyogQkJBX1NURVAgKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQkJBX1NURVAgPSBjb21fY29uZmlnLT5kY29jX2JiYV9zdGVwX2luaXQ7CisKKyAgICAgICAgLyogRENPQ19UWkFfU1RFUCAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8wID0gY29tX2NvbmZpZy0+ZGNvY190emFfc3RlcF8wMF9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8xID0gY29tX2NvbmZpZy0+ZGNvY190emFfc3RlcF8wMV9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8yID0gY29tX2NvbmZpZy0+ZGNvY190emFfc3RlcF8wMl9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8zID0gY29tX2NvbmZpZy0+ZGNvY190emFfc3RlcF8wM19pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF80ID0gY29tX2NvbmZpZy0+ZGNvY190emFfc3RlcF8wNF9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF81ID0gY29tX2NvbmZpZy0+ZGNvY190emFfc3RlcF8wNV9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF82ID0gY29tX2NvbmZpZy0+ZGNvY190emFfc3RlcF8wNl9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF83ID0gY29tX2NvbmZpZy0+ZGNvY190emFfc3RlcF8wN19pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF84ID0gY29tX2NvbmZpZy0+ZGNvY190emFfc3RlcF8wOF9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF85ID0gY29tX2NvbmZpZy0+ZGNvY190emFfc3RlcF8wOV9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8xMCA9IGNvbV9jb25maWctPmRjb2NfdHphX3N0ZXBfMTBfaW5pdDsKKworI2lmIChSQURJT19JU19HRU5fM1AwIHx8IFJBRElPX0lTX0dFTl8yUDEpCisgICAgICAgIC8qIERDT0NfQ0FMX0ZBSUwgYW5kIERDT0NfQ0FMX1BBU1MgKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQ0FMX0ZBSUxfVEggPSBjb21fY29uZmlnLT5kY29jX2NhbF9mYWlsX3RoX2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX0NBTF9QQVNTX1RIID0gY29tX2NvbmZpZy0+ZGNvY19jYWxfcGFzc190aF9pbml0OworI2VuZGlmIC8qIChSQURJT19JU19HRU5fM1AwIHx8IFJBRElPX0lTX0dFTl8yUDEpICovCisgICAgfQorCisgICAgLyogQUdDX0NUUkxfMCAuLiBfMyAqLworICAgIFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8wID0gY29tX2NvbmZpZy0+YWdjX2N0cmxfMF9pbml0IHwgbW9kZV9jb25maWctPmFnY19jdHJsXzBfaW5pdDsKKworI2lmIFJGX09TQ18yNk1IWiA9PSAxCisgICAgeworICAgICAgICBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMSA9IGNvbV9jb25maWctPmFnY19jdHJsXzFfaW5pdF8yNm1oeiB8IGRhdGFyYXRlX2NvbmZpZy0+YWdjX2N0cmxfMV9pbml0XzI2bWh6OyAvKiBDb21iaW5lIGNvbW1vbiBhbmQgZGF0YXJhdGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkFHQ19DVFJMXzIgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+YWdjX2N0cmxfMl9pbml0XzI2bWh6OworICAgIH0KKyNlbHNlCisgICAgeworICAgICAgICBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMSA9IGNvbV9jb25maWctPmFnY19jdHJsXzFfaW5pdF8zMm1oeiB8IGRhdGFyYXRlX2NvbmZpZy0+YWdjX2N0cmxfMV9pbml0XzMybWh6OyAvKiBDb21iaW5lIGNvbW1vbiBhbmQgZGF0YXJhdGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkFHQ19DVFJMXzIgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+YWdjX2N0cmxfMl9pbml0XzMybWh6OworICAgIH0KKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworCisgICAgaWYgKGZpcnN0X2luaXQpCisgICAgeworICAgICAgICBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMyA9IGNvbV9jb25maWctPmFnY19jdHJsXzNfaW5pdDsKKworICAgICAgICAvKiBBR0NfR0FJTl9UQkxfKiogKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkFHQ19HQUlOX1RCTF8wM18wMCA9IGNvbV9jb25maWctPmFnY19nYWluX3RibF8wM18wMF9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+QUdDX0dBSU5fVEJMXzA3XzA0ID0gY29tX2NvbmZpZy0+YWdjX2dhaW5fdGJsXzA3XzA0X2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5BR0NfR0FJTl9UQkxfMTFfMDggPSBjb21fY29uZmlnLT5hZ2NfZ2Fpbl90YmxfMTFfMDhfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkFHQ19HQUlOX1RCTF8xNV8xMiA9IGNvbV9jb25maWctPmFnY19nYWluX3RibF8xNV8xMl9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+QUdDX0dBSU5fVEJMXzE5XzE2ID0gY29tX2NvbmZpZy0+YWdjX2dhaW5fdGJsXzE5XzE2X2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5BR0NfR0FJTl9UQkxfMjNfMjAgPSBjb21fY29uZmlnLT5hZ2NfZ2Fpbl90YmxfMjNfMjBfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkFHQ19HQUlOX1RCTF8yNl8yNCA9IGNvbV9jb25maWctPmFnY19nYWluX3RibF8yNl8yNF9pbml0OworCisgICAgICAgIC8qIFJTU0lfQ1RSTF8wICovCisgICAgICAgIFhDVlJfUlhfRElHLT5SU1NJX0NUUkxfMCA9IGNvbV9jb25maWctPnJzc2lfY3RybF8wX2luaXQ7CisKKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgICAgIFhDVlJfUlhfRElHLT5SU1NJX0NUUkxfMSA9IGNvbV9jb25maWctPnJzc2lfY3RybF8xX2luaXQ7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisgICAgICAgIC8qIENDQV9FRF9MUUlfMCBhbmQgXzEgKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkNDQV9FRF9MUUlfQ1RSTF8wID0gY29tX2NvbmZpZy0+Y2NhX2VkX2xxaV9jdHJsXzBfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkNDQV9FRF9MUUlfQ1RSTF8xID0gY29tX2NvbmZpZy0+Y2NhX2VkX2xxaV9jdHJsXzFfaW5pdDsKKyAgICB9CisKKyAgICAvKiBDaGFubmVsIGZpbHRlciBjb2VmZmljaWVudHMgKi8KKyNpZiBSRl9PU0NfMjZNSFogPT0gMQorICAgIHsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzAgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wOworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfMSA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzE7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl8yID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMjsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzMgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zOworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfNCA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl81ID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNTsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzYgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82OworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfNyA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzc7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl84ID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfODsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzkgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85OworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfMTAgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMDsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzExID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTE7CisgICAgfQorI2Vsc2UKKyAgICB7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl8wID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMDsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzEgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xOworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfMiA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzI7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl8zID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMzsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzQgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80OworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfNSA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzU7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl82ID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNjsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzcgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83OworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfOCA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzg7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl85ID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOTsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzEwID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTA7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl8xMSA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExOworICAgIH0KKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworCisgICAgWENWUl9SWF9ESUctPlJYX1JDQ0FMX0NUUkwwID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X3JjY2FsX2N0cmxfMDsKKyAgICBYQ1ZSX1JYX0RJRy0+UlhfUkNDQUxfQ1RSTDEgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfcmNjYWxfY3RybF8xOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogWENWUl9UU00gY29uZmlncyAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIFhDVlJfVFNNLT5DVFJMID0gY29tX2NvbmZpZy0+dHNtX2N0cmw7CisKKyNpZiBSQURJT19JU19HRU5fMlAwCisgICAgaWYgKChtb2RlX2NvbmZpZy0+cmFkaW9fbW9kZSAhPSBaSUdCRUVfTU9ERSkgJiYgKG1vZGVfY29uZmlnLT5yYWRpb19tb2RlICE9IEJMRV9NT0RFKSkKKyAgICB7CisgICAgICAgIFhDVlJfVFNNLT5DVFJMICY9IH5YQ1ZSX1RTTV9DVFJMX0RBVEFfUEFERElOR19FTl9NQVNLOworICAgIH0KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fMlAwICovCisKKyAgICBpZiAoZmlyc3RfaW5pdCkKKyAgICB7CisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgWENWUl9NSVNDLT5MUFBTX0NUUkwgPSBjb21fY29uZmlnLT5scHBzX2N0cmxfaW5pdDsgLyogUmVnaXN0ZXIgaXMgaW4gWENWUl9NSVNDIGJ1dCBncm91cGVkIHdpdGggVFNNIGZvciBpbnRpYWxpemF0aW9uICovCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKworICAgICAgICBYQ1ZSX1RTTS0+T1ZSRDIgPSBjb21fY29uZmlnLT50c21fb3ZyZDJfaW5pdDsKKyAgICAgICAgLyogVFNNIHJlZ2lzdGVycyBhbmQgdGltaW5ncyAtIGRlcGVuZGVudCB1cG9uIGNsb2NrIGZyZXF1ZW5jeSAqLworI2lmIFJGX09TQ18yNk1IWiA9PSAxCisgICAgICAgIHsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5FTkRfT0ZfU0VRID0gY29tX2NvbmZpZy0+ZW5kX29mX3NlcV9pbml0XzI2bWh6OworICAgICAgICAgICAgWENWUl9UU00tPkZBU1RfQ1RSTDIgPSBjb21fY29uZmlnLT50c21fZmFzdF9jdHJsMl9pbml0XzI2bWh6OworICAgICAgICAgICAgWENWUl9UU00tPlJFQ1lDTEVfQ09VTlQgPSBjb21fY29uZmlnLT5yZWN5Y2xlX2NvdW50X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMTQgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzE0X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMTYgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzE2X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjUgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzI1X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjcgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzI3X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjggPSBjb21fY29uZmlnLT50c21fdGltaW5nXzI4X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjkgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzI5X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzAgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzMwX2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzEgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzMxX2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzIgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzMyX2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzMgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzMzX2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzYgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzM2X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzcgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzM3X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzkgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzM5X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNDAgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzQwX2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNDEgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzQxX2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNTIgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzUyX2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNTQgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzU0X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNTUgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzU1X2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNTYgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzU2X2luaXRfMjZtaHo7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5FTkRfT0ZfU0VRID0gY29tX2NvbmZpZy0+ZW5kX29mX3NlcV9pbml0XzMybWh6OworICAgICAgICAgICAgWENWUl9UU00tPkZBU1RfQ1RSTDIgPSBjb21fY29uZmlnLT50c21fZmFzdF9jdHJsMl9pbml0XzMybWh6OworICAgICAgICAgICAgWENWUl9UU00tPlJFQ1lDTEVfQ09VTlQgPSBjb21fY29uZmlnLT5yZWN5Y2xlX2NvdW50X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMTQgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzE0X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMTYgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzE2X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjUgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzI1X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjcgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzI3X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjggPSBjb21fY29uZmlnLT50c21fdGltaW5nXzI4X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjkgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzI5X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzAgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzMwX2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzEgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzMxX2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzIgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzMyX2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzMgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzMzX2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzYgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzM2X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzcgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzM3X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzkgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzM5X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNDAgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzQwX2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNDEgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzQxX2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNTIgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzUyX2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNTQgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzU0X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNTUgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzU1X2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNTYgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzU2X2luaXRfMzJtaHo7CisgICAgICAgIH0KKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworCisgICAgICAgIC8qIFRTTSB0aW1pbmdzIGluZGVwZW5kZW50IG9mIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDAgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzAwX2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcwMSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMDFfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzAyID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18wMl9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDMgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzAzX2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcwNCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMDRfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzA1ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18wNV9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDYgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzA2X2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcwNyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMDdfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzA4ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18wOF9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDkgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzA5X2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxMCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMTBfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzExID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18xMV9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMTIgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzEyX2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxMyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMTNfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzE1ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18xNV9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMTcgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzE3X2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxOCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMThfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzE5ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18xOV9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjAgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzIwX2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyMSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjFfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzIyID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18yMl9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjMgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzIzX2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyNCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjRfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzI2ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18yNl9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzQgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzM0X2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkczNSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzVfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzM4ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18zOF9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNTEgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzUxX2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1MyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNTNfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzU3ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ181N19pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNTggPSBjb21fY29uZmlnLT50c21fdGltaW5nXzU4X2luaXQ7CisJCQorI2lmIFJGX09TQ18yNk1IWiA9PSAxCisgICAgICAgIHsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5FTkRfT0ZfU0VRID0gWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV1UoRU5EX09GX1RYX1dVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1RYX1dEKEVORF9PRl9UWF9XRCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVShFTkRfT0ZfUlhfV1VfMjZNSFopIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV0QoRU5EX09GX1JYX1dEXzI2TUhaKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgeworICAgICAgICAgICAgWENWUl9UU00tPkVORF9PRl9TRVEgPSBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVShFTkRfT0ZfVFhfV1UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV0QoRU5EX09GX1RYX1dEKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVKEVORF9PRl9SWF9XVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XRChFTkRfT0ZfUlhfV0QpOworICAgICAgICB9CisjZW5kaWYgLyogUkZfT1NDXzI2TUhaID09IDEgKi8KKworICAgICAgICBYQ1ZSX1RTTS0+UEFfUkFNUF9UQkwwID0gY29tX2NvbmZpZy0+cGFfcmFtcF90YmxfMF9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+UEFfUkFNUF9UQkwxID0gY29tX2NvbmZpZy0+cGFfcmFtcF90YmxfMV9pbml0OworCQkKKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgICAgIFhDVlJfVFNNLT5QQV9SQU1QX1RCTDIgPSBjb21fY29uZmlnLT5wYV9yYW1wX3RibF8yX2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5QQV9SQU1QX1RCTDMgPSBjb21fY29uZmlnLT5wYV9yYW1wX3RibF8zX2luaXQ7CisKKyAgICAgICAgLyogQXBwbHkgUEFfUkFNUF9USU1FID09IDR1c2VjIGFkanVzdG1lbnRzIHRvIFRYX1dEIHNpZ25hbHMgKi8KKyNpZiAoUEFfUkFNUF9USU1FID09IDQpCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcwMCArPSBCMSgyKTsgLyogKGJiX2xkb19oZl9lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzAxICs9IEIxKDIpOyAvKiAoYmJfbGRvX2FkY2RhY19lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzAzICs9IEIxKDIpOyAvKiAoYmJfbGRvX3BkX2VuKSAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDQgKz0gQjEoMik7IC8qIChiYl9sZG9fZmRia19lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzA1ICs9IEIxKDIpOyAvKiAoYmJfbGRvX3Zjb2xvX2VuKSAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDYgKz0gQjEoMik7IC8qIChiYl9sZG9fdnRyZWZfZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxMCArPSBCMSgyKTsgLyogKGJiX3h0YWxfcGxsX3JlZl9jbGtfZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxMSArPSBCMSgyKTsgLyogKGJiX3h0YWxfZGFjX3JlZl9jbGtfZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxNSArPSBCMSgyKTsgLyogKHN5X3Zjb19lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzE3ICs9IEIxKDIpOyAvKiAoc3lfbG9fdHhfYnVmX2VuKSAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMTggKz0gQjEoMik7IC8qIChzeV9kaXZuX2VuKSAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjAgKz0gQjEoMik7IC8qICAoc3lfcGRfZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyMSArPSBCMSgyKTsgLyogKHN5X2xvX2Rpdm5fZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyMyArPSBCMSgyKTsgLyogKHN5X2xvX3R4X2VuKSAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjYgKz0gQjEoMik7IC8qICh0eF9wYV9lbikgKi8gCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkczNCArPSBCMSgyKTsgLyogKHBsbF9kaWdfZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkczNSArPSBCMSgyKTsgLyogKHR4X2RpZ19lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzM4ICs9IEIxKDIpOyAvKiAoc2lnbWFfZGVsdGFfZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1OCArPSBCMSgyKSAgLyogKHR4X2hwbV9kYWNfZW4pICovCisgICAgICAgIHRlbXAgPSBYQ1ZSX1RTTS0+VElNSU5HMTQ7CisgICAgICAgIHRlbXAgJj0gMHhGRkZGMDAwMDsgCisgICAgICAgIHRlbXAgfD0gQjAoRU5EX09GX1RYX1dVIC0gNCkgfCBCMShFTkRfT0ZfVFhfV1UgKyAxKTsgLyogKHN5X3BkX2N5Y2xlX3NsaXBfbGRfZnRfZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxNCA9IHRlbXA7CisjZW5kaWYgLyogKFBBX1JBTVBfVElNRSA9PSA0KSAqLworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKyAgICB9CisgICAgCisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgIGlmIChtb2RlX2NvbmZpZy0+cmFkaW9fbW9kZSA9PSBaSUdCRUVfTU9ERSkKKyAgICB7CisgICAgICAgIHRlbXAgPSBYQ1ZSX1RTTS0+VElNSU5HMzU7CisgICAgICAgIHRlbXAgJj0gfihCMCgweEZGKSk7CisgICAgICAgIGlmIChEQVRBX1BBRERJTkdfRU4gPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcCB8PSBCMChFTkRfT0ZfVFhfV1UgLSAyIC0gOCk7IC8qIEFkanVzdCBmb3IgZGF0YSBwYWRkaW5nIHRpbWUgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXAgfD0gQjAoRU5EX09GX1RYX1dVIC0gMik7IC8qIE5vIGRhdGEgcGFkZGluZyBhZGp1c3RtZW50ICovCisgICAgICAgIH0KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzM1ID0gdGVtcDsKKyAgICB9CisjZWxzZQorCisgICAgaWYgKChtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cmFkaW9fbW9kZSA9PSBNU0spICYmICgobW9kZV9kYXRhcmF0ZV9jb25maWctPmRhdGFfcmF0ZSA9PSBEUl81MDBLQlBTKSB8fCAobW9kZV9kYXRhcmF0ZV9jb25maWctPmRhdGFfcmF0ZSA9PSBEUl8yNTBLQlBTKSkpCisgICAgeworICAgICAgICAvKiBBcHBseSBhIHNwZWNpZmljIHZhbHVlIG9mIFRYX0RJR19FTiB3aGljaCBhc3N1bWVzIG5vIERBVEEgUEFERElORyAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzUgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzM1X2luaXQgfCBCMChUWF9ESUdfRU5fQVNTRVJUX01TSzUwMCk7IC8qIExTYnl0ZSBpcyBtb2RlIHNwZWNpZmljICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkczNSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzVfaW5pdCB8IG1vZGVfY29uZmlnLT50c21fdGltaW5nXzM1X2luaXQ7IC8qIExTYnl0ZSBpcyBtb2RlIHNwZWNpZmljLCBvdGhlciBieXRlcyBhcmUgY29tbW9uICovCisgICAgfQorI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKyAgICAKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBYQ1ZSX1RYX0RJRyBjb25maWdzICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyAgICB7CisgICAgICAgIFhDVlJfVFhfRElHLT5GU0tfU0NBTEUgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+dHhfZnNrX3NjYWxlXzI2bWh6OyAvKiBBcHBsaWVzIG9ubHkgdG8gODAyLjE1LjQgJiBNU0sgYnV0IHdvbid0IGhhcm0gb3RoZXIgcHJvdG9jb2xzICovCisgICAgICAgIFhDVlJfVFhfRElHLT5HRlNLX0NPRUZGMSA9IG1vZGVfY29uZmlnLT50eF9nZnNrX2NvZWZmMV8yNm1oejsKKyAgICAgICAgWENWUl9UWF9ESUctPkdGU0tfQ09FRkYyID0gbW9kZV9jb25maWctPnR4X2dmc2tfY29lZmYyXzI2bWh6OworICAgIH0KKyNlbHNlCisgICAgeworICAgICAgICBYQ1ZSX1RYX0RJRy0+RlNLX1NDQUxFID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnR4X2Zza19zY2FsZV8zMm1oejsgLyogQXBwbGllcyBvbmx5IHRvIDgwMi4xNS40ICYgTVNLIGJ1dCB3b24ndCBoYXJtIG90aGVyIHByb3RvY29scyAqLworICAgICAgICBYQ1ZSX1RYX0RJRy0+R0ZTS19DT0VGRjEgPSBtb2RlX2NvbmZpZy0+dHhfZ2Zza19jb2VmZjFfMzJtaHo7CisgICAgICAgIFhDVlJfVFhfRElHLT5HRlNLX0NPRUZGMiA9IG1vZGVfY29uZmlnLT50eF9nZnNrX2NvZWZmMl8zMm1oejsKKyAgICB9CisjZW5kaWYgLyogUkZfT1NDXzI2TUhaID09IDEgKi8KKworICAgIGlmIChmaXJzdF9pbml0KQorICAgIHsKKyAgICAgICAgWENWUl9UWF9ESUctPkNUUkwgPSBjb21fY29uZmlnLT50eF9jdHJsOworICAgICAgICBYQ1ZSX1RYX0RJRy0+REFUQV9QQURESU5HID0gY29tX2NvbmZpZy0+dHhfZGF0YV9wYWRkaW5nOworICAgICAgICBYQ1ZSX1RYX0RJRy0+REZUX1BBVFRFUk4gPSBjb21fY29uZmlnLT50eF9kZnRfcGF0dGVybjsKKwkJCisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgWENWUl9UWF9ESUctPlJGX0RGVF9CSVNUXzEgPSBjb21fY29uZmlnLT5yZl9kZnRfYmlzdF8xOworICAgICAgICBYQ1ZSX1RYX0RJRy0+UkZfREZUX0JJU1RfMiA9IGNvbV9jb25maWctPnJmX2RmdF9iaXN0XzI7CisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICB9CisKKyAgICBYQ1ZSX1RYX0RJRy0+R0ZTS19DVFJMID0gbW9kZV9jb25maWctPnR4X2dmc2tfY3RybDsKKworI2lmbmRlZiBTSU1VTEFUSU9OCisjaWYgKFRSSU1fQkJBX0RDT0NfREFDX0FUX0lOSVQpCisgICAgLyogUG9ydEMgMTcgZm9yIGZ1bmN0aW9uIG9ic2VydmFiaWxpdHkgKi8KKyAgICBQT1JUQy0+UENSWzE3XSAmPSB+UE9SVF9QQ1JfTVVYX01BU0s7CisgICAgUE9SVEMtPlBDUlsxN10gfD0gUE9SVF9QQ1JfTVVYKDEpOyAvKiBQVEMxNyB0byBhbHQgMSAtIEdQSU8gKi8KKyAgICBHUElPQy0+UEREUiB8PSAoMTw8MTcpOyAvKiBTZXQgUEMxNyBHUElPIHRvIG91dHB1dCBkaXJlY3Rpb24gKi8KKyAgICBHUElPQy0+UENPUiA9ICgxPDwxNyk7IC8qIFNldCBQQzE3IEdQSU8gdG8gTE9XICovCisgICAgaWYgKGZpcnN0X2luaXQpCisgICAgeworICAgICAgICB1aW50MzJfdCBlbmRfb2Zfcnhfd3UgPSAwOworICAgICAgICBYQ1ZSX0ZvcmNlUnhXdSgpOworICAgICAgICAvKiBXYWl0IGZvciBUU00gdG8gcmVhY2ggdGhlIGVuZCBvZiB3YXJtdXAgKHVubGVzcyB5b3Ugd2FudCB0byBjYXB0dXJlIHNvbWUgc2FtcGxlcyBkdXJpbmcgRENPQyBjYWwgcGhhc2UpICovCisgICAgICAgIHRlbXAgPSBYQ1ZSX1RTTS0+RU5EX09GX1NFUTsKKyAgICAgICAgZW5kX29mX3J4X3d1ID0gKHRlbXAgJiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9NQVNLKSA+PiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9TSElGVDsKKyAgICAgICAgd2hpbGUgKCgoIFhDVlJfTUlTQy0+WENWUl9TVEFUVVMgJiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0NPVU5UX01BU0spID4+IFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fQ09VTlRfU0hJRlQgKSAhPSBlbmRfb2Zfcnhfd3UpIHt9OworICAgICAgICBHUElPQy0+UFNPUiA9ICgxIDw8IDE3KTsgLyogU2V0IFBDMTcgR1BJTyB0byBISUdIICovCisvLyAgICAgICAgaWYgKCFyeF9iYmFfZGNvY19kYWNfdHJpbV9zaG9ydElRKCkpCisgICAgICAgIGlmICghcnhfYmJhX2Rjb2NfZGFjX3RyaW1fRENlc3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnX3N0YXR1cyA9IGdYY3ZyVHJpbUZhaWx1cmVfYzsKKyAgICAgICAgfQorICAgICAgICBHUElPQy0+UENPUiA9ICgxIDw8IDE3KTsgLyogU2V0IFBDMTcgR1BJTyB0byBMT1cgKi8KKyAgICAgICAgWENWUl9Gb3JjZVJ4V2QoKTsKKyAgICAgICAgR1BJT0MtPlBTT1IgPSAoMSA8PCAxNyk7IC8qIFNldCBQQzE3IEdQSU8gdG8gSElHSCAqLworICAgICAgICBEQ09DX0RBQ19JTklUX0NhbCgxKTsKKyAgICAgICAgR1BJT0MtPlBDT1IgPSAoMSA8PCAxNyk7IC8qIFNldCBQQzE3IEdQSU8gdG8gTE9XICovCisgICAgfQorI2VuZGlmIC8qIFRSSU1fQkJBX0RDT0NfREFDX0FUX0lOSVQgKi8KKyNlbmRpZiAvKiBpZm5kZWYgU0lNVUxBVElPTiAqLworICAgIHJldHVybiBjb25maWdfc3RhdHVzOworfQorCit2b2lkIFhDVlJfUmVzZXQodm9pZCkKK3sKKyNpZiBSQURJT19JU19HRU5fM1AwCisjZWxzZQorICAgIFJTSU0tPkNPTlRST0wgfD0gUlNJTV9DT05UUk9MX1JBRElPX1JFU0VUX0JJVF9NQVNLOyAvKiBBc3NlcnQgcmFkaW8gc29mdHdhcmUgcmVzZXQgKi8KKyAgICBSU0lNLT5DT05UUk9MICY9IH5SU0lNX0NPTlRST0xfUkFESU9fUkVTRVRfQklUX01BU0s7IC8qIERlLWFzc2VydCByYWRpbyBzb2Z0d2FyZSByZXNldCAqLworICAgIFJTSU0tPkNPTlRST0wgJj0gflJTSU1fQ09OVFJPTF9SQURJT19SRVNFVF9CSVRfTUFTSzsgLyogRGUtYXNzZXJ0IHJhZGlvIHNvZnR3YXJlIHJlc2V0IGEgc2Vjb25kIHRpbWUgcGVyIFJBRElPX1JFU0VUIGJpdCBkZXNjcmlwdGlvbiAqLworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KK30KKworeGN2clN0YXR1c190IFhDVlJfQ2hhbmdlTW9kZSAocmFkaW9fbW9kZV90IG5ld19yYWRpb19tb2RlLCBkYXRhX3JhdGVfdCBuZXdfZGF0YV9yYXRlKSAvKiBDaGFuZ2UgZnJvbSBvbmUgcmFkaW8gbW9kZSB0byBhbm90aGVyICovCit7CisgICAgeGN2clN0YXR1c190IHN0YXR1czsKKyAgICBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKiBtb2RlX2RhdGFyYXRlX2NvbmZpZzsKKyAgICBjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190ICogZGF0YXJhdGVfY29uZmlnIDsKKyAgICBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKiByYWRpb19tb2RlX2NmZzsKKyAgICBjb25zdCB4Y3ZyX2NvbW1vbl9jb25maWdfdCAqIHJhZGlvX2NvbW1vbl9jb25maWc7CisKKyAgICBzdGF0dXMgPSBYQ1ZSX0dldERlZmF1bHRDb25maWcobmV3X3JhZGlvX21vZGUsIG5ld19kYXRhX3JhdGUsICh2b2lkICopJnJhZGlvX2NvbW1vbl9jb25maWcsICh2b2lkICopJnJhZGlvX21vZGVfY2ZnLCAodm9pZCAqKSZtb2RlX2RhdGFyYXRlX2NvbmZpZywgKHZvaWQgKikmZGF0YXJhdGVfY29uZmlnICk7CisgICAgCisgICAgaWYgKHN0YXR1cyA9PSBnWGN2clN1Y2Nlc3NfYykKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFhDVlJfQ29uZmlndXJlKChjb25zdCB4Y3ZyX2NvbW1vbl9jb25maWdfdCAqKXJhZGlvX2NvbW1vbl9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190ICopcmFkaW9fbW9kZV9jZmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICopbW9kZV9kYXRhcmF0ZV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCAqKWRhdGFyYXRlX2NvbmZpZywgMjUsIFhDVlJfTU9ERV9DSEFOR0UpOworICAgICAgICBjdXJyZW50X3hjdnJfY29uZmlnLnJhZGlvX21vZGUgPSBuZXdfcmFkaW9fbW9kZTsKKyAgICAgICAgY3VycmVudF94Y3ZyX2NvbmZpZy5kYXRhX3JhdGUgPSBuZXdfZGF0YV9yYXRlOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgWENWUl9FbmFOQlJTU0lNZWFzKCB1aW50OF90IElJUm5iRW5hYmxlICkKK3sKKyAgICBpZiAoSUlSbmJFbmFibGUpCisgICAgeworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlNTSV9DVFJMXzAgfD0gWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9JSVJfQ1dfV0VJR0hUX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFhDVlJfUlhfRElHLT5SU1NJX0NUUkxfMCAmPSB+WENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9JSVJfQ1dfV0VJR0hUX01BU0s7CisgICAgfQorfQorCit4Y3ZyU3RhdHVzX3QgWENWUl9PdmVycmlkZUZyZXF1ZW5jeSAoIHVpbnQzMl90IGZyZXEsIHVpbnQzMl90IHJlZk9zYyApCit7CisgICAgZG91YmxlIGludGVnZXJfdXNlZF9pbl9IeiwgCisgICAgICAgICAgIGludGVnZXJfdXNlZF9pbl9MU0IsIAorICAgICAgICAgICBudW1lcmF0b3JfZnJhY3Rpb24sIAorICAgICAgICAgICBudW1lcmF0b3JfaW5fSHosIAorICAgICAgICAgICBudW1lcmF0b3JfaW5fTFNCLCAKKyAgICAgICAgICAgbnVtZXJhdG9yX3Vucm91bmRlZCwKKyAgICAgICAgICAgcmVhbF9pbnRfYW5kX2ZyYWN0aW9uLCAKKyAgICAgICAgICAgcmVhbF9mcmFjdGlvbiwgCisgICAgICAgICAgIHJlcXVlc3RlZF9mcmVxX2luX0xTQiwKKyAgICAgICAgICAgc2RtX2xzYjsKKyAgICB1aW50MzJfdCB0ZW1wOworICAgIHN0YXRpYyB1aW50MzJfdCBpbnRlZ2VyX3RydW5jYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgaW50ZWdlcl90b191c2U7CisgICAgc3RhdGljIGludDMyX3QgbnVtZXJhdG9yX3JvdW5kZWQ7CisKKyAgICAvKiBDb25maWd1cmUgZm9yIENvYXJzZSBUdW5lICovCisgICAgdWludDMyX3QgY29hcnNlX3R1bmVfdGFyZ2V0ID0gZnJlcSAvIDEwMDAwMDA7CisKKyAgICB0ZW1wID0gWENWUl9QTExfRElHLT5DVFVORV9DVFJMOworICAgIHRlbXAgJj0gflhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX1RBUkdFVF9NQU5VQUxfTUFTSzsKKyAgICB0ZW1wIHw9IFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX1RBUkdFVF9NQU5VQUwoY29hcnNlX3R1bmVfdGFyZ2V0KTsKKyAgICBYQ1ZSX1BMTF9ESUctPkNUVU5FX0NUUkwgPSB0ZW1wOworCisgICAgLyogQ2FsY3VsYXRlIHRoZSBMb3cgUG9ydCB2YWx1ZXMgKi8KKyAgICBzZG1fbHNiID0gcmVmT3NjIC8gMTMxMDcyLjA7CisKKyAgICByZWFsX2ludF9hbmRfZnJhY3Rpb24gPSBmcmVxIC8gKHJlZk9zYyAqIDIuMCk7CisKKyAgICBpbnRlZ2VyX3RydW5jYXRlZCA9ICh1aW50MzJfdCkgdHJ1bmMocmVhbF9pbnRfYW5kX2ZyYWN0aW9uKTsKKworICAgIHJlYWxfZnJhY3Rpb24gPSByZWFsX2ludF9hbmRfZnJhY3Rpb24gLSBpbnRlZ2VyX3RydW5jYXRlZDsKKworICAgIGlmIChyZWFsX2ZyYWN0aW9uID4gMC41KSAKKyAgICB7CisgICAgICAgIGludGVnZXJfdG9fdXNlID0gaW50ZWdlcl90cnVuY2F0ZWQgKyAxOworICAgIH0gCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgIAorICAgIHsKKyAgICAgICAgaW50ZWdlcl90b191c2UgPSBpbnRlZ2VyX3RydW5jYXRlZDsKKyAgICB9CisKKyAgICBudW1lcmF0b3JfZnJhY3Rpb24gPSByZWFsX2ludF9hbmRfZnJhY3Rpb24gLSBpbnRlZ2VyX3RvX3VzZTsKKworICAgIGludGVnZXJfdXNlZF9pbl9IeiAgPSBpbnRlZ2VyX3RvX3VzZSAqIHJlZk9zYyAqIDI7CisgICAgaW50ZWdlcl91c2VkX2luX0xTQiA9IGludGVnZXJfdXNlZF9pbl9IeiAvIHNkbV9sc2I7CisKKyAgICBudW1lcmF0b3JfaW5fSHogID0gbnVtZXJhdG9yX2ZyYWN0aW9uICogcmVmT3NjICogMjsKKyAgICBudW1lcmF0b3JfaW5fTFNCID0gbnVtZXJhdG9yX2luX0h6ICAgIC8gc2RtX2xzYjsKKworICAgIHJlcXVlc3RlZF9mcmVxX2luX0xTQiA9IGludGVnZXJfdXNlZF9pbl9MU0IgKyBudW1lcmF0b3JfaW5fTFNCOworCisgICAgbnVtZXJhdG9yX3Vucm91bmRlZCA9IChyZXF1ZXN0ZWRfZnJlcV9pbl9MU0IgLSBpbnRlZ2VyX3VzZWRfaW5fTFNCKSAqIDI1NjsKKworICAgIG51bWVyYXRvcl9yb3VuZGVkID0gKGludDMyX3Qpcm91bmQobnVtZXJhdG9yX3Vucm91bmRlZCk7CisKKyAgICAvKiBXcml0ZSB0aGUgTG93IFBvcnQgSW50ZWdlciBhbmQgTnVtZXJhdG9yICovCisgICAgdGVtcCA9IFhDVlJfUExMX0RJRy0+TFBNX1NETV9DVFJMMTsKKyAgICB0ZW1wICY9IH5YQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19NQVNLOworICAgIHRlbXAgfD0gKFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHKGludGVnZXJfdG9fdXNlKSB8IAorICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX1NETV9NQVBfRElTQUJMRV9NQVNLKTsKKyAgICBYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fQ1RSTDEgPSB0ZW1wOworCisgICAgWENWUl9QTExfRElHLT5MUE1fU0RNX0NUUkwyID0gbnVtZXJhdG9yX3JvdW5kZWQ7CisKKyAgICByZXR1cm4gZ1hjdnJTdWNjZXNzX2M7Cit9CisKK3ZvaWQgWENWUl9SZWdpc3RlclBhbmljQ2IgKCBwYW5pY19mcHRyIGZwdHIgKSAvKiBBbGxvdyB1cHBlciBsYXllcnMgdG8gcHJvdmlkZSBQQU5JQyBjYWxsYmFjayAqLworeworICAgIHNfUGFuaWNGdW5jdGlvblB0ciA9IGZwdHI7Cit9CisKK3ZvaWQgWGN2clBhbmljKFhDVlJfUEFOSUNfSURfVCBwYW5pY19pZCwgdWludDMyX3QgcGFuaWNfYWRkcmVzcykKK3sKKyAgICBpZiAoIHNfUGFuaWNGdW5jdGlvblB0ciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgc19QYW5pY0Z1bmN0aW9uUHRyKHBhbmljX2lkLCBwYW5pY19hZGRyZXNzLCAwLCAwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWludDhfdCBkdW1teTsKKworICAgICAgICB3aGlsZSgxKQorICAgICAgICB7CisgICAgICAgICAgICBkdW1teSA9IGR1bW15OworICAgICAgICB9CisgICAgfQorfQorCitoZWFsdGhTdGF0dXNfdCBYQ1ZSX0hlYWx0aENoZWNrICggdm9pZCApIC8qIEFsbG93IHVwcGVyIGxheWVycyB0byBwb2xsIHRoZSByYWRpbyBoZWFsdGggKi8KK3sKKyAgICByZXR1cm4gKGhlYWx0aFN0YXR1c190KU5PX0VSUk9SUzsKK30KKwordm9pZCBYQ1ZSX0ZhZExwcHNDb250cm9sKEZBRF9MUFBTX0NUUkxfVCBjb250cm9sKQoreworCit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBtYXAgcmFkaW8gbW9kZSB0byBMTCB1c2FnZSAqLworbGlua19sYXllcl90IG1hcF9tb2RlX3RvX2xsKHJhZGlvX21vZGVfdCBtb2RlKQoreworICAgIGxpbmtfbGF5ZXJfdCBsbHJldDsKKyAgICBzd2l0Y2ggKG1vZGUpCisgICAgeworICAgICAgICBjYXNlIEJMRV9NT0RFOgorICAgICAgICAgICAgbGxyZXQgPSBCTEVfTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBaSUdCRUVfTU9ERToKKyAgICAgICAgICAgIGxscmV0ID0gWklHQkVFX0xMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQU5UX01PREU6CisgICAgICAgICAgICBsbHJldCA9IEFOVF9MTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMHA1OgorICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMHAzMjoKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwNV9oXzBwNzoKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwNV9oXzFwMDoKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwM19oXzBwNToKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwN19oXzBwNToKKyAgICAgICAgY2FzZSBNU0s6IAorICAgICAgICAgICAgbGxyZXQgPSBHRU5GU0tfTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxscmV0ID0gVU5BU1NJR05FRF9MTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbGxyZXQ7Cit9CisKKyNpZiBSQURJT19JU19HRU5fM1AwCit2b2lkIFhDVlJfU2V0QlNNX05UV19BZGRyZXNzKHVpbnQzMl90IGJzbV9udHdfYWRkcmVzcykKK3sKKyAgICBYQ1ZSX1BIWS0+TlRXX0FEUl9CU00gPSBic21fbnR3X2FkZHJlc3M7Cit9CisKK3VpbnQzMl90IFhDVlJfR2V0QlNNX05UV19BZGRyZXNzKHZvaWQpCit7CisgICAgcmV0dXJuIFhDVlJfUEhZLT5OVFdfQURSX0JTTTsKK30KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKy8qIFNldHVwIElSUSBtYXBwaW5nIHRvIExMIGludGVycnVwdCBvdXRwdXRzIGluIFhDVlJfQ1RSTCAqLworeGN2clN0YXR1c190IFhDVlJfU2V0SVJRTWFwcGluZyhyYWRpb19tb2RlX3QgaXJxMF9tYXBwaW5nLCByYWRpb19tb2RlX3QgaXJxMV9tYXBwaW5nKQoreworICAgIGxpbmtfbGF5ZXJfdCBpbnQwID0gbWFwX21vZGVfdG9fbGwoaXJxMF9tYXBwaW5nKTsKKyAgICBsaW5rX2xheWVyX3QgaW50MSA9IG1hcF9tb2RlX3RvX2xsKGlycTFfbWFwcGluZyk7CisgICAgeGN2clN0YXR1c190IHN0YXR1c3JldDsKKyAgICAvKiBNYWtlIHN1cmUgdGhlIHR3byBMTCdzIHJlcXVlc3RlZCBhcmVuJ3QgdGhlIHNhbWUgKi8KKyAgICBpZiAoaW50MCA9PSBpbnQxKQorICAgIHsKKyAgICAgICAgc3RhdHVzcmV0ID0gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aW50MzJfdCB0ZW1wOworICAgICAgICB0ZW1wID0gWENWUl9NSVNDLT5YQ1ZSX0NUUkw7CisgICAgICAgIHRlbXAgJj0gfihYQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMF9JUlFfU0VMX01BU0sgfCBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMV9JUlFfU0VMX01BU0spOworICAgICAgICB0ZW1wIHw9IChYQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMF9JUlFfU0VMKGludDApIHwgWENWUl9DVFJMX1hDVlJfQ1RSTF9SQURJTzFfSVJRX1NFTChpbnQxKSk7CisgICAgICAgIFhDVlJfTUlTQy0+WENWUl9DVFJMID0gdGVtcDsKKyAgICAgICAgc3RhdHVzcmV0ID0gZ1hjdnJTdWNjZXNzX2M7CisgICAgfQorICAgIHJldHVybiBzdGF0dXNyZXQ7Cit9CisKKy8qIEdldCBjdXJyZW50IHN0YXRlIG9mIElSUSBtYXBwaW5nIGZvciBlaXRoZXIgIHJhZGlvIElOVDAgb3IgSU5UMSAqLworbGlua19sYXllcl90IFhDVlJfR2V0SVJRTWFwcGluZyh1aW50OF90IGludF9udW0pCit7CisgICAgaWYgKGludF9udW0gPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiAobGlua19sYXllcl90KSgoWENWUl9NSVNDLT5YQ1ZSX0NUUkwgJiBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMF9JUlFfU0VMX01BU0spPj5YQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMF9JUlFfU0VMX1NISUZUKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIChsaW5rX2xheWVyX3QpKChYQ1ZSX01JU0MtPlhDVlJfQ1RSTCAmIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8xX0lSUV9TRUxfTUFTSyk+PlhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8xX0lSUV9TRUxfU0hJRlQpOworICAgIH0KK30KKworLyogR2V0IGN1cnJlbnQgc3RhdGUgb2YgcmFkaW8gbW9kZSBhbmQgZGF0YSByYXRlICovCit4Y3ZyU3RhdHVzX3QgWENWUl9HZXRDdXJyZW50Q29uZmlnKHhjdnJfY3VyckNvbmZpZ190ICogY3Vycl9jb25maWcpCit7CisgICAgeGN2clN0YXR1c190IHN0YXR1cyA9IGdYY3ZySW52YWxpZFBhcmFtZXRlcnNfYzsKKyAgICBpZiAoY3Vycl9jb25maWcgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGN1cnJfY29uZmlnLT5yYWRpb19tb2RlID0gY3VycmVudF94Y3ZyX2NvbmZpZy5yYWRpb19tb2RlOworICAgICAgICBjdXJyX2NvbmZpZy0+ZGF0YV9yYXRlID0gY3VycmVudF94Y3ZyX2NvbmZpZy5kYXRhX3JhdGU7CisgICAgICAgIHN0YXR1cyA9IGdYY3ZyU3VjY2Vzc19jOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKiBDdXN0b21lciBsZXZlbCB0cmltIGZ1bmN0aW9ucyAqLworeGN2clN0YXR1c190IFhDVlJfU2V0WHRhbFRyaW0odWludDhfdCB4dGFsVHJpbSkKK3sKKyAgICB4Y3ZyU3RhdHVzX3Qgc3RhdHVzID0gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOworCisgICAgaWYgKCh4dGFsVHJpbSAmIDB4ODApID09IDApCisgICAgeworICAgICAgICB1aW50MzJfdCB0ZW1wOworICAgICAgICB0ZW1wID0gUlNJTS0+QU5BX1RSSU07CisgICAgICAgIHRlbXAgJj0gflJTSU1fQU5BX1RSSU1fQkJfWFRBTF9UUklNX01BU0s7CisgICAgICAgIFJTSU0tPkFOQV9UUklNID0gdGVtcCB8IFJTSU1fQU5BX1RSSU1fQkJfWFRBTF9UUklNKHh0YWxUcmltKTsKKyAgICAgICAgc3RhdHVzID0gZ1hjdnJTdWNjZXNzX2M7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3VpbnQ4X3QgIFhDVlJfR2V0WHRhbFRyaW0odm9pZCkKK3sKKyAgICB1aW50OF90IHRlbXBfeHRhbDsKKyAgICB0ZW1wX3h0YWwgPSAoKFJTSU0tPkFOQV9UUklNICYgUlNJTV9BTkFfVFJJTV9CQl9YVEFMX1RSSU1fTUFTSyk+PlJTSU1fQU5BX1RSSU1fQkJfWFRBTF9UUklNX1NISUZUKTsKKyAgICByZXR1cm4gdGVtcF94dGFsOworfQorCisvKiBSU1NJIGFkanVzdG1lbnQgKi8KK3hjdnJTdGF0dXNfdCBYQ1ZSX1NldFJzc2lBZGp1c3RtZW50KGludDhfdCBhZGopCit7CisgICAgWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8wICY9IH5YQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0FESl9NQVNLOworICAgIFhDVlJfUlhfRElHLT5SU1NJX0NUUkxfMCB8PSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0FESihhZGopOworICAgIHJldHVybiBnWGN2clN1Y2Nlc3NfYzsKK30KKworaW50OF90ICBYQ1ZSX0dldFJzc2lBZGp1c3RtZW50KHZvaWQpCit7CisgICAgaW50OF90IGFkajsKKyAgICBhZGogPSAoWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8wICYgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9BREpfTUFTSykgPj4gWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9BREpfU0hJRlQ7CisgICAgcmV0dXJuIGFkajsKK30KKworLyogUmFkaW8gZGVidWcgZnVuY3Rpb25zICovCit4Y3ZyU3RhdHVzX3QgWENWUl9PdmVycmlkZUNoYW5uZWwodWludDhfdCBjaGFubmVsLCB1aW50OF90IHVzZU1hcHBlZENoYW5uZWwpCit7CisgICAgdWludDMyX3QgdGVtcDsKKworICAgIGlmIChjaGFubmVsID09IDB4RkYpCisgICAgeworICAgICAgICAvKiBDbGVhciBhbGwgb2YgdGhlIG92ZXJyaWRlcyBhbmQgcmVzdG9yZSB0byBMTCBjaGFubmVsIGNvbnRyb2wgKi8KKyAgICAgICAgdGVtcCA9IFhDVlJfUExMX0RJRy0+Q0hBTl9NQVA7CisgICAgICAgIHRlbXAgJj0gfihYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQ0hBTk5FTF9OVU1fTUFTSyB8IFhDVlJfUExMX0RJR19DSEFOX01BUF9CT0NfTUFTSyAKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICB8IFhDVlJfUExMX0RJR19DSEFOX01BUF9aT0NfTUFTSworI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgICAgICAgICAgICAgICB8IFhDVlJfUExMX0RJR19DSEFOX01BUF9IT1BfVEJMX0NGR19PVlJEX0VOX01BU0sKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisgICAgICAgICAgICAgICAgICk7CisKKyAgICAgIFhDVlJfUExMX0RJRy0+Q0hBTl9NQVAgPSB0ZW1wOyAKKworICAgICAgLyogU3RvcCB1c2luZyB0aGUgbWFudWFsIGZyZXF1ZW5jeSBzZXR0aW5nICovCisgICAgICBYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fQ1RSTDEgJj0gflhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX1NETV9NQVBfRElTQUJMRV9NQVNLOworCisgICAgICByZXR1cm4gZ1hjdnJTdWNjZXNzX2M7CisgICAgfQorCisgICAgaWYgKGNoYW5uZWwgPj0gMTI4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdYY3ZySW52YWxpZFBhcmFtZXRlcnNfYzsKKyAgICB9CisKKyAgICBpZiAodXNlTWFwcGVkQ2hhbm5lbCkKKyAgICB7CisgICAgICAgIHRlbXAgPSAoWENWUl9NSVNDLT5YQ1ZSX0NUUkwgJiBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0spPj5YQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX1NISUZUOyAvKiBFeHRyYWN0IFBST1RPQ09MIGJpdGZpZWxkICovCisKKyAgICAgICAgc3dpdGNoICh0ZW1wKQorICAgICAgICB7CisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgIGNhc2UgMHgzOiAvKiBBTlQgcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICBBTlQtPkNIQU5ORUxfTlVNID0gY2hhbm5lbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICAgICAgICAgY2FzZSAweDg6IC8qIEdFTkZTSyBwcm90b2NvbCAqLworICAgICAgICAgICAgY2FzZSAweDk6IC8qIE1TSyBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgIEdFTkZTSy0+Q0hBTk5FTF9OVU0gPSBjaGFubmVsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogLyogQWxsIG90aGVyIHByb3RvY29scyAqLworICAgICAgICAgICAgICAgIHRlbXAgPSBYQ1ZSX1BMTF9ESUctPkNIQU5fTUFQOworICAgICAgICAgICAgICAgIHRlbXAgJj0gfihYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQ0hBTk5FTF9OVU1fTUFTSworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IFhDVlJfUExMX0RJR19DSEFOX01BUF9IT1BfVEJMX0NGR19PVlJEX0VOX01BU0sKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB0ZW1wIHw9IChYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQ0hBTk5FTF9OVU0oY2hhbm5lbCkgfCBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk9DX01BU0sKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgICAgfCBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfWk9DX01BU0sKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUctPkNIQU5fTUFQID0gdGVtcDsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgWENWUl9QTExfRElHLT5DSEFOX01BUCB8PSAoWENWUl9QTExfRElHX0NIQU5fTUFQX0JPQ19NQVNLCisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhDVlJfUExMX0RJR19DSEFOX01BUF9aT0NfTUFTSworI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsgCisKKyAgICAgICAgWENWUl9QTExfRElHLT5MUE1fU0RNX0NUUkwzID0gWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDNfTFBNX0RFTk9NKGdQbGxEZW5vbV9jKTsKKyAgICAgICAgWENWUl9QTExfRElHLT5MUE1fU0RNX0NUUkwyID0gWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDJfTFBNX05VTShtYXBUYWJsZVtjaGFubmVsXS5udW1lcmF0b3IpOworCisgICAgICAgIHRlbXAgPSBYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fQ1RSTDE7CisgICAgICAgIHRlbXAgJj0gflhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHX01BU0s7CisgICAgICAgIHRlbXAgfD0gWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEcobWFwVGFibGVbY2hhbm5lbF0uaW50ZWdlcik7CisgICAgICAgIFhDVlJfUExMX0RJRy0+TFBNX1NETV9DVFJMMSA9IHRlbXA7CisKKyAgICAgICAgLyogU3RvcCB1c2luZyB0aGUgTEwgY2hhbm5lbCBtYXAgYW5kIHVzZSB0aGUgbWFudWFsIGZyZXF1ZW5jeSBzZXR0aW5nICovCisgICAgICAgIFhDVlJfUExMX0RJRy0+TFBNX1NETV9DVFJMMSB8PSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9TRE1fTUFQX0RJU0FCTEVfTUFTSzsKKyAgICB9CisKKyAgICByZXR1cm4gZ1hjdnJTdWNjZXNzX2M7Cit9CisKK3VpbnQzMl90IFhDVlJfR2V0RnJlcSAoIHZvaWQgKQoreworICAgIHVpbnQzMl90IHBsbF9pbnQ7CisgICAgdWludDMyX3QgcGxsX251bV91bnNpZ25lZDsKKyAgICBpbnQzMl90IHBsbF9udW07CisgICAgdWludDMyX3QgcGxsX2Rlbm9tOworICAgIGZsb2F0IGZyZXFfZmxvYXQ7CisKKyAgICBpZiAoWENWUl9QTExfRElHLT5MUE1fU0RNX0NUUkwxICYgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfU0RNX01BUF9ESVNBQkxFX01BU0spIC8qIE5vdCB1c2luZyBtYXBwZWQgY2hhbm5lbHMgKi8KKyAgICB7CisgICAgICAgIHBsbF9pbnQgPSAoWENWUl9QTExfRElHLT5MUE1fU0RNX0NUUkwxICYgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEdfTUFTSykgPj4KKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19TSElGVDsKKworICAgICAgICBwbGxfbnVtX3Vuc2lnbmVkID0gWENWUl9QTExfRElHLT5MUE1fU0RNX0NUUkwyOworICAgICAgICBwbGxfZGVub20gPSBYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fQ1RSTDM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFVzaW5nIG1hcHBlZCBjaGFubmVscyBzbyBuZWVkIHRvIHJlYWQgZnJvbSB0aGUgX1NFTEVDVEVEIGZpZWxkcyB0byBnZXQgdGhlIHZhbHVlcyBiZWluZyB1c2VkICovCisgICAgICAgIHBsbF9pbnQgPSAoWENWUl9QTExfRElHLT5MUE1fU0RNX0NUUkwxICYgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEdfU0VMRUNURURfTUFTSykgPj4KKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19TRUxFQ1RFRF9TSElGVDsKKworICAgICAgICBwbGxfbnVtX3Vuc2lnbmVkID0gWENWUl9QTExfRElHLT5MUE1fU0RNX1JFUzE7CisgICAgICAgIHBsbF9kZW5vbSA9IFhDVlJfUExMX0RJRy0+TFBNX1NETV9SRVMyOworICAgIH0KKworICAgIHVpbnQzMl90IGZyZXEgPSAwOworCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyAgICB1aW50MzJfdCByZWZfY2xrID0gMjZVOworI2Vsc2UKKyAgICB1aW50MzJfdCByZWZfY2xrID0gMzJVOworI2VuZGlmIC8qIFJGX09TQ18yNk1IWiA9PSAxICovCisKKyAgICAvKiBDaGVjayBpZiBzaWduIGJpdCBpcyBhc3NlcnRlZCAqLworICAgIGlmIChwbGxfbnVtX3Vuc2lnbmVkICYgMHgwNDAwMDAwMFUpCisgICAgeworICAgICAgICAvKiBTaWduIGV4dGVuZCB0aGUgbnVtZXJhdG9yICovCisgICAgICAgIHBsbF9udW0gPSAofnBsbF9udW1fdW5zaWduZWQgKyAxKSAmIDB4MDNGRkZGRkZVOyAKKworICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIGZyZXF1ZW5jeSBpbiBNSHogKi8KKyAgICAgICAgZnJlcV9mbG9hdCA9IChyZWZfY2xrICogMiAqIChwbGxfaW50IC0gKChmbG9hdClwbGxfbnVtIC8gcGxsX2Rlbm9tKSkpOyAKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBmcmVxdWVuY3kgaW4gTUh6ICovCisgICAgICAgIHBsbF9udW0gPSBwbGxfbnVtX3Vuc2lnbmVkOworICAgICAgICBmcmVxX2Zsb2F0ID0gKHJlZl9jbGsgKiAyICogKHBsbF9pbnQgKyAoKGZsb2F0KXBsbF9udW0gLyAoZmxvYXQpcGxsX2Rlbm9tKSkpOyAKKyAgICB9CisKKyAgICBmcmVxID0gKHVpbnQzMl90KWZyZXFfZmxvYXQ7CisKKyAgICByZXR1cm4gZnJlcTsKK30KKwordm9pZCBYQ1ZSX0ZvcmNlUnhXdSh2b2lkKQoreworICAgIFhDVlJfVFNNLT5DVFJMIHw9IFhDVlJfVFNNX0NUUkxfRk9SQ0VfUlhfRU5fTUFTSzsKK30KKwordm9pZCBYQ1ZSX0ZvcmNlUnhXZCh2b2lkKQoreworICAgIFhDVlJfVFNNLT5DVFJMICY9IH5YQ1ZSX1RTTV9DVFJMX0ZPUkNFX1JYX0VOX01BU0s7Cit9CisKK3ZvaWQgWENWUl9Gb3JjZVR4V3Uodm9pZCkKK3sKKyAgICBYQ1ZSX1RTTS0+Q1RSTCB8PSBYQ1ZSX1RTTV9DVFJMX0ZPUkNFX1RYX0VOX01BU0s7Cit9CisKK3ZvaWQgWENWUl9Gb3JjZVR4V2Qodm9pZCkKK3sKKyAgICBYQ1ZSX1RTTS0+Q1RSTCAmPSB+WENWUl9UU01fQ1RSTF9GT1JDRV9UWF9FTl9NQVNLOworfQorCit4Y3ZyU3RhdHVzX3QgWENWUl9EZnRUeENXKHVpbnQxNl90IHJmX2NoYW5uZWxfZnJlcSwgdWludDhfdCBwcm90b2NvbCkKK3sKKyAgICB1aW50MzJfdCB0ZW1wOworICAgIGlmICgocHJvdG9jb2wgIT0gNikgJiYgKHByb3RvY29sICE9IDcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdYY3ZySW52YWxpZFBhcmFtZXRlcnNfYzsgLyogRmFpbHVyZSAqLworICAgIH0KKworICAgIGlmICgocmZfY2hhbm5lbF9mcmVxIDwgMjM2MCkgfHwgKHJmX2NoYW5uZWxfZnJlcSA+MjQ4NykpCisgICAgeworICAgICAgICByZXR1cm4gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOyAvKiBmYWlsdXJlICovCisgICAgfQorCisgICAgLyogU2V0IHRoZSBERlQgTW9kZSAqLworICAgIHRlbXAgID0gWENWUl9UWF9ESUctPkNUUkw7CisgICAgdGVtcCAmPSB+WENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERV9NQVNLOworICAgIHRlbXAgfD0gWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERSgxKTsKKyAgICBYQ1ZSX1RYX0RJRy0+Q1RSTCA9IHRlbXA7CisKKyAgICAvKiBDaG9vc2UgUHJvdG9jb2wgNiBvciA3IGlmIHVzaW5nIHRoZSBDaGFubmVsIE51bWJlciByZWdpc3RlciAqLworICAgIHRlbXAgID0gWENWUl9NSVNDLT5YQ1ZSX0NUUkw7CisgICAgdGVtcCAmPSB+WENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTF9NQVNLOworICAgIHRlbXAgfD0gWENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTChwcm90b2NvbCk7CisgICAgWENWUl9NSVNDLT5YQ1ZSX0NUUkwgPSB0ZW1wOworCisgICAgLyogU2VsZWN0IHRoZSBSRiBDaGFubmVsLCB1c2luZyB0aGUgQ2hhbm5lbCBOdW1iZXIgcmVnaXN0ZXIgKi8KKyAgICBYQ1ZSX092ZXJyaWRlQ2hhbm5lbChyZl9jaGFubmVsX2ZyZXEtMjM2MCwxKTsKKworICAgIC8qIFdhcm0tdXAgdGhlIFJhZGlvICovCisgICAgWENWUl9Gb3JjZVR4V3UoKTsKKworICAgIHJldHVybiBnWGN2clN1Y2Nlc3NfYzsgLyogU3VjY2VzcyAqLworfQorCit4Y3ZyU3RhdHVzX3QgWENWUl9EZnRUeFBhdHRlcm5SZWcodWludDE2X3QgY2hhbm5lbF9udW0sIHJhZGlvX21vZGVfdCByYWRpb19tb2RlLCBkYXRhX3JhdGVfdCBkYXRhX3JhdGUsIHVpbnQzMl90IHR4X3BhdHRlcm4pCit7CisgICAgdWludDMyX3QgdGVtcDsKKyAgICB1aW50OF90IGRmdF9tb2RlID0gMDsKKyAgICB1aW50OF90IGRmdF9jbGtfc2VsID0gMDsKKyAgICB4Y3ZyU3RhdHVzX3Qgc3RhdHVzID0gZ1hjdnJTdWNjZXNzX2M7CisgICAgCisgICAgWENWUl9DaGFuZ2VNb2RlKHJhZGlvX21vZGUsIGRhdGFfcmF0ZSk7CisgICAgCisgICAgLyogU2VsZWN0IHRoZSBSRiBDaGFubmVsLCB1c2luZyB0aGUgQ2hhbm5lbCBOdW1iZXIgcmVnaXN0ZXIgKi8KKyAgICBYQ1ZSX092ZXJyaWRlQ2hhbm5lbChjaGFubmVsX251bSwgMSk7CisKKyAgICBzd2l0Y2ggKHJhZGlvX21vZGUpCisgICAgeworICAgICAgICBjYXNlIFpJR0JFRV9NT0RFOgorICAgICAgICAgICAgZGZ0X21vZGUgPSA2OyAvKiBPUVBTSyBjb25maWd1cmF0aW9uICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBTlRfTU9ERToKKyAgICAgICAgY2FzZSBCTEVfTU9ERToKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwNV9oXzBwNToKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwNV9oXzBwMzI6CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDVfaF8wcDc6CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDVfaF8xcDA6CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDNfaF8wcDU6CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDdfaF8wcDU6CisgICAgICAgICAgICBkZnRfbW9kZSA9IDI7IC8qIEdGU0sgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTVNLOgorICAgICAgICAgICAgZGZ0X21vZGUgPSA0OyAvKiBNU0sgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzdGF0dXMgPSBnWGN2ckludmFsaWRQYXJhbWV0ZXJzX2M7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoc3RhdHVzID09IGdYY3ZyU3VjY2Vzc19jKSAvKiBPbmx5IGF0dGVtcHQgdGhpcyBwb2ludGVyIGFzc2lnbm1lbnQgcHJvY2VzcyBpZiBwcmlvciBzd2l0Y2goKSBzdGF0ZW1lbnQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAqLworICAgIHsKKyAgICAgICAgc3dpdGNoIChkYXRhX3JhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgRFJfMU1CUFM6CisgICAgICAgICAgICAgICAgZGZ0X2Nsa19zZWwgPSA0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEUl81MDBLQlBTOgorICAgICAgICAgICAgICAgIGRmdF9jbGtfc2VsID0gMzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRFJfMjUwS0JQUzoKKyAgICAgICAgICAgICAgICBkZnRfY2xrX3NlbCA9IDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IGdYY3ZySW52YWxpZFBhcmFtZXRlcnNfYzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXAgPSBYQ1ZSX1RYX0RJRy0+Q1RSTDsKKyAgICB0ZW1wICY9IH4oWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERV9NQVNLIHwgWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTF9NQVNLIHwgWENWUl9UWF9ESUdfQ1RSTF9UWF9ERlRfRU5fTUFTSyB8IFhDVlJfVFhfRElHX0NUUkxfTEZTUl9FTl9NQVNLKTsKKyAgICB0ZW1wIHw9IFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREUoZGZ0X21vZGUpIHwKKyAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfREZUX0NMS19TRUwoZGZ0X2Nsa19zZWwpIHwKKyAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfVFhfREZUX0VOKDEpIHwKKyAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9FTigwKTsKKyAgICBYQ1ZSX1RYX0RJRy0+Q1RSTCA9IHRlbXA7CisKKyAgICBYQ1ZSX1RYX0RJRy0+REZUX1BBVFRFUk4gPSB0eF9wYXR0ZXJuOworCisgICAgaWYgKHN0YXR1cyA9PSBnWGN2clN1Y2Nlc3NfYykKKyAgICB7CisgICAgICAgIC8qIFdhcm0tdXAgdGhlIFJhZGlvICovCisgICAgICAgIFhDVlJfRm9yY2VUeFd1KCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworeGN2clN0YXR1c190IFhDVlJfRGZ0VHhMZnNyUmVnKHVpbnQxNl90IGNoYW5uZWxfbnVtLCByYWRpb19tb2RlX3QgcmFkaW9fbW9kZSwgZGF0YV9yYXRlX3QgZGF0YV9yYXRlLCB1aW50OF90IGxmc3JfbGVuZ3RoKQoreworICAgIHVpbnQzMl90IHRlbXA7CisgICAgdWludDhfdCBkZnRfbW9kZSA9IDA7CisgICAgdWludDhfdCBkZnRfY2xrX3NlbCA9IDA7CisgICAgeGN2clN0YXR1c190IHN0YXR1cyA9IGdYY3ZyU3VjY2Vzc19jOworICAgIHVpbnQ4X3QgYml0cmF0ZV9zZXR0aW5nID0gMHhGRjsKKworICAgIGlmIChsZnNyX2xlbmd0aCA+IDUpCisgICAgeworICAgICAgICByZXR1cm4gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOworICAgIH0KKyAgICAKKyAgICBYQ1ZSX0NoYW5nZU1vZGUocmFkaW9fbW9kZSwgZGF0YV9yYXRlKTsKKyAgICAKKyAgICAvKiBTZWxlY3QgdGhlIFJGIENoYW5uZWwsIHVzaW5nIHRoZSBDaGFubmVsIE51bWJlciByZWdpc3RlciAqLworICAgIFhDVlJfT3ZlcnJpZGVDaGFubmVsKGNoYW5uZWxfbnVtLCAxKTsKKworICAgIHN3aXRjaCAocmFkaW9fbW9kZSkKKyAgICB7CisgICAgICAgIGNhc2UgWklHQkVFX01PREU6CisgICAgICAgICAgICBkZnRfbW9kZSA9IDc7IC8qIE9RUFNLIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFOVF9NT0RFOgorICAgICAgICBjYXNlIEJMRV9NT0RFOgorICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMHA1OgorICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMHAzMjoKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwNV9oXzBwNzoKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwNV9oXzFwMDoKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwM19oXzBwNToKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwN19oXzBwNToKKyAgICAgICAgICAgIGRmdF9tb2RlID0gMzsgLyogR0ZTSyBjb25maWd1cmF0aW9uICovCisgICAgICAgICAgICBiaXRyYXRlX3NldHRpbmcgPSBkYXRhX3JhdGU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNU0s6CisgICAgICAgICAgICBkZnRfbW9kZSA9IDU7IC8qIE1TSyBjb25maWd1cmF0aW9uICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3RhdHVzID0gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHN0YXR1cyA9PSBnWGN2clN1Y2Nlc3NfYykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZGF0YV9yYXRlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIERSXzFNQlBTOgorICAgICAgICAgICAgICAgIGRmdF9jbGtfc2VsID0gNDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRFJfNTAwS0JQUzoKKyAgICAgICAgICAgICAgICBkZnRfY2xrX3NlbCA9IDM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERSXzI1MEtCUFM6CisgICAgICAgICAgICAgICAgZGZ0X2Nsa19zZWwgPSAyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBnWGN2ckludmFsaWRQYXJhbWV0ZXJzX2M7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYml0cmF0ZV9zZXR0aW5nIDwgNCkKKyAgICB7CisgICAgICAgIEdFTkZTSy0+QklUUkFURSA9IGJpdHJhdGVfc2V0dGluZzsKKyAgICB9CisKKyAgICB0ZW1wID0gWENWUl9UWF9ESUctPkNUUkw7CisgICAgdGVtcCAmPSB+KFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREVfTUFTSyB8CisgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9MRU5HVEhfTUFTSyB8CisgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfREZUX0NMS19TRUxfTUFTSyB8CisgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfVFhfREZUX0VOX01BU0sgfAorICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfRU5fTUFTSyk7CisgICAgdGVtcCB8PSBYQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFKGRmdF9tb2RlKSB8CisgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfTEVOR1RIKGxmc3JfbGVuZ3RoKSB8CisgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0RGVF9DTEtfU0VMKGRmdF9jbGtfc2VsKSB8CisgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX1RYX0RGVF9FTigwKSB8CisgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfRU4oMSk7CisgICAgWENWUl9UWF9ESUctPkNUUkwgPSB0ZW1wOworCisgICAgaWYgKHN0YXR1cyA9PSBnWGN2clN1Y2Nlc3NfYykKKyAgICB7CisgICAgICAgIC8qIFdhcm0tdXAgdGhlIFJhZGlvICovCisgICAgICAgIFhDVlJfRm9yY2VUeFd1KCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBYQ1ZSX0RmdFR4T2ZmKHZvaWQpCit7CisgICAgWENWUl9Gb3JjZVR4V2QoKTsKKyAgICBYQ1ZSX01JU0MtPlhDVlJfQ1RSTCB8PSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDX01BU0s7IC8qIFVzZSBQQV9QT1dFUiBpbiBMTCByZWdpc3RlcnMgKi8KKyAgICAvKiBDbGVhciB0aGUgUkYgQ2hhbm5lbCBvdmVyLXJpZGUgKi8KKyAgICBYQ1ZSX092ZXJyaWRlQ2hhbm5lbCgweEZGLDEpOworICAgIFhDVlJfVFhfRElHLT5DVFJMICY9IH4oWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERV9NQVNLIHwgLyogQ2xlYXIgREZUX01PREUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfREZUX0NMS19TRUxfTUFTSyB8IC8qIENsZWFyIERGVF9DTEtfU0VMICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX1RYX0RGVF9FTl9NQVNLIHwgLyogQ2xlYXIgREZUX0VOICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfRU5fTUFTSyk7LyogQ2xlYXIgTEZTUl9FTiAqLworfQorCit4Y3ZyU3RhdHVzX3QgWENWUl9Gb3JjZVBBUG93ZXIodWludDhfdCBwYV9wb3dlcikKK3sKKyAgICBpZiAocGFfcG93ZXIgPiAweDNGKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdYY3ZySW52YWxpZFBhcmFtZXRlcnNfYzsgLyogRmFpbHVyZSAqLworICAgIH0KKyAgICAKKyAgICBpZiAocGFfcG93ZXIgIT0gMSkKKyAgICB7CisgICAgICAgIHBhX3Bvd2VyID0gcGFfcG93ZXIgJiAweEZFVTsgLyogRW5zdXJlIExTYml0IGlzIGNsZWFyZWQgKi8KKyAgICB9CisgICAgCisgICAgWENWUl9NSVNDLT5YQ1ZSX0NUUkwgJj0gflhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkNfTUFTSzsgLyogVXNlIFBBX1BPV0VSIGluIFRTTSByZWdpc3RlcnMgKi8KKyAgICBYQ1ZSX1RTTS0+UEFfUE9XRVIgPSBwYV9wb3dlcjsKKworICAgIHJldHVybiBnWGN2clN1Y2Nlc3NfYzsgLyogU3VjY2VzcyAqLworfQorCit4Y3ZyU3RhdHVzX3QgWENWUl9Db2V4aXN0ZW5jZUluaXQodm9pZCkKK3sKKyNpZiBnTVdTX1VzZUNvZXhpc3RlbmNlX2QgIAorICAgIHVpbnQzMl90IHRlbXAgPSAweDAwVTsKKyAgICB1aW50MzJfdCBlbmRfb2ZfdHhfd3UgPSAweDAwVTsKKyAgICB1aW50MzJfdCBlbmRfb2Zfcnhfd3UgPSAweDAwVTsKKyAgICAKKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpCisjaWYgKFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOID09IEFOVF9BKQorICAgIHVpbnQzMl90IHRzbV90aW1pbmc0NyA9IDB4MDBVOworI2Vsc2UgLyogKFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOID09IEFOVF9CKSAqLworICAgIHVpbnQzMl90IHRzbV90aW1pbmc0OCA9IDB4MDBVOworI2VuZGlmIC8qIChYQ1ZSX0NPRVhfUkZfQUNUSVZFX1BJTiA9PSBBTlRfQSkgKi8KKyAgICB1aW50MzJfdCB0c21fdGltaW5nNTAgPSAweDAwVTsgICAgCisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKSAqLworICAgIAorI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpCisgICAgLy8gUkZfQUNUSVZFID0gQU5UX0IgKFBUQzEsIGdwaW8xX3RyaWdfZW4pCisgICAgdWludDMyX3QgdHNtX3RpbWluZzQ4ID0gMHgwMFU7CisgICAgLy8gUkZfUFJJT1JJVFkgPSBBTlRfQSAoUFRDNCwgZ3BpbzBfdHJpZ19lbikKKyAgICB1aW50MzJfdCB0c21fdGltaW5nNDcgPSAweDAwVTsgICAgCisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkgKi8KKyAgICAKKyAgICB1aW50MTZfdCB0c21fdGltaW5nNDNfcnggPSAweDAwOworICAgIHVpbnQxNl90IHRzbV90aW1pbmc0M190eCA9IDB4MDA7ICAgIAorCisgICAgLyogU2VsZWN0IEdQSU8gbW9kZSBmb3IgRkFEIHBpbnMgKi8KKyAgICB0ZW1wID0gWENWUl9NSVNDLT5GQURfQ1RSTDsKKyAgICB0ZW1wICY9IH4oWENWUl9DVFJMX0ZBRF9DVFJMX0ZBRF9OT1RfR1BJT19NQVNLKTsKKyAgICBYQ1ZSX01JU0MtPkZBRF9DVFJMID0gdGVtcDsKKworICAgIC8qIFJlYWQgdGhlIEVORF9PRl9UWF9XVSBhbmQgRU5EX09GX1JYX1dVIGZvciBYQ1ZSICovCisgICAgZW5kX29mX3R4X3d1ID0gKFhDVlJfVFNNLT5FTkRfT0ZfU0VRICYgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV1VfTUFTSykgPj4KKyAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV1VfU0hJRlQ7CisgICAgZW5kX29mX3J4X3d1ID0gKFhDVlJfVFNNLT5FTkRfT0ZfU0VRICYgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV1VfTUFTSykgPj4KKyAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV1VfU0hJRlQ7CisgICAgCisvKioqKioqKioqKioqKioqKioKKyAqICBUWCBTRVFVRU5DRSAgKgorICoqKioqKioqKioqKioqKioqLyAgICAKKworICAgIGlmIChlbmRfb2ZfdHhfd3UgPCBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZCkKKyAgICB7CisgICAgICAgIHRlbXAgPSBlbmRfb2ZfdHhfd3U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHRlbXAgPSBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZDsKKyAgICB9CisgICAgCisgICAgLyogU2F2ZSB0aGUgVFggUkZfQUNUSVZFIHN0YXJ0IHRpbWUuICovCisgICAgdHNtX3RpbWluZzQzX3R4ID0gZW5kX29mX3R4X3d1IC0gdGVtcDsgCisKKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpICAgIAorICAgIC8qIFNldCBSRl9BQ1RJVkUgcGluIEhJR0ggZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QgdVMgcHJpb3IgdG8gYW55IFRYIHNlcXVlbmNlLiAqLworI2lmIChYQ1ZSX0NPRVhfUkZfQUNUSVZFX1BJTiA9PSBBTlRfQSkKKyAgICB0c21fdGltaW5nNDcgPSAoKCh1aW50MzJfdCkoZW5kX29mX3R4X3d1IC0gdGVtcCkgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9NQVNLKTsKKyNlbHNlCisgICAgdHNtX3RpbWluZzQ4ID0gKCgodWludDMyX3QpKGVuZF9vZl90eF93dSAtIHRlbXApIDw8IFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fVFhfSElfU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fVFhfSElfTUFTSyk7ICAgIAorI2VuZGlmIC8qIChYQ1ZSX0NPRVhfUkZfQUNUSVZFX1BJTiA9PSBBTlRfQSkgKi8KKworICAgIC8qIFNldCBTVEFUVVMgcGluIEhJR0ggZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QgdVMgcHJpb3IgdG8gYW55IFRYIHNlcXVlbmNlLiAqLworICAgIHRzbV90aW1pbmc1MCA9ICgoKHVpbnQzMl90KShlbmRfb2ZfdHhfd3UgLSB0ZW1wKSA8PCBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0hJX01BU0spOworI2VuZGlmIC8qIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkgKi8KKworI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpCisgICAgLyogU2V0IFJGX0FDVElWRSBwaW4gSElHSCBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZCB1UyBwcmlvciB0byBhbnkgVFggc2VxdWVuY2UuICovCisgICAgdHNtX3RpbWluZzQ4ID0gKCgodWludDMyX3QpKGVuZF9vZl90eF93dSAtIHRlbXApIDw8IFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fVFhfSElfU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fVFhfSElfTUFTSyk7CisKKyAgICAvKiBTZXQgU1RBVFVTIHBpbiBISUdIIGdNV1NfQ29leFJmQWN0aXZlQXNzZXJ0VGltZV9kIHVTIHByaW9yIHRvIGFueSBUWCBzZXF1ZW5jZS4gKi8KKyAgICB0c21fdGltaW5nNDcgPSAoKCh1aW50MzJfdCkoZW5kX29mX3R4X3d1IC0gdGVtcCkgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9NQVNLKTsgICAgICAgIAorI2VuZGlmIC8qIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpICovICAKKyAgICAKKy8qKioqKioqKioqKioqKioqKgorICogIFJYIFNFUVVFTkNFICAqCisgKioqKioqKioqKioqKioqKiovCisKKyAgICBpZiAoZW5kX29mX3J4X3d1IDwgZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QpCisgICAgeworICAgICAgICB0ZW1wID0gZW5kX29mX3J4X3d1OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0ZW1wID0gZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2Q7CisgICAgfQorCisgICAgLyogU2F2ZSB0aGUgUlggUkZfQUNUSVZFIHN0YXJ0IHRpbWUuICovCisgICAgdHNtX3RpbWluZzQzX3J4ID0gZW5kX29mX3J4X3d1IC0gdGVtcDsgCisKKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpICAgIAorICAgIC8qIFNldCBSRl9BQ1RJVkUgcGluIEhJR0ggZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QgdVMgcHJpb3IgdG8gYW55IFJYIHNlcXVlbmNlLiAqLworI2lmIChYQ1ZSX0NPRVhfUkZfQUNUSVZFX1BJTiA9PSBBTlRfQSkKKyAgICB0c21fdGltaW5nNDcgfD0gKCgodWludDMyX3QpKGVuZF9vZl9yeF93dSAtIHRlbXApIDw8IFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfSElfU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJX01BU0spOworI2Vsc2UKKyAgICB0c21fdGltaW5nNDggfD0gKCgodWludDMyX3QpKGVuZF9vZl9yeF93dSAtIHRlbXApIDw8IFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fUlhfSElfU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1JYX0hJX01BU0spOworI2VuZGlmIC8qIChYQ1ZSX0NPRVhfUkZfQUNUSVZFX1BJTiA9PSBBTlRfQSkgKi8KKworICAgIC8qIFNldCBTVEFUVVMgcGluIEhJR0ggZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QgdVMgcHJpb3IgdG8gYW55IFJYIHNlcXVlbmNlIGFuZCBjbGVhciBpdCBnTVdTX0NvZXhQcmlvU2lnbmFsVGltZV9kIHVTIGJlZm9yZSBSWCBzdGFydC4gKi8KKyAgICB0c21fdGltaW5nNTAgfD0gKCgoKHVpbnQzMl90KShlbmRfb2Zfcnhfd3UgLSB0ZW1wKSA8PCBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfSElfTUFTSykgfAorICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKGVuZF9vZl9yeF93dSAtIGdNV1NfQ29leFByaW9TaWduYWxUaW1lX2QpIDw8IFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfTE9fU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfTE9fTUFTSykpOworCisjaWYgKFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOID09IEFOVF9BKQorICAgIHRlbXAgPSBYQ1ZSX1RTTS0+VElNSU5HNDc7CisgICAgdGVtcCAmPSB+KFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfSElfTUFTSyB8IFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfSElfTUFTSyk7CisgICAgdGVtcCB8PSB0c21fdGltaW5nNDc7CisgICAgWENWUl9UU00tPlRJTUlORzQ3ID0gdGVtcDsKKyNlbHNlCisgICAgdGVtcCA9IFhDVlJfVFNNLT5USU1JTkc0ODsKKyAgICB0ZW1wICY9IH4oWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9ISV9NQVNLIHwgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9ISV9NQVNLKTsKKyAgICB0ZW1wIHw9IHRzbV90aW1pbmc0ODsKKyAgICBYQ1ZSX1RTTS0+VElNSU5HNDggPSB0ZW1wOyAgICAKKyNlbmRpZiAvKiAoWENWUl9DT0VYX1JGX0FDVElWRV9QSU4gPT0gQU5UX0EpICovCisKKyAgICB0ZW1wID0gWENWUl9UU00tPlRJTUlORzUwOworICAgIHRlbXAgJj0gfihYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0hJX01BU0sgfCAKKyAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9ISV9NQVNLIHwKKyAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9MT19NQVNLKTsKKyAgICB0ZW1wIHw9IHRzbV90aW1pbmc1MDsKKyAgICBYQ1ZSX1RTTS0+VElNSU5HNTAgPSB0ZW1wOworCisjaWYgKFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOID09IEFOVF9BKQorICAgIEdQSU9DLT5QRERSIHw9IDB4MTg7CisgICAgUE9SVEMtPlBDUls0XSA9IChQT1JUQy0+UENSWzRdICYgflBPUlRfUENSX01VWF9NQVNLKSB8IFBPUlRfUENSX01VWCgyKTsKKyAgICBQT1JUQy0+UENSWzNdID0gKFBPUlRDLT5QQ1JbM10gJiB+UE9SVF9QQ1JfTVVYX01BU0spIHwgUE9SVF9QQ1JfTVVYKDIpOworI2Vsc2UKKyAgICBHUElPQy0+UEREUiB8PSAweDBBOworICAgIFBPUlRDLT5QQ1JbMV0gPSAoUE9SVEMtPlBDUlsxXSAmIH5QT1JUX1BDUl9NVVhfTUFTSykgfCBQT1JUX1BDUl9NVVgoMik7CisgICAgUE9SVEMtPlBDUlszXSA9IChQT1JUQy0+UENSWzNdICYgflBPUlRfUENSX01VWF9NQVNLKSB8IFBPUlRfUENSX01VWCgyKTsKKyNlbmRpZiAvKiAoWENWUl9DT0VYX1JGX0FDVElWRV9QSU4gPT0gQU5UX0EpICovCisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKSAqLworICAgIAorI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpICAgIAorICAgIC8qIFNldCBSRl9BQ1RJVkUgcGluIEhJR0ggZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QgdVMgcHJpb3IgdG8gYW55IFJYIHNlcXVlbmNlLiAqLworICAgIHRzbV90aW1pbmc0OCB8PSAoKCh1aW50MzJfdCkoZW5kX29mX3J4X3d1IC0gdGVtcCkgPDwgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fUlhfSElfTUFTSyk7CisgICAgCisgICAgLyogU2V0IFBSSU9SSVRZIHBpbiBISUdIIGdNV1NfQ29leFJmQWN0aXZlQXNzZXJ0VGltZV9kIHVTIHByaW9yIHRvIGFueSBSWCBzZXF1ZW5jZSBhbmQgY2xlYXIgaXQgZ01XU19Db2V4UHJpb1NpZ25hbFRpbWVfZCB1UyBiZWZvcmUgUlggc3RhcnQuICovCisgICAgdHNtX3RpbWluZzQ3IHw9ICgoKHVpbnQzMl90KShlbmRfb2Zfcnhfd3UgLSB0ZW1wKSA8PCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfSElfTUFTSyk7CisgICAgCisgICAgLyogUkZfQUNUSVZFICovCisgICAgdGVtcCA9IFhDVlJfVFNNLT5USU1JTkc0ODsKKyAgICB0ZW1wICY9IH4oWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9ISV9NQVNLIHwgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9ISV9NQVNLKTsKKyAgICB0ZW1wIHw9IHRzbV90aW1pbmc0ODsKKyAgICBYQ1ZSX1RTTS0+VElNSU5HNDggPSB0ZW1wOworICAgIAorICAgIC8qIFJGX1BSSU9SSVRZICovCisgICAgdGVtcCA9IFhDVlJfVFNNLT5USU1JTkc0NzsKKyAgICB0ZW1wICY9IH4oWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9NQVNLIHwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9ISV9NQVNLKTsKKyAgICB0ZW1wIHw9IHRzbV90aW1pbmc0NzsKKyAgICBYQ1ZSX1RTTS0+VElNSU5HNDcgPSB0ZW1wOworICAgIAorICAgIC8qIE92ZXJ3cml0ZSBwaW5zIHNldHRpbmdzICovCisgICAgR1BJT0MtPlBERFIgfD0gMHgxMjsKKyAgICBQT1JUQy0+UENSWzRdID0gKFBPUlRDLT5QQ1JbNF0gJiB+UE9SVF9QQ1JfTVVYX01BU0spIHwgUE9SVF9QQ1JfTVVYKDIpOworICAgIFBPUlRDLT5QQ1JbMV0gPSAoUE9SVEMtPlBDUlsxXSAmIH5QT1JUX1BDUl9NVVhfTUFTSykgfCBQT1JUX1BDUl9NVVgoMik7ICAgIAorI2VuZGlmIC8qIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpICovCisKKyAgICB0c21fdGltaW5nNDNfdHggKz0gZ01XU19Db2V4Q29uZmlybVdhaXRUaW1lX2Q7CisKKyAgICBpZiAodHNtX3RpbWluZzQzX3R4ID4gZW5kX29mX3R4X3d1IC0gMSkKKyAgICB7CisgICAgICAgIHRzbV90aW1pbmc0M190eCA9IGVuZF9vZl90eF93dSAtIDE7CisgICAgfQorCisgICAgdHNtX3RpbWluZzQzX3J4ICs9IGdNV1NfQ29leENvbmZpcm1XYWl0VGltZV9kOworICAgIAorICAgIGlmICh0c21fdGltaW5nNDNfcnggPiBlbmRfb2Zfcnhfd3UgLSAxKQorICAgIHsKKyAgICAgICAgdHNtX3RpbWluZzQzX3J4ID0gZW5kX29mX3J4X3d1IC0gMTsKKyAgICB9CisKKyAgICBYQ1ZSX1RTTS0+VElNSU5HNDMgPSAoKCgodWludDMyX3QpKHRzbV90aW1pbmc0M190eCkgPDwgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9UWF9ISV9TSElGVCkgJiBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1RYX0hJX01BU0spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKHRzbV90aW1pbmc0M190eCArIDIpIDw8IFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fVFhfTE9fU0hJRlQpICYgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9UWF9MT19NQVNLKSB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkodHNtX3RpbWluZzQzX3J4KSA8PCBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1JYX0hJX1NISUZUKSAmIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfSElfTUFTSykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkodHNtX3RpbWluZzQzX3J4ICsgMikgPDwgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9SWF9MT19TSElGVCkgJiBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1JYX0xPX01BU0spKTsKKworICAgIEJUTEVfUkYtPk1JU0NfQ1RSTCA9IDB4MDI7CisKKyAgICBYQ1ZSX1RTTS0+Q1RSTCB8PSBYQ1ZSX1RTTV9DVFJMX1RTTV9JUlEwX0VOX01BU0s7CisKKyAgICAvKiBTYXZlIHRoZSB1cGRhdGVkIHJlZ2lzdGVycyB2YWx1ZXMuICovCisgICAgWENWUl9Db2V4aXN0ZW5jZVNhdmVSZXN0b3JlVGltaW5ncygxKTsgICAgCisjZW5kaWYgLyogZ01XU19Vc2VDb2V4aXN0ZW5jZV9kICovIAorCisgICAgcmV0dXJuIGdYY3ZyU3VjY2Vzc19jOworfQorCit4Y3ZyU3RhdHVzX3QgWENWUl9Db2V4aXN0ZW5jZVNldFByaW9yaXR5KFhDVlJfQ09FWF9QUklPUklUWV9UIHJ4UHJpb3JpdHksIFhDVlJfQ09FWF9QUklPUklUWV9UIHR4UHJpb3JpdHkpCit7CisjaWYgZ01XU19Vc2VDb2V4aXN0ZW5jZV9kCisgICAgdWludDMyX3QgdGVtcCA9IDB4MDBVOworICAgIHVpbnQzMl90IGVuZF9vZl90eF93dSA9IDB4MDBVOworICAgIHVpbnQzMl90IGVuZF9vZl9yeF93dSA9IDB4MDBVOworI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkKKyAgICB1aW50MzJfdCB0c21fdGltaW5nNTAgPSAweDAwVTsKKyNlbmRpZiAgICAKKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1ByaW9fT25seV9kKQorICAgIHVpbnQzMl90IHRzbV90aW1pbmc0NyA9IDB4MDBVOworI2VuZGlmICAgIAorCisgICAgLyogUmVhZCB0aGUgRU5EX09GX1RYX1dVIGFuZCBFTkRfT0ZfUlhfV1UgZm9yIFhDVlIgKi8KKyAgICBlbmRfb2ZfdHhfd3UgPSAoWENWUl9UU00tPkVORF9PRl9TRVEgJiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVV9NQVNLKSA+PgorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVV9TSElGVDsKKyAgICBlbmRfb2Zfcnhfd3UgPSAoWENWUl9UU00tPkVORF9PRl9TRVEgJiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9NQVNLKSA+PgorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9TSElGVDsgICAgCisKKy8qKioqKioqKioqKioqKioqKgorICogICAgICBSWCAgICAgICAqCisgKioqKioqKioqKioqKioqKiovCisgICAgCisgICAgaWYgKFhDVlJfQ09FWF9ISUdIX1BSSU8gPT0gcnhQcmlvcml0eSkKKyAgICB7CisgICAgICAgIGlmIChlbmRfb2Zfcnhfd3UgPCBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcCA9IGVuZF9vZl9yeF93dTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXAgPSBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZDsKKyAgICAgICAgfQorCisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKQorICAgICAgICAvKiBTZXQgU1RBVFVTIHBpbiBISUdIIGdNV1NfQ29leFJmQWN0aXZlQXNzZXJ0VGltZV9kIHVTIHByaW9yIHRvIGFueSBSWCBzZXF1ZW5jZSBhbmQgY2xlYXIgaXQgZ01XU19Db2V4UHJpb1NpZ25hbFRpbWVfZCB1UyBiZWZvcmUgUlggc3RhcnQgZm9yIGhpZ2ggcHJpb3JpdHkgUlguICovCisgICAgICAgIHRzbV90aW1pbmc1MCA9ICgoKCh1aW50MzJfdCkoZW5kX29mX3J4X3d1IC0gdGVtcCkgPDwgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0hJX01BU0spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KShlbmRfb2Zfcnhfd3UgLSBnTVdTX0NvZXhQcmlvU2lnbmFsVGltZV9kKSA8PCBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0xPX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfTE9fTUFTSykpOworI2VuZGlmIC8qIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkgKi8KKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1ByaW9fT25seV9kKQorICAgICAvKiBTZXQgU1RBVFVTIHBpbiBISUdIIGdNV1NfQ29leFJmQWN0aXZlQXNzZXJ0VGltZV9kIHVTIHByaW9yIHRvIGFueSBSWCBzZXF1ZW5jZSAqLworICAgICAgICB0c21fdGltaW5nNDcgPSAoKCh1aW50MzJfdCkoZW5kX29mX3J4X3d1IC0gdGVtcCkgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfSElfTUFTSyk7ICAgCisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogTG93IHByaW9yaXR5IFJYICovCisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKQorICAgICAgICB0c21fdGltaW5nNTAgPSAoKCgweEZGVSA8PCBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0hJX01BU0spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoMHhGRlUgPDwgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9MT19TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9MT19NQVNLKSk7CisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKSAqLworI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpICAgICAgICAKKyAgICAgICAgdHNtX3RpbWluZzQ3ID0gKCgoMHhGRlUgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9ISV9NQVNLKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKDB4RkZVIDw8IFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfTE9fU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfTE9fTUFTSykpOworI2VuZGlmIC8qIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpICovCisgICAgfQorCisvKioqKioqKioqKioqKioqKioKKyAqICAgICAgVFggICAgICAgKgorICoqKioqKioqKioqKioqKioqLworICAgIGlmIChYQ1ZSX0NPRVhfSElHSF9QUklPID09IHR4UHJpb3JpdHkpCisgICAgeworICAgICAgICBpZiAoZW5kX29mX3R4X3d1IDwgZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXAgPSBlbmRfb2ZfdHhfd3U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wID0gZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2Q7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZXQgU1RBVFVTIHBpbiBISUdIIGdNV1NfQ29leFJmQWN0aXZlQXNzZXJ0VGltZV9kIHVTIHByaW9yIHRvIGFueSBUWCBzZXF1ZW5jZSBmb3IgSElHSCBwcmlvcml0eSBUWC4gKi8KKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpCisgICAgICAgIHRzbV90aW1pbmc1MCB8PSAoKCh1aW50MzJfdCkoZW5kX29mX3R4X3d1IC0gdGVtcCkgPDwgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9UWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0hJX01BU0spOworI2VuZGlmIC8qIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkgKi8KKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1ByaW9fT25seV9kKSAgICAgICAgCisgICAgICAgIHRzbV90aW1pbmc0NyB8PSAoKCh1aW50MzJfdCkoZW5kX29mX3R4X3d1IC0gdGVtcCkgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX01BU0spOworI2VuZGlmIC8qIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpICovICAgICAgICAgICAgICAgIAorICAgIH0KKyAgICBlbHNlCisgICAgeyAgICAgICAgCisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKQorICAgICAgICAvKiBTZXQgU1RBVFVTIHBpbiBISUdIIGF0IEVORF9PRl9UWF9XVSBwcmlvciB0byBhbnkgVFggc2VxdWVuY2UgZm9yIExPVyBwcmlvcml0eSBUWC4gKi8KKyAgICAgICAgdHNtX3RpbWluZzUwIHw9ICgoKHVpbnQzMl90KShlbmRfb2ZfdHhfd3UpIDw8IFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfSElfU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0hJX01BU0spOworI2VuZGlmIC8qIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkgKi8KKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1ByaW9fT25seV9kKQorICAgICAgICAvKiBTZXQgU1RBVFVTIHBpbiBMT1cgYXQgRU5EX09GX1RYX1dVIHByaW9yIHRvIGFueSBUWCBzZXF1ZW5jZSBmb3IgTE9XIHByaW9yaXR5IFRYLiAqLyAgICAgICAgICAgICAgICAKKyAgICAgICAgdHNtX3RpbWluZzQ3ID0gKCgoMHhGRlUgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9NQVNLKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKDB4RkZVIDw8IFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfTE9fU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfTE9fTUFTSykpOworI2VuZGlmIC8qIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpICovCisgICAgfQorCisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKQorICAgIHRlbXAgPSBYQ1ZSX1RTTS0+VElNSU5HNTA7CisgICAgdGVtcCAmPSB+KFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfSElfTUFTSyB8CisgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfSElfTUFTSyB8CisgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfTE9fTUFTSyk7CisgICAgdGVtcCB8PSB0c21fdGltaW5nNTA7CisgICAgWENWUl9UU00tPlRJTUlORzUwID0gdGVtcDsKKyNlbmRpZiAvKiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpICovCisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkKKyAgICB0ZW1wID0gWENWUl9UU00tPlRJTUlORzQ3OworICAgIHRlbXAgJj0gfihYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX01BU0sgfAorICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0xPX01BU0sgfAorICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJX01BU0sgfAorICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0xPX01BU0spOworICAgIHRlbXAgfD0gdHNtX3RpbWluZzQ3OworICAgIFhDVlJfVFNNLT5USU1JTkc0NyA9IHRlbXA7ICAgIAorI2VuZGlmIC8qIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpICovCisgICAgCisgICAgLyogU2F2ZSB0aGUgdXBkYXRlZCByZWdpc3RlcnMgdmFsdWVzLiAqLworICAgIFhDVlJfQ29leGlzdGVuY2VTYXZlUmVzdG9yZVRpbWluZ3MoMSk7CisjZW5kaWYgLyogZ01XU19Vc2VDb2V4aXN0ZW5jZV9kICovCisKKyAgICByZXR1cm4gZ1hjdnJTdWNjZXNzX2M7Cit9CisKK3hjdnJTdGF0dXNfdCBYQ1ZSX0NvZXhpc3RlbmNlU2F2ZVJlc3RvcmVUaW1pbmdzKHVpbnQ4X3Qgc2F2ZVRpbWluZ3MpCit7CisjaWYgZ01XU19Vc2VDb2V4aXN0ZW5jZV9kCisgICAgc3RhdGljIHVpbnQzMl90IHRzbV9vdnJkMF9zYXZlZCA9IDB4MDA7CisgICAgc3RhdGljIHVpbnQzMl90IHRzbV9vdnJkMV9zYXZlZCA9IDB4MDA7CisgICAgc3RhdGljIHVpbnQzMl90IHRzbV9vdnJkMl9zYXZlZCA9IDB4MDA7CisgICAgc3RhdGljIHVpbnQzMl90IHRzbV9vdnJkM19zYXZlZCA9IDB4MDA7CisgICAgc3RhdGljIHVpbnQzMl90IHRzbV90aW1pbmc0N19zYXZlZCA9IDB4MDA7CisgICAgc3RhdGljIHVpbnQzMl90IHRzbV90aW1pbmc0OF9zYXZlZCA9IDB4MDA7CisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKSAgICAKKyAgICBzdGF0aWMgdWludDMyX3QgdHNtX3RpbWluZzQ5X3NhdmVkID0gMHgwMDsKKyAgICBzdGF0aWMgdWludDMyX3QgdHNtX3RpbWluZzUwX3NhdmVkID0gMHgwMDsKKyNlbmRpZiAgICAKKworICAgIGlmIChzYXZlVGltaW5ncyA9PSAwKQorICAgIHsKKyAgICAgICAgLyogUmVzdG9yZSByZWdpc3RlcnMgdmFsdWVzLiAqLworICAgICAgICBYQ1ZSX1RTTS0+T1ZSRDAgPSB0c21fb3ZyZDBfc2F2ZWQ7IAorICAgICAgICBYQ1ZSX1RTTS0+T1ZSRDEgPSB0c21fb3ZyZDFfc2F2ZWQ7CisgICAgICAgIFhDVlJfVFNNLT5PVlJEMiA9IHRzbV9vdnJkMl9zYXZlZDsKKyAgICAgICAgWENWUl9UU00tPk9WUkQzID0gdHNtX292cmQzX3NhdmVkOworCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkc0NyA9IHRzbV90aW1pbmc0N19zYXZlZDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzQ4ID0gdHNtX3RpbWluZzQ4X3NhdmVkOworI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkgICAgICAgIAorICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNDkgPSB0c21fdGltaW5nNDlfc2F2ZWQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1MCA9IHRzbV90aW1pbmc1MF9zYXZlZDsKKyNlbmRpZiAgICAgICAgCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFNhdmUgcmVnaXN0ZXJzIHZhbHVlcy4gKi8KKyAgICAgICAgdHNtX292cmQwX3NhdmVkID0gWENWUl9UU00tPk9WUkQwOworICAgICAgICB0c21fb3ZyZDFfc2F2ZWQgPSBYQ1ZSX1RTTS0+T1ZSRDE7CisgICAgICAgIHRzbV9vdnJkMl9zYXZlZCA9IFhDVlJfVFNNLT5PVlJEMjsKKyAgICAgICAgdHNtX292cmQzX3NhdmVkID0gWENWUl9UU00tPk9WUkQzOworICAgICAgICB0c21fdGltaW5nNDdfc2F2ZWQgPSBYQ1ZSX1RTTS0+VElNSU5HNDc7CisgICAgICAgIHRzbV90aW1pbmc0OF9zYXZlZCA9IFhDVlJfVFNNLT5USU1JTkc0ODsKKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpICAgICAgICAKKyAgICAgICAgdHNtX3RpbWluZzQ5X3NhdmVkID0gWENWUl9UU00tPlRJTUlORzQ5OworICAgICAgICB0c21fdGltaW5nNTBfc2F2ZWQgPSBYQ1ZSX1RTTS0+VElNSU5HNTA7CisjZW5kaWYgICAgICAgIAorICAgIH0KKyNlbmRpZiAvKiBnTVdTX1VzZUNvZXhpc3RlbmNlX2QgKi8KKworICAgIHJldHVybiBnWGN2clN1Y2Nlc3NfYzsKK30KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9mc2xfeGN2ci5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9mc2xfeGN2ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MDNmODEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2ZzbF94Y3ZyLmgKQEAgLTAsMCArMSwxMjM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfWENWUl9IXworLyogY2xhbmctZm9ybWF0IG9mZiAqLworI2RlZmluZSBfRlNMX1hDVlJfSF8KKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKyNpbmNsdWRlICJmc2xfeGN2cl90cmltLmgiCisKKyNpZiBnTVdTX1VzZUNvZXhpc3RlbmNlX2QKKyNpbmNsdWRlICJNV1MuaCIKKyNlbmRpZiAvKiBnTVdTX1VzZUNvZXhpc3RlbmNlX2QgKi8KKy8qIQorICogQGFkZHRvZ3JvdXAgeGN2cgorICogQHsKKyAqLworCisvKiEgQGZpbGUqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBLVzR4Wi9LVzN4Wi9LVzJ4WiBSYWRpbyB0eXBlICovCisjZGVmaW5lIFJBRElPX0lTX0dFTl8yUDAgICgxKQorCisvKiBEZWZhdWx0IFJGIE9TQyBkZWZpbml0aW9uLiBBbGxvd3MgZm9yIGNvbXBpbGUgdGltZSBjbG9jayBmcmVxdWVuY3kgZGVmaW5pdGlvbiAqLworI2lmZGVmIENMT0NLX01BSU4KKworI2Vsc2UKKyNpZiBSRl9PU0NfMjZNSFogPT0gMQorI2RlZmluZSBDTE9DS19NQUlOIChFWFRfQ0xLXzI2X01IWikgLyogU2VlIGV4dF9jbG9ja19jb25maWdfdCBmb3IgdGhpcyB2YWx1ZSAqLworI2Vsc2UKKyNkZWZpbmUgQ0xPQ0tfTUFJTiAoRVhUX0NMS18zMl9NSFopIC8qIFNlZSBleHRfY2xvY2tfY29uZmlnX3QgZm9yIHRoaXMgdmFsdWUgKi8KKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworI2VuZGlmIC8qIENMT0NLX01BSU4gKi8KKyAKKyNkZWZpbmUgVEJEX1pFUk8gICAgICAgICAgICAgICAgKDApCisjZGVmaW5lIEZTTF9YQ1ZSX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMCwgMSwgMCkpCisKKyNkZWZpbmUgQjAoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IDApKSAmIDB4RkZVKQorI2RlZmluZSBCMSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgOCkpICYgMHhGRjAwVSkKKyNkZWZpbmUgQjIoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IDE2KSkgJiAweEZGMDAwMFUpCisjZGVmaW5lIEIzKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCAyNCkpICYgMHhGRjAwMDAwMFUpCisKKyNkZWZpbmUgVVNFX0RFRkFVTFRfUFJFX1JFRiAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgVFJJTV9CQkFfRENPQ19EQUNfQVRfSU5JVCAgICAgICAoMSkKKyNkZWZpbmUgUFJFU0xPV19FTkEgICAgICAgICAgICAgICAgICAgICAoMSkKKworLyogR0VOMyBUU00gZGVmaW5lcyAqLworI2lmIFJBRElPX0lTX0dFTl8zUDAKKworLyogVFNNIHRpbWluZ3MgaW5pdGlhbGl6YXRpb25zIGZvciBHZW4zIHJhZGlvICovCisvKiBOT1RFOiBUaGVzZSB0aW1pbmdzIGFyZSBzdG9yZWQgaW4gMzJNSHogb3IgMjZNSHogImJhc2VsaW5lIiBzZXR0aW5ncywgc2VsZWN0ZWQgYnkgY29uZGl0aW9uYWwgY29tcGlsZSBiZWxvdyAqLworLyogVGhlIGluaXQgc3RydWN0dXJlcyBmb3IgMzJNaHogYW5kIDI2TUh6IGFyZSBtYWRlIGlkZW50aWNhbCB0byBhbGxvdyB0aGUgc2FtZSBjb2RlIGluIGZzbF94Y3ZyLmMgdG8gYXBwbHkgdGhlICovCisvKiBzZXR0aW5ncyBmb3IgYWxsIHJhZGlvIGdlbmVyYXRpb25zLiBUaGUgR2VuMiByYWRpbyBpbml0IHZhbHVlIHN0b3JhZ2UgaGFkIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBzbyB0aGlzIHByZXNlcnZlcyBjb21wYXRpYmlsaXR5ICovCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyNkZWZpbmUgVFNNX1RJTUlORzAwaW5pdCAgKDB4NmQwMDZmMDBVKSAvKiAoYmJfbGRvX2hmX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDFpbml0ICAoMHg2ZDAwNmYwMFUpIC8qIChiYl9sZG9fYWRjZGFjX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDJpbml0ICAoMHg2ZDAwZmZmZlUpIC8qIChiYl9sZG9fYmJhX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDNpbml0ICAoMHg2ZDAwNmYwMFUpIC8qIChiYl9sZG9fcGRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwNGluaXQgICgweDZkMDA2ZjAwVSkgLyogKGJiX2xkb19mZGJrX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDVpbml0ICAoMHg2ZDAwNmYwMFUpIC8qIChiYl9sZG9fdmNvbG9fZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwNmluaXQgICgweDZkMDA2ZjAwVSkgLyogKGJiX2xkb192dHJlZl9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzA3aW5pdCAgKDB4MDUwMDA1MDBVKSAvKiAoYmJfbGRvX2ZkYmtfYmxlZWRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwOGluaXQgICgweDAzMDAwMzAwVSkgLyogKGJiX2xkb192Y29sb19ibGVlZF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzA5aW5pdCAgKDB4MDMwMDAzMDBVKSAvKiAoYmJfbGRvX3Zjb2xvX2Zhc3RjaGFyZ2VfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxMGluaXQgICgweDZkMDM2ZjAzVSkgLyogKGJiX3h0YWxfcGxsX3JlZl9jbGtfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxMWluaXQgICgweGZmZmY2ZjAzVSkgLyogKGJiX3h0YWxfZGFjX3JlZl9jbGtfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxMmluaXQgICgweDZkMDNmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX3Zjb19yZWZfY2xrX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMTNpbml0ICAoMHgxODAwNGMwMFUpIC8qIChzeV92Y29fYXV0b3R1bmVfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxNGluaXQgICgweDZkMzU2ODYzVSkgLyogKHN5X3BkX2N5Y2xlX3NsaXBfbGRfZnRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxNWluaXQgICgweDZkMDM2ZjAzVSkgLyogKHN5X3Zjb19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzE2aW5pdCAgKDB4NmQyMGZmZmZVKSAvKiAoc3lfbG9fcnhfYnVmX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMTdpbml0ICAoMHhmZmZmNmY1OFUpIC8qIChzeV9sb190eF9idWZfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxOGluaXQgICgweDZkMDU2ZjA1VSkgLyogKHN5X2Rpdm5fZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxOWluaXQgICgweDE4MDM0YzAzVSkgLyogKHN5X3BkX2ZpbHRlcl9jaGFyZ2VfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyMGluaXQgICgweDZkMDM2ZjAzVSkgLyogKHN5X3BkX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjFpbml0ICAoMHg2ZDA0NmYwNFUpIC8qIChzeV9sb19kaXZuX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjJpbml0ICAoMHg2ZDA0ZmZmZlUpIC8qIChzeV9sb19yeF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzIzaW5pdCAgKDB4ZmZmZjZmMDRVKSAvKiAoc3lfbG9fdHhfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyNGluaXQgICgweDE4MDA0YzAwVSkgLyogKHN5X2Rpdm5fY2FsX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjVpbml0ICAoMHg2ZDIxZmZmZlUpIC8qIChyeF9sbmFfbWl4ZXJfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyNmluaXQgICgweGZmZmY2ZTU4VSkgLyogKHR4X3BhX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjdpbml0ICAoMHg2ZDI0ZmZmZlUpIC8qIChyeF9hZGNfaV9xX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjhpbml0ICAoMHgyNTI0ZmZmZlUpIC8qIChyeF9hZGNfcmVzZXRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyOWluaXQgICgweDZkMjJmZmZmVSkgLyogKHJ4X2JiYV9pX3FfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczMGluaXQgICgweDZkMjRmZmZmVSkgLyogKHJ4X2JiYV9wZGV0X2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMzFpbml0ICAoMHg2ZDIzZmZmZlUpIC8qIChyeF9iYmFfdHphX2Rjb2NfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczMmluaXQgICgweDZkMjFmZmZmVSkgLyogKHJ4X3R6YV9pX3FfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczM2luaXQgICgweDZkMjRmZmZmVSkgLyogKHJ4X3R6YV9wZGV0X2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMzRpbml0ICAoMHg2ZDA3NmYwN1UpIC8qIChwbGxfZGlnX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMzVpbml0ICAoMHhmZmZmNmY1ZlUpIC8qICh0eF9kaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczNmluaXQgICgweDZkNmFmZmZmVSkgLyogKHJ4X2RpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzM3aW5pdCAgKDB4NmI2YWZmZmZVKSAvKiAocnhfaW5pdCkgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzM4aW5pdCAgKDB4NmQwZTZmNDJVKSAvKiAoc2lnbWFfZGVsdGFfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczOWluaXQgICgweDZkNmFmZmZmVSkgLyogKHJ4X3BoeV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQwaW5pdCAgKDB4NmQyYWZmZmZVKSAvKiAoZGNvY19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQxaW5pdCAgKDB4MmIyYWZmZmZVKSAvKiAoZGNvY19pbml0KSAqLworI2RlZmluZSBUU01fVElNSU5HNDJpbml0ICAoMHhmZmZmZmZmZlUpIC8qIChzYXJfYWRjX3RyaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0M2luaXQgICgweGZmZmZmZmZmVSkgLyogKHRzbV9zcGFyZTBfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0NGluaXQgICgweGZmZmZmZmZmVSkgLyogKHRzbV9zcGFyZTFfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0NWluaXQgICgweGZmZmZmZmZmVSkgLyogKHRzbV9zcGFyZTJfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0NmluaXQgICgweGZmZmZmZmZmVSkgLyogKHRzbV9zcGFyZTNfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0N2luaXQgICgweGZmZmZmZmZmVSkgLyogKGdwaW8wX3RyaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0OGluaXQgICgweGZmZmZmZmZmVSkgLyogKGdwaW8xX3RyaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0OWluaXQgICgweGZmZmZmZmZmVSkgLyogKGdwaW8yX3RyaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1MGluaXQgICgweGZmZmZmZmZmVSkgLyogKGdwaW8zX3RyaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1MWluaXQgICgweDZkMDNmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX2JpYXNfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1MmluaXQgICgweDFiMDZmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX2ZjYWxfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1M2luaXQgICgweDZkMDNmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX2xmX3BkX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNTRpbml0ICAoMHgxYjAzZmZmZlUpIC8qIChyeHR4X2F1eHBsbF9wZF9sZl9maWx0ZXJfY2hhcmdlX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNTVpbml0ICAoMHg2ZDI0ZmZmZlUpIC8qIChyeHR4X2F1eHBsbF9hZGNfYnVmX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNTZpbml0ICAoMHg2ZDI0ZmZmZlUpIC8qIChyeHR4X2F1eHBsbF9kaWdfYnVmX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNTdpbml0ICAoMHgxYTAzZmZmZlUpIC8qIChyeHR4X3JjY2FsX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNThpbml0ICAoMHhmZmZmNmYwM1UpIC8qICh0eF9ocG1fZGFjX2VuKSAqLworI2RlZmluZSBFTkRfT0ZfU0VRaW5pdCAgICAoMHg2ZDZjNmY2N1UpIC8qICAqLworI2RlZmluZSBUWF9SWF9PTl9ERUxpbml0ICAoMHgwMDAwOGE4NlUpIC8qICAqLworI2RlZmluZSBUWF9SWF9TWU5USF9pbml0ICAoMHgwMDAwMjMxOFUpIC8qICAqLworI2Vsc2UKKyNkZWZpbmUgVFNNX1RJTUlORzAwaW5pdCAgKDB4NjkwMDZmMDBVKSAvKiAoYmJfbGRvX2hmX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDFpbml0ICAoMHg2OTAwNmYwMFUpIC8qIChiYl9sZG9fYWRjZGFjX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDJpbml0ICAoMHg2OTAwZmZmZlUpIC8qIChiYl9sZG9fYmJhX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDNpbml0ICAoMHg2OTAwNmYwMFUpIC8qIChiYl9sZG9fcGRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwNGluaXQgICgweDY5MDA2ZjAwVSkgLyogKGJiX2xkb19mZGJrX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDVpbml0ICAoMHg2OTAwNmYwMFUpIC8qIChiYl9sZG9fdmNvbG9fZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwNmluaXQgICgweDY5MDA2ZjAwVSkgLyogKGJiX2xkb192dHJlZl9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzA3aW5pdCAgKDB4MDUwMDA1MDBVKSAvKiAoYmJfbGRvX2ZkYmtfYmxlZWRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwOGluaXQgICgweDAzMDAwMzAwVSkgLyogKGJiX2xkb192Y29sb19ibGVlZF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzA5aW5pdCAgKDB4MDMwMDAzMDBVKSAvKiAoYmJfbGRvX3Zjb2xvX2Zhc3RjaGFyZ2VfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxMGluaXQgICgweDY5MDM2ZjAzVSkgLyogKGJiX3h0YWxfcGxsX3JlZl9jbGtfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxMWluaXQgICgweGZmZmY2ZjAzVSkgLyogKGJiX3h0YWxfZGFjX3JlZl9jbGtfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxMmluaXQgICgweDY5MDNmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX3Zjb19yZWZfY2xrX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMTNpbml0ICAoMHgxODAwNGMwMFUpIC8qIChzeV92Y29fYXV0b3R1bmVfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxNGluaXQgICgweDY5MzE2ODYzVSkgLyogKHN5X3BkX2N5Y2xlX3NsaXBfbGRfZnRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxNWluaXQgICgweDY5MDM2ZjAzVSkgLyogKHN5X3Zjb19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzE2aW5pdCAgKDB4NjkxY2ZmZmZVKSAvKiAoc3lfbG9fcnhfYnVmX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMTdpbml0ICAoMHhmZmZmNmY1OFUpIC8qIChzeV9sb190eF9idWZfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxOGluaXQgICgweDY5MDU2ZjA1VSkgLyogKHN5X2Rpdm5fZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxOWluaXQgICgweDE4MDM0YzAzVSkgLyogKHN5X3BkX2ZpbHRlcl9jaGFyZ2VfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyMGluaXQgICgweDY5MDM2ZjAzVSkgLyogKHN5X3BkX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjFpbml0ICAoMHg2OTA0NmYwNFUpIC8qIChzeV9sb19kaXZuX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjJpbml0ICAoMHg2OTA0ZmZmZlUpIC8qIChzeV9sb19yeF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzIzaW5pdCAgKDB4ZmZmZjZmMDRVKSAvKiAoc3lfbG9fdHhfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyNGluaXQgICgweDE4MDA0YzAwVSkgLyogKHN5X2Rpdm5fY2FsX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjVpbml0ICAoMHg2OTFkZmZmZlUpIC8qIChyeF9sbmFfbWl4ZXJfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyNmluaXQgICgweGZmZmY2ZTU4VSkgLyogKHR4X3BhX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjdpbml0ICAoMHg2OTIwZmZmZlUpIC8qIChyeF9hZGNfaV9xX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjhpbml0ICAoMHgyMTIwZmZmZlUpIC8qIChyeF9hZGNfcmVzZXRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyOWluaXQgICgweDY5MWVmZmZmVSkgLyogKHJ4X2JiYV9pX3FfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczMGluaXQgICgweDY5MjBmZmZmVSkgLyogKHJ4X2JiYV9wZGV0X2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMzFpbml0ICAoMHg2OTFmZmZmZlUpIC8qIChyeF9iYmFfdHphX2Rjb2NfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczMmluaXQgICgweDY5MWRmZmZmVSkgLyogKHJ4X3R6YV9pX3FfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczM2luaXQgICgweDY5MjBmZmZmVSkgLyogKHJ4X3R6YV9wZGV0X2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMzRpbml0ICAoMHg2OTA3NmYwN1UpIC8qIChwbGxfZGlnX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMzVpbml0ICAoMHhmZmZmNmY1ZlUpIC8qICh0eF9kaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczNmluaXQgICgweDY5NjZmZmZmVSkgLyogKHJ4X2RpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzM3aW5pdCAgKDB4Njc2NmZmZmZVKSAvKiAocnhfaW5pdCkgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzM4aW5pdCAgKDB4NjkwZTZmNDJVKSAvKiAoc2lnbWFfZGVsdGFfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczOWluaXQgICgweDY5NjZmZmZmVSkgLyogKHJ4X3BoeV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQwaW5pdCAgKDB4NjkyNmZmZmZVKSAvKiAoZGNvY19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQxaW5pdCAgKDB4MjcyNmZmZmZVKSAvKiAoZGNvY19pbml0KSAqLworI2RlZmluZSBUU01fVElNSU5HNDJpbml0ICAoMHhmZmZmZmZmZlUpIC8qIChzYXJfYWRjX3RyaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0M2luaXQgICgweGZmZmZmZmZmVSkgLyogKHRzbV9zcGFyZTBfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0NGluaXQgICgweGZmZmZmZmZmVSkgLyogKHRzbV9zcGFyZTFfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0NWluaXQgICgweGZmZmZmZmZmVSkgLyogKHRzbV9zcGFyZTJfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0NmluaXQgICgweGZmZmZmZmZmVSkgLyogKHRzbV9zcGFyZTNfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0N2luaXQgICgweGZmZmZmZmZmVSkgLyogKGdwaW8wX3RyaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0OGluaXQgICgweGZmZmZmZmZmVSkgLyogKGdwaW8xX3RyaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc0OWluaXQgICgweGZmZmZmZmZmVSkgLyogKGdwaW8yX3RyaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1MGluaXQgICgweGZmZmZmZmZmVSkgLyogKGdwaW8zX3RyaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1MWluaXQgICgweDY5MDNmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX2JpYXNfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1MmluaXQgICgweDE3MDZmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX2ZjYWxfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1M2luaXQgICgweDY5MDNmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX2xmX3BkX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNTRpbml0ICAoMHgxNzAzZmZmZlUpIC8qIChyeHR4X2F1eHBsbF9wZF9sZl9maWx0ZXJfY2hhcmdlX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNTVpbml0ICAoMHg2OTIwZmZmZlUpIC8qIChyeHR4X2F1eHBsbF9hZGNfYnVmX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNTZpbml0ICAoMHg2OTIwZmZmZlUpIC8qIChyeHR4X2F1eHBsbF9kaWdfYnVmX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNTdpbml0ICAoMHgxYTAzZmZmZlUpIC8qIChyeHR4X3JjY2FsX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNThpbml0ICAoMHhmZmZmNmYwM1UpIC8qICh0eF9ocG1fZGFjX2VuKSAqLworI2RlZmluZSBFTkRfT0ZfU0VRaW5pdCAgICAoMHg2OTY4NmY2N1UpIC8qICAqLworI2RlZmluZSBUWF9SWF9PTl9ERUxpbml0ICAoMHgwMDAwOGE4NlUpIC8qICAqLworI2RlZmluZSBUWF9SWF9TWU5USF9pbml0ICAoMHgwMDAwMjMxOFUpIC8qICAqLworI2VuZGlmIC8qIFJGX09TQ18yNk1IWiA9PSAxICovCisKKyNkZWZpbmUgQVVYX1BMTF9ERUxBWSAgICAgICAoMCkKKy8qIFRTTSBiaXRmaWVsZCBzaGlmdCBhbmQgdmFsdWUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFhfRElHX0VOX0FTU0VSVCAgICAoOTUpIC8qIEFzc2VydGlvbiB0aW1lIGZvciBUWF9ESUdfRU4sIHVzZWQgaW4gbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworI2RlZmluZSBaR0JFX1RYX0RJR19FTl9BU1NFUlQgKFRYX0RJR19FTl9BU1NFUlQgLSAxKSAvKiBaaWdiZWUgVFhfRElHX0VOIG11c3QgYXNzZXJ0IDEgdGljayBzb29uZXIsIHNlZSBhZGp1c3RtZW50IGJlbG93IGJhc2VkIG9uIGRhdGEgcGFkZGluZyAqLworLyogRURJVCBUSElTIExJTkUgVE8gQ09OVFJPTCBQQV9SQU1QISAqLworI2RlZmluZSBQQV9SQU1QX1RJTUUgICAgICAgICgyKSAvKiBPbmx5IGFsbG93YWJsZSB2YWx1ZXMgYXJlIFswLCAxLCAyLCBvciA0XSBpbiBHZW4zICovCisjZGVmaW5lIFBBX1JBTVBfU0VMXzBVUyAgICAgKDApCisjZGVmaW5lIFBBX1JBTVBfU0VMXzFVUyAgICAgKDEpCisjZGVmaW5lIFBBX1JBTVBfU0VMXzJVUyAgICAgKDIpCisjZGVmaW5lIFBBX1JBTVBfU0VMXzRVUyAgICAgKDMpCisjaWYgISgoUEFfUkFNUF9USU1FID09IDApIHx8IChQQV9SQU1QX1RJTUUgPT0gMSkgfHwgKFBBX1JBTVBfVElNRSA9PSAyKSB8fCAoUEFfUkFNUF9USU1FID09IDQpKQorI2Vycm9yICJJbnZhbGlkIHZhbHVlIGZvciBQQV9SQU1QX1RJTUUgbWFjcm8iCisjZW5kaWYgLyogRXJyb3IgY2hlY2sgb2YgUEEgUkFNUCBUSU1FICovCisKKyNkZWZpbmUgQUREX0ZPUl8yNk1IWiAgICAgICAgICAgKDQpCisjZGVmaW5lIEVORF9PRl9UWF9XVV9OT1JBTVAgICAgICgxMDMpIC8qIE5PVEU6IE5PUkFNUCBhbmQgMnVzIHJhbXAgdGltZSBiZWhhdmlvcnMgYXJlIGlkZW50aWNhbCBmb3IgVFggV1UgYW5kIFdEICovCisjZGVmaW5lIEVORF9PRl9UWF9XRF9OT1JBTVAgICAgICgxMTEpIC8qIE5PVEU6IE5PUkFNUCBhbmQgMnVzIHJhbXAgdGltZSBiZWhhdmlvcnMgYXJlIGlkZW50aWNhbCBmb3IgVFggV1UgYW5kIFdEICovCisvKiBSZWRlZmluZSB0aGUgdmFsdWVzIG9mIEVORF9PRl9UWF9XVSBhbmQgRU5EX09GX1RYX1dEIGJhc2VkIG9uIHdoZXRoZXIgREFUQSBQQURESU5HIGlzIGVuYWJsZWQgYW5kIHRoZSBzZWxlY3Rpb24gb2YgcmFtcCB0aW1lICovCisvKiBUaGVzZSB0d28gY29uc3RhbnRzIGFyZSB0aGVuIHVzZWQgb24gYm90aCBjb21tb24gY29uZmlndXJhdGlvbiBhbmQgbW9kZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGRlZmluZSB0aGUgVFNNIHRpbWluZyB2YWx1ZXMgKi8KKyNpZiAoKFBBX1JBTVBfVElNRSA9PSAwKSB8fCAoUEFfUkFNUF9USU1FID09IDEpIHx8IChQQV9SQU1QX1RJTUUgPT0gMikpCisgICAgI2RlZmluZSBFTkRfT0ZfVFhfV1UgICAoRU5EX09GX1RYX1dVX05PUkFNUCkKKyAgICAjZGVmaW5lIEVORF9PRl9UWF9XRCAgIChFTkRfT0ZfVFhfV0RfTk9SQU1QKQorICAgICNpZiAoUEFfUkFNUF9USU1FID09IDApCisgICAgICAgICNkZWZpbmUgUEFfUkFNUF9TRUwgUEFfUkFNUF9TRUxfMFVTCisgICAgICAgICNkZWZpbmUgREFUQV9QQURESU5HX0VOICgwKQorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgREFUQV9QQURESU5HX0VOICgxKQorICAgICAgICAjaWYgKFBBX1JBTVBfVElNRSA9PSAxKQorICAgICAgICAgICAgI2RlZmluZSBQQV9SQU1QX1NFTCBQQV9SQU1QX1NFTF8xVVMKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNkZWZpbmUgUEFfUkFNUF9TRUwgUEFfUkFNUF9TRUxfMlVTCisgICAgICAgICNlbmRpZiAvKiAoUEFfUkFNUF9USU1FID09IDEpICovCisgICAgI2VuZGlmIC8qIChQQV9SQU1QX1RJTUUgPT0gMCkgKi8KKyNlbHNlIC8qICgoUEFfUkFNUF9USU1FID09IDApIHx8IChQQV9SQU1QX1RJTUUgPT0gMSkgfHwgKFBBX1JBTVBfVElNRSA9PSAyKSkgKi8KKyAgICAjaWYgKFBBX1JBTVBfVElNRSA9PSA0KQorICAgICAgICAjZGVmaW5lIEVORF9PRl9UWF9XVSAgICAoRU5EX09GX1RYX1dVX05PUkFNUCArIDIpCisgICAgICAgICNkZWZpbmUgRU5EX09GX1RYX1dEICAgIChFTkRfT0ZfVFhfV0RfTk9SQU1QICsgNCkKKyAgICAgICAgI2RlZmluZSBQQV9SQU1QX1NFTCBQQV9SQU1QX1NFTF80VVMKKyAgICAgICAgI2RlZmluZSBEQVRBX1BBRERJTkdfRU4gKDEpCisgICAgI2Vsc2UgLyogKFBBX1JBTVBfVElNRSA9PSA0KSAqLworICAgICAgICAjZXJyb3IgIkludmFsaWQgdmFsdWUgZm9yIFBBX1JBTVBfVElNRSBtYWNybyIKKyAgICAjZW5kaWYgLyogKFBBX1JBTVBfVElNRSA9PSA0KSAqLworI2VuZGlmLyogKFBBX1JBTVBfVElNRSA9PSA0KSAqLworCisjZGVmaW5lIEVORF9PRl9SWF9XVSAgICAoMTA0ICsgQVVYX1BMTF9ERUxBWSkKKworI2lmIFJGX09TQ18yNk1IWiA9PSAxCisjZGVmaW5lIEVORF9PRl9SWF9XRCAgICAoRU5EX09GX1JYX1dVICsgMSArIEFERF9GT1JfMjZNSFopIC8qIE5lZWQgdG8gaGFuZGxlIG5vcm1hbCBzaWduYWxzIGV4dGVuZGluZyB3aGVuIDI2TUhaIHdhcm1kb3duIGlzIGV4dGVuZGVkICovCisjZWxzZQorI2RlZmluZSBFTkRfT0ZfUlhfV0QgICAgKEVORF9PRl9SWF9XVSArIDEpCisjZW5kaWYgLyogUkZfT1NDXzI2TUhaID09IDEgKi8KKworI2RlZmluZSBFTkRfT0ZfUlhfV1VfMjZNSFogIChFTkRfT0ZfUlhfV1UgKyBBRERfRk9SXzI2TUhaKQorI2RlZmluZSBFTkRfT0ZfUlhfV0RfMjZNSFogIChFTkRfT0ZfUlhfV1UgKyAxICsgQUREX0ZPUl8yNk1IWikKKworLyogUEEgQmlhcyBUYWJsZSAtIEdlbjMgdmVyc2lvbiAqLworI2RlZmluZSBQQV9SQU1QXzAgMHgxCisjZGVmaW5lIFBBX1JBTVBfMSAweDIKKyNkZWZpbmUgUEFfUkFNUF8yIDB4NAorI2RlZmluZSBQQV9SQU1QXzMgMHg2CisjZGVmaW5lIFBBX1JBTVBfNCAweDgKKyNkZWZpbmUgUEFfUkFNUF81IDB4YworI2RlZmluZSBQQV9SQU1QXzYgMHgxMAorI2RlZmluZSBQQV9SQU1QXzcgMHgxNAorI2RlZmluZSBQQV9SQU1QXzggMHgxOAorI2RlZmluZSBQQV9SQU1QXzkgMHgxYworI2RlZmluZSBQQV9SQU1QXzEwIDB4MjIKKyNkZWZpbmUgUEFfUkFNUF8xMSAweDI4CisjZGVmaW5lIFBBX1JBTVBfMTIgMHgyYworI2RlZmluZSBQQV9SQU1QXzEzIDB4MzAKKyNkZWZpbmUgUEFfUkFNUF8xNCAweDM2CisjZGVmaW5lIFBBX1JBTVBfMTUgMHgzYworCisjZWxzZSAvKiBHZW4yIFRTTSBkZWZpbml0aW9ucyAqLworLyogR0VOMiBUU00gZGVmaW5lcyAqLworI2RlZmluZSBBVVhfUExMX0RFTEFZICAgICAgICgwKQorLyogVFNNIGJpdGZpZWxkIHNoaWZ0IGFuZCB2YWx1ZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBUWF9ESUdfRU5fQVNTRVJUICAgICg5NSkKKyNkZWZpbmUgWkdCRV9UWF9ESUdfRU5fQVNTRVJUIChUWF9ESUdfRU5fQVNTRVJUIC0gMSkgLyogWmlnYmVlIFRYX0RJR19FTiBtdXN0IGFzc2VydCAxIHRpY2sgc29vbmVyLCBzZWUgYWRqdXN0bWVudCBiZWxvdyBiYXNlZCBvbiBkYXRhIHBhZGRpbmcgKi8KKy8qIEVESVQgVEhJUyBMSU5FIFRPIENPTlRST0wgUEFfUkFNUCEgKi8KKyNkZWZpbmUgUEFfUkFNUF9USU1FICAgICAgICAoMikgLyogT25seSBhbGxvd2FibGUgdmFsdWVzIGFyZSBbMCwgMiwgNCwgb3IgOF0gZm9yIFBBIFJBTVAgdGltZXMgaW4gR2VuMi4wICovCisjZGVmaW5lIFBBX1JBTVBfU0VMXzBVUyAgICAgKDApCisjZGVmaW5lIFBBX1JBTVBfU0VMXzJVUyAgICAgKDEpCisjZGVmaW5lIFBBX1JBTVBfU0VMXzRVUyAgICAgKDIpCisjZGVmaW5lIFBBX1JBTVBfU0VMXzhVUyAgICAgKDMpCisKKyNpZiAhKChQQV9SQU1QX1RJTUUgPT0gMCkgfHwgKFBBX1JBTVBfVElNRSA9PSAyKSB8fCAoUEFfUkFNUF9USU1FID09IDQpIHx8IChQQV9SQU1QX1RJTUUgPT0gOCkpCisjZXJyb3IgIkludmFsaWQgdmFsdWUgZm9yIFBBX1JBTVBfVElNRSBtYWNybyIKKyNlbmRpZiAvKiBFcnJvciBjaGVjayBvZiBQQSBSQU1QIFRJTUUgKi8KKyNkZWZpbmUgQUREX0ZPUl8yNk1IWiAgICAgICAgICAgKDQpCisjZGVmaW5lIEVORF9PRl9UWF9XVV9OT1JBTVAgICAgICgxMDMpIC8qIE5PVEU6IE5PUkFNUCBhbmQgMnVzIHJhbXAgdGltZSBiZWhhdmlvcnMgYXJlIGlkZW50aWNhbCBmb3IgVFggV1UgYW5kIFdEICovCisjZGVmaW5lIEVORF9PRl9UWF9XRF9OT1JBTVAgICAgICgxMTEpIC8qIE5PVEU6IE5PUkFNUCBhbmQgMnVzIHJhbXAgdGltZSBiZWhhdmlvcnMgYXJlIGlkZW50aWNhbCBmb3IgVFggV1UgYW5kIFdEICovCisvKiBSZWRlZmluZSB0aGUgdmFsdWVzIG9mIEVORF9PRl9UWF9XVSBhbmQgRU5EX09GX1RYX1dEIGJhc2VkIG9uIHdoZXRoZXIgREFUQSBQQURESU5HIGlzIGVuYWJsZWQgYW5kIHRoZSBzZWxlY3Rpb24gb2YgcmFtcCB0aW1lICovCisvKiBUaGVzZSB0d28gY29uc3RhbnRzIGFyZSB0aGVuIHVzZWQgb24gYm90aCBjb21tb24gY29uZmlndXJhdGlvbiBhbmQgbW9kZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGRlZmluZSB0aGUgVFNNIHRpbWluZyB2YWx1ZXMgKi8KKyNpZiAoKFBBX1JBTVBfVElNRSA9PSAwKSB8fCAoUEFfUkFNUF9USU1FID09IDIpKQorICAgICNkZWZpbmUgRU5EX09GX1RYX1dVICAgKEVORF9PRl9UWF9XVV9OT1JBTVApCisgICAgI2RlZmluZSBFTkRfT0ZfVFhfV0QgICAoRU5EX09GX1RYX1dEX05PUkFNUCkKKyAgICAjZGVmaW5lIFRYX1NZTlRIX0RFTEFZX0FESiAgICAgICAoMCkKKyAgICAjZGVmaW5lIFBEX0NZQ0xFX1NMSVBfVFhfSElfQURKICAoMCkKKyAgICAjZGVmaW5lIFBEX0NZQ0xFX1NMSVBfVFhfTE9fQURKICAoMSkKKyAgICAjZGVmaW5lIFpHQkVfVFhfRElHX0VOX1RYX0hJX0FESiAoLTUpIC8qIE9ubHkgYXBwbGllcyB0byBaaWdiZWUgbW9kZSAqLworICAgICNpZiAoUEFfUkFNUF9USU1FID09IDApCisgICAgICAgICNkZWZpbmUgUEFfUkFNUF9TRUwgUEFfUkFNUF9TRUxfMFVTCisgICAgICAgICNkZWZpbmUgREFUQV9QQURESU5HX0VOICAgICAoMCkKKyAgICAgICAgI2RlZmluZSBUWF9ESUdfRU5fVFhfSElfQURKICgtMikKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIERBVEFfUEFERElOR19FTiAgICAgKDEpCisgICAgICAgICNkZWZpbmUgVFhfRElHX0VOX1RYX0hJX0FESiAoMCkKKyAgICAgICAgI2RlZmluZSBQQV9SQU1QX1NFTCBQQV9SQU1QX1NFTF8yVVMKKyAgICAjZW5kaWYgLyogKFBBX1JBTVBfVElNRSA9PSAwKSAqLworI2Vsc2UgLyogKChQQV9SQU1QX1RJTUUgPT0gMCkgfHwgKFBBX1JBTVBfVElNRSA9PSAyKSkgKi8KKyAgICAjaWYgKFBBX1JBTVBfVElNRSA9PSA0KQorICAgICAgICAjZGVmaW5lIEVORF9PRl9UWF9XVSAgICAoRU5EX09GX1RYX1dVX05PUkFNUCArIDIpCisgICAgICAgICNkZWZpbmUgRU5EX09GX1RYX1dEICAgIChFTkRfT0ZfVFhfV0RfTk9SQU1QICsgNCkKKyAgICAgICAgI2RlZmluZSBUWF9TWU5USF9ERUxBWV9BREogICAgICAgKDIpCisgICAgICAgICNkZWZpbmUgUERfQ1lDTEVfU0xJUF9UWF9ISV9BREogICgyKQorICAgICAgICAjZGVmaW5lIFBEX0NZQ0xFX1NMSVBfVFhfTE9fQURKICAoMSkKKyAgICAgICAgI2RlZmluZSBUWF9ESUdfRU5fVFhfSElfQURKICAgICAgKDApCisgICAgICAgICNkZWZpbmUgWkdCRV9UWF9ESUdfRU5fVFhfSElfQURKICgtMykgLyogT25seSBhcHBsaWVzIHRvIFppZ2JlZSBtb2RlICovCisgICAgICAgICNkZWZpbmUgUEFfUkFNUF9TRUwgUEFfUkFNUF9TRUxfNFVTCisgICAgICAgICNkZWZpbmUgREFUQV9QQURESU5HX0VOICgxKQorICAgICNlbHNlIC8qIChQQV9SQU1QX1RJTUU9PTQpICovCisgICAgICAgICNpZiAoKFBBX1JBTVBfVElNRSA9PSA4KSAmJiAoIVJBRElPX0lTX0dFTl8zUDApKQorICAgICAgICAgICAgI2RlZmluZSBFTkRfT0ZfVFhfV1UgICAgKEVORF9PRl9UWF9XVV9OT1JBTVAgKyA2KQorICAgICAgICAgICAgI2RlZmluZSBFTkRfT0ZfVFhfV0QgICAgKEVORF9PRl9UWF9XRF9OT1JBTVAgKyAxMikKKyAgICAgICAgICAgICNkZWZpbmUgVFhfU1lOVEhfREVMQVlfQURKICAgICAgICg2KQorICAgICAgICAgICAgI2RlZmluZSBQRF9DWUNMRV9TTElQX1RYX0hJX0FESiAgKDYpCisgICAgICAgICAgICAjZGVmaW5lIFBEX0NZQ0xFX1NMSVBfVFhfTE9fQURKICAoMSkKKyAgICAgICAgICAgICNkZWZpbmUgVFhfRElHX0VOX1RYX0hJX0FESiAgICAgICg0KQorICAgICAgICAgICAgI2RlZmluZSBaR0JFX1RYX0RJR19FTl9UWF9ISV9BREogKDEpIC8qIE9ubHkgYXBwbGllcyB0byBaaWdiZWUgbW9kZSAqLworICAgICAgICAgICAgI2RlZmluZSBQQV9SQU1QX1NFTCBQQV9SQU1QX1NFTF84VVMKKyAgICAgICAgICAgICNkZWZpbmUgREFUQV9QQURESU5HX0VOICgxKQorICAgICAgICAjZWxzZSAvKiAoUEFfUkFNUF9USU1FID09IDgpICovCisgICAgICAgICAgICAjZXJyb3IgIkludmFsaWQgdmFsdWUgZm9yIFBBX1JBTVBfVElNRSBtYWNybyIKKyAgICAgICAgI2VuZGlmIC8qIChQQV9SQU1QX1RJTUUgPT0gOCkgKi8KKyAgICAjZW5kaWYvKiAoUEFfUkFNUF9USU1FID09IDQpICovCisjZW5kaWYgLyogKChQQV9SQU1QX1RJTUUgPT0gMCkgfHwgKFBBX1JBTVBfVElNRSA9PSAyKSkgKi8KKworI2RlZmluZSBUWF9ESUdfRU5fQVNTRVJUX01TSzUwMCAgICAoRU5EX09GX1RYX1dVIC0gMykKKworI2RlZmluZSBFTkRfT0ZfUlhfV1UgICAgKDEwNCArIEFVWF9QTExfREVMQVkpCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyNkZWZpbmUgRU5EX09GX1JYX1dEICAgIChFTkRfT0ZfUlhfV1UgKyAxICsgQUREX0ZPUl8yNk1IWikgIC8qIE5lZWQgdG8gaGFuZGxlIG5vcm1hbCBzaWduYWxzIGV4dGVuZGluZyB3aGVuIDI2TUhaIHdhcm1kb3duIGlzIGV4dGVuZGVkICovCisjZWxzZQorI2RlZmluZSBFTkRfT0ZfUlhfV0QgICAgKEVORF9PRl9SWF9XVSArIDEpCisjZW5kaWYgLyogUkZfT1NDXzI2TUhaID09IDEgKi8KKyNkZWZpbmUgRU5EX09GX1JYX1dVXzI2TUhaICAoRU5EX09GX1JYX1dVICsgQUREX0ZPUl8yNk1IWikKKyNkZWZpbmUgRU5EX09GX1JYX1dEXzI2TUhaICAoRU5EX09GX1JYX1dVICsgMSArIEFERF9GT1JfMjZNSFopCisKKy8qIFBBIEJpYXMgVGFibGUgKi8KKyNkZWZpbmUgUEFfUkFNUF8wIDB4MQorI2RlZmluZSBQQV9SQU1QXzEgMHgyCisjZGVmaW5lIFBBX1JBTVBfMiAweDQKKyNkZWZpbmUgUEFfUkFNUF8zIDB4OAorI2RlZmluZSBQQV9SQU1QXzQgMHhlCisjZGVmaW5lIFBBX1JBTVBfNSAweDE2CisjZGVmaW5lIFBBX1JBTVBfNiAweDIyCisjZGVmaW5lIFBBX1JBTVBfNyAweDJlCisKKy8qIEJMRSBMTCB0aW1pbmcgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFhfT05fREVMQVkgICAgICgweDg1KSAvKiBBZGp1c3RlZCBUWF9PTl9ERUxBWSB0byBtYWtlIHR1cm5hcm91bmQgdGltZSAxNTB1c2VjICovCisjZGVmaW5lIFJYX09OX0RFTEFZICAgICAoMjkgKyBFTkRfT0ZfUlhfV1UpCisjZGVmaW5lIFJYX09OX0RFTEFZXzI2TUhaICAgICAoMjkgKyBFTkRfT0ZfUlhfV1VfMjZNSFopCisjZGVmaW5lIFRYX1JYX09OX0RFTEFZX1ZBTCAgKFRYX09OX0RFTEFZIDw8IDggfCBSWF9PTl9ERUxBWSkKKyNkZWZpbmUgVFhfUlhfT05fREVMQVlfVkFMXzI2TUhaICAoVFhfT05fREVMQVkgPDwgOCB8IFJYX09OX0RFTEFZXzI2TUhaKQorI2RlZmluZSBUWF9TWU5USF9ERUxBWSAgKFRYX09OX0RFTEFZIC0gRU5EX09GX1RYX1dVIC0gVFhfU1lOVEhfREVMQVlfQURKKSAvKiBBZGp1c3RtZW50IHRvIFRYX1NZTlRIX0RFTEFZIGR1ZSB0byBEQVRBX1BBRERJTkcgKi8KKyNkZWZpbmUgUlhfU1lOVEhfREVMQVkgICgweDE4KQorI2RlZmluZSBUWF9SWF9TWU5USF9ERUxBWV9WQUwgKFRYX1NZTlRIX0RFTEFZIDw8IDggfCBSWF9TWU5USF9ERUxBWSkKKworLyogUEhZIHJlZmVyZW5jZSB3YXZlZm9ybSBhc3NlbWJseSAqLworI2RlZmluZSBSVzBQUyhsb2MsIHZhbCkgICAgICAoKCh2YWwpICYgMHgxRikgPDwgKChsb2MpICogNSkpIC8qIFJlZiBXb3JkIDAgLSBsb2MgaXMgdGhlIHBoYXNlIGluZm8gc3ltYm9sIG51bWJlciwgdmFsIGlzIHRoZSB2YWx1ZSBvZiB0aGUgcGhhc2UgaW5mbyAqLworI2RlZmluZSBSVzFQUyhsb2MsIHZhbCkgICAgICAoKCh2YWwpICYgMHgxRikgPDwgKCgobG9jKSAqIDUpIC0gMzIpKSAvKiBSZWYgV29yZCAxIC0gbG9jIGlzIHRoZSBwaGFzZSBpbmZvIHN5bWJvbCBudW1iZXIsIHZhbCBpcyB0aGUgdmFsdWUgb2YgdGhlIHBoYXNlIGluZm8gKi8KKyNkZWZpbmUgUlcyUFMobG9jLCB2YWwpICAgICAgKCgodmFsKSAmIDB4MUYpIDw8ICgoKGxvYykgKiA1KSAtIDY0KSkgLyogUmVmIFdvcmQgMiAtIGxvYyBpcyB0aGUgcGhhc2UgaW5mbyBzeW1ib2wgbnVtYmVyLCB2YWwgaXMgdGhlIHZhbHVlIG9mIHRoZSBwaGFzZSBpbmZvICovCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisvKiEgQGJyaWVmICBFcnJvciBjb2RlcyBmb3IgdGhlIFhDVlIgZHJpdmVyLiAqLwordHlwZWRlZiBlbnVtIF94Y3ZyU3RhdHVzCit7CisgICAgZ1hjdnJTdWNjZXNzX2MgPSAwLAorICAgIGdYY3ZySW52YWxpZFBhcmFtZXRlcnNfYywKKyAgICBnWGN2clVuc3VwcG9ydGVkT3BlcmF0aW9uX2MsCisgICAgZ1hjdnJUcmltRmFpbHVyZV9jCit9IHhjdnJTdGF0dXNfdDsKKworLyohIEBicmllZiAgSGVhbHRoIHN0YXR1cyByZXR1cm5lZCBmcm9tIFBIWSB1cG9uIHN0YXR1cyBjaGVjayBmdW5jdGlvbiByZXR1cm4uICovCit0eXBlZGVmIGVudW0gX2hlYWx0aFN0YXR1cworeworICAgIE5PX0VSUk9SUyA9IDAsCisgICAgUExMX0NUVU5FX0ZBSUwgPSAxLAorICAgIFBMTF9DWUNMRV9TTElQX0ZBSUwgPSAyLAorICAgIFBMTF9GUkVRX1RBUkdfRkFJTCA9IDQsCisgICAgUExMX1RTTV9BQk9SVF9GQUlMID0gOCwKK30gaGVhbHRoU3RhdHVzX3Q7CisKKy8qISBAYnJpZWYgIEhlYWx0aCBzdGF0dXMgcmV0dXJuZWQgZnJvbSBQSFkgdXBvbiBzdGF0dXMgY2hlY2sgZnVuY3Rpb24gcmV0dXJuLiAqLwordHlwZWRlZiBlbnVtIF9leHRfY2xvY2tfY29uZmlnCit7CisgICAgRVhUX0NMS18zMl9NSFogPSAwLAorICAgIEVYVF9DTEtfMjZfTUhaID0gMSwKK30gZXh0X2Nsb2NrX2NvbmZpZ190OworCisvKiEgQGJyaWVmICBSYWRpbyBvcGVyYXRpbmcgbW9kZSBzZXR0aW5nIHR5cGVzLiAqLwordHlwZWRlZiBlbnVtIF9yYWRpb19tb2RlCit7CisgICAgQkxFX01PREUgPSAwLAorICAgIFpJR0JFRV9NT0RFID0gMSwKKyAgICBBTlRfTU9ERSA9IDIsCisKKyAgICAvKiBCVD0wLjUsIGg9KiogKi8KKyAgICBHRlNLX0JUXzBwNV9oXzBwNSAgPSAzLCAvKiA8IEJUPTAuNSwgaD0wLjUgW0JMRSBhdCAxTUJQUyBkYXRhIHJhdGU7IENTNCBhdCAyNTBLQlBTIGRhdGEgcmF0ZV0gKi8KKyAgICBHRlNLX0JUXzBwNV9oXzBwMzIgPSA0LCAvKiA8IEJUPTAuNSwgaD0wLjMyKi8KKyAgICBHRlNLX0JUXzBwNV9oXzBwNyAgPSA1LCAvKiA8IEJUPTAuNSwgaD0wLjcgWyBDUzEgYXQgNTAwS0JQUyBkYXRhIHJhdGVdICovCisgICAgR0ZTS19CVF8wcDVfaF8xcDAgID0gNiwgLyogPCBCVD0wLjUsIGg9MS4wIFsgQ1M0IGF0IDI1MEtCUFMgZGF0YSByYXRlXSAqLworCisgICAgLyogQlQ9KiogaD0wLjUgKi8KKyAgICBHRlNLX0JUXzBwM19oXzBwNSA9IDcsIC8qIDwgQlQ9MC4zLCBoPTAuNSBbIENTMiBhdCAxTUJQUyBkYXRhIHJhdGVdICovCisgICAgR0ZTS19CVF8wcDdfaF8wcDUgPSA4LCAvKiA8IEJUPTAuNywgaD0wLjUgKi8KKworICAgIE1TSyA9IDksCisgICAgTlVNX1JBRElPX01PREVTID0gMTAsCit9IHJhZGlvX21vZGVfdDsKKworLyohIEBicmllZiAgTGluayBsYXllciB0eXBlcy4gKi8KK3R5cGVkZWYgZW51bSBfbGlua19sYXllcgoreworICAgIEJMRV9MTCA9IDAsIC8qIE11c3QgbWF0Y2ggYml0IGFzc2lnbm1lbnQgaW4gUkFESU8xX0lSUV9TRUwgKi8KKyAgICBaSUdCRUVfTEwgPSAxLCAvKiBNdXN0IG1hdGNoIGJpdCBhc3NpZ25tZW50IGluIFJBRElPMV9JUlFfU0VMICovCisgICAgQU5UX0xMID0gMiwgLyogTXVzdCBtYXRjaCBiaXQgYXNzaWdubWVudCBpbiBSQURJTzFfSVJRX1NFTCAqLworICAgIEdFTkZTS19MTCA9IDMsIC8qIE11c3QgbWF0Y2ggYml0IGFzc2lnbm1lbnQgaW4gUkFESU8xX0lSUV9TRUwgKi8KKyAgICBVTkFTU0lHTkVEX0xMID0gNCwgLyogTXVzdCBtYXRjaCBiaXQgYXNzaWdubWVudCBpbiBSQURJTzFfSVJRX1NFTCAqLworfSBsaW5rX2xheWVyX3Q7CisKKy8qISBAYnJpZWYgIERhdGEgcmF0ZSBzZWxlY3Rpb25zLiAqLwordHlwZWRlZiBlbnVtIF9kYXRhX3JhdGUKK3sKKyAgICBEUl8xTUJQUyA9IDAsIC8qIE11c3QgbWF0Y2ggYml0IGFzc2lnbm1lbnQgaW4gQklUUkFURSBmaWVsZCAqLworICAgIERSXzUwMEtCUFMgPSAxLCAvKiBNdXN0IG1hdGNoIGJpdCBhc3NpZ25tZW50IGluIEJJVFJBVEUgZmllbGQgKi8KKyAgICBEUl8yNTBLQlBTID0gMiwgLyogTXVzdCBtYXRjaCBiaXQgYXNzaWdubWVudCBpbiBCSVRSQVRFIGZpZWxkICovCisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgIERSXzJNQlBTID0gMywgLyogTXVzdCBtYXRjaCBiaXQgYXNzaWdubWVudCBpbiBCSVRSQVRFIGZpZWxkICovCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworICAgIERSX1VOQVNTSUdORUQgPSA0LCAvKiBNdXN0IG1hdGNoIGJpdCBhc3NpZ25tZW50IGluIEJJVFJBVEUgZmllbGQgKi8KK30gZGF0YV9yYXRlX3Q7CisKKy8qISBAYnJpZWYgIENvbnRyb2wgc2V0dGluZ3MgZm9yIEZhc3QgQW50ZW5uYSBEaXZlcnNpdHkgKi8KK3R5cGVkZWYgZW51bSAgX0ZBRF9MUFBTX0NUUkwKK3sKKyAgICBOT05FID0gMCwKKyAgICBGQURfRU5BQkxFRCA9IDEsCisgICAgTFBQU19FTkFCTEVEID0gMgorfSBGQURfTFBQU19DVFJMX1Q7CisKKy8qISBAYnJpZWYgIFhDVlIgWENWUiBQYW5pYyBjb2RlcyBmb3IgaW5kaWNhdGluZyBwYW5pYyByZWFzb24uICovCit0eXBlZGVmIGVudW0gX1hDVlJfUEFOSUNfSUQKK3sKKyAgICBXUk9OR19SQURJT19JRF9ERVRFQ1RFRCA9IDEsCisgICAgQ0FMSUJSQVRJT05fSU5WQUxJRCA9IDIsCit9IFhDVlJfUEFOSUNfSURfVDsKKworLyohIEBicmllZiAgSW5pdGlhbGl6YXRpb24gb3IgbW9kZSBjaGFuZ2Ugc2VsZWN0aW9uIGZvciBjb25maWcgcm91dGluZS4gKi8KK3R5cGVkZWYgZW51bSBfWENWUl9JTklUX01PREVfQ0hHCit7CisgICAgWENWUl9NT0RFX0NIQU5HRSA9IDAsCisgICAgWENWUl9GSVJTVF9JTklUID0gMSwKK30gWENWUl9JTklUX01PREVfQ0hHX1Q7CisKK3R5cGVkZWYgZW51bSBfWENWUl9DT0VYX1BSSU9SSVRZCit7CisgICAgWENWUl9DT0VYX0xPV19QUklPID0gMCwKKyAgICBYQ1ZSX0NPRVhfSElHSF9QUklPID0gMQorfSAgIFhDVlJfQ09FWF9QUklPUklUWV9UOworCisvKiEgQGJyaWVmIEN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiB0aGUgcmFkaW8uICovCit0eXBlZGVmIHN0cnVjdCB4Y3ZyX2N1cnJDb25maWdfdGFnCit7CisgICAgcmFkaW9fbW9kZV90IHJhZGlvX21vZGU7CisgICAgZGF0YV9yYXRlX3QgZGF0YV9yYXRlOworfSB4Y3ZyX2N1cnJDb25maWdfdDsKKworLyohCisgKiBAYnJpZWYgWENWUiBSWF9ESUcgY2hhbm5lbCBmaWx0ZXIgY29lZmZpY2llbnQgc3RvcmFnZQorICogU3RvcmFnZSBvZiB0aGUgY29lZmZpY2llbnRzIHZhcmllcyBmcm9tIDYgYml0cyB0byAxMCBiaXRzIHNvIGFsbCB1c2UgaW50MTZfdCBmb3Igc3RvcmFnZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3hjdnJfcnhfY2hmX2NvZWZmcworeworICAgIHVpbnQxNl90IHJ4X2NoZl9jb2VmXzA7IC8qIDwgNiBiaXQgdHdvJ3MgY29tcGxlbWVudCBzdG9yZWQgaW4gYSB1aW50MTZfdCAqLworICAgIHVpbnQxNl90IHJ4X2NoZl9jb2VmXzE7IC8qIDwgNiBiaXQgdHdvJ3MgY29tcGxlbWVudCBzdG9yZWQgaW4gYSB1aW50MTZfdCAqLworICAgIHVpbnQxNl90IHJ4X2NoZl9jb2VmXzI7IC8qIDwgNyBiaXQgdHdvJ3MgY29tcGxlbWVudCBzdG9yZWQgaW4gYSB1aW50MTZfdCAqLworICAgIHVpbnQxNl90IHJ4X2NoZl9jb2VmXzM7IC8qIDwgNyBiaXQgdHdvJ3MgY29tcGxlbWVudCBzdG9yZWQgaW4gYSB1aW50MTZfdCAqLworICAgIHVpbnQxNl90IHJ4X2NoZl9jb2VmXzQ7IC8qIDwgNyBiaXQgdHdvJ3MgY29tcGxlbWVudCBzdG9yZWQgaW4gYSB1aW50MTZfdCAqLworICAgIHVpbnQxNl90IHJ4X2NoZl9jb2VmXzU7IC8qIDwgNyBiaXQgdHdvJ3MgY29tcGxlbWVudCBzdG9yZWQgaW4gYSB1aW50MTZfdCAqLworICAgIHVpbnQxNl90IHJ4X2NoZl9jb2VmXzY7IC8qIDwgOCBiaXQgdHdvJ3MgY29tcGxlbWVudCBzdG9yZWQgaW4gYSB1aW50MTZfdCAqLworICAgIHVpbnQxNl90IHJ4X2NoZl9jb2VmXzc7IC8qIDwgOCBiaXQgdHdvJ3MgY29tcGxlbWVudCBzdG9yZWQgaW4gYSB1aW50MTZfdCAqLworICAgIHVpbnQxNl90IHJ4X2NoZl9jb2VmXzg7IC8qIDwgOSBiaXQgdHdvJ3MgY29tcGxlbWVudCBzdG9yZWQgaW4gYSB1aW50MTZfdCAqLworICAgIHVpbnQxNl90IHJ4X2NoZl9jb2VmXzk7IC8qIDwgOSBiaXQgdHdvJ3MgY29tcGxlbWVudCBzdG9yZWQgaW4gYSB1aW50MTZfdCAqLworICAgIHVpbnQxNl90IHJ4X2NoZl9jb2VmXzEwOyAvKiA8IDEwIGJpdCB0d28ncyBjb21wbGVtZW50IHN0b3JlZCBpbiBhIHVpbnQxNl90ICovCisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfMTE7IC8qIDwgMTAgYml0IHR3bydzIGNvbXBsZW1lbnQgc3RvcmVkIGluIGEgdWludDE2X3QgKi8KK30geGN2cl9yeF9jaGZfY29lZmZzX3Q7CisKKy8qIQorICogQGJyaWVmIFhDVlIgbWFza2VkIGluaXQgdHlwZSBmb3IgMzIgYml0IHJlZ2lzdGVycworICogSW5pdGlhbGl6YXRpb24gdXNlcyB0aGUgbWFzayB0byBjbGVhciBzZWxlY3RlZCBmaWVsZHMgb2YgdGhlIHJlZ2lzdGVyIGFuZCB0aGVuIE9SJ3MgaW4gdGhlIGluaXQgdmFsdWUuIEFsbCBpbml0IHZhbHVlcyBtdXN0IGJlIGluIHRoZWlyIHByb3BlciBmaWVsZCBwb3NpdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3hjdnJfbWFza2VkX2luaXRfMzIKK3sKKyAgICB1aW50MzJfdCBtYXNrOworICAgIHVpbnQzMl90IGluaXQ7Cit9IHhjdnJfbWFza2VkX2luaXRfMzJfdDsKKworLyohCisgKiBAYnJpZWYgWENWUiBjb21tb24gY29uZmlndXJlIHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdCBfeGN2cl9jb21tb25fY29uZmlnCit7CisgICAgLyogWENWUl9BTkEgY29uZmlncyAqLworICAgIHhjdnJfbWFza2VkX2luaXRfMzJfdCBhbmFfc3lfY3RybDE7CisKKyAgICAvKiBYQ1ZSX1BMTF9ESUcgY29uZmlncyAqLworICAgIHVpbnQzMl90IHBsbF9ocG1fYnVtcDsKKyAgICB1aW50MzJfdCBwbGxfbW9kX2N0cmw7CisgICAgdWludDMyX3QgcGxsX2NoYW5fbWFwOworICAgIHVpbnQzMl90IHBsbF9sb2NrX2RldGVjdDsKKyAgICB1aW50MzJfdCBwbGxfaHBtX2N0cmw7CisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICB1aW50MzJfdCBwbGxfaHBtY2FsX2N0cmw7CisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICB1aW50MzJfdCBwbGxfaHBtX3NkbV9yZXM7CisgICAgdWludDMyX3QgcGxsX2xwbV9jdHJsOworICAgIHVpbnQzMl90IHBsbF9scG1fc2RtX2N0cmwxOworICAgIHVpbnQzMl90IHBsbF9kZWxheV9tYXRjaDsKKyAgICB1aW50MzJfdCBwbGxfY3R1bmVfY3RybDsKKworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICB1aW50MzJfdCByeF9kaWdfY3RybF9pbml0OyAvKiBOT1RFOiBDb21tb24gaW5pdCwgbW9kZSBpbml0LCBhbmQgZGF0YXJhdGUgaW5pdCB3aWxsIGJlIE9SJ2QgdG9nZXRoZXIgZm9yIFJYX0RJR19DVFJMIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCBkY29jX2N0cmxfMF9pbml0XzI2bWh6OyAvKiBOT1RFOiBUaGlzIHdpbGwgYmUgT1InZCB3aXRoIG1vZGUgc3BlY2lmaWMgaW5pdCBmb3IgRENPQ19DVFJMXzAgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IGRjb2NfY3RybF8wX2luaXRfMzJtaHo7IC8qIE5PVEU6IFRoaXMgd2lsbCBiZSBPUidkIHdpdGggbW9kZSBzcGVjaWZpYyBpbml0IGZvciBEQ09DX0NUUkxfMCB0byBmb3JtIGNvbXBsZXRlIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCisgICAgdWludDMyX3QgZGNvY19jdHJsXzFfaW5pdDsKKyAgICB1aW50MzJfdCBkY29jX2NhbF9nYWluX2luaXQ7CisgICAgdWludDMyX3QgZGNfcmVzaWRfY3RybF9pbml0OyAvKiBOT1RFOiBUaGlzIHdpbGwgYmUgT1InZCB3aXRoIGRhdGFyYXRlIHNwZWNpZmljIGluaXQgZm9yIERDT0NfUkVTSURfQ1RSTCB0byBmb3JtIGNvbXBsZXRlIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCisgICAgdWludDMyX3QgZGNvY19jYWxfcmNwX2luaXQ7CisgICAgdWludDMyX3QgbG5hX2dhaW5fdmFsXzNfMDsKKyAgICB1aW50MzJfdCBsbmFfZ2Fpbl92YWxfN180OworICAgIHVpbnQzMl90IGxuYV9nYWluX3ZhbF84OworICAgIHVpbnQzMl90IGJiYV9yZXNfdHVuZV92YWxfN18wOworICAgIHVpbnQzMl90IGJiYV9yZXNfdHVuZV92YWxfMTBfODsKKyAgICB1aW50MzJfdCBsbmFfZ2Fpbl9saW5fdmFsXzJfMF9pbml0OworICAgIHVpbnQzMl90IGxuYV9nYWluX2xpbl92YWxfNV8zX2luaXQ7CisgICAgdWludDMyX3QgbG5hX2dhaW5fbGluX3ZhbF84XzZfaW5pdDsKKyAgICB1aW50MzJfdCBsbmFfZ2Fpbl9saW5fdmFsXzlfaW5pdDsKKyAgICB1aW50MzJfdCBiYmFfcmVzX3R1bmVfbGluX3ZhbF8zXzBfaW5pdDsKKyAgICB1aW50MzJfdCBiYmFfcmVzX3R1bmVfbGluX3ZhbF83XzRfaW5pdDsKKyAgICB1aW50MzJfdCBiYmFfcmVzX3R1bmVfbGluX3ZhbF8xMF84X2luaXQ7CisgICAgdWludDMyX3QgZGNvY19iYmFfc3RlcF9pbml0OworICAgIHVpbnQzMl90IGRjb2NfdHphX3N0ZXBfMDBfaW5pdDsKKyAgICB1aW50MzJfdCBkY29jX3R6YV9zdGVwXzAxX2luaXQ7CisgICAgdWludDMyX3QgZGNvY190emFfc3RlcF8wMl9pbml0OworICAgIHVpbnQzMl90IGRjb2NfdHphX3N0ZXBfMDNfaW5pdDsKKyAgICB1aW50MzJfdCBkY29jX3R6YV9zdGVwXzA0X2luaXQ7CisgICAgdWludDMyX3QgZGNvY190emFfc3RlcF8wNV9pbml0OworICAgIHVpbnQzMl90IGRjb2NfdHphX3N0ZXBfMDZfaW5pdDsKKyAgICB1aW50MzJfdCBkY29jX3R6YV9zdGVwXzA3X2luaXQ7CisgICAgdWludDMyX3QgZGNvY190emFfc3RlcF8wOF9pbml0OworICAgIHVpbnQzMl90IGRjb2NfdHphX3N0ZXBfMDlfaW5pdDsKKyAgICB1aW50MzJfdCBkY29jX3R6YV9zdGVwXzEwX2luaXQ7CisjaWYgKFJBRElPX0lTX0dFTl8zUDAgfHwgUkFESU9fSVNfR0VOXzJQMSkKKyAgICB1aW50MzJfdCBkY29jX2NhbF9mYWlsX3RoX2luaXQ7CisgICAgdWludDMyX3QgZGNvY19jYWxfcGFzc190aF9pbml0OworI2VuZGlmIC8qIChSQURJT19JU19HRU5fM1AwIHx8IFJBRElPX0lTX0dFTl8yUDEpICovCisgICAgdWludDMyX3QgYWdjX2N0cmxfMF9pbml0OyAvKiBOT1RFOiBDb21tb24gaW5pdCBhbmQgbW9kZSBpbml0IHdpbGwgYmUgT1InZCB0b2dldGhlciBmb3IgQUdDX0NUUkxfMCB0byBmb3JtIGNvbXBsZXRlIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCisgICAgdWludDMyX3QgYWdjX2N0cmxfMV9pbml0XzI2bWh6OyAvKiBOT1RFOiBUaGlzIHdpbGwgYmUgT1InZCB3aXRoIGRhdGFyYXRlIHNwZWNpZmljIGluaXQgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IGFnY19jdHJsXzFfaW5pdF8zMm1oejsgLyogTk9URTogVGhpcyB3aWxsIGJlIE9SJ2Qgd2l0aCBkYXRhcmF0ZSBzcGVjaWZpYyBpbml0IHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCBhZ2NfY3RybF8zX2luaXQ7CisgICAgLyogT3RoZXIgYWdjIGNvbmZpZyBpbml0cyBtb3ZlZCB0byBtb2RlWGRhdGFyYXRlIGNvbmZpZyB0YWJsZSAqLworICAgIHVpbnQzMl90IGFnY19nYWluX3RibF8wM18wMF9pbml0OworICAgIHVpbnQzMl90IGFnY19nYWluX3RibF8wN18wNF9pbml0OworICAgIHVpbnQzMl90IGFnY19nYWluX3RibF8xMV8wOF9pbml0OworICAgIHVpbnQzMl90IGFnY19nYWluX3RibF8xNV8xMl9pbml0OworICAgIHVpbnQzMl90IGFnY19nYWluX3RibF8xOV8xNl9pbml0OworICAgIHVpbnQzMl90IGFnY19nYWluX3RibF8yM18yMF9pbml0OworICAgIHVpbnQzMl90IGFnY19nYWluX3RibF8yNl8yNF9pbml0OworICAgIHVpbnQzMl90IHJzc2lfY3RybF8wX2luaXQ7CisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgIHVpbnQzMl90IHJzc2lfY3RybF8xX2luaXQ7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworICAgIHVpbnQzMl90IGNjYV9lZF9scWlfY3RybF8wX2luaXQ7CisgICAgdWludDMyX3QgY2NhX2VkX2xxaV9jdHJsXzFfaW5pdDsKKworICAgIC8qIFhDVlJfVFNNIGNvbmZpZ3MgKi8KKyAgICB1aW50MzJfdCB0c21fY3RybDsKKyAgICB1aW50MzJfdCB0c21fb3ZyZDJfaW5pdDsKKyAgICB1aW50MzJfdCBlbmRfb2Zfc2VxX2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgZW5kX29mX3NlcV9pbml0XzMybWh6OworI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgdWludDMyX3QgbHBwc19jdHJsX2luaXQ7CisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICB1aW50MzJfdCB0c21fZmFzdF9jdHJsMl9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV9mYXN0X2N0cmwyX2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgcmVjeWNsZV9jb3VudF9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHJlY3ljbGVfY291bnRfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCBwYV9yYW1wX3RibF8wX2luaXQ7CisgICAgdWludDMyX3QgcGFfcmFtcF90YmxfMV9pbml0OworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICB1aW50MzJfdCBwYV9yYW1wX3RibF8yX2luaXQ7CisgICAgdWludDMyX3QgcGFfcmFtcF90YmxfM19pbml0OworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzAwX2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18wMV9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMDJfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzAzX2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18wNF9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMDVfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzA2X2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18wN19pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMDhfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzA5X2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18xMF9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMTFfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzEyX2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18xM19pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMTRfaW5pdF8yNm1oejsgLyogdHNtX3RpbWluZ18xNCBoYXMgbW9kZSBzcGVjaWZpYyBMU2J5dGUgKGJvdGggTFMgYnl0ZXMpICovCisgICAgdWludDMyX3QgdHNtX3RpbWluZ18xNF9pbml0XzMybWh6OyAvKiB0c21fdGltaW5nXzE0IGhhcyBtb2RlIHNwZWNpZmljIExTYnl0ZSAoYm90aCBMUyBieXRlcykgKi8KKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzE1X2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18xNl9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMTZfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzE3X2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18xOF9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMTlfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzIwX2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18yMV9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMjJfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzIzX2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18yNF9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMjVfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzI1X2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18yNl9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMjdfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzI3X2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18yOF9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMjhfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzI5X2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18yOV9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMzBfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzMwX2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zMV9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMzFfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzMyX2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zMl9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMzNfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzMzX2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zNF9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMzVfaW5pdDsgLyogdHNtX3RpbWluZ18zNSBoYXMgYSBtb2RlIHNwZWNpZmljIExTYnl0ZSovCisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zNl9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMzZfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzM3X2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zN19pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMzhfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzM5X2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zOV9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfNDBfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzQwX2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ180MV9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfNDFfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzUxX2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ181Ml9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfNTJfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzUzX2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ181NF9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfNTRfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzU1X2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ181NV9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfNTZfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzU2X2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ181N19pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfNThfaW5pdDsKKworICAgIC8qIFhDVlJfVFhfRElHIGNvbmZpZ3MgKi8KKyAgICB1aW50MzJfdCB0eF9jdHJsOworICAgIHVpbnQzMl90IHR4X2RhdGFfcGFkZGluZzsKKyAgICAgdWludDMyX3QgdHhfZGZ0X3BhdHRlcm47CisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICB1aW50MzJfdCByZl9kZnRfYmlzdF8xOworICAgIHVpbnQzMl90IHJmX2RmdF9iaXN0XzI7CisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KK30geGN2cl9jb21tb25fY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgWENWUiBtb2RlIHNwZWNpZmljIGNvbmZpZ3VyZSBzdHJ1Y3R1cmUgKHZhcmllcyBieSByYWRpbyBtb2RlKSAqLwordHlwZWRlZiBzdHJ1Y3QgX3hjdnJfbW9kZV9jb25maWcKK3sKKyAgICByYWRpb19tb2RlX3QgcmFkaW9fbW9kZTsKKyAgICB1aW50MzJfdCBzY2djNV9jbG9ja19lbmFfYml0czsKKworICAgIC8qIFhDVlJfTUlTQyBjb25maWdzICovCisgICAgeGN2cl9tYXNrZWRfaW5pdF8zMl90IHhjdnJfY3RybDsgIAorCisgICAgLyogWENWUl9QSFkgY29uZmlncyAqLworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICB1aW50MzJfdCBwaHlfZnNrX3BkX2NmZzA7CisgICAgdWludDMyX3QgcGh5X2Zza19wZF9jZmcxOworICAgIHVpbnQzMl90IHBoeV9mc2tfY2ZnOworICAgIHVpbnQzMl90IHBoeV9mc2tfbWlzYzsKKyAgICB1aW50MzJfdCBwaHlfZmFkX2N0cmw7CisjZWxzZQorICAgIHVpbnQzMl90IHBoeV9wcmVfcmVmMF9pbml0OworICAgIHVpbnQzMl90IHBoeV9wcmVfcmVmMV9pbml0OworICAgIHVpbnQzMl90IHBoeV9wcmVfcmVmMl9pbml0OworICAgIHVpbnQzMl90IHBoeV9jZmcxX2luaXQ7CisgICAgdWludDMyX3QgcGh5X2VsX2NmZ19pbml0OyAvKiBTaG91bGQgbGVhdmUgRUxfV0lOX1NJWkUgYW5kIEVMX0lOVEVSVkFMIHRvIHRoZSBkYXRhX3JhdGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqLworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICB1aW50MzJfdCByeF9kaWdfY3RybF9pbml0XzI2bWh6OyAvKiBOT1RFOiBDb21tb24gaW5pdCwgbW9kZSBpbml0LCBhbmQgZGF0YXJhdGUgaW5pdCB3aWxsIGJlIE9SJ2QgdG9nZXRoZXIgZm9yIFJYX0RJR19DVFJMIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCByeF9kaWdfY3RybF9pbml0XzMybWh6OyAvKiBOT1RFOiBDb21tb24gaW5pdCwgbW9kZSBpbml0LCBhbmQgZGF0YXJhdGUgaW5pdCB3aWxsIGJlIE9SJ2QgdG9nZXRoZXIgZm9yIFJYX0RJR19DVFJMIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCBhZ2NfY3RybF8wX2luaXQ7IC8qIE5PVEU6ICBDb21tb24gaW5pdCBhbmQgbW9kZSBpbml0IHdpbGwgYmUgT1InZCB0b2dldGhlciBmb3IgQUdDX0NUUkxfMCB0byBmb3JtIGNvbXBsZXRlIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovIAorCisgICAgLyogWENWUl9UU00gY29uZmlncyAqLworI2lmIChSQURJT19JU19HRU5fMlAwIHx8IFJBRElPX0lTX0dFTl8yUDEpCisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zNV9pbml0OyAvKiBPbmx5IHRoZSBMU2J5dGUgaXMgbW9kZSBzcGVjaWZpYyAqLworI2VuZGlmIC8qIChSQURJT19JU19HRU5fMlAwIHx8IFJBRElPX0lTX0dFTl8yUDEpICovCisKKyAgICAvKiBYQ1ZSX1RYX0RJRyBjb25maWdzICovCisgICAgdWludDMyX3QgdHhfZ2Zza19jdHJsOworICAgIHVpbnQzMl90IHR4X2dmc2tfY29lZmYxXzI2bWh6OworICAgIHVpbnQzMl90IHR4X2dmc2tfY29lZmYyXzI2bWh6OworICAgIHVpbnQzMl90IHR4X2dmc2tfY29lZmYxXzMybWh6OworICAgIHVpbnQzMl90IHR4X2dmc2tfY29lZmYyXzMybWh6OworfSB4Y3ZyX21vZGVfY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIFhDVlIgbW9kZVhkYXRhcmF0ZSBzcGVjaWZpYyBjb25maWd1cmUgc3RydWN0dXJlICh2YXJpZXMgYnkgcmFkaW8gbW9kZSBBTkQgZGF0YSByYXRlKQorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzdG9yZSBhbGwgb2YgdGhlIFhDVlIgc2V0dGluZ3Mgd2hpY2ggYXJlIGRlcGVuZGVudCB1cG9uIGJvdGggcmFkaW8gbW9kZSBhbmQgZGF0YSByYXRlLiBJdCBpcyB1c2VkIGFzIGFuIG92ZXJsYXkKKyAqIG9uIHRvcCBvZiB0aGUgeGN2cl9tb2RlX2NvbmZpZ190IHN0cnVjdHVyZSB0byBzdXBwbHkgZGVmaW5pdGlvbnMgd2hpY2ggYXJlIGVpdGhlciBub3QgaW4gdGhhdCB0YWJsZSBvciB3aGljaCBtdXN0IGJlIG92ZXJyaWRkZW4gZm9yIGRhdGEgcmF0ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3hjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWcKK3sKKyAgICByYWRpb19tb2RlX3QgcmFkaW9fbW9kZTsKKyAgICBkYXRhX3JhdGVfdCBkYXRhX3JhdGU7CisKKyAgICAvKiBYQ1ZSX0FOQSBjb25maWdzICovCisgICAgeGN2cl9tYXNrZWRfaW5pdF8zMl90IGFuYV9zeV9jdHJsMjsKKyAgICB4Y3ZyX21hc2tlZF9pbml0XzMyX3QgYW5hX3J4X2JiYTsKKyAgICB4Y3ZyX21hc2tlZF9pbml0XzMyX3QgYW5hX3J4X3R6YTsKKworICAgIC8qIFhDVlJfUEhZIGNvbmZpZ3MgKi8KKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgdWludDMyX3QgcGh5X2Zza19taXNjX21vZGVfZGF0YXJhdGU7CisjZWxzZQorICAgIHVpbnQzMl90IHBoeV9jZmcyX2luaXQ7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisgICAgdWludDMyX3QgYWdjX2N0cmxfMl9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IGFnY19jdHJsXzJfaW5pdF8zMm1oejsKKyAgICB4Y3ZyX3J4X2NoZl9jb2VmZnNfdCByeF9jaGZfY29lZmZzXzI2bWh6OyAvKiAyNk1IeiBleHQgY2xrICovCisgICAgeGN2cl9yeF9jaGZfY29lZmZzX3QgcnhfY2hmX2NvZWZmc18zMm1oejsgLyogMzJNSHogZXh0IGNsayAqLworICAgIHVpbnQzMl90IHJ4X3JjY2FsX2N0cmxfMDsKKyAgICB1aW50MzJfdCByeF9yY2NhbF9jdHJsXzE7CisKKyAgICAvKiBYQ1ZSX1RYX0RJRyBjb25maWdzICovCisgICAgdWludDMyX3QgdHhfZnNrX3NjYWxlXzI2bWh6OyAvKiBPbmx5IHVzZWQgYnkgTVNLIG1vZGUsIGJ1dCBkZXBlbmRlbnQgb24gZGF0YXJhdGUgKi8KKyAgICB1aW50MzJfdCB0eF9mc2tfc2NhbGVfMzJtaHo7IC8qIE9ubHkgdXNlZCBieSBNU0sgbW9kZSwgYnV0IGRlcGVuZGVudCBvbiBkYXRhcmF0ZSAqLworfSB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIFhDVlIgZGF0YXJhdGUgc3BlY2lmaWMgY29uZmlndXJlIHN0cnVjdHVyZSAodmFyaWVzIGJ5IGRhdGEgcmF0ZSkKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gc3RvcmUgYWxsIG9mIHRoZSBYQ1ZSIHNldHRpbmdzIHdoaWNoIGFyZSBkZXBlbmRlbnQgdXBvbiBkYXRhIHJhdGUuIEl0IGlzIHVzZWQgYXMgYW4gb3ZlcmxheQorICogb24gdG9wIG9mIHRoZSB4Y3ZyX21vZGVfY29uZmlnX3Qgc3RydWN0dXJlIHRvIHN1cHBseSBkZWZpbml0aW9ucyB3aGljaCBhcmUgZWl0aGVyIG5vdCBpbiB0aGF0IHRhYmxlIG9yIHdoaWNoIG11c3QgYmUgb3ZlcnJpZGRlbiBmb3IgZGF0YSByYXRlLgorICovCit0eXBlZGVmIHN0cnVjdCBfeGN2cl9kYXRhcmF0ZV9jb25maWcKK3sKKyAgICBkYXRhX3JhdGVfdCBkYXRhX3JhdGU7CisKKyAgICAvKiBYQ1ZSX1BIWSBjb25maWdzICovCisgICAgdWludDMyX3QgcGh5X2VsX2NmZ19pbml0OyAvKiBOb3RlOiBFTF9FTkFCTEUgIGlzIHNldCBpbiB4Y3ZyX21vZGVfY29uZmlnX3Qgc2V0dGluZ3MgKi8KKworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICB1aW50MzJfdCByeF9kaWdfY3RybF9pbml0XzI2bWh6OyAvKiBOT1RFOiBDb21tb24gaW5pdCwgbW9kZSBpbml0LCBhbmQgZGF0YXJhdGUgaW5pdCB3aWxsIGJlIE9SJ2QgdG9nZXRoZXIgZm9yIFJYX0RJR19DVFJMIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCByeF9kaWdfY3RybF9pbml0XzMybWh6OyAvKiBOT1RFOiBDb21tb24gaW5pdCwgbW9kZSBpbml0LCBhbmQgZGF0YXJhdGUgaW5pdCB3aWxsIGJlIE9SJ2QgdG9nZXRoZXIgZm9yIFJYX0RJR19DVFJMIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCBhZ2NfY3RybF8xX2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgYWdjX2N0cmxfMV9pbml0XzMybWh6OworICAgIHVpbnQzMl90IGRjb2NfY3RybF8wX2luaXRfMjZtaHo7IC8qIE5PVEU6IFRoaXMgd2lsbCBiZSBPUidkIHdpdGggY29tbW9uIGluaXQgZm9yIERDT0NfQ1RSTF8wIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCBkY29jX2N0cmxfMF9pbml0XzMybWh6OyAvKiBOT1RFOiBUaGlzIHdpbGwgYmUgT1InZCB3aXRoIGNvbW1vbiBpbml0IGZvciBEQ09DX0NUUkxfMCB0byBmb3JtIGNvbXBsZXRlIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCisgICAgdWludDMyX3QgZGNvY19jdHJsXzFfaW5pdF8yNm1oejsgLyogTk9URTogVGhpcyB3aWxsIGJlIE9SJ2Qgd2l0aCBjb21tb24gaW5pdCBmb3IgRENPQ19DVFJMXzEgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IGRjb2NfY3RybF8xX2luaXRfMzJtaHo7IC8qIE5PVEU6IFRoaXMgd2lsbCBiZSBPUidkIHdpdGggY29tbW9uIGluaXQgZm9yIERDT0NfQ1RSTF8xIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCBkY29jX2N0cmxfMl9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IGRjb2NfY3RybF8yX2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgZGNvY19jYWxfaWlyX2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgZGNvY19jYWxfaWlyX2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgZGNfcmVzaWRfY3RybF8yNm1oejsvKiBOT1RFOiBUaGlzIHdpbGwgYmUgT1InZCB3aXRoIGNvbW1vbiBpbml0IGZvciBEQ09DX1JFU0lEX0NUUkwgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IGRjX3Jlc2lkX2N0cmxfMzJtaHo7LyogTk9URTogVGhpcyB3aWxsIGJlIE9SJ2Qgd2l0aCBjb21tb24gaW5pdCBmb3IgRENPQ19SRVNJRF9DVFJMIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KK30geGN2cl9kYXRhcmF0ZV9jb25maWdfdDsKKworLyohCisgKiBAYnJpZWYgTFBVQVJUIGNhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKKyAqCisgKiBUaGUgcGFuaWMgY2FsbGJhY2sgZnVuY3Rpb24gaXMgZGVmaW5lZCBieSBzeXN0ZW0gaWYgc3lzdGVtIG5lZWQgdG8gYmUgaW5mb3JtZWQgb2YgWENWUiBmYXRhbCBlcnJvcnMuCisgKiByZWZlciB0byAjWENWUl9SZWdpc3RlclBhbmljQ2IKKyAqLwordHlwZWRlZiB2b2lkICgqcGFuaWNfZnB0cikodWludDMyX3QgcGFuaWNfaWQsIHVpbnQzMl90IGxvY2F0aW9uLCB1aW50MzJfdCBleHRyYTEsIHVpbnQzMl90IGV4dHJhMik7CisKKy8qIE1ha2UgYXZhaWxhYmxlIGNvbnN0IHN0cnVjdHVyZXMgZnJvbSBjb25maWcgZmlsZXMgKi8KK2V4dGVybiBjb25zdCB4Y3ZyX2NvbW1vbl9jb25maWdfdCB4Y3ZyX2NvbW1vbl9jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IHpnYmVfbW9kZV9jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IGJsZV9tb2RlX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgYW50X21vZGVfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBnZnNrX2J0XzBwNV9oXzBwNV9tb2RlX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgZ2Zza19idF8wcDVfaF8wcDdfbW9kZV9jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IGdmc2tfYnRfMHA1X2hfMHAzMl9tb2RlX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgZ2Zza19idF8wcDVfaF8xcDBfbW9kZV9jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IGdmc2tfYnRfMHAzX2hfMHA1X21vZGVfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBnZnNrX2J0XzBwN19oXzBwNV9tb2RlX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgbXNrX21vZGVfY29uZmlnOworCisjaWYgUkFESU9fSVNfR0VOXzNQMAorZXh0ZXJuIGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl8ybWJwc19jb25maWc7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworZXh0ZXJuIGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl8xbWJwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyXzUwMGticHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl8yNTBrYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfODAyXzE1XzRfNTAwa2Jwc19jb25maWc7IC8qIEN1c3RvbSBkYXRhcmF0ZSBzZXR0aW5ncyBmb3IgODAyLjE1LjQgc2luY2UgaXQgaXMgMk1DaGlwcy9zZWMgKi8KKworI2lmIFJBRElPX0lTX0dFTl8zUDAKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwNV8ybWJwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDMyXzJtYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwM19oXzBwNV8ybWJwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDdfaF8wcDVfMm1icHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX01TS18ybWJwc19jb25maWc7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0JMRV8xbWJwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfWklHQkVFXzUwMGticHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0FOVF8xbWJwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDVfMW1icHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMHA1XzUwMGticHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMHA1XzI1MGticHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMHAzMl8xbWJwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDMyXzUwMGticHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMHAzMl8yNTBrYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwN18xbWJwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDdfNTAwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDdfMjUwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8xcDBfMW1icHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMXAwXzUwMGticHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMXAwXzI1MGticHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHAzX2hfMHA1XzFtYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwM19oXzBwNV81MDBrYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwM19oXzBwNV8yNTBrYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwN19oXzBwNV8xbWJwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDdfaF8wcDVfNTAwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDdfaF8wcDVfMjUwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfTVNLXzFtYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9NU0tfNTAwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfTVNLXzI1MGticHNfY29uZmlnOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQG5hbWUgWENWUiBmdW5jdGlvbmFsIE9wZXJhdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiAgSW5pdGlhbGl6ZXMgYW4gWENWUiBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBYQ1ZSIG1vZHVsZSBhY2NvcmRpbmcgdG8gdGhlIHJhZGlvX21vZGUgYW5kIGRhdGFfcmF0ZSBzZXR0aW5ncy4gVGhpcyB0aGUgb25seSBmdW5jdGlvbiBjYWxsIHJlcXVpcmVkIHRvIAorICogc3RhcnQgdXAgdGhlIFhDVlIgaW4gbW9zdCBzaXR1YXRpb25zLiAKKyAqCisgKiBAcGFyYW0gcmFkaW9fbW9kZSBUaGUgcmFkaW8gbW9kZSBmb3Igd2hpY2ggdGhlIFhDVlIgc2hvdWxkIGJlIGNvbmZpZ3VyZWQuCisgKiBAcGFyYW0gZGF0YV9yYXRlIFRoZSBkYXRhIHJhdGUgZm9yIHdoaWNoIHRoZSBYQ1ZSIHNob3VsZCBiZSBjb25maWd1cmVkLiBPbmx5IG1hdHRlcnMgd2hlbiBHRlNLL01TSyByYWRpb19tb2RlIGlzIHNlbGVjdGVkLgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBlbmNvbXBhc3NlcyB0aGUgOjpYQ1ZSR2V0RGVmYWZ1bHRDb25maWcoKSBhbmQgOjpYQ1ZSX0NvbmZpZ3VyZSgpIGZ1bmN0aW9ucy4KKyAqLworeGN2clN0YXR1c190IFhDVlJfSW5pdChyYWRpb19tb2RlX3QgcmFkaW9fbW9kZSwgZGF0YV9yYXRlX3QgZGF0YV9yYXRlKTsKKworLyohCisgKiBAYnJpZWYgIERlaW5pdGlhbGl6ZXMgYW4gWENWUiBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdhdGUgdGhlIFhDVlIgbW9kdWxlIGNsb2NrIGFuZCBzZXQgYWxsIHJlZ2lzdGVyIHZhbHVlIHRvIHJlc2V0IHZhbHVlLgorICoKKyAqLwordm9pZCBYQ1ZSX0RlaW5pdCh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgIEluaXRpYWxpemVzIFhDVlIgY29uZmlndXJlIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgcG9pbnRlcnMgdG8gdGhlIFhDVlIgY29uZmlndXJlIHN0cnVjdHVyZXMgd2l0aCBkZWZhdWx0IHZhbHVlcy4gCisgKiBUaGUgY29uZmlndXJhdGlvbnMgYXJlIGRpdmlkZWQgaW50byBhIGNvbW1vbiBzdHJ1Y3R1cmUsIGEgc2V0IG9mIHJhZGlvIG1vZGUgc3BlY2lmaWMgCisgKiBzdHJ1Y3R1cmVzIChvbmUgcGVyIHJhZGlvX21vZGUpLCBhIHNldCBvZiBtb2RlJmRhdGFyYXRlIHNwZWNpZmljIHN0cnVjdHVyZXMgKGZvciBlYWNoIG1vZGUgYXQKKyAqIGVhY2ggZGF0YXJhdGUpLCBhbmQgYSBzZXQgb2YgZGF0YSByYXRlIHNwZWNpZmljIHN0cnVjdHVyZXMuCisgKiBUaGUgcG9pbnRlcnMgcHJvdmlkZWQgYnkgdGhpcyByb3V0aW5lIHBvaW50IHRvIGNvbnN0IHN0cnVjdHVyZXMgd2hpY2ggY2FuIGJlCisgKiBjb3BpZWQgdG8gdmFyaWFibGUgc3RydWN0dXJlcyBpZiBjaGFuZ2VzIHRvIHNldHRpbmdzIGFyZSByZXF1aXJlZC4KKyAqCisgKiBAcGFyYW0gcmFkaW9fbW9kZSBbaW5dIFRoZSByYWRpbyBtb2RlIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmVzIGFyZSByZXF1ZXN0ZWQuCisgKiBAcGFyYW0gZGF0YV9yYXRlIFtpbl0gVGhlIGRhdGEgcmF0ZSBmb3Igd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcyBhcmUgcmVxdWVzdGVkLgorICogQHBhcmFtIGNvbV9jb25maWcgW2luLG91dF0gUG9pbnRlciB0byBhIHBvaW50ZXIgdG8gdGhlIGNvbW1vbiBjb25maWd1cmF0aW9uIHNldHRpbmdzIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBtb2RlX2NvbmZpZyAgW2luLG91dF0gUG9pbnRlciB0byBhIHBvaW50ZXIgdG8gdGhlIG1vZGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gbW9kZV9kYXRhcmF0ZV9jb25maWcgIFtpbixvdXRdIFBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIHRoZSBtb2RlWGRhdGEgcmF0ZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBkYXRhcmF0ZV9jb25maWcgIFtpbixvdXRdIFBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIHRoZSBkYXRhIHJhdGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIDAgc3VjY2Vzcywgb3RoZXJzIGZhaWx1cmUKKyAqIEBzZWUgWENWUl9Db25maWd1cmUKKyAqLworeGN2clN0YXR1c190IFhDVlJfR2V0RGVmYXVsdENvbmZpZyhyYWRpb19tb2RlX3QgcmFkaW9fbW9kZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfcmF0ZV90IGRhdGFfcmF0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfY29tbW9uX2NvbmZpZ190ICoqIGNvbV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKiogbW9kZV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKiogbW9kZV9kYXRhcmF0ZV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190ICoqIGRhdGFyYXRlX2NvbmZpZyk7CisKKy8qIQorICogQGJyaWVmICBJbml0aWFsaXplcyBhbiBYQ1ZSIGluc3RhbmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFhDVlIgbW9kdWxlIHdpdGggdXNlci1kZWZpbmVkIHNldHRpbmdzLgorICoKKyAqIEBwYXJhbSBjb21fY29uZmlnIFBvaW50ZXIgdG8gdGhlIGNvbW1vbiBjb25maWd1cmF0aW9uIHNldHRpbmdzIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBtb2RlX2NvbmZpZyBQb2ludGVyIHRvIHRoZSBtb2RlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgc3RydWN0dXJlLgorICogQHBhcmFtIG1vZGVfZGF0YXJhdGVfY29uZmlnIFBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIHRoZSBtb2RlWGRhdGEgcmF0ZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBkYXRhcmF0ZV9jb25maWcgUG9pbnRlciB0byBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgcmF0ZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSB0ZW1wRGVnQyB0ZW1wZXJhdHVyZSBvZiB0aGUgZGllIGluIGRlZ3JlZXMgQy4KKyAqIEBwYXJhbSBleHRfY2xrIGluZGljYXRlcyB0aGUgZXh0ZXJuYWwgY2xvY2sgc2V0dGluZywgMzJNSHogb3IgMjZNSHouCisgKiBAcGFyYW0gZmlyc3RfaW5pdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2FsbCBpcyB0byBpbml0aWFsaXplICg9PSAxKSBvciB0aGUgY2FsbCBpcyB0byBwZXJmb3JtIGEgbW9kZSBjaGFuZ2UgKD09IDApCisgKiBAcmV0dXJuIDAgc3VjY2VlZCwgb3RoZXJzIGZhaWxlZAorICovCit4Y3ZyU3RhdHVzX3QgWENWUl9Db25maWd1cmUoY29uc3QgeGN2cl9jb21tb25fY29uZmlnX3QgKmNvbV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqbW9kZV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqbW9kZV9kYXRhcmF0ZV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgKmRhdGFyYXRlX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCB0ZW1wRGVnQywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9JTklUX01PREVfQ0hHX1QgZmlyc3RfaW5pdCk7CisKKy8qIQorICogQGJyaWVmIFNldCBYQ1ZSIHJlZ2lzdGVyIHRvIHJlc2V0IHZhbHVlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0IFhDVlIgcmVnaXN0ZXIgdG8gdGhlIHJlc2V0IHZhbHVlLgorICoKKyAqLwordm9pZCBYQ1ZSX1Jlc2V0KHZvaWQpOworCisvKiEKKyAqIEBicmllZiAgQ2hhbmdlIHRoZSBvcGVyYXRpbmcgbW9kZSBvZiB0aGUgcmFkaW8uCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBYQ1ZSIHRvIGEgbmV3IHJhZGlvIG9wZXJhdGluZyBtb2RlLgorICoKKyAqIEBwYXJhbSBuZXdfcmFkaW9fbW9kZSBUaGUgcmFkaW8gbW9kZSBmb3Igd2hpY2ggdGhlIFhDVlIgc2hvdWxkIGJlIGNvbmZpZ3VyZWQuCisgKiBAcGFyYW0gbmV3X2RhdGFfcmF0ZSBUaGUgZGF0YSByYXRlIGZvciB3aGljaCB0aGUgWENWUiBzaG91bGQgYmUgY29uZmlndXJlZC4gT25seSBtYXR0ZXJzIHdoZW4gR0ZTSy9NU0sgcmFkaW9fbW9kZSBpcyBzZWxlY3RlZC4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHRoZSBtb2RlIGNoYW5nZS4KKyAqLworIHhjdnJTdGF0dXNfdCBYQ1ZSX0NoYW5nZU1vZGUocmFkaW9fbW9kZV90IG5ld19yYWRpb19tb2RlLCBkYXRhX3JhdGVfdCBuZXdfZGF0YV9yYXRlKTsKKworLyohCisgKiBAYnJpZWYgIEVuYWJsZSBOYXJyb3diYW5kIFJTU0kgbWVhc3VyZW1lbnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBuYXJyb3diYW5kIFJTU0kgbWVhc3VyZW1lbnQKKyAqCisgKiBAcGFyYW0gSUlSbmJFbmFibGUgdHJ1ZSBjYXVzZXMgdGhlIE5CIFJTU0kgdG8gYmUgZW5hYmxlZCwgZmFsc2UgZGlzYWJsZWQuCisgKi8KK3ZvaWQgWENWUl9FbmFOQlJTU0lNZWFzKHVpbnQ4X3QgSUlSbmJFbmFibGUpOworCisvKiEKKyAqIEBicmllZiAgU2V0IGFuIGFyYml0cmFyeSBmcmVxdWVuY3kgZm9yIFJYIGFuZCBUWCBmb3IgdGhlIHJhZGlvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcmFkaW8gZnJlcXVlbmN5IHVzZWQgZm9yIFJYIGFuZCBSWC4uCisgKgorICogQHBhcmFtIGZyZXEgdGFyZ2V0IGZyZXF1ZW5jeSBzZXR0aW5nIGluIEh6LgorICogQHBhcmFtIHJlZk9zYyByZWZlcmVuY2Ugb3NjaWxsYXRvciBzZXR0aW5nIGluIEh6LgorICogQHJldHVybiBzdGF0dXMgb2YgdGhlIGZyZXF1ZW5jeSBjaGFuZ2UuCisgKiBAZGV0YWlscworICovCisgeGN2clN0YXR1c190IFhDVlJfT3ZlcnJpZGVGcmVxdWVuY3kodWludDMyX3QgZnJlcSwgdWludDMyX3QgcmVmT3NjKTsKKworLyohCisgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgY2FsbGJhY2sgZnJvbSB1cHBlciBsYXllcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBjYWxsYmFjayBmcm9tIHRoZSB1cHBlciBsYXllcnMgZm9yIHRoZSByYWRpbyB0byBjYWxsIGluIGNhc2Ugb2YgZmF0YWwgZXJyb3JzLgorICoKKyAqIEBwYXJhbSBmcHRyIFRoZSBmdW5jdGlvbiBwb2ludGVyIHRvIGEgcGFuaWMgY2FsbGJhY2suCisgKi8KK3ZvaWQgWENWUl9SZWdpc3RlclBhbmljQ2IocGFuaWNfZnB0ciBmcHRyKTsgLyogYWxsb3cgdXBwZXIgbGF5ZXJzIHRvIHByb3ZpZGUgUEFOSUMgY2FsbGJhY2sgKi8KKworLyohCisgKiBAYnJpZWYgIFJlYWQgdGhlIGhlYWx0aCBzdGF0dXMgb2YgdGhlIFhDVlIgdG8gZGV0ZWN0IGVycm9ycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHVwcGVyIGxheWVycyB0byByZXF1ZXN0IHRoZSBjdXJyZW50IHJhZGlvIGhlYWx0aC4KKyAqCisgKiBAcmV0dXJuIFRoZSBoZWFsdGggc3RhdHVzIG9mIHRoZSByYWRpby4uCisgKi8KK2hlYWx0aFN0YXR1c190IFhDVlJfSGVhbHRoQ2hlY2sodm9pZCk7IC8qIGFsbG93IHVwcGVyIGxheWVycyB0byBwb2xsIHRoZSByYWRpbyBoZWFsdGggKi8KKworLyohCisgKiBAYnJpZWYgIENvbnRyb2wgRkFEIGFuZCBMUFBTIGZlYXR1cmVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29udHJvbHMgdGhlIEZhc3QgQW50ZW5uYSBEaXZlcnNpdHkgKEZBRCkgYW5kIExvdyBQb3dlciBQcmVhbWJsZSBTZWFyY2guCisgKgorICogQHBhcmFtIGZwdHIgY29udHJvbCB0aGUgRkFEIGFuZCBMUFBTIHNldHRpbmdzLgorICoKKyAqLworIHZvaWQgWENWUl9GYWRMcHBzQ29udHJvbChGQURfTFBQU19DVFJMX1QgY29udHJvbCk7CisKKy8qIQorICogQGJyaWVmICBDaGFuZ2UgdGhlIG1hcHBpbmcgb2YgdGhlIHJhZGlvIElSUXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBtYXBwaW5nIG9mIHRoZSByYWRpbyBMTCBJUlEgc2lnbmFscyB0byB0aGUgMi40RyBSYWRpbyBJTlQwIGFuZCAyLjRHIFJhZGlvIElOVDEgbGluZXMuCisgKgorICogQHBhcmFtIGlycTBfbWFwcGluZyAgdGhlIExMIHdoaWNoIHNob3VsZCBiZSBtYXBwZWQgdG8gdGhlIElOVDAgbGluZS4KKyAqIEBwYXJhbSBpcnExX21hcHBpbmcgIHRoZSBMTCB3aGljaCBzaG91bGQgYmUgbWFwcGVkIHRvIHRoZSBJTlQxIGxpbmUuCisgKiBAcmV0dXJuIHN0YXR1cyBvZiB0aGUgbWFwcGluZyByZXF1ZXN0LgorICogQCBub3RlIFRoZSByYWRpb19tb2RlX3QgcGFyYW1ldGVycyBtYXAgdG8gOjpsaW5rX2xheWVyX3Qgc2VsZWN0aW9ucyBmb3IgdGhlIExMIHdoaWNoIGlzIGNvbm5lY3RlZCB0byB0aGUgSU5UIGxpbmUuCisgKiBAd2FybmluZworICogIFRoZSBzYW1lIExMIG11c3QgTk9UIGJlIG1hcHBlZCB0byBib3RoIElOVCBsaW5lcy4KKyAqLworIHhjdnJTdGF0dXNfdCBYQ1ZSX1NldElSUU1hcHBpbmcocmFkaW9fbW9kZV90IGlycTBfbWFwcGluZywgcmFkaW9fbW9kZV90IGlycTFfbWFwcGluZyk7CisKKyNpZiBSQURJT19JU19HRU5fM1AwCisvKiEKKyAqIEBicmllZiAgU2V0cyB0aGUgbmV0d29yayBhZGRyZXNzIHVzZWQgYnkgdGhlIFBIWSBkdXJpbmcgQkxFIEJpdCBTdHJlYW1pbmcgTW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByb2dyYW1zIHRoZSByZWdpc3RlciBpbiB0aGUgUEhZIHdoaWNoIGNvbnRhaW5zIHRoZSBuZXR3b3JrIGFkZHJlc3MgdXNlZCBkdXJpbmcgQlNNLgorICoKKyAqIEBwYXJhbSBic21fbnR3X2FkZHJlc3MgIHRoZSBhZGRyZXNzIHRvIGJlIHVzZWQgZHVyaW5nIEJTTS4KKyAqIEAgbm90ZSBUaGlzIHJvdXRpbmUgZG9lcyBOT1QgZW5hYmxlIEJTTS4KKyAqLwordm9pZCBYQ1ZSX1NldEJTTV9OVFdfQWRkcmVzcyh1aW50MzJfdCBic21fbnR3X2FkZHJlc3MpOworCisvKiEKKyAqIEBicmllZiAgUmVhZHMgdGhlIGN1cnJlbnRseSBwcm9ncmFtbWVkIG5ldHdvcmsgYWRkcmVzcyB1c2VkIGJ5IHRoZSBQSFkgZHVyaW5nIEJMRSBCaXQgU3RyZWFtaW5nIE1vZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgcmVnaXN0ZXIgaW4gdGhlIFBIWSB3aGljaCBjb250YWlucyB0aGUgbmV0d29yayBhZGRyZXNzIHVzZWQgZHVyaW5nIEJTTS4KKyAqCisgKiBAcmV0dXJuIGJzbV9udHdfYWRkcmVzcyAgdGhlIGFkZHJlc3MgdG8gYmUgdXNlZCBkdXJpbmcgQlNNLgorICogQCBub3RlIFRoaXMgcm91dGluZSBkb2VzIE5PVCBlbmFibGUgQlNNLgorICovCit1aW50MzJfdCBYQ1ZSX0dldEJTTV9OVFdfQWRkcmVzcyh2b2lkKTsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKy8qIQorICogQGJyaWVmICBHZXQgdGhlIG1hcHBpbmcgb2YgdGhlIG9uZSBvZiB0aGUgcmFkaW8gSVJRcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzZXR0aW5nIGZvciB0aGUgbWFwcGluZyBvZiBvbmUgb2YgdGhlIHJhZGlvIExMIElSUSBzaWduYWxzIHRvIHRoZSAyLjRHIFJhZGlvIElOVDAgYW5kIDIuNEcgUmFkaW8gSU5UMSBsaW5lcy4KKyAqCisgKiBAcGFyYW0gaW50X251bSB0aGUgbnVtYmVyLCAwIG9yIDEsIG9mIHRoZSBJTlQgbGluZSB0byBmZXRjaGVkLgorICogQHJldHVybiB0aGUgbWFwcGluZyBzZXR0aW5nIG9mIHRoZSBzcGVjaWZpZWQgbGluZS4KKyAqIEBub3RlIEFueSB2YWx1ZSBwYXNzZWQgaW50byB0aGlzIHJvdXRpbmUgb3RoZXIgdGhhbiAwIHdpbGwgYmUgdHJlYXRlZCBhcyBhIDEuCisgKi8KKyBsaW5rX2xheWVyX3QgWENWUl9HZXRJUlFNYXBwaW5nKHVpbnQ4X3QgaW50X251bSk7CisKKy8qIQorICogQGJyaWVmICBHZXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiB0aGUgWENWUi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZldGNoZXMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiAocmFkaW8gbW9kZSBhbmQgcmFkaW8gZGF0YSByYXRlKSBvZiB0aGUgWENWUiB0byBhbGxvdyBMTCB0byBwcm9wZXJseSBjb25maWcgZGF0YSByYXRlcywgZXRjCisgKgorICogQHBhcmFtIGN1cnJfY29uZmlnIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZSBjdXJyZW50IG1vZGUgYW5kIGRhdGEgcmF0ZS4KKyAqIEByZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgcmVxdWVzdCwgc3VjY2VzcyBvciBpbnZhbGlkIHBhcmFtZXRlciAobnVsbCBwb2ludGVyKS4KKyAqIEBub3RlIFRoaXMgQVBJIHdpbGwgcmV0dXJuIG1lYW5pbmdsZXNzIHJlc3VsdHMgaWYgY2FsbGVkIGJlZm9yZSB0aGUgcmFkaW8gaXMgaW5pdGlhbGl6ZWQuLi4KKyAqLworeGN2clN0YXR1c190IFhDVlJfR2V0Q3VycmVudENvbmZpZyh4Y3ZyX2N1cnJDb25maWdfdCAqIGN1cnJfY29uZmlnKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEN1c3RvbWVyIGxldmVsIHRyaW0gZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYnJpZWYgIENvbnRyb2xzIHNldHRpbmcgdGhlIFhUQUwgdHJpbSB2YWx1ZS4uCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSB1cHBlciBsYXllcnMgc2V0IGEgY3J5c3RhbCB0cmltIGNvbXBlbnNhdGlvbiBmYWNvcgorICoKKyAqIEBwYXJhbSB4dGFsVHJpbSB0aGUgdHJpbSB2YWx1ZSB0byBhcHBseSB0byB0aGUgWFRBTCB0cmltbWluZyByZWdpc3Rlci4gT25seSB0aGUgNyBMU0IgYXJlIHZhbGlkLCBzZXR0aW5nIHRoZSA4dGggYml0IHJldHVybnMgYW4gZXJyb3IuCisgKiBAcmV0dXJuIFRoZSBoZWFsdGggc3RhdHVzIG9mIHRoZSByYWRpby4uCisgKi8KK3hjdnJTdGF0dXNfdCBYQ1ZSX1NldFh0YWxUcmltKHVpbnQ4X3QgeHRhbFRyaW0pOworCisvKiEKKyAqIEBicmllZiAgQ29udHJvbHMgZ2V0dGluZyB0aGUgWFRBTCB0cmltIHZhbHVlLi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHVwcGVyIGxheWVycyB0byByZWFkIHRoZSBjdXJyZW50IFhUQUwgY29tcGVuc2F0aW9uIGZhY3RvcnMuCisgKiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAuLjEyNyAoNyBiaXRzKS4KKyAqCisgKiBAcmV0dXJuIFRoZSBYVEFMIHRyaW0gY29tcGVuc2F0aW9uIGZhY3RvcnMuLgorICovIAordWludDhfdCAgWENWUl9HZXRYdGFsVHJpbSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgIENvbnRyb2xzIHNldHRpbmcgdGhlIFJTU0kgYWRqdXN0bWVudC4uCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSB1cHBlciBsYXllcnMgdG8gc2V0IGFuIFJTU0kgYWRqdXN0bWVudCB2YWx1ZS4KKyAqCisgKiBAcGFyYW0gYWRqIHRoZSBhZGp1c3RtZW50IHZhbHVlIHRvIGFwcGx5IHRvIHRoZSBSU1NJIGFkanVzdG1lbnQgcmVnaXN0ZXIuIFRoZSB2YWx1ZSBtdXN0IGJlIGEgc2lnbmVkIDgtYml0IHZhbHVlLCBpbiAxLzQgZEJtIHN0ZXAuCisgKiBAcmV0dXJuIFRoZSBoZWFsdGggc3RhdHVzIG9mIHRoZSByYWRpby4uCisgKi8KK3hjdnJTdGF0dXNfdCBYQ1ZSX1NldFJzc2lBZGp1c3RtZW50KGludDhfdCBhZGopOworCisvKiEKKyAqIEBicmllZiAgQ29udHJvbHMgZ2V0dGluZyB0aGUgUlNTSSBhZGp1c3RtZW50Li4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHVwcGVyIGxheWVycyB0byByZWFkIHRoZSBjdXJyZW50IFhDVlIgUlNTSSBhZGp1c3RtZW50IHZhbHVlLgorICogVGhlIHJldHVybmVkIHZhbHVlIGlzIGEgc2lnbmVkIDgtYml0IHZhbHVlLCBpbiAxLzQgZEJtIHN0ZXAuCisgKgorICogQHJldHVybiBUaGUgUlNTSSBhZGp1c3RtZW50IHZhbHVlLi4KKyAqLyAKK2ludDhfdCAgWENWUl9HZXRSc3NpQWRqdXN0bWVudCh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgIENvbnRyb2xzIHNldHRpbmcgdGhlIFBMTCB0byBhIHBhcnRpY3VsYXIgY2hhbm5lbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgc2V0dGluZyB0aGUgcmFkaW8gY2hhbm5lbCBmb3IgVFggYW5kIFJYLgorICoKKyAqIEBwYXJhbSBjaGFubmVsIHRoZSBjaGFubmVsIG51bWJlciB0byBzZXQKKyAqIEBwYXJhbSB1c2VNYXBwZWRDaGFubmVsIHdoZW4gdHJ1ZSwgY2hhbm5lbCBpcyBhc3N1bWVkIHRvIGJlIGZyb20gdGhlIHByb3RvY29sIHNwZWNpZmljIGNoYW5uZWwgbWFwLiB3aGVuIGZhbHNlLCBjaGFubmVsIGlzIGFzc3VtZWQgdG8gYmUgZnJvbSB0aGUgMTI4IGdlbmVyYWwgY2hhbm5lbCBsaXN0Li4KKyAqIEByZXR1cm4gVGhlIHN0YXR1cyBvZiB0aGUgY2hhbm5lbCBvdmVyLXJpZGUuCisgKi8gCit4Y3ZyU3RhdHVzX3QgWENWUl9PdmVycmlkZUNoYW5uZWwodWludDhfdCBjaGFubmVsLCB1aW50OF90IHVzZU1hcHBlZENoYW5uZWwpOworCisvKiEKKyAqIEBicmllZiAgUmVhZHMgdGhlIGN1cnJlbnQgZnJlcXVlbmN5IGZvciBSWCBhbmQgVFggZm9yIHRoZSByYWRpby4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSByYWRpbyBmcmVxdWVuY3kgdXNlZCBmb3IgUlggYW5kIFJYLi4KKyAqCisgKiBAcmV0dXJuIEN1cnJlbnQgcmFkaW8gZnJlcXVlbmN5IHNldHRpbmcuCisgKi8KK3VpbnQzMl90IFhDVlJfR2V0RnJlcSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgIEZvcmNlIHJlY2VpdmVyIHdhcm11cC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZvcmNlcyB0aGUgaW5pdGlhdGlvbiBvZiBhIHJlY2VpdmVyIHdhcm11cCBzZXF1ZW5jZS4KKyAqCisgKi8KK3ZvaWQgWENWUl9Gb3JjZVJ4V3Uodm9pZCk7CisKKy8qIQorICogQGJyaWVmICBGb3JjZSByZWNlaXZlciB3YXJtZG93bi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZvcmNlcyB0aGUgaW5pdGlhdGlvbiBvZiBhIHJlY2VpdmVyIHdhcm1kb3duIHNlcXVlbmNlLgorICoKKyAqLworIHZvaWQgWENWUl9Gb3JjZVJ4V2Qodm9pZCk7CisKKy8qIQorICogQGJyaWVmICBGb3JjZSB0cmFuc21pdHRlciB3YXJtdXAuCisgKgorICogVGhpcyBmdW5jdGlvbiBmb3JjZXMgdGhlIGluaXRpYXRpb24gb2YgYSB0cmFuc21pdCB3YXJtdXAgc2VxdWVuY2UuCisgKgorICovCit2b2lkIFhDVlJfRm9yY2VUeFd1KHZvaWQpOworCisvKiEKKyAqIEBicmllZiAgRm9yY2UgdHJhbnNtaXR0ZXIgd2FybWRvd24uCisgKgorICogVGhpcyBmdW5jdGlvbiBmb3JjZXMgdGhlIGluaXRpYXRpb24gb2YgYSB0cmFuc21pdCB3YXJtZG93biBzZXF1ZW5jZS4KKyAqCisgKi8KK3ZvaWQgWENWUl9Gb3JjZVR4V2Qodm9pZCk7CisKKy8qIQorICogQGJyaWVmICBTdGFydHMgdHJhbnNtaXQgd2l0aCBhIFRYIHBhdHRlcm4gcmVnaXN0ZXIgZGF0YSBzZXF1ZW5jZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyB0cmFuc21pdHRpbmcgdXNpbmcgdGhlIERGVCBwYXR0ZXJuIHJlZ2lzdGVyIG1vZGUuCisgKgorICogQHBhcmFtIGNoYW5uZWxfbnVtIC0gIHRoZSBwcm90b2NvbCBzcGVjaWZpYyBjaGFubmVsIHRvIHRyYW5zbWl0IG9uLiBWYWxpZCB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gdGhlIENIQU5ORUxfTlVNIHJlZ2lzdGVyIGRvY3VtZW50YXRpb24uCisgKiBAcGFyYW0gcmFkaW9fbW9kZSBUaGUgcmFkaW8gbW9kZSBmb3Igd2hpY2ggdGhlIFhDVlIgc2hvdWxkIGJlIGNvbmZpZ3VyZWQuCisgKiBAcGFyYW0gZGF0YV9yYXRlIFRoZSBkYXRhIHJhdGUgZm9yIHdoaWNoIHRoZSBYQ1ZSIHNob3VsZCBiZSBjb25maWd1cmVkLiBPbmx5IG1hdHRlcnMgd2hlbiBHRlNLL01TSyByYWRpb19tb2RlIGlzIHNlbGVjdGVkLgorICogQHBhcmFtIHR4X3BhdHRlcm4gLSAgdGhlIGRhdGEgcGF0dGVybiB0byB0cmFuc21pdCBvbi4KKyAqIEByZXR1cm4gVGhlIHN0YXR1cyBvZiB0aGUgcGF0dGVybiByZWcgdHJhbnNtaXQuCisgKiBAbm90ZSBUaGUgWENWUl9EZnRUeE9mZigpIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHRvIHR1cm4gb2ZmIFRYIGFuZCByZXZlcnQgYWxsIHNldHRpbmdzLiBUaGlzIHJvdXRpbmUgY2FsbHMgWENWUl9DaGFuZ2VNb2RlKCkgd2l0aCB0aGUgZGVzaXJlZCByYWRpbyBtb2RlCisgKiAgIGFuZCBkYXRhIHJhdGUuIAorICovIAoreGN2clN0YXR1c190IFhDVlJfRGZ0VHhQYXR0ZXJuUmVnKHVpbnQxNl90IGNoYW5uZWxfbnVtLCByYWRpb19tb2RlX3QgcmFkaW9fbW9kZSwgZGF0YV9yYXRlX3QgZGF0YV9yYXRlLCB1aW50MzJfdCB0eF9wYXR0ZXJuKTsKKworLyohCisgKiBAYnJpZWYgIFN0YXJ0cyB0cmFuc21pdCB3aXRoIGEgVFggTEZTUiByZWdpc3RlciBkYXRhIHNlcXVlbmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc3RhcnRzIHRyYW5zbWl0dGluZyB1c2luZyB0aGUgREZUIExGU1IgcmVnaXN0ZXIgbW9kZS4KKyAqCisgKiBAcGFyYW0gY2hhbm5lbF9udW0gLSAgdGhlIHByb3RvY29sIHNwZWNpZmljIGNoYW5uZWwgdG8gdHJhbnNtaXQgb24uIFZhbGlkIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiB0aGUgQ0hBTk5FTF9OVU0gcmVnaXN0ZXIgZG9jdW1lbnRhdGlvbi4KKyAqIEBwYXJhbSByYWRpb19tb2RlIFRoZSByYWRpbyBtb2RlIGZvciB3aGljaCB0aGUgWENWUiBzaG91bGQgYmUgY29uZmlndXJlZC4KKyAqIEBwYXJhbSBkYXRhX3JhdGUgVGhlIGRhdGEgcmF0ZSBmb3Igd2hpY2ggdGhlIFhDVlIgc2hvdWxkIGJlIGNvbmZpZ3VyZWQuIE9ubHkgbWF0dGVycyB3aGVuIEdGU0svTVNLIHJhZGlvX21vZGUgaXMgc2VsZWN0ZWQuCisgKiBAcGFyYW0gbGZzcl9sZW5ndGggLSAgdGhlIGxlbmd0aCBvZiB0aGUgTEZTUiBzZXF1ZW5jZSB0byB1c2UuCisgKiBAcmV0dXJuIFRoZSBzdGF0dXMgb2YgdGhlIExGU1IgcmVnIHRyYW5zbWl0LgorICogQG5vdGUgVGhlIFhDVlJfRGZ0VHhPZmYoKSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byB0dXJuIG9mZiBUWCBhbmQgcmV2ZXJ0IGFsbCBzZXR0aW5ncy4gVGhpcyByb3V0aW5lIGNhbGxzIFhDVlJfQ2hhbmdlTW9kZSgpIHdpdGggdGhlIGRlc2lyZWQgcmFkaW8gbW9kZQorICogICBhbmQgZGF0YSByYXRlLiAKKyAqLyAKK3hjdnJTdGF0dXNfdCBYQ1ZSX0RmdFR4TGZzclJlZyh1aW50MTZfdCBjaGFubmVsX251bSwgcmFkaW9fbW9kZV90IHJhZGlvX21vZGUsIGRhdGFfcmF0ZV90IGRhdGFfcmF0ZSwgdWludDhfdCBsZnNyX2xlbmd0aCk7CisKKy8qIQorICogQGJyaWVmIENvbnRyb2xzIGNsZWFyaW5nIGFsbCBUWCBERlQgc2V0dGluZ3MuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXZlcnRzIGFsbCBUWCBERlQgc2V0dGluZ3MgZnJvbSB0aGUgdGVzdCBtb2RlcyB0byBub3JtYWwgb3BlcmF0aW5nIG1vZGUuCisgKgorICovIAordm9pZCBYQ1ZSX0RmdFR4T2ZmKHZvaWQpOworCisvKiEKKyAqIEBicmllZiAgQ29udHJvbHMgc2V0dGluZyB0aGUgUEEgcG93ZXIgbGV2ZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHNldHRpbmcgdGhlIFBBIHBvd2VyIGxldmVsIHRvIGEgc3BlY2lmaWMgc2V0dGluZywgb3ZlcnJpZGluZyBhbnkgbGluayBsYXllciBzZXR0aW5ncy4KKyAqCisgKiBAcGFyYW0gcGFfcG93ZXIgLSAgdGhlIHBvd2VyIGxldmVsIHRvIHNldC4gVmFsaWQgdmFsdWVzIGFyZSAwLCAxLCBhbmQgZXZlbiB2YWx1ZXMgZnJvbSAyIHRvIDB4M0UsIGluY2x1c2l2ZS4KKyAqIEByZXR1cm4gVGhlIHN0YXR1cyBvZiB0aGUgUEEgcG93ZXIgb3Zlci1yaWRlLgorICovIAoreGN2clN0YXR1c190IFhDVlJfRm9yY2VQQVBvd2VyKHVpbnQ4X3QgcGFfcG93ZXIpOworCisvKiEKKyAqIEBicmllZiBTdGFydHMgQ1cgVFguCisgKgorICogVGhpcyBmdW5jdGlvbiBzdGFydHMgdHJhbnNtaXR0aW5nIENXIChubyBtb2R1bGF0aW9uKS4KKyAqCisgKiBAcGFyYW0gcmZfY2hhbm5lbF9mcmVxIC0gIHRoZSBSRiBjaGFubmVsIHRvIHRyYW5zbWl0IG9uLiBWYWxpZCB2YWx1ZXMgYXJlIGludGVnZXIgdmFsdWVzIGZyb20gMjM2MCB0byAyNDg3TUh6LCBpbmNsdXNpdmUuCisgKiBAcGFyYW0gcHJvdG9jb2wgLSAgdGhlIHByb3RvY29sIHNldHRpbmcgdG8gdXNlLCB2YWxpZCBzZXR0aW5ncyBhcmUgNiAoR0ZTSykgYW5kIDcgKEZTSykuCisgKiBAcmV0dXJuIFRoZSBzdGF0dXMgb2YgdGhlIENXIHRyYW5zbWl0LgorICovIAoreGN2clN0YXR1c190IFhDVlJfRGZ0VHhDVyh1aW50MTZfdCByZl9jaGFubmVsX2ZyZXEsIHVpbnQ4X3QgcHJvdG9jb2wpOworCit4Y3ZyU3RhdHVzX3QgWENWUl9Db2V4aXN0ZW5jZUluaXQodm9pZCk7Cit4Y3ZyU3RhdHVzX3QgWENWUl9Db2V4aXN0ZW5jZVNldFByaW9yaXR5KFhDVlJfQ09FWF9QUklPUklUWV9UIHJ4UHJpb3JpdHksIFhDVlJfQ09FWF9QUklPUklUWV9UIHR4UHJpb3JpdHkpOworeGN2clN0YXR1c190IFhDVlJfQ29leGlzdGVuY2VTYXZlUmVzdG9yZVRpbWluZ3ModWludDhfdCBzYXZlVGltaW5ncyk7CisKKy8qIEB9ICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRlNMX1hDVlJfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9mc2xfeGN2cl90cmltLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2ZzbF94Y3ZyX3RyaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWRjYjBhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9mc2xfeGN2cl90cmltLmMKQEAgLTAsMCArMSw5OTUgQEAKKy8qCisqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKyNpbmNsdWRlICJmc2xfeGN2cl90cmltLmgiCisjaW5jbHVkZSAiZGJnX3JhbV9jYXB0dXJlLmgiCisjaW5jbHVkZSAibWF0aC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBEZWZpbml0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFByb3RvdHlwZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgRENfTWVhc3VyZV9zaG9ydChJUV90IGNoYW4sIERBQ19TV0VFUF9TVEVQMl90IGRjb2NfaW5pdF92YWwpOworZmxvYXQgY2FsY19kY29jX2RhY19zdGVwKEdBSU5fQ0FMQ19UQkxfRU5UUlkyX1QgKiBtZWFzX3B0ciwgR0FJTl9DQUxDX1RCTF9FTlRSWTJfVCAqIGJhc2VsaW5lX21lYXNfcHRyICk7CitleHRlcm4gZmxvYXQgcm91bmRmIChmbG9hdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFZhcmlhYmxlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY29uc3QgaW50OF90IFRzZXR0bGVDYWwgPSAxMDsKK3N0YXRpYyBHQUlOX0NBTENfVEJMX0VOVFJZMl9UIG1lYXN1cmVtZW50X3RibDJbTlVNX0lfUV9DSEFOXVtOVU1fU1dFRVBfU1RFUF9FTlRSSUVTMl07IAorc3RhdGljIGNvbnN0IGludDhfdCBzd2VlcF9zdGVwX3ZhbHVlczJbTlVNX1NXRUVQX1NURVBfRU5UUklFUzJdID0gCit7IAorICAgIDAsIC8qIEJhc2VsaW5lIGVudHJ5IGlzIGZpcnN0IGFuZCBub3QgdXNlZCBpbiB0aGlzIHRhYmxlICovCisgICAgLTE2LAorICAgICsxNiwKKyAgICAtNCwKKyAgICAtNCwKKyAgICAtNCwKKyAgICAtNCwKKyAgICAtNCwKKyAgICAtNCwKKyAgICAtNCwKKyAgICAtNCwKKyAgICAtNCwKKyAgICAtNCwKKyAgICAtNCwKKyAgICArNCwKKyAgICArNCwKKyAgICArNCwKKyAgICArNCwKKyAgICArNCwKKyAgICArNCwKKyAgICArNCwKKyAgICArNCwKKyAgICArNCwKKyAgICArNCwKKyAgICArNAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY3JvcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSVNJR04oeCkgISgodWludDE2X3QpeCAmIDB4ODAwMCkKKyNkZWZpbmUgQUJTKHgpICgoeCkgPiAwID8gKHgpIDogLSh4KSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSB0cmltIG9mIHRoZSBCQkEgRENPQyBEQUMgb24gdGhlIERVVAorICoKKyAqIFxyZXR1cm4gc3RhdHVzIC0gMSBpZiBwYXNzZWQsIDAgaWYgZmFpbGVkLgorICoKKyAqIFxpbmdyb3VwIFB1YmxpY0FQSXMKKyAqCisgKiBcZGV0YWlscworICogICBSZXF1aXJlcyB0aGUgUlggdG8gYmUgd2FybWVkIHVwIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50OF90IHJ4X2JiYV9kY29jX2RhY190cmltX3Nob3J0SVEodm9pZCkKK3sKKyAgICB1aW50OF90IGk7CisgICAgZmxvYXQgdGVtcF9taSA9IDA7CisgICAgZmxvYXQgdGVtcF9tcSA9IDA7CisgICAgZmxvYXQgdGVtcF9waSA9IDA7CisgICAgZmxvYXQgdGVtcF9wcSA9IDA7CisgICAgZmxvYXQgdGVtcF9zdGVwID0gMDsKKyAgICB1aW50OF90IGJiZl9kYWNpbml0X2ksIGJiZl9kYWNpbml0X3E7CisKKyAgICB1aW50MzJfdCBkY29jX2luaXRfcmVnX3ZhbHVlX2RjZ2FpbiA9IDB4ODA4MDIwMjA7IC8qIFVzZWQgaW4gMm5kICYgM3JkIEdlbmVyYXRpb24gRENPQyBUcmltcyBvbmx5LiAqLworICAgIHVpbnQzMl90IGJiZl9kY29jX3N0ZXA7CisgICAgdWludDMyX3QgYmJmX2Rjb2Nfc3RlcF9yY3A7CisgICAgVFpBZGNvY3N0ZXBfdCB0emFfZGNvY19zdGVwWzExXTsKKyAgICB1aW50OF90IHN0YXR1cyA9IDA7CisgICAgCisgICAgLyogU2F2ZSByZWdpc3RlciB2YWx1ZXMuICovICAKKyAgICB1aW50MzJfdCBkY29jX2N0cmxfMF9zdGFjazsKKyAgICB1aW50MzJfdCBkY29jX2N0cmxfMV9zdGFjazsKKyAgICB1aW50MzJfdCBhZ2NfY3RybF8xX3N0YWNrOworICAgIHVpbnQzMl90IHJ4X2RpZ19jdHJsX3N0YWNrOworICAgIHVpbnQzMl90IGRjb2NfY2FsX2dhaW5fc3RhdGU7CisKKyAgICBYY3ZyQ2FsRGVsYXkoMTAwMCk7CisgICAgZGNvY19jdHJsXzBfc3RhY2sgPSBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzA7IC8qIFNhdmUgc3RhdGUgb2YgRENPQ19DVFJMXzAgZm9yIGxhdGVyIHJlc3RvcmUuICovCisgICAgZGNvY19jdHJsXzFfc3RhY2sgPSBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzE7IC8qIFNhdmUgc3RhdGUgb2YgRENPQ19DVFJMXzEgZm9yIGxhdGVyIHJlc3RvcmUuICovCisgICAgcnhfZGlnX2N0cmxfc3RhY2sgPSAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMOyAvKiBTYXZlIHN0YXRlIG9mIFJYX0RJR19DVFJMIGZvciBsYXRlciByZXN0b3JlLiAqLworICAgIGFnY19jdHJsXzFfc3RhY2sgPSBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMTsgLyogU2F2ZSBzdGF0ZSBvZiBSWF9ESUdfQ1RSTCBmb3IgbGF0ZXIgcmVzdG9yZS4gKi8KKyAgICBkY29jX2NhbF9nYWluX3N0YXRlID0gWENWUl9SWF9ESUctPkRDT0NfQ0FMX0dBSU47IC8qIFNhdmUgc3RhdGUgb2YgRENPQ19DQUxfR0FJTiBmb3IgbGF0ZXIgcmVzdG9yZS4gKi8KKworICAgIC8qIEVuc3VyZSBBR0MsIERDT0MgYW5kIFJYX0RJR19DVFJMIGlzIGluIGNvcnJlY3QgbW9kZS4gKi8KKyAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgPSAoWENWUl9SWF9ESUctPlJYX0RJR19DVFJMICYgflhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FHQ19FTl9NQVNLKSB8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FHQ19FTigwKTsgLyogVHVybiBPRkYgQUdDICovCisKKyAgICBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMSA9IChYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMSAmIH5YQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfTE5BX0dBSU5fRU5fTUFTSykgfCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfTE5BX0dBSU5fRU4oMSkgOyAvKiBTZXQgTE5BIE1hbnVhbCBHYWluICovCisgICAgWENWUl9SWF9ESUctPkFHQ19DVFJMXzEgPSAoWENWUl9SWF9ESUctPkFHQ19DVFJMXzEgJiB+WENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0JCQV9HQUlOX0VOX01BU0spIHwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0JCQV9HQUlOX0VOKDEpIDsgLyogU2V0IEJCQSBNYW51YWwgR2FpbiAqLworCisgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMID0gKFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTCAmIH5YQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ09DX0NBTF9FTl9NQVNLKSB8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfQ0FMX0VOKDApOyAvKiBFbmFibGUgSFcgREMgQ2FsaWJyYXRpb24gLS0gRGlzYWJsZSBmb3IgU1ctRENPQyAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMCA9IChYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzAgJiB+WENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19NQU5fTUFTSykgfCBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX01BTigxKTsgLyogRW5hYmxlICBNYW51YWwgRENPQyAqLworICAgIC8qIERDT0NfQ1RSTF8wIEAgNDAwNV9DMDJDIC0tIERlZmluZSBkZWZhdWx0IERDT0MgREFDIHNldHRpbmdzIGluIG1hbnVhbCBtb2RlLiAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUID0gWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX0koMHgyMCkgfCBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUSgweDIwKSB8ICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfSSgweDgwKSB8IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9RKDB4ODApOworICAgIC8qIFNldCBEQ09DIFRyYWNraW5nIFN0YXRlLiAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMCA9IChYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzAgJiB+WENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSRUNUX1NSQ19NQVNLKSB8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9TUkMoMCk7IC8qIERpc2FibGVzIERDT0MgVHJhY2tpbmcgd2hlbiBzZXQgdG8gMCAqLworICAgIC8qIEFwcGx5IE1hbnVhbCBHYWluLiAqLworICAgIFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8xID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0xOQV9HQUlOX0VOKDEpIHwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0JCQV9HQUlOX0VOKDEpIHwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfVVNFUl9HQUlOKDB4MDIpIHwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9CQkFfVVNFUl9HQUlOKDB4MDApIDsKKyAgICBYY3ZyQ2FsRGVsYXkoVHNldHRsZUNhbCk7CisKKyAgICBkY29jX2luaXRfcmVnX3ZhbHVlX2RjZ2FpbiA9IFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUOyAvKiBDYXB0dXJlIERDIG51bGwgc2V0dGluZy4gKi8KKworICAgIGJiZl9kYWNpbml0X2kgPSAoZGNvY19pbml0X3JlZ192YWx1ZV9kY2dhaW4gJiAweDAwMDAwMEZGVSk7CisgICAgYmJmX2RhY2luaXRfcSA9IChkY29jX2luaXRfcmVnX3ZhbHVlX2RjZ2FpbiAmIDB4MDAwMEZGMDBVKSA+PiA4OworCisgICAgRENfTWVhc3VyZV9zaG9ydChJX0NIQU5ORUwsIE5PTUlOQUwyKTsKKyAgICBEQ19NZWFzdXJlX3Nob3J0KFFfQ0hBTk5FTCwgTk9NSU5BTDIpOworCisgICAgLyogU1dFRVAgUSBDSEFOTkVMICovCisgICAgLyogQkJGIE5FRyBTVEVQICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfREFDX0lOSVQgPSAoWENWUl9SWF9ESUctPkRDT0NfREFDX0lOSVQgJiB+WENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX1FfTUFTSykgfCBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUShiYmZfZGFjaW5pdF9xIC0gMTYpOworICAgIFhjdnJDYWxEZWxheShUc2V0dGxlQ2FsKTsKKyAgICBEQ19NZWFzdXJlX3Nob3J0KFFfQ0hBTk5FTCwgQkJGX05FRyk7CisKKyAgICAvKiBCQkYgUE9TIFNURVAgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCA9IChYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCAmIH5YQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUV9NQVNLKSB8IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RKGJiZl9kYWNpbml0X3EgKyAxNik7CisgICAgWGN2ckNhbERlbGF5KFRzZXR0bGVDYWwpOworICAgIERDX01lYXN1cmVfc2hvcnQoUV9DSEFOTkVMLCBCQkZfUE9TKTsKKworICAgIFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUID0gZGNvY19pbml0X3JlZ192YWx1ZV9kY2dhaW47IC8qIFJldHVybiBEQUMgc2V0dGluZyB0byBpbml0aWFsLiAqLworICAgIFhjdnJDYWxEZWxheShUc2V0dGxlQ2FsKTsgIAorCisgICAgLyogU1dFRVAgSSBDSEFOTkVMICovCisgICAgLyogQkJGIE5FRyBTVEVQICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfREFDX0lOSVQgPSAoWENWUl9SWF9ESUctPkRDT0NfREFDX0lOSVQgJiB+WENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX0lfTUFTSykgfCBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfSShiYmZfZGFjaW5pdF9pIC0gMTYpOyAKKyAgICBYY3ZyQ2FsRGVsYXkoVHNldHRsZUNhbCk7CisgICAgRENfTWVhc3VyZV9zaG9ydChJX0NIQU5ORUwsIEJCRl9ORUcpOworICAgIC8qIEJCRiBQT1MgU1RFUCAgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCA9IChYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCAmIH5YQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfSV9NQVNLKSB8IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9JKGJiZl9kYWNpbml0X2kgKyAxNik7IAorICAgIFhjdnJDYWxEZWxheShUc2V0dGxlQ2FsKTsKKyAgICBEQ19NZWFzdXJlX3Nob3J0KElfQ0hBTk5FTCwgQkJGX1BPUyk7CisKKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCA9IGRjb2NfaW5pdF9yZWdfdmFsdWVfZGNnYWluOyAvKiBSZXR1cm4gREFDcyB0byBpbml0aWFsLiAqLworICAgIFhjdnJDYWxEZWxheShUc2V0dGxlQ2FsKTsKKworICAgIC8qIENhbGN1bGF0ZSBCQkYgRENPQyBTVEVQUywgUkVDSVBST0NBTFMgKi8KKyAgICB0ZW1wX21pID0gY2FsY19kY29jX2RhY19zdGVwKCZtZWFzdXJlbWVudF90YmwyW0lfQ0hBTk5FTF1bQkJGX05FR10sICZtZWFzdXJlbWVudF90YmwyW0lfQ0hBTk5FTF1bTk9NSU5BTDJdKTsKKyAgICB0ZW1wX21xID0gY2FsY19kY29jX2RhY19zdGVwKCZtZWFzdXJlbWVudF90YmwyW1FfQ0hBTk5FTF1bQkJGX05FR10sICZtZWFzdXJlbWVudF90YmwyW1FfQ0hBTk5FTF1bTk9NSU5BTDJdKTsKKyAgICB0ZW1wX3BpID0gY2FsY19kY29jX2RhY19zdGVwKCZtZWFzdXJlbWVudF90YmwyW0lfQ0hBTk5FTF1bQkJGX1BPU10sICZtZWFzdXJlbWVudF90YmwyW0lfQ0hBTk5FTF1bTk9NSU5BTDJdKTsKKyAgICB0ZW1wX3BxID0gY2FsY19kY29jX2RhY19zdGVwKCZtZWFzdXJlbWVudF90YmwyW1FfQ0hBTk5FTF1bQkJGX1BPU10sICZtZWFzdXJlbWVudF90YmwyW1FfQ0hBTk5FTF1bTk9NSU5BTDJdKTsKKworICAgIHRlbXBfc3RlcCA9ICh0ZW1wX21pK3RlbXBfcGkgKyB0ZW1wX21xK3RlbXBfcHEpIC8gNDsKKworICAgIGJiZl9kY29jX3N0ZXAgPSAodWludDMyX3Qpcm91bmRmKHRlbXBfc3RlcCAqIDhVKTsKKworICAgIGlmICgoYmJmX2Rjb2Nfc3RlcCA+IDI2NSkgJiAoYmJmX2Rjb2Nfc3RlcCA8IDMwNSkpIAorICAgIHsKKyAgICAgICAgYmJmX2Rjb2Nfc3RlcF9yY3AgPSAodWludDMyX3Qpcm91bmRmKChmbG9hdCkweDgwMDBVIC8gdGVtcF9zdGVwKTsKKworICAgICAgICAvKiBDYWxjdWxhdGUgVFpBIERDT0MgU1RFUFMgJiBSRUNJUFJPQ0FMUyBhbmQgSVFfRENfR0FJTl9NSVNNQVRDSC4gKi8KKyAgICAgICAgZm9yIChpID0gVFpBX1NURVBfTjA7IGkgPD0gVFpBX1NURVBfTjEwOyBpKyspIC8qIFJlbHlpbmcgb24gZW51bWVyYXRpb24gb3JkZXJpbmcuICovCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENhbGN1bGF0ZSBUWkEgRENPQyBTVEVQU0laRSAmIGl0cyBSRUNJUFJPQ0FMLiAqLworICAgICAgICAgICAgc3dpdGNoKGkpeworICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9OMDogCisgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gKGJiZl9kY29jX3N0ZXAgPj4gM1UpIC8gMy42RjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjE6IAorICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wMV9pbml0ID4+IDE2KS8oeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDBfaW5pdCA+PiAxNik7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9OMjogCisgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzAyX2luaXQgPj4gMTYpLyh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wMV9pbml0ID4+IDE2KTsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX04zOiAKKyAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDNfaW5pdCA+PiAxNikvKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzAyX2luaXQgPj4gMTYpOyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjQ6IAorICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wNF9pbml0ID4+IDE2KS8oeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDNfaW5pdCA+PiAxNik7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9ONTogCisgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA1X2luaXQgPj4gMTYpLyh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wNF9pbml0ID4+IDE2KTsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX042OiAKKyAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDZfaW5pdCA+PiAxNikvKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA1X2luaXQgPj4gMTYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9ONzogCisgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA3X2luaXQgPj4gMTYpLyh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wNl9pbml0ID4+IDE2KTsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX044OiAKKyAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDhfaW5pdCA+PiAxNikvKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA3X2luaXQgPj4gMTYpOyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjk6IAorICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wOV9pbml0ID4+IDE2KS8oeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDhfaW5pdCA+PiAxNik7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9OMTA6IAorICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8xMF9pbml0ID4+IDE2KS8oeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDlfaW5pdCA+PiAxNik7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHphX2Rjb2Nfc3RlcFtpLVRaQV9TVEVQX04wXS5kY29jX3N0ZXAgPSAodWludDMyX3Qpcm91bmRmKHRlbXBfc3RlcCAqIDgpOworICAgICAgICAgICAgdHphX2Rjb2Nfc3RlcFtpLVRaQV9TVEVQX04wXS5kY29jX3N0ZXBfcmNwID0gKHVpbnQzMl90KXJvdW5kZigoZmxvYXQpMHg4MDAwIC8gdGVtcF9zdGVwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE1ha2UgdGhlIHRyaW1zIGFjdGl2ZS4gKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQkJBX1NURVAgPSBYQ1ZSX1JYX0RJR19EQ09DX0JCQV9TVEVQX0JCQV9EQ09DX1NURVAoYmJmX2Rjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX0JCQV9TVEVQX0JCQV9EQ09DX1NURVBfUkVDSVAoYmJmX2Rjb2Nfc3RlcF9yY3ApIDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfMCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMF9EQ09DX1RaQV9TVEVQX0dBSU5fMCh0emFfZGNvY19zdGVwWzBdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzBfRENPQ19UWkFfU1RFUF9SQ1BfMCh0emFfZGNvY19zdGVwWzBdLmRjb2Nfc3RlcF9yY3ApIDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfMSA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMV9EQ09DX1RaQV9TVEVQX0dBSU5fMSh0emFfZGNvY19zdGVwWzFdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzFfRENPQ19UWkFfU1RFUF9SQ1BfMSh0emFfZGNvY19zdGVwWzFdLmRjb2Nfc3RlcF9yY3ApIDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfMiA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX0dBSU5fMih0emFfZGNvY19zdGVwWzJdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzJfRENPQ19UWkFfU1RFUF9SQ1BfMih0emFfZGNvY19zdGVwWzJdLmRjb2Nfc3RlcF9yY3ApIDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfMyA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfM19EQ09DX1RaQV9TVEVQX0dBSU5fMyh0emFfZGNvY19zdGVwWzNdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzNfRENPQ19UWkFfU1RFUF9SQ1BfMyh0emFfZGNvY19zdGVwWzNdLmRjb2Nfc3RlcF9yY3ApIDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfNCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNF9EQ09DX1RaQV9TVEVQX0dBSU5fNCh0emFfZGNvY19zdGVwWzRdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzRfRENPQ19UWkFfU1RFUF9SQ1BfNCh0emFfZGNvY19zdGVwWzRdLmRjb2Nfc3RlcF9yY3ApIDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfNSA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX0dBSU5fNSh0emFfZGNvY19zdGVwWzVdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzVfRENPQ19UWkFfU1RFUF9SQ1BfNSh0emFfZGNvY19zdGVwWzVdLmRjb2Nfc3RlcF9yY3ApIDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfNiA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNl9EQ09DX1RaQV9TVEVQX0dBSU5fNih0emFfZGNvY19zdGVwWzZdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzZfRENPQ19UWkFfU1RFUF9SQ1BfNih0emFfZGNvY19zdGVwWzZdLmRjb2Nfc3RlcF9yY3ApIDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfNyA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfN19EQ09DX1RaQV9TVEVQX0dBSU5fNyh0emFfZGNvY19zdGVwWzddLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9SQ1BfNyh0emFfZGNvY19zdGVwWzddLmRjb2Nfc3RlcF9yY3ApIDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfOCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX0dBSU5fOCh0emFfZGNvY19zdGVwWzhdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzhfRENPQ19UWkFfU1RFUF9SQ1BfOCh0emFfZGNvY19zdGVwWzhdLmRjb2Nfc3RlcF9yY3ApIDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfOSA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX0dBSU5fOSh0emFfZGNvY19zdGVwWzldLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzlfRENPQ19UWkFfU1RFUF9SQ1BfOSh0emFfZGNvY19zdGVwWzldLmRjb2Nfc3RlcF9yY3ApIDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfMTAgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzEwX0RDT0NfVFpBX1NURVBfR0FJTl8xMCh0emFfZGNvY19zdGVwWzEwXS5kY29jX3N0ZXApIHwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX1JDUF8xMCh0emFfZGNvY19zdGVwWzEwXS5kY29jX3N0ZXBfcmNwKSA7CisKKyAgICAgICAgc3RhdHVzID0gMTsgLyogU3VjY2VzcyAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0dXMgPSAwOyAvKiBGYWlsdXJlICovCisgICAgfQorCisgICAgLyogUmVzdG9yZSBSZWdpc3RlcnMuICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8wID0gZGNvY19jdHJsXzBfc3RhY2s7IC8qIFJlc3RvcmUgRENPQ19DVFJMXzAgc3RhdGUgdG8gcHJpb3Igc2V0dGluZ3MuICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8xID0gZGNvY19jdHJsXzFfc3RhY2s7IC8qIFJlc3RvcmUgRENPQ19DVFJMXzEgc3RhdGUgdG8gcHJpb3Igc2V0dGluZ3MuICovCisgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMID0gcnhfZGlnX2N0cmxfc3RhY2s7IC8qIFJlc3RvcmUgUlhfRElHX0NUUkwgc3RhdGUgdG8gcHJpb3Igc2V0dGluZ3MuICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfQ0FMX0dBSU4gPSBkY29jX2NhbF9nYWluX3N0YXRlOyAvKiBSZXN0b3JlIERDT0NfQ0FMX0dBSU4gc3RhdGUgdG8gcHJpb3Igc2V0dGluZy4gKi8KKyAgICBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMSA9IGFnY19jdHJsXzFfc3RhY2s7IC8qIFNhdmUgc3RhdGUgb2YgUlhfRElHX0NUUkwgZm9yIGxhdGVyIHJlc3RvcmUuICovCisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgb25lIHBvaW50IG9mIHRoZSBEQyBHQUlOIGNhbGlicmF0aW9uIHByb2Nlc3Mgb24gdGhlIERVVAorICoKKyAqIFxwYXJhbVtpbl0gY2hhbiAtIHdoZXRoZXIgdGhlIEkgb3IgUSBjaGFubmVsIGlzIGJlaW5nIHRlc3RlZC4KKyAqIFxwYXJhbVtpbl0gc3RhZ2UgLSB3aGV0aGVyIHRoZSBCQkYgb3IgVFpBIGdhaW4gc3RhZ2UgaXMgYmVpbmcgdGVzdGVkLgorICogXHBhcmFtW2luXSBkY29jX2luaXRfdmFsIC0gdGhlIHZhbHVlIGJlaW5nIHNldCBpbiB0aGUgKioqRENPQ19JTklUXyogcmVnaXN0ZXIgYnkgdGhlIHBhcmVudC4KKyAqIFxwYXJhbVtpbl0gZXh0X21lYXNtdCAtIHRoZSBleHRlcm5hbCBtZWFzdXJlbWVudCAoaW4gbWlsbGlWb2x0cykgY2FwdHVyZWQgYnkgdGhlIHBhcmVudCBhZnRlciB0aGUgKioqRENPQ19JTklUXyogcmVnaXN0ZXIgd2FzIHNldHVwLgorICoKKyAqIFxpbmdyb3VwIFB1YmxpY0FQSXMKKyAqCisgKiBcZGV0YWlscworICogICBSZWxpZXMgb24gYSBzdGF0aWMgYXJyYXkgdG8gc3RvcmUgZWFjaCBwb2ludCBvZiBkYXRhIGZvciBsYXRlciBwcm9jZXNzaW5nIGluIDo6RENfR2FpbkNhbGMoKS4KKyAqICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIERDX01lYXN1cmVfc2hvcnQoSVFfdCBjaGFuLCBEQUNfU1dFRVBfU1RFUDJfdCBkY29jX2luaXRfdmFsKQoreworICAgIGludDE2X3QgZGNfbWVhc19pID0gMDsKKyAgICBpbnQxNl90IGRjX21lYXNfcSA9IDA7CisgICAgaW50MTZfdCBzdW1fZGNfbWVhc19pID0gMDsKKyAgICBpbnQxNl90IHN1bV9kY19tZWFzX3EgPSAwOworCisgICAgeworICAgICAgICBpbnQ4X3QgaTsKKyAgICAgICAgY29uc3QgaW50OF90IGl0ZXJhdGlvbnMgPSAxOworICAgICAgICBzdW1fZGNfbWVhc19pID0gMDsKKyAgICAgICAgc3VtX2RjX21lYXNfcSA9IDA7CisgICAgICAgIAorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICByeF9kY19zYW1wbGVfYXZlcmFnZSgmZGNfbWVhc19pLCAmZGNfbWVhc19xKTsKKyAgICAgICAgICAgIHN1bV9kY19tZWFzX2kgPSBzdW1fZGNfbWVhc19pICsgZGNfbWVhc19pOworICAgICAgICAgICAgc3VtX2RjX21lYXNfcSA9IHN1bV9kY19tZWFzX3EgKyBkY19tZWFzX3E7CisgICAgICAgIH0KKyAgICAgICAgc3VtX2RjX21lYXNfaSA9IHN1bV9kY19tZWFzX2kgLyBpdGVyYXRpb25zOworICAgICAgICBzdW1fZGNfbWVhc19xID0gc3VtX2RjX21lYXNfcSAvIGl0ZXJhdGlvbnM7CisgICAgfQorCisgICAgbWVhc3VyZW1lbnRfdGJsMltjaGFuXVtkY29jX2luaXRfdmFsXS5zdGVwX3ZhbHVlID0gc3dlZXBfc3RlcF92YWx1ZXMyW2Rjb2NfaW5pdF92YWxdOworCisgICAgaWYgKGNoYW4gPT0gSV9DSEFOTkVMKQorICAgIHsKKyAgICAgICAgbWVhc3VyZW1lbnRfdGJsMltjaGFuXVtkY29jX2luaXRfdmFsXS5pbnRlcm5hbF9tZWFzdXJlbWVudCA9IGRjX21lYXNfaTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWVhc3VyZW1lbnRfdGJsMltjaGFuXVtkY29jX2luaXRfdmFsXS5pbnRlcm5hbF9tZWFzdXJlbWVudCA9IGRjX21lYXNfcTsKKyAgICB9Cit9ICAKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgb25lIHBvaW50IG9mIERDIERBQyBzdGVwIGJhc2VkIG9uIGRpZ2l0YWwgc2FtcGxlcyBvZiBJIG9yIFEuCisgKgorICogXHBhcmFtW2luXSBtZWFzX3B0ciAtIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBtZWFzdXJlZCBkYXRhIGZyb20gaW50ZXJuYWwgbWVhc3VyZW1lbnQuCisgKiBccGFyYW1baW5dIGJhc2VsaW5lX21lYXNfcHRyIC0gcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGJhc2VsaW5lIG1lYXN1cmVkIGRhdGEgZnJvbSBpbnRlcm5hbCBtZWFzdXJlbWVudC4KKyAqCisgKiBccmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsY3VsYXRpb24sIHRoZSBtZWFzdXJlbWVudCBEQ09DIERBQyBzdGVwIHZhbHVlIGZvciB0aGlzIG1lYXN1cmVtZW50IHBvaW50LgorICogICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2Zsb2F0IGNhbGNfZGNvY19kYWNfc3RlcChHQUlOX0NBTENfVEJMX0VOVFJZMl9UICogbWVhc19wdHIsIEdBSU5fQ0FMQ19UQkxfRU5UUlkyX1QgKiBiYXNlbGluZV9tZWFzX3B0ciApCit7CisgICAgc3RhdGljIGludDE2X3Qgbm9ybV9kY19jb2RlOworICAgIHN0YXRpYyBmbG9hdCBkY19zdGVwOworCisgICAgLyogTm9ybWFsaXplIGludGVybmFsIG1lYXN1cmVtZW50ICovCisgICAgbm9ybV9kY19jb2RlID0gbWVhc19wdHItPmludGVybmFsX21lYXN1cmVtZW50IC0gYmFzZWxpbmVfbWVhc19wdHItPmludGVybmFsX21lYXN1cmVtZW50OworICAgIGRjX3N0ZXAgPSAoZmxvYXQpKG5vcm1fZGNfY29kZSkgLyAoZmxvYXQpKG1lYXNfcHRyLT5zdGVwX3ZhbHVlKTsKKyAgICBkY19zdGVwID0gKGRjX3N0ZXAgPCAwKT8gLWRjX3N0ZXA6IGRjX3N0ZXA7CisKKyAgICByZXR1cm4gZGNfc3RlcDsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogXGJyaWVmICBUZW1wb3JhcnkgZGVsYXkgZnVuY3Rpb24gCisgKgorICogXHBhcmFtW2luXSBub25lLgorICoKKyAqIFxyZXR1cm4gbm9uZS4KKyAqCisgKiBcZGV0YWlscworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgWGN2ckNhbERlbGF5KHVpbnQzMl90IHRpbWUpCit7CisgICAgd2hpbGUodGltZSAqIDMyID4gMCkgLyogVGltZSBkZWxheSBpcyByb3VnaGx5IGluIHVTZWMuICovCisgICAgeworICAgICAgICB0aW1lLS07CisgICAgfQorfQorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgYXZlcmFnZSAoREMgdmFsdWUpIGJhc2VkIG9uIGEgc21hbGxlciBzZXQgb2YgZGlnaXRhbCBzYW1wbGVzIG9mIEkgYW5kIFEuCisgKgorICogXHBhcmFtW2luXSBpX2F2ZyAtIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIGZvciBzdG9yaW5nIHRoZSBjYWxjdWxhdGVkIGF2ZXJhZ2UgZm9yIEkgY2hhbm5lbCBzYW1wbGVzLgorICogXHBhcmFtW2luXSBxX2F2ZyAtIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIGZvciBzdG9yaW5nIHRoZSBjYWxjdWxhdGVkIGF2ZXJhZ2UgZm9yIFEgY2hhbm5lbCBzYW1wbGVzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgcnhfZGNfc2FtcGxlX2F2ZXJhZ2UoaW50MTZfdCAqIGlfYXZnLCBpbnQxNl90ICogcV9hdmcpCit7CisgICAgc3RhdGljIHVpbnQzMl90IHNhbXBsZXNbMTI4XTsgLyogNTQ0KjIqMiAoZW50aXJlIHBhY2tldCByYW0xLzIgc2l6ZSkgKi8KKyAgICB1aW50MTZfdCBpOworICAgIHVpbnQzMl90IHJ4X3NhbXBsZTsKKyAgICB1aW50MTZfdCAqIHNhbXBsZV9wdHI7CisgICAgdWludDMyX3QgdGVtcCwgZW5kX29mX3J4X3d1OworICAgIHVpbnQzMl90IG51bV9pcV9zYW1wbGVzOworICAgIGZsb2F0IGF2Z19pID0gMDsKKyAgICBmbG9hdCBhdmdfcSA9IDA7CisKKyAgICBudW1faXFfc2FtcGxlcyA9IDEyODsKKworICAgIC8qIENsZWFyIHRoZSBlbnRpcmUgYWxsb2NhdGVkIHNhbXBsZSBidWZmZXIgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2lxX3NhbXBsZXM7IGkrKykKKyAgICB7CisgICAgICAgIHNhbXBsZXNbaV09MDsKKyAgICB9CisKKyAgICAvKiBBc3N1bWUgdGhpcyBoYXMgYmVlbiBjYWxsZWQgKkFGVEVSKiBSeFd1IGhhcyBjb21wbGV0ZWQuICovCisgICAgLyogWENWUl9Gb3JjZVJ4V3UoKTsgKi8KKworICAgIC8qIFdhaXQgZm9yIFRTTSB0byByZWFjaCB0aGUgZW5kIG9mIHdhcm11cCAodW5sZXNzIHlvdSB3YW50IHRvIGNhcHR1cmUgc29tZSBzYW1wbGVzIGR1cmluZyBEQ09DIGNhbCBwaGFzZSkgKi8KKyAgICB0ZW1wID0gWENWUl9UU00tPkVORF9PRl9TRVE7CisgICAgZW5kX29mX3J4X3d1ID0gKHRlbXAgJiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9NQVNLKSA+PiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9TSElGVDsKKyAgICB3aGlsZSAoKCggWENWUl9NSVNDLT5YQ1ZSX1NUQVRVUyAmIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fQ09VTlRfTUFTSykgPj4gWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9DT1VOVF9TSElGVCApICE9IGVuZF9vZl9yeF93dSkge307CisKKyAgICBkYmdfcmFtX2luaXQoKTsKKyAgICAvKiBBcmd1bWVudCBiZWxvdyBpcyAjIG9mIGJ5dGVzLCBzbyAqMiAoSStRKSBhbmQgKjIgKDJieXRlcy9zYW1wbGUpICovCisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgIGRiZ19yYW1fc3RhcnRfY2FwdHVyZShEQkdfUEFHRV9SWERJR0lRLCBOT19TVEFSVF9UUklHLCBOT19TVE9QX1RSSUcpOworICAgIGRiZ19yYW1fd2FpdF9mb3JfY29tcGxldGUoKTsKKyAgICBkYmdfcmFtX3Bvc3Rwcm9jX2NhcHR1cmUoREJHX1BBR0VfUlhESUdJUSwgbnVtX2lxX3NhbXBsZXMgKiAyICogMiwgJnNhbXBsZXNbMF0pOworICAgIGRiZ19yYW1fcmVsZWFzZSgpOworI2Vsc2UKKyAgICAodm9pZClkYmdfcmFtX2NhcHR1cmUoREJHX1BBR0VfUlhESUdJUSwgbnVtX2lxX3NhbXBsZXMgKiAyICogMiwgJnNhbXBsZXNbMF0pOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworICAgIC8qIFNpZ24gZXh0ZW5kIHRoZSBJUSBzYW1wbGVzIGluIHBsYWNlIGluIHRoZSBzYW1wbGUgYnVmZmVyLiAqLyAgICAKKyAgICBzYW1wbGVfcHRyID0gKHVpbnQxNl90ICopKCZzYW1wbGVzWzBdKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2lxX3NhbXBsZXMgKiAyOyBpKyspCisgICAgeworICAgICAgICByeF9zYW1wbGUgPSAqc2FtcGxlX3B0cjsKKyAgICAgICAgcnhfc2FtcGxlIHw9ICgocnhfc2FtcGxlICYgMHg4MDBVKSA/IDB4RjAwMFUgOiAweDBVKTsgLyogU2lnbiBleHRlbmQgZnJvbSAxMiB0byAxNiBiaXRzLiAqLworICAgICAgICAqc2FtcGxlX3B0ciA9IHJ4X3NhbXBsZTsKKyAgICAgICAgc2FtcGxlX3B0cisrOworICAgIH0KKyAgICAKKyAgICBzYW1wbGVfcHRyID0gKHVpbnQxNl90ICopKCZzYW1wbGVzWzBdKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2lxX3NhbXBsZXMgKiAyOyBpICs9IDIpCisgICAgeworICAgICAgICBzdGF0aWMgaW50MTZfdCBpX3ZhbHVlOworICAgICAgICBzdGF0aWMgaW50MTZfdCBxX3ZhbHVlOworCisgICAgICAgIC8qIEF2ZXJhZ2UgSSAmIFEgY2hhbm5lbHMgc2VwYXJhdGVseS4gKi8KKyAgICAgICAgaV92YWx1ZSA9ICooc2FtcGxlX3B0ciArIGkpOyAvKiBTaWduIGV4dGVuZCBmcm9tIDEyIHRvIDE2IGJpdHMuICovCisgICAgICAgIHFfdmFsdWUgPSAqKHNhbXBsZV9wdHIgKyBpICsgMSk7IC8qIFNpZ24gZXh0ZW5kIGZyb20gMTIgdG8gMTYgYml0cy4gKi8KKyAgICAgICAgYXZnX2kgKz0gKChmbG9hdClpX3ZhbHVlIC0gYXZnX2kpIC8gKGZsb2F0KShpICsgMSk7ICAvKiBSb2xsaW5nIGF2ZXJhZ2UgSSAqLworICAgICAgICBhdmdfcSArPSAoKGZsb2F0KXFfdmFsdWUgLSBhdmdfcSkgLyAoZmxvYXQpKGkgKyAxKTsgIC8qIFJvbGxpbmcgYXZlcmFnZSBRICovCisgICAgfQorICAgIFhjdnJDYWxEZWxheSgxMCk7CisgICAgKmlfYXZnID0gKGludDE2X3QpYXZnX2k7CisgICAgKnFfYXZnID0gKGludDE2X3QpYXZnX3E7Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBhdmVyYWdlIChEQyB2YWx1ZSkgYmFzZWQgb24gYSBsYXJnZXIgc2V0IG9mIGRpZ2l0YWwgc2FtcGxlcyBvZiBJIGFuZCBRLgorICoKKyAqIFxwYXJhbVtpbl0gaV9hdmcgLSBwb2ludGVyIHRvIHRoZSBsb2NhdGlvbiBmb3Igc3RvcmluZyB0aGUgY2FsY3VsYXRlZCBhdmVyYWdlIGZvciBJIGNoYW5uZWwgc2FtcGxlcy4KKyAqIFxwYXJhbVtpbl0gcV9hdmcgLSBwb2ludGVyIHRvIHRoZSBsb2NhdGlvbiBmb3Igc3RvcmluZyB0aGUgY2FsY3VsYXRlZCBhdmVyYWdlIGZvciBRIGNoYW5uZWwgc2FtcGxlcy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHJ4X2RjX3NhbXBsZV9hdmVyYWdlX2xvbmcoaW50MTZfdCAqIGlfYXZnLCBpbnQxNl90ICogcV9hdmcpIAoreworICAgIHN0YXRpYyB1aW50MzJfdCBzYW1wbGVzWzUxMl07IC8qIDU0NCoyKjIgKGVudGlyZSBwYWNrZXQgcmFtMS8yIHNpemUpICovCisgICAgdWludDE2X3QgaTsKKyAgICB1aW50MzJfdCByeF9zYW1wbGU7CisgICAgdWludDE2X3QgKiBzYW1wbGVfcHRyOworICAgIHVpbnQzMl90IHRlbXAsIGVuZF9vZl9yeF93dTsKKyAgICB1aW50MzJfdCBudW1faXFfc2FtcGxlczsKKyAgICBmbG9hdCBhdmdfaSA9IDA7CisgICAgZmxvYXQgYXZnX3EgPSAwOworCisgICAgbnVtX2lxX3NhbXBsZXMgPSA1MTI7CisKKyAgICAvKiBDbGVhciB0aGUgZW50aXJlIGFsbG9jYXRlZCBzYW1wbGUgYnVmZmVyLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudW1faXFfc2FtcGxlczsgaSsrKQorICAgIHsKKyAgICAgICAgc2FtcGxlc1tpXT0wOworICAgIH0KKworICAgIC8qIEFzc3VtZSB0aGlzIGhhcyBiZWVuIGNhbGxlZCAqQUZURVIqIFJ4V3UgaGFzIGNvbXBsZXRlZC4gKi8KKyAgICAvKiBYQ1ZSX0ZvcmNlUnhXdSgpOyAqLworCisgICAgLyogV2FpdCBmb3IgVFNNIHRvIHJlYWNoIHRoZSBlbmQgb2Ygd2FybXVwICh1bmxlc3MgeW91IHdhbnQgdG8gY2FwdHVyZSBzb21lIHNhbXBsZXMgZHVyaW5nIERDT0MgY2FsIHBoYXNlKS4gKi8KKyAgICB0ZW1wID0gWENWUl9UU00tPkVORF9PRl9TRVE7CisgICAgZW5kX29mX3J4X3d1ID0gKHRlbXAgJiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9NQVNLKSA+PiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9TSElGVDsKKyAgICB3aGlsZSAoKCggWENWUl9NSVNDLT5YQ1ZSX1NUQVRVUyAmIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fQ09VTlRfTUFTSykgPj4gWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9DT1VOVF9TSElGVCApICE9IGVuZF9vZl9yeF93dSkge307CisKKyAgICBkYmdfcmFtX2luaXQoKTsKKyAgICAvKiBBcmd1bWVudCBiZWxvdyBpcyAjIG9mIGJ5dGVzLCBzbyAqMiAoSStRKSBhbmQgKjIgKDJieXRlcy9zYW1wbGUpICovCisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgIGRiZ19yYW1fc3RhcnRfY2FwdHVyZShEQkdfUEFHRV9SWERJR0lRLCBOT19TVEFSVF9UUklHLCBOT19TVE9QX1RSSUcpOworICAgIGRiZ19yYW1fd2FpdF9mb3JfY29tcGxldGUoKTsKKyAgICBkYmdfcmFtX3Bvc3Rwcm9jX2NhcHR1cmUoREJHX1BBR0VfUlhESUdJUSxudW1faXFfc2FtcGxlcyAqIDIgKiAyLCAmc2FtcGxlc1swXSk7CisgICAgZGJnX3JhbV9yZWxlYXNlKCk7CisjZWxzZQorICAgICh2b2lkKWRiZ19yYW1fY2FwdHVyZShEQkdfUEFHRV9SWERJR0lRLCBudW1faXFfc2FtcGxlcyAqIDIgKiAyLCAmc2FtcGxlc1swXSk7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisgICAgLyogU2lnbiBleHRlbmQgdGhlIElRIHNhbXBsZXMgaW4gcGxhY2UgaW4gdGhlIHNhbXBsZSBidWZmZXIuICovCisKKyAgICBzYW1wbGVfcHRyID0gKHVpbnQxNl90ICopKCZzYW1wbGVzWzBdKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2lxX3NhbXBsZXMgKiAyOyBpKyspCisgICAgeworICAgICAgICByeF9zYW1wbGUgPSAqc2FtcGxlX3B0cjsKKyAgICAgICAgcnhfc2FtcGxlIHw9ICgocnhfc2FtcGxlICYgMHg4MDBVKSA/IDB4RjAwMFUgOiAweDBVKTsgLyogU2lnbiBleHRlbmQgZnJvbSAxMiB0byAxNiBiaXRzLiAqLworICAgICAgICAqc2FtcGxlX3B0ciA9IHJ4X3NhbXBsZTsKKyAgICAgICAgc2FtcGxlX3B0cisrOworICAgIH0KKyAgICAKKyAgICBzYW1wbGVfcHRyID0gKHVpbnQxNl90ICopKCZzYW1wbGVzWzBdKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2lxX3NhbXBsZXMgKiAyOyBpICs9IDIpCisgICAgeworICAgICAgICBzdGF0aWMgaW50MTZfdCBpX3ZhbHVlOworICAgICAgICBzdGF0aWMgaW50MTZfdCBxX3ZhbHVlOworCisgICAgICAgIC8qIEF2ZXJhZ2UgSSAmIFEgY2hhbm5lbHMgc2VwYXJhdGVseS4gKi8KKyAgICAgICAgaV92YWx1ZSA9ICooc2FtcGxlX3B0ciArIGkpOyAvKiBTaWduIGV4dGVuZCBmcm9tIDEyIHRvIDE2IGJpdHMgKi8KKyAgICAgICAgcV92YWx1ZSA9ICooc2FtcGxlX3B0ciArIGkgKyAxKTsgLyogU2lnbiBleHRlbmQgZnJvbSAxMiB0byAxNiBiaXRzICovCisgICAgICAgIGF2Z19pICs9ICgoZmxvYXQpaV92YWx1ZSAtIGF2Z19pKSAvIChmbG9hdCkoaSArIDEpOyAvKiBSb2xsaW5nIGF2ZXJhZ2UgSSAqLworICAgICAgICBhdmdfcSArPSAoKGZsb2F0KXFfdmFsdWUgLSBhdmdfcSkgLyAoZmxvYXQpKGkgKyAxKTsgLyogUm9sbGluZyBhdmVyYWdlIFEgKi8KKyAgICB9CisKKyAgICBYY3ZyQ2FsRGVsYXkoMTApOworICAgICppX2F2ZyA9IChpbnQxNl90KWF2Z19pOworICAgICpxX2F2ZyA9IChpbnQxNl90KWF2Z19xOworfQorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiByeF9kY19lc3RfYXZlcmFnZSA6IEdldCBEQyBFU1QgdmFsdWVzIGFuZCByZXR1cm4gdGhlIEF2ZXJhZ2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgcnhfZGNfZXN0X2F2ZXJhZ2UoaW50MTZfdCAqIGlfYXZnLCBpbnQxNl90ICogcV9hdmcsIHVpbnQxNl90IFNhbXBsZU51bWJlcikKK3sKKyAgICBmbG9hdCBhdmdfaSA9IDA7CisgICAgZmxvYXQgYXZnX3EgPSAwOworICAgIHVpbnQxNl90IGkgPSAwOworICAgIHN0YXRpYyB1aW50MzJfdCBkY190ZW1wLCB0ZW1wOworICAgIHVpbnQzMl90IGVuZF9vZl9yeF93dSA9IDA7CisgICAgc3RhdGljIGludDE2X3QgZGNfbWVhc19pOworICAgIHN0YXRpYyBpbnQxNl90IGRjX21lYXNfcTsKKworICAgICAvKiBXYWl0IGZvciBUU00gdG8gcmVhY2ggdGhlIGVuZCBvZiB3YXJtdXAgKHVubGVzcyB5b3Ugd2FudCB0byBjYXB0dXJlIHNvbWUgc2FtcGxlcyBkdXJpbmcgRENPQyBjYWwgcGhhc2UpLiAqLworICAgIHRlbXAgPSBYQ1ZSX1RTTS0+RU5EX09GX1NFUTsKKyAgICBlbmRfb2Zfcnhfd3UgPSAodGVtcCAmIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX01BU0spID4+IFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX1NISUZUOworICAgIHdoaWxlICgoKCBYQ1ZSX01JU0MtPlhDVlJfU1RBVFVTICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9DT1VOVF9NQVNLKSA+PiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0NPVU5UX1NISUZUICkgIT0gZW5kX29mX3J4X3d1KSB7fTsKKworICAgIC8qIFJlYWQgRENPQyBEQyBFU1QgcmVnaXN0ZXIuICovCisgICAgZm9yIChpID0gMDsgaSA8IFNhbXBsZU51bWJlcjsgaSsrKQorICAgIHsKKyAgICAgICAgZGNfdGVtcCA9IFhDVlJfUlhfRElHLT5EQ09DX0RDX0VTVDsKKyAgICAgICAgZGNfbWVhc19pID0gZGNfdGVtcCAmIFhDVlJfUlhfRElHX0RDT0NfRENfRVNUX0RDX0VTVF9JX01BU0s7CisgICAgICAgIHRlbXAgPSBkY19tZWFzX2k7CisgICAgICAgIHRlbXAgfD0gKCh0ZW1wICYgMHg4MDBVKSA/IDB4RjAwMFUgOiAweDBVKTsgLyogU2lnbiBleHRlbmQgZnJvbSAxMiB0byAxNiBiaXRzLiAqLworICAgICAgICBkY19tZWFzX2kgPSB0ZW1wOworICAgICAgICBhdmdfaSArPSAoZmxvYXQpIGRjX21lYXNfaTsKKworICAgICAgICBkY19tZWFzX3EgPSAoZGNfdGVtcCAmIFhDVlJfUlhfRElHX0RDT0NfRENfRVNUX0RDX0VTVF9RX01BU0spID4+IFhDVlJfUlhfRElHX0RDT0NfRENfRVNUX0RDX0VTVF9RX1NISUZUOworICAgICAgICB0ZW1wID0gZGNfbWVhc19xOworICAgICAgICB0ZW1wIHw9ICgodGVtcCAmIDB4ODAwVSkgPyAweEYwMDBVIDogMHgwVSk7IC8qIFNpZ24gZXh0ZW5kIGZyb20gMTIgdG8gMTYgYml0cy4gKi8KKyAgICAgICAgZGNfbWVhc19xID0gdGVtcDsKKyAgICAgICAgYXZnX3EgKz0gKGZsb2F0KSBkY19tZWFzX3E7CisgICAgfQorCisgICAgYXZnX2kgLz0gKGZsb2F0KSBTYW1wbGVOdW1iZXI7CisgICAgYXZnX3EgLz0gKGZsb2F0KSBTYW1wbGVOdW1iZXI7CisKKyAgICAqaV9hdmcgPSAoaW50MTZfdClhdmdfaTsKKyAgICAqcV9hdmcgPSAoaW50MTZfdClhdmdfcTsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgdHJpbSBvZiB0aGUgQkJBIERDT0MgREFDIG9uIHRoZSBEVVQKKyAqCisgKiBccmV0dXJuIHN0YXR1cyAtIDEgaWYgcGFzc2VkLCAwIGlmIGZhaWxlZC4KKyAqCisgKiBcaW5ncm91cCBQdWJsaWNBUElzCisgKgorICogXGRldGFpbHMKKyAqICAgUmVxdWlyZXMgdGhlIFJYIHRvIGJlIHdhcm1lZCB1cCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKiAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDhfdCByeF9iYmFfZGNvY19kYWNfdHJpbV9EQ2VzdCh2b2lkKSAKK3sKKyAgICB1aW50OF90IGk7CisgICAgZmxvYXQgdGVtcF9taSA9IDA7CisgICAgZmxvYXQgdGVtcF9tcSA9IDA7CisgICAgZmxvYXQgdGVtcF9waSA9IDA7CisgICAgZmxvYXQgdGVtcF9wcSA9IDA7CisgICAgZmxvYXQgdGVtcF9zdGVwID0gMDsKKworICAgIHVpbnQzMl90IGJiZl9kY29jX3N0ZXA7CisgICAgdWludDMyX3QgYmJmX2Rjb2Nfc3RlcF9yY3A7CisgICAgVFpBZGNvY3N0ZXBfdCB0emFfZGNvY19zdGVwWzExXTsKKyAgICB1aW50OF90IHN0YXR1cyA9IDA7CisKKyAgICB1aW50OF90IGJiZl9kYWNpbml0X2ksIGJiZl9kYWNpbml0X3E7CisgICAgdWludDhfdCB0emFfZGFjaW5pdF9pLCB0emFfZGFjaW5pdF9xOworICAgIGludDE2X3QgZGNfbWVhc19pOworICAgIGludDE2X3QgZGNfbWVhc19xOworICAgIHVpbnQzMl90IGRjb2NfaW5pdF9yZWdfdmFsdWVfZGNnYWluID0gMHg4MDgwMjAyMDsgLyogVXNlZCBpbiAybmQgJiAzcmQgR2VuZXJhdGlvbiBEQ09DIFRyaW1zIG9ubHkgKi8KKyAgICB1aW50MzJfdCB0ZW1wOworCisgICAgdWludDMyX3QgZGNvY19jdHJsXzBfc3RhY2s7CisgICAgdWludDMyX3QgZGNvY19jdHJsXzFfc3RhY2s7CisgICAgdWludDMyX3QgYWdjX2N0cmxfMV9zdGFjazsKKyAgICB1aW50MzJfdCByeF9kaWdfY3RybF9zdGFjazsKKyAgICB1aW50MzJfdCBkY29jX2NhbF9nYWluX3N0YXRlOworCisgICAgLyogU2F2ZSByZWdpc3RlciAqLworICAgIGRjb2NfY3RybF8wX3N0YWNrID0gWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8wOyAvKiBTYXZlIHN0YXRlIG9mIERDT0NfQ1RSTF8wIGZvciBsYXRlciByZXN0b3JlICovCisgICAgZGNvY19jdHJsXzFfc3RhY2sgPSBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzE7IC8qIFNhdmUgc3RhdGUgb2YgRENPQ19DVFJMXzEgZm9yIGxhdGVyIHJlc3RvcmUgKi8KKyAgICByeF9kaWdfY3RybF9zdGFjayA9ICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkw7IC8qIFNhdmUgc3RhdGUgb2YgUlhfRElHX0NUUkwgZm9yIGxhdGVyIHJlc3RvcmUgKi8KKyAgICBhZ2NfY3RybF8xX3N0YWNrID0gWENWUl9SWF9ESUctPkFHQ19DVFJMXzE7IC8qIFNhdmUgc3RhdGUgb2YgUlhfRElHX0NUUkwgZm9yIGxhdGVyIHJlc3RvcmUgKi8KKyAgICBkY29jX2NhbF9nYWluX3N0YXRlID0gWENWUl9SWF9ESUctPkRDT0NfQ0FMX0dBSU47IC8qIFNhdmUgc3RhdGUgb2YgRENPQ19DQUxfR0FJTiBmb3IgbGF0ZXIgcmVzdG9yZSAqLworCisgICAgLyogUmVnaXN0ZXIgY29uZmlnICovCisgICAgLyogRW5zdXJlIEFHQywgRENPQyBhbmQgUlhfRElHX0NUUkwgaXMgaW4gY29ycmVjdCBtb2RlICovCisgICAgdGVtcCA9IFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTDsKKyAgICB0ZW1wICY9IH5YQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BR0NfRU5fTUFTSzsgLyogVHVybiBPRkYgQUdDICovCisgICAgdGVtcCAmPSB+WENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19DQUxfRU5fTUFTSzsgLyogRGlzYWJsZSBmb3IgU1cgY29udHJvbCBvZiBEQ09DICovCisgICAgdGVtcCAmPSB+WENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU5fTUFTSzsgLyogRGlzYWJsZSBmb3IgU1cgY29udHJvbCBvZiBEQ09DICovCisgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMID0gdGVtcDsKKworICAgIFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8xID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0xOQV9HQUlOX0VOKDEpIHwgLyogRW5hYmxlIExOQSBNYW51YWwgR2FpbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0JCQV9HQUlOX0VOKDEpIHwgLyogRW5hYmxlIEJCQSBNYW51YWwgR2FpbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfVVNFUl9HQUlOKDB4MCkgfCAvKiBTZXQgTE5BIE1hbnVhbCBHYWluICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0JCQV9VU0VSX0dBSU4oMHgwKTsgLyogU2V0IEJCQSBNYW51YWwgR2FpbiAqLworCisgICAgLyogRENPQ19DVFJMXzAgQCA0MDA1X0MwMkMgLS0gRGVmaW5lIGRlZmF1bHQgRENPQyBEQUMgc2V0dGluZ3MgaW4gbWFudWFsIG1vZGUgKi8KKyAgICB0ZW1wID0gWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8wOworICAgIHRlbXAgfD0gIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfTUFOKDEpOyAvKiBFbmFibGUgIE1hbnVhbCBEQ09DICovCisgICAgdGVtcCB8PSAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSRUNUX1NSQygxKTsgLyogRW5zdXJlIERDT0MgVHJhY2tpbmcgaXMgZW5hYmxlZCAqLworICAgIHRlbXAgfD0gIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfVFJLX0VTVF9PVlIoMSk7IC8qIEVuYWJsZSBEQyBFc3RpbWF0b3IgKi8KKyAgICB0ZW1wIHw9ICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfRU4oMSk7IC8qIEVuc3VyZSBEQyBjb3JyZWN0aW9uIGlzIGVuYWJsZWQgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzAgPSB0ZW1wOworCisgICAgWENWUl9SWF9ESUctPkRDT0NfREFDX0lOSVQgPSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfSSgweDIwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUSgweDIwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfSSgweDgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfUSgweDgwKTsKKworICAgIFhjdnJDYWxEZWxheShUc2V0dGxlQ2FsKTsKKworICAgIC8qIFNldCBkZWZhdWx0IERDT0MgREFDIElOSVQgVmFsdWUgKi8KKyAgICBkY29jX2luaXRfcmVnX3ZhbHVlX2RjZ2FpbiA9IFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUOyAvKiBTdG9yZSBEQ09DIERBQyBJTklUIHZhbHVlcyAqLworICAgIGJiZl9kYWNpbml0X2kgPSAoZGNvY19pbml0X3JlZ192YWx1ZV9kY2dhaW4gJiAweDAwMDAwMEZGVSk7CisgICAgYmJmX2RhY2luaXRfcSA9IChkY29jX2luaXRfcmVnX3ZhbHVlX2RjZ2FpbiAmIDB4MDAwMEZGMDBVKT4+ODsKKyAgICB0emFfZGFjaW5pdF9pID0gKGRjb2NfaW5pdF9yZWdfdmFsdWVfZGNnYWluICYgMHgwMEZGMDAwMFUpPj4xNjsKKyAgICB0emFfZGFjaW5pdF9xID0gZGNvY19pbml0X3JlZ192YWx1ZV9kY2dhaW4gPj4gMjQ7CisKKyAgICBYY3ZyQ2FsRGVsYXkoVHNldHRsZUNhbCAqIDQpOworICAgIHJ4X2RjX2VzdF9hdmVyYWdlKCZkY19tZWFzX2ksICZkY19tZWFzX3EsIDY0KTsKKyAgICBtZWFzdXJlbWVudF90YmwyW0lfQ0hBTk5FTF1bTk9NSU5BTDJdLnN0ZXBfdmFsdWUgPSBzd2VlcF9zdGVwX3ZhbHVlczJbTk9NSU5BTDJdOworICAgIG1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtOT01JTkFMMl0uc3RlcF92YWx1ZSA9IHN3ZWVwX3N0ZXBfdmFsdWVzMltOT01JTkFMMl07CisgICAgbWVhc3VyZW1lbnRfdGJsMltJX0NIQU5ORUxdW05PTUlOQUwyXS5pbnRlcm5hbF9tZWFzdXJlbWVudCA9IGRjX21lYXNfaTsKKyAgICBtZWFzdXJlbWVudF90YmwyW1FfQ0hBTk5FTF1bTk9NSU5BTDJdLmludGVybmFsX21lYXN1cmVtZW50ID0gZGNfbWVhc19xOworCisgICAgLyogU1dFRVAgSS9RIENIQU5ORUwgKi8KKyAgICAvKiBCQkYgTkVHIFNURVAgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCA9IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9JKGJiZl9kYWNpbml0X2kgLSAxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX1EoYmJmX2RhY2luaXRfcSAtIDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfSSh0emFfZGFjaW5pdF9pKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfUSh0emFfZGFjaW5pdF9xKTsKKyAgICBYY3ZyQ2FsRGVsYXkoVHNldHRsZUNhbCAqIDIpOworCisgICAgcnhfZGNfZXN0X2F2ZXJhZ2UoJmRjX21lYXNfaSwgJmRjX21lYXNfcSwgNjQpOworICAgIG1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtCQkZfTkVHXS5zdGVwX3ZhbHVlID0gLTE2OworICAgIG1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtCQkZfTkVHXS5zdGVwX3ZhbHVlID0gLTE2OworICAgIG1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtCQkZfTkVHXS5pbnRlcm5hbF9tZWFzdXJlbWVudCA9IGRjX21lYXNfaTsKKyAgICBtZWFzdXJlbWVudF90YmwyW1FfQ0hBTk5FTF1bQkJGX05FR10uaW50ZXJuYWxfbWVhc3VyZW1lbnQgPSBkY19tZWFzX3E7CisKKworICAgIC8qIEJCRiBQT1MgU1RFUCAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUID0gWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX0koYmJmX2RhY2luaXRfaSArIDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUShiYmZfZGFjaW5pdF9xICsgMTYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9JKHR6YV9kYWNpbml0X2kpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9RKHR6YV9kYWNpbml0X3EpOworICAgIFhjdnJDYWxEZWxheShUc2V0dGxlQ2FsICogMik7CisgICAgcnhfZGNfZXN0X2F2ZXJhZ2UoJmRjX21lYXNfaSwgJmRjX21lYXNfcSwgNjQpOworICAgIG1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtCQkZfUE9TXS5zdGVwX3ZhbHVlID0gKzE2OworICAgIG1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtCQkZfUE9TXS5zdGVwX3ZhbHVlID0gKzE2OworICAgIG1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtCQkZfUE9TXS5pbnRlcm5hbF9tZWFzdXJlbWVudCA9IGRjX21lYXNfaTsKKyAgICBtZWFzdXJlbWVudF90YmwyW1FfQ0hBTk5FTF1bQkJGX1BPU10uaW50ZXJuYWxfbWVhc3VyZW1lbnQgPSBkY19tZWFzX3E7CisKKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCA9IGRjb2NfaW5pdF9yZWdfdmFsdWVfZGNnYWluOyAvKiBSZXR1cm4gREFDIHNldHRpbmcgdG8gaW5pdGlhbCAqLworCisgICAgLyogQ2FsY3VsYXRlIEJCRiBEQ09DIFNURVBTLCBSRUNJUFJPQ0FMUyAqLworICAgIHRlbXBfbWkgPSBjYWxjX2Rjb2NfZGFjX3N0ZXAoJm1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtCQkZfTkVHXSwgJm1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtOT01JTkFMMl0pOworICAgIHRlbXBfbXEgPSBjYWxjX2Rjb2NfZGFjX3N0ZXAoJm1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtCQkZfTkVHXSwgJm1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtOT01JTkFMMl0pOworICAgIHRlbXBfcGkgPSBjYWxjX2Rjb2NfZGFjX3N0ZXAoJm1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtCQkZfUE9TXSwgJm1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtOT01JTkFMMl0pOworICAgIHRlbXBfcHEgPSBjYWxjX2Rjb2NfZGFjX3N0ZXAoJm1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtCQkZfUE9TXSwgJm1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtOT01JTkFMMl0pOworCisJdGVtcF9zdGVwID0gKHRlbXBfbWkgKyB0ZW1wX3BpICsgdGVtcF9tcSArIHRlbXBfcHEpIC8gNDsKKyAgICBiYmZfZGNvY19zdGVwID0gKHVpbnQzMl90KXJvdW5kZih0ZW1wX3N0ZXAgKiA4VSk7CisKKyAgICBpZiAoKGJiZl9kY29jX3N0ZXAgPiAyNjUpICYgKGJiZl9kY29jX3N0ZXAgPCAzMDUpKQorICAgIHsKKyAgICAgICAgYmJmX2Rjb2Nfc3RlcF9yY3AgPSAodWludDMyX3Qpcm91bmRmKChmbG9hdCkweDgwMDBVIC8gdGVtcF9zdGVwKTsKKworICAgICAgICAvKiBDYWxjdWxhdGUgVFpBIERDT0MgU1RFUFMgJiBSRUNJUFJPQ0FMUyBhbmQgSVFfRENfR0FJTl9NSVNNQVRDSCAqLworICAgICAgICBmb3IgKGkgPSBUWkFfU1RFUF9OMDsgaSA8PSBUWkFfU1RFUF9OMTA7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2FsY3VsYXRlIFRaQSBEQ09DIFNURVBTSVpFICYgaXRzIFJFQ0lQUk9DQUwgKi8KKyAgICAgICAgICAgIHN3aXRjaChpKXsKKyAgICAgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX04wOgorICAgICAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSAoYmJmX2Rjb2Nfc3RlcD4+M1UpIC8gMy42RjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9OMToKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzAxX2luaXQgPj4gMTYpIC8gKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzAwX2luaXQgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX04yOgorICAgICAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDJfaW5pdCA+PiAxNikgLyAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDFfaW5pdCA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjM6CisgICAgICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wM19pbml0ID4+IDE2KSAvICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wMl9pbml0ID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9ONDoKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA0X2luaXQgPj4gMTYpIC8gKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzAzX2luaXQgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX041OgorICAgICAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDVfaW5pdCA+PiAxNikgLyAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDRfaW5pdCA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjY6CisgICAgICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wNl9pbml0ID4+IDE2KSAvICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wNV9pbml0ID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9ONzoKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA3X2luaXQgPj4gMTYpIC8gKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA2X2luaXQgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX044OgorICAgICAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDhfaW5pdCA+PiAxNikgLyAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDdfaW5pdCA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjk6CisgICAgICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wOV9pbml0ID4+IDE2KSAvICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wOF9pbml0ID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9OMTA6CisgICAgICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8xMF9pbml0ID4+IDE2KSAvICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wOV9pbml0ID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHR6YV9kY29jX3N0ZXBbaS1UWkFfU1RFUF9OMF0uZGNvY19zdGVwID0gKHVpbnQzMl90KXJvdW5kZih0ZW1wX3N0ZXAgKiA4KTsKKyAgICAgICAgICAgIHR6YV9kY29jX3N0ZXBbaS1UWkFfU1RFUF9OMF0uZGNvY19zdGVwX3JjcCA9ICh1aW50MzJfdClyb3VuZGYoKGZsb2F0KTB4ODAwMCAvIHRlbXBfc3RlcCk7CisgICAgICAgIH0KKworICAgICAgICAvKiBNYWtlIHRoZSB0cmltcyBhY3RpdmUgKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQkJBX1NURVAgPSBYQ1ZSX1JYX0RJR19EQ09DX0JCQV9TVEVQX0JCQV9EQ09DX1NURVAoYmJmX2Rjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX0JCQV9TVEVQX0JCQV9EQ09DX1NURVBfUkVDSVAoYmJmX2Rjb2Nfc3RlcF9yY3ApOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8wID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8wX0RDT0NfVFpBX1NURVBfR0FJTl8wKHR6YV9kY29jX3N0ZXBbMF0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMF9EQ09DX1RaQV9TVEVQX1JDUF8wKHR6YV9kY29jX3N0ZXBbMF0uZGNvY19zdGVwX3JjcCk7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzEgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzFfRENPQ19UWkFfU1RFUF9HQUlOXzEodHphX2Rjb2Nfc3RlcFsxXS5kY29jX3N0ZXApIHwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xX0RDT0NfVFpBX1NURVBfUkNQXzEodHphX2Rjb2Nfc3RlcFsxXS5kY29jX3N0ZXBfcmNwKTsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfMiA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX0dBSU5fMih0emFfZGNvY19zdGVwWzJdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzJfRENPQ19UWkFfU1RFUF9SQ1BfMih0emFfZGNvY19zdGVwWzJdLmRjb2Nfc3RlcF9yY3ApOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8zID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8zX0RDT0NfVFpBX1NURVBfR0FJTl8zKHR6YV9kY29jX3N0ZXBbM10uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfM19EQ09DX1RaQV9TVEVQX1JDUF8zKHR6YV9kY29jX3N0ZXBbM10uZGNvY19zdGVwX3JjcCk7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzQgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzRfRENPQ19UWkFfU1RFUF9HQUlOXzQodHphX2Rjb2Nfc3RlcFs0XS5kY29jX3N0ZXApIHwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF80X0RDT0NfVFpBX1NURVBfUkNQXzQodHphX2Rjb2Nfc3RlcFs0XS5kY29jX3N0ZXBfcmNwKTsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfNSA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX0dBSU5fNSh0emFfZGNvY19zdGVwWzVdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzVfRENPQ19UWkFfU1RFUF9SQ1BfNSh0emFfZGNvY19zdGVwWzVdLmRjb2Nfc3RlcF9yY3ApOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF82ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfR0FJTl82KHR6YV9kY29jX3N0ZXBbNl0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNl9EQ09DX1RaQV9TVEVQX1JDUF82KHR6YV9kY29jX3N0ZXBbNl0uZGNvY19zdGVwX3JjcCk7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzcgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9HQUlOXzcodHphX2Rjb2Nfc3RlcFs3XS5kY29jX3N0ZXApIHwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF83X0RDT0NfVFpBX1NURVBfUkNQXzcodHphX2Rjb2Nfc3RlcFs3XS5kY29jX3N0ZXBfcmNwKTsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfOCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX0dBSU5fOCh0emFfZGNvY19zdGVwWzhdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzhfRENPQ19UWkFfU1RFUF9SQ1BfOCh0emFfZGNvY19zdGVwWzhdLmRjb2Nfc3RlcF9yY3ApOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF85ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF85X0RDT0NfVFpBX1NURVBfR0FJTl85KHR6YV9kY29jX3N0ZXBbOV0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX1JDUF85KHR6YV9kY29jX3N0ZXBbOV0uZGNvY19zdGVwX3JjcCk7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzEwID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX0dBSU5fMTAodHphX2Rjb2Nfc3RlcFsxMF0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMTBfRENPQ19UWkFfU1RFUF9SQ1BfMTAodHphX2Rjb2Nfc3RlcFsxMF0uZGNvY19zdGVwX3JjcCk7CisKKyAgICAgICAgc3RhdHVzID0gMTsgLyogU3VjY2VzcyAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0dXMgPSAwOyAvKiBGYWlsdXJlICovCisgICAgfQorCisgICAgLyogUmVzdG9yZSBSZWdpc3RlcnMgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzAgPSBkY29jX2N0cmxfMF9zdGFjazsgLyogUmVzdG9yZSBEQ09DX0NUUkxfMCBzdGF0ZSB0byBwcmlvciBzZXR0aW5ncyAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMSA9IGRjb2NfY3RybF8xX3N0YWNrOyAvKiBSZXN0b3JlIERDT0NfQ1RSTF8xIHN0YXRlIHRvIHByaW9yIHNldHRpbmdzICovCisgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMID0gcnhfZGlnX2N0cmxfc3RhY2s7IC8qIFJlc3RvcmUgUlhfRElHX0NUUkwgc3RhdGUgdG8gcHJpb3Igc2V0dGluZ3MgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DQUxfR0FJTiA9IGRjb2NfY2FsX2dhaW5fc3RhdGU7IC8qIFJlc3RvcmUgRENPQ19DQUxfR0FJTiBzdGF0ZSB0byBwcmlvciBzZXR0aW5nICovCisgICAgWENWUl9SWF9ESUctPkFHQ19DVFJMXzEgPSBhZ2NfY3RybF8xX3N0YWNrOyAvKiBTYXZlIHN0YXRlIG9mIFJYX0RJR19DVFJMIGZvciBsYXRlciByZXN0b3JlICovCisKKyAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDT0NfREFDX0lOSVRfQ2FsIDogc2xvcGUgc2lnbiBzZWVrIGRlcGVuZGluZyBvbiBtZWFzdXJlJ3Mgc2lnbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBEQ09DX0RBQ19JTklUX0NhbCh1aW50OF90IHN0YW5kYWxvbmVfb3BlcmF0aW9uKQoreworICAgIGludDE2X3QgZGNfbWVhc19pID0gMjAwMCwgZGNfbWVhc19pX3AgPSAyMDAwOworICAgIGludDE2X3QgZGNfbWVhc19xID0gMjAwMCwgZGNfbWVhc19xX3AgPSAyMDAwOworICAgIHVpbnQ4X3QgY3Vycl90emFfZGFjX2ksIGN1cnJfdHphX2RhY19xOworICAgIHVpbnQ4X3QgY3Vycl9iYmFfZGFjX2ksIGN1cnJfYmJhX2RhY19xOworICAgIHVpbnQ4X3QgcF90emFfZGFjX2ksIHBfdHphX2RhY19xOworICAgIHVpbnQ4X3QgcF9iYmFfZGFjX2ksIHBfYmJhX2RhY19xOworICAgIHVpbnQ4X3QgaSA9IDA7CisgICAgdWludDhfdCBiYmFfZ2FpbiA9IDExOworICAgIGJvb2wgVFpBX0lfT0sgPSAwLCBUWkFfUV9PSyA9IDAsIEJCQV9JX09LID0gMCwgQkJBX1FfT0sgPSAwOworCisgICAgdWludDMyX3QgZGNvY19jdHJsXzBfc3RhY2s7CisgICAgdWludDMyX3QgZGNvY19jdHJsXzFfc3RhY2s7CisgICAgdWludDMyX3QgYWdjX2N0cmxfMV9zdGFjazsKKyAgICB1aW50MzJfdCByeF9kaWdfY3RybF9zdGFjazsKKyAgICB1aW50MzJfdCBkY29jX2NhbF9nYWluX3N0YXRlOworICAgIHVpbnQzMl90IHhjdnJfY3RybF9zdGFjazsKKworICAgIHVpbnQzMl90IHRlbXA7CisKKyAgICAvKiBTYXZlIHJlZ2lzdGVycyAqLworICAgIGRjb2NfY3RybF8wX3N0YWNrID0gWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8wOyAvKiBTYXZlIHN0YXRlIG9mIERDT0NfQ1RSTF8wIGZvciBsYXRlciByZXN0b3JlICovCisgICAgZGNvY19jdHJsXzFfc3RhY2sgPSBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzE7IC8qIFNhdmUgc3RhdGUgb2YgRENPQ19DVFJMXzEgZm9yIGxhdGVyIHJlc3RvcmUgKi8KKyAgICByeF9kaWdfY3RybF9zdGFjayA9ICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkw7IC8qIFNhdmUgc3RhdGUgb2YgUlhfRElHX0NUUkwgZm9yIGxhdGVyIHJlc3RvcmUgKi8KKyAgICBhZ2NfY3RybF8xX3N0YWNrID0gWENWUl9SWF9ESUctPkFHQ19DVFJMXzE7IC8qIFNhdmUgc3RhdGUgb2YgUlhfRElHX0NUUkwgZm9yIGxhdGVyIHJlc3RvcmUgKi8KKyAgICBkY29jX2NhbF9nYWluX3N0YXRlID0gWENWUl9SWF9ESUctPkRDT0NfQ0FMX0dBSU47IC8qIFNhdmUgc3RhdGUgb2YgRENPQ19DQUxfR0FJTiBmb3IgbGF0ZXIgcmVzdG9yZSAqLworCisgICAgLyogV2FybVVwICovCisgICAgaWYgKHN0YW5kYWxvbmVfb3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgdGVtcCA9IFhDVlJfTUlTQy0+WENWUl9DVFJMOworICAgICAgICB4Y3ZyX2N0cmxfc3RhY2sgPSB0ZW1wOworICAgICAgICB0ZW1wICY9IH4oWENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTF9NQVNLKTsKKyAgICAgICAgdGVtcCB8PSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MKDApOworICAgICAgICBYQ1ZSX01JU0MtPlhDVlJfQ1RSTCA9IHRlbXA7CisgICAgICAgIFhDVlJfT3ZlcnJpZGVDaGFubmVsKDEyLCAxKTsgLyogQ2FsaWJyYXRlIG9uIGNoYW5uZWwgIzEyLCAyLjQyNiBHSHogaW4gQkxFIG1hcCAqLworICAgICAgICBYQ1ZSX0ZvcmNlUnhXdSgpOworICAgICAgICBYY3ZyQ2FsRGVsYXkoMjAwMCk7CisgICAgfSAKKworICAgIC8qIFJlZ2lzdGVyIGNvbmZpZyAqLworICAgIC8qIEVuc3VyZSBBR0MsIERDT0MgYW5kIFJYX0RJR19DVFJMIGlzIGluIGNvcnJlY3QgbW9kZSAqLworICAgIHRlbXAgPSBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkw7CisgICAgdGVtcCAmPSB+WENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQUdDX0VOX01BU0s7IC8qIFR1cm4gT0ZGIEFHQyAqLworICAgIHRlbXAgJj0gflhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfQ0FMX0VOX01BU0s7IC8qIERpc2FibGUgZm9yIFNXIGNvbnRyb2wgb2YgRENPQyAqLworICAgIHRlbXAgJj0gflhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOX01BU0s7IC8qIERpc2FibGUgZm9yIFNXIGNvbnRyb2wgb2YgRENPQyAqLworICAgIFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTCA9IHRlbXA7CisKKyAgICBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMSA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfVVNFUl9MTkFfR0FJTl9FTigxKSB8IC8qIEVuYWJsZSBMTkEgTWFudWFsIEdhaW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfVVNFUl9CQkFfR0FJTl9FTigxKSB8IC8qIEVuYWJsZSBCQkEgTWFudWFsIEdhaW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX1VTRVJfR0FJTigweDApIHwgLyogU2V0IExOQSBNYW51YWwgR2FpbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9CQkFfVVNFUl9HQUlOKDB4MCk7IC8qIFNldCBCQkEgTWFudWFsIEdhaW4gKi8KKworICAgIC8qIERDT0NfQ1RSTF8wIEAgNDAwNV9DMDJDIC0tIERlZmluZSBkZWZhdWx0IERDT0MgREFDIHNldHRpbmdzIGluIG1hbnVhbCBtb2RlICovCisgICAgdGVtcCA9IFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMDsKKyAgICB0ZW1wIHw9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfTUFOKDEpOyAvKiBFbmFibGUgIE1hbnVhbCBEQ09DICovCisgICAgdGVtcCB8PSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfU1JDKDEpOyAvKiBFbnN1cmUgRENPQyBUcmFja2luZyBpcyBlbmFibGVkICovCisgICAgdGVtcCB8PSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX1RSS19FU1RfT1ZSKDEpOyAvKiBFbmFibGUgREMgRXN0aW1hdG9yICovCisgICAgdGVtcCB8PSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfRU4oMSk7IC8qIEVuc3VyZSBEQyBjb3JyZWN0aW9uIGlzIGVuYWJsZWQgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzAgPSB0ZW1wOworCisgICAgWGN2ckNhbERlbGF5KFRzZXR0bGVDYWwpOworCisgICAgLyogU2V0IGRlZmF1bHQgRENPQyBEQUMgSU5JVCBWYWx1ZSAqLyAgICAgICAgCisgICAgLyogTE5BIGFuZCBCQkEgREFDIFN3ZWVwICovCisgICAgY3Vycl9iYmFfZGFjX2kgPSAweDIwOworICAgIGN1cnJfYmJhX2RhY19xID0gMHgyMDsKKyAgICBjdXJyX3R6YV9kYWNfaSA9IDB4ODA7CisgICAgY3Vycl90emFfZGFjX3EgPSAweDgwOworCisgICAgLyogUGVyZm9ybSBhIGZpcnN0IERDIG1lYXN1cmVtZW50IHRvIGVuc3VyZSB0aGF0IG1lYXN1cmVtZW50IGlzIG5vdCBjbGlwcGluZyAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUID0gWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX0koY3Vycl9iYmFfZGFjX2kpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RKGN1cnJfYmJhX2RhY19xKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfSShjdXJyX3R6YV9kYWNfaSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX1EoY3Vycl90emFfZGFjX3EpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGJiYV9nYWluLS07CisgICAgICAgIC8qIFNldCBEQUMgdXNlciBnYWluICovCisgICAgICAgIFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8xID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0xOQV9HQUlOX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9VU0VSX0dBSU4oMCkgfCAvKiAyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0JCQV9HQUlOX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0JCQV9VU0VSX0dBSU4oYmJhX2dhaW4pIDsgLyogMTAgKi8KKyAgICAgICAgWGN2ckNhbERlbGF5KFRzZXR0bGVDYWwgKiAyKTsKKyAgICAgICAgcnhfZGNfZXN0X2F2ZXJhZ2UoJmRjX21lYXNfaSwgJmRjX21lYXNfcSwgNjQpOworICAgIH0gd2hpbGUgKChBQlMoZGNfbWVhc19pKSA+IDE5MDApIHwgKEFCUyhkY19tZWFzX3EpID4gMTkwMCkpOworCisgICAgZm9yIChpID0gMDsgaSA8IDB4MEY7IGkrKykKKyAgICB7CisgICAgICAgIC8qIEkgY2hhbm5lbCA6ICAqLworICAgICAgICBpZiAoIVRaQV9JX09LKQorICAgICAgICB7ICAgCisgICAgICAgICAgICBpZiAoKElTSUdOKGRjX21lYXNfaSkgIT0gSVNJR04oZGNfbWVhc19pX3ApKSAmJiAoaSA+IDApKQorICAgICAgICAgICAgeyAgICAKKyAgICAgICAgICAgICAgICBpZiAoQUJTKGRjX21lYXNfaSkgIT0gTUlOKEFCUyhkY19tZWFzX2kpLCBBQlMoZGNfbWVhc19pX3ApKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJfdHphX2RhY19pID0gcF90emFfZGFjX2k7IAorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFRaQV9JX09LID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcF90emFfZGFjX2kgPSBjdXJyX3R6YV9kYWNfaTsKKworICAgICAgICAgICAgICAgIGlmIChJU0lHTihkY19tZWFzX2kpKSAvKiBJZiBwb3NpdGlmICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdXJyX3R6YV9kYWNfaS0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY3Vycl90emFfZGFjX2krKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiBTd2VlcCBCQkEgSSAqLworICAgICAgICB7CisgICAgICAgICAgICBpZiAoIUJCQV9JX09LKQorICAgICAgICAgICAgeyAgCisgICAgICAgICAgICAgICAgaWYgKChJU0lHTihkY19tZWFzX2kpICE9IElTSUdOKGRjX21lYXNfaV9wKSkgJiYgKGN1cnJfYmJhX2RhY19pICE9IDB4MjApKQorICAgICAgICAgICAgICAgIHsgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFCUyhkY19tZWFzX2kpICE9IE1JTihBQlMoZGNfbWVhc19pKSwgQUJTKGRjX21lYXNfaV9wKSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfYmJhX2RhY19pID0gcF9iYmFfZGFjX2k7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBCQkFfSV9PSyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwX2JiYV9kYWNfaSA9IGN1cnJfYmJhX2RhY19pOworICAgICAgICAgICAgICAgICAgICBpZiAoSVNJR04oZGNfbWVhc19pKSkgLyogSWYgcG9zaXRpZiAqLworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyX2JiYV9kYWNfaS0tOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfYmJhX2RhY19pKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBRIGNoYW5uZWwgOiAqLworICAgICAgICBpZiAoIVRaQV9RX09LKQorICAgICAgICB7ICAgCisgICAgICAgICAgICBpZiAoKElTSUdOKGRjX21lYXNfcSkgIT0gSVNJR04oZGNfbWVhc19xX3ApKSAmJiAoaSA+IDApKQorICAgICAgICAgICAgeyAgICAKKyAgICAgICAgICAgICAgICBpZiAoQUJTKGRjX21lYXNfcSkgIT0gTUlOKEFCUyhkY19tZWFzX3EpLCBBQlMoZGNfbWVhc19xX3ApKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJfdHphX2RhY19xID0gcF90emFfZGFjX3E7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFRaQV9RX09LID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwX3R6YV9kYWNfcSA9IGN1cnJfdHphX2RhY19xOworICAgICAgICAgICAgICAgIGlmIChJU0lHTihkY19tZWFzX3EpKSAvKiBJZiBwb3NpdGlmICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdXJyX3R6YV9kYWNfcS0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY3Vycl90emFfZGFjX3ErKzsKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgfQorICAgICAgICB9IAorICAgICAgICBlbHNlICAvKiBTd2VlcCBCQkEgUSAqLworICAgICAgICB7CisgICAgICAgICAgICBpZiAoIUJCQV9RX09LKQorICAgICAgICAgICAgeyAgCisgICAgICAgICAgICAgICAgaWYgKChJU0lHTihkY19tZWFzX3EpICE9IElTSUdOKGRjX21lYXNfcV9wKSkgJiYgKGN1cnJfYmJhX2RhY19xICE9IDB4MjApKQorICAgICAgICAgICAgICAgIHsgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFCUyhkY19tZWFzX3EpICE9IE1JTihBQlMoZGNfbWVhc19xKSwgQUJTKGRjX21lYXNfcV9wKSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfYmJhX2RhY19xID0gcF9iYmFfZGFjX3E7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQkJBX1FfT0sgPSAxOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIHBfYmJhX2RhY19xID0gY3Vycl9iYmFfZGFjX3E7CisgICAgICAgICAgICAgICAgICAgICBpZiAoSVNJR04oZGNfbWVhc19xKSkgLyogSWYgcG9zaXRpZiAqLworICAgICAgICAgICAgICAgICAgICAgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9iYmFfZGFjX3EtLTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9iYmFfZGFjX3ErKzsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogREMgT0sgYnJlYWsgOiAqLworICAgICAgICBpZiAoVFpBX0lfT0sgJiYgVFpBX1FfT0sgJiYgQkJBX0lfT0sgJiYgQkJBX1FfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGNfbWVhc19pX3AgPSBkY19tZWFzX2k7IC8qIFN0b3JlIGFzIHByZXZpb3VzIHZhbHVlICovCisgICAgICAgIGRjX21lYXNfcV9wID0gZGNfbWVhc19xOyAvKiBTdG9yZSBhcyBwcmV2aW91cyB2YWx1ZSAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCA9IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9JKGN1cnJfYmJhX2RhY19pKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX1EoY3Vycl9iYmFfZGFjX3EpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfSShjdXJyX3R6YV9kYWNfaSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9RKGN1cnJfdHphX2RhY19xKTsKKyAgICAgICAgWGN2ckNhbERlbGF5KFRzZXR0bGVDYWwgKiAyKTsKKyAgICAgICAgcnhfZGNfZXN0X2F2ZXJhZ2UoJmRjX21lYXNfaSwgJmRjX21lYXNfcSwgNjQpOworICAgIH0KKworICAgIC8qIEFwcGx5IG9wdGltaXplZCBEQ09DIERBQyBJTklUIDogKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCA9IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9JKGN1cnJfYmJhX2RhY19pKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUShjdXJyX2JiYV9kYWNfcSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX0koY3Vycl90emFfZGFjX2kpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9RKGN1cnJfdHphX2RhY19xKTsKKworICAgIC8qIFdhcm1Eb3duICovCisgICAgaWYgKHN0YW5kYWxvbmVfb3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgWENWUl9Gb3JjZVJ4V2QoKTsgLyogRG9uJ3QgbGVhdmUgdGhlIHJlY2VpdmVyIHJ1bm5pbmcuICovCisgICAgICAgIFhjdnJDYWxEZWxheSgyMDApOworICAgICAgICBYQ1ZSX092ZXJyaWRlQ2hhbm5lbCgweEZGLDEpOyAvKiBSZWxlYXNlIGNoYW5uZWwgb3ZlcnJpZGVzICovCisgICAgICAgIFhDVlJfTUlTQy0+WENWUl9DVFJMID0geGN2cl9jdHJsX3N0YWNrOworICAgIH0KKworICAgIC8qIFJlc3RvcmUgcmVnaXN0ZXIgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzAgPSBkY29jX2N0cmxfMF9zdGFjazsgLyogUmVzdG9yZSBEQ09DX0NUUkxfMCBzdGF0ZSB0byBwcmlvciBzZXR0aW5ncyAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMSA9IGRjb2NfY3RybF8xX3N0YWNrOyAvKiBSZXN0b3JlIERDT0NfQ1RSTF8xIHN0YXRlIHRvIHByaW9yIHNldHRpbmdzICovCisgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMID0gcnhfZGlnX2N0cmxfc3RhY2s7IC8qIFJlc3RvcmUgUlhfRElHX0NUUkwgc3RhdGUgdG8gcHJpb3Igc2V0dGluZ3MgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DQUxfR0FJTiA9IGRjb2NfY2FsX2dhaW5fc3RhdGU7IC8qIFJlc3RvcmUgRENPQ19DQUxfR0FJTiBzdGF0ZSB0byBwcmlvciBzZXR0aW5nICovCisgICAgWENWUl9SWF9ESUctPkFHQ19DVFJMXzEgPSBhZ2NfY3RybF8xX3N0YWNrOyAvKiBTYXZlIHN0YXRlIG9mIFJYX0RJR19DVFJMIGZvciBsYXRlciByZXN0b3JlICovCit9CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZnNsX3hjdnJfdHJpbS5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9mc2xfeGN2cl90cmltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1NGI5ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZnNsX3hjdnJfdHJpbS5oCkBAIC0wLDAgKzEsMTMyIEBACisvKgorKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKyNpZm5kZWYgX0ZTTF9YQ1ZSX1RSSU1fSF8KKy8qIENsYW5nLWZvcm1hdCBvZmYuICovCisjZGVmaW5lIF9GU0xfWENWUl9UUklNX0hfCisvKiBDbGFuZy1mb3JtYXQgb24uICovCisKKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorLyohCisqIEBhZGR0b2dyb3VwIHhjdnIKKyogQHsKKyovCisKKy8qISBAZmlsZSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUHVibGljIGNvbnN0YW50IGRlZmluaXRpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUHVibGljIHR5cGUgZGVmaW5pdGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogXGJyaWVmICBUaGUgZW51bWVyYXRpb25zIHVzZWQgdG8gZGVmaW5lIHRoZSBJICYgUSBjaGFubmVsIHNlbGVjdGlvbnMuICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBJX0NIQU5ORUwgPSAwLAorICAgIFFfQ0hBTk5FTCA9IDEsCisgICAgTlVNX0lfUV9DSEFOID0gMgorfSBJUV90OworCit0eXBlZGVmIGVudW0gLyogRW51bWVyYXRpb24gb2YgQURDX0dBSU5fQ0FMIDIgKi8KK3sKKyAgICBOT01JTkFMMiA9IDAsCisgICAgQkJGX05FRyA9IDEsCisgICAgQkJGX1BPUyA9IDIsCisgICAgVFpBX1NURVBfTjAgPSAzLAorICAgIFRaQV9TVEVQX04xID0gNCwKKyAgICBUWkFfU1RFUF9OMiA9IDUsCisgICAgVFpBX1NURVBfTjMgPSA2LAorICAgIFRaQV9TVEVQX040ID0gNywKKyAgICBUWkFfU1RFUF9ONSA9IDgsCisgICAgVFpBX1NURVBfTjYgPSA5LAorICAgIFRaQV9TVEVQX043ID0gMTAsCisgICAgVFpBX1NURVBfTjggPSAxMSwKKyAgICBUWkFfU1RFUF9OOSA9IDEyLAorICAgIFRaQV9TVEVQX04xMCA9IDEzLAorICAgIFRaQV9TVEVQX1AwID0gMTQsCisgICAgVFpBX1NURVBfUDEgPSAxNSwKKyAgICBUWkFfU1RFUF9QMiA9IDE2LAorICAgIFRaQV9TVEVQX1AzID0gMTcsCisgICAgVFpBX1NURVBfUDQgPSAxOCwKKyAgICBUWkFfU1RFUF9QNSA9IDE5LAorICAgIFRaQV9TVEVQX1A2ID0gMjAsCisgICAgVFpBX1NURVBfUDcgPSAyMSwKKyAgICBUWkFfU1RFUF9QOCA9IDIyLAorICAgIFRaQV9TVEVQX1A5ID0gMjMsCisgICAgVFpBX1NURVBfUDEwID0gMjQsCisKKyAgICBOVU1fU1dFRVBfU1RFUF9FTlRSSUVTMiA9IDI1IC8qIEluY2x1ZGluZyB0aGUgYmFzZWxpbmUgZW50cnkgIzAuICovCit9IERBQ19TV0VFUF9TVEVQMl90OworCisvKiBcYnJpZWYgIERlZmluZXMgYW4gZW50cnkgaW4gYW4gYXJyYXkgb2Ygc3RydWN0cyB0byBkZXNjcmliZSBUWkEgRENPQyBTVEVQIGFuZCBUWkFfRENPQ19TVEVQX1JFQ0lQUk9DQUwuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQxNl90IGRjb2Nfc3RlcDsgCisgICAgdWludDE2X3QgZGNvY19zdGVwX3JjcDsgCisvLyAgICB1aW50MTZfdCBkY29jX3N0ZXBfcTsKKy8vICAgIHVpbnQxNl90IGRjb2Nfc3RlcF9yY3BfcTsKK30gVFpBZGNvY3N0ZXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQ4X3Qgc3RlcF92YWx1ZTsgLyogVGhlIG9mZnNldCBmcm9tIG5vbWluYWwgREFDIHZhbHVlIChzZWUgc3dlZXBfc3RlcF92YWx1ZXNbXSkgKi8KKyAgICBpbnQxNl90IGludGVybmFsX21lYXN1cmVtZW50OyAvKiBUaGUgdmFsdWUgKGF2ZXJhZ2UgY29kZSkgbWVhc3VyZWQgZnJvbSBETUEgc2FtcGxlcy4gKi8KKy8vICAgIHVpbnQ4X3QgdmFsaWQ7IC8qIFNldCB0byBUUlVFIChub24gemVybykgd2hlbiBhIHZhbHVlIGlzIHdyaXR0ZW4gdG8gdGhpcyB0YWJsZSBlbnRyeS4gKi8KK30gR0FJTl9DQUxDX1RCTF9FTlRSWTJfVDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGVmaW5pdGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgcnhfZGNfc2FtcGxlX2F2ZXJhZ2UoaW50MTZfdCAqIGlfYXZnLCBpbnQxNl90ICogcV9hdmcpOwordm9pZCByeF9kY19zYW1wbGVfYXZlcmFnZV9sb25nKGludDE2X3QgKiBpX2F2ZywgaW50MTZfdCAqIHFfYXZnKTsKK3VpbnQ4X3QgcnhfYmJhX2Rjb2NfZGFjX3RyaW1fc2hvcnRJUSh2b2lkKTsKK3ZvaWQgWGN2ckNhbERlbGF5KHVpbnQzMl90IHRpbWUpOwordm9pZCByeF9kY19lc3RfYXZlcmFnZShpbnQxNl90ICogaV9hdmcsIGludDE2X3QgKiBxX2F2ZywgdWludDE2X3QgU2FtcGxlTnVtYmVyKTsKK3VpbnQ4X3QgcnhfYmJhX2Rjb2NfZGFjX3RyaW1fRENlc3Qodm9pZCk7Cit2b2lkIERDT0NfREFDX0lOSVRfQ2FsKHVpbnQ4X3Qgc3RhbmRhbG9uZV9vcGVyYXRpb24pOworCisKKworCisvKiBAfSAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisvKiEgQH0qLworCisjZW5kaWYgLyogX0ZTTF9YQ1ZSX1RSSU1fSF8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9pZnJfcmFkaW8uYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvaWZyX3JhZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlMjI1NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvaWZyX3JhZGlvLmMKQEAgLTAsMCArMSw1MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKyNpbmNsdWRlICJmc2xfeGN2ci5oIgorI2luY2x1ZGUgImlmcl9yYWRpby5oIgorI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJRlJfUkFNICAgICAgICAgICAgICgwKQorCisjaWYgUkFESU9fSVNfR0VOXzNQMAorI2RlZmluZSBSRElORFggICAgICAgICAgICAgICgweDQxVSkgCisjZGVmaW5lIEszX0JBU0VfSU5ERVggICAgICAgKDB4MTFVKSAvKiBCYXNlZCBmb3IgcmVhZCBpbmRleCAqLworI2Vsc2UKKyNkZWZpbmUgUkRSU1JDICAgICAgICAgICAgICAoMHgwM1UpIAorI2RlZmluZSBLVzR4XzUxMl9CQVNFICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgS1c0eF8yNTZfQkFTRSAgICAgICAoMHgxMDAwMFUpCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisjaWYgUkFESU9fSVNfR0VOXzJQMQorI2RlZmluZSBGVEZBICAgIChGVEZFKQorI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8yUDEgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50MzJfdCByZWFkX2Fub3RoZXJfaWZyX3dvcmQodm9pZCk7Cit1aW50MzJfdCByZWFkX2ZpcnN0X2lmcl93b3JkKHVpbnQzMl90IHJlYWRfYWRkcik7CisKKyNpZiBSQURJT19JU19HRU5fM1AwCit1aW50NjRfdCByZWFkX2luZGV4X2lmcih1aW50MzJfdCByZWFkX2FkZHIpOworI2Vsc2UKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBicmllZiAgUmVhZHMgYSBsb2NhdGlvbiBpbiBibG9jayAxIElGUiBmb3IgdXNlIGJ5IHRoZSByYWRpby4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgcmVhZGluZyBJRlIgZGF0YSBmcm9tIGZsYXNoIG1lbW9yeSBmb3IgdHJpbSBsb2FkaW5nLgorICoKKyAqIEBwYXJhbSByZWFkX2FkZHIgdGhlIGFkZHJlc3MgaW4gdGhlIElGUiB0byBiZSByZWFkLgorICoKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd3JhcHMgYm90aCB0aGUgR2VuMiByZWFkX3Jlc291cmNlIGNvbW1hbmQgYW5kIHRoZSBHZW4yLjEgYW5kIEdlbjMgcmVhZF9pbmRleAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgUkFESU9fSVNfR0VOXzJQMQordWludDY0X3QgcmVhZF9yZXNvdXJjZV9pZnIodWludDMyX3QgcmVhZF9hZGRyKTsKKyNlbHNlCit1aW50MzJfdCByZWFkX3Jlc291cmNlX2lmcih1aW50MzJfdCByZWFkX2FkZHIpOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8yUDEgKi8KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKK3ZvaWQgc3RvcmVfc3dfdHJpbShJRlJfU1dfVFJJTV9UQkxfRU5UUllfVCAqIHN3X3RyaW1fdGJsLCB1aW50MTZfdCBudW1fZW50cmllcywgdWludDMyX3QgYWRkciwgdWludDMyX3QgZGF0YSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdWludDMyX3QgaWZyX3JlYWRfYWRkcjsKKworI2lmIFJBRElPX0lTX0dFTl8zUDAKK3N0YXRpYyB1aW50NjRfdCBwYWNrZWRfZGF0YV9sb25nOyAvKiBTdG9yYWdlIGZvciAyIDMyIGJpdCB2YWx1ZXMgdG8gYmUgcmVhZCBieSByZWFkX2luZGV4ICovCitzdGF0aWMgdWludDhfdCBudW1fd29yZHNfYXZhaWw7IC8qIE51bWJlciBvZiAzMiBiaXQgd29yZHMgYXZhaWxhYmxlIGluIHBhY2tlZF9kYXRhX2xvbmcgc3RvcmFnZSAqLworY29uc3QgdWludDMyX3QgQkxPQ0tfMV9JRlJbXT0KK3sKKyAgICAvKiBSZXZpc2VkIGZhbGxiYWNrIHRhYmxlIHdoaWNoIHNob3VsZCB3b3JrIHdpdGggdW50cmltbWVkIHBhcnRzICovCisgICAgMHhBQkNERkZGRVUsIC8qIFZlcnNpb24gI0ZGRkUgaW5kaWNhdGVzIGRlZmF1bHQgdHJpbSB2YWx1ZXMgKi8KKworICAgIC8qIFRyaW0gdGFibGUgaXMgZW1wdHkgZm9yIEdlbjMgYnkgZGVmYXVsdCAqLworCisgICAgLyogTm8gVFJJTV9TVEFUVVMgaW4gU1cgZmFsbGJhY2sgYXJyYXkuICovCisgICAgMHhGRUVEMEUwRlUgLyogRW5kIG9mIEZpbGUgKi8KK307CisjZWxzZQorI2lmIFJBRElPX0lTX0dFTl8yUDAKK2NvbnN0IHVpbnQzMl90IEJMT0NLXzFfSUZSW109Cit7CisgICAgLyogUmV2aXNlZCBmYWxsYmFjayB0YWJsZSB3aGljaCBzaG91bGQgd29yayB3aXRoIHVudHJpbW1lZCBwYXJ0cyAqLworICAgIDB4QUJDREZGRkVVLCAvKiBWZXJzaW9uICNGRkZFIGluZGljYXRlcyBkZWZhdWx0IHRyaW0gdmFsdWVzICovCisKKyAgICAweDQwMDU5MTJDVSwgLyogUlNJTV9BTkFfVFJJTSBhZGRyZXNzICovCisgICAgMHg3ODRCMDAwMFUsIC8qIFJTSU1fQU5BX1RSSU0gZGVmYXVsdCB2YWx1ZSAqLworCisgICAgLyogTm8gVFJJTV9TVEFUVVMgaW4gU1cgZmFsbGJhY2sgYXJyYXkuICovCisgICAgMHhGRUVEMEUwRlUgLyogRW5kIG9mIEZpbGUgKi8KK307CisjZWxzZQorc3RhdGljIHVpbnQ2NF90IHBhY2tlZF9kYXRhX2xvbmc7IC8qIFN0b3JhZ2UgZm9yIDIgMzIgYml0IHZhbHVlcyB0byBiZSByZWFkIGJ5IHJlYWRfaW5kZXggKi8KK3N0YXRpYyB1aW50OF90IG51bV93b3Jkc19hdmFpbDsgLyogTnVtYmVyIG9mIDMyIGJpdCB3b3JkcyBhdmFpbGFibGUgaW4gcGFja2VkX2RhdGFfbG9uZyBzdG9yYWdlICovCitjb25zdCB1aW50MzJfdCBCTE9DS18xX0lGUltdPQoreworICAgIC8qIFJldmlzZWQgZmFsbGJhY2sgdGFibGUgd2hpY2ggc2hvdWxkIHdvcmsgd2l0aCB1bnRyaW1tZWQgcGFydHMgKi8KKyAgICAweEFCQ0RGRkZFVSwgLyogVmVyc2lvbiAjRkZGRSBpbmRpY2F0ZXMgZGVmYXVsdCB0cmltIHZhbHVlcyAqLworCisgICAgMHg0MDA1OTEyQ1UsIC8qIFJTSU1fQU5BX1RSSU0gYWRkcmVzcyAqLworICAgIDB4Nzg0QjAwMDBVLCAvKiBSU0lNX0FOQV9UUklNIGRlZmF1bHQgdmFsdWUgKi8KKworICAgIC8qIE5vIFRSSU1fU1RBVFVTIGluIFNXIGZhbGxiYWNrIGFycmF5LiAqLworICAgIDB4RkVFRDBFMEZVIC8qIEVuZCBvZiBGaWxlICovCit9OworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8yUDAgKi8KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFJlYWQgY29tbWFuZCBmb3IgcmVhZGluZyB0aGUgZmlyc3QgMzJiaXQgd29yZCBmcm9tIElGUiwgZW5jYXBzdWxhdGVzIGRpZmZlcmVudCAKKyAqICBmbGFzaCBJRlIgcmVhZCBtZWNoYW5pc21zIGZvciBtdWx0aXBsZSBnZW5lcmF0aW9ucyBvZiBTT0MKKyAqIAorICogXHBhcmFtIHJlYWRfYWRkciBmbGFzaCBhZGRyZXNzCisgKiAKKyAqIFxyZXR1cm4gOCBieXRlcyBvZiBwYWNrZWQgZGF0YSBjb250YWluaW5nIHJhZGlvIHRyaW1zIG9ubHkKKyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IHJlYWRfZmlyc3RfaWZyX3dvcmQodWludDMyX3QgcmVhZF9hZGRyKQoreworICAgIGlmcl9yZWFkX2FkZHIgPSByZWFkX2FkZHI7CisgICAgcmV0dXJuIHJlYWRfYW5vdGhlcl9pZnJfd29yZCgpOworfQorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFJlYWQgY29tbWFuZCBmb3IgcmVhZGluZyBhZGRpdGlvbmFsIDMyYml0IHdvcmRzIGZyb20gSUZSLiBFbmNhcHN1bGF0ZXMgbXVsdGlwbGUgSUZSIHJlYWQgbWVjaGFuaXNtcy4KKyAqIAorICogXHBhcmFtIHJlYWRfYWRkciBmbGFzaCBhZGRyZXNzCisgKiAKKyAqIFxyZXR1cm4gOCBieXRlcyBvZiBwYWNrZWQgZGF0YSBjb250YWluaW5nIHJhZGlvIHRyaW1zIG9ubHkKKyAqCisgKiBccmVtYXJrcyBQUkUtQ09ORElUSU9OUzoKKyAqICBUaGUgZnVuY3Rpb24gcmVhZF9maXJzdF9pZnJfd29yZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBzbyB0aGF0IHRoZSBpZnJfcmVhZF9hZGRyIHZhcmlhYmxlIGlzIHNldHVwIHByaW9yIHRvIHVzZS4KKyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IHJlYWRfYW5vdGhlcl9pZnJfd29yZCh2b2lkKQoreworICAgIHVpbnQzMl90IHBhY2tlZF9kYXRhOworCisjaWYgKFJBRElPX0lTX0dFTl8zUDAgfHwgUkFESU9fSVNfR0VOXzJQMSkKKyAgICAvKiBVc2luZyBzb21lIHN0YXRpYyBzdG9yYWdlIGFuZCBhbHRlcm5hdGluZyByZWFkcyB0byByZWFkX2luZGV4X2lmciB0byByZXBsYWNlIHJlYWRfcmVzb3VyY2VfaWZyICovCisgICAgaWYgKG51bV93b3Jkc19hdmFpbCA9PSAwKQorICAgIHsKKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgICAgIHBhY2tlZF9kYXRhX2xvbmcgPSByZWFkX2luZGV4X2lmcihpZnJfcmVhZF9hZGRyKTsKKyNlbHNlIC8qIFVzZSA2NCBiaXQgcmV0dXJuIHZlcnNpb24gb2YgcmVhZF9yZXNvdXJjZSAqLworICAgICAgICBwYWNrZWRfZGF0YV9sb25nID0gcmVhZF9yZXNvdXJjZV9pZnIoaWZyX3JlYWRfYWRkcik7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisgICAgICAgIG51bV93b3Jkc19hdmFpbCA9IDI7CisgICAgICAgIGlmcl9yZWFkX2FkZHIrKzsgLyogUmVhZCBpbmRleCBhZGRyZXNzZXMgaW5jcmVtZW50IGJ5IDEgKi8KKyAgICB9CisKKyAgICBwYWNrZWRfZGF0YSA9ICh1aW50MzJfdCkocGFja2VkX2RhdGFfbG9uZyAmIDB4RkZGRkZGRkYpOworICAgIHBhY2tlZF9kYXRhX2xvbmcgPSBwYWNrZWRfZGF0YV9sb25nID4+IDMyOworICAgIG51bV93b3Jkc19hdmFpbC0tOworI2Vsc2UKKyAgICBwYWNrZWRfZGF0YSA9IHJlYWRfcmVzb3VyY2VfaWZyKGlmcl9yZWFkX2FkZHIpOworICAgIGlmcl9yZWFkX2FkZHIgKz0gNDsgLyogUmVhZCByZXNvdXJjZSBhZGRyZXNzZXMgaW5jcmVtZW50IGJ5IDQgKi8KKyNlbmRpZiAvKiAoUkFESU9fSVNfR0VOXzNQMCB8fCBSQURJT19JU19HRU5fMlAxKSAqLworCisgICAgcmV0dXJuIHBhY2tlZF9kYXRhOworfQorCisjaWYgUkFESU9fSVNfR0VOXzNQMAorLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogXGJyaWVmICBSZWFkIGNvbW1hbmQgZm9yIHJlYWRpbmcgZnJvbSBJRlIgdXNpbmcgUkRJTkRFWCBjb21tYW5kCisgKiAKKyAqIFxwYXJhbSByZWFkX2FkZHIgZmxhc2ggYWRkcmVzcworICogCisgKiBccmV0dXJuIDggYnl0ZXMgb2YgcGFja2VkIGRhdGEgY29udGFpbmluZyByYWRpbyB0cmltcyBvbmx5CisgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50NjRfdCByZWFkX2luZGV4X2lmcih1aW50MzJfdCByZWFkX2FkZHIpCit7CisgICAgdWludDhfdCByZGluZGV4ID0gcmVhZF9hZGRyOworICAgIHVpbnQ2NF90IHJlYWRfZGF0YTsKKyAgICB1aW50OF90IGk7CisgICAgdWludDMyX3QgcHJpbWFzazsKKworICAgIHdoaWxlICgoRlRGRV9GU1RBVF9DQ0lGX01BU0sgJiBGVEZFLT5GU1RBVCkgPT0gMCk7IC8qIFdhaXQgdGlsbCBDQ0lGPTEgdG8gbWFrZSBzdXJlIG5vdCBpbnRlcnJ1cHRpbmcgYSBwcmlvciBvcGVyYXRpb24gKi8KKworICAgIGlmICgoRlRGRS0+RlNUQVQgJiBGVEZFX0ZTVEFUX0FDQ0VSUl9NQVNLKSA9PSBGVEZFX0ZTVEFUX0FDQ0VSUl9NQVNLICkgCisgICAgeworICAgICAgICBGVEZFLT5GU1RBVCA9ICgxIDw8IEZURkVfRlNUQVRfQUNDRVJSX1NISUZUKTsgLyogV3JpdGUgMSB0byBBQ0NFRVIgdG8gY2xlYXIgZXJyb3JzICovCisgICAgfQorCisgICAgRlRGRS0+RkNDT0JbMF0gPSBSRElORFg7CisgICAgRlRGRS0+RkNDT0JbMV0gPSByZGluZGV4OworCisgICAgcHJpbWFzayA9IERpc2FibGVHbG9iYWxJUlEoKTsKKyAgICBGVEZFLT5GU1RBVCA9IEZURkVfRlNUQVRfQ0NJRl9NQVNLOworICAgIHdoaWxlKChGVEZFX0ZTVEFUX0NDSUZfTUFTSyAmIEZURkUtPkZTVEFUKSA9PSAwKTsgLyogV2FpdCB0aWxsIENDSUY9MSAqLworICAgIEVuYWJsZUdsb2JhbElSUShwcmltYXNrKTsKKworICAgIC8qIFBhY2sgcmVhZCBkYXRhIGJhY2sgaW50byA2NCBiaXQgdHlwZSAqLworICAgIHJlYWRfZGF0YSA9IEZURkUtPkZDQ09CWzExXTsgLyogTVNCIGdvZXMgaW4gZmlyc3QsIHdpbGwgYmUgc2hpZnRlZCBsZWZ0IHNlcXVlbnRpYWxseSAqLworICAgIGZvciAoaSA9IDEwOyBpID4gMzsgaS0tKQorICAgIHsKKyAgICAgICAgcmVhZF9kYXRhID0gcmVhZF9kYXRhIDw8IDg7CisgICAgICAgIHJlYWRfZGF0YSB8PSBGVEZFLT5GQ0NPQltpXTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVhZF9kYXRhOworfQorI2Vsc2UKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogXGJyaWVmICBSZWFkIGNvbW1hbmQgZm9yIHJlYWRpbmcgZnJvbSBJRlIKKyAqIAorICogXHBhcmFtIHJlYWRfYWRkciBmbGFzaCBhZGRyZXNzCisgKiAKKyAqIFxyZXR1cm4gcGFja2VkIGRhdGEgY29udGFpbmluZyByYWRpbyB0cmltcyBvbmx5CisgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgUkFESU9fSVNfR0VOXzJQMAordWludDMyX3QgcmVhZF9yZXNvdXJjZV9pZnIodWludDMyX3QgcmVhZF9hZGRyKQoreyAKKyAgICB1aW50MzJfdCBwcmltYXNrOworICAgIHVpbnQzMl90IHBhY2tlZF9kYXRhOworICAgIHVpbnQ4X3QgZmxhc2hfYWRkcjIzXzE2LCBmbGFzaF9hZGRyMTVfOCwgZmxhc2hfYWRkcjdfMDsKKyAgICB1aW50MzJfdCByZWFkX2RhdGEzMV8yNCwgcmVhZF9kYXRhMjNfMTYsIHJlYWRfZGF0YTE1XzgsIHJlYWRfZGF0YTdfMDsKKworICAgIGZsYXNoX2FkZHIyM18xNiA9ICh1aW50OF90KSgocmVhZF9hZGRyICYgMHhGRjAwMDApID4+IDE2KTsKKyAgICBmbGFzaF9hZGRyMTVfOCA9ICh1aW50OF90KSgocmVhZF9hZGRyICYgMHgwMEZGMDApID4+IDgpOworICAgIGZsYXNoX2FkZHI3XzAgPSAodWludDhfdCkocmVhZF9hZGRyICYgMHhGRik7CisKKyAgICB3aGlsZSAoKEZURkFfRlNUQVRfQ0NJRl9NQVNLICYgRlRGQS0+RlNUQVQpID09IDApOyAvKiBXYWl0IHRpbGwgQ0NJRj0xICovCisKKyAgICBpZiAoKEZURkEtPkZTVEFUICYgRlRGQV9GU1RBVF9BQ0NFUlJfTUFTSykgPT0gRlRGQV9GU1RBVF9BQ0NFUlJfTUFTSyApCisgICAgeworICAgICAgICBGVEZBLT5GU1RBVCA9ICgxPDxGVEZBX0ZTVEFUX0FDQ0VSUl9TSElGVCk7IC8qIFdyaXRlIDEgdG8gQUNDRUVSIHRvIGNsZWFyIGVycm9ycyAqLworICAgIH0KKworICAgIEZURkEtPkZDQ09CMCA9IFJEUlNSQzsKKyAgICBGVEZBLT5GQ0NPQjEgPSBmbGFzaF9hZGRyMjNfMTY7CisgICAgRlRGQS0+RkNDT0IyID0gZmxhc2hfYWRkcjE1Xzg7CisgICAgRlRGQS0+RkNDT0IzID0gZmxhc2hfYWRkcjdfMDsKKyAgICBGVEZBLT5GQ0NPQjggPSAweDAwOworCisgICAgcHJpbWFzayA9IERpc2FibGVHbG9iYWxJUlEoKTsKKyAgICBGVEZBLT5GU1RBVCA9IEZURkFfRlNUQVRfQ0NJRl9NQVNLOworICAgIHdoaWxlICgoRlRGQV9GU1RBVF9DQ0lGX01BU0sgJiBGVEZBLT5GU1RBVCkgPT0gMCk7IC8qIFdhaXQgdGlsbCBDQ0lGPTEgKi8KKyAgICBFbmFibGVHbG9iYWxJUlEocHJpbWFzayk7CisKKyAgICAvKiBTdGFydCByZWFkaW5nICovCisgICAgcmVhZF9kYXRhMzFfMjQgPSBGVEZBLT5GQ0NPQjQ7IC8qIEZURkEtPkZDQ09CWzRdICovCisgICAgcmVhZF9kYXRhMjNfMTYgPSBGVEZBLT5GQ0NPQjU7IC8qIEZURkEtPkZDQ09CWzVdICovCisgICAgcmVhZF9kYXRhMTVfOCAgPSBGVEZBLT5GQ0NPQjY7IC8qIEZURkEtPkZDQ09CWzZdICovCisgICAgcmVhZF9kYXRhN18wICAgPSBGVEZBLT5GQ0NPQjc7IC8qIEZURkEtPkZDQ09CWzddICovCisKKyAgICBwYWNrZWRfZGF0YSA9IChyZWFkX2RhdGEzMV8yNCA8PCAyNCkgfCAocmVhZF9kYXRhMjNfMTYgPDwgMTYpIHwgKHJlYWRfZGF0YTE1XzggPDwgOCkgfCAocmVhZF9kYXRhN18wIDw8IDApOworCisgICAgcmV0dXJuIHBhY2tlZF9kYXRhOworfQorI2Vsc2UKK3VpbnQ2NF90IHJlYWRfcmVzb3VyY2VfaWZyKHVpbnQzMl90IHJlYWRfYWRkcikKK3sgCisgICAgdWludDMyX3QgcHJpbWFzazsKKyAgICB1aW50NjRfdCBwYWNrZWRfZGF0YTsKKyAgICB1aW50OF90IGZsYXNoX2FkZHIyM18xNiwgZmxhc2hfYWRkcjE1XzgsIGZsYXNoX2FkZHI3XzA7CisgICAgdWludDhfdCByZWFkX2RhdGFbOF07CisgICAgdWludDY0X3QgdGVtcF82NDsKKyAgICB1aW50OF90IGk7CisKKyAgICBmbGFzaF9hZGRyMjNfMTYgPSAodWludDhfdCkoKHJlYWRfYWRkciAmIDB4RkYwMDAwKSA+PiAxNik7CisgICAgZmxhc2hfYWRkcjE1XzggPSAodWludDhfdCkoKHJlYWRfYWRkciAmIDB4MDBGRjAwKSA+PiA4KTsKKyAgICBmbGFzaF9hZGRyN18wID0gKHVpbnQ4X3QpKHJlYWRfYWRkciAmIDB4RkYpOworICAgIHdoaWxlKChGVEZFX0ZTVEFUX0NDSUZfTUFTSyAmIEZURkUtPkZTVEFUKSA9PSAwKTsgLyogV2FpdCB0aWxsIENDSUY9MSAqLworCisgICAgaWYgKChGVEZFLT5GU1RBVCAmIEZURkVfRlNUQVRfQUNDRVJSX01BU0spID09IEZURkVfRlNUQVRfQUNDRVJSX01BU0sgKQorICAgIHsKKyAgICAgICAgRlRGRS0+RlNUQVQgPSAoMTw8RlRGRV9GU1RBVF9BQ0NFUlJfU0hJRlQpOyAvKiBXcml0ZSAxIHRvIEFDQ0VFUiB0byBjbGVhciBlcnJvcnMgKi8KKyAgICB9CisKKyAgICBGVEZFLT5GQ0NPQjAgPSBSRFJTUkM7CisgICAgRlRGRS0+RkNDT0IxID0gZmxhc2hfYWRkcjIzXzE2OworICAgIEZURkUtPkZDQ09CMiA9IGZsYXNoX2FkZHIxNV84OworICAgIEZURkUtPkZDQ09CMyA9IGZsYXNoX2FkZHI3XzA7CisgICAgRlRGRS0+RkNDT0I0ID0gMHgwMDsKKworICAgIHByaW1hc2sgPSBEaXNhYmxlR2xvYmFsSVJRKCk7CisgICAgRlRGRS0+RlNUQVQgPSBGVEZFX0ZTVEFUX0NDSUZfTUFTSzsKKyAgICB3aGlsZSAoKEZURkVfRlNUQVRfQ0NJRl9NQVNLICYgRlRGRS0+RlNUQVQpID09IDApOyAvKiBXYWl0IHRpbGwgQ0NJRj0xICovCisgICAgRW5hYmxlR2xvYmFsSVJRKHByaW1hc2spOworCisgICAgLyogU3RhcnQgcmVhZGluZyAqLworICAgIHJlYWRfZGF0YVs3XSA9IEZURkUtPkZDQ09CNDsKKyAgICByZWFkX2RhdGFbNl0gPSBGVEZFLT5GQ0NPQjU7CisgICAgcmVhZF9kYXRhWzVdID0gRlRGRS0+RkNDT0I2OworICAgIHJlYWRfZGF0YVs0XSA9IEZURkUtPkZDQ09CNzsKKyAgICByZWFkX2RhdGFbM10gPSBGVEZFLT5GQ0NPQjg7CisgICAgcmVhZF9kYXRhWzJdID0gRlRGRS0+RkNDT0I5OworICAgIHJlYWRfZGF0YVsxXSA9IEZURkUtPkZDQ09CQTsKKyAgICByZWFkX2RhdGFbMF0gPSBGVEZFLT5GQ0NPQkI7CisKKyAgICBwYWNrZWRfZGF0YSA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKyAgICB7CisgICAgICAgIHRlbXBfNjQgPSByZWFkX2RhdGFbaV07CisgICAgICAgIHBhY2tlZF9kYXRhIHw9IHRlbXBfNjQgPDwgKGkgKiA4KTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFja2VkX2RhdGE7Cit9CisKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fMlAwICovCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFN0b3JlIGEgU1cgdHJpbSB2YWx1ZSBpbiB0aGUgdGFibGUgcGFzc2VkIGluIGZyb20gY2FsbGluZyBmdW5jdGlvbi4KKyAqIAorICogXHBhcmFtIHN3X3RyaW1fdGJsIHBvaW50ZXIgdG8gdGhlIHNvZnR3YXJlIHRyaW0gdGFibGUgdG8gaG9sZCBTVyB0cmltIHZhbHVlcworICogXHBhcmFtIG51bV9lbnRyaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgU1cgdHJpbSB0YWJsZQorICogXHBhcmFtIGFkZHIgdGhlIHNvZnR3YXJlIHRyaW0gSUQKKyAqIFxwYXJhbSBkYXRhIHRoZSB2YWx1ZSBvZiB0aGUgc29mdHdhcmUgdHJpbQorICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzdG9yZV9zd190cmltKElGUl9TV19UUklNX1RCTF9FTlRSWV9UICogc3dfdHJpbV90YmwsIHVpbnQxNl90IG51bV9lbnRyaWVzLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCBkYXRhKQoreworICAgIHVpbnQxNl90IGk7CisKKyAgICBpZiAoc3dfdHJpbV90YmwgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYWRkciA9PSBzd190cmltX3RibFtpXS50cmltX2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3X3RyaW1fdGJsW2ldLnRyaW1fdmFsdWUgPSBkYXRhOworICAgICAgICAgICAgICAgIHN3X3RyaW1fdGJsW2ldLnZhbGlkID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsgLyogRG9uJ3QgbmVlZCB0byBzY2FuIHRoZSBhcnJheSBhbnkgZnVydGhlci4uLiAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFByb2Nlc3MgYmxvY2sgMSBJRlIgZGF0YS4KKyAqIAorICogXHBhcmFtIHN3X3RyaW1fdGJsIHBvaW50ZXIgdG8gdGhlIHNvZnR3YXJlIHRyaW0gdGFibGUgdG8gaG9sZCBTVyB0cmltIHZhbHVlcworICogXHBhcmFtIG51bV9lbnRyaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgU1cgdHJpbSB0YWJsZQorICoKKyAqIFxyZW1hcmtzIAorICogIFVzZXMgYSBJRlIgdjIgZm9ybWF0dGVkIGRlZmF1bHQgYXJyYXkgaWYgdGhlIElGUiBpcyBibGFuayBvciBjb3JydXB0ZWQuCisgKiAgU3RvcmVzIFNXIHRyaW0gdmFsdWVzIHRvIGFuIGFycmF5IHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rpb24uCisgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGhhbmRsZV9pZnIoSUZSX1NXX1RSSU1fVEJMX0VOVFJZX1QgKiBzd190cmltX3RibCwgdWludDE2X3QgbnVtX2VudHJpZXMpCit7CisgICAgdWludDMyX3QgZGVzdF9hZGRyOworICAgIHVpbnQzMl90IHJlYWRfYWRkcjsKKyAgICB1aW50MzJfdCBkZXN0X2RhdGE7CisgICAgdWludDMyX3QgcGFja2VkX2RhdGE7CisgICAgdWludDMyX3QgKmlmcl9wdHI7CisKKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgbnVtX3dvcmRzX2F2YWlsID0gMDsgLyogUHJlcCBmb3IgaGFuZGxpbmcgNjQgYml0IHdvcmRzIGZyb20gZmxhc2ggKi8KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgcmVhZF9hZGRyID0gSzNfQkFTRV9JTkRFWDsKKyNlbHNlCisjaWZkZWYgQ1BVX01LVzQxWjI1NlZIVDQKKyAgICByZWFkX2FkZHIgPSBLVzR4XzI1Nl9CQVNFOworI2Vsc2UKKyAgICByZWFkX2FkZHIgPSBLVzR4XzUxMl9CQVNFOworI2VuZGlmIC8qIENQVV9NS1c0MVoyNTZWSFQ0ICovCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisgICAgLyogUmVhZCBmaXJzdCBlbnRyeSBpbiBJRlIgdGFibGUgKi8KKyAgICBwYWNrZWRfZGF0YSA9IHJlYWRfZmlyc3RfaWZyX3dvcmQocmVhZF9hZGRyKTsKKyAgICBpZiAoKHBhY2tlZF9kYXRhJn5JRlJfVkVSU0lPTl9NQVNLKSA9PSBJRlJfVkVSU0lPTl9IRFIpCisgICAgeworICAgICAgICAvKiBWYWxpZCBoZWFkZXIgd2FzIGZvdW5kLCBwcm9jZXNzIHJlYWwgSUZSIGRhdGEgKi8KKyAgICAgICAgWENWUl9NSVNDLT5PVkVSV1JJVEVfVkVSID0gKHBhY2tlZF9kYXRhICYgSUZSX1ZFUlNJT05fTUFTSyk7CisgICAgICAgIHN0b3JlX3N3X3RyaW0oc3dfdHJpbV90YmwsIG51bV9lbnRyaWVzLCAweEFCQ0QsIChwYWNrZWRfZGF0YSAmIElGUl9WRVJTSU9OX01BU0spKTsgLyogUGxhY2UgSUZSIHZlcnNpb24gIyBpbiBTVyB0cmltIGFycmF5Ki8KKyAgICAgICAgcGFja2VkX2RhdGEgPSByZWFkX2Fub3RoZXJfaWZyX3dvcmQoKTsKKworICAgICAgICB3aGlsZSAocGFja2VkX2RhdGEgIT1JRlJfRU9GX1NZTUJPTCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKElTX0FfU1dfSUQocGFja2VkX2RhdGEpKSAvKiBTVyBUcmltIGNhc2UgKG5vbl9yZWcgd3JpdGVzKSAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlc3RfYWRkciA9IHBhY2tlZF9kYXRhOworICAgICAgICAgICAgICAgIHBhY2tlZF9kYXRhID0gcmVhZF9hbm90aGVyX2lmcl93b3JkKCk7CisgICAgICAgICAgICAgICAgZGVzdF9kYXRhID0gcGFja2VkX2RhdGE7CisgICAgICAgICAgICAgICAgLyogUGxhY2UgU1cgdHJpbSBpbiBhcnJheSBmb3IgZHJpdmVyIFNXIHRvIHVzZSAqLworICAgICAgICAgICAgICAgIHN0b3JlX3N3X3RyaW0oc3dfdHJpbV90YmwsIG51bV9lbnRyaWVzLCBkZXN0X2FkZHIsIGRlc3RfZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKElTX1ZBTElEX1JFR19BRERSKHBhY2tlZF9kYXRhKSkgLyogVmFsaWQgcmVnaXN0ZXIgd3JpdGUgYWRkcmVzcyAqLworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9hZGRyID0gcGFja2VkX2RhdGE7CisgICAgICAgICAgICAgICAgICAgIHBhY2tlZF9kYXRhID0gcmVhZF9hbm90aGVyX2lmcl93b3JkKCk7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfZGF0YSA9IHBhY2tlZF9kYXRhOworICAgICAgICAgICAgICAgICAgICAqKHVpbnQzMl90ICopKGRlc3RfYWRkcikgPSBkZXN0X2RhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7IC8qIEludmFsaWQgYWRkcmVzcyBjYXNlICovCisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IAorCisgICAgICAgIHBhY2tlZF9kYXRhPXJlYWRfYW5vdGhlcl9pZnJfd29yZCgpOworICAgICAgICB9CisgICAgfSAKKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgLyogVmFsaWQgaGVhZGVyIGlzIG5vdCBwcmVzZW50LCB1c2UgYmxpbmQgSUZSIHRyaW0gdGFibGUgKi8KKyAgICAgICAgaWZyX3B0ciA9ICh2b2lkICopQkxPQ0tfMV9JRlI7CisgICAgICAgIHBhY2tlZF9kYXRhID0gKmlmcl9wdHI7CisgICAgICAgIFhDVlJfTUlTQy0+T1ZFUldSSVRFX1ZFUiA9IChwYWNrZWRfZGF0YSAmIElGUl9WRVJTSU9OX01BU0spOworICAgICAgICBzdG9yZV9zd190cmltKHN3X3RyaW1fdGJsLCBudW1fZW50cmllcywgMHhBQkNELCAocGFja2VkX2RhdGEgJiBJRlJfVkVSU0lPTl9NQVNLKSk7IC8qIFBsYWNlIElGUiB2ZXJzaW9uICMgaW4gU1cgdHJpbSBhcnJheSAqLworICAgICAgICBpZnJfcHRyKys7CisgICAgICAgIHBhY2tlZF9kYXRhPSAqaWZyX3B0cjsKKworICAgICAgICB3aGlsZSAocGFja2VkX2RhdGEgIT0gSUZSX0VPRl9TWU1CT0wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJU19BX1NXX0lEKHBhY2tlZF9kYXRhKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTVyBUcmltIGNhc2UgKG5vbl9yZWcgd3JpdGVzKSAqLworICAgICAgICAgICAgICAgIGRlc3RfYWRkciA9IHBhY2tlZF9kYXRhOworICAgICAgICAgICAgICAgIGlmcl9wdHIrKzsKKyAgICAgICAgICAgICAgICBwYWNrZWRfZGF0YSA9ICooaWZyX3B0cik7CisgICAgICAgICAgICAgICAgZGVzdF9kYXRhID0gcGFja2VkX2RhdGE7CisgICAgICAgICAgICAgICAgLyogUGxhY2UgU1cgdHJpbSBpbiBhcnJheSBmb3IgZHJpdmVyIFNXIHRvIHVzZSAqLworICAgICAgICAgICAgICAgIHN0b3JlX3N3X3RyaW0oc3dfdHJpbV90YmwsIG51bV9lbnRyaWVzLCBkZXN0X2FkZHIsIGRlc3RfZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlc3RfYWRkciA9IHBhY2tlZF9kYXRhOworICAgICAgICAgICAgICAgIGlmcl9wdHIrKzsKKyAgICAgICAgICAgICAgICBwYWNrZWRfZGF0YSA9ICppZnJfcHRyOworICAgICAgICAgICAgICAgIGRlc3RfZGF0YSA9IHBhY2tlZF9kYXRhOworCisgICAgICAgICAgICAgICAgLyogVmFsaWQgcmVnaXN0ZXIgd3JpdGUgYWRkcmVzcyAqLworICAgICAgICAgICAgICAgIGlmIChJU19WQUxJRF9SRUdfQUREUihkZXN0X2FkZHIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKih1aW50MzJfdCAqKShkZXN0X2FkZHIpID0gZGVzdF9kYXRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBJbnZhbGlkIGFkZHJlc3MgY2FzZSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWZyX3B0cisrOworICAgICAgICAgICAgcGFja2VkX2RhdGE9ICppZnJfcHRyOworICAgICAgICB9CisgICAgfQorfQorCisjaWYgUkFESU9fSVNfR0VOXzNQMAorCisjZWxzZQordWludDMyX3QgaGFuZGxlX2lmcl9kaWVfaWQodm9pZCkKK3sKKyAgICB1aW50MzJfdCBpZF94LCBpZF95OworICAgIHVpbnQzMl90IGlkOworCisgICAgaWQgPSByZWFkX3Jlc291cmNlX2lmcigweDkwKTsKKyAgICBpZF94ID0gaWQgJiAweDAwRkYwMDAwOworICAgIGlkX3kgPSBpZCAmIDB4MDAwMDAwRkY7CisKKyAgICByZXR1cm4gKGlkX3ggfCBpZF95KTsKK30KKwordWludDMyX3QgaGFuZGxlX2lmcl9kaWVfa3dfdHlwZSh2b2lkKQoreworICAgIHVpbnQzMl90IHpiLCBibGU7CisKKyAgICB6YiA9IHJlYWRfcmVzb3VyY2VfaWZyKDB4ODApICYgMHg4MDAwOworICAgIGJsZT0gcmVhZF9yZXNvdXJjZV9pZnIoMHg4OCkgJiAweDEwMDAwMDsKKworICAgIHJldHVybiAoemIgfCBibGUpOworfQorCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIER1bXBzIGJsb2NrIDEgSUZSIGRhdGEgdG8gYW4gYXJyYXkuCisgKiAKKyAqIFxwYXJhbSBkdW1wX3RibCBwb2ludGVyIHRvIHRoZSB0YWJsZSB0byBob2xkIHRoZSBkdW1wZWQgSUZSIHZhbHVlcworICogXHBhcmFtIG51bV9lbnRyaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyB0byBkdW1wCisgKgorICogXHJlbWFya3MgCisgKiAgU3RhcnRzIGF0IHRoZSBmaXJzdCBhZGRyZXNzIGluIElGUiBhbmQgZHVtcHMgc2VxdWVudGlhbCBlbnRyaWVzLgorICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkdW1wX2lmcih1aW50MzJfdCAqIGR1bXBfdGJsLCB1aW50OF90IG51bV9lbnRyaWVzKQoreworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICB1aW50MzJfdCBpZnJfYWRkcmVzcyA9IDB4MjAwMDA7CisjZWxzZQorICAgIHVpbnQzMl90IGlmcl9hZGRyZXNzID0gMHgyMDAwMDsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisgICAgdWludDMyX3QgKiBkdW1wX3B0ciA9IGR1bXBfdGJsOworICAgIHVpbnQ4X3QgaTsKKworICAgICpkdW1wX3B0ciA9IHJlYWRfZmlyc3RfaWZyX3dvcmQoaWZyX2FkZHJlc3MpOworICAgIGR1bXBfcHRyKys7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXMgLSAxOyBpKyspCisgICAgeworICAgICAgICAqZHVtcF9wdHIgPSByZWFkX2Fub3RoZXJfaWZyX3dvcmQoKTsKKyAgICAgICAgZHVtcF9wdHIrKzsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvaWZyX3JhZGlvLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2lmcl9yYWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjI3N2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2lmcl9yYWRpby5oCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX19JRlJfUkFESU9fSF9fCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisjZGVmaW5lIF9fSUZSX1JBRElPX0hfXworLyogY2xhbmctZm9ybWF0IG9uICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyNkZWZpbmUgX0ZTTF9YQ1ZSX0hfCisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCB4Y3ZyCisgKiBAeworICovCisKKy8qISBAZmlsZSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUZSX0VPRl9TWU1CT0wgICAgICAgICAgKDB4RkVFRDBFMEZVKSAvKiA8IERlbm90ZXMgdGhlICJFbmQgb2YgRmlsZSIgZm9yIElGUiBkYXRhICovCisjZGVmaW5lIElGUl9WRVJTSU9OX0hEUiAgICAgICAgICgweEFCQ0QwMDAwVSkgLyogPCBDb25zdGFudCB2YWx1ZSBmb3IgdXBwZXIgMTYgYml0cyBvZiBJRlIgZGF0YSBoZWFkZXIgKi8KKyNkZWZpbmUgSUZSX1ZFUlNJT05fTUFTSyAgICAgICAgKDB4MDAwMEZGRkZVKSAvKiA8IE1hc2sgZm9yIHZlcnNpb24gbnVtYmVyIChsb3dlciAxNiBiaXRzKSBvZiBJRlIgZGF0YSBoZWFkZXIgKi8KKyNkZWZpbmUgSUZSX1NXX0lEX01JTiAgICAgICAgICAgKDB4MDAwMDAwMDBVKSAvKiA8IExvd2VyIGxpbWl0IG9mIFNXIHRyaW0gSURzICovCisjZGVmaW5lIElGUl9TV19JRF9NQVggICAgICAgICAgICgweDAwMDBGRkZGVSkgLyogPCBMb3dlciBsaW1pdCBvZiBTVyB0cmltIElEcyAqLworCisjZGVmaW5lIElTX0FfU1dfSUQoeCkgICAgICAgICAgICgoSUZSX1NXX0lEX01JTiA8ICh4KSkgJiYgKElGUl9TV19JRF9NQVggPj0gKHgpKSkKKworLyogSzMgdmFsaWQgcmVnaXN0ZXJzIHN1cHBvcnQgKi8KKyNpZiAoZGVmaW5lZChDUFVfSzMyVzA0MlMxTTJDQXhfTTBQKSB8fCBkZWZpbmVkKENQVV9LMzJXMDQyUzFNMlZQSl9NMFApKQorI2RlZmluZSBJU19WQUxJRF9SRUdfQUREUih4KSAgICAoKCh4KSAmIDB4RkZGRjAwMDBVKSA9PSAweDQxMDAwMDAwVSkgLyogVmFsaWQgYWRkcmVzc2VzIGFyZSAweDQxMHh4eHh4ICovCisjZW5kaWYgLyogKGRlZmluZWQoQ1BVX0szMlcwNDJTMU0yQ0F4X00wUCkgfHwgZGVmaW5lZChDUFVfSzMyVzA0MlMxTTJWUEpfTTBQKSkgKi8KKy8qIEtXNDEgYW5kIEtXMzUvMzYgdmFsaWQgcmVnaXN0ZXJzIHN1cHBvcnQgKi8KKyNpZiAoZGVmaW5lZChDUFVfTUtXNDFaMjU2VkhUNCkgfHwgZGVmaW5lZChDUFVfTUtXNDFaNTEyVkhUNCkgfHwgXAorICAgICBkZWZpbmVkKENQVV9NS1czMVoyNTZWSFQ0KSB8fCBkZWZpbmVkKENQVV9NS1czMVo1MTJWSFQ0KSB8fCBcCisgICAgIGRlZmluZWQoQ1BVX01LVzIxWjI1NlZIVDQpIHx8IGRlZmluZWQoQ1BVX01LVzIxWjUxMlZIVDQpIHx8IFwKKyAgICAgZGVmaW5lZChDUFVfTUtXMzVBNTEyVkZQNCkgfHwgZGVmaW5lZChDUFVfTUtXMzZBNTEyVkZQNCkgKQorCisjZGVmaW5lIElTX1ZBTElEX1JFR19BRERSKHgpICAgICgoKHgpICYgMHhGRkZGMDAwMFUpID09IDB4NDAwNTAwMDBVKSAvKiBWYWxpZCBhZGRyZXNzZXMgYXJlIDB4NDAwNXh4eHggKi8KKyNlbmRpZgorCisjZGVmaW5lIE1BS0VfTUFTSyhzaXplKSAgICAgICAgICgoMSA8PCAoc2l6ZSkpIC0gMSkKKyNkZWZpbmUgTUFLRV9NQVNLU0hGVChzaXplLCBiaXRwb3MpICAoTUFLRV9NQVNLKHNpemUpIDw8IChiaXRwb3MpKQorCisjZGVmaW5lIElGUl9UWkFfQ0FQX1RVTkVfTUFTSyAgICAgICAgICAgKDB4MDAwMDAwMEZVKQorI2RlZmluZSBJRlJfVFpBX0NBUF9UVU5FX1NISUZUICAgICAgICAgICgwKQorI2RlZmluZSBJRlJfQkJGX0NBUF9UVU5FX01BU0sgICAgICAgICAgICgweDAwMEYwMDAwVSkKKyNkZWZpbmUgSUZSX0JCRl9DQVBfVFVORV9TSElGVCAgICAgICAgICAoMTYpCisjZGVmaW5lIElGUl9SRVNfVFVORTJfTUFTSyAgICAgICAgICAgICAgKDB4MDBGMDAwMDBVKQorI2RlZmluZSBJRlJfUkVTX1RVTkUyX1NISUZUICAgICAgICAgICAgICgyMCkKKworLyogXHZhciAgdHlwZWRlZiB1aW50OF90IElGUl9FUlJPUl9UICovCisvKiBcYnJpZWYgIFRoZSBJRlIgZXJyb3IgcmVwb3J0aW5nIHR5cGUuICovCisvKiBTZWUgI0lGUl9FUlJPUl9UX2VudW0gZm9yIHRoZSBlbnVtZXJhdGlvbiBkZWZpbml0aW9ucy4gKi8KK3R5cGVkZWYgdWludDhfdCBJRlJfRVJST1JfVDsKKworLyogXGJyaWVmICBUaGUgZW51bWVyYXRpb25zIHVzZWQgdG8gZGVzY3JpYmUgSUZSIGVycm9ycy4gKi8KK2VudW0gSUZSX0VSUk9SX1RfZW51bQoreworICAgIElGUl9TVUNDRVNTID0gMCwKKyAgICBJTlZBTElEX1BPSU5URVIgPSAxLCAvKiA8IE5VTEwgcG9pbnRlciBlcnJvciAqLworICAgIElOVkFMSURfREVTVF9TSVpFX1NISUZUID0gMiwgLyogPCB0aGUgYml0cyB3b24ndCBmaXQgYXMgc3BlY2lmaWVkIGluIHRoZSBkZXN0aW5hdGlvbiAqLworfTsKKworLyogXHZhciAgdHlwZWRlZiB1aW50MTZfdCBTV19UUklNX0lEX1QgKi8KKy8qIFxicmllZiAgVGhlIFNXIHRyaW0gSUQgdHlwZS4gKi8KKy8qIFNlZSAjU1dfVFJJTV9JRF9UX2VudW0gZm9yIHRoZSBlbnVtZXJhdGlvbiBkZWZpbml0aW9ucy4gKi8KK3R5cGVkZWYgdWludDE2X3QgU1dfVFJJTV9JRF9UOworCisvKiBcYnJpZWYgIFRoZSBlbnVtZXJhdGlvbnMgdXNlZCB0byBkZWZpbmUgU1cgdHJpbSBJRHMuICovCitlbnVtIFNXX1RSSU1fSURfVF9lbnVtCit7CisgICAgUV9SRUxBVElWRV9HQUlOX0JZX1BBUlQgPSAwLCAvKiA8IFEgdnMgSSByZWxhdGl2ZSBnYWluIHRyaW0gSUQgKi8KKyAgICBBRENfR0FJTiA9IDEsIC8qIDwgQURDIGdhaW4gdHJpbSBJRCAqLworICAgIFpCX0ZJTFRfVFJJTSA9IDIsIC8qIDwgQmFzZWJhbmQgQmFuZHdpZHRoIGZpbHRlciB0cmltIElEIGZvciBCTEUgKi8KKyAgICBCTEVfRklMVF9UUklNID0gMywgLyogPCBCYXNlYmFuZCBCYW5kd2lkdGggZmlsdGVyIHRyaW0gSUQgZm9yIEJMRSAqLworICAgIFRSSU1fU1RBVFVTID0gNCwgLyogPCBTdGF0dXMgcmVzdWx0IG9mIHRoZSB0cmltIHByb2Nlc3MgKGVycm9yIGluZGljYXRpb25zKSAqLworICAgIFRSSU1fVkVSU0lPTiA9IDB4QUJDRCwgLyogPCBWZXJzaW9uIG51bWJlciBvZiB0aGUgSUZSIHRyaW0gYWxnb3JpdGhtL2Zvcm1hdC4gKi8KK307CisKKy8qIFx2YXIgIHR5cGVkZWYgdWludDMyX3QgSUZSX1RSSU1fU1RBVFVTX1QgKi8KKy8qIFxicmllZiAgVGhlIGRlZmluaXRpb24gb2YgZmFpbHVyZSBiaXRzIHN0b3JlZCBpbiBJRlIgdHJpbSBzdGF0dXMgd29yZC4gKi8KKy8qIFNlZSAjSUZSX1RSSU1fU1RBVFVTX1RfZW51bSBmb3IgdGhlIGVudW1lcmF0aW9uIGRlZmluaXRpb25zLiAqLwordHlwZWRlZiB1aW50MzJfdCBJRlJfVFJJTV9TVEFUVVNfVDsKKworLyogXGJyaWVmICBUaGUgZW51bWVyYXRpb25zIHVzZWQgdG8gZGVzY3JpYmUgdHJpbSBhbGdvcml0aG0gZmFpbHVyZXMgaW4gdGhlIHN0YXR1cyBlbnRyeSBpbiBJRlIuICovCisvKiBUaGlzIGVudW0gcmVwcmVzZW50cyBtdWx0aXBsZSB2YWx1ZXMgd2hpY2ggY2FuIGJlIE9SJ2QgdG9nZXRoZXIgaW4gYSBzaW5nbGUgc3RhdHVzIHdvcmQuICovCitlbnVtIElGUl9UUklNX1NUQVRVU19UX2VudW0KK3sKKyAgICBUUklNX0FMR09SSVRITV9TVUNDRVNTID0gMCwKKyAgICBCR0FQX1ZPTFRBR0VfVFJJTV9GQUlMRUQgPSAxLCAvKiA8IGFsZ29yaXRobSBmYWlsdXJlIGluIEJHQVAgdm9sdGFnZXRyaW0gKi8KKyAgICBJUU1DX0dBSU5fQURKX0ZBSUxFRCA9IDIsIC8qIDwgYWxnb3JpdGhtIGZhaWx1cmUgaW4gSVFNQyBnYWluIHRyaW0gKi8KKyAgICBJUU1DX1BIQVNFX0FESl9GQUlMRUQgPSA0LCAvKiA8IGFsZ29yaXRobSBmYWlsdXJlIGluIElRTUMgcGhhc2UgdHJpbSAqLworICAgIElRTUNfRENfR0FJTl9BREpfRkFJTEVEID0gOCwgLyogPCAqLworICAgIEFEQ19HQUlOX1RSSU1fRkFJTEVEID0gMTAsIC8qIDwqLworICAgIFpCX0ZJTFRfVFJJTV9GQUlMRUQgPSAyMCwgLyogPCAqLworICAgIEJMRV9GSUxUX1RSSU1fRkFJTEVEID0gNDAsIC8qIDwgKi8KK307CisKKy8qIFx2YXIgIHR5cGVkZWYgc3RydWN0IElGUl9TV19UUklNX1RCTF9FTlRSWV9UICovCisvKiBcYnJpZWYgIFN0cnVjdHVyZSBkZWZpbmluZyBhbiBlbnRyeSBpbiBhIHRhYmxlIHVzZWQgdG8gY29udGFpbiB2YWx1ZXMgdG8gYmUgcGFzc2VkIGJhY2sgZnJvbSBJRlIgKi8KKy8qICBoYW5kbGluZyByb3V0aW5lIHRvIFhDVlIgZHJpdmVyIHNvZnR3YXJlLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBTV19UUklNX0lEX1QgdHJpbV9pZDsgLyogPCBUaGUgYXNzaWduZWQgSUQgKi8KKyAgICB1aW50MzJfdCB0cmltX3ZhbHVlOyAvKiA8IFRoZSB2YWx1ZSBmZXRjaGVkIGZyb20gSUZSLiovCisgICAgdWludDhfdCB2YWxpZDsgLyogPCB2YWxpZGl0eSBvZiB0aGUgdHJpbV92YWx1ZSBmaWVsZCBhZnRlciBJRlIgcHJvY2Vzc2luZyBpcyBjb21wbGV0ZSAoVFJVRS9GQUxTRSkuKi8KK30gSUZSX1NXX1RSSU1fVEJMX0VOVFJZX1Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBicmllZiBSZWFkcyBhIGxvY2F0aW9uIGluIGJsb2NrIDEgSUZSIGZvciB1c2UgYnkgdGhlIHJhZGlvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyByZWFkaW5nIElGUiBkYXRhIGZyb20gZmxhc2ggbWVtb3J5IGZvciB0cmltIGxvYWRpbmcuCisgKgorICogQHBhcmFtIHJlYWRfYWRkciB0aGUgYWRkcmVzcyBpbiB0aGUgSUZSIHRvIGJlIHJlYWQuCisgKi8gCit1aW50MzJfdCByZWFkX3Jlc291cmNlX2lmcih1aW50MzJfdCByZWFkX2FkZHIpOworCisvKiEKKyAqIEBicmllZiBSZWFkcyBhIGxvY2F0aW9uIGluIGEgc2ltdWxhdGVkIGRhdGEgYXJyYXkgdG8gc3VwcG9ydCBJRlIgaGFuZGxlciB0ZXN0aW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyByZWFkaW5nICBkYXRhIGZyb20gYSBjb25zdCB0YWJsZSBmb3IgdGVzdGluZyB0aGUgdHJpbSBsb2FkaW5nIGZ1bmN0aW9ucy4KKyAqCisgKiBAcGFyYW0gcmVhZF9hZGRyIHRoZSBhZGRyZXNzIGluIHRoZSBJRlIgdG8gYmUgcmVhZC4KKyAqLyAKK3VpbnQzMl90IHJlYWRfcmVzb3VyY2UodWludDE2X3QgcmVzb3VyY2VfaWQpOworCisvKiEKKyAqIEBicmllZiBNYWluIElGUiBoYW5kbGVyIGZ1bmN0aW9uIGNhbGxlZCBieSBYQ1ZSIGRyaXZlciBzb2Z0d2FyZSB0byBwcm9jZXNzIHRyaW0gdGFibGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHJlYWRpbmcgIGRhdGEgZnJvbSBJRlIgYW5kIGVpdGhlciBsb2FkaW5nIHRvIHJlZ2lzdGVycyBvciBzdG9yaW5nIHRvIGEgU1cgdHJpbSB2YWx1ZXMgdGFibGUuCisgKgorICogQHBhcmFtIHN3X3RyaW1fdGJsIHBvaW50ZXIgdG8gdGhlIHRhYmxlIHVzZWQgdG8gc3RvcmUgc29mdHdhcmUgdHJpbSB2YWx1ZXMuCisgKiBAcGFyYW0gbnVtX2VudHJpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgU1cgdHJpbSB0YWJsZS4KKyAqLyAKK3ZvaWQgaGFuZGxlX2lmcihJRlJfU1dfVFJJTV9UQkxfRU5UUllfVCAqIHN3X3RyaW1fdGJsLCB1aW50MTZfdCBudW1fZW50cmllcyk7CisKKy8qIQorICogQGJyaWVmIEhhbmRsZXIgZnVuY3Rpb24gdG8gcmVhZCBkaWVfaWQgZnJvbSBJRlIgbG9jYXRpb25zLi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgcmVhZGluZyBkaWUgSUQgdmFsdWUgZm9yIGRlYnVnIGFuZCB0ZXN0aW5nIHVzYWdlLgorICoKKyAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBkaWUgSUQgZmllbGQuCisgKi8gCit1aW50MzJfdCBoYW5kbGVfaWZyX2RpZV9pZCh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgSGFuZGxlciBmdW5jdGlvbiB0byByZWFkIEtXIGNoaXAgdmVyc2lvbiBmcm9tIElGUiBsb2NhdGlvbnMuLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyByZWFkaW5nIEtXIGNoaXAgdmVyc2lvbiBmb3IgZGVidWcgYW5kIHRlc3RpbmcgdXNhZ2UuCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIEtXIHZlcnNpb24gZmllbGQuCisgKi8gCit1aW50MzJfdCBoYW5kbGVfaWZyX2RpZV9rd190eXBlKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBEZWJ1ZyBmdW5jdGlvbiB0byBkdW1wIHRoZSBJRlIgY29udGVudHMgdG8gYSBSQU0gYXJyYXkuCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHJlYWRpbmcgIGRhdGEgZnJvbSBJRlIgYW5kIHN0b3JpbmcgdG8gYSBSQU0gYXJyYXkgZm9yIGRlYnVnLgorICoKKyAqIEBwYXJhbSBkdW1wX3RibCBwb2ludGVyIHRvIHRoZSB0YWJsZSB1c2VkIHRvIHN0b3JlIElGUiBlbnRyeSB2YWx1ZXMuCisgKiBAcGFyYW0gbnVtX2VudHJpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgZHVtcCB0YWJsZS4KKyAqLyAKK3ZvaWQgZHVtcF9pZnIodWludDMyX3QgKiBkdW1wX3RibCwgdWludDhfdCBudW1fZW50cmllcyk7CisKKyNlbmRpZiAvKl9fSUZSX1JBRElPX0hfXyAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbG9ja19jb25maWcuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Nsb2NrX2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NzdmNDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbG9ja19jb25maWcuYwpAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBIb3cgdG8gc2V0dXAgY2xvY2sgdXNpbmcgY2xvY2sgZHJpdmVyIGZ1bmN0aW9uczoKKyAqCisgKiAxLiBDTE9DS19TZXRTaW1TYWZlRGl2cywgdG8gbWFrZSBzdXJlIGNvcmUgY2xvY2ssIGJ1cyBjbG9jaywgZmxleGJ1cyBjbG9jaworICogICAgYW5kIGZsYXNoIGNsb2NrIGFyZSBpbiBhbGxvd2VkIHJhbmdlIGR1cmluZyBjbG9jayBtb2RlIHN3aXRjaC4KKyAqCisgKiAyLiBDYWxsIENMT0NLX09zYzBJbml0IHRvIHNldHVwIE9TQyBjbG9jaywgaWYgaXQgaXMgdXNlZCBpbiB0YXJnZXQgbW9kZS4KKyAqCisgKiAzLiBTZXQgTUNHIGNvbmZpZ3VyYXRpb24sIE1DRyBpbmNsdWRlcyB0aHJlZSBwYXJ0czogRkxMIGNsb2NrLCBQTEwgY2xvY2sgYW5kCisgKiAgICBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2soTUNHSVJDTEspLiBGb2xsb3cgdGhlIHN0ZXBzIHRvIHNldHVwOgorICoKKyAqICAgIDEpLiBDYWxsIENMT0NLX0Jvb3RUb1h4eE1vZGUgdG8gc2V0IE1DRyB0byB0YXJnZXQgbW9kZS4KKyAqCisgKiAgICAyKS4gSWYgdGFyZ2V0IG1vZGUgaXMgRkJJL0JMUEkvUEJJIG1vZGUsIHRoZSBNQ0dJUkNMSyBoYXMgYmVlbiBjb25maWd1cmVkCisgKiAgICAgICAgY29ycmVjdGx5LiBGb3Igb3RoZXIgbW9kZXMsIG5lZWQgdG8gY2FsbCBDTE9DS19TZXRJbnRlcm5hbFJlZkNsa0NvbmZpZworICogICAgICAgIGV4cGxpY2l0bHkgdG8gc2V0dXAgTUNHSVJDTEsuCisgKgorICogICAgMykuIERvbid0IG5lZWQgdG8gY29uZmlndXJlIEZMTCBleHBsaWNpdGx5LCBiZWNhdXNlIGlmIHRhcmdldCBtb2RlIGlzIEZMTAorICogICAgICAgIG1vZGUsIHRoZW4gRkxMIGhhcyBiZWVuIGNvbmZpZ3VyZWQgYnkgdGhlIGZ1bmN0aW9uIENMT0NLX0Jvb3RUb1h4eE1vZGUsCisgKiAgICAgICAgaWYgdGhlIHRhcmdldCBtb2RlIGlzIG5vdCBGTEwgbW9kZSwgdGhlIEZMTCBpcyBkaXNhYmxlZC4KKyAqCisgKiAgICA0KS4gSWYgdGFyZ2V0IG1vZGUgaXMgUEVFL1BCRS9QRUkvUEJJIG1vZGUsIHRoZW4gdGhlIHJlbGF0ZWQgUExMIGhhcyBiZWVuCisgKiAgICAgICAgc2V0dXAgYnkgQ0xPQ0tfQm9vdFRvWHh4TW9kZS4gSW4gRkJFL0ZCSS9GRUUvRkJFIG1vZGUsIHRoZSBQTEwgY291bGQKKyAqICAgICAgICBiZSBlbmFibGVkIGluZGVwZW5kZW50bHksIGNhbGwgQ0xPQ0tfRW5hYmxlUGxsMCBleHBsaWNpdGx5IGluIHRoaXMgY2FzZS4KKyAqCisgKiA0LiBDYWxsIENMT0NLX1NldFNpbUNvbmZpZyB0byBzZXQgdGhlIGNsb2NrIGNvbmZpZ3VyYXRpb24gaW4gU0lNLgorICovCisKKy8qIFRFWFQgQkVMT1cgSVMgVVNFRCBBUyBTRVRUSU5HIEZPUiBUSEUgQ0xPQ0tTIFRPT0wgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyEhQ2xvY2tzUHJvZmlsZQorcHJvZHVjdDogQ2xvY2tzIHYxLjAKK3Byb2Nlc3NvcjogTUtXNDFaNTEyeHh4NAorcGFja2FnZV9pZDogTUtXNDFaNTEyVkhUNAorbWN1X2RhdGE6IGtzZGsyXzAKK3Byb2Nlc3Nvcl92ZXJzaW9uOiAwLjEuMjgKK2JvYXJkOiBGUkRNLUtXNDFaCisgKiBCRSBDQVJFRlVMIE1PRElGWUlORyBUSElTIENPTU1FTlQgLSBJVCBJUyBZQU1MIFNFVFRJTkdTIEZPUiBUSEUgQ0xPQ0tTIFRPT0wgKiovCisKKyNpbmNsdWRlICJmc2xfcnRjLmgiCisjaW5jbHVkZSAiY2xvY2tfY29uZmlnLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUlRDX09TQ19DQVBfTE9BRF8wUEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwVSAgLyohPCBSVEMgb3NjaWxsYXRvciBjYXBhY2l0eSBsb2FkOiAwcEYgKi8KKyNkZWZpbmUgU0lNX0xQVUFSVF9DTEtfU0VMX09TQ0VSQ0xLX0NMSyAgICAgICAgICAgICAgICAgICAyVSAgLyohPCBMUFVBUlQgY2xvY2sgc2VsZWN0OiBPU0NFUkNMSyBjbG9jayAqLworI2RlZmluZSBTSU1fT1NDMzJLU0VMX09TQzMyS0NMS19DTEsgICAgICAgICAgICAgICAgICAgICAgIDBVICAvKiE8IE9TQzMyS1NFTCBzZWxlY3Q6IE9TQzMyS0NMSyBjbG9jayAqLworI2RlZmluZSBTSU1fVFBNX0NMS19TRUxfT1NDRVJDTEtfQ0xLICAgICAgICAgICAgICAgICAgICAgIDJVICAvKiE8IFRQTSBjbG9jayBzZWxlY3Q6IE9TQ0VSQ0xLIGNsb2NrICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTeXN0ZW0gY2xvY2sgZnJlcXVlbmN5LiAqLworZXh0ZXJuIHVpbnQzMl90IFN5c3RlbUNvcmVDbG9jazsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKkZVTkNUSU9OKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZ1bmN0aW9uIE5hbWUgOiBDTE9DS19DT05GSUdfRmxsU3RhYmxlRGVsYXkKKyAqIERlc2NyaXB0aW9uICAgOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGVsYXkgZm9yIEZMTCBzdGFibGUuCisgKgorICpFTkQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIENMT0NLX0NPTkZJR19GbGxTdGFibGVEZWxheSh2b2lkKQoreworICAgIHVpbnQzMl90IGkgPSAzMDAwMFU7CisKKyAgICB3aGlsZSAoaS0tKQorICAgIHsKKyAgICAgICAgX19OT1AoKTsKKyAgICB9Cit9CisKKy8qRlVOQ1RJT04qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRnVuY3Rpb24gTmFtZSA6IENMT0NLX0NPTkZJR19TZXRSdGNDbG9jaworICogRGVzY3JpcHRpb24gICA6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmluZyBSVEMgY2xvY2sKKyAqCisgKkVORCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgQ0xPQ0tfQ09ORklHX1NldFJ0Y0Nsb2NrKCkKK3sKKyAgICAvKiBSVEMgY2xvY2sgZ2F0ZSBlbmFibGUgKi8KKyAgICBDTE9DS19FbmFibGVDbG9jayhrQ0xPQ0tfUnRjMCk7CisKKyAgICAvKiBTZXQgUlRDX1RTUiBpZiB0aGVyZSBpcyBmYXVsdCB2YWx1ZSBpbiBSVEMgKi8KKyAgICBpZiAoUlRDLT5TUiAmIFJUQ19TUl9USUZfTUFTSykKKyAgICB7CisgICAgICAgIFJUQyAtPiBUU1IgPSBSVEMgLT4gVFNSOworICAgIH0KKworICAgIC8qIFJUQyBjbG9jayBnYXRlIGRpc2FibGUgKi8KKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soa0NMT0NLX1J0YzApOworfQorCisvKkZVTkNUSU9OKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZ1bmN0aW9uIE5hbWUgOiBDTE9DS19DT05GSUdfRW5hYmxlUnRjT3NjCisgKiBEZXNjcmlwdGlvbiAgIDogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsaW5nIFJUQyBvc2NpbGxhdG9yCisgKiBQYXJhbSBjYXBMb2FkIDogT3NjaWxsYXRvciBjYXBhY2l0eSBsb2FkCisgKgorICpFTkQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIENMT0NLX0NPTkZJR19FbmFibGVSdGNPc2ModWludDMyX3QgY2FwTG9hZCkKK3sKKyAgICAvKiBSVEMgY2xvY2sgZ2F0ZSBlbmFibGUgKi8KKyAgICBDTE9DS19FbmFibGVDbG9jayhrQ0xPQ0tfUnRjMCk7CisKKyAgICBpZiAoKFJUQy0+Q1IgJiBSVENfQ1JfT1NDRV9NQVNLKSA9PSAwdSkgICAvKiBPbmx5IGlmIHRoZSBSdGMgb3NjaWxsYXRvciBpcyBub3QgYWxyZWFkeSBlbmFibGVkICovCisgICAgeworICAgICAgICAvKiBTZXQgdGhlIHNwZWNpZmllZCBjYXBhY2l0b3IgY29uZmlndXJhdGlvbiBmb3IgdGhlIFJUQyBvc2NpbGxhdG9yICovCisgICAgICAgIFJUQ19TZXRPc2NDYXBMb2FkKFJUQywgY2FwTG9hZCk7CisgICAgICAgIC8qIEVuYWJsZSB0aGUgUlRDIDMyS0h6IG9zY2lsbGF0b3IgKi8KKyAgICAgICAgUlRDLT5DUiB8PSBSVENfQ1JfT1NDRV9NQVNLOworICAgIH0KKworICAgIC8qIFJUQyBjbG9jayBnYXRlIGRpc2FibGUgKi8KKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soa0NMT0NLX1J0YzApOworICAgIENMT0NLX1NldFh0YWwzMkZyZXEoMzI3NjgpOworfQorCisvKkZVTkNUSU9OKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZ1bmN0aW9uIE5hbWUgOiBCT0FSRF9SZk9zY0luaXQKKyAqIERlc2NyaXB0aW9uICAgOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0dXAgUmVmIG9zY2lsbGF0b3IgZm9yIEtXNDBfNTEyLgorICoKKyAqRU5EKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIEJPQVJEX1JmT3NjSW5pdCh2b2lkKQoreworICAgIHVpbnQzMl90IHRlbXBUcmltOworICAgIHVpbnQ4X3QgcmV2SWQ7CisKKyAgICAvKiBPYnRhaW4gUkVWIElEIGZyb20gU0lNICovCisgICAgcmV2SWQgPSAodWludDhfdCkoKHVpbnQzMl90KShTSU0tPlNESUQgJiBTSU1fU0RJRF9SRVZJRF9NQVNLKSA+PiBTSU1fU0RJRF9SRVZJRF9TSElGVCk7CisKKyAgICBpZiAoMCA9PSByZXZJZCkKKyAgICB7CisgICAgICAgIHRlbXBUcmltID0gUlNJTS0+QU5BX1RSSU07CisgICAgICAgIFJTSU0tPkFOQV9UUklNIHw9IFJTSU1fQU5BX1RSSU1fQkJfTERPX1hPX1RSSU1fTUFTSzsgICAgICAgICAgICAvKiBTZXQgbWF4IHRyaW0gZm9yIEJCIExETyBmb3IgWE8gKi8KKyAgICB9LyogV29ya2Fyb3VuZCBmb3IgUmV2IDEuMCBYVEFMIHN0YXJ0dXAgYW5kIEFEQyBhbmFsb2cgZGlhZ25vc3RpY3MgY2lyY3VpdHJ5ICovCisKKyAgICAvKiBUdXJuIG9uIGNsb2NrcyBmb3IgdGhlIFhDVlIgKi8KKworICAgIC8qIEVuYWJsZSBSRiBPU0MgaW4gUlNJTSBhbmQgd2FpdCBmb3IgcmVhZHkgKi8KKyAgICBSU0lNLT5DT05UUk9MID0gKChSU0lNLT5DT05UUk9MICYgflJTSU1fQ09OVFJPTF9SRl9PU0NfRU5fTUFTSykgfCBSU0lNX0NPTlRST0xfUkZfT1NDX0VOKDEpKTsKKworICAgIC8qIEVSUjAxMDIyNCAqLworICAgIFJTSU0tPlJGX09TQ19DVFJMIHw9CisgICAgICAgIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19PVlJEX0VOX01BU0s7ICAgLyogUHJldmVudCBYVEFMX09VVF9FTiBmcm9tIGdlbmVyYXRpbmcgWFRBTF9PVVQgcmVxdWVzdCAqLworCisgICAgd2hpbGUgKChSU0lNLT5DT05UUk9MICYgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWV9NQVNLKSA9PSAwKTsgICAgICAvKiBXYWl0IGZvciBSRl9PU0NfUkVBRFkgKi8KKworICAgIGlmICgwID09IHJldklkKQorICAgIHsKKyAgICAgICAgU0lNLT5TQ0dDNSB8PSBTSU1fU0NHQzVfUEhZRElHX01BU0s7CisgICAgICAgIFhDVlJfVFNNLT5PVlJEMCB8PSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkRfRU5fTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkRfTUFTSzsgLyogRm9yY2UgQURDIERBQyBMRE8gb24gdG8gcHJldmVudCBCR0FQIGZhaWx1cmUgKi8KKworICAgICAgICBSU0lNLT5BTkFfVFJJTSA9IHRlbXBUcmltOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgTERPIHRyaW0gc2V0dGluZ3MgKi8KKyAgICB9LyogV29ya2Fyb3VuZCBmb3IgUmV2IDEuMCBYVEFMIHN0YXJ0dXAgYW5kIEFEQyBhbmFsb2cgZGlhZ25vc3RpY3MgY2lyY3VpdHJ5ICovCisKK30KKworLypGVU5DVElPTioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGdW5jdGlvbiBOYW1lIDogQk9BUkRfSW5pdE9zYzAKKyAqIERlc2NyaXB0aW9uICAgOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0dXAgTUNHIE9TQyB3aXRoIFJlZiBvc2NpbGxhdG9yIGZvciBLVzQwXzUxMi4KKyAqCisgKkVORCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBCT0FSRF9Jbml0T3NjMCh2b2lkKQoreworICAgIGNvbnN0IG9zY19jb25maWdfdCBvc2NDb25maWcgPQorICAgIHsKKyAgICAgICAgLmZyZXEgPSBCT0FSRF9YVEFMMF9DTEtfSFosIC53b3JrTW9kZSA9IGtPU0NfTW9kZUV4dCwKKyAgICB9OworCisgICAgLyogSW5pdGlhbGl6ZXMgT1NDMCBhY2NvcmRpbmcgdG8gcHJldmlvdXMgY29uZmlndXJhdGlvbiB0byBtZWV0IFJlZiBPU0MgbmVlZHMuICovCisgICAgQ0xPQ0tfSW5pdE9zYzAoJm9zY0NvbmZpZyk7CisKKyAgICAvKiBQYXNzaW5nIHRoZSBYVEFMMCBmcmVxdWVuY3kgdG8gY2xvY2sgZHJpdmVyLiAqLworICAgIENMT0NLX1NldFh0YWwwRnJlcShCT0FSRF9YVEFMMF9DTEtfSFopOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKiogQ29uZmlndXJhdGlvbiBCT0FSRF9Cb290Q2xvY2tSVU4gKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBURVhUIEJFTE9XIElTIFVTRUQgQVMgU0VUVElORyBGT1IgVEhFIENMT0NLUyBUT09MICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCishIUNvbmZpZ3VyYXRpb24KK25hbWU6IEJPQVJEX0Jvb3RDbG9ja1JVTgorb3V0cHV0czoKKy0ge2lkOiBCdXNfY2xvY2sub3V0RnJlcSwgdmFsdWU6IDIzLjk4NjE3NiBNSHp9CistIHtpZDogQ29yZV9jbG9jay5vdXRGcmVxLCB2YWx1ZTogNDcuOTcyMzUyIE1Ien0KKy0ge2lkOiBFUkNMSzMySy5vdXRGcmVxLCB2YWx1ZTogMzIuNzY4IGtIen0KKy0ge2lkOiBGbGFzaF9jbG9jay5vdXRGcmVxLCB2YWx1ZTogMjMuOTg2MTc2IE1Ien0KKy0ge2lkOiBMUE9fY2xvY2sub3V0RnJlcSwgdmFsdWU6IDEga0h6fQorLSB7aWQ6IExQVUFSVDBDTEsub3V0RnJlcSwgdmFsdWU6IDMyIE1Ien0KKy0ge2lkOiBNQ0dGTExDTEsub3V0RnJlcSwgdmFsdWU6IDQ3Ljk3MjM1MiBNSHp9CistIHtpZDogTUNHSVJDTEsub3V0RnJlcSwgdmFsdWU6IDMyLjc2OCBrSHp9CistIHtpZDogT1NDRVJDTEsub3V0RnJlcSwgdmFsdWU6IDMyIE1Ien0KKy0ge2lkOiBTeXN0ZW1fY2xvY2sub3V0RnJlcSwgdmFsdWU6IDQ3Ljk3MjM1MiBNSHp9CistIHtpZDogVFBNQ0xLLm91dEZyZXEsIHZhbHVlOiAzMiBNSHp9CitzZXR0aW5nczoKKy0ge2lkOiBNQ0dNb2RlLCB2YWx1ZTogRkVFfQorLSB7aWQ6IExQVUFSVDBDbGtDb25maWcsIHZhbHVlOiAneWVzJ30KKy0ge2lkOiBNQ0cuRkNSRElWLnNjYWxlLCB2YWx1ZTogJzEnfQorLSB7aWQ6IE1DRy5GTExfbXVsLnNjYWxlLCB2YWx1ZTogJzE0NjQnfQorLSB7aWQ6IE1DRy5JUkVGUy5zZWwsIHZhbHVlOiBNQ0cuRlJESVZ9CistIHtpZDogTUNHLk9TQ1NFTC5zZWwsIHZhbHVlOiBSVENfMzJLLk9TQ0NMSzMyS30KKy0ge2lkOiBNQ0dfQzFfSVJDTEtFTl9DRkcsIHZhbHVlOiBFbmFibGVkfQorLSB7aWQ6IFJUQ19DUl9PU0NFX0NGRywgdmFsdWU6IE9zY2lsbGF0b3JfZW5hYmxlZH0KKy0ge2lkOiBTSU0uTFBVQVJUMFNSQ1NFTC5zZWwsIHZhbHVlOiBSRUZPU0MuT1NDQ0xLfQorLSB7aWQ6IFNJTS5UUE1TUkNTRUwuc2VsLCB2YWx1ZTogUkVGT1NDLk9TQ0NMS30KKy0ge2lkOiBUUE1DbGtDb25maWcsIHZhbHVlOiAneWVzJ30KK3NvdXJjZXM6CistIHtpZDogUkVGT1NDLk9TQy5vdXRGcmVxLCB2YWx1ZTogMzIgTUh6LCBlbmFibGVkOiB0cnVlfQorLSB7aWQ6IFJUQ18zMksuT1NDMzJrSHoub3V0RnJlcSwgdmFsdWU6IDMyLjc2OCBrSHosIGVuYWJsZWQ6IHRydWV9CisgKiBCRSBDQVJFRlVMIE1PRElGWUlORyBUSElTIENPTU1FTlQgLSBJVCBJUyBZQU1MIFNFVFRJTkdTIEZPUiBUSEUgQ0xPQ0tTIFRPT0wgKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMgZm9yIEJPQVJEX0Jvb3RDbG9ja1JVTiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY29uc3QgbWNnX2NvbmZpZ190IG1jZ0NvbmZpZ19CT0FSRF9Cb290Q2xvY2tSVU4gPQoreworICAgIC5tY2dNb2RlID0ga01DR19Nb2RlRkVFLCAgICAgICAgICAgICAgICAgIC8qIEZFRSAtIEZMTCBFbmdhZ2VkIEV4dGVybmFsICovCisgICAgLmlyY2xrRW5hYmxlTW9kZSA9IGtNQ0dfSXJjbGtFbmFibGUsICAgICAgLyogTUNHSVJDTEsgZW5hYmxlZCwgTUNHSVJDTEsgZGlzYWJsZWQgaW4gU1RPUCBtb2RlICovCisgICAgLmlyY3MgPSBrTUNHX0lyY1Nsb3csICAgICAgICAgICAgICAgICAgICAgLyogU2xvdyBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgc2VsZWN0ZWQgKi8KKyAgICAuZmNyZGl2ID0gMHgwVSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IElSQyBkaXZpZGVyOiBkaXZpZGVkIGJ5IDEgKi8KKyAgICAuZnJkaXYgPSAweDBVLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGTEwgcmVmZXJlbmNlIGNsb2NrIGRpdmlkZXI6IGRpdmlkZWQgYnkgMSAqLworICAgIC5kcnMgPSBrTUNHX0Ryc01pZCwgICAgICAgICAgICAgICAgICAgICAgIC8qIE1pZCBmcmVxdWVuY3kgcmFuZ2UgKi8KKyAgICAuZG14MzIgPSBrTUNHX0RteDMyRmluZSwgICAgICAgICAgICAgICAgICAvKiBEQ08gaXMgZmluZS10dW5lZCBmb3IgbWF4aW11bSBmcmVxdWVuY3kgd2l0aCAzMi43Njgga0h6IHJlZmVyZW5jZSAqLworICAgIC5vc2NzZWwgPSBrTUNHX09zY3NlbFJ0YywgICAgICAgICAgICAgICAgIC8qIFNlbGVjdHMgMzIga0h6IFJUQyBPc2NpbGxhdG9yICovCit9OworY29uc3Qgc2ltX2Nsb2NrX2NvbmZpZ190IHNpbUNvbmZpZ19CT0FSRF9Cb290Q2xvY2tSVU4gPQoreworICAgIC5lcjMya1NyYyA9IFNJTV9PU0MzMktTRUxfT1NDMzJLQ0xLX0NMSywgIC8qIE9TQzMyS1NFTCBzZWxlY3Q6IE9TQzMyS0NMSyBjbG9jayAqLworICAgIC5jbGtkaXYxID0gMHgxMDAwMFUsICAgICAgICAgICAgICAgICAgICAgIC8qIFNJTV9DTEtESVYxIC0gT1VURElWMTogLzEsIE9VVERJVjQ6IC8yICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZSBmb3IgQk9BUkRfQm9vdENsb2NrUlVOIGNvbmZpZ3VyYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIEJPQVJEX0Jvb3RDbG9ja1JVTih2b2lkKQoreworICAgIC8qIFNldHVwIHRoZSByZWZlcmVuY2Ugb3NjaWxsYXRvci4gKi8KKyAgICBCT0FSRF9SZk9zY0luaXQoKTsKKyAgICAvKiBTZXQgdGhlIHN5c3RlbSBjbG9jayBkaXZpZGVycyBpbiBTSU0gdG8gc2FmZSB2YWx1ZS4gKi8KKyAgICBDTE9DS19TZXRTaW1TYWZlRGl2cygpOworICAgIC8qIEVuYWJsZSBSVEMgb3NjaWxsYXRvci4gKi8KKyAgICBDTE9DS19DT05GSUdfRW5hYmxlUnRjT3NjKFJUQ19PU0NfQ0FQX0xPQURfMFBGKTsKKyAgICAvKiBJbml0aWFsaXplcyBPU0MwIGFjY29yZGluZyB0byBSZWYgT1NDIG5lZWRzLiAqLworICAgIEJPQVJEX0luaXRPc2MwKCk7CisgICAgLyogU2V0IE1DRyB0byBGRUUgbW9kZS4gKi8KKyAgICBDTE9DS19Cb290VG9GZWVNb2RlKG1jZ0NvbmZpZ19CT0FSRF9Cb290Q2xvY2tSVU4ub3Njc2VsLAorICAgICAgICAgICAgICAgICAgICAgICAgbWNnQ29uZmlnX0JPQVJEX0Jvb3RDbG9ja1JVTi5mcmRpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1jZ0NvbmZpZ19CT0FSRF9Cb290Q2xvY2tSVU4uZG14MzIsCisgICAgICAgICAgICAgICAgICAgICAgICBtY2dDb25maWdfQk9BUkRfQm9vdENsb2NrUlVOLmRycywKKyAgICAgICAgICAgICAgICAgICAgICAgIENMT0NLX0NPTkZJR19GbGxTdGFibGVEZWxheSk7CisgICAgLyogQ29uZmlndXJlIHRoZSBJbnRlcm5hbCBSZWZlcmVuY2UgY2xvY2sgKE1DR0lSQ0xLKS4gKi8KKyAgICBDTE9DS19TZXRJbnRlcm5hbFJlZkNsa0NvbmZpZyhtY2dDb25maWdfQk9BUkRfQm9vdENsb2NrUlVOLmlyY2xrRW5hYmxlTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY2dDb25maWdfQk9BUkRfQm9vdENsb2NrUlVOLmlyY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNnQ29uZmlnX0JPQVJEX0Jvb3RDbG9ja1JVTi5mY3JkaXYpOworICAgIC8qIFNldCB0aGUgY2xvY2sgY29uZmlndXJhdGlvbiBpbiBTSU0gbW9kdWxlLiAqLworICAgIENMT0NLX1NldFNpbUNvbmZpZygmc2ltQ29uZmlnX0JPQVJEX0Jvb3RDbG9ja1JVTik7CisgICAgLyogQ29uZmlndXJlIFJUQyBjbG9jay4gKi8KKyAgICBDTE9DS19DT05GSUdfU2V0UnRjQ2xvY2soKTsKKyAgICAvKiBTZXQgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlLiAqLworICAgIFN5c3RlbUNvcmVDbG9jayA9IEJPQVJEX0JPT1RDTE9DS1JVTl9DT1JFX0NMT0NLOworICAgIC8qIFNldCBMUFVBUlQwIGNsb2NrIHNvdXJjZS4gKi8KKyAgICBDTE9DS19TZXRMcHVhcnRDbG9jayhTSU1fTFBVQVJUX0NMS19TRUxfT1NDRVJDTEtfQ0xLKTsKKyAgICAvKiBTZXQgVFBNIGNsb2NrIHNvdXJjZS4gKi8KKyAgICBDTE9DS19TZXRUcG1DbG9jayhTSU1fVFBNX0NMS19TRUxfT1NDRVJDTEtfQ0xLKTsKK30KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY2xvY2tfY29uZmlnLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbG9ja19jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzE5MzkzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY2xvY2tfY29uZmlnLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0NMT0NLX0NPTkZJR19IXworI2RlZmluZSBfQ0xPQ0tfQ09ORklHX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQk9BUkRfWFRBTDBfQ0xLX0haICAgICAgICAgICAgICAgICAgICAgICAgIDMyMDAwMDAwVSAgLyohPCBCb2FyZCB4dGFsMCBmcmVxdWVuY3kgaW4gSHogKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqIENvbmZpZ3VyYXRpb24gQk9BUkRfQm9vdENsb2NrUlVOICoqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zIGZvciBCT0FSRF9Cb290Q2xvY2tSVU4gY29uZmlndXJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQk9BUkRfQk9PVENMT0NLUlVOX0NPUkVfQ0xPQ0sgICAgICAgICAgICAgIDQ3OTcyMzUyVSAgLyohPCBDb3JlIGNsb2NrIGZyZXF1ZW5jeTogNDc5NzIzNTJIeiAqLworCisvKiEgQGJyaWVmIE1DRyBzZXQgZm9yIEJPQVJEX0Jvb3RDbG9ja1JVTiBjb25maWd1cmF0aW9uLgorICovCitleHRlcm4gY29uc3QgbWNnX2NvbmZpZ190IG1jZ0NvbmZpZ19CT0FSRF9Cb290Q2xvY2tSVU47CisvKiEgQGJyaWVmIFNJTSBtb2R1bGUgc2V0IGZvciBCT0FSRF9Cb290Q2xvY2tSVU4gY29uZmlndXJhdGlvbi4KKyAqLworZXh0ZXJuIGNvbnN0IHNpbV9jbG9ja19jb25maWdfdCBzaW1Db25maWdfQk9BUkRfQm9vdENsb2NrUlVOOworLyohIEBicmllZiBPU0Mgc2V0IGZvciBCT0FSRF9Cb290Q2xvY2tSVU4gY29uZmlndXJhdGlvbi4KKyAqLworZXh0ZXJuIGNvbnN0IG9zY19jb25maWdfdCBvc2NDb25maWdfQk9BUkRfQm9vdENsb2NrUlVOOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJIGZvciBCT0FSRF9Cb290Q2xvY2tSVU4gY29uZmlndXJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMqLworCisvKiEKKyAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGV4ZWN1dGVzIGNvbmZpZ3VyYXRpb24gb2YgY2xvY2tzLgorICoKKyAqLwordm9pZCBCT0FSRF9Cb290Q2xvY2tSVU4odm9pZCk7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzKi8KKworI2VuZGlmIC8qIF9DTE9DS19DT05GSUdfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfZHNwaV9jbXNpcy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfZHNwaV9jbXNpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTIwNmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9kc3BpX2Ntc2lzLmMKQEAgLTAsMCArMSwxNjk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7IHlvdSBtYXkKKyAqIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfZHNwaV9jbXNpcy5oIgorCisjaWYgKChSVEVfU1BJMCAmJiBkZWZpbmVkKERTUEkwKSkgfHwgKFJURV9TUEkxICYmIGRlZmluZWQoRFNQSTEpKSB8fCAoUlRFX1NQSTIgJiYgZGVmaW5lZChEU1BJMikpKQorCisjZGVmaW5lIEFSTV9EU1BJX0RSVl9WRVJTSU9OIEFSTV9EUklWRVJfVkVSU0lPTl9NQUpPUl9NSU5PUigyLCAwKSAvKiBkcml2ZXIgdmVyc2lvbiAqLworCisvKgorICogQVJNQ0MgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdCB0aGUgZGF0YSBzZWN0aW9uIGF1dG9tYXRpY2FsbHksIHNvIHRoZSBkcml2ZXIKKyAqIG5lZWRzIHRvIHNwbGl0IHRoZSBkYXRhIHRvIHNlcGFyYXRlIHNlY3Rpb25zIGV4cGxpY2l0bHksIHRvIHJlZHVjZSBjb2Rlc2l6ZS4KKyAqLworI2lmIGRlZmluZWQoX19DQ19BUk0pCisjZGVmaW5lIEFSTUNDX1NFQ1RJT04oc2VjdGlvbl9uYW1lKSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKHNlY3Rpb25fbmFtZSkpKQorI2VuZGlmCisKK3N0YXRpYyBjbG9ja19pcF9uYW1lX3QgY29uc3Qgc19kc3BpQ2xvY2tbXSA9IERTUElfQ0xPQ0tTOworCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfY21zaXNfZHNwaV9yZXNvdXJjZQoreworICAgIFNQSV9UeXBlICpiYXNlOworICAgIHVpbnQzMl90IGluc3RhbmNlOworICAgIHVpbnQzMl90ICgqR2V0RnJlcSkodm9pZCk7Cit9IGNtc2lzX2RzcGlfcmVzb3VyY2VfdDsKKwordHlwZWRlZiB1bmlvbiBfY21zaXNfZHNwaV9oYW5kbGUKK3sKKyAgICBkc3BpX21hc3Rlcl9oYW5kbGVfdCBtYXN0ZXJIYW5kbGU7CisgICAgZHNwaV9zbGF2ZV9oYW5kbGVfdCBzbGF2ZUhhbmRsZTsKK30gY21zaXNfZHNwaV9oYW5kbGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2Ntc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZQoreworICAgIGNtc2lzX2RzcGlfcmVzb3VyY2VfdCAqcmVzb3VyY2U7CisgICAgY21zaXNfZHNwaV9oYW5kbGVfdCAqaGFuZGxlOworICAgIEFSTV9TUElfU2lnbmFsRXZlbnRfdCBldmVudDsKKworICAgIHVpbnQzMl90IGJhdWRSYXRlX0JwczsKKyAgICBib29sIGlzSW5pdGlhbGl6ZWQ7CisgICAgYm9vbCBpc0NvbmZpZ3VyZWQ7CisgICAgYm9vbCBpc1Bvd2VyT247Cit9IGNtc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90OworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9jbXNpc19kc3BpX2RtYV9yZXNvdXJjZQoreworICAgIERNQV9UeXBlICp0eERtYUJhc2U7CisgICAgdWludDMyX3QgdHhEbWFDaGFubmVsOworICAgIERNQU1VWF9UeXBlICp0eERtYW11eEJhc2U7CisgICAgdWludDhfdCB0eERtYVJlcXVlc3Q7CisKKyAgICBETUFfVHlwZSAqcnhEbWFCYXNlOworICAgIHVpbnQzMl90IHJ4RG1hQ2hhbm5lbDsKKyAgICBETUFNVVhfVHlwZSAqcnhEbWFtdXhCYXNlOworICAgIHVpbnQ4X3QgcnhEbWFSZXF1ZXN0OworfSBjbXNpc19kc3BpX2RtYV9yZXNvdXJjZV90OworCit0eXBlZGVmIHN0cnVjdCBfY21zaXNfZHNwaV9kbWFfZHJpdmVyX3N0YXRlCit7CisgICAgY21zaXNfZHNwaV9yZXNvdXJjZV90ICpyZXNvdXJjZTsKKyAgICBjbXNpc19kc3BpX2RtYV9yZXNvdXJjZV90ICpkbWFSZXNvdXJjZTsKKyAgICB1bmlvbiBfY21zaXNfZG1hX2hhbmRsZQorICAgIHsKKyAgICAgICAgZHNwaV9tYXN0ZXJfZG1hX2hhbmRsZV90IG1hc3RlckhhbmRsZTsKKyAgICAgICAgZHNwaV9zbGF2ZV9kbWFfaGFuZGxlX3Qgc2xhdmVIYW5kbGU7CisgICAgfSBoYW5kbGU7CisgICAgZG1hX2hhbmRsZV90IHR4SGFuZGxlOworICAgIGRtYV9oYW5kbGVfdCByeEhhbmRsZTsKKyAgICBBUk1fU1BJX1NpZ25hbEV2ZW50X3QgZXZlbnQ7CisKKyAgICB1aW50MzJfdCBiYXVkUmF0ZV9CcHM7CisgICAgYm9vbCBpc0luaXRpYWxpemVkOworICAgIGJvb2wgaXNDb25maWd1cmVkOworICAgIGJvb2wgaXNQb3dlck9uOworfSBjbXNpc19kc3BpX2RtYV9kcml2ZXJfc3RhdGVfdDsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQordHlwZWRlZiB1bmlvbiBfY21zaXNfZHNwaV9lZG1hX2hhbmRsZQoreworICAgIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3QgbWFzdGVySGFuZGxlOworICAgIGRzcGlfc2xhdmVfZWRtYV9oYW5kbGVfdCBzbGF2ZUhhbmRsZTsKK30gY21zaXNfZHNwaV9lZG1hX2hhbmRsZV90OworCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfY21zaXNfZHNwaV9lZG1hX3Jlc291cmNlCit7CisgICAgRE1BX1R5cGUgKnR4RWRtYUJhc2U7CisgICAgdWludDMyX3QgdHhFZG1hQ2hhbm5lbDsKKyAgICBETUFNVVhfVHlwZSAqdHhEbWFtdXhCYXNlOworICAgIHVpbnQ4X3QgdHhEbWFSZXF1ZXN0OworCisgICAgRE1BX1R5cGUgKnJ4RWRtYUJhc2U7CisgICAgdWludDMyX3QgcnhFZG1hQ2hhbm5lbDsKKyAgICBETUFNVVhfVHlwZSAqcnhEbWFtdXhCYXNlOworICAgIHVpbnQ4X3QgcnhEbWFSZXF1ZXN0OworCisgICAgRE1BX1R5cGUgKm1hc3RlckxpbmtFZG1hQmFzZTsKKyAgICB1aW50MzJfdCBtYXN0ZXJMaW5rQ2hhbm5lbDsKK30gY21zaXNfZHNwaV9lZG1hX3Jlc291cmNlX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9jbXNpc19kc3BpX2VkbWFfZHJpdmVyX3N0YXRlCit7CisgICAgY21zaXNfZHNwaV9yZXNvdXJjZV90ICpyZXNvdXJjZTsKKyAgICBjbXNpc19kc3BpX2VkbWFfcmVzb3VyY2VfdCAqZG1hUmVzb3VyY2U7CisgICAgY21zaXNfZHNwaV9lZG1hX2hhbmRsZV90ICpoYW5kbGU7CisgICAgZWRtYV9oYW5kbGVfdCAqZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGU7CisgICAgZWRtYV9oYW5kbGVfdCAqZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlOworICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlOworICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlOworICAgIEFSTV9TUElfU2lnbmFsRXZlbnRfdCBldmVudDsKKworICAgIHVpbnQzMl90IGJhdWRSYXRlX0JwczsKKyAgICBib29sIGlzSW5pdGlhbGl6ZWQ7CisgICAgYm9vbCBpc0NvbmZpZ3VyZWQ7CisgICAgYm9vbCBpc1Bvd2VyT247Cit9IGNtc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdDsKKyNlbmRpZgorCisvKiBEcml2ZXIgVmVyc2lvbiAqLworc3RhdGljIGNvbnN0IEFSTV9EUklWRVJfVkVSU0lPTiBzX2RzcGlEcml2ZXJWZXJzaW9uID0ge0FSTV9TUElfQVBJX1ZFUlNJT04sIEFSTV9EU1BJX0RSVl9WRVJTSU9OfTsKKworLyogRHJpdmVyIENhcGFiaWxpdGllcyAqLworc3RhdGljIGNvbnN0IEFSTV9TUElfQ0FQQUJJTElUSUVTIHNfZHNwaURyaXZlckNhcGFiaWxpdGllcyA9IHsKKyAgICAxLCAvKiBTaW1wbGV4IE1vZGUgKE1hc3RlciBhbmQgU2xhdmUpICovCisgICAgMCwgLyogVEkgU3luY2hyb25vdXMgU2VyaWFsIEludGVyZmFjZSAqLworICAgIDAsIC8qIE1pY3Jvd2lyZSBJbnRlcmZhY2UgICovCisgICAgMCAgLyogU2lnbmFsIE1vZGUgRmF1bHQgZXZlbnQ6IFxyZWYgQVJNX1NQSV9FVkVOVF9NT0RFX0ZBVUxUICovCit9OworCisvKgorICpDb21tb24gQ29udHJvbCBmdW5jdGlvbiB1c2VkIGJ5IERTUElfSW50ZXJydXB0Q29udHJvbCAvIERTUElfRWRtYUNvbnRyb2wuCisgKi8KK3N0YXRpYyBpbnQzMl90IERTUElfQ29tbW9uQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcsIGNtc2lzX2RzcGlfcmVzb3VyY2VfdCAqcmVzb3VyY2UsIGJvb2wgKmlzQ29uZmlndXJlZCkKK3sKKyAgICBkc3BpX21hc3Rlcl9jb25maWdfdCBtYXN0ZXJDb25maWc7CisgICAgRFNQSV9NYXN0ZXJHZXREZWZhdWx0Q29uZmlnKCZtYXN0ZXJDb25maWcpOworICAgIGRzcGlfc2xhdmVfY29uZmlnX3Qgc2xhdmVDb25maWc7CisgICAgRFNQSV9TbGF2ZUdldERlZmF1bHRDb25maWcoJnNsYXZlQ29uZmlnKTsKKyAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5iYXVkUmF0ZSA9IGFyZzsKKworI2lmIChkZWZpbmVkKFJURV9TUEkwX1BDU19UT19TQ0tfREVMQVkpICYmIGRlZmluZWQoUlRFX1NQSTBfU0NLX1RPX1BTQ19ERUxBWSkgJiYgXAorICAgICBkZWZpbmVkKFJURV9TUEkwX0JFVFdFRU5fVFJBTlNGRVJfREVMQVkpKQorICAgIGlmICgwVSA9PSByZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgeworICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5wY3NUb1Nja0RlbGF5SW5OYW5vU2VjID0gUlRFX1NQSTBfUENTX1RPX1NDS19ERUxBWTsKKyAgICAgICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcubGFzdFNja1RvUGNzRGVsYXlJbk5hbm9TZWMgPSBSVEVfU1BJMF9TQ0tfVE9fUFNDX0RFTEFZOworICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5iZXR3ZWVuVHJhbnNmZXJEZWxheUluTmFub1NlYyA9IFJURV9TUEkwX0JFVFdFRU5fVFJBTlNGRVJfREVMQVk7CisgICAgfQorI2VuZGlmIC8qUlRFIERTUEkwIHRybmFmZXIgZGVsYXkgdGltZSBjb25maWd1cmUgKi8KKworI2lmIChkZWZpbmVkKFJURV9TUEkxX1BDU19UT19TQ0tfREVMQVkpICYmIGRlZmluZWQoUlRFX1NQSTFfU0NLX1RPX1BTQ19ERUxBWSkgJiYgXAorICAgICBkZWZpbmVkKFJURV9TUEkxX0JFVFdFRU5fVFJBTlNGRVJfREVMQVkpKQorICAgIGlmICgxVSA9PSByZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgeworICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5wY3NUb1Nja0RlbGF5SW5OYW5vU2VjID0gUlRFX1NQSTFfUENTX1RPX1NDS19ERUxBWTsKKyAgICAgICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcubGFzdFNja1RvUGNzRGVsYXlJbk5hbm9TZWMgPSBSVEVfU1BJMV9TQ0tfVE9fUFNDX0RFTEFZOworICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5iZXR3ZWVuVHJhbnNmZXJEZWxheUluTmFub1NlYyA9IFJURV9TUEkxX0JFVFdFRU5fVFJBTlNGRVJfREVMQVk7CisgICAgfQorI2VuZGlmIC8qUlRFIERTUEkxIHRybmFmZXIgZGVsYXkgdGltZSBjb25maWd1cmUgKi8KKworI2lmIChkZWZpbmVkKFJURV9TUEkyX1BDU19UT19TQ0tfREVMQVkpICYmIGRlZmluZWQoUlRFX1NQSTJfU0NLX1RPX1BTQ19ERUxBWSkgJiYgXAorICAgICBkZWZpbmVkKFJURV9TUEkyX0JFVFdFRU5fVFJBTlNGRVJfREVMQVkpKQorICAgIGlmICgyVSA9PSByZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgeworICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5wY3NUb1Nja0RlbGF5SW5OYW5vU2VjID0gUlRFX1NQSTJfUENTX1RPX1NDS19ERUxBWTsKKyAgICAgICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcubGFzdFNja1RvUGNzRGVsYXlJbk5hbm9TZWMgPSBSVEVfU1BJMl9TQ0tfVE9fUFNDX0RFTEFZOworICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5iZXR3ZWVuVHJhbnNmZXJEZWxheUluTmFub1NlYyA9IFJURV9TUEkyX0JFVFdFRU5fVFJBTlNGRVJfREVMQVk7CisgICAgfQorI2VuZGlmIC8qUlRFIERTUEkyIHRybmFmZXIgZGVsYXkgdGltZSBjb25maWd1cmUgKi8KKworICAgIHN3aXRjaCAoY29udHJvbCAmIEFSTV9TUElfRlJBTUVfRk9STUFUX01zaykKKyAgICB7CisgICAgICAgIGNhc2UgQVJNX1NQSV9DUE9MMF9DUEhBMDogLyogQ2xvY2sgUG9sYXJpdHkgMCwgQ2xvY2sgUGhhc2UgMCovCisgICAgICAgICAgICBpZiAoRFNQSV9Jc01hc3RlcihyZXNvdXJjZS0+YmFzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuY3BvbCA9IGtEU1BJX0Nsb2NrUG9sYXJpdHlBY3RpdmVMb3c7CisgICAgICAgICAgICAgICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuY3BoYSA9IGtEU1BJX0Nsb2NrUGhhc2VGaXJzdEVkZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2xhdmVDb25maWcuY3RhckNvbmZpZy5jcG9sID0ga0RTUElfQ2xvY2tQb2xhcml0eUFjdGl2ZUxvdzsKKyAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZy5jdGFyQ29uZmlnLmNwaGEgPSBrRFNQSV9DbG9ja1BoYXNlRmlyc3RFZGdlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBUk1fU1BJX0NQT0wwX0NQSEExOiAvKiBDbG9jayBQb2xhcml0eSAwLCBDbG9jayBQaGFzZSAxKi8KKyAgICAgICAgICAgIGlmIChEU1BJX0lzTWFzdGVyKHJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5jcG9sID0ga0RTUElfQ2xvY2tQb2xhcml0eUFjdGl2ZUxvdzsKKyAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5jcGhhID0ga0RTUElfQ2xvY2tQaGFzZVNlY29uZEVkZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2xhdmVDb25maWcuY3RhckNvbmZpZy5jcG9sID0ga0RTUElfQ2xvY2tQb2xhcml0eUFjdGl2ZUxvdzsKKyAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZy5jdGFyQ29uZmlnLmNwaGEgPSBrRFNQSV9DbG9ja1BoYXNlU2Vjb25kRWRnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVJNX1NQSV9DUE9MMV9DUEhBMDogLyogQ2xvY2sgUG9sYXJpdHkgMSwgQ2xvY2sgUGhhc2UgMCovCisgICAgICAgICAgICBpZiAoRFNQSV9Jc01hc3RlcihyZXNvdXJjZS0+YmFzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuY3BvbCA9IGtEU1BJX0Nsb2NrUG9sYXJpdHlBY3RpdmVIaWdoOworICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmNwaGEgPSBrRFNQSV9DbG9ja1BoYXNlRmlyc3RFZGdlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnLmN0YXJDb25maWcuY3BvbCA9IGtEU1BJX0Nsb2NrUG9sYXJpdHlBY3RpdmVIaWdoOworICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnLmN0YXJDb25maWcuY3BoYSA9IGtEU1BJX0Nsb2NrUGhhc2VGaXJzdEVkZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFSTV9TUElfQ1BPTDFfQ1BIQTE6IC8qIENsb2NrIFBvbGFyaXR5IDEsIENsb2NrIFBoYXNlIDEqLworICAgICAgICAgICAgaWYgKERTUElfSXNNYXN0ZXIocmVzb3VyY2UtPmJhc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmNwb2wgPSBrRFNQSV9DbG9ja1BvbGFyaXR5QWN0aXZlSGlnaDsKKyAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5jcGhhID0ga0RTUElfQ2xvY2tQaGFzZVNlY29uZEVkZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2xhdmVDb25maWcuY3RhckNvbmZpZy5jcG9sID0ga0RTUElfQ2xvY2tQb2xhcml0eUFjdGl2ZUhpZ2g7CisgICAgICAgICAgICAgICAgc2xhdmVDb25maWcuY3RhckNvbmZpZy5jcGhhID0ga0RTUElfQ2xvY2tQaGFzZVNlY29uZEVkZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGNvbnRyb2wgJiBBUk1fU1BJX0RBVEFfQklUU19Nc2spIC8qIHNldHRpbmcgTnVtYmVyIG9mIERhdGEgYml0cyAqLworICAgIHsKKyAgICAgICAgaWYgKCgoKGNvbnRyb2wgJiBBUk1fU1BJX0RBVEFfQklUU19Nc2spID4+IEFSTV9TUElfREFUQV9CSVRTX1BvcykgPj0gNCkgJiYKKyAgICAgICAgICAgICgoKGNvbnRyb2wgJiBBUk1fU1BJX0RBVEFfQklUU19Nc2spID4+IEFSTV9TUElfREFUQV9CSVRTX1BvcykgPD0gMTYpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRFNQSV9Jc01hc3RlcihyZXNvdXJjZS0+YmFzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuYml0c1BlckZyYW1lID0gKChjb250cm9sICYgQVJNX1NQSV9EQVRBX0JJVFNfTXNrKSA+PiBBUk1fU1BJX0RBVEFfQklUU19Qb3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnLmN0YXJDb25maWcuYml0c1BlckZyYW1lID0gKChjb250cm9sICYgQVJNX1NQSV9EQVRBX0JJVFNfTXNrKSA+PiBBUk1fU1BJX0RBVEFfQklUU19Qb3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEFSTV9TUElfRVJST1JfREFUQV9CSVRTOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb250cm9sICYgQVJNX1NQSV9CSVRfT1JERVJfTXNrKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fU1BJX0xTQl9NU0I6IC8qIFNQSSBCaXQgb3JkZXIgZnJvbSBMU0IgdG8gTVNCICovCisgICAgICAgICAgICBpZiAoRFNQSV9Jc01hc3RlcihyZXNvdXJjZS0+YmFzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuZGlyZWN0aW9uID0ga0RTUElfTHNiRmlyc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFSTV9TUElfTVNCX0xTQjogLyogU1BJIEJpdCBvcmRlciBmcm9tIE1TQiB0byBMU0IgKi8KKyAgICAgICAgICAgIGlmIChEU1BJX0lzTWFzdGVyKHJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5kaXJlY3Rpb24gPSBrRFNQSV9Nc2JGaXJzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoRFNQSV9Jc01hc3RlcihyZXNvdXJjZS0+YmFzZSkpCisgICAgeworICAgICAgICBpZiAoKmlzQ29uZmlndXJlZCkKKyAgICAgICAgeworICAgICAgICAgICAgRFNQSV9EZWluaXQocmVzb3VyY2UtPmJhc2UpOworICAgICAgICB9CisgICAgICAgIERTUElfTWFzdGVySW5pdChyZXNvdXJjZS0+YmFzZSwgJm1hc3RlckNvbmZpZywgcmVzb3VyY2UtPkdldEZyZXEoKSk7CisgICAgICAgICppc0NvbmZpZ3VyZWQgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoKmlzQ29uZmlndXJlZCkKKyAgICAgICAgeworICAgICAgICAgICAgRFNQSV9EZWluaXQocmVzb3VyY2UtPmJhc2UpOworICAgICAgICB9CisgICAgICAgIERTUElfU2xhdmVJbml0KHJlc291cmNlLT5iYXNlLCAmc2xhdmVDb25maWcpOworICAgICAgICAqaXNDb25maWd1cmVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBBUk1fRFJJVkVSX1ZFUlNJT04gRFNQSXhfR2V0VmVyc2lvbih2b2lkKQoreworICAgIHJldHVybiBzX2RzcGlEcml2ZXJWZXJzaW9uOworfQorCitzdGF0aWMgQVJNX1NQSV9DQVBBQklMSVRJRVMgRFNQSXhfR2V0Q2FwYWJpbGl0aWVzKHZvaWQpCit7CisgICAgcmV0dXJuIHNfZHNwaURyaXZlckNhcGFiaWxpdGllczsKK30KKworI2VuZGlmCisKKyNpZiAoUlRFX1NQSTBfRE1BX0VOIHx8IFJURV9TUEkxX0RNQV9FTiB8fCBSVEVfU1BJMl9ETUFfRU4pCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisKK3ZvaWQgS1NES19EU1BJX01hc3RlckVkbWFDYWxsYmFjayhTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBzdGF0dXNfdCBzdGF0dXMsIHZvaWQgKnVzZXJEYXRhKQoreworICAgIHVpbnQzMl90IGV2ZW50ID0gMFU7CisKKyAgICBpZiAoa1N0YXR1c19TdWNjZXNzID09IHN0YXR1cykKKyAgICB7CisgICAgICAgIGV2ZW50ID0gQVJNX1NQSV9FVkVOVF9UUkFOU0ZFUl9DT01QTEVURTsKKyAgICB9CisKKyAgICBpZiAoa1N0YXR1c19EU1BJX091dE9mUmFuZ2UgPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fU1BJX0VWRU5UX0RBVEFfTE9TVDsKKyAgICB9CisgICAgLyogVXNlciBkYXRhIGlzIGFjdHVhbGx5IENNU0lTIGRyaXZlciBjYWxsYmFjay4gKi8KKyAgICBpZiAoKDBVICE9IGV2ZW50KSAmJiAodXNlckRhdGEpKQorICAgIHsKKyAgICAgICAgKChBUk1fU1BJX1NpZ25hbEV2ZW50X3QpdXNlckRhdGEpKGV2ZW50KTsKKyAgICB9Cit9Cit2b2lkIEtTREtfRFNQSV9TbGF2ZUVkbWFDYWxsYmFjayhTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIHN0YXR1c190IHN0YXR1cywgdm9pZCAqdXNlckRhdGEpCit7CisgICAgdWludDMyX3QgZXZlbnQgPSAwVTsKKworICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fU1BJX0VWRU5UX1RSQU5TRkVSX0NPTVBMRVRFOworICAgIH0KKworICAgIGlmIChrU3RhdHVzX0RTUElfT3V0T2ZSYW5nZSA9PSBzdGF0dXMpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9TUElfRVZFTlRfREFUQV9MT1NUOworICAgIH0KKyAgICAvKiBVc2VyIGRhdGEgaXMgYWN0dWFsbHkgQ01TSVMgZHJpdmVyIGNhbGxiYWNrLiAqLworICAgIGlmICgoMFUgIT0gZXZlbnQpICYmICh1c2VyRGF0YSkpCisgICAgeworICAgICAgICAoKEFSTV9TUElfU2lnbmFsRXZlbnRfdCl1c2VyRGF0YSkoZXZlbnQpOworICAgIH0KK30KKworc3RhdGljIGludDMyX3QgRFNQSV9FZG1hSW5pdGlhbGl6ZShBUk1fU1BJX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQsIGNtc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdCAqZHNwaSkKK3sKKyAgICBpZiAoZHNwaS0+aXNJbml0aWFsaXplZCkKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworICAgIH0KKworICAgIGRzcGktPmlzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIGRzcGktPmV2ZW50ID0gY2JfZXZlbnQ7CisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUElfRWRtYVVuaW5pdGlhbGl6ZShjbXNpc19kc3BpX2VkbWFfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgZHNwaS0+aXNJbml0aWFsaXplZCA9IGZhbHNlOworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlLCBjbXNpc19kc3BpX2VkbWFfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgc3dpdGNoIChzdGF0ZSkKKyAgICB7CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX09GRjoKKyAgICAgICAgICAgIGlmIChkc3BpLT5pc1Bvd2VyT24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRFNQSV9EZWluaXQoZHNwaS0+cmVzb3VyY2UtPmJhc2UpOworICAgICAgICAgICAgICAgIERNQU1VWF9EaXNhYmxlQ2hhbm5lbChkc3BpLT5kbWFSZXNvdXJjZS0+cnhEbWFtdXhCYXNlLCBkc3BpLT5kbWFSZXNvdXJjZS0+cnhFZG1hQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgRE1BTVVYX0Rpc2FibGVDaGFubmVsKGRzcGktPmRtYVJlc291cmNlLT50eERtYW11eEJhc2UsIGRzcGktPmRtYVJlc291cmNlLT50eEVkbWFDaGFubmVsKTsKKyAgICAgICAgICAgICAgICBkc3BpLT5pc1Bvd2VyT24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBkc3BpLT5pc0NvbmZpZ3VyZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFSTV9QT1dFUl9MT1c6CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfRlVMTDoKKyAgICAgICAgICAgIGlmICghZHNwaS0+aXNJbml0aWFsaXplZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIEVuYWJsZSBDbG9jayBnYXRlICovCisgICAgICAgICAgICBDTE9DS19FbmFibGVDbG9jayhzX2RzcGlDbG9ja1tkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2VdKTsKKyAgICAgICAgICAgIGRzcGktPmlzUG93ZXJPbiA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgRFNQSV9FZG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0sIGNtc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdCAqZHNwaSkKK3sKKyAgICBpbnQzMl90IHJldDsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgZHNwaV90cmFuc2Zlcl90IHhmZXI7CisKKyAgICB4ZmVyLnJ4RGF0YSA9IE5VTEw7CisgICAgeGZlci50eERhdGEgPSAodWludDhfdCAqKWRhdGE7CisgICAgeGZlci5kYXRhU2l6ZSA9IG51bTsKKworICAgIGlmIChEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICB7CisjaWYgKGRlZmluZWQoUlRFX1NQSTBfTUFTVEVSX1BDU19QSU5fU0VMKSkKKyAgICAgICAgaWYgKDBVID09IGRzcGktPnJlc291cmNlLT5pbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX01hc3RlckN0YXIwIHwgUlRFX1NQSTBfTUFTVEVSX1BDU19QSU5fU0VMOworICAgICAgICB9CisjZW5kaWYgLyogRFNQSTAgUENTIHNlbGVjdCBjb25maWd1cmF0aW9uICovCisjaWYgKGRlZmluZWQoUlRFX1NQSTFfTUFTVEVSX1BDU19QSU5fU0VMKSkKKyAgICAgICAgaWYgKDFVID09IGRzcGktPnJlc291cmNlLT5pbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX01hc3RlckN0YXIwIHwgUlRFX1NQSTFfTUFTVEVSX1BDU19QSU5fU0VMOworICAgICAgICB9CisjZW5kaWYgLyogRFNQSTEgUENTIHNlbGVjdCBjb25maWd1cmF0aW9uICovCisjaWYgKGRlZmluZWQoUlRFX1NQSTJfTUFTVEVSX1BDU19QSU5fU0VMKSkKKyAgICAgICAgaWYgKDJVID09IGRzcGktPnJlc291cmNlLT5pbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX01hc3RlckN0YXIwIHwgUlRFX1NQSTJfTUFTVEVSX1BDU19QSU5fU0VMOworICAgICAgICB9CisjZW5kaWYgLyogRFNQSTIgUENTIHNlbGVjdCBjb25maWd1cmF0aW9uICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIERTUEkgc2xhdmUgdXNlIEN0YXIwIHNldHRpbmcgYW5kIHNsYXZlIGNhbiBvbmx5IHVzZSBQQ1MwLiAqLworICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfU2xhdmVDdGFyMDsKKyAgICB9CisKKyAgICBpZiAoRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBEU1BJX01hc3RlclRyYW5zZmVyRURNQShkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlLCAmeGZlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IERTUElfU2xhdmVUcmFuc2ZlckVETUEoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLCAmeGZlcik7CisgICAgfQorCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19EU1BJX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJX0VkbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSwgY21zaXNfZHNwaV9lZG1hX2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIGludDMyX3QgcmV0OworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBkc3BpX3RyYW5zZmVyX3QgeGZlcjsKKworICAgIHhmZXIudHhEYXRhID0gTlVMTDsKKyAgICB4ZmVyLnJ4RGF0YSA9ICh1aW50OF90ICopZGF0YTsKKyAgICB4ZmVyLmRhdGFTaXplID0gbnVtOworCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyNpZiAoZGVmaW5lZChSVEVfU1BJMF9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMFUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMF9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMCBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyNpZiAoZGVmaW5lZChSVEVfU1BJMV9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMVUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMV9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMSBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyNpZiAoZGVmaW5lZChSVEVfU1BJMl9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMlUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMl9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMiBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRFNQSSBzbGF2ZSB1c2UgQ3RhcjAgc2V0dGluZyBhbmQgc2xhdmUgY2FuIG9ubHkgdXNlIFBDUzAuICovCisgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9TbGF2ZUN0YXIwOworICAgIH0KKworICAgIGlmIChEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IERTUElfTWFzdGVyVHJhbnNmZXJFRE1BKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUsICZ4ZmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gRFNQSV9TbGF2ZVRyYW5zZmVyRURNQShkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUsICZ4ZmVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0RTUElfQnVzeToKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUElfRWRtYVRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YV9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdCAqZHNwaSkKK3sKKyAgICBpbnQzMl90IHJldDsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgZHNwaV90cmFuc2Zlcl90IHhmZXI7CisKKyAgICB4ZmVyLnR4RGF0YSA9ICh1aW50OF90ICopZGF0YV9vdXQ7CisgICAgeGZlci5yeERhdGEgPSAodWludDhfdCAqKWRhdGFfaW47CisgICAgeGZlci5kYXRhU2l6ZSA9IG51bTsKKworICAgIGlmIChEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICB7CisjaWYgKGRlZmluZWQoUlRFX1NQSTBfTUFTVEVSX1BDU19QSU5fU0VMKSkKKyAgICAgICAgaWYgKDBVID09IGRzcGktPnJlc291cmNlLT5pbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX01hc3RlckN0YXIwIHwgUlRFX1NQSTBfTUFTVEVSX1BDU19QSU5fU0VMOworICAgICAgICB9CisjZW5kaWYgLyogRFNQSTAgUENTIHNlbGVjdCBjb25maWd1cmF0aW9uICovCisjaWYgKGRlZmluZWQoUlRFX1NQSTFfTUFTVEVSX1BDU19QSU5fU0VMKSkKKyAgICAgICAgaWYgKDFVID09IGRzcGktPnJlc291cmNlLT5pbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX01hc3RlckN0YXIwIHwgUlRFX1NQSTFfTUFTVEVSX1BDU19QSU5fU0VMOworICAgICAgICB9CisjZW5kaWYgLyogRFNQSTEgUENTIHNlbGVjdCBjb25maWd1cmF0aW9uICovCisjaWYgKGRlZmluZWQoUlRFX1NQSTJfTUFTVEVSX1BDU19QSU5fU0VMKSkKKyAgICAgICAgaWYgKDJVID09IGRzcGktPnJlc291cmNlLT5pbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX01hc3RlckN0YXIwIHwgUlRFX1NQSTJfTUFTVEVSX1BDU19QSU5fU0VMOworICAgICAgICB9CisjZW5kaWYgLyogRFNQSTIgUENTIHNlbGVjdCBjb25maWd1cmF0aW9uICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIERTUEkgc2xhdmUgdXNlIEN0YXIwIHNldHRpbmcgYW5kIHNsYXZlIGNhbiBvbmx5IHVzZSBQQ1MwLiAqLworICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfU2xhdmVDdGFyMDsKKyAgICB9CisKKyAgICBpZiAoRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBEU1BJX01hc3RlclRyYW5zZmVyRURNQShkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlLCAmeGZlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IERTUElfU2xhdmVUcmFuc2ZlckVETUEoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLCAmeGZlcik7CisgICAgfQorCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19EU1BJX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorc3RhdGljIHVpbnQzMl90IERTUElfRWRtYUdldENvdW50KGNtc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdCAqZHNwaSkKK3sKKyAgICB1aW50MzJfdCBjbnQ7CisgICAgc2l6ZV90IGJ5dGVzOworCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyAgICAgICAgaWYgKGRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlLnN0YXRlICE9IGtEU1BJX0lkbGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNudCA9IDBVTDsKKyAgICAgICAgICAgIHJldHVybiBjbnQ7CisgICAgICAgIH0KKyAgICAgICAgYnl0ZXMgPSAodWludDMyX3QpZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUubmJ5dGVzICoKKyAgICAgICAgICAgICAgICBFRE1BX0dldFJlbWFpbmluZ01ham9yTG9vcENvdW50KGRzcGktPmRtYVJlc291cmNlLT5yeEVkbWFCYXNlLCBkc3BpLT5kbWFSZXNvdXJjZS0+cnhFZG1hQ2hhbm5lbCk7CisgICAgICAgIGNudCA9IGRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlLnRvdGFsQnl0ZUNvdW50IC0gYnl0ZXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLnN0YXRlICE9IGtEU1BJX0lkbGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNudCA9IDBVTDsKKyAgICAgICAgICAgIHJldHVybiBjbnQ7CisgICAgICAgIH0KKyAgICAgICAgYnl0ZXMgPSAodWludDMyX3QpZHNwaS0+aGFuZGxlLT5zbGF2ZUhhbmRsZS5uYnl0ZXMgKgorICAgICAgICAgICAgICAgIEVETUFfR2V0UmVtYWluaW5nTWFqb3JMb29wQ291bnQoZHNwaS0+ZG1hUmVzb3VyY2UtPnJ4RWRtYUJhc2UsIGRzcGktPmRtYVJlc291cmNlLT5yeEVkbWFDaGFubmVsKTsKKyAgICAgICAgY250ID0gZHNwaS0+aGFuZGxlLT5zbGF2ZUhhbmRsZS50b3RhbEJ5dGVDb3VudCAtIGJ5dGVzOworICAgIH0KKworICAgIHJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUElfRWRtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnLCBjbXNpc19kc3BpX2VkbWFfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgaWYgKCFkc3BpLT5pc1Bvd2VyT24pCisgICAgeworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICB9CisKKyAgICBjbXNpc19kc3BpX2VkbWFfcmVzb3VyY2VfdCAqZG1hUmVzb3VyY2UgPSBkc3BpLT5kbWFSZXNvdXJjZTsKKworICAgIHN3aXRjaCAoY29udHJvbCAmIEFSTV9TUElfQ09OVFJPTF9Nc2spCisgICAgeworICAgICAgICBjYXNlIEFSTV9TUElfTU9ERV9JTkFDVElWRToKKyAgICAgICAgICAgIERTUElfRW5hYmxlKGRzcGktPnJlc291cmNlLT5iYXNlLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBjYXNlIEFSTV9TUElfTU9ERV9NQVNURVI6IC8qIFNQSSBNYXN0ZXIgKE91dHB1dCBvbiBTT1VULCBJbnB1dCBvbiBTSU4pOyBhcmcgPSBCdXMgU3BlZWQgaW4gYnBzICovCisgICAgICAgICAgICBEU1BJX1NldE1hc3RlclNsYXZlTW9kZShkc3BpLT5yZXNvdXJjZS0+YmFzZSwga0RTUElfTWFzdGVyKTsKKyAgICAgICAgICAgIG1lbXNldCgoZHNwaS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUpLCAwLCBzaXplb2YoZWRtYV9oYW5kbGVfdCkpOworICAgICAgICAgICAgbWVtc2V0KChkc3BpLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUpLCAwLCBzaXplb2YoZWRtYV9oYW5kbGVfdCkpOworICAgICAgICAgICAgbWVtc2V0KChkc3BpLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZSksIDAsIHNpemVvZihlZG1hX2hhbmRsZV90KSk7CisKKyAgICAgICAgICAgIEVETUFfQ3JlYXRlSGFuZGxlKGRzcGktPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLCBkbWFSZXNvdXJjZS0+cnhFZG1hQmFzZSwgZG1hUmVzb3VyY2UtPnJ4RWRtYUNoYW5uZWwpOworICAgICAgICAgICAgRE1BTVVYX1NldFNvdXJjZShkbWFSZXNvdXJjZS0+cnhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+cnhFZG1hQ2hhbm5lbCwgZG1hUmVzb3VyY2UtPnJ4RG1hUmVxdWVzdCk7CisgICAgICAgICAgICBETUFNVVhfRW5hYmxlQ2hhbm5lbChkbWFSZXNvdXJjZS0+cnhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+cnhFZG1hQ2hhbm5lbCk7CisKKyAgICAgICAgICAgIEVETUFfQ3JlYXRlSGFuZGxlKGRzcGktPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZSwgZG1hUmVzb3VyY2UtPnR4RWRtYUJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFSZXNvdXJjZS0+dHhFZG1hQ2hhbm5lbCk7CisKKyAgICAgICAgICAgIEVETUFfQ3JlYXRlSGFuZGxlKGRzcGktPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLCBkbWFSZXNvdXJjZS0+bWFzdGVyTGlua0VkbWFCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1hUmVzb3VyY2UtPm1hc3RlckxpbmtDaGFubmVsKTsKKworICAgICAgICAgICAgaWYgKDEgPT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERNQU1VWF9TZXRTb3VyY2UoZG1hUmVzb3VyY2UtPnR4RG1hbXV4QmFzZSwgZG1hUmVzb3VyY2UtPm1hc3RlckxpbmtDaGFubmVsLCBkbWFSZXNvdXJjZS0+dHhEbWFSZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBETUFNVVhfRW5hYmxlQ2hhbm5lbChkbWFSZXNvdXJjZS0+dHhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+bWFzdGVyTGlua0NoYW5uZWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRFNQSV9NYXN0ZXJUcmFuc2ZlckNyZWF0ZUhhbmRsZUVETUEoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICYoZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1NES19EU1BJX01hc3RlckVkbWFDYWxsYmFjaywgKHZvaWQgKilkc3BpLT5ldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkc3BpLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSksIChkc3BpLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRzcGktPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlKSk7CisKKyAgICAgICAgICAgIGRzcGktPmJhdWRSYXRlX0JwcyA9IGFyZzsKKyAgICAgICAgICAgIGRzcGktPmlzQ29uZmlndXJlZCA9IHRydWU7CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVJNX1NQSV9NT0RFX1NMQVZFOiAvKiBTUEkgU2xhdmUgIChPdXRwdXQgb24gU09VVCwgSW5wdXQgb24gU0lOKSAqLworICAgICAgICAgICAgRFNQSV9TZXRNYXN0ZXJTbGF2ZU1vZGUoZHNwaS0+cmVzb3VyY2UtPmJhc2UsIGtEU1BJX1NsYXZlKTsKKyAgICAgICAgICAgIG1lbXNldChkc3BpLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSwgMCwgc2l6ZW9mKGVkbWFfaGFuZGxlX3QpKTsKKyAgICAgICAgICAgIG1lbXNldChkc3BpLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSwgMCwgc2l6ZW9mKGVkbWFfaGFuZGxlX3QpKTsKKworICAgICAgICAgICAgRURNQV9DcmVhdGVIYW5kbGUoZHNwaS0+ZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGUsIGRtYVJlc291cmNlLT50eEVkbWFCYXNlLCBkbWFSZXNvdXJjZS0+dHhFZG1hQ2hhbm5lbCk7CisgICAgICAgICAgICBpZiAoMSA9PSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRE1BTVVYX1NldFNvdXJjZShkbWFSZXNvdXJjZS0+dHhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+dHhFZG1hQ2hhbm5lbCwgZG1hUmVzb3VyY2UtPnR4RG1hUmVxdWVzdCk7CisgICAgICAgICAgICAgICAgRE1BTVVYX0VuYWJsZUNoYW5uZWwoZG1hUmVzb3VyY2UtPnR4RG1hbXV4QmFzZSwgZG1hUmVzb3VyY2UtPnR4RWRtYUNoYW5uZWwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBFRE1BX0NyZWF0ZUhhbmRsZShkc3BpLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSwgZG1hUmVzb3VyY2UtPnJ4RWRtYUJhc2UsIGRtYVJlc291cmNlLT5yeEVkbWFDaGFubmVsKTsKKyAgICAgICAgICAgIERNQU1VWF9TZXRTb3VyY2UoZG1hUmVzb3VyY2UtPnJ4RG1hbXV4QmFzZSwgZG1hUmVzb3VyY2UtPnJ4RWRtYUNoYW5uZWwsIGRtYVJlc291cmNlLT5yeERtYVJlcXVlc3QpOworICAgICAgICAgICAgRE1BTVVYX0VuYWJsZUNoYW5uZWwoZG1hUmVzb3VyY2UtPnJ4RG1hbXV4QmFzZSwgZG1hUmVzb3VyY2UtPnJ4RWRtYUNoYW5uZWwpOworCisgICAgICAgICAgICBEU1BJX1NsYXZlVHJhbnNmZXJDcmVhdGVIYW5kbGVFRE1BKGRzcGktPnJlc291cmNlLT5iYXNlLCAmKGRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLU0RLX0RTUElfU2xhdmVFZG1hQ2FsbGJhY2ssICh2b2lkICopZHNwaS0+ZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkc3BpLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSksIChkc3BpLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSkpOworCisgICAgICAgICAgICBkc3BpLT5pc0NvbmZpZ3VyZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBUk1fU1BJX1NFVF9CVVNfU1BFRUQ6IC8qIFNldCBCdXMgU3BlZWQgaW4gYnBzOyAqLworICAgICAgICAgICAgaWYgKCFEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKDAgPT0gRFNQSV9NYXN0ZXJTZXRCYXVkUmF0ZShkc3BpLT5yZXNvdXJjZS0+YmFzZSwga0RTUElfQ3RhcjAsIGFyZywgZHNwaS0+cmVzb3VyY2UtPkdldEZyZXEoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRzcGktPmJhdWRSYXRlX0JwcyA9IGFyZzsKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIGNhc2UgQVJNX1NQSV9HRVRfQlVTX1NQRUVEOiAvKiBTZXQgQnVzIFNwZWVkIGluIGJwczsgYXJnID0gdmFsdWUgKi8KKyAgICAgICAgICAgIGlmICghRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkc3BpLT5iYXVkUmF0ZV9CcHM7CisKKyAgICAgICAgY2FzZSBBUk1fU1BJX0NPTlRST0xfU1M6IC8qIENvbnRyb2wgU2xhdmUgU2VsZWN0OyBhcmcgPSAwOmluYWN0aXZlLCAxOmFjdGl2ZSAgKi8KKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworCisgICAgICAgIGNhc2UgQVJNX1NQSV9BQk9SVF9UUkFOU0ZFUjogLyogQWJvcnQgY3VycmVudCBkYXRhIHRyYW5zZmVyICovCisgICAgICAgICAgICBpZiAoRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRFNQSV9NYXN0ZXJUcmFuc2ZlckFib3J0RURNQShkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEU1BJX1NsYXZlVHJhbnNmZXJBYm9ydEVETUEoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gRFNQSV9Db21tb25Db250cm9sKGNvbnRyb2wsIGRzcGktPmJhdWRSYXRlX0JwcywgZHNwaS0+cmVzb3VyY2UsICZkc3BpLT5pc0NvbmZpZ3VyZWQpOworfQorCitBUk1fU1BJX1NUQVRVUyBEU1BJX0VkbWFHZXRTdGF0dXMoY21zaXNfZHNwaV9lZG1hX2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIEFSTV9TUElfU1RBVFVTIHN0YXQ7CisgICAgdWludDMyX3Qga3Nka19kc3BpX3N0YXR1cyA9IERTUElfR2V0U3RhdHVzRmxhZ3MoZHNwaS0+cmVzb3VyY2UtPmJhc2UpOworCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyAgICAgICAgc3RhdC5idXN5ID0gKGtEU1BJX0J1c3kgPT0gZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUuc3RhdGUpID8gKDFVKSA6ICgwVSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXQuYnVzeSA9IChrRFNQSV9CdXN5ID09IGRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUuc3RhdGUpID8gKDFVKSA6ICgwVSk7CisgICAgfQorCisgICAgc3RhdC5kYXRhX2xvc3QgPQorICAgICAgICAoKGtzZGtfZHNwaV9zdGF0dXMgJiBrRFNQSV9UeEZpZm9VbmRlcmZsb3dGbGFnKSB8fCAoa3Nka19kc3BpX3N0YXR1cyAmIGtEU1BJX1J4Rmlmb092ZXJmbG93RmxhZykpID8gKDFVKSA6ICgwVSk7CisgICAgc3RhdC5tb2RlX2ZhdWx0ID0gMFU7CisKKyAgICByZXR1cm4gc3RhdDsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAqLworCisjZW5kaWYKKworI2lmICgoUlRFX1NQSTAgJiYgIVJURV9TUEkwX0RNQV9FTikgfHwgKFJURV9TUEkxICYmICFSVEVfU1BJMV9ETUFfRU4pIHx8IChSVEVfU1BJMiAmJiAhUlRFX1NQSTJfRE1BX0VOKSkKKwordm9pZCBLU0RLX0RTUElfTWFzdGVySW50ZXJydXB0Q2FsbGJhY2soU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsIHN0YXR1c190IHN0YXR1cywgdm9pZCAqdXNlckRhdGEpCit7CisgICAgdWludDMyX3QgZXZlbnQgPSAwVTsKKworICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fU1BJX0VWRU5UX1RSQU5TRkVSX0NPTVBMRVRFOworICAgIH0KKworICAgIGlmIChrU3RhdHVzX0RTUElfRXJyb3IgPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fU1BJX0VWRU5UX0RBVEFfTE9TVDsKKyAgICB9CisgICAgLyogVXNlciBkYXRhIGlzIGFjdHVhbGx5IENNU0lTIGRyaXZlciBjYWxsYmFjay4gKi8KKyAgICBpZiAoKDBVICE9IGV2ZW50KSAmJiAodXNlckRhdGEpKQorICAgIHsKKyAgICAgICAgKChBUk1fU1BJX1NpZ25hbEV2ZW50X3QpdXNlckRhdGEpKGV2ZW50KTsKKyAgICB9Cit9Cit2b2lkIEtTREtfRFNQSV9TbGF2ZUludGVycnVwdENhbGxiYWNrKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUsIHN0YXR1c190IHN0YXR1cywgdm9pZCAqdXNlckRhdGEpCit7CisgICAgdWludDMyX3QgZXZlbnQgPSAwVTsKKworICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fU1BJX0VWRU5UX1RSQU5TRkVSX0NPTVBMRVRFOworICAgIH0KKworICAgIGlmIChrU3RhdHVzX0RTUElfRXJyb3IgPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fU1BJX0VWRU5UX0RBVEFfTE9TVDsKKyAgICB9CisgICAgLyogVXNlciBkYXRhIGlzIGFjdHVhbGx5IENNU0lTIGRyaXZlciBjYWxsYmFjay4gKi8KKyAgICBpZiAoKDBVICE9IGV2ZW50KSAmJiAodXNlckRhdGEpKQorICAgIHsKKyAgICAgICAgKChBUk1fU1BJX1NpZ25hbEV2ZW50X3QpdXNlckRhdGEpKGV2ZW50KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUElfSW50ZXJydXB0SW5pdGlhbGl6ZShBUk1fU1BJX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQsIGNtc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIGlmIChkc3BpLT5pc0luaXRpYWxpemVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisgICAgfQorICAgIGRzcGktPmV2ZW50ID0gY2JfZXZlbnQ7CisgICAgZHNwaS0+aXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUElfSW50ZXJydXB0VW5pbml0aWFsaXplKGNtc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIGRzcGktPmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgRFNQSV9JbnRlcnJ1cHRQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlLCBjbXNpc19kc3BpX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCAqZHNwaSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfT0ZGOgorICAgICAgICAgICAgaWYgKGRzcGktPmlzUG93ZXJPbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEU1BJX0RlaW5pdChkc3BpLT5yZXNvdXJjZS0+YmFzZSk7CisgICAgICAgICAgICAgICAgZHNwaS0+aXNQb3dlck9uID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZHNwaS0+aXNDb25maWd1cmVkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFSTV9QT1dFUl9MT1c6CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKworICAgICAgICBjYXNlIEFSTV9QT1dFUl9GVUxMOgorICAgICAgICAgICAgaWYgKCFkc3BpLT5pc0luaXRpYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWRzcGktPmlzUG93ZXJPbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDTE9DS19FbmFibGVDbG9jayhzX2RzcGlDbG9ja1tkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2VdKTsKKyAgICAgICAgICAgICAgICBkc3BpLT5pc1Bvd2VyT24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICB9CisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUElfSW50ZXJydXB0U2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0sIGNtc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIGludDMyX3QgcmV0OworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBkc3BpX3RyYW5zZmVyX3QgeGZlcjsKKworICAgIHhmZXIucnhEYXRhID0gTlVMTDsKKyAgICB4ZmVyLnR4RGF0YSA9ICh1aW50OF90ICopZGF0YTsKKyAgICB4ZmVyLmRhdGFTaXplID0gbnVtOworCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyNpZiAoZGVmaW5lZChSVEVfU1BJMF9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMFUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMF9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMCBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyNpZiAoZGVmaW5lZChSVEVfU1BJMV9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMVUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMV9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMSBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyNpZiAoZGVmaW5lZChSVEVfU1BJMl9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMlUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMl9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMiBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRFNQSSBzbGF2ZSB1c2UgQ3RhcjAgc2V0dGluZyBhbmQgc2xhdmUgY2FuIG9ubHkgdXNlIFBDUzAuICovCisgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9TbGF2ZUN0YXIwOworICAgIH0KKworICAgIGlmIChEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IERTUElfTWFzdGVyVHJhbnNmZXJOb25CbG9ja2luZyhkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlLCAmeGZlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IERTUElfU2xhdmVUcmFuc2Zlck5vbkJsb2NraW5nKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5zbGF2ZUhhbmRsZSwgJnhmZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdHVzX1N1Y2Nlc3M6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX09LOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX1BBUkFNRVRFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfRFNQSV9CdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QgRFNQSV9JbnRlcnJ1cHRSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSwgY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgaW50MzJfdCByZXQ7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIGRzcGlfdHJhbnNmZXJfdCB4ZmVyOworCisgICAgeGZlci50eERhdGEgPSBOVUxMOworICAgIHhmZXIucnhEYXRhID0gKHVpbnQ4X3QgKilkYXRhOworICAgIHhmZXIuZGF0YVNpemUgPSBudW07CisKKyAgICBpZiAoRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgeworI2lmIChkZWZpbmVkKFJURV9TUEkwX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgwVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkwX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkwIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworI2lmIChkZWZpbmVkKFJURV9TUEkxX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgxVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkxX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkxIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworI2lmIChkZWZpbmVkKFJURV9TUEkyX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgyVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkyX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkyIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBEU1BJIHNsYXZlIHVzZSBDdGFyMCBzZXR0aW5nIGFuZCBzbGF2ZSBjYW4gb25seSB1c2UgUENTMC4gKi8KKyAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX1NsYXZlQ3RhcjA7CisgICAgfQorCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gRFNQSV9NYXN0ZXJUcmFuc2Zlck5vbkJsb2NraW5nKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUsICZ4ZmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gRFNQSV9TbGF2ZVRyYW5zZmVyTm9uQmxvY2tpbmcoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLCAmeGZlcik7CisgICAgfQorCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19EU1BJX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJX0ludGVycnVwdFRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIGludDMyX3QgcmV0OworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBkc3BpX3RyYW5zZmVyX3QgeGZlcjsKKworICAgIHhmZXIudHhEYXRhID0gKHVpbnQ4X3QgKilkYXRhX291dDsKKyAgICB4ZmVyLnJ4RGF0YSA9ICh1aW50OF90ICopZGF0YV9pbjsKKyAgICB4ZmVyLmRhdGFTaXplID0gbnVtOworCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyNpZiAoZGVmaW5lZChSVEVfU1BJMF9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMFUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMF9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMCBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyNpZiAoZGVmaW5lZChSVEVfU1BJMV9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMVUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMV9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMSBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyNpZiAoZGVmaW5lZChSVEVfU1BJMl9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMlUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMl9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMiBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRFNQSSBzbGF2ZSB1c2UgQ3RhcjAgc2V0dGluZyBhbmQgc2xhdmUgY2FuIG9ubHkgdXNlIFBDUzAuICovCisgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9TbGF2ZUN0YXIwOworICAgIH0KKworICAgIGlmIChEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IERTUElfTWFzdGVyVHJhbnNmZXJOb25CbG9ja2luZyhkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlLCAmeGZlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IERTUElfU2xhdmVUcmFuc2Zlck5vbkJsb2NraW5nKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5zbGF2ZUhhbmRsZSwgJnhmZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdHVzX1N1Y2Nlc3M6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX09LOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX1BBUkFNRVRFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfRFNQSV9CdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KK3N0YXRpYyB1aW50MzJfdCBEU1BJX0ludGVycnVwdEdldENvdW50KGNtc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIGlmIChEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3BpLT5oYW5kbGUtPm1hc3RlckhhbmRsZS50b3RhbEJ5dGVDb3VudCAtIGRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlLnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLnRvdGFsQnl0ZUNvdW50IC0gZHNwaS0+aGFuZGxlLT5zbGF2ZUhhbmRsZS5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50OworICAgIH0KK30KKworc3RhdGljIGludDMyX3QgRFNQSV9JbnRlcnJ1cHRDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZywgY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgaWYgKCFkc3BpLT5pc1Bvd2VyT24pCisgICAgeworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvbnRyb2wgJiBBUk1fU1BJX0NPTlRST0xfTXNrKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fU1BJX01PREVfSU5BQ1RJVkU6CisgICAgICAgICAgICBEU1BJX0VuYWJsZShkc3BpLT5yZXNvdXJjZS0+YmFzZSwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgY2FzZSBBUk1fU1BJX01PREVfTUFTVEVSOiAvKiBTUEkgTWFzdGVyIChPdXRwdXQgb24gU09VVCwgSW5wdXQgb24gU0lOKTsgYXJnID0gQnVzIFNwZWVkIGluIGJwcyAqLworICAgICAgICAgICAgRFNQSV9TZXRNYXN0ZXJTbGF2ZU1vZGUoZHNwaS0+cmVzb3VyY2UtPmJhc2UsIGtEU1BJX01hc3Rlcik7CisgICAgICAgICAgICBEU1BJX01hc3RlclRyYW5zZmVyQ3JlYXRlSGFuZGxlKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtTREtfRFNQSV9NYXN0ZXJJbnRlcnJ1cHRDYWxsYmFjaywgKHZvaWQgKilkc3BpLT5ldmVudCk7CisgICAgICAgICAgICBkc3BpLT5iYXVkUmF0ZV9CcHMgPSBhcmc7CisgICAgICAgICAgICBkc3BpLT5pc0NvbmZpZ3VyZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBUk1fU1BJX01PREVfU0xBVkU6IC8qIFNQSSBTbGF2ZSAgKE91dHB1dCBvbiBTT1VULCBJbnB1dCBvbiBTSU4pICovCisgICAgICAgICAgICBEU1BJX1NldE1hc3RlclNsYXZlTW9kZShkc3BpLT5yZXNvdXJjZS0+YmFzZSwga0RTUElfU2xhdmUpOworICAgICAgICAgICAgRFNQSV9TbGF2ZVRyYW5zZmVyQ3JlYXRlSGFuZGxlKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5zbGF2ZUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLU0RLX0RTUElfU2xhdmVJbnRlcnJ1cHRDYWxsYmFjaywgKHZvaWQgKilkc3BpLT5ldmVudCk7CisKKyAgICAgICAgICAgIGRzcGktPmlzQ29uZmlndXJlZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFSTV9TUElfR0VUX0JVU19TUEVFRDogLyogR2V0IEJ1cyBTcGVlZCBpbiBicHMgKi8KKyAgICAgICAgICAgIGlmICghRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkc3BpLT5iYXVkUmF0ZV9CcHM7CisKKyAgICAgICAgY2FzZSBBUk1fU1BJX1NFVF9CVVNfU1BFRUQ6IC8qIFNldCBCdXMgU3BlZWQgaW4gYnBzOyAqLworICAgICAgICAgICAgaWYgKCFEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgwID09IERTUElfTWFzdGVyU2V0QmF1ZFJhdGUoZHNwaS0+cmVzb3VyY2UtPmJhc2UsIGtEU1BJX0N0YXIwLCBhcmcsIGRzcGktPnJlc291cmNlLT5HZXRGcmVxKCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkc3BpLT5iYXVkUmF0ZV9CcHMgPSBhcmc7CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBjYXNlIEFSTV9TUElfQ09OVFJPTF9TUzogLyogQ29udHJvbCBTbGF2ZSBTZWxlY3Q7IGFyZyA9IDA6aW5hY3RpdmUsIDE6YWN0aXZlICAqLworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisKKyAgICAgICAgY2FzZSBBUk1fU1BJX0FCT1JUX1RSQU5TRkVSOiAvKiBBYm9ydCBjdXJyZW50IGRhdGEgdHJhbnNmZXIgKi8KKyAgICAgICAgICAgIGlmIChEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEU1BJX01hc3RlclRyYW5zZmVyQWJvcnQoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPm1hc3RlckhhbmRsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRFNQSV9TbGF2ZVRyYW5zZmVyQWJvcnQoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBEU1BJX0NvbW1vbkNvbnRyb2woY29udHJvbCwgZHNwaS0+YmF1ZFJhdGVfQnBzLCBkc3BpLT5yZXNvdXJjZSwgJmRzcGktPmlzQ29uZmlndXJlZCk7Cit9CisKK0FSTV9TUElfU1RBVFVTIERTUElfSW50ZXJydXB0R2V0U3RhdHVzKGNtc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIEFSTV9TUElfU1RBVFVTIHN0YXQ7CisgICAgdWludDMyX3Qga3Nka19kc3BpX3N0YXR1cyA9IERTUElfR2V0U3RhdHVzRmxhZ3MoZHNwaS0+cmVzb3VyY2UtPmJhc2UpOworCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyAgICAgICAgc3RhdC5idXN5ID0gKChkc3BpLT5oYW5kbGUtPm1hc3RlckhhbmRsZS5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgIChkc3BpLT5oYW5kbGUtPm1hc3RlckhhbmRsZS5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID4gMCkpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICgxVSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgKDBVKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdC5idXN5ID0gKChkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAwKSB8fAorICAgICAgICAgICAgICAgICAgICAgKGRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUucmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA+IDApKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAoMVUpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICgwVSk7CisgICAgfQorICAgIHN0YXQuZGF0YV9sb3N0ID0KKyAgICAgICAgKChrc2RrX2RzcGlfc3RhdHVzICYga0RTUElfVHhGaWZvVW5kZXJmbG93RmxhZykgfHwgKGtzZGtfZHNwaV9zdGF0dXMgJiBrRFNQSV9SeEZpZm9PdmVyZmxvd0ZsYWcpKSA/ICgxVSkgOiAoMFUpOworICAgIHN0YXQubW9kZV9mYXVsdCA9IDBVOworCisgICAgcmV0dXJuIHN0YXQ7Cit9CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEU1BJMCkgJiYgUlRFX1NQSTAKKworZXh0ZXJuIHVpbnQzMl90IERTUEkwX0dldEZyZXEodm9pZCk7CitleHRlcm4gdm9pZCBEU1BJMF9Jbml0UGlucyh2b2lkKTsKK2V4dGVybiB2b2lkIERTUEkwX0RlaW5pdFBpbnModm9pZCk7CisKK2Ntc2lzX2RzcGlfcmVzb3VyY2VfdCBEU1BJMF9SZXNvdXJjZSA9IHtEU1BJMCwgMCwgRFNQSTBfR2V0RnJlcX07CisKKyNpZiBSVEVfU1BJMF9ETUFfRU4KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKK2Ntc2lzX2RzcGlfZWRtYV9yZXNvdXJjZV90IERTUEkwX0VkbWFSZXNvdXJjZSA9IHsKKyAgICBSVEVfU1BJMF9ETUFfVFhfRE1BX0JBU0UsICAgUlRFX1NQSTBfRE1BX1RYX0NILCAgUlRFX1NQSTBfRE1BX1RYX0RNQU1VWF9CQVNFLCBSVEVfU1BJMF9ETUFfVFhfUEVSSV9TRUwsCisKKyAgICBSVEVfU1BJMF9ETUFfUlhfRE1BX0JBU0UsICAgUlRFX1NQSTBfRE1BX1JYX0NILCAgUlRFX1NQSTBfRE1BX1JYX0RNQU1VWF9CQVNFLCBSVEVfU1BJMF9ETUFfUlhfUEVSSV9TRUwsCisKKyAgICBSVEVfU1BJMF9ETUFfTElOS19ETUFfQkFTRSwgUlRFX1NQSTBfRE1BX0xJTktfQ0h9OworCitjbXNpc19kc3BpX2VkbWFfaGFuZGxlX3QgRFNQSTBfRWRtYUhhbmRsZTsKKworZWRtYV9oYW5kbGVfdCBEU1BJMF9FZG1hUnhSZWdUb1J4RGF0YUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgRFNQSTBfRWVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgRFNQSTBfRWVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlOworZWRtYV9oYW5kbGVfdCBEU1BJMF9FZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiZHNwaTBfZWRtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfZHNwaV9lZG1hX2RyaXZlcl9zdGF0ZV90IERTUEkwX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19kc3BpX2VkbWFfZHJpdmVyX3N0YXRlX3QgRFNQSTBfRWRtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkRTUEkwX1Jlc291cmNlLAorICAgICZEU1BJMF9FZG1hUmVzb3VyY2UsCisgICAgJkRTUEkwX0VkbWFIYW5kbGUsCisgICAgJkRTUEkwX0VkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLAorICAgICZEU1BJMF9FZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLAorICAgICZEU1BJMF9FZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUsCisgICAgJkRTUEkwX0VlZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IERTUEkwX0VkbWFJbml0aWFsaXplKEFSTV9TUElfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBEU1BJMF9Jbml0UGlucygpOworICAgIHJldHVybiBEU1BJX0VkbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmRFNQSTBfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTBfRWRtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIERTUEkwX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gRFNQSV9FZG1hVW5pbml0aWFsaXplKCZEU1BJMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMF9FZG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hUG93ZXJDb250cm9sKHN0YXRlLCAmRFNQSTBfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTBfRWRtYVNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0VkbWFTZW5kKGRhdGEsIG51bSwgJkRTUEkwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkwX0VkbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hUmVjZWl2ZShkYXRhLCBudW0sICZEU1BJMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMF9FZG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkRTUEkwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBEU1BJMF9FZG1hR2V0Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hR2V0Q291bnQoJkRTUEkwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkwX0VkbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hQ29udHJvbChjb250cm9sLCBhcmcsICZEU1BJMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1NQSV9TVEFUVVMgRFNQSTBfRWRtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBEU1BJX0VkbWFHZXRTdGF0dXMoJkRTUEkwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjZWxzZQorY21zaXNfZHNwaV9oYW5kbGVfdCBEU1BJMF9IYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiZHNwaTBfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZSIpCitjbXNpc19kc3BpX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCBEU1BJMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19kc3BpX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCBEU1BJMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZEU1BJMF9SZXNvdXJjZSwgJkRTUEkwX0hhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IERTUEkwX0ludGVycnVwdEluaXRpYWxpemUoQVJNX1NQSV9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIERTUEkwX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0SW5pdGlhbGl6ZShjYl9ldmVudCwgJkRTUEkwX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTBfSW50ZXJydXB0VW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgRFNQSTBfRGVpbml0UGlucygpOworICAgIHJldHVybiBEU1BJX0ludGVycnVwdFVuaW5pdGlhbGl6ZSgmRFNQSTBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMF9JbnRlcnJ1cHRQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdFBvd2VyQ29udHJvbChzdGF0ZSwgJkRTUEkwX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTBfSW50ZXJydXB0U2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0U2VuZChkYXRhLCBudW0sICZEU1BJMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkwX0ludGVycnVwdFJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdFJlY2VpdmUoZGF0YSwgbnVtLCAmRFNQSTBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMF9JbnRlcnJ1cHRUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdFRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZEU1BJMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBEU1BJMF9JbnRlcnJ1cHRHZXRDb3VudCh2b2lkKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdEdldENvdW50KCZEU1BJMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkwX0ludGVycnVwdENvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdENvbnRyb2woY29udHJvbCwgYXJnLCAmRFNQSTBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1NQSV9TVEFUVVMgRFNQSTBfSW50ZXJydXB0R2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0R2V0U3RhdHVzKCZEU1BJMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCitBUk1fRFJJVkVSX1NQSSBEcml2ZXJfU1BJMCA9IHtEU1BJeF9HZXRWZXJzaW9uLCAgICAgRFNQSXhfR2V0Q2FwYWJpbGl0aWVzLAorI2lmIFJURV9TUEkwX0RNQV9FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTBfRWRtYUluaXRpYWxpemUsIERTUEkwX0VkbWFVbmluaXRpYWxpemUsIERTUEkwX0VkbWFQb3dlckNvbnRyb2wsIERTUEkwX0VkbWFTZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTBfRWRtYVJlY2VpdmUsICAgIERTUEkwX0VkbWFUcmFuc2ZlciwgICAgIERTUEkwX0VkbWFHZXRDb3VudCwgICAgIERTUEkwX0VkbWFDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTBfRWRtYUdldFN0YXR1cworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUEkwX0ludGVycnVwdEluaXRpYWxpemUsIERTUEkwX0ludGVycnVwdFVuaW5pdGlhbGl6ZSwgRFNQSTBfSW50ZXJydXB0UG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTBfSW50ZXJydXB0U2VuZCwgRFNQSTBfSW50ZXJydXB0UmVjZWl2ZSwgRFNQSTBfSW50ZXJydXB0VHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMF9JbnRlcnJ1cHRHZXRDb3VudCwgRFNQSTBfSW50ZXJydXB0Q29udHJvbCwgRFNQSTBfSW50ZXJydXB0R2V0U3RhdHVzCisjZW5kaWYKK307CisKKyNlbmRpZiAvKiAgRFNQSTAgICovCisKKyNpZiBkZWZpbmVkKERTUEkxKSAmJiBSVEVfU1BJMQorCitleHRlcm4gdWludDMyX3QgRFNQSTFfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIERTUEkxX0luaXRQaW5zKHZvaWQpOworZXh0ZXJuIHZvaWQgRFNQSTFfRGVpbml0UGlucyh2b2lkKTsKKworY21zaXNfZHNwaV9yZXNvdXJjZV90IERTUEkxX1Jlc291cmNlID0ge0RTUEkxLCAxLCBEU1BJMV9HZXRGcmVxfTsKKworI2lmIFJURV9TUEkxX0RNQV9FTgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorY21zaXNfZHNwaV9lZG1hX3Jlc291cmNlX3QgRFNQSTFfRWRtYVJlc291cmNlID0geworICAgIFJURV9TUEkxX0RNQV9UWF9ETUFfQkFTRSwgICBSVEVfU1BJMV9ETUFfVFhfQ0gsICBSVEVfU1BJMV9ETUFfVFhfRE1BTVVYX0JBU0UsIFJURV9TUEkxX0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9TUEkxX0RNQV9SWF9ETUFfQkFTRSwgICBSVEVfU1BJMV9ETUFfUlhfQ0gsICBSVEVfU1BJMV9ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9TUEkxX0RNQV9SWF9QRVJJX1NFTCwKKworICAgIFJURV9TUEkxX0RNQV9MSU5LX0RNQV9CQVNFLCBSVEVfU1BJMV9ETUFfTElOS19DSH07CisKK2Ntc2lzX2RzcGlfZWRtYV9oYW5kbGVfdCBEU1BJMV9FZG1hSGFuZGxlOworCitlZG1hX2hhbmRsZV90IERTUEkxX0VkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlOworZWRtYV9oYW5kbGVfdCBEU1BJMV9FZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlOworZWRtYV9oYW5kbGVfdCBEU1BJMV9FZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGU7CitlZG1hX2hhbmRsZV90IERTUEkxX0VlZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJkc3BpMV9lZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19kc3BpX2VkbWFfZHJpdmVyX3N0YXRlX3QgRFNQSTFfRWRtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdCBEU1BJMV9FZG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmRFNQSTFfUmVzb3VyY2UsCisgICAgJkRTUEkxX0VkbWFSZXNvdXJjZSwKKyAgICAmRFNQSTFfRWRtYUhhbmRsZSwKKyAgICAmRFNQSTFfRWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUsCisgICAgJkRTUEkxX0VlZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUsCisgICAgJkRTUEkxX0VlZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZSwKKyAgICAmRFNQSTFfRWVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgRFNQSTFfRWRtYUluaXRpYWxpemUoQVJNX1NQSV9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIERTUEkxX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIERTUElfRWRtYUluaXRpYWxpemUoY2JfZXZlbnQsICZEU1BJMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMV9FZG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgRFNQSTFfRGVpbml0UGlucygpOworICAgIHJldHVybiBEU1BJX0VkbWFVbmluaXRpYWxpemUoJkRTUEkxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkxX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBEU1BJX0VkbWFQb3dlckNvbnRyb2woc3RhdGUsICZEU1BJMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMV9FZG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIERTUElfRWRtYVNlbmQoZGF0YSwgbnVtLCAmRFNQSTFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTFfRWRtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0VkbWFSZWNlaXZlKGRhdGEsIG51bSwgJkRTUEkxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkxX0VkbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0VkbWFUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmRFNQSTFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IERTUEkxX0VkbWFHZXRDb3VudCh2b2lkKQoreworICAgIHJldHVybiBEU1BJX0VkbWFHZXRDb3VudCgmRFNQSTFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTFfRWRtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBEU1BJX0VkbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkRTUEkxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fU1BJX1NUQVRVUyBEU1BJMV9FZG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIERTUElfRWRtYUdldFN0YXR1cygmRFNQSTFfRWRtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNlbHNlCisKK2Ntc2lzX2RzcGlfaGFuZGxlX3QgRFNQSTFfSGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImRzcGkxX2ludGVycnVwdF9kcml2ZXJfc3RhdGUiKQorY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgRFNQSTFfSW50ZXJydXB0RHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgRFNQSTFfSW50ZXJydXB0RHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmRFNQSTFfUmVzb3VyY2UsICZEU1BJMV9IYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBEU1BJMV9JbnRlcnJ1cHRJbml0aWFsaXplKEFSTV9TUElfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBEU1BJMV9Jbml0UGlucygpOworICAgIHJldHVybiBEU1BJX0ludGVycnVwdEluaXRpYWxpemUoY2JfZXZlbnQsICZEU1BJMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkxX0ludGVycnVwdFVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIERTUEkxX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRVbmluaXRpYWxpemUoJkRTUEkxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTFfSW50ZXJydXB0UG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRQb3dlckNvbnRyb2woc3RhdGUsICZEU1BJMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkxX0ludGVycnVwdFNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdFNlbmQoZGF0YSwgbnVtLCAmRFNQSTFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMV9JbnRlcnJ1cHRSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRSZWNlaXZlKGRhdGEsIG51bSwgJkRTUEkxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTFfSW50ZXJydXB0VHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmRFNQSTFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgRFNQSTFfSW50ZXJydXB0R2V0Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRHZXRDb3VudCgmRFNQSTFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMV9JbnRlcnJ1cHRDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRDb250cm9sKGNvbnRyb2wsIGFyZywgJkRTUEkxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9TUElfU1RBVFVTIERTUEkxX0ludGVycnVwdEdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdEdldFN0YXR1cygmRFNQSTFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworQVJNX0RSSVZFUl9TUEkgRHJpdmVyX1NQSTEgPSB7RFNQSXhfR2V0VmVyc2lvbiwgICAgIERTUEl4X0dldENhcGFiaWxpdGllcywKKyNpZiBSVEVfU1BJMV9ETUFfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUEkxX0VkbWFJbml0aWFsaXplLCBEU1BJMV9FZG1hVW5pbml0aWFsaXplLCBEU1BJMV9FZG1hUG93ZXJDb250cm9sLCBEU1BJMV9FZG1hU2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUEkxX0VkbWFSZWNlaXZlLCAgICBEU1BJMV9FZG1hVHJhbnNmZXIsICAgICBEU1BJMV9FZG1hR2V0Q291bnQsICAgICBEU1BJMV9FZG1hQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUEkxX0VkbWFHZXRTdGF0dXMKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMV9JbnRlcnJ1cHRJbml0aWFsaXplLCBEU1BJMV9JbnRlcnJ1cHRVbmluaXRpYWxpemUsIERTUEkxX0ludGVycnVwdFBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUEkxX0ludGVycnVwdFNlbmQsIERTUEkxX0ludGVycnVwdFJlY2VpdmUsIERTUEkxX0ludGVycnVwdFRyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTFfSW50ZXJydXB0R2V0Q291bnQsIERTUEkxX0ludGVycnVwdENvbnRyb2wsIERTUEkxX0ludGVycnVwdEdldFN0YXR1cworI2VuZGlmCit9OworCisjZW5kaWYgLyogIERTUEkxICAqLworCisjaWYgZGVmaW5lZChEU1BJMikgJiYgUlRFX1NQSTIKKworZXh0ZXJuIHVpbnQzMl90IERTUEkyX0dldEZyZXEodm9pZCk7CitleHRlcm4gdm9pZCBEU1BJMl9Jbml0UGlucyh2b2lkKTsKK2V4dGVybiB2b2lkIERTUEkyX0RlaW5pdFBpbnModm9pZCk7CisKK2Ntc2lzX2RzcGlfcmVzb3VyY2VfdCBEU1BJMl9SZXNvdXJjZSA9IHtEU1BJMiwgMiwgRFNQSTJfR2V0RnJlcX07CisKKyNpZiBSVEVfU1BJMl9ETUFfRU4KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKK2Ntc2lzX2RzcGlfZWRtYV9yZXNvdXJjZV90IERTUEkyX0VkbWFSZXNvdXJjZSA9IHsKKyAgICBSVEVfU1BJMl9ETUFfVFhfRE1BX0JBU0UsICAgUlRFX1NQSTJfRE1BX1RYX0NILCAgUlRFX1NQSTJfRE1BX1RYX0RNQU1VWF9CQVNFLCBSVEVfU1BJMl9ETUFfVFhfUEVSSV9TRUwsCisKKyAgICBSVEVfU1BJMl9ETUFfUlhfRE1BX0JBU0UsICAgUlRFX1NQSTJfRE1BX1JYX0NILCAgUlRFX1NQSTJfRE1BX1JYX0RNQU1VWF9CQVNFLCBSVEVfU1BJMl9ETUFfUlhfUEVSSV9TRUwsCisKKyAgICBSVEVfU1BJMl9ETUFfTElOS19ETUFfQkFTRSwgUlRFX1NQSTJfRE1BX0xJTktfQ0h9OworCitjbXNpc19kc3BpX2VkbWFfaGFuZGxlX3QgRFNQSTJfRWRtYUhhbmRsZTsKKworZWRtYV9oYW5kbGVfdCBEU1BJMl9FZG1hUnhSZWdUb1J4RGF0YUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgRFNQSTJfRWVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgRFNQSTJfRWVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlOworZWRtYV9oYW5kbGVfdCBEU1BJMl9FZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiZHNwaTJfZWRtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfZHNwaV9lZG1hX2RyaXZlcl9zdGF0ZV90IERTUEkyX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19kc3BpX2VkbWFfZHJpdmVyX3N0YXRlX3QgRFNQSTJfRWRtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkRTUEkyX1Jlc291cmNlLAorICAgICZEU1BJMl9FZG1hUmVzb3VyY2UsCisgICAgJkRTUEkyX0VkbWFIYW5kbGUsCisgICAgJkRTUEkyX0VkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLAorICAgICZEU1BJMl9FZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLAorICAgICZEU1BJMl9FZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUsCisgICAgJkRTUEkyX0VlZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IERTUEkyX0VkbWFJbml0aWFsaXplKEFSTV9TUElfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBEU1BJMl9Jbml0UGlucygpOworICAgIHJldHVybiBEU1BJX0VkbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmRFNQSTJfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTJfRWRtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIERTUEkyX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gRFNQSV9FZG1hVW5pbml0aWFsaXplKCZEU1BJMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMl9FZG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hUG93ZXJDb250cm9sKHN0YXRlLCAmRFNQSTJfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTJfRWRtYVNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0VkbWFTZW5kKGRhdGEsIG51bSwgJkRTUEkyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkyX0VkbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hUmVjZWl2ZShkYXRhLCBudW0sICZEU1BJMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMl9FZG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkRTUEkyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBEU1BJMl9FZG1hR2V0Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hR2V0Q291bnQoJkRTUEkyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkyX0VkbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hQ29udHJvbChjb250cm9sLCBhcmcsICZEU1BJMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1NQSV9TVEFUVVMgRFNQSTJfRWRtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBEU1BJX0VkbWFHZXRTdGF0dXMoJkRTUEkyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjZWxzZQorCitjbXNpc19kc3BpX2hhbmRsZV90IERTUEkyX0hhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJkc3BpMl9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90IERTUEkyX0ludGVycnVwdERyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90IERTUEkyX0ludGVycnVwdERyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkRTUEkyX1Jlc291cmNlLCAmRFNQSTJfSGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgRFNQSTJfSW50ZXJydXB0SW5pdGlhbGl6ZShBUk1fU1BJX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgRFNQSTJfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRJbml0aWFsaXplKGNiX2V2ZW50LCAmRFNQSTJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMl9JbnRlcnJ1cHRVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBEU1BJMl9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0VW5pbml0aWFsaXplKCZEU1BJMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkyX0ludGVycnVwdFBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0UG93ZXJDb250cm9sKHN0YXRlLCAmRFNQSTJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMl9JbnRlcnJ1cHRTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRTZW5kKGRhdGEsIG51bSwgJkRTUEkyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTJfSW50ZXJydXB0UmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0UmVjZWl2ZShkYXRhLCBudW0sICZEU1BJMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkyX0ludGVycnVwdFRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0VHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkRTUEkyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IERTUEkyX0ludGVycnVwdEdldENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0R2V0Q291bnQoJkRTUEkyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTJfSW50ZXJydXB0Q29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0Q29udHJvbChjb250cm9sLCBhcmcsICZEU1BJMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fU1BJX1NUQVRVUyBEU1BJMl9JbnRlcnJ1cHRHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRHZXRTdGF0dXMoJkRTUEkyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKyNlbmRpZgorCitBUk1fRFJJVkVSX1NQSSBEcml2ZXJfU1BJMiA9IHtEU1BJeF9HZXRWZXJzaW9uLCAgICAgRFNQSXhfR2V0Q2FwYWJpbGl0aWVzLAorI2lmIFJURV9TUEkyX0RNQV9FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTJfRWRtYUluaXRpYWxpemUsIERTUEkyX0VkbWFVbmluaXRpYWxpemUsIERTUEkyX0VkbWFQb3dlckNvbnRyb2wsIERTUEkyX0VkbWFTZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTJfRWRtYVJlY2VpdmUsICAgIERTUEkyX0VkbWFUcmFuc2ZlciwgICAgIERTUEkyX0VkbWFHZXRDb3VudCwgICAgIERTUEkyX0VkbWFDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTJfRWRtYUdldFN0YXR1cworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUEkyX0ludGVycnVwdEluaXRpYWxpemUsIERTUEkyX0ludGVycnVwdFVuaW5pdGlhbGl6ZSwgRFNQSTJfSW50ZXJydXB0UG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTJfSW50ZXJydXB0U2VuZCwgRFNQSTJfSW50ZXJydXB0UmVjZWl2ZSwgRFNQSTJfSW50ZXJydXB0VHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMl9JbnRlcnJ1cHRHZXRDb3VudCwgRFNQSTJfSW50ZXJydXB0Q29udHJvbCwgRFNQSTJfSW50ZXJydXB0R2V0U3RhdHVzCisjZW5kaWYKK307CisKKyNlbmRpZiAvKiAgRFNQSTIgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9kc3BpX2Ntc2lzLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9kc3BpX2Ntc2lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5MGUzMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Ntc2lzX2RyaXZlcnMvZnNsX2RzcGlfY21zaXMuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7IHlvdSBtYXkKKyAqIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0ZTTF9EU1BJX0NNU0lTSV9IXworI2RlZmluZSBfRlNMX0RTUElfQ01TSVNJX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisjaW5jbHVkZSAiUlRFX0RldmljZS5oIgorI2luY2x1ZGUgIkRyaXZlcl9TUEkuaCIKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisjaW5jbHVkZSAiZnNsX2RzcGlfZWRtYS5oIgorI2luY2x1ZGUgImZzbF9kbWFtdXguaCIKKyNpbmNsdWRlICJmc2xfZWRtYS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKERTUEkwKQorZXh0ZXJuIEFSTV9EUklWRVJfU1BJIERyaXZlcl9TUEkwOworI2VuZGlmIC8qIERTUEkwICovCisKKyNpZiBkZWZpbmVkKERTUEkxKQorZXh0ZXJuIEFSTV9EUklWRVJfU1BJIERyaXZlcl9TUEkxOworI2VuZGlmIC8qIERTUEkxICovCisKKyNpZiBkZWZpbmVkKERTUEkyKQorZXh0ZXJuIEFSTV9EUklWRVJfU1BJIERyaXZlcl9TUEkyOworI2VuZGlmIC8qIERTUEkyICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfaTJjX2Ntc2lzLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9pMmNfY21zaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTQxMWRiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfaTJjX2Ntc2lzLmMKQEAgLTAsMCArMSwxOTk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7IHlvdSBtYXkKKyAqIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfaTJjX2Ntc2lzLmgiCisKKyNpZiAoKFJURV9JMkMwICYmIGRlZmluZWQoSTJDMCkpIHx8IChSVEVfSTJDMSAmJiBkZWZpbmVkKEkyQzEpKSB8fCAoUlRFX0kyQzIgJiYgZGVmaW5lZChJMkMyKSkgfHwgXAorICAgICAoUlRFX0kyQzMgJiYgZGVmaW5lZChJMkMzKSkpCisKKyNkZWZpbmUgQVJNX0kyQ19EUlZfVkVSU0lPTiBBUk1fRFJJVkVSX1ZFUlNJT05fTUFKT1JfTUlOT1IoMiwgMCkKKworLyoKKyAqIEFSTUNDIGRvZXMgbm90IHN1cHBvcnQgc3BsaXQgdGhlIGRhdGEgc2VjdGlvbiBhdXRvbWF0aWNhbGx5LCBzbyB0aGUgZHJpdmVyCisgKiBuZWVkcyB0byBzcGxpdCB0aGUgZGF0YSB0byBzZXBhcmF0ZSBzZWN0aW9ucyBleHBsaWNpdGx5LCB0byByZWR1Y2UgY29kZXNpemUuCisgKi8KKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorI2RlZmluZSBBUk1DQ19TRUNUSU9OKHNlY3Rpb25fbmFtZSkgX19hdHRyaWJ1dGVfXygoc2VjdGlvbihzZWN0aW9uX25hbWUpKSkKKyNlbmRpZgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfY21zaXNfaTJjX3Jlc291cmNlCit7CisgICAgSTJDX1R5cGUgKmJhc2U7ICAgICAgICAgICAgLyohPCBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuICAgICAgKi8KKyAgICB1aW50MzJfdCAoKkdldEZyZXEpKHZvaWQpOyAvKiE8IEZ1bmN0aW9uIHRvIGdldCB0aGUgY2xvY2sgZnJlcXVlbmN5LiAqLworCit9IGNtc2lzX2kyY19yZXNvdXJjZV90OworCit0eXBlZGVmIHVuaW9uIF9jbXNpc19pMmNfaGFuZGxlCit7CisgICAgaTJjX21hc3Rlcl9oYW5kbGVfdCBtYXN0ZXJfaGFuZGxlOyAvKiE8IG1hc3RlciBJbnRlcnVwdCB0cmFuc2ZlciBoYW5kbGUuICovCisgICAgaTJjX3NsYXZlX2hhbmRsZV90IHNsYXZlX2hhbmRsZTsgICAvKiE8IHNsYXZlIEludGVydXB0IHRyYW5zZmVyIGhhbmRsZS4gKi8KK30gY21zaXNfaTJjX2hhbmRsZV90OworCit0eXBlZGVmIHN0cnVjdCBfY21zaXNfaTJjX2ludGVycnVwdF9kcml2ZXJfc3RhdGUKK3sKKyAgICBjbXNpc19pMmNfcmVzb3VyY2VfdCAqcmVzb3VyY2U7IC8qITwgQmFzaWMgSTJDIHJlc291cmNlLiAqLworICAgIGNtc2lzX2kyY19oYW5kbGVfdCAqaGFuZGxlOworICAgIEFSTV9JMkNfU2lnbmFsRXZlbnRfdCBjYl9ldmVudDsgLyohPCBDYWxsYmFjayBmdW5jdGlvbi4gICAgICovCisgICAgYm9vbCBpc0luaXRpYWxpemVkOyAgICAgICAgICAgICAvKiE8IElzIGluaXRpYWxpemVkIG9yIG5vdC4gKi8KK30gY21zaXNfaTJjX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdDsKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfY21zaXNfaTJjX2RtYV9yZXNvdXJjZQoreworICAgIERNQV9UeXBlICppMmNEbWFCYXNlOyAgICAgICAvKiE8IERNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcyBmb3IgaTJjLiAgICAqLworICAgIHVpbnQzMl90IGkyY0RtYUNoYW5uZWw7ICAgICAvKiE8IERNQSBjaGFubmVsIGZvciBpMmMuICAgICAgICAgICAgICovCisgICAgRE1BTVVYX1R5cGUgKmkyY0RtYW11eEJhc2U7IC8qITwgRE1BTVVYIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzIGZvciBpMmMuICovCisgICAgdWludDE2X3QgaTJjRG1hUmVxdWVzdDsgICAgIC8qITwgaTJjIERNQSByZXF1ZXN0IHNvdXJjZS4gICAgICAgICAgICAgICAgICovCit9IGNtc2lzX2kyY19kbWFfcmVzb3VyY2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2Ntc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlCit7CisgICAgY21zaXNfaTJjX3Jlc291cmNlX3QgKnJlc291cmNlOyAgICAgICAgICAgICAvKiE8IGkyYyBiYXNpYyByZXNvdXJjZS4gICAgICAqLworICAgIGNtc2lzX2kyY19kbWFfcmVzb3VyY2VfdCAqZG1hUmVzb3VyY2U7ICAgICAgLyohPCBpMmMgRE1BIHJlc291cmNlLiAgICAgICAgKi8KKyAgICBpMmNfbWFzdGVyX2RtYV9oYW5kbGVfdCAqbWFzdGVyX2RtYV9oYW5kbGU7IC8qITwgaTJjIERNQSB0cmFuc2ZlciBoYW5kbGUuICovCisgICAgZG1hX2hhbmRsZV90ICpkbWFIYW5kbGU7ICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBpMmMgaGFuZGxlLiAgICAgICAgICAqLworICAgIGJvb2wgaXNJbml0aWFsaXplZDsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJcyBpbml0aWFsaXplZCBvciBub3QuICAgKi8KK30gY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdDsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX2Ntc2lzX2kyY19lZG1hX3Jlc291cmNlCit7CisgICAgRE1BX1R5cGUgKmkyY0VkbWFCYXNlOyAgICAgIC8qITwgRURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcyBmb3IgaTJjLiAgICAqLworICAgIHVpbnQzMl90IGkyY0VkbWFDaGFubmVsOyAgICAvKiE8IEVETUEgY2hhbm5lbCBmb3IgaTJjLiAgICAgICAgICAgICAqLworICAgIERNQU1VWF9UeXBlICppMmNEbWFtdXhCYXNlOyAvKiE8IERNQU1VWCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcyBmb3IgaTJjLiAgKi8KKyAgICB1aW50MTZfdCBpMmNEbWFSZXF1ZXN0OyAgICAgLyohPCBpMmMgRURNQSByZXF1ZXN0IHNvdXJjZS4gICAgICAgICAgICAgICAgICovCit9IGNtc2lzX2kyY19lZG1hX3Jlc291cmNlX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9jbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGUKK3sKKyAgICBjbXNpc19pMmNfcmVzb3VyY2VfdCAqcmVzb3VyY2U7ICAgICAgICAgICAgICAgLyohPCBpMmMgYmFzaWMgcmVzb3VyY2UuICAgICAgICovCisgICAgY21zaXNfaTJjX2VkbWFfcmVzb3VyY2VfdCAqZWRtYVJlc291cmNlOyAgICAgIC8qITwgaTJjIEVETUEgcmVzb3VyY2UuICAgICAgICAqLworICAgIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqbWFzdGVyX2VkbWFfaGFuZGxlOyAvKiE8IGkyYyBFRE1BIHRyYW5zZmVyIGhhbmRsZS4gKi8KKyAgICBlZG1hX2hhbmRsZV90ICplZG1hSGFuZGxlOyAgICAgICAgICAgICAgICAgICAgLyohPCBFRE1BIGkyYyBoYW5kbGUuICAgICAgICAgICovCisgICAgYm9vbCBpc0luaXRpYWxpemVkOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSXMgaW5pdGlhbGl6ZWQgb3Igbm90LiAgICAqLworfSBjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCAqLworCitzdGF0aWMgY29uc3QgQVJNX0RSSVZFUl9WRVJTSU9OIHNfaTJjRHJpdmVyVmVyc2lvbiA9IHtBUk1fSTJDX0FQSV9WRVJTSU9OLCBBUk1fSTJDX0RSVl9WRVJTSU9OfTsKK3N0YXRpYyBjb25zdCBBUk1fSTJDX0NBUEFCSUxJVElFUyBzX2kyY0RyaXZlckNhcGFiaWxpdGllcyA9IHsKKyAgICAwLCAvKjwgc3VwcG9ydHMgMTAtYml0IGFkZHJlc3NpbmcgKi8KK307CisKK3N0YXRpYyBjb25zdCBjbG9ja19pcF9uYW1lX3Qgc19pMmNDbG9ja3NbXSA9IEkyQ19DTE9DS1M7CitleHRlcm4gdWludDMyX3QgSTJDX0dldEluc3RhbmNlKEkyQ19UeXBlICpiYXNlKTsKKworc3RhdGljIEFSTV9EUklWRVJfVkVSU0lPTiBJMkN4X0dldFZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gc19pMmNEcml2ZXJWZXJzaW9uOworfQorCitzdGF0aWMgQVJNX0kyQ19DQVBBQklMSVRJRVMgSTJDeF9HZXRDYXBhYmlsaXRpZXModm9pZCkKK3sKKyAgICByZXR1cm4gc19pMmNEcml2ZXJDYXBhYmlsaXRpZXM7Cit9CisKKyNlbmRpZgorCisjaWYgKFJURV9JMkMwX0RNQV9FTiB8fCBSVEVfSTJDMV9ETUFfRU4gfHwgUlRFX0kyQzJfRE1BX0VOIHx8IFJURV9JMkMzX0RNQV9FTikKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpCit2b2lkIEtTREtfSTJDX01BU1RFUl9EbWFDYWxsYmFjayhJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9kbWFfaGFuZGxlX3QgKmhhbmRsZSwgc3RhdHVzX3Qgc3RhdHVzLCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB1aW50MzJfdCBldmVudDsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19TdWNjZXNzKSAvKiBPY2N1cnMgYWZ0ZXIgTWFzdGVyIFRyYW5zbWl0L1JlY2VpdmUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZC4gKi8KKyAgICB7CisgICAgICAgIGV2ZW50ID0gQVJNX0kyQ19FVkVOVF9UUkFOU0ZFUl9ET05FOworICAgIH0KKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19JMkNfQWRkcl9OYWspCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9JMkNfRVZFTlRfQUREUkVTU19OQUNLOworICAgIH0KKworICAgIGlmICh1c2VyRGF0YSkKKyAgICB7CisgICAgICAgICgoQVJNX0kyQ19TaWduYWxFdmVudF90KXVzZXJEYXRhKShldmVudCk7CisgICAgfQorfQorCitzdGF0aWMgaW50MzJfdCBJMkNfTWFzdGVyX0RtYUluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50LCBjbXNpc19pMmNfZG1hX2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgaWYgKCEoaTJjLT5pc0luaXRpYWxpemVkKSkKKyAgICB7CisgICAgICAgIC8qIENvbmZpZ3VyZSBETUFNVVggY2hhbm5lbCAqLworICAgICAgICBETUFNVVhfU2V0U291cmNlKGkyYy0+ZG1hUmVzb3VyY2UtPmkyY0RtYW11eEJhc2UsIGkyYy0+ZG1hUmVzb3VyY2UtPmkyY0RtYUNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QpaTJjLT5kbWFSZXNvdXJjZS0+aTJjRG1hUmVxdWVzdCk7CisgICAgICAgIERNQU1VWF9FbmFibGVDaGFubmVsKGkyYy0+ZG1hUmVzb3VyY2UtPmkyY0RtYW11eEJhc2UsIGkyYy0+ZG1hUmVzb3VyY2UtPmkyY0RtYUNoYW5uZWwpOworICAgICAgICAvKiBDcmVhdCBkbWFoYW5kbGUgICovCisgICAgICAgIERNQV9DcmVhdGVIYW5kbGUoaTJjLT5kbWFIYW5kbGUsIGkyYy0+ZG1hUmVzb3VyY2UtPmkyY0RtYUJhc2UsIGkyYy0+ZG1hUmVzb3VyY2UtPmkyY0RtYUNoYW5uZWwpOworICAgICAgICAvKiBDcmVhdGUgbWFzdGVyX2RtYV9oYW5kbGUuICovCisgICAgICAgIEkyQ19NYXN0ZXJUcmFuc2ZlckNyZWF0ZUhhbmRsZURNQShpMmMtPnJlc291cmNlLT5iYXNlLCBpMmMtPm1hc3Rlcl9kbWFfaGFuZGxlLCBLU0RLX0kyQ19NQVNURVJfRG1hQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWNiX2V2ZW50LCBpMmMtPmRtYUhhbmRsZSk7CisgICAgICAgIGkyYy0+aXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitpbnQzMl90IEkyQ19NYXN0ZXJfRG1hVW5pbml0aWFsaXplKGNtc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBpMmMtPmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0RtYVRyYW5zbWl0KAorICAgIHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcsIGNtc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBpbnQzMl90IHN0YXR1czsKKyAgICBpbnQzMl90IHJldDsKKyAgICBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgbWFzdGVyWGZlcjsKKworICAgIC8qIENoZWNrIGlmIHRoZSBJMkMgYnVzIGlzIGlkbGUgLSBpZiBub3QgcmV0dXJuIGJ1c3kgc3RhdHVzLiAqLworICAgIGlmIChpMmMtPm1hc3Rlcl9kbWFfaGFuZGxlLT5zdGF0ZSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICB9CisKKyAgICBtYXN0ZXJYZmVyLnNsYXZlQWRkcmVzcyA9IGFkZHI7ICAgICAgICAgICAgICAvKjctYml0IHNsYXZlIGFkZHJlc3MuKi8KKyAgICBtYXN0ZXJYZmVyLmRpcmVjdGlvbiA9IGtJMkNfV3JpdGU7ICAgICAgICAgICAvKiBUcmFuc2ZlciBkaXJlY3Rpb24uKi8KKyAgICBtYXN0ZXJYZmVyLnN1YmFkZHJlc3MgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBTdWIgYWRkcmVzcyAqLworICAgIG1hc3RlclhmZXIuc3ViYWRkcmVzc1NpemUgPSAwOyAgICAgICAgICAgICAgIC8qIFNpemUgb2YgY29tbWFuZCBidWZmZXIuKi8KKyAgICBtYXN0ZXJYZmVyLmRhdGEgPSAodWludDhfdCAqKWRhdGE7ICAgICAgICAgICAvKiBUcmFuc2ZlciBidWZmZXIuKi8KKyAgICBtYXN0ZXJYZmVyLmRhdGFTaXplID0gbnVtOyAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBzaXplLiovCisgICAgbWFzdGVyWGZlci5mbGFncyA9IGtJMkNfVHJhbnNmZXJEZWZhdWx0RmxhZzsgLyogVHJhbnNmZXIgZmxhZyB3aGljaCBjb250cm9scyB0aGUgdHJhbnNmZXIuKi8KKworICAgIGlmIChpMmMtPnJlc291cmNlLT5iYXNlLT5TICYgMHgyMCkKKyAgICB7CisgICAgICAgIG1hc3RlclhmZXIuZmxhZ3MgfD0ga0kyQ19UcmFuc2ZlclJlcGVhdGVkU3RhcnRGbGFnOworICAgIH0KKworICAgIGlmICh4ZmVyX3BlbmRpbmcpCisgICAgeworICAgICAgICBtYXN0ZXJYZmVyLmZsYWdzIHw9IGtJMkNfVHJhbnNmZXJOb1N0b3BGbGFnOworICAgIH0KKworICAgIHN0YXR1cyA9IEkyQ19NYXN0ZXJUcmFuc2ZlckRNQShpMmMtPnJlc291cmNlLT5iYXNlLCBpMmMtPm1hc3Rlcl9kbWFfaGFuZGxlLCAmbWFzdGVyWGZlcik7CisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19CdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19JMkNfVGltZW91dDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfVElNRU9VVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK2ludDMyX3QgSTJDX01hc3Rlcl9EbWFSZWNlaXZlKAorICAgIHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcsIGNtc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBpbnQzMl90IHN0YXR1czsKKyAgICBpbnQzMl90IHJldDsKKyAgICBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgbWFzdGVyWGZlcjsKKworICAgIC8qIENoZWNrIGlmIHRoZSBJMkMgYnVzIGlzIGlkbGUgLSBpZiBub3QgcmV0dXJuIGJ1c3kgc3RhdHVzLiAqLworICAgIGlmIChpMmMtPm1hc3Rlcl9kbWFfaGFuZGxlLT5zdGF0ZSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICB9CisKKyAgICBtYXN0ZXJYZmVyLnNsYXZlQWRkcmVzcyA9IGFkZHI7ICAgICAgICAgICAgICAvKjctYml0IHNsYXZlIGFkZHJlc3MuKi8KKyAgICBtYXN0ZXJYZmVyLmRpcmVjdGlvbiA9IGtJMkNfUmVhZDsgICAgICAgICAgICAvKiBUcmFuc2ZlciBkaXJlY3Rpb24uKi8KKyAgICBtYXN0ZXJYZmVyLnN1YmFkZHJlc3MgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBTdWIgYWRkcmVzcyAqLworICAgIG1hc3RlclhmZXIuc3ViYWRkcmVzc1NpemUgPSAwOyAgICAgICAgICAgICAgIC8qIFNpemUgb2YgY29tbWFuZCBidWZmZXIuKi8KKyAgICBtYXN0ZXJYZmVyLmRhdGEgPSBkYXRhOyAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBidWZmZXIuKi8KKyAgICBtYXN0ZXJYZmVyLmRhdGFTaXplID0gbnVtOyAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBzaXplLiovCisgICAgbWFzdGVyWGZlci5mbGFncyA9IGtJMkNfVHJhbnNmZXJEZWZhdWx0RmxhZzsgLyogVHJhbnNmZXIgZmxhZyB3aGljaCBjb250cm9scyB0aGUgdHJhbnNmZXIuKi8KKworICAgIGlmIChpMmMtPnJlc291cmNlLT5iYXNlLT5TICYgMHgyMCkKKyAgICB7CisgICAgICAgIG1hc3RlclhmZXIuZmxhZ3MgfD0ga0kyQ19UcmFuc2ZlclJlcGVhdGVkU3RhcnRGbGFnOworICAgIH0KKworICAgIGlmICh4ZmVyX3BlbmRpbmcpCisgICAgeworICAgICAgICBtYXN0ZXJYZmVyLmZsYWdzIHw9IGtJMkNfVHJhbnNmZXJOb1N0b3BGbGFnOworICAgIH0KKworICAgIHN0YXR1cyA9IEkyQ19NYXN0ZXJUcmFuc2ZlckRNQShpMmMtPnJlc291cmNlLT5iYXNlLCBpMmMtPm1hc3Rlcl9kbWFfaGFuZGxlLCAmbWFzdGVyWGZlcik7CisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19CdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19JMkNfVGltZW91dDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfVElNRU9VVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK2ludDMyX3QgSTJDX01hc3Rlcl9EbWFHZXREYXRhQ291bnQoY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIHNpemVfdCBjbnQ7IC8qIFRoZSBudW1iZXIgb2YgY3VycmVudGx5IHRyYW5zZmVycmVkIGRhdGEgYnl0ZXMgKi8KKworICAgIEkyQ19NYXN0ZXJUcmFuc2ZlckdldENvdW50RE1BKGkyYy0+cmVzb3VyY2UtPmJhc2UsIGkyYy0+bWFzdGVyX2RtYV9oYW5kbGUsICZjbnQpOworICAgIHJldHVybiBjbnQ7Cit9CisKK2ludDMyX3QgSTJDX01hc3Rlcl9EbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZywgY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIHVpbnQzMl90IGJhdWRSYXRlX0JwczsKKyAgICB2b2xhdGlsZSB1aW50OF90IGR1bW15ID0gMDsKKworICAgIC8qIEFkZCB0aGlzIHRvIGF2b2lkIHdhcm5pbmcuICovCisgICAgZHVtbXkrKzsKKworICAgIHN3aXRjaCAoY29udHJvbCkKKyAgICB7CisgICAgICAgIC8qIE5vdCBzdXBwb3J0ZWQgKi8KKyAgICAgICAgY2FzZSBBUk1fSTJDX09XTl9BRERSRVNTOgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisKKyAgICAgICAgLyogU2V0IEJ1cyBTcGVlZDsgYXJnID0gYnVzIHNwZWVkICovCisgICAgICAgIGNhc2UgQVJNX0kyQ19CVVNfU1BFRUQ6CisgICAgICAgICAgICBzd2l0Y2ggKGFyZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFSTV9JMkNfQlVTX1NQRUVEX1NUQU5EQVJEOgorICAgICAgICAgICAgICAgICAgICBiYXVkUmF0ZV9CcHMgPSAxMDAwMDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBBUk1fSTJDX0JVU19TUEVFRF9GQVNUOgorICAgICAgICAgICAgICAgICAgICBiYXVkUmF0ZV9CcHMgPSA0MDAwMDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBBUk1fSTJDX0JVU19TUEVFRF9GQVNUX1BMVVM6CisgICAgICAgICAgICAgICAgICAgIGJhdWRSYXRlX0JwcyA9IDEwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEkyQ19NYXN0ZXJTZXRCYXVkUmF0ZShpMmMtPnJlc291cmNlLT5iYXNlLCBiYXVkUmF0ZV9CcHMsIGkyYy0+cmVzb3VyY2UtPkdldEZyZXEoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIC8qIE5vdCBzdXBwb3J0ZWQgKi8KKyAgICAgICAgY2FzZSBBUk1fSTJDX0JVU19DTEVBUjoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworCisgICAgICAgIC8qIEFib3J0cyB0aGUgZGF0YSB0cmFuc2ZlciAgd2hlbiBNYXN0ZXIgZm9yIFRyYW5zbWl0IG9yIFJlY2VpdmUgKi8KKyAgICAgICAgY2FzZSBBUk1fSTJDX0FCT1JUX1RSQU5TRkVSOgorICAgICAgICAgICAgaWYgKGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxICYgSTJDX0MxX01TVF9NQVNLKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIERpc2FibGUgZG1hICovCisgICAgICAgICAgICAgICAgSTJDX01hc3RlclRyYW5zZmVyQWJvcnRETUEoaTJjLT5yZXNvdXJjZS0+YmFzZSwgaTJjLT5tYXN0ZXJfZG1hX2hhbmRsZSk7CisgICAgICAgICAgICAgICAgLyogSWYgbWFzdGVyIHJlY2VpdmUgKi8KKyAgICAgICAgICAgICAgICBpZiAoaTJjLT5tYXN0ZXJfZG1hX2hhbmRsZS0+dHJhbnNmZXIuZGlyZWN0aW9uID09IGtJMkNfUmVhZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxIHw9IEkyQ19DMV9UWEFLX01BU0s7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKGkyYy0+cmVzb3VyY2UtPmJhc2UtPlMgJiBJMkNfU19UQ0ZfTUFTSykpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpMmMtPnJlc291cmNlLT5iYXNlLT5DMSAmPSB+KEkyQ19DMV9NU1RfTUFTSyB8IEkyQ19DMV9UWF9NQVNLIHwgSTJDX0MxX1RYQUtfTUFTSyk7CisgICAgICAgICAgICAgICAgICAgIGR1bW15ID0gaTJjLT5yZXNvdXJjZS0+YmFzZS0+RDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogSWYgbWFzdGVyIHRyYW5zbWl0ICovCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCEoaTJjLT5yZXNvdXJjZS0+YmFzZS0+UyAmIEkyQ19TX1RDRl9NQVNLKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxICY9IH4oSTJDX0MxX01TVF9NQVNLIHwgSTJDX0MxX1RYX01BU0sgfCBJMkNfQzFfVFhBS19NQVNLKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpMmMtPm1hc3Rlcl9kbWFfaGFuZGxlLT50cmFuc2ZlclNpemUgPSAwOworICAgICAgICAgICAgICAgIGkyYy0+bWFzdGVyX2RtYV9oYW5kbGUtPnRyYW5zZmVyLmRhdGEgPSBOVUxMOworICAgICAgICAgICAgICAgIGkyYy0+bWFzdGVyX2RtYV9oYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0RtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUsIGNtc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKQorICAgIHsKKyAgICAgICAgLyogVGVybWluYXRlcyBhbnkgcGVuZGluZyBkYXRhIHRyYW5zZmVycywgZGlzYWJsZSBpMmMgbW9kdW9sZSBhbmQgaTJjIGNsb2NrIGFuZCByZWxhdGVkIGRtYSAqLworICAgICAgICBjYXNlIEFSTV9QT1dFUl9PRkY6CisgICAgICAgICAgICBJMkNfTWFzdGVyX0RtYUNvbnRyb2woQVJNX0kyQ19BQk9SVF9UUkFOU0ZFUiwgMCwgaTJjKTsKKyAgICAgICAgICAgIEkyQ19NYXN0ZXJEZWluaXQoaTJjLT5yZXNvdXJjZS0+YmFzZSk7CisgICAgICAgICAgICBETUFNVVhfRGlzYWJsZUNoYW5uZWwoaTJjLT5kbWFSZXNvdXJjZS0+aTJjRG1hbXV4QmFzZSwgaTJjLT5kbWFSZXNvdXJjZS0+aTJjRG1hQ2hhbm5lbCk7CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICAvKiBOb3Qgc3VwcG9ydGVkICovCisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0xPVzoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworCisgICAgICAgIC8qIEVuYWJsZSBpMmMgbW9kdW9sZSBhbmQgaTJjIGNsb2NrICovCisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0ZVTEw6CisgICAgICAgICAgICBDTE9DS19FbmFibGVDbG9jayhzX2kyY0Nsb2Nrc1tJMkNfR2V0SW5zdGFuY2UoaTJjLT5yZXNvdXJjZS0+YmFzZSldKTsKKyAgICAgICAgICAgIGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxID0gSTJDX0MxX0lJQ0VOKDEpOworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KK30KKworQVJNX0kyQ19TVEFUVVMgSTJDX01hc3Rlcl9EbWFHZXRTdGF0dXMoY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIEFSTV9JMkNfU1RBVFVTIHN0YXQgPSB7MH07CisgICAgdWludDMyX3Qga3Nka19pMmNfbWFzdGVyX3N0YXR1cyA9IEkyQ19NYXN0ZXJHZXRTdGF0dXNGbGFncyhpMmMtPnJlc291cmNlLT5iYXNlKTsKKworICAgIHN0YXQuYnVzeSA9ICEoIShrc2RrX2kyY19tYXN0ZXJfc3RhdHVzICYga0kyQ19CdXNCdXN5RmxhZykpOyAvKiBCdXN5IGZsYWcuKi8KKworICAgIHN0YXQubW9kZSA9IDE7IC8qIE1vZGU6IDA9U2xhdmUsIDE9TWFzdGVyLiovCisKKyAgICBzdGF0LmRpcmVjdGlvbiA9CisgICAgICAgICEoIShrc2RrX2kyY19tYXN0ZXJfc3RhdHVzICYga0kyQ19UcmFuc2ZlckRpcmVjdGlvbkZsYWcpKTsgLyogRGlyZWN0aW9uOiAwPVRyYW5zbWl0dGVyLCAxPVJlY2VpdmVyLiovCisKKyAgICBzdGF0LmFyYml0cmF0aW9uX2xvc3QgPQorICAgICAgICAhKCEoa3Nka19pMmNfbWFzdGVyX3N0YXR1cyAmCisgICAgICAgICAgICBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcpKTsgLyogTWFzdGVyIGxvc3QgYXJiaXRyYXRpb24gKGNsZWFyZWQgb24gc3RhcnQgb2YgbmV4dCBNYXN0ZXIgb3BlcmF0aW9uKSovCisKKyAgICByZXR1cm4gc3RhdDsKK30KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQordm9pZCBLU0RLX0kyQ19NQVNURVJfRWRtYUNhbGxiYWNrKEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgc3RhdHVzX3Qgc3RhdHVzLCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB1aW50MzJfdCBldmVudDsKKworICAgIC8qIE9jY3VycyBhZnRlciBNYXN0ZXIgVHJhbnNtaXQvUmVjZWl2ZSBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLiAqLworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fSTJDX0VWRU5UX1RSQU5TRkVSX0RPTkU7CisgICAgfQorCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX0kyQ19BZGRyX05haykKKyAgICB7CisgICAgICAgIGV2ZW50ID0gQVJNX0kyQ19FVkVOVF9BRERSRVNTX05BQ0s7CisgICAgfQorCisgICAgaWYgKHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgKChBUk1fSTJDX1NpZ25hbEV2ZW50X3QpdXNlckRhdGEpKGV2ZW50KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IEkyQ19NYXN0ZXJfRWRtYUluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50LCBjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIGlmICghKGkyYy0+aXNJbml0aWFsaXplZCkpCisgICAgeworICAgICAgICAvKiBDb25maWd1cmUgRE1BTVVYIGNoYW5uZWwgKi8KKyAgICAgICAgRE1BTVVYX1NldFNvdXJjZShpMmMtPmVkbWFSZXNvdXJjZS0+aTJjRG1hbXV4QmFzZSwgaTJjLT5lZG1hUmVzb3VyY2UtPmkyY0VkbWFDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90KWkyYy0+ZWRtYVJlc291cmNlLT5pMmNEbWFSZXF1ZXN0KTsKKyAgICAgICAgRE1BTVVYX0VuYWJsZUNoYW5uZWwoaTJjLT5lZG1hUmVzb3VyY2UtPmkyY0RtYW11eEJhc2UsIGkyYy0+ZWRtYVJlc291cmNlLT5pMmNFZG1hQ2hhbm5lbCk7CisgICAgICAgIC8qIENyZWF0IGVkbWFoYW5kbGUgICovCisgICAgICAgIEVETUFfQ3JlYXRlSGFuZGxlKGkyYy0+ZWRtYUhhbmRsZSwgaTJjLT5lZG1hUmVzb3VyY2UtPmkyY0VkbWFCYXNlLCBpMmMtPmVkbWFSZXNvdXJjZS0+aTJjRWRtYUNoYW5uZWwpOworICAgICAgICAvKiBDcmVhdGUgbWFzdGVyX2VkbWFfaGFuZGxlLiAqLworICAgICAgICBJMkNfTWFzdGVyQ3JlYXRlRURNQUhhbmRsZShpMmMtPnJlc291cmNlLT5iYXNlLCBpMmMtPm1hc3Rlcl9lZG1hX2hhbmRsZSwgS1NES19JMkNfTUFTVEVSX0VkbWFDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiljYl9ldmVudCwgaTJjLT5lZG1hSGFuZGxlKTsKKyAgICAgICAgaTJjLT5pc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK2ludDMyX3QgSTJDX01hc3Rlcl9FZG1hVW5pbml0aWFsaXplKGNtc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgaTJjLT5pc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK2ludDMyX3QgSTJDX01hc3Rlcl9FZG1hVHJhbnNtaXQoCisgICAgdWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZywgY21zaXNfaTJjX2VkbWFfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBpbnQzMl90IHN0YXR1czsKKyAgICBpbnQzMl90IHJldDsKKyAgICBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgbWFzdGVyWGZlcjsKKworICAgIC8qIENoZWNrIGlmIHRoZSBJMkMgYnVzIGlzIGlkbGUgLSBpZiBub3QgcmV0dXJuIGJ1c3kgc3RhdHVzLiAqLworICAgIGlmIChpMmMtPm1hc3Rlcl9lZG1hX2hhbmRsZS0+c3RhdGUgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgfQorCisgICAgbWFzdGVyWGZlci5zbGF2ZUFkZHJlc3MgPSBhZGRyOyAgICAgICAgICAgICAgLyo3LWJpdCBzbGF2ZSBhZGRyZXNzLiovCisgICAgbWFzdGVyWGZlci5kaXJlY3Rpb24gPSBrSTJDX1dyaXRlOyAgICAgICAgICAgLyogVHJhbnNmZXIgZGlyZWN0aW9uLiovCisgICAgbWFzdGVyWGZlci5zdWJhZGRyZXNzID0gMDsgICAgICAgICAgICAgICAgICAgLyogU3ViIGFkZHJlc3MgKi8KKyAgICBtYXN0ZXJYZmVyLnN1YmFkZHJlc3NTaXplID0gMDsgICAgICAgICAgICAgICAvKiBTaXplIG9mIGNvbW1hbmQgYnVmZmVyLiovCisgICAgbWFzdGVyWGZlci5kYXRhID0gKHVpbnQ4X3QgKilkYXRhOyAgICAgICAgICAgLyogVHJhbnNmZXIgYnVmZmVyLiovCisgICAgbWFzdGVyWGZlci5kYXRhU2l6ZSA9IG51bTsgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgc2l6ZS4qLworICAgIG1hc3RlclhmZXIuZmxhZ3MgPSBrSTJDX1RyYW5zZmVyRGVmYXVsdEZsYWc7IC8qIFRyYW5zZmVyIGZsYWcgd2hpY2ggY29udHJvbHMgdGhlIHRyYW5zZmVyLiovCisKKyAgICBpZiAoaTJjLT5yZXNvdXJjZS0+YmFzZS0+UyAmIDB4MjApCisgICAgeworICAgICAgICBtYXN0ZXJYZmVyLmZsYWdzIHw9IGtJMkNfVHJhbnNmZXJSZXBlYXRlZFN0YXJ0RmxhZzsKKyAgICB9CisKKyAgICBpZiAoeGZlcl9wZW5kaW5nKQorICAgIHsKKyAgICAgICAgbWFzdGVyWGZlci5mbGFncyB8PSBrSTJDX1RyYW5zZmVyTm9TdG9wRmxhZzsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBJMkNfTWFzdGVyVHJhbnNmZXJFRE1BKGkyYy0+cmVzb3VyY2UtPmJhc2UsIGkyYy0+bWFzdGVyX2VkbWFfaGFuZGxlLCAmbWFzdGVyWGZlcik7CisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19CdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19JMkNfVGltZW91dDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfVElNRU9VVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK2ludDMyX3QgSTJDX01hc3Rlcl9FZG1hUmVjZWl2ZSgKKyAgICB1aW50MzJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nLCBjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIGludDMyX3Qgc3RhdHVzOworICAgIGludDMyX3QgcmV0OworICAgIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCBtYXN0ZXJYZmVyOworCisgICAgLyogQ2hlY2sgaWYgdGhlIEkyQyBidXMgaXMgaWRsZSAtIGlmIG5vdCByZXR1cm4gYnVzeSBzdGF0dXMuICovCisgICAgaWYgKGkyYy0+bWFzdGVyX2VkbWFfaGFuZGxlLT5zdGF0ZSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICB9CisKKyAgICBtYXN0ZXJYZmVyLnNsYXZlQWRkcmVzcyA9IGFkZHI7ICAgICAgICAgICAgICAvKiA3LWJpdCBzbGF2ZSBhZGRyZXNzLiovCisgICAgbWFzdGVyWGZlci5kaXJlY3Rpb24gPSBrSTJDX1JlYWQ7ICAgICAgICAgICAgLyogVHJhbnNmZXIgZGlyZWN0aW9uLiovCisgICAgbWFzdGVyWGZlci5zdWJhZGRyZXNzID0gMDsgICAgICAgICAgICAgICAgICAgLyogU3ViIGFkZHJlc3MgKi8KKyAgICBtYXN0ZXJYZmVyLnN1YmFkZHJlc3NTaXplID0gMDsgICAgICAgICAgICAgICAvKiBTaXplIG9mIGNvbW1hbmQgYnVmZmVyLiovCisgICAgbWFzdGVyWGZlci5kYXRhID0gZGF0YTsgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgYnVmZmVyLiovCisgICAgbWFzdGVyWGZlci5kYXRhU2l6ZSA9IG51bTsgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgc2l6ZS4qLworICAgIG1hc3RlclhmZXIuZmxhZ3MgPSBrSTJDX1RyYW5zZmVyRGVmYXVsdEZsYWc7IC8qIFRyYW5zZmVyIGZsYWcgd2hpY2ggY29udHJvbHMgdGhlIHRyYW5zZmVyLiovCisKKyAgICBpZiAoaTJjLT5yZXNvdXJjZS0+YmFzZS0+UyAmIDB4MjApCisgICAgeworICAgICAgICBtYXN0ZXJYZmVyLmZsYWdzIHw9IGtJMkNfVHJhbnNmZXJSZXBlYXRlZFN0YXJ0RmxhZzsKKyAgICB9CisKKyAgICBpZiAoeGZlcl9wZW5kaW5nKQorICAgIHsKKyAgICAgICAgbWFzdGVyWGZlci5mbGFncyB8PSBrSTJDX1RyYW5zZmVyTm9TdG9wRmxhZzsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBJMkNfTWFzdGVyVHJhbnNmZXJFRE1BKGkyYy0+cmVzb3VyY2UtPmJhc2UsIGkyYy0+bWFzdGVyX2VkbWFfaGFuZGxlLCAmbWFzdGVyWGZlcik7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1N0YXR1c19JMkNfQnVzeToKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1N0YXR1c19JMkNfVGltZW91dDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfVElNRU9VVDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0VkbWFHZXREYXRhQ291bnQoY21zaXNfaTJjX2VkbWFfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBzaXplX3QgY250OyAvKiBUaGUgbnVtYmVyIG9mIGN1cnJlbnRseSB0cmFuc2ZlcnJlZCBkYXRhIGJ5dGVzICovCisKKyAgICBJMkNfTWFzdGVyVHJhbnNmZXJHZXRDb3VudEVETUEoaTJjLT5yZXNvdXJjZS0+YmFzZSwgaTJjLT5tYXN0ZXJfZWRtYV9oYW5kbGUsICZjbnQpOworCisgICAgcmV0dXJuIGNudDsKK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0VkbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZywgY21zaXNfaTJjX2VkbWFfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICB1aW50MzJfdCBiYXVkUmF0ZV9CcHM7CisgICAgdm9sYXRpbGUgdWludDhfdCBkdW1teSA9IDA7CisKKyAgICAvKiBBZGQgdGhpcyB0byBhdm9pZCB3YXJuaW5nLiAqLworICAgIGR1bW15Kys7CisKKyAgICBzd2l0Y2ggKGNvbnRyb2wpCisgICAgeworICAgICAgICAvKiBOb3Qgc3VwcG9ydGVkICovCisgICAgICAgIGNhc2UgQVJNX0kyQ19PV05fQUREUkVTUzoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworCisgICAgICAgIC8qIFNldCBCdXMgU3BlZWQ7IGFyZyA9IGJ1cyBzcGVlZCAqLworICAgICAgICBjYXNlIEFSTV9JMkNfQlVTX1NQRUVEOgorICAgICAgICAgICAgc3dpdGNoIChhcmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBBUk1fSTJDX0JVU19TUEVFRF9TVEFOREFSRDoKKyAgICAgICAgICAgICAgICAgICAgYmF1ZFJhdGVfQnBzID0gMTAwMDAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQVJNX0kyQ19CVVNfU1BFRURfRkFTVDoKKyAgICAgICAgICAgICAgICAgICAgYmF1ZFJhdGVfQnBzID0gNDAwMDAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQVJNX0kyQ19CVVNfU1BFRURfRkFTVF9QTFVTOgorICAgICAgICAgICAgICAgICAgICBiYXVkUmF0ZV9CcHMgPSAxMDAwMDAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJMkNfTWFzdGVyU2V0QmF1ZFJhdGUoaTJjLT5yZXNvdXJjZS0+YmFzZSwgYmF1ZFJhdGVfQnBzLCAoaTJjLT5yZXNvdXJjZS0+R2V0RnJlcSkoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIC8qIE5vdCBzdXBwb3J0ZWQgKi8KKyAgICAgICAgY2FzZSBBUk1fSTJDX0JVU19DTEVBUjoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworCisgICAgICAgIC8qIEFib3J0cyB0aGUgZGF0YSB0cmFuc2ZlciAgd2hlbiBNYXN0ZXIgZm9yIFRyYW5zbWl0IG9yIFJlY2VpdmUgKi8KKyAgICAgICAgY2FzZSBBUk1fSTJDX0FCT1JUX1RSQU5TRkVSOgorCisgICAgICAgICAgICBpZiAoaTJjLT5yZXNvdXJjZS0+YmFzZS0+QzEgJiBJMkNfQzFfTVNUX01BU0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBlZG1hICovCisgICAgICAgICAgICAgICAgSTJDX01hc3RlclRyYW5zZmVyQWJvcnRFRE1BKGkyYy0+cmVzb3VyY2UtPmJhc2UsIGkyYy0+bWFzdGVyX2VkbWFfaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAvKiBJZiBtYXN0ZXIgcmVjZWl2ZSAqLworICAgICAgICAgICAgICAgIGlmIChpMmMtPm1hc3Rlcl9lZG1hX2hhbmRsZS0+dHJhbnNmZXIuZGlyZWN0aW9uID09IGtJMkNfUmVhZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxIHw9IEkyQ19DMV9UWEFLX01BU0s7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKGkyYy0+cmVzb3VyY2UtPmJhc2UtPlMgJiBJMkNfU19UQ0ZfTUFTSykpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpMmMtPnJlc291cmNlLT5iYXNlLT5DMSAmPSB+KEkyQ19DMV9NU1RfTUFTSyB8IEkyQ19DMV9UWF9NQVNLIHwgSTJDX0MxX1RYQUtfTUFTSyk7CisgICAgICAgICAgICAgICAgICAgIGR1bW15ID0gaTJjLT5yZXNvdXJjZS0+YmFzZS0+RDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogSWYgbWFzdGVyIHRyYW5zbWl0ICovCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCEoaTJjLT5yZXNvdXJjZS0+YmFzZS0+UyAmIEkyQ19TX1RDRl9NQVNLKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxICY9IH4oSTJDX0MxX01TVF9NQVNLIHwgSTJDX0MxX1RYX01BU0sgfCBJMkNfQzFfVFhBS19NQVNLKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpMmMtPm1hc3Rlcl9lZG1hX2hhbmRsZS0+dHJhbnNmZXJTaXplID0gMDsKKyAgICAgICAgICAgICAgICBpMmMtPm1hc3Rlcl9lZG1hX2hhbmRsZS0+dHJhbnNmZXIuZGF0YSA9IE5VTEw7CisgICAgICAgICAgICAgICAgaTJjLT5tYXN0ZXJfZWRtYV9oYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlLCBjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIHN3aXRjaCAoc3RhdGUpCisgICAgeworICAgICAgICAvKiBUZXJtaW5hdGVzIGFueSBwZW5kaW5nIGRhdGEgdHJhbnNmZXJzLCBkaXNhYmxlIGkyYyBtb2R1b2xlIGFuZCBpMmMgY2xvY2sgYW5kIHJlbGF0ZWQgZWRtYSAqLworICAgICAgICBjYXNlIEFSTV9QT1dFUl9PRkY6CisgICAgICAgICAgICBJMkNfTWFzdGVyX0VkbWFDb250cm9sKEFSTV9JMkNfQUJPUlRfVFJBTlNGRVIsIDAsIGkyYyk7CisgICAgICAgICAgICBJMkNfTWFzdGVyRGVpbml0KGkyYy0+cmVzb3VyY2UtPmJhc2UpOworICAgICAgICAgICAgRE1BTVVYX0Rpc2FibGVDaGFubmVsKGkyYy0+ZWRtYVJlc291cmNlLT5pMmNEbWFtdXhCYXNlLCBpMmMtPmVkbWFSZXNvdXJjZS0+aTJjRWRtYUNoYW5uZWwpOworCisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICAvKiBOb3Qgc3VwcG9ydGVkICovCisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0xPVzoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworCisgICAgICAgIC8qIEVuYWJsZSBpMmMgbW9kdW9sZSBhbmQgaTJjIGNsb2NrICovCisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0ZVTEw6CisgICAgICAgICAgICBDTE9DS19FbmFibGVDbG9jayhzX2kyY0Nsb2Nrc1tJMkNfR2V0SW5zdGFuY2UoaTJjLT5yZXNvdXJjZS0+YmFzZSldKTsKKyAgICAgICAgICAgIGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxID0gSTJDX0MxX0lJQ0VOKDEpOworCisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorfQorCitBUk1fSTJDX1NUQVRVUyBJMkNfTWFzdGVyX0VkbWFHZXRTdGF0dXMoY21zaXNfaTJjX2VkbWFfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBBUk1fSTJDX1NUQVRVUyBzdGF0ID0gezB9OworICAgIHVpbnQzMl90IGtzZGtfaTJjX21hc3Rlcl9zdGF0dXMgPSBJMkNfTWFzdGVyR2V0U3RhdHVzRmxhZ3MoaTJjLT5yZXNvdXJjZS0+YmFzZSk7CisKKyAgICBzdGF0LmJ1c3kgPSAhKCEoa3Nka19pMmNfbWFzdGVyX3N0YXR1cyAmIGtJMkNfQnVzQnVzeUZsYWcpKTsgLyogQnVzeSBmbGFnLiovCisKKyAgICBzdGF0Lm1vZGUgPSAxOyAvKiBNb2RlOiAwPVNsYXZlLCAxPU1hc3Rlci4qLworCisgICAgc3RhdC5kaXJlY3Rpb24gPQorICAgICAgICAhKCEoa3Nka19pMmNfbWFzdGVyX3N0YXR1cyAmIGtJMkNfVHJhbnNmZXJEaXJlY3Rpb25GbGFnKSk7IC8qIERpcmVjdGlvbjogMD1UcmFuc21pdHRlciwgMT1SZWNlaXZlci4qLworCisgICAgc3RhdC5hcmJpdHJhdGlvbl9sb3N0ID0KKyAgICAgICAgISghKGtzZGtfaTJjX21hc3Rlcl9zdGF0dXMgJgorICAgICAgICAgICAga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnKSk7IC8qIE1hc3RlciBsb3N0IGFyYml0cmF0aW9uIChjbGVhcmVkIG9uIHN0YXJ0IG9mIG5leHQgTWFzdGVyIG9wZXJhdGlvbikqLworCisgICAgcmV0dXJuIHN0YXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisKKyNpZiAoKFJURV9JMkMwICYmICFSVEVfSTJDMF9ETUFfRU4pIHx8IChSVEVfSTJDMSAmJiAhUlRFX0kyQzFfRE1BX0VOKSB8fCAoUlRFX0kyQzIgJiYgIVJURV9JMkMyX0RNQV9FTikgfHwgXAorICAgICAoUlRFX0kyQzMgJiYgIVJURV9JMkMzX0RNQV9FTikpCisKK3N0YXRpYyB2b2lkIEtTREtfSTJDX1NMQVZFX0ludGVycnVwdENhbGxiYWNrKEkyQ19UeXBlICpiYXNlLCBpMmNfc2xhdmVfdHJhbnNmZXJfdCAqeGZlciwgdm9pZCAqdXNlckRhdGEpCit7CisgICAgdWludDMyX3QgZXZlbnQ7CisKKyAgICBzd2l0Y2ggKHhmZXItPmV2ZW50KQorICAgIHsKKyAgICAgICAgY2FzZSBrSTJDX1NsYXZlQ29tcGxldGlvbkV2ZW50OiAvKiBPY2N1cnMgYWZ0ZXIgU2xhdmUgVHJhbnNtaXQvUmVjZWl2ZSBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLiAqLworICAgICAgICAgICAgZXZlbnQgPSBBUk1fSTJDX0VWRU5UX1RSQU5TRkVSX0RPTkU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtJMkNfU2xhdmVHZW5hcmFsY2FsbEV2ZW50OgorICAgICAgICAgICAgZXZlbnQgPSBBUk1fSTJDX0VWRU5UX0dFTkVSQUxfQ0FMTDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBldmVudCA9IEFSTV9JMkNfRVZFTlRfVFJBTlNGRVJfSU5DT01QTEVURTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICh1c2VyRGF0YSkKKyAgICB7CisgICAgICAgICgoQVJNX0kyQ19TaWduYWxFdmVudF90KXVzZXJEYXRhKShldmVudCk7CisgICAgfQorfQorc3RhdGljIHZvaWQgS1NES19JMkNfTUFTVEVSX0ludGVycnVwdENhbGxiYWNrKEkyQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpCit7CisgICAgdWludDMyX3QgZXZlbnQ7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOiAvKiBPY2N1cnMgYWZ0ZXIgTWFzdGVyIFRyYW5zbWl0L1JlY2VpdmUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZC4gKi8KKyAgICAgICAgICAgIGV2ZW50ID0gQVJNX0kyQ19FVkVOVF9UUkFOU0ZFUl9ET05FOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19BZGRyX05hazogLyogT2NjdXJzIGluIG1hc3RlciBtb2RlIHdoZW4gYWRkcmVzcyBpcyBub3QgYWNrbm93bGVkZ2VkIGZyb20gc2xhdmUuKi8KKyAgICAgICAgICAgIGV2ZW50ID0gQVJNX0kyQ19FVkVOVF9BRERSRVNTX05BQ0s7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTdGF0dXNfSTJDX0FyYml0cmF0aW9uTG9zdDogLyogT2NjdXJzIGluIG1hc3RlciBtb2RlIHdoZW4gYXJiaXRyYXRpb24gaXMgbG9zdC4qLworICAgICAgICAgICAgZXZlbnQgPSBBUk1fSTJDX0VWRU5UX0FSQklUUkFUSU9OX0xPU1Q7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZXZlbnQgPSBBUk1fSTJDX0VWRU5UX1RSQU5TRkVSX0lOQ09NUExFVEU7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBVc2VyIGRhdGEgaXMgYWN0dWFsbHkgQ01TSVMgZHJpdmVyIGNhbGxiYWNrLiAqLworICAgIGlmICh1c2VyRGF0YSkKKyAgICB7CisgICAgICAgICgoQVJNX0kyQ19TaWduYWxFdmVudF90KXVzZXJEYXRhKShldmVudCk7CisgICAgfQorfQorCitzdGF0aWMgaW50MzJfdCBJMkNfSW50ZXJydXB0SW5pdGlhbGl6ZShBUk1fSTJDX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQsIGNtc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBpMmMtPmNiX2V2ZW50ID0gY2JfZXZlbnQ7IC8qIGNiX2V2ZW50IGlzIENNU0lTIGRyaXZlciBjYWxsYmFjay4gKi8KKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgSTJDX0ludGVycnVwdFVuaW5pdGlhbGl6ZShjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgaTJjLT5pc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK2ludDMyX3QgSTJDX01hc3Rlcl9JbnRlcnJ1cHRUcmFuc21pdCgKKyAgICB1aW50MzJfdCBhZGRyLCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nLCBjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgaW50MzJfdCBzdGF0dXM7CisgICAgaW50MzJfdCByZXQ7CisgICAgaTJjX21hc3Rlcl90cmFuc2Zlcl90IG1hc3RlclhmZXI7CisKKyAgICAvKiBDaGVjayBpZiB0aGUgSTJDIGJ1cyBpcyBpZGxlIC0gaWYgbm90IHJldHVybiBidXN5IHN0YXR1cy4gKi8KKyAgICBpZiAoaTJjLT5oYW5kbGUtPm1hc3Rlcl9oYW5kbGUuc3RhdGUgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgfQorCisgICAgLyogQ3JlYXRlIG1hc3Rlcl9oYW5kbGUgKi8KKyAgICBJMkNfTWFzdGVyVHJhbnNmZXJDcmVhdGVIYW5kbGUoaTJjLT5yZXNvdXJjZS0+YmFzZSwgJihpMmMtPmhhbmRsZS0+bWFzdGVyX2hhbmRsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtTREtfSTJDX01BU1RFUl9JbnRlcnJ1cHRDYWxsYmFjaywgKHZvaWQgKilpMmMtPmNiX2V2ZW50KTsKKworICAgIG1hc3RlclhmZXIuc2xhdmVBZGRyZXNzID0gYWRkcjsgICAgICAgICAgICAgIC8qNy1iaXQgc2xhdmUgYWRkcmVzcy4qLworICAgIG1hc3RlclhmZXIuZGlyZWN0aW9uID0ga0kyQ19Xcml0ZTsgICAgICAgICAgIC8qIFRyYW5zZmVyIGRpcmVjdGlvbi4qLworICAgIG1hc3RlclhmZXIuc3ViYWRkcmVzcyA9ICh1aW50MzJfdClOVUxMOyAgICAgIC8qIFN1YiBhZGRyZXNzICovCisgICAgbWFzdGVyWGZlci5zdWJhZGRyZXNzU2l6ZSA9IDA7ICAgICAgICAgICAgICAgLyogU2l6ZSBvZiBjb21tYW5kIGJ1ZmZlci4qLworICAgIG1hc3RlclhmZXIuZGF0YSA9ICh1aW50OF90ICopZGF0YTsgICAgICAgICAgIC8qIFRyYW5zZmVyIGJ1ZmZlci4qLworICAgIG1hc3RlclhmZXIuZGF0YVNpemUgPSBudW07ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIHNpemUuKi8KKyAgICBtYXN0ZXJYZmVyLmZsYWdzID0ga0kyQ19UcmFuc2ZlckRlZmF1bHRGbGFnOyAvKiBUcmFuc2ZlciBmbGFnIHdoaWNoIGNvbnRyb2xzIHRoZSB0cmFuc2Zlci4qLworCisgICAgaWYgKGkyYy0+cmVzb3VyY2UtPmJhc2UtPlMgJiAweDIwKQorICAgIHsKKyAgICAgICAgbWFzdGVyWGZlci5mbGFncyB8PSBrSTJDX1RyYW5zZmVyUmVwZWF0ZWRTdGFydEZsYWc7CisgICAgfQorCisgICAgaWYgKHhmZXJfcGVuZGluZykKKyAgICB7CisgICAgICAgIG1hc3RlclhmZXIuZmxhZ3MgfD0ga0kyQ19UcmFuc2Zlck5vU3RvcEZsYWc7CisgICAgfQorCisgICAgc3RhdHVzID0gSTJDX01hc3RlclRyYW5zZmVyTm9uQmxvY2tpbmcoaTJjLT5yZXNvdXJjZS0+YmFzZSwgJihpMmMtPmhhbmRsZS0+bWFzdGVyX2hhbmRsZSksICZtYXN0ZXJYZmVyKTsKKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdHVzX1N1Y2Nlc3M6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX09LOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19CdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19UaW1lb3V0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9USU1FT1VUOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQzMl90IEkyQ19NYXN0ZXJfSW50ZXJydXB0UmVjZWl2ZSgKKyAgICB1aW50MzJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nLCBjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgaW50MzJfdCBzdGF0dXM7CisgICAgaW50MzJfdCByZXQ7CisgICAgaTJjX21hc3Rlcl90cmFuc2Zlcl90IG1hc3RlclhmZXI7CisKKyAgICAvKiBDaGVjayBpZiB0aGUgSTJDIGJ1cyBpcyBpZGxlIC0gaWYgbm90IHJldHVybiBidXN5IHN0YXR1cy4gKi8KKyAgICBpZiAoaTJjLT5oYW5kbGUtPm1hc3Rlcl9oYW5kbGUuc3RhdGUgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgfQorCisgICAgLyogQ3JlYXRlIG1hc3Rlcl9oYW5kbGUgKi8KKyAgICBJMkNfTWFzdGVyVHJhbnNmZXJDcmVhdGVIYW5kbGUoaTJjLT5yZXNvdXJjZS0+YmFzZSwgJihpMmMtPmhhbmRsZS0+bWFzdGVyX2hhbmRsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtTREtfSTJDX01BU1RFUl9JbnRlcnJ1cHRDYWxsYmFjaywgKHZvaWQgKilpMmMtPmNiX2V2ZW50KTsKKworICAgIG1hc3RlclhmZXIuc2xhdmVBZGRyZXNzID0gYWRkcjsgICAgICAgICAgICAgIC8qNy1iaXQgc2xhdmUgYWRkcmVzcy4qLworICAgIG1hc3RlclhmZXIuZGlyZWN0aW9uID0ga0kyQ19SZWFkOyAgICAgICAgICAgIC8qIFRyYW5zZmVyIGRpcmVjdGlvbi4qLworICAgIG1hc3RlclhmZXIuc3ViYWRkcmVzcyA9ICh1aW50MzJfdClOVUxMOyAgICAgIC8qIFN1YiBhZGRyZXNzICovCisgICAgbWFzdGVyWGZlci5zdWJhZGRyZXNzU2l6ZSA9IDA7ICAgICAgICAgICAgICAgLyogU2l6ZSBvZiBjb21tYW5kIGJ1ZmZlci4qLworICAgIG1hc3RlclhmZXIuZGF0YSA9IGRhdGE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGJ1ZmZlci4qLworICAgIG1hc3RlclhmZXIuZGF0YVNpemUgPSBudW07ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIHNpemUuKi8KKyAgICBtYXN0ZXJYZmVyLmZsYWdzID0ga0kyQ19UcmFuc2ZlckRlZmF1bHRGbGFnOyAvKiBUcmFuc2ZlciBmbGFnIHdoaWNoIGNvbnRyb2xzIHRoZSB0cmFuc2Zlci4qLworCisgICAgaWYgKGkyYy0+cmVzb3VyY2UtPmJhc2UtPlMgJiAweDIwKQorICAgIHsKKyAgICAgICAgbWFzdGVyWGZlci5mbGFncyB8PSBrSTJDX1RyYW5zZmVyUmVwZWF0ZWRTdGFydEZsYWc7CisgICAgfQorCisgICAgaWYgKHhmZXJfcGVuZGluZykKKyAgICB7CisgICAgICAgIG1hc3RlclhmZXIuZmxhZ3MgfD0ga0kyQ19UcmFuc2Zlck5vU3RvcEZsYWc7CisgICAgfQorCisgICAgc3RhdHVzID0gSTJDX01hc3RlclRyYW5zZmVyTm9uQmxvY2tpbmcoaTJjLT5yZXNvdXJjZS0+YmFzZSwgJihpMmMtPmhhbmRsZS0+bWFzdGVyX2hhbmRsZSksICZtYXN0ZXJYZmVyKTsKKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdHVzX1N1Y2Nlc3M6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX09LOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19CdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19UaW1lb3V0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9USU1FT1VUOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQzMl90IEkyQ19TbGF2ZV9JbnRlcnJ1cHRUcmFuc21pdChjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGNtc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBpbnQzMl90IHN0YXR1czsKKyAgICBpbnQzMl90IHJldDsKKworICAgIC8qIENyZWF0ZSBzbGF2ZV9oYW5kbGUgKi8KKyAgICBJMkNfU2xhdmVUcmFuc2ZlckNyZWF0ZUhhbmRsZShpMmMtPnJlc291cmNlLT5iYXNlLCAmKGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUpLCBLU0RLX0kyQ19TTEFWRV9JbnRlcnJ1cHRDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWkyYy0+Y2JfZXZlbnQpOworCisgICAgc3RhdHVzID0gSTJDX1NsYXZlVHJhbnNmZXJOb25CbG9ja2luZyhpMmMtPnJlc291cmNlLT5iYXNlLCAmKGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUpLCBrSTJDX1NsYXZlQ29tcGxldGlvbkV2ZW50KTsKKworICAgIGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUudHJhbnNmZXIuZGF0YSA9CisgICAgICAgICh1aW50OF90ICopZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBidWZmZXIgd2l0aCBkYXRhIHRvIHRyYW5zbWl0IHRvIEkyQyBNYXN0ZXIgKi8KKyAgICBpMmMtPmhhbmRsZS0+c2xhdmVfaGFuZGxlLnRyYW5zZmVyLmRhdGFTaXplID0gbnVtOyAvKiBOdW1iZXIgb2YgZGF0YSBieXRlcyB0byB0cmFuc21pdCAqLworICAgIGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUudHJhbnNmZXIudHJhbnNmZXJyZWRDb3VudCA9CisgICAgICAgIDA7IC8qIE51bWJlciBvZiBieXRlcyBhY3R1YWxseSB0cmFuc2ZlcnJlZCBzaW5jZSBzdGFydCBvciBsYXN0IHJlcGVhdGVkIHN0YXJ0LiAqLworCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTdGF0dXNfSTJDX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CitpbnQzMl90IEkyQ19TbGF2ZV9JbnRlcnJ1cHRSZWNlaXZlKHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgY21zaXNfaTJjX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIGludDMyX3Qgc3RhdHVzOworICAgIGludDMyX3QgcmV0OworCisgICAgaTJjLT5yZXNvdXJjZS0+YmFzZS0+QzIgPSBJMkNfQzJfR0NBRU4oMSk7IC8qIEVuYWJsZSBnZW5lcmFsIGNhbGwgKi8KKworICAgIC8qIENyZWF0ZSBzbGF2ZV9oYW5kbGUgKi8KKyAgICBJMkNfU2xhdmVUcmFuc2ZlckNyZWF0ZUhhbmRsZShpMmMtPnJlc291cmNlLT5iYXNlLCAmKGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUpLCBLU0RLX0kyQ19TTEFWRV9JbnRlcnJ1cHRDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWkyYy0+Y2JfZXZlbnQpOworCisgICAgc3RhdHVzID0gSTJDX1NsYXZlVHJhbnNmZXJOb25CbG9ja2luZyhpMmMtPnJlc291cmNlLT5iYXNlLCAmKGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUpLCBrSTJDX1NsYXZlQ29tcGxldGlvbkV2ZW50KTsKKworICAgIGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUudHJhbnNmZXIuZGF0YSA9IGRhdGE7ICAgIC8qIFBvaW50ZXIgdG8gYnVmZmVyIHdpdGggZGF0YSB0byB0cmFuc21pdCB0byBJMkMgTWFzdGVyICovCisgICAgaTJjLT5oYW5kbGUtPnNsYXZlX2hhbmRsZS50cmFuc2Zlci5kYXRhU2l6ZSA9IG51bTsgLyogTnVtYmVyIG9mIGRhdGEgYnl0ZXMgdG8gdHJhbnNtaXQgKi8KKyAgICBpMmMtPmhhbmRsZS0+c2xhdmVfaGFuZGxlLnRyYW5zZmVyLnRyYW5zZmVycmVkQ291bnQgPQorICAgICAgICAwOyAvKiBOdW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgdHJhbnNmZXJyZWQgc2luY2Ugc3RhcnQgb3IgbGFzdCByZXBlYXRlZCBzdGFydC4gKi8KKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdHVzX1N1Y2Nlc3M6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX09LOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19CdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQoraW50MzJfdCBJMkNfSW50ZXJydXB0R2V0RGF0YUNvdW50KGNtc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICB1aW50MzJfdCBjbnQ7IC8qIFRoZSBudW1iZXIgb2YgY3VycmVudGx5IHRyYW5zZmVycmVkIGRhdGEgYnl0ZXMgKi8KKworICAgIGlmIChpMmMtPmhhbmRsZS0+c2xhdmVfaGFuZGxlLnRyYW5zZmVyLnRyYW5zZmVycmVkQ291bnQpCisgICAgeworICAgICAgICBjbnQgPSBpMmMtPmhhbmRsZS0+c2xhdmVfaGFuZGxlLnRyYW5zZmVyLnRyYW5zZmVycmVkQ291bnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNudCA9ICYoaTJjLT5oYW5kbGUtPm1hc3Rlcl9oYW5kbGUpLnRyYW5zZmVyU2l6ZSAtICYoaTJjLT5oYW5kbGUtPm1hc3Rlcl9oYW5kbGUpLnRyYW5zZmVyLmRhdGFTaXplOworICAgIH0KKworICAgIHJldHVybiBjbnQ7Cit9CisKK2ludDMyX3QgSTJDX0ludGVycnVwdENvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnLCBjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgdWludDMyX3QgYmF1ZFJhdGVfQnBzOworCisgICAgc3dpdGNoIChjb250cm9sKQorICAgIHsKKyAgICAgICAgLyogU2V0IE93biBTbGF2ZSBBZGRyZXNzOyBhcmcgPSBzbGF2ZSBhZGRyZXNzICovCisgICAgICAgIGNhc2UgQVJNX0kyQ19PV05fQUREUkVTUzoKKyAgICAgICAgICAgIGkyYy0+cmVzb3VyY2UtPmJhc2UtPkExID0gKGFyZyA8PCAxVSk7CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICAvKiBTZXQgQnVzIFNwZWVkOyBhcmcgPSBidXMgc3BlZWQgKi8KKyAgICAgICAgY2FzZSBBUk1fSTJDX0JVU19TUEVFRDoKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgQVJNX0kyQ19CVVNfU1BFRURfU1RBTkRBUkQ6CisgICAgICAgICAgICAgICAgICAgIGJhdWRSYXRlX0JwcyA9IDEwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEFSTV9JMkNfQlVTX1NQRUVEX0ZBU1Q6CisgICAgICAgICAgICAgICAgICAgIGJhdWRSYXRlX0JwcyA9IDQwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEFSTV9JMkNfQlVTX1NQRUVEX0ZBU1RfUExVUzoKKyAgICAgICAgICAgICAgICAgICAgYmF1ZFJhdGVfQnBzID0gMTAwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSTJDX01hc3RlclNldEJhdWRSYXRlKGkyYy0+cmVzb3VyY2UtPmJhc2UsIGJhdWRSYXRlX0JwcywgaTJjLT5yZXNvdXJjZS0+R2V0RnJlcSgpKTsKKworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisgICAgICAgIC8qIE5vdCBzdXBwb3J0ZWQgKi8KKyAgICAgICAgY2FzZSBBUk1fSTJDX0JVU19DTEVBUjoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworCisgICAgICAgIC8qIEFib3J0cyB0aGUgZGF0YSB0cmFuc2ZlciBiZXR3ZWVuIE1hc3RlciBhbmQgU2xhdmUgZm9yIFRyYW5zbWl0IG9yIFJlY2VpdmUgKi8KKyAgICAgICAgY2FzZSBBUk1fSTJDX0FCT1JUX1RSQU5TRkVSOgorICAgICAgICAgICAgaWYgKGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxICYgSTJDX0MxX01TVF9NQVNLKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIERpc2FibGUgbWFzdGVyIGludGVycnVwdCBhbmQgc2VuZCBTVE9QIHNpZ25hbCAqLworICAgICAgICAgICAgICAgIEkyQ19NYXN0ZXJUcmFuc2ZlckFib3J0KGkyYy0+cmVzb3VyY2UtPmJhc2UsICYoaTJjLT5oYW5kbGUtPm1hc3Rlcl9oYW5kbGUpKTsKKworICAgICAgICAgICAgICAgIGkyYy0+aGFuZGxlLT5tYXN0ZXJfaGFuZGxlLnRyYW5zZmVyU2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgaTJjLT5oYW5kbGUtPm1hc3Rlcl9oYW5kbGUudHJhbnNmZXIuZGF0YSA9IE5VTEw7CisgICAgICAgICAgICAgICAgaTJjLT5oYW5kbGUtPm1hc3Rlcl9oYW5kbGUudHJhbnNmZXIuZGF0YVNpemUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogSWYgc2xhdmUgcmVjZWl2ZSAqLworICAgICAgICAgICAgaWYgKChpMmMtPmhhbmRsZS0+c2xhdmVfaGFuZGxlLmlzQnVzeSkgJiYgKCEoaTJjLT5yZXNvdXJjZS0+YmFzZS0+UyAmIGtJMkNfVHJhbnNmZXJEaXJlY3Rpb25GbGFnKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaTJjLT5yZXNvdXJjZS0+YmFzZS0+QzEgfD0gSTJDX0MxX1RYQUtfTUFTSzsKKworICAgICAgICAgICAgICAgIHdoaWxlIChpMmMtPmhhbmRsZS0+c2xhdmVfaGFuZGxlLmlzQnVzeSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIERpc2FibGUgc2xhdmUgaW50ZXJydXB0ICovCisKKyAgICAgICAgICAgICAgICBJMkNfU2xhdmVUcmFuc2ZlckFib3J0KGkyYy0+cmVzb3VyY2UtPmJhc2UsICYoaTJjLT5oYW5kbGUtPnNsYXZlX2hhbmRsZSkpOworCisgICAgICAgICAgICAgICAgaTJjLT5oYW5kbGUtPnNsYXZlX2hhbmRsZS50cmFuc2Zlci5kYXRhID0gTlVMTDsKKyAgICAgICAgICAgICAgICBpMmMtPmhhbmRsZS0+c2xhdmVfaGFuZGxlLnRyYW5zZmVyLmRhdGFTaXplID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorfQorCitzdGF0aWMgaW50MzJfdCBJMkNfSW50ZXJydXB0UG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSwgY21zaXNfaTJjX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIHN3aXRjaCAoc3RhdGUpCisgICAgeworICAgICAgICAvKiBUZXJtaW5hdGVzIGFueSBwZW5kaW5nIGRhdGEgdHJhbnNmZXJzLCBkaXNhYmxlIGkyYyBtb2R1b2xlIGFuZCBpMmMgY2xvY2sgKi8KKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfT0ZGOgorCisgICAgICAgICAgICBJMkNfSW50ZXJydXB0Q29udHJvbChBUk1fSTJDX0FCT1JUX1RSQU5TRkVSLCAwLCBpMmMpOworCisgICAgICAgICAgICBJMkNfTWFzdGVyRGVpbml0KGkyYy0+cmVzb3VyY2UtPmJhc2UpOworCisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICAvKiBOb3Qgc3VwcG9ydGVkICovCisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0xPVzoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworCisgICAgICAgIC8qIEVuYWJsZSBpMmMgbW9kdW9sZSBhbmQgaTJjIGNsb2NrICovCisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0ZVTEw6CisKKyAgICAgICAgICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfaTJjQ2xvY2tzW0kyQ19HZXRJbnN0YW5jZShpMmMtPnJlc291cmNlLT5iYXNlKV0pOworCisgICAgICAgICAgICBpMmMtPnJlc291cmNlLT5iYXNlLT5DMSA9IEkyQ19DMV9JSUNFTigxKTsKKworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KK30KKworQVJNX0kyQ19TVEFUVVMgSTJDX0ludGVycnVwdEdldFN0YXR1cyhjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgQVJNX0kyQ19TVEFUVVMgc3RhdCA9IHswfTsKKyAgICB1aW50MzJfdCBrc2RrX2kyY19zdGF0dXMgPSBJMkNfU2xhdmVHZXRTdGF0dXNGbGFncyhpMmMtPnJlc291cmNlLT5iYXNlKTsKKyAgICBzdGF0LmJ1c3kgPSAhKCEoa3Nka19pMmNfc3RhdHVzICYga0kyQ19CdXNCdXN5RmxhZykpOyAvKiBCdXN5IGZsYWcuKi8KKworICAgIGlmIChpMmMtPnJlc291cmNlLT5iYXNlLT5DMSAmIEkyQ19DMV9NU1RfTUFTSykKKyAgICB7CisgICAgICAgIHN0YXQuZGlyZWN0aW9uID0gISghKGtzZGtfaTJjX3N0YXR1cyAmIGtJMkNfVHJhbnNmZXJEaXJlY3Rpb25GbGFnKSk7IC8qIERpcmVjdGlvbjogMD1UcmFuc21pdHRlciwgMT1SZWNlaXZlci4qLworICAgICAgICBzdGF0Lm1vZGUgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb2RlOiAwPVNsYXZlLCAxPU1hc3Rlci4qLworICAgIH0KKworICAgIGlmIChpMmMtPmhhbmRsZS0+c2xhdmVfaGFuZGxlLmlzQnVzeSkKKyAgICB7CisgICAgICAgIHN0YXQuZGlyZWN0aW9uID0gIShrc2RrX2kyY19zdGF0dXMgJiBrSTJDX1RyYW5zZmVyRGlyZWN0aW9uRmxhZyk7IC8qIERpcmVjdGlvbjogMD1UcmFuc21pdHRlciwgMT1SZWNlaXZlci4qLworICAgICAgICBzdGF0Lm1vZGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb2RlOiAwPVNsYXZlLCAxPU1hc3Rlci4qLworICAgIH0KKworICAgIHN0YXQuYXJiaXRyYXRpb25fbG9zdCA9CisgICAgICAgICEoIShrc2RrX2kyY19zdGF0dXMgJgorICAgICAgICAgICAga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnKSk7IC8qIE1hc3RlciBsb3N0IGFyYml0cmF0aW9uIChjbGVhcmVkIG9uIHN0YXJ0IG9mIG5leHQgTWFzdGVyIG9wZXJhdGlvbikqLworCisgICAgcmV0dXJuIHN0YXQ7Cit9CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChJMkMwKSAmJiBSVEVfSTJDMAorZXh0ZXJuIHVpbnQzMl90IEkyQzBfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIEkyQzBfSW5pdFBpbnModm9pZCk7CitleHRlcm4gdm9pZCBJMkMwX0RlaW5pdFBpbnModm9pZCk7CisKK2Ntc2lzX2kyY19yZXNvdXJjZV90IEkyQzBfUmVzb3VyY2UgPSB7STJDMCwgSTJDMF9HZXRGcmVxfTsKKworI2lmIFJURV9JMkMwX0RNQV9FTgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkKKworY21zaXNfaTJjX2RtYV9yZXNvdXJjZV90IEkyQzBfRG1hUmVzb3VyY2UgPSB7UlRFX0kyQzBfTWFzdGVyX0RNQV9CQVNFLCBSVEVfSTJDMF9NYXN0ZXJfRE1BX0NILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRFX0kyQzBfTWFzdGVyX0RNQU1VWF9CQVNFLCBSVEVfSTJDMF9NYXN0ZXJfUEVSSV9TRUx9OworCitpMmNfbWFzdGVyX2RtYV9oYW5kbGVfdCBJMkMwX0RtYUhhbmRsZTsKK2RtYV9oYW5kbGVfdCBJMkMwX0RtYVR4UnhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiaTJjMF9kbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgSTJDMF9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19pMmNfZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzBfRG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmSTJDMF9SZXNvdXJjZSwgJkkyQzBfRG1hUmVzb3VyY2UsICZJMkMwX0RtYUhhbmRsZSwgJkkyQzBfRG1hVHhSeEhhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IEkyQzBfTWFzdGVyX0RtYUluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIEkyQzBfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDMF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9NYXN0ZXJfRG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgSTJDMF9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hVW5pbml0aWFsaXplKCZJMkMwX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMwX01hc3Rlcl9EbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkkyQzBfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfTWFzdGVyX0RtYVRyYW5zbWl0KHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hVHJhbnNtaXQoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMwX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMwX01hc3Rlcl9EbWFSZWNlaXZlKHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hUmVjZWl2ZShhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzBfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfTWFzdGVyX0RtYUdldERhdGFDb3VudCh2b2lkKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYUdldERhdGFDb3VudCgmSTJDMF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9NYXN0ZXJfRG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hQ29udHJvbChjb250cm9sLCBhcmcsICZJMkMwX0RtYURyaXZlclN0YXRlKTsKK30KKworQVJNX0kyQ19TVEFUVVMgSTJDMF9NYXN0ZXJfRG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hR2V0U3RhdHVzKCZJMkMwX0RtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisKK2Ntc2lzX2kyY19lZG1hX3Jlc291cmNlX3QgSTJDMF9FZG1hUmVzb3VyY2UgPSB7UlRFX0kyQzBfTWFzdGVyX0RNQV9CQVNFLCBSVEVfSTJDMF9NYXN0ZXJfRE1BX0NILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEVfSTJDMF9NYXN0ZXJfRE1BTVVYX0JBU0UsIFJURV9JMkMwX01hc3Rlcl9QRVJJX1NFTH07CisKK2kyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCBJMkMwX0VkbWFIYW5kbGU7CitlZG1hX2hhbmRsZV90IEkyQzBfRWRtYVR4UnhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiaTJjMF9lZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCBJMkMwX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCBJMkMwX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZJMkMwX1Jlc291cmNlLCAmSTJDMF9FZG1hUmVzb3VyY2UsICZJMkMwX0VkbWFIYW5kbGUsICZJMkMwX0VkbWFUeFJ4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgSTJDMF9NYXN0ZXJfRWRtYUluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIEkyQzBfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkkyQzBfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMwX01hc3Rlcl9FZG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgSTJDMF9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVVuaW5pdGlhbGl6ZSgmSTJDMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfTWFzdGVyX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFQb3dlckNvbnRyb2woc3RhdGUsICZJMkMwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9NYXN0ZXJfRWRtYVRyYW5zbWl0KHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVRyYW5zbWl0KGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfTWFzdGVyX0VkbWFSZWNlaXZlKHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVJlY2VpdmUoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9NYXN0ZXJfRWRtYUdldERhdGFDb3VudCh2b2lkKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFHZXREYXRhQ291bnQoJkkyQzBfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMwX01hc3Rlcl9FZG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmSTJDMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitBUk1fSTJDX1NUQVRVUyBJMkMwX01hc3Rlcl9FZG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYUdldFN0YXR1cygmSTJDMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2Vsc2UKKworY21zaXNfaTJjX2hhbmRsZV90IEkyQzBfaGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImkyYzBfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZSIpCitjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90IEkyQzBfSW50ZXJydXB0RHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfaTJjX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCBJMkMwX0ludGVycnVwdERyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkkyQzBfUmVzb3VyY2UsICZJMkMwX2hhbmRsZSwKKworfTsKKworc3RhdGljIGludDMyX3QgSTJDMF9JbnRlcnJ1cHRJbml0aWFsaXplKEFSTV9JMkNfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBJMkMwX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IEkyQzBfSW50ZXJydXB0VW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgSTJDMF9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRVbmluaXRpYWxpemUoJkkyQzBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBJMkMwX0ludGVycnVwdFBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRQb3dlckNvbnRyb2woc3RhdGUsICZJMkMwX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMwX01hc3Rlcl9JbnRlcnJ1cHRUcmFuc21pdCh1aW50MzJfdCBhZGRyLCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0ludGVycnVwdFRyYW5zbWl0KGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9NYXN0ZXJfSW50ZXJydXB0UmVjZWl2ZSh1aW50MzJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0ludGVycnVwdFJlY2VpdmUoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMwX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMwX1NsYXZlX0ludGVycnVwdFRyYW5zbWl0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gSTJDX1NsYXZlX0ludGVycnVwdFRyYW5zbWl0KGRhdGEsIG51bSwgJkkyQzBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfU2xhdmVfSW50ZXJydXB0UmVjZWl2ZSh1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIEkyQ19TbGF2ZV9JbnRlcnJ1cHRSZWNlaXZlKGRhdGEsIG51bSwgJkkyQzBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfSW50ZXJydXB0R2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRHZXREYXRhQ291bnQoJkkyQzBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfSW50ZXJydXB0Q29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRDb250cm9sKGNvbnRyb2wsIGFyZywgJkkyQzBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitBUk1fSTJDX1NUQVRVUyBJMkMwX0ludGVycnVwdEdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBJMkNfSW50ZXJydXB0R2V0U3RhdHVzKCZJMkMwX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKK0FSTV9EUklWRVJfSTJDIERyaXZlcl9JMkMwID0ge0kyQ3hfR2V0VmVyc2lvbiwgSTJDeF9HZXRDYXBhYmlsaXRpZXMsCisjaWYgUlRFX0kyQzBfRE1BX0VOCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMF9NYXN0ZXJfRWRtYUluaXRpYWxpemUsIEkyQzBfTWFzdGVyX0VkbWFVbmluaXRpYWxpemUsIEkyQzBfTWFzdGVyX0VkbWFQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMwX01hc3Rlcl9FZG1hVHJhbnNtaXQsIEkyQzBfTWFzdGVyX0VkbWFSZWNlaXZlLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMF9NYXN0ZXJfRWRtYUdldERhdGFDb3VudCwgSTJDMF9NYXN0ZXJfRWRtYUNvbnRyb2wsIEkyQzBfTWFzdGVyX0VkbWFHZXRTdGF0dXMKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMwX01hc3Rlcl9EbWFJbml0aWFsaXplLCBJMkMwX01hc3Rlcl9EbWFVbmluaXRpYWxpemUsIEkyQzBfTWFzdGVyX0RtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzBfTWFzdGVyX0RtYVRyYW5zbWl0LCBJMkMwX01hc3Rlcl9EbWFSZWNlaXZlLCBOVUxMLCBOVUxMLCBJMkMwX01hc3Rlcl9EbWFHZXREYXRhQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMwX01hc3Rlcl9EbWFDb250cm9sLCBJMkMwX01hc3Rlcl9EbWFHZXRTdGF0dXMKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzBfSW50ZXJydXB0SW5pdGlhbGl6ZSwgSTJDMF9JbnRlcnJ1cHRVbmluaXRpYWxpemUsIEkyQzBfSW50ZXJydXB0UG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMF9NYXN0ZXJfSW50ZXJydXB0VHJhbnNtaXQsIEkyQzBfTWFzdGVyX0ludGVycnVwdFJlY2VpdmUsIEkyQzBfU2xhdmVfSW50ZXJydXB0VHJhbnNtaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMwX1NsYXZlX0ludGVycnVwdFJlY2VpdmUsIEkyQzBfSW50ZXJydXB0R2V0RGF0YUNvdW50LCBJMkMwX0ludGVycnVwdENvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMwX0ludGVycnVwdEdldFN0YXR1cworI2VuZGlmCit9OworCisjZW5kaWYKKworI2lmIGRlZmluZWQoSTJDMSkgJiYgUlRFX0kyQzEKKworZXh0ZXJuIHVpbnQzMl90IEkyQzFfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIEkyQzFfSW5pdFBpbnModm9pZCk7CitleHRlcm4gdm9pZCBJMkMxX0RlaW5pdFBpbnModm9pZCk7CisKK2Ntc2lzX2kyY19yZXNvdXJjZV90IEkyQzFfUmVzb3VyY2UgPSB7STJDMSwgSTJDMV9HZXRGcmVxfTsKKworI2lmIFJURV9JMkMxX0RNQV9FTgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkKKworY21zaXNfaTJjX2RtYV9yZXNvdXJjZV90IEkyQzFfRG1hUmVzb3VyY2UgPSB7UlRFX0kyQzFfTWFzdGVyX0RNQV9CQVNFLCBSVEVfSTJDMV9NYXN0ZXJfRE1BX0NILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRFX0kyQzFfTWFzdGVyX0RNQU1VWF9CQVNFLCBSVEVfSTJDMV9NYXN0ZXJfUEVSSV9TRUx9OworCitpMmNfbWFzdGVyX2RtYV9oYW5kbGVfdCBJMkMxX0RtYUhhbmRsZTsKK2RtYV9oYW5kbGVfdCBJMkMxX0RtYVR4UnhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiaTJjMV9kbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgSTJDMV9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19pMmNfZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzFfRG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmSTJDMV9SZXNvdXJjZSwgJkkyQzFfRG1hUmVzb3VyY2UsICZJMkMxX0RtYUhhbmRsZSwgJkkyQzFfRG1hVHhSeEhhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IEkyQzFfTWFzdGVyX0RtYUluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIEkyQzFfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMV9NYXN0ZXJfRG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgSTJDMV9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hVW5pbml0aWFsaXplKCZJMkMxX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX01hc3Rlcl9EbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkkyQzFfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfTWFzdGVyX0RtYVRyYW5zbWl0KHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hVHJhbnNtaXQoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMxX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX01hc3Rlcl9EbWFSZWNlaXZlKHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hUmVjZWl2ZShhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzFfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfTWFzdGVyX0RtYUdldERhdGFDb3VudCh2b2lkKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYUdldERhdGFDb3VudCgmSTJDMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMV9NYXN0ZXJfRG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hQ29udHJvbChjb250cm9sLCBhcmcsICZJMkMxX0RtYURyaXZlclN0YXRlKTsKK30KKworQVJNX0kyQ19TVEFUVVMgSTJDMV9NYXN0ZXJfRG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hR2V0U3RhdHVzKCZJMkMxX0RtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisKK2Ntc2lzX2kyY19lZG1hX3Jlc291cmNlX3QgSTJDMV9FZG1hUmVzb3VyY2UgPSB7UlRFX0kyQzFfTWFzdGVyX0RNQV9CQVNFLCBSVEVfSTJDMV9NYXN0ZXJfRE1BX0NILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEVfSTJDMV9NYXN0ZXJfRE1BTVVYX0JBU0UsIFJURV9JMkMxX01hc3Rlcl9QRVJJX1NFTH07CisKK2kyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCBJMkMxX0VkbWFIYW5kbGU7CitlZG1hX2hhbmRsZV90IEkyQzFfRWRtYVR4UnhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiaTJjMV9lZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCBJMkMxX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCBJMkMxX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZJMkMxX1Jlc291cmNlLCAmSTJDMV9FZG1hUmVzb3VyY2UsICZJMkMxX0VkbWFIYW5kbGUsICZJMkMxX0VkbWFUeFJ4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgSTJDMV9NYXN0ZXJfRWRtYUluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIEkyQzFfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkkyQzFfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX01hc3Rlcl9FZG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgSTJDMV9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVVuaW5pdGlhbGl6ZSgmSTJDMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfTWFzdGVyX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFQb3dlckNvbnRyb2woc3RhdGUsICZJMkMxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMV9NYXN0ZXJfRWRtYVRyYW5zbWl0KHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVRyYW5zbWl0KGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfTWFzdGVyX0VkbWFSZWNlaXZlKHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVJlY2VpdmUoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMV9NYXN0ZXJfRWRtYUdldERhdGFDb3VudCh2b2lkKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFHZXREYXRhQ291bnQoJkkyQzFfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX01hc3Rlcl9FZG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmSTJDMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitBUk1fSTJDX1NUQVRVUyBJMkMxX01hc3Rlcl9FZG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYUdldFN0YXR1cygmSTJDMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2Vsc2UKKworY21zaXNfaTJjX2hhbmRsZV90IEkyQzFfSGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImkyYzFfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZSIpCitjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90IEkyQzFfSW50ZXJydXB0RHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfaTJjX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCBJMkMxX0ludGVycnVwdERyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkkyQzFfUmVzb3VyY2UsICZJMkMxX0hhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IEkyQzFfSW50ZXJydXB0SW5pdGlhbGl6ZShBUk1fSTJDX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgSTJDMV9Jbml0UGlucygpOworICAgIHJldHVybiBJMkNfSW50ZXJydXB0SW5pdGlhbGl6ZShjYl9ldmVudCwgJkkyQzFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBJMkMxX0ludGVycnVwdFVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIEkyQzFfRGVpbml0UGlucygpOworICAgIHJldHVybiBJMkNfSW50ZXJydXB0VW5pbml0aWFsaXplKCZJMkMxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgSTJDMV9JbnRlcnJ1cHRQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBJMkNfSW50ZXJydXB0UG93ZXJDb250cm9sKHN0YXRlLCAmSTJDMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMV9NYXN0ZXJfSW50ZXJydXB0VHJhbnNtaXQodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9JbnRlcnJ1cHRUcmFuc21pdChhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfTWFzdGVyX0ludGVycnVwdFJlY2VpdmUodWludDMyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9JbnRlcnJ1cHRSZWNlaXZlKGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMV9TbGF2ZV9JbnRlcnJ1cHRUcmFuc21pdChjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIEkyQ19TbGF2ZV9JbnRlcnJ1cHRUcmFuc21pdChkYXRhLCBudW0sICZJMkMxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX1NsYXZlX0ludGVycnVwdFJlY2VpdmUodWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBJMkNfU2xhdmVfSW50ZXJydXB0UmVjZWl2ZShkYXRhLCBudW0sICZJMkMxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX0ludGVycnVwdEdldERhdGFDb3VudCh2b2lkKQoreworICAgIHJldHVybiBJMkNfSW50ZXJydXB0R2V0RGF0YUNvdW50KCZJMkMxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX0ludGVycnVwdENvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBJMkNfSW50ZXJydXB0Q29udHJvbChjb250cm9sLCBhcmcsICZJMkMxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworQVJNX0kyQ19TVEFUVVMgSTJDMV9JbnRlcnJ1cHRHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdEdldFN0YXR1cygmSTJDMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCitBUk1fRFJJVkVSX0kyQyBEcml2ZXJfSTJDMSA9IHtJMkN4X0dldFZlcnNpb24sIEkyQ3hfR2V0Q2FwYWJpbGl0aWVzLAorI2lmIFJURV9JMkMxX0RNQV9FTgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzFfTWFzdGVyX0VkbWFJbml0aWFsaXplLCBJMkMxX01hc3Rlcl9FZG1hVW5pbml0aWFsaXplLCBJMkMxX01hc3Rlcl9FZG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMV9NYXN0ZXJfRWRtYVRyYW5zbWl0LCBJMkMxX01hc3Rlcl9FZG1hUmVjZWl2ZSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzFfTWFzdGVyX0VkbWFHZXREYXRhQ291bnQsIEkyQzFfTWFzdGVyX0VkbWFDb250cm9sLCBJMkMxX01hc3Rlcl9FZG1hR2V0U3RhdHVzCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMV9NYXN0ZXJfRG1hSW5pdGlhbGl6ZSwgSTJDMV9NYXN0ZXJfRG1hVW5pbml0aWFsaXplLCBJMkMxX01hc3Rlcl9EbWFQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMxX01hc3Rlcl9EbWFUcmFuc21pdCwgSTJDMV9NYXN0ZXJfRG1hUmVjZWl2ZSwgTlVMTCwgTlVMTCwgSTJDMV9NYXN0ZXJfRG1hR2V0RGF0YUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMV9NYXN0ZXJfRG1hQ29udHJvbCwgSTJDMV9NYXN0ZXJfRG1hR2V0U3RhdHVzCisjZW5kaWYKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMxX0ludGVycnVwdEluaXRpYWxpemUsIEkyQzFfSW50ZXJydXB0VW5pbml0aWFsaXplLCBJMkMxX0ludGVycnVwdFBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzFfTWFzdGVyX0ludGVycnVwdFRyYW5zbWl0LCBJMkMxX01hc3Rlcl9JbnRlcnJ1cHRSZWNlaXZlLCBJMkMxX1NsYXZlX0ludGVycnVwdFRyYW5zbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMV9TbGF2ZV9JbnRlcnJ1cHRSZWNlaXZlLCBJMkMxX0ludGVycnVwdEdldERhdGFDb3VudCwgSTJDMV9JbnRlcnJ1cHRDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMV9JbnRlcnJ1cHRHZXRTdGF0dXMKKyNlbmRpZgorfTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEkyQzIpICYmIFJURV9JMkMyCisKK2V4dGVybiB1aW50MzJfdCBJMkMyX0dldEZyZXEodm9pZCk7CitleHRlcm4gdm9pZCBJMkMyX0luaXRQaW5zKHZvaWQpOworZXh0ZXJuIHZvaWQgSTJDMl9EZWluaXRQaW5zKHZvaWQpOworCitjbXNpc19pMmNfcmVzb3VyY2VfdCBJMkMyX1Jlc291cmNlID0ge0kyQzIsIEkyQzJfR2V0RnJlcX07CisKKyNpZiBSVEVfSTJDMl9ETUFfRU4KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpCisKK2Ntc2lzX2kyY19kbWFfcmVzb3VyY2VfdCBJMkMyX0RtYVJlc291cmNlID0ge1JURV9JMkMyX01hc3Rlcl9ETUFfQkFTRSwgUlRFX0kyQzJfTWFzdGVyX0RNQV9DSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJURV9JMkMyX01hc3Rlcl9ETUFNVVhfQkFTRSwgUlRFX0kyQzJfTWFzdGVyX1BFUklfU0VMfTsKKworaTJjX21hc3Rlcl9kbWFfaGFuZGxlX3QgSTJDMl9EbWFIYW5kbGU7CitkbWFfaGFuZGxlX3QgSTJDMl9EbWFUeFJ4SGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImkyYzJfZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19pMmNfZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzJfRG1hRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdCBJMkMyX0RtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkkyQzJfUmVzb3VyY2UsICZJMkMyX0RtYVJlc291cmNlLCAmSTJDMl9EbWFIYW5kbGUsICZJMkMyX0RtYVR4UnhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBJMkMyX01hc3Rlcl9EbWFJbml0aWFsaXplKEFSTV9JMkNfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBJMkMyX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkkyQzJfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfTWFzdGVyX0RtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIEkyQzJfRGVpbml0UGlucygpOworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYVVuaW5pdGlhbGl6ZSgmSTJDMl9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9NYXN0ZXJfRG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFQb3dlckNvbnRyb2woJkkyQzJfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfTWFzdGVyX0RtYVRyYW5zbWl0KHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hVHJhbnNtaXQoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMyX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMyX01hc3Rlcl9EbWFSZWNlaXZlKHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hUmVjZWl2ZShhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzJfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfTWFzdGVyX0RtYUdldERhdGFDb3VudCh2b2lkKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYUdldERhdGFDb3VudCgmSTJDMl9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9NYXN0ZXJfRG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hQ29udHJvbChjb250cm9sLCBhcmcsICZJMkMyX0RtYURyaXZlclN0YXRlKTsKK30KKworQVJNX0kyQ19TVEFUVVMgSTJDMl9NYXN0ZXJfRG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hR2V0U3RhdHVzKCZJMkMyX0RtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisKK2Ntc2lzX2kyY19lZG1hX3Jlc291cmNlX3QgSTJDMl9FZG1hUmVzb3VyY2UgPSB7UlRFX0kyQzJfTWFzdGVyX0RNQV9CQVNFLCBSVEVfSTJDMl9NYXN0ZXJfRE1BX0NILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEVfSTJDMl9NYXN0ZXJfRE1BTVVYX0JBU0UsIFJURV9JMkMyX01hc3Rlcl9QRVJJX1NFTH07CisKK2kyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCBJMkMyX0VkbWFIYW5kbGU7CitlZG1hX2hhbmRsZV90IEkyQzJfRWRtYVR4UnhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiaTJjMl9lZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCBJMkMyX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCBJMkMyX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZJMkMyX1Jlc291cmNlLCAmSTJDMl9FZG1hUmVzb3VyY2UsICZJMkMyX0VkbWFIYW5kbGUsICZJMkMyX0VkbWFUeFJ4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgSTJDMl9NYXN0ZXJfRWRtYUluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIEkyQzJfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkkyQzJfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMyX01hc3Rlcl9FZG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgSTJDMl9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVVuaW5pdGlhbGl6ZSgmSTJDMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfTWFzdGVyX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFQb3dlckNvbnRyb2woc3RhdGUsICZJMkMyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9NYXN0ZXJfRWRtYVRyYW5zbWl0KHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVRyYW5zbWl0KGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfTWFzdGVyX0VkbWFSZWNlaXZlKHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVJlY2VpdmUoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9NYXN0ZXJfRWRtYUdldERhdGFDb3VudCh2b2lkKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFHZXREYXRhQ291bnQoJkkyQzJfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMyX01hc3Rlcl9FZG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmSTJDMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitBUk1fSTJDX1NUQVRVUyBJMkMyX01hc3Rlcl9FZG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYUdldFN0YXR1cygmSTJDMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2Vsc2UKKworY21zaXNfaTJjX2hhbmRsZV90IEkyQzJfSGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImkyYzJfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZSIpCitjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90IEkyQzJfSW50ZXJydXB0RHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfaTJjX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCBJMkMyX0ludGVycnVwdERyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkkyQzJfUmVzb3VyY2UsICZJMkMyX0hhbmRsZSwKKworfTsKKworc3RhdGljIGludDMyX3QgSTJDMl9JbnRlcnJ1cHRJbml0aWFsaXplKEFSTV9JMkNfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBJMkMyX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IEkyQzJfSW50ZXJydXB0VW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgSTJDMl9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRVbmluaXRpYWxpemUoJkkyQzJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBJMkMyX0ludGVycnVwdFBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRQb3dlckNvbnRyb2woc3RhdGUsICZJMkMyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMyX01hc3Rlcl9JbnRlcnJ1cHRUcmFuc21pdCh1aW50MzJfdCBhZGRyLCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0ludGVycnVwdFRyYW5zbWl0KGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9NYXN0ZXJfSW50ZXJydXB0UmVjZWl2ZSh1aW50MzJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0ludGVycnVwdFJlY2VpdmUoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMyX1NsYXZlX0ludGVycnVwdFRyYW5zbWl0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gSTJDX1NsYXZlX0ludGVycnVwdFRyYW5zbWl0KGRhdGEsIG51bSwgJkkyQzJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfU2xhdmVfSW50ZXJydXB0UmVjZWl2ZSh1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIEkyQ19TbGF2ZV9JbnRlcnJ1cHRSZWNlaXZlKGRhdGEsIG51bSwgJkkyQzJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfSW50ZXJydXB0R2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRHZXREYXRhQ291bnQoJkkyQzJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfSW50ZXJydXB0Q29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRDb250cm9sKGNvbnRyb2wsIGFyZywgJkkyQzJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitBUk1fSTJDX1NUQVRVUyBJMkMyX0ludGVycnVwdEdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBJMkNfSW50ZXJydXB0R2V0U3RhdHVzKCZJMkMyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKK0FSTV9EUklWRVJfSTJDIERyaXZlcl9JMkMyID0ge0kyQ3hfR2V0VmVyc2lvbiwgSTJDeF9HZXRDYXBhYmlsaXRpZXMsCisjaWYgUlRFX0kyQzJfRE1BX0VOCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMl9NYXN0ZXJfRWRtYUluaXRpYWxpemUsIEkyQzJfTWFzdGVyX0VkbWFVbmluaXRpYWxpemUsIEkyQzJfTWFzdGVyX0VkbWFQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMyX01hc3Rlcl9FZG1hVHJhbnNtaXQsIEkyQzJfTWFzdGVyX0VkbWFSZWNlaXZlLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMl9NYXN0ZXJfRWRtYUdldERhdGFDb3VudCwgSTJDMl9NYXN0ZXJfRWRtYUNvbnRyb2wsIEkyQzJfTWFzdGVyX0VkbWFHZXRTdGF0dXMKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMyX01hc3Rlcl9EbWFJbml0aWFsaXplLCBJMkMyX01hc3Rlcl9EbWFVbmluaXRpYWxpemUsIEkyQzJfTWFzdGVyX0RtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzJfTWFzdGVyX0RtYVRyYW5zbWl0LCBJMkMyX01hc3Rlcl9EbWFSZWNlaXZlLCBOVUxMLCBOVUxMLCBJMkMyX01hc3Rlcl9EbWFHZXREYXRhQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMyX01hc3Rlcl9EbWFDb250cm9sLCBJMkMyX01hc3Rlcl9EbWFHZXRTdGF0dXMKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzJfSW50ZXJydXB0SW5pdGlhbGl6ZSwgSTJDMl9JbnRlcnJ1cHRVbmluaXRpYWxpemUsIEkyQzJfSW50ZXJydXB0UG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMl9NYXN0ZXJfSW50ZXJydXB0VHJhbnNtaXQsIEkyQzJfTWFzdGVyX0ludGVycnVwdFJlY2VpdmUsIEkyQzJfU2xhdmVfSW50ZXJydXB0VHJhbnNtaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMyX1NsYXZlX0ludGVycnVwdFJlY2VpdmUsIEkyQzJfSW50ZXJydXB0R2V0RGF0YUNvdW50LCBJMkMyX0ludGVycnVwdENvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMyX0ludGVycnVwdEdldFN0YXR1cworI2VuZGlmCit9OworCisjZW5kaWYKKworI2lmIGRlZmluZWQoSTJDMykgJiYgUlRFX0kyQzMKKworZXh0ZXJuIHVpbnQzMl90IEkyQzNfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIEkyQzNfSW5pdFBpbnModm9pZCk7CitleHRlcm4gdm9pZCBJMkMzX0RlaW5pdFBpbnModm9pZCk7CisKK2Ntc2lzX2kyY19yZXNvdXJjZV90IEkyQzNfUmVzb3VyY2UgPSB7STJDMywgSTJDM19HZXRGcmVxfTsKKworI2lmIFJURV9JMkMzX0RNQV9FTgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkKKworY21zaXNfaTJjX2RtYV9yZXNvdXJjZV90IEkyQzNfRG1hUmVzb3VyY2UgPSB7UlRFX0kyQzNfTWFzdGVyX0RNQV9CQVNFLCBSVEVfSTJDM19NYXN0ZXJfRE1BX0NILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRFX0kyQzNfTWFzdGVyX0RNQU1VWF9CQVNFLCBSVEVfSTJDM19NYXN0ZXJfUEVSSV9TRUx9OworCitpMmNfbWFzdGVyX2RtYV9oYW5kbGVfdCBJMkMzX0RtYUhhbmRsZTsKK2RtYV9oYW5kbGVfdCBJMkMzX0RtYVR4UnhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiaTJjM19kbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgSTJDM19EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19pMmNfZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzNfRG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmSTJDM19SZXNvdXJjZSwgJkkyQzNfRG1hUmVzb3VyY2UsICZJMkMzX0RtYUhhbmRsZSwgJkkyQzNfRG1hVHhSeEhhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IEkyQzNfTWFzdGVyX0RtYUluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIEkyQzNfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19NYXN0ZXJfRG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgSTJDM19EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hVW5pbml0aWFsaXplKCZJMkMzX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX01hc3Rlcl9EbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYVBvd2VyQ29udHJvbCgmSTJDM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19NYXN0ZXJfRG1hVHJhbnNtaXQodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFUcmFuc21pdChhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzNfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfTWFzdGVyX0RtYVJlY2VpdmUodWludDMyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFSZWNlaXZlKGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19NYXN0ZXJfRG1hR2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hR2V0RGF0YUNvdW50KCZJMkMzX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX01hc3Rlcl9EbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkkyQzNfRG1hRHJpdmVyU3RhdGUpOworfQorCitBUk1fSTJDX1NUQVRVUyBJMkMzX01hc3Rlcl9EbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFHZXRTdGF0dXMoJkkyQzNfRG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKworY21zaXNfaTJjX2VkbWFfcmVzb3VyY2VfdCBJMkMzX0VkbWFSZXNvdXJjZSA9IHtSVEVfSTJDM19NYXN0ZXJfRE1BX0JBU0UsIFJURV9JMkMzX01hc3Rlcl9ETUFfQ0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJURV9JMkMzX01hc3Rlcl9ETUFNVVhfQkFTRSwgUlRFX0kyQzNfTWFzdGVyX1BFUklfU0VMfTsKKworaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90IEkyQzNfRWRtYUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgSTJDM19FZG1hVHhSeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJpMmMzX2VkbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzNfRWRtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzNfRWRtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkkyQzNfUmVzb3VyY2UsICZJMkMzX0VkbWFSZXNvdXJjZSwgJkkyQzNfRWRtYUhhbmRsZSwgJkkyQzNfRWRtYVR4UnhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBJMkMzX01hc3Rlcl9FZG1hSW5pdGlhbGl6ZShBUk1fSTJDX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgSTJDM19Jbml0UGlucygpOworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDM19FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfTWFzdGVyX0VkbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBJMkMzX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hVW5pbml0aWFsaXplKCZJMkMzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkkyQzNfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX01hc3Rlcl9FZG1hVHJhbnNtaXQodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hVHJhbnNtaXQoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19NYXN0ZXJfRWRtYVJlY2VpdmUodWludDMyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hUmVjZWl2ZShhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzNfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX01hc3Rlcl9FZG1hR2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYUdldERhdGFDb3VudCgmSTJDM19FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfTWFzdGVyX0VkbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hQ29udHJvbChjb250cm9sLCBhcmcsICZJMkMzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK0FSTV9JMkNfU1RBVFVTIEkyQzNfTWFzdGVyX0VkbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hR2V0U3RhdHVzKCZJMkMzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjZWxzZQorCitjbXNpc19pMmNfaGFuZGxlX3QgSTJDM19IYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiaTJjM19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgSTJDM19JbnRlcnJ1cHREcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90IEkyQzNfSW50ZXJydXB0RHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmSTJDM19SZXNvdXJjZSwgJkkyQzNfSGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgSTJDM19JbnRlcnJ1cHRJbml0aWFsaXplKEFSTV9JMkNfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBJMkMzX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDM19JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IEkyQzNfSW50ZXJydXB0VW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgSTJDM19EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRVbmluaXRpYWxpemUoJkkyQzNfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBJMkMzX0ludGVycnVwdFBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRQb3dlckNvbnRyb2woc3RhdGUsICZJMkMzX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX01hc3Rlcl9JbnRlcnJ1cHRUcmFuc21pdCh1aW50MzJfdCBhZGRyLCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0ludGVycnVwdFRyYW5zbWl0KGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDM19JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19NYXN0ZXJfSW50ZXJydXB0UmVjZWl2ZSh1aW50MzJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0ludGVycnVwdFJlY2VpdmUoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMzX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX1NsYXZlX0ludGVycnVwdFRyYW5zbWl0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gSTJDX1NsYXZlX0ludGVycnVwdFRyYW5zbWl0KGRhdGEsIG51bSwgJkkyQzNfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfU2xhdmVfSW50ZXJydXB0UmVjZWl2ZSh1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIEkyQ19TbGF2ZV9JbnRlcnJ1cHRSZWNlaXZlKGRhdGEsIG51bSwgJkkyQzNfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfSW50ZXJydXB0R2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRHZXREYXRhQ291bnQoJkkyQzNfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfSW50ZXJydXB0Q29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRDb250cm9sKGNvbnRyb2wsIGFyZywgJkkyQzNfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitBUk1fSTJDX1NUQVRVUyBJMkMzX0ludGVycnVwdEdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBJMkNfSW50ZXJydXB0R2V0U3RhdHVzKCZJMkMzX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKK0FSTV9EUklWRVJfSTJDIERyaXZlcl9JMkMzID0ge0kyQ3hfR2V0VmVyc2lvbiwgSTJDeF9HZXRDYXBhYmlsaXRpZXMsCisjaWYgUlRFX0kyQzNfRE1BX0VOCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDM19NYXN0ZXJfRWRtYUluaXRpYWxpemUsIEkyQzNfTWFzdGVyX0VkbWFVbmluaXRpYWxpemUsIEkyQzNfTWFzdGVyX0VkbWFQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMzX01hc3Rlcl9FZG1hVHJhbnNtaXQsIEkyQzNfTWFzdGVyX0VkbWFSZWNlaXZlLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDM19NYXN0ZXJfRWRtYUdldERhdGFDb3VudCwgSTJDM19NYXN0ZXJfRWRtYUNvbnRyb2wsIEkyQzNfTWFzdGVyX0VkbWFHZXRTdGF0dXMKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMzX01hc3Rlcl9EbWFJbml0aWFsaXplLCBJMkMzX01hc3Rlcl9EbWFVbmluaXRpYWxpemUsIEkyQzNfTWFzdGVyX0RtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzNfTWFzdGVyX0RtYVRyYW5zbWl0LCBJMkMzX01hc3Rlcl9EbWFSZWNlaXZlLCBOVUxMLCBOVUxMLCBJMkMzX01hc3Rlcl9EbWFHZXREYXRhQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMzX01hc3Rlcl9EbWFDb250cm9sLCBJMkMzX01hc3Rlcl9EbWFHZXRTdGF0dXMKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzNfSW50ZXJydXB0SW5pdGlhbGl6ZSwgSTJDM19JbnRlcnJ1cHRVbmluaXRpYWxpemUsIEkyQzNfSW50ZXJydXB0UG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDM19NYXN0ZXJfSW50ZXJydXB0VHJhbnNtaXQsIEkyQzNfTWFzdGVyX0ludGVycnVwdFJlY2VpdmUsIEkyQzNfU2xhdmVfSW50ZXJydXB0VHJhbnNtaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMzX1NsYXZlX0ludGVycnVwdFJlY2VpdmUsIEkyQzNfSW50ZXJydXB0R2V0RGF0YUNvdW50LCBJMkMzX0ludGVycnVwdENvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMzX0ludGVycnVwdEdldFN0YXR1cworI2VuZGlmCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Ntc2lzX2RyaXZlcnMvZnNsX2kyY19jbXNpcy5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfaTJjX2Ntc2lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzYmY3ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Ntc2lzX2RyaXZlcnMvZnNsX2kyY19jbXNpcy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICogQ29weXJpZ2h0IChjKSAyMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlNMX0kyQ19DTVNJU19IXworI2RlZmluZSBfRlNMX0kyQ19DTVNJU19IXworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKyNpbmNsdWRlICJEcml2ZXJfSTJDLmgiCisjaW5jbHVkZSAiUlRFX0RldmljZS5oIgorI2luY2x1ZGUgImZzbF9pMmMuaCIKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BTVVYX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BTVVYX0NPVU5UKQorI2luY2x1ZGUgImZzbF9kbWFtdXguaCIKKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpCisjaW5jbHVkZSAiZnNsX2kyY19kbWEuaCIKKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKyNpbmNsdWRlICJmc2xfaTJjX2VkbWEuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChJMkMwKQorZXh0ZXJuIEFSTV9EUklWRVJfSTJDIERyaXZlcl9JMkMwOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEkyQzEpCitleHRlcm4gQVJNX0RSSVZFUl9JMkMgRHJpdmVyX0kyQzE7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSTJDMikKK2V4dGVybiBBUk1fRFJJVkVSX0kyQyBEcml2ZXJfSTJDMjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChJMkMzKQorZXh0ZXJuIEFSTV9EUklWRVJfSTJDIERyaXZlcl9JMkMzOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfbHB1YXJ0X2Ntc2lzLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9scHVhcnRfY21zaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZlM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfbHB1YXJ0X2Ntc2lzLmMKQEAgLTAsMCArMSwyOTcwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7IHlvdSBtYXkKKyAqIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfbHB1YXJ0X2Ntc2lzLmgiCisKKy8qIFJlLW1hcHBpbmcgZm9yIExQVUFSVCAmIFVBUlQgaW5kZXhpbmcuICovCisjaWYgKEZTTF9GRUFUVVJFX1NPQ19MUFVBUlRfQ09VTlQgPT0gMSkgJiYgRlNMX0ZFQVRVUkVfU09DX1VBUlRfQ09VTlQKKworI2lmZGVmIFJURV9VU0FSVDAKKyN1bmRlZiBSVEVfVVNBUlQwCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQwX0RNQV9FTgorI3VuZGVmIFJURV9VU0FSVDBfRE1BX0VOCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQwX0RNQV9UWF9DSAorI3VuZGVmIFJURV9VU0FSVDBfRE1BX1RYX0NICisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQwX0RNQV9UWF9QRVJJX1NFTAorI3VuZGVmIFJURV9VU0FSVDBfRE1BX1RYX1BFUklfU0VMCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQwX0RNQV9UWF9ETUFNVVhfQkFTRQorI3VuZGVmIFJURV9VU0FSVDBfRE1BX1RYX0RNQU1VWF9CQVNFCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQwX0RNQV9UWF9ETUFfQkFTRQorI3VuZGVmIFJURV9VU0FSVDBfRE1BX1RYX0RNQV9CQVNFCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQwX0RNQV9SWF9DSAorI3VuZGVmIFJURV9VU0FSVDBfRE1BX1JYX0NICisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQwX0RNQV9SWF9QRVJJX1NFTAorI3VuZGVmIFJURV9VU0FSVDBfRE1BX1JYX1BFUklfU0VMCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQwX0RNQV9SWF9ETUFNVVhfQkFTRQorI3VuZGVmIFJURV9VU0FSVDBfRE1BX1JYX0RNQU1VWF9CQVNFCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQwX0RNQV9SWF9ETUFfQkFTRQorI3VuZGVmIFJURV9VU0FSVDBfRE1BX1JYX0RNQV9CQVNFCisjZW5kaWYKKyNpZmRlZiBVU0FSVDBfUlhfQlVGRkVSX0VOQUJMRQorI3VuZGVmIFVTQVJUMF9SWF9CVUZGRVJfRU5BQkxFCisjZW5kaWYKKworI2lmIChGU0xfRkVBVFVSRV9TT0NfVUFSVF9DT1VOVCA9PSAzKQorCisjaWZkZWYgUlRFX1VTQVJUMworI2RlZmluZSBSVEVfVVNBUlQwIFJURV9VU0FSVDMKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDNfRE1BX0VOCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX0VOIFJURV9VU0FSVDNfRE1BX0VOCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQzX0RNQV9UWF9DSAorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9UWF9DSCBSVEVfVVNBUlQzX0RNQV9UWF9DSAorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUM19ETUFfVFhfUEVSSV9TRUwKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfVFhfUEVSSV9TRUwgUlRFX1VTQVJUM19ETUFfVFhfUEVSSV9TRUwKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDNfRE1BX1RYX0RNQU1VWF9CQVNFCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1RYX0RNQU1VWF9CQVNFIFJURV9VU0FSVDNfRE1BX1RYX0RNQU1VWF9CQVNFCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQzX0RNQV9UWF9ETUFfQkFTRQorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9UWF9ETUFfQkFTRSBSVEVfVVNBUlQzX0RNQV9UWF9ETUFfQkFTRQorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUM19ETUFfUlhfQ0gKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfUlhfQ0ggUlRFX1VTQVJUM19ETUFfUlhfQ0gKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDNfRE1BX1JYX1BFUklfU0VMCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1JYX1BFUklfU0VMIFJURV9VU0FSVDNfRE1BX1JYX1BFUklfU0VMCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQzX0RNQV9SWF9ETUFNVVhfQkFTRQorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9SWF9ETUFNVVhfQkFTRSBSVEVfVVNBUlQzX0RNQV9SWF9ETUFNVVhfQkFTRQorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUM19ETUFfUlhfRE1BX0JBU0UKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfUlhfRE1BX0JBU0UgUlRFX1VTQVJUM19ETUFfUlhfRE1BX0JBU0UKKyNlbmRpZgorI2lmZGVmIFVTQVJUM19SWF9CVUZGRVJfRU5BQkxFCisjZGVmaW5lIFVTQVJUMF9SWF9CVUZGRVJfRU5BQkxFIFVTQVJUM19SWF9CVUZGRVJfRU5BQkxFCisjZW5kaWYKKworI2VuZGlmCisKKyNpZiAoRlNMX0ZFQVRVUkVfU09DX1VBUlRfQ09VTlQgPT0gNCkKKworI2lmZGVmIFJURV9VU0FSVDQKKyNkZWZpbmUgUlRFX1VTQVJUMCBSVEVfVVNBUlQ0CisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ0X0RNQV9FTgorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9FTiBSVEVfVVNBUlQ0X0RNQV9FTgorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNF9ETUFfVFhfQ0gKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfVFhfQ0ggUlRFX1VTQVJUNF9ETUFfVFhfQ0gKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDRfRE1BX1RYX1BFUklfU0VMCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1RYX1BFUklfU0VMIFJURV9VU0FSVDRfRE1BX1RYX1BFUklfU0VMCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ0X0RNQV9UWF9ETUFNVVhfQkFTRQorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9UWF9ETUFNVVhfQkFTRSBSVEVfVVNBUlQ0X0RNQV9UWF9ETUFNVVhfQkFTRQorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNF9ETUFfVFhfRE1BX0JBU0UKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfVFhfRE1BX0JBU0UgUlRFX1VTQVJUNF9ETUFfVFhfRE1BX0JBU0UKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDRfRE1BX1JYX0NICisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1JYX0NIIFJURV9VU0FSVDRfRE1BX1JYX0NICisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ0X0RNQV9SWF9QRVJJX1NFTAorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9SWF9QRVJJX1NFTCBSVEVfVVNBUlQ0X0RNQV9SWF9QRVJJX1NFTAorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNF9ETUFfUlhfRE1BTVVYX0JBU0UKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfUlhfRE1BTVVYX0JBU0UgUlRFX1VTQVJUNF9ETUFfUlhfRE1BTVVYX0JBU0UKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDRfRE1BX1JYX0RNQV9CQVNFCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1JYX0RNQV9CQVNFIFJURV9VU0FSVDRfRE1BX1JYX0RNQV9CQVNFCisjZW5kaWYKKyNpZmRlZiBVU0FSVDRfUlhfQlVGRkVSX0VOQUJMRQorI2RlZmluZSBVU0FSVDBfUlhfQlVGRkVSX0VOQUJMRSBVU0FSVDRfUlhfQlVGRkVSX0VOQUJMRQorI2VuZGlmCisKKyNlbmRpZgorCisjaWYgKEZTTF9GRUFUVVJFX1NPQ19VQVJUX0NPVU5UID09IDUpCisKKyNpZmRlZiBSVEVfVVNBUlQ1CisjZGVmaW5lIFJURV9VU0FSVDAgUlRFX1VTQVJUNQorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNV9ETUFfRU4KKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfRU4gUlRFX1VTQVJUNV9ETUFfRU4KKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDVfRE1BX1RYX0NICisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1RYX0NIIFJURV9VU0FSVDVfRE1BX1RYX0NICisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ1X0RNQV9UWF9QRVJJX1NFTAorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9UWF9QRVJJX1NFTCBSVEVfVVNBUlQ1X0RNQV9UWF9QRVJJX1NFTAorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNV9ETUFfVFhfRE1BTVVYX0JBU0UKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfVFhfRE1BTVVYX0JBU0UgUlRFX1VTQVJUNV9ETUFfVFhfRE1BTVVYX0JBU0UKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDVfRE1BX1RYX0RNQV9CQVNFCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1RYX0RNQV9CQVNFIFJURV9VU0FSVDVfRE1BX1RYX0RNQV9CQVNFCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ1X0RNQV9SWF9DSAorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9SWF9DSCBSVEVfVVNBUlQ1X0RNQV9SWF9DSAorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNV9ETUFfUlhfUEVSSV9TRUwKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfUlhfUEVSSV9TRUwgUlRFX1VTQVJUNV9ETUFfUlhfUEVSSV9TRUwKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDVfRE1BX1JYX0RNQU1VWF9CQVNFCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1JYX0RNQU1VWF9CQVNFIFJURV9VU0FSVDVfRE1BX1JYX0RNQU1VWF9CQVNFCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ1X0RNQV9SWF9ETUFfQkFTRQorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9SWF9ETUFfQkFTRSBSVEVfVVNBUlQ1X0RNQV9SWF9ETUFfQkFTRQorI2VuZGlmCisjaWZkZWYgVVNBUlQ1X1JYX0JVRkZFUl9FTkFCTEUKKyNkZWZpbmUgVVNBUlQwX1JYX0JVRkZFUl9FTkFCTEUgVVNBUlQ1X1JYX0JVRkZFUl9FTkFCTEUKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCisKKyNpZiAoKFJURV9VU0FSVDAgJiYgZGVmaW5lZChMUFVBUlQwKSkgfHwgKFJURV9VU0FSVDEgJiYgZGVmaW5lZChMUFVBUlQxKSkgfHwgKFJURV9VU0FSVDIgJiYgZGVmaW5lZChMUFVBUlQyKSkgfHwgXAorICAgICAoUlRFX1VTQVJUMyAmJiBkZWZpbmVkKExQVUFSVDMpKSB8fCAoUlRFX1VTQVJUNCAmJiBkZWZpbmVkKExQVUFSVDQpKSB8fCAoUlRFX1VTQVJUNSAmJiBkZWZpbmVkKExQVUFSVDUpKSkKKworI2RlZmluZSBBUk1fTFBVQVJUX0RSVl9WRVJTSU9OIEFSTV9EUklWRVJfVkVSU0lPTl9NQUpPUl9NSU5PUigyLCAwKQorCisvKgorICogQVJNQ0MgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdCB0aGUgZGF0YSBzZWN0aW9uIGF1dG9tYXRpY2FsbHksIHNvIHRoZSBkcml2ZXIKKyAqIG5lZWRzIHRvIHNwbGl0IHRoZSBkYXRhIHRvIHNlcGFyYXRlIHNlY3Rpb25zIGV4cGxpY2l0bHksIHRvIHJlZHVjZSBjb2Rlc2l6ZS4KKyAqLworI2lmIGRlZmluZWQoX19DQ19BUk0pCisjZGVmaW5lIEFSTUNDX1NFQ1RJT04oc2VjdGlvbl9uYW1lKSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKHNlY3Rpb25fbmFtZSkpKQorI2VuZGlmCisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9jbXNpc19scHVhcnRfcmVzb3VyY2UKK3sKKyAgICBMUFVBUlRfVHlwZSAqYmFzZTsgICAgICAgICAvKiE8IExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4gICAgICAqLworICAgIHVpbnQzMl90ICgqR2V0RnJlcSkodm9pZCk7IC8qITwgRnVuY3Rpb24gdG8gZ2V0IHRoZSBjbG9jayBmcmVxdWVuY3kuICovCit9IGNtc2lzX2xwdWFydF9yZXNvdXJjZV90OworCit0eXBlZGVmIHN0cnVjdCBfY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGUKK3sKKyAgICBjbXNpc19scHVhcnRfcmVzb3VyY2VfdCAqcmVzb3VyY2U7IC8qITwgQmFzaWMgTFBVQVJUIHJlc291cmNlLiAqLworICAgIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlOyAgICAgICAgICAgLyohPCBJbnRlcnVwdCB0cmFuc2ZlciBoYW5kbGUuICovCisgICAgQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQ7ICAvKiE8IENhbGxiYWNrIGZ1bmN0aW9uLiAgICAgKi8KKyAgICBib29sIGlzSW5pdGlhbGl6ZWQ7ICAgICAgICAgICAgICAgIC8qITwgSXMgaW5pdGlhbGl6ZWQgb3Igbm90LiAqLworICAgIGJvb2wgaXNQb3dlck9uOyAgICAgICAgICAgICAgICAgICAgLyohPCBJcyBwb3dlciBvbiBvciBub3QuICAgICovCisgICAgYm9vbCBpc0NvbmZpZ3VyZWQ7ICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyZWQgdG8gd29yayBvciBub3QuICovCit9IGNtc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3Q7CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQordHlwZWRlZiBzdHJ1Y3QgX2Ntc2lzX2xwdWFydF9kbWFfcmVzb3VyY2UKK3sKKyAgICBETUFfVHlwZSAqdHhEbWFCYXNlOyAgICAgICAvKiE8IERNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcyBmb3IgVFguICAgICovCisgICAgdWludDMyX3QgdHhEbWFDaGFubmVsOyAgICAgLyohPCBETUEgY2hhbm5lbCBmb3IgTFBVQVJUIFRYLiAgICAgICAgICAgICAqLworICAgIERNQU1VWF9UeXBlICp0eERtYW11eEJhc2U7IC8qITwgRE1BTVVYIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzIGZvciBUWC4gKi8KKyAgICB1aW50OF90IHR4RG1hUmVxdWVzdDsgICAgICAvKiE8IFRYIERNQSByZXF1ZXN0IHNvdXJjZS4gICAgICAgICAgICAgICAgICovCisKKyAgICBETUFfVHlwZSAqcnhEbWFCYXNlOyAgICAgICAvKiE8IERNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcyBmb3IgUlguICAgICovCisgICAgdWludDMyX3QgcnhEbWFDaGFubmVsOyAgICAgLyohPCBETUEgY2hhbm5lbCBmb3IgTFBVQVJUIFJYLiAgICAgICAgICAgICAqLworICAgIERNQU1VWF9UeXBlICpyeERtYW11eEJhc2U7IC8qITwgRE1BTVVYIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzIGZvciBSWC4gKi8KKyAgICB1aW50OF90IHJ4RG1hUmVxdWVzdDsgICAgICAvKiE8IFJYIERNQSByZXF1ZXN0IHNvdXJjZS4gICAgICAgICAgICAgICAgICovCit9IGNtc2lzX2xwdWFydF9kbWFfcmVzb3VyY2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2Ntc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlCit7CisgICAgY21zaXNfbHB1YXJ0X3Jlc291cmNlX3QgKnJlc291cmNlOyAgICAgICAgLyohPCBMUFVBUlQgYmFzaWMgcmVzb3VyY2UuICAgICAgKi8KKyAgICBjbXNpc19scHVhcnRfZG1hX3Jlc291cmNlX3QgKmRtYVJlc291cmNlOyAvKiE8IExQVUFSVCBETUEgcmVzb3VyY2UuICAgICAgICAqLworICAgIGxwdWFydF9kbWFfaGFuZGxlX3QgKmhhbmRsZTsgICAgICAgICAgICAgIC8qITwgTFBVQVJUIERNQSB0cmFuc2ZlciBoYW5kbGUuICovCisgICAgZG1hX2hhbmRsZV90ICpyeEhhbmRsZTsgICAgICAgICAgICAgICAgICAgLyohPCBETUEgUlggaGFuZGxlLiAgICAgICAgICAgICAgKi8KKyAgICBkbWFfaGFuZGxlX3QgKnR4SGFuZGxlOyAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBUWCBoYW5kbGUuICAgICAgICAgICAgICAqLworICAgIEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50OyAgICAgICAgIC8qITwgQ2FsbGJhY2sgZnVuY3Rpb24uICAgICAqLworICAgIGJvb2wgaXNJbml0aWFsaXplZDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSXMgaW5pdGlhbGl6ZWQgb3Igbm90LiAgICAgICovCisgICAgYm9vbCBpc1Bvd2VyT247ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJcyBwb3dlciBvbiBvciBub3QuICAgICAgICAgKi8KKyAgICBib29sIGlzQ29uZmlndXJlZDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyZWQgdG8gd29yayBvciBub3QuICAqLworfSBjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90OworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCit0eXBlZGVmIHN0cnVjdCBfY21zaXNfbHB1YXJ0X2VkbWFfcmVzb3VyY2UKK3sKKyAgICBETUFfVHlwZSAqdHhFZG1hQmFzZTsgICAgICAvKiE8IEVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MgZm9yIFRYLiAgICAqLworICAgIHVpbnQzMl90IHR4RWRtYUNoYW5uZWw7ICAgIC8qITwgRURNQSBjaGFubmVsIGZvciBMUFVBUlQgVFguICAgICAgICAgICAgICovCisgICAgRE1BTVVYX1R5cGUgKnR4RG1hbXV4QmFzZTsgLyohPCBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MgZm9yIFRYLiAqLworICAgIHVpbnQ4X3QgdHhEbWFSZXF1ZXN0OyAgICAgIC8qITwgVFggRURNQSByZXF1ZXN0IHNvdXJjZS4gICAgICAgICAgICAgICAgICovCisKKyAgICBETUFfVHlwZSAqcnhFZG1hQmFzZTsgICAgICAvKiE8IEVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MgZm9yIFJYLiAgICAqLworICAgIHVpbnQzMl90IHJ4RWRtYUNoYW5uZWw7ICAgIC8qITwgRURNQSBjaGFubmVsIGZvciBMUFVBUlQgUlguICAgICAgICAgICAgICovCisgICAgRE1BTVVYX1R5cGUgKnJ4RG1hbXV4QmFzZTsgLyohPCBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MgZm9yIFJYLiAqLworICAgIHVpbnQ4X3QgcnhEbWFSZXF1ZXN0OyAgICAgIC8qITwgUlggRURNQSByZXF1ZXN0IHNvdXJjZS4gICAgICAgICAgICAgICAgICovCit9IGNtc2lzX2xwdWFydF9lZG1hX3Jlc291cmNlX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9jbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGUKK3sKKyAgICBjbXNpc19scHVhcnRfcmVzb3VyY2VfdCAqcmVzb3VyY2U7ICAgICAgICAgLyohPCBMUFVBUlQgYmFzaWMgcmVzb3VyY2UuICAgICAgKi8KKyAgICBjbXNpc19scHVhcnRfZWRtYV9yZXNvdXJjZV90ICpkbWFSZXNvdXJjZTsgLyohPCBMUFVBUlQgRURNQSByZXNvdXJjZS4gICAgICAgICovCisgICAgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZTsgICAgICAgICAgICAgIC8qITwgTFBVQVJUIEVETUEgdHJhbnNmZXIgaGFuZGxlLiAqLworICAgIGVkbWFfaGFuZGxlX3QgKnJ4SGFuZGxlOyAgICAgICAgICAgICAgICAgICAvKiE8IEVETUEgUlggaGFuZGxlLiAgICAgICAgICAgICAgKi8KKyAgICBlZG1hX2hhbmRsZV90ICp0eEhhbmRsZTsgICAgICAgICAgICAgICAgICAgLyohPCBFRE1BIFRYIGhhbmRsZS4gICAgICAgICAgICAgICovCisgICAgQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQ7ICAgICAgICAgIC8qITwgQ2FsbGJhY2sgZnVuY3Rpb24uICAgICAqLworICAgIGJvb2wgaXNJbml0aWFsaXplZDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElzIGluaXRpYWxpemVkIG9yIG5vdC4gICAgICAqLworICAgIGJvb2wgaXNQb3dlck9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElzIHBvd2VyIG9uIG9yIG5vdC4gICAgICAgICAqLworICAgIGJvb2wgaXNDb25maWd1cmVkOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyZWQgdG8gd29yayBvciBub3QuICovCit9IGNtc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90OworI2VuZGlmCisKK2VudW0gX2xwdWFydF90cmFuc2Zlcl9zdGF0ZXMKK3sKKyAgICBrTFBVQVJUX1R4SWRsZSwgLyohPCBUWCBpZGxlLiAqLworICAgIGtMUFVBUlRfVHhCdXN5LCAvKiE8IFRYIGJ1c3kuICovCisgICAga0xQVUFSVF9SeElkbGUsIC8qITwgUlggaWRsZS4gKi8KKyAgICBrTFBVQVJUX1J4QnVzeSAgLyohPCBSWCBidXN5LiAqLworfTsKKworLyogRHJpdmVyIFZlcnNpb24gKi8KK3N0YXRpYyBjb25zdCBBUk1fRFJJVkVSX1ZFUlNJT04gc19scHVhcnREcml2ZXJWZXJzaW9uID0ge0FSTV9VU0FSVF9BUElfVkVSU0lPTiwgQVJNX0xQVUFSVF9EUlZfVkVSU0lPTn07CisKK3N0YXRpYyBjb25zdCBBUk1fVVNBUlRfQ0FQQUJJTElUSUVTIHNfbHB1YXJ0RHJpdmVyQ2FwYWJpbGl0aWVzID0geworICAgIDEsIC8qIHN1cHBvcnRzIExQVUFSVCAoQXN5bmNocm9ub3VzKSBtb2RlICovCisgICAgMCwgLyogc3VwcG9ydHMgU3luY2hyb25vdXMgTWFzdGVyIG1vZGUgKi8KKyAgICAwLCAvKiBzdXBwb3J0cyBTeW5jaHJvbm91cyBTbGF2ZSBtb2RlICovCisgICAgMCwgLyogc3VwcG9ydHMgTFBVQVJUIFNpbmdsZS13aXJlIG1vZGUgKi8KKyAgICAwLCAvKiBzdXBwb3J0cyBMUFVBUlQgSXJEQSBtb2RlICovCisgICAgMCwgLyogc3VwcG9ydHMgTFBVQVJUIFNtYXJ0IENhcmQgbW9kZSAqLworICAgIDAsIC8qIFNtYXJ0IENhcmQgQ2xvY2sgZ2VuZXJhdG9yICovCisgICAgMCwgLyogUlRTIEZsb3cgQ29udHJvbCBhdmFpbGFibGUgKi8KKyAgICAwLCAvKiBDVFMgRmxvdyBDb250cm9sIGF2YWlsYWJsZSAqLworICAgIDAsIC8qIFRyYW5zbWl0IGNvbXBsZXRlZCBldmVudDogXHJlZiBBUk1fVVNBUlRfRVZFTlRfVFhfQ09NUExFVEUgKi8KKyAgICAwLCAvKiBTaWduYWwgcmVjZWl2ZSBjaGFyYWN0ZXIgdGltZW91dCBldmVudDogXHJlZiBBUk1fVVNBUlRfRVZFTlRfUlhfVElNRU9VVCAqLworICAgIDAsIC8qIFJUUyBMaW5lOiAwPW5vdCBhdmFpbGFibGUsIDE9YXZhaWxhYmxlICovCisgICAgMCwgLyogQ1RTIExpbmU6IDA9bm90IGF2YWlsYWJsZSwgMT1hdmFpbGFibGUgKi8KKyAgICAwLCAvKiBEVFIgTGluZTogMD1ub3QgYXZhaWxhYmxlLCAxPWF2YWlsYWJsZSAqLworICAgIDAsIC8qIERTUiBMaW5lOiAwPW5vdCBhdmFpbGFibGUsIDE9YXZhaWxhYmxlICovCisgICAgMCwgLyogRENEIExpbmU6IDA9bm90IGF2YWlsYWJsZSwgMT1hdmFpbGFibGUgKi8KKyAgICAwLCAvKiBSSSBMaW5lOiAwPW5vdCBhdmFpbGFibGUsIDE9YXZhaWxhYmxlICovCisgICAgMCwgLyogU2lnbmFsIENUUyBjaGFuZ2UgZXZlbnQ6IFxyZWYgQVJNX1VTQVJUX0VWRU5UX0NUUyAqLworICAgIDAsIC8qIFNpZ25hbCBEU1IgY2hhbmdlIGV2ZW50OiBccmVmIEFSTV9VU0FSVF9FVkVOVF9EU1IgKi8KKyAgICAwLCAvKiBTaWduYWwgRENEIGNoYW5nZSBldmVudDogXHJlZiBBUk1fVVNBUlRfRVZFTlRfRENEICovCisgICAgMCwgLyogU2lnbmFsIFJJIGNoYW5nZSBldmVudDogXHJlZiBBUk1fVVNBUlRfRVZFTlRfUkkgKi8KK307CisKKy8qCisgKiBDb21tb24gY29udHJvbCBmdW5jdGlvbiB1c2VkIGJ5IExQVUFSVF9Ob25CbG9ja2luZ0NvbnRyb2wvTFBVQVJUX0RtYUNvbnRyb2wvTFBVQVJUX0VkbWFDb250cm9sCisgKi8KK3N0YXRpYyBpbnQzMl90IExQVUFSVF9Db21tb25Db250cm9sKHVpbnQzMl90IGNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNpc19scHVhcnRfcmVzb3VyY2VfdCAqcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICppc0NvbmZpZ3VyZWQpCit7CisgICAgbHB1YXJ0X2NvbmZpZ190IGNvbmZpZzsKKworICAgIExQVUFSVF9HZXREZWZhdWx0Q29uZmlnKCZjb25maWcpOworCisgICAgc3dpdGNoIChjb250cm9sICYgQVJNX1VTQVJUX0NPTlRST0xfTXNrKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfTU9ERV9BU1lOQ0hST05PVVM6CisgICAgICAgICAgICAvKiBVU0FSVCBCYXVkcmF0ZSAqLworICAgICAgICAgICAgY29uZmlnLmJhdWRSYXRlX0JwcyA9IGFyZzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIFRYL1JYIElPIGlzIGNvbnRyb2xsZWQgaW4gYXBwbGljYXRpb24gbGF5ZXIuICovCisgICAgICAgIGNhc2UgQVJNX1VTQVJUX0NPTlRST0xfVFg6CisgICAgICAgICAgICBpZiAoYXJnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExQVUFSVF9FbmFibGVUeChyZXNvdXJjZS0+YmFzZSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBVQVJUX0VuYWJsZVR4KHJlc291cmNlLT5iYXNlLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBjYXNlIEFSTV9VU0FSVF9DT05UUk9MX1JYOgorICAgICAgICAgICAgaWYgKGFyZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMUFVBUlRfRW5hYmxlUngocmVzb3VyY2UtPmJhc2UsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExQVUFSVF9FbmFibGVSeChyZXNvdXJjZS0+YmFzZSwgZmFsc2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgc3dpdGNoIChjb250cm9sICYgQVJNX1VTQVJUX0RBVEFfQklUU19Nc2spCisgICAgeworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU183QklUX0RBVEFfU1VQUE9SVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU183QklUX0RBVEFfU1VQUE9SVAorICAgICAgICBjYXNlIEFSTV9VU0FSVF9EQVRBX0JJVFNfNzoKKyAgICAgICAgICAgIGNvbmZpZy5kYXRhQml0c0NvdW50ID0ga0xQVUFSVF9TZXZlbkRhdGFCaXRzOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfREFUQV9CSVRTXzg6CisgICAgICAgICAgICBjb25maWcuZGF0YUJpdHNDb3VudCA9IGtMUFVBUlRfRWlnaHREYXRhQml0czsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQVJNX1VTQVJUX0VSUk9SX0RBVEFfQklUUzsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvbnRyb2wgJiBBUk1fVVNBUlRfUEFSSVRZX01zaykKKyAgICB7CisgICAgICAgIGNhc2UgQVJNX1VTQVJUX1BBUklUWV9OT05FOgorICAgICAgICAgICAgY29uZmlnLnBhcml0eU1vZGUgPSBrTFBVQVJUX1Bhcml0eURpc2FibGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVJNX1VTQVJUX1BBUklUWV9FVkVOOgorICAgICAgICAgICAgY29uZmlnLnBhcml0eU1vZGUgPSBrTFBVQVJUX1Bhcml0eUV2ZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfUEFSSVRZX09ERDoKKyAgICAgICAgICAgIGNvbmZpZy5wYXJpdHlNb2RlID0ga0xQVUFSVF9QYXJpdHlPZGQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fVVNBUlRfRVJST1JfUEFSSVRZOworICAgIH0KKworICAgIHN3aXRjaCAoY29udHJvbCAmIEFSTV9VU0FSVF9TVE9QX0JJVFNfTXNrKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfU1RPUF9CSVRTXzE6CisgICAgICAgICAgICAvKiBUaGUgR2V0RGVmYXVsdENvbmZpZyBoYXMgYWxyZWFkeSBzZXQgZm9yIHRoaXMgY2FzZS4gKi8KKyAgICAgICAgICAgIGJyZWFrOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TVE9QX0JJVF9DT05GSUdfU1VQUE9SVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TVE9QX0JJVF9DT05GSUdfU1VQUE9SVAorICAgICAgICBjYXNlIEFSTV9VU0FSVF9TVE9QX0JJVFNfMjoKKyAgICAgICAgICAgIGNvbmZpZy5zdG9wQml0Q291bnQgPSBrTFBVQVJUX1R3b1N0b3BCaXQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9VU0FSVF9FUlJPUl9TVE9QX0JJVFM7CisgICAgfQorCisgICAgLyogSWYgTFBVQVJUIGlzIGFscmVhZHkgY29uZmlndXJlZCwgZGVpbml0IGl0IGZpcnN0LiAqLworICAgIGlmICgqaXNDb25maWd1cmVkKQorICAgIHsKKyAgICAgICAgTFBVQVJUX0RlaW5pdChyZXNvdXJjZS0+YmFzZSk7CisgICAgICAgICppc0NvbmZpZ3VyZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBjb25maWcuZW5hYmxlVHggPSB0cnVlOworICAgIGNvbmZpZy5lbmFibGVSeCA9IHRydWU7CisKKyAgICBpZiAoa1N0YXR1c19MUFVBUlRfQmF1ZHJhdGVOb3RTdXBwb3J0ID09IExQVUFSVF9Jbml0KHJlc291cmNlLT5iYXNlLCAmY29uZmlnLCByZXNvdXJjZS0+R2V0RnJlcSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fVVNBUlRfRVJST1JfQkFVRFJBVEU7CisgICAgfQorCisgICAgKmlzQ29uZmlndXJlZCA9IHRydWU7CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIEFSTV9EUklWRVJfVkVSU0lPTiBMUFVBUlR4X0dldFZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gc19scHVhcnREcml2ZXJWZXJzaW9uOworfQorCitzdGF0aWMgQVJNX1VTQVJUX0NBUEFCSUxJVElFUyBMUFVBUlR4X0dldENhcGFiaWxpdGllcyh2b2lkKQoreworICAgIHJldHVybiBzX2xwdWFydERyaXZlckNhcGFiaWxpdGllczsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUeF9TZXRNb2RlbUNvbnRyb2woQVJNX1VTQVJUX01PREVNX0NPTlRST0wgY29udHJvbCkKK3sKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKK30KKworc3RhdGljIEFSTV9VU0FSVF9NT0RFTV9TVEFUVVMgTFBVQVJUeF9HZXRNb2RlbVN0YXR1cyh2b2lkKQoreworICAgIEFSTV9VU0FSVF9NT0RFTV9TVEFUVVMgbW9kZW1fc3RhdHVzOworCisgICAgbW9kZW1fc3RhdHVzLmN0cyA9IDBVOworICAgIG1vZGVtX3N0YXR1cy5kc3IgPSAwVTsKKyAgICBtb2RlbV9zdGF0dXMucmkgPSAwVTsKKyAgICBtb2RlbV9zdGF0dXMuZGNkID0gMFU7CisKKyAgICByZXR1cm4gbW9kZW1fc3RhdHVzOworfQorCisjZW5kaWYKKworI2lmICgoUlRFX1VTQVJUMF9ETUFfRU4gJiYgZGVmaW5lZChMUFVBUlQwKSkgfHwgKFJURV9VU0FSVDFfRE1BX0VOICYmIGRlZmluZWQoTFBVQVJUMSkpIHx8IFwKKyAgICAgKFJURV9VU0FSVDJfRE1BX0VOICYmIGRlZmluZWQoTFBVQVJUMikpIHx8IChSVEVfVVNBUlQzX0RNQV9FTiAmJiBkZWZpbmVkKExQVUFSVDMpKSB8fCBcCisgICAgIChSVEVfVVNBUlQ0X0RNQV9FTiAmJiBkZWZpbmVkKExQVUFSVDQpKSB8fCAoUlRFX1VTQVJUNV9ETUFfRU4gJiYgZGVmaW5lZChMUFVBUlQ1KSkpCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQordm9pZCBLU0RLX0xQVUFSVF9EbWFDYWxsYmFjayhMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2RtYV9oYW5kbGVfdCAqaGFuZGxlLCBzdGF0dXNfdCBzdGF0dXMsIHZvaWQgKnVzZXJEYXRhKQoreworICAgIHVpbnQzMl90IGV2ZW50ID0gMFU7CisKKyAgICBpZiAoa1N0YXR1c19MUFVBUlRfVHhJZGxlID09IHN0YXR1cykKKyAgICB7CisgICAgICAgIGV2ZW50ID0gQVJNX1VTQVJUX0VWRU5UX1NFTkRfQ09NUExFVEU7CisgICAgfQorICAgIGVsc2UgaWYgKGtTdGF0dXNfTFBVQVJUX1J4SWRsZSA9PSBzdGF0dXMpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9VU0FSVF9FVkVOVF9SRUNFSVZFX0NPTVBMRVRFOworICAgIH0KKworICAgIC8qIFVzZXIgZGF0YSBpcyBhY3R1YWxseSBDTVNJUyBkcml2ZXIgY2FsbGJhY2suICovCisgICAgaWYgKCgwVSAhPSBldmVudCkgJiYgKHVzZXJEYXRhKSkKKyAgICB7CisgICAgICAgICgoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QpdXNlckRhdGEpKGV2ZW50KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9EbWFJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50LCBjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgaWYgKGxwdWFydC0+aXNJbml0aWFsaXplZCkKKyAgICB7CisgICAgICAgIC8qIERyaXZlciBpcyBhbHJlYWR5IGluaXRpYWxpemVkICovCisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworICAgIH0KKworICAgIGxwdWFydC0+Y2JfZXZlbnQgPSBjYl9ldmVudDsKKyAgICBscHVhcnQtPmlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9EbWFVbmluaXRpYWxpemUoY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIGxwdWFydC0+aXNJbml0aWFsaXplZCA9IGZhbHNlOworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfRG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSwgY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIGxwdWFydF9jb25maWdfdCBjb25maWc7CisgICAgY21zaXNfbHB1YXJ0X2RtYV9yZXNvdXJjZV90ICpkbWFSZXNvdXJjZTsKKworICAgIHN3aXRjaCAoc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIEFSTV9QT1dFUl9PRkY6CisgICAgICAgICAgICBpZiAobHB1YXJ0LT5pc1Bvd2VyT24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBVQVJUX0RlaW5pdChscHVhcnQtPnJlc291cmNlLT5iYXNlKTsKKyAgICAgICAgICAgICAgICBETUFNVVhfRGlzYWJsZUNoYW5uZWwobHB1YXJ0LT5kbWFSZXNvdXJjZS0+cnhEbWFtdXhCYXNlLCBscHVhcnQtPmRtYVJlc291cmNlLT5yeERtYUNoYW5uZWwpOworICAgICAgICAgICAgICAgIERNQU1VWF9EaXNhYmxlQ2hhbm5lbChscHVhcnQtPmRtYVJlc291cmNlLT50eERtYW11eEJhc2UsIGxwdWFydC0+ZG1hUmVzb3VyY2UtPnR4RG1hQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgbHB1YXJ0LT5pc1Bvd2VyT24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBscHVhcnQtPmlzQ29uZmlndXJlZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0xPVzoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgICAgICBjYXNlIEFSTV9QT1dFUl9GVUxMOgorICAgICAgICAgICAgLyogTXVzdCBiZSBpbml0aWFsaXplZCBmaXJzdC4gKi8KKyAgICAgICAgICAgIGlmICghbHB1YXJ0LT5pc0luaXRpYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxwdWFydC0+aXNQb3dlck9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExQVUFSVF9HZXREZWZhdWx0Q29uZmlnKCZjb25maWcpOworICAgICAgICAgICAgICAgIGNvbmZpZy5lbmFibGVUeCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29uZmlnLmVuYWJsZVJ4ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGRtYVJlc291cmNlID0gbHB1YXJ0LT5kbWFSZXNvdXJjZTsKKworICAgICAgICAgICAgICAgIC8qIFNldCB1cCBETUEgc2V0dGluZy4gKi8KKyAgICAgICAgICAgICAgICBETUFfQ3JlYXRlSGFuZGxlKGxwdWFydC0+cnhIYW5kbGUsIGRtYVJlc291cmNlLT5yeERtYUJhc2UsIGRtYVJlc291cmNlLT5yeERtYUNoYW5uZWwpOworICAgICAgICAgICAgICAgIERNQU1VWF9TZXRTb3VyY2UoZG1hUmVzb3VyY2UtPnJ4RG1hbXV4QmFzZSwgZG1hUmVzb3VyY2UtPnJ4RG1hQ2hhbm5lbCwgZG1hUmVzb3VyY2UtPnJ4RG1hUmVxdWVzdCk7CisgICAgICAgICAgICAgICAgRE1BTVVYX0VuYWJsZUNoYW5uZWwoZG1hUmVzb3VyY2UtPnJ4RG1hbXV4QmFzZSwgZG1hUmVzb3VyY2UtPnJ4RG1hQ2hhbm5lbCk7CisKKyAgICAgICAgICAgICAgICBETUFfQ3JlYXRlSGFuZGxlKGxwdWFydC0+dHhIYW5kbGUsIGRtYVJlc291cmNlLT50eERtYUJhc2UsIGRtYVJlc291cmNlLT50eERtYUNoYW5uZWwpOworICAgICAgICAgICAgICAgIERNQU1VWF9TZXRTb3VyY2UoZG1hUmVzb3VyY2UtPnR4RG1hbXV4QmFzZSwgZG1hUmVzb3VyY2UtPnR4RG1hQ2hhbm5lbCwgZG1hUmVzb3VyY2UtPnR4RG1hUmVxdWVzdCk7CisgICAgICAgICAgICAgICAgRE1BTVVYX0VuYWJsZUNoYW5uZWwoZG1hUmVzb3VyY2UtPnR4RG1hbXV4QmFzZSwgZG1hUmVzb3VyY2UtPnR4RG1hQ2hhbm5lbCk7CisKKyAgICAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgTFBVQVJULiAqLworICAgICAgICAgICAgICAgIExQVUFSVF9Jbml0KGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsICZjb25maWcsIGxwdWFydC0+cmVzb3VyY2UtPkdldEZyZXEoKSk7CisgICAgICAgICAgICAgICAgTFBVQVJUX1RyYW5zZmVyQ3JlYXRlSGFuZGxlRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCBLU0RLX0xQVUFSVF9EbWFDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilscHVhcnQtPmNiX2V2ZW50LCBscHVhcnQtPnR4SGFuZGxlLCBscHVhcnQtPnJ4SGFuZGxlKTsKKworICAgICAgICAgICAgICAgIGxwdWFydC0+aXNQb3dlck9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBscHVhcnQtPmlzQ29uZmlndXJlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfRG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0sIGNtc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBpbnQzMl90IHJldDsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgbHB1YXJ0X3RyYW5zZmVyX3QgeGZlcjsKKworICAgIHhmZXIuZGF0YSA9ICh1aW50OF90ICopZGF0YTsKKyAgICB4ZmVyLmRhdGFTaXplID0gbnVtOworCisgICAgc3RhdHVzID0gTFBVQVJUX1RyYW5zZmVyU2VuZERNQShscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSwgJnhmZXIpOworCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19MUFVBUlRfUnhCdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX0RtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtLCBjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgaW50MzJfdCByZXQ7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIGxwdWFydF90cmFuc2Zlcl90IHhmZXI7CisKKyAgICB4ZmVyLmRhdGEgPSBkYXRhOworICAgIHhmZXIuZGF0YVNpemUgPSBudW07CisKKyAgICBzdGF0dXMgPSBMUFVBUlRfVHJhbnNmZXJSZWNlaXZlRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCAmeGZlcik7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0xQVUFSVF9UeEJ1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfRG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YV9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIC8qIE9ubHkgaW4gc3luY2hyb25vdXMgbW9kZSAqLworICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUX0RtYUdldFR4Q291bnQoY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIHVpbnQzMl90IGNudDsKKworICAgIC8qIElmIFRYIG5vdCBpbiBwcm9ncmVzcywgdGhlbiB0aGUgVFggY291bnQgaXMgdHhEYXRhU2l6ZUFsbCBzYXZlZCBpbiBoYW5kbGUuICovCisgICAgaWYgKGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3MgPT0gTFBVQVJUX1RyYW5zZmVyR2V0U2VuZENvdW50RE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCAmY250KSkKKyAgICB7CisgICAgICAgIGNudCA9IGxwdWFydC0+aGFuZGxlLT50eERhdGFTaXplQWxsOworICAgIH0KKworICAgIHJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlRfRG1hR2V0UnhDb3VudChjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgdWludDMyX3QgY250OworCisgICAgaWYgKGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3MgPT0gTFBVQVJUX1RyYW5zZmVyR2V0UmVjZWl2ZUNvdW50RE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCAmY250KSkKKyAgICB7CisgICAgICAgIGNudCA9IGxwdWFydC0+aGFuZGxlLT5yeERhdGFTaXplQWxsOworICAgIH0KKworICAgIHJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9EbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZywgY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIC8qIE11c3QgYmUgcG93ZXIgb24uICovCisgICAgaWYgKCFscHVhcnQtPmlzUG93ZXJPbikKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworICAgIH0KKworICAgIC8qIERvZXMgbm90IHN1cHBvcnQgdGhlc2UgZmVhdHVyZXMuICovCisgICAgaWYgKGNvbnRyb2wgJiAoQVJNX1VTQVJUX0ZMT1dfQ09OVFJPTF9Nc2sgfCBBUk1fVVNBUlRfQ1BPTF9Nc2sgfCBBUk1fVVNBUlRfQ1BIQV9Nc2spKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgc3dpdGNoIChjb250cm9sICYgQVJNX1VTQVJUX0NPTlRST0xfTXNrKQorICAgIHsKKyAgICAgICAgLyogQWJvcnQgU2VuZCAqLworICAgICAgICBjYXNlIEFSTV9VU0FSVF9BQk9SVF9TRU5EOgorICAgICAgICAgICAgTFBVQVJUX1RyYW5zZmVyQWJvcnRTZW5kRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIC8qIEFib3J0IHJlY2VpdmUgKi8KKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfQUJPUlRfUkVDRUlWRToKKyAgICAgICAgICAgIExQVUFSVF9UcmFuc2ZlckFib3J0UmVjZWl2ZURNQShscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSk7CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIExQVUFSVF9Db21tb25Db250cm9sKGNvbnRyb2wsIGFyZywgbHB1YXJ0LT5yZXNvdXJjZSwgJmxwdWFydC0+aXNDb25maWd1cmVkKTsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUX0RtYUdldFN0YXR1cyhjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgQVJNX1VTQVJUX1NUQVRVUyBzdGF0OworICAgIHVpbnQzMl90IGtzZGtfbHB1YXJ0X3N0YXR1cyA9IExQVUFSVF9HZXRTdGF0dXNGbGFncyhscHVhcnQtPnJlc291cmNlLT5iYXNlKTsKKworICAgIHN0YXQudHhfYnVzeSA9ICgoa0xQVUFSVF9UeEJ1c3kgPT0gbHB1YXJ0LT5oYW5kbGUtPnR4U3RhdGUpID8gKDFVKSA6ICgwVSkpOworICAgIHN0YXQucnhfYnVzeSA9ICgoa0xQVUFSVF9SeEJ1c3kgPT0gbHB1YXJ0LT5oYW5kbGUtPnJ4U3RhdGUpID8gKDFVKSA6ICgwVSkpOworCisgICAgc3RhdC50eF91bmRlcmZsb3cgPSAwVTsKKyAgICBzdGF0LnJ4X292ZXJmbG93ID0gKCEoIShrc2RrX2xwdWFydF9zdGF0dXMgJiBrTFBVQVJUX1J4T3ZlcnJ1bkZsYWcpKSk7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0xJTl9CUkVBS19ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTElOX0JSRUFLX0RFVEVDVAorICAgIHN0YXQucnhfYnJlYWsgPSAoISghKGtzZGtfbHB1YXJ0X3N0YXR1cyAmIGtMUFVBUlRfTGluQnJlYWtGbGFnKSkpOworI2Vsc2UKKyAgICBzdGF0LnJ4X2JyZWFrID0gMFU7CisjZW5kaWYKKyAgICBzdGF0LnJ4X2ZyYW1pbmdfZXJyb3IgPSAoISghKGtzZGtfbHB1YXJ0X3N0YXR1cyAmIGtMUFVBUlRfRnJhbWluZ0Vycm9yRmxhZykpKTsKKyAgICBzdGF0LnJ4X3Bhcml0eV9lcnJvciA9ICghKCEoa3Nka19scHVhcnRfc3RhdHVzICYga0xQVUFSVF9QYXJpdHlFcnJvckZsYWcpKSk7CisKKyAgICByZXR1cm4gc3RhdDsKK30KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQordm9pZCBLU0RLX0xQVUFSVF9FZG1hQ2FsbGJhY2soTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIHN0YXR1c190IHN0YXR1cywgdm9pZCAqdXNlckRhdGEpCit7CisgICAgdWludDMyX3QgZXZlbnQgPSAwVTsKKworICAgIGlmIChrU3RhdHVzX0xQVUFSVF9UeElkbGUgPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fVVNBUlRfRVZFTlRfU0VORF9DT01QTEVURTsKKyAgICB9CisgICAgaWYgKGtTdGF0dXNfTFBVQVJUX1J4SWRsZSA9PSBzdGF0dXMpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9VU0FSVF9FVkVOVF9SRUNFSVZFX0NPTVBMRVRFOworICAgIH0KKworICAgIC8qIFVzZXIgZGF0YSBpcyBhY3R1YWxseSBDTVNJUyBkcml2ZXIgY2FsbGJhY2suICovCisgICAgaWYgKCgwVSAhPSBldmVudCkgJiYgKHVzZXJEYXRhKSkKKyAgICB7CisgICAgICAgICgoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QpdXNlckRhdGEpKGV2ZW50KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9FZG1hSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCwgY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBpZiAobHB1YXJ0LT5pc0luaXRpYWxpemVkKQorICAgIHsKKyAgICAgICAgLyogRHJpdmVyIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisgICAgfQorCisgICAgbHB1YXJ0LT5jYl9ldmVudCA9IGNiX2V2ZW50OworICAgIGxwdWFydC0+aXNJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX0VkbWFVbmluaXRpYWxpemUoY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBscHVhcnQtPmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlLCBjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIGxwdWFydF9jb25maWdfdCBjb25maWc7CisgICAgY21zaXNfbHB1YXJ0X2VkbWFfcmVzb3VyY2VfdCAqZG1hUmVzb3VyY2U7CisKKyAgICBzd2l0Y2ggKHN0YXRlKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfT0ZGOgorICAgICAgICAgICAgaWYgKGxwdWFydC0+aXNQb3dlck9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExQVUFSVF9EZWluaXQobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSk7CisgICAgICAgICAgICAgICAgRE1BTVVYX0Rpc2FibGVDaGFubmVsKGxwdWFydC0+ZG1hUmVzb3VyY2UtPnJ4RG1hbXV4QmFzZSwgbHB1YXJ0LT5kbWFSZXNvdXJjZS0+cnhFZG1hQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgRE1BTVVYX0Rpc2FibGVDaGFubmVsKGxwdWFydC0+ZG1hUmVzb3VyY2UtPnR4RG1hbXV4QmFzZSwgbHB1YXJ0LT5kbWFSZXNvdXJjZS0+dHhFZG1hQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgbHB1YXJ0LT5pc1Bvd2VyT24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBscHVhcnQtPmlzQ29uZmlndXJlZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0xPVzoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgICAgICBjYXNlIEFSTV9QT1dFUl9GVUxMOgorICAgICAgICAgICAgLyogTXVzdCBiZSBpbml0aWFsaXplZCBmaXJzdC4gKi8KKyAgICAgICAgICAgIGlmICghbHB1YXJ0LT5pc0luaXRpYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxwdWFydC0+aXNQb3dlck9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExQVUFSVF9HZXREZWZhdWx0Q29uZmlnKCZjb25maWcpOworICAgICAgICAgICAgICAgIGNvbmZpZy5lbmFibGVUeCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29uZmlnLmVuYWJsZVJ4ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGRtYVJlc291cmNlID0gbHB1YXJ0LT5kbWFSZXNvdXJjZTsKKworICAgICAgICAgICAgICAgIC8qIFNldCB1cCBFRE1BIHNldHRpbmcuICovCisgICAgICAgICAgICAgICAgRURNQV9DcmVhdGVIYW5kbGUobHB1YXJ0LT5yeEhhbmRsZSwgZG1hUmVzb3VyY2UtPnJ4RWRtYUJhc2UsIGRtYVJlc291cmNlLT5yeEVkbWFDaGFubmVsKTsKKyAgICAgICAgICAgICAgICBETUFNVVhfU2V0U291cmNlKGRtYVJlc291cmNlLT5yeERtYW11eEJhc2UsIGRtYVJlc291cmNlLT5yeEVkbWFDaGFubmVsLCBkbWFSZXNvdXJjZS0+cnhEbWFSZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBETUFNVVhfRW5hYmxlQ2hhbm5lbChkbWFSZXNvdXJjZS0+cnhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+cnhFZG1hQ2hhbm5lbCk7CisKKyAgICAgICAgICAgICAgICBFRE1BX0NyZWF0ZUhhbmRsZShscHVhcnQtPnR4SGFuZGxlLCBkbWFSZXNvdXJjZS0+dHhFZG1hQmFzZSwgZG1hUmVzb3VyY2UtPnR4RWRtYUNoYW5uZWwpOworICAgICAgICAgICAgICAgIERNQU1VWF9TZXRTb3VyY2UoZG1hUmVzb3VyY2UtPnR4RG1hbXV4QmFzZSwgZG1hUmVzb3VyY2UtPnR4RWRtYUNoYW5uZWwsIGRtYVJlc291cmNlLT50eERtYVJlcXVlc3QpOworICAgICAgICAgICAgICAgIERNQU1VWF9FbmFibGVDaGFubmVsKGRtYVJlc291cmNlLT50eERtYW11eEJhc2UsIGRtYVJlc291cmNlLT50eEVkbWFDaGFubmVsKTsKKworICAgICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBMUFVBUlQuICovCisgICAgICAgICAgICAgICAgTFBVQVJUX0luaXQobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgJmNvbmZpZywgbHB1YXJ0LT5yZXNvdXJjZS0+R2V0RnJlcSgpKTsKKyAgICAgICAgICAgICAgICBMUFVBUlRfVHJhbnNmZXJDcmVhdGVIYW5kbGVFRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCBLU0RLX0xQVUFSVF9FZG1hQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWxwdWFydC0+Y2JfZXZlbnQsIGxwdWFydC0+dHhIYW5kbGUsIGxwdWFydC0+cnhIYW5kbGUpOworCisgICAgICAgICAgICAgICAgbHB1YXJ0LT5pc1Bvd2VyT24gPSB0cnVlOworICAgICAgICAgICAgICAgIGxwdWFydC0+aXNDb25maWd1cmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9FZG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0sIGNtc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgaW50MzJfdCByZXQ7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIGxwdWFydF90cmFuc2Zlcl90IHhmZXI7CisKKyAgICB4ZmVyLmRhdGEgPSAodWludDhfdCAqKWRhdGE7CisgICAgeGZlci5kYXRhU2l6ZSA9IG51bTsKKworICAgIHN0YXR1cyA9IExQVUFSVF9TZW5kRURNQShscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSwgJnhmZXIpOworCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19MUFVBUlRfUnhCdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX0VkbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSwgY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBpbnQzMl90IHJldDsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgbHB1YXJ0X3RyYW5zZmVyX3QgeGZlcjsKKworICAgIHhmZXIuZGF0YSA9IGRhdGE7CisgICAgeGZlci5kYXRhU2l6ZSA9IG51bTsKKworICAgIHN0YXR1cyA9IExQVUFSVF9SZWNlaXZlRURNQShscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSwgJnhmZXIpOworCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19MUFVBUlRfVHhCdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX0VkbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YV9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIC8qIE9ubHkgaW4gc3luY2hyb25vdXMgbW9kZSAqLworICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUX0VkbWFHZXRUeENvdW50KGNtc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgdWludDMyX3QgY250OworCisgICAgaWYgKGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3MgPT0gTFBVQVJUX1RyYW5zZmVyR2V0U2VuZENvdW50RURNQShscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSwgJmNudCkpCisgICAgeworICAgICAgICBjbnQgPSBscHVhcnQtPmhhbmRsZS0+dHhEYXRhU2l6ZUFsbDsKKyAgICB9CisKKyAgICByZXR1cm4gY250OworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUX0VkbWFHZXRSeENvdW50KGNtc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgdWludDMyX3QgY250OworCisgICAgaWYgKGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3MgPT0KKyAgICAgICAgTFBVQVJUX1RyYW5zZmVyR2V0UmVjZWl2ZUNvdW50RURNQShscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSwgJmNudCkpCisgICAgeworICAgICAgICBjbnQgPSBscHVhcnQtPmhhbmRsZS0+cnhEYXRhU2l6ZUFsbDsKKyAgICB9CisKKyAgICByZXR1cm4gY250OworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfRWRtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnLCBjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIC8qIE11c3QgYmUgcG93ZXIgb24uICovCisgICAgaWYgKCFscHVhcnQtPmlzUG93ZXJPbikKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworICAgIH0KKworICAgIC8qIERvZXMgbm90IHN1cHBvcnQgdGhlc2UgZmVhdHVyZXMuICovCisgICAgaWYgKGNvbnRyb2wgJiAoQVJNX1VTQVJUX0ZMT1dfQ09OVFJPTF9Nc2sgfCBBUk1fVVNBUlRfQ1BPTF9Nc2sgfCBBUk1fVVNBUlRfQ1BIQV9Nc2spKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgc3dpdGNoIChjb250cm9sICYgQVJNX1VTQVJUX0NPTlRST0xfTXNrKQorICAgIHsKKyAgICAgICAgLyogQWJvcnQgU2VuZCAqLworICAgICAgICBjYXNlIEFSTV9VU0FSVF9BQk9SVF9TRU5EOgorICAgICAgICAgICAgTFBVQVJUX1RyYW5zZmVyQWJvcnRTZW5kRURNQShscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSk7CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICAvKiBBYm9ydCByZWNlaXZlICovCisgICAgICAgIGNhc2UgQVJNX1VTQVJUX0FCT1JUX1JFQ0VJVkU6CisgICAgICAgICAgICBMUFVBUlRfVHJhbnNmZXJBYm9ydFJlY2VpdmVFRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gTFBVQVJUX0NvbW1vbkNvbnRyb2woY29udHJvbCwgYXJnLCBscHVhcnQtPnJlc291cmNlLCAmbHB1YXJ0LT5pc0NvbmZpZ3VyZWQpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlRfRWRtYUdldFN0YXR1cyhjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIEFSTV9VU0FSVF9TVEFUVVMgc3RhdDsKKyAgICB1aW50MzJfdCBrc2RrX2xwdWFydF9zdGF0dXMgPSBMUFVBUlRfR2V0U3RhdHVzRmxhZ3MobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSk7CisKKyAgICBzdGF0LnR4X2J1c3kgPSAoKGtMUFVBUlRfVHhCdXN5ID09IGxwdWFydC0+aGFuZGxlLT50eFN0YXRlKSA/ICgxVSkgOiAoMFUpKTsKKyAgICBzdGF0LnJ4X2J1c3kgPSAoKGtMUFVBUlRfUnhCdXN5ID09IGxwdWFydC0+aGFuZGxlLT5yeFN0YXRlKSA/ICgxVSkgOiAoMFUpKTsKKworICAgIHN0YXQudHhfdW5kZXJmbG93ID0gMFU7CisgICAgc3RhdC5yeF9vdmVyZmxvdyA9ICghKCEoa3Nka19scHVhcnRfc3RhdHVzICYga0xQVUFSVF9SeE92ZXJydW5GbGFnKSkpOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0xJTl9CUkVBS19ERVRFQ1QKKyAgICBzdGF0LnJ4X2JyZWFrID0gKCEoIShrc2RrX2xwdWFydF9zdGF0dXMgJiBrTFBVQVJUX0xpbkJyZWFrRmxhZykpKTsKKyNlbHNlCisgICAgc3RhdC5yeF9icmVhayA9IDBVOworI2VuZGlmCisgICAgc3RhdC5yeF9mcmFtaW5nX2Vycm9yID0gKCEoIShrc2RrX2xwdWFydF9zdGF0dXMgJiBrTFBVQVJUX0ZyYW1pbmdFcnJvckZsYWcpKSk7CisgICAgc3RhdC5yeF9wYXJpdHlfZXJyb3IgPSAoISghKGtzZGtfbHB1YXJ0X3N0YXR1cyAmIGtMUFVBUlRfUGFyaXR5RXJyb3JGbGFnKSkpOworCisgICAgcmV0dXJuIHN0YXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisKKyNpZiAoKChSVEVfVVNBUlQwICYmICFSVEVfVVNBUlQwX0RNQV9FTikgJiYgZGVmaW5lZChMUFVBUlQwKSkgfHwgXAorICAgICAoKFJURV9VU0FSVDEgJiYgIVJURV9VU0FSVDFfRE1BX0VOKSAmJiBkZWZpbmVkKExQVUFSVDEpKSB8fCBcCisgICAgICgoUlRFX1VTQVJUMiAmJiAhUlRFX1VTQVJUMl9ETUFfRU4pICYmIGRlZmluZWQoTFBVQVJUMikpIHx8IFwKKyAgICAgKChSVEVfVVNBUlQzICYmICFSVEVfVVNBUlQzX0RNQV9FTikgJiYgZGVmaW5lZChMUFVBUlQzKSkgfHwgXAorICAgICAoKFJURV9VU0FSVDQgJiYgIVJURV9VU0FSVDRfRE1BX0VOKSAmJiBkZWZpbmVkKExQVUFSVDQpKSB8fCBcCisgICAgICgoUlRFX1VTQVJUNSAmJiAhUlRFX1VTQVJUNV9ETUFfRU4pICYmIGRlZmluZWQoTFBVQVJUNSkpKQorCit2b2lkIEtTREtfTFBVQVJUX05vbkJsb2NraW5nQ2FsbGJhY2soTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlLCBzdGF0dXNfdCBzdGF0dXMsIHZvaWQgKnVzZXJEYXRhKQoreworICAgIHVpbnQzMl90IGV2ZW50ID0gMFU7CisKKyAgICBpZiAoa1N0YXR1c19MUFVBUlRfVHhJZGxlID09IHN0YXR1cykKKyAgICB7CisgICAgICAgIGV2ZW50ID0gQVJNX1VTQVJUX0VWRU5UX1NFTkRfQ09NUExFVEU7CisgICAgfQorICAgIGlmIChrU3RhdHVzX0xQVUFSVF9SeElkbGUgPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fVVNBUlRfRVZFTlRfUkVDRUlWRV9DT01QTEVURTsKKyAgICB9CisgICAgaWYgKGtTdGF0dXNfTFBVQVJUX1J4SGFyZHdhcmVPdmVycnVuID09IHN0YXR1cykKKyAgICB7CisgICAgICAgIGV2ZW50ID0gQVJNX1VTQVJUX0VWRU5UX1JYX09WRVJGTE9XOworICAgIH0KKworICAgIC8qIFVzZXIgZGF0YSBpcyBhY3R1YWxseSBDTVNJUyBkcml2ZXIgY2FsbGJhY2suICovCisgICAgaWYgKCgwVSAhPSBldmVudCkgJiYgKHVzZXJEYXRhKSkKKyAgICB7CisgICAgICAgICgoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QpdXNlckRhdGEpKGV2ZW50KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9Ob25CbG9ja2luZ0luaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBpZiAobHB1YXJ0LT5pc0luaXRpYWxpemVkKQorICAgIHsKKyAgICAgICAgLyogRHJpdmVyIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisgICAgfQorCisgICAgbHB1YXJ0LT5jYl9ldmVudCA9IGNiX2V2ZW50OworICAgIGxwdWFydC0+aXNJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX05vbkJsb2NraW5nVW5pbml0aWFsaXplKGNtc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBscHVhcnQtPmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX05vbkJsb2NraW5nUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSwgY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIGxwdWFydF9jb25maWdfdCBjb25maWc7CisKKyAgICBzd2l0Y2ggKHN0YXRlKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfT0ZGOgorICAgICAgICAgICAgaWYgKGxwdWFydC0+aXNQb3dlck9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExQVUFSVF9EZWluaXQobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSk7CisgICAgICAgICAgICAgICAgbHB1YXJ0LT5pc1Bvd2VyT24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBscHVhcnQtPmlzQ29uZmlndXJlZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0xPVzoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgICAgICBjYXNlIEFSTV9QT1dFUl9GVUxMOgorICAgICAgICAgICAgLyogTXVzdCBiZSBpbml0aWFsaXplZCBmaXJzdC4gKi8KKyAgICAgICAgICAgIGlmICghbHB1YXJ0LT5pc0luaXRpYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxwdWFydC0+aXNQb3dlck9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExQVUFSVF9HZXREZWZhdWx0Q29uZmlnKCZjb25maWcpOworICAgICAgICAgICAgICAgIGNvbmZpZy5lbmFibGVUeCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29uZmlnLmVuYWJsZVJ4ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIExQVUFSVF9Jbml0KGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsICZjb25maWcsIGxwdWFydC0+cmVzb3VyY2UtPkdldEZyZXEoKSk7CisgICAgICAgICAgICAgICAgTFBVQVJUX1RyYW5zZmVyQ3JlYXRlSGFuZGxlKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCBLU0RLX0xQVUFSVF9Ob25CbG9ja2luZ0NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWxwdWFydC0+Y2JfZXZlbnQpOworICAgICAgICAgICAgICAgIGxwdWFydC0+aXNQb3dlck9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBscHVhcnQtPmlzQ29uZmlndXJlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfTm9uQmxvY2tpbmdTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSwgY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIGludDMyX3QgcmV0OworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBscHVhcnRfdHJhbnNmZXJfdCB4ZmVyOworCisgICAgeGZlci5kYXRhID0gKHVpbnQ4X3QgKilkYXRhOworICAgIHhmZXIuZGF0YVNpemUgPSBudW07CisKKyAgICBzdGF0dXMgPSBMUFVBUlRfVHJhbnNmZXJTZW5kTm9uQmxvY2tpbmcobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUsICZ4ZmVyKTsKKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdHVzX1N1Y2Nlc3M6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX09LOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX1BBUkFNRVRFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfTFBVQVJUX1J4QnVzeToKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9Ob25CbG9ja2luZ1JlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtLCBjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgaW50MzJfdCByZXQ7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIGxwdWFydF90cmFuc2Zlcl90IHhmZXI7CisKKyAgICB4ZmVyLmRhdGEgPSBkYXRhOworICAgIHhmZXIuZGF0YVNpemUgPSBudW07CisKKyAgICBzdGF0dXMgPSBMUFVBUlRfVHJhbnNmZXJSZWNlaXZlTm9uQmxvY2tpbmcobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUsICZ4ZmVyLCBOVUxMKTsKKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdHVzX1N1Y2Nlc3M6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX09LOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX1BBUkFNRVRFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfTFBVQVJUX1R4QnVzeToKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9Ob25CbG9ja2luZ1RyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YV9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICAvKiBPbmx5IGluIHN5bmNocm9ub3VzIG1vZGUgKi8KKyAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUjsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVF9Ob25CbG9ja2luZ0dldFR4Q291bnQoY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIHVpbnQzMl90IGNudDsKKworICAgIC8qIElmIFRYIG5vdCBpbiBwcm9ncmVzcywgdGhlbiB0aGUgVFggY291bnQgaXMgdHhEYXRhU2l6ZUFsbCBzYXZlZCBpbiBoYW5kbGUuICovCisgICAgaWYgKGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3MgPT0gTFBVQVJUX1RyYW5zZmVyR2V0U2VuZENvdW50KGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCAmY250KSkKKyAgICB7CisgICAgICAgIGNudCA9IGxwdWFydC0+aGFuZGxlLT50eERhdGFTaXplQWxsOworICAgIH0KKworICAgIHJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlRfTm9uQmxvY2tpbmdHZXRSeENvdW50KGNtc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICB1aW50MzJfdCBjbnQ7CisKKyAgICBpZiAoa1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzcyA9PSBMUFVBUlRfVHJhbnNmZXJHZXRSZWNlaXZlQ291bnQobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUsICZjbnQpKQorICAgIHsKKyAgICAgICAgY250ID0gbHB1YXJ0LT5oYW5kbGUtPnJ4RGF0YVNpemVBbGw7CisgICAgfQorCisgICAgcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX05vbkJsb2NraW5nQ29udHJvbCh1aW50MzJfdCBjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICAvKiBNdXN0IGJlIHBvd2VyIG9uLiAqLworICAgIGlmICghbHB1YXJ0LT5pc1Bvd2VyT24pCisgICAgeworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICB9CisKKyAgICAvKiBEb2VzIG5vdCBzdXBwb3J0IHRoZXNlIGZlYXR1cmVzLiAqLworICAgIGlmIChjb250cm9sICYgKEFSTV9VU0FSVF9GTE9XX0NPTlRST0xfTXNrIHwgQVJNX1VTQVJUX0NQT0xfTXNrIHwgQVJNX1VTQVJUX0NQSEFfTXNrKSkKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIHN3aXRjaCAoY29udHJvbCAmIEFSTV9VU0FSVF9DT05UUk9MX01zaykKKyAgICB7CisgICAgICAgIC8qIEFib3J0IFNlbmQgKi8KKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfQUJPUlRfU0VORDoKKyAgICAgICAgICAgIExQVUFSVF9UcmFuc2ZlckFib3J0U2VuZChscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSk7CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICAvKiBBYm9ydCByZWNlaXZlICovCisgICAgICAgIGNhc2UgQVJNX1VTQVJUX0FCT1JUX1JFQ0VJVkU6CisgICAgICAgICAgICBMUFVBUlRfVHJhbnNmZXJBYm9ydFJlY2VpdmUobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUpOworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBMUFVBUlRfQ29tbW9uQ29udHJvbChjb250cm9sLCBhcmcsIGxwdWFydC0+cmVzb3VyY2UsICZscHVhcnQtPmlzQ29uZmlndXJlZCk7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVF9Ob25CbG9ja2luZ0dldFN0YXR1cyhjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgQVJNX1VTQVJUX1NUQVRVUyBzdGF0OworICAgIHVpbnQzMl90IGtzZGtfbHB1YXJ0X3N0YXR1cyA9IExQVUFSVF9HZXRTdGF0dXNGbGFncyhscHVhcnQtPnJlc291cmNlLT5iYXNlKTsKKworICAgIHN0YXQudHhfYnVzeSA9ICgoa0xQVUFSVF9UeEJ1c3kgPT0gbHB1YXJ0LT5oYW5kbGUtPnR4U3RhdGUpID8gKDFVKSA6ICgwVSkpOworICAgIHN0YXQucnhfYnVzeSA9ICgoa0xQVUFSVF9SeEJ1c3kgPT0gbHB1YXJ0LT5oYW5kbGUtPnJ4U3RhdGUpID8gKDFVKSA6ICgwVSkpOworCisgICAgc3RhdC50eF91bmRlcmZsb3cgPSAwVTsKKyAgICBzdGF0LnJ4X292ZXJmbG93ID0gKCEoIShrc2RrX2xwdWFydF9zdGF0dXMgJiBrTFBVQVJUX1J4T3ZlcnJ1bkZsYWcpKSk7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0xJTl9CUkVBS19ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTElOX0JSRUFLX0RFVEVDVAorICAgIHN0YXQucnhfYnJlYWsgPSAoISghKGtzZGtfbHB1YXJ0X3N0YXR1cyAmIGtMUFVBUlRfTGluQnJlYWtGbGFnKSkpOworI2Vsc2UKKyAgICBzdGF0LnJ4X2JyZWFrID0gMFU7CisjZW5kaWYKKyAgICBzdGF0LnJ4X2ZyYW1pbmdfZXJyb3IgPSAoISghKGtzZGtfbHB1YXJ0X3N0YXR1cyAmIGtMUFVBUlRfRnJhbWluZ0Vycm9yRmxhZykpKTsKKyAgICBzdGF0LnJ4X3Bhcml0eV9lcnJvciA9ICghKCEoa3Nka19scHVhcnRfc3RhdHVzICYga0xQVUFSVF9QYXJpdHlFcnJvckZsYWcpKSk7CisKKyAgICByZXR1cm4gc3RhdDsKK30KKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKExQVUFSVDApICYmIFJURV9VU0FSVDAKKworZXh0ZXJuIHVpbnQzMl90IExQVUFSVDBfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIExQVUFSVDBfSW5pdFBpbnModm9pZCk7CitleHRlcm4gdm9pZCBMUFVBUlQwX0RlaW5pdFBpbnModm9pZCk7CisKK2Ntc2lzX2xwdWFydF9yZXNvdXJjZV90IExQVUFSVDBfUmVzb3VyY2UgPSB7TFBVQVJUMCwgTFBVQVJUMF9HZXRGcmVxfTsKKworI2lmIFJURV9VU0FSVDBfRE1BX0VOCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQorCitjbXNpc19scHVhcnRfZG1hX3Jlc291cmNlX3QgTFBVQVJUMF9EbWFSZXNvdXJjZSA9IHsKKyAgICBSVEVfVVNBUlQwX0RNQV9UWF9ETUFfQkFTRSwgUlRFX1VTQVJUMF9ETUFfVFhfQ0gsIFJURV9VU0FSVDBfRE1BX1RYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQwX0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9VU0FSVDBfRE1BX1JYX0RNQV9CQVNFLCBSVEVfVVNBUlQwX0RNQV9SWF9DSCwgUlRFX1VTQVJUMF9ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDBfRE1BX1JYX1BFUklfU0VMLAorfTsKKworbHB1YXJ0X2RtYV9oYW5kbGVfdCBMUFVBUlQwX0RtYUhhbmRsZTsKK2RtYV9oYW5kbGVfdCBMUFVBUlQwX0RtYVJ4SGFuZGxlOworZG1hX2hhbmRsZV90IExQVUFSVDBfRG1hVHhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0MF9kbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUMF9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDBfRG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUMF9SZXNvdXJjZSwgJkxQVUFSVDBfRG1hUmVzb3VyY2UsICZMUFVBUlQwX0RtYUhhbmRsZSwgJkxQVUFSVDBfRG1hUnhIYW5kbGUsICZMUFVBUlQwX0RtYVR4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9EbWFJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDBfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0RtYUluaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQwX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9EbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQwX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0RtYVVuaW5pdGlhbGl6ZSgmTFBVQVJUMF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfRG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDBfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX0RtYVNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hU2VuZChkYXRhLCBudW0sICZMUFVBUlQwX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9EbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVJlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUMF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfRG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQwX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDBfRG1hR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0VHhDb3VudCgmTFBVQVJUMF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQwX0RtYUdldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFJ4Q291bnQoJkxQVUFSVDBfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX0RtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQwX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUMF9EbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFN0YXR1cygmTFBVQVJUMF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorCitjbXNpc19scHVhcnRfZWRtYV9yZXNvdXJjZV90IExQVUFSVDBfRWRtYVJlc291cmNlID0geworICAgIFJURV9VU0FSVDBfRE1BX1RYX0RNQV9CQVNFLCBSVEVfVVNBUlQwX0RNQV9UWF9DSCwgUlRFX1VTQVJUMF9ETUFfVFhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDBfRE1BX1RYX1BFUklfU0VMLAorCisgICAgUlRFX1VTQVJUMF9ETUFfUlhfRE1BX0JBU0UsIFJURV9VU0FSVDBfRE1BX1JYX0NILCBSVEVfVVNBUlQwX0RNQV9SWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUMF9ETUFfUlhfUEVSSV9TRUwsCit9OworCitscHVhcnRfZWRtYV9oYW5kbGVfdCBMUFVBUlQwX0VkbWFIYW5kbGU7CitlZG1hX2hhbmRsZV90IExQVUFSVDBfRWRtYVJ4SGFuZGxlOworZWRtYV9oYW5kbGVfdCBMUFVBUlQwX0VkbWFUeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQwX2VkbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDBfRWRtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDBfRWRtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkxQVUFSVDBfUmVzb3VyY2UsICZMUFVBUlQwX0VkbWFSZXNvdXJjZSwgJkxQVUFSVDBfRWRtYUhhbmRsZSwgJkxQVUFSVDBfRWRtYVJ4SGFuZGxlLCAmTFBVQVJUMF9FZG1hVHhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX0VkbWFJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDBfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmTFBVQVJUMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX0VkbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQwX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFVbmluaXRpYWxpemUoJkxQVUFSVDBfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9FZG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFQb3dlckNvbnRyb2woc3RhdGUsICZMUFVBUlQwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfRWRtYVNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVNlbmQoZGF0YSwgbnVtLCAmTFBVQVJUMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX0VkbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFSZWNlaXZlKGRhdGEsIG51bSwgJkxQVUFSVDBfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9FZG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmTFBVQVJUMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUMF9FZG1hR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFR4Q291bnQoJkxQVUFSVDBfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDBfRWRtYUdldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRSeENvdW50KCZMUFVBUlQwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfRWRtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmTFBVQVJUMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQwX0VkbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRTdGF0dXMoJkxQVUFSVDBfRWRtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNlbHNlCisKK2xwdWFydF9oYW5kbGVfdCBMUFVBUlQwX0hhbmRsZTsKKworI2lmIGRlZmluZWQoVVNBUlQwX1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDBfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorc3RhdGljIHVpbnQ4X3QgbHB1YXJ0MF9yeFJpbmdCdWZmZXJbVVNBUlRfUlhfQlVGRkVSX0xFTl07CisjZW5kaWYKKworI2lmIGRlZmluZWQoVVNBUlQxX1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDFfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorc3RhdGljIHVpbnQ4X3QgbHB1YXJ0MV9yeFJpbmdCdWZmZXJbVVNBUlRfUlhfQlVGRkVSX0xFTl07CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQwX25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCBMUFVBUlQwX05vbkJsb2NraW5nRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCBMUFVBUlQwX05vbkJsb2NraW5nRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUMF9SZXNvdXJjZSwgJkxQVUFSVDBfSGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9Ob25CbG9ja2luZ0luaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUMF9Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdJbml0aWFsaXplKGNiX2V2ZW50LCAmTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDBfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUoJkxQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgIHJlc3VsdCA9IExQVUFSVF9Ob25CbG9ja2luZ1Bvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7CisKKyNpZiBkZWZpbmVkKFVTQVJUMF9SWF9CVUZGRVJfRU5BQkxFKSAmJiAoVVNBUlQwX1JYX0JVRkZFUl9FTkFCTEUgPT0gMSkKKyAgICBpZiAoKHN0YXRlID09IEFSTV9QT1dFUl9GVUxMKSAmJiAoTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZS0+cnhSaW5nQnVmZmVyID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgTFBVQVJUX1RyYW5zZmVyU3RhcnRSaW5nQnVmZmVyKExQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5yZXNvdXJjZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUsIGxwdWFydDBfcnhSaW5nQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfUlhfQlVGRkVSX0xFTik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX05vbkJsb2NraW5nU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1NlbmQoZGF0YSwgbnVtLCAmTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9Ob25CbG9ja2luZ1JlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdSZWNlaXZlKGRhdGEsIG51bSwgJkxQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfTm9uQmxvY2tpbmdUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDBfTm9uQmxvY2tpbmdHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFR4Q291bnQoJkxQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQwX05vbkJsb2NraW5nR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRSeENvdW50KCZMUFVBUlQwX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX05vbkJsb2NraW5nQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgaW50MzJfdCByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBMUFVBUlRfTm9uQmxvY2tpbmdDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7CisgICAgaWYgKEFSTV9EUklWRVJfT0sgIT0gcmVzdWx0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgdGhlIHJlY2VpdmUgaW50ZXJydXB0cyBpZiByaW5nIGJ1ZmZlciBpcyB1c2VkICovCisgICAgaWYgKExQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUtPnJ4UmluZ0J1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgTFBVQVJUX0VuYWJsZUludGVycnVwdHMoTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLnJlc291cmNlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxJbnRlcnJ1cHRFbmFibGUgfCBrTFBVQVJUX1J4T3ZlcnJ1bkludGVycnVwdEVuYWJsZSk7CisgICAgfQorCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVDBfTm9uQmxvY2tpbmdHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0U3RhdHVzKCZMUFVBUlQwX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2lmIChGU0xfRkVBVFVSRV9TT0NfTFBVQVJUX0NPVU5UID09IDEpCisjaWYgKEZTTF9GRUFUVVJFX1NPQ19VQVJUX0NPVU5UID09IDMpCitBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDMgPSB7CisjZWxpZihGU0xfRkVBVFVSRV9TT0NfVUFSVF9DT1VOVCA9PSA0KQorQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQ0ID0geworI2VsaWYoRlNMX0ZFQVRVUkVfU09DX1VBUlRfQ09VTlQgPT0gNSkKK0FSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUNSA9IHsKKyNlbHNlCitBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDAgPSB7CisjZW5kaWYKKyNlbHNlCitBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDAgPSB7CisjZW5kaWYKKworICAgIExQVUFSVHhfR2V0VmVyc2lvbiwgICAgICBMUFVBUlR4X0dldENhcGFiaWxpdGllcywKKyNpZiBSVEVfVVNBUlQwX0RNQV9FTgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKyAgICBMUFVBUlQwX0VkbWFJbml0aWFsaXplLCAgTFBVQVJUMF9FZG1hVW5pbml0aWFsaXplLCBMUFVBUlQwX0VkbWFQb3dlckNvbnRyb2wsIExQVUFSVDBfRWRtYVNlbmQsCisgICAgTFBVQVJUMF9FZG1hUmVjZWl2ZSwgICAgIExQVUFSVDBfRWRtYVRyYW5zZmVyLCAgICAgTFBVQVJUMF9FZG1hR2V0VHhDb3VudCwgICBMUFVBUlQwX0VkbWFHZXRSeENvdW50LAorICAgIExQVUFSVDBfRWRtYUNvbnRyb2wsICAgICBMUFVBUlQwX0VkbWFHZXRTdGF0dXMsCisjZWxzZQorICAgIExQVUFSVDBfRG1hSW5pdGlhbGl6ZSwgICBMUFVBUlQwX0RtYVVuaW5pdGlhbGl6ZSwgTFBVQVJUMF9EbWFQb3dlckNvbnRyb2wsIExQVUFSVDBfRG1hU2VuZCwgICAgTFBVQVJUMF9EbWFSZWNlaXZlLAorICAgIExQVUFSVDBfRG1hVHJhbnNmZXIsICAgICBMUFVBUlQwX0RtYUdldFR4Q291bnQsICAgTFBVQVJUMF9EbWFHZXRSeENvdW50LCAgIExQVUFSVDBfRG1hQ29udHJvbCwgTFBVQVJUMF9EbWFHZXRTdGF0dXMsCisjZW5kaWYKKyNlbHNlCisgICAgTFBVQVJUMF9Ob25CbG9ja2luZ0luaXRpYWxpemUsCisgICAgTFBVQVJUMF9Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSwKKyAgICBMUFVBUlQwX05vbkJsb2NraW5nUG93ZXJDb250cm9sLAorICAgIExQVUFSVDBfTm9uQmxvY2tpbmdTZW5kLAorICAgIExQVUFSVDBfTm9uQmxvY2tpbmdSZWNlaXZlLAorICAgIExQVUFSVDBfTm9uQmxvY2tpbmdUcmFuc2ZlciwKKyAgICBMUFVBUlQwX05vbkJsb2NraW5nR2V0VHhDb3VudCwKKyAgICBMUFVBUlQwX05vbkJsb2NraW5nR2V0UnhDb3VudCwKKyAgICBMUFVBUlQwX05vbkJsb2NraW5nQ29udHJvbCwKKyAgICBMUFVBUlQwX05vbkJsb2NraW5nR2V0U3RhdHVzLAorI2VuZGlmCisgICAgTFBVQVJUeF9TZXRNb2RlbUNvbnRyb2wsIExQVUFSVHhfR2V0TW9kZW1TdGF0dXN9OworCisjZW5kaWYgLyogTFBVQVJUMCAqLworCisjaWYgZGVmaW5lZChMUFVBUlQxKSAmJiBSVEVfVVNBUlQxCisKK2V4dGVybiB1aW50MzJfdCBMUFVBUlQxX0dldEZyZXEodm9pZCk7CitleHRlcm4gdm9pZCBMUFVBUlQxX0luaXRQaW5zKHZvaWQpOworZXh0ZXJuIHZvaWQgTFBVQVJUMV9EZWluaXRQaW5zKHZvaWQpOworCitjbXNpc19scHVhcnRfcmVzb3VyY2VfdCBMUFVBUlQxX1Jlc291cmNlID0ge0xQVUFSVDEsIExQVUFSVDFfR2V0RnJlcX07CisKKyNpZiBSVEVfVVNBUlQxX0RNQV9FTgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkKKworY21zaXNfbHB1YXJ0X2RtYV9yZXNvdXJjZV90IExQVUFSVDFfRG1hUmVzb3VyY2UgPSB7CisgICAgUlRFX1VTQVJUMV9ETUFfVFhfRE1BX0JBU0UsIFJURV9VU0FSVDFfRE1BX1RYX0NILCBSVEVfVVNBUlQxX0RNQV9UWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUMV9ETUFfVFhfUEVSSV9TRUwsCisKKyAgICBSVEVfVVNBUlQxX0RNQV9SWF9ETUFfQkFTRSwgUlRFX1VTQVJUMV9ETUFfUlhfQ0gsIFJURV9VU0FSVDFfRE1BX1JYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQxX0RNQV9SWF9QRVJJX1NFTCwKK307CisKK2xwdWFydF9kbWFfaGFuZGxlX3QgTFBVQVJUMV9EbWFIYW5kbGU7CitkbWFfaGFuZGxlX3QgTFBVQVJUMV9EbWFSeEhhbmRsZTsKK2RtYV9oYW5kbGVfdCBMUFVBUlQxX0RtYVR4SGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImxwdWFydDFfZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDFfRG1hRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQxX0RtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkxQVUFSVDFfUmVzb3VyY2UsICZMUFVBUlQxX0RtYVJlc291cmNlLCAmTFBVQVJUMV9EbWFIYW5kbGUsICZMUFVBUlQxX0RtYVJ4SGFuZGxlLCAmTFBVQVJUMV9EbWFUeEhhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfRG1hSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBMUFVBUlQxX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9EbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmTFBVQVJUMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfRG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgTFBVQVJUMV9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9EbWFVbmluaXRpYWxpemUoJkxQVUFSVDFfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX0RtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFQb3dlckNvbnRyb2woc3RhdGUsICZMUFVBUlQxX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9EbWFTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVNlbmQoZGF0YSwgbnVtLCAmTFBVQVJUMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfRG1hUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFSZWNlaXZlKGRhdGEsIG51bSwgJkxQVUFSVDFfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX0RtYVRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmTFBVQVJUMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQxX0RtYUdldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFR4Q291bnQoJkxQVUFSVDFfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUMV9EbWFHZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFHZXRSeENvdW50KCZMUFVBUlQxX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9EbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmTFBVQVJUMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVDFfRG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFHZXRTdGF0dXMoJkxQVUFSVDFfRG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKworY21zaXNfbHB1YXJ0X2VkbWFfcmVzb3VyY2VfdCBMUFVBUlQxX0VkbWFSZXNvdXJjZSA9IHsKKyAgICBSVEVfVVNBUlQxX0RNQV9UWF9ETUFfQkFTRSwgUlRFX1VTQVJUMV9ETUFfVFhfQ0gsIFJURV9VU0FSVDFfRE1BX1RYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQxX0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9VU0FSVDFfRE1BX1JYX0RNQV9CQVNFLCBSVEVfVVNBUlQxX0RNQV9SWF9DSCwgUlRFX1VTQVJUMV9ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDFfRE1BX1JYX1BFUklfU0VMLAorfTsKKworbHB1YXJ0X2VkbWFfaGFuZGxlX3QgTFBVQVJUMV9FZG1hSGFuZGxlOworZWRtYV9oYW5kbGVfdCBMUFVBUlQxX0VkbWFSeEhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgTFBVQVJUMV9FZG1hVHhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0MV9lZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQxX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQxX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQxX1Jlc291cmNlLCAmTFBVQVJUMV9FZG1hUmVzb3VyY2UsICZMUFVBUlQxX0VkbWFIYW5kbGUsICZMUFVBUlQxX0VkbWFSeEhhbmRsZSwgJkxQVUFSVDFfRWRtYVR4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9FZG1hSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBMUFVBUlQxX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9FZG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgTFBVQVJUMV9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hVW5pbml0aWFsaXplKCZMUFVBUlQxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX0VkbWFTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9FZG1hUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfRWRtYVRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDFfRWRtYUdldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRUeENvdW50KCZMUFVBUlQxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQxX0VkbWFHZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0UnhDb3VudCgmTFBVQVJUMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX0VkbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUMV9FZG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0U3RhdHVzKCZMUFVBUlQxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjZWxzZQorCitscHVhcnRfaGFuZGxlX3QgTFBVQVJUMV9IYW5kbGU7CisKKyNpZiBkZWZpbmVkKFVTQVJUMV9SWF9CVUZGRVJfRU5BQkxFKSAmJiAoVVNBUlQxX1JYX0JVRkZFUl9FTkFCTEUgPT0gMSkKK3N0YXRpYyB1aW50OF90IGxwdWFydDFfcnhSaW5nQnVmZmVyW1VTQVJUX1JYX0JVRkZFUl9MRU5dOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVTQVJUMl9SWF9CVUZGRVJfRU5BQkxFKSAmJiAoVVNBUlQyX1JYX0JVRkZFUl9FTkFCTEUgPT0gMSkKK3N0YXRpYyB1aW50OF90IGxwdWFydDJfcnhSaW5nQnVmZmVyW1VTQVJUX1JYX0JVRkZFUl9MRU5dOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0MV9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgTFBVQVJUMV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgTFBVQVJUMV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkxQVUFSVDFfUmVzb3VyY2UsICZMUFVBUlQxX0hhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfTm9uQmxvY2tpbmdJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDFfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQxX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nVW5pbml0aWFsaXplKCZMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX05vbkJsb2NraW5nUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBMUFVBUlRfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2woc3RhdGUsICZMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworCisjaWYgZGVmaW5lZChVU0FSVDFfUlhfQlVGRkVSX0VOQUJMRSkgJiYgKFVTQVJUMV9SWF9CVUZGRVJfRU5BQkxFID09IDEpCisgICAgaWYgKChzdGF0ZSA9PSBBUk1fUE9XRVJfRlVMTCkgJiYgKExQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUtPnJ4UmluZ0J1ZmZlciA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIExQVUFSVF9UcmFuc2ZlclN0YXJ0UmluZ0J1ZmZlcihMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUucmVzb3VyY2UtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLCBscHVhcnQxX3J4UmluZ0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQVJUX1JYX0JVRkZFUl9MRU4pOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9Ob25CbG9ja2luZ1NlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfTm9uQmxvY2tpbmdSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX05vbkJsb2NraW5nVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQxX05vbkJsb2NraW5nR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRUeENvdW50KCZMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUMV9Ob25CbG9ja2luZ0dldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0UnhDb3VudCgmTFBVQVJUMV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9Ob25CbG9ja2luZ0NvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIGludDMyX3QgcmVzdWx0OworCisgICAgcmVzdWx0ID0gTFBVQVJUX05vbkJsb2NraW5nQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworICAgIGlmIChBUk1fRFJJVkVSX09LICE9IHJlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyogRW5hYmxlIHRoZSByZWNlaXZlIGludGVycnVwdHMgaWYgcmluZyBidWZmZXIgaXMgdXNlZCAqLworICAgIGlmIChMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLT5yeFJpbmdCdWZmZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIExQVUFSVF9FbmFibGVJbnRlcnJ1cHRzKExQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5yZXNvdXJjZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xQVUFSVF9SeERhdGFSZWdGdWxsSW50ZXJydXB0RW5hYmxlIHwga0xQVUFSVF9SeE92ZXJydW5JbnRlcnJ1cHRFbmFibGUpOworICAgIH0KKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQxX05vbkJsb2NraW5nR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFN0YXR1cygmTFBVQVJUMV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKK0FSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMSA9IHtMUFVBUlR4X0dldFZlcnNpb24sICAgICAgTFBVQVJUeF9HZXRDYXBhYmlsaXRpZXMsCisjaWYgUlRFX1VTQVJUMV9ETUFfRU4KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9FZG1hSW5pdGlhbGl6ZSwgIExQVUFSVDFfRWRtYVVuaW5pdGlhbGl6ZSwgTFBVQVJUMV9FZG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfRWRtYVNlbmQsICAgICAgICBMUFVBUlQxX0VkbWFSZWNlaXZlLCAgICAgIExQVUFSVDFfRWRtYVRyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfRWRtYUdldFR4Q291bnQsICBMUFVBUlQxX0VkbWFHZXRSeENvdW50LCAgIExQVUFSVDFfRWRtYUNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9FZG1hR2V0U3RhdHVzLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQxX0RtYUluaXRpYWxpemUsICAgTFBVQVJUMV9EbWFVbmluaXRpYWxpemUsIExQVUFSVDFfRG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfRG1hU2VuZCwgICAgICAgICBMUFVBUlQxX0RtYVJlY2VpdmUsICAgICAgTFBVQVJUMV9EbWFUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQxX0RtYUdldFR4Q291bnQsICAgTFBVQVJUMV9EbWFHZXRSeENvdW50LCAgIExQVUFSVDFfRG1hQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQxX0RtYUdldFN0YXR1cywKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQxX05vbkJsb2NraW5nSW5pdGlhbGl6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQxX05vbkJsb2NraW5nVW5pbml0aWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9Ob25CbG9ja2luZ1NlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9Ob25CbG9ja2luZ1JlY2VpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9Ob25CbG9ja2luZ1RyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfTm9uQmxvY2tpbmdHZXRUeENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfTm9uQmxvY2tpbmdHZXRSeENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfTm9uQmxvY2tpbmdDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfTm9uQmxvY2tpbmdHZXRTdGF0dXMsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlR4X1NldE1vZGVtQ29udHJvbCwgTFBVQVJUeF9HZXRNb2RlbVN0YXR1c307CisKKyNlbmRpZiAvKiBMUFVBUlQxICovCisKKyNpZiBkZWZpbmVkKExQVUFSVDIpICYmIFJURV9VU0FSVDIKKworZXh0ZXJuIHVpbnQzMl90IExQVUFSVDJfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIExQVUFSVDJfSW5pdFBpbnModm9pZCk7CitleHRlcm4gdm9pZCBMUFVBUlQyX0RlaW5pdFBpbnModm9pZCk7CisKK2Ntc2lzX2xwdWFydF9yZXNvdXJjZV90IExQVUFSVDJfUmVzb3VyY2UgPSB7TFBVQVJUMiwgTFBVQVJUMl9HZXRGcmVxfTsKKworI2lmIFJURV9VU0FSVDJfRE1BX0VOCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQorCitjbXNpc19scHVhcnRfZG1hX3Jlc291cmNlX3QgTFBVQVJUMl9EbWFSZXNvdXJjZSA9IHsKKyAgICBSVEVfVVNBUlQyX0RNQV9UWF9ETUFfQkFTRSwgUlRFX1VTQVJUMl9ETUFfVFhfQ0gsIFJURV9VU0FSVDJfRE1BX1RYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQyX0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9VU0FSVDJfRE1BX1JYX0RNQV9CQVNFLCBSVEVfVVNBUlQyX0RNQV9SWF9DSCwgUlRFX1VTQVJUMl9ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDJfRE1BX1JYX1BFUklfU0VMLAorfTsKKworbHB1YXJ0X2RtYV9oYW5kbGVfdCBMUFVBUlQyX0RtYUhhbmRsZTsKK2RtYV9oYW5kbGVfdCBMUFVBUlQyX0RtYVJ4SGFuZGxlOworZG1hX2hhbmRsZV90IExQVUFSVDJfRG1hVHhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0Ml9kbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUMl9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDJfRG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUMl9SZXNvdXJjZSwgJkxQVUFSVDJfRG1hUmVzb3VyY2UsICZMUFVBUlQyX0RtYUhhbmRsZSwgJkxQVUFSVDJfRG1hUnhIYW5kbGUsICZMUFVBUlQyX0RtYVR4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9EbWFJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDJfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0RtYUluaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQyX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9EbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQyX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0RtYVVuaW5pdGlhbGl6ZSgmTFBVQVJUMl9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfRG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDJfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX0RtYVNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hU2VuZChkYXRhLCBudW0sICZMUFVBUlQyX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9EbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVJlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUMl9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfRG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQyX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDJfRG1hR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0VHhDb3VudCgmTFBVQVJUMl9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQyX0RtYUdldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFJ4Q291bnQoJkxQVUFSVDJfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX0RtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQyX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUMl9EbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFN0YXR1cygmTFBVQVJUMl9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorCitjbXNpc19scHVhcnRfZWRtYV9yZXNvdXJjZV90IExQVUFSVDJfRWRtYVJlc291cmNlID0geworICAgIFJURV9VU0FSVDJfRE1BX1RYX0RNQV9CQVNFLCBSVEVfVVNBUlQyX0RNQV9UWF9DSCwgUlRFX1VTQVJUMl9ETUFfVFhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDJfRE1BX1RYX1BFUklfU0VMLAorCisgICAgUlRFX1VTQVJUMl9ETUFfUlhfRE1BX0JBU0UsIFJURV9VU0FSVDJfRE1BX1JYX0NILCBSVEVfVVNBUlQyX0RNQV9SWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUMl9ETUFfUlhfUEVSSV9TRUwsCit9OworCitscHVhcnRfZWRtYV9oYW5kbGVfdCBMUFVBUlQyX0VkbWFIYW5kbGU7CitlZG1hX2hhbmRsZV90IExQVUFSVDJfRWRtYVJ4SGFuZGxlOworZWRtYV9oYW5kbGVfdCBMUFVBUlQyX0VkbWFUeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQyX2VkbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDJfRWRtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDJfRWRtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkxQVUFSVDJfUmVzb3VyY2UsICZMUFVBUlQyX0VkbWFSZXNvdXJjZSwgJkxQVUFSVDJfRWRtYUhhbmRsZSwgJkxQVUFSVDJfRWRtYVJ4SGFuZGxlLCAmTFBVQVJUMl9FZG1hVHhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX0VkbWFJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDJfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmTFBVQVJUMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX0VkbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQyX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFVbmluaXRpYWxpemUoJkxQVUFSVDJfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9FZG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFQb3dlckNvbnRyb2woc3RhdGUsICZMUFVBUlQyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfRWRtYVNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVNlbmQoZGF0YSwgbnVtLCAmTFBVQVJUMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX0VkbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFSZWNlaXZlKGRhdGEsIG51bSwgJkxQVUFSVDJfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9FZG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmTFBVQVJUMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUMl9FZG1hR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFR4Q291bnQoJkxQVUFSVDJfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDJfRWRtYUdldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRSeENvdW50KCZMUFVBUlQyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfRWRtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmTFBVQVJUMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQyX0VkbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRTdGF0dXMoJkxQVUFSVDJfRWRtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNlbHNlCisKK2xwdWFydF9oYW5kbGVfdCBMUFVBUlQyX0hhbmRsZTsKKworI2lmIGRlZmluZWQoVVNBUlQyX1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDJfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorc3RhdGljIHVpbnQ4X3QgbHB1YXJ0Ml9yeFJpbmdCdWZmZXJbVVNBUlRfUlhfQlVGRkVSX0xFTl07CisjZW5kaWYKKworI2lmIGRlZmluZWQoVVNBUlQzX1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDNfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorc3RhdGljIHVpbnQ4X3QgbHB1YXJ0M19yeFJpbmdCdWZmZXJbVVNBUlRfUlhfQlVGRkVSX0xFTl07CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQyX25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCBMUFVBUlQyX05vbkJsb2NraW5nRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCBMUFVBUlQyX05vbkJsb2NraW5nRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUMl9SZXNvdXJjZSwgJkxQVUFSVDJfSGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9Ob25CbG9ja2luZ0luaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUMl9Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdJbml0aWFsaXplKGNiX2V2ZW50LCAmTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDJfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUoJkxQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgIHJlc3VsdCA9IExQVUFSVF9Ob25CbG9ja2luZ1Bvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7CisKKyNpZiBkZWZpbmVkKFVTQVJUMl9SWF9CVUZGRVJfRU5BQkxFKSAmJiAoVVNBUlQyX1JYX0JVRkZFUl9FTkFCTEUgPT0gMSkKKyAgICBpZiAoKHN0YXRlID09IEFSTV9QT1dFUl9GVUxMKSAmJiAoTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZS0+cnhSaW5nQnVmZmVyID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgTFBVQVJUX1RyYW5zZmVyU3RhcnRSaW5nQnVmZmVyKExQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5yZXNvdXJjZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUsIGxwdWFydDJfcnhSaW5nQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfUlhfQlVGRkVSX0xFTik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX05vbkJsb2NraW5nU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1NlbmQoZGF0YSwgbnVtLCAmTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9Ob25CbG9ja2luZ1JlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdSZWNlaXZlKGRhdGEsIG51bSwgJkxQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfTm9uQmxvY2tpbmdUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDJfTm9uQmxvY2tpbmdHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFR4Q291bnQoJkxQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQyX05vbkJsb2NraW5nR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRSeENvdW50KCZMUFVBUlQyX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX05vbkJsb2NraW5nQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgaW50MzJfdCByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBMUFVBUlRfTm9uQmxvY2tpbmdDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7CisgICAgaWYgKEFSTV9EUklWRVJfT0sgIT0gcmVzdWx0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgdGhlIHJlY2VpdmUgaW50ZXJydXB0cyBpZiByaW5nIGJ1ZmZlciBpcyB1c2VkICovCisgICAgaWYgKExQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUtPnJ4UmluZ0J1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgTFBVQVJUX0VuYWJsZUludGVycnVwdHMoTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLnJlc291cmNlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxJbnRlcnJ1cHRFbmFibGUgfCBrTFBVQVJUX1J4T3ZlcnJ1bkludGVycnVwdEVuYWJsZSk7CisgICAgfQorCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVDJfTm9uQmxvY2tpbmdHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0U3RhdHVzKCZMUFVBUlQyX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQyID0ge0xQVUFSVHhfR2V0VmVyc2lvbiwgICAgICBMUFVBUlR4X0dldENhcGFiaWxpdGllcywKKyNpZiBSVEVfVVNBUlQyX0RNQV9FTgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX0VkbWFJbml0aWFsaXplLCAgTFBVQVJUMl9FZG1hVW5pbml0aWFsaXplLCBMUFVBUlQyX0VkbWFQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9FZG1hU2VuZCwgICAgICAgIExQVUFSVDJfRWRtYVJlY2VpdmUsICAgICAgTFBVQVJUMl9FZG1hVHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9FZG1hR2V0VHhDb3VudCwgIExQVUFSVDJfRWRtYUdldFJ4Q291bnQsICAgTFBVQVJUMl9FZG1hQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX0VkbWFHZXRTdGF0dXMsCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDJfRG1hSW5pdGlhbGl6ZSwgICBMUFVBUlQyX0RtYVVuaW5pdGlhbGl6ZSwgTFBVQVJUMl9EbWFQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9EbWFTZW5kLCAgICAgICAgIExQVUFSVDJfRG1hUmVjZWl2ZSwgICAgICBMUFVBUlQyX0RtYVRyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDJfRG1hR2V0VHhDb3VudCwgICBMUFVBUlQyX0RtYUdldFJ4Q291bnQsICAgTFBVQVJUMl9EbWFDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDJfRG1hR2V0U3RhdHVzLAorI2VuZGlmCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDJfTm9uQmxvY2tpbmdJbml0aWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDJfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9Ob25CbG9ja2luZ1Bvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX05vbkJsb2NraW5nU2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX05vbkJsb2NraW5nUmVjZWl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX05vbkJsb2NraW5nVHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9Ob25CbG9ja2luZ0dldFR4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9Ob25CbG9ja2luZ0dldFJ4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9Ob25CbG9ja2luZ0NvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9Ob25CbG9ja2luZ0dldFN0YXR1cywKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVHhfU2V0TW9kZW1Db250cm9sLCBMUFVBUlR4X0dldE1vZGVtU3RhdHVzfTsKKworI2VuZGlmIC8qIExQVUFSVDIgKi8KKworI2lmIGRlZmluZWQoTFBVQVJUMykgJiYgUlRFX1VTQVJUMworCitleHRlcm4gdWludDMyX3QgTFBVQVJUM19HZXRGcmVxKHZvaWQpOworZXh0ZXJuIHZvaWQgTFBVQVJUM19Jbml0UGlucyh2b2lkKTsKK2V4dGVybiB2b2lkIExQVUFSVDNfRGVpbml0UGlucyh2b2lkKTsKKworY21zaXNfbHB1YXJ0X3Jlc291cmNlX3QgTFBVQVJUM19SZXNvdXJjZSA9IHtMUFVBUlQzLCBMUFVBUlQzX0dldEZyZXF9OworCisjaWYgUlRFX1VTQVJUM19ETUFfRU4KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpCisKK2Ntc2lzX2xwdWFydF9kbWFfcmVzb3VyY2VfdCBMUFVBUlQzX0RtYVJlc291cmNlID0geworICAgIFJURV9VU0FSVDNfRE1BX1RYX0RNQV9CQVNFLCBSVEVfVVNBUlQzX0RNQV9UWF9DSCwgUlRFX1VTQVJUM19ETUFfVFhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDNfRE1BX1RYX1BFUklfU0VMLAorCisgICAgUlRFX1VTQVJUM19ETUFfUlhfRE1BX0JBU0UsIFJURV9VU0FSVDNfRE1BX1JYX0NILCBSVEVfVVNBUlQzX0RNQV9SWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUM19ETUFfUlhfUEVSSV9TRUwsCit9OworCitscHVhcnRfZG1hX2hhbmRsZV90IExQVUFSVDNfRG1hSGFuZGxlOworZG1hX2hhbmRsZV90IExQVUFSVDNfRG1hUnhIYW5kbGU7CitkbWFfaGFuZGxlX3QgTFBVQVJUM19EbWFUeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQzX2RtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQzX0RtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUM19EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQzX1Jlc291cmNlLCAmTFBVQVJUM19EbWFSZXNvdXJjZSwgJkxQVUFSVDNfRG1hSGFuZGxlLCAmTFBVQVJUM19EbWFSeEhhbmRsZSwgJkxQVUFSVDNfRG1hVHhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX0RtYUluaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUM19Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDNfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX0RtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDNfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRG1hVW5pbml0aWFsaXplKCZMUFVBUlQzX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19EbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfRG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDNfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX0RtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQzX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19EbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDNfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUM19EbWFHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFHZXRUeENvdW50KCZMUFVBUlQzX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDNfRG1hR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0UnhDb3VudCgmTFBVQVJUM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfRG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDNfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQzX0RtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0U3RhdHVzKCZMUFVBUlQzX0RtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisKK2Ntc2lzX2xwdWFydF9lZG1hX3Jlc291cmNlX3QgTFBVQVJUM19FZG1hUmVzb3VyY2UgPSB7CisgICAgUlRFX1VTQVJUM19ETUFfVFhfRE1BX0JBU0UsIFJURV9VU0FSVDNfRE1BX1RYX0NILCBSVEVfVVNBUlQzX0RNQV9UWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUM19ETUFfVFhfUEVSSV9TRUwsCisKKyAgICBSVEVfVVNBUlQzX0RNQV9SWF9ETUFfQkFTRSwgUlRFX1VTQVJUM19ETUFfUlhfQ0gsIFJURV9VU0FSVDNfRE1BX1JYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQzX0RNQV9SWF9QRVJJX1NFTCwKK307CisKK2xwdWFydF9lZG1hX2hhbmRsZV90IExQVUFSVDNfRWRtYUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgTFBVQVJUM19FZG1hUnhIYW5kbGU7CitlZG1hX2hhbmRsZV90IExQVUFSVDNfRWRtYVR4SGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImxwdWFydDNfZWRtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUM19FZG1hRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUM19FZG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUM19SZXNvdXJjZSwgJkxQVUFSVDNfRWRtYVJlc291cmNlLCAmTFBVQVJUM19FZG1hSGFuZGxlLCAmTFBVQVJUM19FZG1hUnhIYW5kbGUsICZMUFVBUlQzX0VkbWFUeEhhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfRWRtYUluaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUM19Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRWRtYUluaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfRWRtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDNfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRWRtYVVuaW5pdGlhbGl6ZSgmTFBVQVJUM19FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDNfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19FZG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hU2VuZChkYXRhLCBudW0sICZMUFVBUlQzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfRWRtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVJlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUM19FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX0VkbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQzX0VkbWFHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0VHhDb3VudCgmTFBVQVJUM19FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUM19FZG1hR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFJ4Q291bnQoJkxQVUFSVDNfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19FZG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVDNfRWRtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFN0YXR1cygmTFBVQVJUM19FZG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2Vsc2UKKworbHB1YXJ0X2hhbmRsZV90IExQVUFSVDNfSGFuZGxlOworCisjaWYgZGVmaW5lZChVU0FSVDNfUlhfQlVGRkVSX0VOQUJMRSkgJiYgKFVTQVJUM19SWF9CVUZGRVJfRU5BQkxFID09IDEpCitzdGF0aWMgdWludDhfdCBscHVhcnQzX3J4UmluZ0J1ZmZlcltVU0FSVF9SWF9CVUZGRVJfTEVOXTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChVU0FSVDRfUlhfQlVGRkVSX0VOQUJMRSkgJiYgKFVTQVJUNF9SWF9CVUZGRVJfRU5BQkxFID09IDEpCitzdGF0aWMgdWludDhfdCBscHVhcnQ0X3J4UmluZ0J1ZmZlcltVU0FSVF9SWF9CVUZGRVJfTEVOXTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImxwdWFydDNfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90IExQVUFSVDNfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90IExQVUFSVDNfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQzX1Jlc291cmNlLCAmTFBVQVJUM19IYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX05vbkJsb2NraW5nSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBMUFVBUlQzX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0luaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX05vbkJsb2NraW5nVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgTFBVQVJUM19EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSgmTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19Ob25CbG9ja2luZ1Bvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisgICAgcmVzdWx0ID0gTFBVQVJUX05vbkJsb2NraW5nUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKKworI2lmIGRlZmluZWQoVVNBUlQzX1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDNfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorICAgIGlmICgoc3RhdGUgPT0gQVJNX1BPV0VSX0ZVTEwpICYmIChMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLT5yeFJpbmdCdWZmZXIgPT0gTlVMTCkpCisgICAgeworICAgICAgICBMUFVBUlRfVHJhbnNmZXJTdGFydFJpbmdCdWZmZXIoTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlLnJlc291cmNlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZSwgbHB1YXJ0M19yeFJpbmdCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FSVF9SWF9CVUZGRVJfTEVOKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfTm9uQmxvY2tpbmdTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nU2VuZChkYXRhLCBudW0sICZMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX05vbkJsb2NraW5nUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1JlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19Ob25CbG9ja2luZ1RyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1RyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUM19Ob25CbG9ja2luZ0dldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0VHhDb3VudCgmTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDNfTm9uQmxvY2tpbmdHZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFJ4Q291bnQoJkxQVUFSVDNfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfTm9uQmxvY2tpbmdDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICBpbnQzMl90IHJlc3VsdDsKKworICAgIHJlc3VsdCA9IExQVUFSVF9Ob25CbG9ja2luZ0NvbnRyb2woY29udHJvbCwgYXJnLCAmTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKKyAgICBpZiAoQVJNX0RSSVZFUl9PSyAhPSByZXN1bHQpCisgICAgeworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIEVuYWJsZSB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHRzIGlmIHJpbmcgYnVmZmVyIGlzIHVzZWQgKi8KKyAgICBpZiAoTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZS0+cnhSaW5nQnVmZmVyICE9IE5VTEwpCisgICAgeworICAgICAgICBMUFVBUlRfRW5hYmxlSW50ZXJydXB0cyhMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUucmVzb3VyY2UtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSB8IGtMUFVBUlRfUnhPdmVycnVuSW50ZXJydXB0RW5hYmxlKTsKKyAgICB9CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUM19Ob25CbG9ja2luZ0dldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRTdGF0dXMoJkxQVUFSVDNfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCitBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDMgPSB7TFBVQVJUeF9HZXRWZXJzaW9uLCAgICAgIExQVUFSVHhfR2V0Q2FwYWJpbGl0aWVzLAorI2lmIFJURV9VU0FSVDNfRE1BX0VOCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfRWRtYUluaXRpYWxpemUsICBMUFVBUlQzX0VkbWFVbmluaXRpYWxpemUsIExQVUFSVDNfRWRtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX0VkbWFTZW5kLCAgICAgICAgTFBVQVJUM19FZG1hUmVjZWl2ZSwgICAgICBMUFVBUlQzX0VkbWFUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX0VkbWFHZXRUeENvdW50LCAgTFBVQVJUM19FZG1hR2V0UnhDb3VudCwgICBMUFVBUlQzX0VkbWFDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfRWRtYUdldFN0YXR1cywKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUM19EbWFJbml0aWFsaXplLCAgIExQVUFSVDNfRG1hVW5pbml0aWFsaXplLCBMUFVBUlQzX0RtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX0RtYVNlbmQsICAgICAgICAgTFBVQVJUM19EbWFSZWNlaXZlLCAgICAgIExQVUFSVDNfRG1hVHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUM19EbWFHZXRUeENvdW50LCAgIExQVUFSVDNfRG1hR2V0UnhDb3VudCwgICBMUFVBUlQzX0RtYUNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUM19EbWFHZXRTdGF0dXMsCisjZW5kaWYKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUM19Ob25CbG9ja2luZ0luaXRpYWxpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUM19Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX05vbkJsb2NraW5nUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfTm9uQmxvY2tpbmdTZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfTm9uQmxvY2tpbmdSZWNlaXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfTm9uQmxvY2tpbmdUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX05vbkJsb2NraW5nR2V0VHhDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX05vbkJsb2NraW5nR2V0UnhDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX05vbkJsb2NraW5nQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX05vbkJsb2NraW5nR2V0U3RhdHVzLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUeF9TZXRNb2RlbUNvbnRyb2wsIExQVUFSVHhfR2V0TW9kZW1TdGF0dXN9OworCisjZW5kaWYgLyogTFBVQVJUMyAqLworCisjaWYgZGVmaW5lZChMUFVBUlQ0KSAmJiBSVEVfVVNBUlQ0CisKK2V4dGVybiB1aW50MzJfdCBMUFVBUlQ0X0dldEZyZXEodm9pZCk7CitleHRlcm4gdm9pZCBMUFVBUlQ0X0luaXRQaW5zKHZvaWQpOworZXh0ZXJuIHZvaWQgTFBVQVJUNF9EZWluaXRQaW5zKHZvaWQpOworCitjbXNpc19scHVhcnRfcmVzb3VyY2VfdCBMUFVBUlQ0X1Jlc291cmNlID0ge0xQVUFSVDQsIExQVUFSVDRfR2V0RnJlcX07CisKKyNpZiBSVEVfVVNBUlQ0X0RNQV9FTgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkKKworY21zaXNfbHB1YXJ0X2RtYV9yZXNvdXJjZV90IExQVUFSVDRfRG1hUmVzb3VyY2UgPSB7CisgICAgUlRFX1VTQVJUNF9ETUFfVFhfRE1BX0JBU0UsIFJURV9VU0FSVDRfRE1BX1RYX0NILCBSVEVfVVNBUlQ0X0RNQV9UWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUNF9ETUFfVFhfUEVSSV9TRUwsCisKKyAgICBSVEVfVVNBUlQ0X0RNQV9SWF9ETUFfQkFTRSwgUlRFX1VTQVJUNF9ETUFfUlhfQ0gsIFJURV9VU0FSVDRfRE1BX1JYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQ0X0RNQV9SWF9QRVJJX1NFTCwKK307CisKK2xwdWFydF9kbWFfaGFuZGxlX3QgTFBVQVJUNF9EbWFIYW5kbGU7CitkbWFfaGFuZGxlX3QgTFBVQVJUNF9EbWFSeEhhbmRsZTsKK2RtYV9oYW5kbGVfdCBMUFVBUlQ0X0RtYVR4SGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImxwdWFydDRfZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDRfRG1hRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQ0X0RtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkxQVUFSVDRfUmVzb3VyY2UsICZMUFVBUlQ0X0RtYVJlc291cmNlLCAmTFBVQVJUNF9EbWFIYW5kbGUsICZMUFVBUlQ0X0RtYVJ4SGFuZGxlLCAmTFBVQVJUNF9EbWFUeEhhbmRsZX07CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfRG1hSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBMUFVBUlQ0X0luaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9EbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmTFBVQVJUNF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfRG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgTFBVQVJUNF9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9EbWFVbmluaXRpYWxpemUoJkxQVUFSVDRfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X0RtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFQb3dlckNvbnRyb2woc3RhdGUsICZMUFVBUlQ0X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9EbWFTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVNlbmQoZGF0YSwgbnVtLCAmTFBVQVJUNF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfRG1hUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFSZWNlaXZlKGRhdGEsIG51bSwgJkxQVUFSVDRfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X0RtYVRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmTFBVQVJUNF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQ0X0RtYUdldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFR4Q291bnQoJkxQVUFSVDRfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUNF9EbWFHZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFHZXRSeENvdW50KCZMUFVBUlQ0X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9EbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmTFBVQVJUNF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVDRfRG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFHZXRTdGF0dXMoJkxQVUFSVDRfRG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKworY21zaXNfbHB1YXJ0X2VkbWFfcmVzb3VyY2VfdCBMUFVBUlQ0X0VkbWFSZXNvdXJjZSA9IHsKKyAgICBSVEVfVVNBUlQ0X0RNQV9UWF9ETUFfQkFTRSwgUlRFX1VTQVJUNF9ETUFfVFhfQ0gsIFJURV9VU0FSVDRfRE1BX1RYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQ0X0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9VU0FSVDRfRE1BX1JYX0RNQV9CQVNFLCBSVEVfVVNBUlQ0X0RNQV9SWF9DSCwgUlRFX1VTQVJUNF9ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDRfRE1BX1JYX1BFUklfU0VMLAorfTsKKworbHB1YXJ0X2VkbWFfaGFuZGxlX3QgTFBVQVJUNF9FZG1hSGFuZGxlOworZWRtYV9oYW5kbGVfdCBMUFVBUlQ0X0VkbWFSeEhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgTFBVQVJUNF9FZG1hVHhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0NF9lZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQ0X0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQ0X0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQ0X1Jlc291cmNlLCAmTFBVQVJUNF9FZG1hUmVzb3VyY2UsICZMUFVBUlQ0X0VkbWFIYW5kbGUsICZMUFVBUlQ0X0VkbWFSeEhhbmRsZSwgJkxQVUFSVDRfRWRtYVR4SGFuZGxlfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9FZG1hSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBMUFVBUlQ0X0luaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDRfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9FZG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgTFBVQVJUNF9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hVW5pbml0aWFsaXplKCZMUFVBUlQ0X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUNF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X0VkbWFTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDRfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9FZG1hUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQ0X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfRWRtYVRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDRfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDRfRWRtYUdldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRUeENvdW50KCZMUFVBUlQ0X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQ0X0VkbWFHZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0UnhDb3VudCgmTFBVQVJUNF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X0VkbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDRfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUNF9FZG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0U3RhdHVzKCZMUFVBUlQ0X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjZWxzZQorCitscHVhcnRfaGFuZGxlX3QgTFBVQVJUNF9IYW5kbGU7CisKKyNpZiBkZWZpbmVkKFVTQVJUNF9SWF9CVUZGRVJfRU5BQkxFKSAmJiAoVVNBUlQ0X1JYX0JVRkZFUl9FTkFCTEUgPT0gMSkKK3N0YXRpYyB1aW50OF90IGxwdWFydDRfcnhSaW5nQnVmZmVyW1VTQVJUX1JYX0JVRkZFUl9MRU5dOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVTQVJUNV9SWF9CVUZGRVJfRU5BQkxFKSAmJiAoVVNBUlQ1X1JYX0JVRkZFUl9FTkFCTEUgPT0gMSkKK3N0YXRpYyB1aW50OF90IGxwdWFydDVfcnhSaW5nQnVmZmVyW1VTQVJUX1JYX0JVRkZFUl9MRU5dOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0NF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgTFBVQVJUNF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgTFBVQVJUNF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkxQVUFSVDRfUmVzb3VyY2UsICZMUFVBUlQ0X0hhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfTm9uQmxvY2tpbmdJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDRfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQ0X0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nVW5pbml0aWFsaXplKCZMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X05vbkJsb2NraW5nUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBMUFVBUlRfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2woc3RhdGUsICZMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworCisjaWYgZGVmaW5lZChVU0FSVDRfUlhfQlVGRkVSX0VOQUJMRSkgJiYgKFVTQVJUNF9SWF9CVUZGRVJfRU5BQkxFID09IDEpCisgICAgaWYgKChzdGF0ZSA9PSBBUk1fUE9XRVJfRlVMTCkgJiYgKExQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUtPnJ4UmluZ0J1ZmZlciA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIExQVUFSVF9UcmFuc2ZlclN0YXJ0UmluZ0J1ZmZlcihMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUucmVzb3VyY2UtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLCBscHVhcnQ0X3J4UmluZ0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQVJUX1JYX0JVRkZFUl9MRU4pOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9Ob25CbG9ja2luZ1NlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfTm9uQmxvY2tpbmdSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X05vbkJsb2NraW5nVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQ0X05vbkJsb2NraW5nR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRUeENvdW50KCZMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUNF9Ob25CbG9ja2luZ0dldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0UnhDb3VudCgmTFBVQVJUNF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9Ob25CbG9ja2luZ0NvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIGludDMyX3QgcmVzdWx0OworCisgICAgcmVzdWx0ID0gTFBVQVJUX05vbkJsb2NraW5nQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworICAgIGlmIChBUk1fRFJJVkVSX09LICE9IHJlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyogRW5hYmxlIHRoZSByZWNlaXZlIGludGVycnVwdHMgaWYgcmluZyBidWZmZXIgaXMgdXNlZCAqLworICAgIGlmIChMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLT5yeFJpbmdCdWZmZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIExQVUFSVF9FbmFibGVJbnRlcnJ1cHRzKExQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5yZXNvdXJjZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xQVUFSVF9SeERhdGFSZWdGdWxsSW50ZXJydXB0RW5hYmxlIHwga0xQVUFSVF9SeE92ZXJydW5JbnRlcnJ1cHRFbmFibGUpOworICAgIH0KKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQ0X05vbkJsb2NraW5nR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFN0YXR1cygmTFBVQVJUNF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKK0FSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUNCA9IHtMUFVBUlR4X0dldFZlcnNpb24sICAgICAgTFBVQVJUeF9HZXRDYXBhYmlsaXRpZXMsCisjaWYgUlRFX1VTQVJUNF9ETUFfRU4KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9FZG1hSW5pdGlhbGl6ZSwgIExQVUFSVDRfRWRtYVVuaW5pdGlhbGl6ZSwgTFBVQVJUNF9FZG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfRWRtYVNlbmQsICAgICAgICBMUFVBUlQ0X0VkbWFSZWNlaXZlLCAgICAgIExQVUFSVDRfRWRtYVRyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfRWRtYUdldFR4Q291bnQsICBMUFVBUlQ0X0VkbWFHZXRSeENvdW50LCAgIExQVUFSVDRfRWRtYUNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9FZG1hR2V0U3RhdHVzLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ0X0RtYUluaXRpYWxpemUsICAgTFBVQVJUNF9EbWFVbmluaXRpYWxpemUsIExQVUFSVDRfRG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfRG1hU2VuZCwgICAgICAgICBMUFVBUlQ0X0RtYVJlY2VpdmUsICAgICAgTFBVQVJUNF9EbWFUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ0X0RtYUdldFR4Q291bnQsICAgTFBVQVJUNF9EbWFHZXRSeENvdW50LCAgIExQVUFSVDRfRG1hQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ0X0RtYUdldFN0YXR1cywKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ0X05vbkJsb2NraW5nSW5pdGlhbGl6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ0X05vbkJsb2NraW5nVW5pbml0aWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9Ob25CbG9ja2luZ1NlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9Ob25CbG9ja2luZ1JlY2VpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9Ob25CbG9ja2luZ1RyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfTm9uQmxvY2tpbmdHZXRUeENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfTm9uQmxvY2tpbmdHZXRSeENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfTm9uQmxvY2tpbmdDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfTm9uQmxvY2tpbmdHZXRTdGF0dXMsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlR4X1NldE1vZGVtQ29udHJvbCwgTFBVQVJUeF9HZXRNb2RlbVN0YXR1c307CisKKyNlbmRpZiAvKiBMUFVBUlQ0ICovCisKKyNpZiBkZWZpbmVkKExQVUFSVDUpICYmIFJURV9VU0FSVDUKKworZXh0ZXJuIHVpbnQzMl90IExQVUFSVDVfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIExQVUFSVDVfSW5pdFBpbnModm9pZCk7CitleHRlcm4gdm9pZCBMUFVBUlQ1X0RlaW5pdFBpbnModm9pZCk7CisKK2Ntc2lzX2xwdWFydF9yZXNvdXJjZV90IExQVUFSVDVfUmVzb3VyY2UgPSB7TFBVQVJUNSwgTFBVQVJUNV9HZXRGcmVxfTsKKworI2lmIFJURV9VU0FSVDVfRE1BX0VOCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQorCitjbXNpc19scHVhcnRfZG1hX3Jlc291cmNlX3QgTFBVQVJUNV9EbWFSZXNvdXJjZSA9IHsKKyAgICBSVEVfVVNBUlQ1X0RNQV9UWF9ETUFfQkFTRSwgUlRFX1VTQVJUNV9ETUFfVFhfQ0gsIFJURV9VU0FSVDVfRE1BX1RYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQ1X0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9VU0FSVDVfRE1BX1JYX0RNQV9CQVNFLCBSVEVfVVNBUlQ1X0RNQV9SWF9DSCwgUlRFX1VTQVJUNV9ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDVfRE1BX1JYX1BFUklfU0VMLAorfTsKKworbHB1YXJ0X2RtYV9oYW5kbGVfdCBMUFVBUlQ1X0RtYUhhbmRsZTsKK2RtYV9oYW5kbGVfdCBMUFVBUlQ1X0RtYVJ4SGFuZGxlOworZG1hX2hhbmRsZV90IExQVUFSVDVfRG1hVHhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0NV9kbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUNV9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDVfRG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUNV9SZXNvdXJjZSwgJkxQVUFSVDVfRG1hUmVzb3VyY2UsICZMUFVBUlQ1X0RtYUhhbmRsZSwgJkxQVUFSVDVfRG1hUnhIYW5kbGUsICZMUFVBUlQ1X0RtYVR4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9EbWFJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDVfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0RtYUluaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQ1X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9EbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQ1X0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0RtYVVuaW5pdGlhbGl6ZSgmTFBVQVJUNV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfRG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDVfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X0RtYVNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hU2VuZChkYXRhLCBudW0sICZMUFVBUlQ1X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9EbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVJlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUNV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfRG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQ1X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDVfRG1hR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0VHhDb3VudCgmTFBVQVJUNV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQ1X0RtYUdldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFJ4Q291bnQoJkxQVUFSVDVfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X0RtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQ1X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUNV9EbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFN0YXR1cygmTFBVQVJUNV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKKy8qIExQVUFSVDUgRHJpdmVyIENvbnRyb2wgQmxvY2sgKi8KKworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisKK2Ntc2lzX2xwdWFydF9lZG1hX3Jlc291cmNlX3QgTFBVQVJUNV9FZG1hUmVzb3VyY2UgPSB7CisgICAgUlRFX1VTQVJUNV9ETUFfVFhfRE1BX0JBU0UsIFJURV9VU0FSVDVfRE1BX1RYX0NILCBSVEVfVVNBUlQ1X0RNQV9UWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUNV9ETUFfVFhfUEVSSV9TRUwsCisKKyAgICBSVEVfVVNBUlQ1X0RNQV9SWF9ETUFfQkFTRSwgUlRFX1VTQVJUNV9ETUFfUlhfQ0gsIFJURV9VU0FSVDVfRE1BX1JYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQ1X0RNQV9SWF9QRVJJX1NFTCwKK307CisKK2xwdWFydF9lZG1hX2hhbmRsZV90IExQVUFSVDVfRWRtYUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgTFBVQVJUNV9FZG1hUnhIYW5kbGU7CitlZG1hX2hhbmRsZV90IExQVUFSVDVfRWRtYVR4SGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImxwdWFydDVfZWRtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUNV9FZG1hRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUNV9FZG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUNV9SZXNvdXJjZSwgJkxQVUFSVDVfRWRtYVJlc291cmNlLCAmTFBVQVJUNV9FZG1hSGFuZGxlLCAmTFBVQVJUNV9FZG1hUnhIYW5kbGUsICZMUFVBUlQ1X0VkbWFUeEhhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfRWRtYUluaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUNV9Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRWRtYUluaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQ1X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfRWRtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDVfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRWRtYVVuaW5pdGlhbGl6ZSgmTFBVQVJUNV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDVfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9FZG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hU2VuZChkYXRhLCBudW0sICZMUFVBUlQ1X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfRWRtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVJlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUNV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X0VkbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQ1X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQ1X0VkbWFHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0VHhDb3VudCgmTFBVQVJUNV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUNV9FZG1hR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFJ4Q291bnQoJkxQVUFSVDVfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9FZG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQ1X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVDVfRWRtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFN0YXR1cygmTFBVQVJUNV9FZG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2Vsc2UKKworbHB1YXJ0X2hhbmRsZV90IExQVUFSVDVfSGFuZGxlOworCisjaWYgZGVmaW5lZChVU0FSVDVfUlhfQlVGRkVSX0VOQUJMRSkgJiYgKFVTQVJUNV9SWF9CVUZGRVJfRU5BQkxFID09IDEpCitzdGF0aWMgdWludDhfdCBscHVhcnQ1X3J4UmluZ0J1ZmZlcltVU0FSVF9SWF9CVUZGRVJfTEVOXTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImxwdWFydDVfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90IExQVUFSVDVfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90IExQVUFSVDVfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQ1X1Jlc291cmNlLCAmTFBVQVJUNV9IYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X05vbkJsb2NraW5nSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBMUFVBUlQ1X0luaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0luaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X05vbkJsb2NraW5nVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgTFBVQVJUNV9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSgmTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9Ob25CbG9ja2luZ1Bvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisgICAgcmVzdWx0ID0gTFBVQVJUX05vbkJsb2NraW5nUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKKworI2lmIGRlZmluZWQoVVNBUlQ1X1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDVfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorICAgIGlmICgoc3RhdGUgPT0gQVJNX1BPV0VSX0ZVTEwpICYmIChMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLT5yeFJpbmdCdWZmZXIgPT0gTlVMTCkpCisgICAgeworICAgICAgICBMUFVBUlRfVHJhbnNmZXJTdGFydFJpbmdCdWZmZXIoTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLnJlc291cmNlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZSwgbHB1YXJ0NV9yeFJpbmdCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FSVF9SWF9CVUZGRVJfTEVOKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfTm9uQmxvY2tpbmdTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nU2VuZChkYXRhLCBudW0sICZMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X05vbkJsb2NraW5nUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1JlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9Ob25CbG9ja2luZ1RyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1RyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUNV9Ob25CbG9ja2luZ0dldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0VHhDb3VudCgmTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDVfTm9uQmxvY2tpbmdHZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFJ4Q291bnQoJkxQVUFSVDVfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfTm9uQmxvY2tpbmdDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICBpbnQzMl90IHJlc3VsdDsKKworICAgIHJlc3VsdCA9IExQVUFSVF9Ob25CbG9ja2luZ0NvbnRyb2woY29udHJvbCwgYXJnLCAmTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKKyAgICBpZiAoQVJNX0RSSVZFUl9PSyAhPSByZXN1bHQpCisgICAgeworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIEVuYWJsZSB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHRzIGlmIHJpbmcgYnVmZmVyIGlzIHVzZWQgKi8KKyAgICBpZiAoTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZS0+cnhSaW5nQnVmZmVyICE9IE5VTEwpCisgICAgeworICAgICAgICBMUFVBUlRfRW5hYmxlSW50ZXJydXB0cyhMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUucmVzb3VyY2UtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSB8IGtMUFVBUlRfUnhPdmVycnVuSW50ZXJydXB0RW5hYmxlKTsKKyAgICB9CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUNV9Ob25CbG9ja2luZ0dldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRTdGF0dXMoJkxQVUFSVDVfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCitBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDUgPSB7TFBVQVJUeF9HZXRWZXJzaW9uLCAgICAgIExQVUFSVHhfR2V0Q2FwYWJpbGl0aWVzLAorI2lmIFJURV9VU0FSVDVfRE1BX0VOCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfRWRtYUluaXRpYWxpemUsICBMUFVBUlQ1X0VkbWFVbmluaXRpYWxpemUsIExQVUFSVDVfRWRtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X0VkbWFTZW5kLCAgICAgICAgTFBVQVJUNV9FZG1hUmVjZWl2ZSwgICAgICBMUFVBUlQ1X0VkbWFUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X0VkbWFHZXRUeENvdW50LCAgTFBVQVJUNV9FZG1hR2V0UnhDb3VudCwgICBMUFVBUlQ1X0VkbWFDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfRWRtYUdldFN0YXR1cywKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNV9EbWFJbml0aWFsaXplLCAgIExQVUFSVDVfRG1hVW5pbml0aWFsaXplLCBMUFVBUlQ1X0RtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X0RtYVNlbmQsICAgICAgICAgTFBVQVJUNV9EbWFSZWNlaXZlLCAgICAgIExQVUFSVDVfRG1hVHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNV9EbWFHZXRUeENvdW50LCAgIExQVUFSVDVfRG1hR2V0UnhDb3VudCwgICBMUFVBUlQ1X0RtYUNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNV9EbWFHZXRTdGF0dXMsCisjZW5kaWYKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNV9Ob25CbG9ja2luZ0luaXRpYWxpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNV9Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X05vbkJsb2NraW5nUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfTm9uQmxvY2tpbmdTZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfTm9uQmxvY2tpbmdSZWNlaXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfTm9uQmxvY2tpbmdUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X05vbkJsb2NraW5nR2V0VHhDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X05vbkJsb2NraW5nR2V0UnhDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X05vbkJsb2NraW5nQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X05vbkJsb2NraW5nR2V0U3RhdHVzLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUeF9TZXRNb2RlbUNvbnRyb2wsIExQVUFSVHhfR2V0TW9kZW1TdGF0dXN9OworCisjZW5kaWYgLyogTFBVQVJUNSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfbHB1YXJ0X2Ntc2lzLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9scHVhcnRfY21zaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGI1YjJlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfbHB1YXJ0X2Ntc2lzLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICogQ29weXJpZ2h0IChjKSAyMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlNMX0xQVUFSVF9DTVNJU19IXworI2RlZmluZSBfRlNMX0xQVUFSVF9DTVNJU19IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorI2luY2x1ZGUgIkRyaXZlcl9VU0FSVC5oIgorI2luY2x1ZGUgIlJURV9EZXZpY2UuaCIKKyNpbmNsdWRlICJmc2xfbHB1YXJ0LmgiCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQU1VWF9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQU1VWF9DT1VOVCkKKyNpbmNsdWRlICJmc2xfZG1hbXV4LmgiCisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQorI2luY2x1ZGUgImZzbF9scHVhcnRfZG1hLmgiCisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisjaW5jbHVkZSAiZnNsX2xwdWFydF9lZG1hLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFBVQVJUMCkKK2V4dGVybiBBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDA7CisjZW5kaWYgLyogTFBVQVJUMCAqLworCisjaWYgZGVmaW5lZChMUFVBUlQxKQorZXh0ZXJuIEFSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMTsKKyNlbmRpZiAvKiBMUFVBUlQxICovCisKKyNpZiBkZWZpbmVkKExQVUFSVDIpCitleHRlcm4gQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQyOworI2VuZGlmIC8qIExQVUFSVDIgKi8KKworI2lmIGRlZmluZWQoTFBVQVJUMykKK2V4dGVybiBBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDM7CisjZW5kaWYgLyogTFBVQVJUMyAqLworCisjaWYgZGVmaW5lZChMUFVBUlQ0KQorZXh0ZXJuIEFSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUNDsKKyNlbmRpZiAvKiBMUFVBUlQ0ICovCisKKyNpZiBkZWZpbmVkKExQVUFSVDUpCitleHRlcm4gQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQ1OworI2VuZGlmIC8qIExQVUFSVDUgKi8KKworI2lmIChGU0xfRkVBVFVSRV9TT0NfTFBVQVJUX0NPVU5UID09IDEpICYmIChGU0xfRkVBVFVSRV9TT0NfVUFSVF9DT1VOVCA9PSAzKQorCitleHRlcm4gQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQzOworCisjZW5kaWYKKworI2lmIChGU0xfRkVBVFVSRV9TT0NfTFBVQVJUX0NPVU5UID09IDEpICYmIChGU0xfRkVBVFVSRV9TT0NfVUFSVF9DT1VOVCA9PSA0KQorCitleHRlcm4gQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQ0OworCisjZW5kaWYKKworI2lmIChGU0xfRkVBVFVSRV9TT0NfTFBVQVJUX0NPVU5UID09IDEpICYmIChGU0xfRkVBVFVSRV9TT0NfVUFSVF9DT1VOVCA9PSA1KQorZXh0ZXJuIEFSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUNTsKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfRlNMX0xQVUFSVF9DTVNJU19IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfYWRjMTYuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2FkYzE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFmNmE0NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2FkYzE2LmMKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2FkYzE2LmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYnJpZWYgR2V0IGluc3RhbmNlIG51bWJlciBmb3IgQURDMTYgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKi8KK3N0YXRpYyB1aW50MzJfdCBBREMxNl9HZXRJbnN0YW5jZShBRENfVHlwZSAqYmFzZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIEFEQzE2IGJhc2VzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIEFEQ19UeXBlICpjb25zdCBzX2FkYzE2QmFzZXNbXSA9IEFEQ19CQVNFX1BUUlM7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIEFEQzE2IGNsb2NrcyBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBjb25zdCBjbG9ja19pcF9uYW1lX3Qgc19hZGMxNkNsb2Nrc1tdID0gQURDMTZfQ0xPQ0tTOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1aW50MzJfdCBBREMxNl9HZXRJbnN0YW5jZShBRENfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19hZGMxNkJhc2VzKTsgaW5zdGFuY2UrKykKKyAgICB7CisgICAgICAgIGlmIChzX2FkYzE2QmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2FkYzE2QmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9pZCBBREMxNl9Jbml0KEFEQ19UeXBlICpiYXNlLCBjb25zdCBhZGMxNl9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChOVUxMICE9IGNvbmZpZyk7CisKKyAgICB1aW50MzJfdCB0bXAzMjsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBFbmFibGUgdGhlIGNsb2NrLiAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfYWRjMTZDbG9ja3NbQURDMTZfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworICAgIC8qIEFEQ3hfQ0ZHMS4gKi8KKyAgICB0bXAzMiA9IEFEQ19DRkcxX0FESUNMSyhjb25maWctPmNsb2NrU291cmNlKSB8IEFEQ19DRkcxX01PREUoY29uZmlnLT5yZXNvbHV0aW9uKTsKKyAgICBpZiAoa0FEQzE2X0xvbmdTYW1wbGVEaXNhYmxlZCAhPSBjb25maWctPmxvbmdTYW1wbGVNb2RlKQorICAgIHsKKyAgICAgICAgdG1wMzIgfD0gQURDX0NGRzFfQURMU01QX01BU0s7CisgICAgfQorICAgIHRtcDMyIHw9IEFEQ19DRkcxX0FESVYoY29uZmlnLT5jbG9ja0RpdmlkZXIpOworICAgIGlmIChjb25maWctPmVuYWJsZUxvd1Bvd2VyKQorICAgIHsKKyAgICAgICAgdG1wMzIgfD0gQURDX0NGRzFfQURMUENfTUFTSzsKKyAgICB9CisgICAgYmFzZS0+Q0ZHMSA9IHRtcDMyOworCisgICAgLyogQURDeF9DRkcyLiAqLworICAgIHRtcDMyID0gYmFzZS0+Q0ZHMiAmIH4oQURDX0NGRzJfQURBQ0tFTl9NQVNLIHwgQURDX0NGRzJfQURIU0NfTUFTSyB8IEFEQ19DRkcyX0FETFNUU19NQVNLKTsKKyAgICBpZiAoa0FEQzE2X0xvbmdTYW1wbGVEaXNhYmxlZCAhPSBjb25maWctPmxvbmdTYW1wbGVNb2RlKQorICAgIHsKKyAgICAgICAgdG1wMzIgfD0gQURDX0NGRzJfQURMU1RTKGNvbmZpZy0+bG9uZ1NhbXBsZU1vZGUpOworICAgIH0KKyAgICBpZiAoY29uZmlnLT5lbmFibGVIaWdoU3BlZWQpCisgICAgeworICAgICAgICB0bXAzMiB8PSBBRENfQ0ZHMl9BREhTQ19NQVNLOworICAgIH0KKyAgICBpZiAoY29uZmlnLT5lbmFibGVBc3luY2hyb25vdXNDbG9jaykKKyAgICB7CisgICAgICAgIHRtcDMyIHw9IEFEQ19DRkcyX0FEQUNLRU5fTUFTSzsKKyAgICB9CisgICAgYmFzZS0+Q0ZHMiA9IHRtcDMyOworCisgICAgLyogQURDeF9TQzIuICovCisgICAgdG1wMzIgPSBiYXNlLT5TQzIgJiB+KEFEQ19TQzJfUkVGU0VMX01BU0spOworICAgIHRtcDMyIHw9IEFEQ19TQzJfUkVGU0VMKGNvbmZpZy0+cmVmZXJlbmNlVm9sdGFnZVNvdXJjZSk7CisgICAgYmFzZS0+U0MyID0gdG1wMzI7CisKKyAgICAvKiBBREN4X1NDMy4gKi8KKyAgICBpZiAoY29uZmlnLT5lbmFibGVDb250aW51b3VzQ29udmVyc2lvbikKKyAgICB7CisgICAgICAgIGJhc2UtPlNDMyB8PSBBRENfU0MzX0FEQ09fTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+U0MzICY9IH5BRENfU0MzX0FEQ09fTUFTSzsKKyAgICB9Cit9CisKK3ZvaWQgQURDMTZfRGVpbml0KEFEQ19UeXBlICpiYXNlKQoreworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBEaXNhYmxlIHRoZSBjbG9jay4gKi8KKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soc19hZGMxNkNsb2Nrc1tBREMxNl9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCit2b2lkIEFEQzE2X0dldERlZmF1bHRDb25maWcoYWRjMTZfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoTlVMTCAhPSBjb25maWcpOworCisgICAgY29uZmlnLT5yZWZlcmVuY2VWb2x0YWdlU291cmNlID0ga0FEQzE2X1JlZmVyZW5jZVZvbHRhZ2VTb3VyY2VWcmVmOworICAgIGNvbmZpZy0+Y2xvY2tTb3VyY2UgPSBrQURDMTZfQ2xvY2tTb3VyY2VBc3luY2hyb25vdXNDbG9jazsKKyAgICBjb25maWctPmVuYWJsZUFzeW5jaHJvbm91c0Nsb2NrID0gdHJ1ZTsKKyAgICBjb25maWctPmNsb2NrRGl2aWRlciA9IGtBREMxNl9DbG9ja0RpdmlkZXI4OworICAgIGNvbmZpZy0+cmVzb2x1dGlvbiA9IGtBREMxNl9SZXNvbHV0aW9uU0UxMkJpdDsKKyAgICBjb25maWctPmxvbmdTYW1wbGVNb2RlID0ga0FEQzE2X0xvbmdTYW1wbGVEaXNhYmxlZDsKKyAgICBjb25maWctPmVuYWJsZUhpZ2hTcGVlZCA9IGZhbHNlOworICAgIGNvbmZpZy0+ZW5hYmxlTG93UG93ZXIgPSBmYWxzZTsKKyAgICBjb25maWctPmVuYWJsZUNvbnRpbnVvdXNDb252ZXJzaW9uID0gZmFsc2U7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19DQUxJQlJBVElPTikgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0NBTElCUkFUSU9OCitzdGF0dXNfdCBBREMxNl9Eb0F1dG9DYWxpYnJhdGlvbihBRENfVHlwZSAqYmFzZSkKK3sKKyAgICBib29sIGJIV1RyaWdnZXIgPSBmYWxzZTsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCB0bXAzMjsgLyogJ3ZvbGF0aWxlJyBoZXJlIGlzIGZvciB0aGUgZHVtbXkgcmVhZCBvZiBBREN4X1JbMF0gcmVnaXN0ZXIuICovCisgICAgc3RhdHVzX3Qgc3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworCisgICAgLyogVGhlIGNhbGlicmF0aW9uIHdvdWxkIGJlIGZhaWxlZCB3aGVuIGluIGhhcmR3YXIgbW9kZS4KKyAgICAgKiBSZW1lbWJlciB0aGUgaGFyZHdhcmUgdHJpZ2dlciBzdGF0ZSBoZXJlIGFuZCByZXN0b3JlIGl0IGxhdGVyIGlmIHRoZSBoYXJkd2FyZSB0cmlnZ2VyIGlzIGVuYWJsZWQuKi8KKyAgICBpZiAoMFUgIT0gKEFEQ19TQzJfQURUUkdfTUFTSyAmIGJhc2UtPlNDMikpCisgICAgeworICAgICAgICBiSFdUcmlnZ2VyID0gdHJ1ZTsKKyAgICAgICAgYmFzZS0+U0MyICY9IH5BRENfU0MyX0FEVFJHX01BU0s7CisgICAgfQorCisgICAgLyogQ2xlYXIgdGhlIENBTEYgYW5kIGxhdW5jaCB0aGUgY2FsaWJyYXRpb24uICovCisgICAgYmFzZS0+U0MzIHw9IEFEQ19TQzNfQ0FMX01BU0sgfCBBRENfU0MzX0NBTEZfTUFTSzsKKyAgICB3aGlsZSAoMFUgPT0gKGtBREMxNl9DaGFubmVsQ29udmVyc2lvbkRvbmVGbGFnICYgQURDMTZfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKGJhc2UsIDBVKSkpCisgICAgeworICAgICAgICAvKiBDaGVjayB0aGUgQ0FMRiB3aGVuIHRoZSBjYWxpYnJhdGlvbiBpcyBhY3RpdmUuICovCisgICAgICAgIGlmICgwVSAhPSAoa0FEQzE2X0NhbGlicmF0aW9uRmFpbGVkRmxhZyAmIEFEQzE2X0dldFN0YXR1c0ZsYWdzKGJhc2UpKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0ga1N0YXR1c19GYWlsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgdG1wMzIgPSBiYXNlLT5SWzBdOyAvKiBEdW1teSByZWFkIHRvIGNsZWFyIENPQ08gY2F1c2VkIGJ5IGNhbGlicmF0aW9uLiAqLworCisgICAgLyogUmVzdG9yZSB0aGUgaGFyZHdhcmUgdHJpZ2dlciBzZXR0aW5nIGlmIGl0IHdhcyBlbmFibGVkIGJlZm9yZS4gKi8KKyAgICBpZiAoYkhXVHJpZ2dlcikKKyAgICB7CisgICAgICAgIGJhc2UtPlNDMiB8PSBBRENfU0MyX0FEVFJHX01BU0s7CisgICAgfQorICAgIC8qIENoZWNrIHRoZSBDQUxGIGF0IHRoZSBlbmQgb2YgY2FsaWJyYXRpb24uICovCisgICAgaWYgKDBVICE9IChrQURDMTZfQ2FsaWJyYXRpb25GYWlsZWRGbGFnICYgQURDMTZfR2V0U3RhdHVzRmxhZ3MoYmFzZSkpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19GYWlsOworICAgIH0KKyAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHN0YXR1cykgLyogQ2hlY2sgaWYgdGhlIGNhbGlicmF0aW9uIHByb2Nlc3MgaXMgc3VjY2VlZC4gKi8KKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogQ2FsY3VsYXRlIHRoZSBjYWxpYnJhdGlvbiB2YWx1ZXMuICovCisgICAgdG1wMzIgPSBiYXNlLT5DTFAwICsgYmFzZS0+Q0xQMSArIGJhc2UtPkNMUDIgKyBiYXNlLT5DTFAzICsgYmFzZS0+Q0xQNCArIGJhc2UtPkNMUFM7CisgICAgdG1wMzIgPSAweDgwMDBVIHwgKHRtcDMyID4+IDFVKTsKKyAgICBiYXNlLT5QRyA9IHRtcDMyOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFCisgICAgdG1wMzIgPSBiYXNlLT5DTE0wICsgYmFzZS0+Q0xNMSArIGJhc2UtPkNMTTIgKyBiYXNlLT5DTE0zICsgYmFzZS0+Q0xNNCArIGJhc2UtPkNMTVM7CisgICAgdG1wMzIgPSAweDgwMDBVIHwgKHRtcDMyID4+IDFVKTsKKyAgICBiYXNlLT5NRyA9IHRtcDMyOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUgKi8KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0NBTElCUkFUSU9OICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19NVVhfU0VMRUNUKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfTVVYX1NFTEVDVAordm9pZCBBREMxNl9TZXRDaGFubmVsTXV4TW9kZShBRENfVHlwZSAqYmFzZSwgYWRjMTZfY2hhbm5lbF9tdXhfbW9kZV90IG1vZGUpCit7CisgICAgaWYgKGtBREMxNl9DaGFubmVsTXV4QSA9PSBtb2RlKQorICAgIHsKKyAgICAgICAgYmFzZS0+Q0ZHMiAmPSB+QURDX0NGRzJfTVVYU0VMX01BU0s7CisgICAgfQorICAgIGVsc2UgLyoga0FEQzE2X0NoYW5uZWxNdXhCLiAqLworICAgIHsKKyAgICAgICAgYmFzZS0+Q0ZHMiB8PSBBRENfQ0ZHMl9NVVhTRUxfTUFTSzsKKyAgICB9Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX01VWF9TRUxFQ1QgKi8KKwordm9pZCBBREMxNl9TZXRIYXJkd2FyZUNvbXBhcmVDb25maWcoQURDX1R5cGUgKmJhc2UsIGNvbnN0IGFkYzE2X2hhcmR3YXJlX2NvbXBhcmVfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICB1aW50MzJfdCB0bXAzMiA9IGJhc2UtPlNDMiAmIH4oQURDX1NDMl9BQ0ZFX01BU0sgfCBBRENfU0MyX0FDRkdUX01BU0sgfCBBRENfU0MyX0FDUkVOX01BU0spOworCisgICAgaWYgKCFjb25maWcpIC8qIFBhc3MgIk5VTEwiIHRvIGRpc2FibGUgdGhlIGZlYXR1cmUuICovCisgICAgeworICAgICAgICBiYXNlLT5TQzIgPSB0bXAzMjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvKiBFbmFibGUgdGhlIGZlYXR1cmUuICovCisgICAgdG1wMzIgfD0gQURDX1NDMl9BQ0ZFX01BU0s7CisKKyAgICAvKiBTZWxlY3QgdGhlIGhhcmR3YXJlIGNvbXBhcmUgd29ya2luZyBtb2RlLiAqLworICAgIHN3aXRjaCAoY29uZmlnLT5oYXJkd2FyZUNvbXBhcmVNb2RlKQorICAgIHsKKyAgICAgICAgY2FzZSBrQURDMTZfSGFyZHdhcmVDb21wYXJlTW9kZTA6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQURDMTZfSGFyZHdhcmVDb21wYXJlTW9kZTE6CisgICAgICAgICAgICB0bXAzMiB8PSBBRENfU0MyX0FDRkdUX01BU0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQURDMTZfSGFyZHdhcmVDb21wYXJlTW9kZTI6CisgICAgICAgICAgICB0bXAzMiB8PSBBRENfU0MyX0FDUkVOX01BU0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQURDMTZfSGFyZHdhcmVDb21wYXJlTW9kZTM6CisgICAgICAgICAgICB0bXAzMiB8PSBBRENfU0MyX0FDRkdUX01BU0sgfCBBRENfU0MyX0FDUkVOX01BU0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBiYXNlLT5TQzIgPSB0bXAzMjsKKworICAgIC8qIExvYWQgdGhlIGNvbXBhcmUgdmFsdWVzLiAqLworICAgIGJhc2UtPkNWMSA9IEFEQ19DVjFfQ1YoY29uZmlnLT52YWx1ZTEpOworICAgIGJhc2UtPkNWMiA9IEFEQ19DVjJfQ1YoY29uZmlnLT52YWx1ZTIpOworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfSFdfQVZFUkFHRSkgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0hXX0FWRVJBR0UKK3ZvaWQgQURDMTZfU2V0SGFyZHdhcmVBdmVyYWdlKEFEQ19UeXBlICpiYXNlLCBhZGMxNl9oYXJkd2FyZV9hdmVyYWdlX21vZGVfdCBtb2RlKQoreworICAgIHVpbnQzMl90IHRtcDMyID0gYmFzZS0+U0MzICYgfihBRENfU0MzX0FWR0VfTUFTSyB8IEFEQ19TQzNfQVZHU19NQVNLKTsKKworICAgIGlmIChrQURDMTZfSGFyZHdhcmVBdmVyYWdlRGlzYWJsZWQgIT0gbW9kZSkKKyAgICB7CisgICAgICAgIHRtcDMyIHw9IEFEQ19TQzNfQVZHRV9NQVNLIHwgQURDX1NDM19BVkdTKG1vZGUpOworICAgIH0KKyAgICBiYXNlLT5TQzMgPSB0bXAzMjsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfSFdfQVZFUkFHRSAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBCit2b2lkIEFEQzE2X1NldFBHQUNvbmZpZyhBRENfVHlwZSAqYmFzZSwgY29uc3QgYWRjMTZfcGdhX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgdWludDMyX3QgdG1wMzI7CisKKyAgICBpZiAoIWNvbmZpZykgLyogUGFzc2luZyAiTlVMTCIgaXMgdG8gZGlzYWJsZSB0aGUgZmVhdHVyZS4gKi8KKyAgICB7CisgICAgICAgIGJhc2UtPlBHQSA9IDBVOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogRW5hYmxlIHRoZSBQR0EgYW5kIHNldCB0aGUgZ2FpbiB2YWx1ZS4gKi8KKyAgICB0bXAzMiA9IEFEQ19QR0FfUEdBRU5fTUFTSyB8IEFEQ19QR0FfUEdBRyhjb25maWctPnBnYUdhaW4pOworCisgICAgLyogQ29uZmlndXJlIHRoZSBtaXNjIGZlYXR1cmVzIGZvciBQR0EuICovCisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlUnVuSW5Ob3JtYWxNb2RlKQorICAgIHsKKyAgICAgICAgdG1wMzIgfD0gQURDX1BHQV9QR0FMUGJfTUFTSzsKKyAgICB9CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBX0NIT1BQSU5HKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBX0NIT1BQSU5HCisgICAgaWYgKGNvbmZpZy0+ZGlzYWJsZVBnYUNob3BwaW5nKQorICAgIHsKKyAgICAgICAgdG1wMzIgfD0gQURDX1BHQV9QR0FDSFBiX01BU0s7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0FfQ0hPUFBJTkcgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0FfT0ZGU0VUX01FQVNVUkVNRU5UKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBX09GRlNFVF9NRUFTVVJFTUVOVAorICAgIGlmIChjb25maWctPmVuYWJsZVJ1bkluT2Zmc2V0TWVhc3VyZW1lbnQpCisgICAgeworICAgICAgICB0bXAzMiB8PSBBRENfUEdBX1BHQU9GU01fTUFTSzsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQV9PRkZTRVRfTUVBU1VSRU1FTlQgKi8KKyAgICBiYXNlLT5QR0EgPSB0bXAzMjsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBICovCisKK3VpbnQzMl90IEFEQzE2X0dldFN0YXR1c0ZsYWdzKEFEQ19UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IHJldCA9IDA7CisKKyAgICBpZiAoMFUgIT0gKGJhc2UtPlNDMiAmIEFEQ19TQzJfQURBQ1RfTUFTSykpCisgICAgeworICAgICAgICByZXQgfD0ga0FEQzE2X0FjdGl2ZUZsYWc7CisgICAgfQorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0NBTElCUkFUSU9OKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04KKyAgICBpZiAoMFUgIT0gKGJhc2UtPlNDMyAmIEFEQ19TQzNfQ0FMRl9NQVNLKSkKKyAgICB7CisgICAgICAgIHJldCB8PSBrQURDMTZfQ2FsaWJyYXRpb25GYWlsZWRGbGFnOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04gKi8KKyAgICByZXR1cm4gcmV0OworfQorCit2b2lkIEFEQzE2X0NsZWFyU3RhdHVzRmxhZ3MoQURDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04pICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19DQUxJQlJBVElPTgorICAgIGlmICgwVSAhPSAobWFzayAmIGtBREMxNl9DYWxpYnJhdGlvbkZhaWxlZEZsYWcpKQorICAgIHsKKyAgICAgICAgYmFzZS0+U0MzIHw9IEFEQ19TQzNfQ0FMRl9NQVNLOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04gKi8KK30KKwordm9pZCBBREMxNl9TZXRDaGFubmVsQ29uZmlnKEFEQ19UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsR3JvdXAsIGNvbnN0IGFkYzE2X2NoYW5uZWxfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY2hhbm5lbEdyb3VwIDwgQURDX1NDMV9DT1VOVCk7CisgICAgYXNzZXJ0KE5VTEwgIT0gY29uZmlnKTsKKworICAgIHVpbnQzMl90IHNjMSA9IEFEQ19TQzFfQURDSChjb25maWctPmNoYW5uZWxOdW1iZXIpOyAvKiBTZXQgdGhlIGNoYW5uZWwgbnVtYmVyLiAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFCisgICAgLyogRW5hYmxlIHRoZSBkaWZmZXJlbnRpYWwgY29udmVyc2lvbi4gKi8KKyAgICBpZiAoY29uZmlnLT5lbmFibGVEaWZmZXJlbnRpYWxDb252ZXJzaW9uKQorICAgIHsKKyAgICAgICAgc2MxIHw9IEFEQ19TQzFfRElGRl9NQVNLOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFICovCisgICAgLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgd2hlbiB0aGUgY29udmVyc2lvbiBpcyBkb25lLiAqLworICAgIGlmIChjb25maWctPmVuYWJsZUludGVycnVwdE9uQ29udmVyc2lvbkNvbXBsZXRlZCkKKyAgICB7CisgICAgICAgIHNjMSB8PSBBRENfU0MxX0FJRU5fTUFTSzsKKyAgICB9CisgICAgYmFzZS0+U0MxW2NoYW5uZWxHcm91cF0gPSBzYzE7Cit9CisKK3VpbnQzMl90IEFEQzE2X0dldENoYW5uZWxTdGF0dXNGbGFncyhBRENfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbEdyb3VwKQoreworICAgIGFzc2VydChjaGFubmVsR3JvdXAgPCBBRENfU0MxX0NPVU5UKTsKKworICAgIHVpbnQzMl90IHJldCA9IDBVOworCisgICAgaWYgKDBVICE9IChiYXNlLT5TQzFbY2hhbm5lbEdyb3VwXSAmIEFEQ19TQzFfQ09DT19NQVNLKSkKKyAgICB7CisgICAgICAgIHJldCB8PSBrQURDMTZfQ2hhbm5lbENvbnZlcnNpb25Eb25lRmxhZzsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2FkYzE2LmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9hZGMxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjJjNTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9hZGMxNi5oCkBAIC0wLDAgKzEsNTI1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlNMX0FEQzE2X0hfCisjZGVmaW5lIF9GU0xfQURDMTZfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBhZGMxNgorICogQHsKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgQURDMTYgZHJpdmVyIHZlcnNpb24gMi4wLjAuICovCisjZGVmaW5lIEZTTF9BREMxNl9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDApKQorLypAfSovCisKKy8qIQorICogQGJyaWVmIENoYW5uZWwgc3RhdHVzIGZsYWdzLgorICovCitlbnVtIF9hZGMxNl9jaGFubmVsX3N0YXR1c19mbGFncworeworICAgIGtBREMxNl9DaGFubmVsQ29udmVyc2lvbkRvbmVGbGFnID0gQURDX1NDMV9DT0NPX01BU0ssIC8qITwgQ29udmVyc2lvbiBkb25lLiAqLworfTsKKworLyohCisgKiBAYnJpZWYgQ29udmVydGVyIHN0YXR1cyBmbGFncy4KKyAqLworZW51bSBfYWRjMTZfc3RhdHVzX2ZsYWdzCit7CisgICAga0FEQzE2X0FjdGl2ZUZsYWcgPSBBRENfU0MyX0FEQUNUX01BU0ssIC8qITwgQ29udmVydGVyIGlzIGFjdGl2ZS4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19DQUxJQlJBVElPTikgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0NBTElCUkFUSU9OCisgICAga0FEQzE2X0NhbGlicmF0aW9uRmFpbGVkRmxhZyA9IEFEQ19TQzNfQ0FMRl9NQVNLLCAvKiE8IENhbGlicmF0aW9uIGlzIGZhaWxlZC4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19DQUxJQlJBVElPTiAqLworfTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX01VWF9TRUxFQ1QpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19NVVhfU0VMRUNUCisvKiEKKyAqIEBicmllZiBDaGFubmVsIG11bHRpcGxleGVyIG1vZGUgZm9yIGVhY2ggY2hhbm5lbC4KKyAqCisgKiBGb3Igc29tZSBBREMxNiBjaGFubmVscywgdGhlcmUgYXJlIHR3byBwaW4gc2VsZWN0aW9ucyBpbiBjaGFubmVsIG11bHRpcGxleGVyLiBGb3IgZXhhbXBsZSwgQURDMF9TRTRhIGFuZCBBREMwX1NFNGIKKyAqIGFyZSB0aGUgZGlmZmVyZW50IGNoYW5uZWxzIHRoYXQgc2hhcmUgdGhlIHNhbWUgY2hhbm5lbCBudW1iZXIuCisgKi8KK3R5cGVkZWYgZW51bSBfYWRjX2NoYW5uZWxfbXV4X21vZGUKK3sKKyAgICBrQURDMTZfQ2hhbm5lbE11eEEgPSAwVSwgLyohPCBGb3IgY2hhbm5lbCB3aXRoIGNoYW5uZWwgbXV4IGEuICovCisgICAga0FEQzE2X0NoYW5uZWxNdXhCID0gMVUsIC8qITwgRm9yIGNoYW5uZWwgd2l0aCBjaGFubmVsIG11eCBiLiAqLworfSBhZGMxNl9jaGFubmVsX211eF9tb2RlX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX01VWF9TRUxFQ1QgKi8KKworLyohCisgKiBAYnJpZWYgQ2xvY2sgZGl2aWRlciBmb3IgdGhlIGNvbnZlcnRlci4KKyAqLwordHlwZWRlZiBlbnVtIF9hZGMxNl9jbG9ja19kaXZpZGVyCit7CisgICAga0FEQzE2X0Nsb2NrRGl2aWRlcjEgPSAwVSwgLyohPCBGb3IgZGl2aWRlciAxIGZyb20gdGhlIGlucHV0IGNsb2NrIHRvIHRoZSBtb2R1bGUuICovCisgICAga0FEQzE2X0Nsb2NrRGl2aWRlcjIgPSAxVSwgLyohPCBGb3IgZGl2aWRlciAyIGZyb20gdGhlIGlucHV0IGNsb2NrIHRvIHRoZSBtb2R1bGUuICovCisgICAga0FEQzE2X0Nsb2NrRGl2aWRlcjQgPSAyVSwgLyohPCBGb3IgZGl2aWRlciA0IGZyb20gdGhlIGlucHV0IGNsb2NrIHRvIHRoZSBtb2R1bGUuICovCisgICAga0FEQzE2X0Nsb2NrRGl2aWRlcjggPSAzVSwgLyohPCBGb3IgZGl2aWRlciA4IGZyb20gdGhlIGlucHV0IGNsb2NrIHRvIHRoZSBtb2R1bGUuICovCit9IGFkYzE2X2Nsb2NrX2RpdmlkZXJfdDsKKworLyohCisgKkBicmllZiBDb252ZXJ0ZXIncyByZXNvbHV0aW9uLgorICovCit0eXBlZGVmIGVudW0gX2FkYzE2X3Jlc29sdXRpb24KK3sKKyAgICAvKiBUaGlzIGdyb3VwIG9mIGVudW1lcmF0aW9uIGlzIGZvciBpbnRlcm5hbCB1c2Ugd2hpY2ggaXMgcmVsYXRlZCB0byByZWdpc3RlciBzZXR0aW5nLiAqLworICAgIGtBREMxNl9SZXNvbHV0aW9uOG9yOUJpdCA9IDBVLCAgIC8qITwgU2luZ2xlIEVuZCA4LWJpdCBvciBEaWZmZXJlbnRpYWwgU2FtcGxlIDktYml0LiAqLworICAgIGtBREMxNl9SZXNvbHV0aW9uMTJvcjEzQml0ID0gMVUsIC8qITwgU2luZ2xlIEVuZCAxMi1iaXQgb3IgRGlmZmVyZW50aWFsIFNhbXBsZSAxMy1iaXQuICovCisgICAga0FEQzE2X1Jlc29sdXRpb24xMG9yMTFCaXQgPSAyVSwgLyohPCBTaW5nbGUgRW5kIDEwLWJpdCBvciBEaWZmZXJlbnRpYWwgU2FtcGxlIDExLWJpdC4gKi8KKworICAgIC8qIFRoaXMgZ3JvdXAgb2YgZW51bWVyYXRpb24gaXMgZm9yIGEgcHVibGljIHVzZXIuICovCisgICAga0FEQzE2X1Jlc29sdXRpb25TRThCaXQgPSBrQURDMTZfUmVzb2x1dGlvbjhvcjlCaXQsICAgIC8qITwgU2luZ2xlIEVuZCA4LWJpdC4gKi8KKyAgICBrQURDMTZfUmVzb2x1dGlvblNFMTJCaXQgPSBrQURDMTZfUmVzb2x1dGlvbjEyb3IxM0JpdCwgLyohPCBTaW5nbGUgRW5kIDEyLWJpdC4gKi8KKyAgICBrQURDMTZfUmVzb2x1dGlvblNFMTBCaXQgPSBrQURDMTZfUmVzb2x1dGlvbjEwb3IxMUJpdCwgLyohPCBTaW5nbGUgRW5kIDEwLWJpdC4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUKKyAgICBrQURDMTZfUmVzb2x1dGlvbkRGOUJpdCA9IGtBREMxNl9SZXNvbHV0aW9uOG9yOUJpdCwgICAgLyohPCBEaWZmZXJlbnRpYWwgU2FtcGxlIDktYml0LiAqLworICAgIGtBREMxNl9SZXNvbHV0aW9uREYxM0JpdCA9IGtBREMxNl9SZXNvbHV0aW9uMTJvcjEzQml0LCAvKiE8IERpZmZlcmVudGlhbCBTYW1wbGUgMTMtYml0LiAqLworICAgIGtBREMxNl9SZXNvbHV0aW9uREYxMUJpdCA9IGtBREMxNl9SZXNvbHV0aW9uMTBvcjExQml0LCAvKiE8IERpZmZlcmVudGlhbCBTYW1wbGUgMTEtYml0LiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X01BWF9SRVNPTFVUSU9OKSAmJiAoRlNMX0ZFQVRVUkVfQURDMTZfTUFYX1JFU09MVVRJT04gPj0gMTZVKQorICAgIC8qIDE2LWJpdCBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdC4gKi8KKyAgICBrQURDMTZfUmVzb2x1dGlvbjE2Qml0ID0gM1UsICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNpbmdsZSBFbmQgMTYtYml0IG9yIERpZmZlcmVudGlhbCBTYW1wbGUgMTYtYml0LiAqLworICAgIGtBREMxNl9SZXNvbHV0aW9uU0UxNkJpdCA9IGtBREMxNl9SZXNvbHV0aW9uMTZCaXQsIC8qITwgU2luZ2xlIEVuZCAxNi1iaXQuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFCisgICAga0FEQzE2X1Jlc29sdXRpb25ERjE2Qml0ID0ga0FEQzE2X1Jlc29sdXRpb24xNkJpdCwgLyohPCBEaWZmZXJlbnRpYWwgU2FtcGxlIDE2LWJpdC4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfQURDMTZfTUFYX1JFU09MVVRJT04gPj0gMTZVICovCit9IGFkYzE2X3Jlc29sdXRpb25fdDsKKworLyohCisgKiBAYnJpZWYgQ2xvY2sgc291cmNlLgorICovCit0eXBlZGVmIGVudW0gX2FkYzE2X2Nsb2NrX3NvdXJjZQoreworICAgIGtBREMxNl9DbG9ja1NvdXJjZUFsdDAgPSAwVSwgLyohPCBTZWxlY3Rpb24gMCBvZiB0aGUgY2xvY2sgc291cmNlLiAqLworICAgIGtBREMxNl9DbG9ja1NvdXJjZUFsdDEgPSAxVSwgLyohPCBTZWxlY3Rpb24gMSBvZiB0aGUgY2xvY2sgc291cmNlLiAqLworICAgIGtBREMxNl9DbG9ja1NvdXJjZUFsdDIgPSAyVSwgLyohPCBTZWxlY3Rpb24gMiBvZiB0aGUgY2xvY2sgc291cmNlLiAqLworICAgIGtBREMxNl9DbG9ja1NvdXJjZUFsdDMgPSAzVSwgLyohPCBTZWxlY3Rpb24gMyBvZiB0aGUgY2xvY2sgc291cmNlLiAqLworCisgICAgLyogQ2hpcCBkZWZpbmVkIGNsb2NrIHNvdXJjZSAqLworICAgIGtBREMxNl9DbG9ja1NvdXJjZUFzeW5jaHJvbm91c0Nsb2NrID0ga0FEQzE2X0Nsb2NrU291cmNlQWx0MywgLyohPCBVc2luZyBpbnRlcm5hbCBhc3luY2hyb25vdXMgY2xvY2suICovCit9IGFkYzE2X2Nsb2NrX3NvdXJjZV90OworCisvKiEKKyAqIEBicmllZiBMb25nIHNhbXBsZSBtb2RlLgorICovCit0eXBlZGVmIGVudW0gX2FkYzE2X2xvbmdfc2FtcGxlX21vZGUKK3sKKyAgICBrQURDMTZfTG9uZ1NhbXBsZUN5Y2xlMjQgPSAwVSwgIC8qITwgMjAgZXh0cmEgQURDSyBjeWNsZXMsIDI0IEFEQ0sgY3ljbGVzIHRvdGFsLiAqLworICAgIGtBREMxNl9Mb25nU2FtcGxlQ3ljbGUxNiA9IDFVLCAgLyohPCAxMiBleHRyYSBBRENLIGN5Y2xlcywgMTYgQURDSyBjeWNsZXMgdG90YWwuICovCisgICAga0FEQzE2X0xvbmdTYW1wbGVDeWNsZTEwID0gMlUsICAvKiE8IDYgZXh0cmEgQURDSyBjeWNsZXMsIDEwIEFEQ0sgY3ljbGVzIHRvdGFsLiAqLworICAgIGtBREMxNl9Mb25nU2FtcGxlQ3ljbGU2ID0gM1UsICAgLyohPCAyIGV4dHJhIEFEQ0sgY3ljbGVzLCA2IEFEQ0sgY3ljbGVzIHRvdGFsLiAqLworICAgIGtBREMxNl9Mb25nU2FtcGxlRGlzYWJsZWQgPSA0VSwgLyohPCBEaXNhYmxlIHRoZSBsb25nIHNhbXBsZSBmZWF0dXJlLiAqLworfSBhZGMxNl9sb25nX3NhbXBsZV9tb2RlX3Q7CisKKy8qIQorICogQGJyaWVmIFJlZmVyZW5jZSB2b2x0YWdlIHNvdXJjZS4KKyAqLwordHlwZWRlZiBlbnVtIF9hZGMxNl9yZWZlcmVuY2Vfdm9sdGFnZV9zb3VyY2UKK3sKKyAgICBrQURDMTZfUmVmZXJlbmNlVm9sdGFnZVNvdXJjZVZyZWYgPSAwVSwgLyohPCBGb3IgZXh0ZXJuYWwgcGlucyBwYWlyIG9mIFZyZWZIIGFuZCBWcmVmTC4gKi8KKyAgICBrQURDMTZfUmVmZXJlbmNlVm9sdGFnZVNvdXJjZVZhbHQgPSAxVSwgLyohPCBGb3IgYWx0ZXJuYXRlIHJlZmVyZW5jZSBwYWlyIG9mIFZhbHRIIGFuZCBWYWx0TC4gKi8KK30gYWRjMTZfcmVmZXJlbmNlX3ZvbHRhZ2Vfc291cmNlX3Q7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19IV19BVkVSQUdFKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfSFdfQVZFUkFHRQorLyohCisgKiBAYnJpZWYgSGFyZHdhcmUgYXZlcmFnZSBtb2RlLgorICovCit0eXBlZGVmIGVudW0gX2FkYzE2X2hhcmR3YXJlX2F2ZXJhZ2VfbW9kZQoreworICAgIGtBREMxNl9IYXJkd2FyZUF2ZXJhZ2VDb3VudDQgPSAwVSwgICAvKiE8IEZvciBoYXJkd2FyZSBhdmVyYWdlIHdpdGggNCBzYW1wbGVzLiAqLworICAgIGtBREMxNl9IYXJkd2FyZUF2ZXJhZ2VDb3VudDggPSAxVSwgICAvKiE8IEZvciBoYXJkd2FyZSBhdmVyYWdlIHdpdGggOCBzYW1wbGVzLiAqLworICAgIGtBREMxNl9IYXJkd2FyZUF2ZXJhZ2VDb3VudDE2ID0gMlUsICAvKiE8IEZvciBoYXJkd2FyZSBhdmVyYWdlIHdpdGggMTYgc2FtcGxlcy4gKi8KKyAgICBrQURDMTZfSGFyZHdhcmVBdmVyYWdlQ291bnQzMiA9IDNVLCAgLyohPCBGb3IgaGFyZHdhcmUgYXZlcmFnZSB3aXRoIDMyIHNhbXBsZXMuICovCisgICAga0FEQzE2X0hhcmR3YXJlQXZlcmFnZURpc2FibGVkID0gNFUsIC8qITwgRGlzYWJsZSB0aGUgaGFyZHdhcmUgYXZlcmFnZSBmZWF0dXJlLiovCit9IGFkYzE2X2hhcmR3YXJlX2F2ZXJhZ2VfbW9kZV90OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19IV19BVkVSQUdFICovCisKKy8qIQorICogQGJyaWVmIEhhcmR3YXJlIGNvbXBhcmUgbW9kZS4KKyAqLwordHlwZWRlZiBlbnVtIF9hZGMxNl9oYXJkd2FyZV9jb21wYXJlX21vZGUKK3sKKyAgICBrQURDMTZfSGFyZHdhcmVDb21wYXJlTW9kZTAgPSAwVSwgLyohPCB4IDwgdmFsdWUxLiAqLworICAgIGtBREMxNl9IYXJkd2FyZUNvbXBhcmVNb2RlMSA9IDFVLCAvKiE8IHggPiB2YWx1ZTEuICovCisgICAga0FEQzE2X0hhcmR3YXJlQ29tcGFyZU1vZGUyID0gMlUsIC8qITwgaWYgdmFsdWUxIDw9IHZhbHVlMiwgdGhlbiB4IDwgdmFsdWUxIHx8IHggPiB2YWx1ZTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSwgdmFsdWUxID4geCA+IHZhbHVlMi4gKi8KKyAgICBrQURDMTZfSGFyZHdhcmVDb21wYXJlTW9kZTMgPSAzVSwgLyohPCBpZiB2YWx1ZTEgPD0gdmFsdWUyLCB0aGVuIHZhbHVlMSA8PSB4IDw9IHZhbHVlMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHggPj0gdmFsdWUxIHx8IHggPD0gdmFsdWUyLiAqLworfSBhZGMxNl9oYXJkd2FyZV9jb21wYXJlX21vZGVfdDsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQSkgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQQorLyohCisgKiBAYnJpZWYgUEdBJ3MgR2FpbiBtb2RlLgorICovCit0eXBlZGVmIGVudW0gX2FkYzE2X3BnYV9nYWluCit7CisgICAga0FEQzE2X1BHQUdhaW5WYWx1ZU9mMSA9IDBVLCAgLyohPCBGb3IgYW1wbGlmaWVyIGdhaW4gb2YgMS4gICovCisgICAga0FEQzE2X1BHQUdhaW5WYWx1ZU9mMiA9IDFVLCAgLyohPCBGb3IgYW1wbGlmaWVyIGdhaW4gb2YgMi4gICovCisgICAga0FEQzE2X1BHQUdhaW5WYWx1ZU9mNCA9IDJVLCAgLyohPCBGb3IgYW1wbGlmaWVyIGdhaW4gb2YgNC4gICovCisgICAga0FEQzE2X1BHQUdhaW5WYWx1ZU9mOCA9IDNVLCAgLyohPCBGb3IgYW1wbGlmaWVyIGdhaW4gb2YgOC4gICovCisgICAga0FEQzE2X1BHQUdhaW5WYWx1ZU9mMTYgPSA0VSwgLyohPCBGb3IgYW1wbGlmaWVyIGdhaW4gb2YgMTYuICovCisgICAga0FEQzE2X1BHQUdhaW5WYWx1ZU9mMzIgPSA1VSwgLyohPCBGb3IgYW1wbGlmaWVyIGdhaW4gb2YgMzIuICovCisgICAga0FEQzE2X1BHQUdhaW5WYWx1ZU9mNjQgPSA2VSwgLyohPCBGb3IgYW1wbGlmaWVyIGdhaW4gb2YgNjQuICovCit9IGFkYzE2X3BnYV9nYWluX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQSAqLworCisvKiEKKyAqIEBicmllZiBBREMxNiBjb252ZXJ0ZXIgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2FkYzE2X2NvbmZpZworeworICAgIGFkYzE2X3JlZmVyZW5jZV92b2x0YWdlX3NvdXJjZV90IHJlZmVyZW5jZVZvbHRhZ2VTb3VyY2U7IC8qITwgU2VsZWN0IHRoZSByZWZlcmVuY2Ugdm9sdGFnZSBzb3VyY2UuICovCisgICAgYWRjMTZfY2xvY2tfc291cmNlX3QgY2xvY2tTb3VyY2U7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3QgdGhlIGlucHV0IGNsb2NrIHNvdXJjZSB0byBjb252ZXJ0ZXIuICovCisgICAgYm9vbCBlbmFibGVBc3luY2hyb25vdXNDbG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgdGhlIGFzeW5jaHJvbm91cyBjbG9jayBvdXRwdXQuICovCisgICAgYWRjMTZfY2xvY2tfZGl2aWRlcl90IGNsb2NrRGl2aWRlcjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3QgdGhlIGRpdmlkZXIgb2YgaW5wdXQgY2xvY2sgc291cmNlLiAqLworICAgIGFkYzE2X3Jlc29sdXRpb25fdCByZXNvbHV0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VsZWN0IHRoZSBzYW1wbGUgcmVzb2x1dGlvbiBtb2RlLiAqLworICAgIGFkYzE2X2xvbmdfc2FtcGxlX21vZGVfdCBsb25nU2FtcGxlTW9kZTsgICAgICAgICAgICAgICAgIC8qITwgU2VsZWN0IHRoZSBsb25nIHNhbXBsZSBtb2RlLiAqLworICAgIGJvb2wgZW5hYmxlSGlnaFNwZWVkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIHRoZSBoaWdoLXNwZWVkIG1vZGUuICovCisgICAgYm9vbCBlbmFibGVMb3dQb3dlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgbG93IHBvd2VyLiAqLworICAgIGJvb2wgZW5hYmxlQ29udGludW91c0NvbnZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGNvbnRpbnVvdXMgY29udmVyc2lvbiBtb2RlLiAqLworfSBhZGMxNl9jb25maWdfdDsKKworLyohCisgKiBAYnJpZWYgQURDMTYgSGFyZHdhcmUgY29tcGFyaXNvbiBjb25maWd1cmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfYWRjMTZfaGFyZHdhcmVfY29tcGFyZV9jb25maWcKK3sKKyAgICBhZGMxNl9oYXJkd2FyZV9jb21wYXJlX21vZGVfdCBoYXJkd2FyZUNvbXBhcmVNb2RlOyAvKiE8IFNlbGVjdCB0aGUgaGFyZHdhcmUgY29tcGFyZSBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlICJhZGMxNl9oYXJkd2FyZV9jb21wYXJlX21vZGVfdCIuICovCisgICAgaW50MTZfdCB2YWx1ZTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZXR0aW5nIHZhbHVlMSBmb3IgaGFyZHdhcmUgY29tcGFyZSBtb2RlLiAqLworICAgIGludDE2X3QgdmFsdWUyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0dGluZyB2YWx1ZTIgZm9yIGhhcmR3YXJlIGNvbXBhcmUgbW9kZS4gKi8KK30gYWRjMTZfaGFyZHdhcmVfY29tcGFyZV9jb25maWdfdDsKKworLyohCisgKiBAYnJpZWYgQURDMTYgY2hhbm5lbCBjb252ZXJzaW9uIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9hZGMxNl9jaGFubmVsX2NvbmZpZworeworICAgIHVpbnQzMl90IGNoYW5uZWxOdW1iZXI7ICAgICAgICAgICAgICAgICAgICAvKiE8IFNldHRpbmcgdGhlIGNvbnZlcnNpb24gY2hhbm5lbCBudW1iZXIuIFRoZSBhdmFpbGFibGUgcmFuZ2UgaXMgMC0zMS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgY2hhbm5lbCBjb25uZWN0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGNoaXAgaW4gUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsIGRvY3VtZW50LiAqLworICAgIGJvb2wgZW5hYmxlSW50ZXJydXB0T25Db252ZXJzaW9uQ29tcGxldGVkOyAvKiE8IEdlbmVyYXRlIGFuIGludGVycnVwdCByZXF1ZXN0IG9uY2UgdGhlIGNvbnZlcnNpb24gaXMgY29tcGxldGVkLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0RJRkZfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0RJRkZfTU9ERQorICAgIGJvb2wgZW5hYmxlRGlmZmVyZW50aWFsQ29udmVyc2lvbjsgLyohPCBVc2luZyBEaWZmZXJlbnRpYWwgc2FtcGxlIG1vZGUuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFICovCit9IGFkYzE2X2NoYW5uZWxfY29uZmlnX3Q7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0EpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0EKKy8qIQorICogQGJyaWVmIEFEQzE2IHByb2dyYW1tYWJsZSBnYWluIGFtcGxpZmllciBjb25maWd1cmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfYWRjMTZfcGdhX2NvbmZpZworeworICAgIGFkYzE2X3BnYV9nYWluX3QgcGdhR2FpbjsgICAvKiE8IFNldHRpbmcgUEdBIGdhaW4uICovCisgICAgYm9vbCBlbmFibGVSdW5Jbk5vcm1hbE1vZGU7IC8qITwgRW5hYmxlIFBHQSB3b3JraW5nIGluIG5vcm1hbCBtb2RlLCBvciBsb3cgcG93ZXIgbW9kZSBieSBkZWZhdWx0LiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQV9DSE9QUElORykgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQV9DSE9QUElORworICAgIGJvb2wgZGlzYWJsZVBnYUNob3BwaW5nOyAvKiE8IERpc2FibGUgdGhlIFBHQSBjaG9wcGluZyBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgUEdBIGVtcGxveXMgY2hvcHBpbmcgdG8gcmVtb3ZlL3JlZHVjZSBvZmZzZXQgYW5kIDEvZiBub2lzZSBhbmQgb2ZmZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gb2Zmc2V0IG1lYXN1cmVtZW50IGNvbmZpZ3VyYXRpb24gdGhhdCBhaWRzIHRoZSBvZmZzZXQgY2FsaWJyYXRpb24uICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0FfQ0hPUFBJTkcgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0FfT0ZGU0VUX01FQVNVUkVNRU5UKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBX09GRlNFVF9NRUFTVVJFTUVOVAorICAgIGJvb2wgZW5hYmxlUnVuSW5PZmZzZXRNZWFzdXJlbWVudDsgLyohPCBFbmFibGUgdGhlIFBHQSB3b3JraW5nIGluIG9mZnNldCBtZWFzdXJlbWVudCBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCB0aGUgUEdBIGRpc2Nvbm5lY3RzIGl0c2VsZiBmcm9tIHRoZSBleHRlcm5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHMgYW5kIGF1dG8tY29uZmlndXJlcyBpbnRvIG9mZnNldCBtZWFzdXJlbWVudCBtb2RlLiBXaXRoIHRoaXMgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCBydW4gdGhlIEFEQyBpbiB0aGUgcmVjb21tZW5kZWQgc2V0dGluZ3MgYW5kIGVuYWJsZSB0aGUgbWF4aW11bSBoYXJkd2FyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmVyYWdpbmcgdG8gZ2V0IHRoZSBQR0Egb2Zmc2V0IG51bWJlci4gVGhlIG91dHB1dCBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBHQSBvZmZzZXQgKiAoNjQrMSkpIGZvciB0aGUgZ2l2ZW4gUEdBIHNldHRpbmcuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBX09GRlNFVF9NRUFTVVJFTUVOVCAqLworfSBhZGMxNl9wZ2FfY29uZmlnX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQSAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQG5hbWUgSW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIEFEQzE2IG1vZHVsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBTZWUgImFkYzE2X2NvbmZpZ190Ii4KKyAqLwordm9pZCBBREMxNl9Jbml0KEFEQ19UeXBlICpiYXNlLCBjb25zdCBhZGMxNl9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgRGUtaW5pdGlhbGl6ZXMgdGhlIEFEQzE2IG1vZHVsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBBREMxNiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLwordm9pZCBBREMxNl9EZWluaXQoQURDX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBHZXRzIGFuIGF2YWlsYWJsZSBwcmUtZGVmaW5lZCBzZXR0aW5ncyBmb3IgdGhlIGNvbnZlcnRlcidzIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgY29udmVydGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHdpdGggYXZhaWxhYmxlIHNldHRpbmdzLiBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIGFzIGZvbGxvd3MuCisgKiBAY29kZQorICogICBjb25maWctPnJlZmVyZW5jZVZvbHRhZ2VTb3VyY2UgICAgID0ga0FEQzE2X1JlZmVyZW5jZVZvbHRhZ2VTb3VyY2VWcmVmOworICogICBjb25maWctPmNsb2NrU291cmNlICAgICAgICAgICAgICAgID0ga0FEQzE2X0Nsb2NrU291cmNlQXN5bmNocm9ub3VzQ2xvY2s7CisgKiAgIGNvbmZpZy0+ZW5hYmxlQXN5bmNocm9ub3VzQ2xvY2sgICAgPSB0cnVlOworICogICBjb25maWctPmNsb2NrRGl2aWRlciAgICAgICAgICAgICAgID0ga0FEQzE2X0Nsb2NrRGl2aWRlcjg7CisgKiAgIGNvbmZpZy0+cmVzb2x1dGlvbiAgICAgICAgICAgICAgICAgPSBrQURDMTZfUmVzb2x1dGlvblNFMTJCaXQ7CisgKiAgIGNvbmZpZy0+bG9uZ1NhbXBsZU1vZGUgICAgICAgICAgICAgPSBrQURDMTZfTG9uZ1NhbXBsZURpc2FibGVkOworICogICBjb25maWctPmVuYWJsZUhpZ2hTcGVlZCAgICAgICAgICAgID0gZmFsc2U7CisgKiAgIGNvbmZpZy0+ZW5hYmxlTG93UG93ZXIgICAgICAgICAgICAgPSBmYWxzZTsKKyAqICAgY29uZmlnLT5lbmFibGVDb250aW51b3VzQ29udmVyc2lvbiA9IGZhbHNlOworICogQGVuZGNvZGUKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgQURDMTZfR2V0RGVmYXVsdENvbmZpZyhhZGMxNl9jb25maWdfdCAqY29uZmlnKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0NBTElCUkFUSU9OKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04KKy8qIQorICogQGJyaWVmICBBdXRvbWF0ZXMgdGhlIGhhcmR3YXJlIGNhbGlicmF0aW9uLgorICoKKyAqIFRoaXMgYXV0byBjYWxpYnJhdGlvbiBoZWxwcyB0byBhZGp1c3QgdGhlIHBsdXMvbWludXMgc2lkZSBnYWluIGF1dG9tYXRpY2FsbHkuCisgKiBFeGVjdXRlIHRoZSBjYWxpYnJhdGlvbiBiZWZvcmUgdXNpbmcgdGhlIGNvbnZlcnRlci4gTm90ZSB0aGF0IHRoZSBoYXJkd2FyZSB0cmlnZ2VyIHNob3VsZCBiZSB1c2VkCisgKiBkdXJpbmcgdGhlIGNhbGlicmF0aW9uLgorICoKKyAqIEBwYXJhbSAgYmFzZSBBREMxNiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqCisgKiBAcmV0dXJuICAgICAgICAgICAgICAgICBFeGVjdXRpb24gc3RhdHVzLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgQ2FsaWJyYXRpb24gaXMgZG9uZSBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsIGtTdGF0dXNfRmFpbCAgICBDYWxpYnJhdGlvbiBoYXMgZmFpbGVkLgorICovCitzdGF0dXNfdCBBREMxNl9Eb0F1dG9DYWxpYnJhdGlvbihBRENfVHlwZSAqYmFzZSk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0NBTElCUkFUSU9OICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19PRkZTRVRfQ09SUkVDVElPTikgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX09GRlNFVF9DT1JSRUNUSU9OCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBvZmZzZXQgdmFsdWUgZm9yIHRoZSBjb252ZXJzaW9uIHJlc3VsdC4KKyAqCisgKiBUaGlzIG9mZnNldCB2YWx1ZSB0YWtlcyBlZmZlY3Qgb24gdGhlIGNvbnZlcnNpb24gcmVzdWx0LiBJZiB0aGUgb2Zmc2V0IHZhbHVlIGlzIG5vdCB6ZXJvLCB0aGUgcmVhZGluZyByZXN1bHQKKyAqIGlzIHN1YnRyYWN0ZWQgYnkgaXQuIE5vdGUsIHRoZSBoYXJkd2FyZSBjYWxpYnJhdGlvbiBmaWxscyB0aGUgb2Zmc2V0IHZhbHVlIGF1dG9tYXRpY2FsbHkuCisgKgorICogQHBhcmFtIGJhc2UgIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHZhbHVlIFNldHRpbmcgb2Zmc2V0IHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQURDMTZfU2V0T2Zmc2V0VmFsdWUoQURDX1R5cGUgKmJhc2UsIGludDE2X3QgdmFsdWUpCit7CisgICAgYmFzZS0+T0ZTID0gKHVpbnQzMl90KSh2YWx1ZSk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX09GRlNFVF9DT1JSRUNUSU9OICovCisKKy8qIEB9ICovCisKKy8qIQorICogQG5hbWUgQWR2YW5jZWQgRmVhdHVyZXMKKyAqIEB7CisgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0RNQSkgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0RNQQorLyohCisgKiBAYnJpZWYgRW5hYmxlcyBnZW5lcmF0aW5nIHRoZSBETUEgdHJpZ2dlciB3aGVuIHRoZSBjb252ZXJzaW9uIGlzIGNvbXBsZXRlLgorICoKKyAqIEBwYXJhbSBiYXNlICAgQURDMTYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZW5hYmxlIFN3aXRjaGVyIG9mIHRoZSBETUEgZmVhdHVyZS4gInRydWUiIG1lYW5zIGVuYWJsZWQsICJmYWxzZSIgbWVhbnMgbm90IGVuYWJsZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBBREMxNl9FbmFibGVETUEoQURDX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5TQzIgfD0gQURDX1NDMl9ETUFFTl9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5TQzIgJj0gfkFEQ19TQzJfRE1BRU5fTUFTSzsKKyAgICB9Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0RNQSAqLworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBoYXJkd2FyZSB0cmlnZ2VyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgICBBREMxNiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgU3dpdGNoZXIgb2YgdGhlIGhhcmR3YXJlIHRyaWdnZXIgZmVhdHVyZS4gInRydWUiIG1lYW5zIGVuYWJsZWQsICJmYWxzZSIgbWVhbnMgbm90IGVuYWJsZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBBREMxNl9FbmFibGVIYXJkd2FyZVRyaWdnZXIoQURDX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5TQzIgfD0gQURDX1NDMl9BRFRSR19NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5TQzIgJj0gfkFEQ19TQzJfQURUUkdfTUFTSzsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19NVVhfU0VMRUNUKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfTVVYX1NFTEVDVAorLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgY2hhbm5lbCBtdXggbW9kZS4KKyAqCisgKiBTb21lIHNhbXBsZSBwaW5zIHNoYXJlIHRoZSBzYW1lIGNoYW5uZWwgaW5kZXguIFRoZSBjaGFubmVsIG11eCBtb2RlIGRlY2lkZXMgd2hpY2ggcGluIGlzIHVzZWQgZm9yIGFuCisgKiBpbmRpY2F0ZWQgY2hhbm5lbC4KKyAqCisgKiBAcGFyYW0gYmFzZSBBREMxNiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtb2RlIFNldHRpbmcgY2hhbm5lbCBtdXggbW9kZS4gU2VlICJhZGMxNl9jaGFubmVsX211eF9tb2RlX3QiLgorICovCit2b2lkIEFEQzE2X1NldENoYW5uZWxNdXhNb2RlKEFEQ19UeXBlICpiYXNlLCBhZGMxNl9jaGFubmVsX211eF9tb2RlX3QgbW9kZSk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX01VWF9TRUxFQ1QgKi8KKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgaGFyZHdhcmUgY29tcGFyZSBtb2RlLgorICoKKyAqIFRoZSBoYXJkd2FyZSBjb21wYXJlIG1vZGUgcHJvdmlkZXMgYSB3YXkgdG8gcHJvY2VzcyB0aGUgY29udmVyc2lvbiByZXN1bHQgYXV0b21hdGljYWxseSBieSB1c2luZyBoYXJkd2FyZS4gT25seSB0aGUgcmVzdWx0CisgKiBpbiB0aGUgY29tcGFyZSByYW5nZSBpcyBhdmFpbGFibGUuIFRvIGNvbXBhcmUgdGhlIHJhbmdlLCBzZWUgImFkYzE2X2hhcmR3YXJlX2NvbXBhcmVfbW9kZV90IiBvciB0aGUgYXBwb3ByaWF0ZSByZWZlcmVuY2UKKyAqIG1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgQURDMTYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnICAgUG9pbnRlciB0byB0aGUgImFkYzE2X2hhcmR3YXJlX2NvbXBhcmVfY29uZmlnX3QiIHN0cnVjdHVyZS4gUGFzc2luZyAiTlVMTCIgZGlzYWJsZXMgdGhlIGZlYXR1cmUuCisgKi8KK3ZvaWQgQURDMTZfU2V0SGFyZHdhcmVDb21wYXJlQ29uZmlnKEFEQ19UeXBlICpiYXNlLCBjb25zdCBhZGMxNl9oYXJkd2FyZV9jb21wYXJlX2NvbmZpZ190ICpjb25maWcpOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfSFdfQVZFUkFHRSkgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0hXX0FWRVJBR0UKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIGhhcmR3YXJlIGF2ZXJhZ2UgbW9kZS4KKyAqCisgKiBUaGUgaGFyZHdhcmUgYXZlcmFnZSBtb2RlIHByb3ZpZGVzIGEgd2F5IHRvIHByb2Nlc3MgdGhlIGNvbnZlcnNpb24gcmVzdWx0IGF1dG9tYXRpY2FsbHkgYnkgdXNpbmcgaGFyZHdhcmUuIFRoZSBtdWx0aXBsZQorICogY29udmVyc2lvbiByZXN1bHRzIGFyZSBhY2N1bXVsYXRlZCBhbmQgYXZlcmFnZWQgaW50ZXJuYWxseSBtYWtpbmcgdGhlbSBlYXNpZXIgdG8gcmVhZC4KKyAqCisgKiBAcGFyYW0gYmFzZSAgQURDMTYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbW9kZSAgU2V0dGluZyB0aGUgaGFyZHdhcmUgYXZlcmFnZSBtb2RlLiBTZWUgImFkYzE2X2hhcmR3YXJlX2F2ZXJhZ2VfbW9kZV90Ii4KKyAqLwordm9pZCBBREMxNl9TZXRIYXJkd2FyZUF2ZXJhZ2UoQURDX1R5cGUgKmJhc2UsIGFkYzE2X2hhcmR3YXJlX2F2ZXJhZ2VfbW9kZV90IG1vZGUpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19IV19BVkVSQUdFICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0EpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0EKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIFBHQSBmb3IgdGhlIGNvbnZlcnRlcidzIGZyb250IGVuZC4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBBREMxNiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjb25maWcgIFBvaW50ZXIgdG8gdGhlICJhZGMxNl9wZ2FfY29uZmlnX3QiIHN0cnVjdHVyZS4gUGFzc2luZyAiTlVMTCIgZGlzYWJsZXMgdGhlIGZlYXR1cmUuCisgKi8KK3ZvaWQgQURDMTZfU2V0UEdBQ29uZmlnKEFEQ19UeXBlICpiYXNlLCBjb25zdCBhZGMxNl9wZ2FfY29uZmlnX3QgKmNvbmZpZyk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQSAqLworCisvKiEKKyAqIEBicmllZiAgR2V0cyB0aGUgc3RhdHVzIGZsYWdzIG9mIHRoZSBjb252ZXJ0ZXIuCisgKgorICogQHBhcmFtICBiYXNlIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICoKKyAqIEByZXR1cm4gICAgICBGbGFncycgbWFzayBpZiBpbmRpY2F0ZWQgZmxhZ3MgYXJlIGFzc2VydGVkLiBTZWUgIl9hZGMxNl9zdGF0dXNfZmxhZ3MiLgorICovCit1aW50MzJfdCBBREMxNl9HZXRTdGF0dXNGbGFncyhBRENfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmICBDbGVhcnMgdGhlIHN0YXR1cyBmbGFncyBvZiB0aGUgY29udmVydGVyLgorICoKKyAqIEBwYXJhbSAgYmFzZSBBREMxNiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSAgbWFzayBNYXNrIHZhbHVlIGZvciB0aGUgY2xlYXJlZCBmbGFncy4gU2VlICJfYWRjMTZfc3RhdHVzX2ZsYWdzIi4KKyAqLwordm9pZCBBREMxNl9DbGVhclN0YXR1c0ZsYWdzKEFEQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyogQH0gKi8KKworLyohCisgKiBAbmFtZSBDb252ZXJzaW9uIENoYW5uZWwKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgY29udmVyc2lvbiBjaGFubmVsLgorICoKKyAqIFRoaXMgb3BlcmF0aW9uIHRyaWdnZXJzIHRoZSBjb252ZXJzaW9uIHdoZW4gaW4gc29mdHdhcmUgdHJpZ2dlciBtb2RlLiBXaGVuIGluIGhhcmR3YXJlIHRyaWdnZXIgbW9kZSwgdGhpcyBBUEkKKyAqIGNvbmZpZ3VyZXMgdGhlIGNoYW5uZWwgd2hpbGUgdGhlIGV4dGVybmFsIHRyaWdnZXIgc291cmNlIGhlbHBzIHRvIHRyaWdnZXIgdGhlIGNvbnZlcnNpb24uCisgKgorICogTm90ZSB0aGF0IHRoZSAiQ2hhbm5lbCBHcm91cCIgaGFzIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisgKiBUbyBhbGxvdyBzZXF1ZW50aWFsIGNvbnZlcnNpb25zIG9mIHRoZSBBREMgdG8gYmUgdHJpZ2dlcmVkIGJ5IGludGVybmFsIHBlcmlwaGVyYWxzLCB0aGUgQURDIGhhcyBtb3JlIHRoYW4gb25lCisgKiBncm91cCBvZiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzLCBvbmUgZm9yIGVhY2ggY29udmVyc2lvbi4gVGhlIGNoYW5uZWwgZ3JvdXAgcGFyYW1ldGVyIGluZGljYXRlcyB3aGljaCBncm91cCBvZgorICogcmVnaXN0ZXJzIGFyZSB1c2VkLCBmb3IgZXhhbXBsZSwgY2hhbm5lbCBncm91cCAwIGlzIGZvciBHcm91cCBBIHJlZ2lzdGVycyBhbmQgY2hhbm5lbCBncm91cCAxIGlzIGZvciBHcm91cCBCIHJlZ2lzdGVycy4gVGhlCisgKiBjaGFubmVsIGdyb3VwcyBhcmUgdXNlZCBpbiBhICJwaW5nLXBvbmciIGFwcHJvYWNoIHRvIGNvbnRyb2wgdGhlIEFEQyBvcGVyYXRpb24uICBBdCBhbnkgcG9pbnQsIG9ubHkgb25lIG9mCisgKiB0aGUgY2hhbm5lbCBncm91cHMgaXMgYWN0aXZlbHkgY29udHJvbGxpbmcgQURDIGNvbnZlcnNpb25zLiBUaGUgY2hhbm5lbCBncm91cCAwIGlzIHVzZWQgZm9yIGJvdGggc29mdHdhcmUgYW5kIGhhcmR3YXJlCisgKiB0cmlnZ2VyIG1vZGVzLiBDaGFubmVsIGdyb3VwIDEgYW5kIGdyZWF0ZXIgaW5kaWNhdGVzIG11bHRpcGxlIGNoYW5uZWwgZ3JvdXAgcmVnaXN0ZXJzIGZvcgorICogdXNlIG9ubHkgaW4gaGFyZHdhcmUgdHJpZ2dlciBtb2RlLiBTZWUgdGhlIGNoaXAgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpbiB0aGUgYXBwcm9wcmlhdGUgTUNVIHJlZmVyZW5jZSBtYW51YWwgZm9yIHRoZQorICogbnVtYmVyIG9mIFNDMW4gcmVnaXN0ZXJzIChjaGFubmVsIGdyb3Vwcykgc3BlY2lmaWMgdG8gdGhpcyBkZXZpY2UuICBDaGFubmVsIGdyb3VwIDEgb3IgZ3JlYXRlciBhcmUgbm90IHVzZWQKKyAqIGZvciBzb2Z0d2FyZSB0cmlnZ2VyIG9wZXJhdGlvbi4gVGhlcmVmb3JlLCB3cml0aW5nIHRvIHRoZXNlIGNoYW5uZWwgZ3JvdXBzIGRvZXMgbm90IGluaXRpYXRlIGEgbmV3IGNvbnZlcnNpb24uCisgKiBVcGRhdGluZyB0aGUgY2hhbm5lbCBncm91cCAwIHdoaWxlIGEgZGlmZmVyZW50IGNoYW5uZWwgZ3JvdXAgaXMgYWN0aXZlbHkgY29udHJvbGxpbmcgYSBjb252ZXJzaW9uIGlzIGFsbG93ZWQgYW5kCisgKiB2aWNlIHZlcnNhLiBXcml0aW5nIGFueSBvZiB0aGUgY2hhbm5lbCBncm91cCByZWdpc3RlcnMgd2hpbGUgdGhhdCBzcGVjaWZpYyBjaGFubmVsIGdyb3VwIGlzIGFjdGl2ZWx5IGNvbnRyb2xsaW5nIGEKKyAqIGNvbnZlcnNpb24gYWJvcnRzIHRoZSBjdXJyZW50IGNvbnZlcnNpb24uCisgKgorICogQHBhcmFtIGJhc2UgICAgICAgICAgQURDMTYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbEdyb3VwICBDaGFubmVsIGdyb3VwIGluZGV4LgorICogQHBhcmFtIGNvbmZpZyAgICAgICAgUG9pbnRlciB0byB0aGUgImFkYzE2X2NoYW5uZWxfY29uZmlnX3QiIHN0cnVjdHVyZSBmb3IgdGhlIGNvbnZlcnNpb24gY2hhbm5lbC4KKyAqLwordm9pZCBBREMxNl9TZXRDaGFubmVsQ29uZmlnKEFEQ19UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsR3JvdXAsIGNvbnN0IGFkYzE2X2NoYW5uZWxfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmICBHZXRzIHRoZSBjb252ZXJzaW9uIHZhbHVlLgorICoKKyAqIEBwYXJhbSAgYmFzZSAgICAgICAgIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtICBjaGFubmVsR3JvdXAgQ2hhbm5lbCBncm91cCBpbmRleC4KKyAqCisgKiBAcmV0dXJuICAgICAgICAgICAgICBDb252ZXJzaW9uIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IEFEQzE2X0dldENoYW5uZWxDb252ZXJzaW9uVmFsdWUoQURDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWxHcm91cCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbEdyb3VwIDwgQURDX1JfQ09VTlQpOworCisgICAgcmV0dXJuIGJhc2UtPlJbY2hhbm5lbEdyb3VwXTsKK30KKworLyohCisgKiBAYnJpZWYgIEdldHMgdGhlIHN0YXR1cyBmbGFncyBvZiBjaGFubmVsLgorICoKKyAqIEBwYXJhbSAgYmFzZSAgICAgICAgIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtICBjaGFubmVsR3JvdXAgQ2hhbm5lbCBncm91cCBpbmRleC4KKyAqCisgKiBAcmV0dXJuICAgICAgICAgICAgICBGbGFncycgbWFzayBpZiBpbmRpY2F0ZWQgZmxhZ3MgYXJlIGFzc2VydGVkLiBTZWUgIl9hZGMxNl9jaGFubmVsX3N0YXR1c19mbGFncyIuCisgKi8KK3VpbnQzMl90IEFEQzE2X0dldENoYW5uZWxTdGF0dXNGbGFncyhBRENfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbEdyb3VwKTsKKworLyogQH0gKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKy8qIQorICogQH0KKyAqLworI2VuZGlmIC8qIF9GU0xfQURDMTZfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2Nsb2NrLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ODViOTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbG9jay5jCkBAIC0wLDAgKzEsMTM3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxNiAtIDIwMTcgLCBOWFAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9jbG9jay5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1hY3JvIGRlZmluaXRpb24gcmVtYXAgd29ya2Fyb3VuZC4gKi8KKyNpZiAoZGVmaW5lZChNQ0dfQzJfRVJFRlNfTUFTSykgJiYgIShkZWZpbmVkKE1DR19DMl9FUkVGUzBfTUFTSykpKQorI2RlZmluZSBNQ0dfQzJfRVJFRlMwX01BU0sgTUNHX0MyX0VSRUZTX01BU0sKKyNlbmRpZgorI2lmIChkZWZpbmVkKE1DR19DMl9IR09fTUFTSykgJiYgIShkZWZpbmVkKE1DR19DMl9IR08wX01BU0spKSkKKyNkZWZpbmUgTUNHX0MyX0hHTzBfTUFTSyBNQ0dfQzJfSEdPX01BU0sKKyNlbmRpZgorI2lmIChkZWZpbmVkKE1DR19DMl9SQU5HRV9NQVNLKSAmJiAhKGRlZmluZWQoTUNHX0MyX1JBTkdFMF9NQVNLKSkpCisjZGVmaW5lIE1DR19DMl9SQU5HRTBfTUFTSyBNQ0dfQzJfUkFOR0VfTUFTSworI2VuZGlmCisjaWYgKGRlZmluZWQoTUNHX0M2X0NNRV9NQVNLKSAmJiAhKGRlZmluZWQoTUNHX0M2X0NNRTBfTUFTSykpKQorI2RlZmluZSBNQ0dfQzZfQ01FMF9NQVNLIE1DR19DNl9DTUVfTUFTSworI2VuZGlmCisKKy8qIFBMTCBmaXhlZCBtdWx0aXBsaWVyIHdoZW4gdGhlcmUgaXMgbm90IFBSRElWIGFuZCBWRElWLiAqLworI2RlZmluZSBQTExfRklYRURfTVVMVCAoMzc1VSkKKy8qIE1heCBmcmVxdWVuY3kgb2YgdGhlIHJlZmVyZW5jZSBjbG9jayB1c2VkIGZvciBpbnRlcm5hbCBjbG9jayB0cmltLiAqLworI2RlZmluZSBUUklNX1JFRl9DTEtfTUlOICg4MDAwMDAwVSkKKy8qIE1pbiBmcmVxdWVuY3kgb2YgdGhlIHJlZmVyZW5jZSBjbG9jayB1c2VkIGZvciBpbnRlcm5hbCBjbG9jayB0cmltLiAqLworI2RlZmluZSBUUklNX1JFRl9DTEtfTUFYICgxNjAwMDAwMFUpCisvKiBNYXggdHJpbSB2YWx1ZSBvZiBmYXN0IGludGVybmFsIHJlZmVyZW5jZSBjbG9jay4gKi8KKyNkZWZpbmUgVFJJTV9GSVJDX01BWCAoNTAwMDAwMFUpCisvKiBNaW4gdHJpbSB2YWx1ZSBvZiBmYXN0IGludGVybmFsIHJlZmVyZW5jZSBjbG9jay4gKi8KKyNkZWZpbmUgVFJJTV9GSVJDX01JTiAoMzAwMDAwMFUpCisvKiBNYXggdHJpbSB2YWx1ZSBvZiBmYXN0IGludGVybmFsIHJlZmVyZW5jZSBjbG9jay4gKi8KKyNkZWZpbmUgVFJJTV9TSVJDX01BWCAoMzkwNjNVKQorLyogTWluIHRyaW0gdmFsdWUgb2YgZmFzdCBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2suICovCisjZGVmaW5lIFRSSU1fU0lSQ19NSU4gKDMxMjUwVSkKKworI2RlZmluZSBNQ0dfU19JUkNTVF9WQUwgKChNQ0ctPlMgJiBNQ0dfU19JUkNTVF9NQVNLKSA+PiBNQ0dfU19JUkNTVF9TSElGVCkKKyNkZWZpbmUgTUNHX1NfQ0xLU1RfVkFMICgoTUNHLT5TICYgTUNHX1NfQ0xLU1RfTUFTSykgPj4gTUNHX1NfQ0xLU1RfU0hJRlQpCisjZGVmaW5lIE1DR19TX0lSRUZTVF9WQUwgKChNQ0ctPlMgJiBNQ0dfU19JUkVGU1RfTUFTSykgPj4gTUNHX1NfSVJFRlNUX1NISUZUKQorI2RlZmluZSBNQ0dfU19QTExTVF9WQUwgKChNQ0ctPlMgJiBNQ0dfU19QTExTVF9NQVNLKSA+PiBNQ0dfU19QTExTVF9TSElGVCkKKyNkZWZpbmUgTUNHX0MxX0ZSRElWX1ZBTCAoKE1DRy0+QzEgJiBNQ0dfQzFfRlJESVZfTUFTSykgPj4gTUNHX0MxX0ZSRElWX1NISUZUKQorI2RlZmluZSBNQ0dfQzJfTFBfVkFMICgoTUNHLT5DMiAmIE1DR19DMl9MUF9NQVNLKSA+PiBNQ0dfQzJfTFBfU0hJRlQpCisjZGVmaW5lIE1DR19DMl9SQU5HRV9WQUwgKChNQ0ctPkMyICYgTUNHX0MyX1JBTkdFX01BU0spID4+IE1DR19DMl9SQU5HRV9TSElGVCkKKyNkZWZpbmUgTUNHX1NDX0ZDUkRJVl9WQUwgKChNQ0ctPlNDICYgTUNHX1NDX0ZDUkRJVl9NQVNLKSA+PiBNQ0dfU0NfRkNSRElWX1NISUZUKQorI2RlZmluZSBNQ0dfUzJfUExMQ1NUX1ZBTCAoKE1DRy0+UzIgJiBNQ0dfUzJfUExMQ1NUX01BU0spID4+IE1DR19TMl9QTExDU1RfU0hJRlQpCisjZGVmaW5lIE1DR19DN19PU0NTRUxfVkFMICgoTUNHLT5DNyAmIE1DR19DN19PU0NTRUxfTUFTSykgPj4gTUNHX0M3X09TQ1NFTF9TSElGVCkKKyNkZWZpbmUgTUNHX0M0X0RNWDMyX1ZBTCAoKE1DRy0+QzQgJiBNQ0dfQzRfRE1YMzJfTUFTSykgPj4gTUNHX0M0X0RNWDMyX1NISUZUKQorI2RlZmluZSBNQ0dfQzRfRFJTVF9EUlNfVkFMICgoTUNHLT5DNCAmIE1DR19DNF9EUlNUX0RSU19NQVNLKSA+PiBNQ0dfQzRfRFJTVF9EUlNfU0hJRlQpCisjZGVmaW5lIE1DR19DN19QTEwzMktSRUZTRUxfVkFMICgoTUNHLT5DNyAmIE1DR19DN19QTEwzMktSRUZTRUxfTUFTSykgPj4gTUNHX0M3X1BMTDMyS1JFRlNFTF9TSElGVCkKKyNkZWZpbmUgTUNHX0M1X1BMTFJFRlNFTDBfVkFMICgoTUNHLT5DNSAmIE1DR19DNV9QTExSRUZTRUwwX01BU0spID4+IE1DR19DNV9QTExSRUZTRUwwX1NISUZUKQorI2RlZmluZSBNQ0dfQzExX1BMTFJFRlNFTDFfVkFMICgoTUNHLT5DMTEgJiBNQ0dfQzExX1BMTFJFRlNFTDFfTUFTSykgPj4gTUNHX0MxMV9QTExSRUZTRUwxX1NISUZUKQorI2RlZmluZSBNQ0dfQzExX1BSRElWMV9WQUwgKChNQ0ctPkMxMSAmIE1DR19DMTFfUFJESVYxX01BU0spID4+IE1DR19DMTFfUFJESVYxX1NISUZUKQorI2RlZmluZSBNQ0dfQzEyX1ZESVYxX1ZBTCAoKE1DRy0+QzEyICYgTUNHX0MxMl9WRElWMV9NQVNLKSA+PiBNQ0dfQzEyX1ZESVYxX1NISUZUKQorI2RlZmluZSBNQ0dfQzVfUFJESVYwX1ZBTCAoKE1DRy0+QzUgJiBNQ0dfQzVfUFJESVYwX01BU0spID4+IE1DR19DNV9QUkRJVjBfU0hJRlQpCisjZGVmaW5lIE1DR19DNl9WRElWMF9WQUwgKChNQ0ctPkM2ICYgTUNHX0M2X1ZESVYwX01BU0spID4+IE1DR19DNl9WRElWMF9TSElGVCkKKworI2RlZmluZSBPU0NfTU9ERV9NQVNLIChNQ0dfQzJfRVJFRlMwX01BU0sgfCBNQ0dfQzJfSEdPMF9NQVNLIHwgTUNHX0MyX1JBTkdFMF9NQVNLKQorCisjZGVmaW5lIFNJTV9DTEtESVYxX09VVERJVjFfVkFMICgoU0lNLT5DTEtESVYxICYgU0lNX0NMS0RJVjFfT1VURElWMV9NQVNLKSA+PiBTSU1fQ0xLRElWMV9PVVRESVYxX1NISUZUKQorI2RlZmluZSBTSU1fQ0xLRElWMV9PVVRESVY0X1ZBTCAoKFNJTS0+Q0xLRElWMSAmIFNJTV9DTEtESVYxX09VVERJVjRfTUFTSykgPj4gU0lNX0NMS0RJVjFfT1VURElWNF9TSElGVCkKKyNkZWZpbmUgU0lNX1NPUFQxX09TQzMyS1NFTF9WQUwgKChTSU0tPlNPUFQxICYgU0lNX1NPUFQxX09TQzMyS1NFTF9NQVNLKSA+PiBTSU1fU09QVDFfT1NDMzJLU0VMX1NISUZUKQorCisvKiBNQ0dfU19DTEtTVCBkZWZpbml0aW9uLiAqLworZW51bSBfbWNnX2Nsa291dF9zdGF0Cit7CisgICAga01DR19DbGtPdXRTdGF0RmxsLCAvKiBGTEwuICAgICAgICAgICAgKi8KKyAgICBrTUNHX0Nsa091dFN0YXRJbnQsIC8qIEludGVybmFsIGNsb2NrLiAqLworICAgIGtNQ0dfQ2xrT3V0U3RhdEV4dCwgLyogRXh0ZXJuYWwgY2xvY2suICovCisgICAga01DR19DbGtPdXRTdGF0UGxsICAvKiBQTEwuICAgICAgICAgICAgKi8KK307CisKKy8qIE1DR19TX1BMTFNUIGRlZmluaXRpb24uICovCitlbnVtIF9tY2dfcGxsc3QKK3sKKyAgICBrTUNHX1BsbHN0RmxsLCAvKiBGTEwgaXMgdXNlZC4gKi8KKyAgICBrTUNHX1BsbHN0UGxsICAvKiBQTEwgaXMgdXNlZC4gKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNsb3cgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeS4gKi8KK3N0YXRpYyB1aW50MzJfdCBzX3Nsb3dJcmNGcmVxID0gMzI3NjhVOworLyogRmFzdCBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5LiAqLworc3RhdGljIHVpbnQzMl90IHNfZmFzdElyY0ZyZXEgPSA0MDAwMDAwVTsKKworLyogRXh0ZXJuYWwgWFRBTDAgKE9TQzApIGNsb2NrIGZyZXF1ZW5jeS4gKi8KK3VpbnQzMl90IGdfeHRhbDBGcmVxOworLyogRXh0ZXJuYWwgWFRBTDMySyBjbG9jayBmcmVxdWVuY3kuICovCit1aW50MzJfdCBnX3h0YWwzMkZyZXE7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgR2V0IHRoZSBNQ0cgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCisgKiBHZXQgdGhlIGN1cnJlbnQgTUNHIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kgaW4gSHouIEl0IGlzCisgKiB0aGUgZnJlcXVlbmN5IHNlbGVjdCBieSBNQ0dfQzdbT1NDU0VMXS4gVGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbi4KKyAqCisgKiBAcmV0dXJuIE1DRyBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5IGluIEh6LgorICovCitzdGF0aWMgdWludDMyX3QgQ0xPQ0tfR2V0TWNnRXh0Q2xrRnJlcSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgR2V0IHRoZSBNQ0cgRkxMIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kuCisgKgorICogR2V0IHRoZSBjdXJyZW50IE1DRyBGTEwgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4gSXQgaXMKKyAqIHRoZSBmcmVxdWVuY3kgYWZ0ZXIgYnkgTUNHX0MxW0ZSRElWXS4gVGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbi4KKyAqCisgKiBAcmV0dXJuIE1DRyBGTEwgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4KKyAqLworc3RhdGljIHVpbnQzMl90IENMT0NLX0dldEZsbEV4dFJlZkNsa0ZyZXEodm9pZCk7CisKKy8qIQorICogQGJyaWVmIEdldCB0aGUgTUNHIEZMTCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5LgorICoKKyAqIEdldCB0aGUgY3VycmVudCBNQ0cgRkxMIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kgaW4gSHouIEl0IGlzCisgKiB0aGUgZnJlcXVlbmN5IHNlbGVjdCBieSBNQ0dfQzFbSVJFRlNdLiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLgorICoKKyAqIEByZXR1cm4gTUNHIEZMTCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5IGluIEh6LgorICovCitzdGF0aWMgdWludDMyX3QgQ0xPQ0tfR2V0RmxsUmVmQ2xrRnJlcSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgR2V0IHRoZSBmcmVxdWVuY3kgb2YgY2xvY2sgc2VsZWN0ZWQgYnkgTUNHX0MyW0lSQ1NdLgorICoKKyAqIFRoaXMgY2xvY2sncyB0d28gb3V0cHV0OgorICogIDEuIE1DR09VVENMSyB3aGVuIE1DR19TW0NMS1NUXT0wLgorICogIDIuIE1DR0lSQ0xLIHdoZW4gTUNHX0MxW0lSQ0xLRU5dPTEuCisgKgorICogQHJldHVybiBUaGUgZnJlcXVlbmN5IGluIEh6LgorICovCitzdGF0aWMgdWludDMyX3QgQ0xPQ0tfR2V0SW50ZXJuYWxSZWZDbGtTZWxlY3RGcmVxKHZvaWQpOworCisKKy8qIQorICogQGJyaWVmIENhbGN1bGF0ZSB0aGUgUkFOR0UgdmFsdWUgYmFzZSBvbiBjcnlzdGFsIGZyZXF1ZW5jeS4KKyAqCisgKiBUbyBzZXR1cCBleHRlcm5hbCBjcnlzdGFsIG9zY2lsbGF0b3IsIG11c3Qgc2V0IHRoZSByZWdpc3RlciBiaXRzIFJBTkdFCisgKiBiYXNlIG9uIHRoZSBjcnlzdGFsIGZyZXF1ZW5jeS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBSQU5HRSBiYXNlIG9uIHRoZQorICogaW5wdXQgZnJlcXVlbmN5LiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbSBmcmVxIENyeXN0YWwgZnJlcXVlbmN5IGluIEh6LgorICogQHJldHVybiBUaGUgUkFOR0UgdmFsdWUuCisgKi8KK3N0YXRpYyB1aW50OF90IENMT0NLX0dldE9zY1JhbmdlRnJvbUZyZXEodWludDMyX3QgZnJlcSk7CisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE1DR19VU0VSX0NPTkZJR19GTExfU1RBQkxFX0RFTEFZX0VOCisvKiEKKyAqIEBicmllZiBEZWxheSBmdW5jdGlvbiB0byB3YWl0IEZMTCBzdGFibGUuCisgKgorICogRGVsYXkgZnVuY3Rpb24gdG8gd2FpdCBGTEwgc3RhYmxlIGluIEZFSSBtb2RlIG9yIEZFRSBtb2RlLCBzaG91bGQgd2FpdCBhdCBsZWFzdAorICogMW1zLiBFdmVyeSB0aW1lIGNoYW5nZXMgRkxMIHNldHRpbmcsIHNob3VsZCB3YWl0IHRoaXMgdGltZSBmb3IgRkxMIHN0YWJsZS4KKyAqLwordm9pZCBDTE9DS19GbGxTdGFibGVEZWxheSh2b2lkKQoreworICAgIC8qCisgICAgICAgU2hvdWxkIHdhaXQgYXQgbGVhc3QgMW1zLiBCZWNhdXNlIGluIHRoZXNlIG1vZGVzLCB0aGUgY29yZSBjbG9jayBpcyAxMDBNSHoKKyAgICAgICBhdCBtb3N0LCBzbyB0aGlzIGZ1bmN0aW9uIGNvdWxkIG9idGFpbiB0aGUgMW1zIGRlbGF5LgorICAgICAqLworICAgIHZvbGF0aWxlIHVpbnQzMl90IGkgPSAzMDAwMFU7CisgICAgd2hpbGUgKGktLSkKKyAgICB7CisgICAgICAgIF9fTk9QKCk7CisgICAgfQorfQorI2Vsc2UgLyogV2l0aCBNQ0dfVVNFUl9DT05GSUdfRkxMX1NUQUJMRV9ERUxBWV9FTiBkZWZpbmVkLiAqLworLyogT25jZSB1c2VyIGRlZmluZXMgdGhlIE1DR19VU0VSX0NPTkZJR19GTExfU1RBQkxFX0RFTEFZX0VOIHRvIHVzZSB0aGVpciBvd24gZGVsYXkgZnVuY3Rpb24sIGhlIGhhcyB0bworICogY3JlYXRlIGhpcyBvd24gQ0xPQ0tfRmxsU3RhYmxlRGVsYXkoKSBmdW5jdGlvbiBpbiBhcHBsaWNhdGlvbiBjb2RlLiBTaW5jZSB0aGUgY2xvY2sgZnVuY3Rpb25zIGluIHRoaXMKKyAqIGZpbGUgd291bGQgY2FsbCB0aGUgQ0xPQ0tfRmxsU3RhYmxlRGVsYXkoKSByZWdhcmRuZXNzIGhvdyBpdCBpcyBkZWZpbmVkLgorICovCitleHRlcm4gdm9pZCBDTE9DS19GbGxTdGFibGVEZWxheSh2b2lkKTsKKyNlbmRpZiAvKiBNQ0dfVVNFUl9DT05GSUdfRkxMX1NUQUJMRV9ERUxBWV9FTiAqLworCitzdGF0aWMgdWludDMyX3QgQ0xPQ0tfR2V0TWNnRXh0Q2xrRnJlcSh2b2lkKQoreworICAgIHVpbnQzMl90IGZyZXE7CisKKyAgICBzd2l0Y2ggKE1DR19DN19PU0NTRUxfVkFMKQorICAgIHsKKyAgICAgICAgY2FzZSAwVToKKyAgICAgICAgICAgIC8qIFBsZWFzZSBjYWxsIENMT0NLX1NldFh0YWwwRnJlcSBiYXNlIG9uIGJvYXJkIHNldHRpbmcgYmVmb3JlIHVzaW5nIE9TQzAgY2xvY2suICovCisgICAgICAgICAgICBhc3NlcnQoZ194dGFsMEZyZXEpOworICAgICAgICAgICAgZnJlcSA9IGdfeHRhbDBGcmVxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMVU6CisgICAgICAgICAgICAvKiBQbGVhc2UgY2FsbCBDTE9DS19TZXRYdGFsMzJGcmVxIGJhc2Ugb24gYm9hcmQgc2V0dGluZyBiZWZvcmUgdXNpbmcgWFRBTDMySy9SVENfQ0xLSU4gY2xvY2suICovCisgICAgICAgICAgICBhc3NlcnQoZ194dGFsMzJGcmVxKTsKKyAgICAgICAgICAgIGZyZXEgPSBnX3h0YWwzMkZyZXE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZyZXEgPSAwVTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmcmVxOworfQorCitzdGF0aWMgdWludDMyX3QgQ0xPQ0tfR2V0RmxsRXh0UmVmQ2xrRnJlcSh2b2lkKQoreworICAgIC8qIEZsbEV4dFJlZiA9IE1jZ0V4dFJlZiAvIEZsbEV4dFJlZkRpdiAqLworICAgIHVpbnQ4X3QgZnJkaXY7CisgICAgdWludDhfdCByYW5nZTsKKyAgICB1aW50OF90IG9zY3NlbDsKKworICAgIHVpbnQzMl90IGZyZXEgPSBDTE9DS19HZXRNY2dFeHRDbGtGcmVxKCk7CisKKyAgICBpZiAoIWZyZXEpCisgICAgeworICAgICAgICByZXR1cm4gZnJlcTsKKyAgICB9CisKKyAgICBmcmRpdiA9IE1DR19DMV9GUkRJVl9WQUw7CisgICAgZnJlcSA+Pj0gZnJkaXY7CisKKyAgICByYW5nZSA9IE1DR19DMl9SQU5HRV9WQUw7CisgICAgb3Njc2VsID0gTUNHX0M3X09TQ1NFTF9WQUw7CisKKyAgICAvKgorICAgICAgIFdoZW4gc2hvdWxkIHVzZSBkaXZpZGVyIDMyLCA2NCwgMTI4LCAyNTYsIDUxMiwgMTAyNCwgMTI4MCwgMTUzNi4KKyAgICAgICAxLiBNQ0dfQzdbT1NDU0VMXSBzZWxlY3RzIElSQzQ4TS4KKyAgICAgICAyLiBNQ0dfQzdbT1NDU0VMXSBzZWxlY3RzIE9TQzAgYW5kIE1DR19DMltSQU5HRV0gaXMgbm90IDAuCisgICAgKi8KKyAgICBpZiAoKCgwVSAhPSByYW5nZSkKKyAgICAgICAgICYmIChrTUNHX09zY3NlbE9zYyA9PSBvc2NzZWwpCisgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChmcmRpdikKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgIGZyZXEgPj49IDV1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgIC8qIDY0KjIwPTEyODAgKi8KKyAgICAgICAgICAgICAgICBmcmVxIC89IDIwdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICAgICAvKiAxMjgqMTI9MTUzNiAqLworICAgICAgICAgICAgICAgIGZyZXEgLz0gMTJ1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmcmVxID0gMHU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZnJlcTsKK30KKworc3RhdGljIHVpbnQzMl90IENMT0NLX0dldEludGVybmFsUmVmQ2xrU2VsZWN0RnJlcSh2b2lkKQoreworICAgIGlmIChrTUNHX0lyY1Nsb3cgPT0gTUNHX1NfSVJDU1RfVkFMKQorICAgIHsKKyAgICAgICAgLyogU2xvdyBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgc2VsZWN0ZWQqLworICAgICAgICByZXR1cm4gc19zbG93SXJjRnJlcTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRmFzdCBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgc2VsZWN0ZWQqLworICAgICAgICByZXR1cm4gc19mYXN0SXJjRnJlcSA+PiBNQ0dfU0NfRkNSRElWX1ZBTDsKKyAgICB9Cit9CisKK3N0YXRpYyB1aW50MzJfdCBDTE9DS19HZXRGbGxSZWZDbGtGcmVxKHZvaWQpCit7CisgICAgLyogSWYgdXNlIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jay4gKi8KKyAgICBpZiAoa01DR19GbGxTcmNFeHRlcm5hbCA9PSBNQ0dfU19JUkVGU1RfVkFMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENMT0NLX0dldEZsbEV4dFJlZkNsa0ZyZXEoKTsKKyAgICB9CisgICAgLyogSWYgdXNlIGludGVybmFsIHJlZmVyZW5jZSBjbG9jay4gKi8KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc19zbG93SXJjRnJlcTsKKyAgICB9Cit9CisKKworc3RhdGljIHVpbnQ4X3QgQ0xPQ0tfR2V0T3NjUmFuZ2VGcm9tRnJlcSh1aW50MzJfdCBmcmVxKQoreworICAgIHVpbnQ4X3QgcmFuZ2U7CisKKyAgICBpZiAoZnJlcSA8PSAzOTA2M1UpCisgICAgeworICAgICAgICByYW5nZSA9IDBVOworICAgIH0KKyAgICBlbHNlIGlmIChmcmVxIDw9IDgwMDAwMDBVKQorICAgIHsKKyAgICAgICAgcmFuZ2UgPSAxVTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmFuZ2UgPSAyVTsKKyAgICB9CisKKyAgICByZXR1cm4gcmFuZ2U7Cit9CisKKwordWludDMyX3QgQ0xPQ0tfR2V0RXIzMmtDbGtGcmVxKHZvaWQpCit7CisgICAgdWludDMyX3QgZnJlcTsKKworICAgIHN3aXRjaCAoU0lNX1NPUFQxX09TQzMyS1NFTF9WQUwpCisgICAgeworICAgICAgICBjYXNlIDBVOiAvKiBPU0MgMzJrIGNsb2NrICAqLworICAgICAgICBjYXNlIDJVOiAvKiBSVEMgMzJrIGNsb2NrICAqLworICAgICAgICAgICAgLyogUGxlYXNlIGNhbGwgQ0xPQ0tfU2V0WHRhbDMyRnJlcSBiYXNlIG9uIGJvYXJkIHNldHRpbmcgYmVmb3JlIHVzaW5nIFhUQUwzMksvUlRDX0NMS0lOIGNsb2NrLiAqLworICAgICAgICAgICAgYXNzZXJ0KGdfeHRhbDMyRnJlcSk7CisgICAgICAgICAgICBmcmVxID0gZ194dGFsMzJGcmVxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgM1U6IC8qIExQTyBjbG9jayAgICAgICovCisgICAgICAgICAgICBmcmVxID0gTFBPX0NMS19GUkVROworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmcmVxID0gMFU7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZyZXE7Cit9CisKK3VpbnQzMl90IENMT0NLX0dldE9zYzBFckNsa0ZyZXEodm9pZCkKK3sKKyAgICAvKiBQbGVhc2UgY2FsbCBDTE9DS19TZXRYdGFsMEZyZXEgYmFzZSBvbiBib2FyZCBzZXR0aW5nIGJlZm9yZSB1c2luZyBPU0MwIGNsb2NrLiAqLworICAgIGFzc2VydChnX3h0YWwwRnJlcSk7CisgICAgcmV0dXJuIGdfeHRhbDBGcmVxOworfQorCit1aW50MzJfdCBDTE9DS19HZXRQbGF0Q2xrRnJlcSh2b2lkKQoreworICAgIHJldHVybiBDTE9DS19HZXRPdXRDbGtGcmVxKCkgLyAoU0lNX0NMS0RJVjFfT1VURElWMV9WQUwgKyAxKTsKK30KKwordWludDMyX3QgQ0xPQ0tfR2V0Rmxhc2hDbGtGcmVxKHZvaWQpCit7CisgICAgdWludDMyX3QgZnJlcTsKKworICAgIGZyZXEgPSBDTE9DS19HZXRPdXRDbGtGcmVxKCkgLyAoU0lNX0NMS0RJVjFfT1VURElWMV9WQUwgKyAxKTsKKyAgICBmcmVxIC89IChTSU1fQ0xLRElWMV9PVVRESVY0X1ZBTCArIDEpOworCisgICAgcmV0dXJuIGZyZXE7Cit9CisKK3VpbnQzMl90IENMT0NLX0dldEJ1c0Nsa0ZyZXEodm9pZCkKK3sKKyAgICB1aW50MzJfdCBmcmVxOworCisgICAgZnJlcSA9IENMT0NLX0dldE91dENsa0ZyZXEoKSAvIChTSU1fQ0xLRElWMV9PVVRESVYxX1ZBTCArIDEpOworICAgIGZyZXEgLz0gKFNJTV9DTEtESVYxX09VVERJVjRfVkFMICsgMSk7CisKKyAgICByZXR1cm4gZnJlcTsKK30KKwordWludDMyX3QgQ0xPQ0tfR2V0Q29yZVN5c0Nsa0ZyZXEodm9pZCkKK3sKKyAgICByZXR1cm4gQ0xPQ0tfR2V0T3V0Q2xrRnJlcSgpIC8gKFNJTV9DTEtESVYxX09VVERJVjFfVkFMICsgMSk7Cit9CisKK3VpbnQzMl90IENMT0NLX0dldEZyZXEoY2xvY2tfbmFtZV90IGNsb2NrTmFtZSkKK3sKKyAgICB1aW50MzJfdCBmcmVxOworCisgICAgc3dpdGNoIChjbG9ja05hbWUpCisgICAgeworICAgICAgICBjYXNlIGtDTE9DS19Db3JlU3lzQ2xrOgorICAgICAgICBjYXNlIGtDTE9DS19QbGF0Q2xrOgorICAgICAgICAgICAgZnJlcSA9IENMT0NLX0dldE91dENsa0ZyZXEoKSAvIChTSU1fQ0xLRElWMV9PVVRESVYxX1ZBTCArIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NMT0NLX0J1c0NsazoKKyAgICAgICAgY2FzZSBrQ0xPQ0tfRmxhc2hDbGs6CisgICAgICAgICAgICBmcmVxID0gQ0xPQ0tfR2V0T3V0Q2xrRnJlcSgpIC8gKFNJTV9DTEtESVYxX09VVERJVjFfVkFMICsgMSk7CisgICAgICAgICAgICBmcmVxIC89IChTSU1fQ0xLRElWMV9PVVRESVY0X1ZBTCArIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NMT0NLX0VyMzJrQ2xrOgorICAgICAgICAgICAgZnJlcSA9IENMT0NLX0dldEVyMzJrQ2xrRnJlcSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NMT0NLX01jZ0ludGVybmFsUmVmQ2xrOgorICAgICAgICAgICAgZnJlcSA9IENMT0NLX0dldEludGVybmFsUmVmQ2xrRnJlcSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NMT0NLX01jZ0ZsbENsazoKKyAgICAgICAgICAgIGZyZXEgPSBDTE9DS19HZXRGbGxGcmVxKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQ0xPQ0tfTHBvQ2xrOgorICAgICAgICAgICAgZnJlcSA9IExQT19DTEtfRlJFUTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtDTE9DS19Pc2MwRXJDbGs6CisgICAgICAgICAgICAvKiBQbGVhc2UgY2FsbCBDTE9DS19TZXRYdGFsMEZyZXEgYmFzZSBvbiBib2FyZCBzZXR0aW5nIGJlZm9yZSB1c2luZyBPU0MwIGNsb2NrLiAqLworICAgICAgICAgICAgYXNzZXJ0KGdfeHRhbDBGcmVxKTsKKyAgICAgICAgICAgIGZyZXEgPSBnX3h0YWwwRnJlcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZnJlcSA9IDBVOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZyZXE7Cit9CisKK3ZvaWQgQ0xPQ0tfU2V0U2ltQ29uZmlnKHNpbV9jbG9ja19jb25maWdfdCBjb25zdCAqY29uZmlnKQoreworICAgIFNJTS0+Q0xLRElWMSA9IGNvbmZpZy0+Y2xrZGl2MTsKKyAgICBDTE9DS19TZXRFcjMya0Nsb2NrKGNvbmZpZy0+ZXIzMmtTcmMpOworfQorCit1aW50MzJfdCBDTE9DS19HZXRPdXRDbGtGcmVxKHZvaWQpCit7CisgICAgdWludDMyX3QgbWNnb3V0Y2xrOworICAgIHVpbnQzMl90IGNsa3N0ID0gTUNHX1NfQ0xLU1RfVkFMOworCisgICAgc3dpdGNoIChjbGtzdCkKKyAgICB7CisgICAgICAgIGNhc2Uga01DR19DbGtPdXRTdGF0RmxsOgorICAgICAgICAgICAgbWNnb3V0Y2xrID0gQ0xPQ0tfR2V0RmxsRnJlcSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga01DR19DbGtPdXRTdGF0SW50OgorICAgICAgICAgICAgbWNnb3V0Y2xrID0gQ0xPQ0tfR2V0SW50ZXJuYWxSZWZDbGtTZWxlY3RGcmVxKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrTUNHX0Nsa091dFN0YXRFeHQ6CisgICAgICAgICAgICBtY2dvdXRjbGsgPSBDTE9DS19HZXRNY2dFeHRDbGtGcmVxKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1jZ291dGNsayA9IDBVOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBtY2dvdXRjbGs7Cit9CisKK3VpbnQzMl90IENMT0NLX0dldEZsbEZyZXEodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3QgZmxsRmFjdG9yVGFibGVbNF1bMl0gPSB7ezY0MCwgNzMyfSwgezEyODAsIDE0NjR9LCB7MTkyMCwgMjE5N30sIHsyNTYwLCAyOTI5fX07CisKKyAgICB1aW50OF90IGRycywgZG14MzI7CisgICAgdWludDMyX3QgZnJlcTsKKworICAgIC8qIElmIEZMTCBpcyBub3QgZW5hYmxlZCBjdXJyZW50bHksIHRoZW4gcmV0dXJuIDBVLiAqLworICAgIGlmICgoTUNHLT5DMiAmIE1DR19DMl9MUF9NQVNLKQorICAgICAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDBVOworICAgIH0KKworICAgIC8qIEdldCBGTEwgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeS4gKi8KKyAgICBmcmVxID0gQ0xPQ0tfR2V0RmxsUmVmQ2xrRnJlcSgpOworICAgIGlmICghZnJlcSkKKyAgICB7CisgICAgICAgIHJldHVybiBmcmVxOworICAgIH0KKworICAgIGRycyA9IE1DR19DNF9EUlNUX0RSU19WQUw7CisgICAgZG14MzIgPSBNQ0dfQzRfRE1YMzJfVkFMOworCisgICAgcmV0dXJuIGZyZXEgKiBmbGxGYWN0b3JUYWJsZVtkcnNdW2RteDMyXTsKK30KKwordWludDMyX3QgQ0xPQ0tfR2V0SW50ZXJuYWxSZWZDbGtGcmVxKHZvaWQpCit7CisgICAgLyogSWYgTUNHSVJDTEsgaXMgZ2F0ZWQuICovCisgICAgaWYgKCEoTUNHLT5DMSAmIE1DR19DMV9JUkNMS0VOX01BU0spKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDBVOworICAgIH0KKworICAgIHJldHVybiBDTE9DS19HZXRJbnRlcm5hbFJlZkNsa1NlbGVjdEZyZXEoKTsKK30KKwordWludDMyX3QgQ0xPQ0tfR2V0Rml4ZWRGcmVxQ2xrRnJlcSh2b2lkKQoreworICAgIHVpbnQzMl90IGZyZXEgPSBDTE9DS19HZXRGbGxSZWZDbGtGcmVxKCk7CisKKyAgICAvKiBNQ0dGRkNMSyBtdXN0IGJlIG5vIG1vcmUgdGhhbiBNQ0dPVVRDTEsvOC4gKi8KKyAgICBpZiAoKGZyZXEpICYmIChmcmVxIDw9IChDTE9DS19HZXRPdXRDbGtGcmVxKCkgLyA4VSkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyZXE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwVTsKKyAgICB9Cit9CisKKworc3RhdHVzX3QgQ0xPQ0tfU2V0RXh0ZXJuYWxSZWZDbGtDb25maWcobWNnX29zY3NlbF90IG9zY3NlbCkKK3sKKyAgICBib29sIG5lZWREZWxheTsKKyAgICB1aW50MzJfdCBpOworCisjaWYgKGRlZmluZWQoTUNHX0NPTkZJR19DSEVDS19QQVJBTSkgJiYgTUNHX0NPTkZJR19DSEVDS19QQVJBTSkKKyAgICAvKiBJZiBjaGFuZ2UgTUNHX0M3W09TQ1NFTF0gYW5kIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBpcyBzeXN0ZW0gY2xvY2sgc291cmNlLCByZXR1cm4gZXJyb3IuICovCisgICAgaWYgKChNQ0dfQzdfT1NDU0VMX1ZBTCAhPSBvc2NzZWwpICYmICghKE1DRy0+UyAmIE1DR19TX0lSRUZTVF9NQVNLKSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19NQ0dfU291cmNlVXNlZDsKKyAgICB9CisjZW5kaWYgLyogTUNHX0NPTkZJR19DSEVDS19QQVJBTSAqLworCisgICAgaWYgKE1DR19DN19PU0NTRUxfVkFMICE9IG9zY3NlbCkKKyAgICB7CisgICAgICAgIC8qIElmIGNoYW5nZSBPU0NTRUwsIG5lZWQgdG8gZGVsYXksIEVSUjAwOTg3OC4gKi8KKyAgICAgICAgbmVlZERlbGF5ID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmVlZERlbGF5ID0gZmFsc2U7CisgICAgfQorCisgICAgTUNHLT5DNyA9IChNQ0ctPkM3ICYgfk1DR19DN19PU0NTRUxfTUFTSykgfCBNQ0dfQzdfT1NDU0VMKG9zY3NlbCk7CisgICAgaWYgKG5lZWREZWxheSkKKyAgICB7CisgICAgICAgIC8qIEVSUjAwOTg3OCBEZWxheSBhdCBsZWFzdCA1MCBtaWNyby1zZWNvbmRzIGZvciBleHRlcm5hbCBjbG9jayBjaGFuZ2UgdmFsaWQuICovCisgICAgICAgIGkgPSAxNTAwVTsKKyAgICAgICAgd2hpbGUgKGktLSkKKyAgICAgICAgeworICAgICAgICAgICAgX19OT1AoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IENMT0NLX1NldEludGVybmFsUmVmQ2xrQ29uZmlnKHVpbnQ4X3QgZW5hYmxlTW9kZSwgbWNnX2lyY19tb2RlX3QgaXJjcywgdWludDhfdCBmY3JkaXYpCit7CisgICAgdWludDMyX3QgbWNnT3V0Q2xrU3RhdGUgPSBNQ0dfU19DTEtTVF9WQUw7CisgICAgbWNnX2lyY19tb2RlX3QgY3VySXJjcyA9IChtY2dfaXJjX21vZGVfdClNQ0dfU19JUkNTVF9WQUw7CisgICAgdWludDhfdCBjdXJGY3JkaXYgPSBNQ0dfU0NfRkNSRElWX1ZBTDsKKworI2lmIChkZWZpbmVkKE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pICYmIE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pCisgICAgLyogSWYgTUNHSVJDTEsgaXMgdXNlZCBhcyBzeXN0ZW0gY2xvY2sgc291cmNlLiAqLworICAgIGlmIChrTUNHX0Nsa091dFN0YXRJbnQgPT0gbWNnT3V0Q2xrU3RhdGUpCisgICAgeworICAgICAgICAvKiBJZiBuZWVkIHRvIGNoYW5nZSBNQ0dJUkNMSyBzb3VyY2Ugb3IgZHJpdmVyLCByZXR1cm4gZXJyb3IuICovCisgICAgICAgIGlmICgoKGtNQ0dfSXJjRmFzdCA9PSBjdXJJcmNzKSAmJiAoZmNyZGl2ICE9IGN1ckZjcmRpdikpIHx8IChpcmNzICE9IGN1cklyY3MpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19NQ0dfU291cmNlVXNlZDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgLyogSWYgbmVlZCB0byB1cGRhdGUgdGhlIEZDUkRJVi4gKi8KKyAgICBpZiAoZmNyZGl2ICE9IGN1ckZjcmRpdikKKyAgICB7CisgICAgICAgIC8qIElmIGZhc3QgSVJDIGlzIGluIHVzZSBjdXJyZW50bHksIGNoYW5nZSB0byBzbG93IElSQy4gKi8KKyAgICAgICAgaWYgKChrTUNHX0lyY0Zhc3QgPT0gY3VySXJjcykgJiYgKChtY2dPdXRDbGtTdGF0ZSA9PSBrTUNHX0Nsa091dFN0YXRJbnQpIHx8IChNQ0ctPkMxICYgTUNHX0MxX0lSQ0xLRU5fTUFTSykpKQorICAgICAgICB7CisgICAgICAgICAgICBNQ0ctPkMyID0gKChNQ0ctPkMyICYgfk1DR19DMl9JUkNTX01BU0spIHwgKE1DR19DMl9JUkNTKGtNQ0dfSXJjU2xvdykpKTsKKyAgICAgICAgICAgIHdoaWxlIChNQ0dfU19JUkNTVF9WQUwgIT0ga01DR19JcmNTbG93KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIFVwZGF0ZSBGQ1JESVYuICovCisgICAgICAgIE1DRy0+U0MgPSAoTUNHLT5TQyAmIH4oTUNHX1NDX0ZDUkRJVl9NQVNLIHwgTUNHX1NDX0FUTUZfTUFTSyB8IE1DR19TQ19MT0NTMF9NQVNLKSkgfCBNQ0dfU0NfRkNSRElWKGZjcmRpdik7CisgICAgfQorCisgICAgLyogU2V0IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBzZWxlY3Rpb24uICovCisgICAgTUNHLT5DMiA9IChNQ0ctPkMyICYgfk1DR19DMl9JUkNTX01BU0spIHwgKE1DR19DMl9JUkNTKGlyY3MpKTsKKyAgICBNQ0ctPkMxID0gKE1DRy0+QzEgJiB+KE1DR19DMV9JUkNMS0VOX01BU0sgfCBNQ0dfQzFfSVJFRlNURU5fTUFTSykpIHwgKHVpbnQ4X3QpZW5hYmxlTW9kZTsKKworICAgIC8qIElmIE1DR0lSQ0xLIGlzIHVzZWQsIG5lZWQgdG8gd2FpdCBmb3IgTUNHX1NfSVJDU1QuICovCisgICAgaWYgKChtY2dPdXRDbGtTdGF0ZSA9PSBrTUNHX0Nsa091dFN0YXRJbnQpIHx8IChlbmFibGVNb2RlICYga01DR19JcmNsa0VuYWJsZSkpCisgICAgeworICAgICAgICB3aGlsZSAoTUNHX1NfSVJDU1RfVkFMICE9IGlyY3MpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKKworCit2b2lkIENMT0NLX1NldE9zYzBNb25pdG9yTW9kZShtY2dfbW9uaXRvcl9tb2RlX3QgbW9kZSkKK3sKKyAgICAvKiBDbGVhciB0aGUgcHJldmlvdXMgZmxhZywgTUNHX1NDW0xPQ1MwXS4gKi8KKyAgICBNQ0ctPlNDICY9IH5NQ0dfU0NfQVRNRl9NQVNLOworCisgICAgaWYgKGtNQ0dfTW9uaXRvck5vbmUgPT0gbW9kZSkKKyAgICB7CisgICAgICAgIE1DRy0+QzYgJj0gfk1DR19DNl9DTUUwX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChrTUNHX01vbml0b3JJbnQgPT0gbW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgTUNHLT5DMiAmPSB+TUNHX0MyX0xPQ1JFMF9NQVNLOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTUNHLT5DMiB8PSBNQ0dfQzJfTE9DUkUwX01BU0s7CisgICAgICAgIH0KKyAgICAgICAgTUNHLT5DNiB8PSBNQ0dfQzZfQ01FMF9NQVNLOworICAgIH0KK30KKworCit2b2lkIENMT0NLX1NldFJ0Y09zY01vbml0b3JNb2RlKG1jZ19tb25pdG9yX21vZGVfdCBtb2RlKQoreworICAgIHVpbnQ4X3QgbWNnX2M4ID0gTUNHLT5DODsKKworICAgIG1jZ19jOCAmPSB+KE1DR19DOF9DTUUxX01BU0sgfCBNQ0dfQzhfTE9DUkUxX01BU0spOworCisgICAgaWYgKGtNQ0dfTW9uaXRvck5vbmUgIT0gbW9kZSkKKyAgICB7CisgICAgICAgIGlmIChrTUNHX01vbml0b3JSZXNldCA9PSBtb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBtY2dfYzggfD0gTUNHX0M4X0xPQ1JFMV9NQVNLOworICAgICAgICB9CisgICAgICAgIG1jZ19jOCB8PSBNQ0dfQzhfQ01FMV9NQVNLOworICAgIH0KKyAgICBNQ0ctPkM4ID0gbWNnX2M4OworfQorCisKK3VpbnQzMl90IENMT0NLX0dldFN0YXR1c0ZsYWdzKHZvaWQpCit7CisgICAgdWludDMyX3QgcmV0ID0gMFU7CisKKyAgICBpZiAoTUNHLT5DOCAmIE1DR19DOF9MT0NTMV9NQVNLKQorICAgIHsKKyAgICAgICAgcmV0IHw9IGtNQ0dfUnRjT3NjTG9zdEZsYWc7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgQ0xPQ0tfQ2xlYXJTdGF0dXNGbGFncyh1aW50MzJfdCBtYXNrKQoreworICAgIHVpbnQ4X3QgcmVnOworCisgICAgaWYgKG1hc2sgJiBrTUNHX1J0Y09zY0xvc3RGbGFnKQorICAgIHsKKyAgICAgICAgcmVnID0gTUNHLT5DODsKKyAgICAgICAgTUNHLT5DOCA9IHJlZzsKKyAgICB9Cit9CisKK3ZvaWQgQ0xPQ0tfSW5pdE9zYzAob3NjX2NvbmZpZ190IGNvbnN0ICpjb25maWcpCit7CisgICAgdWludDhfdCByYW5nZSA9IENMT0NLX0dldE9zY1JhbmdlRnJvbUZyZXEoY29uZmlnLT5mcmVxKTsKKworCisgICAgTUNHLT5DMiA9ICgoTUNHLT5DMiAmIH5PU0NfTU9ERV9NQVNLKSB8IE1DR19DMl9SQU5HRShyYW5nZSkgfCAodWludDhfdCljb25maWctPndvcmtNb2RlKTsKKworICAgIGlmICgoa09TQ19Nb2RlRXh0ICE9IGNvbmZpZy0+d29ya01vZGUpCisgICAgICAgICAgICApCisgICAgeworICAgICAgICAvKiBXYWl0IGZvciBzdGFibGUuICovCisgICAgICAgIHdoaWxlICghKE1DRy0+UyAmIE1DR19TX09TQ0lOSVQwX01BU0spKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ0xPQ0tfRGVpbml0T3NjMCh2b2lkKQoreworICAgIE1DRy0+QzIgJj0gfk9TQ19NT0RFX01BU0s7Cit9CisKKworc3RhdHVzX3QgQ0xPQ0tfVHJpbUludGVybmFsUmVmQ2xrKHVpbnQzMl90IGV4dEZyZXEsIHVpbnQzMl90IGRlc2lyZUZyZXEsIHVpbnQzMl90ICphY3R1YWxGcmVxLCBtY2dfYXRtX3NlbGVjdF90IGF0bXMpCit7CisgICAgdWludDMyX3QgbXVsdGk7IC8qIGV4dEZyZXEgLyBkZXNpcmVGcmVxICovCisgICAgdWludDMyX3QgYWN0djsgIC8qIEF1dG8gdHJpbSB2YWx1ZS4gKi8KKyAgICB1aW50OF90IG1jZ19zYzsKKworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB0cmltUmFuZ2VbMl1bMl0gPSB7CisgICAgICAgIC8qICAgICBNaW4gICAgICAgICAgIE1heCAgICAgICovCisgICAgICAgIHtUUklNX1NJUkNfTUlOLCBUUklNX1NJUkNfTUFYfSwgLyogU2xvdyBJUkMuICovCisgICAgICAgIHtUUklNX0ZJUkNfTUlOLCBUUklNX0ZJUkNfTUFYfSAgLyogRmFzdCBJUkMuICovCisgICAgfTsKKworICAgIGlmICgoZXh0RnJlcSA+IFRSSU1fUkVGX0NMS19NQVgpIHx8IChleHRGcmVxIDwgVFJJTV9SRUZfQ0xLX01JTikpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19NQ0dfQXRtQnVzQ2xvY2tJbnZhbGlkOworICAgIH0KKworICAgIC8qIENoZWNrIGRlc2lyZWQgZnJlcXVlbmN5IHJhbmdlLiAqLworICAgIGlmICgoZGVzaXJlRnJlcSA8IHRyaW1SYW5nZVthdG1zXVswXSkgfHwgKGRlc2lyZUZyZXEgPiB0cmltUmFuZ2VbYXRtc11bMV0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTUNHX0F0bURlc2lyZWRGcmVxSW52YWxpZDsKKyAgICB9CisKKyAgICAvKgorICAgICAgIE1ha2Ugc3VyZSBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgaXMgbm90IHVzZWQgdG8gZ2VuZXJhdGUgYnVzIGNsb2NrLgorICAgICAgIEhlcmUgb25seSBuZWVkIHRvIGNoZWNrIChNQ0dfU19JUkVGU1QgPT0gMSkuCisgICAgICovCisgICAgaWYgKE1DR19TX0lSRUZTVChrTUNHX0ZsbFNyY0ludGVybmFsKSA9PSAoTUNHLT5TICYgTUNHX1NfSVJFRlNUX01BU0spKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTUNHX0F0bUlyY1VzZWQ7CisgICAgfQorCisgICAgbXVsdGkgPSBleHRGcmVxIC8gZGVzaXJlRnJlcTsKKyAgICBhY3R2ID0gbXVsdGkgKiAyMVU7CisKKyAgICBpZiAoa01DR19BdG1TZWw0bSA9PSBhdG1zKQorICAgIHsKKyAgICAgICAgYWN0diAqPSAxMjhVOworICAgIH0KKworICAgIC8qIE5vdyBiZWdpbiB0byBzdGFydCB0cmltLiAqLworICAgIE1DRy0+QVRDVkwgPSAodWludDhfdClhY3R2OworICAgIE1DRy0+QVRDVkggPSAodWludDhfdCkoYWN0diA+PiA4VSk7CisKKyAgICBtY2dfc2MgPSBNQ0ctPlNDOworICAgIG1jZ19zYyAmPSB+KE1DR19TQ19BVE1TX01BU0sgfCBNQ0dfU0NfTE9DUzBfTUFTSyk7CisgICAgbWNnX3NjIHw9IChNQ0dfU0NfQVRNRl9NQVNLIHwgTUNHX1NDX0FUTVMoYXRtcykpOworICAgIE1DRy0+U0MgPSAobWNnX3NjIHwgTUNHX1NDX0FUTUVfTUFTSyk7CisKKyAgICAvKiBXYWl0IGZvciBmaW5pc2hlZC4gKi8KKyAgICB3aGlsZSAoTUNHLT5TQyAmIE1DR19TQ19BVE1FX01BU0spCisgICAgeworICAgIH0KKworICAgIC8qIEVycm9yIG9jY3Vycz8gKi8KKyAgICBpZiAoTUNHLT5TQyAmIE1DR19TQ19BVE1GX01BU0spCisgICAgeworICAgICAgICAvKiBDbGVhciB0aGUgZmFpbGVkIGZsYWcuICovCisgICAgICAgIE1DRy0+U0MgPSBtY2dfc2M7CisgICAgICAgIHJldHVybiBrU3RhdHVzX01DR19BdG1IYXJkd2FyZUZhaWw7CisgICAgfQorCisgICAgKmFjdHVhbEZyZXEgPSBleHRGcmVxIC8gbXVsdGk7CisKKyAgICBpZiAoa01DR19BdG1TZWw0bSA9PSBhdG1zKQorICAgIHsKKyAgICAgICAgc19mYXN0SXJjRnJlcSA9ICphY3R1YWxGcmVxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzX3Nsb3dJcmNGcmVxID0gKmFjdHVhbEZyZXE7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworbWNnX21vZGVfdCBDTE9DS19HZXRNb2RlKHZvaWQpCit7CisgICAgbWNnX21vZGVfdCBtb2RlID0ga01DR19Nb2RlRXJyb3I7CisgICAgdWludDMyX3QgY2xrc3QgPSBNQ0dfU19DTEtTVF9WQUw7CisgICAgdWludDMyX3QgaXJlZnN0ID0gTUNHX1NfSVJFRlNUX1ZBTDsKKyAgICB1aW50MzJfdCBscCA9IE1DR19DMl9MUF9WQUw7CisKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZSBhbmQgUmVnaXN0ZXJzCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgICAgTW9kZSAgIHwgICBDTEtTVCAgICB8ICAgSVJFRlNUICAgfCAgIFBMTFNUICAgfCAgICAgIExQCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgICAgRkVJICAgIHwgIDAwKEZMTCkgICB8ICAgMShJTlQpICAgfCAgIDAoRkxMKSAgfCAgICAgIFgKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgICAgICBGRUUgICAgfCAgMDAoRkxMKSAgIHwgICAwKEVYVCkgICB8ICAgMChGTEwpICB8ICAgICAgWAorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgIEZCRSAgICB8ICAxMChFWFQpICAgfCAgIDAoRVhUKSAgIHwgICAwKEZMTCkgIHwgICAwKE5PUk1BTCkKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgICAgICBGQkkgICAgfCAgMDEoSU5UKSAgIHwgICAxKElOVCkgICB8ICAgMChGTEwpICB8ICAgMChOT1JNQUwpCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgICAgQkxQSSAgIHwgIDAxKElOVCkgICB8ICAgMShJTlQpICAgfCAgIDAoRkxMKSAgfCAgIDEoTE9XIFBPV0VSKQorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgIEJMUEUgICB8ICAxMChFWFQpICAgfCAgIDAoRVhUKSAgIHwgICAgIFggICAgIHwgICAxKExPVyBQT1dFUikKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgICAgICBQRUUgICAgfCAgMTEoUExMKSAgIHwgICAwKEVYVCkgICB8ICAgMShQTEwpICB8ICAgICAgWAorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgIFBCRSAgICB8ICAxMChFWFQpICAgfCAgIDAoRVhUKSAgIHwgICAxKFBMTCkgIHwgICBPKE5PUk1BTCkKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgICAgICBQQkkgICAgfCAgMDEoSU5UKSAgIHwgICAxKElOVCkgICB8ICAgMShQTEwpICB8ICAgMChOT1JNQUwpCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgICAgUEVJICAgIHwgIDExKFBMTCkgICB8ICAgMShJTlQpICAgfCAgIDEoUExMKSAgfCAgICAgIFgKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICBzd2l0Y2ggKGNsa3N0KQorICAgIHsKKyAgICAgICAgY2FzZSBrTUNHX0Nsa091dFN0YXRGbGw6CisgICAgICAgICAgICBpZiAoa01DR19GbGxTcmNFeHRlcm5hbCA9PSBpcmVmc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbW9kZSA9IGtNQ0dfTW9kZUZFRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtb2RlID0ga01DR19Nb2RlRkVJOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga01DR19DbGtPdXRTdGF0SW50OgorICAgICAgICAgICAgaWYgKGxwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1vZGUgPSBrTUNHX01vZGVCTFBJOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IGtNQ0dfTW9kZUZCSTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrTUNHX0Nsa091dFN0YXRFeHQ6CisgICAgICAgICAgICBpZiAobHApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbW9kZSA9IGtNQ0dfTW9kZUJMUEU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtb2RlID0ga01DR19Nb2RlRkJFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG1vZGU7Cit9CisKK3N0YXR1c190IENMT0NLX1NldEZlaU1vZGUobWNnX2RteDMyX3QgZG14MzIsIG1jZ19kcnNfdCBkcnMsIHZvaWQgKCpmbGxTdGFibGVEZWxheSkodm9pZCkpCit7CisgICAgdWludDhfdCBtY2dfYzQ7CisgICAgYm9vbCBjaGFuZ2VfZHJzID0gZmFsc2U7CisKKyNpZiAoZGVmaW5lZChNQ0dfQ09ORklHX0NIRUNLX1BBUkFNKSAmJiBNQ0dfQ09ORklHX0NIRUNLX1BBUkFNKQorICAgIG1jZ19tb2RlX3QgbW9kZSA9IENMT0NLX0dldE1vZGUoKTsKKyAgICBpZiAoISgoa01DR19Nb2RlRkVJID09IG1vZGUpIHx8IChrTUNHX01vZGVGQkkgPT0gbW9kZSkgfHwgKGtNQ0dfTW9kZUZCRSA9PSBtb2RlKSB8fCAoa01DR19Nb2RlRkVFID09IG1vZGUpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGU7CisgICAgfQorI2VuZGlmCisgICAgbWNnX2M0ID0gTUNHLT5DNDsKKworICAgIC8qCisgICAgICAgRXJyYXRhOiBFUlIwMDc5OTMKKyAgICAgICBXb3JrYXJvdW5kOiBJbnZlcnQgTUNHX0M0W0RNWDMyXSBvciBjaGFuZ2UgTUNHX0M0W0RSU1RfRFJTXSBiZWZvcmUKKyAgICAgICByZWZlcmVuY2UgY2xvY2sgc291cmNlIGNoYW5nZXMsIHRoZW4gcmVzZXQgdG8gcHJldmlvdXMgdmFsdWUgYWZ0ZXIKKyAgICAgICByZWZlcmVuY2UgY2xvY2sgY2hhbmdlcy4KKyAgICAgKi8KKyAgICBpZiAoa01DR19GbGxTcmNFeHRlcm5hbCA9PSBNQ0dfU19JUkVGU1RfVkFMKQorICAgIHsKKyAgICAgICAgY2hhbmdlX2RycyA9IHRydWU7CisgICAgICAgIC8qIENoYW5nZSB0aGUgTFNCIG9mIERSU1RfRFJTLiAqLworICAgICAgICBNQ0ctPkM0IF49ICgxVSA8PCBNQ0dfQzRfRFJTVF9EUlNfU0hJRlQpOworICAgIH0KKworICAgIC8qIFNldCBDTEtTIGFuZCBJUkVGUy4gKi8KKyAgICBNQ0ctPkMxID0KKyAgICAgICAgKChNQ0ctPkMxICYgfihNQ0dfQzFfQ0xLU19NQVNLIHwgTUNHX0MxX0lSRUZTX01BU0spKSkgfCAoTUNHX0MxX0NMS1Moa01DR19DbGtPdXRTcmNPdXQpICAgICAgICAvKiBDTEtTID0gMCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1DR19DMV9JUkVGUyhrTUNHX0ZsbFNyY0ludGVybmFsKSk7IC8qIElSRUZTID0gMSAqLworCisgICAgLyogV2FpdCBhbmQgY2hlY2sgc3RhdHVzLiAqLworICAgIHdoaWxlIChrTUNHX0ZsbFNyY0ludGVybmFsICE9IE1DR19TX0lSRUZTVF9WQUwpCisgICAgeworICAgIH0KKworICAgIC8qIEVycmF0YTogRVJSMDA3OTkzICovCisgICAgaWYgKGNoYW5nZV9kcnMpCisgICAgeworICAgICAgICBNQ0ctPkM0ID0gbWNnX2M0OworICAgIH0KKworICAgIC8qIEluIEZFSSBtb2RlLCB0aGUgTUNHX0M0W0RNWDMyXSBpcyBzZXQgdG8gMFUuICovCisgICAgTUNHLT5DNCA9IChtY2dfYzQgJiB+KE1DR19DNF9ETVgzMl9NQVNLIHwgTUNHX0M0X0RSU1RfRFJTX01BU0spKSB8IChNQ0dfQzRfRE1YMzIoZG14MzIpIHwgTUNHX0M0X0RSU1RfRFJTKGRycykpOworCisgICAgLyogQ2hlY2sgTUNHX1NbQ0xLU1RdICovCisgICAgd2hpbGUgKGtNQ0dfQ2xrT3V0U3RhdEZsbCAhPSBNQ0dfU19DTEtTVF9WQUwpCisgICAgeworICAgIH0KKworICAgIC8qIFdhaXQgZm9yIEZMTCBzdGFibGUgdGltZS4gKi8KKyAgICBpZiAoZmxsU3RhYmxlRGVsYXkpCisgICAgeworICAgICAgICBmbGxTdGFibGVEZWxheSgpOworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IENMT0NLX1NldEZlZU1vZGUodWludDhfdCBmcmRpdiwgbWNnX2RteDMyX3QgZG14MzIsIG1jZ19kcnNfdCBkcnMsIHZvaWQgKCpmbGxTdGFibGVEZWxheSkodm9pZCkpCit7CisgICAgdWludDhfdCBtY2dfYzQ7CisgICAgYm9vbCBjaGFuZ2VfZHJzID0gZmFsc2U7CisKKyNpZiAoZGVmaW5lZChNQ0dfQ09ORklHX0NIRUNLX1BBUkFNKSAmJiBNQ0dfQ09ORklHX0NIRUNLX1BBUkFNKQorICAgIG1jZ19tb2RlX3QgbW9kZSA9IENMT0NLX0dldE1vZGUoKTsKKyAgICBpZiAoISgoa01DR19Nb2RlRkVFID09IG1vZGUpIHx8IChrTUNHX01vZGVGQkkgPT0gbW9kZSkgfHwgKGtNQ0dfTW9kZUZCRSA9PSBtb2RlKSB8fCAoa01DR19Nb2RlRkVJID09IG1vZGUpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGU7CisgICAgfQorI2VuZGlmCisgICAgbWNnX2M0ID0gTUNHLT5DNDsKKworICAgIC8qCisgICAgICAgRXJyYXRhOiBFUlIwMDc5OTMKKyAgICAgICBXb3JrYXJvdW5kOiBJbnZlcnQgTUNHX0M0W0RNWDMyXSBvciBjaGFuZ2UgTUNHX0M0W0RSU1RfRFJTXSBiZWZvcmUKKyAgICAgICByZWZlcmVuY2UgY2xvY2sgc291cmNlIGNoYW5nZXMsIHRoZW4gcmVzZXQgdG8gcHJldmlvdXMgdmFsdWUgYWZ0ZXIKKyAgICAgICByZWZlcmVuY2UgY2xvY2sgY2hhbmdlcy4KKyAgICAgKi8KKyAgICBpZiAoa01DR19GbGxTcmNJbnRlcm5hbCA9PSBNQ0dfU19JUkVGU1RfVkFMKQorICAgIHsKKyAgICAgICAgY2hhbmdlX2RycyA9IHRydWU7CisgICAgICAgIC8qIENoYW5nZSB0aGUgTFNCIG9mIERSU1RfRFJTLiAqLworICAgICAgICBNQ0ctPkM0IF49ICgxVSA8PCBNQ0dfQzRfRFJTVF9EUlNfU0hJRlQpOworICAgIH0KKworICAgIC8qIFNldCBDTEtTIGFuZCBJUkVGUy4gKi8KKyAgICBNQ0ctPkMxID0gKChNQ0ctPkMxICYgfihNQ0dfQzFfQ0xLU19NQVNLIHwgTUNHX0MxX0ZSRElWX01BU0sgfCBNQ0dfQzFfSVJFRlNfTUFTSykpIHwKKyAgICAgICAgICAgICAgIChNQ0dfQzFfQ0xLUyhrTUNHX0Nsa091dFNyY091dCkgICAgICAgICAvKiBDTEtTID0gMCAqLworICAgICAgICAgICAgICAgIHwgTUNHX0MxX0ZSRElWKGZyZGl2KSAgICAgICAgICAgICAgICAgIC8qIEZSRElWICovCisgICAgICAgICAgICAgICAgfCBNQ0dfQzFfSVJFRlMoa01DR19GbGxTcmNFeHRlcm5hbCkpKTsgLyogSVJFRlMgPSAwICovCisKKyAgICAvKiBJZiB1c2UgZXh0ZXJuYWwgY3J5c3RhbCBhcyBjbG9jayBzb3VyY2UsIHdhaXQgZm9yIGl0IHN0YWJsZS4gKi8KKyAgICBpZiAoTUNHX0M3X09TQ1NFTChrTUNHX09zY3NlbE9zYykgPT0gKE1DRy0+QzcgJiBNQ0dfQzdfT1NDU0VMX01BU0spKQorICAgIHsKKyAgICAgICAgaWYgKE1DRy0+QzIgJiBNQ0dfQzJfRVJFRlNfTUFTSykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCEoTUNHLT5TICYgTUNHX1NfT1NDSU5JVDBfTUFTSykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBXYWl0IGFuZCBjaGVjayBzdGF0dXMuICovCisgICAgd2hpbGUgKGtNQ0dfRmxsU3JjRXh0ZXJuYWwgIT0gTUNHX1NfSVJFRlNUX1ZBTCkKKyAgICB7CisgICAgfQorCisgICAgLyogRXJyYXRhOiBFUlIwMDc5OTMgKi8KKyAgICBpZiAoY2hhbmdlX2RycykKKyAgICB7CisgICAgICAgIE1DRy0+QzQgPSBtY2dfYzQ7CisgICAgfQorCisgICAgLyogU2V0IERSUyBhbmQgRE1YMzIuICovCisgICAgbWNnX2M0ID0gKChtY2dfYzQgJiB+KE1DR19DNF9ETVgzMl9NQVNLIHwgTUNHX0M0X0RSU1RfRFJTX01BU0spKSB8IChNQ0dfQzRfRE1YMzIoZG14MzIpIHwgTUNHX0M0X0RSU1RfRFJTKGRycykpKTsKKyAgICBNQ0ctPkM0ID0gbWNnX2M0OworCisgICAgLyogV2FpdCBmb3IgRFJTVF9EUlMgdXBkYXRlLiAqLworICAgIHdoaWxlIChNQ0ctPkM0ICE9IG1jZ19jNCkKKyAgICB7CisgICAgfQorCisgICAgLyogQ2hlY2sgTUNHX1NbQ0xLU1RdICovCisgICAgd2hpbGUgKGtNQ0dfQ2xrT3V0U3RhdEZsbCAhPSBNQ0dfU19DTEtTVF9WQUwpCisgICAgeworICAgIH0KKworICAgIC8qIFdhaXQgZm9yIEZMTCBzdGFibGUgdGltZS4gKi8KKyAgICBpZiAoZmxsU3RhYmxlRGVsYXkpCisgICAgeworICAgICAgICBmbGxTdGFibGVEZWxheSgpOworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IENMT0NLX1NldEZiaU1vZGUobWNnX2RteDMyX3QgZG14MzIsIG1jZ19kcnNfdCBkcnMsIHZvaWQgKCpmbGxTdGFibGVEZWxheSkodm9pZCkpCit7CisgICAgdWludDhfdCBtY2dfYzQ7CisgICAgYm9vbCBjaGFuZ2VfZHJzID0gZmFsc2U7CisKKyNpZiAoZGVmaW5lZChNQ0dfQ09ORklHX0NIRUNLX1BBUkFNKSAmJiBNQ0dfQ09ORklHX0NIRUNLX1BBUkFNKQorICAgIG1jZ19tb2RlX3QgbW9kZSA9IENMT0NLX0dldE1vZGUoKTsKKworICAgIGlmICghKChrTUNHX01vZGVGRUUgPT0gbW9kZSkgfHwgKGtNQ0dfTW9kZUZCSSA9PSBtb2RlKSB8fCAoa01DR19Nb2RlRkJFID09IG1vZGUpIHx8IChrTUNHX01vZGVGRUkgPT0gbW9kZSkgfHwKKyAgICAgICAgICAoa01DR19Nb2RlQkxQSSA9PSBtb2RlKSkpCisKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGU7CisgICAgfQorI2VuZGlmCisKKyAgICBtY2dfYzQgPSBNQ0ctPkM0OworCisgICAgTUNHLT5DMiAmPSB+TUNHX0MyX0xQX01BU0s7IC8qIERpc2FibGUgbG93cG93ZXIuICovCisKKyAgICAvKgorICAgICAgIEVycmF0YTogRVJSMDA3OTkzCisgICAgICAgV29ya2Fyb3VuZDogSW52ZXJ0IE1DR19DNFtETVgzMl0gb3IgY2hhbmdlIE1DR19DNFtEUlNUX0RSU10gYmVmb3JlCisgICAgICAgcmVmZXJlbmNlIGNsb2NrIHNvdXJjZSBjaGFuZ2VzLCB0aGVuIHJlc2V0IHRvIHByZXZpb3VzIHZhbHVlIGFmdGVyCisgICAgICAgcmVmZXJlbmNlIGNsb2NrIGNoYW5nZXMuCisgICAgICovCisgICAgaWYgKGtNQ0dfRmxsU3JjRXh0ZXJuYWwgPT0gTUNHX1NfSVJFRlNUX1ZBTCkKKyAgICB7CisgICAgICAgIGNoYW5nZV9kcnMgPSB0cnVlOworICAgICAgICAvKiBDaGFuZ2UgdGhlIExTQiBvZiBEUlNUX0RSUy4gKi8KKyAgICAgICAgTUNHLT5DNCBePSAoMVUgPDwgTUNHX0M0X0RSU1RfRFJTX1NISUZUKTsKKyAgICB9CisKKyAgICAvKiBTZXQgQ0xLUyBhbmQgSVJFRlMuICovCisgICAgTUNHLT5DMSA9CisgICAgICAgICgoTUNHLT5DMSAmIH4oTUNHX0MxX0NMS1NfTUFTSyB8IE1DR19DMV9JUkVGU19NQVNLKSkgfCAoTUNHX0MxX0NMS1Moa01DR19DbGtPdXRTcmNJbnRlcm5hbCkgICAgLyogQ0xLUyA9IDEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1DR19DMV9JUkVGUyhrTUNHX0ZsbFNyY0ludGVybmFsKSkpOyAvKiBJUkVGUyA9IDEgKi8KKworICAgIC8qIFdhaXQgYW5kIGNoZWNrIHN0YXR1cy4gKi8KKyAgICB3aGlsZSAoa01DR19GbGxTcmNJbnRlcm5hbCAhPSBNQ0dfU19JUkVGU1RfVkFMKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBFcnJhdGE6IEVSUjAwNzk5MyAqLworICAgIGlmIChjaGFuZ2VfZHJzKQorICAgIHsKKyAgICAgICAgTUNHLT5DNCA9IG1jZ19jNDsKKyAgICB9CisKKyAgICB3aGlsZSAoa01DR19DbGtPdXRTdGF0SW50ICE9IE1DR19TX0NMS1NUX1ZBTCkKKyAgICB7CisgICAgfQorCisgICAgTUNHLT5DNCA9IChtY2dfYzQgJiB+KE1DR19DNF9ETVgzMl9NQVNLIHwgTUNHX0M0X0RSU1RfRFJTX01BU0spKSB8IChNQ0dfQzRfRE1YMzIoZG14MzIpIHwgTUNHX0M0X0RSU1RfRFJTKGRycykpOworCisgICAgLyogV2FpdCBmb3IgRkxMIHN0YWJsZSB0aW1lLiAqLworICAgIGlmIChmbGxTdGFibGVEZWxheSkKKyAgICB7CisgICAgICAgIGZsbFN0YWJsZURlbGF5KCk7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgQ0xPQ0tfU2V0RmJlTW9kZSh1aW50OF90IGZyZGl2LCBtY2dfZG14MzJfdCBkbXgzMiwgbWNnX2Ryc190IGRycywgdm9pZCAoKmZsbFN0YWJsZURlbGF5KSh2b2lkKSkKK3sKKyAgICB1aW50OF90IG1jZ19jNDsKKyAgICBib29sIGNoYW5nZV9kcnMgPSBmYWxzZTsKKworI2lmIChkZWZpbmVkKE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pICYmIE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pCisgICAgbWNnX21vZGVfdCBtb2RlID0gQ0xPQ0tfR2V0TW9kZSgpOworICAgIGlmICghKChrTUNHX01vZGVGRUUgPT0gbW9kZSkgfHwgKGtNQ0dfTW9kZUZCSSA9PSBtb2RlKSB8fCAoa01DR19Nb2RlRkJFID09IG1vZGUpIHx8IChrTUNHX01vZGVGRUkgPT0gbW9kZSkgfHwKKyAgICAgICAgICAoa01DR19Nb2RlQkxQRSA9PSBtb2RlKSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19NQ0dfTW9kZVVucmVhY2hhYmxlOworICAgIH0KKyNlbmRpZgorCisKKyAgICAvKiBTZXQgTFAgYml0IHRvIGVuYWJsZSB0aGUgRkxMICovCisgICAgTUNHLT5DMiAmPSB+TUNHX0MyX0xQX01BU0s7CisKKyAgICBtY2dfYzQgPSBNQ0ctPkM0OworCisgICAgLyoKKyAgICAgICBFcnJhdGE6IEVSUjAwNzk5MworICAgICAgIFdvcmthcm91bmQ6IEludmVydCBNQ0dfQzRbRE1YMzJdIG9yIGNoYW5nZSBNQ0dfQzRbRFJTVF9EUlNdIGJlZm9yZQorICAgICAgIHJlZmVyZW5jZSBjbG9jayBzb3VyY2UgY2hhbmdlcywgdGhlbiByZXNldCB0byBwcmV2aW91cyB2YWx1ZSBhZnRlcgorICAgICAgIHJlZmVyZW5jZSBjbG9jayBjaGFuZ2VzLgorICAgICAqLworICAgIGlmIChrTUNHX0ZsbFNyY0ludGVybmFsID09IE1DR19TX0lSRUZTVF9WQUwpCisgICAgeworICAgICAgICBjaGFuZ2VfZHJzID0gdHJ1ZTsKKyAgICAgICAgLyogQ2hhbmdlIHRoZSBMU0Igb2YgRFJTVF9EUlMuICovCisgICAgICAgIE1DRy0+QzQgXj0gKDFVIDw8IE1DR19DNF9EUlNUX0RSU19TSElGVCk7CisgICAgfQorCisgICAgLyogU2V0IENMS1MgYW5kIElSRUZTLiAqLworICAgIE1DRy0+QzEgPSAoKE1DRy0+QzEgJiB+KE1DR19DMV9DTEtTX01BU0sgfCBNQ0dfQzFfRlJESVZfTUFTSyB8IE1DR19DMV9JUkVGU19NQVNLKSkgfAorICAgICAgICAgICAgICAgKE1DR19DMV9DTEtTKGtNQ0dfQ2xrT3V0U3JjRXh0ZXJuYWwpICAgIC8qIENMS1MgPSAyICovCisgICAgICAgICAgICAgICAgfCBNQ0dfQzFfRlJESVYoZnJkaXYpICAgICAgICAgICAgICAgICAgLyogRlJESVYgPSBmcmRpdiAqLworICAgICAgICAgICAgICAgIHwgTUNHX0MxX0lSRUZTKGtNQ0dfRmxsU3JjRXh0ZXJuYWwpKSk7IC8qIElSRUZTID0gMCAqLworCisgICAgLyogSWYgdXNlIGV4dGVybmFsIGNyeXN0YWwgYXMgY2xvY2sgc291cmNlLCB3YWl0IGZvciBpdCBzdGFibGUuICovCisgICAgaWYgKE1DR19DN19PU0NTRUwoa01DR19Pc2NzZWxPc2MpID09IChNQ0ctPkM3ICYgTUNHX0M3X09TQ1NFTF9NQVNLKSkKKyAgICB7CisgICAgICAgIGlmIChNQ0ctPkMyICYgTUNHX0MyX0VSRUZTX01BU0spCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICghKE1DRy0+UyAmIE1DR19TX09TQ0lOSVQwX01BU0spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogV2FpdCBmb3IgUmVmZXJlbmNlIGNsb2NrIFN0YXR1cyBiaXQgdG8gY2xlYXIgKi8KKyAgICB3aGlsZSAoa01DR19GbGxTcmNFeHRlcm5hbCAhPSBNQ0dfU19JUkVGU1RfVkFMKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBFcnJhdGE6IEVSUjAwNzk5MyAqLworICAgIGlmIChjaGFuZ2VfZHJzKQorICAgIHsKKyAgICAgICAgTUNHLT5DNCA9IG1jZ19jNDsKKyAgICB9CisKKyAgICAvKiBTZXQgRFJTVF9EUlMgYW5kIERNWDMyLiAqLworICAgIG1jZ19jNCA9ICgobWNnX2M0ICYgfihNQ0dfQzRfRE1YMzJfTUFTSyB8IE1DR19DNF9EUlNUX0RSU19NQVNLKSkgfCAoTUNHX0M0X0RNWDMyKGRteDMyKSB8IE1DR19DNF9EUlNUX0RSUyhkcnMpKSk7CisKKyAgICAvKiBXYWl0IGZvciBjbG9jayBzdGF0dXMgYml0cyB0byBzaG93IGNsb2NrIHNvdXJjZSBpcyBleHQgcmVmIGNsayAqLworICAgIHdoaWxlIChrTUNHX0Nsa091dFN0YXRFeHQgIT0gTUNHX1NfQ0xLU1RfVkFMKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBXYWl0IGZvciBmbGwgc3RhYmxlIHRpbWUuICovCisgICAgaWYgKGZsbFN0YWJsZURlbGF5KQorICAgIHsKKyAgICAgICAgZmxsU3RhYmxlRGVsYXkoKTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBDTE9DS19TZXRCbHBpTW9kZSh2b2lkKQoreworI2lmIChkZWZpbmVkKE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pICYmIE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pCisgICAgaWYgKE1DR19TX0NMS1NUX1ZBTCAhPSBrTUNHX0Nsa091dFN0YXRJbnQpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19NQ0dfTW9kZVVucmVhY2hhYmxlOworICAgIH0KKyNlbmRpZiAvKiBNQ0dfQ09ORklHX0NIRUNLX1BBUkFNICovCisKKyAgICAvKiBTZXQgTFAuICovCisgICAgTUNHLT5DMiB8PSBNQ0dfQzJfTFBfTUFTSzsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IENMT0NLX1NldEJscGVNb2RlKHZvaWQpCit7CisjaWYgKGRlZmluZWQoTUNHX0NPTkZJR19DSEVDS19QQVJBTSkgJiYgTUNHX0NPTkZJR19DSEVDS19QQVJBTSkKKyAgICBpZiAoTUNHX1NfQ0xLU1RfVkFMICE9IGtNQ0dfQ2xrT3V0U3RhdEV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGU7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBTZXQgTFAgYml0IHRvIGVudGVyIEJMUEUgbW9kZS4gKi8KKyAgICBNQ0ctPkMyIHw9IE1DR19DMl9MUF9NQVNLOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworCitzdGF0dXNfdCBDTE9DS19FeHRlcm5hbE1vZGVUb0ZiZU1vZGVRdWljayh2b2lkKQoreworI2lmIChkZWZpbmVkKE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pICYmIE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pCisgICAgaWYgKE1DRy0+UyAmIE1DR19TX0lSRUZTVF9NQVNLKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTUNHX01vZGVJbnZhbGlkOworICAgIH0KKyNlbmRpZiAvKiBNQ0dfQ09ORklHX0NIRUNLX1BBUkFNICovCisKKyAgICAvKiBEaXNhYmxlIGxvdyBwb3dlciAqLworICAgIE1DRy0+QzIgJj0gfk1DR19DMl9MUF9NQVNLOworCisgICAgTUNHLT5DMSA9ICgoTUNHLT5DMSAmIH5NQ0dfQzFfQ0xLU19NQVNLKSB8IE1DR19DMV9DTEtTKGtNQ0dfQ2xrT3V0U3JjRXh0ZXJuYWwpKTsKKyAgICB3aGlsZSAoTUNHX1NfQ0xLU1RfVkFMICE9IGtNQ0dfQ2xrT3V0U3RhdEV4dCkKKyAgICB7CisgICAgfQorCisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBDTE9DS19JbnRlcm5hbE1vZGVUb0ZiaU1vZGVRdWljayh2b2lkKQoreworI2lmIChkZWZpbmVkKE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pICYmIE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pCisgICAgaWYgKCEoTUNHLT5TICYgTUNHX1NfSVJFRlNUX01BU0spKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTUNHX01vZGVJbnZhbGlkOworICAgIH0KKyNlbmRpZgorCisgICAgLyogRGlzYWJsZSBsb3cgcG93ZXIgKi8KKyAgICBNQ0ctPkMyICY9IH5NQ0dfQzJfTFBfTUFTSzsKKworICAgIE1DRy0+QzEgPSAoKE1DRy0+QzEgJiB+TUNHX0MxX0NMS1NfTUFTSykgfCBNQ0dfQzFfQ0xLUyhrTUNHX0Nsa091dFNyY0ludGVybmFsKSk7CisgICAgd2hpbGUgKE1DR19TX0NMS1NUX1ZBTCAhPSBrTUNHX0Nsa091dFN0YXRJbnQpCisgICAgeworICAgIH0KKworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgQ0xPQ0tfQm9vdFRvRmVpTW9kZShtY2dfZG14MzJfdCBkbXgzMiwgbWNnX2Ryc190IGRycywgdm9pZCAoKmZsbFN0YWJsZURlbGF5KSh2b2lkKSkKK3sKKyAgICByZXR1cm4gQ0xPQ0tfU2V0RmVpTW9kZShkbXgzMiwgZHJzLCBmbGxTdGFibGVEZWxheSk7Cit9CisKK3N0YXR1c190IENMT0NLX0Jvb3RUb0ZlZU1vZGUoCisgICAgbWNnX29zY3NlbF90IG9zY3NlbCwgdWludDhfdCBmcmRpdiwgbWNnX2RteDMyX3QgZG14MzIsIG1jZ19kcnNfdCBkcnMsIHZvaWQgKCpmbGxTdGFibGVEZWxheSkodm9pZCkpCit7CisKKyAgICBDTE9DS19TZXRFeHRlcm5hbFJlZkNsa0NvbmZpZyhvc2NzZWwpOworCisgICAgcmV0dXJuIENMT0NLX1NldEZlZU1vZGUoZnJkaXYsIGRteDMyLCBkcnMsIGZsbFN0YWJsZURlbGF5KTsKK30KKworc3RhdHVzX3QgQ0xPQ0tfQm9vdFRvQmxwaU1vZGUodWludDhfdCBmY3JkaXYsIG1jZ19pcmNfbW9kZV90IGlyY3MsIHVpbnQ4X3QgaXJjRW5hYmxlTW9kZSkKK3sKKyAgICAvKiBJZiByZXNldCBtb2RlIGlzIEZFSSBtb2RlLCBzZXQgTUNHSVJDTEsgYW5kIGFsd2F5cyBzdWNjZXNzLiAqLworICAgIENMT0NLX1NldEludGVybmFsUmVmQ2xrQ29uZmlnKGlyY0VuYWJsZU1vZGUsIGlyY3MsIGZjcmRpdik7CisKKyAgICAvKiBJZiByZXNldCBtb2RlIGlzIG5vdCBCTFBJLCBmaXJzdCBlbnRlciBGQkkgbW9kZS4gKi8KKyAgICBNQ0ctPkMxID0gKE1DRy0+QzEgJiB+TUNHX0MxX0NMS1NfTUFTSykgfCBNQ0dfQzFfQ0xLUyhrTUNHX0Nsa091dFNyY0ludGVybmFsKTsKKyAgICB3aGlsZSAoTUNHX1NfQ0xLU1RfVkFMICE9IGtNQ0dfQ2xrT3V0U3RhdEludCkKKyAgICB7CisgICAgfQorCisgICAgLyogRW50ZXIgQkxQSSBtb2RlLiAqLworICAgIE1DRy0+QzIgfD0gTUNHX0MyX0xQX01BU0s7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBDTE9DS19Cb290VG9CbHBlTW9kZShtY2dfb3Njc2VsX3Qgb3Njc2VsKQoreworCisgICAgQ0xPQ0tfU2V0RXh0ZXJuYWxSZWZDbGtDb25maWcob3Njc2VsKTsKKworICAgIC8qIFNldCB0byBGQkUgbW9kZS4gKi8KKyAgICBNQ0ctPkMxID0KKyAgICAgICAgKChNQ0ctPkMxICYgfihNQ0dfQzFfQ0xLU19NQVNLIHwgTUNHX0MxX0lSRUZTX01BU0spKSB8IChNQ0dfQzFfQ0xLUyhrTUNHX0Nsa091dFNyY0V4dGVybmFsKSAgICAvKiBDTEtTID0gMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTUNHX0MxX0lSRUZTKGtNQ0dfRmxsU3JjRXh0ZXJuYWwpKSk7IC8qIElSRUZTID0gMCAqLworCisgICAgLyogSWYgdXNlIGV4dGVybmFsIGNyeXN0YWwgYXMgY2xvY2sgc291cmNlLCB3YWl0IGZvciBpdCBzdGFibGUuICovCisgICAgaWYgKE1DR19DN19PU0NTRUwoa01DR19Pc2NzZWxPc2MpID09IChNQ0ctPkM3ICYgTUNHX0M3X09TQ1NFTF9NQVNLKSkKKyAgICB7CisgICAgICAgIGlmIChNQ0ctPkMyICYgTUNHX0MyX0VSRUZTX01BU0spCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICghKE1DRy0+UyAmIE1DR19TX09TQ0lOSVQwX01BU0spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogV2FpdCBmb3IgTUNHX1NbQ0xLU1RdIGFuZCBNQ0dfU1tJUkVGU1RdLiAqLworICAgIHdoaWxlICgoTUNHLT5TICYgKE1DR19TX0lSRUZTVF9NQVNLIHwgTUNHX1NfQ0xLU1RfTUFTSykpICE9CisgICAgICAgICAgIChNQ0dfU19JUkVGU1Qoa01DR19GbGxTcmNFeHRlcm5hbCkgfCBNQ0dfU19DTEtTVChrTUNHX0Nsa091dFN0YXRFeHQpKSkKKyAgICB7CisgICAgfQorCisgICAgLyogSW4gRkJFIG5vdywgc3RhcnQgdG8gZW50ZXIgQkxQRS4gKi8KKyAgICBNQ0ctPkMyIHw9IE1DR19DMl9MUF9NQVNLOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworCisvKgorICAgVGhlIHRyYW5zYWN0aW9uIG1hdHJpeC4gSXQgZGVmaW5lcyB0aGUgcGF0aCBmb3IgbW9kZSBzd2l0Y2gsIHRoZSByb3cgaXMgZm9yCisgICBjdXJyZW50IG1vZGUgYW5kIHRoZSBjb2x1bW4gaXMgdGFyZ2V0IG1vZGUuCisgICBGb3IgZXhhbXBsZSwgc3dpdGNoIGZyb20gRkVJIHRvIFBFRToKKyAgIDEuIEN1cnJlbnQgbW9kZSBGRUksIG5leHQgbW9kZSBpcyBtY2dNb2RlTWF0cml4W0ZFSV1bUEVFXSA9IEZCRSwgc28gc3dpdGggdG8gRkJFLgorICAgMi4gQ3VycmVudCBtb2RlIEZCRSwgbmV4dCBtb2RlIGlzIG1jZ01vZGVNYXRyaXhbRkJFXVtQRUVdID0gUEJFLCBzbyBzd2l0aCB0byBQQkUuCisgICAzLiBDdXJyZW50IG1vZGUgUEJFLCBuZXh0IG1vZGUgaXMgbWNnTW9kZU1hdHJpeFtQQkVdW1BFRV0gPSBQRUUsIHNvIHN3aXRoIHRvIFBFRS4KKyAgIFRodXMgdGhlIE1DRyBtb2RlIGhhcyBjaGFuZ2VkIGZyb20gRkVJIHRvIFBFRS4KKyAqLworc3RhdGljIGNvbnN0IG1jZ19tb2RlX3QgbWNnTW9kZU1hdHJpeFs2XVs2XSA9IHsKKyAgICB7a01DR19Nb2RlRkVJLCBrTUNHX01vZGVGQkksIGtNQ0dfTW9kZUZCSSwga01DR19Nb2RlRkVFLCBrTUNHX01vZGVGQkUsIGtNQ0dfTW9kZUZCRX0sICAvKiBGRUkgKi8KKyAgICB7a01DR19Nb2RlRkVJLCBrTUNHX01vZGVGQkksIGtNQ0dfTW9kZUJMUEksIGtNQ0dfTW9kZUZFRSwga01DR19Nb2RlRkJFLCBrTUNHX01vZGVGQkV9LCAvKiBGQkkgKi8KKyAgICB7a01DR19Nb2RlRkJJLCBrTUNHX01vZGVGQkksIGtNQ0dfTW9kZUJMUEksIGtNQ0dfTW9kZUZCSSwga01DR19Nb2RlRkJJLCBrTUNHX01vZGVGQkl9LCAvKiBCTFBJICovCisgICAge2tNQ0dfTW9kZUZFSSwga01DR19Nb2RlRkJJLCBrTUNHX01vZGVGQkksIGtNQ0dfTW9kZUZFRSwga01DR19Nb2RlRkJFLCBrTUNHX01vZGVGQkV9LCAgLyogRkVFICovCisgICAge2tNQ0dfTW9kZUZFSSwga01DR19Nb2RlRkJJLCBrTUNHX01vZGVGQkksIGtNQ0dfTW9kZUZFRSwga01DR19Nb2RlRkJFLCBrTUNHX01vZGVCTFBFfSwgLyogRkJFICovCisgICAge2tNQ0dfTW9kZUZCRSwga01DR19Nb2RlRkJFLCBrTUNHX01vZGVGQkUsIGtNQ0dfTW9kZUZCRSwga01DR19Nb2RlRkJFLCBrTUNHX01vZGVCTFBFfSwgLyogQkxQRSAqLworICAgIC8qICAgICAgRkVJICAgICAgICAgICBGQkkgICAgICAgICAgIEJMUEkgICAgICAgICAgRkVFICAgICAgICAgICBGQkUgICAgICAgICAgIEJMUEUgICAgICAqLworfTsKKworc3RhdHVzX3QgQ0xPQ0tfU2V0TWNnQ29uZmlnKGNvbnN0IG1jZ19jb25maWdfdCAqY29uZmlnKQoreworICAgIG1jZ19tb2RlX3QgbmV4dF9tb2RlOworICAgIHN0YXR1c190IHN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKworCisgICAgLyogSWYgbmVlZCB0byBjaGFuZ2UgZXh0ZXJuYWwgY2xvY2ssIE1DR19DN1tPU0NTRUxdLiAqLworICAgIGlmIChNQ0dfQzdfT1NDU0VMX1ZBTCAhPSBjb25maWctPm9zY3NlbCkKKyAgICB7CisgICAgICAgIC8qIElmIGV4dGVybmFsIGNsb2NrIGlzIGluIHVzZSwgY2hhbmdlIHRvIEZFSSBmaXJzdC4gKi8KKyAgICAgICAgaWYgKCEoTUNHLT5TICYgTUNHX1NfSVJDU1RfTUFTSykpCisgICAgICAgIHsKKyAgICAgICAgICAgIENMT0NLX0V4dGVybmFsTW9kZVRvRmJlTW9kZVF1aWNrKCk7CisgICAgICAgICAgICBDTE9DS19TZXRGZWlNb2RlKGNvbmZpZy0+ZG14MzIsIGNvbmZpZy0+ZHJzLCAodm9pZCAoKikodm9pZCkpMCk7CisgICAgICAgIH0KKworICAgICAgICBDTE9DS19TZXRFeHRlcm5hbFJlZkNsa0NvbmZpZyhjb25maWctPm9zY3NlbCk7CisgICAgfQorCisgICAgLyogUmUtY29uZmlndXJlIE1DR0lSQ0xLLCBpZiBNQ0dJUkNMSyBpcyB1c2VkIGFzIHN5c3RlbSBjbG9jayBzb3VyY2UsIHRoZW4gY2hhbmdlIHRvIEZFSS9QRUkgZmlyc3QuICovCisgICAgaWYgKE1DR19TX0NMS1NUX1ZBTCA9PSBrTUNHX0Nsa091dFN0YXRJbnQpCisgICAgeworICAgICAgICBNQ0ctPkMyICY9IH5NQ0dfQzJfTFBfTUFTSzsgLyogRGlzYWJsZSBsb3dwb3dlci4gKi8KKworICAgICAgICB7CisgICAgICAgICAgICBDTE9DS19TZXRGZWlNb2RlKGNvbmZpZy0+ZG14MzIsIGNvbmZpZy0+ZHJzLCBDTE9DS19GbGxTdGFibGVEZWxheSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDb25maWd1cmUgTUNHSVJDTEsuICovCisgICAgQ0xPQ0tfU2V0SW50ZXJuYWxSZWZDbGtDb25maWcoY29uZmlnLT5pcmNsa0VuYWJsZU1vZGUsIGNvbmZpZy0+aXJjcywgY29uZmlnLT5mY3JkaXYpOworCisgICAgbmV4dF9tb2RlID0gQ0xPQ0tfR2V0TW9kZSgpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIG5leHRfbW9kZSA9IG1jZ01vZGVNYXRyaXhbbmV4dF9tb2RlXVtjb25maWctPm1jZ01vZGVdOworCisgICAgICAgIHN3aXRjaCAobmV4dF9tb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIGtNQ0dfTW9kZUZFSToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBDTE9DS19TZXRGZWlNb2RlKGNvbmZpZy0+ZG14MzIsIGNvbmZpZy0+ZHJzLCBDTE9DS19GbGxTdGFibGVEZWxheSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtNQ0dfTW9kZUZFRToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBDTE9DS19TZXRGZWVNb2RlKGNvbmZpZy0+ZnJkaXYsIGNvbmZpZy0+ZG14MzIsIGNvbmZpZy0+ZHJzLCBDTE9DS19GbGxTdGFibGVEZWxheSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtNQ0dfTW9kZUZCSToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBDTE9DS19TZXRGYmlNb2RlKGNvbmZpZy0+ZG14MzIsIGNvbmZpZy0+ZHJzLCAodm9pZCAoKikodm9pZCkpMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtNQ0dfTW9kZUZCRToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBDTE9DS19TZXRGYmVNb2RlKGNvbmZpZy0+ZnJkaXYsIGNvbmZpZy0+ZG14MzIsIGNvbmZpZy0+ZHJzLCAodm9pZCAoKikodm9pZCkpMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtNQ0dfTW9kZUJMUEk6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gQ0xPQ0tfU2V0QmxwaU1vZGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga01DR19Nb2RlQkxQRToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBDTE9DS19TZXRCbHBlTW9kZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHN0YXR1cykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKG5leHRfbW9kZSAhPSBjb25maWctPm1jZ01vZGUpOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2Nsb2NrLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNzY0MjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbG9jay5oCkBAIC0wLDAgKzEsMTE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxNiAtIDIwMTcgLCBOWFAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlNMX0NMT0NLX0hfCisjZGVmaW5lIF9GU0xfQ0xPQ0tfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohIEBhZGR0b2dyb3VwIGNsb2NrICovCisvKiEgQHsgKi8KKworLyohIEBmaWxlICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbmZpZ3VyYXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQGJyaWVmIENvbmZpZ3VyZXMgd2hldGhlciB0byBjaGVjayBhIHBhcmFtZXRlciBpbiBhIGZ1bmN0aW9uLgorICoKKyAqIFNvbWUgTUNHIHNldHRpbmdzIG11c3QgYmUgY2hhbmdlZCB3aXRoIGNvbmRpdGlvbnMsIGZvciBleGFtcGxlOgorICogIDEuIE1DR0lSQ0xLIHNldHRpbmdzLCBzdWNoIGFzIHRoZSBzb3VyY2UsIGRpdmlkZXIsIGFuZCB0aGUgdHJpbSB2YWx1ZSBzaG91bGQgbm90IGNoYW5nZSB3aGVuCisgKiAgICAgTUNHSVJDTEsgaXMgdXNlZCBhcyBhIHN5c3RlbSBjbG9jayBzb3VyY2UuCisgKiAgMi4gTUNHX0M3W09TQ1NFTF0gc2hvdWxkIG5vdCBiZSBjaGFuZ2VkICB3aGVuIHRoZSBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgaXMgdXNlZAorICogICAgIGFzIGEgc3lzdGVtIGNsb2NrIHNvdXJjZS4gRm9yIGV4YW1wbGUsIGluIEZCRS9CTFBFL1BCRSBtb2Rlcy4KKyAqICAzLiBUaGUgdXNlcnMgc2hvdWxkIG9ubHkgc3dpdGNoIGJldHdlZW4gdGhlIHN1cHBvcnRlZCBjbG9jayBtb2Rlcy4KKyAqCisgKiBNQ0cgZnVuY3Rpb25zIGNoZWNrIHRoZSBwYXJhbWV0ZXIgYW5kIE1DRyBzdGF0dXMgYmVmb3JlIHNldHRpbmcsIGlmIG5vdCBhbGxvd2VkCisgKiB0byBjaGFuZ2UsIHRoZSBmdW5jdGlvbnMgcmV0dXJuIGVycm9yLiBUaGUgcGFyYW1ldGVyIGNoZWNraW5nIGluY3JlYXNlcyBjb2RlIHNpemUsCisgKiBpZiBjb2RlIHNpemUgaXMgYSBjcml0aWNhbCByZXF1aXJlbWVudCwgY2hhbmdlICNNQ0dfQ09ORklHX0NIRUNLX1BBUkFNIHRvIDAgdG8KKyAqIGRpc2FibGUgcGFyYW1ldGVyIGNoZWNraW5nLgorICovCisjaWZuZGVmIE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0KKyNkZWZpbmUgTUNHX0NPTkZJR19DSEVDS19QQVJBTSAwVQorI2VuZGlmCisKKy8qISBAYnJpZWYgQ29uZmlndXJlIHdoZXRoZXIgZHJpdmVyIGNvbnRyb2xzIGNsb2NrCisgKgorICogV2hlbiBzZXQgdG8gMCwgcGVyaXBoZXJhbCBkcml2ZXJzIHdpbGwgZW5hYmxlIGNsb2NrIGluIGluaXRpYWxpemUgZnVuY3Rpb24KKyAqIGFuZCBkaXNhYmxlIGNsb2NrIGluIGRlLWluaXRpYWxpemUgZnVuY3Rpb24uIFdoZW4gc2V0IHRvIDEsIHBlcmlwaGVyYWwKKyAqIGRyaXZlciB3aWxsIG5vdCBjb250cm9sIHRoZSBjbG9jaywgYXBwbGljYXRpb24gY291bGQgY29udG9sIHRoZSBjbG9jayBvdXQgb2YKKyAqIHRoZSBkcml2ZXIuCisgKgorICogQG5vdGUgQWxsIGRyaXZlcnMgc2hhcmUgdGhpcyBmZWF0dXJlIHN3aXRjaGVyLiBJZiBpdCBpcyBzZXQgdG8gMSwgYXBwbGljYXRpb24KKyAqIHNob3VsZCBoYW5kbGUgY2xvY2sgZW5hYmxlIGFuZCBkaXNhYmxlIGZvciBhbGwgZHJpdmVycy4KKyAqLworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpKQorI2RlZmluZSBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgMAorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBDTE9DSyBkcml2ZXIgdmVyc2lvbiAyLjIuMS4gKi8KKyNkZWZpbmUgRlNMX0NMT0NLX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMiwgMSkpCisvKkB9Ki8KKworLyohIEBicmllZiBFeHRlcm5hbCBYVEFMMCAoT1NDMCkgY2xvY2sgZnJlcXVlbmN5LgorICoKKyAqIFRoZSBYVEFMMC9FWFRBTDAgKE9TQzApIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4gV2hlbiB0aGUgY2xvY2sgaXMgc2V0IHVwLCB1c2UgdGhlCisgKiBmdW5jdGlvbiBDTE9DS19TZXRYdGFsMEZyZXEgdG8gc2V0IHRoZSB2YWx1ZSBpbiB0aGUgY2xvY2sgZHJpdmVyLiBGb3IgZXhhbXBsZSwKKyAqIGlmIFhUQUwwIGlzIDggTUh6OgorICogQGNvZGUKKyAqIENMT0NLX0luaXRPc2MwKC4uLik7IC8vIFNldCB1cCB0aGUgT1NDMAorICogQ0xPQ0tfU2V0WHRhbDBGcmVxKDgwMDAwMDAwKTsgLy8gU2V0IHRoZSBYVEFMMCB2YWx1ZSB0byB0aGUgY2xvY2sgZHJpdmVyLgorICogQGVuZGNvZGUKKyAqCisgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdGhlIG11bHRpY29yZSBwbGF0Zm9ybXMgd2hlcmUgb25seSBvbmUgY29yZSBuZWVkcyB0byBzZXQgdXAgdGhlCisgKiBPU0MwIHVzaW5nIHRoZSBDTE9DS19Jbml0T3NjMC4gQWxsIG90aGVyIGNvcmVzIG5lZWQgdG8gY2FsbCB0aGUgQ0xPQ0tfU2V0WHRhbDBGcmVxCisgKiB0byBnZXQgYSB2YWxpZCBjbG9jayBmcmVxdWVuY3kuCisgKi8KK2V4dGVybiB1aW50MzJfdCBnX3h0YWwwRnJlcTsKKworCisvKiEgQGJyaWVmIEV4dGVybmFsIFhUQUwzMi9FWFRBTDMyL1JUQ19DTEtJTiBjbG9jayBmcmVxdWVuY3kuCisgKgorICogVGhlIFhUQUwzMi9FWFRBTDMyL1JUQ19DTEtJTiBjbG9jayBmcmVxdWVuY3kgaW4gSHouIFdoZW4gdGhlIGNsb2NrIGlzIHNldCB1cCwgdXNlIHRoZQorICogZnVuY3Rpb24gQ0xPQ0tfU2V0WHRhbDMyRnJlcSB0byBzZXQgdGhlIHZhbHVlIGluIHRoZSBjbG9jayBkcml2ZXIuCisgKgorICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHRoZSBtdWx0aWNvcmUgcGxhdGZvcm1zIHdoZXJlIG9ubHkgb25lIGNvcmUgbmVlZHMgdG8gc2V0IHVwCisgKiB0aGUgY2xvY2suIEFsbCBvdGhlciBjb3JlcyBuZWVkIHRvIGNhbGwgdGhlIENMT0NLX1NldFh0YWwzMkZyZXEKKyAqIHRvIGdldCBhIHZhbGlkIGNsb2NrIGZyZXF1ZW5jeS4KKyAqLworZXh0ZXJuIHVpbnQzMl90IGdfeHRhbDMyRnJlcTsKKworCisjaWYgKGRlZmluZWQoT1NDKSAmJiAhKGRlZmluZWQoT1NDMCkpKQorI2RlZmluZSBPU0MwIE9TQworI2VuZGlmCisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgRE1BTVVYLiAqLworI2RlZmluZSBETUFNVVhfQ0xPQ0tTICBcCisgICAgeyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAga0NMT0NLX0RtYW11eDAgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBSVEMuICovCisjZGVmaW5lIFJUQ19DTE9DS1MgIFwKKyAgICB7ICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfUnRjMCBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIFBJVC4gKi8KKyNkZWZpbmUgUElUX0NMT0NLUyAgXAorICAgIHsgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19QaXQwIFwKKyAgICB9CisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgUE9SVC4gKi8KKyNkZWZpbmUgUE9SVF9DTE9DS1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfUG9ydEEsIGtDTE9DS19Qb3J0Qiwga0NMT0NLX1BvcnRDIFwKKyAgICB9CisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgVFNJLiAqLworI2RlZmluZSBUU0lfQ0xPQ0tTICBcCisgICAgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAga0NMT0NLX1RzaTAgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBEU1BJLiAqLworI2RlZmluZSBEU1BJX0NMT0NLUyAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfU3BpMCwga0NMT0NLX1NwaTEgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBMUFVBUlQuICovCisjZGVmaW5lIExQVUFSVF9DTE9DS1MgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfTHB1YXJ0MCBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIERBQy4gKi8KKyNkZWZpbmUgREFDX0NMT0NLUyAgXAorICAgIHsgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19EYWMwIFwKKyAgICB9CisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgTFBUTVIuICovCisjZGVmaW5lIExQVE1SX0NMT0NLUyAgXAorICAgIHsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAga0NMT0NLX0xwdG1yMCBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIEFEQzE2LiAqLworI2RlZmluZSBBREMxNl9DTE9DS1MgXAorICAgIHsgICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfQWRjMCAgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBUUk5HLiAqLworI2RlZmluZSBUUk5HX0NMT0NLUyAgXAorICAgIHsgICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfVHJuZzAgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBETUEuICovCisjZGVmaW5lIEVETUFfQ0xPQ0tTICBcCisgICAgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAga0NMT0NLX0RtYTAgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBDTVQuICovCisjZGVmaW5lIENNVF9DTE9DS1MgIFwKKyAgICB7ICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfQ210MCBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIFRQTS4gKi8KKyNkZWZpbmUgVFBNX0NMT0NLUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfVHBtMCwga0NMT0NLX1RwbTEsIGtDTE9DS19UcG0yIFwKKyAgICB9CisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgTFRDLiAqLworI2RlZmluZSBMVENfQ0xPQ0tTICBcCisgICAgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAga0NMT0NLX0x0YzAgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBJMkMuICovCisjZGVmaW5lIEkyQ19DTE9DS1MgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19JMmMwLCBrQ0xPQ0tfSTJjMSBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIENNUC4gKi8KKyNkZWZpbmUgQ01QX0NMT0NLUyAgXAorICAgIHsgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19DbXAwIFwKKyAgICB9CisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgVlJFRi4gKi8KKyNkZWZpbmUgVlJFRl9DTE9DS1MgIFwKKyAgICB7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAga0NMT0NLX1ZyZWYwIFwKKyAgICB9ICAgIAorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIERDREMuICovCisjZGVmaW5lIERDRENfQ0xPQ0tTICBcCisgICAgeyAgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19EY2RjMCBcCisgICAgfQorCisvKiEKKyAqIEBicmllZiBMUE8gY2xvY2sgZnJlcXVlbmN5LgorICovCisjZGVmaW5lIExQT19DTEtfRlJFUSAxMDAwVQorCisvKiEgQGJyaWVmIFByZXBoZXJpYWxzIGNsb2NrIHNvdXJjZSBkZWZpbml0aW9uLiAqLworI2RlZmluZSBTWVNfQ0xLIGtDTE9DS19Db3JlU3lzQ2xrCisjZGVmaW5lIEJVU19DTEsga0NMT0NLX0J1c0NsaworCisjZGVmaW5lIEkyQzBfQ0xLX1NSQyBCVVNfQ0xLCisjZGVmaW5lIEkyQzFfQ0xLX1NSQyBTWVNfQ0xLCisjZGVmaW5lIERTUEkwX0NMS19TUkMgQlVTX0NMSworI2RlZmluZSBEU1BJMV9DTEtfU1JDIEJVU19DTEsKKworLyohIEBicmllZiBDbG9jayBuYW1lIHVzZWQgdG8gZ2V0IGNsb2NrIGZyZXF1ZW5jeS4gKi8KK3R5cGVkZWYgZW51bSBfY2xvY2tfbmFtZQoreworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN5c3RlbSBsYXllciBjbG9jayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICBrQ0xPQ0tfQ29yZVN5c0NsaywgLyohPCBDb3JlL3N5c3RlbSBjbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBrQ0xPQ0tfUGxhdENsaywgICAgLyohPCBQbGF0Zm9ybSBjbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBrQ0xPQ0tfQnVzQ2xrLCAgICAgLyohPCBCdXMgY2xvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBrQ0xPQ0tfRmxhc2hDbGssICAgLyohPCBGbGFzaCBjbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1NDIGNsb2NrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICBrQ0xPQ0tfRXIzMmtDbGssICAvKiE8IEV4dGVybmFsIHJlZmVyZW5jZSAzMksgY2xvY2sgKEVSQ0xLMzJLKSAgICAgICAgICAgICAgICAgICAqLworICAgIGtDTE9DS19Pc2MwRXJDbGssIC8qITwgT1NDMCBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgKE9TQzBFUkNMSykgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNQ0cgYW5kIE1DRy1MaXRlIGNsb2NrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAga0NMT0NLX01jZ0ZpeGVkRnJlcUNsaywgICAvKiE8IE1DRyBmaXhlZCBmcmVxdWVuY3kgY2xvY2sgKE1DR0ZGQ0xLKSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGtDTE9DS19NY2dJbnRlcm5hbFJlZkNsaywgLyohPCBNQ0cgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIChNQ0dJUkNMSykgICAgICAgICAgICAgICAgICAgKi8KKyAgICBrQ0xPQ0tfTWNnRmxsQ2xrLCAgICAgICAgIC8qITwgTUNHRkxMQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAga0NMT0NLX01jZ1BlcmlwaENsaywgICAgICAvKiE8IE1DRyBwZXJpcGhlcmFsIGNsb2NrIChNQ0dQQ0xLKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVyIGNsb2NrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIGtDTE9DS19McG9DbGssIC8qITwgTFBPIGNsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gY2xvY2tfbmFtZV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgY2xvY2tfZ2F0ZV90IGRlZmluaXRpb246CisKKyAzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCBTSU1fU0NHQyByZWdpc3RlciBvZmZzZXQgICAgICAgfCAgIGNvbnRyb2wgYml0IG9mZnNldCBpbiBTQ0dDIHwKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgRm9yIGV4YW1wbGUsIHRoZSBTREhDIGNsb2NrIGdhdGUgaXMgY29udHJvbGxlZCBieSBTSU1fU0NHQzNbMTddLCB0aGUKKyBTSU1fU0NHQzMgb2Zmc2V0IGluIFNJTSBpcyAweDEwMzAsIHRoZW4ga0Nsb2NrR2F0ZVNkaGMwIGlzIGRlZmluZWQgYXMKKworICAgICAgICAgICAgICBrQ2xvY2tHYXRlU2RoYzAgPSAoMHgxMDMwIDw8IDE2KSB8IDE3OworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIENMS19HQVRFX1JFR19PRkZTRVRfU0hJRlQgMTZVCisjZGVmaW5lIENMS19HQVRFX1JFR19PRkZTRVRfTUFTSyAweEZGRkYwMDAwVQorI2RlZmluZSBDTEtfR0FURV9CSVRfU0hJRlRfU0hJRlQgMFUKKyNkZWZpbmUgQ0xLX0dBVEVfQklUX1NISUZUX01BU0sgMHgwMDAwRkZGRlUKKworI2RlZmluZSBDTEtfR0FURV9ERUZJTkUocmVnX29mZnNldCwgYml0X3NoaWZ0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoKHJlZ19vZmZzZXQpIDw8IENMS19HQVRFX1JFR19PRkZTRVRfU0hJRlQpICYgQ0xLX0dBVEVfUkVHX09GRlNFVF9NQVNLKSB8IFwKKyAgICAgKCgoYml0X3NoaWZ0KSA8PCBDTEtfR0FURV9CSVRfU0hJRlRfU0hJRlQpICYgQ0xLX0dBVEVfQklUX1NISUZUX01BU0spKQorCisjZGVmaW5lIENMS19HQVRFX0FCU1RSQUNUX1JFR19PRkZTRVQoeCkgKCgoeCkmQ0xLX0dBVEVfUkVHX09GRlNFVF9NQVNLKSA+PiBDTEtfR0FURV9SRUdfT0ZGU0VUX1NISUZUKQorI2RlZmluZSBDTEtfR0FURV9BQlNUUkFDVF9CSVRTX1NISUZUKHgpICgoKHgpJkNMS19HQVRFX0JJVF9TSElGVF9NQVNLKSA+PiBDTEtfR0FURV9CSVRfU0hJRlRfU0hJRlQpCisKKy8qISBAYnJpZWYgQ2xvY2sgZ2F0ZSBuYW1lIHVzZWQgZm9yIENMT0NLX0VuYWJsZUNsb2NrL0NMT0NLX0Rpc2FibGVDbG9jay4gKi8KK3R5cGVkZWYgZW51bSBfY2xvY2tfaXBfbmFtZQoreworICAgIGtDTE9DS19JcEludmFsaWQgPSAwVSwKKworICAgIGtDTE9DS19DbXQwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzNFUsIDJVKSwKKyAgICBrQ0xPQ0tfSTJjMCA9IENMS19HQVRFX0RFRklORSgweDEwMzRVLCA2VSksCisgICAga0NMT0NLX0kyYzEgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM0VSwgN1UpLAorICAgIGtDTE9DS19DbXAwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzNFUsIDE5VSksCisgICAga0NMT0NLX1ZyZWYwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzNFUsIDIwVSksCisKKyAgICBrQ0xPQ0tfTHB0bXIwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzOFUsIDBVKSwKKyAgICBrQ0xPQ0tfVHNpMCA9IENMS19HQVRFX0RFRklORSgweDEwMzhVLCA1VSksCisgICAga0NMT0NLX1BvcnRBID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzOFUsIDlVKSwKKyAgICBrQ0xPQ0tfUG9ydEIgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM4VSwgMTBVKSwKKyAgICBrQ0xPQ0tfUG9ydEMgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM4VSwgMTFVKSwKKyAgICBrQ0xPQ0tfTHB1YXJ0MCA9IENMS19HQVRFX0RFRklORSgweDEwMzhVLCAyMFUpLAorICAgIGtDTE9DS19BZXNhID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzOFUsIDI0VSksCisgICAga0NMT0NLX0x0YzAgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM4VSwgMjRVKSwKKyAgICBrQ0xPQ0tfUnNpbSA9IENMS19HQVRFX0RFRklORSgweDEwMzhVLCAyNVUpLAorICAgIGtDTE9DS19EY2RjMCA9IENMS19HQVRFX0RFRklORSgweDEwMzhVLCAyNlUpLAorICAgIGtDTE9DS19CdGxsID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzOFUsIDI3VSksCisgICAga0NMT0NLX1BoeURpZyA9IENMS19HQVRFX0RFRklORSgweDEwMzhVLCAyOFUpLAorICAgIGtDTE9DS19aaWdCZWUgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM4VSwgMjlVKSwKKyAgICBrQ0xPQ0tfR2VuRnNrID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzOFUsIDMxVSksCisKKyAgICBrQ0xPQ0tfRnRmMCA9IENMS19HQVRFX0RFRklORSgweDEwM0NVLCAwVSksCisgICAga0NMT0NLX0RtYW11eDAgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDNDVSwgMVUpLAorICAgIGtDTE9DS19Ucm5nMCA9IENMS19HQVRFX0RFRklORSgweDEwM0NVLCA5VSksCisgICAga0NMT0NLX1NwaTAgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDNDVSwgMTJVKSwKKyAgICBrQ0xPQ0tfU3BpMSA9IENMS19HQVRFX0RFRklORSgweDEwM0NVLCAxM1UpLAorICAgIGtDTE9DS19QaXQwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzQ1UsIDIzVSksCisgICAga0NMT0NLX1RwbTAgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDNDVSwgMjRVKSwKKyAgICBrQ0xPQ0tfVHBtMSA9IENMS19HQVRFX0RFRklORSgweDEwM0NVLCAyNVUpLAorICAgIGtDTE9DS19UcG0yID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzQ1UsIDI2VSksCisgICAga0NMT0NLX0FkYzAgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDNDVSwgMjdVKSwKKyAgICBrQ0xPQ0tfUnRjMCA9IENMS19HQVRFX0RFRklORSgweDEwM0NVLCAyOVUpLAorICAgIGtDTE9DS19EYWMwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzQ1UsIDMxVSksCisKKyAgICBrQ0xPQ0tfRG1hMCA9IENMS19HQVRFX0RFRklORSgweDEwNDBVLCA4VSksCit9IGNsb2NrX2lwX25hbWVfdDsKKworLyohQGJyaWVmIFNJTSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgY2xvY2sgc2V0dGluZy4gKi8KK3R5cGVkZWYgc3RydWN0IF9zaW1fY2xvY2tfY29uZmlnCit7CisgICAgdWludDhfdCBwbGxGbGxTZWw7ICAvKiE8IFBMTC9GTEwvSVJDNDhNIHNlbGVjdGlvbi4gICAgICAgICAqLworICAgIHVpbnQ4X3QgcGxsRmxsRGl2OyAgLyohPCBQTExGTExTRUwgY2xvY2sgZGl2aWRlciBkaXZpc29yLiAgKi8KKyAgICB1aW50OF90IHBsbEZsbEZyYWM7IC8qITwgUExMRkxMU0VMIGNsb2NrIGRpdmlkZXIgZnJhY3Rpb24uICovCisgICAgdWludDhfdCBlcjMya1NyYzsgICAvKiE8IEVSQ0xLMzJLIHNvdXJjZSBzZWxlY3Rpb24uICAgICAgICAqLworICAgIHVpbnQzMl90IGNsa2RpdjE7ICAgLyohPCBTSU1fQ0xLRElWMS4gICAgICAgICAgICAgICAgICAgICAgKi8KK30gc2ltX2Nsb2NrX2NvbmZpZ190OworCisvKiEgQGJyaWVmIE9TQyB3b3JrIG1vZGUuICovCit0eXBlZGVmIGVudW0gX29zY19tb2RlCit7CisgICAga09TQ19Nb2RlRXh0ID0gMFUsIC8qITwgVXNlIGFuIGV4dGVybmFsIGNsb2NrLiAgICovCisjaWYgKGRlZmluZWQoTUNHX0MyX0VSRUZTX01BU0spICYmICEoZGVmaW5lZChNQ0dfQzJfRVJFRlMwX01BU0spKSkKKyAgICBrT1NDX01vZGVPc2NMb3dQb3dlciA9IE1DR19DMl9FUkVGU19NQVNLLCAvKiE8IE9zY2lsbGF0b3IgbG93IHBvd2VyLiAqLworI2Vsc2UKKyAgICBrT1NDX01vZGVPc2NMb3dQb3dlciA9IE1DR19DMl9FUkVGUzBfTUFTSywgLyohPCBPc2NpbGxhdG9yIGxvdyBwb3dlci4gKi8KKyNlbmRpZgorICAgIGtPU0NfTW9kZU9zY0hpZ2hHYWluID0gMFUKKyNpZiAoZGVmaW5lZChNQ0dfQzJfRVJFRlNfTUFTSykgJiYgIShkZWZpbmVkKE1DR19DMl9FUkVGUzBfTUFTSykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNHX0MyX0VSRUZTX01BU0sKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ0dfQzJfRVJFRlMwX01BU0sKKyNlbmRpZgorI2lmIChkZWZpbmVkKE1DR19DMl9IR09fTUFTSykgJiYgIShkZWZpbmVkKE1DR19DMl9IR08wX01BU0spKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DR19DMl9IR09fTUFTSywgLyohPCBPc2NpbGxhdG9yIGhpZ2ggZ2Fpbi4gKi8KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ0dfQzJfSEdPMF9NQVNLLCAvKiE8IE9zY2lsbGF0b3IgaGlnaCBnYWluLiAqLworI2VuZGlmCit9IG9zY19tb2RlX3Q7CisKKworLyohCisgKiBAYnJpZWYgT1NDIEluaXRpYWxpemF0aW9uIENvbmZpZ3VyYXRpb24gU3RydWN0dXJlCisgKgorICogRGVmaW5lcyB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHN0cnVjdHVyZSB0byBpbml0aWFsaXplIHRoZSBPU0MuCisgKiBXaGVuIHBvcnRpbmcgdG8gYSBuZXcgYm9hcmQsIHNldCB0aGUgZm9sbG93aW5nIG1lbWJlcnMKKyAqIGFjY29yZGluZyB0byB0aGUgYm9hcmQgc2V0dGluZzoKKyAqIDEuIGZyZXE6IFRoZSBleHRlcm5hbCBmcmVxdWVuY3kuCisgKiAyLiB3b3JrTW9kZTogVGhlIE9TQyBtb2R1bGUgbW9kZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX29zY19jb25maWcKK3sKKyAgICB1aW50MzJfdCBmcmVxOyAvKiE8IEV4dGVybmFsIGNsb2NrIGZyZXF1ZW5jeS4gICAgKi8KKyAgICBvc2NfbW9kZV90IHdvcmtNb2RlOyAvKiE8IE9TQyB3b3JrIG1vZGUgc2V0dGluZy4gICAgICAgKi8KK30gb3NjX2NvbmZpZ190OworCisvKiEgQGJyaWVmIE1DRyBGTEwgcmVmZXJlbmNlIGNsb2NrIHNvdXJjZSBzZWxlY3QuICovCit0eXBlZGVmIGVudW0gX21jZ19mbGxfc3JjCit7CisgICAga01DR19GbGxTcmNFeHRlcm5hbCwgLyohPCBFeHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgaXMgc2VsZWN0ZWQgICAgICAgICAgKi8KKyAgICBrTUNHX0ZsbFNyY0ludGVybmFsICAvKiE8IFRoZSBzbG93IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBpcyBzZWxlY3RlZCAqLworfSBtY2dfZmxsX3NyY190OworCisvKiEgQGJyaWVmIE1DRyBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgc2VsZWN0ICovCit0eXBlZGVmIGVudW0gX21jZ19pcmNfbW9kZQoreworICAgIGtNQ0dfSXJjU2xvdywgLyohPCBTbG93IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBzZWxlY3RlZCAqLworICAgIGtNQ0dfSXJjRmFzdCAgLyohPCBGYXN0IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBzZWxlY3RlZCAqLworfSBtY2dfaXJjX21vZGVfdDsKKworLyohIEBicmllZiBNQ0cgRENPIE1heGltdW0gRnJlcXVlbmN5IHdpdGggMzIuNzY4IGtIeiBSZWZlcmVuY2UgKi8KK3R5cGVkZWYgZW51bSBfbWNnX2RteDMyCit7CisgICAga01DR19EbXgzMkRlZmF1bHQsIC8qITwgRENPIGhhcyBhIGRlZmF1bHQgcmFuZ2Ugb2YgMjUlICovCisgICAga01DR19EbXgzMkZpbmUgICAgIC8qITwgRENPIGlzIGZpbmUtdHVuZWQgZm9yIG1heGltdW0gZnJlcXVlbmN5IHdpdGggMzIuNzY4IGtIeiByZWZlcmVuY2UgKi8KK30gbWNnX2RteDMyX3Q7CisKKy8qISBAYnJpZWYgTUNHIERDTyByYW5nZSBzZWxlY3QgKi8KK3R5cGVkZWYgZW51bSBfbWNnX2RycworeworICAgIGtNQ0dfRHJzTG93LCAgICAgLyohPCBMb3cgZnJlcXVlbmN5IHJhbmdlICAgICAgICovCisgICAga01DR19EcnNNaWQsICAgICAvKiE8IE1pZCBmcmVxdWVuY3kgcmFuZ2UgICAgICAgKi8KKyAgICBrTUNHX0Ryc01pZEhpZ2gsIC8qITwgTWlkLUhpZ2ggZnJlcXVlbmN5IHJhbmdlICAqLworICAgIGtNQ0dfRHJzSGlnaCAgICAgLyohPCBIaWdoIGZyZXF1ZW5jeSByYW5nZSAgICAgICovCit9IG1jZ19kcnNfdDsKKworLyohIEBicmllZiBNQ0cgUExMIHJlZmVyZW5jZSBjbG9jayBzZWxlY3QgKi8KK3R5cGVkZWYgZW51bSBfbWNnX3BsbF9yZWZfc3JjCit7CisgICAga01DR19QbGxSZWZPc2MwLCAgLyohPCBTZWxlY3RzIE9TQzAgYXMgUExMIHJlZmVyZW5jZSBjbG9jayAgICAgICAgICAgICAgICAgKi8KKyAgICBrTUNHX1BsbFJlZk9zYzEgICAvKiE8IFNlbGVjdHMgT1NDMSBhcyBQTEwgcmVmZXJlbmNlIGNsb2NrICAgICAgICAgICAgICAgICAqLworfSBtY2dfcGxsX3JlZl9zcmNfdDsKKworLyohIEBicmllZiBNQ0dPVVQgY2xvY2sgc291cmNlLiAqLwordHlwZWRlZiBlbnVtIF9tY2dfY2xrb3V0X3NyYworeworICAgIGtNQ0dfQ2xrT3V0U3JjT3V0LCAgICAgIC8qITwgT3V0cHV0IG9mIHRoZSBGTEwgaXMgc2VsZWN0ZWQgKHJlc2V0IGRlZmF1bHQpICAqLworICAgIGtNQ0dfQ2xrT3V0U3JjSW50ZXJuYWwsIC8qITwgSW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGlzIHNlbGVjdGVkICAgICAgICAgICAqLworICAgIGtNQ0dfQ2xrT3V0U3JjRXh0ZXJuYWwsIC8qITwgRXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGlzIHNlbGVjdGVkICAgICAgICAgICAqLworfSBtY2dfY2xrb3V0X3NyY190OworCisvKiEgQGJyaWVmIE1DRyBBdXRvbWF0aWMgVHJpbSBNYWNoaW5lIFNlbGVjdCAqLwordHlwZWRlZiBlbnVtIF9tY2dfYXRtX3NlbGVjdAoreworICAgIGtNQ0dfQXRtU2VsMzJrLCAvKiE8IDMyIGtIeiBJbnRlcm5hbCBSZWZlcmVuY2UgQ2xvY2sgc2VsZWN0ZWQgICovCisgICAga01DR19BdG1TZWw0bSAgIC8qITwgNCBNSHogSW50ZXJuYWwgUmVmZXJlbmNlIENsb2NrIHNlbGVjdGVkICAgKi8KK30gbWNnX2F0bV9zZWxlY3RfdDsKKworLyohIEBicmllZiBNQ0cgT1NDIENsb2NrIFNlbGVjdCAqLwordHlwZWRlZiBlbnVtIF9tY2dfb3Njc2VsCit7CisgICAga01DR19Pc2NzZWxPc2MsIC8qITwgU2VsZWN0cyBTeXN0ZW0gT3NjaWxsYXRvciAoT1NDQ0xLKSAqLworICAgIGtNQ0dfT3Njc2VsUnRjLCAvKiE8IFNlbGVjdHMgMzIga0h6IFJUQyBPc2NpbGxhdG9yICAgICAgKi8KK30gbWNnX29zY3NlbF90OworCisvKiEgQGJyaWVmIE1DRyBQTExDUyBzZWxlY3QgKi8KK3R5cGVkZWYgZW51bSBfbWNnX3BsbF9jbGtfc2VsZWN0Cit7CisgICAga01DR19QbGxDbGtTZWxQbGwwLCAvKiE8IFBMTDAgb3V0cHV0IGNsb2NrIGlzIHNlbGVjdGVkICAqLworICAgIGtNQ0dfUGxsQ2xrU2VsUGxsMSAgICAgICAgICAgICAgICAgICAgICAgLyogUExMMSBvdXRwdXQgY2xvY2sgaXMgc2VsZWN0ZWQgICAgKi8KK30gbWNnX3BsbF9jbGtfc2VsZWN0X3Q7CisKKy8qISBAYnJpZWYgTUNHIGNsb2NrIG1vbml0b3IgbW9kZS4gKi8KK3R5cGVkZWYgZW51bSBfbWNnX21vbml0b3JfbW9kZQoreworICAgIGtNQ0dfTW9uaXRvck5vbmUsIC8qITwgQ2xvY2sgbW9uaXRvciBpcyBkaXNhYmxlZC4gICAgICAgICAqLworICAgIGtNQ0dfTW9uaXRvckludCwgIC8qITwgVHJpZ2dlciBpbnRlcnJ1cHQgd2hlbiBjbG9jayBsb3N0LiAqLworICAgIGtNQ0dfTW9uaXRvclJlc2V0IC8qITwgU3lzdGVtIHJlc2V0IHdoZW4gY2xvY2sgbG9zdC4gICAgICAqLworfSBtY2dfbW9uaXRvcl9tb2RlX3Q7CisKKy8qISBAYnJpZWYgTUNHIHN0YXR1cy4gKi8KK2VudW0gX21jZ19zdGF0dXMKK3sKKyAgICBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGUgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfTUNHLCAwKSwgICAgICAgLyohPCBDYW4ndCBzd2l0Y2ggdG8gdGFyZ2V0IG1vZGUuICovCisgICAga1N0YXR1c19NQ0dfTW9kZUludmFsaWQgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfTUNHLCAxKSwgICAgICAgICAgIC8qITwgQ3VycmVudCBtb2RlIGludmFsaWQgZm9yIHRoZSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiAqLworICAgIGtTdGF0dXNfTUNHX0F0bUJ1c0Nsb2NrSW52YWxpZCA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9NQ0csIDIpLCAgICAvKiE8IEludmFsaWQgYnVzIGNsb2NrIGZvciBBVE0uICovCisgICAga1N0YXR1c19NQ0dfQXRtRGVzaXJlZEZyZXFJbnZhbGlkID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX01DRywgMyksIC8qITwgSW52YWxpZCBkZXNpcmVkIGZyZXF1ZW5jeSBmb3IgQVRNLiAqLworICAgIGtTdGF0dXNfTUNHX0F0bUlyY1VzZWQgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfTUNHLCA0KSwgICAgICAgICAgICAvKiE8IElSQyBpcyB1c2VkIHdoZW4gdXNpbmcgQVRNLiAqLworICAgIGtTdGF0dXNfTUNHX0F0bUhhcmR3YXJlRmFpbCA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9NQ0csIDUpLCAgICAgICAvKiE8IEhhcmR3YXJlIGZhaWwgb2NjdXJzIGR1cmluZyBBVE0uICovCisgICAga1N0YXR1c19NQ0dfU291cmNlVXNlZCA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9NQ0csIDYpICAgICAgICAgICAgIC8qITwgQ2FuJ3QgY2hhbmdlIHRoZSBjbG9jayBzb3VyY2UgYmVjYXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIGluIHVzZS4gKi8KK307CisKKy8qISBAYnJpZWYgTUNHIHN0YXR1cyBmbGFncy4gKi8KK2VudW0gX21jZ19zdGF0dXNfZmxhZ3NfdAoreworICAgIGtNQ0dfUnRjT3NjTG9zdEZsYWcgPSAoMVUgPDwgNFUpLCAvKiE8IFJUQyBPU0MgbG9zdC4gICAgICAqLworfTsKKworLyohIEBicmllZiBNQ0cgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIChNQ0dJUkNMSykgZW5hYmxlIG1vZGUgZGVmaW5pdGlvbi4gKi8KK2VudW0gX21jZ19pcmNsa19lbmFibGVfbW9kZQoreworICAgIGtNQ0dfSXJjbGtFbmFibGUgPSBNQ0dfQzFfSVJDTEtFTl9NQVNLLCAgICAgICAvKiE8IE1DR0lSQ0xLIGVuYWJsZS4gICAgICAgICAgICAgICovCisgICAga01DR19JcmNsa0VuYWJsZUluU3RvcCA9IE1DR19DMV9JUkVGU1RFTl9NQVNLIC8qITwgTUNHSVJDTEsgZW5hYmxlIGluIHN0b3AgbW9kZS4gKi8KK307CisKKworLyohIEBicmllZiBNQ0cgbW9kZSBkZWZpbml0aW9ucyAqLwordHlwZWRlZiBlbnVtIF9tY2dfbW9kZQoreworICAgIGtNQ0dfTW9kZUZFSSA9IDBVLCAvKiE8IEZFSSAgIC0gRkxMIEVuZ2FnZWQgSW50ZXJuYWwgICAgICAgICAqLworICAgIGtNQ0dfTW9kZUZCSSwgICAgICAvKiE8IEZCSSAgIC0gRkxMIEJ5cGFzc2VkIEludGVybmFsICAgICAgICAqLworICAgIGtNQ0dfTW9kZUJMUEksICAgICAvKiE8IEJMUEkgIC0gQnlwYXNzZWQgTG93IFBvd2VyIEludGVybmFsICAqLworICAgIGtNQ0dfTW9kZUZFRSwgICAgICAvKiE8IEZFRSAgIC0gRkxMIEVuZ2FnZWQgRXh0ZXJuYWwgICAgICAgICAqLworICAgIGtNQ0dfTW9kZUZCRSwgICAgICAvKiE8IEZCRSAgIC0gRkxMIEJ5cGFzc2VkIEV4dGVybmFsICAgICAgICAqLworICAgIGtNQ0dfTW9kZUJMUEUsICAgICAvKiE8IEJMUEUgIC0gQnlwYXNzZWQgTG93IFBvd2VyIEV4dGVybmFsICAqLworICAgIGtNQ0dfTW9kZUVycm9yIC8qITwgVW5rbm93biBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IG1jZ19tb2RlX3Q7CisKKworLyohIEBicmllZiBNQ0cgbW9kZSBjaGFuZ2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBXaGVuIHBvcnRpbmcgdG8gYSBuZXcgYm9hcmQsIHNldCB0aGUgZm9sbG93aW5nIG1lbWJlcnMKKyAqIGFjY29yZGluZyB0byB0aGUgYm9hcmQgc2V0dGluZzoKKyAqIDEuIGZyZGl2OiBJZiB0aGUgRkxMIHVzZXMgdGhlIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jaywgc2V0IHRoaXMKKyAqICAgIHZhbHVlIHRvIGVuc3VyZSB0aGF0IHRoZSBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZGl2aWRlZCBieSBmcmRpdiBpcworICogICAgaW4gdGhlIDMxLjI1IGtIeiB0byAzOS4wNjI1IGtIeiByYW5nZS4KKyAqIDIuIFRoZSBQTEwgcmVmZXJlbmNlIGNsb2NrIGRpdmlkZXIgUFJESVY6IFBMTCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5IGFmdGVyCisgKiAgICBQUkRJViBzaG91bGQgYmUgaW4gdGhlIEZTTF9GRUFUVVJFX01DR19QTExfUkVGX01JTiB0bworICogICAgRlNMX0ZFQVRVUkVfTUNHX1BMTF9SRUZfTUFYIHJhbmdlLgorICovCit0eXBlZGVmIHN0cnVjdCBfbWNnX2NvbmZpZworeworICAgIG1jZ19tb2RlX3QgbWNnTW9kZTsgLyohPCBNQ0cgbW9kZS4gICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1DR0lSQ0NMSyBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICB1aW50OF90IGlyY2xrRW5hYmxlTW9kZTsgLyohPCBNQ0dJUkNMSyBlbmFibGUgbW9kZS4gICAgICAgKi8KKyAgICBtY2dfaXJjX21vZGVfdCBpcmNzOyAgICAgLyohPCBTb3VyY2UsIE1DR19DMltJUkNTXS4gICAgICAgKi8KKyAgICB1aW50OF90IGZjcmRpdjsgICAgICAgICAgLyohPCBEaXZpZGVyLCBNQ0dfU0NbRkNSRElWXS4gICAgKi8KKworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNQ0cgRkxMIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICB1aW50OF90IGZyZGl2OyAgICAgLyohPCBEaXZpZGVyIE1DR19DMVtGUkRJVl0uICAgICAgKi8KKyAgICBtY2dfZHJzX3QgZHJzOyAgICAgLyohPCBEQ08gcmFuZ2UgTUNHX0M0W0RSU1RfRFJTXS4gKi8KKyAgICBtY2dfZG14MzJfdCBkbXgzMjsgLyohPCBNQ0dfQzRbRE1YMzJdLiAgICAgICAgICAgICAgKi8KKyAgICBtY2dfb3Njc2VsX3Qgb3Njc2VsOyAvKiE8IE9TQyBzZWxlY3QgTUNHX0M3W09TQ1NFTF0uICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTUNHIFBMTCBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit9IG1jZ19jb25maWdfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiEKKyAqIEBicmllZiBFbmFibGUgdGhlIGNsb2NrIGZvciBzcGVjaWZpYyBJUC4KKyAqCisgKiBAcGFyYW0gbmFtZSAgV2hpY2ggY2xvY2sgdG8gZW5hYmxlLCBzZWUgXHJlZiBjbG9ja19pcF9uYW1lX3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTE9DS19FbmFibGVDbG9jayhjbG9ja19pcF9uYW1lX3QgbmFtZSkKK3sKKyAgICB1aW50MzJfdCByZWdBZGRyID0gU0lNX0JBU0UgKyBDTEtfR0FURV9BQlNUUkFDVF9SRUdfT0ZGU0VUKCh1aW50MzJfdCluYW1lKTsKKyAgICAoKih2b2xhdGlsZSB1aW50MzJfdCAqKXJlZ0FkZHIpIHw9ICgxVSA8PCBDTEtfR0FURV9BQlNUUkFDVF9CSVRTX1NISUZUKCh1aW50MzJfdCluYW1lKSk7Cit9CisKKy8qIQorICogQGJyaWVmIERpc2FibGUgdGhlIGNsb2NrIGZvciBzcGVjaWZpYyBJUC4KKyAqCisgKiBAcGFyYW0gbmFtZSAgV2hpY2ggY2xvY2sgdG8gZGlzYWJsZSwgc2VlIFxyZWYgY2xvY2tfaXBfbmFtZV90LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ0xPQ0tfRGlzYWJsZUNsb2NrKGNsb2NrX2lwX25hbWVfdCBuYW1lKQoreworICAgIHVpbnQzMl90IHJlZ0FkZHIgPSBTSU1fQkFTRSArIENMS19HQVRFX0FCU1RSQUNUX1JFR19PRkZTRVQoKHVpbnQzMl90KW5hbWUpOworICAgICgqKHZvbGF0aWxlIHVpbnQzMl90ICopcmVnQWRkcikgJj0gfigxVSA8PCBDTEtfR0FURV9BQlNUUkFDVF9CSVRTX1NISUZUKCh1aW50MzJfdCluYW1lKSk7Cit9CisKKy8qIQorICogQGJyaWVmIFNldCBFUkNMSzMySyBzb3VyY2UuCisgKgorICogQHBhcmFtIHNyYyBUaGUgdmFsdWUgdG8gc2V0IEVSQ0xLMzJLIGNsb2NrIHNvdXJjZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENMT0NLX1NldEVyMzJrQ2xvY2sodWludDMyX3Qgc3JjKQoreworICAgIFNJTS0+U09QVDEgPSAoKFNJTS0+U09QVDEgJiB+U0lNX1NPUFQxX09TQzMyS1NFTF9NQVNLKSB8IFNJTV9TT1BUMV9PU0MzMktTRUwoc3JjKSk7Cit9CisKKy8qIQorICogQGJyaWVmIFNldCBMUFVBUlQgY2xvY2sgc291cmNlLgorICoKKyAqIEBwYXJhbSBzcmMgVGhlIHZhbHVlIHRvIHNldCBMUFVBUlQgY2xvY2sgc291cmNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ0xPQ0tfU2V0THB1YXJ0Q2xvY2sodWludDMyX3Qgc3JjKQoreworICAgIFNJTS0+U09QVDIgPSAoKFNJTS0+U09QVDIgJiB+U0lNX1NPUFQyX0xQVUFSVDBTUkNfTUFTSykgfCBTSU1fU09QVDJfTFBVQVJUMFNSQyhzcmMpKTsKK30KKworLyohCisgKiBAYnJpZWYgU2V0IFRQTSBjbG9jayBzb3VyY2UuCisgKgorICogQHBhcmFtIHNyYyBUaGUgdmFsdWUgdG8gc2V0IFRQTSBjbG9jayBzb3VyY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTE9DS19TZXRUcG1DbG9jayh1aW50MzJfdCBzcmMpCit7CisgICAgU0lNLT5TT1BUMiA9ICgoU0lNLT5TT1BUMiAmIH5TSU1fU09QVDJfVFBNU1JDX01BU0spIHwgU0lNX1NPUFQyX1RQTVNSQyhzcmMpKTsKK30KKworLyohCisgKiBAYnJpZWYgU2V0IENMS09VVCBzb3VyY2UuCisgKgorICogQHBhcmFtIHNyYyBUaGUgdmFsdWUgdG8gc2V0IENMS09VVCBzb3VyY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTE9DS19TZXRDbGtPdXRDbG9jayh1aW50MzJfdCBzcmMpCit7CisgICAgU0lNLT5TT1BUMiA9ICgoU0lNLT5TT1BUMiAmIH5TSU1fU09QVDJfQ0xLT1VUU0VMX01BU0spIHwgU0lNX1NPUFQyX0NMS09VVFNFTChzcmMpKTsKK30KKworLyohCisgKiBAYnJpZWYgU3lzdGVtIGNsb2NrIGRpdmlkZXIKKyAqCisgKiBTZXQgdGhlIFNJTV9DTEtESVYxW09VVERJVjFdLCBTSU1fQ0xLRElWMVtPVVRESVY0XS4KKyAqCisgKiBAcGFyYW0gb3V0ZGl2MSBDbG9jayAxIG91dHB1dCBkaXZpZGVyIHZhbHVlLgorICoKKyAqIEBwYXJhbSBvdXRkaXY0IENsb2NrIDQgb3V0cHV0IGRpdmlkZXIgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTE9DS19TZXRPdXREaXYodWludDMyX3Qgb3V0ZGl2MSwgdWludDMyX3Qgb3V0ZGl2NCkKK3sKKyAgICBTSU0tPkNMS0RJVjEgPSBTSU1fQ0xLRElWMV9PVVRESVYxKG91dGRpdjEpIHwgU0lNX0NMS0RJVjFfT1VURElWNChvdXRkaXY0KTsKK30KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgY2xvY2sgZnJlcXVlbmN5IGZvciBhIHNwZWNpZmljIGNsb2NrIG5hbWUuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIGN1cnJlbnQgY2xvY2sgY29uZmlndXJhdGlvbnMgYW5kIHRoZW4gY2FsY3VsYXRlcworICogdGhlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgYSBzcGVjaWZpYyBjbG9jayBuYW1lIGRlZmluZWQgaW4gY2xvY2tfbmFtZV90LgorICogVGhlIE1DRyBtdXN0IGJlIHByb3Blcmx5IGNvbmZpZ3VyZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogQHBhcmFtIGNsb2NrTmFtZSBDbG9jayBuYW1lcyBkZWZpbmVkIGluIGNsb2NrX25hbWVfdAorICogQHJldHVybiBDbG9jayBmcmVxdWVuY3kgdmFsdWUgaW4gSGVydHoKKyAqLwordWludDMyX3QgQ0xPQ0tfR2V0RnJlcShjbG9ja19uYW1lX3QgY2xvY2tOYW1lKTsKKworLyohCisgKiBAYnJpZWYgR2V0IHRoZSBjb3JlIGNsb2NrIG9yIHN5c3RlbSBjbG9jayBmcmVxdWVuY3kuCisgKgorICogQHJldHVybiBDbG9jayBmcmVxdWVuY3kgaW4gSHouCisgKi8KK3VpbnQzMl90IENMT0NLX0dldENvcmVTeXNDbGtGcmVxKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBHZXQgdGhlIHBsYXRmb3JtIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCisgKiBAcmV0dXJuIENsb2NrIGZyZXF1ZW5jeSBpbiBIei4KKyAqLwordWludDMyX3QgQ0xPQ0tfR2V0UGxhdENsa0ZyZXEodm9pZCk7CisKKy8qIQorICogQGJyaWVmIEdldCB0aGUgYnVzIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCisgKiBAcmV0dXJuIENsb2NrIGZyZXF1ZW5jeSBpbiBIei4KKyAqLwordWludDMyX3QgQ0xPQ0tfR2V0QnVzQ2xrRnJlcSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgR2V0IHRoZSBmbGFzaCBjbG9jayBmcmVxdWVuY3kuCisgKgorICogQHJldHVybiBDbG9jayBmcmVxdWVuY3kgaW4gSHouCisgKi8KK3VpbnQzMl90IENMT0NLX0dldEZsYXNoQ2xrRnJlcSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgR2V0IHRoZSBleHRlcm5hbCByZWZlcmVuY2UgMzJLIGNsb2NrIGZyZXF1ZW5jeSAoRVJDTEszMkspLgorICoKKyAqIEByZXR1cm4gQ2xvY2sgZnJlcXVlbmN5IGluIEh6LgorICovCit1aW50MzJfdCBDTE9DS19HZXRFcjMya0Nsa0ZyZXEodm9pZCk7CisKKy8qIQorICogQGJyaWVmIEdldCB0aGUgT1NDMCBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5IChPU0MwRVJDTEspLgorICoKKyAqIEByZXR1cm4gQ2xvY2sgZnJlcXVlbmN5IGluIEh6LgorICovCit1aW50MzJfdCBDTE9DS19HZXRPc2MwRXJDbGtGcmVxKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBTZXQgdGhlIGNsb2NrIGNvbmZpZ3VyZSBpbiBTSU0gbW9kdWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyBzeXN0ZW0gbGF5ZXIgY2xvY2sgc2V0dGluZ3MgaW4gU0lNIG1vZHVsZS4KKyAqCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyZSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgQ0xPQ0tfU2V0U2ltQ29uZmlnKHNpbV9jbG9ja19jb25maWdfdCBjb25zdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgU2V0IHRoZSBzeXN0ZW0gY2xvY2sgZGl2aWRlcnMgaW4gU0lNIHRvIHNhZmUgdmFsdWUuCisgKgorICogVGhlIHN5c3RlbSBsZXZlbCBjbG9ja3MgKGNvcmUgY2xvY2ssIGJ1cyBjbG9jaywgZmxleGJ1cyBjbG9jayBhbmQgZmxhc2ggY2xvY2spCisgKiBtdXN0IGJlIGluIGFsbG93ZWQgcmFuZ2VzLiBEdXJpbmcgTUNHIGNsb2NrIG1vZGUgc3dpdGNoLCB0aGUgTUNHIG91dHB1dCBjbG9jaworICogY2hhbmdlcyB0aGVuIHRoZSBzeXN0ZW0gbGV2ZWwgY2xvY2tzIG1heSBiZSBvdXQgb2YgcmFuZ2UuIFRoaXMgZnVuY3Rpb24gY291bGQKKyAqIGJlIHVzZWQgYmVmb3JlIE1DRyBtb2RlIGNoYW5nZSwgdG8gbWFrZSBzdXJlIHN5c3RlbSBsZXZlbCBjbG9ja3MgYXJlIGluIGFsbG93ZWQKKyAqIHJhbmdlLgorICoKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgY29uZmlndXJlIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENMT0NLX1NldFNpbVNhZmVEaXZzKHZvaWQpCit7CisgICAgU0lNLT5DTEtESVYxID0gMHgwMDA0MDAwMFU7Cit9CisKKy8qISBAbmFtZSBNQ0cgZnJlcXVlbmN5IGZ1bmN0aW9ucy4gKi8KKy8qQHsqLworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBNQ0cgb3V0cHV0IGNsb2NrIChNQ0dPVVRDTEspIGZyZXF1ZW5jeS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIE1DRyBvdXRwdXQgY2xvY2sgZnJlcXVlbmN5IGluIEh6IGJhc2VkIG9uIHRoZSBjdXJyZW50IE1DRworICogcmVnaXN0ZXIgdmFsdWUuCisgKgorICogQHJldHVybiBUaGUgZnJlcXVlbmN5IG9mIE1DR09VVENMSy4KKyAqLwordWludDMyX3QgQ0xPQ0tfR2V0T3V0Q2xrRnJlcSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgTUNHIEZMTCBjbG9jayAoTUNHRkxMQ0xLKSBmcmVxdWVuY3kuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBNQ0cgRkxMIGNsb2NrIGZyZXF1ZW5jeSBpbiBIeiBiYXNlZCBvbiB0aGUgY3VycmVudCBNQ0cKKyAqIHJlZ2lzdGVyIHZhbHVlLiBUaGUgRkxMIGlzIGVuYWJsZWQgaW4gRkVJL0ZCSS9GRUUvRkJFIG1vZGUgYW5kCisgKiBkaXNhYmxlZCBpbiBsb3cgcG93ZXIgc3RhdGUgaW4gb3RoZXIgbW9kZXMuCisgKgorICogQHJldHVybiBUaGUgZnJlcXVlbmN5IG9mIE1DR0ZMTENMSy4KKyAqLwordWludDMyX3QgQ0xPQ0tfR2V0RmxsRnJlcSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgTUNHIGludGVybmFsIHJlZmVyZW5jZSBjbG9jayAoTUNHSVJDTEspIGZyZXF1ZW5jeS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIE1DRyBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5IGluIEh6IGJhc2VkCisgKiBvbiB0aGUgY3VycmVudCBNQ0cgcmVnaXN0ZXIgdmFsdWUuCisgKgorICogQHJldHVybiBUaGUgZnJlcXVlbmN5IG9mIE1DR0lSQ0xLLgorICovCit1aW50MzJfdCBDTE9DS19HZXRJbnRlcm5hbFJlZkNsa0ZyZXEodm9pZCk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIE1DRyBmaXhlZCBmcmVxdWVuY3kgY2xvY2sgKE1DR0ZGQ0xLKSBmcmVxdWVuY3kuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBNQ0cgZml4ZWQgZnJlcXVlbmN5IGNsb2NrIGZyZXF1ZW5jeSBpbiBIeiBiYXNlZAorICogb24gdGhlIGN1cnJlbnQgTUNHIHJlZ2lzdGVyIHZhbHVlLgorICoKKyAqIEByZXR1cm4gVGhlIGZyZXF1ZW5jeSBvZiBNQ0dGRkNMSy4KKyAqLwordWludDMyX3QgQ0xPQ0tfR2V0Rml4ZWRGcmVxQ2xrRnJlcSh2b2lkKTsKKworCisvKkB9Ki8KKworLyohIEBuYW1lIE1DRyBjbG9jayBjb25maWd1cmF0aW9uLiAqLworLypAeyovCisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIE1DRyBsb3cgcG93ZXIuCisgKgorICogRW5hYmxpbmcgdGhlIE1DRyBsb3cgcG93ZXIgZGlzYWJsZXMgdGhlIFBMTCBhbmQgRkxMIGluIGJ5cGFzcyBtb2Rlcy4gSW4gb3RoZXIgd29yZHMsCisgKiBpbiBGQkUgYW5kIFBCRSBtb2RlcywgZW5hYmxpbmcgbG93IHBvd2VyIHNldHMgdGhlIE1DRyB0byBCTFBFIG1vZGUuIEluIEZCSSBhbmQKKyAqIFBCSSBtb2RlcywgZW5hYmxpbmcgbG93IHBvd2VyIHNldHMgdGhlIE1DRyB0byBCTFBJIG1vZGUuCisgKiBXaGVuIGRpc2FibGluZyB0aGUgTUNHIGxvdyBwb3dlciwgdGhlIFBMTCBvciBGTEwgYXJlIGVuYWJsZWQgYmFzZWQgb24gTUNHIHNldHRpbmdzLgorICoKKyAqIEBwYXJhbSBlbmFibGUgVHJ1ZSB0byBlbmFibGUgTUNHIGxvdyBwb3dlciwgZmFsc2UgdG8gZGlzYWJsZSBNQ0cgbG93IHBvd2VyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ0xPQ0tfU2V0TG93UG93ZXJFbmFibGUoYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIE1DRy0+QzIgfD0gTUNHX0MyX0xQX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1DRy0+QzIgJj0gfk1DR19DMl9MUF9NQVNLOworICAgIH0KK30KKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgSW50ZXJuYWwgUmVmZXJlbmNlIGNsb2NrIChNQ0dJUkNMSykuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBcYyBNQ0dJUkNMSyBiYXNlIG9uIHBhcmFtZXRlcnMuIEl0IGFsc28gc2VsZWN0cyB0aGUgSVJDCisgKiBzb3VyY2UuIElmIHRoZSBmYXN0IElSQyBpcyB1c2VkLCB0aGlzIGZ1bmN0aW9uIHNldHMgdGhlIGZhc3QgSVJDIGRpdmlkZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGFsc28gc2V0cyB3aGV0aGVyIHRoZSBcYyBNQ0dJUkNMSyBpcyBlbmFibGVkIGluIHN0b3AgbW9kZS4KKyAqIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBpbiBGQkkvUEJJL0JMUEkgbW9kZXMgbWF5IGNoYW5nZSB0aGUgc3lzdGVtIGNsb2NrLiBBcyBhIHJlc3VsdCwKKyAqIHVzaW5nIHRoZSBmdW5jdGlvbiBpbiB0aGVzZSBtb2RlcyBpdCBpcyBub3QgYWxsb3dlZC4KKyAqCisgKiBAcGFyYW0gZW5hYmxlTW9kZSBNQ0dJUkNMSyBlbmFibGUgbW9kZSwgT1InZWQgdmFsdWUgb2YgQHJlZiBfbWNnX2lyY2xrX2VuYWJsZV9tb2RlLgorICogQHBhcmFtIGlyY3MgICAgICAgTUNHSVJDTEsgY2xvY2sgc291cmNlLCBjaG9vc2UgZmFzdCBvciBzbG93LgorICogQHBhcmFtIGZjcmRpdiAgICAgRmFzdCBJUkMgZGl2aWRlciBzZXR0aW5nIChcYyBGQ1JESVYpLgorICogQHJldHZhbCBrU3RhdHVzX01DR19Tb3VyY2VVc2VkIEJlY2F1c2UgdGhlIGludGVybmFsbCByZWZlcmVuY2UgY2xvY2sgaXMgdXNlZCBhcyBhIGNsb2NrIHNvdXJjZSwKKyAqIHRoZSBjb25mdXJhdGlvbiBzaG91bGQgbm90IGJlIGNoYW5nZWQuIE90aGVyd2lzZSwgYSBnbGl0Y2ggb2NjdXJzLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgTUNHSVJDTEsgY29uZmlndXJhdGlvbiBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuCisgKi8KK3N0YXR1c190IENMT0NLX1NldEludGVybmFsUmVmQ2xrQ29uZmlnKHVpbnQ4X3QgZW5hYmxlTW9kZSwgbWNnX2lyY19tb2RlX3QgaXJjcywgdWludDhfdCBmY3JkaXYpOworCisvKiEKKyAqIEBicmllZiBTZWxlY3RzIHRoZSBNQ0cgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrLgorICoKKyAqIFNlbGVjdHMgdGhlIE1DRyBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgc291cmNlLCBjaGFuZ2VzIHRoZSBNQ0dfQzdbT1NDU0VMXSwKKyAqIGFuZCB3YWl0cyBmb3IgdGhlIGNsb2NrIHNvdXJjZSB0byBiZSBzdGFibGUuIEJlY2F1c2UgdGhlIGV4dGVybmFsIHJlZmVyZW5jZQorICogY2xvY2sgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGluIEZFRS9GQkUvQkxQRS9QQkUvUEVFIG1vZGVzLCBkbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIHRoZXNlIG1vZGVzLgorICoKKyAqIEBwYXJhbSBvc2NzZWwgTUNHIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBzb3VyY2UsIE1DR19DN1tPU0NTRUxdLgorICogQHJldHZhbCBrU3RhdHVzX01DR19Tb3VyY2VVc2VkIEJlY2F1c2UgdGhlIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBpcyB1c2VkIGFzIGEgY2xvY2sgc291cmNlLAorICogdGhlIGNvbmZ1cmF0aW9uIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gT3RoZXJ3aXNlLCBhIGdsaXRjaCBvY2N1cnMuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBFeHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgc2V0IHN1Y2Nlc3NmdWxseS4KKyAqLworc3RhdHVzX3QgQ0xPQ0tfU2V0RXh0ZXJuYWxSZWZDbGtDb25maWcobWNnX29zY3NlbF90IG9zY3NlbCk7CisKKy8qIQorICogQGJyaWVmIFNldCB0aGUgRkxMIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBkaXZpZGVyIHZhbHVlLgorICoKKyAqIFNldHMgdGhlIEZMTCBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZGl2aWRlciB2YWx1ZSwgdGhlIHJlZ2lzdGVyIE1DR19DMVtGUkRJVl0uCisgKgorICogQHBhcmFtIGZyZGl2IFRoZSBGTEwgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGRpdmlkZXIgdmFsdWUsIE1DR19DMVtGUkRJVl0uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTE9DS19TZXRGbGxFeHRSZWZEaXYodWludDhfdCBmcmRpdikKK3sKKyAgICBNQ0ctPkMxID0gKE1DRy0+QzEgJiB+TUNHX0MxX0ZSRElWX01BU0spIHwgTUNHX0MxX0ZSRElWKGZyZGl2KTsKK30KKworCisKKy8qQH0qLworCisvKiEgQG5hbWUgTUNHIGNsb2NrIGxvY2sgbW9uaXRvciBmdW5jdGlvbnMuICovCisvKkB7Ki8KKworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBSVEMgT1NDIGNsb2NrIG1vbml0b3IgbW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFJUQyBPU0MgY2xvY2sgbW9uaXRvciBtb2RlLiBTZWUgQHJlZiBtY2dfbW9uaXRvcl9tb2RlX3QgZm9yIGRldGFpbHMuCisgKgorICogQHBhcmFtIG1vZGUgTW9uaXRvciBtb2RlIHRvIHNldC4KKyAqLwordm9pZCBDTE9DS19TZXRSdGNPc2NNb25pdG9yTW9kZShtY2dfbW9uaXRvcl9tb2RlX3QgbW9kZSk7CisKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgTUNHIHN0YXR1cyBmbGFncy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIE1DRyBjbG9jayBzdGF0dXMgZmxhZ3MuIEFsbCBzdGF0dXMgZmxhZ3MgYXJlCisgKiByZXR1cm5lZCBhcyBhIGxvZ2ljYWwgT1Igb2YgdGhlIGVudW1lcmF0aW9uIEByZWYgX21jZ19zdGF0dXNfZmxhZ3NfdC4gVG8KKyAqIGNoZWNrIGEgc3BlY2lmaWMgZmxhZywgY29tcGFyZSB0aGUgcmV0dXJuIHZhbHVlIHdpdGggdGhlIGZsYWcuCisgKgorICogRXhhbXBsZToKKyAqIEBjb2RlCisgICAvLyBUbyBjaGVjayB0aGUgY2xvY2sgbG9zdCBsb2NrIHN0YXR1cyBvZiBPU0MwIGFuZCBQTEwwLgorICAgdWludDMyX3QgbWNnRmxhZ3M7CisKKyAgIG1jZ0ZsYWdzID0gQ0xPQ0tfR2V0U3RhdHVzRmxhZ3MoKTsKKworICAgaWYgKG1jZ0ZsYWdzICYga01DR19Pc2MwTG9zdEZsYWcpCisgICB7CisgICAgICAgLy8gT1NDMCBjbG9jayBsb2NrIGxvc3QuIERvIHNvbWV0aGluZy4KKyAgIH0KKyAgIGlmIChtY2dGbGFncyAmIGtNQ0dfUGxsMExvc3RGbGFnKQorICAgeworICAgICAgIC8vIFBMTDAgY2xvY2sgbG9jayBsb3N0LiBEbyBzb21ldGhpbmcuCisgICB9CisgICBAZW5kY29kZQorICoKKyAqIEByZXR1cm4gIExvZ2ljYWwgT1IgdmFsdWUgb2YgdGhlIEByZWYgX21jZ19zdGF0dXNfZmxhZ3NfdC4KKyAqLwordWludDMyX3QgQ0xPQ0tfR2V0U3RhdHVzRmxhZ3Modm9pZCk7CisKKy8qIQorICogQGJyaWVmIENsZWFycyB0aGUgTUNHIHN0YXR1cyBmbGFncy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgTUNHIGNsb2NrIGxvY2sgbG9zdCBzdGF0dXMuIFRoZSBwYXJhbWV0ZXIgaXMgYSBsb2dpY2FsCisgKiBPUiB2YWx1ZSBvZiB0aGUgZmxhZ3MgdG8gY2xlYXIuIFNlZSBAcmVmIF9tY2dfc3RhdHVzX2ZsYWdzX3QuCisgKgorICogRXhhbXBsZToKKyAqIEBjb2RlCisgICAvLyBUbyBjbGVhciB0aGUgY2xvY2sgbG9zdCBsb2NrIHN0YXR1cyBmbGFncyBvZiBPU0MwIGFuZCBQTEwwLgorCisgICBDTE9DS19DbGVhclN0YXR1c0ZsYWdzKGtNQ0dfT3NjMExvc3RGbGFnIHwga01DR19QbGwwTG9zdEZsYWcpOworICAgQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gbWFzayBUaGUgc3RhdHVzIGZsYWdzIHRvIGNsZWFyLiBUaGlzIGlzIGEgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICAgICAgZW51bWVyYXRpb24gQHJlZiBfbWNnX3N0YXR1c19mbGFnc190LgorICovCit2b2lkIENMT0NLX0NsZWFyU3RhdHVzRmxhZ3ModWludDMyX3QgbWFzayk7CisKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIE9TQyBjb25maWd1cmF0aW9uCisgKiBAeworICovCisKKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIE9TQzAuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgT1NDMCBhY2NvcmRpbmcgdG8gdGhlIGJvYXJkIGNvbmZpZ3VyYXRpb24uCisgKgorICogQHBhcmFtICBjb25maWcgUG9pbnRlciB0byB0aGUgT1NDMCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBDTE9DS19Jbml0T3NjMChvc2NfY29uZmlnX3QgY29uc3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIERlaW5pdGlhbGl6ZXMgdGhlIE9TQzAuCisgKgorICogVGhpcyBmdW5jdGlvbiBkZWluaXRpYWxpemVzIHRoZSBPU0MwLgorICovCit2b2lkIENMT0NLX0RlaW5pdE9zYzAodm9pZCk7CisKKy8qIEB9ICovCisKKy8qIQorICogQG5hbWUgRXh0ZXJuYWwgY2xvY2sgZnJlcXVlbmN5CisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIFhUQUwwIGZyZXF1ZW5jeSBiYXNlZCBvbiBib2FyZCBzZXR0aW5ncy4KKyAqCisgKiBAcGFyYW0gZnJlcSBUaGUgWFRBTDAvRVhUQUwwIGlucHV0IGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENMT0NLX1NldFh0YWwwRnJlcSh1aW50MzJfdCBmcmVxKQoreworICAgIGdfeHRhbDBGcmVxID0gZnJlcTsKK30KKworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBYVEFMMzIvUlRDX0NMS0lOIGZyZXF1ZW5jeSBiYXNlZCBvbiBib2FyZCBzZXR0aW5ncy4KKyAqCisgKiBAcGFyYW0gZnJlcSBUaGUgWFRBTDMyL0VYVEFMMzIvUlRDX0NMS0lOIGlucHV0IGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENMT0NLX1NldFh0YWwzMkZyZXEodWludDMyX3QgZnJlcSkKK3sKKyAgICBnX3h0YWwzMkZyZXEgPSBmcmVxOworfQorLyogQH0gKi8KKworLyohCisgKiBAbmFtZSBNQ0cgYXV0by10cmltIG1hY2hpbmUuCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEF1dG8gdHJpbXMgdGhlIGludGVybmFsIHJlZmVyZW5jZSBjbG9jay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRyaW1zIHRoZSBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgYnkgdXNpbmcgdGhlIGV4dGVybmFsIGNsb2NrLiBJZgorICogc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyB0aGUga1N0YXR1c19TdWNjZXNzIGFuZCB0aGUgZnJlcXVlbmN5IGFmdGVyCisgKiB0cmltbWluZyBpcyByZWNlaXZlZCBpbiB0aGUgcGFyYW1ldGVyIEBwIGFjdHVhbEZyZXEuIElmIGFuIGVycm9yIG9jY3VycywKKyAqIHRoZSBlcnJvciBjb2RlIGlzIHJldHVybmVkLgorICoKKyAqIEBwYXJhbSBleHRGcmVxICAgICAgRXh0ZXJuYWwgY2xvY2sgZnJlcXVlbmN5LCB3aGljaCBzaG91bGQgYmUgYSBidXMgY2xvY2suCisgKiBAcGFyYW0gZGVzaXJlRnJlcSAgIEZyZXF1ZW5jeSB0byB0cmltIHRvLgorICogQHBhcmFtIGFjdHVhbEZyZXEgICBBY3R1YWwgZnJlcXVlbmN5IGFmdGVyIHRyaW1taW5nLgorICogQHBhcmFtIGF0bXMgICAgICAgICBUcmltIGZhc3Qgb3Igc2xvdyBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2suCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBBVE0gc3VjY2Vzcy4KKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfQXRtQnVzQ2xvY2tJbnZhbGlkIFRoZSBidXMgY2xvY2sgaXMgbm90IGluIGFsbG93ZWQgcmFuZ2UgZm9yIHRoZSBBVE0uCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX0F0bURlc2lyZWRGcmVxSW52YWxpZCBNQ0dJUkNMSyBjb3VsZCBub3QgYmUgdHJpbW1lZCB0byB0aGUgZGVzaXJlZCBmcmVxdWVuY3kuCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX0F0bUlyY1VzZWQgQ291bGQgbm90IHRyaW0gYmVjYXVzZSBNQ0dJUkNMSyBpcyB1c2VkIGFzIGEgYnVzIGNsb2NrIHNvdXJjZS4KKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfQXRtSGFyZHdhcmVGYWlsIEhhcmR3YXJlIGZhaWxzIHdoaWxlIHRyaW1taW5nLgorICovCitzdGF0dXNfdCBDTE9DS19UcmltSW50ZXJuYWxSZWZDbGsodWludDMyX3QgZXh0RnJlcSwgdWludDMyX3QgZGVzaXJlRnJlcSwgdWludDMyX3QgKmFjdHVhbEZyZXEsIG1jZ19hdG1fc2VsZWN0X3QgYXRtcyk7CisvKiBAfSAqLworCisvKiEgQG5hbWUgTUNHIG1vZGUgZnVuY3Rpb25zLiAqLworLypAeyovCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgTUNHIG1vZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIE1DRyByZWdpc3RlcnMgYW5kIGRldGVybWluZXMgdGhlIGN1cnJlbnQgTUNHIG1vZGUuCisgKgorICogQHJldHVybiBDdXJyZW50IE1DRyBtb2RlIG9yIGVycm9yIGNvZGU7IFNlZSBAcmVmIG1jZ19tb2RlX3QuCisgKi8KK21jZ19tb2RlX3QgQ0xPQ0tfR2V0TW9kZSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgTUNHIHRvIEZFSSBtb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTUNHIHRvIEZFSSBtb2RlLiBJZiBzZXR0aW5nIHRvIEZFSSBtb2RlIGZhaWxzCisgKiBmcm9tIHRoZSBjdXJyZW50IG1vZGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvci4KKyAqCisgKiBAcGFyYW0gICAgICAgZG14MzIgIERNWDMyIGluIEZFSSBtb2RlLgorICogQHBhcmFtICAgICAgIGRycyBUaGUgRENPIHJhbmdlIHNlbGVjdGlvbi4KKyAqIEBwYXJhbSAgICAgICBmbGxTdGFibGVEZWxheSBEZWxheSBmdW5jdGlvbiB0byAgZW5zdXJlIHRoYXQgdGhlIEZMTCBpcyBzdGFibGUuIFBhc3NpbmcKKyAqICAgICAgICAgICAgICBOVUxMIGRvZXMgbm90IGNhdXNlIGEgZGVsYXkuCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZSBDb3VsZCBub3Qgc3dpdGNoIHRvIHRoZSB0YXJnZXQgbW9kZS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN3aXRjaGVkIHRvIHRoZSB0YXJnZXQgbW9kZSBzdWNjZXNzZnVsbHkuCisgKiBAbm90ZSBJZiBAcCBkbXgzMiBpcyBzZXQgdG8ga01DR19EbXgzMkZpbmUsIHRoZSBzbG93IElSQyBtdXN0IG5vdCBiZSB0cmltbWVkCisgKiB0byBhIGZyZXF1ZW5jeSBhYm92ZSAzMjc2OCBIei4KKyAqLworc3RhdHVzX3QgQ0xPQ0tfU2V0RmVpTW9kZShtY2dfZG14MzJfdCBkbXgzMiwgbWNnX2Ryc190IGRycywgdm9pZCAoKmZsbFN0YWJsZURlbGF5KSh2b2lkKSk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIE1DRyB0byBGRUUgbW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE1DRyB0byBGRUUgbW9kZS4gSWYgc2V0dGluZyB0byBGRUUgbW9kZSBmYWlscworICogZnJvbSB0aGUgY3VycmVudCBtb2RlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IuCisgKgorICogQHBhcmFtICAgZnJkaXYgIEZMTCByZWZlcmVuY2UgY2xvY2sgZGl2aWRlciBzZXR0aW5nLCBGUkRJVi4KKyAqIEBwYXJhbSAgIGRteDMyICBETVgzMiBpbiBGRUUgbW9kZS4KKyAqIEBwYXJhbSAgIGRycyAgICBUaGUgRENPIHJhbmdlIHNlbGVjdGlvbi4KKyAqIEBwYXJhbSAgIGZsbFN0YWJsZURlbGF5IERlbGF5IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSBGTEwgaXMgc3RhYmxlLiBQYXNzaW5nCisgKiAgICAgICAgICBOVUxMIGRvZXMgbm90IGNhdXNlIGEgZGVsYXkuCisgKgorICogQHJldHZhbCBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGUgQ291bGQgbm90IHN3aXRjaCB0byB0aGUgdGFyZ2V0IG1vZGUuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTd2l0Y2hlZCB0byB0aGUgdGFyZ2V0IG1vZGUgc3VjY2Vzc2Z1bGx5LgorICovCitzdGF0dXNfdCBDTE9DS19TZXRGZWVNb2RlKHVpbnQ4X3QgZnJkaXYsIG1jZ19kbXgzMl90IGRteDMyLCBtY2dfZHJzX3QgZHJzLCB2b2lkICgqZmxsU3RhYmxlRGVsYXkpKHZvaWQpKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgTUNHIHRvIEZCSSBtb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTUNHIHRvIEZCSSBtb2RlLiBJZiBzZXR0aW5nIHRvIEZCSSBtb2RlIGZhaWxzCisgKiBmcm9tIHRoZSBjdXJyZW50IG1vZGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvci4KKyAqCisgKiBAcGFyYW0gIGRteDMyICBETVgzMiBpbiBGQkkgbW9kZS4KKyAqIEBwYXJhbSAgZHJzICBUaGUgRENPIHJhbmdlIHNlbGVjdGlvbi4KKyAqIEBwYXJhbSAgZmxsU3RhYmxlRGVsYXkgRGVsYXkgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIEZMTCBpcyBzdGFibGUuIElmIHRoZSBGTEwKKyAqICAgICAgICAgaXMgbm90IHVzZWQgaW4gRkJJIG1vZGUsIHRoaXMgcGFyYW1ldGVyIGNhbiBiZSBOVUxMLiBQYXNzaW5nCisgKiAgICAgICAgIE5VTEwgZG9lcyBub3QgY2F1c2UgYSBkZWxheS4KKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfTW9kZVVucmVhY2hhYmxlIENvdWxkIG5vdCBzd2l0Y2ggdG8gdGhlIHRhcmdldCBtb2RlLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3dpdGNoZWQgdG8gdGhlIHRhcmdldCBtb2RlIHN1Y2Nlc3NmdWxseS4KKyAqIEBub3RlIElmIEBwIGRteDMyIGlzIHNldCB0byBrTUNHX0RteDMyRmluZSwgdGhlIHNsb3cgSVJDIG11c3Qgbm90IGJlIHRyaW1tZWQKKyAqIHRvIGZyZXF1ZW5jeSBhYm92ZSAzMjc2OCBIei4KKyAqLworc3RhdHVzX3QgQ0xPQ0tfU2V0RmJpTW9kZShtY2dfZG14MzJfdCBkbXgzMiwgbWNnX2Ryc190IGRycywgdm9pZCAoKmZsbFN0YWJsZURlbGF5KSh2b2lkKSk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIE1DRyB0byBGQkUgbW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE1DRyB0byBGQkUgbW9kZS4gSWYgc2V0dGluZyB0byBGQkUgbW9kZSBmYWlscworICogZnJvbSB0aGUgY3VycmVudCBtb2RlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IuCisgKgorICogQHBhcmFtICAgZnJkaXYgIEZMTCByZWZlcmVuY2UgY2xvY2sgZGl2aWRlciBzZXR0aW5nLCBGUkRJVi4KKyAqIEBwYXJhbSAgIGRteDMyICBETVgzMiBpbiBGQkUgbW9kZS4KKyAqIEBwYXJhbSAgIGRycyAgICBUaGUgRENPIHJhbmdlIHNlbGVjdGlvbi4KKyAqIEBwYXJhbSAgIGZsbFN0YWJsZURlbGF5IERlbGF5IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSBGTEwgaXMgc3RhYmxlLiBJZiB0aGUgRkxMCisgKiAgICAgICAgICBpcyBub3QgdXNlZCBpbiBGQkUgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIE5VTEwuIFBhc3NpbmcgTlVMTAorICogICAgICAgICAgZG9lcyBub3QgY2F1c2UgYSBkZWxheS4KKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfTW9kZVVucmVhY2hhYmxlIENvdWxkIG5vdCBzd2l0Y2ggdG8gdGhlIHRhcmdldCBtb2RlLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3dpdGNoZWQgdG8gdGhlIHRhcmdldCBtb2RlIHN1Y2Nlc3NmdWxseS4KKyAqLworc3RhdHVzX3QgQ0xPQ0tfU2V0RmJlTW9kZSh1aW50OF90IGZyZGl2LCBtY2dfZG14MzJfdCBkbXgzMiwgbWNnX2Ryc190IGRycywgdm9pZCAoKmZsbFN0YWJsZURlbGF5KSh2b2lkKSk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIE1DRyB0byBCTFBJIG1vZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBNQ0cgdG8gQkxQSSBtb2RlLiBJZiBzZXR0aW5nIHRvIEJMUEkgbW9kZSBmYWlscworICogZnJvbSB0aGUgY3VycmVudCBtb2RlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IuCisgKgorICogQHJldHZhbCBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGUgQ291bGQgbm90IHN3aXRjaCB0byB0aGUgdGFyZ2V0IG1vZGUuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTd2l0Y2hlZCB0byB0aGUgdGFyZ2V0IG1vZGUgc3VjY2Vzc2Z1bGx5LgorICovCitzdGF0dXNfdCBDTE9DS19TZXRCbHBpTW9kZSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgTUNHIHRvIEJMUEUgbW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE1DRyB0byBCTFBFIG1vZGUuIElmIHNldHRpbmcgdG8gQkxQRSBtb2RlIGZhaWxzCisgKiBmcm9tIHRoZSBjdXJyZW50IG1vZGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvci4KKyAqCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZSBDb3VsZCBub3Qgc3dpdGNoIHRvIHRoZSB0YXJnZXQgbW9kZS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN3aXRjaGVkIHRvIHRoZSB0YXJnZXQgbW9kZSBzdWNjZXNzZnVsbHkuCisgKi8KK3N0YXR1c190IENMT0NLX1NldEJscGVNb2RlKHZvaWQpOworCisKKy8qIQorICogQGJyaWVmIFN3aXRjaGVzIHRoZSBNQ0cgdG8gRkJFIG1vZGUgZnJvbSB0aGUgZXh0ZXJuYWwgbW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN3aXRjaGVzIHRoZSBNQ0cgZnJvbSBleHRlcm5hbCBtb2RlcyAoUEVFL1BCRS9CTFBFL0ZFRSkgdG8gdGhlIEZCRSBtb2RlIHF1aWNrbHkuCisgKiBUaGUgZXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBhcyB0aGUgc3lzdGVtIGNsb2NrIHNvdWNlIGFuZCBQTEwgaXMgZGlzYWJsZWQuIEhvd2V2ZXIsCisgKiB0aGUgRkxMIHNldHRpbmdzIGFyZSBub3QgY29uZmlndXJlZC4gVGhpcyBpcyBhIGxpdGUgZnVuY3Rpb24gd2l0aCBhIHNtYWxsIGNvZGUgc2l6ZSwgd2hpY2ggaXMgdXNlZnVsCisgKiBkdXJpbmcgdGhlIG1vZGUgc3dpdGNoLiBGb3IgZXhhbXBsZSwgdG8gc3dpdGNoIGZyb20gUEVFIG1vZGUgdG8gRkVJIG1vZGU6CisgKgorICogQGNvZGUKKyAqIENMT0NLX0V4dGVybmFsTW9kZVRvRmJlTW9kZVF1aWNrKCk7CisgKiBDTE9DS19TZXRGZWlNb2RlKC4uLik7CisgKiBAZW5kY29kZQorICoKKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN3aXRjaGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfTW9kZUludmFsaWQgSWYgdGhlIGN1cnJlbnQgbW9kZSBpcyBub3QgYW4gZXh0ZXJuYWwgbW9kZSwgZG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdHVzX3QgQ0xPQ0tfRXh0ZXJuYWxNb2RlVG9GYmVNb2RlUXVpY2sodm9pZCk7CisKKy8qIQorICogQGJyaWVmIFN3aXRjaGVzIHRoZSBNQ0cgdG8gRkJJIG1vZGUgZnJvbSBpbnRlcm5hbCBtb2Rlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN3aXRjaGVzIHRoZSBNQ0cgZnJvbSBpbnRlcm5hbCBtb2RlcyAoUEVJL1BCSS9CTFBJL0ZFSSkgdG8gdGhlIEZCSSBtb2RlIHF1aWNrbHkuCisgKiBUaGUgTUNHSVJDTEsgaXMgdXNlZCBhcyB0aGUgc3lzdGVtIGNsb2NrIHNvdWNlIGFuZCBQTEwgaXMgZGlzYWJsZWQuIEhvd2V2ZXIsCisgKiBGTEwgc2V0dGluZ3MgYXJlIG5vdCBjb25maWd1cmVkLiBUaGlzIGlzIGEgbGl0ZSBmdW5jdGlvbiB3aXRoIGEgc21hbGwgY29kZSBzaXplLCB3aGljaCBpcyB1c2VmdWwKKyAqIGR1cmluZyB0aGUgbW9kZSBzd2l0Y2guIEZvciBleGFtcGxlLCB0byBzd2l0Y2ggZnJvbSBQRUkgbW9kZSB0byBGRUUgbW9kZToKKyAqCisgKiBAY29kZQorICogQ0xPQ0tfSW50ZXJuYWxNb2RlVG9GYmlNb2RlUXVpY2soKTsKKyAqIENMT0NLX1NldEZlZU1vZGUoLi4uKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3dpdGNoZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCBrU3RhdHVzX01DR19Nb2RlSW52YWxpZCBJZiB0aGUgY3VycmVudCBtb2RlIGlzIG5vdCBhbiBpbnRlcm5hbCBtb2RlLCBkbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0dXNfdCBDTE9DS19JbnRlcm5hbE1vZGVUb0ZiaU1vZGVRdWljayh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgTUNHIHRvIEZFSSBtb2RlIGR1cmluZyBzeXN0ZW0gYm9vdCB1cC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE1DRyB0byBGRUkgbW9kZSBmcm9tIHRoZSByZXNldCBtb2RlLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvCisgKiBzZXQgdXAgTUNHIGR1cmluZyBzeXN0ZW0gYm9vdCB1cC4KKyAqCisgKiBAcGFyYW0gIGRteDMyICBETVgzMiBpbiBGRUkgbW9kZS4KKyAqIEBwYXJhbSAgZHJzIFRoZSBEQ08gcmFuZ2Ugc2VsZWN0aW9uLgorICogQHBhcmFtICBmbGxTdGFibGVEZWxheSBEZWxheSBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgRkxMIGlzIHN0YWJsZS4KKyAqCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZSBDb3VsZCBub3Qgc3dpdGNoIHRvIHRoZSB0YXJnZXQgbW9kZS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN3aXRjaGVkIHRvIHRoZSB0YXJnZXQgbW9kZSBzdWNjZXNzZnVsbHkuCisgKiBAbm90ZSBJZiBAcCBkbXgzMiBpcyBzZXQgdG8ga01DR19EbXgzMkZpbmUsIHRoZSBzbG93IElSQyBtdXN0IG5vdCBiZSB0cmltbWVkCisgKiB0byBmcmVxdWVuY3kgYWJvdmUgMzI3NjggSHouCisgKi8KK3N0YXR1c190IENMT0NLX0Jvb3RUb0ZlaU1vZGUobWNnX2RteDMyX3QgZG14MzIsIG1jZ19kcnNfdCBkcnMsIHZvaWQgKCpmbGxTdGFibGVEZWxheSkodm9pZCkpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBNQ0cgdG8gRkVFIG1vZGUgZHVyaW5nIHN5c3RlbSBib290dXAuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIE1DRyB0byBGRUUgbW9kZSBmcm9tIHRoZSByZXNldCBtb2RlLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvCisgKiBzZXQgdXAgdGhlIE1DRyBkdXJpbmcgc3lzdGVtIGJvb3QgdXAuCisgKgorICogQHBhcmFtICAgb3Njc2VsIE9TQyBjbG9jayBzZWxlY3QsIE9TQ1NFTC4KKyAqIEBwYXJhbSAgIGZyZGl2ICBGTEwgcmVmZXJlbmNlIGNsb2NrIGRpdmlkZXIgc2V0dGluZywgRlJESVYuCisgKiBAcGFyYW0gICBkbXgzMiAgRE1YMzIgaW4gRkVFIG1vZGUuCisgKiBAcGFyYW0gICBkcnMgICAgVGhlIERDTyByYW5nZSBzZWxlY3Rpb24uCisgKiBAcGFyYW0gICBmbGxTdGFibGVEZWxheSBEZWxheSBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgRkxMIGlzIHN0YWJsZS4KKyAqCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZSBDb3VsZCBub3Qgc3dpdGNoIHRvIHRoZSB0YXJnZXQgbW9kZS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN3aXRjaGVkIHRvIHRoZSB0YXJnZXQgbW9kZSBzdWNjZXNzZnVsbHkuCisgKi8KK3N0YXR1c190IENMT0NLX0Jvb3RUb0ZlZU1vZGUoCisgICAgbWNnX29zY3NlbF90IG9zY3NlbCwgdWludDhfdCBmcmRpdiwgbWNnX2RteDMyX3QgZG14MzIsIG1jZ19kcnNfdCBkcnMsIHZvaWQgKCpmbGxTdGFibGVEZWxheSkodm9pZCkpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBNQ0cgdG8gQkxQSSBtb2RlIGR1cmluZyBzeXN0ZW0gYm9vdCB1cC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE1DRyB0byBCTFBJIG1vZGUgZnJvbSB0aGUgcmVzZXQgbW9kZS4gSXQgY2FuIGFsc28gYmUgdXNlZCB0bworICogc2V0IHVwIHRoZSBNQ0cgZHVyaW5nIHN5dGVtIGJvb3QgdXAuCisgKgorICogQHBhcmFtICBmY3JkaXYgRmFzdCBJUkMgZGl2aWRlciwgRkNSRElWLgorICogQHBhcmFtICBpcmNzICAgVGhlIGludGVybmFsIHJlZmVyZW5jZSBjbG9jayB0byBzZWxlY3QsIElSQ1MuCisgKiBAcGFyYW0gIGlyY0VuYWJsZU1vZGUgIFRoZSBNQ0dJUkNMSyBlbmFibGUgbW9kZSwgT1InZWQgdmFsdWUgb2YgQHJlZiBfbWNnX2lyY2xrX2VuYWJsZV9tb2RlLgorICoKKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfU291cmNlVXNlZCBDb3VsZCBub3QgY2hhbmdlIE1DR0lSQ0xLIHNldHRpbmcuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTd2l0Y2hlZCB0byB0aGUgdGFyZ2V0IG1vZGUgc3VjY2Vzc2Z1bGx5LgorICovCitzdGF0dXNfdCBDTE9DS19Cb290VG9CbHBpTW9kZSh1aW50OF90IGZjcmRpdiwgbWNnX2lyY19tb2RlX3QgaXJjcywgdWludDhfdCBpcmNFbmFibGVNb2RlKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgTUNHIHRvIEJMUEUgbW9kZSBkdXJpbmcgc3l0ZW0gYm9vdCB1cC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE1DRyB0byBCTFBFIG1vZGUgZnJvbSB0aGUgcmVzZXQgbW9kZS4gSXQgY2FuIGFsc28gYmUgdXNlZCB0bworICogc2V0IHVwIHRoZSBNQ0cgZHVyaW5nIHN5dGVtIGJvb3QgdXAuCisgKgorICogQHBhcmFtICBvc2NzZWwgT1NDIGNsb2NrIHNlbGVjdCwgTUNHX0M3W09TQ1NFTF0uCisgKgorICogQHJldHZhbCBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGUgQ291bGQgbm90IHN3aXRjaCB0byB0aGUgdGFyZ2V0IG1vZGUuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTd2l0Y2hlZCB0byB0aGUgdGFyZ2V0IG1vZGUgc3VjY2Vzc2Z1bGx5LgorICovCitzdGF0dXNfdCBDTE9DS19Cb290VG9CbHBlTW9kZShtY2dfb3Njc2VsX3Qgb3Njc2VsKTsKKworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBNQ0cgdG8gYSB0YXJnZXQgbW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgTUNHIHRvIGEgdGFyZ2V0IG1vZGUgZGVmaW5lZCBieSB0aGUgY29uZmlndXJhdGlvbgorICogc3RydWN0dXJlLiBJZiBzd2l0Y2hpbmcgdG8gdGhlIHRhcmdldCBtb2RlIGZhaWxzLCB0aGlzIGZ1bmN0aW9uCisgKiBjaG9vc2VzIHRoZSBjb3JyZWN0IHBhdGguCisgKgorICogQHBhcmFtICBjb25maWcgUG9pbnRlciB0byB0aGUgdGFyZ2V0IE1DRyBtb2RlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogQHJldHVybiBSZXR1cm4ga1N0YXR1c19TdWNjZXNzIGlmIHN3aXRjaGVkIHN1Y2Nlc3NmdWxseTsgT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUgI19tY2dfc3RhdHVzLgorICoKKyAqIEBub3RlIElmIHRoZSBleHRlcm5hbCBjbG9jayBpcyB1c2VkIGluIHRoZSB0YXJnZXQgbW9kZSwgZW5zdXJlIHRoYXQgaXQgaXMKKyAqIGVuYWJsZWQuIEZvciBleGFtcGxlLCBpZiB0aGUgT1NDMCBpcyB1c2VkLCBzZXQgdXAgT1NDMCBjb3JyZWN0bHkgYmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCisgKi8KK3N0YXR1c190IENMT0NLX1NldE1jZ0NvbmZpZyhtY2dfY29uZmlnX3QgY29uc3QgKmNvbmZpZyk7CisKKy8qQH0qLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiEgQH0gKi8KKworI2VuZGlmIC8qIF9GU0xfQ0xPQ0tfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NtcC5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1ZjE1YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NtcC5jCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9jbXAuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBicmllZiBHZXQgaW5zdGFuY2UgbnVtYmVyIGZvciBDTVAgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlIENNUCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICovCitzdGF0aWMgdWludDMyX3QgQ01QX0dldEluc3RhbmNlKENNUF9UeXBlICpiYXNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gQ01QIGJhc2VzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIENNUF9UeXBlICpjb25zdCBzX2NtcEJhc2VzW10gPSBDTVBfQkFTRV9QVFJTOworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gQ01QIGNsb2NrcyBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBjb25zdCBjbG9ja19pcF9uYW1lX3Qgc19jbXBDbG9ja3NbXSA9IENNUF9DTE9DS1M7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1aW50MzJfdCBDTVBfR2V0SW5zdGFuY2UoQ01QX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgaW5zdGFuY2U7CisKKyAgICAvKiBGaW5kIHRoZSBpbnN0YW5jZSBpbmRleCBmcm9tIGJhc2UgYWRkcmVzcyBtYXBwaW5ncy4gKi8KKyAgICBmb3IgKGluc3RhbmNlID0gMDsgaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfY21wQmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfY21wQmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2NtcEJhc2VzKSk7CisKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQgQ01QX0luaXQoQ01QX1R5cGUgKmJhc2UsIGNvbnN0IGNtcF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChOVUxMICE9IGNvbmZpZyk7CisKKyAgICB1aW50OF90IHRtcDg7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogRW5hYmxlIHRoZSBjbG9jay4gKi8KKyAgICBDTE9DS19FbmFibGVDbG9jayhzX2NtcENsb2Nrc1tDTVBfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworICAgIC8qIENvbmZpZ3VyZS4gKi8KKyAgICBDTVBfRW5hYmxlKGJhc2UsIGZhbHNlKTsgLyogRGlzYWJsZSB0aGUgQ01QIG1vZHVsZSBkdXJpbmcgY29uZmlndXJpbmcuICovCisgICAgLyogQ01QeF9DUjEuICovCisgICAgdG1wOCA9IGJhc2UtPkNSMSAmIH4oQ01QX0NSMV9QTU9ERV9NQVNLIHwgQ01QX0NSMV9JTlZfTUFTSyB8IENNUF9DUjFfQ09TX01BU0sgfCBDTVBfQ1IxX09QRV9NQVNLKTsKKyAgICBpZiAoY29uZmlnLT5lbmFibGVIaWdoU3BlZWQpCisgICAgeworICAgICAgICB0bXA4IHw9IENNUF9DUjFfUE1PREVfTUFTSzsKKyAgICB9CisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlSW52ZXJ0T3V0cHV0KQorICAgIHsKKyAgICAgICAgdG1wOCB8PSBDTVBfQ1IxX0lOVl9NQVNLOworICAgIH0KKyAgICBpZiAoY29uZmlnLT51c2VVbmZpbHRlcmVkT3V0cHV0KQorICAgIHsKKyAgICAgICAgdG1wOCB8PSBDTVBfQ1IxX0NPU19NQVNLOworICAgIH0KKyAgICBpZiAoY29uZmlnLT5lbmFibGVQaW5PdXQpCisgICAgeworICAgICAgICB0bXA4IHw9IENNUF9DUjFfT1BFX01BU0s7CisgICAgfQorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQ01QX0hBU19UUklHR0VSX01PREUpICYmIEZTTF9GRUFUVVJFX0NNUF9IQVNfVFJJR0dFUl9NT0RFCisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlVHJpZ2dlck1vZGUpCisgICAgeworICAgICAgICB0bXA4IHw9IENNUF9DUjFfVFJJR01fTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdG1wOCAmPSB+Q01QX0NSMV9UUklHTV9NQVNLOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9DTVBfSEFTX1RSSUdHRVJfTU9ERSAqLworICAgIGJhc2UtPkNSMSA9IHRtcDg7CisKKyAgICAvKiBDTVB4X0NSMC4gKi8KKyAgICB0bXA4ID0gYmFzZS0+Q1IwICYgfkNNUF9DUjBfSFlTVENUUl9NQVNLOworICAgIHRtcDggfD0gQ01QX0NSMF9IWVNUQ1RSKGNvbmZpZy0+aHlzdGVyZXNpc01vZGUpOworICAgIGJhc2UtPkNSMCA9IHRtcDg7CisKKyAgICBDTVBfRW5hYmxlKGJhc2UsIGNvbmZpZy0+ZW5hYmxlQ21wKTsgLyogRW5hYmxlIHRoZSBDTVAgbW9kdWxlIGFmdGVyIGNvbmZpZ3VyZWQgb3Igbm90LiAqLworfQorCit2b2lkIENNUF9EZWluaXQoQ01QX1R5cGUgKmJhc2UpCit7CisgICAgLyogRGlzYWJsZSB0aGUgQ01QIG1vZHVsZS4gKi8KKyAgICBDTVBfRW5hYmxlKGJhc2UsIGZhbHNlKTsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBEaXNhYmxlIHRoZSBjbG9jay4gKi8KKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soc19jbXBDbG9ja3NbQ01QX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCit9CisKK3ZvaWQgQ01QX0dldERlZmF1bHRDb25maWcoY21wX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KE5VTEwgIT0gY29uZmlnKTsKKworICAgIGNvbmZpZy0+ZW5hYmxlQ21wID0gdHJ1ZTsgLyogRW5hYmxlIHRoZSBDTVAgbW9kdWxlIGFmdGVyIGluaXRpYWxpemF0aW9uLiAqLworICAgIGNvbmZpZy0+aHlzdGVyZXNpc01vZGUgPSBrQ01QX0h5c3RlcmVzaXNMZXZlbDA7CisgICAgY29uZmlnLT5lbmFibGVIaWdoU3BlZWQgPSBmYWxzZTsKKyAgICBjb25maWctPmVuYWJsZUludmVydE91dHB1dCA9IGZhbHNlOworICAgIGNvbmZpZy0+dXNlVW5maWx0ZXJlZE91dHB1dCA9IGZhbHNlOworICAgIGNvbmZpZy0+ZW5hYmxlUGluT3V0ID0gZmFsc2U7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9DTVBfSEFTX1RSSUdHRVJfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfQ01QX0hBU19UUklHR0VSX01PREUKKyAgICBjb25maWctPmVuYWJsZVRyaWdnZXJNb2RlID0gZmFsc2U7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQ01QX0hBU19UUklHR0VSX01PREUgKi8KK30KKwordm9pZCBDTVBfU2V0SW5wdXRDaGFubmVscyhDTVBfVHlwZSAqYmFzZSwgdWludDhfdCBwb3NpdGl2ZUNoYW5uZWwsIHVpbnQ4X3QgbmVnYXRpdmVDaGFubmVsKQoreworICAgIHVpbnQ4X3QgdG1wOCA9IGJhc2UtPk1VWENSOworCisgICAgdG1wOCAmPSB+KENNUF9NVVhDUl9QU0VMX01BU0sgfCBDTVBfTVVYQ1JfTVNFTF9NQVNLKTsKKyAgICB0bXA4IHw9IENNUF9NVVhDUl9QU0VMKHBvc2l0aXZlQ2hhbm5lbCkgfCBDTVBfTVVYQ1JfTVNFTChuZWdhdGl2ZUNoYW5uZWwpOworICAgIGJhc2UtPk1VWENSID0gdG1wODsKK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQ01QX0hBU19ETUEpICYmIEZTTF9GRUFUVVJFX0NNUF9IQVNfRE1BCit2b2lkIENNUF9FbmFibGVETUEoQ01QX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIHVpbnQ4X3QgdG1wOCA9IGJhc2UtPlNDUiAmIH4oQ01QX1NDUl9DRlJfTUFTSyB8IENNUF9TQ1JfQ0ZGX01BU0spOyAvKiBUbyBhdm9pZCBjaGFuZ2UgdGhlIHcxYyBiaXRzLiAqLworCisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIHRtcDggfD0gQ01QX1NDUl9ETUFFTl9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0bXA4ICY9IH5DTVBfU0NSX0RNQUVOX01BU0s7CisgICAgfQorICAgIGJhc2UtPlNDUiA9IHRtcDg7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQ01QX0hBU19ETUEgKi8KKwordm9pZCBDTVBfU2V0RmlsdGVyQ29uZmlnKENNUF9UeXBlICpiYXNlLCBjb25zdCBjbXBfZmlsdGVyX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KE5VTEwgIT0gY29uZmlnKTsKKworICAgIHVpbnQ4X3QgdG1wODsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQ01QX0hBU19FWFRFUk5BTF9TQU1QTEVfU1VQUE9SVCkgJiYgRlNMX0ZFQVRVUkVfQ01QX0hBU19FWFRFUk5BTF9TQU1QTEVfU1VQUE9SVAorICAgIC8qIENob29zZSB0aGUgY2xvY2sgc291cmNlIGZvciBzYW1wbGluZy4gKi8KKyAgICBpZiAoY29uZmlnLT5lbmFibGVTYW1wbGUpCisgICAgeworICAgICAgICBiYXNlLT5DUjEgfD0gQ01QX0NSMV9TRV9NQVNLOyAvKiBDaG9vc2UgdGhlIGV4dGVybmFsIFNBTVBMRSBjbG9jay4gKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+Q1IxICY9IH5DTVBfQ1IxX1NFX01BU0s7IC8qIENob29zZSB0aGUgaW50ZXJuYWwgZGl2aWRlZCBidXMgY2xvY2suICovCisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0NNUF9IQVNfRVhURVJOQUxfU0FNUExFX1NVUFBPUlQgKi8KKyAgICAvKiBTZXQgdGhlIGZpbHRlciBjb3VudC4gKi8KKyAgICB0bXA4ID0gYmFzZS0+Q1IwICYgfkNNUF9DUjBfRklMVEVSX0NOVF9NQVNLOworICAgIHRtcDggfD0gQ01QX0NSMF9GSUxURVJfQ05UKGNvbmZpZy0+ZmlsdGVyQ291bnQpOworICAgIGJhc2UtPkNSMCA9IHRtcDg7CisgICAgLyogU2V0IHRoZSBmaWx0ZXIgcGVyaW9kLiBJdCBpcyB1c2VkIGFzIHRoZSBkaXZpZGVyIHRvIGJ1cyBjbG9jay4gKi8KKyAgICBiYXNlLT5GUFIgPSBDTVBfRlBSX0ZJTFRfUEVSKGNvbmZpZy0+ZmlsdGVyUGVyaW9kKTsKK30KKwordm9pZCBDTVBfU2V0REFDQ29uZmlnKENNUF9UeXBlICpiYXNlLCBjb25zdCBjbXBfZGFjX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgdWludDhfdCB0bXA4ID0gMFU7CisKKyAgICBpZiAoTlVMTCA9PSBjb25maWcpCisgICAgeworICAgICAgICAvKiBQYXNzaW5nICJOVUxMIiBhcyBpbnB1dCBwYXJhbWV0ZXIgbWVhbnMgbm8gYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24uIFNvIHRoZSBEQUMgZmVhdHVyZSBpcyBkaXNhYmxlZC4qLworICAgICAgICBiYXNlLT5EQUNDUiA9IDBVOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8qIENNUHhfREFDQ1IuICovCisgICAgdG1wOCB8PSBDTVBfREFDQ1JfREFDRU5fTUFTSzsgLyogRW5hYmxlIHRoZSBpbnRlcm5hbCBEQUMuICovCisgICAgaWYgKGtDTVBfVnJlZlNvdXJjZVZpbjIgPT0gY29uZmlnLT5yZWZlcmVuY2VWb2x0YWdlU291cmNlKQorICAgIHsKKyAgICAgICAgdG1wOCB8PSBDTVBfREFDQ1JfVlJTRUxfTUFTSzsKKyAgICB9CisgICAgdG1wOCB8PSBDTVBfREFDQ1JfVk9TRUwoY29uZmlnLT5EQUNWYWx1ZSk7CisKKyAgICBiYXNlLT5EQUNDUiA9IHRtcDg7Cit9CisKK3ZvaWQgQ01QX0VuYWJsZUludGVycnVwdHMoQ01QX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgdWludDhfdCB0bXA4ID0gYmFzZS0+U0NSICYgfihDTVBfU0NSX0NGUl9NQVNLIHwgQ01QX1NDUl9DRkZfTUFTSyk7IC8qIFRvIGF2b2lkIGNoYW5nZSB0aGUgdzFjIGJpdHMuICovCisKKyAgICBpZiAoMFUgIT0gKGtDTVBfT3V0cHV0UmlzaW5nSW50ZXJydXB0RW5hYmxlICYgbWFzaykpCisgICAgeworICAgICAgICB0bXA4IHw9IENNUF9TQ1JfSUVSX01BU0s7CisgICAgfQorICAgIGlmICgwVSAhPSAoa0NNUF9PdXRwdXRGYWxsaW5nSW50ZXJydXB0RW5hYmxlICYgbWFzaykpCisgICAgeworICAgICAgICB0bXA4IHw9IENNUF9TQ1JfSUVGX01BU0s7CisgICAgfQorICAgIGJhc2UtPlNDUiA9IHRtcDg7Cit9CisKK3ZvaWQgQ01QX0Rpc2FibGVJbnRlcnJ1cHRzKENNUF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIHVpbnQ4X3QgdG1wOCA9IGJhc2UtPlNDUiAmIH4oQ01QX1NDUl9DRlJfTUFTSyB8IENNUF9TQ1JfQ0ZGX01BU0spOyAvKiBUbyBhdm9pZCBjaGFuZ2UgdGhlIHcxYyBiaXRzLiAqLworCisgICAgaWYgKDBVICE9IChrQ01QX091dHB1dFJpc2luZ0ludGVycnVwdEVuYWJsZSAmIG1hc2spKQorICAgIHsKKyAgICAgICAgdG1wOCAmPSB+Q01QX1NDUl9JRVJfTUFTSzsKKyAgICB9CisgICAgaWYgKDBVICE9IChrQ01QX091dHB1dEZhbGxpbmdJbnRlcnJ1cHRFbmFibGUgJiBtYXNrKSkKKyAgICB7CisgICAgICAgIHRtcDggJj0gfkNNUF9TQ1JfSUVGX01BU0s7CisgICAgfQorICAgIGJhc2UtPlNDUiA9IHRtcDg7Cit9CisKK3VpbnQzMl90IENNUF9HZXRTdGF0dXNGbGFncyhDTVBfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCByZXQzMiA9IDBVOworCisgICAgaWYgKDBVICE9IChDTVBfU0NSX0NGUl9NQVNLICYgYmFzZS0+U0NSKSkKKyAgICB7CisgICAgICAgIHJldDMyIHw9IGtDTVBfT3V0cHV0UmlzaW5nRXZlbnRGbGFnOworICAgIH0KKyAgICBpZiAoMFUgIT0gKENNUF9TQ1JfQ0ZGX01BU0sgJiBiYXNlLT5TQ1IpKQorICAgIHsKKyAgICAgICAgcmV0MzIgfD0ga0NNUF9PdXRwdXRGYWxsaW5nRXZlbnRGbGFnOworICAgIH0KKyAgICBpZiAoMFUgIT0gKENNUF9TQ1JfQ09VVF9NQVNLICYgYmFzZS0+U0NSKSkKKyAgICB7CisgICAgICAgIHJldDMyIHw9IGtDTVBfT3V0cHV0QXNzZXJ0RXZlbnRGbGFnOworICAgIH0KKyAgICByZXR1cm4gcmV0MzI7Cit9CisKK3ZvaWQgQ01QX0NsZWFyU3RhdHVzRmxhZ3MoQ01QX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgdWludDhfdCB0bXA4ID0gYmFzZS0+U0NSICYgfihDTVBfU0NSX0NGUl9NQVNLIHwgQ01QX1NDUl9DRkZfTUFTSyk7IC8qIFRvIGF2b2lkIGNoYW5nZSB0aGUgdzFjIGJpdHMuICovCisKKyAgICBpZiAoMFUgIT0gKGtDTVBfT3V0cHV0UmlzaW5nRXZlbnRGbGFnICYgbWFzaykpCisgICAgeworICAgICAgICB0bXA4IHw9IENNUF9TQ1JfQ0ZSX01BU0s7CisgICAgfQorICAgIGlmICgwVSAhPSAoa0NNUF9PdXRwdXRGYWxsaW5nRXZlbnRGbGFnICYgbWFzaykpCisgICAgeworICAgICAgICB0bXA4IHw9IENNUF9TQ1JfQ0ZGX01BU0s7CisgICAgfQorICAgIGJhc2UtPlNDUiA9IHRtcDg7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbXAuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMTZiZjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbXAuaApAQCAtMCwwICsxLDM0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0ZTTF9DTVBfSF8KKyNkZWZpbmUgX0ZTTF9DTVBfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBjbXAKKyAqIEB7CisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgQGJyaWVmIENNUCBkcml2ZXIgdmVyc2lvbiAyLjAuMC4gKi8KKyNkZWZpbmUgRlNMX0NNUF9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDApKQorLypAfSovCisKKy8qIQorKiBAYnJpZWYgSW50ZXJydXB0IGVuYWJsZS9kaXNhYmxlIG1hc2suCisqLworZW51bSBfY21wX2ludGVycnVwdF9lbmFibGUKK3sKKyAgICBrQ01QX091dHB1dFJpc2luZ0ludGVycnVwdEVuYWJsZSA9IENNUF9TQ1JfSUVSX01BU0ssICAvKiE8IENvbXBhcmF0b3IgaW50ZXJydXB0IGVuYWJsZSByaXNpbmcuICovCisgICAga0NNUF9PdXRwdXRGYWxsaW5nSW50ZXJydXB0RW5hYmxlID0gQ01QX1NDUl9JRUZfTUFTSywgLyohPCBDb21wYXJhdG9yIGludGVycnVwdCBlbmFibGUgZmFsbGluZy4gKi8KK307CisKKy8qIQorICogQGJyaWVmIFN0YXR1cyBmbGFncycgbWFzay4KKyAqLworZW51bSBfY21wX3N0YXR1c19mbGFncworeworICAgIGtDTVBfT3V0cHV0UmlzaW5nRXZlbnRGbGFnID0gQ01QX1NDUl9DRlJfTUFTSywgIC8qITwgUmlzaW5nLWVkZ2Ugb24gdGhlIGNvbXBhcmlzb24gb3V0cHV0IGhhcyBvY2N1cnJlZC4gKi8KKyAgICBrQ01QX091dHB1dEZhbGxpbmdFdmVudEZsYWcgPSBDTVBfU0NSX0NGRl9NQVNLLCAvKiE8IEZhbGxpbmctZWRnZSBvbiB0aGUgY29tcGFyaXNvbiBvdXRwdXQgaGFzIG9jY3VycmVkLiAqLworICAgIGtDTVBfT3V0cHV0QXNzZXJ0RXZlbnRGbGFnID0gQ01QX1NDUl9DT1VUX01BU0ssIC8qITwgUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBhbmFsb2cgY29tcGFyYXRvciBvdXRwdXQuICovCit9OworCisvKiEKKyAqIEBicmllZiBDTVAgSHlzdGVyZXNpcyBtb2RlLgorICovCit0eXBlZGVmIGVudW0gX2NtcF9oeXN0ZXJlc2lzX21vZGUKK3sKKyAgICBrQ01QX0h5c3RlcmVzaXNMZXZlbDAgPSAwVSwgLyohPCBIeXN0ZXJlc2lzIGxldmVsIDAuICovCisgICAga0NNUF9IeXN0ZXJlc2lzTGV2ZWwxID0gMVUsIC8qITwgSHlzdGVyZXNpcyBsZXZlbCAxLiAqLworICAgIGtDTVBfSHlzdGVyZXNpc0xldmVsMiA9IDJVLCAvKiE8IEh5c3RlcmVzaXMgbGV2ZWwgMi4gKi8KKyAgICBrQ01QX0h5c3RlcmVzaXNMZXZlbDMgPSAzVSwgLyohPCBIeXN0ZXJlc2lzIGxldmVsIDMuICovCit9IGNtcF9oeXN0ZXJlc2lzX21vZGVfdDsKKworLyohCisgKiBAYnJpZWYgQ01QIFZvbHRhZ2UgUmVmZXJlbmNlIHNvdXJjZS4KKyAqLwordHlwZWRlZiBlbnVtIF9jbXBfcmVmZXJlbmNlX3ZvbHRhZ2Vfc291cmNlCit7CisgICAga0NNUF9WcmVmU291cmNlVmluMSA9IDBVLCAvKiE8IFZpbjEgaXMgc2VsZWN0ZWQgYXMgYSByZXNpc3RvciBsYWRkZXIgbmV0d29yayBzdXBwbHkgcmVmZXJlbmNlIFZpbi4gKi8KKyAgICBrQ01QX1ZyZWZTb3VyY2VWaW4yID0gMVUsIC8qITwgVmluMiBpcyBzZWxlY3RlZCBhcyBhIHJlc2lzdG9yIGxhZGRlciBuZXR3b3JrIHN1cHBseSByZWZlcmVuY2UgVmluLiAqLworfSBjbXBfcmVmZXJlbmNlX3ZvbHRhZ2Vfc291cmNlX3Q7CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIGNvbXBhcmF0b3IuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9jbXBfY29uZmlnCit7CisgICAgYm9vbCBlbmFibGVDbXA7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSB0aGUgQ01QIG1vZHVsZS4gKi8KKyAgICBjbXBfaHlzdGVyZXNpc19tb2RlX3QgaHlzdGVyZXNpc01vZGU7IC8qITwgQ01QIEh5c3RlcmVzaXMgbW9kZS4gKi8KKyAgICBib29sIGVuYWJsZUhpZ2hTcGVlZDsgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIEhpZ2gtc3BlZWQgKEhTKSBjb21wYXJpc29uIG1vZGUuICovCisgICAgYm9vbCBlbmFibGVJbnZlcnRPdXRwdXQ7ICAgICAgICAgICAgICAvKiE8IEVuYWJsZSB0aGUgaW52ZXJ0ZWQgY29tcGFyYXRvciBvdXRwdXQuICovCisgICAgYm9vbCB1c2VVbmZpbHRlcmVkT3V0cHV0OyAgICAgICAgICAgICAvKiE8IFNldCB0aGUgY29tcGFyZSBvdXRwdXQoQ09VVCkgdG8gZXF1YWwgQ09VVEEodHJ1ZSkgb3IgQ09VVChmYWxzZSkuICovCisgICAgYm9vbCBlbmFibGVQaW5PdXQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSBjb21wYXJhdG9yIG91dHB1dCBpcyBhdmFpbGFibGUgb24gdGhlIGFzc29jaWF0ZWQgcGluLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQ01QX0hBU19UUklHR0VSX01PREUpICYmIEZTTF9GRUFUVVJFX0NNUF9IQVNfVFJJR0dFUl9NT0RFCisgICAgYm9vbCBlbmFibGVUcmlnZ2VyTW9kZTsgLyohPCBFbmFibGUgdGhlIHRyaWdnZXIgbW9kZS4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9DTVBfSEFTX1RSSUdHRVJfTU9ERSAqLworfSBjbXBfY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIGZpbHRlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2NtcF9maWx0ZXJfY29uZmlnCit7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9DTVBfSEFTX0VYVEVSTkFMX1NBTVBMRV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9DTVBfSEFTX0VYVEVSTkFMX1NBTVBMRV9TVVBQT1JUCisgICAgYm9vbCBlbmFibGVTYW1wbGU7ICAgIC8qITwgVXNpbmcgdGhlIGV4dGVybmFsIFNBTVBMRSBhcyBhIHNhbXBsaW5nIGNsb2NrIGlucHV0IG9yIHVzaW5nIGEgZGl2aWRlZCBidXMgY2xvY2suICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0NNUF9IQVNfRVhURVJOQUxfU0FNUExFX1NVUFBPUlQgKi8KKyAgICB1aW50OF90IGZpbHRlckNvdW50OyAgLyohPCBGaWx0ZXIgU2FtcGxlIENvdW50LiBBdmFpbGFibGUgcmFuZ2UgaXMgMS03OyAwIGRpc2FibGVzIHRoZSBmaWx0ZXIuKi8KKyAgICB1aW50OF90IGZpbHRlclBlcmlvZDsgLyohPCBGaWx0ZXIgU2FtcGxlIFBlcmlvZC4gVGhlIGRpdmlkZXIgdG8gdGhlIGJ1cyBjbG9jay4gQXZhaWxhYmxlIHJhbmdlIGlzIDAtMjU1LiAqLworfSBjbXBfZmlsdGVyX2NvbmZpZ190OworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBpbnRlcm5hbCBEQUMuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9jbXBfZGFjX2NvbmZpZworeworICAgIGNtcF9yZWZlcmVuY2Vfdm9sdGFnZV9zb3VyY2VfdCByZWZlcmVuY2VWb2x0YWdlU291cmNlOyAvKiE8IFN1cHBseSB2b2x0YWdlIHJlZmVyZW5jZSBzb3VyY2UuICovCisgICAgdWludDhfdCBEQUNWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVmFsdWUgZm9yIHRoZSBEQUMgT3V0cHV0IFZvbHRhZ2UuIEF2YWlsYWJsZSByYW5nZSBpcyAwLTYzLiovCit9IGNtcF9kYWNfY29uZmlnX3Q7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAbmFtZSBJbml0aWFsaXphdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgQ01QLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIENNUCBtb2R1bGUuIFRoZSBvcGVyYXRpb25zIGluY2x1ZGVkIGFyZSBhcyBmb2xsb3dzLgorICogLSBFbmFibGluZyB0aGUgY2xvY2sgZm9yIENNUCBtb2R1bGUuCisgKiAtIENvbmZpZ3VyaW5nIHRoZSBjb21wYXJhdG9yLgorICogLSBFbmFibGluZyB0aGUgQ01QIG1vZHVsZS4KKyAqIE5vdGUgdGhhdCBmb3Igc29tZSBkZXZpY2VzLCBtdWx0aXBsZSBDTVAgaW5zdGFuY2VzIHNoYXJlIHRoZSBzYW1lIGNsb2NrIGdhdGUuIEluIHRoaXMgY2FzZSwgdG8gZW5hYmxlIHRoZSBjbG9jayBmb3IKKyAqIGFueSBpbnN0YW5jZSBlbmFibGVzIGFsbCBDTVBzLiBTZWUgdGhlIGFwcHJvcHJpYXRlIE1DVSByZWZlcmVuY2UgbWFudWFsIGZvciB0aGUgY2xvY2sgYXNzaWdubWVudCBvZiB0aGUgQ01QLgorICoKKyAqIEBwYXJhbSBiYXNlICAgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBDTVBfSW5pdChDTVBfVHlwZSAqYmFzZSwgY29uc3QgY21wX2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBEZS1pbml0aWFsaXplcyB0aGUgQ01QIG1vZHVsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRlLWluaXRpYWxpemVzIHRoZSBDTVAgbW9kdWxlLiBUaGUgb3BlcmF0aW9ucyBpbmNsdWRlZCBhcmUgYXMgZm9sbG93cy4KKyAqIC0gRGlzYWJsaW5nIHRoZSBDTVAgbW9kdWxlLgorICogLSBEaXNhYmxpbmcgdGhlIGNsb2NrIGZvciBDTVAgbW9kdWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGNsb2NrIGZvciB0aGUgQ01QLgorICogTm90ZSB0aGF0IGZvciBzb21lIGRldmljZXMsIG11bHRpcGxlIENNUCBpbnN0YW5jZXMgc2hhcmUgdGhlIHNhbWUgY2xvY2sgZ2F0ZS4gSW4gdGhpcyBjYXNlLCBiZWZvcmUgZGlzYWJsaW5nIHRoZQorICogY2xvY2sgZm9yIHRoZSBDTVAsIGVuc3VyZSB0aGF0IGFsbCB0aGUgQ01QIGluc3RhbmNlcyBhcmUgbm90IHVzZWQuCisgKgorICogQHBhcmFtIGJhc2UgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCit2b2lkIENNUF9EZWluaXQoQ01QX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBFbmFibGVzL2Rpc2FibGVzIHRoZSBDTVAgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlIENNUCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgbW9kdWxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ01QX0VuYWJsZShDTVBfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkNSMSB8PSBDTVBfQ1IxX0VOX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkNSMSAmPSB+Q01QX0NSMV9FTl9NQVNLOworICAgIH0KK30KKworLyohCisqIEBicmllZiBJbml0aWFsaXplcyB0aGUgQ01QIHVzZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisqCisqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHVzZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgdG8gdGhlc2UgZGVmYXVsdCB2YWx1ZXMuCisqIEBjb2RlCisqICAgY29uZmlnLT5lbmFibGVDbXAgICAgICAgICAgID0gdHJ1ZTsKKyogICBjb25maWctPmh5c3RlcmVzaXNNb2RlICAgICAgPSBrQ01QX0h5c3RlcmVzaXNMZXZlbDA7CisqICAgY29uZmlnLT5lbmFibGVIaWdoU3BlZWQgICAgID0gZmFsc2U7CisqICAgY29uZmlnLT5lbmFibGVJbnZlcnRPdXRwdXQgID0gZmFsc2U7CisqICAgY29uZmlnLT51c2VVbmZpbHRlcmVkT3V0cHV0ID0gZmFsc2U7CisqICAgY29uZmlnLT5lbmFibGVQaW5PdXQgICAgICAgID0gZmFsc2U7CisqICAgY29uZmlnLT5lbmFibGVUcmlnZ2VyTW9kZSAgID0gZmFsc2U7CisqIEBlbmRjb2RlCisqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisqLwordm9pZCBDTVBfR2V0RGVmYXVsdENvbmZpZyhjbXBfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmICBTZXRzIHRoZSBpbnB1dCBjaGFubmVscyBmb3IgdGhlIGNvbXBhcmF0b3IuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBpbnB1dCBjaGFubmVscyBmb3IgdGhlIGNvbXBhcmF0b3IuCisgKiBOb3RlIHRoYXQgdHdvIGlucHV0IGNoYW5uZWxzIGNhbm5vdCBiZSBzZXQgdGhlIHNhbWUgd2F5IGluIHRoZSBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgdXNlciBzZWxlY3RzIHRoZSBzYW1lIGlucHV0CisgKiBmcm9tIHRoZSBhbmFsb2cgbXV4IHRvIHRoZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgcG9ydCwgdGhlIGNvbXBhcmF0b3IgaXMgZGlzYWJsZWQgYXV0b21hdGljYWxseS4KKyAqCisgKiBAcGFyYW0gIGJhc2UgICAgICAgICAgICBDTVAgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gIHBvc2l0aXZlQ2hhbm5lbCBQb3NpdGl2ZSBzaWRlIGlucHV0IGNoYW5uZWwgbnVtYmVyLiBBdmFpbGFibGUgcmFuZ2UgaXMgMC03LgorICogQHBhcmFtICBuZWdhdGl2ZUNoYW5uZWwgTmVnYXRpdmUgc2lkZSBpbnB1dCBjaGFubmVsIG51bWJlci4gQXZhaWxhYmxlIHJhbmdlIGlzIDAtNy4KKyAqLwordm9pZCBDTVBfU2V0SW5wdXRDaGFubmVscyhDTVBfVHlwZSAqYmFzZSwgdWludDhfdCBwb3NpdGl2ZUNoYW5uZWwsIHVpbnQ4X3QgbmVnYXRpdmVDaGFubmVsKTsKKworLyogQH0gKi8KKworLyohCisgKiBAbmFtZSBBZHZhbmNlZCBGZWF0dXJlcworICogQHsKKyAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9DTVBfSEFTX0RNQSkgJiYgRlNMX0ZFQVRVUkVfQ01QX0hBU19ETUEKKy8qIQorICogQGJyaWVmIEVuYWJsZXMvZGlzYWJsZXMgdGhlIERNQSByZXF1ZXN0IGZvciByaXNpbmcvZmFsbGluZyBldmVudHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSBETUEgcmVxdWVzdCBmb3IgcmlzaW5nL2ZhbGxpbmcgZXZlbnRzLiBFaXRoZXIgZXZlbnQgdHJpZ2dlcnMgdGhlIGdlbmVyYXRpb24gb2YKKyAqIHRoZSBETUEgcmVxdWVzdCBmcm9tIENNUCBpZiB0aGUgRE1BIGZlYXR1cmUgaXMgZW5hYmxlZC4gQm90aCBldmVudHMgYXJlIGlnbm9yZWQgZm9yIGdlbmVyYXRpbmcgdGhlIERNQSByZXF1ZXN0IGZyb20gdGhlIENNUAorICogaWYgdGhlIERNQSBpcyBkaXNhYmxlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBDTVAgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZW5hYmxlIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGZlYXR1cmUuCisgKi8KK3ZvaWQgQ01QX0VuYWJsZURNQShDTVBfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0NNUF9IQVNfRE1BICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0NNUF9IQVNfV0lORE9XX01PREUpICYmIEZTTF9GRUFUVVJFX0NNUF9IQVNfV0lORE9XX01PREUKKy8qIQorICogQGJyaWVmIEVuYWJsZXMvZGlzYWJsZXMgdGhlIHdpbmRvdyBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIENNUCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZmVhdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENNUF9FbmFibGVXaW5kb3dNb2RlKENNUF9UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+Q1IxIHw9IENNUF9DUjFfV0VfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+Q1IxICY9IH5DTVBfQ1IxX1dFX01BU0s7CisgICAgfQorfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0NNUF9IQVNfV0lORE9XX01PREUgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQ01QX0hBU19QQVNTX1RIUk9VR0hfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfQ01QX0hBU19QQVNTX1RIUk9VR0hfTU9ERQorLyohCisgKiBAYnJpZWYgRW5hYmxlcy9kaXNhYmxlcyB0aGUgcGFzcyB0aHJvdWdoIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZSBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmZWF0dXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ01QX0VuYWJsZVBhc3NUaHJvdWdoTW9kZShDTVBfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPk1VWENSIHw9IENNUF9NVVhDUl9QU1RNX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPk1VWENSICY9IH5DTVBfTVVYQ1JfUFNUTV9NQVNLOworICAgIH0KK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9DTVBfSEFTX1BBU1NfVEhST1VHSF9NT0RFICovCisKKy8qIQorICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBmaWx0ZXIuCisgKgorICogQHBhcmFtICBiYXNlICAgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtICBjb25maWcgUG9pbnRlciB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgQ01QX1NldEZpbHRlckNvbmZpZyhDTVBfVHlwZSAqYmFzZSwgY29uc3QgY21wX2ZpbHRlcl9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgaW50ZXJuYWwgREFDLgorICoKKyAqIEBwYXJhbSBiYXNlICAgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gIk5VTEwiIGRpc2FibGVzIHRoZSBmZWF0dXJlLgorICovCit2b2lkIENNUF9TZXREQUNDb25maWcoQ01QX1R5cGUgKmJhc2UsIGNvbnN0IGNtcF9kYWNfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgdGhlIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGJhc2UgICAgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgICAgTWFzayB2YWx1ZSBmb3IgaW50ZXJydXB0cy4gU2VlICJfY21wX2ludGVycnVwdF9lbmFibGUiLgorICovCit2b2lkIENNUF9FbmFibGVJbnRlcnJ1cHRzKENNUF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgdGhlIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGJhc2UgICAgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgICAgTWFzayB2YWx1ZSBmb3IgaW50ZXJydXB0cy4gU2VlICJfY21wX2ludGVycnVwdF9lbmFibGUiLgorICovCit2b2lkIENNUF9EaXNhYmxlSW50ZXJydXB0cyhDTVBfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzayk7CisKKy8qIEB9ICovCisKKy8qIQorICogQG5hbWUgUmVzdWx0cworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiAgR2V0cyB0aGUgc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSAgYmFzZSAgICAgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICoKKyAqIEByZXR1cm4gICAgICAgICAgTWFzayB2YWx1ZSBmb3IgdGhlIGFzc2VydGVkIGZsYWdzLiBTZWUgIl9jbXBfc3RhdHVzX2ZsYWdzIi4KKyAqLwordWludDMyX3QgQ01QX0dldFN0YXR1c0ZsYWdzKENNUF9UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBzdGF0dXMgZmxhZ3MuCisgKgorICogQHBhcmFtIGJhc2UgICAgIENNUCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrICAgICBNYXNrIHZhbHVlIGZvciB0aGUgZmxhZ3MuIFNlZSAiX2NtcF9zdGF0dXNfZmxhZ3MiLgorICovCit2b2lkIENNUF9DbGVhclN0YXR1c0ZsYWdzKENNUF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyogQH0gKi8KKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisvKiEKKyAqIEB9CisgKi8KKyNlbmRpZiAvKiBfRlNMX0NNUF9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY210LmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2Y3MmJjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY210LmMKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2NtdC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBzdGFuZGFyZCBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IChJRikuICovCisjZGVmaW5lIENNVF9JTlRFUk1FRElBVEVGUkVRVUVOQ1lfOE1IWiAoODAwMDAwMFUpCisvKiBDTVQgZGF0YSBtb2R1bGF0ZSBtYXNrLiAqLworI2RlZmluZSBDTVRfTU9EVUxBVEVfQ09VTlRfV0lEVEggKDhVKQorLyogQ01UIGRpdmVyIDEuICovCisjZGVmaW5lIENNVF9DTVRESVZfT05FICgxKQorLyogQ01UIGRpdmVyIDIuICovCisjZGVmaW5lIENNVF9DTVRESVZfVFdPICgyKQorLyogQ01UIGRpdmVyIDQuICovCisjZGVmaW5lIENNVF9DTVRESVZfRk9VUiAoNCkKKy8qIENNVCBkaXZlciA4LiAqLworI2RlZmluZSBDTVRfQ01URElWX0VJR0hUICg4KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgR2V0IGluc3RhbmNlIG51bWJlciBmb3IgQ01UIG1vZHVsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBDTVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyB1aW50MzJfdCBDTVRfR2V0SW5zdGFuY2UoQ01UX1R5cGUgKmJhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorLyohIEBicmllZiBQb2ludGVycyB0byBjbXQgY2xvY2tzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIGNvbnN0IGNsb2NrX2lwX25hbWVfdCBzX2NtdENsb2NrW0ZTTF9GRUFUVVJFX1NPQ19DTVRfQ09VTlRdID0gQ01UX0NMT0NLUzsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworLyohIEBicmllZiBQb2ludGVycyB0byBjbXQgYmFzZXMgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgQ01UX1R5cGUgKmNvbnN0IHNfY210QmFzZXNbXSA9IENNVF9CQVNFX1BUUlM7CisKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gY210IElSUSBudW1iZXIgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgY29uc3QgSVJRbl9UeXBlIHNfY210SXJxc1tdID0gQ01UX0lSUVM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHVpbnQzMl90IENNVF9HZXRJbnN0YW5jZShDTVRfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19jbXRCYXNlcyk7IGluc3RhbmNlKyspCisgICAgeworICAgICAgICBpZiAoc19jbXRCYXNlc1tpbnN0YW5jZV0gPT0gYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQoaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfY210QmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9pZCBDTVRfR2V0RGVmYXVsdENvbmZpZyhjbXRfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworICAgIC8qIERlZmF1bHQgaW5mcmFyZWQgb3V0cHV0IGlzIGVuYWJsZWQgYW5kIHNldCB3aXRoIGhpZ2ggYWN0aXZlLCB0aGUgZGl2aWRlciBpcyBzZXQgdG8gMS4gKi8KKyAgICBjb25maWctPmlzSW50ZXJydXB0RW5hYmxlZCA9IGZhbHNlOworICAgIGNvbmZpZy0+aXNJcm9FbmFibGVkID0gdHJ1ZTsKKyAgICBjb25maWctPmlyb1BvbGFyaXR5ID0ga0NNVF9JUk9BY3RpdmVIaWdoOworICAgIGNvbmZpZy0+ZGl2aWRlciA9IGtDTVRfU2Vjb25kQ2xrRGl2MTsKK30KKwordm9pZCBDTVRfSW5pdChDTVRfVHlwZSAqYmFzZSwgY29uc3QgY210X2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IGJ1c0Nsb2NrX0h6KQoreworICAgIGFzc2VydChjb25maWcpOworICAgIGFzc2VydChidXNDbG9ja19IeiA+PSBDTVRfSU5URVJNRURJQVRFRlJFUVVFTkNZXzhNSFopOworCisgICAgdWludDhfdCBkaXZpZGVyOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIFVuZ2F0ZSBjbG9jay4gKi8KKyAgICBDTE9DS19FbmFibGVDbG9jayhzX2NtdENsb2NrW0NNVF9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisgICAgLyogU2V0cyBjbG9jayBkaXZpZGVyLiBUaGUgZGl2aWRlciBzZXQgaW4gcHBzIHNob3VsZCBiZSBzZXQKKyAgICAgICB0byBtYWtlIHN5Y0Nsb2NrX0h6L2RpdmRlciA9IDhNSHogKi8KKyAgICBiYXNlLT5QUFMgPSBDTVRfUFBTX1BQU0RJVihidXNDbG9ja19IeiAvIENNVF9JTlRFUk1FRElBVEVGUkVRVUVOQ1lfOE1IWiAtIDEpOworICAgIGRpdmlkZXIgPSBiYXNlLT5NU0M7CisgICAgZGl2aWRlciAmPSB+Q01UX01TQ19DTVRESVZfTUFTSzsKKyAgICBkaXZpZGVyIHw9IENNVF9NU0NfQ01URElWKGNvbmZpZy0+ZGl2aWRlcik7CisgICAgYmFzZS0+TVNDID0gZGl2aWRlcjsKKworICAgIC8qIFNldCB0aGUgSVJPIHNpZ25hbC4gKi8KKyAgICBiYXNlLT5PQyA9IENNVF9PQ19DTVRQT0woY29uZmlnLT5pcm9Qb2xhcml0eSkgfCBDTVRfT0NfSVJPUEVOKGNvbmZpZy0+aXNJcm9FbmFibGVkKTsKKworICAgIC8qIFNldCBpbnRlcnJ1cHQuICovCisgICAgaWYgKGNvbmZpZy0+aXNJbnRlcnJ1cHRFbmFibGVkKQorICAgIHsKKyAgICAgICAgQ01UX0VuYWJsZUludGVycnVwdHMoYmFzZSwga0NNVF9FbmRPZkN5Y2xlSW50ZXJydXB0RW5hYmxlKTsKKyAgICAgICAgRW5hYmxlSVJRKHNfY210SXJxc1tDTVRfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyAgICB9Cit9CisKK3ZvaWQgQ01UX0RlaW5pdChDTVRfVHlwZSAqYmFzZSkKK3sKKyAgICAvKkRpc2FibGUgdGhlIENNVCBtb2R1bGF0b3IuICovCisgICAgYmFzZS0+TVNDID0gMDsKKworICAgIC8qIERpc2FibGUgdGhlIGludGVycnVwdC4gKi8KKyAgICBDTVRfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0NNVF9FbmRPZkN5Y2xlSW50ZXJydXB0RW5hYmxlKTsKKyAgICBEaXNhYmxlSVJRKHNfY210SXJxc1tDTVRfR2V0SW5zdGFuY2UoYmFzZSldKTsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBHYXRlIHRoZSBjbG9jay4gKi8KKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soc19jbXRDbG9ja1tDTVRfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKwordm9pZCBDTVRfU2V0TW9kZShDTVRfVHlwZSAqYmFzZSwgY210X21vZGVfdCBtb2RlLCBjbXRfbW9kdWxhdGVfY29uZmlnX3QgKm1vZHVsYXRlQ29uZmlnKQoreworICAgIHVpbnQ4X3QgbXNjUmVnID0gYmFzZS0+TVNDOworCisgICAgLyogSnVkZ2UgdGhlIG1vZGUuICovCisgICAgaWYgKG1vZGUgIT0ga0NNVF9EaXJlY3RJUk9DdGwpCisgICAgeworICAgICAgICBhc3NlcnQobW9kdWxhdGVDb25maWcpOworCisgICAgICAgIC8qIFNldCBjYXJyaWVyIGdlbmVyYXRvci4gKi8KKyAgICAgICAgQ01UX1NldENhcnJpckdlbmVyYXRlQ291bnRPbmUoYmFzZSwgbW9kdWxhdGVDb25maWctPmhpZ2hDb3VudDEsIG1vZHVsYXRlQ29uZmlnLT5sb3dDb3VudDEpOworICAgICAgICBpZiAobW9kZSA9PSBrQ01UX0ZTS01vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENNVF9TZXRDYXJyaXJHZW5lcmF0ZUNvdW50VHdvKGJhc2UsIG1vZHVsYXRlQ29uZmlnLT5oaWdoQ291bnQyLCBtb2R1bGF0ZUNvbmZpZy0+bG93Q291bnQyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldCBjYXJyaWVyIG1vZHVsYXRvci4gKi8KKyAgICAgICAgQ01UX1NldE1vZHVsYXRlTWFya1NwYWNlKGJhc2UsIG1vZHVsYXRlQ29uZmlnLT5tYXJrQ291bnQsIG1vZHVsYXRlQ29uZmlnLT5zcGFjZUNvdW50KTsKKyAgICAgICAgbXNjUmVnICY9IH4gKENNVF9NU0NfRlNLX01BU0sgfCBDTVRfTVNDX0JBU0VfTUFTSyk7CisgICAgICAgIG1zY1JlZyB8PSBtb2RlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtc2NSZWcgJj0gfkNNVF9NU0NfTUNHRU5fTUFTSzsKKyAgICB9CisgICAgLyogU2V0IHRoZSBDTVQgbW9kZS4gKi8KKyAgICBiYXNlLT5NU0MgPSBtc2NSZWc7Cit9CisKK2NtdF9tb2RlX3QgQ01UX0dldE1vZGUoQ01UX1R5cGUgKmJhc2UpCit7CisgICAgdWludDhfdCBtb2RlID0gYmFzZS0+TVNDOworCisgICAgaWYgKCEobW9kZSAmIENNVF9NU0NfTUNHRU5fTUFTSykpCisgICAgeyAvKiBDYXJyaWVyIG1vZHVsYXRvciBkaXNhYmxlZCBhbmQgdGhlIElSTyBzaWduYWwgaXMgaW4gZGlyZWN0IHNvZnR3YXJlIGNvbnRyb2wuICovCisgICAgICAgIHJldHVybiBrQ01UX0RpcmVjdElST0N0bDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogQ2FycmllciBtb2R1bGF0b3IgaXMgZW5hYmxlZC4gKi8KKyAgICAgICAgaWYgKG1vZGUgJiBDTVRfTVNDX0JBU0VfTUFTSykKKyAgICAgICAgeworICAgICAgICAgICAgLyogQmFzZSBiYW5kIG1vZGUuICovCisgICAgICAgICAgICByZXR1cm4ga0NNVF9CYXNlYmFuZE1vZGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobW9kZSAmIENNVF9NU0NfRlNLX01BU0spCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEZTSyBtb2RlLiAqLworICAgICAgICAgICAgcmV0dXJuIGtDTVRfRlNLTW9kZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRpbWUgbW9kZS4gKi8KKyAgICAgICAgICAgIHJldHVybiBrQ01UX1RpbWVNb2RlOworICAgICAgICB9CisgICAgfQorfQorCit1aW50MzJfdCBDTVRfR2V0Q01URnJlcXVlbmN5KENNVF9UeXBlICpiYXNlLCB1aW50MzJfdCBidXNDbG9ja19IeikKK3sKKyAgICB1aW50MzJfdCBmcmVxdWVuY3k7CisgICAgdWludDMyX3QgZGl2aWRlcjsKKworICAgIC8qIEdldCBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5LiAqLworICAgIGZyZXF1ZW5jeSA9IGJ1c0Nsb2NrX0h6IC8gKChiYXNlLT5QUFMgJiBDTVRfUFBTX1BQU0RJVl9NQVNLKSArIDEpOworCisgICAgLyogR2V0IHRoZSBzZWNvbmQgZGl2aWRlci4gKi8KKyAgICBkaXZpZGVyID0gKChiYXNlLT5NU0MgJiBDTVRfTVNDX0NNVERJVl9NQVNLKSA+PiBDTVRfTVNDX0NNVERJVl9TSElGVCk7CisgICAgLyogR2V0IENNVCBmcmVxdWVuY3kuICovCisgICAgc3dpdGNoICgoY210X3NlY29uZF9jbGtkaXZfdClkaXZpZGVyKQorICAgIHsKKyAgICAgICAgY2FzZSBrQ01UX1NlY29uZENsa0RpdjE6CisgICAgICAgICAgICBmcmVxdWVuY3kgPSBmcmVxdWVuY3kgLyBDTVRfQ01URElWX09ORTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtDTVRfU2Vjb25kQ2xrRGl2MjoKKyAgICAgICAgICAgIGZyZXF1ZW5jeSA9IGZyZXF1ZW5jeSAvIENNVF9DTVRESVZfVFdPOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NNVF9TZWNvbmRDbGtEaXY0OgorICAgICAgICAgICAgZnJlcXVlbmN5ID0gZnJlcXVlbmN5IC8gQ01UX0NNVERJVl9GT1VSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NNVF9TZWNvbmRDbGtEaXY4OgorICAgICAgICAgICAgZnJlcXVlbmN5ID0gZnJlcXVlbmN5IC8gQ01UX0NNVERJVl9FSUdIVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZnJlcXVlbmN5ID0gZnJlcXVlbmN5IC8gQ01UX0NNVERJVl9PTkU7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZnJlcXVlbmN5OworfQorCit2b2lkIENNVF9TZXRNb2R1bGF0ZU1hcmtTcGFjZShDTVRfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFya0NvdW50LCB1aW50MzJfdCBzcGFjZUNvdW50KQoreworICAgIC8qIFNldCBtb2R1bGF0ZSBtYXJrLiAqLworICAgIGJhc2UtPkNNRDEgPSAobWFya0NvdW50ID4+IENNVF9NT0RVTEFURV9DT1VOVF9XSURUSCkgJiBDTVRfQ01EMV9NQl9NQVNLOworICAgIGJhc2UtPkNNRDIgPSAobWFya0NvdW50ICYgQ01UX0NNRDJfTUJfTUFTSyk7CisgICAgLyogU2V0IG1vZHVsYXRlIHNwYWNlLiAqLworICAgIGJhc2UtPkNNRDMgPSAoc3BhY2VDb3VudCA+PiBDTVRfTU9EVUxBVEVfQ09VTlRfV0lEVEgpICYgQ01UX0NNRDNfU0JfTUFTSzsKKyAgICBiYXNlLT5DTUQ0ID0gc3BhY2VDb3VudCAmIENNVF9DTUQ0X1NCX01BU0s7Cit9CisKK3ZvaWQgQ01UX1NldElyb1N0YXRlKENNVF9UeXBlICpiYXNlLCBjbXRfaW5mcmFyZWRfb3V0cHV0X3N0YXRlX3Qgc3RhdGUpCit7CisgICAgdWludDhfdCBvY1JlZyA9IGJhc2UtPk9DOworCisgICAgb2NSZWcgJj0gfkNNVF9PQ19JUk9MX01BU0s7CisgICAgb2NSZWcgfD0gQ01UX09DX0lST0woc3RhdGUpOworCisgICAgLyogU2V0IHRoZSBpbmZyYXJlZCBvdXRwdXQgc2lnbmFsIGNvbnRyb2wuICovCisgICAgYmFzZS0+T0MgPSBvY1JlZzsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NtdC5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4MWY4YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NtdC5oCkBAIC0wLDAgKzEsNDAxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9DTVRfSF8KKyNkZWZpbmUgX0ZTTF9DTVRfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBjbXQKKyAqIEB7CisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgQGJyaWVmIENNVCBkcml2ZXIgdmVyc2lvbiAyLjAuMS4gKi8KKyNkZWZpbmUgRlNMX0NNVF9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDEpKQorLypAfSovCisKKy8qIQorICogQGJyaWVmIFRoZSBtb2RlcyBvZiBDTVQuCisgKi8KK3R5cGVkZWYgZW51bSBfY210X21vZGUKK3sKKyAgICBrQ01UX0RpcmVjdElST0N0bCA9IDB4MDBVLCAvKiE8IENhcnJpZXIgbW9kdWxhdG9yIGlzIGRpc2FibGVkIGFuZCB0aGUgSVJPIHNpZ25hbCBpcyBkaXJlY3RseSBpbiBzb2Z0d2FyZSBjb250cm9sICovCisgICAga0NNVF9UaW1lTW9kZSA9IDB4MDFVLCAgICAgLyohPCBDYXJyaWVyIG1vZHVsYXRvciBpcyBlbmFibGVkIGluIHRpbWUgbW9kZS4gKi8KKyAgICBrQ01UX0ZTS01vZGUgPSAweDA1VSwgICAgICAvKiE8IENhcnJpZXIgbW9kdWxhdG9yIGlzIGVuYWJsZWQgaW4gRlNLIG1vZGUuICovCisgICAga0NNVF9CYXNlYmFuZE1vZGUgPSAweDA5VSAgLyohPCBDYXJyaWVyIG1vZHVsYXRvciBpcyBlbmFibGVkIGluIGJhc2ViYW5kIG1vZGUuICovCit9IGNtdF9tb2RlX3Q7CisKKy8qIQorICogQGJyaWVmIFRoZSBDTVQgY2xvY2sgZGl2aWRlIHByaW1hcnkgcHJlc2NhbGVyLgorICogVGhlIHByaW1hcnkgY2xvY2sgZGl2aWRlciBpcyB1c2VkIHRvIGRpdmlkZXIgdGhlIGJ1cyBjbG9jayB0bworICogZ2V0IHRoZSBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IHRvIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gOCBNSFouCisgKiBXaGVuIHRoZSBidXMgY2xvY2sgaXMgOCBNSFosIHNldCBwcmltYXJ5IHByZXNjYWxlciB0byAia0NNVF9QcmltYXJ5Q2xrRGl2MSIuCisgKi8KK3R5cGVkZWYgZW51bSBfY210X3ByaW1hcnlfY2xrZGl2Cit7CisgICAga0NNVF9QcmltYXJ5Q2xrRGl2MSA9IDBVLCAgIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDEuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2MiA9IDFVLCAgIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDIuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2MyA9IDJVLCAgIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDMuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2NCA9IDNVLCAgIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDQuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2NSA9IDRVLCAgIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDUuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2NiA9IDVVLCAgIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDYuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2NyA9IDZVLCAgIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDcuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2OCA9IDdVLCAgIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDguICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2OSA9IDhVLCAgIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDkuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2MTAgPSA5VSwgIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDEwLiAqLworICAgIGtDTVRfUHJpbWFyeUNsa0RpdjExID0gMTBVLCAvKiE8IFRoZSBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IGlzIHRoZSBidXMgY2xvY2sgZGl2aWRlZCBieSAxMS4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXYxMiA9IDExVSwgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgMTIuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2MTMgPSAxMlUsIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDEzLiAqLworICAgIGtDTVRfUHJpbWFyeUNsa0RpdjE0ID0gMTNVLCAvKiE8IFRoZSBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IGlzIHRoZSBidXMgY2xvY2sgZGl2aWRlZCBieSAxNC4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXYxNSA9IDE0VSwgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgMTUuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2MTYgPSAxNVUgIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDE2LiAqLworfSBjbXRfcHJpbWFyeV9jbGtkaXZfdDsKKworLyohCisgKiBAYnJpZWYgVGhlIENNVCBjbG9jayBkaXZpZGUgc2Vjb25kYXJ5IHByZXNjYWxlci4KKyAqIFRoZSBzZWNvbmQgcHJlc2NhbGVyIGNhbiBiZSB1c2VkIHRvIGRpdmlkZSB0aGUgOCBNSFogQ01UIGNsb2NrCisgKiBieSAxLCAyLCA0LCBvciA4IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIF9jbXRfc2Vjb25kX2Nsa2RpdgoreworICAgIGtDTVRfU2Vjb25kQ2xrRGl2MSA9IDBVLCAvKiE8IFRoZSBDTVQgY2xvY2sgaXMgdGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgZnJlcXVlbmN5IGRpdmlkZWQgYnkgMS4gKi8KKyAgICBrQ01UX1NlY29uZENsa0RpdjIgPSAxVSwgLyohPCBUaGUgQ01UIGNsb2NrIGlzIHRoZSBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IDIuICovCisgICAga0NNVF9TZWNvbmRDbGtEaXY0ID0gMlUsIC8qITwgVGhlIENNVCBjbG9jayBpcyB0aGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBmcmVxdWVuY3kgZGl2aWRlZCBieSA0LiAqLworICAgIGtDTVRfU2Vjb25kQ2xrRGl2OCA9IDNVICAvKiE8IFRoZSBDTVQgY2xvY2sgaXMgdGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgZnJlcXVlbmN5IGRpdmlkZWQgYnkgOC4gKi8KK30gY210X3NlY29uZF9jbGtkaXZfdDsKKworLyohCisgKiBAYnJpZWYgVGhlIENNVCBpbmZyYXJlZCBvdXRwdXQgcG9sYXJpdHkuCisgKi8KK3R5cGVkZWYgZW51bSBfY210X2luZnJhcmVkX291dHB1dF9wb2xhcml0eQoreworICAgIGtDTVRfSVJPQWN0aXZlTG93ID0gMFUsIC8qITwgVGhlIENNVCBpbmZyYXJlZCBvdXRwdXQgc2lnbmFsIHBvbGFyaXR5IGlzIGFjdGl2ZS1sb3cuICovCisgICAga0NNVF9JUk9BY3RpdmVIaWdoID0gMVUgLyohPCBUaGUgQ01UIGluZnJhcmVkIG91dHB1dCBzaWduYWwgcG9sYXJpdHkgaXMgYWN0aXZlLWhpZ2guICovCit9IGNtdF9pbmZyYXJlZF9vdXRwdXRfcG9sYXJpdHlfdDsKKworLyohCisgKiBAYnJpZWYgVGhlIENNVCBpbmZyYXJlZCBvdXRwdXQgc2lnbmFsIHN0YXRlIGNvbnRyb2wuCisgKi8KK3R5cGVkZWYgZW51bSBfY210X2luZnJhcmVkX291dHB1dF9zdGF0ZQoreworICAgIGtDTVRfSVJPQ3RsTG93ID0gMFUsIC8qITwgVGhlIENNVCBJbmZyYXJlZCBvdXRwdXQgc2lnbmFsIHN0YXRlIGlzIGNvbnRyb2xsZWQgdG8gbG93LiAqLworICAgIGtDTVRfSVJPQ3RsSGlnaCA9IDFVIC8qITwgVGhlIENNVCBJbmZyYXJlZCBvdXRwdXQgc2lnbmFsIHN0YXRlIGlzIGNvbnRyb2xsZWQgdG8gaGlnaC4gKi8KK30gY210X2luZnJhcmVkX291dHB1dF9zdGF0ZV90OworCisvKiEKKyAqIEBicmllZiBDTVQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLCBkZWZhdWx0IHNldHRpbmdzIGFsbCBkaXNhYmxlZC4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgc2V0dGluZ3MgZm9yIGFsbCBvZiB0aGUgQ01UIGludGVycnVwdCBjb25maWd1cmF0aW9ucy4KKyAqLworZW51bSBfY210X2ludGVycnVwdF9lbmFibGUKK3sKKyAgICBrQ01UX0VuZE9mQ3ljbGVJbnRlcnJ1cHRFbmFibGUgPSBDTVRfTVNDX0VPQ0lFX01BU0ssIC8qITwgQ01UIGVuZCBvZiBjeWNsZSBpbnRlcnJ1cHQuICovCit9OworCisvKiEKKyAqIEBicmllZiBDTVQgY2FycmllciBnZW5lcmF0b3IgYW5kIG1vZHVsYXRvciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2NtdF9tb2R1bGF0ZV9jb25maWcKK3sKKyAgICB1aW50OF90IGhpZ2hDb3VudDE7ICAvKiE8IFRoZSBoaWdoLXRpbWUgZm9yIGNhcnJpZXIgZ2VuZXJhdG9yIGZpcnN0IHJlZ2lzdGVyLiAqLworICAgIHVpbnQ4X3QgbG93Q291bnQxOyAgIC8qITwgVGhlIGxvdy10aW1lIGZvciBjYXJyaWVyIGdlbmVyYXRvciBmaXJzdCByZWdpc3Rlci4gKi8KKyAgICB1aW50OF90IGhpZ2hDb3VudDI7ICAvKiE8IFRoZSBoaWdoLXRpbWUgZm9yIGNhcnJpZXIgZ2VuZXJhdG9yIHNlY29uZCByZWdpc3RlciBmb3IgRlNLIG1vZGUuICovCisgICAgdWludDhfdCBsb3dDb3VudDI7ICAgLyohPCBUaGUgbG93LXRpbWUgZm9yIGNhcnJpZXIgZ2VuZXJhdG9yIHNlY29uZCByZWdpc3RlciBmb3IgRlNLIG1vZGUuICovCisgICAgdWludDE2X3QgbWFya0NvdW50OyAgLyohPCBUaGUgbWFyayB0aW1lIGZvciB0aGUgbW9kdWxhdG9yIGdhdGUuICovCisgICAgdWludDE2X3Qgc3BhY2VDb3VudDsgLyohPCBUaGUgc3BhY2UgdGltZSBmb3IgdGhlIG1vZHVsYXRvciBnYXRlLiAqLworfSBjbXRfbW9kdWxhdGVfY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgQ01UIGJhc2ljIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2NtdF9jb25maWcKK3sKKyAgICBib29sIGlzSW50ZXJydXB0RW5hYmxlZDsgICAgICAgICAgICAgICAgICAgIC8qITwgVGltZXIgaW50ZXJydXB0IDAtZGlzYWJsZSwgMS1lbmFibGUuICovCisgICAgYm9vbCBpc0lyb0VuYWJsZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSBJUk8gb3V0cHV0IDAtZGlzYWJsZWQsIDEtZW5hYmxlZC4gKi8KKyAgICBjbXRfaW5mcmFyZWRfb3V0cHV0X3BvbGFyaXR5X3QgaXJvUG9sYXJpdHk7IC8qITwgVGhlIElSTyBwb2xhcml0eS4gKi8KKyAgICBjbXRfc2Vjb25kX2Nsa2Rpdl90IGRpdmlkZXI7ICAgICAgICAgICAgICAgIC8qITwgVGhlIENNVCBjbG9jayBkaXZpZGUgcHJlc2NhbGVyLiAqLworfSBjbXRfY29uZmlnX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAbmFtZSBJbml0aWFsaXphdGlvbiBhbmQgZGVpbml0aWFsaXphdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBDTVQgZGVmYXVsdCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gVGhpcyBBUEkKKyAqIGdldHMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoZSBDTVRfSW5pdCgpLgorICogVXNlIHRoZSBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgdW5jaGFuZ2VkIGluIENNVF9Jbml0KCkgb3IgbW9kaWZ5CisgKiBmaWVsZHMgb2YgdGhlIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyB0aGUgQ01UX0luaXQoKS4KKyAqCisgKiBAcGFyYW0gY29uZmlnIFRoZSBDTVQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAqLwordm9pZCBDTVRfR2V0RGVmYXVsdENvbmZpZyhjbXRfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBDTVQgbW9kdWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdW5nYXRlcyB0aGUgbW9kdWxlIGNsb2NrIGFuZCBzZXRzIHRoZSBDTVQgaW50ZXJuYWwgY2xvY2ssCisgKiBpbnRlcnJ1cHQsIGFuZCBpbmZyYXJlZCBvdXRwdXQgc2lnbmFsIGZvciB0aGUgQ01UIG1vZHVsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgICAgICAgIENNVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjb25maWcgICAgICAgICAgVGhlIENNVCBiYXNpYyBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBidXNDbG9ja19IeiAgICAgVGhlIENNVCBtb2R1bGUgaW5wdXQgY2xvY2sgLSBidXMgY2xvY2sgZnJlcXVlbmN5LgorICovCit2b2lkIENNVF9Jbml0KENNVF9UeXBlICpiYXNlLCBjb25zdCBjbXRfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3QgYnVzQ2xvY2tfSHopOworCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyB0aGUgQ01UIG1vZHVsZSBhbmQgZ2F0ZSBjb250cm9sLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgQ01UIG1vZHVsYXRvciwgaW50ZXJydXB0cywgYW5kIGdhdGVzIHRoZQorICogQ01UIGNsb2NrIGNvbnRyb2wuIENNVF9Jbml0IG11c3QgYmUgY2FsbGVkICB0byB1c2UgdGhlIENNVCBhZ2Fpbi4KKyAqCisgKiBAcGFyYW0gYmFzZSAgIENNVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLwordm9pZCBDTVRfRGVpbml0KENNVF9UeXBlICpiYXNlKTsKKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBCYXNpYyBDb250cm9sIE9wZXJhdGlvbnMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgU2VsZWN0cyB0aGUgbW9kZSBmb3IgQ01ULgorICoKKyAqIEBwYXJhbSBiYXNlICAgQ01UIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1vZGUgICBUaGUgQ01UIGZlYXR1cmUgbW9kZSBlbnVtZXJhdGlvbi4gU2VlICJjbXRfbW9kZV90Ii4KKyAqIEBwYXJhbSBtb2R1bGF0ZUNvbmZpZyAgVGhlIGNhcnJpZXIgZ2VuZXJhdGlvbiBhbmQgbW9kdWxhdG9yIGNvbmZpZ3VyYXRpb24uCisgKi8KK3ZvaWQgQ01UX1NldE1vZGUoQ01UX1R5cGUgKmJhc2UsIGNtdF9tb2RlX3QgbW9kZSwgY210X21vZHVsYXRlX2NvbmZpZ190ICptb2R1bGF0ZUNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIG1vZGUgb2YgdGhlIENNVCBtb2R1bGUuCisgKgorICogQHBhcmFtIGJhc2UgICBDTVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIFRoZSBDTVQgbW9kZS4KKyAqICAgICBrQ01UX0RpcmVjdElST0N0bCAgICAgQ2FycmllciBtb2R1bGF0b3IgaXMgZGlzYWJsZWQ7IHRoZSBJUk8gc2lnbmFsIGlzIGRpcmVjdGx5IGluIHNvZnR3YXJlIGNvbnRyb2wuCisgKiAgICAga0NNVF9UaW1lTW9kZSAgICAgICAgIENhcnJpZXIgbW9kdWxhdG9yIGlzIGVuYWJsZWQgaW4gdGltZSBtb2RlLgorICogICAgIGtDTVRfRlNLTW9kZSAgICAgICAgICBDYXJyaWVyIG1vZHVsYXRvciBpcyBlbmFibGVkIGluIEZTSyBtb2RlLgorICogICAgIGtDTVRfQmFzZWJhbmRNb2RlICAgICBDYXJyaWVyIG1vZHVsYXRvciBpcyBlbmFibGVkIGluIGJhc2ViYW5kIG1vZGUuCisgKi8KK2NtdF9tb2RlX3QgQ01UX0dldE1vZGUoQ01UX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBhY3R1YWwgQ01UIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgICAgQ01UIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGJ1c0Nsb2NrX0h6IENNVCBtb2R1bGUgaW5wdXQgY2xvY2sgLSBidXMgY2xvY2sgZnJlcXVlbmN5LgorICogQHJldHVybiBUaGUgQ01UIGNsb2NrIGZyZXF1ZW5jeS4KKyAqLwordWludDMyX3QgQ01UX0dldENNVEZyZXF1ZW5jeShDTVRfVHlwZSAqYmFzZSwgdWludDMyX3QgYnVzQ2xvY2tfSHopOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBwcmltYXJ5IGRhdGEgc2V0IGZvciB0aGUgQ01UIGNhcnJpZXIgZ2VuZXJhdG9yIGNvdW50ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBoaWdoLXRpbWUgYW5kIGxvdy10aW1lIG9mIHRoZSBwcmltYXJ5IGRhdGEgc2V0IGZvciB0aGUKKyAqIENNVCBjYXJyaWVyIGdlbmVyYXRvciBjb3VudGVyIHRvIGNvbnRyb2wgdGhlIHBlcmlvZCBhbmQgdGhlIGR1dHkgY3ljbGUgb2YgdGhlCisgKiBvdXRwdXQgY2FycmllciBzaWduYWwuCisgKiBJZiB0aGUgQ01UIGNsb2NrIHBlcmlvZCBpcyBUY210LCB0aGUgcGVyaW9kIG9mIHRoZSBjYXJyaWVyIGdlbmVyYXRvciBzaWduYWwgZXF1YWxzCisgKiAoaGlnaENvdW50ICsgbG93Q291bnQpICogVGNtdC4gVGhlIGR1dHkgY3ljbGUgZXF1YWxzIHRvIGhpZ2hDb3VudCAvIChoaWdoQ291bnQgKyBsb3dDb3VudCkuCisgKgorICogQHBhcmFtIGJhc2UgICAgICBDTVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGlnaENvdW50IFRoZSBudW1iZXIgb2YgQ01UIGNsb2NrcyBmb3IgY2FycmllciBnZW5lcmF0b3Igc2lnbmFsIGhpZ2ggdGltZSwKKyAqICAgICAgICAgICAgICAgICAgaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMSB+IDB4RkYuCisgKiBAcGFyYW0gbG93Q291bnQgIFRoZSBudW1iZXIgb2YgQ01UIGNsb2NrcyBmb3IgY2FycmllciBnZW5lcmF0b3Igc2lnbmFsIGxvdyB0aW1lLAorICogICAgICAgICAgICAgICAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAxIH4gMHhGRi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENNVF9TZXRDYXJyaXJHZW5lcmF0ZUNvdW50T25lKENNVF9UeXBlICpiYXNlLCB1aW50MzJfdCBoaWdoQ291bnQsIHVpbnQzMl90IGxvd0NvdW50KQoreworICAgIGFzc2VydChoaWdoQ291bnQgPD0gQ01UX0NHSDFfUEhfTUFTSyk7CisgICAgYXNzZXJ0KGhpZ2hDb3VudCk7CisgICAgYXNzZXJ0KGxvd0NvdW50IDw9IENNVF9DR0wxX1BMX01BU0spOworICAgIGFzc2VydChsb3dDb3VudCk7CisKKyAgICBiYXNlLT5DR0gxID0gaGlnaENvdW50OworICAgIGJhc2UtPkNHTDEgPSBsb3dDb3VudDsKK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgc2Vjb25kYXJ5IGRhdGEgc2V0IGZvciB0aGUgQ01UIGNhcnJpZXIgZ2VuZXJhdG9yIGNvdW50ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBGU0sgbW9kZSBzZXR0aW5nIHRoZSBoaWdoLXRpbWUgYW5kIGxvdy10aW1lIG9mIHRoZSBzZWNvbmRhcnkKKyAqIGRhdGEgc2V0IENNVCBjYXJyaWVyIGdlbmVyYXRvciBjb3VudGVyIHRvIGNvbnRyb2wgdGhlIHBlcmlvZCBhbmQgdGhlIGR1dHkgY3ljbGUKKyAqIG9mIHRoZSBvdXRwdXQgY2FycmllciBzaWduYWwuCisgKiBJZiB0aGUgQ01UIGNsb2NrIHBlcmlvZCBpcyBUY210LCB0aGUgcGVyaW9kIG9mIHRoZSBjYXJyaWVyIGdlbmVyYXRvciBzaWduYWwgZXF1YWxzCisgKiAoaGlnaENvdW50ICsgbG93Q291bnQpICogVGNtdC4gVGhlIGR1dHkgY3ljbGUgZXF1YWxzICBoaWdoQ291bnQgLyAoaGlnaENvdW50ICsgbG93Q291bnQpLgorICoKKyAqIEBwYXJhbSBiYXNlICAgICAgQ01UIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhpZ2hDb3VudCBUaGUgbnVtYmVyIG9mIENNVCBjbG9ja3MgZm9yIGNhcnJpZXIgZ2VuZXJhdG9yIHNpZ25hbCBoaWdoIHRpbWUsCisgKiAgICAgICAgICAgICAgICAgIGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIDEgfiAweEZGLgorICogQHBhcmFtIGxvd0NvdW50ICBUaGUgbnVtYmVyIG9mIENNVCBjbG9ja3MgZm9yIGNhcnJpZXIgZ2VuZXJhdG9yIHNpZ25hbCBsb3cgdGltZSwKKyAqICAgICAgICAgICAgICAgICAgaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMSB+IDB4RkYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTVRfU2V0Q2FycmlyR2VuZXJhdGVDb3VudFR3byhDTVRfVHlwZSAqYmFzZSwgdWludDMyX3QgaGlnaENvdW50LCB1aW50MzJfdCBsb3dDb3VudCkKK3sKKyAgICBhc3NlcnQoaGlnaENvdW50IDw9IENNVF9DR0gyX1NIX01BU0spOworICAgIGFzc2VydChoaWdoQ291bnQpOworICAgIGFzc2VydChsb3dDb3VudCA8PSBDTVRfQ0dMMl9TTF9NQVNLKTsKKyAgICBhc3NlcnQobG93Q291bnQpOworCisgICAgYmFzZS0+Q0dIMiA9IGhpZ2hDb3VudDsKKyAgICBiYXNlLT5DR0wyID0gbG93Q291bnQ7Cit9CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIG1vZHVsYXRpb24gbWFyayBhbmQgc3BhY2UgdGltZSBwZXJpb2QgZm9yIHRoZSBDTVQgbW9kdWxhdG9yLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbWFyayB0aW1lIHBlcmlvZCBvZiB0aGUgQ01UIG1vZHVsYXRvciBjb3VudGVyCisgKiB0byBjb250cm9sIHRoZSBtYXJrIHRpbWUgb2YgdGhlIG91dHB1dCBtb2R1bGF0ZWQgc2lnbmFsIGZyb20gdGhlIGNhcnJpZXIgZ2VuZXJhdG9yIG91dHB1dCBzaWduYWwuCisgKiBJZiB0aGUgQ01UIGNsb2NrIGZyZXF1ZW5jeSBpcyBGY210IGFuZCB0aGUgY2FycmllciBvdXQgc2lnbmFsIGZyZXF1ZW5jeSBpcyBmY2c6CisgKiAgICAgIC0gSW4gVGltZSBhbmQgQmFzZWJhbmQgbW9kZTogVGhlIG1hcmsgcGVyaW9kIG9mIHRoZSBnZW5lcmF0ZWQgc2lnbmFsIGVxdWFscyAobWFya0NvdW50ICsgMSkgLyAoRmNtdC84KS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3BhY2UgcGVyaW9kIG9mIHRoZSBnZW5lcmF0ZWQgc2lnbmFsIGVxdWFscyBzcGFjZUNvdW50IC8gKEZjbXQvOCkuCisgKiAgICAgIC0gSW4gRlNLIG1vZGU6IFRoZSBtYXJrIHBlcmlvZCBvZiB0aGUgZ2VuZXJhdGVkIHNpZ25hbCBlcXVhbHMgKG1hcmtDb3VudCArIDEpL2ZjZy4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhlIHNwYWNlIHBlcmlvZCBvZiB0aGUgZ2VuZXJhdGVkIHNpZ25hbCBlcXVhbHMgc3BhY2VDb3VudCAvIGZjZy4KKyAqCisgKiBAcGFyYW0gYmFzZSBCYXNlIGFkZHJlc3MgZm9yIGN1cnJlbnQgQ01UIGluc3RhbmNlLgorICogQHBhcmFtIG1hcmtDb3VudCBUaGUgbnVtYmVyIG9mIGNsb2NrIHBlcmlvZCBmb3IgQ01UIG1vZHVsYXRvciBzaWduYWwgbWFyayBwZXJpb2QsCisgKiAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmFuZ2Ugb2YgMCB+IDB4RkZGRi4KKyAqIEBwYXJhbSBzcGFjZUNvdW50IFRoZSBudW1iZXIgb2YgY2xvY2sgcGVyaW9kIGZvciBDTVQgbW9kdWxhdG9yIHNpZ25hbCBzcGFjZSBwZXJpb2QsCisgKiAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmFuZ2Ugb2YgdGhlIDAgfiAweEZGRkYuCisgKi8KK3ZvaWQgQ01UX1NldE1vZHVsYXRlTWFya1NwYWNlKENNVF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXJrQ291bnQsIHVpbnQzMl90IHNwYWNlQ291bnQpOworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBleHRlbmRlZCBzcGFjZSBvcGVyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1ha2UgdGhlIHNwYWNlIHBlcmlvZCBsb25nZXIKKyAqIGZvciB0aW1lLCBiYXNlYmFuZCwgYW5kIEZTSyBtb2Rlcy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgIENNVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgVHJ1ZSBlbmFibGUgdGhlIGV4dGVuZGVkIHNwYWNlLCBmYWxzZSBkaXNhYmxlIHRoZSBleHRlbmRlZCBzcGFjZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENNVF9FbmFibGVFeHRlbmRlZFNwYWNlKENNVF9UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+TVNDIHw9IENNVF9NU0NfRVhTUENfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+TVNDICY9IH5DTVRfTVNDX0VYU1BDX01BU0s7CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBJUk8gKGluZnJhcmVkIG91dHB1dCkgc2lnbmFsIHN0YXRlLgorICoKKyAqIENoYW5nZXMgdGhlIHN0YXRlcyBvZiB0aGUgSVJPIHNpZ25hbCB3aGVuIHRoZSBrQ01UX0RpcmVjdElST01vZGUgbW9kZSBpcyBzZXQKKyAqIGFuZCB0aGUgSVJPIHNpZ25hbCBpcyBlbmFibGVkLgorICoKKyAqIEBwYXJhbSBiYXNlICAgQ01UIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHN0YXRlICBUaGUgY29udHJvbCBvZiB0aGUgSVJPIHNpZ25hbC4gU2VlICJjbXRfaW5mcmFyZWRfb3V0cHV0X3N0YXRlX3QiCisgKi8KK3ZvaWQgQ01UX1NldElyb1N0YXRlKENNVF9UeXBlICpiYXNlLCBjbXRfaW5mcmFyZWRfb3V0cHV0X3N0YXRlX3Qgc3RhdGUpOworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBDTVQgaW50ZXJydXB0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgQ01UIGludGVycnVwdHMgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBtYXNrIGlmIGVuYWJsZWQuCisgKiBUaGUgQ01UIG9ubHkgaGFzIHRoZSBlbmQgb2YgdGhlIGN5Y2xlIGludGVycnVwdCAtIGFuIGludGVycnVwdCBvY2N1cnMgYXQgdGhlIGVuZAorICogb2YgdGhlIG1vZHVsYXRvciBjeWNsZS4gVGhpcyBpbnRlcnJ1cHQgcHJvdmlkZXMgYSBtZWFucyBmb3IgdGhlIHVzZXIKKyAqIHRvIHJlbG9hZCB0aGUgbmV3IG1hcmsvc3BhY2UgdmFsdWVzIGludG8gdGhlIENNVCBtb2R1bGF0b3IgZGF0YSByZWdpc3RlcnMKKyAqIGFuZCB2ZXJpZnkgdGhlIG1vZHVsYXRvciBtYXJrIGFuZCBzcGFjZS4KKyAqIEZvciBleGFtcGxlLCB0byBlbmFibGUgdGhlIGVuZCBvZiBjeWNsZSwgZG8gdGhlIGZvbGxvd2luZy4KKyAqIEBjb2RlCisgKiAgICAgQ01UX0VuYWJsZUludGVycnVwdHMoQ01ULCBrQ01UX0VuZE9mQ3ljbGVJbnRlcnJ1cHRFbmFibGUpOworICogQGVuZGNvZGUKKyAqIEBwYXJhbSBiYXNlICAgQ01UIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgVGhlIGludGVycnVwdHMgdG8gZW5hYmxlLiBMb2dpY2FsIE9SIG9mIEByZWYgX2NtdF9pbnRlcnJ1cHRfZW5hYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ01UX0VuYWJsZUludGVycnVwdHMoQ01UX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+TVNDIHw9IG1hc2s7Cit9CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBDTVQgaW50ZXJydXB0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIENNVCBpbnRlcnJ1cHRzIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgbWFza0lmIGVuYWJsZWQuCisgKiBUaGUgQ01UIG9ubHkgaGFzIHRoZSBlbmQgb2YgdGhlIGN5Y2xlIGludGVycnVwdC4KKyAqIEZvciBleGFtcGxlLCB0byBkaXNhYmxlIHRoZSBlbmQgb2YgY3ljbGUsIGRvIHRoZSBmb2xsb3dpbmcuCisgKiBAY29kZQorICogICAgIENNVF9EaXNhYmxlSW50ZXJydXB0cyhDTVQsIGtDTVRfRW5kT2ZDeWNsZUludGVycnVwdEVuYWJsZSk7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlICAgQ01UIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgVGhlIGludGVycnVwdHMgdG8gZW5hYmxlLiBMb2dpY2FsIE9SIG9mIEByZWYgX2NtdF9pbnRlcnJ1cHRfZW5hYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ01UX0Rpc2FibGVJbnRlcnJ1cHRzKENNVF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPk1TQyAmPSB+bWFzazsKK30KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgZW5kIG9mIHRoZSBjeWNsZSBzdGF0dXMgZmxhZy4KKyAqCisgKiBUaGUgZmxhZyBpcyBzZXQ6CisgKiAgICAgICAgICAgLSBXaGVuIHRoZSBtb2R1bGF0b3IgaXMgbm90IGN1cnJlbnRseSBhY3RpdmUgYW5kIGNhcnJpZXIgYW5kIG1vZHVsYXRvcgorICogICAgICAgICAgICAgYXJlIHNldCB0byBzdGFydCB0aGUgaW5pdGlhbCBDTVQgdHJhbnNtaXNzaW9uLgorICogICAgICAgICAgIC0gQXQgdGhlIGVuZCBvZiBlYWNoIG1vZHVsYXRpb24gY3ljbGUgd2hlbiB0aGUgY291bnRlciBpcyByZWxvYWRlZCBhbmQKKyAqICAgICAgICAgICAgIHRoZSBjYXJyaWVyIGFuZCBtb2R1bGF0b3IgYXJlIGVuYWJsZWQuCisgKiBAcGFyYW0gYmFzZSAgIENNVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gQ3VycmVudCBzdGF0dXMgb2YgdGhlIGVuZCBvZiBjeWNsZSBzdGF0dXMgZmxhZworICogICAgICAgICBAYXJnIG5vbi16ZXJvOiAgRW5kLW9mLWN5Y2xlIGhhcyBvY2N1cnJlZC4KKyAqICAgICAgICAgQGFyZyB6ZXJvOiBFbmQtb2YtY3ljbGUgaGFzIG5vdCB5ZXQgb2NjdXJyZWQgc2luY2UgdGhlIGZsYWcgbGFzdCBjbGVhcmVkLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IENNVF9HZXRTdGF0dXNGbGFncyhDTVRfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gYmFzZS0+TVNDICYgQ01UX01TQ19FT0NGX01BU0s7Cit9CisKKy8qISBAfSovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRlNMX0NNVF9IXyovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jb21tb24uYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNTA0OGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jb21tb24uYwpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKy8vI2luY2x1ZGUgImZzbF9kZWJ1Z19jb25zb2xlLmgiCisKKyNpZm5kZWYgTkRFQlVHCisjaWYgKGRlZmluZWQoX19DQ19BUk0pKSB8fCAoZGVmaW5lZChfX0lDQ0FSTV9fKSkKK3ZvaWQgX19hZWFiaV9hc3NlcnQoY29uc3QgY2hhciAqZmFpbGVkRXhwciwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCit7CisgICAgLy9QUklOVEYoIkFTU0VSVCBFUlJPUiBcIiAlcyBcIjogZmlsZSBcIiVzXCIgTGluZSBcIiVkXCIgXG4iLCBmYWlsZWRFeHByLCBmaWxlLCBsaW5lKTsKKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgICAgX19CS1BUKDApOworICAgIH0KK30KKyNlbGlmKGRlZmluZWQoX19SRURMSUJfXykpCisKKyNpZiBTREtfREVCVUdDT05TT0xFCit2b2lkIF9fYXNzZXJ0aW9uX2ZhaWxlZChjaGFyICpfRXhwcikKK3sKKyAgICBQUklOVEYoIiVzXG4iLCBfRXhwcik7CisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIF9fYXNtKCJia3B0ICMwIik7CisgICAgfQorfQorI2VuZGlmCisKKyNlbGlmKGRlZmluZWQoX19HTlVDX18pKQordm9pZCBfX2Fzc2VydF9mdW5jKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmYWlsZWRFeHByKQoreworICAgIFBSSU5URigiQVNTRVJUIEVSUk9SIFwiICVzIFwiOiBmaWxlIFwiJXNcIiBMaW5lIFwiJWRcIiBmdW5jdGlvbiBuYW1lIFwiJXNcIiBcbiIsIGZhaWxlZEV4cHIsIGZpbGUsIGxpbmUsIGZ1bmMpOworICAgIGZvciAoOzspCisgICAgeworICAgICAgICBfX0JLUFQoMCk7CisgICAgfQorfQorI2VuZGlmIC8qIChkZWZpbmVkKF9fQ0NfQVJNKSkgfHwgIChkZWZpbmVkIChfX0lDQ0FSTV9fKSkgKi8KKyNlbmRpZiAvKiBOREVCVUcgKi8KKworI2lmbmRlZiBfX0dJQ19QUklPX0JJVFMKK3VpbnQzMl90IEluc3RhbGxJUlFIYW5kbGVyKElSUW5fVHlwZSBpcnEsIHVpbnQzMl90IGlycUhhbmRsZXIpCit7CisvKiBBZGRyZXNzZXMgZm9yIFZFQ1RPUl9UQUJMRSBhbmQgVkVDVE9SX1JBTSBjb21lIGZyb20gdGhlIGxpbmtlciBmaWxlICovCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKKyAgICBleHRlcm4gdWludDMyX3QgSW1hZ2UkJFZFQ1RPUl9ST00kJEJhc2VbXTsKKyAgICBleHRlcm4gdWludDMyX3QgSW1hZ2UkJFZFQ1RPUl9SQU0kJEJhc2VbXTsKKyAgICBleHRlcm4gdWludDMyX3QgSW1hZ2UkJFJXX21fZGF0YSQkQmFzZVtdOworCisjZGVmaW5lIF9fVkVDVE9SX1RBQkxFIEltYWdlJCRWRUNUT1JfUk9NJCRCYXNlCisjZGVmaW5lIF9fVkVDVE9SX1JBTSBJbWFnZSQkVkVDVE9SX1JBTSQkQmFzZQorI2RlZmluZSBfX1JBTV9WRUNUT1JfVEFCTEVfU0laRSAoKCh1aW50MzJfdClJbWFnZSQkUldfbV9kYXRhJCRCYXNlIC0gKHVpbnQzMl90KUltYWdlJCRWRUNUT1JfUkFNJCRCYXNlKSkKKyNlbGlmIGRlZmluZWQoX19JQ0NBUk1fXykKKyAgICBleHRlcm4gdWludDMyX3QgX19SQU1fVkVDVE9SX1RBQkxFX1NJWkVbXTsKKyAgICBleHRlcm4gdWludDMyX3QgX19WRUNUT1JfVEFCTEVbXTsKKyAgICBleHRlcm4gdWludDMyX3QgX19WRUNUT1JfUkFNW107CisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorICAgIGV4dGVybiB1aW50MzJfdCBfX1ZFQ1RPUl9UQUJMRVtdOworICAgIGV4dGVybiB1aW50MzJfdCBfX1ZFQ1RPUl9SQU1bXTsKKyAgICBleHRlcm4gdWludDMyX3QgX19SQU1fVkVDVE9SX1RBQkxFX1NJWkVfQllURVNbXTsKKyAgICB1aW50MzJfdCBfX1JBTV9WRUNUT1JfVEFCTEVfU0laRSA9ICh1aW50MzJfdCkoX19SQU1fVkVDVE9SX1RBQkxFX1NJWkVfQllURVMpOworI2VuZGlmIC8qIGRlZmluZWQoX19DQ19BUk0pICovCisgICAgdWludDMyX3QgbjsKKyAgICB1aW50MzJfdCByZXQ7CisgICAgdWludDMyX3QgaXJxTWFza1ZhbHVlOworCisgICAgaXJxTWFza1ZhbHVlID0gRGlzYWJsZUdsb2JhbElSUSgpOworICAgIGlmIChTQ0ItPlZUT1IgIT0gKHVpbnQzMl90KV9fVkVDVE9SX1JBTSkKKyAgICB7CisgICAgICAgIC8qIENvcHkgdGhlIHZlY3RvciB0YWJsZSBmcm9tIFJPTSB0byBSQU0gKi8KKyAgICAgICAgZm9yIChuID0gMDsgbiA8ICgodWludDMyX3QpX19SQU1fVkVDVE9SX1RBQkxFX1NJWkUpIC8gc2l6ZW9mKHVpbnQzMl90KTsgbisrKQorICAgICAgICB7CisgICAgICAgICAgICBfX1ZFQ1RPUl9SQU1bbl0gPSBfX1ZFQ1RPUl9UQUJMRVtuXTsKKyAgICAgICAgfQorICAgICAgICAvKiBQb2ludCB0aGUgVlRPUiB0byB0aGUgcG9zaXRpb24gb2YgdmVjdG9yIHRhYmxlICovCisgICAgICAgIFNDQi0+VlRPUiA9ICh1aW50MzJfdClfX1ZFQ1RPUl9SQU07CisgICAgfQorCisgICAgcmV0ID0gX19WRUNUT1JfUkFNW2lycSArIDE2XTsKKyAgICAvKiBtYWtlIHN1cmUgdGhlIF9fVkVDVE9SX1JBTSBpcyBub25jYWNoYWJsZSAqLworICAgIF9fVkVDVE9SX1JBTVtpcnEgKyAxNl0gPSBpcnFIYW5kbGVyOworCisgICAgRW5hYmxlR2xvYmFsSVJRKGlycU1hc2tWYWx1ZSk7CisKKyAgICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKKyNpZm5kZWYgQ1BVX1FOOTA4WAorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19TWVNDT05fQ09VTlQpICYmIChGU0xfRkVBVFVSRV9TT0NfU1lTQ09OX0NPVU5UID4gMCkpCisKK3ZvaWQgRW5hYmxlRGVlcFNsZWVwSVJRKElSUW5fVHlwZSBpbnRlcnJ1cHQpCit7CisgICAgdWludDMyX3QgaW5kZXggPSAwOworICAgIHVpbnQzMl90IGludE51bWJlciA9ICh1aW50MzJfdClpbnRlcnJ1cHQ7CisgICAgd2hpbGUgKGludE51bWJlciA+PSAzMnUpCisgICAgeworICAgICAgICBpbmRleCsrOworICAgICAgICBpbnROdW1iZXIgLT0gMzJ1OworICAgIH0KKworICAgIFNZU0NPTi0+U1RBUlRFUlNFVFtpbmRleF0gPSAxdSA8PCBpbnROdW1iZXI7CisgICAgRW5hYmxlSVJRKGludGVycnVwdCk7IC8qIGFsc28gZW5hYmxlIGludGVycnVwdCBhdCBOVklDICovCit9CisKK3ZvaWQgRGlzYWJsZURlZXBTbGVlcElSUShJUlFuX1R5cGUgaW50ZXJydXB0KQoreworICAgIHVpbnQzMl90IGluZGV4ID0gMDsKKyAgICB1aW50MzJfdCBpbnROdW1iZXIgPSAodWludDMyX3QpaW50ZXJydXB0OworICAgIHdoaWxlIChpbnROdW1iZXIgPj0gMzJ1KQorICAgIHsKKyAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgaW50TnVtYmVyIC09IDMydTsKKyAgICB9CisKKyAgICBEaXNhYmxlSVJRKGludGVycnVwdCk7IC8qIGFsc28gZGlzYWJsZSBpbnRlcnJ1cHQgYXQgTlZJQyAqLworICAgIFNZU0NPTi0+U1RBUlRFUkNMUltpbmRleF0gPSAxdSA8PCBpbnROdW1iZXI7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU09DX1NZU0NPTl9DT1VOVCAqLworI2Vsc2UKK3ZvaWQgRW5hYmxlRGVlcFNsZWVwSVJRKElSUW5fVHlwZSBpbnRlcnJ1cHQpCit7CisgICAgdWludDMyX3QgaW5kZXggPSAwOworICAgIHVpbnQzMl90IGludE51bWJlciA9ICh1aW50MzJfdClpbnRlcnJ1cHQ7CisgICAgd2hpbGUgKGludE51bWJlciA+PSAzMnUpCisgICAgeworICAgICAgICBpbmRleCsrOworICAgICAgICBpbnROdW1iZXIgLT0gMzJ1OworICAgIH0KKworICAgIC8qICAgU1lTQ09OLT5TVEFSVEVSU0VUW2luZGV4XSA9IDF1IDw8IGludE51bWJlcjsgKi8KKyAgICBFbmFibGVJUlEoaW50ZXJydXB0KTsgLyogYWxzbyBlbmFibGUgaW50ZXJydXB0IGF0IE5WSUMgKi8KK30KKwordm9pZCBEaXNhYmxlRGVlcFNsZWVwSVJRKElSUW5fVHlwZSBpbnRlcnJ1cHQpCit7CisgICAgdWludDMyX3QgaW5kZXggPSAwOworICAgIHVpbnQzMl90IGludE51bWJlciA9ICh1aW50MzJfdClpbnRlcnJ1cHQ7CisgICAgd2hpbGUgKGludE51bWJlciA+PSAzMnUpCisgICAgeworICAgICAgICBpbmRleCsrOworICAgICAgICBpbnROdW1iZXIgLT0gMzJ1OworICAgIH0KKworICAgIERpc2FibGVJUlEoaW50ZXJydXB0KTsgLyogYWxzbyBkaXNhYmxlIGludGVycnVwdCBhdCBOVklDICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIFNZU0NPTi0+U1RBUlRFUkNMUltpbmRleF0gPSAxdSA8PCBpbnROdW1iZXI7ICovCit9CisjZW5kaWYgLypDUFVfUU45MDhYICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jb21tb24uaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMGMwOTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jb21tb24uaApAQCAtMCwwICsxLDM0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlNMX0NPTU1PTl9IXworI2RlZmluZSBfRlNMX0NPTU1PTl9IXworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChfX0lDQ0FSTV9fKQorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGtzZGtfY29tbW9uCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBicmllZiBDb25zdHJ1Y3QgYSBzdGF0dXMgY29kZSB2YWx1ZSBmcm9tIGEgZ3JvdXAgYW5kIGNvZGUgbnVtYmVyLiAqLworI2RlZmluZSBNQUtFX1NUQVRVUyhncm91cCwgY29kZSkgKCgoKGdyb3VwKSoxMDApICsgKGNvZGUpKSkKKworLyohIEBicmllZiBDb25zdHJ1Y3QgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBkcml2ZXJzLiAqLworI2RlZmluZSBNQUtFX1ZFUlNJT04obWFqb3IsIG1pbm9yLCBidWdmaXgpICgoKG1ham9yKSA8PCAxNikgfCAoKG1pbm9yKSA8PCA4KSB8IChidWdmaXgpKQorCisvKiBEZWJ1ZyBjb25zb2xlIHR5cGUgZGVmaW5pdGlvbi4gKi8KKyNkZWZpbmUgREVCVUdfQ09OU09MRV9ERVZJQ0VfVFlQRV9OT05FIDBVICAgICAvKiE8IE5vIGRlYnVnIGNvbnNvbGUuICAgICAgICAgICAgICovCisjZGVmaW5lIERFQlVHX0NPTlNPTEVfREVWSUNFX1RZUEVfVUFSVCAxVSAgICAgLyohPCBEZWJ1ZyBjb25zb2xlIGJhc2Ugb24gVUFSVC4gICAqLworI2RlZmluZSBERUJVR19DT05TT0xFX0RFVklDRV9UWVBFX0xQVUFSVCAyVSAgIC8qITwgRGVidWcgY29uc29sZSBiYXNlIG9uIExQVUFSVC4gKi8KKyNkZWZpbmUgREVCVUdfQ09OU09MRV9ERVZJQ0VfVFlQRV9MUFNDSSAzVSAgICAvKiE8IERlYnVnIGNvbnNvbGUgYmFzZSBvbiBMUFNDSS4gICovCisjZGVmaW5lIERFQlVHX0NPTlNPTEVfREVWSUNFX1RZUEVfVVNCQ0RDIDRVICAgLyohPCBEZWJ1ZyBjb25zb2xlIGJhc2Ugb24gVVNCQ0RDLiAqLworI2RlZmluZSBERUJVR19DT05TT0xFX0RFVklDRV9UWVBFX0ZMRVhDT01NIDVVIC8qITwgRGVidWcgY29uc29sZSBiYXNlIG9uIFVTQkNEQy4gKi8KKyNkZWZpbmUgREVCVUdfQ09OU09MRV9ERVZJQ0VfVFlQRV9JVUFSVCA2VSAgICAvKiE8IERlYnVnIGNvbnNvbGUgYmFzZSBvbiBpLk1YIFVBUlQuICovCisKKy8qISBAYnJpZWYgU3RhdHVzIGdyb3VwIG51bWJlcnMuICovCitlbnVtIF9zdGF0dXNfZ3JvdXBzCit7CisgICAga1N0YXR1c0dyb3VwX0dlbmVyaWMgPSAwLCAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIGdlbmVyaWMgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9GTEFTSCA9IDEsICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBGTEFTSCBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0xQU1BJID0gNCwgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIExQU1BJIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfRkxFWElPX1NQSSA9IDUsICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgRkxFWElPIFNQSSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0RTUEkgPSA2LCAgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIERTUEkgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9GTEVYSU9fVUFSVCA9IDcsICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBGTEVYSU8gVUFSVCBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0ZMRVhJT19JMkMgPSA4LCAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEZMRVhJTyBJMkMgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9MUEkyQyA9IDksICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBMUEkyQyBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX1VBUlQgPSAxMCwgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIFVBUlQgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9JMkMgPSAxMSwgICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBVQVJUIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfTFBTQ0kgPSAxMiwgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgTFBTQ0kgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9MUFVBUlQgPSAxMywgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBMUFVBUlQgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9TUEkgPSAxNCwgICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBTUEkgc3RhdHVzIGNvZGUuKi8KKyAgICBrU3RhdHVzR3JvdXBfWFJEQyA9IDE1LCAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgWFJEQyBzdGF0dXMgY29kZS4qLworICAgIGtTdGF0dXNHcm91cF9TRU1BNDIgPSAxNiwgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBTRU1BNDIgc3RhdHVzIGNvZGUuKi8KKyAgICBrU3RhdHVzR3JvdXBfU0RIQyA9IDE3LCAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgU0RIQyBzdGF0dXMgY29kZSAqLworICAgIGtTdGF0dXNHcm91cF9TRE1NQyA9IDE4LCAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBTRE1NQyBzdGF0dXMgY29kZSAqLworICAgIGtTdGF0dXNHcm91cF9TQUkgPSAxOSwgICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBTQUkgc3RhdHVzIGNvZGUgKi8KKyAgICBrU3RhdHVzR3JvdXBfTUNHID0gMjAsICAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgTUNHIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfU0NHID0gMjEsICAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgU0NHIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfU0RTUEkgPSAyMiwgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgU0RTUEkgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9GTEVYSU9fSTJTID0gMjMsICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBGTEVYSU8gSTJTIHN0YXR1cyBjb2RlcyAqLworICAgIGtTdGF0dXNHcm91cF9GTEVYSU9fTUNVTENEID0gMjQsICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBGTEVYSU8gTENEIHN0YXR1cyBjb2RlcyAqLworICAgIGtTdGF0dXNHcm91cF9GTEFTSElBUCA9IDI1LCAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBGTEFTSElBUCBzdGF0dXMgY29kZXMgKi8KKyAgICBrU3RhdHVzR3JvdXBfRkxFWENPTU1fSTJDID0gMjYsICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgRkxFWENPTU0gSTJDIHN0YXR1cyBjb2RlcyAqLworICAgIGtTdGF0dXNHcm91cF9JMlMgPSAyNywgICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBJMlMgc3RhdHVzIGNvZGVzICovCisgICAga1N0YXR1c0dyb3VwX0lVQVJUID0gMjgsICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIElVQVJUIHN0YXR1cyBjb2RlcyAqLworICAgIGtTdGF0dXNHcm91cF9TRFJBTUMgPSAzNSwgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBTRFJBTUMgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9QT1dFUiA9IDM5LCAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBQT1dFUiBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0VORVQgPSA0MCwgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEVORVQgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9QSFkgPSA0MSwgICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBQSFkgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9UUkdNVVggPSA0MiwgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBUUkdNVVggc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9TTUFSVENBUkQgPSA0MywgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBTTUFSVENBUkQgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9MTUVNID0gNDQsICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBMTUVNIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfUVNQSSA9IDQ1LCAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgUVNQSSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0RNQSA9IDUwLCAgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIERNQSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0VETUEgPSA1MSwgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEVETUEgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9ETUFNR1IgPSA1MiwgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBETUFNR1Igc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9GTEVYQ0FOID0gNTMsICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBGbGV4Q0FOIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfTFRDID0gNTQsICAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgTFRDIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfRkxFWElPX0NBTUVSQSA9IDU1LCAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgRkxFWElPIENBTUVSQSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0xQQ19TUEkgPSA1NiwgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIExQQ19TUEkgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9MUENfVVNBUlQgPSA1NywgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBMUENfVVNBUlQgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9ETUlDID0gNTgsICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBETUlDIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfU0RJRiA9IDU5LCAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgU0RJRiBzdGF0dXMgY29kZXMuKi8KKyAgICBrU3RhdHVzR3JvdXBfU1BJRkkgPSA2MCwgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgU1BJRkkgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9PVFAgPSA2MSwgICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBPVFAgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9NQ0FOID0gNjIsICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBNQ0FOIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfQ0FBTSA9IDYzLCAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgQ0FBTSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0VDU1BJID0gNjQsICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEVDU1BJIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfVVNESEMgPSA2NSwgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgVVNESEMgc3RhdHVzIGNvZGVzLiovCisgICAga1N0YXR1c0dyb3VwX0VTQUkgPSA2OSwgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEVTQUkgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9GTEVYU1BJID0gNzAsICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBGTEVYU1BJIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfTk9USUZJRVIgPSA5OCwgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgTk9USUZJRVIgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9EZWJ1Z0NvbnNvbGUgPSA5OSwgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBkZWJ1ZyBjb25zb2xlIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfQXBwbGljYXRpb25SYW5nZVN0YXJ0ID0gMTAwLCAvKiE8IFN0YXJ0aW5nIG51bWJlciBmb3IgYXBwbGljYXRpb24gZ3JvdXBzLiAqLworfTsKKworLyohIEBicmllZiBHZW5lcmljIHN0YXR1cyByZXR1cm4gY29kZXMuICovCitlbnVtIF9nZW5lcmljX3N0YXR1cworeworICAgIGtTdGF0dXNfU3VjY2VzcyA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9HZW5lcmljLCAwKSwKKyAgICBrU3RhdHVzX0ZhaWwgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfR2VuZXJpYywgMSksCisgICAga1N0YXR1c19SZWFkT25seSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9HZW5lcmljLCAyKSwKKyAgICBrU3RhdHVzX091dE9mUmFuZ2UgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfR2VuZXJpYywgMyksCisgICAga1N0YXR1c19JbnZhbGlkQXJndW1lbnQgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfR2VuZXJpYywgNCksCisgICAga1N0YXR1c19UaW1lb3V0ID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0dlbmVyaWMsIDUpLAorICAgIGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3MgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfR2VuZXJpYywgNiksCit9OworCisvKiEgQGJyaWVmIFR5cGUgdXNlZCBmb3IgYWxsIHN0YXR1cyBhbmQgZXJyb3IgcmV0dXJuIHZhbHVlcy4gKi8KK3R5cGVkZWYgaW50MzJfdCBzdGF0dXNfdDsKKworLyoKKyAqIFRoZSBmc2xfY2xvY2suaCBpcyBpbmNsdWRlZCBoZXJlIGJlY2F1c2UgaXQgbmVlZHMgTUFLRV9WRVJTSU9OL01BS0VfU1RBVFVTL3N0YXR1c190CisgKiBkZWZpbmVkIGluIHByZXZpb3VzIG9mIHRoaXMgZmlsZS4KKyAqLworI2luY2x1ZGUgImZzbF9jbG9jay5oIgorCisvKgorICogQ2hpcCBsZXZlbCBwZXJpcGhlcmFsIHJlc2V0IEFQSSwgZm9yIE1DVXMgdGhhdCBpbXBsZW1lbnQgcGVyaXBoZXJhbCByZXNldCBjb250cm9sIGV4dGVybmFsIHRvIGEgcGVyaXBoZXJhbAorICovCisjaWYgKChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19TWVNDT05fQ09VTlQpICYmIChGU0xfRkVBVFVSRV9TT0NfU1lTQ09OX0NPVU5UID4gMCkpIHx8IFwKKyAgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0FTWU5DX1NZU0NPTl9DT1VOVCkgJiYgKEZTTF9GRUFUVVJFX1NPQ19BU1lOQ19TWVNDT05fQ09VTlQgPiAwKSkpCisjaW5jbHVkZSAiZnNsX3Jlc2V0LmgiCisjZW5kaWYKKworLyohIEBuYW1lIE1pbi9tYXggbWFjcm9zICovCisvKiBAeyAqLworI2lmICFkZWZpbmVkKE1JTikKKyNkZWZpbmUgTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1BWCkKKyNkZWZpbmUgTUFYKGEsIGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisjZW5kaWYKKy8qIEB9ICovCisKKy8qISBAYnJpZWYgQ29tcHV0ZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBhcnJheS4gKi8KKyNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCisKKy8qISBAbmFtZSBVSU5UMTZfTUFYL1VJTlQzMl9NQVggdmFsdWUgKi8KKy8qIEB7ICovCisjaWYgIWRlZmluZWQoVUlOVDE2X01BWCkKKyNkZWZpbmUgVUlOVDE2X01BWCAoKHVpbnQxNl90KS0xKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChVSU5UMzJfTUFYKQorI2RlZmluZSBVSU5UMzJfTUFYICgodWludDMyX3QpLTEpCisjZW5kaWYKKy8qIEB9ICovCisKKy8qISBAbmFtZSBUaW1lciB1dGlsaXRpZXMgKi8KKy8qIEB7ICovCisvKiEgTWFjcm8gdG8gY29udmVydCBhIG1pY3Jvc2Vjb25kIHBlcmlvZCB0byByYXcgY291bnQgdmFsdWUgKi8KKyNkZWZpbmUgVVNFQ19UT19DT1VOVCh1cywgY2xvY2tGcmVxSW5IeikgKHVpbnQ2NF90KSgodWludDY0X3QpdXMgKiBjbG9ja0ZyZXFJbkh6IC8gMTAwMDAwMFUpCisvKiEgTWFjcm8gdG8gY29udmVydCBhIHJhdyBjb3VudCB2YWx1ZSB0byBtaWNyb3NlY29uZCAqLworI2RlZmluZSBDT1VOVF9UT19VU0VDKGNvdW50LCBjbG9ja0ZyZXFJbkh6KSAodWludDY0X3QpKCh1aW50NjRfdCljb3VudCAqIDEwMDAwMDBVIC8gY2xvY2tGcmVxSW5IeikKKworLyohIE1hY3JvIHRvIGNvbnZlcnQgYSBtaWxsaXNlY29uZCBwZXJpb2QgdG8gcmF3IGNvdW50IHZhbHVlICovCisjZGVmaW5lIE1TRUNfVE9fQ09VTlQobXMsIGNsb2NrRnJlcUluSHopICh1aW50NjRfdCkoKHVpbnQ2NF90KW1zICogY2xvY2tGcmVxSW5IeiAvIDEwMDBVKQorLyohIE1hY3JvIHRvIGNvbnZlcnQgYSByYXcgY291bnQgdmFsdWUgdG8gbWlsbGlzZWNvbmQgKi8KKyNkZWZpbmUgQ09VTlRfVE9fTVNFQyhjb3VudCwgY2xvY2tGcmVxSW5IeikgKHVpbnQ2NF90KSgodWludDY0X3QpY291bnQgKiAxMDAwVSAvIGNsb2NrRnJlcUluSHopCisvKiBAfSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQGJyaWVmIEVuYWJsZSBzcGVjaWZpYyBpbnRlcnJ1cHQuCisgKgorICogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgbm90IHJvdXRlZCBmcm9tIGludG11eC4KKyAqCisgKiBAcGFyYW0gaW50ZXJydXB0IFRoZSBJUlEgbnVtYmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRW5hYmxlSVJRKElSUW5fVHlwZSBpbnRlcnJ1cHQpCit7CisgICAgaWYgKE5vdEF2YWlsX0lSUW4gPT0gaW50ZXJydXB0KQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0lOVE1VWF9DT1VOVCkgJiYgKEZTTF9GRUFUVVJFX1NPQ19JTlRNVVhfQ09VTlQgPiAwKQorICAgIGlmIChpbnRlcnJ1cHQgPCBGU0xfRkVBVFVSRV9JTlRNVVhfSVJRX1NUQVJUX0lOREVYKQorI2VuZGlmCisgICAgeworI2lmIGRlZmluZWQoX19HSUNfUFJJT19CSVRTKQorICAgICAgICBHSUNfRW5hYmxlSVJRKGludGVycnVwdCk7CisjZWxzZQorICAgICAgICBOVklDX0VuYWJsZUlSUShpbnRlcnJ1cHQpOworI2VuZGlmCisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBEaXNhYmxlIHNwZWNpZmljIGludGVycnVwdC4KKyAqCisgKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgbm90IHJvdXRlZCBmcm9tIGludG11eC4KKyAqCisgKiBAcGFyYW0gaW50ZXJydXB0IFRoZSBJUlEgbnVtYmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRGlzYWJsZUlSUShJUlFuX1R5cGUgaW50ZXJydXB0KQoreworICAgIGlmIChOb3RBdmFpbF9JUlFuID09IGludGVycnVwdCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19JTlRNVVhfQ09VTlQpICYmIChGU0xfRkVBVFVSRV9TT0NfSU5UTVVYX0NPVU5UID4gMCkKKyAgICBpZiAoaW50ZXJydXB0IDwgRlNMX0ZFQVRVUkVfSU5UTVVYX0lSUV9TVEFSVF9JTkRFWCkKKyNlbmRpZgorICAgIHsKKyNpZiBkZWZpbmVkKF9fR0lDX1BSSU9fQklUUykKKyAgICAgICAgR0lDX0Rpc2FibGVJUlEoaW50ZXJydXB0KTsKKyNlbHNlCisgICAgICAgIE5WSUNfRGlzYWJsZUlSUShpbnRlcnJ1cHQpOworI2VuZGlmCisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBEaXNhYmxlIHRoZSBnbG9iYWwgSVJRCisgKgorICogRGlzYWJsZSB0aGUgZ2xvYmFsIGludGVycnVwdCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHByaW1hc2sgcmVnaXN0ZXIuIFVzZXIgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZWQgdGhlIHByaW1hc2sKKyAqIHJlZ2lzdGVyIGZvciB0aGUgRW5hYmxlR2xvYmFsSVJRKCkuCisgKgorICogQHJldHVybiBDdXJyZW50IHByaW1hc2sgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgRGlzYWJsZUdsb2JhbElSUSh2b2lkKQoreworI2lmIGRlZmluZWQoQ1BTUl9JX01zaykKKyAgICB1aW50MzJfdCBjcHNyID0gX19nZXRfQ1BTUigpICYgQ1BTUl9JX01zazsKKworICAgIF9fZGlzYWJsZV9pcnEoKTsKKworICAgIHJldHVybiBjcHNyOworI2Vsc2UKKyAgICB1aW50MzJfdCByZWdQcmltYXNrID0gX19nZXRfUFJJTUFTSygpOworCisgICAgX19kaXNhYmxlX2lycSgpOworCisgICAgcmV0dXJuIHJlZ1ByaW1hc2s7CisjZW5kaWYKK30KKworLyohCisgKiBAYnJpZWYgRW5hYWJsZSB0aGUgZ2xvYmFsIElSUQorICoKKyAqIFNldCB0aGUgcHJpbWFzayByZWdpc3RlciB3aXRoIHRoZSBwcm92aWRlZCBwcmltYXNrIHZhbHVlIGJ1dCBub3QganVzdCBlbmFibGUgdGhlIHByaW1hc2suIFRoZSBpZGVhIGlzIGZvciB0aGUKKyAqIGNvbnZpbmllbmNlIG9mIGludGVncmF0aW9uIG9mIFJUT1MuIHNvbWUgUlRPUyBnZXQgaXRzIG93biBtYW5hZ2VtZW50IG1lY2hhbmlzbSBvZiBwcmltYXNrLiBVc2VyIGlzIHJlcXVpcmVkIHRvCisgKiB1c2UgdGhlIEVuYWJsZUdsb2JhbElSUSgpIGFuZCBEaXNhYmxlR2xvYmFsSVJRKCkgaW4gcGFpci4KKyAqCisgKiBAcGFyYW0gcHJpbWFzayB2YWx1ZSBvZiBwcmltYXNrIHJlZ2lzdGVyIHRvIGJlIHJlc3RvcmVkLiBUaGUgcHJpbWFzayB2YWx1ZSBpcyBzdXBwb3NlZCB0byBiZSBwcm92aWRlZCBieSB0aGUKKyAqIERpc2FibGVHbG9iYWxJUlEoKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEVuYWJsZUdsb2JhbElSUSh1aW50MzJfdCBwcmltYXNrKQoreworI2lmIGRlZmluZWQoQ1BTUl9JX01zaykKKyAgICBfX3NldF9DUFNSKChfX2dldF9DUFNSKCkgJiB+Q1BTUl9JX01zaykgfCBwcmltYXNrKTsKKyNlbHNlCisgICAgX19zZXRfUFJJTUFTSyhwcmltYXNrKTsKKyNlbmRpZgorfQorCisvKiEKKyAqIEBicmllZiBpbnN0YWxsIElSUSBoYW5kbGVyCisgKgorICogQHBhcmFtIGlycSBJUlEgbnVtYmVyCisgKiBAcGFyYW0gaXJxSGFuZGxlciBJUlEgaGFuZGxlciBhZGRyZXNzCisgKiBAcmV0dXJuIFRoZSBvbGQgSVJRIGhhbmRsZXIgYWRkcmVzcworICovCit1aW50MzJfdCBJbnN0YWxsSVJRSGFuZGxlcihJUlFuX1R5cGUgaXJxLCB1aW50MzJfdCBpcnFIYW5kbGVyKTsKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19TWVNDT05fQ09VTlQpICYmIChGU0xfRkVBVFVSRV9TT0NfU1lTQ09OX0NPVU5UID4gMCkpCisvKiEKKyAqIEBicmllZiBFbmFibGUgc3BlY2lmaWMgaW50ZXJydXB0IGZvciB3YWtlLXVwIGZyb20gZGVlcC1zbGVlcCBtb2RlLgorICoKKyAqIEVuYWJsZSB0aGUgaW50ZXJydXB0IGZvciB3YWtlLXVwIGZyb20gZGVlcCBzbGVlcCBtb2RlLgorICogU29tZSBpbnRlcnJ1cHRzIGFyZSB0eXBpY2FsbHkgdXNlZCBpbiBzbGVlcCBtb2RlIG9ubHkgYW5kIHdpbGwgbm90IG9jY3VyIGR1cmluZworICogZGVlcC1zbGVlcCBtb2RlIGJlY2F1c2UgcmVsZXZhbnQgY2xvY2tzIGFyZSBzdG9wcGVkLiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0byBlbmFibGUKKyAqIHRob3NlIGNsb2NrcyAoc2lnbmlmaWNhbnRseSBpbmNyZWFzaW5nIHBvd2VyIGNvbnN1bXB0aW9uIGluIHRoZSByZWR1Y2VkIHBvd2VyIG1vZGUpLAorICogbWFraW5nIHRoZXNlIHdha2UtdXBzIHBvc3NpYmxlLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gYWxzbyBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgKEVuYWJsZUlSUSgpIGlzIGNhbGxlZCBpbnRlcm5hbGx5KS4KKyAqCisgKiBAcGFyYW0gaW50ZXJydXB0IFRoZSBJUlEgbnVtYmVyLgorICovCit2b2lkIEVuYWJsZURlZXBTbGVlcElSUShJUlFuX1R5cGUgaW50ZXJydXB0KTsKKworLyohCisgKiBAYnJpZWYgRGlzYWJsZSBzcGVjaWZpYyBpbnRlcnJ1cHQgZm9yIHdha2UtdXAgZnJvbSBkZWVwLXNsZWVwIG1vZGUuCisgKgorICogRGlzYWJsZSB0aGUgaW50ZXJydXB0IGZvciB3YWtlLXVwIGZyb20gZGVlcCBzbGVlcCBtb2RlLgorICogU29tZSBpbnRlcnJ1cHRzIGFyZSB0eXBpY2FsbHkgdXNlZCBpbiBzbGVlcCBtb2RlIG9ubHkgYW5kIHdpbGwgbm90IG9jY3VyIGR1cmluZworICogZGVlcC1zbGVlcCBtb2RlIGJlY2F1c2UgcmVsZXZhbnQgY2xvY2tzIGFyZSBzdG9wcGVkLiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0byBlbmFibGUKKyAqIHRob3NlIGNsb2NrcyAoc2lnbmlmaWNhbnRseSBpbmNyZWFzaW5nIHBvd2VyIGNvbnN1bXB0aW9uIGluIHRoZSByZWR1Y2VkIHBvd2VyIG1vZGUpLAorICogbWFraW5nIHRoZXNlIHdha2UtdXBzIHBvc3NpYmxlLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gYWxzbyBkaXNhYmxlcyB0aGUgaW50ZXJydXB0IGluIHRoZSBOVklDIChEaXNhYmxlSVJRKCkgaXMgY2FsbGVkIGludGVybmFsbHkpLgorICoKKyAqIEBwYXJhbSBpbnRlcnJ1cHQgVGhlIElSUSBudW1iZXIuCisgKi8KK3ZvaWQgRGlzYWJsZURlZXBTbGVlcElSUShJUlFuX1R5cGUgaW50ZXJydXB0KTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TT0NfU1lTQ09OX0NPVU5UICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSAqLworCisjZW5kaWYgLyogX0ZTTF9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NvcC5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY29wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4NGRhYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NvcC5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2NvcC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBDT1BfR2V0RGVmYXVsdENvbmZpZyhjb3BfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworICAgIGNvbmZpZy0+ZW5hYmxlV2luZG93TW9kZSA9IGZhbHNlOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQ09QX0hBU19MT05HVElNRV9NT0RFKSAmJiBGU0xfRkVBVFVSRV9DT1BfSEFTX0xPTkdUSU1FX01PREUKKyAgICBjb25maWctPnRpbWVvdXRNb2RlID0ga0NPUF9Mb25nVGltZW91dE1vZGU7CisgICAgY29uZmlnLT5lbmFibGVTdG9wID0gZmFsc2U7CisgICAgY29uZmlnLT5lbmFibGVEZWJ1ZyA9IGZhbHNlOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0NPUF9IQVNfTE9OR1RJTUVfTU9ERSAqLworICAgIGNvbmZpZy0+Y2xvY2tTb3VyY2UgPSBrQ09QX0xwb0Nsb2NrOworICAgIGNvbmZpZy0+dGltZW91dEN5Y2xlcyA9IGtDT1BfMlBvd2VyMTBDeWNsZXNPcjJQb3dlcjE4Q3ljbGVzOworfQorCit2b2lkIENPUF9Jbml0KFNJTV9UeXBlICpiYXNlLCBjb25zdCBjb3BfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworICAgIHVpbnQzMl90IHZhbHVlID0gMFU7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0NPUF9IQVNfTE9OR1RJTUVfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfQ09QX0hBU19MT05HVElNRV9NT0RFCisgICAgdmFsdWUgPSBTSU1fQ09QQ19DT1BXKGNvbmZpZy0+ZW5hYmxlV2luZG93TW9kZSkgfCBTSU1fQ09QQ19DT1BDTEtTKGNvbmZpZy0+dGltZW91dE1vZGUpIHwKKyAgICAgICAgICAgIFNJTV9DT1BDX0NPUFQoY29uZmlnLT50aW1lb3V0Q3ljbGVzKSB8IFNJTV9DT1BDX0NPUFNUUEVOKGNvbmZpZy0+ZW5hYmxlU3RvcCkgfAorICAgICAgICAgICAgU0lNX0NPUENfQ09QREJHRU4oY29uZmlnLT5lbmFibGVEZWJ1ZykgfCBTSU1fQ09QQ19DT1BDTEtTRUwoY29uZmlnLT5jbG9ja1NvdXJjZSk7CisjZWxzZQorICAgIHZhbHVlID0gU0lNX0NPUENfQ09QVyhjb25maWctPmVuYWJsZVdpbmRvd01vZGUpIHwgU0lNX0NPUENfQ09QQ0xLUyhjb25maWctPmNsb2NrU291cmNlKSB8CisgICAgICAgICAgICBTSU1fQ09QQ19DT1BUKGNvbmZpZy0+dGltZW91dEN5Y2xlcyk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQ09QX0hBU19MT05HVElNRV9NT0RFICovCisgICAgYmFzZS0+Q09QQyA9IHZhbHVlOworfQorCit2b2lkIENPUF9SZWZyZXNoKFNJTV9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IHByaW1hc2tWYWx1ZSA9IDBVOworCisgICAgLyogRGlzYWJsZSB0aGUgZ2xvYmFsIGludGVycnVwdCB0byBwcm90ZWN0IHJlZnJlc2ggc2VxdWVuY2UgKi8KKyAgICBwcmltYXNrVmFsdWUgPSBEaXNhYmxlR2xvYmFsSVJRKCk7CisgICAgYmFzZS0+U1JWQ09QID0gQ09QX0ZJUlNUX0JZVEVfT0ZfUkVGUkVTSDsKKyAgICBiYXNlLT5TUlZDT1AgPSBDT1BfU0VDT05EX0JZVEVfT0ZfUkVGUkVTSDsKKyAgICBFbmFibGVHbG9iYWxJUlEocHJpbWFza1ZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NvcC5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY29wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE2ZmIyMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NvcC5oCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9DT1BfSF8KKyNkZWZpbmUgX0ZTTF9DT1BfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBjb3AKKyAqIEB7CisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBDT1AgZHJpdmVyIHZlcnNpb24gMi4wLjAuICovCisjZGVmaW5lIEZTTF9DT1BfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAwLCAwKSkKKy8qQH0qLworCisvKiEgQG5hbWUgQ09QIHJlZnJlc2ggc2VxdWVuY2UuICovCisvKkB7Ki8KKyNkZWZpbmUgQ09QX0ZJUlNUX0JZVEVfT0ZfUkVGUkVTSCAoMHg1NVUpICAvKiE8IEZpcnN0IGJ5dGUgb2YgcmVmcmVzaCBzZXF1ZW5jZSAqLworI2RlZmluZSBDT1BfU0VDT05EX0JZVEVfT0ZfUkVGUkVTSCAoMHhBQVUpIC8qITwgU2Vjb25kIGJ5dGUgb2YgcmVmcmVzaCBzZXF1ZW5jZSAqLworLypAfSovCisKKy8qISBAYnJpZWYgQ09QIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24uICovCit0eXBlZGVmIGVudW0gX2NvcF9jbG9ja19zb3VyY2UKK3sKKyAgICBrQ09QX0xwb0Nsb2NrID0gMFUsIC8qITwgQ09QIGNsb2NrIHNvdXJjZWQgZnJvbSBMUE8gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0NPUF9IQVNfTU9SRV9DTEtTUkMpICYmIEZTTF9GRUFUVVJFX0NPUF9IQVNfTU9SRV9DTEtTUkMKKyAgICBrQ09QX01jZ0lyQ2xvY2sgPSAxVSwgLyohPCBDT1AgY2xvY2sgc291cmNlZCBmcm9tIE1DR0lSQ0xLICovCisgICAga0NPUF9Pc2NFckNsb2NrID0gMlUsIC8qITwgQ09QIGNsb2NrIHNvdXJjZWQgZnJvbSBPU0NFUkNMSyAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9DT1BfSEFTX01PUkVfQ0xLU1JDICovCisgICAga0NPUF9CdXNDbG9jayA9IDNVLCAgIC8qITwgQ09QIGNsb2NrIHNvdXJjZWQgZnJvbSBCdXMgY2xvY2sgKi8KK30gY29wX2Nsb2NrX3NvdXJjZV90OworCisvKiEgQGJyaWVmIERlZmluZSB0aGUgQ09QIHRpbWVvdXQgY3ljbGVzLiAqLwordHlwZWRlZiBlbnVtIF9jb3BfdGltZW91dF9jeWNsZXMKK3sKKyAgICBrQ09QXzJQb3dlcjVDeWNsZXNPcjJQb3dlcjEzQ3ljbGVzID0gMVUsICAvKiE8IDJeNSBvciAyXjEzIGNsb2NrIGN5Y2xlcyAqLworICAgIGtDT1BfMlBvd2VyOEN5Y2xlc09yMlBvd2VyMTZDeWNsZXMgPSAyVSwgIC8qITwgMl44IG9yIDJeMTYgY2xvY2sgY3ljbGVzICovCisgICAga0NPUF8yUG93ZXIxMEN5Y2xlc09yMlBvd2VyMThDeWNsZXMgPSAzVSwgLyohPCAyXjEwIG9yIDJeMTggY2xvY2sgY3ljbGVzICovCit9IGNvcF90aW1lb3V0X2N5Y2xlc190OworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9DT1BfSEFTX0xPTkdUSU1FX01PREUpICYmIEZTTF9GRUFUVVJFX0NPUF9IQVNfTE9OR1RJTUVfTU9ERQorLyohIEBicmVpZiBEZWZpbmUgdGhlIENPUCB0aW1lb3V0IG1vZGUuICovCit0eXBlZGVmIGVudW0gX2NvcF90aW1lb3V0X21vZGUKK3sKKyAgICBrQ09QX1Nob3J0VGltZW91dE1vZGUgPSAwVSwgLyohPCBDT1Agc2VsZWN0cyBsb25nIHRpbWVvdXQgKi8KKyAgICBrQ09QX0xvbmdUaW1lb3V0TW9kZSA9IDFVLCAgLyohPCBDT1Agc2VsZWN0cyBzaG9ydCB0aW1lb3V0ICovCit9IGNvcF90aW1lb3V0X21vZGVfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9DT1BfSEFTX0xPTkdUSU1FX01PREUgKi8KKworLyohIEBicmllZiBEZXNjcmliZXMgQ09QIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2NvcF9jb25maWcKK3sKKyAgICBib29sIGVuYWJsZVdpbmRvd01vZGU7IC8qITwgQ09QIHJ1biBtb2RlOiB3aW5kb3cgbW9kZSBvciBub3JtYWwgbW9kZSAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQ09QX0hBU19MT05HVElNRV9NT0RFKSAmJiBGU0xfRkVBVFVSRV9DT1BfSEFTX0xPTkdUSU1FX01PREUKKyAgICBjb3BfdGltZW91dF9tb2RlX3QgdGltZW91dE1vZGU7ICAgICAvKiE8IENPUCB0aW1lb3V0IG1vZGU6IGxvbmcgdGltZW91dCBvciBzaG9ydCB0aW1lb3V0ICovCisgICAgYm9vbCBlbmFibGVTdG9wOyAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBDT1AgaW4gU1RPUCBtb2RlICovCisgICAgYm9vbCBlbmFibGVEZWJ1ZzsgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBDT1AgaW4gREVCVUcgbW9kZSAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0NPUF9IQVNfTE9OR1RJTUVfTU9ERSAqLworICAgIGNvcF9jbG9ja19zb3VyY2VfdCBjbG9ja1NvdXJjZTsgICAgIC8qITwgU2V0IENPUCBjbG9jayBzb3VyY2UgKi8KKyAgICBjb3BfdGltZW91dF9jeWNsZXNfdCB0aW1lb3V0Q3ljbGVzOyAvKiE8IFNldCBDT1AgdGltZW91dCB2YWx1ZSAqLworfSBjb3BfY29uZmlnX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzKi8KKworLyohCisgKiBAbmFtZSBDT1AgRnVuY3Rpb25hbCBPcGVyYXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIENPUCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBDT1AgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgdG8gZGVmYXVsdCB2YWx1ZXMuIFRoZSBkZWZhdWx0CisgKiB2YWx1ZXMgYXJlOgorICogQGNvZGUKKyAqICAgY29wQ29uZmlnLT5lbmFibGVXaW5kb3dNb2RlID0gZmFsc2U7CisgKiAgIGNvcENvbmZpZy0+dGltZW91dE1vZGUgPSBrQ09QX0xvbmdUaW1lb3V0TW9kZTsKKyAqICAgY29wQ29uZmlnLT5lbmFibGVTdG9wID0gZmFsc2U7CisgKiAgIGNvcENvbmZpZy0+ZW5hYmxlRGVidWcgPSBmYWxzZTsKKyAqICAgY29wQ29uZmlnLT5jbG9ja1NvdXJjZSA9IGtDT1BfTHBvQ2xvY2s7CisgKiAgIGNvcENvbmZpZy0+dGltZW91dEN5Y2xlcyA9IGtDT1BfMlBvd2VyMTBDeWNsZXNPcjJQb3dlcjE4Q3ljbGVzOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIENPUCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqIEBzZWUgY29wX2NvbmZpZ190CisgKi8KK3ZvaWQgQ09QX0dldERlZmF1bHRDb25maWcoY29wX2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgQ09QIG1vZHVsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIENPUC4gQWZ0ZXIgaXQgaXMgY2FsbGVkLCB0aGUgQ09QCisgKiBzdGFydHMgcnVubmluZyBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24uCisgKiBCZWNhdXNlIGFsbCBDT1AgY29udHJvbCByZWdpc3RlcnMgYXJlIHdyaXRlLW9uY2Ugb25seSwgdGhlIENPUF9Jbml0IGZ1bmN0aW9uCisgKiBhbmQgdGhlIENPUF9EaXNhYmxlIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgb25seSBvbmNlLiBBIHNlY29uZCBjYWxsIGhhcyBubyBlZmZlY3QuCisgKgorICogRXhhbXBsZToKKyAqIEBjb2RlCisgKiAgY29wX2NvbmZpZ190IGNvbmZpZzsKKyAqICBDT1BfR2V0RGVmYXVsdENvbmZpZygmY29uZmlnKTsKKyAqICBjb25maWcudGltZW91dEN5Y2xlcyA9IGtDT1BfMlBvd2VyOEN5Y2xlc09yMlBvd2VyMTZDeWNsZXM7CisgKiAgQ09QX0luaXQoc2ltX2Jhc2UsJmNvbmZpZyk7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlICAgU0lNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbiBvZiBDT1AuCisgKi8KK3ZvaWQgQ09QX0luaXQoU0lNX1R5cGUgKmJhc2UsIGNvbnN0IGNvcF9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgRGUtaW5pdGlhbGl6ZXMgdGhlIENPUCBtb2R1bGUuCisgKiBUaGlzIGRlZGljYXRlZCBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQuIEluc3RlYWQsIHRoZSBDT1BfRGlzYWJsZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHRoZSBDT1AuCisgKi8KKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgdGhlIENPUCBtb2R1bGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgQ09QIFdhdGNoZG9nLgorICogTm90ZTogVGhlIENPUCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGlzIGEgd3JpdGUtb25jZSBhZnRlciByZXNldC4KKyAqIFRvIGRpc2FibGUgdGhlIENPUCBXYXRjaGRvZywgY2FsbCB0aGlzIGZ1bmN0aW9uIGZpcnN0LgorICoKKyAqIEBwYXJhbSBiYXNlICBTSU0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDT1BfRGlzYWJsZShTSU1fVHlwZSAqYmFzZSkKK3sKKyAgICBiYXNlLT5DT1BDICY9IH5TSU1fQ09QQ19DT1BUX01BU0s7Cit9CisKKy8qIQorICogQGJyaWVmIFJlZnJlc2hlcyB0aGUgQ09QIHRpbWVyCisgKgorICogVGhpcyBmdW5jdGlvbiBmZWVkcyB0aGUgQ09QLgorICoKKyAqIEBwYXJhbSBiYXNlICBTSU0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3ZvaWQgQ09QX1JlZnJlc2goU0lNX1R5cGUgKmJhc2UpOworCisvKkB9Ki8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfQ09QX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kYWMuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMTNkNjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kYWMuYwpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfZGFjLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYnJpZWYgR2V0IGluc3RhbmNlIG51bWJlciBmb3IgREFDIG1vZHVsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLworc3RhdGljIHVpbnQzMl90IERBQ19HZXRJbnN0YW5jZShEQUNfVHlwZSAqYmFzZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIERBQyBiYXNlcyBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBEQUNfVHlwZSAqY29uc3Qgc19kYWNCYXNlc1tdID0gREFDX0JBU0VfUFRSUzsKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIERBQyBjbG9ja3MgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgY29uc3QgY2xvY2tfaXBfbmFtZV90IHNfZGFjQ2xvY2tzW10gPSBEQUNfQ0xPQ0tTOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdWludDMyX3QgREFDX0dldEluc3RhbmNlKERBQ19UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IGluc3RhbmNlOworCisgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW5kZXggZnJvbSBiYXNlIGFkZHJlc3MgbWFwcGluZ3MuICovCisgICAgZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2RhY0Jhc2VzKTsgaW5zdGFuY2UrKykKKyAgICB7CisgICAgICAgIGlmIChzX2RhY0Jhc2VzW2luc3RhbmNlXSA9PSBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydChpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19kYWNCYXNlcykpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIERBQ19Jbml0KERBQ19UeXBlICpiYXNlLCBjb25zdCBkYWNfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoTlVMTCAhPSBjb25maWcpOworCisgICAgdWludDhfdCB0bXA4OworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIEVuYWJsZSB0aGUgY2xvY2suICovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19kYWNDbG9ja3NbREFDX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKyAgICAvKiBDb25maWd1cmUuICovCisgICAgLyogREFDeF9DMC4gKi8KKyAgICB0bXA4ID0gYmFzZS0+QzAgJiB+KERBQ19DMF9EQUNSRlNfTUFTSyB8IERBQ19DMF9MUEVOX01BU0spOworICAgIGlmIChrREFDX1JlZmVyZW5jZVZvbHRhZ2VTb3VyY2VWcmVmMiA9PSBjb25maWctPnJlZmVyZW5jZVZvbHRhZ2VTb3VyY2UpCisgICAgeworICAgICAgICB0bXA4IHw9IERBQ19DMF9EQUNSRlNfTUFTSzsKKyAgICB9CisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlTG93UG93ZXJNb2RlKQorICAgIHsKKyAgICAgICAgdG1wOCB8PSBEQUNfQzBfTFBFTl9NQVNLOworICAgIH0KKyAgICBiYXNlLT5DMCA9IHRtcDg7CisKKyAgICAvKiBEQUNfRW5hYmxlKGJhc2UsIHRydWUpOyAqLworICAgIC8qIFRpcDogVGhlIERBQyBvdXRwdXQgY2FuIGJlIGVuYWJsZWQgdGlsbCB0aGVuIGFmdGVyIHVzZXIgc2V0cyB0aGVpciBvd24gYXZhaWxhYmxlIGRhdGEgaW4gYXBwbGljYXRpb24uICovCit9CisKK3ZvaWQgREFDX0RlaW5pdChEQUNfVHlwZSAqYmFzZSkKK3sKKyAgICBEQUNfRW5hYmxlKGJhc2UsIGZhbHNlKTsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBEaXNhYmxlIHRoZSBjbG9jay4gKi8KKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soc19kYWNDbG9ja3NbREFDX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCit9CisKK3ZvaWQgREFDX0dldERlZmF1bHRDb25maWcoZGFjX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KE5VTEwgIT0gY29uZmlnKTsKKworICAgIGNvbmZpZy0+cmVmZXJlbmNlVm9sdGFnZVNvdXJjZSA9IGtEQUNfUmVmZXJlbmNlVm9sdGFnZVNvdXJjZVZyZWYyOworICAgIGNvbmZpZy0+ZW5hYmxlTG93UG93ZXJNb2RlID0gZmFsc2U7Cit9CisKK3ZvaWQgREFDX1NldEJ1ZmZlckNvbmZpZyhEQUNfVHlwZSAqYmFzZSwgY29uc3QgZGFjX2J1ZmZlcl9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChOVUxMICE9IGNvbmZpZyk7CisKKyAgICB1aW50OF90IHRtcDg7CisKKyAgICAvKiBEQUN4X0MwLiAqLworICAgIHRtcDggPSBiYXNlLT5DMCAmIH4oREFDX0MwX0RBQ1RSR1NFTF9NQVNLKTsKKyAgICBpZiAoa0RBQ19CdWZmZXJUcmlnZ2VyQnlTb2Z0d2FyZU1vZGUgPT0gY29uZmlnLT50cmlnZ2VyTW9kZSkKKyAgICB7CisgICAgICAgIHRtcDggfD0gREFDX0MwX0RBQ1RSR1NFTF9NQVNLOworICAgIH0KKyAgICBiYXNlLT5DMCA9IHRtcDg7CisKKyAgICAvKiBEQUN4X0MxLiAqLworICAgIHRtcDggPSBiYXNlLT5DMSAmCisgICAgICAgICAgIH4oCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19TRUxFQ1RJT04pICYmIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX1NFTEVDVElPTgorICAgICAgICAgICAgICAgREFDX0MxX0RBQ0JGV01fTUFTSyB8CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfU0VMRUNUSU9OICovCisgICAgICAgICAgICAgICBEQUNfQzFfREFDQkZNRF9NQVNLKTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX1NFTEVDVElPTikgJiYgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfU0VMRUNUSU9OCisgICAgdG1wOCB8PSBEQUNfQzFfREFDQkZXTShjb25maWctPndhdGVybWFyayk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfU0VMRUNUSU9OICovCisgICAgdG1wOCB8PSBEQUNfQzFfREFDQkZNRChjb25maWctPndvcmtNb2RlKTsKKyAgICBiYXNlLT5DMSA9IHRtcDg7CisKKyAgICAvKiBEQUN4X0MyLiAqLworICAgIHRtcDggPSBiYXNlLT5DMiAmIH5EQUNfQzJfREFDQkZVUF9NQVNLOworICAgIHRtcDggfD0gREFDX0MyX0RBQ0JGVVAoY29uZmlnLT51cHBlckxpbWl0KTsKKyAgICBiYXNlLT5DMiA9IHRtcDg7Cit9CisKK3ZvaWQgREFDX0dldERlZmF1bHRCdWZmZXJDb25maWcoZGFjX2J1ZmZlcl9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChOVUxMICE9IGNvbmZpZyk7CisKKyAgICBjb25maWctPnRyaWdnZXJNb2RlID0ga0RBQ19CdWZmZXJUcmlnZ2VyQnlTb2Z0d2FyZU1vZGU7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19TRUxFQ1RJT04pICYmIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX1NFTEVDVElPTgorICAgIGNvbmZpZy0+d2F0ZXJtYXJrID0ga0RBQ19CdWZmZXJXYXRlcm1hcmsxV29yZDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19TRUxFQ1RJT04gKi8KKyAgICBjb25maWctPndvcmtNb2RlID0ga0RBQ19CdWZmZXJXb3JrQXNOb3JtYWxNb2RlOworICAgIGNvbmZpZy0+dXBwZXJMaW1pdCA9IERBQ19EQVRMX0NPVU5UIC0gMVU7Cit9CisKK3ZvaWQgREFDX1NldEJ1ZmZlclZhbHVlKERBQ19UeXBlICpiYXNlLCB1aW50OF90IGluZGV4LCB1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICBhc3NlcnQoaW5kZXggPCBEQUNfREFUTF9DT1VOVCk7CisKKyAgICBiYXNlLT5EQVRbaW5kZXhdLkRBVEwgPSAodWludDhfdCkoMHhGRlUgJiB2YWx1ZSk7ICAgICAgICAgLyogTG93IDgtYml0LiAqLworICAgIGJhc2UtPkRBVFtpbmRleF0uREFUSCA9ICh1aW50OF90KSgoMHhGMDBVICYgdmFsdWUpID4+IDgpOyAvKiBIaWdoIDQtYml0LiAqLworfQorCit2b2lkIERBQ19TZXRCdWZmZXJSZWFkUG9pbnRlcihEQUNfVHlwZSAqYmFzZSwgdWludDhfdCBpbmRleCkKK3sKKyAgICBhc3NlcnQoaW5kZXggPCBEQUNfREFUTF9DT1VOVCk7CisKKyAgICB1aW50OF90IHRtcDggPSBiYXNlLT5DMiAmIH5EQUNfQzJfREFDQkZSUF9NQVNLOworCisgICAgdG1wOCB8PSBEQUNfQzJfREFDQkZSUChpbmRleCk7CisgICAgYmFzZS0+QzIgPSB0bXA4OworfQorCit2b2lkIERBQ19FbmFibGVCdWZmZXJJbnRlcnJ1cHRzKERBQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIG1hc2sgJj0gKAorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19ERVRFQ1RJT04KKyAgICAgICAgREFDX0MwX0RBQ0JXSUVOX01BU0sgfAorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTiAqLworICAgICAgICBEQUNfQzBfREFDQlRJRU5fTUFTSyB8IERBQ19DMF9EQUNCQklFTl9NQVNLKTsKKyAgICBiYXNlLT5DMCB8PSAoKHVpbnQ4X3QpbWFzayk7IC8qIFdyaXRlIDEgdG8gZW5hYmxlLiAqLworfQorCit2b2lkIERBQ19EaXNhYmxlQnVmZmVySW50ZXJydXB0cyhEQUNfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBtYXNrICY9ICgKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTikgJiYgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OCisgICAgICAgIERBQ19DMF9EQUNCV0lFTl9NQVNLIHwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19ERVRFQ1RJT04gKi8KKyAgICAgICAgREFDX0MwX0RBQ0JUSUVOX01BU0sgfCBEQUNfQzBfREFDQkJJRU5fTUFTSyk7CisgICAgYmFzZS0+QzAgJj0gKHVpbnQ4X3QpKH4oKHVpbnQ4X3QpbWFzaykpOyAvKiBXcml0ZSAwIHRvIGRpc2FibGUuICovCit9CisKK3VpbnQzMl90IERBQ19HZXRCdWZmZXJTdGF0dXNGbGFncyhEQUNfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90KShiYXNlLT5TUiAmICgKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTikgJiYgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX1NSX0RBQ0JGV01GX01BU0sgfAorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBQ19TUl9EQUNCRlJQVEZfTUFTSyB8IERBQ19TUl9EQUNCRlJQQkZfTUFTSykpOworfQorCit2b2lkIERBQ19DbGVhckJ1ZmZlclN0YXR1c0ZsYWdzKERBQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIG1hc2sgJj0gKAorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19ERVRFQ1RJT04KKyAgICAgICAgREFDX1NSX0RBQ0JGV01GX01BU0sgfAorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTiAqLworICAgICAgICBEQUNfU1JfREFDQkZSUFRGX01BU0sgfCBEQUNfU1JfREFDQkZSUEJGX01BU0spOworICAgIGJhc2UtPlNSICY9ICh1aW50OF90KSh+KCh1aW50OF90KW1hc2spKTsgLyogV3JpdGUgMCB0byBjbGVhciBmbGFncy4gKi8KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RhYy5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZGFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxZmViZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RhYy5oCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlNMX0RBQ19IXworI2RlZmluZSBfRlNMX0RBQ19IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGRhYworICogQHsKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgREFDIGRyaXZlciB2ZXJzaW9uIDIuMC4xLiAqLworI2RlZmluZSBGU0xfREFDX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMSkpCisvKkB9Ki8KKworLyohCisgKiBAYnJpZWYgREFDIGJ1ZmZlciBmbGFncy4KKyAqLworZW51bSBfZGFjX2J1ZmZlcl9zdGF0dXNfZmxhZ3MKK3sKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTikgJiYgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OCisgICAga0RBQ19CdWZmZXJXYXRlcm1hcmtGbGFnID0gREFDX1NSX0RBQ0JGV01GX01BU0ssICAgICAgICAgICAgICAgICAgLyohPCBEQUMgQnVmZmVyIFdhdGVybWFyayBGbGFnLiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTiAqLworICAgIGtEQUNfQnVmZmVyUmVhZFBvaW50ZXJUb3BQb3NpdGlvbkZsYWcgPSBEQUNfU1JfREFDQkZSUFRGX01BU0ssICAgIC8qITwgREFDIEJ1ZmZlciBSZWFkIFBvaW50ZXIgVG9wIFBvc2l0aW9uIEZsYWcuICovCisgICAga0RBQ19CdWZmZXJSZWFkUG9pbnRlckJvdHRvbVBvc2l0aW9uRmxhZyA9IERBQ19TUl9EQUNCRlJQQkZfTUFTSywgLyohPCBEQUMgQnVmZmVyIFJlYWQgUG9pbnRlciBCb3R0b20gUG9zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWcuICovCit9OworCisvKiEKKyAqIEBicmllZiBEQUMgYnVmZmVyIGludGVycnVwdHMuCisgKi8KK2VudW0gX2RhY19idWZmZXJfaW50ZXJydXB0X2VuYWJsZQoreworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19ERVRFQ1RJT04KKyAgICBrREFDX0J1ZmZlcldhdGVybWFya0ludGVycnVwdEVuYWJsZSA9IERBQ19DMF9EQUNCV0lFTl9NQVNLLCAgICAgICAgIC8qITwgREFDIEJ1ZmZlciBXYXRlcm1hcmsgSW50ZXJydXB0IEVuYWJsZS4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTiAqLworICAgIGtEQUNfQnVmZmVyUmVhZFBvaW50ZXJUb3BJbnRlcnJ1cHRFbmFibGUgPSBEQUNfQzBfREFDQlRJRU5fTUFTSywgICAgLyohPCBEQUMgQnVmZmVyIFJlYWQgUG9pbnRlciBUb3AgRmxhZyBJbnRlcnJ1cHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlLiAqLworICAgIGtEQUNfQnVmZmVyUmVhZFBvaW50ZXJCb3R0b21JbnRlcnJ1cHRFbmFibGUgPSBEQUNfQzBfREFDQkJJRU5fTUFTSywgLyohPCBEQUMgQnVmZmVyIFJlYWQgUG9pbnRlciBCb3R0b20gRmxhZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgRW5hYmxlICovCit9OworCisvKiEKKyAqIEBicmllZiBEQUMgcmVmZXJlbmNlIHZvbHRhZ2Ugc291cmNlLgorICovCit0eXBlZGVmIGVudW0gX2RhY19yZWZlcmVuY2Vfdm9sdGFnZV9zb3VyY2UKK3sKKyAgICBrREFDX1JlZmVyZW5jZVZvbHRhZ2VTb3VyY2VWcmVmMSA9IDBVLCAvKiE8IFRoZSBEQUMgc2VsZWN0cyBEQUNSRUZfMSBhcyB0aGUgcmVmZXJlbmNlIHZvbHRhZ2UuICovCisgICAga0RBQ19SZWZlcmVuY2VWb2x0YWdlU291cmNlVnJlZjIgPSAxVSwgLyohPCBUaGUgREFDIHNlbGVjdHMgREFDUkVGXzIgYXMgdGhlIHJlZmVyZW5jZSB2b2x0YWdlLiAqLworfSBkYWNfcmVmZXJlbmNlX3ZvbHRhZ2Vfc291cmNlX3Q7CisKKy8qIQorICogQGJyaWVmIERBQyBidWZmZXIgdHJpZ2dlciBtb2RlLgorICovCit0eXBlZGVmIGVudW0gX2RhY19idWZmZXJfdHJpZ2dlcl9tb2RlCit7CisgICAga0RBQ19CdWZmZXJUcmlnZ2VyQnlIYXJkd2FyZU1vZGUgPSAwVSwgLyohPCBUaGUgREFDIGhhcmR3YXJlIHRyaWdnZXIgaXMgc2VsZWN0ZWQuICovCisgICAga0RBQ19CdWZmZXJUcmlnZ2VyQnlTb2Z0d2FyZU1vZGUgPSAxVSwgLyohPCBUaGUgREFDIHNvZnR3YXJlIHRyaWdnZXIgaXMgc2VsZWN0ZWQuICovCit9IGRhY19idWZmZXJfdHJpZ2dlcl9tb2RlX3Q7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX1NFTEVDVElPTikgJiYgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfU0VMRUNUSU9OCisvKiEKKyAqIEBicmllZiBEQUMgYnVmZmVyIHdhdGVybWFyay4KKyAqLwordHlwZWRlZiBlbnVtIF9kYWNfYnVmZmVyX3dhdGVybWFyaworeworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfMV9XT1JEKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS18xX1dPUkQKKyAgICBrREFDX0J1ZmZlcldhdGVybWFyazFXb3JkID0gMFUsIC8qITwgMSB3b3JkICBhd2F5IGZyb20gdGhlIHVwcGVyIGxpbWl0LiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfMV9XT1JEICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS18yX1dPUkRTKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS18yX1dPUkRTCisgICAga0RBQ19CdWZmZXJXYXRlcm1hcmsyV29yZCA9IDFVLCAvKiE8IDIgd29yZHMgYXdheSBmcm9tIHRoZSB1cHBlciBsaW1pdC4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLXzJfV09SRFMgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLXzNfV09SRFMpICYmIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLXzNfV09SRFMKKyAgICBrREFDX0J1ZmZlcldhdGVybWFyazNXb3JkID0gMlUsIC8qITwgMyB3b3JkcyBhd2F5IGZyb20gdGhlIHVwcGVyIGxpbWl0LiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfM19XT1JEUyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfNF9XT1JEUykgJiYgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfNF9XT1JEUworICAgIGtEQUNfQnVmZmVyV2F0ZXJtYXJrNFdvcmQgPSAzVSwgLyohPCA0IHdvcmRzIGF3YXkgZnJvbSB0aGUgdXBwZXIgbGltaXQuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS180X1dPUkRTICovCit9IGRhY19idWZmZXJfd2F0ZXJtYXJrX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfU0VMRUNUSU9OICovCisKKy8qIQorICogQGJyaWVmIERBQyBidWZmZXIgd29yayBtb2RlLgorICovCit0eXBlZGVmIGVudW0gX2RhY19idWZmZXJfd29ya19tb2RlCit7CisgICAga0RBQ19CdWZmZXJXb3JrQXNOb3JtYWxNb2RlID0gMFUsIC8qITwgTm9ybWFsIG1vZGUuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9EQUNfSEFTX0JVRkZFUl9TV0lOR19NT0RFKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX0JVRkZFUl9TV0lOR19NT0RFCisgICAga0RBQ19CdWZmZXJXb3JrQXNTd2luZ01vZGUsICAgICAgIC8qITwgU3dpbmcgbW9kZS4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19CVUZGRVJfU1dJTkdfTU9ERSAqLworICAgIGtEQUNfQnVmZmVyV29ya0FzT25lVGltZVNjYW5Nb2RlLCAvKiE8IE9uZS1UaW1lIFNjYW4gbW9kZS4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfQlVGRkVSX0ZJRk9fTU9ERSkgJiYgRlNMX0ZFQVRVUkVfREFDX0hBU19CVUZGRVJfRklGT19NT0RFCisgICAga0RBQ19CdWZmZXJXb3JrQXNGSUZPTW9kZSwgLyohPCBGSUZPIG1vZGUuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19CVUZGRVJfRklGT19NT0RFICovCit9IGRhY19idWZmZXJfd29ya19tb2RlX3Q7CisKKy8qIQorICogQGJyaWVmIERBQyBtb2R1bGUgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2RhY19jb25maWcKK3sKKyAgICBkYWNfcmVmZXJlbmNlX3ZvbHRhZ2Vfc291cmNlX3QgcmVmZXJlbmNlVm9sdGFnZVNvdXJjZTsgLyohPCBTZWxlY3QgdGhlIERBQyByZWZlcmVuY2Ugdm9sdGFnZSBzb3VyY2UuICovCisgICAgYm9vbCBlbmFibGVMb3dQb3dlck1vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIHRoZSBsb3ctcG93ZXIgbW9kZS4gKi8KK30gZGFjX2NvbmZpZ190OworCisvKiEKKyAqIEBicmllZiBEQUMgYnVmZmVyIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9kYWNfYnVmZmVyX2NvbmZpZworeworICAgIGRhY19idWZmZXJfdHJpZ2dlcl9tb2RlX3QgdHJpZ2dlck1vZGU7IC8qITwgU2VsZWN0IHRoZSBidWZmZXIncyB0cmlnZ2VyIG1vZGUuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19TRUxFQ1RJT04pICYmIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX1NFTEVDVElPTgorICAgIGRhY19idWZmZXJfd2F0ZXJtYXJrX3Qgd2F0ZXJtYXJrOyAvKiE8IFNlbGVjdCB0aGUgYnVmZmVyJ3Mgd2F0ZXJtYXJrLiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19TRUxFQ1RJT04gKi8KKyAgICBkYWNfYnVmZmVyX3dvcmtfbW9kZV90IHdvcmtNb2RlOyAgLyohPCBTZWxlY3QgdGhlIGJ1ZmZlcidzIHdvcmsgbW9kZS4gKi8KKyAgICB1aW50OF90IHVwcGVyTGltaXQ7ICAgICAgICAgICAgICAgLyohPCBTZXQgdGhlIHVwcGVyIGxpbWl0IGZvciB0aGUgYnVmZmVyIGluZGV4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGx5LCAwLTE1IGlzIGF2YWlsYWJsZSBmb3IgYSBidWZmZXIgd2l0aCAxNiBpdGVtcy4gKi8KK30gZGFjX2J1ZmZlcl9jb25maWdfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAbmFtZSBJbml0aWFsaXphdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgREFDIG1vZHVsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBEQUMgbW9kdWxlIGluY2x1ZGluZyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMuCisgKiAgLSBFbmFibGluZyB0aGUgY2xvY2sgZm9yIERBQyBtb2R1bGUuCisgKiAgLSBDb25maWd1cmluZyB0aGUgREFDIGNvbnZlcnRlciB3aXRoIGEgdXNlciBjb25maWd1cmF0aW9uLgorICogIC0gRW5hYmxpbmcgdGhlIERBQyBtb2R1bGUuCisgKgorICogQHBhcmFtIGJhc2UgREFDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gU2VlICJkYWNfY29uZmlnX3QiLgorICovCit2b2lkIERBQ19Jbml0KERBQ19UeXBlICpiYXNlLCBjb25zdCBkYWNfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIERlLWluaXRpYWxpemVzIHRoZSBEQUMgbW9kdWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGUtaW5pdGlhbGl6ZXMgdGhlIERBQyBtb2R1bGUgaW5jbHVkaW5nIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucy4KKyAqICAtIERpc2FibGluZyB0aGUgREFDIG1vZHVsZS4KKyAqICAtIERpc2FibGluZyB0aGUgY2xvY2sgZm9yIHRoZSBEQUMgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlIERBQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLwordm9pZCBEQUNfRGVpbml0KERBQ19UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIERBQyB1c2VyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHVzZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHZhbHVlLiBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIGFzIGZvbGxvd3MuCisgKiBAY29kZQorICogICBjb25maWctPnJlZmVyZW5jZVZvbHRhZ2VTb3VyY2UgPSBrREFDX1JlZmVyZW5jZVZvbHRhZ2VTb3VyY2VWcmVmMjsKKyAqICAgY29uZmlnLT5lbmFibGVMb3dQb3dlck1vZGUgPSBmYWxzZTsKKyAqIEBlbmRjb2RlCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBTZWUgImRhY19jb25maWdfdCIuCisgKi8KK3ZvaWQgREFDX0dldERlZmF1bHRDb25maWcoZGFjX2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBEQUMgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlIERBQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZmVhdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERBQ19FbmFibGUoREFDX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5DMCB8PSBEQUNfQzBfREFDRU5fTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+QzAgJj0gfkRBQ19DMF9EQUNFTl9NQVNLOworICAgIH0KK30KKworLyogQH0gKi8KKworLyohCisgKiBAbmFtZSBCdWZmZXIKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgREFDIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZW5hYmxlIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGZlYXR1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBEQUNfRW5hYmxlQnVmZmVyKERBQ19UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+QzEgfD0gREFDX0MxX0RBQ0JGRU5fTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+QzEgJj0gfkRBQ19DMV9EQUNCRkVOX01BU0s7CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBDTVAgYnVmZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlICAgREFDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gU2VlICJkYWNfYnVmZmVyX2NvbmZpZ190Ii4KKyAqLwordm9pZCBEQUNfU2V0QnVmZmVyQ29uZmlnKERBQ19UeXBlICpiYXNlLCBjb25zdCBkYWNfYnVmZmVyX2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgREFDIGJ1ZmZlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBEQUMgYnVmZmVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHRvIGRlZmF1bHQgdmFsdWVzLiBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIGFzIGZvbGxvd3MuCisgKiBAY29kZQorICogICBjb25maWctPnRyaWdnZXJNb2RlID0ga0RBQ19CdWZmZXJUcmlnZ2VyQnlTb2Z0d2FyZU1vZGU7CisgKiAgIGNvbmZpZy0+d2F0ZXJtYXJrICAgPSBrREFDX0J1ZmZlcldhdGVybWFyazFXb3JkOworICogICBjb25maWctPndvcmtNb2RlICAgID0ga0RBQ19CdWZmZXJXb3JrQXNOb3JtYWxNb2RlOworICogICBjb25maWctPnVwcGVyTGltaXQgID0gREFDX0RBVExfQ09VTlQgLSAxVTsKKyAqIEBlbmRjb2RlCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBTZWUgImRhY19idWZmZXJfY29uZmlnX3QiLgorICovCit2b2lkIERBQ19HZXREZWZhdWx0QnVmZmVyQ29uZmlnKGRhY19idWZmZXJfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgdGhlIERNQSBmb3IgREFDIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZW5hYmxlIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGZlYXR1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBEQUNfRW5hYmxlQnVmZmVyRE1BKERBQ19UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+QzEgfD0gREFDX0MxX0RNQUVOX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkMxICY9IH5EQUNfQzFfRE1BRU5fTUFTSzsKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIHZhbHVlIGZvciAgaXRlbXMgaW4gdGhlIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSAgREFDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGluZGV4IFNldHRpbmcgdGhlIGluZGV4IGZvciBpdGVtcyBpbiB0aGUgYnVmZmVyLiBUaGUgYXZhaWxhYmxlIGluZGV4IHNob3VsZCBub3QgZXhjZWVkIHRoZSBzaXplIG9mIHRoZSBEQUMgYnVmZmVyLgorICogQHBhcmFtIHZhbHVlIFNldHRpbmcgdGhlIHZhbHVlIGZvciBpdGVtcyBpbiB0aGUgYnVmZmVyLiAxMi1iaXRzIGFyZSBhdmFpbGFibGUuCisgKi8KK3ZvaWQgREFDX1NldEJ1ZmZlclZhbHVlKERBQ19UeXBlICpiYXNlLCB1aW50OF90IGluZGV4LCB1aW50MTZfdCB2YWx1ZSk7CisKKy8qIQorICogQGJyaWVmIFRyaWdnZXJzIHRoZSBidWZmZXIgdXNpbmcgc29mdHdhcmUgYW5kIHVwZGF0ZXMgdGhlIHJlYWQgcG9pbnRlciBvZiB0aGUgREFDIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRyaWdnZXJzIHRoZSBmdW5jdGlvbiB1c2luZyBzb2Z0d2FyZS4gVGhlIHJlYWQgcG9pbnRlciBvZiB0aGUgREFDIGJ1ZmZlciBpcyB1cGRhdGVkIHdpdGggb25lIHN0ZXAKKyAqIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBDaGFuZ2luZyB0aGUgcmVhZCBwb2ludGVyIGRlcGVuZHMgb24gdGhlIGJ1ZmZlcidzIHdvcmsgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBEQUNfRG9Tb2Z0d2FyZVRyaWdnZXJCdWZmZXIoREFDX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+QzAgfD0gREFDX0MwX0RBQ1NXVFJHX01BU0s7Cit9CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgcmVhZCBwb2ludGVyIG9mIHRoZSBEQUMgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgY3VycmVudCByZWFkIHBvaW50ZXIgb2YgdGhlIERBQyBidWZmZXIuCisgKiBUaGUgY3VycmVudCBvdXRwdXQgdmFsdWUgZGVwZW5kcyBvbiB0aGUgaXRlbSBpbmRleGVkIGJ5IHRoZSByZWFkIHBvaW50ZXIuIEl0IGlzIHVwZGF0ZWQgZWl0aGVyCisgKiBieSBhIHNvZnR3YXJlIHRyaWdnZXIgb3IgYSBoYXJkd2FyZSB0cmlnZ2VyLgorICoKKyAqIEBwYXJhbSAgYmFzZSBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKgorICogQHJldHVybiAgICAgIFRoZSBjdXJyZW50IHJlYWQgcG9pbnRlciBvZiB0aGUgREFDIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IERBQ19HZXRCdWZmZXJSZWFkUG9pbnRlcihEQUNfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKChiYXNlLT5DMiAmIERBQ19DMl9EQUNCRlJQX01BU0spID4+IERBQ19DMl9EQUNCRlJQX1NISUZUKTsKK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgY3VycmVudCByZWFkIHBvaW50ZXIgb2YgdGhlIERBQyBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjdXJyZW50IHJlYWQgcG9pbnRlciBvZiB0aGUgREFDIGJ1ZmZlci4KKyAqIFRoZSBjdXJyZW50IG91dHB1dCB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBpdGVtIGluZGV4ZWQgYnkgdGhlIHJlYWQgcG9pbnRlci4gSXQgaXMgdXBkYXRlZCBlaXRoZXIgYnkgYQorICogc29mdHdhcmUgdHJpZ2dlciBvciBhIGhhcmR3YXJlIHRyaWdnZXIuIEFmdGVyIHRoZSByZWFkIHBvaW50ZXIgY2hhbmdlcywgdGhlIERBQyBvdXRwdXQgdmFsdWUgYWxzbyBjaGFuZ2VzLgorICoKKyAqIEBwYXJhbSBiYXNlICBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaW5kZXggU2V0dGluZyBhbiBpbmRleCB2YWx1ZSBmb3IgdGhlIHBvaW50ZXIuCisgKi8KK3ZvaWQgREFDX1NldEJ1ZmZlclJlYWRQb2ludGVyKERBQ19UeXBlICpiYXNlLCB1aW50OF90IGluZGV4KTsKKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBpbnRlcnJ1cHRzIGZvciB0aGUgREFDIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayBNYXNrIHZhbHVlIGZvciBpbnRlcnJ1cHRzLiBTZWUgIl9kYWNfYnVmZmVyX2ludGVycnVwdF9lbmFibGUiLgorICovCit2b2lkIERBQ19FbmFibGVCdWZmZXJJbnRlcnJ1cHRzKERBQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgaW50ZXJydXB0cyBmb3IgdGhlIERBQyBidWZmZXIuCisgKgorICogQHBhcmFtIGJhc2UgREFDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgTWFzayB2YWx1ZSBmb3IgaW50ZXJydXB0cy4gU2VlICAiX2RhY19idWZmZXJfaW50ZXJydXB0X2VuYWJsZSIuCisgKi8KK3ZvaWQgREFDX0Rpc2FibGVCdWZmZXJJbnRlcnJ1cHRzKERBQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgZmxhZ3Mgb2YgZXZlbnRzIGZvciB0aGUgREFDIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gIGJhc2UgREFDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICoKKyAqIEByZXR1cm4gICAgICBNYXNrIHZhbHVlIGZvciB0aGUgYXNzZXJ0ZWQgZmxhZ3MuIFNlZSAgIl9kYWNfYnVmZmVyX3N0YXR1c19mbGFncyIuCisgKi8KK3VpbnQzMl90IERBQ19HZXRCdWZmZXJTdGF0dXNGbGFncyhEQUNfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIENsZWFycyB0aGUgZmxhZ3Mgb2YgZXZlbnRzIGZvciB0aGUgREFDIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayBNYXNrIHZhbHVlIGZvciBmbGFncy4gU2VlICJfZGFjX2J1ZmZlcl9zdGF0dXNfZmxhZ3NfdCIuCisgKi8KK3ZvaWQgREFDX0NsZWFyQnVmZmVyU3RhdHVzRmxhZ3MoREFDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiBAfSAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorLyohCisgKiBAfQorICovCisjZW5kaWYgLyogX0ZTTF9EQUNfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RtYW11eC5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZG1hbXV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljZTljZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RtYW11eC5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2RtYW11eC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBHZXQgaW5zdGFuY2UgbnVtYmVyIGZvciBETUFNVVguCisgKgorICogQHBhcmFtIGJhc2UgRE1BTVVYIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCitzdGF0aWMgdWludDMyX3QgRE1BTVVYX0dldEluc3RhbmNlKERNQU1VWF9UeXBlICpiYXNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBicmllZiBBcnJheSB0byBtYXAgRE1BTVVYIGluc3RhbmNlIG51bWJlciB0byBiYXNlIHBvaW50ZXIuICovCitzdGF0aWMgRE1BTVVYX1R5cGUgKmNvbnN0IHNfZG1hbXV4QmFzZXNbXSA9IERNQU1VWF9CQVNFX1BUUlM7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisvKiEgQGJyaWVmIEFycmF5IHRvIG1hcCBETUFNVVggaW5zdGFuY2UgbnVtYmVyIHRvIGNsb2NrIG5hbWUuICovCitzdGF0aWMgY29uc3QgY2xvY2tfaXBfbmFtZV90IHNfZG1hbXV4Q2xvY2tOYW1lW10gPSBETUFNVVhfQ0xPQ0tTOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1aW50MzJfdCBETUFNVVhfR2V0SW5zdGFuY2UoRE1BTVVYX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgaW5zdGFuY2U7CisKKyAgICAvKiBGaW5kIHRoZSBpbnN0YW5jZSBpbmRleCBmcm9tIGJhc2UgYWRkcmVzcyBtYXBwaW5ncy4gKi8KKyAgICBmb3IgKGluc3RhbmNlID0gMDsgaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfZG1hbXV4QmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfZG1hbXV4QmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2RtYW11eEJhc2VzKSk7CisKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQgRE1BTVVYX0luaXQoRE1BTVVYX1R5cGUgKmJhc2UpCit7CisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfZG1hbXV4Q2xvY2tOYW1lW0RNQU1VWF9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCit2b2lkIERNQU1VWF9EZWluaXQoRE1BTVVYX1R5cGUgKmJhc2UpCit7CisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX2RtYW11eENsb2NrTmFtZVtETUFNVVhfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RtYW11eC5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZG1hbXV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxMzQ4YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RtYW11eC5oCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlNMX0RNQU1VWF9IXworI2RlZmluZSBfRlNMX0RNQU1VWF9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGRtYW11eAorICogQHsKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgRE1BTVVYIGRyaXZlciB2ZXJzaW9uIDIuMC4yLiAqLworI2RlZmluZSBGU0xfRE1BTVVYX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMikpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiEKKyAqIEBuYW1lIERNQU1VWCBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIERNQU1VWCBwZXJpcGhlcmFsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdW5nYXRlcyB0aGUgRE1BTVVYIGNsb2NrLgorICoKKyAqIEBwYXJhbSBiYXNlIERNQU1VWCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqCisgKi8KK3ZvaWQgRE1BTVVYX0luaXQoRE1BTVVYX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBEZWluaXRpYWxpemVzIHRoZSBETUFNVVggcGVyaXBoZXJhbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdhdGVzIHRoZSBETUFNVVggY2xvY2suCisgKgorICogQHBhcmFtIGJhc2UgRE1BTVVYIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCit2b2lkIERNQU1VWF9EZWluaXQoRE1BTVVYX1R5cGUgKmJhc2UpOworCisvKiBAfSAqLworLyohCisgKiBAbmFtZSBETUFNVVggQ2hhbm5lbCBPcGVyYXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgRE1BTVVYIGNoYW5uZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBETUFNVVggY2hhbm5lbC4KKyAqCisgKiBAcGFyYW0gYmFzZSBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBETUFNVVggY2hhbm5lbCBudW1iZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBETUFNVVhfRW5hYmxlQ2hhbm5lbChETUFNVVhfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0RNQU1VWF9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBiYXNlLT5DSENGR1tjaGFubmVsXSB8PSBETUFNVVhfQ0hDRkdfRU5CTF9NQVNLOworfQorCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyB0aGUgRE1BTVVYIGNoYW5uZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgRE1BTVVYIGNoYW5uZWwuCisgKgorICogQG5vdGUgVGhlIHVzZXIgbXVzdCBkaXNhYmxlIHRoZSBETUFNVVggY2hhbm5lbCBiZWZvcmUgY29uZmlndXJpbmcgaXQuCisgKiBAcGFyYW0gYmFzZSBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBETUFNVVggY2hhbm5lbCBudW1iZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBETUFNVVhfRGlzYWJsZUNoYW5uZWwoRE1BTVVYX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwpCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9ETUFNVVhfTU9EVUxFX0NIQU5ORUwpOworCisgICAgYmFzZS0+Q0hDRkdbY2hhbm5lbF0gJj0gfkRNQU1VWF9DSENGR19FTkJMX01BU0s7Cit9CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIERNQU1VWCBjaGFubmVsIHNvdXJjZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBETUFNVVggY2hhbm5lbCBudW1iZXIuCisgKiBAcGFyYW0gc291cmNlIENoYW5uZWwgc291cmNlLCB3aGljaCBpcyB1c2VkIHRvIHRyaWdnZXIgdGhlIERNQSB0cmFuc2Zlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERNQU1VWF9TZXRTb3VyY2UoRE1BTVVYX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIHVpbnQzMl90IHNvdXJjZSkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0RNQU1VWF9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBiYXNlLT5DSENGR1tjaGFubmVsXSA9ICgoYmFzZS0+Q0hDRkdbY2hhbm5lbF0gJiB+RE1BTVVYX0NIQ0ZHX1NPVVJDRV9NQVNLKSB8IERNQU1VWF9DSENGR19TT1VSQ0Uoc291cmNlKSk7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RNQU1VWF9IQVNfVFJJRykgJiYgRlNMX0ZFQVRVUkVfRE1BTVVYX0hBU19UUklHID4gMFUKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgdGhlIERNQU1VWCBwZXJpb2QgdHJpZ2dlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIERNQU1VWCBwZXJpb2QgdHJpZ2dlciBmZWF0dXJlLgorICoKKyAqIEBwYXJhbSBiYXNlIERNQU1VWCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIERNQU1VWCBjaGFubmVsIG51bWJlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERNQU1VWF9FbmFibGVQZXJpb2RUcmlnZ2VyKERNQU1VWF9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRE1BTVVYX01PRFVMRV9DSEFOTkVMKTsKKworICAgIGJhc2UtPkNIQ0ZHW2NoYW5uZWxdIHw9IERNQU1VWF9DSENGR19UUklHX01BU0s7Cit9CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBETUFNVVggcGVyaW9kIHRyaWdnZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgRE1BTVVYIHBlcmlvZCB0cmlnZ2VyLgorICoKKyAqIEBwYXJhbSBiYXNlIERNQU1VWCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIERNQU1VWCBjaGFubmVsIG51bWJlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERNQU1VWF9EaXNhYmxlUGVyaW9kVHJpZ2dlcihETUFNVVhfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0RNQU1VWF9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBiYXNlLT5DSENGR1tjaGFubmVsXSAmPSB+RE1BTVVYX0NIQ0ZHX1RSSUdfTUFTSzsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9ETUFNVVhfSEFTX1RSSUcgKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0RNQU1VWF9IQVNfQV9PTikgJiYgRlNMX0ZFQVRVUkVfRE1BTVVYX0hBU19BX09OKQorLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgRE1BIGNoYW5uZWwgdG8gYmUgYWx3YXlzIE9OLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgRE1BTVVYIGNoYW5uZWwgYWx3YXlzIE9OIGZlYXR1cmUuCisgKgorICogQHBhcmFtIGJhc2UgRE1BTVVYIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgRE1BTVVYIGNoYW5uZWwgbnVtYmVyLgorICogQHBhcmFtIGVuYWJsZSBTd2l0Y2hlciBvZiB0aGUgYWx3YXlzIE9OIGZlYXR1cmUuICJ0cnVlIiBtZWFucyBlbmFibGVkLCAiZmFsc2UiIG1lYW5zIGRpc2FibGVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRE1BTVVYX0VuYWJsZUFsd2F5c09uKERNQU1VWF9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBib29sIGVuYWJsZSkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0RNQU1VWF9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+Q0hDRkdbY2hhbm5lbF0gfD0gRE1BTVVYX0NIQ0ZHX0FfT05fTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+Q0hDRkdbY2hhbm5lbF0gJj0gfkRNQU1VWF9DSENGR19BX09OX01BU0s7CisgICAgfQorfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0RNQU1VWF9IQVNfQV9PTiAqLworCisvKiBAfSAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiBAfSAqLworCisjZW5kaWYgLyogX0ZTTF9ETUFNVVhfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGkuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmI5MGJhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaS5jCkBAIC0wLDAgKzEsMTY2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfZHNwaS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgQGJyaWVmIFR5cGVkZWYgZm9yIG1hc3RlciBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KK3R5cGVkZWYgdm9pZCAoKmRzcGlfbWFzdGVyX2lzcl90KShTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qISBAYnJpZWYgVHlwZWRlZiBmb3Igc2xhdmUgaW50ZXJydXB0IGhhbmRsZXIuICovCit0eXBlZGVmIHZvaWQgKCpkc3BpX3NsYXZlX2lzcl90KShTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBicmllZiBHZXQgaW5zdGFuY2UgbnVtYmVyIGZvciBEU1BJIG1vZHVsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCit1aW50MzJfdCBEU1BJX0dldEluc3RhbmNlKFNQSV9UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgRFNQSSBwZXJpcGhlcmFsIGNoaXAgc2VsZWN0IHBvbGFyaXR5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gIHRha2VzIGluIHRoZSBkZXNpcmVkIHBlcmlwaGVyYWwgY2hpcCBzZWxlY3QgKFBjcykgYW5kIGl0J3MgY29ycmVzcG9uZGluZyBkZXNpcmVkIHBvbGFyaXR5IGFuZAorICogY29uZmlndXJlcyB0aGUgUGNzIHNpZ25hbCB0byBvcGVyYXRlIHdpdGggdGhlIGRlc2lyZWQgY2hhcmFjdGVyaXN0aWMuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gcGNzIFRoZSBwYXJ0aWN1bGFyIHBlcmlwaGVyYWwgY2hpcCBzZWxlY3QgKHBhcmFtZXRlciB2YWx1ZSBpcyBvZiB0eXBlIGRzcGlfd2hpY2hfcGNzX3QpIGZvciB3aGljaCB3ZSB3aXNoIHRvCisgKiAgICAgICAgICAgIGFwcGx5IHRoZSBhY3RpdmUgaGlnaCBvciBhY3RpdmUgbG93IGNoYXJhY3RlcmlzdGljLgorICogQHBhcmFtIGFjdGl2ZUxvd09ySGlnaCBUaGUgc2V0dGluZyBmb3IgZWl0aGVyICJhY3RpdmUgaGlnaCwgaW5hY3RpdmUgbG93ICgwKSIgIG9yICJhY3RpdmUgbG93LCBpbmFjdGl2ZSBoaWdoKDEpIiBvZgorICogICAgICAgICAgICAgICAgICAgICAgICB0eXBlIGRzcGlfcGNzX3BvbGFyaXR5X2NvbmZpZ190LgorICovCitzdGF0aWMgdm9pZCBEU1BJX1NldE9uZVBjc1BvbGFyaXR5KFNQSV9UeXBlICpiYXNlLCBkc3BpX3doaWNoX3Bjc190IHBjcywgZHNwaV9wY3NfcG9sYXJpdHlfY29uZmlnX3QgYWN0aXZlTG93T3JIaWdoKTsKKworLyohCisgKiBAYnJpZWYgTWFzdGVyIGZpbGwgdXAgdGhlIFRYIEZJRk8gd2l0aCBkYXRhLgorICogVGhpcyBpcyBub3QgYSBwdWJsaWMgQVBJLgorICovCitzdGF0aWMgdm9pZCBEU1BJX01hc3RlclRyYW5zZmVyRmlsbFVwVHhGaWZvKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgTWFzdGVyIGZpbmlzaCB1cCBhIHRyYW5zZmVyLgorICogSXQgd291bGQgY2FsbCBiYWNrIGlmIHRoZXJlIGlzIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBzZXQgdGhlIHN0YXRlIHRvIGlkbGUuCisgKiBUaGlzIGlzIG5vdCBhIHB1YmxpYyBBUEkuCisgKi8KK3N0YXRpYyB2b2lkIERTUElfTWFzdGVyVHJhbnNmZXJDb21wbGV0ZShTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIFNsYXZlIGZpbGwgdXAgdGhlIFRYIEZJRk8gd2l0aCBkYXRhLgorICogVGhpcyBpcyBub3QgYSBwdWJsaWMgQVBJLgorICovCitzdGF0aWMgdm9pZCBEU1BJX1NsYXZlVHJhbnNmZXJGaWxsVXBUeEZpZm8oU1BJX1R5cGUgKmJhc2UsIGRzcGlfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIFNsYXZlIGZpbmlzaCB1cCBhIHRyYW5zZmVyLgorICogSXQgd291bGQgY2FsbCBiYWNrIGlmIHRoZXJlIGlzIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBzZXQgdGhlIHN0YXRlIHRvIGlkbGUuCisgKiBUaGlzIGlzIG5vdCBhIHB1YmxpYyBBUEkuCisgKi8KK3N0YXRpYyB2b2lkIERTUElfU2xhdmVUcmFuc2ZlckNvbXBsZXRlKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBEU1BJIGNvbW1vbiBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBnX2RzcGlIYW5kbGUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQgRFNQSV9Db21tb25JUlFIYW5kbGVyKFNQSV9UeXBlICpiYXNlLCB2b2lkICpwYXJhbSk7CisKKy8qIQorICogQGJyaWVmIE1hc3RlciBwcmVwYXJlIHRoZSB0cmFuc2Zlci4KKyAqIEJhc2ljYWxseSBpdCBzZXQgdXAgZHNwaV9tYXN0ZXJfaGFuZGxlIC4KKyAqIFRoaXMgaXMgbm90IGEgcHVibGljIEFQSS4KKyAqLworc3RhdGljIHZvaWQgRFNQSV9NYXN0ZXJUcmFuc2ZlclByZXBhcmUoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsIGRzcGlfdHJhbnNmZXJfdCAqdHJhbnNmZXIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEZWZpbmVzIGNvbnN0YW50IHZhbHVlIGFycmF5cyBmb3IgdGhlIGJhdWQgcmF0ZSBwcmUtc2NhbGFyIGFuZCBzY2FsYXIgZGl2aWRlciB2YWx1ZXMuKi8KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzX2JhdWRyYXRlUHJlc2NhbGVyW10gPSB7MiwgMywgNSwgN307CitzdGF0aWMgY29uc3QgdWludDMyX3Qgc19iYXVkcmF0ZVNjYWxlcltdID0gezIsICAgNCwgICA2LCAgICA4LCAgICAxNiwgICAzMiwgICA2NCwgICAgMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYsIDUxMiwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMTYzODQsIDMyNzY4fTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfZGVsYXlQcmVzY2FsZXJbXSA9IHsxLCAzLCA1LCA3fTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzX2RlbGF5U2NhbGVyW10gPSB7MiwgICA0LCAgICA4LCAgICAxNiwgICAzMiwgICA2NCwgICAgMTI4LCAgIDI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTEyLCAxMDI0LCAyMDQ4LCA0MDk2LCA4MTkyLCAxNjM4NCwgMzI3NjgsIDY1NTM2fTsKKworLyohIEBicmllZiBQb2ludGVycyB0byBkc3BpIGJhc2VzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIFNQSV9UeXBlICpjb25zdCBzX2RzcGlCYXNlc1tdID0gU1BJX0JBU0VfUFRSUzsKKworLyohIEBicmllZiBQb2ludGVycyB0byBkc3BpIElSUSBudW1iZXIgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgSVJRbl9UeXBlIGNvbnN0IHNfZHNwaUlSUVtdID0gU1BJX0lSUVM7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIGRzcGkgY2xvY2tzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIGNsb2NrX2lwX25hbWVfdCBjb25zdCBzX2RzcGlDbG9ja1tdID0gRFNQSV9DTE9DS1M7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gZHNwaSBoYW5kbGVzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIHZvaWQgKmdfZHNwaUhhbmRsZVtBUlJBWV9TSVpFKHNfZHNwaUJhc2VzKV07CisKKy8qISBAYnJpZWYgUG9pbnRlciB0byBtYXN0ZXIgSVJRIGhhbmRsZXIgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgZHNwaV9tYXN0ZXJfaXNyX3Qgc19kc3BpTWFzdGVySXNyOworCisvKiEgQGJyaWVmIFBvaW50ZXIgdG8gc2xhdmUgSVJRIGhhbmRsZXIgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgZHNwaV9zbGF2ZV9pc3JfdCBzX2RzcGlTbGF2ZUlzcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29kZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDMyX3QgRFNQSV9HZXRJbnN0YW5jZShTUElfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19kc3BpQmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfZHNwaUJhc2VzW2luc3RhbmNlXSA9PSBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydChpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19kc3BpQmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9pZCBEU1BJX01hc3RlckluaXQoU1BJX1R5cGUgKmJhc2UsIGNvbnN0IGRzcGlfbWFzdGVyX2NvbmZpZ190ICptYXN0ZXJDb25maWcsIHVpbnQzMl90IHNyY0Nsb2NrX0h6KQoreworICAgIGFzc2VydChtYXN0ZXJDb25maWcpOworCisgICAgdWludDMyX3QgdGVtcDsKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogZW5hYmxlIERTUEkgY2xvY2sgKi8KKyAgICBDTE9DS19FbmFibGVDbG9jayhzX2RzcGlDbG9ja1tEU1BJX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKyAgICBEU1BJX0VuYWJsZShiYXNlLCB0cnVlKTsKKyAgICBEU1BJX1N0b3BUcmFuc2ZlcihiYXNlKTsKKworICAgIERTUElfU2V0TWFzdGVyU2xhdmVNb2RlKGJhc2UsIGtEU1BJX01hc3Rlcik7CisKKyAgICB0ZW1wID0gYmFzZS0+TUNSICYgKH4oU1BJX01DUl9DT05UX1NDS0VfTUFTSyB8IFNQSV9NQ1JfTVRGRV9NQVNLIHwgU1BJX01DUl9ST09FX01BU0sgfCBTUElfTUNSX1NNUExfUFRfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSV9NQ1JfRElTX1RYRl9NQVNLIHwgU1BJX01DUl9ESVNfUlhGX01BU0spKTsKKworICAgIGJhc2UtPk1DUiA9IHRlbXAgfCBTUElfTUNSX0NPTlRfU0NLRShtYXN0ZXJDb25maWctPmVuYWJsZUNvbnRpbnVvdXNTQ0spIHwKKyAgICAgICAgICAgICAgICBTUElfTUNSX01URkUobWFzdGVyQ29uZmlnLT5lbmFibGVNb2RpZmllZFRpbWluZ0Zvcm1hdCkgfAorICAgICAgICAgICAgICAgIFNQSV9NQ1JfUk9PRShtYXN0ZXJDb25maWctPmVuYWJsZVJ4Rmlmb092ZXJXcml0ZSkgfCBTUElfTUNSX1NNUExfUFQobWFzdGVyQ29uZmlnLT5zYW1wbGVQb2ludCkgfAorICAgICAgICAgICAgICAgIFNQSV9NQ1JfRElTX1RYRihmYWxzZSkgfCBTUElfTUNSX0RJU19SWEYoZmFsc2UpOworCisgICAgRFNQSV9TZXRPbmVQY3NQb2xhcml0eShiYXNlLCBtYXN0ZXJDb25maWctPndoaWNoUGNzLCBtYXN0ZXJDb25maWctPnBjc0FjdGl2ZUhpZ2hPckxvdyk7CisKKyAgICBpZiAoMCA9PSBEU1BJX01hc3RlclNldEJhdWRSYXRlKGJhc2UsIG1hc3RlckNvbmZpZy0+d2hpY2hDdGFyLCBtYXN0ZXJDb25maWctPmN0YXJDb25maWcuYmF1ZFJhdGUsIHNyY0Nsb2NrX0h6KSkKKyAgICB7CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorCisgICAgdGVtcCA9IGJhc2UtPkNUQVJbbWFzdGVyQ29uZmlnLT53aGljaEN0YXJdICYKKyAgICAgICAgICAgfihTUElfQ1RBUl9GTVNaX01BU0sgfCBTUElfQ1RBUl9DUE9MX01BU0sgfCBTUElfQ1RBUl9DUEhBX01BU0sgfCBTUElfQ1RBUl9MU0JGRV9NQVNLKTsKKworICAgIGJhc2UtPkNUQVJbbWFzdGVyQ29uZmlnLT53aGljaEN0YXJdID0KKyAgICAgICAgdGVtcCB8IFNQSV9DVEFSX0ZNU1oobWFzdGVyQ29uZmlnLT5jdGFyQ29uZmlnLmJpdHNQZXJGcmFtZSAtIDEpIHwgU1BJX0NUQVJfQ1BPTChtYXN0ZXJDb25maWctPmN0YXJDb25maWcuY3BvbCkgfAorICAgICAgICBTUElfQ1RBUl9DUEhBKG1hc3RlckNvbmZpZy0+Y3RhckNvbmZpZy5jcGhhKSB8IFNQSV9DVEFSX0xTQkZFKG1hc3RlckNvbmZpZy0+Y3RhckNvbmZpZy5kaXJlY3Rpb24pOworCisgICAgRFNQSV9NYXN0ZXJTZXREZWxheVRpbWVzKGJhc2UsIG1hc3RlckNvbmZpZy0+d2hpY2hDdGFyLCBrRFNQSV9QY3NUb1Njaywgc3JjQ2xvY2tfSHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy0+Y3RhckNvbmZpZy5wY3NUb1Nja0RlbGF5SW5OYW5vU2VjKTsKKyAgICBEU1BJX01hc3RlclNldERlbGF5VGltZXMoYmFzZSwgbWFzdGVyQ29uZmlnLT53aGljaEN0YXIsIGtEU1BJX0xhc3RTY2tUb1Bjcywgc3JjQ2xvY2tfSHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy0+Y3RhckNvbmZpZy5sYXN0U2NrVG9QY3NEZWxheUluTmFub1NlYyk7CisgICAgRFNQSV9NYXN0ZXJTZXREZWxheVRpbWVzKGJhc2UsIG1hc3RlckNvbmZpZy0+d2hpY2hDdGFyLCBrRFNQSV9CZXR3ZWVuVHJhbnNmZXIsIHNyY0Nsb2NrX0h6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWctPmN0YXJDb25maWcuYmV0d2VlblRyYW5zZmVyRGVsYXlJbk5hbm9TZWMpOworCisgICAgRFNQSV9TdGFydFRyYW5zZmVyKGJhc2UpOworfQorCit2b2lkIERTUElfTWFzdGVyR2V0RGVmYXVsdENvbmZpZyhkc3BpX21hc3Rlcl9jb25maWdfdCAqbWFzdGVyQ29uZmlnKQoreworICAgIGFzc2VydChtYXN0ZXJDb25maWcpOworCisgICAgbWFzdGVyQ29uZmlnLT53aGljaEN0YXIgPSBrRFNQSV9DdGFyMDsKKyAgICBtYXN0ZXJDb25maWctPmN0YXJDb25maWcuYmF1ZFJhdGUgPSA1MDAwMDA7CisgICAgbWFzdGVyQ29uZmlnLT5jdGFyQ29uZmlnLmJpdHNQZXJGcmFtZSA9IDg7CisgICAgbWFzdGVyQ29uZmlnLT5jdGFyQ29uZmlnLmNwb2wgPSBrRFNQSV9DbG9ja1BvbGFyaXR5QWN0aXZlSGlnaDsKKyAgICBtYXN0ZXJDb25maWctPmN0YXJDb25maWcuY3BoYSA9IGtEU1BJX0Nsb2NrUGhhc2VGaXJzdEVkZ2U7CisgICAgbWFzdGVyQ29uZmlnLT5jdGFyQ29uZmlnLmRpcmVjdGlvbiA9IGtEU1BJX01zYkZpcnN0OworCisgICAgbWFzdGVyQ29uZmlnLT5jdGFyQ29uZmlnLnBjc1RvU2NrRGVsYXlJbk5hbm9TZWMgPSAxMDAwOworICAgIG1hc3RlckNvbmZpZy0+Y3RhckNvbmZpZy5sYXN0U2NrVG9QY3NEZWxheUluTmFub1NlYyA9IDEwMDA7CisgICAgbWFzdGVyQ29uZmlnLT5jdGFyQ29uZmlnLmJldHdlZW5UcmFuc2ZlckRlbGF5SW5OYW5vU2VjID0gMTAwMDsKKworICAgIG1hc3RlckNvbmZpZy0+d2hpY2hQY3MgPSBrRFNQSV9QY3MwOworICAgIG1hc3RlckNvbmZpZy0+cGNzQWN0aXZlSGlnaE9yTG93ID0ga0RTUElfUGNzQWN0aXZlTG93OworCisgICAgbWFzdGVyQ29uZmlnLT5lbmFibGVDb250aW51b3VzU0NLID0gZmFsc2U7CisgICAgbWFzdGVyQ29uZmlnLT5lbmFibGVSeEZpZm9PdmVyV3JpdGUgPSBmYWxzZTsKKyAgICBtYXN0ZXJDb25maWctPmVuYWJsZU1vZGlmaWVkVGltaW5nRm9ybWF0ID0gZmFsc2U7CisgICAgbWFzdGVyQ29uZmlnLT5zYW1wbGVQb2ludCA9IGtEU1BJX1Nja1RvU2luMENsb2NrOworfQorCit2b2lkIERTUElfU2xhdmVJbml0KFNQSV9UeXBlICpiYXNlLCBjb25zdCBkc3BpX3NsYXZlX2NvbmZpZ190ICpzbGF2ZUNvbmZpZykKK3sKKyAgICBhc3NlcnQoc2xhdmVDb25maWcpOworCisgICAgdWludDMyX3QgdGVtcCA9IDA7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogZW5hYmxlIERTUEkgY2xvY2sgKi8KKyAgICBDTE9DS19FbmFibGVDbG9jayhzX2RzcGlDbG9ja1tEU1BJX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKyAgICBEU1BJX0VuYWJsZShiYXNlLCB0cnVlKTsKKyAgICBEU1BJX1N0b3BUcmFuc2ZlcihiYXNlKTsKKworICAgIERTUElfU2V0TWFzdGVyU2xhdmVNb2RlKGJhc2UsIGtEU1BJX1NsYXZlKTsKKworICAgIHRlbXAgPSBiYXNlLT5NQ1IgJiAofihTUElfTUNSX0NPTlRfU0NLRV9NQVNLIHwgU1BJX01DUl9NVEZFX01BU0sgfCBTUElfTUNSX1JPT0VfTUFTSyB8IFNQSV9NQ1JfU01QTF9QVF9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX01DUl9ESVNfVFhGX01BU0sgfCBTUElfTUNSX0RJU19SWEZfTUFTSykpOworCisgICAgYmFzZS0+TUNSID0gdGVtcCB8IFNQSV9NQ1JfQ09OVF9TQ0tFKHNsYXZlQ29uZmlnLT5lbmFibGVDb250aW51b3VzU0NLKSB8CisgICAgICAgICAgICAgICAgU1BJX01DUl9NVEZFKHNsYXZlQ29uZmlnLT5lbmFibGVNb2RpZmllZFRpbWluZ0Zvcm1hdCkgfAorICAgICAgICAgICAgICAgIFNQSV9NQ1JfUk9PRShzbGF2ZUNvbmZpZy0+ZW5hYmxlUnhGaWZvT3ZlcldyaXRlKSB8IFNQSV9NQ1JfU01QTF9QVChzbGF2ZUNvbmZpZy0+c2FtcGxlUG9pbnQpIHwKKyAgICAgICAgICAgICAgICBTUElfTUNSX0RJU19UWEYoZmFsc2UpIHwgU1BJX01DUl9ESVNfUlhGKGZhbHNlKTsKKworICAgIERTUElfU2V0T25lUGNzUG9sYXJpdHkoYmFzZSwga0RTUElfUGNzMCwga0RTUElfUGNzQWN0aXZlTG93KTsKKworICAgIHRlbXAgPSBiYXNlLT5DVEFSW3NsYXZlQ29uZmlnLT53aGljaEN0YXJdICYKKyAgICAgICAgICAgfihTUElfQ1RBUl9GTVNaX01BU0sgfCBTUElfQ1RBUl9DUE9MX01BU0sgfCBTUElfQ1RBUl9DUEhBX01BU0sgfCBTUElfQ1RBUl9MU0JGRV9NQVNLKTsKKworICAgIGJhc2UtPkNUQVJbc2xhdmVDb25maWctPndoaWNoQ3Rhcl0gPSB0ZW1wIHwgU1BJX0NUQVJfU0xBVkVfRk1TWihzbGF2ZUNvbmZpZy0+Y3RhckNvbmZpZy5iaXRzUGVyRnJhbWUgLSAxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSV9DVEFSX1NMQVZFX0NQT0woc2xhdmVDb25maWctPmN0YXJDb25maWcuY3BvbCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElfQ1RBUl9TTEFWRV9DUEhBKHNsYXZlQ29uZmlnLT5jdGFyQ29uZmlnLmNwaGEpOworCisgICAgRFNQSV9TdGFydFRyYW5zZmVyKGJhc2UpOworfQorCit2b2lkIERTUElfU2xhdmVHZXREZWZhdWx0Q29uZmlnKGRzcGlfc2xhdmVfY29uZmlnX3QgKnNsYXZlQ29uZmlnKQoreworICAgIGFzc2VydChzbGF2ZUNvbmZpZyk7CisKKyAgICBzbGF2ZUNvbmZpZy0+d2hpY2hDdGFyID0ga0RTUElfQ3RhcjA7CisgICAgc2xhdmVDb25maWctPmN0YXJDb25maWcuYml0c1BlckZyYW1lID0gODsKKyAgICBzbGF2ZUNvbmZpZy0+Y3RhckNvbmZpZy5jcG9sID0ga0RTUElfQ2xvY2tQb2xhcml0eUFjdGl2ZUhpZ2g7CisgICAgc2xhdmVDb25maWctPmN0YXJDb25maWcuY3BoYSA9IGtEU1BJX0Nsb2NrUGhhc2VGaXJzdEVkZ2U7CisKKyAgICBzbGF2ZUNvbmZpZy0+ZW5hYmxlQ29udGludW91c1NDSyA9IGZhbHNlOworICAgIHNsYXZlQ29uZmlnLT5lbmFibGVSeEZpZm9PdmVyV3JpdGUgPSBmYWxzZTsKKyAgICBzbGF2ZUNvbmZpZy0+ZW5hYmxlTW9kaWZpZWRUaW1pbmdGb3JtYXQgPSBmYWxzZTsKKyAgICBzbGF2ZUNvbmZpZy0+c2FtcGxlUG9pbnQgPSBrRFNQSV9TY2tUb1NpbjBDbG9jazsKK30KKwordm9pZCBEU1BJX0RlaW5pdChTUElfVHlwZSAqYmFzZSkKK3sKKyAgICBEU1BJX1N0b3BUcmFuc2ZlcihiYXNlKTsKKyAgICBEU1BJX0VuYWJsZShiYXNlLCBmYWxzZSk7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogZGlzYWJsZSBEU1BJIGNsb2NrICovCisgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKHNfZHNwaUNsb2NrW0RTUElfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKworc3RhdGljIHZvaWQgRFNQSV9TZXRPbmVQY3NQb2xhcml0eShTUElfVHlwZSAqYmFzZSwgZHNwaV93aGljaF9wY3NfdCBwY3MsIGRzcGlfcGNzX3BvbGFyaXR5X2NvbmZpZ190IGFjdGl2ZUxvd09ySGlnaCkKK3sKKyAgICB1aW50MzJfdCB0ZW1wOworCisgICAgdGVtcCA9IGJhc2UtPk1DUjsKKworICAgIGlmIChhY3RpdmVMb3dPckhpZ2ggPT0ga0RTUElfUGNzQWN0aXZlTG93KQorICAgIHsKKyAgICAgICAgdGVtcCB8PSBTUElfTUNSX1BDU0lTKHBjcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHRlbXAgJj0gflNQSV9NQ1JfUENTSVMocGNzKTsKKyAgICB9CisKKyAgICBiYXNlLT5NQ1IgPSB0ZW1wOworfQorCit1aW50MzJfdCBEU1BJX01hc3RlclNldEJhdWRSYXRlKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX2N0YXJfc2VsZWN0aW9uX3Qgd2hpY2hDdGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiYXVkUmF0ZV9CcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY0Nsb2NrX0h6KQoreworICAgIC8qIGZvciBtYXN0ZXIgbW9kZSBjb25maWd1cmF0aW9uLCBpZiBzbGF2ZSBtb2RlIGRldGVjdGVkLCByZXR1cm4gMCovCisgICAgaWYgKCFEU1BJX0lzTWFzdGVyKGJhc2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHVpbnQzMl90IHRlbXA7CisgICAgdWludDMyX3QgcHJlc2NhbGVyLCBiZXN0UHJlc2NhbGVyOworICAgIHVpbnQzMl90IHNjYWxlciwgYmVzdFNjYWxlcjsKKyAgICB1aW50MzJfdCBkYnIsIGJlc3REYnI7CisgICAgdWludDMyX3QgcmVhbEJhdWRyYXRlLCBiZXN0QmF1ZHJhdGU7CisgICAgdWludDMyX3QgZGlmZiwgbWluX2RpZmY7CisgICAgdWludDMyX3QgYmF1ZHJhdGUgPSBiYXVkUmF0ZV9CcHM7CisKKyAgICAvKiBmaW5kIGNvbWJpbmF0aW9uIG9mIHByZXNjYWxlciBhbmQgc2NhbGVyIHJlc3VsdGluZyBpbiBiYXVkcmF0ZSBjbG9zZXN0IHRvIHRoZSByZXF1ZXN0ZWQgdmFsdWUgKi8KKyAgICBtaW5fZGlmZiA9IDB4RkZGRkZGRkZVOworICAgIGJlc3RQcmVzY2FsZXIgPSAwOworICAgIGJlc3RTY2FsZXIgPSAwOworICAgIGJlc3REYnIgPSAxOworICAgIGJlc3RCYXVkcmF0ZSA9IDA7IC8qIHJlcXVpcmVkIHRvIGF2b2lkIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KKworICAgIC8qIEluIGFsbCBmb3IgbG9vcHMsIGlmIG1pbl9kaWZmID0gMCwgdGhlIGV4aXQgZm9yIGxvb3AqLworICAgIGZvciAocHJlc2NhbGVyID0gMDsgKHByZXNjYWxlciA8IDQpICYmIG1pbl9kaWZmOyBwcmVzY2FsZXIrKykKKyAgICB7CisgICAgICAgIGZvciAoc2NhbGVyID0gMDsgKHNjYWxlciA8IDE2KSAmJiBtaW5fZGlmZjsgc2NhbGVyKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoZGJyID0gMTsgKGRiciA8IDMpICYmIG1pbl9kaWZmOyBkYnIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWFsQmF1ZHJhdGUgPSAoKHNyY0Nsb2NrX0h6ICogZGJyKSAvIChzX2JhdWRyYXRlUHJlc2NhbGVyW3ByZXNjYWxlcl0gKiAoc19iYXVkcmF0ZVNjYWxlcltzY2FsZXJdKSkpOworCisgICAgICAgICAgICAgICAgLyogY2FsY3VsYXRlIHRoZSBiYXVkIHJhdGUgZGlmZmVyZW5jZSBiYXNlZCBvbiB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50IHRoYXQgc3RhdGVzIHRoYXQgdGhlIGNhbGN1bGF0ZWQKKyAgICAgICAgICAgICAgICAqIGJhdWQgcmF0ZSBtdXN0IG5vdCBleGNlZWQgdGhlIGRlc2lyZWQgYmF1ZCByYXRlLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKGJhdWRyYXRlID49IHJlYWxCYXVkcmF0ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRpZmYgPSBiYXVkcmF0ZSAtIHJlYWxCYXVkcmF0ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1pbl9kaWZmID4gZGlmZikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogYSBiZXR0ZXIgbWF0Y2ggZm91bmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9kaWZmID0gZGlmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RQcmVzY2FsZXIgPSBwcmVzY2FsZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBiZXN0U2NhbGVyID0gc2NhbGVyOworICAgICAgICAgICAgICAgICAgICAgICAgYmVzdEJhdWRyYXRlID0gcmVhbEJhdWRyYXRlOworICAgICAgICAgICAgICAgICAgICAgICAgYmVzdERiciA9IGRicjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHdyaXRlIHRoZSBiZXN0IGRiciwgcHJlc2NhbGFyLCBhbmQgYmF1ZCByYXRlIHNjYWxhciB0byB0aGUgQ1RBUiAqLworICAgIHRlbXAgPSBiYXNlLT5DVEFSW3doaWNoQ3Rhcl0gJiB+KFNQSV9DVEFSX0RCUl9NQVNLIHwgU1BJX0NUQVJfUEJSX01BU0sgfCBTUElfQ1RBUl9CUl9NQVNLKTsKKworICAgIGJhc2UtPkNUQVJbd2hpY2hDdGFyXSA9IHRlbXAgfCAoKGJlc3REYnIgLSAxKSA8PCBTUElfQ1RBUl9EQlJfU0hJRlQpIHwgKGJlc3RQcmVzY2FsZXIgPDwgU1BJX0NUQVJfUEJSX1NISUZUKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJlc3RTY2FsZXIgPDwgU1BJX0NUQVJfQlJfU0hJRlQpOworCisgICAgLyogcmV0dXJuIHRoZSBhY3R1YWwgY2FsY3VsYXRlZCBiYXVkIHJhdGUgKi8KKyAgICByZXR1cm4gYmVzdEJhdWRyYXRlOworfQorCit2b2lkIERTUElfTWFzdGVyU2V0RGVsYXlTY2FsZXIoCisgICAgU1BJX1R5cGUgKmJhc2UsIGRzcGlfY3Rhcl9zZWxlY3Rpb25fdCB3aGljaEN0YXIsIHVpbnQzMl90IHByZXNjYWxlciwgdWludDMyX3Qgc2NhbGVyLCBkc3BpX2RlbGF5X3R5cGVfdCB3aGljaERlbGF5KQoreworICAgIC8qIHRoZXNlIHNldHRpbmdzIGFyZSBvbmx5IHJlbGV2YW50IGluIG1hc3RlciBtb2RlICovCisgICAgaWYgKERTUElfSXNNYXN0ZXIoYmFzZSkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHdoaWNoRGVsYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2Uga0RTUElfUGNzVG9TY2s6CisgICAgICAgICAgICAgICAgYmFzZS0+Q1RBUlt3aGljaEN0YXJdID0gKGJhc2UtPkNUQVJbd2hpY2hDdGFyXSAmICh+U1BJX0NUQVJfUENTU0NLX01BU0spICYgKH5TUElfQ1RBUl9DU1NDS19NQVNLKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSV9DVEFSX1BDU1NDSyhwcmVzY2FsZXIpIHwgU1BJX0NUQVJfQ1NTQ0soc2NhbGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga0RTUElfTGFzdFNja1RvUGNzOgorICAgICAgICAgICAgICAgIGJhc2UtPkNUQVJbd2hpY2hDdGFyXSA9IChiYXNlLT5DVEFSW3doaWNoQ3Rhcl0gJiAoflNQSV9DVEFSX1BBU0NfTUFTSykgJiAoflNQSV9DVEFSX0FTQ19NQVNLKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSV9DVEFSX1BBU0MocHJlc2NhbGVyKSB8IFNQSV9DVEFSX0FTQyhzY2FsZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrRFNQSV9CZXR3ZWVuVHJhbnNmZXI6CisgICAgICAgICAgICAgICAgYmFzZS0+Q1RBUlt3aGljaEN0YXJdID0gKGJhc2UtPkNUQVJbd2hpY2hDdGFyXSAmICh+U1BJX0NUQVJfUERUX01BU0spICYgKH5TUElfQ1RBUl9EVF9NQVNLKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSV9DVEFSX1BEVChwcmVzY2FsZXIpIHwgU1BJX0NUQVJfRFQoc2NhbGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3VpbnQzMl90IERTUElfTWFzdGVyU2V0RGVsYXlUaW1lcyhTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX2N0YXJfc2VsZWN0aW9uX3Qgd2hpY2hDdGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfZGVsYXlfdHlwZV90IHdoaWNoRGVsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjQ2xvY2tfSHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGVsYXlUaW1lSW5OYW5vU2VjKQoreworICAgIC8qIGZvciBtYXN0ZXIgbW9kZSBjb25maWd1cmF0aW9uLCBpZiBzbGF2ZSBtb2RlIGRldGVjdGVkLCByZXR1cm4gMCAqLworICAgIGlmICghRFNQSV9Jc01hc3RlcihiYXNlKSkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHVpbnQzMl90IHByZXNjYWxlciwgYmVzdFByZXNjYWxlcjsKKyAgICB1aW50MzJfdCBzY2FsZXIsIGJlc3RTY2FsZXI7CisgICAgdWludDMyX3QgcmVhbERlbGF5LCBiZXN0RGVsYXk7CisgICAgdWludDMyX3QgZGlmZiwgbWluX2RpZmY7CisgICAgdWludDMyX3QgaW5pdGlhbERlbGF5TmFub1NlYzsKKworICAgIC8qIGZpbmQgY29tYmluYXRpb24gb2YgcHJlc2NhbGVyIGFuZCBzY2FsZXIgcmVzdWx0aW5nIGluIHRoZSBkZWxheSBjbG9zZXN0IHRvIHRoZQorICAgICogcmVxdWVzdGVkIHZhbHVlCisgICAgKi8KKyAgICBtaW5fZGlmZiA9IDB4RkZGRkZGRkZVOworICAgIC8qIEluaXRpYWxpemUgcHJlc2NhbGVyIGFuZCBzY2FsZXIgdG8gdGhlaXIgbWF4IHZhbHVlcyB0byBnZW5lcmF0ZSB0aGUgbWF4IGRlbGF5ICovCisgICAgYmVzdFByZXNjYWxlciA9IDB4MzsKKyAgICBiZXN0U2NhbGVyID0gMHhGOworICAgIGJlc3REZWxheSA9ICgoKDEwMDAwMDAwMDBVICogNCkgLyBzcmNDbG9ja19IeikgKiBzX2RlbGF5UHJlc2NhbGVyW2Jlc3RQcmVzY2FsZXJdICogc19kZWxheVNjYWxlcltiZXN0U2NhbGVyXSkgLyA0OworCisgICAgLyogRmlyc3QgY2FsY3VsYXRlIHRoZSBpbml0aWFsLCBkZWZhdWx0IGRlbGF5ICovCisgICAgaW5pdGlhbERlbGF5TmFub1NlYyA9IDEwMDAwMDAwMDBVIC8gc3JjQ2xvY2tfSHogKiAyOworCisgICAgLyogSWYgdGhlIGluaXRpYWwsIGRlZmF1bHQgZGVsYXkgaXMgYWxyZWFkeSBncmVhdGVyIHRoYW4gdGhlIGRlc2lyZWQgZGVsYXksIHRoZW4KKyAgICAqIHNldCB0aGUgZGVsYXlzIHRvIHRoZWlyIGluaXRpYWwgdmFsdWUgKDApIGFuZCByZXR1cm4gdGhlIGRlbGF5LiBJbiBvdGhlciB3b3JkcywKKyAgICAqIHRoZXJlIGlzIG5vIHdheSB0byBkZWNyZWFzZSB0aGUgZGVsYXkgdmFsdWUgZnVydGhlci4KKyAgICAqLworICAgIGlmIChpbml0aWFsRGVsYXlOYW5vU2VjID49IGRlbGF5VGltZUluTmFub1NlYykKKyAgICB7CisgICAgICAgIERTUElfTWFzdGVyU2V0RGVsYXlTY2FsZXIoYmFzZSwgd2hpY2hDdGFyLCAwLCAwLCB3aGljaERlbGF5KTsKKyAgICAgICAgcmV0dXJuIGluaXRpYWxEZWxheU5hbm9TZWM7CisgICAgfQorCisgICAgLyogSW4gYWxsIGZvciBsb29wcywgaWYgbWluX2RpZmYgPSAwLCB0aGUgZXhpdCBmb3IgbG9vcCAqLworICAgIGZvciAocHJlc2NhbGVyID0gMDsgKHByZXNjYWxlciA8IDQpICYmIG1pbl9kaWZmOyBwcmVzY2FsZXIrKykKKyAgICB7CisgICAgICAgIGZvciAoc2NhbGVyID0gMDsgKHNjYWxlciA8IDE2KSAmJiBtaW5fZGlmZjsgc2NhbGVyKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWxEZWxheSA9ICgoNDAwMDAwMDAwMFUgLyBzcmNDbG9ja19IeikgKiBzX2RlbGF5UHJlc2NhbGVyW3ByZXNjYWxlcl0gKiBzX2RlbGF5U2NhbGVyW3NjYWxlcl0pIC8gNDsKKworICAgICAgICAgICAgLyogY2FsY3VsYXRlIHRoZSBkZWxheSBkaWZmZXJlbmNlIGJhc2VkIG9uIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQKKyAgICAgICAgICAgICogdGhhdCBzdGF0ZXMgdGhhdCB0aGUgY2FsY3VsYXRlZCBkZWxheSBtdXN0IG5vdCBiZSBsZXNzIHRoZW4gdGhlIGRlc2lyZWQgZGVsYXkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAocmVhbERlbGF5ID49IGRlbGF5VGltZUluTmFub1NlYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkaWZmID0gcmVhbERlbGF5IC0gZGVsYXlUaW1lSW5OYW5vU2VjOworICAgICAgICAgICAgICAgIGlmIChtaW5fZGlmZiA+IGRpZmYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBhIGJldHRlciBtYXRjaCBmb3VuZCAqLworICAgICAgICAgICAgICAgICAgICBtaW5fZGlmZiA9IGRpZmY7CisgICAgICAgICAgICAgICAgICAgIGJlc3RQcmVzY2FsZXIgPSBwcmVzY2FsZXI7CisgICAgICAgICAgICAgICAgICAgIGJlc3RTY2FsZXIgPSBzY2FsZXI7CisgICAgICAgICAgICAgICAgICAgIGJlc3REZWxheSA9IHJlYWxEZWxheTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiB3cml0ZSB0aGUgYmVzdCBkYnIsIHByZXNjYWxhciwgYW5kIGJhdWQgcmF0ZSBzY2FsYXIgdG8gdGhlIENUQVIgKi8KKyAgICBEU1BJX01hc3RlclNldERlbGF5U2NhbGVyKGJhc2UsIHdoaWNoQ3RhciwgYmVzdFByZXNjYWxlciwgYmVzdFNjYWxlciwgd2hpY2hEZWxheSk7CisKKyAgICAvKiByZXR1cm4gdGhlIGFjdHVhbCBjYWxjdWxhdGVkIGJhdWQgcmF0ZSAqLworICAgIHJldHVybiBiZXN0RGVsYXk7Cit9CisKK3ZvaWQgRFNQSV9HZXREZWZhdWx0RGF0YUNvbW1hbmRDb25maWcoZHNwaV9jb21tYW5kX2RhdGFfY29uZmlnX3QgKmNvbW1hbmQpCit7CisgICAgYXNzZXJ0KGNvbW1hbmQpOworCisgICAgY29tbWFuZC0+aXNQY3NDb250aW51b3VzID0gZmFsc2U7CisgICAgY29tbWFuZC0+d2hpY2hDdGFyID0ga0RTUElfQ3RhcjA7CisgICAgY29tbWFuZC0+d2hpY2hQY3MgPSBrRFNQSV9QY3MwOworICAgIGNvbW1hbmQtPmlzRW5kT2ZRdWV1ZSA9IGZhbHNlOworICAgIGNvbW1hbmQtPmNsZWFyVHJhbnNmZXJDb3VudCA9IGZhbHNlOworfQorCit2b2lkIERTUElfTWFzdGVyV3JpdGVEYXRhQmxvY2tpbmcoU1BJX1R5cGUgKmJhc2UsIGRzcGlfY29tbWFuZF9kYXRhX2NvbmZpZ190ICpjb21tYW5kLCB1aW50MTZfdCBkYXRhKQoreworICAgIGFzc2VydChjb21tYW5kKTsKKworICAgIC8qIEZpcnN0LCBjbGVhciBUcmFuc21pdCBDb21wbGV0ZSBGbGFnIChUQ0YpICovCisgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Q29tcGxldGVGbGFnKTsKKworICAgIHdoaWxlICghKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpKQorICAgIHsKKyAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisgICAgfQorCisgICAgYmFzZS0+UFVTSFIgPSBTUElfUFVTSFJfQ09OVChjb21tYW5kLT5pc1Bjc0NvbnRpbnVvdXMpIHwgU1BJX1BVU0hSX0NUQVMoY29tbWFuZC0+d2hpY2hDdGFyKSB8CisgICAgICAgICAgICAgICAgICBTUElfUFVTSFJfUENTKGNvbW1hbmQtPndoaWNoUGNzKSB8IFNQSV9QVVNIUl9FT1EoY29tbWFuZC0+aXNFbmRPZlF1ZXVlKSB8CisgICAgICAgICAgICAgICAgICBTUElfUFVTSFJfQ1RDTlQoY29tbWFuZC0+Y2xlYXJUcmFuc2ZlckNvdW50KSB8IFNQSV9QVVNIUl9UWERBVEEoZGF0YSk7CisgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisKKyAgICAvKiBXYWl0IHRpbGwgVENGIHNldHMgKi8KKyAgICB3aGlsZSAoIShEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhDb21wbGV0ZUZsYWcpKQorICAgIHsKKyAgICB9Cit9CisKK3ZvaWQgRFNQSV9NYXN0ZXJXcml0ZUNvbW1hbmREYXRhQmxvY2tpbmcoU1BJX1R5cGUgKmJhc2UsIHVpbnQzMl90IGRhdGEpCit7CisgICAgLyogRmlyc3QsIGNsZWFyIFRyYW5zbWl0IENvbXBsZXRlIEZsYWcgKFRDRikgKi8KKyAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhDb21wbGV0ZUZsYWcpOworCisgICAgd2hpbGUgKCEoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZykpCisgICAgeworICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKyAgICB9CisKKyAgICBiYXNlLT5QVVNIUiA9IGRhdGE7CisKKyAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKworICAgIC8qIFdhaXQgdGlsbCBUQ0Ygc2V0cyAqLworICAgIHdoaWxlICghKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeENvbXBsZXRlRmxhZykpCisgICAgeworICAgIH0KK30KKwordm9pZCBEU1BJX1NsYXZlV3JpdGVEYXRhQmxvY2tpbmcoU1BJX1R5cGUgKmJhc2UsIHVpbnQzMl90IGRhdGEpCit7CisgICAgLyogRmlyc3QsIGNsZWFyIFRyYW5zbWl0IENvbXBsZXRlIEZsYWcgKFRDRikgKi8KKyAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhDb21wbGV0ZUZsYWcpOworCisgICAgd2hpbGUgKCEoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZykpCisgICAgeworICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKyAgICB9CisKKyAgICBiYXNlLT5QVVNIUl9TTEFWRSA9IGRhdGE7CisKKyAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKworICAgIC8qIFdhaXQgdGlsbCBUQ0Ygc2V0cyAqLworICAgIHdoaWxlICghKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeENvbXBsZXRlRmxhZykpCisgICAgeworICAgIH0KK30KKwordm9pZCBEU1BJX0VuYWJsZUludGVycnVwdHMoU1BJX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgaWYgKG1hc2sgJiBTUElfUlNFUl9URkZGX1JFX01BU0spCisgICAgeworICAgICAgICBiYXNlLT5SU0VSICY9IH5TUElfUlNFUl9URkZGX0RJUlNfTUFTSzsKKyAgICB9CisgICAgaWYgKG1hc2sgJiBTUElfUlNFUl9SRkRGX1JFX01BU0spCisgICAgeworICAgICAgICBiYXNlLT5SU0VSICY9IH5TUElfUlNFUl9SRkRGX0RJUlNfTUFTSzsKKyAgICB9CisgICAgYmFzZS0+UlNFUiB8PSBtYXNrOworfQorCisvKlRyYW5zYWN0aW9uYWwgQVBJcyAtLSBNYXN0ZXIqLworCit2b2lkIERTUElfTWFzdGVyVHJhbnNmZXJDcmVhdGVIYW5kbGUoU1BJX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX21hc3Rlcl90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgLyogWmVybyB0aGUgaGFuZGxlLiAqLworICAgIG1lbXNldChoYW5kbGUsIDAsIHNpemVvZigqaGFuZGxlKSk7CisKKyAgICBnX2RzcGlIYW5kbGVbRFNQSV9HZXRJbnN0YW5jZShiYXNlKV0gPSBoYW5kbGU7CisKKyAgICBoYW5kbGUtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgaGFuZGxlLT51c2VyRGF0YSA9IHVzZXJEYXRhOworfQorCitzdGF0dXNfdCBEU1BJX01hc3RlclRyYW5zZmVyQmxvY2tpbmcoU1BJX1R5cGUgKmJhc2UsIGRzcGlfdHJhbnNmZXJfdCAqdHJhbnNmZXIpCit7CisgICAgYXNzZXJ0KHRyYW5zZmVyKTsKKworICAgIHVpbnQxNl90IHdvcmRUb1NlbmQgPSAwOworICAgIHVpbnQxNl90IHdvcmRSZWNlaXZlZCA9IDA7CisgICAgdWludDhfdCBkdW1teURhdGEgPSBEU1BJX0RVTU1ZX0RBVEE7CisgICAgdWludDhfdCBiaXRzUGVyRnJhbWU7CisKKyAgICB1aW50MzJfdCBjb21tYW5kOworICAgIHVpbnQzMl90IGxhc3RDb21tYW5kOworCisgICAgdWludDhfdCAqdHhEYXRhOworICAgIHVpbnQ4X3QgKnJ4RGF0YTsKKyAgICB1aW50MzJfdCByZW1haW5pbmdTZW5kQnl0ZUNvdW50OworICAgIHVpbnQzMl90IHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisKKyAgICB1aW50MzJfdCBmaWZvU2l6ZTsKKyAgICBkc3BpX2NvbW1hbmRfZGF0YV9jb25maWdfdCBjb21tYW5kU3RydWN0OworCisgICAgLyogSWYgdGhlIHRyYW5zZmVyIGNvdW50IGlzIHplcm8sIHRoZW4gcmV0dXJuIGltbWVkaWF0ZWx5LiovCisgICAgaWYgKHRyYW5zZmVyLT5kYXRhU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIERTUElfU3RvcFRyYW5zZmVyKGJhc2UpOworICAgIERTUElfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0RTUElfQWxsSW50ZXJydXB0RW5hYmxlKTsKKyAgICBEU1BJX0ZsdXNoRmlmbyhiYXNlLCB0cnVlLCB0cnVlKTsKKyAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfQWxsU3RhdHVzRmxhZyk7CisKKyAgICAvKkNhbGN1bGF0ZSB0aGUgY29tbWFuZCBhbmQgbGFzdENvbW1hbmQqLworICAgIGNvbW1hbmRTdHJ1Y3Qud2hpY2hQY3MgPQorICAgICAgICAoZHNwaV93aGljaF9wY3NfdCkoMVUgPDwgKCh0cmFuc2Zlci0+Y29uZmlnRmxhZ3MgJiBEU1BJX01BU1RFUl9QQ1NfTUFTSykgPj4gRFNQSV9NQVNURVJfUENTX1NISUZUKSk7CisgICAgY29tbWFuZFN0cnVjdC5pc0VuZE9mUXVldWUgPSBmYWxzZTsKKyAgICBjb21tYW5kU3RydWN0LmNsZWFyVHJhbnNmZXJDb3VudCA9IGZhbHNlOworICAgIGNvbW1hbmRTdHJ1Y3Qud2hpY2hDdGFyID0KKyAgICAgICAgKGRzcGlfY3Rhcl9zZWxlY3Rpb25fdCkoKHRyYW5zZmVyLT5jb25maWdGbGFncyAmIERTUElfTUFTVEVSX0NUQVJfTUFTSykgPj4gRFNQSV9NQVNURVJfQ1RBUl9TSElGVCk7CisgICAgY29tbWFuZFN0cnVjdC5pc1Bjc0NvbnRpbnVvdXMgPSAoYm9vbCkodHJhbnNmZXItPmNvbmZpZ0ZsYWdzICYga0RTUElfTWFzdGVyUGNzQ29udGludW91cyk7CisKKyAgICBjb21tYW5kID0gRFNQSV9NYXN0ZXJHZXRGb3JtYXR0ZWRDb21tYW5kKCYoY29tbWFuZFN0cnVjdCkpOworCisgICAgY29tbWFuZFN0cnVjdC5pc0VuZE9mUXVldWUgPSB0cnVlOworICAgIGNvbW1hbmRTdHJ1Y3QuaXNQY3NDb250aW51b3VzID0gKGJvb2wpKHRyYW5zZmVyLT5jb25maWdGbGFncyAmIGtEU1BJX01hc3RlckFjdGl2ZUFmdGVyVHJhbnNmZXIpOworICAgIGxhc3RDb21tYW5kID0gRFNQSV9NYXN0ZXJHZXRGb3JtYXR0ZWRDb21tYW5kKCYoY29tbWFuZFN0cnVjdCkpOworCisgICAgLypDYWxjdWxhdGUgdGhlIGJpdHNQZXJGcmFtZSovCisgICAgYml0c1BlckZyYW1lID0gKChiYXNlLT5DVEFSW2NvbW1hbmRTdHJ1Y3Qud2hpY2hDdGFyXSAmIFNQSV9DVEFSX0ZNU1pfTUFTSykgPj4gU1BJX0NUQVJfRk1TWl9TSElGVCkgKyAxOworCisgICAgdHhEYXRhID0gdHJhbnNmZXItPnR4RGF0YTsKKyAgICByeERhdGEgPSB0cmFuc2Zlci0+cnhEYXRhOworICAgIHJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisgICAgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA9IHRyYW5zZmVyLT5kYXRhU2l6ZTsKKworICAgIGlmICgoYmFzZS0+TUNSICYgU1BJX01DUl9ESVNfUlhGX01BU0spIHx8IChiYXNlLT5NQ1IgJiBTUElfTUNSX0RJU19UWEZfTUFTSykpCisgICAgeworICAgICAgICBmaWZvU2l6ZSA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZpZm9TaXplID0gRlNMX0ZFQVRVUkVfRFNQSV9GSUZPX1NJWkVuKGJhc2UpOworICAgIH0KKworICAgIERTUElfU3RhcnRUcmFuc2ZlcihiYXNlKTsKKworICAgIGlmIChiaXRzUGVyRnJhbWUgPD0gOCkKKyAgICB7CisgICAgICAgIHdoaWxlIChyZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIShEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0eERhdGEgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gKCp0eERhdGEpIHwgKGxhc3RDb21tYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdHhEYXRhKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gKGxhc3RDb21tYW5kKSB8IChkdW1teURhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdTZW5kQnl0ZUNvdW50LS07CisKKyAgICAgICAgICAgICAgICB3aGlsZSAocmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEZsYWcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyeERhdGEgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGRhdGEgZnJvbSBQT1BSKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHJ4RGF0YSkgPSBEU1BJX1JlYWREYXRhKGJhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4RGF0YSsrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUElfUmVhZERhdGEoYmFzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50LS07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RGbGFnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKldhaXQgdW50aWwgVHggRmlmbyBpcyBub3QgZnVsbCovCisgICAgICAgICAgICAgICAgd2hpbGUgKCEoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHR4RGF0YSAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFIgPSBjb21tYW5kIHwgKHVpbnQxNl90KSgqdHhEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgdHhEYXRhKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gY29tbWFuZCB8IGR1bW15RGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVtYWluaW5nU2VuZEJ5dGVDb3VudC0tOworCisgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoKHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgLSByZW1haW5pbmdTZW5kQnl0ZUNvdW50KSA+PSBmaWZvU2l6ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0RmxhZykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ4RGF0YSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocnhEYXRhKSA9IERTUElfUmVhZERhdGEoYmFzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhEYXRhKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSV9SZWFkRGF0YShiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQtLTsKKworICAgICAgICAgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEZsYWcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdoaWxlIChyZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPD0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIShEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0eERhdGEgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKHR4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICsrdHhEYXRhOworCisgICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCB8PSAodW5zaWduZWQpKCoodHhEYXRhKSkgPDwgOFU7CisgICAgICAgICAgICAgICAgICAgICAgICArK3R4RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gZHVtbXlEYXRhOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gbGFzdENvbW1hbmQgfCB3b3JkVG9TZW5kOworCisgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9IDA7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAocmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEZsYWcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRSZWNlaXZlZCA9IERTUElfUmVhZERhdGEoYmFzZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ICE9IDEpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ4RGF0YSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihyeERhdGEpID0gd29yZFJlY2VpdmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3J4RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihyeERhdGEpID0gd29yZFJlY2VpdmVkID4+IDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcnhEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50IC09IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ4RGF0YSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihyeERhdGEpID0gd29yZFJlY2VpdmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3J4RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudC0tOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEZsYWcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qV2FpdCB1bnRpbCBUeCBGaWZvIGlzIG5vdCBmdWxsKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoIShEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0eERhdGEgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKHR4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICsrdHhEYXRhOworICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kIHw9ICh1bnNpZ25lZCkoKih0eERhdGEpKSA8PCA4VTsKKyAgICAgICAgICAgICAgICAgICAgKyt0eERhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSBkdW1teURhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gY29tbWFuZCB8IHdvcmRUb1NlbmQ7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nU2VuZEJ5dGVDb3VudCAtPSAyOworCisgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoKChyZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50IC0gcmVtYWluaW5nU2VuZEJ5dGVDb3VudCkgLyAyKSA+PSBmaWZvU2l6ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0RmxhZykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd29yZFJlY2VpdmVkID0gRFNQSV9SZWFkRGF0YShiYXNlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ4RGF0YSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyeERhdGEgPSB3b3JkUmVjZWl2ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytyeERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJ4RGF0YSA9IHdvcmRSZWNlaXZlZCA+PiA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcnhEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCAtPSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0RmxhZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0aWMgdm9pZCBEU1BJX01hc3RlclRyYW5zZmVyUHJlcGFyZShTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgZHNwaV90cmFuc2Zlcl90ICp0cmFuc2ZlcikKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQodHJhbnNmZXIpOworCisgICAgZHNwaV9jb21tYW5kX2RhdGFfY29uZmlnX3QgY29tbWFuZFN0cnVjdDsKKworICAgIERTUElfU3RvcFRyYW5zZmVyKGJhc2UpOworICAgIERTUElfRmx1c2hGaWZvKGJhc2UsIHRydWUsIHRydWUpOworICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9BbGxTdGF0dXNGbGFnKTsKKworICAgIGNvbW1hbmRTdHJ1Y3Qud2hpY2hQY3MgPQorICAgICAgICAoZHNwaV93aGljaF9wY3NfdCkoMVUgPDwgKCh0cmFuc2Zlci0+Y29uZmlnRmxhZ3MgJiBEU1BJX01BU1RFUl9QQ1NfTUFTSykgPj4gRFNQSV9NQVNURVJfUENTX1NISUZUKSk7CisgICAgY29tbWFuZFN0cnVjdC5pc0VuZE9mUXVldWUgPSBmYWxzZTsKKyAgICBjb21tYW5kU3RydWN0LmNsZWFyVHJhbnNmZXJDb3VudCA9IGZhbHNlOworICAgIGNvbW1hbmRTdHJ1Y3Qud2hpY2hDdGFyID0KKyAgICAgICAgKGRzcGlfY3Rhcl9zZWxlY3Rpb25fdCkoKHRyYW5zZmVyLT5jb25maWdGbGFncyAmIERTUElfTUFTVEVSX0NUQVJfTUFTSykgPj4gRFNQSV9NQVNURVJfQ1RBUl9TSElGVCk7CisgICAgY29tbWFuZFN0cnVjdC5pc1Bjc0NvbnRpbnVvdXMgPSAoYm9vbCkodHJhbnNmZXItPmNvbmZpZ0ZsYWdzICYga0RTUElfTWFzdGVyUGNzQ29udGludW91cyk7CisgICAgaGFuZGxlLT5jb21tYW5kID0gRFNQSV9NYXN0ZXJHZXRGb3JtYXR0ZWRDb21tYW5kKCYoY29tbWFuZFN0cnVjdCkpOworCisgICAgY29tbWFuZFN0cnVjdC5pc0VuZE9mUXVldWUgPSB0cnVlOworICAgIGNvbW1hbmRTdHJ1Y3QuaXNQY3NDb250aW51b3VzID0gKGJvb2wpKHRyYW5zZmVyLT5jb25maWdGbGFncyAmIGtEU1BJX01hc3RlckFjdGl2ZUFmdGVyVHJhbnNmZXIpOworICAgIGhhbmRsZS0+bGFzdENvbW1hbmQgPSBEU1BJX01hc3RlckdldEZvcm1hdHRlZENvbW1hbmQoJihjb21tYW5kU3RydWN0KSk7CisKKyAgICBoYW5kbGUtPmJpdHNQZXJGcmFtZSA9ICgoYmFzZS0+Q1RBUltjb21tYW5kU3RydWN0LndoaWNoQ3Rhcl0gJiBTUElfQ1RBUl9GTVNaX01BU0spID4+IFNQSV9DVEFSX0ZNU1pfU0hJRlQpICsgMTsKKworICAgIGlmICgoYmFzZS0+TUNSICYgU1BJX01DUl9ESVNfUlhGX01BU0spIHx8IChiYXNlLT5NQ1IgJiBTUElfTUNSX0RJU19UWEZfTUFTSykpCisgICAgeworICAgICAgICBoYW5kbGUtPmZpZm9TaXplID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaGFuZGxlLT5maWZvU2l6ZSA9IEZTTF9GRUFUVVJFX0RTUElfRklGT19TSVpFbihiYXNlKTsKKyAgICB9CisgICAgaGFuZGxlLT50eERhdGEgPSB0cmFuc2Zlci0+dHhEYXRhOworICAgIGhhbmRsZS0+cnhEYXRhID0gdHJhbnNmZXItPnJ4RGF0YTsKKyAgICBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisgICAgaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID0gdHJhbnNmZXItPmRhdGFTaXplOworICAgIGhhbmRsZS0+dG90YWxCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7Cit9CisKK3N0YXR1c190IERTUElfTWFzdGVyVHJhbnNmZXJOb25CbG9ja2luZyhTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgZHNwaV90cmFuc2Zlcl90ICp0cmFuc2ZlcikKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQodHJhbnNmZXIpOworCisgICAgLyogSWYgdGhlIHRyYW5zZmVyIGNvdW50IGlzIHplcm8sIHRoZW4gcmV0dXJuIGltbWVkaWF0ZWx5LiovCisgICAgaWYgKHRyYW5zZmVyLT5kYXRhU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIENoZWNrIHRoYXQgd2UncmUgbm90IGJ1c3kuKi8KKyAgICBpZiAoaGFuZGxlLT5zdGF0ZSA9PSBrRFNQSV9CdXN5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRFNQSV9CdXN5OworICAgIH0KKworICAgIGhhbmRsZS0+c3RhdGUgPSBrRFNQSV9CdXN5OworCisgICAgRFNQSV9NYXN0ZXJUcmFuc2ZlclByZXBhcmUoYmFzZSwgaGFuZGxlLCB0cmFuc2Zlcik7CisgICAgRFNQSV9TdGFydFRyYW5zZmVyKGJhc2UpOworCisgICAgLyogRW5hYmxlIHRoZSBOVklDIGZvciBEU1BJIHBlcmlwaGVyYWwuICovCisgICAgRW5hYmxlSVJRKHNfZHNwaUlSUVtEU1BJX0dldEluc3RhbmNlKGJhc2UpXSk7CisKKyAgICBEU1BJX01hc3RlclRyYW5zZmVyRmlsbFVwVHhGaWZvKGJhc2UsIGhhbmRsZSk7CisKKyAgICAvKiBSWCBGSUZPIERyYWluIHJlcXVlc3Q6IFJGREZfUkUgdG8gZW5hYmxlIFJGREYgaW50ZXJydXB0CisgICAgKiBTaW5jZSBTUEkgaXMgYSBzeW5jaHJvbm91cyBpbnRlcmZhY2UsIHdlIG9ubHkgbmVlZCB0byBlbmFibGUgdGhlIFJYIGludGVycnVwdC4KKyAgICAqIFRoZSBJUlEgaGFuZGxlciB3aWxsIGdldCB0aGUgc3RhdHVzIG9mIFJYIGFuZCBUWCBpbnRlcnJ1cHQgZmxhZ3MuCisgICAgKi8KKyAgICBzX2RzcGlNYXN0ZXJJc3IgPSBEU1BJX01hc3RlclRyYW5zZmVySGFuZGxlSVJROworCisgICAgRFNQSV9FbmFibGVJbnRlcnJ1cHRzKGJhc2UsIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEludGVycnVwdEVuYWJsZSk7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBEU1BJX01hc3RlclRyYW5zZmVyR2V0Q291bnQoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsIHNpemVfdCAqY291bnQpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICBpZiAoIWNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIENhdGNoIHdoZW4gdGhlcmUgaXMgbm90IGFuIGFjdGl2ZSB0cmFuc2Zlci4gKi8KKyAgICBpZiAoaGFuZGxlLT5zdGF0ZSAhPSBrRFNQSV9CdXN5KQorICAgIHsKKyAgICAgICAgKmNvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3M7CisgICAgfQorCisgICAgKmNvdW50ID0gaGFuZGxlLT50b3RhbEJ5dGVDb3VudCAtIGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0aWMgdm9pZCBEU1BJX01hc3RlclRyYW5zZmVyQ29tcGxldGUoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICAvKiBEaXNhYmxlIGludGVycnVwdCByZXF1ZXN0cyovCisgICAgRFNQSV9EaXNhYmxlSW50ZXJydXB0cyhiYXNlLCBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RJbnRlcnJ1cHRFbmFibGUgfCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEludGVycnVwdEVuYWJsZSk7CisKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSAwOworICAgIGlmIChoYW5kbGUtPnN0YXRlID09IGtEU1BJX0Vycm9yKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19EU1BJX0Vycm9yOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgfQorCisgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0lkbGU7CisKKyAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICB7CisgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgaGFuZGxlLCBzdGF0dXMsIGhhbmRsZS0+dXNlckRhdGEpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgRFNQSV9NYXN0ZXJUcmFuc2ZlckZpbGxVcFR4RmlmbyhTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIHVpbnQxNl90IHdvcmRUb1NlbmQgPSAwOworICAgIHVpbnQ4X3QgZHVtbXlEYXRhID0gRFNQSV9EVU1NWV9EQVRBOworCisgICAgLyogSWYgYml0cy9mcmFtZSBpcyBncmVhdGVyIHRoYW4gb25lIGJ5dGUgKi8KKyAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPiA4KQorICAgIHsKKyAgICAgICAgLyogRmlsbCB0aGUgZmlmbyB1bnRpbCBpdCBpcyBmdWxsIG9yIHVudGlsIHRoZSBzZW5kIHdvcmQgY291bnQgaXMgMCBvciB1bnRpbCB0aGUgZGlmZmVyZW5jZQorICAgICAgICAqIGJldHdlZW4gdGhlIHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgYW5kIHJlbWFpbmluZ1NlbmRCeXRlQ291bnQgZXF1YWxzIHRoZSBGSUZPIGRlcHRoLgorICAgICAgICAqIFRoZSByZWFzb24gZm9yIGNoZWNraW5nIHRoZSBkaWZmZXJlbmNlIGlzIHRvIGVuc3VyZSB3ZSBvbmx5IHNlbmQgYXMgbXVjaCBhcyB0aGUKKyAgICAgICAgKiBSWCBGSUZPIGNhbiByZWNlaXZlLgorICAgICAgICAqIEZvciB0aGlzIGNhc2Ugd2hlcmUgYml0c1BlckZyYW1lID4gOCwgZWFjaCBlbnRyeSBpbiB0aGUgRklGTyBjb250YWlucyAyIGJ5dGVzIG9mIHRoZQorICAgICAgICAqIHNlbmQgZGF0YSwgaGVuY2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCBhbmQKKyAgICAgICAgKiByZW1haW5pbmdTZW5kQnl0ZUNvdW50IG11c3QgYmUgZGl2aWRlZCBieSAyIHRvIGNvbnZlcnQgdGhpcyBkaWZmZXJlbmNlIGludG8gYQorICAgICAgICAqIDE2LWJpdCAoMiBieXRlKSB2YWx1ZS4KKyAgICAgICAgKi8KKyAgICAgICAgd2hpbGUgKChEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKSAmJgorICAgICAgICAgICAgICAgKChoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgLSBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQpIC8gMiA8IGhhbmRsZS0+Zmlmb1NpemUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IDw9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9PSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gKihoYW5kbGUtPnR4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gKihoYW5kbGUtPnR4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOyAvKiBpbmNyZW1lbnQgdG8gbmV4dCBkYXRhIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgfD0gKHVuc2lnbmVkKSgqKGhhbmRsZS0+dHhEYXRhKSkgPDwgOFU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9IGR1bW15RGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBiYXNlLT5QVVNIUiA9IGhhbmRsZS0+bGFzdENvbW1hbmQgfCB3b3JkVG9TZW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogRm9yIGFsbCB3b3JkcyBleGNlcHQgdGhlIGxhc3Qgd29yZCAqLworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKGhhbmRsZS0+dHhEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnR4RGF0YTsgLyogaW5jcmVtZW50IHRvIG5leHQgZGF0YSBieXRlICovCisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgfD0gKHVuc2lnbmVkKSgqKGhhbmRsZS0+dHhEYXRhKSkgPDwgOFU7CisgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT50eERhdGE7IC8qIGluY3JlbWVudCB0byBuZXh0IGRhdGEgYnl0ZSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gZHVtbXlEYXRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLT0gMjsgLyogZGVjcmVtZW50IHJlbWFpbmluZ1NlbmRCeXRlQ291bnQgYnkgMiAqLworICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gaGFuZGxlLT5jb21tYW5kIHwgd29yZFRvU2VuZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogVHJ5IHRvIGNsZWFyIHRoZSBURkZGOyBpZiB0aGUgVFggRklGTyBpcyBmdWxsIHRoaXMgd2lsbCBjbGVhciAqLworICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisKKyAgICAgICAgICAgIC8qIGV4aXQgbG9vcCBpZiBzZW5kIGNvdW50IGlzIHplcm8sIGVsc2UgdXBkYXRlIGxvY2FsIHZhcmlhYmxlcyBmb3IgbmV4dCBsb29wICovCisgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gLyogRW5kIG9mIFRYIEZJRk8gZmlsbCB3aGlsZSBsb29wICovCisgICAgfQorICAgIC8qIE9wdGltaXplZCBmb3IgYml0cy9mcmFtZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb25lIGJ5dGUuICovCisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRmlsbCB0aGUgZmlmbyB1bnRpbCBpdCBpcyBmdWxsIG9yIHVudGlsIHRoZSBzZW5kIHdvcmQgY291bnQgaXMgMCBvciB1bnRpbCB0aGUgZGlmZmVyZW5jZQorICAgICAgICAqIGJldHdlZW4gdGhlIHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgYW5kIHJlbWFpbmluZ1NlbmRCeXRlQ291bnQgZXF1YWxzIHRoZSBGSUZPIGRlcHRoLgorICAgICAgICAqIFRoZSByZWFzb24gZm9yIGNoZWNraW5nIHRoZSBkaWZmZXJlbmNlIGlzIHRvIGVuc3VyZSB3ZSBvbmx5IHNlbmQgYXMgbXVjaCBhcyB0aGUKKyAgICAgICAgKiBSWCBGSUZPIGNhbiByZWNlaXZlLgorICAgICAgICAqLworICAgICAgICB3aGlsZSAoKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpICYmCisgICAgICAgICAgICAgICAoKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCAtIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCkgPCBoYW5kbGUtPmZpZm9TaXplKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKGhhbmRsZS0+dHhEYXRhKTsKKyAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSBkdW1teURhdGE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXNlLT5QVVNIUiA9IGhhbmRsZS0+bGFzdENvbW1hbmQgfCB3b3JkVG9TZW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gaGFuZGxlLT5jb21tYW5kIHwgd29yZFRvU2VuZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogVHJ5IHRvIGNsZWFyIHRoZSBURkZGOyBpZiB0aGUgVFggRklGTyBpcyBmdWxsIHRoaXMgd2lsbCBjbGVhciAqLworICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisKKyAgICAgICAgICAgIC0taGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50OworCisgICAgICAgICAgICAvKiBleGl0IGxvb3AgaWYgc2VuZCBjb3VudCBpcyB6ZXJvLCBlbHNlIHVwZGF0ZSBsb2NhbCB2YXJpYWJsZXMgZm9yIG5leHQgbG9vcCAqLworICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIERTUElfTWFzdGVyVHJhbnNmZXJBYm9ydChTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIERTUElfU3RvcFRyYW5zZmVyKGJhc2UpOworCisgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHQgcmVxdWVzdHMqLworICAgIERTUElfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0SW50ZXJydXB0RW5hYmxlIHwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RJbnRlcnJ1cHRFbmFibGUpOworCisgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0lkbGU7Cit9CisKK3ZvaWQgRFNQSV9NYXN0ZXJUcmFuc2ZlckhhbmRsZUlSUShTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIC8qIFJFQ0VJVkUgSVJRIGhhbmRsZXI6IENoZWNrIHJlYWQgYnVmZmVyIG9ubHkgaWYgdGhlcmUgYXJlIHJlbWFpbmluZyBieXRlcyB0byByZWFkLiAqLworICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQpCisgICAgeworICAgICAgICAvKiBDaGVjayByZWFkIGJ1ZmZlci4qLworICAgICAgICB1aW50MTZfdCB3b3JkUmVjZWl2ZWQ7IC8qIE1heGltdW0gc3VwcG9ydGVkIGRhdGEgYml0IGxlbmd0aCBpbiBtYXN0ZXIgbW9kZSBpcyAxNi1iaXRzICovCisKKyAgICAgICAgLyogSWYgYml0cy9mcmFtZSBpcyBncmVhdGVyIHRoYW4gb25lIGJ5dGUgKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lID4gOCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RGbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdvcmRSZWNlaXZlZCA9IERTUElfUmVhZERhdGEoYmFzZSk7CisgICAgICAgICAgICAgICAgLyogY2xlYXIgdGhlIHJ4IGZpZm8gZHJhaW4gcmVxdWVzdCwgbmVlZGVkIGZvciBub24tRE1BIGFwcGxpY2F0aW9ucyBhcyB0aGlzIGZsYWcKKyAgICAgICAgICAgICAgICAqIHdpbGwgcmVtYWluIHNldCBldmVuIGlmIHRoZSByeCBmaWZvIGlzIGVtcHR5LiBCeSBtYW51YWxseSBjbGVhcmluZyB0aGlzIGZsYWcsIGl0CisgICAgICAgICAgICAgICAgKiBlaXRoZXIgcmVtYWluIGNsZWFyIGlmIG5vIG1vcmUgZGF0YSBpcyBpbiB0aGUgZmlmbywgb3IgaXQgd2lsbCBzZXQgaWYgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICAqIG1vcmUgZGF0YSBpbiB0aGUgZmlmby4KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RGbGFnKTsKKworICAgICAgICAgICAgICAgIC8qIFN0b3JlIHJlYWQgYnl0ZXMgaW50byByeCBidWZmZXIgb25seSBpZiBhIGJ1ZmZlciBwb2ludGVyIHdhcyBwcm92aWRlZCAqLworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJ4RGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIEZvciB0aGUgbGFzdCB3b3JkIHJlY2VpdmVkLCBpZiB0aGVyZSBpcyBhbiBleHRyYSBieXRlIGR1ZSB0byB0aGUgb2RkIHRyYW5zZmVyCisgICAgICAgICAgICAgICAgICAgICogYnl0ZSBjb3VudCwgb25seSBzYXZlIHRoZSB0aGUgbGFzdCBieXRlIGFuZCBkaXNjYXJkIHRoZSB1cHBlciBieXRlCisgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgKmhhbmRsZS0+cnhEYXRhID0gd29yZFJlY2VpdmVkOyAvKiBXcml0ZSBmaXJzdCBkYXRhIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC0taGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgKmhhbmRsZS0+cnhEYXRhID0gd29yZFJlY2VpdmVkOyAgICAgIC8qIFdyaXRlIGZpcnN0IGRhdGEgYnl0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnJ4RGF0YTsgICAgICAgICAgICAgICAgICAgIC8qIGluY3JlbWVudCB0byBuZXh0IGRhdGEgYnl0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgKmhhbmRsZS0+cnhEYXRhID0gd29yZFJlY2VpdmVkID4+IDg7IC8qIFdyaXRlIHNlY29uZCBkYXRhIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT5yeERhdGE7ICAgICAgICAgICAgICAgICAgICAvKiBpbmNyZW1lbnQgdG8gbmV4dCBkYXRhIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCAtPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8qIEVuZCBvZiBSWCBGSUZPIGRyYWluIHdoaWxlIGxvb3AgKi8KKyAgICAgICAgfQorICAgICAgICAvKiBPcHRpbWl6ZWQgZm9yIGJpdHMvZnJhbWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG9uZSBieXRlLiAqLworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0RmxhZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3b3JkUmVjZWl2ZWQgPSBEU1BJX1JlYWREYXRhKGJhc2UpOworICAgICAgICAgICAgICAgIC8qIGNsZWFyIHRoZSByeCBmaWZvIGRyYWluIHJlcXVlc3QsIG5lZWRlZCBmb3Igbm9uLURNQSBhcHBsaWNhdGlvbnMgYXMgdGhpcyBmbGFnCisgICAgICAgICAgICAgICAgKiB3aWxsIHJlbWFpbiBzZXQgZXZlbiBpZiB0aGUgcnggZmlmbyBpcyBlbXB0eS4gQnkgbWFudWFsbHkgY2xlYXJpbmcgdGhpcyBmbGFnLCBpdAorICAgICAgICAgICAgICAgICogZWl0aGVyIHJlbWFpbiBjbGVhciBpZiBubyBtb3JlIGRhdGEgaXMgaW4gdGhlIGZpZm8sIG9yIGl0IHdpbGwgc2V0IGlmIHRoZXJlIGlzCisgICAgICAgICAgICAgICAgKiBtb3JlIGRhdGEgaW4gdGhlIGZpZm8uCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0RmxhZyk7CisKKyAgICAgICAgICAgICAgICAvKiBTdG9yZSByZWFkIGJ5dGVzIGludG8gcnggYnVmZmVyIG9ubHkgaWYgYSBidWZmZXIgcG9pbnRlciB3YXMgcHJvdmlkZWQgKi8KKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yeERhdGEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqaGFuZGxlLT5yeERhdGEgPSB3b3JkUmVjZWl2ZWQ7CisgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT5yeERhdGE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8qIEVuZCBvZiBSWCBGSUZPIGRyYWluIHdoaWxlIGxvb3AgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENoZWNrIHdyaXRlIGJ1ZmZlci4gV2UgYWx3YXlzIGhhdmUgdG8gc2VuZCBhIHdvcmQgaW4gb3JkZXIgdG8ga2VlcCB0aGUgdHJhbnNmZXIKKyAgICAqIG1vdmluZy4gU28gaWYgdGhlIGNhbGxlciBkaWRuJ3QgcHJvdmlkZSBhIHNlbmQgYnVmZmVyLCB3ZSBqdXN0IHNlbmQgYSB6ZXJvLgorICAgICovCisgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCkKKyAgICB7CisgICAgICAgIERTUElfTWFzdGVyVHJhbnNmZXJGaWxsVXBUeEZpZm8oYmFzZSwgaGFuZGxlKTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBpZiB3ZSdyZSBkb25lIHdpdGggdGhpcyB0cmFuc2Zlci4qLworICAgIGlmICgoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDApICYmIChoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPT0gMCkpCisgICAgeworICAgICAgICAvKiBDb21wbGV0ZSB0aGUgdHJhbnNmZXIgYW5kIGRpc2FibGUgdGhlIGludGVycnVwdHMgKi8KKyAgICAgICAgRFNQSV9NYXN0ZXJUcmFuc2ZlckNvbXBsZXRlKGJhc2UsIGhhbmRsZSk7CisgICAgfQorfQorCisvKlRyYW5zYWN0aW9uYWwgQVBJcyAtLSBTbGF2ZSovCit2b2lkIERTUElfU2xhdmVUcmFuc2ZlckNyZWF0ZUhhbmRsZShTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfc2xhdmVfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgLyogWmVybyB0aGUgaGFuZGxlLiAqLworICAgIG1lbXNldChoYW5kbGUsIDAsIHNpemVvZigqaGFuZGxlKSk7CisKKyAgICBnX2RzcGlIYW5kbGVbRFNQSV9HZXRJbnN0YW5jZShiYXNlKV0gPSBoYW5kbGU7CisKKyAgICBoYW5kbGUtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgaGFuZGxlLT51c2VyRGF0YSA9IHVzZXJEYXRhOworfQorCitzdGF0dXNfdCBEU1BJX1NsYXZlVHJhbnNmZXJOb25CbG9ja2luZyhTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlLCBkc3BpX3RyYW5zZmVyX3QgKnRyYW5zZmVyKQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydCh0cmFuc2Zlcik7CisKKyAgICAvKiBJZiByZWNlaXZlIGxlbmd0aCBpcyB6ZXJvICovCisgICAgaWYgKHRyYW5zZmVyLT5kYXRhU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIElmIGJvdGggc2VuZCBidWZmZXIgYW5kIHJlY2VpdmUgYnVmZmVyIGlzIG51bGwgKi8KKyAgICBpZiAoKCEodHJhbnNmZXItPnR4RGF0YSkpICYmICghKHRyYW5zZmVyLT5yeERhdGEpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDaGVjayB0aGF0IHdlJ3JlIG5vdCBidXN5LiovCisgICAgaWYgKGhhbmRsZS0+c3RhdGUgPT0ga0RTUElfQnVzeSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0RTUElfQnVzeTsKKyAgICB9CisgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0J1c3k7CisKKyAgICAvKiBFbmFibGUgdGhlIE5WSUMgZm9yIERTUEkgcGVyaXBoZXJhbC4gKi8KKyAgICBFbmFibGVJUlEoc19kc3BpSVJRW0RTUElfR2V0SW5zdGFuY2UoYmFzZSldKTsKKworICAgIC8qIFN0b3JlIHRyYW5zZmVyIGluZm9ybWF0aW9uICovCisgICAgaGFuZGxlLT50eERhdGEgPSB0cmFuc2Zlci0+dHhEYXRhOworICAgIGhhbmRsZS0+cnhEYXRhID0gdHJhbnNmZXItPnJ4RGF0YTsKKyAgICBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisgICAgaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID0gdHJhbnNmZXItPmRhdGFTaXplOworICAgIGhhbmRsZS0+dG90YWxCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisKKyAgICBoYW5kbGUtPmVycm9yQ291bnQgPSAwOworCisgICAgdWludDhfdCB3aGljaEN0YXIgPSAodHJhbnNmZXItPmNvbmZpZ0ZsYWdzICYgRFNQSV9TTEFWRV9DVEFSX01BU0spID4+IERTUElfU0xBVkVfQ1RBUl9TSElGVDsKKyAgICBoYW5kbGUtPmJpdHNQZXJGcmFtZSA9CisgICAgICAgICgoKGJhc2UtPkNUQVJfU0xBVkVbd2hpY2hDdGFyXSkgJiBTUElfQ1RBUl9TTEFWRV9GTVNaX01BU0spID4+IFNQSV9DVEFSX1NMQVZFX0ZNU1pfU0hJRlQpICsgMTsKKworICAgIERTUElfU3RvcFRyYW5zZmVyKGJhc2UpOworCisgICAgRFNQSV9GbHVzaEZpZm8oYmFzZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX0FsbFN0YXR1c0ZsYWcpOworCisgICAgRFNQSV9TdGFydFRyYW5zZmVyKGJhc2UpOworCisgICAgLyogUHJlcGFyZSBkYXRhIHRvIHRyYW5zbWl0ICovCisgICAgRFNQSV9TbGF2ZVRyYW5zZmVyRmlsbFVwVHhGaWZvKGJhc2UsIGhhbmRsZSk7CisKKyAgICBzX2RzcGlTbGF2ZUlzciA9IERTUElfU2xhdmVUcmFuc2ZlckhhbmRsZUlSUTsKKworICAgIC8qIEVuYWJsZSBSWCBGSUZPIGRyYWluIHJlcXVlc3QsIHRoZSBzbGF2ZSBvbmx5IHVzZSB0aGlzIGludGVycnVwdCAqLworICAgIERTUElfRW5hYmxlSW50ZXJydXB0cyhiYXNlLCBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RJbnRlcnJ1cHRFbmFibGUpOworCisgICAgaWYgKGhhbmRsZS0+cnhEYXRhKQorICAgIHsKKyAgICAgICAgLyogUlggRklGTyBvdmVyZmxvdyByZXF1ZXN0IGVuYWJsZSAqLworICAgICAgICBEU1BJX0VuYWJsZUludGVycnVwdHMoYmFzZSwga0RTUElfUnhGaWZvT3ZlcmZsb3dJbnRlcnJ1cHRFbmFibGUpOworICAgIH0KKyAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgeworICAgICAgICAvKiBUWCBGSUZPIHVuZGVyZmxvdyByZXF1ZXN0IGVuYWJsZSAqLworICAgICAgICBEU1BJX0VuYWJsZUludGVycnVwdHMoYmFzZSwga0RTUElfVHhGaWZvVW5kZXJmbG93SW50ZXJydXB0RW5hYmxlKTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBEU1BJX1NsYXZlVHJhbnNmZXJHZXRDb3VudChTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlLCBzaXplX3QgKmNvdW50KQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgaWYgKCFjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDYXRjaCB3aGVuIHRoZXJlIGlzIG5vdCBhbiBhY3RpdmUgdHJhbnNmZXIuICovCisgICAgaWYgKGhhbmRsZS0+c3RhdGUgIT0ga0RTUElfQnVzeSkKKyAgICB7CisgICAgICAgICpjb3VudCA9IDA7CisgICAgICAgIHJldHVybiBrU3RhdHVzX05vVHJhbnNmZXJJblByb2dyZXNzOworICAgIH0KKworICAgICpjb3VudCA9IGhhbmRsZS0+dG90YWxCeXRlQ291bnQgLSBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdGljIHZvaWQgRFNQSV9TbGF2ZVRyYW5zZmVyRmlsbFVwVHhGaWZvKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICB1aW50MTZfdCB0cmFuc21pdERhdGEgPSAwOworICAgIHVpbnQ4X3QgZHVtbXlQYXR0ZXJuID0gRFNQSV9EVU1NWV9EQVRBOworCisgICAgLyogU2VydmljZSB0aGUgdHJhbnNtaXR0ZXIsIGlmIHRyYW5zbWl0IGJ1ZmZlciBwcm92aWRlZCwgdHJhbnNtaXQgdGhlIGRhdGEsCisgICAgKiBlbHNlIHRyYW5zbWl0IGR1bW15IHBhdHRlcm4KKyAgICAqLworICAgIHdoaWxlIChEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKQorICAgIHsKKyAgICAgICAgLyogVHJhbnNtaXQgZGF0YSAqLworICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogSGF2ZSBkYXRhIHRvIHRyYW5zbWl0LCB1cGRhdGUgdGhlIHRyYW5zbWl0IGRhdGEgYW5kIHB1c2ggdG8gRklGTyAqLworICAgICAgICAgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lIDw9IDgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogYml0cy9mcmFtZSBpcyAxIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgdHJhbnNtaXQgZGF0YSBhbmQgdHJhbnNtaXQgcG9pbnRlciAqLworICAgICAgICAgICAgICAgICAgICB0cmFuc21pdERhdGEgPSAqaGFuZGxlLT50eERhdGE7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+dHhEYXRhKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0RGF0YSA9IGR1bW15UGF0dGVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBEZWNyZWFzZSByZW1haW5pbmcgZGF0YVNpemUgKi8KKyAgICAgICAgICAgICAgICAtLWhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIGJpdHMvZnJhbWUgaXMgMiBieXRlcyAqLworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFdpdGggbXVsdGlieXRlcyBwZXIgZnJhbWUgdHJhbnNtaXNzaW9uLCB0aGUgdHJhbnNtaXQgZnJhbWUgY29udGFpbnMgZGF0YSBmcm9tCisgICAgICAgICAgICAgICAgKiB0cmFuc21pdCBidWZmZXIgdW50aWwgc2VudCBkYXRhU2l6ZSBtYXRjaGVzIHVzZXIgcmVxdWVzdC4gT3RoZXIgYnl0ZXMgd2lsbCBzZXQgdG8KKyAgICAgICAgICAgICAgICAqIGR1bW15IHBhdHRlcm4gdmFsdWUuCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgZmlyc3QgYnl0ZSBvZiB0cmFuc21pdCBkYXRhIGFuZCB0cmFuc21pdCBwb2ludGVyICovCisgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0RGF0YSA9ICpoYW5kbGUtPnR4RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT50eERhdGErKzsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlY3JlYXNlIHJlbWFpbmluZyBkYXRhU2l6ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgc2Vjb25kIGJ5dGUgb2YgdHJhbnNtaXQgZGF0YSB0byBzZWNvbmQgYnl0ZSBvZiBkdW1teSBwYXR0ZXJuICovCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pdERhdGEgPSB0cmFuc21pdERhdGEgfCAodWludDE2X3QpKCgodWludDE2X3QpZHVtbXlQYXR0ZXJuKSA8PCA4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBzZWNvbmQgYnl0ZSBvZiB0cmFuc21pdCBkYXRhIGFuZCB0cmFuc21pdCBwb2ludGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pdERhdGEgPSB0cmFuc21pdERhdGEgfCAodWludDE2X3QpKCh1aW50MTZfdCkoKmhhbmRsZS0+dHhEYXRhKSA8PCA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+dHhEYXRhKys7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC0taGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IC09IDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXREYXRhID0gKHVpbnQxNl90KSgodWludDE2X3QpKGR1bW15UGF0dGVybikgPDwgOCkgfCBkdW1teVBhdHRlcm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBXcml0ZSB0aGUgZGF0YSB0byB0aGUgRFNQSSBkYXRhIHJlZ2lzdGVyICovCisgICAgICAgIGJhc2UtPlBVU0hSX1NMQVZFID0gdHJhbnNtaXREYXRhOworCisgICAgICAgIC8qIFRyeSB0byBjbGVhciBURkZGIGJ5IHdyaXRpbmcgYSBvbmUgdG8gaXQ7IGl0IHdpbGwgbm90IGNsZWFyIGlmIFRYIEZJRk8gbm90IGZ1bGwgKi8KKyAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBEU1BJX1NsYXZlVHJhbnNmZXJDb21wbGV0ZShTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHQgcmVxdWVzdHMgKi8KKyAgICBEU1BJX0Rpc2FibGVJbnRlcnJ1cHRzKGJhc2UsIGtEU1BJX1R4Rmlmb1VuZGVyZmxvd0ludGVycnVwdEVuYWJsZSB8IGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0SW50ZXJydXB0RW5hYmxlIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRFNQSV9SeEZpZm9PdmVyZmxvd0ludGVycnVwdEVuYWJsZSB8IGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEludGVycnVwdEVuYWJsZSk7CisKKyAgICAvKiBUaGUgdHJhbnNmZXIgaXMgY29tcGxldGUuICovCisgICAgaGFuZGxlLT50eERhdGEgPSBOVUxMOworICAgIGhhbmRsZS0+cnhEYXRhID0gTlVMTDsKKyAgICBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPSAwOworICAgIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9IDA7CisKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSAwOworICAgIGlmIChoYW5kbGUtPnN0YXRlID09IGtEU1BJX0Vycm9yKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19EU1BJX0Vycm9yOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgfQorCisgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0lkbGU7CisKKyAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICB7CisgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgaGFuZGxlLCBzdGF0dXMsIGhhbmRsZS0+dXNlckRhdGEpOworICAgIH0KK30KKwordm9pZCBEU1BJX1NsYXZlVHJhbnNmZXJBYm9ydChTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgRFNQSV9TdG9wVHJhbnNmZXIoYmFzZSk7CisKKyAgICAvKiBEaXNhYmxlIGludGVycnVwdCByZXF1ZXN0cyAqLworICAgIERTUElfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0RTUElfVHhGaWZvVW5kZXJmbG93SW50ZXJydXB0RW5hYmxlIHwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RJbnRlcnJ1cHRFbmFibGUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtEU1BJX1J4Rmlmb092ZXJmbG93SW50ZXJydXB0RW5hYmxlIHwga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0SW50ZXJydXB0RW5hYmxlKTsKKworICAgIGhhbmRsZS0+c3RhdGUgPSBrRFNQSV9JZGxlOworICAgIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9IDA7CisgICAgaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID0gMDsKK30KKwordm9pZCBEU1BJX1NsYXZlVHJhbnNmZXJIYW5kbGVJUlEoU1BJX1R5cGUgKmJhc2UsIGRzcGlfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIHVpbnQ4X3QgZHVtbXlQYXR0ZXJuID0gRFNQSV9EVU1NWV9EQVRBOworICAgIHVpbnQzMl90IGRhdGFSZWNlaXZlZDsKKyAgICB1aW50MzJfdCBkYXRhU2VuZCA9IDA7CisKKyAgICAvKiBCZWNhdXNlIFNQSSBwcm90b2NvbCBpcyBzeW5jaHJvbm91cywgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoYXQgc2xhdmUgcmVjZWl2ZWQgZnJvbSB0aGUKKyAgICAqIG1hc3RlciBpcyB0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBzbGF2ZSB0cmFuc21pdHRlZCB0byB0aGUgbWFzdGVyLiBTbyB3ZSBvbmx5CisgICAgKiBtb25pdG9yIHRoZSByZWNlaXZlZCBkYXRhU2l6ZSB0byBrbm93IHdoZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLgorICAgICovCisgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA+IDApCisgICAgeworICAgICAgICB3aGlsZSAoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEhhdmUgcmVjZWl2ZWQgZGF0YSBpbiB0aGUgYnVmZmVyLiAqLworICAgICAgICAgICAgZGF0YVJlY2VpdmVkID0gYmFzZS0+UE9QUjsKKyAgICAgICAgICAgIC8qQ2xlYXIgdGhlIHJ4IGZpZm8gZHJhaW4gcmVxdWVzdCwgbmVlZGVkIGZvciBub24tRE1BIGFwcGxpY2F0aW9ucyBhcyB0aGlzIGZsYWcKKyAgICAgICAgICAgICogd2lsbCByZW1haW4gc2V0IGV2ZW4gaWYgdGhlIHJ4IGZpZm8gaXMgZW1wdHkuIEJ5IG1hbnVhbGx5IGNsZWFyaW5nIHRoaXMgZmxhZywgaXQKKyAgICAgICAgICAgICogZWl0aGVyIHJlbWFpbiBjbGVhciBpZiBubyBtb3JlIGRhdGEgaXMgaW4gdGhlIGZpZm8sIG9yIGl0IHdpbGwgc2V0IGlmIHRoZXJlIGlzCisgICAgICAgICAgICAqIG1vcmUgZGF0YSBpbiB0aGUgZmlmby4KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0RmxhZyk7CisKKyAgICAgICAgICAgIC8qIElmIGJpdHMvZnJhbWUgaXMgb25lIGJ5dGUgKi8KKyAgICAgICAgICAgIGlmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA8PSA4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJ4RGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgYnVmZmVyIGlzIG5vdCBudWxsLCBzdG9yZSBkYXRhIGludG8gaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgKmhhbmRsZS0+cnhEYXRhID0gZGF0YVJlY2VpdmVkOworICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+cnhEYXRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBEZXNjcmVhc2UgcmVtYWluaW5nIHJlY2VpdmUgYnl0ZSBjb3VudCAqLworICAgICAgICAgICAgICAgIC0taGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50OworCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTZW5kID0gKmhhbmRsZS0+dHhEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnR4RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTZW5kID0gZHVtbXlQYXR0ZXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBEU1BJIGRhdGEgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFJfU0xBVkUgPSBkYXRhU2VuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIC8qIElmIGJpdHMvZnJhbWUgaXMgMiBieXRlcyAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFdpdGggbXVsdGlieXRlcyBmcmFtZSByZWNlaXZpbmcsIHdlIG9ubHkgcmVjZWl2ZSB0aWxsIHRoZSByZWNlaXZlZCBkYXRhU2l6ZQorICAgICAgICAgICAgICAgICogbWF0Y2hlcyB1c2VyIHJlcXVlc3QuIE90aGVyIGJ5dGVzIHdpbGwgYmUgaWdub3JlZC4KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJ4RGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgYnVmZmVyIGlzIG5vdCBudWxsLCBzdG9yZSBmaXJzdCBieXRlIGludG8gaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgKmhhbmRsZS0+cnhEYXRhID0gZGF0YVJlY2VpdmVkOworICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+cnhEYXRhOworCisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVjcmVhc2UgcmVtYWluaW5nIHJlY2VpdmUgYnl0ZSBjb3VudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlIGJ1ZmZlciBpcyBub3QgbnVsbCwgc3RvcmUgc2Vjb25kIGJ5dGUgaW50byBpdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgKmhhbmRsZS0+cnhEYXRhID0gZGF0YVJlY2VpdmVkID4+IDg7CisgICAgICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+cnhEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50IC09IDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogSWYgbm8gaGFuZGxlLT5yeERhdGEqLworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVjcmVhc2UgcmVtYWluaW5nIHJlY2VpdmUgYnl0ZSBjb3VudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU2VuZCA9ICpoYW5kbGUtPnR4RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT50eERhdGE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU2VuZCB8PSAodWludDE2X3QpKCh1aW50MTZfdCkoZHVtbXlQYXR0ZXJuKSA8PCA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU2VuZCB8PSAodWludDMyX3QpKCpoYW5kbGUtPnR4RGF0YSkgPDwgODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCAtPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIElmIG5vIGhhbmRsZS0+dHhEYXRhKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IC09IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU2VuZCA9ICh1aW50MTZfdCkoKHVpbnQxNl90KShkdW1teVBhdHRlcm4pIDw8IDgpIHwgZHVtbXlQYXR0ZXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBEU1BJIGRhdGEgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFJfU0xBVkUgPSBkYXRhU2VuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBUcnkgdG8gY2xlYXIgVEZGRiBieSB3cml0aW5nIGEgb25lIHRvIGl0OyBpdCB3aWxsIG5vdCBjbGVhciBpZiBUWCBGSUZPIG5vdCBmdWxsICovCisgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKworICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8qIENoZWNrIGlmIHJlbWFpbmluZyByZWNlaXZlIGJ5dGUgY291bnQgbWF0Y2hlcyB1c2VyIHJlcXVlc3QgKi8KKyAgICBpZiAoKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA9PSAwKSB8fCAoaGFuZGxlLT5zdGF0ZSA9PSBrRFNQSV9FcnJvcikpCisgICAgeworICAgICAgICAvKiBPdGhlciBjYXNlcywgc3RvcCB0aGUgdHJhbnNmZXIuICovCisgICAgICAgIERTUElfU2xhdmVUcmFuc2ZlckNvbXBsZXRlKGJhc2UsIGhhbmRsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBDYXRjaCB0eCBmaWZvIHVuZGVyZmxvdyBjb25kaXRpb25zLCBzZXJ2aWNlIG9ubHkgaWYgdHggdW5kZXIgZmxvdyBpbnRlcnJ1cHQgZW5hYmxlZCAqLworICAgIGlmICgoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1R4Rmlmb1VuZGVyZmxvd0ZsYWcpICYmIChiYXNlLT5SU0VSICYgU1BJX1JTRVJfVEZVRl9SRV9NQVNLKSkKKyAgICB7CisgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9VbmRlcmZsb3dGbGFnKTsKKyAgICAgICAgLyogQ2hhbmdlIHN0YXRlIHRvIGVycm9yIGFuZCBjbGVhciBmbGFnICovCisgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0Vycm9yOworICAgICAgICB9CisgICAgICAgIGhhbmRsZS0+ZXJyb3JDb3VudCsrOworICAgIH0KKyAgICAvKiBDYXRjaCByeCBmaWZvIG92ZXJmbG93IGNvbmRpdGlvbnMsIHNlcnZpY2Ugb25seSBpZiByeCBvdmVyIGZsb3cgaW50ZXJydXB0IGVuYWJsZWQgKi8KKyAgICBpZiAoKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9SeEZpZm9PdmVyZmxvd0ZsYWcpICYmIChiYXNlLT5SU0VSICYgU1BJX1JTRVJfUkZPRl9SRV9NQVNLKSkKKyAgICB7CisgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9SeEZpZm9PdmVyZmxvd0ZsYWcpOworICAgICAgICAvKiBDaGFuZ2Ugc3RhdGUgdG8gZXJyb3IgYW5kIGNsZWFyIGZsYWcgKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfRXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgaGFuZGxlLT5lcnJvckNvdW50Kys7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBEU1BJX0NvbW1vbklSUUhhbmRsZXIoU1BJX1R5cGUgKmJhc2UsIHZvaWQgKnBhcmFtKQoreworICAgIGlmIChEU1BJX0lzTWFzdGVyKGJhc2UpKQorICAgIHsKKyAgICAgICAgc19kc3BpTWFzdGVySXNyKGJhc2UsIChkc3BpX21hc3Rlcl9oYW5kbGVfdCAqKXBhcmFtKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc19kc3BpU2xhdmVJc3IoYmFzZSwgKGRzcGlfc2xhdmVfaGFuZGxlX3QgKilwYXJhbSk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChTUEkwKQordm9pZCBTUEkwX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBhc3NlcnQoZ19kc3BpSGFuZGxlWzBdKTsKKyAgICBEU1BJX0NvbW1vbklSUUhhbmRsZXIoU1BJMCwgZ19kc3BpSGFuZGxlWzBdKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChTUEkxKQordm9pZCBTUEkxX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBhc3NlcnQoZ19kc3BpSGFuZGxlWzFdKTsKKyAgICBEU1BJX0NvbW1vbklSUUhhbmRsZXIoU1BJMSwgZ19kc3BpSGFuZGxlWzFdKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChTUEkyKQordm9pZCBTUEkyX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBhc3NlcnQoZ19kc3BpSGFuZGxlWzJdKTsKKyAgICBEU1BJX0NvbW1vbklSUUhhbmRsZXIoU1BJMiwgZ19kc3BpSGFuZGxlWzJdKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChTUEkzKQordm9pZCBTUEkzX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBhc3NlcnQoZ19kc3BpSGFuZGxlWzNdKTsKKyAgICBEU1BJX0NvbW1vbklSUUhhbmRsZXIoU1BJMywgZ19kc3BpSGFuZGxlWzNdKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChTUEk0KQordm9pZCBTUEk0X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBhc3NlcnQoZ19kc3BpSGFuZGxlWzRdKTsKKyAgICBEU1BJX0NvbW1vbklSUUhhbmRsZXIoU1BJNCwgZ19kc3BpSGFuZGxlWzRdKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChTUEk1KQordm9pZCBTUEk1X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBhc3NlcnQoZ19kc3BpSGFuZGxlWzVdKTsKKyAgICBEU1BJX0NvbW1vbklSUUhhbmRsZXIoU1BJNSwgZ19kc3BpSGFuZGxlWzVdKTsKK30KKyNlbmRpZgorCisjaWYgKEZTTF9GRUFUVVJFX1NPQ19EU1BJX0NPVU5UID4gNikKKyNlcnJvciAiU2hvdWxkIHdyaXRlIHRoZSBTUEl4X0RyaXZlcklSUUhhbmRsZXIgZnVuY3Rpb24gdGhhdCBpbnN0YW5jZSBncmVhdGVyIHRoYW4gNSAhIgorI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkOTZhZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGkuaApAQCAtMCwwICsxLDExODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX0RTUElfSF8KKyNkZWZpbmUgX0ZTTF9EU1BJX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgZHNwaV9kcml2ZXIKKyAqIEB7CisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgQGJyaWVmIERTUEkgZHJpdmVyIHZlcnNpb24gMi4xLjQuICovCisjZGVmaW5lIEZTTF9EU1BJX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMSwgNCkpCisvKkB9Ki8KKworI2lmbmRlZiBEU1BJX0RVTU1ZX0RBVEEKKy8qISBAYnJpZWYgRFNQSSBkdW1teSBkYXRhIGlmIHRoZXJlIGlzIG5vIFR4IGRhdGEuKi8KKyNkZWZpbmUgRFNQSV9EVU1NWV9EQVRBICgweDAwVSkgLyohPCBEdW1teSBkYXRhIHVzZWQgZm9yIFR4IGlmIHRoZXJlIGlzIG5vIHR4RGF0YS4gKi8KKyNlbmRpZgorCisvKiEgQGJyaWVmIFN0YXR1cyBmb3IgdGhlIERTUEkgZHJpdmVyLiovCitlbnVtIF9kc3BpX3N0YXR1cworeworICAgIGtTdGF0dXNfRFNQSV9CdXN5ID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0RTUEksIDApLCAgICAgIC8qITwgRFNQSSB0cmFuc2ZlciBpcyBidXN5LiovCisgICAga1N0YXR1c19EU1BJX0Vycm9yID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0RTUEksIDEpLCAgICAgLyohPCBEU1BJIGRyaXZlciBlcnJvci4gKi8KKyAgICBrU3RhdHVzX0RTUElfSWRsZSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9EU1BJLCAyKSwgICAgICAvKiE8IERTUEkgaXMgaWRsZS4qLworICAgIGtTdGF0dXNfRFNQSV9PdXRPZlJhbmdlID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0RTUEksIDMpIC8qITwgRFNQSSB0cmFuc2ZlciBvdXQgb2YgcmFuZ2UuICovCit9OworCisvKiEgQGJyaWVmIERTUEkgc3RhdHVzIGZsYWdzIGluIFNQSXhfU1IgcmVnaXN0ZXIuKi8KK2VudW0gX2RzcGlfZmxhZ3MKK3sKKyAgICBrRFNQSV9UeENvbXBsZXRlRmxhZyA9IFNQSV9TUl9UQ0ZfTUFTSywgICAgICAgICAgLyohPCBUcmFuc2ZlciBDb21wbGV0ZSBGbGFnLiAqLworICAgIGtEU1BJX0VuZE9mUXVldWVGbGFnID0gU1BJX1NSX0VPUUZfTUFTSywgICAgICAgICAvKiE8IEVuZCBvZiBRdWV1ZSBGbGFnLiovCisgICAga0RTUElfVHhGaWZvVW5kZXJmbG93RmxhZyA9IFNQSV9TUl9URlVGX01BU0ssICAgIC8qITwgVHJhbnNtaXQgRklGTyBVbmRlcmZsb3cgRmxhZy4qLworICAgIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyA9IFNQSV9TUl9URkZGX01BU0ssICAvKiE8IFRyYW5zbWl0IEZJRk8gRmlsbCBGbGFnLiovCisgICAga0RTUElfUnhGaWZvT3ZlcmZsb3dGbGFnID0gU1BJX1NSX1JGT0ZfTUFTSywgICAgIC8qITwgUmVjZWl2ZSBGSUZPIE92ZXJmbG93IEZsYWcuKi8KKyAgICBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RGbGFnID0gU1BJX1NSX1JGREZfTUFTSywgLyohPCBSZWNlaXZlIEZJRk8gRHJhaW4gRmxhZy4qLworICAgIGtEU1BJX1R4QW5kUnhTdGF0dXNGbGFnID0gU1BJX1NSX1RYUlhTX01BU0ssICAgICAvKiE8IFRoZSBtb2R1bGUgaXMgaW4gU3RvcHBlZC9SdW5uaW5nIHN0YXRlLiovCisgICAga0RTUElfQWxsU3RhdHVzRmxhZyA9IFNQSV9TUl9UQ0ZfTUFTSyB8IFNQSV9TUl9FT1FGX01BU0sgfCBTUElfU1JfVEZVRl9NQVNLIHwgU1BJX1NSX1RGRkZfTUFTSyB8IFNQSV9TUl9SRk9GX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICBTUElfU1JfUkZERl9NQVNLIHwgU1BJX1NSX1RYUlhTX01BU0sgLyohPCBBbGwgc3RhdHVzZXMgYWJvdmUuKi8KK307CisKKy8qISBAYnJpZWYgRFNQSSBpbnRlcnJ1cHQgc291cmNlLiovCitlbnVtIF9kc3BpX2ludGVycnVwdF9lbmFibGUKK3sKKyAgICBrRFNQSV9UeENvbXBsZXRlSW50ZXJydXB0RW5hYmxlID0gU1BJX1JTRVJfVENGX1JFX01BU0ssICAgICAgICAgIC8qITwgVENGICBpbnRlcnJ1cHQgZW5hYmxlLiovCisgICAga0RTUElfRW5kT2ZRdWV1ZUludGVycnVwdEVuYWJsZSA9IFNQSV9SU0VSX0VPUUZfUkVfTUFTSywgICAgICAgICAvKiE8IEVPUUYgaW50ZXJydXB0IGVuYWJsZS4qLworICAgIGtEU1BJX1R4Rmlmb1VuZGVyZmxvd0ludGVycnVwdEVuYWJsZSA9IFNQSV9SU0VSX1RGVUZfUkVfTUFTSywgICAgLyohPCBURlVGIGludGVycnVwdCBlbmFibGUuKi8KKyAgICBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEludGVycnVwdEVuYWJsZSA9IFNQSV9SU0VSX1RGRkZfUkVfTUFTSywgIC8qITwgVEZGRiBpbnRlcnJ1cHQgZW5hYmxlLCBETUEgZGlzYWJsZS4qLworICAgIGtEU1BJX1J4Rmlmb092ZXJmbG93SW50ZXJydXB0RW5hYmxlID0gU1BJX1JTRVJfUkZPRl9SRV9NQVNLLCAgICAgLyohPCBSRk9GIGludGVycnVwdCBlbmFibGUuKi8KKyAgICBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RJbnRlcnJ1cHRFbmFibGUgPSBTUElfUlNFUl9SRkRGX1JFX01BU0ssIC8qITwgUkZERiBpbnRlcnJ1cHQgZW5hYmxlLCBETUEgZGlzYWJsZS4qLworICAgIGtEU1BJX0FsbEludGVycnVwdEVuYWJsZSA9IFNQSV9SU0VSX1RDRl9SRV9NQVNLIHwgU1BJX1JTRVJfRU9RRl9SRV9NQVNLIHwgU1BJX1JTRVJfVEZVRl9SRV9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElfUlNFUl9URkZGX1JFX01BU0sgfCBTUElfUlNFUl9SRk9GX1JFX01BU0sgfCBTUElfUlNFUl9SRkRGX1JFX01BU0sKKyAgICAvKiE8IEFsbCBhYm92ZSBpbnRlcnJ1cHRzIGVuYWJsZS4qLworfTsKKworLyohIEBicmllZiBEU1BJIERNQSBzb3VyY2UuKi8KK2VudW0gX2RzcGlfZG1hX2VuYWJsZQoreworICAgIGtEU1BJX1R4RG1hRW5hYmxlID0gKFNQSV9SU0VSX1RGRkZfUkVfTUFTSyB8IFNQSV9SU0VSX1RGRkZfRElSU19NQVNLKSwgLyohPCBURkZGIGZsYWcgZ2VuZXJhdGVzIERNQSByZXF1ZXN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gVHggaW50ZXJydXB0IHJlcXVlc3QuICovCisgICAga0RTUElfUnhEbWFFbmFibGUgPSAoU1BJX1JTRVJfUkZERl9SRV9NQVNLIHwgU1BJX1JTRVJfUkZERl9ESVJTX01BU0spICAvKiE8IFJGREYgZmxhZyBnZW5lcmF0ZXMgRE1BIHJlcXVlc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBSeCBpbnRlcnJ1cHQgcmVxdWVzdC4gKi8KK307CisKKy8qISBAYnJpZWYgRFNQSSBtYXN0ZXIgb3Igc2xhdmUgbW9kZSBjb25maWd1cmF0aW9uLiovCit0eXBlZGVmIGVudW0gX2RzcGlfbWFzdGVyX3NsYXZlX21vZGUKK3sKKyAgICBrRFNQSV9NYXN0ZXIgPSAxVSwgLyohPCBEU1BJIHBlcmlwaGVyYWwgb3BlcmF0ZXMgaW4gbWFzdGVyIG1vZGUuKi8KKyAgICBrRFNQSV9TbGF2ZSA9IDBVICAgLyohPCBEU1BJIHBlcmlwaGVyYWwgb3BlcmF0ZXMgaW4gc2xhdmUgbW9kZS4qLworfSBkc3BpX21hc3Rlcl9zbGF2ZV9tb2RlX3Q7CisKKy8qIQorICogQGJyaWVmIERTUEkgU2FtcGxlIFBvaW50OiBDb250cm9scyB3aGVuIHRoZSBEU1BJIG1hc3RlciBzYW1wbGVzIFNJTiBpbiB0aGUgTW9kaWZpZWQgVHJhbnNmZXIgRm9ybWF0LiBUaGlzIGZpZWxkIGlzIHZhbGlkCisgKiBvbmx5IHdoZW4gdGhlIENQSEEgYml0IGluIHRoZSBDVEFSIHJlZ2lzdGVyIGlzIDAuCisgKi8KK3R5cGVkZWYgZW51bSBfZHNwaV9tYXN0ZXJfc2FtcGxlX3BvaW50Cit7CisgICAga0RTUElfU2NrVG9TaW4wQ2xvY2sgPSAwVSwgLyohPCAwIHN5c3RlbSBjbG9ja3MgYmV0d2VlbiBTQ0sgZWRnZSBhbmQgU0lOIHNhbXBsZS4qLworICAgIGtEU1BJX1Nja1RvU2luMUNsb2NrID0gMVUsIC8qITwgMSBzeXN0ZW0gY2xvY2sgIGJldHdlZW4gU0NLIGVkZ2UgYW5kIFNJTiBzYW1wbGUuKi8KKyAgICBrRFNQSV9TY2tUb1NpbjJDbG9jayA9IDJVICAvKiE8IDIgc3lzdGVtIGNsb2NrcyBiZXR3ZWVuIFNDSyBlZGdlIGFuZCBTSU4gc2FtcGxlLiovCit9IGRzcGlfbWFzdGVyX3NhbXBsZV9wb2ludF90OworCisvKiEgQGJyaWVmIERTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAoUGNzKSBjb25maWd1cmF0aW9uICh3aGljaCBQY3MgdG8gY29uZmlndXJlKS4qLwordHlwZWRlZiBlbnVtIF9kc3BpX3doaWNoX3Bjc19jb25maWcKK3sKKyAgICBrRFNQSV9QY3MwID0gMVUgPDwgMCwgLyohPCBQY3NbMF0gKi8KKyAgICBrRFNQSV9QY3MxID0gMVUgPDwgMSwgLyohPCBQY3NbMV0gKi8KKyAgICBrRFNQSV9QY3MyID0gMVUgPDwgMiwgLyohPCBQY3NbMl0gKi8KKyAgICBrRFNQSV9QY3MzID0gMVUgPDwgMywgLyohPCBQY3NbM10gKi8KKyAgICBrRFNQSV9QY3M0ID0gMVUgPDwgNCwgLyohPCBQY3NbNF0gKi8KKyAgICBrRFNQSV9QY3M1ID0gMVUgPDwgNSAgLyohPCBQY3NbNV0gKi8KK30gZHNwaV93aGljaF9wY3NfdDsKKworLyohIEBicmllZiBEU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgKFBjcykgUG9sYXJpdHkgY29uZmlndXJhdGlvbi4qLwordHlwZWRlZiBlbnVtIF9kc3BpX3Bjc19wb2xhcml0eV9jb25maWcKK3sKKyAgICBrRFNQSV9QY3NBY3RpdmVIaWdoID0gMFUsIC8qITwgUGNzIEFjdGl2ZSBIaWdoIChpZGxlcyBsb3cpLiAqLworICAgIGtEU1BJX1Bjc0FjdGl2ZUxvdyA9IDFVICAgLyohPCBQY3MgQWN0aXZlIExvdyAoaWRsZXMgaGlnaCkuICovCit9IGRzcGlfcGNzX3BvbGFyaXR5X2NvbmZpZ190OworCisvKiEgQGJyaWVmIERTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAoUGNzKSBQb2xhcml0eS4qLworZW51bSBfZHNwaV9wY3NfcG9sYXJpdHkKK3sKKyAgICBrRFNQSV9QY3MwQWN0aXZlTG93ID0gMVUgPDwgMCwgLyohPCBQY3MwIEFjdGl2ZSBMb3cgKGlkbGVzIGhpZ2gpLiAqLworICAgIGtEU1BJX1BjczFBY3RpdmVMb3cgPSAxVSA8PCAxLCAvKiE8IFBjczEgQWN0aXZlIExvdyAoaWRsZXMgaGlnaCkuICovCisgICAga0RTUElfUGNzMkFjdGl2ZUxvdyA9IDFVIDw8IDIsIC8qITwgUGNzMiBBY3RpdmUgTG93IChpZGxlcyBoaWdoKS4gKi8KKyAgICBrRFNQSV9QY3MzQWN0aXZlTG93ID0gMVUgPDwgMywgLyohPCBQY3MzIEFjdGl2ZSBMb3cgKGlkbGVzIGhpZ2gpLiAqLworICAgIGtEU1BJX1BjczRBY3RpdmVMb3cgPSAxVSA8PCA0LCAvKiE8IFBjczQgQWN0aXZlIExvdyAoaWRsZXMgaGlnaCkuICovCisgICAga0RTUElfUGNzNUFjdGl2ZUxvdyA9IDFVIDw8IDUsIC8qITwgUGNzNSBBY3RpdmUgTG93IChpZGxlcyBoaWdoKS4gKi8KKyAgICBrRFNQSV9QY3NBbGxBY3RpdmVMb3cgPSAweEZGVSAgLyohPCBQY3MwIHRvIFBjczUgQWN0aXZlIExvdyAoaWRsZXMgaGlnaCkuICovCit9OworCisvKiEgQGJyaWVmIERTUEkgY2xvY2sgcG9sYXJpdHkgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBDVEFSLiovCit0eXBlZGVmIGVudW0gX2RzcGlfY2xvY2tfcG9sYXJpdHkKK3sKKyAgICBrRFNQSV9DbG9ja1BvbGFyaXR5QWN0aXZlSGlnaCA9IDBVLCAvKiE8IENQT0w9MC4gQWN0aXZlLWhpZ2ggRFNQSSBjbG9jayAoaWRsZXMgbG93KS4qLworICAgIGtEU1BJX0Nsb2NrUG9sYXJpdHlBY3RpdmVMb3cgPSAxVSAgIC8qITwgQ1BPTD0xLiBBY3RpdmUtbG93IERTUEkgY2xvY2sgKGlkbGVzIGhpZ2gpLiovCit9IGRzcGlfY2xvY2tfcG9sYXJpdHlfdDsKKworLyohIEBicmllZiBEU1BJIGNsb2NrIHBoYXNlIGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gQ1RBUi4qLwordHlwZWRlZiBlbnVtIF9kc3BpX2Nsb2NrX3BoYXNlCit7CisgICAga0RTUElfQ2xvY2tQaGFzZUZpcnN0RWRnZSA9IDBVLCAvKiE8IENQSEE9MC4gRGF0YSBpcyBjYXB0dXJlZCBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSBTQ0sgYW5kIGNoYW5nZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBlZGdlLiovCisgICAga0RTUElfQ2xvY2tQaGFzZVNlY29uZEVkZ2UgPSAxVSAvKiE8IENQSEE9MS4gRGF0YSBpcyBjaGFuZ2VkIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIFNDSyBhbmQgY2FwdHVyZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGVkZ2UuKi8KK30gZHNwaV9jbG9ja19waGFzZV90OworCisvKiEgQGJyaWVmIERTUEkgZGF0YSBzaGlmdGVyIGRpcmVjdGlvbiBvcHRpb25zIGZvciBhIGdpdmVuIENUQVIuKi8KK3R5cGVkZWYgZW51bSBfZHNwaV9zaGlmdF9kaXJlY3Rpb24KK3sKKyAgICBrRFNQSV9Nc2JGaXJzdCA9IDBVLCAvKiE8IERhdGEgdHJhbnNmZXJzIHN0YXJ0IHdpdGggbW9zdCBzaWduaWZpY2FudCBiaXQuKi8KKyAgICBrRFNQSV9Mc2JGaXJzdCA9IDFVICAvKiE8IERhdGEgdHJhbnNmZXJzIHN0YXJ0IHdpdGggbGVhc3Qgc2lnbmlmaWNhbnQgYml0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hpZnRpbmcgb3V0IG9mIExTQiBpcyBub3Qgc3VwcG9ydGVkIGZvciBzbGF2ZSAqLworfSBkc3BpX3NoaWZ0X2RpcmVjdGlvbl90OworCisvKiEgQGJyaWVmIERTUEkgZGVsYXkgdHlwZSBzZWxlY3Rpb24uKi8KK3R5cGVkZWYgZW51bSBfZHNwaV9kZWxheV90eXBlCit7CisgICAga0RTUElfUGNzVG9TY2sgPSAxVSwgIC8qITwgUGNzLXRvLVNDSyBkZWxheS4gKi8KKyAgICBrRFNQSV9MYXN0U2NrVG9QY3MsICAgLyohPCBUaGUgbGFzdCBTQ0sgZWRnZSB0byBQY3MgZGVsYXkuICovCisgICAga0RTUElfQmV0d2VlblRyYW5zZmVyIC8qITwgRGVsYXkgYmV0d2VlbiB0cmFuc2ZlcnMuICovCit9IGRzcGlfZGVsYXlfdHlwZV90OworCisvKiEgQGJyaWVmIERTUEkgQ2xvY2sgYW5kIFRyYW5zZmVyIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKENUQVIpIHNlbGVjdGlvbi4qLwordHlwZWRlZiBlbnVtIF9kc3BpX2N0YXJfc2VsZWN0aW9uCit7CisgICAga0RTUElfQ3RhcjAgPSAwVSwgLyohPCBDVEFSMCBzZWxlY3Rpb24gb3B0aW9uIGZvciBtYXN0ZXIgb3Igc2xhdmUgbW9kZTsgbm90ZSB0aGF0IENUQVIwIGFuZCBDVEFSMF9TTEFWRSBhcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSByZWdpc3RlciBhZGRyZXNzLiAqLworICAgIGtEU1BJX0N0YXIxID0gMVUsIC8qITwgQ1RBUjEgc2VsZWN0aW9uIG9wdGlvbiBmb3IgbWFzdGVyIG1vZGUgb25seS4gKi8KKyAgICBrRFNQSV9DdGFyMiA9IDJVLCAvKiE8IENUQVIyIHNlbGVjdGlvbiBvcHRpb24gZm9yIG1hc3RlciBtb2RlIG9ubHk7IG5vdGUgdGhhdCBzb21lIGRldmljZXMgZG8gbm90IHN1cHBvcnQgQ1RBUjIuICovCisgICAga0RTUElfQ3RhcjMgPSAzVSwgLyohPCBDVEFSMyBzZWxlY3Rpb24gb3B0aW9uIGZvciBtYXN0ZXIgbW9kZSBvbmx5OyBub3RlIHRoYXQgc29tZSBkZXZpY2VzIGRvIG5vdCBzdXBwb3J0IENUQVIzLiAqLworICAgIGtEU1BJX0N0YXI0ID0gNFUsIC8qITwgQ1RBUjQgc2VsZWN0aW9uIG9wdGlvbiBmb3IgbWFzdGVyIG1vZGUgb25seTsgbm90ZSB0aGF0IHNvbWUgZGV2aWNlcyBkbyBub3Qgc3VwcG9ydCBDVEFSNC4gKi8KKyAgICBrRFNQSV9DdGFyNSA9IDVVLCAvKiE8IENUQVI1IHNlbGVjdGlvbiBvcHRpb24gZm9yIG1hc3RlciBtb2RlIG9ubHk7IG5vdGUgdGhhdCBzb21lIGRldmljZXMgZG8gbm90IHN1cHBvcnQgQ1RBUjUuICovCisgICAga0RTUElfQ3RhcjYgPSA2VSwgLyohPCBDVEFSNiBzZWxlY3Rpb24gb3B0aW9uIGZvciBtYXN0ZXIgbW9kZSBvbmx5OyBub3RlIHRoYXQgc29tZSBkZXZpY2VzIGRvIG5vdCBzdXBwb3J0IENUQVI2LiAqLworICAgIGtEU1BJX0N0YXI3ID0gN1UgIC8qITwgQ1RBUjcgc2VsZWN0aW9uIG9wdGlvbiBmb3IgbWFzdGVyIG1vZGUgb25seTsgbm90ZSB0aGF0IHNvbWUgZGV2aWNlcyBkbyBub3Qgc3VwcG9ydCBDVEFSNy4gKi8KK30gZHNwaV9jdGFyX3NlbGVjdGlvbl90OworCisjZGVmaW5lIERTUElfTUFTVEVSX0NUQVJfU0hJRlQgKDBVKSAgIC8qITwgRFNQSSBtYXN0ZXIgQ1RBUiBzaGlmdCBtYWNybzsgdXNlZCBpbnRlcm5hbGx5LiAqLworI2RlZmluZSBEU1BJX01BU1RFUl9DVEFSX01BU0sgKDB4MEZVKSAvKiE8IERTUEkgbWFzdGVyIENUQVIgbWFzayBtYWNybzsgdXNlZCBpbnRlcm5hbGx5LiAqLworI2RlZmluZSBEU1BJX01BU1RFUl9QQ1NfU0hJRlQgKDRVKSAgICAvKiE8IERTUEkgbWFzdGVyIFBDUyBzaGlmdCBtYWNybzsgdXNlZCBpbnRlcm5hbGx5LiAqLworI2RlZmluZSBEU1BJX01BU1RFUl9QQ1NfTUFTSyAoMHhGMFUpICAvKiE8IERTUEkgbWFzdGVyIFBDUyBtYXNrIG1hY3JvOyB1c2VkIGludGVybmFsbHkuICovCisvKiEgQGJyaWVmIFVzZSB0aGlzIGVudW1lcmF0aW9uIGZvciB0aGUgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgY29uZmlnRmxhZ3MuICovCitlbnVtIF9kc3BpX3RyYW5zZmVyX2NvbmZpZ19mbGFnX2Zvcl9tYXN0ZXIKK3sKKyAgICBrRFNQSV9NYXN0ZXJDdGFyMCA9IDBVIDw8IERTUElfTUFTVEVSX0NUQVJfU0hJRlQsIC8qITwgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgdXNlIENUQVIwIHNldHRpbmcuICovCisgICAga0RTUElfTWFzdGVyQ3RhcjEgPSAxVSA8PCBEU1BJX01BU1RFUl9DVEFSX1NISUZULCAvKiE8IERTUEkgbWFzdGVyIHRyYW5zZmVyIHVzZSBDVEFSMSBzZXR0aW5nLiAqLworICAgIGtEU1BJX01hc3RlckN0YXIyID0gMlUgPDwgRFNQSV9NQVNURVJfQ1RBUl9TSElGVCwgLyohPCBEU1BJIG1hc3RlciB0cmFuc2ZlciB1c2UgQ1RBUjIgc2V0dGluZy4gKi8KKyAgICBrRFNQSV9NYXN0ZXJDdGFyMyA9IDNVIDw8IERTUElfTUFTVEVSX0NUQVJfU0hJRlQsIC8qITwgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgdXNlIENUQVIzIHNldHRpbmcuICovCisgICAga0RTUElfTWFzdGVyQ3RhcjQgPSA0VSA8PCBEU1BJX01BU1RFUl9DVEFSX1NISUZULCAvKiE8IERTUEkgbWFzdGVyIHRyYW5zZmVyIHVzZSBDVEFSNCBzZXR0aW5nLiAqLworICAgIGtEU1BJX01hc3RlckN0YXI1ID0gNVUgPDwgRFNQSV9NQVNURVJfQ1RBUl9TSElGVCwgLyohPCBEU1BJIG1hc3RlciB0cmFuc2ZlciB1c2UgQ1RBUjUgc2V0dGluZy4gKi8KKyAgICBrRFNQSV9NYXN0ZXJDdGFyNiA9IDZVIDw8IERTUElfTUFTVEVSX0NUQVJfU0hJRlQsIC8qITwgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgdXNlIENUQVI2IHNldHRpbmcuICovCisgICAga0RTUElfTWFzdGVyQ3RhcjcgPSA3VSA8PCBEU1BJX01BU1RFUl9DVEFSX1NISUZULCAvKiE8IERTUEkgbWFzdGVyIHRyYW5zZmVyIHVzZSBDVEFSNyBzZXR0aW5nLiAqLworCisgICAga0RTUElfTWFzdGVyUGNzMCA9IDBVIDw8IERTUElfTUFTVEVSX1BDU19TSElGVCwgLyohPCBEU1BJIG1hc3RlciB0cmFuc2ZlciB1c2UgUENTMCBzaWduYWwuICovCisgICAga0RTUElfTWFzdGVyUGNzMSA9IDFVIDw8IERTUElfTUFTVEVSX1BDU19TSElGVCwgLyohPCBEU1BJIG1hc3RlciB0cmFuc2ZlciB1c2UgUENTMSBzaWduYWwuICovCisgICAga0RTUElfTWFzdGVyUGNzMiA9IDJVIDw8IERTUElfTUFTVEVSX1BDU19TSElGVCwgLyohPCBEU1BJIG1hc3RlciB0cmFuc2ZlciB1c2UgUENTMiBzaWduYWwuKi8KKyAgICBrRFNQSV9NYXN0ZXJQY3MzID0gM1UgPDwgRFNQSV9NQVNURVJfUENTX1NISUZULCAvKiE8IERTUEkgbWFzdGVyIHRyYW5zZmVyIHVzZSBQQ1MzIHNpZ25hbC4gKi8KKyAgICBrRFNQSV9NYXN0ZXJQY3M0ID0gNFUgPDwgRFNQSV9NQVNURVJfUENTX1NISUZULCAvKiE8IERTUEkgbWFzdGVyIHRyYW5zZmVyIHVzZSBQQ1M0IHNpZ25hbC4gKi8KKyAgICBrRFNQSV9NYXN0ZXJQY3M1ID0gNVUgPDwgRFNQSV9NQVNURVJfUENTX1NISUZULCAvKiE8IERTUEkgbWFzdGVyIHRyYW5zZmVyIHVzZSBQQ1M1IHNpZ25hbC4gKi8KKworICAgIGtEU1BJX01hc3RlclBjc0NvbnRpbnVvdXMgPSAxVSA8PCAyMCwgICAgICAgLyohPCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgUENTIHNpZ25hbCBpcyBjb250aW51b3VzLiAqLworICAgIGtEU1BJX01hc3RlckFjdGl2ZUFmdGVyVHJhbnNmZXIgPSAxVSA8PCAyMSwgLyohPCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgUENTIHNpZ25hbCBpcyBhY3RpdmUgYWZ0ZXIgdGhlIGxhc3QgZnJhbWUgdHJhbnNmZXIuKi8KK307CisKKyNkZWZpbmUgRFNQSV9TTEFWRV9DVEFSX1NISUZUICgwVSkgICAvKiE8IERTUEkgc2xhdmUgQ1RBUiBzaGlmdCBtYWNybzsgdXNlZCBpbnRlcm5hbGx5LiAqLworI2RlZmluZSBEU1BJX1NMQVZFX0NUQVJfTUFTSyAoMHgwN1UpIC8qITwgRFNQSSBzbGF2ZSBDVEFSIG1hc2sgbWFjcm87IHVzZWQgaW50ZXJuYWxseS4gKi8KKy8qISBAYnJpZWYgVXNlIHRoaXMgZW51bWVyYXRpb24gZm9yIHRoZSBEU1BJIHNsYXZlIHRyYW5zZmVyIGNvbmZpZ0ZsYWdzLiAqLworZW51bSBfZHNwaV90cmFuc2Zlcl9jb25maWdfZmxhZ19mb3Jfc2xhdmUKK3sKKyAgICBrRFNQSV9TbGF2ZUN0YXIwID0gMFUgPDwgRFNQSV9TTEFWRV9DVEFSX1NISUZULCAvKiE8IERTUEkgc2xhdmUgdHJhbnNmZXIgdXNlIENUQVIwIHNldHRpbmcuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEU1BJIHNsYXZlIGNhbiBvbmx5IHVzZSBQQ1MwLiAqLworfTsKKworLyohIEBicmllZiBEU1BJIHRyYW5zZmVyIHN0YXRlLCB3aGljaCBpcyB1c2VkIGZvciBEU1BJIHRyYW5zYWN0aW9uYWwgQVBJIHN0YXRlIG1hY2hpbmUuICovCitlbnVtIF9kc3BpX3RyYW5zZmVyX3N0YXRlCit7CisgICAga0RTUElfSWRsZSA9IDB4MFUsIC8qITwgTm90aGluZyBpbiB0aGUgdHJhbnNtaXR0ZXIvcmVjZWl2ZXIuICovCisgICAga0RTUElfQnVzeSwgICAgICAgIC8qITwgVHJhbnNmZXIgcXVldWUgaXMgbm90IGZpbmlzaGVkLiAqLworICAgIGtEU1BJX0Vycm9yICAgICAgICAvKiE8IFRyYW5zZmVyIGVycm9yLiAqLworfTsKKworLyohIEBicmllZiBEU1BJIG1hc3RlciBjb21tYW5kIGRhdGUgY29uZmlndXJhdGlvbiB1c2VkIGZvciB0aGUgU1BJeF9QVVNIUi4qLwordHlwZWRlZiBzdHJ1Y3QgX2RzcGlfY29tbWFuZF9kYXRhX2NvbmZpZworeworICAgIGJvb2wgaXNQY3NDb250aW51b3VzOyAgICAgICAgICAgIC8qITwgT3B0aW9uIHRvIGVuYWJsZSB0aGUgY29udGludW91cyBhc3NlcnRpb24gb2YgdGhlIGNoaXAgc2VsZWN0IGJldHdlZW4gdHJhbnNmZXJzLiovCisgICAgZHNwaV9jdGFyX3NlbGVjdGlvbl90IHdoaWNoQ3RhcjsgLyohPCBUaGUgZGVzaXJlZCBDbG9jayBhbmQgVHJhbnNmZXIgQXR0cmlidXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgKENUQVIpIHRvIHVzZSBmb3IgQ1RBUy4qLworICAgIGRzcGlfd2hpY2hfcGNzX3Qgd2hpY2hQY3M7ICAgICAgIC8qITwgVGhlIGRlc2lyZWQgUENTIHNpZ25hbCB0byB1c2UgZm9yIHRoZSBkYXRhIHRyYW5zZmVyLiovCisgICAgYm9vbCBpc0VuZE9mUXVldWU7ICAgICAgICAgICAgICAgLyohPCBTaWduYWxzIHRoYXQgdGhlIGN1cnJlbnQgdHJhbnNmZXIgaXMgdGhlIGxhc3QgaW4gdGhlIHF1ZXVlLiovCisgICAgYm9vbCBjbGVhclRyYW5zZmVyQ291bnQ7ICAgICAgICAgLyohPCBDbGVhcnMgdGhlIFNQSSBUcmFuc2ZlciBDb3VudGVyIChTUElfVENOVCkgYmVmb3JlIHRyYW5zbWlzc2lvbiBzdGFydHMuKi8KK30gZHNwaV9jb21tYW5kX2RhdGFfY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgRFNQSSBtYXN0ZXIgY3RhciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4qLwordHlwZWRlZiBzdHJ1Y3QgX2RzcGlfbWFzdGVyX2N0YXJfY29uZmlnCit7CisgICAgdWludDMyX3QgYmF1ZFJhdGU7ICAgICAgICAgICAgICAgIC8qITwgQmF1ZCBSYXRlIGZvciBEU1BJLiAqLworICAgIHVpbnQzMl90IGJpdHNQZXJGcmFtZTsgICAgICAgICAgICAvKiE8IEJpdHMgcGVyIGZyYW1lLCBtaW5pbXVtIDQsIG1heGltdW0gMTYuKi8KKyAgICBkc3BpX2Nsb2NrX3BvbGFyaXR5X3QgY3BvbDsgICAgICAgLyohPCBDbG9jayBwb2xhcml0eS4gKi8KKyAgICBkc3BpX2Nsb2NrX3BoYXNlX3QgY3BoYTsgICAgICAgICAgLyohPCBDbG9jayBwaGFzZS4gKi8KKyAgICBkc3BpX3NoaWZ0X2RpcmVjdGlvbl90IGRpcmVjdGlvbjsgLyohPCBNU0Igb3IgTFNCIGRhdGEgc2hpZnQgZGlyZWN0aW9uLiAqLworCisgICAgdWludDMyX3QgcGNzVG9TY2tEZWxheUluTmFub1NlYzsgICAgICAgIC8qITwgUENTIHRvIFNDSyBkZWxheSB0aW1lIGluIG5hbm9zZWNvbmRzOyBzZXR0aW5nIHRvIDAgc2V0cyB0aGUgbWluaW11bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheS4gSXQgYWxzbyBzZXRzIHRoZSBib3VuZGFyeSB2YWx1ZSBpZiBvdXQgb2YgcmFuZ2UuKi8KKyAgICB1aW50MzJfdCBsYXN0U2NrVG9QY3NEZWxheUluTmFub1NlYzsgICAgLyohPCBUaGUgbGFzdCBTQ0sgdG8gUENTIGRlbGF5IHRpbWUgaW4gbmFub3NlY29uZHM7IHNldHRpbmcgdG8gMCBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtIGRlbGF5LiBJdCBhbHNvIHNldHMgdGhlIGJvdW5kYXJ5IHZhbHVlIGlmIG91dCBvZiByYW5nZS4qLworCisgICAgdWludDMyX3QgYmV0d2VlblRyYW5zZmVyRGVsYXlJbk5hbm9TZWM7IC8qITwgQWZ0ZXIgdGhlIFNDSyBkZWxheSB0aW1lIGluIG5hbm9zZWNvbmRzOyBzZXR0aW5nIHRvIDAgc2V0cyB0aGUgbWluaW11bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkuIEl0IGFsc28gc2V0cyB0aGUgYm91bmRhcnkgdmFsdWUgaWYgb3V0IG9mIHJhbmdlLiovCit9IGRzcGlfbWFzdGVyX2N0YXJfY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgRFNQSSBtYXN0ZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuKi8KK3R5cGVkZWYgc3RydWN0IF9kc3BpX21hc3Rlcl9jb25maWcKK3sKKyAgICBkc3BpX2N0YXJfc2VsZWN0aW9uX3Qgd2hpY2hDdGFyOyAgICAgIC8qITwgVGhlIGRlc2lyZWQgQ1RBUiB0byB1c2UuICovCisgICAgZHNwaV9tYXN0ZXJfY3Rhcl9jb25maWdfdCBjdGFyQ29uZmlnOyAvKiE8IFNldCB0aGUgY3RhckNvbmZpZyB0byB0aGUgZGVzaXJlZCBDVEFSLiAqLworCisgICAgZHNwaV93aGljaF9wY3NfdCB3aGljaFBjczsgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSBkZXNpcmVkIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgKHBjcykuICovCisgICAgZHNwaV9wY3NfcG9sYXJpdHlfY29uZmlnX3QgcGNzQWN0aXZlSGlnaE9yTG93OyAvKiE8IFRoZSBkZXNpcmVkIFBDUyBhY3RpdmUgaGlnaCBvciBsb3cuICovCisKKyAgICBib29sIGVuYWJsZUNvbnRpbnVvdXNTQ0s7ICAgLyohPCBDT05UX1NDS0UsIGNvbnRpbnVvdXMgU0NLIGVuYWJsZS4gTm90ZSB0aGF0IHRoZSBjb250aW51b3VzIFNDSyBpcyBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGZvciBDUEhBID0gMS4qLworICAgIGJvb2wgZW5hYmxlUnhGaWZvT3ZlcldyaXRlOyAvKiE8IFJPT0UsIHJlY2VpdmUgRklGTyBvdmVyZmxvdyBvdmVyd3JpdGUgZW5hYmxlLiBJZiBST09FID0gMCwgdGhlIGluY29taW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSBpcyBpZ25vcmVkIGFuZCB0aGUgZGF0YSBmcm9tIHRoZSB0cmFuc2ZlciB0aGF0IGdlbmVyYXRlZCB0aGUgb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhbHNvIGlnbm9yZWQuIElmIFJPT0UgPSAxLCB0aGUgaW5jb21pbmcgZGF0YSBpcyBzaGlmdGVkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0IHJlZ2lzdGVyLiAqLworCisgICAgYm9vbCBlbmFibGVNb2RpZmllZFRpbWluZ0Zvcm1hdDsgICAgICAgIC8qITwgRW5hYmxlcyBhIG1vZGlmaWVkIHRyYW5zZmVyIGZvcm1hdCB0byBiZSB1c2VkIGlmIHRydWUuKi8KKyAgICBkc3BpX21hc3Rlcl9zYW1wbGVfcG9pbnRfdCBzYW1wbGVQb2ludDsgLyohPCBDb250cm9scyB3aGVuIHRoZSBtb2R1bGUgbWFzdGVyIHNhbXBsZXMgU0lOIGluIHRoZSBNb2RpZmllZCBUcmFuc2ZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdC4gSXQncyB2YWxpZCBvbmx5IHdoZW4gQ1BIQT0wLiAqLworfSBkc3BpX21hc3Rlcl9jb25maWdfdDsKKworLyohIEBicmllZiBEU1BJIHNsYXZlIGN0YXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuKi8KK3R5cGVkZWYgc3RydWN0IF9kc3BpX3NsYXZlX2N0YXJfY29uZmlnCit7CisgICAgdWludDMyX3QgYml0c1BlckZyYW1lOyAgICAgIC8qITwgQml0cyBwZXIgZnJhbWUsIG1pbmltdW0gNCwgbWF4aW11bSAxNi4qLworICAgIGRzcGlfY2xvY2tfcG9sYXJpdHlfdCBjcG9sOyAvKiE8IENsb2NrIHBvbGFyaXR5LiAqLworICAgIGRzcGlfY2xvY2tfcGhhc2VfdCBjcGhhOyAgICAvKiE8IENsb2NrIHBoYXNlLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIG9ubHkgc3VwcG9ydHMgTVNCIGFuZCBkb2VzIG5vdCBzdXBwb3J0IExTQi4qLworfSBkc3BpX3NsYXZlX2N0YXJfY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgRFNQSSBzbGF2ZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4qLwordHlwZWRlZiBzdHJ1Y3QgX2RzcGlfc2xhdmVfY29uZmlnCit7CisgICAgZHNwaV9jdGFyX3NlbGVjdGlvbl90IHdoaWNoQ3RhcjsgICAgIC8qITwgVGhlIGRlc2lyZWQgQ1RBUiB0byB1c2UuICovCisgICAgZHNwaV9zbGF2ZV9jdGFyX2NvbmZpZ190IGN0YXJDb25maWc7IC8qITwgU2V0IHRoZSBjdGFyQ29uZmlnIHRvIHRoZSBkZXNpcmVkIENUQVIuICovCisKKyAgICBib29sIGVuYWJsZUNvbnRpbnVvdXNTQ0s7ICAgICAgICAgICAgICAgLyohPCBDT05UX1NDS0UsIGNvbnRpbnVvdXMgU0NLIGVuYWJsZS4gTm90ZSB0aGF0IHRoZSBjb250aW51b3VzIFNDSyBpcyBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGZvciBDUEhBID0gMS4qLworICAgIGJvb2wgZW5hYmxlUnhGaWZvT3ZlcldyaXRlOyAgICAgICAgICAgICAvKiE8IFJPT0UsIHJlY2VpdmUgRklGTyBvdmVyZmxvdyBvdmVyd3JpdGUgZW5hYmxlLiBJZiBST09FID0gMCwgdGhlIGluY29taW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSBpcyBpZ25vcmVkIGFuZCB0aGUgZGF0YSBmcm9tIHRoZSB0cmFuc2ZlciB0aGF0IGdlbmVyYXRlZCB0aGUgb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhbHNvIGlnbm9yZWQuIElmIFJPT0UgPSAxLCB0aGUgaW5jb21pbmcgZGF0YSBpcyBzaGlmdGVkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0IHJlZ2lzdGVyLiAqLworICAgIGJvb2wgZW5hYmxlTW9kaWZpZWRUaW1pbmdGb3JtYXQ7ICAgICAgICAvKiE8IEVuYWJsZXMgYSBtb2RpZmllZCB0cmFuc2ZlciBmb3JtYXQgdG8gYmUgdXNlZCBpZiB0cnVlLiovCisgICAgZHNwaV9tYXN0ZXJfc2FtcGxlX3BvaW50X3Qgc2FtcGxlUG9pbnQ7IC8qITwgQ29udHJvbHMgd2hlbiB0aGUgbW9kdWxlIG1hc3RlciBzYW1wbGVzIFNJTiBpbiB0aGUgTW9kaWZpZWQgVHJhbnNmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0LiBJdCdzIHZhbGlkIG9ubHkgd2hlbiBDUEhBPTAuICovCit9IGRzcGlfc2xhdmVfY29uZmlnX3Q7CisKKy8qIQorKiBAYnJpZWYgRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgX2RzcGlfbWFzdGVyX2hhbmRsZSB0eXBlZGVmcy4KKyovCit0eXBlZGVmIHN0cnVjdCBfZHNwaV9tYXN0ZXJfaGFuZGxlIGRzcGlfbWFzdGVyX2hhbmRsZV90OworCisvKiEKKyogQGJyaWVmIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIF9kc3BpX3NsYXZlX2hhbmRsZSB0eXBlZGVmcy4KKyovCit0eXBlZGVmIHN0cnVjdCBfZHNwaV9zbGF2ZV9oYW5kbGUgZHNwaV9zbGF2ZV9oYW5kbGVfdDsKKworLyohCisgKiBAYnJpZWYgQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyIHR5cGUuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIFBvaW50ZXIgdG8gdGhlIGhhbmRsZSBmb3IgdGhlIERTUEkgbWFzdGVyLgorICogQHBhcmFtIHN0YXR1cyBTdWNjZXNzIG9yIGVycm9yIGNvZGUgZGVzY3JpYmluZyB3aGV0aGVyIHRoZSB0cmFuc2ZlciBjb21wbGV0ZWQuCisgKiBAcGFyYW0gdXNlckRhdGEgQXJiaXRyYXJ5IHBvaW50ZXItZGF0YVNpemVkIHZhbHVlIHBhc3NlZCBmcm9tIHRoZSBhcHBsaWNhdGlvbi4KKyAqLwordHlwZWRlZiB2b2lkICgqZHNwaV9tYXN0ZXJfdHJhbnNmZXJfY2FsbGJhY2tfdCkoU1BJX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOworLyohCisgKiBAYnJpZWYgQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyIHR5cGUuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIFBvaW50ZXIgdG8gdGhlIGhhbmRsZSBmb3IgdGhlIERTUEkgc2xhdmUuCisgKiBAcGFyYW0gc3RhdHVzIFN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSBkZXNjcmliaW5nIHdoZXRoZXIgdGhlIHRyYW5zZmVyIGNvbXBsZXRlZC4KKyAqIEBwYXJhbSB1c2VyRGF0YSBBcmJpdHJhcnkgcG9pbnRlci1kYXRhU2l6ZWQgdmFsdWUgcGFzc2VkIGZyb20gdGhlIGFwcGxpY2F0aW9uLgorICovCit0eXBlZGVmIHZvaWQgKCpkc3BpX3NsYXZlX3RyYW5zZmVyX2NhbGxiYWNrX3QpKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOworCisvKiEgQGJyaWVmIERTUEkgbWFzdGVyL3NsYXZlIHRyYW5zZmVyIHN0cnVjdHVyZS4qLwordHlwZWRlZiBzdHJ1Y3QgX2RzcGlfdHJhbnNmZXIKK3sKKyAgICB1aW50OF90ICp0eERhdGE7ICAgICAgICAgIC8qITwgU2VuZCBidWZmZXIuICovCisgICAgdWludDhfdCAqcnhEYXRhOyAgICAgICAgICAvKiE8IFJlY2VpdmUgYnVmZmVyLiAqLworICAgIHZvbGF0aWxlIHNpemVfdCBkYXRhU2l6ZTsgLyohPCBUcmFuc2ZlciBieXRlcy4gKi8KKworICAgIHVpbnQzMl90CisgICAgICAgIGNvbmZpZ0ZsYWdzOyAvKiE8IFRyYW5zZmVyIHRyYW5zZmVyIGNvbmZpZ3VyYXRpb24gZmxhZ3M7IHNldCBmcm9tIF9kc3BpX3RyYW5zZmVyX2NvbmZpZ19mbGFnX2Zvcl9tYXN0ZXIgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlciBpcyB1c2VkIGZvciBtYXN0ZXIgb3IgX2RzcGlfdHJhbnNmZXJfY29uZmlnX2ZsYWdfZm9yX3NsYXZlIGVudW1lcmF0aW9uIGlmIHRoZSB0cmFuc2ZlcgorICAgICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZCBmb3Igc2xhdmUuKi8KK30gZHNwaV90cmFuc2Zlcl90OworCisvKiEgQGJyaWVmIERTUEkgbWFzdGVyIHRyYW5zZmVyIGhhbmRsZSBzdHJ1Y3R1cmUgdXNlZCBmb3IgdHJhbnNhY3Rpb25hbCBBUEkuICovCitzdHJ1Y3QgX2RzcGlfbWFzdGVyX2hhbmRsZQoreworICAgIHVpbnQzMl90IGJpdHNQZXJGcmFtZTsgICAgICAgICAvKiE8IFRoZSBkZXNpcmVkIG51bWJlciBvZiBiaXRzIHBlciBmcmFtZS4gKi8KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBjb21tYW5kOyAgICAgLyohPCBUaGUgZGVzaXJlZCBkYXRhIGNvbW1hbmQuICovCisgICAgdm9sYXRpbGUgdWludDMyX3QgbGFzdENvbW1hbmQ7IC8qITwgVGhlIGRlc2lyZWQgbGFzdCBkYXRhIGNvbW1hbmQuICovCisKKyAgICB1aW50OF90IGZpZm9TaXplOyAvKiE8IEZJRk8gZGF0YVNpemUuICovCisKKyAgICB2b2xhdGlsZSBib29sIGlzUGNzQWN0aXZlQWZ0ZXJUcmFuc2ZlcjsgLyohPCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgUENTIHNpZ25hbCBpcyBhY3RpdmUgYWZ0ZXIgdGhlIGxhc3QgZnJhbWUgdHJhbnNmZXIuKi8KKyAgICB2b2xhdGlsZSBib29sIGlzVGhlcmVFeHRyYUJ5dGU7ICAgICAgICAgLyohPCBJbmRpY2F0ZXMgd2hldGhlciB0aGVyZSBhcmUgZXh0cmEgYnl0ZXMuKi8KKworICAgIHVpbnQ4X3QgKnZvbGF0aWxlIHR4RGF0YTsgICAgICAgICAgICAgICAgICAvKiE8IFNlbmQgYnVmZmVyLiAqLworICAgIHVpbnQ4X3QgKnZvbGF0aWxlIHJ4RGF0YTsgICAgICAgICAgICAgICAgICAvKiE8IFJlY2VpdmUgYnVmZmVyLiAqLworICAgIHZvbGF0aWxlIHNpemVfdCByZW1haW5pbmdTZW5kQnl0ZUNvdW50OyAgICAvKiE8IEEgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyB0byBzZW5kLiovCisgICAgdm9sYXRpbGUgc2l6ZV90IHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7IC8qITwgQSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIHRvIHJlY2VpdmUuKi8KKyAgICBzaXplX3QgdG90YWxCeXRlQ291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyohPCBBIG51bWJlciBvZiB0cmFuc2ZlciBieXRlcyovCisKKyAgICB2b2xhdGlsZSB1aW50OF90IHN0YXRlOyAvKiE8IERTUEkgdHJhbnNmZXIgc3RhdGUsIHNlZSBfZHNwaV90cmFuc2Zlcl9zdGF0ZS4qLworCisgICAgZHNwaV9tYXN0ZXJfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjazsgLyohPCBDb21wbGV0aW9uIGNhbGxiYWNrLiAqLworICAgIHZvaWQgKnVzZXJEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2FsbGJhY2sgdXNlciBkYXRhLiAqLworfTsKKworLyohIEBicmllZiBEU1BJIHNsYXZlIHRyYW5zZmVyIGhhbmRsZSBzdHJ1Y3R1cmUgdXNlZCBmb3IgdGhlIHRyYW5zYWN0aW9uYWwgQVBJLiAqLworc3RydWN0IF9kc3BpX3NsYXZlX2hhbmRsZQoreworICAgIHVpbnQzMl90IGJpdHNQZXJGcmFtZTsgICAgICAgICAgLyohPCBUaGUgZGVzaXJlZCBudW1iZXIgb2YgYml0cyBwZXIgZnJhbWUuICovCisgICAgdm9sYXRpbGUgYm9vbCBpc1RoZXJlRXh0cmFCeXRlOyAvKiE8IEluZGljYXRlcyB3aGV0aGVyIHRoZXJlIGFyZSBleHRyYSBieXRlcy4qLworCisgICAgdWludDhfdCAqdm9sYXRpbGUgdHhEYXRhOyAgICAgICAgICAgICAgICAgIC8qITwgU2VuZCBidWZmZXIuICovCisgICAgdWludDhfdCAqdm9sYXRpbGUgcnhEYXRhOyAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBidWZmZXIuICovCisgICAgdm9sYXRpbGUgc2l6ZV90IHJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7ICAgIC8qITwgQSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIHRvIHNlbmQuKi8KKyAgICB2b2xhdGlsZSBzaXplX3QgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsgLyohPCBBIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgdG8gcmVjZWl2ZS4qLworICAgIHNpemVfdCB0b3RhbEJ5dGVDb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiE8IEEgbnVtYmVyIG9mIHRyYW5zZmVyIGJ5dGVzKi8KKworICAgIHZvbGF0aWxlIHVpbnQ4X3Qgc3RhdGU7IC8qITwgRFNQSSB0cmFuc2ZlciBzdGF0ZS4qLworCisgICAgdm9sYXRpbGUgdWludDMyX3QgZXJyb3JDb3VudDsgLyohPCBFcnJvciBjb3VudCBmb3Igc2xhdmUgdHJhbnNmZXIuKi8KKworICAgIGRzcGlfc2xhdmVfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjazsgLyohPCBDb21wbGV0aW9uIGNhbGxiYWNrLiAqLworICAgIHZvaWQgKnVzZXJEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDYWxsYmFjayB1c2VyIGRhdGEuICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKl9jcGx1c3BsdXMqLworCisvKiEKKyAqIEBuYW1lIEluaXRpYWxpemF0aW9uIGFuZCBkZWluaXRpYWxpemF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBEU1BJIG1hc3Rlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBEU1BJIG1hc3RlciBjb25maWd1cmF0aW9uLiBUaGlzIGlzIGFuIGV4YW1wbGUgdXNlIGNhc2UuCisgKiAgQGNvZGUKKyAqICAgZHNwaV9tYXN0ZXJfY29uZmlnX3QgIG1hc3RlckNvbmZpZzsKKyAqICAgbWFzdGVyQ29uZmlnLndoaWNoQ3RhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBrRFNQSV9DdGFyMDsKKyAqICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuYmF1ZFJhdGUgICAgICAgICAgICAgICAgICAgICAgPSA1MDAwMDAwMDBVOworICogICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5iaXRzUGVyRnJhbWUgICAgICAgICAgICAgICAgICA9IDg7CisgKiAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmNwb2wgICAgICAgICAgICAgICAgICAgICAgICAgID0ga0RTUElfQ2xvY2tQb2xhcml0eUFjdGl2ZUhpZ2g7CisgKiAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmNwaGEgICAgICAgICAgICAgICAgICAgICAgICAgID0ga0RTUElfQ2xvY2tQaGFzZUZpcnN0RWRnZTsKKyAqICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuZGlyZWN0aW9uICAgICAgICAgICAgICAgICAgICAgPSBrRFNQSV9Nc2JGaXJzdDsKKyAqICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcucGNzVG9TY2tEZWxheUluTmFub1NlYyAgICAgICAgPSAxMDAwMDAwMDAwVSAvIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmJhdWRSYXRlIDsKKyAqICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcubGFzdFNja1RvUGNzRGVsYXlJbk5hbm9TZWMgICAgPSAxMDAwMDAwMDAwVSAvIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmJhdWRSYXRlIDsKKyAqICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuYmV0d2VlblRyYW5zZmVyRGVsYXlJbk5hbm9TZWMgPSAxMDAwMDAwMDAwVSAvIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmJhdWRSYXRlIDsKKyAqICAgbWFzdGVyQ29uZmlnLndoaWNoUGNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBrRFNQSV9QY3MwOworICogICBtYXN0ZXJDb25maWcucGNzQWN0aXZlSGlnaE9yTG93ICAgICAgICAgICAgICAgICAgICAgICA9IGtEU1BJX1Bjc0FjdGl2ZUxvdzsKKyAqICAgbWFzdGVyQ29uZmlnLmVuYWJsZUNvbnRpbnVvdXNTQ0sgICAgICAgICAgICAgICAgICAgICAgPSBmYWxzZTsKKyAqICAgbWFzdGVyQ29uZmlnLmVuYWJsZVJ4Rmlmb092ZXJXcml0ZSAgICAgICAgICAgICAgICAgICAgPSBmYWxzZTsKKyAqICAgbWFzdGVyQ29uZmlnLmVuYWJsZU1vZGlmaWVkVGltaW5nRm9ybWF0ICAgICAgICAgICAgICAgPSBmYWxzZTsKKyAqICAgbWFzdGVyQ29uZmlnLnNhbXBsZVBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBrRFNQSV9TY2tUb1NpbjBDbG9jazsKKyAqICAgRFNQSV9NYXN0ZXJJbml0KGJhc2UsICZtYXN0ZXJDb25maWcsIHNyY0Nsb2NrX0h6KTsKKyAqICBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIG1hc3RlckNvbmZpZyBQb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgZHNwaV9tYXN0ZXJfY29uZmlnX3QuCisgKiBAcGFyYW0gc3JjQ2xvY2tfSHogTW9kdWxlIHNvdXJjZSBpbnB1dCBjbG9jayBpbiBIZXJ0ei4KKyAqLwordm9pZCBEU1BJX01hc3RlckluaXQoU1BJX1R5cGUgKmJhc2UsIGNvbnN0IGRzcGlfbWFzdGVyX2NvbmZpZ190ICptYXN0ZXJDb25maWcsIHVpbnQzMl90IHNyY0Nsb2NrX0h6KTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgZHNwaV9tYXN0ZXJfY29uZmlnX3Qgc3RydWN0dXJlIHRvIGRlZmF1bHQgdmFsdWVzLgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgQVBJIGlzIHRvIGdldCB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQgZm9yIHRoZSBEU1BJX01hc3RlckluaXQoKS4KKyAqIFVzZXJzIG1heSB1c2UgdGhlIGluaXRpYWxpemVkIHN0cnVjdHVyZSB1bmNoYW5nZWQgaW4gdGhlIERTUElfTWFzdGVySW5pdCgpIG9yIG1vZGlmeSB0aGUgc3RydWN0dXJlCisgKiBiZWZvcmUgY2FsbGluZyB0aGUgRFNQSV9NYXN0ZXJJbml0KCkuCisgKiBFeGFtcGxlOgorICogQGNvZGUKKyAqICBkc3BpX21hc3Rlcl9jb25maWdfdCAgbWFzdGVyQ29uZmlnOworICogIERTUElfTWFzdGVyR2V0RGVmYXVsdENvbmZpZygmbWFzdGVyQ29uZmlnKTsKKyAqIEBlbmRjb2RlCisgKiBAcGFyYW0gbWFzdGVyQ29uZmlnIHBvaW50ZXIgdG8gZHNwaV9tYXN0ZXJfY29uZmlnX3Qgc3RydWN0dXJlCisgKi8KK3ZvaWQgRFNQSV9NYXN0ZXJHZXREZWZhdWx0Q29uZmlnKGRzcGlfbWFzdGVyX2NvbmZpZ190ICptYXN0ZXJDb25maWcpOworCisvKiEKKyAqIEBicmllZiBEU1BJIHNsYXZlIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgRFNQSSBzbGF2ZSBjb25maWd1cmF0aW9uLiBUaGlzIGlzIGFuIGV4YW1wbGUgdXNlIGNhc2UuCisgKiAgQGNvZGUKKyAqICAgZHNwaV9zbGF2ZV9jb25maWdfdCAgc2xhdmVDb25maWc7CisgKiAgc2xhdmVDb25maWctPndoaWNoQ3RhciAgICAgICAgICAgICAgICAgID0ga0RTUElfQ3RhcjA7CisgKiAgc2xhdmVDb25maWctPmN0YXJDb25maWcuYml0c1BlckZyYW1lICAgID0gODsKKyAqICBzbGF2ZUNvbmZpZy0+Y3RhckNvbmZpZy5jcG9sICAgICAgICAgICAgPSBrRFNQSV9DbG9ja1BvbGFyaXR5QWN0aXZlSGlnaDsKKyAqICBzbGF2ZUNvbmZpZy0+Y3RhckNvbmZpZy5jcGhhICAgICAgICAgICAgPSBrRFNQSV9DbG9ja1BoYXNlRmlyc3RFZGdlOworICogIHNsYXZlQ29uZmlnLT5lbmFibGVDb250aW51b3VzU0NLICAgICAgICA9IGZhbHNlOworICogIHNsYXZlQ29uZmlnLT5lbmFibGVSeEZpZm9PdmVyV3JpdGUgICAgICA9IGZhbHNlOworICogIHNsYXZlQ29uZmlnLT5lbmFibGVNb2RpZmllZFRpbWluZ0Zvcm1hdCA9IGZhbHNlOworICogIHNsYXZlQ29uZmlnLT5zYW1wbGVQb2ludCAgICAgICAgICAgICAgICA9IGtEU1BJX1Nja1RvU2luMENsb2NrOworICogICBEU1BJX1NsYXZlSW5pdChiYXNlLCAmc2xhdmVDb25maWcpOworICogIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gc2xhdmVDb25maWcgUG9pbnRlciB0byB0aGUgc3RydWN0dXJlIGRzcGlfbWFzdGVyX2NvbmZpZ190LgorICovCit2b2lkIERTUElfU2xhdmVJbml0KFNQSV9UeXBlICpiYXNlLCBjb25zdCBkc3BpX3NsYXZlX2NvbmZpZ190ICpzbGF2ZUNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIGRzcGlfc2xhdmVfY29uZmlnX3Qgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB2YWx1ZS4KKyAqCisgKiBUaGUgcHVycG9zZSBvZiB0aGlzIEFQSSBpcyB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGluaXRpYWxpemVkIGZvciB0aGUgRFNQSV9TbGF2ZUluaXQoKS4KKyAqIFVzZXJzIG1heSB1c2UgdGhlIGluaXRpYWxpemVkIHN0cnVjdHVyZSB1bmNoYW5nZWQgaW4gdGhlIERTUElfU2xhdmVJbml0KCkgb3IgbW9kaWZ5IHRoZSBzdHJ1Y3R1cmUKKyAqIGJlZm9yZSBjYWxsaW5nIHRoZSBEU1BJX1NsYXZlSW5pdCgpLgorICogVGhpcyBpcyBhbiBleGFtcGxlLgorICogQGNvZGUKKyAqICBkc3BpX3NsYXZlX2NvbmZpZ190ICBzbGF2ZUNvbmZpZzsKKyAqICBEU1BJX1NsYXZlR2V0RGVmYXVsdENvbmZpZygmc2xhdmVDb25maWcpOworICogQGVuZGNvZGUKKyAqIEBwYXJhbSBzbGF2ZUNvbmZpZyBQb2ludGVyIHRvIHRoZSBkc3BpX3NsYXZlX2NvbmZpZ190IHN0cnVjdHVyZS4KKyAqLwordm9pZCBEU1BJX1NsYXZlR2V0RGVmYXVsdENvbmZpZyhkc3BpX3NsYXZlX2NvbmZpZ190ICpzbGF2ZUNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIERlLWluaXRpYWxpemVzIHRoZSBEU1BJIHBlcmlwaGVyYWwuIENhbGwgdGhpcyBBUEkgdG8gZGlzYWJsZSB0aGUgRFNQSSBjbG9jay4KKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICovCit2b2lkIERTUElfRGVpbml0KFNQSV9UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgRFNQSSBwZXJpcGhlcmFsIGFuZCBzZXRzIHRoZSBNQ1IgTURJUyB0byAwLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZSBQYXNzIHRydWUgdG8gZW5hYmxlIG1vZHVsZSwgZmFsc2UgdG8gZGlzYWJsZSBtb2R1bGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBEU1BJX0VuYWJsZShTUElfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPk1DUiAmPSB+U1BJX01DUl9NRElTX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPk1DUiB8PSBTUElfTUNSX01ESVNfTUFTSzsKKyAgICB9Cit9CisKKy8qIQorICpAfQorKi8KKworLyohCisgKiBAbmFtZSBTdGF0dXMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgRFNQSSBzdGF0dXMgZmxhZyBzdGF0ZS4KKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHJldHVybiBEU1BJIHN0YXR1cyAoaW4gU1IgcmVnaXN0ZXIpLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IERTUElfR2V0U3RhdHVzRmxhZ3MoU1BJX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChiYXNlLT5TUik7Cit9CisKKy8qIQorICogQGJyaWVmIENsZWFycyB0aGUgRFNQSSBzdGF0dXMgZmxhZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uICBjbGVhcnMgdGhlIGRlc2lyZWQgc3RhdHVzIGJpdCBieSB1c2luZyBhIHdyaXRlLTEtdG8tY2xlYXIuIFRoZSB1c2VyIHBhc3NlcyBpbiB0aGUgYmFzZSBhbmQgdGhlCisgKiBkZXNpcmVkIHN0YXR1cyBiaXQgdG8gY2xlYXIuICBUaGUgbGlzdCBvZiBzdGF0dXMgYml0cyBpcyBkZWZpbmVkIGluIHRoZSBkc3BpX3N0YXR1c19hbmRfaW50ZXJydXB0X3JlcXVlc3RfdC4gVGhlCisgKiBmdW5jdGlvbiB1c2VzIHRoZXNlIGJpdCBwb3NpdGlvbnMgaW4gaXRzIGFsZ29yaXRobSB0byBjbGVhciB0aGUgZGVzaXJlZCBmbGFnIHN0YXRlLgorICogVGhpcyBpcyBhbiBleGFtcGxlLgorICogQGNvZGUKKyAqICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhDb21wbGV0ZUZsYWd8a0RTUElfRW5kT2ZRdWV1ZUZsYWcpOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBzdGF0dXNGbGFncyBUaGUgc3RhdHVzIGZsYWcgdXNlZCBmcm9tIHRoZSB0eXBlIGRzcGlfZmxhZ3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoU1BJX1R5cGUgKmJhc2UsIHVpbnQzMl90IHN0YXR1c0ZsYWdzKQoreworICAgIGJhc2UtPlNSID0gc3RhdHVzRmxhZ3M7IC8qITwgVGhlIHN0YXR1cyBmbGFncyBhcmUgY2xlYXJlZCBieSB3cml0aW5nIDEgKHcxYykuKi8KK30KKworLyohCisgKkB9CisqLworCisvKiEKKyAqIEBuYW1lIEludGVycnVwdHMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgRFNQSSBpbnRlcnJ1cHRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgdmFyaW91cyBpbnRlcnJ1cHQgbWFza3Mgb2YgdGhlIERTUEkuICBUaGUgcGFyYW1ldGVycyBhcmUgYSBiYXNlIGFuZCBhbiBpbnRlcnJ1cHQgbWFzay4KKyAqIE5vdGUsIGZvciBUeCBGaWxsIGFuZCBSeCBGSUZPIGRyYWluIHJlcXVlc3RzLCBlbmFibGUgdGhlIGludGVycnVwdCByZXF1ZXN0IGFuZCBkaXNhYmxlIHRoZSBETUEgcmVxdWVzdC4KKyAqCisgKiBAY29kZQorICogIERTUElfRW5hYmxlSW50ZXJydXB0cyhiYXNlLCBrRFNQSV9UeENvbXBsZXRlSW50ZXJydXB0RW5hYmxlIHwga0RTUElfRW5kT2ZRdWV1ZUludGVycnVwdEVuYWJsZSApOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIFRoZSBpbnRlcnJ1cHQgbWFzazsgdXNlIHRoZSBlbnVtIF9kc3BpX2ludGVycnVwdF9lbmFibGUuCisgKi8KK3ZvaWQgRFNQSV9FbmFibGVJbnRlcnJ1cHRzKFNQSV9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgdGhlIERTUEkgaW50ZXJydXB0cy4KKyAqCisgKiBAY29kZQorICogIERTUElfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0RTUElfVHhDb21wbGV0ZUludGVycnVwdEVuYWJsZSB8IGtEU1BJX0VuZE9mUXVldWVJbnRlcnJ1cHRFbmFibGUgKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0IG1hc2s7IHVzZSB0aGUgZW51bSBfZHNwaV9pbnRlcnJ1cHRfZW5hYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRFNQSV9EaXNhYmxlSW50ZXJydXB0cyhTUElfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5SU0VSICY9IH5tYXNrOworfQorCisvKiEKKyAqQH0KKyovCisKKy8qIQorICogQG5hbWUgRE1BIENvbnRyb2wKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgRFNQSSBETUEgcmVxdWVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIFJ4IGFuZCBUeCBETUEgbWFzayBvZiB0aGUgRFNQSS4gIFRoZSBwYXJhbWV0ZXJzIGFyZSBhIGJhc2UgYW5kIGEgRE1BIG1hc2suCisgKiBAY29kZQorICogIERTUElfRW5hYmxlRE1BKGJhc2UsIGtEU1BJX1R4RG1hRW5hYmxlIHwga0RTUElfUnhEbWFFbmFibGUpOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIFRoZSBpbnRlcnJ1cHQgbWFzazsgdXNlIHRoZSBlbnVtIGRzcGlfZG1hX2VuYWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERTUElfRW5hYmxlRE1BKFNQSV9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPlJTRVIgfD0gbWFzazsKK30KKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgdGhlIERTUEkgRE1BIHJlcXVlc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBSeCBhbmQgVHggRE1BIG1hc2sgb2YgdGhlIERTUEkuICBUaGUgcGFyYW1ldGVycyBhcmUgYSBiYXNlIGFuZCBhIERNQSBtYXNrLgorICogQGNvZGUKKyAqICBTUElfRGlzYWJsZURNQShiYXNlLCBrRFNQSV9UeERtYUVuYWJsZSB8IGtEU1BJX1J4RG1hRW5hYmxlKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0IG1hc2s7IHVzZSB0aGUgZW51bSBkc3BpX2RtYV9lbmFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBEU1BJX0Rpc2FibGVETUEoU1BJX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+UlNFUiAmPSB+bWFzazsKK30KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgRFNQSSBtYXN0ZXIgUFVTSFIgZGF0YSByZWdpc3RlciBhZGRyZXNzIGZvciB0aGUgRE1BIG9wZXJhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIERTUEkgbWFzdGVyIFBVU0hSIGRhdGEgcmVnaXN0ZXIgYWRkcmVzcyBiZWNhdXNlIHRoaXMgdmFsdWUgaXMgbmVlZGVkIGZvciB0aGUgRE1BIG9wZXJhdGlvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEByZXR1cm4gVGhlIERTUEkgbWFzdGVyIFBVU0hSIGRhdGEgcmVnaXN0ZXIgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBEU1BJX01hc3RlckdldFR4UmVnaXN0ZXJBZGRyZXNzKFNQSV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAodWludDMyX3QpICYgKGJhc2UtPlBVU0hSKTsKK30KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgRFNQSSBzbGF2ZSBQVVNIUiBkYXRhIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoZSBETUEgb3BlcmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgRFNQSSBzbGF2ZSBQVVNIUiBkYXRhIHJlZ2lzdGVyIGFkZHJlc3MgYXMgdGhpcyB2YWx1ZSBpcyBuZWVkZWQgZm9yIHRoZSBETUEgb3BlcmF0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHJldHVybiBUaGUgRFNQSSBzbGF2ZSBQVVNIUiBkYXRhIHJlZ2lzdGVyIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgRFNQSV9TbGF2ZUdldFR4UmVnaXN0ZXJBZGRyZXNzKFNQSV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAodWludDMyX3QpICYgKGJhc2UtPlBVU0hSX1NMQVZFKTsKK30KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgRFNQSSBQT1BSIGRhdGEgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhlIERNQSBvcGVyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBEU1BJIFBPUFIgZGF0YSByZWdpc3RlciBhZGRyZXNzIGFzIHRoaXMgdmFsdWUgaXMgbmVlZGVkIGZvciB0aGUgRE1BIG9wZXJhdGlvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEByZXR1cm4gVGhlIERTUEkgUE9QUiBkYXRhIHJlZ2lzdGVyIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgRFNQSV9HZXRSeFJlZ2lzdGVyQWRkcmVzcyhTUElfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90KSAmIChiYXNlLT5QT1BSKTsKK30KKworLyohCisgKkB9CisqLworCisvKiEKKyAqIEBuYW1lIEJ1cyBPcGVyYXRpb25zCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIERTUEkgZm9yIG1hc3RlciBvciBzbGF2ZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBtb2RlIE1vZGUgc2V0dGluZyAobWFzdGVyIG9yIHNsYXZlKSBvZiB0eXBlIGRzcGlfbWFzdGVyX3NsYXZlX21vZGVfdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERTUElfU2V0TWFzdGVyU2xhdmVNb2RlKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9zbGF2ZV9tb2RlX3QgbW9kZSkKK3sKKyAgICBiYXNlLT5NQ1IgPSAoYmFzZS0+TUNSICYgKH5TUElfTUNSX01TVFJfTUFTSykpIHwgU1BJX01DUl9NU1RSKG1vZGUpOworfQorCisvKiEKKyAqIEBicmllZiBSZXR1cm5zIHdoZXRoZXIgdGhlIERTUEkgbW9kdWxlIGlzIGluIG1hc3RlciBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHJldHVybiBSZXR1cm5zIHRydWUgaWYgdGhlIG1vZHVsZSBpcyBpbiBtYXN0ZXIgbW9kZSBvciBmYWxzZSBpZiB0aGUgbW9kdWxlIGlzIGluIHNsYXZlIG1vZGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBEU1BJX0lzTWFzdGVyKFNQSV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAoYm9vbCkoKGJhc2UtPk1DUikgJiBTUElfTUNSX01TVFJfTUFTSyk7Cit9CisvKiEKKyAqIEBicmllZiBTdGFydHMgdGhlIERTUEkgdHJhbnNmZXJzIGFuZCBjbGVhcnMgSEFMVCBiaXQgaW4gTUNSLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbW9kdWxlIHRvIHN0YXJ0IGRhdGEgdHJhbnNmZXIgaW4gZWl0aGVyIG1hc3RlciBvciBzbGF2ZSBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRFNQSV9TdGFydFRyYW5zZmVyKFNQSV9UeXBlICpiYXNlKQoreworICAgIGJhc2UtPk1DUiAmPSB+U1BJX01DUl9IQUxUX01BU0s7Cit9CisvKiEKKyAqIEBicmllZiBTdG9wcyBEU1BJIHRyYW5zZmVycyBhbmQgc2V0cyB0aGUgSEFMVCBiaXQgaW4gTUNSLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc3RvcHMgZGF0YSB0cmFuc2ZlcnMgaW4gZWl0aGVyIG1hc3RlciBvciBzbGF2ZSBtb2Rlcy4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERTUElfU3RvcFRyYW5zZmVyKFNQSV9UeXBlICpiYXNlKQoreworICAgIGJhc2UtPk1DUiB8PSBTUElfTUNSX0hBTFRfTUFTSzsKK30KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgRFNQSSBGSUZPcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uICBhbGxvd3MgdGhlIGNhbGxlciB0byBkaXNhYmxlL2VuYWJsZSB0aGUgVHggYW5kIFJ4IEZJRk9zIGluZGVwZW5kZW50bHkuCisgKiBOb3RlIHRoYXQgdG8gZGlzYWJsZSwgcGFzcyBpbiBhIGxvZ2ljIDAgKGZhbHNlKSBmb3IgdGhlIHBhcnRpY3VsYXIgRklGTyBjb25maWd1cmF0aW9uLiAgVG8gZW5hYmxlLAorICogcGFzcyBpbiBhIGxvZ2ljIDEgKHRydWUpLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZVR4RmlmbyBEaXNhYmxlcyAoZmFsc2UpIHRoZSBUWCBGSUZPOyBPdGhlcndpc2UsIGVuYWJsZXMgKHRydWUpIHRoZSBUWCBGSUZPCisgKiBAcGFyYW0gZW5hYmxlUnhGaWZvIERpc2FibGVzIChmYWxzZSkgdGhlIFJYIEZJRk87IE90aGVyd2lzZSwgZW5hYmxlcyAodHJ1ZSkgdGhlIFJYIEZJRk8KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERTUElfU2V0Rmlmb0VuYWJsZShTUElfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGVUeEZpZm8sIGJvb2wgZW5hYmxlUnhGaWZvKQoreworICAgIGJhc2UtPk1DUiA9IChiYXNlLT5NQ1IgJiAofihTUElfTUNSX0RJU19SWEZfTUFTSyB8IFNQSV9NQ1JfRElTX1RYRl9NQVNLKSkpIHwgU1BJX01DUl9ESVNfVFhGKCFlbmFibGVUeEZpZm8pIHwKKyAgICAgICAgICAgICAgICBTUElfTUNSX0RJU19SWEYoIWVuYWJsZVJ4Rmlmbyk7Cit9CisKKy8qIQorICogQGJyaWVmIEZsdXNoZXMgdGhlIERTUEkgRklGT3MuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gZmx1c2hUeEZpZm8gRmx1c2hlcyAodHJ1ZSkgdGhlIFR4IEZJRk87IE90aGVyd2lzZSwgZG9lcyBub3QgZmx1c2ggKGZhbHNlKSB0aGUgVHggRklGTworICogQHBhcmFtIGZsdXNoUnhGaWZvIEZsdXNoZXMgKHRydWUpIHRoZSBSeCBGSUZPOyBPdGhlcndpc2UsIGRvZXMgbm90IGZsdXNoIChmYWxzZSkgdGhlIFJ4IEZJRk8KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERTUElfRmx1c2hGaWZvKFNQSV9UeXBlICpiYXNlLCBib29sIGZsdXNoVHhGaWZvLCBib29sIGZsdXNoUnhGaWZvKQoreworICAgIGJhc2UtPk1DUiA9IChiYXNlLT5NQ1IgJiAofihTUElfTUNSX0NMUl9UWEZfTUFTSyB8IFNQSV9NQ1JfQ0xSX1JYRl9NQVNLKSkpIHwgU1BJX01DUl9DTFJfVFhGKGZsdXNoVHhGaWZvKSB8CisgICAgICAgICAgICAgICAgU1BJX01DUl9DTFJfUlhGKGZsdXNoUnhGaWZvKTsKK30KKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgRFNQSSBwZXJpcGhlcmFsIGNoaXAgc2VsZWN0IHBvbGFyaXR5IHNpbXVsdGFuZW91c2x5LgorICogRm9yIGV4YW1wbGUsIFBDUzAgYW5kIFBDUzEgYXJlIHNldCB0byBhY3RpdmUgbG93IGFuZCBvdGhlciBQQ1MgaXMgc2V0IHRvIGFjdGl2ZSBoaWdoLiBOb3RlIHRoYXQgdGhlIG51bWJlciBvZgorICogUENTcyBpcyBzcGVjaWZpYyB0byB0aGUgZGV2aWNlLgorICogQGNvZGUKKyAqICBEU1BJX1NldEFsbFBjc1BvbGFyaXR5KGJhc2UsIGtEU1BJX1BjczBBY3RpdmVMb3cgfCBrRFNQSV9QY3MxQWN0aXZlTG93KTsKKyAgIEBlbmRjb2RlCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIFRoZSBQQ1MgcG9sYXJpdHkgbWFzazsgdXNlIHRoZSBlbnVtIF9kc3BpX3Bjc19wb2xhcml0eS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERTUElfU2V0QWxsUGNzUG9sYXJpdHkoU1BJX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+TUNSID0gKGJhc2UtPk1DUiAmIH5TUElfTUNSX1BDU0lTX01BU0spIHwgU1BJX01DUl9QQ1NJUyhtYXNrKTsKK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgRFNQSSBiYXVkIHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gIHRha2VzIGluIHRoZSBkZXNpcmVkIGJhdWRSYXRlX0JwcyAoYmF1ZCByYXRlKSBhbmQgY2FsY3VsYXRlcyB0aGUgbmVhcmVzdCBwb3NzaWJsZSBiYXVkIHJhdGUgd2l0aG91dAorICogZXhjZWVkaW5nIHRoZSBkZXNpcmVkIGJhdWQgcmF0ZSwgYW5kIHJldHVybnMgdGhlIGNhbGN1bGF0ZWQgYmF1ZCByYXRlIGluIGJpdHMtcGVyLXNlY29uZC4gSXQgcmVxdWlyZXMgdGhhdCB0aGUKKyAqIGNhbGxlciBhbHNvIHByb3ZpZGUgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxlIHNvdXJjZSBjbG9jayAoaW4gSGVydHopLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIHdoaWNoQ3RhciBUaGUgZGVzaXJlZCBDbG9jayBhbmQgVHJhbnNmZXIgQXR0cmlidXRlcyBSZWdpc3RlciAoQ1RBUikgb2YgdGhlIHR5cGUgZHNwaV9jdGFyX3NlbGVjdGlvbl90CisgKiBAcGFyYW0gYmF1ZFJhdGVfQnBzIFRoZSBkZXNpcmVkIGJhdWQgcmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQKKyAqIEBwYXJhbSBzcmNDbG9ja19IeiBNb2R1bGUgc291cmNlIGlucHV0IGNsb2NrIGluIEhlcnR6CisgKiBAcmV0dXJuIFRoZSBhY3R1YWwgY2FsY3VsYXRlZCBiYXVkIHJhdGUKKyAqLwordWludDMyX3QgRFNQSV9NYXN0ZXJTZXRCYXVkUmF0ZShTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9jdGFyX3NlbGVjdGlvbl90IHdoaWNoQ3RhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYmF1ZFJhdGVfQnBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNDbG9ja19Ieik7CisKKy8qIQorICogQGJyaWVmIE1hbnVhbGx5IGNvbmZpZ3VyZXMgdGhlIGRlbGF5IHByZXNjYWxlciBhbmQgc2NhbGVyIGZvciBhIHBhcnRpY3VsYXIgQ1RBUi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIFBDUyB0byBTQ0sgZGVsYXkgcHJlLXNjYWxhciAoUGNzU0NLKSBhbmQgc2NhbGFyIChDU1NDSyksIGFmdGVyIFNDSyBkZWxheSBwcmUtc2NhbGFyCisgKiAoUEFTQykgYW5kIHNjYWxhciAoQVNDKSwgYW5kIHRoZSBkZWxheSBhZnRlciB0cmFuc2ZlciBwcmUtc2NhbGFyIChQRFQpIGFuZCBzY2FsYXIgKERUKS4KKyAqCisgKiBUaGVzZSBkZWxheSBuYW1lcyBhcmUgYXZhaWxhYmxlIGluIHRoZSB0eXBlIGRzcGlfZGVsYXlfdHlwZV90LgorICoKKyAqIFRoZSB1c2VyIHBhc3NlcyB0aGUgZGVsYXkgdG8gdGhlIGNvbmZpZ3VyYXRpb24gYWxvbmcgd2l0aCB0aGUgcHJlc2NhbGVyIGFuZCBzY2FsZXIgdmFsdWUuCisgKiBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBkaXJlY3RseSBzZXQgdGhlIHByZXNjYWxlci9zY2FsZXIgdmFsdWVzIGlmIHByZS1jYWxjdWxhdGVkIG9yCisgKiB0byBtYW51YWxseSBpbmNyZW1lbnQgZWl0aGVyIHZhbHVlLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIHdoaWNoQ3RhciBUaGUgZGVzaXJlZCBDbG9jayBhbmQgVHJhbnNmZXIgQXR0cmlidXRlcyBSZWdpc3RlciAoQ1RBUikgb2YgdHlwZSBkc3BpX2N0YXJfc2VsZWN0aW9uX3QuCisgKiBAcGFyYW0gcHJlc2NhbGVyIFRoZSBwcmVzY2FsZXIgZGVsYXkgdmFsdWUgKGNhbiBiZSBhbiBpbnRlZ2VyIDAsIDEsIDIsIG9yIDMpLgorICogQHBhcmFtIHNjYWxlciBUaGUgc2NhbGVyIGRlbGF5IHZhbHVlIChjYW4gYmUgYW55IGludGVnZXIgYmV0d2VlbiAwIHRvIDE1KS4KKyAqIEBwYXJhbSB3aGljaERlbGF5IFRoZSBkZXNpcmVkIGRlbGF5IHRvIGNvbmZpZ3VyZTsgbXVzdCBiZSBvZiB0eXBlIGRzcGlfZGVsYXlfdHlwZV90CisgKi8KK3ZvaWQgRFNQSV9NYXN0ZXJTZXREZWxheVNjYWxlcigKKyAgICBTUElfVHlwZSAqYmFzZSwgZHNwaV9jdGFyX3NlbGVjdGlvbl90IHdoaWNoQ3RhciwgdWludDMyX3QgcHJlc2NhbGVyLCB1aW50MzJfdCBzY2FsZXIsIGRzcGlfZGVsYXlfdHlwZV90IHdoaWNoRGVsYXkpOworCisvKiEKKyAqIEBicmllZiBDYWxjdWxhdGVzIHRoZSBkZWxheSBwcmVzY2FsZXIgYW5kIHNjYWxlciBiYXNlZCBvbiB0aGUgZGVzaXJlZCBkZWxheSBpbnB1dCBpbiBuYW5vc2Vjb25kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZy4KKyAqIFBDUyB0byBTQ0sgZGVsYXkgcHJlLXNjYWxhciAoUENTU0NLKSBhbmQgc2NhbGFyIChDU1NDSyksIG9yCisgKiBBZnRlciBTQ0sgZGVsYXkgcHJlLXNjYWxhciAoUEFTQykgYW5kIHNjYWxhciAoQVNDKSwgb3IKKyAqIERlbGF5IGFmdGVyIHRyYW5zZmVyIHByZS1zY2FsYXIgKFBEVCkgYW5kIHNjYWxhciAoRFQpLgorICoKKyAqIFRoZXNlIGRlbGF5IG5hbWVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHR5cGUgZHNwaV9kZWxheV90eXBlX3QuCisgKgorICogVGhlIHVzZXIgcGFzc2VzIHdoaWNoIGRlbGF5IHRvIGNvbmZpZ3VyZSBhbG9uZyB3aXRoIHRoZSBkZXNpcmVkIGRlbGF5IHZhbHVlIGluIG5hbm9zZWNvbmRzLiAgVGhlIGZ1bmN0aW9uCisgKiBjYWxjdWxhdGVzIHRoZSB2YWx1ZXMgbmVlZGVkIGZvciB0aGUgcHJlc2NhbGVyIGFuZCBzY2FsZXIuIE5vdGUgdGhhdCByZXR1cm5pbmcgdGhlIGNhbGN1bGF0ZWQgZGVsYXkgYXMgYW4gZXhhY3QKKyAqIGRlbGF5IG1hdGNoIG1heSBub3QgYmUgcG9zc2libGUuIEluIHRoaXMgY2FzZSwgdGhlIGNsb3Nlc3QgbWF0Y2ggaXMgY2FsY3VsYXRlZCB3aXRob3V0IGdvaW5nIGJlbG93IHRoZSBkZXNpcmVkCisgKiBkZWxheSB2YWx1ZSBpbnB1dC4KKyAqIEl0IGlzIHBvc3NpYmxlIHRvIGlucHV0IGEgdmVyeSBsYXJnZSBkZWxheSB2YWx1ZSB0aGF0IGV4Y2VlZHMgdGhlIGNhcGFiaWxpdHkgb2YgdGhlIHBhcnQsIGluIHdoaWNoIGNhc2UgdGhlIG1heGltdW0KKyAqIHN1cHBvcnRlZCBkZWxheSBpcyByZXR1cm5lZC4gVGhlIGhpZ2hlci1sZXZlbCBwZXJpcGhlcmFsIGRyaXZlciBhbGVydHMgdGhlIHVzZXIgb2YgYW4gb3V0IG9mIHJhbmdlIGRlbGF5CisgKiBpbnB1dC4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSB3aGljaEN0YXIgVGhlIGRlc2lyZWQgQ2xvY2sgYW5kIFRyYW5zZmVyIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKENUQVIpIG9mIHR5cGUgZHNwaV9jdGFyX3NlbGVjdGlvbl90LgorICogQHBhcmFtIHdoaWNoRGVsYXkgVGhlIGRlc2lyZWQgZGVsYXkgdG8gY29uZmlndXJlLCBtdXN0IGJlIG9mIHR5cGUgZHNwaV9kZWxheV90eXBlX3QKKyAqIEBwYXJhbSBzcmNDbG9ja19IeiBNb2R1bGUgc291cmNlIGlucHV0IGNsb2NrIGluIEhlcnR6CisgKiBAcGFyYW0gZGVsYXlUaW1lSW5OYW5vU2VjIFRoZSBkZXNpcmVkIGRlbGF5IHZhbHVlIGluIG5hbm9zZWNvbmRzLgorICogQHJldHVybiBUaGUgYWN0dWFsIGNhbGN1bGF0ZWQgZGVsYXkgdmFsdWUuCisgKi8KK3VpbnQzMl90IERTUElfTWFzdGVyU2V0RGVsYXlUaW1lcyhTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX2N0YXJfc2VsZWN0aW9uX3Qgd2hpY2hDdGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfZGVsYXlfdHlwZV90IHdoaWNoRGVsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjQ2xvY2tfSHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGVsYXlUaW1lSW5OYW5vU2VjKTsKKworLyohCisgKiBAYnJpZWYgV3JpdGVzIGRhdGEgaW50byB0aGUgZGF0YSBidWZmZXIgZm9yIG1hc3RlciBtb2RlLgorICoKKyAqIEluIG1hc3RlciBtb2RlLCB0aGUgMTYtYml0IGRhdGEgaXMgYXBwZW5kZWQgdG8gdGhlIDE2LWJpdCBjb21tYW5kIGluZm8uIFRoZSBjb21tYW5kIHBvcnRpb24KKyAqIHByb3ZpZGVzIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgZGF0YSwgc3VjaCBhcyB0aGUgb3B0aW9uYWwgY29udGludW91cyBjaGlwIHNlbGVjdAorICogb3BlcmF0aW9uIGJldHdlZW4gdHJhbnNmZXJzLCB0aGUgZGVzaXJlZCBDbG9jayBhbmQgVHJhbnNmZXIgQXR0cmlidXRlcyByZWdpc3RlciB0byB1c2UgZm9yIHRoZQorICogYXNzb2NpYXRlZCBTUEkgZnJhbWUsIHRoZSBkZXNpcmVkIFBDUyBzaWduYWwgdG8gdXNlIGZvciB0aGUgZGF0YSB0cmFuc2Zlciwgd2hldGhlciB0aGUgY3VycmVudAorICogdHJhbnNmZXIgaXMgdGhlIGxhc3QgaW4gdGhlIHF1ZXVlLCBhbmQgd2hldGhlciB0byBjbGVhciB0aGUgdHJhbnNmZXIgY291bnQgKG5vcm1hbGx5IG5lZWRlZCB3aGVuCisgKiBzZW5kaW5nIHRoZSBmaXJzdCBmcmFtZSBvZiBhIGRhdGEgcGFja2V0KS4gVGhpcyBpcyBhbiBleGFtcGxlLgorICogQGNvZGUKKyAqICBkc3BpX2NvbW1hbmRfZGF0YV9jb25maWdfdCBjb21tYW5kQ29uZmlnOworICogIGNvbW1hbmRDb25maWcuaXNQY3NDb250aW51b3VzID0gdHJ1ZTsKKyAqICBjb21tYW5kQ29uZmlnLndoaWNoQ3RhciA9IGtEU1BJQ3RhcjA7CisgKiAgY29tbWFuZENvbmZpZy53aGljaFBjcyA9IGtEU1BJUGNzMDsKKyAqICBjb21tYW5kQ29uZmlnLmNsZWFyVHJhbnNmZXJDb3VudCA9IGZhbHNlOworICogIGNvbW1hbmRDb25maWcuaXNFbmRPZlF1ZXVlID0gZmFsc2U7CisgKiAgRFNQSV9NYXN0ZXJXcml0ZURhdGEoYmFzZSwgJmNvbW1hbmRDb25maWcsIGRhdGFXb3JkKTsKKyAgIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gY29tbWFuZCBQb2ludGVyIHRvIHRoZSBjb21tYW5kIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHdvcmQgdG8gYmUgc2VudC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERTUElfTWFzdGVyV3JpdGVEYXRhKFNQSV9UeXBlICpiYXNlLCBkc3BpX2NvbW1hbmRfZGF0YV9jb25maWdfdCAqY29tbWFuZCwgdWludDE2X3QgZGF0YSkKK3sKKyAgICBiYXNlLT5QVVNIUiA9IFNQSV9QVVNIUl9DT05UKGNvbW1hbmQtPmlzUGNzQ29udGludW91cykgfCBTUElfUFVTSFJfQ1RBUyhjb21tYW5kLT53aGljaEN0YXIpIHwKKyAgICAgICAgICAgICAgICAgIFNQSV9QVVNIUl9QQ1MoY29tbWFuZC0+d2hpY2hQY3MpIHwgU1BJX1BVU0hSX0VPUShjb21tYW5kLT5pc0VuZE9mUXVldWUpIHwKKyAgICAgICAgICAgICAgICAgIFNQSV9QVVNIUl9DVENOVChjb21tYW5kLT5jbGVhclRyYW5zZmVyQ291bnQpIHwgU1BJX1BVU0hSX1RYREFUQShkYXRhKTsKK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgZHNwaV9jb21tYW5kX2RhdGFfY29uZmlnX3Qgc3RydWN0dXJlIHRvIGRlZmF1bHQgdmFsdWVzLgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgQVBJIGlzIHRvIGdldCB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQgZm9yIHVzZSBpbiB0aGUgRFNQSV9NYXN0ZXJXcml0ZV94eCgpLgorICogVXNlcnMgbWF5IHVzZSB0aGUgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHVuY2hhbmdlZCBpbiB0aGUgRFNQSV9NYXN0ZXJXcml0ZV94eCgpIG9yIG1vZGlmeSB0aGUgc3RydWN0dXJlCisgKiBiZWZvcmUgY2FsbGluZyB0aGUgRFNQSV9NYXN0ZXJXcml0ZV94eCgpLgorICogVGhpcyBpcyBhbiBleGFtcGxlLgorICogQGNvZGUKKyAqICBkc3BpX2NvbW1hbmRfZGF0YV9jb25maWdfdCAgY29tbWFuZDsKKyAqICBEU1BJX0dldERlZmF1bHREYXRhQ29tbWFuZENvbmZpZygmY29tbWFuZCk7CisgKiBAZW5kY29kZQorICogQHBhcmFtIGNvbW1hbmQgUG9pbnRlciB0byB0aGUgZHNwaV9jb21tYW5kX2RhdGFfY29uZmlnX3Qgc3RydWN0dXJlLgorICovCit2b2lkIERTUElfR2V0RGVmYXVsdERhdGFDb21tYW5kQ29uZmlnKGRzcGlfY29tbWFuZF9kYXRhX2NvbmZpZ190ICpjb21tYW5kKTsKKworLyohCisgKiBAYnJpZWYgV3JpdGVzIGRhdGEgaW50byB0aGUgZGF0YSBidWZmZXIgbWFzdGVyIG1vZGUgYW5kIHdhaXRzIHRpbGwgY29tcGxldGUgdG8gcmV0dXJuLgorICoKKyAqIEluIG1hc3RlciBtb2RlLCB0aGUgMTYtYml0IGRhdGEgaXMgYXBwZW5kZWQgdG8gdGhlIDE2LWJpdCBjb21tYW5kIGluZm8uIFRoZSBjb21tYW5kIHBvcnRpb24KKyAqIHByb3ZpZGVzIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgZGF0YSwgc3VjaCBhcyB0aGUgb3B0aW9uYWwgY29udGludW91cyBjaGlwIHNlbGVjdAorICogb3BlcmF0aW9uIGJldHdlZW4gdHJhbnNmZXJzLCB0aGUgZGVzaXJlZCBDbG9jayBhbmQgVHJhbnNmZXIgQXR0cmlidXRlcyByZWdpc3RlciB0byB1c2UgZm9yIHRoZQorICogYXNzb2NpYXRlZCBTUEkgZnJhbWUsIHRoZSBkZXNpcmVkIFBDUyBzaWduYWwgdG8gdXNlIGZvciB0aGUgZGF0YSB0cmFuc2Zlciwgd2hldGhlciB0aGUgY3VycmVudAorICogdHJhbnNmZXIgaXMgdGhlIGxhc3QgaW4gdGhlIHF1ZXVlLCBhbmQgd2hldGhlciB0byBjbGVhciB0aGUgdHJhbnNmZXIgY291bnQgKG5vcm1hbGx5IG5lZWRlZCB3aGVuCisgKiBzZW5kaW5nIHRoZSBmaXJzdCBmcmFtZSBvZiBhIGRhdGEgcGFja2V0KS4gVGhpcyBpcyBhbiBleGFtcGxlLgorICogQGNvZGUKKyAqICBkc3BpX2NvbW1hbmRfY29uZmlnX3QgY29tbWFuZENvbmZpZzsKKyAqICBjb21tYW5kQ29uZmlnLmlzUGNzQ29udGludW91cyA9IHRydWU7CisgKiAgY29tbWFuZENvbmZpZy53aGljaEN0YXIgPSBrRFNQSUN0YXIwOworICogIGNvbW1hbmRDb25maWcud2hpY2hQY3MgPSBrRFNQSVBjczE7CisgKiAgY29tbWFuZENvbmZpZy5jbGVhclRyYW5zZmVyQ291bnQgPSBmYWxzZTsKKyAqICBjb21tYW5kQ29uZmlnLmlzRW5kT2ZRdWV1ZSA9IGZhbHNlOworICogIERTUElfTWFzdGVyV3JpdGVEYXRhQmxvY2tpbmcoYmFzZSwgJmNvbW1hbmRDb25maWcsIGRhdGFXb3JkKTsKKyAqIEBlbmRjb2RlCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIHVudGlsIGFmdGVyIHRoZSB0cmFuc21pdCBpcyBjb21wbGV0ZS4gQWxzbyBub3RlIHRoYXQgdGhlIERTUEkgbXVzdCBiZQorICogZW5hYmxlZCBhbmQgcnVubmluZyB0byB0cmFuc21pdCBkYXRhIChNQ1JbTURJU10gJiBbSEFMVF0gPSAwKS4gQmVjYXVzZSB0aGUgU1BJIGlzIGEgc3luY2hyb25vdXMgcHJvdG9jb2wsCisgKiB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBhdmFpbGFibGUgd2hlbiB0aGUgdHJhbnNtaXQgY29tcGxldGVzLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIGNvbW1hbmQgUG9pbnRlciB0byB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB3b3JkIHRvIGJlIHNlbnQuCisgKi8KK3ZvaWQgRFNQSV9NYXN0ZXJXcml0ZURhdGFCbG9ja2luZyhTUElfVHlwZSAqYmFzZSwgZHNwaV9jb21tYW5kX2RhdGFfY29uZmlnX3QgKmNvbW1hbmQsIHVpbnQxNl90IGRhdGEpOworCisvKiEKKyAqIEBicmllZiBSZXR1cm5zIHRoZSBEU1BJIGNvbW1hbmQgd29yZCBmb3JtYXR0ZWQgdG8gdGhlIFBVU0hSIGRhdGEgcmVnaXN0ZXIgYml0IGZpZWxkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSBjYWxsZXIgdG8gcGFzcyBpbiB0aGUgZGF0YSBjb21tYW5kIHN0cnVjdHVyZSBhbmQgcmV0dXJucyB0aGUgY29tbWFuZCB3b3JkIGZvcm1hdHRlZAorICogYWNjb3JkaW5nIHRvIHRoZSBEU1BJIFBVU0hSIHJlZ2lzdGVyIGJpdCBmaWVsZCBwbGFjZW1lbnQuIFRoZSB1c2VyIGNhbiB0aGVuICJPUiIgdGhlIHJldHVybmVkIGNvbW1hbmQgd29yZCB3aXRoIHRoZQorICogZGVzaXJlZCBkYXRhIHRvIHNlbmQgYW5kIHVzZSB0aGUgZnVuY3Rpb24gRFNQSV9IQUxfV3JpdGVDb21tYW5kRGF0YU1hc3Rlcm1vZGUgb3IKKyAqIERTUElfSEFMX1dyaXRlQ29tbWFuZERhdGFNYXN0ZXJtb2RlQmxvY2tpbmcgdG8gd3JpdGUgdGhlIGVudGlyZSAzMi1iaXQgY29tbWFuZCBkYXRhIHdvcmQgdG8gdGhlIFBVU0hSLiBUaGlzIGhlbHBzCisgKiBpbXByb3ZlIHBlcmZvcm1hbmNlIGluIGNhc2VzIHdoZXJlIHRoZSBjb21tYW5kIHN0cnVjdHVyZSBpcyBjb25zdGFudC4gRm9yIGV4YW1wbGUsIHRoZSB1c2VyIGNhbGxzIHRoaXMgZnVuY3Rpb24KKyAqIGJlZm9yZSBzdGFydGluZyBhIHRyYW5zZmVyIHRvIGdlbmVyYXRlIHRoZSBjb21tYW5kIHdvcmQuIFdoZW4gdGhleSBhcmUgcmVhZHkgdG8gdHJhbnNtaXQgdGhlIGRhdGEsIHRoZXkgT1IKKyAqIHRoaXMgZm9ybWF0dGVkIGNvbW1hbmQgd29yZCB3aXRoIHRoZSBkZXNpcmVkIGRhdGEgdG8gdHJhbnNtaXQuIFRoaXMgcHJvY2VzcyBpbmNyZWFzZXMgdHJhbnNtaXQgcGVyZm9ybWFuY2Ugd2hlbgorICogY29tcGFyZWQgdG8gY2FsbGluZyBzZW5kIGZ1bmN0aW9ucywgc3VjaCBhcyBEU1BJX0hBTF9Xcml0ZURhdGFNYXN0ZXJtb2RlLCAgd2hpY2ggZm9ybWF0IHRoZSBjb21tYW5kIHdvcmQgZWFjaCB0aW1lIGEKKyAqIGRhdGEgd29yZCBpcyB0byBiZSBzZW50LgorICoKKyAqIEBwYXJhbSBjb21tYW5kIFBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgc3RydWN0dXJlLgorICogQHJldHVybiBUaGUgY29tbWFuZCB3b3JkIGZvcm1hdHRlZCB0byB0aGUgUFVTSFIgZGF0YSByZWdpc3RlciBiaXQgZmllbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgRFNQSV9NYXN0ZXJHZXRGb3JtYXR0ZWRDb21tYW5kKGRzcGlfY29tbWFuZF9kYXRhX2NvbmZpZ190ICpjb21tYW5kKQoreworICAgIC8qIEZvcm1hdCB0aGUgMTYtYml0IGNvbW1hbmQgd29yZCBhY2NvcmRpbmcgdG8gdGhlIFBVU0hSIGRhdGEgcmVnaXN0ZXIgYml0IGZpZWxkKi8KKyAgICByZXR1cm4gKHVpbnQzMl90KShTUElfUFVTSFJfQ09OVChjb21tYW5kLT5pc1Bjc0NvbnRpbnVvdXMpIHwgU1BJX1BVU0hSX0NUQVMoY29tbWFuZC0+d2hpY2hDdGFyKSB8CisgICAgICAgICAgICAgICAgICAgICAgU1BJX1BVU0hSX1BDUyhjb21tYW5kLT53aGljaFBjcykgfCBTUElfUFVTSFJfRU9RKGNvbW1hbmQtPmlzRW5kT2ZRdWV1ZSkgfAorICAgICAgICAgICAgICAgICAgICAgIFNQSV9QVVNIUl9DVENOVChjb21tYW5kLT5jbGVhclRyYW5zZmVyQ291bnQpKTsKK30KKworLyohCisgKiBAYnJpZWYgV3JpdGVzIGEgMzItYml0IGRhdGEgd29yZCAoMTYtYml0IGNvbW1hbmQgYXBwZW5kZWQgd2l0aCAxNi1iaXQgZGF0YSkgaW50byB0aGUgZGF0YQorICogICAgICAgIGJ1ZmZlciBtYXN0ZXIgbW9kZSBhbmQgd2FpdHMgdGlsbCBjb21wbGV0ZSB0byByZXR1cm4uCisgKgorICogSW4gdGhpcyBmdW5jdGlvbiwgdGhlIHVzZXIgbXVzdCBhcHBlbmQgdGhlIDE2LWJpdCBkYXRhIHRvIHRoZSAxNi1iaXQgY29tbWFuZCBpbmZvcm1hdGlvbiBhbmQgdGhlbiBwcm92aWRlIHRoZSB0b3RhbCAzMi1iaXQgd29yZAorICogYXMgdGhlIGRhdGEgdG8gc2VuZC4KKyAqIFRoZSBjb21tYW5kIHBvcnRpb24gcHJvdmlkZXMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkYXRhLCBzdWNoIGFzIHRoZSBvcHRpb25hbCBjb250aW51b3VzIGNoaXAgc2VsZWN0IG9wZXJhdGlvbgorICogYmV0d2VlbiB0cmFuc2ZlcnMsIHRoZSBkZXNpcmVkIENsb2NrIGFuZCBUcmFuc2ZlciBBdHRyaWJ1dGVzIHJlZ2lzdGVyIHRvIHVzZSBmb3IgdGhlIGFzc29jaWF0ZWQgU1BJIGZyYW1lLCB0aGUgZGVzaXJlZCBQQ1MKKyAqIHNpZ25hbCB0byB1c2UgZm9yIHRoZSBkYXRhIHRyYW5zZmVyLCB3aGV0aGVyIHRoZSBjdXJyZW50IHRyYW5zZmVyIGlzIHRoZSBsYXN0IGluIHRoZSBxdWV1ZSwgYW5kIHdoZXRoZXIgdG8gY2xlYXIgdGhlCisgKiB0cmFuc2ZlciBjb3VudCAobm9ybWFsbHkgbmVlZGVkIHdoZW4gc2VuZGluZyB0aGUgZmlyc3QgZnJhbWUgb2YgYSBkYXRhIHBhY2tldCkuIFRoZSB1c2VyIGlzIHJlc3BvbnNpYmxlIGZvcgorICogYXBwZW5kaW5nIHRoaXMgY29tbWFuZCB3aXRoIHRoZSBkYXRhIHRvIHNlbmQuIFRoaXMgaXMgYW4gZXhhbXBsZToKKyAqIEBjb2RlCisgKiAgZGF0YVdvcmQgPSA8MTYtYml0IGNvbW1hbmQ+IHwgPDE2LWJpdCBkYXRhPjsKKyAqICBEU1BJX01hc3RlcldyaXRlQ29tbWFuZERhdGFCbG9ja2luZyhiYXNlLCBkYXRhV29yZCk7CisgKiBAZW5kY29kZQorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiB1bnRpbCBhZnRlciB0aGUgdHJhbnNtaXQgaXMgY29tcGxldGUuIEFsc28gbm90ZSB0aGF0IHRoZSBEU1BJIG11c3QgYmUKKyAqIGVuYWJsZWQgYW5kIHJ1bm5pbmcgdG8gdHJhbnNtaXQgZGF0YSAoTUNSW01ESVNdICYgW0hBTFRdID0gMCkuCisgKiBCZWNhdXNlIHRoZSBTUEkgaXMgYSBzeW5jaHJvbm91cyBwcm90b2NvbCwgdGhlIHJlY2VpdmVkIGRhdGEgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIHRyYW5zbWl0IGNvbXBsZXRlcy4KKyAqCisgKiAgRm9yIGEgYmxvY2tpbmcgcG9sbGluZyB0cmFuc2Zlciwgc2VlIG1ldGhvZHMgYmVsb3cuCisgKiAgT3B0aW9uIDE6CisqICAgdWludDMyX3QgY29tbWFuZF90b19zZW5kID0gRFNQSV9NYXN0ZXJHZXRGb3JtYXR0ZWRDb21tYW5kKCZjb21tYW5kKTsKKyogICB1aW50MzJfdCBkYXRhMCA9IGNvbW1hbmRfdG9fc2VuZCB8IGRhdGFfbmVlZF90b19zZW5kXzA7CisqICAgdWludDMyX3QgZGF0YTEgPSBjb21tYW5kX3RvX3NlbmQgfCBkYXRhX25lZWRfdG9fc2VuZF8xOworKiAgIHVpbnQzMl90IGRhdGEyID0gY29tbWFuZF90b19zZW5kIHwgZGF0YV9uZWVkX3RvX3NlbmRfMjsKKyoKKyogICBEU1BJX01hc3RlcldyaXRlQ29tbWFuZERhdGFCbG9ja2luZyhiYXNlLGRhdGEwKTsKKyogICBEU1BJX01hc3RlcldyaXRlQ29tbWFuZERhdGFCbG9ja2luZyhiYXNlLGRhdGExKTsKKyogICBEU1BJX01hc3RlcldyaXRlQ29tbWFuZERhdGFCbG9ja2luZyhiYXNlLGRhdGEyKTsKKyoKKyogIE9wdGlvbiAyOgorKiAgIERTUElfTWFzdGVyV3JpdGVEYXRhQmxvY2tpbmcoYmFzZSwmY29tbWFuZCxkYXRhX25lZWRfdG9fc2VuZF8wKTsKKyogICBEU1BJX01hc3RlcldyaXRlRGF0YUJsb2NraW5nKGJhc2UsJmNvbW1hbmQsZGF0YV9uZWVkX3RvX3NlbmRfMSk7CisqICAgRFNQSV9NYXN0ZXJXcml0ZURhdGFCbG9ja2luZyhiYXNlLCZjb21tYW5kLGRhdGFfbmVlZF90b19zZW5kXzIpOworKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB3b3JkIChjb21tYW5kIGFuZCBkYXRhIGNvbWJpbmVkKSB0byBiZSBzZW50LgorICovCit2b2lkIERTUElfTWFzdGVyV3JpdGVDb21tYW5kRGF0YUJsb2NraW5nKFNQSV9UeXBlICpiYXNlLCB1aW50MzJfdCBkYXRhKTsKKworLyohCisgKiBAYnJpZWYgV3JpdGVzIGRhdGEgaW50byB0aGUgZGF0YSBidWZmZXIgaW4gc2xhdmUgbW9kZS4KKyAqCisgKiBJbiBzbGF2ZSBtb2RlLCB1cCB0byAxNi1iaXQgd29yZHMgbWF5IGJlIHdyaXR0ZW4uCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBzZW5kLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRFNQSV9TbGF2ZVdyaXRlRGF0YShTUElfVHlwZSAqYmFzZSwgdWludDMyX3QgZGF0YSkKK3sKKyAgICBiYXNlLT5QVVNIUl9TTEFWRSA9IGRhdGE7Cit9CisKKy8qIQorICogQGJyaWVmIFdyaXRlcyBkYXRhIGludG8gdGhlIGRhdGEgYnVmZmVyIGluIHNsYXZlIG1vZGUsIHdhaXRzIHRpbGwgZGF0YSB3YXMgdHJhbnNtaXR0ZWQsIGFuZCByZXR1cm5zLgorICoKKyAqIEluIHNsYXZlIG1vZGUsIHVwIHRvIDE2LWJpdCB3b3JkcyBtYXkgYmUgd3JpdHRlbi4gVGhlIGZ1bmN0aW9uIGZpcnN0IGNsZWFycyB0aGUgdHJhbnNtaXQgY29tcGxldGUgZmxhZywgd3JpdGVzIGRhdGEKKyAqIGludG8gZGF0YSByZWdpc3RlciwgYW5kIGZpbmFsbHkgd2FpdHMgdW50aWwgdGhlIGRhdGEgaXMgdHJhbnNtaXR0ZWQuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBzZW5kLgorICovCit2b2lkIERTUElfU2xhdmVXcml0ZURhdGFCbG9ja2luZyhTUElfVHlwZSAqYmFzZSwgdWludDMyX3QgZGF0YSk7CisKKy8qIQorICogQGJyaWVmIFJlYWRzIGRhdGEgZnJvbSB0aGUgZGF0YSBidWZmZXIuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcmV0dXJuIFRoZSBkYXRhIGZyb20gdGhlIHJlYWQgZGF0YSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgRFNQSV9SZWFkRGF0YShTUElfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKGJhc2UtPlBPUFIpOworfQorCisvKiEKKyAqQH0KKyovCisKKy8qIQorICogQG5hbWUgVHJhbnNhY3Rpb25hbAorICogQHsKKyAqLworLypUcmFuc2FjdGlvbmFsIEFQSXMqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgRFNQSSBtYXN0ZXIgaGFuZGxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIERTUEkgaGFuZGxlLCB3aGljaCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIgRFNQSSB0cmFuc2FjdGlvbmFsIEFQSXMuICBVc3VhbGx5LCBmb3IgYQorICogc3BlY2lmaWVkIERTUEkgaW5zdGFuY2UsICBjYWxsIHRoaXMgQVBJIG9uY2UgdG8gZ2V0IHRoZSBpbml0aWFsaXplZCBoYW5kbGUuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgRFNQSSBoYW5kbGUgcG9pbnRlciB0byBkc3BpX21hc3Rlcl9oYW5kbGVfdC4KKyAqIEBwYXJhbSBjYWxsYmFjayBEU1BJIGNhbGxiYWNrLgorICogQHBhcmFtIHVzZXJEYXRhIENhbGxiYWNrIGZ1bmN0aW9uIHBhcmFtZXRlci4KKyAqLwordm9pZCBEU1BJX01hc3RlclRyYW5zZmVyQ3JlYXRlSGFuZGxlKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9tYXN0ZXJfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSk7CisKKy8qIQorICogQGJyaWVmIERTUEkgbWFzdGVyIHRyYW5zZmVyIGRhdGEgdXNpbmcgcG9sbGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRyYW5zZmVycyBkYXRhIHVzaW5nIHBvbGxpbmcuIFRoaXMgaXMgYSBibG9ja2luZyBmdW5jdGlvbiwgd2hpY2ggZG9lcyBub3QgcmV0dXJuIHVudGlsIGFsbCB0cmFuc2ZlcnMKKyAqIGhhdmUgYmVlbiBjb21wbGV0ZWQuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSB0cmFuc2ZlciBQb2ludGVyIHRvIHRoZSBkc3BpX3RyYW5zZmVyX3Qgc3RydWN0dXJlLgorICogQHJldHVybiBzdGF0dXMgb2Ygc3RhdHVzX3QuCisgKi8KK3N0YXR1c190IERTUElfTWFzdGVyVHJhbnNmZXJCbG9ja2luZyhTUElfVHlwZSAqYmFzZSwgZHNwaV90cmFuc2Zlcl90ICp0cmFuc2Zlcik7CisKKy8qIQorICogQGJyaWVmIERTUEkgbWFzdGVyIHRyYW5zZmVyIGRhdGEgdXNpbmcgaW50ZXJydXB0cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRyYW5zZmVycyBkYXRhIHVzaW5nIGludGVycnVwdHMuIFRoaXMgaXMgYSBub24tYmxvY2tpbmcgZnVuY3Rpb24sIHdoaWNoIHJldHVybnMgcmlnaHQgYXdheS4gV2hlbiBhbGwKKyAqIGRhdGEgaXMgdHJhbnNmZXJyZWQsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQuCisKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIFBvaW50ZXIgdG8gdGhlIGRzcGlfbWFzdGVyX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICogQHBhcmFtIHRyYW5zZmVyIFBvaW50ZXIgdG8gdGhlIGRzcGlfdHJhbnNmZXJfdCBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIHN0YXR1cyBvZiBzdGF0dXNfdC4KKyAqLworc3RhdHVzX3QgRFNQSV9NYXN0ZXJUcmFuc2Zlck5vbkJsb2NraW5nKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLCBkc3BpX3RyYW5zZmVyX3QgKnRyYW5zZmVyKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgbWFzdGVyIHRyYW5zZmVyIGNvdW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbWFzdGVyIHRyYW5zZmVyIGNvdW50LgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIFBvaW50ZXIgdG8gdGhlIGRzcGlfbWFzdGVyX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgYnkgdXNpbmcgdGhlIG5vbi1ibG9ja2luZyB0cmFuc2FjdGlvbi4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHN0YXR1c190LgorICovCitzdGF0dXNfdCBEU1BJX01hc3RlclRyYW5zZmVyR2V0Q291bnQoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsIHNpemVfdCAqY291bnQpOworCisvKiEKKyAqIEBicmllZiBEU1BJIG1hc3RlciBhYm9ydHMgYSB0cmFuc2ZlciB1c2luZyBhbiBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBmdW5jdGlvbiBhYm9ydHMgYSB0cmFuc2ZlciB1c2luZyBhbiBpbnRlcnJ1cHQuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byB0aGUgZHNwaV9tYXN0ZXJfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKi8KK3ZvaWQgRFNQSV9NYXN0ZXJUcmFuc2ZlckFib3J0KFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgRFNQSSBNYXN0ZXIgSVJRIGhhbmRsZXIgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIERTUEkgdHJhbnNtaXQgYW5kIHJlY2VpdmUgSVJRLgorCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBQb2ludGVyIHRvIHRoZSBkc3BpX21hc3Rlcl9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqLwordm9pZCBEU1BJX01hc3RlclRyYW5zZmVySGFuZGxlSVJRKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIERTUEkgc2xhdmUgaGFuZGxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIERTUEkgaGFuZGxlLCB3aGljaCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIgRFNQSSB0cmFuc2FjdGlvbmFsIEFQSXMuICBVc3VhbGx5LCBmb3IgYQorICogc3BlY2lmaWVkIERTUEkgaW5zdGFuY2UsIGNhbGwgdGhpcyBBUEkgb25jZSB0byBnZXQgdGhlIGluaXRpYWxpemVkIGhhbmRsZS4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIERTUEkgaGFuZGxlIHBvaW50ZXIgdG8gdGhlIGRzcGlfc2xhdmVfaGFuZGxlX3QuCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNhbGxiYWNrIERTUEkgY2FsbGJhY2suCisgKiBAcGFyYW0gdXNlckRhdGEgQ2FsbGJhY2sgZnVuY3Rpb24gcGFyYW1ldGVyLgorICovCit2b2lkIERTUElfU2xhdmVUcmFuc2ZlckNyZWF0ZUhhbmRsZShTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfc2xhdmVfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKTsKKworLyohCisgKiBAYnJpZWYgRFNQSSBzbGF2ZSB0cmFuc2ZlcnMgZGF0YSB1c2luZyBhbiBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBmdW5jdGlvbiB0cmFuc2ZlcnMgZGF0YSB1c2luZyBhbiBpbnRlcnJ1cHQuIFRoaXMgaXMgYSBub24tYmxvY2tpbmcgZnVuY3Rpb24sIHdoaWNoIHJldHVybnMgcmlnaHQgYXdheS4gV2hlbiBhbGwKKyAqIGRhdGEgaXMgdHJhbnNmZXJyZWQsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byB0aGUgZHNwaV9zbGF2ZV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqIEBwYXJhbSB0cmFuc2ZlciBQb2ludGVyIHRvIHRoZSBkc3BpX3RyYW5zZmVyX3Qgc3RydWN0dXJlLgorICogQHJldHVybiBzdGF0dXMgb2Ygc3RhdHVzX3QuCisgKi8KK3N0YXR1c190IERTUElfU2xhdmVUcmFuc2Zlck5vbkJsb2NraW5nKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUsIGRzcGlfdHJhbnNmZXJfdCAqdHJhbnNmZXIpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBzbGF2ZSB0cmFuc2ZlciBjb3VudC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHNsYXZlIHRyYW5zZmVyIGNvdW50LgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIFBvaW50ZXIgdG8gdGhlIGRzcGlfbWFzdGVyX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgYnkgdXNpbmcgdGhlIG5vbi1ibG9ja2luZyB0cmFuc2FjdGlvbi4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHN0YXR1c190LgorICovCitzdGF0dXNfdCBEU1BJX1NsYXZlVHJhbnNmZXJHZXRDb3VudChTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlLCBzaXplX3QgKmNvdW50KTsKKworLyohCisgKiBAYnJpZWYgRFNQSSBzbGF2ZSBhYm9ydHMgYSB0cmFuc2ZlciB1c2luZyBhbiBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBmdW5jdGlvbiBhYm9ydHMgYSB0cmFuc2ZlciB1c2luZyBhbiBpbnRlcnJ1cHQuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byB0aGUgZHNwaV9zbGF2ZV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqLwordm9pZCBEU1BJX1NsYXZlVHJhbnNmZXJBYm9ydChTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgRFNQSSBNYXN0ZXIgSVJRIGhhbmRsZXIgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIERTUEkgdHJhbnNtaXQgYW5kIHJlY2VpdmUgSVJRLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIFBvaW50ZXIgdG8gdGhlIGRzcGlfc2xhdmVfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKi8KK3ZvaWQgRFNQSV9TbGF2ZVRyYW5zZmVySGFuZGxlSVJRKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqQH0KKyovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmIC8qX2NwbHVzcGx1cyovCisgICAgICAgLyohCisgICAgICAgICpAfQorICAgICAgICovCisKKyNlbmRpZiAvKl9GU0xfRFNQSV9IXyovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpX2VkbWEuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGlfZWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGQxNTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpX2VkbWEuYwpAQCAtMCwwICsxLDEyNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2RzcGlfZWRtYS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGVmaW5pdG9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorKiBAYnJpZWYgU3RydWN0dXJlIGRlZmluaXRpb24gZm9yIGRzcGlfbWFzdGVyX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdC4gVGhlIHN0cnVjdHVyZSBpcyBwcml2YXRlLgorKi8KK3R5cGVkZWYgc3RydWN0IF9kc3BpX21hc3Rlcl9lZG1hX3ByaXZhdGVfaGFuZGxlCit7CisgICAgU1BJX1R5cGUgKmJhc2U7ICAgICAgICAgICAgICAgICAgICAvKiE8IERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuICovCisgICAgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlOyAvKiE8IGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3QgaGFuZGxlICovCit9IGRzcGlfbWFzdGVyX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdDsKKworLyohCisqIEBicmllZiBTdHJ1Y3R1cmUgZGVmaW5pdGlvbiBmb3IgZHNwaV9zbGF2ZV9lZG1hX3ByaXZhdGVfaGFuZGxlX3QuIFRoZSBzdHJ1Y3R1cmUgaXMgcHJpdmF0ZS4KKyovCit0eXBlZGVmIHN0cnVjdCBfZHNwaV9zbGF2ZV9lZG1hX3ByaXZhdGVfaGFuZGxlCit7CisgICAgU1BJX1R5cGUgKmJhc2U7ICAgICAgICAgICAgICAgICAgIC8qITwgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4gKi8KKyAgICBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3QgKmhhbmRsZTsgLyohPCBkc3BpX21hc3Rlcl9lZG1hX2hhbmRsZV90IGhhbmRsZSAqLworfSBkc3BpX3NsYXZlX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFByb3RvdHlwZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisqIEBicmllZiBFRE1BX0RzcGlNYXN0ZXJDYWxsYmFjayBhZnRlciB0aGUgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgY29tcGxldGVkIGJ5IHVzaW5nIEVETUEuCisqIFRoaXMgaXMgbm90IGEgcHVibGljIEFQSS4KKyovCitzdGF0aWMgdm9pZCBFRE1BX0RzcGlNYXN0ZXJDYWxsYmFjayhlZG1hX2hhbmRsZV90ICplZG1hSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZ19kc3BpRWRtYVByaXZhdGVIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZmVyRG9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRjZHMpOworCisvKiEKKyogQGJyaWVmIEVETUFfRHNwaVNsYXZlQ2FsbGJhY2sgYWZ0ZXIgdGhlIERTUEkgc2xhdmUgdHJhbnNmZXIgY29tcGxldGVkIGJ5IHVzaW5nIEVETUEuCisqIFRoaXMgaXMgbm90IGEgcHVibGljIEFQSS4KKyovCitzdGF0aWMgdm9pZCBFRE1BX0RzcGlTbGF2ZUNhbGxiYWNrKGVkbWFfaGFuZGxlX3QgKmVkbWFIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmdfZHNwaUVkbWFQcml2YXRlSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZmVyRG9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGNkcyk7CisvKiEKKyogQGJyaWVmIEdldCBpbnN0YW5jZSBudW1iZXIgZm9yIERTUEkgbW9kdWxlLgorKgorKiBUaGlzIGlzIG5vdCBhIHB1YmxpYyBBUEkgYW5kIGl0J3MgZXh0ZXJuIGZyb20gZnNsX2RzcGkuYy4KKyoKKyogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworKi8KK2V4dGVybiB1aW50MzJfdCBEU1BJX0dldEluc3RhbmNlKFNQSV9UeXBlICpiYXNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFZhcmlhYmxlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gZHNwaSBlZG1hIGhhbmRsZXMgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgZHNwaV9tYXN0ZXJfZWRtYV9wcml2YXRlX2hhbmRsZV90IHNfZHNwaU1hc3RlckVkbWFQcml2YXRlSGFuZGxlW0ZTTF9GRUFUVVJFX1NPQ19EU1BJX0NPVU5UXTsKK3N0YXRpYyBkc3BpX3NsYXZlX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCBzX2RzcGlTbGF2ZUVkbWFQcml2YXRlSGFuZGxlW0ZTTF9GRUFUVVJFX1NPQ19EU1BJX0NPVU5UXTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvZGUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIERTUElfTWFzdGVyVHJhbnNmZXJDcmVhdGVIYW5kbGVFRE1BKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfbWFzdGVyX2VkbWFfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICplZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydChlZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSk7CisgICAgYXNzZXJ0KGVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZSk7CisgICAgYXNzZXJ0KGVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlKTsKKworICAgIC8qIFplcm8gdGhlIGhhbmRsZS4gKi8KKyAgICBtZW1zZXQoaGFuZGxlLCAwLCBzaXplb2YoKmhhbmRsZSkpOworCisgICAgdWludDMyX3QgaW5zdGFuY2UgPSBEU1BJX0dldEluc3RhbmNlKGJhc2UpOworCisgICAgc19kc3BpTWFzdGVyRWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmJhc2UgPSBiYXNlOworICAgIHNfZHNwaU1hc3RlckVkbWFQcml2YXRlSGFuZGxlW2luc3RhbmNlXS5oYW5kbGUgPSBoYW5kbGU7CisKKyAgICBoYW5kbGUtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgaGFuZGxlLT51c2VyRGF0YSA9IHVzZXJEYXRhOworCisgICAgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSA9IGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlOworICAgIGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlID0gZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlOworICAgIGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUgPSBlZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZTsKK30KKworc3RhdHVzX3QgRFNQSV9NYXN0ZXJUcmFuc2ZlckVETUEoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgZHNwaV90cmFuc2Zlcl90ICp0cmFuc2ZlcikKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQodHJhbnNmZXIpOworCisgICAgLyogSWYgdGhlIHRyYW5zZmVyIGNvdW50IGlzIHplcm8sIHRoZW4gcmV0dXJuIGltbWVkaWF0ZWx5LiovCisgICAgaWYgKHRyYW5zZmVyLT5kYXRhU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIElmIGJvdGggc2VuZCBidWZmZXIgYW5kIHJlY2VpdmUgYnVmZmVyIGlzIG51bGwgKi8KKyAgICBpZiAoKCEodHJhbnNmZXItPnR4RGF0YSkpICYmICghKHRyYW5zZmVyLT5yeERhdGEpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDaGVjayB0aGF0IHdlJ3JlIG5vdCBidXN5LiovCisgICAgaWYgKGhhbmRsZS0+c3RhdGUgPT0ga0RTUElfQnVzeSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0RTUElfQnVzeTsKKyAgICB9CisKKyAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfQnVzeTsKKworICAgIHVpbnQzMl90IGluc3RhbmNlID0gRFNQSV9HZXRJbnN0YW5jZShiYXNlKTsKKyAgICB1aW50MTZfdCB3b3JkVG9TZW5kID0gMDsKKyAgICB1aW50OF90IGR1bW15RGF0YSA9IERTUElfRFVNTVlfREFUQTsKKyAgICB1aW50OF90IGRhdGFBbHJlYWR5RmVkID0gMDsKKyAgICB1aW50OF90IGRhdGFGZWRNYXggPSAyOworCisgICAgdWludDMyX3QgcnhBZGRyID0gRFNQSV9HZXRSeFJlZ2lzdGVyQWRkcmVzcyhiYXNlKTsKKyAgICB1aW50MzJfdCB0eEFkZHIgPSBEU1BJX01hc3RlckdldFR4UmVnaXN0ZXJBZGRyZXNzKGJhc2UpOworCisgICAgZWRtYV90Y2RfdCAqc29mdHdhcmVUQ0QgPSAoZWRtYV90Y2RfdCAqKSgodWludDMyX3QpKCZoYW5kbGUtPmRzcGlTb2Z0d2FyZVRDRFsxXSkgJiAofjB4MUZVKSk7CisKKyAgICBlZG1hX3RyYW5zZmVyX2NvbmZpZ190IHRyYW5zZmVyQ29uZmlnQTsKKyAgICBlZG1hX3RyYW5zZmVyX2NvbmZpZ190IHRyYW5zZmVyQ29uZmlnQjsKKyAgICBlZG1hX3RyYW5zZmVyX2NvbmZpZ190IHRyYW5zZmVyQ29uZmlnQzsKKworICAgIGhhbmRsZS0+dHhCdWZmSWZOdWxsID0gKCh1aW50MzJfdClEU1BJX0RVTU1ZX0RBVEEgPDwgOCkgfCBEU1BJX0RVTU1ZX0RBVEE7CisKKyAgICBkc3BpX2NvbW1hbmRfZGF0YV9jb25maWdfdCBjb21tYW5kU3RydWN0OworICAgIERTUElfU3RvcFRyYW5zZmVyKGJhc2UpOworICAgIERTUElfRmx1c2hGaWZvKGJhc2UsIHRydWUsIHRydWUpOworICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9BbGxTdGF0dXNGbGFnKTsKKworICAgIGNvbW1hbmRTdHJ1Y3Qud2hpY2hQY3MgPQorICAgICAgICAoZHNwaV93aGljaF9wY3NfdCkoMVUgPDwgKCh0cmFuc2Zlci0+Y29uZmlnRmxhZ3MgJiBEU1BJX01BU1RFUl9QQ1NfTUFTSykgPj4gRFNQSV9NQVNURVJfUENTX1NISUZUKSk7CisgICAgY29tbWFuZFN0cnVjdC5pc0VuZE9mUXVldWUgPSBmYWxzZTsKKyAgICBjb21tYW5kU3RydWN0LmNsZWFyVHJhbnNmZXJDb3VudCA9IGZhbHNlOworICAgIGNvbW1hbmRTdHJ1Y3Qud2hpY2hDdGFyID0KKyAgICAgICAgKGRzcGlfY3Rhcl9zZWxlY3Rpb25fdCkoKHRyYW5zZmVyLT5jb25maWdGbGFncyAmIERTUElfTUFTVEVSX0NUQVJfTUFTSykgPj4gRFNQSV9NQVNURVJfQ1RBUl9TSElGVCk7CisgICAgY29tbWFuZFN0cnVjdC5pc1Bjc0NvbnRpbnVvdXMgPSAoYm9vbCkodHJhbnNmZXItPmNvbmZpZ0ZsYWdzICYga0RTUElfTWFzdGVyUGNzQ29udGludW91cyk7CisgICAgaGFuZGxlLT5jb21tYW5kID0gRFNQSV9NYXN0ZXJHZXRGb3JtYXR0ZWRDb21tYW5kKCYoY29tbWFuZFN0cnVjdCkpOworCisgICAgY29tbWFuZFN0cnVjdC5pc0VuZE9mUXVldWUgPSB0cnVlOworICAgIGNvbW1hbmRTdHJ1Y3QuaXNQY3NDb250aW51b3VzID0gKGJvb2wpKHRyYW5zZmVyLT5jb25maWdGbGFncyAmIGtEU1BJX01hc3RlckFjdGl2ZUFmdGVyVHJhbnNmZXIpOworICAgIGhhbmRsZS0+bGFzdENvbW1hbmQgPSBEU1BJX01hc3RlckdldEZvcm1hdHRlZENvbW1hbmQoJihjb21tYW5kU3RydWN0KSk7CisKKyAgICBoYW5kbGUtPmJpdHNQZXJGcmFtZSA9ICgoYmFzZS0+Q1RBUltjb21tYW5kU3RydWN0LndoaWNoQ3Rhcl0gJiBTUElfQ1RBUl9GTVNaX01BU0spID4+IFNQSV9DVEFSX0ZNU1pfU0hJRlQpICsgMTsKKworICAgIGlmICgoYmFzZS0+TUNSICYgU1BJX01DUl9ESVNfUlhGX01BU0spIHx8IChiYXNlLT5NQ1IgJiBTUElfTUNSX0RJU19UWEZfTUFTSykpCisgICAgeworICAgICAgICBoYW5kbGUtPmZpZm9TaXplID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaGFuZGxlLT5maWZvU2l6ZSA9IEZTTF9GRUFUVVJFX0RTUElfRklGT19TSVpFbihiYXNlKTsKKyAgICB9CisgICAgaGFuZGxlLT50eERhdGEgPSB0cmFuc2Zlci0+dHhEYXRhOworICAgIGhhbmRsZS0+cnhEYXRhID0gdHJhbnNmZXItPnJ4RGF0YTsKKyAgICBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisgICAgaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID0gdHJhbnNmZXItPmRhdGFTaXplOworICAgIGhhbmRsZS0+dG90YWxCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisKKyAgICAvKiBJZiB1c2luZyBhIHNoYXJlZCBSWC9UWCBETUEgcmVxdWVzdCwgdGhlbiB0aGlzIGxpbWl0cyB0aGUgYW1vdW50IG9mIGRhdGEgd2UgY2FuIHRyYW5zZmVyCisgICAgKiBkdWUgdG8gdGhlIGxpbmtlZCBjaGFubmVsLiBUaGUgbWF4IGJ5dGVzIGlzIDUxMSBpZiA4LWJpdC9mcmFtZSBvciAxMDIyIGlmIDE2LWJpdC9mcmFtZQorICAgICovCisgICAgdWludDMyX3QgbGltaXRlZF9zaXplID0gMDsKKyAgICBpZiAoMSA9PSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihiYXNlKSkKKyAgICB7CisgICAgICAgIGxpbWl0ZWRfc2l6ZSA9IDMyNzY3dTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbGltaXRlZF9zaXplID0gNTExdTsKKyAgICB9CisKKyAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPiA4KQorICAgIHsKKyAgICAgICAgaWYgKHRyYW5zZmVyLT5kYXRhU2l6ZSA+IChsaW1pdGVkX3NpemUgPDwgMXUpKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfSWRsZTsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0RTUElfT3V0T2ZSYW5nZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAodHJhbnNmZXItPmRhdGFTaXplID4gbGltaXRlZF9zaXplKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfSWRsZTsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0RTUElfT3V0T2ZSYW5nZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qVGhlIGRhdGEgc2l6ZSBzaG91bGQgYmUgZXZlbiBpZiB0aGUgYml0c1BlckZyYW1lIGlzIGdyZWF0ZXIgdGhhbiA4ICh0aGF0IGlzIDIgYnl0ZXMgcGVyIGZyYW1lIGluIGRzcGkpICovCisgICAgaWYgKChoYW5kbGUtPmJpdHNQZXJGcmFtZSA+IDgpICYmICh0cmFuc2Zlci0+ZGF0YVNpemUgJiAweDEpKQorICAgIHsKKyAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0lkbGU7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBEU1BJX0Rpc2FibGVETUEoYmFzZSwga0RTUElfUnhEbWFFbmFibGUgfCBrRFNQSV9UeERtYUVuYWJsZSk7CisKKyAgICBFRE1BX1NldENhbGxiYWNrKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUsIEVETUFfRHNwaU1hc3RlckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgJnNfZHNwaU1hc3RlckVkbWFQcml2YXRlSGFuZGxlW2luc3RhbmNlXSk7CisKKyAgICAvKgorICAgICgxKUZvciBEU1BJIGluc3RhbmNlcyB3aXRoIHNoYXJlZCBSWC9UWCBETUEgcmVxdWVzdHM6IFJ4IERNQSByZXF1ZXN0IC0+IGNoYW5uZWxfQSAtPiBjaGFubmVsX0ItPiBjaGFubmVsX0MuCisgICAgY2hhbm5lbF9BIG1pbm9yIGxpbmsgdG8gY2hhbm5lbF9CICwgY2hhbm5lbF9CIG1pbm9yIGxpbmsgdG8gY2hhbm5lbF9DLgorCisgICAgQWxyZWFkeSBwdXNoZWQgMSBvciAyIGRhdGEgaW4gU1BJX1BVU0hSICwgdGhlbiBzdGFydCB0aGUgRE1BIHRhbnNmZXIuCisgICAgY2hhbm5lbF9BOlNQSV9QT1BSIHRvIHJ4RGF0YSwKKyAgICBjaGFubmVsX0I6bmV4dCB0eERhdGEgdG8gaGFuZGxlLT5jb21tYW5kIChsb3cgMTYgYml0cyksCisgICAgY2hhbm5lbF9DOmhhbmRsZS0+Y29tbWFuZCAoMzIgYml0cykgdG8gU1BJX1BVU0hSLCBhbmQgdXNlIHRoZSBzY2F0dGVyL2dhdGhlciB0byB0cmFuc2ZlciB0aGUgbGFzdCBkYXRhCisgICAgKGhhbmRsZS0+bGFzdENvbW1hbmQgdG8gU1BJX1BVU0hSKS4KKworICAgICgyKUZvciBEU1BJIGluc3RhbmNlcyB3aXRoIHNlcGFyYXRlIFJYIGFuZCBUWCBETUEgcmVxdWVzdHM6CisgICAgUnggRE1BIHJlcXVlc3QgLT4gY2hhbm5lbF9BCisgICAgVHggRE1BIHJlcXVlc3QgLT4gY2hhbm5lbF9DIC0+IGNoYW5uZWxfQiAuCisgICAgY2hhbm5lbF9DIG1ham9yIGxpbmsgdG8gY2hhbm5lbF9CLgorICAgIFNvIG5lZWQgcHJlcGFyZSB0aGUgZmlyc3QgZGF0YSBpbiAiaW50ZXJtZWRpYXJ5IiAgYmVmb3JlIHRoZSBETUEKKyAgICB0cmFuc2ZlciBhbmQgdGhlbiBjaGFubmVsX0IgaXMgdXNlZCB0byBwcmVwYXJlIHRoZSBuZXh0IGRhdGEgdG8gImludGVybWVkaWFyeSIKKworICAgIGNoYW5uZWxfQTpTUElfUE9QUiB0byByeERhdGEsCisgICAgY2hhbm5lbF9DOiBoYW5kbGUtPmNvbW1hbmQgKDMyIGJpdHMpIHRvIFNQSV9QVVNIUiwKKyAgICBjaGFubmVsX0I6IG5leHQgdHhEYXRhIHRvIGhhbmRsZS0+Y29tbWFuZCAobG93IDE2IGJpdHMpLCBhbmQgdXNlIHRoZSBzY2F0dGVyL2dhdGhlciB0byBwcmVwYXJlIHRoZSBsYXN0IGRhdGEKKyAgICAoaGFuZGxlLT5sYXN0Q29tbWFuZCB0byBoYW5kbGUtPkNvbW1hbmQpLgorICAgICovCisKKyAgICAvKklmIGRzcGkgaGFzIHNlcGFyYXRlIGRtYSByZXF1ZXN0ICwgcHJlcGFyZSB0aGUgZmlyc3QgZGF0YSBpbiAiaW50ZXJtZWRpYXJ5IiAuCisgICAgZWxzZSAoZHNwaSBoYXMgc2hhcmVkIGRtYSByZXF1ZXN0KSAsIHNlbmQgZmlyc3QgMiBkYXRhIGlmIHRoZXJlIGlzIGZpZm8gb3Igc2VuZCBmaXJzdCAxIGRhdGEgaWYgdGhlcmUgaXMgbm8gZmlmbyovCisgICAgaWYgKDEgPT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpCisgICAgeworICAgICAgICAvKiBGb3IgRFNQSSBpbnN0YW5jZXMgd2l0aCBzZXBhcmF0ZSBSWC9UWCBETUEgcmVxdWVzdHMsIHdlJ2xsIHVzZSB0aGUgVFggRE1BIHJlcXVlc3QgdG8KKyAgICAgICAgKiB0cmlnZ2VyIHRoZSBUWCBETUEgY2hhbm5lbCBhbmQgUlggRE1BIHJlcXVlc3QgdG8gdHJpZ2dlciB0aGUgUlggRE1BIGNoYW5uZWwKKyAgICAgICAgKi8KKworICAgICAgICAvKlByZXBhcmUgdGhlIGZpcnQgZGF0YSovCisgICAgICAgIGlmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA+IDgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIElmIGl0J3MgdGhlIGxhc3Qgd29yZCAqLworICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA8PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKGhhbmRsZS0+dHhEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnR4RGF0YTsgLyogaW5jcmVtZW50IHRvIG5leHQgZGF0YSBieXRlICovCisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgfD0gKHVuc2lnbmVkKSgqKGhhbmRsZS0+dHhEYXRhKSkgPDwgOFU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAoKHVpbnQzMl90KWR1bW15RGF0YSA8PCA4KSB8IGR1bW15RGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFuZGxlLT5sYXN0Q29tbWFuZCA9IChoYW5kbGUtPmxhc3RDb21tYW5kICYgMHhmZmZmMDAwMFUpIHwgd29yZFRvU2VuZDsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPmNvbW1hbmQgPSBoYW5kbGUtPmxhc3RDb21tYW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAvKiBGb3IgYWxsIHdvcmRzIGV4Y2VwdCB0aGUgbGFzdCB3b3JkICwgZnJhbWUgPiA4Yml0cyAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKGhhbmRsZS0+dHhEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnR4RGF0YTsgLyogaW5jcmVtZW50IHRvIG5leHQgZGF0YSBieXRlICovCisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgfD0gKHVuc2lnbmVkKSgqKGhhbmRsZS0+dHhEYXRhKSkgPDwgOFU7CisgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT50eERhdGE7IC8qIGluY3JlbWVudCB0byBuZXh0IGRhdGEgYnl0ZSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gKCh1aW50MzJfdClkdW1teURhdGEgPDwgOCkgfCBkdW1teURhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGhhbmRsZS0+Y29tbWFuZCA9IChoYW5kbGUtPmNvbW1hbmQgJiAweGZmZmYwMDAwVSkgfCB3b3JkVG9TZW5kOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgLyogT3B0aW1pemVkIGZvciBiaXRzL2ZyYW1lIGxlc3MgdGhhbiBvciBlcXVhbCB0byBvbmUgYnl0ZS4gKi8KKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKGhhbmRsZS0+dHhEYXRhKTsKKyAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOyAvKiBpbmNyZW1lbnQgdG8gbmV4dCBkYXRhIHdvcmQqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSBkdW1teURhdGE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPmxhc3RDb21tYW5kID0gKGhhbmRsZS0+bGFzdENvbW1hbmQgJiAweGZmZmYwMDAwVSkgfCB3b3JkVG9TZW5kOworICAgICAgICAgICAgICAgIGhhbmRsZS0+Y29tbWFuZCA9IGhhbmRsZS0+bGFzdENvbW1hbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5jb21tYW5kID0gKGhhbmRsZS0+Y29tbWFuZCAmIDB4ZmZmZjAwMDBVKSB8IHdvcmRUb1NlbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBlbHNlIC8qZHNwaSBoYXMgc2hhcmVkIGRtYSByZXF1ZXN0Ki8KKworICAgIHsKKyAgICAgICAgLyogRm9yIERTUEkgaW5zdGFuY2VzIHdpdGggc2hhcmVkIFJYL1RYIERNQSByZXF1ZXN0cywgd2UnbGwgdXNlIHRoZSBSWCBETUEgcmVxdWVzdCB0bworICAgICAgICAqIHRyaWdnZXIgb25nb2luZyB0cmFuc2ZlcnMgYW5kIHdpbGwgbGluayB0byB0aGUgVFggRE1BIGNoYW5uZWwgZnJvbSB0aGUgUlggRE1BIGNoYW5uZWwuCisgICAgICAgICovCisKKyAgICAgICAgLyogSWYgYml0cy9mcmFtZSBpcyBncmVhdGVyIHRoYW4gb25lIGJ5dGUgKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lID4gOCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA8PSAyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gKihoYW5kbGUtPnR4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCB8PSAodW5zaWduZWQpKCooaGFuZGxlLT50eERhdGEpKSA8PCA4VTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAoKHVpbnQzMl90KWR1bW15RGF0YSA8PCA4KSB8IGR1bW15RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICBiYXNlLT5QVVNIUiA9IChoYW5kbGUtPmxhc3RDb21tYW5kICYgMHhmZmZmMDAwMFUpIHwgd29yZFRvU2VuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogRm9yIGFsbCB3b3JkcyBleGNlcHQgdGhlIGxhc3Qgd29yZCAqLworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICooaGFuZGxlLT50eERhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnR4RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgfD0gKHVuc2lnbmVkKSgqKGhhbmRsZS0+dHhEYXRhKSkgPDwgOFU7CisgICAgICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICgodWludDMyX3QpZHVtbXlEYXRhIDw8IDgpIHwgZHVtbXlEYXRhOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCAtPSAyOworICAgICAgICAgICAgICAgICAgICBiYXNlLT5QVVNIUiA9IChoYW5kbGUtPmNvbW1hbmQgJiAweGZmZmYwMDAwVSkgfCB3b3JkVG9TZW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIFRyeSB0byBjbGVhciB0aGUgVEZGRjsgaWYgdGhlIFRYIEZJRk8gaXMgZnVsbCB0aGlzIHdpbGwgY2xlYXIgKi8KKyAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKworICAgICAgICAgICAgICAgIGRhdGFBbHJlYWR5RmVkICs9IDI7CisKKyAgICAgICAgICAgICAgICAvKiBleGl0IGxvb3AgaWYgc2VuZCBjb3VudCBpcyB6ZXJvLCBlbHNlIHVwZGF0ZSBsb2NhbCB2YXJpYWJsZXMgZm9yIG5leHQgbG9vcCAqLworICAgICAgICAgICAgICAgIGlmICgoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDApIHx8IChkYXRhQWxyZWFkeUZlZCA9PSAoZGF0YUZlZE1heCAqIDIpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogRW5kIG9mIFRYIEZJRk8gZmlsbCB3aGlsZSBsb29wICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiBPcHRpbWl6ZWQgZm9yIGJpdHMvZnJhbWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG9uZSBieXRlLiAqLworICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gKihoYW5kbGUtPnR4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT50eERhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSBkdW1teURhdGE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFIgPSAoaGFuZGxlLT5sYXN0Q29tbWFuZCAmIDB4ZmZmZjAwMDBVKSB8IHdvcmRUb1NlbmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gKGhhbmRsZS0+Y29tbWFuZCAmIDB4ZmZmZjAwMDBVKSB8IHdvcmRUb1NlbmQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogVHJ5IHRvIGNsZWFyIHRoZSBURkZGOyBpZiB0aGUgVFggRklGTyBpcyBmdWxsIHRoaXMgd2lsbCBjbGVhciAqLworICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworCisgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7CisKKyAgICAgICAgICAgICAgICBkYXRhQWxyZWFkeUZlZCsrOworCisgICAgICAgICAgICAgICAgLyogZXhpdCBsb29wIGlmIHNlbmQgY291bnQgaXMgemVybywgZWxzZSB1cGRhdGUgbG9jYWwgdmFyaWFibGVzIGZvciBuZXh0IGxvb3AgKi8KKyAgICAgICAgICAgICAgICBpZiAoKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9PSAwKSB8fCAoZGF0YUFscmVhZHlGZWQgPT0gZGF0YUZlZE1heCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8qIEVuZCBvZiBUWCBGSUZPIGZpbGwgd2hpbGUgbG9vcCAqLworICAgICAgICB9CisgICAgfQorCisgICAgLyoqKmNoYW5uZWxfQSAqKiogdXNlZCBmb3IgY2FycnkgdGhlIGRhdGEgZnJvbSBSeF9EYXRhX1JlZ2lzdGVyKFBPUFIpIHRvIFVzZXJfUmVjZWl2ZV9CdWZmZXIocnhEYXRhKSovCisgICAgRURNQV9SZXNldENoYW5uZWwoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCk7CisKKyAgICB0cmFuc2ZlckNvbmZpZ0Euc3JjQWRkciA9ICh1aW50MzJfdClyeEFkZHI7CisgICAgdHJhbnNmZXJDb25maWdBLnNyY09mZnNldCA9IDA7CisKKyAgICBpZiAoaGFuZGxlLT5yeERhdGEpCisgICAgeworICAgICAgICB0cmFuc2ZlckNvbmZpZ0EuZGVzdEFkZHIgPSAodWludDMyX3QpICYgKGhhbmRsZS0+cnhEYXRhWzBdKTsKKyAgICAgICAgdHJhbnNmZXJDb25maWdBLmRlc3RPZmZzZXQgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0cmFuc2ZlckNvbmZpZ0EuZGVzdEFkZHIgPSAodWludDMyX3QpICYgKGhhbmRsZS0+cnhCdWZmSWZOdWxsKTsKKyAgICAgICAgdHJhbnNmZXJDb25maWdBLmRlc3RPZmZzZXQgPSAwOworICAgIH0KKworICAgIHRyYW5zZmVyQ29uZmlnQS5kZXN0VHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMUJ5dGVzOworCisgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lIDw9IDgpCisgICAgeworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Euc3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMUJ5dGVzOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0EubWlub3JMb29wQnl0ZXMgPSAxOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0EubWFqb3JMb29wQ291bnRzID0gaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Euc3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMkJ5dGVzOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0EubWlub3JMb29wQnl0ZXMgPSAyOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0EubWFqb3JMb29wQ291bnRzID0gaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50IC8gMjsKKyAgICB9CisKKyAgICAvKiBTdG9yZSB0aGUgaW5pdGlhbGx5IGNvbmZpZ3VyZWQgZURNQSBtaW5vciBieXRlIHRyYW5zZmVyIGNvdW50IGludG8gdGhlIERTUEkgaGFuZGxlICovCisgICAgaGFuZGxlLT5uYnl0ZXMgPSB0cmFuc2ZlckNvbmZpZ0EubWlub3JMb29wQnl0ZXM7CisKKyAgICBFRE1BX1NldFRyYW5zZmVyQ29uZmlnKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmJhc2UsIGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHJhbnNmZXJDb25maWdBLCBOVUxMKTsKKyAgICBFRE1BX0VuYWJsZUNoYW5uZWxJbnRlcnJ1cHRzKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmJhc2UsIGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRURNQV9NYWpvckludGVycnVwdEVuYWJsZSk7CisKKyAgICAvKioqY2hhbm5lbF9CICoqKiB1c2VkIGZvciBjYXJyeSB0aGUgZGF0YSBmcm9tIFVzZXJfU2VuZF9CdWZmZXIgdG8gImludGVybWVkaWFyeSIgYmVjYXVzZSB0aGUgU1BJeF9QVVNIUiBzaG91bGQKKyAgICB3cml0ZSB0aGUgMzJiaXRzIGF0IG9uY2UgdGltZSAuIFRoZW4gdXNlIGNoYW5uZWxfQyB0byBjYXJyeSB0aGUgImludGVybWVkaWFyeSIgdG8gU1BJeF9QVVNIUi4gTm90ZSB0aGF0IHRoZQorICAgIFNQSXhfUFVTSFIgdXBwZXIgMTYgYml0cyBhcmUgdGhlICJjb21tYW5kIiBhbmQgdGhlIGxvdyAxNmJpdHMgYXJlIGRhdGEgKi8KKworICAgIEVETUFfUmVzZXRDaGFubmVsKGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZS0+Y2hhbm5lbCk7CisKKyAgICAvKkNhbGN1bGF0ZSB0aGUgbGFzdCBkYXRhIDogaGFuZGxlLT5sYXN0Q29tbWFuZCovCisgICAgaWYgKCgoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMCkgJiYgKDEgIT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpKSB8fAorICAgICAgICAoKCgoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMSkgJiYgKGhhbmRsZS0+Yml0c1BlckZyYW1lIDw9IDgpKSB8fAorICAgICAgICAgICgoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMikgJiYgKGhhbmRsZS0+Yml0c1BlckZyYW1lID4gOCkpKSAmJgorICAgICAgICAgKDEgPT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpKSkKKyAgICB7CisgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgYnVmZmVySW5kZXggPSAwOworCisgICAgICAgICAgICBpZiAoMSA9PSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihiYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPD0gOCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZGV4ID0gaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IC0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5kZXggPSBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBidWZmZXJJbmRleCA9IGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lIDw9IDgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5sYXN0Q29tbWFuZCA9IChoYW5kbGUtPmxhc3RDb21tYW5kICYgMHhmZmZmMDAwMFUpIHwgaGFuZGxlLT50eERhdGFbYnVmZmVySW5kZXggLSAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPmxhc3RDb21tYW5kID0gKGhhbmRsZS0+bGFzdENvbW1hbmQgJiAweGZmZmYwMDAwVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWhhbmRsZS0+dHhEYXRhW2J1ZmZlckluZGV4IC0gMV0gPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnR4RGF0YVtidWZmZXJJbmRleCAtIDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lIDw9IDgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9IGR1bW15RGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gKCh1aW50MzJfdClkdW1teURhdGEgPDwgOCkgfCBkdW1teURhdGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGUtPmxhc3RDb21tYW5kID0gKGhhbmRsZS0+bGFzdENvbW1hbmQgJiAweGZmZmYwMDAwVSkgfCB3b3JkVG9TZW5kOworICAgICAgICB9CisgICAgfQorCisgICAgLypGb3IgRFNQSSBpbnN0YW5jZXMgd2l0aCBzZXBhcmF0ZSBSWCBhbmQgVFggRE1BIHJlcXVlc3RzOiB1c2UgdGhlIHNjYXR0ZXIvZ2F0aGVyIHRvIHByZXBhcmUgdGhlIGxhc3QgZGF0YQorICAgICAqIChoYW5kbGUtPmxhc3RDb21tYW5kKSB0byBoYW5kbGUtPkNvbW1hbmQqLworICAgIGlmICgxID09IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgIHsKKyAgICAgICAgdHJhbnNmZXJDb25maWdCLnNyY0FkZHIgPSAodWludDMyX3QpICYgKGhhbmRsZS0+bGFzdENvbW1hbmQpOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0IuZGVzdEFkZHIgPSAodWludDMyX3QpICYgKGhhbmRsZS0+Y29tbWFuZCk7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5zcmNUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemU0Qnl0ZXM7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5kZXN0VHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplNEJ5dGVzOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Iuc3JjT2Zmc2V0ID0gMDsKKyAgICAgICAgdHJhbnNmZXJDb25maWdCLmRlc3RPZmZzZXQgPSAwOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0IubWlub3JMb29wQnl0ZXMgPSA0OworICAgICAgICB0cmFuc2ZlckNvbmZpZ0IubWFqb3JMb29wQ291bnRzID0gMTsKKworICAgICAgICBFRE1BX1RjZFJlc2V0KHNvZnR3YXJlVENEKTsKKyAgICAgICAgRURNQV9UY2RTZXRUcmFuc2ZlckNvbmZpZyhzb2Z0d2FyZVRDRCwgJnRyYW5zZmVyQ29uZmlnQiwgTlVMTCk7CisgICAgfQorCisgICAgLypVc2VyX1NlbmRfQnVmZmVyKHR4RGF0YSkgdG8gaW50ZXJtZWRpYXJ5KGhhbmRsZS0+Y29tbWFuZCkqLworICAgIGlmICgoKCgoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMikgJiYgKGhhbmRsZS0+Yml0c1BlckZyYW1lIDw9IDgpKSB8fAorICAgICAgICAgICgoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gNCkgJiYgKGhhbmRsZS0+Yml0c1BlckZyYW1lID4gOCkpKSAmJgorICAgICAgICAgKDEgPT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpKSB8fAorICAgICAgICAoMSAhPSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihiYXNlKSkpCisgICAgeworICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5zcmNBZGRyID0gKHVpbnQzMl90KShoYW5kbGUtPnR4RGF0YSk7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0Iuc3JjT2Zmc2V0ID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5zcmNBZGRyID0gKHVpbnQzMl90KSgmaGFuZGxlLT50eEJ1ZmZJZk51bGwpOworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdCLnNyY09mZnNldCA9IDA7CisgICAgICAgIH0KKworICAgICAgICB0cmFuc2ZlckNvbmZpZ0IuZGVzdEFkZHIgPSAodWludDMyX3QpKCZoYW5kbGUtPmNvbW1hbmQpOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0IuZGVzdE9mZnNldCA9IDA7CisKKyAgICAgICAgdHJhbnNmZXJDb25maWdCLnNyY1RyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTFCeXRlczsKKworICAgICAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPD0gOCkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdCLmRlc3RUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUxQnl0ZXM7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0IubWlub3JMb29wQnl0ZXMgPSAxOworCisgICAgICAgICAgICBpZiAoMSA9PSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihiYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0IubWFqb3JMb29wQ291bnRzID0gaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IC0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKk9ubHkgZW5hYmxlIGNoYW5uZWxfQiBtaW5vcmxpbmsgdG8gY2hhbm5lbF9DICwgc28gbmVlZCB0byBhZGQgb25lIGNvdW50IGR1ZSB0byB0aGUgbGFzdCB0aW1lIGlzCisgICAgICAgICAgICAgICAgbWFqb3JsaW5rICwgdGhlIG1ham9ybGluayB3b3VsZCBub3QgdHJpZ2dlciB0aGUgY2hhbm5lbF9DKi8KKyAgICAgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0IubWFqb3JMb29wQ291bnRzID0gaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5kZXN0VHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMkJ5dGVzOworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdCLm1pbm9yTG9vcEJ5dGVzID0gMjsKKyAgICAgICAgICAgIGlmICgxID09IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLyAyIC0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKk9ubHkgZW5hYmxlIGNoYW5uZWxfQiBtaW5vcmxpbmsgdG8gY2hhbm5lbF9DICwgc28gbmVlZCB0byBhZGQgb25lIGNvdW50IGR1ZSB0byB0aGUgbGFzdCB0aW1lIGlzCisgICAgICAgICAgICAgICAgKiBtYWpvcmxpbmsqLworICAgICAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLyAyICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgxID09IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgICAgICB7CisgICAgICAgICAgICBFRE1BX1NldFRyYW5zZmVyQ29uZmlnKGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZS0+Y2hhbm5lbCwgJnRyYW5zZmVyQ29uZmlnQiwgc29mdHdhcmVUQ0QpOworICAgICAgICAgICAgRURNQV9FbmFibGVBdXRvU3RvcFJlcXVlc3QoaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUtPmNoYW5uZWwsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEVETUFfU2V0VHJhbnNmZXJDb25maWcoaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5jaGFubmVsLCAmdHJhbnNmZXJDb25maWdCLCBOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFRE1BX1NldFRyYW5zZmVyQ29uZmlnKGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5jaGFubmVsLCAmdHJhbnNmZXJDb25maWdCLCBOVUxMKTsKKyAgICB9CisKKyAgICAvKioqY2hhbm5lbF9DICoqKmNhcnJ5IHRoZSAiaW50ZXJtZWRpYXJ5IiB0byBTUEl4X1BVU0hSLiB1c2VkIHRoZSBlZG1hIFNjYXR0ZXIgR2F0aGVyIGZ1bmN0aW9uIG9uIGNoYW5uZWxfQyB0bworICAgIGhhbmRsZSB0aGUgbGFzdCBkYXRhICovCisKKyAgICBFRE1BX1Jlc2V0Q2hhbm5lbChoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5jaGFubmVsKTsKKworICAgIC8qRm9yIERTUEkgaW5zdGFuY2VzIHdpdGggc2hhcmVkIFJYL1RYIERNQSByZXF1ZXN0czogdXNlIHRoZSBzY2F0dGVyL2dhdGhlciB0byBwcmVwYXJlIHRoZSBsYXN0IGRhdGEKKyAgICAgKiAoaGFuZGxlLT5sYXN0Q29tbWFuZCkgdG8gU1BJX1BVU0hSKi8KKyAgICBpZiAoKCgxICE9IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKSAmJiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMCkpKQorICAgIHsKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLnNyY0FkZHIgPSAodWludDMyX3QpICYgKGhhbmRsZS0+bGFzdENvbW1hbmQpOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0MuZGVzdEFkZHIgPSAodWludDMyX3QpdHhBZGRyOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Muc3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplNEJ5dGVzOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0MuZGVzdFRyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTRCeXRlczsKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLnNyY09mZnNldCA9IDA7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5kZXN0T2Zmc2V0ID0gMDsKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLm1pbm9yTG9vcEJ5dGVzID0gNDsKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLm1ham9yTG9vcENvdW50cyA9IDE7CisKKyAgICAgICAgRURNQV9UY2RSZXNldChzb2Z0d2FyZVRDRCk7CisgICAgICAgIEVETUFfVGNkU2V0VHJhbnNmZXJDb25maWcoc29mdHdhcmVUQ0QsICZ0cmFuc2ZlckNvbmZpZ0MsIE5VTEwpOworICAgIH0KKworICAgIGlmICgoKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA+IDEpICYmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA8PSA4KSkgfHwKKyAgICAgICAgKChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAyKSAmJiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPiA4KSkgfHwKKyAgICAgICAgKDEgPT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpKQorICAgIHsKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLnNyY0FkZHIgPSAodWludDMyX3QpKCYoaGFuZGxlLT5jb21tYW5kKSk7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5kZXN0QWRkciA9ICh1aW50MzJfdCl0eEFkZHI7CisKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLnNyY1RyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTRCeXRlczsKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLmRlc3RUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemU0Qnl0ZXM7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5zcmNPZmZzZXQgPSAwOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0MuZGVzdE9mZnNldCA9IDA7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5taW5vckxvb3BCeXRlcyA9IDQ7CisgICAgICAgIGlmICgxICE9IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPD0gOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0MubWFqb3JMb29wQ291bnRzID0gaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0MubWFqb3JMb29wQ291bnRzID0gaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IC8gMiAtIDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEVETUFfU2V0VHJhbnNmZXJDb25maWcoaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbCwgJnRyYW5zZmVyQ29uZmlnQywgc29mdHdhcmVUQ0QpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdDLm1ham9yTG9vcENvdW50cyA9IDE7CisKKyAgICAgICAgICAgIEVETUFfU2V0VHJhbnNmZXJDb25maWcoaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbCwgJnRyYW5zZmVyQ29uZmlnQywgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBFRE1BX0VuYWJsZUF1dG9TdG9wUmVxdWVzdChoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5jaGFubmVsLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVETUFfU2V0VHJhbnNmZXJDb25maWcoaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5jaGFubmVsLCAmdHJhbnNmZXJDb25maWdDLCBOVUxMKTsKKyAgICB9CisKKyAgICAvKlN0YXJ0IHRoZSBFRE1BIGNoYW5uZWxfQSAsIGNoYW5uZWxfQiAsIGNoYW5uZWxfQyB0cmFuc2ZlciovCisgICAgRURNQV9TdGFydFRyYW5zZmVyKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUpOworICAgIEVETUFfU3RhcnRUcmFuc2ZlcihoYW5kbGUtPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZSk7CisgICAgRURNQV9TdGFydFRyYW5zZmVyKGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUpOworCisgICAgLypTZXQgY2hhbm5lbCBwcmlvcml0eSovCisgICAgdWludDhfdCBjaGFubmVsUHJpb3JpdHlMb3cgPSBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5jaGFubmVsOworICAgIHVpbnQ4X3QgY2hhbm5lbFByaW9yaXR5TWlkID0gaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmNoYW5uZWw7CisgICAgdWludDhfdCBjaGFubmVsUHJpb3JpdHlIaWdoID0gaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbDsKKyAgICB1aW50OF90IHQgPSAwOworICAgIGlmIChjaGFubmVsUHJpb3JpdHlMb3cgPiBjaGFubmVsUHJpb3JpdHlNaWQpCisgICAgeworICAgICAgICB0ID0gY2hhbm5lbFByaW9yaXR5TG93OworICAgICAgICBjaGFubmVsUHJpb3JpdHlMb3cgPSBjaGFubmVsUHJpb3JpdHlNaWQ7CisgICAgICAgIGNoYW5uZWxQcmlvcml0eU1pZCA9IHQ7CisgICAgfQorCisgICAgaWYgKGNoYW5uZWxQcmlvcml0eUxvdyA+IGNoYW5uZWxQcmlvcml0eUhpZ2gpCisgICAgeworICAgICAgICB0ID0gY2hhbm5lbFByaW9yaXR5TG93OworICAgICAgICBjaGFubmVsUHJpb3JpdHlMb3cgPSBjaGFubmVsUHJpb3JpdHlIaWdoOworICAgICAgICBjaGFubmVsUHJpb3JpdHlIaWdoID0gdDsKKyAgICB9CisKKyAgICBpZiAoY2hhbm5lbFByaW9yaXR5TWlkID4gY2hhbm5lbFByaW9yaXR5SGlnaCkKKyAgICB7CisgICAgICAgIHQgPSBjaGFubmVsUHJpb3JpdHlNaWQ7CisgICAgICAgIGNoYW5uZWxQcmlvcml0eU1pZCA9IGNoYW5uZWxQcmlvcml0eUhpZ2g7CisgICAgICAgIGNoYW5uZWxQcmlvcml0eUhpZ2ggPSB0OworICAgIH0KKyAgICBlZG1hX2NoYW5uZWxfUHJlZW1wdGlvbl9jb25maWdfdCBwcmVlbXB0aW9uX2NvbmZpZ190OworICAgIHByZWVtcHRpb25fY29uZmlnX3QuZW5hYmxlQ2hhbm5lbFByZWVtcHRpb24gPSB0cnVlOworICAgIHByZWVtcHRpb25fY29uZmlnX3QuZW5hYmxlUHJlZW1wdEFiaWxpdHkgPSB0cnVlOworICAgIHByZWVtcHRpb25fY29uZmlnX3QuY2hhbm5lbFByaW9yaXR5ID0gY2hhbm5lbFByaW9yaXR5TG93OworCisgICAgaWYgKDEgIT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpCisgICAgeworICAgICAgICBFRE1BX1NldENoYW5uZWxQcmVlbXB0aW9uQ29uZmlnKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmJhc2UsIGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZWVtcHRpb25fY29uZmlnX3QpOworCisgICAgICAgIHByZWVtcHRpb25fY29uZmlnX3QuY2hhbm5lbFByaW9yaXR5ID0gY2hhbm5lbFByaW9yaXR5TWlkOworICAgICAgICBFRE1BX1NldENoYW5uZWxQcmVlbXB0aW9uQ29uZmlnKGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5jaGFubmVsLCAmcHJlZW1wdGlvbl9jb25maWdfdCk7CisKKyAgICAgICAgcHJlZW1wdGlvbl9jb25maWdfdC5jaGFubmVsUHJpb3JpdHkgPSBjaGFubmVsUHJpb3JpdHlIaWdoOworICAgICAgICBFRE1BX1NldENoYW5uZWxQcmVlbXB0aW9uQ29uZmlnKGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbCwgJnByZWVtcHRpb25fY29uZmlnX3QpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFRE1BX1NldENoYW5uZWxQcmVlbXB0aW9uQ29uZmlnKGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbCwgJnByZWVtcHRpb25fY29uZmlnX3QpOworCisgICAgICAgIHByZWVtcHRpb25fY29uZmlnX3QuY2hhbm5lbFByaW9yaXR5ID0gY2hhbm5lbFByaW9yaXR5TWlkOworICAgICAgICBFRE1BX1NldENoYW5uZWxQcmVlbXB0aW9uQ29uZmlnKGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5jaGFubmVsLCAmcHJlZW1wdGlvbl9jb25maWdfdCk7CisKKyAgICAgICAgcHJlZW1wdGlvbl9jb25maWdfdC5jaGFubmVsUHJpb3JpdHkgPSBjaGFubmVsUHJpb3JpdHlIaWdoOworICAgICAgICBFRE1BX1NldENoYW5uZWxQcmVlbXB0aW9uQ29uZmlnKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmJhc2UsIGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZWVtcHRpb25fY29uZmlnX3QpOworICAgIH0KKworICAgIC8qU2V0IHRoZSBjaGFubmVsIGxpbmsuKi8KKyAgICBpZiAoMSA9PSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihiYXNlKSkKKyAgICB7CisgICAgICAgIC8qaWYgdGhlcmUgaXMgVHggRE1BIHJlcXVlc3QgLCBjYXJyeSB0aGUgMzJiaXRzIGRhdGEgKGhhbmRsZS0+Y29tbWFuZCkgdG8gUFVTSFIgZmlyc3QgLCB0aGVuIGxpbmsgdG8gY2hhbm5lbEIKKyAgICAgICAgdG8gcHJlcGFyZSB0aGUgbmV4dCAzMmJpdHMgZGF0YSAodHhEYXRhIHRvIGhhbmRsZS0+Y29tbWFuZCkgKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA+IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVETUFfU2V0Q2hhbm5lbExpbmsoaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbCwga0VETUFfTWFqb3JMaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZS0+Y2hhbm5lbCk7CisgICAgICAgIH0KKworICAgICAgICBEU1BJX0VuYWJsZURNQShiYXNlLCBrRFNQSV9SeERtYUVuYWJsZSB8IGtEU1BJX1R4RG1hRW5hYmxlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIEVETUFfU2V0Q2hhbm5lbExpbmsoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0VETUFfTWlub3JMaW5rLCBoYW5kbGUtPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZS0+Y2hhbm5lbCk7CisKKyAgICAgICAgICAgIEVETUFfU2V0Q2hhbm5lbExpbmsoaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5jaGFubmVsLCBrRURNQV9NaW5vckxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUtPmNoYW5uZWwpOworICAgICAgICB9CisKKyAgICAgICAgRFNQSV9FbmFibGVETUEoYmFzZSwga0RTUElfUnhEbWFFbmFibGUpOworICAgIH0KKworICAgIERTUElfU3RhcnRUcmFuc2ZlcihiYXNlKTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIEVETUFfRHNwaU1hc3RlckNhbGxiYWNrKGVkbWFfaGFuZGxlX3QgKmVkbWFIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpnX2RzcGlFZG1hUHJpdmF0ZUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdHJhbnNmZXJEb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGNkcykKK3sKKyAgICBhc3NlcnQoZWRtYUhhbmRsZSk7CisgICAgYXNzZXJ0KGdfZHNwaUVkbWFQcml2YXRlSGFuZGxlKTsKKworICAgIGRzcGlfbWFzdGVyX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqZHNwaUVkbWFQcml2YXRlSGFuZGxlOworCisgICAgZHNwaUVkbWFQcml2YXRlSGFuZGxlID0gKGRzcGlfbWFzdGVyX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqKWdfZHNwaUVkbWFQcml2YXRlSGFuZGxlOworCisgICAgRFNQSV9EaXNhYmxlRE1BKChkc3BpRWRtYVByaXZhdGVIYW5kbGUtPmJhc2UpLCBrRFNQSV9SeERtYUVuYWJsZSB8IGtEU1BJX1R4RG1hRW5hYmxlKTsKKworICAgIGRzcGlFZG1hUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0lkbGU7CisKKyAgICBpZiAoZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5oYW5kbGUtPmNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5oYW5kbGUtPmNhbGxiYWNrKGRzcGlFZG1hUHJpdmF0ZUhhbmRsZS0+YmFzZSwgZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3RhdHVzX1N1Y2Nlc3MsIGRzcGlFZG1hUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT51c2VyRGF0YSk7CisgICAgfQorfQorCit2b2lkIERTUElfTWFzdGVyVHJhbnNmZXJBYm9ydEVETUEoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIERTUElfU3RvcFRyYW5zZmVyKGJhc2UpOworCisgICAgRFNQSV9EaXNhYmxlRE1BKGJhc2UsIGtEU1BJX1J4RG1hRW5hYmxlIHwga0RTUElfVHhEbWFFbmFibGUpOworCisgICAgRURNQV9BYm9ydFRyYW5zZmVyKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUpOworICAgIEVETUFfQWJvcnRUcmFuc2ZlcihoYW5kbGUtPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZSk7CisgICAgRURNQV9BYm9ydFRyYW5zZmVyKGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUpOworCisgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0lkbGU7Cit9CisKK3N0YXR1c190IERTUElfTWFzdGVyVHJhbnNmZXJHZXRDb3VudEVETUEoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgc2l6ZV90ICpjb3VudCkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIGlmICghY291bnQpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogQ2F0Y2ggd2hlbiB0aGVyZSBpcyBub3QgYW4gYWN0aXZlIHRyYW5zZmVyLiAqLworICAgIGlmIChoYW5kbGUtPnN0YXRlICE9IGtEU1BJX0J1c3kpCisgICAgeworICAgICAgICAqY291bnQgPSAwOworICAgICAgICByZXR1cm4ga1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzczsKKyAgICB9CisKKyAgICBzaXplX3QgYnl0ZXM7CisKKyAgICBieXRlcyA9ICh1aW50MzJfdCloYW5kbGUtPm5ieXRlcyAqIEVETUFfR2V0UmVtYWluaW5nTWFqb3JMb29wQ291bnQoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCk7CisKKyAgICAqY291bnQgPSBoYW5kbGUtPnRvdGFsQnl0ZUNvdW50IC0gYnl0ZXM7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCit2b2lkIERTUElfU2xhdmVUcmFuc2ZlckNyZWF0ZUhhbmRsZUVETUEoU1BJX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9zbGF2ZV9lZG1hX3RyYW5zZmVyX2NhbGxiYWNrX3QgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlKTsKKyAgICBhc3NlcnQoZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGUpOworCisgICAgLyogWmVybyB0aGUgaGFuZGxlLiAqLworICAgIG1lbXNldChoYW5kbGUsIDAsIHNpemVvZigqaGFuZGxlKSk7CisKKyAgICB1aW50MzJfdCBpbnN0YW5jZSA9IERTUElfR2V0SW5zdGFuY2UoYmFzZSk7CisKKyAgICBzX2RzcGlTbGF2ZUVkbWFQcml2YXRlSGFuZGxlW2luc3RhbmNlXS5iYXNlID0gYmFzZTsKKyAgICBzX2RzcGlTbGF2ZUVkbWFQcml2YXRlSGFuZGxlW2luc3RhbmNlXS5oYW5kbGUgPSBoYW5kbGU7CisKKyAgICBoYW5kbGUtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgaGFuZGxlLT51c2VyRGF0YSA9IHVzZXJEYXRhOworCisgICAgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSA9IGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlOworICAgIGhhbmRsZS0+ZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGUgPSBlZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZTsKK30KKworc3RhdHVzX3QgRFNQSV9TbGF2ZVRyYW5zZmVyRURNQShTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIGRzcGlfdHJhbnNmZXJfdCAqdHJhbnNmZXIpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KHRyYW5zZmVyKTsKKworICAgIC8qIElmIHNlbmQvcmVjZWl2ZSBsZW5ndGggaXMgemVybyAqLworICAgIGlmICh0cmFuc2Zlci0+ZGF0YVNpemUgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBJZiBib3RoIHNlbmQgYnVmZmVyIGFuZCByZWNlaXZlIGJ1ZmZlciBpcyBudWxsICovCisgICAgaWYgKCghKHRyYW5zZmVyLT50eERhdGEpKSAmJiAoISh0cmFuc2Zlci0+cnhEYXRhKSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhhdCB3ZSdyZSBub3QgYnVzeS4qLworICAgIGlmIChoYW5kbGUtPnN0YXRlID09IGtEU1BJX0J1c3kpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19EU1BJX0J1c3k7CisgICAgfQorCisgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0J1c3k7CisKKyAgICB1aW50MzJfdCBpbnN0YW5jZSA9IERTUElfR2V0SW5zdGFuY2UoYmFzZSk7CisgICAgdWludDhfdCB3aGljaEN0YXIgPSAodHJhbnNmZXItPmNvbmZpZ0ZsYWdzICYgRFNQSV9TTEFWRV9DVEFSX01BU0spID4+IERTUElfU0xBVkVfQ1RBUl9TSElGVDsKKyAgICBoYW5kbGUtPmJpdHNQZXJGcmFtZSA9CisgICAgICAgICgoKGJhc2UtPkNUQVJfU0xBVkVbd2hpY2hDdGFyXSkgJiBTUElfQ1RBUl9TTEFWRV9GTVNaX01BU0spID4+IFNQSV9DVEFSX1NMQVZFX0ZNU1pfU0hJRlQpICsgMTsKKworICAgIC8qIElmIHVzaW5nIGEgc2hhcmVkIFJYL1RYIERNQSByZXF1ZXN0LCB0aGVuIHRoaXMgbGltaXRzIHRoZSBhbW91bnQgb2YgZGF0YSB3ZSBjYW4gdHJhbnNmZXIKKyAgICAqIGR1ZSB0byB0aGUgbGlua2VkIGNoYW5uZWwuIFRoZSBtYXggYnl0ZXMgaXMgNTExIGlmIDgtYml0L2ZyYW1lIG9yIDEwMjIgaWYgMTYtYml0L2ZyYW1lCisgICAgKi8KKyAgICB1aW50MzJfdCBsaW1pdGVkX3NpemUgPSAwOworICAgIGlmICgxID09IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgIHsKKyAgICAgICAgbGltaXRlZF9zaXplID0gMzI3Njd1OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBsaW1pdGVkX3NpemUgPSA1MTF1OworICAgIH0KKworICAgIGlmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA+IDgpCisgICAgeworICAgICAgICBpZiAodHJhbnNmZXItPmRhdGFTaXplID4gKGxpbWl0ZWRfc2l6ZSA8PCAxdSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrRFNQSV9JZGxlOworICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRFNQSV9PdXRPZlJhbmdlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh0cmFuc2Zlci0+ZGF0YVNpemUgPiBsaW1pdGVkX3NpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrRFNQSV9JZGxlOworICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRFNQSV9PdXRPZlJhbmdlOworICAgICAgICB9CisgICAgfQorCisgICAgLypUaGUgZGF0YSBzaXplIHNob3VsZCBiZSBldmVuIGlmIHRoZSBiaXRzUGVyRnJhbWUgaXMgZ3JlYXRlciB0aGFuIDggKHRoYXQgaXMgMiBieXRlcyBwZXIgZnJhbWUgaW4gZHNwaSkgKi8KKyAgICBpZiAoKGhhbmRsZS0+Yml0c1BlckZyYW1lID4gOCkgJiYgKHRyYW5zZmVyLT5kYXRhU2l6ZSAmIDB4MSkpCisgICAgeworICAgICAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfSWRsZTsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIEVETUFfU2V0Q2FsbGJhY2soaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSwgRURNQV9Ec3BpU2xhdmVDYWxsYmFjaywgJnNfZHNwaVNsYXZlRWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdKTsKKworICAgIC8qIFN0b3JlIHRyYW5zZmVyIGluZm9ybWF0aW9uICovCisgICAgaGFuZGxlLT50eERhdGEgPSB0cmFuc2Zlci0+dHhEYXRhOworICAgIGhhbmRsZS0+cnhEYXRhID0gdHJhbnNmZXItPnJ4RGF0YTsKKyAgICBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisgICAgaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID0gdHJhbnNmZXItPmRhdGFTaXplOworICAgIGhhbmRsZS0+dG90YWxCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisKKyAgICB1aW50MTZfdCB3b3JkVG9TZW5kID0gMDsKKyAgICB1aW50OF90IGR1bW15RGF0YSA9IERTUElfRFVNTVlfREFUQTsKKyAgICB1aW50OF90IGRhdGFBbHJlYWR5RmVkID0gMDsKKyAgICB1aW50OF90IGRhdGFGZWRNYXggPSAyOworCisgICAgdWludDMyX3QgcnhBZGRyID0gRFNQSV9HZXRSeFJlZ2lzdGVyQWRkcmVzcyhiYXNlKTsKKyAgICB1aW50MzJfdCB0eEFkZHIgPSBEU1BJX1NsYXZlR2V0VHhSZWdpc3RlckFkZHJlc3MoYmFzZSk7CisKKyAgICBlZG1hX3RyYW5zZmVyX2NvbmZpZ190IHRyYW5zZmVyQ29uZmlnQTsKKyAgICBlZG1hX3RyYW5zZmVyX2NvbmZpZ190IHRyYW5zZmVyQ29uZmlnQzsKKworICAgIERTUElfU3RvcFRyYW5zZmVyKGJhc2UpOworCisgICAgRFNQSV9GbHVzaEZpZm8oYmFzZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX0FsbFN0YXR1c0ZsYWcpOworCisgICAgRFNQSV9EaXNhYmxlRE1BKGJhc2UsIGtEU1BJX1J4RG1hRW5hYmxlIHwga0RTUElfVHhEbWFFbmFibGUpOworCisgICAgRFNQSV9TdGFydFRyYW5zZmVyKGJhc2UpOworCisgICAgLyppZiBkc3BpIGhhcyBzZXBhcmF0ZSBkbWEgcmVxdWVzdCAsIG5lZWQgbm90IHByZXBhcmUgZGF0YSBmaXJzdCAuCisgICAgZWxzZSAoZHNwaSBoYXMgc2hhcmVkIGRtYSByZXF1ZXN0KSAsIHNlbmQgZmlyc3QgMiBkYXRhIGludG8gZmlmbyBpZiB0aGVyZSBpcyBmaWZvIG9yIHNlbmQgZmlyc3QgMSBkYXRhIHRvCisgICAgc2xhdmVHZXRUeFJlZ2lzdGVyIGlmIHRoZXJlIGlzIG5vIGZpZm8qLworICAgIGlmICgxICE9IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgIHsKKyAgICAgICAgLyogRm9yIERTUEkgaW5zdGFuY2VzIHdpdGggc2hhcmVkIFJYL1RYIERNQSByZXF1ZXN0cywgd2UnbGwgdXNlIHRoZSBSWCBETUEgcmVxdWVzdCB0bworICAgICAgICAqIHRyaWdnZXIgb25nb2luZyB0cmFuc2ZlcnMgYW5kIHdpbGwgbGluayB0byB0aGUgVFggRE1BIGNoYW5uZWwgZnJvbSB0aGUgUlggRE1BIGNoYW5uZWwuCisgICAgICAgICovCisgICAgICAgIC8qIElmIGJpdHMvZnJhbWUgaXMgZ3JlYXRlciB0aGFuIG9uZSBieXRlICovCisgICAgICAgIGlmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA+IDgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKGhhbmRsZS0+dHhEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnR4RGF0YTsgLyogSW5jcmVtZW50IHRvIG5leHQgZGF0YSBieXRlICovCisKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCB8PSAodW5zaWduZWQpKCooaGFuZGxlLT50eERhdGEpKSA8PCA4VTsKKyAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnR4RGF0YTsgLyogSW5jcmVtZW50IHRvIG5leHQgZGF0YSBieXRlICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAoKHVpbnQzMl90KWR1bW15RGF0YSA8PCA4KSB8IGR1bW15RGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IC09IDI7IC8qIGRlY3JlbWVudCByZW1haW5pbmdTZW5kQnl0ZUNvdW50IGJ5IDIgKi8KKyAgICAgICAgICAgICAgICBiYXNlLT5QVVNIUl9TTEFWRSA9IHdvcmRUb1NlbmQ7CisKKyAgICAgICAgICAgICAgICAvKiBUcnkgdG8gY2xlYXIgdGhlIFRGRkY7IGlmIHRoZSBUWCBGSUZPIGlzIGZ1bGwgdGhpcyB3aWxsIGNsZWFyICovCisgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisKKyAgICAgICAgICAgICAgICBkYXRhQWxyZWFkeUZlZCArPSAyOworCisgICAgICAgICAgICAgICAgLyogRXhpdCBsb29wIGlmIHNlbmQgY291bnQgaXMgemVybywgZWxzZSB1cGRhdGUgbG9jYWwgdmFyaWFibGVzIGZvciBuZXh0IGxvb3AgKi8KKyAgICAgICAgICAgICAgICBpZiAoKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9PSAwKSB8fCAoZGF0YUFscmVhZHlGZWQgPT0gKGRhdGFGZWRNYXggKiAyKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8qIEVuZCBvZiBUWCBGSUZPIGZpbGwgd2hpbGUgbG9vcCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgLyogT3B0aW1pemVkIGZvciBiaXRzL2ZyYW1lIGxlc3MgdGhhbiBvciBlcXVhbCB0byBvbmUgYnl0ZS4gKi8KKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICooaGFuZGxlLT50eERhdGEpOworICAgICAgICAgICAgICAgICAgICAvKiBJbmNyZW1lbnQgdG8gbmV4dCBkYXRhIHdvcmQqLworICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gZHVtbXlEYXRhOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSX1NMQVZFID0gd29yZFRvU2VuZDsKKworICAgICAgICAgICAgICAgIC8qIFRyeSB0byBjbGVhciB0aGUgVEZGRjsgaWYgdGhlIFRYIEZJRk8gaXMgZnVsbCB0aGlzIHdpbGwgY2xlYXIgKi8KKyAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKyAgICAgICAgICAgICAgICAvKiBEZWNyZW1lbnQgcmVtYWluaW5nU2VuZEJ5dGVDb3VudCovCisgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7CisKKyAgICAgICAgICAgICAgICBkYXRhQWxyZWFkeUZlZCsrOworCisgICAgICAgICAgICAgICAgLyogRXhpdCBsb29wIGlmIHNlbmQgY291bnQgaXMgemVybywgZWxzZSB1cGRhdGUgbG9jYWwgdmFyaWFibGVzIGZvciBuZXh0IGxvb3AgKi8KKyAgICAgICAgICAgICAgICBpZiAoKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9PSAwKSB8fCAoZGF0YUFscmVhZHlGZWQgPT0gZGF0YUZlZE1heCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8qIEVuZCBvZiBUWCBGSUZPIGZpbGwgd2hpbGUgbG9vcCAqLworICAgICAgICB9CisgICAgfQorCisgICAgLyoqKmNoYW5uZWxfQSAqKiogdXNlZCBmb3IgY2FycnkgdGhlIGRhdGEgZnJvbSBSeF9EYXRhX1JlZ2lzdGVyKFBPUFIpIHRvIFVzZXJfUmVjZWl2ZV9CdWZmZXIqLworICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPiAwKQorICAgIHsKKyAgICAgICAgRURNQV9SZXNldENoYW5uZWwoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCk7CisKKyAgICAgICAgdHJhbnNmZXJDb25maWdBLnNyY0FkZHIgPSAodWludDMyX3QpcnhBZGRyOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Euc3JjT2Zmc2V0ID0gMDsKKworICAgICAgICBpZiAoaGFuZGxlLT5yeERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5kZXN0QWRkciA9ICh1aW50MzJfdCkgJiAoaGFuZGxlLT5yeERhdGFbMF0pOworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdBLmRlc3RPZmZzZXQgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdBLmRlc3RBZGRyID0gKHVpbnQzMl90KSAmIChoYW5kbGUtPnJ4QnVmZklmTnVsbCk7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0EuZGVzdE9mZnNldCA9IDA7CisgICAgICAgIH0KKworICAgICAgICB0cmFuc2ZlckNvbmZpZ0EuZGVzdFRyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTFCeXRlczsKKworICAgICAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPD0gOCkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdBLnNyY1RyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTFCeXRlczsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5taW5vckxvb3BCeXRlcyA9IDE7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0EubWFqb3JMb29wQ291bnRzID0gaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdBLnNyY1RyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTJCeXRlczsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5taW5vckxvb3BCeXRlcyA9IDI7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0EubWFqb3JMb29wQ291bnRzID0gaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50IC8gMjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFN0b3JlIHRoZSBpbml0aWFsbHkgY29uZmlndXJlZCBlRE1BIG1pbm9yIGJ5dGUgdHJhbnNmZXIgY291bnQgaW50byB0aGUgRFNQSSBoYW5kbGUgKi8KKyAgICAgICAgaGFuZGxlLT5uYnl0ZXMgPSB0cmFuc2ZlckNvbmZpZ0EubWlub3JMb29wQnl0ZXM7CisKKyAgICAgICAgRURNQV9TZXRUcmFuc2ZlckNvbmZpZyhoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5jaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2ZlckNvbmZpZ0EsIE5VTEwpOworICAgICAgICBFRE1BX0VuYWJsZUNoYW5uZWxJbnRlcnJ1cHRzKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmJhc2UsIGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0VETUFfTWFqb3JJbnRlcnJ1cHRFbmFibGUpOworICAgIH0KKworICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAwKQorICAgIHsKKyAgICAgICAgLyoqKmNoYW5uZWxfQyAqKiogdXNlZCBmb3IgY2FycnkgdGhlIGRhdGEgZnJvbSBVc2VyX1NlbmRfQnVmZmVyIHRvIFR4X0RhdGFfUmVnaXN0ZXIoUFVTSFJfU0xBVkUpKi8KKyAgICAgICAgRURNQV9SZXNldENoYW5uZWwoaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbCk7CisKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLmRlc3RBZGRyID0gKHVpbnQzMl90KXR4QWRkcjsKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLmRlc3RPZmZzZXQgPSAwOworCisgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdDLnNyY0FkZHIgPSAodWludDMyX3QpKCYoaGFuZGxlLT50eERhdGFbMF0pKTsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5zcmNPZmZzZXQgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdDLnNyY0FkZHIgPSAodWludDMyX3QpKCZoYW5kbGUtPnR4QnVmZklmTnVsbCk7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0Muc3JjT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIGlmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA8PSA4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+dHhCdWZmSWZOdWxsID0gRFNQSV9EVU1NWV9EQVRBOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+dHhCdWZmSWZOdWxsID0gKERTUElfRFVNTVlfREFUQSA8PCA4KSB8IERTUElfRFVNTVlfREFUQTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5zcmNUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUxQnl0ZXM7CisKKyAgICAgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lIDw9IDgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5kZXN0VHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMUJ5dGVzOworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdDLm1pbm9yTG9vcEJ5dGVzID0gMTsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0MuZGVzdFRyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTJCeXRlczsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5taW5vckxvb3BCeXRlcyA9IDI7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0MubWFqb3JMb29wQ291bnRzID0gaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IC8gMjsKKyAgICAgICAgfQorCisgICAgICAgIEVETUFfU2V0VHJhbnNmZXJDb25maWcoaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHJhbnNmZXJDb25maWdDLCBOVUxMKTsKKworICAgICAgICBFRE1BX1N0YXJ0VHJhbnNmZXIoaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSk7CisgICAgfQorCisgICAgRURNQV9TdGFydFRyYW5zZmVyKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUpOworCisgICAgLypTZXQgY2hhbm5lbCBwcmlvcml0eSovCisgICAgdWludDhfdCBjaGFubmVsUHJpb3JpdHlMb3cgPSBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5jaGFubmVsOworICAgIHVpbnQ4X3QgY2hhbm5lbFByaW9yaXR5SGlnaCA9IGhhbmRsZS0+ZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGUtPmNoYW5uZWw7CisgICAgdWludDhfdCB0ID0gMDsKKworICAgIGlmIChjaGFubmVsUHJpb3JpdHlMb3cgPiBjaGFubmVsUHJpb3JpdHlIaWdoKQorICAgIHsKKyAgICAgICAgdCA9IGNoYW5uZWxQcmlvcml0eUxvdzsKKyAgICAgICAgY2hhbm5lbFByaW9yaXR5TG93ID0gY2hhbm5lbFByaW9yaXR5SGlnaDsKKyAgICAgICAgY2hhbm5lbFByaW9yaXR5SGlnaCA9IHQ7CisgICAgfQorCisgICAgZWRtYV9jaGFubmVsX1ByZWVtcHRpb25fY29uZmlnX3QgcHJlZW1wdGlvbl9jb25maWdfdDsKKyAgICBwcmVlbXB0aW9uX2NvbmZpZ190LmVuYWJsZUNoYW5uZWxQcmVlbXB0aW9uID0gdHJ1ZTsKKyAgICBwcmVlbXB0aW9uX2NvbmZpZ190LmVuYWJsZVByZWVtcHRBYmlsaXR5ID0gdHJ1ZTsKKyAgICBwcmVlbXB0aW9uX2NvbmZpZ190LmNoYW5uZWxQcmlvcml0eSA9IGNoYW5uZWxQcmlvcml0eUxvdzsKKworICAgIGlmICgxICE9IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgIHsKKyAgICAgICAgRURNQV9TZXRDaGFubmVsUHJlZW1wdGlvbkNvbmZpZyhoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5jaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmVlbXB0aW9uX2NvbmZpZ190KTsKKworICAgICAgICBwcmVlbXB0aW9uX2NvbmZpZ190LmNoYW5uZWxQcmlvcml0eSA9IGNoYW5uZWxQcmlvcml0eUhpZ2g7CisgICAgICAgIEVETUFfU2V0Q2hhbm5lbFByZWVtcHRpb25Db25maWcoaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJlZW1wdGlvbl9jb25maWdfdCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVETUFfU2V0Q2hhbm5lbFByZWVtcHRpb25Db25maWcoaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJlZW1wdGlvbl9jb25maWdfdCk7CisKKyAgICAgICAgcHJlZW1wdGlvbl9jb25maWdfdC5jaGFubmVsUHJpb3JpdHkgPSBjaGFubmVsUHJpb3JpdHlIaWdoOworICAgICAgICBFRE1BX1NldENoYW5uZWxQcmVlbXB0aW9uQ29uZmlnKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmJhc2UsIGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZWVtcHRpb25fY29uZmlnX3QpOworICAgIH0KKworICAgIC8qU2V0IHRoZSBjaGFubmVsIGxpbmsuCisgICAgRm9yIERTUEkgaW5zdGFuY2VzIHdpdGggc2hhcmVkIFJYL1RYIERNQSByZXF1ZXN0czogUnggRE1BIHJlcXVlc3QgLT4gY2hhbm5lbF9BIC0+IGNoYW5uZWxfQy4KKyAgICBGb3IgRFNQSSBpbnN0YW5jZXMgd2l0aCBzZXBhcmF0ZSBSWCBhbmQgVFggRE1BIHJlcXVlc3RzOgorICAgIFJ4IERNQSByZXF1ZXN0IC0+IGNoYW5uZWxfQQorICAgIFR4IERNQSByZXF1ZXN0IC0+IGNoYW5uZWxfQyAqLworICAgIGlmICgxICE9IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIEVETUFfU2V0Q2hhbm5lbExpbmsoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0VETUFfTWlub3JMaW5rLCBoYW5kbGUtPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLT5jaGFubmVsKTsKKyAgICAgICAgfQorICAgICAgICBEU1BJX0VuYWJsZURNQShiYXNlLCBrRFNQSV9SeERtYUVuYWJsZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERTUElfRW5hYmxlRE1BKGJhc2UsIGtEU1BJX1J4RG1hRW5hYmxlIHwga0RTUElfVHhEbWFFbmFibGUpOworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIEVETUFfRHNwaVNsYXZlQ2FsbGJhY2soZWRtYV9oYW5kbGVfdCAqZWRtYUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZ19kc3BpRWRtYVByaXZhdGVIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdHJhbnNmZXJEb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0Y2RzKQoreworICAgIGFzc2VydChlZG1hSGFuZGxlKTsKKyAgICBhc3NlcnQoZ19kc3BpRWRtYVByaXZhdGVIYW5kbGUpOworCisgICAgZHNwaV9zbGF2ZV9lZG1hX3ByaXZhdGVfaGFuZGxlX3QgKmRzcGlFZG1hUHJpdmF0ZUhhbmRsZTsKKworICAgIGRzcGlFZG1hUHJpdmF0ZUhhbmRsZSA9IChkc3BpX3NsYXZlX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqKWdfZHNwaUVkbWFQcml2YXRlSGFuZGxlOworCisgICAgRFNQSV9EaXNhYmxlRE1BKChkc3BpRWRtYVByaXZhdGVIYW5kbGUtPmJhc2UpLCBrRFNQSV9SeERtYUVuYWJsZSB8IGtEU1BJX1R4RG1hRW5hYmxlKTsKKworICAgIGRzcGlFZG1hUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0lkbGU7CisKKyAgICBpZiAoZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5oYW5kbGUtPmNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5oYW5kbGUtPmNhbGxiYWNrKGRzcGlFZG1hUHJpdmF0ZUhhbmRsZS0+YmFzZSwgZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3RhdHVzX1N1Y2Nlc3MsIGRzcGlFZG1hUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT51c2VyRGF0YSk7CisgICAgfQorfQorCit2b2lkIERTUElfU2xhdmVUcmFuc2ZlckFib3J0RURNQShTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICBEU1BJX1N0b3BUcmFuc2ZlcihiYXNlKTsKKworICAgIERTUElfRGlzYWJsZURNQShiYXNlLCBrRFNQSV9SeERtYUVuYWJsZSB8IGtEU1BJX1R4RG1hRW5hYmxlKTsKKworICAgIEVETUFfQWJvcnRUcmFuc2ZlcihoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlKTsKKyAgICBFRE1BX0Fib3J0VHJhbnNmZXIoaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSk7CisKKyAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfSWRsZTsKK30KKworc3RhdHVzX3QgRFNQSV9TbGF2ZVRyYW5zZmVyR2V0Q291bnRFRE1BKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgc2l6ZV90ICpjb3VudCkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIGlmICghY291bnQpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogQ2F0Y2ggd2hlbiB0aGVyZSBpcyBub3QgYW4gYWN0aXZlIHRyYW5zZmVyLiAqLworICAgIGlmIChoYW5kbGUtPnN0YXRlICE9IGtEU1BJX0J1c3kpCisgICAgeworICAgICAgICAqY291bnQgPSAwOworICAgICAgICByZXR1cm4ga1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzczsKKyAgICB9CisKKyAgICBzaXplX3QgYnl0ZXM7CisKKyAgICBieXRlcyA9ICh1aW50MzJfdCloYW5kbGUtPm5ieXRlcyAqIEVETUFfR2V0UmVtYWluaW5nTWFqb3JMb29wQ291bnQoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCk7CisKKyAgICAqY291bnQgPSBoYW5kbGUtPnRvdGFsQnl0ZUNvdW50IC0gYnl0ZXM7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaV9lZG1hLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpX2VkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2UyOWNlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaV9lZG1hLmgKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX0RTUElfRURNQV9IXworI2RlZmluZSBfRlNMX0RTUElfRURNQV9IXworCisjaW5jbHVkZSAiZnNsX2RzcGkuaCIKKyNpbmNsdWRlICJmc2xfZWRtYS5oIgorLyohCisgKiBAYWRkdG9ncm91cCBkc3BpX2VkbWFfZHJpdmVyCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyogQGJyaWVmIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIERTUEkgZURNQSBtYXN0ZXIgaGFuZGxlIHR5cGVkZWZzLgorKi8KK3R5cGVkZWYgc3RydWN0IF9kc3BpX21hc3Rlcl9lZG1hX2hhbmRsZSBkc3BpX21hc3Rlcl9lZG1hX2hhbmRsZV90OworCisvKiEKKyogQGJyaWVmIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIERTUEkgZURNQSBzbGF2ZSBoYW5kbGUgdHlwZWRlZnMuCisqLwordHlwZWRlZiBzdHJ1Y3QgX2RzcGlfc2xhdmVfZWRtYV9oYW5kbGUgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90OworCisvKiEKKyAqIEBicmllZiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBBIHBvaW50ZXIgdG8gdGhlIGhhbmRsZSBmb3IgdGhlIERTUEkgbWFzdGVyLgorICogQHBhcmFtIHN0YXR1cyBTdWNjZXNzIG9yIGVycm9yIGNvZGUgZGVzY3JpYmluZyB3aGV0aGVyIHRoZSB0cmFuc2ZlciBjb21wbGV0ZWQuCisgKiBAcGFyYW0gdXNlckRhdGEgQW4gYXJiaXRyYXJ5IHBvaW50ZXItZGF0YVNpemVkIHZhbHVlIHBhc3NlZCBmcm9tIHRoZSBhcHBsaWNhdGlvbi4KKyAqLwordHlwZWRlZiB2b2lkICgqZHNwaV9tYXN0ZXJfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190KShTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKTsKKy8qIQorICogQGJyaWVmIENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciB0eXBlLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIEEgcG9pbnRlciB0byB0aGUgaGFuZGxlIGZvciB0aGUgRFNQSSBzbGF2ZS4KKyAqIEBwYXJhbSBzdGF0dXMgU3VjY2VzcyBvciBlcnJvciBjb2RlIGRlc2NyaWJpbmcgd2hldGhlciB0aGUgdHJhbnNmZXIgY29tcGxldGVkLgorICogQHBhcmFtIHVzZXJEYXRhIEFuIGFyYml0cmFyeSBwb2ludGVyLWRhdGFTaXplZCB2YWx1ZSBwYXNzZWQgZnJvbSB0aGUgYXBwbGljYXRpb24uCisgKi8KK3R5cGVkZWYgdm9pZCAoKmRzcGlfc2xhdmVfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190KShTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOworCisvKiEgQGJyaWVmIERTUEkgbWFzdGVyIGVETUEgdHJhbnNmZXIgaGFuZGxlIHN0cnVjdHVyZSB1c2VkIGZvciB0aGUgdHJhbnNhY3Rpb25hbCBBUEkuICovCitzdHJ1Y3QgX2RzcGlfbWFzdGVyX2VkbWFfaGFuZGxlCit7CisgICAgdWludDMyX3QgYml0c1BlckZyYW1lOyAgICAgICAgIC8qITwgVGhlIGRlc2lyZWQgbnVtYmVyIG9mIGJpdHMgcGVyIGZyYW1lLiAqLworICAgIHZvbGF0aWxlIHVpbnQzMl90IGNvbW1hbmQ7ICAgICAvKiE8IFRoZSBkZXNpcmVkIGRhdGEgY29tbWFuZC4gKi8KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBsYXN0Q29tbWFuZDsgLyohPCBUaGUgZGVzaXJlZCBsYXN0IGRhdGEgY29tbWFuZC4gKi8KKworICAgIHVpbnQ4X3QgZmlmb1NpemU7IC8qITwgRklGTyBkYXRhU2l6ZS4gKi8KKworICAgIHZvbGF0aWxlIGJvb2wKKyAgICAgICAgaXNQY3NBY3RpdmVBZnRlclRyYW5zZmVyOyAvKiE8IEluZGljYXRlcyB3aGV0aGVyIHRoZSBQQ1Mgc2lnbmFsIGtlZXBzIGFjdGl2ZSBhZnRlciB0aGUgbGFzdCBmcmFtZSB0cmFuc2Zlci4qLworCisgICAgdWludDhfdCBuYnl0ZXM7ICAgICAgICAgLyohPCBlRE1BIG1pbm9yIGJ5dGUgdHJhbnNmZXIgY291bnQgaW5pdGlhbGx5IGNvbmZpZ3VyZWQuICovCisgICAgdm9sYXRpbGUgdWludDhfdCBzdGF0ZTsgLyohPCBEU1BJIHRyYW5zZmVyIHN0YXRlICwgX2RzcGlfdHJhbnNmZXJfc3RhdGUuKi8KKworICAgIHVpbnQ4X3QgKnZvbGF0aWxlIHR4RGF0YTsgICAgICAgICAgICAgICAgICAvKiE8IFNlbmQgYnVmZmVyLiAqLworICAgIHVpbnQ4X3QgKnZvbGF0aWxlIHJ4RGF0YTsgICAgICAgICAgICAgICAgICAvKiE8IFJlY2VpdmUgYnVmZmVyLiAqLworICAgIHZvbGF0aWxlIHNpemVfdCByZW1haW5pbmdTZW5kQnl0ZUNvdW50OyAgICAvKiE8IEEgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyB0byBzZW5kLiovCisgICAgdm9sYXRpbGUgc2l6ZV90IHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7IC8qITwgQSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIHRvIHJlY2VpdmUuKi8KKyAgICBzaXplX3QgdG90YWxCeXRlQ291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyohPCBBIG51bWJlciBvZiB0cmFuc2ZlciBieXRlcyovCisKKyAgICB1aW50MzJfdCByeEJ1ZmZJZk51bGw7IC8qITwgVXNlZCBpZiB0aGVyZSBpcyBub3QgcnhEYXRhIGZvciBETUEgcHVycG9zZS4qLworICAgIHVpbnQzMl90IHR4QnVmZklmTnVsbDsgLyohPCBVc2VkIGlmIHRoZXJlIGlzIG5vdCB0eERhdGEgZm9yIERNQSBwdXJwb3NlLiovCisKKyAgICBkc3BpX21hc3Rlcl9lZG1hX3RyYW5zZmVyX2NhbGxiYWNrX3QgY2FsbGJhY2s7IC8qITwgQ29tcGxldGlvbiBjYWxsYmFjay4gKi8KKyAgICB2b2lkICp1c2VyRGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2FsbGJhY2sgdXNlciBkYXRhLiAqLworCisgICAgZWRtYV9oYW5kbGVfdCAqZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGU7ICAgICAgICAvKiE8ZWRtYV9oYW5kbGVfdCBoYW5kbGUgcG9pbnQgdXNlZCBmb3IgUnhSZWcgdG8gUnhEYXRhIGJ1ZmYqLworICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZTsgLyohPGVkbWFfaGFuZGxlX3QgaGFuZGxlIHBvaW50IHVzZWQgZm9yIFR4RGF0YSB0byBJbnRlcm1lZGlhcnkqLworICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlOyAgLyohPGVkbWFfaGFuZGxlX3QgaGFuZGxlIHBvaW50IHVzZWQgZm9yIEludGVybWVkaWFyeSB0byBUeFJlZyovCisKKyAgICBlZG1hX3RjZF90IGRzcGlTb2Z0d2FyZVRDRFsyXTsgLyohPFNvZnR3YXJlVENEICwgaW50ZXJuYWwgdXNlZCovCit9OworCisvKiEgQGJyaWVmIERTUEkgc2xhdmUgZURNQSB0cmFuc2ZlciBoYW5kbGUgc3RydWN0dXJlIHVzZWQgZm9yIHRoZSB0cmFuc2FjdGlvbmFsIEFQSS4qLworc3RydWN0IF9kc3BpX3NsYXZlX2VkbWFfaGFuZGxlCit7CisgICAgdWludDMyX3QgYml0c1BlckZyYW1lOyAvKiE8IFRoZSBkZXNpcmVkIG51bWJlciBvZiBiaXRzIHBlciBmcmFtZS4gKi8KKworICAgIHVpbnQ4X3QgKnZvbGF0aWxlIHR4RGF0YTsgICAgICAgICAgICAgICAgICAvKiE8IFNlbmQgYnVmZmVyLiAqLworICAgIHVpbnQ4X3QgKnZvbGF0aWxlIHJ4RGF0YTsgICAgICAgICAgICAgICAgICAvKiE8IFJlY2VpdmUgYnVmZmVyLiAqLworICAgIHZvbGF0aWxlIHNpemVfdCByZW1haW5pbmdTZW5kQnl0ZUNvdW50OyAgICAvKiE8IEEgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyB0byBzZW5kLiovCisgICAgdm9sYXRpbGUgc2l6ZV90IHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7IC8qITwgQSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIHRvIHJlY2VpdmUuKi8KKyAgICBzaXplX3QgdG90YWxCeXRlQ291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyohPCBBIG51bWJlciBvZiB0cmFuc2ZlciBieXRlcyovCisKKyAgICB1aW50MzJfdCByeEJ1ZmZJZk51bGw7IC8qITwgVXNlZCBpZiB0aGVyZSBpcyBub3QgcnhEYXRhIGZvciBETUEgcHVycG9zZS4qLworICAgIHVpbnQzMl90IHR4QnVmZklmTnVsbDsgLyohPCBVc2VkIGlmIHRoZXJlIGlzIG5vdCB0eERhdGEgZm9yIERNQSBwdXJwb3NlLiovCisgICAgdWludDMyX3QgdHhMYXN0RGF0YTsgICAvKiE8IFVzZWQgaWYgdGhlcmUgaXMgYW4gZXh0cmEgYnl0ZSB3aGVuIDE2Yml0cyBwZXIgZnJhbWUgZm9yIERNQSBwdXJwb3NlLiovCisKKyAgICB1aW50OF90IG5ieXRlczsgLyohPCBlRE1BIG1pbm9yIGJ5dGUgdHJhbnNmZXIgY291bnQgaW5pdGlhbGx5IGNvbmZpZ3VyZWQuICovCisKKyAgICB2b2xhdGlsZSB1aW50OF90IHN0YXRlOyAvKiE8IERTUEkgdHJhbnNmZXIgc3RhdGUuKi8KKworICAgIGRzcGlfc2xhdmVfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrOyAvKiE8IENvbXBsZXRpb24gY2FsbGJhY2suICovCisgICAgdm9pZCAqdXNlckRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2FsbGJhY2sgdXNlciBkYXRhLiAqLworCisgICAgZWRtYV9oYW5kbGVfdCAqZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGU7IC8qITxlZG1hX2hhbmRsZV90IGhhbmRsZSBwb2ludCB1c2VkIGZvciBSeFJlZyB0byBSeERhdGEgYnVmZiovCisgICAgZWRtYV9oYW5kbGVfdCAqZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGU7IC8qITxlZG1hX2hhbmRsZV90IGhhbmRsZSBwb2ludCB1c2VkIGZvciBUeERhdGEgdG8gVHhSZWcqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKl9jcGx1c3BsdXMqLworCisvKlRyYW5zYWN0aW9uYWwgQVBJcyovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBEU1BJIG1hc3RlciBlRE1BIGhhbmRsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBEU1BJIGVETUEgaGFuZGxlIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBvdGhlciBEU1BJIHRyYW5zYWN0aW9uYWwgQVBJcy4gIFVzdWFsbHksIGZvciBhCisgKiBzcGVjaWZpZWQgRFNQSSBpbnN0YW5jZSwgY2FsbCB0aGlzIEFQSSBvbmNlIHRvIGdldCB0aGUgaW5pdGlhbGl6ZWQgaGFuZGxlLgorICoKKyAqIE5vdGUgdGhhdCBEU1BJIGVETUEgaGFzIHNlcGFyYXRlZCAoUlggYW5kIFRYIGFzIHR3byBzb3VyY2VzKSBvciBzaGFyZWQgKFJYICBhbmQgVFggYXJlIHRoZSBzYW1lIHNvdXJjZSkgRE1BIHJlcXVlc3QKKyAqIHNvdXJjZS4KKyAqICgxKSBGb3IgdGhlIHNlcGFyYXRlZCBETUEgcmVxdWVzdCBzb3VyY2UsIGVuYWJsZSBhbmQgc2V0IHRoZSBSWCBETUFNVVggc291cmNlIGZvciBlZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSBhbmQKKyAqIFRYIERNQU1VWCBzb3VyY2UgZm9yIGVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLgorICogKDIpIEZvciB0aGUgc2hhcmVkIERNQSByZXF1ZXN0IHNvdXJjZSwgZW5hYmxlIGFuZCBzZXQgdGhlIFJYL1JYIERNQU1VWCBzb3VyY2UgZm9yIHRoZSBlZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBEU1BJIGhhbmRsZSBwb2ludGVyIHRvIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3QuCisgKiBAcGFyYW0gY2FsbGJhY2sgRFNQSSBjYWxsYmFjay4KKyAqIEBwYXJhbSB1c2VyRGF0YSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHBhcmFtZXRlci4KKyAqIEBwYXJhbSBlZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSBlZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSBwb2ludGVyIHRvIGVkbWFfaGFuZGxlX3QuCisgKiBAcGFyYW0gZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlIGVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZSBwb2ludGVyIHRvIGVkbWFfaGFuZGxlX3QuCisgKiBAcGFyYW0gZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUgZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUgcG9pbnRlciB0byBlZG1hX2hhbmRsZV90LgorICovCit2b2lkIERTUElfTWFzdGVyVHJhbnNmZXJDcmVhdGVIYW5kbGVFRE1BKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfbWFzdGVyX2VkbWFfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICplZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgZGF0YSB1c2luZyBlRE1BLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJhbnNmZXJzIGRhdGEgdXNpbmcgZURNQS4gVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmdW5jdGlvbiwgd2hpY2ggcmV0dXJucyByaWdodCBhd2F5LiBXaGVuIGFsbCBkYXRhCisgKiBpcyB0cmFuc2ZlcnJlZCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBBIHBvaW50ZXIgdG8gdGhlIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKiBAcGFyYW0gdHJhbnNmZXIgQSBwb2ludGVyIHRvIHRoZSBkc3BpX3RyYW5zZmVyX3Qgc3RydWN0dXJlLgorICogQHJldHVybiBzdGF0dXMgb2Ygc3RhdHVzX3QuCisgKi8KK3N0YXR1c190IERTUElfTWFzdGVyVHJhbnNmZXJFRE1BKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIGRzcGlfdHJhbnNmZXJfdCAqdHJhbnNmZXIpOworCisvKiEKKyAqIEBicmllZiBEU1BJIG1hc3RlciBhYm9ydHMgYSB0cmFuc2ZlciB3aGljaCBpcyB1c2luZyBlRE1BLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWJvcnRzIGEgdHJhbnNmZXIgd2hpY2ggaXMgdXNpbmcgZURNQS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBBIHBvaW50ZXIgdG8gdGhlIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKi8KK3ZvaWQgRFNQSV9NYXN0ZXJUcmFuc2ZlckFib3J0RURNQShTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgbWFzdGVyIGVETUEgdHJhbnNmZXIgY291bnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBtYXN0ZXIgZURNQSB0cmFuc2ZlciBjb3VudC4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBBIHBvaW50ZXIgdG8gdGhlIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKiBAcGFyYW0gY291bnQgQSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgYnkgdGhlIG5vbi1ibG9ja2luZyB0cmFuc2FjdGlvbi4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHN0YXR1c190LgorICovCitzdGF0dXNfdCBEU1BJX01hc3RlclRyYW5zZmVyR2V0Q291bnRFRE1BKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIHNpemVfdCAqY291bnQpOworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgRFNQSSBzbGF2ZSBlRE1BIGhhbmRsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBEU1BJIGVETUEgaGFuZGxlIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBvdGhlciBEU1BJIHRyYW5zYWN0aW9uYWwgQVBJcy4gIFVzdWFsbHksIGZvciBhCisgKiBzcGVjaWZpZWQgRFNQSSBpbnN0YW5jZSwgY2FsbCB0aGlzIEFQSSBvbmNlIHRvIGdldCB0aGUgaW5pdGlhbGl6ZWQgaGFuZGxlLgorICoKKyAqIE5vdGUgdGhhdCBEU1BJIGVETUEgaGFzIHNlcGFyYXRlZCAoUk4gYW5kIFRYIGluIDIgc291cmNlcykgb3Igc2hhcmVkIChSWCAgYW5kIFRYIGFyZSB0aGUgc2FtZSBzb3VyY2UpIERNQSByZXF1ZXN0CisgKiBzb3VyY2UuCisgKiAoMSlGb3IgdGhlIHNlcGFyYXRlZCBETUEgcmVxdWVzdCBzb3VyY2UsIGVuYWJsZSBhbmQgc2V0IHRoZSBSWCBETUFNVVggc291cmNlIGZvciBlZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSBhbmQKKyAqIFRYIERNQU1VWCBzb3VyY2UgZm9yIGVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLgorICogKDIpRm9yIHRoZSBzaGFyZWQgRE1BIHJlcXVlc3Qgc291cmNlLCAgZW5hYmxlIGFuZCBzZXQgdGhlIFJYL1JYIERNQU1VWCBzb3VyY2UgZm9yIHRoZSBlZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBEU1BJIGhhbmRsZSBwb2ludGVyIHRvIGRzcGlfc2xhdmVfZWRtYV9oYW5kbGVfdC4KKyAqIEBwYXJhbSBjYWxsYmFjayBEU1BJIGNhbGxiYWNrLgorICogQHBhcmFtIHVzZXJEYXRhIEEgY2FsbGJhY2sgZnVuY3Rpb24gcGFyYW1ldGVyLgorICogQHBhcmFtIGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlIGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlIHBvaW50ZXIgdG8gZWRtYV9oYW5kbGVfdC4KKyAqIEBwYXJhbSBlZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSBlZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSBwb2ludGVyIHRvIGVkbWFfaGFuZGxlX3QuCisgKi8KK3ZvaWQgRFNQSV9TbGF2ZVRyYW5zZmVyQ3JlYXRlSGFuZGxlRURNQShTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX3NsYXZlX2VkbWFfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICplZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICplZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIERTUEkgc2xhdmUgdHJhbnNmZXIgZGF0YSB1c2luZyBlRE1BLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJhbnNmZXJzIGRhdGEgdXNpbmcgZURNQS4gVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmdW5jdGlvbiwgd2hpY2ggcmV0dXJucyByaWdodCBhd2F5LiBXaGVuIGFsbCBkYXRhCisgKiBpcyB0cmFuc2ZlcnJlZCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqIE5vdGUgdGhhdCB0aGUgc2xhdmUgZURNQSB0cmFuc2ZlciBkb2Vzbid0IHN1cHBvcnQgdHJhbnNmZXJfc2l6ZSBpcyAxIHdoZW4gdGhlIGJpdHNQZXJGcmFtZSBpcyBncmVhdGVyCisgKiB0aGFuIGVpZ2h0LgorCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBBIHBvaW50ZXIgdG8gdGhlIGRzcGlfc2xhdmVfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqIEBwYXJhbSB0cmFuc2ZlciBBIHBvaW50ZXIgdG8gdGhlIGRzcGlfdHJhbnNmZXJfdCBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIHN0YXR1cyBvZiBzdGF0dXNfdC4KKyAqLworc3RhdHVzX3QgRFNQSV9TbGF2ZVRyYW5zZmVyRURNQShTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIGRzcGlfdHJhbnNmZXJfdCAqdHJhbnNmZXIpOworCisvKiEKKyAqIEBicmllZiBEU1BJIHNsYXZlIGFib3J0cyBhIHRyYW5zZmVyIHdoaWNoIGlzIHVzaW5nIGVETUEuCisgKgorICogVGhpcyBmdW5jdGlvbiBhYm9ydHMgYSB0cmFuc2ZlciB3aGljaCBpcyB1c2luZyBlRE1BLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIEEgcG9pbnRlciB0byB0aGUgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICovCit2b2lkIERTUElfU2xhdmVUcmFuc2ZlckFib3J0RURNQShTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBzbGF2ZSBlRE1BIHRyYW5zZmVyIGNvdW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgc2xhdmUgZURNQSB0cmFuc2ZlciBjb3VudC4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBBIHBvaW50ZXIgdG8gdGhlIGRzcGlfc2xhdmVfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqIEBwYXJhbSBjb3VudCBBIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBzbyBmYXIgYnkgdGhlIG5vbi1ibG9ja2luZyB0cmFuc2FjdGlvbi4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHN0YXR1c190LgorICovCitzdGF0dXNfdCBEU1BJX1NsYXZlVHJhbnNmZXJHZXRDb3VudEVETUEoU1BJX1R5cGUgKmJhc2UsIGRzcGlfc2xhdmVfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBzaXplX3QgKmNvdW50KTsKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYgLypfY3BsdXNwbHVzKi8KKyAgICAgICAvKiEKKyAgICAgICAgKkB9CisgICAgICAgICovCisKKyNlbmRpZiAvKl9GU0xfRFNQSV9FRE1BX0hfKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGlfZnJlZXJ0b3MuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGlfZnJlZXJ0b3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTVlZWNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaV9mcmVlcnRvcy5jCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9kc3BpX2ZyZWVydG9zLmgiCisKK3N0YXRpYyB2b2lkIERTUElfUlRPU19DYWxsYmFjayhTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmRydl9oYW5kbGUsIHN0YXR1c190IHN0YXR1cywgdm9pZCAqdXNlckRhdGEpCit7CisgICAgZHNwaV9ydG9zX2hhbmRsZV90ICpoYW5kbGUgPSAoZHNwaV9ydG9zX2hhbmRsZV90ICopdXNlckRhdGE7CisgICAgQmFzZVR5cGVfdCByZXNjaGVkdWxlOworCisgICAgeFNlbWFwaG9yZUdpdmVGcm9tSVNSKGhhbmRsZS0+ZXZlbnQsICZyZXNjaGVkdWxlKTsKKyAgICBwb3J0WUlFTERfRlJPTV9JU1IocmVzY2hlZHVsZSk7Cit9CisKK3N0YXR1c190IERTUElfUlRPU19Jbml0KGRzcGlfcnRvc19oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkc3BpX21hc3Rlcl9jb25maWdfdCAqbWFzdGVyQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjQ2xvY2tfSHopCit7CisgICAgaWYgKGhhbmRsZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGlmIChiYXNlID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKGRzcGlfcnRvc19oYW5kbGVfdCkpOworCisjaWYgKGNvbmZpZ1NVUFBPUlRfU1RBVElDX0FMTE9DQVRJT04gPT0gMSkKKyAgICBoYW5kbGUtPm11dGV4ID0geFNlbWFwaG9yZUNyZWF0ZU11dGV4U3RhdGljKCZoYW5kbGUtPm11dGV4QnVmZmVyKTsKKyNlbHNlCisgICAgaGFuZGxlLT5tdXRleCA9IHhTZW1hcGhvcmVDcmVhdGVNdXRleCgpOworI2VuZGlmCisgICAgaWYgKGhhbmRsZS0+bXV0ZXggPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgfQorI2lmIChjb25maWdTVVBQT1JUX1NUQVRJQ19BTExPQ0FUSU9OID09IDEpCisgICAgaGFuZGxlLT5ldmVudCA9IHhTZW1hcGhvcmVDcmVhdGVCaW5hcnlTdGF0aWMoJmhhbmRsZS0+c2VtYXBob3JlQnVmZmVyKTsKKyNlbHNlCisgICAgaGFuZGxlLT5ldmVudCA9IHhTZW1hcGhvcmVDcmVhdGVCaW5hcnkoKTsKKyNlbmRpZgorICAgIGlmIChoYW5kbGUtPmV2ZW50ID09IE5VTEwpCisgICAgeworICAgICAgICB2U2VtYXBob3JlRGVsZXRlKGhhbmRsZS0+bXV0ZXgpOworICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKworICAgIGhhbmRsZS0+YmFzZSA9IGJhc2U7CisKKyAgICBEU1BJX01hc3RlckluaXQoaGFuZGxlLT5iYXNlLCBtYXN0ZXJDb25maWcsIHNyY0Nsb2NrX0h6KTsKKyAgICBEU1BJX01hc3RlclRyYW5zZmVyQ3JlYXRlSGFuZGxlKGhhbmRsZS0+YmFzZSwgJmhhbmRsZS0+ZHJ2X2hhbmRsZSwgRFNQSV9SVE9TX0NhbGxiYWNrLCAodm9pZCAqKWhhbmRsZSk7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBEU1BJX1JUT1NfRGVpbml0KGRzcGlfcnRvc19oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIERTUElfRGVpbml0KGhhbmRsZS0+YmFzZSk7CisgICAgdlNlbWFwaG9yZURlbGV0ZShoYW5kbGUtPmV2ZW50KTsKKyAgICB2U2VtYXBob3JlRGVsZXRlKGhhbmRsZS0+bXV0ZXgpOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgRFNQSV9SVE9TX1RyYW5zZmVyKGRzcGlfcnRvc19oYW5kbGVfdCAqaGFuZGxlLCBkc3BpX3RyYW5zZmVyX3QgKnRyYW5zZmVyKQoreworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIC8qIExvY2sgcmVzb3VyY2UgbXV0ZXggKi8KKyAgICBpZiAoeFNlbWFwaG9yZVRha2UoaGFuZGxlLT5tdXRleCwgcG9ydE1BWF9ERUxBWSkgIT0gcGRUUlVFKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRFNQSV9CdXN5OworICAgIH0KKworICAgIHN0YXR1cyA9IERTUElfTWFzdGVyVHJhbnNmZXJOb25CbG9ja2luZyhoYW5kbGUtPmJhc2UsICZoYW5kbGUtPmRydl9oYW5kbGUsIHRyYW5zZmVyKTsKKyAgICBpZiAoc3RhdHVzICE9IGtTdGF0dXNfU3VjY2VzcykKKyAgICB7CisgICAgICAgIHhTZW1hcGhvcmVHaXZlKGhhbmRsZS0+bXV0ZXgpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIFdhaXQgZm9yIHRyYW5zZmVyIHRvIGZpbmlzaCAqLworICAgIHhTZW1hcGhvcmVUYWtlKGhhbmRsZS0+ZXZlbnQsIHBvcnRNQVhfREVMQVkpOworCisgICAgLyogVW5sb2NrIHJlc291cmNlIG11dGV4ICovCisgICAgeFNlbWFwaG9yZUdpdmUoaGFuZGxlLT5tdXRleCk7CisKKyAgICAvKiBSZXR1cm4gc3RhdHVzIGNhcHR1cmVkIGJ5IGNhbGxiYWNrIGZ1bmN0aW9uICovCisgICAgcmV0dXJuIGhhbmRsZS0+YXN5bmNfc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaV9mcmVlcnRvcy5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaV9mcmVlcnRvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzE3OWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpX2ZyZWVydG9zLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfX0ZTTF9EU1BJX0ZSRUVSVE9TX0hfXworI2RlZmluZSBfX0ZTTF9EU1BJX0ZSRUVSVE9TX0hfXworCisjaW5jbHVkZSAiRnJlZVJUT1NDb25maWcuaCIKKyNpbmNsdWRlICJGcmVlUlRPUy5oIgorI2luY2x1ZGUgInBvcnRhYmxlLmgiCisjaW5jbHVkZSAic2VtcGhyLmgiCisKKyNpbmNsdWRlICJmc2xfZHNwaS5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGRzcGlfZnJlZXJ0b3NfZHJpdmVyCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisqIEBjb25kIFJUT1NfUFJJVkFURQorKiBAYnJpZWYgRFNQSSBGcmVlUlRPUyBoYW5kbGUKKyovCit0eXBlZGVmIHN0cnVjdCBfZHNwaV9ydG9zX2hhbmRsZQoreworICAgIFNQSV9UeXBlICpiYXNlOyAgICAgICAgICAgICAgICAgIC8qITwgRFNQSSBiYXNlIGFkZHJlc3MgKi8KKyAgICBkc3BpX21hc3Rlcl9oYW5kbGVfdCBkcnZfaGFuZGxlOyAvKiE8IEhhbmRsZSBvZiB0aGUgdW5kZXJseWluZyBkcml2ZXIsIHRyZWF0ZWQgYXMgb3BhcXVlIGJ5IHRoZSBSVE9TIGxheWVyICovCisgICAgc3RhdHVzX3QgYXN5bmNfc3RhdHVzOyAgICAgICAgICAgLyohPCBUcmFuc2FjdGlvbmFsIHN0YXRlIG9mIHRoZSB1bmRlcmx5aW5nIGRyaXZlciAqLworICAgIFNlbWFwaG9yZUhhbmRsZV90IG11dGV4OyAgICAgICAgIC8qITwgTXV0ZXggdG8gbG9jayB0aGUgaGFuZGxlIGR1cmluZyBhIHRyYW5zZmVyICovCisgICAgU2VtYXBob3JlSGFuZGxlX3QgZXZlbnQ7ICAgICAgICAgLyohPCBTZW1hcGhvcmUgdG8gbm90aWZ5IGFuZCB1bmJsb2NrIGEgdGFzayB3aGVuIGEgdHJhbnNmZXIgZW5kcyAqLworI2lmIChjb25maWdTVVBQT1JUX1NUQVRJQ19BTExPQ0FUSU9OID09IDEpCisgICAgU3RhdGljU2VtYXBob3JlX3QgbXV0ZXhCdWZmZXI7ICAgICAvKiE8IFN0YXRpY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBmb3IgbXV0ZXggKi8KKyAgICBTdGF0aWNTZW1hcGhvcmVfdCBzZW1hcGhvcmVCdWZmZXI7IC8qITwgU3RhdGljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGZvciBldmVudCAqLworI2VuZGlmCit9IGRzcGlfcnRvc19oYW5kbGVfdDsKKy8qISBcZW5kY29uZCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQG5hbWUgRFNQSSBSVE9TIE9wZXJhdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgRFNQSS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBEU1BJIG1vZHVsZSBhbmQgdGhlIHJlbGF0ZWQgUlRPUyBjb250ZXh0LgorICoKKyAqIEBwYXJhbSBoYW5kbGUgVGhlIFJUT1MgRFNQSSBoYW5kbGUsIHRoZSBwb2ludGVyIHRvIGFuIGFsbG9jYXRlZCBzcGFjZSBmb3IgUlRPUyBjb250ZXh0LgorICogQHBhcmFtIGJhc2UgVGhlIHBvaW50ZXIgYmFzZSBhZGRyZXNzIG9mIHRoZSBEU1BJIGluc3RhbmNlIHRvIGluaXRpYWxpemUuCisgKiBAcGFyYW0gbWFzdGVyQ29uZmlnIEEgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgdG8gc2V0LXVwIHRoZSBEU1BJIGluIG1hc3RlciBtb2RlLgorICogQHBhcmFtIHNyY0Nsb2NrX0h6IEEgZnJlcXVlbmN5IG9mIHRoZSBpbnB1dCBjbG9jayBvZiB0aGUgRFNQSSBtb2R1bGUuCisgKiBAcmV0dXJuIHN0YXR1cyBvZiB0aGUgb3BlcmF0aW9uLgorICovCitzdGF0dXNfdCBEU1BJX1JUT1NfSW5pdChkc3BpX3J0b3NfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHNwaV9tYXN0ZXJfY29uZmlnX3QgKm1hc3RlckNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY0Nsb2NrX0h6KTsKKworLyohCisgKiBAYnJpZWYgRGVpbml0aWFsaXplcyB0aGUgRFNQSS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRlaW5pdGlhbGl6ZXMgdGhlIERTUEkgbW9kdWxlIGFuZCB0aGUgcmVsYXRlZCBSVE9TIGNvbnRleHQuCisgKgorICogQHBhcmFtIGhhbmRsZSBUaGUgUlRPUyBEU1BJIGhhbmRsZS4KKyAqLworc3RhdHVzX3QgRFNQSV9SVE9TX0RlaW5pdChkc3BpX3J0b3NfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIHRoZSBTUEkgdHJhbnNmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgU1BJIHRyYW5zZmVyIGFjY29yZGluZyB0byB0aGUgZGF0YSBnaXZlbiBpbiB0aGUgdHJhbnNmZXIgc3RydWN0dXJlLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgVGhlIFJUT1MgRFNQSSBoYW5kbGUuCisgKiBAcGFyYW0gdHJhbnNmZXIgQSBzdHJ1Y3R1cmUgc3BlY2lmeWluZyB0aGUgdHJhbnNmZXIgcGFyYW1ldGVycy4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3N0YXR1c190IERTUElfUlRPU19UcmFuc2Zlcihkc3BpX3J0b3NfaGFuZGxlX3QgKmhhbmRsZSwgZHNwaV90cmFuc2Zlcl90ICp0cmFuc2Zlcik7CisKKy8qIQorICogQH0KKyAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisvKiEKKyAqIEB9CisgKi8KKworI2VuZGlmIC8qIF9fRlNMX0RTUElfRlJFRVJUT1NfSF9fICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9lZG1hLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9lZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1MWY0YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2VkbWEuYwpAQCAtMCwwICsxLDE3NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2VkbWEuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEVETUFfVFJBTlNGRVJfRU5BQkxFRF9NQVNLIDB4ODBVCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBHZXQgaW5zdGFuY2UgbnVtYmVyIGZvciBFRE1BLgorICoKKyAqIEBwYXJhbSBiYXNlIEVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyB1aW50MzJfdCBFRE1BX0dldEluc3RhbmNlKERNQV9UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgUHVzaCBjb250ZW50IG9mIFRDRCBzdHJ1Y3R1cmUgaW50byBoYXJkd2FyZSBUQ0QgcmVnaXN0ZXIuCisgKgorICogQHBhcmFtIGJhc2UgRURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIEVETUEgY2hhbm5lbCBudW1iZXIuCisgKiBAcGFyYW0gdGNkIFBvaW50IHRvIFRDRCBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyB2b2lkIEVETUFfSW5zdGFsbFRDRChETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCwgZWRtYV90Y2RfdCAqdGNkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBicmllZiBBcnJheSB0byBtYXAgRURNQSBpbnN0YW5jZSBudW1iZXIgdG8gYmFzZSBwb2ludGVyLiAqLworc3RhdGljIERNQV9UeXBlICpjb25zdCBzX2VkbWFCYXNlc1tdID0gRE1BX0JBU0VfUFRSUzsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKy8qISBAYnJpZWYgQXJyYXkgdG8gbWFwIEVETUEgaW5zdGFuY2UgbnVtYmVyIHRvIGNsb2NrIG5hbWUuICovCitzdGF0aWMgY29uc3QgY2xvY2tfaXBfbmFtZV90IHNfZWRtYUNsb2NrTmFtZVtdID0gRURNQV9DTE9DS1M7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKy8qISBAYnJpZWYgQXJyYXkgdG8gbWFwIEVETUEgaW5zdGFuY2UgbnVtYmVyIHRvIElSUSBudW1iZXIuICovCitzdGF0aWMgY29uc3QgSVJRbl9UeXBlIHNfZWRtYUlSUU51bWJlcltdW0ZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUxdID0gRE1BX0NITl9JUlFTOworCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIHRyYW5zZmVyIGhhbmRsZSBmb3IgZWFjaCBFRE1BIGNoYW5uZWwuICovCitzdGF0aWMgZWRtYV9oYW5kbGVfdCAqc19FRE1BSGFuZGxlW0ZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwgKiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVF07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdWludDMyX3QgRURNQV9HZXRJbnN0YW5jZShETUFfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19lZG1hQmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfZWRtYUJhc2VzW2luc3RhbmNlXSA9PSBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydChpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19lZG1hQmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworc3RhdGljIHZvaWQgRURNQV9JbnN0YWxsVENEKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBlZG1hX3RjZF90ICp0Y2QpCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKTsKKyAgICBhc3NlcnQodGNkICE9IE5VTEwpOworICAgIGFzc2VydCgoKHVpbnQzMl90KXRjZCAmIDB4MUZVKSA9PSAwKTsKKworICAgIC8qIFB1c2ggdGNkIGludG8gaGFyZHdhcmUgVENEIHJlZ2lzdGVyICovCisgICAgYmFzZS0+VENEW2NoYW5uZWxdLlNBRERSID0gdGNkLT5TQUREUjsKKyAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uU09GRiA9IHRjZC0+U09GRjsKKyAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uQVRUUiA9IHRjZC0+QVRUUjsKKyAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uTkJZVEVTX01MTk8gPSB0Y2QtPk5CWVRFUzsKKyAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uU0xBU1QgPSB0Y2QtPlNMQVNUOworICAgIGJhc2UtPlRDRFtjaGFubmVsXS5EQUREUiA9IHRjZC0+REFERFI7CisgICAgYmFzZS0+VENEW2NoYW5uZWxdLkRPRkYgPSB0Y2QtPkRPRkY7CisgICAgYmFzZS0+VENEW2NoYW5uZWxdLkNJVEVSX0VMSU5LTk8gPSB0Y2QtPkNJVEVSOworICAgIGJhc2UtPlRDRFtjaGFubmVsXS5ETEFTVF9TR0EgPSB0Y2QtPkRMQVNUX1NHQTsKKyAgICAvKiBDbGVhciBET05FIGJpdCBmaXJzdCwgb3RoZXJ3aXNlIEVTRyBjYW5ub3QgYmUgc2V0ICovCisgICAgYmFzZS0+VENEW2NoYW5uZWxdLkNTUiA9IDA7CisgICAgYmFzZS0+VENEW2NoYW5uZWxdLkNTUiA9IHRjZC0+Q1NSOworICAgIGJhc2UtPlRDRFtjaGFubmVsXS5CSVRFUl9FTElOS05PID0gdGNkLT5CSVRFUjsKK30KKwordm9pZCBFRE1BX0luaXQoRE1BX1R5cGUgKmJhc2UsIGNvbnN0IGVkbWFfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnICE9IE5VTEwpOworCisgICAgdWludDMyX3QgdG1wcmVnOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIFVuZ2F0ZSBFRE1BIHBlcmlwaHJhbCBjbG9jayAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfZWRtYUNsb2NrTmFtZVtFRE1BX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisgICAgLyogQ29uZmlndXJlIEVETUEgcGVyaXBoZXJhbCBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiAqLworICAgIHRtcHJlZyA9IGJhc2UtPkNSOworICAgIHRtcHJlZyAmPSB+KERNQV9DUl9FUkNBX01BU0sgfCBETUFfQ1JfSE9FX01BU0sgfCBETUFfQ1JfQ0xNX01BU0sgfCBETUFfQ1JfRURCR19NQVNLKTsKKyAgICB0bXByZWcgfD0gKERNQV9DUl9FUkNBKGNvbmZpZy0+ZW5hYmxlUm91bmRSb2JpbkFyYml0cmF0aW9uKSB8IERNQV9DUl9IT0UoY29uZmlnLT5lbmFibGVIYWx0T25FcnJvcikgfAorICAgICAgICAgICAgICAgRE1BX0NSX0NMTShjb25maWctPmVuYWJsZUNvbnRpbnVvdXNMaW5rTW9kZSkgfCBETUFfQ1JfRURCRyhjb25maWctPmVuYWJsZURlYnVnTW9kZSkgfCBETUFfQ1JfRU1MTSh0cnVlKSk7CisgICAgYmFzZS0+Q1IgPSB0bXByZWc7Cit9CisKK3ZvaWQgRURNQV9EZWluaXQoRE1BX1R5cGUgKmJhc2UpCit7CisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIEdhdGUgRURNQSBwZXJpcGhyYWwgY2xvY2sgKi8KKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soc19lZG1hQ2xvY2tOYW1lW0VETUFfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKwordm9pZCBFRE1BX0dldERlZmF1bHRDb25maWcoZWRtYV9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcgIT0gTlVMTCk7CisKKyAgICBjb25maWctPmVuYWJsZVJvdW5kUm9iaW5BcmJpdHJhdGlvbiA9IGZhbHNlOworICAgIGNvbmZpZy0+ZW5hYmxlSGFsdE9uRXJyb3IgPSB0cnVlOworICAgIGNvbmZpZy0+ZW5hYmxlQ29udGludW91c0xpbmtNb2RlID0gZmFsc2U7CisgICAgY29uZmlnLT5lbmFibGVEZWJ1Z01vZGUgPSBmYWxzZTsKK30KKwordm9pZCBFRE1BX1Jlc2V0Q2hhbm5lbChETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpOworCisgICAgRURNQV9UY2RSZXNldCgoZWRtYV90Y2RfdCAqKSZiYXNlLT5UQ0RbY2hhbm5lbF0pOworfQorCit2b2lkIEVETUFfU2V0VHJhbnNmZXJDb25maWcoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIGNvbnN0IGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgKmNvbmZpZywgZWRtYV90Y2RfdCAqbmV4dFRjZCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpOworICAgIGFzc2VydChjb25maWcgIT0gTlVMTCk7CisgICAgYXNzZXJ0KCgodWludDMyX3QpbmV4dFRjZCAmIDB4MUZVKSA9PSAwKTsKKworICAgIEVETUFfVGNkU2V0VHJhbnNmZXJDb25maWcoKGVkbWFfdGNkX3QgKikmYmFzZS0+VENEW2NoYW5uZWxdLCBjb25maWcsIG5leHRUY2QpOworfQorCit2b2lkIEVETUFfU2V0TWlub3JPZmZzZXRDb25maWcoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIGNvbnN0IGVkbWFfbWlub3Jfb2Zmc2V0X2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKTsKKyAgICBhc3NlcnQoY29uZmlnICE9IE5VTEwpOworCisgICAgdWludDMyX3QgdG1wcmVnOworCisgICAgdG1wcmVnID0gYmFzZS0+VENEW2NoYW5uZWxdLk5CWVRFU19NTE9GRllFUzsKKyAgICB0bXByZWcgJj0gfihETUFfTkJZVEVTX01MT0ZGWUVTX1NNTE9FX01BU0sgfCBETUFfTkJZVEVTX01MT0ZGWUVTX0RNTE9FX01BU0sgfCBETUFfTkJZVEVTX01MT0ZGWUVTX01MT0ZGX01BU0spOworICAgIHRtcHJlZyB8PQorICAgICAgICAoRE1BX05CWVRFU19NTE9GRllFU19TTUxPRShjb25maWctPmVuYWJsZVNyY01pbm9yT2Zmc2V0KSB8CisgICAgICAgICBETUFfTkJZVEVTX01MT0ZGWUVTX0RNTE9FKGNvbmZpZy0+ZW5hYmxlRGVzdE1pbm9yT2Zmc2V0KSB8IERNQV9OQllURVNfTUxPRkZZRVNfTUxPRkYoY29uZmlnLT5taW5vck9mZnNldCkpOworICAgIGJhc2UtPlRDRFtjaGFubmVsXS5OQllURVNfTUxPRkZZRVMgPSB0bXByZWc7Cit9CisKK3ZvaWQgRURNQV9TZXRDaGFubmVsTGluayhETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCwgZWRtYV9jaGFubmVsX2xpbmtfdHlwZV90IHR5cGUsIHVpbnQzMl90IGxpbmtlZENoYW5uZWwpCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKTsKKyAgICBhc3NlcnQobGlua2VkQ2hhbm5lbCA8IEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpOworCisgICAgRURNQV9UY2RTZXRDaGFubmVsTGluaygoZWRtYV90Y2RfdCAqKSZiYXNlLT5UQ0RbY2hhbm5lbF0sIHR5cGUsIGxpbmtlZENoYW5uZWwpOworfQorCit2b2lkIEVETUFfU2V0QmFuZFdpZHRoKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBlZG1hX2JhbmR3aWR0aF90IGJhbmRXaWR0aCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpOworCisgICAgYmFzZS0+VENEW2NoYW5uZWxdLkNTUiA9IChiYXNlLT5UQ0RbY2hhbm5lbF0uQ1NSICYgKH5ETUFfQ1NSX0JXQ19NQVNLKSkgfCBETUFfQ1NSX0JXQyhiYW5kV2lkdGgpOworfQorCit2b2lkIEVETUFfU2V0TW9kdWxvKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBlZG1hX21vZHVsb190IHNyY01vZHVsbywgZWRtYV9tb2R1bG9fdCBkZXN0TW9kdWxvKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICB1aW50MzJfdCB0bXByZWc7CisKKyAgICB0bXByZWcgPSBiYXNlLT5UQ0RbY2hhbm5lbF0uQVRUUiAmICh+KERNQV9BVFRSX1NNT0RfTUFTSyB8IERNQV9BVFRSX0RNT0RfTUFTSykpOworICAgIGJhc2UtPlRDRFtjaGFubmVsXS5BVFRSID0gdG1wcmVnIHwgRE1BX0FUVFJfRE1PRChkZXN0TW9kdWxvKSB8IERNQV9BVFRSX1NNT0Qoc3JjTW9kdWxvKTsKK30KKwordm9pZCBFRE1BX0VuYWJsZUNoYW5uZWxJbnRlcnJ1cHRzKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCB1aW50MzJfdCBtYXNrKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICAvKiBFbmFibGUgZXJyb3IgaW50ZXJydXB0ICovCisgICAgaWYgKG1hc2sgJiBrRURNQV9FcnJvckludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkVFSSB8PSAoMHgxVSA8PCBjaGFubmVsKTsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgTWFqb3IgaW50ZXJydXB0ICovCisgICAgaWYgKG1hc2sgJiBrRURNQV9NYWpvckludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPlRDRFtjaGFubmVsXS5DU1IgfD0gRE1BX0NTUl9JTlRNQUpPUl9NQVNLOworICAgIH0KKworICAgIC8qIEVuYWJsZSBIYWxmIG1ham9yIGludGVycnVwdCAqLworICAgIGlmIChtYXNrICYga0VETUFfSGFsZkludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPlRDRFtjaGFubmVsXS5DU1IgfD0gRE1BX0NTUl9JTlRIQUxGX01BU0s7CisgICAgfQorfQorCit2b2lkIEVETUFfRGlzYWJsZUNoYW5uZWxJbnRlcnJ1cHRzKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCB1aW50MzJfdCBtYXNrKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICAvKiBEaXNhYmxlIGVycm9yIGludGVycnVwdCAqLworICAgIGlmIChtYXNrICYga0VETUFfRXJyb3JJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5FRUkgJj0gfigweDFVIDw8IGNoYW5uZWwpOworICAgIH0KKworICAgIC8qIERpc2FibGUgTWFqb3IgaW50ZXJydXB0ICovCisgICAgaWYgKG1hc2sgJiBrRURNQV9NYWpvckludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPlRDRFtjaGFubmVsXS5DU1IgJj0gfkRNQV9DU1JfSU5UTUFKT1JfTUFTSzsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIEhhbGYgbWFqb3IgaW50ZXJydXB0ICovCisgICAgaWYgKG1hc2sgJiBrRURNQV9IYWxmSW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+VENEW2NoYW5uZWxdLkNTUiAmPSB+RE1BX0NTUl9JTlRIQUxGX01BU0s7CisgICAgfQorfQorCit2b2lkIEVETUFfVGNkUmVzZXQoZWRtYV90Y2RfdCAqdGNkKQoreworICAgIGFzc2VydCh0Y2QgIT0gTlVMTCk7CisgICAgYXNzZXJ0KCgodWludDMyX3QpdGNkICYgMHgxRlUpID09IDApOworCisgICAgLyogUmVzZXQgY2hhbm5lbCBUQ0QgKi8KKyAgICB0Y2QtPlNBRERSID0gMFU7CisgICAgdGNkLT5TT0ZGID0gMFU7CisgICAgdGNkLT5BVFRSID0gMFU7CisgICAgdGNkLT5OQllURVMgPSAwVTsKKyAgICB0Y2QtPlNMQVNUID0gMFU7CisgICAgdGNkLT5EQUREUiA9IDBVOworICAgIHRjZC0+RE9GRiA9IDBVOworICAgIHRjZC0+Q0lURVIgPSAwVTsKKyAgICB0Y2QtPkRMQVNUX1NHQSA9IDBVOworICAgIC8qIEVuYWJsZSBhdXRvIGRpc2FibGUgcmVxdWVzdCBmZWF0dXJlICovCisgICAgdGNkLT5DU1IgPSBETUFfQ1NSX0RSRVEodHJ1ZSk7CisgICAgdGNkLT5CSVRFUiA9IDBVOworfQorCit2b2lkIEVETUFfVGNkU2V0VHJhbnNmZXJDb25maWcoZWRtYV90Y2RfdCAqdGNkLCBjb25zdCBlZG1hX3RyYW5zZmVyX2NvbmZpZ190ICpjb25maWcsIGVkbWFfdGNkX3QgKm5leHRUY2QpCit7CisgICAgYXNzZXJ0KHRjZCAhPSBOVUxMKTsKKyAgICBhc3NlcnQoKCh1aW50MzJfdCl0Y2QgJiAweDFGVSkgPT0gMCk7CisgICAgYXNzZXJ0KGNvbmZpZyAhPSBOVUxMKTsKKyAgICBhc3NlcnQoKCh1aW50MzJfdCluZXh0VGNkICYgMHgxRlUpID09IDApOworCisgICAgLyogc291cmNlIGFkZHJlc3MgKi8KKyAgICB0Y2QtPlNBRERSID0gY29uZmlnLT5zcmNBZGRyOworICAgIC8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKyAgICB0Y2QtPkRBRERSID0gY29uZmlnLT5kZXN0QWRkcjsKKyAgICAvKiBTb3VyY2UgZGF0YSBhbmQgZGVzdGluYXRpb24gZGF0YSB0cmFuc2ZlciBzaXplICovCisgICAgdGNkLT5BVFRSID0gRE1BX0FUVFJfU1NJWkUoY29uZmlnLT5zcmNUcmFuc2ZlclNpemUpIHwgRE1BX0FUVFJfRFNJWkUoY29uZmlnLT5kZXN0VHJhbnNmZXJTaXplKTsKKyAgICAvKiBTb3VyY2UgYWRkcmVzcyBzaWduZWQgb2Zmc2V0ICovCisgICAgdGNkLT5TT0ZGID0gY29uZmlnLT5zcmNPZmZzZXQ7CisgICAgLyogRGVzdGluYXRpb24gYWRkcmVzcyBzaWduZWQgb2Zmc2V0ICovCisgICAgdGNkLT5ET0ZGID0gY29uZmlnLT5kZXN0T2Zmc2V0OworICAgIC8qIE1pbm9yIGJ5dGUgdHJhbnNmZXIgY291bnQgKi8KKyAgICB0Y2QtPk5CWVRFUyA9IGNvbmZpZy0+bWlub3JMb29wQnl0ZXM7CisgICAgLyogQ3VycmVudCBtYWpvciBpdGVyYXRpb24gY291bnQgKi8KKyAgICB0Y2QtPkNJVEVSID0gY29uZmlnLT5tYWpvckxvb3BDb3VudHM7CisgICAgLyogU3RhcnRpbmcgbWFqb3IgaXRlcmF0aW9uIGNvdW50ICovCisgICAgdGNkLT5CSVRFUiA9IGNvbmZpZy0+bWFqb3JMb29wQ291bnRzOworICAgIC8qIEVuYWJsZSBzY2F0dGVyL2dhdGhlciBwcm9jZXNzaW5nICovCisgICAgaWYgKG5leHRUY2QgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHRjZC0+RExBU1RfU0dBID0gKHVpbnQzMl90KW5leHRUY2Q7CisgICAgICAgIC8qCisgICAgICAgICAgICBCZWZvcmUgY2FsbCBFRE1BX1RjZFNldFRyYW5zZmVyQ29uZmlnIG9yIEVETUFfU2V0VHJhbnNmZXJDb25maWcsCisgICAgICAgICAgICB1c2VyIG11c3QgY2FsbCBFRE1BX1RjZFJlc2V0IG9yIEVETUFfUmVzZXRDaGFubmVsIHdoaWNoIHdpbGwgc2V0CisgICAgICAgICAgICBEUkVRLCBzbyBtdXN0IHVzZSAifCIgb3IgIiYiIHJhdGhlciB0aGFuICI9Ii4KKworICAgICAgICAgICAgQ2xlYXIgdGhlIERSRVEgYml0IGJlY2F1c2Ugc2NhdHRlciBnYXRoZXIgaGFzIGJlZW4gZW5hYmxlZCwgc28gdGhlCisgICAgICAgICAgICBwcmV2aW91cyB0cmFuc2ZlciBpcyBub3QgdGhlIGxhc3QgdHJhbnNmZXIsIGFuZCBjaGFubmVsIHJlcXVlc3Qgc2hvdWxkCisgICAgICAgICAgICBiZSBlbmFibGVkIGF0IHRoZSBuZXh0IHRyYW5zZmVyKHRoZSBuZXh0IFRDRCkuCisgICAgICAgICovCisgICAgICAgIHRjZC0+Q1NSID0gKHRjZC0+Q1NSIHwgRE1BX0NTUl9FU0dfTUFTSykgJiB+RE1BX0NTUl9EUkVRX01BU0s7CisgICAgfQorfQorCit2b2lkIEVETUFfVGNkU2V0TWlub3JPZmZzZXRDb25maWcoZWRtYV90Y2RfdCAqdGNkLCBjb25zdCBlZG1hX21pbm9yX29mZnNldF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydCh0Y2QgIT0gTlVMTCk7CisgICAgYXNzZXJ0KCgodWludDMyX3QpdGNkICYgMHgxRlUpID09IDApOworCisgICAgdWludDMyX3QgdG1wcmVnOworCisgICAgdG1wcmVnID0gdGNkLT5OQllURVMgJgorICAgICAgICAgICAgIH4oRE1BX05CWVRFU19NTE9GRllFU19TTUxPRV9NQVNLIHwgRE1BX05CWVRFU19NTE9GRllFU19ETUxPRV9NQVNLIHwgRE1BX05CWVRFU19NTE9GRllFU19NTE9GRl9NQVNLKTsKKyAgICB0bXByZWcgfD0KKyAgICAgICAgKERNQV9OQllURVNfTUxPRkZZRVNfU01MT0UoY29uZmlnLT5lbmFibGVTcmNNaW5vck9mZnNldCkgfAorICAgICAgICAgRE1BX05CWVRFU19NTE9GRllFU19ETUxPRShjb25maWctPmVuYWJsZURlc3RNaW5vck9mZnNldCkgfCBETUFfTkJZVEVTX01MT0ZGWUVTX01MT0ZGKGNvbmZpZy0+bWlub3JPZmZzZXQpKTsKKyAgICB0Y2QtPk5CWVRFUyA9IHRtcHJlZzsKK30KKwordm9pZCBFRE1BX1RjZFNldENoYW5uZWxMaW5rKGVkbWFfdGNkX3QgKnRjZCwgZWRtYV9jaGFubmVsX2xpbmtfdHlwZV90IHR5cGUsIHVpbnQzMl90IGxpbmtlZENoYW5uZWwpCit7CisgICAgYXNzZXJ0KHRjZCAhPSBOVUxMKTsKKyAgICBhc3NlcnQoKCh1aW50MzJfdCl0Y2QgJiAweDFGVSkgPT0gMCk7CisgICAgYXNzZXJ0KGxpbmtlZENoYW5uZWwgPCBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKTsKKworICAgIGlmICh0eXBlID09IGtFRE1BX01pbm9yTGluaykgLyogTWlub3IgbGluayBjb25maWcgKi8KKyAgICB7CisgICAgICAgIHVpbnQzMl90IHRtcHJlZzsKKworICAgICAgICAvKiBFbmFibGUgbWlub3IgbGluayAqLworICAgICAgICB0Y2QtPkNJVEVSIHw9IERNQV9DSVRFUl9FTElOS1lFU19FTElOS19NQVNLOworICAgICAgICB0Y2QtPkJJVEVSIHw9IERNQV9CSVRFUl9FTElOS1lFU19FTElOS19NQVNLOworICAgICAgICAvKiBTZXQgbGlrbmVkIGNoYW5uZWwgKi8KKyAgICAgICAgdG1wcmVnID0gdGNkLT5DSVRFUiAmICh+RE1BX0NJVEVSX0VMSU5LWUVTX0xJTktDSF9NQVNLKTsKKyAgICAgICAgdG1wcmVnIHw9IERNQV9DSVRFUl9FTElOS1lFU19MSU5LQ0gobGlua2VkQ2hhbm5lbCk7CisgICAgICAgIHRjZC0+Q0lURVIgPSB0bXByZWc7CisgICAgICAgIHRtcHJlZyA9IHRjZC0+QklURVIgJiAofkRNQV9CSVRFUl9FTElOS1lFU19MSU5LQ0hfTUFTSyk7CisgICAgICAgIHRtcHJlZyB8PSBETUFfQklURVJfRUxJTktZRVNfTElOS0NIKGxpbmtlZENoYW5uZWwpOworICAgICAgICB0Y2QtPkJJVEVSID0gdG1wcmVnOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IGtFRE1BX01ham9yTGluaykgLyogTWFqb3IgbGluayBjb25maWcgKi8KKyAgICB7CisgICAgICAgIHVpbnQzMl90IHRtcHJlZzsKKworICAgICAgICAvKiBFbmFibGUgbWFqb3IgbGluayAqLworICAgICAgICB0Y2QtPkNTUiB8PSBETUFfQ1NSX01BSk9SRUxJTktfTUFTSzsKKyAgICAgICAgLyogU2V0IG1ham9yIGxpbmtlZCBjaGFubmVsICovCisgICAgICAgIHRtcHJlZyA9IHRjZC0+Q1NSICYgKH5ETUFfQ1NSX01BSk9STElOS0NIX01BU0spOworICAgICAgICB0Y2QtPkNTUiA9IHRtcHJlZyB8IERNQV9DU1JfTUFKT1JMSU5LQ0gobGlua2VkQ2hhbm5lbCk7CisgICAgfQorICAgIGVsc2UgLyogTGluayBub25lICovCisgICAgeworICAgICAgICB0Y2QtPkNJVEVSICY9IH5ETUFfQ0lURVJfRUxJTktZRVNfRUxJTktfTUFTSzsKKyAgICAgICAgdGNkLT5CSVRFUiAmPSB+RE1BX0JJVEVSX0VMSU5LWUVTX0VMSU5LX01BU0s7CisgICAgICAgIHRjZC0+Q1NSICY9IH5ETUFfQ1NSX01BSk9SRUxJTktfTUFTSzsKKyAgICB9Cit9CisKK3ZvaWQgRURNQV9UY2RTZXRNb2R1bG8oZWRtYV90Y2RfdCAqdGNkLCBlZG1hX21vZHVsb190IHNyY01vZHVsbywgZWRtYV9tb2R1bG9fdCBkZXN0TW9kdWxvKQoreworICAgIGFzc2VydCh0Y2QgIT0gTlVMTCk7CisgICAgYXNzZXJ0KCgodWludDMyX3QpdGNkICYgMHgxRlUpID09IDApOworCisgICAgdWludDMyX3QgdG1wcmVnOworCisgICAgdG1wcmVnID0gdGNkLT5BVFRSICYgKH4oRE1BX0FUVFJfU01PRF9NQVNLIHwgRE1BX0FUVFJfRE1PRF9NQVNLKSk7CisgICAgdGNkLT5BVFRSID0gdG1wcmVnIHwgRE1BX0FUVFJfRE1PRChkZXN0TW9kdWxvKSB8IERNQV9BVFRSX1NNT0Qoc3JjTW9kdWxvKTsKK30KKwordm9pZCBFRE1BX1RjZEVuYWJsZUludGVycnVwdHMoZWRtYV90Y2RfdCAqdGNkLCB1aW50MzJfdCBtYXNrKQoreworICAgIGFzc2VydCh0Y2QgIT0gTlVMTCk7CisKKyAgICAvKiBFbmFibGUgTWFqb3IgaW50ZXJydXB0ICovCisgICAgaWYgKG1hc2sgJiBrRURNQV9NYWpvckludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIHRjZC0+Q1NSIHw9IERNQV9DU1JfSU5UTUFKT1JfTUFTSzsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgSGFsZiBtYWpvciBpbnRlcnJ1cHQgKi8KKyAgICBpZiAobWFzayAmIGtFRE1BX0hhbGZJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICB0Y2QtPkNTUiB8PSBETUFfQ1NSX0lOVEhBTEZfTUFTSzsKKyAgICB9Cit9CisKK3ZvaWQgRURNQV9UY2REaXNhYmxlSW50ZXJydXB0cyhlZG1hX3RjZF90ICp0Y2QsIHVpbnQzMl90IG1hc2spCit7CisgICAgYXNzZXJ0KHRjZCAhPSBOVUxMKTsKKworICAgIC8qIERpc2FibGUgTWFqb3IgaW50ZXJydXB0ICovCisgICAgaWYgKG1hc2sgJiBrRURNQV9NYWpvckludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIHRjZC0+Q1NSICY9IH5ETUFfQ1NSX0lOVE1BSk9SX01BU0s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBIYWxmIG1ham9yIGludGVycnVwdCAqLworICAgIGlmIChtYXNrICYga0VETUFfSGFsZkludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIHRjZC0+Q1NSICY9IH5ETUFfQ1NSX0lOVEhBTEZfTUFTSzsKKyAgICB9Cit9CisKK3VpbnQzMl90IEVETUFfR2V0UmVtYWluaW5nTWFqb3JMb29wQ291bnQoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwpCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKTsKKworICAgIHVpbnQzMl90IHJlbWFpbmluZ0NvdW50ID0gMDsKKworICAgIGlmIChETUFfQ1NSX0RPTkVfTUFTSyAmIGJhc2UtPlRDRFtjaGFubmVsXS5DU1IpCisgICAgeworICAgICAgICByZW1haW5pbmdDb3VudCA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgdW5maW5pc2hlZCBieXRlcyAqLworICAgICAgICBpZiAoYmFzZS0+VENEW2NoYW5uZWxdLkNJVEVSX0VMSU5LTk8gJiBETUFfQ0lURVJfRUxJTktOT19FTElOS19NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICByZW1haW5pbmdDb3VudCA9CisgICAgICAgICAgICAgICAgKGJhc2UtPlRDRFtjaGFubmVsXS5DSVRFUl9FTElOS1lFUyAmIERNQV9DSVRFUl9FTElOS1lFU19DSVRFUl9NQVNLKSA+PiBETUFfQ0lURVJfRUxJTktZRVNfQ0lURVJfU0hJRlQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZW1haW5pbmdDb3VudCA9CisgICAgICAgICAgICAgICAgKGJhc2UtPlRDRFtjaGFubmVsXS5DSVRFUl9FTElOS05PICYgRE1BX0NJVEVSX0VMSU5LTk9fQ0lURVJfTUFTSykgPj4gRE1BX0NJVEVSX0VMSU5LTk9fQ0lURVJfU0hJRlQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVtYWluaW5nQ291bnQ7Cit9CisKK3VpbnQzMl90IEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICB1aW50MzJfdCByZXR2YWwgPSAwOworCisgICAgLyogR2V0IERPTkUgYml0IGZsYWcgKi8KKyAgICByZXR2YWwgfD0gKChiYXNlLT5UQ0RbY2hhbm5lbF0uQ1NSICYgRE1BX0NTUl9ET05FX01BU0spID4+IERNQV9DU1JfRE9ORV9TSElGVCk7CisgICAgLyogR2V0IEVSUk9SIGJpdCBmbGFnICovCisgICAgcmV0dmFsIHw9ICgoKGJhc2UtPkVSUiA+PiBjaGFubmVsKSAmIDB4MVUpIDw8IDFVKTsKKyAgICAvKiBHZXQgSU5UIGJpdCBmbGFnICovCisgICAgcmV0dmFsIHw9ICgoKGJhc2UtPklOVCA+PiBjaGFubmVsKSAmIDB4MVUpIDw8IDJVKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgRURNQV9DbGVhckNoYW5uZWxTdGF0dXNGbGFncyhETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCwgdWludDMyX3QgbWFzaykKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpOworCisgICAgLyogQ2xlYXIgRE9ORSBiaXQgZmxhZyAqLworICAgIGlmIChtYXNrICYga0VETUFfRG9uZUZsYWcpCisgICAgeworICAgICAgICBiYXNlLT5DRE5FID0gY2hhbm5lbDsKKyAgICB9CisgICAgLyogQ2xlYXIgRVJST1IgYml0IGZsYWcgKi8KKyAgICBpZiAobWFzayAmIGtFRE1BX0Vycm9yRmxhZykKKyAgICB7CisgICAgICAgIGJhc2UtPkNFUlIgPSBjaGFubmVsOworICAgIH0KKyAgICAvKiBDbGVhciBJTlQgYml0IGZsYWcgKi8KKyAgICBpZiAobWFzayAmIGtFRE1BX0ludGVycnVwdEZsYWcpCisgICAgeworICAgICAgICBiYXNlLT5DSU5UID0gY2hhbm5lbDsKKyAgICB9Cit9CisKK3ZvaWQgRURNQV9DcmVhdGVIYW5kbGUoZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoaGFuZGxlICE9IE5VTEwpOworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICB1aW50MzJfdCBlZG1hSW5zdGFuY2U7CisgICAgdWludDMyX3QgY2hhbm5lbEluZGV4OworICAgIGVkbWFfdGNkX3QgKnRjZFJlZ3M7CisKKyAgICAvKiBaZXJvIHRoZSBoYW5kbGUgKi8KKyAgICBtZW1zZXQoaGFuZGxlLCAwLCBzaXplb2YoKmhhbmRsZSkpOworCisgICAgaGFuZGxlLT5iYXNlID0gYmFzZTsKKyAgICBoYW5kbGUtPmNoYW5uZWwgPSBjaGFubmVsOworICAgIC8qIEdldCB0aGUgRE1BIGluc3RhbmNlIG51bWJlciAqLworICAgIGVkbWFJbnN0YW5jZSA9IEVETUFfR2V0SW5zdGFuY2UoYmFzZSk7CisgICAgY2hhbm5lbEluZGV4ID0gKGVkbWFJbnN0YW5jZSAqIEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpICsgY2hhbm5lbDsKKyAgICBzX0VETUFIYW5kbGVbY2hhbm5lbEluZGV4XSA9IGhhbmRsZTsKKworICAgIC8qIEVuYWJsZSBOVklDIGludGVycnVwdCAqLworICAgIEVuYWJsZUlSUShzX2VkbWFJUlFOdW1iZXJbZWRtYUluc3RhbmNlXVtjaGFubmVsXSk7CisKKyAgICAvKgorICAgICAgIFJlc2V0IFRDRCByZWdpc3RlcnMgdG8gemVyby4gVW5saWtlIHRoZSBFRE1BX1RjZFJlc2V0KERSRVEgd2lsbCBiZSBzZXQpLAorICAgICAgIENTUiB3aWxsIGJlIDAuIEJlY2F1c2UgaW4gb3JkZXIgdG8gc3VpdCBFRE1BIGJ1c3kgY2hlY2sgbWVjaGFuaXNtIGluCisgICAgICAgRURNQV9TdWJtaXRUcmFuc2ZlciwgQ1NSIG11c3QgYmUgc2V0IDAuCisgICAgKi8KKyAgICB0Y2RSZWdzID0gKGVkbWFfdGNkX3QgKikmaGFuZGxlLT5iYXNlLT5UQ0RbaGFuZGxlLT5jaGFubmVsXTsKKyAgICB0Y2RSZWdzLT5TQUREUiA9IDA7CisgICAgdGNkUmVncy0+U09GRiA9IDA7CisgICAgdGNkUmVncy0+QVRUUiA9IDA7CisgICAgdGNkUmVncy0+TkJZVEVTID0gMDsKKyAgICB0Y2RSZWdzLT5TTEFTVCA9IDA7CisgICAgdGNkUmVncy0+REFERFIgPSAwOworICAgIHRjZFJlZ3MtPkRPRkYgPSAwOworICAgIHRjZFJlZ3MtPkNJVEVSID0gMDsKKyAgICB0Y2RSZWdzLT5ETEFTVF9TR0EgPSAwOworICAgIHRjZFJlZ3MtPkNTUiA9IDA7CisgICAgdGNkUmVncy0+QklURVIgPSAwOworfQorCit2b2lkIEVETUFfSW5zdGFsbFRDRE1lbW9yeShlZG1hX2hhbmRsZV90ICpoYW5kbGUsIGVkbWFfdGNkX3QgKnRjZFBvb2wsIHVpbnQzMl90IHRjZFNpemUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSAhPSBOVUxMKTsKKyAgICBhc3NlcnQoKCh1aW50MzJfdCl0Y2RQb29sICYgMHgxRlUpID09IDApOworCisgICAgLyogSW5pdGlhbGl6ZSB0Y2QgcXVldWUgYXR0aWJ1dGUuICovCisgICAgaGFuZGxlLT5oZWFkZXIgPSAwOworICAgIGhhbmRsZS0+dGFpbCA9IDA7CisgICAgaGFuZGxlLT50Y2RVc2VkID0gMDsKKyAgICBoYW5kbGUtPnRjZFNpemUgPSB0Y2RTaXplOworICAgIGhhbmRsZS0+ZmxhZ3MgPSAwOworICAgIGhhbmRsZS0+dGNkUG9vbCA9IHRjZFBvb2w7Cit9CisKK3ZvaWQgRURNQV9TZXRDYWxsYmFjayhlZG1hX2hhbmRsZV90ICpoYW5kbGUsIGVkbWFfY2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKnVzZXJEYXRhKQoreworICAgIGFzc2VydChoYW5kbGUgIT0gTlVMTCk7CisKKyAgICBoYW5kbGUtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgaGFuZGxlLT51c2VyRGF0YSA9IHVzZXJEYXRhOworfQorCit2b2lkIEVETUFfUHJlcGFyZVRyYW5zZmVyKGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3JjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRlc3RBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZXN0V2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJ5dGVzRWFjaFJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRyYW5zZmVyQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfdHJhbnNmZXJfdHlwZV90IHR5cGUpCit7CisgICAgYXNzZXJ0KGNvbmZpZyAhPSBOVUxMKTsKKyAgICBhc3NlcnQoc3JjQWRkciAhPSBOVUxMKTsKKyAgICBhc3NlcnQoZGVzdEFkZHIgIT0gTlVMTCk7CisgICAgYXNzZXJ0KChzcmNXaWR0aCA9PSAxVSkgfHwgKHNyY1dpZHRoID09IDJVKSB8fCAoc3JjV2lkdGggPT0gNFUpIHx8IChzcmNXaWR0aCA9PSAxNlUpIHx8IChzcmNXaWR0aCA9PSAzMlUpKTsKKyAgICBhc3NlcnQoKGRlc3RXaWR0aCA9PSAxVSkgfHwgKGRlc3RXaWR0aCA9PSAyVSkgfHwgKGRlc3RXaWR0aCA9PSA0VSkgfHwgKGRlc3RXaWR0aCA9PSAxNlUpIHx8IChkZXN0V2lkdGggPT0gMzJVKSk7CisgICAgYXNzZXJ0KHRyYW5zZmVyQnl0ZXMgJSBieXRlc0VhY2hSZXF1ZXN0ID09IDApOworCisgICAgY29uZmlnLT5kZXN0QWRkciA9ICh1aW50MzJfdClkZXN0QWRkcjsKKyAgICBjb25maWctPnNyY0FkZHIgPSAodWludDMyX3Qpc3JjQWRkcjsKKyAgICBjb25maWctPm1pbm9yTG9vcEJ5dGVzID0gYnl0ZXNFYWNoUmVxdWVzdDsKKyAgICBjb25maWctPm1ham9yTG9vcENvdW50cyA9IHRyYW5zZmVyQnl0ZXMgLyBieXRlc0VhY2hSZXF1ZXN0OworICAgIHN3aXRjaCAoc3JjV2lkdGgpCisgICAgeworICAgICAgICBjYXNlIDFVOgorICAgICAgICAgICAgY29uZmlnLT5zcmNUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUxQnl0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyVToKKyAgICAgICAgICAgIGNvbmZpZy0+c3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMkJ5dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNFU6CisgICAgICAgICAgICBjb25maWctPnNyY1RyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTRCeXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE2VToKKyAgICAgICAgICAgIGNvbmZpZy0+c3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMTZCeXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDMyVToKKyAgICAgICAgICAgIGNvbmZpZy0+c3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMzJCeXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHN3aXRjaCAoZGVzdFdpZHRoKQorICAgIHsKKyAgICAgICAgY2FzZSAxVToKKyAgICAgICAgICAgIGNvbmZpZy0+ZGVzdFRyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTFCeXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDJVOgorICAgICAgICAgICAgY29uZmlnLT5kZXN0VHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMkJ5dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNFU6CisgICAgICAgICAgICBjb25maWctPmRlc3RUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemU0Qnl0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNlU6CisgICAgICAgICAgICBjb25maWctPmRlc3RUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUxNkJ5dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzJVOgorICAgICAgICAgICAgY29uZmlnLT5kZXN0VHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMzJCeXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2Uga0VETUFfTWVtb3J5VG9NZW1vcnk6CisgICAgICAgICAgICBjb25maWctPmRlc3RPZmZzZXQgPSBkZXN0V2lkdGg7CisgICAgICAgICAgICBjb25maWctPnNyY09mZnNldCA9IHNyY1dpZHRoOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0VETUFfTWVtb3J5VG9QZXJpcGhlcmFsOgorICAgICAgICAgICAgY29uZmlnLT5kZXN0T2Zmc2V0ID0gMFU7CisgICAgICAgICAgICBjb25maWctPnNyY09mZnNldCA9IHNyY1dpZHRoOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0VETUFfUGVyaXBoZXJhbFRvTWVtb3J5OgorICAgICAgICAgICAgY29uZmlnLT5kZXN0T2Zmc2V0ID0gZGVzdFdpZHRoOworICAgICAgICAgICAgY29uZmlnLT5zcmNPZmZzZXQgPSAwVTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0dXNfdCBFRE1BX1N1Ym1pdFRyYW5zZmVyKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgZWRtYV90cmFuc2Zlcl9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChoYW5kbGUgIT0gTlVMTCk7CisgICAgYXNzZXJ0KGNvbmZpZyAhPSBOVUxMKTsKKworICAgIGVkbWFfdGNkX3QgKnRjZFJlZ3MgPSAoZWRtYV90Y2RfdCAqKSZoYW5kbGUtPmJhc2UtPlRDRFtoYW5kbGUtPmNoYW5uZWxdOworCisgICAgaWYgKGhhbmRsZS0+dGNkUG9vbCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIENoZWNrIGlmIEVETUEgaXMgYnVzeTogaWYgdGhlIGdpdmVuIGNoYW5uZWwgc3RhcnRlZCB0cmFuc2ZlciwgQ1NSIHdpbGwgYmUgbm90IHplcm8uIEJlY2F1c2UKKyAgICAgICAgICAgIGlmIGl0IGlzIHRoZSBsYXN0IHRyYW5zZmVyLCBEUkVRIHdpbGwgYmUgc2V0LiBJZiBub3QsIEVTRyB3aWxsIGJlIHNldC4gU28gaW4gb3JkZXIgdG8gc3VpdAorICAgICAgICAgICAgdGhpcyBjaGVjayBtZWNoYW5pc20sIEVETUFfQ3JlYXRIYW5kbGUgd2lsbCBjbGVhciBDU1IgcmVnaXN0ZXIuCisgICAgICAgICovCisgICAgICAgIGlmICgodGNkUmVncy0+Q1NSICE9IDApICYmICgodGNkUmVncy0+Q1NSICYgRE1BX0NTUl9ET05FX01BU0spID09IDApKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19FRE1BX0J1c3k7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFRE1BX1NldFRyYW5zZmVyQ29uZmlnKGhhbmRsZS0+YmFzZSwgaGFuZGxlLT5jaGFubmVsLCBjb25maWcsIE5VTEwpOworICAgICAgICAgICAgLyogRW5hYmxlIGF1dG8gZGlzYWJsZSByZXF1ZXN0IGZlYXR1cmUgKi8KKyAgICAgICAgICAgIGhhbmRsZS0+YmFzZS0+VENEW2hhbmRsZS0+Y2hhbm5lbF0uQ1NSIHw9IERNQV9DU1JfRFJFUV9NQVNLOworICAgICAgICAgICAgLyogRW5hYmxlIG1ham9yIGludGVycnVwdCAqLworICAgICAgICAgICAgaGFuZGxlLT5iYXNlLT5UQ0RbaGFuZGxlLT5jaGFubmVsXS5DU1IgfD0gRE1BX0NTUl9JTlRNQUpPUl9NQVNLOworCisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgLyogVXNlIHRoZSBUQ0QgcXVldWUuICovCisgICAgeworICAgICAgICB1aW50MzJfdCBwcmltYXNrOworICAgICAgICB1aW50MzJfdCBjc3I7CisgICAgICAgIGludDhfdCBjdXJyZW50VGNkOworICAgICAgICBpbnQ4X3QgcHJldmlvdXNUY2Q7CisgICAgICAgIGludDhfdCBuZXh0VGNkOworCisgICAgICAgIC8qIENoZWNrIGlmIHRjZCBwb29sIGlzIGZ1bGwuICovCisgICAgICAgIHByaW1hc2sgPSBEaXNhYmxlR2xvYmFsSVJRKCk7CisgICAgICAgIGlmIChoYW5kbGUtPnRjZFVzZWQgPj0gaGFuZGxlLT50Y2RTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBFbmFibGVHbG9iYWxJUlEocHJpbWFzayk7CisKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0VETUFfUXVldWVGdWxsOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRUY2QgPSBoYW5kbGUtPnRhaWw7CisgICAgICAgIGhhbmRsZS0+dGNkVXNlZCsrOworICAgICAgICAvKiBDYWxjdWxhdGUgaW5kZXggb2YgbmV4dCBUQ0QgKi8KKyAgICAgICAgbmV4dFRjZCA9IGN1cnJlbnRUY2QgKyAxVTsKKyAgICAgICAgaWYgKG5leHRUY2QgPT0gaGFuZGxlLT50Y2RTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBuZXh0VGNkID0gMFU7CisgICAgICAgIH0KKyAgICAgICAgLyogQWR2YW5jZSBxdWV1ZSB0YWlsIGluZGV4ICovCisgICAgICAgIGhhbmRsZS0+dGFpbCA9IG5leHRUY2Q7CisgICAgICAgIEVuYWJsZUdsb2JhbElSUShwcmltYXNrKTsKKyAgICAgICAgLyogQ2FsY3VsYXRlIGluZGV4IG9mIHByZXZpb3VzIFRDRCAqLworICAgICAgICBwcmV2aW91c1RjZCA9IGN1cnJlbnRUY2QgPyBjdXJyZW50VGNkIC0gMVUgOiBoYW5kbGUtPnRjZFNpemUgLSAxVTsKKyAgICAgICAgLyogQ29uZmlndXJlIGN1cnJlbnQgVENEIGJsb2NrLiAqLworICAgICAgICBFRE1BX1RjZFJlc2V0KCZoYW5kbGUtPnRjZFBvb2xbY3VycmVudFRjZF0pOworICAgICAgICBFRE1BX1RjZFNldFRyYW5zZmVyQ29uZmlnKCZoYW5kbGUtPnRjZFBvb2xbY3VycmVudFRjZF0sIGNvbmZpZywgTlVMTCk7CisgICAgICAgIC8qIEVuYWJsZSBtYWpvciBpbnRlcnJ1cHQgKi8KKyAgICAgICAgaGFuZGxlLT50Y2RQb29sW2N1cnJlbnRUY2RdLkNTUiB8PSBETUFfQ1NSX0lOVE1BSk9SX01BU0s7CisgICAgICAgIC8qIExpbmsgY3VycmVudCBUQ0Qgd2l0aCBuZXh0IFRDRCBmb3IgaWRlbnRpZmljYXRpb24gb2YgY3VycmVudCBUQ0QgKi8KKyAgICAgICAgaGFuZGxlLT50Y2RQb29sW2N1cnJlbnRUY2RdLkRMQVNUX1NHQSA9ICh1aW50MzJfdCkmaGFuZGxlLT50Y2RQb29sW25leHRUY2RdOworICAgICAgICAvKiBDaGFpbiBmcm9tIHByZXZpb3VzIGRlc2NyaXB0b3IgdW5sZXNzIHRjZCBwb29sIHNpemUgaXMgMSh0aGlzIGRlc2NyaXB0b3IgaXMgaXRzIG93biBwcmVkZWNlc3NvcikuICovCisgICAgICAgIGlmIChjdXJyZW50VGNkICE9IHByZXZpb3VzVGNkKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBFbmFibGUgc2NhdHRlci9nYXRoZXIgZmVhdHVyZSBpbiB0aGUgcHJldmlvdXMgVENEIGJsb2NrLiAqLworICAgICAgICAgICAgY3NyID0gKGhhbmRsZS0+dGNkUG9vbFtwcmV2aW91c1RjZF0uQ1NSIHwgRE1BX0NTUl9FU0dfTUFTSykgJiB+RE1BX0NTUl9EUkVRX01BU0s7CisgICAgICAgICAgICBoYW5kbGUtPnRjZFBvb2xbcHJldmlvdXNUY2RdLkNTUiA9IGNzcjsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgQ2hlY2sgaWYgdGhlIFRDRCBibGNvayBpbiB0aGUgcmVnaXN0ZXJzIGlzIHRoZSBwcmV2aW91cyBvbmUgKHBvaW50cyB0byBjdXJyZW50IFRDRCBibG9jaykuIEl0CisgICAgICAgICAgICAgICAgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgcHJldmlvdXMgVENEIGxpbmtlZCBoYXMgYmVlbiBsb2FkZWQgaW4gVENEIHJlZ2lzdGVyLiBJZiBzbywgaXQgbmVlZCB0bworICAgICAgICAgICAgICAgIGxpbmsgdGhlIFRDRCByZWdpc3RlciBpbiBjYXNlIGxpbmsgdGhlIGN1cnJlbnQgVENEIHdpdGggdGhlIGRlYWQgY2hhaW4gd2hlbiBUQ0QgbG9hZGluZyBvY2N1cnMKKyAgICAgICAgICAgICAgICBiZWZvcmUgbGluayB0aGUgcHJldmlvdXMgVENEIGJsb2NrLgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICh0Y2RSZWdzLT5ETEFTVF9TR0EgPT0gKHVpbnQzMl90KSZoYW5kbGUtPnRjZFBvb2xbY3VycmVudFRjZF0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRW5hYmxlIHNjYXR0ZXIvZ2F0aGVyIGFsc28gaW4gdGhlIFRDRCByZWdpc3RlcnMuICovCisgICAgICAgICAgICAgICAgY3NyID0gKHRjZFJlZ3MtPkNTUiB8IERNQV9DU1JfRVNHX01BU0spICYgfkRNQV9DU1JfRFJFUV9NQVNLOworICAgICAgICAgICAgICAgIC8qIE11c3Qgd3JpdGUgdGhlIENTUiByZWdpc3RlciBvbmUtdGltZSwgYmVjYXVzZSB0aGUgdHJhbnNmZXIgbWF5YmUgZmluaXNoZWQgYW55dGltZS4gKi8KKyAgICAgICAgICAgICAgICB0Y2RSZWdzLT5DU1IgPSBjc3I7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gY2hlY2sgdGhlIEVTRyBiaXQhCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhpcyBoYXJkd2FyZSBkZXNpZ246IGlmIERPTkUgYml0IGlzIHNldCwgdGhlIEVTRyBiaXQgY2FuIG5vdCBiZSBzZXQuIFNvIGl0IGNhbgorICAgICAgICAgICAgICAgICAgICBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBkeW5hbWljIFRDRCBsaW5rIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLiBJZiBFU0cgYml0IGlzIG5vdCBzZXQKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBETEFTVF9TR0EgaXMgbm90IHRoZSBuZXh0IFRDRCBhZGRyZXNzKGl0IG1lYW5zIHRoZSBkeW5hbWljIFRDRCBsaW5rIHN1Y2NlZWQgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IFRDRCBibG9jayBoYXMgYmVlbiBsb2FkZWQgaW50byBUQ0QgcmVnaXN0ZXJzKSwgaXQgbWVhbnMgdHJhbnNmZXIgZmluaXNoZWQKKyAgICAgICAgICAgICAgICAgICAgYW5kIFRDRCBsaW5rIG9wZXJhdGlvbiBmYWlsLCBzbyBtdXN0IGluc3RhbGwgVENEIGNvbnRlbnQgaW50byBUQ0QgcmVnaXN0ZXJzIGFuZCBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIgYWdhaW4uIEFuZCBpZiBFU0cgaXMgc2V0LCBpdCBtZWFucyB0cmFuc2ZlciBoYXMgbm90ZmluaXNoZWQsIHNvIFRDRCBkeW5hbWljCisgICAgICAgICAgICAgICAgICAgIGxpbmsgc3VjY2VlZC4KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICh0Y2RSZWdzLT5DU1IgJiBETUFfQ1NSX0VTR19NQVNLKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBUQ0QgYmxvY2sgaXMgYWxyZWFkeSBsb2FkZWQgaW4gdGhlIFRDRCByZWdpc3RlcnMuIEl0IGlzIGFub3RoZXIKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uIHdoZW4gRVNHIGJpdCBpcyBub3Qgc2V0OiBpdCBtZWFucyB0aGUgZHluYW1pYyBUQ0QgbGluayBzdWNjZWVkIGFuZCB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICBUQ0QgYmxvY2sgaGFzIGJlZW4gbG9hZGVkIGludG8gVENEIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICh0Y2RSZWdzLT5ETEFTVF9TR0EgPT0gKHVpbnQzMl90KSZoYW5kbGUtPnRjZFBvb2xbbmV4dFRjZF0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICBJZiBnbyB0byB0aGlzLCBtZWFucyB0aGUgcHJldmlvdXMgdHJhbnNmZXIgZmluaXNoZWQsIGFuZCB0aGUgRE9ORSBiaXQgaXMgc2V0LgorICAgICAgICAgICAgICAgICAgICBTbyBzaGFsbCBjb25maWd1cmUgVENEIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGNkUmVncy0+RExBU1RfU0dBICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogVGhlIGN1cnJlbnQgVENEIGJsb2NrIGhhcyBiZWVuIGxpbmtlZCBzdWNjZXNzZnVsbHkuICovCisgICAgICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICBETEFTVF9TR0EgaXMgMCBhbmQgaXQgbWVhbnMgdGhlIGZpcnN0IHN1Ym1pdCB0cmFuc2Zlciwgc28gc2hhbGwgY29uZmlndXJlCisgICAgICAgICAgICAgICAgICAgIFRDRCByZWdpc3RlcnMuCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBUaGVyZSBpcyBubyBsaXZlIGNoYWluLCBUQ0QgYmxvY2sgbmVlZCB0byBiZSBpbnN0YWxsZWQgaW4gVENEIHJlZ2lzdGVycy4gKi8KKyAgICAgICAgRURNQV9JbnN0YWxsVENEKGhhbmRsZS0+YmFzZSwgaGFuZGxlLT5jaGFubmVsLCAmaGFuZGxlLT50Y2RQb29sW2N1cnJlbnRUY2RdKTsKKyAgICAgICAgLyogRW5hYmxlIGNoYW5uZWwgcmVxdWVzdCBhZ2Fpbi4gKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBFRE1BX1RSQU5TRkVSX0VOQUJMRURfTUFTSykKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5iYXNlLT5TRVJRID0gRE1BX1NFUlFfU0VSUShoYW5kbGUtPmNoYW5uZWwpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKKyAgICB9Cit9CisKK3ZvaWQgRURNQV9TdGFydFRyYW5zZmVyKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlICE9IE5VTEwpOworCisgICAgaWYgKGhhbmRsZS0+dGNkUG9vbCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgaGFuZGxlLT5iYXNlLT5TRVJRID0gRE1BX1NFUlFfU0VSUShoYW5kbGUtPmNoYW5uZWwpOworICAgIH0KKyAgICBlbHNlIC8qIFVzZSB0aGUgVENEIHF1ZXVlLiAqLworICAgIHsKKyAgICAgICAgdWludDMyX3QgcHJpbWFzazsKKyAgICAgICAgZWRtYV90Y2RfdCAqdGNkUmVncyA9IChlZG1hX3RjZF90ICopJmhhbmRsZS0+YmFzZS0+VENEW2hhbmRsZS0+Y2hhbm5lbF07CisKKyAgICAgICAgaGFuZGxlLT5mbGFncyB8PSBFRE1BX1RSQU5TRkVSX0VOQUJMRURfTUFTSzsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lIGRlc2NyaXB0b3Igc3VibWl0dGVkIHNpbmNlIHJlc2V0IChUQ0QgaW4gcmVnaXN0ZXJzIGlzIHZhbGlkKSAqLworICAgICAgICBpZiAodGNkUmVncy0+RExBU1RfU0dBICE9IDBVKQorICAgICAgICB7CisgICAgICAgICAgICBwcmltYXNrID0gRGlzYWJsZUdsb2JhbElSUSgpOworICAgICAgICAgICAgLyogQ2hlY2sgaWYgY2hhbm5lbCByZXF1ZXN0IGlzIGFjdHVhbGx5IGRpc2FibGUuICovCisgICAgICAgICAgICBpZiAoKGhhbmRsZS0+YmFzZS0+RVJRICYgKDFVIDw8IGhhbmRsZS0+Y2hhbm5lbCkpID09IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHRyYW5zZmVyIGlzIHBhdXNlZC4gKi8KKyAgICAgICAgICAgICAgICBpZiAoKCEodGNkUmVncy0+Q1NSICYgRE1BX0NTUl9ET05FX01BU0spKSB8fCAodGNkUmVncy0+Q1NSICYgRE1BX0NTUl9FU0dfTUFTSykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgUmUtZW5hYmxlIGNoYW5uZWwgcmVxdWVzdCBtdXN0IGJlIGFzIHNvb24gYXMgcG9zc2libGUsIHNvIG11c3QgcHV0IGl0IGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRpY2FsIHNlY3Rpb24gdG8gYXZvaWQgdGFzayBzd2l0Y2hpbmcgb3IgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KKyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5iYXNlLT5TRVJRID0gRE1BX1NFUlFfU0VSUShoYW5kbGUtPmNoYW5uZWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEVuYWJsZUdsb2JhbElSUShwcmltYXNrKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBFRE1BX1N0b3BUcmFuc2ZlcihlZG1hX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSAhPSBOVUxMKTsKKworICAgIGhhbmRsZS0+ZmxhZ3MgJj0gKH5FRE1BX1RSQU5TRkVSX0VOQUJMRURfTUFTSyk7CisgICAgaGFuZGxlLT5iYXNlLT5DRVJRID0gRE1BX0NFUlFfQ0VSUShoYW5kbGUtPmNoYW5uZWwpOworfQorCit2b2lkIEVETUFfQWJvcnRUcmFuc2ZlcihlZG1hX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgaGFuZGxlLT5iYXNlLT5DRVJRID0gRE1BX0NFUlFfQ0VSUShoYW5kbGUtPmNoYW5uZWwpOworICAgIC8qCisgICAgICAgIENsZWFyIENTUiB0byByZWxlYXNlIGNoYW5uZWwuIEJlY2F1c2UgaWYgdGhlIGdpdmVuIGNoYW5uZWwgc3RhcnRlZCB0cmFuc2ZlciwKKyAgICAgICAgQ1NSIHdpbGwgYmUgbm90IHplcm8uIEJlY2F1c2UgaWYgaXQgaXMgdGhlIGxhc3QgdHJhbnNmZXIsIERSRVEgd2lsbCBiZSBzZXQuCisgICAgICAgIElmIG5vdCwgRVNHIHdpbGwgYmUgc2V0LgorICAgICovCisgICAgaGFuZGxlLT5iYXNlLT5UQ0RbaGFuZGxlLT5jaGFubmVsXS5DU1IgPSAwOworICAgIC8qIENhbmNlbCBhbGwgbmV4dCBUQ0QgdHJhbnNmZXIuICovCisgICAgaGFuZGxlLT5iYXNlLT5UQ0RbaGFuZGxlLT5jaGFubmVsXS5ETEFTVF9TR0EgPSAwOworfQorCit2b2lkIEVETUFfSGFuZGxlSVJRKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlICE9IE5VTEwpOworCisgICAgLyogQ2xlYXIgRURNQSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGhhbmRsZS0+YmFzZS0+Q0lOVCA9IGhhbmRsZS0+Y2hhbm5lbDsKKyAgICBpZiAoKGhhbmRsZS0+dGNkUG9vbCA9PSBOVUxMKSAmJiAoaGFuZGxlLT5jYWxsYmFjayAhPSBOVUxMKSkKKyAgICB7CisgICAgICAgIChoYW5kbGUtPmNhbGxiYWNrKShoYW5kbGUsIGhhbmRsZS0+dXNlckRhdGEsIHRydWUsIDApOworICAgIH0KKyAgICBlbHNlIC8qIFVzZSB0aGUgVENEIHF1ZXVlLiBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkZXNjcmlwdGlvbnMgaW4gdGhlIGVETUEgaGVhZGVyIGZpbGUgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uLiAqLworICAgIHsKKyAgICAgICAgdWludDMyX3Qgc2dhID0gaGFuZGxlLT5iYXNlLT5UQ0RbaGFuZGxlLT5jaGFubmVsXS5ETEFTVF9TR0E7CisgICAgICAgIHVpbnQzMl90IHNnYV9pbmRleDsKKyAgICAgICAgaW50MzJfdCB0Y2RzX2RvbmU7CisgICAgICAgIHVpbnQ4X3QgbmV3X2hlYWRlcjsKKyAgICAgICAgYm9vbCB0cmFuc2Zlcl9kb25lOworCisgICAgICAgIC8qIENoZWNrIGlmIHRyYW5zZmVyIGlzIGFscmVhZHkgZmluaXNoZWQuICovCisgICAgICAgIHRyYW5zZmVyX2RvbmUgPSAoKGhhbmRsZS0+YmFzZS0+VENEW2hhbmRsZS0+Y2hhbm5lbF0uQ1NSICYgRE1BX0NTUl9ET05FX01BU0spICE9IDApOworICAgICAgICAvKiBHZXQgdGhlIG9mZnNldCBvZiB0aGUgbmV4dCB0cmFuc2ZlciBUQ0QgYmxjb2tzIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBlRE1BIGVuZ2luZS4gKi8KKyAgICAgICAgc2dhIC09ICh1aW50MzJfdCloYW5kbGUtPnRjZFBvb2w7CisgICAgICAgIC8qIEdldCB0aGUgaW5kZXggb2YgdGhlIG5leHQgdHJhbnNmZXIgVENEIGJsY29rcyB0byBiZSBsb2FkZWQgaW50byB0aGUgZURNQSBlbmdpbmUuICovCisgICAgICAgIHNnYV9pbmRleCA9IHNnYSAvIHNpemVvZihlZG1hX3RjZF90KTsKKyAgICAgICAgLyogQWRqdXN0IGhlYWRlciBwb3NpdGlvbnMuICovCisgICAgICAgIGlmICh0cmFuc2Zlcl9kb25lKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBOZXcgaGVhZGVyIHNoYWxsIHBvaW50IHRvIHRoZSBuZXh0IFRDRCB0byBiZSBsb2FkZWQgKGN1cnJlbnQgb25lIGlzIGFscmVhZHkgZmluaXNoZWQpICovCisgICAgICAgICAgICBuZXdfaGVhZGVyID0gc2dhX2luZGV4OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogTmV3IGhlYWRlciBzaGFsbCBwb2ludCB0byB0aGlzIGRlc2NyaXB0b3IgY3VycmVudGx5IGxvYWRlZCAobm90IGZpbmlzaGVkIHlldCkgKi8KKyAgICAgICAgICAgIG5ld19oZWFkZXIgPSBzZ2FfaW5kZXggPyBzZ2FfaW5kZXggLSAxVSA6IGhhbmRsZS0+dGNkU2l6ZSAtIDFVOworICAgICAgICB9CisgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGZpbmlzaGVkIFRDRHMgKi8KKyAgICAgICAgaWYgKG5ld19oZWFkZXIgPT0gaGFuZGxlLT5oZWFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChoYW5kbGUtPnRjZFVzZWQgPT0gaGFuZGxlLT50Y2RTaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRjZHNfZG9uZSA9IGhhbmRsZS0+dGNkVXNlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBObyBUQ0QgaW4gdGhlIG1lbW9yeSBhcmUgZ29pbmcgdG8gYmUgbG9hZGVkIG9yIGludGVybmFsIGVycm9yIG9jY3Vycy4gKi8KKyAgICAgICAgICAgICAgICB0Y2RzX2RvbmUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdGNkc19kb25lID0gbmV3X2hlYWRlciAtIGhhbmRsZS0+aGVhZGVyOworICAgICAgICAgICAgaWYgKHRjZHNfZG9uZSA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGNkc19kb25lICs9IGhhbmRsZS0+dGNkU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBBZHZhbmNlIGhlYWRlciB3aGljaCBwb2ludHMgdG8gdGhlIFRDRCB0byBiZSBsb2FkZWQgaW50byB0aGUgZURNQSBlbmdpbmUgZnJvbSBtZW1vcnkuICovCisgICAgICAgIGhhbmRsZS0+aGVhZGVyID0gbmV3X2hlYWRlcjsKKyAgICAgICAgLyogUmVsZWFzZSBUQ0QgYmxvY2tzLiB0Y2RVc2VkIGlzIHRoZSBUQ0QgbnVtYmVyIHdoaWNoIGNhbiBiZSB1c2VkL2xvYWRlZCBpbiB0aGUgbWVtb3J5IHBvb2wuICovCisgICAgICAgIGhhbmRsZS0+dGNkVXNlZCAtPSB0Y2RzX2RvbmU7CisgICAgICAgIC8qIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbi4gKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIChoYW5kbGUtPmNhbGxiYWNrKShoYW5kbGUsIGhhbmRsZS0+dXNlckRhdGEsIHRyYW5zZmVyX2RvbmUsIHRjZHNfZG9uZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qIDggY2hhbm5lbHMgKFNoYXJlZCk6IGtsMjggKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpICYmIEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwgPT0gOFUKKwordm9pZCBETUEwXzA0X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzBdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA0VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs0XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMTVfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMV0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDVVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzVdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8yNl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgNlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbNl0pOworICAgIH0KK30KKwordm9pZCBETUEwXzM3X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDNVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzNdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA3VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs3XSk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChETUExKQordm9pZCBETUExXzA0X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzhdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCA0VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxMl0pOworICAgIH0KK30KKwordm9pZCBETUExXzE1X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzldKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCA1VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxM10pOworICAgIH0KK30KKwordm9pZCBETUExXzI2X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDJVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzEwXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgNlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTRdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMV8zN19Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCAzVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxMV0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDdVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE1XSk7CisgICAgfQorfQorI2VuZGlmCisjZW5kaWYgLyogOCBjaGFubmVscyAoU2hhcmVkKSAqLworCisvKiAxNiBjaGFubmVscyAoU2hhcmVkKTogSzMySDg0NFAgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpICYmIEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwgPT0gMTZVCisKK3ZvaWQgRE1BMF8wOF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAwVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVswXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgOFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbOF0pOworICAgIH0KK30KKwordm9pZCBETUEwXzE5X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzFdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA5VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs5XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMjEwX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDJVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzJdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTBdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8zMTFfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgM1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbM10pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDExVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxMV0pOworICAgIH0KK30KKwordm9pZCBETUEwXzQxMl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA0VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs0XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTJVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzEyXSk7CisgICAgfQorfQorCit2b2lkIERNQTBfNTEzX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDVVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzVdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxM1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTNdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF82MTRfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgNlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbNl0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDE0VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxNF0pOworICAgIH0KK30KKwordm9pZCBETUEwXzcxNV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA3VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs3XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTVVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE1XSk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChETUExKQordm9pZCBETUExXzA4X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE2XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgOFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjRdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMV8xOV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCAxVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxN10pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDlVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI1XSk7CisgICAgfQorfQorCit2b2lkIERNQTFfMjEwX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDJVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE4XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgMTBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI2XSk7CisgICAgfQorfQorCit2b2lkIERNQTFfMzExX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDNVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE5XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgMTFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI3XSk7CisgICAgfQorfQorCit2b2lkIERNQTFfNDEyX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIwXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgMTJVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI4XSk7CisgICAgfQorfQorCit2b2lkIERNQTFfNTEzX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDVVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIxXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgMTNVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI5XSk7CisgICAgfQorfQorCit2b2lkIERNQTFfNjE0X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDZVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIyXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgMTRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzMwXSk7CisgICAgfQorfQorCit2b2lkIERNQTFfNzE1X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDdVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIzXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgMTVVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzMxXSk7CisgICAgfQorfQorI2VuZGlmCisjZW5kaWYgLyogMTYgY2hhbm5lbHMgKFNoYXJlZCkgKi8KKworLyogMzIgY2hhbm5lbHMgKFNoYXJlZCk6IGs4MCAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCkgJiYgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCA9PSAzMlUKKwordm9pZCBETUEwX0RNQTE2X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzBdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxNlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTZdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMV9ETUExN19Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTdVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE3XSk7CisgICAgfQorfQorCit2b2lkIERNQTJfRE1BMThfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMl0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDE4VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxOF0pOworICAgIH0KK30KKwordm9pZCBETUEzX0RNQTE5X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDNVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzNdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxOVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTldKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BNF9ETUEyMF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA0VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs0XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIwXSk7CisgICAgfQorfQorCit2b2lkIERNQTVfRE1BMjFfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgNVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbNV0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDIxVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyMV0pOworICAgIH0KK30KKwordm9pZCBETUE2X0RNQTIyX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDZVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzZdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyMlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjJdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BN19ETUEyM19Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA3VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs3XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjNVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIzXSk7CisgICAgfQorfQorCit2b2lkIERNQThfRE1BMjRfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgOFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbOF0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDI0VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyNF0pOworICAgIH0KK30KKwordm9pZCBETUE5X0RNQTI1X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDlVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzldKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyNVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjVdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMTBfRE1BMjZfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzEwXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjZVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI2XSk7CisgICAgfQorfQorCit2b2lkIERNQTExX0RNQTI3X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDExVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxMV0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDI3VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyN10pOworICAgIH0KK30KKwordm9pZCBETUExMl9ETUEyOF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxMlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTJdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyOFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjhdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMTNfRE1BMjlfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTNVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzEzXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjlVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI5XSk7CisgICAgfQorfQorCit2b2lkIERNQTE0X0RNQTMwX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDE0VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxNF0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDMwVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVszMF0pOworICAgIH0KK30KKwordm9pZCBETUExNV9ETUEzMV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxNVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTVdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAzMVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMzFdKTsKKyAgICB9Cit9CisjZW5kaWYgLyogMzIgY2hhbm5lbHMgKFNoYXJlZCkgKi8KKworLyogMzIgY2hhbm5lbHMgKFNoYXJlZCk6IE1DSU1YN1U1X000ICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKSAmJiBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMID09IDMyVQorCit2b2lkIERNQTBfMF80X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzBdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA0VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs0XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMV81X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzFdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA1VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs1XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMl82X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDJVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzJdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA2VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs2XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfM183X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDNVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzNdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA3VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs3XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfOF8xMl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA4VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs4XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTJVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzEyXSk7CisgICAgfQorfQorCit2b2lkIERNQTBfOV8xM19Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA5VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs5XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTNVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzEzXSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMTBfMTRfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzEwXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE0XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMTFfMTVfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzExXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTVVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE1XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMTZfMjBfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTZVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE2XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIwXSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMTdfMjFfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTdVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE3XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIxXSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMThfMjJfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMThVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE4XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjJVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIyXSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMTlfMjNfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTlVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE5XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjNVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIzXSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMjRfMjhfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI0XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjhVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI4XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMjVfMjlfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjVVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI1XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjlVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI5XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMjZfMzBfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjZVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI2XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMzBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzMwXSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMjdfMzFfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjdVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI3XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMzFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzMxXSk7CisgICAgfQorfQorI2VuZGlmIC8qIDMyIGNoYW5uZWxzIChTaGFyZWQpOiBNQ0lNWDdVNSAqLworCisvKiA0IGNoYW5uZWxzIChObyBTaGFyZWQpOiBrdjEwICAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCkgJiYgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCA+IDAKKwordm9pZCBETUEwX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMF0pOworfQorCit2b2lkIERNQTFfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxXSk7Cit9CisKK3ZvaWQgRE1BMl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzJdKTsKK30KKwordm9pZCBETUEzX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbM10pOworfQorCisvKiA4IGNoYW5uZWxzIChObyBTaGFyZWQpICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKSAmJiBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMID4gNFUKKwordm9pZCBETUE0X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbNF0pOworfQorCit2b2lkIERNQTVfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs1XSk7Cit9CisKK3ZvaWQgRE1BNl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzZdKTsKK30KKwordm9pZCBETUE3X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbN10pOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwgPT0gOCAqLworCisvKiAxNiBjaGFubmVscyAoTm8gU2hhcmVkKSAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCkgJiYgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCA+IDhVCisKK3ZvaWQgRE1BOF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzhdKTsKK30KKwordm9pZCBETUE5X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbOV0pOworfQorCit2b2lkIERNQTEwX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTBdKTsKK30KKwordm9pZCBETUExMV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzExXSk7Cit9CisKK3ZvaWQgRE1BMTJfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxMl0pOworfQorCit2b2lkIERNQTEzX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTNdKTsKK30KKwordm9pZCBETUExNF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE0XSk7Cit9CisKK3ZvaWQgRE1BMTVfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxNV0pOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwgPT0gMTYgKi8KKworLyogMzIgY2hhbm5lbHMgKE5vIFNoYXJlZCkgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpICYmIEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwgPiAxNlUKKwordm9pZCBETUExNl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE2XSk7Cit9CisKK3ZvaWQgRE1BMTdfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxN10pOworfQorCit2b2lkIERNQTE4X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMThdKTsKK30KKwordm9pZCBETUExOV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE5XSk7Cit9CisKK3ZvaWQgRE1BMjBfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyMF0pOworfQorCit2b2lkIERNQTIxX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjFdKTsKK30KKwordm9pZCBETUEyMl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIyXSk7Cit9CisKK3ZvaWQgRE1BMjNfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyM10pOworfQorCit2b2lkIERNQTI0X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjRdKTsKK30KKwordm9pZCBETUEyNV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI1XSk7Cit9CisKK3ZvaWQgRE1BMjZfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyNl0pOworfQorCit2b2lkIERNQTI3X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjddKTsKK30KKwordm9pZCBETUEyOF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI4XSk7Cit9CisKK3ZvaWQgRE1BMjlfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyOV0pOworfQorCit2b2lkIERNQTMwX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMzBdKTsKK30KKwordm9pZCBETUEzMV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzMxXSk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCA9PSAzMiAqLworCisjZW5kaWYgLyogNC84LzE2LzMyIGNoYW5uZWxzIChObyBTaGFyZWQpICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZWRtYS5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZWRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NzYyMmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9lZG1hLmgKQEAgLTAsMCArMSw5MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GU0xfRURNQV9IXworI2RlZmluZSBfRlNMX0VETUFfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBlZG1hCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgZURNQSBkcml2ZXIgdmVyc2lvbiAqLworI2RlZmluZSBGU0xfRURNQV9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDEsIDEpKSAvKiE8IFZlcnNpb24gMi4xLjEuICovCisvKkB9Ki8KKworLyohIEBicmllZiBDb21wdXRlIHRoZSBvZmZzZXQgdW5pdCBmcm9tIERDSFBSSTMgKi8KKyNkZWZpbmUgRE1BX0RDSFBSSV9JTkRFWChjaGFubmVsKSAoKChjaGFubmVsKSAmIH4weDAzVSkgfCAoMyAtICgoY2hhbm5lbCkmMHgwM1UpKSkKKworLyohIEBicmllZiBHZXQgdGhlIHBvaW50ZXIgb2YgRENIUFJJbiAqLworI2RlZmluZSBETUFfRENIUFJJbihiYXNlLCBjaGFubmVsKSAoKHZvbGF0aWxlIHVpbnQ4X3QgKikmKGJhc2UtPkRDSFBSSTMpKVtETUFfRENIUFJJX0lOREVYKGNoYW5uZWwpXQorCisvKiEgQGJyaWVmIGVETUEgdHJhbnNmZXIgY29uZmlndXJhdGlvbiAqLwordHlwZWRlZiBlbnVtIF9lZG1hX3RyYW5zZmVyX3NpemUKK3sKKyAgICBrRURNQV9UcmFuc2ZlclNpemUxQnl0ZXMgPSAweDBVLCAgLyohPCBTb3VyY2UvRGVzdGluYXRpb24gZGF0YSB0cmFuc2ZlciBzaXplIGlzIDEgYnl0ZSBldmVyeSB0aW1lICovCisgICAga0VETUFfVHJhbnNmZXJTaXplMkJ5dGVzID0gMHgxVSwgIC8qITwgU291cmNlL0Rlc3RpbmF0aW9uIGRhdGEgdHJhbnNmZXIgc2l6ZSBpcyAyIGJ5dGVzIGV2ZXJ5IHRpbWUgKi8KKyAgICBrRURNQV9UcmFuc2ZlclNpemU0Qnl0ZXMgPSAweDJVLCAgLyohPCBTb3VyY2UvRGVzdGluYXRpb24gZGF0YSB0cmFuc2ZlciBzaXplIGlzIDQgYnl0ZXMgZXZlcnkgdGltZSAqLworICAgIGtFRE1BX1RyYW5zZmVyU2l6ZTE2Qnl0ZXMgPSAweDRVLCAvKiE8IFNvdXJjZS9EZXN0aW5hdGlvbiBkYXRhIHRyYW5zZmVyIHNpemUgaXMgMTYgYnl0ZXMgZXZlcnkgdGltZSAqLworICAgIGtFRE1BX1RyYW5zZmVyU2l6ZTMyQnl0ZXMgPSAweDVVLCAvKiE8IFNvdXJjZS9EZXN0aW5hdGlvbiBkYXRhIHRyYW5zZmVyIHNpemUgaXMgMzIgYnl0ZXMgZXZlcnkgdGltZSAqLworfSBlZG1hX3RyYW5zZmVyX3NpemVfdDsKKworLyohIEBicmllZiBlRE1BIG1vZHVsbyBjb25maWd1cmF0aW9uICovCit0eXBlZGVmIGVudW0gX2VkbWFfbW9kdWxvCit7CisgICAga0VETUFfTW9kdWxvRGlzYWJsZSA9IDB4MFUsIC8qITwgRGlzYWJsZSBtb2R1bG8gKi8KKyAgICBrRURNQV9Nb2R1bG8yYnl0ZXMsICAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAyIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzRieXRlcywgICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDQgYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvOGJ5dGVzLCAgICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgOCBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8xNmJ5dGVzLCAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAxNiBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8zMmJ5dGVzLCAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAzMiBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG82NGJ5dGVzLCAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyA2NCBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8xMjhieXRlcywgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAxMjggYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMjU2Ynl0ZXMsICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMjU2IGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzUxMmJ5dGVzLCAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDUxMiBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8xS2J5dGVzLCAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAxIEsgYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMktieXRlcywgICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMiBLIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzRLYnl0ZXMsICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDQgSyBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG84S2J5dGVzLCAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyA4IEsgYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMTZLYnl0ZXMsICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMTYgSyBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8zMktieXRlcywgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAzMiBLIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzY0S2J5dGVzLCAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDY0IEsgYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMTI4S2J5dGVzLCAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMTI4IEsgYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMjU2S2J5dGVzLCAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMjU2IEsgYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvNTEyS2J5dGVzLCAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgNTEyIEsgYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMU1ieXRlcywgICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMSBNIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzJNYnl0ZXMsICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDIgTSBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG80TWJ5dGVzLCAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyA0IE0gYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvOE1ieXRlcywgICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgOCBNIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzE2TWJ5dGVzLCAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDE2IE0gYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMzJNYnl0ZXMsICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMzIgTSBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG82NE1ieXRlcywgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyA2NCBNIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzEyOE1ieXRlcywgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDEyOCBNIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzI1Nk1ieXRlcywgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDI1NiBNIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzUxMk1ieXRlcywgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDUxMiBNIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzFHYnl0ZXMsICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDEgRyBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8yR2J5dGVzLCAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAyIEcgYnl0ZXMuICovCit9IGVkbWFfbW9kdWxvX3Q7CisKKy8qISBAYnJpZWYgQmFuZHdpZHRoIGNvbnRyb2wgKi8KK3R5cGVkZWYgZW51bSBfZWRtYV9iYW5kd2lkdGgKK3sKKyAgICBrRURNQV9CYW5kd2lkdGhTdGFsbE5vbmUgPSAweDBVLCAgIC8qITwgTm8gZURNQSBlbmdpbmUgc3RhbGxzLiAqLworICAgIGtFRE1BX0JhbmR3aWR0aFN0YWxsNEN5Y2xlID0gMHgyVSwgLyohPCBlRE1BIGVuZ2luZSBzdGFsbHMgZm9yIDQgY3ljbGVzIGFmdGVyIGVhY2ggcmVhZC93cml0ZS4gKi8KKyAgICBrRURNQV9CYW5kd2lkdGhTdGFsbDhDeWNsZSA9IDB4M1UsIC8qITwgZURNQSBlbmdpbmUgc3RhbGxzIGZvciA4IGN5Y2xlcyBhZnRlciBlYWNoIHJlYWQvd3JpdGUuICovCit9IGVkbWFfYmFuZHdpZHRoX3Q7CisKKy8qISBAYnJpZWYgQ2hhbm5lbCBsaW5rIHR5cGUgKi8KK3R5cGVkZWYgZW51bSBfZWRtYV9jaGFubmVsX2xpbmtfdHlwZQoreworICAgIGtFRE1BX0xpbmtOb25lID0gMHgwVSwgLyohPCBObyBjaGFubmVsIGxpbmsgICovCisgICAga0VETUFfTWlub3JMaW5rLCAgICAgICAvKiE8IENoYW5uZWwgbGluayBhZnRlciBlYWNoIG1pbm9yIGxvb3AgKi8KKyAgICBrRURNQV9NYWpvckxpbmssICAgICAgIC8qITwgQ2hhbm5lbCBsaW5rIHdoaWxlIG1ham9yIGxvb3AgY291bnQgZXhoYXVzdGVkICovCit9IGVkbWFfY2hhbm5lbF9saW5rX3R5cGVfdDsKKworLyohQGJyaWVmIGVETUEgY2hhbm5lbCBzdGF0dXMgZmxhZ3MuICovCitlbnVtIF9lZG1hX2NoYW5uZWxfc3RhdHVzX2ZsYWdzCit7CisgICAga0VETUFfRG9uZUZsYWcgPSAweDFVLCAgICAgIC8qITwgRE9ORSBmbGFnLCBzZXQgd2hpbGUgdHJhbnNmZXIgZmluaXNoZWQsIENJVEVSIHZhbHVlIGV4aGF1c3RlZCovCisgICAga0VETUFfRXJyb3JGbGFnID0gMHgyVSwgICAgIC8qITwgZURNQSBlcnJvciBmbGFnLCBhbiBlcnJvciBvY2N1cnJlZCBpbiBhIHRyYW5zZmVyICovCisgICAga0VETUFfSW50ZXJydXB0RmxhZyA9IDB4NFUsIC8qITwgZURNQSBpbnRlcnJ1cHQgZmxhZywgc2V0IHdoaWxlIGFuIGludGVycnVwdCBvY2N1cnJlZCBvZiB0aGlzIGNoYW5uZWwgKi8KK307CisKKy8qISBAYnJpZWYgZURNQSBjaGFubmVsIGVycm9yIHN0YXR1cyBmbGFncy4gKi8KK2VudW0gX2VkbWFfZXJyb3Jfc3RhdHVzX2ZsYWdzCit7CisgICAga0VETUFfRGVzdGluYXRpb25CdXNFcnJvckZsYWcgPSBETUFfRVNfREJFX01BU0ssICAgIC8qITwgQnVzIGVycm9yIG9uIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKyAgICBrRURNQV9Tb3VyY2VCdXNFcnJvckZsYWcgPSBETUFfRVNfU0JFX01BU0ssICAgICAgICAgLyohPCBCdXMgZXJyb3Igb24gdGhlIHNvdXJjZSBhZGRyZXNzICovCisgICAga0VETUFfU2NhdHRlckdhdGhlckVycm9yRmxhZyA9IERNQV9FU19TR0VfTUFTSywgICAgIC8qITwgRXJyb3Igb24gdGhlIFNjYXR0ZXIvR2F0aGVyIGFkZHJlc3MsIG5vdCAzMmJ5dGUgYWxpZ25lZC4gKi8KKyAgICBrRURNQV9OYnl0ZXNFcnJvckZsYWcgPSBETUFfRVNfTkNFX01BU0ssICAgICAgICAgICAgLyohPCBOQllURVMvQ0lURVIgY29uZmlndXJhdGlvbiBlcnJvciAqLworICAgIGtFRE1BX0Rlc3RpbmF0aW9uT2Zmc2V0RXJyb3JGbGFnID0gRE1BX0VTX0RPRV9NQVNLLCAvKiE8IERlc3RpbmF0aW9uIG9mZnNldCBub3QgYWxpZ25lZCB3aXRoIGRlc3RpbmF0aW9uIHNpemUgKi8KKyAgICBrRURNQV9EZXN0aW5hdGlvbkFkZHJlc3NFcnJvckZsYWcgPSBETUFfRVNfREFFX01BU0ssIC8qITwgRGVzdGluYXRpb24gYWRkcmVzcyBub3QgYWxpZ25lZCB3aXRoIGRlc3RpbmF0aW9uIHNpemUgKi8KKyAgICBrRURNQV9Tb3VyY2VPZmZzZXRFcnJvckZsYWcgPSBETUFfRVNfU09FX01BU0ssICAgICAgIC8qITwgU291cmNlIG9mZnNldCBub3QgYWxpZ25lZCB3aXRoIHNvdXJjZSBzaXplICovCisgICAga0VETUFfU291cmNlQWRkcmVzc0Vycm9yRmxhZyA9IERNQV9FU19TQUVfTUFTSywgICAgICAvKiE8IFNvdXJjZSBhZGRyZXNzIG5vdCBhbGlnbmVkIHdpdGggc291cmNlIHNpemUqLworICAgIGtFRE1BX0Vycm9yQ2hhbm5lbEZsYWcgPSBETUFfRVNfRVJSQ0hOX01BU0ssICAgICAgICAgLyohPCBFcnJvciBjaGFubmVsIG51bWJlciBvZiB0aGUgY2FuY2VsbGVkIGNoYW5uZWwgbnVtYmVyICovCisgICAga0VETUFfQ2hhbm5lbFByaW9yaXR5RXJyb3JGbGFnID0gRE1BX0VTX0NQRV9NQVNLLCAgICAvKiE8IENoYW5uZWwgcHJpb3JpdHkgaXMgbm90IHVuaXF1ZS4gKi8KKyAgICBrRURNQV9UcmFuc2ZlckNhbmNlbGVkRmxhZyA9IERNQV9FU19FQ1hfTUFTSywgICAgICAgIC8qITwgVHJhbnNmZXIgY2FuY2VsbGVkICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9FRE1BX0NIQU5ORUxfR1JPVVBfQ09VTlQpICYmIEZTTF9GRUFUVVJFX0VETUFfQ0hBTk5FTF9HUk9VUF9DT1VOVCA+IDEKKyAgICBrRURNQV9Hcm91cFByaW9yaXR5RXJyb3JGbGFnID0gRE1BX0VTX0dQRV9NQVNLLCAvKiE8IEdyb3VwIHByaW9yaXR5IGlzIG5vdCB1bmlxdWUuICovCisjZW5kaWYKKyAgICBrRURNQV9WYWxpZEZsYWcgPSBETUFfRVNfVkxEX01BU0ssIC8qITwgTm8gZXJyb3Igb2NjdXJyZWQsIHRoaXMgYml0IGlzIDAuIE90aGVyd2lzZSwgaXQgaXMgMS4gKi8KK307CisKKy8qISBAYnJpZWYgZURNQSBpbnRlcnJ1cHQgc291cmNlICovCit0eXBlZGVmIGVudW0gX2VkbWFfaW50ZXJydXB0X2VuYWJsZQoreworICAgIGtFRE1BX0Vycm9ySW50ZXJydXB0RW5hYmxlID0gMHgxVSwgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgd2hpbGUgY2hhbm5lbCBlcnJvciBvY2N1cnMuICovCisgICAga0VETUFfTWFqb3JJbnRlcnJ1cHRFbmFibGUgPSBETUFfQ1NSX0lOVE1BSk9SX01BU0ssIC8qITwgRW5hYmxlIGludGVycnVwdCB3aGlsZSBtYWpvciBjb3VudCBleGhhdXN0ZWQuICovCisgICAga0VETUFfSGFsZkludGVycnVwdEVuYWJsZSA9IERNQV9DU1JfSU5USEFMRl9NQVNLLCAgIC8qITwgRW5hYmxlIGludGVycnVwdCB3aGlsZSBtYWpvciBjb3VudCB0byBoYWxmIHZhbHVlLiAqLworfSBlZG1hX2ludGVycnVwdF9lbmFibGVfdDsKKworLyohIEBicmllZiBlRE1BIHRyYW5zZmVyIHR5cGUgKi8KK3R5cGVkZWYgZW51bSBfZWRtYV90cmFuc2Zlcl90eXBlCit7CisgICAga0VETUFfTWVtb3J5VG9NZW1vcnkgPSAweDBVLCAvKiE8IFRyYW5zZmVyIGZyb20gbWVtb3J5IHRvIG1lbW9yeSAqLworICAgIGtFRE1BX1BlcmlwaGVyYWxUb01lbW9yeSwgICAgLyohPCBUcmFuc2ZlciBmcm9tIHBlcmlwaGVyYWwgdG8gbWVtb3J5ICovCisgICAga0VETUFfTWVtb3J5VG9QZXJpcGhlcmFsLCAgICAvKiE8IFRyYW5zZmVyIGZyb20gbWVtb3J5IHRvIHBlcmlwaGVyYWwgKi8KK30gZWRtYV90cmFuc2Zlcl90eXBlX3Q7CisKKy8qISBAYnJpZWYgZURNQSB0cmFuc2ZlciBzdGF0dXMgKi8KK2VudW0gX2VkbWFfdHJhbnNmZXJfc3RhdHVzCit7CisgICAga1N0YXR1c19FRE1BX1F1ZXVlRnVsbCA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9FRE1BLCAwKSwgLyohPCBUQ0QgcXVldWUgaXMgZnVsbC4gKi8KKyAgICBrU3RhdHVzX0VETUFfQnVzeSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9FRE1BLCAxKSwgICAgICAvKiE8IENoYW5uZWwgaXMgYnVzeSBhbmQgY2FuJ3QgaGFuZGxlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIgcmVxdWVzdC4gKi8KK307CisKKy8qISBAYnJpZWYgZURNQSBnbG9iYWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuKi8KK3R5cGVkZWYgc3RydWN0IF9lZG1hX2NvbmZpZworeworICAgIGJvb2wgZW5hYmxlQ29udGludW91c0xpbmtNb2RlOyAgICAvKiE8IEVuYWJsZSAodHJ1ZSkgY29udGludW91cyBsaW5rIG1vZGUuIFVwb24gbWlub3IgbG9vcCBjb21wbGV0aW9uLCB0aGUgY2hhbm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlcyBhZ2FpbiBpZiB0aGF0IGNoYW5uZWwgaGFzIGEgbWlub3IgbG9vcCBjaGFubmVsIGxpbmsgZW5hYmxlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGluayBjaGFubmVsIGlzIGl0c2VsZi4gKi8KKyAgICBib29sIGVuYWJsZUhhbHRPbkVycm9yOyAgICAgICAgICAgLyohPCBFbmFibGUgKHRydWUpIHRyYW5zZmVyIGhhbHQgb24gZXJyb3IuIEFueSBlcnJvciBjYXVzZXMgdGhlIEhBTFQgYml0IHRvIHNldC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50bHksIGFsbCBzZXJ2aWNlIHJlcXVlc3RzIGFyZSBpZ25vcmVkIHVudGlsIHRoZSBIQUxUIGJpdCBpcyBjbGVhcmVkLiovCisgICAgYm9vbCBlbmFibGVSb3VuZFJvYmluQXJiaXRyYXRpb247IC8qITwgRW5hYmxlICh0cnVlKSByb3VuZCByb2JpbiBjaGFubmVsIGFyYml0cmF0aW9uIG1ldGhvZCBvciBmaXhlZCBwcmlvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyYml0cmF0aW9uIGlzIHVzZWQgZm9yIGNoYW5uZWwgc2VsZWN0aW9uICovCisgICAgYm9vbCBlbmFibGVEZWJ1Z01vZGU7IC8qITwgRW5hYmxlKHRydWUpIGVETUEgZGVidWcgbW9kZS4gV2hlbiBpbiBkZWJ1ZyBtb2RlLCB0aGUgZURNQSBzdGFsbHMgdGhlIHN0YXJ0IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBuZXcgY2hhbm5lbC4gRXhlY3V0aW5nIGNoYW5uZWxzIGFyZSBhbGxvd2VkIHRvIGNvbXBsZXRlLiAqLworfSBlZG1hX2NvbmZpZ190OworCisvKiEKKyAqIEBicmllZiBlRE1BIHRyYW5zZmVyIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBjb25maWd1cmVzIHRoZSBzb3VyY2UvZGVzdGluYXRpb24gdHJhbnNmZXIgYXR0cmlidXRlLgorICogVGhpcyBmaWd1cmUgc2hvd3MgdGhlIGVETUEncyB0cmFuc2ZlciBtb2RlbDoKKyAqICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgKiAgICAgICAgICAgICAgfCBUcmFuc2ZlciBTaXplIHwgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgTWlub3IgTG9vcCB8X19fX19fX19fX19fX19ffCBNYWpvciBsb29wIENvdW50IDEgfAorICogICAgIEJ5dGVzICAgIHwgVHJhbnNmZXIgU2l6ZSB8ICAgICAgICAgICAgICAgICAgICB8CisgKiAgX19fX19fX19fX19ffF9fX19fX19fX19fX19fX3xfX19fX19fX19fX19fX19fX19fX3wtLT4gTWlub3IgbG9vcCBjb21wbGV0ZQorICogICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAqICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgIHxfX19fX19fX19fX19fX198IE1ham9yIExvb3AgQ291bnQgMiB8CisgKiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICB8X19fX19fX19fX19fX19ffF9fX19fX19fX19fX19fX19fX19ffC0tPiBNaW5vciBsb29wICBDb21wbGV0ZQorICoKKyAqICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiBUcmFuc2ZlciBjb21wbGV0ZQorICovCit0eXBlZGVmIHN0cnVjdCBfZWRtYV90cmFuc2Zlcl9jb25maWcKK3sKKyAgICB1aW50MzJfdCBzcmNBZGRyOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNvdXJjZSBkYXRhIGFkZHJlc3MuICovCisgICAgdWludDMyX3QgZGVzdEFkZHI7ICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXN0aW5hdGlvbiBkYXRhIGFkZHJlc3MuICovCisgICAgZWRtYV90cmFuc2Zlcl9zaXplX3Qgc3JjVHJhbnNmZXJTaXplOyAgLyohPCBTb3VyY2UgZGF0YSB0cmFuc2ZlciBzaXplLiAqLworICAgIGVkbWFfdHJhbnNmZXJfc2l6ZV90IGRlc3RUcmFuc2ZlclNpemU7IC8qITwgRGVzdGluYXRpb24gZGF0YSB0cmFuc2ZlciBzaXplLiAqLworICAgIGludDE2X3Qgc3JjT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgIC8qITwgU2lnbi1leHRlbmRlZCBvZmZzZXQgYXBwbGllZCB0byB0aGUgY3VycmVudCBzb3VyY2UgYWRkcmVzcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybSB0aGUgbmV4dC1zdGF0ZSB2YWx1ZSBhcyBlYWNoIHNvdXJjZSByZWFkIGlzIGNvbXBsZXRlZC4gKi8KKyAgICBpbnQxNl90IGRlc3RPZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFNpZ24tZXh0ZW5kZWQgb2Zmc2V0IGFwcGxpZWQgdG8gdGhlIGN1cnJlbnQgZGVzdGluYXRpb24gYWRkcmVzcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybSB0aGUgbmV4dC1zdGF0ZSB2YWx1ZSBhcyBlYWNoIGRlc3RpbmF0aW9uIHdyaXRlIGlzIGNvbXBsZXRlZC4gKi8KKyAgICB1aW50MzJfdCBtaW5vckxvb3BCeXRlczsgICAgICAgICAgICAgICAvKiE8IEJ5dGVzIHRvIHRyYW5zZmVyIGluIGEgbWlub3IgbG9vcCovCisgICAgdWludDMyX3QgbWFqb3JMb29wQ291bnRzOyAgICAgICAgICAgICAgLyohPCBNYWpvciBsb29wIGl0ZXJhdGlvbiBjb3VudC4gKi8KK30gZWRtYV90cmFuc2Zlcl9jb25maWdfdDsKKworLyohIEBicmllZiBlRE1BIGNoYW5uZWwgcHJpb3JpdHkgY29uZmlndXJhdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgX2VkbWFfY2hhbm5lbF9QcmVlbXB0aW9uX2NvbmZpZworeworICAgIGJvb2wgZW5hYmxlQ2hhbm5lbFByZWVtcHRpb247IC8qITwgSWYgdHJ1ZTogYSBjaGFubmVsIGNhbiBiZSBzdXNwZW5kZWQgYnkgb3RoZXIgY2hhbm5lbCB3aXRoIGhpZ2hlciBwcmlvcml0eSAqLworICAgIGJvb2wgZW5hYmxlUHJlZW1wdEFiaWxpdHk7ICAgIC8qITwgSWYgdHJ1ZTogYSBjaGFubmVsIGNhbiBzdXNwZW5kIG90aGVyIGNoYW5uZWwgd2l0aCBsb3cgcHJpb3JpdHkgKi8KKyAgICB1aW50OF90IGNoYW5uZWxQcmlvcml0eTsgICAgICAvKiE8IENoYW5uZWwgcHJpb3JpdHkgKi8KK30gZWRtYV9jaGFubmVsX1ByZWVtcHRpb25fY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgZURNQSBtaW5vciBvZmZzZXQgY29uZmlndXJhdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgX2VkbWFfbWlub3Jfb2Zmc2V0X2NvbmZpZworeworICAgIGJvb2wgZW5hYmxlU3JjTWlub3JPZmZzZXQ7ICAvKiE8IEVuYWJsZSh0cnVlKSBvciBEaXNhYmxlKGZhbHNlKSBzb3VyY2UgbWlub3IgbG9vcCBvZmZzZXQuICovCisgICAgYm9vbCBlbmFibGVEZXN0TWlub3JPZmZzZXQ7IC8qITwgRW5hYmxlKHRydWUpIG9yIERpc2FibGUoZmFsc2UpIGRlc3RpbmF0aW9uIG1pbm9yIGxvb3Agb2Zmc2V0LiAqLworICAgIHVpbnQzMl90IG1pbm9yT2Zmc2V0OyAgICAgICAvKiE8IE9mZnNldCBmb3IgYSBtaW5vciBsb29wIG1hcHBpbmcuICovCit9IGVkbWFfbWlub3Jfb2Zmc2V0X2NvbmZpZ190OworCisvKiEKKyAqIEBicmllZiBlRE1BIFRDRC4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBzYW1lIGFzIFRDRCByZWdpc3RlciB3aGljaCBpcyBkZXNjcmliZWQgaW4gcmVmZXJlbmNlIG1hbnVhbCwKKyAqIGFuZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgc2NhdHRlci9nYXRoZXIgZmVhdHVyZSBhcyBhIG5leHQgaGFyZHdhcmUgVENELgorICovCit0eXBlZGVmIHN0cnVjdCBfZWRtYV90Y2QKK3sKKyAgICBfX0lPIHVpbnQzMl90IFNBRERSOyAgICAgLyohPCBTQUREUiByZWdpc3RlciwgdXNlZCB0byBzYXZlIHNvdXJjZSBhZGRyZXNzICovCisgICAgX19JTyB1aW50MTZfdCBTT0ZGOyAgICAgIC8qITwgU09GRiByZWdpc3Rlciwgc2F2ZSBvZmZzZXQgYnl0ZXMgZXZlcnkgdHJhbnNmZXIgKi8KKyAgICBfX0lPIHVpbnQxNl90IEFUVFI7ICAgICAgLyohPCBBVFRSIHJlZ2lzdGVyLCBzb3VyY2UvZGVzdGluYXRpb24gdHJhbnNmZXIgc2l6ZSBhbmQgbW9kdWxvICovCisgICAgX19JTyB1aW50MzJfdCBOQllURVM7ICAgIC8qITwgTmJ5dGVzIHJlZ2lzdGVyLCBtaW5vciBsb29wIGxlbmd0aCBpbiBieXRlcyAqLworICAgIF9fSU8gdWludDMyX3QgU0xBU1Q7ICAgICAvKiE8IFNMQVNUIHJlZ2lzdGVyICovCisgICAgX19JTyB1aW50MzJfdCBEQUREUjsgICAgIC8qITwgREFERFIgcmVnaXN0ZXIsIHVzZWQgZm9yIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKyAgICBfX0lPIHVpbnQxNl90IERPRkY7ICAgICAgLyohPCBET0ZGIHJlZ2lzdGVyLCB1c2VkIGZvciBkZXN0aW5hdGlvbiBvZmZzZXQgKi8KKyAgICBfX0lPIHVpbnQxNl90IENJVEVSOyAgICAgLyohPCBDSVRFUiByZWdpc3RlciwgY3VycmVudCBtaW5vciBsb29wIG51bWJlcnMsIGZvciB1bmZpbmlzaGVkIG1pbm9yIGxvb3AuKi8KKyAgICBfX0lPIHVpbnQzMl90IERMQVNUX1NHQTsgLyohPCBETEFTVFNHQSByZWdpc3RlciwgbmV4dCBzdGNkIGFkZHJlc3MgdXNlZCBpbiBzY2F0dGVyLWdhdGhlciBtb2RlICovCisgICAgX19JTyB1aW50MTZfdCBDU1I7ICAgICAgIC8qITwgQ1NSIHJlZ2lzdGVyLCBmb3IgVENEIGNvbnRyb2wgc3RhdHVzICovCisgICAgX19JTyB1aW50MTZfdCBCSVRFUjsgICAgIC8qITwgQklURVIgcmVnaXN0ZXIsIGJlZ2luIG1pbm9yIGxvb3AgY291bnQuICovCit9IGVkbWFfdGNkX3Q7CisKKy8qISBAYnJpZWYgQ2FsbGJhY2sgZm9yIGVETUEgKi8KK3N0cnVjdCBfZWRtYV9oYW5kbGU7CisKKy8qISBAYnJpZWYgRGVmaW5lIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlRE1BLiAqLwordHlwZWRlZiB2b2lkICgqZWRtYV9jYWxsYmFjaykoc3RydWN0IF9lZG1hX2hhbmRsZSAqaGFuZGxlLCB2b2lkICp1c2VyRGF0YSwgYm9vbCB0cmFuc2ZlckRvbmUsIHVpbnQzMl90IHRjZHMpOworCisvKiEgQGJyaWVmIGVETUEgdHJhbnNmZXIgaGFuZGxlIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgX2VkbWFfaGFuZGxlCit7CisgICAgZWRtYV9jYWxsYmFjayBjYWxsYmFjazsgLyohPCBDYWxsYmFjayBmdW5jdGlvbiBmb3IgbWFqb3IgY291bnQgZXhoYXVzdGVkLiAqLworICAgIHZvaWQgKnVzZXJEYXRhOyAgICAgICAgIC8qITwgQ2FsbGJhY2sgZnVuY3Rpb24gcGFyYW1ldGVyLiAqLworICAgIERNQV9UeXBlICpiYXNlOyAgICAgICAgIC8qITwgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4gKi8KKyAgICBlZG1hX3RjZF90ICp0Y2RQb29sOyAgICAvKiE8IFBvaW50ZXIgdG8gbWVtb3J5IHN0b3JlZCBUQ0RzLiAqLworICAgIHVpbnQ4X3QgY2hhbm5lbDsgICAgICAgIC8qITwgZURNQSBjaGFubmVsIG51bWJlci4gKi8KKyAgICB2b2xhdGlsZSBpbnQ4X3QgaGVhZGVyOyAvKiE8IFRoZSBmaXJzdCBUQ0QgaW5kZXguIFNob3VsZCBwb2ludCB0byB0aGUgbmV4dCBUQ0QgdG8gYmUgbG9hZGVkIGludG8gdGhlIGVETUEgZW5naW5lLiAqLworICAgIHZvbGF0aWxlIGludDhfdCB0YWlsOyAgIC8qITwgVGhlIGxhc3QgVENEIGluZGV4LiBTaG91bGQgcG9pbnQgdG8gdGhlIG5leHQgVENEIHRvIGJlIHN0b3JlZCBpbnRvIHRoZSBtZW1vcnkgcG9vbC4gKi8KKyAgICB2b2xhdGlsZSBpbnQ4X3QgdGNkVXNlZDsgLyohPCBUaGUgbnVtYmVyIG9mIHVzZWQgVENEIHNsb3RzLiBTaG91bGQgcmVmbGVjdCB0aGUgbnVtYmVyIG9mIFRDRHMgY2FuIGJlIHVzZWQvbG9hZGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZW1vcnkuICovCisgICAgdm9sYXRpbGUgaW50OF90IHRjZFNpemU7IC8qITwgVGhlIHRvdGFsIG51bWJlciBvZiBUQ0Qgc2xvdHMgaW4gdGhlIHF1ZXVlLiAqLworICAgIHVpbnQ4X3QgZmxhZ3M7ICAgICAgICAgICAvKiE8IFRoZSBzdGF0dXMgb2YgdGhlIGN1cnJlbnQgY2hhbm5lbC4gKi8KK30gZWRtYV9oYW5kbGVfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIQorICogQG5hbWUgZURNQSBpbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIGVETUEgcGVyaXBoZXJhbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVuZ2F0ZXMgdGhlIGVETUEgY2xvY2sgYW5kIGNvbmZpZ3VyZXMgdGhlIGVETUEgcGVyaXBoZXJhbCBhY2NvcmRpbmcKKyAqIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLCBzZWUgImVkbWFfY29uZmlnX3QiLgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBtaW5vciBsb29wIG1hcCBmZWF0dXJlLgorICovCit2b2lkIEVETUFfSW5pdChETUFfVHlwZSAqYmFzZSwgY29uc3QgZWRtYV9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgRGVpbml0aWFsaXplcyB0aGUgZURNQSBwZXJpcGhlcmFsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2F0ZXMgdGhlIGVETUEgY2xvY2suCisgKgorICogQHBhcmFtIGJhc2UgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLwordm9pZCBFRE1BX0RlaW5pdChETUFfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGVETUEgZGVmYXVsdCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHRvIGRlZmF1bHQgdmFsdWVzLgorICogVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gdGhlIGZvbGxvd2luZyB2YWx1ZXMuCisgKiBAY29kZQorICogICBjb25maWcuZW5hYmxlQ29udGludW91c0xpbmtNb2RlID0gZmFsc2U7CisgKiAgIGNvbmZpZy5lbmFibGVIYWx0T25FcnJvciA9IHRydWU7CisgKiAgIGNvbmZpZy5lbmFibGVSb3VuZFJvYmluQXJiaXRyYXRpb24gPSBmYWxzZTsKKyAqICAgY29uZmlnLmVuYWJsZURlYnVnTW9kZSA9IGZhbHNlOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgZURNQSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBFRE1BX0dldERlZmF1bHRDb25maWcoZWRtYV9jb25maWdfdCAqY29uZmlnKTsKKworLyogQH0gKi8KKy8qIQorICogQG5hbWUgZURNQSBDaGFubmVsIE9wZXJhdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBTZXRzIGFsbCBUQ0QgcmVnaXN0ZXJzIHRvIGRlZmF1bHQgdmFsdWVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyBUQ0QgcmVnaXN0ZXJzIGZvciB0aGlzIGNoYW5uZWwgdG8gZGVmYXVsdCB2YWx1ZXMuCisgKgorICogQHBhcmFtIGJhc2UgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIGVETUEgY2hhbm5lbCBudW1iZXIuCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgY2hhbm5lbCB0cmFuc2ZlciBpcyBvbmdvaW5nCisgKiAgICAgICBvciBpdCBjYXVzZXMgdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBhdXRvIHN0b3AgcmVxdWVzdCBmZWF0dXJlLgorICovCit2b2lkIEVETUFfUmVzZXRDaGFubmVsKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKTsKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgZURNQSB0cmFuc2ZlciBhdHRyaWJ1dGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSB0cmFuc2ZlciBhdHRyaWJ1dGUsIGluY2x1ZGluZyBzb3VyY2UgYWRkcmVzcywgZGVzdGluYXRpb24gYWRkcmVzcywKKyAqIHRyYW5zZmVyIHNpemUsIGFkZHJlc3Mgb2Zmc2V0LCBhbmQgc28gb24uIEl0IGFsc28gY29uZmlndXJlcyB0aGUgc2NhdHRlciBnYXRoZXIgZmVhdHVyZSBpZiB0aGUKKyAqIHVzZXIgc3VwcGxpZXMgdGhlIFRDRCBhZGRyZXNzLgorICogRXhhbXBsZToKKyAqIEBjb2RlCisgKiAgZWRtYV90cmFuc2Zlcl90IGNvbmZpZzsKKyAqICBlZG1hX3RjZF90IHRjZDsKKyAqICBjb25maWcuc3JjQWRkciA9IC4uOworICogIGNvbmZpZy5kZXN0QWRkciA9IC4uOworICogIC4uLgorICogIEVETUFfU2V0VHJhbnNmZXJDb25maWcoRE1BMCwgY2hhbm5lbCwgJmNvbmZpZywgJnN0Y2QpOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlci4KKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byBlRE1BIHRyYW5zZmVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogQHBhcmFtIG5leHRUY2QgUG9pbnQgdG8gVENEIHN0cnVjdHVyZS4gSXQgY2FuIGJlIE5VTEwgaWYgdXNlcnMKKyAqICAgICAgICAgICAgICAgIGRvIG5vdCB3YW50IHRvIGVuYWJsZSBzY2F0dGVyL2dhdGhlciBmZWF0dXJlLgorICogQG5vdGUgSWYgbmV4dFRjZCBpcyBub3QgTlVMTCwgaXQgbWVhbnMgc2NhdHRlciBnYXRoZXIgZmVhdHVyZSBpcyBlbmFibGVkCisgKiAgICAgICBhbmQgRFJFUSBiaXQgaXMgY2xlYXJlZCBpbiB0aGUgcHJldmlvdXMgdHJhbnNmZXIgY29uZmlndXJhdGlvbiwgd2hpY2gKKyAqICAgICAgIGlzIHNldCBpbiB0aGUgZURNQV9SZXNldENoYW5uZWwuCisgKi8KK3ZvaWQgRURNQV9TZXRUcmFuc2ZlckNvbmZpZyhETUFfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX3RjZF90ICpuZXh0VGNkKTsKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgZURNQSBtaW5vciBvZmZzZXQgZmVhdHVyZS4KKyAqCisgKiBUaGUgbWlub3Igb2Zmc2V0IG1lYW5zIHRoYXQgdGhlIHNpZ25lZC1leHRlbmRlZCB2YWx1ZSBpcyBhZGRlZCB0byB0aGUgc291cmNlIGFkZHJlc3Mgb3IgZGVzdGluYXRpb24KKyAqIGFkZHJlc3MgYWZ0ZXIgZWFjaCBtaW5vciBsb29wLgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIG1pbm9yIG9mZnNldCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBFRE1BX1NldE1pbm9yT2Zmc2V0Q29uZmlnKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBjb25zdCBlZG1hX21pbm9yX29mZnNldF9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgZURNQSBjaGFubmVsIHByZWVtcHRpb24gZmVhdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIGNoYW5uZWwgcHJlZW1wdGlvbiBhdHRyaWJ1dGUgYW5kIHRoZSBwcmlvcml0eSBvZiB0aGUgY2hhbm5lbC4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlcgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIGNoYW5uZWwgcHJlZW1wdGlvbiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEVETUFfU2V0Q2hhbm5lbFByZWVtcHRpb25Db25maWcoRE1BX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRtYV9jaGFubmVsX1ByZWVtcHRpb25fY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpOworICAgIGFzc2VydChjb25maWcgIT0gTlVMTCk7CisKKyAgICBETUFfRENIUFJJbihiYXNlLCBjaGFubmVsKSA9CisgICAgICAgIChETUFfRENIUFJJMF9EUEEoIWNvbmZpZy0+ZW5hYmxlUHJlZW1wdEFiaWxpdHkpIHwgRE1BX0RDSFBSSTBfRUNQKGNvbmZpZy0+ZW5hYmxlQ2hhbm5lbFByZWVtcHRpb24pIHwKKyAgICAgICAgIERNQV9EQ0hQUkkwX0NIUFJJKGNvbmZpZy0+Y2hhbm5lbFByaW9yaXR5KSk7Cit9CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIGNoYW5uZWwgbGluayBmb3IgdGhlIGVETUEgdHJhbnNmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIGVpdGhlciB0aGUgbWlub3IgbGluayBvciB0aGUgbWFqb3IgbGluayBtb2RlLiBUaGUgbWlub3IgbGluayBtZWFucyB0aGF0IHRoZSBjaGFubmVsIGxpbmsgaXMKKyAqIHRyaWdnZXJlZCBldmVyeSB0aW1lIENJVEVSIGRlY3JlYXNlcyBieSAxLiBUaGUgbWFqb3IgbGluayBtZWFucyB0aGF0IHRoZSBjaGFubmVsIGxpbmsgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIENJVEVSIGlzCisgKiBleGhhdXN0ZWQuCisgKgorICogQHBhcmFtIGJhc2UgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIGVETUEgY2hhbm5lbCBudW1iZXIuCisgKiBAcGFyYW0gdHlwZSBBIGNoYW5uZWwgbGluayB0eXBlLCB3aGljaCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKiAgIEBhcmcga0VETUFfTGlua05vbmUKKyAqICAgQGFyZyBrRURNQV9NaW5vckxpbmsKKyAqICAgQGFyZyBrRURNQV9NYWpvckxpbmsKKyAqIEBwYXJhbSBsaW5rZWRDaGFubmVsIFRoZSBsaW5rZWQgY2hhbm5lbCBudW1iZXIuCisgKiBAbm90ZSBVc2VycyBzaG91bGQgZW5zdXJlIHRoYXQgRE9ORSBmbGFnIGlzIGNsZWFyZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBpbnRlcmZhY2UsIG9yIHRoZSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQuCisgKi8KK3ZvaWQgRURNQV9TZXRDaGFubmVsTGluayhETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCwgZWRtYV9jaGFubmVsX2xpbmtfdHlwZV90IHR5cGUsIHVpbnQzMl90IGxpbmtlZENoYW5uZWwpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBiYW5kd2lkdGggZm9yIHRoZSBlRE1BIHRyYW5zZmVyLgorICoKKyAqIEJlY2F1c2UgdGhlIGVETUEgcHJvY2Vzc2VzIHRoZSBtaW5vciBsb29wLCBpdCBjb250aW51b3VzbHkgZ2VuZXJhdGVzIHJlYWQvd3JpdGUgc2VxdWVuY2VzCisgKiB1bnRpbCB0aGUgbWlub3IgY291bnQgaXMgZXhoYXVzdGVkLiBUaGUgYmFuZHdpZHRoIGZvcmNlcyB0aGUgZURNQSB0byBzdGFsbCBhZnRlciB0aGUgY29tcGxldGlvbiBvZgorICogZWFjaCByZWFkL3dyaXRlIGFjY2VzcyB0byBjb250cm9sIHRoZSBidXMgcmVxdWVzdCBiYW5kd2lkdGggc2VlbiBieSB0aGUgY3Jvc3NiYXIgc3dpdGNoLgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICogQHBhcmFtIGJhbmRXaWR0aCBBIGJhbmR3aWR0aCBzZXR0aW5nLCB3aGljaCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgQGFyZyBrRURNQUJhbmR3aWR0aFN0YWxsTm9uZQorICogICAgIEBhcmcga0VETUFCYW5kd2lkdGhTdGFsbDRDeWNsZQorICogICAgIEBhcmcga0VETUFCYW5kd2lkdGhTdGFsbDhDeWNsZQorICovCit2b2lkIEVETUFfU2V0QmFuZFdpZHRoKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBlZG1hX2JhbmR3aWR0aF90IGJhbmRXaWR0aCk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIHNvdXJjZSBtb2R1bG8gYW5kIHRoZSBkZXN0aW5hdGlvbiBtb2R1bG8gZm9yIHRoZSBlRE1BIHRyYW5zZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGVmaW5lcyBhIHNwZWNpZmljIGFkZHJlc3MgcmFuZ2Ugc3BlY2lmaWVkIHRvIGJlIHRoZSB2YWx1ZSBhZnRlciAoU0FERFIgKyBTT0ZGKS8oREFERFIgKyBET0ZGKQorICogY2FsY3VsYXRpb24gaXMgcGVyZm9ybWVkIG9yIHRoZSBvcmlnaW5hbCByZWdpc3RlciB2YWx1ZS4gSXQgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gaW1wbGVtZW50IGEgY2lyY3VsYXIgZGF0YQorICogcXVldWUgZWFzaWx5LgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICogQHBhcmFtIHNyY01vZHVsbyBBIHNvdXJjZSBtb2R1bG8gdmFsdWUuCisgKiBAcGFyYW0gZGVzdE1vZHVsbyBBIGRlc3RpbmF0aW9uIG1vZHVsbyB2YWx1ZS4KKyAqLwordm9pZCBFRE1BX1NldE1vZHVsbyhETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCwgZWRtYV9tb2R1bG9fdCBzcmNNb2R1bG8sIGVkbWFfbW9kdWxvX3QgZGVzdE1vZHVsbyk7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0VETUFfQVNZTkNIUk9fUkVRVUVTVF9DSEFOTkVMX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9FRE1BX0FTWU5DSFJPX1JFUVVFU1RfQ0hBTk5FTF9DT1VOVAorLyohCisgKiBAYnJpZWYgRW5hYmxlcyBhbiBhc3luYyByZXF1ZXN0IGZvciB0aGUgZURNQSB0cmFuc2Zlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlci4KKyAqIEBwYXJhbSBlbmFibGUgVGhlIGNvbW1hbmQgdG8gZW5hYmxlICh0cnVlKSBvciBkaXNhYmxlIChmYWxzZSkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBFRE1BX0VuYWJsZUFzeW5jUmVxdWVzdChETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCwgYm9vbCBlbmFibGUpCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9ETUFNVVhfTU9EVUxFX0NIQU5ORUwpOworCisgICAgYmFzZS0+RUFSUyA9IChiYXNlLT5FQVJTICYgKH4oMVUgPDwgY2hhbm5lbCkpKSB8ICgodWludDMyX3QpZW5hYmxlIDw8IGNoYW5uZWwpOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0VETUFfQVNZTkNIUk9fUkVRVUVTVF9DSEFOTkVMX0NPVU5UICovCisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgYW4gYXV0byBzdG9wIHJlcXVlc3QgZm9yIHRoZSBlRE1BIHRyYW5zZmVyLgorICoKKyAqIElmIGVuYWJsaW5nIHRoZSBhdXRvIHN0b3AgcmVxdWVzdCwgdGhlIGVETUEgaGFyZHdhcmUgYXV0b21hdGljYWxseSBkaXNhYmxlcyB0aGUgaGFyZHdhcmUgY2hhbm5lbCByZXF1ZXN0LgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICogQHBhcmFtIGVuYWJsZSBUaGUgY29tbWFuZCB0byBlbmFibGUgKHRydWUpIG9yIGRpc2FibGUgKGZhbHNlKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEVETUFfRW5hYmxlQXV0b1N0b3BSZXF1ZXN0KERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBib29sIGVuYWJsZSkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0RNQU1VWF9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uQ1NSID0gKGJhc2UtPlRDRFtjaGFubmVsXS5DU1IgJiAofkRNQV9DU1JfRFJFUV9NQVNLKSkgfCBETUFfQ1NSX0RSRVEoZW5hYmxlKTsKK30KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgaW50ZXJydXB0IHNvdXJjZSBmb3IgdGhlIGVETUEgdHJhbnNmZXIuCisgKgorICogQHBhcmFtIGJhc2UgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIGVETUEgY2hhbm5lbCBudW1iZXIuCisgKiBAcGFyYW0gbWFzayBUaGUgbWFzayBvZiBpbnRlcnJ1cHQgc291cmNlIHRvIGJlIHNldC4gVXNlcnMgbmVlZCB0byB1c2UKKyAqICAgICAgICAgICAgIHRoZSBkZWZpbmVkIGVkbWFfaW50ZXJydXB0X2VuYWJsZV90IHR5cGUuCisgKi8KK3ZvaWQgRURNQV9FbmFibGVDaGFubmVsSW50ZXJydXB0cyhETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCwgdWludDMyX3QgbWFzayk7CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgZURNQSB0cmFuc2Zlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlci4KKyAqIEBwYXJhbSBtYXNrIFRoZSBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlIHRvIGJlIHNldC4gVXNlCisgKiAgICAgICAgICAgICB0aGUgZGVmaW5lZCBlZG1hX2ludGVycnVwdF9lbmFibGVfdCB0eXBlLgorICovCit2b2lkIEVETUFfRGlzYWJsZUNoYW5uZWxJbnRlcnJ1cHRzKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCB1aW50MzJfdCBtYXNrKTsKKworLyogQH0gKi8KKy8qIQorICogQG5hbWUgZURNQSBUQ0QgT3BlcmF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFNldHMgYWxsIGZpZWxkcyB0byBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIFRDRCBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIGFsbCBmaWVsZHMgZm9yIHRoaXMgVENEIHN0cnVjdHVyZSB0byBkZWZhdWx0IHZhbHVlLgorICoKKyAqIEBwYXJhbSB0Y2QgUG9pbnRlciB0byB0aGUgVENEIHN0cnVjdHVyZS4KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgYXV0byBzdG9wIHJlcXVlc3QgZmVhdHVyZS4KKyAqLwordm9pZCBFRE1BX1RjZFJlc2V0KGVkbWFfdGNkX3QgKnRjZCk7CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIGVETUEgVENEIHRyYW5zZmVyIGF0dHJpYnV0ZS4KKyAqCisgKiBUaGUgVENEIGlzIGEgdHJhbnNmZXIgY29udHJvbCBkZXNjcmlwdG9yLiBUaGUgY29udGVudCBvZiB0aGUgVENEIGlzIHRoZSBzYW1lIGFzIHRoZSBoYXJkd2FyZSBUQ0QgcmVnaXN0ZXJzLgorICogVGhlIFNUQ0QgaXMgdXNlZCBpbiB0aGUgc2NhdHRlci1nYXRoZXIgbW9kZS4KKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgVENEIHRyYW5zZmVyIGF0dHJpYnV0ZSwgaW5jbHVkaW5nIHNvdXJjZSBhZGRyZXNzLCBkZXN0aW5hdGlvbiBhZGRyZXNzLAorICogdHJhbnNmZXIgc2l6ZSwgYWRkcmVzcyBvZmZzZXQsIGFuZCBzbyBvbi4gSXQgYWxzbyBjb25maWd1cmVzIHRoZSBzY2F0dGVyIGdhdGhlciBmZWF0dXJlIGlmIHRoZQorICogdXNlciBzdXBwbGllcyB0aGUgbmV4dCBUQ0QgYWRkcmVzcy4KKyAqIEV4YW1wbGU6CisgKiBAY29kZQorICogICBlZG1hX3RyYW5zZmVyX3QgY29uZmlnID0geworICogICAuLi4KKyAqICAgfQorICogICBlZG1hX3RjZF90IHRjZCBfX2FsaWduZWQoMzIpOworICogICBlZG1hX3RjZF90IG5leHRUY2QgX19hbGlnbmVkKDMyKTsKKyAqICAgRURNQV9UY2RTZXRUcmFuc2ZlckNvbmZpZygmdGNkLCAmY29uZmlnLCAmbmV4dFRjZCk7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSB0Y2QgUG9pbnRlciB0byB0aGUgVENEIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byBlRE1BIHRyYW5zZmVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogQHBhcmFtIG5leHRUY2QgUG9pbnRlciB0byB0aGUgbmV4dCBUQ0Qgc3RydWN0dXJlLiBJdCBjYW4gYmUgTlVMTCBpZiB1c2VycworICogICAgICAgICAgICAgICAgZG8gbm90IHdhbnQgdG8gZW5hYmxlIHNjYXR0ZXIvZ2F0aGVyIGZlYXR1cmUuCisgKiBAbm90ZSBUQ0QgYWRkcmVzcyBzaG91bGQgYmUgMzIgYnl0ZXMgYWxpZ25lZCBvciBpdCBjYXVzZXMgYW4gZURNQSBlcnJvci4KKyAqIEBub3RlIElmIHRoZSBuZXh0VGNkIGlzIG5vdCBOVUxMLCB0aGUgc2NhdHRlciBnYXRoZXIgZmVhdHVyZSBpcyBlbmFibGVkCisgKiAgICAgICBhbmQgRFJFUSBiaXQgaXMgY2xlYXJlZCBpbiB0aGUgcHJldmlvdXMgdHJhbnNmZXIgY29uZmlndXJhdGlvbiwgd2hpY2gKKyAqICAgICAgIGlzIHNldCBpbiB0aGUgRURNQV9UY2RSZXNldC4KKyAqLwordm9pZCBFRE1BX1RjZFNldFRyYW5zZmVyQ29uZmlnKGVkbWFfdGNkX3QgKnRjZCwgY29uc3QgZWRtYV90cmFuc2Zlcl9jb25maWdfdCAqY29uZmlnLCBlZG1hX3RjZF90ICpuZXh0VGNkKTsKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgZURNQSBUQ0QgbWlub3Igb2Zmc2V0IGZlYXR1cmUuCisgKgorICogQSBtaW5vciBvZmZzZXQgaXMgYSBzaWduZWQtZXh0ZW5kZWQgdmFsdWUgYWRkZWQgdG8gdGhlIHNvdXJjZSBhZGRyZXNzIG9yIGEgZGVzdGluYXRpb24KKyAqIGFkZHJlc3MgYWZ0ZXIgZWFjaCBtaW5vciBsb29wLgorICoKKyAqIEBwYXJhbSB0Y2QgQSBwb2ludCB0byB0aGUgVENEIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBtaW5vciBvZmZzZXQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgRURNQV9UY2RTZXRNaW5vck9mZnNldENvbmZpZyhlZG1hX3RjZF90ICp0Y2QsIGNvbnN0IGVkbWFfbWlub3Jfb2Zmc2V0X2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBjaGFubmVsIGxpbmsgZm9yIHRoZSBlRE1BIFRDRC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgZWl0aGVyIGEgbWlub3IgbGluayBvciBhIG1ham9yIGxpbmsuIFRoZSBtaW5vciBsaW5rIG1lYW5zIHRoZSBjaGFubmVsIGxpbmsgaXMKKyAqIHRyaWdnZXJlZCBldmVyeSB0aW1lIENJVEVSIGRlY3JlYXNlcyBieSAxLiBUaGUgbWFqb3IgbGluayBtZWFucyB0aGF0IHRoZSBjaGFubmVsIGxpbmsgIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBDSVRFUiBpcworICogZXhoYXVzdGVkLgorICoKKyAqIEBub3RlIFVzZXJzIHNob3VsZCBlbnN1cmUgdGhhdCBET05FIGZsYWcgaXMgY2xlYXJlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGludGVyZmFjZSwgb3IgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4KKyAqIEBwYXJhbSB0Y2QgUG9pbnQgdG8gdGhlIFRDRCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gdHlwZSBDaGFubmVsIGxpbmsgdHlwZSwgaXQgY2FuIGJlIG9uZSBvZjoKKyAqICAgQGFyZyBrRURNQV9MaW5rTm9uZQorICogICBAYXJnIGtFRE1BX01pbm9yTGluaworICogICBAYXJnIGtFRE1BX01ham9yTGluaworICogQHBhcmFtIGxpbmtlZENoYW5uZWwgVGhlIGxpbmtlZCBjaGFubmVsIG51bWJlci4KKyAqLwordm9pZCBFRE1BX1RjZFNldENoYW5uZWxMaW5rKGVkbWFfdGNkX3QgKnRjZCwgZWRtYV9jaGFubmVsX2xpbmtfdHlwZV90IHR5cGUsIHVpbnQzMl90IGxpbmtlZENoYW5uZWwpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBiYW5kd2lkdGggZm9yIHRoZSBlRE1BIFRDRC4KKyAqCisgKiBCZWNhdXNlIHRoZSBlRE1BIHByb2Nlc3NlcyB0aGUgbWlub3IgbG9vcCwgaXQgY29udGludW91c2x5IGdlbmVyYXRlcyByZWFkL3dyaXRlIHNlcXVlbmNlcworICogdW50aWwgdGhlIG1pbm9yIGNvdW50IGlzIGV4aGF1c3RlZC4gVGhlIGJhbmR3aWR0aCBmb3JjZXMgdGhlIGVETUEgdG8gc3RhbGwgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YKKyAqIGVhY2ggcmVhZC93cml0ZSBhY2Nlc3MgdG8gY29udHJvbCB0aGUgYnVzIHJlcXVlc3QgYmFuZHdpZHRoIHNlZW4gYnkgdGhlIGNyb3NzYmFyIHN3aXRjaC4KKyAqIEBwYXJhbSB0Y2QgQSBwb2ludGVyIHRvIHRoZSBUQ0Qgc3RydWN0dXJlLgorICogQHBhcmFtIGJhbmRXaWR0aCBBIGJhbmR3aWR0aCBzZXR0aW5nLCB3aGljaCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgQGFyZyBrRURNQUJhbmR3aWR0aFN0YWxsTm9uZQorICogICAgIEBhcmcga0VETUFCYW5kd2lkdGhTdGFsbDRDeWNsZQorICogICAgIEBhcmcga0VETUFCYW5kd2lkdGhTdGFsbDhDeWNsZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRURNQV9UY2RTZXRCYW5kV2lkdGgoZWRtYV90Y2RfdCAqdGNkLCBlZG1hX2JhbmR3aWR0aF90IGJhbmRXaWR0aCkKK3sKKyAgICBhc3NlcnQodGNkICE9IE5VTEwpOworICAgIGFzc2VydCgoKHVpbnQzMl90KXRjZCAmIDB4MUZVKSA9PSAwKTsKKworICAgIHRjZC0+Q1NSID0gKHRjZC0+Q1NSICYgKH5ETUFfQ1NSX0JXQ19NQVNLKSkgfCBETUFfQ1NSX0JXQyhiYW5kV2lkdGgpOworfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBzb3VyY2UgbW9kdWxvIGFuZCB0aGUgZGVzdGluYXRpb24gbW9kdWxvIGZvciB0aGUgZURNQSBUQ0QuCisgKgorICogVGhpcyBmdW5jdGlvbiBkZWZpbmVzIGEgc3BlY2lmaWMgYWRkcmVzcyByYW5nZSBzcGVjaWZpZWQgdG8gYmUgdGhlIHZhbHVlIGFmdGVyIChTQUREUiArIFNPRkYpLyhEQUREUiArIERPRkYpCisgKiBjYWxjdWxhdGlvbiBpcyBwZXJmb3JtZWQgb3IgdGhlIG9yaWdpbmFsIHJlZ2lzdGVyIHZhbHVlLiBJdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBpbXBsZW1lbnQgYSBjaXJjdWxhciBkYXRhCisgKiBxdWV1ZSBlYXNpbHkuCisgKgorICogQHBhcmFtIHRjZCBBIHBvaW50ZXIgdG8gdGhlIFRDRCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gc3JjTW9kdWxvIEEgc291cmNlIG1vZHVsbyB2YWx1ZS4KKyAqIEBwYXJhbSBkZXN0TW9kdWxvIEEgZGVzdGluYXRpb24gbW9kdWxvIHZhbHVlLgorICovCit2b2lkIEVETUFfVGNkU2V0TW9kdWxvKGVkbWFfdGNkX3QgKnRjZCwgZWRtYV9tb2R1bG9fdCBzcmNNb2R1bG8sIGVkbWFfbW9kdWxvX3QgZGVzdE1vZHVsbyk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIGF1dG8gc3RvcCByZXF1ZXN0IGZvciB0aGUgZURNQSBUQ0QuCisgKgorICogSWYgZW5hYmxpbmcgdGhlIGF1dG8gc3RvcCByZXF1ZXN0LCB0aGUgZURNQSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5IGRpc2FibGVzIHRoZSBoYXJkd2FyZSBjaGFubmVsIHJlcXVlc3QuCisgKgorICogQHBhcmFtIHRjZCBBIHBvaW50ZXIgdG8gdGhlIFRDRCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gZW5hYmxlIFRoZSBjb21tYW5kIHRvIGVuYWJsZSAodHJ1ZSkgb3IgZGlzYWJsZSAoZmFsc2UpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRURNQV9UY2RFbmFibGVBdXRvU3RvcFJlcXVlc3QoZWRtYV90Y2RfdCAqdGNkLCBib29sIGVuYWJsZSkKK3sKKyAgICBhc3NlcnQodGNkICE9IE5VTEwpOworICAgIGFzc2VydCgoKHVpbnQzMl90KXRjZCAmIDB4MUZVKSA9PSAwKTsKKworICAgIHRjZC0+Q1NSID0gKHRjZC0+Q1NSICYgKH5ETUFfQ1NSX0RSRVFfTUFTSykpIHwgRE1BX0NTUl9EUkVRKGVuYWJsZSk7Cit9CisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgdGhlIGludGVycnVwdCBzb3VyY2UgZm9yIHRoZSBlRE1BIFRDRC4KKyAqCisgKiBAcGFyYW0gdGNkIFBvaW50IHRvIHRoZSBUQ0Qgc3RydWN0dXJlLgorICogQHBhcmFtIG1hc2sgVGhlIG1hc2sgb2YgaW50ZXJydXB0IHNvdXJjZSB0byBiZSBzZXQuIFVzZXJzIG5lZWQgdG8gdXNlCisgKiAgICAgICAgICAgICB0aGUgZGVmaW5lZCBlZG1hX2ludGVycnVwdF9lbmFibGVfdCB0eXBlLgorICovCit2b2lkIEVETUFfVGNkRW5hYmxlSW50ZXJydXB0cyhlZG1hX3RjZF90ICp0Y2QsIHVpbnQzMl90IG1hc2spOworCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyB0aGUgaW50ZXJydXB0IHNvdXJjZSBmb3IgdGhlIGVETUEgVENELgorICoKKyAqIEBwYXJhbSB0Y2QgUG9pbnQgdG8gdGhlIFRDRCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gbWFzayBUaGUgbWFzayBvZiBpbnRlcnJ1cHQgc291cmNlIHRvIGJlIHNldC4gVXNlcnMgbmVlZCB0byB1c2UKKyAqICAgICAgICAgICAgIHRoZSBkZWZpbmVkIGVkbWFfaW50ZXJydXB0X2VuYWJsZV90IHR5cGUuCisgKi8KK3ZvaWQgRURNQV9UY2REaXNhYmxlSW50ZXJydXB0cyhlZG1hX3RjZF90ICp0Y2QsIHVpbnQzMl90IG1hc2spOworCisvKiEgQH0gKi8KKy8qIQorICogQG5hbWUgZURNQSBDaGFubmVsIFRyYW5zZmVyIE9wZXJhdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBlRE1BIGhhcmR3YXJlIGNoYW5uZWwgcmVxdWVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGNoYW5uZWwgcmVxdWVzdC4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEVETUFfRW5hYmxlQ2hhbm5lbFJlcXVlc3QoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwpCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9ETUFNVVhfTU9EVUxFX0NIQU5ORUwpOworCisgICAgYmFzZS0+U0VSUSA9IERNQV9TRVJRX1NFUlEoY2hhbm5lbCk7Cit9CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBlRE1BIGhhcmR3YXJlIGNoYW5uZWwgcmVxdWVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBoYXJkd2FyZSBjaGFubmVsIHJlcXVlc3QuCisgKgorICogQHBhcmFtIGJhc2UgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIGVETUEgY2hhbm5lbCBudW1iZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBFRE1BX0Rpc2FibGVDaGFubmVsUmVxdWVzdChETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0RNQU1VWF9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBiYXNlLT5DRVJRID0gRE1BX0NFUlFfQ0VSUShjaGFubmVsKTsKK30KKworLyohCisgKiBAYnJpZWYgU3RhcnRzIHRoZSBlRE1BIHRyYW5zZmVyIGJ5IHVzaW5nIHRoZSBzb2Z0d2FyZSB0cmlnZ2VyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc3RhcnRzIGEgbWlub3IgbG9vcCB0cmFuc2Zlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEVETUFfVHJpZ2dlckNoYW5uZWxTdGFydChETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0RNQU1VWF9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBiYXNlLT5TU1JUID0gRE1BX1NTUlRfU1NSVChjaGFubmVsKTsKK30KKworLyohIEB9ICovCisvKiEKKyAqIEBuYW1lIGVETUEgQ2hhbm5lbCBTdGF0dXMgT3BlcmF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIHJlbWFpbmluZyBtYWpvciBsb29wIGNvdW50IGZyb20gdGhlIGVETUEgY3VycmVudCBjaGFubmVsIFRDRC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgVENEIChUYXNrIENvbnRyb2wgRGVzY3JpcHRvcikgc3RhdHVzIGZvciBhIHNwZWNpZmllZAorICogZURNQSBjaGFubmVsIGFuZCByZXR1cm5zIHRoZSB0aGUgbnVtYmVyIG9mIG1ham9yIGxvb3AgY291bnQgdGhhdCBoYXMgbm90IGZpbmlzaGVkLgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICogQHJldHVybiBNYWpvciBsb29wIGNvdW50IHdoaWNoIGhhcyBub3QgYmVlbiB0cmFuc2ZlcnJlZCB5ZXQgZm9yIHRoZSBjdXJyZW50IFRDRC4KKyAqIEBub3RlIDEuIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCB0byBnZXQgdW5maW5pc2hlZCBtYWpvciBsb29wIGNvdW50IG9mIHRyYW5zZmVyIHdpdGhvdXQKKyAqICAgICAgICAgIHRoZSBuZXh0IFRDRCwgb3IgaXQgbWlnaHQgYmUgaW5hY2N1cmFjeS4KKyAqICAgICAgIDIuIFRoZSB1bmZpbmlzaGVkL3JlbWFpbmluZyB0cmFuc2ZlciBieXRlcyBjYW5ub3QgYmUgb2J0YWluZWQgZGlyZWN0bHkgZnJvbSByZWdpc3RlcnMgd2hpbGUKKyAqICAgICAgICAgIHRoZSBjaGFubmVsIGlzIHJ1bm5pbmcuCisgKiAgICAgICAgICBCZWNhdXNlIHRvIGNhbGN1bGF0ZSB0aGUgcmVtYWluaW5nIGJ5dGVzLCB0aGUgaW5pdGlhbCBOQllURVMgY29uZmlndXJlZCBpbiBETUFfVENEbl9OQllURVNfTUxOTworICogICAgICAgICAgcmVnaXN0ZXIgaXMgbmVlZGVkIHdoaWxlIHRoZSBlRE1BIElQIGRvZXMgbm90IHN1cHBvcnQgZ2V0dGluZyBpdCB3aGlsZSBhIGNoYW5uZWwgaXMgYWN0aXZlLgorICogICAgICAgICAgSW4gYW5vdGhlciB3b3JkLCB0aGUgTkJZVEVTIHZhbHVlIHJlYWRpbmcgaXMgYWx3YXlzIHRoZSBhY3R1YWwgKGRlY3JlbWVudGluZykgTkJZVEVTIHZhbHVlIHRoZSBkbWFfZW5naW5lCisgKiAgICAgICAgICBpcyB3b3JraW5nIHdpdGggd2hpbGUgYSBjaGFubmVsIGlzIHJ1bm5pbmcuCisgKiAgICAgICAgICBDb25zZXF1ZW50bHksIHRvIGdldCB0aGUgcmVtYWluaW5nIHRyYW5zZmVyIGJ5dGVzLCBhIHNvZnR3YXJlLXNhdmVkIGluaXRpYWwgdmFsdWUgb2YgTkJZVEVTIChmb3IgZXhhbXBsZQorICogICAgICAgICAgY29waWVkIGJlZm9yZSBlbmFibGluZyB0aGUgY2hhbm5lbCkgaXMgbmVlZGVkLiBUaGUgZm9ybXVsYSB0byBjYWxjdWxhdGUgaXQgaXMgc2hvd24gYmVsb3c6CisgKiAgICAgICAgICBSZW1haW5pbmdCeXRlcyA9IFJlbWFpbmluZ01ham9yTG9vcENvdW50ICogTkJZVEVTKGluaXRpYWxseSBjb25maWd1cmVkKQorICovCit1aW50MzJfdCBFRE1BX0dldFJlbWFpbmluZ01ham9yTG9vcENvdW50KERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgZURNQSBjaGFubmVsIGVycm9yIHN0YXR1cyBmbGFncy4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBUaGUgbWFzayBvZiBlcnJvciBzdGF0dXMgZmxhZ3MuIFVzZXJzIG5lZWQgdG8gdXNlIHRoZQorKiAgICAgICAgIF9lZG1hX2Vycm9yX3N0YXR1c19mbGFncyB0eXBlIHRvIGRlY29kZSB0aGUgcmV0dXJuIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBFRE1BX0dldEVycm9yU3RhdHVzRmxhZ3MoRE1BX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIGJhc2UtPkVTOworfQorCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBlRE1BIGNoYW5uZWwgc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICogQHJldHVybiBUaGUgbWFzayBvZiBjaGFubmVsIHN0YXR1cyBmbGFncy4gVXNlcnMgbmVlZCB0byB1c2UgdGhlCisgKiAgICAgICAgIF9lZG1hX2NoYW5uZWxfc3RhdHVzX2ZsYWdzIHR5cGUgdG8gZGVjb2RlIHRoZSByZXR1cm4gdmFyaWFibGVzLgorICovCit1aW50MzJfdCBFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCk7CisKKy8qIQorICogQGJyaWVmIENsZWFycyB0aGUgZURNQSBjaGFubmVsIHN0YXR1cyBmbGFncy4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlci4KKyAqIEBwYXJhbSBtYXNrIFRoZSBtYXNrIG9mIGNoYW5uZWwgc3RhdHVzIHRvIGJlIGNsZWFyZWQuIFVzZXJzIG5lZWQgdG8gdXNlCisgKiAgICAgICAgICAgICB0aGUgZGVmaW5lZCBfZWRtYV9jaGFubmVsX3N0YXR1c19mbGFncyB0eXBlLgorICovCit2b2lkIEVETUFfQ2xlYXJDaGFubmVsU3RhdHVzRmxhZ3MoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIHVpbnQzMl90IG1hc2spOworCisvKiEgQH0gKi8KKy8qIQorICogQG5hbWUgZURNQSBUcmFuc2FjdGlvbmFsIE9wZXJhdGlvbgorICovCisKKy8qIQorICogQGJyaWVmIENyZWF0ZXMgdGhlIGVETUEgaGFuZGxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlmIHVzaW5nIHRoZSB0cmFuc2FjdGlvbmFsIEFQSSBmb3IgZURNQS4gVGhpcyBmdW5jdGlvbgorICogaW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBlRE1BIGhhbmRsZS4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIGVETUEgaGFuZGxlIHBvaW50ZXIuIFRoZSBlRE1BIGhhbmRsZSBzdG9yZXMgY2FsbGJhY2sgZnVuY3Rpb24gYW5kCisgKiAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlci4KKyAqLwordm9pZCBFRE1BX0NyZWF0ZUhhbmRsZShlZG1hX2hhbmRsZV90ICpoYW5kbGUsIERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKTsKKworLyohCisgKiBAYnJpZWYgSW5zdGFsbHMgdGhlIFRDRHMgbWVtb3J5IHBvb2wgaW50byB0aGUgZURNQSBoYW5kbGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIEVETUFfQ3JlYXRlSGFuZGxlIHRvIHVzZSBzY2F0dGVyL2dhdGhlciBmZWF0dXJlLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgZURNQSBoYW5kbGUgcG9pbnRlci4KKyAqIEBwYXJhbSB0Y2RQb29sIEEgbWVtb3J5IHBvb2wgdG8gc3RvcmUgVENEcy4gSXQgbXVzdCBiZSAzMiBieXRlcyBhbGlnbmVkLgorICogQHBhcmFtIHRjZFNpemUgVGhlIG51bWJlciBvZiBUQ0Qgc2xvdHMuCisgKi8KK3ZvaWQgRURNQV9JbnN0YWxsVENETWVtb3J5KGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgZWRtYV90Y2RfdCAqdGNkUG9vbCwgdWludDMyX3QgdGNkU2l6ZSk7CisKKy8qIQorICogQGJyaWVmIEluc3RhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBlRE1BIHRyYW5zZmVyLgorICoKKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGluIHRoZSBlRE1BIElSUSBoYW5kbGVyLiBVc2UgdGhlIGNhbGxiYWNrIHRvIGRvIHNvbWV0aGluZyBhZnRlcgorICogdGhlIGN1cnJlbnQgbWFqb3IgbG9vcCB0cmFuc2ZlciBjb21wbGV0ZXMuCisgKgorICogQHBhcmFtIGhhbmRsZSBlRE1BIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIGNhbGxiYWNrIGVETUEgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlci4KKyAqIEBwYXJhbSB1c2VyRGF0YSBBIHBhcmFtZXRlciBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICovCit2b2lkIEVETUFfU2V0Q2FsbGJhY2soZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBlZG1hX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICp1c2VyRGF0YSk7CisKKy8qIQorICogQGJyaWVmIFByZXBhcmVzIHRoZSBlRE1BIHRyYW5zZmVyIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSB0cmFuc2ZlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8gdGhlIHVzZXIgaW5wdXQuCisgKgorICogQHBhcmFtIGNvbmZpZyBUaGUgdXNlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBvZiB0eXBlIGVkbWFfdHJhbnNmZXJfdC4KKyAqIEBwYXJhbSBzcmNBZGRyIGVETUEgdHJhbnNmZXIgc291cmNlIGFkZHJlc3MuCisgKiBAcGFyYW0gc3JjV2lkdGggZURNQSB0cmFuc2ZlciBzb3VyY2UgYWRkcmVzcyB3aWR0aChieXRlcykuCisgKiBAcGFyYW0gZGVzdEFkZHIgZURNQSB0cmFuc2ZlciBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICogQHBhcmFtIGRlc3RXaWR0aCBlRE1BIHRyYW5zZmVyIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2lkdGgoYnl0ZXMpLgorICogQHBhcmFtIGJ5dGVzRWFjaFJlcXVlc3QgZURNQSB0cmFuc2ZlciBieXRlcyBwZXIgY2hhbm5lbCByZXF1ZXN0LgorICogQHBhcmFtIHRyYW5zZmVyQnl0ZXMgZURNQSB0cmFuc2ZlciBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZC4KKyAqIEBwYXJhbSB0eXBlIGVETUEgdHJhbnNmZXIgdHlwZS4KKyAqIEBub3RlIFRoZSBkYXRhIGFkZHJlc3MgYW5kIHRoZSBkYXRhIHdpZHRoIG11c3QgYmUgY29uc2lzdGVudC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBTUkMKKyAqICAgICAgIGlzIDQgYnl0ZXMsIHRoZSBzb3VyY2UgYWRkcmVzcyBtdXN0IGJlIDQgYnl0ZXMgYWxpZ25lZCwgb3IgaXQgcmVzdWx0cyBpbgorICogICAgICAgc291cmNlIGFkZHJlc3MgZXJyb3IgKFNBRSkuCisgKi8KK3ZvaWQgRURNQV9QcmVwYXJlVHJhbnNmZXIoZWRtYV90cmFuc2Zlcl9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzcmNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRlc3RXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYnl0ZXNFYWNoUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdHJhbnNmZXJCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV90cmFuc2Zlcl90eXBlX3QgdHlwZSk7CisKKy8qIQorICogQGJyaWVmIFN1Ym1pdHMgdGhlIGVETUEgdHJhbnNmZXIgcmVxdWVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN1Ym1pdHMgdGhlIGVETUEgdHJhbnNmZXIgcmVxdWVzdCBhY2NvcmRpbmcgdG8gdGhlIHRyYW5zZmVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogSWYgc3VibWl0dGluZyB0aGUgdHJhbnNmZXIgcmVxdWVzdCByZXBlYXRlZGx5LCB0aGlzIGZ1bmN0aW9uIHBhY2tzIGFuIHVucHJvY2Vzc2VkIHJlcXVlc3QgYXMKKyAqIGEgVENEIGFuZCBlbmFibGVzIHNjYXR0ZXIvZ2F0aGVyIGZlYXR1cmUgdG8gcHJvY2VzcyBpdCBpbiB0aGUgbmV4dCB0aW1lLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgZURNQSBoYW5kbGUgcG9pbnRlci4KKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byBlRE1BIHRyYW5zZmVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogQHJldHZhbCBrU3RhdHVzX0VETUFfU3VjY2VzcyBJdCBtZWFucyBzdWJtaXQgdHJhbnNmZXIgcmVxdWVzdCBzdWNjZWVkLgorICogQHJldHZhbCBrU3RhdHVzX0VETUFfUXVldWVGdWxsIEl0IG1lYW5zIFRDRCBxdWV1ZSBpcyBmdWxsLiBTdWJtaXQgdHJhbnNmZXIgcmVxdWVzdCBpcyBub3QgYWxsb3dlZC4KKyAqIEByZXR2YWwga1N0YXR1c19FRE1BX0J1c3kgSXQgbWVhbnMgdGhlIGdpdmVuIGNoYW5uZWwgaXMgYnVzeSwgbmVlZCB0byBzdWJtaXQgcmVxdWVzdCBsYXRlci4KKyAqLworc3RhdHVzX3QgRURNQV9TdWJtaXRUcmFuc2ZlcihlZG1hX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIGVETUEgc3RhcnRzIHRyYW5zZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgY2hhbm5lbCByZXF1ZXN0LiBVc2VycyBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIHN1Ym1pdHRpbmcgdGhlIHRyYW5zZmVyIHJlcXVlc3QKKyAqIG9yIGJlZm9yZSBzdWJtaXR0aW5nIHRoZSB0cmFuc2ZlciByZXF1ZXN0LgorICoKKyAqIEBwYXJhbSBoYW5kbGUgZURNQSBoYW5kbGUgcG9pbnRlci4KKyAqLwordm9pZCBFRE1BX1N0YXJ0VHJhbnNmZXIoZWRtYV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgZURNQSBzdG9wcyB0cmFuc2Zlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBjaGFubmVsIHJlcXVlc3QgdG8gcGF1c2UgdGhlIHRyYW5zZmVyLiBVc2VycyBjYW4gY2FsbCBFRE1BX1N0YXJ0VHJhbnNmZXIoKQorICogYWdhaW4gdG8gcmVzdW1lIHRoZSB0cmFuc2Zlci4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIGVETUEgaGFuZGxlIHBvaW50ZXIuCisgKi8KK3ZvaWQgRURNQV9TdG9wVHJhbnNmZXIoZWRtYV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgZURNQSBhYm9ydHMgdHJhbnNmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgY2hhbm5lbCByZXF1ZXN0IGFuZCBjbGVhciB0cmFuc2ZlciBzdGF0dXMgYml0cy4KKyAqIFVzZXJzIGNhbiBzdWJtaXQgYW5vdGhlciB0cmFuc2ZlciBhZnRlciBjYWxsaW5nIHRoaXMgQVBJLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgRE1BIGhhbmRsZSBwb2ludGVyLgorICovCit2b2lkIEVETUFfQWJvcnRUcmFuc2ZlcihlZG1hX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBlRE1BIElSUSBoYW5kbGVyIGZvciB0aGUgY3VycmVudCBtYWpvciBsb29wIHRyYW5zZmVyIGNvbXBsZXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIGNoYW5uZWwgbWFqb3IgaW50ZXJydXB0IGZsYWcgYW5kIGNhbGxzCisgKiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaWYgaXQgaXMgbm90IE5VTEwuCisgKgorICogTm90ZToKKyAqIEZvciB0aGUgY2FzZSB1c2luZyBUQ0QgcXVldWUsIHdoZW4gdGhlIG1ham9yIGl0ZXJhdGlvbiBjb3VudCBpcyBleGhhdXN0ZWQsIGFkZGl0aW9uYWwgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkLgorICogVGhlc2UgaW5jbHVkZSB0aGUgZmluYWwgYWRkcmVzcyBhZGp1c3RtZW50cyBhbmQgcmVsb2FkaW5nIG9mIHRoZSBCSVRFUiBmaWVsZCBpbnRvIHRoZSBDSVRFUi4KKyAqIEFzc2VydGlvbiBvZiBhbiBvcHRpb25hbCBpbnRlcnJ1cHQgcmVxdWVzdCBhbHNvIG9jY3VycyBhdCB0aGlzIHRpbWUsIGFzIGRvZXMgYSBwb3NzaWJsZSBmZXRjaCBvZiBhIG5ldyBUQ0QgZnJvbQorICogbWVtb3J5IHVzaW5nIHRoZSBzY2F0dGVyL2dhdGhlciBhZGRyZXNzIHBvaW50ZXIgaW5jbHVkZWQgaW4gdGhlIGRlc2NyaXB0b3IgKGlmIHNjYXR0ZXIvZ2F0aGVyIGlzIGVuYWJsZWQpLgorICoKKyAqIEZvciBpbnN0YW5jZSwgd2hlbiB0aGUgdGltZSBpbnRlcnJ1cHQgb2YgVENEWzBdIGhhcHBlbnMsIHRoZSBUQ0RbMV0gaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQgaW50byB0aGUgZURNQSBlbmdpbmUuCisgKiBBcyBzZ2EgYW5kIHNnYV9pbmRleCBhcmUgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgRExBU1RfU0dBIGJpdGZpZWxkIGxpZXMgaW4gdGhlIFRDRF9DU1IgcmVnaXN0ZXIsIHRoZSBzZ2FfaW5kZXgKKyAqIGluIHRoaXMgY2FzZSBzaG91bGQgYmUgMiAoRExBU1RfU0dBIG9mIFRDRFsxXSBzdG9yZXMgdGhlIGFkZHJlc3Mgb2YgVENEWzJdKS4gVGh1cywgdGhlICJ0Y2RVc2VkIiB1cGRhdGVkIHNob3VsZCBiZQorICogKHRjZFVzZWQgLSAyVSkgd2hpY2ggaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgVENEcyBjYW4gYmUgbG9hZGVkIGluIHRoZSBtZW1vcnkgcG9vbCAoYmVjYXVzZSBUQ0RbMF0gYW5kIFRDRFsxXSBoYXZlCisgKiBiZWVuIGxvYWRlZCBpbnRvIHRoZSBlRE1BIGVuZ2luZSBhdCB0aGlzIHBvaW50IGFscmVhZHkuKS4KKyAqCisgKiBGb3IgdGhlIGxhc3QgdHdvIGNvbnRpbnVvdXMgSVNScyBpbiBhIHNjYXR0ZXIvZ2F0aGVyIHByb2Nlc3MsIHRoZXkgIGJvdGggbG9hZCB0aGUgbGFzdCBUQ0QgKFRoZSBsYXN0IElTUiBkb2VzIG5vdAorICogbG9hZCBhIG5ldyBUQ0QpIGZyb20gdGhlIG1lbW9yeSBwb29sIHRvIHRoZSBlRE1BIGVuZ2luZSB3aGVuIG1ham9yIGxvb3AgY29tcGxldGVzLgorICogVGhlcmVmb3JlLCBlbnN1cmUgdGhhdCB0aGUgaGVhZGVyIGFuZCB0Y2RVc2VkIHVwZGF0ZWQgYXJlIGlkZW50aWNhbCBmb3IgdGhlbS4KKyAqIHRjZFVzZWQgYXJlIGJvdGggMCBpbiB0aGlzIGNhc2UgYXMgbm8gVENEIHRvIGJlIGxvYWRlZC4KKyAqCisgKiBTZWUgdGhlICJlRE1BIGJhc2ljIGRhdGEgZmxvdyIgaW4gdGhlIGVETUEgRnVuY3Rpb25hbCBkZXNjcmlwdGlvbiBzZWN0aW9uIG9mIHRoZSBSZWZlcmVuY2UgTWFudWFsIGZvcgorICogZnVydGhlciBkZXRhaWxzLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgZURNQSBoYW5kbGUgcG9pbnRlci4KKyAqLwordm9pZCBFRE1BX0hhbmRsZUlSUShlZG1hX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiBAfSAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiBAfSAqLworCisjZW5kaWYgLypfRlNMX0VETUFfSF8qLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZmxhc2guYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyODJhYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2ZsYXNoLmMKQEAgLTAsMCArMSwzNTM5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNiBOWFAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfZmxhc2guaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBuYW1lIE1pc2MgdXRpbGl0eSBkZWZpbmVzCisgKiBAeworICovCisvKiEgQGJyaWVmIEFsaWdubWVudCB1dGlsaXR5LiAqLworI2lmbmRlZiBBTElHTl9ET1dOCisjZGVmaW5lIEFMSUdOX0RPV04oeCwgYSkgKCh4KSAmICh1aW50MzJfdCkoLSgoaW50MzJfdCkoYSkpKSkKKyNlbmRpZgorI2lmbmRlZiBBTElHTl9VUAorI2RlZmluZSBBTElHTl9VUCh4LCBhKSAoLSgoaW50MzJfdCkoKHVpbnQzMl90KSgtKChpbnQzMl90KSh4KSkpICYgKHVpbnQzMl90KSgtKChpbnQzMl90KShhKSkpKSkpCisjZW5kaWYKKworLyohIEBicmllZiBKb2luIGJ5dGVzIHRvIHdvcmQgdXRpbGl0eS4gKi8KKyNkZWZpbmUgQjFQNChiKSAoKCh1aW50MzJfdCkoYikmMHhGRlUpIDw8IDI0KQorI2RlZmluZSBCMVAzKGIpICgoKHVpbnQzMl90KShiKSYweEZGVSkgPDwgMTYpCisjZGVmaW5lIEIxUDIoYikgKCgodWludDMyX3QpKGIpJjB4RkZVKSA8PCA4KQorI2RlZmluZSBCMVAxKGIpICgodWludDMyX3QpKGIpJjB4RkZVKQorI2RlZmluZSBCMlAzKGIpICgoKHVpbnQzMl90KShiKSYweEZGRkZVKSA8PCAxNikKKyNkZWZpbmUgQjJQMihiKSAoKCh1aW50MzJfdCkoYikmMHhGRkZGVSkgPDwgOCkKKyNkZWZpbmUgQjJQMShiKSAoKHVpbnQzMl90KShiKSYweEZGRkZVKQorI2RlZmluZSBCM1AyKGIpICgoKHVpbnQzMl90KShiKSYweEZGRkZGRlUpIDw8IDgpCisjZGVmaW5lIEIzUDEoYikgKCh1aW50MzJfdCkoYikmMHhGRkZGRkZVKQorI2RlZmluZSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKHgsIHkpIChCMVA0KHgpIHwgQjNQMSh5KSkKKyNkZWZpbmUgQllURVNfSk9JTl9UT19XT1JEXzJfMih4LCB5KSAoQjJQMyh4KSB8IEIyUDEoeSkpCisjZGVmaW5lIEJZVEVTX0pPSU5fVE9fV09SRF8zXzEoeCwgeSkgKEIzUDIoeCkgfCBCMVAxKHkpKQorI2RlZmluZSBCWVRFU19KT0lOX1RPX1dPUkRfMV8xXzIoeCwgeSwgeikgKEIxUDQoeCkgfCBCMVAzKHkpIHwgQjJQMSh6KSkKKyNkZWZpbmUgQllURVNfSk9JTl9UT19XT1JEXzFfMl8xKHgsIHksIHopIChCMVA0KHgpIHwgQjJQMih5KSB8IEIxUDEoeikpCisjZGVmaW5lIEJZVEVTX0pPSU5fVE9fV09SRF8yXzFfMSh4LCB5LCB6KSAoQjJQMyh4KSB8IEIxUDIoeSkgfCBCMVAxKHopKQorI2RlZmluZSBCWVRFU19KT0lOX1RPX1dPUkRfMV8xXzFfMSh4LCB5LCB6LCB3KSAoQjFQNCh4KSB8IEIxUDMoeSkgfCBCMVAyKHopIHwgQjFQMSh3KSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFNlY29uZGFyeSBmbGFzaCBjb25maWd1cmF0aW9uCisgKiBAeworICovCisvKiEgQGJyaWVmIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzZWNvbmRhcnkgZmxhc2ggaGFzIGl0cyBvd24gcHJvdGVjdGlvbiByZWdpc3RlciBpbiBmbGFzaCBtb2R1bGUuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfTVVMVElQTEVfRkxBU0gpICYmIGRlZmluZWQoRlRGRV9GUFJPVFNfUFJPVFNfTUFTSykKKyNkZWZpbmUgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9QUk9URUNUSU9OX1JFR0lTVEVSICgxKQorI2Vsc2UKKyNkZWZpbmUgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9QUk9URUNUSU9OX1JFR0lTVEVSICgwKQorI2VuZGlmCisKKy8qISBAYnJpZWYgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNlY29uZGFyeSBmbGFzaCBoYXMgaXRzIG93biBFeGVjdXRlLU9ubHkgYWNjZXNzIHJlZ2lzdGVyIGluIGZsYXNoIG1vZHVsZS4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19NVUxUSVBMRV9GTEFTSCkgJiYgZGVmaW5lZChGVEZFX0ZBQ1NTU19TR1NJWkVfU19NQVNLKQorI2RlZmluZSBGTEFTSF9TU0RfU0VDT05EQVJZX0ZMQVNIX0hBU19JVFNfT1dOX0FDQ0VTU19SRUdJU1RFUiAoMSkKKyNlbHNlCisjZGVmaW5lIEZMQVNIX1NTRF9TRUNPTkRBUllfRkxBU0hfSEFTX0lUU19PV05fQUNDRVNTX1JFR0lTVEVSICgwKQorI2VuZGlmCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBGbGFzaCBjYWNoZSBhbmRzIHNwZWN1bGF0aW9uIGNvbnRyb2wgZGVmaW5lcworICogQHsKKyAqLworI2lmIGRlZmluZWQoTUNNX1BMQUNSX0NGQ0NfTUFTSykgfHwgZGVmaW5lZChNQ01fQ1BDUjJfQ0NCQ19NQVNLKQorI2RlZmluZSBGTEFTSF9DQUNIRV9JU19DT05UUk9MTEVEX0JZX01DTSAoMSkKKyNlbHNlCisjZGVmaW5lIEZMQVNIX0NBQ0hFX0lTX0NPTlRST0xMRURfQllfTUNNICgwKQorI2VuZGlmCisjaWYgZGVmaW5lZChGTUNfUEZCMENSX0NJTlZfV0FZX01BU0spIHx8IGRlZmluZWQoRk1DX1BGQjAxQ1JfQ0lOVl9XQVlfTUFTSykKKyNkZWZpbmUgRkxBU0hfQ0FDSEVfSVNfQ09OVFJPTExFRF9CWV9GTUMgKDEpCisjZWxzZQorI2RlZmluZSBGTEFTSF9DQUNIRV9JU19DT05UUk9MTEVEX0JZX0ZNQyAoMCkKKyNlbmRpZgorI2lmIGRlZmluZWQoTUNNX1BMQUNSX0RGQ1NfTUFTSykKKyNkZWZpbmUgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9NQ00gKDEpCisjZWxzZQorI2RlZmluZSBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX01DTSAoMCkKKyNlbmRpZgorI2lmIGRlZmluZWQoTVNDTV9PQ01EUl9PQ00xX01BU0spIHx8IGRlZmluZWQoTVNDTV9PQ01EUl9PQ01DMV9NQVNLKQorI2RlZmluZSBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX01TQ00gKDEpCisjZWxzZQorI2RlZmluZSBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX01TQ00gKDApCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZNQ19QRkIwQ1JfU19JTlZfTUFTSykgfHwgZGVmaW5lZChGTUNfUEZCMENSX1NfQl9JTlZfTUFTSykgfHwgZGVmaW5lZChGTUNfUEZCMDFDUl9TX0lOVl9NQVNLKQorI2RlZmluZSBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX0ZNQyAoMSkKKyNlbHNlCisjZGVmaW5lIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfRk1DICgwKQorI2VuZGlmCisvKkB9Ki8KKworLyohIEBicmllZiBEYXRhIGZsYXNoIElGUiBtYXAgRmllbGQqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGRSkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGRQorI2RlZmluZSBERkxBU0hfSUZSX1JFQURSRVNPVVJDRV9TVEFSVF9BRERSRVNTIDB4ODAwM0Y4VQorI2Vsc2UgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGTCA9PSAxIG9yIEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkEgPSA9MSAqLworI2RlZmluZSBERkxBU0hfSUZSX1JFQURSRVNPVVJDRV9TVEFSVF9BRERSRVNTIDB4ODAwMEY4VQorI2VuZGlmCisKKy8qIQorICogQG5hbWUgUmVzZXJ2ZWQgRmxleE5WTSBzaXplIChGb3IgYSB2YXJpZXR5IG9mIHB1cnBvc2VzKSBkZWZpbmVzCisgKiBAeworICovCisjZGVmaW5lIEZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfUkVTRVJWRUQgMHhGRkZGRkZGRlUKKyNkZWZpbmUgRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfUkVTRVJWRUQgMHhGRkZGVQorLypAfSovCisKKy8qIQorICogQG5hbWUgRmxhc2ggUHJvZ3JhbSBPbmNlIEZpZWxkIGRlZmluZXMKKyAqIEB7CisgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkEpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkEKKy8qIEZURkEgcGFydHMoZWcuIEs4MCwgS0w4MCwgTDVLKSBzdXBwb3J0IGJvdGggNC1ieXRlcyBhbmQgOC1ieXRlcyB1bml0IHNpemUgKi8KKyNkZWZpbmUgRkxBU0hfUFJPR1JBTV9PTkNFX01JTl9JRF84QllURVMgXAorICAgIDB4MTBVIC8qIE1pbmltdW0gSW5kZXggaW5kY2F0aW5nIG9uZSBvZiBQcm9nYW0gT25jZSBGaWVsZHMgd2hpY2ggaXMgYWNjZXNzZWQgaW4gOC1ieXRlIHJlY29yZHMgKi8KKyNkZWZpbmUgRkxBU0hfUFJPR1JBTV9PTkNFX01BWF9JRF84QllURVMgXAorICAgIDB4MTNVIC8qIE1heGltdW0gSW5kZXggaW5kY2F0aW5nIG9uZSBvZiBQcm9nYW0gT25jZSBGaWVsZHMgd2hpY2ggaXMgYWNjZXNzZWQgaW4gOC1ieXRlIHJlY29yZHMgKi8KKyNkZWZpbmUgRkxBU0hfUFJPR1JBTV9PTkNFX0lTXzRCWVRFU19VTklUX1NVUFBPUlQgMQorI2RlZmluZSBGTEFTSF9QUk9HUkFNX09OQ0VfSVNfOEJZVEVTX1VOSVRfU1VQUE9SVCAxCisjZWxpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkUpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkUKKy8qIEZURkUgcGFydHMoZWcuIEs2NSwgS0UxOCkgb25seSBzdXBwb3J0IDgtYnl0ZXMgdW5pdCBzaXplICovCisjZGVmaW5lIEZMQVNIX1BST0dSQU1fT05DRV9JU180QllURVNfVU5JVF9TVVBQT1JUIDAKKyNkZWZpbmUgRkxBU0hfUFJPR1JBTV9PTkNFX0lTXzhCWVRFU19VTklUX1NVUFBPUlQgMQorI2VsaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZMKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZMCisvKiBGVEZMIHBhcnRzKGVnLiBLMjApIG9ubHkgc3VwcG9ydCA0LWJ5dGVzIHVuaXQgc2l6ZSAqLworI2RlZmluZSBGTEFTSF9QUk9HUkFNX09OQ0VfSVNfNEJZVEVTX1VOSVRfU1VQUE9SVCAxCisjZGVmaW5lIEZMQVNIX1BST0dSQU1fT05DRV9JU184QllURVNfVU5JVF9TVVBQT1JUIDAKKyNlbmRpZgorLypAfSovCisKKy8qIQorICogQG5hbWUgRmxhc2ggc2VjdXJpdHkgc3RhdHVzIGRlZmluZXMKKyAqIEB7CisgKi8KKyNkZWZpbmUgRkxBU0hfU0VDVVJJVFlfU1RBVEVfS0VZRU4gMHg4MFUKKyNkZWZpbmUgRkxBU0hfU0VDVVJJVFlfU1RBVEVfVU5TRUNVUkVEIDB4MDJVCisjZGVmaW5lIEZMQVNIX05PVF9TRUNVUkUgMHgwMVUKKyNkZWZpbmUgRkxBU0hfU0VDVVJFX0JBQ0tET09SX0VOQUJMRUQgMHgwMlUKKyNkZWZpbmUgRkxBU0hfU0VDVVJFX0JBQ0tET09SX0RJU0FCTEVEIDB4MDRVCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBGbGFzaCBjb250cm9sbGVyIGNvbW1hbmQgbnVtYmVycworICogQHsKKyAqLworI2RlZmluZSBGVEZ4X1ZFUklGWV9CTE9DSyAweDAwVSAgICAgICAgICAgICAgICAgICAgLyohPCBSRDFCTEsqLworI2RlZmluZSBGVEZ4X1ZFUklGWV9TRUNUSU9OIDB4MDFVICAgICAgICAgICAgICAgICAgLyohPCBSRDFTRUMqLworI2RlZmluZSBGVEZ4X1BST0dSQU1fQ0hFQ0sgMHgwMlUgICAgICAgICAgICAgICAgICAgLyohPCBQR01DSEsqLworI2RlZmluZSBGVEZ4X1JFQURfUkVTT1VSQ0UgMHgwM1UgICAgICAgICAgICAgICAgICAgLyohPCBSRFJTUkMqLworI2RlZmluZSBGVEZ4X1BST0dSQU1fTE9OR1dPUkQgMHgwNlUgICAgICAgICAgICAgICAgLyohPCBQR000Ki8KKyNkZWZpbmUgRlRGeF9QUk9HUkFNX1BIUkFTRSAweDA3VSAgICAgICAgICAgICAgICAgIC8qITwgUEdNOCovCisjZGVmaW5lIEZURnhfRVJBU0VfQkxPQ0sgMHgwOFUgICAgICAgICAgICAgICAgICAgICAvKiE8IEVSU0JMSyovCisjZGVmaW5lIEZURnhfRVJBU0VfU0VDVE9SIDB4MDlVICAgICAgICAgICAgICAgICAgICAvKiE8IEVSU1NDUiovCisjZGVmaW5lIEZURnhfUFJPR1JBTV9TRUNUSU9OIDB4MEJVICAgICAgICAgICAgICAgICAvKiE8IFBHTVNFQyovCisjZGVmaW5lIEZURnhfR0VORVJBVEVfQ1JDIDB4MENVICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ0dFTiovCisjZGVmaW5lIEZURnhfVkVSSUZZX0FMTF9CTE9DSyAweDQwVSAgICAgICAgICAgICAgICAvKiE8IFJEMUFMTCovCisjZGVmaW5lIEZURnhfUkVBRF9PTkNFIDB4NDFVICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJET05DRSBvciBSRElOREVYKi8KKyNkZWZpbmUgRlRGeF9QUk9HUkFNX09OQ0UgMHg0M1UgICAgICAgICAgICAgICAgICAgIC8qITwgUEdNT05DRSBvciBQR01JTkRFWCovCisjZGVmaW5lIEZURnhfRVJBU0VfQUxMX0JMT0NLIDB4NDRVICAgICAgICAgICAgICAgICAvKiE8IEVSU0FMTCovCisjZGVmaW5lIEZURnhfU0VDVVJJVFlfQllfUEFTUyAweDQ1VSAgICAgICAgICAgICAgICAvKiE8IFZGWUtFWSovCisjZGVmaW5lIEZURnhfU1dBUF9DT05UUk9MIDB4NDZVICAgICAgICAgICAgICAgICAgICAvKiE8IFNXQVAqLworI2RlZmluZSBGVEZ4X0VSQVNFX0FMTF9CTE9DS19VTlNFQ1VSRSAweDQ5VSAgICAgICAgLyohPCBFUlNBTExVKi8KKyNkZWZpbmUgRlRGeF9WRVJJRllfQUxMX0VYRUNVVEVfT05MWV9TRUdNRU5UIDB4NEFVIC8qITwgUkQxWEEqLworI2RlZmluZSBGVEZ4X0VSQVNFX0FMTF9FWEVDVVRFX09OTFlfU0VHTUVOVCAweDRCVSAgLyohPCBFUlNYQSovCisjZGVmaW5lIEZURnhfUFJPR1JBTV9QQVJUSVRJT04gMHg4MFUgICAgICAgICAgICAgICAvKiE8IFBHTVBBUlQpKi8KKyNkZWZpbmUgRlRGeF9TRVRfRkxFWFJBTV9GVU5DVElPTiAweDgxVSAgICAgICAgICAgIC8qITwgU0VUUkFNKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qQH0qLworCisvKiEKKyAqIEBuYW1lIENvbW1vbiBmbGFzaCByZWdpc3RlciBpbmZvIGRlZmluZXMKKyAqIEB7CisgKi8KKyNpZiBkZWZpbmVkKEZURkEpCisjZGVmaW5lIEZURnggRlRGQQorI2RlZmluZSBGVEZ4X0JBU0UgRlRGQV9CQVNFCisjZGVmaW5lIEZURnhfRlNUQVRfQ0NJRl9NQVNLIEZURkFfRlNUQVRfQ0NJRl9NQVNLCisjZGVmaW5lIEZURnhfRlNUQVRfUkRDT0xFUlJfTUFTSyBGVEZBX0ZTVEFUX1JEQ09MRVJSX01BU0sKKyNkZWZpbmUgRlRGeF9GU1RBVF9BQ0NFUlJfTUFTSyBGVEZBX0ZTVEFUX0FDQ0VSUl9NQVNLCisjZGVmaW5lIEZURnhfRlNUQVRfRlBWSU9MX01BU0sgRlRGQV9GU1RBVF9GUFZJT0xfTUFTSworI2RlZmluZSBGVEZ4X0ZTVEFUX01HU1RBVDBfTUFTSyBGVEZBX0ZTVEFUX01HU1RBVDBfTUFTSworI2RlZmluZSBGVEZ4X0ZTRUNfU0VDX01BU0sgRlRGQV9GU0VDX1NFQ19NQVNLCisjZGVmaW5lIEZURnhfRlNFQ19LRVlFTl9NQVNLIEZURkFfRlNFQ19LRVlFTl9NQVNLCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9SQU0pICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX1JBTQorI2RlZmluZSBGVEZ4X0ZDTkZHX1JBTVJEWV9NQVNLIEZURkFfRkNORkdfUkFNUkRZX01BU0sKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9SQU0gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX05WTSkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfTlZNCisjZGVmaW5lIEZURnhfRkNORkdfRUVFUkRZX01BU0sgRlRGQV9GQ05GR19FRUVSRFlfTUFTSworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX05WTSAqLworI2VsaWYgZGVmaW5lZChGVEZFKQorI2RlZmluZSBGVEZ4IEZURkUKKyNkZWZpbmUgRlRGeF9CQVNFIEZURkVfQkFTRQorI2RlZmluZSBGVEZ4X0ZTVEFUX0NDSUZfTUFTSyBGVEZFX0ZTVEFUX0NDSUZfTUFTSworI2RlZmluZSBGVEZ4X0ZTVEFUX1JEQ09MRVJSX01BU0sgRlRGRV9GU1RBVF9SRENPTEVSUl9NQVNLCisjZGVmaW5lIEZURnhfRlNUQVRfQUNDRVJSX01BU0sgRlRGRV9GU1RBVF9BQ0NFUlJfTUFTSworI2RlZmluZSBGVEZ4X0ZTVEFUX0ZQVklPTF9NQVNLIEZURkVfRlNUQVRfRlBWSU9MX01BU0sKKyNkZWZpbmUgRlRGeF9GU1RBVF9NR1NUQVQwX01BU0sgRlRGRV9GU1RBVF9NR1NUQVQwX01BU0sKKyNkZWZpbmUgRlRGeF9GU0VDX1NFQ19NQVNLIEZURkVfRlNFQ19TRUNfTUFTSworI2RlZmluZSBGVEZ4X0ZTRUNfS0VZRU5fTUFTSyBGVEZFX0ZTRUNfS0VZRU5fTUFTSworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfUkFNKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9SQU0KKyNkZWZpbmUgRlRGeF9GQ05GR19SQU1SRFlfTUFTSyBGVEZFX0ZDTkZHX1JBTVJEWV9NQVNLCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfUkFNICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9OVk0pICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX05WTQorI2RlZmluZSBGVEZ4X0ZDTkZHX0VFRVJEWV9NQVNLIEZURkVfRkNORkdfRUVFUkRZX01BU0sKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9OVk0gKi8KKyNlbGlmIGRlZmluZWQoRlRGTCkKKyNkZWZpbmUgRlRGeCBGVEZMCisjZGVmaW5lIEZURnhfQkFTRSBGVEZMX0JBU0UKKyNkZWZpbmUgRlRGeF9GU1RBVF9DQ0lGX01BU0sgRlRGTF9GU1RBVF9DQ0lGX01BU0sKKyNkZWZpbmUgRlRGeF9GU1RBVF9SRENPTEVSUl9NQVNLIEZURkxfRlNUQVRfUkRDT0xFUlJfTUFTSworI2RlZmluZSBGVEZ4X0ZTVEFUX0FDQ0VSUl9NQVNLIEZURkxfRlNUQVRfQUNDRVJSX01BU0sKKyNkZWZpbmUgRlRGeF9GU1RBVF9GUFZJT0xfTUFTSyBGVEZMX0ZTVEFUX0ZQVklPTF9NQVNLCisjZGVmaW5lIEZURnhfRlNUQVRfTUdTVEFUMF9NQVNLIEZURkxfRlNUQVRfTUdTVEFUMF9NQVNLCisjZGVmaW5lIEZURnhfRlNFQ19TRUNfTUFTSyBGVEZMX0ZTRUNfU0VDX01BU0sKKyNkZWZpbmUgRlRGeF9GU0VDX0tFWUVOX01BU0sgRlRGTF9GU0VDX0tFWUVOX01BU0sKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX1JBTSkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfUkFNCisjZGVmaW5lIEZURnhfRkNORkdfUkFNUkRZX01BU0sgRlRGTF9GQ05GR19SQU1SRFlfTUFTSworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX1JBTSAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfTlZNKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9OVk0KKyNkZWZpbmUgRlRGeF9GQ05GR19FRUVSRFlfTUFTSyBGVEZMX0ZDTkZHX0VFRVJEWV9NQVNLCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfTlZNICovCisjZWxzZQorI2Vycm9yICJVbmtub3duIGZsYXNoIGNvbnRyb2xsZXIiCisjZW5kaWYKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIENvbW1vbiBmbGFzaCByZWdpc3RlciBhY2Nlc3MgaW5mbyBkZWZpbmVzCisgKiBAeworICovCisjaWYgZGVmaW5lZChGVEZBX0ZDQ09CX0NDT0JuX01BU0spIHx8IGRlZmluZWQoRlRGRV9GQ0NPQl9DQ09Cbl9NQVNLKSB8fCBkZWZpbmVkKEZURkxfRkNDT0JfQ0NPQm5fTUFTSykKKyNkZWZpbmUgRlRGeF9GQ0NPQjNfUkVHIChGVEZ4LT5GQ0NPQlswXSkKKyNkZWZpbmUgRlRGeF9GQ0NPQjVfUkVHIChGVEZ4LT5GQ0NPQls2XSkKKyNkZWZpbmUgRlRGeF9GQ0NPQjZfUkVHIChGVEZ4LT5GQ0NPQls1XSkKKyNkZWZpbmUgRlRGeF9GQ0NPQjdfUkVHIChGVEZ4LT5GQ0NPQls0XSkKKyNlbHNlCisjZGVmaW5lIEZURnhfRkNDT0IzX1JFRyAoRlRGeC0+RkNDT0IzKQorI2RlZmluZSBGVEZ4X0ZDQ09CNV9SRUcgKEZURngtPkZDQ09CNSkKKyNkZWZpbmUgRlRGeF9GQ0NPQjZfUkVHIChGVEZ4LT5GQ0NPQjYpCisjZGVmaW5lIEZURnhfRkNDT0I3X1JFRyAoRlRGeC0+RkNDT0I3KQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZURkFfRlBST1RfUFJPVF9NQVNLKSB8fCBkZWZpbmVkKEZURkVfRlBST1RfUFJPVF9NQVNLKSB8fCBkZWZpbmVkKEZURkxfRlBST1RfUFJPVF9NQVNLKQorI2RlZmluZSBGVEZ4X0ZQUk9UX0xPV19SRUcgKEZURngtPkZQUk9UWzRdKQorI2RlZmluZSBGVEZ4X0ZQUk9UTDNfUkVHIChGVEZ4LT5GUFJPVFs0XSkKKyNkZWZpbmUgRlRGeF9GUFJPVEwyX1JFRyAoRlRGeC0+RlBST1RbNV0pCisjZGVmaW5lIEZURnhfRlBST1RMMV9SRUcgKEZURngtPkZQUk9UWzZdKQorI2RlZmluZSBGVEZ4X0ZQUk9UTDBfUkVHIChGVEZ4LT5GUFJPVFs3XSkKKyNkZWZpbmUgRlRGeF9GUFJPVF9ISUdIX1JFRyAoRlRGeC0+RlBST1RbMF0pCisjZGVmaW5lIEZURnhfRlBST1RIM19SRUcgKEZURngtPkZQUk9UWzBdKQorI2RlZmluZSBGVEZ4X0ZQUk9USDJfUkVHIChGVEZ4LT5GUFJPVFsxXSkKKyNkZWZpbmUgRlRGeF9GUFJPVEgxX1JFRyAoRlRGeC0+RlBST1RbMl0pCisjZGVmaW5lIEZURnhfRlBST1RIMF9SRUcgKEZURngtPkZQUk9UWzNdKQorI2Vsc2UKKyNkZWZpbmUgRlRGeF9GUFJPVF9MT1dfUkVHIChGVEZ4LT5GUFJPVDMpCisjZGVmaW5lIEZURnhfRlBST1RMM19SRUcgKEZURngtPkZQUk9UMykKKyNkZWZpbmUgRlRGeF9GUFJPVEwyX1JFRyAoRlRGeC0+RlBST1QyKQorI2RlZmluZSBGVEZ4X0ZQUk9UTDFfUkVHIChGVEZ4LT5GUFJPVDEpCisjZGVmaW5lIEZURnhfRlBST1RMMF9SRUcgKEZURngtPkZQUk9UMCkKKyNlbmRpZgorCisjaWYgRkxBU0hfU1NEX0lTX1NFQ09OREFSWV9GTEFTSF9FTkFCTEVEICYmIEZMQVNIX1NTRF9TRUNPTkRBUllfRkxBU0hfSEFTX0lUU19PV05fUFJPVEVDVElPTl9SRUdJU1RFUgorI2lmIGRlZmluZWQoRlRGQV9GUFJPVFNfUFJPVFNfTUFTSykgfHwgZGVmaW5lZChGVEZFX0ZQUk9UU19QUk9UU19NQVNLKSB8fCBkZWZpbmVkKEZURkxfRlBST1RTX1BST1RTX01BU0spCisjZGVmaW5lIEZURnhfRlBST1RTSF9SRUcgKEZURngtPkZQUk9UU1sxXSkKKyNkZWZpbmUgRlRGeF9GUFJPVFNMX1JFRyAoRlRGeC0+RlBST1RTWzBdKQorI2Vsc2UKKyNkZWZpbmUgRlRGeF9GUFJPVFNIX1JFRyAoRlRGeC0+RlBST1RTSCkKKyNkZWZpbmUgRlRGeF9GUFJPVFNMX1JFRyAoRlRGeC0+RlBST1RTTCkKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZURkFfWEFDQ19YQV9NQVNLKSB8fCBkZWZpbmVkKEZURkVfWEFDQ19YQV9NQVNLKSB8fCBkZWZpbmVkKEZURkxfWEFDQ19YQV9NQVNLKQorI2RlZmluZSBGVEZ4X1hBQ0NIM19SRUcgKEZURngtPlhBQ0NbMF0pCisjZGVmaW5lIEZURnhfWEFDQ0wzX1JFRyAoRlRGeC0+WEFDQ1s0XSkKKyNlbHNlCisjZGVmaW5lIEZURnhfWEFDQ0gzX1JFRyAoRlRGeC0+WEFDQ0gzKQorI2RlZmluZSBGVEZ4X1hBQ0NMM19SRUcgKEZURngtPlhBQ0NMMykKKyNlbmRpZgorCisjaWYgRkxBU0hfU1NEX0lTX1NFQ09OREFSWV9GTEFTSF9FTkFCTEVEICYmIEZMQVNIX1NTRF9TRUNPTkRBUllfRkxBU0hfSEFTX0lUU19PV05fQUNDRVNTX1JFR0lTVEVSCisjaWYgZGVmaW5lZChGVEZBX1hBQ0NTX1hBX1NfTUFTSykgfHwgZGVmaW5lZChGVEZFX1hBQ0NTX1hBX1NfTUFTSykgfHwgZGVmaW5lZChGVEZMX1hBQ0NTX1hBX1NfTUFTSykKKyNkZWZpbmUgRlRGeF9YQUNDU0hfUkVHIChGVEZ4LT5YQUNDU1sxXSkKKyNkZWZpbmUgRlRGeF9YQUNDU0xfUkVHIChGVEZ4LT5YQUNDU1swXSkKKyNlbHNlCisjZGVmaW5lIEZURnhfWEFDQ1NIX1JFRyAoRlRGeC0+WEFDQ1NIKQorI2RlZmluZSBGVEZ4X1hBQ0NTTF9SRUcgKEZURngtPlhBQ0NTTCkKKyNlbmRpZgorI2VuZGlmCisvKkB9Ki8KKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIGFjY2VzcyBzZWdtZW50IHByb3BlcnR5LgorICovCitlbnVtIF9mbGFzaF9hY2Nlc3Nfc2VnbWVudF9wcm9wZXJ0eQoreworICAgIGtGTEFTSF9BY2Nlc3NTZWdtZW50QmFzZSA9IDI1NlVMLAorfTsKKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIGZsYXNoIGNvbmZpZyBhcmVhLgorICovCitlbnVtIF9mbGFzaF9jb25maWdfYXJlYV9yYW5nZQoreworICAgIGtGTEFTSF9Db25maWdBcmVhU3RhcnQgPSAweDQwMFUsCisgICAga0ZMQVNIX0NvbmZpZ0FyZWFFbmQgPSAweDQwRlUKK307CisKKy8qIQorICogQG5hbWUgRmxhc2ggcmVnaXN0ZXIgYWNjZXNzIHR5cGUgZGVmaW5lcworICogQHsKKyAqLworI2RlZmluZSBGVEZ4X1JFRzhfQUNDRVNTX1RZUEUgdm9sYXRpbGUgdWludDhfdCAqCisjZGVmaW5lIEZURnhfUkVHMzJfQUNDRVNTX1RZUEUgdm9sYXRpbGUgdWludDMyX3QgKgorLypAfSovCisKKy8qIQorICogQGJyaWVmIE1DTSBjYWNoZSByZWdpc3RlciBhY2Nlc3MgaW5mbyBkZWZpbmVzLgorICovCisjaWYgZGVmaW5lZChNQ01fUExBQ1JfQ0ZDQ19NQVNLKQorI2RlZmluZSBNQ01fQ0FDSEVfQ0xFQVJfTUFTSyBNQ01fUExBQ1JfQ0ZDQ19NQVNLCisjZGVmaW5lIE1DTV9DQUNIRV9DTEVBUl9TSElGVCBNQ01fUExBQ1JfQ0ZDQ19TSElGVAorI2lmIGRlZmluZWQoTUNNKQorI2RlZmluZSBNQ00wX0NBQ0hFX1JFRyBNQ00tPlBMQUNSCisjZWxpZiBkZWZpbmVkKE1DTTApCisjZGVmaW5lIE1DTTBfQ0FDSEVfUkVHIE1DTTAtPlBMQUNSCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1DTTEpCisjZGVmaW5lIE1DTTFfQ0FDSEVfUkVHIE1DTTEtPlBMQUNSCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoTUNNX0NQQ1IyX0NDQkNfTUFTSykKKyNkZWZpbmUgTUNNX0NBQ0hFX0NMRUFSX01BU0sgTUNNX0NQQ1IyX0NDQkNfTUFTSworI2RlZmluZSBNQ01fQ0FDSEVfQ0xFQVJfU0hJRlQgTUNNX0NQQ1IyX0NDQkNfU0hJRlQKKyNpZiBkZWZpbmVkKE1DTSkKKyNkZWZpbmUgTUNNMF9DQUNIRV9SRUcgTUNNLT5DUENSMgorI2VsaWYgZGVmaW5lZChNQ00wKQorI2RlZmluZSBNQ00wX0NBQ0hFX1JFRyBNQ00wLT5DUENSMgorI2VuZGlmCisjaWYgZGVmaW5lZChNQ00xKQorI2RlZmluZSBNQ00xX0NBQ0hFX1JFRyBNQ00xLT5DUENSMgorI2VuZGlmCisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgTVNDTSBjYWNoZSByZWdpc3RlciBhY2Nlc3MgaW5mbyBkZWZpbmVzLgorICovCisjaWYgZGVmaW5lZChNU0NNX09DTURSX09DTTFfTUFTSykKKyNkZWZpbmUgTVNDTV9TUEVDVUxBVElPTl9ESVNBQkxFX01BU0sgTVNDTV9PQ01EUl9PQ00xX01BU0sKKyNkZWZpbmUgTVNDTV9TUEVDVUxBVElPTl9ESVNBQkxFX1NISUZUIE1TQ01fT0NNRFJfT0NNMV9TSElGVAorI2RlZmluZSBNU0NNX1NQRUNVTEFUSU9OX0RJU0FCTEUoeCkgTVNDTV9PQ01EUl9PQ00xKHgpCisjZWxpZiBkZWZpbmVkKE1TQ01fT0NNRFJfT0NNQzFfTUFTSykKKyNkZWZpbmUgTVNDTV9TUEVDVUxBVElPTl9ESVNBQkxFX01BU0sgTVNDTV9PQ01EUl9PQ01DMV9NQVNLCisjZGVmaW5lIE1TQ01fU1BFQ1VMQVRJT05fRElTQUJMRV9TSElGVCBNU0NNX09DTURSX09DTUMxX1NISUZUCisjZGVmaW5lIE1TQ01fU1BFQ1VMQVRJT05fRElTQUJMRSh4KSBNU0NNX09DTURSX09DTUMxKHgpCisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgTVNDTSBwcmVmZXRjaCBzcGVjdWxhdGlvbiBkZWZpbmVzLgorICovCisjZGVmaW5lIE1TQ01fT0NNRFJfT0NNQzFfREZEU19NQVNLICgweDEwVSkKKyNkZWZpbmUgTVNDTV9PQ01EUl9PQ01DMV9ERkNTX01BU0sgKDB4MjBVKQorCisjZGVmaW5lIE1TQ01fT0NNRFJfT0NNQzFfREZEU19TSElGVCAoNFUpCisjZGVmaW5lIE1TQ01fT0NNRFJfT0NNQzFfREZDU19TSElGVCAoNVUpCisKKy8qIQorICogQGJyaWVmIEZsYXNoIHNpemUgZW5jb2RpbmcgcnVsZS4KKyAqLworI2RlZmluZSBGTEFTSF9NRU1PUllfU0laRV9FTkNPRElOR19SVUxFX0sxXzIgKDB4MDBVKQorI2RlZmluZSBGTEFTSF9NRU1PUllfU0laRV9FTkNPRElOR19SVUxFX0szICgweDAxVSkKKworI2lmIGRlZmluZWQoSzMyVzA0MlMxTTJfTTBQX1NFUklFUykgfHwgZGVmaW5lZChLMzJXMDQyUzFNMl9NNF9TRVJJRVMpCisjZGVmaW5lIEZMQVNIX01FTU9SWV9TSVpFX0VOQ09ESU5HX1JVTEUgKEZMQVNIX01FTU9SWV9TSVpFX0VOQ09ESU5HX1JVTEVfSzMpCisjZWxzZQorI2RlZmluZSBGTEFTSF9NRU1PUllfU0laRV9FTkNPRElOR19SVUxFIChGTEFTSF9NRU1PUllfU0laRV9FTkNPRElOR19SVUxFX0sxXzIpCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQKKy8qISBAYnJpZWYgQ29weSBmbGFzaF9ydW5fY29tbWFuZCgpIHRvIFJBTSovCitzdGF0aWMgdm9pZCBjb3B5X2ZsYXNoX3J1bl9jb21tYW5kKHVpbnQzMl90ICpmbGFzaFJ1bkNvbW1hbmQpOworLyohIEBicmllZiBDb3B5IGZsYXNoX2NhY2hlX2NsZWFyX2NvbW1hbmQoKSB0byBSQU0qLworc3RhdGljIHZvaWQgY29weV9mbGFzaF9jb21tb25fYml0X29wZXJhdGlvbih1aW50MzJfdCAqZmxhc2hDb21tb25CaXRPcGVyYXRpb24pOworLyohIEBicmllZiBDaGVjayB3aGV0aGVyIGZsYXNoIGV4ZWN1dGUtaW4tcmFtIGZ1bmN0aW9ucyBhcmUgcmVhZHkqLworc3RhdGljIHN0YXR1c190IGZsYXNoX2NoZWNrX2V4ZWN1dGVfaW5fcmFtX2Z1bmN0aW9uX2luZm8oZmxhc2hfY29uZmlnX3QgKmNvbmZpZyk7CisjZW5kaWYgLyogRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCisKKy8qISBAYnJpZWYgSW50ZXJuYWwgZnVuY3Rpb24gRmxhc2ggY29tbWFuZCBzZXF1ZW5jZS4gQ2FsbGVkIGJ5IGRyaXZlciBBUElzIG9ubHkqLworc3RhdGljIHN0YXR1c190IGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoZmxhc2hfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qISBAYnJpZWYgUGVyZm9ybSB0aGUgY2FjaGUgY2xlYXIgdG8gdGhlIGZsYXNoKi8KK3ZvaWQgZmxhc2hfY2FjaGVfY2xlYXIoZmxhc2hfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qISBAYnJpZWYgUHJvY2VzcyB0aGUgY2FjaGUgdG8gdGhlIGZsYXNoKi8KK3N0YXRpYyB2b2lkIGZsYXNoX2NhY2hlX2NsZWFyX3Byb2Nlc3MoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfY2FjaGVfY2xlYXJfcHJvY2Vzc190IHByb2Nlc3MpOworCisvKiEgQGJyaWVmIFZhbGlkYXRlcyB0aGUgcmFuZ2UgYW5kIGFsaWdubWVudCBvZiB0aGUgZ2l2ZW4gYWRkcmVzcyByYW5nZS4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX2NoZWNrX3JhbmdlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3RhcnRBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWxpZ25tZW50QmFzZWxpbmUpOworLyohIEBicmllZiBHZXRzIHRoZSByaWdodCBhZGRyZXNzLCBzZWN0b3IgYW5kIGJsb2NrIHNpemUgb2YgY3VycmVudCBmbGFzaCB0eXBlIHdoaWNoIGlzIGluZGljYXRlZCBieSBhZGRyZXNzLiovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfZ2V0X21hdGNoZWRfb3BlcmF0aW9uX2luZm8oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX29wZXJhdGlvbl9jb25maWdfdCAqaW5mbyk7CisvKiEgQGJyaWVmIFZhbGlkYXRlcyB0aGUgZ2l2ZW4gdXNlciBrZXkgZm9yIGZsYXNoIGVyYXNlIEFQSXMuKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9jaGVja191c2VyX2tleSh1aW50MzJfdCBrZXkpOworCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorLyohIEBicmllZiBVcGRhdGVzIEZsZXhOVk0gbWVtb3J5IHBhcnRpdGlvbiBzdGF0dXMgYWNjb3JkaW5nIHRvIGRhdGEgZmxhc2ggMCBJRlIuKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF91cGRhdGVfZmxleG52bV9tZW1vcnlfcGFydGl0aW9uX3N0YXR1cyhmbGFzaF9jb25maWdfdCAqY29uZmlnKTsKKyNlbmRpZiAvKiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfUkVTT1VSQ0VfQ01ECisvKiEgQGJyaWVmIFZhbGlkYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIGdpdmVuIHJlc291cmNlIGFkZHJlc3MuKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9jaGVja19yZXNvdXJjZV9yYW5nZSh1aW50MzJfdCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFsaWdubWVudEJhc2VsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX3JlYWRfcmVzb3VyY2Vfb3B0aW9uX3Qgb3B0aW9uKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF9SRVNPVVJDRV9DTUQgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NXQVBfQ09OVFJPTF9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TV0FQX0NPTlRST0xfQ01ECisvKiEgQGJyaWVmIFZhbGlkYXRlcyB0aGUgZ2l2ZWQgc3dhcCBjb250cm9sIG9wdGlvbi4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX2NoZWNrX3N3YXBfY29udHJvbF9vcHRpb24oZmxhc2hfc3dhcF9jb250cm9sX29wdGlvbl90IG9wdGlvbik7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NXQVBfQ09OVFJPTF9DTUQgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BGTEFTSF9CTE9DS19TV0FQKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVAKKy8qISBAYnJpZWYgVmFsaWRhdGVzIHRoZSBnaXZlZCBhZGRyZXNzIHRvIHNlZSBpZiBpdCBpcyBlcXVhbCB0byBzd2FwIGluZGljYXRvciBhZGRyZXNzIGluIHBmbGFzaCBzd2FwIElGUi4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX3ZhbGlkYXRlX3N3YXBfaW5kaWNhdG9yX2FkZHJlc3MoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3QgYWRkcmVzcyk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BGTEFTSF9CTE9DS19TV0FQICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TRVRfRkxFWFJBTV9GVU5DVElPTl9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TRVRfRkxFWFJBTV9GVU5DVElPTl9DTUQKKy8qISBAYnJpZWYgVmFsaWRhdGVzIHRoZSBnaXZlZCBmbGV4cmFtIGZ1bmN0aW9uIG9wdGlvbi4qLworc3RhdGljIGlubGluZSBzdGF0dXNfdCBmbGFzbl9jaGVja19mbGV4cmFtX2Z1bmN0aW9uX29wdGlvbl9yYW5nZShmbGFzaF9mbGV4cmFtX2Z1bmN0aW9uX29wdGlvbl90IG9wdGlvbik7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCAqLworCisvKiEgQGJyaWVmIEdldHMgdGhlIGZsYXNoIHByb3RlY3Rpb24gaW5mb3JtYXRpb24gKHJlZ2lvbiBzaXplLCByZWdpb24gY291bnQpLiovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfZ2V0X3Byb3RlY3Rpb25faW5mbyhmbGFzaF9jb25maWdfdCAqY29uZmlnLCBmbGFzaF9wcm90ZWN0aW9uX2NvbmZpZ190ICppbmZvKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0FDQ0VTU19DT05UUk9MKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wKKy8qISBAYnJpZWYgR2V0cyB0aGUgZmxhc2ggRXhlY3V0ZS1Pbmx5IGFjY2VzcyBpbmZvcm1hdGlvbiAoU2VnbWVudCBzaXplLCBTZWdtZW50IGNvdW50KS4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX2dldF9hY2Nlc3NfaW5mbyhmbGFzaF9jb25maWdfdCAqY29uZmlnLCBmbGFzaF9hY2Nlc3NfY29uZmlnX3QgKmluZm8pOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTCAqLworCisjaWYgRkxBU0hfQ0FDSEVfSVNfQ09OVFJPTExFRF9CWV9NQ00KKy8qISBAYnJpZWYgUGVyZm9ybXMgdGhlIGNhY2hlIGNsZWFyIHRvIHRoZSBmbGFzaCBieSBNQ00uKi8KK3ZvaWQgbWNtX2ZsYXNoX2NhY2hlX2NsZWFyKGZsYXNoX2NvbmZpZ190ICpjb25maWcpOworI2VuZGlmIC8qIEZMQVNIX0NBQ0hFX0lTX0NPTlRST0xMRURfQllfTUNNICovCisKKyNpZiBGTEFTSF9DQUNIRV9JU19DT05UUk9MTEVEX0JZX0ZNQworLyohIEBicmllZiBQZXJmb3JtcyB0aGUgY2FjaGUgY2xlYXIgdG8gdGhlIGZsYXNoIGJ5IEZNQy4qLwordm9pZCBmbWNfZmxhc2hfY2FjaGVfY2xlYXIodm9pZCk7CisjZW5kaWYgLyogRkxBU0hfQ0FDSEVfSVNfQ09OVFJPTExFRF9CWV9GTUMgKi8KKworI2lmIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfTVNDTQorLyohIEBicmllZiBTZXRzIHRoZSBwcmVmZXRjaCBzcGVjdWxhdGlvbiBidWZmZXIgdG8gdGhlIGZsYXNoIGJ5IE1TQ00uKi8KK3ZvaWQgbXNjbV9mbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9lbmFibGUoYm9vbCBlbmFibGUpOworI2VuZGlmIC8qIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfTVNDTSAqLworCisjaWYgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9GTUMKKy8qISBAYnJpZWYgUGVyZm9ybXMgdGhlIHByZWZldGNoIHNwZWN1bGF0aW9uIGJ1ZmZlciBjbGVhciB0byB0aGUgZmxhc2ggYnkgRk1DLiovCit2b2lkIGZtY19mbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9jbGVhcih2b2lkKTsKKyNlbmRpZiAvKiBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX0ZNQyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQGJyaWVmIEFjY2VzcyB0byBGVEZ4LT5GQ0NPQiAqLwordm9sYXRpbGUgdWludDMyX3QgKmNvbnN0IGtGQ0NPQnggPSAodm9sYXRpbGUgdWludDMyX3QgKikmRlRGeF9GQ0NPQjNfUkVHOworLyohIEBicmllZiBBY2Nlc3MgdG8gRlRGeC0+RlBST1QgKi8KK3ZvbGF0aWxlIHVpbnQzMl90ICpjb25zdCBrRlBST1RMID0gKHZvbGF0aWxlIHVpbnQzMl90ICopJkZURnhfRlBST1RfTE9XX1JFRzsKKyNpZiBkZWZpbmVkKEZURnhfRlBST1RfSElHSF9SRUcpCit2b2xhdGlsZSB1aW50MzJfdCAqY29uc3Qga0ZQUk9USCA9ICh2b2xhdGlsZSB1aW50MzJfdCAqKSZGVEZ4X0ZQUk9UX0hJR0hfUkVHOworI2VuZGlmCisKKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgJiYgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9QUk9URUNUSU9OX1JFR0lTVEVSCit2b2xhdGlsZSB1aW50OF90ICpjb25zdCBrRlBST1RTTCA9ICh2b2xhdGlsZSB1aW50OF90ICopJkZURnhfRlBST1RTTF9SRUc7Cit2b2xhdGlsZSB1aW50OF90ICpjb25zdCBrRlBST1RTSCA9ICh2b2xhdGlsZSB1aW50OF90ICopJkZURnhfRlBST1RTSF9SRUc7CisjZW5kaWYKKworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVAorLyohIEBicmllZiBBIGZ1bmN0aW9uIHBvaW50ZXIgdXNlZCB0byBwb2ludCB0byByZWxvY2F0ZWQgZmxhc2hfcnVuX2NvbW1hbmQoKSAqLworc3RhdGljIHZvaWQgKCpjYWxsRmxhc2hSdW5Db21tYW5kKShGVEZ4X1JFRzhfQUNDRVNTX1RZUEUgZnRmeF9mc3RhdCk7CisvKiEgQGJyaWVmIEEgZnVuY3Rpb24gcG9pbnRlciB1c2VkIHRvIHBvaW50IHRvIHJlbG9jYXRlZCBmbGFzaF9jb21tb25fYml0X29wZXJhdGlvbigpICovCitzdGF0aWMgdm9pZCAoKmNhbGxGbGFzaENvbW1vbkJpdE9wZXJhdGlvbikoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJpdE1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYml0U2hpZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYml0VmFsdWUpOworCisvKiEKKyAqIEBicmllZiBQb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIG9mIGZsYXNoX3J1bl9jb21tYW5kKCkKKyAqCisgKiBOb3RlMTogVGhlIHByb3RvdHlwZSBvZiBDIGZ1bmN0aW9uIGlzIHNob3duIGFzIGJlbG93OgorICogQGNvZGUKKyAqICAgdm9pZCBmbGFzaF9ydW5fY29tbWFuZChGVEZ4X1JFRzhfQUNDRVNTX1RZUEUgZnRmeF9mc3RhdCkKKyAqICAgeworICogICAgICAgLy8gY2xlYXIgQ0NJRiBiaXQKKyAqICAgICAgICpmdGZ4X2ZzdGF0ID0gRlRGeF9GU1RBVF9DQ0lGX01BU0s7CisgKgorICogICAgICAgLy8gQ2hlY2sgQ0NJRiBiaXQgb2YgdGhlIGZsYXNoIHN0YXR1cyByZWdpc3Rlciwgd2FpdCB0aWxsIGl0IGlzIHNldC4KKyAqICAgICAgIC8vIElQIHRlYW0gaW5kaWNhdGVzIHRoYXQgdGhpcyBsb29wIHdpbGwgYWx3YXlzIGNvbXBsZXRlLgorICogICAgICAgd2hpbGUgKCEoKCpmdGZ4X2ZzdGF0KSAmIEZURnhfRlNUQVRfQ0NJRl9NQVNLKSkKKyAqICAgICAgIHsKKyAqICAgICAgIH0KKyAqICAgfQorICogQGVuZGNvZGUKKyAqIE5vdGUyOiBUaGUgYmluYXJ5IGNvZGUgaXMgZ2VuZXJhdGVkIGJ5IElBUiA3LjcwLjEKKyAqLworY29uc3Qgc3RhdGljIHVpbnQxNl90IHNfZmxhc2hSdW5Db21tYW5kRnVuY3Rpb25Db2RlW10gPSB7CisgICAgMHgyMTgwLCAvKiBNT1ZTICBSMSwgIzEyOCA7IDB4ODAgKi8KKyAgICAweDcwMDEsIC8qIFNUUkIgIFIxLCBbUjBdICovCisgICAgLyogQDQ6ICovCisgICAgMHg3ODAyLCAvKiBMRFJCICBSMiwgW1IwXSAqLworICAgIDB4NDIwYSwgLyogVFNUICAgUjIsIFIxICovCisgICAgMHhkMGZjLCAvKiBCRVEuTiBANCAqLworICAgIDB4NDc3MCAgLyogQlggICAgTFIgKi8KK307CisKKy8qIQorICogQGJyaWVmIFBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgb2YgZmxhc2hfY29tbW9uX2JpdF9vcGVyYXRpb24oKQorICoKKyAqIE5vdGUxOiBUaGUgcHJvdG90eXBlIG9mIEMgZnVuY3Rpb24gaXMgc2hvd24gYXMgYmVsb3c6CisgKiBAY29kZQorICogICB2b2lkIGZsYXNoX2NvbW1vbl9iaXRfb3BlcmF0aW9uKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUgYmFzZSwgdWludDMyX3QgYml0TWFzaywgdWludDMyX3QgYml0U2hpZnQsIHVpbnQzMl90CisgKiBiaXRWYWx1ZSkKKyAqICAgeworICogICAgICAgaWYgKGJpdE1hc2spCisgKiAgICAgICB7CisgKiAgICAgICAgICAgdWludDMyX3QgdmFsdWUgPSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoYml0VmFsdWUpKSA8PCBiaXRTaGlmdCkpICYgYml0TWFzayk7CisgKiAgICAgICAgICAgKmJhc2UgPSAoKmJhc2UgJiAofmJpdE1hc2spKSB8IHZhbHVlOworICogICAgICAgfQorICoKKyAqICAgICAgIF9fSVNCKCk7CisgKiAgICAgICBfX0RTQigpOworICogICB9CisgKiBAZW5kY29kZQorICogTm90ZTI6IFRoZSBiaW5hcnkgY29kZSBpcyBnZW5lcmF0ZWQgYnkgSUFSIDcuNzAuMQorICovCitjb25zdCBzdGF0aWMgdWludDE2X3Qgc19mbGFzaENvbW1vbkJpdE9wZXJhdGlvbkZ1bmN0aW9uQ29kZVtdID0geworICAgIDB4YjUxMCwgLyogUFVTSCAge1I0LCBMUn0gKi8KKyAgICAweDI5MDAsIC8qIENNUCAgIFIxLCAjMCAqLworICAgIDB4ZDAwNSwgLyogQkVRLk4gQDEyICovCisgICAgMHg2ODA0LCAvKiBMRFIgICBSNCwgW1IwXSAqLworICAgIDB4NDM4YywgLyogQklDUyAgUjQsIFI0LCBSMSAqLworICAgIDB4NDA5MywgLyogTFNMUyAgUjMsIFIzLCBSMiAqLworICAgIDB4NDAxOSwgLyogQU5EUyAgUjEsIFIxLCBSMyAqLworICAgIDB4NDMyMSwgLyogT1JSUyAgUjEsIFIxLCBSNCAqLworICAgIDB4NjAwMSwgLyogU1RSICAgUjEsIFtSMF0gKi8KKyAgICAvKiAgQDEyOiAqLworICAgIDB4ZjNiZiwgMHg4ZjZmLCAvKiBJU0IgKi8KKyAgICAweGYzYmYsIDB4OGY0ZiwgLyogRFNCICovCisgICAgMHhiZDEwICAgICAgICAgIC8qIFBPUCAgIHtSNCwgUEN9ICovCit9OworI2VuZGlmIC8qIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAqLworCisjaWYgKEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAhRkxBU0hfRFJJVkVSX0lTX0VYUE9SVEVEKQorLyohIEBicmllZiBBIHN0YXRpYyBidWZmZXIgdXNlZCB0byBob2xkIGZsYXNoX3J1bl9jb21tYW5kKCkgKi8KK3N0YXRpYyB1aW50MzJfdCBzX2ZsYXNoUnVuQ29tbWFuZFtrRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25NYXhTaXplSW5Xb3Jkc107CisvKiEgQGJyaWVmIEEgc3RhdGljIGJ1ZmZlciB1c2VkIHRvIGhvbGQgZmxhc2hfY29tbW9uX2JpdF9vcGVyYXRpb24oKSAqLworc3RhdGljIHVpbnQzMl90IHNfZmxhc2hDb21tb25CaXRPcGVyYXRpb25ba0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTWF4U2l6ZUluV29yZHNdOworLyohIEBicmllZiBGbGFzaCBleGVjdXRlLWluLXJhbSBmdW5jdGlvbiBpbmZvcm1hdGlvbiAqLworc3RhdGljIGZsYXNoX2V4ZWN1dGVfaW5fcmFtX2Z1bmN0aW9uX2NvbmZpZ190IHNfZmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm87CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgVGFibGUgb2YgcGZsYXNoIHNpemVzLgorICoKKyAqICBUaGUgaW5kZXggaW50byB0aGlzIHRhYmxlIGlzIHRoZSB2YWx1ZSBvZiB0aGUgU0lNX0ZDRkcxLlBGU0laRSBiaXRmaWVsZC4KKyAqCisgKiAgVGhlIHZhbHVlcyBpbiB0aGlzIHRhYmxlIGhhdmUgYmVlbiByaWdodCBzaGlmdGVkIDEwIGJpdHMgc28gdGhhdCB0aGV5IHdpbGwgYWxsIGZpdCB3aXRoaW4KKyAqICBhbiAxNi1iaXQgaW50ZWdlci4gVG8gZ2V0IHRoZSBhY3R1YWwgZmxhc2ggZGVuc2l0eSwgeW91IG11c3QgbGVmdCBzaGlmdCB0aGUgbG9va2VkIHVwIHZhbHVlCisgKiAgYnkgMTAgYml0cy4KKyAqCisgKiAgRWxlbWVudHMgb2YgdGhpcyB0YWJsZSBoYXZlIGEgdmFsdWUgb2YgMCBpbiBjYXNlcyB3aGVyZSB0aGUgUEZTSVpFIGJpdGZpZWxkIHZhbHVlIGlzCisgKiAgcmVzZXJ2ZWQuCisgKgorICogIENvZGUgdG8gdXNlIHRoZSB0YWJsZToKKyAqICBAY29kZQorICogICAgICB1aW50OF90IHBmc2l6ZSA9IChTSU0tPkZDRkcxICYgU0lNX0ZDRkcxX1BGU0laRV9NQVNLKSA+PiBTSU1fRkNGRzFfUEZTSVpFX1NISUZUOworICogICAgICBmbGFzaERlbnNpdHkgPSAoKHVpbnQzMl90KWtQRmxhc2hEZW5zaXRpZXNbcGZzaXplXSkgPDwgMTA7CisgKiAgQGVuZGNvZGUKKyAqLworI2lmIChGTEFTSF9NRU1PUllfU0laRV9FTkNPRElOR19SVUxFID09IEZMQVNIX01FTU9SWV9TSVpFX0VOQ09ESU5HX1JVTEVfSzFfMikKK2NvbnN0IHVpbnQxNl90IGtQRmxhc2hEZW5zaXRpZXNbXSA9IHsKKyAgICA4LCAgICAvKiAweDAgLSA4MTkyLCA4S0IgKi8KKyAgICAxNiwgICAvKiAweDEgLSAxNjM4NCwgMTZLQiAqLworICAgIDI0LCAgIC8qIDB4MiAtIDI0NTc2LCAyNEtCICovCisgICAgMzIsICAgLyogMHgzIC0gMzI3NjgsIDMyS0IgKi8KKyAgICA0OCwgICAvKiAweDQgLSA0OTE1MiwgNDhLQiAqLworICAgIDY0LCAgIC8qIDB4NSAtIDY1NTM2LCA2NEtCICovCisgICAgOTYsICAgLyogMHg2IC0gOTgzMDQsIDk2S0IgKi8KKyAgICAxMjgsICAvKiAweDcgLSAxMzEwNzIsIDEyOEtCICovCisgICAgMTkyLCAgLyogMHg4IC0gMTk2NjA4LCAxOTJLQiAqLworICAgIDI1NiwgIC8qIDB4OSAtIDI2MjE0NCwgMjU2S0IgKi8KKyAgICAzODQsICAvKiAweGEgLSAzOTMyMTYsIDM4NEtCICovCisgICAgNTEyLCAgLyogMHhiIC0gNTI0Mjg4LCA1MTJLQiAqLworICAgIDc2OCwgIC8qIDB4YyAtIDc4NjQzMiwgNzY4S0IgKi8KKyAgICAxMDI0LCAvKiAweGQgLSAxMDQ4NTc2LCAxTUIgKi8KKyAgICAxNTM2LCAvKiAweGUgLSAxNTcyODY0LCAxLjVNQiAqLworICAgIC8qIDIwNDgsICAweGYgLSAyMDk3MTUyLCAyTUIgKi8KK307CisjZWxpZihGTEFTSF9NRU1PUllfU0laRV9FTkNPRElOR19SVUxFID09IEZMQVNIX01FTU9SWV9TSVpFX0VOQ09ESU5HX1JVTEVfSzMpCitjb25zdCB1aW50MTZfdCBrUEZsYXNoRGVuc2l0aWVzW10gPSB7CisgICAgMCwgICAgLyogMHgwIC0gdW5kZWZpbmVkICovCisgICAgMCwgICAgLyogMHgxIC0gdW5kZWZpbmVkICovCisgICAgMCwgICAgLyogMHgyIC0gdW5kZWZpbmVkICovCisgICAgMCwgICAgLyogMHgzIC0gdW5kZWZpbmVkICovCisgICAgMCwgICAgLyogMHg0IC0gdW5kZWZpbmVkICovCisgICAgMCwgICAgLyogMHg1IC0gdW5kZWZpbmVkICovCisgICAgMCwgICAgLyogMHg2IC0gdW5kZWZpbmVkICovCisgICAgMCwgICAgLyogMHg3IC0gdW5kZWZpbmVkICovCisgICAgMCwgICAgLyogMHg4IC0gdW5kZWZpbmVkICovCisgICAgMCwgICAgLyogMHg5IC0gdW5kZWZpbmVkICovCisgICAgMjU2LCAgLyogMHhhIC0gMjYyMTQ0LCAyNTZLQiAqLworICAgIDAsICAgIC8qIDB4YiAtIHVuZGVmaW5lZCAqLworICAgIDEwMjQsIC8qIDB4YyAtIDEwNDg1NzYsIDFNQiAqLworICAgIDAsICAgIC8qIDB4ZCAtIHVuZGVmaW5lZCAqLworICAgIDAsICAgIC8qIDB4ZSAtIHVuZGVmaW5lZCAqLworICAgIDAsICAgIC8qIDB4ZiAtIHVuZGVmaW5lZCAqLworfTsKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdHVzX3QgRkxBU0hfSW5pdChmbGFzaF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQKKyAgICBpZiAoY29uZmlnLT5GbGFzaE1lbW9yeUluZGV4ID09ICh1aW50OF90KWtGTEFTSF9NZW1vcnlJbmRleFNlY29uZGFyeUZsYXNoKQorICAgIHsKKy8qIGNhbGN1bGF0ZSB0aGUgZmxhc2ggZGVuc2l0eSBmcm9tIFNJTV9GQ0ZHMS5QRlNJWkUgKi8KKyNpZiBkZWZpbmVkKFNJTV9GQ0ZHMV9DT1JFMV9QRlNJWkVfTUFTSykKKyAgICAgICAgdWludDMyX3QgZmxhc2hEZW5zaXR5OworICAgICAgICB1aW50OF90IHBmc2l6ZSA9IChTSU0tPkZDRkcxICYgU0lNX0ZDRkcxX0NPUkUxX1BGU0laRV9NQVNLKSA+PiBTSU1fRkNGRzFfQ09SRTFfUEZTSVpFX1NISUZUOworICAgICAgICBpZiAocGZzaXplID09IDB4ZikKKyAgICAgICAgeworICAgICAgICAgICAgZmxhc2hEZW5zaXR5ID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIXzFfQkxPQ0tfQ09VTlQgKiBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfMV9CTE9DS19TSVpFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZmxhc2hEZW5zaXR5ID0gKCh1aW50MzJfdClrUEZsYXNoRGVuc2l0aWVzW3Bmc2l6ZV0pIDw8IDEwOworICAgICAgICB9CisgICAgICAgIGNvbmZpZy0+UEZsYXNoVG90YWxTaXplID0gZmxhc2hEZW5zaXR5OworI2Vsc2UKKyAgICAgICAgLyogVW51c2VkIGNvZGUgdG8gc29sdmUgTUlTUkEtQyBpc3N1ZSovCisgICAgICAgIGNvbmZpZy0+UEZsYXNoQmxvY2tCYXNlID0ga1BGbGFzaERlbnNpdGllc1swXTsKKyAgICAgICAgY29uZmlnLT5QRmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfMV9CTE9DS19DT1VOVCAqIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF8xX0JMT0NLX1NJWkU7CisjZW5kaWYKKyAgICAgICAgY29uZmlnLT5QRmxhc2hCbG9ja0Jhc2UgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfMV9TVEFSVF9BRERSRVNTOworICAgICAgICBjb25maWctPlBGbGFzaEJsb2NrQ291bnQgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfMV9CTE9DS19DT1VOVDsKKyAgICAgICAgY29uZmlnLT5QRmxhc2hTZWN0b3JTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIXzFfQkxPQ0tfU0VDVE9SX1NJWkU7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgKi8KKyAgICB7CisgICAgICAgIHVpbnQzMl90IGZsYXNoRGVuc2l0eTsKKworLyogY2FsY3VsYXRlIHRoZSBmbGFzaCBkZW5zaXR5IGZyb20gU0lNX0ZDRkcxLlBGU0laRSAqLworI2lmIGRlZmluZWQoU0lNX0ZDRkcxX0NPUkUwX1BGU0laRV9NQVNLKQorICAgICAgICB1aW50OF90IHBmc2l6ZSA9IChTSU0tPkZDRkcxICYgU0lNX0ZDRkcxX0NPUkUwX1BGU0laRV9NQVNLKSA+PiBTSU1fRkNGRzFfQ09SRTBfUEZTSVpFX1NISUZUOworI2VsaWYgZGVmaW5lZChTSU1fRkNGRzFfUEZTSVpFX01BU0spCisgICAgICAgIHVpbnQ4X3QgcGZzaXplID0gKFNJTS0+RkNGRzEgJiBTSU1fRkNGRzFfUEZTSVpFX01BU0spID4+IFNJTV9GQ0ZHMV9QRlNJWkVfU0hJRlQ7CisjZWxzZQorI2Vycm9yICJVbmtub3duIGZsYXNoIHNpemUiCisjZW5kaWYKKyAgICAgICAgLyogUEZTSVpFPTB4ZiBtZWFucyB0aGF0IG9uIGN1c3RvbWVyIHBhcnRzIHRoZSBJRlIgd2FzIG5vdCBjb3JyZWN0bHkgcHJvZ3JhbW1lZC4KKyAgICAgICAgICogV2UganVzdCB1c2UgdGhlIHByZS1kZWZpbmVkIGZsYXNoIHNpemUgaW4gZmVhdHVyZSBmaWxlIGhlcmUgdG8gc3VwcG9ydCBwcmUtcHJvZHVjdGlvbiBwYXJ0cyAqLworICAgICAgICBpZiAocGZzaXplID09IDB4ZikKKyAgICAgICAgeworICAgICAgICAgICAgZmxhc2hEZW5zaXR5ID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX0NPVU5UICogRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1NJWkU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmbGFzaERlbnNpdHkgPSAoKHVpbnQzMl90KWtQRmxhc2hEZW5zaXRpZXNbcGZzaXplXSkgPDwgMTA7CisgICAgICAgIH0KKworICAgICAgICAvKiBmaWxsIG91dCBhIGZldyBvZiB0aGUgc3RydWN0dXJlIG1lbWJlcnMgKi8KKyAgICAgICAgY29uZmlnLT5QRmxhc2hCbG9ja0Jhc2UgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU1RBUlRfQUREUkVTUzsKKyAgICAgICAgY29uZmlnLT5QRmxhc2hUb3RhbFNpemUgPSBmbGFzaERlbnNpdHk7CisgICAgICAgIGNvbmZpZy0+UEZsYXNoQmxvY2tDb3VudCA9IEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19DT1VOVDsKKyAgICAgICAgY29uZmlnLT5QRmxhc2hTZWN0b3JTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1NFQ1RPUl9TSVpFOworICAgIH0KKworICAgIHsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0FDQ0VTU19DT05UUk9MCisjaWYgRkxBU0hfU1NEX0lTX1NFQ09OREFSWV9GTEFTSF9FTkFCTEVEICYmIEZMQVNIX1NTRF9TRUNPTkRBUllfRkxBU0hfSEFTX0lUU19PV05fQUNDRVNTX1JFR0lTVEVSCisgICAgICAgIGlmIChjb25maWctPkZsYXNoTWVtb3J5SW5kZXggPT0gKHVpbnQ4X3Qpa0ZMQVNIX01lbW9yeUluZGV4U2Vjb25kYXJ5Rmxhc2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbmZpZy0+UEZsYXNoQWNjZXNzU2VnbWVudFNpemUgPSBrRkxBU0hfQWNjZXNzU2VnbWVudEJhc2UgPDwgRlRGeC0+RkFDU1NTOworICAgICAgICAgICAgY29uZmlnLT5QRmxhc2hBY2Nlc3NTZWdtZW50Q291bnQgPSBGVEZ4LT5GQUNTTlM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbmZpZy0+UEZsYXNoQWNjZXNzU2VnbWVudFNpemUgPSBrRkxBU0hfQWNjZXNzU2VnbWVudEJhc2UgPDwgRlRGeC0+RkFDU1M7CisgICAgICAgICAgICBjb25maWctPlBGbGFzaEFjY2Vzc1NlZ21lbnRDb3VudCA9IEZURngtPkZBQ1NOOworICAgICAgICB9CisjZWxzZQorICAgICAgICBjb25maWctPlBGbGFzaEFjY2Vzc1NlZ21lbnRTaXplID0gMDsKKyAgICAgICAgY29uZmlnLT5QRmxhc2hBY2Nlc3NTZWdtZW50Q291bnQgPSAwOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTCAqLworICAgIH0KKworICAgIGNvbmZpZy0+UEZsYXNoQ2FsbGJhY2sgPSBOVUxMOworCisvKiBjb3B5IHJlcXVpcmVkIGZsYXNoIGNvbW1hbmRzIHRvIFJBTSAqLworI2lmIChGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgIUZMQVNIX0RSSVZFUl9JU19FWFBPUlRFRCkKKyAgICBpZiAoa1N0YXR1c19GTEFTSF9TdWNjZXNzICE9IGZsYXNoX2NoZWNrX2V4ZWN1dGVfaW5fcmFtX2Z1bmN0aW9uX2luZm8oY29uZmlnKSkKKyAgICB7CisgICAgICAgIHNfZmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm8uYWN0aXZlRnVuY3Rpb25Db3VudCA9IDA7CisgICAgICAgIHNfZmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm8uZmxhc2hSdW5Db21tYW5kID0gc19mbGFzaFJ1bkNvbW1hbmQ7CisgICAgICAgIHNfZmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm8uZmxhc2hDb21tb25CaXRPcGVyYXRpb24gPSBzX2ZsYXNoQ29tbW9uQml0T3BlcmF0aW9uOworICAgICAgICBjb25maWctPmZsYXNoRXhlY3V0ZUluUmFtRnVuY3Rpb25JbmZvID0gJnNfZmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm8uYWN0aXZlRnVuY3Rpb25Db3VudDsKKyAgICAgICAgRkxBU0hfUHJlcGFyZUV4ZWN1dGVJblJhbUZ1bmN0aW9ucyhjb25maWcpOworICAgIH0KKyNlbmRpZgorCisgICAgY29uZmlnLT5GbGV4UkFNQmxvY2tCYXNlID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9SQU1fU1RBUlRfQUREUkVTUzsKKyAgICBjb25maWctPkZsZXhSQU1Ub3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX1JBTV9TSVpFOworCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorICAgIHsKKyAgICAgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKyAgICAgICAgY29uZmlnLT5ERmxhc2hCbG9ja0Jhc2UgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9TVEFSVF9BRERSRVNTOworICAgICAgICByZXR1cm5Db2RlID0gZmxhc2hfdXBkYXRlX2ZsZXhudm1fbWVtb3J5X3BhcnRpdGlvbl9zdGF0dXMoY29uZmlnKTsKKyAgICAgICAgaWYgKHJldHVybkNvZGUgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKworc3RhdHVzX3QgRkxBU0hfU2V0Q2FsbGJhY2soZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfY2FsbGJhY2tfdCBjYWxsYmFjaykKK3sKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgY29uZmlnLT5QRmxhc2hDYWxsYmFjayA9IGNhbGxiYWNrOworCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVAorc3RhdHVzX3QgRkxBU0hfUHJlcGFyZUV4ZWN1dGVJblJhbUZ1bmN0aW9ucyhmbGFzaF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGZsYXNoX2V4ZWN1dGVfaW5fcmFtX2Z1bmN0aW9uX2NvbmZpZ190ICpmbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mbzsKKworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBmbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mbyA9IChmbGFzaF9leGVjdXRlX2luX3JhbV9mdW5jdGlvbl9jb25maWdfdCAqKWNvbmZpZy0+Zmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm87CisKKyAgICBjb3B5X2ZsYXNoX3J1bl9jb21tYW5kKGZsYXNoRXhlY3V0ZUluUmFtRnVuY3Rpb25JbmZvLT5mbGFzaFJ1bkNvbW1hbmQpOworICAgIGNvcHlfZmxhc2hfY29tbW9uX2JpdF9vcGVyYXRpb24oZmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm8tPmZsYXNoQ29tbW9uQml0T3BlcmF0aW9uKTsKKyAgICBmbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mby0+YWN0aXZlRnVuY3Rpb25Db3VudCA9IGtGTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvblRvdGFsTnVtOworCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKyNlbmRpZiAvKiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgKi8KKworc3RhdHVzX3QgRkxBU0hfRXJhc2VBbGwoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qga2V5KQoreworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogcHJlcGFyaW5nIHBhc3NpbmcgcGFyYW1ldGVyIHRvIGVyYXNlIGFsbCBmbGFzaCBibG9ja3MgKi8KKyAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMyhGVEZ4X0VSQVNFX0FMTF9CTE9DSywgMHhGRkZGRkZVKTsKKworICAgIC8qIFZhbGlkYXRlIHRoZSB1c2VyIGtleSAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9jaGVja191c2VyX2tleShrZXkpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgfQorCisgICAgZmxhc2hfY2FjaGVfY2xlYXJfcHJvY2Vzcyhjb25maWcsIGtGTEFTSF9DYWNoZUNsZWFyUHJvY2Vzc1ByZSk7CisKKyAgICAvKiBjYWxsaW5nIGZsYXNoIGNvbW1hbmQgc2VxdWVuY2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7CisKKyAgICBmbGFzaF9jYWNoZV9jbGVhcihjb25maWcpOworCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorICAgIC8qIERhdGEgZmxhc2ggSUZSIHdpbGwgYmUgZXJhc2VkIGJ5IGVyYXNlIGFsbCBjb21tYW5kLCBzbyB3ZSBuZWVkIHRvCisgICAgICogIHVwZGF0ZSBGbGV4TlZNIG1lbW9yeSBwYXJ0aXRpb24gc3RhdHVzIHN5bmNocm9ub3VzbHkgKi8KKyAgICBpZiAocmV0dXJuQ29kZSA9PSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgeworICAgICAgICByZXR1cm5Db2RlID0gZmxhc2hfdXBkYXRlX2ZsZXhudm1fbWVtb3J5X3BhcnRpdGlvbl9zdGF0dXMoY29uZmlnKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiByZXR1cm5Db2RlOworfQorCitzdGF0dXNfdCBGTEFTSF9FcmFzZShmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgbGVuZ3RoSW5CeXRlcywgdWludDMyX3Qga2V5KQoreworICAgIHVpbnQzMl90IHNlY3RvclNpemU7CisgICAgZmxhc2hfb3BlcmF0aW9uX2NvbmZpZ190IGZsYXNoT3BlcmF0aW9uSW5mbzsKKyAgICB1aW50MzJfdCBlbmRBZGRyZXNzOyAgICAgIC8qIHN0b3JpbmcgZW5kIGFkZHJlc3MgKi8KKyAgICB1aW50MzJfdCBudW1iZXJPZlNlY3RvcnM7IC8qIG51bWJlciBvZiBzZWN0b3JzIGNhbGN1bGF0ZWQgYnkgZW5kQWRkcmVzcyAqLworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisKKyAgICBmbGFzaF9nZXRfbWF0Y2hlZF9vcGVyYXRpb25faW5mbyhjb25maWcsIHN0YXJ0LCAmZmxhc2hPcGVyYXRpb25JbmZvKTsKKworICAgIC8qIENoZWNrIHRoZSBzdXBwbGllZCBhZGRyZXNzIHJhbmdlLiAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9jaGVja19yYW5nZShjb25maWcsIHN0YXJ0LCBsZW5ndGhJbkJ5dGVzLCBmbGFzaE9wZXJhdGlvbkluZm8uc2VjdG9yQ21kQWRkcmVzc0FsaWdtZW50KTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgIH0KKworICAgIC8qIFZhbGlkYXRlIHRoZSB1c2VyIGtleSAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9jaGVja191c2VyX2tleShrZXkpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgfQorCisgICAgc3RhcnQgPSBmbGFzaE9wZXJhdGlvbkluZm8uY29udmVydGVkQWRkcmVzczsKKyAgICBzZWN0b3JTaXplID0gZmxhc2hPcGVyYXRpb25JbmZvLmFjdGl2ZVNlY3RvclNpemU7CisKKyAgICAvKiBjYWxjdWxhdGluZyBGbGFzaCBlbmQgYWRkcmVzcyAqLworICAgIGVuZEFkZHJlc3MgPSBzdGFydCArIGxlbmd0aEluQnl0ZXMgLSAxOworCisgICAgLyogcmUtY2FsY3VsYXRlIHRoZSBlbmRBZGRyZXNzIGFuZCBhbGlnbiBpdCB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc2VjdG9yCisgICAgICogd2hpY2ggd2lsbCBiZSB1c2VkIGluIHRoZSBjb21wYXJpc29uIGJlbG93ICovCisgICAgaWYgKGVuZEFkZHJlc3MgJSBzZWN0b3JTaXplKQorICAgIHsKKyAgICAgICAgbnVtYmVyT2ZTZWN0b3JzID0gZW5kQWRkcmVzcyAvIHNlY3RvclNpemUgKyAxOworICAgICAgICBlbmRBZGRyZXNzID0gbnVtYmVyT2ZTZWN0b3JzICogc2VjdG9yU2l6ZSAtIDE7CisgICAgfQorCisgICAgZmxhc2hfY2FjaGVfY2xlYXJfcHJvY2Vzcyhjb25maWcsIGtGTEFTSF9DYWNoZUNsZWFyUHJvY2Vzc1ByZSk7CisKKyAgICAvKiB0aGUgc3RhcnQgYWRkcmVzcyB3aWxsIGluY3JlbWVudCB0byB0aGUgbmV4dCBzZWN0b3IgYWRkcmVzcworICAgICAqIHVudGlsIGl0IHJlYWNoZXMgdGhlIGVuZEFkZGRyZXNzICovCisgICAgd2hpbGUgKHN0YXJ0IDw9IGVuZEFkZHJlc3MpCisgICAgeworICAgICAgICAvKiBwcmVwYXJpbmcgcGFzc2luZyBwYXJhbWV0ZXIgdG8gZXJhc2UgYSBmbGFzaCBibG9jayAqLworICAgICAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMyhGVEZ4X0VSQVNFX1NFQ1RPUiwgc3RhcnQpOworCisgICAgICAgIC8qIGNhbGxpbmcgZmxhc2ggY29tbWFuZCBzZXF1ZW5jZSBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBjb21tYW5kICovCisgICAgICAgIHJldHVybkNvZGUgPSBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7CisKKyAgICAgICAgLyogY2FsbGluZyBmbGFzaCBjYWxsYmFjayBmdW5jdGlvbiBpZiBpdCBpcyBhdmFpbGFibGUgKi8KKyAgICAgICAgaWYgKGNvbmZpZy0+UEZsYXNoQ2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbmZpZy0+UEZsYXNoQ2FsbGJhY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNoZWNraW5nIHRoZSBzdWNjZXNzIG9mIGNvbW1hbmQgZXhlY3V0aW9uICovCisgICAgICAgIGlmIChrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgIT0gcmV0dXJuQ29kZSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJbmNyZW1lbnQgdG8gdGhlIG5leHQgc2VjdG9yICovCisgICAgICAgICAgICBzdGFydCArPSBzZWN0b3JTaXplOworICAgICAgICB9CisgICAgfQorCisgICAgZmxhc2hfY2FjaGVfY2xlYXIoY29uZmlnKTsKKworICAgIHJldHVybiAocmV0dXJuQ29kZSk7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FUkFTRV9BTExfQkxPQ0tTX1VOU0VDVVJFX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0FMTF9CTE9DS1NfVU5TRUNVUkVfQ01ECitzdGF0dXNfdCBGTEFTSF9FcmFzZUFsbFVuc2VjdXJlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IGtleSkKK3sKKyAgICBzdGF0dXNfdCByZXR1cm5Db2RlOworCisgICAgaWYgKGNvbmZpZyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIFByZXBhcmUgcGFzc2luZyBwYXJhbWV0ZXIgdG8gZXJhc2UgYWxsIGZsYXNoIGJsb2NrcyAodW5zZWN1cmUpLiAqLworICAgIGtGQ0NPQnhbMF0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKEZURnhfRVJBU0VfQUxMX0JMT0NLX1VOU0VDVVJFLCAweEZGRkZGRlUpOworCisgICAgLyogVmFsaWRhdGUgdGhlIHVzZXIga2V5ICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX3VzZXJfa2V5KGtleSk7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisKKyAgICBmbGFzaF9jYWNoZV9jbGVhcl9wcm9jZXNzKGNvbmZpZywga0ZMQVNIX0NhY2hlQ2xlYXJQcm9jZXNzUHJlKTsKKworICAgIC8qIGNhbGxpbmcgZmxhc2ggY29tbWFuZCBzZXF1ZW5jZSBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBjb21tYW5kICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoY29uZmlnKTsKKworICAgIGZsYXNoX2NhY2hlX2NsZWFyKGNvbmZpZyk7CisKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECisgICAgLyogRGF0YSBmbGFzaCBJRlIgd2lsbCBiZSBlcmFzZWQgYnkgZXJhc2UgYWxsIHVuc2VjdXJlIGNvbW1hbmQsIHNvIHdlIG5lZWQgdG8KKyAgICAgKiAgdXBkYXRlIEZsZXhOVk0gbWVtb3J5IHBhcnRpdGlvbiBzdGF0dXMgc3luY2hyb25vdXNseSAqLworICAgIGlmIChyZXR1cm5Db2RlID09IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICB7CisgICAgICAgIHJldHVybkNvZGUgPSBmbGFzaF91cGRhdGVfZmxleG52bV9tZW1vcnlfcGFydGl0aW9uX3N0YXR1cyhjb25maWcpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJldHVybkNvZGU7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0FMTF9CTE9DS1NfVU5TRUNVUkVfQ01EICovCisKK3N0YXR1c190IEZMQVNIX0VyYXNlQWxsRXhlY3V0ZU9ubHlTZWdtZW50cyhmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBrZXkpCit7CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBwcmVwYXJpbmcgcGFzc2luZyBwYXJhbWV0ZXIgdG8gZXJhc2UgYWxsIGV4ZWN1dGUtb25seSBzZWdtZW50cworICAgICAqIDFzdCBlbGVtZW50IGZvciB0aGUgRkNDT0IgcmVnaXN0ZXIgKi8KKyAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMyhGVEZ4X0VSQVNFX0FMTF9FWEVDVVRFX09OTFlfU0VHTUVOVCwgMHhGRkZGRkZVKTsKKworICAgIC8qIFZhbGlkYXRlIHRoZSB1c2VyIGtleSAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9jaGVja191c2VyX2tleShrZXkpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgfQorCisgICAgZmxhc2hfY2FjaGVfY2xlYXJfcHJvY2Vzcyhjb25maWcsIGtGTEFTSF9DYWNoZUNsZWFyUHJvY2Vzc1ByZSk7CisKKyAgICAvKiBjYWxsaW5nIGZsYXNoIGNvbW1hbmQgc2VxdWVuY2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7CisKKyAgICBmbGFzaF9jYWNoZV9jbGVhcihjb25maWcpOworCisgICAgcmV0dXJuIHJldHVybkNvZGU7Cit9CisKK3N0YXR1c190IEZMQVNIX1Byb2dyYW0oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90ICpzcmMsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMpCit7CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKyAgICBmbGFzaF9vcGVyYXRpb25fY29uZmlnX3QgZmxhc2hPcGVyYXRpb25JbmZvOworCisgICAgaWYgKHNyYyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGZsYXNoX2dldF9tYXRjaGVkX29wZXJhdGlvbl9pbmZvKGNvbmZpZywgc3RhcnQsICZmbGFzaE9wZXJhdGlvbkluZm8pOworCisgICAgLyogQ2hlY2sgdGhlIHN1cHBsaWVkIGFkZHJlc3MgcmFuZ2UuICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX3JhbmdlKGNvbmZpZywgc3RhcnQsIGxlbmd0aEluQnl0ZXMsIGZsYXNoT3BlcmF0aW9uSW5mby5ibG9ja1dyaXRlVW5pdFNpemUpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgfQorCisgICAgc3RhcnQgPSBmbGFzaE9wZXJhdGlvbkluZm8uY29udmVydGVkQWRkcmVzczsKKworICAgIGZsYXNoX2NhY2hlX2NsZWFyX3Byb2Nlc3MoY29uZmlnLCBrRkxBU0hfQ2FjaGVDbGVhclByb2Nlc3NQcmUpOworCisgICAgd2hpbGUgKGxlbmd0aEluQnl0ZXMgPiAwKQorICAgIHsKKyAgICAgICAgLyogcHJlcGFyaW5nIHBhc3NpbmcgcGFyYW1ldGVyIHRvIHByb2dyYW0gdGhlIGZsYXNoIGJsb2NrICovCisgICAgICAgIGtGQ0NPQnhbMV0gPSAqc3JjKys7CisgICAgICAgIGlmICg0ID09IGZsYXNoT3BlcmF0aW9uSW5mby5ibG9ja1dyaXRlVW5pdFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGtGQ0NPQnhbMF0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKEZURnhfUFJPR1JBTV9MT05HV09SRCwgc3RhcnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKDggPT0gZmxhc2hPcGVyYXRpb25JbmZvLmJsb2NrV3JpdGVVbml0U2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAga0ZDQ09CeFsyXSA9ICpzcmMrKzsKKyAgICAgICAgICAgIGtGQ0NPQnhbMF0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKEZURnhfUFJPR1JBTV9QSFJBU0UsIHN0YXJ0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNhbGxpbmcgZmxhc2ggY29tbWFuZCBzZXF1ZW5jZSBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBjb21tYW5kICovCisgICAgICAgIHJldHVybkNvZGUgPSBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7CisKKyAgICAgICAgLyogY2FsbGluZyBmbGFzaCBjYWxsYmFjayBmdW5jdGlvbiBpZiBpdCBpcyBhdmFpbGFibGUgKi8KKyAgICAgICAgaWYgKGNvbmZpZy0+UEZsYXNoQ2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbmZpZy0+UEZsYXNoQ2FsbGJhY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNoZWNraW5nIGZvciB0aGUgc3VjY2VzcyBvZiBjb21tYW5kIGV4ZWN1dGlvbiAqLworICAgICAgICBpZiAoa1N0YXR1c19GTEFTSF9TdWNjZXNzICE9IHJldHVybkNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogdXBkYXRlIHN0YXJ0IGFkZHJlc3MgZm9yIG5leHQgaXRlcmF0aW9uICovCisgICAgICAgICAgICBzdGFydCArPSBmbGFzaE9wZXJhdGlvbkluZm8uYmxvY2tXcml0ZVVuaXRTaXplOworCisgICAgICAgICAgICAvKiB1cGRhdGUgbGVuZ3RoSW5CeXRlcyBmb3IgbmV4dCBpdGVyYXRpb24gKi8KKyAgICAgICAgICAgIGxlbmd0aEluQnl0ZXMgLT0gZmxhc2hPcGVyYXRpb25JbmZvLmJsb2NrV3JpdGVVbml0U2l6ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZsYXNoX2NhY2hlX2NsZWFyKGNvbmZpZyk7CisKKyAgICByZXR1cm4gKHJldHVybkNvZGUpOworfQorCitzdGF0dXNfdCBGTEFTSF9Qcm9ncmFtT25jZShmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBpbmRleCwgdWludDMyX3QgKnNyYywgdWludDMyX3QgbGVuZ3RoSW5CeXRlcykKK3sKKyAgICBzdGF0dXNfdCByZXR1cm5Db2RlOworCisgICAgaWYgKChjb25maWcgPT0gTlVMTCkgfHwgKHNyYyA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBwYXNzIHBhcmFtdGVycyB0byBGVEZ4ICovCisgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzFfMihGVEZ4X1BST0dSQU1fT05DRSwgaW5kZXgsIDB4RkZGRlUpOworCisgICAga0ZDQ09CeFsxXSA9ICpzcmM7CisKKy8qIE5vdGU6IEhhdmUgdG8gc2VwZXJhdGUgdGhlIGZpcnN0IGluZGV4IGZyb20gdGhlIHJlc3QgaWYgaXQgZXF1YWxzIDAKKyAqIHRvIGF2b2lkIGEgcG9pbnRsZXNzIGNvbXBhcmlzb24gb2YgdW5zaWduZWQgaW50IHRvIDAgY29tcGlsZXIgd2FybmluZyAqLworI2lmIEZMQVNIX1BST0dSQU1fT05DRV9JU184QllURVNfVU5JVF9TVVBQT1JUCisjaWYgRkxBU0hfUFJPR1JBTV9PTkNFX0lTXzRCWVRFU19VTklUX1NVUFBPUlQKKyAgICBpZiAoKChpbmRleCA9PSBGTEFTSF9QUk9HUkFNX09OQ0VfTUlOX0lEXzhCWVRFUykgfHwKKyAgICAgICAgIC8qIFJhbmdlIGNoZWNrICovCisgICAgICAgICAoKGluZGV4ID49IEZMQVNIX1BST0dSQU1fT05DRV9NSU5fSURfOEJZVEVTICsgMSkgJiYgKGluZGV4IDw9IEZMQVNIX1BST0dSQU1fT05DRV9NQVhfSURfOEJZVEVTKSkpICYmCisgICAgICAgIChsZW5ndGhJbkJ5dGVzID09IDgpKQorI2VuZGlmIC8qIEZMQVNIX1BST0dSQU1fT05DRV9JU180QllURVNfVU5JVF9TVVBQT1JUICovCisgICAgeworICAgICAgICBrRkNDT0J4WzJdID0gKihzcmMgKyAxKTsKKyAgICB9CisjZW5kaWYgLyogRkxBU0hfUFJPR1JBTV9PTkNFX0lTXzhCWVRFU19VTklUX1NVUFBPUlQgKi8KKworICAgIGZsYXNoX2NhY2hlX2NsZWFyX3Byb2Nlc3MoY29uZmlnLCBrRkxBU0hfQ2FjaGVDbGVhclByb2Nlc3NQcmUpOworCisgICAgLyogY2FsbGluZyBmbGFzaCBjb21tYW5kIHNlcXVlbmNlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShjb25maWcpOworCisgICAgZmxhc2hfY2FjaGVfY2xlYXIoY29uZmlnKTsKKworICAgIHJldHVybiByZXR1cm5Db2RlOworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9TRUNUSU9OX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fU0VDVElPTl9DTUQKK3N0YXR1c190IEZMQVNIX1Byb2dyYW1TZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCAqc3JjLCB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzKQoreworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisgICAgdWludDMyX3Qgc2VjdG9yU2l6ZTsKKyAgICBmbGFzaF9vcGVyYXRpb25fY29uZmlnX3QgZmxhc2hPcGVyYXRpb25JbmZvOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRAorICAgIGJvb2wgbmVlZFN3aXRjaEZsZXhSYW1Nb2RlID0gZmFsc2U7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCAqLworCisgICAgaWYgKHNyYyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGZsYXNoX2dldF9tYXRjaGVkX29wZXJhdGlvbl9pbmZvKGNvbmZpZywgc3RhcnQsICZmbGFzaE9wZXJhdGlvbkluZm8pOworCisgICAgLyogQ2hlY2sgdGhlIHN1cHBsaWVkIGFkZHJlc3MgcmFuZ2UuICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX3JhbmdlKGNvbmZpZywgc3RhcnQsIGxlbmd0aEluQnl0ZXMsIGZsYXNoT3BlcmF0aW9uSW5mby5zZWN0aW9uQ21kQWRkcmVzc0FsaWdtZW50KTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgIH0KKworICAgIHN0YXJ0ID0gZmxhc2hPcGVyYXRpb25JbmZvLmNvbnZlcnRlZEFkZHJlc3M7CisgICAgc2VjdG9yU2l6ZSA9IGZsYXNoT3BlcmF0aW9uSW5mby5hY3RpdmVTZWN0b3JTaXplOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01ECisgICAgLyogU3dpdGNoIGZ1bmN0aW9uIG9mIEZsZXhSQU0gaWYgbmVlZGVkICovCisgICAgaWYgKCEoRlRGeC0+RkNORkcgJiBGVEZ4X0ZDTkZHX1JBTVJEWV9NQVNLKSkKKyAgICB7CisgICAgICAgIG5lZWRTd2l0Y2hGbGV4UmFtTW9kZSA9IHRydWU7CisKKyAgICAgICAgcmV0dXJuQ29kZSA9IEZMQVNIX1NldEZsZXhyYW1GdW5jdGlvbihjb25maWcsIGtGTEFTSF9GbGV4cmFtRnVuY3Rpb25PcHRpb25BdmFpbGFibGVBc1JhbSk7CisgICAgICAgIGlmIChyZXR1cm5Db2RlICE9IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU2V0RmxleHJhbUFzUmFtRXJyb3I7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCAqLworCisgICAgZmxhc2hfY2FjaGVfY2xlYXJfcHJvY2Vzcyhjb25maWcsIGtGTEFTSF9DYWNoZUNsZWFyUHJvY2Vzc1ByZSk7CisKKyAgICB3aGlsZSAobGVuZ3RoSW5CeXRlcyA+IDApCisgICAgeworICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIHdyaXRlIG9wZXJhdGlvbiBkb2Vzbid0IHNwYW4gdHdvIHNlY3RvcnMgKi8KKyAgICAgICAgdWludDMyX3QgZW5kQWRkcmVzc09mQ3VycmVudFNlY3RvciA9IEFMSUdOX1VQKHN0YXJ0LCBzZWN0b3JTaXplKTsKKyAgICAgICAgdWludDMyX3QgbGVuZ3RoVG9iZVByb2dyYW1tZWRPZkN1cnJlbnRTZWN0b3I7CisgICAgICAgIHVpbnQzMl90IGN1cnJlbnRPZmZzZXQgPSAwOworCisgICAgICAgIGlmIChlbmRBZGRyZXNzT2ZDdXJyZW50U2VjdG9yID09IHN0YXJ0KQorICAgICAgICB7CisgICAgICAgICAgICBlbmRBZGRyZXNzT2ZDdXJyZW50U2VjdG9yICs9IHNlY3RvclNpemU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGVuZ3RoSW5CeXRlcyArIHN0YXJ0ID4gZW5kQWRkcmVzc09mQ3VycmVudFNlY3RvcikKKyAgICAgICAgeworICAgICAgICAgICAgbGVuZ3RoVG9iZVByb2dyYW1tZWRPZkN1cnJlbnRTZWN0b3IgPSBlbmRBZGRyZXNzT2ZDdXJyZW50U2VjdG9yIC0gc3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGhUb2JlUHJvZ3JhbW1lZE9mQ3VycmVudFNlY3RvciA9IGxlbmd0aEluQnl0ZXM7CisgICAgICAgIH0KKworICAgICAgICAvKiBQcm9ncmFtIEN1cnJlbnQgU2VjdG9yICovCisgICAgICAgIHdoaWxlIChsZW5ndGhUb2JlUHJvZ3JhbW1lZE9mQ3VycmVudFNlY3RvciA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgcHJvZ3JhbSBzaXplIGRvZXNuJ3QgZXhjZWVkcyBBY2NlbGVyYXRpb24gUkFNIHNpemUgKi8KKyAgICAgICAgICAgIHVpbnQzMl90IHByb2dyYW1TaXplT2ZDdXJyZW50UGFzczsKKyAgICAgICAgICAgIHVpbnQzMl90IG51bWJlck9mUGhhc2VzOworCisgICAgICAgICAgICBpZiAobGVuZ3RoVG9iZVByb2dyYW1tZWRPZkN1cnJlbnRTZWN0b3IgPiBrRkxBU0hfQWNjZWxlcmF0aW9uUmFtU2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcm9ncmFtU2l6ZU9mQ3VycmVudFBhc3MgPSBrRkxBU0hfQWNjZWxlcmF0aW9uUmFtU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcm9ncmFtU2l6ZU9mQ3VycmVudFBhc3MgPSBsZW5ndGhUb2JlUHJvZ3JhbW1lZE9mQ3VycmVudFNlY3RvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQ29weSBkYXRhIHRvIEZsZXhSQU0gKi8KKyAgICAgICAgICAgIG1lbWNweSgodm9pZCAqKUZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfUkFNX1NUQVJUX0FERFJFU1MsIHNyYyArIGN1cnJlbnRPZmZzZXQgLyA0LCBwcm9ncmFtU2l6ZU9mQ3VycmVudFBhc3MpOworICAgICAgICAgICAgLyogU2V0IHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRhdGEgdG8gYmUgcHJvZ3JhbW1lZCAqLworICAgICAgICAgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzMoRlRGeF9QUk9HUkFNX1NFQ1RJT04sIHN0YXJ0ICsgY3VycmVudE9mZnNldCk7CisgICAgICAgICAgICAvKiBTZXQgcHJvZ3JhbSBzaXplIGluIHRlcm1zIG9mIEZFQVRVUkVfRkxBU0hfU0VDVElPTl9DTURfQUREUkVTU19BTElHTUVOVCAqLworICAgICAgICAgICAgbnVtYmVyT2ZQaGFzZXMgPSBwcm9ncmFtU2l6ZU9mQ3VycmVudFBhc3MgLyBmbGFzaE9wZXJhdGlvbkluZm8uc2VjdGlvbkNtZEFkZHJlc3NBbGlnbWVudDsKKworICAgICAgICAgICAga0ZDQ09CeFsxXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8yXzIobnVtYmVyT2ZQaGFzZXMsIDB4RkZGRlUpOworCisgICAgICAgICAgICAvKiBQZWZvcm0gY29tbWFuZCBzZXF1ZW5jZSAqLworICAgICAgICAgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoY29uZmlnKTsKKworICAgICAgICAgICAgLyogY2FsbGluZyBmbGFzaCBjYWxsYmFjayBmdW5jdGlvbiBpZiBpdCBpcyBhdmFpbGFibGUgKi8KKyAgICAgICAgICAgIGlmIChjb25maWctPlBGbGFzaENhbGxiYWNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbmZpZy0+UEZsYXNoQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJldHVybkNvZGUgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsYXNoX2NhY2hlX2NsZWFyKGNvbmZpZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxlbmd0aFRvYmVQcm9ncmFtbWVkT2ZDdXJyZW50U2VjdG9yIC09IHByb2dyYW1TaXplT2ZDdXJyZW50UGFzczsKKyAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gcHJvZ3JhbVNpemVPZkN1cnJlbnRQYXNzOworICAgICAgICB9CisKKyAgICAgICAgc3JjICs9IGN1cnJlbnRPZmZzZXQgLyA0OworICAgICAgICBzdGFydCArPSBjdXJyZW50T2Zmc2V0OworICAgICAgICBsZW5ndGhJbkJ5dGVzIC09IGN1cnJlbnRPZmZzZXQ7CisgICAgfQorCisgICAgZmxhc2hfY2FjaGVfY2xlYXIoY29uZmlnKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRAorICAgIC8qIFJlc3RvcmUgZnVuY3Rpb24gb2YgRmxleFJBTSBpZiBuZWVkZWQuICovCisgICAgaWYgKG5lZWRTd2l0Y2hGbGV4UmFtTW9kZSkKKyAgICB7CisgICAgICAgIHJldHVybkNvZGUgPSBGTEFTSF9TZXRGbGV4cmFtRnVuY3Rpb24oY29uZmlnLCBrRkxBU0hfRmxleHJhbUZ1bmN0aW9uT3B0aW9uQXZhaWxhYmxlRm9yRWVwcm9tKTsKKyAgICAgICAgaWYgKHJldHVybkNvZGUgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9SZWNvdmVyRmxleHJhbUFzRWVwcm9tRXJyb3I7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCAqLworCisgICAgcmV0dXJuIHJldHVybkNvZGU7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fU0VDVElPTl9DTUQgKi8KKworI2lmIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQKK3N0YXR1c190IEZMQVNIX0VlcHJvbVdyaXRlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IHN0YXJ0LCB1aW50OF90ICpzcmMsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMpCit7CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKyAgICBib29sIG5lZWRTd2l0Y2hGbGV4UmFtTW9kZSA9IGZhbHNlOworCisgICAgaWYgKGNvbmZpZyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIFZhbGlkYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIGdpdmVuIGFkZHJlc3MgKi8KKyAgICBpZiAoKHN0YXJ0IDwgY29uZmlnLT5GbGV4UkFNQmxvY2tCYXNlKSB8fAorICAgICAgICAoKHN0YXJ0ICsgbGVuZ3RoSW5CeXRlcykgPiAoY29uZmlnLT5GbGV4UkFNQmxvY2tCYXNlICsgY29uZmlnLT5FRXByb21Ub3RhbFNpemUpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0FkZHJlc3NFcnJvcjsKKyAgICB9CisKKyAgICByZXR1cm5Db2RlID0ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworCisgICAgLyogU3dpdGNoIGZ1bmN0aW9uIG9mIEZsZXhSQU0gaWYgbmVlZGVkICovCisgICAgaWYgKCEoRlRGeC0+RkNORkcgJiBGVEZ4X0ZDTkZHX0VFRVJEWV9NQVNLKSkKKyAgICB7CisgICAgICAgIG5lZWRTd2l0Y2hGbGV4UmFtTW9kZSA9IHRydWU7CisKKyAgICAgICAgcmV0dXJuQ29kZSA9IEZMQVNIX1NldEZsZXhyYW1GdW5jdGlvbihjb25maWcsIGtGTEFTSF9GbGV4cmFtRnVuY3Rpb25PcHRpb25BdmFpbGFibGVGb3JFZXByb20pOworICAgICAgICBpZiAocmV0dXJuQ29kZSAhPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1NldEZsZXhyYW1Bc0VlcHJvbUVycm9yOworICAgICAgICB9CisgICAgfQorCisgICAgLyogV3JpdGUgZGF0YSB0byBGbGV4UkFNIHdoZW4gaXQgaXMgdXNlZCBhcyBFRVBST00gZW11bGF0b3IgKi8KKyAgICB3aGlsZSAobGVuZ3RoSW5CeXRlcyA+IDApCisgICAgeworICAgICAgICBpZiAoKCEoc3RhcnQgJiAweDNVKSkgJiYgKGxlbmd0aEluQnl0ZXMgPj0gNCkpCisgICAgICAgIHsKKyAgICAgICAgICAgICoodWludDMyX3QgKilzdGFydCA9ICoodWludDMyX3QgKilzcmM7CisgICAgICAgICAgICBzdGFydCArPSA0OworICAgICAgICAgICAgc3JjICs9IDQ7CisgICAgICAgICAgICBsZW5ndGhJbkJ5dGVzIC09IDQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKCEoc3RhcnQgJiAweDFVKSkgJiYgKGxlbmd0aEluQnl0ZXMgPj0gMikpCisgICAgICAgIHsKKyAgICAgICAgICAgICoodWludDE2X3QgKilzdGFydCA9ICoodWludDE2X3QgKilzcmM7CisgICAgICAgICAgICBzdGFydCArPSAyOworICAgICAgICAgICAgc3JjICs9IDI7CisgICAgICAgICAgICBsZW5ndGhJbkJ5dGVzIC09IDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqKHVpbnQ4X3QgKilzdGFydCA9ICpzcmM7CisgICAgICAgICAgICBzdGFydCArPSAxOworICAgICAgICAgICAgc3JjICs9IDE7CisgICAgICAgICAgICBsZW5ndGhJbkJ5dGVzIC09IDE7CisgICAgICAgIH0KKyAgICAgICAgLyogV2FpdCB0aWxsIEVFRVJEWSBiaXQgaXMgc2V0ICovCisgICAgICAgIHdoaWxlICghKEZURngtPkZDTkZHICYgRlRGeF9GQ05GR19FRUVSRFlfTUFTSykpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGZvciBwcm90ZWN0aW9uIHZpb2xhdGlvbiBlcnJvciAqLworICAgICAgICBpZiAoRlRGeC0+RlNUQVQgJiBGVEZ4X0ZTVEFUX0ZQVklPTF9NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgLyogU3dpdGNoIGZ1bmN0aW9uIG9mIEZsZXhSQU0gaWYgbmVlZGVkICovCisgICAgaWYgKG5lZWRTd2l0Y2hGbGV4UmFtTW9kZSkKKyAgICB7CisgICAgICAgIHJldHVybkNvZGUgPSBGTEFTSF9TZXRGbGV4cmFtRnVuY3Rpb24oY29uZmlnLCBrRkxBU0hfRmxleHJhbUZ1bmN0aW9uT3B0aW9uQXZhaWxhYmxlQXNSYW0pOworICAgICAgICBpZiAocmV0dXJuQ29kZSAhPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1JlY292ZXJGbGV4cmFtQXNSYW1FcnJvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXR1cm5Db2RlOworfQorI2VuZGlmIC8qIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfUkVTT1VSQ0VfQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF9SRVNPVVJDRV9DTUQKK3N0YXR1c190IEZMQVNIX1JlYWRSZXNvdXJjZSgKKyAgICBmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgKmRzdCwgdWludDMyX3QgbGVuZ3RoSW5CeXRlcywgZmxhc2hfcmVhZF9yZXNvdXJjZV9vcHRpb25fdCBvcHRpb24pCit7CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKyAgICBmbGFzaF9vcGVyYXRpb25fY29uZmlnX3QgZmxhc2hPcGVyYXRpb25JbmZvOworCisgICAgaWYgKChjb25maWcgPT0gTlVMTCkgfHwgKGRzdCA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBmbGFzaF9nZXRfbWF0Y2hlZF9vcGVyYXRpb25faW5mbyhjb25maWcsIHN0YXJ0LCAmZmxhc2hPcGVyYXRpb25JbmZvKTsKKworICAgIC8qIENoZWNrIHRoZSBzdXBwbGllZCBhZGRyZXNzIHJhbmdlLiAqLworICAgIHJldHVybkNvZGUgPQorICAgICAgICBmbGFzaF9jaGVja19yZXNvdXJjZV9yYW5nZShzdGFydCwgbGVuZ3RoSW5CeXRlcywgZmxhc2hPcGVyYXRpb25JbmZvLnJlc291cmNlQ21kQWRkcmVzc0FsaWdtZW50LCBvcHRpb24pOworICAgIGlmIChyZXR1cm5Db2RlICE9IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICB7CisgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgIH0KKworICAgIHdoaWxlIChsZW5ndGhJbkJ5dGVzID4gMCkKKyAgICB7CisgICAgICAgIC8qIHByZXBhcmluZyBwYXNzaW5nIHBhcmFtZXRlciAqLworICAgICAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMyhGVEZ4X1JFQURfUkVTT1VSQ0UsIHN0YXJ0KTsKKyAgICAgICAgaWYgKGZsYXNoT3BlcmF0aW9uSW5mby5yZXNvdXJjZUNtZEFkZHJlc3NBbGlnbWVudCA9PSA0KQorICAgICAgICB7CisgICAgICAgICAgICBrRkNDT0J4WzJdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMyhvcHRpb24sIDB4RkZGRkZGVSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZmxhc2hPcGVyYXRpb25JbmZvLnJlc291cmNlQ21kQWRkcmVzc0FsaWdtZW50ID09IDgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGtGQ0NPQnhbMV0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKG9wdGlvbiwgMHhGRkZGRkZVKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNhbGxpbmcgZmxhc2ggY29tbWFuZCBzZXF1ZW5jZSBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBjb21tYW5kICovCisgICAgICAgIHJldHVybkNvZGUgPSBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7CisKKyAgICAgICAgaWYgKGtTdGF0dXNfRkxBU0hfU3VjY2VzcyAhPSByZXR1cm5Db2RlKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGZldGNoIGRhdGEgKi8KKyAgICAgICAgKmRzdCsrID0ga0ZDQ09CeFsxXTsKKyAgICAgICAgaWYgKGZsYXNoT3BlcmF0aW9uSW5mby5yZXNvdXJjZUNtZEFkZHJlc3NBbGlnbWVudCA9PSA4KQorICAgICAgICB7CisgICAgICAgICAgICAqZHN0KysgPSBrRkNDT0J4WzJdOworICAgICAgICB9CisgICAgICAgIC8qIHVwZGF0ZSBzdGFydCBhZGRyZXNzIGZvciBuZXh0IGl0ZXJhdGlvbiAqLworICAgICAgICBzdGFydCArPSBmbGFzaE9wZXJhdGlvbkluZm8ucmVzb3VyY2VDbWRBZGRyZXNzQWxpZ21lbnQ7CisgICAgICAgIC8qIHVwZGF0ZSBsZW5ndGhJbkJ5dGVzIGZvciBuZXh0IGl0ZXJhdGlvbiAqLworICAgICAgICBsZW5ndGhJbkJ5dGVzIC09IGZsYXNoT3BlcmF0aW9uSW5mby5yZXNvdXJjZUNtZEFkZHJlc3NBbGlnbWVudDsKKyAgICB9CisKKyAgICByZXR1cm4gKHJldHVybkNvZGUpOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRCAqLworCitzdGF0dXNfdCBGTEFTSF9SZWFkT25jZShmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBpbmRleCwgdWludDMyX3QgKmRzdCwgdWludDMyX3QgbGVuZ3RoSW5CeXRlcykKK3sKKyAgICBzdGF0dXNfdCByZXR1cm5Db2RlOworCisgICAgaWYgKChjb25maWcgPT0gTlVMTCkgfHwgKGRzdCA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBwYXNzIHBhcmFtdGVycyB0byBGVEZ4ICovCisgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzFfMihGVEZ4X1JFQURfT05DRSwgaW5kZXgsIDB4RkZGRlUpOworCisgICAgLyogY2FsbGluZyBmbGFzaCBjb21tYW5kIHNlcXVlbmNlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShjb25maWcpOworCisgICAgaWYgKGtTdGF0dXNfRkxBU0hfU3VjY2VzcyA9PSByZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgKmRzdCA9IGtGQ0NPQnhbMV07CisvKiBOb3RlOiBIYXZlIHRvIHNlcGVyYXRlIHRoZSBmaXJzdCBpbmRleCBmcm9tIHRoZSByZXN0IGlmIGl0IGVxdWFscyAwCisgKiAgICAgICB0byBhdm9pZCBhIHBvaW50bGVzcyBjb21wYXJpc29uIG9mIHVuc2lnbmVkIGludCB0byAwIGNvbXBpbGVyIHdhcm5pbmcgKi8KKyNpZiBGTEFTSF9QUk9HUkFNX09OQ0VfSVNfOEJZVEVTX1VOSVRfU1VQUE9SVAorI2lmIEZMQVNIX1BST0dSQU1fT05DRV9JU180QllURVNfVU5JVF9TVVBQT1JUCisgICAgICAgIGlmICgoKGluZGV4ID09IEZMQVNIX1BST0dSQU1fT05DRV9NSU5fSURfOEJZVEVTKSB8fAorICAgICAgICAgICAgIC8qIFJhbmdlIGNoZWNrICovCisgICAgICAgICAgICAgKChpbmRleCA+PSBGTEFTSF9QUk9HUkFNX09OQ0VfTUlOX0lEXzhCWVRFUyArIDEpICYmIChpbmRleCA8PSBGTEFTSF9QUk9HUkFNX09OQ0VfTUFYX0lEXzhCWVRFUykpKSAmJgorICAgICAgICAgICAgKGxlbmd0aEluQnl0ZXMgPT0gOCkpCisjZW5kaWYgLyogRkxBU0hfUFJPR1JBTV9PTkNFX0lTXzRCWVRFU19VTklUX1NVUFBPUlQgKi8KKyAgICAgICAgeworICAgICAgICAgICAgKihkc3QgKyAxKSA9IGtGQ0NPQnhbMl07CisgICAgICAgIH0KKyNlbmRpZiAvKiBGTEFTSF9QUk9HUkFNX09OQ0VfSVNfOEJZVEVTX1VOSVRfU1VQUE9SVCAqLworICAgIH0KKworICAgIHJldHVybiByZXR1cm5Db2RlOworfQorCitzdGF0dXNfdCBGTEFTSF9HZXRTZWN1cml0eVN0YXRlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX3NlY3VyaXR5X3N0YXRlX3QgKnN0YXRlKQoreworICAgIC8qIHN0b3JlIGRhdGEgcmVhZCBmcm9tIGZsYXNoIHJlZ2lzdGVyICovCisgICAgdWludDhfdCByZWdpc3RlclZhbHVlOworCisgICAgaWYgKChjb25maWcgPT0gTlVMTCkgfHwgKHN0YXRlID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIEdldCBmbGFzaCBzZWN1cml0eSByZWdpc3RlciB2YWx1ZSAqLworICAgIHJlZ2lzdGVyVmFsdWUgPSBGVEZ4LT5GU0VDOworCisgICAgLyogY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgZmxhc2ggc2VjdXJpdHkgYml0cyBpbiB0aGUgc2VjdXJpdHkgcmVnaXN0ZXIgKi8KKyAgICBpZiAoRkxBU0hfU0VDVVJJVFlfU1RBVEVfVU5TRUNVUkVEID09IChyZWdpc3RlclZhbHVlICYgRlRGeF9GU0VDX1NFQ19NQVNLKSkKKyAgICB7CisgICAgICAgIC8qIEZsYXNoIGluIHVuc2VjdXJlZCBzdGF0ZSAqLworICAgICAgICAqc3RhdGUgPSBrRkxBU0hfU2VjdXJpdHlTdGF0ZU5vdFNlY3VyZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRmxhc2ggaW4gc2VjdXJlZCBzdGF0ZQorICAgICAgICAgKiBjaGVjayBmb3IgYmFja2Rvb3Iga2V5IHNlY3VyaXR5IGVuYWJsZSBiaXQgKi8KKyAgICAgICAgaWYgKEZMQVNIX1NFQ1VSSVRZX1NUQVRFX0tFWUVOID09IChyZWdpc3RlclZhbHVlICYgRlRGeF9GU0VDX0tFWUVOX01BU0spKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBCYWNrZG9vciBrZXkgc2VjdXJpdHkgZW5hYmxlZCAqLworICAgICAgICAgICAgKnN0YXRlID0ga0ZMQVNIX1NlY3VyaXR5U3RhdGVCYWNrZG9vckVuYWJsZWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBCYWNrZG9vciBrZXkgc2VjdXJpdHkgZGlzYWJsZWQgKi8KKyAgICAgICAgICAgICpzdGF0ZSA9IGtGTEFTSF9TZWN1cml0eVN0YXRlQmFja2Rvb3JEaXNhYmxlZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoa1N0YXR1c19GTEFTSF9TdWNjZXNzKTsKK30KKworc3RhdHVzX3QgRkxBU0hfU2VjdXJpdHlCeXBhc3MoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgY29uc3QgdWludDhfdCAqYmFja2Rvb3JLZXkpCit7CisgICAgdWludDhfdCByZWdpc3RlclZhbHVlOyAvKiByZWdpc3RlclZhbHVlICovCisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsgICAvKiByZXR1cm4gY29kZSB2YXJpYWJsZSAqLworCisgICAgaWYgKChjb25maWcgPT0gTlVMTCkgfHwgKGJhY2tkb29yS2V5ID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIHNldCB0aGUgZGVmYXVsdCByZXR1cm4gY29kZSBhcyBrU3RhdHVzX1N1Y2Nlc3MgKi8KKyAgICByZXR1cm5Db2RlID0ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworCisgICAgLyogR2V0IGZsYXNoIHNlY3VyaXR5IHJlZ2lzdGVyIHZhbHVlICovCisgICAgcmVnaXN0ZXJWYWx1ZSA9IEZURngtPkZTRUM7CisKKyAgICAvKiBDaGVjayB0byBzZWUgaWYgZmxhc2ggaXMgaW4gc2VjdXJlIHN0YXRlIChhbnkgc3RhdGUgb3RoZXIgdGhhbiAweDIpCisgICAgICogSWYgbm90LCB0aGVuIHNraXAgdGhpcyBzaW5jZSBmbGFzaCBpcyBub3Qgc2VjdXJlICovCisgICAgaWYgKDB4MDIgIT0gKHJlZ2lzdGVyVmFsdWUgJiAweDAzKSkKKyAgICB7CisgICAgICAgIC8qIHByZXBhcmluZyBwYXNzaW5nIHBhcmFtZXRlciB0byBlcmFzZSBhIGZsYXNoIGJsb2NrICovCisgICAgICAgIGtGQ0NPQnhbMF0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKEZURnhfU0VDVVJJVFlfQllfUEFTUywgMHhGRkZGRkZVKTsKKyAgICAgICAga0ZDQ09CeFsxXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzFfMV8xKGJhY2tkb29yS2V5WzBdLCBiYWNrZG9vcktleVsxXSwgYmFja2Rvb3JLZXlbMl0sIGJhY2tkb29yS2V5WzNdKTsKKyAgICAgICAga0ZDQ09CeFsyXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzFfMV8xKGJhY2tkb29yS2V5WzRdLCBiYWNrZG9vcktleVs1XSwgYmFja2Rvb3JLZXlbNl0sIGJhY2tkb29yS2V5WzddKTsKKworICAgICAgICAvKiBjYWxsaW5nIGZsYXNoIGNvbW1hbmQgc2VxdWVuY2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgICAgICByZXR1cm5Db2RlID0gZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShjb25maWcpOworICAgIH0KKworICAgIHJldHVybiAocmV0dXJuQ29kZSk7Cit9CisKK3N0YXR1c190IEZMQVNIX1ZlcmlmeUVyYXNlQWxsKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX21hcmdpbl92YWx1ZV90IG1hcmdpbikKK3sKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogcHJlcGFyaW5nIHBhc3NpbmcgcGFyYW1ldGVyIHRvIHZlcmlmeSBhbGwgYmxvY2sgY29tbWFuZCAqLworICAgIGtGQ0NPQnhbMF0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8xXzIoRlRGeF9WRVJJRllfQUxMX0JMT0NLLCBtYXJnaW4sIDB4RkZGRlUpOworCisgICAgLyogY2FsbGluZyBmbGFzaCBjb21tYW5kIHNlcXVlbmNlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICByZXR1cm4gZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShjb25maWcpOworfQorCitzdGF0dXNfdCBGTEFTSF9WZXJpZnlFcmFzZShmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgbGVuZ3RoSW5CeXRlcywgZmxhc2hfbWFyZ2luX3ZhbHVlX3QgbWFyZ2luKQoreworICAgIC8qIENoZWNrIGFyZ3VtZW50cy4gKi8KKyAgICB1aW50MzJfdCBibG9ja1NpemU7CisgICAgZmxhc2hfb3BlcmF0aW9uX2NvbmZpZ190IGZsYXNoT3BlcmF0aW9uSW5mbzsKKyAgICB1aW50MzJfdCBuZXh0QmxvY2tTdGFydEFkZHJlc3M7CisgICAgdWludDMyX3QgcmVtYWluaW5nQnl0ZXM7CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKworICAgIGZsYXNoX2dldF9tYXRjaGVkX29wZXJhdGlvbl9pbmZvKGNvbmZpZywgc3RhcnQsICZmbGFzaE9wZXJhdGlvbkluZm8pOworCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX3JhbmdlKGNvbmZpZywgc3RhcnQsIGxlbmd0aEluQnl0ZXMsIGZsYXNoT3BlcmF0aW9uSW5mby5zZWN0aW9uQ21kQWRkcmVzc0FsaWdtZW50KTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgIH0KKworICAgIGZsYXNoX2dldF9tYXRjaGVkX29wZXJhdGlvbl9pbmZvKGNvbmZpZywgc3RhcnQsICZmbGFzaE9wZXJhdGlvbkluZm8pOworICAgIHN0YXJ0ID0gZmxhc2hPcGVyYXRpb25JbmZvLmNvbnZlcnRlZEFkZHJlc3M7CisgICAgYmxvY2tTaXplID0gZmxhc2hPcGVyYXRpb25JbmZvLmFjdGl2ZUJsb2NrU2l6ZTsKKworICAgIG5leHRCbG9ja1N0YXJ0QWRkcmVzcyA9IEFMSUdOX1VQKHN0YXJ0LCBibG9ja1NpemUpOworICAgIGlmIChuZXh0QmxvY2tTdGFydEFkZHJlc3MgPT0gc3RhcnQpCisgICAgeworICAgICAgICBuZXh0QmxvY2tTdGFydEFkZHJlc3MgKz0gYmxvY2tTaXplOworICAgIH0KKworICAgIHJlbWFpbmluZ0J5dGVzID0gbGVuZ3RoSW5CeXRlczsKKworICAgIHdoaWxlIChyZW1haW5pbmdCeXRlcykKKyAgICB7CisgICAgICAgIHVpbnQzMl90IG51bWJlck9mUGhyYXNlczsKKyAgICAgICAgdWludDMyX3QgdmVyaWZ5TGVuZ3RoID0gbmV4dEJsb2NrU3RhcnRBZGRyZXNzIC0gc3RhcnQ7CisgICAgICAgIGlmICh2ZXJpZnlMZW5ndGggPiByZW1haW5pbmdCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgdmVyaWZ5TGVuZ3RoID0gcmVtYWluaW5nQnl0ZXM7CisgICAgICAgIH0KKworICAgICAgICBudW1iZXJPZlBocmFzZXMgPSB2ZXJpZnlMZW5ndGggLyBmbGFzaE9wZXJhdGlvbkluZm8uc2VjdGlvbkNtZEFkZHJlc3NBbGlnbWVudDsKKworICAgICAgICAvKiBGaWxsIGluIHZlcmlmeSBzZWN0aW9uIGNvbW1hbmQgcGFyYW1ldGVycy4gKi8KKyAgICAgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzMoRlRGeF9WRVJJRllfU0VDVElPTiwgc3RhcnQpOworICAgICAgICBrRkNDT0J4WzFdID0gQllURVNfSk9JTl9UT19XT1JEXzJfMV8xKG51bWJlck9mUGhyYXNlcywgbWFyZ2luLCAweEZGVSk7CisKKyAgICAgICAgLyogY2FsbGluZyBmbGFzaCBjb21tYW5kIHNlcXVlbmNlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoY29uZmlnKTsKKyAgICAgICAgaWYgKHJldHVybkNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgICAgICB9CisKKyAgICAgICAgcmVtYWluaW5nQnl0ZXMgLT0gdmVyaWZ5TGVuZ3RoOworICAgICAgICBzdGFydCArPSB2ZXJpZnlMZW5ndGg7CisgICAgICAgIG5leHRCbG9ja1N0YXJ0QWRkcmVzcyArPSBibG9ja1NpemU7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKworc3RhdHVzX3QgRkxBU0hfVmVyaWZ5UHJvZ3JhbShmbGFzaF9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoSW5CeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgKmV4cGVjdGVkRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfbWFyZ2luX3ZhbHVlX3QgbWFyZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqZmFpbGVkQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmZhaWxlZERhdGEpCit7CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKyAgICBmbGFzaF9vcGVyYXRpb25fY29uZmlnX3QgZmxhc2hPcGVyYXRpb25JbmZvOworCisgICAgaWYgKGV4cGVjdGVkRGF0YSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGZsYXNoX2dldF9tYXRjaGVkX29wZXJhdGlvbl9pbmZvKGNvbmZpZywgc3RhcnQsICZmbGFzaE9wZXJhdGlvbkluZm8pOworCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX3JhbmdlKGNvbmZpZywgc3RhcnQsIGxlbmd0aEluQnl0ZXMsIGZsYXNoT3BlcmF0aW9uSW5mby5jaGVja0NtZEFkZHJlc3NBbGlnbWVudCk7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisKKyAgICBzdGFydCA9IGZsYXNoT3BlcmF0aW9uSW5mby5jb252ZXJ0ZWRBZGRyZXNzOworCisgICAgd2hpbGUgKGxlbmd0aEluQnl0ZXMpCisgICAgeworICAgICAgICAvKiBwcmVwYXJpbmcgcGFzc2luZyBwYXJhbWV0ZXIgdG8gcHJvZ3JhbSBjaGVjayB0aGUgZmxhc2ggYmxvY2sgKi8KKyAgICAgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzMoRlRGeF9QUk9HUkFNX0NIRUNLLCBzdGFydCk7CisgICAgICAgIGtGQ0NPQnhbMV0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKG1hcmdpbiwgMHhGRkZGRkZVKTsKKyAgICAgICAga0ZDQ09CeFsyXSA9ICpleHBlY3RlZERhdGE7CisKKyAgICAgICAgLyogY2FsbGluZyBmbGFzaCBjb21tYW5kIHNlcXVlbmNlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoY29uZmlnKTsKKworICAgICAgICAvKiBjaGVja2luZyBmb3IgdGhlIHN1Y2Nlc3Mgb2YgY29tbWFuZCBleGVjdXRpb24gKi8KKyAgICAgICAgaWYgKGtTdGF0dXNfRkxBU0hfU3VjY2VzcyAhPSByZXR1cm5Db2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFpbGVkQWRkcmVzcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZmFpbGVkQWRkcmVzcyA9IHN0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZhaWxlZERhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmZhaWxlZERhdGEgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBsZW5ndGhJbkJ5dGVzIC09IGZsYXNoT3BlcmF0aW9uSW5mby5jaGVja0NtZEFkZHJlc3NBbGlnbWVudDsKKyAgICAgICAgZXhwZWN0ZWREYXRhICs9IGZsYXNoT3BlcmF0aW9uSW5mby5jaGVja0NtZEFkZHJlc3NBbGlnbWVudCAvIHNpemVvZigqZXhwZWN0ZWREYXRhKTsKKyAgICAgICAgc3RhcnQgKz0gZmxhc2hPcGVyYXRpb25JbmZvLmNoZWNrQ21kQWRkcmVzc0FsaWdtZW50OworICAgIH0KKworICAgIHJldHVybiAocmV0dXJuQ29kZSk7Cit9CisKK3N0YXR1c190IEZMQVNIX1ZlcmlmeUVyYXNlQWxsRXhlY3V0ZU9ubHlTZWdtZW50cyhmbGFzaF9jb25maWdfdCAqY29uZmlnLCBmbGFzaF9tYXJnaW5fdmFsdWVfdCBtYXJnaW4pCit7CisgICAgaWYgKGNvbmZpZyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIHByZXBhcmluZyBwYXNzaW5nIHBhcmFtZXRlciB0byB2ZXJpZnkgZXJhc2UgYWxsIGV4ZWN1dGUtb25seSBzZWdtZW50cyBjb21tYW5kICovCisgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzFfMihGVEZ4X1ZFUklGWV9BTExfRVhFQ1VURV9PTkxZX1NFR01FTlQsIG1hcmdpbiwgMHhGRkZGVSk7CisKKyAgICAvKiBjYWxsaW5nIGZsYXNoIGNvbW1hbmQgc2VxdWVuY2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgIHJldHVybiBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7Cit9CisKK3N0YXR1c190IEZMQVNIX0lzUHJvdGVjdGVkKGZsYXNoX2NvbmZpZ190ICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFzaF9wcm90ZWN0aW9uX3N0YXRlX3QgKnByb3RlY3Rpb25fc3RhdGUpCit7CisgICAgdWludDMyX3QgZW5kQWRkcmVzczsgICAgICAgICAgIC8qIGVuZCBhZGRyZXNzIGZvciBwcm90ZWN0aW9uIGNoZWNrICovCisgICAgdWludDMyX3QgcmVnaW9uQ2hlY2tlZENvdW50ZXI7IC8qIGluY3JlbWVudHMgZWFjaCB0aW1lIHRoZSBmbGFzaCBhZGRyZXNzIHdhcyBjaGVja2VkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwcm90ZWN0aW9uIHN0YXR1cyAqLworICAgIHVpbnQzMl90IHJlZ2lvbkNvdW50ZXI7ICAgICAgICAvKiBpbmNyZW1lbnRpbmcgdmFyaWFibGUgdXNlZCB0byBpbmNyZW1lbnQgdGhyb3VnaCB0aGUgZmxhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcHJvdGVjdGlvbiByZWdpb25zICovCisgICAgdWludDMyX3QgcHJvdGVjdFN0YXR1c0NvdW50ZXI7IC8qIGluY3JlbWVudHMgZWFjaCB0aW1lIGEgZmxhc2ggcmVnaW9uIHdhcyBkZXRlY3RlZCBhcyBwcm90ZWN0ZWQgKi8KKworICAgIHVpbnQ4X3QgZmxhc2hSZWdpb25Qcm90ZWN0U3RhdHVzW0ZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9QUk9URUNUSU9OX1JFR0lPTl9DT1VOVF07IC8qIGFycmF5IG9mIHRoZSBwcm90ZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGF0dXMgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHByb3RlY3Rpb24gcmVnaW9uICovCisgICAgdWludDMyX3QgZmxhc2hSZWdpb25BZGRyZXNzW0ZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9QUk9URUNUSU9OX1JFR0lPTl9DT1VOVCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFdOyAgICAgICAgICAgICAgICAvKiBhcnJheSBvZiB0aGUgc3RhcnQgYWRkcmVzc2VzIGZvciBlYWNoIGZsYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHByb3RlY3Rpb24gcmVnaW9uLiBOb3RlIHRoaXMgaXMgUkVHSU9OX0NPVU5UKzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZHVlIHRvIHJlcXVpcmluZyB0aGUgbmV4dCBzdGFydCBhZGRyZXNzIGFmdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBlbmQgb2YgZmxhc2ggZm9yIGxvb3AtY2hlY2sgcHVycG9zZXMgYmVsb3cgKi8KKyAgICBmbGFzaF9wcm90ZWN0aW9uX2NvbmZpZ190IGZsYXNoUHJvdGVjdGlvbkluZm87IC8qIGZsYXNoIHByb3RlY3Rpb24gaW5mb3JtYXRpb24gKi8KKyAgICBzdGF0dXNfdCByZXR1cm5Db2RlOworCisgICAgaWYgKHByb3RlY3Rpb25fc3RhdGUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDaGVjayB0aGUgc3VwcGxpZWQgYWRkcmVzcyByYW5nZS4gKi8KKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY2hlY2tfcmFuZ2UoY29uZmlnLCBzdGFydCwgbGVuZ3RoSW5CeXRlcywgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1dSSVRFX1VOSVRfU0laRSk7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisKKyAgICAvKiBHZXQgbmVjZXNzYXJ5IGZsYXNoIHByb3RlY3Rpb24gaW5mb3JtYXRpb24uICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2dldF9wcm90ZWN0aW9uX2luZm8oY29uZmlnLCAmZmxhc2hQcm90ZWN0aW9uSW5mbyk7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisKKyAgICAvKiBjYWxjdWxhdGluZyBGbGFzaCBlbmQgYWRkcmVzcyAqLworICAgIGVuZEFkZHJlc3MgPSBzdGFydCArIGxlbmd0aEluQnl0ZXM7CisKKyAgICAvKiBwb3B1bGF0ZSB0aGUgZmxhc2hSZWdpb25BZGRyZXNzIGFycmF5IHdpdGggdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgZWFjaCBmbGFzaCByZWdpb24gKi8KKyAgICByZWdpb25Db3VudGVyID0gMDsgLyogbWFrZSBzdXJlIHJlZ2lvbkNvdW50ZXIgaXMgaW5pdGlhbGl6ZWQgdG8gMCBmaXJzdCAqLworCisgICAgLyogcG9wdWxhdGUgdXAgdG8gMzNyZCBlbGVtZW50IG9mIGFycmF5LCB0aGlzIGlzIHRoZSBuZXh0IGFkZHJlc3MgYWZ0ZXIgZW5kIG9mIGZsYXNoIGFycmF5ICovCisgICAgd2hpbGUgKHJlZ2lvbkNvdW50ZXIgPD0gZmxhc2hQcm90ZWN0aW9uSW5mby5yZWdpb25Db3VudCkKKyAgICB7CisgICAgICAgIGZsYXNoUmVnaW9uQWRkcmVzc1tyZWdpb25Db3VudGVyXSA9CisgICAgICAgICAgICBmbGFzaFByb3RlY3Rpb25JbmZvLnJlZ2lvbkJhc2UgKyBmbGFzaFByb3RlY3Rpb25JbmZvLnJlZ2lvblNpemUgKiByZWdpb25Db3VudGVyOworICAgICAgICByZWdpb25Db3VudGVyKys7CisgICAgfQorCisgICAgLyogcG9wdWxhdGUgZmxhc2hSZWdpb25Qcm90ZWN0U3RhdHVzIGFycmF5IHdpdGggc3RhdHVzIGluZm9ybWF0aW9uCisgICAgICogUHJvdGVjdGlvbiBzdGF0dXMgZm9yIGVhY2ggcmVnaW9uIGlzIHN0b3JlZCBpbiB0aGUgRlBST1RbMzowXSByZWdpc3RlcnMKKyAgICAgKiBFYWNoIGJpdCByZXByZXNlbnRzIG9uZSByZWdpb24gb2YgZmxhc2gKKyAgICAgKiA0IHJlZ2lzdGVycyAqIDgtYml0cy1wZXItcmVnaXN0ZXIgPSAzMi1iaXRzICgzMi1yZWdpb25zKQorICAgICAqIFRoZSBjb252ZW50aW9uIGlzOgorICAgICAqIEZQUk9UM1tiaXQgMF0gaXMgdGhlIGZpcnN0IHByb3RlY3Rpb24gcmVnaW9uIChzdGFydCBvZiBmbGFzaCBtZW1vcnkpCisgICAgICogRlBST1QwW2JpdCA3XSBpcyB0aGUgbGFzdCBwcm90ZWN0aW9uIHJlZ2lvbiAoZW5kIG9mIGZsYXNoIG1lbW9yeSkKKyAgICAgKiByZWdpb25Db3VudGVyIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIEZQUk9UWzM6MF0gcmVnaXN0ZXIgdG8gY2hlY2sgZm9yIHByb3RlY3Rpb24gc3RhdHVzCisgICAgICogTm90ZTogRlBST1Q9MSBtZWFucyBOT1QgcHJvdGVjdGVkLCBGUFJPVD0wIG1lYW5zIHByb3RlY3RlZCAqLworICAgIHJlZ2lvbkNvdW50ZXIgPSAwOyAvKiBtYWtlIHN1cmUgcmVnaW9uQ291bnRlciBpcyBpbml0aWFsaXplZCB0byAwIGZpcnN0ICovCisgICAgd2hpbGUgKHJlZ2lvbkNvdW50ZXIgPCBmbGFzaFByb3RlY3Rpb25JbmZvLnJlZ2lvbkNvdW50KQorICAgIHsKKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgJiYgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9QUk9URUNUSU9OX1JFR0lTVEVSCisgICAgICAgIGlmIChjb25maWctPkZsYXNoTWVtb3J5SW5kZXggPT0gKHVpbnQ4X3Qpa0ZMQVNIX01lbW9yeUluZGV4U2Vjb25kYXJ5Rmxhc2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyZWdpb25Db3VudGVyIDwgOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbGFzaFJlZ2lvblByb3RlY3RTdGF0dXNbcmVnaW9uQ291bnRlcl0gPSAoRlRGeF9GUFJPVFNMX1JFRyA+PiByZWdpb25Db3VudGVyKSAmICgweDAxdSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgocmVnaW9uQ291bnRlciA+PSA4KSAmJiAocmVnaW9uQ291bnRlciA8IDE2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbGFzaFJlZ2lvblByb3RlY3RTdGF0dXNbcmVnaW9uQ291bnRlcl0gPSAoRlRGeF9GUFJPVFNIX1JFRyA+PiAocmVnaW9uQ291bnRlciAtIDgpKSAmICgweDAxdSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE5vdGU6IFNvIGZhciBwcm90ZWN0aW9uIHJlZ2lvbiBjb3VudCBtYXkgYmUgMTYvMjAvMjQvMzIvNjQgKi8KKyAgICAgICAgICAgIGlmIChyZWdpb25Db3VudGVyIDwgOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbGFzaFJlZ2lvblByb3RlY3RTdGF0dXNbcmVnaW9uQ291bnRlcl0gPSAoRlRGeF9GUFJPVEwzX1JFRyA+PiByZWdpb25Db3VudGVyKSAmICgweDAxdSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgocmVnaW9uQ291bnRlciA+PSA4KSAmJiAocmVnaW9uQ291bnRlciA8IDE2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbGFzaFJlZ2lvblByb3RlY3RTdGF0dXNbcmVnaW9uQ291bnRlcl0gPSAoRlRGeF9GUFJPVEwyX1JFRyA+PiAocmVnaW9uQ291bnRlciAtIDgpKSAmICgweDAxdSk7CisgICAgICAgICAgICB9CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfUFJPVEVDVElPTl9SRUdJT05fQ09VTlQpICYmIChGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfUFJPVEVDVElPTl9SRUdJT05fQ09VTlQgPiAxNikKKyNpZiAoRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1BST1RFQ1RJT05fUkVHSU9OX0NPVU5UID09IDIwKQorICAgICAgICAgICAgZWxzZSBpZiAoKHJlZ2lvbkNvdW50ZXIgPj0gMTYpICYmIChyZWdpb25Db3VudGVyIDwgMjApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsYXNoUmVnaW9uUHJvdGVjdFN0YXR1c1tyZWdpb25Db3VudGVyXSA9IChGVEZ4X0ZQUk9UTDFfUkVHID4+IChyZWdpb25Db3VudGVyIC0gMTYpKSAmICgweDAxdSk7CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgZWxzZSBpZiAoKHJlZ2lvbkNvdW50ZXIgPj0gMTYpICYmIChyZWdpb25Db3VudGVyIDwgMjQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsYXNoUmVnaW9uUHJvdGVjdFN0YXR1c1tyZWdpb25Db3VudGVyXSA9IChGVEZ4X0ZQUk9UTDFfUkVHID4+IChyZWdpb25Db3VudGVyIC0gMTYpKSAmICgweDAxdSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogKEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9QUk9URUNUSU9OX1JFR0lPTl9DT1VOVCA9PSAyMCkgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1BST1RFQ1RJT05fUkVHSU9OX0NPVU5UKSAmJiAoRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1BST1RFQ1RJT05fUkVHSU9OX0NPVU5UID4gMjQpCisgICAgICAgICAgICBlbHNlIGlmICgocmVnaW9uQ291bnRlciA+PSAyNCkgJiYgKHJlZ2lvbkNvdW50ZXIgPCAzMikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxhc2hSZWdpb25Qcm90ZWN0U3RhdHVzW3JlZ2lvbkNvdW50ZXJdID0gKEZURnhfRlBST1RMMF9SRUcgPj4gKHJlZ2lvbkNvdW50ZXIgLSAyNCkpICYgKDB4MDF1KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1BST1RFQ1RJT05fUkVHSU9OX0NPVU5UKSAmJiBcCisgICAgKEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9QUk9URUNUSU9OX1JFR0lPTl9DT1VOVCA9PSA2NCkKKyAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbkNvdW50ZXIgPCA0MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbGFzaFJlZ2lvblByb3RlY3RTdGF0dXNbcmVnaW9uQ291bnRlcl0gPSAoRlRGeF9GUFJPVEgzX1JFRyA+PiAocmVnaW9uQ291bnRlciAtIDMyKSkgJiAoMHgwMXUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uQ291bnRlciA8IDQ4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsYXNoUmVnaW9uUHJvdGVjdFN0YXR1c1tyZWdpb25Db3VudGVyXSA9IChGVEZ4X0ZQUk9USDJfUkVHID4+IChyZWdpb25Db3VudGVyIC0gNDApKSAmICgweDAxdSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZWdpb25Db3VudGVyIDwgNTYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxhc2hSZWdpb25Qcm90ZWN0U3RhdHVzW3JlZ2lvbkNvdW50ZXJdID0gKEZURnhfRlBST1RIMV9SRUcgPj4gKHJlZ2lvbkNvdW50ZXIgLSA0OCkpICYgKDB4MDF1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbkNvdW50ZXIgPCA2NCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbGFzaFJlZ2lvblByb3RlY3RTdGF0dXNbcmVnaW9uQ291bnRlcl0gPSAoRlRGeF9GUFJPVEgwX1JFRyA+PiAocmVnaW9uQ291bnRlciAtIDU2KSkgJiAoMHgwMXUpOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZWdpb25Db3VudGVyKys7CisgICAgfQorCisgICAgLyogbG9vcCB0aHJvdWdoIHRoZSBmbGFzaCByZWdpb25zIGFuZCBjaGVjaworICAgICAqIGRlc2lyZWQgZmxhc2ggYWRkcmVzcyByYW5nZSBmb3IgcHJvdGVjdGlvbiBzdGF0dXMKKyAgICAgKiBsb29wIHN0b3BzIHdoZW4gaXQgaXMgZGV0ZWN0ZWQgdGhhdCBzdGFydCBoYXMgZXhjZWVkZWQgdGhlIGVuZEFkZHJlc3MgKi8KKyAgICByZWdpb25Db3VudGVyID0gMDsgLyogbWFrZSBzdXJlIHJlZ2lvbkNvdW50ZXIgaXMgaW5pdGlhbGl6ZWQgdG8gMCBmaXJzdCAqLworICAgIHJlZ2lvbkNoZWNrZWRDb3VudGVyID0gMDsKKyAgICBwcm90ZWN0U3RhdHVzQ291bnRlciA9IDA7IC8qIG1ha2Ugc3VyZSBwcm90ZWN0U3RhdHVzQ291bnRlciBpcyBpbml0aWFsaXplZCB0byAwIGZpcnN0ICovCisgICAgd2hpbGUgKHN0YXJ0IDwgZW5kQWRkcmVzcykKKyAgICB7CisgICAgICAgIC8qIGNoZWNrIHRvIHNlZSBpZiB0aGUgYWRkcmVzcyBmYWxscyB3aXRoaW4gdGhpcyBwcm90ZWN0aW9uIHJlZ2lvbgorICAgICAgICAgKiBOb3RlIHRoYXQgaWYgdGhlIGVudGlyZSBmbGFzaCBpcyB0byBiZSBjaGVja2VkLCB0aGUgbGFzdCBwcm90ZWN0aW9uCisgICAgICAgICAqIHJlZ2lvbiBjaGVja2VkIHdvdWxkIGNvbnNpc3Qgb2YgdGhlIGxhc3QgcHJvdGVjdGlvbiBzdGFydCBhZGRyZXNzIGFuZAorICAgICAgICAgKiB0aGUgc3RhcnQgYWRkcmVzcyBmb2xsb3dpbmcgdGhlIGVuZCBvZiBmbGFzaCAqLworICAgICAgICBpZiAoKHN0YXJ0ID49IGZsYXNoUmVnaW9uQWRkcmVzc1tyZWdpb25Db3VudGVyXSkgJiYgKHN0YXJ0IDwgZmxhc2hSZWdpb25BZGRyZXNzW3JlZ2lvbkNvdW50ZXIgKyAxXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGluY3JlbWVudCByZWdpb25DaGVja2VkQ291bnRlciB0byBpbmRpY2F0ZSB0aGlzIHJlZ2lvbiB3YXMgY2hlY2tlZCAqLworICAgICAgICAgICAgcmVnaW9uQ2hlY2tlZENvdW50ZXIrKzsKKworICAgICAgICAgICAgLyogY2hlY2sgdGhlIHByb3RlY3Rpb24gc3RhdHVzIG9mIHRoaXMgcmVnaW9uCisgICAgICAgICAgICAgKiBOb3RlOiBGUFJPVD0xIG1lYW5zIE5PVCBwcm90ZWN0ZWQsIEZQUk9UPTAgbWVhbnMgcHJvdGVjdGVkICovCisgICAgICAgICAgICBpZiAoIWZsYXNoUmVnaW9uUHJvdGVjdFN0YXR1c1tyZWdpb25Db3VudGVyXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBpbmNyZW1lbnQgcHJvdGVjdFN0YXR1c0NvdW50ZXIgdG8gaW5kaWNhdGUgdGhpcyByZWdpb24gaXMgcHJvdGVjdGVkICovCisgICAgICAgICAgICAgICAgcHJvdGVjdFN0YXR1c0NvdW50ZXIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXJ0ICs9IGZsYXNoUHJvdGVjdGlvbkluZm8ucmVnaW9uU2l6ZTsgLyogaW5jcmVtZW50IHRvIGFuIGFkZHJlc3Mgd2l0aGluIHRoZSBuZXh0IHJlZ2lvbiAqLworICAgICAgICB9CisgICAgICAgIHJlZ2lvbkNvdW50ZXIrKzsgLyogaW5jcmVtZW50IHJlZ2lvbkNvdW50ZXIgdG8gY2hlY2sgZm9yIHRoZSBuZXh0IGZsYXNoIHByb3RlY3Rpb24gcmVnaW9uICovCisgICAgfQorCisgICAgLyogaWYgcHJvdGVjdFN0YXR1c0NvdW50ZXIgPT0gMCwgdGhlbiBubyByZWdpb24gb2YgdGhlIGRlc2lyZWQgZmxhc2ggcmVnaW9uIGlzIHByb3RlY3RlZCAqLworICAgIGlmIChwcm90ZWN0U3RhdHVzQ291bnRlciA9PSAwKQorICAgIHsKKyAgICAgICAgKnByb3RlY3Rpb25fc3RhdGUgPSBrRkxBU0hfUHJvdGVjdGlvblN0YXRlVW5wcm90ZWN0ZWQ7CisgICAgfQorICAgIC8qIGlmIHByb3RlY3RTdGF0dXNDb3VudGVyID09IHJlZ2lvbkNoZWNrZWRDb3VudGVyLCB0aGVuIGVhY2ggcmVnaW9uIGNoZWNrZWQgd2FzIHByb3RlY3RlZCAqLworICAgIGVsc2UgaWYgKHByb3RlY3RTdGF0dXNDb3VudGVyID09IHJlZ2lvbkNoZWNrZWRDb3VudGVyKQorICAgIHsKKyAgICAgICAgKnByb3RlY3Rpb25fc3RhdGUgPSBrRkxBU0hfUHJvdGVjdGlvblN0YXRlUHJvdGVjdGVkOworICAgIH0KKyAgICAvKiBpZiBwcm90ZWN0U3RhdHVzQ291bnRlciAhPSByZWdpb25DaGVja2VkQ291bnRlciwgdGhlbiBwcm90ZWN0aW9uIHN0YXR1cyBpcyBtaXhlZAorICAgICAqIEluIG90aGVyIHdvcmRzLCBzb21lIHJlZ2lvbnMgYXJlIHByb3RlY3RlZCB3aGlsZSBvdGhlcnMgYXJlIHVucHJvdGVjdGVkICovCisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKnByb3RlY3Rpb25fc3RhdGUgPSBrRkxBU0hfUHJvdGVjdGlvblN0YXRlTWl4ZWQ7CisgICAgfQorCisgICAgcmV0dXJuIChyZXR1cm5Db2RlKTsKK30KKworc3RhdHVzX3QgRkxBU0hfSXNFeGVjdXRlT25seShmbGFzaF9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoSW5CeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfZXhlY3V0ZV9vbmx5X2FjY2Vzc19zdGF0ZV90ICphY2Nlc3Nfc3RhdGUpCit7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTAorICAgIGZsYXNoX2FjY2Vzc19jb25maWdfdCBmbGFzaEFjY2Vzc0luZm87IC8qIGZsYXNoIEV4ZWN1dGUtT25seSBpbmZvcm1hdGlvbiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTCAqLworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisKKyAgICBpZiAoYWNjZXNzX3N0YXRlID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhlIHN1cHBsaWVkIGFkZHJlc3MgcmFuZ2UuICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX3JhbmdlKGNvbmZpZywgc3RhcnQsIGxlbmd0aEluQnl0ZXMsIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19XUklURV9VTklUX1NJWkUpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTAorICAgIC8qIEdldCBuZWNlc3NhcnkgZmxhc2ggRXhlY3V0ZS1Pbmx5IGluZm9ybWF0aW9uLiAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9nZXRfYWNjZXNzX2luZm8oY29uZmlnLCAmZmxhc2hBY2Nlc3NJbmZvKTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgIH0KKworICAgIHsKKyAgICAgICAgdWludDMyX3QgZXhlY3V0ZU9ubHlTZWdtZW50Q291bnRlciA9IDA7CisKKyAgICAgICAgLyogY2FsY3VsYXRpbmcgZW5kIGFkZHJlc3MgKi8KKyAgICAgICAgdWludDMyX3QgZW5kQWRkcmVzcyA9IHN0YXJ0ICsgbGVuZ3RoSW5CeXRlczsKKworICAgICAgICAvKiBBbGlnbmluZyBzdGFydCBhZGRyZXNzIGFuZCBlbmQgYWRkcmVzcyAqLworICAgICAgICB1aW50MzJfdCBhbGlnbmVkU3RhcnRBZGRyZXNzID0gQUxJR05fRE9XTihzdGFydCwgZmxhc2hBY2Nlc3NJbmZvLlNlZ21lbnRTaXplKTsKKyAgICAgICAgdWludDMyX3QgYWxpZ25lZEVuZEFkZHJlc3MgPSBBTElHTl9VUChlbmRBZGRyZXNzLCBmbGFzaEFjY2Vzc0luZm8uU2VnbWVudFNpemUpOworCisgICAgICAgIHVpbnQzMl90IHNlZ21lbnRJbmRleCA9IDA7CisgICAgICAgIHVpbnQzMl90IG1heFN1cHBvcnRlZEV4ZWN1dGVPbmx5U2VnbWVudENvdW50ID0KKyAgICAgICAgICAgIChhbGlnbmVkRW5kQWRkcmVzcyAtIGFsaWduZWRTdGFydEFkZHJlc3MpIC8gZmxhc2hBY2Nlc3NJbmZvLlNlZ21lbnRTaXplOworCisgICAgICAgIHdoaWxlIChzdGFydCA8IGVuZEFkZHJlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHhhY2M7CisKKyAgICAgICAgICAgIHNlZ21lbnRJbmRleCA9IChzdGFydCAtIGZsYXNoQWNjZXNzSW5mby5TZWdtZW50QmFzZSkgLyBmbGFzaEFjY2Vzc0luZm8uU2VnbWVudFNpemU7CisKKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgJiYgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9BQ0NFU1NfUkVHSVNURVIKKyAgICAgICAgICAgIGlmIChjb25maWctPkZsYXNoTWVtb3J5SW5kZXggPT0gKHVpbnQ4X3Qpa0ZMQVNIX01lbW9yeUluZGV4U2Vjb25kYXJ5Rmxhc2gpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRm9yIHNlY29uZGFyeSBmbGFzaCwgVGhlIHR3byBYQUNDUyByZWdpc3RlcnMgYWxsb3cgdXAgdG8gMTYgcmVzdHJpY3RlZCBzZWdtZW50cyBvZiBlcXVhbCBtZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoc2VnbWVudEluZGV4IDwgOCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHhhY2MgPSAqKGNvbnN0IHZvbGF0aWxlIHVpbnQ4X3QgKikmRlRGeF9YQUNDU0xfUkVHOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzZWdtZW50SW5kZXggPCBmbGFzaEFjY2Vzc0luZm8uU2VnbWVudENvdW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeGFjYyA9ICooY29uc3Qgdm9sYXRpbGUgdWludDhfdCAqKSZGVEZ4X1hBQ0NTSF9SRUc7CisgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRJbmRleCAtPSA4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBGb3IgcHJpbWFyeSBmbGFzaCwgVGhlIGVpZ2h0IFhBQ0MgcmVnaXN0ZXJzIGFsbG93IHVwIHRvIDY0IHJlc3RyaWN0ZWQgc2VnbWVudHMgb2YgZXF1YWwgbWVtb3J5IHNpemUuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA8IDMyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeGFjYyA9ICooY29uc3Qgdm9sYXRpbGUgdWludDMyX3QgKikmRlRGeF9YQUNDTDNfUkVHOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzZWdtZW50SW5kZXggPCBmbGFzaEFjY2Vzc0luZm8uU2VnbWVudENvdW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeGFjYyA9ICooY29uc3Qgdm9sYXRpbGUgdWludDMyX3QgKikmRlRGeF9YQUNDSDNfUkVHOworICAgICAgICAgICAgICAgICAgICBzZWdtZW50SW5kZXggLT0gMzI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogRGV0ZXJtaW5lIGlmIHRoaXMgYWRkcmVzcyByYW5nZSBpcyBpbiBhIGV4ZWN1dGUtb25seSBwcm90ZWN0aW9uIGZsYXNoIHNlZ21lbnQuICovCisgICAgICAgICAgICBpZiAoKH54YWNjKSAmICgxdSA8PCBzZWdtZW50SW5kZXgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4ZWN1dGVPbmx5U2VnbWVudENvdW50ZXIrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhcnQgKz0gZmxhc2hBY2Nlc3NJbmZvLlNlZ21lbnRTaXplOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4ZWN1dGVPbmx5U2VnbWVudENvdW50ZXIgPCAxdSkKKyAgICAgICAgeworICAgICAgICAgICAgKmFjY2Vzc19zdGF0ZSA9IGtGTEFTSF9BY2Nlc3NTdGF0ZVVuTGltaXRlZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChleGVjdXRlT25seVNlZ21lbnRDb3VudGVyIDwgbWF4U3VwcG9ydGVkRXhlY3V0ZU9ubHlTZWdtZW50Q291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgICphY2Nlc3Nfc3RhdGUgPSBrRkxBU0hfQWNjZXNzU3RhdGVNaXhlZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICphY2Nlc3Nfc3RhdGUgPSBrRkxBU0hfQWNjZXNzU3RhdGVFeGVjdXRlT25seTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgKmFjY2Vzc19zdGF0ZSA9IGtGTEFTSF9BY2Nlc3NTdGF0ZVVuTGltaXRlZDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wgKi8KKworICAgIHJldHVybiAocmV0dXJuQ29kZSk7Cit9CisKK3N0YXR1c190IEZMQVNIX0dldFByb3BlcnR5KGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX3Byb3BlcnR5X3RhZ190IHdoaWNoUHJvcGVydHksIHVpbnQzMl90ICp2YWx1ZSkKK3sKKyAgICBpZiAoKGNvbmZpZyA9PSBOVUxMKSB8fCAodmFsdWUgPT0gTlVMTCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgc3dpdGNoICh3aGljaFByb3BlcnR5KQorICAgIHsKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hTZWN0b3JTaXplOgorICAgICAgICAgICAgKnZhbHVlID0gY29uZmlnLT5QRmxhc2hTZWN0b3JTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hUb3RhbFNpemU6CisgICAgICAgICAgICAqdmFsdWUgPSBjb25maWctPlBGbGFzaFRvdGFsU2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5UGZsYXNoQmxvY2tTaXplOgorICAgICAgICAgICAgKnZhbHVlID0gY29uZmlnLT5QRmxhc2hUb3RhbFNpemUgLyBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfQ09VTlQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaEJsb2NrQ291bnQ6CisgICAgICAgICAgICAqdmFsdWUgPSAodWludDMyX3QpY29uZmlnLT5QRmxhc2hCbG9ja0NvdW50OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hCbG9ja0Jhc2VBZGRyOgorICAgICAgICAgICAgKnZhbHVlID0gY29uZmlnLT5QRmxhc2hCbG9ja0Jhc2U7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaEZhY1N1cHBvcnQ6CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wpCisgICAgICAgICAgICAqdmFsdWUgPSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0w7CisjZWxzZQorICAgICAgICAgICAgKnZhbHVlID0gMDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wgKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5UGZsYXNoQWNjZXNzU2VnbWVudFNpemU6CisgICAgICAgICAgICAqdmFsdWUgPSBjb25maWctPlBGbGFzaEFjY2Vzc1NlZ21lbnRTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hBY2Nlc3NTZWdtZW50Q291bnQ6CisgICAgICAgICAgICAqdmFsdWUgPSBjb25maWctPlBGbGFzaEFjY2Vzc1NlZ21lbnRDb3VudDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5RmxleFJhbUJsb2NrQmFzZUFkZHI6CisgICAgICAgICAgICAqdmFsdWUgPSBjb25maWctPkZsZXhSQU1CbG9ja0Jhc2U7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eUZsZXhSYW1Ub3RhbFNpemU6CisgICAgICAgICAgICAqdmFsdWUgPSBjb25maWctPkZsZXhSQU1Ub3RhbFNpemU7CisgICAgICAgICAgICBicmVhazsKKworI2lmIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlEZmxhc2hTZWN0b3JTaXplOgorICAgICAgICAgICAgKnZhbHVlID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfU0VDVE9SX1NJWkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlEZmxhc2hUb3RhbFNpemU6CisgICAgICAgICAgICAqdmFsdWUgPSBjb25maWctPkRGbGFzaFRvdGFsU2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaEJsb2NrU2l6ZToKKyAgICAgICAgICAgICp2YWx1ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0JMT0NLX1NJWkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlEZmxhc2hCbG9ja0NvdW50OgorICAgICAgICAgICAgKnZhbHVlID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfQ09VTlQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlEZmxhc2hCbG9ja0Jhc2VBZGRyOgorICAgICAgICAgICAgKnZhbHVlID0gY29uZmlnLT5ERmxhc2hCbG9ja0Jhc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlFZXByb21Ub3RhbFNpemU6CisgICAgICAgICAgICAqdmFsdWUgPSBjb25maWctPkVFcHJvbVRvdGFsU2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQgKi8KKworICAgICAgICBkZWZhdWx0OiAvKiBjYXRjaCBpbnB1dHMgdGhhdCBhcmUgbm90IHJlY29nbml6ZWQgKi8KKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1Vua25vd25Qcm9wZXJ0eTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorCitzdGF0dXNfdCBGTEFTSF9TZXRQcm9wZXJ0eShmbGFzaF9jb25maWdfdCAqY29uZmlnLCBmbGFzaF9wcm9wZXJ0eV90YWdfdCB3aGljaFByb3BlcnR5LCB1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7CisKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgc3dpdGNoICh3aGljaFByb3BlcnR5KQorICAgIHsKKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlGbGFzaE1lbW9yeUluZGV4OgorICAgICAgICAgICAgaWYgKCh2YWx1ZSAhPSAodWludDMyX3Qpa0ZMQVNIX01lbW9yeUluZGV4UHJpbWFyeUZsYXNoKSAmJgorICAgICAgICAgICAgICAgICh2YWx1ZSAhPSAodWludDMyX3Qpa0ZMQVNIX01lbW9yeUluZGV4U2Vjb25kYXJ5Rmxhc2gpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRQcm9wZXJ0eVZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uZmlnLT5GbGFzaE1lbW9yeUluZGV4ID0gKHVpbnQ4X3QpdmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgKi8KKworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eUZsYXNoQ2FjaGVDb250cm9sbGVySW5kZXg6CisgICAgICAgICAgICBpZiAoKHZhbHVlICE9ICh1aW50MzJfdClrRkxBU0hfQ2FjaGVDb250cm9sbGVySW5kZXhGb3JDb3JlMCkgJiYKKyAgICAgICAgICAgICAgICAodmFsdWUgIT0gKHVpbnQzMl90KWtGTEFTSF9DYWNoZUNvbnRyb2xsZXJJbmRleEZvckNvcmUxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkUHJvcGVydHlWYWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbmZpZy0+Rmxhc2hDYWNoZUNvbnRyb2xsZXJJbmRleCA9ICh1aW50OF90KXZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hTZWN0b3JTaXplOgorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaFRvdGFsU2l6ZToKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hCbG9ja1NpemU6CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5UGZsYXNoQmxvY2tDb3VudDoKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hCbG9ja0Jhc2VBZGRyOgorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaEZhY1N1cHBvcnQ6CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5UGZsYXNoQWNjZXNzU2VnbWVudFNpemU6CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5UGZsYXNoQWNjZXNzU2VnbWVudENvdW50OgorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eUZsZXhSYW1CbG9ja0Jhc2VBZGRyOgorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eUZsZXhSYW1Ub3RhbFNpemU6CisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaFNlY3RvclNpemU6CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5RGZsYXNoVG90YWxTaXplOgorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaEJsb2NrU2l6ZToKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlEZmxhc2hCbG9ja0NvdW50OgorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaEJsb2NrQmFzZUFkZHI6CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5RWVwcm9tVG90YWxTaXplOgorI2VuZGlmIC8qIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfRkxBU0hfUmVhZE9ubHlQcm9wZXJ0eTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAvKiBjYXRjaCBpbnB1dHMgdGhhdCBhcmUgbm90IHJlY29nbml6ZWQgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfRkxBU0hfVW5rbm93blByb3BlcnR5OworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRAorc3RhdHVzX3QgRkxBU0hfU2V0RmxleHJhbUZ1bmN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX2ZsZXhyYW1fZnVuY3Rpb25fb3B0aW9uX3Qgb3B0aW9uKQoreworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBmbGFzbl9jaGVja19mbGV4cmFtX2Z1bmN0aW9uX29wdGlvbl9yYW5nZShvcHRpb24pOworICAgIGlmIChzdGF0dXMgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBwcmVwYXJpbmcgcGFzc2luZyBwYXJhbWV0ZXIgdG8gdmVyaWZ5IGFsbCBibG9jayBjb21tYW5kICovCisgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzFfMihGVEZ4X1NFVF9GTEVYUkFNX0ZVTkNUSU9OLCBvcHRpb24sIDB4RkZGRlUpOworCisgICAgLyogY2FsbGluZyBmbGFzaCBjb21tYW5kIHNlcXVlbmNlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICByZXR1cm4gZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShjb25maWcpOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TRVRfRkxFWFJBTV9GVU5DVElPTl9DTUQgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NXQVBfQ09OVFJPTF9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TV0FQX0NPTlRST0xfQ01ECitzdGF0dXNfdCBGTEFTSF9Td2FwQ29udHJvbChmbGFzaF9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX3N3YXBfY29udHJvbF9vcHRpb25fdCBvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFzaF9zd2FwX3N0YXRlX2NvbmZpZ190ICpyZXR1cm5JbmZvKQoreworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisKKyAgICBpZiAoKGNvbmZpZyA9PSBOVUxMKSB8fCAocmV0dXJuSW5mbyA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBpZiAoYWRkcmVzcyAmIChGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU1dBUF9DT05UUk9MX0NNRF9BRERSRVNTX0FMSUdNRU5UIC0gMSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvcjsKKyAgICB9CisKKyAgICAvKiBNYWtlIHN1cmUgYWRkcmVzcyBwcm92aWRlZCBpcyBpbiB0aGUgbG93ZXIgaGFsZiBvZiBQcm9ncmFtIGZsYXNoIGJ1dCBub3QgaW4gdGhlIEZsYXNoIENvbmZpZ3VyYXRpb24gRmllbGQgKi8KKyAgICBpZiAoKGFkZHJlc3MgPj0gKGNvbmZpZy0+UEZsYXNoVG90YWxTaXplIC8gMikpIHx8CisgICAgICAgICgoYWRkcmVzcyA+PSBrRkxBU0hfQ29uZmlnQXJlYVN0YXJ0KSAmJiAoYWRkcmVzcyA8PSBrRkxBU0hfQ29uZmlnQXJlYUVuZCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3dhcEluZGljYXRvckFkZHJlc3NFcnJvcjsKKyAgICB9CisKKyAgICAvKiBDaGVjayB0aGUgb3B0aW9uLiAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9jaGVja19zd2FwX2NvbnRyb2xfb3B0aW9uKG9wdGlvbik7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisKKyAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMyhGVEZ4X1NXQVBfQ09OVFJPTCwgYWRkcmVzcyk7CisgICAga0ZDQ09CeFsxXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzMob3B0aW9uLCAweEZGRkZGRlUpOworCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoY29uZmlnKTsKKworICAgIHJldHVybkluZm8tPmZsYXNoU3dhcFN0YXRlID0gKGZsYXNoX3N3YXBfc3RhdGVfdClGVEZ4X0ZDQ09CNV9SRUc7CisgICAgcmV0dXJuSW5mby0+Y3VycmVudFN3YXBCbG9ja1N0YXR1cyA9IChmbGFzaF9zd2FwX2Jsb2NrX3N0YXR1c190KUZURnhfRkNDT0I2X1JFRzsKKyAgICByZXR1cm5JbmZvLT5uZXh0U3dhcEJsb2NrU3RhdHVzID0gKGZsYXNoX3N3YXBfYmxvY2tfc3RhdHVzX3QpRlRGeF9GQ0NPQjdfUkVHOworCisgICAgcmV0dXJuIHJldHVybkNvZGU7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NXQVBfQ09OVFJPTF9DTUQgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BGTEFTSF9CTE9DS19TV0FQKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVAKK3N0YXR1c190IEZMQVNIX1N3YXAoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3QgYWRkcmVzcywgZmxhc2hfc3dhcF9mdW5jdGlvbl9vcHRpb25fdCBvcHRpb24pCit7CisgICAgZmxhc2hfc3dhcF9zdGF0ZV9jb25maWdfdCByZXR1cm5JbmZvOworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisKKyAgICBtZW1zZXQoJnJldHVybkluZm8sIDB4RkZVLCBzaXplb2YocmV0dXJuSW5mbykpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIHJldHVybkNvZGUgPSBGTEFTSF9Td2FwQ29udHJvbChjb25maWcsIGFkZHJlc3MsIGtGTEFTSF9Td2FwQ29udHJvbE9wdGlvblJlcG9ydFN0YXR1cywgJnJldHVybkluZm8pOworICAgICAgICBpZiAocmV0dXJuQ29kZSAhPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtGTEFTSF9Td2FwRnVuY3Rpb25PcHRpb25EaXNhYmxlID09IG9wdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJldHVybkluZm8uZmxhc2hTd2FwU3RhdGUgPT0ga0ZMQVNIX1N3YXBTdGF0ZURpc2FibGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXR1cm5JbmZvLmZsYXNoU3dhcFN0YXRlID09IGtGTEFTSF9Td2FwU3RhdGVVbmluaXRpYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFRoZSBzd2FwIHN5c3RlbSBjaGFuZ2VkIHRvIHRoZSBESVNBQkxFRCBzdGF0ZSB3aXRoIFByb2dyYW0gZmxhc2ggYmxvY2sgMAorICAgICAgICAgICAgICAgICAqIGxvY2F0ZWQgYXQgcmVsYXRpdmUgZmxhc2ggYWRkcmVzcyAweDBfMDAwMCAqLworICAgICAgICAgICAgICAgIHJldHVybkNvZGUgPSBGTEFTSF9Td2FwQ29udHJvbChjb25maWcsIGFkZHJlc3MsIGtGTEFTSF9Td2FwQ29udHJvbE9wdGlvbkRpc2FibGVTeXN0ZW0sICZyZXR1cm5JbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTd2FwIGRpc2FibGUgc2hvdWxkIGJlIHJlcXVlc3RlZCBvbmx5IHdoZW4gc3dhcCBzeXN0ZW0gaXMgaW4gdGhlIHVuaW5pdGlhbGl6ZWQgc3RhdGUgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Td2FwU3lzdGVtTm90SW5VbmluaXRpYWxpemVkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogV2hlbiBmaXJzdCBzd2FwOiB0aGUgaW5pdGlhbCBzd2FwIHN0YXRlIGlzIFVuaW5pdGlhbGl6ZWQsIGZsYXNoIHN3YXAgaW5pZGljYXRvciBhZGRyZXNzIGlzIHVuc2V0LAorICAgICAgICAgICAgICogICAgdGhlIHN3YXAgcHJvY2VkdXJlIHNob3VsZCBiZSBVbmluaXRpYWxpemVkIC0+IFVwZGF0ZS1FcmFzZWQgLT4gQ29tcGxldGUuCisgICAgICAgICAgICAgKiBBZnRlciB0aGUgZmlyc3Qgc3dhcCBoYXMgYmVlbiBjb21wbGV0ZWQsIHRoZSBmbGFzaCBzd2FwIGluaWRpY2F0b3IgYWRkcmVzcyBjYW5ub3QgYmUgbW9kaWZpZWQKKyAgICAgICAgICAgICAqICAgIHVubGVzcyBFcmFzZUFsbEJsb2NrcyBjb21tYW5kIGlzIGlzc3VlZCwgdGhlIHN3YXAgcHJvY2VkdXJlIGlzIGNoYW5nZWQgdG8gVXBkYXRlIC0+IFVwZGF0ZS1FcmFzZWQgLT4KKyAgICAgICAgICAgICAqICAgIENvbXBsZXRlLiAqLworICAgICAgICAgICAgc3dpdGNoIChyZXR1cm5JbmZvLmZsYXNoU3dhcFN0YXRlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Uga0ZMQVNIX1N3YXBTdGF0ZVVuaW5pdGlhbGl6ZWQ6CisgICAgICAgICAgICAgICAgICAgIC8qIElmIGN1cnJlbnQgc3dhcCBtb2RlIGlzIFVuaW5pdGlhbGl6ZWQsIEluaXRpYWxpemUgU3dhcCB0byBJbml0aWFsaXplZC9SRUFEWSBzdGF0ZS4gKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuQ29kZSA9CisgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9Td2FwQ29udHJvbChjb25maWcsIGFkZHJlc3MsIGtGTEFTSF9Td2FwQ29udHJvbE9wdGlvbkludGlhbGl6ZVN5c3RlbSwgJnJldHVybkluZm8pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGtGTEFTSF9Td2FwU3RhdGVSZWFkeToKKyAgICAgICAgICAgICAgICAgICAgLyogVmFsaWRhdGUgd2hldGhlciB0aGUgYWRkcmVzcyBwcm92aWRlZCB0byB0aGUgc3dhcCBzeXN0ZW0gaXMgbWF0Y2hlZCB0bworICAgICAgICAgICAgICAgICAgICAgKiBzd2FwIGluZGljYXRvciBhZGRyZXNzIGluIHRoZSBJRlIgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuQ29kZSA9IGZsYXNoX3ZhbGlkYXRlX3N3YXBfaW5kaWNhdG9yX2FkZHJlc3MoY29uZmlnLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldHVybkNvZGUgPT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBjdXJyZW50IHN3YXAgbW9kZSBpcyBJbml0aWFsaXplZC9SZWFkeSwgSW5pdGlhbGl6ZSBTd2FwIHRvIFVQREFURSBzdGF0ZS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkNvZGUgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX1N3YXBDb250cm9sKGNvbmZpZywgYWRkcmVzcywga0ZMQVNIX1N3YXBDb250cm9sT3B0aW9uU2V0SW5VcGRhdGVTdGF0ZSwgJnJldHVybkluZm8pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Uga0ZMQVNIX1N3YXBTdGF0ZVVwZGF0ZToKKyAgICAgICAgICAgICAgICAgICAgLyogSWYgY3VycmVudCBzd2FwIG1vZGUgaXMgVXBkYXRlLCBFcmFzZSBpbmRpY2F0b3Igc2VjdG9yIGluIG5vbiBhY3RpdmUgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICogdG8gcHJvY2VlZCBzd2FwIHN5c3RlbSB0byB1cGRhdGUtZXJhc2VkIHN0YXRlICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybkNvZGUgPSBGTEFTSF9FcmFzZShjb25maWcsIGFkZHJlc3MgKyAoY29uZmlnLT5QRmxhc2hUb3RhbFNpemUgPj4gMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU0VDVE9SX0NNRF9BRERSRVNTX0FMSUdNRU5ULCBrRkxBU0hfQXBpRXJhc2VLZXkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGtGTEFTSF9Td2FwU3RhdGVVcGRhdGVFcmFzZWQ6CisgICAgICAgICAgICAgICAgICAgIC8qIElmIGN1cnJlbnQgc3dhcCBtb2RlIGlzIFVwZGF0ZSBvciBVcGRhdGUtRXJhc2VkLCBwcm9ncmVzcyBTd2FwIHRvIENPTVBMRVRFIFN0YXRlICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybkNvZGUgPQorICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfU3dhcENvbnRyb2woY29uZmlnLCBhZGRyZXNzLCBrRkxBU0hfU3dhcENvbnRyb2xPcHRpb25TZXRJbkNvbXBsZXRlU3RhdGUsICZyZXR1cm5JbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBrRkxBU0hfU3dhcFN0YXRlQ29tcGxldGU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Uga0ZMQVNIX1N3YXBTdGF0ZURpc2FibGVkOgorICAgICAgICAgICAgICAgICAgICAvKiBXaGVuIHN3YXAgc3lzdGVtIGlzIGluIGRpc2FibGVkIHN0YXRlLCBXZSBuZWVkIHRvIGNsZWFyIHN3YXAgc3lzdGVtIGJhY2sgdG8gdW5pbml0aWFsaXplZAorICAgICAgICAgICAgICAgICAgICAgKiBieSBpc3N1aW5nIEVyYXNlQWxsQmxvY2tzIGNvbW1hbmQgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuQ29kZSA9IGtTdGF0dXNfRkxBU0hfU3dhcFN5c3RlbU5vdEluVW5pbml0aWFsaXplZDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuQ29kZSA9IGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocmV0dXJuQ29kZSAhPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoISgoa0ZMQVNIX1N3YXBTdGF0ZUNvbXBsZXRlID09IHJldHVybkluZm8uZmxhc2hTd2FwU3RhdGUpICYmIChrRkxBU0hfU3dhcEZ1bmN0aW9uT3B0aW9uRW5hYmxlID09IG9wdGlvbikpKTsKKworICAgIHJldHVybiByZXR1cm5Db2RlOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QRkxBU0hfQkxPQ0tfU1dBUCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9QQVJUSVRJT05fQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9QQVJUSVRJT05fQ01ECitzdGF0dXNfdCBGTEFTSF9Qcm9ncmFtUGFydGl0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX3BhcnRpdGlvbl9mbGV4cmFtX2xvYWRfb3B0aW9uX3Qgb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlZXByb21EYXRhU2l6ZUNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZsZXhudm1QYXJ0aXRpb25Db2RlKQoreworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogZWVwcm9tRGF0YVNpemVDb2RlWzc6Nl0sIGZsZXhudm1QYXJ0aXRpb25Db2RlWzc6NF0gc2hvdWxkIGJlIGFsbCAxJ2IwCisgICAgICogIG9yIGl0IHdpbGwgY2F1c2UgYWNjZXNzIGVycm9yLiAqLworICAgIC8qIGVlcHJvbURhdGFTaXplQ29kZSAmPSAweDNGVTsgICovCisgICAgLyogZmxleG52bVBhcnRpdGlvbkNvZGUgJj0gMHgwRlU7ICovCisKKyAgICAvKiBwcmVwYXJpbmcgcGFzc2luZyBwYXJhbWV0ZXIgdG8gcHJvZ3JhbSB0aGUgZmxhc2ggYmxvY2sgKi8KKyAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMl8xKEZURnhfUFJPR1JBTV9QQVJUSVRJT04sIDB4RkZGRlUsIG9wdGlvbik7CisgICAga0ZDQ09CeFsxXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzFfMihlZXByb21EYXRhU2l6ZUNvZGUsIGZsZXhudm1QYXJ0aXRpb25Db2RlLCAweEZGRkZVKTsKKworICAgIGZsYXNoX2NhY2hlX2NsZWFyX3Byb2Nlc3MoY29uZmlnLCBrRkxBU0hfQ2FjaGVDbGVhclByb2Nlc3NQcmUpOworCisgICAgLyogY2FsbGluZyBmbGFzaCBjb21tYW5kIHNlcXVlbmNlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShjb25maWcpOworCisgICAgZmxhc2hfY2FjaGVfY2xlYXIoY29uZmlnKTsKKworI2lmIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQKKyAgICAvKiBEYXRhIGZsYXNoIElGUiB3aWxsIGJlIHVwZGF0ZWQgYnkgcHJvZ3JhbSBwYXJ0aXRpb24gY29tbWFuZCBkdXJpbmcgcmVzZXQgc2VxdWVuY2UsCisgICAgICogc28gd2UganVzdCBzZXQgcmVzZXJ2ZWQgdmFsdWVzIGZvciBwYXJ0aXRpb25lZCBGbGV4TlZNIHNpemUgaGVyZSAqLworICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfUkVTRVJWRUQ7CisgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmCisKKyAgICByZXR1cm4gKHJldHVybkNvZGUpOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX1BBUlRJVElPTl9DTUQgKi8KKworc3RhdHVzX3QgRkxBU0hfUGZsYXNoU2V0UHJvdGVjdGlvbihmbGFzaF9jb25maWdfdCAqY29uZmlnLCBwZmxhc2hfcHJvdGVjdGlvbl9zdGF0dXNfdCAqcHJvdGVjdFN0YXR1cykKK3sKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisjaWYgRkxBU0hfU1NEX0lTX1NFQ09OREFSWV9GTEFTSF9FTkFCTEVEICYmIEZMQVNIX1NTRF9TRUNPTkRBUllfRkxBU0hfSEFTX0lUU19PV05fUFJPVEVDVElPTl9SRUdJU1RFUgorICAgIGlmIChjb25maWctPkZsYXNoTWVtb3J5SW5kZXggPT0gKHVpbnQ4X3Qpa0ZMQVNIX01lbW9yeUluZGV4U2Vjb25kYXJ5Rmxhc2gpCisgICAgeworICAgICAgICAqa0ZQUk9UU0wgPSBwcm90ZWN0U3RhdHVzLT52YWx1ZUxvdzMyYi5wcm90czE2Yi5wcm90c2w7CisgICAgICAgIGlmIChwcm90ZWN0U3RhdHVzLT52YWx1ZUxvdzMyYi5wcm90czE2Yi5wcm90c2wgIT0gKmtGUFJPVFNMKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZTsKKyAgICAgICAgfQorCisgICAgICAgICprRlBST1RTSCA9IHByb3RlY3RTdGF0dXMtPnZhbHVlTG93MzJiLnByb3RzMTZiLnByb3RzaDsKKyAgICAgICAgaWYgKHByb3RlY3RTdGF0dXMtPnZhbHVlTG93MzJiLnByb3RzMTZiLnByb3RzaCAhPSAqa0ZQUk9UU0gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgKmtGUFJPVEwgPSBwcm90ZWN0U3RhdHVzLT52YWx1ZUxvdzMyYi5wcm90bDMyYjsKKyAgICAgICAgaWYgKHByb3RlY3RTdGF0dXMtPnZhbHVlTG93MzJiLnByb3RsMzJiICE9ICprRlBST1RMKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZTsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChGVEZ4X0ZQUk9UX0hJR0hfUkVHKQorICAgICAgICAqa0ZQUk9USCA9IHByb3RlY3RTdGF0dXMtPnZhbHVlSGlnaDMyYi5wcm90aDMyYjsKKyAgICAgICAgaWYgKHByb3RlY3RTdGF0dXMtPnZhbHVlSGlnaDMyYi5wcm90aDMyYiAhPSAqa0ZQUk9USCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmU7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IEZMQVNIX1BmbGFzaEdldFByb3RlY3Rpb24oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgcGZsYXNoX3Byb3RlY3Rpb25fc3RhdHVzX3QgKnByb3RlY3RTdGF0dXMpCit7CisgICAgaWYgKChjb25maWcgPT0gTlVMTCkgfHwgKHByb3RlY3RTdGF0dXMgPT0gTlVMTCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisjaWYgRkxBU0hfU1NEX0lTX1NFQ09OREFSWV9GTEFTSF9FTkFCTEVEICYmIEZMQVNIX1NTRF9TRUNPTkRBUllfRkxBU0hfSEFTX0lUU19PV05fUFJPVEVDVElPTl9SRUdJU1RFUgorICAgIGlmIChjb25maWctPkZsYXNoTWVtb3J5SW5kZXggPT0gKHVpbnQ4X3Qpa0ZMQVNIX01lbW9yeUluZGV4U2Vjb25kYXJ5Rmxhc2gpCisgICAgeworICAgICAgICBwcm90ZWN0U3RhdHVzLT52YWx1ZUxvdzMyYi5wcm90czE2Yi5wcm90c2wgPSAqa0ZQUk9UU0w7CisgICAgICAgIHByb3RlY3RTdGF0dXMtPnZhbHVlTG93MzJiLnByb3RzMTZiLnByb3RzaCA9ICprRlBST1RTSDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICBwcm90ZWN0U3RhdHVzLT52YWx1ZUxvdzMyYi5wcm90bDMyYiA9ICprRlBST1RMOworI2lmIGRlZmluZWQoRlRGeF9GUFJPVF9ISUdIX1JFRykKKyAgICAgICAgcHJvdGVjdFN0YXR1cy0+dmFsdWVIaWdoMzJiLnByb3RoMzJiID0gKmtGUFJPVEg7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorc3RhdHVzX3QgRkxBU0hfRGZsYXNoU2V0UHJvdGVjdGlvbihmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50OF90IHByb3RlY3RTdGF0dXMpCit7CisgICAgaWYgKGNvbmZpZyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGlmICgoY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPT0gMCkgfHwgKGNvbmZpZy0+REZsYXNoVG90YWxTaXplID09IEZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfUkVTRVJWRUQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfQ29tbWFuZE5vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAgICBGVEZ4LT5GRFBST1QgPSBwcm90ZWN0U3RhdHVzOworCisgICAgaWYgKEZURngtPkZEUFJPVCAhPSBwcm90ZWN0U3RhdHVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmU7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKyNlbmRpZiAvKiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVEICovCisKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECitzdGF0dXNfdCBGTEFTSF9EZmxhc2hHZXRQcm90ZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQ4X3QgKnByb3RlY3RTdGF0dXMpCit7CisgICAgaWYgKChjb25maWcgPT0gTlVMTCkgfHwgKHByb3RlY3RTdGF0dXMgPT0gTlVMTCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaWYgKChjb25maWctPkRGbGFzaFRvdGFsU2l6ZSA9PSAwKSB8fCAoY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPT0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Db21tYW5kTm90U3VwcG9ydGVkOworICAgIH0KKworICAgICpwcm90ZWN0U3RhdHVzID0gRlRGeC0+RkRQUk9UOworCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKyNlbmRpZiAvKiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVEICovCisKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECitzdGF0dXNfdCBGTEFTSF9FZXByb21TZXRQcm90ZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQ4X3QgcHJvdGVjdFN0YXR1cykKK3sKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaWYgKChjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9PSAwKSB8fCAoY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPT0gRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfUkVTRVJWRUQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfQ29tbWFuZE5vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAgICBGVEZ4LT5GRVBST1QgPSBwcm90ZWN0U3RhdHVzOworCisgICAgaWYgKEZURngtPkZFUFJPVCAhPSBwcm90ZWN0U3RhdHVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmU7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKyNlbmRpZiAvKiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVEICovCisKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECitzdGF0dXNfdCBGTEFTSF9FZXByb21HZXRQcm90ZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQ4X3QgKnByb3RlY3RTdGF0dXMpCit7CisgICAgaWYgKChjb25maWcgPT0gTlVMTCkgfHwgKHByb3RlY3RTdGF0dXMgPT0gTlVMTCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaWYgKChjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9PSAwKSB8fCAoY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPT0gRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfUkVTRVJWRUQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfQ29tbWFuZE5vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAgICAqcHJvdGVjdFN0YXR1cyA9IEZURngtPkZFUFJPVDsKKworICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7Cit9CisjZW5kaWYgLyogRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRCAqLworCitzdGF0dXNfdCBGTEFTSF9QZmxhc2hTZXRQcmVmZXRjaFNwZWN1bGF0aW9uKGZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX3N0YXR1c190ICpzcGVjdWxhdGlvblN0YXR1cykKK3sKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgIHZvaWQgKCpmbGFzaENvbW1vbkJpdE9wZXJhdGlvbkNhbGxiYWNrKShGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFIGJhc2UsIHVpbnQzMl90IGJpdE1hc2ssIHVpbnQzMl90IGJpdFNoaWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiaXRWYWx1ZSk7CisgICAgdWludDMyX3QgZmxhc2hDb21tb25CaXRPcGVyYXRpb25CdWZmZXJba0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTWF4U2l6ZUluV29yZHNdOworCisgICAgYXNzZXJ0KHNpemVvZihzX2ZsYXNoQ29tbW9uQml0T3BlcmF0aW9uRnVuY3Rpb25Db2RlKSA8PSAoa0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTWF4U2l6ZUluV29yZHMgKiA0KSk7CisKKyAgICBtZW1jcHkoKHZvaWQgKilmbGFzaENvbW1vbkJpdE9wZXJhdGlvbkJ1ZmZlciwgKHZvaWQgKilzX2ZsYXNoQ29tbW9uQml0T3BlcmF0aW9uRnVuY3Rpb25Db2RlLAorICAgICAgICAgICBzaXplb2Yoc19mbGFzaENvbW1vbkJpdE9wZXJhdGlvbkZ1bmN0aW9uQ29kZSkpOworICAgIGZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQ2FsbGJhY2sgPSAodm9pZCAoKikoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSBiYXNlLCB1aW50MzJfdCBiaXRNYXNrLCB1aW50MzJfdCBiaXRTaGlmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJpdFZhbHVlKSkoKHVpbnQzMl90KWZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQnVmZmVyICsgMSk7CisjZW5kaWYgLyogRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCisKKyNpZiBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX01DTQorICAgIHsKKyAgICAgICAgRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSByZWdCYXNlOworI2lmIGRlZmluZWQoTUNNKQorICAgICAgICByZWdCYXNlID0gKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpJk1DTS0+UExBQ1I7CisjZWxpZiBkZWZpbmVkKE1DTTApCisgICAgICAgIHJlZ0Jhc2UgPSAoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkmTUNNMC0+UExBQ1I7CisjZW5kaWYKKyAgICAgICAgaWYgKHNwZWN1bGF0aW9uU3RhdHVzLT5pbnN0cnVjdGlvbk9wdGlvbiA9PSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkRpc2FibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzcGVjdWxhdGlvblN0YXR1cy0+ZGF0YU9wdGlvbiA9PSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkVuYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkU3BlY3VsYXRpb25PcHRpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICYmICghKGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSkKKyAgICAgICAgICAgICAgICBmbGFzaENvbW1vbkJpdE9wZXJhdGlvbkNhbGxiYWNrKHJlZ0Jhc2UsIE1DTV9QTEFDUl9ERkNTX01BU0ssIE1DTV9QTEFDUl9ERkNTX1NISUZULCAxVSk7CisjZWxzZQorICAgICAgICAgICAgICAgICpyZWdCYXNlIHw9IE1DTV9QTEFDUl9ERkNTX01BU0s7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgICAgICAgICAgZmxhc2hDb21tb25CaXRPcGVyYXRpb25DYWxsYmFjayhyZWdCYXNlLCBNQ01fUExBQ1JfREZDU19NQVNLLCBNQ01fUExBQ1JfREZDU19TSElGVCwgMFUpOworI2Vsc2UKKyAgICAgICAgICAgICpyZWdCYXNlICY9IH5NQ01fUExBQ1JfREZDU19NQVNLOworI2VuZGlmCisgICAgICAgICAgICBpZiAoc3BlY3VsYXRpb25TdGF0dXMtPmRhdGFPcHRpb24gPT0ga0ZMQVNIX3ByZWZldGNoU3BlY3VsYXRpb25PcHRpb25FbmFibGUpCisgICAgICAgICAgICB7CisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICYmICghKGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSkKKyAgICAgICAgICAgICAgICBmbGFzaENvbW1vbkJpdE9wZXJhdGlvbkNhbGxiYWNrKHJlZ0Jhc2UsIE1DTV9QTEFDUl9FRkRTX01BU0ssIE1DTV9QTEFDUl9FRkRTX1NISUZULCAxVSk7CisjZWxzZQorICAgICAgICAgICAgICAgICpyZWdCYXNlIHw9IE1DTV9QTEFDUl9FRkRTX01BU0s7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgICAgICAgICAgICAgIGZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQ2FsbGJhY2socmVnQmFzZSwgTUNNX1BMQUNSX0VGRFNfTUFTSywgTUNNX1BMQUNSX0VGRFNfU0hJRlQsIDBVKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgKnJlZ0Jhc2UgJj0gfk1DTV9QTEFDUl9FRkRTX01BU0s7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbGlmIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfRk1DCisgICAgeworICAgICAgICBGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFIHJlZ0Jhc2U7CisgICAgICAgIHVpbnQzMl90IGIwZHBlTWFzaywgYjBpcGVNYXNrOworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgICAgIHVpbnQzMl90IGIwZHBlU2hpZnQsIGIwaXBlU2hpZnQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZNQ19QRkIwMUNSX0IwRFBFX01BU0spCisgICAgICAgIHJlZ0Jhc2UgPSAoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkmRk1DLT5QRkIwMUNSOworICAgICAgICBiMGRwZU1hc2sgPSBGTUNfUEZCMDFDUl9CMERQRV9NQVNLOworICAgICAgICBiMGlwZU1hc2sgPSBGTUNfUEZCMDFDUl9CMElQRV9NQVNLOworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgICAgIGIwZHBlU2hpZnQgPSBGTUNfUEZCMDFDUl9CMERQRV9TSElGVDsKKyAgICAgICAgYjBpcGVTaGlmdCA9IEZNQ19QRkIwMUNSX0IwSVBFX1NISUZUOworI2VuZGlmCisjZWxpZiBkZWZpbmVkKEZNQ19QRkIwQ1JfQjBEUEVfTUFTSykKKyAgICAgICAgcmVnQmFzZSA9IChGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFKSZGTUMtPlBGQjBDUjsKKyAgICAgICAgYjBkcGVNYXNrID0gRk1DX1BGQjBDUl9CMERQRV9NQVNLOworICAgICAgICBiMGlwZU1hc2sgPSBGTUNfUEZCMENSX0IwSVBFX01BU0s7CisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICYmICghKGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSkKKyAgICAgICAgYjBkcGVTaGlmdCA9IEZNQ19QRkIwQ1JfQjBEUEVfU0hJRlQ7CisgICAgICAgIGIwaXBlU2hpZnQgPSBGTUNfUEZCMENSX0IwSVBFX1NISUZUOworI2VuZGlmCisjZW5kaWYKKyAgICAgICAgaWYgKHNwZWN1bGF0aW9uU3RhdHVzLT5pbnN0cnVjdGlvbk9wdGlvbiA9PSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkVuYWJsZSkKKyAgICAgICAgeworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgICAgICAgICBmbGFzaENvbW1vbkJpdE9wZXJhdGlvbkNhbGxiYWNrKHJlZ0Jhc2UsIGIwaXBlTWFzaywgYjBpcGVTaGlmdCwgMVUpOworI2Vsc2UKKyAgICAgICAgICAgICpyZWdCYXNlIHw9IGIwaXBlTWFzazsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgICAgICAgICBmbGFzaENvbW1vbkJpdE9wZXJhdGlvbkNhbGxiYWNrKHJlZ0Jhc2UsIGIwaXBlTWFzaywgYjBpcGVTaGlmdCwgMFUpOworI2Vsc2UKKyAgICAgICAgICAgICpyZWdCYXNlICY9IH5iMGlwZU1hc2s7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBpZiAoc3BlY3VsYXRpb25TdGF0dXMtPmRhdGFPcHRpb24gPT0ga0ZMQVNIX3ByZWZldGNoU3BlY3VsYXRpb25PcHRpb25FbmFibGUpCisgICAgICAgIHsKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgICAgICAgICAgZmxhc2hDb21tb25CaXRPcGVyYXRpb25DYWxsYmFjayhyZWdCYXNlLCBiMGRwZU1hc2ssIGIwZHBlU2hpZnQsIDFVKTsKKyNlbHNlCisgICAgICAgICAgICAqcmVnQmFzZSB8PSBiMGRwZU1hc2s7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgICAgICAgICAgZmxhc2hDb21tb25CaXRPcGVyYXRpb25DYWxsYmFjayhyZWdCYXNlLCBiMGRwZU1hc2ssIGIwZHBlU2hpZnQsIDBVKTsKKyNlbHNlCisgICAgICAgICAgICAqcmVnQmFzZSAmPSB+YjBkcGVNYXNrOworI2VuZGlmCisgICAgICAgIH0KKworLyogSW52YWxpZGF0ZSBQcmVmZXRjaCBTcGVjdWxhdGlvbiBCdWZmZXIgKi8KKyNpZiBkZWZpbmVkKEZNQ19QRkIwMUNSX1NfSU5WX01BU0spCisgICAgICAgIEZNQy0+UEZCMDFDUiB8PSBGTUNfUEZCMDFDUl9TX0lOVl9NQVNLOworI2VsaWYgZGVmaW5lZChGTUNfUEZCMENSX1NfSU5WX01BU0spCisgICAgICAgIEZNQy0+UEZCMENSIHw9IEZNQ19QRkIwQ1JfU19JTlZfTUFTSzsKKyNlbGlmIGRlZmluZWQoRk1DX1BGQjBDUl9TX0JfSU5WX01BU0spCisgICAgICAgIEZNQy0+UEZCMENSIHw9IEZNQ19QRkIwQ1JfU19CX0lOVl9NQVNLOworI2VuZGlmCisgICAgfQorI2VsaWYgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9NU0NNCisgICAgeworICAgICAgICBGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFIHJlZ0Jhc2U7CisgICAgICAgIHVpbnQzMl90IGZsYXNoU3BlY3VsYXRpb25NYXNrLCBkYXRhUHJlZmV0Y2hNYXNrOworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgICAgIHVpbnQzMl90IGZsYXNoU3BlY3VsYXRpb25TaGlmdCwgZGF0YVByZWZldGNoU2hpZnQ7CisgICAgICAgIGZsYXNoU3BlY3VsYXRpb25TaGlmdCA9IE1TQ01fT0NNRFJfT0NNQzFfREZDU19TSElGVDsKKyAgICAgICAgZGF0YVByZWZldGNoU2hpZnQgPSBNU0NNX09DTURSX09DTUMxX0RGRFNfU0hJRlQ7CisjZW5kaWYKKworICAgICAgICByZWdCYXNlID0gKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpJk1TQ00tPk9DTURSWzBdOworICAgICAgICBmbGFzaFNwZWN1bGF0aW9uTWFzayA9IE1TQ01fT0NNRFJfT0NNQzFfREZDU19NQVNLOworICAgICAgICBkYXRhUHJlZmV0Y2hNYXNrID0gTVNDTV9PQ01EUl9PQ01DMV9ERkRTX01BU0s7CisKKyAgICAgICAgaWYgKHNwZWN1bGF0aW9uU3RhdHVzLT5pbnN0cnVjdGlvbk9wdGlvbiA9PSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkRpc2FibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzcGVjdWxhdGlvblN0YXR1cy0+ZGF0YU9wdGlvbiA9PSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkVuYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkU3BlY3VsYXRpb25PcHRpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICYmICghKGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSkKKyAgICAgICAgICAgICAgICBmbGFzaENvbW1vbkJpdE9wZXJhdGlvbkNhbGxiYWNrKHJlZ0Jhc2UsIGZsYXNoU3BlY3VsYXRpb25NYXNrLCBmbGFzaFNwZWN1bGF0aW9uU2hpZnQsIDFVKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgKnJlZ0Jhc2UgfD0gZmxhc2hTcGVjdWxhdGlvbk1hc2s7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWdCYXNlICY9IH5mbGFzaFNwZWN1bGF0aW9uTWFzazsKKyAgICAgICAgICAgIGlmIChzcGVjdWxhdGlvblN0YXR1cy0+ZGF0YU9wdGlvbiA9PSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkVuYWJsZSkKKyAgICAgICAgICAgIHsKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgICAgICAgICAgICAgIGZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQ2FsbGJhY2socmVnQmFzZSwgZGF0YVByZWZldGNoTWFzaywgZGF0YVByZWZldGNoU2hpZnQsIDBVKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgKnJlZ0Jhc2UgJj0gfmRhdGFQcmVmZXRjaE1hc2s7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgICAgICAgICAgICAgIGZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQ2FsbGJhY2socmVnQmFzZSwgZGF0YVByZWZldGNoTWFzaywgZGF0YVByZWZldGNoU2hpZnQsIDFVKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgKnJlZ0Jhc2UgfD0gZGF0YVByZWZldGNoTWFzazsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2Vsc2UKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgIGZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQ2FsbGJhY2soKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpMCwgMCwgMCwgMCk7CisjZW5kaWYKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GVEZ4X01DTV9GTEFTSF9DQUNIRV9DT05UUk9MUyAqLworCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKworc3RhdHVzX3QgRkxBU0hfUGZsYXNoR2V0UHJlZmV0Y2hTcGVjdWxhdGlvbihmbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9zdGF0dXNfdCAqc3BlY3VsYXRpb25TdGF0dXMpCit7CisgICAgbWVtc2V0KHNwZWN1bGF0aW9uU3RhdHVzLCAwLCBzaXplb2YoZmxhc2hfcHJlZmV0Y2hfc3BlY3VsYXRpb25fc3RhdHVzX3QpKTsKKworICAgIC8qIEFzc3VtaW5nIHRoYXQgYWxsIHNwZWN1bGF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQuICovCisgICAgc3BlY3VsYXRpb25TdGF0dXMtPmluc3RydWN0aW9uT3B0aW9uID0ga0ZMQVNIX3ByZWZldGNoU3BlY3VsYXRpb25PcHRpb25FbmFibGU7CisgICAgc3BlY3VsYXRpb25TdGF0dXMtPmRhdGFPcHRpb24gPSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkVuYWJsZTsKKworI2lmIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfTUNNCisgICAgeworICAgICAgICB1aW50MzJfdCB2YWx1ZTsKKyNpZiBkZWZpbmVkKE1DTSkKKyAgICAgICAgdmFsdWUgPSBNQ00tPlBMQUNSOworI2VsaWYgZGVmaW5lZChNQ00wKQorICAgICAgICB2YWx1ZSA9IE1DTTAtPlBMQUNSOworI2VuZGlmCisgICAgICAgIGlmICh2YWx1ZSAmIE1DTV9QTEFDUl9ERkNTX01BU0spCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNwZWN1bGF0aW9uIGJ1ZmZlciBpcyBvZmYuICovCisgICAgICAgICAgICBzcGVjdWxhdGlvblN0YXR1cy0+aW5zdHJ1Y3Rpb25PcHRpb24gPSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkRpc2FibGU7CisgICAgICAgICAgICBzcGVjdWxhdGlvblN0YXR1cy0+ZGF0YU9wdGlvbiA9IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNwZWN1bGF0aW9uIGJ1ZmZlciBpcyBvbiBmb3IgaW5zdHJ1Y3Rpb24uICovCisgICAgICAgICAgICBpZiAoISh2YWx1ZSAmIE1DTV9QTEFDUl9FRkRTX01BU0spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNwZWN1bGF0aW9uIGJ1ZmZlciBpcyBvZmYgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25TdGF0dXMtPmRhdGFPcHRpb24gPSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkRpc2FibGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZWxpZiBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX0ZNQworICAgIHsKKyAgICAgICAgdWludDMyX3QgdmFsdWU7CisgICAgICAgIHVpbnQzMl90IGIwZHBlTWFzaywgYjBpcGVNYXNrOworI2lmIGRlZmluZWQoRk1DX1BGQjAxQ1JfQjBEUEVfTUFTSykKKyAgICAgICAgdmFsdWUgPSBGTUMtPlBGQjAxQ1I7CisgICAgICAgIGIwZHBlTWFzayA9IEZNQ19QRkIwMUNSX0IwRFBFX01BU0s7CisgICAgICAgIGIwaXBlTWFzayA9IEZNQ19QRkIwMUNSX0IwSVBFX01BU0s7CisjZWxpZiBkZWZpbmVkKEZNQ19QRkIwQ1JfQjBEUEVfTUFTSykKKyAgICAgICAgdmFsdWUgPSBGTUMtPlBGQjBDUjsKKyAgICAgICAgYjBkcGVNYXNrID0gRk1DX1BGQjBDUl9CMERQRV9NQVNLOworICAgICAgICBiMGlwZU1hc2sgPSBGTUNfUEZCMENSX0IwSVBFX01BU0s7CisjZW5kaWYKKyAgICAgICAgaWYgKCEodmFsdWUgJiBiMGRwZU1hc2spKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBEbyBub3QgcHJlZmV0Y2ggaW4gcmVzcG9uc2UgdG8gZGF0YSByZWZlcmVuY2VzLiAqLworICAgICAgICAgICAgc3BlY3VsYXRpb25TdGF0dXMtPmRhdGFPcHRpb24gPSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkRpc2FibGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEodmFsdWUgJiBiMGlwZU1hc2spKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBEbyBub3QgcHJlZmV0Y2ggaW4gcmVzcG9uc2UgdG8gaW5zdHJ1Y3Rpb24gZmV0Y2hlcy4gKi8KKyAgICAgICAgICAgIHNwZWN1bGF0aW9uU3RhdHVzLT5pbnN0cnVjdGlvbk9wdGlvbiA9IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZTsKKyAgICAgICAgfQorICAgIH0KKyNlbGlmIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfTVNDTQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdmFsdWU7CisgICAgICAgIHVpbnQzMl90IGZsYXNoU3BlY3VsYXRpb25NYXNrLCBkYXRhUHJlZmV0Y2hNYXNrOworICAgICAgICB2YWx1ZSA9IE1TQ00tPk9DTURSWzBdOworICAgICAgICBmbGFzaFNwZWN1bGF0aW9uTWFzayA9IE1TQ01fT0NNRFJfT0NNQzFfREZDU19NQVNLOworICAgICAgICBkYXRhUHJlZmV0Y2hNYXNrID0gTVNDTV9PQ01EUl9PQ01DMV9ERkRTX01BU0s7CisKKyAgICAgICAgaWYgKHZhbHVlICYgZmxhc2hTcGVjdWxhdGlvbk1hc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNwZWN1bGF0aW9uIGJ1ZmZlciBpcyBvZmYuICovCisgICAgICAgICAgICBzcGVjdWxhdGlvblN0YXR1cy0+aW5zdHJ1Y3Rpb25PcHRpb24gPSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkRpc2FibGU7CisgICAgICAgICAgICBzcGVjdWxhdGlvblN0YXR1cy0+ZGF0YU9wdGlvbiA9IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNwZWN1bGF0aW9uIGJ1ZmZlciBpcyBvbiBmb3IgaW5zdHJ1Y3Rpb24uICovCisgICAgICAgICAgICBpZiAodmFsdWUgJiBkYXRhUHJlZmV0Y2hNYXNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNwZWN1bGF0aW9uIGJ1ZmZlciBpcyBvZmYgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25TdGF0dXMtPmRhdGFPcHRpb24gPSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkRpc2FibGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7Cit9CisKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQKKy8qIQorICogQGJyaWVmIENvcHkgUElDIG9mIGZsYXNoX3J1bl9jb21tYW5kKCkgdG8gUkFNCisgKi8KK3N0YXRpYyB2b2lkIGNvcHlfZmxhc2hfcnVuX2NvbW1hbmQodWludDMyX3QgKmZsYXNoUnVuQ29tbWFuZCkKK3sKKyAgICBhc3NlcnQoc2l6ZW9mKHNfZmxhc2hSdW5Db21tYW5kRnVuY3Rpb25Db2RlKSA8PSAoa0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTWF4U2l6ZUluV29yZHMgKiA0KSk7CisKKyAgICAvKiBTaW5jZSB0aGUgdmFsdWUgb2YgQVJNIGZ1bmN0aW9uIHBvaW50ZXIgaXMgYWx3YXlzIG9kZCwgYnV0IHRoZSByZWFsIHN0YXJ0IGFkZHJlc3MKKyAgICAgKiBvZiBmdW5jdGlvbiBtZW1vcnkgc2hvdWxkIGJlIGV2ZW4sIHRoYXQncyB3aHkgKzEgb3BlcmF0aW9uIGV4aXN0LiAqLworICAgIG1lbWNweSgodm9pZCAqKWZsYXNoUnVuQ29tbWFuZCwgKHZvaWQgKilzX2ZsYXNoUnVuQ29tbWFuZEZ1bmN0aW9uQ29kZSwgc2l6ZW9mKHNfZmxhc2hSdW5Db21tYW5kRnVuY3Rpb25Db2RlKSk7CisgICAgY2FsbEZsYXNoUnVuQ29tbWFuZCA9ICh2b2lkICgqKShGVEZ4X1JFRzhfQUNDRVNTX1RZUEUgZnRmeF9mc3RhdCkpKCh1aW50MzJfdClmbGFzaFJ1bkNvbW1hbmQgKyAxKTsKK30KKyNlbmRpZiAvKiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgKi8KKworLyohCisgKiBAYnJpZWYgRmxhc2ggQ29tbWFuZCBTZXF1ZW5jZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwZXJmb3JtIHRoZSBjb21tYW5kIHdyaXRlIHNlcXVlbmNlIHRvIHRoZSBmbGFzaC4KKyAqCisgKiBAcGFyYW0gZHJpdmVyIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHJldHVybiBBbiBlcnJvciBjb2RlIG9yIGtTdGF0dXNfRkxBU0hfU3VjY2VzcworICovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShmbGFzaF9jb25maWdfdCAqY29uZmlnKQoreworICAgIHVpbnQ4X3QgcmVnaXN0ZXJWYWx1ZTsKKworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVAorICAgIC8qIGNsZWFyIFJEQ09MRVJSICYgQUNDRVJSICYgRlBWSU9MIGZsYWcgaW4gZmxhc2ggc3RhdHVzIHJlZ2lzdGVyICovCisgICAgRlRGeC0+RlNUQVQgPSBGVEZ4X0ZTVEFUX1JEQ09MRVJSX01BU0sgfCBGVEZ4X0ZTVEFUX0FDQ0VSUl9NQVNLIHwgRlRGeF9GU1RBVF9GUFZJT0xfTUFTSzsKKworICAgIHN0YXR1c190IHJldHVybkNvZGUgPSBmbGFzaF9jaGVja19leGVjdXRlX2luX3JhbV9mdW5jdGlvbl9pbmZvKGNvbmZpZyk7CisgICAgaWYgKGtTdGF0dXNfRkxBU0hfU3VjY2VzcyAhPSByZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgfQorCisgICAgLyogV2UgcGFzcyB0aGUgZnRmeF9mc3RhdCBhZGRyZXNzIGFzIGEgcGFyYW1ldGVyIHRvIGZsYXNoX3J1bl9jb21hbW5kKCkgaW5zdGVhZCBvZiB1c2luZworICAgICAqIHByZS1wcm9jZXNzZWQgTUlDUk8gc2VudGVuY2VzIG9yIG9wZXJhdGluZyBnbG9iYWwgdmFyaWFibGUgaW4gZmxhc2hfcnVuX2NvbWFtbmQoKQorICAgICAqIHRvIG1ha2Ugc3VyZSB0aGF0IGZsYXNoX3J1bl9jb21tYW5kKCkgd2lsbCBiZSBjb21waWxlZCBpbnRvIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgKFBJQykuICovCisgICAgY2FsbEZsYXNoUnVuQ29tbWFuZCgoRlRGeF9SRUc4X0FDQ0VTU19UWVBFKSgmRlRGeC0+RlNUQVQpKTsKKyNlbHNlCisgICAgLyogY2xlYXIgUkRDT0xFUlIgJiBBQ0NFUlIgJiBGUFZJT0wgZmxhZyBpbiBmbGFzaCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyAgICBGVEZ4LT5GU1RBVCA9IEZURnhfRlNUQVRfUkRDT0xFUlJfTUFTSyB8IEZURnhfRlNUQVRfQUNDRVJSX01BU0sgfCBGVEZ4X0ZTVEFUX0ZQVklPTF9NQVNLOworCisgICAgLyogY2xlYXIgQ0NJRiBiaXQgKi8KKyAgICBGVEZ4LT5GU1RBVCA9IEZURnhfRlNUQVRfQ0NJRl9NQVNLOworCisgICAgLyogQ2hlY2sgQ0NJRiBiaXQgb2YgdGhlIGZsYXNoIHN0YXR1cyByZWdpc3Rlciwgd2FpdCB0aWxsIGl0IGlzIHNldC4KKyAgICAgKiBJUCB0ZWFtIGluZGljYXRlcyB0aGF0IHRoaXMgbG9vcCB3aWxsIGFsd2F5cyBjb21wbGV0ZS4gKi8KKyAgICB3aGlsZSAoIShGVEZ4LT5GU1RBVCAmIEZURnhfRlNUQVRfQ0NJRl9NQVNLKSkKKyAgICB7CisgICAgfQorI2VuZGlmIC8qIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAqLworCisgICAgLyogQ2hlY2sgZXJyb3IgYml0cyAqLworICAgIC8qIEdldCBmbGFzaCBzdGF0dXMgcmVnaXN0ZXIgdmFsdWUgKi8KKyAgICByZWdpc3RlclZhbHVlID0gRlRGeC0+RlNUQVQ7CisKKyAgICAvKiBjaGVja2luZyBhY2Nlc3MgZXJyb3IgKi8KKyAgICBpZiAocmVnaXN0ZXJWYWx1ZSAmIEZURnhfRlNUQVRfQUNDRVJSX01BU0spCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvcjsKKyAgICB9CisgICAgLyogY2hlY2tpbmcgcHJvdGVjdGlvbiBlcnJvciAqLworICAgIGVsc2UgaWYgKHJlZ2lzdGVyVmFsdWUgJiBGVEZ4X0ZTVEFUX0ZQVklPTF9NQVNLKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbjsKKyAgICB9CisgICAgLyogY2hlY2tpbmcgTUdTVEFUMCBub24tY29ycmVjdGFibGUgZXJyb3IgKi8KKyAgICBlbHNlIGlmIChyZWdpc3RlclZhbHVlICYgRlRGeF9GU1RBVF9NR1NUQVQwX01BU0spCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKKyAgICB9Cit9CisKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQKKy8qIQorICogQGJyaWVmIENvcHkgUElDIG9mIGZsYXNoX2NvbW1vbl9iaXRfb3BlcmF0aW9uKCkgdG8gUkFNCisgKgorICovCitzdGF0aWMgdm9pZCBjb3B5X2ZsYXNoX2NvbW1vbl9iaXRfb3BlcmF0aW9uKHVpbnQzMl90ICpmbGFzaENvbW1vbkJpdE9wZXJhdGlvbikKK3sKKyAgICBhc3NlcnQoc2l6ZW9mKHNfZmxhc2hDb21tb25CaXRPcGVyYXRpb25GdW5jdGlvbkNvZGUpIDw9IChrRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25NYXhTaXplSW5Xb3JkcyAqIDQpKTsKKworICAgIC8qIFNpbmNlIHRoZSB2YWx1ZSBvZiBBUk0gZnVuY3Rpb24gcG9pbnRlciBpcyBhbHdheXMgb2RkLCBidXQgdGhlIHJlYWwgc3RhcnQgYWRkcmVzcworICAgICAqIG9mIGZ1bmN0aW9uIG1lbW9yeSBzaG91bGQgYmUgZXZlbiwgdGhhdCdzIHdoeSArMSBvcGVyYXRpb24gZXhpc3QuICovCisgICAgbWVtY3B5KCh2b2lkICopZmxhc2hDb21tb25CaXRPcGVyYXRpb24sICh2b2lkICopc19mbGFzaENvbW1vbkJpdE9wZXJhdGlvbkZ1bmN0aW9uQ29kZSwKKyAgICAgICAgICAgc2l6ZW9mKHNfZmxhc2hDb21tb25CaXRPcGVyYXRpb25GdW5jdGlvbkNvZGUpKTsKKyAgICBjYWxsRmxhc2hDb21tb25CaXRPcGVyYXRpb24gPSAodm9pZCAoKikoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSBiYXNlLCB1aW50MzJfdCBiaXRNYXNrLCB1aW50MzJfdCBiaXRTaGlmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYml0VmFsdWUpKSgodWludDMyX3QpZmxhc2hDb21tb25CaXRPcGVyYXRpb24gKyAxKTsKKyAgICAvKiBXb3Jrcm91bmQgZm9yIHNvbWUgZGV2aWNlcyB3aGljaCBkb2Vzbid0IG5lZWQgdGhpcyBmdW5jdGlvbiAqLworICAgIGNhbGxGbGFzaENvbW1vbkJpdE9wZXJhdGlvbigoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkwLCAwLCAwLCAwKTsKK30KKyNlbmRpZiAvKiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgKi8KKworI2lmIEZMQVNIX0NBQ0hFX0lTX0NPTlRST0xMRURfQllfTUNNCisvKiEgQGJyaWVmIFBlcmZvcm1zIHRoZSBjYWNoZSBjbGVhciB0byB0aGUgZmxhc2ggYnkgTUNNLiovCit2b2lkIG1jbV9mbGFzaF9jYWNoZV9jbGVhcihmbGFzaF9jb25maWdfdCAqY29uZmlnKQoreworICAgIEZURnhfUkVHMzJfQUNDRVNTX1RZUEUgcmVnQmFzZSA9IChGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFKSZNQ00wX0NBQ0hFX1JFRzsKKworI2lmIGRlZmluZWQoTUNNMCkgJiYgZGVmaW5lZChNQ00xKQorICAgIGlmIChjb25maWctPkZsYXNoQ2FjaGVDb250cm9sbGVySW5kZXggPT0gKHVpbnQ4X3Qpa0ZMQVNIX0NhY2hlQ29udHJvbGxlckluZGV4Rm9yQ29yZTEpCisgICAgeworICAgICAgICByZWdCYXNlID0gKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpJk1DTTFfQ0FDSEVfUkVHOworICAgIH0KKyNlbmRpZgorCisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UCisgICAgY2FsbEZsYXNoQ29tbW9uQml0T3BlcmF0aW9uKHJlZ0Jhc2UsIE1DTV9DQUNIRV9DTEVBUl9NQVNLLCBNQ01fQ0FDSEVfQ0xFQVJfU0hJRlQsIDFVKTsKKyNlbHNlICAvKiAhRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCisgICAgKnJlZ0Jhc2UgfD0gTUNNX0NBQ0hFX0NMRUFSX01BU0s7CisKKyAgICAvKiBNZW1vcnkgYmFycmllcnMgZm9yIGdvb2QgbWVhc3VyZS4KKyAgICAgKiBBbGwgQ2FjaGUsIEJyYW5jaCBwcmVkaWN0b3IgYW5kIFRMQiBtYWludGVuYW5jZSBvcGVyYXRpb25zIGJlZm9yZSB0aGlzIGluc3RydWN0aW9uIGNvbXBsZXRlICovCisgICAgX19JU0IoKTsKKyAgICBfX0RTQigpOworI2VuZGlmIC8qIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAqLworfQorI2VuZGlmIC8qIEZMQVNIX0NBQ0hFX0lTX0NPTlRST0xMRURfQllfTUNNICovCisKKyNpZiBGTEFTSF9DQUNIRV9JU19DT05UUk9MTEVEX0JZX0ZNQworLyohIEBicmllZiBQZXJmb3JtcyB0aGUgY2FjaGUgY2xlYXIgdG8gdGhlIGZsYXNoIGJ5IEZNQy4qLwordm9pZCBmbWNfZmxhc2hfY2FjaGVfY2xlYXIodm9pZCkKK3sKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQKKyAgICBGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFIHJlZ0Jhc2UgPSAoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkwOworI2lmIGRlZmluZWQoRk1DX1BGQjAxQ1JfQ0lOVl9XQVlfTUFTSykKKyAgICByZWdCYXNlID0gKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpJkZNQy0+UEZCMDFDUjsKKyAgICBjYWxsRmxhc2hDb21tb25CaXRPcGVyYXRpb24ocmVnQmFzZSwgRk1DX1BGQjAxQ1JfQ0lOVl9XQVlfTUFTSywgRk1DX1BGQjAxQ1JfQ0lOVl9XQVlfU0hJRlQsIDB4RlUpOworI2Vsc2UKKyAgICByZWdCYXNlID0gKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpJkZNQy0+UEZCMENSOworICAgIGNhbGxGbGFzaENvbW1vbkJpdE9wZXJhdGlvbihyZWdCYXNlLCBGTUNfUEZCMENSX0NJTlZfV0FZX01BU0ssIEZNQ19QRkIwQ1JfQ0lOVl9XQVlfU0hJRlQsIDB4RlUpOworI2VuZGlmCisjZWxzZSAvKiAhRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCisjaWYgZGVmaW5lZChGTUNfUEZCMDFDUl9DSU5WX1dBWV9NQVNLKQorICAgIEZNQy0+UEZCMDFDUiA9IChGTUMtPlBGQjAxQ1IgJiB+Rk1DX1BGQjAxQ1JfQ0lOVl9XQVlfTUFTSykgfCBGTUNfUEZCMDFDUl9DSU5WX1dBWSh+MCk7CisjZWxzZQorICAgIEZNQy0+UEZCMENSID0gKEZNQy0+UEZCMENSICYgfkZNQ19QRkIwQ1JfQ0lOVl9XQVlfTUFTSykgfCBGTUNfUEZCMENSX0NJTlZfV0FZKH4wKTsKKyNlbmRpZgorICAgIC8qIE1lbW9yeSBiYXJyaWVycyBmb3IgZ29vZCBtZWFzdXJlLgorICAgICAqIEFsbCBDYWNoZSwgQnJhbmNoIHByZWRpY3RvciBhbmQgVExCIG1haW50ZW5hbmNlIG9wZXJhdGlvbnMgYmVmb3JlIHRoaXMgaW5zdHJ1Y3Rpb24gY29tcGxldGUgKi8KKyAgICBfX0lTQigpOworICAgIF9fRFNCKCk7CisjZW5kaWYgLyogRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCit9CisjZW5kaWYgLyogRkxBU0hfQ0FDSEVfSVNfQ09OVFJPTExFRF9CWV9GTUMgKi8KKworI2lmIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfTVNDTQorLyohIEBicmllZiBQZXJmb3JtcyB0aGUgcHJlZmV0Y2ggc3BlY3VsYXRpb24gYnVmZmVyIGNsZWFyIHRvIHRoZSBmbGFzaCBieSBNU0NNLiovCit2b2lkIG1zY21fZmxhc2hfcHJlZmV0Y2hfc3BlY3VsYXRpb25fZW5hYmxlKGJvb2wgZW5hYmxlKQoreworICAgIHVpbnQ4X3Qgc2V0VmFsdWU7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIHNldFZhbHVlID0gMHgwVTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2V0VmFsdWUgPSAweDNVOworICAgIH0KKworLyogVGhlIE9DTURSWzBdIGlzIGFsd2F5cyB1c2VkIHRvIHByZWZldGNoIG1haW4gUGZsYXNoKi8KKy8qIEZvciBkZXZpY2Ugd2l0aCBGbGV4TlZNIHN1cHBvcnQsIHRoZSBPQ01EUlsxXSBpcyB1c2VkIHRvIHByZWZldGNoIERmbGFzaC4KKyAqIEZvciBkZXZpY2Ugd2l0aCBzZWNvbmRhcnkgZmxhc2ggc3VwcG9ydCwgdGhlIE9DTURSWzFdIGlzIHVzZWQgdG8gcHJlZmV0Y2ggc2Vjb25kYXJ5IFBmbGFzaC4gKi8KKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQKKyAgICBjYWxsRmxhc2hDb21tb25CaXRPcGVyYXRpb24oKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpJk1TQ00tPk9DTURSWzBdLCBNU0NNX1NQRUNVTEFUSU9OX0RJU0FCTEVfTUFTSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVNDTV9TUEVDVUxBVElPTl9ESVNBQkxFX1NISUZULCBzZXRWYWx1ZSk7CisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRCB8fCBCTF9IQVNfU0VDT05EQVJZX0lOVEVSTkFMX0ZMQVNICisgICAgY2FsbEZsYXNoQ29tbW9uQml0T3BlcmF0aW9uKChGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFKSZNU0NNLT5PQ01EUlsxXSwgTVNDTV9TUEVDVUxBVElPTl9ESVNBQkxFX01BU0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1TQ01fU1BFQ1VMQVRJT05fRElTQUJMRV9TSElGVCwgc2V0VmFsdWUpOworI2VuZGlmCisjZWxzZSAvKiAhRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCisgICAgTVNDTS0+T0NNRFJbMF0gfD0gTVNDTV9TUEVDVUxBVElPTl9ESVNBQkxFKHNldFZhbHVlKTsKKworICAgIC8qIE1lbW9yeSBiYXJyaWVycyBmb3IgZ29vZCBtZWFzdXJlLgorICAgICAqIEFsbCBDYWNoZSwgQnJhbmNoIHByZWRpY3RvciBhbmQgVExCIG1haW50ZW5hbmNlIG9wZXJhdGlvbnMgYmVmb3JlIHRoaXMgaW5zdHJ1Y3Rpb24gY29tcGxldGUgKi8KKyAgICBfX0lTQigpOworICAgIF9fRFNCKCk7CisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRCB8fCBCTF9IQVNfU0VDT05EQVJZX0lOVEVSTkFMX0ZMQVNICisgICAgTVNDTS0+T0NNRFJbMV0gfD0gTVNDTV9TUEVDVUxBVElPTl9ESVNBQkxFKHNldFZhbHVlKTsKKworICAgIC8qIEVhY2ggY2FoY2UgY2xlYXIgaW5zdGFydWN0aW9uIHNob3VsZCBiZSBmb2xsb3dlZCBieSBiZWxvdyBjb2RlKi8KKyAgICBfX0lTQigpOworICAgIF9fRFNCKCk7CisjZW5kaWYKKworI2VuZGlmIC8qIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAqLworfQorI2VuZGlmIC8qIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfTVNDTSAqLworCisjaWYgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9GTUMKKy8qISBAYnJpZWYgUGVyZm9ybXMgdGhlIHByZWZldGNoIHNwZWN1bGF0aW9uIGJ1ZmZlciBjbGVhciB0byB0aGUgZmxhc2ggYnkgRk1DLiovCit2b2lkIGZtY19mbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9jbGVhcih2b2lkKQoreworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVAorICAgIEZURnhfUkVHMzJfQUNDRVNTX1RZUEUgcmVnQmFzZSA9IChGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFKTA7CisjaWYgZGVmaW5lZChGTUNfUEZCMENSX1NfSU5WX01BU0spCisgICAgcmVnQmFzZSA9IChGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFKSZGTUMtPlBGQjBDUjsKKyAgICBjYWxsRmxhc2hDb21tb25CaXRPcGVyYXRpb24ocmVnQmFzZSwgRk1DX1BGQjBDUl9TX0lOVl9NQVNLLCBGTUNfUEZCMENSX1NfSU5WX1NISUZULCAxVSk7CisjZWxpZiBkZWZpbmVkKEZNQ19QRkIwQ1JfU19CX0lOVl9NQVNLKQorICAgIHJlZ0Jhc2UgPSAoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkmRk1DLT5QRkIwQ1I7CisgICAgY2FsbEZsYXNoQ29tbW9uQml0T3BlcmF0aW9uKHJlZ0Jhc2UsIEZNQ19QRkIwQ1JfU19CX0lOVl9NQVNLLCBGTUNfUEZCMENSX1NfQl9JTlZfU0hJRlQsIDFVKTsKKyNlbGlmIGRlZmluZWQoRk1DX1BGQjAxQ1JfU19JTlZfTUFTSykKKyAgICByZWdCYXNlID0gKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpJkZNQy0+UEZCMDFDUjsKKyAgICBjYWxsRmxhc2hDb21tb25CaXRPcGVyYXRpb24ocmVnQmFzZSwgRk1DX1BGQjAxQ1JfU19JTlZfTUFTSywgRk1DX1BGQjAxQ1JfU19JTlZfU0hJRlQsIDFVKTsKKyNlbmRpZgorI2Vsc2UgLyogIUZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAqLworI2lmIGRlZmluZWQoRk1DX1BGQjBDUl9TX0lOVl9NQVNLKQorICAgIEZNQy0+UEZCMENSIHw9IEZNQ19QRkIwQ1JfU19JTlZfTUFTSzsKKyNlbGlmIGRlZmluZWQoRk1DX1BGQjBDUl9TX0JfSU5WX01BU0spCisgICAgRk1DLT5QRkIwQ1IgfD0gRk1DX1BGQjBDUl9TX0JfSU5WX01BU0s7CisjZWxpZiBkZWZpbmVkKEZNQ19QRkIwMUNSX1NfSU5WX01BU0spCisgICAgRk1DLT5QRkIwMUNSIHw9IEZNQ19QRkIwMUNSX1NfSU5WX01BU0s7CisjZW5kaWYKKyAgICAvKiBNZW1vcnkgYmFycmllcnMgZm9yIGdvb2QgbWVhc3VyZS4KKyAgICAgKiBBbGwgQ2FjaGUsIEJyYW5jaCBwcmVkaWN0b3IgYW5kIFRMQiBtYWludGVuYW5jZSBvcGVyYXRpb25zIGJlZm9yZSB0aGlzIGluc3RydWN0aW9uIGNvbXBsZXRlICovCisgICAgX19JU0IoKTsKKyAgICBfX0RTQigpOworI2VuZGlmIC8qIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAqLworfQorI2VuZGlmIC8qIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfRk1DICovCisKKy8qIQorICogQGJyaWVmIEZsYXNoIENhY2hlIENsZWFyCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBlcmZvcm0gdGhlIGNhY2hlIGFuZCBwcmVmZXRjaCBzcGVjdWxhdGlvbiBjbGVhciB0byB0aGUgZmxhc2guCisgKi8KK3ZvaWQgZmxhc2hfY2FjaGVfY2xlYXIoZmxhc2hfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBmbGFzaF9jYWNoZV9jbGVhcl9wcm9jZXNzKGNvbmZpZywga0ZMQVNIX0NhY2hlQ2xlYXJQcm9jZXNzUG9zdCk7Cit9CisKKy8qIQorICogQGJyaWVmIEZsYXNoIENhY2hlIENsZWFyIFByb2Nlc3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGVyZm9ybSB0aGUgY2FjaGUgYW5kIHByZWZldGNoIHNwZWN1bGF0aW9uIGNsZWFyIHByb2Nlc3MgdG8gdGhlIGZsYXNoLgorICovCitzdGF0aWMgdm9pZCBmbGFzaF9jYWNoZV9jbGVhcl9wcm9jZXNzKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX2NhY2hlX2NsZWFyX3Byb2Nlc3NfdCBwcm9jZXNzKQoreworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVAorICAgIHN0YXR1c190IHJldHVybkNvZGUgPSBmbGFzaF9jaGVja19leGVjdXRlX2luX3JhbV9mdW5jdGlvbl9pbmZvKGNvbmZpZyk7CisgICAgaWYgKGtTdGF0dXNfRkxBU0hfU3VjY2VzcyAhPSByZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgKi8KKworICAgIC8qIFdlIHBhc3MgdGhlIGZ0ZnggcmVnaXN0ZXIgYWRkcmVzcyBhcyBhIHBhcmFtZXRlciB0byBmbGFzaF9jb21tb25fYml0X29wZXJhdGlvbigpIGluc3RlYWQgb2YgdXNpbmcKKyAgICAgKiBwcmUtcHJvY2Vzc2VkIE1BQ1JPcyBvciBhIGdsb2JhbCB2YXJpYWJsZSBpbiBmbGFzaF9jb21tb25fYml0X29wZXJhdGlvbigpCisgICAgICogdG8gbWFrZSBzdXJlIHRoYXQgZmxhc2hfY29tbW9uX2JpdF9vcGVyYXRpb24oKSB3aWxsIGJlIGNvbXBpbGVkIGludG8gcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSAoUElDKS4gKi8KKyAgICBpZiAocHJvY2VzcyA9PSBrRkxBU0hfQ2FjaGVDbGVhclByb2Nlc3NQb3N0KQorICAgIHsKKyNpZiBGTEFTSF9DQUNIRV9JU19DT05UUk9MTEVEX0JZX01DTQorICAgICAgICBtY21fZmxhc2hfY2FjaGVfY2xlYXIoY29uZmlnKTsKKyNlbmRpZgorI2lmIEZMQVNIX0NBQ0hFX0lTX0NPTlRST0xMRURfQllfRk1DCisgICAgICAgIGZtY19mbGFzaF9jYWNoZV9jbGVhcigpOworI2VuZGlmCisjaWYgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9NU0NNCisgICAgICAgIG1zY21fZmxhc2hfcHJlZmV0Y2hfc3BlY3VsYXRpb25fZW5hYmxlKHRydWUpOworI2VuZGlmCisjaWYgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9GTUMKKyAgICAgICAgZm1jX2ZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX2NsZWFyKCk7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKHByb2Nlc3MgPT0ga0ZMQVNIX0NhY2hlQ2xlYXJQcm9jZXNzUHJlKQorICAgIHsKKyNpZiBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX01TQ00KKyAgICAgICAgbXNjbV9mbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9lbmFibGUoZmFsc2UpOworI2VuZGlmCisgICAgfQorfQorCisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UCisvKiEgQGJyaWVmIENoZWNrIHdoZXRoZXIgZmxhc2ggZXhlY3V0ZS1pbi1yYW0gZnVuY3Rpb25zIGFyZSByZWFkeSAgKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9jaGVja19leGVjdXRlX2luX3JhbV9mdW5jdGlvbl9pbmZvKGZsYXNoX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgZmxhc2hfZXhlY3V0ZV9pbl9yYW1fZnVuY3Rpb25fY29uZmlnX3QgKmZsYXNoRXhlY3V0ZUluUmFtRnVuY3Rpb25JbmZvOworCisgICAgaWYgKGNvbmZpZyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGZsYXNoRXhlY3V0ZUluUmFtRnVuY3Rpb25JbmZvID0gKGZsYXNoX2V4ZWN1dGVfaW5fcmFtX2Z1bmN0aW9uX2NvbmZpZ190ICopY29uZmlnLT5mbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mbzsKKworICAgIGlmICgoY29uZmlnLT5mbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mbykgJiYKKyAgICAgICAgKGtGTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvblRvdGFsTnVtID09IGZsYXNoRXhlY3V0ZUluUmFtRnVuY3Rpb25JbmZvLT5hY3RpdmVGdW5jdGlvbkNvdW50KSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeTsKK30KKyNlbmRpZiAvKiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgKi8KKworLyohIEBicmllZiBWYWxpZGF0ZXMgdGhlIHJhbmdlIGFuZCBhbGlnbm1lbnQgb2YgdGhlIGdpdmVuIGFkZHJlc3MgcmFuZ2UuKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9jaGVja19yYW5nZShmbGFzaF9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0QWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFsaWdubWVudEJhc2VsaW5lKQoreworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBWZXJpZnkgdGhlIHN0YXJ0IGFuZCBsZW5ndGggYXJlIGFsaWdubWVudEJhc2VsaW5lIGFsaWduZWQuICovCisgICAgaWYgKChzdGFydEFkZHJlc3MgJiAoYWxpZ25tZW50QmFzZWxpbmUgLSAxKSkgfHwgKGxlbmd0aEluQnl0ZXMgJiAoYWxpZ25tZW50QmFzZWxpbmUgLSAxKSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvcjsKKyAgICB9CisKKyAgICAvKiBjaGVjayBmb3IgdmFsaWQgcmFuZ2Ugb2YgdGhlIHRhcmdldCBhZGRyZXNzZXMgKi8KKyAgICBpZiAoCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorICAgICAgICAoKHN0YXJ0QWRkcmVzcyA+PSBjb25maWctPkRGbGFzaEJsb2NrQmFzZSkgJiYKKyAgICAgICAgICgoc3RhcnRBZGRyZXNzICsgbGVuZ3RoSW5CeXRlcykgPD0gKGNvbmZpZy0+REZsYXNoQmxvY2tCYXNlICsgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUpKSkgfHwKKyNlbmRpZgorICAgICAgICAoKHN0YXJ0QWRkcmVzcyA+PSBjb25maWctPlBGbGFzaEJsb2NrQmFzZSkgJiYKKyAgICAgICAgICgoc3RhcnRBZGRyZXNzICsgbGVuZ3RoSW5CeXRlcykgPD0gKGNvbmZpZy0+UEZsYXNoQmxvY2tCYXNlICsgY29uZmlnLT5QRmxhc2hUb3RhbFNpemUpKSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0FkZHJlc3NFcnJvcjsKK30KKworLyohIEBicmllZiBHZXRzIHRoZSByaWdodCBhZGRyZXNzLCBzZWN0b3IgYW5kIGJsb2NrIHNpemUgb2YgY3VycmVudCBmbGFzaCB0eXBlIHdoaWNoIGlzIGluZGljYXRlZCBieSBhZGRyZXNzLiovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfZ2V0X21hdGNoZWRfb3BlcmF0aW9uX2luZm8oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX29wZXJhdGlvbl9jb25maWdfdCAqaW5mbykKK3sKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogQ2xlYW4gdXAgaW5mbyBTdHJ1Y3R1cmUqLworICAgIG1lbXNldChpbmZvLCAwLCBzaXplb2YoZmxhc2hfb3BlcmF0aW9uX2NvbmZpZ190KSk7CisKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECisgICAgaWYgKChhZGRyZXNzID49IGNvbmZpZy0+REZsYXNoQmxvY2tCYXNlKSAmJiAoYWRkcmVzcyA8PSAoY29uZmlnLT5ERmxhc2hCbG9ja0Jhc2UgKyBjb25maWctPkRGbGFzaFRvdGFsU2l6ZSkpKQorICAgIHsKKyAgICAgICAgLyogV2hlbiByZXF1aXJlZCBieSB0aGUgY29tbWFuZCwgYWRkcmVzcyBiaXQgMjMgc2VsZWN0cyBiZXR3ZWVuIHByb2dyYW0gZmxhc2ggbWVtb3J5CisgICAgICAgICAqICg9MCkgYW5kIGRhdGEgZmxhc2ggbWVtb3J5ICg9MSkuKi8KKyAgICAgICAgaW5mby0+Y29udmVydGVkQWRkcmVzcyA9IGFkZHJlc3MgLSBjb25maWctPkRGbGFzaEJsb2NrQmFzZSArIDB4ODAwMDAwVTsKKyAgICAgICAgaW5mby0+YWN0aXZlU2VjdG9yU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0JMT0NLX1NFQ1RPUl9TSVpFOworICAgICAgICBpbmZvLT5hY3RpdmVCbG9ja1NpemUgPSBjb25maWctPkRGbGFzaFRvdGFsU2l6ZSAvIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0JMT0NLX0NPVU5UOworCisgICAgICAgIGluZm8tPmJsb2NrV3JpdGVVbml0U2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0JMT0NLX1dSSVRFX1VOSVRfU0laRTsKKyAgICAgICAgaW5mby0+c2VjdG9yQ21kQWRkcmVzc0FsaWdtZW50ID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fU0VDVE9SX0NNRF9BRERSRVNTX0FMSUdNRU5UOworICAgICAgICBpbmZvLT5zZWN0aW9uQ21kQWRkcmVzc0FsaWdtZW50ID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fU0VDVElPTl9DTURfQUREUkVTU19BTElHTUVOVDsKKyAgICAgICAgaW5mby0+cmVzb3VyY2VDbWRBZGRyZXNzQWxpZ21lbnQgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9SRVNPVVJDRV9DTURfQUREUkVTU19BTElHTUVOVDsKKyAgICAgICAgaW5mby0+Y2hlY2tDbWRBZGRyZXNzQWxpZ21lbnQgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9DSEVDS19DTURfQUREUkVTU19BTElHTUVOVDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQgKi8KKyAgICB7CisgICAgICAgIGluZm8tPmNvbnZlcnRlZEFkZHJlc3MgPSBhZGRyZXNzIC0gY29uZmlnLT5QRmxhc2hCbG9ja0Jhc2U7CisgICAgICAgIGluZm8tPmFjdGl2ZVNlY3RvclNpemUgPSBjb25maWctPlBGbGFzaFNlY3RvclNpemU7CisgICAgICAgIGluZm8tPmFjdGl2ZUJsb2NrU2l6ZSA9IGNvbmZpZy0+UEZsYXNoVG90YWxTaXplIC8gY29uZmlnLT5QRmxhc2hCbG9ja0NvdW50OworI2lmIEZMQVNIX1NTRF9JU19TRUNPTkRBUllfRkxBU0hfRU5BQkxFRAorICAgICAgICBpZiAoY29uZmlnLT5GbGFzaE1lbW9yeUluZGV4ID09ICh1aW50OF90KWtGTEFTSF9NZW1vcnlJbmRleFNlY29uZGFyeUZsYXNoKQorICAgICAgICB7CisjaWYgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9QUk9URUNUSU9OX1JFR0lTVEVSIHx8IEZMQVNIX1NTRF9TRUNPTkRBUllfRkxBU0hfSEFTX0lUU19PV05fQUNDRVNTX1JFR0lTVEVSCisgICAgICAgICAgICAvKiBXaGVuIHJlcXVpcmVkIGJ5IHRoZSBjb21tYW5kLCBhZGRyZXNzIGJpdCAyMyBzZWxlY3RzIGJldHdlZW4gbWFpbiBmbGFzaCBtZW1vcnkKKyAgICAgICAgICAgICAqICg9MCkgYW5kIHNlY29uZGFyeSBmbGFzaCBtZW1vcnkgKD0xKS4qLworICAgICAgICAgICAgaW5mby0+Y29udmVydGVkQWRkcmVzcyArPSAweDgwMDAwMFU7CisjZW5kaWYKKyAgICAgICAgICAgIGluZm8tPmJsb2NrV3JpdGVVbml0U2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF8xX0JMT0NLX1dSSVRFX1VOSVRfU0laRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogRkxBU0hfU1NEX0lTX1NFQ09OREFSWV9GTEFTSF9FTkFCTEVEICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm8tPmJsb2NrV3JpdGVVbml0U2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19XUklURV9VTklUX1NJWkU7CisgICAgICAgIH0KKworICAgICAgICBpbmZvLT5zZWN0b3JDbWRBZGRyZXNzQWxpZ21lbnQgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU0VDVE9SX0NNRF9BRERSRVNTX0FMSUdNRU5UOworICAgICAgICBpbmZvLT5zZWN0aW9uQ21kQWRkcmVzc0FsaWdtZW50ID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1NFQ1RJT05fQ01EX0FERFJFU1NfQUxJR01FTlQ7CisgICAgICAgIGluZm8tPnJlc291cmNlQ21kQWRkcmVzc0FsaWdtZW50ID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1JFU09VUkNFX0NNRF9BRERSRVNTX0FMSUdNRU5UOworICAgICAgICBpbmZvLT5jaGVja0NtZEFkZHJlc3NBbGlnbWVudCA9IEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9DSEVDS19DTURfQUREUkVTU19BTElHTUVOVDsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorCisvKiEgQGJyaWVmIFZhbGlkYXRlcyB0aGUgZ2l2ZW4gdXNlciBrZXkgZm9yIGZsYXNoIGVyYXNlIEFQSXMuKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9jaGVja191c2VyX2tleSh1aW50MzJfdCBrZXkpCit7CisgICAgLyogVmFsaWRhdGUgdGhlIHVzZXIga2V5ICovCisgICAgaWYgKGtleSAhPSBrRkxBU0hfQXBpRXJhc2VLZXkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9FcmFzZUtleUVycm9yOworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7Cit9CisKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECisvKiEgQGJyaWVmIFVwZGF0ZXMgRmxleE5WTSBtZW1vcnkgcGFydGl0aW9uIHN0YXR1cyBhY2NvcmRpbmcgdG8gZGF0YSBmbGFzaCAwIElGUi4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX3VwZGF0ZV9mbGV4bnZtX21lbW9yeV9wYXJ0aXRpb25fc3RhdHVzKGZsYXNoX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgc3RydWN0CisgICAgeworICAgICAgICB1aW50MzJfdCByZXNlcnZlZDA7CisgICAgICAgIHVpbnQ4X3QgRmxleE5WTVBhcnRpdGlvbkNvZGU7CisgICAgICAgIHVpbnQ4X3QgRUVQUk9NRGF0YVNldFNpemU7CisgICAgICAgIHVpbnQxNl90IHJlc2VydmVkMTsKKyAgICB9IGRhdGFJRlJSZWFkT3V0OworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF9SRVNPVVJDRV9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRAorICAgIC8qIEdldCBGbGV4TlZNIG1lbW9yeSBwYXJ0aXRpb24gaW5mbyBmcm9tIGRhdGEgZmxhc2ggSUZSICovCisgICAgcmV0dXJuQ29kZSA9IEZMQVNIX1JlYWRSZXNvdXJjZShjb25maWcsIERGTEFTSF9JRlJfUkVBRFJFU09VUkNFX1NUQVJUX0FERFJFU1MsICh1aW50MzJfdCAqKSZkYXRhSUZSUmVhZE91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkYXRhSUZSUmVhZE91dCksIGtGTEFTSF9SZXNvdXJjZU9wdGlvbkZsYXNoSWZyKTsKKyAgICBpZiAocmV0dXJuQ29kZSAhPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9QYXJ0aXRpb25TdGF0dXNVcGRhdGVGYWlsdXJlOworICAgIH0KKyNlbHNlCisjZXJyb3IgIkNhbm5vdCBnZXQgRmxleE5WTSBtZW1vcnkgcGFydGl0aW9uIGluZm8iCisjZW5kaWYKKworICAgIC8qIEZpbGwgb3V0IHBhcnRpdGlvbmVkIEVFUFJPTSBzaXplICovCisgICAgZGF0YUlGUlJlYWRPdXQuRUVQUk9NRGF0YVNldFNpemUgJj0gMHgwRlU7CisgICAgc3dpdGNoIChkYXRhSUZSUmVhZE91dC5FRVBST01EYXRhU2V0U2l6ZSkKKyAgICB7CisgICAgICAgIGNhc2UgMHgwMFU6CisgICAgICAgICAgICBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAwMDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDAxVToKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDAwMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDJVOgorICAgICAgICAgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMDEwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwM1U6CisgICAgICAgICAgICBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAwMTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA0VToKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDEwMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDVVOgorICAgICAgICAgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMTAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwNlU6CisgICAgICAgICAgICBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAxMTA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA3VToKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDExMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDhVOgorICAgICAgICAgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMDAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwOVU6CisgICAgICAgICAgICBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzEwMDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDBBVToKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTAxMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MEJVOgorICAgICAgICAgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMDExOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwQ1U6CisgICAgICAgICAgICBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzExMDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDBEVToKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTEwMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MEVVOgorICAgICAgICAgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMTEwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwRlU6CisgICAgICAgICAgICBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzExMTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfUkVTRVJWRUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBGaWxsIG91dCBwYXJ0aXRpb25lZCBERmxhc2ggc2l6ZSAqLworICAgIGRhdGFJRlJSZWFkT3V0LkZsZXhOVk1QYXJ0aXRpb25Db2RlICY9IDB4MEZVOworICAgIHN3aXRjaCAoZGF0YUlGUlJlYWRPdXQuRmxleE5WTVBhcnRpdGlvbkNvZGUpCisgICAgeworICAgICAgICBjYXNlIDB4MDBVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMDAgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMDAwOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMDAgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDFVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMDEgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMDAxOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMDEgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDJVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMTAgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMDEwOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMTAgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDNVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMTEgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMDExOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMTEgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDRVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMDAgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMTAwOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMDAgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDVVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMDEgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMTAxOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMDEgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDZVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMTAgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMTEwOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMTAgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDdVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMTEgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMTExOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMTEgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDhVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMDAgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMDAwOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMDAgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDlVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMDEgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMDAxOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMDEgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MEFVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMTAgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMDEwOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMTAgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MEJVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMTEgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMDExOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMTEgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MENVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMDAgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMTAwOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMDAgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MERVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMDEgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMTAxOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMDEgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MEVVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMTAgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMTEwOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMTAgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MEZVOgorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMTEgIT0gMHhGRkZGRkZGRikKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMTExOworI2Vsc2UKKyAgICAgICAgICAgIGNvbmZpZy0+REZsYXNoVG90YWxTaXplID0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMTEgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKyNlbmRpZiAvKiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfUkVTT1VSQ0VfQ01ECisvKiEgQGJyaWVmIFZhbGlkYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIGdpdmVuIHJlc291cmNlIGFkZHJlc3MuKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9jaGVja19yZXNvdXJjZV9yYW5nZSh1aW50MzJfdCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFsaWdubWVudEJhc2VsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX3JlYWRfcmVzb3VyY2Vfb3B0aW9uX3Qgb3B0aW9uKQoreworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICB1aW50MzJfdCBtYXhSZWFkYmxlQWRkcmVzczsKKworICAgIGlmICgoc3RhcnQgJiAoYWxpZ25tZW50QmFzZWxpbmUgLSAxKSkgfHwgKGxlbmd0aEluQnl0ZXMgJiAoYWxpZ25tZW50QmFzZWxpbmUgLSAxKSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvcjsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7CisKKyAgICBtYXhSZWFkYmxlQWRkcmVzcyA9IHN0YXJ0ICsgbGVuZ3RoSW5CeXRlcyAtIDE7CisgICAgaWYgKG9wdGlvbiA9PSBrRkxBU0hfUmVzb3VyY2VPcHRpb25WZXJzaW9uSWQpCisgICAgeworICAgICAgICBpZiAoKHN0YXJ0ICE9IGtGTEFTSF9SZXNvdXJjZVJhbmdlVmVyc2lvbklkU3RhcnQpIHx8CisgICAgICAgICAgICAoKHN0YXJ0ICsgbGVuZ3RoSW5CeXRlcyAtIDEpICE9IGtGTEFTSF9SZXNvdXJjZVJhbmdlVmVyc2lvbklkRW5kKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAob3B0aW9uID09IGtGTEFTSF9SZXNvdXJjZU9wdGlvbkZsYXNoSWZyKQorICAgIHsKKyAgICAgICAgaWYgKG1heFJlYWRibGVBZGRyZXNzIDwga0ZMQVNIX1Jlc291cmNlUmFuZ2VQZmxhc2hJZnJTaXplSW5CeXRlcykKKyAgICAgICAgeworICAgICAgICB9CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVApICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QRkxBU0hfQkxPQ0tfU1dBUAorICAgICAgICBlbHNlIGlmICgoc3RhcnQgPj0ga0ZMQVNIX1Jlc291cmNlUmFuZ2VQZmxhc2hTd2FwSWZyU3RhcnQpICYmCisgICAgICAgICAgICAgICAgIChtYXhSZWFkYmxlQWRkcmVzcyA8PSBrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaFN3YXBJZnJFbmQpKQorICAgICAgICB7CisgICAgICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVAgKi8KKyAgICAgICAgZWxzZSBpZiAoKHN0YXJ0ID49IGtGTEFTSF9SZXNvdXJjZVJhbmdlRGZsYXNoSWZyU3RhcnQpICYmCisgICAgICAgICAgICAgICAgIChtYXhSZWFkYmxlQWRkcmVzcyA8PSBrRkxBU0hfUmVzb3VyY2VSYW5nZURmbGFzaElmckVuZCkpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfUkVTT1VSQ0VfQ01EICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TV0FQX0NPTlRST0xfQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU1dBUF9DT05UUk9MX0NNRAorLyohIEBicmllZiBWYWxpZGF0ZXMgdGhlIGdpdmVkIHN3YXAgY29udHJvbCBvcHRpb24uKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9jaGVja19zd2FwX2NvbnRyb2xfb3B0aW9uKGZsYXNoX3N3YXBfY29udHJvbF9vcHRpb25fdCBvcHRpb24pCit7CisgICAgaWYgKChvcHRpb24gPT0ga0ZMQVNIX1N3YXBDb250cm9sT3B0aW9uSW50aWFsaXplU3lzdGVtKSB8fCAob3B0aW9uID09IGtGTEFTSF9Td2FwQ29udHJvbE9wdGlvblNldEluVXBkYXRlU3RhdGUpIHx8CisgICAgICAgIChvcHRpb24gPT0ga0ZMQVNIX1N3YXBDb250cm9sT3B0aW9uU2V0SW5Db21wbGV0ZVN0YXRlKSB8fCAob3B0aW9uID09IGtGTEFTSF9Td2FwQ29udHJvbE9wdGlvblJlcG9ydFN0YXR1cykgfHwKKyAgICAgICAgKG9wdGlvbiA9PSBrRkxBU0hfU3dhcENvbnRyb2xPcHRpb25EaXNhYmxlU3lzdGVtKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TV0FQX0NPTlRST0xfQ01EICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QRkxBU0hfQkxPQ0tfU1dBUCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BGTEFTSF9CTE9DS19TV0FQCisvKiEgQGJyaWVmIFZhbGlkYXRlcyB0aGUgZ2l2ZWQgYWRkcmVzcyB0byBzZWUgaWYgaXQgaXMgZXF1YWwgdG8gc3dhcCBpbmRpY2F0b3IgYWRkcmVzcyBpbiBwZmxhc2ggc3dhcCBJRlIuKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF92YWxpZGF0ZV9zd2FwX2luZGljYXRvcl9hZGRyZXNzKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IGFkZHJlc3MpCit7CisgICAgZmxhc2hfc3dhcF9pZnJfZmllbGRfZGF0YV90IGZsYXNoU3dhcElmckZpZWxkRGF0YTsKKyAgICB1aW50MzJfdCBzd2FwSW5kaWNhdG9yQWRkcmVzczsKKworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF9SRVNPVVJDRV9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRAorICAgIHJldHVybkNvZGUgPQorICAgICAgICBGTEFTSF9SZWFkUmVzb3VyY2UoY29uZmlnLCBrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaFN3YXBJZnJTdGFydCwgZmxhc2hTd2FwSWZyRmllbGREYXRhLmZsYXNoU3dhcElmckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZmxhc2hTd2FwSWZyRmllbGREYXRhLmZsYXNoU3dhcElmckRhdGEpLCBrRkxBU0hfUmVzb3VyY2VPcHRpb25GbGFzaElmcik7CisKKyAgICBpZiAocmV0dXJuQ29kZSAhPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisjZWxzZQorICAgIHsKKyAgICAgICAgLyogRnJvbSBSTSwgdGhlIGFjdHVhbCBpbmZvIGFyZSBzdG9yZWQgaW4gRkNDT0I2LDcgKi8KKyAgICAgICAgdWludDMyX3QgcmV0dXJuVmFsdWVbMl07CisgICAgICAgIHJldHVybkNvZGUgPSBGTEFTSF9SZWFkT25jZShjb25maWcsIGtGTEFTSF9SZWNvcmRJbmRleFN3YXBBZGRyLCByZXR1cm5WYWx1ZSwgNCk7CisgICAgICAgIGlmIChyZXR1cm5Db2RlICE9IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgICAgIH0KKyAgICAgICAgZmxhc2hTd2FwSWZyRmllbGREYXRhLmZsYXNoU3dhcElmckZpZWxkLnN3YXBJbmRpY2F0b3JBZGRyZXNzID0gKHVpbnQxNl90KXJldHVyblZhbHVlWzBdOworICAgICAgICByZXR1cm5Db2RlID0gRkxBU0hfUmVhZE9uY2UoY29uZmlnLCBrRkxBU0hfUmVjb3JkSW5kZXhTd2FwRW5hYmxlLCByZXR1cm5WYWx1ZSwgNCk7CisgICAgICAgIGlmIChyZXR1cm5Db2RlICE9IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgICAgIH0KKyAgICAgICAgZmxhc2hTd2FwSWZyRmllbGREYXRhLmZsYXNoU3dhcElmckZpZWxkLnN3YXBFbmFibGVXb3JkID0gKHVpbnQxNl90KXJldHVyblZhbHVlWzBdOworICAgICAgICByZXR1cm5Db2RlID0gRkxBU0hfUmVhZE9uY2UoY29uZmlnLCBrRkxBU0hfUmVjb3JkSW5kZXhTd2FwRGlzYWJsZSwgcmV0dXJuVmFsdWUsIDQpOworICAgICAgICBpZiAocmV0dXJuQ29kZSAhPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgICAgICB9CisgICAgICAgIGZsYXNoU3dhcElmckZpZWxkRGF0YS5mbGFzaFN3YXBJZnJGaWVsZC5zd2FwRGlzYWJsZVdvcmQgPSAodWludDE2X3QpcmV0dXJuVmFsdWVbMF07CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBUaGUgaGlnaCBiaXRzIHZhbHVlIG9mIFN3YXAgSW5kaWNhdG9yIEFkZHJlc3MgaXMgc3RvcmVkIGluIFByb2dyYW0gRmxhc2ggU3dhcCBJRlIgRmllbGQsCisgICAgICogdGhlIGxvdyBzZXZlcnZhbCBiaXQgdmFsdWUgb2YgU3dhcCBJbmRpY2F0b3IgQWRkcmVzcyBpcyBhbHdheXMgMSdiMCAqLworICAgIHN3YXBJbmRpY2F0b3JBZGRyZXNzID0gKHVpbnQzMl90KWZsYXNoU3dhcElmckZpZWxkRGF0YS5mbGFzaFN3YXBJZnJGaWVsZC5zd2FwSW5kaWNhdG9yQWRkcmVzcyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU1dBUF9DT05UUk9MX0NNRF9BRERSRVNTX0FMSUdNRU5UOworICAgIGlmIChhZGRyZXNzICE9IHN3YXBJbmRpY2F0b3JBZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3dhcEluZGljYXRvckFkZHJlc3NFcnJvcjsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dXJuQ29kZTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVAgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRAorLyohIEBicmllZiBWYWxpZGF0ZXMgdGhlIGdpdmVkIGZsZXhyYW0gZnVuY3Rpb24gb3B0aW9uLiovCitzdGF0aWMgaW5saW5lIHN0YXR1c190IGZsYXNuX2NoZWNrX2ZsZXhyYW1fZnVuY3Rpb25fb3B0aW9uX3JhbmdlKGZsYXNoX2ZsZXhyYW1fZnVuY3Rpb25fb3B0aW9uX3Qgb3B0aW9uKQoreworICAgIGlmICgob3B0aW9uICE9IGtGTEFTSF9GbGV4cmFtRnVuY3Rpb25PcHRpb25BdmFpbGFibGVBc1JhbSkgJiYKKyAgICAgICAgKG9wdGlvbiAhPSBrRkxBU0hfRmxleHJhbUZ1bmN0aW9uT3B0aW9uQXZhaWxhYmxlRm9yRWVwcm9tKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TRVRfRkxFWFJBTV9GVU5DVElPTl9DTUQgKi8KKworLyohIEBicmllZiBHZXRzIHRoZSBmbGFzaCBwcm90ZWN0aW9uIGluZm9ybWF0aW9uIChyZWdpb24gc2l6ZSwgcmVnaW9uIGNvdW50KS4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX2dldF9wcm90ZWN0aW9uX2luZm8oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfcHJvdGVjdGlvbl9jb25maWdfdCAqaW5mbykKK3sKKyAgICB1aW50MzJfdCBwZmxhc2hUb3RhbFNpemU7CisKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogQ2xlYW4gdXAgaW5mbyBTdHJ1Y3R1cmUqLworICAgIG1lbXNldChpbmZvLCAwLCBzaXplb2YoZmxhc2hfcHJvdGVjdGlvbl9jb25maWdfdCkpOworCisvKiBOb3RlOiBLVzQwIGhhcyBhIHNlY29uZGFyeSBmbGFzaCwgYnV0IGl0IGRvZXNuJ3QgaGF2ZSBpbmRlcGVuZGVudCBwcm90ZWN0aW9uIHJlZ2lzdGVyKi8KKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgJiYgKCFGTEFTSF9TU0RfU0VDT05EQVJZX0ZMQVNIX0hBU19JVFNfT1dOX1BST1RFQ1RJT05fUkVHSVNURVIpCisgICAgcGZsYXNoVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX0NPVU5UICogRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1NJWkUgKworICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF8xX0JMT0NLX0NPVU5UICogRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIXzFfQkxPQ0tfU0laRTsKKyAgICBpbmZvLT5yZWdpb25CYXNlID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1NUQVJUX0FERFJFU1M7CisjZWxzZQorICAgIHBmbGFzaFRvdGFsU2l6ZSA9IGNvbmZpZy0+UEZsYXNoVG90YWxTaXplOworICAgIGluZm8tPnJlZ2lvbkJhc2UgPSBjb25maWctPlBGbGFzaEJsb2NrQmFzZTsKKyNlbmRpZgorCisjaWYgRkxBU0hfU1NEX0lTX1NFQ09OREFSWV9GTEFTSF9FTkFCTEVEICYmIEZMQVNIX1NTRF9TRUNPTkRBUllfRkxBU0hfSEFTX0lUU19PV05fUFJPVEVDVElPTl9SRUdJU1RFUgorICAgIGlmIChjb25maWctPkZsYXNoTWVtb3J5SW5kZXggPT0gKHVpbnQ4X3Qpa0ZMQVNIX01lbW9yeUluZGV4U2Vjb25kYXJ5Rmxhc2gpCisgICAgeworICAgICAgICBpbmZvLT5yZWdpb25Db3VudCA9IEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF8xX1BST1RFQ1RJT05fUkVHSU9OX0NPVU5UOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIGluZm8tPnJlZ2lvbkNvdW50ID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1BST1RFQ1RJT05fUkVHSU9OX0NPVU5UOworICAgIH0KKworICAgIC8qIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgZmxhc2ggcHJvdGVjdGlvbiByZWdpb24KKyAgICAgKiBJZiB0aGUgZmxhc2ggZGVuc2l0eSBpcyA+IDMyS0IsIHRoZW4gcHJvdGVjdGlvbiByZWdpb24gaXMgMS8zMiBvZiB0b3RhbCBmbGFzaCBkZW5zaXR5CisgICAgICogRWxzZSBpZiBmbGFzaCBkZW5zaXR5IGlzIDwgMzJLQiwgdGhlbiBmbGFzaCBwcm90ZWN0aW9uIHJlZ2lvbiBpcyBzZXQgdG8gMUtCICovCisgICAgaWYgKHBmbGFzaFRvdGFsU2l6ZSA+IGluZm8tPnJlZ2lvbkNvdW50ICogMTAyNCkKKyAgICB7CisgICAgICAgIGluZm8tPnJlZ2lvblNpemUgPSAocGZsYXNoVG90YWxTaXplKSAvIGluZm8tPnJlZ2lvbkNvdW50OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbmZvLT5yZWdpb25TaXplID0gMTAyNDsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTAorLyohIEBicmllZiBHZXRzIHRoZSBmbGFzaCBFeGVjdXRlLU9ubHkgYWNjZXNzIGluZm9ybWF0aW9uIChTZWdtZW50IHNpemUsIFNlZ21lbnQgY291bnQpLiovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfZ2V0X2FjY2Vzc19pbmZvKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX2FjY2Vzc19jb25maWdfdCAqaW5mbykKK3sKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogQ2xlYW4gdXAgaW5mbyBTdHJ1Y3R1cmUqLworICAgIG1lbXNldChpbmZvLCAwLCBzaXplb2YoZmxhc2hfYWNjZXNzX2NvbmZpZ190KSk7CisKKy8qIE5vdGU6IEtXNDAgaGFzIGEgc2Vjb25kYXJ5IGZsYXNoLCBidXQgaXQgZG9lc24ndCBoYXZlIGluZGVwZW5kZW50IGFjY2VzcyByZWdpc3RlciovCisjaWYgRkxBU0hfU1NEX0lTX1NFQ09OREFSWV9GTEFTSF9FTkFCTEVEICYmICghRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9BQ0NFU1NfUkVHSVNURVIpCisgICAgaW5mby0+U2VnbWVudEJhc2UgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU1RBUlRfQUREUkVTUzsKKyNlbHNlCisgICAgaW5mby0+U2VnbWVudEJhc2UgPSBjb25maWctPlBGbGFzaEJsb2NrQmFzZTsKKyNlbmRpZgorICAgIGluZm8tPlNlZ21lbnRTaXplID0gY29uZmlnLT5QRmxhc2hBY2Nlc3NTZWdtZW50U2l6ZTsKKyAgICBpbmZvLT5TZWdtZW50Q291bnQgPSBjb25maWctPlBGbGFzaEFjY2Vzc1NlZ21lbnRDb3VudDsKKworICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0FDQ0VTU19DT05UUk9MICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9mbGFzaC5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZmxhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjg1ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZmxhc2guaApAQCAtMCwwICsxLDEzODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2IE5YUAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlNMX0ZMQVNIX0hfCisjZGVmaW5lIF9GU0xfRkxBU0hfSF8KKworI2lmIChkZWZpbmVkKEJMX1RBUkdFVF9GTEFTSCkgfHwgZGVmaW5lZChCTF9UQVJHRVRfUk9NKSB8fCBkZWZpbmVkKEJMX1RBUkdFVF9SQU0pKQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAiYm9vdGxvYWRlcl9jb21tb24uaCIKKyNlbHNlCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBmbGFzaF9kcml2ZXIKKyAqIEB7CisgKi8KKworLyohCisgKiBAbmFtZSBGbGFzaCB2ZXJzaW9uCisgKiBAeworICovCisvKiEgQGJyaWVmIENvbnN0cnVjdHMgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBkcml2ZXJzLiAqLworI2lmICFkZWZpbmVkKE1BS0VfVkVSU0lPTikKKyNkZWZpbmUgTUFLRV9WRVJTSU9OKG1ham9yLCBtaW5vciwgYnVnZml4KSAoKChtYWpvcikgPDwgMTYpIHwgKChtaW5vcikgPDwgOCkgfCAoYnVnZml4KSkKKyNlbmRpZgorCisvKiEgQGJyaWVmIEZsYXNoIGRyaXZlciB2ZXJzaW9uIGZvciBTREsqLworI2RlZmluZSBGU0xfRkxBU0hfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAzLCAxKSkgLyohPCBWZXJzaW9uIDIuMy4xLiAqLworCisvKiEgQGJyaWVmIEZsYXNoIGRyaXZlciB2ZXJzaW9uIGZvciBST00qLworZW51bSBfZmxhc2hfZHJpdmVyX3ZlcnNpb25fY29uc3RhbnRzCit7CisgICAga0ZMQVNIX0RyaXZlclZlcnNpb25OYW1lID0gJ0YnLCAvKiE8IEZsYXNoIGRyaXZlciB2ZXJzaW9uIG5hbWUuKi8KKyAgICBrRkxBU0hfRHJpdmVyVmVyc2lvbk1ham9yID0gMiwgIC8qITwgTWFqb3IgZmxhc2ggZHJpdmVyIHZlcnNpb24uKi8KKyAgICBrRkxBU0hfRHJpdmVyVmVyc2lvbk1pbm9yID0gMywgIC8qITwgTWlub3IgZmxhc2ggZHJpdmVyIHZlcnNpb24uKi8KKyAgICBrRkxBU0hfRHJpdmVyVmVyc2lvbkJ1Z2ZpeCA9IDEgIC8qITwgQnVnZml4IGZvciBmbGFzaCBkcml2ZXIgdmVyc2lvbi4qLworfTsKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIEZsYXNoIGNvbmZpZ3VyYXRpb24KKyAqIEB7CisgKi8KKy8qISBAYnJpZWYgSW5kaWNhdGVzIHdoZXRoZXIgdG8gc3VwcG9ydCBGbGV4TlZNIGluIHRoZSBGbGFzaCBkcml2ZXIgKi8KKyNpZiAhZGVmaW5lZChGTEFTSF9TU0RfQ09ORklHX0VOQUJMRV9GTEVYTlZNX1NVUFBPUlQpCisjZGVmaW5lIEZMQVNIX1NTRF9DT05GSUdfRU5BQkxFX0ZMRVhOVk1fU1VQUE9SVCAxIC8qITwgRW5hYmxlcyB0aGUgRmxleE5WTSBzdXBwb3J0IGJ5IGRlZmF1bHQuICovCisjZW5kaWYKKworLyohIEBicmllZiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgRmxleE5WTSBpcyBlbmFibGVkIGluIHRoZSBGbGFzaCBkcml2ZXIgKi8KKyNkZWZpbmUgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRCAoRkxBU0hfU1NEX0NPTkZJR19FTkFCTEVfRkxFWE5WTV9TVVBQT1JUICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX05WTSkKKworLyohIEBicmllZiBJbmRpY2F0ZXMgd2hldGhlciB0byBzdXBwb3J0IFNlY29uZGFyeSBmbGFzaCBpbiB0aGUgRmxhc2ggZHJpdmVyICovCisjaWYgIWRlZmluZWQoRkxBU0hfU1NEX0NPTkZJR19FTkFCTEVfU0VDT05EQVJZX0ZMQVNIX1NVUFBPUlQpCisjZGVmaW5lIEZMQVNIX1NTRF9DT05GSUdfRU5BQkxFX1NFQ09OREFSWV9GTEFTSF9TVVBQT1JUIDEgLyohPCBFbmFibGVzIHRoZSBzZWNvbmRhcnkgZmxhc2ggc3VwcG9ydCBieSBkZWZhdWx0LiAqLworI2VuZGlmCisKKy8qISBAYnJpZWYgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNlY29uZGFyeSBmbGFzaCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEZsYXNoIGRyaXZlciAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX01VTFRJUExFX0ZMQVNIKSB8fCBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF8xX1NUQVJUX0FERFJFU1MpCisjZGVmaW5lIEZMQVNIX1NTRF9JU19TRUNPTkRBUllfRkxBU0hfRU5BQkxFRCAoRkxBU0hfU1NEX0NPTkZJR19FTkFCTEVfU0VDT05EQVJZX0ZMQVNIX1NVUFBPUlQpCisjZWxzZQorI2RlZmluZSBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgKDApCisjZW5kaWYKKworLyohIEBicmllZiBGbGFzaCBkcml2ZXIgbG9jYXRpb24uICovCisjaWYgIWRlZmluZWQoRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UKQorI2lmICghZGVmaW5lZChCTF9UQVJHRVRfUk9NKSAmJiAhZGVmaW5lZChCTF9UQVJHRVRfUkFNKSkKKyNkZWZpbmUgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UIDEgLyohPCBVc2VkIGZvciB0aGUgZmxhc2ggcmVzaWRlbnQgYXBwbGljYXRpb24uICovCisjZWxzZQorI2RlZmluZSBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgMCAvKiE8IFVzZWQgZm9yIHRoZSBub24tZmxhc2ggcmVzaWRlbnQgYXBwbGljYXRpb24uICovCisjZW5kaWYKKyNlbmRpZgorCisvKiEgQGJyaWVmIEZsYXNoIERyaXZlciBFeHBvcnQgb3B0aW9uICovCisjaWYgIWRlZmluZWQoRkxBU0hfRFJJVkVSX0lTX0VYUE9SVEVEKQorI2lmIChkZWZpbmVkKEJMX1RBUkdFVF9ST00pIHx8IGRlZmluZWQoQkxfVEFSR0VUX0ZMQVNIKSkKKyNkZWZpbmUgRkxBU0hfRFJJVkVSX0lTX0VYUE9SVEVEIDEgLyohPCBVc2VkIGZvciB0aGUgUk9NIGJvb3Rsb2FkZXIuICovCisjZWxzZQorI2RlZmluZSBGTEFTSF9EUklWRVJfSVNfRVhQT1JURUQgMCAvKiE8IFVzZWQgZm9yIHRoZSBLU0RLIGFwcGxpY2F0aW9uLiAqLworI2VuZGlmCisjZW5kaWYKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIEZsYXNoIHN0YXR1cworICogQHsKKyAqLworLyohIEBicmllZiBGbGFzaCBkcml2ZXIgc3RhdHVzIGdyb3VwLiAqLworI2lmIGRlZmluZWQoa1N0YXR1c0dyb3VwX0ZsYXNoRHJpdmVyKQorI2RlZmluZSBrU3RhdHVzR3JvdXBHZW5lcmljIGtTdGF0dXNHcm91cF9HZW5lcmljCisjZGVmaW5lIGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyIGtTdGF0dXNHcm91cF9GbGFzaERyaXZlcgorI2VsaWYgZGVmaW5lZChrU3RhdHVzR3JvdXBfRkxBU0gpCisjZGVmaW5lIGtTdGF0dXNHcm91cEdlbmVyaWMga1N0YXR1c0dyb3VwX0dlbmVyaWMKKyNkZWZpbmUga1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIga1N0YXR1c0dyb3VwX0ZMQVNICisjZWxzZQorI2RlZmluZSBrU3RhdHVzR3JvdXBHZW5lcmljIDAKKyNkZWZpbmUga1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIgMQorI2VuZGlmCisKKy8qISBAYnJpZWYgQ29uc3RydWN0cyBhIHN0YXR1cyBjb2RlIHZhbHVlIGZyb20gYSBncm91cCBhbmQgYSBjb2RlIG51bWJlci4gKi8KKyNpZiAhZGVmaW5lZChNQUtFX1NUQVRVUykKKyNkZWZpbmUgTUFLRV9TVEFUVVMoZ3JvdXAsIGNvZGUpICgoKChncm91cCkqMTAwKSArIChjb2RlKSkpCisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgRmxhc2ggZHJpdmVyIHN0YXR1cyBjb2Rlcy4KKyAqLworZW51bSBfZmxhc2hfc3RhdHVzCit7CisgICAga1N0YXR1c19GTEFTSF9TdWNjZXNzID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwR2VuZXJpYywgMCksICAgICAgICAgLyohPCBBUEkgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Ki8KKyAgICBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEdlbmVyaWMsIDQpLCAvKiE8IEludmFsaWQgYXJndW1lbnQqLworICAgIGtTdGF0dXNfRkxBU0hfU2l6ZUVycm9yID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDApLCAgIC8qITwgRXJyb3Igc2l6ZSovCisgICAga1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvciA9CisgICAgICAgIE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCAxKSwgLyohPCBQYXJhbWV0ZXIgaXMgbm90IGFsaWduZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2VsaW5lKi8KKyAgICBrU3RhdHVzX0ZMQVNIX0FkZHJlc3NFcnJvciA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCAyKSwgLyohPCBBZGRyZXNzIGlzIG91dCBvZiByYW5nZSAqLworICAgIGtTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgPQorICAgICAgICBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgMyksIC8qITwgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kIGFkZHJlc3NlcyAqLworICAgIGtTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiA9IE1BS0VfU1RBVFVTKAorICAgICAgICBrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgNCksIC8qITwgVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcyAqLworICAgIGtTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgPQorICAgICAgICBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgNSksIC8qITwgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIGNvbW1hbmQgZXhlY3V0aW9uLiAqLworICAgIGtTdGF0dXNfRkxBU0hfVW5rbm93blByb3BlcnR5ID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDYpLCAvKiE8IFVua25vd24gcHJvcGVydHkuKi8KKyAgICBrU3RhdHVzX0ZMQVNIX0VyYXNlS2V5RXJyb3IgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgNyksICAgLyohPCBBUEkgZXJhc2Uga2V5IGlzIGludmFsaWQuKi8KKyAgICBrU3RhdHVzX0ZMQVNIX1JlZ2lvbkV4ZWN1dGVPbmx5ID0KKyAgICAgICAgTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDgpLCAvKiE8IFRoZSBjdXJyZW50IHJlZ2lvbiBpcyBleGVjdXRlLW9ubHkuKi8KKyAgICBrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgPQorICAgICAgICBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgOSksIC8qITwgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4qLworICAgIGtTdGF0dXNfRkxBU0hfUGFydGl0aW9uU3RhdHVzVXBkYXRlRmFpbHVyZSA9CisgICAgICAgIE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCAxMCksIC8qITwgRmFpbGVkIHRvIHVwZGF0ZSBwYXJ0aXRpb24gc3RhdHVzLiovCisgICAga1N0YXR1c19GTEFTSF9TZXRGbGV4cmFtQXNFZXByb21FcnJvciA9CisgICAgICAgIE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCAxMSksIC8qITwgRmFpbGVkIHRvIHNldCBGbGV4UkFNIGFzIEVFUFJPTS4qLworICAgIGtTdGF0dXNfRkxBU0hfUmVjb3ZlckZsZXhyYW1Bc1JhbUVycm9yID0KKyAgICAgICAgTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDEyKSwgLyohPCBGYWlsZWQgdG8gcmVjb3ZlciBGbGV4UkFNIGFzIFJBTS4qLworICAgIGtTdGF0dXNfRkxBU0hfU2V0RmxleHJhbUFzUmFtRXJyb3IgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgMTMpLCAvKiE8IEZhaWxlZCB0byBzZXQgRmxleFJBTSBhcyBSQU0uKi8KKyAgICBrU3RhdHVzX0ZMQVNIX1JlY292ZXJGbGV4cmFtQXNFZXByb21FcnJvciA9CisgICAgICAgIE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCAxNCksIC8qITwgRmFpbGVkIHRvIHJlY292ZXIgRmxleFJBTSBhcyBFRVBST00uKi8KKyAgICBrU3RhdHVzX0ZMQVNIX0NvbW1hbmROb3RTdXBwb3J0ZWQgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgMTUpLCAvKiE8IEZsYXNoIEFQSSBpcyBub3Qgc3VwcG9ydGVkLiovCisgICAga1N0YXR1c19GTEFTSF9Td2FwU3lzdGVtTm90SW5VbmluaXRpYWxpemVkID0KKyAgICAgICAgTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDE2KSwgLyohPCBTd2FwIHN5c3RlbSBpcyBub3QgaW4gYW4gdW5pbml0aWFsemVkIHN0YXRlLiovCisgICAga1N0YXR1c19GTEFTSF9Td2FwSW5kaWNhdG9yQWRkcmVzc0Vycm9yID0KKyAgICAgICAgTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDE3KSwgLyohPCBUaGUgc3dhcCBpbmRpY2F0b3IgYWRkcmVzcyBpcyBpbnZhbGlkLiovCisgICAga1N0YXR1c19GTEFTSF9SZWFkT25seVByb3BlcnR5ID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDE4KSwgLyohPCBUaGUgZmxhc2ggcHJvcGVydHkgaXMgcmVhZC1vbmx5LiovCisgICAga1N0YXR1c19GTEFTSF9JbnZhbGlkUHJvcGVydHlWYWx1ZSA9CisgICAgICAgIE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCAxOSksIC8qITwgVGhlIGZsYXNoIHByb3BlcnR5IHZhbHVlIGlzIG91dCBvZiByYW5nZS4qLworICAgIGtTdGF0dXNfRkxBU0hfSW52YWxpZFNwZWN1bGF0aW9uT3B0aW9uID0KKyAgICAgICAgTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDIwKSwgLyohPCBUaGUgb3B0aW9uIG9mIGZsYXNoIHByZWZldGNoIHNwZWN1bGF0aW9uIGlzIGludmFsaWQuKi8KK307CisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBGbGFzaCBBUEkga2V5CisgKiBAeworICovCisvKiEgQGJyaWVmIENvbnN0cnVjdHMgdGhlIGZvdXIgY2hhcmFjdGVyIGNvZGUgZm9yIHRoZSBGbGFzaCBkcml2ZXIgQVBJIGtleS4gKi8KKyNpZiAhZGVmaW5lZChGT1VSX0NIQVJfQ09ERSkKKyNkZWZpbmUgRk9VUl9DSEFSX0NPREUoYSwgYiwgYywgZCkgKCgoZCkgPDwgMjQpIHwgKChjKSA8PCAxNikgfCAoKGIpIDw8IDgpIHwgKChhKSkpCisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIEZsYXNoIGRyaXZlciBBUEkga2V5cy4KKyAqCisgKiBAbm90ZSBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIGJ1aWx0IHdpdGggYSBieXRlIG9yZGVyIHN1Y2ggdGhhdCB0aGUgc3RyaW5nCisgKiBiZWluZyByZWFkYWJsZSBpbiBleHBlY3RlZCBvcmRlciB3aGVuIHZpZXdlZCBpbiBhIGhleCBlZGl0b3IsIGlmIHRoZSB2YWx1ZQorICogaXMgdHJlYXRlZCBhcyBhIDMyLWJpdCBsaXR0bGUgZW5kaWFuIHZhbHVlLgorICovCitlbnVtIF9mbGFzaF9kcml2ZXJfYXBpX2tleXMKK3sKKyAgICBrRkxBU0hfQXBpRXJhc2VLZXkgPSBGT1VSX0NIQVJfQ09ERSgnaycsICdmJywgJ2UnLCAnaycpIC8qITwgS2V5IHZhbHVlIHVzZWQgdG8gdmFsaWRhdGUgYWxsIGZsYXNoIGVyYXNlIEFQSXMuKi8KK307CisvKkB9Ki8KKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIHN1cHBvcnRlZCBmbGFzaCBtYXJnaW4gbGV2ZWxzLgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX21hcmdpbl92YWx1ZQoreworICAgIGtGTEFTSF9NYXJnaW5WYWx1ZU5vcm1hbCwgIC8qITwgVXNlIHRoZSAnbm9ybWFsJyByZWFkIGxldmVsIGZvciAxcy4qLworICAgIGtGTEFTSF9NYXJnaW5WYWx1ZVVzZXIsICAgIC8qITwgQXBwbHkgdGhlICdVc2VyJyBtYXJnaW4gdG8gdGhlIG5vcm1hbCByZWFkLTEgbGV2ZWwuKi8KKyAgICBrRkxBU0hfTWFyZ2luVmFsdWVGYWN0b3J5LCAvKiE8IEFwcGx5IHRoZSAnRmFjdG9yeScgbWFyZ2luIHRvIHRoZSBub3JtYWwgcmVhZC0xIGxldmVsLiovCisgICAga0ZMQVNIX01hcmdpblZhbHVlSW52YWxpZCAgLyohPCBOb3QgcmVhbCBtYXJnaW4gbGV2ZWwsIFVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByYW5nZSBvZiB2YWxpZCBtYXJnaW4gbGV2ZWwuICovCit9IGZsYXNoX21hcmdpbl92YWx1ZV90OworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgdGhlIHRocmVlIHBvc3NpYmxlIGZsYXNoIHNlY3VyaXR5IHN0YXRlcy4KKyAqLwordHlwZWRlZiBlbnVtIF9mbGFzaF9zZWN1cml0eV9zdGF0ZQoreworICAgIGtGTEFTSF9TZWN1cml0eVN0YXRlTm90U2VjdXJlLCAgICAgICAvKiE8IEZsYXNoIGlzIG5vdCBzZWN1cmUuKi8KKyAgICBrRkxBU0hfU2VjdXJpdHlTdGF0ZUJhY2tkb29yRW5hYmxlZCwgLyohPCBGbGFzaCBiYWNrZG9vciBpcyBlbmFibGVkLiovCisgICAga0ZMQVNIX1NlY3VyaXR5U3RhdGVCYWNrZG9vckRpc2FibGVkIC8qITwgRmxhc2ggYmFja2Rvb3IgaXMgZGlzYWJsZWQuKi8KK30gZmxhc2hfc2VjdXJpdHlfc3RhdGVfdDsKKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIHRoZSB0aHJlZSBwb3NzaWJsZSBmbGFzaCBwcm90ZWN0aW9uIGxldmVscy4KKyAqLwordHlwZWRlZiBlbnVtIF9mbGFzaF9wcm90ZWN0aW9uX3N0YXRlCit7CisgICAga0ZMQVNIX1Byb3RlY3Rpb25TdGF0ZVVucHJvdGVjdGVkLCAvKiE8IEZsYXNoIHJlZ2lvbiBpcyBub3QgcHJvdGVjdGVkLiovCisgICAga0ZMQVNIX1Byb3RlY3Rpb25TdGF0ZVByb3RlY3RlZCwgICAvKiE8IEZsYXNoIHJlZ2lvbiBpcyBwcm90ZWN0ZWQuKi8KKyAgICBrRkxBU0hfUHJvdGVjdGlvblN0YXRlTWl4ZWQgICAgICAgIC8qITwgRmxhc2ggaXMgbWl4ZWQgd2l0aCBwcm90ZWN0ZWQgYW5kIHVucHJvdGVjdGVkIHJlZ2lvbi4qLworfSBmbGFzaF9wcm90ZWN0aW9uX3N0YXRlX3Q7CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgdGhyZWUgcG9zc2libGUgZmxhc2ggZXhlY3V0ZSBhY2Nlc3MgbGV2ZWxzLgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX2V4ZWN1dGVfb25seV9hY2Nlc3Nfc3RhdGUKK3sKKyAgICBrRkxBU0hfQWNjZXNzU3RhdGVVbkxpbWl0ZWQsICAgLyohPCBGbGFzaCByZWdpb24gaXMgdW5saW1pdGVkLiovCisgICAga0ZMQVNIX0FjY2Vzc1N0YXRlRXhlY3V0ZU9ubHksIC8qITwgRmxhc2ggcmVnaW9uIGlzIGV4ZWN1dGUgb25seS4qLworICAgIGtGTEFTSF9BY2Nlc3NTdGF0ZU1peGVkICAgICAgICAvKiE8IEZsYXNoIGlzIG1peGVkIHdpdGggdW5saW1pdGVkIGFuZCBleGVjdXRlIG9ubHkgcmVnaW9uLiovCit9IGZsYXNoX2V4ZWN1dGVfb25seV9hY2Nlc3Nfc3RhdGVfdDsKKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIHZhcmlvdXMgZmxhc2ggcHJvcGVydGllcy4KKyAqLwordHlwZWRlZiBlbnVtIF9mbGFzaF9wcm9wZXJ0eV90YWcKK3sKKyAgICBrRkxBU0hfUHJvcGVydHlQZmxhc2hTZWN0b3JTaXplID0gMHgwMFUsICAgICAgICAgLyohPCBQZmxhc2ggc2VjdG9yIHNpemUgcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlQZmxhc2hUb3RhbFNpemUgPSAweDAxVSwgICAgICAgICAgLyohPCBQZmxhc2ggdG90YWwgc2l6ZSBwcm9wZXJ0eS4qLworICAgIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaEJsb2NrU2l6ZSA9IDB4MDJVLCAgICAgICAgICAvKiE8IFBmbGFzaCBibG9jayBzaXplIHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5UGZsYXNoQmxvY2tDb3VudCA9IDB4MDNVLCAgICAgICAgIC8qITwgUGZsYXNoIGJsb2NrIGNvdW50IHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5UGZsYXNoQmxvY2tCYXNlQWRkciA9IDB4MDRVLCAgICAgIC8qITwgUGZsYXNoIGJsb2NrIGJhc2UgYWRkcmVzcyBwcm9wZXJ0eS4qLworICAgIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaEZhY1N1cHBvcnQgPSAweDA1VSwgICAgICAgICAvKiE8IFBmbGFzaCBmYWMgc3VwcG9ydCBwcm9wZXJ0eS4qLworICAgIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaEFjY2Vzc1NlZ21lbnRTaXplID0gMHgwNlUsICAvKiE8IFBmbGFzaCBhY2Nlc3Mgc2VnbWVudCBzaXplIHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5UGZsYXNoQWNjZXNzU2VnbWVudENvdW50ID0gMHgwN1UsIC8qITwgUGZsYXNoIGFjY2VzcyBzZWdtZW50IGNvdW50IHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5RmxleFJhbUJsb2NrQmFzZUFkZHIgPSAweDA4VSwgICAgIC8qITwgRmxleFJhbSBibG9jayBiYXNlIGFkZHJlc3MgcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlGbGV4UmFtVG90YWxTaXplID0gMHgwOVUsICAgICAgICAgLyohPCBGbGV4UmFtIHRvdGFsIHNpemUgcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlEZmxhc2hTZWN0b3JTaXplID0gMHgxMFUsICAgICAgICAgLyohPCBEZmxhc2ggc2VjdG9yIHNpemUgcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlEZmxhc2hUb3RhbFNpemUgPSAweDExVSwgICAgICAgICAgLyohPCBEZmxhc2ggdG90YWwgc2l6ZSBwcm9wZXJ0eS4qLworICAgIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaEJsb2NrU2l6ZSA9IDB4MTJVLCAgICAgICAgICAvKiE8IERmbGFzaCBibG9jayBzaXplIHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5RGZsYXNoQmxvY2tDb3VudCA9IDB4MTNVLCAgICAgICAgIC8qITwgRGZsYXNoIGJsb2NrIGNvdW50IHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5RGZsYXNoQmxvY2tCYXNlQWRkciA9IDB4MTRVLCAgICAgIC8qITwgRGZsYXNoIGJsb2NrIGJhc2UgYWRkcmVzcyBwcm9wZXJ0eS4qLworICAgIGtGTEFTSF9Qcm9wZXJ0eUVlcHJvbVRvdGFsU2l6ZSA9IDB4MTVVLCAgICAgICAgICAvKiE8IEVFUFJPTSB0b3RhbCBzaXplIHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5Rmxhc2hNZW1vcnlJbmRleCA9IDB4MjBVLCAgICAgICAgIC8qITwgRmxhc2ggbWVtb3J5IGluZGV4IHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5Rmxhc2hDYWNoZUNvbnRyb2xsZXJJbmRleCA9IDB4MjFVIC8qITwgRmxhc2ggY2FjaGUgY29udHJvbGxlciBpbmRleCBwcm9wZXJ0eS4qLworfSBmbGFzaF9wcm9wZXJ0eV90YWdfdDsKKworLyohCisgKiBAYnJpZWYgQ29uc3RhbnRzIGZvciBleGVjdXRlLWluLVJBTSBmbGFzaCBmdW5jdGlvbi4KKyAqLworZW51bSBfZmxhc2hfZXhlY3V0ZV9pbl9yYW1fZnVuY3Rpb25fY29uc3RhbnRzCit7CisgICAga0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTWF4U2l6ZUluV29yZHMgPSAxNlUsIC8qITwgVGhlIG1heGltdW0gc2l6ZSBvZiBleGVjdXRlLWluLVJBTSBmdW5jdGlvbi4qLworICAgIGtGTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvblRvdGFsTnVtID0gMlUgICAgICAgICAvKiE8IFRvdGFsIG51bWJlciBvZiBleGVjdXRlLWluLVJBTSBmdW5jdGlvbnMuKi8KK307CisKKy8qIQorICogQGJyaWVmIEZsYXNoIGV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGluZm9ybWF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfZmxhc2hfZXhlY3V0ZV9pbl9yYW1fZnVuY3Rpb25fY29uZmlnCit7CisgICAgdWludDMyX3QgYWN0aXZlRnVuY3Rpb25Db3VudDsgICAgICAvKiE8IE51bWJlciBvZiBhdmFpbGFibGUgZXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb25zLiovCisgICAgdWludDMyX3QgKmZsYXNoUnVuQ29tbWFuZDsgICAgICAgICAvKiE8IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uOiBmbGFzaF9ydW5fY29tbWFuZC4qLworICAgIHVpbnQzMl90ICpmbGFzaENvbW1vbkJpdE9wZXJhdGlvbjsgLyohPCBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbjogZmxhc2hfY29tbW9uX2JpdF9vcGVyYXRpb24uKi8KK30gZmxhc2hfZXhlY3V0ZV9pbl9yYW1fZnVuY3Rpb25fY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgdHdvIHBvc3NpYmxlIG9wdGlvbnMgb2YgZmxhc2ggcmVhZCByZXNvdXJjZSBjb21tYW5kLgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX3JlYWRfcmVzb3VyY2Vfb3B0aW9uCit7CisgICAga0ZMQVNIX1Jlc291cmNlT3B0aW9uRmxhc2hJZnIgPQorICAgICAgICAweDAwVSwgLyohPCBTZWxlY3QgY29kZSBmb3IgUHJvZ3JhbSBmbGFzaCAwIElGUiwgUHJvZ3JhbSBmbGFzaCBzd2FwIDAgSUZSLCBEYXRhIGZsYXNoIDAgSUZSICovCisgICAga0ZMQVNIX1Jlc291cmNlT3B0aW9uVmVyc2lvbklkID0gMHgwMVUgLyohPCBTZWxlY3QgY29kZSBmb3IgdGhlIHZlcnNpb24gSUQqLworfSBmbGFzaF9yZWFkX3Jlc291cmNlX29wdGlvbl90OworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgdGhlIHJhbmdlIG9mIHNwZWNpYWwtcHVycG9zZSBmbGFzaCByZXNvdXJjZQorICovCitlbnVtIF9mbGFzaF9yZWFkX3Jlc291cmNlX3JhbmdlCit7CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkUgPT0gMSkKKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaElmclNpemVJbkJ5dGVzID0gMTAyNFUsICAvKiE8IFBmbGFzaCBJRlIgc2l6ZSBpbiBieXRlLiovCisgICAga0ZMQVNIX1Jlc291cmNlUmFuZ2VWZXJzaW9uSWRTaXplSW5CeXRlcyA9IDhVLCAgICAgLyohPCBWZXJzaW9uIElEIElGUiBzaXplIGluIGJ5dGUuKi8KKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVZlcnNpb25JZFN0YXJ0ID0gMHgwOFUsICAgICAgICAvKiE8IFZlcnNpb24gSUQgSUZSIHN0YXJ0IGFkZHJlc3MuKi8KKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVZlcnNpb25JZEVuZCA9IDB4MEZVLCAgICAgICAgICAvKiE8IFZlcnNpb24gSUQgSUZSIGVuZCBhZGRyZXNzLiovCisgICAga0ZMQVNIX1Jlc291cmNlUmFuZ2VQZmxhc2hTd2FwSWZyU3RhcnQgPSAweDQwMDAwVSwgLyohPCBQZmxhc2ggc3dhcCBJRlIgc3RhcnQgYWRkcmVzcy4qLworICAgIGtGTEFTSF9SZXNvdXJjZVJhbmdlUGZsYXNoU3dhcElmckVuZCA9CisgICAgICAgIChrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaFN3YXBJZnJTdGFydCArIDB4M0ZGVSksIC8qITwgUGZsYXNoIHN3YXAgSUZSIGVuZCBhZGRyZXNzLiovCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkwgPT0gMSBvciBGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZBID0gPTEgKi8KKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaElmclNpemVJbkJ5dGVzID0gMjU2VSwgIC8qITwgUGZsYXNoIElGUiBzaXplIGluIGJ5dGUuKi8KKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVZlcnNpb25JZFNpemVJbkJ5dGVzID0gOFUsICAgIC8qITwgVmVyc2lvbiBJRCBJRlIgc2l6ZSBpbiBieXRlLiovCisgICAga0ZMQVNIX1Jlc291cmNlUmFuZ2VWZXJzaW9uSWRTdGFydCA9IDB4MDBVLCAgICAgICAvKiE8IFZlcnNpb24gSUQgSUZSIHN0YXJ0IGFkZHJlc3MuKi8KKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVZlcnNpb25JZEVuZCA9IDB4MDdVLCAgICAgICAgIC8qITwgVmVyc2lvbiBJRCBJRlIgZW5kIGFkZHJlc3MuKi8KKyNpZiAweDIwMDAwVSA9PSAoRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX0NPVU5UICogRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1NJWkUpCisgICAga0ZMQVNIX1Jlc291cmNlUmFuZ2VQZmxhc2hTd2FwSWZyU3RhcnQgPSAweDgwMDBVLCAvKiE8IFBmbGFzaCBzd2FwIElGUiBzdGFydCBhZGRyZXNzLiovCisjZWxpZiAweDQwMDAwVSA9PSAoRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX0NPVU5UICogRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1NJWkUpCisgICAga0ZMQVNIX1Jlc291cmNlUmFuZ2VQZmxhc2hTd2FwSWZyU3RhcnQgPSAweDEwMDAwVSwgLyohPCBQZmxhc2ggc3dhcCBJRlIgc3RhcnQgYWRkcmVzcy4qLworI2VsaWYgMHg4MDAwMFUgPT0gKEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19DT1VOVCAqIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19TSVpFKQorICAgIGtGTEFTSF9SZXNvdXJjZVJhbmdlUGZsYXNoU3dhcElmclN0YXJ0ID0gMHgyMDAwMFUsIC8qITwgUGZsYXNoIHN3YXAgSUZSIHN0YXJ0IGFkZHJlc3MuKi8KKyNlbHNlCisgICAga0ZMQVNIX1Jlc291cmNlUmFuZ2VQZmxhc2hTd2FwSWZyU3RhcnQgPSAwLAorI2VuZGlmCisgICAga0ZMQVNIX1Jlc291cmNlUmFuZ2VQZmxhc2hTd2FwSWZyRW5kID0KKyAgICAgICAgKGtGTEFTSF9SZXNvdXJjZVJhbmdlUGZsYXNoU3dhcElmclN0YXJ0ICsgMHhGRlUpLCAvKiE8IFBmbGFzaCBzd2FwIElGUiBlbmQgYWRkcmVzcy4qLworI2VuZGlmCisgICAga0ZMQVNIX1Jlc291cmNlUmFuZ2VEZmxhc2hJZnJTdGFydCA9IDB4ODAwMDAwVSwgLyohPCBEZmxhc2ggSUZSIHN0YXJ0IGFkZHJlc3MuKi8KKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZURmbGFzaElmckVuZCA9IDB4ODAwM0ZGVSwgICAvKiE8IERmbGFzaCBJRlIgZW5kIGFkZHJlc3MuKi8KK307CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgaW5kZXggb2YgcmVhZC9wcm9ncmFtIG9uY2UgcmVjb3JkCisgKi8KK2VudW0gX2szX2ZsYXNoX3JlYWRfb25jZV9pbmRleAoreworICAgIGtGTEFTSF9SZWNvcmRJbmRleFN3YXBBZGRyID0gMHhBMVUsICAgIC8qITwgSW5kZXggb2YgU3dhcCBpbmRpY2F0b3IgYWRkcmVzcy4qLworICAgIGtGTEFTSF9SZWNvcmRJbmRleFN3YXBFbmFibGUgPSAweEEyVSwgIC8qITwgSW5kZXggb2YgU3dhcCBzeXN0ZW0gZW5hYmxlLiovCisgICAga0ZMQVNIX1JlY29yZEluZGV4U3dhcERpc2FibGUgPSAweEEzVSwgLyohPCBJbmRleCBvZiBTd2FwIHN5c3RlbSBkaXNhYmxlLiovCit9OworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgdGhlIHR3byBwb3NzaWxiZSBvcHRpb25zIG9mIHNldCBGbGV4UkFNIGZ1bmN0aW9uIGNvbW1hbmQuCisgKi8KK3R5cGVkZWYgZW51bSBfZmxhc2hfZmxleHJhbV9mdW5jdGlvbl9vcHRpb24KK3sKKyAgICBrRkxBU0hfRmxleHJhbUZ1bmN0aW9uT3B0aW9uQXZhaWxhYmxlQXNSYW0gPSAweEZGVSwgICAgLyohPCBBbiBvcHRpb24gdXNlZCB0byBtYWtlIEZsZXhSQU0gYXZhaWxhYmxlIGFzIFJBTSAqLworICAgIGtGTEFTSF9GbGV4cmFtRnVuY3Rpb25PcHRpb25BdmFpbGFibGVGb3JFZXByb20gPSAweDAwVSAvKiE8IEFuIG9wdGlvbiB1c2VkIHRvIG1ha2UgRmxleFJBTSBhdmFpbGFibGUgZm9yIEVFUFJPTSAqLworfSBmbGFzaF9mbGV4cmFtX2Z1bmN0aW9uX29wdGlvbl90OworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgYWNjZWxlcmF0aW9uIFJBTSBwcm9wZXJ0eS4KKyAqLworZW51bSBfZmxhc2hfYWNjZWxlcmF0aW9uX3JhbV9wcm9wZXJ0eQoreworICAgIGtGTEFTSF9BY2NlbGVyYXRpb25SYW1TaXplID0gMHg0MDBVCit9OworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgdGhlIHBvc3NpYmxlIG9wdGlvbnMgb2YgU3dhcCBmdW5jdGlvbgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX3N3YXBfZnVuY3Rpb25fb3B0aW9uCit7CisgICAga0ZMQVNIX1N3YXBGdW5jdGlvbk9wdGlvbkVuYWJsZSA9IDB4MDBVLCAvKiE8IEFuIG9wdGlvbiB1c2VkIHRvIGVuYWJsZSB0aGUgU3dhcCBmdW5jdGlvbiAqLworICAgIGtGTEFTSF9Td2FwRnVuY3Rpb25PcHRpb25EaXNhYmxlID0gMHgwMVUgLyohPCBBbiBvcHRpb24gdXNlZCB0byBkaXNhYmxlIHRoZSBTd2FwIGZ1bmN0aW9uICovCit9IGZsYXNoX3N3YXBfZnVuY3Rpb25fb3B0aW9uX3Q7CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgcG9zc2libGUgb3B0aW9ucyBvZiBTd2FwIGNvbnRyb2wgY29tbWFuZHMKKyAqLwordHlwZWRlZiBlbnVtIF9mbGFzaF9zd2FwX2NvbnRyb2xfb3B0aW9uCit7CisgICAga0ZMQVNIX1N3YXBDb250cm9sT3B0aW9uSW50aWFsaXplU3lzdGVtID0gMHgwMVUsICAgIC8qITwgQW4gb3B0aW9uIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgU3dhcCBzeXN0ZW0gKi8KKyAgICBrRkxBU0hfU3dhcENvbnRyb2xPcHRpb25TZXRJblVwZGF0ZVN0YXRlID0gMHgwMlUsICAgLyohPCBBbiBvcHRpb24gdXNlZCB0byBzZXQgdGhlIFN3YXAgaW4gYW4gdXBkYXRlIHN0YXRlICovCisgICAga0ZMQVNIX1N3YXBDb250cm9sT3B0aW9uU2V0SW5Db21wbGV0ZVN0YXRlID0gMHgwNFUsIC8qITwgQW4gb3B0aW9uIHVzZWQgdG8gc2V0IHRoZSBTd2FwIGluIGEgY29tcGxldGUgc3RhdGUgKi8KKyAgICBrRkxBU0hfU3dhcENvbnRyb2xPcHRpb25SZXBvcnRTdGF0dXMgPSAweDA4VSwgICAgICAgLyohPCBBbiBvcHRpb24gdXNlZCB0byByZXBvcnQgdGhlIFN3YXAgc3RhdHVzICovCisgICAga0ZMQVNIX1N3YXBDb250cm9sT3B0aW9uRGlzYWJsZVN5c3RlbSA9IDB4MTBVICAgICAgIC8qITwgQW4gb3B0aW9uIHVzZWQgdG8gZGlzYWJsZSB0aGUgU3dhcCBzdGF0dXMgKi8KK30gZmxhc2hfc3dhcF9jb250cm9sX29wdGlvbl90OworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgdGhlIHBvc3NpYmxlIGZsYXNoIFN3YXAgc3RhdHVzLgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX3N3YXBfc3RhdGUKK3sKKyAgICBrRkxBU0hfU3dhcFN0YXRlVW5pbml0aWFsaXplZCA9IDB4MDBVLCAvKiE8IEZsYXNoIFN3YXAgc3lzdGVtIGlzIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUuKi8KKyAgICBrRkxBU0hfU3dhcFN0YXRlUmVhZHkgPSAweDAxVSwgICAgICAgICAvKiE8IEZsYXNoIFN3YXAgc3lzdGVtIGlzIGluIGEgcmVhZHkgc3RhdGUuKi8KKyAgICBrRkxBU0hfU3dhcFN0YXRlVXBkYXRlID0gMHgwMlUsICAgICAgICAvKiE8IEZsYXNoIFN3YXAgc3lzdGVtIGlzIGluIGFuIHVwZGF0ZSBzdGF0ZS4qLworICAgIGtGTEFTSF9Td2FwU3RhdGVVcGRhdGVFcmFzZWQgPSAweDAzVSwgIC8qITwgRmxhc2ggU3dhcCBzeXN0ZW0gaXMgaW4gYW4gdXBkYXRlRXJhc2VkIHN0YXRlLiovCisgICAga0ZMQVNIX1N3YXBTdGF0ZUNvbXBsZXRlID0gMHgwNFUsICAgICAgLyohPCBGbGFzaCBTd2FwIHN5c3RlbSBpcyBpbiBhIGNvbXBsZXRlIHN0YXRlLiovCisgICAga0ZMQVNIX1N3YXBTdGF0ZURpc2FibGVkID0gMHgwNVUgICAgICAgLyohPCBGbGFzaCBTd2FwIHN5c3RlbSBpcyBpbiBhIGRpc2FibGVkIHN0YXRlLiovCit9IGZsYXNoX3N3YXBfc3RhdGVfdDsKKworLyohCisgKiBAYnJlaWYgRW51bWVyYXRpb24gZm9yIHRoZSBwb3NzaWJsZSBmbGFzaCBTd2FwIGJsb2NrIHN0YXR1cworICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX3N3YXBfYmxvY2tfc3RhdHVzCit7CisgICAga0ZMQVNIX1N3YXBCbG9ja1N0YXR1c0xvd2VySGFsZlByb2dyYW1CbG9ja3NBdFplcm8gPQorICAgICAgICAweDAwVSwgLyohPCBTd2FwIGJsb2NrIHN0YXR1cyBpcyB0aGF0IGxvd2VyIGhhbGYgcHJvZ3JhbSBibG9jayBhdCB6ZXJvLiovCisgICAga0ZMQVNIX1N3YXBCbG9ja1N0YXR1c1VwcGVySGFsZlByb2dyYW1CbG9ja3NBdFplcm8gPQorICAgICAgICAweDAxVSwgLyohPCBTd2FwIGJsb2NrIHN0YXR1cyBpcyB0aGF0IHVwcGVyIGhhbGYgcHJvZ3JhbSBibG9jayBhdCB6ZXJvLiovCit9IGZsYXNoX3N3YXBfYmxvY2tfc3RhdHVzX3Q7CisKKy8qIQorICogQGJyaWVmIEZsYXNoIFN3YXAgaW5mb3JtYXRpb24KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2ZsYXNoX3N3YXBfc3RhdGVfY29uZmlnCit7CisgICAgZmxhc2hfc3dhcF9zdGF0ZV90IGZsYXNoU3dhcFN0YXRlOyAgICAgICAgICAgICAgICAvKiE8VGhlIGN1cnJlbnQgU3dhcCBzeXN0ZW0gc3RhdHVzLiovCisgICAgZmxhc2hfc3dhcF9ibG9ja19zdGF0dXNfdCBjdXJyZW50U3dhcEJsb2NrU3RhdHVzOyAvKiE8IFRoZSBjdXJyZW50IFN3YXAgYmxvY2sgc3RhdHVzLiovCisgICAgZmxhc2hfc3dhcF9ibG9ja19zdGF0dXNfdCBuZXh0U3dhcEJsb2NrU3RhdHVzOyAgICAvKiE8IFRoZSBuZXh0IFN3YXAgYmxvY2sgc3RhdHVzLiovCit9IGZsYXNoX3N3YXBfc3RhdGVfY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIEZsYXNoIFN3YXAgSUZSIGZpZWxkcworICovCit0eXBlZGVmIHN0cnVjdCBfZmxhc2hfc3dhcF9pZnJfZmllbGRfY29uZmlnCit7CisgICAgdWludDE2X3Qgc3dhcEluZGljYXRvckFkZHJlc3M7IC8qITwgQSBTd2FwIGluZGljYXRvciBhZGRyZXNzIGZpZWxkLiovCisgICAgdWludDE2X3Qgc3dhcEVuYWJsZVdvcmQ7ICAgICAgIC8qITwgQSBTd2FwIGVuYWJsZSB3b3JkIGZpZWxkLiovCisgICAgdWludDhfdCByZXNlcnZlZDBbNF07ICAgICAgICAgIC8qITwgQSByZXNlcnZlZCBmaWVsZC4qLworI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZFID09IDEpCisgICAgdWludDhfdCByZXNlcnZlZDFbMl07ICAgICAvKiE8IEEgcmVzZXJ2ZWQgZmllbGQuKi8KKyAgICB1aW50MTZfdCBzd2FwRGlzYWJsZVdvcmQ7IC8qITwgQSBTd2FwIGRpc2FibGUgd29yZCBmaWVsZC4qLworICAgIHVpbnQ4X3QgcmVzZXJ2ZWQyWzRdOyAgICAgLyohPCBBIHJlc2VydmVkIGZpZWxkLiovCisjZW5kaWYKK30gZmxhc2hfc3dhcF9pZnJfZmllbGRfY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIEZsYXNoIFN3YXAgSUZSIGZpZWxkIGRhdGEKKyAqLwordHlwZWRlZiB1bmlvbiBfZmxhc2hfc3dhcF9pZnJfZmllbGRfZGF0YQoreworICAgIHVpbnQzMl90IGZsYXNoU3dhcElmckRhdGFbMl07ICAgICAgICAgICAgICAgICAgICAvKiE8IEEgZmxhc2ggU3dhcCBJRlIgZmllbGQgZGF0YSAuKi8KKyAgICBmbGFzaF9zd2FwX2lmcl9maWVsZF9jb25maWdfdCBmbGFzaFN3YXBJZnJGaWVsZDsgLyohPCBBIGZsYXNoIFN3YXAgSUZSIGZpZWxkIHN0cnVjdHVyZS4qLworfSBmbGFzaF9zd2FwX2lmcl9maWVsZF9kYXRhX3Q7CisKKy8qIQorICogQGJyaWVmIFBGbGFzaCBwcm90ZWN0aW9uIHN0YXR1cyAtIGxvdyAzMmJpdAorICovCit0eXBlZGVmIHVuaW9uIF9wZmxhc2hfcHJvdGVjdGlvbl9zdGF0dXNfbG93Cit7CisgICAgdWludDMyX3QgcHJvdGwzMmI7IC8qITwgUFJPVFszMTowXSAuKi8KKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgcHJvdHNsOyAvKiE8IFBST1RTWzc6MF0gLiovCisgICAgICAgIHVpbnQ4X3QgcHJvdHNoOyAvKiE8IFBST1RTWzE1OjhdIC4qLworICAgICAgICB1aW50OF90IHJlc2VydmVkWzJdOworICAgIH0gcHJvdHMxNmI7Cit9IHBmbGFzaF9wcm90ZWN0aW9uX3N0YXR1c19sb3dfdDsKKworLyohCisgKiBAYnJpZWYgUEZsYXNoIHByb3RlY3Rpb24gc3RhdHVzIC0gZnVsbAorICovCit0eXBlZGVmIHN0cnVjdCBfcGZsYXNoX3Byb3RlY3Rpb25fc3RhdHVzCit7CisgICAgcGZsYXNoX3Byb3RlY3Rpb25fc3RhdHVzX2xvd190IHZhbHVlTG93MzJiOyAvKiE8IFBST1RbMzE6MF0gb3IgUFJPVFNbMTU6MF0uKi8KKyNpZiAoKEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkEgPT0gMSkgJiYgKGRlZmluZWQoRlRGQV9GUFJPVF9QUk9UX01BU0spKSkgfHwgXAorICAgICgoRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGRSA9PSAxKSAmJiAoZGVmaW5lZChGVEZFX0ZQUk9UX1BST1RfTUFTSykpKSB8fCBcCisgICAgKChGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZMID09IDEpICYmIChkZWZpbmVkKEZURkxfRlBST1RfUFJPVF9NQVNLKSkpCisgICAgLy8gdWludDMyX3QgcHJvdEhpZ2g7IC8qITwgUFJPVFs2MzozMl0uKi8KKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHByb3RoMzJiOworICAgIH0gdmFsdWVIaWdoMzJiOworI2VuZGlmCit9IHBmbGFzaF9wcm90ZWN0aW9uX3N0YXR1c190OworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgdGhlIEZsZXhSQU0gbG9hZCBkdXJpbmcgcmVzZXQgb3B0aW9uLgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX3BhcnRpdGlvbl9mbGV4cmFtX2xvYWRfb3B0aW9uCit7CisgICAga0ZMQVNIX1BhcnRpdGlvbkZsZXhyYW1Mb2FkT3B0aW9uTG9hZGVkV2l0aFZhbGlkRWVwcm9tRGF0YSA9CisgICAgICAgIDB4MDBVLCAvKiE8IEZsZXhSQU0gaXMgbG9hZGVkIHdpdGggdmFsaWQgRUVQUk9NIGRhdGEgZHVyaW5nIHJlc2V0IHNlcXVlbmNlLiovCisgICAga0ZMQVNIX1BhcnRpdGlvbkZsZXhyYW1Mb2FkT3B0aW9uTm90TG9hZGVkID0gMHgwMVUgLyohPCBGbGV4UkFNIGlzIG5vdCBsb2FkZWQgZHVyaW5nIHJlc2V0IHNlcXVlbmNlLiovCit9IGZsYXNoX3BhcnRpdGlvbl9mbGV4cmFtX2xvYWRfb3B0aW9uX3Q7CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgZmxhc2ggbWVtb3J5IGluZGV4LgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX21lbW9yeV9pbmRleAoreworICAgIGtGTEFTSF9NZW1vcnlJbmRleFByaW1hcnlGbGFzaCA9IDB4MDBVLCAgIC8qITwgQ3VycmVudCBmbGFzaCBtZW1vcnkgaXMgcHJpbWFyeSBmbGFzaC4qLworICAgIGtGTEFTSF9NZW1vcnlJbmRleFNlY29uZGFyeUZsYXNoID0gMHgwMVUsIC8qITwgQ3VycmVudCBmbGFzaCBtZW1vcnkgaXMgc2Vjb25kYXJ5IGZsYXNoLiovCit9IGZsYXNoX21lbW9yeV9pbmRleF90OworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgdGhlIGZsYXNoIGNhY2hlIGNvbnRyb2xsZXIgaW5kZXguCisgKi8KK3R5cGVkZWYgZW51bSBfZmxhc2hfY2FjaGVfY29udHJvbGxlcl9pbmRleAoreworICAgIGtGTEFTSF9DYWNoZUNvbnRyb2xsZXJJbmRleEZvckNvcmUwID0gMHgwMFUsIC8qITwgQ3VycmVudCBmbGFzaCBjYWNoZSBjb250cm9sbGVyIGlzIGZvciBjb3JlIDAuKi8KKyAgICBrRkxBU0hfQ2FjaGVDb250cm9sbGVySW5kZXhGb3JDb3JlMSA9IDB4MDFVLCAvKiE8IEN1cnJlbnQgZmxhc2ggY2FjaGUgY29udHJvbGxlciBpcyBmb3IgY29yZSAxLiovCit9IGZsYXNoX2NhY2hlX2NvbnRyb2xsZXJfaW5kZXhfdDsKKworLyohIEBicmllZiBBIGNhbGxiYWNrIHR5cGUgdXNlZCBmb3IgdGhlIFBmbGFzaCBibG9jayovCit0eXBlZGVmIHZvaWQgKCpmbGFzaF9jYWxsYmFja190KSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIHRoZSB0d28gcG9zc2libGUgb3B0aW9ucyBvZiBmbGFzaCBwcmVmZXRjaCBzcGVjdWxhdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIF9mbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9vcHRpb24KK3sKKyAgICBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkVuYWJsZSA9IDB4MDBVLAorICAgIGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZSA9IDB4MDFVCit9IGZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX29wdGlvbl90OworCisvKiEKKyAqIEBicmllZiBGbGFzaCBwcmVmZXRjaCBzcGVjdWxhdGlvbiBzdGF0dXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9mbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9zdGF0dXMKK3sKKyAgICBmbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9vcHRpb25fdCBpbnN0cnVjdGlvbk9wdGlvbjsgLyohPCBJbnN0cnVjdGlvbiBzcGVjdWxhdGlvbi4qLworICAgIGZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX29wdGlvbl90IGRhdGFPcHRpb247ICAgICAgICAvKiE8IERhdGEgc3BlY3VsYXRpb24uKi8KK30gZmxhc2hfcHJlZmV0Y2hfc3BlY3VsYXRpb25fc3RhdHVzX3Q7CisKKy8qIQorICogQGJyaWVmIEZsYXNoIGNhY2hlIGNsZWFyIHByb2Nlc3MgY29kZS4KKyAqLwordHlwZWRlZiBlbnVtIF9mbGFzaF9jYWNoZV9jbGVhcl9wcm9jZXNzCit7CisgICAga0ZMQVNIX0NhY2hlQ2xlYXJQcm9jZXNzUHJlID0gMHgwMFUsICAvKiE8IFByZSBmbGFzaCBjYWNoZSBjbGVhciBwcm9jZXNzLiovCisgICAga0ZMQVNIX0NhY2hlQ2xlYXJQcm9jZXNzUG9zdCA9IDB4MDFVLCAvKiE8IFBvc3QgZmxhc2ggY2FjaGUgY2xlYXIgcHJvY2Vzcy4qLworfSBmbGFzaF9jYWNoZV9jbGVhcl9wcm9jZXNzX3Q7CisKKy8qIQorICogQGJyaWVmIEFjdGl2ZSBmbGFzaCBwcm90ZWN0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBvcGVyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9mbGFzaF9wcm90ZWN0aW9uX2NvbmZpZworeworICAgIHVpbnQzMl90IHJlZ2lvbkJhc2U7ICAvKiE8IEJhc2UgYWRkcmVzcyBvZiBmbGFzaCBwcm90ZWN0aW9uIHJlZ2lvbi4qLworICAgIHVpbnQzMl90IHJlZ2lvblNpemU7ICAvKiE8IHNpemUgb2YgZmxhc2ggcHJvdGVjdGlvbiByZWdpb24uKi8KKyAgICB1aW50MzJfdCByZWdpb25Db3VudDsgLyohPCBmbGFzaCBwcm90ZWN0aW9uIHJlZ2lvbiBjb3VudC4qLworfSBmbGFzaF9wcm90ZWN0aW9uX2NvbmZpZ190OworCisvKiEKKyAqIEBicmllZiBBY3RpdmUgZmxhc2ggRXhlY3V0ZS1Pbmx5IGFjY2VzcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfZmxhc2hfYWNjZXNzX2NvbmZpZworeworICAgIHVpbnQzMl90IFNlZ21lbnRCYXNlOyAgLyohPCBCYXNlIGFkZHJlc3Mgb2YgZmxhc2ggRXhlY3V0ZS1Pbmx5IHNlZ21lbnQuKi8KKyAgICB1aW50MzJfdCBTZWdtZW50U2l6ZTsgIC8qITwgc2l6ZSBvZiBmbGFzaCBFeGVjdXRlLU9ubHkgc2VnbWVudC4qLworICAgIHVpbnQzMl90IFNlZ21lbnRDb3VudDsgLyohPCBmbGFzaCBFeGVjdXRlLU9ubHkgc2VnbWVudCBjb3VudC4qLworfSBmbGFzaF9hY2Nlc3NfY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIEFjdGl2ZSBmbGFzaCBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfZmxhc2hfb3BlcmF0aW9uX2NvbmZpZworeworICAgIHVpbnQzMl90IGNvbnZlcnRlZEFkZHJlc3M7ICAgICAgICAgICAvKiE8IEEgY29udmVydGVkIGFkZHJlc3MgZm9yIHRoZSBjdXJyZW50IGZsYXNoIHR5cGUuKi8KKyAgICB1aW50MzJfdCBhY3RpdmVTZWN0b3JTaXplOyAgICAgICAgICAgLyohPCBBIHNlY3RvciBzaXplIG9mIHRoZSBjdXJyZW50IGZsYXNoIHR5cGUuKi8KKyAgICB1aW50MzJfdCBhY3RpdmVCbG9ja1NpemU7ICAgICAgICAgICAgLyohPCBBIGJsb2NrIHNpemUgb2YgdGhlIGN1cnJlbnQgZmxhc2ggdHlwZS4qLworICAgIHVpbnQzMl90IGJsb2NrV3JpdGVVbml0U2l6ZTsgICAgICAgICAvKiE8IFRoZSB3cml0ZSB1bml0IHNpemUuKi8KKyAgICB1aW50MzJfdCBzZWN0b3JDbWRBZGRyZXNzQWxpZ21lbnQ7ICAgLyohPCBBbiBlcmFzZSBzZWN0b3IgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4qLworICAgIHVpbnQzMl90IHNlY3Rpb25DbWRBZGRyZXNzQWxpZ21lbnQ7ICAvKiE8IEEgcHJvZ3JhbS92ZXJpZnkgc2VjdGlvbiBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiovCisgICAgdWludDMyX3QgcmVzb3VyY2VDbWRBZGRyZXNzQWxpZ21lbnQ7IC8qITwgQSByZWFkIHJlc291cmNlIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuKi8KKyAgICB1aW50MzJfdCBjaGVja0NtZEFkZHJlc3NBbGlnbWVudDsgICAgLyohPCBBIHByb2dyYW0gY2hlY2sgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4qLworfSBmbGFzaF9vcGVyYXRpb25fY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgRmxhc2ggZHJpdmVyIHN0YXRlIGluZm9ybWF0aW9uLgorICoKKyAqIEFuIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBieSB0aGUgdXNlciBvZiB0aGUgZmxhc2ggZHJpdmVyIGFuZAorICogcGFzc2VkIGludG8gZWFjaCBvZiB0aGUgZHJpdmVyIEFQSXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9mbGFzaF9jb25maWcKK3sKKyAgICB1aW50MzJfdCBQRmxhc2hCbG9ja0Jhc2U7ICAgICAgICAgICAgICAgIC8qITwgQSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IFBGbGFzaCBibG9jayAqLworICAgIHVpbnQzMl90IFBGbGFzaFRvdGFsU2l6ZTsgICAgICAgICAgICAgICAgLyohPCBUaGUgc2l6ZSBvZiB0aGUgY29tYmluZWQgUEZsYXNoIGJsb2NrLiAqLworICAgIHVpbnQ4X3QgUEZsYXNoQmxvY2tDb3VudDsgICAgICAgICAgICAgICAgLyohPCBBIG51bWJlciBvZiBQRmxhc2ggYmxvY2tzLiAqLworICAgIHVpbnQ4X3QgRmxhc2hNZW1vcnlJbmRleDsgICAgICAgICAgICAgICAgLyohPCAwIC0gcHJpbWFyeSBmbGFzaDsgMSAtIHNlY29uZGFyeSBmbGFzaCovCisgICAgdWludDhfdCBGbGFzaENhY2hlQ29udHJvbGxlckluZGV4OyAgICAgICAvKiE8IDAgLSBDb250cm9sbGVyIGZvciBjb3JlIDA7IDEgLSBDb250cm9sbGVyIGZvciBjb3JlIDEgKi8KKyAgICB1aW50OF90IFJlc2VydmVkMDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVzZXJ2ZWQgZmllbGQgMCAqLworICAgIHVpbnQzMl90IFBGbGFzaFNlY3RvclNpemU7ICAgICAgICAgICAgICAgLyohPCBUaGUgc2l6ZSBpbiBieXRlcyBvZiBhIHNlY3RvciBvZiBQRmxhc2guICovCisgICAgZmxhc2hfY2FsbGJhY2tfdCBQRmxhc2hDYWxsYmFjazsgICAgICAgICAvKiE8IFRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIGZsYXNoIEFQSS4gKi8KKyAgICB1aW50MzJfdCBQRmxhc2hBY2Nlc3NTZWdtZW50U2l6ZTsgICAgICAgIC8qITwgQSBzaXplIGluIGJ5dGVzIG9mIGFuIGFjY2VzcyBzZWdtZW50IG9mIFBGbGFzaC4gKi8KKyAgICB1aW50MzJfdCBQRmxhc2hBY2Nlc3NTZWdtZW50Q291bnQ7ICAgICAgIC8qITwgQSBudW1iZXIgb2YgUEZsYXNoIGFjY2VzcyBzZWdtZW50cy4gKi8KKyAgICB1aW50MzJfdCAqZmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm87IC8qITwgQW4gaW5mb3JtYXRpb24gc3RydWN0dXJlIG9mIHRoZSBmbGFzaCBleGVjdXRlLWluLVJBTSBmdW5jdGlvbi4gKi8KKyAgICB1aW50MzJfdCBGbGV4UkFNQmxvY2tCYXNlOyAgICAgICAgICAgICAgIC8qITwgRm9yIHRoZSBGbGV4TlZNIGRldmljZSwgdGhpcyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBGbGV4UkFNICovCisgICAgLyohPCBGb3IgdGhlIG5vbi1GbGV4TlZNIGRldmljZSwgdGhpcyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBhY2NlbGVyYXRpb24gUkFNIG1lbW9yeSAqLworICAgIHVpbnQzMl90IEZsZXhSQU1Ub3RhbFNpemU7IC8qITwgRm9yIHRoZSBGbGV4TlZNIGRldmljZSwgdGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgRmxleFJBTSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRm9yIHRoZSBub24tRmxleE5WTSBkZXZpY2UsIHRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGFjY2VsZXJhdGlvbiBSQU0gbWVtb3J5ICovCisgICAgdWludDMyX3QKKyAgICAgICAgREZsYXNoQmxvY2tCYXNlOyAvKiE8IEZvciB0aGUgRmxleE5WTSBkZXZpY2UsIHRoaXMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgRC1GbGFzaCBtZW1vcnkgKEZsZXhOVk0gbWVtb3J5KSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRm9yIHRoZSBub24tRmxleE5WTSBkZXZpY2UsIHRoaXMgZmllbGQgaXMgdW51c2VkICovCisgICAgdWludDMyX3QgREZsYXNoVG90YWxTaXplOyAvKiE8IEZvciB0aGUgRmxleE5WTSBkZXZpY2UsIHRoaXMgaXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIEZsZXhOVk0gbWVtb3J5OyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3IgdGhlIG5vbi1GbGV4TlZNIGRldmljZSwgdGhpcyBmaWVsZCBpcyB1bnVzZWQgKi8KKyAgICB1aW50MzJfdCBFRXByb21Ub3RhbFNpemU7IC8qITwgRm9yIHRoZSBGbGV4TlZNIGRldmljZSwgdGhpcyBpcyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgRUVQUk9NIGFyZWEgd2hpY2ggd2FzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25lZCBmcm9tIEZsZXhSQU0gKi8KKyAgICAvKiE8IEZvciB0aGUgbm9uLUZsZXhOVk0gZGV2aWNlLCB0aGlzIGZpZWxkIGlzIHVudXNlZCAqLworfSBmbGFzaF9jb25maWdfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiEKKyAqIEBuYW1lIEluaXRpYWxpemF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBnbG9iYWwgZmxhc2ggcHJvcGVydGllcyBzdHJ1Y3R1cmUgbWVtYmVycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIEZsYXNoIG1vZHVsZSBmb3IgdGhlIG90aGVyIEZsYXNoIEFQSXMuCisgKgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9QYXJ0aXRpb25TdGF0dXNVcGRhdGVGYWlsdXJlIEZhaWxlZCB0byB1cGRhdGUgdGhlIHBhcnRpdGlvbiBzdGF0dXMuCisgKi8KK3N0YXR1c190IEZMQVNIX0luaXQoZmxhc2hfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIGRlc2lyZWQgZmxhc2ggY2FsbGJhY2sgZnVuY3Rpb24uCisgKgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBzdG9yZWQgaW4gdGhlIGRyaXZlci4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICovCitzdGF0dXNfdCBGTEFTSF9TZXRDYWxsYmFjayhmbGFzaF9jb25maWdfdCAqY29uZmlnLCBmbGFzaF9jYWxsYmFja190IGNhbGxiYWNrKTsKKworLyohCisgKiBAYnJpZWYgUHJlcGFyZXMgZmxhc2ggZXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb25zLgorICoKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKi8KKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQKK3N0YXR1c190IEZMQVNIX1ByZXBhcmVFeGVjdXRlSW5SYW1GdW5jdGlvbnMoZmxhc2hfY29uZmlnX3QgKmNvbmZpZyk7CisjZW5kaWYKKworLypAfSovCisKKy8qIQorICogQG5hbWUgRXJhc2luZworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBFcmFzZXMgZW50aXJlIGZsYXNoCisgKgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0ga2V5IEEgdmFsdWUgdXNlZCB0byB2YWxpZGF0ZSBhbGwgZmxhc2ggZXJhc2UgQVBJcy4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FcmFzZUtleUVycm9yIEFQSSBlcmFzZSBrZXkgaXMgaW52YWxpZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmRzIGFkZHJlc3Nlcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24uCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1BhcnRpdGlvblN0YXR1c1VwZGF0ZUZhaWx1cmUgRmFpbGVkIHRvIHVwZGF0ZSB0aGUgcGFydGl0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgRkxBU0hfRXJhc2VBbGwoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qga2V5KTsKKworLyohCisgKiBAYnJpZWYgRXJhc2VzIHRoZSBmbGFzaCBzZWN0b3JzIGVuY29tcGFzc2VkIGJ5IHBhcmFtZXRlcnMgcGFzc2VkIGludG8gZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBlcmFzZXMgdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiBmbGFzaCBzZWN0b3JzIGJhc2VkIG9uIHRoZQorICogZGVzaXJlZCBzdGFydCBhZGRyZXNzIGFuZCBsZW5ndGguCisgKgorICogQHBhcmFtIGNvbmZpZyBUaGUgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIHN0YXJ0IFRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBkZXNpcmVkIGZsYXNoIG1lbW9yeSB0byBiZSBlcmFzZWQuCisgKiAgICAgICAgICAgICAgVGhlIHN0YXJ0IGFkZHJlc3MgZG9lcyBub3QgbmVlZCB0byBiZSBzZWN0b3ItYWxpZ25lZCBidXQgbXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0gbGVuZ3RoSW5CeXRlcyBUaGUgbGVuZ3RoLCBnaXZlbiBpbiBieXRlcyAobm90IHdvcmRzIG9yIGxvbmctd29yZHMpCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBiZSBlcmFzZWQuIE11c3QgYmUgd29yZC1hbGlnbmVkLgorICogQHBhcmFtIGtleSBUaGUgdmFsdWUgdXNlZCB0byB2YWxpZGF0ZSBhbGwgZmxhc2ggZXJhc2UgQVBJcy4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvciBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhbGlnbmVkIHdpdGggdGhlIHNwZWNpZmllZCBiYXNlbGluZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWRkcmVzc0Vycm9yIFRoZSBhZGRyZXNzIGlzIG91dCBvZiByYW5nZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXJhc2VLZXlFcnJvciBUaGUgQVBJIGVyYXNlIGtleSBpcyBpbnZhbGlkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKi8KK3N0YXR1c190IEZMQVNIX0VyYXNlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLCB1aW50MzJfdCBrZXkpOworCisvKiEKKyAqIEBicmllZiBFcmFzZXMgdGhlIGVudGlyZSBmbGFzaCwgaW5jbHVkaW5nIHByb3RlY3RlZCBzZWN0b3JzLgorICoKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIGtleSBBIHZhbHVlIHVzZWQgdG8gdmFsaWRhdGUgYWxsIGZsYXNoIGVyYXNlIEFQSXMuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXJhc2VLZXlFcnJvciBBUEkgZXJhc2Uga2V5IGlzIGludmFsaWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kcyBhZGRyZXNzZXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIGNvbW1hbmQgZXhlY3V0aW9uLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9QYXJ0aXRpb25TdGF0dXNVcGRhdGVGYWlsdXJlIEZhaWxlZCB0byB1cGRhdGUgdGhlIHBhcnRpdGlvbiBzdGF0dXMuCisgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FUkFTRV9BTExfQkxPQ0tTX1VOU0VDVVJFX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0FMTF9CTE9DS1NfVU5TRUNVUkVfQ01ECitzdGF0dXNfdCBGTEFTSF9FcmFzZUFsbFVuc2VjdXJlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IGtleSk7CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgRXJhc2VzIGFsbCBwcm9ncmFtIGZsYXNoIGV4ZWN1dGUtb25seSBzZWdtZW50cyBkZWZpbmVkIGJ5IHRoZSBGWEFDQyByZWdpc3RlcnMuCisgKgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0ga2V5IEEgdmFsdWUgdXNlZCB0byB2YWxpZGF0ZSBhbGwgZmxhc2ggZXJhc2UgQVBJcy4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FcmFzZUtleUVycm9yIEFQSSBlcmFzZSBrZXkgaXMgaW52YWxpZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmRzIGFkZHJlc3Nlcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLgorICovCitzdGF0dXNfdCBGTEFTSF9FcmFzZUFsbEV4ZWN1dGVPbmx5U2VnbWVudHMoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qga2V5KTsKKworLypAfSovCisKKy8qIQorICogQG5hbWUgUHJvZ3JhbW1pbmcKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgUHJvZ3JhbXMgZmxhc2ggd2l0aCBkYXRhIGF0IGxvY2F0aW9ucyBwYXNzZWQgaW4gdGhyb3VnaCBwYXJhbWV0ZXJzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvZ3JhbXMgdGhlIGZsYXNoIG1lbW9yeSB3aXRoIHRoZSBkZXNpcmVkIGRhdGEgZm9yIGEgZ2l2ZW4KKyAqIGZsYXNoIGFyZWEgYXMgZGV0ZXJtaW5lZCBieSB0aGUgc3RhcnQgYWRkcmVzcyBhbmQgdGhlIGxlbmd0aC4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIHN0YXJ0IFRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBkZXNpcmVkIGZsYXNoIG1lbW9yeSB0byBiZSBwcm9ncmFtbWVkLiBNdXN0IGJlCisgKiAgICAgICAgICAgICAgd29yZC1hbGlnbmVkLgorICogQHBhcmFtIHNyYyBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBidWZmZXIgb2YgZGF0YSB0aGF0IGlzIHRvIGJlIHByb2dyYW1tZWQKKyAqICAgICAgICAgICAgaW50byB0aGUgZmxhc2guCisgKiBAcGFyYW0gbGVuZ3RoSW5CeXRlcyBUaGUgbGVuZ3RoLCBnaXZlbiBpbiBieXRlcyAobm90IHdvcmRzIG9yIGxvbmctd29yZHMpLAorICogICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcHJvZ3JhbW1lZC4gTXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWxpZ25tZW50RXJyb3IgUGFyYW1ldGVyIGlzIG5vdCBhbGlnbmVkIHdpdGggdGhlIHNwZWNpZmllZCBiYXNlbGluZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWRkcmVzc0Vycm9yIEFkZHJlc3MgaXMgb3V0IG9mIHJhbmdlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKi8KK3N0YXR1c190IEZMQVNIX1Byb2dyYW0oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90ICpzcmMsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMpOworCisvKiEKKyAqIEBicmllZiBQcm9ncmFtcyBQcm9ncmFtIE9uY2UgRmllbGQgdGhyb3VnaCBwYXJhbWV0ZXJzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvZ3JhbXMgdGhlIFByb2dyYW0gT25jZSBGaWVsZCB3aXRoIHRoZSBkZXNpcmVkIGRhdGEgZm9yIGEgZ2l2ZW4KKyAqIGZsYXNoIGFyZWEgYXMgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggYW5kIGxlbmd0aC4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbmRpY2F0aW5nIHdoaWNoIGFyZWEgb2YgdGhlIFByb2dyYW0gT25jZSBGaWVsZCB0byBiZSBwcm9ncmFtbWVkLgorICogQHBhcmFtIHNyYyBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBidWZmZXIgb2YgZGF0YSB0aGF0IGlzIHRvIGJlIHByb2dyYW1tZWQKKyAqICAgICAgICAgICAgaW50byB0aGUgUHJvZ3JhbSBPbmNlIEZpZWxkLgorICogQHBhcmFtIGxlbmd0aEluQnl0ZXMgVGhlIGxlbmd0aCwgZ2l2ZW4gaW4gYnl0ZXMgKG5vdCB3b3JkcyBvciBsb25nLXdvcmRzKSwKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHByb2dyYW1tZWQuIE11c3QgYmUgd29yZC1hbGlnbmVkLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kcyBhZGRyZXNzZXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi4KKyAqLworc3RhdHVzX3QgRkxBU0hfUHJvZ3JhbU9uY2UoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3QgaW5kZXgsIHVpbnQzMl90ICpzcmMsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMpOworCisvKiEKKyAqIEBicmllZiBQcm9ncmFtcyBmbGFzaCB3aXRoIGRhdGEgYXQgbG9jYXRpb25zIHBhc3NlZCBpbiB0aHJvdWdoIHBhcmFtZXRlcnMgdmlhIHRoZSBQcm9ncmFtIFNlY3Rpb24gY29tbWFuZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByb2dyYW1zIHRoZSBmbGFzaCBtZW1vcnkgd2l0aCB0aGUgZGVzaXJlZCBkYXRhIGZvciBhIGdpdmVuCisgKiBmbGFzaCBhcmVhIGFzIGRldGVybWluZWQgYnkgdGhlIHN0YXJ0IGFkZHJlc3MgYW5kIGxlbmd0aC4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIHN0YXJ0IFRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBkZXNpcmVkIGZsYXNoIG1lbW9yeSB0byBiZSBwcm9ncmFtbWVkLiBNdXN0IGJlCisgKiAgICAgICAgICAgICAgd29yZC1hbGlnbmVkLgorICogQHBhcmFtIHNyYyBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBidWZmZXIgb2YgZGF0YSB0aGF0IGlzIHRvIGJlIHByb2dyYW1tZWQKKyAqICAgICAgICAgICAgaW50byB0aGUgZmxhc2guCisgKiBAcGFyYW0gbGVuZ3RoSW5CeXRlcyBUaGUgbGVuZ3RoLCBnaXZlbiBpbiBieXRlcyAobm90IHdvcmRzIG9yIGxvbmctd29yZHMpLAorICogICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcHJvZ3JhbW1lZC4gTXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWxpZ25tZW50RXJyb3IgUGFyYW1ldGVyIGlzIG5vdCBhbGlnbmVkIHdpdGggc3BlY2lmaWVkIGJhc2VsaW5lLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BZGRyZXNzRXJyb3IgQWRkcmVzcyBpcyBvdXQgb2YgcmFuZ2UuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1NldEZsZXhyYW1Bc1JhbUVycm9yIEZhaWxlZCB0byBzZXQgZmxleHJhbSBhcyBSQU0uCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kcyBhZGRyZXNzZXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIGNvbW1hbmQgZXhlY3V0aW9uLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9SZWNvdmVyRmxleHJhbUFzRWVwcm9tRXJyb3IgRmFpbGVkIHRvIHJlY292ZXIgRmxleFJBTSBhcyBFRVBST00uCisgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX1NFQ1RJT05fQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9TRUNUSU9OX0NNRAorc3RhdHVzX3QgRkxBU0hfUHJvZ3JhbVNlY3Rpb24oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90ICpzcmMsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMpOworI2VuZGlmCisKKy8qIQorICogQGJyaWVmIFByb2dyYW1zIHRoZSBFRVBST00gd2l0aCBkYXRhIGF0IGxvY2F0aW9ucyBwYXNzZWQgaW4gdGhyb3VnaCBwYXJhbWV0ZXJzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvZ3JhbXMgdGhlIGVtdWxhdGVkIEVFUFJPTSB3aXRoIHRoZSBkZXNpcmVkIGRhdGEgZm9yIGEgZ2l2ZW4KKyAqIGZsYXNoIGFyZWEgYXMgZGV0ZXJtaW5lZCBieSB0aGUgc3RhcnQgYWRkcmVzcyBhbmQgbGVuZ3RoLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgZmxhc2ggbWVtb3J5IHRvIGJlIHByb2dyYW1tZWQuIE11c3QgYmUKKyAqICAgICAgICAgICAgICB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0gc3JjIEEgcG9pbnRlciB0byB0aGUgc291cmNlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgaXMgdG8gYmUgcHJvZ3JhbW1lZAorICogICAgICAgICAgICBpbnRvIHRoZSBmbGFzaC4KKyAqIEBwYXJhbSBsZW5ndGhJbkJ5dGVzIFRoZSBsZW5ndGgsIGdpdmVuIGluIGJ5dGVzIChub3Qgd29yZHMgb3IgbG9uZy13b3JkcyksCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBiZSBwcm9ncmFtbWVkLiBNdXN0IGJlIHdvcmQtYWxpZ25lZC4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BZGRyZXNzRXJyb3IgQWRkcmVzcyBpcyBvdXQgb2YgcmFuZ2UuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1NldEZsZXhyYW1Bc0VlcHJvbUVycm9yIEZhaWxlZCB0byBzZXQgZmxleHJhbSBhcyBlZXByb20uCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUmVjb3ZlckZsZXhyYW1Bc1JhbUVycm9yIEZhaWxlZCB0byByZWNvdmVyIHRoZSBGbGV4UkFNIGFzIFJBTS4KKyAqLworI2lmIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQKK3N0YXR1c190IEZMQVNIX0VlcHJvbVdyaXRlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IHN0YXJ0LCB1aW50OF90ICpzcmMsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMpOworI2VuZGlmCisKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlYWRpbmcKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgUmVhZHMgdGhlIHJlc291cmNlIHdpdGggZGF0YSBhdCBsb2NhdGlvbnMgcGFzc2VkIGluIHRocm91Z2ggcGFyYW1ldGVycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBmbGFzaCBtZW1vcnkgd2l0aCB0aGUgZGVzaXJlZCBsb2NhdGlvbiBmb3IgYSBnaXZlbgorICogZmxhc2ggYXJlYSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBzdGFydCBhZGRyZXNzIGFuZCBsZW5ndGguCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZGVzaXJlZCBmbGFzaCBtZW1vcnkgdG8gYmUgcHJvZ3JhbW1lZC4gTXVzdCBiZQorICogICAgICAgICAgICAgIHdvcmQtYWxpZ25lZC4KKyAqIEBwYXJhbSBkc3QgQSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgb2YgZGF0YSB0aGF0IGlzIHVzZWQgdG8gc3RvcmUKKyAqICAgICAgICBkYXRhIHRvIGJlIHJlYWQuCisgKiBAcGFyYW0gbGVuZ3RoSW5CeXRlcyBUaGUgbGVuZ3RoLCBnaXZlbiBpbiBieXRlcyAobm90IHdvcmRzIG9yIGxvbmctd29yZHMpLAorICogICAgICAgIHRvIGJlIHJlYWQuIE11c3QgYmUgd29yZC1hbGlnbmVkLgorICogQHBhcmFtIG9wdGlvbiBUaGUgcmVzb3VyY2Ugb3B0aW9uIHdoaWNoIGluZGljYXRlcyB3aGljaCBhcmVhIHNob3VsZCBiZSByZWFkIGJhY2suCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWxpZ25tZW50RXJyb3IgUGFyYW1ldGVyIGlzIG5vdCBhbGlnbmVkIHdpdGggdGhlIHNwZWNpZmllZCBiYXNlbGluZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmRzIGFkZHJlc3Nlcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLgorICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF9SRVNPVVJDRV9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRAorc3RhdHVzX3QgRkxBU0hfUmVhZFJlc291cmNlKAorICAgIGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCAqZHN0LCB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLCBmbGFzaF9yZWFkX3Jlc291cmNlX29wdGlvbl90IG9wdGlvbik7CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgUmVhZHMgdGhlIFByb2dyYW0gT25jZSBGaWVsZCB0aHJvdWdoIHBhcmFtZXRlcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgcmVhZCBvbmNlIGZlaWxkIHdpdGggZ2l2ZW4gaW5kZXggYW5kIGxlbmd0aC4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbmRpY2F0aW5nIHRoZSBhcmVhIG9mIHByb2dyYW0gb25jZSBmaWVsZCB0byBiZSByZWFkLgorICogQHBhcmFtIGRzdCBBIHBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBvZiBkYXRhIHRoYXQgaXMgdXNlZCB0byBzdG9yZQorICogICAgICAgIGRhdGEgdG8gYmUgcmVhZC4KKyAqIEBwYXJhbSBsZW5ndGhJbkJ5dGVzIFRoZSBsZW5ndGgsIGdpdmVuIGluIGJ5dGVzIChub3Qgd29yZHMgb3IgbG9uZy13b3JkcyksCisgKiAgICAgICAgdG8gYmUgcHJvZ3JhbW1lZC4gTXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmRzIGFkZHJlc3Nlcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLgorICovCitzdGF0dXNfdCBGTEFTSF9SZWFkT25jZShmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBpbmRleCwgdWludDMyX3QgKmRzdCwgdWludDMyX3QgbGVuZ3RoSW5CeXRlcyk7CisKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFNlY3VyaXR5CisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFJldHVybnMgdGhlIHNlY3VyaXR5IHN0YXRlIHZpYSB0aGUgcG9pbnRlciBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZmxhc2ggc2VjdXJpdHkgc3RhdHVzLCBpbmNsdWRpbmcgdGhlCisgKiBzZWN1cml0eSBlbmFibGluZyBzdGF0ZSBhbmQgdGhlIGJhY2tkb29yIGtleSBlbmFibGluZyBzdGF0ZS4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gc3RhdGUgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgdGhlIGN1cnJlbnQgc2VjdXJpdHkgc3RhdHVzIGNvZGU6CisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqLworc3RhdHVzX3QgRkxBU0hfR2V0U2VjdXJpdHlTdGF0ZShmbGFzaF9jb25maWdfdCAqY29uZmlnLCBmbGFzaF9zZWN1cml0eV9zdGF0ZV90ICpzdGF0ZSk7CisKKy8qIQorICogQGJyaWVmIEFsbG93cyB1c2VycyB0byBieXBhc3Mgc2VjdXJpdHkgd2l0aCBhIGJhY2tkb29yIGtleS4KKyAqCisgKiBJZiB0aGUgTUNVIGlzIGluIHNlY3VyZWQgc3RhdGUsIHRoaXMgZnVuY3Rpb24gdW5zZWN1cmVzIHRoZSBNQ1UgYnkKKyAqIGNvbXBhcmluZyB0aGUgcHJvdmlkZWQgYmFja2Rvb3Iga2V5IHdpdGggb25lcyBpbiB0aGUgZmxhc2ggY29uZmlndXJhdGlvbgorICogZmllbGQuCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBiYWNrZG9vcktleSBBIHBvaW50ZXIgdG8gdGhlIHVzZXIgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGJhY2tkb29yIGtleS4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKi8KK3N0YXR1c190IEZMQVNIX1NlY3VyaXR5QnlwYXNzKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGNvbnN0IHVpbnQ4X3QgKmJhY2tkb29yS2V5KTsKKworLypAfSovCisKKy8qIQorICogQG5hbWUgVmVyaWZpY2F0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFZlcmlmaWVzIGVyYXN1cmUgb2YgdGhlIGVudGlyZSBmbGFzaCBhdCBhIHNwZWNpZmllZCBtYXJnaW4gbGV2ZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgZmxhc2ggaXMgZXJhc2VkIHRvIHRoZQorICogc3BlY2lmaWVkIHJlYWQgbWFyZ2luIGxldmVsLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gbWFyZ2luIFJlYWQgbWFyZ2luIGNob2ljZS4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKi8KK3N0YXR1c190IEZMQVNIX1ZlcmlmeUVyYXNlQWxsKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX21hcmdpbl92YWx1ZV90IG1hcmdpbik7CisKKy8qIQorICogQGJyaWVmIFZlcmlmaWVzIGFuIGVyYXN1cmUgb2YgdGhlIGRlc2lyZWQgZmxhc2ggYXJlYSBhdCBhIHNwZWNpZmllZCBtYXJnaW4gbGV2ZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiBmbGFzaCBzZWN0b3JzIGJhc2VkIG9uCisgKiB0aGUgZGVzaXJlZCBzdGFydCBhZGRyZXNzIGFuZCBsZW5ndGggdG8gY2hlY2sgd2hldGhlciB0aGUgZmxhc2ggaXMgZXJhc2VkCisgKiB0byB0aGUgc3BlY2lmaWVkIHJlYWQgbWFyZ2luIGxldmVsLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgZmxhc2ggbWVtb3J5IHRvIGJlIHZlcmlmaWVkLgorICogICAgICAgIFRoZSBzdGFydCBhZGRyZXNzIGRvZXMgbm90IG5lZWQgdG8gYmUgc2VjdG9yLWFsaWduZWQgYnV0IG11c3QgYmUgd29yZC1hbGlnbmVkLgorICogQHBhcmFtIGxlbmd0aEluQnl0ZXMgVGhlIGxlbmd0aCwgZ2l2ZW4gaW4gYnl0ZXMgKG5vdCB3b3JkcyBvciBsb25nLXdvcmRzKSwKKyAqICAgICAgICB0byBiZSB2ZXJpZmllZC4gTXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0gbWFyZ2luIFJlYWQgbWFyZ2luIGNob2ljZS4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvciBQYXJhbWV0ZXIgaXMgbm90IGFsaWduZWQgd2l0aCBzcGVjaWZpZWQgYmFzZWxpbmUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FkZHJlc3NFcnJvciBBZGRyZXNzIGlzIG91dCBvZiByYW5nZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmRzIGFkZHJlc3Nlcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLgorICovCitzdGF0dXNfdCBGTEFTSF9WZXJpZnlFcmFzZShmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgbGVuZ3RoSW5CeXRlcywgZmxhc2hfbWFyZ2luX3ZhbHVlX3QgbWFyZ2luKTsKKworLyohCisgKiBAYnJpZWYgVmVyaWZpZXMgcHJvZ3JhbW1pbmcgb2YgdGhlIGRlc2lyZWQgZmxhc2ggYXJlYSBhdCBhIHNwZWNpZmllZCBtYXJnaW4gbGV2ZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyB0aGUgZGF0YSBwcm9ncmFtZWQgaW4gdGhlIGZsYXNoIG1lbW9yeSB1c2luZyB0aGUKKyAqIEZsYXNoIFByb2dyYW0gQ2hlY2sgQ29tbWFuZCBhbmQgY29tcGFyZXMgaXQgdG8gdGhlIGV4cGVjdGVkIGRhdGEgZm9yIGEgZ2l2ZW4KKyAqIGZsYXNoIGFyZWEgYXMgZGV0ZXJtaW5lZCBieSB0aGUgc3RhcnQgYWRkcmVzcyBhbmQgbGVuZ3RoLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgZmxhc2ggbWVtb3J5IHRvIGJlIHZlcmlmaWVkLiBNdXN0IGJlIHdvcmQtYWxpZ25lZC4KKyAqIEBwYXJhbSBsZW5ndGhJbkJ5dGVzIFRoZSBsZW5ndGgsIGdpdmVuIGluIGJ5dGVzIChub3Qgd29yZHMgb3IgbG9uZy13b3JkcyksCisgKiAgICAgICAgdG8gYmUgdmVyaWZpZWQuIE11c3QgYmUgd29yZC1hbGlnbmVkLgorICogQHBhcmFtIGV4cGVjdGVkRGF0YSBBIHBvaW50ZXIgdG8gdGhlIGV4cGVjdGVkIGRhdGEgdGhhdCBpcyB0byBiZQorICogICAgICAgIHZlcmlmaWVkIGFnYWluc3QuCisgKiBAcGFyYW0gbWFyZ2luIFJlYWQgbWFyZ2luIGNob2ljZS4KKyAqIEBwYXJhbSBmYWlsZWRBZGRyZXNzIEEgcG9pbnRlciB0byB0aGUgcmV0dXJuZWQgZmFpbGluZyBhZGRyZXNzLgorICogQHBhcmFtIGZhaWxlZERhdGEgQSBwb2ludGVyIHRvIHRoZSByZXR1cm5lZCBmYWlsaW5nIGRhdGEuICBTb21lIGRlcml2YXRpdmVzIGRvCisgKiAgICAgICAgbm90IGluY2x1ZGUgZmFpbGVkIGRhdGEgYXMgcGFydCBvZiB0aGUgRkNDT0J4IHJlZ2lzdGVycy4gIEluIHRoaXMKKyAqICAgICAgICBjYXNlLCB6ZXJvcyBhcmUgcmV0dXJuZWQgdXBvbiBmYWlsdXJlLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FsaWdubWVudEVycm9yIFBhcmFtZXRlciBpcyBub3QgYWxpZ25lZCB3aXRoIHNwZWNpZmllZCBiYXNlbGluZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWRkcmVzc0Vycm9yIEFkZHJlc3MgaXMgb3V0IG9mIHJhbmdlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKi8KK3N0YXR1c190IEZMQVNIX1ZlcmlmeVByb2dyYW0oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90ICpleHBlY3RlZERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX21hcmdpbl92YWx1ZV90IG1hcmdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmZhaWxlZEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpmYWlsZWREYXRhKTsKKworLyohCisgKiBAYnJpZWYgVmVyaWZpZXMgd2hldGhlciB0aGUgcHJvZ3JhbSBmbGFzaCBleGVjdXRlLW9ubHkgc2VnbWVudHMgaGF2ZSBiZWVuIGVyYXNlZCB0bworICogIHRoZSBzcGVjaWZpZWQgcmVhZCBtYXJnaW4gbGV2ZWwuCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBtYXJnaW4gUmVhZCBtYXJnaW4gY2hvaWNlLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kcyBhZGRyZXNzZXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi4KKyAqLworc3RhdHVzX3QgRkxBU0hfVmVyaWZ5RXJhc2VBbGxFeGVjdXRlT25seVNlZ21lbnRzKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX21hcmdpbl92YWx1ZV90IG1hcmdpbik7CisKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFByb3RlY3Rpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgUmV0dXJucyB0aGUgcHJvdGVjdGlvbiBzdGF0ZSBvZiB0aGUgZGVzaXJlZCBmbGFzaCBhcmVhIHZpYSB0aGUgcG9pbnRlciBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZmxhc2ggcHJvdGVjdCBzdGF0dXMgZm9yIGEgZ2l2ZW4KKyAqIGZsYXNoIGFyZWEgYXMgZGV0ZXJtaW5lZCBieSB0aGUgc3RhcnQgYWRkcmVzcyBhbmQgbGVuZ3RoLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgZmxhc2ggbWVtb3J5IHRvIGJlIGNoZWNrZWQuIE11c3QgYmUgd29yZC1hbGlnbmVkLgorICogQHBhcmFtIGxlbmd0aEluQnl0ZXMgVGhlIGxlbmd0aCwgZ2l2ZW4gaW4gYnl0ZXMgKG5vdCB3b3JkcyBvciBsb25nLXdvcmRzKQorICogICAgICAgIHRvIGJlIGNoZWNrZWQuICBNdXN0IGJlIHdvcmQtYWxpZ25lZC4KKyAqIEBwYXJhbSBwcm90ZWN0aW9uX3N0YXRlIEEgcG9pbnRlciB0byB0aGUgdmFsdWUgcmV0dXJuZWQgZm9yIHRoZSBjdXJyZW50CisgKiAgICAgICAgcHJvdGVjdGlvbiBzdGF0dXMgY29kZSBmb3IgdGhlIGRlc2lyZWQgZmxhc2ggYXJlYS4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvciBQYXJhbWV0ZXIgaXMgbm90IGFsaWduZWQgd2l0aCBzcGVjaWZpZWQgYmFzZWxpbmUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FkZHJlc3NFcnJvciBUaGUgYWRkcmVzcyBpcyBvdXQgb2YgcmFuZ2UuCisgKi8KK3N0YXR1c190IEZMQVNIX0lzUHJvdGVjdGVkKGZsYXNoX2NvbmZpZ190ICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFzaF9wcm90ZWN0aW9uX3N0YXRlX3QgKnByb3RlY3Rpb25fc3RhdGUpOworCisvKiEKKyAqIEBicmllZiBSZXR1cm5zIHRoZSBhY2Nlc3Mgc3RhdGUgb2YgdGhlIGRlc2lyZWQgZmxhc2ggYXJlYSB2aWEgdGhlIHBvaW50ZXIgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBjdXJyZW50IGZsYXNoIGFjY2VzcyBzdGF0dXMgZm9yIGEgZ2l2ZW4KKyAqIGZsYXNoIGFyZWEgYXMgZGV0ZXJtaW5lZCBieSB0aGUgc3RhcnQgYWRkcmVzcyBhbmQgbGVuZ3RoLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgZmxhc2ggbWVtb3J5IHRvIGJlIGNoZWNrZWQuIE11c3QgYmUgd29yZC1hbGlnbmVkLgorICogQHBhcmFtIGxlbmd0aEluQnl0ZXMgVGhlIGxlbmd0aCwgZ2l2ZW4gaW4gYnl0ZXMgKG5vdCB3b3JkcyBvciBsb25nLXdvcmRzKSwKKyAqICAgICAgICB0byBiZSBjaGVja2VkLiAgTXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0gYWNjZXNzX3N0YXRlIEEgcG9pbnRlciB0byB0aGUgdmFsdWUgcmV0dXJuZWQgZm9yIHRoZSBjdXJyZW50CisgKiAgICAgICAgYWNjZXNzIHN0YXR1cyBjb2RlIGZvciB0aGUgZGVzaXJlZCBmbGFzaCBhcmVhLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FsaWdubWVudEVycm9yIFRoZSBwYXJhbWV0ZXIgaXMgbm90IGFsaWduZWQgdG8gdGhlIHNwZWNpZmllZCBiYXNlbGluZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWRkcmVzc0Vycm9yIFRoZSBhZGRyZXNzIGlzIG91dCBvZiByYW5nZS4KKyAqLworc3RhdHVzX3QgRkxBU0hfSXNFeGVjdXRlT25seShmbGFzaF9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoSW5CeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfZXhlY3V0ZV9vbmx5X2FjY2Vzc19zdGF0ZV90ICphY2Nlc3Nfc3RhdGUpOworCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBQcm9wZXJ0aWVzCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFJldHVybnMgdGhlIGRlc2lyZWQgZmxhc2ggcHJvcGVydHkuCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSB3aGljaFByb3BlcnR5IFRoZSBkZXNpcmVkIHByb3BlcnR5IGZyb20gdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBpbgorICogICAgICAgIGVudW0gZmxhc2hfcHJvcGVydHlfdGFnX3QKKyAqIEBwYXJhbSB2YWx1ZSBBIHBvaW50ZXIgdG8gdGhlIHZhbHVlIHJldHVybmVkIGZvciB0aGUgZGVzaXJlZCBmbGFzaCBwcm9wZXJ0eS4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Vbmtub3duUHJvcGVydHkgQW4gdW5rbm93biBwcm9wZXJ0eSB0YWcuCisgKi8KK3N0YXR1c190IEZMQVNIX0dldFByb3BlcnR5KGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX3Byb3BlcnR5X3RhZ190IHdoaWNoUHJvcGVydHksIHVpbnQzMl90ICp2YWx1ZSk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIGRlc2lyZWQgZmxhc2ggcHJvcGVydHkuCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSB3aGljaFByb3BlcnR5IFRoZSBkZXNpcmVkIHByb3BlcnR5IGZyb20gdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBpbgorICogICAgICAgIGVudW0gZmxhc2hfcHJvcGVydHlfdGFnX3QKKyAqIEBwYXJhbSB2YWx1ZSBBIHRvIHNldCBmb3IgdGhlIGRlc2lyZWQgZmxhc2ggcHJvcGVydHkuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfVW5rbm93blByb3BlcnR5IEFuIHVua25vd24gcHJvcGVydHkgdGFnLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkUHJvcGVydHlWYWx1ZSBBbiBpbnZhbGlkIHByb3BlcnR5IHZhbHVlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9SZWFkT25seVByb3BlcnR5IEFuIHJlYWQtb25seSBwcm9wZXJ0eSB0YWcuCisgKi8KK3N0YXR1c190IEZMQVNIX1NldFByb3BlcnR5KGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX3Byb3BlcnR5X3RhZ190IHdoaWNoUHJvcGVydHksIHVpbnQzMl90IHZhbHVlKTsKKworLypAfSovCisKKy8qIQorICogQG5hbWUgRmxleFJBTQorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBGbGV4UkFNIGZ1bmN0aW9uIGNvbW1hbmQuCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBvcHRpb24gVGhlIG9wdGlvbiB1c2VkIHRvIHNldCB0aGUgd29yayBtb2RlIG9mIEZsZXhSQU0uCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmRzIGFkZHJlc3Nlcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLgorICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01ECitzdGF0dXNfdCBGTEFTSF9TZXRGbGV4cmFtRnVuY3Rpb24oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfZmxleHJhbV9mdW5jdGlvbl9vcHRpb25fdCBvcHRpb24pOworI2VuZGlmCisKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFN3YXAKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgU3dhcCBmdW5jdGlvbiBvciBjaGVja3MgdGhlIHRoZSBzd2FwIHN0YXRlIG9mIHRoZSBGbGFzaCBtb2R1bGUuCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBhZGRyZXNzIEFkZHJlc3MgdXNlZCB0byBjb25maWd1cmUgdGhlIGZsYXNoIFN3YXAgZnVuY3Rpb24uCisgKiBAcGFyYW0gb3B0aW9uIFRoZSBwb3NzaWJsZSBvcHRpb24gdXNlZCB0byBjb25maWd1cmUgRmxhc2ggU3dhcCBmdW5jdGlvbiBvciBjaGVjayB0aGUgZmxhc2ggU3dhcCBzdGF0dXMKKyAqIEBwYXJhbSByZXR1cm5JbmZvIEEgcG9pbnRlciB0byB0aGUgZGF0YSB3aGljaCBpcyB1c2VkIHRvIHJldHVybiB0aGUgaW5mb3JtYXRpb24gb2YgZmxhc2ggU3dhcC4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvciBQYXJhbWV0ZXIgaXMgbm90IGFsaWduZWQgd2l0aCBzcGVjaWZpZWQgYmFzZWxpbmUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N3YXBJbmRpY2F0b3JBZGRyZXNzRXJyb3IgU3dhcCBpbmRpY2F0b3IgYWRkcmVzcyBpcyBpbnZhbGlkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TV0FQX0NPTlRST0xfQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU1dBUF9DT05UUk9MX0NNRAorc3RhdHVzX3QgRkxBU0hfU3dhcENvbnRyb2woZmxhc2hfY29uZmlnX3QgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFzaF9zd2FwX2NvbnRyb2xfb3B0aW9uX3Qgb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfc3dhcF9zdGF0ZV9jb25maWdfdCAqcmV0dXJuSW5mbyk7CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgU3dhcHMgdGhlIGxvd2VyIGhhbGYgZmxhc2ggd2l0aCB0aGUgaGlnaGVyIGhhbGYgZmxhc2guCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBhZGRyZXNzIEFkZHJlc3MgdXNlZCB0byBjb25maWd1cmUgdGhlIGZsYXNoIHN3YXAgZnVuY3Rpb24KKyAqIEBwYXJhbSBvcHRpb24gVGhlIHBvc3NpYmxlIG9wdGlvbiB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgRmxhc2ggU3dhcCBmdW5jdGlvbiBvciBjaGVjayB0aGUgZmxhc2ggU3dhcCBzdGF0dXMuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWxpZ25tZW50RXJyb3IgUGFyYW1ldGVyIGlzIG5vdCBhbGlnbmVkIHdpdGggc3BlY2lmaWVkIGJhc2VsaW5lLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Td2FwSW5kaWNhdG9yQWRkcmVzc0Vycm9yIFN3YXAgaW5kaWNhdG9yIGFkZHJlc3MgaXMgaW52YWxpZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmRzIGFkZHJlc3Nlcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24uCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N3YXBTeXN0ZW1Ob3RJblVuaW5pdGlhbGl6ZWQgU3dhcCBzeXN0ZW0gaXMgbm90IGluIGFuIHVuaW5pdGlhbHplZCBzdGF0ZS4KKyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BGTEFTSF9CTE9DS19TV0FQKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVAKK3N0YXR1c190IEZMQVNIX1N3YXAoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3QgYWRkcmVzcywgZmxhc2hfc3dhcF9mdW5jdGlvbl9vcHRpb25fdCBvcHRpb24pOworI2VuZGlmCisKKy8qIQorICogQG5hbWUgRmxleE5WTQorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBQcmVwYXJlcyB0aGUgRmxleE5WTSBibG9jayBmb3IgdXNlIGFzIGRhdGEgZmxhc2gsIEVFUFJPTSBiYWNrdXAsIG9yIGEgY29tYmluYXRpb24gb2YgYm90aCBhbmQgaW5pdGlhbGl6ZXMgdGhlCisgKiBGbGV4UkFNLgorICoKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gb3B0aW9uIFRoZSBvcHRpb24gdXNlZCB0byBzZXQgRmxleFJBTSBsb2FkIGJlaGF2aW9yIGR1cmluZyByZXNldC4KKyAqIEBwYXJhbSBlZXByb21EYXRhU2l6ZUNvZGUgRGV0ZXJtaW5lcyB0aGUgYW1vdW50IG9mIEZsZXhSQU0gdXNlZCBpbiBlYWNoIG9mIHRoZSBhdmFpbGFibGUgRUVQUk9NIHN1YnN5c3RlbXMuCisgKiBAcGFyYW0gZmxleG52bVBhcnRpdGlvbkNvZGUgU3BlY2lmaWVzIGhvdyB0byBzcGxpdCB0aGUgRmxleE5WTSBibG9jayBiZXR3ZWVuIGRhdGEgZmxhc2ggbWVtb3J5IGFuZCBFRVBST00gYmFja3VwCisgKiAgICAgICAgbWVtb3J5IHN1cHBvcnRpbmcgRUVQUk9NIGZ1bmN0aW9ucy4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBJbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyBjb21tYW5kIGV4ZWN1dGlvbi4KKyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fUEFSVElUSU9OX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fUEFSVElUSU9OX0NNRAorc3RhdHVzX3QgRkxBU0hfUHJvZ3JhbVBhcnRpdGlvbihmbGFzaF9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFzaF9wYXJ0aXRpb25fZmxleHJhbV9sb2FkX29wdGlvbl90IG9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZWVwcm9tRGF0YVNpemVDb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmbGV4bnZtUGFydGl0aW9uQ29kZSk7CisjZW5kaWYKKworLypAfSovCisKKy8qIQorKiBAbmFtZSBGbGFzaCBQcm90ZWN0aW9uIFV0aWxpdGllcworKiBAeworKi8KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgUEZsYXNoIFByb3RlY3Rpb24gdG8gdGhlIGludGVuZGVkIHByb3RlY3Rpb24gc3RhdHVzLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBwcm90ZWN0U3RhdHVzIFRoZSBleHBlY3RlZCBwcm90ZWN0IHN0YXR1cyB0byBzZXQgdG8gdGhlIFBGbGFzaCBwcm90ZWN0aW9uIHJlZ2lzdGVyLiBFYWNoIGJpdCBpcworICogY29ycmVzcG9uZGluZyB0byBwcm90ZWN0aW9uIG9mIDEvMzIoNjQpIG9mIHRoZSB0b3RhbCBQRmxhc2guIFRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaXMgY29ycmVzcG9uZGluZyB0byB0aGUgbG93ZXN0CisgKiBhZGRyZXNzIGFyZWEgb2YgUEZsYXNoLiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaXMgY29ycmVzcG9uZGluZyB0byB0aGUgaGlnaGVzdCBhZGRyZXNzIGFyZWEgb2YgUEZsYXNoLiBUaGVyZSBhcmUKKyAqIHR3byBwb3NzaWJsZSBjYXNlcyBhcyBzaG93biBiZWxvdzoKKyAqICAgICAgIDA6IHRoaXMgYXJlYSBpcyBwcm90ZWN0ZWQuCisgKiAgICAgICAxOiB0aGlzIGFyZWEgaXMgdW5wcm90ZWN0ZWQuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIGNvbW1hbmQgZXhlY3V0aW9uLgorICovCitzdGF0dXNfdCBGTEFTSF9QZmxhc2hTZXRQcm90ZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHBmbGFzaF9wcm90ZWN0aW9uX3N0YXR1c190ICpwcm90ZWN0U3RhdHVzKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgUEZsYXNoIHByb3RlY3Rpb24gc3RhdHVzLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gcHJvdGVjdFN0YXR1cyAgUHJvdGVjdCBzdGF0dXMgcmV0dXJuZWQgYnkgdGhlIFBGbGFzaCBJUC4gRWFjaCBiaXQgaXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdGVjdGlvbiBvZgorICogMS8zMig2NCkKKyAqIG9mIHRoZQorICogdG90YWwgUEZsYXNoLiBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGNvcnJlc3BvbmRzIHRvIHRoZSBsb3dlc3QgYWRkcmVzcyBhcmVhIG9mIHRoZSBQRmxhc2guIFRoZSBtb3N0IHNpZ25pZmljYW50CisgKiBiaXQgY29ycmVzcG9uZHMgdG8gdGhlIGhpZ2hlc3QgYWRkcmVzcyBhcmVhIG9mIFBGbGFzaC4gVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBjYXNlcyBhcyBzaG93biBiZWxvdzoKKyAqICAgICAgIDA6IHRoaXMgYXJlYSBpcyBwcm90ZWN0ZWQuCisgKiAgICAgICAxOiB0aGlzIGFyZWEgaXMgdW5wcm90ZWN0ZWQuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqLworc3RhdHVzX3QgRkxBU0hfUGZsYXNoR2V0UHJvdGVjdGlvbihmbGFzaF9jb25maWdfdCAqY29uZmlnLCBwZmxhc2hfcHJvdGVjdGlvbl9zdGF0dXNfdCAqcHJvdGVjdFN0YXR1cyk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIERGbGFzaCBwcm90ZWN0aW9uIHRvIHRoZSBpbnRlbmRlZCBwcm90ZWN0aW9uIHN0YXR1cy4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIHByb3RlY3RTdGF0dXMgVGhlIGV4cGVjdGVkIHByb3RlY3Qgc3RhdHVzIHRvIHNldCB0byB0aGUgREZsYXNoIHByb3RlY3Rpb24gcmVnaXN0ZXIuIEVhY2ggYml0CisgKiBjb3JyZXNwb25kcyB0byB0aGUgcHJvdGVjdGlvbiBvZiB0aGUgMS84IG9mIHRoZSB0b3RhbCBERmxhc2guIFRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgY29ycmVzcG9uZHMgdG8gdGhlIGxvd2VzdAorICogYWRkcmVzcyBhcmVhIG9mIHRoZSBERmxhc2guIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBjb3JyZXNwb25kcyB0byB0aGUgaGlnaGVzdCBhZGRyZXNzIGFyZWEgb2YgIHRoZSBERmxhc2guIFRoZXJlCisgKiBhcmUKKyAqIHR3byBwb3NzaWJsZSBjYXNlcyBhcyBzaG93biBiZWxvdzoKKyAqICAgICAgIDA6IHRoaXMgYXJlYSBpcyBwcm90ZWN0ZWQuCisgKiAgICAgICAxOiB0aGlzIGFyZWEgaXMgdW5wcm90ZWN0ZWQuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZE5vdFN1cHBvcnRlZCBGbGFzaCBBUEkgaXMgbm90IHN1cHBvcnRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIGNvbW1hbmQgZXhlY3V0aW9uLgorICovCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorc3RhdHVzX3QgRkxBU0hfRGZsYXNoU2V0UHJvdGVjdGlvbihmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50OF90IHByb3RlY3RTdGF0dXMpOworI2VuZGlmCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIERGbGFzaCBwcm90ZWN0aW9uIHN0YXR1cy4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIHByb3RlY3RTdGF0dXMgIERGbGFzaCBQcm90ZWN0IHN0YXR1cyByZXR1cm5lZCBieSB0aGUgUEZsYXNoIElQLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvdGVjdGlvbiBvZiB0aGUKKyAqIDEvOCBvZgorICogdGhlIHRvdGFsIERGbGFzaC4gVGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBjb3JyZXNwb25kcyB0byB0aGUgbG93ZXN0IGFkZHJlc3MgYXJlYSBvZiB0aGUgREZsYXNoLiBUaGUgbW9zdAorICogc2lnbmlmaWNhbnQgYml0IGNvcnJlc3BvbmRzIHRvIHRoZSBoaWdoZXN0IGFkZHJlc3MgYXJlYSBvZiB0aGUgREZsYXNoLCBhbmQgc28gb24uIFRoZXJlIGFyZSB0d28gcG9zc2libGUgY2FzZXMgYXMKKyAqIGJlbG93OgorICogICAgICAgMDogdGhpcyBhcmVhIGlzIHByb3RlY3RlZC4KKyAqICAgICAgIDE6IHRoaXMgYXJlYSBpcyB1bnByb3RlY3RlZC4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kTm90U3VwcG9ydGVkIEZsYXNoIEFQSSBpcyBub3Qgc3VwcG9ydGVkLgorICovCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorc3RhdHVzX3QgRkxBU0hfRGZsYXNoR2V0UHJvdGVjdGlvbihmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50OF90ICpwcm90ZWN0U3RhdHVzKTsKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBFRVBST00gcHJvdGVjdGlvbiB0byB0aGUgaW50ZW5kZWQgcHJvdGVjdGlvbiBzdGF0dXMuCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBwcm90ZWN0U3RhdHVzIFRoZSBleHBlY3RlZCBwcm90ZWN0IHN0YXR1cyB0byBzZXQgdG8gdGhlIEVFUFJPTSBwcm90ZWN0aW9uIHJlZ2lzdGVyLiBFYWNoIGJpdAorICogY29ycmVzcG9uZHMgdG8gdGhlIHByb3RlY3Rpb24gb2YgdGhlIDEvOCBvZiB0aGUgdG90YWwgRUVQUk9NLiBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGNvcnJlc3BvbmRzIHRvIHRoZSBsb3dlc3QKKyAqIGFkZHJlc3MgYXJlYSBvZiB0aGUgRUVQUk9NLiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgY29ycmVzcG9uZHMgdG8gdGhlIGhpZ2hlc3QgYWRkcmVzcyBhcmVhIG9mIEVFUFJPTSwgYW5kIHNvIG9uLgorICogVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBjYXNlcyBhcyBzaG93biBiZWxvdzoKKyAqICAgICAgIDA6IHRoaXMgYXJlYSBpcyBwcm90ZWN0ZWQuCisgKiAgICAgICAxOiB0aGlzIGFyZWEgaXMgdW5wcm90ZWN0ZWQuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZE5vdFN1cHBvcnRlZCBGbGFzaCBBUEkgaXMgbm90IHN1cHBvcnRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIGNvbW1hbmQgZXhlY3V0aW9uLgorICovCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorc3RhdHVzX3QgRkxBU0hfRWVwcm9tU2V0UHJvdGVjdGlvbihmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50OF90IHByb3RlY3RTdGF0dXMpOworI2VuZGlmCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIERGbGFzaCBwcm90ZWN0aW9uIHN0YXR1cy4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIHByb3RlY3RTdGF0dXMgIERGbGFzaCBQcm90ZWN0IHN0YXR1cyByZXR1cm5lZCBieSB0aGUgUEZsYXNoIElQLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvdGVjdGlvbiBvZiB0aGUKKyAqIDEvOCBvZgorICogdGhlIHRvdGFsIEVFUFJPTS4gVGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBjb3JyZXNwb25kcyB0byB0aGUgbG93ZXN0IGFkZHJlc3MgYXJlYSBvZiB0aGUgRUVQUk9NLiBUaGUgbW9zdAorICogc2lnbmlmaWNhbnQgYml0IGNvcnJlc3BvbmRzIHRvIHRoZSBoaWdoZXN0IGFkZHJlc3MgYXJlYSBvZiB0aGUgRUVQUk9NLiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGNhc2VzIGFzIGJlbG93OgorICogICAgICAgMDogdGhpcyBhcmVhIGlzIHByb3RlY3RlZC4KKyAqICAgICAgIDE6IHRoaXMgYXJlYSBpcyB1bnByb3RlY3RlZC4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kTm90U3VwcG9ydGVkIEZsYXNoIEFQSSBpcyBub3Qgc3VwcG9ydGVkLgorICovCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorc3RhdHVzX3QgRkxBU0hfRWVwcm9tR2V0UHJvdGVjdGlvbihmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50OF90ICpwcm90ZWN0U3RhdHVzKTsKKyNlbmRpZgorCisvKkB9Ki8KKworLypAfSovCisKKy8qIQorKiBAbmFtZSBGbGFzaCBTcGVjdWxhdGlvbiBVdGlsaXRpZXMKKyogQHsKKyovCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIFBGbGFzaCBwcmVmZXRjaCBzcGVjdWxhdGlvbiB0byB0aGUgaW50ZW5kZWQgc3BlY3VsYXRpb24gc3RhdHVzLgorICoKKyAqIEBwYXJhbSBzcGVjdWxhdGlvblN0YXR1cyBUaGUgZXhwZWN0ZWQgcHJvdGVjdCBzdGF0dXMgdG8gc2V0IHRvIHRoZSBQRmxhc2ggcHJvdGVjdGlvbiByZWdpc3Rlci4gRWFjaCBiaXQgaXMKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZFNwZWN1bGF0aW9uT3B0aW9uIEFuIGludmFsaWQgc3BlY3VsYXRpb24gb3B0aW9uIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICovCitzdGF0dXNfdCBGTEFTSF9QZmxhc2hTZXRQcmVmZXRjaFNwZWN1bGF0aW9uKGZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX3N0YXR1c190ICpzcGVjdWxhdGlvblN0YXR1cyk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIFBGbGFzaCBwcmVmZXRjaCBzcGVjdWxhdGlvbiBzdGF0dXMuCisgKgorICogQHBhcmFtIHNwZWN1bGF0aW9uU3RhdHVzICBTcGVjdWxhdGlvbiBzdGF0dXMgcmV0dXJuZWQgYnkgdGhlIFBGbGFzaCBJUC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqLworc3RhdHVzX3QgRkxBU0hfUGZsYXNoR2V0UHJlZmV0Y2hTcGVjdWxhdGlvbihmbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9zdGF0dXNfdCAqc3BlY3VsYXRpb25TdGF0dXMpOworCisvKkB9Ki8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfRkxBU0hfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2dwaW8uYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDBlZTNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZ3Bpby5jCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9ncGlvLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgUE9SVF9UeXBlICpjb25zdCBzX3BvcnRCYXNlc1tdID0gUE9SVF9CQVNFX1BUUlM7CitzdGF0aWMgR1BJT19UeXBlICpjb25zdCBzX2dwaW9CYXNlc1tdID0gR1BJT19CQVNFX1BUUlM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFByb3RvdHlwZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisqIEBicmllZiBHZXRzIHRoZSBHUElPIGluc3RhbmNlIGFjY29yZGluZyB0byB0aGUgR1BJTyBiYXNlCisqCisqIEBwYXJhbSBiYXNlICAgIEdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIoUFRBLCBQVEIsIFBUQywgZXRjLikKKyogQHJldHZhbCBHUElPIGluc3RhbmNlCisqLworc3RhdGljIHVpbnQzMl90IEdQSU9fR2V0SW5zdGFuY2UoR1BJT19UeXBlICpiYXNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1aW50MzJfdCBHUElPX0dldEluc3RhbmNlKEdQSU9fVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19ncGlvQmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfZ3Bpb0Jhc2VzW2luc3RhbmNlXSA9PSBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydChpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19ncGlvQmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9pZCBHUElPX1BpbkluaXQoR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBwaW4sIGNvbnN0IGdwaW9fcGluX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNvbmZpZyk7CisKKyAgICBpZiAoY29uZmlnLT5waW5EaXJlY3Rpb24gPT0ga0dQSU9fRGlnaXRhbElucHV0KQorICAgIHsKKyAgICAgICAgYmFzZS0+UEREUiAmPSB+KDFVIDw8IHBpbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEdQSU9fV3JpdGVQaW5PdXRwdXQoYmFzZSwgcGluLCBjb25maWctPm91dHB1dExvZ2ljKTsKKyAgICAgICAgYmFzZS0+UEREUiB8PSAoMVUgPDwgcGluKTsKKyAgICB9Cit9CisKK3VpbnQzMl90IEdQSU9fR2V0UGluc0ludGVycnVwdEZsYWdzKEdQSU9fVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50OF90IGluc3RhbmNlOworICAgIFBPUlRfVHlwZSAqcG9ydEJhc2U7CisgICAgaW5zdGFuY2UgPSBHUElPX0dldEluc3RhbmNlKGJhc2UpOworICAgIHBvcnRCYXNlID0gc19wb3J0QmFzZXNbaW5zdGFuY2VdOworICAgIHJldHVybiBwb3J0QmFzZS0+SVNGUjsKK30KKwordm9pZCBHUElPX0NsZWFyUGluc0ludGVycnVwdEZsYWdzKEdQSU9fVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICB1aW50OF90IGluc3RhbmNlOworICAgIFBPUlRfVHlwZSAqcG9ydEJhc2U7CisgICAgaW5zdGFuY2UgPSBHUElPX0dldEluc3RhbmNlKGJhc2UpOworICAgIHBvcnRCYXNlID0gc19wb3J0QmFzZXNbaW5zdGFuY2VdOworICAgIHBvcnRCYXNlLT5JU0ZSID0gbWFzazsKK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfR1BJT19IQVNfQVRUUklCVVRFX0NIRUNLRVIpICYmIEZTTF9GRUFUVVJFX0dQSU9fSEFTX0FUVFJJQlVURV9DSEVDS0VSCit2b2lkIEdQSU9fQ2hlY2tBdHRyaWJ1dGVCeXRlcyhHUElPX1R5cGUgKmJhc2UsIGdwaW9fY2hlY2tlcl9hdHRyaWJ1dGVfdCBhdHRyaWJ1dGUpCit7CisgICAgYmFzZS0+R0FDUiA9ICgodWludDMyX3QpYXR0cmlidXRlIDw8IEdQSU9fR0FDUl9BQ0IwX1NISUZUKSB8ICgodWludDMyX3QpYXR0cmlidXRlIDw8IEdQSU9fR0FDUl9BQ0IxX1NISUZUKSB8CisgICAgICAgICAgICAgICAgICgodWludDMyX3QpYXR0cmlidXRlIDw8IEdQSU9fR0FDUl9BQ0IyX1NISUZUKSB8ICgodWludDMyX3QpYXR0cmlidXRlIDw8IEdQSU9fR0FDUl9BQ0IzX1NISUZUKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRkdQSU9fQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19GR1BJT19DT1VOVAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIEZHUElPX1R5cGUgKmNvbnN0IHNfZmdwaW9CYXNlc1tdID0gRkdQSU9fQkFTRV9QVFJTOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQcm90b3R5cGVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyogQGJyaWVmIEdldHMgdGhlIEZHUElPIGluc3RhbmNlIGFjY29yZGluZyB0byB0aGUgR1BJTyBiYXNlCisqCisqIEBwYXJhbSBiYXNlICAgIEZHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyKFBUQSwgUFRCLCBQVEMsIGV0Yy4pCisqIEByZXR2YWwgRkdQSU8gaW5zdGFuY2UKKyovCitzdGF0aWMgdWludDMyX3QgRkdQSU9fR2V0SW5zdGFuY2UoRkdQSU9fVHlwZSAqYmFzZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdWludDMyX3QgRkdQSU9fR2V0SW5zdGFuY2UoRkdQSU9fVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19mZ3Bpb0Jhc2VzKTsgaW5zdGFuY2UrKykKKyAgICB7CisgICAgICAgIGlmIChzX2ZncGlvQmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2ZncGlvQmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9pZCBGR1BJT19QaW5Jbml0KEZHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IHBpbiwgY29uc3QgZ3Bpb19waW5fY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworICAgIGlmIChjb25maWctPnBpbkRpcmVjdGlvbiA9PSBrR1BJT19EaWdpdGFsSW5wdXQpCisgICAgeworICAgICAgICBiYXNlLT5QRERSICY9IH4oMVUgPDwgcGluKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRkdQSU9fV3JpdGVQaW5PdXRwdXQoYmFzZSwgcGluLCBjb25maWctPm91dHB1dExvZ2ljKTsKKyAgICAgICAgYmFzZS0+UEREUiB8PSAoMVUgPDwgcGluKTsKKyAgICB9Cit9CisKK3VpbnQzMl90IEZHUElPX0dldFBpbnNJbnRlcnJ1cHRGbGFncyhGR1BJT19UeXBlICpiYXNlKQoreworICAgIHVpbnQ4X3QgaW5zdGFuY2U7CisgICAgaW5zdGFuY2UgPSBGR1BJT19HZXRJbnN0YW5jZShiYXNlKTsKKyAgICBQT1JUX1R5cGUgKnBvcnRCYXNlOworICAgIHBvcnRCYXNlID0gc19wb3J0QmFzZXNbaW5zdGFuY2VdOworICAgIHJldHVybiBwb3J0QmFzZS0+SVNGUjsKK30KKwordm9pZCBGR1BJT19DbGVhclBpbnNJbnRlcnJ1cHRGbGFncyhGR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIHVpbnQ4X3QgaW5zdGFuY2U7CisgICAgaW5zdGFuY2UgPSBGR1BJT19HZXRJbnN0YW5jZShiYXNlKTsKKyAgICBQT1JUX1R5cGUgKnBvcnRCYXNlOworICAgIHBvcnRCYXNlID0gc19wb3J0QmFzZXNbaW5zdGFuY2VdOworICAgIHBvcnRCYXNlLT5JU0ZSID0gbWFzazsKK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkdQSU9fSEFTX0FUVFJJQlVURV9DSEVDS0VSKSAmJiBGU0xfRkVBVFVSRV9GR1BJT19IQVNfQVRUUklCVVRFX0NIRUNLRVIKK3ZvaWQgRkdQSU9fQ2hlY2tBdHRyaWJ1dGVCeXRlcyhGR1BJT19UeXBlICpiYXNlLCBncGlvX2NoZWNrZXJfYXR0cmlidXRlX3QgYXR0cmlidXRlKQoreworICAgIGJhc2UtPkdBQ1IgPSAoYXR0cmlidXRlIDw8IEZHUElPX0dBQ1JfQUNCMF9TSElGVCkgfCAoYXR0cmlidXRlIDw8IEZHUElPX0dBQ1JfQUNCMV9TSElGVCkgfAorICAgICAgICAgICAgICAgICAoYXR0cmlidXRlIDw8IEZHUElPX0dBQ1JfQUNCMl9TSElGVCkgfCAoYXR0cmlidXRlIDw8IEZHUElPX0dBQ1JfQUNCM19TSElGVCk7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NPQ19GR1BJT19DT1VOVCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZ3Bpby5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMGUyYjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ncGlvLmgKQEAgLTAsMCArMSw0NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GU0xfR1BJT19IXworI2RlZmluZSBfRlNMX0dQSU9fSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBncGlvCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgR1BJTyBkcml2ZXIgdmVyc2lvbiAyLjEuMS4gKi8KKyNkZWZpbmUgRlNMX0dQSU9fRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAxLCAxKSkKKy8qQH0qLworCisvKiEgQGJyaWVmIEdQSU8gZGlyZWN0aW9uIGRlZmluaXRpb24gKi8KK3R5cGVkZWYgZW51bSBfZ3Bpb19waW5fZGlyZWN0aW9uCit7CisgICAga0dQSU9fRGlnaXRhbElucHV0ID0gMFUsICAvKiE8IFNldCBjdXJyZW50IHBpbiBhcyBkaWdpdGFsIGlucHV0Ki8KKyAgICBrR1BJT19EaWdpdGFsT3V0cHV0ID0gMVUsIC8qITwgU2V0IGN1cnJlbnQgcGluIGFzIGRpZ2l0YWwgb3V0cHV0Ki8KK30gZ3Bpb19waW5fZGlyZWN0aW9uX3Q7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0dQSU9fSEFTX0FUVFJJQlVURV9DSEVDS0VSKSAmJiBGU0xfRkVBVFVSRV9HUElPX0hBU19BVFRSSUJVVEVfQ0hFQ0tFUgorLyohIEBicmllZiBHUElPIGNoZWNrZXIgYXR0cmlidXRlICovCit0eXBlZGVmIGVudW0gX2dwaW9fY2hlY2tlcl9hdHRyaWJ1dGUKK3sKKyAgICBrR1BJT19Vc2Vybm9uc2VjdXJlUldVc2Vyc2VjdXJlUldQcml2aWxlZ2Vkc2VjdXJlUlcgPQorICAgICAgICAweDAwVSwgLyohPCBVc2VyIG5vbnNlY3VyZTpSZWFkK1dyaXRlOyBVc2VyIFNlY3VyZTpSZWFkK1dyaXRlOyBQcml2aWxlZ2VkIFNlY3VyZTpSZWFkK1dyaXRlICovCisgICAga0dQSU9fVXNlcm5vbnNlY3VyZVJVc2Vyc2VjdXJlUldQcml2aWxlZ2Vkc2VjdXJlUlcgPQorICAgICAgICAweDAxVSwgLyohPCBVc2VyIG5vbnNlY3VyZTpSZWFkOyAgICAgICBVc2VyIFNlY3VyZTpSZWFkK1dyaXRlOyBQcml2aWxlZ2VkIFNlY3VyZTpSZWFkK1dyaXRlICovCisgICAga0dQSU9fVXNlcm5vbnNlY3VyZU5Vc2Vyc2VjdXJlUldQcml2aWxlZ2Vkc2VjdXJlUlcgPQorICAgICAgICAweDAyVSwgLyohPCBVc2VyIG5vbnNlY3VyZTpOb25lOyAgICAgICBVc2VyIFNlY3VyZTpSZWFkK1dyaXRlOyBQcml2aWxlZ2VkIFNlY3VyZTpSZWFkK1dyaXRlICovCisgICAga0dQSU9fVXNlcm5vbnNlY3VyZVJVc2Vyc2VjdXJlUlByaXZpbGVnZWRzZWN1cmVSVyA9CisgICAgICAgIDB4MDNVLCAvKiE8IFVzZXIgbm9uc2VjdXJlOlJlYWQ7ICAgICAgIFVzZXIgU2VjdXJlOlJlYWQ7ICAgICAgIFByaXZpbGVnZWQgU2VjdXJlOlJlYWQrV3JpdGUgKi8KKyAgICBrR1BJT19Vc2Vybm9uc2VjdXJlTlVzZXJzZWN1cmVSUHJpdmlsZWdlZHNlY3VyZVJXID0KKyAgICAgICAgMHgwNFUsIC8qITwgVXNlciBub25zZWN1cmU6Tm9uZTsgICAgICAgVXNlciBTZWN1cmU6UmVhZDsgICAgICAgUHJpdmlsZWdlZCBTZWN1cmU6UmVhZCtXcml0ZSAqLworICAgIGtHUElPX1VzZXJub25zZWN1cmVOVXNlcnNlY3VyZU5Qcml2aWxlZ2Vkc2VjdXJlUlcgPQorICAgICAgICAweDA1VSwgLyohPCBVc2VyIG5vbnNlY3VyZTpOb25lOyAgICAgICBVc2VyIFNlY3VyZTpOb25lOyAgICAgICBQcml2aWxlZ2VkIFNlY3VyZTpSZWFkK1dyaXRlICovCisgICAga0dQSU9fVXNlcm5vbnNlY3VyZU5Vc2Vyc2VjdXJlTlByaXZpbGVnZWRzZWN1cmVSID0KKyAgICAgICAgMHgwNlUsIC8qITwgVXNlciBub25zZWN1cmU6Tm9uZTsgICAgICAgVXNlciBTZWN1cmU6Tm9uZTsgICAgICAgUHJpdmlsZWdlZCBTZWN1cmU6UmVhZCAqLworICAgIGtHUElPX1VzZXJub25zZWN1cmVOVXNlcnNlY3VyZU5Qcml2aWxlZ2Vkc2VjdXJlTiA9CisgICAgICAgIDB4MDdVLCAvKiE8IFVzZXIgbm9uc2VjdXJlOk5vbmU7ICAgICAgIFVzZXIgU2VjdXJlOk5vbmU7ICAgICAgIFByaXZpbGVnZWQgU2VjdXJlOk5vbmUgKi8KKyAgICBrR1BJT19JZ25vcmVBdHRyaWJ1dGVDaGVjayA9IDB4MTBVLCAvKiE8IElnbm9yZXMgdGhlIGF0dHJpYnV0ZSBjaGVjayAqLworfSBncGlvX2NoZWNrZXJfYXR0cmlidXRlX3Q7CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgVGhlIEdQSU8gcGluIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICoKKyAqIEVhY2ggcGluIGNhbiBvbmx5IGJlIGNvbmZpZ3VyZWQgYXMgZWl0aGVyIGFuIG91dHB1dCBwaW4gb3IgYW4gaW5wdXQgcGluIGF0IGEgdGltZS4KKyAqIElmIGNvbmZpZ3VyZWQgYXMgYW4gaW5wdXQgcGluLCBsZWF2ZSB0aGUgb3V0cHV0Q29uZmlnIHVudXNlZC4KKyAqIE5vdGUgdGhhdCBpbiBzb21lIHVzZSBjYXNlcywgdGhlIGNvcnJlc3BvbmRpbmcgcG9ydCBwcm9wZXJ0eSBzaG91bGQgYmUgY29uZmlndXJlZCBpbiBhZHZhbmNlCisgKiAgICAgICAgd2l0aCB0aGUgUE9SVF9TZXRQaW5Db25maWcoKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2dwaW9fcGluX2NvbmZpZworeworICAgIGdwaW9fcGluX2RpcmVjdGlvbl90IHBpbkRpcmVjdGlvbjsgLyohPCBHUElPIGRpcmVjdGlvbiwgaW5wdXQgb3Igb3V0cHV0ICovCisgICAgLyogT3V0cHV0IGNvbmZpZ3VyYXRpb25zOyBpZ25vcmUgaWYgY29uZmlndXJlZCBhcyBhbiBpbnB1dCBwaW4gKi8KKyAgICB1aW50OF90IG91dHB1dExvZ2ljOyAvKiE8IFNldCBhIGRlZmF1bHQgb3V0cHV0IGxvZ2ljLCB3aGljaCBoYXMgbm8gdXNlIGluIGlucHV0ICovCit9IGdwaW9fcGluX2NvbmZpZ190OworCisvKiEgQH0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGdwaW9fZHJpdmVyCisgKiBAeworICovCisKKy8qISBAbmFtZSBHUElPIENvbmZpZ3VyYXRpb24gKi8KKy8qQHsqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyBhIEdQSU8gcGluIHVzZWQgYnkgdGhlIGJvYXJkLgorICoKKyAqIFRvIGluaXRpYWxpemUgdGhlIEdQSU8sIGRlZmluZSBhIHBpbiBjb25maWd1cmF0aW9uLCBhcyBlaXRoZXIgaW5wdXQgb3Igb3V0cHV0LCBpbiB0aGUgdXNlciBmaWxlLgorICogVGhlbiwgY2FsbCB0aGUgR1BJT19QaW5Jbml0KCkgZnVuY3Rpb24uCisgKgorICogVGhpcyBpcyBhbiBleGFtcGxlIHRvIGRlZmluZSBhbiBpbnB1dCBwaW4gb3IgYW4gb3V0cHV0IHBpbiBjb25maWd1cmF0aW9uLgorICogQGNvZGUKKyAqIC8vIERlZmluZSBhIGRpZ2l0YWwgaW5wdXQgcGluIGNvbmZpZ3VyYXRpb24sCisgKiBncGlvX3Bpbl9jb25maWdfdCBjb25maWcgPQorICogeworICogICBrR1BJT19EaWdpdGFsSW5wdXQsCisgKiAgIDAsCisgKiB9CisgKiAvL0RlZmluZSBhIGRpZ2l0YWwgb3V0cHV0IHBpbiBjb25maWd1cmF0aW9uLAorICogZ3Bpb19waW5fY29uZmlnX3QgY29uZmlnID0KKyAqIHsKKyAqICAga0dQSU9fRGlnaXRhbE91dHB1dCwKKyAqICAgMCwKKyAqIH0KKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgICBHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChHUElPQSwgR1BJT0IsIEdQSU9DLCBhbmQgc28gb24uKQorICogQHBhcmFtIHBpbiAgICBHUElPIHBvcnQgcGluIG51bWJlcgorICogQHBhcmFtIGNvbmZpZyBHUElPIHBpbiBjb25maWd1cmF0aW9uIHBvaW50ZXIKKyAqLwordm9pZCBHUElPX1BpbkluaXQoR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBwaW4sIGNvbnN0IGdwaW9fcGluX2NvbmZpZ190ICpjb25maWcpOworCisvKkB9Ki8KKworLyohIEBuYW1lIEdQSU8gT3V0cHV0IE9wZXJhdGlvbnMgKi8KKy8qQHsqLworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBvdXRwdXQgbGV2ZWwgb2YgdGhlIG11bHRpcGxlIEdQSU8gcGlucyB0byB0aGUgbG9naWMgMSBvciAwLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIEdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIgKEdQSU9BLCBHUElPQiwgR1BJT0MsIGFuZCBzbyBvbi4pCisgKiBAcGFyYW0gcGluICAgICBHUElPIHBpbiBudW1iZXIKKyAqIEBwYXJhbSBvdXRwdXQgIEdQSU8gcGluIG91dHB1dCBsb2dpYyBsZXZlbC4KKyAqICAgICAgICAtIDA6IGNvcnJlc3BvbmRpbmcgcGluIG91dHB1dCBsb3ctbG9naWMgbGV2ZWwuCisgKiAgICAgICAgLSAxOiBjb3JyZXNwb25kaW5nIHBpbiBvdXRwdXQgaGlnaC1sb2dpYyBsZXZlbC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEdQSU9fV3JpdGVQaW5PdXRwdXQoR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBwaW4sIHVpbnQ4X3Qgb3V0cHV0KQoreworICAgIGlmIChvdXRwdXQgPT0gMFUpCisgICAgeworICAgICAgICBiYXNlLT5QQ09SID0gMVUgPDwgcGluOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5QU09SID0gMVUgPDwgcGluOworICAgIH0KK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgb3V0cHV0IGxldmVsIG9mIHRoZSBtdWx0aXBsZSBHUElPIHBpbnMgdG8gdGhlIGxvZ2ljIDEuCisgKgorICogQHBhcmFtIGJhc2UgR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoR1BJT0EsIEdQSU9CLCBHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBtYXNrIEdQSU8gcGluIG51bWJlciBtYWNybworICovCitzdGF0aWMgaW5saW5lIHZvaWQgR1BJT19TZXRQaW5zT3V0cHV0KEdQSU9fVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5QU09SID0gbWFzazsKK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgb3V0cHV0IGxldmVsIG9mIHRoZSBtdWx0aXBsZSBHUElPIHBpbnMgdG8gdGhlIGxvZ2ljIDAuCisgKgorICogQHBhcmFtIGJhc2UgR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoR1BJT0EsIEdQSU9CLCBHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBtYXNrIEdQSU8gcGluIG51bWJlciBtYWNybworICovCitzdGF0aWMgaW5saW5lIHZvaWQgR1BJT19DbGVhclBpbnNPdXRwdXQoR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPlBDT1IgPSBtYXNrOworfQorCisvKiEKKyAqIEBicmllZiBSZXZlcnNlcyB0aGUgY3VycmVudCBvdXRwdXQgbG9naWMgb2YgdGhlIG11bHRpcGxlIEdQSU8gcGlucy4KKyAqCisgKiBAcGFyYW0gYmFzZSBHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChHUElPQSwgR1BJT0IsIEdQSU9DLCBhbmQgc28gb24uKQorICogQHBhcmFtIG1hc2sgR1BJTyBwaW4gbnVtYmVyIG1hY3JvCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBHUElPX1RvZ2dsZVBpbnNPdXRwdXQoR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPlBUT1IgPSBtYXNrOworfQorLypAfSovCisKKy8qISBAbmFtZSBHUElPIElucHV0IE9wZXJhdGlvbnMgKi8KKy8qQHsqLworCisvKiEKKyAqIEBicmllZiBSZWFkcyB0aGUgY3VycmVudCBpbnB1dCB2YWx1ZSBvZiB0aGUgR1BJTyBwb3J0LgorICoKKyAqIEBwYXJhbSBiYXNlIEdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIgKEdQSU9BLCBHUElPQiwgR1BJT0MsIGFuZCBzbyBvbi4pCisgKiBAcGFyYW0gcGluICAgICBHUElPIHBpbiBudW1iZXIKKyAqIEByZXR2YWwgR1BJTyBwb3J0IGlucHV0IHZhbHVlCisgKiAgICAgICAgLSAwOiBjb3JyZXNwb25kaW5nIHBpbiBpbnB1dCBsb3ctbG9naWMgbGV2ZWwuCisgKiAgICAgICAgLSAxOiBjb3JyZXNwb25kaW5nIHBpbiBpbnB1dCBoaWdoLWxvZ2ljIGxldmVsLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IEdQSU9fUmVhZFBpbklucHV0KEdQSU9fVHlwZSAqYmFzZSwgdWludDMyX3QgcGluKQoreworICAgIHJldHVybiAoKChiYXNlLT5QRElSKSA+PiBwaW4pICYgMHgwMVUpOworfQorLypAfSovCisKKy8qISBAbmFtZSBHUElPIEludGVycnVwdCAqLworLypAeyovCisKKy8qIQorICogQGJyaWVmIFJlYWRzIHRoZSBHUElPIHBvcnQgaW50ZXJydXB0IHN0YXR1cyBmbGFnLgorICoKKyAqIElmIGEgcGluIGlzIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgdGhlIERNQSByZXF1ZXN0LCB0aGUgY29ycmVzcG9uZGluZyBmbGFnCisgKiBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHJlcXVlc3RlZCBETUEgdHJhbnNmZXIuCisgKiBPdGhlcndpc2UsIHRoZSBmbGFnIHJlbWFpbnMgc2V0IHVudGlsIGEgbG9naWMgb25lIGlzIHdyaXR0ZW4gdG8gdGhhdCBmbGFnLgorICogSWYgY29uZmlndXJlZCBmb3IgYSBsZXZlbCBzZW5zaXRpdmUgaW50ZXJydXB0IHRoYXQgcmVtYWlucyBhc3NlcnRlZCwgdGhlIGZsYWcKKyAqIGlzIHNldCBhZ2FpbiBpbW1lZGlhdGVseS4KKyAqCisgKiBAcGFyYW0gYmFzZSBHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChHUElPQSwgR1BJT0IsIEdQSU9DLCBhbmQgc28gb24uKQorICogQHJldHZhbCBUaGUgY3VycmVudCBHUElPIHBvcnQgaW50ZXJydXB0IHN0YXR1cyBmbGFnLCBmb3IgZXhhbXBsZSwgMHgwMDAxMDAwMSBtZWFucyB0aGUKKyAqICAgICAgICAgcGluIDAgYW5kIDE3IGhhdmUgdGhlIGludGVycnVwdC4KKyAqLwordWludDMyX3QgR1BJT19HZXRQaW5zSW50ZXJydXB0RmxhZ3MoR1BJT19UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIG11bHRpcGxlIEdQSU8gcGluIGludGVycnVwdCBzdGF0dXMgZmxhZ3MuCisgKgorICogQHBhcmFtIGJhc2UgR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoR1BJT0EsIEdQSU9CLCBHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBtYXNrIEdQSU8gcGluIG51bWJlciBtYWNybworICovCit2b2lkIEdQSU9fQ2xlYXJQaW5zSW50ZXJydXB0RmxhZ3MoR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfR1BJT19IQVNfQVRUUklCVVRFX0NIRUNLRVIpICYmIEZTTF9GRUFUVVJFX0dQSU9fSEFTX0FUVFJJQlVURV9DSEVDS0VSCisvKiEKKyAqIEBicmllZiBUaGUgR1BJTyBtb2R1bGUgc3VwcG9ydHMgYSBkZXZpY2Utc3BlY2lmaWMgbnVtYmVyIG9mIGRhdGEgcG9ydHMsIG9yZ2FuaXplZCBhcyAzMi1iaXQKKyAqIHdvcmRzLiBFYWNoIDMyLWJpdCBkYXRhIHBvcnQgaW5jbHVkZXMgYSBHQUNSIHJlZ2lzdGVyLCB3aGljaCBkZWZpbmVzIHRoZSBieXRlLWxldmVsCisgKiBhdHRyaWJ1dGVzIHJlcXVpcmVkIGZvciBhIHN1Y2Nlc3NmdWwgYWNjZXNzIHRvIHRoZSBHUElPIHByb2dyYW1taW5nIG1vZGVsLiBUaGUgYXR0cmlidXRlIGNvbnRyb2xzIGZvciB0aGUgNCBkYXRhCisgKiBieXRlcyBpbiB0aGUgR0FDUiBmb2xsb3cgYSBzdGFuZGFyZCBsaXR0bGUgZW5kaWFuCisgKiBkYXRhIGNvbnZlbnRpb24uCisgKgorICogQHBhcmFtIGJhc2UgR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoR1BJT0EsIEdQSU9CLCBHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBtYXNrIEdQSU8gcGluIG51bWJlciBtYWNybworICovCit2b2lkIEdQSU9fQ2hlY2tBdHRyaWJ1dGVCeXRlcyhHUElPX1R5cGUgKmJhc2UsIGdwaW9fY2hlY2tlcl9hdHRyaWJ1dGVfdCBhdHRyaWJ1dGUpOworI2VuZGlmCisKKy8qQH0qLworLyohIEB9ICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgZmdwaW9fZHJpdmVyCisgKiBAeworICovCisKKy8qCisgKiBJbnRyb2R1Y2VzIHRoZSBGR1BJTyBmZWF0dXJlLgorICoKKyAqIFRoZSBGR1BJTyBmZWF0dXJlcyBhcmUgb25seSBzdXBwb3J0IG9uIHNvbWUgS2luZXRpcyBNQ1VzLiBUaGUgRkdQSU8gcmVnaXN0ZXJzIGFyZSBhbGlhc2VkIHRvIHRoZSBJT1BPUlQKKyAqIGludGVyZmFjZS4gQWNjZXNzZXMgdmlhIHRoZSBJT1BPUlQgaW50ZXJmYWNlIG9jY3VyIGluIHBhcmFsbGVsIHdpdGggYW55IGluc3RydWN0aW9uIGZldGNoZXMgYW5kCisgKiBjb21wbGV0ZSBpbiBhIHNpbmdsZSBjeWNsZS4gVGhpcyBhbGlhc2VkIEZhc3QgR1BJTyBtZW1vcnkgbWFwIGlzIGNhbGxlZCBGR1BJTy4KKyAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRkdQSU9fQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19GR1BJT19DT1VOVAorCisvKiEgQG5hbWUgRkdQSU8gQ29uZmlndXJhdGlvbiAqLworLypAeyovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIGEgRkdQSU8gcGluIHVzZWQgYnkgdGhlIGJvYXJkLgorICoKKyAqIFRvIGluaXRpYWxpemUgdGhlIEZHUElPIGRyaXZlciwgZGVmaW5lIGEgcGluIGNvbmZpZ3VyYXRpb24sIGFzIGVpdGhlciBpbnB1dCBvciBvdXRwdXQsIGluIHRoZSB1c2VyIGZpbGUuCisgKiBUaGVuLCBjYWxsIHRoZSBGR1BJT19QaW5Jbml0KCkgZnVuY3Rpb24uCisgKgorICogVGhpcyBpcyBhbiBleGFtcGxlIHRvIGRlZmluZSBhbiBpbnB1dCBwaW4gb3IgYW4gb3V0cHV0IHBpbiBjb25maWd1cmF0aW9uOgorICogQGNvZGUKKyAqIC8vIERlZmluZSBhIGRpZ2l0YWwgaW5wdXQgcGluIGNvbmZpZ3VyYXRpb24sCisgKiBncGlvX3Bpbl9jb25maWdfdCBjb25maWcgPQorICogeworICogICBrR1BJT19EaWdpdGFsSW5wdXQsCisgKiAgIDAsCisgKiB9CisgKiAvL0RlZmluZSBhIGRpZ2l0YWwgb3V0cHV0IHBpbiBjb25maWd1cmF0aW9uLAorICogZ3Bpb19waW5fY29uZmlnX3QgY29uZmlnID0KKyAqIHsKKyAqICAga0dQSU9fRGlnaXRhbE91dHB1dCwKKyAqICAgMCwKKyAqIH0KKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgICBGR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoRkdQSU9BLCBGR1BJT0IsIEZHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBwaW4gICAgRkdQSU8gcG9ydCBwaW4gbnVtYmVyCisgKiBAcGFyYW0gY29uZmlnIEZHUElPIHBpbiBjb25maWd1cmF0aW9uIHBvaW50ZXIKKyAqLwordm9pZCBGR1BJT19QaW5Jbml0KEZHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IHBpbiwgY29uc3QgZ3Bpb19waW5fY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qQH0qLworCisvKiEgQG5hbWUgRkdQSU8gT3V0cHV0IE9wZXJhdGlvbnMgKi8KKy8qQHsqLworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBvdXRwdXQgbGV2ZWwgb2YgdGhlIG11bHRpcGxlIEZHUElPIHBpbnMgdG8gdGhlIGxvZ2ljIDEgb3IgMC4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBGR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoRkdQSU9BLCBGR1BJT0IsIEZHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBwaW4gICAgIEZHUElPIHBpbiBudW1iZXIKKyAqIEBwYXJhbSBvdXRwdXQgIEZHUElPcGluIG91dHB1dCBsb2dpYyBsZXZlbC4KKyAqICAgICAgICAtIDA6IGNvcnJlc3BvbmRpbmcgcGluIG91dHB1dCBsb3ctbG9naWMgbGV2ZWwuCisgKiAgICAgICAgLSAxOiBjb3JyZXNwb25kaW5nIHBpbiBvdXRwdXQgaGlnaC1sb2dpYyBsZXZlbC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEZHUElPX1dyaXRlUGluT3V0cHV0KEZHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IHBpbiwgdWludDhfdCBvdXRwdXQpCit7CisgICAgaWYgKG91dHB1dCA9PSAwVSkKKyAgICB7CisgICAgICAgIGJhc2UtPlBDT1IgPSAxIDw8IHBpbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+UFNPUiA9IDEgPDwgcGluOworICAgIH0KK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgb3V0cHV0IGxldmVsIG9mIHRoZSBtdWx0aXBsZSBGR1BJTyBwaW5zIHRvIHRoZSBsb2dpYyAxLgorICoKKyAqIEBwYXJhbSBiYXNlIEZHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChGR1BJT0EsIEZHUElPQiwgRkdQSU9DLCBhbmQgc28gb24uKQorICogQHBhcmFtIG1hc2sgRkdQSU8gcGluIG51bWJlciBtYWNybworICovCitzdGF0aWMgaW5saW5lIHZvaWQgRkdQSU9fU2V0UGluc091dHB1dChGR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPlBTT1IgPSBtYXNrOworfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBvdXRwdXQgbGV2ZWwgb2YgdGhlIG11bHRpcGxlIEZHUElPIHBpbnMgdG8gdGhlIGxvZ2ljIDAuCisgKgorICogQHBhcmFtIGJhc2UgRkdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIgKEZHUElPQSwgRkdQSU9CLCBGR1BJT0MsIGFuZCBzbyBvbi4pCisgKiBAcGFyYW0gbWFzayBGR1BJTyBwaW4gbnVtYmVyIG1hY3JvCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBGR1BJT19DbGVhclBpbnNPdXRwdXQoRkdQSU9fVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5QQ09SID0gbWFzazsKK30KKworLyohCisgKiBAYnJpZWYgUmV2ZXJzZXMgdGhlIGN1cnJlbnQgb3V0cHV0IGxvZ2ljIG9mIHRoZSBtdWx0aXBsZSBGR1BJTyBwaW5zLgorICoKKyAqIEBwYXJhbSBiYXNlIEZHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChGR1BJT0EsIEZHUElPQiwgRkdQSU9DLCBhbmQgc28gb24uKQorICogQHBhcmFtIG1hc2sgRkdQSU8gcGluIG51bWJlciBtYWNybworICovCitzdGF0aWMgaW5saW5lIHZvaWQgRkdQSU9fVG9nZ2xlUGluc091dHB1dChGR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPlBUT1IgPSBtYXNrOworfQorLypAfSovCisKKy8qISBAbmFtZSBGR1BJTyBJbnB1dCBPcGVyYXRpb25zICovCisvKkB7Ki8KKworLyohCisgKiBAYnJpZWYgUmVhZHMgdGhlIGN1cnJlbnQgaW5wdXQgdmFsdWUgb2YgdGhlIEZHUElPIHBvcnQuCisgKgorICogQHBhcmFtIGJhc2UgRkdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIgKEZHUElPQSwgRkdQSU9CLCBGR1BJT0MsIGFuZCBzbyBvbi4pCisgKiBAcGFyYW0gcGluICBGR1BJTyBwaW4gbnVtYmVyCisgKiBAcmV0dmFsIEZHUElPIHBvcnQgaW5wdXQgdmFsdWUKKyAqICAgICAgICAtIDA6IGNvcnJlc3BvbmRpbmcgcGluIGlucHV0IGxvdy1sb2dpYyBsZXZlbC4KKyAqICAgICAgICAtIDE6IGNvcnJlc3BvbmRpbmcgcGluIGlucHV0IGhpZ2gtbG9naWMgbGV2ZWwuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgRkdQSU9fUmVhZFBpbklucHV0KEZHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IHBpbikKK3sKKyAgICByZXR1cm4gKCgoYmFzZS0+UERJUikgPj4gcGluKSAmIDB4MDFVKTsKK30KKy8qQH0qLworCisvKiEgQG5hbWUgRkdQSU8gSW50ZXJydXB0ICovCisvKkB7Ki8KKworLyohCisgKiBAYnJpZWYgUmVhZHMgdGhlIEZHUElPIHBvcnQgaW50ZXJydXB0IHN0YXR1cyBmbGFnLgorICoKKyAqIElmIGEgcGluIGlzIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgdGhlIERNQSByZXF1ZXN0LCB0aGUgY29ycmVzcG9uZGluZyBmbGFnCisgKiBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHJlcXVlc3RlZCBETUEgdHJhbnNmZXIuCisgKiBPdGhlcndpc2UsIHRoZSBmbGFnIHJlbWFpbnMgc2V0IHVudGlsIGEgbG9naWMgb25lIGlzIHdyaXR0ZW4gdG8gdGhhdCBmbGFnLgorICogSWYgY29uZmlndXJlZCBmb3IgYSBsZXZlbC1zZW5zaXRpdmUgaW50ZXJydXB0IHRoYXQgcmVtYWlucyBhc3NlcnRlZCwgdGhlIGZsYWcKKyAqIGlzIHNldCBhZ2FpbiBpbW1lZGlhdGVseS4KKyAqCisgKiBAcGFyYW0gYmFzZSBGR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoRkdQSU9BLCBGR1BJT0IsIEZHUElPQywgYW5kIHNvIG9uLikKKyAqIEByZXR2YWwgVGhlIGN1cnJlbnQgRkdQSU8gcG9ydCBpbnRlcnJ1cHQgc3RhdHVzIGZsYWdzLCBmb3IgZXhhbXBsZSwgMHgwMDAxMDAwMSBtZWFucyB0aGUKKyAqICAgICAgICAgcGluIDAgYW5kIDE3IGhhdmUgdGhlIGludGVycnVwdC4KKyAqLwordWludDMyX3QgRkdQSU9fR2V0UGluc0ludGVycnVwdEZsYWdzKEZHUElPX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBDbGVhcnMgdGhlIG11bHRpcGxlIEZHUElPIHBpbiBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcuCisgKgorICogQHBhcmFtIGJhc2UgRkdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIgKEZHUElPQSwgRkdQSU9CLCBGR1BJT0MsIGFuZCBzbyBvbi4pCisgKiBAcGFyYW0gbWFzayBGR1BJTyBwaW4gbnVtYmVyIG1hY3JvCisgKi8KK3ZvaWQgRkdQSU9fQ2xlYXJQaW5zSW50ZXJydXB0RmxhZ3MoRkdQSU9fVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzayk7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0dQSU9fSEFTX0FUVFJJQlVURV9DSEVDS0VSKSAmJiBGU0xfRkVBVFVSRV9HUElPX0hBU19BVFRSSUJVVEVfQ0hFQ0tFUgorLyohCisgKiBAYnJpZWYgVGhlIEZHUElPIG1vZHVsZSBzdXBwb3J0cyBhIGRldmljZS1zcGVjaWZpYyBudW1iZXIgb2YgZGF0YSBwb3J0cywgb3JnYW5pemVkIGFzIDMyLWJpdAorICogd29yZHMuIEVhY2ggMzItYml0IGRhdGEgcG9ydCBpbmNsdWRlcyBhIEdBQ1IgcmVnaXN0ZXIsIHdoaWNoIGRlZmluZXMgdGhlIGJ5dGUtbGV2ZWwKKyAqIGF0dHJpYnV0ZXMgcmVxdWlyZWQgZm9yIGEgc3VjY2Vzc2Z1bCBhY2Nlc3MgdG8gdGhlIEdQSU8gcHJvZ3JhbW1pbmcgbW9kZWwuIFRoZSBhdHRyaWJ1dGUgY29udHJvbHMgZm9yIHRoZSA0IGRhdGEKKyAqIGJ5dGVzIGluIHRoZSBHQUNSIGZvbGxvdyBhIHN0YW5kYXJkIGxpdHRsZSBlbmRpYW4KKyAqIGRhdGEgY29udmVudGlvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBGR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoRkdQSU9BLCBGR1BJT0IsIEZHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBtYXNrIEZHUElPIHBpbiBudW1iZXIgbWFjcm8KKyAqLwordm9pZCBGR1BJT19DaGVja0F0dHJpYnV0ZUJ5dGVzKEZHUElPX1R5cGUgKmJhc2UsIGdwaW9fY2hlY2tlcl9hdHRyaWJ1dGVfdCBhdHRyaWJ1dGUpOworI2VuZGlmCisKKy8qQH0qLworCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU09DX0ZHUElPX0NPVU5UICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qIQorICogQH0KKyAqLworCisjZW5kaWYgLyogX0ZTTF9HUElPX0hfKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2kyYy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5NzcwYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2kyYy5jCkBAIC0wLDAgKzEsMTc1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiZnNsX2kyYy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAYnJpZWYgaTJjIHRyYW5zZmVyIHN0YXRlLiAqLworZW51bSBfaTJjX3RyYW5zZmVyX3N0YXRlcworeworICAgIGtJZGxlU3RhdGUgPSAweDBVLCAgICAgICAgICAgICAvKiE8IEkyQyBidXMgaWRsZS4gKi8KKyAgICBrQ2hlY2tBZGRyZXNzU3RhdGUgPSAweDFVLCAgICAgLyohPCA3LWJpdCBhZGRyZXNzIGNoZWNrIHN0YXRlLiAqLworICAgIGtTZW5kQ29tbWFuZFN0YXRlID0gMHgyVSwgICAgICAvKiE8IFNlbmQgY29tbWFuZCBieXRlIHBoYXNlLiAqLworICAgIGtTZW5kRGF0YVN0YXRlID0gMHgzVSwgICAgICAgICAvKiE8IFNlbmQgZGF0YSB0cmFuc2ZlciBwaGFzZS4gKi8KKyAgICBrUmVjZWl2ZURhdGFCZWdpblN0YXRlID0gMHg0VSwgLyohPCBSZWNlaXZlIGRhdGEgdHJhbnNmZXIgcGhhc2UgYmVnaW4uICovCisgICAga1JlY2VpdmVEYXRhU3RhdGUgPSAweDVVLCAgICAgIC8qITwgUmVjZWl2ZSBkYXRhIHRyYW5zZmVyIHBoYXNlLiAqLworfTsKKworLyohIEBicmllZiBDb21tb24gc2V0cyBvZiBmbGFncyB1c2VkIGJ5IHRoZSBkcml2ZXIuICovCitlbnVtIF9pMmNfZmxhZ19jb25zdGFudHMKK3sKKy8qISBBbGwgZmxhZ3Mgd2hpY2ggYXJlIGNsZWFyZWQgYnkgdGhlIGRyaXZlciB1cG9uIHN0YXJ0aW5nIGEgdHJhbnNmZXIuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUCisgICAga0NsZWFyRmxhZ3MgPSBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcgfCBrSTJDX0ludFBlbmRpbmdGbGFnIHwga0kyQ19TdGFydERldGVjdEZsYWcgfCBrSTJDX1N0b3BEZXRlY3RGbGFnLAorICAgIGtJcnFGbGFncyA9IGtJMkNfR2xvYmFsSW50ZXJydXB0RW5hYmxlIHwga0kyQ19TdGFydFN0b3BEZXRlY3RJbnRlcnJ1cHRFbmFibGUsCisjZWxpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QKKyAgICBrQ2xlYXJGbGFncyA9IGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZyB8IGtJMkNfSW50UGVuZGluZ0ZsYWcgfCBrSTJDX1N0b3BEZXRlY3RGbGFnLAorICAgIGtJcnFGbGFncyA9IGtJMkNfR2xvYmFsSW50ZXJydXB0RW5hYmxlIHwga0kyQ19TdG9wRGV0ZWN0SW50ZXJydXB0RW5hYmxlLAorI2Vsc2UKKyAgICBrQ2xlYXJGbGFncyA9IGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZyB8IGtJMkNfSW50UGVuZGluZ0ZsYWcsCisgICAga0lycUZsYWdzID0ga0kyQ19HbG9iYWxJbnRlcnJ1cHRFbmFibGUsCisjZW5kaWYKKworfTsKKworLyohIEBicmllZiBUeXBlZGVmIGZvciBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KK3R5cGVkZWYgdm9pZCAoKmkyY19pc3JfdCkoSTJDX1R5cGUgKmJhc2UsIHZvaWQgKmkyY0hhbmRsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBHZXQgaW5zdGFuY2UgbnVtYmVyIGZvciBJMkMgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLwordWludDMyX3QgSTJDX0dldEluc3RhbmNlKEkyQ19UeXBlICpiYXNlKTsKKworLyohCisqIEBicmllZiBTZXQgU0NML1NEQSBob2xkIHRpbWUsIHRoaXMgQVBJIHJlY2VpdmVzIFNDTCBzdG9wIGhvbGQgdGltZSwgY2FsY3VsYXRlIHRoZQorKiBjbG9zZXN0IFNDTCBkaXZpZGVyIGFuZCBNVUxUIHZhbHVlIGZvciB0aGUgU0RBIGhvbGQgdGltZSwgU0NMIHN0YXJ0IGFuZCBTQ0wgc3RvcAorKiBob2xkIHRpbWUuIFRvIHJlZHVjZSB0aGUgUk9NIHNpemUsIFNEQS9TQ0wgaG9sZCB2YWx1ZSBtYXBwaW5nIHRhYmxlIGlzIG5vdCBwcm92aWRlZCwKKyogYXNzdW1lIFNDTCBkaXZpZGVyID0gU0NMIHN0b3AgaG9sZCB2YWx1ZSAqMiB0byBnZXQgdGhlIGNsb3Nlc3QgU0NMIGRpdmlkZXIgdmFsdWUgYW5kIE1VTFQKKyogdmFsdWUsIHRoZW4gdGhlIHJlbGF0ZWQgU0RBIGhvbGQgdGltZSwgU0NMIHN0YXJ0IGFuZCBTQ0wgc3RvcCBob2xkIHRpbWUgaXMgdXNlZC4KKyoKKyogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gc291cmNlQ2xvY2tfSHogSTJDIGZ1bmN0aW9uYWwgY2xvY2sgZnJlcXVlbmN5IGluIEhlcnR6LgorKiBAcGFyYW0gc2NsU3RvcEhvbGRUaW1lX25zIFNDTCBzdG9wIGhvbGQgdGltZSBpbiBucy4KKyovCitzdGF0aWMgdm9pZCBJMkNfU2V0SG9sZFRpbWUoSTJDX1R5cGUgKmJhc2UsIHVpbnQzMl90IHNjbFN0b3BIb2xkVGltZV9ucywgdWludDMyX3Qgc291cmNlQ2xvY2tfSHopOworCisvKiEKKyAqIEBicmllZiBTZXQgdXAgbWFzdGVyIHRyYW5zZmVyLCBzZW5kIHNsYXZlIGFkZHJlc3MgYW5kIGRlY2lkZSB0aGUgaW5pdGlhbAorICogdHJhbnNmZXIgc3RhdGUuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGkyY19tYXN0ZXJfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKiBAcGFyYW0geGZlciBwb2ludGVyIHRvIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBzdGF0dXNfdCBJMkNfSW5pdFRyYW5zZmVyU3RhdGVNYWNoaW5lKEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCAqeGZlcik7CisKKy8qIQorICogQGJyaWVmIENoZWNrIGFuZCBjbGVhciBzdGF0dXMgb3BlcmF0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBzdGF0dXMgY3VycmVudCBpMmMgaGFyZHdhcmUgc3RhdHVzLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgTm8gZXJyb3IgZm91bmQuCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX0FyYml0cmF0aW9uTG9zdCBUcmFuc2ZlciBlcnJvciwgYXJiaXRyYXRpb24gbG9zdC4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfTmFrIFJlY2VpdmVkIE5hayBlcnJvci4KKyAqLworc3RhdGljIHN0YXR1c190IEkyQ19DaGVja0FuZENsZWFyRXJyb3IoSTJDX1R5cGUgKmJhc2UsIHVpbnQzMl90IHN0YXR1cyk7CisKKy8qIQorICogQGJyaWVmIE1hc3RlciBydW4gdHJhbnNmZXIgc3RhdGUgbWFjaGluZSB0byBwZXJmb3JtIGEgYnl0ZSBvZiB0cmFuc2Zlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZQorICogQHBhcmFtIGlzRG9uZSBpbnB1dCBwYXJhbSB0byBnZXQgd2hldGhlciB0aGUgdGhpbmcgaXMgZG9uZSwgdHJ1ZSBpcyBkb25lCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBObyBlcnJvciBmb3VuZC4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfQXJiaXRyYXRpb25Mb3N0IFRyYW5zZmVyIGVycm9yLCBhcmJpdHJhdGlvbiBsb3N0LgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19OYWsgUmVjZWl2ZWQgTmFrIGVycm9yLgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19UaW1lb3V0IFRyYW5zZmVyIGVycm9yLCB3YWl0IHNpZ25hbCB0aW1lb3V0LgorICovCitzdGF0aWMgc3RhdHVzX3QgSTJDX01hc3RlclRyYW5zZmVyUnVuU3RhdGVNYWNoaW5lKEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsIGJvb2wgKmlzRG9uZSk7CisKKy8qIQorICogQGJyaWVmIEkyQyBjb21tb24gaW50ZXJydXB0IGhhbmRsZXIuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGkyY19tYXN0ZXJfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgSTJDX1RyYW5zZmVyQ29tbW9uSVJRSGFuZGxlcihJMkNfVHlwZSAqYmFzZSwgdm9pZCAqaGFuZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBicmllZiBQb2ludGVycyB0byBpMmMgaGFuZGxlcyBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyB2b2lkICpzX2kyY0hhbmRsZVtGU0xfRkVBVFVSRV9TT0NfSTJDX0NPVU5UXSA9IHtOVUxMfTsKKworLyohIEBicmllZiBTQ0wgY2xvY2sgZGl2aWRlciB1c2VkIHRvIGNhbGN1bGF0ZSBiYXVkcmF0ZS4gKi8KK3N0YXRpYyBjb25zdCB1aW50MTZfdCBzX2kyY0RpdmlkZXJUYWJsZVtdID0geworICAgIDIwLCAgMjIsICAyNCwgIDI2LCAgIDI4LCAgIDMwLCAgIDM0LCAgIDQwLCAgIDI4LCAgIDMyLCAgIDM2LCAgIDQwLCAgIDQ0LCAgIDQ4LCAgIDU2LCAgIDY4LAorICAgIDQ4LCAgNTYsICA2NCwgIDcyLCAgIDgwLCAgIDg4LCAgIDEwNCwgIDEyOCwgIDgwLCAgIDk2LCAgIDExMiwgIDEyOCwgIDE0NCwgIDE2MCwgIDE5MiwgIDI0MCwKKyAgICAxNjAsIDE5MiwgMjI0LCAyNTYsICAyODgsICAzMjAsICAzODQsICA0ODAsICAzMjAsICAzODQsICA0NDgsICA1MTIsICA1NzYsICA2NDAsICA3NjgsICA5NjAsCisgICAgNjQwLCA3NjgsIDg5NiwgMTAyNCwgMTE1MiwgMTI4MCwgMTUzNiwgMTkyMCwgMTI4MCwgMTUzNiwgMTc5MiwgMjA0OCwgMjMwNCwgMjU2MCwgMzA3MiwgMzg0MH07CisKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gaTJjIGJhc2VzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIEkyQ19UeXBlICpjb25zdCBzX2kyY0Jhc2VzW10gPSBJMkNfQkFTRV9QVFJTOworCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIGkyYyBJUlEgbnVtYmVyIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIGNvbnN0IElSUW5fVHlwZSBzX2kyY0lycXNbXSA9IEkyQ19JUlFTOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorLyohIEBicmllZiBQb2ludGVycyB0byBpMmMgY2xvY2tzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIGNvbnN0IGNsb2NrX2lwX25hbWVfdCBzX2kyY0Nsb2Nrc1tdID0gSTJDX0NMT0NLUzsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworLyohIEBicmllZiBQb2ludGVyIHRvIG1hc3RlciBJUlEgaGFuZGxlciBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBpMmNfaXNyX3Qgc19pMmNNYXN0ZXJJc3I7CisKKy8qISBAYnJpZWYgUG9pbnRlciB0byBzbGF2ZSBJUlEgaGFuZGxlciBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBpMmNfaXNyX3Qgc19pMmNTbGF2ZUlzcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit1aW50MzJfdCBJMkNfR2V0SW5zdGFuY2UoSTJDX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgaW5zdGFuY2U7CisKKyAgICAvKiBGaW5kIHRoZSBpbnN0YW5jZSBpbmRleCBmcm9tIGJhc2UgYWRkcmVzcyBtYXBwaW5ncy4gKi8KKyAgICBmb3IgKGluc3RhbmNlID0gMDsgaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfaTJjQmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfaTJjQmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2kyY0Jhc2VzKSk7CisKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3N0YXRpYyB2b2lkIEkyQ19TZXRIb2xkVGltZShJMkNfVHlwZSAqYmFzZSwgdWludDMyX3Qgc2NsU3RvcEhvbGRUaW1lX25zLCB1aW50MzJfdCBzb3VyY2VDbG9ja19IeikKK3sKKyAgICB1aW50MzJfdCBtdWx0aXBsaWVyOworICAgIHVpbnQzMl90IGNvbXB1dGVkU2NsSG9sZFRpbWU7CisgICAgdWludDMyX3QgYWJzRXJyb3I7CisgICAgdWludDMyX3QgYmVzdEVycm9yID0gVUlOVDMyX01BWDsKKyAgICB1aW50MzJfdCBiZXN0TXVsdCA9IDB1OworICAgIHVpbnQzMl90IGJlc3RJY3IgPSAwdTsKKyAgICB1aW50OF90IG11bHQ7CisgICAgdWludDhfdCBpOworCisgICAgLyogU2VhcmNoIGZvciB0aGUgc2V0dGluZ3Mgd2l0aCB0aGUgbG93ZXN0IGVycm9yLiBNdWx0IGlzIHRoZSBNVUxUIGZpZWxkIG9mIHRoZSBJMkNfRiByZWdpc3RlciwKKyAgICAgKiBhbmQgcmFuZ2VzIGZyb20gMC0yLiBJdCBzZWxlY3RzIHRoZSBtdWx0aXBsaWVyIGZhY3RvciBmb3IgdGhlIGRpdmlkZXIuICovCisgICAgLyogU0RBIGhvbGQgdGltZSA9IGJ1cyBwZXJpb2QgKHMpICogbXVsICogU0RBIGhvbGQgdmFsdWUuICovCisgICAgLyogU0NMIHN0YXJ0IGhvbGQgdGltZSA9IGJ1cyBwZXJpb2QgKHMpICogbXVsICogU0NMIHN0YXJ0IGhvbGQgdmFsdWUuICovCisgICAgLyogU0NMIHN0b3AgaG9sZCB0aW1lID0gYnVzIHBlcmlvZCAocykgKiBtdWwgKiBTQ0wgc3RvcCBob2xkIHZhbHVlLiAqLworCisgICAgZm9yIChtdWx0ID0gMHU7IChtdWx0IDw9IDJ1KSAmJiAoYmVzdEVycm9yICE9IDApOyArK211bHQpCisgICAgeworICAgICAgICBtdWx0aXBsaWVyID0gMXUgPDwgbXVsdDsKKworICAgICAgICAvKiBTY2FuIHRhYmxlIHRvIGZpbmQgYmVzdCBtYXRjaC4gKi8KKyAgICAgICAgZm9yIChpID0gMHU7IGkgPCBzaXplb2Yoc19pMmNEaXZpZGVyVGFibGUpIC8gc2l6ZW9mKHNfaTJjRGl2aWRlclRhYmxlWzBdKTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBBc3N1bWUgU0NMIGhvbGQoc3RvcCkgdmFsdWUgPSBzX2kyY0RpdmlkZXJUYWJsZVtpXS8yLiAqLworICAgICAgICAgICAgY29tcHV0ZWRTY2xIb2xkVGltZSA9ICgobXVsdGlwbGllciAqIHNfaTJjRGl2aWRlclRhYmxlW2ldKSAqIDUwMDAwMDAwMFUpIC8gc291cmNlQ2xvY2tfSHo7CisgICAgICAgICAgICBhYnNFcnJvciA9IHNjbFN0b3BIb2xkVGltZV9ucyA+IGNvbXB1dGVkU2NsSG9sZFRpbWUgPyAoc2NsU3RvcEhvbGRUaW1lX25zIC0gY29tcHV0ZWRTY2xIb2xkVGltZSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXB1dGVkU2NsSG9sZFRpbWUgLSBzY2xTdG9wSG9sZFRpbWVfbnMpOworCisgICAgICAgICAgICBpZiAoYWJzRXJyb3IgPCBiZXN0RXJyb3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmVzdE11bHQgPSBtdWx0OworICAgICAgICAgICAgICAgIGJlc3RJY3IgPSBpOworICAgICAgICAgICAgICAgIGJlc3RFcnJvciA9IGFic0Vycm9yOworCisgICAgICAgICAgICAgICAgLyogSWYgdGhlIGVycm9yIGlzIDAsIHRoZW4gd2UgY2FuIHN0b3Agc2VhcmNoaW5nIGJlY2F1c2Ugd2Ugd29uJ3QgZmluZCBhIGJldHRlciBtYXRjaC4gKi8KKyAgICAgICAgICAgICAgICBpZiAoYWJzRXJyb3IgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFNldCBmcmVxdWVuY3kgcmVnaXN0ZXIgYmFzZWQgb24gYmVzdCBzZXR0aW5ncy4gKi8KKyAgICBiYXNlLT5GID0gSTJDX0ZfTVVMVChiZXN0TXVsdCkgfCBJMkNfRl9JQ1IoYmVzdEljcik7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBJMkNfSW5pdFRyYW5zZmVyU3RhdGVNYWNoaW5lKEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCAqeGZlcikKK3sKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgaTJjX2RpcmVjdGlvbl90IGRpcmVjdGlvbiA9IHhmZXItPmRpcmVjdGlvbjsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIGhhbmRsZSB0cmFuc2ZlciBpbmZvcm1hdGlvbi4gKi8KKyAgICBoYW5kbGUtPnRyYW5zZmVyID0gKnhmZXI7CisKKyAgICAvKiBTYXZlIHRvdGFsIHRyYW5zZmVyIHNpemUuICovCisgICAgaGFuZGxlLT50cmFuc2ZlclNpemUgPSB4ZmVyLT5kYXRhU2l6ZTsKKworICAgIC8qIEluaXRpYWwgdHJhbnNmZXIgc3RhdGUuICovCisgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuc3ViYWRkcmVzc1NpemUgPiAwKQorICAgIHsKKyAgICAgICAgaWYgKHhmZXItPmRpcmVjdGlvbiA9PSBrSTJDX1JlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9IGtJMkNfV3JpdGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBoYW5kbGUtPnN0YXRlID0ga0NoZWNrQWRkcmVzc1N0YXRlOworCisgICAgLyogQ2xlYXIgYWxsIHN0YXR1cyBiZWZvcmUgdHJhbnNmZXIuICovCisgICAgSTJDX01hc3RlckNsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0NsZWFyRmxhZ3MpOworCisgICAgLyogSWYgcmVwZWF0ZWQgc3RhcnQgaXMgcmVxdWVzdGVkLCBzZW5kIHJlcGVhdGVkIHN0YXJ0LiAqLworICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmZsYWdzICYga0kyQ19UcmFuc2ZlclJlcGVhdGVkU3RhcnRGbGFnKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclJlcGVhdGVkU3RhcnQoYmFzZSwgaGFuZGxlLT50cmFuc2Zlci5zbGF2ZUFkZHJlc3MsIGRpcmVjdGlvbik7CisgICAgfQorICAgIGVsc2UgLyogRm9yIG5vcm1hbCB0cmFuc2Zlciwgc2VuZCBzdGFydC4gKi8KKyAgICB7CisgICAgICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJTdGFydChiYXNlLCBoYW5kbGUtPnRyYW5zZmVyLnNsYXZlQWRkcmVzcywgZGlyZWN0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RhdHVzX3QgSTJDX0NoZWNrQW5kQ2xlYXJFcnJvcihJMkNfVHlwZSAqYmFzZSwgdWludDMyX3Qgc3RhdHVzKQoreworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgIC8qIENoZWNrIGFyYml0cmF0aW9uIGxvc3QuICovCisgICAgaWYgKHN0YXR1cyAmIGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZykKKyAgICB7CisgICAgICAgIC8qIENsZWFyIGFyYml0cmF0aW9uIGxvc3QgZmxhZy4gKi8KKyAgICAgICAgYmFzZS0+UyA9IGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZzsKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfQXJiaXRyYXRpb25Mb3N0OworICAgIH0KKyAgICAvKiBDaGVjayBOQUsgKi8KKyAgICBlbHNlIGlmIChzdGF0dXMgJiBrSTJDX1JlY2VpdmVOYWtGbGFnKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfTmFrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJSdW5TdGF0ZU1hY2hpbmUoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgYm9vbCAqaXNEb25lKQoreworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB1aW50MzJfdCBzdGF0dXNGbGFncyA9IGJhc2UtPlM7CisgICAgKmlzRG9uZSA9IGZhbHNlOworICAgIHZvbGF0aWxlIHVpbnQ4X3QgZHVtbXkgPSAwOworICAgIGJvb2wgaWdub3JlTmFrID0gKChoYW5kbGUtPnN0YXRlID09IGtTZW5kRGF0YVN0YXRlKSAmJiAoaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSA9PSAwVSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAoKGhhbmRsZS0+c3RhdGUgPT0ga1JlY2VpdmVEYXRhU3RhdGUpICYmIChoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplID09IDFVKSk7CisKKyAgICAvKiBBZGQgdGhpcyB0byBhdm9pZCBidWlsZCB3YXJuaW5nLiAqLworICAgIGR1bW15Kys7CisKKyAgICAvKiBDaGVjayAmIGNsZWFyIGVycm9yIGZsYWdzLiAqLworICAgIHJlc3VsdCA9IEkyQ19DaGVja0FuZENsZWFyRXJyb3IoYmFzZSwgc3RhdHVzRmxhZ3MpOworCisgICAgLyogSWdub3JlIE5hayB3aGVuIGl0J3MgYXBwZWFyZWQgZm9yIGxhc3QgYnl0ZS4gKi8KKyAgICBpZiAoKHJlc3VsdCA9PSBrU3RhdHVzX0kyQ19OYWspICYmIGlnbm9yZU5haykKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB9CisKKyAgICAvKiBIYW5kbGUgQ2hlY2sgYWRkcmVzcyBzdGF0ZSB0byBjaGVjayB0aGUgc2xhdmUgYWRkcmVzcyBpcyBBY2tlZCBpbiBzbGF2ZQorICAgICAgIHByb2JlIGFwcGxpY2F0aW9uLiAqLworICAgIGlmIChoYW5kbGUtPnN0YXRlID09IGtDaGVja0FkZHJlc3NTdGF0ZSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0dXNGbGFncyAmIGtJMkNfUmVjZWl2ZU5ha0ZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfSTJDX0FkZHJfTmFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuc3ViYWRkcmVzc1NpemUgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrU2VuZENvbW1hbmRTdGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kaXJlY3Rpb24gPT0ga0kyQ19Xcml0ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIE5leHQgc3RhdGUsIHNlbmQgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtTZW5kRGF0YVN0YXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBOZXh0IHN0YXRlLCByZWNlaXZlIGRhdGEgYmVnaW4uICovCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrUmVjZWl2ZURhdGFCZWdpblN0YXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZXN1bHQpCisgICAgeworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIFJ1biBzdGF0ZSBtYWNoaW5lLiAqLworICAgIHN3aXRjaCAoaGFuZGxlLT5zdGF0ZSkKKyAgICB7CisgICAgICAgIC8qIFNlbmQgSTJDIGNvbW1hbmQuICovCisgICAgICAgIGNhc2Uga1NlbmRDb21tYW5kU3RhdGU6CisgICAgICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5zdWJhZGRyZXNzU2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPnRyYW5zZmVyLnN1YmFkZHJlc3NTaXplLS07CisgICAgICAgICAgICAgICAgYmFzZS0+RCA9ICgoaGFuZGxlLT50cmFuc2Zlci5zdWJhZGRyZXNzKSA+PiAoOCAqIGhhbmRsZS0+dHJhbnNmZXIuc3ViYWRkcmVzc1NpemUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kaXJlY3Rpb24gPT0ga0kyQ19Xcml0ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIE5leHQgc3RhdGUsIHNlbmQgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtTZW5kRGF0YVN0YXRlOworCisgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgZmlyc3QgYnl0ZSBvZiBkYXRhLiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSA+IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UtPkQgPSAqaGFuZGxlLT50cmFuc2Zlci5kYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT50cmFuc2Zlci5kYXRhKys7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplLS07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogU2VuZCByZXBlYXRlZCBzdGFydCBhbmQgc2xhdmUgYWRkcmVzcy4gKi8KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclJlcGVhdGVkU3RhcnQoYmFzZSwgaGFuZGxlLT50cmFuc2Zlci5zbGF2ZUFkZHJlc3MsIGtJMkNfUmVhZCk7CisKKyAgICAgICAgICAgICAgICAgICAgLyogTmV4dCBzdGF0ZSwgcmVjZWl2ZSBkYXRhIGJlZ2luLiAqLworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnN0YXRlID0ga1JlY2VpdmVEYXRhQmVnaW5TdGF0ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBTZW5kIEkyQyBkYXRhLiAqLworICAgICAgICBjYXNlIGtTZW5kRGF0YVN0YXRlOgorICAgICAgICAgICAgLyogU2VuZCBvbmUgYnl0ZSBvZiBkYXRhLiAqLworICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJhc2UtPkQgPSAqaGFuZGxlLT50cmFuc2Zlci5kYXRhOworICAgICAgICAgICAgICAgIGhhbmRsZS0+dHJhbnNmZXIuZGF0YSsrOworICAgICAgICAgICAgICAgIGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqaXNEb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIFN0YXJ0IEkyQyBkYXRhIHJlY2VpdmUuICovCisgICAgICAgIGNhc2Uga1JlY2VpdmVEYXRhQmVnaW5TdGF0ZToKKyAgICAgICAgICAgIGJhc2UtPkMxICY9IH4oSTJDX0MxX1RYX01BU0sgfCBJMkNfQzFfVFhBS19NQVNLKTsKKworICAgICAgICAgICAgLyogU2VuZCBuYWsgYXQgdGhlIGxhc3QgcmVjZWl2ZSBieXRlLiAqLworICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXNlLT5DMSB8PSBJMkNfQzFfVFhBS19NQVNLOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBSZWFkIGR1bW15IHRvIHJlbGVhc2UgdGhlIGJ1cy4gKi8KKyAgICAgICAgICAgIGR1bW15ID0gYmFzZS0+RDsKKworICAgICAgICAgICAgLyogTmV4dCBzdGF0ZSwgcmVjZWl2ZSBkYXRhLiAqLworICAgICAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtSZWNlaXZlRGF0YVN0YXRlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogUmVjZWl2ZSBJMkMgZGF0YS4gKi8KKyAgICAgICAgY2FzZSBrUmVjZWl2ZURhdGFTdGF0ZToKKyAgICAgICAgICAgIC8qIFJlY2VpdmUgb25lIGJ5dGUgb2YgZGF0YS4gKi8KKyAgICAgICAgICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplLS0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICppc0RvbmUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgc3RvcCBpZiBrSTJDX1RyYW5zZmVyTm9TdG9wIGlzIG5vdCBhc3NlcnRlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoaGFuZGxlLT50cmFuc2Zlci5mbGFncyAmIGtJMkNfVHJhbnNmZXJOb1N0b3BGbGFnKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclN0b3AoYmFzZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLT5DMSB8PSBJMkNfQzFfVFhfTUFTSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIFNlbmQgTkFLIGF0IHRoZSBsYXN0IHJlY2VpdmUgYnl0ZS4gKi8KKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+QzEgfD0gSTJDX0MxX1RYQUtfTUFTSzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGJ5dGUgaW50byB0aGUgdHJhbnNmZXIgYnVmZmVyLiAqLworICAgICAgICAgICAgICAgICpoYW5kbGUtPnRyYW5zZmVyLmRhdGEgPSBiYXNlLT5EOworICAgICAgICAgICAgICAgIGhhbmRsZS0+dHJhbnNmZXIuZGF0YSsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIEkyQ19UcmFuc2ZlckNvbW1vbklSUUhhbmRsZXIoSTJDX1R5cGUgKmJhc2UsIHZvaWQgKmhhbmRsZSkKK3sKKyAgICAvKiBDaGVjayBpZiBtYXN0ZXIgaW50ZXJydXB0LiAqLworICAgIGlmICgoYmFzZS0+UyAmIGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZykgfHwgKGJhc2UtPkMxICYgSTJDX0MxX01TVF9NQVNLKSkKKyAgICB7CisgICAgICAgIHNfaTJjTWFzdGVySXNyKGJhc2UsIGhhbmRsZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNfaTJjU2xhdmVJc3IoYmFzZSwgaGFuZGxlKTsKKyAgICB9CisgICAgX19EU0IoKTsKK30KKwordm9pZCBJMkNfTWFzdGVySW5pdChJMkNfVHlwZSAqYmFzZSwgY29uc3QgaTJjX21hc3Rlcl9jb25maWdfdCAqbWFzdGVyQ29uZmlnLCB1aW50MzJfdCBzcmNDbG9ja19IeikKK3sKKyAgICBhc3NlcnQobWFzdGVyQ29uZmlnICYmIHNyY0Nsb2NrX0h6KTsKKworICAgIC8qIFRlbXBvcmFyeSByZWdpc3RlciBmb3IgZmlsdGVyIHJlYWQuICovCisgICAgdWludDhfdCBmbHRSZWc7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFCisgICAgdWludDhfdCBzMlJlZzsKKyNlbmRpZgorI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBFbmFibGUgSTJDIGNsb2NrLiAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfaTJjQ2xvY2tzW0kyQ19HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisgICAgLyogUmVzZXQgdGhlIG1vZHVsZS4gKi8KKyAgICBiYXNlLT5BMSA9IDA7CisgICAgYmFzZS0+RiA9IDA7CisgICAgYmFzZS0+QzEgPSAwOworICAgIGJhc2UtPlMgPSAweEZGVTsKKyAgICBiYXNlLT5DMiA9IDA7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUCisgICAgYmFzZS0+RkxUID0gMHg1MFU7CisjZWxpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QKKyAgICBiYXNlLT5GTFQgPSAweDQwVTsKKyNlbmRpZgorICAgIGJhc2UtPlJBID0gMDsKKworICAgIC8qIERpc2FibGUgSTJDIHByaW9yIHRvIGNvbmZpZ3VyaW5nIGl0LiAqLworICAgIGJhc2UtPkMxICY9IH4oSTJDX0MxX0lJQ0VOX01BU0spOworCisgICAgLyogQ2xlYXIgYWxsIGZsYWdzLiAqLworICAgIEkyQ19NYXN0ZXJDbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtDbGVhckZsYWdzKTsKKworICAgIC8qIENvbmZpZ3VyZSBiYXVkIHJhdGUuICovCisgICAgSTJDX01hc3RlclNldEJhdWRSYXRlKGJhc2UsIG1hc3RlckNvbmZpZy0+YmF1ZFJhdGVfQnBzLCBzcmNDbG9ja19Ieik7CisKKyAgICAvKiBSZWFkIG91dCB0aGUgRkxUIHJlZ2lzdGVyLiAqLworICAgIGZsdFJlZyA9IGJhc2UtPkZMVDsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0hPTERfT0ZGKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfSE9MRF9PRkYKKyAgICAvKiBDb25maWd1cmUgdGhlIHN0b3AgLyBob2xkIGVuYWJsZS4gKi8KKyAgICBmbHRSZWcgJj0gfihJMkNfRkxUX1NIRU5fTUFTSyk7CisgICAgZmx0UmVnIHw9IEkyQ19GTFRfU0hFTihtYXN0ZXJDb25maWctPmVuYWJsZVN0b3BIb2xkKTsKKyNlbmRpZgorCisgICAgLyogQ29uZmlndXJlIHRoZSBnbGl0Y2ggZmlsdGVyIHZhbHVlLiAqLworICAgIGZsdFJlZyAmPSB+KEkyQ19GTFRfRkxUX01BU0spOworICAgIGZsdFJlZyB8PSBJMkNfRkxUX0ZMVChtYXN0ZXJDb25maWctPmdsaXRjaEZpbHRlcldpZHRoKTsKKworICAgIC8qIFdyaXRlIHRoZSByZWdpc3RlciB2YWx1ZSBiYWNrIHRvIHRoZSBmaWx0ZXIgcmVnaXN0ZXIuICovCisgICAgYmFzZS0+RkxUID0gZmx0UmVnOworCisvKiBFbmFibGUvRGlzYWJsZSBkb3VibGUgYnVmZmVyaW5nLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSX0VOQUJMRSkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSX0VOQUJMRQorICAgIHMyUmVnID0gYmFzZS0+UzIgJiAofkkyQ19TMl9ERkVOX01BU0spOworICAgIGJhc2UtPlMyID0gczJSZWcgfCBJMkNfUzJfREZFTihtYXN0ZXJDb25maWctPmVuYWJsZURvdWJsZUJ1ZmZlcmluZyk7CisjZW5kaWYKKworICAgIC8qIEVuYWJsZSB0aGUgSTJDIHBlcmlwaGVyYWwgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24uICovCisgICAgYmFzZS0+QzEgPSBJMkNfQzFfSUlDRU4obWFzdGVyQ29uZmlnLT5lbmFibGVNYXN0ZXIpOworfQorCit2b2lkIEkyQ19NYXN0ZXJEZWluaXQoSTJDX1R5cGUgKmJhc2UpCit7CisgICAgLyogRGlzYWJsZSBJMkMgbW9kdWxlLiAqLworICAgIEkyQ19FbmFibGUoYmFzZSwgZmFsc2UpOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIERpc2FibGUgSTJDIGNsb2NrLiAqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX2kyY0Nsb2Nrc1tJMkNfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKwordm9pZCBJMkNfTWFzdGVyR2V0RGVmYXVsdENvbmZpZyhpMmNfbWFzdGVyX2NvbmZpZ190ICptYXN0ZXJDb25maWcpCit7CisgICAgYXNzZXJ0KG1hc3RlckNvbmZpZyk7CisKKyAgICAvKiBEZWZhdWx0IGJhdWQgcmF0ZSBhdCAxMDBrYnBzLiAqLworICAgIG1hc3RlckNvbmZpZy0+YmF1ZFJhdGVfQnBzID0gMTAwMDAwVTsKKworLyogRGVmYXVsdCBzdG9wIGhvbGQgZW5hYmxlIGlzIGRpc2FibGVkLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0hPTERfT0ZGKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfSE9MRF9PRkYKKyAgICBtYXN0ZXJDb25maWctPmVuYWJsZVN0b3BIb2xkID0gZmFsc2U7CisjZW5kaWYKKworICAgIC8qIERlZmF1bHQgZ2xpdGNoIGZpbHRlciB2YWx1ZSBpcyBubyBmaWx0ZXIuICovCisgICAgbWFzdGVyQ29uZmlnLT5nbGl0Y2hGaWx0ZXJXaWR0aCA9IDBVOworCisvKiBEZWZhdWx0IGVuYWJsZSBkb3VibGUgYnVmZmVyaW5nLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSX0VOQUJMRSkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSX0VOQUJMRQorICAgIG1hc3RlckNvbmZpZy0+ZW5hYmxlRG91YmxlQnVmZmVyaW5nID0gdHJ1ZTsKKyNlbmRpZgorCisgICAgLyogRW5hYmxlIHRoZSBJMkMgcGVyaXBoZXJhbC4gKi8KKyAgICBtYXN0ZXJDb25maWctPmVuYWJsZU1hc3RlciA9IHRydWU7Cit9CisKK3ZvaWQgSTJDX0VuYWJsZUludGVycnVwdHMoSTJDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisjaWZkZWYgSTJDX0hBU19TVE9QX0RFVEVDVAorICAgIHVpbnQ4X3QgZmx0UmVnOworI2VuZGlmCisKKyAgICBpZiAobWFzayAmIGtJMkNfR2xvYmFsSW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+QzEgfD0gSTJDX0MxX0lJQ0lFX01BU0s7CisgICAgfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfREVURUNUCisgICAgaWYgKG1hc2sgJiBrSTJDX1N0b3BEZXRlY3RJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICBmbHRSZWcgPSBiYXNlLT5GTFQ7CisKKyAgICAgICAgLyogS2VlcCBTVE9QRiBmbGFnLiAqLworICAgICAgICBmbHRSZWcgJj0gfkkyQ19GTFRfU1RPUEZfTUFTSzsKKworICAgICAgICAvKiBTdG9wIGRldGVjdCBlbmFibGUuICovCisgICAgICAgIGZsdFJlZyB8PSBJMkNfRkxUX1NUT1BJRV9NQVNLOworICAgICAgICBiYXNlLT5GTFQgPSBmbHRSZWc7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVAorICAgIGlmIChtYXNrICYga0kyQ19TdGFydFN0b3BEZXRlY3RJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICBmbHRSZWcgPSBiYXNlLT5GTFQ7CisKKyAgICAgICAgLyogS2VlcCBTVEFSVEYgYW5kIFNUT1BGIGZsYWdzLiAqLworICAgICAgICBmbHRSZWcgJj0gfihJMkNfRkxUX1NUT1BGX01BU0sgfCBJMkNfRkxUX1NUQVJURl9NQVNLKTsKKworICAgICAgICAvKiBTdGFydCBhbmQgc3RvcCBkZXRlY3QgZW5hYmxlLiAqLworICAgICAgICBmbHRSZWcgfD0gSTJDX0ZMVF9TU0lFX01BU0s7CisgICAgICAgIGJhc2UtPkZMVCA9IGZsdFJlZzsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCAqLworfQorCit2b2lkIEkyQ19EaXNhYmxlSW50ZXJydXB0cyhJMkNfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBpZiAobWFzayAmIGtJMkNfR2xvYmFsSW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+QzEgJj0gfkkyQ19DMV9JSUNJRV9NQVNLOworICAgIH0KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVAorICAgIGlmIChtYXNrICYga0kyQ19TdG9wRGV0ZWN0SW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+RkxUICY9IH4oSTJDX0ZMVF9TVE9QSUVfTUFTSyB8IEkyQ19GTFRfU1RPUEZfTUFTSyk7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVAorICAgIGlmIChtYXNrICYga0kyQ19TdGFydFN0b3BEZXRlY3RJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5GTFQgJj0gfihJMkNfRkxUX1NTSUVfTUFTSyB8IEkyQ19GTFRfU1RPUEZfTUFTSyB8IEkyQ19GTFRfU1RBUlRGX01BU0spOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUICovCit9CisKK3ZvaWQgSTJDX01hc3RlclNldEJhdWRSYXRlKEkyQ19UeXBlICpiYXNlLCB1aW50MzJfdCBiYXVkUmF0ZV9CcHMsIHVpbnQzMl90IHNyY0Nsb2NrX0h6KQoreworICAgIHVpbnQzMl90IG11bHRpcGxpZXI7CisgICAgdWludDMyX3QgY29tcHV0ZWRSYXRlOworICAgIHVpbnQzMl90IGFic0Vycm9yOworICAgIHVpbnQzMl90IGJlc3RFcnJvciA9IFVJTlQzMl9NQVg7CisgICAgdWludDMyX3QgYmVzdE11bHQgPSAwdTsKKyAgICB1aW50MzJfdCBiZXN0SWNyID0gMHU7CisgICAgdWludDhfdCBtdWx0OworICAgIHVpbnQ4X3QgaTsKKworICAgIC8qIFNlYXJjaCBmb3IgdGhlIHNldHRpbmdzIHdpdGggdGhlIGxvd2VzdCBlcnJvci4gTXVsdCBpcyB0aGUgTVVMVCBmaWVsZCBvZiB0aGUgSTJDX0YgcmVnaXN0ZXIsCisgICAgICogYW5kIHJhbmdlcyBmcm9tIDAtMi4gSXQgc2VsZWN0cyB0aGUgbXVsdGlwbGllciBmYWN0b3IgZm9yIHRoZSBkaXZpZGVyLiAqLworICAgIGZvciAobXVsdCA9IDB1OyAobXVsdCA8PSAydSkgJiYgKGJlc3RFcnJvciAhPSAwKTsgKyttdWx0KQorICAgIHsKKyAgICAgICAgbXVsdGlwbGllciA9IDF1IDw8IG11bHQ7CisKKyAgICAgICAgLyogU2NhbiB0YWJsZSB0byBmaW5kIGJlc3QgbWF0Y2guICovCisgICAgICAgIGZvciAoaSA9IDB1OyBpIDwgc2l6ZW9mKHNfaTJjRGl2aWRlclRhYmxlKSAvIHNpemVvZih1aW50MTZfdCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29tcHV0ZWRSYXRlID0gc3JjQ2xvY2tfSHogLyAobXVsdGlwbGllciAqIHNfaTJjRGl2aWRlclRhYmxlW2ldKTsKKyAgICAgICAgICAgIGFic0Vycm9yID0gYmF1ZFJhdGVfQnBzID4gY29tcHV0ZWRSYXRlID8gKGJhdWRSYXRlX0JwcyAtIGNvbXB1dGVkUmF0ZSkgOiAoY29tcHV0ZWRSYXRlIC0gYmF1ZFJhdGVfQnBzKTsKKworICAgICAgICAgICAgaWYgKGFic0Vycm9yIDwgYmVzdEVycm9yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJlc3RNdWx0ID0gbXVsdDsKKyAgICAgICAgICAgICAgICBiZXN0SWNyID0gaTsKKyAgICAgICAgICAgICAgICBiZXN0RXJyb3IgPSBhYnNFcnJvcjsKKworICAgICAgICAgICAgICAgIC8qIElmIHRoZSBlcnJvciBpcyAwLCB0aGVuIHdlIGNhbiBzdG9wIHNlYXJjaGluZyBiZWNhdXNlIHdlIHdvbid0IGZpbmQgYSBiZXR0ZXIgbWF0Y2guICovCisgICAgICAgICAgICAgICAgaWYgKGFic0Vycm9yID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTZXQgZnJlcXVlbmN5IHJlZ2lzdGVyIGJhc2VkIG9uIGJlc3Qgc2V0dGluZ3MuICovCisgICAgYmFzZS0+RiA9IEkyQ19GX01VTFQoYmVzdE11bHQpIHwgSTJDX0ZfSUNSKGJlc3RJY3IpOworfQorCitzdGF0dXNfdCBJMkNfTWFzdGVyU3RhcnQoSTJDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgYWRkcmVzcywgaTJjX2RpcmVjdGlvbl90IGRpcmVjdGlvbikKK3sKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgdWludDMyX3Qgc3RhdHVzRmxhZ3MgPSBJMkNfTWFzdGVyR2V0U3RhdHVzRmxhZ3MoYmFzZSk7CisKKyAgICAvKiBSZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGJ1cyBpcyBhbHJlYWR5IGluIHVzZS4gKi8KKyAgICBpZiAoc3RhdHVzRmxhZ3MgJiBrSTJDX0J1c0J1c3lGbGFnKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfQnVzeTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogU2VuZCB0aGUgU1RBUlQgc2lnbmFsLiAqLworICAgICAgICBiYXNlLT5DMSB8PSBJMkNfQzFfTVNUX01BU0sgfCBJMkNfQzFfVFhfTUFTSzsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSSU5HKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJJTkcKKyAgICAgICAgd2hpbGUgKCEoYmFzZS0+UzIgJiBJMkNfUzJfRU1QVFlfTUFTSykpCisgICAgICAgIHsKKyAgICAgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUklORyAqLworCisgICAgICAgIGJhc2UtPkQgPSAoKCh1aW50MzJfdClhZGRyZXNzKSA8PCAxVSB8ICgoZGlyZWN0aW9uID09IGtJMkNfUmVhZCkgPyAxVSA6IDBVKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdHVzX3QgSTJDX01hc3RlclJlcGVhdGVkU3RhcnQoSTJDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgYWRkcmVzcywgaTJjX2RpcmVjdGlvbl90IGRpcmVjdGlvbikKK3sKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgdWludDhfdCBzYXZlZE11bHQ7CisgICAgdWludDMyX3Qgc3RhdHVzRmxhZ3MgPSBJMkNfTWFzdGVyR2V0U3RhdHVzRmxhZ3MoYmFzZSk7CisgICAgdWludDhfdCB0aW1lRGVsYXkgPSA2OworCisgICAgLyogUmV0dXJuIGFuIGVycm9yIGlmIHRoZSBidXMgaXMgYWxyZWFkeSBpbiB1c2UsIGJ1dCBub3QgYnkgdXMuICovCisgICAgaWYgKChzdGF0dXNGbGFncyAmIGtJMkNfQnVzQnVzeUZsYWcpICYmICgoYmFzZS0+QzEgJiBJMkNfQzFfTVNUX01BU0spID09IDApKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfQnVzeTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2F2ZWRNdWx0ID0gYmFzZS0+RjsKKyAgICAgICAgYmFzZS0+RiA9IHNhdmVkTXVsdCAmICh+STJDX0ZfTVVMVF9NQVNLKTsKKworICAgICAgICAvKiBXZSBhcmUgYWxyZWFkeSBpbiBhIHRyYW5zZmVyLCBzbyBzZW5kIGEgcmVwZWF0ZWQgc3RhcnQuICovCisgICAgICAgIGJhc2UtPkMxIHw9IEkyQ19DMV9SU1RBX01BU0sgfCBJMkNfQzFfVFhfTUFTSzsKKworICAgICAgICAvKiBSZXN0b3JlIHRoZSBtdWx0aXBsaWVyIGZhY3Rvci4gKi8KKyAgICAgICAgYmFzZS0+RiA9IHNhdmVkTXVsdDsKKworICAgICAgICAvKiBBZGQgc29tZSBkZWxheSB0byB3YWl0IHRoZSBSZS1TdGFydCBzaWduYWwuICovCisgICAgICAgIHdoaWxlICh0aW1lRGVsYXktLSkKKyAgICAgICAgeworICAgICAgICAgICAgX19OT1AoKTsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJJTkcpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUklORworICAgICAgICB3aGlsZSAoIShiYXNlLT5TMiAmIEkyQ19TMl9FTVBUWV9NQVNLKSkKKyAgICAgICAgeworICAgICAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSSU5HICovCisKKyAgICAgICAgYmFzZS0+RCA9ICgoKHVpbnQzMl90KWFkZHJlc3MpIDw8IDFVIHwgKChkaXJlY3Rpb24gPT0ga0kyQ19SZWFkKSA/IDFVIDogMFUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0dXNfdCBJMkNfTWFzdGVyU3RvcChJMkNfVHlwZSAqYmFzZSkKK3sKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgdWludDE2X3QgdGltZW91dCA9IFVJTlQxNl9NQVg7CisKKyAgICAvKiBJc3N1ZSB0aGUgU1RPUCBjb21tYW5kIG9uIHRoZSBidXMuICovCisgICAgYmFzZS0+QzEgJj0gfihJMkNfQzFfTVNUX01BU0sgfCBJMkNfQzFfVFhfTUFTSyB8IEkyQ19DMV9UWEFLX01BU0spOworCisgICAgLyogV2FpdCB1bnRpbCBkYXRhIHRyYW5zZmVyIGNvbXBsZXRlLiAqLworICAgIHdoaWxlICgoYmFzZS0+UyAmIGtJMkNfQnVzQnVzeUZsYWcpICYmICgtLXRpbWVvdXQpKQorICAgIHsKKyAgICB9CisKKyAgICBpZiAodGltZW91dCA9PSAwKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfVGltZW91dDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit1aW50MzJfdCBJMkNfTWFzdGVyR2V0U3RhdHVzRmxhZ3MoSTJDX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3Qgc3RhdHVzRmxhZ3MgPSBiYXNlLT5TOworCisjaWZkZWYgSTJDX0hBU19TVE9QX0RFVEVDVAorICAgIC8qIExvb2sgdXAgdGhlIFNUT1BGIGJpdCBmcm9tIHRoZSBmaWx0ZXIgcmVnaXN0ZXIuICovCisgICAgaWYgKGJhc2UtPkZMVCAmIEkyQ19GTFRfU1RPUEZfTUFTSykKKyAgICB7CisgICAgICAgIHN0YXR1c0ZsYWdzIHw9IGtJMkNfU3RvcERldGVjdEZsYWc7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QKKyAgICAvKiBMb29rIHVwIHRoZSBTVEFSVEYgYml0IGZyb20gdGhlIGZpbHRlciByZWdpc3Rlci4gKi8KKyAgICBpZiAoYmFzZS0+RkxUICYgSTJDX0ZMVF9TVEFSVEZfTUFTSykKKyAgICB7CisgICAgICAgIHN0YXR1c0ZsYWdzIHw9IGtJMkNfU3RhcnREZXRlY3RGbGFnOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUICovCisKKyAgICByZXR1cm4gc3RhdHVzRmxhZ3M7Cit9CisKK3N0YXR1c190IEkyQ19NYXN0ZXJXcml0ZUJsb2NraW5nKEkyQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICp0eEJ1ZmYsIHNpemVfdCB0eFNpemUsIHVpbnQzMl90IGZsYWdzKQoreworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB1aW50OF90IHN0YXR1c0ZsYWdzID0gMDsKKworICAgIC8qIFdhaXQgdW50aWwgdGhlIGRhdGEgcmVnaXN0ZXIgaXMgcmVhZHkgZm9yIHRyYW5zbWl0LiAqLworICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX1RyYW5zZmVyQ29tcGxldGVGbGFnKSkKKyAgICB7CisgICAgfQorCisgICAgLyogQ2xlYXIgdGhlIElJQ0lGIGZsYWcuICovCisgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAvKiBTZXR1cCB0aGUgSTJDIHBlcmlwaGVyYWwgdG8gdHJhbnNtaXQgZGF0YS4gKi8KKyAgICBiYXNlLT5DMSB8PSBJMkNfQzFfVFhfTUFTSzsKKworICAgIHdoaWxlICh0eFNpemUtLSkKKyAgICB7CisgICAgICAgIC8qIFNlbmQgYSBieXRlIG9mIGRhdGEuICovCisgICAgICAgIGJhc2UtPkQgPSAqdHhCdWZmKys7CisKKyAgICAgICAgLyogV2FpdCB1bnRpbCBkYXRhIHRyYW5zZmVyIGNvbXBsZXRlLiAqLworICAgICAgICB3aGlsZSAoIShiYXNlLT5TICYga0kyQ19JbnRQZW5kaW5nRmxhZykpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXR1c0ZsYWdzID0gYmFzZS0+UzsKKworICAgICAgICAvKiBDbGVhciB0aGUgSUlDSUYgZmxhZy4gKi8KKyAgICAgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgYXJiaXRyYXRpb24gbG9zdCBvciBubyBhY2tub3dsZWRnZW1lbnQgKE5BSyksIHJldHVybiBmYWlsdXJlIHN0YXR1cy4gKi8KKyAgICAgICAgaWYgKHN0YXR1c0ZsYWdzICYga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlLT5TID0ga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnOworICAgICAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfQXJiaXRyYXRpb25Mb3N0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKChzdGF0dXNGbGFncyAmIGtJMkNfUmVjZWl2ZU5ha0ZsYWcpICYmIHR4U2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZS0+UyA9IGtJMkNfUmVjZWl2ZU5ha0ZsYWc7CisgICAgICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19OYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ICE9IGtTdGF0dXNfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgLyogQnJlYWtpbmcgb3V0IG9mIHRoZSBzZW5kIGxvb3AuICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgoKHJlc3VsdCA9PSBrU3RhdHVzX1N1Y2Nlc3MpICYmICghKGZsYWdzICYga0kyQ19UcmFuc2Zlck5vU3RvcEZsYWcpKSkgfHwgKHJlc3VsdCA9PSBrU3RhdHVzX0kyQ19OYWspKQorICAgIHsKKyAgICAgICAgLyogQ2xlYXIgdGhlIElJQ0lGIGZsYWcuICovCisgICAgICAgIGJhc2UtPlMgPSBrSTJDX0ludFBlbmRpbmdGbGFnOworCisgICAgICAgIC8qIFNlbmQgc3RvcC4gKi8KKyAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclN0b3AoYmFzZSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdHVzX3QgSTJDX01hc3RlclJlYWRCbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgdWludDhfdCAqcnhCdWZmLCBzaXplX3QgcnhTaXplLCB1aW50MzJfdCBmbGFncykKK3sKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgdm9sYXRpbGUgdWludDhfdCBkdW1teSA9IDA7CisKKyAgICAvKiBBZGQgdGhpcyB0byBhdm9pZCBidWlsZCB3YXJuaW5nLiAqLworICAgIGR1bW15Kys7CisKKyAgICAvKiBXYWl0IHVudGlsIHRoZSBkYXRhIHJlZ2lzdGVyIGlzIHJlYWR5IGZvciB0cmFuc21pdC4gKi8KKyAgICB3aGlsZSAoIShiYXNlLT5TICYga0kyQ19UcmFuc2ZlckNvbXBsZXRlRmxhZykpCisgICAgeworICAgIH0KKworICAgIC8qIENsZWFyIHRoZSBJSUNJRiBmbGFnLiAqLworICAgIGJhc2UtPlMgPSBrSTJDX0ludFBlbmRpbmdGbGFnOworCisgICAgLyogU2V0dXAgdGhlIEkyQyBwZXJpcGhlcmFsIHRvIHJlY2VpdmUgZGF0YS4gKi8KKyAgICBiYXNlLT5DMSAmPSB+KEkyQ19DMV9UWF9NQVNLIHwgSTJDX0MxX1RYQUtfTUFTSyk7CisKKyAgICAvKiBJZiByeFNpemUgZXF1YWxzIDEsIGNvbmZpZ3VyZSB0byBzZW5kIE5BSy4gKi8KKyAgICBpZiAocnhTaXplID09IDEpCisgICAgeworICAgICAgICAvKiBJc3N1ZSBOQUNLIG9uIHJlYWQuICovCisgICAgICAgIGJhc2UtPkMxIHw9IEkyQ19DMV9UWEFLX01BU0s7CisgICAgfQorCisgICAgLyogRG8gZHVtbXkgcmVhZC4gKi8KKyAgICBkdW1teSA9IGJhc2UtPkQ7CisKKyAgICB3aGlsZSAoKHJ4U2l6ZS0tKSkKKyAgICB7CisgICAgICAgIC8qIFdhaXQgdW50aWwgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZS4gKi8KKyAgICAgICAgd2hpbGUgKCEoYmFzZS0+UyAmIGtJMkNfSW50UGVuZGluZ0ZsYWcpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvKiBDbGVhciB0aGUgSUlDSUYgZmxhZy4gKi8KKyAgICAgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAgICAgLyogU2luZ2xlIGJ5dGUgdXNlIGNhc2UuICovCisgICAgICAgIGlmIChyeFNpemUgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBrSTJDX1RyYW5zZmVyTm9TdG9wRmxhZykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogSXNzdWUgU1RPUCBjb21tYW5kIGJlZm9yZSByZWFkaW5nIGxhc3QgYnl0ZS4gKi8KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBJMkNfTWFzdGVyU3RvcChiYXNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDaGFuZ2UgZGlyZWN0aW9uIHRvIFR4IHRvIGF2b2lkIGV4dHJhIGNsb2Nrcy4gKi8KKyAgICAgICAgICAgICAgICBiYXNlLT5DMSB8PSBJMkNfQzFfVFhfTUFTSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChyeFNpemUgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogSXNzdWUgTkFDSyBvbiByZWFkLiAqLworICAgICAgICAgICAgYmFzZS0+QzEgfD0gSTJDX0MxX1RYQUtfTUFTSzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFJlYWQgZnJvbSB0aGUgZGF0YSByZWdpc3Rlci4gKi8KKyAgICAgICAgKnJ4QnVmZisrID0gYmFzZS0+RDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJCbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp4ZmVyKQoreworICAgIGFzc2VydCh4ZmVyKTsKKworICAgIGkyY19kaXJlY3Rpb25fdCBkaXJlY3Rpb24gPSB4ZmVyLT5kaXJlY3Rpb247CisgICAgc3RhdHVzX3QgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworCisgICAgLyogQ2xlYXIgYWxsIHN0YXR1cyBiZWZvcmUgdHJhbnNmZXIuICovCisgICAgSTJDX01hc3RlckNsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0NsZWFyRmxhZ3MpOworCisgICAgLyogV2FpdCB1bnRpbCByZWFkeSB0byBjb21wbGV0ZS4gKi8KKyAgICB3aGlsZSAoIShiYXNlLT5TICYga0kyQ19UcmFuc2ZlckNvbXBsZXRlRmxhZykpCisgICAgeworICAgIH0KKworICAgIC8qIENoYW5nZSB0byBzZW5kIHdyaXRlIGFkZHJlc3Mgd2hlbiBpdCdzIGEgcmVhZCBvcGVyYXRpb24gd2l0aCBjb21tYW5kLiAqLworICAgIGlmICgoeGZlci0+c3ViYWRkcmVzc1NpemUgPiAwKSAmJiAoeGZlci0+ZGlyZWN0aW9uID09IGtJMkNfUmVhZCkpCisgICAgeworICAgICAgICBkaXJlY3Rpb24gPSBrSTJDX1dyaXRlOworICAgIH0KKworICAgIC8qIElmIHJlcGVhdGVkIHN0YXJ0IGlzIHJlcXVlc3RlZCwgc2VuZCByZXBlYXRlZCBzdGFydC4gKi8KKyAgICBpZiAoeGZlci0+ZmxhZ3MgJiBrSTJDX1RyYW5zZmVyUmVwZWF0ZWRTdGFydEZsYWcpCisgICAgeworICAgICAgICByZXN1bHQgPSBJMkNfTWFzdGVyUmVwZWF0ZWRTdGFydChiYXNlLCB4ZmVyLT5zbGF2ZUFkZHJlc3MsIGRpcmVjdGlvbik7CisgICAgfQorICAgIGVsc2UgLyogRm9yIG5vcm1hbCB0cmFuc2Zlciwgc2VuZCBzdGFydC4gKi8KKyAgICB7CisgICAgICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJTdGFydChiYXNlLCB4ZmVyLT5zbGF2ZUFkZHJlc3MsIGRpcmVjdGlvbik7CisgICAgfQorCisgICAgLyogUmV0dXJuIGlmIGVycm9yLiAqLworICAgIGlmIChyZXN1bHQpCisgICAgeworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0ludFBlbmRpbmdGbGFnKSkKKyAgICB7CisgICAgfQorCisgICAgLyogQ2hlY2sgaWYgdGhlcmUncyB0cmFuc2ZlciBlcnJvci4gKi8KKyAgICByZXN1bHQgPSBJMkNfQ2hlY2tBbmRDbGVhckVycm9yKGJhc2UsIGJhc2UtPlMpOworCisgICAgLyogUmV0dXJuIGlmIGVycm9yLiAqLworICAgIGlmIChyZXN1bHQpCisgICAgeworICAgICAgICBpZiAocmVzdWx0ID09IGtTdGF0dXNfSTJDX05haykKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfQWRkcl9OYWs7CisKKyAgICAgICAgICAgIEkyQ19NYXN0ZXJTdG9wKGJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiBTZW5kIHN1YmFkZHJlc3MuICovCisgICAgaWYgKHhmZXItPnN1YmFkZHJlc3NTaXplKQorICAgIHsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2xlYXIgaW50ZXJydXB0IHBlbmRpbmcgZmxhZy4gKi8KKyAgICAgICAgICAgIGJhc2UtPlMgPSBrSTJDX0ludFBlbmRpbmdGbGFnOworCisgICAgICAgICAgICB4ZmVyLT5zdWJhZGRyZXNzU2l6ZS0tOworICAgICAgICAgICAgYmFzZS0+RCA9ICgoeGZlci0+c3ViYWRkcmVzcykgPj4gKDggKiB4ZmVyLT5zdWJhZGRyZXNzU2l6ZSkpOworCisgICAgICAgICAgICAvKiBXYWl0IHVudGlsIGRhdGEgdHJhbnNmZXIgY29tcGxldGUuICovCisgICAgICAgICAgICB3aGlsZSAoIShiYXNlLT5TICYga0kyQ19JbnRQZW5kaW5nRmxhZykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZXJlJ3MgdHJhbnNmZXIgZXJyb3IuICovCisgICAgICAgICAgICByZXN1bHQgPSBJMkNfQ2hlY2tBbmRDbGVhckVycm9yKGJhc2UsIGJhc2UtPlMpOworCisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0ga1N0YXR1c19JMkNfTmFrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSTJDX01hc3RlclN0b3AoYmFzZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IHdoaWxlICgoeGZlci0+c3ViYWRkcmVzc1NpemUgPiAwKSAmJiAocmVzdWx0ID09IGtTdGF0dXNfU3VjY2VzcykpOworCisgICAgICAgIGlmICh4ZmVyLT5kaXJlY3Rpb24gPT0ga0kyQ19SZWFkKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDbGVhciBwZW5kaW5nIGZsYWcuICovCisgICAgICAgICAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgICAgICAgICAgLyogU2VuZCByZXBlYXRlZCBzdGFydCBhbmQgc2xhdmUgYWRkcmVzcy4gKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJSZXBlYXRlZFN0YXJ0KGJhc2UsIHhmZXItPnNsYXZlQWRkcmVzcywga0kyQ19SZWFkKTsKKworICAgICAgICAgICAgLyogUmV0dXJuIGlmIGVycm9yLiAqLworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBXYWl0IHVudGlsIGRhdGEgdHJhbnNmZXIgY29tcGxldGUuICovCisgICAgICAgICAgICB3aGlsZSAoIShiYXNlLT5TICYga0kyQ19JbnRQZW5kaW5nRmxhZykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZXJlJ3MgdHJhbnNmZXIgZXJyb3IuICovCisgICAgICAgICAgICByZXN1bHQgPSBJMkNfQ2hlY2tBbmRDbGVhckVycm9yKGJhc2UsIGJhc2UtPlMpOworCisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0ga1N0YXR1c19JMkNfTmFrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfQWRkcl9OYWs7CisKKyAgICAgICAgICAgICAgICAgICAgSTJDX01hc3RlclN0b3AoYmFzZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFRyYW5zbWl0IGRhdGEuICovCisgICAgaWYgKCh4ZmVyLT5kaXJlY3Rpb24gPT0ga0kyQ19Xcml0ZSkgJiYgKHhmZXItPmRhdGFTaXplID4gMCkpCisgICAgeworICAgICAgICAvKiBTZW5kIERhdGEuICovCisgICAgICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJXcml0ZUJsb2NraW5nKGJhc2UsIHhmZXItPmRhdGEsIHhmZXItPmRhdGFTaXplLCB4ZmVyLT5mbGFncyk7CisgICAgfQorCisgICAgLyogUmVjZWl2ZSBEYXRhLiAqLworICAgIGlmICgoeGZlci0+ZGlyZWN0aW9uID09IGtJMkNfUmVhZCkgJiYgKHhmZXItPmRhdGFTaXplID4gMCkpCisgICAgeworICAgICAgICByZXN1bHQgPSBJMkNfTWFzdGVyUmVhZEJsb2NraW5nKGJhc2UsIHhmZXItPmRhdGEsIHhmZXItPmRhdGFTaXplLCB4ZmVyLT5mbGFncyk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJMkNfTWFzdGVyVHJhbnNmZXJDcmVhdGVIYW5kbGUoSTJDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfbWFzdGVyX3RyYW5zZmVyX2NhbGxiYWNrX3QgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIHVpbnQzMl90IGluc3RhbmNlID0gSTJDX0dldEluc3RhbmNlKGJhc2UpOworCisgICAgLyogWmVybyBoYW5kbGUuICovCisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKCpoYW5kbGUpKTsKKworICAgIC8qIFNldCBjYWxsYmFjayBhbmQgdXNlckRhdGEuICovCisgICAgaGFuZGxlLT5jb21wbGV0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBoYW5kbGUtPnVzZXJEYXRhID0gdXNlckRhdGE7CisKKyAgICAvKiBTYXZlIHRoZSBjb250ZXh0IGluIGdsb2JhbCB2YXJpYWJsZXMgdG8gc3VwcG9ydCB0aGUgZG91YmxlIHdlYWsgbWVjaGFuaXNtLiAqLworICAgIHNfaTJjSGFuZGxlW2luc3RhbmNlXSA9IGhhbmRsZTsKKworICAgIC8qIFNhdmUgbWFzdGVyIGludGVycnVwdCBoYW5kbGVyLiAqLworICAgIHNfaTJjTWFzdGVySXNyID0gSTJDX01hc3RlclRyYW5zZmVySGFuZGxlSVJROworCisgICAgLyogRW5hYmxlIE5WSUMgaW50ZXJydXB0LiAqLworICAgIEVuYWJsZUlSUShzX2kyY0lycXNbaW5zdGFuY2VdKTsKK30KKworc3RhdHVzX3QgSTJDX01hc3RlclRyYW5zZmVyTm9uQmxvY2tpbmcoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp4ZmVyKQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydCh4ZmVyKTsKKworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgIC8qIENoZWNrIGlmIHRoZSBJMkMgYnVzIGlzIGlkbGUgLSBpZiBub3QgcmV0dXJuIGJ1c3kgc3RhdHVzLiAqLworICAgIGlmIChoYW5kbGUtPnN0YXRlICE9IGtJZGxlU3RhdGUpCisgICAgeworICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19CdXN5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBTdGFydCB1cCB0aGUgbWFzdGVyIHRyYW5zZmVyIHN0YXRlIG1hY2hpbmUuICovCisgICAgICAgIHJlc3VsdCA9IEkyQ19Jbml0VHJhbnNmZXJTdGF0ZU1hY2hpbmUoYmFzZSwgaGFuZGxlLCB4ZmVyKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IGtTdGF0dXNfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgLyogRW5hYmxlIHRoZSBJMkMgaW50ZXJydXB0cy4gKi8KKyAgICAgICAgICAgIEkyQ19FbmFibGVJbnRlcnJ1cHRzKGJhc2UsIGtJMkNfR2xvYmFsSW50ZXJydXB0RW5hYmxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSTJDX01hc3RlclRyYW5zZmVyQWJvcnQoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIHZvbGF0aWxlIHVpbnQ4X3QgZHVtbXkgPSAwOworCisgICAgLyogQWRkIHRoaXMgdG8gYXZvaWQgYnVpbGQgd2FybmluZy4gKi8KKyAgICBkdW1teSsrOworCisgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHQuICovCisgICAgSTJDX0Rpc2FibGVJbnRlcnJ1cHRzKGJhc2UsIGtJMkNfR2xvYmFsSW50ZXJydXB0RW5hYmxlKTsKKworICAgIC8qIFJlc2V0IHRoZSBzdGF0ZSB0byBpZGxlLiAqLworICAgIGhhbmRsZS0+c3RhdGUgPSBrSWRsZVN0YXRlOworCisgICAgLyogU2VuZCBTVE9QIHNpZ25hbC4gKi8KKyAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kaXJlY3Rpb24gPT0ga0kyQ19SZWFkKQorICAgIHsKKyAgICAgICAgYmFzZS0+QzEgfD0gSTJDX0MxX1RYQUtfTUFTSzsKKyAgICAgICAgd2hpbGUgKCEoYmFzZS0+UyAmIGtJMkNfSW50UGVuZGluZ0ZsYWcpKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAgICAgYmFzZS0+QzEgJj0gfihJMkNfQzFfTVNUX01BU0sgfCBJMkNfQzFfVFhfTUFTSyB8IEkyQ19DMV9UWEFLX01BU0spOworICAgICAgICBkdW1teSA9IGJhc2UtPkQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0ludFBlbmRpbmdGbGFnKSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIGJhc2UtPlMgPSBrSTJDX0ludFBlbmRpbmdGbGFnOworICAgICAgICBiYXNlLT5DMSAmPSB+KEkyQ19DMV9NU1RfTUFTSyB8IEkyQ19DMV9UWF9NQVNLIHwgSTJDX0MxX1RYQUtfTUFTSyk7CisgICAgfQorfQorCitzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJHZXRDb3VudChJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLCBzaXplX3QgKmNvdW50KQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgaWYgKCFjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAqY291bnQgPSBoYW5kbGUtPnRyYW5zZmVyU2l6ZSAtIGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemU7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCit2b2lkIEkyQ19NYXN0ZXJUcmFuc2ZlckhhbmRsZUlSUShJMkNfVHlwZSAqYmFzZSwgdm9pZCAqaTJjSGFuZGxlKQoreworICAgIGFzc2VydChpMmNIYW5kbGUpOworCisgICAgaTJjX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlID0gKGkyY19tYXN0ZXJfaGFuZGxlX3QgKilpMmNIYW5kbGU7CisgICAgc3RhdHVzX3QgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworICAgIGJvb2wgaXNEb25lOworCisgICAgLyogQ2xlYXIgdGhlIGludGVycnVwdCBmbGFnLiAqLworICAgIGJhc2UtPlMgPSBrSTJDX0ludFBlbmRpbmdGbGFnOworCisgICAgLyogQ2hlY2sgdHJhbnNmZXIgY29tcGxldGUgZmxhZy4gKi8KKyAgICByZXN1bHQgPSBJMkNfTWFzdGVyVHJhbnNmZXJSdW5TdGF0ZU1hY2hpbmUoYmFzZSwgaGFuZGxlLCAmaXNEb25lKTsKKworICAgIGlmIChpc0RvbmUgfHwgcmVzdWx0KQorICAgIHsKKyAgICAgICAgLyogU2VuZCBzdG9wIGNvbW1hbmQgaWYgdHJhbnNmZXIgZG9uZSBvciByZWNlaXZlZCBOYWsuICovCisgICAgICAgIGlmICgoIShoYW5kbGUtPnRyYW5zZmVyLmZsYWdzICYga0kyQ19UcmFuc2Zlck5vU3RvcEZsYWcpKSB8fCAocmVzdWx0ID09IGtTdGF0dXNfSTJDX05haykgfHwKKyAgICAgICAgICAgIChyZXN1bHQgPT0ga1N0YXR1c19JMkNfQWRkcl9OYWspKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBFbnN1cmUgc3RvcCBjb21tYW5kIGlzIGEgbmVlZC4gKi8KKyAgICAgICAgICAgIGlmICgoYmFzZS0+QzEgJiBJMkNfQzFfTVNUX01BU0spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChJMkNfTWFzdGVyU3RvcChiYXNlKSAhPSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19UaW1lb3V0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIFJlc3RvcmUgaGFuZGxlIHRvIGlkbGUgc3RhdGUuICovCisgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrSWRsZVN0YXRlOworCisgICAgICAgIC8qIERpc2FibGUgaW50ZXJydXB0LiAqLworICAgICAgICBJMkNfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0kyQ19HbG9iYWxJbnRlcnJ1cHRFbmFibGUpOworCisgICAgICAgIC8qIENhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFmdGVyIHRoZSBmdW5jdGlvbiBoYXMgY29tcGxldGVkLiAqLworICAgICAgICBpZiAoaGFuZGxlLT5jb21wbGV0aW9uQ2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+Y29tcGxldGlvbkNhbGxiYWNrKGJhc2UsIGhhbmRsZSwgcmVzdWx0LCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJMkNfU2xhdmVJbml0KEkyQ19UeXBlICpiYXNlLCBjb25zdCBpMmNfc2xhdmVfY29uZmlnX3QgKnNsYXZlQ29uZmlnLCB1aW50MzJfdCBzcmNDbG9ja19IeikKK3sKKyAgICBhc3NlcnQoc2xhdmVDb25maWcpOworCisgICAgdWludDhfdCB0bXBSZWc7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19pMmNDbG9ja3NbSTJDX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKyAgICAvKiBSZXNldCB0aGUgbW9kdWxlLiAqLworICAgIGJhc2UtPkExID0gMDsKKyAgICBiYXNlLT5GID0gMDsKKyAgICBiYXNlLT5DMSA9IDA7CisgICAgYmFzZS0+UyA9IDB4RkZVOworICAgIGJhc2UtPkMyID0gMDsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QKKyAgICBiYXNlLT5GTFQgPSAweDUwVTsKKyNlbGlmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVAorICAgIGJhc2UtPkZMVCA9IDB4NDBVOworI2VuZGlmCisgICAgYmFzZS0+UkEgPSAwOworCisgICAgLyogQ29uZmlndXJlIGFkZHJlc3NpbmcgbW9kZS4gKi8KKyAgICBzd2l0Y2ggKHNsYXZlQ29uZmlnLT5hZGRyZXNzaW5nTW9kZSkKKyAgICB7CisgICAgICAgIGNhc2Uga0kyQ19BZGRyZXNzN2JpdDoKKyAgICAgICAgICAgIGJhc2UtPkExID0gKCh1aW50MzJfdCkoc2xhdmVDb25maWctPnNsYXZlQWRkcmVzcykpIDw8IDFVOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrSTJDX1JhbmdlTWF0Y2g6CisgICAgICAgICAgICBhc3NlcnQoc2xhdmVDb25maWctPnNsYXZlQWRkcmVzcyA8IHNsYXZlQ29uZmlnLT51cHBlckFkZHJlc3MpOworICAgICAgICAgICAgYmFzZS0+QTEgPSAoKHVpbnQzMl90KShzbGF2ZUNvbmZpZy0+c2xhdmVBZGRyZXNzKSkgPDwgMVU7CisgICAgICAgICAgICBiYXNlLT5SQSA9ICgodWludDMyX3QpKHNsYXZlQ29uZmlnLT51cHBlckFkZHJlc3MpKSA8PCAxVTsKKyAgICAgICAgICAgIGJhc2UtPkMyIHw9IEkyQ19DMl9STUVOX01BU0s7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogQ29uZmlndXJlIGxvdyBwb3dlciB3YWtlIHVwIGZlYXR1cmUuICovCisgICAgdG1wUmVnID0gYmFzZS0+QzE7CisgICAgdG1wUmVnICY9IH5JMkNfQzFfV1VFTl9NQVNLOworICAgIGJhc2UtPkMxID0gdG1wUmVnIHwgSTJDX0MxX1dVRU4oc2xhdmVDb25maWctPmVuYWJsZVdha2VVcCkgfCBJMkNfQzFfSUlDRU4oc2xhdmVDb25maWctPmVuYWJsZVNsYXZlKTsKKworICAgIC8qIENvbmZpZ3VyZSBnZW5lcmFsIGNhbGwgJiBiYXVkIHJhdGUgY29udHJvbC4gKi8KKyAgICB0bXBSZWcgPSBiYXNlLT5DMjsKKyAgICB0bXBSZWcgJj0gfihJMkNfQzJfU0JSQ19NQVNLIHwgSTJDX0MyX0dDQUVOX01BU0spOworICAgIHRtcFJlZyB8PSBJMkNfQzJfU0JSQyhzbGF2ZUNvbmZpZy0+ZW5hYmxlQmF1ZFJhdGVDdGwpIHwgSTJDX0MyX0dDQUVOKHNsYXZlQ29uZmlnLT5lbmFibGVHZW5lcmFsQ2FsbCk7CisgICAgYmFzZS0+QzIgPSB0bXBSZWc7CisKKy8qIEVuYWJsZS9EaXNhYmxlIGRvdWJsZSBidWZmZXJpbmcuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFCisgICAgdG1wUmVnID0gYmFzZS0+UzIgJiAofkkyQ19TMl9ERkVOX01BU0spOworICAgIGJhc2UtPlMyID0gdG1wUmVnIHwgSTJDX1MyX0RGRU4oc2xhdmVDb25maWctPmVuYWJsZURvdWJsZUJ1ZmZlcmluZyk7CisjZW5kaWYKKworICAgIC8qIFNldCBob2xkIHRpbWUuICovCisgICAgSTJDX1NldEhvbGRUaW1lKGJhc2UsIHNsYXZlQ29uZmlnLT5zY2xTdG9wSG9sZFRpbWVfbnMsIHNyY0Nsb2NrX0h6KTsKK30KKwordm9pZCBJMkNfU2xhdmVEZWluaXQoSTJDX1R5cGUgKmJhc2UpCit7CisgICAgLyogRGlzYWJsZSBJMkMgbW9kdWxlLiAqLworICAgIEkyQ19FbmFibGUoYmFzZSwgZmFsc2UpOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIERpc2FibGUgSTJDIGNsb2NrLiAqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX2kyY0Nsb2Nrc1tJMkNfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKwordm9pZCBJMkNfU2xhdmVHZXREZWZhdWx0Q29uZmlnKGkyY19zbGF2ZV9jb25maWdfdCAqc2xhdmVDb25maWcpCit7CisgICAgYXNzZXJ0KHNsYXZlQ29uZmlnKTsKKworICAgIC8qIEJ5IGRlZmF1bHQgc2xhdmUgaXMgYWRkcmVzc2VkIHdpdGggNy1iaXQgYWRkcmVzcy4gKi8KKyAgICBzbGF2ZUNvbmZpZy0+YWRkcmVzc2luZ01vZGUgPSBrSTJDX0FkZHJlc3M3Yml0OworCisgICAgLyogR2VuZXJhbCBjYWxsIG1vZGUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gKi8KKyAgICBzbGF2ZUNvbmZpZy0+ZW5hYmxlR2VuZXJhbENhbGwgPSBmYWxzZTsKKworICAgIC8qIFNsYXZlIGFkZHJlc3MgbWF0Y2ggd2FraW5nIHVwIE1DVSBmcm9tIGxvdyBwb3dlciBtb2RlIGlzIGRpc2FibGVkLiAqLworICAgIHNsYXZlQ29uZmlnLT5lbmFibGVXYWtlVXAgPSBmYWxzZTsKKworICAgIC8qIEluZGVwZW5kZW50IHNsYXZlIG1vZGUgYmF1ZCByYXRlIGF0IG1heGltdW0gZnJlcXVlbmN5IGlzIGRpc2FibGVkLiAqLworICAgIHNsYXZlQ29uZmlnLT5lbmFibGVCYXVkUmF0ZUN0bCA9IGZhbHNlOworCisvKiBEZWZhdWx0IGVuYWJsZSBkb3VibGUgYnVmZmVyaW5nLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSX0VOQUJMRSkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSX0VOQUJMRQorICAgIHNsYXZlQ29uZmlnLT5lbmFibGVEb3VibGVCdWZmZXJpbmcgPSB0cnVlOworI2VuZGlmCisKKyAgICAvKiBTZXQgZGVmYXVsdCBTQ0wgc3RvcCBob2xkIHRpbWUgdG8gNHVzIHdoaWNoIGlzIG1pbmltdW0gcmVxdWlyZW1lbnQgaW4gSTJDIHNwZWMuICovCisgICAgc2xhdmVDb25maWctPnNjbFN0b3BIb2xkVGltZV9ucyA9IDQwMDA7CisKKyAgICAvKiBFbmFibGUgdGhlIEkyQyBwZXJpcGhlcmFsLiAqLworICAgIHNsYXZlQ29uZmlnLT5lbmFibGVTbGF2ZSA9IHRydWU7Cit9CisKK3N0YXR1c190IEkyQ19TbGF2ZVdyaXRlQmxvY2tpbmcoSTJDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKnR4QnVmZiwgc2l6ZV90IHR4U2l6ZSkKK3sKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgdm9sYXRpbGUgdWludDhfdCBkdW1teSA9IDA7CisKKyAgICAvKiBBZGQgdGhpcyB0byBhdm9pZCBidWlsZCB3YXJuaW5nLiAqLworICAgIGR1bW15Kys7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QKKyAgICAvKiBDaGVjayBzdGFydCBmbGFnLiAqLworICAgIHdoaWxlICghKGJhc2UtPkZMVCAmIEkyQ19GTFRfU1RBUlRGX01BU0spKQorICAgIHsKKyAgICB9CisgICAgLyogQ2xlYXIgU1RBUlRGIGZsYWcuICovCisgICAgYmFzZS0+RkxUIHw9IEkyQ19GTFRfU1RBUlRGX01BU0s7CisgICAgLyogQ2xlYXIgdGhlIElJQ0lGIGZsYWcuICovCisgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCAqLworCisgICAgLyogV2FpdCBmb3IgYWRkcmVzcyBtYXRjaCBmbGFnLiAqLworICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0FkZHJlc3NNYXRjaEZsYWcpKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBSZWFkIGR1bW15IHRvIHJlbGVhc2UgYnVzLiAqLworICAgIGR1bW15ID0gYmFzZS0+RDsKKworICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJXcml0ZUJsb2NraW5nKGJhc2UsIHR4QnVmZiwgdHhTaXplLCBrSTJDX1RyYW5zZmVyRGVmYXVsdEZsYWcpOworCisgICAgLyogU3dpdGNoIHRvIHJlY2VpdmUgbW9kZS4gKi8KKyAgICBiYXNlLT5DMSAmPSB+KEkyQ19DMV9UWF9NQVNLIHwgSTJDX0MxX1RYQUtfTUFTSyk7CisKKyAgICAvKiBSZWFkIGR1bW15IHRvIHJlbGVhc2UgYnVzLiAqLworICAgIGR1bW15ID0gYmFzZS0+RDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSTJDX1NsYXZlUmVhZEJsb2NraW5nKEkyQ19UeXBlICpiYXNlLCB1aW50OF90ICpyeEJ1ZmYsIHNpemVfdCByeFNpemUpCit7CisgICAgdm9sYXRpbGUgdWludDhfdCBkdW1teSA9IDA7CisKKyAgICAvKiBBZGQgdGhpcyB0byBhdm9pZCBidWlsZCB3YXJuaW5nLiAqLworICAgIGR1bW15Kys7CisKKy8qIFdhaXQgdW50aWwgYWRkcmVzcyBtYXRjaC4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QKKyAgICAvKiBDaGVjayBzdGFydCBmbGFnLiAqLworICAgIHdoaWxlICghKGJhc2UtPkZMVCAmIEkyQ19GTFRfU1RBUlRGX01BU0spKQorICAgIHsKKyAgICB9CisgICAgLyogQ2xlYXIgU1RBUlRGIGZsYWcuICovCisgICAgYmFzZS0+RkxUIHw9IEkyQ19GTFRfU1RBUlRGX01BU0s7CisgICAgLyogQ2xlYXIgdGhlIElJQ0lGIGZsYWcuICovCisgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCAqLworCisgICAgLyogV2FpdCBmb3IgYWRkcmVzcyBtYXRjaCBhbmQgaW50IHBlbmRpbmcgZmxhZy4gKi8KKyAgICB3aGlsZSAoIShiYXNlLT5TICYga0kyQ19BZGRyZXNzTWF0Y2hGbGFnKSkKKyAgICB7CisgICAgfQorICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0ludFBlbmRpbmdGbGFnKSkKKyAgICB7CisgICAgfQorCisgICAgLyogUmVhZCBkdW1teSB0byByZWxlYXNlIGJ1cy4gKi8KKyAgICBkdW1teSA9IGJhc2UtPkQ7CisKKyAgICAvKiBDbGVhciB0aGUgSUlDSUYgZmxhZy4gKi8KKyAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgIC8qIFNldHVwIHRoZSBJMkMgcGVyaXBoZXJhbCB0byByZWNlaXZlIGRhdGEuICovCisgICAgYmFzZS0+QzEgJj0gfihJMkNfQzFfVFhfTUFTSyk7CisKKyAgICB3aGlsZSAocnhTaXplLS0pCisgICAgeworICAgICAgICAvKiBXYWl0IHVudGlsIGRhdGEgdHJhbnNmZXIgY29tcGxldGUuICovCisgICAgICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0ludFBlbmRpbmdGbGFnKSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIC8qIENsZWFyIHRoZSBJSUNJRiBmbGFnLiAqLworICAgICAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgICAgICAvKiBSZWFkIGZyb20gdGhlIGRhdGEgcmVnaXN0ZXIuICovCisgICAgICAgICpyeEJ1ZmYrKyA9IGJhc2UtPkQ7CisgICAgfQorfQorCit2b2lkIEkyQ19TbGF2ZVRyYW5zZmVyQ3JlYXRlSGFuZGxlKEkyQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX3NsYXZlX3RyYW5zZmVyX2NhbGxiYWNrX3QgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgdWludDMyX3QgaW5zdGFuY2UgPSBJMkNfR2V0SW5zdGFuY2UoYmFzZSk7CisKKyAgICAvKiBaZXJvIGhhbmRsZS4gKi8KKyAgICBtZW1zZXQoaGFuZGxlLCAwLCBzaXplb2YoKmhhbmRsZSkpOworCisgICAgLyogU2V0IGNhbGxiYWNrIGFuZCB1c2VyRGF0YS4gKi8KKyAgICBoYW5kbGUtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgaGFuZGxlLT51c2VyRGF0YSA9IHVzZXJEYXRhOworCisgICAgLyogU2F2ZSB0aGUgY29udGV4dCBpbiBnbG9iYWwgdmFyaWFibGVzIHRvIHN1cHBvcnQgdGhlIGRvdWJsZSB3ZWFrIG1lY2hhbmlzbS4gKi8KKyAgICBzX2kyY0hhbmRsZVtpbnN0YW5jZV0gPSBoYW5kbGU7CisKKyAgICAvKiBTYXZlIHNsYXZlIGludGVycnVwdCBoYW5kbGVyLiAqLworICAgIHNfaTJjU2xhdmVJc3IgPSBJMkNfU2xhdmVUcmFuc2ZlckhhbmRsZUlSUTsKKworICAgIC8qIEVuYWJsZSBOVklDIGludGVycnVwdC4gKi8KKyAgICBFbmFibGVJUlEoc19pMmNJcnFzW2luc3RhbmNlXSk7Cit9CisKK3N0YXR1c190IEkyQ19TbGF2ZVRyYW5zZmVyTm9uQmxvY2tpbmcoSTJDX1R5cGUgKmJhc2UsIGkyY19zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlLCB1aW50MzJfdCBldmVudE1hc2spCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICAvKiBDaGVjayBpZiB0aGUgSTJDIGJ1cyBpcyBpZGxlIC0gaWYgbm90IHJldHVybiBidXN5IHN0YXR1cy4gKi8KKyAgICBpZiAoaGFuZGxlLT5pc0J1c3kpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JMkNfQnVzeTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRGlzYWJsZSBMUEkyQyBJUlEgc291cmNlcyB3aGlsZSB3ZSBjb25maWd1cmUgc3R1ZmYuICovCisgICAgICAgIEkyQ19EaXNhYmxlSW50ZXJydXB0cyhiYXNlLCBrSXJxRmxhZ3MpOworCisgICAgICAgIC8qIENsZWFyIHRyYW5zZmVyIGluIGhhbmRsZS4gKi8KKyAgICAgICAgbWVtc2V0KCZoYW5kbGUtPnRyYW5zZmVyLCAwLCBzaXplb2YoaGFuZGxlLT50cmFuc2ZlcikpOworCisgICAgICAgIC8qIFJlY29yZCB0aGF0IHdlJ3JlIGJ1c3kuICovCisgICAgICAgIGhhbmRsZS0+aXNCdXN5ID0gdHJ1ZTsKKworICAgICAgICAvKiBTZXQgdXAgZXZlbnQgbWFzay4gdHggYW5kIHJ4IGFyZSBhbHdheXMgZW5hYmxlZC4gKi8KKyAgICAgICAgaGFuZGxlLT5ldmVudE1hc2sgPSBldmVudE1hc2sgfCBrSTJDX1NsYXZlVHJhbnNtaXRFdmVudCB8IGtJMkNfU2xhdmVSZWNlaXZlRXZlbnQgfCBrSTJDX1NsYXZlR2VuYXJhbGNhbGxFdmVudDsKKworICAgICAgICAvKiBDbGVhciBhbGwgZmxhZ3MuICovCisgICAgICAgIEkyQ19TbGF2ZUNsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0NsZWFyRmxhZ3MpOworCisgICAgICAgIC8qIEVuYWJsZSBJMkMgaW50ZXJuYWwgSVJRIHNvdXJjZXMuIE5WSUMgSVJRIHdhcyBlbmFibGVkIGluIENyZWF0ZUhhbmRsZSgpICovCisgICAgICAgIEkyQ19FbmFibGVJbnRlcnJ1cHRzKGJhc2UsIGtJcnFGbGFncyk7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKwordm9pZCBJMkNfU2xhdmVUcmFuc2ZlckFib3J0KEkyQ19UeXBlICpiYXNlLCBpMmNfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIGlmIChoYW5kbGUtPmlzQnVzeSkKKyAgICB7CisgICAgICAgIC8qIERpc2FibGUgaW50ZXJydXB0cy4gKi8KKyAgICAgICAgSTJDX0Rpc2FibGVJbnRlcnJ1cHRzKGJhc2UsIGtJcnFGbGFncyk7CisKKyAgICAgICAgLyogUmVzZXQgdHJhbnNmZXIgaW5mby4gKi8KKyAgICAgICAgbWVtc2V0KCZoYW5kbGUtPnRyYW5zZmVyLCAwLCBzaXplb2YoaGFuZGxlLT50cmFuc2ZlcikpOworCisgICAgICAgIC8qIFJlc2V0IHRoZSBzdGF0ZSB0byBpZGxlLiAqLworICAgICAgICBoYW5kbGUtPmlzQnVzeSA9IGZhbHNlOworICAgIH0KK30KKworc3RhdHVzX3QgSTJDX1NsYXZlVHJhbnNmZXJHZXRDb3VudChJMkNfVHlwZSAqYmFzZSwgaTJjX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUsIHNpemVfdCAqY291bnQpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICBpZiAoIWNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIENhdGNoIHdoZW4gdGhlcmUgaXMgbm90IGFuIGFjdGl2ZSB0cmFuc2Zlci4gKi8KKyAgICBpZiAoIWhhbmRsZS0+aXNCdXN5KQorICAgIHsKKyAgICAgICAgKmNvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3M7CisgICAgfQorCisgICAgLyogRm9yIGFuIGFjdGl2ZSB0cmFuc2ZlciwganVzdCByZXR1cm4gdGhlIGNvdW50IGZyb20gdGhlIGhhbmRsZS4gKi8KKyAgICAqY291bnQgPSBoYW5kbGUtPnRyYW5zZmVyLnRyYW5zZmVycmVkQ291bnQ7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCit2b2lkIEkyQ19TbGF2ZVRyYW5zZmVySGFuZGxlSVJRKEkyQ19UeXBlICpiYXNlLCB2b2lkICppMmNIYW5kbGUpCit7CisgICAgYXNzZXJ0KGkyY0hhbmRsZSk7CisKKyAgICB1aW50MTZfdCBzdGF0dXM7CisgICAgYm9vbCBkb1RyYW5zbWl0ID0gZmFsc2U7CisgICAgaTJjX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUgPSAoaTJjX3NsYXZlX2hhbmRsZV90ICopaTJjSGFuZGxlOworICAgIGkyY19zbGF2ZV90cmFuc2Zlcl90ICp4ZmVyOworICAgIHZvbGF0aWxlIHVpbnQ4X3QgZHVtbXkgPSAwOworCisgICAgLyogQWRkIHRoaXMgdG8gYXZvaWQgYnVpbGQgd2FybmluZy4gKi8KKyAgICBkdW1teSsrOworCisgICAgc3RhdHVzID0gSTJDX1NsYXZlR2V0U3RhdHVzRmxhZ3MoYmFzZSk7CisgICAgeGZlciA9ICYoaGFuZGxlLT50cmFuc2Zlcik7CisKKyNpZmRlZiBJMkNfSEFTX1NUT1BfREVURUNUCisgICAgLyogQ2hlY2sgc3RvcCBmbGFnLiAqLworICAgIGlmIChzdGF0dXMgJiBrSTJDX1N0b3BEZXRlY3RGbGFnKQorICAgIHsKKyAgICAgICAgSTJDX01hc3RlckNsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0kyQ19TdG9wRGV0ZWN0RmxhZyk7CisKKyAgICAgICAgLyogQ2xlYXIgdGhlIGludGVycnVwdCBmbGFnLiAqLworICAgICAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgICAgICAvKiBDYWxsIHNsYXZlIGNhbGxiYWNrIGlmIHRoaXMgaXMgdGhlIFNUT1Agb2YgdGhlIHRyYW5zZmVyLiAqLworICAgICAgICBpZiAoaGFuZGxlLT5pc0J1c3kpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXItPmV2ZW50ID0ga0kyQ19TbGF2ZUNvbXBsZXRpb25FdmVudDsKKyAgICAgICAgICAgIHhmZXItPmNvbXBsZXRpb25TdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgICAgICAgICBoYW5kbGUtPmlzQnVzeSA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAoKGhhbmRsZS0+ZXZlbnRNYXNrICYgeGZlci0+ZXZlbnQpICYmIChoYW5kbGUtPmNhbGxiYWNrKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIHhmZXIsIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoc3RhdHVzICYga0kyQ19BZGRyZXNzTWF0Y2hGbGFnKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEkyQ19IQVNfU1RPUF9ERVRFQ1QgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVAorICAgIC8qIENoZWNrIHN0YXJ0IGZsYWcuICovCisgICAgaWYgKHN0YXR1cyAmIGtJMkNfU3RhcnREZXRlY3RGbGFnKQorICAgIHsKKyAgICAgICAgSTJDX01hc3RlckNsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0kyQ19TdGFydERldGVjdEZsYWcpOworCisgICAgICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4gKi8KKyAgICAgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAgICAgeGZlci0+ZXZlbnQgPSBrSTJDX1NsYXZlU3RhcnRFdmVudDsKKworICAgICAgICBpZiAoKGhhbmRsZS0+ZXZlbnRNYXNrICYgeGZlci0+ZXZlbnQpICYmIChoYW5kbGUtPmNhbGxiYWNrKSkKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCB4ZmVyLCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKHN0YXR1cyAmIGtJMkNfQWRkcmVzc01hdGNoRmxhZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUICovCisKKyAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuICovCisgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAvKiBDaGVjayBOQUsgKi8KKyAgICBpZiAoc3RhdHVzICYga0kyQ19SZWNlaXZlTmFrRmxhZykKKyAgICB7CisgICAgICAgIC8qIFNldCByZWNlaXZlIG1vZGUuICovCisgICAgICAgIGJhc2UtPkMxICY9IH4oSTJDX0MxX1RYX01BU0sgfCBJMkNfQzFfVFhBS19NQVNLKTsKKworICAgICAgICAvKiBSZWFkIGR1bW15LiAqLworICAgICAgICBkdW1teSA9IGJhc2UtPkQ7CisKKyAgICAgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci0+ZXZlbnQgPSBrSTJDX1NsYXZlQ29tcGxldGlvbkV2ZW50OworICAgICAgICAgICAgeGZlci0+Y29tcGxldGlvblN0YXR1cyA9IGtTdGF0dXNfSTJDX05hazsKKyAgICAgICAgICAgIGhhbmRsZS0+aXNCdXN5ID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICgoaGFuZGxlLT5ldmVudE1hc2sgJiB4ZmVyLT5ldmVudCkgJiYgKGhhbmRsZS0+Y2FsbGJhY2spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgeGZlciwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisjaWZuZGVmIEkyQ19IQVNfU1RPUF9ERVRFQ1QKKyAgICAgICAgICAgIHhmZXItPmV2ZW50ID0ga0kyQ19TbGF2ZUNvbXBsZXRpb25FdmVudDsKKyAgICAgICAgICAgIHhmZXItPmNvbXBsZXRpb25TdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgICAgICAgICBoYW5kbGUtPmlzQnVzeSA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAoKGhhbmRsZS0+ZXZlbnRNYXNrICYgeGZlci0+ZXZlbnQpICYmIChoYW5kbGUtPmNhbGxiYWNrKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIHhmZXIsIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qICFGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUIG9yICFGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfREVURUNUICovCisgICAgICAgIH0KKyAgICB9CisgICAgLyogQ2hlY2sgYWRkcmVzcyBtYXRjaC4gKi8KKyAgICBlbHNlIGlmIChzdGF0dXMgJiBrSTJDX0FkZHJlc3NNYXRjaEZsYWcpCisgICAgeworICAgICAgICBoYW5kbGUtPmlzQnVzeSA9IHRydWU7CisgICAgICAgIHhmZXItPmV2ZW50ID0ga0kyQ19TbGF2ZUFkZHJlc3NNYXRjaEV2ZW50OworCisgICAgICAgIC8qIFNsYXZlIHRyYW5zbWl0LCBtYXN0ZXIgcmVhZGluZyBmcm9tIHNsYXZlLiAqLworICAgICAgICBpZiAoc3RhdHVzICYga0kyQ19UcmFuc2ZlckRpcmVjdGlvbkZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoYW5nZSBkaXJlY3Rpb24gdG8gc2VuZCBkYXRhLiAqLworICAgICAgICAgICAgYmFzZS0+QzEgfD0gSTJDX0MxX1RYX01BU0s7CisKKyAgICAgICAgICAgIGRvVHJhbnNtaXQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2xhdmUgcmVjZWl2ZSwgbWFzdGVyIHdyaXRpbmcgdG8gc2xhdmUuICovCisgICAgICAgICAgICBiYXNlLT5DMSAmPSB+KEkyQ19DMV9UWF9NQVNLIHwgSTJDX0MxX1RYQUtfTUFTSyk7CisKKyAgICAgICAgICAgIC8qIFJlYWQgZHVtbXkgdG8gcmVsZWFzZSB0aGUgYnVzLiAqLworICAgICAgICAgICAgZHVtbXkgPSBiYXNlLT5EOworCisgICAgICAgICAgICBpZiAoZHVtbXkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4ZmVyLT5ldmVudCA9IGtJMkNfU2xhdmVHZW5hcmFsY2FsbEV2ZW50OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKChoYW5kbGUtPmV2ZW50TWFzayAmIHhmZXItPmV2ZW50KSAmJiAoaGFuZGxlLT5jYWxsYmFjaykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgeGZlciwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogQ2hlY2sgdHJhbnNmZXIgY29tcGxldGUgZmxhZy4gKi8KKyAgICBlbHNlIGlmIChzdGF0dXMgJiBrSTJDX1RyYW5zZmVyQ29tcGxldGVGbGFnKQorICAgIHsKKyAgICAgICAgLyogU2xhdmUgdHJhbnNtaXQsIG1hc3RlciByZWFkaW5nIGZyb20gc2xhdmUuICovCisgICAgICAgIGlmIChzdGF0dXMgJiBrSTJDX1RyYW5zZmVyRGlyZWN0aW9uRmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9UcmFuc21pdCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJZiB3ZSdyZSBvdXQgb2YgZGF0YSwgaW52b2tlIGNhbGxiYWNrIHRvIGdldCBtb3JlLiAqLworICAgICAgICAgICAgaWYgKCgheGZlci0+ZGF0YSkgfHwgKCF4ZmVyLT5kYXRhU2l6ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeGZlci0+ZXZlbnQgPSBrSTJDX1NsYXZlUmVjZWl2ZUV2ZW50OworCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIHhmZXIsIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIENsZWFyIHRoZSB0cmFuc2ZlcnJlZCBjb3VudCBub3cgdGhhdCB3ZSBoYXZlIGEgbmV3IGJ1ZmZlci4gKi8KKyAgICAgICAgICAgICAgICB4ZmVyLT50cmFuc2ZlcnJlZENvdW50ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogU2xhdmUgcmVjZWl2ZSwgbWFzdGVyIHdyaXRpbmcgdG8gc2xhdmUuICovCisgICAgICAgICAgICB1aW50OF90IGRhdGEgPSBiYXNlLT5EOworCisgICAgICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBSZWNlaXZlIGRhdGEuICovCisgICAgICAgICAgICAgICAgKmhhbmRsZS0+dHJhbnNmZXIuZGF0YSsrID0gZGF0YTsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplLS07CisgICAgICAgICAgICAgICAgeGZlci0+dHJhbnNmZXJyZWRDb3VudCsrOworICAgICAgICAgICAgICAgIGlmICghaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSkKKyAgICAgICAgICAgICAgICB7CisjaWZuZGVmIEkyQ19IQVNfU1RPUF9ERVRFQ1QKKyAgICAgICAgICAgICAgICAgICAgeGZlci0+ZXZlbnQgPSBrSTJDX1NsYXZlQ29tcGxldGlvbkV2ZW50OworICAgICAgICAgICAgICAgICAgICB4ZmVyLT5jb21wbGV0aW9uU3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmlzQnVzeSA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIC8qIFByb2NlZWQgcmVjZWl2ZSBjb21wbGV0ZSBldmVudC4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKChoYW5kbGUtPmV2ZW50TWFzayAmIHhmZXItPmV2ZW50KSAmJiAoaGFuZGxlLT5jYWxsYmFjaykpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgeGZlciwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiAhRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCBvciAhRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBSZWFkIGR1bW15IHRvIHJlbGVhc2UgYnVzLiAqLworICAgICAgICBkdW1teSA9IGJhc2UtPkQ7CisgICAgfQorCisgICAgLyogU2VuZCBkYXRhIGlmIHRoZXJlIGlzIHRoZSBuZWVkLiAqLworICAgIGlmIChkb1RyYW5zbWl0KQorICAgIHsKKyAgICAgICAgLyogSWYgd2UncmUgb3V0IG9mIGRhdGEsIGludm9rZSBjYWxsYmFjayB0byBnZXQgbW9yZS4gKi8KKyAgICAgICAgaWYgKCgheGZlci0+ZGF0YSkgfHwgKCF4ZmVyLT5kYXRhU2l6ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXItPmV2ZW50ID0ga0kyQ19TbGF2ZVRyYW5zbWl0RXZlbnQ7CisKKyAgICAgICAgICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgeGZlciwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENsZWFyIHRoZSB0cmFuc2ZlcnJlZCBjb3VudCBub3cgdGhhdCB3ZSBoYXZlIGEgbmV3IGJ1ZmZlci4gKi8KKyAgICAgICAgICAgIHhmZXItPnRyYW5zZmVycmVkQ291bnQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNlbmQgZGF0YS4gKi8KKyAgICAgICAgICAgIGJhc2UtPkQgPSAqaGFuZGxlLT50cmFuc2Zlci5kYXRhKys7CisgICAgICAgICAgICBoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplLS07CisgICAgICAgICAgICB4ZmVyLT50cmFuc2ZlcnJlZENvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTd2l0Y2ggdG8gcmVjZWl2ZSBtb2RlLiAqLworICAgICAgICAgICAgYmFzZS0+QzEgJj0gfihJMkNfQzFfVFhfTUFTSyB8IEkyQ19DMV9UWEFLX01BU0spOworCisgICAgICAgICAgICAvKiBSZWFkIGR1bW15IHRvIHJlbGVhc2UgYnVzLiAqLworICAgICAgICAgICAgZHVtbXkgPSBiYXNlLT5EOworCisjaWZuZGVmIEkyQ19IQVNfU1RPUF9ERVRFQ1QKKyAgICAgICAgICAgIHhmZXItPmV2ZW50ID0ga0kyQ19TbGF2ZUNvbXBsZXRpb25FdmVudDsKKyAgICAgICAgICAgIHhmZXItPmNvbXBsZXRpb25TdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgICAgICAgICBoYW5kbGUtPmlzQnVzeSA9IGZhbHNlOworCisgICAgICAgICAgICAvKiBQcm9jZWVkIHR4ZG9uZSBldmVudC4gKi8KKyAgICAgICAgICAgIGlmICgoaGFuZGxlLT5ldmVudE1hc2sgJiB4ZmVyLT5ldmVudCkgJiYgKGhhbmRsZS0+Y2FsbGJhY2spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgeGZlciwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogIUZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1Qgb3IgIUZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QgKi8KKyAgICAgICAgfQorICAgIH0KK30KKworI2lmIGRlZmluZWQoSTJDMCkKK3ZvaWQgSTJDMF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgSTJDX1RyYW5zZmVyQ29tbW9uSVJRSGFuZGxlcihJMkMwLCBzX2kyY0hhbmRsZVswXSk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoSTJDMSkKK3ZvaWQgSTJDMV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgSTJDX1RyYW5zZmVyQ29tbW9uSVJRSGFuZGxlcihJMkMxLCBzX2kyY0hhbmRsZVsxXSk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoSTJDMikKK3ZvaWQgSTJDMl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgSTJDX1RyYW5zZmVyQ29tbW9uSVJRSGFuZGxlcihJMkMyLCBzX2kyY0hhbmRsZVsyXSk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoSTJDMykKK3ZvaWQgSTJDM19Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgSTJDX1RyYW5zZmVyQ29tbW9uSVJRSGFuZGxlcihJMkMzLCBzX2kyY0hhbmRsZVszXSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2kyYy5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1ZmQxZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2kyYy5oCkBAIC0wLDAgKzEsNzk0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9JMkNfSF8KKyNkZWZpbmUgX0ZTTF9JMkNfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBpMmNfZHJpdmVyCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgSTJDIGRyaXZlciB2ZXJzaW9uIDIuMC4zLiAqLworI2RlZmluZSBGU0xfSTJDX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMykpCisvKkB9Ki8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QgfHwgXAorICAgICBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QpCisjZGVmaW5lIEkyQ19IQVNfU1RPUF9ERVRFQ1QKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUIC8gRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCAqLworCisvKiEgQGJyaWVmICBJMkMgc3RhdHVzIHJldHVybiBjb2Rlcy4gKi8KK2VudW0gX2kyY19zdGF0dXMKK3sKKyAgICBrU3RhdHVzX0kyQ19CdXN5ID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0kyQywgMCksICAgICAgICAgICAgLyohPCBJMkMgaXMgYnVzeSB3aXRoIGN1cnJlbnQgdHJhbnNmZXIuICovCisgICAga1N0YXR1c19JMkNfSWRsZSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9JMkMsIDEpLCAgICAgICAgICAgIC8qITwgQnVzIGlzIElkbGUuICovCisgICAga1N0YXR1c19JMkNfTmFrID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0kyQywgMiksICAgICAgICAgICAgIC8qITwgTkFLIHJlY2VpdmVkIGR1cmluZyB0cmFuc2Zlci4gKi8KKyAgICBrU3RhdHVzX0kyQ19BcmJpdHJhdGlvbkxvc3QgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfSTJDLCAzKSwgLyohPCBBcmJpdHJhdGlvbiBsb3N0IGR1cmluZyB0cmFuc2Zlci4gKi8KKyAgICBrU3RhdHVzX0kyQ19UaW1lb3V0ID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0kyQywgNCksICAgICAgICAgLyohPCBXYWl0IGV2ZW50IHRpbWVvdXQuICovCisgICAga1N0YXR1c19JMkNfQWRkcl9OYWsgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfSTJDLCA1KSwgICAgICAgIC8qITwgTkFLIHJlY2VpdmVkIGR1cmluZyB0aGUgYWRkcmVzcyBwcm9iZS4gKi8KK307CisKKy8qIQorICogQGJyaWVmIEkyQyBwZXJpcGhlcmFsIGZsYWdzCisgKgorICogVGhlIGZvbGxvd2luZyBzdGF0dXMgcmVnaXN0ZXIgZmxhZ3MgY2FuIGJlIGNsZWFyZWQ6CisgKiAtICNrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcKKyAqIC0gI2tJMkNfSW50UGVuZGluZ0ZsYWcKKyAqIC0gI2tJMkNfU3RhcnREZXRlY3RGbGFnCisgKiAtICNrSTJDX1N0b3BEZXRlY3RGbGFnCisgKgorICogQG5vdGUgVGhlc2UgZW51bWVyYXRpb25zIGFyZSBtZWFudCB0byBiZSBPUidkIHRvZ2V0aGVyIHRvIGZvcm0gYSBiaXQgbWFzay4KKyAqCisgKi8KK2VudW0gX2kyY19mbGFncworeworICAgIGtJMkNfUmVjZWl2ZU5ha0ZsYWcgPSBJMkNfU19SWEFLX01BU0ssICAgICAgIC8qITwgSTJDIHJlY2VpdmUgTkFLIGZsYWcuICovCisgICAga0kyQ19JbnRQZW5kaW5nRmxhZyA9IEkyQ19TX0lJQ0lGX01BU0ssICAgICAgLyohPCBJMkMgaW50ZXJydXB0IHBlbmRpbmcgZmxhZy4gKi8KKyAgICBrSTJDX1RyYW5zZmVyRGlyZWN0aW9uRmxhZyA9IEkyQ19TX1NSV19NQVNLLCAvKiE8IEkyQyB0cmFuc2ZlciBkaXJlY3Rpb24gZmxhZy4gKi8KKyAgICBrSTJDX1JhbmdlQWRkcmVzc01hdGNoRmxhZyA9IEkyQ19TX1JBTV9NQVNLLCAvKiE8IEkyQyByYW5nZSBhZGRyZXNzIG1hdGNoIGZsYWcuICovCisgICAga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnID0gSTJDX1NfQVJCTF9NQVNLLCAgLyohPCBJMkMgYXJiaXRyYXRpb24gbG9zdCBmbGFnLiAqLworICAgIGtJMkNfQnVzQnVzeUZsYWcgPSBJMkNfU19CVVNZX01BU0ssICAgICAgICAgIC8qITwgSTJDIGJ1cyBidXN5IGZsYWcuICovCisgICAga0kyQ19BZGRyZXNzTWF0Y2hGbGFnID0gSTJDX1NfSUFBU19NQVNLLCAgICAgLyohPCBJMkMgYWRkcmVzcyBtYXRjaCBmbGFnLiAqLworICAgIGtJMkNfVHJhbnNmZXJDb21wbGV0ZUZsYWcgPSBJMkNfU19UQ0ZfTUFTSywgIC8qITwgSTJDIHRyYW5zZmVyIGNvbXBsZXRlIGZsYWcuICovCisjaWZkZWYgSTJDX0hBU19TVE9QX0RFVEVDVAorICAgIGtJMkNfU3RvcERldGVjdEZsYWcgPSBJMkNfRkxUX1NUT1BGX01BU0sgPDwgOCwgLyohPCBJMkMgc3RvcCBkZXRlY3QgZmxhZy4gKi8KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUIC8gRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUCisgICAga0kyQ19TdGFydERldGVjdEZsYWcgPSBJMkNfRkxUX1NUQVJURl9NQVNLIDw8IDgsIC8qITwgSTJDIHN0YXJ0IGRldGVjdCBmbGFnLiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUICovCit9OworCisvKiEgQGJyaWVmIEkyQyBmZWF0dXJlIGludGVycnVwdCBzb3VyY2UuICovCitlbnVtIF9pMmNfaW50ZXJydXB0X2VuYWJsZQoreworICAgIGtJMkNfR2xvYmFsSW50ZXJydXB0RW5hYmxlID0gSTJDX0MxX0lJQ0lFX01BU0ssIC8qITwgSTJDIGdsb2JhbCBpbnRlcnJ1cHQuICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QKKyAgICBrSTJDX1N0b3BEZXRlY3RJbnRlcnJ1cHRFbmFibGUgPSBJMkNfRkxUX1NUT1BJRV9NQVNLLCAvKiE8IEkyQyBzdG9wIGRldGVjdCBpbnRlcnJ1cHQuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUCisgICAga0kyQ19TdGFydFN0b3BEZXRlY3RJbnRlcnJ1cHRFbmFibGUgPSBJMkNfRkxUX1NTSUVfTUFTSywgLyohPCBJMkMgc3RhcnQmc3RvcCBkZXRlY3QgaW50ZXJydXB0LiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QgKi8KK307CisKKy8qISBAYnJpZWYgVGhlIGRpcmVjdGlvbiBvZiBtYXN0ZXIgYW5kIHNsYXZlIHRyYW5zZmVycy4gKi8KK3R5cGVkZWYgZW51bSBfaTJjX2RpcmVjdGlvbgoreworICAgIGtJMkNfV3JpdGUgPSAweDBVLCAvKiE8IE1hc3RlciB0cmFuc21pdHMgdG8gdGhlIHNsYXZlLiAqLworICAgIGtJMkNfUmVhZCA9IDB4MVUsICAvKiE8IE1hc3RlciByZWNlaXZlcyBmcm9tIHRoZSBzbGF2ZS4gKi8KK30gaTJjX2RpcmVjdGlvbl90OworCisvKiEgQGJyaWVmIEFkZHJlc3NpbmcgbW9kZS4gKi8KK3R5cGVkZWYgZW51bSBfaTJjX3NsYXZlX2FkZHJlc3NfbW9kZQoreworICAgIGtJMkNfQWRkcmVzczdiaXQgPSAweDBVLCAvKiE8IDctYml0IGFkZHJlc3NpbmcgbW9kZS4gKi8KKyAgICBrSTJDX1JhbmdlTWF0Y2ggPSAwWDJVLCAgLyohPCBSYW5nZSBhZGRyZXNzIG1hdGNoIGFkZHJlc3NpbmcgbW9kZS4gKi8KK30gaTJjX3NsYXZlX2FkZHJlc3NfbW9kZV90OworCisvKiEgQGJyaWVmIEkyQyB0cmFuc2ZlciBjb250cm9sIGZsYWcuICovCitlbnVtIF9pMmNfbWFzdGVyX3RyYW5zZmVyX2ZsYWdzCit7CisgICAga0kyQ19UcmFuc2ZlckRlZmF1bHRGbGFnID0gMHgwVSwgICAgICAgLyohPCBBIHRyYW5zZmVyIHN0YXJ0cyB3aXRoIGEgc3RhcnQgc2lnbmFsLCBzdG9wcyB3aXRoIGEgc3RvcCBzaWduYWwuICovCisgICAga0kyQ19UcmFuc2Zlck5vU3RhcnRGbGFnID0gMHgxVSwgICAgICAgLyohPCBBIHRyYW5zZmVyIHN0YXJ0cyB3aXRob3V0IGEgc3RhcnQgc2lnbmFsLiAqLworICAgIGtJMkNfVHJhbnNmZXJSZXBlYXRlZFN0YXJ0RmxhZyA9IDB4MlUsIC8qITwgQSB0cmFuc2ZlciBzdGFydHMgd2l0aCBhIHJlcGVhdGVkIHN0YXJ0IHNpZ25hbC4gKi8KKyAgICBrSTJDX1RyYW5zZmVyTm9TdG9wRmxhZyA9IDB4NFUsICAgICAgICAvKiE8IEEgdHJhbnNmZXIgZW5kcyB3aXRob3V0IGEgc3RvcCBzaWduYWwuICovCit9OworCisvKiEKKyAqIEBicmllZiBTZXQgb2YgZXZlbnRzIHNlbnQgdG8gdGhlIGNhbGxiYWNrIGZvciBub25ibG9ja2luZyBzbGF2ZSB0cmFuc2ZlcnMuCisgKgorICogVGhlc2UgZXZlbnQgZW51bWVyYXRpb25zIGFyZSB1c2VkIGZvciB0d28gcmVsYXRlZCBwdXJwb3Nlcy4gRmlyc3QsIGEgYml0IG1hc2sgY3JlYXRlZCBieSBPUidpbmcgdG9nZXRoZXIKKyAqIGV2ZW50cyBpcyBwYXNzZWQgdG8gSTJDX1NsYXZlVHJhbnNmZXJOb25CbG9ja2luZygpIHRvIHNwZWNpZnkgd2hpY2ggZXZlbnRzIHRvIGVuYWJsZS4KKyAqIFRoZW4sIHdoZW4gdGhlIHNsYXZlIGNhbGxiYWNrIGlzIGludm9rZWQsIGl0IGlzIHBhc3NlZCB0aGUgY3VycmVudCBldmVudCB0aHJvdWdoIGl0cyBAYSB0cmFuc2ZlcgorICogcGFyYW1ldGVyLgorICoKKyAqIEBub3RlIFRoZXNlIGVudW1lcmF0aW9ucyBhcmUgbWVhbnQgdG8gYmUgT1InZCB0b2dldGhlciB0byBmb3JtIGEgYml0IG1hc2sgb2YgZXZlbnRzLgorICovCit0eXBlZGVmIGVudW0gX2kyY19zbGF2ZV90cmFuc2Zlcl9ldmVudAoreworICAgIGtJMkNfU2xhdmVBZGRyZXNzTWF0Y2hFdmVudCA9IDB4MDFVLCAvKiE8IFJlY2VpdmVkIHRoZSBzbGF2ZSBhZGRyZXNzIGFmdGVyIGEgc3RhcnQgb3IgcmVwZWF0ZWQgc3RhcnQuICovCisgICAga0kyQ19TbGF2ZVRyYW5zbWl0RXZlbnQgPSAweDAyVSwgICAgIC8qITwgQSBjYWxsYmFjayBpcyByZXF1ZXN0ZWQgdG8gcHJvdmlkZSBkYXRhIHRvIHRyYW5zbWl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2xhdmUtdHJhbnNtaXR0ZXIgcm9sZSkuICovCisgICAga0kyQ19TbGF2ZVJlY2VpdmVFdmVudCA9IDB4MDRVLCAgICAgIC8qITwgQSBjYWxsYmFjayBpcyByZXF1ZXN0ZWQgdG8gcHJvdmlkZSBhIGJ1ZmZlciBpbiB3aGljaCB0byBwbGFjZSByZWNlaXZlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKHNsYXZlLXJlY2VpdmVyIHJvbGUpLiAqLworICAgIGtJMkNfU2xhdmVUcmFuc21pdEFja0V2ZW50ID0gMHgwOFUsICAvKiE8IEEgY2FsbGJhY2sgbmVlZHMgdG8gZWl0aGVyIHRyYW5zbWl0IGFuIEFDSyBvciBOQUNLLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVAorICAgIGtJMkNfU2xhdmVTdGFydEV2ZW50ID0gMHgxMFUsIC8qITwgQSBzdGFydC9yZXBlYXRlZCBzdGFydCB3YXMgZGV0ZWN0ZWQuICovCisjZW5kaWYKKyAgICBrSTJDX1NsYXZlQ29tcGxldGlvbkV2ZW50ID0gMHgyMFUsICAvKiE8IEEgc3RvcCB3YXMgZGV0ZWN0ZWQgb3IgZmluaXNoZWQgdHJhbnNmZXIsIGNvbXBsZXRpbmcgdGhlIHRyYW5zZmVyLiAqLworICAgIGtJMkNfU2xhdmVHZW5hcmFsY2FsbEV2ZW50ID0gMHg0MFUsIC8qITwgUmVjZWl2ZWQgdGhlIGdlbmVyYWwgY2FsbCBhZGRyZXNzIGFmdGVyIGEgc3RhcnQgb3IgcmVwZWF0ZWQgc3RhcnQuICovCisKKyAgICAvKiEgQSBiaXQgbWFzayBvZiBhbGwgYXZhaWxhYmxlIGV2ZW50cy4gKi8KKyAgICBrSTJDX1NsYXZlQWxsRXZlbnRzID0ga0kyQ19TbGF2ZUFkZHJlc3NNYXRjaEV2ZW50IHwga0kyQ19TbGF2ZVRyYW5zbWl0RXZlbnQgfCBrSTJDX1NsYXZlUmVjZWl2ZUV2ZW50IHwKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAga0kyQ19TbGF2ZVN0YXJ0RXZlbnQgfAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtJMkNfU2xhdmVDb21wbGV0aW9uRXZlbnQgfCBrSTJDX1NsYXZlR2VuYXJhbGNhbGxFdmVudCwKK30gaTJjX3NsYXZlX3RyYW5zZmVyX2V2ZW50X3Q7CisKKy8qISBAYnJpZWYgSTJDIG1hc3RlciB1c2VyIGNvbmZpZ3VyYXRpb24uICovCit0eXBlZGVmIHN0cnVjdCBfaTJjX21hc3Rlcl9jb25maWcKK3sKKyAgICBib29sIGVuYWJsZU1hc3RlcjsgLyohPCBFbmFibGVzIHRoZSBJMkMgcGVyaXBoZXJhbCBhdCBpbml0aWFsaXphdGlvbiB0aW1lLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0hPTERfT0ZGKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfSE9MRF9PRkYKKyAgICBib29sIGVuYWJsZVN0b3BIb2xkOyAvKiE8IENvbnRyb2xzIHRoZSBzdG9wIGhvbGQgZW5hYmxlLiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFCisgICAgYm9vbCBlbmFibGVEb3VibGVCdWZmZXJpbmc7IC8qITwgQ29udHJvbHMgZG91YmxlIGJ1ZmZlciBlbmFibGU7IG5vdGljZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxpbmcgdGhlIGRvdWJsZSBidWZmZXIgZGlzYWJsZXMgdGhlIGNsb2NrIHN0cmV0Y2guICovCisjZW5kaWYKKyAgICB1aW50MzJfdCBiYXVkUmF0ZV9CcHM7ICAgICAvKiE8IEJhdWQgcmF0ZSBjb25maWd1cmF0aW9uIG9mIEkyQyBwZXJpcGhlcmFsLiAqLworICAgIHVpbnQ4X3QgZ2xpdGNoRmlsdGVyV2lkdGg7IC8qITwgQ29udHJvbHMgdGhlIHdpZHRoIG9mIHRoZSBnbGl0Y2guICovCit9IGkyY19tYXN0ZXJfY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgSTJDIHNsYXZlIHVzZXIgY29uZmlndXJhdGlvbi4gKi8KK3R5cGVkZWYgc3RydWN0IF9pMmNfc2xhdmVfY29uZmlnCit7CisgICAgYm9vbCBlbmFibGVTbGF2ZTsgICAgICAgLyohPCBFbmFibGVzIHRoZSBJMkMgcGVyaXBoZXJhbCBhdCBpbml0aWFsaXphdGlvbiB0aW1lLiAqLworICAgIGJvb2wgZW5hYmxlR2VuZXJhbENhbGw7IC8qITwgRW5hYmxlcyB0aGUgZ2VuZXJhbCBjYWxsIGFkZHJlc3NpbmcgbW9kZS4gKi8KKyAgICBib29sIGVuYWJsZVdha2VVcDsgICAgICAvKiE8IEVuYWJsZXMvZGlzYWJsZXMgd2FraW5nIHVwIE1DVSBmcm9tIGxvdy1wb3dlciBtb2RlLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSX0VOQUJMRSkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSX0VOQUJMRQorICAgIGJvb2wgZW5hYmxlRG91YmxlQnVmZmVyaW5nOyAvKiE8IENvbnRyb2xzIGEgZG91YmxlIGJ1ZmZlciBlbmFibGU7IG5vdGljZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxpbmcgdGhlIGRvdWJsZSBidWZmZXIgZGlzYWJsZXMgdGhlIGNsb2NrIHN0cmV0Y2guICovCisjZW5kaWYKKyAgICBib29sIGVuYWJsZUJhdWRSYXRlQ3RsOyAvKiE8IEVuYWJsZXMvZGlzYWJsZXMgaW5kZXBlbmRlbnQgc2xhdmUgYmF1ZCByYXRlIG9uIFNDTCBpbiB2ZXJ5IGZhc3QgSTJDIG1vZGVzLiAqLworICAgIHVpbnQxNl90IHNsYXZlQWRkcmVzczsgIC8qITwgQSBzbGF2ZSBhZGRyZXNzIGNvbmZpZ3VyYXRpb24uICovCisgICAgdWludDE2X3QgdXBwZXJBZGRyZXNzOyAgLyohPCBBIG1heGltdW0gYm91bmRhcnkgc2xhdmUgYWRkcmVzcyB1c2VkIGluIGEgcmFuZ2UgbWF0Y2hpbmcgbW9kZS4gKi8KKyAgICBpMmNfc2xhdmVfYWRkcmVzc19tb2RlX3QKKyAgICAgICAgYWRkcmVzc2luZ01vZGU7ICAgICAgICAgIC8qITwgQW4gYWRkcmVzc2luZyBtb2RlIGNvbmZpZ3VyYXRpb24gb2YgaTJjX3NsYXZlX2FkZHJlc3NfbW9kZV9jb25maWdfdC4gKi8KKyAgICB1aW50MzJfdCBzY2xTdG9wSG9sZFRpbWVfbnM7IC8qITwgdGhlIGRlbGF5IGZyb20gdGhlIHJpc2luZyBlZGdlIG9mIFNDTCAoSTJDIGNsb2NrKSB0byB0aGUgcmlzaW5nIGVkZ2Ugb2YgU0RBIChJMkMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpIHdoaWxlIFNDTCBpcyBoaWdoIChzdG9wIGNvbmRpdGlvbiksIFNEQSBob2xkIHRpbWUgYW5kIFNDTCBzdGFydCBob2xkIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBhbHNvIGNvbmZpZ3VyZWQgYWNjb3JkaW5nIHRvIHRoZSBTQ0wgc3RvcCBob2xkIHRpbWUuICovCit9IGkyY19zbGF2ZV9jb25maWdfdDsKKworLyohIEBicmllZiBJMkMgbWFzdGVyIGhhbmRsZSB0eXBlZGVmLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2kyY19tYXN0ZXJfaGFuZGxlIGkyY19tYXN0ZXJfaGFuZGxlX3Q7CisKKy8qISBAYnJpZWYgSTJDIG1hc3RlciB0cmFuc2ZlciBjYWxsYmFjayB0eXBlZGVmLiAqLwordHlwZWRlZiB2b2lkICgqaTJjX21hc3Rlcl90cmFuc2Zlcl9jYWxsYmFja190KShJMkNfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKTsKKworLyohIEBicmllZiBJMkMgc2xhdmUgaGFuZGxlIHR5cGVkZWYuICovCit0eXBlZGVmIHN0cnVjdCBfaTJjX3NsYXZlX2hhbmRsZSBpMmNfc2xhdmVfaGFuZGxlX3Q7CisKKy8qISBAYnJpZWYgSTJDIG1hc3RlciB0cmFuc2ZlciBzdHJ1Y3R1cmUuICovCit0eXBlZGVmIHN0cnVjdCBfaTJjX21hc3Rlcl90cmFuc2ZlcgoreworICAgIHVpbnQzMl90IGZsYWdzOyAgICAgICAgICAgIC8qITwgQSB0cmFuc2ZlciBmbGFnIHdoaWNoIGNvbnRyb2xzIHRoZSB0cmFuc2Zlci4gKi8KKyAgICB1aW50OF90IHNsYXZlQWRkcmVzczsgICAgICAvKiE8IDctYml0IHNsYXZlIGFkZHJlc3MuICovCisgICAgaTJjX2RpcmVjdGlvbl90IGRpcmVjdGlvbjsgLyohPCBBIHRyYW5zZmVyIGRpcmVjdGlvbiwgcmVhZCBvciB3cml0ZS4gKi8KKyAgICB1aW50MzJfdCBzdWJhZGRyZXNzOyAgICAgICAvKiE8IEEgc3ViIGFkZHJlc3MuIFRyYW5zZmVycmVkIE1TQiBmaXJzdC4gKi8KKyAgICB1aW50OF90IHN1YmFkZHJlc3NTaXplOyAgICAvKiE8IEEgc2l6ZSBvZiB0aGUgY29tbWFuZCBidWZmZXIuICovCisgICAgdWludDhfdCAqdm9sYXRpbGUgZGF0YTsgICAgLyohPCBBIHRyYW5zZmVyIGJ1ZmZlci4gKi8KKyAgICB2b2xhdGlsZSBzaXplX3QgZGF0YVNpemU7ICAvKiE8IEEgdHJhbnNmZXIgc2l6ZS4gKi8KK30gaTJjX21hc3Rlcl90cmFuc2Zlcl90OworCisvKiEgQGJyaWVmIEkyQyBtYXN0ZXIgaGFuZGxlIHN0cnVjdHVyZS4gKi8KK3N0cnVjdCBfaTJjX21hc3Rlcl9oYW5kbGUKK3sKKyAgICBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgdHJhbnNmZXI7ICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBtYXN0ZXIgdHJhbnNmZXIgY29weS4gKi8KKyAgICBzaXplX3QgdHJhbnNmZXJTaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRvdGFsIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkLiAqLworICAgIHVpbnQ4X3Qgc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQSB0cmFuc2ZlciBzdGF0ZSBtYWludGFpbmVkIGR1cmluZyB0cmFuc2Zlci4gKi8KKyAgICBpMmNfbWFzdGVyX3RyYW5zZmVyX2NhbGxiYWNrX3QgY29tcGxldGlvbkNhbGxiYWNrOyAvKiE8IEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHRyYW5zZmVyIGlzIGZpbmlzaGVkLiAqLworICAgIHZvaWQgKnVzZXJEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQSBjYWxsYmFjayBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gKi8KK307CisKKy8qISBAYnJpZWYgSTJDIHNsYXZlIHRyYW5zZmVyIHN0cnVjdHVyZS4gKi8KK3R5cGVkZWYgc3RydWN0IF9pMmNfc2xhdmVfdHJhbnNmZXIKK3sKKyAgICBpMmNfc2xhdmVfdHJhbnNmZXJfZXZlbnRfdCBldmVudDsgLyohPCBBIHJlYXNvbiB0aGF0IHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLiAqLworICAgIHVpbnQ4X3QgKnZvbGF0aWxlIGRhdGE7ICAgICAgICAgICAvKiE8IEEgdHJhbnNmZXIgYnVmZmVyLiAqLworICAgIHZvbGF0aWxlIHNpemVfdCBkYXRhU2l6ZTsgICAgICAgICAvKiE8IEEgdHJhbnNmZXIgc2l6ZS4gKi8KKyAgICBzdGF0dXNfdCBjb21wbGV0aW9uU3RhdHVzOyAgICAgICAgLyohPCBTdWNjZXNzIG9yIGVycm9yIGNvZGUgZGVzY3JpYmluZyBob3cgdGhlIHRyYW5zZmVyIGNvbXBsZXRlZC4gT25seSBhcHBsaWVzIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAja0kyQ19TbGF2ZUNvbXBsZXRpb25FdmVudC4gKi8KKyAgICBzaXplX3QgdHJhbnNmZXJyZWRDb3VudDsgLyohPCBBIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB0cmFuc2ZlcnJlZCBzaW5jZSB0aGUgc3RhcnQgb3Igc2luY2UgdGhlIGxhc3QgcmVwZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQuICovCit9IGkyY19zbGF2ZV90cmFuc2Zlcl90OworCisvKiEgQGJyaWVmIEkyQyBzbGF2ZSB0cmFuc2ZlciBjYWxsYmFjayB0eXBlZGVmLiAqLwordHlwZWRlZiB2b2lkICgqaTJjX3NsYXZlX3RyYW5zZmVyX2NhbGxiYWNrX3QpKEkyQ19UeXBlICpiYXNlLCBpMmNfc2xhdmVfdHJhbnNmZXJfdCAqeGZlciwgdm9pZCAqdXNlckRhdGEpOworCisvKiEgQGJyaWVmIEkyQyBzbGF2ZSBoYW5kbGUgc3RydWN0dXJlLiAqLworc3RydWN0IF9pMmNfc2xhdmVfaGFuZGxlCit7CisgICAgdm9sYXRpbGUgYm9vbCBpc0J1c3k7ICAgICAgICAgICAgICAgICAgIC8qITwgSW5kaWNhdGVzIHdoZXRoZXIgYSB0cmFuc2ZlciBpcyBidXN5LiAqLworICAgIGkyY19zbGF2ZV90cmFuc2Zlcl90IHRyYW5zZmVyOyAgICAgICAgICAvKiE8IEkyQyBzbGF2ZSB0cmFuc2ZlciBjb3B5LiAqLworICAgIHVpbnQzMl90IGV2ZW50TWFzazsgICAgICAgICAgICAgICAgICAgICAvKiE8IEEgbWFzayBvZiBlbmFibGVkIGV2ZW50cy4gKi8KKyAgICBpMmNfc2xhdmVfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjazsgLyohPCBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aGUgdHJhbnNmZXIgZXZlbnQuICovCisgICAgdm9pZCAqdXNlckRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQSBjYWxsYmFjayBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay4gKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYgLypfY3BsdXNwbHVzLiAqLworCisvKiEKKyAqIEBuYW1lIEluaXRpYWxpemF0aW9uIGFuZCBkZWluaXRpYWxpemF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBJMkMgcGVyaXBoZXJhbC4gQ2FsbCB0aGlzIEFQSSB0byB1bmdhdGUgdGhlIEkyQyBjbG9jaworICogYW5kIGNvbmZpZ3VyZSB0aGUgSTJDIHdpdGggbWFzdGVyIGNvbmZpZ3VyYXRpb24uCisgKgorICogQG5vdGUgVGhpcyBBUEkgc2hvdWxkIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcHBsaWNhdGlvbi4KKyAqIE90aGVyd2lzZSwgYW55IG9wZXJhdGlvbiB0byB0aGUgSTJDIG1vZHVsZSBjYW4gY2F1c2UgYSBoYXJkIGZhdWx0CisgKiBiZWNhdXNlIHRoZSBjbG9jayBpcyBub3QgZW5hYmxlZC4gVGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGNhbiBiZSBjdXN0b20gZmlsbGVkCisgKiBvciBpdCBjYW4gYmUgc2V0IHdpdGggZGVmYXVsdCB2YWx1ZXMgYnkgdXNpbmcgdGhlIEkyQ19NYXN0ZXJHZXREZWZhdWx0Q29uZmlnKCkuCisgKiBBZnRlciBjYWxsaW5nIHRoaXMgQVBJLCB0aGUgbWFzdGVyIGlzIHJlYWR5IHRvIHRyYW5zZmVyLgorICogVGhpcyBpcyBhbiBleGFtcGxlLgorICogQGNvZGUKKyAqIGkyY19tYXN0ZXJfY29uZmlnX3QgY29uZmlnID0geworICogLmVuYWJsZU1hc3RlciA9IHRydWUsCisgKiAuZW5hYmxlU3RvcEhvbGQgPSBmYWxzZSwKKyAqIC5oaWdoRHJpdmUgPSBmYWxzZSwKKyAqIC5iYXVkUmF0ZV9CcHMgPSAxMDAwMDAsCisgKiAuZ2xpdGNoRmlsdGVyV2lkdGggPSAwCisgKiB9OworICogSTJDX01hc3RlckluaXQoSTJDMCwgJmNvbmZpZywgMTIwMDAwMDBVKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICogQHBhcmFtIG1hc3RlckNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICogQHBhcmFtIHNyY0Nsb2NrX0h6IEkyQyBwZXJpcGhlcmFsIGNsb2NrIGZyZXF1ZW5jeSBpbiBIegorICovCit2b2lkIEkyQ19NYXN0ZXJJbml0KEkyQ19UeXBlICpiYXNlLCBjb25zdCBpMmNfbWFzdGVyX2NvbmZpZ190ICptYXN0ZXJDb25maWcsIHVpbnQzMl90IHNyY0Nsb2NrX0h6KTsKKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIEkyQyBwZXJpcGhlcmFsLiBDYWxsIHRoaXMgQVBJIHRvIHVuZ2F0ZSB0aGUgSTJDIGNsb2NrCisgKiBhbmQgaW5pdGlhbGl6ZSB0aGUgSTJDIHdpdGggdGhlIHNsYXZlIGNvbmZpZ3VyYXRpb24uCisgKgorICogQG5vdGUgVGhpcyBBUEkgc2hvdWxkIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcHBsaWNhdGlvbi4KKyAqIE90aGVyd2lzZSwgYW55IG9wZXJhdGlvbiB0byB0aGUgSTJDIG1vZHVsZSBjYW4gY2F1c2UgYSBoYXJkIGZhdWx0CisgKiBiZWNhdXNlIHRoZSBjbG9jayBpcyBub3QgZW5hYmxlZC4gVGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGNhbiBwYXJ0bHkgYmUgc2V0CisgKiB3aXRoIGRlZmF1bHQgdmFsdWVzIGJ5IEkyQ19TbGF2ZUdldERlZmF1bHRDb25maWcoKSBvciBpdCBjYW4gYmUgY3VzdG9tIGZpbGxlZCBieSB0aGUgdXNlci4KKyAqIFRoaXMgaXMgYW4gZXhhbXBsZS4KKyAqIEBjb2RlCisgKiBpMmNfc2xhdmVfY29uZmlnX3QgY29uZmlnID0geworICogLmVuYWJsZVNsYXZlID0gdHJ1ZSwKKyAqIC5lbmFibGVHZW5lcmFsQ2FsbCA9IGZhbHNlLAorICogLmFkZHJlc3NpbmdNb2RlID0ga0kyQ19BZGRyZXNzN2JpdCwKKyAqIC5zbGF2ZUFkZHJlc3MgPSAweDFEVSwKKyAqIC5lbmFibGVXYWtlVXAgPSBmYWxzZSwKKyAqIC5lbmFibGVoaWdoRHJpdmUgPSBmYWxzZSwKKyAqIC5lbmFibGVCYXVkUmF0ZUN0bCA9IGZhbHNlLAorICogLnNjbFN0b3BIb2xkVGltZV9ucyA9IDQwMDAKKyAqIH07CisgKiBJMkNfU2xhdmVJbml0KEkyQzAsICZjb25maWcsIDEyMDAwMDAwVSk7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIKKyAqIEBwYXJhbSBzbGF2ZUNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHNsYXZlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKiBAcGFyYW0gc3JjQ2xvY2tfSHogSTJDIHBlcmlwaGVyYWwgY2xvY2sgZnJlcXVlbmN5IGluIEh6CisgKi8KK3ZvaWQgSTJDX1NsYXZlSW5pdChJMkNfVHlwZSAqYmFzZSwgY29uc3QgaTJjX3NsYXZlX2NvbmZpZ190ICpzbGF2ZUNvbmZpZywgdWludDMyX3Qgc3JjQ2xvY2tfSHopOworCisvKiEKKyAqIEBicmllZiBEZS1pbml0aWFsaXplcyB0aGUgSTJDIG1hc3RlciBwZXJpcGhlcmFsLiBDYWxsIHRoaXMgQVBJIHRvIGdhdGUgdGhlIEkyQyBjbG9jay4KKyAqIFRoZSBJMkMgbWFzdGVyIG1vZHVsZSBjYW4ndCB3b3JrIHVubGVzcyB0aGUgSTJDX01hc3RlckluaXQgaXMgY2FsbGVkLgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICovCit2b2lkIEkyQ19NYXN0ZXJEZWluaXQoSTJDX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBEZS1pbml0aWFsaXplcyB0aGUgSTJDIHNsYXZlIHBlcmlwaGVyYWwuIENhbGxpbmcgdGhpcyBBUEkgZ2F0ZXMgdGhlIEkyQyBjbG9jay4KKyAqIFRoZSBJMkMgc2xhdmUgbW9kdWxlIGNhbid0IHdvcmsgdW5sZXNzIHRoZSBJMkNfU2xhdmVJbml0IGlzIGNhbGxlZCB0byBlbmFibGUgdGhlIGNsb2NrLgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICovCit2b2lkIEkyQ19TbGF2ZURlaW5pdChJMkNfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmICBTZXRzIHRoZSBJMkMgbWFzdGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHRvIGRlZmF1bHQgdmFsdWVzLgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgQVBJIGlzIHRvIGdldCB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQgZm9yIHVzZSBpbiB0aGUgSTJDX01hc3RlckNvbmZpZ3VyZSgpLgorICogVXNlIHRoZSBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgdW5jaGFuZ2VkIGluIHRoZSBJMkNfTWFzdGVyQ29uZmlndXJlKCkgb3IgbW9kaWZ5CisgKiB0aGUgc3RydWN0dXJlIGJlZm9yZSBjYWxsaW5nIHRoZSBJMkNfTWFzdGVyQ29uZmlndXJlKCkuCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUuCisgKiBAY29kZQorICogaTJjX21hc3Rlcl9jb25maWdfdCBjb25maWc7CisgKiBJMkNfTWFzdGVyR2V0RGVmYXVsdENvbmZpZygmY29uZmlnKTsKKyAqIEBlbmRjb2RlCisgKiBAcGFyYW0gbWFzdGVyQ29uZmlnIEEgcG9pbnRlciB0byB0aGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorKi8KK3ZvaWQgSTJDX01hc3RlckdldERlZmF1bHRDb25maWcoaTJjX21hc3Rlcl9jb25maWdfdCAqbWFzdGVyQ29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgIFNldHMgdGhlIEkyQyBzbGF2ZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byBkZWZhdWx0IHZhbHVlcy4KKyAqCisgKiBUaGUgcHVycG9zZSBvZiB0aGlzIEFQSSBpcyB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGluaXRpYWxpemVkIGZvciB1c2UgaW4gdGhlIEkyQ19TbGF2ZUNvbmZpZ3VyZSgpLgorICogTW9kaWZ5IGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlIGJlZm9yZSBjYWxsaW5nIHRoZSBJMkNfU2xhdmVDb25maWd1cmUoKS4KKyAqIFRoaXMgaXMgYW4gZXhhbXBsZS4KKyAqIEBjb2RlCisgKiBpMmNfc2xhdmVfY29uZmlnX3QgY29uZmlnOworICogSTJDX1NsYXZlR2V0RGVmYXVsdENvbmZpZygmY29uZmlnKTsKKyAqIEBlbmRjb2RlCisgKiBAcGFyYW0gc2xhdmVDb25maWcgQSBwb2ludGVyIHRvIHRoZSBzbGF2ZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBJMkNfU2xhdmVHZXREZWZhdWx0Q29uZmlnKGkyY19zbGF2ZV9jb25maWdfdCAqc2xhdmVDb25maWcpOworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIG9yIGRpc2FibGVzcyB0aGUgSTJDIHBlcmlwaGVyYWwgb3BlcmF0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIKKyAqIEBwYXJhbSBlbmFibGUgUGFzcyB0cnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSB0aGUgbW9kdWxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgSTJDX0VuYWJsZShJMkNfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkMxIHw9IEkyQ19DMV9JSUNFTl9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5DMSAmPSB+STJDX0MxX0lJQ0VOX01BU0s7CisgICAgfQorfQorCisvKiBAfSAqLworCisvKiEKKyAqIEBuYW1lIFN0YXR1cworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBJMkMgc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIKKyAqIEByZXR1cm4gc3RhdHVzIGZsYWcsIHVzZSBzdGF0dXMgZmxhZyB0byBBTkQgI19pMmNfZmxhZ3MgdG8gZ2V0IHRoZSByZWxhdGVkIHN0YXR1cy4KKyAqLwordWludDMyX3QgSTJDX01hc3RlckdldFN0YXR1c0ZsYWdzKEkyQ19UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgSTJDIHN0YXR1cyBmbGFncy4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgYmFzZSBwb2ludGVyCisgKiBAcmV0dXJuIHN0YXR1cyBmbGFnLCB1c2Ugc3RhdHVzIGZsYWcgdG8gQU5EICNfaTJjX2ZsYWdzIHRvIGdldCB0aGUgcmVsYXRlZCBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgSTJDX1NsYXZlR2V0U3RhdHVzRmxhZ3MoSTJDX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJHZXRTdGF0dXNGbGFncyhiYXNlKTsKK30KKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBJMkMgc3RhdHVzIGZsYWcgc3RhdGUuCisgKgorICogVGhlIGZvbGxvd2luZyBzdGF0dXMgcmVnaXN0ZXIgZmxhZ3MgY2FuIGJlIGNsZWFyZWQga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnIGFuZCBrSTJDX0ludFBlbmRpbmdGbGFnLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIKKyAqIEBwYXJhbSBzdGF0dXNNYXNrIFRoZSBzdGF0dXMgZmxhZyBtYXNrLCBkZWZpbmVkIGluIHR5cGUgaTJjX3N0YXR1c19mbGFnX3QuCisgKiAgICAgIFRoZSBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAqICAgICAgICAgIEBhcmcga0kyQ19TdGFydERldGVjdEZsYWcgKGlmIGF2YWlsYWJsZSkKKyAqICAgICAgICAgIEBhcmcga0kyQ19TdG9wRGV0ZWN0RmxhZyAoaWYgYXZhaWxhYmxlKQorICogICAgICAgICAgQGFyZyBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcKKyAqICAgICAgICAgIEBhcmcga0kyQ19JbnRQZW5kaW5nRmxhZ0ZsYWcKKyAqLworc3RhdGljIGlubGluZSB2b2lkIEkyQ19NYXN0ZXJDbGVhclN0YXR1c0ZsYWdzKEkyQ19UeXBlICpiYXNlLCB1aW50MzJfdCBzdGF0dXNNYXNrKQoreworLyogTXVzdCBjbGVhciB0aGUgU1RBUlRGIC8gU1RPUEYgYml0cyBwcmlvciB0byBjbGVhcmluZyBJSUNJRiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVAorICAgIGlmIChzdGF0dXNNYXNrICYga0kyQ19TdGFydERldGVjdEZsYWcpCisgICAgeworICAgICAgICAvKiBTaGlmdCB0aGUgb2RkLWJhbGwgZmxhZ3MgYmFjayBpbnRvIHBsYWNlLiAqLworICAgICAgICBiYXNlLT5GTFQgfD0gKHVpbnQ4X3QpKHN0YXR1c01hc2sgPj4gOFUpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgSTJDX0hBU19TVE9QX0RFVEVDVAorICAgIGlmIChzdGF0dXNNYXNrICYga0kyQ19TdG9wRGV0ZWN0RmxhZykKKyAgICB7CisgICAgICAgIC8qIFNoaWZ0IHRoZSBvZGQtYmFsbCBmbGFncyBiYWNrIGludG8gcGxhY2UuICovCisgICAgICAgIGJhc2UtPkZMVCB8PSAodWludDhfdCkoc3RhdHVzTWFzayA+PiA4VSk7CisgICAgfQorI2VuZGlmCisKKyAgICBiYXNlLT5TID0gKHVpbnQ4X3Qpc3RhdHVzTWFzazsKK30KKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBJMkMgc3RhdHVzIGZsYWcgc3RhdGUuCisgKgorICogVGhlIGZvbGxvd2luZyBzdGF0dXMgcmVnaXN0ZXIgZmxhZ3MgY2FuIGJlIGNsZWFyZWQga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnIGFuZCBrSTJDX0ludFBlbmRpbmdGbGFnCisgKgorICAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIKKyAgKiBAcGFyYW0gc3RhdHVzTWFzayBUaGUgc3RhdHVzIGZsYWcgbWFzaywgZGVmaW5lZCBpbiB0eXBlIGkyY19zdGF0dXNfZmxhZ190LgorICogICAgICBUaGUgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgKiAgICAgICAgICBAYXJnIGtJMkNfU3RhcnREZXRlY3RGbGFnIChpZiBhdmFpbGFibGUpCisgKiAgICAgICAgICBAYXJnIGtJMkNfU3RvcERldGVjdEZsYWcgKGlmIGF2YWlsYWJsZSkKKyAqICAgICAgICAgIEBhcmcga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnCisgKiAgICAgICAgICBAYXJnIGtJMkNfSW50UGVuZGluZ0ZsYWdGbGFnCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBJMkNfU2xhdmVDbGVhclN0YXR1c0ZsYWdzKEkyQ19UeXBlICpiYXNlLCB1aW50MzJfdCBzdGF0dXNNYXNrKQoreworICAgIEkyQ19NYXN0ZXJDbGVhclN0YXR1c0ZsYWdzKGJhc2UsIHN0YXR1c01hc2spOworfQorCisvKiBAfSAqLworCisvKiEKKyAqIEBuYW1lIEludGVycnVwdHMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBJMkMgaW50ZXJydXB0IHJlcXVlc3RzLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIKKyAqIEBwYXJhbSBtYXNrIGludGVycnVwdCBzb3VyY2UKKyAqICAgICBUaGUgcGFyYW1ldGVyIGNhbiBiZSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHNvdXJjZSBpZiBkZWZpbmVkOgorICogICAgIEBhcmcga0kyQ19HbG9iYWxJbnRlcnJ1cHRFbmFibGUKKyAqICAgICBAYXJnIGtJMkNfU3RvcERldGVjdEludGVycnVwdEVuYWJsZS9rSTJDX1N0YXJ0RGV0ZWN0SW50ZXJydXB0RW5hYmxlCisgKiAgICAgQGFyZyBrSTJDX1NkYVRpbWVvdXRJbnRlcnJ1cHRFbmFibGUKKyAqLwordm9pZCBJMkNfRW5hYmxlSW50ZXJydXB0cyhJMkNfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzayk7CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIEkyQyBpbnRlcnJ1cHQgcmVxdWVzdHMuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICogQHBhcmFtIG1hc2sgaW50ZXJydXB0IHNvdXJjZQorICogICAgIFRoZSBwYXJhbWV0ZXIgY2FuIGJlIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgc291cmNlIGlmIGRlZmluZWQ6CisgKiAgICAgQGFyZyBrSTJDX0dsb2JhbEludGVycnVwdEVuYWJsZQorICogICAgIEBhcmcga0kyQ19TdG9wRGV0ZWN0SW50ZXJydXB0RW5hYmxlL2tJMkNfU3RhcnREZXRlY3RJbnRlcnJ1cHRFbmFibGUKKyAqICAgICBAYXJnIGtJMkNfU2RhVGltZW91dEludGVycnVwdEVuYWJsZQorICovCit2b2lkIEkyQ19EaXNhYmxlSW50ZXJydXB0cyhJMkNfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzayk7CisKKy8qIQorICogQG5hbWUgRE1BIENvbnRyb2wKKyAqIEB7CisgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfRE1BX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfRE1BX1NVUFBPUlQKKy8qIQorICogQGJyaWVmIEVuYWJsZXMvZGlzYWJsZXMgdGhlIEkyQyBETUEgaW50ZXJydXB0LgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIKKyAqIEBwYXJhbSBlbmFibGUgdHJ1ZSB0byBlbmFibGUsIGZhbHNlIHRvIGRpc2FibGUKKyovCitzdGF0aWMgaW5saW5lIHZvaWQgSTJDX0VuYWJsZURNQShJMkNfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkMxIHw9IEkyQ19DMV9ETUFFTl9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5DMSAmPSB+STJDX0MxX0RNQUVOX01BU0s7CisgICAgfQorfQorCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfSTJDX0hBU19ETUFfU1VQUE9SVCAqLworCisvKiEKKyAqIEBicmllZiAgR2V0cyB0aGUgSTJDIHR4L3J4IGRhdGEgcmVnaXN0ZXIgYWRkcmVzcy4gVGhpcyBBUEkgaXMgdXNlZCB0byBwcm92aWRlIGEgdHJhbnNmZXIgYWRkcmVzcworICogZm9yIEkyQyBETUEgdHJhbnNmZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgYmFzZSBwb2ludGVyCisgKiBAcmV0dXJuIGRhdGEgcmVnaXN0ZXIgYWRkcmVzcworICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IEkyQ19HZXREYXRhUmVnQWRkcihJMkNfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90KSgmKGJhc2UtPkQpKTsKK30KKworLyogQH0gKi8KKy8qIQorICogQG5hbWUgQnVzIE9wZXJhdGlvbnMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgSTJDIG1hc3RlciB0cmFuc2ZlciBiYXVkIHJhdGUuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICogQHBhcmFtIGJhdWRSYXRlX0JwcyB0aGUgYmF1ZCByYXRlIHZhbHVlIGluIGJwcworICogQHBhcmFtIHNyY0Nsb2NrX0h6IFNvdXJjZSBjbG9jaworICovCit2b2lkIEkyQ19NYXN0ZXJTZXRCYXVkUmF0ZShJMkNfVHlwZSAqYmFzZSwgdWludDMyX3QgYmF1ZFJhdGVfQnBzLCB1aW50MzJfdCBzcmNDbG9ja19Ieik7CisKKy8qIQorICogQGJyaWVmIFNlbmRzIGEgU1RBUlQgb24gdGhlIEkyQyBidXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGluaXRpYXRlIGEgbmV3IG1hc3RlciBtb2RlIHRyYW5zZmVyIGJ5IHNlbmRpbmcgdGhlIFNUQVJUIHNpZ25hbC4KKyAqIFRoZSBzbGF2ZSBhZGRyZXNzIGlzIHNlbnQgZm9sbG93aW5nIHRoZSBJMkMgU1RBUlQgc2lnbmFsLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcgorICogQHBhcmFtIGFkZHJlc3MgNy1iaXQgc2xhdmUgZGV2aWNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZGlyZWN0aW9uIE1hc3RlciB0cmFuc2ZlciBkaXJlY3Rpb25zKHRyYW5zbWl0L3JlY2VpdmUpLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3VjY2Vzc2Z1bGx5IHNlbmQgdGhlIHN0YXJ0IHNpZ25hbC4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfQnVzeSBDdXJyZW50IGJ1cyBpcyBidXN5LgorICovCitzdGF0dXNfdCBJMkNfTWFzdGVyU3RhcnQoSTJDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgYWRkcmVzcywgaTJjX2RpcmVjdGlvbl90IGRpcmVjdGlvbik7CisKKy8qIQorICogQGJyaWVmIFNlbmRzIGEgU1RPUCBzaWduYWwgb24gdGhlIEkyQyBidXMuCisgKgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3VjY2Vzc2Z1bGx5IHNlbmQgdGhlIHN0b3Agc2lnbmFsLgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19UaW1lb3V0IFNlbmQgc3RvcCBzaWduYWwgZmFpbGVkLCB0aW1lb3V0LgorICovCitzdGF0dXNfdCBJMkNfTWFzdGVyU3RvcChJMkNfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIFNlbmRzIGEgUkVQRUFURUQgU1RBUlQgb24gdGhlIEkyQyBidXMuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyCisgKiBAcGFyYW0gYWRkcmVzcyA3LWJpdCBzbGF2ZSBkZXZpY2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBkaXJlY3Rpb24gTWFzdGVyIHRyYW5zZmVyIGRpcmVjdGlvbnModHJhbnNtaXQvcmVjZWl2ZSkuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTdWNjZXNzZnVsbHkgc2VuZCB0aGUgc3RhcnQgc2lnbmFsLgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19CdXN5IEN1cnJlbnQgYnVzIGlzIGJ1c3kgYnV0IG5vdCBvY2N1cGllZCBieSBjdXJyZW50IEkyQyBtYXN0ZXIuCisgKi8KK3N0YXR1c190IEkyQ19NYXN0ZXJSZXBlYXRlZFN0YXJ0KEkyQ19UeXBlICpiYXNlLCB1aW50OF90IGFkZHJlc3MsIGkyY19kaXJlY3Rpb25fdCBkaXJlY3Rpb24pOworCisvKiEKKyAqIEBicmllZiBQZXJmb3JtcyBhIHBvbGxpbmcgc2VuZCB0cmFuc2FjdGlvbiBvbiB0aGUgSTJDIGJ1cy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgVGhlIEkyQyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSB0eEJ1ZmYgVGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQuCisgKiBAcGFyYW0gdHhTaXplIFRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQuCisgKiBAcGFyYW0gZmxhZ3MgVHJhbnNmZXIgY29udHJvbCBmbGFnIHRvIGRlY2lkZSB3aGV0aGVyIG5lZWQgdG8gc2VuZCBhIHN0b3AsIHVzZSBrSTJDX1RyYW5zZmVyRGVmYXVsdEZsYWcKKyogIHRvIGlzc3VlIGEgc3RvcCBhbmQga0kyQ19UcmFuc2Zlck5vU3RvcCB0byBub3Qgc2VuZCBhIHN0b3AuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTdWNjZXNzZnVsbHkgY29tcGxldGUgdGhlIGRhdGEgdHJhbnNtaXNzaW9uLgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19BcmJpdHJhdGlvbkxvc3QgVHJhbnNmZXIgZXJyb3IsIGFyYml0cmF0aW9uIGxvc3QuCisgKiBAcmV0dmFsIGtTdGF0YXVzX0kyQ19OYWsgVHJhbnNmZXIgZXJyb3IsIHJlY2VpdmUgTkFLIGR1cmluZyB0cmFuc2Zlci4KKyAqLworc3RhdHVzX3QgSTJDX01hc3RlcldyaXRlQmxvY2tpbmcoSTJDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKnR4QnVmZiwgc2l6ZV90IHR4U2l6ZSwgdWludDMyX3QgZmxhZ3MpOworCisvKiEKKyAqIEBicmllZiBQZXJmb3JtcyBhIHBvbGxpbmcgcmVjZWl2ZSB0cmFuc2FjdGlvbiBvbiB0aGUgSTJDIGJ1cy4KKyAqCisgKiBAbm90ZSBUaGUgSTJDX01hc3RlclJlYWRCbG9ja2luZyBmdW5jdGlvbiBzdG9wcyB0aGUgYnVzIGJlZm9yZSByZWFkaW5nIHRoZSBmaW5hbCBieXRlLgorICogV2l0aG91dCBzdG9wcGluZyB0aGUgYnVzIHByaW9yIGZvciB0aGUgZmluYWwgcmVhZCwgdGhlIGJ1cyBpc3N1ZXMgYW5vdGhlciByZWFkLCByZXN1bHRpbmcKKyAqIGluIGdhcmJhZ2UgZGF0YSBiZWluZyByZWFkIGludG8gdGhlIGRhdGEgcmVnaXN0ZXIuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIHJ4QnVmZiBUaGUgcG9pbnRlciB0byB0aGUgZGF0YSB0byBzdG9yZSB0aGUgcmVjZWl2ZWQgZGF0YS4KKyAqIEBwYXJhbSByeFNpemUgVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBiZSByZWNlaXZlZC4KKyAqIEBwYXJhbSBmbGFncyBUcmFuc2ZlciBjb250cm9sIGZsYWcgdG8gZGVjaWRlIHdoZXRoZXIgbmVlZCB0byBzZW5kIGEgc3RvcCwgdXNlIGtJMkNfVHJhbnNmZXJEZWZhdWx0RmxhZworKiAgdG8gaXNzdWUgYSBzdG9wIGFuZCBrSTJDX1RyYW5zZmVyTm9TdG9wIHRvIG5vdCBzZW5kIGEgc3RvcC4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN1Y2Nlc3NmdWxseSBjb21wbGV0ZSB0aGUgZGF0YSB0cmFuc21pc3Npb24uCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX1RpbWVvdXQgU2VuZCBzdG9wIHNpZ25hbCBmYWlsZWQsIHRpbWVvdXQuCisgKi8KK3N0YXR1c190IEkyQ19NYXN0ZXJSZWFkQmxvY2tpbmcoSTJDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgKnJ4QnVmZiwgc2l6ZV90IHJ4U2l6ZSwgdWludDMyX3QgZmxhZ3MpOworCisvKiEKKyAqIEBicmllZiBQZXJmb3JtcyBhIHBvbGxpbmcgc2VuZCB0cmFuc2FjdGlvbiBvbiB0aGUgSTJDIGJ1cy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgVGhlIEkyQyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSB0eEJ1ZmYgVGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQuCisgKiBAcGFyYW0gdHhTaXplIFRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTdWNjZXNzZnVsbHkgY29tcGxldGUgdGhlIGRhdGEgdHJhbnNtaXNzaW9uLgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19BcmJpdHJhdGlvbkxvc3QgVHJhbnNmZXIgZXJyb3IsIGFyYml0cmF0aW9uIGxvc3QuCisgKiBAcmV0dmFsIGtTdGF0YXVzX0kyQ19OYWsgVHJhbnNmZXIgZXJyb3IsIHJlY2VpdmUgTkFLIGR1cmluZyB0cmFuc2Zlci4KKyAqLworc3RhdHVzX3QgSTJDX1NsYXZlV3JpdGVCbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqdHhCdWZmLCBzaXplX3QgdHhTaXplKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgYSBwb2xsaW5nIHJlY2VpdmUgdHJhbnNhY3Rpb24gb24gdGhlIEkyQyBidXMuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIHJ4QnVmZiBUaGUgcG9pbnRlciB0byB0aGUgZGF0YSB0byBzdG9yZSB0aGUgcmVjZWl2ZWQgZGF0YS4KKyAqIEBwYXJhbSByeFNpemUgVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBiZSByZWNlaXZlZC4KKyAqLwordm9pZCBJMkNfU2xhdmVSZWFkQmxvY2tpbmcoSTJDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgKnJ4QnVmZiwgc2l6ZV90IHJ4U2l6ZSk7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIGEgbWFzdGVyIHBvbGxpbmcgdHJhbnNmZXIgb24gdGhlIEkyQyBidXMuCisgKgorICogQG5vdGUgVGhlIEFQSSBkb2VzIG5vdCByZXR1cm4gdW50aWwgdGhlIHRyYW5zZmVyIHN1Y2NlZWRzIG9yIGZhaWxzIGR1ZQorICogdG8gYXJiaXRyYXRpb24gbG9zdCBvciByZWNlaXZpbmcgYSBOQUsuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHhmZXIgUG9pbnRlciB0byB0aGUgdHJhbnNmZXIgc3RydWN0dXJlLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIHRoZSBkYXRhIHRyYW5zbWlzc2lvbi4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfQnVzeSBQcmV2aW91cyB0cmFuc21pc3Npb24gc3RpbGwgbm90IGZpbmlzaGVkLgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19UaW1lb3V0IFRyYW5zZmVyIGVycm9yLCB3YWl0IHNpZ25hbCB0aW1lb3V0LgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19BcmJpdHJhdGlvbkxvc3QgVHJhbnNmZXIgZXJyb3IsIGFyYml0cmF0aW9uIGxvc3QuCisgKiBAcmV0dmFsIGtTdGF0YXVzX0kyQ19OYWsgVHJhbnNmZXIgZXJyb3IsIHJlY2VpdmUgTkFLIGR1cmluZyB0cmFuc2Zlci4KKyAqLworc3RhdHVzX3QgSTJDX01hc3RlclRyYW5zZmVyQmxvY2tpbmcoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCAqeGZlcik7CisKKy8qIEB9ICovCisKKy8qIQorICogQG5hbWUgVHJhbnNhY3Rpb25hbAorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgSTJDIGhhbmRsZSB3aGljaCBpcyB1c2VkIGluIHRyYW5zYWN0aW9uYWwgZnVuY3Rpb25zLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl9oYW5kbGVfdCBzdHJ1Y3R1cmUgdG8gc3RvcmUgdGhlIHRyYW5zZmVyIHN0YXRlLgorICogQHBhcmFtIGNhbGxiYWNrIHBvaW50ZXIgdG8gdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KKyAqIEBwYXJhbSB1c2VyRGF0YSB1c2VyIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICovCit2b2lkIEkyQ19NYXN0ZXJUcmFuc2ZlckNyZWF0ZUhhbmRsZShJMkNfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgYSBtYXN0ZXIgaW50ZXJydXB0IG5vbi1ibG9ja2luZyB0cmFuc2ZlciBvbiB0aGUgSTJDIGJ1cy4KKyAqCisgKiBAbm90ZSBDYWxsaW5nIHRoZSBBUEkgcmV0dXJucyBpbW1lZGlhdGVseSBhZnRlciB0cmFuc2ZlciBpbml0aWF0ZXMuIFRoZSB1c2VyIG5lZWRzCisgKiB0byBjYWxsIEkyQ19NYXN0ZXJHZXRUcmFuc2ZlckNvdW50IHRvIHBvbGwgdGhlIHRyYW5zZmVyIHN0YXR1cyB0byBjaGVjayB3aGV0aGVyCisgKiB0aGUgdHJhbnNmZXIgaXMgZmluaXNoZWQuIElmIHRoZSByZXR1cm4gc3RhdHVzIGlzIG5vdCBrU3RhdHVzX0kyQ19CdXN5LCB0aGUgdHJhbnNmZXIKKyAqIGlzIGZpbmlzaGVkLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqIEBwYXJhbSB4ZmVyIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl90cmFuc2Zlcl90IHN0cnVjdHVyZS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN1Y2Nlc3NmdWxseSBzdGFydCB0aGUgZGF0YSB0cmFuc21pc3Npb24uCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX0J1c3kgUHJldmlvdXMgdHJhbnNtaXNzaW9uIHN0aWxsIG5vdCBmaW5pc2hlZC4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfVGltZW91dCBUcmFuc2ZlciBlcnJvciwgd2FpdCBzaWduYWwgdGltZW91dC4KKyAqLworc3RhdHVzX3QgSTJDX01hc3RlclRyYW5zZmVyTm9uQmxvY2tpbmcoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp4ZmVyKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgbWFzdGVyIHRyYW5zZmVyIHN0YXR1cyBkdXJpbmcgYSBpbnRlcnJ1cHQgbm9uLWJsb2NraW5nIHRyYW5zZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgc28gZmFyIGJ5IHRoZSBub24tYmxvY2tpbmcgdHJhbnNhY3Rpb24uCisgKiBAcmV0dmFsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50IGNvdW50IGlzIEludmFsaWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTdWNjZXNzZnVsbHkgcmV0dXJuIHRoZSBjb3VudC4KKyAqLworc3RhdHVzX3QgSTJDX01hc3RlclRyYW5zZmVyR2V0Q291bnQoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgc2l6ZV90ICpjb3VudCk7CisKKy8qIQorICogQGJyaWVmIEFib3J0cyBhbiBpbnRlcnJ1cHQgbm9uLWJsb2NraW5nIHRyYW5zZmVyIGVhcmx5LgorICoKKyAqIEBub3RlIFRoaXMgQVBJIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUgd2hlbiBhbiBpbnRlcnJ1cHQgbm9uLWJsb2NraW5nIHRyYW5zZmVyIGluaXRpYXRlcworICogdG8gYWJvcnQgdGhlIHRyYW5zZmVyIGVhcmx5LgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZQorICovCit2b2lkIEkyQ19NYXN0ZXJUcmFuc2ZlckFib3J0KEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBNYXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSBpMmNIYW5kbGUgcG9pbnRlciB0byBpMmNfbWFzdGVyX2hhbmRsZV90IHN0cnVjdHVyZS4KKyAqLwordm9pZCBJMkNfTWFzdGVyVHJhbnNmZXJIYW5kbGVJUlEoSTJDX1R5cGUgKmJhc2UsIHZvaWQgKmkyY0hhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBJMkMgaGFuZGxlIHdoaWNoIGlzIHVzZWQgaW4gdHJhbnNhY3Rpb25hbCBmdW5jdGlvbnMuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBpMmNfc2xhdmVfaGFuZGxlX3Qgc3RydWN0dXJlIHRvIHN0b3JlIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqIEBwYXJhbSBjYWxsYmFjayBwb2ludGVyIHRvIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCisgKiBAcGFyYW0gdXNlckRhdGEgdXNlciBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKyAqLwordm9pZCBJMkNfU2xhdmVUcmFuc2ZlckNyZWF0ZUhhbmRsZShJMkNfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19zbGF2ZV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSk7CisKKy8qIQorICogQGJyaWVmIFN0YXJ0cyBhY2NlcHRpbmcgc2xhdmUgdHJhbnNmZXJzLgorICoKKyAqIENhbGwgdGhpcyBBUEkgYWZ0ZXIgY2FsbGluZyB0aGUgSTJDX1NsYXZlSW5pdCgpIGFuZCBJMkNfU2xhdmVUcmFuc2ZlckNyZWF0ZUhhbmRsZSgpIHRvIHN0YXJ0IHByb2Nlc3NpbmcKKyAqIHRyYW5zYWN0aW9ucyBkcml2ZW4gYnkgYW4gSTJDIG1hc3Rlci4gVGhlIHNsYXZlIG1vbml0b3JzIHRoZSBJMkMgYnVzIGFuZCBwYXNzZXMgZXZlbnRzIHRvIHRoZQorICogY2FsbGJhY2sgdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNhbGwgdG8gSTJDX1NsYXZlVHJhbnNmZXJDcmVhdGVIYW5kbGUoKS4gVGhlIGNhbGxiYWNrIGlzIGFsd2F5cyBpbnZva2VkCisgKiBmcm9tIHRoZSBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBUaGUgc2V0IG9mIGV2ZW50cyByZWNlaXZlZCBieSB0aGUgY2FsbGJhY2sgaXMgY3VzdG9taXphYmxlLiBUbyBkbyBzbywgc2V0IHRoZSBAYSBldmVudE1hc2sgcGFyYW1ldGVyIHRvCisgKiB0aGUgT1InZCBjb21iaW5hdGlvbiBvZiAjaTJjX3NsYXZlX3RyYW5zZmVyX2V2ZW50X3QgZW51bWVyYXRvcnMgZm9yIHRoZSBldmVudHMgeW91IHdpc2ggdG8gcmVjZWl2ZS4KKyAqIFRoZSAja0kyQ19TbGF2ZVRyYW5zbWl0RXZlbnQgYW5kICNrTFBJMkNfU2xhdmVSZWNlaXZlRXZlbnQgZXZlbnRzIGFyZSBhbHdheXMgZW5hYmxlZCBhbmQgZG8gbm90IG5lZWQKKyAqIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBtYXNrLiBBbHRlcm5hdGl2ZWx5LCBwYXNzIDAgdG8gZ2V0IGEgZGVmYXVsdCBzZXQgb2Ygb25seSB0aGUgdHJhbnNtaXQgYW5kCisgKiByZWNlaXZlIGV2ZW50cyB0aGF0IGFyZSBhbHdheXMgZW5hYmxlZC4gSW4gYWRkaXRpb24sIHRoZSAja0kyQ19TbGF2ZUFsbEV2ZW50cyBjb25zdGFudCBpcyBwcm92aWRlZCBhcworICogYSBjb252ZW5pZW50IHdheSB0byBlbmFibGUgYWxsIGV2ZW50cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBUaGUgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBQb2ludGVyIHRvICNpMmNfc2xhdmVfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKiBAcGFyYW0gZXZlbnRNYXNrIEJpdCBtYXNrIGZvcm1lZCBieSBPUidpbmcgdG9nZXRoZXIgI2kyY19zbGF2ZV90cmFuc2Zlcl9ldmVudF90IGVudW1lcmF0b3JzIHRvIHNwZWNpZnkKKyAqICAgICAgd2hpY2ggZXZlbnRzIHRvIHNlbmQgdG8gdGhlIGNhbGxiYWNrLiBPdGhlciBhY2NlcHRlZCB2YWx1ZXMgYXJlIDAgdG8gZ2V0IGEgZGVmYXVsdCBzZXQgb2YKKyAqICAgICAgb25seSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgZXZlbnRzLCBhbmQgI2tJMkNfU2xhdmVBbGxFdmVudHMgdG8gZW5hYmxlIGFsbCBldmVudHMuCisgKgorICogQHJldHZhbCAja1N0YXR1c19TdWNjZXNzIFNsYXZlIHRyYW5zZmVycyB3ZXJlIHN1Y2Nlc3NmdWxseSBzdGFydGVkLgorICogQHJldHZhbCAja1N0YXR1c19JMkNfQnVzeSBTbGF2ZSB0cmFuc2ZlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gc3RhcnRlZCBvbiB0aGlzIGhhbmRsZS4KKyAqLworc3RhdHVzX3QgSTJDX1NsYXZlVHJhbnNmZXJOb25CbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgaTJjX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUsIHVpbnQzMl90IGV2ZW50TWFzayk7CisKKy8qIQorICogQGJyaWVmIEFib3J0cyB0aGUgc2xhdmUgdHJhbnNmZXIuCisgKgorICogQG5vdGUgVGhpcyBBUEkgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZSB0byBzdG9wIHNsYXZlIGZvciBoYW5kbGluZyB0aGUgYnVzIGV2ZW50cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGkyY19zbGF2ZV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqLwordm9pZCBJMkNfU2xhdmVUcmFuc2ZlckFib3J0KEkyQ19UeXBlICpiYXNlLCBpMmNfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIHNsYXZlIHRyYW5zZmVyIHJlbWFpbmluZyBieXRlcyBkdXJpbmcgYSBpbnRlcnJ1cHQgbm9uLWJsb2NraW5nIHRyYW5zZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gaTJjX3NsYXZlX2hhbmRsZV90IHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgc28gZmFyIGJ5IHRoZSBub24tYmxvY2tpbmcgdHJhbnNhY3Rpb24uCisgKiBAcmV0dmFsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50IGNvdW50IGlzIEludmFsaWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTdWNjZXNzZnVsbHkgcmV0dXJuIHRoZSBjb3VudC4KKyAqLworc3RhdHVzX3QgSTJDX1NsYXZlVHJhbnNmZXJHZXRDb3VudChJMkNfVHlwZSAqYmFzZSwgaTJjX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUsIHNpemVfdCAqY291bnQpOworCisvKiEKKyAqIEBicmllZiBTbGF2ZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIGkyY0hhbmRsZSBwb2ludGVyIHRvIGkyY19zbGF2ZV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZQorICovCit2b2lkIEkyQ19TbGF2ZVRyYW5zZmVySGFuZGxlSVJRKEkyQ19UeXBlICpiYXNlLCB2b2lkICppMmNIYW5kbGUpOworCisvKiBAfSAqLworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYgLypfY3BsdXNwbHVzLiAqLworLypAfSovCisKKyNlbmRpZiAvKiBfRlNMX0kyQ19IXyovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9pMmNfZWRtYS5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjX2VkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGE0MTVlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjX2VkbWEuYwpAQCAtMCwwICsxLDU2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfaTJjX2VkbWEuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKjwhIEBicmVpZiBTdHJ1Y3R1cmUgZGVmaW5pdGlvbiBmb3IgaTJjX21hc3Rlcl9lZG1hX3ByaXZhdGVfaGFuZGxlX3QuIFRoZSBzdHJ1Y3R1cmUgaXMgcHJpdmF0ZS4gKi8KK3R5cGVkZWYgc3RydWN0IF9pMmNfbWFzdGVyX2VkbWFfcHJpdmF0ZV9oYW5kbGUKK3sKKyAgICBJMkNfVHlwZSAqYmFzZTsKKyAgICBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZTsKK30gaTJjX21hc3Rlcl9lZG1hX3ByaXZhdGVfaGFuZGxlX3Q7CisKKy8qISBAYnJpZWYgaTJjIG1hc3RlciBETUEgdHJhbnNmZXIgc3RhdGUuICovCitlbnVtIF9pMmNfbWFzdGVyX2RtYV90cmFuc2Zlcl9zdGF0ZXMKK3sKKyAgICBrSWRsZVN0YXRlID0gMHgwVSwgICAgICAgICAvKiE8IEkyQyBidXMgaWRsZS4gKi8KKyAgICBrVHJhbnNmZXJEYXRhU3RhdGUgPSAweDFVLCAvKiE8IDctYml0IGFkZHJlc3MgY2hlY2sgc3RhdGUuICovCit9OworCisvKiEgQGJyaWVmIENvbW1vbiBzZXRzIG9mIGZsYWdzIHVzZWQgYnkgdGhlIGRyaXZlci4gKi8KK2VudW0gX2kyY19mbGFnX2NvbnN0YW50cworeworLyohIEFsbCBmbGFncyB3aGljaCBhcmUgY2xlYXJlZCBieSB0aGUgZHJpdmVyIHVwb24gc3RhcnRpbmcgYSB0cmFuc2Zlci4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QKKyAgICBrQ2xlYXJGbGFncyA9IGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZyB8IGtJMkNfSW50UGVuZGluZ0ZsYWcgfCBrSTJDX1N0YXJ0RGV0ZWN0RmxhZyB8IGtJMkNfU3RvcERldGVjdEZsYWcsCisjZWxpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QKKyAgICBrQ2xlYXJGbGFncyA9IGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZyB8IGtJMkNfSW50UGVuZGluZ0ZsYWcgfCBrSTJDX1N0b3BEZXRlY3RGbGFnLAorI2Vsc2UKKyAgICBrQ2xlYXJGbGFncyA9IGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZyB8IGtJMkNfSW50UGVuZGluZ0ZsYWcsCisjZW5kaWYKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBFRE1BIGNhbGxiYWNrIGZvciBJMkMgbWFzdGVyIEVETUEgZHJpdmVyLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgRURNQSBoYW5kbGVyIGZvciBJMkMgbWFzdGVyIEVETUEgZHJpdmVyCisgKiBAcGFyYW0gdXNlckRhdGEgdXNlciBwYXJhbSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIEkyQ19NYXN0ZXJUcmFuc2ZlckNhbGxiYWNrRURNQShlZG1hX2hhbmRsZV90ICpoYW5kbGUsIHZvaWQgKnVzZXJEYXRhLCBib29sIHRyYW5zZmVyRG9uZSwgdWludDMyX3QgdGNkcyk7CisKKy8qIQorICogQGJyaWVmIENoZWNrIGFuZCBjbGVhciBzdGF0dXMgb3BlcmF0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBzdGF0dXMgY3VycmVudCBpMmMgaGFyZHdhcmUgc3RhdHVzLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgTm8gZXJyb3IgZm91bmQuCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX0FyYml0cmF0aW9uTG9zdCBUcmFuc2ZlciBlcnJvciwgYXJiaXRyYXRpb24gbG9zdC4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfTmFrIFJlY2VpdmVkIE5hayBlcnJvci4KKyAqLworc3RhdGljIHN0YXR1c190IEkyQ19DaGVja0FuZENsZWFyRXJyb3IoSTJDX1R5cGUgKmJhc2UsIHVpbnQzMl90IHN0YXR1cyk7CisKKy8qIQorICogQGJyaWVmIEVETUEgY29uZmlnIGZvciBJMkMgbWFzdGVyIGRyaXZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlCisgKi8KK3N0YXRpYyB2b2lkIEkyQ19NYXN0ZXJUcmFuc2ZlckVETUFDb25maWcoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgU2V0IHVwIG1hc3RlciB0cmFuc2Zlciwgc2VuZCBzbGF2ZSBhZGRyZXNzIGFuZCBzdWIgYWRkcmVzcyhpZiBhbnkpLCB3YWl0IHVudGlsIHRoZQorICogd2FpdCB1bnRpbCBhZGRyZXNzIHNlbnQgc3RhdHVzIHJldHVybi4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlCisgKiBAcGFyYW0geGZlciBwb2ludGVyIHRvIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHN0YXR1c190IEkyQ19Jbml0VHJhbnNmZXJTdGF0ZU1hY2hpbmVFRE1BKEkyQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCAqeGZlcik7CisKKy8qIQorICogQGJyaWVmIEdldCB0aGUgSTJDIGluc3RhbmNlIGZyb20gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBJMkMgaW5zdGFuY2UuCisgKi8KK2V4dGVybiB1aW50MzJfdCBJMkNfR2V0SW5zdGFuY2UoSTJDX1R5cGUgKmJhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKjwhIFByaXZhdGUgaGFuZGxlIG9ubHkgdXNlZCBmb3IgaW50ZXJuYWxseS4gKi8KK3N0YXRpYyBpMmNfbWFzdGVyX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCBzX2VkbWFQcml2YXRlSGFuZGxlW0ZTTF9GRUFUVVJFX1NPQ19JMkNfQ09VTlRdOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIEkyQ19NYXN0ZXJUcmFuc2ZlckNhbGxiYWNrRURNQShlZG1hX2hhbmRsZV90ICpoYW5kbGUsIHZvaWQgKnVzZXJEYXRhLCBib29sIHRyYW5zZmVyRG9uZSwgdWludDMyX3QgdGNkcykKK3sKKyAgICBpMmNfbWFzdGVyX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqaTJjUHJpdmF0ZUhhbmRsZSA9IChpMmNfbWFzdGVyX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqKXVzZXJEYXRhOworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgIC8qIERpc2FibGUgRE1BLiAqLworICAgIEkyQ19FbmFibGVETUEoaTJjUHJpdmF0ZUhhbmRsZS0+YmFzZSwgZmFsc2UpOworCisgICAgLyogU2VuZCBzdG9wIGlmIGtJMkNfVHJhbnNmZXJOb1N0b3AgZmxhZyBpcyBub3QgYXNzZXJ0ZWQuICovCisgICAgaWYgKCEoaTJjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT50cmFuc2Zlci5mbGFncyAmIGtJMkNfVHJhbnNmZXJOb1N0b3BGbGFnKSkKKyAgICB7CisgICAgICAgIGlmIChpMmNQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnRyYW5zZmVyLmRpcmVjdGlvbiA9PSBrSTJDX1JlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoYW5nZSB0byBzZW5kIE5BSyBhdCB0aGUgbGFzdCBieXRlLiAqLworICAgICAgICAgICAgaTJjUHJpdmF0ZUhhbmRsZS0+YmFzZS0+QzEgfD0gSTJDX0MxX1RYQUtfTUFTSzsKKworICAgICAgICAgICAgLyogV2FpdCB0aGUgbGFzdCBkYXRhIHRvIGJlIHJlY2VpdmVkLiAqLworICAgICAgICAgICAgd2hpbGUgKCEoaTJjUHJpdmF0ZUhhbmRsZS0+YmFzZS0+UyAmIGtJMkNfVHJhbnNmZXJDb21wbGV0ZUZsYWcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBTZW5kIHN0b3Agc2lnbmFsLiAqLworICAgICAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclN0b3AoaTJjUHJpdmF0ZUhhbmRsZS0+YmFzZSk7CisKKyAgICAgICAgICAgIC8qIFJlYWQgdGhlIGxhc3QgZGF0YSBieXRlLiAqLworICAgICAgICAgICAgKihpMmNQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnRyYW5zZmVyLmRhdGEgKyBpMmNQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplIC0gMSkgPQorICAgICAgICAgICAgICAgIGkyY1ByaXZhdGVIYW5kbGUtPmJhc2UtPkQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBXYWl0IHRoZSBsYXN0IGRhdGEgdG8gYmUgc2VudC4gKi8KKyAgICAgICAgICAgIHdoaWxlICghKGkyY1ByaXZhdGVIYW5kbGUtPmJhc2UtPlMgJiBrSTJDX1RyYW5zZmVyQ29tcGxldGVGbGFnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogU2VuZCBzdG9wIHNpZ25hbC4gKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJTdG9wKGkyY1ByaXZhdGVIYW5kbGUtPmJhc2UpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpMmNQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnRyYW5zZmVyLmRpcmVjdGlvbiA9PSBrSTJDX1JlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoYW5nZSB0byBzZW5kIE5BSyBhdCB0aGUgbGFzdCBieXRlLiAqLworICAgICAgICAgICAgaTJjUHJpdmF0ZUhhbmRsZS0+YmFzZS0+QzEgfD0gSTJDX0MxX1RYQUtfTUFTSzsKKworICAgICAgICAgICAgLyogV2FpdCB0aGUgbGFzdCBkYXRhIHRvIGJlIHJlY2VpdmVkLiAqLworICAgICAgICAgICAgd2hpbGUgKCEoaTJjUHJpdmF0ZUhhbmRsZS0+YmFzZS0+UyAmIGtJMkNfVHJhbnNmZXJDb21wbGV0ZUZsYWcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBDaGFuZ2UgZGlyZWN0aW9uIHRvIHNlbmQuICovCisgICAgICAgICAgICBpMmNQcml2YXRlSGFuZGxlLT5iYXNlLT5DMSB8PSBJMkNfQzFfVFhfTUFTSzsKKworICAgICAgICAgICAgLyogUmVhZCB0aGUgbGFzdCBkYXRhIGJ5dGUuICovCisgICAgICAgICAgICAqKGkyY1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+dHJhbnNmZXIuZGF0YSArIGkyY1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUgLSAxKSA9CisgICAgICAgICAgICAgICAgaTJjUHJpdmF0ZUhhbmRsZS0+YmFzZS0+RDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGkyY1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+c3RhdGUgPSBrSWRsZVN0YXRlOworCisgICAgaWYgKGkyY1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+Y29tcGxldGlvbkNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaTJjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT5jb21wbGV0aW9uQ2FsbGJhY2soaTJjUHJpdmF0ZUhhbmRsZS0+YmFzZSwgaTJjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+dXNlckRhdGEpOworICAgIH0KK30KKworc3RhdGljIHN0YXR1c190IEkyQ19DaGVja0FuZENsZWFyRXJyb3IoSTJDX1R5cGUgKmJhc2UsIHVpbnQzMl90IHN0YXR1cykKK3sKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBrU3RhdHVzX1N1Y2Nlc3M7CisKKyAgICAvKiBDaGVjayBhcmJpdHJhdGlvbiBsb3N0LiAqLworICAgIGlmIChzdGF0dXMgJiBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcpCisgICAgeworICAgICAgICAvKiBDbGVhciBhcmJpdHJhdGlvbiBsb3N0IGZsYWcuICovCisgICAgICAgIGJhc2UtPlMgPSBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWc7CisgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfSTJDX0FyYml0cmF0aW9uTG9zdDsKKyAgICB9CisgICAgLyogQ2hlY2sgTkFLICovCisgICAgZWxzZSBpZiAoc3RhdHVzICYga0kyQ19SZWNlaXZlTmFrRmxhZykKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfSTJDX05hazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RhdHVzX3QgSTJDX0luaXRUcmFuc2ZlclN0YXRlTWFjaGluZUVETUEoSTJDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp4ZmVyKQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydCh4ZmVyKTsKKworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgIGlmIChoYW5kbGUtPnN0YXRlICE9IGtJZGxlU3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JMkNfQnVzeTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaTJjX2RpcmVjdGlvbl90IGRpcmVjdGlvbiA9IHhmZXItPmRpcmVjdGlvbjsKKworICAgICAgICAvKiBJbml0IHRoZSBoYW5kbGUgbWVtYmVyLiAqLworICAgICAgICBoYW5kbGUtPnRyYW5zZmVyID0gKnhmZXI7CisKKyAgICAgICAgLyogU2F2ZSB0b3RhbCB0cmFuc2ZlciBzaXplLiAqLworICAgICAgICBoYW5kbGUtPnRyYW5zZmVyU2l6ZSA9IHhmZXItPmRhdGFTaXplOworCisgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrVHJhbnNmZXJEYXRhU3RhdGU7CisKKyAgICAgICAgLyogQ2xlYXIgYWxsIHN0YXR1cyBiZWZvcmUgdHJhbnNmZXIuICovCisgICAgICAgIEkyQ19NYXN0ZXJDbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtDbGVhckZsYWdzKTsKKworICAgICAgICAvKiBDaGFuZ2UgdG8gc2VuZCB3cml0ZSBhZGRyZXNzIHdoZW4gaXQncyBhIHJlYWQgb3BlcmF0aW9uIHdpdGggY29tbWFuZC4gKi8KKyAgICAgICAgaWYgKCh4ZmVyLT5zdWJhZGRyZXNzU2l6ZSA+IDApICYmICh4ZmVyLT5kaXJlY3Rpb24gPT0ga0kyQ19SZWFkKSkKKyAgICAgICAgeworICAgICAgICAgICAgZGlyZWN0aW9uID0ga0kyQ19Xcml0ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIElmIHJlcGVhdGVkIHN0YXJ0IGlzIHJlcXVlc3RlZCwgc2VuZCByZXBlYXRlZCBzdGFydC4gKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZmxhZ3MgJiBrSTJDX1RyYW5zZmVyUmVwZWF0ZWRTdGFydEZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJSZXBlYXRlZFN0YXJ0KGJhc2UsIGhhbmRsZS0+dHJhbnNmZXIuc2xhdmVBZGRyZXNzLCBkaXJlY3Rpb24pOworICAgICAgICB9CisgICAgICAgIGVsc2UgLyogRm9yIG5vcm1hbCB0cmFuc2Zlciwgc2VuZCBzdGFydC4gKi8KKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclN0YXJ0KGJhc2UsIGhhbmRsZS0+dHJhbnNmZXIuc2xhdmVBZGRyZXNzLCBkaXJlY3Rpb24pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0ludFBlbmRpbmdGbGFnKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUncyB0cmFuc2ZlciBlcnJvci4gKi8KKyAgICAgICAgcmVzdWx0ID0gSTJDX0NoZWNrQW5kQ2xlYXJFcnJvcihiYXNlLCBiYXNlLT5TKTsKKworICAgICAgICAvKiBSZXR1cm4gaWYgZXJyb3IuICovCisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0ga1N0YXR1c19JMkNfTmFrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfSTJDX0FkZHJfTmFrOworCisgICAgICAgICAgICAgICAgaWYgKEkyQ19NYXN0ZXJTdG9wKGJhc2UpICE9IGtTdGF0dXNfU3VjY2VzcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfSTJDX1RpbWVvdXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+Y29tcGxldGlvbkNhbGxiYWNrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKGhhbmRsZS0+Y29tcGxldGlvbkNhbGxiYWNrKShiYXNlLCBoYW5kbGUsIHJlc3VsdCwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLyogU2VuZCBzdWJhZGRyZXNzLiAqLworICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5zdWJhZGRyZXNzU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDbGVhciBpbnRlcnJ1cHQgcGVuZGluZyBmbGFnLiAqLworICAgICAgICAgICAgICAgIGJhc2UtPlMgPSBrSTJDX0ludFBlbmRpbmdGbGFnOworCisgICAgICAgICAgICAgICAgaGFuZGxlLT50cmFuc2Zlci5zdWJhZGRyZXNzU2l6ZS0tOworICAgICAgICAgICAgICAgIGJhc2UtPkQgPSAoKGhhbmRsZS0+dHJhbnNmZXIuc3ViYWRkcmVzcykgPj4gKDggKiBoYW5kbGUtPnRyYW5zZmVyLnN1YmFkZHJlc3NTaXplKSk7CisKKyAgICAgICAgICAgICAgICAvKiBXYWl0IHVudGlsIGRhdGEgdHJhbnNmZXIgY29tcGxldGUuICovCisgICAgICAgICAgICAgICAgd2hpbGUgKCEoYmFzZS0+UyAmIGtJMkNfSW50UGVuZGluZ0ZsYWcpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSdzIHRyYW5zZmVyIGVycm9yLiAqLworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEkyQ19DaGVja0FuZENsZWFyRXJyb3IoYmFzZSwgYmFzZS0+Uyk7CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gd2hpbGUgKChoYW5kbGUtPnRyYW5zZmVyLnN1YmFkZHJlc3NTaXplID4gMCkgJiYgKHJlc3VsdCA9PSBrU3RhdHVzX1N1Y2Nlc3MpKTsKKworICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZGlyZWN0aW9uID09IGtJMkNfUmVhZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDbGVhciBwZW5kaW5nIGZsYWcuICovCisgICAgICAgICAgICAgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAgICAgICAgICAgICAvKiBTZW5kIHJlcGVhdGVkIHN0YXJ0IGFuZCBzbGF2ZSBhZGRyZXNzLiAqLworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJSZXBlYXRlZFN0YXJ0KGJhc2UsIGhhbmRsZS0+dHJhbnNmZXIuc2xhdmVBZGRyZXNzLCBrSTJDX1JlYWQpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogV2FpdCB1bnRpbCBkYXRhIHRyYW5zZmVyIGNvbXBsZXRlLiAqLworICAgICAgICAgICAgICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0ludFBlbmRpbmdGbGFnKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUncyB0cmFuc2ZlciBlcnJvci4gKi8KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBJMkNfQ2hlY2tBbmRDbGVhckVycm9yKGJhc2UsIGJhc2UtPlMpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogQ2xlYXIgcGVuZGluZyBmbGFnLiAqLworICAgICAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBJMkNfTWFzdGVyVHJhbnNmZXJFRE1BQ29uZmlnKEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBlZG1hX3RyYW5zZmVyX2NvbmZpZ190IHRyYW5zZmVyX2NvbmZpZzsKKworICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmRpcmVjdGlvbiA9PSBrSTJDX1JlYWQpCisgICAgeworICAgICAgICB0cmFuc2Zlcl9jb25maWcuc3JjQWRkciA9ICh1aW50MzJfdClJMkNfR2V0RGF0YVJlZ0FkZHIoYmFzZSk7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5kZXN0QWRkciA9ICh1aW50MzJfdCkoaGFuZGxlLT50cmFuc2Zlci5kYXRhKTsKKyAgICAgICAgdHJhbnNmZXJfY29uZmlnLm1ham9yTG9vcENvdW50cyA9IChoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplIC0gMSk7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5zcmNUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUxQnl0ZXM7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5zcmNPZmZzZXQgPSAwOworICAgICAgICB0cmFuc2Zlcl9jb25maWcuZGVzdFRyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTFCeXRlczsKKyAgICAgICAgdHJhbnNmZXJfY29uZmlnLmRlc3RPZmZzZXQgPSAxOworICAgICAgICB0cmFuc2Zlcl9jb25maWcubWlub3JMb29wQnl0ZXMgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0cmFuc2Zlcl9jb25maWcuc3JjQWRkciA9ICh1aW50MzJfdCkoaGFuZGxlLT50cmFuc2Zlci5kYXRhICsgMSk7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5kZXN0QWRkciA9ICh1aW50MzJfdClJMkNfR2V0RGF0YVJlZ0FkZHIoYmFzZSk7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5tYWpvckxvb3BDb3VudHMgPSAoaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSAtIDEpOworICAgICAgICB0cmFuc2Zlcl9jb25maWcuc3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMUJ5dGVzOworICAgICAgICB0cmFuc2Zlcl9jb25maWcuc3JjT2Zmc2V0ID0gMTsKKyAgICAgICAgdHJhbnNmZXJfY29uZmlnLmRlc3RUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUxQnl0ZXM7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5kZXN0T2Zmc2V0ID0gMDsKKyAgICAgICAgdHJhbnNmZXJfY29uZmlnLm1pbm9yTG9vcEJ5dGVzID0gMTsKKyAgICB9CisKKyAgICAvKiBTdG9yZSB0aGUgaW5pdGlhbGx5IGNvbmZpZ3VyZWQgZURNQSBtaW5vciBieXRlIHRyYW5zZmVyIGNvdW50IGludG8gdGhlIEkyQyBoYW5kbGUgKi8KKyAgICBoYW5kbGUtPm5ieXRlcyA9IHRyYW5zZmVyX2NvbmZpZy5taW5vckxvb3BCeXRlczsKKworICAgIEVETUFfU3VibWl0VHJhbnNmZXIoaGFuZGxlLT5kbWFIYW5kbGUsICZ0cmFuc2Zlcl9jb25maWcpOworICAgIEVETUFfU3RhcnRUcmFuc2ZlcihoYW5kbGUtPmRtYUhhbmRsZSk7Cit9CisKK3ZvaWQgSTJDX01hc3RlckNyZWF0ZUVETUFIYW5kbGUoSTJDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfbWFzdGVyX2VkbWFfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFIYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KGVkbWFIYW5kbGUpOworCisgICAgdWludDMyX3QgaW5zdGFuY2UgPSBJMkNfR2V0SW5zdGFuY2UoYmFzZSk7CisKKyAgICAvKiBaZXJvIGhhbmRsZS4gKi8KKyAgICBtZW1zZXQoaGFuZGxlLCAwLCBzaXplb2YoKmhhbmRsZSkpOworCisgICAgLyogU2V0IHRoZSB1c2VyIGNhbGxiYWNrIGFuZCB1c2VyRGF0YS4gKi8KKyAgICBoYW5kbGUtPmNvbXBsZXRpb25DYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGhhbmRsZS0+dXNlckRhdGEgPSB1c2VyRGF0YTsKKworICAgIC8qIFNldCB0aGUgYmFzZSBmb3IgdGhlIGhhbmRsZS4gKi8KKyAgICBiYXNlID0gYmFzZTsKKworICAgIC8qIFNldCB0aGUgaGFuZGxlIGZvciBFRE1BLiAqLworICAgIGhhbmRsZS0+ZG1hSGFuZGxlID0gZWRtYUhhbmRsZTsKKworICAgIHNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmJhc2UgPSBiYXNlOworICAgIHNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmhhbmRsZSA9IGhhbmRsZTsKKworICAgIEVETUFfU2V0Q2FsbGJhY2soZWRtYUhhbmRsZSwgKGVkbWFfY2FsbGJhY2spSTJDX01hc3RlclRyYW5zZmVyQ2FsbGJhY2tFRE1BLCAmc19lZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0pOworfQorCitzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJFRE1BKEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp4ZmVyKQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydCh4ZmVyKTsKKworICAgIHN0YXR1c190IHJlc3VsdDsKKyAgICB1aW50OF90IHRtcFJlZzsKKyAgICB2b2xhdGlsZSB1aW50OF90IGR1bW15ID0gMDsKKworICAgIC8qIEFkZCB0aGlzIHRvIGF2b2lkIGJ1aWxkIHdhcm5pbmcuICovCisgICAgZHVtbXkrKzsKKworICAgIC8qIERpc2FibGUgZG1hIHhmZXIuICovCisgICAgSTJDX0VuYWJsZURNQShiYXNlLCBmYWxzZSk7CisKKyAgICAvKiBTZW5kIGFkZHJlc3MgYW5kIGNvbW1hbmQgYnVmZmVyKGlmIHRoZXJlIGlzKSwgdW50aWwgc2VuZGRhdGEgcGhhc2Ugb3IgcmVjZWl2ZSBkYXRhIHBoYXNlLiAqLworICAgIHJlc3VsdCA9IEkyQ19Jbml0VHJhbnNmZXJTdGF0ZU1hY2hpbmVFRE1BKGJhc2UsIGhhbmRsZSwgeGZlcik7CisKKyAgICBpZiAocmVzdWx0KQorICAgIHsKKyAgICAgICAgLyogU2VuZCBzdG9wIGlmIHJlY2VpdmVkIE5hay4gKi8KKyAgICAgICAgaWYgKHJlc3VsdCA9PSBrU3RhdHVzX0kyQ19OYWspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJMkNfTWFzdGVyU3RvcChiYXNlKSAhPSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfVGltZW91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIFJlc2V0IHRoZSBzdGF0ZSB0byBpZGxlIHN0YXRlLiAqLworICAgICAgICBoYW5kbGUtPnN0YXRlID0ga0lkbGVTdGF0ZTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIENvbmZpZ3VyZSBkbWEgdHJhbnNmZXIuICovCisgICAgLyogRm9yIGkyYyBzZW5kLCBuZWVkIHRvIHNlbmQgMSBieXRlIGZpcnN0IHRvIHRyaWdnZXIgdGhlIGRtYSwgZm9yIGkyYyByZWFkLAorICAgIG5lZWQgdG8gc2VuZCBzdG9wIGJlZm9yZSByZWFkaW5nIHRoZSBsYXN0IGJ5dGUsIHNvIHRoZSBkbWEgdHJhbnNmZXIgc2l6ZSBzaG91bGQKKyAgICBiZSAoeFNpemUgLSAxKS4gKi8KKyAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSA+IDEpCisgICAgeworICAgICAgICBJMkNfTWFzdGVyVHJhbnNmZXJFRE1BQ29uZmlnKGJhc2UsIGhhbmRsZSk7CisgICAgICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmRpcmVjdGlvbiA9PSBrSTJDX1JlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoYW5nZSBkaXJlY3Rpb24gZm9yIHJlY2VpdmUuICovCisgICAgICAgICAgICBiYXNlLT5DMSAmPSB+KEkyQ19DMV9UWF9NQVNLIHwgSTJDX0MxX1RYQUtfTUFTSyk7CisKKyAgICAgICAgICAgIC8qIFJlYWQgZHVtbXkgdG8gcmVsZWFzZSB0aGUgYnVzLiAqLworICAgICAgICAgICAgZHVtbXkgPSBiYXNlLT5EOworCisgICAgICAgICAgICAvKiBFbmFiZSBkbWEgdHJhbnNmZXIuICovCisgICAgICAgICAgICBJMkNfRW5hYmxlRE1BKGJhc2UsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogRW5hYmUgZG1hIHRyYW5zZmVyLiAqLworICAgICAgICAgICAgSTJDX0VuYWJsZURNQShiYXNlLCB0cnVlKTsKKworICAgICAgICAgICAgLyogU2VuZCB0aGUgZmlyc3QgZGF0YS4gKi8KKyAgICAgICAgICAgIGJhc2UtPkQgPSAqaGFuZGxlLT50cmFuc2Zlci5kYXRhOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgLyogSWYgdHJhbnNmZXIgc2l6ZSBpcyAxLCB1c2UgcG9sbGluZyBtZXRob2QuICovCisgICAgeworICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kaXJlY3Rpb24gPT0ga0kyQ19SZWFkKQorICAgICAgICB7CisgICAgICAgICAgICB0bXBSZWcgPSBiYXNlLT5DMTsKKworICAgICAgICAgICAgLyogQ2hhbmdlIGRpcmVjdGlvbiB0byBSeC4gKi8KKyAgICAgICAgICAgIHRtcFJlZyAmPSB+STJDX0MxX1RYX01BU0s7CisKKyAgICAgICAgICAgIC8qIENvbmZpZ3VyZSBzZW5kIE5BSyAqLworICAgICAgICAgICAgdG1wUmVnIHw9IEkyQ19DMV9UWEFLX01BU0s7CisKKyAgICAgICAgICAgIGJhc2UtPkMxID0gdG1wUmVnOworCisgICAgICAgICAgICAvKiBSZWFkIGR1bW15IHRvIHJlbGVhc2UgdGhlIGJ1cy4gKi8KKyAgICAgICAgICAgIGR1bW15ID0gYmFzZS0+RDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2UtPkQgPSAqaGFuZGxlLT50cmFuc2Zlci5kYXRhOworICAgICAgICB9CisKKyAgICAgICAgLyogV2FpdCB1bnRpbCBkYXRhIHRyYW5zZmVyIGNvbXBsZXRlLiAqLworICAgICAgICB3aGlsZSAoIShiYXNlLT5TICYga0kyQ19JbnRQZW5kaW5nRmxhZykpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENsZWFyIHBlbmRpbmcgZmxhZy4gKi8KKyAgICAgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAgICAgLyogU2VuZCBzdG9wIGlmIGtJMkNfVHJhbnNmZXJOb1N0b3AgZmxhZyBpcyBub3QgYXNzZXJ0ZWQuICovCisgICAgICAgIGlmICghKGhhbmRsZS0+dHJhbnNmZXIuZmxhZ3MgJiBrSTJDX1RyYW5zZmVyTm9TdG9wRmxhZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJTdG9wKGJhc2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2hhbmdlIGRpcmVjdGlvbiB0byBzZW5kLiAqLworICAgICAgICAgICAgYmFzZS0+QzEgfD0gSTJDX0MxX1RYX01BU0s7CisgICAgICAgIH0KKworICAgICAgICAvKiBSZWFkIHRoZSBsYXN0IGJ5dGUgb2YgZGF0YS4gKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZGlyZWN0aW9uID09IGtJMkNfUmVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgKmhhbmRsZS0+dHJhbnNmZXIuZGF0YSA9IGJhc2UtPkQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBSZXNldCB0aGUgc3RhdGUgdG8gaWRsZS4gKi8KKyAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtJZGxlU3RhdGU7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdHVzX3QgSTJDX01hc3RlclRyYW5zZmVyR2V0Q291bnRFRE1BKEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgc2l6ZV90ICpjb3VudCkKK3sKKyAgICBhc3NlcnQoaGFuZGxlLT5kbWFIYW5kbGUpOworCisgICAgaWYgKCFjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBpZiAoa0lkbGVTdGF0ZSAhPSBoYW5kbGUtPnN0YXRlKQorICAgIHsKKyAgICAgICAgKmNvdW50ID0gKGhhbmRsZS0+dHJhbnNmZXJTaXplIC0KKyAgICAgICAgICAgICAgICAgICh1aW50MzJfdCloYW5kbGUtPm5ieXRlcyAqCisgICAgICAgICAgICAgICAgICAgICAgRURNQV9HZXRSZW1haW5pbmdNYWpvckxvb3BDb3VudChoYW5kbGUtPmRtYUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5kbWFIYW5kbGUtPmNoYW5uZWwpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKmNvdW50ID0gaGFuZGxlLT50cmFuc2ZlclNpemU7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKwordm9pZCBJMkNfTWFzdGVyVHJhbnNmZXJBYm9ydEVETUEoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIEVETUFfQWJvcnRUcmFuc2ZlcihoYW5kbGUtPmRtYUhhbmRsZSk7CisKKyAgICAvKiBEaXNhYmxlIGRtYSB0cmFuc2Zlci4gKi8KKyAgICBJMkNfRW5hYmxlRE1BKGJhc2UsIGZhbHNlKTsKKworICAgIC8qIFJlc2V0IHRoZSBzdGF0ZSB0byBpZGxlLiAqLworICAgIGhhbmRsZS0+c3RhdGUgPSBrSWRsZVN0YXRlOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjX2VkbWEuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2kyY19lZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjYjY0OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2kyY19lZG1hLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX0kyQ19ETUFfSF8KKyNkZWZpbmUgX0ZTTF9JMkNfRE1BX0hfCisKKyNpbmNsdWRlICJmc2xfaTJjLmgiCisjaW5jbHVkZSAiZnNsX2RtYW11eC5oIgorI2luY2x1ZGUgImZzbF9lZG1hLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgaTJjX2VkbWFfZHJpdmVyCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBicmllZiBJMkMgbWFzdGVyIGVETUEgaGFuZGxlIHR5cGVkZWYuICovCit0eXBlZGVmIHN0cnVjdCBfaTJjX21hc3Rlcl9lZG1hX2hhbmRsZSBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3Q7CisKKy8qISBAYnJpZWYgSTJDIG1hc3RlciBlRE1BIHRyYW5zZmVyIGNhbGxiYWNrIHR5cGVkZWYuICovCit0eXBlZGVmIHZvaWQgKCppMmNfbWFzdGVyX2VkbWFfdHJhbnNmZXJfY2FsbGJhY2tfdCkoSTJDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKTsKKworLyohIEBicmllZiBJMkMgbWFzdGVyIGVETUEgdHJhbnNmZXIgc3RydWN0dXJlLiAqLworc3RydWN0IF9pMmNfbWFzdGVyX2VkbWFfaGFuZGxlCit7CisgICAgaTJjX21hc3Rlcl90cmFuc2Zlcl90IHRyYW5zZmVyOyAvKiE8IEkyQyBtYXN0ZXIgdHJhbnNmZXIgc3RydWN0dXJlLiAqLworICAgIHNpemVfdCB0cmFuc2ZlclNpemU7ICAgICAgICAgICAgLyohPCBUb3RhbCBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZC4gKi8KKyAgICB1aW50OF90IG5ieXRlczsgICAgICAgICAgICAgICAgIC8qITwgZURNQSBtaW5vciBieXRlIHRyYW5zZmVyIGNvdW50IGluaXRpYWxseSBjb25maWd1cmVkLiAqLworICAgIHVpbnQ4X3Qgc3RhdGU7ICAgICAgICAgICAgICAgICAgLyohPCBJMkMgbWFzdGVyIHRyYW5zZmVyIHN0YXR1cy4gKi8KKyAgICBlZG1hX2hhbmRsZV90ICpkbWFIYW5kbGU7ICAgICAgIC8qITwgVGhlIGVETUEgaGFuZGxlciB1c2VkLiAqLworICAgIGkyY19tYXN0ZXJfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190CisgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjazsgLyohPCBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciB0aGUgZURNQSB0cmFuc2ZlciBpcyBmaW5pc2hlZC4gKi8KKyAgICB2b2lkICp1c2VyRGF0YTsgICAgICAgICAvKiE8IEEgY2FsbGJhY2sgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qX2NwbHVzcGx1cy4gKi8KKworLyohCisgKiBAbmFtZSBJMkMgQmxvY2sgZURNQSBUcmFuc2ZlciBPcGVyYXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIEkyQyBoYW5kbGUgd2hpY2ggaXMgdXNlZCBpbiB0cmFuc2NhdGlvbmFsIGZ1bmN0aW9ucy4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIEEgcG9pbnRlciB0byB0aGUgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90IHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBjYWxsYmFjayBBIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCisgKiBAcGFyYW0gdXNlckRhdGEgQSB1c2VyIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICogQHBhcmFtIGVkbWFIYW5kbGUgZURNQSBoYW5kbGUgcG9pbnRlci4KKyAqLwordm9pZCBJMkNfTWFzdGVyQ3JlYXRlRURNQUhhbmRsZShJMkNfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqZWRtYUhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIGEgbWFzdGVyIGVETUEgbm9uLWJsb2NraW5nIHRyYW5zZmVyIG9uIHRoZSBJMkMgYnVzLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgQSBwb2ludGVyIHRvIHRoZSBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlLgorICogQHBhcmFtIHhmZXIgQSBwb2ludGVyIHRvIHRoZSB0cmFuc2ZlciBzdHJ1Y3R1cmUgb2YgaTJjX21hc3Rlcl90cmFuc2Zlcl90LgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3VjZXNzZnVsbHkgY29tcGxldGVkIHRoZSBkYXRhIHRyYW5zbWlzc2lvbi4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfQnVzeSBBIHByZXZpb3VzIHRyYW5zbWlzc2lvbiBpcyBzdGlsbCBub3QgZmluaXNoZWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX1RpbWVvdXQgVHJhbnNmZXIgZXJyb3IsIHdhaXRzIGZvciBhIHNpZ25hbCB0aW1lb3V0LgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19BcmJpdHJhdGlvbkxvc3QgVHJhbnNmZXIgZXJyb3IsIGFyYml0cmF0aW9uIGxvc3QuCisgKiBAcmV0dmFsIGtTdGF0YXVzX0kyQ19OYWsgVHJhbnNmZXIgZXJyb3IsIHJlY2VpdmUgTkFLIGR1cmluZyB0cmFuc2Zlci4KKyAqLworc3RhdHVzX3QgSTJDX01hc3RlclRyYW5zZmVyRURNQShJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCAqeGZlcik7CisKKy8qIQorICogQGJyaWVmIEdldHMgYSBtYXN0ZXIgdHJhbnNmZXIgc3RhdHVzIGR1cmluZyB0aGUgZURNQSBub24tYmxvY2tpbmcgdHJhbnNmZXIuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBBIHBvaW50ZXIgdG8gdGhlIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gY291bnQgQSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgYnkgdGhlIG5vbi1ibG9ja2luZyB0cmFuc2FjdGlvbi4KKyAqLworc3RhdHVzX3QgSTJDX01hc3RlclRyYW5zZmVyR2V0Q291bnRFRE1BKEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgc2l6ZV90ICpjb3VudCk7CisKKy8qIQorICogQGJyaWVmIEFib3J0cyBhIG1hc3RlciBlRE1BIG5vbi1ibG9ja2luZyB0cmFuc2ZlciBlYXJseS4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIEEgcG9pbnRlciB0byB0aGUgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90IHN0cnVjdHVyZS4KKyAqLwordm9pZCBJMkNfTWFzdGVyVHJhbnNmZXJBYm9ydEVETUEoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyogQH0gKi8KKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmIC8qX2NwbHVzcGx1cy4gKi8KKy8qQH0qLworI2VuZGlmIC8qX0ZTTF9JMkNfRE1BX0hfKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2kyY19mcmVlcnRvcy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjX2ZyZWVydG9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYyMmZiZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2kyY19mcmVlcnRvcy5jCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9pMmNfZnJlZXJ0b3MuaCIKKworc3RhdGljIHZvaWQgSTJDX1JUT1NfQ2FsbGJhY2soSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmRydl9oYW5kbGUsIHN0YXR1c190IHN0YXR1cywgdm9pZCAqdXNlckRhdGEpCit7CisgICAgaTJjX3J0b3NfaGFuZGxlX3QgKmhhbmRsZSA9IChpMmNfcnRvc19oYW5kbGVfdCAqKXVzZXJEYXRhOworICAgIEJhc2VUeXBlX3QgcmVzY2hlZHVsZTsKKyAgICBoYW5kbGUtPmFzeW5jX3N0YXR1cyA9IHN0YXR1czsKKyAgICB4U2VtYXBob3JlR2l2ZUZyb21JU1IoaGFuZGxlLT5zZW1hcGhvcmUsICZyZXNjaGVkdWxlKTsKKyAgICBwb3J0WUlFTERfRlJPTV9JU1IocmVzY2hlZHVsZSk7Cit9CisKK3N0YXR1c190IEkyQ19SVE9TX0luaXQoaTJjX3J0b3NfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgSTJDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGkyY19tYXN0ZXJfY29uZmlnX3QgKm1hc3RlckNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjQ2xvY2tfSHopCit7CisgICAgaWYgKGhhbmRsZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGlmIChiYXNlID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKGkyY19ydG9zX2hhbmRsZV90KSk7CisjaWYgKGNvbmZpZ1NVUFBPUlRfU1RBVElDX0FMTE9DQVRJT04gPT0gMSkKKyAgICBoYW5kbGUtPm11dGV4ID0geFNlbWFwaG9yZUNyZWF0ZU11dGV4U3RhdGljKCZoYW5kbGUtPm11dGV4QnVmZmVyKTsKKyNlbHNlCisgICAgaGFuZGxlLT5tdXRleCA9IHhTZW1hcGhvcmVDcmVhdGVNdXRleCgpOworI2VuZGlmCisgICAgaWYgKGhhbmRsZS0+bXV0ZXggPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgfQorI2lmIChjb25maWdTVVBQT1JUX1NUQVRJQ19BTExPQ0FUSU9OID09IDEpCisgICAgaGFuZGxlLT5zZW1hcGhvcmUgPSB4U2VtYXBob3JlQ3JlYXRlQmluYXJ5U3RhdGljKCZoYW5kbGUtPnNlbWFwaG9yZUJ1ZmZlcik7CisjZWxzZQorICAgIGhhbmRsZS0+c2VtYXBob3JlID0geFNlbWFwaG9yZUNyZWF0ZUJpbmFyeSgpOworI2VuZGlmCisgICAgaWYgKGhhbmRsZS0+c2VtYXBob3JlID09IE5VTEwpCisgICAgeworICAgICAgICB2U2VtYXBob3JlRGVsZXRlKGhhbmRsZS0+bXV0ZXgpOworICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKworICAgIGhhbmRsZS0+YmFzZSA9IGJhc2U7CisKKyAgICBJMkNfTWFzdGVySW5pdChoYW5kbGUtPmJhc2UsIG1hc3RlckNvbmZpZywgc3JjQ2xvY2tfSHopOworICAgIEkyQ19NYXN0ZXJUcmFuc2ZlckNyZWF0ZUhhbmRsZShiYXNlLCAmaGFuZGxlLT5kcnZfaGFuZGxlLCBJMkNfUlRPU19DYWxsYmFjaywgKHZvaWQgKiloYW5kbGUpOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgSTJDX1JUT1NfRGVpbml0KGkyY19ydG9zX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgSTJDX01hc3RlckRlaW5pdChoYW5kbGUtPmJhc2UpOworCisgICAgdlNlbWFwaG9yZURlbGV0ZShoYW5kbGUtPnNlbWFwaG9yZSk7CisgICAgdlNlbWFwaG9yZURlbGV0ZShoYW5kbGUtPm11dGV4KTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IEkyQ19SVE9TX1RyYW5zZmVyKGkyY19ydG9zX2hhbmRsZV90ICpoYW5kbGUsIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCAqdHJhbnNmZXIpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgLyogTG9jayByZXNvdXJjZSBtdXRleCAqLworICAgIGlmICh4U2VtYXBob3JlVGFrZShoYW5kbGUtPm11dGV4LCBwb3J0TUFYX0RFTEFZKSAhPSBwZFRSVUUpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JMkNfQnVzeTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBJMkNfTWFzdGVyVHJhbnNmZXJOb25CbG9ja2luZyhoYW5kbGUtPmJhc2UsICZoYW5kbGUtPmRydl9oYW5kbGUsIHRyYW5zZmVyKTsKKyAgICBpZiAoc3RhdHVzICE9IGtTdGF0dXNfU3VjY2VzcykKKyAgICB7CisgICAgICAgIHhTZW1hcGhvcmVHaXZlKGhhbmRsZS0+bXV0ZXgpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIFdhaXQgZm9yIHRyYW5zZmVyIHRvIGZpbmlzaCAqLworICAgIHhTZW1hcGhvcmVUYWtlKGhhbmRsZS0+c2VtYXBob3JlLCBwb3J0TUFYX0RFTEFZKTsKKworICAgIC8qIFVubG9jayByZXNvdXJjZSBtdXRleCAqLworICAgIHhTZW1hcGhvcmVHaXZlKGhhbmRsZS0+bXV0ZXgpOworCisgICAgLyogUmV0dXJuIHN0YXR1cyBjYXB0dXJlZCBieSBjYWxsYmFjayBmdW5jdGlvbiAqLworICAgIHJldHVybiBoYW5kbGUtPmFzeW5jX3N0YXR1czsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2kyY19mcmVlcnRvcy5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjX2ZyZWVydG9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlZDJkMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2kyY19mcmVlcnRvcy5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX19GU0xfSTJDX0ZSRUVSVE9TX0hfXworI2RlZmluZSBfX0ZTTF9JMkNfRlJFRVJUT1NfSF9fCisKKyNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIgorI2luY2x1ZGUgIkZyZWVSVE9TLmgiCisjaW5jbHVkZSAicG9ydGFibGUuaCIKKyNpbmNsdWRlICJzZW1waHIuaCIKKworI2luY2x1ZGUgImZzbF9pMmMuaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBpMmNfZnJlZXJ0b3NfZHJpdmVyIEkyQyBGcmVlUlRPUyBkcml2ZXIKKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBjb25kIFJUT1NfUFJJVkFURQorICogQGJyaWVmIEkyQyBGcmVlUlRPUyBoYW5kbGUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2kyY19ydG9zX2hhbmRsZQoreworICAgIEkyQ19UeXBlICpiYXNlOyAgICAgICAgICAgICAgICAgLyohPCBJMkMgYmFzZSBhZGRyZXNzICovCisgICAgaTJjX21hc3Rlcl9oYW5kbGVfdCBkcnZfaGFuZGxlOyAvKiE8IEEgaGFuZGxlIG9mIHRoZSB1bmRlcmx5aW5nIGRyaXZlciwgdHJlYXRlZCBhcyBvcGFxdWUgYnkgdGhlIFJUT1MgbGF5ZXIgKi8KKyAgICBzdGF0dXNfdCBhc3luY19zdGF0dXM7ICAgICAgICAgIC8qITwgVHJhbnNhY3Rpb25hbCBzdGF0ZSBvZiB0aGUgdW5kZXJseWluZyBkcml2ZXIgKi8KKyAgICBTZW1hcGhvcmVIYW5kbGVfdCBtdXRleDsgICAgICAgIC8qITwgQSBtdXRleCB0byBsb2NrIHRoZSBoYW5kbGUgZHVyaW5nIGEgdHJhbnNmZXIgKi8KKyAgICBTZW1hcGhvcmVIYW5kbGVfdCBzZW1hcGhvcmU7ICAgIC8qITwgQSBzZW1hcGhvcmUgdG8gbm90aWZ5IGFuZCB1bmJsb2NrIHRhc2sgd2hlbiB0aGUgdHJhbnNmZXIgZW5kcyAqLworI2lmIChjb25maWdTVVBQT1JUX1NUQVRJQ19BTExPQ0FUSU9OID09IDEpCisgICAgU3RhdGljU2VtYXBob3JlX3QgbXV0ZXhCdWZmZXI7ICAgICAvKiE8IFN0YXRpY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBmb3IgbXV0ZXggKi8KKyAgICBTdGF0aWNTZW1hcGhvcmVfdCBzZW1hcGhvcmVCdWZmZXI7IC8qITwgU3RhdGljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGZvciBzZW1hcGhvcmUgKi8KKyNlbmRpZgorfSBpMmNfcnRvc19oYW5kbGVfdDsKKy8qISBcZW5kY29uZCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQG5hbWUgSTJDIFJUT1MgT3BlcmF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIEkyQy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBJMkMgbW9kdWxlIGFuZCB0aGUgcmVsYXRlZCBSVE9TIGNvbnRleHQuCisgKgorICogQHBhcmFtIGhhbmRsZSBUaGUgUlRPUyBJMkMgaGFuZGxlLCB0aGUgcG9pbnRlciB0byBhbiBhbGxvY2F0ZWQgc3BhY2UgZm9yIFJUT1MgY29udGV4dC4KKyAqIEBwYXJhbSBiYXNlIFRoZSBwb2ludGVyIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIGluc3RhbmNlIHRvIGluaXRpYWxpemUuCisgKiBAcGFyYW0gbWFzdGVyQ29uZmlnIFRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byBzZXQtdXAgSTJDIGluIG1hc3RlciBtb2RlLgorICogQHBhcmFtIHNyY0Nsb2NrX0h6IFRoZSBmcmVxdWVuY3kgb2YgYW4gaW5wdXQgY2xvY2sgb2YgdGhlIEkyQyBtb2R1bGUuCisgKiBAcmV0dXJuIHN0YXR1cyBvZiB0aGUgb3BlcmF0aW9uLgorICovCitzdGF0dXNfdCBJMkNfUlRPU19Jbml0KGkyY19ydG9zX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgIEkyQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpMmNfbWFzdGVyX2NvbmZpZ190ICptYXN0ZXJDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY0Nsb2NrX0h6KTsKKworLyohCisgKiBAYnJpZWYgRGVpbml0aWFsaXplcyB0aGUgSTJDLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGVpbml0aWFsaXplcyB0aGUgSTJDIG1vZHVsZSBhbmQgdGhlIHJlbGF0ZWQgUlRPUyBjb250ZXh0LgorICoKKyAqIEBwYXJhbSBoYW5kbGUgVGhlIFJUT1MgSTJDIGhhbmRsZS4KKyAqLworc3RhdHVzX3QgSTJDX1JUT1NfRGVpbml0KGkyY19ydG9zX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBQZXJmb3JtcyB0aGUgSTJDIHRyYW5zZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIEkyQyB0cmFuc2ZlciBhY2NvcmRpbmcgdG8gdGhlIGRhdGEgZ2l2ZW4gaW4gdGhlIHRyYW5zZmVyIHN0cnVjdHVyZS4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIFRoZSBSVE9TIEkyQyBoYW5kbGUuCisgKiBAcGFyYW0gdHJhbnNmZXIgQSBzdHJ1Y3R1cmUgc3BlY2lmeWluZyB0aGUgdHJhbnNmZXIgcGFyYW1ldGVycy4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3N0YXR1c190IEkyQ19SVE9TX1RyYW5zZmVyKGkyY19ydG9zX2hhbmRsZV90ICpoYW5kbGUsIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCAqdHJhbnNmZXIpOworCisvKiEKKyAqIEB9CisgKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohCisgKiBAfQorICovCisKKyNlbmRpZiAvKiBfX0ZTTF9JMkNfRlJFRVJUT1NfSF9fICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sbHd1LmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sbHd1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiMTAwMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xsd3UuYwpAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfbGx3dS5oIgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pCit2b2lkIExMV1VfU2V0RXh0ZXJuYWxXYWtldXBQaW5Nb2RlKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgcGluSW5kZXgsIGxsd3VfZXh0ZXJuYWxfcGluX21vZGVfdCBwaW5Nb2RlKQoreworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfUkVHX0JJVFdJRFRIKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggPT0gMzIpKQorICAgIHZvbGF0aWxlIHVpbnQzMl90ICpyZWdCYXNlOworICAgIHVpbnQzMl90IHJlZ09mZnNldDsKKyAgICB1aW50MzJfdCByZWc7CisKKyAgICBzd2l0Y2ggKHBpbkluZGV4ID4+IDRVKQorICAgIHsKKyAgICAgICAgY2FzZSAwVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEUxOworICAgICAgICAgICAgYnJlYWs7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMTYpKQorICAgICAgICBjYXNlIDFVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRTI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmVnQmFzZSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisjZWxzZQorICAgIHZvbGF0aWxlIHVpbnQ4X3QgKnJlZ0Jhc2U7CisgICAgdWludDhfdCByZWdPZmZzZXQ7CisgICAgdWludDhfdCByZWc7CisgICAgc3dpdGNoIChwaW5JbmRleCA+PiAyVSkKKyAgICB7CisgICAgICAgIGNhc2UgMFU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPlBFMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDFVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRTI7CisgICAgICAgICAgICBicmVhazsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiA4KSkKKyAgICAgICAgY2FzZSAyVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEUzOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiAxMikpCisgICAgICAgIGNhc2UgM1U6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPlBFNDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMTYpKQorICAgICAgICBjYXNlIDRVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRTU7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiA+IDIwKSkKKyAgICAgICAgY2FzZSA1VToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEU2OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiAyNCkpCisgICAgICAgIGNhc2UgNlU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPlBFNzsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMjgpKQorICAgICAgICBjYXNlIDdVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRTg7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmVnQmFzZSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggPT0gMzIgKi8KKworICAgIGlmIChyZWdCYXNlKQorICAgIHsKKyAgICAgICAgcmVnID0gKnJlZ0Jhc2U7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEgpICYmIChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCA9PSAzMikpCisgICAgICAgIHJlZ09mZnNldCA9ICgocGluSW5kZXggJiAweDBGVSkgPDwgMVUpOworI2Vsc2UKKyAgICAgICAgcmVnT2Zmc2V0ID0gKChwaW5JbmRleCAmIDB4MDNVKSA8PCAxVSk7CisjZW5kaWYKKyAgICAgICAgcmVnICY9IH4oMHgzVSA8PCByZWdPZmZzZXQpOworICAgICAgICByZWcgfD0gKCh1aW50MzJfdClwaW5Nb2RlIDw8IHJlZ09mZnNldCk7CisgICAgICAgICpyZWdCYXNlID0gcmVnOworICAgIH0KK30KKworYm9vbCBMTFdVX0dldEV4dGVybmFsV2FrZXVwUGluRmxhZyhMTFdVX1R5cGUgKmJhc2UsIHVpbnQzMl90IHBpbkluZGV4KQoreworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfUkVHX0JJVFdJRFRIKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggPT0gMzIpKQorICAgIHJldHVybiAoYm9vbCkoYmFzZS0+UEYgJiAoMVUgPDwgcGluSW5kZXgpKTsKKyNlbHNlCisgICAgdm9sYXRpbGUgdWludDhfdCAqcmVnQmFzZTsKKworICAgIHN3aXRjaCAocGluSW5kZXggPj4gM1UpCisgICAgeworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BGKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QRikKKyAgICAgICAgY2FzZSAwVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEYxOworICAgICAgICAgICAgYnJlYWs7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gOCkpCisgICAgICAgIGNhc2UgMVU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPlBGMjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiA+IDE2KSkKKyAgICAgICAgY2FzZSAyVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEYzOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMjQpKQorICAgICAgICBjYXNlIDNVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRjQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKi8KKyNlbHNlCisgICAgICAgIGNhc2UgMFU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPkYxOworICAgICAgICAgICAgYnJlYWs7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gOCkpCisgICAgICAgIGNhc2UgMVU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPkYyOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMTYpKQorICAgICAgICBjYXNlIDJVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5GMzsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiA+IDI0KSkKKyAgICAgICAgY2FzZSAzVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RjQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKi8KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QRiAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmVnQmFzZSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocmVnQmFzZSkKKyAgICB7CisgICAgICAgIHJldHVybiAoYm9vbCkoKnJlZ0Jhc2UgJiAoMVUgPDwgcGluSW5kZXggJSA4KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggKi8KK30KKwordm9pZCBMTFdVX0NsZWFyRXh0ZXJuYWxXYWtldXBQaW5GbGFnKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgcGluSW5kZXgpCit7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEgpICYmIChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCA9PSAzMikpCisgICAgYmFzZS0+UEYgPSAoMVUgPDwgcGluSW5kZXgpOworI2Vsc2UKKyAgICB2b2xhdGlsZSB1aW50OF90ICpyZWdCYXNlOworICAgIHN3aXRjaCAocGluSW5kZXggPj4gM1UpCisgICAgeworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BGKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QRikKKyAgICAgICAgY2FzZSAwVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEYxOworICAgICAgICAgICAgYnJlYWs7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gOCkpCisgICAgICAgIGNhc2UgMVU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPlBGMjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiA+IDE2KSkKKyAgICAgICAgY2FzZSAyVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEYzOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMjQpKQorICAgICAgICBjYXNlIDNVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRjQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKi8KKyNlbHNlCisgICAgICAgIGNhc2UgMFU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPkYxOworICAgICAgICAgICAgYnJlYWs7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gOCkpCisgICAgICAgIGNhc2UgMVU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPkYyOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMTYpKQorICAgICAgICBjYXNlIDJVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5GMzsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiA+IDI0KSkKKyAgICAgICAgY2FzZSAzVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RjQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKi8KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QRiAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmVnQmFzZSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHJlZ0Jhc2UpCisgICAgeworICAgICAgICAqcmVnQmFzZSA9ICgxVSA8PCBwaW5JbmRleCAlIDhVKTsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggKi8KK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIpICYmIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIpCit2b2lkIExMV1VfU2V0UGluRmlsdGVyTW9kZShMTFdVX1R5cGUgKmJhc2UsIHVpbnQzMl90IGZpbHRlckluZGV4LCBsbHd1X2V4dGVybmFsX3Bpbl9maWx0ZXJfbW9kZV90IGZpbHRlck1vZGUpCit7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEgpICYmIChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCA9PSAzMikpCisgICAgdWludDMyX3QgcmVnOworCisgICAgcmVnID0gYmFzZS0+RklMVDsKKyAgICByZWcgJj0gfigoTExXVV9GSUxUX0ZJTFRTRUwxX01BU0sgfCBMTFdVX0ZJTFRfRklMVEUxX01BU0spIDw8IChmaWx0ZXJJbmRleCAqIDhVIC0gMVUpKTsKKyAgICByZWcgfD0gKCgoZmlsdGVyTW9kZS5waW5JbmRleCA8PCBMTFdVX0ZJTFRfRklMVFNFTDFfU0hJRlQpIHwgKGZpbHRlck1vZGUuZmlsdGVyTW9kZSA8PCBMTFdVX0ZJTFRfRklMVEUxX1NISUZUKQorICAgICAgICAgICAgIC8qIENsZWFyIHRoZSBGaWx0ZXIgRGV0ZWN0IEZsYWcgKi8KKyAgICAgICAgICAgICB8IExMV1VfRklMVF9GSUxURjFfTUFTSykKKyAgICAgICAgICAgIDw8IChmaWx0ZXJJbmRleCAqIDhVIC0gMVUpKTsKKyAgICBiYXNlLT5GSUxUID0gcmVnOworI2Vsc2UKKyAgICB2b2xhdGlsZSB1aW50OF90ICpyZWdCYXNlOworICAgIHVpbnQ4X3QgcmVnOworCisgICAgc3dpdGNoIChmaWx0ZXJJbmRleCkKKyAgICB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RklMVDE7CisgICAgICAgICAgICBicmVhazsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiA+IDEpKQorICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPkZJTFQyOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIpICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSID4gMikpCisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RklMVDM7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgPiAzKSkKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5GSUxUNDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHJlZ0Jhc2UpCisgICAgeworICAgICAgICByZWcgPSAqcmVnQmFzZTsKKyAgICAgICAgcmVnICY9IH4oTExXVV9GSUxUMV9GSUxUU0VMX01BU0sgfCBMTFdVX0ZJTFQxX0ZJTFRFX01BU0spOworICAgICAgICByZWcgfD0gKCh1aW50MzJfdClmaWx0ZXJNb2RlLnBpbkluZGV4IDw8IExMV1VfRklMVDFfRklMVFNFTF9TSElGVCk7CisgICAgICAgIHJlZyB8PSAoKHVpbnQzMl90KWZpbHRlck1vZGUuZmlsdGVyTW9kZSA8PCBMTFdVX0ZJTFQxX0ZJTFRFX1NISUZUKTsKKyAgICAgICAgLyogQ2xlYXIgdGhlIEZpbHRlciBEZXRlY3QgRmxhZyAqLworICAgICAgICByZWcgfD0gTExXVV9GSUxUMV9GSUxURl9NQVNLOworICAgICAgICAqcmVnQmFzZSA9IHJlZzsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggKi8KK30KKworYm9vbCBMTFdVX0dldFBpbkZpbHRlckZsYWcoTExXVV9UeXBlICpiYXNlLCB1aW50MzJfdCBmaWx0ZXJJbmRleCkKK3sKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCkgJiYgKEZTTF9GRUFUVVJFX0xMV1VfUkVHX0JJVFdJRFRIID09IDMyKSkKKyAgICByZXR1cm4gKGJvb2wpKGJhc2UtPkZJTFQgJiAoMVUgPDwgKGZpbHRlckluZGV4ICogOFUgLSAxKSkpOworI2Vsc2UKKyAgICBib29sIHN0YXR1cyA9IGZhbHNlOworCisgICAgc3dpdGNoIChmaWx0ZXJJbmRleCkKKyAgICB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHN0YXR1cyA9IChiYXNlLT5GSUxUMSAmIExMV1VfRklMVDFfRklMVEZfTUFTSyk7CisgICAgICAgICAgICBicmVhazsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiA+IDEpKQorICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBzdGF0dXMgPSAoYmFzZS0+RklMVDIgJiBMTFdVX0ZJTFQyX0ZJTFRGX01BU0spOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIpICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSID4gMikpCisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHN0YXR1cyA9IChiYXNlLT5GSUxUMyAmIExMV1VfRklMVDNfRklMVEZfTUFTSyk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgPiAzKSkKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgc3RhdHVzID0gKGJhc2UtPkZJTFQ0ICYgTExXVV9GSUxUNF9GSUxURl9NQVNLKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggKi8KK30KKwordm9pZCBMTFdVX0NsZWFyUGluRmlsdGVyRmxhZyhMTFdVX1R5cGUgKmJhc2UsIHVpbnQzMl90IGZpbHRlckluZGV4KQoreworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfUkVHX0JJVFdJRFRIKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggPT0gMzIpKQorICAgIHVpbnQzMl90IHJlZzsKKworICAgIHJlZyA9IGJhc2UtPkZJTFQ7CisgICAgc3dpdGNoIChmaWx0ZXJJbmRleCkKKyAgICB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJlZyB8PSBMTFdVX0ZJTFRfRklMVEYxX01BU0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmVnIHw9IExMV1VfRklMVF9GSUxURjJfTUFTSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICByZWcgfD0gTExXVV9GSUxUX0ZJTFRGM19NQVNLOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIHJlZyB8PSBMTFdVX0ZJTFRfRklMVEY0X01BU0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBiYXNlLT5GSUxUID0gcmVnOworI2Vsc2UKKyAgICB2b2xhdGlsZSB1aW50OF90ICpyZWdCYXNlOworICAgIHVpbnQ4X3QgcmVnOworCisgICAgc3dpdGNoIChmaWx0ZXJJbmRleCkKKyAgICB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RklMVDE7CisgICAgICAgICAgICBicmVhazsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiA+IDEpKQorICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPkZJTFQyOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIpICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSID4gMikpCisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RklMVDM7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgPiAzKSkKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5GSUxUNDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHJlZ0Jhc2UpCisgICAgeworICAgICAgICByZWcgPSAqcmVnQmFzZTsKKyAgICAgICAgcmVnIHw9IExMV1VfRklMVDFfRklMVEZfTUFTSzsKKyAgICAgICAgKnJlZ0Jhc2UgPSByZWc7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfUkVHX0JJVFdJRFRIICovCit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUkVTRVRfRU5BQkxFKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19SRVNFVF9FTkFCTEUpCit2b2lkIExMV1VfU2V0UmVzZXRQaW5Nb2RlKExMV1VfVHlwZSAqYmFzZSwgYm9vbCBwaW5FbmFibGUsIGJvb2wgZW5hYmxlSW5Mb3dMZWFrYWdlTW9kZSkKK3sKKyAgICB1aW50OF90IHJlZzsKKworICAgIHJlZyA9IGJhc2UtPlJTVDsKKyAgICByZWcgJj0gfihMTFdVX1JTVF9MTFJTVEVfTUFTSyB8IExMV1VfUlNUX1JTVEZJTFRfTUFTSyk7CisgICAgcmVnIHw9CisgICAgICAgICgoKHVpbnQzMl90KXBpbkVuYWJsZSA8PCBMTFdVX1JTVF9MTFJTVEVfU0hJRlQpIHwgKCh1aW50MzJfdCllbmFibGVJbkxvd0xlYWthZ2VNb2RlIDw8IExMV1VfUlNUX1JTVEZJTFRfU0hJRlQpKTsKKyAgICBiYXNlLT5SU1QgPSByZWc7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUkVTRVRfRU5BQkxFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sbHd1LmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sbHd1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhMDAzNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xsd3UuaApAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfTExXVV9IXworI2RlZmluZSBfRlNMX0xMV1VfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohIEBhZGR0b2dyb3VwIGxsd3UgKi8KKy8qISBAeyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgTExXVSBkcml2ZXIgdmVyc2lvbiAyLjAuMS4gKi8KKyNkZWZpbmUgRlNMX0xMV1VfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAwLCAxKSkKKy8qQH0qLworCisvKiEKKyAqIEBicmllZiBFeHRlcm5hbCBpbnB1dCBwaW4gY29udHJvbCBtb2RlcworICovCit0eXBlZGVmIGVudW0gX2xsd3VfZXh0ZXJuYWxfcGluX21vZGUKK3sKKyAgICBrTExXVV9FeHRlcm5hbFBpbkRpc2FibGUgPSAwVSwgICAgIC8qITwgUGluIGRpc2FibGVkIGFzIGEgd2FrZXVwIGlucHV0LiAgICAgICAgICAgKi8KKyAgICBrTExXVV9FeHRlcm5hbFBpblJpc2luZ0VkZ2UgPSAxVSwgIC8qITwgUGluIGVuYWJsZWQgd2l0aCB0aGUgcmlzaW5nIGVkZ2UgZGV0ZWN0aW9uLiAqLworICAgIGtMTFdVX0V4dGVybmFsUGluRmFsbGluZ0VkZ2UgPSAyVSwgLyohPCBQaW4gZW5hYmxlZCB3aXRoIHRoZSBmYWxsaW5nIGVkZ2UgZGV0ZWN0aW9uLiovCisgICAga0xMV1VfRXh0ZXJuYWxQaW5BbnlFZGdlID0gM1UgICAgICAvKiE8IFBpbiBlbmFibGVkIHdpdGggYW55IGNoYW5nZSBkZXRlY3Rpb24uICAqLworfSBsbHd1X2V4dGVybmFsX3Bpbl9tb2RlX3Q7CisKKy8qIQorICogQGJyaWVmIERpZ2l0YWwgZmlsdGVyIGNvbnRyb2wgbW9kZXMKKyAqLwordHlwZWRlZiBlbnVtIF9sbHd1X3Bpbl9maWx0ZXJfbW9kZQoreworICAgIGtMTFdVX1BpbkZpbHRlckRpc2FibGUgPSAwVSwgICAgIC8qITwgRmlsdGVyIGRpc2FibGVkLiAgICAgICAgICAgICAgICovCisgICAga0xMV1VfUGluRmlsdGVyUmlzaW5nRWRnZSA9IDFVLCAgLyohPCBGaWx0ZXIgcG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24uKi8KKyAgICBrTExXVV9QaW5GaWx0ZXJGYWxsaW5nRWRnZSA9IDJVLCAvKiE8IEZpbHRlciBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbi4qLworICAgIGtMTFdVX1BpbkZpbHRlckFueUVkZ2UgPSAzVSAgICAgIC8qITwgRmlsdGVyIGFueSBlZGdlIGRldGVjdGlvbi4gICAgICovCit9IGxsd3VfcGluX2ZpbHRlcl9tb2RlX3Q7CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19WRVJJRCkgJiYgRlNMX0ZFQVRVUkVfTExXVV9IQVNfVkVSSUQpCisvKiEKKyAqIEBicmllZiBJUCB2ZXJzaW9uIElEIGRlZmluaXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9sbHd1X3ZlcnNpb25faWQKK3sKKyAgICB1aW50MTZfdCBmZWF0dXJlOyAvKiE8IEEgZmVhdHVyZSBzcGVjaWZpY2F0aW9uIG51bWJlci4gKi8KKyAgICB1aW50OF90IG1pbm9yOyAgICAvKiE8IFRoZSBtaW5vciB2ZXJzaW9uIG51bWJlci4gICAgICAgICAqLworICAgIHVpbnQ4X3QgbWFqb3I7ICAgIC8qITwgVGhlIG1ham9yIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICovCit9IGxsd3VfdmVyc2lvbl9pZF90OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1ZFUklEICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19QQVJBTSkgJiYgRlNMX0ZFQVRVUkVfTExXVV9IQVNfUEFSQU0pCisvKiEKKyAqIEBicmllZiBJUCBwYXJhbWV0ZXIgZGVmaW5pdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2xsd3VfcGFyYW0KK3sKKyAgICB1aW50OF90IGZpbHRlcnM7IC8qITwgQSBudW1iZXIgb2YgdGhlIHBpbiBmaWx0ZXIuICAgICAgKi8KKyAgICB1aW50OF90IGRtYXM7ICAgIC8qITwgQSBudW1iZXIgb2YgdGhlIHdha2V1cCBETUEuICAgICAgKi8KKyAgICB1aW50OF90IG1vZHVsZXM7IC8qITwgQSBudW1iZXIgb2YgdGhlIHdha2V1cCBtb2R1bGUuICAgKi8KKyAgICB1aW50OF90IHBpbnM7ICAgIC8qITwgQSBudW1iZXIgb2YgdGhlIHdha2UgdXAgcGluLiAgICAgKi8KK30gbGx3dV9wYXJhbV90OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BBUkFNICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSKQorLyohCisgKiBAYnJpZWYgQW4gZXh0ZXJuYWwgaW5wdXQgcGluIGZpbHRlciBjb250cm9sIHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdCBfbGx3dV9leHRlcm5hbF9waW5fZmlsdGVyX21vZGUKK3sKKyAgICB1aW50MzJfdCBwaW5JbmRleDsgICAgICAgICAgICAgICAgIC8qITwgQSBwaW4gbnVtYmVyICAqLworICAgIGxsd3VfcGluX2ZpbHRlcl9tb2RlX3QgZmlsdGVyTW9kZTsgLyohPCBGaWx0ZXIgbW9kZSAqLworfSBsbHd1X2V4dGVybmFsX3Bpbl9maWx0ZXJfbW9kZV90OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiEKKyAqIEBuYW1lIExvdy1MZWFrYWdlIFdha2V1cCBVbml0IENvbnRyb2wgQVBJcworICogQHsKKyAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfVkVSSUQpICYmIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1ZFUklEKQorLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgTExXVSB2ZXJzaW9uIElELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgTExXVSB2ZXJzaW9uIElELCBpbmNsdWRpbmcgdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyLAorICogdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLCBhbmQgdGhlIGZlYXR1cmUgc3BlY2lmaWNhdGlvbiBudW1iZXIuCisgKgorICogQHBhcmFtIGJhc2UgTExXVSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSB2ZXJzaW9uSWQgICAgIEEgcG9pbnRlciB0byB0aGUgdmVyc2lvbiBJRCBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMTFdVX0dldFZlcnNpb25JZChMTFdVX1R5cGUgKmJhc2UsIGxsd3VfdmVyc2lvbl9pZF90ICp2ZXJzaW9uSWQpCit7CisgICAgKigodWludDMyX3QgKil2ZXJzaW9uSWQpID0gYmFzZS0+VkVSSUQ7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfVkVSSUQgKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BBUkFNKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QQVJBTSkKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIExMV1UgcGFyYW1ldGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgTExXVSBwYXJhbWV0ZXIsIGluY2x1ZGluZyBhIHdha2V1cCBwaW4gbnVtYmVyLCBhIG1vZHVsZQorICogbnVtYmVyLCBhIERNQSBudW1iZXIsIGFuZCBhIHBpbiBmaWx0ZXIgbnVtYmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIExMV1UgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gcGFyYW0gICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIExMV1UgcGFyYW1ldGVyIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIExMV1VfR2V0UGFyYW0oTExXVV9UeXBlICpiYXNlLCBsbHd1X3BhcmFtX3QgKnBhcmFtKQoreworICAgICooKHVpbnQzMl90ICopcGFyYW0pID0gYmFzZS0+UEFSQU07Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUEFSQU0gKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTikgJiYgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKQorLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgZXh0ZXJuYWwgaW5wdXQgcGluIHNvdXJjZSBtb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZXh0ZXJuYWwgaW5wdXQgcGluIHNvdXJjZSBtb2RlIHRoYXQgaXMgdXNlZAorICogYXMgYSB3YWtlIHVwIHNvdXJjZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMTFdVIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHBpbkluZGV4IEEgcGluIGluZGV4IHRvIGJlIGVuYWJsZWQgYXMgYW4gZXh0ZXJuYWwgd2FrZXVwIHNvdXJjZSBzdGFydGluZyBmcm9tIDEuCisgKiBAcGFyYW0gcGluTW9kZSBBIHBpbiBjb25maWd1cmF0aW9uIG1vZGUgZGVmaW5lZCBpbiB0aGUgbGx3dV9leHRlcm5hbF9waW5fbW9kZXNfdC4KKyAqLwordm9pZCBMTFdVX1NldEV4dGVybmFsV2FrZXVwUGluTW9kZShMTFdVX1R5cGUgKmJhc2UsIHVpbnQzMl90IHBpbkluZGV4LCBsbHd1X2V4dGVybmFsX3Bpbl9tb2RlX3QgcGluTW9kZSk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGV4dGVybmFsIHdha2V1cCBzb3VyY2UgZmxhZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgZXh0ZXJuYWwgcGluIGZsYWcgdG8gZGV0ZWN0IHdoZXRoZXIgdGhlIE1DVSBpcworICogd29rZW4gdXAgYnkgdGhlIHNwZWNpZmljIHBpbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBMTFdVIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHBpbkluZGV4ICAgICBBIHBpbiBpbmRleCwgd2hpY2ggc3RhcnRzIGZyb20gMS4KKyAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3BlY2lmaWMgcGluIGlzIGEgd2FrZXVwIHNvdXJjZS4KKyAqLworYm9vbCBMTFdVX0dldEV4dGVybmFsV2FrZXVwUGluRmxhZyhMTFdVX1R5cGUgKmJhc2UsIHVpbnQzMl90IHBpbkluZGV4KTsKKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBleHRlcm5hbCB3YWtldXAgc291cmNlIGZsYWcuCisgKgorICogVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIGV4dGVybmFsIHdha2V1cCBzb3VyY2UgZmxhZyBmb3IgYSBzcGVjaWZpYyBwaW4uCisgKgorICogQHBhcmFtIGJhc2UgTExXVSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBwaW5JbmRleCBBIHBpbiBpbmRleCwgd2hpY2ggc3RhcnRzIGZyb20gMS4KKyAqLwordm9pZCBMTFdVX0NsZWFyRXh0ZXJuYWxXYWtldXBQaW5GbGFnKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgcGluSW5kZXgpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEUpCisvKiEKKyAqIEBicmllZiBFbmFibGVzL2Rpc2FibGVzIHRoZSBpbnRlcm5hbCBtb2R1bGUgc291cmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcy9kaXNhYmxlcyB0aGUgaW50ZXJuYWwgbW9kdWxlIHNvdXJjZSBtb2RlIHRoYXQgaXMgdXNlZAorICogYXMgYSB3YWtlIHVwIHNvdXJjZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMTFdVIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1vZHVsZUluZGV4ICAgQSBtb2R1bGUgaW5kZXggdG8gYmUgZW5hYmxlZCBhcyBhbiBpbnRlcm5hbCB3YWtldXAgc291cmNlIHN0YXJ0aW5nIGZyb20gMS4KKyAqIEBwYXJhbSBlbmFibGUgICAgICAgIEFuIGVuYWJsZSBvciBhIGRpc2FibGUgc2V0dGluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgTExXVV9FbmFibGVJbnRlcm5hbE1vZHVsZUludGVycnVwdFdha3VwKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgbW9kdWxlSW5kZXgsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5NRSB8PSAxVSA8PCBtb2R1bGVJbmRleDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+TUUgJj0gfigxVSA8PCBtb2R1bGVJbmRleCk7CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBleHRlcm5hbCB3YWtldXAgc291cmNlIGZsYWcuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIGV4dGVybmFsIHBpbiBmbGFnIHRvIGRldGVjdCB3aGV0aGVyIHRoZSBzeXN0ZW0gaXMKKyAqIHdva2VuIHVwIGJ5IHRoZSBzcGVjaWZpYyBwaW4uCisgKgorICogQHBhcmFtIGJhc2UgTExXVSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtb2R1bGVJbmRleCAgQSBtb2R1bGUgaW5kZXgsIHdoaWNoIHN0YXJ0cyBmcm9tIDEuCisgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNwZWNpZmljIHBpbiBpcyBhIHdha2UgdXAgc291cmNlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgTExXVV9HZXRJbnRlcm5hbFdha2V1cE1vZHVsZUZsYWcoTExXVV9UeXBlICpiYXNlLCB1aW50MzJfdCBtb2R1bGVJbmRleCkKK3sKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19NRikgJiYgRlNMX0ZFQVRVUkVfTExXVV9IQVNfTUYpCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEgpICYmIChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCA9PSAzMikpCisgICAgcmV0dXJuIChib29sKShiYXNlLT5NRiAmICgxVSA8PCBtb2R1bGVJbmRleCkpOworI2Vsc2UKKyAgICByZXR1cm4gKGJvb2wpKGJhc2UtPk1GNSAmICgxVSA8PCBtb2R1bGVJbmRleCkpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfUkVHX0JJVFdJRFRIICovCisjZWxzZQorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiA+IDE2KSkKKyAgICByZXR1cm4gKGJvb2wpKGJhc2UtPkY1ICYgKDFVIDw8IG1vZHVsZUluZGV4KSk7CisjZWxzZQorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BGKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QRikKKyAgICByZXR1cm4gKGJvb2wpKGJhc2UtPlBGMyAmICgxVSA8PCBtb2R1bGVJbmRleCkpOworI2Vsc2UKKyAgICByZXR1cm4gKGJvb2wpKGJhc2UtPkYzICYgKDFVIDw8IG1vZHVsZUluZGV4KSk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUEYgKi8KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKi8KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19NRiAqLworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRSAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRE1BX0VOQUJMRV9SRUcpICYmIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0RNQV9FTkFCTEVfUkVHKQorLyohCisgKiBAYnJpZWYgRW5hYmxlcy9kaXNhYmxlcyB0aGUgaW50ZXJuYWwgbW9kdWxlIERNQSB3YWtldXAgc291cmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcy9kaXNhYmxlcyB0aGUgaW50ZXJuYWwgRE1BIHRoYXQgaXMgdXNlZCBhcyBhIHdha2UgdXAgc291cmNlLgorICoKKyAqIEBwYXJhbSBiYXNlIExMV1UgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbW9kdWxlSW5kZXggICBBbiBpbnRlcm5hbCBtb2R1bGUgaW5kZXggd2hpY2ggaXMgdXNlZCBhcyBhIERNQSByZXF1ZXN0IHNvdXJjZSwgc3RhcnRpbmcgZnJvbSAxLgorICogQHBhcmFtIGVuYWJsZSAgICAgICAgRW5hYmxlIG9yIGRpc2FibGUgdGhlIERNQSByZXF1ZXN0IHNvdXJjZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgTExXVV9FbmFibGVJbnRlcm5hbE1vZHVsZURtYVJlcXVlc3RXYWt1cChMTFdVX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1vZHVsZUluZGV4LCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+REUgfD0gMVUgPDwgbW9kdWxlSW5kZXg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkRFICY9IH4oMVUgPDwgbW9kdWxlSW5kZXgpOworICAgIH0KK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19ETUFfRU5BQkxFX1JFRyAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUikgJiYgRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUikKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIHBpbiBmaWx0ZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHBpbiBmaWx0ZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBMTFdVIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGZpbHRlckluZGV4IEEgcGluIGZpbHRlciBpbmRleCB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBkaWdpdGFsIGZpbHRlciwgc3RhcnRpbmcgZnJvbSAxLgorICogQHBhcmFtIGZpbHRlck1vZGUgQSBmaWx0ZXIgbW9kZSBjb25maWd1cmF0aW9uCisgKi8KK3ZvaWQgTExXVV9TZXRQaW5GaWx0ZXJNb2RlKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgZmlsdGVySW5kZXgsIGxsd3VfZXh0ZXJuYWxfcGluX2ZpbHRlcl9tb2RlX3QgZmlsdGVyTW9kZSk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIHBpbiBmaWx0ZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHBpbiBmaWx0ZXIgZmxhZy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMTFdVIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGZpbHRlckluZGV4IEEgcGluIGZpbHRlciBpbmRleCwgd2hpY2ggc3RhcnRzIGZyb20gMS4KKyAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZmxhZyBpcyBhIHNvdXJjZSBvZiB0aGUgZXhpc3RpbmcgbG93LWxlYWthZ2UgcG93ZXIgbW9kZS4KKyAqLworYm9vbCBMTFdVX0dldFBpbkZpbHRlckZsYWcoTExXVV9UeXBlICpiYXNlLCB1aW50MzJfdCBmaWx0ZXJJbmRleCk7CisKKy8qIQorICogQGJyaWVmIENsZWFycyB0aGUgcGluIGZpbHRlciBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBwaW4gZmlsdGVyIGZsYWcuCisgKgorICogQHBhcmFtIGJhc2UgTExXVSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBmaWx0ZXJJbmRleCBBIHBpbiBmaWx0ZXIgaW5kZXggdG8gY2xlYXIgdGhlIGZsYWcsIHN0YXJ0aW5nIGZyb20gMS4KKyAqLwordm9pZCBMTFdVX0NsZWFyUGluRmlsdGVyRmxhZyhMTFdVX1R5cGUgKmJhc2UsIHVpbnQzMl90IGZpbHRlckluZGV4KTsKKworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1JFU0VUX0VOQUJMRSkgJiYgRlNMX0ZFQVRVUkVfTExXVV9IQVNfUkVTRVRfRU5BQkxFKQorLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgcmVzZXQgcGluIG1vZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGhvdyB0aGUgcmVzZXQgcGluIGlzIHVzZWQgYXMgYSBsb3cgbGVha2FnZSBtb2RlIGV4aXQgc291cmNlLgorICoKKyAqIEBwYXJhbSBwaW5FbmFibGUgICAgICAgRW5hYmxlIHJlc2V0IHRoZSBwaW4gZmlsdGVyCisgKiBAcGFyYW0gcGluRmlsdGVyRW5hYmxlIFNwZWNpZnkgd2hldGhlciB0aGUgcGluIGZpbHRlciBpcyBlbmFibGVkIGluIExvdy1MZWFrYWdlIHBvd2VyIG1vZGUuCisgKi8KK3ZvaWQgTExXVV9TZXRSZXNldFBpbk1vZGUoTExXVV9UeXBlICpiYXNlLCBib29sIHBpbkVuYWJsZSwgYm9vbCBlbmFibGVJbkxvd0xlYWthZ2VNb2RlKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19SRVNFVF9FTkFCTEUgKi8KKworLypAfSovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisjZW5kaWYgLyogX0ZTTF9MTFdVX0hfKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdG1yLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHRtci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YjNiOTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHRtci5jCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9scHRtci5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGluc3RhbmNlIGZyb20gdGhlIGJhc2UgYWRkcmVzcyB0byBiZSB1c2VkIHRvIGdhdGUgb3IgdW5nYXRlIHRoZSBtb2R1bGUgY2xvY2sKKyAqCisgKiBAcGFyYW0gYmFzZSBMUFRNUiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICoKKyAqIEByZXR1cm4gVGhlIExQVE1SIGluc3RhbmNlCisgKi8KK3N0YXRpYyB1aW50MzJfdCBMUFRNUl9HZXRJbnN0YW5jZShMUFRNUl9UeXBlICpiYXNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gTFBUTVIgYmFzZXMgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgTFBUTVJfVHlwZSAqY29uc3Qgc19scHRtckJhc2VzW10gPSBMUFRNUl9CQVNFX1BUUlM7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIExQVE1SIGNsb2NrcyBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBjb25zdCBjbG9ja19pcF9uYW1lX3Qgc19scHRtckNsb2Nrc1tdID0gTFBUTVJfQ0xPQ0tTOworCisjaWYgZGVmaW5lZChMUFRNUl9QRVJJUEhfQ0xPQ0tTKQorLyogQXJyYXkgb2YgTFBUTVIgZnVuY3Rpb25hbCBjbG9jayBuYW1lLiAqLworc3RhdGljIGNvbnN0IGNsb2NrX2lwX25hbWVfdCBzX2xwdG1yUGVyaXBoQ2xvY2tzW10gPSBMUFRNUl9QRVJJUEhfQ0xPQ0tTOworI2VuZGlmCisKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdWludDMyX3QgTFBUTVJfR2V0SW5zdGFuY2UoTFBUTVJfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19scHRtckJhc2VzKTsgaW5zdGFuY2UrKykKKyAgICB7CisgICAgICAgIGlmIChzX2xwdG1yQmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2xwdG1yQmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9pZCBMUFRNUl9Jbml0KExQVE1SX1R5cGUgKmJhc2UsIGNvbnN0IGxwdG1yX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNvbmZpZyk7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgCisgICAgdWludDMyX3QgaW5zdGFuY2UgPSBMUFRNUl9HZXRJbnN0YW5jZShiYXNlKTsKKworICAgIC8qIFVuZ2F0ZSB0aGUgTFBUTVIgY2xvY2sqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfbHB0bXJDbG9ja3NbaW5zdGFuY2VdKTsKKyNpZiBkZWZpbmVkKExQVE1SX1BFUklQSF9DTE9DS1MpCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19scHRtclBlcmlwaENsb2Nrc1tpbnN0YW5jZV0pOworI2VuZGlmCisKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworICAgIC8qIENvbmZpZ3VyZSB0aGUgdGltZXJzIG9wZXJhdGlvbiBtb2RlIGFuZCBpbnB1dCBwaW4gc2V0dXAgKi8KKyAgICBiYXNlLT5DU1IgPSAoTFBUTVJfQ1NSX1RNUyhjb25maWctPnRpbWVyTW9kZSkgfCBMUFRNUl9DU1JfVEZDKGNvbmZpZy0+ZW5hYmxlRnJlZVJ1bm5pbmcpIHwKKyAgICAgICAgICAgICAgICAgTFBUTVJfQ1NSX1RQUChjb25maWctPnBpblBvbGFyaXR5KSB8IExQVE1SX0NTUl9UUFMoY29uZmlnLT5waW5TZWxlY3QpKTsKKworICAgIC8qIENvbmZpZ3VyZSB0aGUgcHJlc2NhbGUgdmFsdWUgYW5kIGNsb2NrIHNvdXJjZSAqLworICAgIGJhc2UtPlBTUiA9IChMUFRNUl9QU1JfUFJFU0NBTEUoY29uZmlnLT52YWx1ZSkgfCBMUFRNUl9QU1JfUEJZUChjb25maWctPmJ5cGFzc1ByZXNjYWxlcikgfAorICAgICAgICAgICAgICAgICBMUFRNUl9QU1JfUENTKGNvbmZpZy0+cHJlc2NhbGVyQ2xvY2tTb3VyY2UpKTsKK30KKwordm9pZCBMUFRNUl9EZWluaXQoTFBUTVJfVHlwZSAqYmFzZSkKK3sKKyAgICAvKiBEaXNhYmxlIHRoZSBMUFRNUiBhbmQgcmVzZXQgdGhlIGludGVybmFsIGxvZ2ljICovCisgICAgYmFzZS0+Q1NSICY9IH5MUFRNUl9DU1JfVEVOX01BU0s7CisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorCisgICAgdWludDMyX3QgaW5zdGFuY2UgPSBMUFRNUl9HZXRJbnN0YW5jZShiYXNlKTsKKworICAgIC8qIEdhdGUgdGhlIExQVE1SIGNsb2NrKi8KKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soc19scHRtckNsb2Nrc1tpbnN0YW5jZV0pOworI2lmIGRlZmluZWQoTFBUTVJfUEVSSVBIX0NMT0NLUykKKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soc19scHRtclBlcmlwaENsb2Nrc1tpbnN0YW5jZV0pOworI2VuZGlmCisKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKwordm9pZCBMUFRNUl9HZXREZWZhdWx0Q29uZmlnKGxwdG1yX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNvbmZpZyk7CisKKyAgICAvKiBVc2UgdGltZSBjb3VudGVyIG1vZGUgKi8KKyAgICBjb25maWctPnRpbWVyTW9kZSA9IGtMUFRNUl9UaW1lck1vZGVUaW1lQ291bnRlcjsKKyAgICAvKiBVc2UgaW5wdXQgMCBhcyBzb3VyY2UgaW4gcHVsc2UgY291bnRlciBtb2RlICovCisgICAgY29uZmlnLT5waW5TZWxlY3QgPSBrTFBUTVJfUGluU2VsZWN0SW5wdXRfMDsKKyAgICAvKiBQdWxzZSBpbnB1dCBwaW4gcG9sYXJpdHkgaXMgYWN0aXZlLWhpZ2ggKi8KKyAgICBjb25maWctPnBpblBvbGFyaXR5ID0ga0xQVE1SX1BpblBvbGFyaXR5QWN0aXZlSGlnaDsKKyAgICAvKiBDb3VudGVyIHJlc2V0cyB3aGVuZXZlciBUQ0YgZmxhZyBpcyBzZXQgKi8KKyAgICBjb25maWctPmVuYWJsZUZyZWVSdW5uaW5nID0gZmFsc2U7CisgICAgLyogQnlwYXNzIHRoZSBwcmVzY2FsZXIgKi8KKyAgICBjb25maWctPmJ5cGFzc1ByZXNjYWxlciA9IHRydWU7CisgICAgLyogTFBUTVIgY2xvY2sgc291cmNlICovCisgICAgY29uZmlnLT5wcmVzY2FsZXJDbG9ja1NvdXJjZSA9IGtMUFRNUl9QcmVzY2FsZXJDbG9ja18xOworICAgIC8qIERpdmlkZSB0aGUgcHJlc2NhbGVyIGNsb2NrIGJ5IDIgKi8KKyAgICBjb25maWctPnZhbHVlID0ga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF8wOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB0bXIuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdG1yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjOTA5YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdG1yLmgKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX0xQVE1SX0hfCisjZGVmaW5lIF9GU0xfTFBUTVJfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBscHRtcgorICogQHsKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisjZGVmaW5lIEZTTF9MUFRNUl9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDEpKSAvKiE8IFZlcnNpb24gMi4wLjEgKi8KKy8qQH0qLworCisvKiEgQGJyaWVmIExQVE1SIHBpbiBzZWxlY3Rpb24gdXNlZCBpbiBwdWxzZSBjb3VudGVyIG1vZGUuKi8KK3R5cGVkZWYgZW51bSBfbHB0bXJfcGluX3NlbGVjdAoreworICAgIGtMUFRNUl9QaW5TZWxlY3RJbnB1dF8wID0gMHgwVSwgLyohPCBQdWxzZSBjb3VudGVyIGlucHV0IDAgaXMgc2VsZWN0ZWQgKi8KKyAgICBrTFBUTVJfUGluU2VsZWN0SW5wdXRfMSA9IDB4MVUsIC8qITwgUHVsc2UgY291bnRlciBpbnB1dCAxIGlzIHNlbGVjdGVkICovCisgICAga0xQVE1SX1BpblNlbGVjdElucHV0XzIgPSAweDJVLCAvKiE8IFB1bHNlIGNvdW50ZXIgaW5wdXQgMiBpcyBzZWxlY3RlZCAqLworICAgIGtMUFRNUl9QaW5TZWxlY3RJbnB1dF8zID0gMHgzVSAgLyohPCBQdWxzZSBjb3VudGVyIGlucHV0IDMgaXMgc2VsZWN0ZWQgKi8KK30gbHB0bXJfcGluX3NlbGVjdF90OworCisvKiEgQGJyaWVmIExQVE1SIHBpbiBwb2xhcml0eSB1c2VkIGluIHB1bHNlIGNvdW50ZXIgbW9kZS4qLwordHlwZWRlZiBlbnVtIF9scHRtcl9waW5fcG9sYXJpdHkKK3sKKyAgICBrTFBUTVJfUGluUG9sYXJpdHlBY3RpdmVIaWdoID0gMHgwVSwgLyohPCBQdWxzZSBDb3VudGVyIGlucHV0IHNvdXJjZSBpcyBhY3RpdmUtaGlnaCAqLworICAgIGtMUFRNUl9QaW5Qb2xhcml0eUFjdGl2ZUxvdyA9IDB4MVUgICAvKiE8IFB1bHNlIENvdW50ZXIgaW5wdXQgc291cmNlIGlzIGFjdGl2ZS1sb3cgKi8KK30gbHB0bXJfcGluX3BvbGFyaXR5X3Q7CisKKy8qISBAYnJpZWYgTFBUTVIgdGltZXIgbW9kZSBzZWxlY3Rpb24uKi8KK3R5cGVkZWYgZW51bSBfbHB0bXJfdGltZXJfbW9kZQoreworICAgIGtMUFRNUl9UaW1lck1vZGVUaW1lQ291bnRlciA9IDB4MFUsIC8qITwgVGltZSBDb3VudGVyIG1vZGUgKi8KKyAgICBrTFBUTVJfVGltZXJNb2RlUHVsc2VDb3VudGVyID0gMHgxVSAvKiE8IFB1bHNlIENvdW50ZXIgbW9kZSAqLworfSBscHRtcl90aW1lcl9tb2RlX3Q7CisKKy8qISBAYnJpZWYgTFBUTVIgcHJlc2NhbGVyL2dsaXRjaCBmaWx0ZXIgdmFsdWVzKi8KK3R5cGVkZWYgZW51bSBfbHB0bXJfcHJlc2NhbGVyX2dsaXRjaF92YWx1ZQoreworICAgIGtMUFRNUl9QcmVzY2FsZV9HbGl0Y2hfMCA9IDB4MFUsICAvKiE8IFByZXNjYWxlciBkaXZpZGUgMiwgZ2xpdGNoIGZpbHRlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgc2V0dGluZyAqLworICAgIGtMUFRNUl9QcmVzY2FsZV9HbGl0Y2hfMSA9IDB4MVUsICAvKiE8IFByZXNjYWxlciBkaXZpZGUgNCwgZ2xpdGNoIGZpbHRlciAyICovCisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF8yID0gMHgyVSwgIC8qITwgUHJlc2NhbGVyIGRpdmlkZSA4LCBnbGl0Y2ggZmlsdGVyIDQgKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzMgPSAweDNVLCAgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDE2LCBnbGl0Y2ggZmlsdGVyIDggKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzQgPSAweDRVLCAgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDMyLCBnbGl0Y2ggZmlsdGVyIDE2ICovCisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF81ID0gMHg1VSwgIC8qITwgUHJlc2NhbGVyIGRpdmlkZSA2NCwgZ2xpdGNoIGZpbHRlciAzMiAqLworICAgIGtMUFRNUl9QcmVzY2FsZV9HbGl0Y2hfNiA9IDB4NlUsICAvKiE8IFByZXNjYWxlciBkaXZpZGUgMTI4LCBnbGl0Y2ggZmlsdGVyIDY0ICovCisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF83ID0gMHg3VSwgIC8qITwgUHJlc2NhbGVyIGRpdmlkZSAyNTYsIGdsaXRjaCBmaWx0ZXIgMTI4ICovCisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF84ID0gMHg4VSwgIC8qITwgUHJlc2NhbGVyIGRpdmlkZSA1MTIsIGdsaXRjaCBmaWx0ZXIgMjU2ICovCisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF85ID0gMHg5VSwgIC8qITwgUHJlc2NhbGVyIGRpdmlkZSAxMDI0LCBnbGl0Y2ggZmlsdGVyIDUxMiovCisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF8xMCA9IDB4QVUsIC8qITwgUHJlc2NhbGVyIGRpdmlkZSAyMDQ4IGdsaXRjaCBmaWx0ZXIgMTAyNCAqLworICAgIGtMUFRNUl9QcmVzY2FsZV9HbGl0Y2hfMTEgPSAweEJVLCAvKiE8IFByZXNjYWxlciBkaXZpZGUgNDA5NiwgZ2xpdGNoIGZpbHRlciAyMDQ4ICovCisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF8xMiA9IDB4Q1UsIC8qITwgUHJlc2NhbGVyIGRpdmlkZSA4MTkyLCBnbGl0Y2ggZmlsdGVyIDQwOTYgKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzEzID0gMHhEVSwgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDE2Mzg0LCBnbGl0Y2ggZmlsdGVyIDgxOTIgKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzE0ID0gMHhFVSwgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDMyNzY4LCBnbGl0Y2ggZmlsdGVyIDE2Mzg0ICovCisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF8xNSA9IDB4RlUgIC8qITwgUHJlc2NhbGVyIGRpdmlkZSA2NTUzNiwgZ2xpdGNoIGZpbHRlciAzMjc2OCAqLworfSBscHRtcl9wcmVzY2FsZXJfZ2xpdGNoX3ZhbHVlX3Q7CisKKy8qIQorICogQGJyaWVmIExQVE1SIHByZXNjYWxlci9nbGl0Y2ggZmlsdGVyIGNsb2NrIHNlbGVjdC4KKyAqIEBub3RlIENsb2NrIGNvbm5lY3Rpb25zIGFyZSBTb0Mtc3BlY2lmaWMKKyAqLwordHlwZWRlZiBlbnVtIF9scHRtcl9wcmVzY2FsZXJfY2xvY2tfc2VsZWN0Cit7CisgICAga0xQVE1SX1ByZXNjYWxlckNsb2NrXzAgPSAweDBVLCAvKiE8IFByZXNjYWxlci9nbGl0Y2ggZmlsdGVyIGNsb2NrIDAgc2VsZWN0ZWQuICovCisgICAga0xQVE1SX1ByZXNjYWxlckNsb2NrXzEgPSAweDFVLCAvKiE8IFByZXNjYWxlci9nbGl0Y2ggZmlsdGVyIGNsb2NrIDEgc2VsZWN0ZWQuICovCisgICAga0xQVE1SX1ByZXNjYWxlckNsb2NrXzIgPSAweDJVLCAvKiE8IFByZXNjYWxlci9nbGl0Y2ggZmlsdGVyIGNsb2NrIDIgc2VsZWN0ZWQuICovCisgICAga0xQVE1SX1ByZXNjYWxlckNsb2NrXzMgPSAweDNVLCAvKiE8IFByZXNjYWxlci9nbGl0Y2ggZmlsdGVyIGNsb2NrIDMgc2VsZWN0ZWQuICovCit9IGxwdG1yX3ByZXNjYWxlcl9jbG9ja19zZWxlY3RfdDsKKworLyohIEBicmllZiBMaXN0IG9mIHRoZSBMUFRNUiBpbnRlcnJ1cHRzICovCit0eXBlZGVmIGVudW0gX2xwdG1yX2ludGVycnVwdF9lbmFibGUKK3sKKyAgICBrTFBUTVJfVGltZXJJbnRlcnJ1cHRFbmFibGUgPSBMUFRNUl9DU1JfVElFX01BU0ssIC8qITwgVGltZXIgaW50ZXJydXB0IGVuYWJsZSAqLworfSBscHRtcl9pbnRlcnJ1cHRfZW5hYmxlX3Q7CisKKy8qISBAYnJpZWYgTGlzdCBvZiB0aGUgTFBUTVIgc3RhdHVzIGZsYWdzICovCit0eXBlZGVmIGVudW0gX2xwdG1yX3N0YXR1c19mbGFncworeworICAgIGtMUFRNUl9UaW1lckNvbXBhcmVGbGFnID0gTFBUTVJfQ1NSX1RDRl9NQVNLLCAvKiE8IFRpbWVyIGNvbXBhcmUgZmxhZyAqLworfSBscHRtcl9zdGF0dXNfZmxhZ3NfdDsKKworLyohCisgKiBAYnJpZWYgTFBUTVIgY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgTFBUTVIgcGVyaXBoZXJhbC4gVG8gaW5pdGlhbGl6ZSB0aGlzCisgKiBzdHJ1Y3R1cmUgdG8gcmVhc29uYWJsZSBkZWZhdWx0cywgY2FsbCB0aGUgTFBUTVJfR2V0RGVmYXVsdENvbmZpZygpIGZ1bmN0aW9uIGFuZCBwYXNzIGEKKyAqIHBvaW50ZXIgdG8geW91ciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGUgY29uZmlndXJhdGlvbiBzdHJ1Y3QgY2FuIGJlIG1hZGUgY29uc3RhbnQgc28gaXQgcmVzaWRlcyBpbiBmbGFzaC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2xwdG1yX2NvbmZpZworeworICAgIGxwdG1yX3RpbWVyX21vZGVfdCB0aW1lck1vZGU7ICAgICAvKiE8IFRpbWUgY291bnRlciBtb2RlIG9yIHB1bHNlIGNvdW50ZXIgbW9kZSAqLworICAgIGxwdG1yX3Bpbl9zZWxlY3RfdCBwaW5TZWxlY3Q7ICAgICAvKiE8IExQVE1SIHB1bHNlIGlucHV0IHBpbiBzZWxlY3Q7IHVzZWQgb25seSBpbiBwdWxzZSBjb3VudGVyIG1vZGUgKi8KKyAgICBscHRtcl9waW5fcG9sYXJpdHlfdCBwaW5Qb2xhcml0eTsgLyohPCBMUFRNUiBwdWxzZSBpbnB1dCBwaW4gcG9sYXJpdHk7IHVzZWQgb25seSBpbiBwdWxzZSBjb3VudGVyIG1vZGUgKi8KKyAgICBib29sIGVuYWJsZUZyZWVSdW5uaW5nOyAgICAgICAgICAgLyohPCBUcnVlOiBlbmFibGUgZnJlZSBydW5uaW5nLCBjb3VudGVyIGlzIHJlc2V0IG9uIG92ZXJmbG93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2U6IGNvdW50ZXIgaXMgcmVzZXQgd2hlbiB0aGUgY29tcGFyZSBmbGFnIGlzIHNldCAqLworICAgIGJvb2wgYnlwYXNzUHJlc2NhbGVyOyAgICAgICAgICAgICAvKiE8IFRydWU6IGJ5cGFzcyBwcmVzY2FsZXI7IGZhbHNlOiB1c2UgY2xvY2sgZnJvbSBwcmVzY2FsZXIgKi8KKyAgICBscHRtcl9wcmVzY2FsZXJfY2xvY2tfc2VsZWN0X3QgcHJlc2NhbGVyQ2xvY2tTb3VyY2U7IC8qITwgTFBUTVIgY2xvY2sgc291cmNlICovCisgICAgbHB0bXJfcHJlc2NhbGVyX2dsaXRjaF92YWx1ZV90IHZhbHVlOyAgICAgICAgICAgICAgICAvKiE8IFByZXNjYWxlciBvciBnbGl0Y2ggZmlsdGVyIHZhbHVlICovCit9IGxwdG1yX2NvbmZpZ190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQG5hbWUgSW5pdGlhbGl6YXRpb24gYW5kIGRlaW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgVW5nYXRlcyB0aGUgTFBUTVIgY2xvY2sgYW5kIGNvbmZpZ3VyZXMgdGhlIHBlcmlwaGVyYWwgZm9yIGEgYmFzaWMgb3BlcmF0aW9uLgorICoKKyAqIEBub3RlIFRoaXMgQVBJIHNob3VsZCBiZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhlIExQVE1SIGRyaXZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSAgIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgTFBUTVIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgTFBUTVJfSW5pdChMUFRNUl9UeXBlICpiYXNlLCBjb25zdCBscHRtcl9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgR2F0ZXMgdGhlIExQVE1SIGNsb2NrLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKi8KK3ZvaWQgTFBUTVJfRGVpbml0KExQVE1SX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBGaWxscyBpbiB0aGUgTFBUTVIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHNldHRpbmdzLgorICoKKyAqIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYXMgZm9sbG93cy4KKyAqIEBjb2RlCisgKiAgICBjb25maWctPnRpbWVyTW9kZSA9IGtMUFRNUl9UaW1lck1vZGVUaW1lQ291bnRlcjsKKyAqICAgIGNvbmZpZy0+cGluU2VsZWN0ID0ga0xQVE1SX1BpblNlbGVjdElucHV0XzA7CisgKiAgICBjb25maWctPnBpblBvbGFyaXR5ID0ga0xQVE1SX1BpblBvbGFyaXR5QWN0aXZlSGlnaDsKKyAqICAgIGNvbmZpZy0+ZW5hYmxlRnJlZVJ1bm5pbmcgPSBmYWxzZTsKKyAqICAgIGNvbmZpZy0+YnlwYXNzUHJlc2NhbGVyID0gdHJ1ZTsKKyAqICAgIGNvbmZpZy0+cHJlc2NhbGVyQ2xvY2tTb3VyY2UgPSBrTFBUTVJfUHJlc2NhbGVyQ2xvY2tfMTsKKyAqICAgIGNvbmZpZy0+dmFsdWUgPSBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzA7CisgKiBAZW5kY29kZQorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIExQVE1SIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIExQVE1SX0dldERlZmF1bHRDb25maWcobHB0bXJfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qISBAfSovCisKKy8qIQorICogQG5hbWUgSW50ZXJydXB0IEludGVyZmFjZQorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBzZWxlY3RlZCBMUFRNUiBpbnRlcnJ1cHRzLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0cyB0byBlbmFibGUuIFRoaXMgaXMgYSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgICAgICBlbnVtZXJhdGlvbiA6OmxwdG1yX2ludGVycnVwdF9lbmFibGVfdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgTFBUTVJfRW5hYmxlSW50ZXJydXB0cyhMUFRNUl9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIHVpbnQzMl90IHJlZyA9IGJhc2UtPkNTUjsKKworICAgIC8qIENsZWFyIHRoZSBUQ0YgYml0IHNvIHRoYXQgd2UgZG9uJ3QgY2xlYXIgdGhpcyB3MWMgYml0IHdoZW4gd3JpdGluZyBiYWNrICovCisgICAgcmVnICY9IH4oTFBUTVJfQ1NSX1RDRl9NQVNLKTsKKyAgICByZWcgfD0gbWFzazsKKyAgICBiYXNlLT5DU1IgPSByZWc7Cit9CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBzZWxlY3RlZCBMUFRNUiBpbnRlcnJ1cHRzLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0cyB0byBkaXNhYmxlLiBUaGlzIGlzIGEgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICAgICAgZW51bWVyYXRpb24gOjpscHRtcl9pbnRlcnJ1cHRfZW5hYmxlX3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMUFRNUl9EaXNhYmxlSW50ZXJydXB0cyhMUFRNUl9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIHVpbnQzMl90IHJlZyA9IGJhc2UtPkNTUjsKKworICAgIC8qIENsZWFyIHRoZSBUQ0YgYml0IHNvIHRoYXQgd2UgZG9uJ3QgY2xlYXIgdGhpcyB3MWMgYml0IHdoZW4gd3JpdGluZyBiYWNrICovCisgICAgcmVnICY9IH4oTFBUTVJfQ1NSX1RDRl9NQVNLKTsKKyAgICByZWcgJj0gfm1hc2s7CisgICAgYmFzZS0+Q1NSID0gcmVnOworfQorCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBlbmFibGVkIExQVE1SIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGJhc2UgTFBUTVIgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuIFRoZSBlbmFibGVkIGludGVycnVwdHMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgZW51bWVyYXRpb24gOjpscHRtcl9pbnRlcnJ1cHRfZW5hYmxlX3QKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBMUFRNUl9HZXRFbmFibGVkSW50ZXJydXB0cyhMUFRNUl9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAoYmFzZS0+Q1NSICYgTFBUTVJfQ1NSX1RJRV9NQVNLKTsKK30KKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBTdGF0dXMgSW50ZXJmYWNlCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIExQVE1SIHN0YXR1cyBmbGFncy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFRNUiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICoKKyAqIEByZXR1cm4gVGhlIHN0YXR1cyBmbGFncy4gVGhpcyBpcyB0aGUgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICBlbnVtZXJhdGlvbiA6OmxwdG1yX3N0YXR1c19mbGFnc190CisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgTFBUTVJfR2V0U3RhdHVzRmxhZ3MoTFBUTVJfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKGJhc2UtPkNTUiAmIExQVE1SX0NTUl9UQ0ZfTUFTSyk7Cit9CisKKy8qIQorICogQGJyaWVmICBDbGVhcnMgdGhlIExQVE1SIHN0YXR1cyBmbGFncy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFRNUiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIG1hc2sgVGhlIHN0YXR1cyBmbGFncyB0byBjbGVhci4gVGhpcyBpcyBhIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgICAgIGVudW1lcmF0aW9uIDo6bHB0bXJfc3RhdHVzX2ZsYWdzX3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMUFRNUl9DbGVhclN0YXR1c0ZsYWdzKExQVE1SX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+Q1NSIHw9IG1hc2s7Cit9CisKKy8qISBAfSovCisKKy8qIQorICogQG5hbWUgUmVhZCBhbmQgd3JpdGUgdGhlIHRpbWVyIHBlcmlvZAorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSB0aW1lciBwZXJpb2QgaW4gdW5pdHMgb2YgY291bnQuCisgKgorICogVGltZXJzIGNvdW50cyBmcm9tIDAgdW50aWwgaXQgZXF1YWxzIHRoZSBjb3VudCB2YWx1ZSBzZXQgaGVyZS4gVGhlIGNvdW50IHZhbHVlIGlzIHdyaXR0ZW4gdG8KKyAqIHRoZSBDTVIgcmVnaXN0ZXIuCisgKgorICogQG5vdGUKKyAqIDEuIFRoZSBUQ0YgZmxhZyBpcyBzZXQgd2l0aCB0aGUgQ05SIGVxdWFscyB0aGUgY291bnQgcHJvdmlkZWQgaGVyZSBhbmQgdGhlbiBpbmNyZW1lbnRzLgorICogMi4gQ2FsbCB0aGUgdXRpbGl0eSBtYWNyb3MgcHJvdmlkZWQgaW4gdGhlIGZzbF9jb21tb24uaCB0byBjb252ZXJ0IHRvIHRpY2tzLgorICoKKyAqIEBwYXJhbSBiYXNlICBMUFRNUiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHRpY2tzIEEgdGltZXIgcGVyaW9kIGluIHVuaXRzIG9mIHRpY2tzLCB3aGljaCBzaG91bGQgYmUgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIDEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMUFRNUl9TZXRUaW1lclBlcmlvZChMUFRNUl9UeXBlICpiYXNlLCB1aW50MzJfdCB0aWNrcykKK3sKKyAgICBhc3NlcnQodGlja3MgPiAwKTsKKyAgICBiYXNlLT5DTVIgPSB0aWNrcyAtIDE7Cit9CisKKy8qIQorICogQGJyaWVmIFJlYWRzIHRoZSBjdXJyZW50IHRpbWVyIGNvdW50aW5nIHZhbHVlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVhbC10aW1lIHRpbWVyIGNvdW50aW5nIHZhbHVlIGluIGEgcmFuZ2UgZnJvbSAwIHRvIGEKKyAqIHRpbWVyIHBlcmlvZC4KKyAqCisgKiBAbm90ZSBDYWxsIHRoZSB1dGlsaXR5IG1hY3JvcyBwcm92aWRlZCBpbiB0aGUgZnNsX2NvbW1vbi5oIHRvIGNvbnZlcnQgdGlja3MgdG8gdXNlYyBvciBtc2VjLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKgorICogQHJldHVybiBUaGUgY3VycmVudCBjb3VudGVyIHZhbHVlIGluIHRpY2tzCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgTFBUTVJfR2V0Q3VycmVudFRpbWVyQ291bnQoTFBUTVJfVHlwZSAqYmFzZSkKK3sKKyAgICAvKiBNdXN0IGZpcnN0IHdyaXRlIGFueSB2YWx1ZSB0byB0aGUgQ05SLiBUaGlzIHN5bmNocm9uaXplcyBhbmQgcmVnaXN0ZXJzIHRoZSBjdXJyZW50IHZhbHVlCisgICAgICogb2YgdGhlIENOUiBpbnRvIGEgdGVtcG9yYXJ5IHJlZ2lzdGVyIHdoaWNoIGNhbiB0aGVuIGJlIHJlYWQKKyAgICAgKi8KKyAgICBiYXNlLT5DTlIgPSAwVTsKKyAgICByZXR1cm4gKHVpbnQzMl90KSgoYmFzZS0+Q05SICYgTFBUTVJfQ05SX0NPVU5URVJfTUFTSykgPj4gTFBUTVJfQ05SX0NPVU5URVJfU0hJRlQpOworfQorCisvKiEgQH0qLworCisvKiEKKyAqIEBuYW1lIFRpbWVyIFN0YXJ0IGFuZCBTdG9wCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFN0YXJ0cyB0aGUgdGltZXIuCisgKgorICogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgdGltZXIgY291bnRzIHVwIHRvIHRoZSBDTVIgcmVnaXN0ZXIgdmFsdWUuCisgKiBFYWNoIHRpbWUgdGhlIHRpbWVyIHJlYWNoZXMgdGhlIENNUiB2YWx1ZSBhbmQgdGhlbiBpbmNyZW1lbnRzLCBpdCBnZW5lcmF0ZXMgYQorICogdHJpZ2dlciBwdWxzZSBhbmQgc2V0cyB0aGUgdGltZW91dCBpbnRlcnJ1cHQgZmxhZy4gQW4gaW50ZXJydXB0IGlzIGFsc28KKyAqIHRyaWdnZXJlZCBpZiB0aGUgdGltZXIgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtIGJhc2UgTFBUTVIgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIExQVE1SX1N0YXJ0VGltZXIoTFBUTVJfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCByZWcgPSBiYXNlLT5DU1I7CisKKyAgICAvKiBDbGVhciB0aGUgVENGIGJpdCB0byBhdm9pZCBjbGVhcmluZyB0aGUgdzFjIGJpdCB3aGVuIHdyaXRpbmcgYmFjay4gKi8KKyAgICByZWcgJj0gfihMUFRNUl9DU1JfVENGX01BU0spOworICAgIHJlZyB8PSBMUFRNUl9DU1JfVEVOX01BU0s7CisgICAgYmFzZS0+Q1NSID0gcmVnOworfQorCisvKiEKKyAqIEBicmllZiBTdG9wcyB0aGUgdGltZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBzdG9wcyB0aGUgdGltZXIgYW5kIHJlc2V0cyB0aGUgdGltZXIncyBjb3VudGVyIHJlZ2lzdGVyLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMUFRNUl9TdG9wVGltZXIoTFBUTVJfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCByZWcgPSBiYXNlLT5DU1I7CisKKyAgICAvKiBDbGVhciB0aGUgVENGIGJpdCB0byBhdm9pZCBjbGVhcmluZyB0aGUgdzFjIGJpdCB3aGVuIHdyaXRpbmcgYmFjay4gKi8KKyAgICByZWcgJj0gfihMUFRNUl9DU1JfVENGX01BU0spOworICAgIHJlZyAmPSB+TFBUTVJfQ1NSX1RFTl9NQVNLOworICAgIGJhc2UtPkNTUiA9IHJlZzsKK30KKworLyohIEB9Ki8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfTFBUTVJfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydC5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4M2I1NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydC5jCkBAIC0wLDAgKzEsMTI5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9scHVhcnQuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTFBVQVJUIHRyYW5zZmVyIHN0YXRlLiAqLworZW51bSBfbHB1YXJ0X3RyYW5zZmVyX3N0YXRlcworeworICAgIGtMUFVBUlRfVHhJZGxlLCAvKiE8IFRYIGlkbGUuICovCisgICAga0xQVUFSVF9UeEJ1c3ksIC8qITwgVFggYnVzeS4gKi8KKyAgICBrTFBVQVJUX1J4SWRsZSwgLyohPCBSWCBpZGxlLiAqLworICAgIGtMUFVBUlRfUnhCdXN5ICAvKiE8IFJYIGJ1c3kuICovCit9OworCisvKiBUeXBlZGVmIGZvciBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KK3R5cGVkZWYgdm9pZCAoKmxwdWFydF9pc3JfdCkoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBicmllZiBHZXQgdGhlIExQVUFSVCBpbnN0YW5jZSBmcm9tIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gTFBVQVJUIGluc3RhbmNlLgorICovCit1aW50MzJfdCBMUFVBUlRfR2V0SW5zdGFuY2UoTFBVQVJUX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBHZXQgdGhlIGxlbmd0aCBvZiByZWNlaXZlZCBkYXRhIGluIFJYIHJpbmcgYnVmZmVyLgorICoKKyAqIEB1c2VyRGF0YSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICogQHJldHVybiBMZW5ndGggb2YgcmVjZWl2ZWQgZGF0YSBpbiBSWCByaW5nIGJ1ZmZlci4KKyAqLworc3RhdGljIHNpemVfdCBMUFVBUlRfVHJhbnNmZXJHZXRSeFJpbmdCdWZmZXJMZW5ndGgoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgQ2hlY2sgd2hldGhlciB0aGUgUlggcmluZyBidWZmZXIgaXMgZnVsbC4KKyAqCisgKiBAdXNlckRhdGEgaGFuZGxlIExQVUFSVCBoYW5kbGUgcG9pbnRlci4KKyAqIEByZXR2YWwgdHJ1ZSAgUlggcmluZyBidWZmZXIgaXMgZnVsbC4KKyAqIEByZXR2YWwgZmFsc2UgUlggcmluZyBidWZmZXIgaXMgbm90IGZ1bGwuCisgKi8KK3N0YXRpYyBib29sIExQVUFSVF9UcmFuc2ZlcklzUnhSaW5nQnVmZmVyRnVsbChMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBXcml0ZSB0byBUWCByZWdpc3RlciB1c2luZyBub24tYmxvY2tpbmcgbWV0aG9kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGRhdGEgdG8gdGhlIFRYIHJlZ2lzdGVyIGRpcmVjdGx5LCB1cHBlciBsYXllciBtdXN0IG1ha2UKKyAqIHN1cmUgdGhlIFRYIHJlZ2lzdGVyIGlzIGVtcHR5IG9yIFRYIEZJRk8gaGFzIGVtcHR5IHJvb20gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgYWxsIHRoZSBkYXRhIGhhcyBiZWVuIHNlbnQgb3V0IHRvIGJ1cywKKyAqIHNvIGJlZm9yZSBkaXNhYmxlIFRYLCBjaGVjayBrTFBVQVJUX1RyYW5zbWlzc2lvbkNvbXBsZXRlRmxhZyB0byBlbnN1cmUgdGhlIFRYIGlzCisgKiBmaW5pc2hlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZGF0YSBTdGFydCBhZGRyZXNzcyBvZiB0aGUgZGF0YSB0byB3cml0ZS4KKyAqIEBwYXJhbSBsZW5ndGggU2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkIExQVUFSVF9Xcml0ZU5vbkJsb2NraW5nKExQVUFSVF9UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKworLyohCisgKiBAYnJpZWYgUmVhZCBSWCByZWdpc3RlciB1c2luZyBub24tYmxvY2tpbmcgbWV0aG9kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgZGF0YSBmcm9tIHRoZSBUWCByZWdpc3RlciBkaXJlY3RseSwgdXBwZXIgbGF5ZXIgbXVzdCBtYWtlCisgKiBzdXJlIHRoZSBSWCByZWdpc3RlciBpcyBmdWxsIG9yIFRYIEZJRk8gaGFzIGRhdGEgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZGF0YSBTdGFydCBhZGRyZXNzcyBvZiB0aGUgYnVmZmVyIHRvIHN0b3JlIHRoZSByZWNlaXZlZCBkYXRhLgorICogQHBhcmFtIGxlbmd0aCBTaXplIG9mIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkIExQVUFSVF9SZWFkTm9uQmxvY2tpbmcoTFBVQVJUX1R5cGUgKmJhc2UsIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQXJyYXkgb2YgTFBVQVJUIGhhbmRsZS4gKi8KK3N0YXRpYyBscHVhcnRfaGFuZGxlX3QgKnNfbHB1YXJ0SGFuZGxlW0ZTTF9GRUFUVVJFX1NPQ19MUFVBUlRfQ09VTlRdOworLyogQXJyYXkgb2YgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLiAqLworc3RhdGljIExQVUFSVF9UeXBlICpjb25zdCBzX2xwdWFydEJhc2VzW10gPSBMUFVBUlRfQkFTRV9QVFJTOworLyogQXJyYXkgb2YgTFBVQVJUIElSUSBudW1iZXIuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUSkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TRVBBUkFURV9SWF9UWF9JUlEKK3N0YXRpYyBjb25zdCBJUlFuX1R5cGUgc19scHVhcnRSeElSUVtdID0gTFBVQVJUX1JYX0lSUVM7CitzdGF0aWMgY29uc3QgSVJRbl9UeXBlIHNfbHB1YXJ0VHhJUlFbXSA9IExQVUFSVF9UWF9JUlFTOworI2Vsc2UKK3N0YXRpYyBjb25zdCBJUlFuX1R5cGUgc19scHVhcnRJUlFbXSA9IExQVUFSVF9SWF9UWF9JUlFTOworI2VuZGlmCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorLyogQXJyYXkgb2YgTFBVQVJUIGNsb2NrIG5hbWUuICovCitzdGF0aWMgY29uc3QgY2xvY2tfaXBfbmFtZV90IHNfbHB1YXJ0Q2xvY2tbXSA9IExQVUFSVF9DTE9DS1M7CisKKyNpZiBkZWZpbmVkKExQVUFSVF9QRVJJUEhfQ0xPQ0tTKQorLyogQXJyYXkgb2YgTFBVQVJUIGZ1bmN0aW9uYWwgY2xvY2sgbmFtZS4gKi8KK3N0YXRpYyBjb25zdCBjbG9ja19pcF9uYW1lX3Qgc19scHVhcnRQZXJpcGhDbG9ja3NbXSA9IExQVUFSVF9QRVJJUEhfQ0xPQ0tTOworI2VuZGlmCisKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworLyogTFBVQVJUIElTUiBmb3IgdHJhbnNhY3Rpb25hbCBBUElzLiAqLworc3RhdGljIGxwdWFydF9pc3JfdCBzX2xwdWFydElzcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50MzJfdCBMUFVBUlRfR2V0SW5zdGFuY2UoTFBVQVJUX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgaW5zdGFuY2U7CisKKyAgICAvKiBGaW5kIHRoZSBpbnN0YW5jZSBpbmRleCBmcm9tIGJhc2UgYWRkcmVzcyBtYXBwaW5ncy4gKi8KKyAgICBmb3IgKGluc3RhbmNlID0gMDsgaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfbHB1YXJ0QmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfbHB1YXJ0QmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2xwdWFydEJhc2VzKSk7CisKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3N0YXRpYyBzaXplX3QgTFBVQVJUX1RyYW5zZmVyR2V0UnhSaW5nQnVmZmVyTGVuZ3RoKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIHNpemVfdCBzaXplOworCisgICAgaWYgKGhhbmRsZS0+cnhSaW5nQnVmZmVyVGFpbCA+IGhhbmRsZS0+cnhSaW5nQnVmZmVySGVhZCkKKyAgICB7CisgICAgICAgIHNpemUgPSAoc2l6ZV90KShoYW5kbGUtPnJ4UmluZ0J1ZmZlckhlYWQgKyBoYW5kbGUtPnJ4UmluZ0J1ZmZlclNpemUgLSBoYW5kbGUtPnJ4UmluZ0J1ZmZlclRhaWwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplID0gKHNpemVfdCkoaGFuZGxlLT5yeFJpbmdCdWZmZXJIZWFkIC0gaGFuZGxlLT5yeFJpbmdCdWZmZXJUYWlsKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGJvb2wgTFBVQVJUX1RyYW5zZmVySXNSeFJpbmdCdWZmZXJGdWxsKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIGJvb2wgZnVsbDsKKworICAgIGlmIChMUFVBUlRfVHJhbnNmZXJHZXRSeFJpbmdCdWZmZXJMZW5ndGgoYmFzZSwgaGFuZGxlKSA9PSAoaGFuZGxlLT5yeFJpbmdCdWZmZXJTaXplIC0gMVUpKQorICAgIHsKKyAgICAgICAgZnVsbCA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZ1bGwgPSBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZ1bGw7Cit9CisKK3N0YXRpYyB2b2lkIExQVUFSVF9Xcml0ZU5vbkJsb2NraW5nKExQVUFSVF9UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGFzc2VydChkYXRhKTsKKworICAgIHNpemVfdCBpOworCisgICAgLyogVGhlIE5vbiBCbG9ja2luZyB3cml0ZSBkYXRhIEFQSSBhc3N1bWUgdXNlciBoYXZlIGVuc3VyZWQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluCisgICAgcGVyaXBoZXJhbCB0byB3cml0ZS4gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBiYXNlLT5EQVRBID0gZGF0YVtpXTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIExQVUFSVF9SZWFkTm9uQmxvY2tpbmcoTFBVQVJUX1R5cGUgKmJhc2UsIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXNzZXJ0KGRhdGEpOworCisgICAgc2l6ZV90IGk7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUCisgICAgdWludDMyX3QgY3RybCA9IGJhc2UtPkNUUkw7CisgICAgYm9vbCBpc1NldmVuRGF0YUJpdHMgPQorICAgICAgICAoKGN0cmwgJiBMUFVBUlRfQ1RSTF9NN19NQVNLKSB8fAorICAgICAgICAgKCghKGN0cmwgJiBMUFVBUlRfQ1RSTF9NN19NQVNLKSkgJiYgKCEoY3RybCAmIExQVUFSVF9DVFJMX01fTUFTSykpICYmIChjdHJsICYgTFBVQVJUX0NUUkxfUEVfTUFTSykpKTsKKyNlbmRpZgorCisgICAgLyogVGhlIE5vbiBCbG9ja2luZyByZWFkIGRhdGEgQVBJIGFzc3VtZSB1c2VyIGhhdmUgZW5zdXJlZCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaW4KKyAgICBwZXJpcGhlcmFsIHRvIHdyaXRlLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICB7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUCisgICAgICAgIGlmIChpc1NldmVuRGF0YUJpdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGFbaV0gPSAoYmFzZS0+REFUQSAmIDB4N0YpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YVtpXSA9IGJhc2UtPkRBVEE7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGRhdGFbaV0gPSBiYXNlLT5EQVRBOworI2VuZGlmCisgICAgfQorfQorCitzdGF0dXNfdCBMUFVBUlRfSW5pdChMUFVBUlRfVHlwZSAqYmFzZSwgY29uc3QgbHB1YXJ0X2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IHNyY0Nsb2NrX0h6KQoreworICAgIGFzc2VydChjb25maWcpOworICAgIGFzc2VydChjb25maWctPmJhdWRSYXRlX0Jwcyk7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8pICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTworICAgIGFzc2VydChGU0xfRkVBVFVSRV9MUFVBUlRfRklGT19TSVpFbihiYXNlKSA+PSBjb25maWctPnR4Rmlmb1dhdGVybWFyayk7CisgICAgYXNzZXJ0KEZTTF9GRUFUVVJFX0xQVUFSVF9GSUZPX1NJWkVuKGJhc2UpID49IGNvbmZpZy0+cnhGaWZvV2F0ZXJtYXJrKTsKKyNlbmRpZgorCisgICAgdWludDMyX3QgdGVtcDsKKyAgICB1aW50MTZfdCBzYnIsIHNiclRlbXA7CisgICAgdWludDMyX3Qgb3NyLCBvc3JUZW1wLCB0ZW1wRGlmZiwgY2FsY3VsYXRlZEJhdWQsIGJhdWREaWZmOworCisgICAgLyogVGhpcyBMUFVBUlQgaW5zdGFudGlhdGlvbiB1c2VzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGJhdWQgcmF0ZSBjYWxjdWxhdGlvbgorICAgICAqIFRoZSBpZGVhIGlzIHRvIHVzZSB0aGUgYmVzdCBPU1IgKG92ZXItc2FtcGxpbmcgcmF0ZSkgcG9zc2libGUKKyAgICAgKiBOb3RlLCBPU1IgaXMgdHlwaWNhbGx5IGhhcmQtc2V0IHRvIDE2IGluIG90aGVyIExQVUFSVCBpbnN0YW50aWF0aW9ucworICAgICAqIGxvb3AgdG8gZmluZCB0aGUgYmVzdCBPU1IgdmFsdWUgcG9zc2libGUsIG9uZSB0aGF0IGdlbmVyYXRlcyBtaW5pbXVtIGJhdWREaWZmCisgICAgICogaXRlcmF0ZSB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIG9mIE9TUiAqLworCisgICAgYmF1ZERpZmYgPSBjb25maWctPmJhdWRSYXRlX0JwczsKKyAgICBvc3IgPSAwOworICAgIHNiciA9IDA7CisgICAgZm9yIChvc3JUZW1wID0gNDsgb3NyVGVtcCA8PSAzMjsgb3NyVGVtcCsrKQorICAgIHsKKyAgICAgICAgLyogY2FsY3VsYXRlIHRoZSB0ZW1wb3Jhcnkgc2JyIHZhbHVlICAgKi8KKyAgICAgICAgc2JyVGVtcCA9IChzcmNDbG9ja19IeiAvIChjb25maWctPmJhdWRSYXRlX0JwcyAqIG9zclRlbXApKTsKKyAgICAgICAgLypzZXQgc2JyVGVtcCB0byAxIGlmIHRoZSBzb3VyY2VDbG9ja0luSHogY2FuIG5vdCBzYXRpc2Z5IHRoZSBkZXNpcmVkIGJhdWQgcmF0ZSovCisgICAgICAgIGlmIChzYnJUZW1wID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNiclRlbXAgPSAxOworICAgICAgICB9CisgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgYmF1ZCByYXRlIGJhc2VkIG9uIHRoZSB0ZW1wb3JhcnkgT1NSIGFuZCBTQlIgdmFsdWVzICovCisgICAgICAgIGNhbGN1bGF0ZWRCYXVkID0gKHNyY0Nsb2NrX0h6IC8gKG9zclRlbXAgKiBzYnJUZW1wKSk7CisKKyAgICAgICAgdGVtcERpZmYgPSBjYWxjdWxhdGVkQmF1ZCAtIGNvbmZpZy0+YmF1ZFJhdGVfQnBzOworCisgICAgICAgIC8qIFNlbGVjdCB0aGUgYmV0dGVyIHZhbHVlIGJldHdlZW4gc3JiIGFuZCAoc2JyICsgMSkgKi8KKyAgICAgICAgaWYgKHRlbXBEaWZmID4gKGNvbmZpZy0+YmF1ZFJhdGVfQnBzIC0gKHNyY0Nsb2NrX0h6IC8gKG9zclRlbXAgKiAoc2JyVGVtcCArIDEpKSkpKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wRGlmZiA9IGNvbmZpZy0+YmF1ZFJhdGVfQnBzIC0gKHNyY0Nsb2NrX0h6IC8gKG9zclRlbXAgKiAoc2JyVGVtcCArIDEpKSk7CisgICAgICAgICAgICBzYnJUZW1wKys7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGVtcERpZmYgPD0gYmF1ZERpZmYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhdWREaWZmID0gdGVtcERpZmY7CisgICAgICAgICAgICBvc3IgPSBvc3JUZW1wOyAvKiB1cGRhdGUgYW5kIHN0b3JlIHRoZSBiZXN0IE9TUiB2YWx1ZSBjYWxjdWxhdGVkICovCisgICAgICAgICAgICBzYnIgPSBzYnJUZW1wOyAvKiB1cGRhdGUgc3RvcmUgdGhlIGJlc3QgU0JSIHZhbHVlIGNhbGN1bGF0ZWQgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENoZWNrIHRvIHNlZSBpZiBhY3R1YWwgYmF1ZCByYXRlIGlzIHdpdGhpbiAzJSBvZiBkZXNpcmVkIGJhdWQgcmF0ZQorICAgICAqIGJhc2VkIG9uIHRoZSBiZXN0IGNhbGN1bGF0ZSBPU1IgdmFsdWUgKi8KKyAgICBpZiAoYmF1ZERpZmYgPiAoKGNvbmZpZy0+YmF1ZFJhdGVfQnBzIC8gMTAwKSAqIDMpKQorICAgIHsKKyAgICAgICAgLyogVW5hY2NlcHRhYmxlIGJhdWQgcmF0ZSBkaWZmZXJlbmNlIG9mIG1vcmUgdGhhbiAzJSovCisgICAgICAgIHJldHVybiBrU3RhdHVzX0xQVUFSVF9CYXVkcmF0ZU5vdFN1cHBvcnQ7CisgICAgfQorCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIAorICAgIHVpbnQzMl90IGluc3RhbmNlID0gTFBVQVJUX0dldEluc3RhbmNlKGJhc2UpOworCisgICAgLyogRW5hYmxlIGxwdWFydCBjbG9jayAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfbHB1YXJ0Q2xvY2tbaW5zdGFuY2VdKTsKKyNpZiBkZWZpbmVkKExQVUFSVF9QRVJJUEhfQ0xPQ0tTKQorICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfbHB1YXJ0UGVyaXBoQ2xvY2tzW2luc3RhbmNlXSk7CisjZW5kaWYKKworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0dMT0JBTCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19HTE9CQUwKKyAgICAvKlJlc2V0IGFsbCBpbnRlcm5hbCBsb2dpYyBhbmQgcmVnaXN0ZXJzLCBleGNlcHQgdGhlIEdsb2JhbCBSZWdpc3RlciAqLworICAgIExQVUFSVF9Tb2Z0d2FyZVJlc2V0KGJhc2UpOworI2Vsc2UKKyAgICAvKiBEaXNhYmxlIExQVUFSVCBUWCBSWCBiZWZvcmUgc2V0dGluZy4gKi8KKyAgICBiYXNlLT5DVFJMICY9IH4oTFBVQVJUX0NUUkxfVEVfTUFTSyB8IExQVUFSVF9DVFJMX1JFX01BU0spOworI2VuZGlmCisKKyAgICB0ZW1wID0gYmFzZS0+QkFVRDsKKworICAgIC8qIEFjY2VwdGFibGUgYmF1ZCByYXRlLCBjaGVjayBpZiBPU1IgaXMgYmV0d2VlbiA0eCBhbmQgN3ggb3ZlcnNhbXBsaW5nLgorICAgICAqIElmIHNvLCB0aGVuICJCT1RIRURHRSIgc2FtcGxpbmcgbXVzdCBiZSB0dXJuZWQgb24gKi8KKyAgICBpZiAoKG9zciA+IDMpICYmIChvc3IgPCA4KSkKKyAgICB7CisgICAgICAgIHRlbXAgfD0gTFBVQVJUX0JBVURfQk9USEVER0VfTUFTSzsKKyAgICB9CisKKyAgICAvKiBwcm9ncmFtIHRoZSBvc3IgdmFsdWUgKGJpdCB2YWx1ZSBpcyBvbmUgbGVzcyB0aGFuIGFjdHVhbCB2YWx1ZSkgKi8KKyAgICB0ZW1wICY9IH5MUFVBUlRfQkFVRF9PU1JfTUFTSzsKKyAgICB0ZW1wIHw9IExQVUFSVF9CQVVEX09TUihvc3IgLSAxKTsKKworICAgIC8qIHdyaXRlIHRoZSBzYnIgdmFsdWUgdG8gdGhlIEJBVUQgcmVnaXN0ZXJzICovCisgICAgdGVtcCAmPSB+TFBVQVJUX0JBVURfU0JSX01BU0s7CisgICAgYmFzZS0+QkFVRCA9IHRlbXAgfCBMUFVBUlRfQkFVRF9TQlIoc2JyKTsKKworICAgIC8qIFNldCBiaXQgY291bnQgYW5kIHBhcml0eSBtb2RlLiAqLworICAgIGJhc2UtPkJBVUQgJj0gfkxQVUFSVF9CQVVEX00xMF9NQVNLOworCisgICAgdGVtcCA9IGJhc2UtPkNUUkwgJiB+KExQVUFSVF9DVFJMX1BFX01BU0sgfCBMUFVBUlRfQ1RSTF9QVF9NQVNLIHwgTFBVQVJUX0NUUkxfTV9NQVNLKTsKKworICAgIHRlbXAgfD0gKHVpbnQ4X3QpY29uZmlnLT5wYXJpdHlNb2RlOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUCisgICAgaWYgKGtMUFVBUlRfU2V2ZW5EYXRhQml0cyA9PSBjb25maWctPmRhdGFCaXRzQ291bnQpCisgICAgeworICAgICAgICBpZiAoa0xQVUFSVF9QYXJpdHlEaXNhYmxlZCAhPSBjb25maWctPnBhcml0eU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXAgJj0gfkxQVUFSVF9DVFJMX003X01BU0s7IC8qIFNldmVuIGRhdGEgYml0cyBhbmQgb25lIHBhcml0eSBiaXQgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXAgfD0gTFBVQVJUX0NUUkxfTTdfTUFTSzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmIChrTFBVQVJUX1Bhcml0eURpc2FibGVkICE9IGNvbmZpZy0+cGFyaXR5TW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcCB8PSBMUFVBUlRfQ1RSTF9NX01BU0s7IC8qIEVpZ2h0IGRhdGEgYml0cyBhbmQgb25lIHBhcml0eSBiaXQgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIGJhc2UtPkNUUkwgPSB0ZW1wOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NUT1BfQklUX0NPTkZJR19TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NUT1BfQklUX0NPTkZJR19TVVBQT1JUCisgICAgLyogc2V0IHN0b3AgYml0IHBlciBjaGFyICovCisgICAgdGVtcCA9IGJhc2UtPkJBVUQgJiB+TFBVQVJUX0JBVURfU0JOU19NQVNLOworICAgIGJhc2UtPkJBVUQgPSB0ZW1wIHwgTFBVQVJUX0JBVURfU0JOUygodWludDhfdCljb25maWctPnN0b3BCaXRDb3VudCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICAvKiBTZXQgdHgvcnggV0FURVIgd2F0ZXJtYXJrICovCisgICAgYmFzZS0+V0FURVIgPSAoKCh1aW50MzJfdCkoY29uZmlnLT5yeEZpZm9XYXRlcm1hcmspIDw8IDE2KSB8IGNvbmZpZy0+dHhGaWZvV2F0ZXJtYXJrKTsKKworICAgIC8qIEVuYWJsZSB0eC9yeCBGSUZPICovCisgICAgYmFzZS0+RklGTyB8PSAoTFBVQVJUX0ZJRk9fVFhGRV9NQVNLIHwgTFBVQVJUX0ZJRk9fUlhGRV9NQVNLKTsKKworICAgIC8qIEZsdXNoIEZJRk8gKi8KKyAgICBiYXNlLT5GSUZPIHw9IChMUFVBUlRfRklGT19UWEZMVVNIX01BU0sgfCBMUFVBUlRfRklGT19SWEZMVVNIX01BU0spOworI2VuZGlmCisKKyAgICAvKiBDbGVhciBhbGwgc3RhdHVzIGZsYWdzICovCisgICAgdGVtcCA9IChMUFVBUlRfU1RBVF9SWEVER0lGX01BU0sgfCBMUFVBUlRfU1RBVF9JRExFX01BU0sgfCBMUFVBUlRfU1RBVF9PUl9NQVNLIHwgTFBVQVJUX1NUQVRfTkZfTUFTSyB8CisgICAgICAgICAgICBMUFVBUlRfU1RBVF9GRV9NQVNLIHwgTFBVQVJUX1NUQVRfUEZfTUFTSyk7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTElOX0JSRUFLX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUCisgICAgdGVtcCB8PSBMUFVBUlRfU1RBVF9MQktESUZfTUFTSzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0FERFJFU1NfTUFUQ0hJTkcpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfQUREUkVTU19NQVRDSElORworICAgIHRlbXAgfD0gKExQVUFSVF9TVEFUX01BMUZfTUFTSyB8IExQVUFSVF9TVEFUX01BMkZfTUFTSyk7CisjZW5kaWYKKworICAgIC8qIFNldCBkYXRhIGJpdHMgb3JkZXIuICovCisgICAgaWYgKGNvbmZpZy0+aXNNc2IpCisgICAgeworICAgICAgICB0ZW1wIHw9IExQVUFSVF9TVEFUX01TQkZfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdGVtcCAmPSB+TFBVQVJUX1NUQVRfTVNCRl9NQVNLOworICAgIH0KKworICAgIGJhc2UtPlNUQVQgfD0gdGVtcDsKKworICAgIC8qIEVuYWJsZSBUWC9SWCBiYXNlIG9uIGNvbmZpZ3VyZSBzdHJ1Y3R1cmUuICovCisgICAgdGVtcCA9IGJhc2UtPkNUUkw7CisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlVHgpCisgICAgeworICAgICAgICB0ZW1wIHw9IExQVUFSVF9DVFJMX1RFX01BU0s7CisgICAgfQorCisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlUngpCisgICAgeworICAgICAgICB0ZW1wIHw9IExQVUFSVF9DVFJMX1JFX01BU0s7CisgICAgfQorCisgICAgYmFzZS0+Q1RSTCA9IHRlbXA7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQordm9pZCBMUFVBUlRfRGVpbml0KExQVUFSVF9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IHRlbXA7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAgLyogV2FpdCB0eCBGSUZPIHNlbmQgb3V0Ki8KKyAgICB3aGlsZSAoMCAhPSAoKGJhc2UtPldBVEVSICYgTFBVQVJUX1dBVEVSX1RYQ09VTlRfTUFTSykgPj4gTFBVQVJUX1dBVEVSX1RYV0FURVJfU0hJRlQpKQorICAgIHsKKyAgICB9CisjZW5kaWYKKyAgICAvKiBXYWl0IGxhc3QgY2hhciBzaG9mdCBvdXQgKi8KKyAgICB3aGlsZSAoMCA9PSAoYmFzZS0+U1RBVCAmIExQVUFSVF9TVEFUX1RDX01BU0spKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBDbGVhciBhbGwgc3RhdHVzIGZsYWdzICovCisgICAgdGVtcCA9IChMUFVBUlRfU1RBVF9SWEVER0lGX01BU0sgfCBMUFVBUlRfU1RBVF9JRExFX01BU0sgfCBMUFVBUlRfU1RBVF9PUl9NQVNLIHwgTFBVQVJUX1NUQVRfTkZfTUFTSyB8CisgICAgICAgICAgICBMUFVBUlRfU1RBVF9GRV9NQVNLIHwgTFBVQVJUX1NUQVRfUEZfTUFTSyk7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTElOX0JSRUFLX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUCisgICAgdGVtcCB8PSBMUFVBUlRfU1RBVF9MQktESUZfTUFTSzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0FERFJFU1NfTUFUQ0hJTkcpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfQUREUkVTU19NQVRDSElORworICAgIHRlbXAgfD0gKExQVUFSVF9TVEFUX01BMUZfTUFTSyB8IExQVUFSVF9TVEFUX01BMkZfTUFTSyk7CisjZW5kaWYKKworICAgIGJhc2UtPlNUQVQgfD0gdGVtcDsKKworICAgIC8qIERpc2FibGUgdGhlIG1vZHVsZS4gKi8KKyAgICBiYXNlLT5DVFJMID0gMDsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICB1aW50MzJfdCBpbnN0YW5jZSA9IExQVUFSVF9HZXRJbnN0YW5jZShiYXNlKTsKKworICAgIC8qIERpc2FibGUgbHB1YXJ0IGNsb2NrICovCisgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKHNfbHB1YXJ0Q2xvY2tbaW5zdGFuY2VdKTsKKworI2lmIGRlZmluZWQoTFBVQVJUX1BFUklQSF9DTE9DS1MpCisgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKHNfbHB1YXJ0UGVyaXBoQ2xvY2tzW2luc3RhbmNlXSk7CisjZW5kaWYKKworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCit2b2lkIExQVUFSVF9HZXREZWZhdWx0Q29uZmlnKGxwdWFydF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisgICAgY29uZmlnLT5iYXVkUmF0ZV9CcHMgPSAxMTUyMDBVOworICAgIGNvbmZpZy0+cGFyaXR5TW9kZSA9IGtMUFVBUlRfUGFyaXR5RGlzYWJsZWQ7CisgICAgY29uZmlnLT5kYXRhQml0c0NvdW50ID0ga0xQVUFSVF9FaWdodERhdGFCaXRzOworICAgIGNvbmZpZy0+aXNNc2IgPSBmYWxzZTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU1RPUF9CSVRfQ09ORklHX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU1RPUF9CSVRfQ09ORklHX1NVUFBPUlQKKyAgICBjb25maWctPnN0b3BCaXRDb3VudCA9IGtMUFVBUlRfT25lU3RvcEJpdDsKKyNlbmRpZgorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICBjb25maWctPnR4Rmlmb1dhdGVybWFyayA9IDA7CisgICAgY29uZmlnLT5yeEZpZm9XYXRlcm1hcmsgPSAwOworI2VuZGlmCisgICAgY29uZmlnLT5lbmFibGVUeCA9IGZhbHNlOworICAgIGNvbmZpZy0+ZW5hYmxlUnggPSBmYWxzZTsKK30KKworc3RhdHVzX3QgTFBVQVJUX1NldEJhdWRSYXRlKExQVUFSVF9UeXBlICpiYXNlLCB1aW50MzJfdCBiYXVkUmF0ZV9CcHMsIHVpbnQzMl90IHNyY0Nsb2NrX0h6KQoreworICAgIGFzc2VydChiYXVkUmF0ZV9CcHMpOworCisgICAgdWludDMyX3QgdGVtcCwgb2xkQ3RybDsKKyAgICB1aW50MTZfdCBzYnIsIHNiclRlbXA7CisgICAgdWludDMyX3Qgb3NyLCBvc3JUZW1wLCB0ZW1wRGlmZiwgY2FsY3VsYXRlZEJhdWQsIGJhdWREaWZmOworCisgICAgLyogVGhpcyBMUFVBUlQgaW5zdGFudGlhdGlvbiB1c2VzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGJhdWQgcmF0ZSBjYWxjdWxhdGlvbgorICAgICAqIFRoZSBpZGVhIGlzIHRvIHVzZSB0aGUgYmVzdCBPU1IgKG92ZXItc2FtcGxpbmcgcmF0ZSkgcG9zc2libGUKKyAgICAgKiBOb3RlLCBPU1IgaXMgdHlwaWNhbGx5IGhhcmQtc2V0IHRvIDE2IGluIG90aGVyIExQVUFSVCBpbnN0YW50aWF0aW9ucworICAgICAqIGxvb3AgdG8gZmluZCB0aGUgYmVzdCBPU1IgdmFsdWUgcG9zc2libGUsIG9uZSB0aGF0IGdlbmVyYXRlcyBtaW5pbXVtIGJhdWREaWZmCisgICAgICogaXRlcmF0ZSB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIG9mIE9TUiAqLworCisgICAgYmF1ZERpZmYgPSBiYXVkUmF0ZV9CcHM7CisgICAgb3NyID0gMDsKKyAgICBzYnIgPSAwOworICAgIGZvciAob3NyVGVtcCA9IDQ7IG9zclRlbXAgPD0gMzI7IG9zclRlbXArKykKKyAgICB7CisgICAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgdGVtcG9yYXJ5IHNiciB2YWx1ZSAgICovCisgICAgICAgIHNiclRlbXAgPSAoc3JjQ2xvY2tfSHogLyAoYmF1ZFJhdGVfQnBzICogb3NyVGVtcCkpOworICAgICAgICAvKnNldCBzYnJUZW1wIHRvIDEgaWYgdGhlIHNvdXJjZUNsb2NrSW5IeiBjYW4gbm90IHNhdGlzZnkgdGhlIGRlc2lyZWQgYmF1ZCByYXRlKi8KKyAgICAgICAgaWYgKHNiclRlbXAgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc2JyVGVtcCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBiYXVkIHJhdGUgYmFzZWQgb24gdGhlIHRlbXBvcmFyeSBPU1IgYW5kIFNCUiB2YWx1ZXMgKi8KKyAgICAgICAgY2FsY3VsYXRlZEJhdWQgPSAoc3JjQ2xvY2tfSHogLyAob3NyVGVtcCAqIHNiclRlbXApKTsKKworICAgICAgICB0ZW1wRGlmZiA9IGNhbGN1bGF0ZWRCYXVkIC0gYmF1ZFJhdGVfQnBzOworCisgICAgICAgIC8qIFNlbGVjdCB0aGUgYmV0dGVyIHZhbHVlIGJldHdlZW4gc3JiIGFuZCAoc2JyICsgMSkgKi8KKyAgICAgICAgaWYgKHRlbXBEaWZmID4gKGJhdWRSYXRlX0JwcyAtIChzcmNDbG9ja19IeiAvIChvc3JUZW1wICogKHNiclRlbXAgKyAxKSkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcERpZmYgPSBiYXVkUmF0ZV9CcHMgLSAoc3JjQ2xvY2tfSHogLyAob3NyVGVtcCAqIChzYnJUZW1wICsgMSkpKTsKKyAgICAgICAgICAgIHNiclRlbXArKzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZW1wRGlmZiA8PSBiYXVkRGlmZikKKyAgICAgICAgeworICAgICAgICAgICAgYmF1ZERpZmYgPSB0ZW1wRGlmZjsKKyAgICAgICAgICAgIG9zciA9IG9zclRlbXA7IC8qIHVwZGF0ZSBhbmQgc3RvcmUgdGhlIGJlc3QgT1NSIHZhbHVlIGNhbGN1bGF0ZWQgKi8KKyAgICAgICAgICAgIHNiciA9IHNiclRlbXA7IC8qIHVwZGF0ZSBzdG9yZSB0aGUgYmVzdCBTQlIgdmFsdWUgY2FsY3VsYXRlZCAqLworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ2hlY2sgdG8gc2VlIGlmIGFjdHVhbCBiYXVkIHJhdGUgaXMgd2l0aGluIDMlIG9mIGRlc2lyZWQgYmF1ZCByYXRlCisgICAgICogYmFzZWQgb24gdGhlIGJlc3QgY2FsY3VsYXRlIE9TUiB2YWx1ZSAqLworICAgIGlmIChiYXVkRGlmZiA8ICgoYmF1ZFJhdGVfQnBzIC8gMTAwKSAqIDMpKQorICAgIHsKKyAgICAgICAgLyogU3RvcmUgQ1RSTCBiZWZvcmUgZGlzYWJsZSBUeCBhbmQgUnggKi8KKyAgICAgICAgb2xkQ3RybCA9IGJhc2UtPkNUUkw7CisKKyAgICAgICAgLyogRGlzYWJsZSBMUFVBUlQgVFggUlggYmVmb3JlIHNldHRpbmcuICovCisgICAgICAgIGJhc2UtPkNUUkwgJj0gfihMUFVBUlRfQ1RSTF9URV9NQVNLIHwgTFBVQVJUX0NUUkxfUkVfTUFTSyk7CisKKyAgICAgICAgdGVtcCA9IGJhc2UtPkJBVUQ7CisKKyAgICAgICAgLyogQWNjZXB0YWJsZSBiYXVkIHJhdGUsIGNoZWNrIGlmIE9TUiBpcyBiZXR3ZWVuIDR4IGFuZCA3eCBvdmVyc2FtcGxpbmcuCisgICAgICAgICAqIElmIHNvLCB0aGVuICJCT1RIRURHRSIgc2FtcGxpbmcgbXVzdCBiZSB0dXJuZWQgb24gKi8KKyAgICAgICAgaWYgKChvc3IgPiAzKSAmJiAob3NyIDwgOCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXAgfD0gTFBVQVJUX0JBVURfQk9USEVER0VfTUFTSzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHByb2dyYW0gdGhlIG9zciB2YWx1ZSAoYml0IHZhbHVlIGlzIG9uZSBsZXNzIHRoYW4gYWN0dWFsIHZhbHVlKSAqLworICAgICAgICB0ZW1wICY9IH5MUFVBUlRfQkFVRF9PU1JfTUFTSzsKKyAgICAgICAgdGVtcCB8PSBMUFVBUlRfQkFVRF9PU1Iob3NyIC0gMSk7CisKKyAgICAgICAgLyogd3JpdGUgdGhlIHNiciB2YWx1ZSB0byB0aGUgQkFVRCByZWdpc3RlcnMgKi8KKyAgICAgICAgdGVtcCAmPSB+TFBVQVJUX0JBVURfU0JSX01BU0s7CisgICAgICAgIGJhc2UtPkJBVUQgPSB0ZW1wIHwgTFBVQVJUX0JBVURfU0JSKHNicik7CisKKyAgICAgICAgLyogUmVzdG9yZSBDVFJMLiAqLworICAgICAgICBiYXNlLT5DVFJMID0gb2xkQ3RybDsKKworICAgICAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBVbmFjY2VwdGFibGUgYmF1ZCByYXRlIGRpZmZlcmVuY2Ugb2YgbW9yZSB0aGFuIDMlKi8KKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTFBVQVJUX0JhdWRyYXRlTm90U3VwcG9ydDsKKyAgICB9Cit9CisKK3ZvaWQgTFBVQVJUX0VuYWJsZUludGVycnVwdHMoTFBVQVJUX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+QkFVRCB8PSAoKG1hc2sgPDwgOCkgJiAoTFBVQVJUX0JBVURfTEJLRElFX01BU0sgfCBMUFVBUlRfQkFVRF9SWEVER0lFX01BU0spKTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAgYmFzZS0+RklGTyA9IChiYXNlLT5GSUZPICYgfihMUFVBUlRfRklGT19UWE9GX01BU0sgfCBMUFVBUlRfRklGT19SWFVGX01BU0spKSB8CisgICAgICAgICAgICAgICAgICgobWFzayA8PCA4KSAmIChMUFVBUlRfRklGT19UWE9GRV9NQVNLIHwgTFBVQVJUX0ZJRk9fUlhVRkVfTUFTSykpOworI2VuZGlmCisgICAgbWFzayAmPSAweEZGRkZGRjAwVTsKKyAgICBiYXNlLT5DVFJMIHw9IG1hc2s7Cit9CisKK3ZvaWQgTFBVQVJUX0Rpc2FibGVJbnRlcnJ1cHRzKExQVUFSVF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPkJBVUQgJj0gfigobWFzayA8PCA4KSAmIChMUFVBUlRfQkFVRF9MQktESUVfTUFTSyB8IExQVUFSVF9CQVVEX1JYRURHSUVfTUFTSykpOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICBiYXNlLT5GSUZPID0gKGJhc2UtPkZJRk8gJiB+KExQVUFSVF9GSUZPX1RYT0ZfTUFTSyB8IExQVUFSVF9GSUZPX1JYVUZfTUFTSykpICYKKyAgICAgICAgICAgICAgICAgfigobWFzayA8PCA4KSAmIChMUFVBUlRfRklGT19UWE9GRV9NQVNLIHwgTFBVQVJUX0ZJRk9fUlhVRkVfTUFTSykpOworI2VuZGlmCisgICAgbWFzayAmPSAweEZGRkZGRjAwVTsKKyAgICBiYXNlLT5DVFJMICY9IH5tYXNrOworfQorCit1aW50MzJfdCBMUFVBUlRfR2V0RW5hYmxlZEludGVycnVwdHMoTFBVQVJUX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgdGVtcDsKKyAgICB0ZW1wID0gKGJhc2UtPkJBVUQgJiAoTFBVQVJUX0JBVURfTEJLRElFX01BU0sgfCBMUFVBUlRfQkFVRF9SWEVER0lFX01BU0spKSA+PiA4OworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICB0ZW1wIHw9IChiYXNlLT5GSUZPICYgKExQVUFSVF9GSUZPX1RYT0ZFX01BU0sgfCBMUFVBUlRfRklGT19SWFVGRV9NQVNLKSkgPj4gODsKKyNlbmRpZgorICAgIHRlbXAgfD0gKGJhc2UtPkNUUkwgJiAweEZGMEMwMDApOworCisgICAgcmV0dXJuIHRlbXA7Cit9CisKK3VpbnQzMl90IExQVUFSVF9HZXRTdGF0dXNGbGFncyhMUFVBUlRfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCB0ZW1wOworICAgIHRlbXAgPSBiYXNlLT5TVEFUOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICB0ZW1wIHw9IChiYXNlLT5GSUZPICYKKyAgICAgICAgICAgICAoTFBVQVJUX0ZJRk9fVFhFTVBUX01BU0sgfCBMUFVBUlRfRklGT19SWEVNUFRfTUFTSyB8IExQVUFSVF9GSUZPX1RYT0ZfTUFTSyB8IExQVUFSVF9GSUZPX1JYVUZfTUFTSykpID4+CisgICAgICAgICAgICAxNjsKKyNlbmRpZgorICAgIHJldHVybiB0ZW1wOworfQorCitzdGF0dXNfdCBMUFVBUlRfQ2xlYXJTdGF0dXNGbGFncyhMUFVBUlRfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICB1aW50MzJfdCB0ZW1wOworICAgIHN0YXR1c190IHN0YXR1czsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAgdGVtcCA9ICh1aW50MzJfdCliYXNlLT5GSUZPOworICAgIHRlbXAgJj0gKHVpbnQzMl90KSh+KExQVUFSVF9GSUZPX1RYT0ZfTUFTSyB8IExQVUFSVF9GSUZPX1JYVUZfTUFTSykpOworICAgIHRlbXAgfD0gKG1hc2sgPDwgMTYpICYgKExQVUFSVF9GSUZPX1RYT0ZfTUFTSyB8IExQVUFSVF9GSUZPX1JYVUZfTUFTSyk7CisgICAgYmFzZS0+RklGTyA9IHRlbXA7CisjZW5kaWYKKyAgICB0ZW1wID0gKHVpbnQzMl90KWJhc2UtPlNUQVQ7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0xJTl9CUkVBS19ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTElOX0JSRUFLX0RFVEVDVAorICAgIHRlbXAgJj0gKHVpbnQzMl90KSh+KExQVUFSVF9TVEFUX0xCS0RJRl9NQVNLKSk7CisgICAgdGVtcCB8PSBtYXNrICYgTFBVQVJUX1NUQVRfTEJLRElGX01BU0s7CisjZW5kaWYKKyAgICB0ZW1wICY9ICh1aW50MzJfdCkofihMUFVBUlRfU1RBVF9SWEVER0lGX01BU0sgfCBMUFVBUlRfU1RBVF9JRExFX01BU0sgfCBMUFVBUlRfU1RBVF9PUl9NQVNLIHwgTFBVQVJUX1NUQVRfTkZfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUX1NUQVRfRkVfTUFTSyB8IExQVUFSVF9TVEFUX1BGX01BU0spKTsKKyAgICB0ZW1wIHw9IG1hc2sgJiAoTFBVQVJUX1NUQVRfUlhFREdJRl9NQVNLIHwgTFBVQVJUX1NUQVRfSURMRV9NQVNLIHwgTFBVQVJUX1NUQVRfT1JfTUFTSyB8IExQVUFSVF9TVEFUX05GX01BU0sgfAorICAgICAgICAgICAgICAgICAgICBMUFVBUlRfU1RBVF9GRV9NQVNLIHwgTFBVQVJUX1NUQVRfUEZfTUFTSyk7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0FERFJFU1NfTUFUQ0hJTkcpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfQUREUkVTU19NQVRDSElORworICAgIHRlbXAgJj0gKHVpbnQzMl90KSh+KExQVUFSVF9TVEFUX01BMkZfTUFTSyB8IExQVUFSVF9TVEFUX01BMUZfTUFTSykpOworICAgIHRlbXAgfD0gbWFzayAmIChMUFVBUlRfU1RBVF9NQTJGX01BU0sgfCBMUFVBUlRfU1RBVF9NQTFGX01BU0spOworI2VuZGlmCisgICAgYmFzZS0+U1RBVCA9IHRlbXA7CisgICAgLyogSWYgc29tZSBmbGFncyBzdGlsbCBwZW5kaW5nLiAqLworICAgIGlmIChtYXNrICYgTFBVQVJUX0dldFN0YXR1c0ZsYWdzKGJhc2UpKQorICAgIHsKKyAgICAgICAgLyogU29tZSBmbGFncyBjYW4gb25seSBjbGVhciBvciBzZXQgYnkgdGhlIGhhcmR3YXJlIGl0c2VsZiwgdGhlc2UgZmxhZ3MgYXJlOiBrTFBVQVJUX1R4RGF0YVJlZ0VtcHR5RmxhZywKKyAgICAgICAga0xQVUFSVF9UcmFuc21pc3Npb25Db21wbGV0ZUZsYWcsIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEZsYWcsIGtMUFVBUlRfUnhBY3RpdmVGbGFnLAorICAgICAgICBrTFBVQVJUX05vaXNlRXJyb3JJblJ4RGF0YVJlZ0ZsYWcsIGtMUFVBUlRfUGFyaXR5RXJyb3JJblJ4RGF0YVJlZ0ZsYWcsCisgICAgICAgIGtMUFVBUlRfVHhGaWZvRW1wdHlGbGFnLCBrTFBVQVJUX1J4Rmlmb0VtcHR5RmxhZy4gKi8KKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19MUFVBUlRfRmxhZ0Nhbm5vdENsZWFyTWFudWFsbHk7IC8qIGZsYWdzIGNhbiBub3QgY2xlYXIgbWFudWFsbHkgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgTFBVQVJUX1dyaXRlQmxvY2tpbmcoTFBVQVJUX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXNzZXJ0KGRhdGEpOworCisgICAgLyogVGhpcyBBUEkgY2FuIG9ubHkgZW5zdXJlIHRoYXQgdGhlIGRhdGEgaXMgd3JpdHRlbiBpbnRvIHRoZSBkYXRhIGJ1ZmZlciBidXQgY2FuJ3QKKyAgICBlbnN1cmUgYWxsIGRhdGEgaW4gdGhlIGRhdGEgYnVmZmVyIGFyZSBzZW50IGludG8gdGhlIHRyYW5zbWl0IHNoaWZ0IGJ1ZmZlci4gKi8KKyAgICB3aGlsZSAobGVuZ3RoLS0pCisgICAgeworICAgICAgICB3aGlsZSAoIShiYXNlLT5TVEFUICYgTFBVQVJUX1NUQVRfVERSRV9NQVNLKSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIGJhc2UtPkRBVEEgPSAqKGRhdGErKyk7CisgICAgfQorfQorCitzdGF0dXNfdCBMUFVBUlRfUmVhZEJsb2NraW5nKExQVUFSVF9UeXBlICpiYXNlLCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGFzc2VydChkYXRhKTsKKworICAgIHVpbnQzMl90IHN0YXR1c0ZsYWc7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUCisgICAgdWludDMyX3QgY3RybCA9IGJhc2UtPkNUUkw7CisgICAgYm9vbCBpc1NldmVuRGF0YUJpdHMgPQorICAgICAgICAoKGN0cmwgJiBMUFVBUlRfQ1RSTF9NN19NQVNLKSB8fAorICAgICAgICAgKCghKGN0cmwgJiBMUFVBUlRfQ1RSTF9NN19NQVNLKSkgJiYgKCEoY3RybCAmIExQVUFSVF9DVFJMX01fTUFTSykpICYmIChjdHJsICYgTFBVQVJUX0NUUkxfUEVfTUFTSykpKTsKKyNlbmRpZgorCisgICAgd2hpbGUgKGxlbmd0aC0tKQorICAgIHsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAgICAgIHdoaWxlICgwID09ICgoYmFzZS0+V0FURVIgJiBMUFVBUlRfV0FURVJfUlhDT1VOVF9NQVNLKSA+PiBMUFVBUlRfV0FURVJfUlhDT1VOVF9TSElGVCkpCisjZWxzZQorICAgICAgICB3aGlsZSAoIShiYXNlLT5TVEFUICYgTFBVQVJUX1NUQVRfUkRSRl9NQVNLKSkKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXNGbGFnID0gTFBVQVJUX0dldFN0YXR1c0ZsYWdzKGJhc2UpOworCisgICAgICAgICAgICBpZiAoc3RhdHVzRmxhZyAmIGtMUFVBUlRfUnhPdmVycnVuRmxhZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMUFVBUlRfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrTFBVQVJUX1J4T3ZlcnJ1bkZsYWcpOworICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0xQVUFSVF9SeEhhcmR3YXJlT3ZlcnJ1bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN0YXR1c0ZsYWcgJiBrTFBVQVJUX05vaXNlRXJyb3JGbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExQVUFSVF9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtMUFVBUlRfTm9pc2VFcnJvckZsYWcpOworICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0xQVUFSVF9Ob2lzZUVycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3RhdHVzRmxhZyAmIGtMUFVBUlRfRnJhbWluZ0Vycm9yRmxhZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMUFVBUlRfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrTFBVQVJUX0ZyYW1pbmdFcnJvckZsYWcpOworICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0xQVUFSVF9GcmFtaW5nRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdGF0dXNGbGFnICYga0xQVUFSVF9QYXJpdHlFcnJvckZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBVQVJUX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0xQVUFSVF9QYXJpdHlFcnJvckZsYWcpOworICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0xQVUFSVF9QYXJpdHlFcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU183QklUX0RBVEFfU1VQUE9SVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU183QklUX0RBVEFfU1VQUE9SVAorICAgICAgICBpZiAoaXNTZXZlbkRhdGFCaXRzKQorICAgICAgICB7CisgICAgICAgICAgICAqKGRhdGErKykgPSAoYmFzZS0+REFUQSAmIDB4N0YpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgKihkYXRhKyspID0gYmFzZS0+REFUQTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgKihkYXRhKyspID0gYmFzZS0+REFUQTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3ZvaWQgTFBVQVJUX1RyYW5zZmVyQ3JlYXRlSGFuZGxlKExQVUFSVF9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgdWludDMyX3QgaW5zdGFuY2U7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUCisgICAgdWludDMyX3QgY3RybCA9IGJhc2UtPkNUUkw7CisgICAgYm9vbCBpc1NldmVuRGF0YUJpdHMgPQorICAgICAgICAoKGN0cmwgJiBMUFVBUlRfQ1RSTF9NN19NQVNLKSB8fAorICAgICAgICAgKCghKGN0cmwgJiBMUFVBUlRfQ1RSTF9NN19NQVNLKSkgJiYgKCEoY3RybCAmIExQVUFSVF9DVFJMX01fTUFTSykpICYmIChjdHJsICYgTFBVQVJUX0NUUkxfUEVfTUFTSykpKTsKKyNlbmRpZgorCisgICAgLyogWmVybyB0aGUgaGFuZGxlLiAqLworICAgIG1lbXNldChoYW5kbGUsIDAsIHNpemVvZihscHVhcnRfaGFuZGxlX3QpKTsKKworICAgIC8qIFNldCB0aGUgVFgvUlggc3RhdGUuICovCisgICAgaGFuZGxlLT5yeFN0YXRlID0ga0xQVUFSVF9SeElkbGU7CisgICAgaGFuZGxlLT50eFN0YXRlID0ga0xQVUFSVF9UeElkbGU7CisKKyAgICAvKiBTZXQgdGhlIGNhbGxiYWNrIGFuZCB1c2VyIGRhdGEuICovCisgICAgaGFuZGxlLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGhhbmRsZS0+dXNlckRhdGEgPSB1c2VyRGF0YTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU183QklUX0RBVEFfU1VQUE9SVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU183QklUX0RBVEFfU1VQUE9SVAorICAgIC8qIEluaXRpYWwgc2V2ZW4gZGF0YSBiaXRzIGZsYWcgKi8KKyAgICBoYW5kbGUtPmlzU2V2ZW5EYXRhQml0cyA9IGlzU2V2ZW5EYXRhQml0czsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8pICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTworICAgIC8qIE5vdGU6CisgICAgICAgVGFrZSBjYXJlIG9mIHRoZSBSWCBGSUZPLCBSWCBpbnRlcnJ1cHQgcmVxdWVzdCBvbmx5IGFzc2VydCB3aGVuIHJlY2VpdmVkIGJ5dGVzCisgICAgICAgZXF1YWwgb3IgbW9yZSB0aGFuIFJYIHdhdGVyIG1hcmssIHRoZXJlIGlzIHBvdGVudGlhbCBpc3N1ZSBpZiBSWCB3YXRlcgorICAgICAgIG1hcmsgbGFyZ2VyIHRoYW4gMS4KKyAgICAgICBGb3IgZXhhbXBsZSwgaWYgUlggRklGTyB3YXRlciBtYXJrIGlzIDIsIHVwcGVyIGxheWVyIG5lZWRzIDUgYnl0ZXMgYW5kCisgICAgICAgNSBieXRlcyBhcmUgcmVjZWl2ZWQuIHRoZSBsYXN0IGJ5dGUgd2lsbCBiZSBzYXZlZCBpbiBGSUZPIGJ1dCBub3QgdHJpZ2dlcgorICAgICAgIFJYIGludGVycnVwdCBiZWNhdXNlIHRoZSB3YXRlciBtYXJrIGlzIDIuCisgICAgICovCisgICAgYmFzZS0+V0FURVIgJj0gKH5MUFVBUlRfV0FURVJfUlhXQVRFUl9NQVNLKTsKKyNlbmRpZgorCisgICAgLyogR2V0IGluc3RhbmNlIGZyb20gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuICovCisgICAgaW5zdGFuY2UgPSBMUFVBUlRfR2V0SW5zdGFuY2UoYmFzZSk7CisKKyAgICAvKiBTYXZlIHRoZSBoYW5kbGUgaW4gZ2xvYmFsIHZhcmlhYmxlcyB0byBzdXBwb3J0IHRoZSBkb3VibGUgd2VhayBtZWNoYW5pc20uICovCisgICAgc19scHVhcnRIYW5kbGVbaW5zdGFuY2VdID0gaGFuZGxlOworCisgICAgc19scHVhcnRJc3IgPSBMUFVBUlRfVHJhbnNmZXJIYW5kbGVJUlE7CisKKy8qIEVuYWJsZSBpbnRlcnJ1cHQgaW4gTlZJQy4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUQorICAgIEVuYWJsZUlSUShzX2xwdWFydFJ4SVJRW2luc3RhbmNlXSk7CisgICAgRW5hYmxlSVJRKHNfbHB1YXJ0VHhJUlFbaW5zdGFuY2VdKTsKKyNlbHNlCisgICAgRW5hYmxlSVJRKHNfbHB1YXJ0SVJRW2luc3RhbmNlXSk7CisjZW5kaWYKK30KKwordm9pZCBMUFVBUlRfVHJhbnNmZXJTdGFydFJpbmdCdWZmZXIoTFBVQVJUX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJpbmdCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmluZ0J1ZmZlclNpemUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KHJpbmdCdWZmZXIpOworCisgICAgLyogU2V0dXAgdGhlIHJpbmcgYnVmZmVyIGFkZHJlc3MgKi8KKyAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlciA9IHJpbmdCdWZmZXI7CisgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJTaXplID0gcmluZ0J1ZmZlclNpemU7CisgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJIZWFkID0gMFU7CisgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJUYWlsID0gMFU7CisKKyAgICAvKiBFbmFibGUgdGhlIGludGVycnVwdCB0byBhY2NlcHQgdGhlIGRhdGEgd2hlbiB1c2VyIG5lZWQgdGhlIHJpbmcgYnVmZmVyLiAqLworICAgIExQVUFSVF9FbmFibGVJbnRlcnJ1cHRzKGJhc2UsIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSB8IGtMUFVBUlRfUnhPdmVycnVuSW50ZXJydXB0RW5hYmxlKTsKK30KKwordm9pZCBMUFVBUlRfVHJhbnNmZXJTdG9wUmluZ0J1ZmZlcihMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICBpZiAoaGFuZGxlLT5yeFN0YXRlID09IGtMUFVBUlRfUnhJZGxlKQorICAgIHsKKyAgICAgICAgTFBVQVJUX0Rpc2FibGVJbnRlcnJ1cHRzKGJhc2UsIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSB8IGtMUFVBUlRfUnhPdmVycnVuSW50ZXJydXB0RW5hYmxlKTsKKyAgICB9CisKKyAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlciA9IE5VTEw7CisgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJTaXplID0gMFU7CisgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJIZWFkID0gMFU7CisgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJUYWlsID0gMFU7Cit9CisKK3N0YXR1c190IExQVUFSVF9UcmFuc2ZlclNlbmROb25CbG9ja2luZyhMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUsIGxwdWFydF90cmFuc2Zlcl90ICp4ZmVyKQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydCh4ZmVyKTsKKyAgICBhc3NlcnQoeGZlci0+ZGF0YSk7CisgICAgYXNzZXJ0KHhmZXItPmRhdGFTaXplKTsKKworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIC8qIFJldHVybiBlcnJvciBpZiBjdXJyZW50IFRYIGJ1c3kuICovCisgICAgaWYgKGtMUFVBUlRfVHhCdXN5ID09IGhhbmRsZS0+dHhTdGF0ZSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfTFBVQVJUX1R4QnVzeTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaGFuZGxlLT50eERhdGEgPSB4ZmVyLT5kYXRhOworICAgICAgICBoYW5kbGUtPnR4RGF0YVNpemUgPSB4ZmVyLT5kYXRhU2l6ZTsKKyAgICAgICAgaGFuZGxlLT50eERhdGFTaXplQWxsID0geGZlci0+ZGF0YVNpemU7CisgICAgICAgIGhhbmRsZS0+dHhTdGF0ZSA9IGtMUFVBUlRfVHhCdXN5OworCisgICAgICAgIC8qIEVuYWJsZSB0cmFuc21pdGVyIGludGVycnVwdC4gKi8KKyAgICAgICAgTFBVQVJUX0VuYWJsZUludGVycnVwdHMoYmFzZSwga0xQVUFSVF9UeERhdGFSZWdFbXB0eUludGVycnVwdEVuYWJsZSk7CisKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgTFBVQVJUX1RyYW5zZmVyQWJvcnRTZW5kKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIExQVUFSVF9EaXNhYmxlSW50ZXJydXB0cyhiYXNlLCBrTFBVQVJUX1R4RGF0YVJlZ0VtcHR5SW50ZXJydXB0RW5hYmxlIHwga0xQVUFSVF9UcmFuc21pc3Npb25Db21wbGV0ZUludGVycnVwdEVuYWJsZSk7CisKKyAgICBoYW5kbGUtPnR4RGF0YVNpemUgPSAwOworICAgIGhhbmRsZS0+dHhTdGF0ZSA9IGtMUFVBUlRfVHhJZGxlOworfQorCitzdGF0dXNfdCBMUFVBUlRfVHJhbnNmZXJHZXRTZW5kQ291bnQoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlLCB1aW50MzJfdCAqY291bnQpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KGNvdW50KTsKKworICAgIGlmIChrTFBVQVJUX1R4SWRsZSA9PSBoYW5kbGUtPnR4U3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzczsKKyAgICB9CisKKyAgICAqY291bnQgPSBoYW5kbGUtPnR4RGF0YVNpemVBbGwgLSBoYW5kbGUtPnR4RGF0YVNpemU7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBMUFVBUlRfVHJhbnNmZXJSZWNlaXZlTm9uQmxvY2tpbmcoTFBVQVJUX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X3RyYW5zZmVyX3QgKnhmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpyZWNlaXZlZEJ5dGVzKQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydCh4ZmVyKTsKKyAgICBhc3NlcnQoeGZlci0+ZGF0YSk7CisgICAgYXNzZXJ0KHhmZXItPmRhdGFTaXplKTsKKworICAgIHVpbnQzMl90IGk7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIC8qIEhvdyBtYW55IGJ5dGVzIHRvIGNvcHkgZnJvbSByaW5nIGJ1ZmZlciB0byB1c2VyIG1lbW9yeS4gKi8KKyAgICBzaXplX3QgYnl0ZXNUb0NvcHkgPSAwVTsKKyAgICAvKiBIb3cgbWFueSBieXRlcyB0byByZWNlaXZlLiAqLworICAgIHNpemVfdCBieXRlc1RvUmVjZWl2ZTsKKyAgICAvKiBIb3cgbWFueSBieXRlcyBjdXJyZW50bHkgaGF2ZSByZWNlaXZlZC4gKi8KKyAgICBzaXplX3QgYnl0ZXNDdXJyZW50UmVjZWl2ZWQ7CisKKyAgICAvKiBIb3cgdG8gZ2V0IGRhdGE6CisgICAgICAgMS4gSWYgUlggcmluZyBidWZmZXIgaXMgbm90IGVuYWJsZWQsIHRoZW4gc2F2ZSB4ZmVyLT5kYXRhIGFuZCB4ZmVyLT5kYXRhU2l6ZQorICAgICAgICAgIHRvIGxwdWFydCBoYW5kbGUsIGVuYWJsZSBpbnRlcnJ1cHQgdG8gc3RvcmUgcmVjZWl2ZWQgZGF0YSB0byB4ZmVyLT5kYXRhLiBXaGVuCisgICAgICAgICAgYWxsIGRhdGEgcmVjZWl2ZWQsIHRyaWdnZXIgY2FsbGJhY2suCisgICAgICAgMi4gSWYgUlggcmluZyBidWZmZXIgaXMgZW5hYmxlZCBhbmQgbm90IGVtcHR5LCBnZXQgZGF0YSBmcm9tIHJpbmcgYnVmZmVyIGZpcnN0LgorICAgICAgICAgIElmIHRoZXJlIGFyZSBlbm91Z2ggZGF0YSBpbiByaW5nIGJ1ZmZlciwgY29weSB0aGVtIHRvIHhmZXItPmRhdGEgYW5kIHJldHVybi4KKyAgICAgICAgICBJZiB0aGVyZSBhcmUgbm90IGVub3VnaCBkYXRhIGluIHJpbmcgYnVmZmVyLCBjb3B5IGFsbCBvZiB0aGVtIHRvIHhmZXItPmRhdGEsCisgICAgICAgICAgc2F2ZSB0aGUgeGZlci0+ZGF0YSByZW1haW5lZCBlbXB0eSBzcGFjZSB0byBscHVhcnQgaGFuZGxlLCByZWNlaXZlIGRhdGEKKyAgICAgICAgICB0byB0aGlzIGVtcHR5IHNwYWNlIGFuZCB0cmlnZ2VyIGNhbGxiYWNrIHdoZW4gZmluaXNoZWQuICovCisKKyAgICBpZiAoa0xQVUFSVF9SeEJ1c3kgPT0gaGFuZGxlLT5yeFN0YXRlKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19MUFVBUlRfUnhCdXN5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBieXRlc1RvUmVjZWl2ZSA9IHhmZXItPmRhdGFTaXplOworICAgICAgICBieXRlc0N1cnJlbnRSZWNlaXZlZCA9IDA7CisKKyAgICAgICAgLyogSWYgUlggcmluZyBidWZmZXIgaXMgdXNlZC4gKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+cnhSaW5nQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBEaXNhYmxlIExQVUFSVCBSWCBJUlEsIHByb3RlY3QgcmluZyBidWZmZXIuICovCisgICAgICAgICAgICBMUFVBUlRfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0xQVUFSVF9SeERhdGFSZWdGdWxsSW50ZXJydXB0RW5hYmxlKTsKKworICAgICAgICAgICAgLyogSG93IG1hbnkgYnl0ZXMgaW4gUlggcmluZyBidWZmZXIgY3VycmVudGx5LiAqLworICAgICAgICAgICAgYnl0ZXNUb0NvcHkgPSBMUFVBUlRfVHJhbnNmZXJHZXRSeFJpbmdCdWZmZXJMZW5ndGgoYmFzZSwgaGFuZGxlKTsKKworICAgICAgICAgICAgaWYgKGJ5dGVzVG9Db3B5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJ5dGVzVG9Db3B5ID0gTUlOKGJ5dGVzVG9SZWNlaXZlLCBieXRlc1RvQ29weSk7CisKKyAgICAgICAgICAgICAgICBieXRlc1RvUmVjZWl2ZSAtPSBieXRlc1RvQ29weTsKKworICAgICAgICAgICAgICAgIC8qIENvcHkgZGF0YSBmcm9tIHJpbmcgYnVmZmVyIHRvIHVzZXIgbWVtb3J5LiAqLworICAgICAgICAgICAgICAgIGZvciAoaSA9IDBVOyBpIDwgYnl0ZXNUb0NvcHk7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHhmZXItPmRhdGFbYnl0ZXNDdXJyZW50UmVjZWl2ZWQrK10gPSBoYW5kbGUtPnJ4UmluZ0J1ZmZlcltoYW5kbGUtPnJ4UmluZ0J1ZmZlclRhaWxdOworCisgICAgICAgICAgICAgICAgICAgIC8qIFdyYXAgdG8gMC4gTm90IHVzZSBtb2R1bG8gKCUpIGJlY2F1c2UgaXQgbWlnaHQgYmUgbGFyZ2UgYW5kIHNsb3cuICovCisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJ4UmluZ0J1ZmZlclRhaWwgKyAxVSA9PSBoYW5kbGUtPnJ4UmluZ0J1ZmZlclNpemUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cnhSaW5nQnVmZmVyVGFpbCA9IDBVOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJUYWlsKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIElmIHJpbmcgYnVmZmVyIGRvZXMgbm90IGhhdmUgZW5vdWdoIGRhdGEsIHN0aWxsIG5lZWQgdG8gcmVhZCBtb3JlIGRhdGEuICovCisgICAgICAgICAgICBpZiAoYnl0ZXNUb1JlY2VpdmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogTm8gZGF0YSBpbiByaW5nIGJ1ZmZlciwgc2F2ZSB0aGUgcmVxdWVzdCB0byBMUFVBUlQgaGFuZGxlLiAqLworICAgICAgICAgICAgICAgIGhhbmRsZS0+cnhEYXRhID0geGZlci0+ZGF0YSArIGJ5dGVzQ3VycmVudFJlY2VpdmVkOworICAgICAgICAgICAgICAgIGhhbmRsZS0+cnhEYXRhU2l6ZSA9IGJ5dGVzVG9SZWNlaXZlOworICAgICAgICAgICAgICAgIGhhbmRsZS0+cnhEYXRhU2l6ZUFsbCA9IGJ5dGVzVG9SZWNlaXZlOworICAgICAgICAgICAgICAgIGhhbmRsZS0+cnhTdGF0ZSA9IGtMUFVBUlRfUnhCdXN5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogRW5hYmxlIExQVUFSVCBSWCBJUlEgaWYgcHJldmlvdXNseSBlbmFibGVkLiAqLworICAgICAgICAgICAgTFBVQVJUX0VuYWJsZUludGVycnVwdHMoYmFzZSwga0xQVUFSVF9SeERhdGFSZWdGdWxsSW50ZXJydXB0RW5hYmxlKTsKKworICAgICAgICAgICAgLyogQ2FsbCB1c2VyIGNhbGxiYWNrIHNpbmNlIGFsbCBkYXRhIGFyZSByZWNlaXZlZC4gKi8KKyAgICAgICAgICAgIGlmICgwID09IGJ5dGVzVG9SZWNlaXZlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIGtTdGF0dXNfTFBVQVJUX1J4SWRsZSwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIFJpbmcgYnVmZmVyIG5vdCB1c2VkLiAqLworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+cnhEYXRhID0geGZlci0+ZGF0YSArIGJ5dGVzQ3VycmVudFJlY2VpdmVkOworICAgICAgICAgICAgaGFuZGxlLT5yeERhdGFTaXplID0gYnl0ZXNUb1JlY2VpdmU7CisgICAgICAgICAgICBoYW5kbGUtPnJ4RGF0YVNpemVBbGwgPSBieXRlc1RvUmVjZWl2ZTsKKyAgICAgICAgICAgIGhhbmRsZS0+cnhTdGF0ZSA9IGtMUFVBUlRfUnhCdXN5OworCisgICAgICAgICAgICAvKiBFbmFibGUgUlggaW50ZXJydXB0LiAqLworICAgICAgICAgICAgTFBVQVJUX0VuYWJsZUludGVycnVwdHMoYmFzZSwga0xQVUFSVF9SeERhdGFSZWdGdWxsSW50ZXJydXB0RW5hYmxlIHwga0xQVUFSVF9SeE92ZXJydW5JbnRlcnJ1cHRFbmFibGUpOworICAgICAgICB9CisKKyAgICAgICAgLyogUmV0dXJuIHRoZSBob3cgbWFueSBieXRlcyBoYXZlIHJlYWQuICovCisgICAgICAgIGlmIChyZWNlaXZlZEJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAgICAqcmVjZWl2ZWRCeXRlcyA9IGJ5dGVzQ3VycmVudFJlY2VpdmVkOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgTFBVQVJUX1RyYW5zZmVyQWJvcnRSZWNlaXZlKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIC8qIE9ubHkgYWJvcnQgdGhlIHJlY2VpdmUgdG8gaGFuZGxlLT5yeERhdGEsIHRoZSBSWCByaW5nIGJ1ZmZlciBpcyBzdGlsbCB3b3JraW5nLiAqLworICAgIGlmICghaGFuZGxlLT5yeFJpbmdCdWZmZXIpCisgICAgeworICAgICAgICAvKiBEaXNhYmxlIFJYIGludGVycnVwdC4gKi8KKyAgICAgICAgTFBVQVJUX0Rpc2FibGVJbnRlcnJ1cHRzKGJhc2UsIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSB8IGtMUFVBUlRfUnhPdmVycnVuSW50ZXJydXB0RW5hYmxlKTsKKyAgICB9CisKKyAgICBoYW5kbGUtPnJ4RGF0YVNpemUgPSAwVTsKKyAgICBoYW5kbGUtPnJ4U3RhdGUgPSBrTFBVQVJUX1J4SWRsZTsKK30KKworc3RhdHVzX3QgTFBVQVJUX1RyYW5zZmVyR2V0UmVjZWl2ZUNvdW50KExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSwgdWludDMyX3QgKmNvdW50KQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydChjb3VudCk7CisKKyAgICBpZiAoa0xQVUFSVF9SeElkbGUgPT0gaGFuZGxlLT5yeFN0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3M7CisgICAgfQorCisgICAgKmNvdW50ID0gaGFuZGxlLT5yeERhdGFTaXplQWxsIC0gaGFuZGxlLT5yeERhdGFTaXplOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKwordm9pZCBMUFVBUlRfVHJhbnNmZXJIYW5kbGVJUlEoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgdWludDhfdCBjb3VudDsKKyAgICB1aW50OF90IHRlbXBDb3VudDsKKworICAgIC8qIElmIFJYIG92ZXJydW4uICovCisgICAgaWYgKExQVUFSVF9TVEFUX09SX01BU0sgJiBiYXNlLT5TVEFUKQorICAgIHsKKyAgICAgICAgLyogQ2xlYXIgb3ZlcnJ1biBmbGFnLCBvdGhlcndpc2UgdGhlIFJYIGRvZXMgbm90IHdvcmsuICovCisgICAgICAgIGJhc2UtPlNUQVQgPSAoKGJhc2UtPlNUQVQgJiAweDNGRTAwMDAwVSkgfCBMUFVBUlRfU1RBVF9PUl9NQVNLKTsKKworICAgICAgICAvKiBUcmlnZ2VyIGNhbGxiYWNrLiAqLworICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIGtTdGF0dXNfTFBVQVJUX1J4SGFyZHdhcmVPdmVycnVuLCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFJlY2VpdmUgZGF0YSByZWdpc3RlciBmdWxsICovCisgICAgaWYgKChMUFVBUlRfU1RBVF9SRFJGX01BU0sgJiBiYXNlLT5TVEFUKSAmJiAoTFBVQVJUX0NUUkxfUklFX01BU0sgJiBiYXNlLT5DVFJMKSkKKyAgICB7CisvKiBHZXQgdGhlIHNpemUgdGhhdCBjYW4gYmUgc3RvcmVkIGludG8gYnVmZmVyIGZvciB0aGlzIGludGVycnVwdC4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAgICAgIGNvdW50ID0gKCh1aW50OF90KSgoYmFzZS0+V0FURVIgJiBMUFVBUlRfV0FURVJfUlhDT1VOVF9NQVNLKSA+PiBMUFVBUlRfV0FURVJfUlhDT1VOVF9TSElGVCkpOworI2Vsc2UKKyAgICAgICAgY291bnQgPSAxOworI2VuZGlmCisKKyAgICAgICAgLyogSWYgaGFuZGxlLT5yeERhdGFTaXplIGlzIG5vdCAwLCBmaXJzdCBzYXZlIGRhdGEgdG8gaGFuZGxlLT5yeERhdGEuICovCisgICAgICAgIHdoaWxlICgoY291bnQpICYmIChoYW5kbGUtPnJ4RGF0YVNpemUpKQorICAgICAgICB7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8pICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTworICAgICAgICAgICAgdGVtcENvdW50ID0gTUlOKGhhbmRsZS0+cnhEYXRhU2l6ZSwgY291bnQpOworI2Vsc2UKKyAgICAgICAgICAgIHRlbXBDb3VudCA9IDE7CisjZW5kaWYKKworICAgICAgICAgICAgLyogVXNpbmcgbm9uIGJsb2NrIEFQSSB0byByZWFkIHRoZSBkYXRhIGZyb20gdGhlIHJlZ2lzdGVycy4gKi8KKyAgICAgICAgICAgIExQVUFSVF9SZWFkTm9uQmxvY2tpbmcoYmFzZSwgaGFuZGxlLT5yeERhdGEsIHRlbXBDb3VudCk7CisgICAgICAgICAgICBoYW5kbGUtPnJ4RGF0YSArPSB0ZW1wQ291bnQ7CisgICAgICAgICAgICBoYW5kbGUtPnJ4RGF0YVNpemUgLT0gdGVtcENvdW50OworICAgICAgICAgICAgY291bnQgLT0gdGVtcENvdW50OworCisgICAgICAgICAgICAvKiBJZiBhbGwgdGhlIGRhdGEgcmVxdWlyZWQgZm9yIHVwcGVyIGxheWVyIGlzIHJlYWR5LCB0cmlnZ2VyIGNhbGxiYWNrLiAqLworICAgICAgICAgICAgaWYgKCFoYW5kbGUtPnJ4RGF0YVNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5yeFN0YXRlID0ga0xQVUFSVF9SeElkbGU7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgaGFuZGxlLCBrU3RhdHVzX0xQVUFSVF9SeElkbGUsIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIElmIHVzZSBSWCByaW5nIGJ1ZmZlciwgcmVjZWl2ZSBkYXRhIHRvIHJpbmcgYnVmZmVyLiAqLworICAgICAgICBpZiAoaGFuZGxlLT5yeFJpbmdCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIElmIFJYIHJpbmcgYnVmZmVyIGlzIGZ1bGwsIHRyaWdnZXIgY2FsbGJhY2sgdG8gbm90aWZ5IG92ZXIgcnVuLiAqLworICAgICAgICAgICAgICAgIGlmIChMUFVBUlRfVHJhbnNmZXJJc1J4UmluZ0J1ZmZlckZ1bGwoYmFzZSwgaGFuZGxlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIGhhbmRsZSwga1N0YXR1c19MUFVBUlRfUnhSaW5nQnVmZmVyT3ZlcnJ1biwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBJZiByaW5nIGJ1ZmZlciBpcyBzdGlsbCBmdWxsIGFmdGVyIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgb2xkZXN0IGRhdGEgaXMgb3ZlcnJpZGVkLiAqLworICAgICAgICAgICAgICAgIGlmIChMUFVBUlRfVHJhbnNmZXJJc1J4UmluZ0J1ZmZlckZ1bGwoYmFzZSwgaGFuZGxlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIEluY3JlYXNlIGhhbmRsZS0+cnhSaW5nQnVmZmVyVGFpbCB0byBtYWtlIHJvb20gZm9yIG5ldyBkYXRhLiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yeFJpbmdCdWZmZXJUYWlsICsgMVUgPT0gaGFuZGxlLT5yeFJpbmdCdWZmZXJTaXplKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlclRhaWwgPSAwVTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cnhSaW5nQnVmZmVyVGFpbCsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisvKiBSZWFkIGRhdGEuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+aXNTZXZlbkRhdGFCaXRzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJbaGFuZGxlLT5yeFJpbmdCdWZmZXJIZWFkXSA9IChiYXNlLT5EQVRBICYgMHg3Rik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cnhSaW5nQnVmZmVyW2hhbmRsZS0+cnhSaW5nQnVmZmVySGVhZF0gPSBiYXNlLT5EQVRBOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJbaGFuZGxlLT5yeFJpbmdCdWZmZXJIZWFkXSA9IGJhc2UtPkRBVEE7CisjZW5kaWYKKworICAgICAgICAgICAgICAgIC8qIEluY3JlYXNlIGhhbmRsZS0+cnhSaW5nQnVmZmVySGVhZC4gKi8KKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yeFJpbmdCdWZmZXJIZWFkICsgMVUgPT0gaGFuZGxlLT5yeFJpbmdCdWZmZXJTaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJIZWFkID0gMFU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cnhSaW5nQnVmZmVySGVhZCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBJZiBubyByZWNlaXZlIHJlcXVzdCBwZW5kaW5nLCBzdG9wIFJYIGludGVycnVwdC4gKi8KKyAgICAgICAgZWxzZSBpZiAoIWhhbmRsZS0+cnhEYXRhU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgTFBVQVJUX0Rpc2FibGVJbnRlcnJ1cHRzKGJhc2UsIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSB8IGtMUFVBUlRfUnhPdmVycnVuSW50ZXJydXB0RW5hYmxlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFNlbmQgZGF0YSByZWdpc3RlciBlbXB0eSBhbmQgdGhlIGludGVycnVwdCBpcyBlbmFibGVkLiAqLworICAgIGlmICgoYmFzZS0+U1RBVCAmIExQVUFSVF9TVEFUX1REUkVfTUFTSykgJiYgKGJhc2UtPkNUUkwgJiBMUFVBUlRfQ1RSTF9USUVfTUFTSykpCisgICAgeworLyogR2V0IHRoZSBieXRlcyB0aGF0IGF2YWlsYWJsZSBhdCB0aGlzIG1vbWVudC4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAgICAgIGNvdW50ID0gRlNMX0ZFQVRVUkVfTFBVQVJUX0ZJRk9fU0laRW4oYmFzZSkgLQorICAgICAgICAgICAgICAgICgoYmFzZS0+V0FURVIgJiBMUFVBUlRfV0FURVJfVFhDT1VOVF9NQVNLKSA+PiBMUFVBUlRfV0FURVJfVFhDT1VOVF9TSElGVCk7CisjZWxzZQorICAgICAgICBjb3VudCA9IDE7CisjZW5kaWYKKworICAgICAgICB3aGlsZSAoKGNvdW50KSAmJiAoaGFuZGxlLT50eERhdGFTaXplKSkKKyAgICAgICAgeworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICAgICAgICAgIHRlbXBDb3VudCA9IE1JTihoYW5kbGUtPnR4RGF0YVNpemUsIGNvdW50KTsKKyNlbHNlCisgICAgICAgICAgICB0ZW1wQ291bnQgPSAxOworI2VuZGlmCisKKyAgICAgICAgICAgIC8qIFVzaW5nIG5vbiBibG9jayBBUEkgdG8gd3JpdGUgdGhlIGRhdGEgdG8gdGhlIHJlZ2lzdGVycy4gKi8KKyAgICAgICAgICAgIExQVUFSVF9Xcml0ZU5vbkJsb2NraW5nKGJhc2UsIGhhbmRsZS0+dHhEYXRhLCB0ZW1wQ291bnQpOworICAgICAgICAgICAgaGFuZGxlLT50eERhdGEgKz0gdGVtcENvdW50OworICAgICAgICAgICAgaGFuZGxlLT50eERhdGFTaXplIC09IHRlbXBDb3VudDsKKyAgICAgICAgICAgIGNvdW50IC09IHRlbXBDb3VudDsKKworICAgICAgICAgICAgLyogSWYgYWxsIHRoZSBkYXRhIGFyZSB3cml0dGVuIHRvIGRhdGEgcmVnaXN0ZXIsIG5vdGlmeSB1c2VyIHdpdGggdGhlIGNhbGxiYWNrLCB0aGVuIFRYIGZpbmlzaGVkLiAqLworICAgICAgICAgICAgaWYgKCFoYW5kbGUtPnR4RGF0YVNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT50eFN0YXRlID0ga0xQVUFSVF9UeElkbGU7CisKKyAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIFRYIHJlZ2lzdGVyIGVtcHR5IGludGVycnVwdC4gKi8KKyAgICAgICAgICAgICAgICBiYXNlLT5DVFJMID0gKGJhc2UtPkNUUkwgJiB+TFBVQVJUX0NUUkxfVElFX01BU0spOworCisgICAgICAgICAgICAgICAgLyogVHJpZ2dlciBjYWxsYmFjay4gKi8KKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgaGFuZGxlLCBrU3RhdHVzX0xQVUFSVF9UeElkbGUsIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMUFVBUlRfVHJhbnNmZXJIYW5kbGVFcnJvcklSUShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgLyogVG8gYmUgaW1wbGVtZW50ZWQgYnkgVXNlci4gKi8KK30KKworI2lmIGRlZmluZWQoTFBVQVJUMCkKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUQordm9pZCBMUFVBUlQwX1RYX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQwLCBzX2xwdWFydEhhbmRsZVswXSk7Cit9Cit2b2lkIExQVUFSVDBfUlhfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDAsIHNfbHB1YXJ0SGFuZGxlWzBdKTsKK30KKyNlbHNlCit2b2lkIExQVUFSVDBfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDAsIHNfbHB1YXJ0SGFuZGxlWzBdKTsKK30KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExQVUFSVDEpCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUSkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TRVBBUkFURV9SWF9UWF9JUlEKK3ZvaWQgTFBVQVJUMV9UWF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUMSwgc19scHVhcnRIYW5kbGVbMV0pOworfQordm9pZCBMUFVBUlQxX1JYX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQxLCBzX2xwdWFydEhhbmRsZVsxXSk7Cit9CisjZWxzZQordm9pZCBMUFVBUlQxX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQxLCBzX2xwdWFydEhhbmRsZVsxXSk7Cit9CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMUFVBUlQyKQorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TRVBBUkFURV9SWF9UWF9JUlEpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRCit2b2lkIExQVUFSVDJfVFhfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDIsIHNfbHB1YXJ0SGFuZGxlWzJdKTsKK30KK3ZvaWQgTFBVQVJUMl9SWF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUMiwgc19scHVhcnRIYW5kbGVbMl0pOworfQorI2Vsc2UKK3ZvaWQgTFBVQVJUMl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUMiwgc19scHVhcnRIYW5kbGVbMl0pOworfQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFBVQVJUMykKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUQordm9pZCBMUFVBUlQzX1RYX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQzLCBzX2xwdWFydEhhbmRsZVszXSk7Cit9Cit2b2lkIExQVUFSVDNfUlhfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDMsIHNfbHB1YXJ0SGFuZGxlWzNdKTsKK30KKyNlbHNlCit2b2lkIExQVUFSVDNfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDMsIHNfbHB1YXJ0SGFuZGxlWzNdKTsKK30KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExQVUFSVDQpCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUSkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TRVBBUkFURV9SWF9UWF9JUlEKK3ZvaWQgTFBVQVJUNF9UWF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUNCwgc19scHVhcnRIYW5kbGVbNF0pOworfQordm9pZCBMUFVBUlQ0X1JYX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQ0LCBzX2xwdWFydEhhbmRsZVs0XSk7Cit9CisjZWxzZQordm9pZCBMUFVBUlQ0X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQ0LCBzX2xwdWFydEhhbmRsZVs0XSk7Cit9CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMUFVBUlQ1KQorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TRVBBUkFURV9SWF9UWF9JUlEpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRCit2b2lkIExQVUFSVDVfVFhfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDUsIHNfbHB1YXJ0SGFuZGxlWzVdKTsKK30KK3ZvaWQgTFBVQVJUNV9SWF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUNSwgc19scHVhcnRIYW5kbGVbNV0pOworfQorI2Vsc2UKK3ZvaWQgTFBVQVJUNV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUNSwgc19scHVhcnRIYW5kbGVbNV0pOworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydC5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2MGY4MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydC5oCkBAIC0wLDAgKzEsODE0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX0xQVUFSVF9IXworI2RlZmluZSBfRlNMX0xQVUFSVF9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGxwdWFydF9kcml2ZXIKKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBMUFVBUlQgZHJpdmVyIHZlcnNpb24gMi4yLjMuICovCisjZGVmaW5lIEZTTF9MUFVBUlRfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAyLCAzKSkKKy8qQH0qLworCisvKiEgQGJyaWVmIEVycm9yIGNvZGVzIGZvciB0aGUgTFBVQVJUIGRyaXZlci4gKi8KK2VudW0gX2xwdWFydF9zdGF0dXMKK3sKKyAgICBrU3RhdHVzX0xQVUFSVF9UeEJ1c3kgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfTFBVQVJULCAwKSwgICAgICAgICAgICAgICAgICAvKiE8IFRYIGJ1c3kgKi8KKyAgICBrU3RhdHVzX0xQVUFSVF9SeEJ1c3kgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfTFBVQVJULCAxKSwgICAgICAgICAgICAgICAgICAvKiE8IFJYIGJ1c3kgKi8KKyAgICBrU3RhdHVzX0xQVUFSVF9UeElkbGUgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfTFBVQVJULCAyKSwgICAgICAgICAgICAgICAgICAvKiE8IExQVUFSVCB0cmFuc21pdHRlciBpcyBpZGxlLiAqLworICAgIGtTdGF0dXNfTFBVQVJUX1J4SWRsZSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDMpLCAgICAgICAgICAgICAgICAgIC8qITwgTFBVQVJUIHJlY2VpdmVyIGlzIGlkbGUuICovCisgICAga1N0YXR1c19MUFVBUlRfVHhXYXRlcm1hcmtUb29MYXJnZSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDQpLCAgICAgLyohPCBUWCBGSUZPIHdhdGVybWFyayB0b28gbGFyZ2UgICovCisgICAga1N0YXR1c19MUFVBUlRfUnhXYXRlcm1hcmtUb29MYXJnZSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDUpLCAgICAgLyohPCBSWCBGSUZPIHdhdGVybWFyayB0b28gbGFyZ2UgICovCisgICAga1N0YXR1c19MUFVBUlRfRmxhZ0Nhbm5vdENsZWFyTWFudWFsbHkgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfTFBVQVJULCA2KSwgLyohPCBTb21lIGZsYWcgY2FuJ3QgbWFudWFsbHkgY2xlYXIgKi8KKyAgICBrU3RhdHVzX0xQVUFSVF9FcnJvciA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDcpLCAgICAgICAgICAgICAgICAgICAvKiE8IEVycm9yIGhhcHBlbnMgb24gTFBVQVJULiAqLworICAgIGtTdGF0dXNfTFBVQVJUX1J4UmluZ0J1ZmZlck92ZXJydW4gPQorICAgICAgICBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfTFBVQVJULCA4KSwgLyohPCBMUFVBUlQgUlggc29mdHdhcmUgcmluZyBidWZmZXIgb3ZlcnJ1bi4gKi8KKyAgICBrU3RhdHVzX0xQVUFSVF9SeEhhcmR3YXJlT3ZlcnJ1biA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDkpLCAvKiE8IExQVUFSVCBSWCByZWNlaXZlciBvdmVycnVuLiAqLworICAgIGtTdGF0dXNfTFBVQVJUX05vaXNlRXJyb3IgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfTFBVQVJULCAxMCksICAgICAgIC8qITwgTFBVQVJUIG5vaXNlIGVycm9yLiAqLworICAgIGtTdGF0dXNfTFBVQVJUX0ZyYW1pbmdFcnJvciA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDExKSwgICAgIC8qITwgTFBVQVJUIGZyYW1pbmcgZXJyb3IuICovCisgICAga1N0YXR1c19MUFVBUlRfUGFyaXR5RXJyb3IgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfTFBVQVJULCAxMiksICAgICAgLyohPCBMUFVBUlQgcGFyaXR5IGVycm9yLiAqLworICAgIGtTdGF0dXNfTFBVQVJUX0JhdWRyYXRlTm90U3VwcG9ydCA9CisgICAgICAgIE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDEzKSwgLyohPCBCYXVkcmF0ZSBpcyBub3Qgc3VwcG9ydCBpbiBjdXJyZW50IGNsb2NrIHNvdXJjZSAqLworfTsKKworLyohIEBicmllZiBMUFVBUlQgcGFyaXR5IG1vZGUuICovCit0eXBlZGVmIGVudW0gX2xwdWFydF9wYXJpdHlfbW9kZQoreworICAgIGtMUFVBUlRfUGFyaXR5RGlzYWJsZWQgPSAweDBVLCAvKiE8IFBhcml0eSBkaXNhYmxlZCAqLworICAgIGtMUFVBUlRfUGFyaXR5RXZlbiA9IDB4MlUsICAgICAvKiE8IFBhcml0eSBlbmFibGVkLCB0eXBlIGV2ZW4sIGJpdCBzZXR0aW5nOiBQRXxQVCA9IDEwICovCisgICAga0xQVUFSVF9QYXJpdHlPZGQgPSAweDNVLCAgICAgIC8qITwgUGFyaXR5IGVuYWJsZWQsIHR5cGUgb2RkLCAgYml0IHNldHRpbmc6IFBFfFBUID0gMTEgKi8KK30gbHB1YXJ0X3Bhcml0eV9tb2RlX3Q7CisKKy8qISBAYnJpZWYgTFBVQVJUIGRhdGEgYml0cyBjb3VudC4gKi8KK3R5cGVkZWYgZW51bSBfbHB1YXJ0X2RhdGFfYml0cworeworICAgIGtMUFVBUlRfRWlnaHREYXRhQml0cyA9IDB4MFUsIC8qITwgRWlnaHQgZGF0YSBiaXQgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQKKyAgICBrTFBVQVJUX1NldmVuRGF0YUJpdHMgPSAweDFVLCAvKiE8IFNldmVuIGRhdGEgYml0ICovCisjZW5kaWYKK30gbHB1YXJ0X2RhdGFfYml0c190OworCisvKiEgQGJyaWVmIExQVUFSVCBzdG9wIGJpdCBjb3VudC4gKi8KK3R5cGVkZWYgZW51bSBfbHB1YXJ0X3N0b3BfYml0X2NvdW50Cit7CisgICAga0xQVUFSVF9PbmVTdG9wQml0ID0gMFUsIC8qITwgT25lIHN0b3AgYml0ICovCisgICAga0xQVUFSVF9Ud29TdG9wQml0ID0gMVUsIC8qITwgVHdvIHN0b3AgYml0cyAqLworfSBscHVhcnRfc3RvcF9iaXRfY291bnRfdDsKKworLyohCisgKiBAYnJpZWYgTFBVQVJUIGludGVycnVwdCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSwgZGVmYXVsdCBzZXR0aW5ncyBhbGwgZGlzYWJsZWQuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHNldHRpbmdzIGZvciBhbGwgTFBVQVJUIGludGVycnVwdCBjb25maWd1cmF0aW9ucy4KKyAqLworZW51bSBfbHB1YXJ0X2ludGVycnVwdF9lbmFibGUKK3sKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTElOX0JSRUFLX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUCisgICAga0xQVUFSVF9MaW5CcmVha0ludGVycnVwdEVuYWJsZSA9IChMUFVBUlRfQkFVRF9MQktESUVfTUFTSyA+PiA4KSwgLyohPCBMSU4gYnJlYWsgZGV0ZWN0LiAqLworI2VuZGlmCisgICAga0xQVUFSVF9SeEFjdGl2ZUVkZ2VJbnRlcnJ1cHRFbmFibGUgPSAoTFBVQVJUX0JBVURfUlhFREdJRV9NQVNLID4+IDgpLCAvKiE8IFJlY2VpdmUgQWN0aXZlIEVkZ2UuICovCisgICAga0xQVUFSVF9UeERhdGFSZWdFbXB0eUludGVycnVwdEVuYWJsZSA9IChMUFVBUlRfQ1RSTF9USUVfTUFTSyksICAgICAgICAvKiE8IFRyYW5zbWl0IGRhdGEgcmVnaXN0ZXIgZW1wdHkuICovCisgICAga0xQVUFSVF9UcmFuc21pc3Npb25Db21wbGV0ZUludGVycnVwdEVuYWJsZSA9IChMUFVBUlRfQ1RSTF9UQ0lFX01BU0spLCAvKiE8IFRyYW5zbWlzc2lvbiBjb21wbGV0ZS4gKi8KKyAgICBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxJbnRlcnJ1cHRFbmFibGUgPSAoTFBVQVJUX0NUUkxfUklFX01BU0spLCAgICAgICAgIC8qITwgUmVjZWl2ZXIgZGF0YSByZWdpc3RlciBmdWxsLiAqLworICAgIGtMUFVBUlRfSWRsZUxpbmVJbnRlcnJ1cHRFbmFibGUgPSAoTFBVQVJUX0NUUkxfSUxJRV9NQVNLKSwgICAgICAgICAgICAgLyohPCBJZGxlIGxpbmUuICovCisgICAga0xQVUFSVF9SeE92ZXJydW5JbnRlcnJ1cHRFbmFibGUgPSAoTFBVQVJUX0NUUkxfT1JJRV9NQVNLKSwgICAgICAgICAgICAvKiE8IFJlY2VpdmVyIE92ZXJydW4uICovCisgICAga0xQVUFSVF9Ob2lzZUVycm9ySW50ZXJydXB0RW5hYmxlID0gKExQVUFSVF9DVFJMX05FSUVfTUFTSyksICAgICAgICAgICAvKiE8IE5vaXNlIGVycm9yIGZsYWcuICovCisgICAga0xQVUFSVF9GcmFtaW5nRXJyb3JJbnRlcnJ1cHRFbmFibGUgPSAoTFBVQVJUX0NUUkxfRkVJRV9NQVNLKSwgICAgICAgICAvKiE8IEZyYW1pbmcgZXJyb3IgZmxhZy4gKi8KKyAgICBrTFBVQVJUX1Bhcml0eUVycm9ySW50ZXJydXB0RW5hYmxlID0gKExQVUFSVF9DVFJMX1BFSUVfTUFTSyksICAgICAgICAgIC8qITwgUGFyaXR5IGVycm9yIGZsYWcuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8pICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTworICAgIGtMUFVBUlRfVHhGaWZvT3ZlcmZsb3dJbnRlcnJ1cHRFbmFibGUgPSAoTFBVQVJUX0ZJRk9fVFhPRkVfTUFTSyA+PiA4KSwgIC8qITwgVHJhbnNtaXQgRklGTyBPdmVyZmxvdy4gKi8KKyAgICBrTFBVQVJUX1J4Rmlmb1VuZGVyZmxvd0ludGVycnVwdEVuYWJsZSA9IChMUFVBUlRfRklGT19SWFVGRV9NQVNLID4+IDgpLCAvKiE8IFJlY2VpdmUgRklGTyBVbmRlcmZsb3cuICovCisjZW5kaWYKK307CisKKy8qIQorICogQGJyaWVmIExQVUFSVCBzdGF0dXMgZmxhZ3MuCisgKgorICogVGhpcyBwcm92aWRlcyBjb25zdGFudHMgZm9yIHRoZSBMUFVBUlQgc3RhdHVzIGZsYWdzIGZvciB1c2UgaW4gdGhlIExQVUFSVCBmdW5jdGlvbnMuCisgKi8KK2VudW0gX2xwdWFydF9mbGFncworeworICAgIGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlGbGFnID0KKyAgICAgICAgKExQVUFSVF9TVEFUX1REUkVfTUFTSyksIC8qITwgVHJhbnNtaXQgZGF0YSByZWdpc3RlciBlbXB0eSBmbGFnLCBzZXRzIHdoZW4gdHJhbnNtaXQgYnVmZmVyIGlzIGVtcHR5ICovCisgICAga0xQVUFSVF9UcmFuc21pc3Npb25Db21wbGV0ZUZsYWcgPQorICAgICAgICAoTFBVQVJUX1NUQVRfVENfTUFTSyksIC8qITwgVHJhbnNtaXNzaW9uIGNvbXBsZXRlIGZsYWcsIHNldHMgd2hlbiB0cmFuc21pc3Npb24gYWN0aXZpdHkgY29tcGxldGUgKi8KKyAgICBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxGbGFnID0KKyAgICAgICAgKExQVUFSVF9TVEFUX1JEUkZfTUFTSyksIC8qITwgUmVjZWl2ZSBkYXRhIHJlZ2lzdGVyIGZ1bGwgZmxhZywgc2V0cyB3aGVuIHRoZSByZWNlaXZlIGRhdGEgYnVmZmVyIGlzIGZ1bGwgKi8KKyAgICBrTFBVQVJUX0lkbGVMaW5lRmxhZyA9IChMUFVBUlRfU1RBVF9JRExFX01BU0spLCAvKiE8IElkbGUgbGluZSBkZXRlY3QgZmxhZywgc2V0cyB3aGVuIGlkbGUgbGluZSBkZXRlY3RlZCAqLworICAgIGtMUFVBUlRfUnhPdmVycnVuRmxhZyA9IChMUFVBUlRfU1RBVF9PUl9NQVNLKSwgIC8qITwgUmVjZWl2ZSBPdmVycnVuLCBzZXRzIHdoZW4gbmV3IGRhdGEgaXMgcmVjZWl2ZWQgYmVmb3JlIGRhdGEgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkIGZyb20gcmVjZWl2ZSByZWdpc3RlciAqLworICAgIGtMUFVBUlRfTm9pc2VFcnJvckZsYWcgPSAoTFBVQVJUX1NUQVRfTkZfTUFTSyksIC8qITwgUmVjZWl2ZSB0YWtlcyAzIHNhbXBsZXMgb2YgZWFjaCByZWNlaXZlZCBiaXQuICBJZiBhbnkgb2YgdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVzIGRpZmZlciwgbm9pc2UgZmxhZyBzZXRzICovCisgICAga0xQVUFSVF9GcmFtaW5nRXJyb3JGbGFnID0KKyAgICAgICAgKExQVUFSVF9TVEFUX0ZFX01BU0spLCAvKiE8IEZyYW1lIGVycm9yIGZsYWcsIHNldHMgaWYgbG9naWMgMCB3YXMgZGV0ZWN0ZWQgd2hlcmUgc3RvcCBiaXQgZXhwZWN0ZWQgKi8KKyAgICBrTFBVQVJUX1Bhcml0eUVycm9yRmxhZyA9IChMUFVBUlRfU1RBVF9QRl9NQVNLKSwgLyohPCBJZiBwYXJpdHkgZW5hYmxlZCwgc2V0cyB1cG9uIHBhcml0eSBlcnJvciBkZXRlY3Rpb24gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTElOX0JSRUFLX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUCisgICAga0xQVUFSVF9MaW5CcmVha0ZsYWcgPSAoTFBVQVJUX1NUQVRfTEJLRElGX01BU0spLCAvKiE8IExJTiBicmVhayBkZXRlY3QgaW50ZXJydXB0IGZsYWcsIHNldHMgd2hlbiBMSU4gYnJlYWsgY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWQgYW5kIExJTiBjaXJjdWl0IGVuYWJsZWQgKi8KKyNlbmRpZgorICAgIGtMUFVBUlRfUnhBY3RpdmVFZGdlRmxhZyA9CisgICAgICAgIChMUFVBUlRfU1RBVF9SWEVER0lGX01BU0spLCAvKiE8IFJlY2VpdmUgcGluIGFjdGl2ZSBlZGdlIGludGVycnVwdCBmbGFnLCBzZXRzIHdoZW4gYWN0aXZlIGVkZ2UgZGV0ZWN0ZWQgKi8KKyAgICBrTFBVQVJUX1J4QWN0aXZlRmxhZyA9CisgICAgICAgIChMUFVBUlRfU1RBVF9SQUZfTUFTSyksIC8qITwgUmVjZWl2ZXIgQWN0aXZlIEZsYWcgKFJBRiksIHNldHMgYXQgYmVnaW5uaW5nIG9mIHZhbGlkIHN0YXJ0IGJpdCAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19BRERSRVNTX01BVENISU5HKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0FERFJFU1NfTUFUQ0hJTkcKKyAgICBrTFBVQVJUX0RhdGFNYXRjaDFGbGFnID0gTFBVQVJUX1NUQVRfTUExRl9NQVNLLCAvKiE8IFRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSByZWFkIGZyb20gTFBVQVJUX0RBVEEgbWF0Y2hlcyBNQTEqLworICAgIGtMUFVBUlRfRGF0YU1hdGNoMkZsYWcgPSBMUFVBUlRfU1RBVF9NQTJGX01BU0ssIC8qITwgVGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIHJlYWQgZnJvbSBMUFVBUlRfREFUQSBtYXRjaGVzIE1BMiovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRVhURU5ERURfREFUQV9SRUdJU1RFUl9GTEFHUykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19FWFRFTkRFRF9EQVRBX1JFR0lTVEVSX0ZMQUdTCisgICAga0xQVUFSVF9Ob2lzZUVycm9ySW5SeERhdGFSZWdGbGFnID0KKyAgICAgICAgKExQVUFSVF9EQVRBX05PSVNZX01BU0sgPj4gMTApLCAvKiE8IE5PSVNZIGJpdCwgc2V0cyBpZiBub2lzZSBkZXRlY3RlZCBpbiBjdXJyZW50IGRhdGEgd29yZCAqLworICAgIGtMUFVBUlRfUGFyaXR5RXJyb3JJblJ4RGF0YVJlZ0ZsYWcgPQorICAgICAgICAoTFBVQVJUX0RBVEFfUEFSSVRZRV9NQVNLID4+IDEwKSwgLyohPCBQQVJJVFlFIGJpdCwgc2V0cyBpZiBub2lzZSBkZXRlY3RlZCBpbiBjdXJyZW50IGRhdGEgd29yZCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8pICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTworICAgIGtMUFVBUlRfVHhGaWZvRW1wdHlGbGFnID0gKExQVUFSVF9GSUZPX1RYRU1QVF9NQVNLID4+IDE2KSwgLyohPCBUWEVNUFQgYml0LCBzZXRzIGlmIHRyYW5zbWl0IGJ1ZmZlciBpcyBlbXB0eSAqLworICAgIGtMUFVBUlRfUnhGaWZvRW1wdHlGbGFnID0gKExQVUFSVF9GSUZPX1JYRU1QVF9NQVNLID4+IDE2KSwgLyohPCBSWEVNUFQgYml0LCBzZXRzIGlmIHJlY2VpdmUgYnVmZmVyIGlzIGVtcHR5ICovCisgICAga0xQVUFSVF9UeEZpZm9PdmVyZmxvd0ZsYWcgPQorICAgICAgICAoTFBVQVJUX0ZJRk9fVFhPRl9NQVNLID4+IDE2KSwgLyohPCBUWE9GIGJpdCwgc2V0cyBpZiB0cmFuc21pdCBidWZmZXIgb3ZlcmZsb3cgb2NjdXJyZWQgKi8KKyAgICBrTFBVQVJUX1J4Rmlmb1VuZGVyZmxvd0ZsYWcgPQorICAgICAgICAoTFBVQVJUX0ZJRk9fUlhVRl9NQVNLID4+IDE2KSwgLyohPCBSWFVGIGJpdCwgc2V0cyBpZiByZWNlaXZlIGJ1ZmZlciB1bmRlcmZsb3cgb2NjdXJyZWQgKi8KKyNlbmRpZgorfTsKKworLyohIEBicmllZiBMUFVBUlQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuICovCit0eXBlZGVmIHN0cnVjdCBfbHB1YXJ0X2NvbmZpZworeworICAgIHVpbnQzMl90IGJhdWRSYXRlX0JwczsgICAgICAgICAgICAvKiE8IExQVUFSVCBiYXVkIHJhdGUgICovCisgICAgbHB1YXJ0X3Bhcml0eV9tb2RlX3QgcGFyaXR5TW9kZTsgIC8qITwgUGFyaXR5IG1vZGUsIGRpc2FibGVkIChkZWZhdWx0KSwgZXZlbiwgb2RkICovCisgICAgbHB1YXJ0X2RhdGFfYml0c190IGRhdGFCaXRzQ291bnQ7IC8qITwgRGF0YSBiaXRzIGNvdW50LCBlaWdodCAoZGVmYXVsdCksIHNldmVuICovCisgICAgYm9vbCBpc01zYjsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSBiaXRzIG9yZGVyLCBMU0IgKGRlZmF1bHQpLCBNU0IgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU1RPUF9CSVRfQ09ORklHX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU1RPUF9CSVRfQ09ORklHX1NVUFBPUlQKKyAgICBscHVhcnRfc3RvcF9iaXRfY291bnRfdCBzdG9wQml0Q291bnQ7IC8qITwgTnVtYmVyIG9mIHN0b3AgYml0cywgMSBzdG9wIGJpdCAoZGVmYXVsdCkgb3IgMiBzdG9wIGJpdHMgICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAgdWludDhfdCB0eEZpZm9XYXRlcm1hcms7IC8qITwgVFggRklGTyB3YXRlcm1hcmsgKi8KKyAgICB1aW50OF90IHJ4Rmlmb1dhdGVybWFyazsgLyohPCBSWCBGSUZPIHdhdGVybWFyayAqLworI2VuZGlmCisgICAgYm9vbCBlbmFibGVUeDsgLyohPCBFbmFibGUgVFggKi8KKyAgICBib29sIGVuYWJsZVJ4OyAvKiE8IEVuYWJsZSBSWCAqLworfSBscHVhcnRfY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgTFBVQVJUIHRyYW5zZmVyIHN0cnVjdHVyZS4gKi8KK3R5cGVkZWYgc3RydWN0IF9scHVhcnRfdHJhbnNmZXIKK3sKKyAgICB1aW50OF90ICpkYXRhOyAgIC8qITwgVGhlIGJ1ZmZlciBvZiBkYXRhIHRvIGJlIHRyYW5zZmVyLiovCisgICAgc2l6ZV90IGRhdGFTaXplOyAvKiE8IFRoZSBieXRlIGNvdW50IHRvIGJlIHRyYW5zZmVyLiAqLworfSBscHVhcnRfdHJhbnNmZXJfdDsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgaGFuZGxlIHR5cGVkZWYuICovCit0eXBlZGVmIHN0cnVjdCBfbHB1YXJ0X2hhbmRsZSBscHVhcnRfaGFuZGxlX3Q7CisKKy8qISBAYnJpZWYgTFBVQVJUIHRyYW5zZmVyIGNhbGxiYWNrIGZ1bmN0aW9uLiAqLwordHlwZWRlZiB2b2lkICgqbHB1YXJ0X3RyYW5zZmVyX2NhbGxiYWNrX3QpKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSwgc3RhdHVzX3Qgc3RhdHVzLCB2b2lkICp1c2VyRGF0YSk7CisKKy8qISBAYnJpZWYgTFBVQVJUIGhhbmRsZSBzdHJ1Y3R1cmUuICovCitzdHJ1Y3QgX2xwdWFydF9oYW5kbGUKK3sKKyAgICB1aW50OF90ICp2b2xhdGlsZSB0eERhdGE7ICAgLyohPCBBZGRyZXNzIG9mIHJlbWFpbmluZyBkYXRhIHRvIHNlbmQuICovCisgICAgdm9sYXRpbGUgc2l6ZV90IHR4RGF0YVNpemU7IC8qITwgU2l6ZSBvZiB0aGUgcmVtYWluaW5nIGRhdGEgdG8gc2VuZC4gKi8KKyAgICBzaXplX3QgdHhEYXRhU2l6ZUFsbDsgICAgICAgLyohPCBTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQgb3V0LiAqLworICAgIHVpbnQ4X3QgKnZvbGF0aWxlIHJ4RGF0YTsgICAvKiE8IEFkZHJlc3Mgb2YgcmVtYWluaW5nIGRhdGEgdG8gcmVjZWl2ZS4gKi8KKyAgICB2b2xhdGlsZSBzaXplX3QgcnhEYXRhU2l6ZTsgLyohPCBTaXplIG9mIHRoZSByZW1haW5pbmcgZGF0YSB0byByZWNlaXZlLiAqLworICAgIHNpemVfdCByeERhdGFTaXplQWxsOyAgICAgICAvKiE8IFNpemUgb2YgdGhlIGRhdGEgdG8gcmVjZWl2ZS4gKi8KKworICAgIHVpbnQ4X3QgKnJ4UmluZ0J1ZmZlcjsgICAgICAgICAgICAgIC8qITwgU3RhcnQgYWRkcmVzcyBvZiB0aGUgcmVjZWl2ZXIgcmluZyBidWZmZXIuICovCisgICAgc2l6ZV90IHJ4UmluZ0J1ZmZlclNpemU7ICAgICAgICAgICAgLyohPCBTaXplIG9mIHRoZSByaW5nIGJ1ZmZlci4gKi8KKyAgICB2b2xhdGlsZSB1aW50MTZfdCByeFJpbmdCdWZmZXJIZWFkOyAvKiE8IEluZGV4IGZvciB0aGUgZHJpdmVyIHRvIHN0b3JlIHJlY2VpdmVkIGRhdGEgaW50byByaW5nIGJ1ZmZlci4gKi8KKyAgICB2b2xhdGlsZSB1aW50MTZfdCByeFJpbmdCdWZmZXJUYWlsOyAvKiE8IEluZGV4IGZvciB0aGUgdXNlciB0byBnZXQgZGF0YSBmcm9tIHRoZSByaW5nIGJ1ZmZlci4gKi8KKworICAgIGxwdWFydF90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrOyAvKiE8IENhbGxiYWNrIGZ1bmN0aW9uLiAqLworICAgIHZvaWQgKnVzZXJEYXRhOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IExQVUFSVCBjYWxsYmFjayBmdW5jdGlvbiBwYXJhbWV0ZXIuKi8KKworICAgIHZvbGF0aWxlIHVpbnQ4X3QgdHhTdGF0ZTsgLyohPCBUWCB0cmFuc2ZlciBzdGF0ZS4gKi8KKyAgICB2b2xhdGlsZSB1aW50OF90IHJ4U3RhdGU7IC8qITwgUlggdHJhbnNmZXIgc3RhdGUuICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQKKyAgICBib29sIGlzU2V2ZW5EYXRhQml0czsgLyohPCBTZXZlbiBkYXRhIGJpdHMgZmxhZy4gKi8KKyNlbmRpZgorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfY3BsdXNwbHVzICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfR0xPQkFMKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0dMT0JBTAorCisvKiEKKyAqIEBuYW1lIFNvZnR3YXJlIFJlc2V0CisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFJlc2V0cyB0aGUgTFBVQVJUIHVzaW5nIHNvZnR3YXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIGFsbCBpbnRlcm5hbCBsb2dpYyBhbmQgcmVnaXN0ZXJzIGV4Y2VwdCB0aGUgR2xvYmFsIFJlZ2lzdGVyLgorICogUmVtYWlucyBzZXQgdW50aWwgY2xlYXJlZCBieSBzb2Z0d2FyZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMUFVBUlRfU29mdHdhcmVSZXNldChMUFVBUlRfVHlwZSAqYmFzZSkKK3sKKyAgICBiYXNlLT5HTE9CQUwgfD0gTFBVQVJUX0dMT0JBTF9SU1RfTUFTSzsKKyAgICBiYXNlLT5HTE9CQUwgJj0gfkxQVUFSVF9HTE9CQUxfUlNUX01BU0s7Cit9CisvKiBAfSAqLworI2VuZGlmIC8qRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19HTE9CQUwqLworCisvKiEKKyAqIEBuYW1lIEluaXRpYWxpemF0aW9uIGFuZCBkZWluaXRpYWxpemF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIGFuIExQVUFSVCBpbnN0YW5jZSB3aXRoIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGFuZCB0aGUgcGVyaXBoZXJhbCBjbG9jay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIExQVUFSVCBtb2R1bGUgd2l0aCB1c2VyLWRlZmluZWQgc2V0dGluZ3MuIENhbGwgdGhlIExQVUFSVF9HZXREZWZhdWx0Q29uZmlnKCkgZnVuY3Rpb24KKyAqIHRvIGNvbmZpZ3VyZSB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgYW5kIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorICogVGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IHRvIHVzZSB0aGlzIEFQSSB0byBjb25maWd1cmUgdGhlIExQVUFSVC4KKyAqIEBjb2RlCisgKiAgbHB1YXJ0X2NvbmZpZ190IGxwdWFydENvbmZpZzsKKyAqICBscHVhcnRDb25maWcuYmF1ZFJhdGVfQnBzID0gMTE1MjAwVTsKKyAqICBscHVhcnRDb25maWcucGFyaXR5TW9kZSA9IGtMUFVBUlRfUGFyaXR5RGlzYWJsZWQ7CisgKiAgbHB1YXJ0Q29uZmlnLmRhdGFCaXRzQ291bnQgPSBrTFBVQVJUX0VpZ2h0RGF0YUJpdHM7CisgKiAgbHB1YXJ0Q29uZmlnLmlzTXNiID0gZmFsc2U7CisgKiAgbHB1YXJ0Q29uZmlnLnN0b3BCaXRDb3VudCA9IGtMUFVBUlRfT25lU3RvcEJpdDsKKyAqICBscHVhcnRDb25maWcudHhGaWZvV2F0ZXJtYXJrID0gMDsKKyAqICBscHVhcnRDb25maWcucnhGaWZvV2F0ZXJtYXJrID0gMTsKKyAqICBMUFVBUlRfSW5pdChMUFVBUlQxLCAmbHB1YXJ0Q29uZmlnLCAyMDAwMDAwMFUpOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gYSB1c2VyLWRlZmluZWQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gc3JjQ2xvY2tfSHogTFBVQVJUIGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kgaW4gSFouCisgKiBAcmV0dmFsIGtTdGF0dXNfTFBVQVJUX0JhdWRyYXRlTm90U3VwcG9ydCBCYXVkcmF0ZSBpcyBub3Qgc3VwcG9ydCBpbiBjdXJyZW50IGNsb2NrIHNvdXJjZS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIExQVUFSVCBpbml0aWFsaXplIHN1Y2NlZWQKKyAqLworc3RhdHVzX3QgTFBVQVJUX0luaXQoTFBVQVJUX1R5cGUgKmJhc2UsIGNvbnN0IGxwdWFydF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBzcmNDbG9ja19Ieik7CisKKy8qIQorICogQGJyaWVmIERlaW5pdGlhbGl6ZXMgYSBMUFVBUlQgaW5zdGFuY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiB3YWl0cyBmb3IgdHJhbnNtaXQgdG8gY29tcGxldGUsIGRpc2FibGVzIFRYIGFuZCBSWCwgYW5kIGRpc2FibGVzIHRoZSBMUFVBUlQgY2xvY2suCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCit2b2lkIExQVUFSVF9EZWluaXQoTFBVQVJUX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIExQVUFSVCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdmFsdWUuIFRoZSBkZWZhdWx0CisgKiB2YWx1ZXMgYXJlOgorICogICBscHVhcnRDb25maWctPmJhdWRSYXRlX0JwcyA9IDExNTIwMFU7CisgKiAgIGxwdWFydENvbmZpZy0+cGFyaXR5TW9kZSA9IGtMUFVBUlRfUGFyaXR5RGlzYWJsZWQ7CisgKiAgIGxwdWFydENvbmZpZy0+ZGF0YUJpdHNDb3VudCA9IGtMUFVBUlRfRWlnaHREYXRhQml0czsKKyAqICAgbHB1YXJ0Q29uZmlnLT5pc01zYiA9IGZhbHNlOworICogICBscHVhcnRDb25maWctPnN0b3BCaXRDb3VudCA9IGtMUFVBUlRfT25lU3RvcEJpdDsKKyAqICAgbHB1YXJ0Q29uZmlnLT50eEZpZm9XYXRlcm1hcmsgPSAwOworICogICBscHVhcnRDb25maWctPnJ4Rmlmb1dhdGVybWFyayA9IDE7CisgKiAgIGxwdWFydENvbmZpZy0+ZW5hYmxlVHggPSBmYWxzZTsKKyAqICAgbHB1YXJ0Q29uZmlnLT5lbmFibGVSeCA9IGZhbHNlOworICoKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byBhIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIExQVUFSVF9HZXREZWZhdWx0Q29uZmlnKGxwdWFydF9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgTFBVQVJUIGluc3RhbmNlIGJhdWRyYXRlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgTFBVQVJUIG1vZHVsZSBiYXVkcmF0ZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHVwZGF0ZQorICogdGhlIExQVUFSVCBtb2R1bGUgYmF1ZHJhdGUgYWZ0ZXIgdGhlIExQVUFSVCBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIExQVUFSVF9Jbml0LgorICogQGNvZGUKKyAqICBMUFVBUlRfU2V0QmF1ZFJhdGUoTFBVQVJUMSwgMTE1MjAwVSwgMjAwMDAwMDBVKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGJhdWRSYXRlX0JwcyBMUFVBUlQgYmF1ZHJhdGUgdG8gYmUgc2V0LgorICogQHBhcmFtIHNyY0Nsb2NrX0h6IExQVUFSVCBjbG9jayBzb3VyY2UgZnJlcXVlbmN5IGluIEhaLgorICogQHJldHZhbCBrU3RhdHVzX0xQVUFSVF9CYXVkcmF0ZU5vdFN1cHBvcnQgQmF1ZHJhdGUgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBjbG9jayBzb3VyY2UuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTZXQgYmF1ZHJhdGUgc3VjY2VlZGVkLgorICovCitzdGF0dXNfdCBMUFVBUlRfU2V0QmF1ZFJhdGUoTFBVQVJUX1R5cGUgKmJhc2UsIHVpbnQzMl90IGJhdWRSYXRlX0JwcywgdWludDMyX3Qgc3JjQ2xvY2tfSHopOworCisvKiBAfSAqLworCisvKiEKKyAqIEBuYW1lIFN0YXR1cworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBHZXRzIExQVUFSVCBzdGF0dXMgZmxhZ3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIGFsbCBMUFVBUlQgc3RhdHVzIGZsYWdzLiBUaGUgZmxhZ3MgYXJlIHJldHVybmVkIGFzIHRoZSBsb2dpY2FsCisgKiBPUiB2YWx1ZSBvZiB0aGUgZW51bWVyYXRvcnMgQHJlZiBfbHB1YXJ0X2ZsYWdzLiBUbyBjaGVjayBmb3IgYSBzcGVjaWZpYyBzdGF0dXMsCisgKiBjb21wYXJlIHRoZSByZXR1cm4gdmFsdWUgd2l0aCBlbnVtZXJhdG9ycyBpbiB0aGUgQHJlZiBfbHB1YXJ0X2ZsYWdzLgorICogRm9yIGV4YW1wbGUsIHRvIGNoZWNrIHdoZXRoZXIgdGhlIFRYIGlzIGVtcHR5OgorICogQGNvZGUKKyAqICAgICBpZiAoa0xQVUFSVF9UeERhdGFSZWdFbXB0eUZsYWcgJiBMUFVBUlRfR2V0U3RhdHVzRmxhZ3MoTFBVQVJUMSkpCisgKiAgICAgeworICogICAgICAgICAuLi4KKyAqICAgICB9CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gTFBVQVJUIHN0YXR1cyBmbGFncyB3aGljaCBhcmUgT1JlZCBieSB0aGUgZW51bWVyYXRvcnMgaW4gdGhlIF9scHVhcnRfZmxhZ3MuCisgKi8KK3VpbnQzMl90IExQVUFSVF9HZXRTdGF0dXNGbGFncyhMUFVBUlRfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIENsZWFycyBzdGF0dXMgZmxhZ3Mgd2l0aCBhIHByb3ZpZGVkIG1hc2suCisgKgorICogVGhpcyBmdW5jdGlvbiBjbGVhcnMgTFBVQVJUIHN0YXR1cyBmbGFncyB3aXRoIGEgcHJvdmlkZWQgbWFzay4gQXV0b21hdGljYWxseSBjbGVhcmVkIGZsYWdzCisgKiBjYW4ndCBiZSBjbGVhcmVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKiBGbGFncyB0aGF0IGNhbiBvbmx5IGNsZWFyZWQgb3Igc2V0IGJ5IGhhcmR3YXJlIGFyZToKKyAqICAgIGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlGbGFnLCBrTFBVQVJUX1RyYW5zbWlzc2lvbkNvbXBsZXRlRmxhZywga0xQVUFSVF9SeERhdGFSZWdGdWxsRmxhZywKKyAqICAgIGtMUFVBUlRfUnhBY3RpdmVGbGFnLCBrTFBVQVJUX05vaXNlRXJyb3JJblJ4RGF0YVJlZ0ZsYWcsIGtMUFVBUlRfUGFyaXR5RXJyb3JJblJ4RGF0YVJlZ0ZsYWcsCisgKiAgICBrTFBVQVJUX1R4Rmlmb0VtcHR5RmxhZyxrTFBVQVJUX1J4Rmlmb0VtcHR5RmxhZworICogTm90ZTogVGhpcyBBUEkgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBUeC9SeCBpcyBpZGxlLCBvdGhlcndpc2UgaXQgdGFrZXMgbm8gZWZmZWN0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayB0aGUgc3RhdHVzIGZsYWdzIHRvIGJlIGNsZWFyZWQuIFRoZSB1c2VyIGNhbiB1c2UgdGhlIGVudW1lcmF0b3JzIGluIHRoZQorICogIF9scHVhcnRfc3RhdHVzX2ZsYWdfdCB0byBkbyB0aGUgT1Igb3BlcmF0aW9uIGFuZCBnZXQgdGhlIG1hc2suCisgKiBAcmV0dXJuIDAgc3VjY2VlZCwgb3RoZXJzIGZhaWxlZC4KKyAqIEByZXR2YWwga1N0YXR1c19MUFVBUlRfRmxhZ0Nhbm5vdENsZWFyTWFudWFsbHkgVGhlIGZsYWcgY2FuJ3QgYmUgY2xlYXJlZCBieSB0aGlzIGZ1bmN0aW9uIGJ1dAorICogICAgICAgICBpdCBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYnkgaGFyZHdhcmUuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTdGF0dXMgaW4gdGhlIG1hc2sgYXJlIGNsZWFyZWQuCisgKi8KK3N0YXR1c190IExQVUFSVF9DbGVhclN0YXR1c0ZsYWdzKExQVUFSVF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyogQH0gKi8KKworLyohCisgKiBAbmFtZSBJbnRlcnJ1cHRzCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgTFBVQVJUIGludGVycnVwdHMgYWNjb3JkaW5nIHRvIGEgcHJvdmlkZWQgbWFzay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIExQVUFSVCBpbnRlcnJ1cHRzIGFjY29yZGluZyB0byBhIHByb3ZpZGVkIG1hc2suIFRoZSBtYXNrCisgKiBpcyBhIGxvZ2ljYWwgT1Igb2YgZW51bWVyYXRpb24gbWVtYmVycy4gU2VlIHRoZSBAcmVmIF9scHVhcnRfaW50ZXJydXB0X2VuYWJsZS4KKyAqIFRoaXMgZXhhbXBsZXMgc2hvd3MgaG93IHRvIGVuYWJsZSBUWCBlbXB0eSBpbnRlcnJ1cHQgYW5kIFJYIGZ1bGwgaW50ZXJydXB0OgorICogQGNvZGUKKyAqICAgICBMUFVBUlRfRW5hYmxlSW50ZXJydXB0cyhMUFVBUlQxLGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlJbnRlcnJ1cHRFbmFibGUgfCBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxJbnRlcnJ1cHRFbmFibGUpOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0cyB0byBlbmFibGUuIExvZ2ljYWwgT1Igb2YgQHJlZiBfdWFydF9pbnRlcnJ1cHRfZW5hYmxlLgorICovCit2b2lkIExQVUFSVF9FbmFibGVJbnRlcnJ1cHRzKExQVUFSVF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgIExQVUFSVCBpbnRlcnJ1cHRzIGFjY29yZGluZyB0byBhIHByb3ZpZGVkIG1hc2suCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgTFBVQVJUIGludGVycnVwdHMgYWNjb3JkaW5nIHRvIGEgcHJvdmlkZWQgbWFzay4gVGhlIG1hc2sKKyAqIGlzIGEgbG9naWNhbCBPUiBvZiBlbnVtZXJhdGlvbiBtZW1iZXJzLiBTZWUgQHJlZiBfbHB1YXJ0X2ludGVycnVwdF9lbmFibGUuCisgKiBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIGRpc2FibGUgdGhlIFRYIGVtcHR5IGludGVycnVwdCBhbmQgUlggZnVsbCBpbnRlcnJ1cHQ6CisgKiBAY29kZQorICogICAgIExQVUFSVF9EaXNhYmxlSW50ZXJydXB0cyhMUFVBUlQxLGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlJbnRlcnJ1cHRFbmFibGUgfCBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxJbnRlcnJ1cHRFbmFibGUpOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0cyB0byBkaXNhYmxlLiBMb2dpY2FsIE9SIG9mIEByZWYgX2xwdWFydF9pbnRlcnJ1cHRfZW5hYmxlLgorICovCit2b2lkIExQVUFSVF9EaXNhYmxlSW50ZXJydXB0cyhMUFVBUlRfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzayk7CisKKy8qIQorICogQGJyaWVmIEdldHMgZW5hYmxlZCBMUFVBUlQgaW50ZXJydXB0cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGVuYWJsZWQgTFBVQVJUIGludGVycnVwdHMuIFRoZSBlbmFibGVkIGludGVycnVwdHMgYXJlIHJldHVybmVkCisgKiBhcyB0aGUgbG9naWNhbCBPUiB2YWx1ZSBvZiB0aGUgZW51bWVyYXRvcnMgQHJlZiBfbHB1YXJ0X2ludGVycnVwdF9lbmFibGUuIFRvIGNoZWNrCisgKiBhIHNwZWNpZmljIGludGVycnVwdCBlbmFibGUgc3RhdHVzLCBjb21wYXJlIHRoZSByZXR1cm4gdmFsdWUgd2l0aCBlbnVtZXJhdG9ycworICogaW4gQHJlZiBfbHB1YXJ0X2ludGVycnVwdF9lbmFibGUuCisgKiBGb3IgZXhhbXBsZSwgdG8gY2hlY2sgd2hldGhlciB0aGUgVFggZW1wdHkgaW50ZXJydXB0IGlzIGVuYWJsZWQ6CisgKiBAY29kZQorICogICAgIHVpbnQzMl90IGVuYWJsZWRJbnRlcnJ1cHRzID0gTFBVQVJUX0dldEVuYWJsZWRJbnRlcnJ1cHRzKExQVUFSVDEpOworICoKKyAqICAgICBpZiAoa0xQVUFSVF9UeERhdGFSZWdFbXB0eUludGVycnVwdEVuYWJsZSAmIGVuYWJsZWRJbnRlcnJ1cHRzKQorICogICAgIHsKKyAqICAgICAgICAgLi4uCisgKiAgICAgfQorICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIExQVUFSVCBpbnRlcnJ1cHQgZmxhZ3Mgd2hpY2ggYXJlIGxvZ2ljYWwgT1Igb2YgdGhlIGVudW1lcmF0b3JzIGluIEByZWYgX2xwdWFydF9pbnRlcnJ1cHRfZW5hYmxlLgorICovCit1aW50MzJfdCBMUFVBUlRfR2V0RW5hYmxlZEludGVycnVwdHMoTFBVQVJUX1R5cGUgKmJhc2UpOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0RNQV9FTkFCTEUpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRE1BX0VOQUJMRQorLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgTFBVQVJUIGRhdGEgcmVnaXN0ZXIgYWRkcmVzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIExQVUFSVCBkYXRhIHJlZ2lzdGVyIGFkZHJlc3MsIHdoaWNoIGlzIG1haW5seSB1c2VkIGJ5IHRoZSBETUEvZURNQS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIExQVUFSVCBkYXRhIHJlZ2lzdGVyIGFkZHJlc3NlcyB3aGljaCBhcmUgdXNlZCBib3RoIGJ5IHRoZSB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgTFBVQVJUX0dldERhdGFSZWdpc3RlckFkZHJlc3MoTFBVQVJUX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuICh1aW50MzJfdCkgJiAoYmFzZS0+REFUQSk7Cit9CisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIExQVUFSVCB0cmFuc21pdHRlciBETUEgcmVxdWVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRyYW5zbWl0IGRhdGEgcmVnaXN0ZXIgZW1wdHkgZmxhZywgU1RBVFtURFJFXSwgdG8gZ2VuZXJhdGUgRE1BIHJlcXVlc3RzLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgVHJ1ZSB0byBlbmFibGUsIGZhbHNlIHRvIGRpc2FibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMUFVBUlRfRW5hYmxlVHhETUEoTFBVQVJUX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5CQVVEIHw9IExQVUFSVF9CQVVEX1RETUFFX01BU0s7CisgICAgICAgIGJhc2UtPkNUUkwgfD0gTFBVQVJUX0NUUkxfVElFX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkJBVUQgJj0gfkxQVUFSVF9CQVVEX1RETUFFX01BU0s7CisgICAgICAgIGJhc2UtPkNUUkwgJj0gfkxQVUFSVF9DVFJMX1RJRV9NQVNLOworICAgIH0KK30KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgTFBVQVJUIHJlY2VpdmVyIERNQS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHJlY2VpdmVyIGRhdGEgcmVnaXN0ZXIgZnVsbCBmbGFnLCBTVEFUW1JEUkZdLCB0byBnZW5lcmF0ZSBETUEgcmVxdWVzdHMuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZSBUcnVlIHRvIGVuYWJsZSwgZmFsc2UgdG8gZGlzYWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIExQVUFSVF9FbmFibGVSeERNQShMUFVBUlRfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkJBVUQgfD0gTFBVQVJUX0JBVURfUkRNQUVfTUFTSzsKKyAgICAgICAgYmFzZS0+Q1RSTCB8PSBMUFVBUlRfQ1RSTF9SSUVfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+QkFVRCAmPSB+TFBVQVJUX0JBVURfUkRNQUVfTUFTSzsKKyAgICAgICAgYmFzZS0+Q1RSTCAmPSB+TFBVQVJUX0NUUkxfUklFX01BU0s7CisgICAgfQorfQorCisvKiBAfSAqLworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRE1BX0VOQUJMRSAqLworCisvKiEKKyAqIEBuYW1lIEJ1cyBPcGVyYXRpb25zCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIExQVUFSVCB0cmFuc21pdHRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIExQVUFSVCB0cmFuc21pdHRlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZW5hYmxlIFRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgTFBVQVJUX0VuYWJsZVR4KExQVUFSVF9UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+Q1RSTCB8PSBMUFVBUlRfQ1RSTF9URV9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5DVFJMICY9IH5MUFVBUlRfQ1RSTF9URV9NQVNLOworICAgIH0KK30KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgTFBVQVJUIHJlY2VpdmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgTFBVQVJUIHJlY2VpdmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgVHJ1ZSB0byBlbmFibGUsIGZhbHNlIHRvIGRpc2FibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMUFVBUlRfRW5hYmxlUngoTFBVQVJUX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5DVFJMIHw9IExQVUFSVF9DVFJMX1JFX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkNUUkwgJj0gfkxQVUFSVF9DVFJMX1JFX01BU0s7CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBXcml0ZXMgdG8gdGhlIHRyYW5zbWl0dGVyIHJlZ2lzdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGRhdGEgdG8gdGhlIHRyYW5zbWl0dGVyIHJlZ2lzdGVyIGRpcmVjdGx5LiBUaGUgdXBwZXIgbGF5ZXIgbXVzdAorICogZW5zdXJlIHRoYXQgdGhlIFRYIHJlZ2lzdGVyIGlzIGVtcHR5IG9yIHRoYXQgdGhlIFRYIEZJRk8gaGFzIHJvb20gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZGF0YSBEYXRhIHdyaXRlIHRvIHRoZSBUWCByZWdpc3Rlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIExQVUFSVF9Xcml0ZUJ5dGUoTFBVQVJUX1R5cGUgKmJhc2UsIHVpbnQ4X3QgZGF0YSkKK3sKKyAgICBiYXNlLT5EQVRBID0gZGF0YTsKK30KKworLyohCisgKiBAYnJpZWYgUmVhZHMgdGhlIHJlY2VpdmVyIHJlZ2lzdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgZGF0YSBmcm9tIHRoZSByZWNlaXZlciByZWdpc3RlciBkaXJlY3RseS4gVGhlIHVwcGVyIGxheWVyIG11c3QKKyAqIGVuc3VyZSB0aGF0IHRoZSByZWNlaXZlciByZWdpc3RlciBpcyBmdWxsIG9yIHRoYXQgdGhlIFJYIEZJRk8gaGFzIGRhdGEgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIERhdGEgcmVhZCBmcm9tIGRhdGEgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBMUFVBUlRfUmVhZEJ5dGUoTFBVQVJUX1R5cGUgKmJhc2UpCit7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUCisgICAgdWludDMyX3QgY3RybCA9IGJhc2UtPkNUUkw7CisgICAgYm9vbCBpc1NldmVuRGF0YUJpdHMgPQorICAgICAgICAoKGN0cmwgJiBMUFVBUlRfQ1RSTF9NN19NQVNLKSB8fAorICAgICAgICAgKCghKGN0cmwgJiBMUFVBUlRfQ1RSTF9NN19NQVNLKSkgJiYgKCEoY3RybCAmIExQVUFSVF9DVFJMX01fTUFTSykpICYmIChjdHJsICYgTFBVQVJUX0NUUkxfUEVfTUFTSykpKTsKKworICAgIGlmIChpc1NldmVuRGF0YUJpdHMpCisgICAgeworICAgICAgICByZXR1cm4gKGJhc2UtPkRBVEEgJiAweDdGKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2UtPkRBVEE7CisgICAgfQorI2Vsc2UKKyAgICByZXR1cm4gYmFzZS0+REFUQTsKKyNlbmRpZgorfQorCisvKiEKKyAqIEBicmllZiBXcml0ZXMgdG8gdGhlIHRyYW5zbWl0dGVyIHJlZ2lzdGVyIHVzaW5nIGEgYmxvY2tpbmcgbWV0aG9kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcG9sbHMgdGhlIHRyYW5zbWl0dGVyIHJlZ2lzdGVyLCB3YWl0cyBmb3IgdGhlIHJlZ2lzdGVyIHRvIGJlIGVtcHR5IG9yICBmb3IgVFggRklGTyB0byBoYXZlCisgKiByb29tLCBhbmQgd3JpdGVzIGRhdGEgdG8gdGhlIHRyYW5zbWl0dGVyIGJ1ZmZlci4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgYWxsIGRhdGEgaGFzIGJlZW4gc2VudCBvdXQgdG8gdGhlIGJ1cy4KKyAqIEJlZm9yZSBkaXNhYmxpbmcgdGhlIHRyYW5zbWl0dGVyLCBjaGVjayB0aGUga0xQVUFSVF9UcmFuc21pc3Npb25Db21wbGV0ZUZsYWcgdG8gZW5zdXJlIHRoYXQgdGhlIHRyYW5zbWl0IGlzCisgKiBmaW5pc2hlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZGF0YSBTdGFydCBhZGRyZXNzIG9mIHRoZSBkYXRhIHRvIHdyaXRlLgorICogQHBhcmFtIGxlbmd0aCBTaXplIG9mIHRoZSBkYXRhIHRvIHdyaXRlLgorICovCit2b2lkIExQVUFSVF9Xcml0ZUJsb2NraW5nKExQVUFSVF9UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKworLyohCisqIEBicmllZiBSZWFkcyB0aGUgcmVjZWl2ZXIgZGF0YSByZWdpc3RlciB1c2luZyBhIGJsb2NraW5nIG1ldGhvZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBvbGxzIHRoZSByZWNlaXZlciByZWdpc3Rlciwgd2FpdHMgZm9yIHRoZSByZWNlaXZlciByZWdpc3RlciBmdWxsIG9yIHJlY2VpdmVyIEZJRk8KKyAqIGhhcyBkYXRhLCBhbmQgcmVhZHMgZGF0YSBmcm9tIHRoZSBUWCByZWdpc3Rlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZGF0YSBTdGFydCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gc3RvcmUgdGhlIHJlY2VpdmVkIGRhdGEuCisgKiBAcGFyYW0gbGVuZ3RoIFNpemUgb2YgdGhlIGJ1ZmZlci4KKyAqIEByZXR2YWwga1N0YXR1c19MUFVBUlRfUnhIYXJkd2FyZU92ZXJydW4gUmVjZWl2ZXIgb3ZlcnJ1biBoYXBwZW5lZCB3aGlsZSByZWNlaXZpbmcgZGF0YS4KKyAqIEByZXR2YWwga1N0YXR1c19MUFVBUlRfTm9pc2VFcnJvciBOb2lzZSBlcnJvciBoYXBwZW5lZCB3aGlsZSByZWNlaXZpbmcgZGF0YS4KKyAqIEByZXR2YWwga1N0YXR1c19MUFVBUlRfRnJhbWluZ0Vycm9yIEZyYW1pbmcgZXJyb3IgaGFwcGVuZWQgd2hpbGUgcmVjZWl2aW5nIGRhdGEuCisgKiBAcmV0dmFsIGtTdGF0dXNfTFBVQVJUX1Bhcml0eUVycm9yIFBhcml0eSBlcnJvciBoYXBwZW5lZCB3aGlsZSByZWNlaXZpbmcgZGF0YS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhbGwgZGF0YS4KKyAqLworc3RhdHVzX3QgTFBVQVJUX1JlYWRCbG9ja2luZyhMUFVBUlRfVHlwZSAqYmFzZSwgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisKKy8qIEB9ICovCisKKy8qIQorICogQG5hbWUgVHJhbnNhY3Rpb25hbAorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgTFBVQVJUIGhhbmRsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBMUFVBUlQgaGFuZGxlLCB3aGljaCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIgTFBVQVJUCisgKiB0cmFuc2FjdGlvbmFsIEFQSXMuIFVzdWFsbHksIGZvciBhIHNwZWNpZmllZCBMUFVBUlQgaW5zdGFuY2UsCisgKiBjYWxsIHRoaXMgQVBJIG9uY2UgdG8gZ2V0IHRoZSBpbml0aWFsaXplZCBoYW5kbGUuCisgKgorICogVGhlIExQVUFSVCBkcml2ZXIgc3VwcG9ydHMgdGhlICJiYWNrZ3JvdW5kIiByZWNlaXZpbmcsIHdoaWNoIG1lYW5zIHRoYXQgdXNlciBjYW4gc2V0IHVwCisgKiBhbiBSWCByaW5nIGJ1ZmZlciBvcHRpb25hbGx5LiBEYXRhIHJlY2VpdmVkIGlzIHN0b3JlZCBpbnRvIHRoZSByaW5nIGJ1ZmZlciBldmVuIHdoZW4gdGhlCisgKiB1c2VyIGRvZXNuJ3QgY2FsbCB0aGUgTFBVQVJUX1RyYW5zZmVyUmVjZWl2ZU5vbkJsb2NraW5nKCkgQVBJLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGRhdGEgcmVjZWl2ZWQKKyAqIGluIHRoZSByaW5nIGJ1ZmZlciwgdGhlIHVzZXIgY2FuIGdldCB0aGUgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSByaW5nIGJ1ZmZlciBkaXJlY3RseS4KKyAqIFRoZSByaW5nIGJ1ZmZlciBpcyBkaXNhYmxlZCBpZiBwYXNzaW5nIE5VTEwgYXMgQHAgcmluZ0J1ZmZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIExQVUFSVCBoYW5kbGUgcG9pbnRlci4KKyAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbi4KKyAqIEBwYXJhbSB1c2VyRGF0YSBVc2VyIGRhdGEuCisgKi8KK3ZvaWQgTFBVQVJUX1RyYW5zZmVyQ3JlYXRlSGFuZGxlKExQVUFSVF9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKTsKKy8qIQorICogQGJyaWVmIFRyYW5zbWl0cyBhIGJ1ZmZlciBvZiBkYXRhIHVzaW5nIHRoZSBpbnRlcnJ1cHQgbWV0aG9kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZCBkYXRhIHVzaW5nIGFuIGludGVycnVwdCBtZXRob2QuIFRoaXMgaXMgYSBub24tYmxvY2tpbmcgZnVuY3Rpb24sIHdoaWNoCisgKiByZXR1cm5zIGRpcmVjdGx5IHdpdGhvdXQgd2FpdGluZyBmb3IgYWxsIGRhdGEgd3JpdHRlbiB0byB0aGUgdHJhbnNtaXR0ZXIgcmVnaXN0ZXIuIFdoZW4KKyAqIGFsbCBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIFRYIHJlZ2lzdGVyIGluIHRoZSBJU1IsIHRoZSBMUFVBUlQgZHJpdmVyIGNhbGxzIHRoZSBjYWxsYmFjaworICogZnVuY3Rpb24gYW5kIHBhc3NlcyB0aGUgQHJlZiBrU3RhdHVzX0xQVUFSVF9UeElkbGUgYXMgc3RhdHVzIHBhcmFtZXRlci4KKyAqCisgKiBAbm90ZSBUaGUga1N0YXR1c19MUFVBUlRfVHhJZGxlIGlzIHBhc3NlZCB0byB0aGUgdXBwZXIgbGF5ZXIgd2hlbiBhbGwgZGF0YSBhcmUgd3JpdHRlbgorICogdG8gdGhlIFRYIHJlZ2lzdGVyLiBIb3dldmVyLCB0aGVyZSBpcyBubyBjaGVjayB0byBlbnN1cmUgdGhhdCBhbGwgdGhlIGRhdGEgc2VudCBvdXQuIEJlZm9yZSBkaXNhYmxpbmcgdGhlIFRYLAorICogY2hlY2sgdGhlIGtMUFVBUlRfVHJhbnNtaXNzaW9uQ29tcGxldGVGbGFnIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc21pdCBpcyBmaW5pc2hlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIExQVUFSVCBoYW5kbGUgcG9pbnRlci4KKyAqIEBwYXJhbSB4ZmVyIExQVUFSVCB0cmFuc2ZlciBzdHJ1Y3R1cmUsIHNlZSAjbHB1YXJ0X3RyYW5zZmVyX3QuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTdWNjZXNzZnVsbHkgc3RhcnQgdGhlIGRhdGEgdHJhbnNtaXNzaW9uLgorICogQHJldHZhbCBrU3RhdHVzX0xQVUFSVF9UeEJ1c3kgUHJldmlvdXMgdHJhbnNtaXNzaW9uIHN0aWxsIG5vdCBmaW5pc2hlZCwgZGF0YSBub3QgYWxsIHdyaXR0ZW4gdG8gdGhlIFRYIHJlZ2lzdGVyLgorICogQHJldHZhbCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCBJbnZhbGlkIGFyZ3VtZW50LgorICovCitzdGF0dXNfdCBMUFVBUlRfVHJhbnNmZXJTZW5kTm9uQmxvY2tpbmcoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlLCBscHVhcnRfdHJhbnNmZXJfdCAqeGZlcik7CisKKy8qIQorICogQGJyaWVmIFNldHMgdXAgdGhlIFJYIHJpbmcgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgUlggcmluZyBidWZmZXIgdG8gYSBzcGVjaWZpYyBVQVJUIGhhbmRsZS4KKyAqCisgKiBXaGVuIHRoZSBSWCByaW5nIGJ1ZmZlciBpcyB1c2VkLCBkYXRhIHJlY2VpdmVkIGlzIHN0b3JlZCBpbnRvIHRoZSByaW5nIGJ1ZmZlciBldmVuIHdoZW4KKyAqIHRoZSB1c2VyIGRvZXNuJ3QgY2FsbCB0aGUgVUFSVF9UcmFuc2ZlclJlY2VpdmVOb25CbG9ja2luZygpIEFQSS4gSWYgdGhlcmUgaXMgYWxyZWFkeSBkYXRhIHJlY2VpdmVkCisgKiBpbiB0aGUgcmluZyBidWZmZXIsIHRoZSB1c2VyIGNhbiBnZXQgdGhlIHJlY2VpdmVkIGRhdGEgZnJvbSB0aGUgcmluZyBidWZmZXIgZGlyZWN0bHkuCisgKgorICogQG5vdGUgV2hlbiB1c2luZyBSWCByaW5nIGJ1ZmZlciwgb25lIGJ5dGUgaXMgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZS4gSW4gb3RoZXIKKyAqIHdvcmRzLCBpZiBAcCByaW5nQnVmZmVyU2l6ZSBpcyAzMiwgdGhlbiBvbmx5IDMxIGJ5dGVzIGFyZSB1c2VkIGZvciBzYXZpbmcgZGF0YS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIExQVUFSVCBoYW5kbGUgcG9pbnRlci4KKyAqIEBwYXJhbSByaW5nQnVmZmVyIFN0YXJ0IGFkZHJlc3Mgb2YgcmluZyBidWZmZXIgZm9yIGJhY2tncm91bmQgcmVjZWl2aW5nLiBQYXNzIE5VTEwgdG8gZGlzYWJsZSB0aGUgcmluZyBidWZmZXIuCisgKiBAcGFyYW0gcmluZ0J1ZmZlclNpemUgc2l6ZSBvZiB0aGUgcmluZyBidWZmZXIuCisgKi8KK3ZvaWQgTFBVQVJUX1RyYW5zZmVyU3RhcnRSaW5nQnVmZmVyKExQVUFSVF9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyaW5nQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJpbmdCdWZmZXJTaXplKTsKKworLyohCisgKiBAYnJpZWYgQWJvcnRzIHRoZSBiYWNrZ3JvdW5kIHRyYW5zZmVyIGFuZCB1bmluc3RhbGxzIHRoZSByaW5nIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFib3J0cyB0aGUgYmFja2dyb3VuZCB0cmFuc2ZlciBhbmQgdW5pbnN0YWxscyB0aGUgcmluZyBidWZmZXIuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBMUFVBUlQgaGFuZGxlIHBvaW50ZXIuCisgKi8KK3ZvaWQgTFBVQVJUX1RyYW5zZmVyU3RvcFJpbmdCdWZmZXIoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgQWJvcnRzIHRoZSBpbnRlcnJ1cHQtZHJpdmVuIGRhdGEgdHJhbnNtaXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBhYm9ydHMgdGhlIGludGVycnVwdCBkcml2ZW4gZGF0YSBzZW5kaW5nLiBUaGUgdXNlciBjYW4gZ2V0IHRoZSByZW1haW5CdHllcyB0byBmaW5kIG91dAorICogaG93IG1hbnkgYnl0ZXMgYXJlIG5vdCBzZW50IG91dC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIExQVUFSVCBoYW5kbGUgcG9pbnRlci4KKyAqLwordm9pZCBMUFVBUlRfVHJhbnNmZXJBYm9ydFNlbmQoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdGhlIExQVUFSVCB0cmFuc21pdHRlciByZWdpc3Rlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiB3cml0dGVuIHRvIExQVUFSVCBUWAorICogcmVnaXN0ZXIgYnkgYW4gaW50ZXJydXB0IG1ldGhvZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIExQVUFSVCBoYW5kbGUgcG9pbnRlci4KKyAqIEBwYXJhbSBjb3VudCBTZW5kIGJ5dGVzIGNvdW50LgorICogQHJldHZhbCBrU3RhdHVzX05vVHJhbnNmZXJJblByb2dyZXNzIE5vIHNlbmQgaW4gcHJvZ3Jlc3MuCisgKiBAcmV0dmFsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50IFBhcmFtZXRlciBpcyBpbnZhbGlkLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgR2V0IHN1Y2Nlc3NmdWxseSB0aHJvdWdoIHRoZSBwYXJhbWV0ZXIgXHAgY291bnQ7CisgKi8KK3N0YXR1c190IExQVUFSVF9UcmFuc2ZlckdldFNlbmRDb3VudChMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUsIHVpbnQzMl90ICpjb3VudCk7CisKKy8qIQorICogQGJyaWVmIFJlY2VpdmVzIGEgYnVmZmVyIG9mIGRhdGEgdXNpbmcgdGhlIGludGVycnVwdCBtZXRob2QuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWNlaXZlcyBkYXRhIHVzaW5nIGFuIGludGVycnVwdCBtZXRob2QuIFRoaXMgaXMgYSBub24tYmxvY2tpbmcgZnVuY3Rpb24KKyAqIHdoaWNoIHJldHVybnMgd2l0aG91dCB3YWl0aW5nIHRvIGVuc3VyZSB0aGF0IGFsbCBkYXRhIGFyZSByZWNlaXZlZC4KKyAqIElmIHRoZSBSWCByaW5nIGJ1ZmZlciBpcyB1c2VkIGFuZCBub3QgZW1wdHksIHRoZSBkYXRhIGluIHRoZSByaW5nIGJ1ZmZlciBpcyBjb3BpZWQgYW5kCisgKiB0aGUgcGFyYW1ldGVyIEBwIHJlY2VpdmVkQnl0ZXMgc2hvd3MgaG93IG1hbnkgYnl0ZXMgYXJlIGNvcGllZCBmcm9tIHRoZSByaW5nIGJ1ZmZlci4KKyAqIEFmdGVyIGNvcHlpbmcsIGlmIHRoZSBkYXRhIGluIHRoZSByaW5nIGJ1ZmZlciBpcyBub3QgZW5vdWdoIGZvciByZWFkLCB0aGUgcmVjZWl2ZQorICogcmVxdWVzdCBpcyBzYXZlZCBieSB0aGUgTFBVQVJUIGRyaXZlci4gV2hlbiB0aGUgbmV3IGRhdGEgYXJyaXZlcywgdGhlIHJlY2VpdmUgcmVxdWVzdAorICogaXMgc2VydmljZWQgZmlyc3QuIFdoZW4gYWxsIGRhdGEgaXMgcmVjZWl2ZWQsIHRoZSBMUFVBUlQgZHJpdmVyIG5vdGlmaWVzIHRoZSB1cHBlciBsYXllcgorICogdGhyb3VnaCBhIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBwYXNzZXMgYSBzdGF0dXMgcGFyYW1ldGVyIEByZWYga1N0YXR1c19VQVJUX1J4SWRsZS4KKyAqIEZvciBleGFtcGxlLCB0aGUgdXBwZXIgbGF5ZXIgbmVlZHMgMTAgYnl0ZXMgYnV0IHRoZXJlIGFyZSBvbmx5IDUgYnl0ZXMgaW4gcmluZyBidWZmZXIuCisgKiBUaGUgNSBieXRlcyBhcmUgY29waWVkIHRvIHhmZXItPmRhdGEsIHdoaWNoIHJldHVybnMgd2l0aCB0aGUKKyAqIHBhcmFtZXRlciBAcCByZWNlaXZlZEJ5dGVzIHNldCB0byA1LiBGb3IgdGhlIHJlbWFpbmluZyA1IGJ5dGVzLCB0aGUgbmV3bHkgYXJyaXZlZCBkYXRhIGlzCisgKiBzYXZlZCBmcm9tIHhmZXItPmRhdGFbNV0uIFdoZW4gNSBieXRlcyBhcmUgcmVjZWl2ZWQsIHRoZSBMUFVBUlQgZHJpdmVyIG5vdGlmaWVzIHRoZSB1cHBlciBsYXllci4KKyAqIElmIHRoZSBSWCByaW5nIGJ1ZmZlciBpcyBub3QgZW5hYmxlZCwgdGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBSWCBhbmQgUlggaW50ZXJydXB0CisgKiB0byByZWNlaXZlIGRhdGEgdG8geGZlci0+ZGF0YS4gV2hlbiBhbGwgZGF0YSBpcyByZWNlaXZlZCwgdGhlIHVwcGVyIGxheWVyIGlzIG5vdGlmaWVkLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIHhmZXIgTFBVQVJUIHRyYW5zZmVyIHN0cnVjdHVyZSwgc2VlICN1YXJ0X3RyYW5zZmVyX3QuCisgKiBAcGFyYW0gcmVjZWl2ZWRCeXRlcyBCeXRlcyByZWNlaXZlZCBmcm9tIHRoZSByaW5nIGJ1ZmZlciBkaXJlY3RseS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN1Y2Nlc3NmdWxseSBxdWV1ZSB0aGUgdHJhbnNmZXIgaW50byB0aGUgdHJhbnNtaXQgcXVldWUuCisgKiBAcmV0dmFsIGtTdGF0dXNfTFBVQVJUX1J4QnVzeSBQcmV2aW91cyByZWNlaXZlIHJlcXVlc3QgaXMgbm90IGZpbmlzaGVkLgorICogQHJldHZhbCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCBJbnZhbGlkIGFyZ3VtZW50LgorICovCitzdGF0dXNfdCBMUFVBUlRfVHJhbnNmZXJSZWNlaXZlTm9uQmxvY2tpbmcoTFBVQVJUX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X3RyYW5zZmVyX3QgKnhmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpyZWNlaXZlZEJ5dGVzKTsKKworLyohCisgKiBAYnJpZWYgQWJvcnRzIHRoZSBpbnRlcnJ1cHQtZHJpdmVuIGRhdGEgcmVjZWl2aW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWJvcnRzIHRoZSBpbnRlcnJ1cHQtZHJpdmVuIGRhdGEgcmVjZWl2aW5nLiBUaGUgdXNlciBjYW4gZ2V0IHRoZSByZW1haW5CeXRlcyB0byBmaW5kIG91dAorICogaG93IG1hbnkgYnl0ZXMgbm90IHJlY2VpdmVkIHlldC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIExQVUFSVCBoYW5kbGUgcG9pbnRlci4KKyAqLwordm9pZCBMUFVBUlRfVHJhbnNmZXJBYm9ydFJlY2VpdmUoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIGNvdW50IFJlY2VpdmUgYnl0ZXMgY291bnQuCisgKiBAcmV0dmFsIGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3MgTm8gcmVjZWl2ZSBpbiBwcm9ncmVzcy4KKyAqIEByZXR2YWwga1N0YXR1c19JbnZhbGlkQXJndW1lbnQgUGFyYW1ldGVyIGlzIGludmFsaWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBHZXQgc3VjY2Vzc2Z1bGx5IHRocm91Z2ggdGhlIHBhcmFtZXRlciBccCBjb3VudDsKKyAqLworc3RhdHVzX3QgTFBVQVJUX1RyYW5zZmVyR2V0UmVjZWl2ZUNvdW50KExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSwgdWludDMyX3QgKmNvdW50KTsKKworLyohCisgKiBAYnJpZWYgTFBVQVJUIElSUSBoYW5kbGUgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBMUFVBUlQgdHJhbnNtaXQgYW5kIHJlY2VpdmUgSVJRIHJlcXVlc3QuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBMUFVBUlQgaGFuZGxlIHBvaW50ZXIuCisgKi8KK3ZvaWQgTFBVQVJUX1RyYW5zZmVySGFuZGxlSVJRKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIExQVUFSVCBFcnJvciBJUlEgaGFuZGxlIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgTFBVQVJUIGVycm9yIElSUSByZXF1ZXN0LgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICovCit2b2lkIExQVUFSVF9UcmFuc2ZlckhhbmRsZUVycm9ySVJRKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIEB9ICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRlNMX0xQVUFSVF9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0X2VkbWEuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydF9lZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRkYTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydF9lZG1hLmMKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2xwdWFydF9lZG1hLmgiCisjaW5jbHVkZSAiZnNsX2RtYW11eC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qPCEgU3RydWN0dXJlIGRlZmluaXRpb24gZm9yIGxwdWFydF9lZG1hX3ByaXZhdGVfaGFuZGxlX3QuIFRoZSBzdHJ1Y3R1cmUgaXMgcHJpdmF0ZS4gKi8KK3R5cGVkZWYgc3RydWN0IF9scHVhcnRfZWRtYV9wcml2YXRlX2hhbmRsZQoreworICAgIExQVUFSVF9UeXBlICpiYXNlOworICAgIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGU7Cit9IGxwdWFydF9lZG1hX3ByaXZhdGVfaGFuZGxlX3Q7CisKKy8qIExQVUFSVCBFRE1BIHRyYW5zZmVyIGhhbmRsZS4gKi8KK2VudW0gX2xwdWFydF9lZG1hX3RhbnNmZXJfc3RhdGVzCit7CisgICAga0xQVUFSVF9UeElkbGUsIC8qIFRYIGlkbGUuICovCisgICAga0xQVUFSVF9UeEJ1c3ksIC8qIFRYIGJ1c3kuICovCisgICAga0xQVUFSVF9SeElkbGUsIC8qIFJYIGlkbGUuICovCisgICAga0xQVUFSVF9SeEJ1c3kgIC8qIFJYIGJ1c3kuICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qPCEgUHJpdmF0ZSBoYW5kbGUgb25seSB1c2VkIGZvciBpbnRlcm5hbGx5LiAqLworc3RhdGljIGxwdWFydF9lZG1hX3ByaXZhdGVfaGFuZGxlX3Qgc19lZG1hUHJpdmF0ZUhhbmRsZVtGU0xfRkVBVFVSRV9TT0NfTFBVQVJUX0NPVU5UXTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIExQVUFSVCBFRE1BIHNlbmQgZmluaXNoZWQgY2FsbGJhY2sgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBMUFVBUlQgRURNQSBzZW5kIGZpbmlzaGVkLiBJdCBkaXNhYmxlcyB0aGUgTFBVQVJUCisgKiBUWCBFRE1BIHJlcXVlc3QgYW5kIHNlbmRzIEByZWYga1N0YXR1c19MUFVBUlRfVHhJZGxlIHRvIExQVUFSVCBjYWxsYmFjay4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIFRoZSBFRE1BIGhhbmRsZS4KKyAqIEBwYXJhbSBwYXJhbSBDYWxsYmFjayBmdW5jdGlvbiBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIExQVUFSVF9TZW5kRURNQUNhbGxiYWNrKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqcGFyYW0sIGJvb2wgdHJhbnNmZXJEb25lLCB1aW50MzJfdCB0Y2RzKTsKKworLyohCisgKiBAYnJpZWYgTFBVQVJUIEVETUEgcmVjZWl2ZSBmaW5pc2hlZCBjYWxsYmFjayBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIExQVUFSVCBFRE1BIHJlY2VpdmUgZmluaXNoZWQuIEl0IGRpc2FibGVzIHRoZSBMUFVBUlQKKyAqIFJYIEVETUEgcmVxdWVzdCBhbmQgc2VuZHMgQHJlZiBrU3RhdHVzX0xQVUFSVF9SeElkbGUgdG8gTFBVQVJUIGNhbGxiYWNrLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgVGhlIEVETUEgaGFuZGxlLgorICogQHBhcmFtIHBhcmFtIENhbGxiYWNrIGZ1bmN0aW9uIHBhcmFtZXRlci4KKyAqLworc3RhdGljIHZvaWQgTFBVQVJUX1JlY2VpdmVFRE1BQ2FsbGJhY2soZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCB2b2lkICpwYXJhbSwgYm9vbCB0cmFuc2ZlckRvbmUsIHVpbnQzMl90IHRjZHMpOworCisvKiEKKyAqIEBicmllZiBHZXQgdGhlIExQVUFSVCBpbnN0YW5jZSBmcm9tIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gTFBVQVJUIGluc3RhbmNlLgorICovCitleHRlcm4gdWludDMyX3QgTFBVQVJUX0dldEluc3RhbmNlKExQVUFSVF9UeXBlICpiYXNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIExQVUFSVF9TZW5kRURNQUNhbGxiYWNrKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqcGFyYW0sIGJvb2wgdHJhbnNmZXJEb25lLCB1aW50MzJfdCB0Y2RzKQoreworICAgIGFzc2VydChwYXJhbSk7CisKKyAgICBscHVhcnRfZWRtYV9wcml2YXRlX2hhbmRsZV90ICpscHVhcnRQcml2YXRlSGFuZGxlID0gKGxwdWFydF9lZG1hX3ByaXZhdGVfaGFuZGxlX3QgKilwYXJhbTsKKworICAgIC8qIEF2b2lkIHRoZSB3YXJuaW5nIGZvciB1bnVzZWQgdmFyaWFibGVzLiAqLworICAgIGhhbmRsZSA9IGhhbmRsZTsKKyAgICB0Y2RzID0gdGNkczsKKworICAgIGlmICh0cmFuc2ZlckRvbmUpCisgICAgeworICAgICAgICBMUFVBUlRfVHJhbnNmZXJBYm9ydFNlbmRFRE1BKGxwdWFydFByaXZhdGVIYW5kbGUtPmJhc2UsIGxwdWFydFByaXZhdGVIYW5kbGUtPmhhbmRsZSk7CisKKyAgICAgICAgaWYgKGxwdWFydFByaXZhdGVIYW5kbGUtPmhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGxwdWFydFByaXZhdGVIYW5kbGUtPmhhbmRsZS0+Y2FsbGJhY2sobHB1YXJ0UHJpdmF0ZUhhbmRsZS0+YmFzZSwgbHB1YXJ0UHJpdmF0ZUhhbmRsZS0+aGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3RhdHVzX0xQVUFSVF9UeElkbGUsIGxwdWFydFByaXZhdGVIYW5kbGUtPmhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBMUFVBUlRfUmVjZWl2ZUVETUFDYWxsYmFjayhlZG1hX2hhbmRsZV90ICpoYW5kbGUsIHZvaWQgKnBhcmFtLCBib29sIHRyYW5zZmVyRG9uZSwgdWludDMyX3QgdGNkcykKK3sKKyAgICBhc3NlcnQocGFyYW0pOworCisgICAgbHB1YXJ0X2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqbHB1YXJ0UHJpdmF0ZUhhbmRsZSA9IChscHVhcnRfZWRtYV9wcml2YXRlX2hhbmRsZV90ICopcGFyYW07CisKKyAgICAvKiBBdm9pZCB3YXJuaW5nIGZvciB1bnVzZWQgcGFyYW1ldGVycy4gKi8KKyAgICBoYW5kbGUgPSBoYW5kbGU7CisgICAgdGNkcyA9IHRjZHM7CisKKyAgICBpZiAodHJhbnNmZXJEb25lKQorICAgIHsKKyAgICAgICAgLyogRGlzYWJsZSB0cmFuc2Zlci4gKi8KKyAgICAgICAgTFBVQVJUX1RyYW5zZmVyQWJvcnRSZWNlaXZlRURNQShscHVhcnRQcml2YXRlSGFuZGxlLT5iYXNlLCBscHVhcnRQcml2YXRlSGFuZGxlLT5oYW5kbGUpOworCisgICAgICAgIGlmIChscHVhcnRQcml2YXRlSGFuZGxlLT5oYW5kbGUtPmNhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBscHVhcnRQcml2YXRlSGFuZGxlLT5oYW5kbGUtPmNhbGxiYWNrKGxwdWFydFByaXZhdGVIYW5kbGUtPmJhc2UsIGxwdWFydFByaXZhdGVIYW5kbGUtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1N0YXR1c19MUFVBUlRfUnhJZGxlLCBscHVhcnRQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMUFVBUlRfVHJhbnNmZXJDcmVhdGVIYW5kbGVFRE1BKExQVUFSVF9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X2VkbWFfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICp0eEVkbWFIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqcnhFZG1hSGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgdWludDMyX3QgaW5zdGFuY2UgPSBMUFVBUlRfR2V0SW5zdGFuY2UoYmFzZSk7CisKKyAgICBzX2VkbWFQcml2YXRlSGFuZGxlW2luc3RhbmNlXS5iYXNlID0gYmFzZTsKKyAgICBzX2VkbWFQcml2YXRlSGFuZGxlW2luc3RhbmNlXS5oYW5kbGUgPSBoYW5kbGU7CisKKyAgICBtZW1zZXQoaGFuZGxlLCAwLCBzaXplb2YoKmhhbmRsZSkpOworCisgICAgaGFuZGxlLT5yeFN0YXRlID0ga0xQVUFSVF9SeElkbGU7CisgICAgaGFuZGxlLT50eFN0YXRlID0ga0xQVUFSVF9UeElkbGU7CisKKyAgICBoYW5kbGUtPnJ4RWRtYUhhbmRsZSA9IHJ4RWRtYUhhbmRsZTsKKyAgICBoYW5kbGUtPnR4RWRtYUhhbmRsZSA9IHR4RWRtYUhhbmRsZTsKKworICAgIGhhbmRsZS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBoYW5kbGUtPnVzZXJEYXRhID0gdXNlckRhdGE7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAgLyogTm90ZToKKyAgICAgICBUYWtlIGNhcmUgb2YgdGhlIFJYIEZJRk8sIEVETUEgcmVxdWVzdCBvbmx5IGFzc2VydCB3aGVuIHJlY2VpdmVkIGJ5dGVzCisgICAgICAgZXF1YWwgb3IgbW9yZSB0aGFuIFJYIHdhdGVyIG1hcmssIHRoZXJlIGlzIHBvdGVudGlhbCBpc3N1ZSBpZiBSWCB3YXRlcgorICAgICAgIG1hcmsgbGFyZ2VyIHRoYW4gMS4KKyAgICAgICBGb3IgZXhhbXBsZSwgaWYgUlggRklGTyB3YXRlciBtYXJrIGlzIDIsIHVwcGVyIGxheWVyIG5lZWRzIDUgYnl0ZXMgYW5kCisgICAgICAgNSBieXRlcyBhcmUgcmVjZWl2ZWQuIHRoZSBsYXN0IGJ5dGUgd2lsbCBiZSBzYXZlZCBpbiBGSUZPIGJ1dCBub3QgdHJpZ2dlcgorICAgICAgIEVETUEgdHJhbnNmZXIgYmVjYXVzZSB0aGUgd2F0ZXIgbWFyayBpcyAyLgorICAgICAqLworICAgIGlmIChyeEVkbWFIYW5kbGUpCisgICAgeworICAgICAgICBiYXNlLT5XQVRFUiAmPSAofkxQVUFSVF9XQVRFUl9SWFdBVEVSX01BU0spOworICAgIH0KKyNlbmRpZgorCisgICAgLyogQ29uZmlndXJlIFRYLiAqLworICAgIGlmICh0eEVkbWFIYW5kbGUpCisgICAgeworICAgICAgICBFRE1BX1NldENhbGxiYWNrKGhhbmRsZS0+dHhFZG1hSGFuZGxlLCBMUFVBUlRfU2VuZEVETUFDYWxsYmFjaywgJnNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdKTsKKyAgICB9CisKKyAgICAvKiBDb25maWd1cmUgUlguICovCisgICAgaWYgKHJ4RWRtYUhhbmRsZSkKKyAgICB7CisgICAgICAgIEVETUFfU2V0Q2FsbGJhY2soaGFuZGxlLT5yeEVkbWFIYW5kbGUsIExQVUFSVF9SZWNlaXZlRURNQUNhbGxiYWNrLCAmc19lZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0pOworICAgIH0KK30KKworc3RhdHVzX3QgTFBVQVJUX1NlbmRFRE1BKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBscHVhcnRfdHJhbnNmZXJfdCAqeGZlcikKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQoaGFuZGxlLT50eEVkbWFIYW5kbGUpOworICAgIGFzc2VydCh4ZmVyKTsKKyAgICBhc3NlcnQoeGZlci0+ZGF0YSk7CisgICAgYXNzZXJ0KHhmZXItPmRhdGFTaXplKTsKKworICAgIGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgeGZlckNvbmZpZzsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICAvKiBJZiBwcmV2aW91cyBUWCBub3QgZmluaXNoZWQuICovCisgICAgaWYgKGtMUFVBUlRfVHhCdXN5ID09IGhhbmRsZS0+dHhTdGF0ZSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfTFBVQVJUX1R4QnVzeTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaGFuZGxlLT50eFN0YXRlID0ga0xQVUFSVF9UeEJ1c3k7CisgICAgICAgIGhhbmRsZS0+dHhEYXRhU2l6ZUFsbCA9IHhmZXItPmRhdGFTaXplOworCisgICAgICAgIC8qIFByZXBhcmUgdHJhbnNmZXIuICovCisgICAgICAgIEVETUFfUHJlcGFyZVRyYW5zZmVyKCZ4ZmVyQ29uZmlnLCB4ZmVyLT5kYXRhLCBzaXplb2YodWludDhfdCksICh2b2lkICopTFBVQVJUX0dldERhdGFSZWdpc3RlckFkZHJlc3MoYmFzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1aW50OF90KSwgc2l6ZW9mKHVpbnQ4X3QpLCB4ZmVyLT5kYXRhU2l6ZSwga0VETUFfTWVtb3J5VG9QZXJpcGhlcmFsKTsKKworICAgICAgICAvKiBTdG9yZSB0aGUgaW5pdGlhbGx5IGNvbmZpZ3VyZWQgZURNQSBtaW5vciBieXRlIHRyYW5zZmVyIGNvdW50IGludG8gdGhlIExQVUFSVCBoYW5kbGUgKi8KKyAgICAgICAgaGFuZGxlLT5uYnl0ZXMgPSBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgLyogU3VibWl0IHRyYW5zZmVyLiAqLworICAgICAgICBFRE1BX1N1Ym1pdFRyYW5zZmVyKGhhbmRsZS0+dHhFZG1hSGFuZGxlLCAmeGZlckNvbmZpZyk7CisgICAgICAgIEVETUFfU3RhcnRUcmFuc2ZlcihoYW5kbGUtPnR4RWRtYUhhbmRsZSk7CisKKyAgICAgICAgLyogRW5hYmxlIExQVUFSVCBUWCBFRE1BLiAqLworICAgICAgICBMUFVBUlRfRW5hYmxlVHhETUEoYmFzZSwgdHJ1ZSk7CisKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExQVUFSVF9SZWNlaXZlRURNQShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgbHB1YXJ0X3RyYW5zZmVyX3QgKnhmZXIpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KGhhbmRsZS0+cnhFZG1hSGFuZGxlKTsKKyAgICBhc3NlcnQoeGZlcik7CisgICAgYXNzZXJ0KHhmZXItPmRhdGEpOworICAgIGFzc2VydCh4ZmVyLT5kYXRhU2l6ZSk7CisKKyAgICBlZG1hX3RyYW5zZmVyX2NvbmZpZ190IHhmZXJDb25maWc7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgLyogSWYgcHJldmlvdXMgUlggbm90IGZpbmlzaGVkLiAqLworICAgIGlmIChrTFBVQVJUX1J4QnVzeSA9PSBoYW5kbGUtPnJ4U3RhdGUpCisgICAgeworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0xQVUFSVF9SeEJ1c3k7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGhhbmRsZS0+cnhTdGF0ZSA9IGtMUFVBUlRfUnhCdXN5OworICAgICAgICBoYW5kbGUtPnJ4RGF0YVNpemVBbGwgPSB4ZmVyLT5kYXRhU2l6ZTsKKworICAgICAgICAvKiBQcmVwYXJlIHRyYW5zZmVyLiAqLworICAgICAgICBFRE1BX1ByZXBhcmVUcmFuc2ZlcigmeGZlckNvbmZpZywgKHZvaWQgKilMUFVBUlRfR2V0RGF0YVJlZ2lzdGVyQWRkcmVzcyhiYXNlKSwgc2l6ZW9mKHVpbnQ4X3QpLCB4ZmVyLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksIHNpemVvZih1aW50OF90KSwgeGZlci0+ZGF0YVNpemUsIGtFRE1BX1BlcmlwaGVyYWxUb01lbW9yeSk7CisKKyAgICAgICAgLyogU3RvcmUgdGhlIGluaXRpYWxseSBjb25maWd1cmVkIGVETUEgbWlub3IgYnl0ZSB0cmFuc2ZlciBjb3VudCBpbnRvIHRoZSBMUFVBUlQgaGFuZGxlICovCisgICAgICAgIGhhbmRsZS0+bmJ5dGVzID0gc2l6ZW9mKHVpbnQ4X3QpOworCisgICAgICAgIC8qIFN1Ym1pdCB0cmFuc2Zlci4gKi8KKyAgICAgICAgRURNQV9TdWJtaXRUcmFuc2ZlcihoYW5kbGUtPnJ4RWRtYUhhbmRsZSwgJnhmZXJDb25maWcpOworICAgICAgICBFRE1BX1N0YXJ0VHJhbnNmZXIoaGFuZGxlLT5yeEVkbWFIYW5kbGUpOworCisgICAgICAgIC8qIEVuYWJsZSBMUFVBUlQgUlggRURNQS4gKi8KKyAgICAgICAgTFBVQVJUX0VuYWJsZVJ4RE1BKGJhc2UsIHRydWUpOworCisgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCit2b2lkIExQVUFSVF9UcmFuc2ZlckFib3J0U2VuZEVETUEoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KGhhbmRsZS0+dHhFZG1hSGFuZGxlKTsKKworICAgIC8qIERpc2FibGUgTFBVQVJUIFRYIEVETUEuICovCisgICAgTFBVQVJUX0VuYWJsZVR4RE1BKGJhc2UsIGZhbHNlKTsKKworICAgIC8qIFN0b3AgdHJhbnNmZXIuICovCisgICAgRURNQV9BYm9ydFRyYW5zZmVyKGhhbmRsZS0+dHhFZG1hSGFuZGxlKTsKKworICAgIGhhbmRsZS0+dHhTdGF0ZSA9IGtMUFVBUlRfVHhJZGxlOworfQorCit2b2lkIExQVUFSVF9UcmFuc2ZlckFib3J0UmVjZWl2ZUVETUEoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KGhhbmRsZS0+cnhFZG1hSGFuZGxlKTsKKworICAgIC8qIERpc2FibGUgTFBVQVJUIFJYIEVETUEuICovCisgICAgTFBVQVJUX0VuYWJsZVJ4RE1BKGJhc2UsIGZhbHNlKTsKKworICAgIC8qIFN0b3AgdHJhbnNmZXIuICovCisgICAgRURNQV9BYm9ydFRyYW5zZmVyKGhhbmRsZS0+cnhFZG1hSGFuZGxlKTsKKworICAgIGhhbmRsZS0+cnhTdGF0ZSA9IGtMUFVBUlRfUnhJZGxlOworfQorCitzdGF0dXNfdCBMUFVBUlRfVHJhbnNmZXJHZXRSZWNlaXZlQ291bnRFRE1BKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCB1aW50MzJfdCAqY291bnQpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KGhhbmRsZS0+cnhFZG1hSGFuZGxlKTsKKyAgICBhc3NlcnQoY291bnQpOworCisgICAgaWYgKGtMUFVBUlRfUnhJZGxlID09IGhhbmRsZS0+cnhTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX05vVHJhbnNmZXJJblByb2dyZXNzOworICAgIH0KKworICAgICpjb3VudCA9IGhhbmRsZS0+cnhEYXRhU2l6ZUFsbCAtCisgICAgICAgICAgICAgKHVpbnQzMl90KWhhbmRsZS0+bmJ5dGVzICoKKyAgICAgICAgICAgICAgICAgRURNQV9HZXRSZW1haW5pbmdNYWpvckxvb3BDb3VudChoYW5kbGUtPnJ4RWRtYUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5yeEVkbWFIYW5kbGUtPmNoYW5uZWwpOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgTFBVQVJUX1RyYW5zZmVyR2V0U2VuZENvdW50RURNQShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgdWludDMyX3QgKmNvdW50KQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydChoYW5kbGUtPnR4RWRtYUhhbmRsZSk7CisgICAgYXNzZXJ0KGNvdW50KTsKKworICAgIGlmIChrTFBVQVJUX1R4SWRsZSA9PSBoYW5kbGUtPnR4U3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzczsKKyAgICB9CisKKyAgICAqY291bnQgPSBoYW5kbGUtPnR4RGF0YVNpemVBbGwgLQorICAgICAgICAgICAgICh1aW50MzJfdCloYW5kbGUtPm5ieXRlcyAqCisgICAgICAgICAgICAgICAgIEVETUFfR2V0UmVtYWluaW5nTWFqb3JMb29wQ291bnQoaGFuZGxlLT50eEVkbWFIYW5kbGUtPmJhc2UsIGhhbmRsZS0+dHhFZG1hSGFuZGxlLT5jaGFubmVsKTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHVhcnRfZWRtYS5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0X2VkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTU2NWM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0X2VkbWEuaApAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfTFBVQVJUX0VETUFfSF8KKyNkZWZpbmUgX0ZTTF9MUFVBUlRfRURNQV9IXworCisjaW5jbHVkZSAiZnNsX2xwdWFydC5oIgorI2luY2x1ZGUgImZzbF9kbWFtdXguaCIKKyNpbmNsdWRlICJmc2xfZWRtYS5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGxwdWFydF9lZG1hX2RyaXZlcgorICogQHsKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIGhhbmRsZSB0eXBlZGVmLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2xwdWFydF9lZG1hX2hhbmRsZSBscHVhcnRfZWRtYV9oYW5kbGVfdDsKKworLyohIEBicmllZiBMUFVBUlQgdHJhbnNmZXIgY2FsbGJhY2sgZnVuY3Rpb24uICovCit0eXBlZGVmIHZvaWQgKCpscHVhcnRfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190KShMUFVBUlRfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSk7CisKKy8qIQorKiBAYnJpZWYgTFBVQVJUIGVETUEgaGFuZGxlCisqLworc3RydWN0IF9scHVhcnRfZWRtYV9oYW5kbGUKK3sKKyAgICBscHVhcnRfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrOyAvKiE8IENhbGxiYWNrIGZ1bmN0aW9uLiAqLworICAgIHZvaWQgKnVzZXJEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTFBVQVJUIGNhbGxiYWNrIGZ1bmN0aW9uIHBhcmFtZXRlci4qLworICAgIHNpemVfdCByeERhdGFTaXplQWxsOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU2l6ZSBvZiB0aGUgZGF0YSB0byByZWNlaXZlLiAqLworICAgIHNpemVfdCB0eERhdGFTaXplQWxsOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU2l6ZSBvZiB0aGUgZGF0YSB0byBzZW5kIG91dC4gKi8KKworICAgIGVkbWFfaGFuZGxlX3QgKnR4RWRtYUhhbmRsZTsgLyohPCBUaGUgZURNQSBUWCBjaGFubmVsIHVzZWQuICovCisgICAgZWRtYV9oYW5kbGVfdCAqcnhFZG1hSGFuZGxlOyAvKiE8IFRoZSBlRE1BIFJYIGNoYW5uZWwgdXNlZC4gKi8KKworICAgIHVpbnQ4X3QgbmJ5dGVzOyAvKiE8IGVETUEgbWlub3IgYnl0ZSB0cmFuc2ZlciBjb3VudCBpbml0aWFsbHkgY29uZmlndXJlZC4gKi8KKworICAgIHZvbGF0aWxlIHVpbnQ4X3QgdHhTdGF0ZTsgLyohPCBUWCB0cmFuc2ZlciBzdGF0ZS4gKi8KKyAgICB2b2xhdGlsZSB1aW50OF90IHJ4U3RhdGU7IC8qITwgUlggdHJhbnNmZXIgc3RhdGUgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAbmFtZSBlRE1BIHRyYW5zYWN0aW9uYWwKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIExQVUFSVCBoYW5kbGUgd2hpY2ggaXMgdXNlZCBpbiB0cmFuc2FjdGlvbmFsIGZ1bmN0aW9ucy4KKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byBscHVhcnRfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24uCisgKiBAcGFyYW0gdXNlckRhdGEgVXNlciBkYXRhLgorICogQHBhcmFtIHR4RWRtYUhhbmRsZSBVc2VyIHJlcXVlc3RlZCBETUEgaGFuZGxlIGZvciBUWCBETUEgdHJhbnNmZXIuCisgKiBAcGFyYW0gcnhFZG1hSGFuZGxlIFVzZXIgcmVxdWVzdGVkIERNQSBoYW5kbGUgZm9yIFJYIERNQSB0cmFuc2Zlci4KKyAqLwordm9pZCBMUFVBUlRfVHJhbnNmZXJDcmVhdGVIYW5kbGVFRE1BKExQVUFSVF9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X2VkbWFfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICp0eEVkbWFIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqcnhFZG1hSGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgU2VuZHMgZGF0YSB1c2luZyBlRE1BLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgZGF0YSB1c2luZyBlRE1BLiBUaGlzIGlzIGEgbm9uLWJsb2NraW5nIGZ1bmN0aW9uLCB3aGljaCByZXR1cm5zCisgKiByaWdodCBhd2F5LiBXaGVuIGFsbCBkYXRhIGlzIHNlbnQsIHRoZSBzZW5kIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIExQVUFSVCBoYW5kbGUgcG9pbnRlci4KKyAqIEBwYXJhbSB4ZmVyIExQVUFSVCBlRE1BIHRyYW5zZmVyIHN0cnVjdHVyZS4gU2VlICNscHVhcnRfdHJhbnNmZXJfdC4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIGlmIHN1Y2NlZWQsIG90aGVycyBmYWlsZWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfTFBVQVJUX1R4QnVzeSBQcmV2aW91cyB0cmFuc2ZlciBvbiBnb2luZy4KKyAqIEByZXR2YWwga1N0YXR1c19JbnZhbGlkQXJndW1lbnQgSW52YWxpZCBhcmd1bWVudC4KKyAqLworc3RhdHVzX3QgTFBVQVJUX1NlbmRFRE1BKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBscHVhcnRfdHJhbnNmZXJfdCAqeGZlcik7CisKKy8qIQorICogQGJyaWVmIFJlY2VpdmVzIGRhdGEgdXNpbmcgZURNQS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGRhdGEgdXNpbmcgZURNQS4gVGhpcyBpcyBub24tYmxvY2tpbmcgZnVuY3Rpb24sIHdoaWNoIHJldHVybnMKKyAqIHJpZ2h0IGF3YXkuIFdoZW4gYWxsIGRhdGEgaXMgcmVjZWl2ZWQsIHRoZSByZWNlaXZlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIFBvaW50ZXIgdG8gbHB1YXJ0X2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlLgorICogQHBhcmFtIHhmZXIgTFBVQVJUIGVETUEgdHJhbnNmZXIgc3RydWN0dXJlLCBzZWUgI2xwdWFydF90cmFuc2Zlcl90LgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgaWYgc3VjY2VlZCwgb3RoZXJzIGZhaWwuCisgKiBAcmV0dmFsIGtTdGF0dXNfTFBVQVJUX1J4QnVzeSBQcmV2aW91cyB0cmFuc2ZlciBvbmdvaW5nLgorICogQHJldHZhbCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCBJbnZhbGlkIGFyZ3VtZW50LgorICovCitzdGF0dXNfdCBMUFVBUlRfUmVjZWl2ZUVETUEoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIGxwdWFydF90cmFuc2Zlcl90ICp4ZmVyKTsKKworLyohCisgKiBAYnJpZWYgQWJvcnRzIHRoZSBzZW50IGRhdGEgdXNpbmcgZURNQS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFib3J0cyB0aGUgc2VudCBkYXRhIHVzaW5nIGVETUEuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBQb2ludGVyIHRvIGxwdWFydF9lZG1hX2hhbmRsZV90IHN0cnVjdHVyZS4KKyAqLwordm9pZCBMUFVBUlRfVHJhbnNmZXJBYm9ydFNlbmRFRE1BKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfZWRtYV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgQWJvcnRzIHRoZSByZWNlaXZlZCBkYXRhIHVzaW5nIGVETUEuCisgKgorICogVGhpcyBmdW5jdGlvbiBhYm9ydHMgdGhlIHJlY2VpdmVkIGRhdGEgdXNpbmcgZURNQS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIFBvaW50ZXIgdG8gbHB1YXJ0X2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlLgorICovCit2b2lkIExQVUFSVF9UcmFuc2ZlckFib3J0UmVjZWl2ZUVETUEoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGUgTFBVQVJUIFRYIHJlZ2lzdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlIExQVUFSVCBUWAorICogcmVnaXN0ZXIgYnkgRE1BLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIGNvdW50IFNlbmQgYnl0ZXMgY291bnQuCisgKiBAcmV0dmFsIGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3MgTm8gc2VuZCBpbiBwcm9ncmVzcy4KKyAqIEByZXR2YWwga1N0YXR1c19JbnZhbGlkQXJndW1lbnQgUGFyYW1ldGVyIGlzIGludmFsaWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBHZXQgc3VjY2Vzc2Z1bGx5IHRocm91Z2ggdGhlIHBhcmFtZXRlciBccCBjb3VudDsKKyAqLworc3RhdHVzX3QgTFBVQVJUX1RyYW5zZmVyR2V0U2VuZENvdW50RURNQShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgdWludDMyX3QgKmNvdW50KTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIGNvdW50IFJlY2VpdmUgYnl0ZXMgY291bnQuCisgKiBAcmV0dmFsIGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3MgTm8gcmVjZWl2ZSBpbiBwcm9ncmVzcy4KKyAqIEByZXR2YWwga1N0YXR1c19JbnZhbGlkQXJndW1lbnQgUGFyYW1ldGVyIGlzIGludmFsaWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBHZXQgc3VjY2Vzc2Z1bGx5IHRocm91Z2ggdGhlIHBhcmFtZXRlciBccCBjb3VudDsKKyAqLworc3RhdHVzX3QgTFBVQVJUX1RyYW5zZmVyR2V0UmVjZWl2ZUNvdW50RURNQShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgdWludDMyX3QgKmNvdW50KTsKKworLypAfSovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRlNMX0xQVUFSVF9FRE1BX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHVhcnRfZnJlZXJ0b3MuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydF9mcmVlcnRvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYjY3NzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHVhcnRfZnJlZXJ0b3MuYwpAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfbHB1YXJ0X2ZyZWVydG9zLmgiCisjaW5jbHVkZSA8RnJlZVJUT1MuaD4KKyNpbmNsdWRlIDxldmVudF9ncm91cHMuaD4KKyNpbmNsdWRlIDxzZW1waHIuaD4KKworc3RhdGljIHZvaWQgTFBVQVJUX1JUT1NfQ2FsbGJhY2soTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqc3RhdGUsIHN0YXR1c190IHN0YXR1cywgdm9pZCAqcGFyYW0pCit7CisgICAgbHB1YXJ0X3J0b3NfaGFuZGxlX3QgKmhhbmRsZSA9IChscHVhcnRfcnRvc19oYW5kbGVfdCAqKXBhcmFtOworICAgIEJhc2VUeXBlX3QgeEhpZ2hlclByaW9yaXR5VGFza1dva2VuLCB4UmVzdWx0OworCisgICAgeEhpZ2hlclByaW9yaXR5VGFza1dva2VuID0gcGRGQUxTRTsKKyAgICB4UmVzdWx0ID0gcGRGQUlMOworCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX0xQVUFSVF9SeElkbGUpCisgICAgeworICAgICAgICB4UmVzdWx0ID0geEV2ZW50R3JvdXBTZXRCaXRzRnJvbUlTUihoYW5kbGUtPnJ4RXZlbnQsIFJUT1NfTFBVQVJUX0NPTVBMRVRFLCAmeEhpZ2hlclByaW9yaXR5VGFza1dva2VuKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RhdHVzID09IGtTdGF0dXNfTFBVQVJUX1R4SWRsZSkKKyAgICB7CisgICAgICAgIHhSZXN1bHQgPSB4RXZlbnRHcm91cFNldEJpdHNGcm9tSVNSKGhhbmRsZS0+dHhFdmVudCwgUlRPU19MUFVBUlRfQ09NUExFVEUsICZ4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4pOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0dXMgPT0ga1N0YXR1c19MUFVBUlRfUnhSaW5nQnVmZmVyT3ZlcnJ1bikKKyAgICB7CisgICAgICAgIHhSZXN1bHQgPQorICAgICAgICAgICAgeEV2ZW50R3JvdXBTZXRCaXRzRnJvbUlTUihoYW5kbGUtPnJ4RXZlbnQsIFJUT1NfTFBVQVJUX1JJTkdfQlVGRkVSX09WRVJSVU4sICZ4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4pOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0dXMgPT0ga1N0YXR1c19MUFVBUlRfUnhIYXJkd2FyZU92ZXJydW4pCisgICAgeworICAgICAgICAvKiBDbGVhciBPdmVycnVuIGZsYWcgKE9SKSBpbiBMUFVBUlQgU1RBVCByZWdpc3RlciAqLworICAgICAgICBMUFVBUlRfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrTFBVQVJUX1J4T3ZlcnJ1bkZsYWcpOworICAgICAgICB4UmVzdWx0ID0KKyAgICAgICAgICAgIHhFdmVudEdyb3VwU2V0Qml0c0Zyb21JU1IoaGFuZGxlLT5yeEV2ZW50LCBSVE9TX0xQVUFSVF9IQVJEV0FSRV9CVUZGRVJfT1ZFUlJVTiwgJnhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbik7CisgICAgfQorCisgICAgaWYgKHhSZXN1bHQgIT0gcGRGQUlMKQorICAgIHsKKyAgICAgICAgcG9ydFlJRUxEX0ZST01fSVNSKHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbik7CisgICAgfQorfQorCisvKkZVTkNUSU9OKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZ1bmN0aW9uIE5hbWUgOiBMUFVBUlRfUlRPU19Jbml0CisgKiBEZXNjcmlwdGlvbiAgIDogSW5pdGlhbGl6ZXMgdGhlIExQVUFSVCBpbnN0YW5jZSBmb3IgYXBwbGljYXRpb24KKyAqCisgKkVORCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IExQVUFSVF9SVE9TX0luaXQobHB1YXJ0X3J0b3NfaGFuZGxlX3QgKmhhbmRsZSwgbHB1YXJ0X2hhbmRsZV90ICp0X2hhbmRsZSwgY29uc3QgbHB1YXJ0X3J0b3NfY29uZmlnX3QgKmNmZykKK3sKKyAgICBscHVhcnRfY29uZmlnX3QgZGVmY2ZnOworCisgICAgaWYgKE5VTEwgPT0gaGFuZGxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKyAgICBpZiAoTlVMTCA9PSB0X2hhbmRsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisgICAgaWYgKE5VTEwgPT0gY2ZnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKyAgICBpZiAoTlVMTCA9PSBjZmctPmJhc2UpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorICAgIGlmICgwID09IGNmZy0+c3JjY2xrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKyAgICBpZiAoMCA9PSBjZmctPmJhdWRyYXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGhhbmRsZS0+YmFzZSA9IGNmZy0+YmFzZTsKKyAgICBoYW5kbGUtPnRfc3RhdGUgPSB0X2hhbmRsZTsKKyNpZiAoY29uZmlnU1VQUE9SVF9TVEFUSUNfQUxMT0NBVElPTiA9PSAxKQorICAgIGhhbmRsZS0+dHhTZW1hcGhvcmUgPSB4U2VtYXBob3JlQ3JlYXRlTXV0ZXhTdGF0aWMoJmhhbmRsZS0+dHhTZW1hcGhvcmVCdWZmZXIpOworI2Vsc2UKKyAgICBoYW5kbGUtPnR4U2VtYXBob3JlID0geFNlbWFwaG9yZUNyZWF0ZU11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGUtPnR4U2VtYXBob3JlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRmFpbDsKKyAgICB9CisjaWYgKGNvbmZpZ1NVUFBPUlRfU1RBVElDX0FMTE9DQVRJT04gPT0gMSkKKyAgICBoYW5kbGUtPnJ4U2VtYXBob3JlID0geFNlbWFwaG9yZUNyZWF0ZU11dGV4U3RhdGljKCZoYW5kbGUtPnJ4U2VtYXBob3JlQnVmZmVyKTsKKyNlbHNlCisgICAgaGFuZGxlLT5yeFNlbWFwaG9yZSA9IHhTZW1hcGhvcmVDcmVhdGVNdXRleCgpOworI2VuZGlmCisgICAgaWYgKE5VTEwgPT0gaGFuZGxlLT5yeFNlbWFwaG9yZSkKKyAgICB7CisgICAgICAgIHZTZW1hcGhvcmVEZWxldGUoaGFuZGxlLT50eFNlbWFwaG9yZSk7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgfQorI2lmIChjb25maWdTVVBQT1JUX1NUQVRJQ19BTExPQ0FUSU9OID09IDEpCisgICAgaGFuZGxlLT50eEV2ZW50ID0geEV2ZW50R3JvdXBDcmVhdGVTdGF0aWMoJmhhbmRsZS0+dHhFdmVudEJ1ZmZlcik7CisjZWxzZQorICAgIGhhbmRsZS0+dHhFdmVudCA9IHhFdmVudEdyb3VwQ3JlYXRlKCk7CisjZW5kaWYKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGUtPnR4RXZlbnQpCisgICAgeworICAgICAgICB2U2VtYXBob3JlRGVsZXRlKGhhbmRsZS0+cnhTZW1hcGhvcmUpOworICAgICAgICB2U2VtYXBob3JlRGVsZXRlKGhhbmRsZS0+dHhTZW1hcGhvcmUpOworICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKyNpZiAoY29uZmlnU1VQUE9SVF9TVEFUSUNfQUxMT0NBVElPTiA9PSAxKQorICAgIGhhbmRsZS0+cnhFdmVudCA9IHhFdmVudEdyb3VwQ3JlYXRlU3RhdGljKCZoYW5kbGUtPnJ4RXZlbnRCdWZmZXIpOworI2Vsc2UKKyAgICBoYW5kbGUtPnJ4RXZlbnQgPSB4RXZlbnRHcm91cENyZWF0ZSgpOworI2VuZGlmCisgICAgaWYgKE5VTEwgPT0gaGFuZGxlLT5yeEV2ZW50KQorICAgIHsKKyAgICAgICAgdkV2ZW50R3JvdXBEZWxldGUoaGFuZGxlLT50eEV2ZW50KTsKKyAgICAgICAgdlNlbWFwaG9yZURlbGV0ZShoYW5kbGUtPnJ4U2VtYXBob3JlKTsKKyAgICAgICAgdlNlbWFwaG9yZURlbGV0ZShoYW5kbGUtPnR4U2VtYXBob3JlKTsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRmFpbDsKKyAgICB9CisgICAgTFBVQVJUX0dldERlZmF1bHRDb25maWcoJmRlZmNmZyk7CisKKyAgICBkZWZjZmcuYmF1ZFJhdGVfQnBzID0gY2ZnLT5iYXVkcmF0ZTsKKyAgICBkZWZjZmcucGFyaXR5TW9kZSA9IGNmZy0+cGFyaXR5OworICAgIGRlZmNmZy5zdG9wQml0Q291bnQgPSBjZmctPnN0b3BiaXRzOworCisgICAgTFBVQVJUX0luaXQoaGFuZGxlLT5iYXNlLCAmZGVmY2ZnLCBjZmctPnNyY2Nsayk7CisgICAgTFBVQVJUX1RyYW5zZmVyQ3JlYXRlSGFuZGxlKGhhbmRsZS0+YmFzZSwgaGFuZGxlLT50X3N0YXRlLCBMUFVBUlRfUlRPU19DYWxsYmFjaywgaGFuZGxlKTsKKyAgICBMUFVBUlRfVHJhbnNmZXJTdGFydFJpbmdCdWZmZXIoaGFuZGxlLT5iYXNlLCBoYW5kbGUtPnRfc3RhdGUsIGNmZy0+YnVmZmVyLCBjZmctPmJ1ZmZlcl9zaXplKTsKKworICAgIExQVUFSVF9FbmFibGVUeChoYW5kbGUtPmJhc2UsIHRydWUpOworICAgIExQVUFSVF9FbmFibGVSeChoYW5kbGUtPmJhc2UsIHRydWUpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qRlVOQ1RJT04qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRnVuY3Rpb24gTmFtZSA6IExQVUFSVF9SVE9TX0RlaW5pdAorICogRGVzY3JpcHRpb24gICA6IERlaW5pdGlhbGl6ZXMgdGhlIExQVUFSVCBpbnN0YW5jZSBhbmQgZnJlZXMgcmVzb3VyY2VzCisgKgorICpFTkQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBMUFVBUlRfUlRPU19EZWluaXQobHB1YXJ0X3J0b3NfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBMUFVBUlRfRGVpbml0KGhhbmRsZS0+YmFzZSk7CisKKyAgICB2RXZlbnRHcm91cERlbGV0ZShoYW5kbGUtPnR4RXZlbnQpOworICAgIHZFdmVudEdyb3VwRGVsZXRlKGhhbmRsZS0+cnhFdmVudCk7CisKKyAgICAvKiBHaXZlIHRoZSBzZW1hcGhvcmUuIFRoaXMgaXMgZm9yIGZ1bmN0aW9uYWwgc2FmZXR5ICovCisgICAgeFNlbWFwaG9yZUdpdmUoaGFuZGxlLT50eFNlbWFwaG9yZSk7CisgICAgeFNlbWFwaG9yZUdpdmUoaGFuZGxlLT5yeFNlbWFwaG9yZSk7CisKKyAgICB2U2VtYXBob3JlRGVsZXRlKGhhbmRsZS0+dHhTZW1hcGhvcmUpOworICAgIHZTZW1hcGhvcmVEZWxldGUoaGFuZGxlLT5yeFNlbWFwaG9yZSk7CisKKyAgICAvKiBJbnZhbGlkYXRlIHRoZSBoYW5kbGUgKi8KKyAgICBoYW5kbGUtPmJhc2UgPSBOVUxMOworICAgIGhhbmRsZS0+dF9zdGF0ZSA9IE5VTEw7CisKKyAgICByZXR1cm4gMDsKK30KKworLypGVU5DVElPTioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGdW5jdGlvbiBOYW1lIDogVUFSVF9SVE9TX1NlbmQKKyAqIERlc2NyaXB0aW9uICAgOiBJbml0aWFsaXplcyB0aGUgVUFSVCBpbnN0YW5jZSBmb3IgYXBwbGljYXRpb24KKyAqCisgKkVORCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IExQVUFSVF9SVE9TX1NlbmQobHB1YXJ0X3J0b3NfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgdWludDhfdCAqYnVmZmVyLCB1aW50MzJfdCBsZW5ndGgpCit7CisgICAgRXZlbnRCaXRzX3QgZXY7CisgICAgaW50IHJldHZhbCA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgIGlmIChOVUxMID09IGhhbmRsZS0+YmFzZSkKKyAgICB7CisgICAgICAgIC8qIEludmFsaWQgaGFuZGxlLiAqLworICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKyAgICBpZiAoMCA9PSBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKE5VTEwgPT0gYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGlmIChwZEZBTFNFID09IHhTZW1hcGhvcmVUYWtlKGhhbmRsZS0+dHhTZW1hcGhvcmUsIDApKQorICAgIHsKKyAgICAgICAgLyogV2UgY291bGQgbm90IHRha2UgdGhlIHNlbWFwaG9yZSwgZXhpdCB3aXRoIDAgZGF0YSByZWNlaXZlZCAqLworICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKworICAgIGhhbmRsZS0+dHhUcmFuc2Zlci5kYXRhID0gKHVpbnQ4X3QgKilidWZmZXI7CisgICAgaGFuZGxlLT50eFRyYW5zZmVyLmRhdGFTaXplID0gKHVpbnQzMl90KWxlbmd0aDsKKworICAgIC8qIE5vbi1ibG9ja2luZyBjYWxsICovCisgICAgTFBVQVJUX1RyYW5zZmVyU2VuZE5vbkJsb2NraW5nKGhhbmRsZS0+YmFzZSwgaGFuZGxlLT50X3N0YXRlLCAmaGFuZGxlLT50eFRyYW5zZmVyKTsKKworICAgIGV2ID0geEV2ZW50R3JvdXBXYWl0Qml0cyhoYW5kbGUtPnR4RXZlbnQsIFJUT1NfTFBVQVJUX0NPTVBMRVRFLCBwZFRSVUUsIHBkRkFMU0UsIHBvcnRNQVhfREVMQVkpOworICAgIGlmICghKGV2ICYgUlRPU19MUFVBUlRfQ09NUExFVEUpKQorICAgIHsKKyAgICAgICAgcmV0dmFsID0ga1N0YXR1c19GYWlsOworICAgIH0KKworICAgIGlmIChwZEZBTFNFID09IHhTZW1hcGhvcmVHaXZlKGhhbmRsZS0+dHhTZW1hcGhvcmUpKQorICAgIHsKKyAgICAgICAgLyogV2UgY291bGQgbm90IHBvc3QgdGhlIHNlbWFwaG9yZSwgZXhpdCB3aXRoIGVycm9yICovCisgICAgICAgIHJldHZhbCA9IGtTdGF0dXNfRmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKkZVTkNUSU9OKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZ1bmN0aW9uIE5hbWUgOiBMUFVBUlRfUlRPU19SZWN2CisgKiBEZXNjcmlwdGlvbiAgIDogUmVjZWl2ZXMgY2hhcnMgZm9yIHRoZSBhcHBsaWNhdGlvbgorICoKKyAqRU5EKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgTFBVQVJUX1JUT1NfUmVjZWl2ZShscHVhcnRfcnRvc19oYW5kbGVfdCAqaGFuZGxlLCB1aW50OF90ICpidWZmZXIsIHVpbnQzMl90IGxlbmd0aCwgc2l6ZV90ICpyZWNlaXZlZCkKK3sKKyAgICBFdmVudEJpdHNfdCBldjsKKyAgICBzaXplX3QgbiA9IDA7CisgICAgaW50IHJldHZhbCA9IGtTdGF0dXNfRmFpbDsKKyAgICBzaXplX3QgbG9jYWxfcmVjZWl2ZWQgPSAwOworCisgICAgaWYgKE5VTEwgPT0gaGFuZGxlLT5iYXNlKQorICAgIHsKKyAgICAgICAgLyogSW52YWxpZCBoYW5kbGUuICovCisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgfQorICAgIGlmICgwID09IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGlmIChyZWNlaXZlZCAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICAqcmVjZWl2ZWQgPSBuOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoTlVMTCA9PSBidWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogTmV3IHRyYW5zZmVyIGNhbiBiZSBwZXJmb3JtZWQgb25seSBhZnRlciBjdXJyZW50IG9uZSBpcyBmaW5pc2hlZCAqLworICAgIGlmIChwZEZBTFNFID09IHhTZW1hcGhvcmVUYWtlKGhhbmRsZS0+cnhTZW1hcGhvcmUsIHBvcnRNQVhfREVMQVkpKQorICAgIHsKKyAgICAgICAgLyogV2UgY291bGQgbm90IHRha2UgdGhlIHNlbWFwaG9yZSwgZXhpdCB3aXRoIDAgZGF0YSByZWNlaXZlZCAqLworICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKworICAgIGhhbmRsZS0+cnhUcmFuc2Zlci5kYXRhID0gYnVmZmVyOworICAgIGhhbmRsZS0+cnhUcmFuc2Zlci5kYXRhU2l6ZSA9ICh1aW50MzJfdClsZW5ndGg7CisKKyAgICAvKiBOb24tYmxvY2tpbmcgY2FsbCAqLworICAgIExQVUFSVF9UcmFuc2ZlclJlY2VpdmVOb25CbG9ja2luZyhoYW5kbGUtPmJhc2UsIGhhbmRsZS0+dF9zdGF0ZSwgJmhhbmRsZS0+cnhUcmFuc2ZlciwgJm4pOworCisgICAgZXYgPSB4RXZlbnRHcm91cFdhaXRCaXRzKAorICAgICAgICBoYW5kbGUtPnJ4RXZlbnQsIFJUT1NfTFBVQVJUX0NPTVBMRVRFIHwgUlRPU19MUFVBUlRfUklOR19CVUZGRVJfT1ZFUlJVTiB8IFJUT1NfTFBVQVJUX0hBUkRXQVJFX0JVRkZFUl9PVkVSUlVOLAorICAgICAgICBwZFRSVUUsIHBkRkFMU0UsIHBvcnRNQVhfREVMQVkpOworICAgIGlmIChldiAmIFJUT1NfTFBVQVJUX0hBUkRXQVJFX0JVRkZFUl9PVkVSUlVOKQorICAgIHsKKyAgICAgICAgLyogU3RvcCBkYXRhIHRyYW5zZmVyIHRvIGFwcGxpY2F0aW9uIGJ1ZmZlciwgcmluZyBidWZmZXIgaXMgc3RpbGwgYWN0aXZlICovCisgICAgICAgIExQVUFSVF9UcmFuc2ZlckFib3J0UmVjZWl2ZShoYW5kbGUtPmJhc2UsIGhhbmRsZS0+dF9zdGF0ZSk7CisgICAgICAgIC8qIFByZXZlbnQgZmFsc2UgaW5kaWNhdGlvbiBvZiBzdWNjZXNzZnVsIHRyYW5zZmVyIGluIG5leHQgY2FsbCBvZiBMUFVBUlRfUlRPU19SZWNlaXZlLgorICAgICAgICAgICBSVE9TX0xQVUFSVF9DT01QTEVURSBmbGFnIGNvdWxkIGJlIHNldCBtZWFud2hpbGUgb3ZlcnJ1biBpcyBoYW5kbGVkICovCisgICAgICAgIHhFdmVudEdyb3VwQ2xlYXJCaXRzKGhhbmRsZS0+cnhFdmVudCwgUlRPU19MUFVBUlRfQ09NUExFVEUpOworICAgICAgICByZXR2YWwgPSBrU3RhdHVzX0xQVUFSVF9SeEhhcmR3YXJlT3ZlcnJ1bjsKKyAgICAgICAgbG9jYWxfcmVjZWl2ZWQgPSAwOworICAgIH0KKyAgICBlbHNlIGlmIChldiAmIFJUT1NfTFBVQVJUX1JJTkdfQlVGRkVSX09WRVJSVU4pCisgICAgeworICAgICAgICAvKiBTdG9wIGRhdGEgdHJhbnNmZXIgdG8gYXBwbGljYXRpb24gYnVmZmVyLCByaW5nIGJ1ZmZlciBpcyBzdGlsbCBhY3RpdmUgKi8KKyAgICAgICAgTFBVQVJUX1RyYW5zZmVyQWJvcnRSZWNlaXZlKGhhbmRsZS0+YmFzZSwgaGFuZGxlLT50X3N0YXRlKTsKKyAgICAgICAgLyogUHJldmVudCBmYWxzZSBpbmRpY2F0aW9uIG9mIHN1Y2Nlc3NmdWwgdHJhbnNmZXIgaW4gbmV4dCBjYWxsIG9mIExQVUFSVF9SVE9TX1JlY2VpdmUuCisgICAgICAgICAgIFJUT1NfTFBVQVJUX0NPTVBMRVRFIGZsYWcgY291bGQgYmUgc2V0IG1lYW53aGlsZSBvdmVycnVuIGlzIGhhbmRsZWQgKi8KKyAgICAgICAgeEV2ZW50R3JvdXBDbGVhckJpdHMoaGFuZGxlLT5yeEV2ZW50LCBSVE9TX0xQVUFSVF9DT01QTEVURSk7CisgICAgICAgIHJldHZhbCA9IGtTdGF0dXNfTFBVQVJUX1J4UmluZ0J1ZmZlck92ZXJydW47CisgICAgICAgIGxvY2FsX3JlY2VpdmVkID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoZXYgJiBSVE9TX0xQVUFSVF9DT01QTEVURSkKKyAgICB7CisgICAgICAgIHJldHZhbCA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICAgICAgbG9jYWxfcmVjZWl2ZWQgPSBsZW5ndGg7CisgICAgfQorCisgICAgLyogUHJldmVudCByZXBldGl0aXZlIE5VTEwgY2hlY2sgKi8KKyAgICBpZiAocmVjZWl2ZWQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgICpyZWNlaXZlZCA9IGxvY2FsX3JlY2VpdmVkOworICAgIH0KKworICAgIC8qIEVuYWJsZSBuZXh0IHRyYW5zZmVyLiBDdXJyZW50IG9uZSBpcyBmaW5pc2hlZCAqLworICAgIGlmIChwZEZBTFNFID09IHhTZW1hcGhvcmVHaXZlKGhhbmRsZS0+cnhTZW1hcGhvcmUpKQorICAgIHsKKyAgICAgICAgLyogV2UgY291bGQgbm90IHBvc3QgdGhlIHNlbWFwaG9yZSwgZXhpdCB3aXRoIGVycm9yICovCisgICAgICAgIHJldHZhbCA9IGtTdGF0dXNfRmFpbDsKKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydF9mcmVlcnRvcy5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0X2ZyZWVydG9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiNDVmNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydF9mcmVlcnRvcy5oCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX19GU0xfTFBVQVJUX1JUT1NfSF9fCisjZGVmaW5lIF9fRlNMX0xQVUFSVF9SVE9TX0hfXworCisjaW5jbHVkZSAiRnJlZVJUT1NDb25maWcuaCIKKyNpbmNsdWRlICJmc2xfbHB1YXJ0LmgiCisjaW5jbHVkZSA8RnJlZVJUT1MuaD4KKyNpbmNsdWRlIDxldmVudF9ncm91cHMuaD4KKyNpbmNsdWRlIDxzZW1waHIuaD4KKworLyohCisgKiBAYWRkdG9ncm91cCBscHVhcnRfZnJlZXJ0b3NfZHJpdmVyCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBAYnJpZWYgTFBVQVJUIFJUT1MgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuICovCit0eXBlZGVmIHN0cnVjdCBfbHB1YXJ0X3J0b3NfY29uZmlnCit7CisgICAgTFBVQVJUX1R5cGUgKmJhc2U7ICAgICAgICAgICAgICAgIC8qITwgVUFSVCBiYXNlIGFkZHJlc3MgKi8KKyAgICB1aW50MzJfdCBzcmNjbGs7ICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIHNvdXJjZSBjbG9jayBpbiBIeiovCisgICAgdWludDMyX3QgYmF1ZHJhdGU7ICAgICAgICAgICAgICAgIC8qITwgRGVzaXJlZCBjb21tdW5pY2F0aW9uIHNwZWVkICovCisgICAgbHB1YXJ0X3Bhcml0eV9tb2RlX3QgcGFyaXR5OyAgICAgIC8qITwgUGFyaXR5IHNldHRpbmcgKi8KKyAgICBscHVhcnRfc3RvcF9iaXRfY291bnRfdCBzdG9wYml0czsgLyohPCBOdW1iZXIgb2Ygc3RvcCBiaXRzIHRvIHVzZSAqLworICAgIHVpbnQ4X3QgKmJ1ZmZlcjsgICAgICAgICAgICAgICAgICAvKiE8IEJ1ZmZlciBmb3IgYmFja2dyb3VuZCByZWNlcHRpb24gKi8KKyAgICB1aW50MzJfdCBidWZmZXJfc2l6ZTsgICAgICAgICAgICAgLyohPCBTaXplIG9mIGJ1ZmZlciBmb3IgYmFja2dyb3VuZCByZWNlcHRpb24gKi8KK30gbHB1YXJ0X3J0b3NfY29uZmlnX3Q7CisKKy8qIQorKiBAY29uZCBSVE9TX1BSSVZBVEUKKyogQG5hbWUgTFBVQVJUIGV2ZW50IGZsYWdzCisqCisqIFRoaXMgYXJlIG9ubHkgdmFsaWQgc3RhdGVzIGZvciB0eEV2ZW50IGFuZCByeEV2ZW50IChscHVhcnRfcnRvc19oYW5kbGVfdCkuCisqLworLypAeyovCisvKiEgQGJyaWVmIEV2ZW50IGZsYWcgLSB0cmFuc2ZlciBjb21wbGV0ZS4gKi8KKyNkZWZpbmUgUlRPU19MUFVBUlRfQ09NUExFVEUgMHgxCisvKiEgQGJyaWVmIEV2ZW50IGZsYWcgLSByaW5nIGJ1ZmZlciBvdmVycnVuLiAqLworI2RlZmluZSBSVE9TX0xQVUFSVF9SSU5HX0JVRkZFUl9PVkVSUlVOIDB4MgorLyohIEBicmllZiBFdmVudCBmbGFnIC0gaGFyZHdhcmUgYnVmZmVyIG92ZXJydW4uICovCisjZGVmaW5lIFJUT1NfTFBVQVJUX0hBUkRXQVJFX0JVRkZFUl9PVkVSUlVOIDB4NAorLypAfSovCisKKy8qISBAYnJpZWYgTFBVQVJUIEZyZWVSVE9TIHRyYW5zZmVyIHN0cnVjdHVyZS4gKi8KK3R5cGVkZWYgc3RydWN0IF9scHVhcnRfcnRvc19oYW5kbGUKK3sKKyAgICBMUFVBUlRfVHlwZSAqYmFzZTsgICAgICAgICAgICAgLyohPCBVQVJUIGJhc2UgYWRkcmVzcyAqLworICAgIGxwdWFydF90cmFuc2Zlcl90IHR4VHJhbnNmZXI7ICAvKiE8IFRYIHRyYW5zZmVyIHN0cnVjdHVyZSAqLworICAgIGxwdWFydF90cmFuc2Zlcl90IHJ4VHJhbnNmZXI7ICAvKiE8IFJYIHRyYW5zZmVyIHN0cnVjdHVyZSAqLworICAgIFNlbWFwaG9yZUhhbmRsZV90IHJ4U2VtYXBob3JlOyAvKiE8IFJYIHNlbWFwaG9yZSBmb3IgcmVzb3VyY2Ugc2hhcmluZyAqLworICAgIFNlbWFwaG9yZUhhbmRsZV90IHR4U2VtYXBob3JlOyAvKiE8IFRYIHNlbWFwaG9yZSBmb3IgcmVzb3VyY2Ugc2hhcmluZyAqLworICAgIEV2ZW50R3JvdXBIYW5kbGVfdCByeEV2ZW50OyAgICAvKiE8IFJYIGNvbXBsZXRpb24gZXZlbnQgKi8KKyAgICBFdmVudEdyb3VwSGFuZGxlX3QgdHhFdmVudDsgICAgLyohPCBUWCBjb21wbGV0aW9uIGV2ZW50ICovCisgICAgdm9pZCAqdF9zdGF0ZTsgICAgICAgICAgICAgICAgIC8qITwgVHJhbnNhY3Rpb25hbCBzdGF0ZSBvZiB0aGUgdW5kZXJseWluZyBkcml2ZXIgKi8KKyNpZiAoY29uZmlnU1VQUE9SVF9TVEFUSUNfQUxMT0NBVElPTiA9PSAxKQorICAgIFN0YXRpY1NlbWFwaG9yZV90IHR4U2VtYXBob3JlQnVmZmVyOyAvKiE8IFN0YXRpY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdHhTZW1hcGhvcmUgKi8KKyAgICBTdGF0aWNTZW1hcGhvcmVfdCByeFNlbWFwaG9yZUJ1ZmZlcjsgLyohPCBTdGF0aWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgZm9yIHJ4U2VtYXBob3JlICovCisgICAgU3RhdGljRXZlbnRHcm91cF90IHR4RXZlbnRCdWZmZXI7ICAgIC8qITwgU3RhdGljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0eEV2ZW50ICovCisgICAgU3RhdGljRXZlbnRHcm91cF90IHJ4RXZlbnRCdWZmZXI7ICAgIC8qITwgU3RhdGljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGZvciByeEV2ZW50ICovCisjZW5kaWYKK30gbHB1YXJ0X3J0b3NfaGFuZGxlX3Q7CisvKiEgXGVuZGNvbmQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiEKKyAqIEBuYW1lIExQVUFSVCBSVE9TIE9wZXJhdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyBhbiBMUFVBUlQgaW5zdGFuY2UgZm9yIG9wZXJhdGlvbiBpbiBSVE9TLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgVGhlIFJUT1MgTFBVQVJUIGhhbmRsZSwgdGhlIHBvaW50ZXIgdG8gYW4gYWxsb2NhdGVkIHNwYWNlIGZvciBSVE9TIGNvbnRleHQuCisgKiBAcGFyYW0gdF9oYW5kbGUgVGhlIHBvaW50ZXIgdG8gYW4gYWxsb2NhdGVkIHNwYWNlIHRvIHN0b3JlIHRoZSB0cmFuc2FjdGlvbmFsIGxheWVyIGludGVybmFsIHN0YXRlLgorICogQHBhcmFtIGNmZyBUaGUgcG9pbnRlciB0byB0aGUgcGFyYW1ldGVycyByZXF1aXJlZCB0byBjb25maWd1cmUgdGhlIExQVUFSVCBhZnRlciBpbml0aWFsaXphdGlvbi4KKyAqIEByZXR1cm4gMCBzdWNjZWVkLCBvdGhlcnMgZmFpbGVkCisgKi8KK2ludCBMUFVBUlRfUlRPU19Jbml0KGxwdWFydF9ydG9zX2hhbmRsZV90ICpoYW5kbGUsIGxwdWFydF9oYW5kbGVfdCAqdF9oYW5kbGUsIGNvbnN0IGxwdWFydF9ydG9zX2NvbmZpZ190ICpjZmcpOworCisvKiEKKyAqIEBicmllZiBEZWluaXRpYWxpemVzIGFuIExQVUFSVCBpbnN0YW5jZSBmb3Igb3BlcmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGVpbml0aWFsaXplcyB0aGUgTFBVQVJUIG1vZHVsZSwgc2V0cyBhbGwgcmVnaXN0ZXIgdmFsdWUgdG8gdGhlIHJlc2V0IHZhbHVlLAorICogYW5kIHJlbGVhc2VzIHRoZSByZXNvdXJjZXMuCisgKgorICogQHBhcmFtIGhhbmRsZSBUaGUgUlRPUyBMUFVBUlQgaGFuZGxlLgorICovCitpbnQgTFBVQVJUX1JUT1NfRGVpbml0KGxwdWFydF9ydG9zX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBuYW1lIExQVUFSVCB0cmFuc2FjdGlvbmFsIE9wZXJhdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBTZW5kcyBkYXRhIGluIHRoZSBiYWNrZ3JvdW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgZGF0YS4gSXQgaXMgYW4gc3luY2hyb25vdXMgQVBJLgorICogSWYgdGhlIGhhcmR3YXJlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdGFzayBpcyBpbiB0aGUgYmxvY2tlZCBzdGF0ZS4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIFRoZSBSVE9TIExQVUFSVCBoYW5kbGUuCisgKiBAcGFyYW0gYnVmZmVyIFRoZSBwb2ludGVyIHRvIGJ1ZmZlciB0byBzZW5kLgorICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNlbmQuCisgKi8KK2ludCBMUFVBUlRfUlRPU19TZW5kKGxwdWFydF9ydG9zX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwgdWludDMyX3QgbGVuZ3RoKTsKKworLyohCisgKiBAYnJpZWYgUmVjZWl2ZXMgZGF0YS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGRhdGEgZnJvbSBMUFVBUlQuIEl0IGlzIGFuIHN5bmNocm9ub3VzIEFQSS4gSWYgYW55IGRhdGEgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlCisgKiBpdCBpcyByZXR1cm5lZCBpbW1lZGlhdGVseSBhbmQgdGhlIG51bWJlciBvZiBieXRlcyByZWNlaXZlZC4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIFRoZSBSVE9TIExQVUFSVCBoYW5kbGUuCisgKiBAcGFyYW0gYnVmZmVyIFRoZSBwb2ludGVyIHRvIGJ1ZmZlciB3aGVyZSB0byB3cml0ZSByZWNlaXZlZCBkYXRhLgorICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlY2VpdmUuCisgKiBAcGFyYW0gcmVjZWl2ZWQgVGhlIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSBvZiBzaXplX3Qgd2hlcmUgdGhlIG51bWJlciBvZiByZWNlaXZlZCBkYXRhIGlzIGZpbGxlZC4KKyAqLworaW50IExQVUFSVF9SVE9TX1JlY2VpdmUobHB1YXJ0X3J0b3NfaGFuZGxlX3QgKmhhbmRsZSwgdWludDhfdCAqYnVmZmVyLCB1aW50MzJfdCBsZW5ndGgsIHNpemVfdCAqcmVjZWl2ZWQpOworCisvKiBAfSAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisvKiEgQH0qLworCisjZW5kaWYgLyogX19GU0xfTFBVQVJUX1JUT1NfSF9fICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sdGMuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2x0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjdhNzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sdGMuYwpAQCAtMCwwICsxLDQzMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfbHRjLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBGdWxsIHdvcmQgcmVwcmVzZW50aW5nIHRoZSBhY3R1YWwgYml0IHZhbHVlcyBmb3IgdGhlIExUQyBtb2RlIHJlZ2lzdGVyLiAqLwordHlwZWRlZiB1aW50MzJfdCBsdGNfbW9kZV90OworCisjZGVmaW5lIExUQ19GSUZPX1NaX01BWF9ET1dOX0FMR04gKDB4ZmYwdSkKKyNkZWZpbmUgTFRDX01EX0FMR19BRVMgKDB4MTBVKSAgICAgICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BTEc6IEFFUyAqLworI2RlZmluZSBMVENfTURfQUxHX0RFUyAoMHgyMFUpICAgICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FMRzogREVTICovCisjZGVmaW5lIExUQ19NRF9BTEdfVFJJUExFX0RFUyAoMHgyMVUpIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfQUxHOiAzREVTICovCisjZGVmaW5lIExUQ19NRF9BTEdfU0hBMSAoMHg0MVUpICAgICAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfQUxHOiBTSEEtMSAqLworI2RlZmluZSBMVENfTURfQUxHX1NIQTIyNCAoMHg0MlUpICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FMRzogU0hBLTIyNCAqLworI2RlZmluZSBMVENfTURfQUxHX1NIQTI1NiAoMHg0M1UpICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FMRzogU0hBLTI1NiAqLworI2RlZmluZSBMVENfTURQS19BTEdfUEtIQSAoMHg4MFUpICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EUEtfQUxHOiBQS0hBICovCisjZGVmaW5lIExUQ19NRF9FTkNfREVDUllQVCAoMFUpICAgICAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfRU5DOiBEZWNyeXB0LiAqLworI2RlZmluZSBMVENfTURfRU5DX0VOQ1JZUFQgKDB4MVUpICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0VOQzogRW5jcnlwdC4gKi8KKyNkZWZpbmUgTFRDX01EX0FTX1VQREFURSAoMFUpICAgICAgICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BUzogVXBkYXRlICovCisjZGVmaW5lIExUQ19NRF9BU19JTklUSUFMSVpFICgweDFVKSAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfQVM6IEluaXRpYWxpemUgKi8KKyNkZWZpbmUgTFRDX01EX0FTX0ZJTkFMSVpFICgweDJVKSAgICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BUzogRmluYWxpemUgKi8KKyNkZWZpbmUgTFRDX01EX0FTX0lOSVRfRklOQUwgKDB4M1UpICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BUzogSW5pdGlhbGl6ZS9GaW5hbGl6ZSAqLworCisjZGVmaW5lIExUQ19BRVNfR0NNX1RZUEVfQUFEIDU1CisjZGVmaW5lIExUQ19BRVNfR0NNX1RZUEVfSVYgMAorCisjZGVmaW5lIExUQ19DQ01fVEFHX0lEWCA4IC8qISBGb3IgQ0NNIGVuY3J5cHRpb24sIHRoZSBlbmNyeXB0ZWQgZmluYWwgTUFDIGlzIHdyaXR0ZW4gdG8gdGhlIGNvbnRleHQgd29yZCA4LTExICovCisjZGVmaW5lIExUQ19HQ01fVEFHX0lEWCAwIC8qISBGb3IgR0NNIGVuY3J5cHRpb24sIHRoZSBlbmNyeXB0ZWQgZmluYWwgTUFDIGlzIHdyaXR0ZW4gdG8gdGhlIGNvbnRleHQgd29yZCAwLTMgKi8KKworZW51bSBfbHRjX21kX2RrX2JpdF9zaGlmdAoreworICAgIGtMVENfTW9kZVJlZ0JpdFNoaWZ0REsgPSAxMlUsCit9OworCit0eXBlZGVmIGVudW0gX2x0Y19hbGdvcml0aG0KK3sKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBCisgICAga0xUQ19BbGdvcml0aG1QS0hBID0gTFRDX01EUEtfQUxHX1BLSEEgPDwgTFRDX01EX0FMR19TSElGVCwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEgKi8KKyAgICBrTFRDX0FsZ29yaXRobUFFUyA9IExUQ19NRF9BTEdfQUVTIDw8IExUQ19NRF9BTEdfU0hJRlQsCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX0RFUykgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMKKyAgICBrTFRDX0FsZ29yaXRobURFUyA9IExUQ19NRF9BTEdfREVTIDw8IExUQ19NRF9BTEdfU0hJRlQsCisgICAga0xUQ19BbGdvcml0aG0zREVTID0gTFRDX01EX0FMR19UUklQTEVfREVTIDw8IExUQ19NRF9BTEdfU0hJRlQsCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgIGtMVENfQWxnb3JpdGhtU0hBMSA9IExUQ19NRF9BTEdfU0hBMSA8PCBMVENfTURfQUxHX1NISUZULAorICAgIGtMVENfQWxnb3JpdGhtU0hBMjI0ID0gTFRDX01EX0FMR19TSEEyMjQgPDwgTFRDX01EX0FMR19TSElGVCwKKyAgICBrTFRDX0FsZ29yaXRobVNIQTI1NiA9IExUQ19NRF9BTEdfU0hBMjU2IDw8IExUQ19NRF9BTEdfU0hJRlQsCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KK30gbHRjX2FsZ29yaXRobV90OworCit0eXBlZGVmIGVudW0gX2x0Y19tb2RlX3N5bW1ldHJpY19hbGcKK3sKKyAgICBrTFRDX01vZGVDVFIgPSAweDAwVSA8PCBMVENfTURfQUFJX1NISUZULAorICAgIGtMVENfTW9kZUNCQyA9IDB4MTBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCisgICAga0xUQ19Nb2RlRUNCID0gMHgyMFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVDRkIgPSAweDMwVSA8PCBMVENfTURfQUFJX1NISUZULAorICAgIGtMVENfTW9kZU9GQiA9IDB4NDBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCisgICAga0xUQ19Nb2RlQ01BQyA9IDB4NjBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCisgICAga0xUQ19Nb2RlWENCQ01BQyA9IDB4NzBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCisgICAga0xUQ19Nb2RlQ0NNID0gMHg4MFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVHQ00gPSAweDkwVSA8PCBMVENfTURfQUFJX1NISUZULAorfSBsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3Q7CisKK3R5cGVkZWYgZW51bSBfbHRjX21vZGVfZW5jcnlwdAoreworICAgIGtMVENfTW9kZURlY3J5cHQgPSBMVENfTURfRU5DX0RFQ1JZUFQgPDwgTFRDX01EX0VOQ19TSElGVCwKKyAgICBrTFRDX01vZGVFbmNyeXB0ID0gTFRDX01EX0VOQ19FTkNSWVBUIDw8IExUQ19NRF9FTkNfU0hJRlQsCit9IGx0Y19tb2RlX2VuY3J5cHRfdDsKKwordHlwZWRlZiBlbnVtIF9sdGNfbW9kZV9hbGdvcml0aG1fc3RhdGUKK3sKKyAgICBrTFRDX01vZGVVcGRhdGUgPSBMVENfTURfQVNfVVBEQVRFIDw8IExUQ19NRF9BU19TSElGVCwKKyAgICBrTFRDX01vZGVJbml0ID0gTFRDX01EX0FTX0lOSVRJQUxJWkUgPDwgTFRDX01EX0FTX1NISUZULAorICAgIGtMVENfTW9kZUZpbmFsaXplID0gTFRDX01EX0FTX0ZJTkFMSVpFIDw8IExUQ19NRF9BU19TSElGVCwKKyAgICBrTFRDX01vZGVJbml0RmluYWwgPSBMVENfTURfQVNfSU5JVF9GSU5BTCA8PCBMVENfTURfQVNfU0hJRlQKK30gbHRjX21vZGVfYWxnb3JpdGhtX3N0YXRlX3Q7CisKKy8qISBAYnJpZWYgTFRDIHN0YXR1cyBmbGFncyAqLworZW51bSBfbHRjX3N0YXR1c19mbGFnCit7CisgICAga0xUQ19TdGF0dXNBZXNCdXN5ID0gMVUgPDwgTFRDX1NUQV9BQl9TSElGVCwKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0RFUworICAgIGtMVENfU3RhdHVzRGVzQnVzeSA9IDFVIDw8IExUQ19TVEFfREJfU0hJRlQsCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBCisgICAga0xUQ19TdGF0dXNQa2hhQnVzeSA9IDFVIDw8IExUQ19TVEFfUEJfU0hJRlQsCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEKKyAgICBrTFRDX1N0YXR1c01kaGFCdXN5ID0gMVUgPDwgTFRDX1NUQV9NQl9TSElGVCwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworICAgIGtMVENfU3RhdHVzRG9uZUlzciA9IDFVIDw8IExUQ19TVEFfRElfU0hJRlQsCisgICAga0xUQ19TdGF0dXNFcnJvcklzciA9IDFVIDw8IExUQ19TVEFfRUlfU0hJRlQsCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQQorICAgIGtMVENfU3RhdHVzUHVibGljS2V5UHJpbWUgPSAxVSA8PCBMVENfU1RBX1BLUF9TSElGVCwKKyAgICBrTFRDX1N0YXR1c1B1YmxpY0tleU9wT25lID0gMVUgPDwgTFRDX1NUQV9QS09fU0hJRlQsCisgICAga0xUQ19TdGF0dXNQdWJsaWNLZXlPcFplcm8gPSAxVSA8PCBMVENfU1RBX1BLWl9TSElGVCwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEgKi8KKyAgICBrTFRDX1N0YXR1c0FsbCA9IExUQ19TVEFfQUJfTUFTSyB8CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX0RFUykgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMKKyAgICAgICAgICAgICAgICAgICAgIExUQ19TVEFfREJfTUFTSyB8CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgICAgICAgICAgICAgICAgICAgTFRDX1NUQV9NQl9NQVNLIHwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworICAgICAgICAgICAgICAgICAgICAgTFRDX1NUQV9ESV9NQVNLIHwgTFRDX1NUQV9FSV9NQVNLCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQQorICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgTFRDX1NUQV9QQl9NQVNLIHwgTFRDX1NUQV9QS1BfTUFTSyB8IExUQ19TVEFfUEtPX01BU0sgfCBMVENfU1RBX1BLWl9NQVNLCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBICovCit9OworCisvKiEgQGJyaWVmIExUQyBjbGVhciByZWdpc3RlciAqLwordHlwZWRlZiBlbnVtIF9sdGNfY2xlYXJfd3JpdHRlbgoreworICAgIGtMVENfQ2xlYXJNb2RlID0gMVUgPDwgTFRDX0NXX0NNX1NISUZULAorICAgIGtMVENfQ2xlYXJEYXRhU2l6ZSA9IDFVIDw8IExUQ19DV19DRFNfU0hJRlQsCisgICAga0xUQ19DbGVhckljdlNpemUgPSAxVSA8PCBMVENfQ1dfQ0lDVl9TSElGVCwKKyAgICBrTFRDX0NsZWFyQ29udGV4dCA9IDFVIDw8IExUQ19DV19DQ1JfU0hJRlQsCisgICAga0xUQ19DbGVhcktleSA9IDFVIDw8IExUQ19DV19DS1JfU0hJRlQsCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQQorICAgIGtMVENfQ2xlYXJQa2hhU2l6ZUEgPSAxVSA8PCBMVENfQ1dfQ1BLQV9TSElGVCwKKyAgICBrTFRDX0NsZWFyUGtoYVNpemVCID0gMVUgPDwgTFRDX0NXX0NQS0JfU0hJRlQsCisgICAga0xUQ19DbGVhclBraGFTaXplTiA9IDFVIDw8IExUQ19DV19DUEtOX1NISUZULAorICAgIGtMVENfQ2xlYXJQa2hhU2l6ZUUgPSAxVSA8PCBMVENfQ1dfQ1BLRV9TSElGVCwKKyAgICBrTFRDX0NsZWFyQWxsU2l6ZSA9IChpbnQpa0xUQ19DbGVhclBraGFTaXplQSB8IGtMVENfQ2xlYXJQa2hhU2l6ZUIgfCBrTFRDX0NsZWFyUGtoYVNpemVOIHwga0xUQ19DbGVhclBraGFTaXplRSwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEgKi8KKyAgICBrTFRDX0NsZWFyT3V0cHV0RmlmbyA9IDFVIDw8IExUQ19DV19DT0ZfU0hJRlQsCisgICAga0xUQ19DbGVhcklucHV0RmlmbyA9IChpbnQpKDFVIDw8IExUQ19DV19DSUZfU0hJRlQpLAorICAgIGtMVENfQ2xlYXJBbGwgPSAoaW50KShMVENfQ1dfQ01fTUFTSyB8IExUQ19DV19DRFNfTUFTSyB8IExUQ19DV19DSUNWX01BU0sgfCBMVENfQ1dfQ0NSX01BU0sgfCBMVENfQ1dfQ0tSX01BU0sgfAorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0NXX0NQS0FfTUFTSyB8IExUQ19DV19DUEtCX01BU0sgfCBMVENfQ1dfQ1BLTl9NQVNLIHwgTFRDX0NXX0NQS0VfTUFTSyB8CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19DV19DT0ZfTUFTSyB8IExUQ19DV19DSUZfTUFTSykKK30gbHRjX2NsZWFyX3dyaXR0ZW5fdDsKKworZW51bSBfbHRjX2N0cmxfc3dhcAoreworICAgIGtMVENfQ3RybFN3YXBBbGwgPQorICAgICAgICBMVENfQ1RMX0lGU19NQVNLIHwgTFRDX0NUTF9PRlNfTUFTSyB8IExUQ19DVExfS0lTX01BU0sgfCBMVENfQ1RMX0tPU19NQVNLIHwgTFRDX0NUTF9DSVNfTUFTSyB8IExUQ19DVExfQ09TX01BU0ssCit9OworCisvKiEgQGJyaWVmIFR5cGUgdXNlZCBpbiBHQ00gYW5kIENDTSBtb2Rlcy4KKworICAgIENvbnRlbnQgb2YgYSBibG9jayBpcyBlc3RhYmxpc2hlZCB2aWEgaW5kaXZpZHVhbCBieXRlcyBhbmQgbW92ZWQgdG8gTFRDCisgICBJRklGTyBieSBtb3ZpbmcgMzItYml0IHdvcmRzLgorKi8KK3R5cGVkZWYgdW5pb24gX2x0Y194Y21fYmxvY2tfdAoreworICAgIHVpbnQzMl90IHdbNF07IC8qITwgTFRDIGNvbnRleHQgcmVnaXN0ZXIgaXMgMTYgYnl0ZXMgd3JpdHRlbiBhcyBmb3VyIDMyLWJpdCB3b3JkcyAqLworICAgIHVpbnQ4X3QgYlsxNl07IC8qITwgMTYgb2N0ZXRzIGJsb2NrIGZvciBDQ00gQjAgYW5kIENUUjAgYW5kIGZvciBHQ00gKi8KK30gbHRjX3hjbV9ibG9ja190OworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQQorCisvKiEgQGJyaWVmIFBLSEEgZnVuY3Rpb25zIC0gYXJpdGhtZXRpYywgY29weS9jbGVhciBtZW1vcnkuICovCit0eXBlZGVmIGVudW0gX2x0Y19wa2hhX2Z1bmNfdAoreworICAgIGtMVENfUEtIQV9DbGVhck1lbSA9IDFVLAorICAgIGtMVENfUEtIQV9Bcml0aE1vZEFkZCA9IDJVLCAgICAgICAgIC8qITwgKEEgKyBCKSBtb2QgTiAqLworICAgIGtMVENfUEtIQV9Bcml0aE1vZFN1YjEgPSAzVSwgICAgICAgIC8qITwgKEEgLSBCKSBtb2QgTiAqLworICAgIGtMVENfUEtIQV9Bcml0aE1vZFN1YjIgPSA0VSwgICAgICAgIC8qITwgKEIgLSBBKSBtb2QgTiAqLworICAgIGtMVENfUEtIQV9Bcml0aE1vZE11bCA9IDVVLCAgICAgICAgIC8qITwgKEEgeCBCKSBtb2QgTiAqLworICAgIGtMVENfUEtIQV9Bcml0aE1vZEV4cCA9IDZVLCAgICAgICAgIC8qITwgKEFeRSkgbW9kIE4gKi8KKyAgICBrTFRDX1BLSEFfQXJpdGhNb2RSZWQgPSA3VSwgICAgICAgICAvKiE8IChBKSBtb2QgTiAqLworICAgIGtMVENfUEtIQV9Bcml0aE1vZEludiA9IDhVLCAgICAgICAgIC8qITwgKEFeLTEpIG1vZCBOICovCisgICAga0xUQ19QS0hBX0FyaXRoRWNjQWRkID0gOVUsICAgICAgICAgLyohPCAoUDEgKyBQMikgKi8KKyAgICBrTFRDX1BLSEFfQXJpdGhFY2NEb3VibGUgPSAxMFUsICAgICAvKiE8IChQMiArIFAyKSAqLworICAgIGtMVENfUEtIQV9Bcml0aEVjY011bCA9IDExVSwgICAgICAgIC8qITwgKEUgeCBQMSkgKi8KKyAgICBrTFRDX1BLSEFfQXJpdGhNb2RSMiA9IDEyVSwgICAgICAgICAvKiE8IChSXjIgbW9kIE4pICovCisgICAga0xUQ19QS0hBX0FyaXRoR2NkID0gMTRVLCAgICAgICAgICAgLyohPCBHQ0QgKEEsIE4pICovCisgICAga0xUQ19QS0hBX0FyaXRoUHJpbWFsaXR5VGVzdCA9IDE1VSwgLyohPCBNaWxsZXItUmFiaW4gKi8KKyAgICBrTFRDX1BLSEFfQ29weU1lbVNpemVOID0gMTZVLAorICAgIGtMVENfUEtIQV9Db3B5TWVtU2l6ZVNyYyA9IDE3VSwKK30gbHRjX3BraGFfZnVuY190OworCisvKiEgQGJyaWVmIFJlZ2lzdGVyIGFyZWFzIGZvciBQS0hBIGNsZWFyIG1lbW9yeSBvcGVyYXRpb25zLiAqLwordHlwZWRlZiBlbnVtIF9sdGNfcGtoYV9yZWdfYXJlYQoreworICAgIGtMVENfUEtIQV9SZWdBID0gOFUsCisgICAga0xUQ19QS0hBX1JlZ0IgPSA0VSwKKyAgICBrTFRDX1BLSEFfUmVnRSA9IDJVLAorICAgIGtMVENfUEtIQV9SZWdOID0gMVUsCisgICAga0xUQ19QS0hBX1JlZ0FsbCA9IGtMVENfUEtIQV9SZWdBIHwga0xUQ19QS0hBX1JlZ0IgfCBrTFRDX1BLSEFfUmVnRSB8IGtMVENfUEtIQV9SZWdOLAorfSBsdGNfcGtoYV9yZWdfYXJlYV90OworCisvKiEgQGJyaWVmIFF1YWRyYW50IGFyZWFzIGZvciAyMDQ4LWJpdCByZWdpc3RlcnMgZm9yIFBLSEEgY29weSBtZW1vcnkKKyAqIG9wZXJhdGlvbnMuICovCit0eXBlZGVmIGVudW0gX2x0Y19wa2hhX3F1YWRfYXJlYV90Cit7CisgICAga0xUQ19QS0hBX1F1YWQwID0gMFUsCisgICAga0xUQ19QS0hBX1F1YWQxID0gMVUsCisgICAga0xUQ19QS0hBX1F1YWQyID0gMlUsCisgICAga0xUQ19QS0hBX1F1YWQzID0gM1UsCit9IGx0Y19wa2hhX3F1YWRfYXJlYV90OworCisvKiEgQGJyaWVmIFVzZXItc3VwcGxpZWQgKFJeMiBtb2QgTikgaW5wdXQgb3IgTFRDIHNob3VsZCBjYWxjdWxhdGUuICovCit0eXBlZGVmIGVudW0gX2x0Y19wa2hhX3IyX3QKK3sKKyAgICBrTFRDX1BLSEFfQ2FsY1IyID0gMFUsIC8qITwgQ2FsY3VsYXRlIChSXjIgbW9kIE4pICovCisgICAga0xUQ19QS0hBX0lucHV0UjIgPSAxVSAvKiE8IChSXjIgbW9kIE4pIHN1cHBsaWVkIGFzIGlucHV0ICovCit9IGx0Y19wa2hhX3IyX3Q7CisKKy8qISBAYnJpZWYgTFRDIFBLSEEgcGFyYW1ldGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgX2x0Y19wa2hhX21vZGVfcGFyYW1zX3QKK3sKKyAgICBsdGNfcGtoYV9mdW5jX3QgZnVuYzsKKyAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGU7CisgICAgbHRjX3BraGFfbW9udGdvbWVyeV9mb3JtX3QgbW9udEZvcm1JbjsKKyAgICBsdGNfcGtoYV9tb250Z29tZXJ5X2Zvcm1fdCBtb250Rm9ybU91dDsKKyAgICBsdGNfcGtoYV9yZWdfYXJlYV90IHNyY1JlZzsKKyAgICBsdGNfcGtoYV9xdWFkX2FyZWFfdCBzcmNRdWFkOworICAgIGx0Y19wa2hhX3JlZ19hcmVhX3QgZHN0UmVnOworICAgIGx0Y19wa2hhX3F1YWRfYXJlYV90IGRzdFF1YWQ7CisgICAgbHRjX3BraGFfdGltaW5nX3QgZXF1YWxUaW1lOworICAgIGx0Y19wa2hhX3IyX3QgcjJtb2RuOworfSBsdGNfcGtoYV9tb2RlX3BhcmFtc190OworCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEKK3N0YXRpYyBzdGF0dXNfdCBsdGNfcGtoYV9jbGVhcl9yZWdhYm5lKExUQ19UeXBlICpiYXNlLCBib29sIEEsIGJvb2wgQiwgYm9vbCBOLCBib29sIEUpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExUQyBDb21tb24gY29kZSBzdGF0aWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBicmllZiBUZXN0cyB0aGUgY29ycmVjdCBrZXkgc2l6ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRlc3RzIHRoZSBjb3JyZWN0IGtleSBzaXplLgorICogQHBhcmFtIGtleVNpemUgSW5wdXQga2V5IGxlbmd0aCBpbiBieXRlcy4KKyAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUga2V5IGxlbmd0aCBpcyBzdXBwb3J0ZWQsIGZhbHNlIGlmIG5vdC4KKyAqLworYm9vbCBsdGNfY2hlY2tfa2V5X3NpemUoY29uc3QgdWludDMyX3Qga2V5U2l6ZSkKK3sKKyAgICByZXR1cm4gKChrZXlTaXplID09IDE2dSkKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfQUVTMTkyKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0FFUzE5MgorICAgICAgICAgICAgfHwgKChrZXlTaXplID09IDI0dSkpCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19BRVMxOTIgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfQUVTMjU2KSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0FFUzI1NgorICAgICAgICAgICAgfHwgKChrZXlTaXplID09IDMydSkpCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19BRVMyNTYgKi8KKyAgICAgICAgICAgICAgICApOworfQorCisvKiEgQGJyaWVmIExUQyBkcml2ZXIgd2FpdCBtZWNoYW5pc20uICovCitzdGF0dXNfdCBsdGNfd2FpdChMVENfVHlwZSAqYmFzZSkKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBib29sIGVycm9yID0gZmFsc2U7CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisKKyAgICAvKiBXYWl0IGZvciAnZG9uZScgb3IgJ2Vycm9yJyBmbGFnLiAqLworICAgIHdoaWxlICgoIWVycm9yKSAmJiAoIWRvbmUpKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdGVtcDMyID0gYmFzZS0+U1RBOworICAgICAgICBlcnJvciA9IHRlbXAzMiAmIExUQ19TVEFfRUlfTUFTSzsKKyAgICAgICAgZG9uZSA9IHRlbXAzMiAmIExUQ19TVEFfRElfTUFTSzsKKyAgICB9CisKKyAgICBpZiAoZXJyb3IpCisgICAgeworICAgICAgICBiYXNlLT5DT00gPSBMVENfQ09NX0FMTF9NQVNLOyAvKiBSZXNldCBhbGwgZW5naW5lIHRvIGNsZWFyIHRoZSBlcnJvciBmbGFnICovCisgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfRmFpbDsKKyAgICB9CisgICAgZWxzZSAvKiAnZG9uZScgKi8KKyAgICB7CisgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgICAgICBiYXNlLT5DVyA9IGtMVENfQ2xlYXJEYXRhU2l6ZTsKKyAgICAgICAgLyogQ2xlYXIgJ2RvbmUnIGludGVycnVwdCBzdGF0dXMuICBUaGlzIGFsc28gY2xlYXJzIHRoZSBtb2RlIHJlZ2lzdGVyLiAqLworICAgICAgICBiYXNlLT5TVEEgPSBrTFRDX1N0YXR1c0RvbmVJc3I7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBMVEMgbW9kdWxlLgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjbGVhciBhbGwgc2Vuc2l0aXZlIGRhdGEgZnJvbSB0aGVMVEMgbW9kdWxlLCBzdWNoIGFzIHByaXZhdGUga2V5cy4gSXQgaXMgY2FsbGVkCisgKiBpbnRlcm5hbGx5IGJ5IHRoZSBMVEMgZHJpdmVyIGluIGNhc2Ugb2YgYW4gZXJyb3Igb3Igb3BlcmF0aW9uIGNvbXBsZXRlLgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGtoYSBJbmNsdWRlIExUQyBQS0hBIHJlZ2lzdGVyIGNsZWFyLiBJZiB0aGVyZSBpcyBubyBQS0hBLCB0aGUgYXJndW1lbnQgaXMgaWdub3JlZC4KKyAqLwordm9pZCBsdGNfY2xlYXJfYWxsKExUQ19UeXBlICpiYXNlLCBib29sIGFkZFBLSEEpCit7CisgICAgYmFzZS0+Q1cgPSAodWludDMyX3Qpa0xUQ19DbGVhckFsbDsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBCisgICAgaWYgKGFkZFBLSEEpCisgICAgeworICAgICAgICBsdGNfcGtoYV9jbGVhcl9yZWdhYm5lKGJhc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEgKi8KK30KKwordm9pZCBsdGNfbWVtY3B5KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSkKK3sKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorICAgIHJlZ2lzdGVyIHVpbnQ4X3QgKnRvID0gKHVpbnQ4X3QgKilkc3Q7CisgICAgcmVnaXN0ZXIgY29uc3QgdWludDhfdCAqZnJvbSA9IChjb25zdCB1aW50OF90ICopc3JjOworI2Vsc2UKKyAgICByZWdpc3RlciB1aW50OF90ICp0byA9IGRzdDsKKyAgICByZWdpc3RlciBjb25zdCB1aW50OF90ICpmcm9tID0gc3JjOworI2VuZGlmCisgICAgd2hpbGUgKHNpemUpCisgICAgeworICAgICAgICAqdG8gPSAqZnJvbTsKKyAgICAgICAgc2l6ZS0tOworICAgICAgICB0bysrOworICAgICAgICBmcm9tKys7CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBSZWFkcyBhbiB1bmFsaWduZWQgd29yZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSAzMi1iaXQgd29yZCBmcm9tIGFuIGlucHV0IGFycmF5IG9mIGZvdXIgYnl0ZXMuCisgKgorICogQHBhcmFtIHNyYyBJbnB1dCBhcnJheSBvZiBmb3VyIGJ5dGVzLiBUaGUgYXJyYXkgY2FuIHN0YXJ0IGF0IGFueSBhZGRyZXNzIGluIG1lbW9yeS4KKyAqIEByZXR1cm4gMzItYml0IHVuc2lnbmVkIGludCBjcmVhdGVkIGZyb20gdGhlIGlucHV0IGJ5dGUgYXJyYXkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbHRjX2dldF93b3JkX2Zyb21fdW5hbGlnbmVkKGNvbnN0IHVpbnQ4X3QgKnNyY0FkZHIpCit7CisjaWYgKCEoZGVmaW5lZChfX0NPUlRFWF9NKSkgfHwgKGRlZmluZWQoX19DT1JURVhfTSkgJiYgKF9fQ09SVEVYX00gPT0gMCkpKQorICAgIHJlZ2lzdGVyIGNvbnN0IHVpbnQ4X3QgKnNyYyA9IHNyY0FkZHI7CisgICAgLyogQ29ydGV4IE0wIGRvZXMgbm90IHN1cHBvcnQgbWlzYWxpZ25lZCBsb2FkcyAqLworICAgIGlmICgodWludDMyX3Qpc3JjICYgMHgzdSkKKyAgICB7CisgICAgICAgIHVuaW9uIF9hbGlnbl9ieXRlc190CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHdvcmQ7CisgICAgICAgICAgICB1aW50OF90IGJ5dGVbc2l6ZW9mKHVpbnQzMl90KV07CisgICAgICAgIH0gbXlfYnl0ZXM7CisKKyAgICAgICAgbXlfYnl0ZXMuYnl0ZVswXSA9ICpzcmM7CisgICAgICAgIG15X2J5dGVzLmJ5dGVbMV0gPSAqKHNyYyArIDEpOworICAgICAgICBteV9ieXRlcy5ieXRlWzJdID0gKihzcmMgKyAyKTsKKyAgICAgICAgbXlfYnl0ZXMuYnl0ZVszXSA9ICooc3JjICsgMyk7CisgICAgICAgIHJldHVybiBteV9ieXRlcy53b3JkOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBhZGRyIGFsaWduZWQgdG8gMC1tb2R1bG8tNCBzbyBpdCBpcyBzYWZlIHRvIHR5cGUgY2FzdCAqLworICAgICAgICByZXR1cm4gKigoY29uc3QgdWludDMyX3QgKilzcmMpOworICAgIH0KKyNlbGlmIGRlZmluZWQoX19DQ19BUk0pCisgICAgLyogLU8zIG9wdGltaXphdGlvbiBpbiBLZWlsIDUuMTUgYW5kIDUuMTZhIHVzZXMgTERNIGluc3RydWN0aW9uIGhlcmUgKExETSByNCEsIHtyMH0pCisgICAgICogICAgd2hpY2ggaXMgd3JvbmcsIGJlY2F1c2Ugc3JjQWRkciBtaWdodCBiZSB1bmFsaWduZWQuCisgICAgICogICAgTERNIG9uIHVuYWxpZ25lZCBhZGRyZXNzIGNhdXNlcyBoYXJkLWZhdWx0LiBpbiBjb250cmFyeSwKKyAgICAgKiAgICBMRFIgc3VwcG9ydHMgdW5hbGlnbmVkIGFkZHJlc3Mgb24gQ29ydGV4IE00ICovCisgICAgcmVnaXN0ZXIgdWludDMyX3QgcmV0VmFsOworICAgIF9fYXNtCisgICAgeworICAgICAgICBMRFIgcmV0VmFsLCBbc3JjQWRkcl0KKyAgICB9CisgICAgcmV0dXJuIHJldFZhbDsKKyNlbHNlCisgICAgcmV0dXJuICooKGNvbnN0IHVpbnQzMl90ICopc3JjQWRkcik7CisjZW5kaWYKK30KKworLyohCisgKiBAYnJpZWYgQ29udmVydHMgYSAzMi1iaXQgd29yZCBpbnRvIGEgYnl0ZSBhcnJheS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gb3V0cHV0IGFycmF5IG9mIGZvdXIgYnl0ZXMgZnJvbSBhbiBpbnB1dCAzMi1iaXQgd29yZC4KKyAqCisgKiBAcGFyYW0gc3JjV29yZCBJbnB1dCAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4KKyAqIEBwYXJhbSBkc3QgT3V0cHV0IGFycmF5IG9mIGZvdXIgYnl0ZXMuIFRoZSBhcnJheSBjYW4gc3RhcnQgYXQgYW55IGFkZHJlc3MgaW4gbWVtb3J5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbHRjX3NldF91bmFsaWduZWRfZnJvbV93b3JkKHVpbnQzMl90IHNyY1dvcmQsIHVpbnQ4X3QgKmRzdEFkZHIpCit7CisjaWYgKCEoZGVmaW5lZChfX0NPUlRFWF9NKSkgfHwgKGRlZmluZWQoX19DT1JURVhfTSkgJiYgKF9fQ09SVEVYX00gPT0gMCkpKQorICAgIHJlZ2lzdGVyIHVpbnQ4X3QgKmRzdCA9IGRzdEFkZHI7CisgICAgLyogQ29ydGV4IE0wIGRvZXMgbm90IHN1cHBvcnQgbWlzYWxpZ25lZCBzdG9yZXMgKi8KKyAgICBpZiAoKHVpbnQzMl90KWRzdCAmIDB4M3UpCisgICAgeworICAgICAgICAqZHN0KysgPSAoc3JjV29yZCAmIDB4MDAwMDAwRkZVKTsKKyAgICAgICAgKmRzdCsrID0gKHNyY1dvcmQgJiAweDAwMDBGRjAwVSkgPj4gODsKKyAgICAgICAgKmRzdCsrID0gKHNyY1dvcmQgJiAweDAwRkYwMDAwVSkgPj4gMTY7CisgICAgICAgICpkc3QrKyA9IChzcmNXb3JkICYgMHhGRjAwMDAwMFUpID4+IDI0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqKCh1aW50MzJfdCAqKWRzdEFkZHIpID0gc3JjV29yZDsgLyogYWRkciBhbGlnbmVkIHRvIDAtbW9kdWxvLTQgc28gaXQgaXMgc2FmZSB0byB0eXBlIGNhc3QgKi8KKyAgICB9CisjZWxpZiBkZWZpbmVkKF9fQ0NfQVJNKQorICAgIF9fYXNtCisgICAgeworICAgICAgICBTVFIgc3JjV29yZCwgW2RzdEFkZHJdCisgICAgfQorICAgIHJldHVybjsKKyNlbHNlCisgICAgKigodWludDMyX3QgKilkc3RBZGRyKSA9IHNyY1dvcmQ7CisjZW5kaWYKK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgTFRDIGtleXMuCisgKgorICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIExUQyBrZXlzIGludG8gdGhlIGtleSByZWdpc3Rlci4gIFRoZSBrZXlzIHNob3VsZAorICogYmUgd3JpdHRlbiBiZWZvcmUgdGhlIGtleSBzaXplLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGtleSBLZXkKKyAqIEBwYXJhbSBrZXlTaXplIE51bWJlciBvZiBieXRlcyBmb3IgYWxsIGtleXMgdG8gYmUgbG9hZGVkIChtYXhpbXVtIDMyLCBtdXN0IGJlIGEKKyAqICAgICAgICAgICAgICAgIG11bHRpcGxlIG9mIDQpLgorICogQHJldHVybnMgS2V5IHNldCBzdGF0dXMKKyAqLworc3RhdGljIHN0YXR1c190IGx0Y19zZXRfa2V5KExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICprZXksIHVpbnQ4X3Qga2V5U2l6ZSkKK3sKKyAgICBpbnQzMl90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgKGtleVNpemUgLyA0KTsgaSsrKQorICAgIHsKKyAgICAgICAgYmFzZS0+S0VZW2ldID0gbHRjX2dldF93b3JkX2Zyb21fdW5hbGlnbmVkKGtleSArIGkgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBMVEMga2V5cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgTFRDIGtleXMgZnJvbSB0aGUga2V5IHJlZ2lzdGVyLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGtleSBBcnJheSBvZiBkYXRhIHRvIHN0b3JlIGtleXMKKyAqIEBwYXJhbSBrZXlTaXplIE51bWJlciBvZiBieXRlcyBvZiBrZXlzIHRvIHJldHJpZXZlCisgKiBAcmV0dXJucyBLZXkgc2V0IHN0YXR1cworICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX2dldF9rZXkoTFRDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgKmtleSwgdWludDhfdCBrZXlTaXplKQoreworICAgIGludDMyX3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAoa2V5U2l6ZSAvIDQpOyBpKyspCisgICAgeworICAgICAgICBsdGNfc2V0X3VuYWxpZ25lZF9mcm9tX3dvcmQoYmFzZS0+S0VZW2ldLCBrZXkgKyBpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworLyohCisgKiBAYnJpZWYgV3JpdGVzIHRoZSBMVEMgY29udGV4dCByZWdpc3RlcjsKKyAqCisgKiBUaGUgTFRDIGNvbnRleHQgcmVnaXN0ZXIgaXMgYSA1MTIgYml0ICg2NCBieXRlKSByZWdpc3RlciB0aGF0IGhvbGRzCisgKiBpbnRlcm5hbCBjb250ZXh0IGZvciB0aGUgY3J5cHRvIGVuZ2luZS4gIFRoZSBtZWFuaW5nIHZhcmllcyBiYXNlZCBvbiB0aGUKKyAqIGFsZ29yaXRobSBhbmQgb3BlcmF0aW5nIHN0YXRlIGJlaW5nIHVzZWQuICBUaGlzIHJlZ2lzdGVyIGlzIHdyaXR0ZW4gYnkgdGhlCisgKiBkcml2ZXIvYXBwbGljYXRpb24gdG8gbG9hZCBzdGF0ZSBzdWNoIGFzIElWLCBjb3VudGVyLCBhbmQgc28gb24uIFRoZW4sIGl0IGlzCisgKiB1cGRhdGVkIGJ5IHRoZSBpbnRlcm5hbCBjcnlwdG8gZW5naW5lIGFzIG5lZWRlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBkYXRhIERhdGEgdG8gd3JpdGUKKyAqIEBwYXJhbSBkYXRhU2l6ZSBTaXplIG9mIGRhdGEgdG8gd3JpdGUgaW4gYnl0ZXMKKyAqIEBwYXJhbSBzdGFydEluZGV4IFN0YXJ0aW5nIHdvcmQgKDQtYnl0ZSkgaW5kZXggaW50byB0aGUgMTYtd29yZCByZWdpc3Rlci4KKyAqIEByZXR1cm4gU3RhdHVzIG9mIHdyaXRlCisgKi8KK3N0YXR1c190IGx0Y19zZXRfY29udGV4dChMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDhfdCBkYXRhU2l6ZSwgdWludDhfdCBzdGFydEluZGV4KQoreworICAgIGludDMyX3QgaTsKKyAgICBpbnQzMl90IGo7CisgICAgaW50MzJfdCBzekxlZnQ7CisKKyAgICAvKiBDb250ZXh0IHJlZ2lzdGVyIGlzIDE2IHdvcmRzIGluIHNpemUgKDY0IGJ5dGVzKS4gIEVuc3VyZSB3ZSBhcmUgb25seQorICAgICAqIHdyaXRpbmcgYSB2YWxpZCBhbW91bnQgb2YgZGF0YS4gKi8KKyAgICBpZiAoc3RhcnRJbmRleCArIChkYXRhU2l6ZSAvIDQpID49IDE2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGogPSAwOworICAgIHN6TGVmdCA9IGRhdGFTaXplICUgNDsKKyAgICBmb3IgKGkgPSBzdGFydEluZGV4OyBpIDwgKHN0YXJ0SW5kZXggKyBkYXRhU2l6ZSAvIDQpOyBpKyspCisgICAgeworICAgICAgICBiYXNlLT5DVFhbaV0gPSBsdGNfZ2V0X3dvcmRfZnJvbV91bmFsaWduZWQoZGF0YSArIGopOworICAgICAgICBqICs9IHNpemVvZih1aW50MzJfdCk7CisgICAgfQorCisgICAgaWYgKHN6TGVmdCkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGNvbnRleHRfZGF0YSA9IHswfTsKKyAgICAgICAgbHRjX21lbWNweSgmY29udGV4dF9kYXRhLCBkYXRhICsgaiwgc3pMZWZ0KTsKKyAgICAgICAgYmFzZS0+Q1RYW2ldID0gY29udGV4dF9kYXRhOworICAgIH0KKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCisvKiEKKyAqIEBicmllZiBSZWFkcyB0aGUgTFRDIGNvbnRleHQgcmVnaXN0ZXIuCisgKgorICogVGhlIExUQyBjb250ZXh0IHJlZ2lzdGVyIGlzIGEgNTEyIGJpdCAoNjQgYnl0ZSkgcmVnaXN0ZXIgdGhhdCBob2xkcworICogaW50ZXJuYWwgY29udGV4dCBmb3IgdGhlIGNyeXB0byBlbmdpbmUuICBUaGUgbWVhbmluZyB2YXJpZXMgYmFzZWQgb24gdGhlCisgKiBhbGdvcml0aG0gYW5kIG9wZXJhdGluZyBzdGF0ZSBiZWluZyB1c2VkLiAgVGhpcyByZWdpc3RlciBpcyB3cml0dGVuIGJ5IHRoZQorICogZHJpdmVyL2FwcGxpY2F0aW9uIHRvIGxvYWQgc3RhdGUgc3VjaCBhcyBJViwgY291bnRlciwgYW5kIHNvIG9uLiBUaGVuLCBpdCBpcworICogdXBkYXRlZCBieSB0aGUgaW50ZXJuYWwgY3J5cHRvIGVuZ2luZSBhcyBuZWVkZWQuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gZGF0YSBEZXN0aW5hdGlvbiBvZiByZWFkIGRhdGEKKyAqIEBwYXJhbSBkYXRhU2l6ZSBTaXplIG9mIGRhdGEgdG8gcmVhZCBpbiBieXRlcworICogQHBhcmFtIHN0YXJ0SW5kZXggU3RhcnRpbmcgd29yZCAoNC1ieXRlKSBpbmRleCBpbnRvIHRoZSAxNi13b3JkIHJlZ2lzdGVyLgorICogQHJldHVybiBTdGF0dXMgb2YgcmVhZAorICovCitzdGF0dXNfdCBsdGNfZ2V0X2NvbnRleHQoTFRDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgKmRlc3QsIHVpbnQ4X3QgZGF0YVNpemUsIHVpbnQ4X3Qgc3RhcnRJbmRleCkKK3sKKyAgICBpbnQzMl90IGk7CisgICAgaW50MzJfdCBqOworICAgIGludDMyX3Qgc3pMZWZ0OworICAgIHVpbnQzMl90IHJkQ3R4OworCisgICAgLyogQ29udGV4dCByZWdpc3RlciBpcyAxNiB3b3JkcyBpbiBzaXplICg2NCBieXRlcykuICBFbnN1cmUgd2UgYXJlIG9ubHkKKyAgICAgKiB3cml0aW5nIGEgdmFsaWQgYW1vdW50IG9mIGRhdGEuICovCisgICAgaWYgKHN0YXJ0SW5kZXggKyAoZGF0YVNpemUgLyA0KSA+PSAxNikKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBqID0gMDsKKyAgICBzekxlZnQgPSBkYXRhU2l6ZSAlIDQ7CisgICAgZm9yIChpID0gc3RhcnRJbmRleDsgaSA8IChzdGFydEluZGV4ICsgZGF0YVNpemUgLyA0KTsgaSsrKQorICAgIHsKKyAgICAgICAgbHRjX3NldF91bmFsaWduZWRfZnJvbV93b3JkKGJhc2UtPkNUWFtpXSwgZGVzdCArIGopOworICAgICAgICBqICs9IHNpemVvZih1aW50MzJfdCk7CisgICAgfQorCisgICAgaWYgKHN6TGVmdCkKKyAgICB7CisgICAgICAgIHJkQ3R4ID0gMDsKKyAgICAgICAgcmRDdHggPSBiYXNlLT5DVFhbaV07CisgICAgICAgIGx0Y19tZW1jcHkoZGVzdCArIGosICZyZEN0eCwgc3pMZWZ0KTsKKyAgICB9CisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdGljIHN0YXR1c190IGx0Y19zeW1tZXRyaWNfYWxnX3N0YXRlKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2FsZ29yaXRobV90IGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9lbmNyeXB0X3QgZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX2FsZ29yaXRobV9zdGF0ZV90IGFzKQoreworICAgIGx0Y19tb2RlX3QgbW9kZVJlZzsKKworICAgIC8qIENsZWFyIGludGVybmFsIHJlZ2lzdGVyIHN0YXRlcy4gKi8KKyAgICBiYXNlLT5DVyA9ICh1aW50MzJfdClrTFRDX0NsZWFyQWxsOworCisgICAgLyogU2V0IGJ5dGUgc3dhcCBvbiBmb3Igc2V2ZXJhbCByZWdpc3RlcnMgd2Ugd2lsbCBiZSByZWFkaW5nIGFuZCB3cml0aW5nCisgICAgICogdXNlciBkYXRhIHRvL2Zyb20uICovCisgICAgYmFzZS0+Q1RMIHw9IGtMVENfQ3RybFN3YXBBbGw7CisKKyAgICAvKiBXcml0ZSB0aGUga2V5IGluIHBsYWNlLiAqLworICAgIGx0Y19zZXRfa2V5KGJhc2UsIGtleSwga2V5U2l6ZSk7CisKKyAgICAvKiBXcml0ZSB0aGUga2V5IHNpemUuICBUaGlzIG11c3QgYmUgZG9uZSBhZnRlciB3cml0aW5nIHRoZSBrZXksIGFuZCB0aGlzCisgICAgICogYWN0aW9uIGxvY2tzIHRoZSBhYmlsaXR5IHRvIG1vZGlmeSB0aGUga2V5IHJlZ2lzdGVycy4gKi8KKyAgICBiYXNlLT5LUyA9IGtleVNpemU7CisKKyAgICAvKiBDbGVhciB0aGUgJ2RvbmUnIGludGVycnVwdC4gKi8KKyAgICBiYXNlLT5TVEEgPSBrTFRDX1N0YXR1c0RvbmVJc3I7CisKKyAgICAvKiBTZXQgdGhlIHByb3BlciBibG9jayBhbmQgYWxnb3JpdGhtIG1vZGUuICovCisgICAgbW9kZVJlZyA9ICh1aW50MzJfdClhbGcgfCAodWludDMyX3QpZW5jIHwgKHVpbnQzMl90KWFzIHwgKHVpbnQzMl90KW1vZGU7CisKKyAgICAvKiBXcml0ZSB0aGUgbW9kZSByZWdpc3RlciB0byB0aGUgaGFyZHdhcmUuICovCisgICAgYmFzZS0+TUQgPSBtb2RlUmVnOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIExUQyBmb3Igc3ltbWV0cmljIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24uIE1vZGUgaXMgc2V0IHRvIFVQREFURS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSA4LCAxNiwgMjQsIG9yIDMyLgorICogQHBhcmFtIGFsZyBTeW1tZXRyaWMgYWxnb3JpdGhtCisgKiBAcGFyYW0gbW9kZSBTeW1tZXRyaWMgYmxvY2sgbW9kZQorICogQHBhcmFtIGVuYyBFbmNyeXB0L2RlY3J5cHQgY29udHJvbAorICogQHJldHVybiBTdGF0dXMKKyAqLworc3RhdHVzX3QgbHRjX3N5bW1ldHJpY191cGRhdGUoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWxnb3JpdGhtX3QgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfc3ltbWV0cmljX2FsZ190IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9lbmNyeXB0X3QgZW5jKQoreworICAgIHJldHVybiBsdGNfc3ltbWV0cmljX2FsZ19zdGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGFsZywgbW9kZSwgZW5jLCBrTFRDX01vZGVVcGRhdGUpOworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX0dDTSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19HQ00KKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBMVEMgZm9yIHN5bW1ldHJpYyBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uLiBNb2RlIGlzIHNldCB0byBGSU5BTElaRS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSA4LCAxNiwgMjQsIG9yIDMyLgorICogQHBhcmFtIGFsZyBTeW1tZXRyaWMgYWxnb3JpdGhtCisgKiBAcGFyYW0gbW9kZSBTeW1tZXRyaWMgYmxvY2sgbW9kZQorICogQHBhcmFtIGVuYyBFbmNyeXB0L2RlY3J5cHQgY29udHJvbAorICogQHJldHVybiBTdGF0dXMKKyAqLworc3RhdGljIHN0YXR1c190IGx0Y19zeW1tZXRyaWNfZmluYWwoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWxnb3JpdGhtX3QgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfc3ltbWV0cmljX2FsZ190IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9lbmNyeXB0X3QgZW5jKQoreworICAgIHJldHVybiBsdGNfc3ltbWV0cmljX2FsZ19zdGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGFsZywgbW9kZSwgZW5jLCBrTFRDX01vZGVGaW5hbGl6ZSk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19HQ00gKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIExUQyBmb3Igc3ltbWV0cmljIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24uIE1vZGUgaXMgc2V0IHRvIElOSVRJQUxJWkUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgOCwgMTYsIDI0LCBvciAzMi4KKyAqIEBwYXJhbSBhbGcgU3ltbWV0cmljIGFsZ29yaXRobQorICogQHBhcmFtIG1vZGUgU3ltbWV0cmljIGJsb2NrIG1vZGUKKyAqIEBwYXJhbSBlbmMgRW5jcnlwdC9kZWNyeXB0IGNvbnRyb2wKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfc3ltbWV0cmljX2luaXQoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWxnb3JpdGhtX3QgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfZW5jcnlwdF90IGVuYykKK3sKKyAgICByZXR1cm4gbHRjX3N5bW1ldHJpY19hbGdfc3RhdGUoYmFzZSwga2V5LCBrZXlTaXplLCBhbGcsIG1vZGUsIGVuYywga0xUQ19Nb2RlSW5pdCk7Cit9CisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBMVEMgZm9yIHN5bW1ldHJpYyBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uLiBNb2RlIGlzIHNldCB0byBJTklUSUFMSVpFL0ZJTkFMSVpFLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDgsIDE2LCAyNCwgb3IgMzIuCisgKiBAcGFyYW0gYWxnIFN5bW1ldHJpYyBhbGdvcml0aG0KKyAqIEBwYXJhbSBtb2RlIFN5bW1ldHJpYyBibG9jayBtb2RlCisgKiBAcGFyYW0gZW5jIEVuY3J5cHQvZGVjcnlwdCBjb250cm9sCisgKiBAcmV0dXJuIFN0YXR1cworICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX3N5bW1ldHJpY19pbml0X2ZpbmFsKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2FsZ29yaXRobV90IGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfc3ltbWV0cmljX2FsZ190IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX2VuY3J5cHRfdCBlbmMpCit7CisgICAgcmV0dXJuIGx0Y19zeW1tZXRyaWNfYWxnX3N0YXRlKGJhc2UsIGtleSwga2V5U2l6ZSwgYWxnLCBtb2RlLCBlbmMsIGtMVENfTW9kZUluaXRGaW5hbCk7Cit9CisKK3ZvaWQgbHRjX3N5bW1ldHJpY19wcm9jZXNzKExUQ19UeXBlICpiYXNlLCB1aW50MzJfdCBpblNpemUsIGNvbnN0IHVpbnQ4X3QgKippbkRhdGEsIHVpbnQ4X3QgKipvdXREYXRhKQoreworICAgIHVpbnQzMl90IG91dFNpemU7CisgICAgdWludDMyX3QgZmlmb0RhdGE7CisgICAgdWludDMyX3QgZmlmb1N0YXR1czsKKworICAgIHJlZ2lzdGVyIGNvbnN0IHVpbnQ4X3QgKmluID0gKmluRGF0YTsKKyAgICByZWdpc3RlciB1aW50OF90ICpvdXQgPSAqb3V0RGF0YTsKKworICAgIG91dFNpemUgPSBpblNpemU7CisgICAgd2hpbGUgKChvdXRTaXplID4gMCkgfHwgKGluU2l6ZSA+IDApKQorICAgIHsKKyAgICAgICAgZmlmb1N0YXR1cyA9IGJhc2UtPkZJRk9TVEE7CisKKyAgICAgICAgLyogQ2hlY2sgb3V0cHV0IEZJRk8gbGV2ZWwgdG8gbWFrZSBzdXJlIHRoZXJlIGlzIGF0IGxlYXN0IGFuIGVudHJ5CisgICAgICAgICAqIHJlYWR5IHRvIGJlIHJlYWQuICovCisgICAgICAgIGlmIChmaWZvU3RhdHVzICYgTFRDX0ZJRk9TVEFfT0ZMX01BU0spCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFJlYWQgZGF0YSBmcm9tIHRoZSBvdXRwdXQgRklGTy4gKi8KKyAgICAgICAgICAgIGlmIChvdXRTaXplID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3V0U2l6ZSA+PSBzaXplb2YodWludDMyX3QpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbHRjX3NldF91bmFsaWduZWRfZnJvbV93b3JkKGJhc2UtPk9GSUZPLCBvdXQpOworICAgICAgICAgICAgICAgICAgICBvdXQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgICAgICAgICAgICAgb3V0U2l6ZSAtPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIC8qIChvdXRTaXplID4gMCkgJiYgKG91dFNpemUgPCA0KSAqLworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmlmb0RhdGEgPSBiYXNlLT5PRklGTzsKKyAgICAgICAgICAgICAgICAgICAgbHRjX21lbWNweShvdXQsICZmaWZvRGF0YSwgb3V0U2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIG91dCArPSBvdXRTaXplOworICAgICAgICAgICAgICAgICAgICBvdXRTaXplID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayBpbnB1dCBGSUZPIHN0YXR1cyB0byBzZWUgaWYgaXQgaXMgZnVsbC4gIFdlIGNhbgorICAgICAgICAgKiBvbmx5IHdyaXRlIG1vcmUgZGF0YSB3aGVuIGJvdGggaW5wdXQgYW5kIG91dHB1dCBGSUZPcyBhcmUgbm90IGF0IGEgZnVsbCBzdGF0ZS4KKyAgICAgICAgICogQXQgdGhlIHNhbWUgdGltZSB3ZSBhcmUgc3VyZSBPdXRwdXQgRklGTyBpcyBub3QgZnVsbCBiZWNhdXNlIHdlIGhhdmUgcG9wZWQgYXQgbGVhc3Qgb25lIGVudHJ5CisgICAgICAgICAqIGJ5IHRoZSB3aGlsZSBsb29wIGFib3ZlLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCEoZmlmb1N0YXR1cyAmIExUQ19GSUZPU1RBX0lGRl9NQVNLKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ29weSBkYXRhIHRvIHRoZSBpbnB1dCBGSUZPLgorICAgICAgICAgICAgICogRGF0YSBjYW4gb25seSBiZSBjb3BpZWQgb25lIHdvcmQgYXQgYSB0aW1lLCBzbyBwYWQgdGhlIGRhdGEKKyAgICAgICAgICAgICAqIGFwcHJvcHJpYXRlbHkgaWYgaXQgaXMgbGVzcyB0aGFuIHRoaXMgc2l6ZS4gKi8KKyAgICAgICAgICAgIGlmIChpblNpemUgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpblNpemUgPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UtPklGSUZPID0gbHRjX2dldF93b3JkX2Zyb21fdW5hbGlnbmVkKGluKTsKKyAgICAgICAgICAgICAgICAgICAgaW5TaXplIC09IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICAgICAgICAgIGluICs9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgLyogKGluU2l6ZSA+IDApICYmIChpblNpemUgPCA0KSAqLworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmlmb0RhdGEgPSAwOworICAgICAgICAgICAgICAgICAgICBsdGNfbWVtY3B5KCZmaWZvRGF0YSwgaW4sIGluU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGJhc2UtPklGSUZPID0gZmlmb0RhdGE7CisgICAgICAgICAgICAgICAgICAgIGluICs9IGluU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaW5TaXplID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgKmluRGF0YSA9IGluOworICAgICpvdXREYXRhID0gb3V0OworfQorCisvKiEKKyAqIEBicmllZiBQcm9jZXNzZXMgc3ltbWV0cmljIGRhdGEgdGhyb3VnaCBMVEMgQUVTIGFuZCBERVMgZW5naW5lcy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBpbkRhdGEgSW5wdXQgZGF0YQorICogQHBhcmFtIGluU2l6ZSBTaXplIG9mIGlucHV0IGRhdGEsIGluIGJ5dGVzCisgKiBAcGFyYW0gb3V0RGF0YSBPdXRwdXQgZGF0YQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IGx0Y19zeW1tZXRyaWNfcHJvY2Vzc19kYXRhKExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICppbkRhdGEsIHVpbnQzMl90IGluU2l6ZSwgdWludDhfdCAqb3V0RGF0YSkKK3sKKyAgICB1aW50MzJfdCBsYXN0U2l6ZTsKKworICAgIGlmICgoIWluRGF0YSkgfHwgKCFvdXREYXRhKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBXcml0ZSB0aGUgZGF0YSBzaXplLiAqLworICAgIGJhc2UtPkRTID0gaW5TaXplOworCisgICAgLyogU3BsaXQgdGhlIGluU2l6ZSBpbnRvIGZ1bGwgMTYtYnl0ZSBjaHVua3MgYW5kIGxhc3QgaW5jb21wbGV0ZSBibG9jayBkdWUgdG8gTFRDIEFFUyBPRklGTyBlcnJhdGEgKi8KKyAgICBpZiAoaW5TaXplIDw9IDE2dSkKKyAgICB7CisgICAgICAgIGxhc3RTaXplID0gaW5TaXplOworICAgICAgICBpblNpemUgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBQcm9jZXNzIGFsbCAxNi1ieXRlIGRhdGEgY2h1bmtzLiAqLworICAgICAgICBsYXN0U2l6ZSA9IGluU2l6ZSAlIDE2dTsKKyAgICAgICAgaWYgKGxhc3RTaXplID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhc3RTaXplID0gMTY7CisgICAgICAgICAgICBpblNpemUgLT0gMTY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpblNpemUgLT0gbGFzdFNpemU7IC8qIGluU2l6ZSB3aWxsIGJlIHJvdW5kZWQgZG93biB0byAxNiBieXRlIGJvdW5kYXJ5LiByZW1haW5pbmcgYnl0ZXMgaW4gbGFzdFNpemUgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIGx0Y19zeW1tZXRyaWNfcHJvY2VzcyhiYXNlLCBpblNpemUsICZpbkRhdGEsICZvdXREYXRhKTsKKyAgICBsdGNfc3ltbWV0cmljX3Byb2Nlc3MoYmFzZSwgbGFzdFNpemUsICZpbkRhdGEsICZvdXREYXRhKTsKKyAgICByZXR1cm4gbHRjX3dhaXQoYmFzZSk7Cit9CisKKy8qIQorICogQGJyaWVmIFNwbGl0cyB0aGUgTFRDIGpvYiBpbnRvIHNlc3Npb25zLiBVc2VkIGZvciBDQkMsIENUUiwgQ0ZCLCBPRkIgY2lwaGVyIGJsb2NrIG1vZGVzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGluRGF0YSBJbnB1dCBkYXRhIHRvIHByb2Nlc3MuCisgKiBAcGFyYW0gaW5TaXplIElucHV0IHNpemUgb2YgdGhlIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBvdXREYXRhIE91dHB1dCBkYXRhIGJ1ZmZlci4KKyAqLworc3RhdGljIHN0YXR1c190IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnMoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbkRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpblNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXREYXRhKQoreworICAgIHVpbnQzMl90IHN6OworICAgIHN0YXR1c190IHJldHZhbDsKKyAgICBsdGNfbW9kZV90IG1vZGVSZWc7IC8qIHJlYWQgYW5kIHdyaXRlIExUQyBtb2RlIHJlZ2lzdGVyICovCisKKyAgICBzeiA9IExUQ19GSUZPX1NaX01BWF9ET1dOX0FMR047CisgICAgbW9kZVJlZyA9IGJhc2UtPk1EOworICAgIHJldHZhbCA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgIHdoaWxlIChpblNpemUpCisgICAgeworICAgICAgICBpZiAoaW5TaXplIDw9IHN6KQorICAgICAgICB7CisgICAgICAgICAgICByZXR2YWwgPSBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfZGF0YShiYXNlLCBpbkRhdGEsIGluU2l6ZSwgb3V0RGF0YSk7CisgICAgICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5TaXplID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHZhbCA9IGx0Y19zeW1tZXRyaWNfcHJvY2Vzc19kYXRhKGJhc2UsIGluRGF0YSwgc3osIG91dERhdGEpOworICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluRGF0YSArPSBzejsKKyAgICAgICAgICAgIGluU2l6ZSAtPSBzejsKKyAgICAgICAgICAgIG91dERhdGEgKz0gc3o7CisgICAgICAgICAgICBiYXNlLT5NRCA9IG1vZGVSZWc7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgbHRjX21vdmVfYmxvY2tfdG9faWZpZm8oTFRDX1R5cGUgKmJhc2UsIGNvbnN0IGx0Y194Y21fYmxvY2tfdCAqYmxrLCB1aW50MzJfdCBudW1fYnl0ZXMpCit7CisgICAgdWludDMyX3QgaSA9IDA7CisgICAgdWludDMyX3Qgd29yZHM7CisKKyAgICB3b3JkcyA9IG51bV9ieXRlcyAvIDR1OworICAgIGlmIChudW1fYnl0ZXMgJSA0dSkKKyAgICB7CisgICAgICAgIHdvcmRzKys7CisgICAgfQorCisgICAgaWYgKHdvcmRzID4gNCkKKyAgICB7CisgICAgICAgIHdvcmRzID0gNDsKKyAgICB9CisKKyAgICB3aGlsZSAoaSA8IHdvcmRzKQorICAgIHsKKyAgICAgICAgaWYgKDBVID09IChiYXNlLT5GSUZPU1RBICYgTFRDX0ZJRk9TVEFfSUZGX01BU0spKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDb3B5IGRhdGEgdG8gdGhlIGlucHV0IEZJRk8uICovCisgICAgICAgICAgICBiYXNlLT5JRklGTyA9IGJsay0+d1tpKytdOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBsdGNfbW92ZV90b19pZmlmbyhMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgZGF0YVNpemUpCit7CisgICAgbHRjX3hjbV9ibG9ja190IGJsazsKKyAgICBsdGNfeGNtX2Jsb2NrX3QgYmxrWmVybyA9IHt7MHgwdSwgMHgwdSwgMHgwdSwgMHgwdX19OworCisgICAgd2hpbGUgKGRhdGFTaXplKQorICAgIHsKKyAgICAgICAgaWYgKGRhdGFTaXplID4gMTZ1KQorICAgICAgICB7CisgICAgICAgICAgICBsdGNfbWVtY3B5KCZibGssIGRhdGEsIDE2dSk7CisgICAgICAgICAgICBkYXRhU2l6ZSAtPSAxNnU7CisgICAgICAgICAgICBkYXRhICs9IDE2dTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGx0Y19tZW1jcHkoJmJsaywgJmJsa1plcm8sIHNpemVvZihsdGNfeGNtX2Jsb2NrX3QpKTsgLyogbWVtc2V0IGJsayB0byB6ZXJvZXMgKi8KKyAgICAgICAgICAgIGx0Y19tZW1jcHkoJmJsaywgZGF0YSwgZGF0YVNpemUpOworICAgICAgICAgICAgZGF0YVNpemUgPSAwOworICAgICAgICB9CisgICAgICAgIGx0Y19tb3ZlX2Jsb2NrX3RvX2lmaWZvKGJhc2UsICZibGssIHNpemVvZihsdGNfeGNtX2Jsb2NrX3QpKTsKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIFByb2Nlc3NlcyBzeW1tZXRyaWMgZGF0YSB0aHJvdWdoIExUQyBBRVMgaW4gbXVsdGlwbGUgc2Vzc2lvbnMuCisgKgorICogU3BlY2lmaWMgZm9yIEFFUyBDQ00gYW5kIEdDTSBtb2RlcyBhcyB0aGV5IG5lZWQgdG8gdXBkYXRlIG1vZGUgcmVnaXN0ZXIuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaW5EYXRhIElucHV0IGRhdGEKKyAqIEBwYXJhbSBpblNpemUgU2l6ZSBvZiBpbnB1dCBkYXRhLCBpbiBieXRlcworICogQHBhcmFtIG91dERhdGEgT3V0cHV0IGRhdGEKKyAqIEBwYXJhbSBsYXN0QXMgVGhlIExUQyBBbGdvcml0aG0gc3RhdGUgdG8gYmUgc2V0IHN1cCBmb3IgbGFzdCBibG9jayBkdXJpbmcgbWVzc2FnZSBwcm9jZXNzaW5nIGluIG11bHRpcGxlIHNlc3Npb25zLgorICogICAgICAgICAgICAgICBGb3IgQ0NNIGl0IGlzIGtMVENfTW9kZUZpbmFsaXplLiBGb3IgR0NNIGl0IGlzIGtMVENfTW9kZUluaXRGaW5hbC4KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGFfbXVsdGlwbGUoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW5EYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXREYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX3QgbW9kZVJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9hbGdvcml0aG1fc3RhdGVfdCBsYXN0QXMpCit7CisgICAgdWludDMyX3QgZmlmb0NvbnN1bWVkOworICAgIHVpbnQzMl90IGxhc3RTaXplOworICAgIHVpbnQzMl90IHN6OworICAgIHVpbnQzMl90IG1heF9sdGNfZmlmb19zaXplOworICAgIGx0Y19tb2RlX2FsZ29yaXRobV9zdGF0ZV90IGZzbTsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBpZiAoKCFpbkRhdGEpIHx8ICghb3V0RGF0YSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaWYgKCEoKGtMVENfTW9kZUZpbmFsaXplID09IGxhc3RBcykgfHwgKGtMVENfTW9kZUluaXRGaW5hbCA9PSBsYXN0QXMpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBpZiAoMCA9PSBpblNpemUpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworICAgIH0KKworICAgIGlmIChpblNpemUgPD0gMTZ1KQorICAgIHsKKyAgICAgICAgZnNtID0gbGFzdEFzOworICAgICAgICBsYXN0U2l6ZSA9IGluU2l6ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZnNtID0gKGx0Y19tb2RlX2FsZ29yaXRobV9zdGF0ZV90KSgKKyAgICAgICAgICAgIG1vZGVSZWcgJgorICAgICAgICAgICAgTFRDX01EX0FTX01BU0spOyAvKiB0aGlzIHdpbGwgYmUgZWl0aGVyIGtMVENfTW9kZUluaXQgb3Iga0xUQ19Nb2RlVXBkYXRlLCBiYXNlZCBvbiBwcmlvciBwcm9jZXNzaW5nICovCisKKyAgICAgICAgLyogUHJvY2VzcyBhbGwgMTYtYnl0ZSBkYXRhIGNodW5rcy4gKi8KKyAgICAgICAgbGFzdFNpemUgPSBpblNpemUgJSAxNnU7CisgICAgICAgIGlmIChsYXN0U2l6ZSA9PSAwdSkKKyAgICAgICAgeworICAgICAgICAgICAgbGFzdFNpemUgPSAxNnU7CisgICAgICAgICAgICBpblNpemUgLT0gMTZ1OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaW5TaXplIC09IGxhc3RTaXplOyAvKiBpblNpemUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gMTYgYnl0ZSBib3VuZGFyeS4gcmVtYWluaW5nIGJ5dGVzIGluIGxhc3RTaXplICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICBtYXhfbHRjX2ZpZm9fc2l6ZSA9IExUQ19GSUZPX1NaX01BWF9ET1dOX0FMR047CisgICAgZmlmb0NvbnN1bWVkID0gYmFzZS0+RFM7CisKKyAgICB3aGlsZSAobGFzdFNpemUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGZzbSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBrTFRDX01vZGVVcGRhdGU6CisgICAgICAgICAgICBjYXNlIGtMVENfTW9kZUluaXQ6CisgICAgICAgICAgICAgICAgd2hpbGUgKGluU2l6ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpblNpemUgPiAobWF4X2x0Y19maWZvX3NpemUgLSBmaWZvQ29uc3VtZWQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzeiA9IChtYXhfbHRjX2ZpZm9fc2l6ZSAtIGZpZm9Db25zdW1lZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzeiA9IGluU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBiYXNlLT5EUyA9IHN6OworICAgICAgICAgICAgICAgICAgICBsdGNfc3ltbWV0cmljX3Byb2Nlc3MoYmFzZSwgc3osICZpbkRhdGEsICZvdXREYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaW5TaXplIC09IHN6OworICAgICAgICAgICAgICAgICAgICBmaWZvQ29uc3VtZWQgPSAwOworCisgICAgICAgICAgICAgICAgICAgIC8qIGFmdGVyIHdlIGNvbXBsZXRlZCBJTklUSUFMSVpFIGpvYiwgYXJlIHRoZXJlIHN0aWxsIGFueSBkYXRhIGxlZnQ/ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChpblNpemUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZzbSA9IGtMVENfTW9kZVVwZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGx0Y193YWl0KGJhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSBzdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVSZWcgJj0gfkxUQ19NRF9BU19NQVNLOworICAgICAgICAgICAgICAgICAgICAgICAgbW9kZVJlZyB8PSAodWludDMyX3QpZnNtOworICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZnNtID0gbGFzdEFzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIGtMVENfTW9kZUZpbmFsaXplOgorICAgICAgICAgICAgY2FzZSBrTFRDX01vZGVJbml0RmluYWw6CisgICAgICAgICAgICAgICAgLyogcHJvY2VzcyBsYXN0IGJsb2NrIGluIEZJTkFMSVpFICovCisKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBsdGNfd2FpdChiYXNlKTsKKyAgICAgICAgICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHN0YXR1cykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbW9kZVJlZyAmPSB+TFRDX01EX0FTX01BU0s7CisgICAgICAgICAgICAgICAgbW9kZVJlZyB8PSAodWludDMyX3QpbGFzdEFzOworICAgICAgICAgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZzsKKworICAgICAgICAgICAgICAgIGJhc2UtPkRTID0gbGFzdFNpemU7CisgICAgICAgICAgICAgICAgbHRjX3N5bW1ldHJpY19wcm9jZXNzKGJhc2UsIGxhc3RTaXplLCAmaW5EYXRhLCAmb3V0RGF0YSk7CisgICAgICAgICAgICAgICAgbGFzdFNpemUgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdHVzID0gbHRjX3dhaXQoYmFzZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworLyohCisgKiBAYnJpZWYgUmVjZWl2ZXMgTUFDIGNvbXBhcmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhIHN1Yi1wcm9jZXNzIG9mIENDTSBhbmQgR0NNIGRlY3J5cHRpb24uCisgKiBJdCBjb21wYXJlcyByZWNlaXZlZCBNQUMgd2l0aCB0aGUgTUFDIGNvbXB1dGVkIGR1cmluZyBkZWNyeXB0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHRhZyBSZWNlaXZlZCBNQUMuCisgKiBAcGFyYW0gdGFnU2l6ZSBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHJlY2VpdmVkIE1BQy4KKyAqIEBwYXJhbSBtb2RlUmVnIExUQyBNb2RlIFJlZ2lzdGVyIGN1cnJlbnQgdmFsdWUuIEl0IGlzIG1vZGlmaWVkIGFuZCB3cml0dGVuIHRvIExUQyBNb2RlIFJlZ2lzdGVyLgorICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX2Flc19yZWNlaXZlZF9tYWNfY29tcGFyZShMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqdGFnLCB1aW50MzJfdCB0YWdTaXplLCBsdGNfbW9kZV90IG1vZGVSZWcpCit7CisgICAgbHRjX3hjbV9ibG9ja190IGJsayA9IHt7MHgwdSwgMHgwdSwgMHgwdSwgMHgwdX19OworCisgICAgYmFzZS0+Q1cgPSBrTFRDX0NsZWFyRGF0YVNpemU7CisgICAgYmFzZS0+U1RBID0ga0xUQ19TdGF0dXNEb25lSXNyOworCisgICAgbW9kZVJlZyAmPSB+TFRDX01EX0FTX01BU0s7CisgICAgbW9kZVJlZyB8PSAodWludDMyX3Qpa0xUQ19Nb2RlVXBkYXRlIHwgTFRDX01EX0lDVl9URVNUX01BU0s7CisgICAgYmFzZS0+TUQgPSBtb2RlUmVnOworCisgICAgYmFzZS0+RFMgPSAwdTsKKyAgICBiYXNlLT5JQ1ZTID0gdGFnU2l6ZTsKKyAgICBsdGNfbWVtY3B5KCZibGsuYlswXSwgJnRhZ1swXSwgdGFnU2l6ZSk7CisKKyAgICBsdGNfbW92ZV9ibG9ja190b19pZmlmbyhiYXNlLCAmYmxrLCB0YWdTaXplKTsKKyAgICByZXR1cm4gbHRjX3dhaXQoYmFzZSk7Cit9CisKKy8qIQorICogQGJyaWVmIFByb2Nlc3NlcyB0YWcgZHVyaW5nIEFFUyBHQ00gYW5kIENDTS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgc3ViLXByb2Nlc3Mgb2YgQ0NNIGFuZCBHQ00gZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbi4KKyAqIEZvciBlbmNyeXB0aW9uLCBpdCB3cml0ZXMgY29tcHV0ZWQgTUFDIHRvIHRoZSBvdXRwdXQgdGFnLgorICogRm9yIGRlY3J5cHRpb24sIGl0IGNvbXBhcmVzIHRoZSByZWNlaXZlZCBNQUMgd2l0aCB0aGUgY29tcHV0ZWQgTUFDLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtW2luLG91dF0gdGFnIE91dHB1dCBjb21wdXRlZCBNQUMgZHVyaW5nIGVuY3J5cHRpb24gb3IgSW5wdXQgcmVjZWl2ZWQgTUFDIGR1cmluZyBkZWNyeXB0aW9uLgorICogQHBhcmFtIHRhZ1NpemUgU2l6ZSBvZiBNQUMgYnVmZmVyIGluIGJ5dGVzLgorICogQHBhcmFtIG1vZGVSZWcgTFRDIE1vZGUgUmVnaXN0ZXIgY3VycmVudCB2YWx1ZS4gSXQgaXMgY2hlY2tlZCB0byByZWFkIEVuYy9EZWMgYml0LgorICogICAgICAgICAgICAgICAgIEl0IGlzIG1vZGlmaWVkIGFuZCB3cml0dGVuIHRvIExUQyBNb2RlIFJlZ2lzdGVyIGR1cmluZyBkZWNyeXB0aW9uLgorICogQHBhcmFtIGN0eCBJbmRleCB0byBMVEMgY29udGV4dCByZWdpc3RlcnMgd2l0aCBjb21wdXRlZCBNQUMgZm9yIGVuY3J5cHRpb24gcHJvY2Vzcy4KKyAqLworc3RhdGljIHN0YXR1c190IGx0Y19hZXNfcHJvY2Vzc190YWcoTFRDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgKnRhZywgdWludDMyX3QgdGFnU2l6ZSwgbHRjX21vZGVfdCBtb2RlUmVnLCB1aW50MzJfdCBjdHgpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworICAgIGlmICh0YWcpCisgICAgeworICAgICAgICAvKiBGb3IgZGVjcnlwdCwgY29tcGFyZSByZWNlaXZlZCBNQUMgd2l0aCB0aGUgY29tcHV0ZWQgTUFDLiAqLworICAgICAgICBpZiAoa0xUQ19Nb2RlRGVjcnlwdCA9PSAobW9kZVJlZyAmIExUQ19NRF9FTkNfTUFTSykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IGx0Y19hZXNfcmVjZWl2ZWRfbWFjX2NvbXBhcmUoYmFzZSwgdGFnLCB0YWdTaXplLCBtb2RlUmVnKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8qIEZTTF9BRVNfR0NNX1RZUEVfRU5DUllQVCAqLworICAgICAgICB7CisgICAgICAgICAgICAvKiBGb3IgZW5jcnlwdGlvbiwgd3JpdGUgdGhlIGNvbXB1dGVkIGFuZCBlbmNyeXB0ZWQgTUFDIHRvIHVzZXIgYnVmZmVyICovCisgICAgICAgICAgICBsdGNfZ2V0X2NvbnRleHQoYmFzZSwgJnRhZ1swXSwgdGFnU2l6ZSwgY3R4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTFRDIENvbW1vbiBjb2RlIHB1YmxpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgTFRDX0luaXQoTFRDX1R5cGUgKmJhc2UpCit7CisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIHVuZ2F0ZSBjbG9jayAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKGtDTE9DS19MdGMwKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKwordm9pZCBMVENfRGVpbml0KExUQ19UeXBlICpiYXNlKQoreworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBnYXRlIGNsb2NrICovCisgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKGtDTE9DS19MdGMwKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19EUEFNUykgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19EUEFNUwordm9pZCBMVENfU2V0RHBhTWFza1NlZWQoTFRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+RFBBTVMgPSBtYXNrOworICAgIC8qIHNlY29uZCB3cml0ZSBhcyB3b3JrYXJvdW5kIGZvciBEUEEgbWFzayByZS1zZWVkIGVycmF0YSAqLworICAgIGJhc2UtPkRQQU1TID0gbWFzazsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX0RQQU1TICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBRVMgQ29kZSBzdGF0aWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RhdHVzX3QgbHRjX2Flc19kZWNyeXB0X2VjYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hZXNfa2V5X3Qga2V5VHlwZSkKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVFQ0IsIGtMVENfTW9kZURlY3J5cHQpOworCisgICAgLyogc2V0IERLIGJpdCBpbiB0aGUgTFRDIE1vZGUgUmVnaXN0ZXIgQUFJIGZpZWxkIGZvciBkaXJlY3RseSBsb2FkZWQgZGVjcnlwdCBrZXlzICovCisgICAgaWYgKGtleVR5cGUgPT0ga0xUQ19EZWNyeXB0S2V5KQorICAgIHsKKyAgICAgICAgYmFzZS0+TUQgfD0gKDFVIDw8IGtMVENfTW9kZVJlZ0JpdFNoaWZ0REspOworICAgIH0KKworICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICByZXR2YWwgPSBsdGNfcHJvY2Vzc19tZXNzYWdlX2luX3Nlc3Npb25zKGJhc2UsICZjaXBoZXJ0ZXh0WzBdLCBzaXplLCAmcGxhaW50ZXh0WzBdKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQUVTIENvZGUgcHVibGljCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdHVzX3QgTFRDX0FFU19HZW5lcmF0ZURlY3J5cHRLZXkoTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmVuY3J5cHRLZXksIHVpbnQ4X3QgKmRlY3J5cHRLZXksIHVpbnQzMl90IGtleVNpemUpCit7CisgICAgdWludDhfdCBwbGFpbnRleHRbTFRDX0FFU19CTE9DS19TSVpFXTsKKyAgICB1aW50OF90IGNpcGhlcnRleHRbTFRDX0FFU19CTE9DS19TSVpFXTsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBpZiAoIWx0Y19jaGVja19rZXlfc2l6ZShrZXlTaXplKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBFQ0IgZGVjcnlwdCB3aXRoIGVuY3J5cHQga2V5IHdpbGwgY29udmVydCB0aGUga2V5IGluIExUQyBjb250ZXh0IGludG8gZGVjcnlwdCBmb3JtIG9mIHRoZSBrZXkgKi8KKyAgICBzdGF0dXMgPSBsdGNfYWVzX2RlY3J5cHRfZWNiKGJhc2UsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgTFRDX0FFU19CTE9DS19TSVpFLCBlbmNyeXB0S2V5LCBrZXlTaXplLCBrTFRDX0VuY3J5cHRLZXkpOworICAgIC8qIG5vdyB0aGVyZSBpcyBkZWNyeXB0IGZvcm0gb2YgdGhlIGtleSBpbiB0aGUgTFRDIGNvbnRleHQsIHNvIHRha2UgaXQgKi8KKyAgICBsdGNfZ2V0X2tleShiYXNlLCBkZWNyeXB0S2V5LCBrZXlTaXplKTsKKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX0FFU19FbmNyeXB0RWNiKAorICAgIExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsIHVpbnQ4X3QgKmNpcGhlcnRleHQsIHVpbnQzMl90IHNpemUsIGNvbnN0IHVpbnQ4X3QgKmtleSwgdWludDMyX3Qga2V5U2l6ZSkKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7CisKKyAgICBpZiAoIWx0Y19jaGVja19rZXlfc2l6ZShrZXlTaXplKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisgICAgLyogRUNCIG1vZGUsIHNpemUgbXVzdCBiZSAxNi1ieXRlIG11bHRpcGxlICovCisgICAgaWYgKChzaXplIDwgMTZ1KSB8fCAoc2l6ZSAlIDE2dSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSBhbGdvcml0aG0gc3RhdGUuICovCisgICAgbHRjX3N5bW1ldHJpY191cGRhdGUoYmFzZSwga2V5LCBrZXlTaXplLCBrTFRDX0FsZ29yaXRobUFFUywga0xUQ19Nb2RlRUNCLCBrTFRDX01vZGVFbmNyeXB0KTsKKworICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICByZXR2YWwgPSBsdGNfcHJvY2Vzc19tZXNzYWdlX2luX3Nlc3Npb25zKGJhc2UsICZwbGFpbnRleHRbMF0sIHNpemUsICZjaXBoZXJ0ZXh0WzBdKTsKKyAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIGZhbHNlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0dXNfdCBMVENfQUVTX0RlY3J5cHRFY2IoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWVzX2tleV90IGtleVR5cGUpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgaWYgKCFsdGNfY2hlY2tfa2V5X3NpemUoa2V5U2l6ZSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorICAgIC8qIEVDQiBtb2RlLCBzaXplIG11c3QgYmUgMTYtYnl0ZSBtdWx0aXBsZSAqLworICAgIGlmICgoc2l6ZSA8IDE2dSkgfHwgKHNpemUgJSAxNnUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIHN0YXR1cyA9IGx0Y19hZXNfZGVjcnlwdF9lY2IoYmFzZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBrZXksIGtleVNpemUsIGtleVR5cGUpOworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19BRVNfRW5jcnlwdENiYyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0FFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSkKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7CisKKyAgICBpZiAoIWx0Y19jaGVja19rZXlfc2l6ZShrZXlTaXplKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDQkMgbW9kZSwgc2l6ZSBtdXN0IGJlIDE2LWJ5dGUgbXVsdGlwbGUgKi8KKyAgICBpZiAoKHNpemUgPCAxNnUpIHx8IChzaXplICUgMTZ1KSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVDQkMsIGtMVENfTW9kZUVuY3J5cHQpOworCisgICAgLyogV3JpdGUgSVYgZGF0YSB0byB0aGUgY29udGV4dCByZWdpc3Rlci4gKi8KKyAgICBsdGNfc2V0X2NvbnRleHQoYmFzZSwgJml2WzBdLCBMVENfQUVTX0lWX1NJWkUsIDApOworCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIHJldHZhbCA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnMoYmFzZSwgJnBsYWludGV4dFswXSwgc2l6ZSwgJmNpcGhlcnRleHRbMF0pOworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXR1c190IExUQ19BRVNfRGVjcnlwdENiYyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0FFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWVzX2tleV90IGtleVR5cGUpCit7CisgICAgc3RhdHVzX3QgcmV0dmFsOworCisgICAgaWYgKCFsdGNfY2hlY2tfa2V5X3NpemUoa2V5U2l6ZSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorICAgIC8qIENCQyBtb2RlLCBzaXplIG11c3QgYmUgMTYtYnl0ZSBtdWx0aXBsZSAqLworICAgIGlmICgoc2l6ZSA8IDE2dSkgfHwgKHNpemUgJSAxNnUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIHNldCBESyBiaXQgaW4gdGhlIExUQyBNb2RlIFJlZ2lzdGVyIEFBSSBmaWVsZCBmb3IgZGlyZWN0bHkgbG9hZGVkIGRlY3J5cHQga2V5cyAqLworICAgIGlmIChrZXlUeXBlID09IGtMVENfRGVjcnlwdEtleSkKKyAgICB7CisgICAgICAgIGJhc2UtPk1EIHw9ICgxVSA8PCBrTFRDX01vZGVSZWdCaXRTaGlmdERLKTsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVDQkMsIGtMVENfTW9kZURlY3J5cHQpOworCisgICAgLyogV3JpdGUgSVYgZGF0YSB0byB0aGUgY29udGV4dCByZWdpc3Rlci4gKi8KKyAgICBsdGNfc2V0X2NvbnRleHQoYmFzZSwgJml2WzBdLCBMVENfQUVTX0lWX1NJWkUsIDApOworCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIHJldHZhbCA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnMoYmFzZSwgJmNpcGhlcnRleHRbMF0sIHNpemUsICZwbGFpbnRleHRbMF0pOworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXR1c190IExUQ19BRVNfQ3J5cHRDdHIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY291bnRlcltMVENfQUVTX0JMT0NLX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY291bnRlcmxhc3RbTFRDX0FFU19CTE9DS19TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnN6TGVmdCkKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7CisgICAgdWludDMyX3QgbGFzdFNpemU7CisKKyAgICBpZiAoIWx0Y19jaGVja19rZXlfc2l6ZShrZXlTaXplKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBsYXN0U2l6ZSA9IDBVOworICAgIGlmIChjb3VudGVybGFzdCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgLyogU3BsaXQgdGhlIHNpemUgaW50byBmdWxsIDE2LWJ5dGUgY2h1bmtzIGFuZCBsYXN0IGluY29tcGxldGUgYmxvY2sgZHVlIHRvIExUQyBBRVMgT0ZJRk8gZXJyYXRhICovCisgICAgICAgIGlmIChzaXplIDw9IDE2VSkKKyAgICAgICAgeworICAgICAgICAgICAgbGFzdFNpemUgPSBzaXplOworICAgICAgICAgICAgc2l6ZSA9IDBVOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogUHJvY2VzcyBhbGwgMTYtYnl0ZSBkYXRhIGNodW5rcy4gKi8KKyAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZSAlIDE2VTsKKyAgICAgICAgICAgIGlmIChsYXN0U2l6ZSA9PSAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsYXN0U2l6ZSA9IDE2VTsKKyAgICAgICAgICAgICAgICBzaXplIC09IDE2VTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzaXplIC09IGxhc3RTaXplOyAvKiBzaXplIHdpbGwgYmUgcm91bmRlZCBkb3duIHRvIDE2IGJ5dGUgYm91bmRhcnkuIHJlbWFpbmluZyBieXRlcyBpbiBsYXN0U2l6ZSAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSBhbGdvcml0aG0gc3RhdGUuICovCisgICAgbHRjX3N5bW1ldHJpY191cGRhdGUoYmFzZSwga2V5LCBrZXlTaXplLCBrTFRDX0FsZ29yaXRobUFFUywga0xUQ19Nb2RlQ1RSLCBrTFRDX01vZGVFbmNyeXB0KTsKKworICAgIC8qIFdyaXRlIGluaXRpYWwgY291bnRlciBkYXRhIHRvIHRoZSBjb250ZXh0IHJlZ2lzdGVyLgorICAgICAqIE5PVEUgdGhlIGNvdW50ZXIgdmFsdWVzIHN0YXJ0IGF0IDQtYnl0ZXMgb2Zmc2V0IGludG8gdGhlIGNvbnRleHQuICovCisgICAgbHRjX3NldF9jb250ZXh0KGJhc2UsICZjb3VudGVyWzBdLCAxNlUsIDRVKTsKKworICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICByZXR2YWwgPSBsdGNfcHJvY2Vzc19tZXNzYWdlX2luX3Nlc3Npb25zKGJhc2UsIGlucHV0LCBzaXplLCBvdXRwdXQpOworICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICB9CisKKyAgICBpbnB1dCArPSBzaXplOworICAgIG91dHB1dCArPSBzaXplOworCisgICAgaWYgKChjb3VudGVybGFzdCAhPSBOVUxMKSAmJiBsYXN0U2l6ZSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgemVyb2VzWzE2XSA9IHswfTsKKyAgICAgICAgbHRjX21vZGVfdCBtb2RlUmVnOworCisgICAgICAgIG1vZGVSZWcgPSAodWludDMyX3Qpa0xUQ19BbGdvcml0aG1BRVMgfCAodWludDMyX3Qpa0xUQ19Nb2RlQ1RSIHwgKHVpbnQzMl90KWtMVENfTW9kZUVuY3J5cHQ7CisgICAgICAgIC8qIFdyaXRlIHRoZSBtb2RlIHJlZ2lzdGVyIHRvIHRoZSBoYXJkd2FyZS4gKi8KKyAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnIHwgKHVpbnQzMl90KWtMVENfTW9kZUZpbmFsaXplOworCisgICAgICAgIC8qIGNvbnRleHQgaXMgcmUtdXNlZCAoQ1RSaSkgKi8KKworICAgICAgICAvKiBQcm9jZXNzIGRhdGEgYW5kIHJldHVybiBzdGF0dXMuICovCisgICAgICAgIHJldHZhbCA9IGx0Y19zeW1tZXRyaWNfcHJvY2Vzc19kYXRhKGJhc2UsIGlucHV0LCBsYXN0U2l6ZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN6TGVmdCkKKyAgICAgICAgeworICAgICAgICAgICAgKnN6TGVmdCA9IDE2VSAtIGxhc3RTaXplOworICAgICAgICB9CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhbGdvcml0aG0gc3RhdGUuICovCisgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZyB8ICh1aW50MzJfdClrTFRDX01vZGVVcGRhdGU7CisKKyAgICAgICAgLyogY29udGV4dCBpcyByZS11c2VkIChDVFJpKSAqLworCisgICAgICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICAgICAgcmV0dmFsID0gbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGEoYmFzZSwgemVyb2VzLCAxNlUsIGNvdW50ZXJsYXN0KTsKKyAgICB9CisgICAgbHRjX2dldF9jb250ZXh0KGJhc2UsICZjb3VudGVyWzBdLCAxNlUsIDRVKTsKKyAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIGZhbHNlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX0dDTSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19HQ00KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHQ00gQ29kZSBzdGF0aWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RhdHVzX3QgbHRjX2Flc19nY21fY2hlY2tfaW5wdXRfYXJncyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5wdXRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXZTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWFkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0YWdTaXplKQoreworICAgIGlmICghYmFzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiB0YWcgY2FuIGJlIE5VTEwgdG8gc2tpcCB0YWcgcHJvY2Vzc2luZyAqLworICAgIGlmICgoIWtleSkgfHwgKGl2U2l6ZSAmJiAoIWl2KSkgfHwgKGFhZFNpemUgJiYgKCFhYWQpKSB8fCAoaW5wdXRTaXplICYmICgoIXNyYykgfHwgKCFkc3QpKSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogb2N0ZXQgbGVuZ3RoIG9mIHRhZyAodGFnU2l6ZSkgbXVzdCBiZSBlbGVtZW50IG9mIDQsOCwxMiwxMywxNCwxNSwxNiAqLworICAgIGlmICgoKHRhZ1NpemUgPiAxNnUpIHx8ICh0YWdTaXplIDwgMTJ1KSkgJiYgKHRhZ1NpemUgIT0gNHUpICYmICh0YWdTaXplICE9IDh1KSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBjaGVjayBpZiBrZXlTaXplIGlzIHN1cHBvcnRlZCAqLworICAgIGlmICghbHRjX2NoZWNrX2tleV9zaXplKGtleVNpemUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIG5vIElWIEFBRCBEQVRBIG1ha2VzIG5vIHNlbnNlICovCisgICAgaWYgKDAgPT0gKGlucHV0U2l6ZSArIGl2U2l6ZSArIGFhZFNpemUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKKy8qIQorICogQGJyaWVmIFByb2Nlc3MgV3JhcHBlciBmb3Igdm9pZCAoKnBmdW5jKShMVENfVHlwZSosIHVpbnQzMl90LCBib29sKS4gU2V0cyBJViBTaXplIHJlZ2lzdGVyLgorICovCitzdGF0aWMgdm9pZCBpdnNpemVfbmV4dChMVENfVHlwZSAqYmFzZSwgdWludDMyX3QgaXZTaXplLCBib29sIGl2X29ubHkpCit7CisgICAgYmFzZS0+SVZTWiA9IExUQ19JVlNaX0lMKGl2X29ubHkpIHwgKChpdlNpemUpJkxUQ19EU19EU19NQVNLKTsKK30KKworLyohCisgKiBAYnJpZWYgUHJvY2VzcyBXcmFwcGVyIGZvciB2b2lkICgqcGZ1bmMpKExUQ19UeXBlKiwgdWludDMyX3QsIGJvb2wpLiBTZXRzIEFBRCBTaXplIHJlZ2lzdGVyLgorICovCitzdGF0aWMgdm9pZCBhYWRzaXplX25leHQoTFRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGFhZFNpemUsIGJvb2wgYWFkX29ubHkpCit7CisgICAgYmFzZS0+QUFEU1ogPSBMVENfQUFEU1pfQUwoYWFkX29ubHkpIHwgKChhYWRTaXplKSZMVENfRFNfRFNfTUFTSyk7Cit9CisKKy8qIQorICogQGJyaWVmIFByb2Nlc3MgSVYgb3IgQUFEIHN0cmluZyBpbiBtdWx0aS1zZXNzaW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGl2IElWIG9yIEFBRCBkYXRhCisgKiBAcGFyYW0gaXZTaXplIFNpemUgaW4gYnl0ZXMgb2YgSVYgb3IgQUFEIGRhdGEKKyAqIEBwYXJhbSBtb2RlUmVnIExUQyBwZXJpcGhlcmFsIE1vZGUgcmVnaXN0ZXIgdmFsdWUKKyAqIEBwYXJhbSBpdl9vbmx5IElWIG9ubHkgb3IgQUFEIG9ubHkgZmxhZworICogQHBhcmFtIHR5cGUgc2VsZWN0cyBiZXR3ZWVuIElWIG9yIEFBRAorICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX2Flc19nY21fcHJvY2Vzc19pdl9hYWQoCisgICAgTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKml2LCB1aW50MzJfdCBpdlNpemUsIGx0Y19tb2RlX3QgbW9kZVJlZywgYm9vbCBpdl9vbmx5LCBpbnQgdHlwZSwgbHRjX21vZGVfdCBtb2RlTGFzdCkKK3sKKyAgICB1aW50MzJfdCBzejsKKyAgICBzdGF0dXNfdCByZXR2YWw7CisgICAgdm9pZCAoKm5leHRfc2l6ZV9mdW5jKShMVENfVHlwZSAqbHRjQmFzZSwgdWludDMyX3QgbmV4dFNpemUsIGJvb2wgYXV0aE9ubHkpOworCisgICAgaWYgKChOVUxMID09IGl2KSB8fCAoaXZTaXplID09IDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIHN6ID0gTFRDX0ZJRk9fU1pfTUFYX0RPV05fQUxHTjsKKyAgICBuZXh0X3NpemVfZnVuYyA9IHR5cGUgPT0gTFRDX0FFU19HQ01fVFlQRV9BQUQgPyBhYWRzaXplX25leHQgOiBpdnNpemVfbmV4dDsKKworICAgIHdoaWxlIChpdlNpemUpCisgICAgeworICAgICAgICBpZiAoaXZTaXplIDwgc3opCisgICAgICAgIHsKKyAgICAgICAgICAgIG1vZGVSZWcgJj0gfkxUQ19NRF9BU19NQVNLOworICAgICAgICAgICAgbW9kZVJlZyB8PSBtb2RlTGFzdDsKKyAgICAgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZzsKKyAgICAgICAgICAgIG5leHRfc2l6ZV9mdW5jKGJhc2UsIGl2U2l6ZSwgaXZfb25seSk7CisgICAgICAgICAgICBsdGNfbW92ZV90b19pZmlmbyhiYXNlLCBpdiwgaXZTaXplKTsKKyAgICAgICAgICAgIGl2U2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBzZXQgYWxnb3JpdGhtIHN0YXRlIHRvIFVQREFURSAqLworICAgICAgICAgICAgbW9kZVJlZyAmPSB+TFRDX01EX0FTX01BU0s7CisgICAgICAgICAgICBtb2RlUmVnIHw9IGtMVENfTW9kZVVwZGF0ZTsKKyAgICAgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZzsKKworICAgICAgICAgICAgbmV4dF9zaXplX2Z1bmMoYmFzZSwgKHVpbnQxNl90KXN6LCB0cnVlKTsKKyAgICAgICAgICAgIGx0Y19tb3ZlX3RvX2lmaWZvKGJhc2UsIGl2LCBzeik7CisgICAgICAgICAgICBpdlNpemUgLT0gc3o7CisgICAgICAgICAgICBpdiArPSBzejsKKyAgICAgICAgfQorCisgICAgICAgIHJldHZhbCA9IGx0Y193YWl0KGJhc2UpOworICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgfQorICAgIH0gLyogZW5kIHdoaWxlICovCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdGljIHN0YXR1c190IGx0Y19hZXNfZ2NtX3Byb2Nlc3MoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9lbmNyeXB0X3QgZW5jcnlwdE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnB1dFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGl2U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnU2l6ZSkKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7ICAgICAgICAgIC8qIHJldHVybiB2YWx1ZSAqLworICAgIHVpbnQzMl90IG1heF9sdGNfZmlmb19zejsgLyogbWF4aW11bSBkYXRhIHNpemUgdGhhdCB3ZSBjYW4gcHV0IHRvIExUQyBGSUZPIGluIG9uZSBzZXNzaW9uLiAxMi1iaXQgbGltaXQuICovCisgICAgbHRjX21vZGVfdCBtb2RlUmVnOyAgICAgICAvKiByZWFkIGFuZCB3cml0ZSBMVEMgbW9kZSByZWdpc3RlciAqLworCisgICAgYm9vbCBzaW5nbGVfc2VzX3Byb2NfYWxsOyAvKiBpdiwgYWFkIGFuZCBzcmMgZGF0YSBjYW4gYmUgcHJvY2Vzc2VkIGluIG9uZSBzZXNzaW9uICovCisgICAgYm9vbCBpdl9vbmx5OworICAgIGJvb2wgYWFkX29ubHk7CisKKyAgICByZXR2YWwgPSBsdGNfYWVzX2djbV9jaGVja19pbnB1dF9hcmdzKGJhc2UsIHNyYywgaXYsIGFhZCwga2V5LCBkc3QsIGlucHV0U2l6ZSwgaXZTaXplLCBhYWRTaXplLCBrZXlTaXplLCB0YWdTaXplKTsKKworICAgIC8qIEFQSSBpbnB1dCB2YWxpZGF0aW9uICovCisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dmFsOworICAgIH0KKworICAgIG1heF9sdGNfZmlmb19zeiA9IExUQ19EU19EU19NQVNLOyAvKiAxMi1iaXQgZmllbGQgbGltaXQgKi8KKworICAgIC8qCisgICAgICogV3JpdGUgdmFsdWUgdG8gTFRDIEFBRFNJWkUgKHJvdW5kZWQgdXAgdG8gbmV4dCAxNiBieXRlIGJvdW5kYXJ5KQorICAgICAqIHBsdXMgdGhlIHdyaXRlIHZhbHVlIHRvIExUQyBJViAocm91bmRlZCB1cCB0byBuZXh0IDE2IGJ5dGUgYm91bmRhcnkpCisgICAgICogcGx1cyB0aGUgaW5wdXRTaXplLiBJZiB0aGUgcmVzdWx0IGlzIGxlc3MgdGhhbiBtYXhfbHRjX2ZpZm9fc3oKKyAgICAgKiB0aGVuIGFsbCBjYW4gYmUgcHJvY2Vzc2VkIGluIG9uZSBzZXNzaW9uIEZJTkFMSVpFLgorICAgICAqIE90aGVyd2lzZSwgd2UgaGF2ZSB0byBzcGxpdCBpbnRvIG11bHRpcGxlIHNlc3Npb24sIGdvaW5nIHRocm91Z2ggVVBEQVRFKHMpLCBJTklUSUFMSVpFLCBVUERBVEUocykgYW5kIEZJTkFMSVpFLgorICAgICAqLworICAgIHNpbmdsZV9zZXNfcHJvY19hbGwgPQorICAgICAgICAoKChhYWRTaXplICsgMTV1KSAmIDB4ZmZmZmZmZjB1KSArICgoaXZTaXplICsgMTV1KSAmIDB4ZmZmZmZmZjB1KSArIGlucHV0U2l6ZSkgPD0gbWF4X2x0Y19maWZvX3N6OworCisgICAgLyogc2V0dXAga2V5LCBhbGdvcml0aG0gYW5kIHNldCB0aGUgYWxnLnN0YXRlICovCisgICAgaWYgKHNpbmdsZV9zZXNfcHJvY19hbGwpCisgICAgeworICAgICAgICBsdGNfc3ltbWV0cmljX2ZpbmFsKGJhc2UsIGtleSwga2V5U2l6ZSwga0xUQ19BbGdvcml0aG1BRVMsIGtMVENfTW9kZUdDTSwgZW5jcnlwdE1vZGUpOworICAgICAgICBtb2RlUmVnID0gYmFzZS0+TUQ7CisKKyAgICAgICAgaXZfb25seSA9IChhYWRTaXplID09IDApICYmIChpbnB1dFNpemUgPT0gMCk7CisgICAgICAgIGFhZF9vbmx5ID0gKGlucHV0U2l6ZSA9PSAwKTsKKworICAgICAgICAvKiBEU19NQVNLIGhlcmUgaXMgbm90IGEgYnVnLiBJViBzaXplIGZpZWxkIGNhbiBiZSB3cml0dGVuIHdpdGggbW9yZSB0aGFuIDQtYml0cywKKyAgICAgICAgICogYXMgdGhlIElWU1ogd3JpdGUgdmFsdWUsIGFsaWduZWQgdG8gbmV4dCAxNiBieXRlcyBib3VuZGFyeSwgaXMgd3JpdHRlbiBhbHNvIHRvIHRoZSBEYXRhIFNpemUuCisgICAgICAgICAqIEZvciBleGFtcGxlLCBJIGNhbiB3cml0ZSAyMiB0byBJVlNaLCAzMiB3aWxsIGJlIHdyaXR0ZW4gdG8gRGF0YSBTaXplIGFuZCBJVlNaIHdpbGwgaGF2ZSB2YWx1ZSA2LCB3aGljaCBpcyAyMgorICAgICAgICAgKiBtb2QgMTYuCisgICAgICAgICAqLworICAgICAgICBiYXNlLT5JVlNaID0gTFRDX0lWU1pfSUwoaXZfb25seSkgfCAoKGl2U2l6ZSkmTFRDX0RTX0RTX01BU0spOworICAgICAgICBsdGNfbW92ZV90b19pZmlmbyhiYXNlLCBpdiwgaXZTaXplKTsKKyAgICAgICAgaWYgKGl2X29ubHkgJiYgaXZTaXplKQorICAgICAgICB7CisgICAgICAgICAgICByZXR2YWwgPSBsdGNfd2FpdChiYXNlKTsKKyAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYmFzZS0+QUFEU1ogPSBMVENfQUFEU1pfQUwoYWFkX29ubHkpIHwgKChhYWRTaXplKSZMVENfRFNfRFNfTUFTSyk7CisgICAgICAgIGx0Y19tb3ZlX3RvX2lmaWZvKGJhc2UsIGFhZCwgYWFkU2l6ZSk7CisgICAgICAgIGlmIChhYWRfb25seSAmJiBhYWRTaXplKQorICAgICAgICB7CisgICAgICAgICAgICByZXR2YWwgPSBsdGNfd2FpdChiYXNlKTsKKyAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW5wdXRTaXplKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBXb3JrYXJvdW5kIGZvciB0aGUgTFRDIERhdGEgU2l6ZSByZWdpc3RlciB1cGRhdGUgZXJyYXRhIFRLVDI2MTE4MCAqLworICAgICAgICAgICAgd2hpbGUgKDE2VSA8IGJhc2UtPkRTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfZGF0YShiYXNlLCAmc3JjWzBdLCBpbnB1dFNpemUsICZkc3RbMF0pOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGx0Y19zeW1tZXRyaWNfaW5pdChiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVHQ00sIGVuY3J5cHRNb2RlKTsKKyAgICAgICAgbW9kZVJlZyA9IGJhc2UtPk1EOworCisgICAgICAgIC8qIHByb2Nlc3MgSVYgKi8KKyAgICAgICAgaWYgKGl2U2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogbGFzdCBjaHVuayBvZiBJViBpcyBhbHdheXMgSU5JVElBTElaRSAoZm9yIEdIQVNIIHRvIG9jY3VyKSAqLworICAgICAgICAgICAgcmV0dmFsID0gbHRjX2Flc19nY21fcHJvY2Vzc19pdl9hYWQoYmFzZSwgaXYsIGl2U2l6ZSwgbW9kZVJlZywgdHJ1ZSwgTFRDX0FFU19HQ01fVFlQRV9JViwga0xUQ19Nb2RlSW5pdCk7CisgICAgICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogcHJvY2VzcyBBQUQgKi8KKyAgICAgICAgaWYgKGFhZFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEFTIG1vZGUgdG8gcHJvY2VzcyBsYXN0IGNodW5rIG9mIEFBRC4gaXQgZGlmZmVycyBpZiB3ZSBhcmUgaW4gR01BQyBvciBHQ00gKi8KKyAgICAgICAgICAgIGx0Y19tb2RlX3QgbGFzdE1vZGVSZWc7CisgICAgICAgICAgICBpZiAoMCA9PSBpbnB1dFNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogaWYgdGhlcmUgaXMgbm8gREFUQSwgc2V0IG1vZGUgdG8gY29tcHV0ZSBmaW5hbCBNQUMuIHRoaXMgaXMgR01BQyBtb2RlICovCisgICAgICAgICAgICAgICAgbGFzdE1vZGVSZWcgPSBrTFRDX01vZGVJbml0RmluYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogdGhlcmUgYXJlIGNvbmZpZGVudGlhbCBEQVRBLiBzbyBwcm9jZXNzIGxhc3QgY2h1bmsgb2YgQUFEIGluIFVQREFURSBtb2RlICovCisgICAgICAgICAgICAgICAgbGFzdE1vZGVSZWcgPSBrTFRDX01vZGVVcGRhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR2YWwgPSBsdGNfYWVzX2djbV9wcm9jZXNzX2l2X2FhZChiYXNlLCBhYWQsIGFhZFNpemUsIG1vZGVSZWcsIHRydWUsIExUQ19BRVNfR0NNX1RZUEVfQUFELCBsYXN0TW9kZVJlZyk7CisgICAgICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogdGhlcmUgYXJlIERBVEEuICovCisgICAgICAgIGlmIChpbnB1dFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHNldCBhbGdvcml0aG0gc3RhdGUgdG8gVVBEQVRFICovCisgICAgICAgICAgICBtb2RlUmVnICY9IH5MVENfTURfQVNfTUFTSzsKKyAgICAgICAgICAgIG1vZGVSZWcgfD0ga0xUQ19Nb2RlVXBkYXRlOworICAgICAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnOworICAgICAgICAgICAgcmV0dmFsID0KKyAgICAgICAgICAgICAgICBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfZGF0YV9tdWx0aXBsZShiYXNlLCAmc3JjWzBdLCBpbnB1dFNpemUsICZkc3RbMF0sIG1vZGVSZWcsIGtMVENfTW9kZUluaXRGaW5hbCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dmFsOworICAgIH0KKyAgICByZXR2YWwgPSBsdGNfYWVzX3Byb2Nlc3NfdGFnKGJhc2UsIHRhZywgdGFnU2l6ZSwgbW9kZVJlZywgTFRDX0dDTV9UQUdfSURYKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR0NNIENvZGUgcHVibGljCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdHVzX3QgTFRDX0FFU19FbmNyeXB0VGFnR2NtKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXZTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0YWdTaXplKQoreworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIHN0YXR1cyA9IGx0Y19hZXNfZ2NtX3Byb2Nlc3MoYmFzZSwga0xUQ19Nb2RlRW5jcnlwdCwgcGxhaW50ZXh0LCBzaXplLCBpdiwgaXZTaXplLCBhYWQsIGFhZFNpemUsIGtleSwga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHQsIHRhZywgdGFnU2l6ZSk7CisKKyAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIGZhbHNlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfQUVTX0RlY3J5cHRUYWdHY20oTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpdlNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZ1NpemUpCit7CisgICAgdWludDhfdCB0ZW1wX3RhZ1sxNl0gPSB7MH07IC8qIG1heC4gb2N0ZXQgbGVuZ3RoIG9mIEludGVncml0eSBDaGVjayBWYWx1ZSBJQ1YgKHRhZykgaXMgMTYgKi8KKyAgICB1aW50OF90ICp0YWdfcHRyOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIHRhZ19wdHIgPSBOVUxMOworICAgIGlmICh0YWcpCisgICAgeworICAgICAgICBsdGNfbWVtY3B5KHRlbXBfdGFnLCB0YWcsIHRhZ1NpemUpOworICAgICAgICB0YWdfcHRyID0gJnRlbXBfdGFnWzBdOworICAgIH0KKyAgICBzdGF0dXMgPSBsdGNfYWVzX2djbV9wcm9jZXNzKGJhc2UsIGtMVENfTW9kZURlY3J5cHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBpdlNpemUsIGFhZCwgYWFkU2l6ZSwga2V5LCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW50ZXh0LCB0YWdfcHRyLCB0YWdTaXplKTsKKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19HQ00gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENDTSBDb2RlIHN0YXRpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfYWVzX2NjbV9jaGVja19pbnB1dF9hcmdzKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpdlNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZ1NpemUpCit7CisgICAgaWYgKCFiYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIHRhZyBjYW4gYmUgTlVMTCB0byBza2lwIHRhZyBwcm9jZXNzaW5nICovCisgICAgaWYgKCghc3JjKSB8fCAoIWl2KSB8fCAoIWtleSkgfHwgKCFkc3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIHNpemUgb2YgTm9uY2UgKGl2U2l6ZSkgbXVzdCBiZSBlbGVtZW50IG9mIDcsOCw5LDEwLDExLDEyLDEzICovCisgICAgaWYgKChpdlNpemUgPCA3dSkgfHwgKGl2U2l6ZSA+IDEzdSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorICAgIC8qIG9jdGV0IGxlbmd0aCBvZiBNQUMgKHRhZ1NpemUpIG11c3QgYmUgZWxlbWVudCBvZiA0LDYsOCwxMCwxMiwxNCwxNiBmb3IgdGFnIHByb2Nlc3Npbmcgb3IgemVybyB0byBza2lwIHRhZworICAgICAqIHByb2Nlc3NpbmcgKi8KKyAgICBpZiAoKCh0YWdTaXplID4gMCkgJiYgKHRhZ1NpemUgPCA0dSkpIHx8ICh0YWdTaXplID4gMTZ1KSB8fCAodGFnU2l6ZSAmIDF1KSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBjaGVjayBpZiBrZXlTaXplIGlzIHN1cHBvcnRlZCAqLworICAgIGlmICghbHRjX2NoZWNrX2tleV9zaXplKGtleVNpemUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIExUQyBkb2VzIG5vdCBzdXBwb3J0IG1vcmUgQUFEIHRoYW4gdGhpcyAqLworICAgIGlmIChhYWRTaXplID49IDY1MjgwdSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdGljIHVpbnQzMl90IHN3YXBfYnl0ZXModWludDMyX3QgaW4pCit7CisgICAgcmV0dXJuICgoKGluICYgMHgwMDAwMDBmZnUpIDw8IDI0KSB8ICgoaW4gJiAweDAwMDBmZjAwdSkgPDwgOCkgfCAoKGluICYgMHgwMGZmMDAwMHUpID4+IDgpIHwKKyAgICAgICAgICAgICgoaW4gJiAweGZmMDAwMDAwdSkgPj4gMjQpKTsKK30KKworc3RhdGljIHZvaWQgbHRjX2Flc19jY21fY29udGV4dF9pbml0KAorICAgIExUQ19UeXBlICpiYXNlLCB1aW50MzJfdCBpbnB1dFNpemUsIGNvbnN0IHVpbnQ4X3QgKml2LCB1aW50MzJfdCBpdlNpemUsIHVpbnQzMl90IGFhZFNpemUsIHVpbnQzMl90IHRhZ1NpemUpCit7CisgICAgbHRjX3hjbV9ibG9ja190IGJsazsKKyAgICBsdGNfeGNtX2Jsb2NrX3QgYmxrWmVybyA9IHt7MHgwdSwgMHgwdSwgMHgwdSwgMHgwdX19OworCisgICAgaW50IHE7IC8qIG9jdGV0IGxlbmd0aCBvZiBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9jdGV0IGxlbmd0aCBvZiB0aGUgcGF5bG9hZC4gY29tcHV0ZWQgYXMgKDE1IC0gbiksIHdoZXJlIG4gaXMKKyAgICAgICAgICAgICAgbGVuZ3RoIG9mIG5vbmNlKD1pdlNpemUpICovCisgICAgdWludDhfdCBmbGFnczsgLyogZmxhZ3MgZmllbGQgaW4gQjAgYW5kIENUUjAgKi8KKworICAgIC8qIGNvbXB1dGUgQjAgKi8KKyAgICBsdGNfbWVtY3B5KCZibGssICZibGtaZXJvLCBzaXplb2YoYmxrKSk7CisgICAgLyogdGFnU2l6ZSAtIHNpemUgb2Ygb3V0cHV0IE1BQyAqLworICAgIHEgPSAxNSAtIGl2U2l6ZTsKKyAgICBmbGFncyA9ICh1aW50OF90KSg4ICogKCh0YWdTaXplIC0gMikgLyAyKSArIHEgLSAxKTsgLyogOCpNJyArIEwnICovCisgICAgaWYgKGFhZFNpemUpCisgICAgeworICAgICAgICBmbGFncyB8PSAweDQwOyAvKiBBZGF0YSAqLworICAgIH0KKyAgICBibGsuYlswXSA9IGZsYWdzOyAgICAgICAgICAgICAgICAgIC8qIGZsYWdzIGZpZWxkICovCisgICAgYmxrLndbM10gPSBzd2FwX2J5dGVzKGlucHV0U2l6ZSk7ICAvKiBtZXNzYWdlIHNpemUsIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAqLworICAgIGx0Y19tZW1jcHkoJmJsay5iWzFdLCBpdiwgaXZTaXplKTsgLyogbm9uY2UgZmllbGQgKi8KKworICAgIC8qIFdyaXRlIEIwIGRhdGEgdG8gdGhlIGNvbnRleHQgcmVnaXN0ZXIuCisgICAgICovCisgICAgbHRjX3NldF9jb250ZXh0KGJhc2UsICZibGsuYlswXSwgMTYsIDApOworCisgICAgLyogV3JpdGUgQ1RSMCB0byB0aGUgY29udGV4dCByZWdpc3Rlci4KKyAgICAgKi8KKyAgICBsdGNfbWVtY3B5KCZibGssICZibGtaZXJvLCBzaXplb2YoYmxrKSk7IC8qIGN0cigwKSBmaWVsZCA9IHplcm8gKi8KKyAgICBibGsuYlswXSA9IHEgLSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzIGZpZWxkICovCisgICAgbHRjX21lbWNweSgmYmxrLmJbMV0sIGl2LCBpdlNpemUpOyAgICAgICAvKiBub25jZSBmaWVsZCAqLworICAgIGx0Y19zZXRfY29udGV4dChiYXNlLCAmYmxrLmJbMF0sIDE2LCA0KTsKK30KKworc3RhdGljIHN0YXR1c190IGx0Y19hZXNfY2NtX3Byb2Nlc3NfYWFkKAorICAgIExUQ19UeXBlICpiYXNlLCB1aW50MzJfdCBpbnB1dFNpemUsIGNvbnN0IHVpbnQ4X3QgKmFhZCwgdWludDMyX3QgYWFkU2l6ZSwgbHRjX21vZGVfdCAqbW9kZVJlZykKK3sKKyAgICBsdGNfeGNtX2Jsb2NrX3QgYmxrID0ge3sweDB1LCAweDB1LCAweDB1LCAweDB1fX07CisgICAgdWludDMyX3Qgc3dhcHBlZDsgLyogaG9sZHMgYnl0ZSBzd2FwIG9mIHVpbnQzMl90ICovCisgICAgc3RhdHVzX3QgcmV0dmFsOworCisgICAgaWYgKGFhZFNpemUpCisgICAgeworICAgICAgICBib29sIGFhZF9vbmx5OworICAgICAgICBib29sIGFhZF9zaW5nbGVfc2Vzc2lvbjsKKworICAgICAgICB1aW50MzJfdCBzeiA9IDA7CisKKyAgICAgICAgYWFkX29ubHkgPSBpbnB1dFNpemUgPT0gMHU7CisgICAgICAgIGFhZF9zaW5nbGVfc2Vzc2lvbiA9ICgoKGFhZFNpemUgKyAydSkgKyAxNXUpICYgMHhmZmZmZmZmMHUpIDw9IExUQ19GSUZPX1NaX01BWF9ET1dOX0FMR047CisKKyAgICAgICAgLyogbGltaXQgYnkgQ0NNIHNwZWM6IDJeMTYgLSAyXjggPSA2NTI4MCAqLworCisgICAgICAgIC8qIGVuY29kaW5nIGlzIHR3byBvY3RldHMsIG1zYnl0ZSBmaXJzdCAqLworICAgICAgICBzd2FwcGVkID0gc3dhcF9ieXRlcyhhYWRTaXplKTsKKyAgICAgICAgbHRjX21lbWNweSgmYmxrLmJbMF0sICgodWludDhfdCAqKSZzd2FwcGVkKSArIHNpemVvZih1aW50MTZfdCksIHNpemVvZih1aW50MTZfdCkpOworCisgICAgICAgIHN6ID0gYWFkU2l6ZSA+IDE0dSA/IDE0dSA6IGFhZFNpemU7IC8qIGxpbWl0IGFhZCB0byB0aGUgZW5kIG9mIDE2IGJ5dGVzIGJsayAqLworICAgICAgICBsdGNfbWVtY3B5KCZibGsuYlsyXSwgYWFkLCBzeik7ICAgICAvKiBmaWxsIEIxIHdpdGggYWFkICovCisKKyAgICAgICAgaWYgKGFhZF9zaW5nbGVfc2Vzc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZS0+QUFEU1ogPSBMVENfQUFEU1pfQUwoYWFkX29ubHkpIHwgKChhYWRTaXplICsgMlUpICYgTFRDX0RTX0RTX01BU0spOworICAgICAgICAgICAgLyogbW92ZSBmaXJzdCBBQUQgYmxvY2sgKDE2IGJ5dGVzIGJsb2NrIEIxKSB0byBGSUZPICovCisgICAgICAgICAgICBsdGNfbW92ZV9ibG9ja190b19pZmlmbyhiYXNlLCAmYmxrLCBzaXplb2YoYmxrKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlLT5BQURTWiA9IExUQ19BQURTWl9BTCh0cnVlKSB8ICgxNlUpOworICAgICAgICAgICAgLyogbW92ZSBmaXJzdCBBQUQgYmxvY2sgKDE2IGJ5dGVzIGJsb2NrIEIxKSB0byBGSUZPICovCisgICAgICAgICAgICBsdGNfbW92ZV9ibG9ja190b19pZmlmbyhiYXNlLCAmYmxrLCBzaXplb2YoYmxrKSk7CisgICAgICAgIH0KKworICAgICAgICAvKiB0cmFjayBjb25zdW1lZCBBQUQuIHN6IGJ5dGVzIGhhdmUgYmVlbiBtb3ZlZCB0byBmaWZvLiAqLworICAgICAgICBhYWRTaXplIC09IHN6OworICAgICAgICBhYWQgKz0gc3o7CisKKyAgICAgICAgaWYgKGFhZF9zaW5nbGVfc2Vzc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgLyogbW92ZSByZW1haW5pbmcgQUFEIHRvIEZJRk8sIHRoZW4gcmV0dXJuLCB0byBjb250aW51ZSB3aXRoIE1EQVRBICovCisgICAgICAgICAgICBsdGNfbW92ZV90b19pZmlmbyhiYXNlLCBhYWQsIGFhZFNpemUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFhZFNpemUgPT0gMHUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHZhbCA9IGx0Y193YWl0KGJhc2UpOworICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChhYWRTaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IGx0Y193YWl0KGJhc2UpOworICAgICAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAqbW9kZVJlZyAmPSB+TFRDX01EX0FTX01BU0s7CisgICAgICAgICAgICAgICAgKm1vZGVSZWcgfD0gKHVpbnQzMl90KWtMVENfTW9kZVVwZGF0ZTsKKyAgICAgICAgICAgICAgICBiYXNlLT5NRCA9ICptb2RlUmVnOworCisgICAgICAgICAgICAgICAgc3ogPSBMVENfRklGT19TWl9NQVhfRE9XTl9BTEdOOworICAgICAgICAgICAgICAgIGlmIChhYWRTaXplIDwgc3opCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBiYXNlLT5BQURTWiA9IExUQ19BQURTWl9BTChhYWRfb25seSkgfCAoYWFkU2l6ZSAmIExUQ19EU19EU19NQVNLKTsKKyAgICAgICAgICAgICAgICAgICAgbHRjX21vdmVfdG9faWZpZm8oYmFzZSwgYWFkLCBhYWRTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgYWFkU2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UtPkFBRFNaID0gTFRDX0FBRFNaX0FMKHRydWUpIHwgKHN6ICYgTFRDX0RTX0RTX01BU0spOworICAgICAgICAgICAgICAgICAgICBsdGNfbW92ZV90b19pZmlmbyhiYXNlLCBhYWQsIHN6KTsKKyAgICAgICAgICAgICAgICAgICAgYWFkU2l6ZSAtPSBzejsKKyAgICAgICAgICAgICAgICAgICAgYWFkICs9IHN6OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogZW5kIHdoaWxlICovCisgICAgICAgIH0gICAgIC8qIGVuZCBlbHNlICovCisgICAgfSAgICAgICAgIC8qIGVuZCBpZiAqLworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBsdGNfYWVzX2NjbV9wcm9jZXNzKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfZW5jcnlwdF90IGVuY3J5cHRNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5wdXRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpdlNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZ1NpemUpCit7CisgICAgc3RhdHVzX3QgcmV0dmFsOyAgICAgICAgICAvKiByZXR1cm4gdmFsdWUgKi8KKyAgICB1aW50MzJfdCBtYXhfbHRjX2ZpZm9fc3o7IC8qIG1heGltdW0gZGF0YSBzaXplIHRoYXQgd2UgY2FuIHB1dCB0byBMVEMgRklGTyBpbiBvbmUgc2Vzc2lvbi4gMTItYml0IGxpbWl0LiAqLworICAgIGx0Y19tb2RlX3QgbW9kZVJlZzsgICAgICAgLyogcmVhZCBhbmQgd3JpdGUgTFRDIG1vZGUgcmVnaXN0ZXIgKi8KKworICAgIGJvb2wgc2luZ2xlX3Nlc19wcm9jX2FsbDsgLyogYWFkIGFuZCBzcmMgZGF0YSBjYW4gYmUgcHJvY2Vzc2VkIGluIG9uZSBzZXNzaW9uICovCisKKyAgICByZXR2YWwgPSBsdGNfYWVzX2NjbV9jaGVja19pbnB1dF9hcmdzKGJhc2UsIHNyYywgaXYsIGtleSwgZHN0LCBpdlNpemUsIGFhZFNpemUsIGtleVNpemUsIHRhZ1NpemUpOworCisgICAgLyogQVBJIGlucHV0IHZhbGlkYXRpb24gKi8KKyAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgfQorCisgICAgbWF4X2x0Y19maWZvX3N6ID0gTFRDX0RTX0RTX01BU0s7IC8qIDEyLWJpdCBmaWVsZCBsaW1pdCAqLworCisgICAgLyogV3JpdGUgdmFsdWUgdG8gTFRDIEFBRFNJWkUgd2lsbCBiZSAoYWFkU2l6ZSsyKSB2YWx1ZS4KKyAgICAgKiBUaGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIHVwIHRvIG5leHQgMTYgYnl0ZSBib3VuZGFyeSBhbmQgYWRkZWQgdG8gRGF0YSBTaXplIHJlZ2lzdGVyLgorICAgICAqIFdlIHRoZW4gYWRkIGlucHV0U2l6ZSB0byBEYXRhIFNpemUgcmVnaXN0ZXIuIElmIHRoZSByZXN1bHRpbmcgRGF0YSBTaXplIGlzIGxlc3MgdGhhbiBtYXhfbHRjX2ZpZm9fc3oKKyAgICAgKiB0aGVuIGFsbCBjYW4gYmUgcHJvY2Vzc2VkIGluIG9uZSBzZXNzaW9uIElOSVRJQUxJWkUvRklOQUxJWkUuCisgICAgICogT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIHNwbGl0IGludG8gbXVsdGlwbGUgc2Vzc2lvbiwgZ29pbmcgdGhyb3VnaCBJTklUSUFMSVpFLCBVUERBVEUgKGlmIHJlcXVpcmVkKSBhbmQgRklOQUxJWkUuCisgICAgICovCisgICAgc2luZ2xlX3Nlc19wcm9jX2FsbCA9ICgoKChhYWRTaXplICsgMikgKyAxNXUpICYgMHhmZmZmZmZmMHUpICsgaW5wdXRTaXplKSA8PSBtYXhfbHRjX2ZpZm9fc3o7CisKKyAgICAvKiBzZXR1cCBrZXksIGFsZ29yaXRobSBhbmQgc2V0IHRoZSBhbGcuc3RhdGUgdG8gSU5JVElBTElaRSAqLworICAgIGlmIChzaW5nbGVfc2VzX3Byb2NfYWxsKQorICAgIHsKKyAgICAgICAgbHRjX3N5bW1ldHJpY19pbml0X2ZpbmFsKGJhc2UsIGtleSwga2V5U2l6ZSwga0xUQ19BbGdvcml0aG1BRVMsIGtMVENfTW9kZUNDTSwgZW5jcnlwdE1vZGUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBsdGNfc3ltbWV0cmljX2luaXQoYmFzZSwga2V5LCBrZXlTaXplLCBrTFRDX0FsZ29yaXRobUFFUywga0xUQ19Nb2RlQ0NNLCBlbmNyeXB0TW9kZSk7CisgICAgfQorICAgIG1vZGVSZWcgPSBiYXNlLT5NRDsKKworICAgIC8qIEluaXRpYWxpemUgTFRDIGNvbnRleHQgZm9yIEFFUyBDQ006IGJsb2NrIEIwIGFuZCBpbml0aWFsIGNvdW50ZXIgQ1RSMCAqLworICAgIGx0Y19hZXNfY2NtX2NvbnRleHRfaW5pdChiYXNlLCBpbnB1dFNpemUsIGl2LCBpdlNpemUsIGFhZFNpemUsIHRhZ1NpemUpOworCisgICAgLyogUHJvY2VzcyBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEsIGlmIHRoZXJlIGFyZSBhbnkuCisgICAgICogTmVlZCB0byBzcGxpdCB0aGUgam9iIGludG8gaW5kaXZpZHVhbCBzZXNzaW9ucyBvZiB1cCB0byA0MDk2IGJ5dGVzLCBkdWUgdG8gTFRDIElGSUZPIGRhdGEgc2l6ZSBsaW1pdC4KKyAgICAgKi8KKyAgICByZXR2YWwgPSBsdGNfYWVzX2NjbV9wcm9jZXNzX2FhZChiYXNlLCBpbnB1dFNpemUsIGFhZCwgYWFkU2l6ZSwgJm1vZGVSZWcpOworICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICB9CisKKyAgICAvKiBXb3JrYXJvdW5kIGZvciB0aGUgTFRDIERhdGEgU2l6ZSByZWdpc3RlciB1cGRhdGUgZXJyYXRhIFRLVDI2MTE4MCAqLworICAgIGlmIChpbnB1dFNpemUpCisgICAgeworICAgICAgICB3aGlsZSAoMTZ1IDwgYmFzZS0+RFMpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFByb2Nlc3MgbWVzc2FnZSAqLworICAgIGlmIChzaW5nbGVfc2VzX3Byb2NfYWxsKQorICAgIHsKKyAgICAgICAgcmV0dmFsID0gbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGEoYmFzZSwgJnNyY1swXSwgaW5wdXRTaXplLCAmZHN0WzBdKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dmFsID0gbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGFfbXVsdGlwbGUoYmFzZSwgJnNyY1swXSwgaW5wdXRTaXplLCAmZHN0WzBdLCBtb2RlUmVnLCBrTFRDX01vZGVGaW5hbGl6ZSk7CisgICAgfQorICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICB9CisgICAgcmV0dmFsID0gbHRjX2Flc19wcm9jZXNzX3RhZyhiYXNlLCB0YWcsIHRhZ1NpemUsIG1vZGVSZWcsIExUQ19DQ01fVEFHX0lEWCk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENDTSBDb2RlIHB1YmxpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXR1c190IExUQ19BRVNfRW5jcnlwdFRhZ0NjbShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGl2U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWFkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnU2l6ZSkKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgc3RhdHVzID0gbHRjX2Flc19jY21fcHJvY2VzcyhiYXNlLCBrTFRDX01vZGVFbmNyeXB0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBpdlNpemUsIGFhZCwgYWFkU2l6ZSwga2V5LCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dCwgdGFnLCB0YWdTaXplKTsKKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19BRVNfRGVjcnlwdFRhZ0NjbShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGl2U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWFkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnU2l6ZSkKK3sKKyAgICB1aW50OF90IHRlbXBfdGFnWzE2XSA9IHswfTsgLyogbWF4LiBvY3RldCBsZW5ndGggb2YgTUFDICh0YWcpIGlzIDE2ICovCisgICAgdWludDhfdCAqdGFnX3B0cjsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICB0YWdfcHRyID0gTlVMTDsKKyAgICBpZiAodGFnKQorICAgIHsKKyAgICAgICAgbHRjX21lbWNweSh0ZW1wX3RhZywgdGFnLCB0YWdTaXplKTsKKyAgICAgICAgdGFnX3B0ciA9ICZ0ZW1wX3RhZ1swXTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBsdGNfYWVzX2NjbV9wcm9jZXNzKGJhc2UsIGtMVENfTW9kZURlY3J5cHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBpdlNpemUsIGFhZCwgYWFkU2l6ZSwga2V5LCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW50ZXh0LCB0YWdfcHRyLCB0YWdTaXplKTsKKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0RFUworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERFUyAvIDNERVMgQ29kZSBzdGF0aWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RhdHVzX3QgbHRjX2Rlc19wcm9jZXNzKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3QgbW9kZUFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9lbmNyeXB0X3QgbW9kZUVuYykKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7CisKKyAgICAvKiBhbGwgYnV0IE9GQiwgc2l6ZSBtdXN0IGJlIDgtYnl0ZSBtdWx0aXBsZSAqLworICAgIGlmICgobW9kZUFzICE9IGtMVENfTW9kZU9GQikgJiYgKChzaXplIDwgOHUpIHx8IChzaXplICUgOHUpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCAma2V5WzBdLCBMVENfREVTX0tFWV9TSVpFLCBrTFRDX0FsZ29yaXRobURFUywgbW9kZUFzLCBtb2RlRW5jKTsKKworICAgIGlmICgobW9kZUFzICE9IGtMVENfTW9kZUVDQikpCisgICAgeworICAgICAgICBsdGNfc2V0X2NvbnRleHQoYmFzZSwgaXYsIExUQ19ERVNfSVZfU0laRSwgMCk7CisgICAgfQorCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIHJldHZhbCA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnMoYmFzZSwgaW5wdXQsIHNpemUsIG91dHB1dCk7CisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworc3RhdHVzX3QgbHRjXzNkZXNfY2hlY2tfaW5wdXRfYXJncyhsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3QgbW9kZUFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXkyKQoreworICAgIC8qIGFsbCBidXQgT0ZCLCBzaXplIG11c3QgYmUgOC1ieXRlIG11bHRpcGxlICovCisgICAgaWYgKChtb2RlQXMgIT0ga0xUQ19Nb2RlT0ZCKSAmJiAoKHNpemUgPCA4dSkgfHwgKHNpemUgJSA4dSkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGlmICgoa2V5MSA9PSBOVUxMKSB8fCAoa2V5MiA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdGljIHN0YXR1c190IGx0Y18zZGVzX3Byb2Nlc3MoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3QgbW9kZUFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfZW5jcnlwdF90IG1vZGVFbmMpCit7CisgICAgc3RhdHVzX3QgcmV0dmFsOworICAgIHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkUgKiAzXTsKKyAgICB1aW50OF90IGtleVNpemUgPSBMVENfREVTX0tFWV9TSVpFICogMjsKKworICAgIHJldHZhbCA9IGx0Y18zZGVzX2NoZWNrX2lucHV0X2FyZ3MobW9kZUFzLCBzaXplLCBrZXkxLCBrZXkyKTsKKyAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgfQorCisgICAgbHRjX21lbWNweSgma2V5WzBdLCAma2V5MVswXSwgTFRDX0RFU19LRVlfU0laRSk7CisgICAgbHRjX21lbWNweSgma2V5W0xUQ19ERVNfS0VZX1NJWkVdLCAma2V5MlswXSwgTFRDX0RFU19LRVlfU0laRSk7CisgICAgaWYgKGtleTMpCisgICAgeworICAgICAgICBsdGNfbWVtY3B5KCZrZXlbTFRDX0RFU19LRVlfU0laRSAqIDJdLCAma2V5M1swXSwgTFRDX0RFU19LRVlfU0laRSk7CisgICAgICAgIGtleVNpemUgPSBzaXplb2Yoa2V5KTsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCAma2V5WzBdLCBrZXlTaXplLCBrTFRDX0FsZ29yaXRobTNERVMsIG1vZGVBcywgbW9kZUVuYyk7CisKKyAgICBpZiAoKG1vZGVBcyAhPSBrTFRDX01vZGVFQ0IpKQorICAgIHsKKyAgICAgICAgbHRjX3NldF9jb250ZXh0KGJhc2UsIGl2LCBMVENfREVTX0lWX1NJWkUsIDApOworICAgIH0KKworICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICByZXR2YWwgPSBsdGNfcHJvY2Vzc19tZXNzYWdlX2luX3Nlc3Npb25zKGJhc2UsIGlucHV0LCBzaXplLCBvdXRwdXQpOworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiByZXR2YWw7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogREVTIC8gM0RFUyBDb2RlIHB1YmxpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXR1c190IExUQ19ERVNfRW5jcnlwdEVjYigKKyAgICBMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LCB1aW50OF90ICpjaXBoZXJ0ZXh0LCB1aW50MzJfdCBzaXplLCBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzKGJhc2UsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgTlVMTCwga2V5LCBrTFRDX01vZGVFQ0IsIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTX0RlY3J5cHRFY2IoCisgICAgTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsIHVpbnQ4X3QgKnBsYWludGV4dCwgdWludDMyX3Qgc2l6ZSwgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y19kZXNfcHJvY2VzcyhiYXNlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIE5VTEwsIGtleSwga0xUQ19Nb2RlRUNCLCBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfZGVzX3Byb2Nlc3MoYmFzZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBpdiwga2V5LCBrTFRDX01vZGVDQkMsIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTX0RlY3J5cHRDYmMoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y19kZXNfcHJvY2VzcyhiYXNlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXksIGtMVENfTW9kZUNCQywga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRW5jcnlwdENmYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzKGJhc2UsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleSwga0xUQ19Nb2RlQ0ZCLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFU19EZWNyeXB0Q2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfZGVzX3Byb2Nlc3MoYmFzZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBpdiwga2V5LCBrTFRDX01vZGVDRkIsIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTX0VuY3J5cHRPZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y19kZXNfcHJvY2VzcyhiYXNlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXksIGtMVENfTW9kZU9GQiwga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdE9mYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzKGJhc2UsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleSwga0xUQ19Nb2RlT0ZCLCBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdEVjYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIE5VTEwsIGtleTEsIGtleTIsIE5VTEwsIGtMVENfTW9kZUVDQiwga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0VuY3J5cHRFY2IoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIE5VTEwsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZUVDQiwga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRFY2IoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3MoYmFzZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBOVUxMLCBrZXkxLCBrZXkyLCBOVUxMLCBrTFRDX01vZGVFQ0IsIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTM19EZWNyeXB0RWNiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3MoYmFzZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBOVUxMLCBrZXkxLCBrZXkyLCBrZXkzLCBrTFRDX01vZGVFQ0IsIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTMl9FbmNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3MoYmFzZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5MiwgTlVMTCwga0xUQ19Nb2RlQ0JDLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdENiYyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3MoYmFzZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5Miwga2V5Mywga0xUQ19Nb2RlQ0JDLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRGVjcnlwdENiYyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzKGJhc2UsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIE5VTEwsIGtMVENfTW9kZUNCQywga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRDYmMoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzKGJhc2UsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZUNCQywga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMyX0VuY3J5cHRDZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBOVUxMLCBrTFRDX01vZGVDRkIsIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTM19FbmNyeXB0Q2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBrZXkzLCBrTFRDX01vZGVDRkIsIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTMl9EZWNyeXB0Q2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3MoYmFzZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5MiwgTlVMTCwga0xUQ19Nb2RlQ0ZCLCBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzNfRGVjcnlwdENmYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3MoYmFzZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5Miwga2V5Mywga0xUQ19Nb2RlQ0ZCLCBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdE9mYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzKGJhc2UsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIE5VTEwsIGtMVENfTW9kZU9GQiwga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0VuY3J5cHRPZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzKGJhc2UsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZU9GQiwga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRPZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBOVUxMLCBrTFRDX01vZGVPRkIsIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTM19EZWNyeXB0T2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBrZXkzLCBrTFRDX01vZGVPRkIsIGtMVENfTW9kZURlY3J5cHQpOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIQVNIIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisjZGVmaW5lIExUQ19TSEFfQkxPQ0tfU0laRSA2NCAgICAgICAgICAgICAgICAgIC8qITwgU0hBLTEsIFNIQS0yMjQgJiBTSEEtMjU2IGJsb2NrIHNpemUgICovCisjZGVmaW5lIExUQ19IQVNIX0JMT0NLX1NJWkUgTFRDX1NIQV9CTE9DS19TSVpFIC8qITwgTFRDIGhhc2ggYmxvY2sgc2l6ZSAgKi8KKworZW51bSBfbHRjX3NoYV9kaWdlc3RfbGVuCit7CisgICAga0xUQ19SdW5MZW5TaGExID0gMjh1LAorICAgIGtMVENfT3V0TGVuU2hhMSA9IDIwdSwKKyAgICBrTFRDX1J1bkxlblNoYTIyNCA9IDQwdSwKKyAgICBrTFRDX091dExlblNoYTIyNCA9IDI4dSwKKyAgICBrTFRDX1J1bkxlblNoYTI1NiA9IDQwdSwKKyAgICBrTFRDX091dExlblNoYTI1NiA9IDMydSwKK307CisjZWxzZQorI2RlZmluZSBMVENfSEFTSF9CTE9DS19TSVpFIExUQ19BRVNfQkxPQ0tfU0laRSAvKiE8IExUQyBoYXNoIGJsb2NrIHNpemUgICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBICovCisKKy8qISBJbnRlcm5hbCBzdGF0ZXMgb2YgdGhlIEhBU0ggY3JlYXRpb24gcHJvY2VzcyAqLwordHlwZWRlZiBlbnVtIF9sdGNfaGFzaF9hbGdvX3N0YXRlCit7CisgICAga0xUQ19IYXNoSW5pdCA9IDF1LCAvKiE8IEtleSBpbiB0aGUgSEFTSCBjb250ZXh0IGlzIHRoZSBpbnB1dCBrZXkuICovCisgICAga0xUQ19IYXNoVXBkYXRlLCAgICAvKiE8IEhBU0ggY29udGV4dCBoYXMgYWxnb3JpdGhtIHNwZWNpZmljIGNvbnRleHQ6IE1BQywgSzIgYW5kIEszIChYQ0JDLU1BQyksIE1BQyBhbmQgTCAoQ01BQyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIGRpZ2VzdCAoTURIQSkuIEtleSBpbiB0aGUgSEFTSCBjb250ZXh0IGlzIHRoZSBkZXJpdmVkIGtleS4gKi8KK30gbHRjX2hhc2hfYWxnb19zdGF0ZV90OworCisvKiEgMTYvNjQtYnl0ZSBibG9jayByZXByZXNlbnRlZCBhcyBieXRlIGFycmF5IG9yIDQvMTYgMzItYml0IHdvcmRzICovCit0eXBlZGVmIHVuaW9uIF9sdGNfaGFzaF9ibG9jaworeworICAgIHVpbnQzMl90IHdbTFRDX0hBU0hfQkxPQ0tfU0laRSAvIDRdOyAvKiE8IGFycmF5IG9mIDMyLWJpdCB3b3JkcyAqLworICAgIHVpbnQ4X3QgYltMVENfSEFTSF9CTE9DS19TSVpFXTsgICAgICAvKiE8IGJ5dGUgYXJyYXkgKi8KK30gbHRjX2hhc2hfYmxvY2tfdDsKKworLyohIERlZmluaXRpb25zIG9mIGluZGV4ZXMgaW50byBoYXNoIGNvbnRleHQgYXJyYXkgKi8KK3R5cGVkZWYgZW51bSBfbHRjX2hhc2hfY3R4X2luZGV4ZXMKK3sKKyAgICBrTFRDX0hhc2hDdHhLZXlTdGFydElkeCA9IDEyLCAvKiE8IGNvbnRleHQgd29yZCBhcnJheSBpbmRleCB3aGVyZSBrZXkgaXMgc3RvcmVkICovCisgICAga0xUQ19IYXNoQ3R4S2V5U2l6ZSA9IDIwLCAgICAgLyohPCBjb250ZXh0IHdvcmQgYXJyYXkgaW5kZXggd2hlcmUga2V5IHNpemUgaXMgc3RvcmVkICovCisgICAga0xUQ19IYXNoQ3R4TnVtV29yZHMgPSAyMSwgICAgLyohPCBudW1iZXIgb2YgY29udGV4dCBhcnJheSAzMi1iaXQgd29yZHMgICovCit9IGx0Y19oYXNoX2N0eF9pbmRleGVzOworCit0eXBlZGVmIHN0cnVjdCBfbHRjX2hhc2hfY3R4X2ludGVybmFsCit7CisgICAgbHRjX2hhc2hfYmxvY2tfdCBibGs7IC8qITwgbWVtb3J5IGJ1ZmZlci4gb25seSBmdWxsIDY0LzE2LWJ5dGUgYmxvY2tzIGFyZSB3cml0dGVuIHRvIExUQyBkdXJpbmcgaGFzaCB1cGRhdGVzICovCisgICAgdWludDMyX3QgYmxrc3o7ICAgICAgIC8qITwgbnVtYmVyIG9mIHZhbGlkIGJ5dGVzIGluIG1lbW9yeSBidWZmZXIgKi8KKyAgICBMVENfVHlwZSAqYmFzZTsgICAgICAgLyohPCBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MgKi8KKyAgICBsdGNfaGFzaF9hbGdvX3QgYWxnbzsgLyohPCBzZWxlY3RlZCBhbGdvcml0aG0gZnJvbSB0aGUgc2V0IG9mIHN1cHBvcnRlZCBhbGdvcml0aG1zIGluIGx0Y19kcnZfaGFzaF9hbGdvICovCisgICAgbHRjX2hhc2hfYWxnb19zdGF0ZV90IHN0YXRlOyAgICAgICAgIC8qITwgZmluaXRlIG1hY2hpbmUgc3RhdGUgb2YgdGhlIGhhc2ggc29mdHdhcmUgcHJvY2VzcyAqLworICAgIHVpbnQzMl90IHdvcmRba0xUQ19IYXNoQ3R4TnVtV29yZHNdOyAvKiE8IExUQyBtb2R1bGUgY29udGV4dCB0aGF0IG5lZWRzIHRvIGJlIHNhdmVkL3Jlc3RvcmVkIGJldHdlZW4gTFRDIGpvYnMgKi8KK30gbHRjX2hhc2hfY3R4X2ludGVybmFsX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIQVNIIENvZGUgc3RhdGljCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0YXR1c190IGx0Y19oYXNoX2NoZWNrX2lucHV0X2FsZyhsdGNfaGFzaF9hbGdvX3QgYWxnbykKK3sKKyAgICBpZiAoKGFsZ28gIT0ga0xUQ19YY2JjTWFjKSAmJiAoYWxnbyAhPSBrTFRDX0NtYWMpCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEKKyAgICAgICAgJiYgKGFsZ28gIT0ga0xUQ19TaGExKSAmJiAoYWxnbyAhPSBrTFRDX1NoYTIyNCkgJiYgKGFsZ28gIT0ga0xUQ19TaGEyNTYpCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KKyAgICAgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdGljIGlubGluZSBib29sIGx0Y19oYXNoX2FsZ19pc19jbWFjKGx0Y19oYXNoX2FsZ29fdCBhbGdvKQoreworICAgIHJldHVybiAoKGFsZ28gPT0ga0xUQ19YY2JjTWFjKSB8fCAoYWxnbyA9PSBrTFRDX0NtYWMpKTsKK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCitzdGF0aWMgaW5saW5lIGJvb2wgbHRjX2hhc2hfYWxnX2lzX3NoYShsdGNfaGFzaF9hbGdvX3QgYWxnbykKK3sKKyAgICByZXR1cm4gKChhbGdvID09IGtMVENfU2hhMSkgfHwgKGFsZ28gPT0ga0xUQ19TaGEyMjQpIHx8IChhbGdvID09IGtMVENfU2hhMjU2KSk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KKworc3RhdGljIHN0YXR1c190IGx0Y19oYXNoX2NoZWNrX2lucHV0X2FyZ3MoCisgICAgTFRDX1R5cGUgKmJhc2UsIGx0Y19oYXNoX2N0eF90ICpjdHgsIGx0Y19oYXNoX2FsZ29fdCBhbGdvLCBjb25zdCB1aW50OF90ICprZXksIHVpbnQzMl90IGtleVNpemUpCit7CisgICAgLyogQ2hlY2sgdmFsaWRpdHkgb2YgaW5wdXQgYWxnb3JpdGhtICovCisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSBsdGNfaGFzaF9jaGVja19pbnB1dF9hbGcoYWxnbykpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaWYgKChOVUxMID09IGN0eCkgfHwgKE5VTEwgPT0gYmFzZSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaWYgKGx0Y19oYXNoX2FsZ19pc19jbWFjKGFsZ28pKQorICAgIHsKKyAgICAgICAgaWYgKChOVUxMID09IGtleSkgfHwgKCFsdGNfY2hlY2tfa2V5X3NpemUoa2V5U2l6ZSkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0aWMgc3RhdHVzX3QgbHRjX2hhc2hfY2hlY2tfY29udGV4dChsdGNfaGFzaF9jdHhfaW50ZXJuYWxfdCAqY3R4SW50ZXJuYWwsIGNvbnN0IHVpbnQ4X3QgKmRhdGEpCit7CisgICAgaWYgKChOVUxMID09IGRhdGEpIHx8IChOVUxMID09IGN0eEludGVybmFsKSB8fCAoTlVMTCA9PSBjdHhJbnRlcm5hbC0+YmFzZSkgfHwKKyAgICAgICAgKGtTdGF0dXNfU3VjY2VzcyAhPSBsdGNfaGFzaF9jaGVja19pbnB1dF9hbGcoY3R4SW50ZXJuYWwtPmFsZ28pKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdGljIHVpbnQzMl90IGx0Y19oYXNoX2FsZ28ybW9kZShsdGNfaGFzaF9hbGdvX3QgYWxnbywgbHRjX21vZGVfYWxnb3JpdGhtX3N0YXRlX3QgYXNNb2RlLCB1aW50MzJfdCAqYWxnT3V0U2l6ZSkKK3sKKyAgICB1aW50MzJfdCBtb2RlUmVnID0gMHU7CisgICAgdWludDMyX3Qgb3V0U2l6ZSA9IDB1OworCisgICAgLyogU2V0IExUQyBhbGdvcml0aG0gKi8KKyAgICBzd2l0Y2ggKGFsZ28pCisgICAgeworICAgICAgICBjYXNlIGtMVENfWGNiY01hYzoKKyAgICAgICAgICAgIG1vZGVSZWcgPSAodWludDMyX3Qpa0xUQ19BbGdvcml0aG1BRVMgfCAodWludDMyX3Qpa0xUQ19Nb2RlWENCQ01BQzsKKyAgICAgICAgICAgIG91dFNpemUgPSAxNnU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrTFRDX0NtYWM6CisgICAgICAgICAgICBtb2RlUmVnID0gKHVpbnQzMl90KWtMVENfQWxnb3JpdGhtQUVTIHwgKHVpbnQzMl90KWtMVENfTW9kZUNNQUM7CisgICAgICAgICAgICBvdXRTaXplID0gMTZ1OworICAgICAgICAgICAgYnJlYWs7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEKKyAgICAgICAgY2FzZSBrTFRDX1NoYTE6CisgICAgICAgICAgICBtb2RlUmVnID0gKHVpbnQzMl90KWtMVENfQWxnb3JpdGhtU0hBMTsKKyAgICAgICAgICAgIG91dFNpemUgPSBrTFRDX091dExlblNoYTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrTFRDX1NoYTIyNDoKKyAgICAgICAgICAgIG1vZGVSZWcgPSAodWludDMyX3Qpa0xUQ19BbGdvcml0aG1TSEEyMjQ7CisgICAgICAgICAgICBvdXRTaXplID0ga0xUQ19PdXRMZW5TaGEyMjQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrTFRDX1NoYTI1NjoKKyAgICAgICAgICAgIG1vZGVSZWcgPSAodWludDMyX3Qpa0xUQ19BbGdvcml0aG1TSEEyNTY7CisgICAgICAgICAgICBvdXRTaXplID0ga0xUQ19PdXRMZW5TaGEyNTY7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbW9kZVJlZyB8PSAodWludDMyX3QpYXNNb2RlOworICAgIGlmIChhbGdPdXRTaXplKQorICAgIHsKKyAgICAgICAgKmFsZ091dFNpemUgPSBvdXRTaXplOworICAgIH0KKworICAgIHJldHVybiBtb2RlUmVnOworfQorCitzdGF0aWMgdm9pZCBsdGNfaGFzaF9lbmdpbmVfaW5pdChsdGNfaGFzaF9jdHhfaW50ZXJuYWxfdCAqY3R4KQoreworICAgIHVpbnQ4X3QgKmtleTsKKyAgICB1aW50MzJfdCBrZXlTaXplOworICAgIExUQ19UeXBlICpiYXNlOworICAgIGx0Y19tb2RlX3N5bW1ldHJpY19hbGdfdCBhbGdvOworCisgICAgYmFzZSA9IGN0eC0+YmFzZTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgIGlmIChsdGNfaGFzaF9hbGdfaXNfY21hYyhjdHgtPmFsZ28pKQorICAgIHsKKyNlbmRpZiAgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogIHdvcmRba0x0Y0NtYWNDdHhLZXlTaXplXSA9IGtleV9sZW5ndGgKKyAgICAgICAgICogIHdvcmRbMS04XSA9IGtleQorICAgICAgICAgKi8KKyAgICAgICAga2V5U2l6ZSA9IGN0eC0+d29yZFtrTFRDX0hhc2hDdHhLZXlTaXplXTsKKyAgICAgICAga2V5ID0gKHVpbnQ4X3QgKikmY3R4LT53b3JkW2tMVENfSGFzaEN0eEtleVN0YXJ0SWR4XTsKKworICAgICAgICAvKiBzZXQgTFRDIG1vZGUgcmVnaXN0ZXIgdG8gSU5JVElBTElaRSAqLworICAgICAgICBhbGdvID0gKGN0eC0+YWxnbyA9PSBrTFRDX1hjYmNNYWMpID8ga0xUQ19Nb2RlWENCQ01BQyA6IGtMVENfTW9kZUNNQUM7CisgICAgICAgIGx0Y19zeW1tZXRyaWNfaW5pdChiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBhbGdvLCBrTFRDX01vZGVFbmNyeXB0KTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgIH0KKyAgICBlbHNlIGlmIChsdGNfaGFzaF9hbGdfaXNfc2hhKGN0eC0+YWxnbykpCisgICAgeworICAgICAgICAvKiBDbGVhciBpbnRlcm5hbCByZWdpc3RlciBzdGF0ZXMuICovCisgICAgICAgIGJhc2UtPkNXID0gKHVpbnQzMl90KWtMVENfQ2xlYXJBbGw7CisKKyAgICAgICAgLyogU2V0IGJ5dGUgc3dhcCBvbiBmb3Igc2V2ZXJhbCByZWdpc3RlcnMgd2Ugd2lsbCBiZSByZWFkaW5nIGFuZCB3cml0aW5nCisgICAgICAgICAqIHVzZXIgZGF0YSB0by9mcm9tLiAqLworICAgICAgICBiYXNlLT5DVEwgfD0ga0xUQ19DdHJsU3dhcEFsbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogZG8gbm90aGluZyBpbiB0aGlzIGNhc2UgKi8KKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KK30KKworc3RhdGljIHZvaWQgbHRjX2hhc2hfc2F2ZV9jb250ZXh0KGx0Y19oYXNoX2N0eF9pbnRlcm5hbF90ICpjdHgpCit7CisgICAgdWludDMyX3Qgc3o7CisgICAgTFRDX1R5cGUgKmJhc2U7CisKKyAgICBiYXNlID0gY3R4LT5iYXNlOworICAgIC8qIEdldCBjb250ZXh0IHNpemUgKi8KKyAgICBzd2l0Y2ggKGN0eC0+YWxnbykKKyAgICB7CisgICAgICAgIGNhc2Uga0xUQ19YY2JjTWFjOgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICogIHdvcmRbMC0zXSA9IG1hYworICAgICAgICAgICAgKiAgd29yZFszLTddID0gazMKKyAgICAgICAgICAgICogIHdvcmRbOC0xMV0gPSBrMgorICAgICAgICAgICAgKiAgd29yZFtrTHRjQ21hY0N0eEtleVNpemVdID0ga2V5U2l6ZQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN6ID0gMTIgKiBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0xUQ19DbWFjOgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICogIHdvcmRbMC0zXSA9IG1hYworICAgICAgICAgICAgKiAgd29yZFszLTddID0gTCAqLworICAgICAgICAgICAgc3ogPSA4ICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAgICAgIGNhc2Uga0xUQ19TaGExOgorICAgICAgICAgICAgc3ogPSAoa0xUQ19SdW5MZW5TaGExKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtMVENfU2hhMjI0OgorICAgICAgICAgICAgc3ogPSAoa0xUQ19SdW5MZW5TaGEyMjQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0xUQ19TaGEyNTY6CisgICAgICAgICAgICBzeiA9IChrTFRDX1J1bkxlblNoYTI1Nik7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3ogPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbHRjX2dldF9jb250ZXh0KGJhc2UsICh1aW50OF90ICopJmN0eC0+d29yZFswXSwgc3osIDApOworCisgICAgaWYgKHRydWUgPT0gbHRjX2hhc2hfYWxnX2lzX2NtYWMoY3R4LT5hbGdvKSkKKyAgICB7CisgICAgICAgIC8qIHdvcmRbMTItMTldID0ga2V5ICovCisgICAgICAgIGx0Y19nZXRfa2V5KGJhc2UsICh1aW50OF90ICopJmN0eC0+d29yZFtrTFRDX0hhc2hDdHhLZXlTdGFydElkeF0sIGN0eC0+d29yZFtrTFRDX0hhc2hDdHhLZXlTaXplXSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBsdGNfaGFzaF9yZXN0b3JlX2NvbnRleHQobHRjX2hhc2hfY3R4X2ludGVybmFsX3QgKmN0eCkKK3sKKyAgICB1aW50MzJfdCBzejsKKyAgICB1aW50MzJfdCBrZXlTaXplOworICAgIExUQ19UeXBlICpiYXNlOworCisgICAgYmFzZSA9IGN0eC0+YmFzZTsKKyAgICAvKiBHZXQgY29udGV4dCBzaXplICovCisgICAgc3dpdGNoIChjdHgtPmFsZ28pCisgICAgeworICAgICAgICBjYXNlIGtMVENfWGNiY01hYzoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAqICB3b3JkWzAtM10gPSBtYWMKKyAgICAgICAgICAgICogIHdvcmRbMy03XSA9IGszCisgICAgICAgICAgICAqICB3b3JkWzgtMTFdID0gazIKKyAgICAgICAgICAgICogIHdvcmRba0x0Y0NtYWNDdHhLZXlTaXplXSA9IGtleVNpemUKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBzeiA9IDEyICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtMVENfQ21hYzoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAqICB3b3JkWzAtM10gPSBtYWMKKyAgICAgICAgICAgICogIHdvcmRbMy03XSA9IEwgKi8KKyAgICAgICAgICAgIHN6ID0gOCAqIHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICBicmVhazsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgICAgICBjYXNlIGtMVENfU2hhMToKKyAgICAgICAgICAgIHN6ID0gKGtMVENfUnVuTGVuU2hhMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrTFRDX1NoYTIyNDoKKyAgICAgICAgICAgIHN6ID0gKGtMVENfUnVuTGVuU2hhMjI0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtMVENfU2hhMjU2OgorICAgICAgICAgICAgc3ogPSAoa0xUQ19SdW5MZW5TaGEyNTYpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN6ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGx0Y19zZXRfY29udGV4dChiYXNlLCAoY29uc3QgdWludDhfdCAqKSZjdHgtPndvcmRbMF0sIHN6LCAwKTsKKworICAgIGlmIChsdGNfaGFzaF9hbGdfaXNfY21hYyhjdHgtPmFsZ28pKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogIHdvcmRbMTItMTldID0ga2V5CisgICAgICAgICAqICB3b3JkW2tMdGNDbWFjQ3R4S2V5U2l6ZV0gPSBrZXlTaXplCisgICAgICAgICAqLworICAgICAgICBiYXNlLT5DVyA9IGtMVENfQ2xlYXJLZXk7IC8qIGNsZWFyIEtleSBhbmQgS2V5IFNpemUgcmVnaXN0ZXJzICovCisKKyAgICAgICAga2V5U2l6ZSA9IGN0eC0+d29yZFtrTFRDX0hhc2hDdHhLZXlTaXplXTsKKyAgICAgICAgLyogV3JpdGUgdGhlIGtleSBpbiBwbGFjZS4gKi8KKyAgICAgICAgbHRjX3NldF9rZXkoYmFzZSwgKGNvbnN0IHVpbnQ4X3QgKikmY3R4LT53b3JkW2tMVENfSGFzaEN0eEtleVN0YXJ0SWR4XSwga2V5U2l6ZSk7CisKKyAgICAgICAgLyogV3JpdGUgdGhlIGtleSBzaXplLiAgVGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgd3JpdGluZyB0aGUga2V5LCBhbmQgdGhpcworICAgICAgICAgKiBhY3Rpb24gbG9ja3MgdGhlIGFiaWxpdHkgdG8gbW9kaWZ5IHRoZSBrZXkgcmVnaXN0ZXJzLiAqLworICAgICAgICBiYXNlLT5LUyA9IGtleVNpemU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBsdGNfaGFzaF9wcmVwYXJlX2NvbnRleHRfc3dpdGNoKExUQ19UeXBlICpiYXNlKQoreworICAgIGJhc2UtPkNXID0gKHVpbnQzMl90KWtMVENfQ2xlYXJEYXRhU2l6ZSB8ICh1aW50MzJfdClrTFRDX0NsZWFyTW9kZTsKKyAgICBiYXNlLT5TVEEgPSBrTFRDX1N0YXR1c0RvbmVJc3I7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBsdGNfaGFzaF9nZXRfYmxvY2tfc2l6ZShsdGNfaGFzaF9hbGdvX3QgYWxnbykKK3sKKyAgICBpZiAoKGFsZ28gPT0ga0xUQ19YY2JjTWFjKSB8fCAoYWxnbyA9PSBrTFRDX0NtYWMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh1aW50MzJfdClMVENfQUVTX0JMT0NLX1NJWkU7CisgICAgfQorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAgZWxzZSBpZiAoKGFsZ28gPT0ga0xUQ19TaGExKSB8fCAoYWxnbyA9PSBrTFRDX1NoYTIyNCkgfHwgKGFsZ28gPT0ga0xUQ19TaGEyNTYpKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh1aW50MzJfdClMVENfU0hBX0JMT0NLX1NJWkU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgbHRjX2hhc2hfYmxvY2tfdG9faWZpZm8oTFRDX1R5cGUgKmJhc2UsIGNvbnN0IGx0Y19oYXNoX2Jsb2NrX3QgKmJsaywgdWludDMyX3QgbnVtQnl0ZXMsIHVpbnQzMl90IGJsb2NrU2l6ZSkKK3sKKyAgICB1aW50MzJfdCBpID0gMDsKKyAgICB1aW50MzJfdCB3b3JkczsKKworICAgIHdvcmRzID0gbnVtQnl0ZXMgLyA0dTsKKyAgICBpZiAobnVtQnl0ZXMgJSA0dSkKKyAgICB7CisgICAgICAgIHdvcmRzKys7CisgICAgfQorCisgICAgaWYgKHdvcmRzID4gYmxvY2tTaXplIC8gNHUpCisgICAgeworICAgICAgICB3b3JkcyA9IGJsb2NrU2l6ZSAvIDR1OworICAgIH0KKworICAgIHdoaWxlIChpIDwgd29yZHMpCisgICAgeworICAgICAgICBpZiAoMFUgPT0gKGJhc2UtPkZJRk9TVEEgJiBMVENfRklGT1NUQV9JRkZfTUFTSykpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENvcHkgZGF0YSB0byB0aGUgaW5wdXQgRklGTy4gKi8KKyAgICAgICAgICAgIGJhc2UtPklGSUZPID0gYmxrLT53W2krK107CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGx0Y19oYXNoX21vdmVfdG9faWZpZm8obHRjX2hhc2hfY3R4X2ludGVybmFsX3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGF0YVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJsb2NrU2l6ZSkKK3sKKyAgICBsdGNfaGFzaF9ibG9ja190IGJsa1plcm87CisgICAgdWludDMyX3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJsa1plcm8udyk7IGkrKykKKyAgICB7CisgICAgICAgIGJsa1plcm8ud1tpXSA9IDA7CisgICAgfQorCisgICAgd2hpbGUgKGRhdGFTaXplKQorICAgIHsKKyAgICAgICAgaWYgKGRhdGFTaXplID49IGJsb2NrU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbHRjX21lbWNweSgmY3R4LT5ibGssIGRhdGEsIGJsb2NrU2l6ZSk7CisgICAgICAgICAgICBsdGNfaGFzaF9ibG9ja190b19pZmlmbyhjdHgtPmJhc2UsICZjdHgtPmJsaywgYmxvY2tTaXplLCBibG9ja1NpemUpOworICAgICAgICAgICAgZGF0YVNpemUgLT0gYmxvY2tTaXplOworICAgICAgICAgICAgZGF0YSArPSBibG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBsYXN0IGluY29tcGxldGUgMTYvNjQtYnl0ZXMgYmxvY2sgb2YgdGhpcyBtZXNzYWdlIGNodW5rICovCisgICAgICAgICAgICBsdGNfbWVtY3B5KCZjdHgtPmJsaywgJmJsa1plcm8sIHNpemVvZihjdHgtPmJsaykpOworICAgICAgICAgICAgbHRjX21lbWNweSgmY3R4LT5ibGssIGRhdGEsIGRhdGFTaXplKTsKKyAgICAgICAgICAgIGN0eC0+Ymxrc3ogPSBkYXRhU2l6ZTsKKyAgICAgICAgICAgIGRhdGFTaXplID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHN0YXR1c190IGx0Y19oYXNoX21lcmdlX2FuZF9mbHVzaF9idWYobHRjX2hhc2hfY3R4X2ludGVybmFsX3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5wdXRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfdCBtb2RlUmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYmxvY2tTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmNvbnN1bWVkU2l6ZSkKK3sKKyAgICB1aW50MzJfdCBzejsKKyAgICBMVENfVHlwZSAqYmFzZTsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisKKyAgICBiYXNlID0gY3R4LT5iYXNlOworICAgIHN6ID0gMDsKKyAgICBpZiAoY3R4LT5ibGtzeikKKyAgICB7CisgICAgICAgIHN6ID0gYmxvY2tTaXplIC0gY3R4LT5ibGtzejsKKyAgICAgICAgaWYgKHN6ID4gaW5wdXRTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBzeiA9IGlucHV0U2l6ZTsKKyAgICAgICAgfQorICAgICAgICBsdGNfbWVtY3B5KGN0eC0+YmxrLmIgKyBjdHgtPmJsa3N6LCBpbnB1dCwgc3opOworICAgICAgICBpbnB1dCArPSBzejsKKyAgICAgICAgaW5wdXRTaXplIC09IHN6OworICAgICAgICBjdHgtPmJsa3N6ICs9IHN6OworCisgICAgICAgIGlmIChjdHgtPmJsa3N6ID09IGJsb2NrU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZS0+RFMgPSBibG9ja1NpemU7CisgICAgICAgICAgICBsdGNfaGFzaF9ibG9ja190b19pZmlmbyhiYXNlLCAmY3R4LT5ibGssIGJsb2NrU2l6ZSwgYmxvY2tTaXplKTsKKyAgICAgICAgICAgIGN0eC0+Ymxrc3ogPSAwOworCisgICAgICAgICAgICBzdGF0dXMgPSBsdGNfd2FpdChiYXNlKTsKKyAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGlmIHRoZXJlIGlzIHN0aWxsIGlucHV0U2l6ZSBsZWZ0LCBtYWtlIHN1cmUgTFRDIGFsZy5zdGF0ZSBpcyBzZXQgdG8gVVBEQVRFIGFuZCBjb250aW51ZSAqLworICAgICAgICAgICAgaWYgKGlucHV0U2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBzZXQgYWxnb3JpdGhtIHN0YXRlIHRvIFVQREFURSAqLworICAgICAgICAgICAgICAgIG1vZGVSZWcgJj0gfkxUQ19NRF9BU19NQVNLOworICAgICAgICAgICAgICAgIG1vZGVSZWcgfD0ga0xUQ19Nb2RlVXBkYXRlOworICAgICAgICAgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY29uc3VtZWRTaXplKQorICAgIHsKKyAgICAgICAgKmNvbnN1bWVkU2l6ZSA9IHN6OworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3RhdHVzX3QgbHRjX2hhc2hfbW92ZV9yZXN0X3RvX2NvbnRleHQoCisgICAgbHRjX2hhc2hfY3R4X2ludGVybmFsX3QgKmN0eCwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgZGF0YVNpemUsIGx0Y19tb2RlX3QgbW9kZVJlZywgdWludDMyX3QgYmxvY2tTaXplKQoreworICAgIHN0YXR1c190IHN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICBsdGNfaGFzaF9ibG9ja190IGJsa1plcm87CisgICAgdWludDMyX3QgaTsKKworICAgIC8qIG1ha2UgYmxrWmVybyBjbGVhciAqLworICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJsa1plcm8udyk7IGkrKykKKyAgICB7CisgICAgICAgIGJsa1plcm8ud1tpXSA9IDA7CisgICAgfQorCisgICAgd2hpbGUgKGRhdGFTaXplKQorICAgIHsKKyAgICAgICAgaWYgKGRhdGFTaXplID4gYmxvY2tTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhU2l6ZSAtPSBibG9ja1NpemU7CisgICAgICAgICAgICBkYXRhICs9IGJsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChkYXRhU2l6ZSArIGN0eC0+Ymxrc3ogPiBibG9ja1NpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWludDMyX3Qgc3o7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gbHRjX2hhc2hfbWVyZ2VfYW5kX2ZsdXNoX2J1ZihjdHgsIGRhdGEsIGRhdGFTaXplLCBtb2RlUmVnLCBibG9ja1NpemUsICZzeik7CisgICAgICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSBzdGF0dXMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkYXRhICs9IHN6OworICAgICAgICAgICAgICAgIGRhdGFTaXplIC09IHN6OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogbGFzdCBpbmNvbXBsZXRlIDE2LzY0LWJ5dGVzIGJsb2NrIG9mIHRoaXMgbWVzc2FnZSBjaHVuayAqLworICAgICAgICAgICAgbHRjX21lbWNweSgmY3R4LT5ibGssICZibGtaZXJvLCBibG9ja1NpemUpOworICAgICAgICAgICAgbHRjX21lbWNweSgmY3R4LT5ibGssIGRhdGEsIGRhdGFTaXplKTsKKyAgICAgICAgICAgIGN0eC0+Ymxrc3ogPSBkYXRhU2l6ZTsKKyAgICAgICAgICAgIGRhdGFTaXplID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3RhdHVzX3QgbHRjX2hhc2hfcHJvY2Vzc19pbnB1dF9kYXRhKGx0Y19oYXNoX2N0eF9pbnRlcm5hbF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnB1dFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX3QgbW9kZVJlZykKK3sKKyAgICB1aW50MzJfdCBzeiA9IDA7CisgICAgTFRDX1R5cGUgKmJhc2U7CisgICAgdWludDMyX3QgYmxvY2tTaXplID0gMDsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisKKyAgICBibG9ja1NpemUgPSBsdGNfaGFzaF9nZXRfYmxvY2tfc2l6ZShjdHgtPmFsZ28pOworICAgIGJhc2UgPSBjdHgtPmJhc2U7CisKKyAgICAvKiBmaWxsIGNvbnRleHQgc3RydWN0IGJsayBhbmQgZmx1c2ggdG8gTFRDIGlmaWZvIGluIGNhc2UgaXQgaXMgZnVsbCBibG9jayAqLworICAgIHN0YXR1cyA9IGx0Y19oYXNoX21lcmdlX2FuZF9mbHVzaF9idWYoY3R4LCBpbnB1dCwgaW5wdXRTaXplLCBtb2RlUmVnLCBibG9ja1NpemUsICZzeik7CisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSBzdGF0dXMpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBpbnB1dCArPSBzejsKKyAgICBpbnB1dFNpemUgLT0gc3o7CisKKyAgICAvKiBpZiB0aGVyZSBpcyBzdGlsbCBtb3JlIHRoYW4gb3IgZXF1YWwgdG8gNjQgYnl0ZXMsIG1vdmUgZWFjaCA2NCBieXRlcyB0aHJvdWdoIExUQyAqLworICAgIHN6ID0gTFRDX0RTX0RTX01BU0sgKyAxdSAtIExUQ19IQVNIX0JMT0NLX1NJWkU7CisgICAgd2hpbGUgKGlucHV0U2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChpbnB1dFNpemUgPCBzeikKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgbGFzdFNpemU7CisKKyAgICAgICAgICAgIGxhc3RTaXplID0gaW5wdXRTaXplICUgYmxvY2tTaXplOworICAgICAgICAgICAgaWYgKGxhc3RTaXplID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGFzdFNpemUgPSBibG9ja1NpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnB1dFNpemUgLT0gbGFzdFNpemU7CisgICAgICAgICAgICBpZiAoaW5wdXRTaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIG1vdmUgYWxsIGNvbXBsZXRlIGJsb2NrcyB0byBpZmlmby4gKi8KKyAgICAgICAgICAgICAgICBiYXNlLT5EUyA9IGlucHV0U2l6ZTsKKyAgICAgICAgICAgICAgICBsdGNfaGFzaF9tb3ZlX3RvX2lmaWZvKGN0eCwgaW5wdXQsIGlucHV0U2l6ZSwgYmxvY2tTaXplKTsKKworICAgICAgICAgICAgICAgIHN0YXR1cyA9IGx0Y193YWl0KGJhc2UpOworICAgICAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpbnB1dCArPSBpbnB1dFNpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBrZWVwIGxhc3QgKGluKWNvbXBsZXRlIDE2LWJ5dGVzIGJsb2NrIGluIGNvbnRleHQgc3RydWN0LiAqLworICAgICAgICAgICAgLyogd2hlbiAzcmQgYXJndW1lbnQgb2YgY21hY19tb3ZlX3RvX2lmaWZvKCkgaXMgPD0gMTYgYnl0ZXMsIGl0IG9ubHkgc3RvcmVzIHRoZSBkYXRhIHRvIGNvbnRleHQgc3RydWN0ICovCisgICAgICAgICAgICBzdGF0dXMgPSBsdGNfaGFzaF9tb3ZlX3Jlc3RfdG9fY29udGV4dChjdHgsIGlucHV0LCBsYXN0U2l6ZSwgbW9kZVJlZywgYmxvY2tTaXplKTsKKyAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnB1dFNpemUgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZS0+RFMgPSBzejsKKyAgICAgICAgICAgIGx0Y19oYXNoX21vdmVfdG9faWZpZm8oY3R4LCBpbnB1dCwgc3osIGJsb2NrU2l6ZSk7CisgICAgICAgICAgICBpbnB1dFNpemUgLT0gc3o7CisgICAgICAgICAgICBpbnB1dCArPSBzejsKKworICAgICAgICAgICAgc3RhdHVzID0gbHRjX3dhaXQoYmFzZSk7CisgICAgICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHN0YXR1cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBzZXQgYWxnb3JpdGhtIHN0YXRlIHRvIFVQREFURSAqLworICAgICAgICAgICAgbW9kZVJlZyAmPSB+TFRDX01EX0FTX01BU0s7CisgICAgICAgICAgICBtb2RlUmVnIHw9IGtMVENfTW9kZVVwZGF0ZTsKKyAgICAgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZzsKKyAgICAgICAgfQorICAgIH0gLyogZW5kIHdoaWxlICovCisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSEFTSCBDb2RlIHB1YmxpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXR1c190IExUQ19IQVNIX0luaXQoTFRDX1R5cGUgKmJhc2UsIGx0Y19oYXNoX2N0eF90ICpjdHgsIGx0Y19oYXNoX2FsZ29fdCBhbGdvLCBjb25zdCB1aW50OF90ICprZXksIHVpbnQzMl90IGtleVNpemUpCit7CisgICAgc3RhdHVzX3QgcmV0OworICAgIGx0Y19oYXNoX2N0eF9pbnRlcm5hbF90ICpjdHhJbnRlcm5hbDsKKyAgICB1aW50MzJfdCBpOworCisgICAgcmV0ID0gbHRjX2hhc2hfY2hlY2tfaW5wdXRfYXJncyhiYXNlLCBjdHgsIGFsZ28sIGtleSwga2V5U2l6ZSk7CisgICAgaWYgKHJldCAhPSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIC8qIHNldCBhbGdvcml0aG0gaW4gY29udGV4dCBzdHJ1Y3QgZm9yIGxhdGVyIHVzZSAqLworICAgIGN0eEludGVybmFsID0gKGx0Y19oYXNoX2N0eF9pbnRlcm5hbF90ICopY3R4OworICAgIGN0eEludGVybmFsLT5hbGdvID0gYWxnbzsKKyAgICBmb3IgKGkgPSAwOyBpIDwga0xUQ19IYXNoQ3R4TnVtV29yZHM7IGkrKykKKyAgICB7CisgICAgICAgIGN0eEludGVybmFsLT53b3JkW2ldID0gMHU7CisgICAgfQorCisgICAgLyogU3RlcHMgcmVxdWlyZWQgb25seSB1c2luZyBBRVMgZW5naW5lICovCisgICAgaWYgKGx0Y19oYXNoX2FsZ19pc19jbWFjKGFsZ28pKQorICAgIHsKKyAgICAgICAgLyogc3RvcmUgaW5wdXQga2V5IGFuZCBrZXkgbGVuZ3RoIGluIGNvbnRleHQgc3RydWN0IGZvciBsYXRlciB1c2UgKi8KKyAgICAgICAgY3R4SW50ZXJuYWwtPndvcmRba0xUQ19IYXNoQ3R4S2V5U2l6ZV0gPSBrZXlTaXplOworICAgICAgICBsdGNfbWVtY3B5KCZjdHhJbnRlcm5hbC0+d29yZFtrTFRDX0hhc2hDdHhLZXlTdGFydElkeF0sIGtleSwga2V5U2l6ZSk7CisgICAgfQorICAgIGN0eEludGVybmFsLT5ibGtzeiA9IDB1OworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoY3R4SW50ZXJuYWwtPmJsay53KSAvIHNpemVvZihjdHhJbnRlcm5hbC0+YmxrLndbMF0pOyBpKyspCisgICAgeworICAgICAgICBjdHhJbnRlcm5hbC0+YmxrLndbMF0gPSAwdTsKKyAgICB9CisgICAgY3R4SW50ZXJuYWwtPnN0YXRlID0ga0xUQ19IYXNoSW5pdDsKKyAgICBjdHhJbnRlcm5hbC0+YmFzZSA9IGJhc2U7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBMVENfSEFTSF9VcGRhdGUobHRjX2hhc2hfY3R4X3QgKmN0eCwgY29uc3QgdWludDhfdCAqaW5wdXQsIHVpbnQzMl90IGlucHV0U2l6ZSkKK3sKKyAgICBib29sIGlzVXBkYXRlU3RhdGU7CisgICAgbHRjX21vZGVfdCBtb2RlUmVnID0gMDsgLyogcmVhZCBhbmQgd3JpdGUgTFRDIG1vZGUgcmVnaXN0ZXIgKi8KKyAgICBMVENfVHlwZSAqYmFzZTsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgbHRjX2hhc2hfY3R4X2ludGVybmFsX3QgKmN0eEludGVybmFsOworICAgIHVpbnQzMl90IGJsb2NrU2l6ZTsKKworICAgIGN0eEludGVybmFsID0gKGx0Y19oYXNoX2N0eF9pbnRlcm5hbF90ICopY3R4OworICAgIHN0YXR1cyA9IGx0Y19oYXNoX2NoZWNrX2NvbnRleHQoY3R4SW50ZXJuYWwsIGlucHV0KTsKKyAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHN0YXR1cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgYmFzZSA9IGN0eEludGVybmFsLT5iYXNlOworICAgIGJsb2NrU2l6ZSA9IGx0Y19oYXNoX2dldF9ibG9ja19zaXplKGN0eEludGVybmFsLT5hbGdvKTsKKyAgICAvKiBpZiB3ZSBhcmUgc3RpbGwgbGVzcyB0aGFuIDY0IGJ5dGVzLCBrZWVwIG9ubHkgaW4gY29udGV4dCAqLworICAgIGlmICgoY3R4SW50ZXJuYWwtPmJsa3N6ICsgaW5wdXRTaXplKSA8PSBibG9ja1NpemUpCisgICAgeworICAgICAgICBsdGNfbWVtY3B5KCgmY3R4SW50ZXJuYWwtPmJsay5iWzBdKSArIGN0eEludGVybmFsLT5ibGtzeiwgaW5wdXQsIGlucHV0U2l6ZSk7CisgICAgICAgIGN0eEludGVybmFsLT5ibGtzeiArPSBpbnB1dFNpemU7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlzVXBkYXRlU3RhdGUgPSBjdHhJbnRlcm5hbC0+c3RhdGUgPT0ga0xUQ19IYXNoVXBkYXRlOworICAgICAgICBpZiAoY3R4SW50ZXJuYWwtPnN0YXRlID09IGtMVENfSGFzaEluaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHNldCBMVEMgbW9kZSByZWdpc3RlciB0byBJTklUSUFMSVpFIGpvYiAqLworICAgICAgICAgICAgbHRjX2hhc2hfZW5naW5lX2luaXQoY3R4SW50ZXJuYWwpOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEKKyAgICAgICAgICAgIGlmIChsdGNfaGFzaF9hbGdfaXNfY21hYyhjdHhJbnRlcm5hbC0+YWxnbykpCisgICAgICAgICAgICB7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KKyAgICAgICAgICAgICAgICBjdHhJbnRlcm5hbC0+c3RhdGUgPSBrTFRDX0hhc2hVcGRhdGU7CisgICAgICAgICAgICAgICAgaXNVcGRhdGVTdGF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYmFzZS0+RFMgPSAwdTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBsdGNfd2FpdChiYXNlKTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgcHJvcGVyIGJsb2NrIGFuZCBhbGdvcml0aG0gbW9kZS4gKi8KKyAgICAgICAgICAgICAgICBtb2RlUmVnID0gbHRjX2hhc2hfYWxnbzJtb2RlKGN0eEludGVybmFsLT5hbGdvLCBrTFRDX01vZGVJbml0LCBOVUxMKTsKKyAgICAgICAgICAgICAgICBiYXNlLT5NRCA9IG1vZGVSZWc7CisKKyAgICAgICAgICAgICAgICBjdHhJbnRlcm5hbC0+c3RhdGUgPSBrTFRDX0hhc2hVcGRhdGU7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gbHRjX2hhc2hfcHJvY2Vzc19pbnB1dF9kYXRhKGN0eEludGVybmFsLCBpbnB1dCwgaW5wdXRTaXplLCBtb2RlUmVnKTsKKyAgICAgICAgICAgICAgICBsdGNfaGFzaF9zYXZlX2NvbnRleHQoY3R4SW50ZXJuYWwpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNVcGRhdGVTdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogcmVzdG9yZSBMVEMgY29udGV4dCBmcm9tIGNvbnRleHQgc3RydWN0ICovCisgICAgICAgICAgICBsdGNfaGFzaF9yZXN0b3JlX2NvbnRleHQoY3R4SW50ZXJuYWwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogbm90aGluZyBzcGVjaWFsIGF0IHRoaXMgcGxhY2UgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoaXNVcGRhdGVTdGF0ZSkKKyAgICB7CisgICAgICAgIC8qIHNldCBMVEMgbW9kZSByZWdpc3RlciB0byBVUERBVEUgam9iICovCisgICAgICAgIGx0Y19oYXNoX3ByZXBhcmVfY29udGV4dF9zd2l0Y2goYmFzZSk7CisgICAgICAgIGJhc2UtPkNXID0ga0xUQ19DbGVhckRhdGFTaXplOworICAgICAgICBtb2RlUmVnID0gbHRjX2hhc2hfYWxnbzJtb2RlKGN0eEludGVybmFsLT5hbGdvLCBrTFRDX01vZGVVcGRhdGUsIE5VTEwpOworICAgICAgICBiYXNlLT5NRCA9IG1vZGVSZWc7CisKKyAgICAgICAgLyogcHJvY2VzcyBpbnB1dCBkYXRhIGFuZCBzYXZlIExUQyBjb250ZXh0IHRvIGNvbnRleHQgc3RydWN0dXJlICovCisgICAgICAgIHN0YXR1cyA9IGx0Y19oYXNoX3Byb2Nlc3NfaW5wdXRfZGF0YShjdHhJbnRlcm5hbCwgaW5wdXQsIGlucHV0U2l6ZSwgbW9kZVJlZyk7CisgICAgICAgIGx0Y19oYXNoX3NhdmVfY29udGV4dChjdHhJbnRlcm5hbCk7CisgICAgfQorICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19IQVNIX0ZpbmlzaChsdGNfaGFzaF9jdHhfdCAqY3R4LCB1aW50OF90ICpvdXRwdXQsIHVpbnQzMl90ICpvdXRwdXRTaXplKQoreworICAgIGx0Y19tb2RlX3QgbW9kZVJlZzsgLyogcmVhZCBhbmQgd3JpdGUgTFRDIG1vZGUgcmVnaXN0ZXIgKi8KKyAgICBMVENfVHlwZSAqYmFzZTsKKyAgICB1aW50MzJfdCBhbGdPdXRTaXplID0gMDsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgbHRjX2hhc2hfY3R4X2ludGVybmFsX3QgKmN0eEludGVybmFsOworICAgIHVpbnQzMl90ICpjdHhXOworICAgIHVpbnQzMl90IGk7CisKKyAgICBjdHhJbnRlcm5hbCA9IChsdGNfaGFzaF9jdHhfaW50ZXJuYWxfdCAqKWN0eDsKKyAgICBzdGF0dXMgPSBsdGNfaGFzaF9jaGVja19jb250ZXh0KGN0eEludGVybmFsLCBvdXRwdXQpOworICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBiYXNlID0gY3R4SW50ZXJuYWwtPmJhc2U7CisgICAgbHRjX2hhc2hfcHJlcGFyZV9jb250ZXh0X3N3aXRjaChiYXNlKTsKKworICAgIGJhc2UtPkNXID0ga0xUQ19DbGVhckRhdGFTaXplOworICAgIGlmIChjdHhJbnRlcm5hbC0+c3RhdGUgPT0ga0xUQ19IYXNoSW5pdCkKKyAgICB7CisgICAgICAgIGx0Y19oYXNoX2VuZ2luZV9pbml0KGN0eEludGVybmFsKTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgICAgICBpZiAobHRjX2hhc2hfYWxnX2lzX2NtYWMoY3R4SW50ZXJuYWwtPmFsZ28pKQorICAgICAgICB7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KKyAgICAgICAgICAgIGJhc2UtPkRTID0gMHU7CisgICAgICAgICAgICBzdGF0dXMgPSBsdGNfd2FpdChiYXNlKTsKKyAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb2RlUmVnID0gbHRjX2hhc2hfYWxnbzJtb2RlKGN0eEludGVybmFsLT5hbGdvLCBrTFRDX01vZGVGaW5hbGl6ZSwgJmFsZ091dFNpemUpOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtb2RlUmVnID0gbHRjX2hhc2hfYWxnbzJtb2RlKGN0eEludGVybmFsLT5hbGdvLCBrTFRDX01vZGVJbml0RmluYWwsICZhbGdPdXRTaXplKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBICovCisgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbW9kZVJlZyA9IGx0Y19oYXNoX2FsZ28ybW9kZShjdHhJbnRlcm5hbC0+YWxnbywga0xUQ19Nb2RlRmluYWxpemUsICZhbGdPdXRTaXplKTsKKyAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnOworCisgICAgICAgIC8qIHJlc3RvcmUgTFRDIGNvbnRleHQgZnJvbSBjb250ZXh0IHN0cnVjdCAqLworICAgICAgICBsdGNfaGFzaF9yZXN0b3JlX2NvbnRleHQoY3R4SW50ZXJuYWwpOworICAgIH0KKworICAgIC8qIGZsdXNoIG1lc3NhZ2UgbGFzdCBpbmNvbXBsZXRlIGJsb2NrLCBpZiB0aGVyZSBpcyBhbnksIG9yIHdyaXRlIHplcm8gdG8gZGF0YSBzaXplIHJlZ2lzdGVyLiAqLworICAgIGJhc2UtPkRTID0gY3R4SW50ZXJuYWwtPmJsa3N6OworICAgIGx0Y19oYXNoX2Jsb2NrX3RvX2lmaWZvKGJhc2UsICZjdHhJbnRlcm5hbC0+YmxrLCBjdHhJbnRlcm5hbC0+Ymxrc3osIGx0Y19oYXNoX2dldF9ibG9ja19zaXplKGN0eEludGVybmFsLT5hbGdvKSk7CisgICAgLyogV2FpdCBmb3IgZmluaXNoIG9mIHRoZSBlbmNyeXB0aW9uICovCisgICAgc3RhdHVzID0gbHRjX3dhaXQoYmFzZSk7CisKKyAgICBpZiAob3V0cHV0U2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChhbGdPdXRTaXplIDwgKm91dHB1dFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgICpvdXRwdXRTaXplID0gYWxnT3V0U2l6ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFsZ091dFNpemUgPSAqb3V0cHV0U2l6ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx0Y19nZXRfY29udGV4dChiYXNlLCAmb3V0cHV0WzBdLCBhbGdPdXRTaXplLCAwdSk7CisKKyAgICBjdHhXID0gKHVpbnQzMl90ICopY3R4OworICAgIGZvciAoaSA9IDA7IGkgPCBMVENfSEFTSF9DVFhfU0laRTsgaSsrKQorICAgIHsKKyAgICAgICAgY3R4V1tpXSA9IDB1OworICAgIH0KKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19IQVNIKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgbHRjX2hhc2hfYWxnb190IGFsZ28sCisgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlucHV0U2l6ZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqb3V0cHV0U2l6ZSkKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgbHRjX2hhc2hfY3R4X3QgY3R4OworCisgICAgc3RhdHVzID0gTFRDX0hBU0hfSW5pdChiYXNlLCAmY3R4LCBhbGdvLCBrZXksIGtleVNpemUpOworICAgIGlmIChzdGF0dXMgIT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgc3RhdHVzID0gTFRDX0hBU0hfVXBkYXRlKCZjdHgsIGlucHV0LCBpbnB1dFNpemUpOworICAgIGlmIChzdGF0dXMgIT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgc3RhdHVzID0gTFRDX0hBU0hfRmluaXNoKCZjdHgsIG91dHB1dCwgb3V0cHV0U2l6ZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBLSEEgQ29kZSBzdGF0aWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQQorc3RhdGljIHN0YXR1c190IGx0Y19wa2hhX2NsZWFyX3JlZ2FibmUoTFRDX1R5cGUgKmJhc2UsIGJvb2wgQSwgYm9vbCBCLCBib29sIE4sIGJvb2wgRSkKK3sKKyAgICBsdGNfbW9kZV90IG1vZGU7CisKKyAgICAvKiBTZXQgdGhlIFBLSEEgYWxnb3JpdGhtIGFuZCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24uICovCisgICAgbW9kZSA9ICh1aW50MzJfdClrTFRDX0FsZ29yaXRobVBLSEEgfCAxVTsKKworICAgIC8qIFNldCByYW0gYXJlYSB0byBjbGVhci4gQ2xlYXIgYWxsLiAqLworICAgIGlmIChBKQorICAgIHsKKyAgICAgICAgbW9kZSB8PSAxVSA8PCAxOVU7CisgICAgfQorICAgIGlmIChCKQorICAgIHsKKyAgICAgICAgbW9kZSB8PSAxVSA8PCAxOFU7CisgICAgfQorICAgIGlmIChOKQorICAgIHsKKyAgICAgICAgbW9kZSB8PSAxVSA8PCAxNlU7CisgICAgfQorICAgIGlmIChFKQorICAgIHsKKyAgICAgICAgbW9kZSB8PSAxVSA8PCAxN1U7CisgICAgfQorCisgICAgLyogV3JpdGUgdGhlIG1vZGUgcmVnaXN0ZXIgdG8gdGhlIGhhcmR3YXJlLgorICAgICAqIE5PVEU6IFRoaXMgd2lsbCBiZWdpbiB0aGUgb3BlcmF0aW9uLiAqLworICAgIGJhc2UtPk1EUEsgPSBtb2RlOworCisgICAgLyogV2FpdCBmb3IgJ2RvbmUnICovCisgICAgcmV0dXJuIGx0Y193YWl0KGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBsdGNfcGtoYV9kZWZhdWx0X3Bhcm1zKGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgKnBhcmFtcykKK3sKKyAgICBwYXJhbXMtPmZ1bmMgPSAobHRjX3BraGFfZnVuY190KTA7CisgICAgcGFyYW1zLT5hcml0aFR5cGUgPSBrTFRDX1BLSEFfSW50ZWdlckFyaXRoOworICAgIHBhcmFtcy0+bW9udEZvcm1JbiA9IGtMVENfUEtIQV9Ob3JtYWxWYWx1ZTsKKyAgICBwYXJhbXMtPm1vbnRGb3JtT3V0ID0ga0xUQ19QS0hBX05vcm1hbFZhbHVlOworICAgIHBhcmFtcy0+c3JjUmVnID0ga0xUQ19QS0hBX1JlZ0FsbDsKKyAgICBwYXJhbXMtPnNyY1F1YWQgPSBrTFRDX1BLSEFfUXVhZDA7CisgICAgcGFyYW1zLT5kc3RSZWcgPSBrTFRDX1BLSEFfUmVnQWxsOworICAgIHBhcmFtcy0+ZHN0UXVhZCA9IGtMVENfUEtIQV9RdWFkMDsKKyAgICBwYXJhbXMtPmVxdWFsVGltZSA9IGtMVENfUEtIQV9Ob1RpbWluZ0VxdWFsaXplZDsKKyAgICBwYXJhbXMtPnIybW9kbiA9IGtMVENfUEtIQV9DYWxjUjI7Cit9CisKK3N0YXRpYyB2b2lkIGx0Y19wa2hhX3dyaXRlX3dvcmQoTFRDX1R5cGUgKmJhc2UsIGx0Y19wa2hhX3JlZ19hcmVhX3QgcmVnLCB1aW50OF90IGluZGV4LCB1aW50MzJfdCBkYXRhKQoreworICAgIHN3aXRjaCAocmVnKQorICAgIHsKKyAgICAgICAgY2FzZSBrTFRDX1BLSEFfUmVnQToKKyAgICAgICAgICAgIGJhc2UtPlBLQVtpbmRleF0gPSBkYXRhOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrTFRDX1BLSEFfUmVnQjoKKyAgICAgICAgICAgIGJhc2UtPlBLQltpbmRleF0gPSBkYXRhOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrTFRDX1BLSEFfUmVnTjoKKyAgICAgICAgICAgIGJhc2UtPlBLTltpbmRleF0gPSBkYXRhOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrTFRDX1BLSEFfUmVnRToKKyAgICAgICAgICAgIGJhc2UtPlBLRVtpbmRleF0gPSBkYXRhOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHVpbnQzMl90IGx0Y19wa2hhX3JlYWRfd29yZChMVENfVHlwZSAqYmFzZSwgbHRjX3BraGFfcmVnX2FyZWFfdCByZWcsIHVpbnQ4X3QgaW5kZXgpCit7CisgICAgdWludDMyX3QgcmV0dmFsOworCisgICAgc3dpdGNoIChyZWcpCisgICAgeworICAgICAgICBjYXNlIGtMVENfUEtIQV9SZWdBOgorICAgICAgICAgICAgcmV0dmFsID0gYmFzZS0+UEtBW2luZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0xUQ19QS0hBX1JlZ0I6CisgICAgICAgICAgICByZXR2YWwgPSBiYXNlLT5QS0JbaW5kZXhdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrTFRDX1BLSEFfUmVnTjoKKyAgICAgICAgICAgIHJldHZhbCA9IGJhc2UtPlBLTltpbmRleF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtMVENfUEtIQV9SZWdFOgorICAgICAgICAgICAgcmV0dmFsID0gYmFzZS0+UEtFW2luZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR2YWwgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBsdGNfcGtoYV93cml0ZV9yZWcoCisgICAgTFRDX1R5cGUgKmJhc2UsIGx0Y19wa2hhX3JlZ19hcmVhX3QgcmVnLCB1aW50OF90IHF1YWQsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQxNl90IGRhdGFTaXplKQoreworICAgIC8qIFNlbGVjdCB0aGUgd29yZC1iYXNlZCBzdGFydCBpbmRleCBmb3IgZWFjaCBxdWFkcmFudCBvZiA2NCBieXRlcy4gKi8KKyAgICB1aW50OF90IHN0YXJ0SW5kZXggPSAocXVhZCAqIDE2dSk7CisgICAgdWludDMyX3Qgb3V0V29yZDsKKworICAgIHdoaWxlIChkYXRhU2l6ZSA+IDApCisgICAgeworICAgICAgICBpZiAoZGF0YVNpemUgPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICAgICAgeworICAgICAgICAgICAgbHRjX3BraGFfd3JpdGVfd29yZChiYXNlLCByZWcsIHN0YXJ0SW5kZXgrKywgbHRjX2dldF93b3JkX2Zyb21fdW5hbGlnbmVkKGRhdGEpKTsKKyAgICAgICAgICAgIGRhdGFTaXplIC09IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICBkYXRhICs9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiAoZGF0YVNpemUgPiAwKSAmJiAoZGF0YVNpemUgPCA0KSAqLworICAgICAgICB7CisgICAgICAgICAgICBvdXRXb3JkID0gMDsKKyAgICAgICAgICAgIGx0Y19tZW1jcHkoJm91dFdvcmQsIGRhdGEsIGRhdGFTaXplKTsKKyAgICAgICAgICAgIGx0Y19wa2hhX3dyaXRlX3dvcmQoYmFzZSwgcmVnLCBzdGFydEluZGV4LCBvdXRXb3JkKTsKKyAgICAgICAgICAgIGRhdGFTaXplID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIGx0Y19wa2hhX3JlYWRfcmVnKExUQ19UeXBlICpiYXNlLCBsdGNfcGtoYV9yZWdfYXJlYV90IHJlZywgdWludDhfdCBxdWFkLCB1aW50OF90ICpkYXRhLCB1aW50MTZfdCBkYXRhU2l6ZSkKK3sKKyAgICAvKiBTZWxlY3QgdGhlIHdvcmQtYmFzZWQgc3RhcnQgaW5kZXggZm9yIGVhY2ggcXVhZHJhbnQgb2YgNjQgYnl0ZXMuICovCisgICAgdWludDhfdCBzdGFydEluZGV4ID0gKHF1YWQgKiAxNnUpOworICAgIHVpbnQxNl90IGNhbGNTaXplOworICAgIHVpbnQzMl90IHdvcmQ7CisKKyAgICB3aGlsZSAoZGF0YVNpemUgPiAwKQorICAgIHsKKyAgICAgICAgd29yZCA9IGx0Y19wa2hhX3JlYWRfd29yZChiYXNlLCByZWcsIHN0YXJ0SW5kZXgrKyk7CisKKyAgICAgICAgY2FsY1NpemUgPSAoZGF0YVNpemUgPj0gc2l6ZW9mKHVpbnQzMl90KSkgPyBzaXplb2YodWludDMyX3QpIDogZGF0YVNpemU7CisgICAgICAgIGx0Y19tZW1jcHkoZGF0YSwgJndvcmQsIGNhbGNTaXplKTsKKworICAgICAgICBkYXRhICs9IGNhbGNTaXplOworICAgICAgICBkYXRhU2l6ZSAtPSBjYWxjU2l6ZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGx0Y19wa2hhX2luaXRfZGF0YShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVFKQoreworICAgIHVpbnQzMl90IGNsZWFyTWFzayA9IGtMVENfQ2xlYXJNb2RlOyAvKiBjbGVhciBNb2RlIFJlZ2lzdGVyICovCisKKyAgICAvKiBDbGVhciBpbnRlcm5hbCByZWdpc3RlciBzdGF0ZXMuICovCisgICAgaWYgKHNpemVBKQorICAgIHsKKyAgICAgICAgY2xlYXJNYXNrIHw9IGtMVENfQ2xlYXJQa2hhU2l6ZUE7CisgICAgfQorICAgIGlmIChzaXplQikKKyAgICB7CisgICAgICAgIGNsZWFyTWFzayB8PSBrTFRDX0NsZWFyUGtoYVNpemVCOworICAgIH0KKyAgICBpZiAoc2l6ZU4pCisgICAgeworICAgICAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplTjsKKyAgICB9CisgICAgaWYgKHNpemVFKQorICAgIHsKKyAgICAgICAgY2xlYXJNYXNrIHw9IGtMVENfQ2xlYXJQa2hhU2l6ZUU7CisgICAgfQorCisgICAgYmFzZS0+Q1cgPSBjbGVhck1hc2s7CisgICAgYmFzZS0+U1RBID0ga0xUQ19TdGF0dXNEb25lSXNyOworICAgIGx0Y19wa2hhX2NsZWFyX3JlZ2FibmUoYmFzZSwgQSwgQiwgTiwgRSk7CisKKyAgICAvKiBXcml0ZSByZWdpc3RlciBzaXplcy4gKi8KKyAgICAvKiBXcml0ZSBtb2R1bHVzIChOKSBhbmQgQSBhbmQgQiByZWdpc3RlciBhcmd1bWVudHMuICovCisgICAgaWYgKHNpemVOKQorICAgIHsKKyAgICAgICAgYmFzZS0+UEtOU1ogPSBzaXplTjsKKyAgICAgICAgaWYgKE4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnTiwgMCwgTiwgc2l6ZU4pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNpemVBKQorICAgIHsKKyAgICAgICAgYmFzZS0+UEtBU1ogPSBzaXplQTsKKyAgICAgICAgaWYgKEEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQSwgMCwgQSwgc2l6ZUEpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNpemVCKQorICAgIHsKKyAgICAgICAgYmFzZS0+UEtCU1ogPSBzaXplQjsKKyAgICAgICAgaWYgKEIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMCwgQiwgc2l6ZUIpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNpemVFKQorICAgIHsKKyAgICAgICAgYmFzZS0+UEtFU1ogPSBzaXplRTsKKyAgICAgICAgaWYgKEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnRSwgMCwgRSwgc2l6ZUUpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBsdGNfcGtoYV9tb2RlX3NldF9zcmNfcmVnX2NvcHkobHRjX21vZGVfdCAqb3V0TW9kZSwgbHRjX3BraGFfcmVnX2FyZWFfdCByZWcpCit7CisgICAgaW50IGkgPSAwOworCisgICAgZG8KKyAgICB7CisgICAgICAgIHJlZyA9IChsdGNfcGtoYV9yZWdfYXJlYV90KSgoKHVpbnQzMl90KXJlZykgPj4gMXUpOworICAgICAgICBpKys7CisgICAgfSB3aGlsZSAocmVnKTsKKworICAgIGkgPSA0IC0gaTsKKyAgICAvKiBTb3VyY2UgcmVnaXN0ZXIgbXVzdCBub3QgYmUgRS4gKi8KKyAgICBpZiAoaSAhPSAyKQorICAgIHsKKyAgICAgICAgKm91dE1vZGUgfD0gKCh1aW50MzJfdClpIDw8IDE3dSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBsdGNfcGtoYV9tb2RlX3NldF9kc3RfcmVnX2NvcHkobHRjX21vZGVfdCAqb3V0TW9kZSwgbHRjX3BraGFfcmVnX2FyZWFfdCByZWcpCit7CisgICAgaW50IGkgPSAwOworCisgICAgZG8KKyAgICB7CisgICAgICAgIHJlZyA9IChsdGNfcGtoYV9yZWdfYXJlYV90KSgoKHVpbnQzMl90KXJlZykgPj4gMXUpOworICAgICAgICBpKys7CisgICAgfSB3aGlsZSAocmVnKTsKKworICAgIGkgPSA0IC0gaTsKKyAgICAqb3V0TW9kZSB8PSAoKHVpbnQzMl90KWkgPDwgMTB1KTsKK30KKworc3RhdGljIHZvaWQgbHRjX3BraGFfbW9kZV9zZXRfc3JjX3NlZ19jb3B5KGx0Y19tb2RlX3QgKm91dE1vZGUsIGNvbnN0IGx0Y19wa2hhX3F1YWRfYXJlYV90IHF1YWQpCit7CisgICAgKm91dE1vZGUgfD0gKCh1aW50MzJfdClxdWFkIDw8IDh1KTsKK30KKworc3RhdGljIHZvaWQgbHRjX3BraGFfbW9kZV9zZXRfZHN0X3NlZ19jb3B5KGx0Y19tb2RlX3QgKm91dE1vZGUsIGNvbnN0IGx0Y19wa2hhX3F1YWRfYXJlYV90IHF1YWQpCit7CisgICAgKm91dE1vZGUgfD0gKCh1aW50MzJfdClxdWFkIDw8IDZ1KTsKK30KKworLyohCisgKiBAYnJpZWYgU3RhcnRzIHRoZSBQS0hBIG9wZXJhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhbiBvcGVyYXRpb24gY29uZmlndXJlZCBieSB0aGUgcGFyYW1zIHBhcmFtZXRlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBwYXJhbXMgQ29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgc2V0dGluZ3MgcmVxdWlyZWQgZm9yIFBLSEEgb3BlcmF0aW9uLgorICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX3BraGFfaW5pdF9tb2RlKExUQ19UeXBlICpiYXNlLCBjb25zdCBsdGNfcGtoYV9tb2RlX3BhcmFtc190ICpwYXJhbXMpCit7CisgICAgbHRjX21vZGVfdCBtb2RlUmVnOworICAgIHN0YXR1c190IHJldHZhbDsKKworICAgIC8qIFNldCB0aGUgUEtIQSBhbGdvcml0aG0gYW5kIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbi4gKi8KKyAgICBtb2RlUmVnID0ga0xUQ19BbGdvcml0aG1QS0hBOworICAgIG1vZGVSZWcgfD0gKHVpbnQzMl90KXBhcmFtcy0+ZnVuYzsKKworICAgIGlmICgocGFyYW1zLT5mdW5jID09IGtMVENfUEtIQV9Db3B5TWVtU2l6ZU4pIHx8IChwYXJhbXMtPmZ1bmMgPT0ga0xUQ19QS0hBX0NvcHlNZW1TaXplU3JjKSkKKyAgICB7CisgICAgICAgIC8qIFNldCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlZ2lzdGVycyBhbmQgcXVhZHMuICovCisgICAgICAgIGx0Y19wa2hhX21vZGVfc2V0X3NyY19yZWdfY29weSgmbW9kZVJlZywgcGFyYW1zLT5zcmNSZWcpOworICAgICAgICBsdGNfcGtoYV9tb2RlX3NldF9kc3RfcmVnX2NvcHkoJm1vZGVSZWcsIHBhcmFtcy0+ZHN0UmVnKTsKKyAgICAgICAgbHRjX3BraGFfbW9kZV9zZXRfc3JjX3NlZ19jb3B5KCZtb2RlUmVnLCBwYXJhbXMtPnNyY1F1YWQpOworICAgICAgICBsdGNfcGtoYV9tb2RlX3NldF9kc3Rfc2VnX2NvcHkoJm1vZGVSZWcsIHBhcmFtcy0+ZHN0UXVhZCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFNldCB0aGUgYXJpdGhtZXRpYyB0eXBlIC0gaW50ZWdlciBvciBiaW5hcnkgcG9seW5vbWlhbCAoRjJtKS4gKi8KKyAgICAgICAgbW9kZVJlZyB8PSAoKHVpbnQzMl90KXBhcmFtcy0+YXJpdGhUeXBlIDw8IDE3dSk7CisKKyAgICAgICAgLyogU2V0IHRvIHVzZSBNb250Z29tZXJ5IGZvcm0gb2YgaW5wdXRzIGFuZC9vciBvdXRwdXRzLiAqLworICAgICAgICBtb2RlUmVnIHw9ICgodWludDMyX3QpcGFyYW1zLT5tb250Rm9ybUluIDw8IDE5dSk7CisgICAgICAgIG1vZGVSZWcgfD0gKCh1aW50MzJfdClwYXJhbXMtPm1vbnRGb3JtT3V0IDw8IDE4dSk7CisKKyAgICAgICAgLyogU2V0IHRvIHVzZSBwcmUtY29tcHV0ZWQgUjJtb2ROICovCisgICAgICAgIG1vZGVSZWcgfD0gKCh1aW50MzJfdClwYXJhbXMtPnIybW9kbiA8PCAxNnUpOworICAgIH0KKworICAgIG1vZGVSZWcgfD0gKCh1aW50MzJfdClwYXJhbXMtPmVxdWFsVGltZSA8PCAxMHUpOworCisgICAgLyogV3JpdGUgdGhlIG1vZGUgcmVnaXN0ZXIgdG8gdGhlIGhhcmR3YXJlLgorICAgICAqIE5PVEU6IFRoaXMgd2lsbCBiZWdpbiB0aGUgb3BlcmF0aW9uLiAqLworICAgIGJhc2UtPk1EUEsgPSBtb2RlUmVnOworCisgICAgcmV0dmFsID0gbHRjX3dhaXQoYmFzZSk7CisgICAgcmV0dXJuIChyZXR2YWwpOworfQorCitzdGF0aWMgc3RhdHVzX3QgbHRjX3BraGFfbW9kUjIoCisgICAgTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKk4sIHVpbnQxNl90IHNpemVOLCB1aW50OF90ICpyZXN1bHQsIHVpbnQxNl90ICpyZXN1bHRTaXplLCBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgcGFyYW1zOworCisgICAgbHRjX3BraGFfZGVmYXVsdF9wYXJtcygmcGFyYW1zKTsKKyAgICBwYXJhbXMuZnVuYyA9IGtMVENfUEtIQV9Bcml0aE1vZFIyOworICAgIHBhcmFtcy5hcml0aFR5cGUgPSBhcml0aFR5cGU7CisKKyAgICBsdGNfcGtoYV9pbml0X2RhdGEoYmFzZSwgTlVMTCwgMCwgTlVMTCwgMCwgTiwgc2l6ZU4sIE5VTEwsIDApOworICAgIHN0YXR1cyA9IGx0Y19wa2hhX2luaXRfbW9kZShiYXNlLCAmcGFyYW1zKTsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgLyogUmVhZCB0aGUgcmVzdWx0IGFuZCBzaXplIGZyb20gcmVnaXN0ZXIgQjAuICovCisgICAgICAgIGlmIChyZXN1bHRTaXplICYmIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgKnJlc3VsdFNpemUgPSBiYXNlLT5QS0JTWjsKKyAgICAgICAgICAgIC8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgcmVzdWx0IHJlZ2lzdGVyIGludG8gcGxhY2UuICovCisgICAgICAgICAgICBsdGNfcGtoYV9yZWFkX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMCwgcmVzdWx0LCAqcmVzdWx0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3RhdHVzX3QgbHRjX3BraGFfbW9kbXVsKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX21vbnRnb21lcnlfZm9ybV90IG1vbnRJbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfbW9udGdvbWVyeV9mb3JtX3QgbW9udE91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfdGltaW5nX3QgZXF1YWxUaW1lKQoreworICAgIGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgcGFyYW1zOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGlmIChhcml0aFR5cGUgPT0ga0xUQ19QS0hBX0ludGVnZXJBcml0aCkKKyAgICB7CisgICAgICAgIGlmIChMVENfUEtIQV9Db21wYXJlQmlnTnVtKEEsIHNpemVBLCBOLCBzaXplTikgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChrU3RhdHVzX0ludmFsaWRBcmd1bWVudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoTFRDX1BLSEFfQ29tcGFyZUJpZ051bShCLCBzaXplQiwgTiwgc2l6ZU4pID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoa1N0YXR1c19JbnZhbGlkQXJndW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX3BraGFfZGVmYXVsdF9wYXJtcygmcGFyYW1zKTsKKyAgICBwYXJhbXMuZnVuYyA9IGtMVENfUEtIQV9Bcml0aE1vZE11bDsKKyAgICBwYXJhbXMuYXJpdGhUeXBlID0gYXJpdGhUeXBlOworICAgIHBhcmFtcy5tb250Rm9ybUluID0gbW9udEluOworICAgIHBhcmFtcy5tb250Rm9ybU91dCA9IG1vbnRPdXQ7CisgICAgcGFyYW1zLmVxdWFsVGltZSA9IGVxdWFsVGltZTsKKworICAgIGx0Y19wa2hhX2luaXRfZGF0YShiYXNlLCBBLCBzaXplQSwgQiwgc2l6ZUIsIE4sIHNpemVOLCBOVUxMLCAwKTsKKyAgICBzdGF0dXMgPSBsdGNfcGtoYV9pbml0X21vZGUoYmFzZSwgJnBhcmFtcyk7CisKKyAgICBpZiAoc3RhdHVzID09IGtTdGF0dXNfU3VjY2VzcykKKyAgICB7CisgICAgICAgIC8qIFJlYWQgdGhlIHJlc3VsdCBhbmQgc2l6ZSBmcm9tIHJlZ2lzdGVyIEIwLiAqLworICAgICAgICBpZiAocmVzdWx0U2l6ZSAmJiByZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZXN1bHRTaXplID0gYmFzZS0+UEtCU1o7CisgICAgICAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIHJlc3VsdCByZWdpc3RlciBpbnRvIHBsYWNlLiAqLworICAgICAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDAsIHJlc3VsdCwgKnJlc3VsdFNpemUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBLSEEgQ29kZSBwdWJsaWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgTFRDX1BLSEFfQ29tcGFyZUJpZ051bShjb25zdCB1aW50OF90ICphLCBzaXplX3Qgc2l6ZUEsIGNvbnN0IHVpbnQ4X3QgKmIsIHNpemVfdCBzaXplQikKK3sKKyAgICBpbnQgcmV0dmFsID0gMDsKKworICAgIC8qIHNraXAgemVybyBtc2J5dGVzIC0gaW50ZWdlciBhICovCisgICAgd2hpbGUgKChzaXplQSkgJiYgKDB1ID09IGFbc2l6ZUEgLSAxXSkpCisgICAgeworICAgICAgICBzaXplQS0tOworICAgIH0KKworICAgIC8qIHNraXAgemVybyBtc2J5dGVzIC0gaW50ZWdlciBiICovCisgICAgd2hpbGUgKChzaXplQikgJiYgKDB1ID09IGJbc2l6ZUIgLSAxXSkpCisgICAgeworICAgICAgICBzaXplQi0tOworICAgIH0KKworICAgIGlmIChzaXplQSA+IHNpemVCKQorICAgIHsKKyAgICAgICAgcmV0dmFsID0gMTsKKyAgICB9IC8qIGludCBhIGhhcyBtb3JlIG5vbi16ZXJvIGJ5dGVzLCB0aHVzIGl0IGlzIGJpZ2dlciB0aGFuIGIgKi8KKyAgICBlbHNlIGlmIChzaXplQSA8IHNpemVCKQorICAgIHsKKyAgICAgICAgcmV0dmFsID0gLTE7CisgICAgfSAvKiBpbnQgYiBoYXMgbW9yZSBub24temVybyBieXRlcywgdGh1cyBpdCBpcyBiaWdnZXIgdGhhbiBhICovCisgICAgZWxzZSBpZiAoc2l6ZUEgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHZhbCA9IDA7CisgICAgfSAvKiBzaXplQSA9IHNpemVCID0gMCAqLworICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludCBuOworICAgICAgICBpbnQgaTsKKyAgICAgICAgaW50IHZhbDsKKyAgICAgICAgdWludDMyX3QgZXF1YWw7CisKKyAgICAgICAgbiA9IHNpemVBIC0gMTsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIGVxdWFsID0gMDsKKworICAgICAgICB3aGlsZSAobiA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBjaFhvciA9IGFbaV0gXiBiW2ldOworCisgICAgICAgICAgICBlcXVhbCB8PSBjaFhvcjsKKyAgICAgICAgICAgIHZhbCA9IChpbnQpY2hYb3IgKiAoYVtpXSAtIGJbaV0pOworCisgICAgICAgICAgICBpZiAodmFsIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHZhbCA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHZhbCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhbCA9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgIG4tLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgwID09IGVxdWFsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR2YWwgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAocmV0dmFsKTsKK30KKworc3RhdHVzX3QgTFRDX1BLSEFfTm9ybWFsVG9Nb250Z29tZXJ5KExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqUjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnNpemVSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV90aW1pbmdfdCBlcXVhbFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlKQoreworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIC8qIG5lZWQgdG8gY29udmVydCBvdXIgSW50ZWdlciBpbnB1dHMgaW50byBNb250Z29tZXJ5IGZvcm1hdCAqLworICAgIGlmIChOICYmIHNpemVOICYmIFIyICYmIHNpemVSMikKKyAgICB7CisgICAgICAgIC8qIDEuIFIyID0gTU9EX1IyKE4pICovCisgICAgICAgIHN0YXR1cyA9IGx0Y19wa2hhX21vZFIyKGJhc2UsIE4sIHNpemVOLCBSMiwgc2l6ZVIyLCBhcml0aFR5cGUpOworICAgICAgICBpZiAoc3RhdHVzICE9IGtTdGF0dXNfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorCisgICAgICAgIC8qIDIuIEEoTW9udGdvbWVyeSkgPSBNT0RfTVVMX0lNX09NKEEsIFIyLCBOKSAqLworICAgICAgICBpZiAoQSAmJiBzaXplQSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gbHRjX3BraGFfbW9kbXVsKGJhc2UsIEEsICpzaXplQSwgUjIsICpzaXplUjIsIE4sIHNpemVOLCBBLCBzaXplQSwgYXJpdGhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfUEtIQV9Nb250Z29tZXJ5Rm9ybWF0LCBrTFRDX1BLSEFfTW9udGdvbWVyeUZvcm1hdCwgZXF1YWxUaW1lKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0ga1N0YXR1c19TdWNjZXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiAyLiBCKE1vbnRnb21lcnkpID0gTU9EX01VTF9JTV9PTShCLCBSMiwgTikgKi8KKyAgICAgICAgaWYgKEIgJiYgc2l6ZUIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IGx0Y19wa2hhX21vZG11bChiYXNlLCBCLCAqc2l6ZUIsIFIyLCAqc2l6ZVIyLCBOLCBzaXplTiwgQiwgc2l6ZUIsIGFyaXRoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX1BLSEFfTW9udGdvbWVyeUZvcm1hdCwga0xUQ19QS0hBX01vbnRnb21lcnlGb3JtYXQsIGVxdWFsVGltZSk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IGtTdGF0dXNfU3VjY2VzcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX1BLSEFfTW9udGdvbWVyeVRvTm9ybWFsKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfdGltaW5nX3QgZXF1YWxUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSkKK3sKKyAgICB1aW50OF90IG9uZSA9IDE7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisKKyAgICAvKiBBID0gTU9EX01VTF9JTV9PTShBKE1vbnRnb21lcnkpLCAxLCBOKSAqLworICAgIGlmIChBICYmIHNpemVBKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gbHRjX3BraGFfbW9kbXVsKGJhc2UsIEEsICpzaXplQSwgJm9uZSwgc2l6ZW9mKG9uZSksIE4sIHNpemVOLCBBLCBzaXplQSwgYXJpdGhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19QS0hBX01vbnRnb21lcnlGb3JtYXQsIGtMVENfUEtIQV9Nb250Z29tZXJ5Rm9ybWF0LCBlcXVhbFRpbWUpOworICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHN0YXR1cykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEIgPSBNT0RfTVVMX0lNX09NKEIoTW9udGdvbWVyeSksIDEsIE4pICovCisgICAgaWYgKEIgJiYgc2l6ZUIpCisgICAgeworICAgICAgICBzdGF0dXMgPSBsdGNfcGtoYV9tb2RtdWwoYmFzZSwgQiwgKnNpemVCLCAmb25lLCBzaXplb2Yob25lKSwgTiwgc2l6ZU4sIEIsIHNpemVCLCBhcml0aFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX1BLSEFfTW9udGdvbWVyeUZvcm1hdCwga0xUQ19QS0hBX01vbnRnb21lcnlGb3JtYXQsIGVxdWFsVGltZSk7CisgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9Nb2RBZGQoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVCLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSkKK3sKKyAgICBsdGNfcGtoYV9tb2RlX3BhcmFtc190IHBhcmFtczsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBpZiAoYXJpdGhUeXBlID09IGtMVENfUEtIQV9JbnRlZ2VyQXJpdGgpCisgICAgeworICAgICAgICBpZiAoTFRDX1BLSEFfQ29tcGFyZUJpZ051bShBLCBzaXplQSwgTiwgc2l6ZU4pID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoa1N0YXR1c19JbnZhbGlkQXJndW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKExUQ19QS0hBX0NvbXBhcmVCaWdOdW0oQiwgc2l6ZUIsIE4sIHNpemVOKSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx0Y19wa2hhX2RlZmF1bHRfcGFybXMoJnBhcmFtcyk7CisgICAgcGFyYW1zLmZ1bmMgPSBrTFRDX1BLSEFfQXJpdGhNb2RBZGQ7CisgICAgcGFyYW1zLmFyaXRoVHlwZSA9IGFyaXRoVHlwZTsKKworICAgIGx0Y19wa2hhX2luaXRfZGF0YShiYXNlLCBBLCBzaXplQSwgQiwgc2l6ZUIsIE4sIHNpemVOLCBOVUxMLCAwKTsKKyAgICBzdGF0dXMgPSBsdGNfcGtoYV9pbml0X21vZGUoYmFzZSwgJnBhcmFtcyk7CisKKyAgICBpZiAoc3RhdHVzID09IGtTdGF0dXNfU3VjY2VzcykKKyAgICB7CisgICAgICAgIC8qIFJlYWQgdGhlIHJlc3VsdCBhbmQgc2l6ZSBmcm9tIHJlZ2lzdGVyIEIwLiAqLworICAgICAgICBpZiAocmVzdWx0U2l6ZSAmJiByZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZXN1bHRTaXplID0gYmFzZS0+UEtCU1o7CisgICAgICAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIHJlc3VsdCByZWdpc3RlciBpbnRvIHBsYWNlLiAqLworICAgICAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDAsIHJlc3VsdCwgKnJlc3VsdFNpemUpOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9Nb2RTdWIxKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplKQoreworICAgIGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgcGFyYW1zOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGlmIChMVENfUEtIQV9Db21wYXJlQmlnTnVtKEEsIHNpemVBLCBOLCBzaXplTikgPj0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiAoa1N0YXR1c19JbnZhbGlkQXJndW1lbnQpOworICAgIH0KKworICAgIGlmIChMVENfUEtIQV9Db21wYXJlQmlnTnVtKEIsIHNpemVCLCBOLCBzaXplTikgPj0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiAoa1N0YXR1c19JbnZhbGlkQXJndW1lbnQpOworICAgIH0KKworICAgIGx0Y19wa2hhX2RlZmF1bHRfcGFybXMoJnBhcmFtcyk7CisgICAgcGFyYW1zLmZ1bmMgPSBrTFRDX1BLSEFfQXJpdGhNb2RTdWIxOworICAgIGx0Y19wa2hhX2luaXRfZGF0YShiYXNlLCBBLCBzaXplQSwgQiwgc2l6ZUIsIE4sIHNpemVOLCBOVUxMLCAwKTsKKworICAgIHN0YXR1cyA9IGx0Y19wa2hhX2luaXRfbW9kZShiYXNlLCAmcGFyYW1zKTsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgLyogUmVhZCB0aGUgcmVzdWx0IGFuZCBzaXplIGZyb20gcmVnaXN0ZXIgQjAuICovCisgICAgICAgIGlmIChyZXN1bHRTaXplICYmIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgKnJlc3VsdFNpemUgPSBiYXNlLT5QS0JTWjsKKyAgICAgICAgICAgIC8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgcmVzdWx0IHJlZ2lzdGVyIGludG8gcGxhY2UuICovCisgICAgICAgICAgICBsdGNfcGtoYV9yZWFkX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMCwgcmVzdWx0LCAqcmVzdWx0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIHRydWUpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19QS0hBX01vZFN1YjIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUpCit7CisgICAgbHRjX3BraGFfbW9kZV9wYXJhbXNfdCBwYXJhbXM7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgbHRjX3BraGFfZGVmYXVsdF9wYXJtcygmcGFyYW1zKTsKKyAgICBwYXJhbXMuZnVuYyA9IGtMVENfUEtIQV9Bcml0aE1vZFN1YjI7CisKKyAgICBsdGNfcGtoYV9pbml0X2RhdGEoYmFzZSwgQSwgc2l6ZUEsIEIsIHNpemVCLCBOLCBzaXplTiwgTlVMTCwgMCk7CisgICAgc3RhdHVzID0gbHRjX3BraGFfaW5pdF9tb2RlKGJhc2UsICZwYXJhbXMpOworCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICAvKiBSZWFkIHRoZSByZXN1bHQgYW5kIHNpemUgZnJvbSByZWdpc3RlciBCMC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdFNpemUgJiYgcmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICAqcmVzdWx0U2l6ZSA9IGJhc2UtPlBLQlNaOworICAgICAgICAgICAgLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXN1bHQgcmVnaXN0ZXIgaW50byBwbGFjZS4gKi8KKyAgICAgICAgICAgIGx0Y19wa2hhX3JlYWRfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAwLCByZXN1bHQsICpyZXN1bHRTaXplKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX1BLSEFfTW9kTXVsKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcmVzdWx0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfbW9udGdvbWVyeV9mb3JtX3QgbW9udEluLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX21vbnRnb21lcnlfZm9ybV90IG1vbnRPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfdGltaW5nX3QgZXF1YWxUaW1lKQoreworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIHN0YXR1cyA9CisgICAgICAgIGx0Y19wa2hhX21vZG11bChiYXNlLCBBLCBzaXplQSwgQiwgc2l6ZUIsIE4sIHNpemVOLCByZXN1bHQsIHJlc3VsdFNpemUsIGFyaXRoVHlwZSwgbW9udEluLCBtb250T3V0LCBlcXVhbFRpbWUpOworCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9Nb2RFeHAoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9tb250Z29tZXJ5X2Zvcm1fdCBtb250SW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfdGltaW5nX3QgZXF1YWxUaW1lKQoreworICAgIGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgcGFyYW1zOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGlmIChhcml0aFR5cGUgPT0ga0xUQ19QS0hBX0ludGVnZXJBcml0aCkKKyAgICB7CisgICAgICAgIGlmIChMVENfUEtIQV9Db21wYXJlQmlnTnVtKEEsIHNpemVBLCBOLCBzaXplTikgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChrU3RhdHVzX0ludmFsaWRBcmd1bWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsdGNfcGtoYV9kZWZhdWx0X3Bhcm1zKCZwYXJhbXMpOworICAgIHBhcmFtcy5mdW5jID0ga0xUQ19QS0hBX0FyaXRoTW9kRXhwOworICAgIHBhcmFtcy5hcml0aFR5cGUgPSBhcml0aFR5cGU7CisgICAgcGFyYW1zLm1vbnRGb3JtSW4gPSBtb250SW47CisgICAgcGFyYW1zLmVxdWFsVGltZSA9IGVxdWFsVGltZTsKKworICAgIGx0Y19wa2hhX2luaXRfZGF0YShiYXNlLCBBLCBzaXplQSwgTlVMTCwgMCwgTiwgc2l6ZU4sIEUsIHNpemVFKTsKKyAgICBzdGF0dXMgPSBsdGNfcGtoYV9pbml0X21vZGUoYmFzZSwgJnBhcmFtcyk7CisKKyAgICBpZiAoc3RhdHVzID09IGtTdGF0dXNfU3VjY2VzcykKKyAgICB7CisgICAgICAgIC8qIFJlYWQgdGhlIHJlc3VsdCBhbmQgc2l6ZSBmcm9tIHJlZ2lzdGVyIEIwLiAqLworICAgICAgICBpZiAocmVzdWx0U2l6ZSAmJiByZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZXN1bHRTaXplID0gYmFzZS0+UEtCU1o7CisgICAgICAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIHJlc3VsdCByZWdpc3RlciBpbnRvIHBsYWNlLiAqLworICAgICAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDAsIHJlc3VsdCwgKnJlc3VsdFNpemUpOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9Nb2RSZWQoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcmVzdWx0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUpCit7CisgICAgbHRjX3BraGFfbW9kZV9wYXJhbXNfdCBwYXJhbXM7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgbHRjX3BraGFfZGVmYXVsdF9wYXJtcygmcGFyYW1zKTsKKyAgICBwYXJhbXMuZnVuYyA9IGtMVENfUEtIQV9Bcml0aE1vZFJlZDsKKyAgICBwYXJhbXMuYXJpdGhUeXBlID0gYXJpdGhUeXBlOworCisgICAgbHRjX3BraGFfaW5pdF9kYXRhKGJhc2UsIEEsIHNpemVBLCBOVUxMLCAwLCBOLCBzaXplTiwgTlVMTCwgMCk7CisgICAgc3RhdHVzID0gbHRjX3BraGFfaW5pdF9tb2RlKGJhc2UsICZwYXJhbXMpOworCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICAvKiBSZWFkIHRoZSByZXN1bHQgYW5kIHNpemUgZnJvbSByZWdpc3RlciBCMC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdFNpemUgJiYgcmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICAqcmVzdWx0U2l6ZSA9IGJhc2UtPlBLQlNaOworICAgICAgICAgICAgLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXN1bHQgcmVnaXN0ZXIgaW50byBwbGFjZS4gKi8KKyAgICAgICAgICAgIGx0Y19wa2hhX3JlYWRfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAwLCByZXN1bHQsICpyZXN1bHRTaXplKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX1BLSEFfTW9kSW52KExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlKQoreworICAgIGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgcGFyYW1zOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIC8qIEEgbXVzdCBiZSBsZXNzIHRoYW4gTiAtPiBMVENfUEtIQV9Db21wYXJlQmlnTnVtKCkgbXVzdCByZXR1cm4gLTEgKi8KKyAgICBpZiAoYXJpdGhUeXBlID09IGtMVENfUEtIQV9JbnRlZ2VyQXJpdGgpCisgICAgeworICAgICAgICBpZiAoTFRDX1BLSEFfQ29tcGFyZUJpZ051bShBLCBzaXplQSwgTiwgc2l6ZU4pID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoa1N0YXR1c19JbnZhbGlkQXJndW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX3BraGFfZGVmYXVsdF9wYXJtcygmcGFyYW1zKTsKKyAgICBwYXJhbXMuZnVuYyA9IGtMVENfUEtIQV9Bcml0aE1vZEludjsKKyAgICBwYXJhbXMuYXJpdGhUeXBlID0gYXJpdGhUeXBlOworCisgICAgbHRjX3BraGFfaW5pdF9kYXRhKGJhc2UsIEEsIHNpemVBLCBOVUxMLCAwLCBOLCBzaXplTiwgTlVMTCwgMCk7CisgICAgc3RhdHVzID0gbHRjX3BraGFfaW5pdF9tb2RlKGJhc2UsICZwYXJhbXMpOworCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICAvKiBSZWFkIHRoZSByZXN1bHQgYW5kIHNpemUgZnJvbSByZWdpc3RlciBCMC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdFNpemUgJiYgcmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICAqcmVzdWx0U2l6ZSA9IGJhc2UtPlBLQlNaOworICAgICAgICAgICAgLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXN1bHQgcmVnaXN0ZXIgaW50byBwbGFjZS4gKi8KKyAgICAgICAgICAgIGx0Y19wa2hhX3JlYWRfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAwLCByZXN1bHQsICpyZXN1bHRTaXplKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX1BLSEFfTW9kUjIoCisgICAgTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKk4sIHVpbnQxNl90IHNpemVOLCB1aW50OF90ICpyZXN1bHQsIHVpbnQxNl90ICpyZXN1bHRTaXplLCBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIHN0YXR1cyA9IGx0Y19wa2hhX21vZFIyKGJhc2UsIE4sIHNpemVOLCByZXN1bHQsIHJlc3VsdFNpemUsIGFyaXRoVHlwZSk7CisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9HQ0QoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcmVzdWx0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUpCit7CisgICAgbHRjX3BraGFfbW9kZV9wYXJhbXNfdCBwYXJhbXM7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgbHRjX3BraGFfZGVmYXVsdF9wYXJtcygmcGFyYW1zKTsKKyAgICBwYXJhbXMuZnVuYyA9IGtMVENfUEtIQV9Bcml0aEdjZDsKKyAgICBwYXJhbXMuYXJpdGhUeXBlID0gYXJpdGhUeXBlOworCisgICAgbHRjX3BraGFfaW5pdF9kYXRhKGJhc2UsIEEsIHNpemVBLCBOVUxMLCAwLCBOLCBzaXplTiwgTlVMTCwgMCk7CisgICAgc3RhdHVzID0gbHRjX3BraGFfaW5pdF9tb2RlKGJhc2UsICZwYXJhbXMpOworCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICAvKiBSZWFkIHRoZSByZXN1bHQgYW5kIHNpemUgZnJvbSByZWdpc3RlciBCMC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdFNpemUgJiYgcmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICAqcmVzdWx0U2l6ZSA9IGJhc2UtPlBLQlNaOworICAgICAgICAgICAgLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXN1bHQgcmVnaXN0ZXIgaW50byBwbGFjZS4gKi8KKyAgICAgICAgICAgIGx0Y19wa2hhX3JlYWRfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAwLCByZXN1bHQsICpyZXN1bHRTaXplKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX1BLSEFfUHJpbWFsaXR5VGVzdChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcmVzKQoreworICAgIHVpbnQ4X3QgcmVzdWx0OworICAgIGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgcGFyYW1zOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGx0Y19wa2hhX2RlZmF1bHRfcGFybXMoJnBhcmFtcyk7CisgICAgcGFyYW1zLmZ1bmMgPSBrTFRDX1BLSEFfQXJpdGhQcmltYWxpdHlUZXN0OworICAgIGx0Y19wa2hhX2luaXRfZGF0YShiYXNlLCBBLCBzaXplQSwgQiwgc2l6ZUIsIE4sIHNpemVOLCBOVUxMLCAwKTsKKyAgICBzdGF0dXMgPSBsdGNfcGtoYV9pbml0X21vZGUoYmFzZSwgJnBhcmFtcyk7CisKKyAgICBpZiAoc3RhdHVzID09IGtTdGF0dXNfU3VjY2VzcykKKyAgICB7CisgICAgICAgIC8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgcmVzdWx0IHJlZ2lzdGVyIGludG8gcGxhY2UuICovCisgICAgICAgIGx0Y19wa2hhX3JlYWRfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAwLCAmcmVzdWx0LCAxKTsKKworICAgICAgICAqcmVzID0gKGJvb2wpcmVzdWx0OworICAgIH0KKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX1BLSEFfRUNDX1BvaW50QWRkKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx0Y19wa2hhX2VjY19wb2ludF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx0Y19wa2hhX2VjY19wb2ludF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqUjJtb2ROLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFDdXJ2ZVBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJDdXJ2ZVBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZWNjX3BvaW50X3QgKnJlc3VsdCkKK3sKKyAgICBsdGNfcGtoYV9tb2RlX3BhcmFtc190IHBhcmFtczsKKyAgICB1aW50MzJfdCBjbGVhck1hc2s7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgbHRjX3BraGFfZGVmYXVsdF9wYXJtcygmcGFyYW1zKTsKKyAgICBwYXJhbXMuZnVuYyA9IGtMVENfUEtIQV9Bcml0aEVjY0FkZDsKKyAgICBwYXJhbXMuYXJpdGhUeXBlID0gYXJpdGhUeXBlOworICAgIHBhcmFtcy5yMm1vZG4gPSBSMm1vZE4gPyBrTFRDX1BLSEFfSW5wdXRSMiA6IGtMVENfUEtIQV9DYWxjUjI7CisKKyAgICBjbGVhck1hc2sgPSBrTFRDX0NsZWFyTW9kZTsKKworICAgIC8qIENsZWFyIGludGVybmFsIHJlZ2lzdGVyIHN0YXRlcy4gKi8KKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplQTsKKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplQjsKKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplTjsKKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplRTsKKworICAgIGJhc2UtPkNXID0gY2xlYXJNYXNrOworICAgIGJhc2UtPlNUQSA9IGtMVENfU3RhdHVzRG9uZUlzcjsKKyAgICBsdGNfcGtoYV9jbGVhcl9yZWdhYm5lKGJhc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlKTsKKworICAgIC8qIHNpemVOIHNob3VsZCBiZSBsZXNzIHRoYW4gNjQgYnl0ZXMuICovCisgICAgYmFzZS0+UEtOU1ogPSBzaXplOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnTiwgMCwgTiwgc2l6ZSk7CisKKyAgICBiYXNlLT5QS0FTWiA9IHNpemU7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdBLCAwLCBBLT5YLCBzaXplKTsKKyAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0EsIDEsIEEtPlksIHNpemUpOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQSwgMywgYUN1cnZlUGFyYW0sIHNpemUpOworCisgICAgYmFzZS0+UEtCU1ogPSBzaXplOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMCwgYkN1cnZlUGFyYW0sIHNpemUpOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMSwgQi0+WCwgc2l6ZSk7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAyLCBCLT5ZLCBzaXplKTsKKyAgICBpZiAoUjJtb2ROKQorICAgIHsKKyAgICAgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAzLCBSMm1vZE4sIHNpemUpOworICAgIH0KKworICAgIHN0YXR1cyA9IGx0Y19wa2hhX2luaXRfbW9kZShiYXNlLCAmcGFyYW1zKTsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXN1bHQgcmVnaXN0ZXIgaW50byBwbGFjZS4gKi8KKyAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDEsIHJlc3VsdC0+WCwgc2l6ZSk7CisgICAgICAgIGx0Y19wa2hhX3JlYWRfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAyLCByZXN1bHQtPlksIHNpemUpOworICAgIH0KKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX1BLSEFfRUNDX1BvaW50RG91YmxlKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx0Y19wa2hhX2VjY19wb2ludF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYUN1cnZlUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYkN1cnZlUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9lY2NfcG9pbnRfdCAqcmVzdWx0KQoreworICAgIGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgcGFyYW1zOworICAgIHVpbnQzMl90IGNsZWFyTWFzazsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBsdGNfcGtoYV9kZWZhdWx0X3Bhcm1zKCZwYXJhbXMpOworICAgIHBhcmFtcy5mdW5jID0ga0xUQ19QS0hBX0FyaXRoRWNjRG91YmxlOworICAgIHBhcmFtcy5hcml0aFR5cGUgPSBhcml0aFR5cGU7CisKKyAgICBjbGVhck1hc2sgPSBrTFRDX0NsZWFyTW9kZTsKKworICAgIC8qIENsZWFyIGludGVybmFsIHJlZ2lzdGVyIHN0YXRlcy4gKi8KKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplQTsKKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplQjsKKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplTjsKKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplRTsKKworICAgIGJhc2UtPkNXID0gY2xlYXJNYXNrOworICAgIGJhc2UtPlNUQSA9IGtMVENfU3RhdHVzRG9uZUlzcjsKKyAgICBsdGNfcGtoYV9jbGVhcl9yZWdhYm5lKGJhc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlKTsKKworICAgIC8qIHNpemVOIHNob3VsZCBiZSBsZXNzIHRoYW4gNjQgYnl0ZXMuICovCisgICAgYmFzZS0+UEtOU1ogPSBzaXplOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnTiwgMCwgTiwgc2l6ZSk7CisKKyAgICBiYXNlLT5QS0FTWiA9IHNpemU7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdBLCAzLCBhQ3VydmVQYXJhbSwgc2l6ZSk7CisKKyAgICBiYXNlLT5QS0JTWiA9IHNpemU7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAwLCBiQ3VydmVQYXJhbSwgc2l6ZSk7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAxLCBCLT5YLCBzaXplKTsKKyAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDIsIEItPlksIHNpemUpOworICAgIHN0YXR1cyA9IGx0Y19wa2hhX2luaXRfbW9kZShiYXNlLCAmcGFyYW1zKTsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXN1bHQgcmVnaXN0ZXIgaW50byBwbGFjZS4gKi8KKyAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDEsIHJlc3VsdC0+WCwgc2l6ZSk7CisgICAgICAgIGx0Y19wa2hhX3JlYWRfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAyLCByZXN1bHQtPlksIHNpemUpOworICAgIH0KKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX1BLSEFfRUNDX1BvaW50TXVsKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx0Y19wa2hhX2VjY19wb2ludF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzaXplRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKlIybW9kTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphQ3VydmVQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpiQ3VydmVQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfdGltaW5nX3QgZXF1YWxUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9lY2NfcG9pbnRfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmluZmluaXR5KQoreworICAgIGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgcGFyYW1zOworICAgIHVpbnQzMl90IGNsZWFyTWFzazsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBsdGNfcGtoYV9kZWZhdWx0X3Bhcm1zKCZwYXJhbXMpOworICAgIHBhcmFtcy5mdW5jID0ga0xUQ19QS0hBX0FyaXRoRWNjTXVsOworICAgIHBhcmFtcy5lcXVhbFRpbWUgPSBlcXVhbFRpbWU7CisgICAgcGFyYW1zLmFyaXRoVHlwZSA9IGFyaXRoVHlwZTsKKyAgICBwYXJhbXMucjJtb2RuID0gUjJtb2ROID8ga0xUQ19QS0hBX0lucHV0UjIgOiBrTFRDX1BLSEFfQ2FsY1IyOworCisgICAgY2xlYXJNYXNrID0ga0xUQ19DbGVhck1vZGU7CisKKyAgICAvKiBDbGVhciBpbnRlcm5hbCByZWdpc3RlciBzdGF0ZXMuICovCisgICAgY2xlYXJNYXNrIHw9IGtMVENfQ2xlYXJQa2hhU2l6ZUE7CisgICAgY2xlYXJNYXNrIHw9IGtMVENfQ2xlYXJQa2hhU2l6ZUI7CisgICAgY2xlYXJNYXNrIHw9IGtMVENfQ2xlYXJQa2hhU2l6ZU47CisgICAgY2xlYXJNYXNrIHw9IGtMVENfQ2xlYXJQa2hhU2l6ZUU7CisKKyAgICBiYXNlLT5DVyA9IGNsZWFyTWFzazsKKyAgICBiYXNlLT5TVEEgPSBrTFRDX1N0YXR1c0RvbmVJc3I7CisgICAgbHRjX3BraGFfY2xlYXJfcmVnYWJuZShiYXNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKworICAgIC8qIHNpemVOIHNob3VsZCBiZSBsZXNzIHRoYW4gNjQgYnl0ZXMuICovCisgICAgYmFzZS0+UEtOU1ogPSBzaXplOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnTiwgMCwgTiwgc2l6ZSk7CisKKyAgICBiYXNlLT5QS0VTWiA9IHNpemVFOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnRSwgMCwgRSwgc2l6ZUUpOworCisgICAgYmFzZS0+UEtBU1ogPSBzaXplOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQSwgMCwgQS0+WCwgc2l6ZSk7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdBLCAxLCBBLT5ZLCBzaXplKTsKKyAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0EsIDMsIGFDdXJ2ZVBhcmFtLCBzaXplKTsKKworICAgIGJhc2UtPlBLQlNaID0gc2l6ZTsKKyAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDAsIGJDdXJ2ZVBhcmFtLCBzaXplKTsKKyAgICBpZiAoUjJtb2ROKQorICAgIHsKKyAgICAgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAxLCBSMm1vZE4sIHNpemUpOworICAgIH0KKworICAgIHN0YXR1cyA9IGx0Y19wa2hhX2luaXRfbW9kZShiYXNlLCAmcGFyYW1zKTsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXN1bHQgcmVnaXN0ZXIgaW50byBwbGFjZS4gKi8KKyAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDEsIHJlc3VsdC0+WCwgc2l6ZSk7CisgICAgICAgIGx0Y19wa2hhX3JlYWRfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAyLCByZXN1bHQtPlksIHNpemUpOworCisgICAgICAgIGlmIChpbmZpbml0eSkKKyAgICAgICAgeworICAgICAgICAgICAgKmluZmluaXR5ID0gKGJvb2wpKGJhc2UtPlNUQSAmIGtMVENfU3RhdHVzUHVibGljS2V5T3BaZXJvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHRjLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sdGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTllZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHRjLmgKQEAgLTAsMCArMSwxNTg0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX0xUQ19IXworI2RlZmluZSBfRlNMX0xUQ19IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIGx0YworICogQHsKKyAqLworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgTFRDIGRyaXZlciB2ZXJzaW9uLiBWZXJzaW9uIDIuMC40LgorICoKKyAqIEN1cnJlbnQgdmVyc2lvbjogMi4wLjQKKyAqCisgKiBDaGFuZ2UgbG9nOgorICogLSBWZXJzaW9uIDIuMC4xCisgKiAgIC0gZml4ZWQgd2FybmluZyBkdXJpbmcgZysrIGNvbXBpbGF0aW9uCisgKgorICogLSBWZXJzaW9uIDIuMC4yCisgKiAgIC0gZml4ZWQgW0tQU0RLLTEwOTMyXVtMVENdW1NIQV0gTFRDX0hBU0goKSBibG9ja3MgaW5kZWZpbml0ZWx5IHdoZW4gbWVzc2FnZSBzaXplIGV4Y2VlZHMgNDA4MCBieXRlcworICoKKyAqIC0gVmVyc2lvbiAyLjAuMworICogICAtIGZpeGVkIExUQ19QS0hBX0NvbXBhcmVCaWdOdW0oKSBpbiBjYXNlIGFuIGludGVnZXIgYXJndW1lbnQgaXMgYW4gYXJyYXkgb2YgYWxsIHplcm9lcworICoKKyAqIC0gVmVyc2lvbiAyLjAuNAorICogICAtIGNvbnN0YW50IExUQ19QS0hBX0NvbXBhcmVCaWdOdW0oKSBwcm9jZXNzaW5nIHRpbWUKKyAqLworI2RlZmluZSBGU0xfTFRDX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgNCkpCisvKkB9Ki8KKy8qISBAfSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQUVTIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGFkZHRvZ3JvdXAgbHRjX2RyaXZlcl9hZXMKKyAqIEB7CisgKi8KKy8qISBBRVMgYmxvY2sgc2l6ZSBpbiBieXRlcyAqLworI2RlZmluZSBMVENfQUVTX0JMT0NLX1NJWkUgMTYKKy8qISBBRVMgSW5wdXQgVmVjdG9yIHNpemUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgTFRDX0FFU19JVl9TSVpFIDE2CisKKy8qISBAYnJpZWYgVHlwZSBvZiBBRVMga2V5IGZvciBFQ0IgYW5kIENCQyBkZWNyeXB0IG9wZXJhdGlvbnMuICovCit0eXBlZGVmIGVudW0gX2x0Y19hZXNfa2V5X3QKK3sKKyAgICBrTFRDX0VuY3J5cHRLZXkgPSAwVSwgLyohPCBJbnB1dCBrZXkgaXMgYW4gZW5jcnlwdCBrZXkgKi8KKyAgICBrTFRDX0RlY3J5cHRLZXkgPSAxVSwgLyohPCBJbnB1dCBrZXkgaXMgYSBkZWNyeXB0IGtleSAqLworfSBsdGNfYWVzX2tleV90OworCisvKiEKKyAqQH0KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogREVTIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGFkZHRvZ3JvdXAgbHRjX2RyaXZlcl9kZXMKKyAqIEB7CisgKi8KKworLyohIEBicmllZiBMVEMgREVTIGtleSBzaXplIC0gNjQgYml0cy4gKi8KKyNkZWZpbmUgTFRDX0RFU19LRVlfU0laRSA4CisKKy8qISBAYnJpZWYgTFRDIERFUyBJViBzaXplIC0gOCBieXRlcyAqLworI2RlZmluZSBMVENfREVTX0lWX1NJWkUgOAorCisvKiEKKyAqQH0KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSEFTSCBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGFkZHRvZ3JvdXAgbHRjX2RyaXZlcl9oYXNoCisgKiBAeworICovCisvKiEgU3VwcG9ydGVkIGNyeXB0b2dyYXBoaWMgYmxvY2sgY2lwaGVyIGZ1bmN0aW9ucyBmb3IgSEFTSCBjcmVhdGlvbiAqLwordHlwZWRlZiBlbnVtIF9sdGNfaGFzaF9hbGdvX3QKK3sKKyAgICBrTFRDX1hjYmNNYWMgPSAwLCAvKiE8IFhDQkMtTUFDIChBRVMgZW5naW5lKSAqLworICAgIGtMVENfQ21hYywgICAgICAgIC8qITwgQ01BQyAoQUVTIGVuZ2luZSkgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgIGtMVENfU2hhMSwgICAvKiE8IFNIQV8xICAgKE1ESEEgZW5naW5lKSAgKi8KKyAgICBrTFRDX1NoYTIyNCwgLyohPCBTSEFfMjI0IChNREhBIGVuZ2luZSkgICovCisgICAga0xUQ19TaGEyNTYsIC8qITwgU0hBXzI1NiAoTURIQSBlbmdpbmUpICAqLworI2VuZGlmICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworfSBsdGNfaGFzaF9hbGdvX3Q7CisKKy8qISBAYnJpZWYgTFRDIEhBU0ggQ29udGV4dCBzaXplLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisjZGVmaW5lIExUQ19IQVNIX0NUWF9TSVpFIDQxCisjZWxzZQorI2RlZmluZSBMVENfSEFTSF9DVFhfU0laRSAyOQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBICovCisKKy8qISBAYnJpZWYgU3RvcmFnZSB0eXBlIHVzZWQgdG8gc2F2ZSBoYXNoIGNvbnRleHQuICovCit0eXBlZGVmIHVpbnQzMl90IGx0Y19oYXNoX2N0eF90W0xUQ19IQVNIX0NUWF9TSVpFXTsKKworLyohCisgKkB9CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQS0hBIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYWRkdG9ncm91cCBsdGNfZHJpdmVyX3BraGEKKyAqIEB7CisgKi8KKy8qISBQS0hBIEVDQyBwb2ludCBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IF9sdGNfcGtoYV9lY2NfcG9pbnRfdAoreworICAgIHVpbnQ4X3QgKlg7IC8qITwgWCBjb29yZGluYXRlIChhZmZpbmUpICovCisgICAgdWludDhfdCAqWTsgLyohPCBZIGNvb3JkaW5hdGUgKGFmZmluZSkgKi8KK30gbHRjX3BraGFfZWNjX3BvaW50X3Q7CisKKy8qISBAYnJpZWYgVXNlIG9mIHRpbWluZyBlcXVhbGl6ZWQgdmVyc2lvbiBvZiBhIFBLSEEgZnVuY3Rpb24uICovCit0eXBlZGVmIGVudW0gX2x0Y19wa2hhX3RpbWluZ190Cit7CisgICAga0xUQ19QS0hBX05vVGltaW5nRXF1YWxpemVkID0gMFUsIC8qITwgTm9ybWFsIHZlcnNpb24gb2YgYSBQS0hBIG9wZXJhdGlvbiAqLworICAgIGtMVENfUEtIQV9UaW1pbmdFcXVhbGl6ZWQgPSAxVSAgICAvKiE8IFRpbWluZy1lcXVhbGl6ZWQgdmVyc2lvbiBvZiBhIFBLSEEgb3BlcmF0aW9uICAqLworfSBsdGNfcGtoYV90aW1pbmdfdDsKKworLyohIEBicmllZiBJbnRlZ2VyIHZzIGJpbmFyeSBwb2x5bm9taWFsIGFyaXRobWV0aWMgc2VsZWN0aW9uLiAqLwordHlwZWRlZiBlbnVtIF9sdGNfcGtoYV9mMm1fdAoreworICAgIGtMVENfUEtIQV9JbnRlZ2VyQXJpdGggPSAwVSwgLyohPCBVc2UgaW50ZWdlciBhcml0aG1ldGljICovCisgICAga0xUQ19QS0hBX0YybUFyaXRoID0gMVUgICAgICAvKiE8IFVzZSBiaW5hcnkgcG9seW5vbWlhbCBhcml0aG1ldGljICovCit9IGx0Y19wa2hhX2YybV90OworCisvKiEgQGJyaWVmIE1vbnRnb21lcnkgb3Igbm9ybWFsIFBLSEEgaW5wdXQgZm9ybWF0LiAqLwordHlwZWRlZiBlbnVtIF9sdGNfcGtoYV9tb250Z29tZXJ5X2Zvcm1fdAoreworICAgIGtMVENfUEtIQV9Ob3JtYWxWYWx1ZSA9IDBVLCAgICAgLyohPCBQS0hBIG51bWJlciBpcyBub3JtYWwgaW50ZWdlciAqLworICAgIGtMVENfUEtIQV9Nb250Z29tZXJ5Rm9ybWF0ID0gMVUgLyohPCBQS0hBIG51bWJlciBpcyBpbiBtb250Z29tZXJ5IGZvcm1hdCAqLworfSBsdGNfcGtoYV9tb250Z29tZXJ5X2Zvcm1fdDsKKworLyohCisgKkB9CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGx0YworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgTFRDIGRyaXZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIExUQyBkcml2ZXIuCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLwordm9pZCBMVENfSW5pdChMVENfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIERlaW5pdGlhbGl6ZXMgdGhlIExUQyBkcml2ZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGRlaW5pdGlhbGl6ZXMgdGhlIExUQyBkcml2ZXIuCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLwordm9pZCBMVENfRGVpbml0KExUQ19UeXBlICpiYXNlKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19EUEFNUykgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19EUEFNUworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgRFBBIE1hc2sgU2VlZCByZWdpc3Rlci4KKyAqCisgKiBUaGUgRFBBIE1hc2sgU2VlZCByZWdpc3RlciByZXNlZWRzIHRoZSBtYXNrIHRoYXQgcHJvdmlkZXMgcmVzaXN0YW5jZSBhZ2FpbnN0IERQQSAoZGlmZmVyZW50aWFsIHBvd2VyIGFuYWx5c2lzKQorICogYXR0YWNrcyBvbiBBRVMgb3IgREVTIGtleXMuCisgKgorICogRGlmZmVyZW50aWFsIFBvd2VyIEFuYWx5c2lzIE1hc2sgKERQQSkgcmVzaXN0YW5jZSB1c2VzIGEgcmFuZG9tbHkgY2hhbmdpbmcgbWFzayB0aGF0IGludHJvZHVjZXMKKyAqICJub2lzZSIgaW50byB0aGUgcG93ZXIgY29uc3VtZWQgYnkgdGhlIEFFUyBvciBERVMuIFRoaXMgcmVkdWNlcyB0aGUgc2lnbmFsLXRvLW5vaXNlIHJhdGlvIHRoYXQgZGlmZmVyZW50aWFsCisgKiBwb3dlciBhbmFseXNpcyBhdHRhY2tzIHVzZSB0byAiZ3Vlc3MiIGJpdHMgb2YgdGhlIGtleS4gVGhpcyByYW5kb21seSBjaGFuZ2luZyBtYXNrIHNob3VsZCBiZQorICogc2VlZGVkIGF0IFBPUiwgYW5kIGNvbnRpbnVlcyB0byBwcm92aWRlIERQQSByZXNpc3RhbmNlIGZyb20gdGhhdCBwb2ludCBvbi4gSG93ZXZlciwgdG8gcHJvdmlkZSBldmVuIG1vcmUKKyAqIERQQSBwcm90ZWN0aW9uIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIERQQSBtYXNrIGJlIHJlc2VlZGVkIGFmdGVyIGV2ZXJ5IDUwLDAwMCBibG9ja3MgaGF2ZQorICogYmVlbiBwcm9jZXNzZWQuIEF0IHRoYXQgdGltZSwgc29mdHdhcmUgY2FuIG9wdCB0byB3cml0ZSBhIG5ldyBzZWVkIChwcmVmZXJhYmx5IG9idGFpbmVkIGZyb20gYW4gUk5HKQorICogaW50byB0aGUgRFBBIE1hc2sgU2VlZCByZWdpc3RlciAoRFBBTVMpLCBvciBzb2Z0d2FyZSBjYW4gb3B0IHRvIHByb3ZpZGUgdGhlIG5ldyBzZWVkIGVhcmxpZXIgb3IKKyAqIGxhdGVyLCBvciBub3QgYXQgYWxsLiBEUEEgcmVzaXN0YW5jZSBjb250aW51ZXMgZXZlbiBpZiB0aGUgRFBBIG1hc2sgaXMgbmV2ZXIgcmVzZWVkZWQuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gbWFzayBUaGUgRFBBIG1hc2sgc2VlZC4KKyAqLwordm9pZCBMVENfU2V0RHBhTWFza1NlZWQoTFRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfRFBBTVMgKi8KKworLyohCisgKkB9CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFFUyBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgbHRjX2RyaXZlcl9hZXMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgVHJhbnNmb3JtcyBhbiBBRVMgZW5jcnlwdCBrZXkgKGZvcndhcmQgQUVTKSBpbnRvIHRoZSBkZWNyeXB0IGtleSAoaW52ZXJzZSBBRVMpLgorICoKKyAqIFRyYW5zZm9ybXMgdGhlIEFFUyBlbmNyeXB0IGtleSAoZm9yd2FyZCBBRVMpIGludG8gdGhlIGRlY3J5cHQga2V5IChpbnZlcnNlIEFFUykuCisgKiBUaGUga2V5IGRlcml2ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBhcyBhIGRpcmVjdCBsb2FkIGRlY3J5cHQga2V5CisgKiBmb3IgQUVTIEVDQiBhbmQgQ0JDIGRlY3J5cHRpb24gb3BlcmF0aW9ucyAoa2V5VHlwZSBhcmd1bWVudCkuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gZW5jcnlwdEtleSBJbnB1dCBrZXkgZm9yIGRlY3J5cHQga2V5IHRyYW5zZm9ybWF0aW9uCisgKiBAcGFyYW1bb3V0XSBkZWNyeXB0S2V5IE91dHB1dCBrZXksIHRoZSBkZWNyeXB0IGZvcm0gb2YgdGhlIEFFUyBrZXkuCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXkgYW5kIG91dHB1dCBrZXkgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20ga2V5IGdlbmVyYXRpb24gb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19BRVNfR2VuZXJhdGVEZWNyeXB0S2V5KExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICplbmNyeXB0S2V5LCB1aW50OF90ICpkZWNyeXB0S2V5LCB1aW50MzJfdCBrZXlTaXplKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgQUVTIHVzaW5nIHRoZSBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBBRVMgdXNpbmcgdGhlIEVDQiBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbiB0ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlciB0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiAxNiBieXRlcy4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSAxNiwgMjQsIG9yIDMyLgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfQUVTX0VuY3J5cHRFY2IoCisgICAgTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwgdWludDhfdCAqY2lwaGVydGV4dCwgdWludDMyX3Qgc2l6ZSwgY29uc3QgdWludDhfdCAqa2V5LCB1aW50MzJfdCBrZXlTaXplKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgQUVTIHVzaW5nIEVDQiBibG9jayBtb2RlLgorICoKKyAqIERlY3J5cHRzIEFFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlciB0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW4gdGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleS4KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEBwYXJhbSBrZXlUeXBlIElucHV0IHR5cGUgb2YgdGhlIGtleSAoYWxsb3dzIHRvIGRpcmVjdGx5IGxvYWQgZGVjcnlwdCBrZXkgZm9yIEFFUyBFQ0IgZGVjcnlwdCBvcGVyYXRpb24uKQorICogQHJldHVybiBTdGF0dXMgZnJvbSBkZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfQUVTX0RlY3J5cHRFY2IoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWVzX2tleV90IGtleVR5cGUpOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyBBRVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWluIHRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVyIHRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDE2IGJ5dGVzLgorICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yIHRvIGNvbWJpbmUgd2l0aCB0aGUgZmlyc3QgaW5wdXQgYmxvY2suCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0FFU19FbmNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfQUVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgQUVTIHVzaW5nIENCQyBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVyIHRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbiB0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiAxNiBieXRlcy4KKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvciB0byBjb21iaW5lIHdpdGggdGhlIGZpcnN0IGlucHV0IGJsb2NrLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBkZWNyeXB0aW9uCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDE2LCAyNCwgb3IgMzIuCisgKiBAcGFyYW0ga2V5VHlwZSBJbnB1dCB0eXBlIG9mIHRoZSBrZXkgKGFsbG93cyB0byBkaXJlY3RseSBsb2FkIGRlY3J5cHQga2V5IGZvciBBRVMgQ0JDIGRlY3J5cHQgb3BlcmF0aW9uLikKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0FFU19EZWNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfQUVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hZXNfa2V5X3Qga2V5VHlwZSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIG9yIGRlY3J5cHRzIEFFUyB1c2luZyBDVFIgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBvciBkZWNyeXB0cyBBRVMgdXNpbmcgQ1RSIGJsb2NrIG1vZGUuCisgKiBBRVMgQ1RSIG1vZGUgdXNlcyBvbmx5IGZvcndhcmQgQUVTIGNpcGhlciBhbmQgc2FtZSBhbGdvcml0aG0gZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uCisgKiBUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBpcyB0aGF0LCBmb3IgZW5jcnlwdGlvbiwgdGhlIGlucHV0IGFyZ3VtZW50CisgKiBpcyBwbGFpbiB0ZXh0IGFuZCB0aGUgb3V0cHV0IGFyZ3VtZW50IGlzIGNpcGhlciB0ZXh0LiBGb3IgZGVjcnlwdGlvbiwgdGhlIGlucHV0IGFyZ3VtZW50IGlzIGNpcGhlciB0ZXh0CisgKiBhbmQgdGhlIG91dHB1dCBhcmd1bWVudCBpcyBwbGFpbiB0ZXh0LgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGlucHV0IElucHV0IGRhdGEgZm9yIENUUiBibG9jayBtb2RlCisgKiBAcGFyYW1bb3V0XSBvdXRwdXQgT3V0cHV0IGRhdGEgZm9yIENUUiBibG9jayBtb2RlCisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtW2luLG91dF0gY291bnRlciBJbnB1dCBjb3VudGVyICh1cGRhdGVzIG9uIHJldHVybikKKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZm9yd2FyZCBBRVMgY2lwaGVyCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDE2LCAyNCwgb3IgMzIuCisgKiBAcGFyYW1bb3V0XSBjb3VudGVybGFzdCBPdXRwdXQgY2lwaGVyIG9mIGxhc3QgY291bnRlciwgZm9yIGNoYWluZWQgQ1RSIGNhbGxzLiBOVUxMIGNhbiBiZSBwYXNzZWQgaWYgY2hhaW5lZCBjYWxscyBhcmUKKyAqIG5vdCB1c2VkLgorICogQHBhcmFtW291dF0gc3pMZWZ0IE91dHB1dCBudW1iZXIgb2YgYnl0ZXMgaW4gbGVmdCB1bnVzZWQgaW4gY291bnRlcmxhc3QgYmxvY2suIE5VTEwgY2FuIGJlIHBhc3NlZCBpZiBjaGFpbmVkIGNhbGxzCisgKiBhcmUgbm90IHVzZWQuCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19BRVNfQ3J5cHRDdHIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY291bnRlcltMVENfQUVTX0JMT0NLX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY291bnRlcmxhc3RbTFRDX0FFU19CTE9DS19TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnN6TGVmdCk7CisKKy8qISBBRVMgQ1RSIGRlY3J5cHQgaXMgbWFwcGVkIHRvIHRoZSBBRVMgQ1RSIGdlbmVyaWMgb3BlcmF0aW9uICovCisjZGVmaW5lIExUQ19BRVNfRGVjcnlwdEN0cihiYXNlLCBpbnB1dCwgb3V0cHV0LCBzaXplLCBjb3VudGVyLCBrZXksIGtleVNpemUsIGNvdW50ZXJsYXN0LCBzekxlZnQpIFwKKyAgICBMVENfQUVTX0NyeXB0Q3RyKGJhc2UsIGlucHV0LCBvdXRwdXQsIHNpemUsIGNvdW50ZXIsIGtleSwga2V5U2l6ZSwgY291bnRlcmxhc3QsIHN6TGVmdCkKKworLyohIEFFUyBDVFIgZW5jcnlwdCBpcyBtYXBwZWQgdG8gdGhlIEFFUyBDVFIgZ2VuZXJpYyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTFRDX0FFU19FbmNyeXB0Q3RyKGJhc2UsIGlucHV0LCBvdXRwdXQsIHNpemUsIGNvdW50ZXIsIGtleSwga2V5U2l6ZSwgY291bnRlcmxhc3QsIHN6TGVmdCkgXAorICAgIExUQ19BRVNfQ3J5cHRDdHIoYmFzZSwgaW5wdXQsIG91dHB1dCwgc2l6ZSwgY291bnRlciwga2V5LCBrZXlTaXplLCBjb3VudGVybGFzdCwgc3pMZWZ0KQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX0dDTSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19HQ00KKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIEFFUyBhbmQgdGFncyB1c2luZyBHQ00gYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBBRVMgYW5kIG9wdGlvbmFsbHkgdGFncyB1c2luZyBHQ00gYmxvY2sgbW9kZS4gSWYgcGxhaW50ZXh0IGlzIE5VTEwsIG9ubHkgdGhlIEdIQVNIIGlzIGNhbGN1bGF0ZWQgYW5kIG91dHB1dAorICogaW4gdGhlICd0YWcnIGZpZWxkLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbiB0ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlciB0ZXh0LgorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvcgorICogQHBhcmFtIGl2U2l6ZSBTaXplIG9mIHRoZSBJVgorICogQHBhcmFtIGFhZCBJbnB1dCBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEKKyAqIEBwYXJhbSBhYWRTaXplIElucHV0IHNpemUgaW4gYnl0ZXMgb2YgQUFECisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEBwYXJhbVtvdXRdIHRhZyBPdXRwdXQgaGFzaCB0YWcuIFNldCB0byBOVUxMIHRvIHNraXAgdGFnIHByb2Nlc3NpbmcuCisgKiBAcGFyYW0gdGFnU2l6ZSBJbnB1dCBzaXplIG9mIHRoZSB0YWcgdG8gZ2VuZXJhdGUsIGluIGJ5dGVzLiBNdXN0IGJlIDQsOCwxMiwxMywxNCwxNSBvciAxNi4KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0FFU19FbmNyeXB0VGFnR2NtKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXZTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0YWdTaXplKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgQUVTIGFuZCBhdXRoZW50aWNhdGVzIHVzaW5nIEdDTSBibG9jayBtb2RlLgorICoKKyAqIERlY3J5cHRzIEFFUyBhbmQgb3B0aW9uYWxseSBhdXRoZW50aWNhdGVzIHVzaW5nIEdDTSBibG9jayBtb2RlLiBJZiBjaXBoZXJ0ZXh0IGlzIE5VTEwsIG9ubHkgdGhlIEdIQVNIIGlzIGNhbGN1bGF0ZWQKKyAqIGFuZCBjb21wYXJlZCB3aXRoIHRoZSByZWNlaXZlZCBHSEFTSCBpbiAndGFnJyBmaWVsZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlciB0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW4gdGV4dC4KKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCB2ZWN0b3IKKyAqIEBwYXJhbSBpdlNpemUgU2l6ZSBvZiB0aGUgSVYKKyAqIEBwYXJhbSBhYWQgSW5wdXQgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhCisgKiBAcGFyYW0gYWFkU2l6ZSBJbnB1dCBzaXplIGluIGJ5dGVzIG9mIEFBRAorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDE2LCAyNCwgb3IgMzIuCisgKiBAcGFyYW0gdGFnIElucHV0IGhhc2ggdGFnIHRvIGNvbXBhcmUuIFNldCB0byBOVUxMIHRvIHNraXAgdGFnIHByb2Nlc3NpbmcuCisgKiBAcGFyYW0gdGFnU2l6ZSBJbnB1dCBzaXplIG9mIHRoZSB0YWcsIGluIGJ5dGVzLiBNdXN0IGJlIDQsIDgsIDEyLCAxMywgMTQsIDE1LCBvciAxNi4KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0FFU19EZWNyeXB0VGFnR2NtKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXZTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0YWdTaXplKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX0dDTSAqLworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyBBRVMgYW5kIHRhZ3MgdXNpbmcgQ0NNIGJsb2NrIG1vZGUuCisgKgorICogRW5jcnlwdHMgQUVTIGFuZCBvcHRpb25hbGx5IHRhZ3MgdXNpbmcgQ0NNIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWluIHRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVyIHRleHQuCisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gWmVybyBtZWFucyBhdXRoZW50aWNhdGlvbiBvbmx5LgorICogQHBhcmFtIGl2IE5vbmNlCisgKiBAcGFyYW0gaXZTaXplIExlbmd0aCBvZiB0aGUgTm9uY2UgaW4gYnl0ZXMuIE11c3QgYmUgNywgOCwgOSwgMTAsIDExLCAxMiwgb3IgMTMuCisgKiBAcGFyYW0gYWFkIElucHV0IGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YS4gQ2FuIGJlIE5VTEwgaWYgYWFkU2l6ZSBpcyB6ZXJvLgorICogQHBhcmFtIGFhZFNpemUgSW5wdXQgc2l6ZSBpbiBieXRlcyBvZiBBQUQuIFplcm8gbWVhbnMgZGF0YSBtb2RlIG9ubHkgKGF1dGhlbnRpY2F0aW9uIHNraXBwZWQpLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDE2LCAyNCwgb3IgMzIuCisgKiBAcGFyYW1bb3V0XSB0YWcgR2VuZXJhdGVkIG91dHB1dCB0YWcuIFNldCB0byBOVUxMIHRvIHNraXAgdGFnIHByb2Nlc3NpbmcuCisgKiBAcGFyYW0gdGFnU2l6ZSBJbnB1dCBzaXplIG9mIHRoZSB0YWcgdG8gZ2VuZXJhdGUsIGluIGJ5dGVzLiBNdXN0IGJlIDQsIDYsIDgsIDEwLCAxMiwgMTQsIG9yIDE2LgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfQUVTX0VuY3J5cHRUYWdDY20oTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpdlNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZ1NpemUpOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyBBRVMgYW5kIGF1dGhlbnRpY2F0ZXMgdXNpbmcgQ0NNIGJsb2NrIG1vZGUuCisgKgorICogRGVjcnlwdHMgQUVTIGFuZCBvcHRpb25hbGx5IGF1dGhlbnRpY2F0ZXMgdXNpbmcgQ0NNIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXIgdGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWluIHRleHQuCisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gWmVybyBtZWFucyBhdXRoZW50aWNhdGlvbiBvbmx5LgorICogQHBhcmFtIGl2IE5vbmNlCisgKiBAcGFyYW0gaXZTaXplIExlbmd0aCBvZiB0aGUgTm9uY2UgaW4gYnl0ZXMuIE11c3QgYmUgNywgOCwgOSwgMTAsIDExLCAxMiwgb3IgMTMuCisgKiBAcGFyYW0gYWFkIElucHV0IGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YS4gQ2FuIGJlIE5VTEwgaWYgYWFkU2l6ZSBpcyB6ZXJvLgorICogQHBhcmFtIGFhZFNpemUgSW5wdXQgc2l6ZSBpbiBieXRlcyBvZiBBQUQuIFplcm8gbWVhbnMgZGF0YSBtb2RlIG9ubHkgKGF1dGhlbnRpY2F0aW9uIHNraXBwZWQpLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBkZWNyeXB0aW9uCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDE2LCAyNCwgb3IgMzIuCisgKiBAcGFyYW0gdGFnIFJlY2VpdmVkIHRhZy4gU2V0IHRvIE5VTEwgdG8gc2tpcCB0YWcgcHJvY2Vzc2luZy4KKyAqIEBwYXJhbSB0YWdTaXplIElucHV0IHNpemUgb2YgdGhlIHJlY2VpdmVkIHRhZyB0byBjb21wYXJlIHdpdGggdGhlIGNvbXB1dGVkIHRhZywgaW4gYnl0ZXMuIE11c3QgYmUgNCwgNiwgOCwgMTAsIDEyLAorICogMTQsIG9yIDE2LgorICogQHJldHVybiBTdGF0dXMgZnJvbSBkZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfQUVTX0RlY3J5cHRUYWdDY20oTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpdlNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZ1NpemUpOworCisvKiEKKyAqQH0KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogREVTIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGFkZHRvZ3JvdXAgbHRjX2RyaXZlcl9kZXMKKyAqIEB7CisgKi8KKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0RWNiKAorICAgIExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsIHVpbnQ4X3QgKmNpcGhlcnRleHQsIHVpbnQzMl90IHNpemUsIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlLgorICoKKyAqIERlY3J5cHRzIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDggYnl0ZXMuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGRlY3J5cHRpb24KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTX0RlY3J5cHRFY2IoCisgICAgTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsIHVpbnQ4X3QgKnBsYWludGV4dCwgdWludDMyX3Qgc2l6ZSwgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUuCisgKgorICogRW5jcnlwdHMgREVTIHVzaW5nIENCQyBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yIHRvIGNvbWJpbmUgd2l0aCB0aGUgZmlyc3QgcGxhaW50ZXh0IGJsb2NrLgorICogICAgICAgICAgIFRoZSBpdiBkb2VzIG5vdCBuZWVkIHRvIGJlIHNlY3JldCwgYnV0IGl0IG11c3QgYmUgdW5wcmVkaWN0YWJsZS4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVNfRW5jcnlwdENiYyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZS4KKyAqCisgKiBEZWNyeXB0cyBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvciB0byBjb21iaW5lIHdpdGggdGhlIGZpcnN0IHBsYWludGV4dCBibG9jay4KKyAqICAgICAgICAgICBUaGUgaXYgZG9lcyBub3QgbmVlZCB0byBiZSBzZWNyZXQsIGJ1dCBpdCBtdXN0IGJlIHVucHJlZGljdGFibGUuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGRlY3J5cHRpb24KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTX0RlY3J5cHRDYmMoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUuCisgKgorICogRW5jcnlwdHMgREVTIHVzaW5nIENGQiBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCBibG9jay4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVNfRW5jcnlwdENmYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBEZWNyeXB0cyBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgYmxvY2suCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGRlY3J5cHRpb24KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTX0RlY3J5cHRDZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUuCisgKgorICogRW5jcnlwdHMgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCB1bmlxdWUgaW5wdXQgdmVjdG9yLiBUaGUgT0ZCIG1vZGUgcmVxdWlyZXMgdGhhdCB0aGUgSVYgYmUgdW5pcXVlCisgKiAgICAgICAgICAgZm9yIGVhY2ggZXhlY3V0aW9uIG9mIHRoZSBtb2RlIHVuZGVyIHRoZSBnaXZlbiBrZXkuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTX0VuY3J5cHRPZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUuCisgKgorICogRGVjcnlwdHMgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgOCBieXRlcy4KKyAqIEBwYXJhbSBpdiBJbnB1dCB1bmlxdWUgaW5wdXQgdmVjdG9yLiBUaGUgT0ZCIG1vZGUgcmVxdWlyZXMgdGhhdCB0aGUgSVYgYmUgdW5pcXVlCisgKiAgICAgICAgICAgZm9yIGVhY2ggZXhlY3V0aW9uIG9mIHRoZSBtb2RlIHVuZGVyIHRoZSBnaXZlbiBrZXkuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGRlY3J5cHRpb24KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTX0RlY3J5cHRPZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgOCBieXRlcy4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0VuY3J5cHRFY2IoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgOCBieXRlcy4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRFY2IoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENCQyBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvciB0byBjb21iaW5lIHdpdGggdGhlIGZpcnN0IHBsYWludGV4dCBibG9jay4KKyAqICAgICAgICAgICBUaGUgaXYgZG9lcyBub3QgbmVlZCB0byBiZSBzZWNyZXQsIGJ1dCBpdCBtdXN0IGJlIHVucHJlZGljdGFibGUuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTMl9FbmNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENCQyBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvciB0byBjb21iaW5lIHdpdGggdGhlIGZpcnN0IHBsYWludGV4dCBibG9jay4KKyAqICAgICAgICAgICBUaGUgaXYgZG9lcyBub3QgbmVlZCB0byBiZSBzZWNyZXQsIGJ1dCBpdCBtdXN0IGJlIHVucHJlZGljdGFibGUuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTMl9EZWNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENGQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIGJsb2NrLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdENmYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCBibG9jay4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRDZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IHVuaXF1ZSBpbnB1dCB2ZWN0b3IuIFRoZSBPRkIgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBJViBiZSB1bmlxdWUKKyAqICAgICAgICAgICBmb3IgZWFjaCBleGVjdXRpb24gb2YgdGhlIG1vZGUgdW5kZXIgdGhlIGdpdmVuIGtleS4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0VuY3J5cHRPZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IHVuaXF1ZSBpbnB1dCB2ZWN0b3IuIFRoZSBPRkIgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBJViBiZSB1bmlxdWUKKyAqICAgICAgICAgICBmb3IgZWFjaCBleGVjdXRpb24gb2YgdGhlIG1vZGUgdW5kZXIgdGhlIGdpdmVuIGtleS4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRPZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgOCBieXRlcy4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTMgVGhpcmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdEVjYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MyBUaGlyZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTM19EZWNyeXB0RWNiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENCQyBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENCQyBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yIHRvIGNvbWJpbmUgd2l0aCB0aGUgZmlyc3QgcGxhaW50ZXh0IGJsb2NrLgorICogICAgICAgICAgIFRoZSBpdiBkb2VzIG5vdCBuZWVkIHRvIGJlIHNlY3JldCwgYnV0IGl0IG11c3QgYmUgdW5wcmVkaWN0YWJsZS4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTMgVGhpcmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdENiYyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENCQyBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENCQyBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCB2ZWN0b3IgdG8gY29tYmluZSB3aXRoIHRoZSBmaXJzdCBwbGFpbnRleHQgYmxvY2suCisgKiAgICAgICAgICAgVGhlIGl2IGRvZXMgbm90IG5lZWQgdG8gYmUgc2VjcmV0LCBidXQgaXQgbXVzdCBiZSB1bnByZWRpY3RhYmxlLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MyBUaGlyZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTM19EZWNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3VwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgYmxvY2suCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkzIFRoaXJkIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMzX0VuY3J5cHRDZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIGJsb2NrLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MyBUaGlyZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTM19EZWNyeXB0Q2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCB1bmlxdWUgaW5wdXQgdmVjdG9yLiBUaGUgT0ZCIG1vZGUgcmVxdWlyZXMgdGhhdCB0aGUgSVYgYmUgdW5pcXVlCisgKiAgICAgICAgICAgZm9yIGVhY2ggZXhlY3V0aW9uIG9mIHRoZSBtb2RlIHVuZGVyIHRoZSBnaXZlbiBrZXkuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkzIFRoaXJkIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMzX0VuY3J5cHRPZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IHVuaXF1ZSBpbnB1dCB2ZWN0b3IuIFRoZSBPRkIgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBJViBiZSB1bmlxdWUKKyAqICAgICAgICAgICBmb3IgZWFjaCBleGVjdXRpb24gb2YgdGhlIG1vZGUgdW5kZXIgdGhlIGdpdmVuIGtleS4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTMgVGhpcmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzNfRGVjcnlwdE9mYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqQH0KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSEFTSCBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgbHRjX2RyaXZlcl9oYXNoCisgKiBAeworICovCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplIEhBU0ggY29udGV4dAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZSB0aGUgSEFTSC4KKyAqIEtleSBzaGFsbCBiZSBzdXBwbGllZCBpZiB0aGUgdW5kZXJsYXlpbmcgYWxnb3JpdG0gaXMgQUVTIFhDQkMtTUFDIG9yIENNQUMuCisgKiBLZXkgc2hhbGwgYmUgTlVMTCBpZiB0aGUgdW5kZXJsYXlpbmcgYWxnb3JpdG0gaXMgU0hBLgorICoKKyAqIEZvciBYQ0JDLU1BQywgdGhlIGtleSBsZW5ndGggbXVzdCBiZSAxNi4gRm9yIENNQUMsIHRoZSBrZXkgbGVuZ3RoIGNhbiBiZQorICogdGhlIEFFUyBrZXkgbGVuZ3RocyBzdXBwb3J0ZWQgYnkgQUVTIGVuZ2luZS4gRm9yIE1ESEEgdGhlIGtleSBsZW5ndGggYXJndW1lbnQKKyAqIGlzIGlnbm9yZWQuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW1bb3V0XSBjdHggT3V0cHV0IGhhc2ggY29udGV4dAorICogQHBhcmFtIGFsZ28gVW5kZXJsYXlpbmcgYWxnb3JpdGhtIHRvIHVzZSBmb3IgaGFzaCBjb21wdXRhdGlvbi4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IChOVUxMIGlmIHVuZGVybGF5aW5nIGFsZ29yaXRobSBpcyBTSEEpCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIGlucHV0IGtleSBpbiBieXRlcworICogQHJldHVybiBTdGF0dXMgb2YgaW5pdGlhbGl6YXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0hBU0hfSW5pdChMVENfVHlwZSAqYmFzZSwgbHRjX2hhc2hfY3R4X3QgKmN0eCwgbHRjX2hhc2hfYWxnb190IGFsZ28sIGNvbnN0IHVpbnQ4X3QgKmtleSwgdWludDMyX3Qga2V5U2l6ZSk7CisKKy8qIQorICogQGJyaWVmIEFkZCBkYXRhIHRvIGN1cnJlbnQgSEFTSAorICoKKyAqIEFkZCBkYXRhIHRvIGN1cnJlbnQgSEFTSC4gVGhpcyBjYW4gYmUgY2FsbGVkIHJlcGVhdGVkbHkgd2l0aCBhbiBhcmJpdHJhcnkgYW1vdW50IG9mIGRhdGEgdG8gYmUKKyAqIGhhc2hlZC4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSBjdHggSEFTSCBjb250ZXh0CisgKiBAcGFyYW0gaW5wdXQgSW5wdXQgZGF0YQorICogQHBhcmFtIGlucHV0U2l6ZSBTaXplIG9mIGlucHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEByZXR1cm4gU3RhdHVzIG9mIHRoZSBoYXNoIHVwZGF0ZSBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0hBU0hfVXBkYXRlKGx0Y19oYXNoX2N0eF90ICpjdHgsIGNvbnN0IHVpbnQ4X3QgKmlucHV0LCB1aW50MzJfdCBpbnB1dFNpemUpOworCisvKiEKKyAqIEBicmllZiBGaW5hbGl6ZSBoYXNoaW5nCisgKgorICogT3V0cHV0cyB0aGUgZmluYWwgaGFzaCBhbmQgZXJhc2VzIHRoZSBjb250ZXh0LgorICoKKyAqIEBwYXJhbVtpbixvdXRdIGN0eCBJbnB1dCBoYXNoIGNvbnRleHQKKyAqIEBwYXJhbVtvdXRdIG91dHB1dCBPdXRwdXQgaGFzaCBkYXRhCisgKiBAcGFyYW1bb3V0XSBvdXRwdXRTaXplIE91dHB1dCBwYXJhbWV0ZXIgc3RvcmluZyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGhhc2ggaW4gYnl0ZXMKKyAqIEByZXR1cm4gU3RhdHVzIG9mIHRoZSBoYXNoIGZpbmlzaCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0hBU0hfRmluaXNoKGx0Y19oYXNoX2N0eF90ICpjdHgsIHVpbnQ4X3QgKm91dHB1dCwgdWludDMyX3QgKm91dHB1dFNpemUpOworCisvKiEKKyAqIEBicmllZiBDcmVhdGUgSEFTSCBvbiBnaXZlbiBkYXRhCisgKgorICogUGVyZm9ybSB0aGUgZnVsbCBrZXllZCBIQVNIIGluIG9uZSBmdW5jdGlvbiBjYWxsLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGFsZ28gQmxvY2sgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UgZm9yIENNQUMgY3JlYXRpb24KKyAqIEBwYXJhbSBpbnB1dCBJbnB1dCBkYXRhCisgKiBAcGFyYW0gaW5wdXRTaXplIFNpemUgb2YgaW5wdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGtleSBJbnB1dCBrZXkKKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgaW5wdXQga2V5IGluIGJ5dGVzCisgKiBAcGFyYW1bb3V0XSBvdXRwdXQgT3V0cHV0IGhhc2ggZGF0YQorICogQHBhcmFtW291dF0gb3V0cHV0U2l6ZSBPdXRwdXQgcGFyYW1ldGVyIHN0b3JpbmcgdGhlIHNpemUgb2YgdGhlIG91dHB1dCBoYXNoIGluIGJ5dGVzCisgKiBAcmV0dXJuIFN0YXR1cyBvZiB0aGUgb25lIGNhbGwgaGFzaCBvcGVyYXRpb24uCisgKi8KK3N0YXR1c190IExUQ19IQVNIKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgbHRjX2hhc2hfYWxnb190IGFsZ28sCisgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlucHV0U2l6ZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqb3V0cHV0U2l6ZSk7CisvKiEKKyAqQH0KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUEtIQSBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBhZGR0b2dyb3VwIGx0Y19kcml2ZXJfcGtoYQorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBDb21wYXJlIHR3byBQS0hBIGJpZyBudW1iZXJzLgorICoKKyAqIENvbXBhcmUgdHdvIFBLSEEgYmlnIG51bWJlcnMuIFJldHVybiAxIGZvciBhID4gYiwgLTEgZm9yIGEgPCBiIGFuZCAwIGlmIHRoZXkgYXJlIHNhbWUuCisgKiBQS0hBIGJpZyBudW1iZXIgaXMgbHNieXRlIGZpcnN0LiBUaHVzIHRoZSBjb21wYXJpc29uIHN0YXJ0cyBhdCBtc2J5dGUgd2hpY2ggaXMgdGhlIGxhc3QgbWVtYmVyIG9mIHRlc3RlZCBhcnJheXMuCisgKgorICogQHBhcmFtIGEgRmlyc3QgaW50ZWdlciByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBvZiBieXRlcywgbHNieXRlIGZpcnN0LgorICogQHBhcmFtIHNpemVBIFNpemUgaW4gYnl0ZXMgb2YgdGhlIGZpcnN0IGludGVnZXIuCisgKiBAcGFyYW0gYiBTZWNvbmQgaW50ZWdlciByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBvZiBieXRlcywgbHNieXRlIGZpcnN0LgorICogQHBhcmFtIHNpemVCIFNpemUgaW4gYnl0ZXMgb2YgdGhlIHNlY29uZCBpbnRlZ2VyLgorICogQHJldHVybiAxIGlmIGEgPiBiLgorICogQHJldHVybiAtMSBpZiBhIDwgYi4KKyAqIEByZXR1cm4gMCBpZiBhID0gYi4KKyAqLworaW50IExUQ19QS0hBX0NvbXBhcmVCaWdOdW0oY29uc3QgdWludDhfdCAqYSwgc2l6ZV90IHNpemVBLCBjb25zdCB1aW50OF90ICpiLCBzaXplX3Qgc2l6ZUIpOworCisvKiEKKyAqIEBicmllZiBDb252ZXJ0cyBmcm9tIGludGVnZXIgdG8gTW9udGdvbWVyeSBmb3JtYXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyBSMiBtb2QgTiBhbmQgb3B0aW9uYWxseSBjb252ZXJ0cyBBIG9yIEIgaW50byBNb250Z29tZXJ5IGZvcm1hdCBvZiBBIG9yIEIuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gTiBtb2R1bHVzCisgKiBAcGFyYW0gc2l6ZU4gc2l6ZSBvZiBOIGluIGJ5dGVzCisgKiBAcGFyYW1baW4sb3V0XSBBIFRoZSBmaXJzdCBpbnB1dCBpbiBub24tTW9udGdvbWVyeSBmb3JtYXQuIE91dHB1dCBNb250Z29tZXJ5IGZvcm1hdCBvZiB0aGUgZmlyc3QgaW5wdXQuCisgKiBAcGFyYW1baW4sb3V0XSBzaXplQSBwb2ludGVyIHRvIHNpemUgdmFyaWFibGUuIE9uIGlucHV0IGl0IGhvbGRzIHNpemUgb2YgaW5wdXQgQSBpbiBieXRlcy4gT24gb3V0cHV0IGl0IGhvbGRzIHNpemUgb2YKKyAqICAgICAgICAgICAgICAgIE1vbnRnb21lcnkgZm9ybWF0IG9mIEEgaW4gYnl0ZXMuCisgKiBAcGFyYW1baW4sb3V0XSBCIFNlY29uZCBpbnB1dCBpbiBub24tTW9udGdvbWVyeSBmb3JtYXQuIE91dHB1dCBNb250Z29tZXJ5IGZvcm1hdCBvZiB0aGUgc2Vjb25kIGlucHV0LgorICogQHBhcmFtW2luLG91dF0gc2l6ZUIgcG9pbnRlciB0byBzaXplIHZhcmlhYmxlLiBPbiBpbnB1dCBpdCBob2xkcyBzaXplIG9mIGlucHV0IEIgaW4gYnl0ZXMuIE9uIG91dHB1dCBpdCBob2xkcyBzaXplIG9mCisgKiAgICAgICAgICAgICAgICBNb250Z29tZXJ5IGZvcm1hdCBvZiBCIGluIGJ5dGVzLgorICogQHBhcmFtW291dF0gUjIgT3V0cHV0IE1vbnRnb21lcnkgZmFjdG9yIFIyIG1vZCBOLgorICogQHBhcmFtW291dF0gc2l6ZVIyIHBvaW50ZXIgdG8gc2l6ZSB2YXJpYWJsZS4gT24gb3V0cHV0IGl0IGhvbGRzIHNpemUgb2YgTW9udGdvbWVyeSBmYWN0b3IgUjIgbW9kIE4gaW4gYnl0ZXMuCisgKiBAcGFyYW0gZXF1YWxUaW1lIFJ1biB0aGUgZnVuY3Rpb24gdGltZSBlcXVhbGl6ZWQgb3Igbm8gdGltaW5nIGVxdWFsaXphdGlvbi4KKyAqIEBwYXJhbSBhcml0aFR5cGUgVHlwZSBvZiBhcml0aG1ldGljIHRvIHBlcmZvcm0gKGludGVnZXIgb3IgRjJtKQorICogQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICovCitzdGF0dXNfdCBMVENfUEtIQV9Ob3JtYWxUb01vbnRnb21lcnkoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqc2l6ZVIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX3RpbWluZ190IGVxdWFsVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUpOworCisvKiEKKyAqIEBicmllZiBDb252ZXJ0cyBmcm9tIE1vbnRnb21lcnkgZm9ybWF0IHRvIGludC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIE1vbnRnb21lcnkgZm9ybWF0IG9mIEEgb3IgQiBpbnRvIGludCBBIG9yIEIuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gTiBtb2R1bHVzLgorICogQHBhcmFtIHNpemVOIHNpemUgb2YgTiBtb2R1bHVzIGluIGJ5dGVzLgorICogQHBhcmFtW2luLG91dF0gQSBJbnB1dCBmaXJzdCBudW1iZXIgaW4gTW9udGdvbWVyeSBmb3JtYXQuIE91dHB1dCBpcyBub24tTW9udGdvbWVyeSBmb3JtYXQuCisgKiBAcGFyYW1baW4sb3V0XSBzaXplQSBwb2ludGVyIHRvIHNpemUgdmFyaWFibGUuIE9uIGlucHV0IGl0IGhvbGRzIHNpemUgb2YgdGhlIGlucHV0IEEgaW4gYnl0ZXMuIE9uIG91dHB1dCBpdCBob2xkcworICogc2l6ZSBvZiBub24tTW9udGdvbWVyeSBBIGluIGJ5dGVzLgorICogQHBhcmFtW2luLG91dF0gQiBJbnB1dCBmaXJzdCBudW1iZXIgaW4gTW9udGdvbWVyeSBmb3JtYXQuIE91dHB1dCBpcyBub24tTW9udGdvbWVyeSBmb3JtYXQuCisgKiBAcGFyYW1baW4sb3V0XSBzaXplQiBwb2ludGVyIHRvIHNpemUgdmFyaWFibGUuIE9uIGlucHV0IGl0IGhvbGRzIHNpemUgb2YgdGhlIGlucHV0IEIgaW4gYnl0ZXMuIE9uIG91dHB1dCBpdCBob2xkcworICogc2l6ZSBvZiBub24tTW9udGdvbWVyeSBCIGluIGJ5dGVzLgorICogQHBhcmFtIGVxdWFsVGltZSBSdW4gdGhlIGZ1bmN0aW9uIHRpbWUgZXF1YWxpemVkIG9yIG5vIHRpbWluZyBlcXVhbGl6YXRpb24uCisgKiBAcGFyYW0gYXJpdGhUeXBlIFR5cGUgb2YgYXJpdGhtZXRpYyB0byBwZXJmb3JtIChpbnRlZ2VyIG9yIEYybSkKKyAqIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgTFRDX1BLSEFfTW9udGdvbWVyeVRvTm9ybWFsKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfdGltaW5nX3QgZXF1YWxUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSk7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIG1vZHVsYXIgYWRkaXRpb24gLSAoQSArIEIpIG1vZCBOLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgbW9kdWxhciBhZGRpdGlvbiBvZiAoQSArIEIpIG1vZCBOLCB3aXRoIGVpdGhlcgorICogaW50ZWdlciBvciBiaW5hcnkgcG9seW5vbWlhbCAoRjJtKSBpbnB1dHMuICBJbiB0aGUgRjJtIGZvcm0sIHRoaXMgZnVuY3Rpb24gaXMKKyAqIGVxdWl2YWxlbnQgdG8gYSBiaXR3aXNlIFhPUiBhbmQgaXQgaXMgZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIHN1YnRyYWN0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIEEgZmlyc3QgYWRkZW5kIChpbnRlZ2VyIG9yIGJpbmFyeSBwb2x5bm9taWFsKQorICogQHBhcmFtIHNpemVBIFNpemUgb2YgQSBpbiBieXRlcworICogQHBhcmFtIEIgc2Vjb25kIGFkZGVuZCAoaW50ZWdlciBvciBiaW5hcnkgcG9seW5vbWlhbCkKKyAqIEBwYXJhbSBzaXplQiBTaXplIG9mIEIgaW4gYnl0ZXMKKyAqIEBwYXJhbSBOIG1vZHVsdXMuIEZvciBGMm0gb3BlcmF0aW9uIHRoaXMgY2FuIGJlIE5VTEwsIGFzIE4gaXMgaWdub3JlZCBkdXJpbmcgRjJtIHBvbHlub21pYWwgYWRkaXRpb24uCisgKiBAcGFyYW0gc2l6ZU4gU2l6ZSBvZiBOIGluIGJ5dGVzLiBUaGlzIG11c3QgYmUgZ2l2ZW4gZm9yIGJvdGggaW50ZWdlciBhbmQgRjJtIHBvbHlub21pYWwgYWRkaXRpb25zLgorICogQHBhcmFtW291dF0gcmVzdWx0IE91dHB1dCBhcnJheSB0byBzdG9yZSByZXN1bHQgb2Ygb3BlcmF0aW9uCisgKiBAcGFyYW1bb3V0XSByZXN1bHRTaXplIE91dHB1dCBzaXplIG9mIG9wZXJhdGlvbiBpbiBieXRlcworICogQHBhcmFtIGFyaXRoVHlwZSBUeXBlIG9mIGFyaXRobWV0aWMgdG8gcGVyZm9ybSAoaW50ZWdlciBvciBGMm0pCisgKiBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMuCisgKi8KK3N0YXR1c190IExUQ19QS0hBX01vZEFkZChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgbW9kdWxhciBzdWJ0cmFjdGlvbiAtIChBIC0gQikgbW9kIE4uCisgKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBtb2R1bGFyIHN1YnRyYWN0aW9uIG9mIChBIC0gQikgbW9kIE4gd2l0aAorICogaW50ZWdlciBpbnB1dHMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gQSBmaXJzdCBhZGRlbmQgKGludGVnZXIgb3IgYmluYXJ5IHBvbHlub21pYWwpCisgKiBAcGFyYW0gc2l6ZUEgU2l6ZSBvZiBBIGluIGJ5dGVzCisgKiBAcGFyYW0gQiBzZWNvbmQgYWRkZW5kIChpbnRlZ2VyIG9yIGJpbmFyeSBwb2x5bm9taWFsKQorICogQHBhcmFtIHNpemVCIFNpemUgb2YgQiBpbiBieXRlcworICogQHBhcmFtIE4gbW9kdWx1cworICogQHBhcmFtIHNpemVOIFNpemUgb2YgTiBpbiBieXRlcworICogQHBhcmFtW291dF0gcmVzdWx0IE91dHB1dCBhcnJheSB0byBzdG9yZSByZXN1bHQgb2Ygb3BlcmF0aW9uCisgKiBAcGFyYW1bb3V0XSByZXN1bHRTaXplIE91dHB1dCBzaXplIG9mIG9wZXJhdGlvbiBpbiBieXRlcworICogQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICovCitzdGF0dXNfdCBMVENfUEtIQV9Nb2RTdWIxKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgbW9kdWxhciBzdWJ0cmFjdGlvbiAtIChCIC0gQSkgbW9kIE4uCisgKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBtb2R1bGFyIHN1YnRyYWN0aW9uIG9mIChCIC0gQSkgbW9kIE4sCisgKiB3aXRoIGludGVnZXIgaW5wdXRzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIEEgZmlyc3QgYWRkZW5kIChpbnRlZ2VyIG9yIGJpbmFyeSBwb2x5bm9taWFsKQorICogQHBhcmFtIHNpemVBIFNpemUgb2YgQSBpbiBieXRlcworICogQHBhcmFtIEIgc2Vjb25kIGFkZGVuZCAoaW50ZWdlciBvciBiaW5hcnkgcG9seW5vbWlhbCkKKyAqIEBwYXJhbSBzaXplQiBTaXplIG9mIEIgaW4gYnl0ZXMKKyAqIEBwYXJhbSBOIG1vZHVsdXMKKyAqIEBwYXJhbSBzaXplTiBTaXplIG9mIE4gaW4gYnl0ZXMKKyAqIEBwYXJhbVtvdXRdIHJlc3VsdCBPdXRwdXQgYXJyYXkgdG8gc3RvcmUgcmVzdWx0IG9mIG9wZXJhdGlvbgorICogQHBhcmFtW291dF0gcmVzdWx0U2l6ZSBPdXRwdXQgc2l6ZSBvZiBvcGVyYXRpb24gaW4gYnl0ZXMKKyAqIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgTFRDX1BLSEFfTW9kU3ViMihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVCLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcmVzdWx0U2l6ZSk7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIG1vZHVsYXIgbXVsdGlwbGljYXRpb24gLSAoQSB4IEIpIG1vZCBOLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgbW9kdWxhciBtdWx0aXBsaWNhdGlvbiB3aXRoIGVpdGhlciBpbnRlZ2VyIG9yCisgKiBiaW5hcnkgcG9seW5vbWlhbCAoRjJtKSBpbnB1dHMuICBJdCBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IHdoZXRoZXIgaW5wdXRzCisgKiBhbmQvb3Igb3V0cHV0cyB3aWxsIGJlIGluIE1vbnRnb21lcnkgZm9ybSBvciBub3QuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gQSBmaXJzdCBhZGRlbmQgKGludGVnZXIgb3IgYmluYXJ5IHBvbHlub21pYWwpCisgKiBAcGFyYW0gc2l6ZUEgU2l6ZSBvZiBBIGluIGJ5dGVzCisgKiBAcGFyYW0gQiBzZWNvbmQgYWRkZW5kIChpbnRlZ2VyIG9yIGJpbmFyeSBwb2x5bm9taWFsKQorICogQHBhcmFtIHNpemVCIFNpemUgb2YgQiBpbiBieXRlcworICogQHBhcmFtIE4gbW9kdWx1cy4KKyAqIEBwYXJhbSBzaXplTiBTaXplIG9mIE4gaW4gYnl0ZXMKKyAqIEBwYXJhbVtvdXRdIHJlc3VsdCBPdXRwdXQgYXJyYXkgdG8gc3RvcmUgcmVzdWx0IG9mIG9wZXJhdGlvbgorICogQHBhcmFtW291dF0gcmVzdWx0U2l6ZSBPdXRwdXQgc2l6ZSBvZiBvcGVyYXRpb24gaW4gYnl0ZXMKKyAqIEBwYXJhbSBhcml0aFR5cGUgVHlwZSBvZiBhcml0aG1ldGljIHRvIHBlcmZvcm0gKGludGVnZXIgb3IgRjJtKQorICogQHBhcmFtIG1vbnRJbiBGb3JtYXQgb2YgaW5wdXRzCisgKiBAcGFyYW0gbW9udE91dCBGb3JtYXQgb2Ygb3V0cHV0CisgKiBAcGFyYW0gZXF1YWxUaW1lIFJ1biB0aGUgZnVuY3Rpb24gdGltZSBlcXVhbGl6ZWQgb3Igbm8gdGltaW5nIGVxdWFsaXphdGlvbi4gVGhpcyBhcmd1bWVudCBpcyBpZ25vcmVkIGZvciBGMm0gbW9kdWxhcgorICogbXVsdGlwbGljYXRpb24uCisgKiBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMuCisgKi8KK3N0YXR1c190IExUQ19QS0hBX01vZE11bChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX21vbnRnb21lcnlfZm9ybV90IG1vbnRJbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9tb250Z29tZXJ5X2Zvcm1fdCBtb250T3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX3RpbWluZ190IGVxdWFsVGltZSk7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIG1vZHVsYXIgZXhwb25lbnRpYXRpb24gLSAoQV5FKSBtb2QgTi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIG1vZHVsYXIgZXhwb25lbnRpYXRpb24gd2l0aCBlaXRoZXIgaW50ZWdlciBvcgorICogYmluYXJ5IHBvbHlub21pYWwgKEYybSkgaW5wdXRzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIEEgZmlyc3QgYWRkZW5kIChpbnRlZ2VyIG9yIGJpbmFyeSBwb2x5bm9taWFsKQorICogQHBhcmFtIHNpemVBIFNpemUgb2YgQSBpbiBieXRlcworICogQHBhcmFtIE4gbW9kdWx1cworICogQHBhcmFtIHNpemVOIFNpemUgb2YgTiBpbiBieXRlcworICogQHBhcmFtIEUgZXhwb25lbnQKKyAqIEBwYXJhbSBzaXplRSBTaXplIG9mIEUgaW4gYnl0ZXMKKyAqIEBwYXJhbVtvdXRdIHJlc3VsdCBPdXRwdXQgYXJyYXkgdG8gc3RvcmUgcmVzdWx0IG9mIG9wZXJhdGlvbgorICogQHBhcmFtW291dF0gcmVzdWx0U2l6ZSBPdXRwdXQgc2l6ZSBvZiBvcGVyYXRpb24gaW4gYnl0ZXMKKyAqIEBwYXJhbSBtb250SW4gRm9ybWF0IG9mIEEgaW5wdXQgKG5vcm1hbCBvciBNb250Z29tZXJ5KQorICogQHBhcmFtIGFyaXRoVHlwZSBUeXBlIG9mIGFyaXRobWV0aWMgdG8gcGVyZm9ybSAoaW50ZWdlciBvciBGMm0pCisgKiBAcGFyYW0gZXF1YWxUaW1lIFJ1biB0aGUgZnVuY3Rpb24gdGltZSBlcXVhbGl6ZWQgb3Igbm8gdGltaW5nIGVxdWFsaXphdGlvbi4KKyAqIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgTFRDX1BLSEFfTW9kRXhwKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcmVzdWx0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfbW9udGdvbWVyeV9mb3JtX3QgbW9udEluLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX3RpbWluZ190IGVxdWFsVGltZSk7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIG1vZHVsYXIgcmVkdWN0aW9uIC0gKEEpIG1vZCBOLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgbW9kdWxhciByZWR1Y3Rpb24gd2l0aCBlaXRoZXIgaW50ZWdlciBvcgorICogYmluYXJ5IHBvbHlub21pYWwgKEYybSkgaW5wdXRzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIEEgZmlyc3QgYWRkZW5kIChpbnRlZ2VyIG9yIGJpbmFyeSBwb2x5bm9taWFsKQorICogQHBhcmFtIHNpemVBIFNpemUgb2YgQSBpbiBieXRlcworICogQHBhcmFtIE4gbW9kdWx1cworICogQHBhcmFtIHNpemVOIFNpemUgb2YgTiBpbiBieXRlcworICogQHBhcmFtW291dF0gcmVzdWx0IE91dHB1dCBhcnJheSB0byBzdG9yZSByZXN1bHQgb2Ygb3BlcmF0aW9uCisgKiBAcGFyYW1bb3V0XSByZXN1bHRTaXplIE91dHB1dCBzaXplIG9mIG9wZXJhdGlvbiBpbiBieXRlcworICogQHBhcmFtIGFyaXRoVHlwZSBUeXBlIG9mIGFyaXRobWV0aWMgdG8gcGVyZm9ybSAoaW50ZWdlciBvciBGMm0pCisgKiBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMuCisgKi8KK3N0YXR1c190IExUQ19QS0hBX01vZFJlZChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSk7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIG1vZHVsYXIgaW52ZXJzaW9uIC0gKEFeLTEpIG1vZCBOLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgbW9kdWxhciBpbnZlcnNpb24gd2l0aCBlaXRoZXIgaW50ZWdlciBvcgorICogYmluYXJ5IHBvbHlub21pYWwgKEYybSkgaW5wdXRzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIEEgZmlyc3QgYWRkZW5kIChpbnRlZ2VyIG9yIGJpbmFyeSBwb2x5bm9taWFsKQorICogQHBhcmFtIHNpemVBIFNpemUgb2YgQSBpbiBieXRlcworICogQHBhcmFtIE4gbW9kdWx1cworICogQHBhcmFtIHNpemVOIFNpemUgb2YgTiBpbiBieXRlcworICogQHBhcmFtW291dF0gcmVzdWx0IE91dHB1dCBhcnJheSB0byBzdG9yZSByZXN1bHQgb2Ygb3BlcmF0aW9uCisgKiBAcGFyYW1bb3V0XSByZXN1bHRTaXplIE91dHB1dCBzaXplIG9mIG9wZXJhdGlvbiBpbiBieXRlcworICogQHBhcmFtIGFyaXRoVHlwZSBUeXBlIG9mIGFyaXRobWV0aWMgdG8gcGVyZm9ybSAoaW50ZWdlciBvciBGMm0pCisgKiBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMuCisgKi8KK3N0YXR1c190IExUQ19QS0hBX01vZEludihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSk7CisKKy8qIQorICogQGJyaWVmIENvbXB1dGVzIGludGVnZXIgTW9udGdvbWVyeSBmYWN0b3IgUl4yIG1vZCBOLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgYSBjb25zdGFudCB0byBhc3Npc3QgaW4gY29udmVydGluZyBvcGVyYW5kcworICogaW50byB0aGUgTW9udGdvbWVyeSByZXNpZHVlIHN5c3RlbSByZXByZXNlbnRhdGlvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBOIG1vZHVsdXMKKyAqIEBwYXJhbSBzaXplTiBTaXplIG9mIE4gaW4gYnl0ZXMKKyAqIEBwYXJhbVtvdXRdIHJlc3VsdCBPdXRwdXQgYXJyYXkgdG8gc3RvcmUgcmVzdWx0IG9mIG9wZXJhdGlvbgorICogQHBhcmFtW291dF0gcmVzdWx0U2l6ZSBPdXRwdXQgc2l6ZSBvZiBvcGVyYXRpb24gaW4gYnl0ZXMKKyAqIEBwYXJhbSBhcml0aFR5cGUgVHlwZSBvZiBhcml0aG1ldGljIHRvIHBlcmZvcm0gKGludGVnZXIgb3IgRjJtKQorICogQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICovCitzdGF0dXNfdCBMVENfUEtIQV9Nb2RSMigKKyAgICBMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqTiwgdWludDE2X3Qgc2l6ZU4sIHVpbnQ4X3QgKnJlc3VsdCwgdWludDE2X3QgKnJlc3VsdFNpemUsIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSk7CisKKy8qIQorICogQGJyaWVmIENhbGN1bGF0ZXMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIC0gR0NEIChBLCBOKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIHR3byBpbnB1dHMgd2l0aAorICogZWl0aGVyIGludGVnZXIgb3IgYmluYXJ5IHBvbHlub21pYWwgKEYybSkgaW5wdXRzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIEEgZmlyc3QgdmFsdWUgKG11c3QgYmUgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIE4pCisgKiBAcGFyYW0gc2l6ZUEgU2l6ZSBvZiBBIGluIGJ5dGVzCisgKiBAcGFyYW0gTiBzZWNvbmQgdmFsdWUgKG11c3QgYmUgbm9uLXplcm8pCisgKiBAcGFyYW0gc2l6ZU4gU2l6ZSBvZiBOIGluIGJ5dGVzCisgKiBAcGFyYW1bb3V0XSByZXN1bHQgT3V0cHV0IGFycmF5IHRvIHN0b3JlIHJlc3VsdCBvZiBvcGVyYXRpb24KKyAqIEBwYXJhbVtvdXRdIHJlc3VsdFNpemUgT3V0cHV0IHNpemUgb2Ygb3BlcmF0aW9uIGluIGJ5dGVzCisgKiBAcGFyYW0gYXJpdGhUeXBlIFR5cGUgb2YgYXJpdGhtZXRpYyB0byBwZXJmb3JtIChpbnRlZ2VyIG9yIEYybSkKKyAqIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgTFRDX1BLSEFfR0NEKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlKTsKKworLyohCisgKiBAYnJpZWYgRXhlY3V0ZXMgTWlsbGVyLVJhYmluIHByaW1hbGl0eSB0ZXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB3aGV0aGVyIG9yIG5vdCBhIGNhbmRpZGF0ZSBwcmltZSBudW1iZXIgaXMgbGlrZWx5CisgKiB0byBiZSBhIHByaW1lLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIEEgaW5pdGlhbCByYW5kb20gc2VlZAorICogQHBhcmFtIHNpemVBIFNpemUgb2YgQSBpbiBieXRlcworICogQHBhcmFtIEIgbnVtYmVyIG9mIHRyaWFsIHJ1bnMKKyAqIEBwYXJhbSBzaXplQiBTaXplIG9mIEIgaW4gYnl0ZXMKKyAqIEBwYXJhbSBOIGNhbmRpZGF0ZSBwcmltZSBpbnRlZ2VyCisgKiBAcGFyYW0gc2l6ZU4gU2l6ZSBvZiBOIGluIGJ5dGVzCisgKiBAcGFyYW1bb3V0XSByZXMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgbGlrZWx5IHByaW1lIG9yIGZhbHNlIG90aGVyd2lzZQorICogQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICovCitzdGF0dXNfdCBMVENfUEtIQV9QcmltYWxpdHlUZXN0KExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpyZXMpOworCisvKiEKKyAqIEBicmllZiBBZGRzIGVsbGlwdGljIGN1cnZlIHBvaW50cyAtIEEgKyBCLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgRUNDIHBvaW50IGFkZGl0aW9uIG92ZXIgYSBwcmltZSBmaWVsZCAoRnApIG9yIGJpbmFyeSBmaWVsZCAoRjJtKSB1c2luZworICogYWZmaW5lIGNvb3JkaW5hdGVzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIEEgTGVmdC1oYW5kIHBvaW50CisgKiBAcGFyYW0gQiBSaWdodC1oYW5kIHBvaW50CisgKiBAcGFyYW0gTiBQcmltZSBtb2R1bHVzIG9mIHRoZSBmaWVsZAorICogQHBhcmFtIFIybW9kTiBOVUxMICh0aGUgZnVuY3Rpb24gY29tcHV0ZXMgUjJtb2ROIGludGVybmFsbHkpIG9yIHBvaW50ZXIgdG8gcHJlLWNvbXB1dGVkIFIybW9kTiAob2J0YWluZWQgZnJvbQorICogICAgICAgICAgICAgICBMVENfUEtIQV9Nb2RSMigpIGZ1bmN0aW9uKS4KKyAqIEBwYXJhbSBhQ3VydmVQYXJhbSBBIHBhcmFtZXRlciBmcm9tIGN1cnZlIGVxdWF0aW9uCisgKiBAcGFyYW0gYkN1cnZlUGFyYW0gQiBwYXJhbWV0ZXIgZnJvbSBjdXJ2ZSBlcXVhdGlvbiAoY29uc3RhbnQpCisgKiBAcGFyYW0gc2l6ZSBTaXplIGluIGJ5dGVzIG9mIGN1cnZlIHBvaW50cyBhbmQgcGFyYW1ldGVycworICogQHBhcmFtIGFyaXRoVHlwZSBUeXBlIG9mIGFyaXRobWV0aWMgdG8gcGVyZm9ybSAoaW50ZWdlciBvciBGMm0pCisgKiBAcGFyYW1bb3V0XSByZXN1bHQgUmVzdWx0IHBvaW50CisgKiBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMuCisgKi8KK3N0YXR1c190IExUQ19QS0hBX0VDQ19Qb2ludEFkZChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsdGNfcGtoYV9lY2NfcG9pbnRfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsdGNfcGtoYV9lY2NfcG9pbnRfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKlIybW9kTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphQ3VydmVQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpiQ3VydmVQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2VjY19wb2ludF90ICpyZXN1bHQpOworCisvKiEKKyAqIEBicmllZiBEb3VibGVzIGVsbGlwdGljIGN1cnZlIHBvaW50cyAtIEIgKyBCLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgRUNDIHBvaW50IGRvdWJsaW5nIG92ZXIgYSBwcmltZSBmaWVsZCAoRnApIG9yIGJpbmFyeSBmaWVsZCAoRjJtKSB1c2luZworICogYWZmaW5lIGNvb3JkaW5hdGVzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIEIgUG9pbnQgdG8gZG91YmxlCisgKiBAcGFyYW0gTiBQcmltZSBtb2R1bHVzIG9mIHRoZSBmaWVsZAorICogQHBhcmFtIGFDdXJ2ZVBhcmFtIEEgcGFyYW1ldGVyIGZyb20gY3VydmUgZXF1YXRpb24KKyAqIEBwYXJhbSBiQ3VydmVQYXJhbSBCIHBhcmFtZXRlciBmcm9tIGN1cnZlIGVxdWF0aW9uIChjb25zdGFudCkKKyAqIEBwYXJhbSBzaXplIFNpemUgaW4gYnl0ZXMgb2YgY3VydmUgcG9pbnRzIGFuZCBwYXJhbWV0ZXJzCisgKiBAcGFyYW0gYXJpdGhUeXBlIFR5cGUgb2YgYXJpdGhtZXRpYyB0byBwZXJmb3JtIChpbnRlZ2VyIG9yIEYybSkKKyAqIEBwYXJhbVtvdXRdIHJlc3VsdCBSZXN1bHQgcG9pbnQKKyAqIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgTFRDX1BLSEFfRUNDX1BvaW50RG91YmxlKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx0Y19wa2hhX2VjY19wb2ludF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYUN1cnZlUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYkN1cnZlUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9lY2NfcG9pbnRfdCAqcmVzdWx0KTsKKworLyohCisgKiBAYnJpZWYgTXVsdGlwbGllcyBhbiBlbGxpcHRpYyBjdXJ2ZSBwb2ludCBieSBhIHNjYWxhciAtIEUgeCAoQTAsIEExKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIEVDQyBwb2ludCBtdWx0aXBsaWNhdGlvbiB0byBtdWx0aXBseSBhbiBFQ0MgcG9pbnQgYnkKKyAqIGEgc2NhbGFyIGludGVnZXIgbXVsdGlwbGllciBvdmVyIGEgcHJpbWUgZmllbGQgKEZwKSBvciBhIGJpbmFyeSBmaWVsZCAoRjJtKS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBBIFBvaW50IGFzIG11bHRpcGxpY2FuZAorICogQHBhcmFtIEUgU2NhbGFyIG11bHRpcGxlCisgKiBAcGFyYW0gc2l6ZUUgVGhlIHNpemUgb2YgRSwgaW4gYnl0ZXMKKyAqIEBwYXJhbSBOIE1vZHVsdXMsIGEgcHJpbWUgbnVtYmVyIGZvciB0aGUgRnAgZmllbGQgb3IgSXJyZWR1Y2libGUgcG9seW5vbWlhbCBmb3IgRjJtIGZpZWxkLgorICogQHBhcmFtIFIybW9kTiBOVUxMICh0aGUgZnVuY3Rpb24gY29tcHV0ZXMgUjJtb2ROIGludGVybmFsbHkpIG9yIHBvaW50ZXIgdG8gcHJlLWNvbXB1dGVkIFIybW9kTiAob2J0YWluZWQgZnJvbQorICogICAgICAgIExUQ19QS0hBX01vZFIyKCkgZnVuY3Rpb24pLgorICogQHBhcmFtIGFDdXJ2ZVBhcmFtIEEgcGFyYW1ldGVyIGZyb20gY3VydmUgZXF1YXRpb24KKyAqIEBwYXJhbSBiQ3VydmVQYXJhbSBCIHBhcmFtZXRlciBmcm9tIGN1cnZlIGVxdWF0aW9uIChDIHBhcmFtZXRlciBmb3Igb3BlcmF0aW9uIG92ZXIgRjJtKS4KKyAqIEBwYXJhbSBzaXplIFNpemUgaW4gYnl0ZXMgb2YgY3VydmUgcG9pbnRzIGFuZCBwYXJhbWV0ZXJzCisgKiBAcGFyYW0gZXF1YWxUaW1lIFJ1biB0aGUgZnVuY3Rpb24gdGltZSBlcXVhbGl6ZWQgb3Igbm8gdGltaW5nIGVxdWFsaXphdGlvbi4KKyAqIEBwYXJhbSBhcml0aFR5cGUgVHlwZSBvZiBhcml0aG1ldGljIHRvIHBlcmZvcm0gKGludGVnZXIgb3IgRjJtKQorICogQHBhcmFtW291dF0gcmVzdWx0IFJlc3VsdCBwb2ludAorICogQHBhcmFtW291dF0gaW5maW5pdHkgT3V0cHV0IHRydWUgaWYgdGhlIHJlc3VsdCBpcyBwb2ludCBvZiBpbmZpbml0eSwgYW5kIGZhbHNlIG90aGVyd2lzZS4gV3JpdGluZyBvZiB0aGlzIG91dHB1dCB3aWxsCisgKiBiZSBpZ25vcmVkIGlmIHRoZSBhcmd1bWVudCBpcyBOVUxMLgorICogQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICovCitzdGF0dXNfdCBMVENfUEtIQV9FQ0NfUG9pbnRNdWwoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHRjX3BraGFfZWNjX3BvaW50X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNpemVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqUjJtb2ROLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFDdXJ2ZVBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJDdXJ2ZVBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV90aW1pbmdfdCBlcXVhbFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2VjY19wb2ludF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqaW5maW5pdHkpOworCisvKiEKKyAqQH0KKyAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisvKiEKKyAqQH0KKyAqLworCisjZW5kaWYgLyogX0ZTTF9MVENfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2x0Y19lZG1hLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sdGNfZWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzQzZGQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sdGNfZWRtYS5jCkBAIC0wLDAgKzEsMTI0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfbHRjX2VkbWEuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKjwhIFN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciBsdGNfZWRtYV9wcml2YXRlX2hhbmRsZV90LiBUaGUgc3RydWN0dXJlIGlzIHByaXZhdGUuICovCit0eXBlZGVmIHN0cnVjdCBfbHRjX2VkbWFfcHJpdmF0ZV9oYW5kbGUKK3sKKyAgICBMVENfVHlwZSAqYmFzZTsKKyAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlOworfSBsdGNfZWRtYV9wcml2YXRlX2hhbmRsZV90OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKjwhIFByaXZhdGUgaGFuZGxlIG9ubHkgdXNlZCBmb3IgaW50ZXJuYWxseS4gKi8KK3N0YXRpYyBsdGNfZWRtYV9wcml2YXRlX2hhbmRsZV90IHNfZWRtYVByaXZhdGVIYW5kbGVbRlNMX0ZFQVRVUkVfU09DX0xUQ19DT1VOVF07CisKKy8qIEFycmF5IG9mIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4gKi8KK3N0YXRpYyBMVENfVHlwZSAqY29uc3Qgc19sdGNCYXNlW10gPSBMVENfQkFTRV9QVFJTOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTdGF0ZSBtYWNoaW5lIHN0YXRlLiovCisjZGVmaW5lIExUQ19TTV9TVEFURV9TVEFSVCAweDAwMDB1CisjZGVmaW5lIExUQ19TTV9TVEFURV9GSU5JU0ggMHhGRkZGdQorCisvKiEgRnVsbCB3b3JkIHJlcHJlc2VudGluZyB0aGUgYWN0dWFsIGJpdCB2YWx1ZXMgZm9yIHRoZSBMVEMgbW9kZSByZWdpc3Rlci4gKi8KK3R5cGVkZWYgdWludDMyX3QgbHRjX21vZGVfdDsKKworI2RlZmluZSBMVENfRklGT19TWl9NQVhfRE9XTl9BTEdOICgweGZmMHUpCisjZGVmaW5lIExUQ19NRF9BTEdfQUVTICgweDEwVSkgICAgICAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfQUxHOiBBRVMgKi8KKyNkZWZpbmUgTFRDX01EX0FMR19ERVMgKDB4MjBVKSAgICAgICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BTEc6IERFUyAqLworI2RlZmluZSBMVENfTURfQUxHX1RSSVBMRV9ERVMgKDB4MjFVKSAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FMRzogM0RFUyAqLworI2RlZmluZSBMVENfTURQS19BTEdfUEtIQSAoMHg4MFUpICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EUEtfQUxHOiBQS0hBICovCisjZGVmaW5lIExUQ19NRF9FTkNfREVDUllQVCAoMFUpICAgICAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfRU5DOiBEZWNyeXB0LiAqLworI2RlZmluZSBMVENfTURfRU5DX0VOQ1JZUFQgKDB4MVUpICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0VOQzogRW5jcnlwdC4gKi8KKyNkZWZpbmUgTFRDX01EX0FTX1VQREFURSAoMFUpICAgICAgICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BUzogVXBkYXRlICovCisjZGVmaW5lIExUQ19NRF9BU19JTklUSUFMSVpFICgweDFVKSAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfQVM6IEluaXRpYWxpemUgKi8KKyNkZWZpbmUgTFRDX01EX0FTX0ZJTkFMSVpFICgweDJVKSAgICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BUzogRmluYWxpemUgKi8KKyNkZWZpbmUgTFRDX01EX0FTX0lOSVRfRklOQUwgKDB4M1UpICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BUzogSW5pdGlhbGl6ZS9GaW5hbGl6ZSAqLworCitlbnVtIF9sdGNfbWRfZGtfYml0X3NoaWZ0Cit7CisgICAga0xUQ19Nb2RlUmVnQml0U2hpZnRESyA9IDEyVSwKK307CisKK3R5cGVkZWYgZW51bSBfbHRjX2FsZ29yaXRobQoreworICAgIGtMVENfQWxnb3JpdGhtQUVTID0gTFRDX01EX0FMR19BRVMgPDwgTFRDX01EX0FMR19TSElGVCwKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0RFUworICAgIGtMVENfQWxnb3JpdGhtREVTID0gTFRDX01EX0FMR19ERVMgPDwgTFRDX01EX0FMR19TSElGVCwKKyAgICBrTFRDX0FsZ29yaXRobTNERVMgPSBMVENfTURfQUxHX1RSSVBMRV9ERVMgPDwgTFRDX01EX0FMR19TSElGVCwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX0RFUyAqLworfSBsdGNfYWxnb3JpdGhtX3Q7CisKK3R5cGVkZWYgZW51bSBfbHRjX21vZGVfc3ltbWV0cmljX2FsZworeworICAgIGtMVENfTW9kZUNUUiA9IDB4MDBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCisgICAga0xUQ19Nb2RlQ0JDID0gMHgxMFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVFQ0IgPSAweDIwVSA8PCBMVENfTURfQUFJX1NISUZULAorICAgIGtMVENfTW9kZUNGQiA9IDB4MzBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCisgICAga0xUQ19Nb2RlT0ZCID0gMHg0MFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVDTUFDID0gMHg2MFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVYQ0JDTUFDID0gMHg3MFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVDQ00gPSAweDgwVSA8PCBMVENfTURfQUFJX1NISUZULAorICAgIGtMVENfTW9kZUdDTSA9IDB4OTBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCit9IGx0Y19tb2RlX3N5bW1ldHJpY19hbGdfdDsKKwordHlwZWRlZiBlbnVtIF9sdGNfbW9kZV9lbmNyeXB0Cit7CisgICAga0xUQ19Nb2RlRGVjcnlwdCA9IExUQ19NRF9FTkNfREVDUllQVCA8PCBMVENfTURfRU5DX1NISUZULAorICAgIGtMVENfTW9kZUVuY3J5cHQgPSBMVENfTURfRU5DX0VOQ1JZUFQgPDwgTFRDX01EX0VOQ19TSElGVCwKK30gbHRjX21vZGVfZW5jcnlwdF90OworCit0eXBlZGVmIGVudW0gX2x0Y19tb2RlX2FsZ29yaXRobV9zdGF0ZQoreworICAgIGtMVENfTW9kZVVwZGF0ZSA9IExUQ19NRF9BU19VUERBVEUgPDwgTFRDX01EX0FTX1NISUZULAorICAgIGtMVENfTW9kZUluaXQgPSBMVENfTURfQVNfSU5JVElBTElaRSA8PCBMVENfTURfQVNfU0hJRlQsCisgICAga0xUQ19Nb2RlRmluYWxpemUgPSBMVENfTURfQVNfRklOQUxJWkUgPDwgTFRDX01EX0FTX1NISUZULAorICAgIGtMVENfTW9kZUluaXRGaW5hbCA9IExUQ19NRF9BU19JTklUX0ZJTkFMIDw8IExUQ19NRF9BU19TSElGVAorfSBsdGNfbW9kZV9hbGdvcml0aG1fc3RhdGVfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiBzdGF0dXNfdCBsdGNfZ2V0X2NvbnRleHQoTFRDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgKmRlc3QsIHVpbnQ4X3QgZGF0YVNpemUsIHVpbnQ4X3Qgc3RhcnRJbmRleCk7CitleHRlcm4gc3RhdHVzX3QgbHRjX3NldF9jb250ZXh0KExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50OF90IGRhdGFTaXplLCB1aW50OF90IHN0YXJ0SW5kZXgpOworZXh0ZXJuIHN0YXR1c190IGx0Y19zeW1tZXRyaWNfdXBkYXRlKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2FsZ29yaXRobV90IGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9lbmNyeXB0X3QgZW5jKTsKK2V4dGVybiB2b2lkIGx0Y19tZW1jcHkodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKTsKK2V4dGVybiBib29sIGx0Y19jaGVja19rZXlfc2l6ZShjb25zdCB1aW50MzJfdCBrZXlTaXplKTsKK2V4dGVybiBzdGF0dXNfdCBsdGNfd2FpdChMVENfVHlwZSAqYmFzZSk7CitleHRlcm4gdm9pZCBsdGNfY2xlYXJfYWxsKExUQ19UeXBlICpiYXNlLCBib29sIGFkZFBLSEEpOworZXh0ZXJuIHN0YXR1c190IGx0Y18zZGVzX2NoZWNrX2lucHV0X2FyZ3MobHRjX21vZGVfc3ltbWV0cmljX2FsZ190IG1vZGVBcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5Mik7CitleHRlcm4gdm9pZCBsdGNfc3ltbWV0cmljX3Byb2Nlc3MoTFRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGluU2l6ZSwgY29uc3QgdWludDhfdCAqKmluRGF0YSwgdWludDhfdCAqKm91dERhdGEpOworZXh0ZXJuIHN0YXR1c190IGx0Y19zeW1tZXRyaWNfcHJvY2Vzc19kYXRhKExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICppbkRhdGEsIHVpbnQzMl90IGluU2l6ZSwgdWludDhfdCAqb3V0RGF0YSk7CisKK3N0YXRpYyB1aW50MzJfdCBMVENfR2V0SW5zdGFuY2UoTFRDX1R5cGUgKmJhc2UpOworc3RhdGljIHZvaWQgbHRjX3N5bW1ldHJpY19wcm9jZXNzX0VETUEoTFRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGluU2l6ZSwgY29uc3QgdWludDhfdCAqKmluRGF0YSwgdWludDhfdCAqKm91dERhdGEpOworc3RhdGljIHN0YXR1c190IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnNfRURNQShMVENfVHlwZSAqYmFzZSwgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTFRDIENvbW1vbiBjb2RlIHN0YXRpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgU3BsaXRzIHRoZSBMVEMgam9iIGludG8gc2Vzc2lvbnMuIFVzZWQgZm9yIENCQywgQ1RSLCBDRkIsIE9GQiBjaXBoZXIgYmxvY2sgbW9kZXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaW5EYXRhIElucHV0IGRhdGEgdG8gcHJvY2Vzcy4KKyAqIEBwYXJhbSBpblNpemUgSW5wdXQgc2l6ZSBvZiB0aGUgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG91dERhdGEgT3V0cHV0IGRhdGEgYnVmZmVyLgorICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9uc19FRE1BKExUQ19UeXBlICpiYXNlLCBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIHN0YXR1c190IHJldHZhbDsKKyAgICBib29sIGV4aXRfc20gPSBmYWxzZTsKKworICAgIGhhbmRsZS0+bW9kZVJlZyA9IGJhc2UtPk1EOworICAgIHJldHZhbCA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgIGlmICgoIWhhbmRsZS0+aW5EYXRhKSB8fCAoIWhhbmRsZS0+b3V0RGF0YSkpCisgICAgeworICAgICAgICBoYW5kbGUtPnN0YXRlID0gTFRDX1NNX1NUQVRFX0ZJTklTSDsgLyogRU5EICovCisgICAgICAgIHJldHZhbCA9IGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIHdoaWxlIChleGl0X3NtID09IGZhbHNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChoYW5kbGUtPnN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIExUQ19TTV9TVEFURV9TVEFSVDoKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5zaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3o7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+c2l6ZSA8PSBMVENfRklGT19TWl9NQVhfRE9XTl9BTEdOKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzeiA9IGhhbmRsZS0+c2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gTFRDX0ZJRk9fU1pfTUFYX0RPV05fQUxHTjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8qIHJldHZhbCA9IGx0Y19zeW1tZXRyaWNfcHJvY2Vzc19kYXRhX0VETUEoYmFzZSwgaGFuZGxlLT5pbkRhdGEsIHN6LCBoYW5kbGUtPm91dERhdGEpOyAqLworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsYXN0U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluU2l6ZSA9IHN6OworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSB0aGUgZGF0YSBzaXplLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS0+RFMgPSBpblNpemU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwbGl0IHRoZSBpblNpemUgaW50byBmdWxsIDE2LWJ5dGUgY2h1bmtzIGFuZCBsYXN0IGluY29tcGxldGUgYmxvY2sgZHVlIHRvIExUQyBBRVMgT0ZJRk8KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGVycmF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluU2l6ZSA8PSAxNnUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNpemUgPSBpblNpemU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5TaXplID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIGFsbCAxNi1ieXRlIGRhdGEgY2h1bmtzLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTaXplID0gaW5TaXplICUgMTZ1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0U2l6ZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNpemUgPSAxNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5TaXplIC09IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblNpemUgLT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTaXplOyAvKiBpblNpemUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gMTYgYnl0ZSBib3VuZGFyeS4gcmVtYWluaW5nIGJ5dGVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNpemUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5zaXplIC09IGluU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfRURNQShiYXNlLCBpblNpemUsICZoYW5kbGUtPmluRGF0YSwgJmhhbmRsZS0+b3V0RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdF9zbSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChsYXN0U2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfc3ltbWV0cmljX3Byb2Nlc3MoYmFzZSwgbGFzdFNpemUsICZoYW5kbGUtPmluRGF0YSwgJmhhbmRsZS0+b3V0RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gbHRjX3dhaXQoYmFzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5zaXplIC09IGxhc3RTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBMVENfU01fU1RBVEVfRklOSVNIOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTFRDX1NNX1NUQVRFX0ZJTklTSDoKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYmFzZS0+TUQgPSBoYW5kbGUtPm1vZGVSZWc7CisKKyAgICAgICAgICAgICAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIGZhbHNlKTsKKworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIHJldHZhbCwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4aXRfc20gPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyohCisgKiBAYnJpZWYgU3BsaXRzIHRoZSBMVEMgam9iIGludG8gc2Vzc2lvbnMuIFVzZWQgZm9yIENCQywgQ1RSLCBDRkIsIE9GQiBjaXBoZXIgYmxvY2sgbW9kZXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaW5EYXRhIElucHV0IGRhdGEgdG8gcHJvY2Vzcy4KKyAqIEBwYXJhbSBpblNpemUgSW5wdXQgc2l6ZSBvZiB0aGUgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG91dERhdGEgT3V0cHV0IGRhdGEgYnVmZmVyLgorICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9uc19jdHJfRURNQShMVENfVHlwZSAqYmFzZSwgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7CisgICAgYm9vbCBleGl0X3NtID0gZmFsc2U7CisKKyAgICBoYW5kbGUtPm1vZGVSZWcgPSBiYXNlLT5NRDsKKyAgICByZXR2YWwgPSBrU3RhdHVzX1N1Y2Nlc3M7CisKKyAgICBpZiAoKCFoYW5kbGUtPmluRGF0YSkgfHwgKCFoYW5kbGUtPm91dERhdGEpKQorICAgIHsKKyAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IExUQ19TTV9TVEFURV9GSU5JU0g7CisgICAgICAgIHJldHZhbCA9IGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIHdoaWxlIChleGl0X3NtID09IGZhbHNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChoYW5kbGUtPnN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIExUQ19TTV9TVEFURV9TVEFSVDoKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5zaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3o7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+c2l6ZSA8PSBMVENfRklGT19TWl9NQVhfRE9XTl9BTEdOKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzeiA9IGhhbmRsZS0+c2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gTFRDX0ZJRk9fU1pfTUFYX0RPV05fQUxHTjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8qIHJldHZhbCA9IGx0Y19zeW1tZXRyaWNfcHJvY2Vzc19kYXRhX0VETUEoYmFzZSwgaGFuZGxlLT5pbkRhdGEsIHN6LCBoYW5kbGUtPm91dERhdGEpOyAqLworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsYXN0U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluU2l6ZSA9IHN6OworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSB0aGUgZGF0YSBzaXplLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS0+RFMgPSBpblNpemU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwbGl0IHRoZSBpblNpemUgaW50byBmdWxsIDE2LWJ5dGUgY2h1bmtzIGFuZCBsYXN0IGluY29tcGxldGUgYmxvY2sgZHVlIHRvIExUQyBBRVMgT0ZJRk8KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGVycmF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluU2l6ZSA8PSAxNnUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNpemUgPSBpblNpemU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5TaXplID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIGFsbCAxNi1ieXRlIGRhdGEgY2h1bmtzLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTaXplID0gaW5TaXplICUgMTZ1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0U2l6ZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNpemUgPSAxNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5TaXplIC09IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblNpemUgLT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTaXplOyAvKiBpblNpemUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gMTYgYnl0ZSBib3VuZGFyeS4gcmVtYWluaW5nIGJ5dGVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNpemUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5zaXplIC09IGluU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfRURNQShiYXNlLCBpblNpemUsICZoYW5kbGUtPmluRGF0YSwgJmhhbmRsZS0+b3V0RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdF9zbSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChsYXN0U2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfc3ltbWV0cmljX3Byb2Nlc3MoYmFzZSwgbGFzdFNpemUsICZoYW5kbGUtPmluRGF0YSwgJmhhbmRsZS0+b3V0RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gbHRjX3dhaXQoYmFzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5zaXplIC09IGxhc3RTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBMVENfU01fU1RBVEVfRklOSVNIOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTFRDX1NNX1NUQVRFX0ZJTklTSDoKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYmFzZS0+TUQgPSBoYW5kbGUtPm1vZGVSZWc7CisKKyAgICAgICAgICAgICAgICAvKiBDVFIgZmluYWwgcGhhc2UuKi8KKyAgICAgICAgICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzID09IHJldHZhbCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0ID0gaGFuZGxlLT5pbkRhdGE7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm91dHB1dCA9IGhhbmRsZS0+b3V0RGF0YTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoKGhhbmRsZS0+Y291bnRlcmxhc3QgIT0gTlVMTCkgJiYgKGhhbmRsZS0+bGFzdFNpemUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHplcm9lc1sxNl0gPSB7MH07CisgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV90IG1vZGVSZWc7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVSZWcgPSAodWludDMyX3Qpa0xUQ19BbGdvcml0aG1BRVMgfCAodWludDMyX3Qpa0xUQ19Nb2RlQ1RSIHwgKHVpbnQzMl90KWtMVENfTW9kZUVuY3J5cHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSB0aGUgbW9kZSByZWdpc3RlciB0byB0aGUgaGFyZHdhcmUuICovCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLT5NRCA9IG1vZGVSZWcgfCAodWludDMyX3Qpa0xUQ19Nb2RlRmluYWxpemU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRleHQgaXMgcmUtdXNlZCAoQ1RSaSkgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGEoYmFzZSwgaW5wdXQsIGhhbmRsZS0+bGFzdFNpemUsIG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzID09IHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5zekxlZnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaGFuZGxlLT5zekxlZnQgPSAxNlUgLSBoYW5kbGUtPmxhc3RTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgYWxnb3JpdGhtIHN0YXRlLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZyB8ICh1aW50MzJfdClrTFRDX01vZGVVcGRhdGU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250ZXh0IGlzIHJlLXVzZWQgKENUUmkpICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIGRhdGEgYW5kIHJldHVybiBzdGF0dXMuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGEoYmFzZSwgemVyb2VzLCAxNlUsIGhhbmRsZS0+Y291bnRlcmxhc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgPT0gcmV0dmFsKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZ2V0X2NvbnRleHQoYmFzZSwgJmhhbmRsZS0+Y291bnRlclswXSwgMTZVLCA0VSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIGhhbmRsZSwgcmV0dmFsLCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBleGl0X3NtID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBRVMgQ29kZSBwdWJsaWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXR1c190IExUQ19BRVNfRW5jcnlwdEVjYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplKQoreworICAgIHN0YXR1c190IHJldHZhbDsKKworICAgIGlmICgobHRjX2NoZWNrX2tleV9zaXplKGtleVNpemUpID09IDApIHx8IChzaXplIDwgMTZ1KSB8fAorICAgICAgICAoc2l6ZSAlIDE2dSkpIC8qIEVDQiBtb2RlLCBzaXplIG11c3QgYmUgMTYtYnl0ZSBtdWx0aXBsZSAqLworICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgaGFuZGxlLCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSBhbGdvcml0aG0gc3RhdGUuICovCisgICAgbHRjX3N5bW1ldHJpY191cGRhdGUoYmFzZSwga2V5LCBrZXlTaXplLCBrTFRDX0FsZ29yaXRobUFFUywga0xUQ19Nb2RlRUNCLCBrTFRDX01vZGVFbmNyeXB0KTsKKworICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICBoYW5kbGUtPmluRGF0YSA9ICZwbGFpbnRleHRbMF07CisgICAgaGFuZGxlLT5vdXREYXRhID0gJmNpcGhlcnRleHRbMF07CisgICAgaGFuZGxlLT5zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUtPnN0YXRlID0gTFRDX1NNX1NUQVRFX1NUQVJUOworICAgIGhhbmRsZS0+c3RhdGVfbWFjaGluZSA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnNfRURNQTsKKyAgICByZXR2YWwgPSBoYW5kbGUtPnN0YXRlX21hY2hpbmUoYmFzZSwgaGFuZGxlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0dXNfdCBMVENfQUVTX0RlY3J5cHRFY2JFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2Flc19rZXlfdCBrZXlUeXBlKQoreworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGlmICgobHRjX2NoZWNrX2tleV9zaXplKGtleVNpemUpID09IDApIHx8IChzaXplIDwgMTZ1KSB8fAorICAgICAgICAoc2l6ZSAlIDE2dSkpIC8qIEVDQiBtb2RlLCBzaXplIG11c3QgYmUgMTYtYnl0ZSBtdWx0aXBsZSAqLworICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgaGFuZGxlLCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSBhbGdvcml0aG0gc3RhdGUuICovCisgICAgbHRjX3N5bW1ldHJpY191cGRhdGUoYmFzZSwga2V5LCBrZXlTaXplLCBrTFRDX0FsZ29yaXRobUFFUywga0xUQ19Nb2RlRUNCLCBrTFRDX01vZGVEZWNyeXB0KTsKKworICAgIC8qIHNldCBESyBiaXQgaW4gdGhlIExUQyBNb2RlIFJlZ2lzdGVyIEFBSSBmaWVsZCBmb3IgZGlyZWN0bHkgbG9hZGVkIGRlY3J5cHQga2V5cyAqLworICAgIGlmIChrZXlUeXBlID09IGtMVENfRGVjcnlwdEtleSkKKyAgICB7CisgICAgICAgIGJhc2UtPk1EIHw9ICgxVSA8PCBrTFRDX01vZGVSZWdCaXRTaGlmdERLKTsKKyAgICB9CisKKyAgICAvKiBQcm9jZXNzIGRhdGEgYW5kIHJldHVybiBzdGF0dXMuICovCisgICAgaGFuZGxlLT5pbkRhdGEgPSAmY2lwaGVydGV4dFswXTsKKyAgICBoYW5kbGUtPm91dERhdGEgPSAmcGxhaW50ZXh0WzBdOworICAgIGhhbmRsZS0+c2l6ZSA9IHNpemU7CisgICAgaGFuZGxlLT5zdGF0ZSA9IExUQ19TTV9TVEFURV9TVEFSVDsKKyAgICBoYW5kbGUtPnN0YXRlX21hY2hpbmUgPSBsdGNfcHJvY2Vzc19tZXNzYWdlX2luX3Nlc3Npb25zX0VETUE7CisgICAgc3RhdHVzID0gaGFuZGxlLT5zdGF0ZV9tYWNoaW5lKGJhc2UsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfQUVTX0VuY3J5cHRDYmNFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0FFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplKQoreworICAgIHN0YXR1c190IHJldHZhbDsKKworICAgIGlmICgobHRjX2NoZWNrX2tleV9zaXplKGtleVNpemUpID09IDApIHx8IChzaXplIDwgMTZ1KSB8fAorICAgICAgICAoc2l6ZSAlIDE2dSkpIC8qIENCQyBtb2RlLCBzaXplIG11c3QgYmUgMTYtYnl0ZSBtdWx0aXBsZSAqLworICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgaGFuZGxlLCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSBhbGdvcml0aG0gc3RhdGUuICovCisgICAgbHRjX3N5bW1ldHJpY191cGRhdGUoYmFzZSwga2V5LCBrZXlTaXplLCBrTFRDX0FsZ29yaXRobUFFUywga0xUQ19Nb2RlQ0JDLCBrTFRDX01vZGVFbmNyeXB0KTsKKworICAgIC8qIFdyaXRlIElWIGRhdGEgdG8gdGhlIGNvbnRleHQgcmVnaXN0ZXIuICovCisgICAgbHRjX3NldF9jb250ZXh0KGJhc2UsICZpdlswXSwgTFRDX0FFU19JVl9TSVpFLCAwKTsKKworICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICBoYW5kbGUtPmluRGF0YSA9ICZwbGFpbnRleHRbMF07CisgICAgaGFuZGxlLT5vdXREYXRhID0gJmNpcGhlcnRleHRbMF07CisgICAgaGFuZGxlLT5zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUtPnN0YXRlID0gTFRDX1NNX1NUQVRFX1NUQVJUOworICAgIGhhbmRsZS0+c3RhdGVfbWFjaGluZSA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnNfRURNQTsKKyAgICByZXR2YWwgPSBoYW5kbGUtPnN0YXRlX21hY2hpbmUoYmFzZSwgaGFuZGxlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0dXNfdCBMVENfQUVTX0RlY3J5cHRDYmNFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0FFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWVzX2tleV90IGtleVR5cGUpCit7CisgICAgc3RhdHVzX3QgcmV0dmFsOworCisgICAgaWYgKChsdGNfY2hlY2tfa2V5X3NpemUoa2V5U2l6ZSkgPT0gMCkgfHwgKHNpemUgPCAxNnUpIHx8CisgICAgICAgIChzaXplICUgMTZ1KSkgLyogQ0JDIG1vZGUsIHNpemUgbXVzdCBiZSAxNi1ieXRlIG11bHRpcGxlICovCisgICAgeworICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50LCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBzZXQgREsgYml0IGluIHRoZSBMVEMgTW9kZSBSZWdpc3RlciBBQUkgZmllbGQgZm9yIGRpcmVjdGx5IGxvYWRlZCBkZWNyeXB0IGtleXMgKi8KKyAgICBpZiAoa2V5VHlwZSA9PSBrTFRDX0RlY3J5cHRLZXkpCisgICAgeworICAgICAgICBiYXNlLT5NRCB8PSAoMVUgPDwga0xUQ19Nb2RlUmVnQml0U2hpZnRESyk7CisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSBhbGdvcml0aG0gc3RhdGUuICovCisgICAgbHRjX3N5bW1ldHJpY191cGRhdGUoYmFzZSwga2V5LCBrZXlTaXplLCBrTFRDX0FsZ29yaXRobUFFUywga0xUQ19Nb2RlQ0JDLCBrTFRDX01vZGVEZWNyeXB0KTsKKworICAgIC8qIFdyaXRlIElWIGRhdGEgdG8gdGhlIGNvbnRleHQgcmVnaXN0ZXIuICovCisgICAgbHRjX3NldF9jb250ZXh0KGJhc2UsICZpdlswXSwgTFRDX0FFU19JVl9TSVpFLCAwKTsKKworICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICBoYW5kbGUtPmluRGF0YSA9ICZjaXBoZXJ0ZXh0WzBdOworICAgIGhhbmRsZS0+b3V0RGF0YSA9ICZwbGFpbnRleHRbMF07CisgICAgaGFuZGxlLT5zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUtPnN0YXRlID0gTFRDX1NNX1NUQVRFX1NUQVJUOworICAgIGhhbmRsZS0+c3RhdGVfbWFjaGluZSA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnNfRURNQTsKKyAgICByZXR2YWwgPSBoYW5kbGUtPnN0YXRlX21hY2hpbmUoYmFzZSwgaGFuZGxlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0dXNfdCBMVENfQUVTX0NyeXB0Q3RyRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGNvdW50ZXJbTFRDX0FFU19CTE9DS19TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGNvdW50ZXJsYXN0W0xUQ19BRVNfQkxPQ0tfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqc3pMZWZ0KQoreworICAgIHN0YXR1c190IHJldHZhbDsKKyAgICB1aW50MzJfdCBsYXN0U2l6ZTsKKworICAgIGlmICghbHRjX2NoZWNrX2tleV9zaXplKGtleVNpemUpKQorICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgaGFuZGxlLCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGxhc3RTaXplID0gMFU7CisgICAgaWYgKGNvdW50ZXJsYXN0ICE9IE5VTEwpCisgICAgeworICAgICAgICAvKiBTcGxpdCB0aGUgc2l6ZSBpbnRvIGZ1bGwgMTYtYnl0ZSBjaHVua3MgYW5kIGxhc3QgaW5jb21wbGV0ZSBibG9jayBkdWUgdG8gTFRDIEFFUyBPRklGTyBlcnJhdGEgKi8KKyAgICAgICAgaWYgKHNpemUgPD0gMTZVKQorICAgICAgICB7CisgICAgICAgICAgICBsYXN0U2l6ZSA9IHNpemU7CisgICAgICAgICAgICBzaXplID0gMFU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBQcm9jZXNzIGFsbCAxNi1ieXRlIGRhdGEgY2h1bmtzLiAqLworICAgICAgICAgICAgbGFzdFNpemUgPSBzaXplICUgMTZVOworICAgICAgICAgICAgaWYgKGxhc3RTaXplID09IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxhc3RTaXplID0gMTZVOworICAgICAgICAgICAgICAgIHNpemUgLT0gMTZVOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNpemUgLT0gbGFzdFNpemU7IC8qIHNpemUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gMTYgYnl0ZSBib3VuZGFyeS4gcmVtYWluaW5nIGJ5dGVzIGluIGxhc3RTaXplICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVDVFIsIGtMVENfTW9kZUVuY3J5cHQpOworCisgICAgLyogV3JpdGUgaW5pdGlhbCBjb3VudGVyIGRhdGEgdG8gdGhlIGNvbnRleHQgcmVnaXN0ZXIuCisgICAgICogTk9URSB0aGUgY291bnRlciB2YWx1ZXMgc3RhcnQgYXQgNC1ieXRlcyBvZmZzZXQgaW50byB0aGUgY29udGV4dC4gKi8KKyAgICBsdGNfc2V0X2NvbnRleHQoYmFzZSwgJmNvdW50ZXJbMF0sIDE2VSwgNFUpOworCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIGhhbmRsZS0+aW5EYXRhID0gJmlucHV0WzBdOworICAgIGhhbmRsZS0+b3V0RGF0YSA9ICZvdXRwdXRbMF07CisgICAgaGFuZGxlLT5zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUtPnN0YXRlID0gTFRDX1NNX1NUQVRFX1NUQVJUOworICAgIGhhbmRsZS0+c3RhdGVfbWFjaGluZSA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnNfY3RyX0VETUE7CisKKyAgICBoYW5kbGUtPmNvdW50ZXIgPSBjb3VudGVyOworICAgIGhhbmRsZS0+a2V5ID0ga2V5OworICAgIGhhbmRsZS0+a2V5U2l6ZSA9IGtleVNpemU7CisgICAgaGFuZGxlLT5jb3VudGVybGFzdCA9IGNvdW50ZXJsYXN0OworICAgIGhhbmRsZS0+c3pMZWZ0ID0gc3pMZWZ0OworICAgIGhhbmRsZS0+bGFzdFNpemUgPSBsYXN0U2l6ZTsKKyAgICByZXR2YWwgPSBoYW5kbGUtPnN0YXRlX21hY2hpbmUoYmFzZSwgaGFuZGxlKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0RFUworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERFUyAvIDNERVMgQ29kZSBzdGF0aWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RhdHVzX3QgbHRjX2Rlc19wcm9jZXNzX0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfc3ltbWV0cmljX2FsZ190IG1vZGVBcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9lbmNyeXB0X3QgbW9kZUVuYykKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7CisKKyAgICAvKiBhbGwgYnV0IE9GQiwgc2l6ZSBtdXN0IGJlIDgtYnl0ZSBtdWx0aXBsZSAqLworICAgIGlmICgobW9kZUFzICE9IGtMVENfTW9kZU9GQikgJiYgKChzaXplIDwgOHUpIHx8IChzaXplICUgOHUpKSkKKyAgICB7CisgICAgICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIGhhbmRsZSwga1N0YXR1c19JbnZhbGlkQXJndW1lbnQsIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCAma2V5WzBdLCBMVENfREVTX0tFWV9TSVpFLCBrTFRDX0FsZ29yaXRobURFUywgbW9kZUFzLCBtb2RlRW5jKTsKKworICAgIGlmICgobW9kZUFzICE9IGtMVENfTW9kZUVDQikpCisgICAgeworICAgICAgICBsdGNfc2V0X2NvbnRleHQoYmFzZSwgaXYsIExUQ19ERVNfSVZfU0laRSwgMCk7CisgICAgfQorCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIGhhbmRsZS0+aW5EYXRhID0gaW5wdXQ7CisgICAgaGFuZGxlLT5vdXREYXRhID0gb3V0cHV0OworICAgIGhhbmRsZS0+c2l6ZSA9IHNpemU7CisgICAgaGFuZGxlLT5zdGF0ZSA9IExUQ19TTV9TVEFURV9TVEFSVDsKKyAgICBoYW5kbGUtPnN0YXRlX21hY2hpbmUgPSBsdGNfcHJvY2Vzc19tZXNzYWdlX2luX3Nlc3Npb25zX0VETUE7CisgICAgcmV0dmFsID0gaGFuZGxlLT5zdGF0ZV9tYWNoaW5lKGJhc2UsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RhdHVzX3QgbHRjXzNkZXNfcHJvY2Vzc19FRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX3N5bW1ldHJpY19hbGdfdCBtb2RlQXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX2VuY3J5cHRfdCBtb2RlRW5jKQoreworICAgIHN0YXR1c190IHJldHZhbDsKKyAgICB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFICogM107CisgICAgdWludDhfdCBrZXlTaXplID0gTFRDX0RFU19LRVlfU0laRSAqIDI7CisKKyAgICByZXR2YWwgPSBsdGNfM2Rlc19jaGVja19pbnB1dF9hcmdzKG1vZGVBcywgc2l6ZSwga2V5MSwga2V5Mik7CisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgeworICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50LCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0dmFsOworICAgIH0KKworICAgIGx0Y19tZW1jcHkoJmtleVswXSwgJmtleTFbMF0sIExUQ19ERVNfS0VZX1NJWkUpOworICAgIGx0Y19tZW1jcHkoJmtleVtMVENfREVTX0tFWV9TSVpFXSwgJmtleTJbMF0sIExUQ19ERVNfS0VZX1NJWkUpOworICAgIGlmIChrZXkzKQorICAgIHsKKyAgICAgICAgbHRjX21lbWNweSgma2V5W0xUQ19ERVNfS0VZX1NJWkUgKiAyXSwgJmtleTNbMF0sIExUQ19ERVNfS0VZX1NJWkUpOworICAgICAgICBrZXlTaXplID0gc2l6ZW9mKGtleSk7CisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSBhbGdvcml0aG0gc3RhdGUuICovCisgICAgbHRjX3N5bW1ldHJpY191cGRhdGUoYmFzZSwgJmtleVswXSwga2V5U2l6ZSwga0xUQ19BbGdvcml0aG0zREVTLCBtb2RlQXMsIG1vZGVFbmMpOworCisgICAgaWYgKChtb2RlQXMgIT0ga0xUQ19Nb2RlRUNCKSkKKyAgICB7CisgICAgICAgIGx0Y19zZXRfY29udGV4dChiYXNlLCBpdiwgTFRDX0RFU19JVl9TSVpFLCAwKTsKKyAgICB9CisKKyAgICAvKiBQcm9jZXNzIGRhdGEgYW5kIHJldHVybiBzdGF0dXMuICovCisgICAgaGFuZGxlLT5pbkRhdGEgPSBpbnB1dDsKKyAgICBoYW5kbGUtPm91dERhdGEgPSBvdXRwdXQ7CisgICAgaGFuZGxlLT5zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUtPnN0YXRlID0gTFRDX1NNX1NUQVRFX1NUQVJUOworICAgIGhhbmRsZS0+c3RhdGVfbWFjaGluZSA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnNfRURNQTsKKyAgICByZXR2YWwgPSBoYW5kbGUtPnN0YXRlX21hY2hpbmUoYmFzZSwgaGFuZGxlKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogREVTIC8gM0RFUyBDb2RlIHB1YmxpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXR1c190IExUQ19ERVNfRW5jcnlwdEVjYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y19kZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBOVUxMLCBrZXksIGtMVENfTW9kZUVDQiwga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdEVjYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y19kZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBOVUxMLCBrZXksIGtMVENfTW9kZUVDQiwga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRW5jcnlwdENiY0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXksIGtMVENfTW9kZUNCQywga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdENiY0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXksIGtMVENfTW9kZUNCQywga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRW5jcnlwdENmYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXksIGtMVENfTW9kZUNGQiwga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdENmYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXksIGtMVENfTW9kZUNGQiwga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRW5jcnlwdE9mYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXksIGtMVENfTW9kZU9GQiwga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdE9mYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXksIGtMVENfTW9kZU9GQiwga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMyX0VuY3J5cHRFY2JFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIE5VTEwsIGtleTEsIGtleTIsIE5VTEwsIGtMVENfTW9kZUVDQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTM19FbmNyeXB0RWNiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBOVUxMLCBrZXkxLCBrZXkyLCBrZXkzLCBrTFRDX01vZGVFQ0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRGVjcnlwdEVjYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgTlVMTCwga2V5MSwga2V5MiwgTlVMTCwga0xUQ19Nb2RlRUNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRFY2JFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIE5VTEwsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZUVDQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTMl9FbmNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5MiwgTlVMTCwga0xUQ19Nb2RlQ0JDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0VuY3J5cHRDYmNFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBrZXkzLCBrTFRDX01vZGVDQkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRGVjcnlwdENiY0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIE5VTEwsIGtMVENfTW9kZUNCQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTM19EZWNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5Miwga2V5Mywga0xUQ19Nb2RlQ0JDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMyX0VuY3J5cHRDZmJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBOVUxMLCBrTFRDX01vZGVDRkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdENmYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZUNGQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTMl9EZWNyeXB0Q2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5MiwgTlVMTCwga0xUQ19Nb2RlQ0ZCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRDZmJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBrZXkzLCBrTFRDX01vZGVDRkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdE9mYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIE5VTEwsIGtMVENfTW9kZU9GQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTM19FbmNyeXB0T2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5Miwga2V5Mywga0xUQ19Nb2RlT0ZCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRPZmJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBOVUxMLCBrTFRDX01vZGVPRkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzNfRGVjcnlwdE9mYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZU9GQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfTW9kZURlY3J5cHQpOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiBMVEMgRURNQSB0b29scyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1aW50MzJfdCBMVENfR2V0SW5zdGFuY2UoTFRDX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgaW5zdGFuY2UgPSAwOworICAgIHVpbnQzMl90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgRlNMX0ZFQVRVUkVfU09DX0xUQ19DT1VOVDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfbHRjQmFzZVtpbnN0YW5jZV0gPT0gYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5zdGFuY2UgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisvKiEKKyAqIEBicmllZiBFbmFibGUgb3IgZGlzYWJsZSBMVEMgSW5wdXQgRklGTyBETUEgcmVxdWVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgRE1BIHJlcXVlc3QgYW5kIGRvbmUgc2lnbmFscyBmb3IgSW5wdXQgRklGTy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZW5hYmxlIFRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgTFRDX0VuYWJsZUlucHV0Rmlmb0RNQShMVENfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkNUTCB8PSBMVENfQ1RMX0lGRV9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5DVEwgJj0gfkxUQ19DVExfSUZFX01BU0s7CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBFbmFibGUgb3IgZGlzYWJsZSBMVEMgT3V0cHV0IEZJRk8gRE1BIHJlcXVlc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIERNQSByZXF1ZXN0IGFuZCBkb25lIHNpZ25hbHMgZm9yIE91dHB1dCBGSUZPLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgVHJ1ZSB0byBlbmFibGUsIGZhbHNlIHRvIGRpc2FibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMVENfRW5hYmxlT3V0cHV0Rmlmb0RNQShMVENfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkNUTCB8PSBMVENfQ1RMX09GRV9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5DVEwgJj0gfkxUQ19DVExfT0ZFX01BU0s7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBMVENfSW5wdXRGaWZvRURNQUNhbGxiYWNrKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqcGFyYW0sIGJvb2wgdHJhbnNmZXJEb25lLCB1aW50MzJfdCB0Y2RzKQoreworICAgIGx0Y19lZG1hX3ByaXZhdGVfaGFuZGxlX3QgKmx0Y1ByaXZhdGVIYW5kbGUgPSAobHRjX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqKXBhcmFtOworCisgICAgLyogQXZvaWQgdGhlIHdhcm5pbmcgZm9yIHVudXNlZCB2YXJpYWJsZXMuICovCisgICAgaGFuZGxlID0gaGFuZGxlOworICAgIHRjZHMgPSB0Y2RzOworCisgICAgaWYgKHRyYW5zZmVyRG9uZSkKKyAgICB7CisgICAgICAgIC8qIFN0b3AgRE1BIGNoYW5uZWwuICovCisgICAgICAgIEVETUFfU3RvcFRyYW5zZmVyKGx0Y1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+aW5wdXRGaWZvRWRtYUhhbmRsZSk7CisKKyAgICAgICAgLyogRGlzYWJsZSBJbnB1dCBGaWZvIERNQSAqLworICAgICAgICBMVENfRW5hYmxlSW5wdXRGaWZvRE1BKGx0Y1ByaXZhdGVIYW5kbGUtPmJhc2UsIGZhbHNlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIExUQ19PdXRwdXRGaWZvRURNQUNhbGxiYWNrKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqcGFyYW0sIGJvb2wgdHJhbnNmZXJEb25lLCB1aW50MzJfdCB0Y2RzKQoreworICAgIGx0Y19lZG1hX3ByaXZhdGVfaGFuZGxlX3QgKmx0Y1ByaXZhdGVIYW5kbGUgPSAobHRjX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqKXBhcmFtOworCisgICAgLyogQXZvaWQgdGhlIHdhcm5pbmcgZm9yIHVudXNlZCB2YXJpYWJsZXMuICovCisgICAgaGFuZGxlID0gaGFuZGxlOworICAgIHRjZHMgPSB0Y2RzOworCisgICAgaWYgKHRyYW5zZmVyRG9uZSkKKyAgICB7CisgICAgICAgIC8qIFN0b3AgRE1BIGNoYW5uZWwuICovCisgICAgICAgIEVETUFfU3RvcFRyYW5zZmVyKGx0Y1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+b3V0cHV0Rmlmb0VkbWFIYW5kbGUpOworCisgICAgICAgIC8qIERpc2FibGUgT3V0cHV0IEZpZm8gRE1BICovCisgICAgICAgIExUQ19FbmFibGVPdXRwdXRGaWZvRE1BKGx0Y1ByaXZhdGVIYW5kbGUtPmJhc2UsIGZhbHNlKTsKKworICAgICAgICBpZiAobHRjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT5zdGF0ZV9tYWNoaW5lKQorICAgICAgICB7CisgICAgICAgICAgICBsdGNQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnN0YXRlX21hY2hpbmUobHRjUHJpdmF0ZUhhbmRsZS0+YmFzZSwgbHRjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogQGJyaWVmIENvcHkgZGF0YSB0byBJbnB1dCBGSUZPIGFuZCByZWFkaW5nIGZyb20gT3VwdXQgRklGTyB1c2luZyBlRE1BLiAqLworc3RhdGljIHZvaWQgbHRjX3N5bW1ldHJpY19wcm9jZXNzX0VETUEoTFRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGluU2l6ZSwgY29uc3QgdWludDhfdCAqKmluRGF0YSwgdWludDhfdCAqKm91dERhdGEpCit7CisgICAgY29uc3QgdWludDhfdCAqaW4gPSAqaW5EYXRhOworICAgIHVpbnQ4X3QgKm91dCA9ICpvdXREYXRhOworICAgIHVpbnQzMl90IGluc3RhbmNlID0gTFRDX0dldEluc3RhbmNlKGJhc2UpOworICAgIHVpbnQzMl90IGVudHJ5X251bWJlciA9IGluU2l6ZSAvIHNpemVvZih1aW50MzJfdCk7CisgICAgY29uc3QgdWludDhfdCAqaW5wdXRCdWZmZXIgPSAqaW5EYXRhOworICAgIHVpbnQ4X3QgKm91dHB1dEJ1ZmZlciA9ICpvdXREYXRhOworICAgIGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgY29uZmlnOworCisgICAgaWYgKGVudHJ5X251bWJlcikKKyAgICB7CisgICAgICAgIC8qID09PT09PT09PT09IEluaXQgSW5wdXQgRklGTyBETUEgPT09PT09PT09PT09PT09PT09PT09PSovCisgICAgICAgIG1lbXNldCgmY29uZmlnLCAwLCBzaXplb2YoY29uZmlnKSk7CisKKyAgICAgICAgLyogUHJlcGFyZSB0cmFuc2Zlci4gKi8KKyAgICAgICAgRURNQV9QcmVwYXJlVHJhbnNmZXIoJmNvbmZpZywgKHZvaWQgKilpbnB1dEJ1ZmZlciwgMSwgKHZvaWQgKikoJigoYmFzZSktPklGSUZPKSksIDRVLCA0VSwgZW50cnlfbnVtYmVyICogNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0VETUFfTWVtb3J5VG9QZXJpcGhlcmFsKTsKKyAgICAgICAgLyogU3VibWl0IHRyYW5zZmVyLiAqLworICAgICAgICBFRE1BX1N1Ym1pdFRyYW5zZmVyKHNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmhhbmRsZS0+aW5wdXRGaWZvRWRtYUhhbmRsZSwgJmNvbmZpZyk7CisKKyAgICAgICAgLyogU2V0IHJlcXVlc3Qgc2l6ZS4qLworICAgICAgICBiYXNlLT5DVEwgJj0gfkxUQ19DVExfSUZSX01BU0s7IC8qIDEgZW50cnkgKi8KKyAgICAgICAgLyogRW5hYmxlIElucHV0IEZpZm8gRE1BICovCisgICAgICAgIExUQ19FbmFibGVJbnB1dEZpZm9ETUEoYmFzZSwgdHJ1ZSk7CisKKyAgICAgICAgLyogU3RhcnQgdGhlIERNQSBjaGFubmVsICovCisgICAgICAgIEVETUFfU3RhcnRUcmFuc2ZlcihzX2VkbWFQcml2YXRlSGFuZGxlW2luc3RhbmNlXS5oYW5kbGUtPmlucHV0Rmlmb0VkbWFIYW5kbGUpOworCisgICAgICAgIC8qID09PT09PT09PT09IEluaXQgT3V0cHV0IEZJRk8gRE1BID09PT09PT09PT09PT09PT09PT09PT0qLworICAgICAgICBtZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKGNvbmZpZykpOworCisgICAgICAgIC8qIFByZXBhcmUgdHJhbnNmZXIuICovCisgICAgICAgIEVETUFfUHJlcGFyZVRyYW5zZmVyKCZjb25maWcsICh2b2lkICopKCYoKGJhc2UpLT5PRklGTykpLCA0VSwgKHZvaWQgKilvdXRwdXRCdWZmZXIsIDFVLCA0VSwgZW50cnlfbnVtYmVyICogNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0VETUFfUGVyaXBoZXJhbFRvTWVtb3J5KTsKKyAgICAgICAgLyogU3VibWl0IHRyYW5zZmVyLiAqLworICAgICAgICBFRE1BX1N1Ym1pdFRyYW5zZmVyKHNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmhhbmRsZS0+b3V0cHV0Rmlmb0VkbWFIYW5kbGUsICZjb25maWcpOworCisgICAgICAgIC8qIFNldCByZXF1ZXN0IHNpemUuKi8KKyAgICAgICAgYmFzZS0+Q1RMICY9IH5MVENfQ1RMX09GUl9NQVNLOyAvKiAxIGVudHJ5ICovCisKKyAgICAgICAgLyogRW5hYmxlIE91dHB1dCBGaWZvIERNQSAqLworICAgICAgICBMVENfRW5hYmxlT3V0cHV0Rmlmb0RNQShiYXNlLCB0cnVlKTsKKworICAgICAgICAvKiBTdGFydCB0aGUgRE1BIGNoYW5uZWwgKi8KKyAgICAgICAgRURNQV9TdGFydFRyYW5zZmVyKHNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmhhbmRsZS0+b3V0cHV0Rmlmb0VkbWFIYW5kbGUpOworCisgICAgICAgIHsgLyogRHVtbXkgcmVhZCBvZiBMVEMgcmVnaXN0ZXIuIERvIG5vdCBkZWxldGUuKi8KKyAgICAgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IHN0YXR1c19yZWc7CisKKyAgICAgICAgICAgIHN0YXR1c19yZWcgPSAoYmFzZSktPlNUQTsKKworICAgICAgICAgICAgKHZvaWQpc3RhdHVzX3JlZzsKKyAgICAgICAgfQorCisgICAgICAgIG91dCArPSBlbnRyeV9udW1iZXIgKiBzaXplb2YodWludDMyX3QpOworICAgICAgICBpbiArPSBlbnRyeV9udW1iZXIgKiBzaXplb2YodWludDMyX3QpOworCisgICAgICAgICppbkRhdGEgPSBpbjsKKyAgICAgICAgKm91dERhdGEgPSBvdXQ7CisgICAgfQorfQorCit2b2lkIExUQ19DcmVhdGVIYW5kbGVFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqaW5wdXRGaWZvRWRtYUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqb3V0cHV0Rmlmb0VkbWFIYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KGlucHV0Rmlmb0VkbWFIYW5kbGUpOworICAgIGFzc2VydChvdXRwdXRGaWZvRWRtYUhhbmRsZSk7CisKKyAgICB1aW50MzJfdCBpbnN0YW5jZSA9IExUQ19HZXRJbnN0YW5jZShiYXNlKTsKKworICAgIHNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmJhc2UgPSBiYXNlOworICAgIHNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmhhbmRsZSA9IGhhbmRsZTsKKworICAgIG1lbXNldChoYW5kbGUsIDAsIHNpemVvZigqaGFuZGxlKSk7CisKKyAgICBoYW5kbGUtPmlucHV0Rmlmb0VkbWFIYW5kbGUgPSBpbnB1dEZpZm9FZG1hSGFuZGxlOworICAgIGhhbmRsZS0+b3V0cHV0Rmlmb0VkbWFIYW5kbGUgPSBvdXRwdXRGaWZvRWRtYUhhbmRsZTsKKworICAgIGhhbmRsZS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBoYW5kbGUtPnVzZXJEYXRhID0gdXNlckRhdGE7CisKKyAgICAvKiBSZWdpc3RlciBETUEgY2FsbGJhY2sgZnVuY3Rpb25zICovCisgICAgRURNQV9TZXRDYWxsYmFjayhoYW5kbGUtPmlucHV0Rmlmb0VkbWFIYW5kbGUsIExUQ19JbnB1dEZpZm9FRE1BQ2FsbGJhY2ssICZzX2VkbWFQcml2YXRlSGFuZGxlW2luc3RhbmNlXSk7CisgICAgRURNQV9TZXRDYWxsYmFjayhoYW5kbGUtPm91dHB1dEZpZm9FZG1hSGFuZGxlLCBMVENfT3V0cHV0Rmlmb0VETUFDYWxsYmFjaywgJnNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdKTsKKworICAgIC8qIFNldCByZXF1ZXN0IHNpemUuIERNQSByZXF1ZXN0IHNpemUgaXMgMSBlbnRyeS4qLworICAgIGJhc2UtPkNUTCAmPSB+TFRDX0NUTF9JRlJfTUFTSzsKKyAgICBiYXNlLT5DVEwgJj0gfkxUQ19DVExfT0ZSX01BU0s7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sdGNfZWRtYS5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHRjX2VkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTMzMDZjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHRjX2VkbWEuaApAQCAtMCwwICsxLDg1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfTFRDX0VETUFfSF8KKyNkZWZpbmUgX0ZTTF9MVENfRURNQV9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisjaW5jbHVkZSAiZnNsX2x0Yy5oIgorI2luY2x1ZGUgImZzbF9kbWFtdXguaCIKKyNpbmNsdWRlICJmc2xfZWRtYS5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGx0Y19lZG1hX2RyaXZlcgorICogQHsKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEBicmllZiBUaGUgTFRDIGVETUEgaGFuZGxlIHR5cGUuICovCit0eXBlZGVmIHN0cnVjdCBfbHRjX2VkbWFfaGFuZGxlIGx0Y19lZG1hX2hhbmRsZV90OworCisvKiEgQGJyaWVmIExUQyBlRE1BIGNhbGxiYWNrIGZ1bmN0aW9uLiAqLwordHlwZWRlZiB2b2lkICgqbHRjX2VkbWFfY2FsbGJhY2tfdCkoTFRDX1R5cGUgKmJhc2UsIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsIHN0YXR1c190IHN0YXR1cywgdm9pZCAqdXNlckRhdGEpOworCisvKiEgQGJyaWVmIExUQyBlRE1BIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb24uIEl0IGlzIGRlZmluZWQgb25seSBmb3IgcHJpdmF0ZSB1c2FnZSBpbnNpZGUgTFRDIGVETUEgZHJpdmVyLiAqLwordHlwZWRlZiBzdGF0dXNfdCAoKmx0Y19lZG1hX3N0YXRlX21hY2hpbmVfdCkoTFRDX1R5cGUgKmJhc2UsIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyogQGJyaWVmIExUQyBlRE1BIGhhbmRsZS4gSXQgaXMgZGVmaW5lZCBvbmx5IGZvciBwcml2YXRlIHVzYWdlIGluc2lkZSBMVEMgZURNQSBkcml2ZXIuCisqLworc3RydWN0IF9sdGNfZWRtYV9oYW5kbGUKK3sKKyAgICBsdGNfZWRtYV9jYWxsYmFja190IGNhbGxiYWNrOyAvKiE8IENhbGxiYWNrIGZ1bmN0aW9uLiAqLworICAgIHZvaWQgKnVzZXJEYXRhOyAgICAgICAgICAgICAgIC8qITwgTFRDIGNhbGxiYWNrIGZ1bmN0aW9uIHBhcmFtZXRlci4qLworCisgICAgZWRtYV9oYW5kbGVfdCAqaW5wdXRGaWZvRWRtYUhhbmRsZTsgIC8qITwgVGhlIGVETUEgVFggY2hhbm5lbCB1c2VkLiAqLworICAgIGVkbWFfaGFuZGxlX3QgKm91dHB1dEZpZm9FZG1hSGFuZGxlOyAvKiE8IFRoZSBlRE1BIFJYIGNoYW5uZWwgdXNlZC4gKi8KKworICAgIGx0Y19lZG1hX3N0YXRlX21hY2hpbmVfdCBzdGF0ZV9tYWNoaW5lOyAvKiE8IFN0YXRlIG1hY2hpbmUuICovCisgICAgdWludDMyX3Qgc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSW50ZXJuYWwgc3RhdGUuICovCisgICAgY29uc3QgdWludDhfdCAqaW5EYXRhOyAgICAgICAgICAgICAgICAgIC8qITwgSW5wdXQgZGF0YS4gKi8KKyAgICB1aW50OF90ICpvdXREYXRhOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPdXRwdXQgZGF0YS4gKi8KKyAgICB1aW50MzJfdCBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4qLworICAgIHVpbnQzMl90IG1vZGVSZWc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IExUQyBtb2RlIHJlZ2lzdGVyLiovCisgICAgLyogVXNlZCBieSBBRVMgQ1RSKi8KKyAgICB1aW50OF90ICpjb3VudGVyOyAgIC8qITwgSW5wdXQgY291bnRlciAodXBkYXRlcyBvbiByZXR1cm4pKi8KKyAgICBjb25zdCB1aW50OF90ICprZXk7IC8qITwgSW5wdXQga2V5IHRvIHVzZSBmb3IgZm9yd2FyZCBBRVMgY2lwaGVyKi8KKyAgICB1aW50MzJfdCBrZXlTaXplOyAgIC8qITwgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSAxNiwgMjQsIG9yIDMyLiovCisgICAgdWludDhfdAorICAgICAgICAqY291bnRlcmxhc3Q7IC8qITwgT3V0cHV0IGNpcGhlciBvZiBsYXN0IGNvdW50ZXIsIGZvciBjaGFpbmVkIENUUiBjYWxscy4gTlVMTCBjYW4gYmUgcGFzc2VkIGlmIGNoYWluZWQgY2FsbHMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHVzZWQuKi8KKyAgICB1aW50MzJfdCAqc3pMZWZ0OyAvKiE8IE91dHB1dCBudW1iZXIgb2YgYnl0ZXMgaW4gbGVmdCB1bnVzZWQgaW4gY291bnRlcmxhc3QgYmxvY2suIE5VTEwgY2FuIGJlIHBhc3NlZCBpZiBjaGFpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbHMgYXJlIG5vdCB1c2VkLiovCisgICAgdWludDMyX3QgbGFzdFNpemU7IC8qITwgTGFzdCBzaXplLiovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQGJyaWVmIEluaXQgdGhlIExUQyBlRE1BIGhhbmRsZSB3aGljaCBpcyB1c2VkIGluIHRyYW5zY2F0aW9uYWwgZnVuY3Rpb25zCisgKiBAcGFyYW0gYmFzZSAgICAgIExUQyBtb2R1bGUgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlICAgIFBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlCisgKiBAcGFyYW0gY2FsbGJhY2sgIENhbGxiYWNrIGZ1bmN0aW9uLCBOVUxMIG1lYW5zIG5vIGNhbGxiYWNrLgorICogQHBhcmFtIHVzZXJEYXRhICBDYWxsYmFjayBmdW5jdGlvbiBwYXJhbWV0ZXIuCisgKiBAcGFyYW0gaW5wdXRGaWZvRWRtYUhhbmRsZSBVc2VyIHJlcXVlc3RlZCBlRE1BIGhhbmRsZSBmb3IgSW5wdXQgRklGTyBlRE1BLgorICogQHBhcmFtIG91dHB1dEZpZm9FZG1hSGFuZGxlIFVzZXIgcmVxdWVzdGVkIGVETUEgaGFuZGxlIGZvciBPdXRwdXQgRklGTyBlRE1BLgorICovCit2b2lkIExUQ19DcmVhdGVIYW5kbGVFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqaW5wdXRGaWZvRWRtYUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqb3V0cHV0Rmlmb0VkbWFIYW5kbGUpOworCisvKiEgQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQUVTIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBsdGNfZWRtYV9kcml2ZXJfYWVzCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIEFFUyB1c2luZyB0aGUgRUNCIGJsb2NrIG1vZGUuCisgKgorICogRW5jcnlwdHMgQUVTIHVzaW5nIHRoZSBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW4gdGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXIgdGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0FFU19FbmNyeXB0RWNiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUpOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyBBRVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUuCisgKgorICogRGVjcnlwdHMgQUVTIHVzaW5nIEVDQiBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVyIHRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbiB0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiAxNiBieXRlcy4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5LgorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSAxNiwgMjQsIG9yIDMyLgorICogQHBhcmFtIGtleVR5cGUgSW5wdXQgdHlwZSBvZiB0aGUga2V5IChhbGxvd3MgdG8gZGlyZWN0bHkgbG9hZCBkZWNyeXB0IGtleSBmb3IgQUVTIEVDQiBkZWNyeXB0IG9wZXJhdGlvbi4pCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGRlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19BRVNfRGVjcnlwdEVjYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWVzX2tleV90IGtleVR5cGUpOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyBBRVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWluIHRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVyIHRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDE2IGJ5dGVzLgorICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yIHRvIGNvbWJpbmUgd2l0aCB0aGUgZmlyc3QgaW5wdXQgYmxvY2suCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0FFU19FbmNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19BRVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIEFFUyB1c2luZyBDQkMgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlciB0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW4gdGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCB2ZWN0b3IgdG8gY29tYmluZSB3aXRoIHRoZSBmaXJzdCBpbnB1dCBibG9jay4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZGVjcnlwdGlvbgorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSAxNiwgMjQsIG9yIDMyLgorICogQHBhcmFtIGtleVR5cGUgSW5wdXQgdHlwZSBvZiB0aGUga2V5IChhbGxvd3MgdG8gZGlyZWN0bHkgbG9hZCBkZWNyeXB0IGtleSBmb3IgQUVTIENCQyBkZWNyeXB0IG9wZXJhdGlvbi4pCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGRlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19BRVNfRGVjcnlwdENiY0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfQUVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hZXNfa2V5X3Qga2V5VHlwZSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIG9yIGRlY3J5cHRzIEFFUyB1c2luZyBDVFIgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBvciBkZWNyeXB0cyBBRVMgdXNpbmcgQ1RSIGJsb2NrIG1vZGUuCisgKiBBRVMgQ1RSIG1vZGUgdXNlcyBvbmx5IGZvcndhcmQgQUVTIGNpcGhlciBhbmQgc2FtZSBhbGdvcml0aG0gZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uCisgKiBUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBpcyB0aGF0LCBmb3IgZW5jcnlwdGlvbiwgdGhlIGlucHV0IGFyZ3VtZW50CisgKiBpcyBwbGFpbiB0ZXh0IGFuZCB0aGUgb3V0cHV0IGFyZ3VtZW50IGlzIGNpcGhlciB0ZXh0LiBGb3IgZGVjcnlwdGlvbiwgdGhlIGlucHV0IGFyZ3VtZW50IGlzIGNpcGhlciB0ZXh0CisgKiBhbmQgdGhlIG91dHB1dCBhcmd1bWVudCBpcyBwbGFpbiB0ZXh0LgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIGlucHV0IElucHV0IGRhdGEgZm9yIENUUiBibG9jayBtb2RlCisgKiBAcGFyYW1bb3V0XSBvdXRwdXQgT3V0cHV0IGRhdGEgZm9yIENUUiBibG9jayBtb2RlCisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtW2luLG91dF0gY291bnRlciBJbnB1dCBjb3VudGVyICh1cGRhdGVzIG9uIHJldHVybikKKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZm9yd2FyZCBBRVMgY2lwaGVyCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDE2LCAyNCwgb3IgMzIuCisgKiBAcGFyYW1bb3V0XSBjb3VudGVybGFzdCBPdXRwdXQgY2lwaGVyIG9mIGxhc3QgY291bnRlciwgZm9yIGNoYWluZWQgQ1RSIGNhbGxzLiBOVUxMIGNhbiBiZSBwYXNzZWQgaWYgY2hhaW5lZCBjYWxscyBhcmUKKyAqIG5vdCB1c2VkLgorICogQHBhcmFtW291dF0gc3pMZWZ0IE91dHB1dCBudW1iZXIgb2YgYnl0ZXMgaW4gbGVmdCB1bnVzZWQgaW4gY291bnRlcmxhc3QgYmxvY2suIE5VTEwgY2FuIGJlIHBhc3NlZCBpZiBjaGFpbmVkIGNhbGxzCisgKiBhcmUgbm90IHVzZWQuCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19BRVNfQ3J5cHRDdHJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY291bnRlcltMVENfQUVTX0JMT0NLX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY291bnRlcmxhc3RbTFRDX0FFU19CTE9DS19TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpzekxlZnQpOworCisvKiEgQUVTIENUUiBkZWNyeXB0IGlzIG1hcHBlZCB0byB0aGUgQUVTIENUUiBnZW5lcmljIG9wZXJhdGlvbiAqLworI2RlZmluZSBMVENfQUVTX0RlY3J5cHRDdHJFRE1BKGJhc2UsIGhhbmRsZSwgaW5wdXQsIG91dHB1dCwgc2l6ZSwgY291bnRlciwga2V5LCBrZXlTaXplLCBjb3VudGVybGFzdCwgc3pMZWZ0KSBcCisgICAgTFRDX0FFU19DcnlwdEN0ckVETUEoYmFzZSwgaGFuZGxlLCBpbnB1dCwgb3V0cHV0LCBzaXplLCBjb3VudGVyLCBrZXksIGtleVNpemUsIGNvdW50ZXJsYXN0LCBzekxlZnQpCisKKy8qISBBRVMgQ1RSIGVuY3J5cHQgaXMgbWFwcGVkIHRvIHRoZSBBRVMgQ1RSIGdlbmVyaWMgb3BlcmF0aW9uICovCisjZGVmaW5lIExUQ19BRVNfRW5jcnlwdEN0ckVETUEoYmFzZSwgaGFuZGxlLCBpbnB1dCwgb3V0cHV0LCBzaXplLCBjb3VudGVyLCBrZXksIGtleVNpemUsIGNvdW50ZXJsYXN0LCBzekxlZnQpIFwKKyAgICBMVENfQUVTX0NyeXB0Q3RyRURNQShiYXNlLCBoYW5kbGUsIGlucHV0LCBvdXRwdXQsIHNpemUsIGNvdW50ZXIsIGtleSwga2V5U2l6ZSwgY291bnRlcmxhc3QsIHN6TGVmdCkKKworLyohCisgKkB9CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERFUyBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBhZGR0b2dyb3VwIGx0Y19lZG1hX2RyaXZlcl9kZXMKKyAqIEB7CisgKi8KKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0RWNiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBEZWNyeXB0cyBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBkZWNyeXB0aW9uCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFU19EZWNyeXB0RWNiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCB2ZWN0b3IgdG8gY29tYmluZSB3aXRoIHRoZSBmaXJzdCBwbGFpbnRleHQgYmxvY2suCisgKiAgICAgICAgICAgVGhlIGl2IGRvZXMgbm90IG5lZWQgdG8gYmUgc2VjcmV0LCBidXQgaXQgbXVzdCBiZSB1bnByZWRpY3RhYmxlLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgREVTIHVzaW5nIENCQyBibG9jayBtb2RlLgorICoKKyAqIERlY3J5cHRzIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yIHRvIGNvbWJpbmUgd2l0aCB0aGUgZmlyc3QgcGxhaW50ZXh0IGJsb2NrLgorICogICAgICAgICAgIFRoZSBpdiBkb2VzIG5vdCBuZWVkIHRvIGJlIHNlY3JldCwgYnV0IGl0IG11c3QgYmUgdW5wcmVkaWN0YWJsZS4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZGVjcnlwdGlvbgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdENiY0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIGJsb2NrLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0Q2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgREVTIHVzaW5nIENGQiBibG9jayBtb2RlLgorICoKKyAqIERlY3J5cHRzIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCBibG9jay4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZGVjcnlwdGlvbgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdENmYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IHVuaXF1ZSBpbnB1dCB2ZWN0b3IuIFRoZSBPRkIgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBJViBiZSB1bmlxdWUKKyAqICAgICAgICAgICBmb3IgZWFjaCBleGVjdXRpb24gb2YgdGhlIG1vZGUgdW5kZXIgdGhlIGdpdmVuIGtleS4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVNfRW5jcnlwdE9mYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBEZWNyeXB0cyBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGl2IElucHV0IHVuaXF1ZSBpbnB1dCB2ZWN0b3IuIFRoZSBPRkIgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBJViBiZSB1bmlxdWUKKyAqICAgICAgICAgICBmb3IgZWFjaCBleGVjdXRpb24gb2YgdGhlIG1vZGUgdW5kZXIgdGhlIGdpdmVuIGtleS4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZGVjcnlwdGlvbgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdE9mYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdEVjYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgOCBieXRlcy4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRFY2JFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCB2ZWN0b3IgdG8gY29tYmluZSB3aXRoIHRoZSBmaXJzdCBwbGFpbnRleHQgYmxvY2suCisgKiAgICAgICAgICAgVGhlIGl2IGRvZXMgbm90IG5lZWQgdG8gYmUgc2VjcmV0LCBidXQgaXQgbXVzdCBiZSB1bnByZWRpY3RhYmxlLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdENiY0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENCQyBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvciB0byBjb21iaW5lIHdpdGggdGhlIGZpcnN0IHBsYWludGV4dCBibG9jay4KKyAqICAgICAgICAgICBUaGUgaXYgZG9lcyBub3QgbmVlZCB0byBiZSBzZWNyZXQsIGJ1dCBpdCBtdXN0IGJlIHVucHJlZGljdGFibGUuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTMl9EZWNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENGQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgYmxvY2suCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTMl9FbmNyeXB0Q2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENGQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgYmxvY2suCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTMl9EZWNyeXB0Q2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IHVuaXF1ZSBpbnB1dCB2ZWN0b3IuIFRoZSBPRkIgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBJViBiZSB1bmlxdWUKKyAqICAgICAgICAgICBmb3IgZWFjaCBleGVjdXRpb24gb2YgdGhlIG1vZGUgdW5kZXIgdGhlIGdpdmVuIGtleS4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0VuY3J5cHRPZmJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgdW5pcXVlIGlucHV0IHZlY3Rvci4gVGhlIE9GQiBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIElWIGJlIHVuaXF1ZQorICogICAgICAgICAgIGZvciBlYWNoIGV4ZWN1dGlvbiBvZiB0aGUgbW9kZSB1bmRlciB0aGUgZ2l2ZW4ga2V5LgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzJfRGVjcnlwdE9mYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDggYnl0ZXMuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkzIFRoaXJkIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMzX0VuY3J5cHRFY2JFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MyBUaGlyZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTM19EZWNyeXB0RWNiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCB2ZWN0b3IgdG8gY29tYmluZSB3aXRoIHRoZSBmaXJzdCBwbGFpbnRleHQgYmxvY2suCisgKiAgICAgICAgICAgVGhlIGl2IGRvZXMgbm90IG5lZWQgdG8gYmUgc2VjcmV0LCBidXQgaXQgbXVzdCBiZSB1bnByZWRpY3RhYmxlLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MyBUaGlyZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTM19FbmNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvciB0byBjb21iaW5lIHdpdGggdGhlIGZpcnN0IHBsYWludGV4dCBibG9jay4KKyAqICAgICAgICAgICBUaGUgaXYgZG9lcyBub3QgbmVlZCB0byBiZSBzZWNyZXQsIGJ1dCBpdCBtdXN0IGJlIHVucHJlZGljdGFibGUuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkzIFRoaXJkIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRDYmNFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCBibG9jay4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTMgVGhpcmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdENmYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENGQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENGQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgYmxvY2suCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkzIFRoaXJkIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRDZmJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IHVuaXF1ZSBpbnB1dCB2ZWN0b3IuIFRoZSBPRkIgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBJViBiZSB1bmlxdWUKKyAqICAgICAgICAgICBmb3IgZWFjaCBleGVjdXRpb24gb2YgdGhlIG1vZGUgdW5kZXIgdGhlIGdpdmVuIGtleS4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTMgVGhpcmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdE9mYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgdW5pcXVlIGlucHV0IHZlY3Rvci4gVGhlIE9GQiBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIElWIGJlIHVuaXF1ZQorICogICAgICAgICAgIGZvciBlYWNoIGV4ZWN1dGlvbiBvZiB0aGUgbW9kZSB1bmRlciB0aGUgZ2l2ZW4ga2V5LgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MyBUaGlyZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTM19EZWNyeXB0T2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICpAfQorICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfRlNMX0xUQ19FRE1BX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9waXQuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YzNjNGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9waXQuYwpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfcGl0LmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgaW5zdGFuY2UgZnJvbSB0aGUgYmFzZSBhZGRyZXNzIHRvIGJlIHVzZWQgdG8gZ2F0ZSBvciB1bmdhdGUgdGhlIG1vZHVsZSBjbG9jaworICoKKyAqIEBwYXJhbSBiYXNlIFBJVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICoKKyAqIEByZXR1cm4gVGhlIFBJVCBpbnN0YW5jZQorICovCitzdGF0aWMgdWludDMyX3QgUElUX0dldEluc3RhbmNlKFBJVF9UeXBlICpiYXNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gUElUIGJhc2VzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIFBJVF9UeXBlICpjb25zdCBzX3BpdEJhc2VzW10gPSBQSVRfQkFTRV9QVFJTOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorLyohIEBicmllZiBQb2ludGVycyB0byBQSVQgY2xvY2tzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIGNvbnN0IGNsb2NrX2lwX25hbWVfdCBzX3BpdENsb2Nrc1tdID0gUElUX0NMT0NLUzsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdWludDMyX3QgUElUX0dldEluc3RhbmNlKFBJVF9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IGluc3RhbmNlOworCisgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW5kZXggZnJvbSBiYXNlIGFkZHJlc3MgbWFwcGluZ3MuICovCisgICAgZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgQVJSQVlfU0laRShzX3BpdEJhc2VzKTsgaW5zdGFuY2UrKykKKyAgICB7CisgICAgICAgIGlmIChzX3BpdEJhc2VzW2luc3RhbmNlXSA9PSBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydChpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19waXRCYXNlcykpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIFBJVF9Jbml0KFBJVF9UeXBlICpiYXNlLCBjb25zdCBwaXRfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBVbmdhdGUgdGhlIFBJVCBjbG9jayovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19waXRDbG9ja3NbUElUX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKyAgICAvKiBFbmFibGUgUElUIHRpbWVycyAqLworICAgIGJhc2UtPk1DUiAmPSB+UElUX01DUl9NRElTX01BU0s7CisKKyAgICAvKiBDb25maWcgdGltZXIgb3BlcmF0aW9uIHdoZW4gaW4gZGVidWcgbW9kZSAqLworICAgIGlmIChjb25maWctPmVuYWJsZVJ1bkluRGVidWcpCisgICAgeworICAgICAgICBiYXNlLT5NQ1IgJj0gflBJVF9NQ1JfRlJaX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPk1DUiB8PSBQSVRfTUNSX0ZSWl9NQVNLOworICAgIH0KK30KKwordm9pZCBQSVRfRGVpbml0KFBJVF9UeXBlICpiYXNlKQoreworICAgIC8qIERpc2FibGUgUElUIHRpbWVycyAqLworICAgIGJhc2UtPk1DUiB8PSBQSVRfTUNSX01ESVNfTUFTSzsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBHYXRlIHRoZSBQSVQgY2xvY2sqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX3BpdENsb2Nrc1tQSVRfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUElUX0hBU19MSUZFVElNRV9USU1FUikgJiYgRlNMX0ZFQVRVUkVfUElUX0hBU19MSUZFVElNRV9USU1FUgorCit1aW50NjRfdCBQSVRfR2V0TGlmZXRpbWVUaW1lckNvdW50KFBJVF9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IHZhbHVlSCA9IDBVOworICAgIHVpbnQzMl90IHZhbHVlTCA9IDBVOworCisgICAgLyogTFRNUjY0SCBzaG91bGQgYmUgcmVhZCBiZWZvcmUgTFRNUjY0TCAqLworICAgIHZhbHVlSCA9IGJhc2UtPkxUTVI2NEg7CisgICAgdmFsdWVMID0gYmFzZS0+TFRNUjY0TDsKKworICAgIHJldHVybiAoKCh1aW50NjRfdCl2YWx1ZUggPDwgMzJVKSArICh1aW50NjRfdCkodmFsdWVMKSk7Cit9CisKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QSVRfSEFTX0xJRkVUSU1FX1RJTUVSICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9waXQuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YzMwZTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9waXQuaApAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfUElUX0hfCisjZGVmaW5lIF9GU0xfUElUX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgcGl0CisgKiBAeworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworI2RlZmluZSBGU0xfUElUX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMCkpIC8qITwgVmVyc2lvbiAyLjAuMCAqLworLypAfSovCisKKy8qIQorICogQGJyaWVmIExpc3Qgb2YgUElUIGNoYW5uZWxzCisgKiBAbm90ZSBBY3R1YWwgbnVtYmVyIG9mIGF2YWlsYWJsZSBjaGFubmVscyBpcyBTb0MgZGVwZW5kZW50CisgKi8KK3R5cGVkZWYgZW51bSBfcGl0X2NobmwKK3sKKyAgICBrUElUX0NobmxfMCA9IDBVLCAvKiE8IFBJVCBjaGFubmVsIG51bWJlciAwKi8KKyAgICBrUElUX0NobmxfMSwgICAgICAvKiE8IFBJVCBjaGFubmVsIG51bWJlciAxICovCisgICAga1BJVF9DaG5sXzIsICAgICAgLyohPCBQSVQgY2hhbm5lbCBudW1iZXIgMiAqLworICAgIGtQSVRfQ2hubF8zLCAgICAgIC8qITwgUElUIGNoYW5uZWwgbnVtYmVyIDMgKi8KK30gcGl0X2NobmxfdDsKKworLyohIEBicmllZiBMaXN0IG9mIFBJVCBpbnRlcnJ1cHRzICovCit0eXBlZGVmIGVudW0gX3BpdF9pbnRlcnJ1cHRfZW5hYmxlCit7CisgICAga1BJVF9UaW1lckludGVycnVwdEVuYWJsZSA9IFBJVF9UQ1RSTF9USUVfTUFTSywgLyohPCBUaW1lciBpbnRlcnJ1cHQgZW5hYmxlKi8KK30gcGl0X2ludGVycnVwdF9lbmFibGVfdDsKKworLyohIEBicmllZiBMaXN0IG9mIFBJVCBzdGF0dXMgZmxhZ3MgKi8KK3R5cGVkZWYgZW51bSBfcGl0X3N0YXR1c19mbGFncworeworICAgIGtQSVRfVGltZXJGbGFnID0gUElUX1RGTEdfVElGX01BU0ssIC8qITwgVGltZXIgZmxhZyAqLworfSBwaXRfc3RhdHVzX2ZsYWdzX3Q7CisKKy8qIQorICogQGJyaWVmIFBJVCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgUElUIHBlcmlwaGVyYWwuIFRvIGluaXRpYWxpemUgdGhpcworICogc3RydWN0dXJlIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMsIGNhbGwgdGhlIFBJVF9HZXREZWZhdWx0Q29uZmlnKCkgZnVuY3Rpb24gYW5kIHBhc3MgYQorICogcG9pbnRlciB0byB5b3VyIGNvbmZpZyBzdHJ1Y3R1cmUgaW5zdGFuY2UuCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGNhbiBiZSBtYWRlIGNvbnN0YW50IHNvIGl0IHJlc2lkZXMgaW4gZmxhc2guCisgKi8KK3R5cGVkZWYgc3RydWN0IF9waXRfY29uZmlnCit7CisgICAgYm9vbCBlbmFibGVSdW5JbkRlYnVnOyAvKiE8IHRydWU6IFRpbWVycyBydW4gaW4gZGVidWcgbW9kZTsgZmFsc2U6IFRpbWVycyBzdG9wIGluIGRlYnVnIG1vZGUgKi8KK30gcGl0X2NvbmZpZ190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQG5hbWUgSW5pdGlhbGl6YXRpb24gYW5kIGRlaW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgVW5nYXRlcyB0aGUgUElUIGNsb2NrLCBlbmFibGVzIHRoZSBQSVQgbW9kdWxlLCBhbmQgY29uZmlndXJlcyB0aGUgcGVyaXBoZXJhbCBmb3IgYmFzaWMgb3BlcmF0aW9ucy4KKyAqCisgKiBAbm90ZSBUaGlzIEFQSSBzaG91bGQgYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBQSVQgZHJpdmVyLgorICoKKyAqIEBwYXJhbSBiYXNlICAgUElUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIHVzZXIncyBQSVQgY29uZmlnIHN0cnVjdHVyZQorICovCit2b2lkIFBJVF9Jbml0KFBJVF9UeXBlICpiYXNlLCBjb25zdCBwaXRfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEdhdGVzIHRoZSBQSVQgY2xvY2sgYW5kIGRpc2FibGVzIHRoZSBQSVQgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlIFBJVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICovCit2b2lkIFBJVF9EZWluaXQoUElUX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBGaWxscyBpbiB0aGUgUElUIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgKgorICogVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBhcyBmb2xsb3dzLgorICogQGNvZGUKKyAqICAgICBjb25maWctPmVuYWJsZVJ1bkluRGVidWcgPSBmYWxzZTsKKyAqIEBlbmRjb2RlCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIG9uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQSVRfR2V0RGVmYXVsdENvbmZpZyhwaXRfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworICAgIC8qIFRpbWVycyBhcmUgc3RvcHBlZCBpbiBEZWJ1ZyBtb2RlICovCisgICAgY29uZmlnLT5lbmFibGVSdW5JbkRlYnVnID0gZmFsc2U7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BJVF9IQVNfQ0hBSU5fTU9ERSkgJiYgRlNMX0ZFQVRVUkVfUElUX0hBU19DSEFJTl9NT0RFCisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgb3IgZGlzYWJsZXMgY2hhaW5pbmcgYSB0aW1lciB3aXRoIHRoZSBwcmV2aW91cyB0aW1lci4KKyAqCisgKiBXaGVuIGEgdGltZXIgaGFzIGEgY2hhaW4gbW9kZSBlbmFibGVkLCBpdCBvbmx5IGNvdW50cyBhZnRlciB0aGUgcHJldmlvdXMKKyAqIHRpbWVyIGhhcyBleHBpcmVkLiBJZiB0aGUgdGltZXIgbi0xIGhhcyBjb3VudGVkIGRvd24gdG8gMCwgY291bnRlciBuCisgKiBkZWNyZW1lbnRzIHRoZSB2YWx1ZSBieSBvbmUuIEVhY2ggdGltZXIgaXMgMzItYml0cywgd2hpY2ggYWxsb3dzIHRoZSBkZXZlbG9wZXJzCisgKiB0byBjaGFpbiB0aW1lcnMgdG9nZXRoZXIgYW5kIGZvcm0gYSBsb25nZXIgdGltZXIgKDY0LWJpdHMgYW5kIGxhcmdlcikuIFRoZSBmaXJzdCB0aW1lcgorICogKHRpbWVyIDApIGNhbid0IGJlIGNoYWluZWQgdG8gYW55IG90aGVyIHRpbWVyLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIFBJVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNoYW5uZWwgVGltZXIgY2hhbm5lbCBudW1iZXIgd2hpY2ggaXMgY2hhaW5lZCB3aXRoIHRoZSBwcmV2aW91cyB0aW1lcgorICogQHBhcmFtIGVuYWJsZSAgRW5hYmxlIG9yIGRpc2FibGUgY2hhaW4uCisgKiAgICAgICAgICAgICAgICB0cnVlOiAgQ3VycmVudCB0aW1lciBpcyBjaGFpbmVkIHdpdGggdGhlIHByZXZpb3VzIHRpbWVyLgorICogICAgICAgICAgICAgICAgZmFsc2U6IFRpbWVyIGRvZXNuJ3QgY2hhaW4gd2l0aCBvdGhlciB0aW1lcnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQSVRfU2V0VGltZXJDaGFpbk1vZGUoUElUX1R5cGUgKmJhc2UsIHBpdF9jaG5sX3QgY2hhbm5lbCwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkNIQU5ORUxbY2hhbm5lbF0uVENUUkwgfD0gUElUX1RDVFJMX0NITl9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5DSEFOTkVMW2NoYW5uZWxdLlRDVFJMICY9IH5QSVRfVENUUkxfQ0hOX01BU0s7CisgICAgfQorfQorCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUElUX0hBU19DSEFJTl9NT0RFICovCisKKy8qISBAfSovCisKKy8qIQorICogQG5hbWUgSW50ZXJydXB0IEludGVyZmFjZQorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBzZWxlY3RlZCBQSVQgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBQSVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaGFubmVsIFRpbWVyIGNoYW5uZWwgbnVtYmVyCisgKiBAcGFyYW0gbWFzayAgICBUaGUgaW50ZXJydXB0cyB0byBlbmFibGUuIFRoaXMgaXMgYSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgICAgICAgICBlbnVtZXJhdGlvbiA6OnBpdF9pbnRlcnJ1cHRfZW5hYmxlX3QKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBJVF9FbmFibGVJbnRlcnJ1cHRzKFBJVF9UeXBlICpiYXNlLCBwaXRfY2hubF90IGNoYW5uZWwsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+Q0hBTk5FTFtjaGFubmVsXS5UQ1RSTCB8PSBtYXNrOworfQorCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyB0aGUgc2VsZWN0ZWQgUElUIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGJhc2UgICAgUElUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2hhbm5lbCBUaW1lciBjaGFubmVsIG51bWJlcgorICogQHBhcmFtIG1hc2sgICAgVGhlIGludGVycnVwdHMgdG8gZGlzYWJsZS4gVGhpcyBpcyBhIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgIGVudW1lcmF0aW9uIDo6cGl0X2ludGVycnVwdF9lbmFibGVfdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUElUX0Rpc2FibGVJbnRlcnJ1cHRzKFBJVF9UeXBlICpiYXNlLCBwaXRfY2hubF90IGNoYW5uZWwsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+Q0hBTk5FTFtjaGFubmVsXS5UQ1RSTCAmPSB+bWFzazsKK30KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgZW5hYmxlZCBQSVQgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBQSVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaGFubmVsIFRpbWVyIGNoYW5uZWwgbnVtYmVyCisgKgorICogQHJldHVybiBUaGUgZW5hYmxlZCBpbnRlcnJ1cHRzLiBUaGlzIGlzIHRoZSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgIGVudW1lcmF0aW9uIDo6cGl0X2ludGVycnVwdF9lbmFibGVfdAorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFBJVF9HZXRFbmFibGVkSW50ZXJydXB0cyhQSVRfVHlwZSAqYmFzZSwgcGl0X2NobmxfdCBjaGFubmVsKQoreworICAgIHJldHVybiAoYmFzZS0+Q0hBTk5FTFtjaGFubmVsXS5UQ1RSTCAmIFBJVF9UQ1RSTF9USUVfTUFTSyk7Cit9CisKKy8qISBAfSovCisKKy8qIQorICogQG5hbWUgU3RhdHVzIEludGVyZmFjZQorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBQSVQgc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIFBJVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNoYW5uZWwgVGltZXIgY2hhbm5lbCBudW1iZXIKKyAqCisgKiBAcmV0dXJuIFRoZSBzdGF0dXMgZmxhZ3MuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgZW51bWVyYXRpb24gOjpwaXRfc3RhdHVzX2ZsYWdzX3QKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBQSVRfR2V0U3RhdHVzRmxhZ3MoUElUX1R5cGUgKmJhc2UsIHBpdF9jaG5sX3QgY2hhbm5lbCkKK3sKKyAgICByZXR1cm4gKGJhc2UtPkNIQU5ORUxbY2hhbm5lbF0uVEZMRyAmIFBJVF9URkxHX1RJRl9NQVNLKTsKK30KKworLyohCisgKiBAYnJpZWYgIENsZWFycyB0aGUgUElUIHN0YXR1cyBmbGFncy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBQSVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaGFubmVsIFRpbWVyIGNoYW5uZWwgbnVtYmVyCisgKiBAcGFyYW0gbWFzayAgICBUaGUgc3RhdHVzIGZsYWdzIHRvIGNsZWFyLiBUaGlzIGlzIGEgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICAgICAgICAgZW51bWVyYXRpb24gOjpwaXRfc3RhdHVzX2ZsYWdzX3QKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBJVF9DbGVhclN0YXR1c0ZsYWdzKFBJVF9UeXBlICpiYXNlLCBwaXRfY2hubF90IGNoYW5uZWwsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+Q0hBTk5FTFtjaGFubmVsXS5URkxHID0gbWFzazsKK30KKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBSZWFkIGFuZCBXcml0ZSB0aGUgdGltZXIgcGVyaW9kCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIHRpbWVyIHBlcmlvZCBpbiB1bml0cyBvZiBjb3VudC4KKyAqCisgKiBUaW1lcnMgYmVnaW4gY291bnRpbmcgZnJvbSB0aGUgdmFsdWUgc2V0IGJ5IHRoaXMgZnVuY3Rpb24gdW50aWwgaXQgcmVhY2hlcyAwLAorICogdGhlbiBpdCBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0IGFuZCBsb2FkIHRoaXMgcmVnaXN0ZXIgdmFsdWUgYWdhaW4uCisgKiBXcml0aW5nIGEgbmV3IHZhbHVlIHRvIHRoaXMgcmVnaXN0ZXIgZG9lcyBub3QgcmVzdGFydCB0aGUgdGltZXIuIEluc3RlYWQsIHRoZSB2YWx1ZQorICogaXMgbG9hZGVkIGFmdGVyIHRoZSB0aW1lciBleHBpcmVzLgorICoKKyAqIEBub3RlIFVzZXJzIGNhbiBjYWxsIHRoZSB1dGlsaXR5IG1hY3JvcyBwcm92aWRlZCBpbiBmc2xfY29tbW9uLmggdG8gY29udmVydCB0byB0aWNrcy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBQSVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaGFubmVsIFRpbWVyIGNoYW5uZWwgbnVtYmVyCisgKiBAcGFyYW0gY291bnQgICBUaW1lciBwZXJpb2QgaW4gdW5pdHMgb2YgdGlja3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBJVF9TZXRUaW1lclBlcmlvZChQSVRfVHlwZSAqYmFzZSwgcGl0X2NobmxfdCBjaGFubmVsLCB1aW50MzJfdCBjb3VudCkKK3sKKyAgICBiYXNlLT5DSEFOTkVMW2NoYW5uZWxdLkxEVkFMID0gY291bnQ7Cit9CisKKy8qIQorICogQGJyaWVmIFJlYWRzIHRoZSBjdXJyZW50IHRpbWVyIGNvdW50aW5nIHZhbHVlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVhbC10aW1lIHRpbWVyIGNvdW50aW5nIHZhbHVlLCBpbiBhIHJhbmdlIGZyb20gMCB0byBhCisgKiB0aW1lciBwZXJpb2QuCisgKgorICogQG5vdGUgVXNlcnMgY2FuIGNhbGwgdGhlIHV0aWxpdHkgbWFjcm9zIHByb3ZpZGVkIGluIGZzbF9jb21tb24uaCB0byBjb252ZXJ0IHRpY2tzIHRvIHVzZWMgb3IgbXNlYy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBQSVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaGFubmVsIFRpbWVyIGNoYW5uZWwgbnVtYmVyCisgKgorICogQHJldHVybiBDdXJyZW50IHRpbWVyIGNvdW50aW5nIHZhbHVlIGluIHRpY2tzCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgUElUX0dldEN1cnJlbnRUaW1lckNvdW50KFBJVF9UeXBlICpiYXNlLCBwaXRfY2hubF90IGNoYW5uZWwpCit7CisgICAgcmV0dXJuIGJhc2UtPkNIQU5ORUxbY2hhbm5lbF0uQ1ZBTDsKK30KKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBUaW1lciBTdGFydCBhbmQgU3RvcAorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBTdGFydHMgdGhlIHRpbWVyIGNvdW50aW5nLgorICoKKyAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGltZXJzIGxvYWQgcGVyaW9kIHZhbHVlLCBjb3VudCBkb3duIHRvIDAgYW5kCisgKiB0aGVuIGxvYWQgdGhlIHJlc3BlY3RpdmUgc3RhcnQgdmFsdWUgYWdhaW4uIEVhY2ggdGltZSBhIHRpbWVyIHJlYWNoZXMgMCwKKyAqIGl0IGdlbmVyYXRlcyBhIHRyaWdnZXIgcHVsc2UgYW5kIHNldHMgdGhlIHRpbWVvdXQgaW50ZXJydXB0IGZsYWcuCisgKgorICogQHBhcmFtIGJhc2UgICAgUElUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2hhbm5lbCBUaW1lciBjaGFubmVsIG51bWJlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBJVF9TdGFydFRpbWVyKFBJVF9UeXBlICpiYXNlLCBwaXRfY2hubF90IGNoYW5uZWwpCit7CisgICAgYmFzZS0+Q0hBTk5FTFtjaGFubmVsXS5UQ1RSTCB8PSBQSVRfVENUUkxfVEVOX01BU0s7Cit9CisKKy8qIQorICogQGJyaWVmIFN0b3BzIHRoZSB0aW1lciBjb3VudGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN0b3BzIGV2ZXJ5IHRpbWVyIGNvdW50aW5nLiBUaW1lcnMgcmVsb2FkIHRoZWlyIHBlcmlvZHMKKyAqIHJlc3BlY3RpdmVseSBhZnRlciB0aGUgbmV4dCB0aW1lIHRoZXkgY2FsbCB0aGUgUElUX0RSVl9TdGFydFRpbWVyLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIFBJVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNoYW5uZWwgVGltZXIgY2hhbm5lbCBudW1iZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQSVRfU3RvcFRpbWVyKFBJVF9UeXBlICpiYXNlLCBwaXRfY2hubF90IGNoYW5uZWwpCit7CisgICAgYmFzZS0+Q0hBTk5FTFtjaGFubmVsXS5UQ1RSTCAmPSB+UElUX1RDVFJMX1RFTl9NQVNLOworfQorCisvKiEgQH0qLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QSVRfSEFTX0xJRkVUSU1FX1RJTUVSKSAmJiBGU0xfRkVBVFVSRV9QSVRfSEFTX0xJRkVUSU1FX1RJTUVSCisKKy8qIQorICogQGJyaWVmIFJlYWRzIHRoZSBjdXJyZW50IGxpZmV0aW1lIGNvdW50ZXIgdmFsdWUuCisgKgorICogVGhlIGxpZmV0aW1lIHRpbWVyIGlzIGEgNjQtYml0IHRpbWVyIHdoaWNoIGNoYWlucyB0aW1lciAwIGFuZCB0aW1lciAxIHRvZ2V0aGVyLgorICogVGltZXIgMCBhbmQgMSBhcmUgY2hhaW5lZCBieSBjYWxsaW5nIHRoZSBQSVRfU2V0VGltZXJDaGFpbk1vZGUgYmVmb3JlIHVzaW5nIHRoaXMgdGltZXIuCisgKiBUaGUgcGVyaW9kIG9mIGxpZmV0aW1lIHRpbWVyIGlzIGVxdWFsIHRvIHRoZSAicGVyaW9kIG9mIHRpbWVyIDAgKiBwZXJpb2Qgb2YgdGltZXIgMSIuCisgKiBGb3IgdGhlIDY0LWJpdCB2YWx1ZSwgdGhlIGhpZ2hlciAzMi1iaXQgaGFzIHRoZSB2YWx1ZSBvZiB0aW1lciAxLCBhbmQgdGhlIGxvd2VyIDMyLWJpdAorICogaGFzIHRoZSB2YWx1ZSBvZiB0aW1lciAwLgorICoKKyAqIEBwYXJhbSBiYXNlIFBJVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICoKKyAqIEByZXR1cm4gQ3VycmVudCBsaWZldGltZSB0aW1lciB2YWx1ZQorICovCit1aW50NjRfdCBQSVRfR2V0TGlmZXRpbWVUaW1lckNvdW50KFBJVF9UeXBlICpiYXNlKTsKKworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BJVF9IQVNfTElGRVRJTUVfVElNRVIgKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfUElUX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9wbWMuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BtYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZGQ1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9wbWMuYwpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJmc2xfcG1jLmgiCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX1BBUkFNKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX1BBUkFNKQordm9pZCBQTUNfR2V0UGFyYW0oUE1DX1R5cGUgKmJhc2UsIHBtY19wYXJhbV90ICpwYXJhbSkKK3sKKyAgICB1aW50MzJfdCByZWcgPSBiYXNlLT5QQVJBTTsKKyAgICA7CisgICAgcGFyYW0tPnZscG9FbmFibGUgPSAoYm9vbCkocmVnICYgUE1DX1BBUkFNX1ZMUE9FX01BU0spOworICAgIHBhcmFtLT5odmRFbmFibGUgPSAoYm9vbCkocmVnICYgUE1DX1BBUkFNX0hWREVfTUFTSyk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19QQVJBTSAqLworCit2b2lkIFBNQ19Db25maWd1cmVMb3dWb2x0RGV0ZWN0KFBNQ19UeXBlICpiYXNlLCBjb25zdCBwbWNfbG93X3ZvbHRfZGV0ZWN0X2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYmFzZS0+TFZEU0MxID0gKDBVIHwKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0xWRFYpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfTFZEVikKKyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCljb25maWctPnZvbHRTZWxlY3QgPDwgUE1DX0xWRFNDMV9MVkRWX1NISUZUKSB8CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCljb25maWctPmVuYWJsZUludCA8PCBQTUNfTFZEU0MxX0xWRElFX1NISUZUKSB8CisgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpY29uZmlnLT5lbmFibGVSZXNldCA8PCBQTUNfTFZEU0MxX0xWRFJFX1NISUZUKQorICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciB0aGUgTG93IFZvbHRhZ2UgRGV0ZWN0IEZsYWcgd2l0aCBwcmV2aW91c2UgcG93ZXIgZGV0ZWN0IHNldHRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgfCBQTUNfTFZEU0MxX0xWREFDS19NQVNLKTsKK30KKwordm9pZCBQTUNfQ29uZmlndXJlTG93Vm9sdFdhcm5pbmcoUE1DX1R5cGUgKmJhc2UsIGNvbnN0IHBtY19sb3dfdm9sdF93YXJuaW5nX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYmFzZS0+TFZEU0MyID0gKDBVIHwKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0xWV1YpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfTFZXVikKKyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCljb25maWctPnZvbHRTZWxlY3QgPDwgUE1DX0xWRFNDMl9MVldWX1NISUZUKSB8CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCljb25maWctPmVuYWJsZUludCA8PCBQTUNfTFZEU0MyX0xWV0lFX1NISUZUKQorICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciB0aGUgTG93IFZvbHRhZ2UgV2FybmluZyBGbGFnIHdpdGggcHJldmlvdXNlIHBvd2VyIGRldGVjdCBzZXR0aW5nICovCisgICAgICAgICAgICAgICAgICAgIHwgUE1DX0xWRFNDMl9MVldBQ0tfTUFTSyk7Cit9CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0hWRFNDMSkgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19IVkRTQzEpCit2b2lkIFBNQ19Db25maWd1cmVIaWdoVm9sdERldGVjdChQTUNfVHlwZSAqYmFzZSwgY29uc3QgcG1jX2hpZ2hfdm9sdF9kZXRlY3RfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBiYXNlLT5IVkRTQzEgPSAoKCh1aW50MzJfdCljb25maWctPnZvbHRTZWxlY3QgPDwgUE1DX0hWRFNDMV9IVkRWX1NISUZUKSB8CisgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpY29uZmlnLT5lbmFibGVJbnQgPDwgUE1DX0hWRFNDMV9IVkRJRV9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWNvbmZpZy0+ZW5hYmxlUmVzZXQgPDwgUE1DX0hWRFNDMV9IVkRSRV9TSElGVCkKKyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIEhpZ2ggVm9sdGFnZSBEZXRlY3QgRmxhZyB3aXRoIHByZXZpb3VzZSBwb3dlciBkZXRlY3Qgc2V0dGluZyAqLworICAgICAgICAgICAgICAgICAgICB8IFBNQ19IVkRTQzFfSFZEQUNLX01BU0spOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BNQ19IQVNfSFZEU0MxICovCisKKyNpZiAoKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JFKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkUpIHx8IFwKKyAgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0VOKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHRU4pIHx8IFwKKyAgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUykgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUykpCit2b2lkIFBNQ19Db25maWd1cmVCYW5kZ2FwQnVmZmVyKFBNQ19UeXBlICpiYXNlLCBjb25zdCBwbWNfYmFuZGdhcF9idWZmZXJfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBiYXNlLT5SRUdTQyA9ICgwVQorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRSkgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JFKQorICAgICAgICAgICAgICAgICAgIHwgKCh1aW50MzJfdCljb25maWctPmVuYWJsZSA8PCBQTUNfUkVHU0NfQkdCRV9TSElGVCkKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkUgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0JHRU4pICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdFTikKKyAgICAgICAgICAgICAgICAgICB8ICgoKHVpbnQzMl90KWNvbmZpZy0+ZW5hYmxlSW5Mb3dQb3dlck1vZGUgPDwgUE1DX1JFR1NDX0JHRU5fU0hJRlQpKQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdFTiAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRFMpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRFMpCisgICAgICAgICAgICAgICAgICAgfCAoKHVpbnQzMl90KWNvbmZpZy0+ZHJpdmUgPDwgUE1DX1JFR1NDX0JHQkRTX1NISUZUKQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRFMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcG1jLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9wbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWZjMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcG1jLmgKQEAgLTAsMCArMSw0MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX1BNQ19IXworI2RlZmluZSBfRlNMX1BNQ19IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEgQGFkZHRvZ3JvdXAgcG1jICovCisvKiEgQHsgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgQGJyaWVmIFBNQyBkcml2ZXIgdmVyc2lvbiAqLworI2RlZmluZSBGU0xfUE1DX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMCkpIC8qITwgVmVyc2lvbiAyLjAuMC4gKi8KKy8qQH0qLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19MVkRWKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0xWRFYpCisvKiEKKyAqIEBicmllZiBMb3ctdm9sdGFnZSBEZXRlY3QgVm9sdGFnZSBTZWxlY3QKKyAqLwordHlwZWRlZiBlbnVtIF9wbWNfbG93X3ZvbHRfZGV0ZWN0X3ZvbHRfc2VsZWN0Cit7CisgICAga1BNQ19Mb3dWb2x0RGV0ZWN0TG93VHJpcCA9IDBVLCAvKiE8IExvdy10cmlwIHBvaW50IHNlbGVjdGVkIChWTFZEID0gVkxWREwgKSovCisgICAga1BNQ19Mb3dWb2x0RGV0ZWN0SGlnaFRyaXAgPSAxVSAvKiE8IEhpZ2gtdHJpcCBwb2ludCBzZWxlY3RlZCAoVkxWRCA9IFZMVkRIICkqLworfSBwbWNfbG93X3ZvbHRfZGV0ZWN0X3ZvbHRfc2VsZWN0X3Q7CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfTFZXVikgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19MVldWKQorLyohCisgKiBAYnJpZWYgTG93LXZvbHRhZ2UgV2FybmluZyBWb2x0YWdlIFNlbGVjdAorICovCit0eXBlZGVmIGVudW0gX3BtY19sb3dfdm9sdF93YXJuaW5nX3ZvbHRfc2VsZWN0Cit7CisgICAga1BNQ19Mb3dWb2x0V2FybmluZ0xvd1RyaXAgPSAwVSwgIC8qITwgTG93LXRyaXAgcG9pbnQgc2VsZWN0ZWQgKFZMVlcgPSBWTFZXMSkqLworICAgIGtQTUNfTG93Vm9sdFdhcm5pbmdNaWQxVHJpcCA9IDFVLCAvKiE8IE1pZCAxIHRyaXAgcG9pbnQgc2VsZWN0ZWQgKFZMVlcgPSBWTFZXMikqLworICAgIGtQTUNfTG93Vm9sdFdhcm5pbmdNaWQyVHJpcCA9IDJVLCAvKiE8IE1pZCAyIHRyaXAgcG9pbnQgc2VsZWN0ZWQgKFZMVlcgPSBWTFZXMykqLworICAgIGtQTUNfTG93Vm9sdFdhcm5pbmdIaWdoVHJpcCA9IDNVICAvKiE8IEhpZ2gtdHJpcCBwb2ludCBzZWxlY3RlZCAoVkxWVyA9IFZMVlc0KSovCit9IHBtY19sb3dfdm9sdF93YXJuaW5nX3ZvbHRfc2VsZWN0X3Q7CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfSFZEU0MxKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0hWRFNDMSkKKy8qIQorICogQGJyaWVmIEhpZ2gtdm9sdGFnZSBEZXRlY3QgVm9sdGFnZSBTZWxlY3QKKyAqLwordHlwZWRlZiBlbnVtIF9wbWNfaGlnaF92b2x0X2RldGVjdF92b2x0X3NlbGVjdAoreworICAgIGtQTUNfSGlnaFZvbHREZXRlY3RMb3dUcmlwID0gMFUsIC8qITwgTG93LXRyaXAgcG9pbnQgc2VsZWN0ZWQgKFZIVkQgPSBWSFZETCApKi8KKyAgICBrUE1DX0hpZ2hWb2x0RGV0ZWN0SGlnaFRyaXAgPSAxVSAvKiE8IEhpZ2gtdHJpcCBwb2ludCBzZWxlY3RlZCAoVkhWRCA9IFZIVkRIICkqLworfSBwbWNfaGlnaF92b2x0X2RldGVjdF92b2x0X3NlbGVjdF90OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BNQ19IQVNfSFZEU0MxICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkRTKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkRTKQorLyohCisgKiBAYnJpZWYgQmFuZGdhcCBCdWZmZXIgRHJpdmUgU2VsZWN0LgorICovCit0eXBlZGVmIGVudW0gX3BtY19iYW5kZ2FwX2J1ZmZlcl9kcml2ZV9zZWxlY3QKK3sKKyAgICBrUE1DX0JhbmRnYXBCdWZmZXJEcml2ZUxvdyA9IDBVLCAvKiE8IExvdy1kcml2ZS4gICovCisgICAga1BNQ19CYW5kZ2FwQnVmZmVyRHJpdmVIaWdoID0gMVUgLyohPCBIaWdoLWRyaXZlLiAqLworfSBwbWNfYmFuZGdhcF9idWZmZXJfZHJpdmVfc2VsZWN0X3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUyAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19WTFBPKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX1ZMUE8pCisvKiEKKyAqIEBicmllZiBWTFB4IE9wdGlvbgorICovCit0eXBlZGVmIGVudW0gX3BtY192bHBfZnJlcV9vcHRpb24KK3sKKyAgICBrUE1DX0ZyZXFSZXN0cmljdCA9IDBVLCAgLyohPCBGcmVxdWVuY3kgaXMgcmVzdHJpY3RlZCBpbiBWTFB4IG1vZGUuICovCisgICAga1BNQ19GcmVxVW5yZXN0cmljdCA9IDFVIC8qITwgRnJlcXVlbmN5IGlzIHVucmVzdHJpY3RlZCBpbiBWTFB4IG1vZGUuICovCit9IHBtY192bHBfZnJlcV9tb2RlX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19WTFBPICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX1ZFUklEKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX1ZFUklEKQorLyohCisgQGJyaWVmIElQIHZlcnNpb24gSUQgZGVmaW5pdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3BtY192ZXJzaW9uX2lkCit7CisgICAgdWludDE2X3QgZmVhdHVyZTsgLyohPCBGZWF0dXJlIFNwZWNpZmljYXRpb24gTnVtYmVyLiAqLworICAgIHVpbnQ4X3QgbWlub3I7ICAgIC8qITwgTWlub3IgdmVyc2lvbiBudW1iZXIuICAgICAgICAgKi8KKyAgICB1aW50OF90IG1ham9yOyAgICAvKiE8IE1ham9yIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICovCit9IHBtY192ZXJzaW9uX2lkX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19WRVJJRCAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19QQVJBTSkgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19QQVJBTSkKKy8qISBAYnJpZWYgSVAgcGFyYW1ldGVyIGRlZmluaXRpb24uICovCit0eXBlZGVmIHN0cnVjdCBfcG1jX3BhcmFtCit7CisgICAgYm9vbCB2bHBvRW5hYmxlOyAvKiE8IFZMUE8gZW5hYmxlLiAqLworICAgIGJvb2wgaHZkRW5hYmxlOyAgLyohPCBIVkQgZW5hYmxlLiAgKi8KK30gcG1jX3BhcmFtX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19QQVJBTSAqLworCisvKiEKKyAqIEBicmllZiBMb3ctdm9sdGFnZSBEZXRlY3QgQ29uZmlndXJhdGlvbiBTdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3BtY19sb3dfdm9sdF9kZXRlY3RfY29uZmlnCit7CisgICAgYm9vbCBlbmFibGVJbnQ7ICAgLyohPCBFbmFibGUgaW50ZXJydXB0IHdoZW4gTG93LXZvbHRhZ2UgZGV0ZWN0Ki8KKyAgICBib29sIGVuYWJsZVJlc2V0OyAvKiE8IEVuYWJsZSBzeXN0ZW0gcmVzZXQgd2hlbiBMb3ctdm9sdGFnZSBkZXRlY3QqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfTFZEVikgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19MVkRWKQorICAgIHBtY19sb3dfdm9sdF9kZXRlY3Rfdm9sdF9zZWxlY3RfdCB2b2x0U2VsZWN0OyAvKiE8IExvdy12b2x0YWdlIGRldGVjdCB0cmlwIHBvaW50IHZvbHRhZ2Ugc2VsZWN0aW9uKi8KKyNlbmRpZgorfSBwbWNfbG93X3ZvbHRfZGV0ZWN0X2NvbmZpZ190OworCisvKiEKKyAqIEBicmllZiBMb3ctdm9sdGFnZSBXYXJuaW5nIENvbmZpZ3VyYXRpb24gU3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0IF9wbWNfbG93X3ZvbHRfd2FybmluZ19jb25maWcKK3sKKyAgICBib29sIGVuYWJsZUludDsgLyohPCBFbmFibGUgaW50ZXJydXB0IHdoZW4gbG93LXZvbHRhZ2Ugd2FybmluZyovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19MVldWKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0xWV1YpCisgICAgcG1jX2xvd192b2x0X3dhcm5pbmdfdm9sdF9zZWxlY3RfdCB2b2x0U2VsZWN0OyAvKiE8IExvdy12b2x0YWdlIHdhcm5pbmcgdHJpcCBwb2ludCB2b2x0YWdlIHNlbGVjdGlvbiovCisjZW5kaWYKK30gcG1jX2xvd192b2x0X3dhcm5pbmdfY29uZmlnX3Q7CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0hWRFNDMSkgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19IVkRTQzEpCisvKiEKKyAqIEBicmllZiBIaWdoLXZvbHRhZ2UgRGV0ZWN0IENvbmZpZ3VyYXRpb24gU3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0IF9wbWNfaGlnaF92b2x0X2RldGVjdF9jb25maWcKK3sKKyAgICBib29sIGVuYWJsZUludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCB3aGVuIGhpZ2gtdm9sdGFnZSBkZXRlY3QqLworICAgIGJvb2wgZW5hYmxlUmVzZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgc3lzdGVtIHJlc2V0IHdoZW4gaGlnaC12b2x0YWdlIGRldGVjdCovCisgICAgcG1jX2hpZ2hfdm9sdF9kZXRlY3Rfdm9sdF9zZWxlY3RfdCB2b2x0U2VsZWN0OyAvKiE8IEhpZ2gtdm9sdGFnZSBkZXRlY3QgdHJpcCBwb2ludCB2b2x0YWdlIHNlbGVjdGlvbiovCit9IHBtY19oaWdoX3ZvbHRfZGV0ZWN0X2NvbmZpZ190OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BNQ19IQVNfSFZEU0MxICovCisKKyNpZiAoKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JFKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkUpIHx8IFwKKyAgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0VOKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHRU4pIHx8IFwKKyAgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUykgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUykpCisvKiEKKyAqIEBicmllZiBCYW5kZ2FwIEJ1ZmZlciBjb25maWd1cmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfcG1jX2JhbmRnYXBfYnVmZmVyX2NvbmZpZworeworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRSkgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JFKQorICAgIGJvb2wgZW5hYmxlOyAvKiE8IEVuYWJsZSBiYW5kZ2FwIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgKi8KKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdFTikgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0VOKQorICAgIGJvb2wgZW5hYmxlSW5Mb3dQb3dlck1vZGU7IC8qITwgRW5hYmxlIGJhbmRnYXAgYnVmZmVyIGluIGxvdy1wb3dlciBtb2RlLiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdFTiAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRFMpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRFMpCisgICAgcG1jX2JhbmRnYXBfYnVmZmVyX2RyaXZlX3NlbGVjdF90IGRyaXZlOyAvKiE8IEJhbmRnYXAgYnVmZmVyIGRyaXZlIHNlbGVjdC4gICAgICAgICAgICAgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRFMgKi8KK30gcG1jX2JhbmRnYXBfYnVmZmVyX2NvbmZpZ190OworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMqLworCisvKiEgQG5hbWUgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sbGVyIENvbnRyb2wgQVBJcyovCisvKkB7Ki8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfVkVSSUQpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfVkVSSUQpCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBQTUMgdmVyc2lvbiBJRC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIFBNQyB2ZXJzaW9uIElELCBpbmNsdWRpbmcgbWFqb3IgdmVyc2lvbiBudW1iZXIsCisgKiBtaW5vciB2ZXJzaW9uIG51bWJlciwgYW5kIGEgZmVhdHVyZSBzcGVjaWZpY2F0aW9uIG51bWJlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBQTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gdmVyc2lvbklkICAgICBQb2ludGVyIHRvIHZlcnNpb24gSUQgc3RydWN0dXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUE1DX0dldFZlcnNpb25JZChQTUNfVHlwZSAqYmFzZSwgcG1jX3ZlcnNpb25faWRfdCAqdmVyc2lvbklkKQoreworICAgICooKHVpbnQzMl90ICopdmVyc2lvbklkKSA9IGJhc2UtPlZFUklEOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BNQ19IQVNfVkVSSUQgKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfUEFSQU0pICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfUEFSQU0pCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBQTUMgcGFyYW1ldGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgUE1DIHBhcmFtZXRlciBpbmNsdWRpbmcgdGhlIFZMUE8gZW5hYmxlIGFuZCB0aGUgSFZEIGVuYWJsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBQTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gcGFyYW0gICAgICAgICBQb2ludGVyIHRvIFBNQyBwYXJhbSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgUE1DX0dldFBhcmFtKFBNQ19UeXBlICpiYXNlLCBwbWNfcGFyYW1fdCAqcGFyYW0pOworI2VuZGlmCisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIGxvdy12b2x0YWdlIGRldGVjdCBzZXR0aW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgbG93LXZvbHRhZ2UgZGV0ZWN0IHNldHRpbmcsIGluY2x1ZGluZyB0aGUgdHJpcAorICogcG9pbnQgdm9sdGFnZSBzZXR0aW5nLCBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBpbnRlcnJ1cHQsIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHN5c3RlbSByZXNldC4KKyAqCisgKiBAcGFyYW0gYmFzZSBQTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnICBMb3ctdm9sdGFnZSBkZXRlY3QgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgUE1DX0NvbmZpZ3VyZUxvd1ZvbHREZXRlY3QoUE1DX1R5cGUgKmJhc2UsIGNvbnN0IHBtY19sb3dfdm9sdF9kZXRlY3RfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIExvdy12b2x0YWdlIERldGVjdCBGbGFnIHN0YXR1cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uICByZWFkcyB0aGUgY3VycmVudCBMVkRGIHN0YXR1cy4gSWYgaXQgcmV0dXJucyAxLCBhIGxvdy12b2x0YWdlIGV2ZW50IGlzIGRldGVjdGVkLgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gQ3VycmVudCBsb3ctdm9sdGFnZSBkZXRlY3QgZmxhZworICogICAgICAgICAgICAgICAgLSB0cnVlOiBMb3ctdm9sdGFnZSBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgLSBmYWxzZTogTG93LXZvbHRhZ2Ugbm90IGRldGVjdGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBQTUNfR2V0TG93Vm9sdERldGVjdEZsYWcoUE1DX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChib29sKShiYXNlLT5MVkRTQzEgJiBQTUNfTFZEU0MxX0xWREZfTUFTSyk7Cit9CisKKy8qIQorICogQGJyaWVmIEFja25vd2xlZGdlcyBjbGVhcmluZyB0aGUgTG93LXZvbHRhZ2UgRGV0ZWN0IGZsYWcuCisgKgorICogVGhpcyBmdW5jdGlvbiBhY2tub3dsZWRnZXMgdGhlIGxvdy12b2x0YWdlIGRldGVjdGlvbiBlcnJvcnMgKHdyaXRlIDEgdG8KKyAqIGNsZWFyIExWREYpLgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBNQ19DbGVhckxvd1ZvbHREZXRlY3RGbGFnKFBNQ19UeXBlICpiYXNlKQoreworICAgIGJhc2UtPkxWRFNDMSB8PSBQTUNfTFZEU0MxX0xWREFDS19NQVNLOworfQorCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBsb3ctdm9sdGFnZSB3YXJuaW5nIHNldHRpbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBsb3ctdm9sdGFnZSB3YXJuaW5nIHNldHRpbmcsIGluY2x1ZGluZyB0aGUgdHJpcAorICogcG9pbnQgdm9sdGFnZSBzZXR0aW5nIGFuZCBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlIGludGVycnVwdC4KKyAqCisgKiBAcGFyYW0gYmFzZSBQTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnICBMb3ctdm9sdGFnZSB3YXJuaW5nIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIFBNQ19Db25maWd1cmVMb3dWb2x0V2FybmluZyhQTUNfVHlwZSAqYmFzZSwgY29uc3QgcG1jX2xvd192b2x0X3dhcm5pbmdfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIExvdy12b2x0YWdlIFdhcm5pbmcgRmxhZyBzdGF0dXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBwb2xscyB0aGUgY3VycmVudCBMVldGIHN0YXR1cy4gV2hlbiAxIGlzIHJldHVybmVkLCBpdAorICogaW5kaWNhdGVzIGEgbG93LXZvbHRhZ2Ugd2FybmluZyBldmVudC4gTFZXRiBpcyBzZXQgd2hlbiBWIFN1cHBseSB0cmFuc2l0aW9ucworICogYmVsb3cgdGhlIHRyaXAgcG9pbnQgb3IgYWZ0ZXIgcmVzZXQgYW5kIFYgU3VwcGx5IGlzIGFscmVhZHkgYmVsb3cgdGhlIFYgTFZXLgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gQ3VycmVudCBMVldGIHN0YXR1cworICogICAgICAgICAgICAgICAgICAtIHRydWU6IExvdy12b2x0YWdlIFdhcm5pbmcgRmxhZyBpcyBzZXQuCisgKiAgICAgICAgICAgICAgICAgIC0gZmFsc2U6IHRoZSAgTG93LXZvbHRhZ2UgV2FybmluZyBkb2VzIG5vdCBoYXBwZW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBQTUNfR2V0TG93Vm9sdFdhcm5pbmdGbGFnKFBNQ19UeXBlICpiYXNlKQoreworICAgIHJldHVybiAoYm9vbCkoYmFzZS0+TFZEU0MyICYgUE1DX0xWRFNDMl9MVldGX01BU0spOworfQorCisvKiEKKyAqIEBicmllZiBBY2tub3dsZWRnZXMgdGhlIExvdy12b2x0YWdlIFdhcm5pbmcgZmxhZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFja25vd2xlZGdlcyB0aGUgbG93IHZvbHRhZ2Ugd2FybmluZyBlcnJvcnMgKHdyaXRlIDEgdG8KKyAqIGNsZWFyIExWV0YpLgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBNQ19DbGVhckxvd1ZvbHRXYXJuaW5nRmxhZyhQTUNfVHlwZSAqYmFzZSkKK3sKKyAgICBiYXNlLT5MVkRTQzIgfD0gUE1DX0xWRFNDMl9MVldBQ0tfTUFTSzsKK30KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfSFZEU0MxKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0hWRFNDMSkKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIGhpZ2gtdm9sdGFnZSBkZXRlY3Qgc2V0dGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIGhpZ2gtdm9sdGFnZSBkZXRlY3Qgc2V0dGluZywgaW5jbHVkaW5nIHRoZSB0cmlwCisgKiBwb2ludCB2b2x0YWdlIHNldHRpbmcsIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgaW50ZXJydXB0LCBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlIHN5c3RlbSByZXNldC4KKyAqCisgKiBAcGFyYW0gYmFzZSBQTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnICBIaWdoLXZvbHRhZ2UgZGV0ZWN0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIFBNQ19Db25maWd1cmVIaWdoVm9sdERldGVjdChQTUNfVHlwZSAqYmFzZSwgY29uc3QgcG1jX2hpZ2hfdm9sdF9kZXRlY3RfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIEhpZ2gtdm9sdGFnZSBEZXRlY3QgRmxhZyBzdGF0dXMuCisgKgorICogVGhpcyBmdW5jdGlvbiAgcmVhZHMgdGhlIGN1cnJlbnQgSFZERiBzdGF0dXMuIElmIGl0IHJldHVybnMgMSwgYSBsb3cKKyAqIHZvbHRhZ2UgZXZlbnQgaXMgZGV0ZWN0ZWQuCisgKgorICogQHBhcmFtIGJhc2UgUE1DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBDdXJyZW50IGhpZ2gtdm9sdGFnZSBkZXRlY3QgZmxhZworICogICAgICAgICAgICAgICAgLSB0cnVlOiBIaWdoLXZvbHRhZ2UgZGV0ZWN0ZWQKKyAqICAgICAgICAgICAgICAgIC0gZmFsc2U6IEhpZ2gtdm9sdGFnZSBub3QgZGV0ZWN0ZWQKKyAqLworc3RhdGljIGlubGluZSBib29sIFBNQ19HZXRIaWdoVm9sdERldGVjdEZsYWcoUE1DX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChib29sKShiYXNlLT5IVkRTQzEgJiBQTUNfSFZEU0MxX0hWREZfTUFTSyk7Cit9CisKKy8qIQorICogQGJyaWVmIEFja25vd2xlZGdlcyBjbGVhcmluZyB0aGUgSGlnaC12b2x0YWdlIERldGVjdCBmbGFnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWNrbm93bGVkZ2VzIHRoZSBoaWdoLXZvbHRhZ2UgZGV0ZWN0aW9uIGVycm9ycyAod3JpdGUgMSB0bworICogY2xlYXIgSFZERikuCisgKgorICogQHBhcmFtIGJhc2UgUE1DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUE1DX0NsZWFySGlnaFZvbHREZXRlY3RGbGFnKFBNQ19UeXBlICpiYXNlKQoreworICAgIGJhc2UtPkhWRFNDMSB8PSBQTUNfSFZEU0MxX0hWREFDS19NQVNLOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BNQ19IQVNfSFZEU0MxICovCisKKyNpZiAoKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JFKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkUpIHx8IFwKKyAgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0VOKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHRU4pIHx8IFwKKyAgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUykgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUykpCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBQTUMgYmFuZGdhcC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIFBNQyBiYW5kZ2FwLCBpbmNsdWRpbmcgdGhlIGRyaXZlIHNlbGVjdCBhbmQKKyAqIGJlaGF2aW9yIGluIGxvdy1wb3dlciBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAqLwordm9pZCBQTUNfQ29uZmlndXJlQmFuZGdhcEJ1ZmZlcihQTUNfVHlwZSAqYmFzZSwgY29uc3QgcG1jX2JhbmRnYXBfYnVmZmVyX2NvbmZpZ190ICpjb25maWcpOworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0FDS0lTTykgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19BQ0tJU08pCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBhY2tub3dsZWRnZSBQZXJpcGhlcmFscyBhbmQgSS9PIHBhZHMgaXNvbGF0aW9uIGZsYWcuCisgKgorICogVGhpcyBmdW5jdGlvbiAgcmVhZHMgdGhlIEFja25vd2xlZGdlIElzb2xhdGlvbiBzZXR0aW5nIHRoYXQgaW5kaWNhdGVzCisgKiB3aGV0aGVyIGNlcnRhaW4gcGVyaXBoZXJhbHMgYW5kIHRoZSBJL08gcGFkcyBhcmUgaW4gYSBsYXRjaGVkIHN0YXRlIGFzCisgKiBhIHJlc3VsdCBvZiBoYXZpbmcgYmVlbiBpbiB0aGUgVkxMUyBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBiYXNlICBCYXNlIGFkZHJlc3MgZm9yIGN1cnJlbnQgUE1DIGluc3RhbmNlLgorICogQHJldHVybiBBQ0sgaXNvbGF0aW9uCisgKiAgICAgICAgICAgICAgIDAgLSBQZXJpcGhlcmFscyBhbmQgSS9PIHBhZHMgYXJlIGluIGEgbm9ybWFsIHJ1biBzdGF0ZS4KKyAqICAgICAgICAgICAgICAgMSAtIENlcnRhaW4gcGVyaXBoZXJhbHMgYW5kIEkvTyBwYWRzIGFyZSBpbiBhbiBpc29sYXRlZCBhbmQKKyAqICAgICAgICAgICAgICAgICAgIGxhdGNoZWQgc3RhdGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBQTUNfR2V0UGVyaXBoSU9Jc29sYXRpb25GbGFnKFBNQ19UeXBlICpiYXNlKQoreworICAgIHJldHVybiAoYm9vbCkoYmFzZS0+UkVHU0MgJiBQTUNfUkVHU0NfQUNLSVNPX01BU0spOworfQorCisvKiEKKyAqIEBicmllZiBBY2tub3dsZWRnZXMgdGhlIGlzb2xhdGlvbiBmbGFnIHRvIFBlcmlwaGVyYWxzIGFuZCBJL08gcGFkcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uICBjbGVhcnMgdGhlIEFDSyBJc29sYXRpb24gZmxhZy4gV3JpdGluZyBvbmUgdG8gdGhpcyBzZXR0aW5nCisgKiB3aGVuIGl0IGlzIHNldCByZWxlYXNlcyB0aGUgSS9PIHBhZHMgYW5kIGNlcnRhaW4gcGVyaXBoZXJhbHMgdG8gdGhlaXIgbm9ybWFsCisgKiBydW4gbW9kZSBzdGF0ZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBQTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQTUNfQ2xlYXJQZXJpcGhJT0lzb2xhdGlvbkZsYWcoUE1DX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+UkVHU0MgfD0gUE1DX1JFR1NDX0FDS0lTT19NQVNLOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BNQ19IQVNfQUNLSVNPICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX1JFR09OUykgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19SRUdPTlMpCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSByZWd1bGF0b3IgcmVndWxhdGlvbiBzdGF0dXMuCisgKgorICogVGhpcyBmdW5jdGlvbiAgcmV0dXJucyB0aGUgcmVndWxhdG9yIHRvIHJ1biBhIHJlZ3VsYXRpb24gc3RhdHVzLiBJdCBwcm92aWRlcworICogdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBpbnRlcm5hbCB2b2x0YWdlIHJlZ3VsYXRvci4KKyAqCisgKiBAcGFyYW0gYmFzZSBQTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gYmFzZSAgQmFzZSBhZGRyZXNzIGZvciBjdXJyZW50IFBNQyBpbnN0YW5jZS4KKyAqIEByZXR1cm4gUmVndWxhdGlvbiBzdGF0dXMKKyAqICAgICAgICAgICAgICAgMCAtIFJlZ3VsYXRvciBpcyBpbiBhIHN0b3AgcmVndWxhdGlvbiBvciBpbiB0cmFuc2l0aW9uIHRvL2Zyb20gdGhlIHJlZ3VsYXRpb24uCisgKiAgICAgICAgICAgICAgIDEgLSBSZWd1bGF0b3IgaXMgaW4gYSBydW4gcmVndWxhdGlvbi4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBQTUNfSXNSZWd1bGF0b3JJblJ1blJlZ3VsYXRpb24oUE1DX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChib29sKShiYXNlLT5SRUdTQyAmIFBNQ19SRUdTQ19SRUdPTlNfTUFTSyk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19SRUdPTlMgKi8KKworLypAfSovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzKi8KKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfUE1DX0hfKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BvcnQuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjhlNzdlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcG9ydC5oCkBAIC0wLDAgKzEsNDMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9QT1JUX0hfCisjZGVmaW5lIF9GU0xfUE9SVF9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIHBvcnQKKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIFZlcnNpb24gMi4wLjIuICovCisjZGVmaW5lIEZTTF9QT1JUX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMikpCisvKkB9Ki8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUFVMTF9FTkFCTEUpICYmIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BVTExfRU5BQkxFCisvKiEgQGJyaWVmIEludGVybmFsIHJlc2lzdG9yIHB1bGwgZmVhdHVyZSBzZWxlY3Rpb24gKi8KK2VudW0gX3BvcnRfcHVsbAoreworICAgIGtQT1JUX1B1bGxEaXNhYmxlID0gMFUsIC8qITwgSW50ZXJuYWwgcHVsbC11cC9kb3duIHJlc2lzdG9yIGlzIGRpc2FibGVkLiAqLworICAgIGtQT1JUX1B1bGxEb3duID0gMlUsICAgIC8qITwgSW50ZXJuYWwgcHVsbC1kb3duIHJlc2lzdG9yIGlzIGVuYWJsZWQuICovCisgICAga1BPUlRfUHVsbFVwID0gM1UsICAgICAgLyohPCBJbnRlcm5hbCBwdWxsLXVwIHJlc2lzdG9yIGlzIGVuYWJsZWQuICovCit9OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BVTExfRU5BQkxFICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfSEFTX1NMRVdfUkFURSkgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfU0xFV19SQVRFCisvKiEgQGJyaWVmIFNsZXcgcmF0ZSBzZWxlY3Rpb24gKi8KK2VudW0gX3BvcnRfc2xld19yYXRlCit7CisgICAga1BPUlRfRmFzdFNsZXdSYXRlID0gMFUsIC8qITwgRmFzdCBzbGV3IHJhdGUgaXMgY29uZmlndXJlZC4gKi8KKyAgICBrUE9SVF9TbG93U2xld1JhdGUgPSAxVSwgLyohPCBTbG93IHNsZXcgcmF0ZSBpcyBjb25maWd1cmVkLiAqLworfTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QT1JUX0hBU19TTEVXX1JBVEUgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfT1BFTl9EUkFJTikgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfT1BFTl9EUkFJTgorLyohIEBicmllZiBPcGVuIERyYWluIGZlYXR1cmUgZW5hYmxlL2Rpc2FibGUgKi8KK2VudW0gX3BvcnRfb3Blbl9kcmFpbl9lbmFibGUKK3sKKyAgICBrUE9SVF9PcGVuRHJhaW5EaXNhYmxlID0gMFUsIC8qITwgT3BlbiBkcmFpbiBvdXRwdXQgaXMgZGlzYWJsZWQuICovCisgICAga1BPUlRfT3BlbkRyYWluRW5hYmxlID0gMVUsICAvKiE8IE9wZW4gZHJhaW4gb3V0cHV0IGlzIGVuYWJsZWQuICovCit9OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfSEFTX09QRU5fRFJBSU4gKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUEFTU0lWRV9GSUxURVIpICYmIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BBU1NJVkVfRklMVEVSCisvKiEgQGJyaWVmIFBhc3NpdmUgZmlsdGVyIGZlYXR1cmUgZW5hYmxlL2Rpc2FibGUgKi8KK2VudW0gX3BvcnRfcGFzc2l2ZV9maWx0ZXJfZW5hYmxlCit7CisgICAga1BPUlRfUGFzc2l2ZUZpbHRlckRpc2FibGUgPSAwVSwgLyohPCBQYXNzaXZlIGlucHV0IGZpbHRlciBpcyBkaXNhYmxlZC4gKi8KKyAgICBrUE9SVF9QYXNzaXZlRmlsdGVyRW5hYmxlID0gMVUsICAvKiE8IFBhc3NpdmUgaW5wdXQgZmlsdGVyIGlzIGVuYWJsZWQuICovCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RSSVZFX1NUUkVOR1RIKSAmJiBGU0xfRkVBVFVSRV9QT1JUX0hBU19EUklWRV9TVFJFTkdUSAorLyohIEBicmllZiBDb25maWd1cmVzIHRoZSBkcml2ZSBzdHJlbmd0aC4gKi8KK2VudW0gX3BvcnRfZHJpdmVfc3RyZW5ndGgKK3sKKyAgICBrUE9SVF9Mb3dEcml2ZVN0cmVuZ3RoID0gMFUsICAvKiE8IExvdy1kcml2ZSBzdHJlbmd0aCBpcyBjb25maWd1cmVkLiAqLworICAgIGtQT1JUX0hpZ2hEcml2ZVN0cmVuZ3RoID0gMVUsIC8qITwgSGlnaC1kcml2ZSBzdHJlbmd0aCBpcyBjb25maWd1cmVkLiAqLworfTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QT1JUX0hBU19EUklWRV9TVFJFTkdUSCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX0hBU19QSU5fQ09OVFJPTF9MT0NLKSAmJiBGU0xfRkVBVFVSRV9QT1JUX0hBU19QSU5fQ09OVFJPTF9MT0NLCisvKiEgQGJyaWVmIFVubG9jay9sb2NrIHRoZSBwaW4gY29udHJvbCByZWdpc3RlciBmaWVsZFsxNTowXSAqLworZW51bSBfcG9ydF9sb2NrX3JlZ2lzdGVyCit7CisgICAga1BPUlRfVW5sb2NrUmVnaXN0ZXIgPSAwVSwgLyohPCBQaW4gQ29udHJvbCBSZWdpc3RlciBmaWVsZHMgWzE1OjBdIGFyZSBub3QgbG9ja2VkLiAqLworICAgIGtQT1JUX0xvY2tSZWdpc3RlciA9IDFVLCAgIC8qITwgUGluIENvbnRyb2wgUmVnaXN0ZXIgZmllbGRzIFsxNTowXSBhcmUgbG9ja2VkLiAqLworfTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QT1JUX0hBU19QSU5fQ09OVFJPTF9MT0NLICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfUENSX01VWF9XSURUSCkgJiYgRlNMX0ZFQVRVUkVfUE9SVF9QQ1JfTVVYX1dJRFRICisvKiEgQGJyaWVmIFBpbiBtdXggc2VsZWN0aW9uICovCit0eXBlZGVmIGVudW0gX3BvcnRfbXV4Cit7CisgICAga1BPUlRfUGluRGlzYWJsZWRPckFuYWxvZyA9IDBVLCAvKiE8IENvcnJlc3BvbmRpbmcgcGluIGlzIGRpc2FibGVkLCBidXQgaXMgdXNlZCBhcyBhbiBhbmFsb2cgcGluLiAqLworICAgIGtQT1JUX011eEFzR3BpbyA9IDFVLCAgICAgICAgICAgLyohPCBDb3JyZXNwb25kaW5nIHBpbiBpcyBjb25maWd1cmVkIGFzIEdQSU8uICovCisgICAga1BPUlRfTXV4QWx0MiA9IDJVLCAgICAgICAgICAgICAvKiE8IENoaXAtc3BlY2lmaWMgKi8KKyAgICBrUE9SVF9NdXhBbHQzID0gM1UsICAgICAgICAgICAgIC8qITwgQ2hpcC1zcGVjaWZpYyAqLworICAgIGtQT1JUX011eEFsdDQgPSA0VSwgICAgICAgICAgICAgLyohPCBDaGlwLXNwZWNpZmljICovCisgICAga1BPUlRfTXV4QWx0NSA9IDVVLCAgICAgICAgICAgICAvKiE8IENoaXAtc3BlY2lmaWMgKi8KKyAgICBrUE9SVF9NdXhBbHQ2ID0gNlUsICAgICAgICAgICAgIC8qITwgQ2hpcC1zcGVjaWZpYyAqLworICAgIGtQT1JUX011eEFsdDcgPSA3VSwgICAgICAgICAgICAgLyohPCBDaGlwLXNwZWNpZmljICovCisgICAga1BPUlRfTXV4QWx0OCA9IDhVLCAgICAgICAgICAgICAvKiE8IENoaXAtc3BlY2lmaWMgKi8KKyAgICBrUE9SVF9NdXhBbHQ5ID0gOVUsICAgICAgICAgICAgIC8qITwgQ2hpcC1zcGVjaWZpYyAqLworICAgIGtQT1JUX011eEFsdDEwID0gMTBVLCAgICAgICAgICAgLyohPCBDaGlwLXNwZWNpZmljICovCisgICAga1BPUlRfTXV4QWx0MTEgPSAxMVUsICAgICAgICAgICAvKiE8IENoaXAtc3BlY2lmaWMgKi8KKyAgICBrUE9SVF9NdXhBbHQxMiA9IDEyVSwgICAgICAgICAgIC8qITwgQ2hpcC1zcGVjaWZpYyAqLworICAgIGtQT1JUX011eEFsdDEzID0gMTNVLCAgICAgICAgICAgLyohPCBDaGlwLXNwZWNpZmljICovCisgICAga1BPUlRfTXV4QWx0MTQgPSAxNFUsICAgICAgICAgICAvKiE8IENoaXAtc3BlY2lmaWMgKi8KKyAgICBrUE9SVF9NdXhBbHQxNSA9IDE1VSwgICAgICAgICAgIC8qITwgQ2hpcC1zcGVjaWZpYyAqLworfSBwb3J0X211eF90OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfUENSX01VWF9XSURUSCAqLworCisvKiEgQGJyaWVmIENvbmZpZ3VyZXMgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIGNvbmRpdGlvbi4gKi8KK3R5cGVkZWYgZW51bSBfcG9ydF9pbnRlcnJ1cHQKK3sKKyAgICBrUE9SVF9JbnRlcnJ1cHRPckRNQURpc2FibGVkID0gMHgwVSwgLyohPCBJbnRlcnJ1cHQvRE1BIHJlcXVlc3QgaXMgZGlzYWJsZWQuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX0hBU19ETUFfUkVRVUVTVCkgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfRE1BX1JFUVVFU1QKKyAgICBrUE9SVF9ETUFSaXNpbmdFZGdlID0gMHgxVSwgIC8qITwgRE1BIHJlcXVlc3Qgb24gcmlzaW5nIGVkZ2UuICovCisgICAga1BPUlRfRE1BRmFsbGluZ0VkZ2UgPSAweDJVLCAvKiE8IERNQSByZXF1ZXN0IG9uIGZhbGxpbmcgZWRnZS4gKi8KKyAgICBrUE9SVF9ETUFFaXRoZXJFZGdlID0gMHgzVSwgIC8qITwgRE1BIHJlcXVlc3Qgb24gZWl0aGVyIGVkZ2UuICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfSEFTX0lSUUNfRkxBRykgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfSVJRQ19GTEFHCisgICAga1BPUlRfRmxhZ1Jpc2luZ0VkZ2UgPSAweDA1VSwgIC8qITwgRmxhZyBzZXRzIG9uIHJpc2luZyBlZGdlLiAqLworICAgIGtQT1JUX0ZsYWdGYWxsaW5nRWRnZSA9IDB4MDZVLCAvKiE8IEZsYWcgc2V0cyBvbiBmYWxsaW5nIGVkZ2UuICovCisgICAga1BPUlRfRmxhZ0VpdGhlckVkZ2UgPSAweDA3VSwgIC8qITwgRmxhZyBzZXRzIG9uIGVpdGhlciBlZGdlLiAqLworI2VuZGlmCisgICAga1BPUlRfSW50ZXJydXB0TG9naWNaZXJvID0gMHg4VSwgICAvKiE8IEludGVycnVwdCB3aGVuIGxvZ2ljIHplcm8uICovCisgICAga1BPUlRfSW50ZXJydXB0UmlzaW5nRWRnZSA9IDB4OVUsICAvKiE8IEludGVycnVwdCBvbiByaXNpbmcgZWRnZS4gKi8KKyAgICBrUE9SVF9JbnRlcnJ1cHRGYWxsaW5nRWRnZSA9IDB4QVUsIC8qITwgSW50ZXJydXB0IG9uIGZhbGxpbmcgZWRnZS4gKi8KKyAgICBrUE9SVF9JbnRlcnJ1cHRFaXRoZXJFZGdlID0gMHhCVSwgIC8qITwgSW50ZXJydXB0IG9uIGVpdGhlciBlZGdlLiAqLworICAgIGtQT1JUX0ludGVycnVwdExvZ2ljT25lID0gMHhDVSwgICAgLyohPCBJbnRlcnJ1cHQgd2hlbiBsb2dpYyBvbmUuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX0hBU19JUlFDX1RSSUdHRVIpICYmIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0lSUUNfVFJJR0dFUgorICAgIGtQT1JUX0FjdGl2ZUhpZ2hUcmlnZ2VyT3V0cHV0RW5hYmxlID0gMHhEVSwgLyohPCBFbmFibGUgYWN0aXZlIGhpZ2gtdHJpZ2dlciBvdXRwdXQuICovCisgICAga1BPUlRfQWN0aXZlTG93VHJpZ2dlck91dHB1dEVuYWJsZSA9IDB4RVUsICAvKiE8IEVuYWJsZSBhY3RpdmUgbG93LXRyaWdnZXIgb3V0cHV0LiAqLworI2VuZGlmCit9IHBvcnRfaW50ZXJydXB0X3Q7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RJR0lUQUxfRklMVEVSKSAmJiBGU0xfRkVBVFVSRV9QT1JUX0hBU19ESUdJVEFMX0ZJTFRFUgorLyohIEBicmllZiBEaWdpdGFsIGZpbHRlciBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uICovCit0eXBlZGVmIGVudW0gX3BvcnRfZGlnaXRhbF9maWx0ZXJfY2xvY2tfc291cmNlCit7CisgICAga1BPUlRfQnVzQ2xvY2sgPSAwVSwgLyohPCBEaWdpdGFsIGZpbHRlcnMgYXJlIGNsb2NrZWQgYnkgdGhlIGJ1cyBjbG9jay4gKi8KKyAgICBrUE9SVF9McG9DbG9jayA9IDFVLCAvKiE8IERpZ2l0YWwgZmlsdGVycyBhcmUgY2xvY2tlZCBieSB0aGUgMSBrSHogTFBPIGNsb2NrLiAqLworfSBwb3J0X2RpZ2l0YWxfZmlsdGVyX2Nsb2NrX3NvdXJjZV90OworCisvKiEgQGJyaWVmIFBPUlQgZGlnaXRhbCBmaWx0ZXIgZmVhdHVyZSBjb25maWd1cmF0aW9uIGRlZmluaXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IF9wb3J0X2RpZ2l0YWxfZmlsdGVyX2NvbmZpZworeworICAgIHVpbnQzMl90IGRpZ2l0YWxGaWx0ZXJXaWR0aDsgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IGRpZ2l0YWwgZmlsdGVyIHdpZHRoICovCisgICAgcG9ydF9kaWdpdGFsX2ZpbHRlcl9jbG9ja19zb3VyY2VfdCBjbG9ja1NvdXJjZTsgLyohPCBTZXQgZGlnaXRhbCBmaWx0ZXIgY2xvY2tTb3VyY2UgKi8KK30gcG9ydF9kaWdpdGFsX2ZpbHRlcl9jb25maWdfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QT1JUX0hBU19ESUdJVEFMX0ZJTFRFUiAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX1BDUl9NVVhfV0lEVEgpICYmIEZTTF9GRUFUVVJFX1BPUlRfUENSX01VWF9XSURUSAorLyohIEBicmllZiBQT1JUIHBpbiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgX3BvcnRfcGluX2NvbmZpZworeworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUFVMTF9FTkFCTEUpICYmIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BVTExfRU5BQkxFCisgICAgdWludDE2X3QgcHVsbFNlbGVjdCA6IDI7IC8qITwgTm8tcHVsbC9wdWxsLWRvd24vcHVsbC11cCBzZWxlY3QgKi8KKyNlbHNlCisgICAgdWludDE2X3QgOiAyOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BVTExfRU5BQkxFICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfSEFTX1NMRVdfUkFURSkgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfU0xFV19SQVRFCisgICAgdWludDE2X3Qgc2xld1JhdGUgOiAxOyAvKiE8IEZhc3Qvc2xvdyBzbGV3IHJhdGUgQ29uZmlndXJlICovCisjZWxzZQorICAgIHVpbnQxNl90IDogMTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QT1JUX0hBU19TTEVXX1JBVEUgKi8KKworICAgIHVpbnQxNl90IDogMTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUEFTU0lWRV9GSUxURVIpICYmIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BBU1NJVkVfRklMVEVSCisgICAgdWludDE2X3QgcGFzc2l2ZUZpbHRlckVuYWJsZSA6IDE7IC8qITwgUGFzc2l2ZSBmaWx0ZXIgZW5hYmxlL2Rpc2FibGUgKi8KKyNlbHNlCisgICAgdWludDE2X3QgOiAxOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BBU1NJVkVfRklMVEVSICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfSEFTX09QRU5fRFJBSU4pICYmIEZTTF9GRUFUVVJFX1BPUlRfSEFTX09QRU5fRFJBSU4KKyAgICB1aW50MTZfdCBvcGVuRHJhaW5FbmFibGUgOiAxOyAvKiE8IE9wZW4gZHJhaW4gZW5hYmxlL2Rpc2FibGUgKi8KKyNlbHNlCisgICAgdWludDE2X3QgOiAxOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfSEFTX09QRU5fRFJBSU4gKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfRFJJVkVfU1RSRU5HVEgpICYmIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RSSVZFX1NUUkVOR1RICisgICAgdWludDE2X3QgZHJpdmVTdHJlbmd0aCA6IDE7IC8qITwgRmFzdC9zbG93IGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyZSAqLworI2Vsc2UKKyAgICB1aW50MTZfdCA6IDE7CisjZW5kaWYKKworICAgIHVpbnQxNl90IDogMTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9QQ1JfTVVYX1dJRFRIKSAmJiBGU0xfRkVBVFVSRV9QT1JUX1BDUl9NVVhfV0lEVEgKKyAgICB1aW50MTZfdCBtdXggOiAzOyAvKiE8IFBpbiBtdXggQ29uZmlndXJlICovCisjZWxzZQorICAgIHVpbnQxNl90IDogMzsKKyNlbmRpZgorCisgICAgdWludDE2X3QgOiA0OworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX0hBU19QSU5fQ09OVFJPTF9MT0NLKSAmJiBGU0xfRkVBVFVSRV9QT1JUX0hBU19QSU5fQ09OVFJPTF9MT0NLCisgICAgdWludDE2X3QgbG9ja1JlZ2lzdGVyIDogMTsgLyohPCBMb2NrL3VubG9jayB0aGUgUENSIGZpZWxkWzE1OjBdICovCisjZWxzZQorICAgIHVpbnQxNl90IDogMTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QT1JUX0hBU19QSU5fQ09OVFJPTF9MT0NLICovCit9IHBvcnRfcGluX2NvbmZpZ190OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfUENSX01VWF9XSURUSCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBBUEkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX1BDUl9NVVhfV0lEVEgpICYmIEZTTF9GRUFUVVJFX1BPUlRfUENSX01VWF9XSURUSAorLyohIEBuYW1lIENvbmZpZ3VyYXRpb24gKi8KKy8qQHsqLworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBwb3J0IFBDUiByZWdpc3Rlci4KKyAqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgdG8gZGVmaW5lIGFuIGlucHV0IHBpbiBvciBvdXRwdXQgcGluIFBDUiBjb25maWd1cmF0aW9uLgorICogQGNvZGUKKyAqIC8vIERlZmluZSBhIGRpZ2l0YWwgaW5wdXQgcGluIFBDUiBjb25maWd1cmF0aW9uCisgKiBwb3J0X3Bpbl9jb25maWdfdCBjb25maWcgPSB7CisgKiAgICAgIGtQT1JUX1B1bGxVcCwKKyAqICAgICAga1BPUlRfRmFzdFNsZXdSYXRlLAorICogICAgICBrUE9SVF9QYXNzaXZlRmlsdGVyRGlzYWJsZSwKKyAqICAgICAga1BPUlRfT3BlbkRyYWluRGlzYWJsZSwKKyAqICAgICAga1BPUlRfTG93RHJpdmVTdHJlbmd0aCwKKyAqICAgICAga1BPUlRfTXV4QXNHcGlvLAorICogICAgICBrUE9SVF9VbkxvY2tSZWdpc3RlciwKKyAqIH07CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlICAgUE9SVCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSBwaW4gICAgUE9SVCBwaW4gbnVtYmVyLgorICogQHBhcmFtIGNvbmZpZyBQT1JUIFBDUiByZWdpc3RlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBPUlRfU2V0UGluQ29uZmlnKFBPUlRfVHlwZSAqYmFzZSwgdWludDMyX3QgcGluLCBjb25zdCBwb3J0X3Bpbl9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworICAgIHVpbnQzMl90IGFkZHIgPSAodWludDMyX3QpJmJhc2UtPlBDUltwaW5dOworICAgICoodm9sYXRpbGUgdWludDE2X3QgKikoYWRkcikgPSAqKChjb25zdCB1aW50MTZfdCAqKWNvbmZpZyk7Cit9CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIHBvcnQgUENSIHJlZ2lzdGVyIGZvciBtdWx0aXBsZSBwaW5zLgorICoKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSB0byBkZWZpbmUgaW5wdXQgcGlucyBvciBvdXRwdXQgcGlucyBQQ1IgY29uZmlndXJhdGlvbi4KKyAqIEBjb2RlCisgKiAvLyBEZWZpbmUgYSBkaWdpdGFsIGlucHV0IHBpbiBQQ1IgY29uZmlndXJhdGlvbgorICogcG9ydF9waW5fY29uZmlnX3QgY29uZmlnID0geworICogICAgICBrUE9SVF9QdWxsVXAgLAorICogICAgICBrUE9SVF9QdWxsRW5hYmxlLAorICogICAgICBrUE9SVF9GYXN0U2xld1JhdGUsCisgKiAgICAgIGtQT1JUX1Bhc3NpdmVGaWx0ZXJEaXNhYmxlLAorICogICAgICBrUE9SVF9PcGVuRHJhaW5EaXNhYmxlLAorICogICAgICBrUE9SVF9Mb3dEcml2ZVN0cmVuZ3RoLAorICogICAgICBrUE9SVF9NdXhBc0dwaW8sCisgKiAgICAgIGtQT1JUX1VubG9ja1JlZ2lzdGVyLAorICogfTsKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgICBQT1JUIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIG1hc2sgICBQT1JUIHBpbiBudW1iZXIgbWFjcm8uCisgKiBAcGFyYW0gY29uZmlnIFBPUlQgUENSIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUE9SVF9TZXRNdWx0aXBsZVBpbnNDb25maWcoUE9SVF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrLCBjb25zdCBwb3J0X3Bpbl9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisgICAgdWludDE2X3QgcGNybCA9ICooKGNvbnN0IHVpbnQxNl90ICopY29uZmlnKTsKKworICAgIGlmIChtYXNrICYgMHhmZmZmVSkKKyAgICB7CisgICAgICAgIGJhc2UtPkdQQ0xSID0gKChtYXNrICYgMHhmZmZmVSkgPDwgMTYpIHwgcGNybDsKKyAgICB9CisgICAgaWYgKG1hc2sgPj4gMTYpCisgICAgeworICAgICAgICBiYXNlLT5HUENIUiA9IChtYXNrICYgMHhmZmZmMDAwMFUpIHwgcGNybDsKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHBpbiBtdXhpbmcuCisgKgorICogQHBhcmFtIGJhc2UgIFBPUlQgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gcGluICAgUE9SVCBwaW4gbnVtYmVyLgorICogQHBhcmFtIG11eCAgIHBpbiBtdXhpbmcgc2xvdCBzZWxlY3Rpb24uCisgKiAgICAgICAgLSAja1BPUlRfUGluRGlzYWJsZWRPckFuYWxvZzogUGluIGRpc2FibGVkIG9yIHdvcmsgaW4gYW5hbG9nIGZ1bmN0aW9uLgorICogICAgICAgIC0gI2tQT1JUX011eEFzR3BpbyAgICAgICAgICA6IFNldCBhcyBHUElPLgorICogICAgICAgIC0gI2tQT1JUX011eEFsdDIgICAgICAgICAgICA6IGNoaXAtc3BlY2lmaWMuCisgKiAgICAgICAgLSAja1BPUlRfTXV4QWx0MyAgICAgICAgICAgIDogY2hpcC1zcGVjaWZpYy4KKyAqICAgICAgICAtICNrUE9SVF9NdXhBbHQ0ICAgICAgICAgICAgOiBjaGlwLXNwZWNpZmljLgorICogICAgICAgIC0gI2tQT1JUX011eEFsdDUgICAgICAgICAgICA6IGNoaXAtc3BlY2lmaWMuCisgKiAgICAgICAgLSAja1BPUlRfTXV4QWx0NiAgICAgICAgICAgIDogY2hpcC1zcGVjaWZpYy4KKyAqICAgICAgICAtICNrUE9SVF9NdXhBbHQ3ICAgICAgICAgICAgOiBjaGlwLXNwZWNpZmljLgorICogQE5vdGUgOiBUaGlzIGZ1bmN0aW9uIGlzIE5PVCByZWNvbW1lbmRlZCB0byB1c2UgdG9nZXRoZXIgd2l0aCB0aGUgUE9SVF9TZXRQaW5zQ29uZmlnLCBiZWNhdXNlCisgKiAgICAgICAgIHRoZSBQT1JUX1NldFBpbnNDb25maWcgbmVlZCB0byBjb25maWd1cmUgdGhlIHBpbiBtdXggYW55d2F5IChPdGhlcndpc2UgdGhlIHBpbiBtdXggaXMKKyAqICAgICAgICAgcmVzZXQgdG8gemVybyA6IGtQT1JUX1BpbkRpc2FibGVkT3JBbmFsb2cpLgorICogICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRvIHJlc2V0IHRoZSBwaW4gbXV4CisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUE9SVF9TZXRQaW5NdXgoUE9SVF9UeXBlICpiYXNlLCB1aW50MzJfdCBwaW4sIHBvcnRfbXV4X3QgbXV4KQoreworICAgIGJhc2UtPlBDUltwaW5dID0gKGJhc2UtPlBDUltwaW5dICYgflBPUlRfUENSX01VWF9NQVNLKSB8IFBPUlRfUENSX01VWChtdXgpOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfUENSX01VWF9XSURUSCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX0hBU19ESUdJVEFMX0ZJTFRFUikgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfRElHSVRBTF9GSUxURVIKKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgZGlnaXRhbCBmaWx0ZXIgaW4gb25lIHBvcnQsIGVhY2ggYml0IG9mIHRoZSAzMi1iaXQgcmVnaXN0ZXIgcmVwcmVzZW50cyBvbmUgcGluLgorICoKKyAqIEBwYXJhbSBiYXNlICBQT1JUIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIG1hc2sgIFBPUlQgcGluIG51bWJlciBtYWNyby4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBPUlRfRW5hYmxlUGluc0RpZ2l0YWxGaWx0ZXIoUE9SVF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlID09IHRydWUpCisgICAgeworICAgICAgICBiYXNlLT5ERkVSIHw9IG1hc2s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkRGRVIgJj0gfm1hc2s7CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBkaWdpdGFsIGZpbHRlciBpbiBvbmUgcG9ydCwgZWFjaCBiaXQgb2YgdGhlIDMyLWJpdCByZWdpc3RlciByZXByZXNlbnRzIG9uZSBwaW4uCisgKgorICogQHBhcmFtIGJhc2UgICBQT1JUIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIGNvbmZpZyBQT1JUIGRpZ2l0YWwgZmlsdGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUE9SVF9TZXREaWdpdGFsRmlsdGVyQ29uZmlnKFBPUlRfVHlwZSAqYmFzZSwgY29uc3QgcG9ydF9kaWdpdGFsX2ZpbHRlcl9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisgICAgYmFzZS0+REZDUiA9IFBPUlRfREZDUl9DUyhjb25maWctPmNsb2NrU291cmNlKTsKKyAgICBiYXNlLT5ERldSID0gUE9SVF9ERldSX0ZJTFQoY29uZmlnLT5kaWdpdGFsRmlsdGVyV2lkdGgpOworfQorCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE9SVF9IQVNfRElHSVRBTF9GSUxURVIgKi8KKworLypAfSovCisKKy8qISBAbmFtZSBJbnRlcnJ1cHQgKi8KKy8qQHsqLworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBwb3J0IHBpbiBpbnRlcnJ1cHQvRE1BIHJlcXVlc3QuCisgKgorICogQHBhcmFtIGJhc2UgICAgUE9SVCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSBwaW4gICAgIFBPUlQgcGluIG51bWJlci4KKyAqIEBwYXJhbSBjb25maWcgIFBPUlQgcGluIGludGVycnVwdCBjb25maWd1cmF0aW9uLgorICogICAgICAgIC0gI2tQT1JUX0ludGVycnVwdE9yRE1BRGlzYWJsZWQ6IEludGVycnVwdC9ETUEgcmVxdWVzdCBkaXNhYmxlZC4KKyAqICAgICAgICAtICNrUE9SVF9ETUFSaXNpbmdFZGdlIDogRE1BIHJlcXVlc3Qgb24gcmlzaW5nIGVkZ2UoaWYgdGhlIERNQSByZXF1ZXN0cyBleGl0KS4KKyAqICAgICAgICAtICNrUE9SVF9ETUFGYWxsaW5nRWRnZTogRE1BIHJlcXVlc3Qgb24gZmFsbGluZyBlZGdlKGlmIHRoZSBETUEgcmVxdWVzdHMgZXhpdCkuCisgKiAgICAgICAgLSAja1BPUlRfRE1BRWl0aGVyRWRnZSA6IERNQSByZXF1ZXN0IG9uIGVpdGhlciBlZGdlKGlmIHRoZSBETUEgcmVxdWVzdHMgZXhpdCkuCisgKiAgICAgICAgLSAja1BPUlRfRmxhZ1Jpc2luZ0VkZ2UgOiBGbGFnIHNldHMgb24gcmlzaW5nIGVkZ2UoaWYgdGhlIEZsYWcgc3RhdGVzIGV4aXQpLgorICogICAgICAgIC0gI2tQT1JUX0ZsYWdGYWxsaW5nRWRnZSA6IEZsYWcgc2V0cyBvbiBmYWxsaW5nIGVkZ2UoaWYgdGhlIEZsYWcgc3RhdGVzIGV4aXQpLgorICogICAgICAgIC0gI2tQT1JUX0ZsYWdFaXRoZXJFZGdlIDogRmxhZyBzZXRzIG9uIGVpdGhlciBlZGdlKGlmIHRoZSBGbGFnIHN0YXRlcyBleGl0KS4KKyAqICAgICAgICAtICNrUE9SVF9JbnRlcnJ1cHRMb2dpY1plcm8gIDogSW50ZXJydXB0IHdoZW4gbG9naWMgemVyby4KKyAqICAgICAgICAtICNrUE9SVF9JbnRlcnJ1cHRSaXNpbmdFZGdlIDogSW50ZXJydXB0IG9uIHJpc2luZyBlZGdlLgorICogICAgICAgIC0gI2tQT1JUX0ludGVycnVwdEZhbGxpbmdFZGdlOiBJbnRlcnJ1cHQgb24gZmFsbGluZyBlZGdlLgorICogICAgICAgIC0gI2tQT1JUX0ludGVycnVwdEVpdGhlckVkZ2UgOiBJbnRlcnJ1cHQgb24gZWl0aGVyIGVkZ2UuCisgKiAgICAgICAgLSAja1BPUlRfSW50ZXJydXB0TG9naWNPbmUgICA6IEludGVycnVwdCB3aGVuIGxvZ2ljIG9uZS4KKyAqICAgICAgICAtICNrUE9SVF9BY3RpdmVIaWdoVHJpZ2dlck91dHB1dEVuYWJsZSA6IEVuYWJsZSBhY3RpdmUgaGlnaC10cmlnZ2VyIG91dHB1dCAoaWYgdGhlIHRyaWdnZXIgc3RhdGVzIGV4aXQpLgorICogICAgICAgIC0gI2tQT1JUX0FjdGl2ZUxvd1RyaWdnZXJPdXRwdXRFbmFibGUgIDogRW5hYmxlIGFjdGl2ZSBsb3ctdHJpZ2dlciBvdXRwdXQgKGlmIHRoZSB0cmlnZ2VyIHN0YXRlcyBleGl0KS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBPUlRfU2V0UGluSW50ZXJydXB0Q29uZmlnKFBPUlRfVHlwZSAqYmFzZSwgdWludDMyX3QgcGluLCBwb3J0X2ludGVycnVwdF90IGNvbmZpZykKK3sKKyAgICBiYXNlLT5QQ1JbcGluXSA9IChiYXNlLT5QQ1JbcGluXSAmIH5QT1JUX1BDUl9JUlFDX01BU0spIHwgUE9SVF9QQ1JfSVJRQyhjb25maWcpOworfQorCisvKiEKKyAqIEBicmllZiBSZWFkcyB0aGUgd2hvbGUgcG9ydCBzdGF0dXMgZmxhZy4KKyAqCisgKiBJZiBhIHBpbiBpcyBjb25maWd1cmVkIHRvIGdlbmVyYXRlIHRoZSBETUEgcmVxdWVzdCwgIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcKKyAqIGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhdCB0aGUgY29tcGxldGlvbiBvZiB0aGUgcmVxdWVzdGVkIERNQSB0cmFuc2Zlci4KKyAqIE90aGVyd2lzZSwgdGhlIGZsYWcgcmVtYWlucyBzZXQgdW50aWwgYSBsb2dpYyBvbmUgaXMgd3JpdHRlbiB0byB0aGF0IGZsYWcuCisgKiBJZiBjb25maWd1cmVkIGZvciBhIGxldmVsIHNlbnNpdGl2ZSBpbnRlcnJ1cHQgdGhhdCByZW1haW5zIGFzc2VydGVkLCB0aGUgZmxhZworICogaXMgc2V0IGFnYWluIGltbWVkaWF0ZWx5LgorICoKKyAqIEBwYXJhbSBiYXNlIFBPUlQgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIuCisgKiBAcmV0dXJuIEN1cnJlbnQgcG9ydCBpbnRlcnJ1cHQgc3RhdHVzIGZsYWdzLCBmb3IgZXhhbXBsZSwgMHgwMDAxMDAwMSBtZWFucyB0aGUKKyAqICAgICAgICAgcGluIDAgYW5kIDE2IGhhdmUgdGhlIGludGVycnVwdC4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBQT1JUX0dldFBpbnNJbnRlcnJ1cHRGbGFncyhQT1JUX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIGJhc2UtPklTRlI7Cit9CisKKy8qIQorICogQGJyaWVmIENsZWFycyB0aGUgbXVsdGlwbGUgcGluIGludGVycnVwdCBzdGF0dXMgZmxhZy4KKyAqCisgKiBAcGFyYW0gYmFzZSBQT1JUIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIG1hc2sgUE9SVCBwaW4gbnVtYmVyIG1hY3JvLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUE9SVF9DbGVhclBpbnNJbnRlcnJ1cHRGbGFncyhQT1JUX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+SVNGUiA9IG1hc2s7Cit9CisKKy8qQH0qLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisvKiEgQH0qLworCisjZW5kaWYgLyogX0ZTTF9QT1JUX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9yY20uYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3JjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNzM4NjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9yY20uYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9yY20uaCIKKwordm9pZCBSQ01fQ29uZmlndXJlUmVzZXRQaW5GaWx0ZXIoUkNNX1R5cGUgKmJhc2UsIGNvbnN0IHJjbV9yZXNldF9waW5fZmlsdGVyX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNvbmZpZyk7CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIKSAmJiAoRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCA9PSAzMikpCisgICAgdWludDMyX3QgcmVnOworCisgICAgcmVnID0gKCgodWludDMyX3QpY29uZmlnLT5lbmFibGVGaWx0ZXJJblN0b3AgPDwgUkNNX1JQQ19SU1RGTFRTU19TSElGVCkgfCAodWludDMyX3QpY29uZmlnLT5maWx0ZXJJblJ1bldhaXQpOworICAgIGlmIChjb25maWctPmZpbHRlckluUnVuV2FpdCA9PSBrUkNNX0ZpbHRlckJ1c0Nsb2NrKQorICAgIHsKKyAgICAgICAgcmVnIHw9ICgodWludDMyX3QpY29uZmlnLT5idXNDbG9ja0ZpbHRlckNvdW50IDw8IFJDTV9SUENfUlNURkxUU0VMX1NISUZUKTsKKyAgICB9CisgICAgYmFzZS0+UlBDID0gcmVnOworI2Vsc2UKKyAgICBiYXNlLT5SUEZDID0gKCh1aW50OF90KShjb25maWctPmVuYWJsZUZpbHRlckluU3RvcCA8PCBSQ01fUlBGQ19SU1RGTFRTU19TSElGVCkgfCAodWludDhfdCljb25maWctPmZpbHRlckluUnVuV2FpdCk7CisgICAgaWYgKGNvbmZpZy0+ZmlsdGVySW5SdW5XYWl0ID09IGtSQ01fRmlsdGVyQnVzQ2xvY2spCisgICAgeworICAgICAgICBiYXNlLT5SUEZXID0gY29uZmlnLT5idXNDbG9ja0ZpbHRlckNvdW50OworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIICovCit9CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX0JPT1RST00pICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfQk9PVFJPTSkKK3ZvaWQgUkNNX1NldEZvcmNlQm9vdFJvbVNvdXJjZShSQ01fVHlwZSAqYmFzZSwgcmNtX2Jvb3Rfcm9tX2NvbmZpZ190IGNvbmZpZykKK3sKKyAgICB1aW50MzJfdCByZWc7CisKKyAgICByZWcgPSBiYXNlLT5GTTsKKyAgICByZWcgJj0gflJDTV9GTV9GT1JDRVJPTV9NQVNLOworICAgIHJlZyB8PSAoKHVpbnQzMl90KWNvbmZpZyA8PCBSQ01fRk1fRk9SQ0VST01fU0hJRlQpOworICAgIGJhc2UtPkZNID0gcmVnOworfQorI2VuZGlmIC8qICNpZiBGU0xfRkVBVFVSRV9SQ01fSEFTX0JPT1RST00gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3JjbS5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcmNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliODQzYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3JjbS5oCkBAIC0wLDAgKzEsNDMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9SQ01fSF8KKyNkZWZpbmUgX0ZTTF9SQ01fSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohIEBhZGR0b2dyb3VwIHJjbSAqLworLyohIEB7Ki8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgQGJyaWVmIFJDTSBkcml2ZXIgdmVyc2lvbiAyLjAuMS4gKi8KKyNkZWZpbmUgRlNMX1JDTV9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDEpKQorLypAfSovCisKKy8qIQorICogQGJyaWVmIFN5c3RlbSBSZXNldCBTb3VyY2UgTmFtZSBkZWZpbml0aW9ucworICovCit0eXBlZGVmIGVudW0gX3JjbV9yZXNldF9zb3VyY2UKK3sKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIKSAmJiAoRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCA9PSAzMikpCisvKiBSQ00gcmVnaXN0ZXIgYml0IHdpZHRoIGlzIDMyLiAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfV0FLRVVQKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX1dBS0VVUCkKKyAgICBrUkNNX1NvdXJjZVdha2V1cCA9IFJDTV9TUlNfV0FLRVVQX01BU0ssIC8qITwgTG93LWxlYWthZ2Ugd2FrZXVwIHJlc2V0ICovCisjZW5kaWYKKyAgICBrUkNNX1NvdXJjZUx2ZCA9IFJDTV9TUlNfTFZEX01BU0ssIC8qITwgTG93LXZvbHRhZ2UgZGV0ZWN0IHJlc2V0ICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19MT0MpICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfTE9DKQorICAgIGtSQ01fU291cmNlTG9jID0gUkNNX1NSU19MT0NfTUFTSywgLyohPCBMb3NzIG9mIGNsb2NrIHJlc2V0ICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX0xPQyAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfTE9MKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX0xPTCkKKyAgICBrUkNNX1NvdXJjZUxvbCA9IFJDTV9TUlNfTE9MX01BU0ssICAgLyohPCBMb3NzIG9mIGxvY2sgcmVzZXQgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfUkNNX0hBU19MT0wgKi8KKyAgICBrUkNNX1NvdXJjZVdkb2cgPSBSQ01fU1JTX1dET0dfTUFTSywgLyohPCBXYXRjaGRvZyByZXNldCAqLworICAgIGtSQ01fU291cmNlUGluID0gUkNNX1NSU19QSU5fTUFTSywgICAvKiE8IEV4dGVybmFsIHBpbiByZXNldCAqLworICAgIGtSQ01fU291cmNlUG9yID0gUkNNX1NSU19QT1JfTUFTSywgICAvKiE8IFBvd2VyIG9uIHJlc2V0ICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19KVEFHKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX0pUQUcpCisgICAga1JDTV9Tb3VyY2VKdGFnID0gUkNNX1NSU19KVEFHX01BU0ssICAgICAvKiE8IEpUQUcgZ2VuZXJhdGVkIHJlc2V0ICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX0pUQUcgKi8KKyAgICBrUkNNX1NvdXJjZUxvY2t1cCA9IFJDTV9TUlNfTE9DS1VQX01BU0ssIC8qITwgQ29yZSBsb2NrIHVwIHJlc2V0ICovCisgICAga1JDTV9Tb3VyY2VTdyA9IFJDTV9TUlNfU1dfTUFTSywgICAgICAgICAvKiE8IFNvZnR3YXJlIHJlc2V0ICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19NRE1fQVApICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfTURNX0FQKQorICAgIGtSQ01fU291cmNlTWRtYXAgPSBSQ01fU1JTX01ETV9BUF9NQVNLLCAvKiE8IE1ETS1BUCBzeXN0ZW0gcmVzZXQgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfUkNNX0hBU19NRE1fQVAgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX0VaUE9SVCkgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19FWlBPUlQpCisgICAga1JDTV9Tb3VyY2VFenB0ID0gUkNNX1NSU19FWlBUX01BU0ssICAgICAgIC8qITwgRXpQb3J0IHJlc2V0ICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfRVpQT1JUICovCisgICAga1JDTV9Tb3VyY2VTYWNrZXJyID0gUkNNX1NSU19TQUNLRVJSX01BU0ssIC8qITwgUGFyYW1ldGVyIGNvdWxkIGdldCBhbGwgcmVzZXQgZmxhZ3MgKi8KKworI2Vsc2UgLyogKEZTTF9GRUFUVVJFX1JDTV9SRUdfV0lEVEggPT0gMzIpICovCisvKiBSQ00gcmVnaXN0ZXIgYml0IHdpZHRoIGlzIDguICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19XQUtFVVApICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfV0FLRVVQKQorICAgIGtSQ01fU291cmNlV2FrZXVwID0gUkNNX1NSUzBfV0FLRVVQX01BU0ssIC8qITwgTG93LWxlYWthZ2Ugd2FrZXVwIHJlc2V0ICovCisjZW5kaWYKKyAgICBrUkNNX1NvdXJjZUx2ZCA9IFJDTV9TUlMwX0xWRF9NQVNLLCAvKiE8IExvdy12b2x0YWdlIGRldGVjdCByZXNldCAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfTE9DKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX0xPQykKKyAgICBrUkNNX1NvdXJjZUxvYyA9IFJDTV9TUlMwX0xPQ19NQVNLLCAgIC8qITwgTG9zcyBvZiBjbG9jayByZXNldCAqLworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfTE9DICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19MT0wpICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfTE9MKQorICAgIGtSQ01fU291cmNlTG9sID0gUkNNX1NSUzBfTE9MX01BU0ssICAgLyohPCBMb3NzIG9mIGxvY2sgcmVzZXQgKi8KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX0xPTCAqLworICAgIGtSQ01fU291cmNlV2RvZyA9IFJDTV9TUlMwX1dET0dfTUFTSywgLyohPCBXYXRjaGRvZyByZXNldCAqLworICAgIGtSQ01fU291cmNlUGluID0gUkNNX1NSUzBfUElOX01BU0ssICAgLyohPCBFeHRlcm5hbCBwaW4gcmVzZXQgKi8KKyAgICBrUkNNX1NvdXJjZVBvciA9IFJDTV9TUlMwX1BPUl9NQVNLLCAvKiE8IFBvd2VyIG9uIHJlc2V0ICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19KVEFHKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX0pUQUcpCisgICAga1JDTV9Tb3VyY2VKdGFnID0gUkNNX1NSUzFfSlRBR19NQVNLIDw8IDhVLCAgICAgLyohPCBKVEFHIGdlbmVyYXRlZCByZXNldCAqLworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfSlRBRyAqLworICAgIGtSQ01fU291cmNlTG9ja3VwID0gUkNNX1NSUzFfTE9DS1VQX01BU0sgPDwgOFUsIC8qITwgQ29yZSBsb2NrIHVwIHJlc2V0ICovCisgICAga1JDTV9Tb3VyY2VTdyA9IFJDTV9TUlMxX1NXX01BU0sgPDwgOFUsIC8qITwgU29mdHdhcmUgcmVzZXQgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX01ETV9BUCkgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19NRE1fQVApCisgICAga1JDTV9Tb3VyY2VNZG1hcCA9IFJDTV9TUlMxX01ETV9BUF9NQVNLIDw8IDhVLCAgICAvKiE8IE1ETS1BUCBzeXN0ZW0gcmVzZXQgKi8KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX01ETV9BUCAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfRVpQT1JUKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX0VaUE9SVCkKKyAgICBrUkNNX1NvdXJjZUV6cHQgPSBSQ01fU1JTMV9FWlBUX01BU0sgPDwgOFUsICAgICAgIC8qITwgRXpQb3J0IHJlc2V0ICovCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUkNNX0hBU19FWlBPUlQgKi8KKyAgICBrUkNNX1NvdXJjZVNhY2tlcnIgPSBSQ01fU1JTMV9TQUNLRVJSX01BU0sgPDwgOFUsIC8qITwgUGFyYW1ldGVyIGNvdWxkIGdldCBhbGwgcmVzZXQgZmxhZ3MgKi8KKyNlbmRpZiAvKiAoRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCA9PSAzMikgKi8KKyAgICBrUkNNX1NvdXJjZUFsbCA9IDB4ZmZmZmZmZmZVLAorfSByY21fcmVzZXRfc291cmNlX3Q7CisKKy8qIQorICogQGJyaWVmIFJlc2V0IHBpbiBmaWx0ZXIgc2VsZWN0IGluIFJ1biBhbmQgV2FpdCBtb2Rlcy4KKyAqLwordHlwZWRlZiBlbnVtIF9yY21fcnVuX3dhaXRfZmlsdGVyX21vZGUKK3sKKyAgICBrUkNNX0ZpbHRlckRpc2FibGUgPSAwVSwgIC8qITwgQWxsIGZpbHRlcmluZyBkaXNhYmxlZCAqLworICAgIGtSQ01fRmlsdGVyQnVzQ2xvY2sgPSAxVSwgLyohPCBCdXMgY2xvY2sgZmlsdGVyIGVuYWJsZWQgKi8KKyAgICBrUkNNX0ZpbHRlckxwb0Nsb2NrID0gMlUgIC8qITwgTFBPIGNsb2NrIGZpbHRlciBlbmFibGVkICovCit9IHJjbV9ydW5fd2FpdF9maWx0ZXJfbW9kZV90OworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19CT09UUk9NKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX0JPT1RST00pCisvKiEKKyAqIEBicmllZiBCb290IGZyb20gUk9NIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgZW51bSBfcmNtX2Jvb3Rfcm9tX2NvbmZpZworeworICAgIGtSQ01fQm9vdEZsYXNoID0gMFUsICAgLyohPCBCb290IGZyb20gZmxhc2ggKi8KKyAgICBrUkNNX0Jvb3RSb21DZmcwID0gMVUsIC8qITwgQm9vdCBmcm9tIGJvb3QgUk9NIGR1ZSB0byBCT09UQ0ZHMCAqLworICAgIGtSQ01fQm9vdFJvbUZvcHQgPSAyVSwgLyohPCBCb290IGZyb20gYm9vdCBST00gZHVlIHRvIEZPUFRbN10gKi8KKyAgICBrUkNNX0Jvb3RSb21Cb3RoID0gM1UgIC8qITwgQm9vdCBmcm9tIGJvb3QgUk9NIGR1ZSB0byBib3RoIEJPT1RDRkcwIGFuZCBGT1BUWzddICovCit9IHJjbV9ib290X3JvbV9jb25maWdfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX0JPT1RST00gKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfU1JJRSkgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19TUklFKQorLyohCisgKiBAYnJpZWYgTWF4aW11bSBkZWxheSB0aW1lIGZyb20gaW50ZXJydXB0IGFzc2VydHMgdG8gc3lzdGVtIHJlc2V0LgorICovCit0eXBlZGVmIGVudW0gX3JjbV9yZXNldF9kZWxheQoreworICAgIGtSQ01fUmVzZXREZWxheThMcG8gPSAwVSwgICAvKiE8IERlbGF5IDggTFBPIGN5Y2xlcy4gICAqLworICAgIGtSQ01fUmVzZXREZWxheTMyTHBvID0gMVUsICAvKiE8IERlbGF5IDMyIExQTyBjeWNsZXMuICAqLworICAgIGtSQ01fUmVzZXREZWxheTEyOExwbyA9IDJVLCAvKiE8IERlbGF5IDEyOCBMUE8gY3ljbGVzLiAqLworICAgIGtSQ01fUmVzZXREZWxheTUxMkxwbyA9IDNVICAvKiE8IERlbGF5IDUxMiBMUE8gY3ljbGVzLiAqLworfSByY21fcmVzZXRfZGVsYXlfdDsKKworLyohCisgKiBAYnJpZWYgU3lzdGVtIHJlc2V0IGludGVycnVwdCBlbmFibGUgYml0IGRlZmluaXRpb25zLgorICovCit0eXBlZGVmIGVudW0gX3JjbV9pbnRlcnJ1cHRfZW5hYmxlCit7CisgICAga1JDTV9JbnROb25lID0gMFUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBObyBpbnRlcnJ1cHQgZW5hYmxlZC4gICAgICAgICAgICovCisgICAga1JDTV9JbnRMb3NzT2ZDbGsgPSBSQ01fU1JJRV9MT0NfTUFTSywgICAgICAgICAgLyohPCBMb3NzIG9mIGNsb2NrIGludGVycnVwdC4gICAgICAgICovCisgICAga1JDTV9JbnRMb3NzT2ZMb2NrID0gUkNNX1NSSUVfTE9MX01BU0ssICAgICAgICAgLyohPCBMb3NzIG9mIGxvY2sgaW50ZXJydXB0LiAgICAgICAgICovCisgICAga1JDTV9JbnRXYXRjaERvZyA9IFJDTV9TUklFX1dET0dfTUFTSywgICAgICAgICAgLyohPCBXYXRjaCBkb2cgaW50ZXJydXB0LiAgICAgICAgICAgICovCisgICAga1JDTV9JbnRFeHRlcm5hbFBpbiA9IFJDTV9TUklFX1BJTl9NQVNLLCAgICAgICAgLyohPCBFeHRlcm5hbCBwaW4gaW50ZXJydXB0LiAgICAgICAgICovCisgICAga1JDTV9JbnRHbG9iYWwgPSBSQ01fU1JJRV9HSUVfTUFTSywgICAgICAgICAgICAgLyohPCBHbG9iYWwgaW50ZXJydXB0cy4gICAgICAgICAgICAgICovCisgICAga1JDTV9JbnRDb3JlTG9ja3VwID0gUkNNX1NSSUVfTE9DS1VQX01BU0ssICAgICAgLyohPCBDb3JlIGxvY2sgdXAgaW50ZXJydXB0ICAgICAgICAgICAqLworICAgIGtSQ01fSW50U29mdHdhcmUgPSBSQ01fU1JJRV9TV19NQVNLLCAgICAgICAgICAgIC8qITwgc29mdHdhcmUgaW50ZXJydXB0ICAgICAgICAgICAgICAqLworICAgIGtSQ01fSW50U3RvcE1vZGVBY2tFcnIgPSBSQ01fU1JJRV9TQUNLRVJSX01BU0ssIC8qITwgU3RvcCBtb2RlIEFDSyBlcnJvciBpbnRlcnJ1cHQuICAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfQ09SRTEpICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfQ09SRTEpCisgICAga1JDTV9JbnRDb3JlMSA9IFJDTV9TUklFX0NPUkUxX01BU0ssIC8qITwgQ29yZSAxIGludGVycnVwdC4gICAgICAgICAgICAgICAqLworI2VuZGlmCisgICAga1JDTV9JbnRBbGwgPSBSQ01fU1JJRV9MT0NfTUFTSyAvKiE8IEVuYWJsZSBhbGwgaW50ZXJydXB0cy4gICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIFJDTV9TUklFX0xPTF9NQVNLIHwgUkNNX1NSSUVfV0RPR19NQVNLIHwgUkNNX1NSSUVfUElOX01BU0sgfCBSQ01fU1JJRV9HSUVfTUFTSyB8CisgICAgICAgICAgICAgICAgICBSQ01fU1JJRV9MT0NLVVBfTUFTSyB8IFJDTV9TUklFX1NXX01BU0sgfCBSQ01fU1JJRV9TQUNLRVJSX01BU0sKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX0NPUkUxKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX0NPUkUxKQorICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgUkNNX1NSSUVfQ09SRTFfTUFTSworI2VuZGlmCit9IHJjbV9pbnRlcnJ1cHRfZW5hYmxlX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUkNNX0hBU19TUklFICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX1ZFUklEKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX1ZFUklEKQorLyohCisgKiBAYnJpZWYgSVAgdmVyc2lvbiBJRCBkZWZpbml0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfcmNtX3ZlcnNpb25faWQKK3sKKyAgICB1aW50MTZfdCBmZWF0dXJlOyAvKiE8IEZlYXR1cmUgU3BlY2lmaWNhdGlvbiBOdW1iZXIuICovCisgICAgdWludDhfdCBtaW5vcjsgICAgLyohPCBNaW5vciB2ZXJzaW9uIG51bWJlci4gICAgICAgICAqLworICAgIHVpbnQ4X3QgbWFqb3I7ICAgIC8qITwgTWFqb3IgdmVyc2lvbiBudW1iZXIuICAgICAgICAgKi8KK30gcmNtX3ZlcnNpb25faWRfdDsKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBSZXNldCBwaW4gZmlsdGVyIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9yY21fcmVzZXRfcGluX2ZpbHRlcl9jb25maWcKK3sKKyAgICBib29sIGVuYWJsZUZpbHRlckluU3RvcDsgICAgICAgICAgICAgICAgICAgIC8qITwgUmVzZXQgcGluIGZpbHRlciBzZWxlY3QgaW4gc3RvcCBtb2RlLiAqLworICAgIHJjbV9ydW5fd2FpdF9maWx0ZXJfbW9kZV90IGZpbHRlckluUnVuV2FpdDsgLyohPCBSZXNldCBwaW4gZmlsdGVyIGluIHJ1bi93YWl0IG1vZGUuICovCisgICAgdWludDhfdCBidXNDbG9ja0ZpbHRlckNvdW50OyAgICAgICAgICAgICAgICAvKiE8IFJlc2V0IHBpbiBidXMgY2xvY2sgZmlsdGVyIHdpZHRoLiAgKi8KK30gcmNtX3Jlc2V0X3Bpbl9maWx0ZXJfY29uZmlnX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzKi8KKworLyohIEBuYW1lIFJlc2V0IENvbnRyb2wgTW9kdWxlIEFQSXMqLworLypAeyovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX1ZFUklEKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX1ZFUklEKQorLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgUkNNIHZlcnNpb24gSUQuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBSQ00gdmVyc2lvbiBJRCBpbmNsdWRpbmcgdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyLAorICogdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLCBhbmQgdGhlIGZlYXR1cmUgc3BlY2lmaWNhdGlvbiBudW1iZXIuCisgKgorICogQHBhcmFtIGJhc2UgUkNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHZlcnNpb25JZCAgICAgUG9pbnRlciB0byB0aGUgdmVyc2lvbiBJRCBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBSQ01fR2V0VmVyc2lvbklkKFJDTV9UeXBlICpiYXNlLCByY21fdmVyc2lvbl9pZF90ICp2ZXJzaW9uSWQpCit7CisgICAgKigodWludDMyX3QgKil2ZXJzaW9uSWQpID0gYmFzZS0+VkVSSUQ7Cit9CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfUEFSQU0pICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfUEFSQU0pCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSByZXNldCBzb3VyY2UgaW1wbGVtZW50ZWQgc3RhdHVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgUkNNIHBhcmFtZXRlciB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIHJlc2V0IHNvdXJjZSBpcyBpbXBsZW1lbnRlZC4KKyAqIFVzZSBzb3VyY2UgbWFza3MgZGVmaW5lZCBpbiB0aGUgcmNtX3Jlc2V0X3NvdXJjZV90IHRvIGdldCB0aGUgZGVzaXJlZCBzb3VyY2Ugc3RhdHVzLgorICoKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZS4KKyAgIEBjb2RlCisgICB1aW50MzJfdCBzdGF0dXM7CisKKyAgIC8vIFRvIHRlc3Qgd2hldGhlciB0aGUgTUNVIGlzIHJlc2V0IHVzaW5nIFdhdGNoZG9nLgorICAgc3RhdHVzID0gUkNNX0dldFJlc2V0U291cmNlSW1wbGVtZW50ZWRTdGF0dXMoUkNNKSAmIChrUkNNX1NvdXJjZVdkb2cgfCBrUkNNX1NvdXJjZVBpbik7CisgICBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIFJDTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gQWxsIHJlc2V0IHNvdXJjZSBpbXBsZW1lbnRlZCBzdGF0dXMgYml0IG1hcC4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBSQ01fR2V0UmVzZXRTb3VyY2VJbXBsZW1lbnRlZFN0YXR1cyhSQ01fVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gYmFzZS0+UEFSQU07Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUkNNX0hBU19QQVJBTSAqLworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSByZXNldCBzb3VyY2Ugc3RhdHVzIHdoaWNoIGNhdXNlZCBhIHByZXZpb3VzIHJlc2V0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgY3VycmVudCByZXNldCBzb3VyY2Ugc3RhdHVzLiBVc2Ugc291cmNlIG1hc2tzCisgKiBkZWZpbmVkIGluIHRoZSByY21fcmVzZXRfc291cmNlX3QgdG8gZ2V0IHRoZSBkZXNpcmVkIHNvdXJjZSBzdGF0dXMuCisgKgorICogVGhpcyBpcyBhbiBleGFtcGxlLgorICAgQGNvZGUKKyAgIHVpbnQzMl90IHJlc2V0U3RhdHVzOworCisgICAvLyBUbyBnZXQgYWxsIHJlc2V0IHNvdXJjZSBzdGF0dXNlcy4KKyAgIHJlc2V0U3RhdHVzID0gUkNNX0dldFByZXZpb3VzUmVzZXRTb3VyY2VzKFJDTSkgJiBrUkNNX1NvdXJjZUFsbDsKKworICAgLy8gVG8gdGVzdCB3aGV0aGVyIHRoZSBNQ1UgaXMgcmVzZXQgdXNpbmcgV2F0Y2hkb2cuCisgICByZXNldFN0YXR1cyA9IFJDTV9HZXRQcmV2aW91c1Jlc2V0U291cmNlcyhSQ00pICYga1JDTV9Tb3VyY2VXZG9nOworCisgICAvLyBUbyB0ZXN0IG11bHRpcGxlIHJlc2V0IHNvdXJjZXMuCisgICByZXNldFN0YXR1cyA9IFJDTV9HZXRQcmV2aW91c1Jlc2V0U291cmNlcyhSQ00pICYgKGtSQ01fU291cmNlV2RvZyB8IGtSQ01fU291cmNlUGluKTsKKyAgIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgUkNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBBbGwgcmVzZXQgc291cmNlIHN0YXR1cyBiaXQgbWFwLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJDTV9HZXRQcmV2aW91c1Jlc2V0U291cmNlcyhSQ01fVHlwZSAqYmFzZSkKK3sKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIKSAmJiAoRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCA9PSAzMikpCisgICAgcmV0dXJuIGJhc2UtPlNSUzsKKyNlbHNlCisgICAgcmV0dXJuICh1aW50MzJfdCkoKHVpbnQzMl90KWJhc2UtPlNSUzAgfCAoKHVpbnQzMl90KWJhc2UtPlNSUzEgPDwgOFUpKTsKKyNlbmRpZiAvKiAoRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCA9PSAzMikgKi8KK30KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfU1NSUykgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19TU1JTKQorLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgc3RpY2t5IHJlc2V0IHNvdXJjZSBzdGF0dXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBjdXJyZW50IHJlc2V0IHNvdXJjZSBzdGF0dXMgdGhhdCBoYXMgbm90IGJlZW4gY2xlYXJlZAorICogYnkgc29mdHdhcmUgZm9yIGEgc3BlY2lmaWMgc291cmNlLgorICoKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZS4KKyAgIEBjb2RlCisgICB1aW50MzJfdCByZXNldFN0YXR1czsKKworICAgLy8gVG8gZ2V0IGFsbCByZXNldCBzb3VyY2Ugc3RhdHVzZXMuCisgICByZXNldFN0YXR1cyA9IFJDTV9HZXRTdGlja3lSZXNldFNvdXJjZXMoUkNNKSAmIGtSQ01fU291cmNlQWxsOworCisgICAvLyBUbyB0ZXN0IHdoZXRoZXIgdGhlIE1DVSBpcyByZXNldCB1c2luZyBXYXRjaGRvZy4KKyAgIHJlc2V0U3RhdHVzID0gUkNNX0dldFN0aWNreVJlc2V0U291cmNlcyhSQ00pICYga1JDTV9Tb3VyY2VXZG9nOworCisgICAvLyBUbyB0ZXN0IG11bHRpcGxlIHJlc2V0IHNvdXJjZXMuCisgICByZXNldFN0YXR1cyA9IFJDTV9HZXRTdGlja3lSZXNldFNvdXJjZXMoUkNNKSAmIChrUkNNX1NvdXJjZVdkb2cgfCBrUkNNX1NvdXJjZVBpbik7CisgICBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIFJDTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gQWxsIHJlc2V0IHNvdXJjZSBzdGF0dXMgYml0IG1hcC4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBSQ01fR2V0U3RpY2t5UmVzZXRTb3VyY2VzKFJDTV9UeXBlICpiYXNlKQoreworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9SRUdfV0lEVEgpICYmIChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIID09IDMyKSkKKyAgICByZXR1cm4gYmFzZS0+U1NSUzsKKyNlbHNlCisgICAgcmV0dXJuIChiYXNlLT5TU1JTMCB8ICgodWludDMyX3QpYmFzZS0+U1NSUzEgPDwgOFUpKTsKKyNlbmRpZiAvKiAoRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCA9PSAzMikgKi8KK30KKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBzdGlja3kgcmVzZXQgc291cmNlIHN0YXR1cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgc3RpY2t5IHN5c3RlbSByZXNldCBmbGFncyBpbmRpY2F0ZWQgYnkgc291cmNlIG1hc2tzLgorICoKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZS4KKyAgIEBjb2RlCisgICAvLyBDbGVhcnMgbXVsdGlwbGUgcmVzZXQgc291cmNlcy4KKyAgIFJDTV9DbGVhclN0aWNreVJlc2V0U291cmNlcyhrUkNNX1NvdXJjZVdkb2cgfCBrUkNNX1NvdXJjZVBpbik7CisgICBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIFJDTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBzb3VyY2VNYXNrcyByZXNldCBzb3VyY2Ugc3RhdHVzIGJpdCBtYXAKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFJDTV9DbGVhclN0aWNreVJlc2V0U291cmNlcyhSQ01fVHlwZSAqYmFzZSwgdWludDMyX3Qgc291cmNlTWFza3MpCit7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCkgJiYgKEZTTF9GRUFUVVJFX1JDTV9SRUdfV0lEVEggPT0gMzIpKQorICAgIGJhc2UtPlNTUlMgPSBzb3VyY2VNYXNrczsKKyNlbHNlCisgICAgYmFzZS0+U1NSUzAgPSAoc291cmNlTWFza3MgJiAweGZmVSk7CisgICAgYmFzZS0+U1NSUzEgPSAoKHNvdXJjZU1hc2tzID4+IDhVKSAmIDB4ZmZVKTsKKyNlbmRpZiAvKiAoRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCA9PSAzMikgKi8KK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX1NTUlMgKi8KKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgcmVzZXQgcGluIGZpbHRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHJlc2V0IHBpbiBmaWx0ZXIgaW5jbHVkaW5nIHRoZSBmaWx0ZXIgc291cmNlLCBmaWx0ZXIKKyAqIHdpZHRoLCBhbmQgc28gb24uCisgKgorICogQHBhcmFtIGJhc2UgUkNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBSQ01fQ29uZmlndXJlUmVzZXRQaW5GaWx0ZXIoUkNNX1R5cGUgKmJhc2UsIGNvbnN0IHJjbV9yZXNldF9waW5fZmlsdGVyX2NvbmZpZ190ICpjb25maWcpOworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19FWlBNUykgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19FWlBNUykKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIEVaUF9NU19CIHBpbiBhc3NlcnQgc3RhdHVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgZWFzeSBwb3J0IG1vZGUgc3RhdHVzIChFWlBfTVNfQikgcGluIGFzc2VydCBzdGF0dXMuCisgKgorICogQHBhcmFtIGJhc2UgUkNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBzdGF0dXMgIHRydWUgLSBhc3NlcnRlZCwgZmFsc2UgLSByZWFzc2VydGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBSQ01fR2V0RWFzeVBvcnRNb2RlUGluU3RhdHVzKFJDTV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAoYm9vbCkoYmFzZS0+TVIgJiBSQ01fTVJfRVpQX01TX01BU0spOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfRVpQTVMgKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfQk9PVFJPTSkgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19CT09UUk9NKQorLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgUk9NIGJvb3Qgc291cmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgUk9NIGJvb3Qgc291cmNlIGR1cmluZyB0aGUgbGFzdCBjaGlwIHJlc2V0LgorICoKKyAqIEBwYXJhbSBiYXNlIFJDTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gVGhlIFJPTSBib290IHNvdXJjZS4KKyAqLworc3RhdGljIGlubGluZSByY21fYm9vdF9yb21fY29uZmlnX3QgUkNNX0dldEJvb3RSb21Tb3VyY2UoUkNNX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChyY21fYm9vdF9yb21fY29uZmlnX3QpKChiYXNlLT5NUiAmIFJDTV9NUl9CT09UUk9NX01BU0spID4+IFJDTV9NUl9CT09UUk9NX1NISUZUKTsKK30KKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBST00gYm9vdCBzb3VyY2UgZmxhZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgUk9NIGJvb3Qgc291cmNlIGZsYWcuCisgKgorICogQHBhcmFtIGJhc2UgICAgIFJlZ2lzdGVyIGJhc2UgYWRkcmVzcyBvZiBSQ00KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFJDTV9DbGVhckJvb3RSb21Tb3VyY2UoUkNNX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+TVIgfD0gUkNNX01SX0JPT1RST01fTUFTSzsKK30KKworLyohCisgKiBAYnJpZWYgRm9yY2VzIHRoZSBib290IGZyb20gUk9NLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZm9yY2VzIGJvb3RpbmcgZnJvbSBST00gZHVyaW5nIGFsbCBzdWJzZXF1ZW50IHN5c3RlbSByZXNldHMuCisgKgorICogQHBhcmFtIGJhc2UgUkNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyAgIEJvb3QgY29uZmlndXJhdGlvbi4KKyAqLwordm9pZCBSQ01fU2V0Rm9yY2VCb290Um9tU291cmNlKFJDTV9UeXBlICpiYXNlLCByY21fYm9vdF9yb21fY29uZmlnX3QgY29uZmlnKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX0JPT1RST00gKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfU1JJRSkgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19TUklFKQorLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgc3lzdGVtIHJlc2V0IGludGVycnVwdCBjb25maWd1cmF0aW9uLgorICoKKyAqIEZvciBhIGdyYWNlZnVsIHNodXQgZG93biwgdGhlIFJDTSBzdXBwb3J0cyBkZWxheWluZyB0aGUgYXNzZXJ0aW9uIG9mIHRoZSBzeXN0ZW0KKyAqIHJlc2V0IGZvciBhIHBlcmlvZCBvZiB0aW1lIHdoZW4gdGhlIHJlc2V0IGludGVycnVwdCBpcyBnZW5lcmF0ZWQuIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSB0aGUgaW50ZXJydXB0IGFuZCB0aGUgZGVsYXkgcGVyaW9kLiBUaGUgaW50ZXJydXB0cworICogYXJlIHBhc3NlZCBpbiBhcyBiaXQgbWFzay4gU2VlIHJjbV9pbnRfdCBmb3IgZGV0YWlscy4gRm9yIGV4YW1wbGUsIHRvCisgKiBkZWxheSBhIHJlc2V0IGZvciA1MTIgTFBPIGN5Y2xlcyBhZnRlciB0aGUgV0RPRyB0aW1lb3V0IG9yIGxvc3Mtb2YtY2xvY2sgb2NjdXJzLAorICogY29uZmlndXJlIGFzIGZvbGxvd3M6CisgKiBSQ01fU2V0U3lzdGVtUmVzZXRJbnRlcnJ1cHRDb25maWcoa1JDTV9JbnRXYXRjaERvZyB8IGtSQ01fSW50TG9zc09mQ2xrLCBrUkNNX1Jlc2V0RGVsYXk1MTJMcG8pOworICoKKyAqIEBwYXJhbSBiYXNlIFJDTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBpbnRNYXNrICAgQml0IG1hc2sgb2YgdGhlIHN5c3RlbSByZXNldCBpbnRlcnJ1cHRzIHRvIGVuYWJsZS4gU2VlCisgKiAgICAgICAgICAgICAgICAgIHJjbV9pbnRlcnJ1cHRfZW5hYmxlX3QgZm9yIGRldGFpbHMuCisgKiBAcGFyYW0gRGVsYXkgICAgIEJpdCBtYXNrIG9mIHRoZSBzeXN0ZW0gcmVzZXQgaW50ZXJydXB0cyB0byBlbmFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBSQ01fU2V0U3lzdGVtUmVzZXRJbnRlcnJ1cHRDb25maWcoUkNNX1R5cGUgKmJhc2UsIHVpbnQzMl90IGludE1hc2ssIHJjbV9yZXNldF9kZWxheV90IGRlbGF5KQoreworICAgIGJhc2UtPlNSSUUgPSAoaW50TWFzayB8IGRlbGF5KTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX1NSSUUgKi8KKy8qQH0qLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyovCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRlNMX1JDTV9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcnRjLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjgwNTVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcnRjLmMKQEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3J0Yy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNFQ09ORFNfSU5fQV9EQVkgKDg2NDAwVSkKKyNkZWZpbmUgU0VDT05EU19JTl9BX0hPVVIgKDM2MDBVKQorI2RlZmluZSBTRUNPTkRTX0lOX0FfTUlOVVRFICg2MFUpCisjZGVmaW5lIERBWVNfSU5fQV9ZRUFSICgzNjVVKQorI2RlZmluZSBZRUFSX1JBTkdFX1NUQVJUICgxOTcwVSkKKyNkZWZpbmUgWUVBUl9SQU5HRV9FTkQgKDIwOTlVKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGJyaWVmIENoZWNrcyB3aGV0aGVyIHRoZSBkYXRlIGFuZCB0aW1lIHBhc3NlZCBpbiBpcyB2YWxpZAorICoKKyAqIEBwYXJhbSBkYXRldGltZSBQb2ludGVyIHRvIHN0cnVjdHVyZSB3aGVyZSB0aGUgZGF0ZSBhbmQgdGltZSBkZXRhaWxzIGFyZSBzdG9yZWQKKyAqCisgKiBAcmV0dXJuIFJldHVybnMgZmFsc2UgaWYgdGhlIGRhdGUgJiB0aW1lIGRldGFpbHMgYXJlIG91dCBvZiByYW5nZTsgdHJ1ZSBpZiBpbiByYW5nZQorICovCitzdGF0aWMgYm9vbCBSVENfQ2hlY2tEYXRldGltZUZvcm1hdChjb25zdCBydGNfZGF0ZXRpbWVfdCAqZGF0ZXRpbWUpOworCisvKiEKKyAqIEBicmllZiBDb252ZXJ0cyB0aW1lIGRhdGEgZnJvbSBkYXRldGltZSB0byBzZWNvbmRzCisgKgorICogQHBhcmFtIGRhdGV0aW1lIFBvaW50ZXIgdG8gZGF0ZXRpbWUgc3RydWN0dXJlIHdoZXJlIHRoZSBkYXRlIGFuZCB0aW1lIGRldGFpbHMgYXJlIHN0b3JlZAorICoKKyAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiBpbiBzZWNvbmRzCisgKi8KK3N0YXRpYyB1aW50MzJfdCBSVENfQ29udmVydERhdGV0aW1lVG9TZWNvbmRzKGNvbnN0IHJ0Y19kYXRldGltZV90ICpkYXRldGltZSk7CisKKy8qIQorICogQGJyaWVmIENvbnZlcnRzIHRpbWUgZGF0YSBmcm9tIHNlY29uZHMgdG8gYSBkYXRldGltZSBzdHJ1Y3R1cmUKKyAqCisgKiBAcGFyYW0gc2Vjb25kcyAgU2Vjb25kcyB2YWx1ZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBkYXRldGltZSBmb3JtYXQKKyAqIEBwYXJhbSBkYXRldGltZSBQb2ludGVyIHRvIHRoZSBkYXRldGltZSBzdHJ1Y3R1cmUgd2hlcmUgdGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiBpcyBzdG9yZWQKKyAqLworc3RhdGljIHZvaWQgUlRDX0NvbnZlcnRTZWNvbmRzVG9EYXRldGltZSh1aW50MzJfdCBzZWNvbmRzLCBydGNfZGF0ZXRpbWVfdCAqZGF0ZXRpbWUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBib29sIFJUQ19DaGVja0RhdGV0aW1lRm9ybWF0KGNvbnN0IHJ0Y19kYXRldGltZV90ICpkYXRldGltZSkKK3sKKyAgICBhc3NlcnQoZGF0ZXRpbWUpOworCisgICAgLyogVGFibGUgb2YgZGF5cyBpbiBhIG1vbnRoIGZvciBhIG5vbiBsZWFwIHllYXIuIEZpcnN0IGVudHJ5IGluIHRoZSB0YWJsZSBpcyBub3QgdXNlZCwKKyAgICAgKiB2YWxpZCBtb250aHMgc3RhcnQgZnJvbSAxCisgICAgICovCisgICAgdWludDhfdCBkYXlzUGVyTW9udGhbXSA9IHswVSwgMzFVLCAyOFUsIDMxVSwgMzBVLCAzMVUsIDMwVSwgMzFVLCAzMVUsIDMwVSwgMzFVLCAzMFUsIDMxVX07CisKKyAgICAvKiBDaGVjayB5ZWFyLCBtb250aCwgaG91ciwgbWludXRlLCBzZWNvbmRzICovCisgICAgaWYgKChkYXRldGltZS0+eWVhciA8IFlFQVJfUkFOR0VfU1RBUlQpIHx8IChkYXRldGltZS0+eWVhciA+IFlFQVJfUkFOR0VfRU5EKSB8fCAoZGF0ZXRpbWUtPm1vbnRoID4gMTJVKSB8fAorICAgICAgICAoZGF0ZXRpbWUtPm1vbnRoIDwgMVUpIHx8IChkYXRldGltZS0+aG91ciA+PSAyNFUpIHx8IChkYXRldGltZS0+bWludXRlID49IDYwVSkgfHwgKGRhdGV0aW1lLT5zZWNvbmQgPj0gNjBVKSkKKyAgICB7CisgICAgICAgIC8qIElmIG5vdCBjb3JyZWN0IHRoZW4gZXJyb3IqLworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyogQWRqdXN0IHRoZSBkYXlzIGluIEZlYnJ1YXJ5IGZvciBhIGxlYXAgeWVhciAqLworICAgIGlmICgoKChkYXRldGltZS0+eWVhciAmIDNVKSA9PSAwKSAmJiAoZGF0ZXRpbWUtPnllYXIgJSAxMDAgIT0gMCkpIHx8IChkYXRldGltZS0+eWVhciAlIDQwMCA9PSAwKSkKKyAgICB7CisgICAgICAgIGRheXNQZXJNb250aFsyXSA9IDI5VTsKKyAgICB9CisKKyAgICAvKiBDaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGRheSAqLworICAgIGlmICgoZGF0ZXRpbWUtPmRheSA+IGRheXNQZXJNb250aFtkYXRldGltZS0+bW9udGhdKSB8fCAoZGF0ZXRpbWUtPmRheSA8IDFVKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHVpbnQzMl90IFJUQ19Db252ZXJ0RGF0ZXRpbWVUb1NlY29uZHMoY29uc3QgcnRjX2RhdGV0aW1lX3QgKmRhdGV0aW1lKQoreworICAgIGFzc2VydChkYXRldGltZSk7CisKKyAgICAvKiBOdW1iZXIgb2YgZGF5cyBmcm9tIGJlZ2luIG9mIHRoZSBub24gTGVhcC15ZWFyKi8KKyAgICAvKiBOdW1iZXIgb2YgZGF5cyBmcm9tIGJlZ2luIG9mIHRoZSBub24gTGVhcC15ZWFyKi8KKyAgICB1aW50MTZfdCBtb250aERheXNbXSA9IHswVSwgMFUsIDMxVSwgNTlVLCA5MFUsIDEyMFUsIDE1MVUsIDE4MVUsIDIxMlUsIDI0M1UsIDI3M1UsIDMwNFUsIDMzNFV9OworICAgIHVpbnQzMl90IHNlY29uZHM7CisKKyAgICAvKiBDb21wdXRlIG51bWJlciBvZiBkYXlzIGZyb20gMTk3MCB0aWxsIGdpdmVuIHllYXIqLworICAgIHNlY29uZHMgPSAoZGF0ZXRpbWUtPnllYXIgLSAxOTcwVSkgKiBEQVlTX0lOX0FfWUVBUjsKKyAgICAvKiBBZGQgbGVhcCB5ZWFyIGRheXMgKi8KKyAgICBzZWNvbmRzICs9ICgoZGF0ZXRpbWUtPnllYXIgLyA0KSAtICgxOTcwVSAvIDQpKTsKKyAgICAvKiBBZGQgbnVtYmVyIG9mIGRheXMgdGlsbCBnaXZlbiBtb250aCovCisgICAgc2Vjb25kcyArPSBtb250aERheXNbZGF0ZXRpbWUtPm1vbnRoXTsKKyAgICAvKiBBZGQgZGF5cyBpbiBnaXZlbiBtb250aC4gV2Ugc3VidHJhY3QgdGhlIGN1cnJlbnQgZGF5IGFzIGl0IGlzCisgICAgICogcmVwcmVzZW50ZWQgaW4gdGhlIGhvdXJzLCBtaW51dGVzIGFuZCBzZWNvbmRzIGZpZWxkKi8KKyAgICBzZWNvbmRzICs9IChkYXRldGltZS0+ZGF5IC0gMSk7CisgICAgLyogRm9yIGxlYXAgeWVhciBpZiBtb250aCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRmVicmF1cnksIGRlY3JlbWVudCBkYXkgY291bnRlciovCisgICAgaWYgKCghKGRhdGV0aW1lLT55ZWFyICYgM1UpKSAmJiAoZGF0ZXRpbWUtPm1vbnRoIDw9IDJVKSkKKyAgICB7CisgICAgICAgIHNlY29uZHMtLTsKKyAgICB9CisKKyAgICBzZWNvbmRzID0gKHNlY29uZHMgKiBTRUNPTkRTX0lOX0FfREFZKSArIChkYXRldGltZS0+aG91ciAqIFNFQ09ORFNfSU5fQV9IT1VSKSArCisgICAgICAgICAgICAgIChkYXRldGltZS0+bWludXRlICogU0VDT05EU19JTl9BX01JTlVURSkgKyBkYXRldGltZS0+c2Vjb25kOworCisgICAgcmV0dXJuIHNlY29uZHM7Cit9CisKK3N0YXRpYyB2b2lkIFJUQ19Db252ZXJ0U2Vjb25kc1RvRGF0ZXRpbWUodWludDMyX3Qgc2Vjb25kcywgcnRjX2RhdGV0aW1lX3QgKmRhdGV0aW1lKQoreworICAgIGFzc2VydChkYXRldGltZSk7CisKKyAgICB1aW50MzJfdCB4OworICAgIHVpbnQzMl90IHNlY29uZHNSZW1haW5pbmcsIGRheXM7CisgICAgdWludDE2X3QgZGF5c0luWWVhcjsKKyAgICAvKiBUYWJsZSBvZiBkYXlzIGluIGEgbW9udGggZm9yIGEgbm9uIGxlYXAgeWVhci4gRmlyc3QgZW50cnkgaW4gdGhlIHRhYmxlIGlzIG5vdCB1c2VkLAorICAgICAqIHZhbGlkIG1vbnRocyBzdGFydCBmcm9tIDEKKyAgICAgKi8KKyAgICB1aW50OF90IGRheXNQZXJNb250aFtdID0gezBVLCAzMVUsIDI4VSwgMzFVLCAzMFUsIDMxVSwgMzBVLCAzMVUsIDMxVSwgMzBVLCAzMVUsIDMwVSwgMzFVfTsKKworICAgIC8qIFN0YXJ0IHdpdGggdGhlIHNlY29uZHMgdmFsdWUgdGhhdCBpcyBwYXNzZWQgaW4gdG8gYmUgY29udmVydGVkIHRvIGRhdGUgdGltZSBmb3JtYXQgKi8KKyAgICBzZWNvbmRzUmVtYWluaW5nID0gc2Vjb25kczsKKworICAgIC8qIENhbGN1YXRlIHRoZSBudW1iZXIgb2YgZGF5cywgd2UgYWRkIDEgZm9yIHRoZSBjdXJyZW50IGRheSB3aGljaCBpcyByZXByZXNlbnRlZCBpbiB0aGUKKyAgICAgKiBob3VycyBhbmQgc2Vjb25kcyBmaWVsZAorICAgICAqLworICAgIGRheXMgPSBzZWNvbmRzUmVtYWluaW5nIC8gU0VDT05EU19JTl9BX0RBWSArIDE7CisKKyAgICAvKiBVcGRhdGUgc2Vjb25kcyBsZWZ0Ki8KKyAgICBzZWNvbmRzUmVtYWluaW5nID0gc2Vjb25kc1JlbWFpbmluZyAlIFNFQ09ORFNfSU5fQV9EQVk7CisKKyAgICAvKiBDYWxjdWxhdGUgdGhlIGRhdGV0aW1lIGhvdXIsIG1pbnV0ZSBhbmQgc2Vjb25kIGZpZWxkcyAqLworICAgIGRhdGV0aW1lLT5ob3VyID0gc2Vjb25kc1JlbWFpbmluZyAvIFNFQ09ORFNfSU5fQV9IT1VSOworICAgIHNlY29uZHNSZW1haW5pbmcgPSBzZWNvbmRzUmVtYWluaW5nICUgU0VDT05EU19JTl9BX0hPVVI7CisgICAgZGF0ZXRpbWUtPm1pbnV0ZSA9IHNlY29uZHNSZW1haW5pbmcgLyA2MFU7CisgICAgZGF0ZXRpbWUtPnNlY29uZCA9IHNlY29uZHNSZW1haW5pbmcgJSBTRUNPTkRTX0lOX0FfTUlOVVRFOworCisgICAgLyogQ2FsY3VsYXRlIHllYXIgKi8KKyAgICBkYXlzSW5ZZWFyID0gREFZU19JTl9BX1lFQVI7CisgICAgZGF0ZXRpbWUtPnllYXIgPSBZRUFSX1JBTkdFX1NUQVJUOworICAgIHdoaWxlIChkYXlzID4gZGF5c0luWWVhcikKKyAgICB7CisgICAgICAgIC8qIERlY3JlYXNlIGRheSBjb3VudCBieSBhIHllYXIgYW5kIGluY3JlbWVudCB5ZWFyIGJ5IDEgKi8KKyAgICAgICAgZGF5cyAtPSBkYXlzSW5ZZWFyOworICAgICAgICBkYXRldGltZS0+eWVhcisrOworCisgICAgICAgIC8qIEFkanVzdCB0aGUgbnVtYmVyIG9mIGRheXMgZm9yIGEgbGVhcCB5ZWFyICovCisgICAgICAgIGlmIChkYXRldGltZS0+eWVhciAmIDNVKQorICAgICAgICB7CisgICAgICAgICAgICBkYXlzSW5ZZWFyID0gREFZU19JTl9BX1lFQVI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkYXlzSW5ZZWFyID0gREFZU19JTl9BX1lFQVIgKyAxOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQWRqdXN0IHRoZSBkYXlzIGluIEZlYnJ1YXJ5IGZvciBhIGxlYXAgeWVhciAqLworICAgIGlmICghKGRhdGV0aW1lLT55ZWFyICYgM1UpKQorICAgIHsKKyAgICAgICAgZGF5c1Blck1vbnRoWzJdID0gMjlVOworICAgIH0KKworICAgIGZvciAoeCA9IDFVOyB4IDw9IDEyVTsgeCsrKQorICAgIHsKKyAgICAgICAgaWYgKGRheXMgPD0gZGF5c1Blck1vbnRoW3hdKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRldGltZS0+bW9udGggPSB4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkYXlzIC09IGRheXNQZXJNb250aFt4XTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRhdGV0aW1lLT5kYXkgPSBkYXlzOworfQorCit2b2lkIFJUQ19Jbml0KFJUQ19UeXBlICpiYXNlLCBjb25zdCBydGNfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworICAgIHVpbnQzMl90IHJlZzsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICBDTE9DS19FbmFibGVDbG9jayhrQ0xPQ0tfUnRjMCk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKyAgICAvKiBJc3N1ZSBhIHNvZnR3YXJlIHJlc2V0IGlmIHRpbWVyIGlzIGludmFsaWQgKi8KKyAgICBpZiAoUlRDX0dldFN0YXR1c0ZsYWdzKFJUQykgJiBrUlRDX1RpbWVJbnZhbGlkRmxhZykKKyAgICB7CisgICAgICAgIFJUQ19SZXNldChSVEMpOworICAgIH0KKworICAgIHJlZyA9IGJhc2UtPkNSOworICAgIC8qIFNldHVwIHRoZSB1cGRhdGUgbW9kZSBhbmQgc3VwZXJ2aXNvciBhY2Nlc3MgbW9kZSAqLworICAgIHJlZyAmPSB+KFJUQ19DUl9VTV9NQVNLIHwgUlRDX0NSX1NVUF9NQVNLKTsKKyAgICByZWcgfD0gUlRDX0NSX1VNKGNvbmZpZy0+dXBkYXRlTW9kZSkgfCBSVENfQ1JfU1VQKGNvbmZpZy0+c3VwZXJ2aXNvckFjY2Vzcyk7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9SVENfSEFTX1dBS0VVUF9QSU5fU0VMRUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9SVENfSEFTX1dBS0VVUF9QSU5fU0VMRUNUSU9OCisgICAgLyogU2V0dXAgdGhlIHdha2V1cCBwaW4gc2VsZWN0ICovCisgICAgcmVnICY9IH4oUlRDX0NSX1dQU19NQVNLKTsKKyAgICByZWcgfD0gUlRDX0NSX1dQUyhjb25maWctPndha2V1cFNlbGVjdCk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUlRDX0hBU19XQUtFVVBfUElOICovCisgICAgYmFzZS0+Q1IgPSByZWc7CisKKyAgICAvKiBDb25maWd1cmUgdGhlIFJUQyB0aW1lIGNvbXBlbnNhdGlvbiByZWdpc3RlciAqLworICAgIGJhc2UtPlRDUiA9IChSVENfVENSX0NJUihjb25maWctPmNvbXBlbnNhdGlvbkludGVydmFsKSB8IFJUQ19UQ1JfVENSKGNvbmZpZy0+Y29tcGVuc2F0aW9uVGltZSkpOworfQorCit2b2lkIFJUQ19HZXREZWZhdWx0Q29uZmlnKHJ0Y19jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisgICAgLyogV2FrZXVwIHBpbiB3aWxsIGFzc2VydCBpZiB0aGUgUlRDIGludGVycnVwdCBhc3NlcnRzIG9yIGlmIHRoZSB3YWtldXAgcGluIGlzIHR1cm5lZCBvbiAqLworICAgIGNvbmZpZy0+d2FrZXVwU2VsZWN0ID0gZmFsc2U7CisgICAgLyogUmVnaXN0ZXJzIGNhbm5vdCBiZSB3cml0dGVuIHdoZW4gbG9ja2VkICovCisgICAgY29uZmlnLT51cGRhdGVNb2RlID0gZmFsc2U7CisgICAgLyogTm9uLXN1cGVydmlzb3IgbW9kZSB3cml0ZSBhY2Nlc3NlcyBhcmUgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBnZW5lcmF0ZSBhIGJ1cyBlcnJvciAqLworICAgIGNvbmZpZy0+c3VwZXJ2aXNvckFjY2VzcyA9IGZhbHNlOworICAgIC8qIENvbXBlbnNhdGlvbiBpbnRlcnZhbCB1c2VkIGJ5IHRoZSBjcnlzdGFsIGNvbXBlbnNhdGlvbiBsb2dpYyAqLworICAgIGNvbmZpZy0+Y29tcGVuc2F0aW9uSW50ZXJ2YWwgPSAwOworICAgIC8qIENvbXBlbnNhdGlvbiB0aW1lIHVzZWQgYnkgdGhlIGNyeXN0YWwgY29tcGVuc2F0aW9uIGxvZ2ljICovCisgICAgY29uZmlnLT5jb21wZW5zYXRpb25UaW1lID0gMDsKK30KKworc3RhdHVzX3QgUlRDX1NldERhdGV0aW1lKFJUQ19UeXBlICpiYXNlLCBjb25zdCBydGNfZGF0ZXRpbWVfdCAqZGF0ZXRpbWUpCit7CisgICAgYXNzZXJ0KGRhdGV0aW1lKTsKKworICAgIC8qIFJldHVybiBlcnJvciBpZiB0aGUgdGltZSBwcm92aWRlZCBpcyBub3QgdmFsaWQgKi8KKyAgICBpZiAoIShSVENfQ2hlY2tEYXRldGltZUZvcm1hdChkYXRldGltZSkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIFNldCB0aW1lIGluIHNlY29uZHMgKi8KKyAgICBiYXNlLT5UU1IgPSBSVENfQ29udmVydERhdGV0aW1lVG9TZWNvbmRzKGRhdGV0aW1lKTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3ZvaWQgUlRDX0dldERhdGV0aW1lKFJUQ19UeXBlICpiYXNlLCBydGNfZGF0ZXRpbWVfdCAqZGF0ZXRpbWUpCit7CisgICAgYXNzZXJ0KGRhdGV0aW1lKTsKKworICAgIHVpbnQzMl90IHNlY29uZHMgPSAwOworCisgICAgc2Vjb25kcyA9IGJhc2UtPlRTUjsKKyAgICBSVENfQ29udmVydFNlY29uZHNUb0RhdGV0aW1lKHNlY29uZHMsIGRhdGV0aW1lKTsKK30KKworc3RhdHVzX3QgUlRDX1NldEFsYXJtKFJUQ19UeXBlICpiYXNlLCBjb25zdCBydGNfZGF0ZXRpbWVfdCAqYWxhcm1UaW1lKQoreworICAgIGFzc2VydChhbGFybVRpbWUpOworCisgICAgdWludDMyX3QgYWxhcm1TZWNvbmRzID0gMDsKKyAgICB1aW50MzJfdCBjdXJyU2Vjb25kcyA9IDA7CisKKyAgICAvKiBSZXR1cm4gZXJyb3IgaWYgdGhlIGFsYXJtIHRpbWUgcHJvdmlkZWQgaXMgbm90IHZhbGlkICovCisgICAgaWYgKCEoUlRDX0NoZWNrRGF0ZXRpbWVGb3JtYXQoYWxhcm1UaW1lKSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgYWxhcm1TZWNvbmRzID0gUlRDX0NvbnZlcnREYXRldGltZVRvU2Vjb25kcyhhbGFybVRpbWUpOworCisgICAgLyogR2V0IHRoZSBjdXJyZW50IHRpbWUgKi8KKyAgICBjdXJyU2Vjb25kcyA9IGJhc2UtPlRTUjsKKworICAgIC8qIFJldHVybiBlcnJvciBpZiB0aGUgYWxhcm0gdGltZSBoYXMgcGFzc2VkICovCisgICAgaWYgKGFsYXJtU2Vjb25kcyA8IGN1cnJTZWNvbmRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRmFpbDsKKyAgICB9CisKKyAgICAvKiBTZXQgYWxhcm0gaW4gc2Vjb25kcyovCisgICAgYmFzZS0+VEFSID0gYWxhcm1TZWNvbmRzOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKwordm9pZCBSVENfR2V0QWxhcm0oUlRDX1R5cGUgKmJhc2UsIHJ0Y19kYXRldGltZV90ICpkYXRldGltZSkKK3sKKyAgICBhc3NlcnQoZGF0ZXRpbWUpOworCisgICAgdWludDMyX3QgYWxhcm1TZWNvbmRzID0gMDsKKworICAgIC8qIEdldCBhbGFybSBpbiBzZWNvbmRzICAqLworICAgIGFsYXJtU2Vjb25kcyA9IGJhc2UtPlRBUjsKKworICAgIFJUQ19Db252ZXJ0U2Vjb25kc1RvRGF0ZXRpbWUoYWxhcm1TZWNvbmRzLCBkYXRldGltZSk7Cit9CisKK3ZvaWQgUlRDX0NsZWFyU3RhdHVzRmxhZ3MoUlRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgLyogVGhlIGFsYXJtIGZsYWcgaXMgY2xlYXJlZCBieSB3cml0aW5nIHRvIHRoZSBUQVIgcmVnaXN0ZXIgKi8KKyAgICBpZiAobWFzayAmIGtSVENfQWxhcm1GbGFnKQorICAgIHsKKyAgICAgICAgYmFzZS0+VEFSID0gMFU7CisgICAgfQorCisgICAgLyogVGhlIHRpbWVyIG92ZXJmbG93IGZsYWcgaXMgY2xlYXJlZCBieSBpbml0aWFsaXppbmcgdGhlIFRTUiByZWdpc3Rlci4KKyAgICAgKiBUaGUgdGltZSBjb3VudGVyIHNob3VsZCBiZSBkaXNhYmxlZCBmb3IgdGhpcyB3cml0ZSB0byBiZSBzdWNjZXNzZnVsCisgICAgICovCisgICAgaWYgKG1hc2sgJiBrUlRDX1RpbWVPdmVyZmxvd0ZsYWcpCisgICAgeworICAgICAgICBiYXNlLT5UU1IgPSAxVTsKKyAgICB9CisKKyAgICAvKiBUaGUgdGltZXIgb3ZlcmZsb3cgZmxhZyBpcyBjbGVhcmVkIGJ5IGluaXRpYWxpemluZyB0aGUgVFNSIHJlZ2lzdGVyLgorICAgICAqIFRoZSB0aW1lIGNvdW50ZXIgc2hvdWxkIGJlIGRpc2FibGVkIGZvciB0aGlzIHdyaXRlIHRvIGJlIHN1Y2Nlc3NmdWwKKyAgICAgKi8KKyAgICBpZiAobWFzayAmIGtSVENfVGltZUludmFsaWRGbGFnKQorICAgIHsKKyAgICAgICAgYmFzZS0+VFNSID0gMVU7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9SVENfSEFTX01PTk9UT05JQykgJiYgKEZTTF9GRUFUVVJFX1JUQ19IQVNfTU9OT1RPTklDKQorCit2b2lkIFJUQ19HZXRNb25vdG9uaWNDb3VudGVyKFJUQ19UeXBlICpiYXNlLCB1aW50NjRfdCAqY291bnRlcikKK3sKKyAgICBhc3NlcnQoY291bnRlcik7CisKKyAgICAqY291bnRlciA9ICgoKHVpbnQ2NF90KWJhc2UtPk1DSFIgPDwgMzIpIHwgKCh1aW50NjRfdCliYXNlLT5NQ0xSKSk7Cit9CisKK3ZvaWQgUlRDX1NldE1vbm90b25pY0NvdW50ZXIoUlRDX1R5cGUgKmJhc2UsIHVpbnQ2NF90IGNvdW50ZXIpCit7CisgICAgLyogUHJlcGFyZSB0byBpbml0aWFsaXplIHRoZSByZWdpc3RlciB3aXRoIHRoZSBuZXcgdmFsdWUgd3JpdHRlbiAqLworICAgIGJhc2UtPk1FUiAmPSB+UlRDX01FUl9NQ0VfTUFTSzsKKworICAgIGJhc2UtPk1DSFIgPSAodWludDMyX3QpKChjb3VudGVyKSA+PiAzMik7CisgICAgYmFzZS0+TUNMUiA9ICh1aW50MzJfdCkoY291bnRlcik7Cit9CisKK3N0YXR1c190IFJUQ19JbmNyZW1lbnRNb25vdG9uaWNDb3VudGVyKFJUQ19UeXBlICpiYXNlKQoreworICAgIGlmIChiYXNlLT5TUiAmIChSVENfU1JfTU9GX01BU0sgfCBSVENfU1JfVElGX01BU0spKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRmFpbDsKKyAgICB9CisKKyAgICAvKiBQcmVwYXJlIHRvIHN3aXRjaCB0byBpbmNyZW1lbnQgbW9kZSAqLworICAgIGJhc2UtPk1FUiB8PSBSVENfTUVSX01DRV9NQVNLOworICAgIC8qIFdyaXRlIGFueXRoaW5nIHNvIHRoZSBjb3VudGVyIGluY3JlbWVudHMqLworICAgIGJhc2UtPk1DTFIgPSAxVTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SVENfSEFTX01PTk9UT05JQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcnRjLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWVmZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcnRjLmgKQEAgLTAsMCArMSw0MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX1JUQ19IXworI2RlZmluZSBfRlNMX1JUQ19IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIHJ0YworICogQHsKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKyNkZWZpbmUgRlNMX1JUQ19EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDApKSAvKiE8IFZlcnNpb24gMi4wLjAgKi8KKy8qQH0qLworCisvKiEgQGJyaWVmIExpc3Qgb2YgUlRDIGludGVycnVwdHMgKi8KK3R5cGVkZWYgZW51bSBfcnRjX2ludGVycnVwdF9lbmFibGUKK3sKKyAgICBrUlRDX1RpbWVJbnZhbGlkSW50ZXJydXB0RW5hYmxlID0gUlRDX0lFUl9USUlFX01BU0ssICAvKiE8IFRpbWUgaW52YWxpZCBpbnRlcnJ1cHQuKi8KKyAgICBrUlRDX1RpbWVPdmVyZmxvd0ludGVycnVwdEVuYWJsZSA9IFJUQ19JRVJfVE9JRV9NQVNLLCAvKiE8IFRpbWUgb3ZlcmZsb3cgaW50ZXJydXB0LiovCisgICAga1JUQ19BbGFybUludGVycnVwdEVuYWJsZSA9IFJUQ19JRVJfVEFJRV9NQVNLLCAgICAgICAgLyohPCBBbGFybSBpbnRlcnJ1cHQuKi8KKyAgICBrUlRDX1NlY29uZHNJbnRlcnJ1cHRFbmFibGUgPSBSVENfSUVSX1RTSUVfTUFTSyAgICAgICAvKiE8IFNlY29uZHMgaW50ZXJydXB0LiovCit9IHJ0Y19pbnRlcnJ1cHRfZW5hYmxlX3Q7CisKKy8qISBAYnJpZWYgTGlzdCBvZiBSVEMgZmxhZ3MgKi8KK3R5cGVkZWYgZW51bSBfcnRjX3N0YXR1c19mbGFncworeworICAgIGtSVENfVGltZUludmFsaWRGbGFnID0gUlRDX1NSX1RJRl9NQVNLLCAgLyohPCBUaW1lIGludmFsaWQgZmxhZyAqLworICAgIGtSVENfVGltZU92ZXJmbG93RmxhZyA9IFJUQ19TUl9UT0ZfTUFTSywgLyohPCBUaW1lIG92ZXJmbG93IGZsYWcgKi8KKyAgICBrUlRDX0FsYXJtRmxhZyA9IFJUQ19TUl9UQUZfTUFTSyAgICAgICAgIC8qITwgQWxhcm0gZmxhZyovCit9IHJ0Y19zdGF0dXNfZmxhZ3NfdDsKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JUQ19IQVNfT1NDX1NDWFApICYmIEZTTF9GRUFUVVJFX1JUQ19IQVNfT1NDX1NDWFApCisKKy8qISBAYnJpZWYgTGlzdCBvZiBSVEMgT3NjaWxsYXRvciBjYXBhY2l0b3IgbG9hZCBzZXR0aW5ncyAqLwordHlwZWRlZiBlbnVtIF9ydGNfb3NjX2NhcF9sb2FkCit7CisgICAga1JUQ19DYXBhY2l0b3JfMnAgPSBSVENfQ1JfU0MyUF9NQVNLLCAgLyohPCAyIHBGIGNhcGFjaXRvciBsb2FkICovCisgICAga1JUQ19DYXBhY2l0b3JfNHAgPSBSVENfQ1JfU0M0UF9NQVNLLCAgLyohPCA0IHBGIGNhcGFjaXRvciBsb2FkICovCisgICAga1JUQ19DYXBhY2l0b3JfOHAgPSBSVENfQ1JfU0M4UF9NQVNLLCAgLyohPCA4IHBGIGNhcGFjaXRvciBsb2FkICovCisgICAga1JUQ19DYXBhY2l0b3JfMTZwID0gUlRDX0NSX1NDMTZQX01BU0sgLyohPCAxNiBwRiBjYXBhY2l0b3IgbG9hZCAqLworfSBydGNfb3NjX2NhcF9sb2FkX3Q7CisKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TQ0dfSEFTX09TQ19TQ1hQICovCisKKy8qISBAYnJpZWYgU3RydWN0dXJlIGlzIHVzZWQgdG8gaG9sZCB0aGUgZGF0ZSBhbmQgdGltZSAqLwordHlwZWRlZiBzdHJ1Y3QgX3J0Y19kYXRldGltZQoreworICAgIHVpbnQxNl90IHllYXI7ICAvKiE8IFJhbmdlIGZyb20gMTk3MCB0byAyMDk5LiovCisgICAgdWludDhfdCBtb250aDsgIC8qITwgUmFuZ2UgZnJvbSAxIHRvIDEyLiovCisgICAgdWludDhfdCBkYXk7ICAgIC8qITwgUmFuZ2UgZnJvbSAxIHRvIDMxIChkZXBlbmRpbmcgb24gbW9udGgpLiovCisgICAgdWludDhfdCBob3VyOyAgIC8qITwgUmFuZ2UgZnJvbSAwIHRvIDIzLiovCisgICAgdWludDhfdCBtaW51dGU7IC8qITwgUmFuZ2UgZnJvbSAwIHRvIDU5LiovCisgICAgdWludDhfdCBzZWNvbmQ7IC8qITwgUmFuZ2UgZnJvbSAwIHRvIDU5LiovCit9IHJ0Y19kYXRldGltZV90OworCisvKiEKKyAqIEBicmllZiBSVEMgY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgUlRDIHBlcmlwaGVyYWwuIFRvIGluaXRpYWxpemUgdGhpcworICogc3RydWN0dXJlIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMsIGNhbGwgdGhlIFJUQ19HZXREZWZhdWx0Q29uZmlnKCkgZnVuY3Rpb24gYW5kIHBhc3MgYQorICogcG9pbnRlciB0byB5b3VyIGNvbmZpZyBzdHJ1Y3R1cmUgaW5zdGFuY2UuCisgKgorICogVGhlIGNvbmZpZyBzdHJ1Y3QgY2FuIGJlIG1hZGUgY29uc3Qgc28gaXQgcmVzaWRlcyBpbiBmbGFzaAorICovCit0eXBlZGVmIHN0cnVjdCBfcnRjX2NvbmZpZworeworICAgIGJvb2wgd2FrZXVwU2VsZWN0OyAgICAgICAgICAgICAvKiE8IHRydWU6IFdha2V1cCBwaW4gb3V0cHV0cyB0aGUgMzIgS0h6IGNsb2NrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOldha2V1cCBwaW4gdXNlZCB0byB3YWtldXAgdGhlIGNoaXAgICovCisgICAgYm9vbCB1cGRhdGVNb2RlOyAgICAgICAgICAgICAgIC8qITwgdHJ1ZTogUmVnaXN0ZXJzIGNhbiBiZSB3cml0dGVuIGV2ZW4gd2hlbiBsb2NrZWQgdW5kZXIgY2VydGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnMsIGZhbHNlOiBObyB3cml0ZXMgYWxsb3dlZCB3aGVuIHJlZ2lzdGVycyBhcmUgbG9ja2VkICovCisgICAgYm9vbCBzdXBlcnZpc29yQWNjZXNzOyAgICAgICAgIC8qITwgdHJ1ZTogTm9uLXN1cGVydmlzb3IgYWNjZXNzZXMgYXJlIGFsbG93ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U6IE5vbi1zdXBlcnZpc29yIGFjY2Vzc2VzIGFyZSBub3Qgc3VwcG9ydGVkICovCisgICAgdWludDMyX3QgY29tcGVuc2F0aW9uSW50ZXJ2YWw7IC8qITwgQ29tcGVuc2F0aW9uIGludGVydmFsIHRoYXQgaXMgd3JpdHRlbiB0byB0aGUgQ0lSIGZpZWxkIGluIFJUQyBUQ1IgUmVnaXN0ZXIgKi8KKyAgICB1aW50MzJfdCBjb21wZW5zYXRpb25UaW1lOyAgICAgLyohPCBDb21wZW5zYXRpb24gdGltZSB0aGF0IGlzIHdyaXR0ZW4gdG8gdGhlIFRDUiBmaWVsZCBpbiBSVEMgVENSIFJlZ2lzdGVyICovCit9IHJ0Y19jb25maWdfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiEKKyAqIEBuYW1lIEluaXRpYWxpemF0aW9uIGFuZCBkZWluaXRpYWxpemF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFVuZ2F0ZXMgdGhlIFJUQyBjbG9jayBhbmQgY29uZmlndXJlcyB0aGUgcGVyaXBoZXJhbCBmb3IgYmFzaWMgb3BlcmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIGEgc29mdHdhcmUgcmVzZXQgaWYgdGhlIHRpbWVyIGludmFsaWQgZmxhZyBpcyBzZXQuCisgKgorICogQG5vdGUgVGhpcyBBUEkgc2hvdWxkIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcHBsaWNhdGlvbiB1c2luZyB0aGUgUlRDIGRyaXZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSAgIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSB1c2VyJ3MgUlRDIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIFJUQ19Jbml0KFJUQ19UeXBlICpiYXNlLCBjb25zdCBydGNfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIFN0b3BzIHRoZSB0aW1lciBhbmQgZ2F0ZSB0aGUgUlRDIGNsb2NrLgorICoKKyAqIEBwYXJhbSBiYXNlIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgUlRDX0RlaW5pdChSVENfVHlwZSAqYmFzZSkKK3sKKyAgICAvKiBTdG9wIHRoZSBSVEMgdGltZXIgKi8KKyAgICBiYXNlLT5TUiAmPSB+UlRDX1NSX1RDRV9NQVNLOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIEdhdGUgdGhlIG1vZHVsZSBjbG9jayAqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhrQ0xPQ0tfUnRjMCk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCit9CisKKy8qIQorICogQGJyaWVmIEZpbGxzIGluIHRoZSBSVEMgY29uZmlnIHN0cnVjdCB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICoKKyAqIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYXMgZm9sbG93cy4KKyAqIEBjb2RlCisgKiAgICBjb25maWctPndha2V1cFNlbGVjdCA9IGZhbHNlOworICogICAgY29uZmlnLT51cGRhdGVNb2RlID0gZmFsc2U7CisgKiAgICBjb25maWctPnN1cGVydmlzb3JBY2Nlc3MgPSBmYWxzZTsKKyAqICAgIGNvbmZpZy0+Y29tcGVuc2F0aW9uSW50ZXJ2YWwgPSAwOworICogICAgY29uZmlnLT5jb21wZW5zYXRpb25UaW1lID0gMDsKKyAqIEBlbmRjb2RlCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIHVzZXIncyBSVEMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgUlRDX0dldERlZmF1bHRDb25maWcocnRjX2NvbmZpZ190ICpjb25maWcpOworCisvKiEgQH0qLworCisvKiEKKyAqIEBuYW1lIEN1cnJlbnQgVGltZSAmIEFsYXJtCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIFJUQyBkYXRlIGFuZCB0aW1lIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gdGltZSBzdHJ1Y3R1cmUuCisgKgorICogVGhlIFJUQyBjb3VudGVyIG11c3QgYmUgc3RvcHBlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSB3cml0ZXMgdG8gdGhlIFJUQworICogc2Vjb25kcyByZWdpc3RlciBmYWlsIGlmIHRoZSBSVEMgY291bnRlciBpcyBydW5uaW5nLgorICoKKyAqIEBwYXJhbSBiYXNlICAgICBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBkYXRldGltZSBQb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2hlcmUgdGhlIGRhdGUgYW5kIHRpbWUgZGV0YWlscyBhcmUgc3RvcmVkLgorICoKKyAqIEByZXR1cm4ga1N0YXR1c19TdWNjZXNzOiBTdWNjZXNzIGluIHNldHRpbmcgdGhlIHRpbWUgYW5kIHN0YXJ0aW5nIHRoZSBSVEMKKyAqICAgICAgICAga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ6IEVycm9yIGJlY2F1c2UgdGhlIGRhdGV0aW1lIGZvcm1hdCBpcyBpbmNvcnJlY3QKKyAqLworc3RhdHVzX3QgUlRDX1NldERhdGV0aW1lKFJUQ19UeXBlICpiYXNlLCBjb25zdCBydGNfZGF0ZXRpbWVfdCAqZGF0ZXRpbWUpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBSVEMgdGltZSBhbmQgc3RvcmVzIGl0IGluIHRoZSBnaXZlbiB0aW1lIHN0cnVjdHVyZS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gZGF0ZXRpbWUgUG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHdoZXJlIHRoZSBkYXRlIGFuZCB0aW1lIGRldGFpbHMgYXJlIHN0b3JlZC4KKyAqLwordm9pZCBSVENfR2V0RGF0ZXRpbWUoUlRDX1R5cGUgKmJhc2UsIHJ0Y19kYXRldGltZV90ICpkYXRldGltZSk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIFJUQyBhbGFybSB0aW1lLgorICoKKyAqIFRoZSBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIGFsYXJtIHRpbWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBwcmVzZW50CisgKiB0aW1lLiBJZiBub3QsIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBzZXQgdGhlIGFsYXJtIGFuZCByZXR1cm5zIGFuIGVycm9yLgorICoKKyAqIEBwYXJhbSBiYXNlICAgICAgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gYWxhcm1UaW1lIFBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aGVyZSB0aGUgYWxhcm0gdGltZSBpcyBzdG9yZWQuCisgKgorICogQHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M6IHN1Y2Nlc3MgaW4gc2V0dGluZyB0aGUgUlRDIGFsYXJtCisgKiAgICAgICAgIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OiBFcnJvciBiZWNhdXNlIHRoZSBhbGFybSBkYXRldGltZSBmb3JtYXQgaXMgaW5jb3JyZWN0CisgKiAgICAgICAgIGtTdGF0dXNfRmFpbDogRXJyb3IgYmVjYXVzZSB0aGUgYWxhcm0gdGltZSBoYXMgYWxyZWFkeSBwYXNzZWQKKyAqLworc3RhdHVzX3QgUlRDX1NldEFsYXJtKFJUQ19UeXBlICpiYXNlLCBjb25zdCBydGNfZGF0ZXRpbWVfdCAqYWxhcm1UaW1lKTsKKworLyohCisgKiBAYnJpZWYgUmV0dXJucyB0aGUgUlRDIGFsYXJtIHRpbWUuCisgKgorICogQHBhcmFtIGJhc2UgICAgIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGRhdGV0aW1lIFBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aGVyZSB0aGUgYWxhcm0gZGF0ZSBhbmQgdGltZSBkZXRhaWxzIGFyZSBzdG9yZWQuCisgKi8KK3ZvaWQgUlRDX0dldEFsYXJtKFJUQ19UeXBlICpiYXNlLCBydGNfZGF0ZXRpbWVfdCAqZGF0ZXRpbWUpOworCisvKiEgQH0qLworCisvKiEKKyAqIEBuYW1lIEludGVycnVwdCBJbnRlcmZhY2UKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgc2VsZWN0ZWQgUlRDIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGJhc2UgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0cyB0byBlbmFibGUuIFRoaXMgaXMgYSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgICAgICBlbnVtZXJhdGlvbiA6OnJ0Y19pbnRlcnJ1cHRfZW5hYmxlX3QKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFJUQ19FbmFibGVJbnRlcnJ1cHRzKFJUQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPklFUiB8PSBtYXNrOworfQorCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyB0aGUgc2VsZWN0ZWQgUlRDIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGJhc2UgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0cyB0byBlbmFibGUuIFRoaXMgaXMgYSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgICAgICBlbnVtZXJhdGlvbiA6OnJ0Y19pbnRlcnJ1cHRfZW5hYmxlX3QKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFJUQ19EaXNhYmxlSW50ZXJydXB0cyhSVENfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5JRVIgJj0gfm1hc2s7Cit9CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGVuYWJsZWQgUlRDIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGJhc2UgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKgorICogQHJldHVybiBUaGUgZW5hYmxlZCBpbnRlcnJ1cHRzLiBUaGlzIGlzIHRoZSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgIGVudW1lcmF0aW9uIDo6cnRjX2ludGVycnVwdF9lbmFibGVfdAorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJUQ19HZXRFbmFibGVkSW50ZXJydXB0cyhSVENfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKGJhc2UtPklFUiAmIChSVENfSUVSX1RJSUVfTUFTSyB8IFJUQ19JRVJfVE9JRV9NQVNLIHwgUlRDX0lFUl9UQUlFX01BU0sgfCBSVENfSUVSX1RTSUVfTUFTSykpOworfQorCisvKiEgQH0qLworCisvKiEKKyAqIEBuYW1lIFN0YXR1cyBJbnRlcmZhY2UKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgUlRDIHN0YXR1cyBmbGFncy4KKyAqCisgKiBAcGFyYW0gYmFzZSBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuIFRoZSBzdGF0dXMgZmxhZ3MuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgZW51bWVyYXRpb24gOjpydGNfc3RhdHVzX2ZsYWdzX3QKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBSVENfR2V0U3RhdHVzRmxhZ3MoUlRDX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChiYXNlLT5TUiAmIChSVENfU1JfVElGX01BU0sgfCBSVENfU1JfVE9GX01BU0sgfCBSVENfU1JfVEFGX01BU0spKTsKK30KKworLyohCisgKiBAYnJpZWYgIENsZWFycyB0aGUgUlRDIHN0YXR1cyBmbGFncy4KKyAqCisgKiBAcGFyYW0gYmFzZSBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBtYXNrIFRoZSBzdGF0dXMgZmxhZ3MgdG8gY2xlYXIuIFRoaXMgaXMgYSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgICAgICBlbnVtZXJhdGlvbiA6OnJ0Y19zdGF0dXNfZmxhZ3NfdAorICovCit2b2lkIFJUQ19DbGVhclN0YXR1c0ZsYWdzKFJUQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBUaW1lciBTdGFydCBhbmQgU3RvcAorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBTdGFydHMgdGhlIFJUQyB0aW1lIGNvdW50ZXIuCisgKgorICogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgdGltZXIgY291bnRlciBpbmNyZW1lbnRzIG9uY2UgYSBzZWNvbmQgcHJvdmlkZWQgU1JbVE9GXSBvcgorICogU1JbVElGXSBhcmUgbm90IHNldC4KKyAqCisgKiBAcGFyYW0gYmFzZSBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFJUQ19TdGFydFRpbWVyKFJUQ19UeXBlICpiYXNlKQoreworICAgIGJhc2UtPlNSIHw9IFJUQ19TUl9UQ0VfTUFTSzsKK30KKworLyohCisgKiBAYnJpZWYgU3RvcHMgdGhlIFJUQyB0aW1lIGNvdW50ZXIuCisgKgorICogUlRDJ3Mgc2Vjb25kcyByZWdpc3RlciBjYW4gYmUgd3JpdHRlbiB0byBvbmx5IHdoZW4gdGhlIHRpbWVyIGlzIHN0b3BwZWQuCisgKgorICogQHBhcmFtIGJhc2UgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBSVENfU3RvcFRpbWVyKFJUQ19UeXBlICpiYXNlKQoreworICAgIGJhc2UtPlNSICY9IH5SVENfU1JfVENFX01BU0s7Cit9CisKKy8qISBAfSovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SVENfSEFTX09TQ19TQ1hQKSAmJiBGU0xfRkVBVFVSRV9SVENfSEFTX09TQ19TQ1hQKQorCisvKiEKKyAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHNwZWNpZmllZCBjYXBhY2l0b3IgY29uZmlndXJhdGlvbiBmb3IgdGhlIFJUQyBvc2NpbGxhdG9yLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNhcExvYWQgT3NjaWxsYXRvciBsb2FkcyB0byBlbmFibGUuIFRoaXMgaXMgYSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgICAgICAgICBlbnVtZXJhdGlvbiA6OnJ0Y19vc2NfY2FwX2xvYWRfdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUlRDX1NldE9zY0NhcExvYWQoUlRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNhcExvYWQpCit7CisgICAgdWludDMyX3QgcmVnID0gYmFzZS0+Q1I7CisKKyAgICByZWcgJj0gfihSVENfQ1JfU0MyUF9NQVNLIHwgUlRDX0NSX1NDNFBfTUFTSyB8IFJUQ19DUl9TQzhQX01BU0sgfCBSVENfQ1JfU0MxNlBfTUFTSyk7CisgICAgcmVnIHw9IGNhcExvYWQ7CisKKyAgICBiYXNlLT5DUiA9IHJlZzsKK30KKworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NDR19IQVNfT1NDX1NDWFAgKi8KKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgYSBzb2Z0d2FyZSByZXNldCBvbiB0aGUgUlRDIG1vZHVsZS4KKyAqCisgKiBUaGlzIHJlc2V0cyBhbGwgUlRDIHJlZ2lzdGVycyBleGNlcHQgZm9yIHRoZSBTV1IgYml0IGFuZCB0aGUgUlRDX1dBUiBhbmQgUlRDX1JBUgorICogcmVnaXN0ZXJzLiBUaGUgU1dSIGJpdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIGV4cGxpY2l0bHkgY2xlYXJpbmcgaXQuCisgKgorICogQHBhcmFtIGJhc2UgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBSVENfUmVzZXQoUlRDX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+Q1IgfD0gUlRDX0NSX1NXUl9NQVNLOworICAgIGJhc2UtPkNSICY9IH5SVENfQ1JfU1dSX01BU0s7CisKKyAgICAvKiBTZXQgVFNSIHJlZ2lzdGVyIHRvIDB4MSB0byBhdm9pZCB0aGUgdGltZXIgaW52YWxpZCAoVElGKSBiaXQgYmVpbmcgc2V0IGluIHRoZSBTUiByZWdpc3RlciAqLworICAgIGJhc2UtPlRTUiA9IDFVOworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9SVENfSEFTX01PTk9UT05JQykgJiYgKEZTTF9GRUFUVVJFX1JUQ19IQVNfTU9OT1RPTklDKQorCisvKiEKKyAqIEBuYW1lIE1vbm90b25pYyBjb3VudGVyIGZ1bmN0aW9ucworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBSZWFkcyB0aGUgdmFsdWVzIG9mIHRoZSBNb25vdG9uaWMgQ291bnRlciBIaWdoIGFuZCBNb25vdG9uaWMgQ291bnRlciBMb3cgYW5kIHJldHVybnMKKyAqICAgICAgICB0aGVtIGFzIGEgc2luZ2xlIHZhbHVlLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNvdW50ZXIgUG9pbnRlciB0byB2YXJpYWJsZSB3aGVyZSB0aGUgdmFsdWUgaXMgc3RvcmVkLgorICovCit2b2lkIFJUQ19HZXRNb25vdG9uaWNDb3VudGVyKFJUQ19UeXBlICpiYXNlLCB1aW50NjRfdCAqY291bnRlcik7CisKKy8qIQorICogQGJyaWVmIFdyaXRlcyB2YWx1ZXMgTW9ub3RvbmljIENvdW50ZXIgSGlnaCBhbmQgTW9ub3RvbmljIENvdW50ZXIgTG93IGJ5IGRlY29tcG9zaW5nCisgKiAgICAgICAgdGhlIGdpdmVuIHNpbmdsZSB2YWx1ZS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjb3VudGVyIENvdW50ZXIgdmFsdWUKKyAqLwordm9pZCBSVENfU2V0TW9ub3RvbmljQ291bnRlcihSVENfVHlwZSAqYmFzZSwgdWludDY0X3QgY291bnRlcik7CisKKy8qIQorICogQGJyaWVmIEluY3JlbWVudHMgdGhlIE1vbm90b25pYyBDb3VudGVyIGJ5IG9uZS4KKyAqCisgKiBJbmNyZW1lbnRzIHRoZSBNb25vdG9uaWMgQ291bnRlciAocmVnaXN0ZXJzIFJUQ19NQ0xSIGFuZCBSVENfTUNIUiBhY2NvcmRpbmdseSkgYnkgc2V0dGluZworICogdGhlIG1vbm90b25pYyBjb3VudGVyIGVuYWJsZSAoTUVSW01DRV0pIGFuZCB0aGVuIHdyaXRpbmcgdG8gdGhlIFJUQ19NQ0xSIHJlZ2lzdGVyLiBBIHdyaXRlIHRvIHRoZQorICogbW9ub3RvbmljIGNvdW50ZXIgbG93IHRoYXQgY2F1c2VzIGl0IHRvIG92ZXJmbG93IGFsc28gaW5jcmVtZW50cyB0aGUgbW9ub3RvbmljIGNvdW50ZXIgaGlnaC4KKyAqCisgKiBAcGFyYW0gYmFzZSBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuIGtTdGF0dXNfU3VjY2Vzczogc3VjY2VzcworICogICAgICAgICBrU3RhdHVzX0ZhaWw6IGVycm9yIG9jY3VycmVkLCBlaXRoZXIgdGltZSBpbnZhbGlkIG9yIG1vbm90b25pYyBvdmVyZmxvdyBmbGFnIHdhcyBmb3VuZAorICovCitzdGF0dXNfdCBSVENfSW5jcmVtZW50TW9ub3RvbmljQ291bnRlcihSVENfVHlwZSAqYmFzZSk7CisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SVENfSEFTX01PTk9UT05JQyAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisvKiEgQH0qLworCisjZW5kaWYgLyogX0ZTTF9SVENfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3NpbS5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfc2ltLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlNTEyZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3NpbS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3NpbS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVVNCX1ZPTFRBR0VfUkVHVUxBVE9SKSAmJiBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JfVk9MVEFHRV9SRUdVTEFUT1IpCit2b2lkIFNJTV9TZXRVc2JWb2x0UmVndWxhdG9yRW5hYmxlTW9kZSh1aW50MzJfdCBtYXNrKQoreworICAgIFNJTS0+U09QVDFDRkcgfD0gKFNJTV9TT1BUMUNGR19VUldFX01BU0sgfCBTSU1fU09QVDFDRkdfVVZTV0VfTUFTSyB8IFNJTV9TT1BUMUNGR19VU1NXRV9NQVNLKTsKKworICAgIFNJTS0+U09QVDEgPSAoU0lNLT5TT1BUMSAmIH5rU0lNX1VzYlZvbHRSZWdFbmFibGVJbkFsbE1vZGVzKSB8IG1hc2s7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVVNCX1ZPTFRBR0VfUkVHVUxBVE9SICovCisKK3ZvaWQgU0lNX0dldFVuaXF1ZUlkKHNpbV91aWRfdCAqdWlkKQoreworI2lmIGRlZmluZWQoU0lNX1VJREgpCisgICAgdWlkLT5IID0gU0lNLT5VSURIOworI2VuZGlmCisgICAgdWlkLT5NSCA9IFNJTS0+VUlETUg7CisgICAgdWlkLT5NTCA9IFNJTS0+VUlETUw7CisgICAgdWlkLT5MID0gU0lNLT5VSURMOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfc2ltLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9zaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTBlNGZiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfc2ltLmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GU0xfU0lNX0hfCisjZGVmaW5lIF9GU0xfU0lNX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qISBAYWRkdG9ncm91cCBzaW0gKi8KKy8qISBAeyovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKyNkZWZpbmUgRlNMX1NJTV9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDApKSAvKiE8IERyaXZlciB2ZXJzaW9uIDIuMC4wICovCisvKkB9Ki8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VTQl9WT0xUQUdFX1JFR1VMQVRPUikgJiYgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVVNCX1ZPTFRBR0VfUkVHVUxBVE9SKQorLyohQGJyaWVmIFVTQiB2b2x0YWdlIHJlZ3VsYXRvciBlbmFibGUgc2V0dGluZy4gKi8KK2VudW0gX3NpbV91c2Jfdm9sdF9yZWdfZW5hYmxlX21vZGUKK3sKKyAgICBrU0lNX1VzYlZvbHRSZWdFbmFibGUgPSBTSU1fU09QVDFfVVNCUkVHRU5fTUFTSywgICAgICAgICAgIC8qITwgRW5hYmxlIHZvbHRhZ2UgcmVndWxhdG9yLiAqLworICAgIGtTSU1fVXNiVm9sdFJlZ0VuYWJsZUluTG93UG93ZXIgPSBTSU1fU09QVDFfVVNCVlNUQllfTUFTSywgLyohPCBFbmFibGUgdm9sdGFnZSByZWd1bGF0b3IgaW4gVkxQUi9WTFBXIG1vZGVzLiAqLworICAgIGtTSU1fVXNiVm9sdFJlZ0VuYWJsZUluU3RvcCA9IFNJTV9TT1BUMV9VU0JTU1RCWV9NQVNLLCAvKiE8IEVuYWJsZSB2b2x0YWdlIHJlZ3VsYXRvciBpbiBTVE9QL1ZMUFMvTExTL1ZMTFMgbW9kZXMuICovCisgICAga1NJTV9Vc2JWb2x0UmVnRW5hYmxlSW5BbGxNb2RlcyA9IFNJTV9TT1BUMV9VU0JSRUdFTl9NQVNLIHwgU0lNX1NPUFQxX1VTQlNTVEJZX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSU1fU09QVDFfVVNCVlNUQllfTUFTSyAvKiE8IEVuYWJsZSB2b2x0YWdlIHJlZ3VsYXRvciBpbiBhbGwgcG93ZXIgbW9kZXMuICovCit9OworI2VuZGlmIC8qIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VTQl9WT0xUQUdFX1JFR1VMQVRPUikgJiYgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVVNCX1ZPTFRBR0VfUkVHVUxBVE9SKSAqLworCisvKiFAYnJpZWYgVW5pcXVlIElELiAqLwordHlwZWRlZiBzdHJ1Y3QgX3NpbV91aWQKK3sKKyNpZiBkZWZpbmVkKFNJTV9VSURIKQorICAgIHVpbnQzMl90IEg7IC8qITwgVUlESC4gICovCisjZW5kaWYKKyAgICB1aW50MzJfdCBNSDsgLyohPCBVSURNSC4gKi8KKyAgICB1aW50MzJfdCBNTDsgLyohPCBVSURNTC4gKi8KKyAgICB1aW50MzJfdCBMOyAgLyohPCBVSURMLiAgKi8KK30gc2ltX3VpZF90OworCisvKiFAYnJpZWYgRmxhc2ggZW5hYmxlIG1vZGUuICovCitlbnVtIF9zaW1fZmxhc2hfbW9kZQoreworICAgIGtTSU1fRmxhc2hEaXNhYmxlSW5XYWl0ID0gU0lNX0ZDRkcxX0ZMQVNIRE9aRV9NQVNLLCAvKiE8IERpc2FibGUgZmxhc2ggaW4gd2FpdCBtb2RlLiAgICovCisgICAga1NJTV9GbGFzaERpc2FibGUgPSBTSU1fRkNGRzFfRkxBU0hESVNfTUFTSyAgICAgICAgIC8qITwgRGlzYWJsZSBmbGFzaCBpbiBub3JtYWwgbW9kZS4gKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVVNCX1ZPTFRBR0VfUkVHVUxBVE9SKSAmJiBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JfVk9MVEFHRV9SRUdVTEFUT1IpCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBVU0Igdm9sdGFnZSByZWd1bGF0b3Igc2V0dGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgd2hldGhlciB0aGUgVVNCIHZvbHRhZ2UgcmVndWxhdG9yIGlzIGVuYWJsZWQgaW4KKyAqIG5vcm1hbCBSVU4gbW9kZSwgU1RPUC9WTFBTL0xMUy9WTExTIG1vZGVzLCBhbmQgVkxQUi9WTFBXIG1vZGVzLiBUaGUgY29uZmlndXJhdGlvbnMKKyAqIGFyZSBwYXNzZWQgaW4gYXMgbWFzayB2YWx1ZSBvZiBccmVmIF9zaW1fdXNiX3ZvbHRfcmVnX2VuYWJsZV9tb2RlLiBGb3IgZXhhbXBsZSwgdG8gZW5hYmxlCisgKiBVU0Igdm9sdGFnZSByZWd1bGF0b3IgaW4gUlVOL1ZMUFIvVkxQVyBtb2RlcyBhbmQgZGlzYWJsZSBpbiBTVE9QL1ZMUFMvTExTL1ZMTFMgbW9kZSwKKyAqIHVzZToKKyAqCisgKiBTSU1fU2V0VXNiVm9sdFJlZ3VsYXRvckVuYWJsZU1vZGUoa1NJTV9Vc2JWb2x0UmVnRW5hYmxlIHwga1NJTV9Vc2JWb2x0UmVnRW5hYmxlSW5Mb3dQb3dlcik7CisgKgorICogQHBhcmFtIG1hc2sgIFVTQiB2b2x0YWdlIHJlZ3VsYXRvciBlbmFibGUgc2V0dGluZy4KKyAqLwordm9pZCBTSU1fU2V0VXNiVm9sdFJlZ3VsYXRvckVuYWJsZU1vZGUodWludDMyX3QgbWFzayk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVVNCX1ZPTFRBR0VfUkVHVUxBVE9SICovCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiByZWdpc3RlciB2YWx1ZS4KKyAqCisgKiBAcGFyYW0gdWlkIFBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB0byBzYXZlIHRoZSBVSUQgdmFsdWUuCisgKi8KK3ZvaWQgU0lNX0dldFVuaXF1ZUlkKHNpbV91aWRfdCAqdWlkKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgZmxhc2ggZW5hYmxlIG1vZGUuCisgKgorICogQHBhcmFtIG1vZGUgVGhlIG1vZGUgdG8gc2V0OyBzZWUgXHJlZiBfc2ltX2ZsYXNoX21vZGUgZm9yIG1vZGUgZGV0YWlscy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFNJTV9TZXRGbGFzaE1vZGUodWludDhfdCBtb2RlKQoreworICAgIFNJTS0+RkNGRzEgPSBtb2RlOworfQorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyovCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRlNMX1NJTV9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfc21jLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9zbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWNmMTkzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfc21jLmMKQEAgLTAsMCArMSw0MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3NtYy5oIgorI2luY2x1ZGUgImZzbF9mbGFzaC5oIgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19QQVJBTSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19QQVJBTSkKK3ZvaWQgU01DX0dldFBhcmFtKFNNQ19UeXBlICpiYXNlLCBzbWNfcGFyYW1fdCAqcGFyYW0pCit7CisgICAgdWludDMyX3QgcmVnID0gYmFzZS0+UEFSQU07CisgICAgcGFyYW0tPmhzcnVuRW5hYmxlID0gKGJvb2wpKHJlZyAmIFNNQ19QQVJBTV9FSFNSVU5fTUFTSyk7CisgICAgcGFyYW0tPmxsc0VuYWJsZSA9IChib29sKShyZWcgJiBTTUNfUEFSQU1fRUxMU19NQVNLKTsKKyAgICBwYXJhbS0+bGxzMkVuYWJsZSA9IChib29sKShyZWcgJiBTTUNfUEFSQU1fRUxMUzJfTUFTSyk7CisgICAgcGFyYW0tPnZsbHMwRW5hYmxlID0gKGJvb2wpKHJlZyAmIFNNQ19QQVJBTV9FVkxMUzBfTUFTSyk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19QQVJBTSAqLworCit2b2lkIFNNQ19QcmVFbnRlclN0b3BNb2Rlcyh2b2lkKQoreworICAgIGZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX3N0YXR1c190IHNwZWN1bGF0aW9uU3RhdHVzID0KKyAgICB7CisgICAgICAgIGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZSwgLyogRGlzYWJsZSBpbnN0cnVjdGlvbiBzcGVjdWxhdGlvbi4qLworICAgICAgICBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkRpc2FibGUsIC8qIERpc2FibGUgZGF0YSBzcGVjdWxhdGlvbi4qLworICAgIH07CisKKyAgICBfX2Rpc2FibGVfaXJxKCk7CisgICAgX19JU0IoKTsKKworICAgIC8qCisgICAgICogQmVmb3JlIGVudGVyIHN0b3AgbW9kZXMsIHRoZSBmbGFzaCBjYWNoZSBwcmVmZXRjaCBzaG91bGQgYmUgZGlzYWJsZWQuCisgICAgICogT3RoZXJ3aXNlIHRoZSBwcmVmZXRjaCBtaWdodCBiZSBpbnRlcnJ1cHRlZCBieSBzdG9wLCB0aGVuIHRoZSBkYXRhIGFuZAorICAgICAqIGFuZCBpbnN0cnVjdGlvbiBmcm9tIGZsYXNoIGFyZSB3cm9uZy4KKyAgICAgKi8KKyAgICBGTEFTSF9QZmxhc2hTZXRQcmVmZXRjaFNwZWN1bGF0aW9uKCZzcGVjdWxhdGlvblN0YXR1cyk7Cit9CisKK3ZvaWQgU01DX1Bvc3RFeGl0U3RvcE1vZGVzKHZvaWQpCit7CisgICAgZmxhc2hfcHJlZmV0Y2hfc3BlY3VsYXRpb25fc3RhdHVzX3Qgc3BlY3VsYXRpb25TdGF0dXMgPQorICAgIHsKKyAgICAgICAga0ZMQVNIX3ByZWZldGNoU3BlY3VsYXRpb25PcHRpb25FbmFibGUsIC8qIEVuYWJsZSBpbnN0cnVjdGlvbiBzcGVjdWxhdGlvbi4qLworICAgICAgICBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkVuYWJsZSwgLyogRW5hYmxlIGRhdGEgc3BlY3VsYXRpb24uKi8KKyAgICB9OworCisgICAgRkxBU0hfUGZsYXNoU2V0UHJlZmV0Y2hTcGVjdWxhdGlvbigmc3BlY3VsYXRpb25TdGF0dXMpOworCisgICAgX19lbmFibGVfaXJxKCk7CisgICAgX19JU0IoKTsKK30KKworc3RhdHVzX3QgU01DX1NldFBvd2VyTW9kZVJ1bihTTUNfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50OF90IHJlZzsKKworICAgIHJlZyA9IGJhc2UtPlBNQ1RSTDsKKyAgICAvKiBjb25maWd1cmUgTm9ybWFsIFJVTiBtb2RlICovCisgICAgcmVnICY9IH5TTUNfUE1DVFJMX1JVTk1fTUFTSzsKKyAgICByZWcgfD0gKGtTTUNfUnVuTm9ybWFsIDw8IFNNQ19QTUNUUkxfUlVOTV9TSElGVCk7CisgICAgYmFzZS0+UE1DVFJMID0gcmVnOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19ISUdIX1NQRUVEX1JVTl9NT0RFKQorc3RhdHVzX3QgU01DX1NldFBvd2VyTW9kZUhzcnVuKFNNQ19UeXBlICpiYXNlKQoreworICAgIHVpbnQ4X3QgcmVnOworCisgICAgcmVnID0gYmFzZS0+UE1DVFJMOworICAgIC8qIGNvbmZpZ3VyZSBIaWdoIFNwZWVkIFJVTiBtb2RlICovCisgICAgcmVnICY9IH5TTUNfUE1DVFJMX1JVTk1fTUFTSzsKKyAgICByZWcgfD0gKGtTTUNfSHNydW4gPDwgU01DX1BNQ1RSTF9SVU5NX1NISUZUKTsKKyAgICBiYXNlLT5QTUNUUkwgPSByZWc7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSAqLworCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlV2FpdChTTUNfVHlwZSAqYmFzZSkKK3sKKyAgICAvKiBjb25maWd1cmUgTm9ybWFsIFdhaXQgbW9kZSAqLworICAgIFNDQi0+U0NSICY9IH5TQ0JfU0NSX1NMRUVQREVFUF9Nc2s7CisgICAgX19EU0IoKTsKKyAgICBfX1dGSSgpOworICAgIF9fSVNCKCk7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlU3RvcChTTUNfVHlwZSAqYmFzZSwgc21jX3BhcnRpYWxfc3RvcF9vcHRpb25fdCBvcHRpb24pCit7CisgICAgdWludDhfdCByZWc7CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1BTVE9QTykgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19QU1RPUE8pCisgICAgLyogY29uZmlndXJlIHRoZSBQYXJ0aWFsIFN0b3AgbW9kZSBpbiBOb3JhbWwgU3RvcCBtb2RlICovCisgICAgcmVnID0gYmFzZS0+U1RPUENUUkw7CisgICAgcmVnICY9IH5TTUNfU1RPUENUUkxfUFNUT1BPX01BU0s7CisgICAgcmVnIHw9ICgodWludDMyX3Qpb3B0aW9uIDw8IFNNQ19TVE9QQ1RSTF9QU1RPUE9fU0hJRlQpOworICAgIGJhc2UtPlNUT1BDVFJMID0gcmVnOworI2VuZGlmCisKKyAgICAvKiBjb25maWd1cmUgTm9ybWFsIFN0b3AgbW9kZSAqLworICAgIHJlZyA9IGJhc2UtPlBNQ1RSTDsKKyAgICByZWcgJj0gflNNQ19QTUNUUkxfU1RPUE1fTUFTSzsKKyAgICByZWcgfD0gKGtTTUNfU3RvcE5vcm1hbCA8PCBTTUNfUE1DVFJMX1NUT1BNX1NISUZUKTsKKyAgICBiYXNlLT5QTUNUUkwgPSByZWc7CisKKyAgICAvKiBTZXQgdGhlIFNMRUVQREVFUCBiaXQgdG8gZW5hYmxlIGRlZXAgc2xlZXAgbW9kZSAoc3RvcCBtb2RlKSAqLworICAgIFNDQi0+U0NSIHw9IFNDQl9TQ1JfU0xFRVBERUVQX01zazsKKworICAgIC8qIHJlYWQgYmFjayB0byBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gdmFsaWQgYmVmb3JlIGVudGVyIHN0b3AgbW9kZSAqLworICAgICh2b2lkKWJhc2UtPlBNQ1RSTDsKKyAgICBfX0RTQigpOworICAgIF9fV0ZJKCk7CisgICAgX19JU0IoKTsKKworICAgIC8qIGNoZWNrIHdoZXRoZXIgdGhlIHBvd2VyIG1vZGUgZW50ZXIgU3RvcCBtb2RlIHN1Y2NlZWQgKi8KKyAgICBpZiAoYmFzZS0+UE1DVFJMICYgU01DX1BNQ1RSTF9TVE9QQV9NQVNLKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfU01DX1N0b3BBYm9ydDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKKyAgICB9Cit9CisKK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVWbHByKFNNQ19UeXBlICpiYXNlCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MUFdVSSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MUFdVSSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd2FrZXVwTW9kZQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCit7CisgICAgdWludDhfdCByZWc7CisKKyAgICByZWcgPSBiYXNlLT5QTUNUUkw7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MUFdVSSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MUFdVSSkKKyAgICAvKiBjb25maWd1cmUgd2hldGhlciB0aGUgc3lzdGVtIHJlbWFpbnMgaW4gVkxQIG1vZGUgb24gYW4gaW50ZXJydXB0ICovCisgICAgaWYgKHdha2V1cE1vZGUpCisgICAgeworICAgICAgICAvKiBleGl0cyB0byBSVU4gbW9kZSBvbiBhbiBpbnRlcnJ1cHQgKi8KKyAgICAgICAgcmVnIHw9IFNNQ19QTUNUUkxfTFBXVUlfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogcmVtYWlucyBpbiBWTFAgbW9kZSBvbiBhbiBpbnRlcnJ1cHQgKi8KKyAgICAgICAgcmVnICY9IH5TTUNfUE1DVFJMX0xQV1VJX01BU0s7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBXVUkgKi8KKworICAgIC8qIGNvbmZpZ3VyZSBWTFBSIG1vZGUgKi8KKyAgICByZWcgJj0gflNNQ19QTUNUUkxfUlVOTV9NQVNLOworICAgIHJlZyB8PSAoa1NNQ19SdW5WbHByIDw8IFNNQ19QTUNUUkxfUlVOTV9TSElGVCk7CisgICAgYmFzZS0+UE1DVFJMID0gcmVnOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgU01DX1NldFBvd2VyTW9kZVZscHcoU01DX1R5cGUgKmJhc2UpCit7CisgICAgLyogY29uZmlndXJlIFZMUFcgbW9kZSAqLworICAgIC8qIFNldCB0aGUgU0xFRVBERUVQIGJpdCB0byBlbmFibGUgZGVlcCBzbGVlcCBtb2RlICovCisgICAgU0NCLT5TQ1IgJj0gflNDQl9TQ1JfU0xFRVBERUVQX01zazsKKyAgICBfX0RTQigpOworICAgIF9fV0ZJKCk7CisgICAgX19JU0IoKTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVWbHBzKFNNQ19UeXBlICpiYXNlKQoreworICAgIHVpbnQ4X3QgcmVnOworCisgICAgLyogY29uZmlndXJlIFZMUFMgbW9kZSAqLworICAgIHJlZyA9IGJhc2UtPlBNQ1RSTDsKKyAgICByZWcgJj0gflNNQ19QTUNUUkxfU1RPUE1fTUFTSzsKKyAgICByZWcgfD0gKGtTTUNfU3RvcFZscHMgPDwgU01DX1BNQ1RSTF9TVE9QTV9TSElGVCk7CisgICAgYmFzZS0+UE1DVFJMID0gcmVnOworCisgICAgLyogU2V0IHRoZSBTTEVFUERFRVAgYml0IHRvIGVuYWJsZSBkZWVwIHNsZWVwIG1vZGUgKi8KKyAgICBTQ0ItPlNDUiB8PSBTQ0JfU0NSX1NMRUVQREVFUF9Nc2s7CisKKyAgICAvKiByZWFkIGJhY2sgdG8gbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIHZhbGlkIGJlZm9yZSBlbnRlciBzdG9wIG1vZGUgKi8KKyAgICAodm9pZCliYXNlLT5QTUNUUkw7CisgICAgX19EU0IoKTsKKyAgICBfX1dGSSgpOworICAgIF9fSVNCKCk7CisKKyAgICAvKiBjaGVjayB3aGV0aGVyIHRoZSBwb3dlciBtb2RlIGVudGVyIFZMUFMgbW9kZSBzdWNjZWVkICovCisgICAgaWYgKGJhc2UtPlBNQ1RSTCAmIFNNQ19QTUNUUkxfU1RPUEFfTUFTSykKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX1NNQ19TdG9wQWJvcnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgfQorfQorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKQorc3RhdHVzX3QgU01DX1NldFBvd2VyTW9kZUxscyhTTUNfVHlwZSAqYmFzZQorI2lmICgoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKSB8fCBcCisgICAgIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNtY19wb3dlcl9tb2RlX2xsc19jb25maWdfdCAqY29uZmlnCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoreworICAgIHVpbnQ4X3QgcmVnOworCisgICAgLyogY29uZmlndXJlIHRvIExMUyBtb2RlICovCisgICAgcmVnID0gYmFzZS0+UE1DVFJMOworICAgIHJlZyAmPSB+U01DX1BNQ1RSTF9TVE9QTV9NQVNLOworICAgIHJlZyB8PSAoa1NNQ19TdG9wTGxzIDw8IFNNQ19QTUNUUkxfU1RPUE1fU0hJRlQpOworICAgIGJhc2UtPlBNQ1RSTCA9IHJlZzsKKworLyogY29uZmlndXJlIExMUyBzdWItbW9kZSovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkKKyAgICByZWcgPSBiYXNlLT5TVE9QQ1RSTDsKKyAgICByZWcgJj0gflNNQ19TVE9QQ1RSTF9MTFNNX01BU0s7CisgICAgcmVnIHw9ICgodWludDMyX3QpY29uZmlnLT5zdWJNb2RlIDw8IFNNQ19TVE9QQ1RSTF9MTFNNX1NISUZUKTsKKyAgICBiYXNlLT5TVE9QQ1RSTCA9IHJlZzsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPKQorICAgIGlmIChjb25maWctPmVuYWJsZUxwb0Nsb2NrKQorICAgIHsKKyAgICAgICAgYmFzZS0+U1RPUENUUkwgJj0gflNNQ19TVE9QQ1RSTF9MUE9QT19NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5TVE9QQ1RSTCB8PSBTTUNfU1RPUENUUkxfTFBPUE9fTUFTSzsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19MUE9QTyAqLworCisgICAgLyogU2V0IHRoZSBTTEVFUERFRVAgYml0IHRvIGVuYWJsZSBkZWVwIHNsZWVwIG1vZGUgKi8KKyAgICBTQ0ItPlNDUiB8PSBTQ0JfU0NSX1NMRUVQREVFUF9Nc2s7CisKKyAgICAvKiByZWFkIGJhY2sgdG8gbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIHZhbGlkIGJlZm9yZSBlbnRlciBzdG9wIG1vZGUgKi8KKyAgICAodm9pZCliYXNlLT5QTUNUUkw7CisgICAgX19EU0IoKTsKKyAgICBfX1dGSSgpOworICAgIF9fSVNCKCk7CisKKyAgICAvKiBjaGVjayB3aGV0aGVyIHRoZSBwb3dlciBtb2RlIGVudGVyIExMUyBtb2RlIHN1Y2NlZWQgKi8KKyAgICBpZiAoYmFzZS0+UE1DVFJMICYgU01DX1BNQ1RSTF9TVE9QQV9NQVNLKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfU01DX1N0b3BBYm9ydDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKKyAgICB9Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUgKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSWV9MT1dfTEVBS0FHRV9TVE9QX01PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSWV9MT1dfTEVBS0FHRV9TVE9QX01PREUpCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlVmxscyhTTUNfVHlwZSAqYmFzZSwgY29uc3Qgc21jX3Bvd2VyX21vZGVfdmxsc19jb25maWdfdCAqY29uZmlnKQoreworICAgIHVpbnQ4X3QgcmVnOworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19QT1JQTykgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19QT1JQTykKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykgJiYgRlNMX0ZFQVRVUkVfU01DX1VTRV9WTExTQ1RSTF9SRUcpIHx8ICAgICBcCisgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX1VTRV9TVE9QQ1RSTF9WTExTTSkgJiYgRlNMX0ZFQVRVUkVfU01DX1VTRV9TVE9QQ1RSTF9WTExTTSkgfHwgXAorICAgIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUpCisgICAgaWYgKGNvbmZpZy0+c3ViTW9kZSA9PSBrU01DX1N0b3BTdWIwKQorI2VuZGlmCisgICAgeworICAgICAgICAvKiBjb25maWd1cmUgd2hldGhlciB0aGUgUG9yIERldGVjdCB3b3JrIGluIFZsbHMwIG1vZGUgKi8KKyAgICAgICAgaWYgKGNvbmZpZy0+ZW5hYmxlUG9yRGV0ZWN0SW5WbGxzMCkKKyAgICAgICAgeworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19VU0VfVkxMU0NUUkxfUkVHKSAmJiBGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykKKyAgICAgICAgICAgIGJhc2UtPlZMTFNDVFJMICY9IH5TTUNfVkxMU0NUUkxfUE9SUE9fTUFTSzsKKyNlbHNlCisgICAgICAgICAgICBiYXNlLT5TVE9QQ1RSTCAmPSB+U01DX1NUT1BDVFJMX1BPUlBPX01BU0s7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykgJiYgRlNMX0ZFQVRVUkVfU01DX1VTRV9WTExTQ1RSTF9SRUcpCisgICAgICAgICAgICBiYXNlLT5WTExTQ1RSTCB8PSBTTUNfVkxMU0NUUkxfUE9SUE9fTUFTSzsKKyNlbHNlCisgICAgICAgICAgICBiYXNlLT5TVE9QQ1RSTCB8PSBTTUNfU1RPUENUUkxfUE9SUE9fTUFTSzsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfUE9SUE8gKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfUkFNMl9QT1dFUl9PUFRJT04pICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfUkFNMl9QT1dFUl9PUFRJT04pCisgICAgZWxzZSBpZiAoY29uZmlnLT5zdWJNb2RlID09IGtTTUNfU3RvcFN1YjIpCisgICAgeworICAgICAgICAvKiBjb25maWd1cmUgd2hldGhlciB0aGUgUG9yIERldGVjdCB3b3JrIGluIFZsbHMwIG1vZGUgKi8KKyAgICAgICAgaWYgKGNvbmZpZy0+ZW5hYmxlUmFtMkluVmxsczIpCisgICAgICAgIHsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykgJiYgRlNMX0ZFQVRVUkVfU01DX1VTRV9WTExTQ1RSTF9SRUcpCisgICAgICAgICAgICBiYXNlLT5WTExTQ1RSTCB8PSBTTUNfVkxMU0NUUkxfUkFNMlBPX01BU0s7CisjZWxzZQorICAgICAgICAgICAgYmFzZS0+U1RPUENUUkwgfD0gU01DX1NUT1BDVFJMX1JBTTJQT19NQVNLOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX1VTRV9WTExTQ1RSTF9SRUcpICYmIEZTTF9GRUFUVVJFX1NNQ19VU0VfVkxMU0NUUkxfUkVHKQorICAgICAgICAgICAgYmFzZS0+VkxMU0NUUkwgJj0gflNNQ19WTExTQ1RSTF9SQU0yUE9fTUFTSzsKKyNlbHNlCisgICAgICAgICAgICBiYXNlLT5TVE9QQ1RSTCAmPSB+U01DX1NUT1BDVFJMX1JBTTJQT19NQVNLOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19SQU0yX1BPV0VSX09QVElPTiAqLworCisgICAgLyogY29uZmlndXJlIHRvIFZMTFMgbW9kZSAqLworICAgIHJlZyA9IGJhc2UtPlBNQ1RSTDsKKyAgICByZWcgJj0gflNNQ19QTUNUUkxfU1RPUE1fTUFTSzsKKyAgICByZWcgfD0gKGtTTUNfU3RvcFZsbHMgPDwgU01DX1BNQ1RSTF9TVE9QTV9TSElGVCk7CisgICAgYmFzZS0+UE1DVFJMID0gcmVnOworCisvKiBjb25maWd1cmUgdGhlIFZMTFMgc3ViLW1vZGUgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykgJiYgRlNMX0ZFQVRVUkVfU01DX1VTRV9WTExTQ1RSTF9SRUcpCisgICAgcmVnID0gYmFzZS0+VkxMU0NUUkw7CisgICAgcmVnICY9IH5TTUNfVkxMU0NUUkxfVkxMU01fTUFTSzsKKyAgICByZWcgfD0gKCh1aW50MzJfdCljb25maWctPnN1Yk1vZGUgPDwgU01DX1ZMTFNDVFJMX1ZMTFNNX1NISUZUKTsKKyAgICBiYXNlLT5WTExTQ1RSTCA9IHJlZzsKKyNlbHNlCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkKKyAgICByZWcgPSBiYXNlLT5TVE9QQ1RSTDsKKyAgICByZWcgJj0gflNNQ19TVE9QQ1RSTF9MTFNNX01BU0s7CisgICAgcmVnIHw9ICgodWludDMyX3QpY29uZmlnLT5zdWJNb2RlIDw8IFNNQ19TVE9QQ1RSTF9MTFNNX1NISUZUKTsKKyAgICBiYXNlLT5TVE9QQ1RSTCA9IHJlZzsKKyNlbHNlCisgICAgcmVnID0gYmFzZS0+U1RPUENUUkw7CisgICAgcmVnICY9IH5TTUNfU1RPUENUUkxfVkxMU01fTUFTSzsKKyAgICByZWcgfD0gKCh1aW50MzJfdCljb25maWctPnN1Yk1vZGUgPDwgU01DX1NUT1BDVFJMX1ZMTFNNX1NISUZUKTsKKyAgICBiYXNlLT5TVE9QQ1RSTCA9IHJlZzsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFICovCisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pCisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlTHBvQ2xvY2spCisgICAgeworICAgICAgICBiYXNlLT5TVE9QQ1RSTCAmPSB+U01DX1NUT1BDVFJMX0xQT1BPX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPlNUT1BDVFJMIHw9IFNNQ19TVE9QQ1RSTF9MUE9QT19NQVNLOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPICovCisKKyAgICAvKiBTZXQgdGhlIFNMRUVQREVFUCBiaXQgdG8gZW5hYmxlIGRlZXAgc2xlZXAgbW9kZSAqLworICAgIFNDQi0+U0NSIHw9IFNDQl9TQ1JfU0xFRVBERUVQX01zazsKKworICAgIC8qIHJlYWQgYmFjayB0byBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gdmFsaWQgYmVmb3JlIGVudGVyIHN0b3AgbW9kZSAqLworICAgICh2b2lkKWJhc2UtPlBNQ1RSTDsKKyAgICBfX0RTQigpOworICAgIF9fV0ZJKCk7CisgICAgX19JU0IoKTsKKworICAgIC8qIGNoZWNrIHdoZXRoZXIgdGhlIHBvd2VyIG1vZGUgZW50ZXIgTExTIG1vZGUgc3VjY2VlZCAqLworICAgIGlmIChiYXNlLT5QTUNUUkwgJiBTTUNfUE1DVFJMX1NUT1BBX01BU0spCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19TTUNfU3RvcEFib3J0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworICAgIH0KK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUllfTE9XX0xFQUtBR0VfU1RPUF9NT0RFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9zbWMuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3NtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OGNlODMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9zbWMuaApAQCAtMCwwICsxLDQ1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0ZTTF9TTUNfSF8KKyNkZWZpbmUgX0ZTTF9TTUNfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohIEBhZGR0b2dyb3VwIHNtYyAqLworLyohIEB7ICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBTTUMgZHJpdmVyIHZlcnNpb24gMi4wLjMuICovCisjZGVmaW5lIEZTTF9TTUNfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAwLCAzKSkKKy8qQH0qLworCisvKiEKKyAqIEBicmllZiBQb3dlciBNb2RlcyBQcm90ZWN0aW9uCisgKi8KK3R5cGVkZWYgZW51bSBfc21jX3Bvd2VyX21vZGVfcHJvdGVjdGlvbgoreworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSWV9MT1dfTEVBS0FHRV9TVE9QX01PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSWV9MT1dfTEVBS0FHRV9TVE9QX01PREUpCisgICAga1NNQ19BbGxvd1Bvd2VyTW9kZVZsbHMgPSBTTUNfUE1QUk9UX0FWTExTX01BU0ssIC8qITwgQWxsb3cgVmVyeS1sb3ctbGVha2FnZSBTdG9wIE1vZGUuICovCisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUpCisgICAga1NNQ19BbGxvd1Bvd2VyTW9kZUxscyA9IFNNQ19QTVBST1RfQUxMU19NQVNLLCAvKiE8IEFsbG93IExvdy1sZWFrYWdlIFN0b3AgTW9kZS4gICAgICAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUgKi8KKyAgICBrU01DX0FsbG93UG93ZXJNb2RlVmxwID0gU01DX1BNUFJPVF9BVkxQX01BU0ssIC8qITwgQWxsb3cgVmVyeS1Mb3ctcG93ZXIgTW9kZS4gICAgICAgICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19ISUdIX1NQRUVEX1JVTl9NT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0hJR0hfU1BFRURfUlVOX01PREUpCisgICAga1NNQ19BbGxvd1Bvd2VyTW9kZUhzcnVuID0gU01DX1BNUFJPVF9BSFNSVU5fTUFTSywgLyohPCBBbGxvdyBIaWdoLXNwZWVkIFJ1biBtb2RlLiAgICAgICAgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0hJR0hfU1BFRURfUlVOX01PREUgKi8KKyAgICBrU01DX0FsbG93UG93ZXJNb2RlQWxsID0gKDBVCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNNQ19QTVBST1RfQVZMTFNfTUFTSworI2VuZGlmCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU01DX1BNUFJPVF9BTExTX01BU0sKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU01DX1BNUFJPVF9BVkxQX01BU0sKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0hJR0hfU1BFRURfUlVOX01PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTTUNfQWxsb3dQb3dlck1vZGVIc3J1bgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0hJR0hfU1BFRURfUlVOX01PREUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgLyohPCBBbGxvdyBhbGwgcG93ZXIgbW9kZS4gICAgICAgICAgICAgICovCit9IHNtY19wb3dlcl9tb2RlX3Byb3RlY3Rpb25fdDsKKworLyohCisgKiBAYnJpZWYgUG93ZXIgTW9kZXMgaW4gUE1TVEFUCisgKi8KK3R5cGVkZWYgZW51bSBfc21jX3Bvd2VyX3N0YXRlCit7CisgICAga1NNQ19Qb3dlclN0YXRlUnVuID0gMHgwMVUgPDwgMFUsICAvKiE8IDAwMDBfMDAwMSAtIEN1cnJlbnQgcG93ZXIgbW9kZSBpcyBSVU4gICAqLworICAgIGtTTUNfUG93ZXJTdGF0ZVN0b3AgPSAweDAxVSA8PCAxVSwgLyohPCAwMDAwXzAwMTAgLSBDdXJyZW50IHBvd2VyIG1vZGUgaXMgU1RPUCAgKi8KKyAgICBrU01DX1Bvd2VyU3RhdGVWbHByID0gMHgwMVUgPDwgMlUsIC8qITwgMDAwMF8wMTAwIC0gQ3VycmVudCBwb3dlciBtb2RlIGlzIFZMUFIgICovCisgICAga1NNQ19Qb3dlclN0YXRlVmxwdyA9IDB4MDFVIDw8IDNVLCAvKiE8IDAwMDBfMTAwMCAtIEN1cnJlbnQgcG93ZXIgbW9kZSBpcyBWTFBXICAqLworICAgIGtTTUNfUG93ZXJTdGF0ZVZscHMgPSAweDAxVSA8PCA0VSwgLyohPCAwMDAxXzAwMDAgLSBDdXJyZW50IHBvd2VyIG1vZGUgaXMgVkxQUyAgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUpCisgICAga1NNQ19Qb3dlclN0YXRlTGxzID0gMHgwMVUgPDwgNVUsIC8qITwgMDAxMF8wMDAwIC0gQ3VycmVudCBwb3dlciBtb2RlIGlzIExMUyAgICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfTE9XX0xFQUtBR0VfU1RPUF9NT0RFICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkKKyAgICBrU01DX1Bvd2VyU3RhdGVWbGxzID0gMHgwMVUgPDwgNlUsIC8qITwgMDEwMF8wMDAwIC0gQ3VycmVudCBwb3dlciBtb2RlIGlzIFZMTFMgICovCisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0hJR0hfU1BFRURfUlVOX01PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSkKKyAgICBrU01DX1Bvd2VyU3RhdGVIc3J1biA9IDB4MDFVIDw8IDdVIC8qITwgMTAwMF8wMDAwIC0gQ3VycmVudCBwb3dlciBtb2RlIGlzIEhTUlVOICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0hJR0hfU1BFRURfUlVOX01PREUgKi8KK30gc21jX3Bvd2VyX3N0YXRlX3Q7CisKKy8qIQorICogQGJyaWVmIFJ1biBtb2RlIGRlZmluaXRpb24KKyAqLwordHlwZWRlZiBlbnVtIF9zbWNfcnVuX21vZGUKK3sKKyAgICBrU01DX1J1bk5vcm1hbCA9IDBVLCAvKiE8IE5vcm1hbCBSVU4gbW9kZS4gICAgICAgICAgICAgKi8KKyAgICBrU01DX1J1blZscHIgPSAyVSwgICAvKiE8IFZlcnktbG93LXBvd2VyIFJVTiBtb2RlLiAgICAgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0hJR0hfU1BFRURfUlVOX01PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSkKKyAgICBrU01DX0hzcnVuID0gM1UgLyohPCBIaWdoLXNwZWVkIFJ1biBtb2RlIChIU1JVTikuICovCisjZW5kaWYgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSAqLworfSBzbWNfcnVuX21vZGVfdDsKKworLyohCisgKiBAYnJpZWYgU3RvcCBtb2RlIGRlZmluaXRpb24KKyAqLwordHlwZWRlZiBlbnVtIF9zbWNfc3RvcF9tb2RlCit7CisgICAga1NNQ19TdG9wTm9ybWFsID0gMFUsIC8qITwgTm9ybWFsIFNUT1AgbW9kZS4gICAgICAgICAgICovCisgICAga1NNQ19TdG9wVmxwcyA9IDJVLCAgIC8qITwgVmVyeS1sb3ctcG93ZXIgU1RPUCBtb2RlLiAgICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKQorICAgIGtTTUNfU3RvcExscyA9IDNVLCAvKiE8IExvdy1sZWFrYWdlIFN0b3AgbW9kZS4gICAgICAqLworI2VuZGlmICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSWV9MT1dfTEVBS0FHRV9TVE9QX01PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSWV9MT1dfTEVBS0FHRV9TVE9QX01PREUpCisgICAga1NNQ19TdG9wVmxscyA9IDRVIC8qITwgVmVyeS1sb3ctbGVha2FnZSBTdG9wIG1vZGUuICovCisjZW5kaWYKK30gc21jX3N0b3BfbW9kZV90OworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX1VTRV9WTExTQ1RSTF9SRUcpICYmIEZTTF9GRUFUVVJFX1NNQ19VU0VfVkxMU0NUUkxfUkVHKSB8fCAgICAgXAorICAgIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19VU0VfU1RPUENUUkxfVkxMU00pICYmIEZTTF9GRUFUVVJFX1NNQ19VU0VfU1RPUENUUkxfVkxMU00pIHx8IFwKKyAgICAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKQorLyohCisgKiBAYnJpZWYgVkxMUy9MTFMgc3RvcCBzdWIgbW9kZSBkZWZpbml0aW9uCisgKi8KK3R5cGVkZWYgZW51bSBfc21jX3N0b3Bfc3VibW9kZQoreworICAgIGtTTUNfU3RvcFN1YjAgPSAwVSwgLyohPCBTdG9wIHN1Ym1vZGUgMCwgZm9yIFZMTFMwL0xMUzAuICovCisgICAga1NNQ19TdG9wU3ViMSA9IDFVLCAvKiE8IFN0b3Agc3VibW9kZSAxLCBmb3IgVkxMUzEvTExTMS4gKi8KKyAgICBrU01DX1N0b3BTdWIyID0gMlUsIC8qITwgU3RvcCBzdWJtb2RlIDIsIGZvciBWTExTMi9MTFMyLiAqLworICAgIGtTTUNfU3RvcFN1YjMgPSAzVSAgLyohPCBTdG9wIHN1Ym1vZGUgMywgZm9yIFZMTFMzL0xMUzMuICovCit9IHNtY19zdG9wX3N1Ym1vZGVfdDsKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBQYXJ0aWFsIFNUT1Agb3B0aW9uCisgKi8KK3R5cGVkZWYgZW51bSBfc21jX3BhcnRpYWxfc3RvcF9tb2RlCit7CisgICAga1NNQ19QYXJ0aWFsU3RvcCA9IDBVLCAgLyohPCBTVE9QIC0gTm9ybWFsIFN0b3AgbW9kZSovCisgICAga1NNQ19QYXJ0aWFsU3RvcDEgPSAxVSwgLyohPCBQYXJ0aWFsIFN0b3Agd2l0aCBib3RoIHN5c3RlbSBhbmQgYnVzIGNsb2NrcyBkaXNhYmxlZCovCisgICAga1NNQ19QYXJ0aWFsU3RvcDIgPSAyVSwgLyohPCBQYXJ0aWFsIFN0b3Agd2l0aCBzeXN0ZW0gY2xvY2sgZGlzYWJsZWQgYW5kIGJ1cyBjbG9jayBlbmFibGVkKi8KK30gc21jX3BhcnRpYWxfc3RvcF9vcHRpb25fdDsKKworLyohCisgKiBAYnJpZWYgU01DIGNvbmZpZ3VyYXRpb24gc3RhdHVzLgorICovCitlbnVtIF9zbWNfc3RhdHVzCit7CisgICAga1N0YXR1c19TTUNfU3RvcEFib3J0ID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX1BPV0VSLCAwKSAvKiE8IEVudGVyaW5nIFN0b3AgbW9kZSBpcyBhYm9ydCovCit9OworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJJRCkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJJRCkKKy8qIQorICogQGJyaWVmIElQIHZlcnNpb24gSUQgZGVmaW5pdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3NtY192ZXJzaW9uX2lkCit7CisgICAgdWludDE2X3QgZmVhdHVyZTsgLyohPCBGZWF0dXJlIFNwZWNpZmljYXRpb24gTnVtYmVyLiAqLworICAgIHVpbnQ4X3QgbWlub3I7ICAgIC8qITwgTWlub3IgdmVyc2lvbiBudW1iZXIuICAgICAgICAgKi8KKyAgICB1aW50OF90IG1ham9yOyAgICAvKiE8IE1ham9yIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICovCit9IHNtY192ZXJzaW9uX2lkX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJJRCAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19QQVJBTSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19QQVJBTSkKKy8qIQorICogQGJyaWVmIElQIHBhcmFtZXRlciBkZWZpbml0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfc21jX3BhcmFtCit7CisgICAgYm9vbCBoc3J1bkVuYWJsZTsgLyohPCBIU1JVTiBtb2RlIGVuYWJsZS4gKi8KKyAgICBib29sIGxsc0VuYWJsZTsgICAvKiE8IExMUyBtb2RlIGVuYWJsZS4gICAqLworICAgIGJvb2wgbGxzMkVuYWJsZTsgIC8qITwgTExTMiBtb2RlIGVuYWJsZS4gICovCisgICAgYm9vbCB2bGxzMEVuYWJsZTsgLyohPCBWTExTMCBtb2RlIGVuYWJsZS4gKi8KK30gc21jX3BhcmFtX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19QQVJBTSAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkgfHwgXAorICAgIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pCisvKiEKKyAqIEBicmllZiBTTUMgTG93LUxlYWthZ2UgU3RvcCBwb3dlciBtb2RlIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9zbWNfcG93ZXJfbW9kZV9sbHNfY29uZmlnCit7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkKKyAgICBzbWNfc3RvcF9zdWJtb2RlX3Qgc3ViTW9kZTsgLyohPCBMb3ctbGVha2FnZSBTdG9wIHN1Yi1tb2RlICovCisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPKQorICAgIGJvb2wgZW5hYmxlTHBvQ2xvY2s7IC8qITwgRW5hYmxlIExQTyBjbG9jayBpbiBMTFMgbW9kZSAqLworI2VuZGlmCit9IHNtY19wb3dlcl9tb2RlX2xsc19jb25maWdfdDsKKyNlbmRpZiAvKiAoRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSB8fCBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPKSAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkKKy8qIQorICogQGJyaWVmIFNNQyBWZXJ5IExvdy1MZWFrYWdlIFN0b3AgcG93ZXIgbW9kZSBjb25maWd1cmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfc21jX3Bvd2VyX21vZGVfdmxsc19jb25maWcKK3sKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykgJiYgRlNMX0ZFQVRVUkVfU01DX1VTRV9WTExTQ1RSTF9SRUcpIHx8ICAgICBcCisgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX1VTRV9TVE9QQ1RSTF9WTExTTSkgJiYgRlNMX0ZFQVRVUkVfU01DX1VTRV9TVE9QQ1RSTF9WTExTTSkgfHwgXAorICAgIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUpCisgICAgc21jX3N0b3Bfc3VibW9kZV90IHN1Yk1vZGU7IC8qITwgVmVyeSBMb3ctbGVha2FnZSBTdG9wIHN1Yi1tb2RlICovCisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1BPUlBPKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1BPUlBPKQorICAgIGJvb2wgZW5hYmxlUG9yRGV0ZWN0SW5WbGxzMDsgLyohPCBFbmFibGUgUG93ZXIgb24gcmVzZXQgZGV0ZWN0IGluIFZMTFMgbW9kZSAqLworI2VuZGlmCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19SQU0yX1BPV0VSX09QVElPTikgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19SQU0yX1BPV0VSX09QVElPTikKKyAgICBib29sIGVuYWJsZVJhbTJJblZsbHMyOyAvKiE8IEVuYWJsZSBSQU0yIHBvd2VyIGluIFZMTFMyICovCisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPKQorICAgIGJvb2wgZW5hYmxlTHBvQ2xvY2s7IC8qITwgRW5hYmxlIExQTyBjbG9jayBpbiBWTExTIG1vZGUgKi8KKyNlbmRpZgorfSBzbWNfcG93ZXJfbW9kZV92bGxzX2NvbmZpZ190OworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyohIEBuYW1lIFN5c3RlbSBtb2RlIGNvbnRyb2xsZXIgQVBJcyovCisvKkB7Ki8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSSUQpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSSUQpCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBTTUMgdmVyc2lvbiBJRC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIFNNQyB2ZXJzaW9uIElELCBpbmNsdWRpbmcgbWFqb3IgdmVyc2lvbiBudW1iZXIsCisgKiBtaW5vciB2ZXJzaW9uIG51bWJlciwgYW5kIGZlYXR1cmUgc3BlY2lmaWNhdGlvbiBudW1iZXIuCisgKgorICogQHBhcmFtIGJhc2UgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHZlcnNpb25JZCAgICAgUG9pbnRlciB0byB0aGUgdmVyc2lvbiBJRCBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBTTUNfR2V0VmVyc2lvbklkKFNNQ19UeXBlICpiYXNlLCBzbWNfdmVyc2lvbl9pZF90ICp2ZXJzaW9uSWQpCit7CisgICAgKigodWludDMyX3QgKil2ZXJzaW9uSWQpID0gYmFzZS0+VkVSSUQ7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJJRCAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19QQVJBTSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19QQVJBTSkKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIFNNQyBwYXJhbWV0ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBTTUMgcGFyYW1ldGVyIGluY2x1ZGluZyB0aGUgZW5hYmxlZCBwb3dlciBtZG9lcy4KKyAqCisgKiBAcGFyYW0gYmFzZSBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gcGFyYW0gICAgICAgICBQb2ludGVyIHRvIHRoZSBTTUMgcGFyYW0gc3RydWN0dXJlLgorICovCit2b2lkIFNNQ19HZXRQYXJhbShTTUNfVHlwZSAqYmFzZSwgc21jX3BhcmFtX3QgKnBhcmFtKTsKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIGFsbCBwb3dlciBtb2RlIHByb3RlY3Rpb24gc2V0dGluZ3MuCisgKgorICogVGhpcyBmdW5jdGlvbiAgY29uZmlndXJlcyB0aGUgcG93ZXIgbW9kZSBwcm90ZWN0aW9uIHNldHRpbmdzIGZvcgorICogc3VwcG9ydGVkIHBvd2VyIG1vZGVzIGluIHRoZSBzcGVjaWZpZWQgY2hpcCBmYW1pbHkuIFRoZSBhdmFpbGFibGUgcG93ZXIgbW9kZXMKKyAqIGFyZSBkZWZpbmVkIGluIHRoZSBzbWNfcG93ZXJfbW9kZV9wcm90ZWN0aW9uX3QuIFRoaXMgc2hvdWxkIGJlIGRvbmUgYXQgYW4gZWFybHkKKyAqIHN5c3RlbSBsZXZlbCBpbml0aWFsaXphdGlvbiBzdGFnZS4gU2VlIHRoZSByZWZlcmVuY2UgbWFudWFsIGZvciBkZXRhaWxzLgorICogVGhpcyByZWdpc3RlciBjYW4gb25seSB3cml0ZSBvbmNlIGFmdGVyIHRoZSBwb3dlciByZXNldC4KKyAqCisgKiBUaGUgYWxsb3dlZCBtb2RlcyBhcmUgcGFzc2VkIGFzIGJpdCBtYXAuIEZvciBleGFtcGxlLCB0byBhbGxvdyBMTFMgYW5kIFZMTFMsCisgKiB1c2UgU01DX1NldFBvd2VyTW9kZVByb3RlY3Rpb24oa1NNQ19BbGxvd1Bvd2VyTW9kZVZsbHMgfCBrU01DX0FsbG93UG93ZXJNb2RlVmxwcykuCisgKiBUbyBhbGxvdyBhbGwgbW9kZXMsIHVzZSBTTUNfU2V0UG93ZXJNb2RlUHJvdGVjdGlvbihrU01DX0FsbG93UG93ZXJNb2RlQWxsKS4KKyAqCisgKiBAcGFyYW0gYmFzZSBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gYWxsb3dlZE1vZGVzIEJpdG1hcCBvZiB0aGUgYWxsb3dlZCBwb3dlciBtb2Rlcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFNNQ19TZXRQb3dlck1vZGVQcm90ZWN0aW9uKFNNQ19UeXBlICpiYXNlLCB1aW50OF90IGFsbG93ZWRNb2RlcykKK3sKKyAgICBiYXNlLT5QTVBST1QgPSBhbGxvd2VkTW9kZXM7Cit9CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgcG93ZXIgbW9kZSBzdGF0dXMuCisgKgorICogVGhpcyBmdW5jdGlvbiAgcmV0dXJucyB0aGUgY3VycmVudCBwb3dlciBtb2RlIHN0YXR1cy4gQWZ0ZXIgdGhlIGFwcGxpY2F0aW9uCisgKiBzd2l0Y2hlcyB0aGUgcG93ZXIgbW9kZSwgaXQgc2hvdWxkIGFsd2F5cyBjaGVjayB0aGUgc3RhdHVzIHRvIGNoZWNrIHdoZXRoZXIgaXQKKyAqIHJ1bnMgaW50byB0aGUgc3BlY2lmaWVkIG1vZGUgb3Igbm90LiBUaGUgYXBwbGljYXRpb24gIHNob3VsZCAgY2hlY2sKKyAqIHRoaXMgbW9kZSBiZWZvcmUgc3dpdGNoaW5nIHRvIGEgZGlmZmVyZW50IG1vZGUuIFRoZSBzeXN0ZW0gIHJlcXVpcmVzIHRoYXQKKyAqIG9ubHkgY2VydGFpbiBtb2RlcyBjYW4gc3dpdGNoIHRvIG90aGVyIHNwZWNpZmljIG1vZGVzLiBTZWUgdGhlCisgKiByZWZlcmVuY2UgbWFudWFsIGZvciBkZXRhaWxzIGFuZCB0aGUgc21jX3Bvd2VyX3N0YXRlX3QgZm9yIGluZm9ybWF0aW9uIGFib3V0CisgKiB0aGUgcG93ZXIgc3RhdHVzLgorICoKKyAqIEBwYXJhbSBiYXNlIFNNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gQ3VycmVudCBwb3dlciBtb2RlIHN0YXR1cy4KKyAqLworc3RhdGljIGlubGluZSBzbWNfcG93ZXJfc3RhdGVfdCBTTUNfR2V0UG93ZXJNb2RlU3RhdGUoU01DX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChzbWNfcG93ZXJfc3RhdGVfdCliYXNlLT5QTVNUQVQ7Cit9CisKKy8qIQorICogQGJyaWVmIFByZXBhcmVzIHRvIGVudGVyIHN0b3AgbW9kZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBlbnRlcmluZyBTVE9QL1ZMUFMvTExTL1ZMTFMgbW9kZXMuCisgKi8KK3ZvaWQgU01DX1ByZUVudGVyU3RvcE1vZGVzKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBSZWNvdmVycyBhZnRlciB3YWtlIHVwIGZyb20gc3RvcCBtb2Rlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgd2FrZSB1cCBmcm9tIFNUT1AvVkxQUy9MTFMvVkxMUyBtb2Rlcy4KKyAqIEl0IGlzIHVzZWQgd2l0aCBAcmVmIFNNQ19QcmVFbnRlclN0b3BNb2Rlcy4KKyAqLwordm9pZCBTTUNfUG9zdEV4aXRTdG9wTW9kZXModm9pZCk7CisKKy8qIQorICogQGJyaWVmIFByZXBhcmVzIHRvIGVudGVyIHdhaXQgbW9kZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBlbnRlcmluZyBXQUlUL1ZMUFcgbW9kZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBTTUNfUHJlRW50ZXJXYWl0TW9kZXModm9pZCkKK3sKKyAgICBfX2Rpc2FibGVfaXJxKCk7CisgICAgX19JU0IoKTsKK30KKworLyohCisgKiBAYnJpZWYgUmVjb3ZlcnMgYWZ0ZXIgd2FrZSB1cCBmcm9tIHN0b3AgbW9kZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHdha2UgdXAgZnJvbSBXQUlUL1ZMUFcgbW9kZXMuCisgKiBJdCBpcyB1c2VkIHdpdGggQHJlZiBTTUNfUHJlRW50ZXJXYWl0TW9kZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBTTUNfUG9zdEV4aXRXYWl0TW9kZXModm9pZCkKK3sKKyAgICBfX2VuYWJsZV9pcnEoKTsKKyAgICBfX0lTQigpOworfQorCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBzeXN0ZW0gdG8gUlVOIHBvd2VyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBTTUMgY29uZmlndXJhdGlvbiBlcnJvciBjb2RlLgorICovCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlUnVuKFNNQ19UeXBlICpiYXNlKTsKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19ISUdIX1NQRUVEX1JVTl9NT0RFKQorLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgc3lzdGVtIHRvIEhTUlVOIHBvd2VyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBTTUMgY29uZmlndXJhdGlvbiBlcnJvciBjb2RlLgorICovCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlSHNydW4oU01DX1R5cGUgKmJhc2UpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSAqLworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBzeXN0ZW0gdG8gV0FJVCBwb3dlciBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIFNNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gU01DIGNvbmZpZ3VyYXRpb24gZXJyb3IgY29kZS4KKyAqLworc3RhdHVzX3QgU01DX1NldFBvd2VyTW9kZVdhaXQoU01DX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBzeXN0ZW0gdG8gU3RvcCBwb3dlciBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIFNNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSAgb3B0aW9uIFBhcnRpYWwgU3RvcCBtb2RlIG9wdGlvbi4KKyAqIEByZXR1cm4gU01DIGNvbmZpZ3VyYXRpb24gZXJyb3IgY29kZS4KKyAqLworc3RhdHVzX3QgU01DX1NldFBvd2VyTW9kZVN0b3AoU01DX1R5cGUgKmJhc2UsIHNtY19wYXJ0aWFsX3N0b3Bfb3B0aW9uX3Qgb3B0aW9uKTsKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBXVUkpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBXVUkpCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBzeXN0ZW0gdG8gVkxQUiBwb3dlciBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIFNNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSAgd2FrZXVwTW9kZSBFbnRlciBOb3JtYWwgUnVuIG1vZGUgaWYgdHJ1ZSwgZWxzZSBzdGF5IGluIFZMUFIgbW9kZS4KKyAqIEByZXR1cm4gU01DIGNvbmZpZ3VyYXRpb24gZXJyb3IgY29kZS4KKyAqLworc3RhdHVzX3QgU01DX1NldFBvd2VyTW9kZVZscHIoU01DX1R5cGUgKmJhc2UsIGJvb2wgd2FrZXVwTW9kZSk7CisjZWxzZQorLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgc3lzdGVtIHRvIFZMUFIgcG93ZXIgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIFNNQyBjb25maWd1cmF0aW9uIGVycm9yIGNvZGUuCisgKi8KK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVWbHByKFNNQ19UeXBlICpiYXNlKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQV1VJICovCisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHN5c3RlbSB0byBWTFBXIHBvd2VyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBTTUMgY29uZmlndXJhdGlvbiBlcnJvciBjb2RlLgorICovCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlVmxwdyhTTUNfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHN5c3RlbSB0byBWTFBTIHBvd2VyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBTTUMgY29uZmlndXJhdGlvbiBlcnJvciBjb2RlLgorICovCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlVmxwcyhTTUNfVHlwZSAqYmFzZSk7CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUpCisjaWYgKChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUpIHx8IFwKKyAgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MUE9QTykgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MUE9QTykpCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBzeXN0ZW0gdG8gTExTIHBvd2VyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtICBjb25maWcgVGhlIExMUyBwb3dlciBtb2RlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKiBAcmV0dXJuIFNNQyBjb25maWd1cmF0aW9uIGVycm9yIGNvZGUuCisgKi8KK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVMbHMoU01DX1R5cGUgKmJhc2UsIGNvbnN0IHNtY19wb3dlcl9tb2RlX2xsc19jb25maWdfdCAqY29uZmlnKTsKKyNlbHNlCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBzeXN0ZW0gdG8gTExTIHBvd2VyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBTTUMgY29uZmlndXJhdGlvbiBlcnJvciBjb2RlLgorICovCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlTGxzKFNNQ19UeXBlICpiYXNlKTsKKyNlbmRpZgorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfTE9XX0xFQUtBR0VfU1RPUF9NT0RFICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUllfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUllfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKQorLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgc3lzdGVtIHRvIFZMTFMgcG93ZXIgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gIGNvbmZpZyBUaGUgVkxMUyBwb3dlciBtb2RlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogQHJldHVybiBTTUMgY29uZmlndXJhdGlvbiBlcnJvciBjb2RlLgorICovCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlVmxscyhTTUNfVHlwZSAqYmFzZSwgY29uc3Qgc21jX3Bvd2VyX21vZGVfdmxsc19jb25maWdfdCAqY29uZmlnKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUllfTE9XX0xFQUtBR0VfU1RPUF9NT0RFICovCisKKy8qQH0qLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiEgQH0qLworCisjZW5kaWYgLyogX0ZTTF9TTUNfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RwbS5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHBtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzOTBhMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RwbS5jCkBAIC0wLDAgKzEsNzY2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF90cG0uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBUUE1fQ09NQklORV9TSElGVCAoOFUpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgaW5zdGFuY2UgZnJvbSB0aGUgYmFzZSBhZGRyZXNzCisgKgorICogQHBhcmFtIGJhc2UgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKgorICogQHJldHVybiBUaGUgVFBNIGluc3RhbmNlCisgKi8KK3N0YXRpYyB1aW50MzJfdCBUUE1fR2V0SW5zdGFuY2UoVFBNX1R5cGUgKmJhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIEBicmllZiBQb2ludGVycyB0byBUUE0gYmFzZXMgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgVFBNX1R5cGUgKmNvbnN0IHNfdHBtQmFzZXNbXSA9IFRQTV9CQVNFX1BUUlM7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIFRQTSBjbG9ja3MgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgY29uc3QgY2xvY2tfaXBfbmFtZV90IHNfdHBtQ2xvY2tzW10gPSBUUE1fQ0xPQ0tTOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1aW50MzJfdCBUUE1fR2V0SW5zdGFuY2UoVFBNX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgaW5zdGFuY2U7CisgICAgdWludDMyX3QgdHBtQXJyYXlDb3VudCA9IChzaXplb2Yoc190cG1CYXNlcykgLyBzaXplb2Yoc190cG1CYXNlc1swXSkpOworCisgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW5kZXggZnJvbSBiYXNlIGFkZHJlc3MgbWFwcGluZ3MuICovCisgICAgZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgdHBtQXJyYXlDb3VudDsgaW5zdGFuY2UrKykKKyAgICB7CisgICAgICAgIGlmIChzX3RwbUJhc2VzW2luc3RhbmNlXSA9PSBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydChpbnN0YW5jZSA8IHRwbUFycmF5Q291bnQpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIFRQTV9Jbml0KFRQTV9UeXBlICpiYXNlLCBjb25zdCB0cG1fY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBFbmFibGUgdGhlIG1vZHVsZSBjbG9jayAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfdHBtQ2xvY2tzW1RQTV9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0dMT0JBTCkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19HTE9CQUwKKyAgICAvKiBUUE0gcmVzZXQgaXMgYXZhaWxhYmxlIG9uIGNlcnRhaW4gU29DJ3MgKi8KKyAgICBUUE1fUmVzZXQoYmFzZSk7CisjZW5kaWYKKworICAgIC8qIFNldCB0aGUgY2xvY2sgcHJlc2NhbGUgZmFjdG9yICovCisgICAgYmFzZS0+U0MgPSBUUE1fU0NfUFMoY29uZmlnLT5wcmVzY2FsZSk7CisKKyAgICAvKiBTZXR1cCB0aGUgY291bnRlciBvcGVyYXRpb24gKi8KKyAgICBiYXNlLT5DT05GID0gVFBNX0NPTkZfRE9aRUVOKGNvbmZpZy0+ZW5hYmxlRG96ZSkgfCBUUE1fQ09ORl9HVEJFRU4oY29uZmlnLT51c2VHbG9iYWxUaW1lQmFzZSkgfAorICAgICAgICAgICAgICAgICBUUE1fQ09ORl9DUk9UKGNvbmZpZy0+ZW5hYmxlUmVsb2FkT25UcmlnZ2VyKSB8IFRQTV9DT05GX0NTT1QoY29uZmlnLT5lbmFibGVTdGFydE9uVHJpZ2dlcikgfAorICAgICAgICAgICAgICAgICBUUE1fQ09ORl9DU09PKGNvbmZpZy0+ZW5hYmxlU3RvcE9uT3ZlcmZsb3cpIHwKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfUEFVU0VfQ09VTlRFUl9PTl9UUklHR0VSKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX1BBVVNFX0NPVU5URVJfT05fVFJJR0dFUgorICAgICAgICAgICAgICAgICBUUE1fQ09ORl9DUE9UKGNvbmZpZy0+ZW5hYmxlUGF1c2VPblRyaWdnZXIpIHwKKyNlbmRpZgorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19FWFRFUk5BTF9UUklHR0VSX1NFTEVDVElPTikgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19FWFRFUk5BTF9UUklHR0VSX1NFTEVDVElPTgorICAgICAgICAgICAgICAgICBUUE1fQ09ORl9UUkdTUkMoY29uZmlnLT50cmlnZ2VyU291cmNlKSB8CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgVFBNX0NPTkZfVFJHU0VMKGNvbmZpZy0+dHJpZ2dlclNlbGVjdCk7CisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlRGVidWdNb2RlKQorICAgIHsKKyAgICAgICAgYmFzZS0+Q09ORiB8PSBUUE1fQ09ORl9EQkdNT0RFX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkNPTkYgJj0gflRQTV9DT05GX0RCR01PREVfTUFTSzsKKyAgICB9Cit9CisKK3ZvaWQgVFBNX0RlaW5pdChUUE1fVHlwZSAqYmFzZSkKK3sKKyAgICAvKiBTdG9wIHRoZSBjb3VudGVyICovCisgICAgYmFzZS0+U0MgJj0gflRQTV9TQ19DTU9EX01BU0s7CisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIEdhdGUgdGhlIFRQTSBjbG9jayAqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX3RwbUNsb2Nrc1tUUE1fR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKwordm9pZCBUUE1fR2V0RGVmYXVsdENvbmZpZyh0cG1fY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworICAgIC8qIFRQTSBjbG9jayBkaXZpZGUgYnkgMSAqLworICAgIGNvbmZpZy0+cHJlc2NhbGUgPSBrVFBNX1ByZXNjYWxlX0RpdmlkZV8xOworICAgIC8qIFVzZSBpbnRlcm5hbCBUUE0gY291bnRlciBhcyB0aW1lYmFzZSAqLworICAgIGNvbmZpZy0+dXNlR2xvYmFsVGltZUJhc2UgPSBmYWxzZTsKKyAgICAvKiBUUE0gY291bnRlciBjb250aW51ZXMgaW4gZG96ZSBtb2RlICovCisgICAgY29uZmlnLT5lbmFibGVEb3plID0gZmFsc2U7CisgICAgLyogVFBNIGNvdW50ZXIgcGF1c2VzIHdoZW4gaW4gZGVidWcgbW9kZSAqLworICAgIGNvbmZpZy0+ZW5hYmxlRGVidWdNb2RlID0gZmFsc2U7CisgICAgLyogVFBNIGNvdW50ZXIgd2lsbCBub3QgYmUgcmVsb2FkZWQgb24gaW5wdXQgdHJpZ2dlciAqLworICAgIGNvbmZpZy0+ZW5hYmxlUmVsb2FkT25UcmlnZ2VyID0gZmFsc2U7CisgICAgLyogVFBNIGNvdW50ZXIgY29udGludWVzIHJ1bm5pbmcgYWZ0ZXIgb3ZlcmZsb3cgKi8KKyAgICBjb25maWctPmVuYWJsZVN0b3BPbk92ZXJmbG93ID0gZmFsc2U7CisgICAgLyogVFBNIGNvdW50ZXIgc3RhcnRzIGltbWVkaWF0ZWx5IG9uY2UgaXQgaXMgZW5hYmxlZCAqLworICAgIGNvbmZpZy0+ZW5hYmxlU3RhcnRPblRyaWdnZXIgPSBmYWxzZTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfUEFVU0VfQ09VTlRFUl9PTl9UUklHR0VSKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX1BBVVNFX0NPVU5URVJfT05fVFJJR0dFUgorICAgIGNvbmZpZy0+ZW5hYmxlUGF1c2VPblRyaWdnZXIgPSBmYWxzZTsKKyNlbmRpZgorICAgIC8qIENob29zZSB0cmlnZ2VyIHNlbGVjdCAwIGFzIGlucHV0IHRyaWdnZXIgZm9yIGNvbnRyb2xsaW5nIGNvdW50ZXIgb3BlcmF0aW9uICovCisgICAgY29uZmlnLT50cmlnZ2VyU2VsZWN0ID0ga1RQTV9UcmlnZ2VyX1NlbGVjdF8wOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19FWFRFUk5BTF9UUklHR0VSX1NFTEVDVElPTikgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19FWFRFUk5BTF9UUklHR0VSX1NFTEVDVElPTgorICAgIC8qIENob29zZSBleHRlcm5hbCB0cmlnZ2VyIHNvdXJjZSB0byBjb250cm9sIGNvdW50ZXIgb3BlcmF0aW9uICovCisgICAgY29uZmlnLT50cmlnZ2VyU291cmNlID0ga1RQTV9UcmlnZ2VyU291cmNlX0V4dGVybmFsOworI2VuZGlmCit9CisKK3N0YXR1c190IFRQTV9TZXR1cFB3bShUUE1fVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cG1fY2hubF9wd21fc2lnbmFsX3BhcmFtX3QgKmNobmxQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBudW1PZkNobmxzLAorICAgICAgICAgICAgICAgICAgICAgIHRwbV9wd21fbW9kZV90IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcHdtRnJlcV9IeiwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNDbG9ja19IeikKK3sKKyAgICBhc3NlcnQoY2hubFBhcmFtcyk7CisgICAgYXNzZXJ0KHB3bUZyZXFfSHopOworICAgIGFzc2VydChudW1PZkNobmxzKTsKKyAgICBhc3NlcnQoc3JjQ2xvY2tfSHopOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUKKyAgICBpZihtb2RlID09IGtUUE1fQ29tYmluZWRQd20pCisgICAgeworICAgICAgICBhc3NlcnQoRlNMX0ZFQVRVUkVfVFBNX0NPTUJJTkVfSEFTX0VGRkVDVG4oYmFzZSkpOworICAgIH0KKyNlbmRpZgorCisgICAgdWludDMyX3QgbW9kOworICAgIHVpbnQzMl90IHRwbUNsb2NrID0gKHNyY0Nsb2NrX0h6IC8gKDFVIDw8IChiYXNlLT5TQyAmIFRQTV9TQ19QU19NQVNLKSkpOworICAgIHVpbnQxNl90IGNudjsKKyAgICB1aW50OF90IGk7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfUURDVFJMKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX1FEQ1RSTAorICAgIC8qIFRoZSBUUE0ncyBRRENUUkwgcmVnaXN0ZXIgcmVxdWlyZWQgdG8gYmUgZWZmZWN0aXZlICovCisgICAgaWYoIEZTTF9GRUFUVVJFX1RQTV9RRENUUkxfSEFTX0VGRkVDVG4oYmFzZSkgKQorICAgIHsKKyAgICAgICAgLyogQ2xlYXIgcXVhZHJhdHVyZSBEZWNvZGVyIG1vZGUgYmVjYXVzZSBpbiBxdWFkcmF0dXJlIERlY29kZXIgbW9kZSBQV00gZG9lc24ndCBvcGVyYXRlKi8KKyAgICAgICAgYmFzZS0+UURDVFJMICY9IH5UUE1fUURDVFJMX1FVQURFTl9NQVNLOworICAgIH0KKyNlbmRpZgorCisgICAgc3dpdGNoIChtb2RlKQorICAgIHsKKyAgICAgICAgY2FzZSBrVFBNX0VkZ2VBbGlnbmVkUHdtOgorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUKKyAgICAgICAgY2FzZSBrVFBNX0NvbWJpbmVkUHdtOgorI2VuZGlmCisgICAgICAgICAgICBiYXNlLT5TQyAmPSB+VFBNX1NDX0NQV01TX01BU0s7CisgICAgICAgICAgICBtb2QgPSAodHBtQ2xvY2sgLyBwd21GcmVxX0h6KSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrVFBNX0NlbnRlckFsaWduZWRQd206CisgICAgICAgICAgICBiYXNlLT5TQyB8PSBUUE1fU0NfQ1BXTVNfTUFTSzsKKyAgICAgICAgICAgIG1vZCA9IHRwbUNsb2NrIC8gKHB3bUZyZXFfSHogKiAyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRmFpbDsKKyAgICB9CisKKyAgICAvKiBSZXR1cm4gYW4gZXJyb3IgaW4gY2FzZSB3ZSBvdmVyZmxvdyB0aGUgcmVnaXN0ZXJzLCBwcm9iYWJseSB3b3VsZCByZXF1aXJlIGNoYW5naW5nCisgICAgICogY2xvY2sgc291cmNlIHRvIGdldCB0aGUgZGVzaXJlZCBmcmVxdWVuY3kgKi8KKyAgICBpZiAobW9kID4gNjU1MzVVKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRmFpbDsKKyAgICB9CisgICAgLyogU2V0IHRoZSBQV00gcGVyaW9kICovCisgICAgYmFzZS0+TU9EID0gbW9kOworCisgICAgLyogU2V0dXAgZWFjaCBUUE0gY2hhbm5lbCAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudW1PZkNobmxzOyBpKyspCisgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3IgaWYgcmVxdWVzdGVkIGR1dHljeWNsZSBpcyBncmVhdGVyIHRoYW4gdGhlIG1heCBhbGxvd2VkICovCisgICAgICAgIGlmIChjaG5sUGFyYW1zLT5kdXR5Q3ljbGVQZXJjZW50ID4gMTAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgICAgICB9CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORQorICAgICAgICBpZiAobW9kZSA9PSBrVFBNX0NvbWJpbmVkUHdtKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MTZfdCBjbnZGaXJzdEVkZ2U7CisKKyAgICAgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgYWRkZWQgZm9yIGNvbWJpbmVkIG1vZGUgYXMgdGhlIGNoYW5uZWwgbnVtYmVyIHNob3VsZCBiZSB0aGUgcGFpciBudW1iZXIgKi8KKyAgICAgICAgICAgIGlmIChjaG5sUGFyYW1zLT5jaG5sTnVtYmVyID49IChGU0xfRkVBVFVSRV9UUE1fQ0hBTk5FTF9DT1VOVG4oYmFzZSkgLyAyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBSZXR1cm4gZXJyb3IgaWYgcmVxdWVzdGVkIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4IGFsbG93ZWQgKi8KKyAgICAgICAgICAgIGlmIChjaG5sUGFyYW1zLT5maXJzdEVkZ2VEZWxheVBlcmNlbnQgPiAxMDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIENvbmZpZ3VyZSBkZWxheSBvZiB0aGUgZmlyc3QgZWRnZSAqLworICAgICAgICAgICAgaWYgKGNobmxQYXJhbXMtPmZpcnN0RWRnZURlbGF5UGVyY2VudCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIE5vIGRlbGF5IGZvciB0aGUgZmlyc3QgZWRnZSAqLworICAgICAgICAgICAgICAgIGNudkZpcnN0RWRnZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY252Rmlyc3RFZGdlID0gKG1vZCAqIGNobmxQYXJhbXMtPmZpcnN0RWRnZURlbGF5UGVyY2VudCkgLyAxMDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBDb25maWd1cmUgZHV0eWN5Y2xlICovCisgICAgICAgICAgICBpZiAoY2hubFBhcmFtcy0+ZHV0eUN5Y2xlUGVyY2VudCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNpZ25hbCBzdGF5cyBsb3cgKi8KKyAgICAgICAgICAgICAgICBjbnYgPSAwOworICAgICAgICAgICAgICAgIGNudkZpcnN0RWRnZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY252ID0gKG1vZCAqIGNobmxQYXJhbXMtPmR1dHlDeWNsZVBlcmNlbnQpIC8gMTAwOworICAgICAgICAgICAgICAgIC8qIEZvciAxMDAlIGR1dHkgY3ljbGUgKi8KKyAgICAgICAgICAgICAgICBpZiAoY252ID49IG1vZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNudiA9IG1vZCArIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBTZXQgdGhlIGNvbWJpbmUgYml0IGZvciB0aGUgY2hhbm5lbCBwYWlyICovCisgICAgICAgICAgICBiYXNlLT5DT01CSU5FIHw9ICgxVSA8PCAoVFBNX0NPTUJJTkVfQ09NQklORTBfU0hJRlQgKyAoVFBNX0NPTUJJTkVfU0hJRlQgKiBjaG5sUGFyYW1zLT5jaG5sTnVtYmVyKSkpOworCisgICAgICAgICAgICAvKiBXaGVuIHN3aXRjaGluZyBtb2RlLCBkaXNhYmxlIGNoYW5uZWwgbiBmaXJzdCAqLworICAgICAgICAgICAgYmFzZS0+Q09OVFJPTFNbY2hubFBhcmFtcy0+Y2hubE51bWJlciAqIDJdLkNuU0MgJj0KKyAgICAgICAgICAgICAgICB+KFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spOworCisgICAgICAgICAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgdG8gZGlzYWJsZSBjaGFubmVsIGlzIGFja25vd2xlZGdlZCAqLworICAgICAgICAgICAgd2hpbGUgKChiYXNlLT5DT05UUk9MU1tjaG5sUGFyYW1zLT5jaG5sTnVtYmVyICogMl0uQ25TQyAmCisgICAgICAgICAgICAgICAgICAgIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFNldCB0aGUgcmVxdWVzdGVkIFBXTSBtb2RlIGZvciBjaGFubmVsIG4sIFBXTSBvdXRwdXQgcmVxdWlyZXMgbW9kZSBzZWxlY3QgdG8gYmUgc2V0IHRvIDIgKi8KKyAgICAgICAgICAgIGJhc2UtPkNPTlRST0xTW2NobmxQYXJhbXMtPmNobmxOdW1iZXIgKiAyXS5DblNDIHw9CisgICAgICAgICAgICAgICAgKChjaG5sUGFyYW1zLT5sZXZlbCA8PCBUUE1fQ25TQ19FTFNBX1NISUZUKSB8ICgyVSA8PCBUUE1fQ25TQ19NU0FfU0hJRlQpKTsKKworICAgICAgICAgICAgLyogV2FpdCB0aWxsIG1vZGUgY2hhbmdlIGlzIGFja25vd2xlZGdlZCAqLworICAgICAgICAgICAgd2hpbGUgKCEoYmFzZS0+Q09OVFJPTFNbY2hubFBhcmFtcy0+Y2hubE51bWJlciAqIDJdLkNuU0MgJgorICAgICAgICAgICAgICAgICAgICAgKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIFNldCB0aGUgY2hhbm5lbCBwYWlyIHZhbHVlcyAqLworICAgICAgICAgICAgYmFzZS0+Q09OVFJPTFNbY2hubFBhcmFtcy0+Y2hubE51bWJlciAqIDJdLkNuViA9IGNudkZpcnN0RWRnZTsKKworICAgICAgICAgICAgLyogV2hlbiBzd2l0Y2hpbmcgbW9kZSwgZGlzYWJsZSBjaGFubmVsIG4gKyAxIGZpcnN0ICovCisgICAgICAgICAgICBiYXNlLT5DT05UUk9MU1soY2hubFBhcmFtcy0+Y2hubE51bWJlciAqIDIpICsgMV0uQ25TQyAmPQorICAgICAgICAgICAgICAgIH4oVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSyk7CisKKyAgICAgICAgICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSB0byBkaXNhYmxlIGNoYW5uZWwgaXMgYWNrbm93bGVkZ2VkICovCisgICAgICAgICAgICB3aGlsZSAoKGJhc2UtPkNPTlRST0xTWyhjaG5sUGFyYW1zLT5jaG5sTnVtYmVyICogMikgKyAxXS5DblNDICYKKyAgICAgICAgICAgICAgICAgICAgKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogU2V0IHRoZSByZXF1ZXN0ZWQgUFdNIG1vZGUgZm9yIGNoYW5uZWwgbiArIDEsIFBXTSBvdXRwdXQgcmVxdWlyZXMgbW9kZSBzZWxlY3QgdG8gYmUgc2V0IHRvIDIgKi8KKyAgICAgICAgICAgIGJhc2UtPkNPTlRST0xTWyhjaG5sUGFyYW1zLT5jaG5sTnVtYmVyICogMikgKyAxXS5DblNDIHw9CisgICAgICAgICAgICAgICAgKChjaG5sUGFyYW1zLT5sZXZlbCA8PCBUUE1fQ25TQ19FTFNBX1NISUZUKSB8ICgyVSA8PCBUUE1fQ25TQ19NU0FfU0hJRlQpKTsKKworICAgICAgICAgICAgLyogV2FpdCB0aWxsIG1vZGUgY2hhbmdlIGlzIGFja25vd2xlZGdlZCAqLworICAgICAgICAgICAgd2hpbGUgKCEoYmFzZS0+Q09OVFJPTFNbKGNobmxQYXJhbXMtPmNobmxOdW1iZXIgKiAyKSArIDFdLkNuU0MgJgorICAgICAgICAgICAgICAgICAgICAgKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIFNldCB0aGUgY2hhbm5lbCBwYWlyIHZhbHVlcyAqLworICAgICAgICAgICAgYmFzZS0+Q09OVFJPTFNbKGNobmxQYXJhbXMtPmNobmxOdW1iZXIgKiAyKSArIDFdLkNuViA9IGNudkZpcnN0RWRnZSArIGNudjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGNobmxQYXJhbXMtPmR1dHlDeWNsZVBlcmNlbnQgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTaWduYWwgc3RheXMgbG93ICovCisgICAgICAgICAgICAgICAgY252ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbnYgPSAobW9kICogY2hubFBhcmFtcy0+ZHV0eUN5Y2xlUGVyY2VudCkgLyAxMDA7CisgICAgICAgICAgICAgICAgLyogRm9yIDEwMCUgZHV0eSBjeWNsZSAqLworICAgICAgICAgICAgICAgIGlmIChjbnYgPj0gbW9kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY252ID0gbW9kICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFdoZW4gc3dpdGNoaW5nIG1vZGUsIGRpc2FibGUgY2hhbm5lbCBmaXJzdCAqLworICAgICAgICAgICAgYmFzZS0+Q09OVFJPTFNbY2hubFBhcmFtcy0+Y2hubE51bWJlcl0uQ25TQyAmPQorICAgICAgICAgICAgICAgIH4oVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSyk7CisKKyAgICAgICAgICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSB0byBkaXNhYmxlIGNoYW5uZWwgaXMgYWNrbm93bGVkZ2VkICovCisgICAgICAgICAgICB3aGlsZSAoKGJhc2UtPkNPTlRST0xTW2NobmxQYXJhbXMtPmNobmxOdW1iZXJdLkNuU0MgJgorICAgICAgICAgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBTZXQgdGhlIHJlcXVlc3RlZCBQV00gbW9kZSwgUFdNIG91dHB1dCByZXF1aXJlcyBtb2RlIHNlbGVjdCB0byBiZSBzZXQgdG8gMiAqLworICAgICAgICAgICAgYmFzZS0+Q09OVFJPTFNbY2hubFBhcmFtcy0+Y2hubE51bWJlcl0uQ25TQyB8PQorICAgICAgICAgICAgICAgICgoY2hubFBhcmFtcy0+bGV2ZWwgPDwgVFBNX0NuU0NfRUxTQV9TSElGVCkgfCAoMlUgPDwgVFBNX0NuU0NfTVNBX1NISUZUKSk7CisKKyAgICAgICAgICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSBpcyBhY2tub3dsZWRnZWQgKi8KKyAgICAgICAgICAgIHdoaWxlICghKGJhc2UtPkNPTlRST0xTW2NobmxQYXJhbXMtPmNobmxOdW1iZXJdLkNuU0MgJgorICAgICAgICAgICAgICAgICAgICAgKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJhc2UtPkNPTlRST0xTW2NobmxQYXJhbXMtPmNobmxOdW1iZXJdLkNuViA9IGNudjsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORSkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FCisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNobmxQYXJhbXMrKzsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCit2b2lkIFRQTV9VcGRhdGVQd21EdXR5Y3ljbGUoVFBNX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX2NobmxfdCBjaG5sTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9wd21fbW9kZV90IGN1cnJlbnRQd21Nb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZHV0eUN5Y2xlUGVyY2VudCkKK3sKKyAgICBhc3NlcnQoY2hubE51bWJlciA8IEZTTF9GRUFUVVJFX1RQTV9DSEFOTkVMX0NPVU5UbihiYXNlKSk7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORQorICAgIGlmKGN1cnJlbnRQd21Nb2RlID09IGtUUE1fQ29tYmluZWRQd20pCisgICAgeworICAgICAgICBhc3NlcnQoRlNMX0ZFQVRVUkVfVFBNX0NPTUJJTkVfSEFTX0VGRkVDVG4oYmFzZSkpOworICAgIH0KKyNlbmRpZgorCisgICAgdWludDE2X3QgY252LCBtb2Q7CisKKyAgICBtb2QgPSBiYXNlLT5NT0Q7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORQorICAgIGlmIChjdXJyZW50UHdtTW9kZSA9PSBrVFBNX0NvbWJpbmVkUHdtKQorICAgIHsKKyAgICAgICAgdWludDE2X3QgY252Rmlyc3RFZGdlOworCisgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgYWRkZWQgZm9yIGNvbWJpbmVkIG1vZGUgYXMgdGhlIGNoYW5uZWwgbnVtYmVyIHNob3VsZCBiZSB0aGUgcGFpciBudW1iZXIgKi8KKyAgICAgICAgaWYgKGNobmxOdW1iZXIgPj0gKEZTTF9GRUFUVVJFX1RQTV9DSEFOTkVMX0NPVU5UbihiYXNlKSAvIDIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY252ID0gKG1vZCAqIGR1dHlDeWNsZVBlcmNlbnQpIC8gMTAwOworICAgICAgICBjbnZGaXJzdEVkZ2UgPSBiYXNlLT5DT05UUk9MU1tjaG5sTnVtYmVyICogMl0uQ25WOworICAgICAgICAvKiBGb3IgMTAwJSBkdXR5IGN5Y2xlICovCisgICAgICAgIGlmIChjbnYgPj0gbW9kKQorICAgICAgICB7CisgICAgICAgICAgICBjbnYgPSBtb2QgKyAxOworICAgICAgICB9CisgICAgICAgIGJhc2UtPkNPTlRST0xTWyhjaG5sTnVtYmVyICogMikgKyAxXS5DblYgPSBjbnZGaXJzdEVkZ2UgKyBjbnY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgICAgY252ID0gKG1vZCAqIGR1dHlDeWNsZVBlcmNlbnQpIC8gMTAwOworICAgICAgICAvKiBGb3IgMTAwJSBkdXR5IGN5Y2xlICovCisgICAgICAgIGlmIChjbnYgPj0gbW9kKQorICAgICAgICB7CisgICAgICAgICAgICBjbnYgPSBtb2QgKyAxOworICAgICAgICB9CisgICAgICAgIGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuViA9IGNudjsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORSkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FCisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgVFBNX1VwZGF0ZUNobmxFZGdlTGV2ZWxTZWxlY3QoVFBNX1R5cGUgKmJhc2UsIHRwbV9jaG5sX3QgY2hubE51bWJlciwgdWludDhfdCBsZXZlbCkKK3sKKyAgICBhc3NlcnQoY2hubE51bWJlciA8IEZTTF9GRUFUVVJFX1RQTV9DSEFOTkVMX0NPVU5UbihiYXNlKSk7CisKKyAgICB1aW50MzJfdCByZWcgPSBiYXNlLT5DT05UUk9MU1tjaG5sTnVtYmVyXS5DblNDICYgfihUUE1fQ25TQ19DSEZfTUFTSyk7CisKKyAgICAvKiBXaGVuIHN3aXRjaGluZyBtb2RlLCBkaXNhYmxlIGNoYW5uZWwgZmlyc3QgICovCisgICAgYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25TQyAmPQorICAgICAgICB+KFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spOworCisgICAgLyogV2FpdCB0aWxsIG1vZGUgY2hhbmdlIHRvIGRpc2FibGUgY2hhbm5lbCBpcyBhY2tub3dsZWRnZWQgKi8KKyAgICB3aGlsZSAoKGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuU0MgJgorICAgICAgICAgICAgKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spKSkKKyAgICB7CisgICAgfQorCisgICAgLyogQ2xlYXIgdGhlIGZpZWxkIGFuZCB3cml0ZSB0aGUgbmV3IGxldmVsIHZhbHVlICovCisgICAgcmVnICY9IH4oVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKTsKKyAgICByZWcgfD0gKCh1aW50MzJfdClsZXZlbCA8PCBUUE1fQ25TQ19FTFNBX1NISUZUKSAmIChUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spOworCisgICAgYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25TQyA9IHJlZzsKKworICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSBpcyBhY2tub3dsZWRnZWQgKi8KKyAgICByZWcgJj0gKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spOworICAgIHdoaWxlIChyZWcgIT0gKGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuU0MgJgorICAgICAgICAgICAgICAgICAgIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgeworICAgIH0KK30KKwordm9pZCBUUE1fU2V0dXBJbnB1dENhcHR1cmUoVFBNX1R5cGUgKmJhc2UsIHRwbV9jaG5sX3QgY2hubE51bWJlciwgdHBtX2lucHV0X2NhcHR1cmVfZWRnZV90IGNhcHR1cmVNb2RlKQoreworICAgIGFzc2VydChjaG5sTnVtYmVyIDwgRlNMX0ZFQVRVUkVfVFBNX0NIQU5ORUxfQ09VTlRuKGJhc2UpKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfUURDVFJMCisgICAgLyogVGhlIFRQTSdzIFFEQ1RSTCByZWdpc3RlciByZXF1aXJlZCB0byBiZSBlZmZlY3RpdmUgKi8KKyAgICBpZiggRlNMX0ZFQVRVUkVfVFBNX1FEQ1RSTF9IQVNfRUZGRUNUbihiYXNlKSApCisgICAgeworICAgICAgICAvKiBDbGVhciBxdWFkcmF0dXJlIERlY29kZXIgbW9kZSBmb3IgY2hhbm5lbCAwIG9yIDEqLworICAgICAgICBpZiAoKGNobmxOdW1iZXIgPT0gMCkgfHwgKGNobmxOdW1iZXIgPT0gMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2UtPlFEQ1RSTCAmPSB+VFBNX1FEQ1RSTF9RVUFERU5fTUFTSzsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORQorICAgICAgICAvKiBUaGUgVFBNJ3MgQ09NQklORSByZWdpc3RlciByZXF1aXJlZCB0byBiZSBlZmZlY3RpdmUgKi8KKyAgICBpZiggRlNMX0ZFQVRVUkVfVFBNX0NPTUJJTkVfSEFTX0VGRkVDVG4oYmFzZSkgKQorICAgIHsKKyAgICAgICAgLyogQ2xlYXIgdGhlIGNvbWJpbmUgYml0IGZvciBjaG5sTnVtYmVyICovCisgICAgICAgIGJhc2UtPkNPTUJJTkUgJj0gfigxVSA8PCBUUE1fQ09NQklORV9TSElGVCAqIChjaG5sTnVtYmVyIC8gMikpOworICAgIH0KKyNlbmRpZgorCisgICAgLyogV2hlbiBzd2l0Y2hpbmcgbW9kZSwgZGlzYWJsZSBjaGFubmVsIGZpcnN0ICAqLworICAgIGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuU0MgJj0KKyAgICAgICAgfihUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKTsKKworICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSB0byBkaXNhYmxlIGNoYW5uZWwgaXMgYWNrbm93bGVkZ2VkICovCisgICAgd2hpbGUgKChiYXNlLT5DT05UUk9MU1tjaG5sTnVtYmVyXS5DblNDICYKKyAgICAgICAgICAgIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgeworICAgIH0KKworICAgIC8qIFNldCB0aGUgcmVxdWVzdGVkIGlucHV0IGNhcHR1cmUgbW9kZSAqLworICAgIGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuU0MgfD0gY2FwdHVyZU1vZGU7CisKKyAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgaXMgYWNrbm93bGVkZ2VkICovCisgICAgd2hpbGUgKCEoYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25TQyAmCisgICAgICAgICAgICAgKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spKSkKKyAgICB7CisgICAgfQorfQorCit2b2lkIFRQTV9TZXR1cE91dHB1dENvbXBhcmUoVFBNX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX2NobmxfdCBjaG5sTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9vdXRwdXRfY29tcGFyZV9tb2RlX3QgY29tcGFyZU1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY29tcGFyZVZhbHVlKQoreworICAgIGFzc2VydChjaG5sTnVtYmVyIDwgRlNMX0ZFQVRVUkVfVFBNX0NIQU5ORUxfQ09VTlRuKGJhc2UpKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfUURDVFJMCisgICAgLyogVGhlIFRQTSdzIFFEQ1RSTCByZWdpc3RlciByZXF1aXJlZCB0byBiZSBlZmZlY3RpdmUgKi8KKyAgICBpZiggRlNMX0ZFQVRVUkVfVFBNX1FEQ1RSTF9IQVNfRUZGRUNUbihiYXNlKSApCisgICAgeworICAgICAgICAvKiBDbGVhciBxdWFkcmF0dXJlIERlY29kZXIgbW9kZSBmb3IgY2hhbm5lbCAwIG9yIDEgKi8KKyAgICAgICAgaWYgKChjaG5sTnVtYmVyID09IDApIHx8IChjaG5sTnVtYmVyID09IDEpKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlLT5RRENUUkwgJj0gflRQTV9RRENUUkxfUVVBREVOX01BU0s7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIC8qIFdoZW4gc3dpdGNoaW5nIG1vZGUsIGRpc2FibGUgY2hhbm5lbCBmaXJzdCAgKi8KKyAgICBiYXNlLT5DT05UUk9MU1tjaG5sTnVtYmVyXS5DblNDICY9CisgICAgICAgIH4oVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSyk7CisKKyAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgdG8gZGlzYWJsZSBjaGFubmVsIGlzIGFja25vd2xlZGdlZCAqLworICAgIHdoaWxlICgoYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25TQyAmCisgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBTZXR1cCB0aGUgY2hhbm5lbCBvdXRwdXQgYmVoYXZpb3VyIHdoZW4gYSBtYXRjaCBvY2N1cnMgd2l0aCB0aGUgY29tcGFyZSB2YWx1ZSAqLworICAgIGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuU0MgfD0gY29tcGFyZU1vZGU7CisKKyAgICAvKiBTZXR1cCB0aGUgY29tcGFyZSB2YWx1ZSAqLworICAgIGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuViA9IGNvbXBhcmVWYWx1ZTsKKworICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSBpcyBhY2tub3dsZWRnZWQgKi8KKyAgICB3aGlsZSAoIShiYXNlLT5DT05UUk9MU1tjaG5sTnVtYmVyXS5DblNDICYKKyAgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgIHsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORSkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FCit2b2lkIFRQTV9TZXR1cER1YWxFZGdlQ2FwdHVyZShUUE1fVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9jaG5sX3QgY2hubFBhaXJOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cG1fZHVhbF9lZGdlX2NhcHR1cmVfcGFyYW1fdCAqZWRnZVBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmlsdGVyVmFsdWUpCit7CisgICAgYXNzZXJ0KGVkZ2VQYXJhbSk7CisgICAgYXNzZXJ0KGNobmxQYWlyTnVtYmVyIDwgRlNMX0ZFQVRVUkVfVFBNX0NIQU5ORUxfQ09VTlRuKGJhc2UpIC8gMik7CisgICAgYXNzZXJ0KEZTTF9GRUFUVVJFX1RQTV9DT01CSU5FX0hBU19FRkZFQ1RuKGJhc2UpKTsKKworICAgIHVpbnQzMl90IHJlZzsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfUURDVFJMCisgICAgLyogVGhlIFRQTSdzIFFEQ1RSTCByZWdpc3RlciByZXF1aXJlZCB0byBiZSBlZmZlY3RpdmUgKi8KKyAgICBpZiggRlNMX0ZFQVRVUkVfVFBNX1FEQ1RSTF9IQVNfRUZGRUNUbihiYXNlKSApCisgICAgeworICAgICAgICAvKiBDbGVhciBxdWFkcmF0dXJlIERlY29kZXIgbW9kZSBmb3IgY2hhbm5lbCAwIG9yIDEqLworICAgICAgICBpZiAoY2hubFBhaXJOdW1iZXIgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZS0+UURDVFJMICY9IH5UUE1fUURDVFJMX1FVQURFTl9NQVNLOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBVbmxvY2s6IFdoZW4gc3dpdGNoaW5nIG1vZGUsIGRpc2FibGUgY2hhbm5lbCBmaXJzdCAqLworICAgIGJhc2UtPkNPTlRST0xTW2NobmxQYWlyTnVtYmVyICogMl0uQ25TQyAmPQorICAgICAgICB+KFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spOworCisgICAgLyogV2FpdCB0aWxsIG1vZGUgY2hhbmdlIHRvIGRpc2FibGUgY2hhbm5lbCBpcyBhY2tub3dsZWRnZWQgKi8KKyAgICB3aGlsZSAoKGJhc2UtPkNPTlRST0xTW2NobmxQYWlyTnVtYmVyICogMl0uQ25TQyAmCisgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgIHsKKyAgICB9CisKKyAgICBiYXNlLT5DT05UUk9MU1tjaG5sUGFpck51bWJlciAqIDIgKyAxXS5DblNDICY9CisgICAgICAgIH4oVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSyk7CisKKyAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgdG8gZGlzYWJsZSBjaGFubmVsIGlzIGFja25vd2xlZGdlZCAqLworICAgIHdoaWxlICgoYmFzZS0+Q09OVFJPTFNbY2hubFBhaXJOdW1iZXIgKiAyICsgMV0uQ25TQyAmCisgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBOb3csIHRoZSByZWdpc3RlcnMgZm9yIGlucHV0IG1vZGUgY2FuIGJlIG9wZXJhdGVkLiAqLworICAgIGlmIChlZGdlUGFyYW0tPmVuYWJsZVN3YXApCisgICAgeworICAgICAgICAvKiBTZXQgdGhlIGNvbWJpbmUgYW5kIHN3YXAgYml0cyBmb3IgdGhlIGNoYW5uZWwgcGFpciAqLworICAgICAgICBiYXNlLT5DT01CSU5FIHw9IChUUE1fQ09NQklORV9DT01CSU5FMF9NQVNLIHwgVFBNX0NPTUJJTkVfQ09NU1dBUDBfTUFTSykKKyAgICAgICAgICAgICAgICAgICAgICAgICA8PCAoVFBNX0NPTUJJTkVfU0hJRlQgKiBjaG5sUGFpck51bWJlcik7CisKKyAgICAgICAgLyogSW5wdXQgZmlsdGVyIHNldHVwIGZvciBjaGFubmVsIG4rMSBpbnB1dCAqLworICAgICAgICByZWcgPSBiYXNlLT5GSUxURVI7CisgICAgICAgIHJlZyAmPSB+KFRQTV9GSUxURVJfQ0gwRlZBTF9NQVNLIDw8IChUUE1fRklMVEVSX0NIMUZWQUxfU0hJRlQgKiAoY2hubFBhaXJOdW1iZXIgKyAxKSkpOworICAgICAgICByZWcgfD0gKGZpbHRlclZhbHVlIDw8IChUUE1fRklMVEVSX0NIMUZWQUxfU0hJRlQgKiAoY2hubFBhaXJOdW1iZXIgKyAxKSkpOworICAgICAgICBiYXNlLT5GSUxURVIgPSByZWc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlZyA9IGJhc2UtPkNPTUJJTkU7CisgICAgICAgIC8qIENsZWFyIHRoZSBzd2FwIGJpdCBmb3IgdGhlIGNoYW5uZWwgcGFpciAqLworICAgICAgICByZWcgJj0gfihUUE1fQ09NQklORV9DT01TV0FQMF9NQVNLIDw8IChUUE1fQ09NQklORV9DT01TV0FQMF9TSElGVCAqIGNobmxQYWlyTnVtYmVyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBjb21iaW5lIGJpdCBmb3IgdGhlIGNoYW5uZWwgcGFpciAqLworICAgICAgICByZWcgfD0gVFBNX0NPTUJJTkVfQ09NQklORTBfTUFTSyA8PCAoVFBNX0NPTUJJTkVfU0hJRlQgKiBjaG5sUGFpck51bWJlcik7CisgICAgICAgIGJhc2UtPkNPTUJJTkUgPSByZWc7CisKKyAgICAgICAgLyogSW5wdXQgZmlsdGVyIHNldHVwIGZvciBjaGFubmVsIG4gaW5wdXQgKi8KKyAgICAgICAgcmVnID0gYmFzZS0+RklMVEVSOworICAgICAgICByZWcgJj0gfihUUE1fRklMVEVSX0NIMEZWQUxfTUFTSyA8PCAoVFBNX0ZJTFRFUl9DSDFGVkFMX1NISUZUICogY2hubFBhaXJOdW1iZXIpKTsKKyAgICAgICAgcmVnIHw9IChmaWx0ZXJWYWx1ZSA8PCAoVFBNX0ZJTFRFUl9DSDFGVkFMX1NISUZUICogY2hubFBhaXJOdW1iZXIpKTsKKyAgICAgICAgYmFzZS0+RklMVEVSID0gcmVnOworICAgIH0KKworICAgIC8qIFNldHVwIHRoZSBlZGdlIGRldGVjdGlvbiBmcm9tIGNoYW5uZWwgbiAqLworICAgIGJhc2UtPkNPTlRST0xTW2NobmxQYWlyTnVtYmVyICogMl0uQ25TQyB8PSBlZGdlUGFyYW0tPmN1cnJDaGFuRWRnZU1vZGU7CisKKyAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgaXMgYWNrbm93bGVkZ2VkICovCisgICAgd2hpbGUgKCEoYmFzZS0+Q09OVFJPTFNbY2hubFBhaXJOdW1iZXIgKiAyXS5DblNDICYKKyAgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBTZXR1cCB0aGUgZWRnZSBkZXRlY3Rpb24gZnJvbSBjaGFubmVsIG4rMSAqLworICAgIGJhc2UtPkNPTlRST0xTWyhjaG5sUGFpck51bWJlciAqIDIpICsgMV0uQ25TQyB8PSBlZGdlUGFyYW0tPm5leHRDaGFuRWRnZU1vZGU7CisKKyAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgaXMgYWNrbm93bGVkZ2VkICovCisgICAgd2hpbGUgKCEoYmFzZS0+Q09OVFJPTFNbKGNobmxQYWlyTnVtYmVyICogMikgKyAxXS5DblNDICYKKyAgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgIHsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfUURDVFJMCit2b2lkIFRQTV9TZXR1cFF1YWREZWNvZGUoVFBNX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHBtX3BoYXNlX3BhcmFtc190ICpwaGFzZUFQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHBtX3BoYXNlX3BhcmFtc190ICpwaGFzZUJQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX3F1YWRfZGVjb2RlX21vZGVfdCBxdWFkTW9kZSkKK3sKKyAgICBhc3NlcnQocGhhc2VBUGFyYW1zKTsKKyAgICBhc3NlcnQocGhhc2VCUGFyYW1zKTsKKyAgICBhc3NlcnQoRlNMX0ZFQVRVUkVfVFBNX1FEQ1RSTF9IQVNfRUZGRUNUbihiYXNlKSk7CisKKyAgICBiYXNlLT5DT05UUk9MU1swXS5DblNDICY9IH4oVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSyk7CisKKyAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgdG8gZGlzYWJsZSBjaGFubmVsIGlzIGFja25vd2xlZGdlZCAqLworICAgIHdoaWxlICgoYmFzZS0+Q09OVFJPTFNbMF0uQ25TQyAmIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgeworICAgIH0KKyAgICB1aW50MzJfdCByZWc7CisKKyAgICAvKiBTZXQgUGhhc2UgQSBmaWx0ZXIgdmFsdWUgKi8KKyAgICByZWcgPSBiYXNlLT5GSUxURVI7CisgICAgcmVnICY9IH4oVFBNX0ZJTFRFUl9DSDBGVkFMX01BU0spOworICAgIHJlZyB8PSBUUE1fRklMVEVSX0NIMEZWQUwocGhhc2VBUGFyYW1zLT5waGFzZUZpbHRlclZhbCk7CisgICAgYmFzZS0+RklMVEVSID0gcmVnOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX1BPTCkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19QT0wKKyAgICAvKiBTZXQgUGhhc2UgQSBwb2xhcml0eSAqLworICAgIGlmIChwaGFzZUFQYXJhbXMtPnBoYXNlUG9sYXJpdHkpCisgICAgeworICAgICAgICBiYXNlLT5QT0wgfD0gVFBNX1BPTF9QT0wwX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPlBPTCAmPSB+VFBNX1BPTF9QT0wwX01BU0s7CisgICAgfQorI2VuZGlmCisKKyAgICBiYXNlLT5DT05UUk9MU1sxXS5DblNDICY9IH4oVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSyk7CisKKyAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgdG8gZGlzYWJsZSBjaGFubmVsIGlzIGFja25vd2xlZGdlZCAqLworICAgIHdoaWxlICgoYmFzZS0+Q09OVFJPTFNbMV0uQ25TQyAmIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgeworICAgIH0KKyAgICAvKiBTZXQgUGhhc2UgQiBmaWx0ZXIgdmFsdWUgKi8KKyAgICByZWcgPSBiYXNlLT5GSUxURVI7CisgICAgcmVnICY9IH4oVFBNX0ZJTFRFUl9DSDFGVkFMX01BU0spOworICAgIHJlZyB8PSBUUE1fRklMVEVSX0NIMUZWQUwocGhhc2VCUGFyYW1zLT5waGFzZUZpbHRlclZhbCk7CisgICAgYmFzZS0+RklMVEVSID0gcmVnOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19QT0wpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfUE9MCisgICAgLyogU2V0IFBoYXNlIEIgcG9sYXJpdHkgKi8KKyAgICBpZiAocGhhc2VCUGFyYW1zLT5waGFzZVBvbGFyaXR5KQorICAgIHsKKyAgICAgICAgYmFzZS0+UE9MIHw9IFRQTV9QT0xfUE9MMV9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5QT0wgJj0gflRQTV9QT0xfUE9MMV9NQVNLOworICAgIH0KKyNlbmRpZgorCisgICAgLyogU2V0IFF1YWRyYXR1cmUgbW9kZSAqLworICAgIHJlZyA9IGJhc2UtPlFEQ1RSTDsKKyAgICByZWcgJj0gfihUUE1fUURDVFJMX1FVQURNT0RFX01BU0spOworICAgIHJlZyB8PSBUUE1fUURDVFJMX1FVQURNT0RFKHF1YWRNb2RlKTsKKyAgICBiYXNlLT5RRENUUkwgPSByZWc7CisKKyAgICAvKiBFbmFibGUgUXVhZCBkZWNvZGUgKi8KKyAgICBiYXNlLT5RRENUUkwgfD0gVFBNX1FEQ1RSTF9RVUFERU5fTUFTSzsKK30KKworI2VuZGlmCisKK3ZvaWQgVFBNX0VuYWJsZUludGVycnVwdHMoVFBNX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgdWludDMyX3QgY2hubEludGVycnVwdHMgPSAobWFzayAmIDB4RkYpOworICAgIHVpbnQ4X3QgY2hubE51bWJlciA9IDA7CisKKyAgICAvKiBFbmFibGUgdGhlIHRpbWVyIG92ZXJmbG93IGludGVycnVwdCAqLworICAgIGlmIChtYXNrICYga1RQTV9UaW1lT3ZlcmZsb3dJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5TQyB8PSBUUE1fU0NfVE9JRV9NQVNLOworICAgIH0KKworICAgIC8qIEVuYWJsZSB0aGUgY2hhbm5lbCBpbnRlcnJ1cHRzICovCisgICAgd2hpbGUgKGNobmxJbnRlcnJ1cHRzKQorICAgIHsKKyAgICAgICAgaWYgKGNobmxJbnRlcnJ1cHRzICYgMHgxKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlLT5DT05UUk9MU1tjaG5sTnVtYmVyXS5DblNDIHw9IFRQTV9DblNDX0NISUVfTUFTSzsKKyAgICAgICAgfQorICAgICAgICBjaG5sTnVtYmVyKys7CisgICAgICAgIGNobmxJbnRlcnJ1cHRzID0gY2hubEludGVycnVwdHMgPj4gMVU7CisgICAgfQorfQorCit2b2lkIFRQTV9EaXNhYmxlSW50ZXJydXB0cyhUUE1fVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICB1aW50MzJfdCBjaG5sSW50ZXJydXB0cyA9IChtYXNrICYgMHhGRik7CisgICAgdWludDhfdCBjaG5sTnVtYmVyID0gMDsKKworICAgIC8qIERpc2FibGUgdGhlIHRpbWVyIG92ZXJmbG93IGludGVycnVwdCAqLworICAgIGlmIChtYXNrICYga1RQTV9UaW1lT3ZlcmZsb3dJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5TQyAmPSB+VFBNX1NDX1RPSUVfTUFTSzsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHRoZSBjaGFubmVsIGludGVycnVwdHMgKi8KKyAgICB3aGlsZSAoY2hubEludGVycnVwdHMpCisgICAgeworICAgICAgICBpZiAoY2hubEludGVycnVwdHMgJiAweDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuU0MgJj0gflRQTV9DblNDX0NISUVfTUFTSzsKKyAgICAgICAgfQorICAgICAgICBjaG5sTnVtYmVyKys7CisgICAgICAgIGNobmxJbnRlcnJ1cHRzID0gY2hubEludGVycnVwdHMgPj4gMVU7CisgICAgfQorfQorCit1aW50MzJfdCBUUE1fR2V0RW5hYmxlZEludGVycnVwdHMoVFBNX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgZW5hYmxlZEludGVycnVwdHMgPSAwOworICAgIGludDhfdCBjaG5sQ291bnQgPSBGU0xfRkVBVFVSRV9UUE1fQ0hBTk5FTF9DT1VOVG4oYmFzZSk7CisKKyAgICAvKiBUaGUgQ0hBTk5FTF9DT1VOVCBtYWNybyByZXR1cm5zIC0xIGlmIGl0IGNhbm5vdCBtYXRjaCB0aGUgVFBNIGluc3RhbmNlICovCisgICAgYXNzZXJ0KGNobmxDb3VudCAhPSAtMSk7CisKKyAgICAvKiBDaGVjayBpZiB0aW1lciBvdmVyZmxvdyBpbnRlcnJ1cHQgaXMgZW5hYmxlZCAqLworICAgIGlmIChiYXNlLT5TQyAmIFRQTV9TQ19UT0lFX01BU0spCisgICAgeworICAgICAgICBlbmFibGVkSW50ZXJydXB0cyB8PSBrVFBNX1RpbWVPdmVyZmxvd0ludGVycnVwdEVuYWJsZTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBpZiB0aGUgY2hhbm5lbCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCisgICAgd2hpbGUgKGNobmxDb3VudCA+IDApCisgICAgeworICAgICAgICBjaG5sQ291bnQtLTsKKyAgICAgICAgaWYgKGJhc2UtPkNPTlRST0xTW2NobmxDb3VudF0uQ25TQyAmIFRQTV9DblNDX0NISUVfTUFTSykKKyAgICAgICAgeworICAgICAgICAgICAgZW5hYmxlZEludGVycnVwdHMgfD0gKDFVIDw8IGNobmxDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZW5hYmxlZEludGVycnVwdHM7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90cG0uaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RwbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNjk0YjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90cG0uaApAQCAtMCwwICsxLDYyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfVFBNX0hfCisjZGVmaW5lIF9GU0xfVFBNX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgdHBtCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKyNkZWZpbmUgRlNMX1RQTV9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDIpKSAvKiE8IFZlcnNpb24gMi4wLjIgKi8KKy8qQH0qLworCisvKiEKKyAqIEBicmllZiBMaXN0IG9mIFRQTSBjaGFubmVscy4KKyAqIEBub3RlIEFjdHVhbCBudW1iZXIgb2YgYXZhaWxhYmxlIGNoYW5uZWxzIGlzIFNvQyBkZXBlbmRlbnQKKyAqLwordHlwZWRlZiBlbnVtIF90cG1fY2hubAoreworICAgIGtUUE1fQ2hubF8wID0gMFUsIC8qITwgVFBNIGNoYW5uZWwgbnVtYmVyIDAqLworICAgIGtUUE1fQ2hubF8xLCAgICAgIC8qITwgVFBNIGNoYW5uZWwgbnVtYmVyIDEgKi8KKyAgICBrVFBNX0NobmxfMiwgICAgICAvKiE8IFRQTSBjaGFubmVsIG51bWJlciAyICovCisgICAga1RQTV9DaG5sXzMsICAgICAgLyohPCBUUE0gY2hhbm5lbCBudW1iZXIgMyAqLworICAgIGtUUE1fQ2hubF80LCAgICAgIC8qITwgVFBNIGNoYW5uZWwgbnVtYmVyIDQgKi8KKyAgICBrVFBNX0NobmxfNSwgICAgICAvKiE8IFRQTSBjaGFubmVsIG51bWJlciA1ICovCisgICAga1RQTV9DaG5sXzYsICAgICAgLyohPCBUUE0gY2hhbm5lbCBudW1iZXIgNiAqLworICAgIGtUUE1fQ2hubF83ICAgICAgIC8qITwgVFBNIGNoYW5uZWwgbnVtYmVyIDcgKi8KK30gdHBtX2NobmxfdDsKKworLyohIEBicmllZiBUUE0gUFdNIG9wZXJhdGlvbiBtb2RlcyAqLwordHlwZWRlZiBlbnVtIF90cG1fcHdtX21vZGUKK3sKKyAgICBrVFBNX0VkZ2VBbGlnbmVkUHdtID0gMFUsIC8qITwgRWRnZSBhbGlnbmVkIFBXTSAqLworICAgIGtUUE1fQ2VudGVyQWxpZ25lZFB3bSwgICAgLyohPCBDZW50ZXIgYWxpZ25lZCBQV00gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORSkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FCisgICAga1RQTV9Db21iaW5lZFB3bSAvKiE8IENvbWJpbmVkIFBXTSAqLworI2VuZGlmCit9IHRwbV9wd21fbW9kZV90OworCisvKiEgQGJyaWVmIFRQTSBQV00gb3V0cHV0IHB1bHNlIG1vZGU6IGhpZ2gtdHJ1ZSwgbG93LXRydWUgb3Igbm8gb3V0cHV0ICovCit0eXBlZGVmIGVudW0gX3RwbV9wd21fbGV2ZWxfc2VsZWN0Cit7CisgICAga1RQTV9Ob1B3bVNpZ25hbCA9IDBVLCAvKiE8IE5vIFBXTSBvdXRwdXQgb24gcGluICovCisgICAga1RQTV9Mb3dUcnVlLCAgICAgICAgICAvKiE8IExvdyB0cnVlIHB1bHNlcyAqLworICAgIGtUUE1fSGlnaFRydWUgICAgICAgICAgLyohPCBIaWdoIHRydWUgcHVsc2VzICovCit9IHRwbV9wd21fbGV2ZWxfc2VsZWN0X3Q7CisKKy8qISBAYnJpZWYgT3B0aW9ucyB0byBjb25maWd1cmUgYSBUUE0gY2hhbm5lbCdzIFBXTSBzaWduYWwgKi8KK3R5cGVkZWYgc3RydWN0IF90cG1fY2hubF9wd21fc2lnbmFsX3BhcmFtCit7CisgICAgdHBtX2NobmxfdCBjaG5sTnVtYmVyOyAgICAgICAgLyohPCBUUE0gY2hhbm5lbCB0byBjb25maWd1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBjb21iaW5lZCBtb2RlIChhdmFpbGFibGUgaW4gc29tZSBTb0MncywgdGhpcyByZXByZXNlbnRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCBwYWlyIG51bWJlciAqLworICAgIHRwbV9wd21fbGV2ZWxfc2VsZWN0X3QgbGV2ZWw7IC8qITwgUFdNIG91dHB1dCBhY3RpdmUgbGV2ZWwgc2VsZWN0ICovCisgICAgdWludDhfdCBkdXR5Q3ljbGVQZXJjZW50OyAgICAgLyohPCBQV00gcHVsc2Ugd2lkdGgsIHZhbHVlIHNob3VsZCBiZSBiZXR3ZWVuIDAgdG8gMTAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwPWluYWN0aXZlIHNpZ25hbCgwJSBkdXR5IGN5Y2xlKS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwPWFsd2F5cyBhY3RpdmUgc2lnbmFsICgxMDAlIGR1dHkgY3ljbGUpKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORSkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FCisgICAgdWludDhfdCBmaXJzdEVkZ2VEZWxheVBlcmNlbnQ7IC8qITwgVXNlZCBvbmx5IGluIGNvbWJpbmVkIFBXTSBtb2RlIHRvIGdlbmVyYXRlIGFzeW1tZXRyaWNhbCBQV00uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBkZWxheSB0byB0aGUgZmlyc3QgZWRnZSBpbiBhIFBXTSBwZXJpb2QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdW5zdXJlLCBsZWF2ZSBhcyAwOyBTaG91bGQgYmUgc3BlY2lmaWVkIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSBvZiB0aGUgUFdNIHBlcmlvZCAqLworI2VuZGlmCit9IHRwbV9jaG5sX3B3bV9zaWduYWxfcGFyYW1fdDsKKworLyohCisgKiBAYnJpZWYgVHJpZ2dlciBvcHRpb25zIGF2YWlsYWJsZS4KKyAqCisgKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggaW50ZXJuYWwgJiBleHRlcm5hbCB0cmlnZ2VyIHNvdXJjZXMgKGV4dGVybmFsIG9wdGlvbiBhdmFpbGFibGUgaW4gY2VydGFpbiBTb0MncykKKyAqCisgKiBAbm90ZSBUaGUgYWN0dWFsIHRyaWdnZXIgb3B0aW9ucyBhdmFpbGFibGUgaXMgU29DLXNwZWNpZmljLgorICovCit0eXBlZGVmIGVudW0gX3RwbV90cmlnZ2VyX3NlbGVjdAoreworICAgIGtUUE1fVHJpZ2dlcl9TZWxlY3RfMCA9IDBVLAorICAgIGtUUE1fVHJpZ2dlcl9TZWxlY3RfMSwKKyAgICBrVFBNX1RyaWdnZXJfU2VsZWN0XzIsCisgICAga1RQTV9UcmlnZ2VyX1NlbGVjdF8zLAorICAgIGtUUE1fVHJpZ2dlcl9TZWxlY3RfNCwKKyAgICBrVFBNX1RyaWdnZXJfU2VsZWN0XzUsCisgICAga1RQTV9UcmlnZ2VyX1NlbGVjdF82LAorICAgIGtUUE1fVHJpZ2dlcl9TZWxlY3RfNywKKyAgICBrVFBNX1RyaWdnZXJfU2VsZWN0XzgsCisgICAga1RQTV9UcmlnZ2VyX1NlbGVjdF85LAorICAgIGtUUE1fVHJpZ2dlcl9TZWxlY3RfMTAsCisgICAga1RQTV9UcmlnZ2VyX1NlbGVjdF8xMSwKKyAgICBrVFBNX1RyaWdnZXJfU2VsZWN0XzEyLAorICAgIGtUUE1fVHJpZ2dlcl9TZWxlY3RfMTMsCisgICAga1RQTV9UcmlnZ2VyX1NlbGVjdF8xNCwKKyAgICBrVFBNX1RyaWdnZXJfU2VsZWN0XzE1Cit9IHRwbV90cmlnZ2VyX3NlbGVjdF90OworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0VYVEVSTkFMX1RSSUdHRVJfU0VMRUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0VYVEVSTkFMX1RSSUdHRVJfU0VMRUNUSU9OCisvKiEKKyAqIEBicmllZiBUcmlnZ2VyIHNvdXJjZSBvcHRpb25zIGF2YWlsYWJsZQorICoKKyAqIEBub3RlIFRoaXMgc2VsZWN0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IG9uIHNvbWUgU29DJ3MuIEZvciBTb0MncyB3aXRob3V0IHRoaXMgc2VsZWN0aW9uLCB0aGUgb25seQorICogdHJpZ2dlciBzb3VyY2UgYXZhaWxhYmxlIGlzIGludGVybmFsIHRyaWdlci4KKyAqLwordHlwZWRlZiBlbnVtIF90cG1fdHJpZ2dlcl9zb3VyY2UKK3sKKyAgICBrVFBNX1RyaWdnZXJTb3VyY2VfRXh0ZXJuYWwgPSAwVSwgLyohPCBVc2UgZXh0ZXJuYWwgdHJpZ2dlciBpbnB1dCAqLworICAgIGtUUE1fVHJpZ2dlclNvdXJjZV9JbnRlcm5hbCAgICAgICAvKiE8IFVzZSBpbnRlcm5hbCB0cmlnZ2VyICovCit9IHRwbV90cmlnZ2VyX3NvdXJjZV90OworI2VuZGlmCisKKy8qISBAYnJpZWYgVFBNIG91dHB1dCBjb21wYXJlIG1vZGVzICovCit0eXBlZGVmIGVudW0gX3RwbV9vdXRwdXRfY29tcGFyZV9tb2RlCit7CisgICAga1RQTV9Ob091dHB1dFNpZ25hbCA9ICgxVSA8PCBUUE1fQ25TQ19NU0FfU0hJRlQpLCAvKiE8IE5vIGNoYW5uZWwgb3V0cHV0IHdoZW4gY291bnRlciByZWFjaGVzIENuViAgKi8KKyAgICBrVFBNX1RvZ2dsZU9uTWF0Y2ggPSAoKDFVIDw8IFRQTV9DblNDX01TQV9TSElGVCkgfCAoMVUgPDwgVFBNX0NuU0NfRUxTQV9TSElGVCkpLCAgIC8qITwgVG9nZ2xlIG91dHB1dCAqLworICAgIGtUUE1fQ2xlYXJPbk1hdGNoID0gKCgxVSA8PCBUUE1fQ25TQ19NU0FfU0hJRlQpIHwgKDJVIDw8IFRQTV9DblNDX0VMU0FfU0hJRlQpKSwgICAgLyohPCBDbGVhciBvdXRwdXQgKi8KKyAgICBrVFBNX1NldE9uTWF0Y2ggPSAoKDFVIDw8IFRQTV9DblNDX01TQV9TSElGVCkgfCAoM1UgPDwgVFBNX0NuU0NfRUxTQV9TSElGVCkpLCAgICAgIC8qITwgU2V0IG91dHB1dCAqLworICAgIGtUUE1fSGlnaFB1bHNlT3V0cHV0ID0gKCgzVSA8PCBUUE1fQ25TQ19NU0FfU0hJRlQpIHwgKDFVIDw8IFRQTV9DblNDX0VMU0FfU0hJRlQpKSwgLyohPCBQdWxzZSBvdXRwdXQgaGlnaCAqLworICAgIGtUUE1fTG93UHVsc2VPdXRwdXQgPSAoKDNVIDw8IFRQTV9DblNDX01TQV9TSElGVCkgfCAoMlUgPDwgVFBNX0NuU0NfRUxTQV9TSElGVCkpICAgLyohPCBQdWxzZSBvdXRwdXQgbG93ICovCit9IHRwbV9vdXRwdXRfY29tcGFyZV9tb2RlX3Q7CisKKy8qISBAYnJpZWYgVFBNIGlucHV0IGNhcHR1cmUgZWRnZSAqLwordHlwZWRlZiBlbnVtIF90cG1faW5wdXRfY2FwdHVyZV9lZGdlCit7CisgICAga1RQTV9SaXNpbmdFZGdlID0gKDFVIDw8IFRQTV9DblNDX0VMU0FfU0hJRlQpLCAgICAgLyohPCBDYXB0dXJlIG9uIHJpc2luZyBlZGdlIG9ubHkgKi8KKyAgICBrVFBNX0ZhbGxpbmdFZGdlID0gKDJVIDw8IFRQTV9DblNDX0VMU0FfU0hJRlQpLCAgICAvKiE8IENhcHR1cmUgb24gZmFsbGluZyBlZGdlIG9ubHkgKi8KKyAgICBrVFBNX1Jpc2VBbmRGYWxsRWRnZSA9ICgzVSA8PCBUUE1fQ25TQ19FTFNBX1NISUZUKSAvKiE8IENhcHR1cmUgb24gcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSAqLworfSB0cG1faW5wdXRfY2FwdHVyZV9lZGdlX3Q7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORSkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FCisvKiEKKyAqIEBicmllZiBUUE0gZHVhbCBlZGdlIGNhcHR1cmUgcGFyYW1ldGVycworICoKKyAqIEBub3RlIFRoaXMgbW9kZSBpcyBhdmFpbGFibGUgb25seSBvbiBzb21lIFNvQydzLgorICovCit0eXBlZGVmIHN0cnVjdCBfdHBtX2R1YWxfZWRnZV9jYXB0dXJlX3BhcmFtCit7CisgICAgYm9vbCBlbmFibGVTd2FwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgdHJ1ZTogVXNlIGNoYW5uZWwgbisxIGlucHV0LCBjaGFubmVsIG4gaW5wdXQgaXMgaWdub3JlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTogVXNlIGNoYW5uZWwgbiBpbnB1dCwgY2hhbm5lbCBuKzEgaW5wdXQgaXMgaWdub3JlZCAqLworICAgIHRwbV9pbnB1dF9jYXB0dXJlX2VkZ2VfdCBjdXJyQ2hhbkVkZ2VNb2RlOyAvKiE8IElucHV0IGNhcHR1cmUgZWRnZSBzZWxlY3QgZm9yIGNoYW5uZWwgbiAqLworICAgIHRwbV9pbnB1dF9jYXB0dXJlX2VkZ2VfdCBuZXh0Q2hhbkVkZ2VNb2RlOyAvKiE8IElucHV0IGNhcHR1cmUgZWRnZSBzZWxlY3QgZm9yIGNoYW5uZWwgbisxICovCit9IHRwbV9kdWFsX2VkZ2VfY2FwdHVyZV9wYXJhbV90OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfUURDVFJMKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX1FEQ1RSTAorLyohCisgKiBAYnJpZWYgVFBNIHF1YWRyYXR1cmUgZGVjb2RlIG1vZGVzCisgKgorICogQG5vdGUgVGhpcyBtb2RlIGlzIGF2YWlsYWJsZSBvbmx5IG9uIHNvbWUgU29DJ3MuCisgKi8KK3R5cGVkZWYgZW51bSBfdHBtX3F1YWRfZGVjb2RlX21vZGUKK3sKKyAgICBrVFBNX1F1YWRQaGFzZUVuY29kZSA9IDBVLCAvKiE8IFBoYXNlIEEgYW5kIFBoYXNlIEIgZW5jb2RpbmcgbW9kZSAqLworICAgIGtUUE1fUXVhZENvdW50QW5kRGlyICAgICAgIC8qITwgQ291bnQgYW5kIGRpcmVjdGlvbiBlbmNvZGluZyBtb2RlICovCit9IHRwbV9xdWFkX2RlY29kZV9tb2RlX3Q7CisKKy8qISBAYnJpZWYgVFBNIHF1YWRyYXR1cmUgcGhhc2UgcG9sYXJpdGllcyAqLwordHlwZWRlZiBlbnVtIF90cG1fcGhhc2VfcG9sYXJpdHkKK3sKKyAgICBrVFBNX1F1YWRQaGFzZU5vcm1hbCA9IDBVLCAvKiE8IFBoYXNlIGlucHV0IHNpZ25hbCBpcyBub3QgaW52ZXJ0ZWQgKi8KKyAgICBrVFBNX1F1YWRQaGFzZUludmVydCAgICAgICAvKiE8IFBoYXNlIGlucHV0IHNpZ25hbCBpcyBpbnZlcnRlZCAqLworfSB0cG1fcGhhc2VfcG9sYXJpdHlfdDsKKworLyohIEBicmllZiBUUE0gcXVhZHJhdHVyZSBkZWNvZGUgcGhhc2UgcGFyYW1ldGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgX3RwbV9waGFzZV9wYXJhbQoreworICAgIHVpbnQzMl90IHBoYXNlRmlsdGVyVmFsOyAgICAgICAgICAgIC8qITwgRmlsdGVyIHZhbHVlLCBmaWx0ZXIgaXMgZGlzYWJsZWQgd2hlbiB0aGUgdmFsdWUgaXMgemVybyAqLworICAgIHRwbV9waGFzZV9wb2xhcml0eV90IHBoYXNlUG9sYXJpdHk7IC8qITwgUGhhc2UgcG9sYXJpdHkgKi8KK30gdHBtX3BoYXNlX3BhcmFtc190OworI2VuZGlmCisKKy8qISBAYnJpZWYgVFBNIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24qLwordHlwZWRlZiBlbnVtIF90cG1fY2xvY2tfc291cmNlCit7CisgICAga1RQTV9TeXN0ZW1DbG9jayA9IDFVLCAvKiE8IFN5c3RlbSBjbG9jayAqLworICAgIGtUUE1fRXh0ZXJuYWxDbG9jayAgICAgLyohPCBFeHRlcm5hbCBjbG9jayAqLworfSB0cG1fY2xvY2tfc291cmNlX3Q7CisKKy8qISBAYnJpZWYgVFBNIHByZXNjYWxlIHZhbHVlIHNlbGVjdGlvbiBmb3IgdGhlIGNsb2NrIHNvdXJjZSovCit0eXBlZGVmIGVudW0gX3RwbV9jbG9ja19wcmVzY2FsZQoreworICAgIGtUUE1fUHJlc2NhbGVfRGl2aWRlXzEgPSAwVSwgLyohPCBEaXZpZGUgYnkgMSAqLworICAgIGtUUE1fUHJlc2NhbGVfRGl2aWRlXzIsICAgICAgLyohPCBEaXZpZGUgYnkgMiAqLworICAgIGtUUE1fUHJlc2NhbGVfRGl2aWRlXzQsICAgICAgLyohPCBEaXZpZGUgYnkgNCAqLworICAgIGtUUE1fUHJlc2NhbGVfRGl2aWRlXzgsICAgICAgLyohPCBEaXZpZGUgYnkgOCAqLworICAgIGtUUE1fUHJlc2NhbGVfRGl2aWRlXzE2LCAgICAgLyohPCBEaXZpZGUgYnkgMTYgKi8KKyAgICBrVFBNX1ByZXNjYWxlX0RpdmlkZV8zMiwgICAgIC8qITwgRGl2aWRlIGJ5IDMyICovCisgICAga1RQTV9QcmVzY2FsZV9EaXZpZGVfNjQsICAgICAvKiE8IERpdmlkZSBieSA2NCAqLworICAgIGtUUE1fUHJlc2NhbGVfRGl2aWRlXzEyOCAgICAgLyohPCBEaXZpZGUgYnkgMTI4ICovCit9IHRwbV9jbG9ja19wcmVzY2FsZV90OworCisvKiEKKyAqIEBicmllZiBUUE0gY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgVFBNIHBlcmlwaGVyYWwuIFRvIGluaXRpYWxpemUgdGhpcworICogc3RydWN0dXJlIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMsIGNhbGwgdGhlIFRQTV9HZXREZWZhdWx0Q29uZmlnKCkgZnVuY3Rpb24gYW5kIHBhc3MgYQorICogcG9pbnRlciB0byB5b3VyIGNvbmZpZyBzdHJ1Y3R1cmUgaW5zdGFuY2UuCisgKgorICogVGhlIGNvbmZpZyBzdHJ1Y3QgY2FuIGJlIG1hZGUgY29uc3Qgc28gaXQgcmVzaWRlcyBpbiBmbGFzaAorICovCit0eXBlZGVmIHN0cnVjdCBfdHBtX2NvbmZpZworeworICAgIHRwbV9jbG9ja19wcmVzY2FsZV90IHByZXNjYWxlOyAgICAgIC8qITwgU2VsZWN0IFRQTSBjbG9jayBwcmVzY2FsZSB2YWx1ZSAqLworICAgIGJvb2wgdXNlR2xvYmFsVGltZUJhc2U7ICAgICAgICAgICAgIC8qITwgdHJ1ZTogVXNlIG9mIGFuIGV4dGVybmFsIGdsb2JhbCB0aW1lIGJhc2UgaXMgZW5hYmxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOiBkaXNhYmxlZCAqLworICAgIHRwbV90cmlnZ2VyX3NlbGVjdF90IHRyaWdnZXJTZWxlY3Q7IC8qITwgSW5wdXQgdHJpZ2dlciB0byB1c2UgZm9yIGNvbnRyb2xsaW5nIHRoZSBjb3VudGVyIG9wZXJhdGlvbiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19FWFRFUk5BTF9UUklHR0VSX1NFTEVDVElPTikgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19FWFRFUk5BTF9UUklHR0VSX1NFTEVDVElPTgorICAgIHRwbV90cmlnZ2VyX3NvdXJjZV90IHRyaWdnZXJTb3VyY2U7IC8qITwgRGVjaWRlcyBpZiB3ZSB1c2UgZXh0ZXJuYWwgb3IgaW50ZXJuYWwgdHJpZ2dlci4gKi8KKyNlbmRpZgorICAgIGJvb2wgZW5hYmxlRG96ZTsgICAgICAgICAgICAvKiE8IHRydWU6IFRQTSBjb3VudGVyIGlzIHBhdXNlZCBpbiBkb3plIG1vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U6IFRQTSBjb3VudGVyIGNvbnRpbnVlcyBpbiBkb3plIG1vZGUgKi8KKyAgICBib29sIGVuYWJsZURlYnVnTW9kZTsgICAgICAgLyohPCB0cnVlOiBUUE0gY291bnRlciBjb250aW51ZXMgaW4gZGVidWcgbW9kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTogVFBNIGNvdW50ZXIgaXMgcGF1c2VkIGluIGRlYnVnIG1vZGUgKi8KKyAgICBib29sIGVuYWJsZVJlbG9hZE9uVHJpZ2dlcjsgLyohPCB0cnVlOiBUUE0gY291bnRlciBpcyByZWxvYWRlZCBvbiB0cmlnZ2VyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOiBUUE0gY291bnRlciBub3QgcmVsb2FkZWQgKi8KKyAgICBib29sIGVuYWJsZVN0b3BPbk92ZXJmbG93OyAgLyohPCB0cnVlOiBUUE0gY291bnRlciBzdG9wcyBhZnRlciBvdmVyZmxvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTogVFBNIGNvdW50ZXIgY29udGludWVzIHJ1bm5pbmcgYWZ0ZXIgb3ZlcmZsb3cgKi8KKyAgICBib29sIGVuYWJsZVN0YXJ0T25UcmlnZ2VyOyAgLyohPCB0cnVlOiBUUE0gY291bnRlciBvbmx5IHN0YXJ0cyB3aGVuIGEgdHJpZ2dlciBpcyBkZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTogVFBNIGNvdW50ZXIgc3RhcnRzIGltbWVkaWF0ZWx5ICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX1BBVVNFX0NPVU5URVJfT05fVFJJR0dFUikgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19QQVVTRV9DT1VOVEVSX09OX1RSSUdHRVIKKyAgICBib29sIGVuYWJsZVBhdXNlT25UcmlnZ2VyOyAvKiE8IHRydWU6IFRQTSBjb3VudGVyIHdpbGwgcGF1c2Ugd2hpbGUgdHJpZ2dlciByZW1haW5zIGFzc2VydGVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U6IFRQTSBjb3VudGVyIGNvbnRpbnVlcyBydW5uaW5nICovCisjZW5kaWYKK30gdHBtX2NvbmZpZ190OworCisvKiEgQGJyaWVmIExpc3Qgb2YgVFBNIGludGVycnVwdHMgKi8KK3R5cGVkZWYgZW51bSBfdHBtX2ludGVycnVwdF9lbmFibGUKK3sKKyAgICBrVFBNX0NobmwwSW50ZXJydXB0RW5hYmxlID0gKDFVIDw8IDApLCAgICAgICAvKiE8IENoYW5uZWwgMCBpbnRlcnJ1cHQuKi8KKyAgICBrVFBNX0NobmwxSW50ZXJydXB0RW5hYmxlID0gKDFVIDw8IDEpLCAgICAgICAvKiE8IENoYW5uZWwgMSBpbnRlcnJ1cHQuKi8KKyAgICBrVFBNX0NobmwySW50ZXJydXB0RW5hYmxlID0gKDFVIDw8IDIpLCAgICAgICAvKiE8IENoYW5uZWwgMiBpbnRlcnJ1cHQuKi8KKyAgICBrVFBNX0NobmwzSW50ZXJydXB0RW5hYmxlID0gKDFVIDw8IDMpLCAgICAgICAvKiE8IENoYW5uZWwgMyBpbnRlcnJ1cHQuKi8KKyAgICBrVFBNX0Nobmw0SW50ZXJydXB0RW5hYmxlID0gKDFVIDw8IDQpLCAgICAgICAvKiE8IENoYW5uZWwgNCBpbnRlcnJ1cHQuKi8KKyAgICBrVFBNX0Nobmw1SW50ZXJydXB0RW5hYmxlID0gKDFVIDw8IDUpLCAgICAgICAvKiE8IENoYW5uZWwgNSBpbnRlcnJ1cHQuKi8KKyAgICBrVFBNX0Nobmw2SW50ZXJydXB0RW5hYmxlID0gKDFVIDw8IDYpLCAgICAgICAvKiE8IENoYW5uZWwgNiBpbnRlcnJ1cHQuKi8KKyAgICBrVFBNX0Nobmw3SW50ZXJydXB0RW5hYmxlID0gKDFVIDw8IDcpLCAgICAgICAvKiE8IENoYW5uZWwgNyBpbnRlcnJ1cHQuKi8KKyAgICBrVFBNX1RpbWVPdmVyZmxvd0ludGVycnVwdEVuYWJsZSA9ICgxVSA8PCA4KSAvKiE8IFRpbWUgb3ZlcmZsb3cgaW50ZXJydXB0LiovCit9IHRwbV9pbnRlcnJ1cHRfZW5hYmxlX3Q7CisKKy8qISBAYnJpZWYgTGlzdCBvZiBUUE0gZmxhZ3MgKi8KK3R5cGVkZWYgZW51bSBfdHBtX3N0YXR1c19mbGFncworeworICAgIGtUUE1fQ2hubDBGbGFnID0gKDFVIDw8IDApLCAgICAgICAvKiE8IENoYW5uZWwgMCBmbGFnICovCisgICAga1RQTV9DaG5sMUZsYWcgPSAoMVUgPDwgMSksICAgICAgIC8qITwgQ2hhbm5lbCAxIGZsYWcgKi8KKyAgICBrVFBNX0NobmwyRmxhZyA9ICgxVSA8PCAyKSwgICAgICAgLyohPCBDaGFubmVsIDIgZmxhZyAqLworICAgIGtUUE1fQ2hubDNGbGFnID0gKDFVIDw8IDMpLCAgICAgICAvKiE8IENoYW5uZWwgMyBmbGFnICovCisgICAga1RQTV9DaG5sNEZsYWcgPSAoMVUgPDwgNCksICAgICAgIC8qITwgQ2hhbm5lbCA0IGZsYWcgKi8KKyAgICBrVFBNX0Nobmw1RmxhZyA9ICgxVSA8PCA1KSwgICAgICAgLyohPCBDaGFubmVsIDUgZmxhZyAqLworICAgIGtUUE1fQ2hubDZGbGFnID0gKDFVIDw8IDYpLCAgICAgICAvKiE8IENoYW5uZWwgNiBmbGFnICovCisgICAga1RQTV9DaG5sN0ZsYWcgPSAoMVUgPDwgNyksICAgICAgIC8qITwgQ2hhbm5lbCA3IGZsYWcgKi8KKyAgICBrVFBNX1RpbWVPdmVyZmxvd0ZsYWcgPSAoMVUgPDwgOCkgLyohPCBUaW1lIG92ZXJmbG93IGZsYWcgKi8KK30gdHBtX3N0YXR1c19mbGFnc190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQG5hbWUgSW5pdGlhbGl6YXRpb24gYW5kIGRlaW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgVW5nYXRlcyB0aGUgVFBNIGNsb2NrIGFuZCBjb25maWd1cmVzIHRoZSBwZXJpcGhlcmFsIGZvciBiYXNpYyBvcGVyYXRpb24uCisgKgorICogQG5vdGUgVGhpcyBBUEkgc2hvdWxkIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcHBsaWNhdGlvbiB1c2luZyB0aGUgVFBNIGRyaXZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSAgIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHVzZXIncyBUUE0gY29uZmlnIHN0cnVjdHVyZS4KKyAqLwordm9pZCBUUE1fSW5pdChUUE1fVHlwZSAqYmFzZSwgY29uc3QgdHBtX2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBTdG9wcyB0aGUgY291bnRlciBhbmQgZ2F0ZXMgdGhlIFRQTSBjbG9jaworICoKKyAqIEBwYXJhbSBiYXNlIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICovCit2b2lkIFRQTV9EZWluaXQoVFBNX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiAgRmlsbCBpbiB0aGUgVFBNIGNvbmZpZyBzdHJ1Y3Qgd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncworICoKKyAqIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmU6CisgKiBAY29kZQorICogICAgIGNvbmZpZy0+cHJlc2NhbGUgPSBrVFBNX1ByZXNjYWxlX0RpdmlkZV8xOworICogICAgIGNvbmZpZy0+dXNlR2xvYmFsVGltZUJhc2UgPSBmYWxzZTsKKyAqICAgICBjb25maWctPmRvemVFbmFibGUgPSBmYWxzZTsKKyAqICAgICBjb25maWctPmRiZ01vZGUgPSBmYWxzZTsKKyAqICAgICBjb25maWctPmVuYWJsZVJlbG9hZE9uVHJpZ2dlciA9IGZhbHNlOworICogICAgIGNvbmZpZy0+ZW5hYmxlU3RvcE9uT3ZlcmZsb3cgPSBmYWxzZTsKKyAqICAgICBjb25maWctPmVuYWJsZVN0YXJ0T25UcmlnZ2VyID0gZmFsc2U7CisgKiNpZiBGU0xfRkVBVFVSRV9UUE1fSEFTX1BBVVNFX0NPVU5URVJfT05fVFJJR0dFUgorICogICAgIGNvbmZpZy0+ZW5hYmxlUGF1c2VPblRyaWdnZXIgPSBmYWxzZTsKKyAqI2VuZGlmCisgKiAgICAgY29uZmlnLT50cmlnZ2VyU2VsZWN0ID0ga1RQTV9UcmlnZ2VyX1NlbGVjdF8wOworICojaWYgRlNMX0ZFQVRVUkVfVFBNX0hBU19FWFRFUk5BTF9UUklHR0VSX1NFTEVDVElPTgorICogICAgIGNvbmZpZy0+dHJpZ2dlclNvdXJjZSA9IGtUUE1fVHJpZ2dlclNvdXJjZV9FeHRlcm5hbDsKKyAqI2VuZGlmCisgKiBAZW5kY29kZQorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHVzZXIncyBUUE0gY29uZmlnIHN0cnVjdHVyZS4KKyAqLwordm9pZCBUUE1fR2V0RGVmYXVsdENvbmZpZyh0cG1fY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qISBAfSovCisKKy8qIQorICogQG5hbWUgQ2hhbm5lbCBtb2RlIG9wZXJhdGlvbnMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgUFdNIHNpZ25hbCBwYXJhbWV0ZXJzCisgKgorICogVXNlciBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGNvbmZpZ3VyZSB0aGUgUFdNIHNpZ25hbHMgcGVyaW9kLCBtb2RlLCBkdXR5Y3ljbGUgYW5kIGVkZ2UuIFVzZSB0aGlzCisgKiBmdW5jdGlvbiB0byBjb25maWd1cmUgYWxsIHRoZSBUUE0gY2hhbm5lbHMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gb3V0cHV0IGEgUFdNIHNpZ25hbAorICoKKyAqIEBwYXJhbSBiYXNlICAgICAgICBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaG5sUGFyYW1zICBBcnJheSBvZiBQV00gY2hhbm5lbCBwYXJhbWV0ZXJzIHRvIGNvbmZpZ3VyZSB0aGUgY2hhbm5lbChzKQorICogQHBhcmFtIG51bU9mQ2hubHMgIE51bWJlciBvZiBjaGFubmVscyB0byBjb25maWd1cmUsIHRoaXMgc2hvdWxkIGJlIHRoZSBzaXplIG9mIHRoZSBhcnJheSBwYXNzZWQgaW4KKyAqIEBwYXJhbSBtb2RlICAgICAgICBQV00gb3BlcmF0aW9uIG1vZGUsIG9wdGlvbnMgYXZhaWxhYmxlIGluIGVudW1lcmF0aW9uIDo6dHBtX3B3bV9tb2RlX3QKKyAqIEBwYXJhbSBwd21GcmVxX0h6ICBQV00gc2lnbmFsIGZyZXF1ZW5jeSBpbiBIegorICogQHBhcmFtIHNyY0Nsb2NrX0h6IFRQTSBjb3VudGVyIGNsb2NrIGluIEh6CisgKgorICogQHJldHVybiBrU3RhdHVzX1N1Y2Nlc3MgaWYgdGhlIFBXTSBzZXR1cCB3YXMgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAga1N0YXR1c19FcnJvciBvbiBmYWlsdXJlCisgKi8KK3N0YXR1c190IFRQTV9TZXR1cFB3bShUUE1fVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cG1fY2hubF9wd21fc2lnbmFsX3BhcmFtX3QgKmNobmxQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBudW1PZkNobmxzLAorICAgICAgICAgICAgICAgICAgICAgIHRwbV9wd21fbW9kZV90IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcHdtRnJlcV9IeiwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNDbG9ja19Ieik7CisKKy8qIQorICogQGJyaWVmIFVwZGF0ZSB0aGUgZHV0eSBjeWNsZSBvZiBhbiBhY3RpdmUgUFdNIHNpZ25hbAorICoKKyAqIEBwYXJhbSBiYXNlICAgICAgICAgICAgICBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaG5sTnVtYmVyICAgICAgICBUaGUgY2hhbm5lbCBudW1iZXIuIEluIGNvbWJpbmVkIG1vZGUsIHRoaXMgcmVwcmVzZW50cworICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjaGFubmVsIHBhaXIgbnVtYmVyCisgKiBAcGFyYW0gY3VycmVudFB3bU1vZGUgICAgVGhlIGN1cnJlbnQgUFdNIG1vZGUgc2V0IGR1cmluZyBQV00gc2V0dXAKKyAqIEBwYXJhbSBkdXR5Q3ljbGVQZXJjZW50ICBOZXcgUFdNIHB1bHNlIHdpZHRoLCB2YWx1ZSBzaG91bGQgYmUgYmV0d2VlbiAwIHRvIDEwMAorICogICAgICAgICAgICAgICAgICAgICAgICAgIDA9aW5hY3RpdmUgc2lnbmFsKDAlIGR1dHkgY3ljbGUpLi4uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwPWFjdGl2ZSBzaWduYWwgKDEwMCUgZHV0eSBjeWNsZSkKKyAqLwordm9pZCBUUE1fVXBkYXRlUHdtRHV0eWN5Y2xlKFRQTV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9jaG5sX3QgY2hubE51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fcHdtX21vZGVfdCBjdXJyZW50UHdtTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGR1dHlDeWNsZVBlcmNlbnQpOworCisvKiEKKyAqIEBicmllZiBVcGRhdGUgdGhlIGVkZ2UgbGV2ZWwgc2VsZWN0aW9uIGZvciBhIGNoYW5uZWwKKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgICBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaG5sTnVtYmVyIFRoZSBjaGFubmVsIG51bWJlcgorICogQHBhcmFtIGxldmVsICAgICAgVGhlIGxldmVsIHRvIGJlIHNldCB0byB0aGUgRUxTbkI6RUxTbkEgZmllbGQ7IHZhbGlkIHZhbHVlcyBhcmUgMDAsIDAxLCAxMCwgMTEuCisgKiAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGFwcHJvcHJpYXRlIFNvQyByZWZlcmVuY2UgbWFudWFsIGZvciBkZXRhaWxzIGFib3V0IHRoaXMgZmllbGQuCisgKi8KK3ZvaWQgVFBNX1VwZGF0ZUNobmxFZGdlTGV2ZWxTZWxlY3QoVFBNX1R5cGUgKmJhc2UsIHRwbV9jaG5sX3QgY2hubE51bWJlciwgdWludDhfdCBsZXZlbCk7CisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgY2FwdHVyaW5nIGFuIGlucHV0IHNpZ25hbCBvbiB0aGUgY2hhbm5lbCB1c2luZyB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4KKyAqCisgKiBXaGVuIHRoZSBlZGdlIHNwZWNpZmllZCBpbiB0aGUgY2FwdHVyZU1vZGUgYXJndW1lbnQgb2NjdXJzIG9uIHRoZSBjaGFubmVsLCB0aGUgVFBNIGNvdW50ZXIgaXMgY2FwdHVyZWQgaW50bworICogdGhlIENuViByZWdpc3Rlci4gVGhlIHVzZXIgaGFzIHRvIHJlYWQgdGhlIENuViByZWdpc3RlciBzZXBhcmF0ZWx5IHRvIGdldCB0aGlzIHZhbHVlLgorICoKKyAqIEBwYXJhbSBiYXNlICAgICAgICBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaG5sTnVtYmVyICBUaGUgY2hhbm5lbCBudW1iZXIKKyAqIEBwYXJhbSBjYXB0dXJlTW9kZSBTcGVjaWZpZXMgd2hpY2ggZWRnZSB0byBjYXB0dXJlCisgKi8KK3ZvaWQgVFBNX1NldHVwSW5wdXRDYXB0dXJlKFRQTV9UeXBlICpiYXNlLCB0cG1fY2hubF90IGNobmxOdW1iZXIsIHRwbV9pbnB1dF9jYXB0dXJlX2VkZ2VfdCBjYXB0dXJlTW9kZSk7CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIFRQTSB0byBnZW5lcmF0ZSB0aW1lZCBwdWxzZXMuCisgKgorICogV2hlbiB0aGUgVFBNIGNvdW50ZXIgbWF0Y2hlcyB0aGUgdmFsdWUgb2YgY29tcGFyZVZhbCBhcmd1bWVudCAodGhpcyBpcyB3cml0dGVuIGludG8gQ25WIHJlZyksIHRoZSBjaGFubmVsCisgKiBvdXRwdXQgaXMgY2hhbmdlZCBiYXNlZCBvbiB3aGF0IGlzIHNwZWNpZmllZCBpbiB0aGUgY29tcGFyZU1vZGUgYXJndW1lbnQuCisgKgorICogQHBhcmFtIGJhc2UgICAgICAgICBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaG5sTnVtYmVyICAgVGhlIGNoYW5uZWwgbnVtYmVyCisgKiBAcGFyYW0gY29tcGFyZU1vZGUgIEFjdGlvbiB0byB0YWtlIG9uIHRoZSBjaGFubmVsIG91dHB1dCB3aGVuIHRoZSBjb21wYXJlIGNvbmRpdGlvbiBpcyBtZXQKKyAqIEBwYXJhbSBjb21wYXJlVmFsdWUgVmFsdWUgdG8gYmUgcHJvZ3JhbW1lZCBpbiB0aGUgQ25WIHJlZ2lzdGVyLgorICovCit2b2lkIFRQTV9TZXR1cE91dHB1dENvbXBhcmUoVFBNX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX2NobmxfdCBjaG5sTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9vdXRwdXRfY29tcGFyZV9tb2RlX3QgY29tcGFyZU1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY29tcGFyZVZhbHVlKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIGR1YWwgZWRnZSBjYXB0dXJlIG1vZGUgb2YgdGhlIFRQTS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byBtZWFzdXJlIGEgcHVsc2Ugd2lkdGggb2YgdGhlIHNpZ25hbCBvbiB0aGUgaW5wdXQgb2YgY2hhbm5lbCBvZiBhCisgKiBjaGFubmVsIHBhaXIuIFRoZSBmaWx0ZXIgZnVuY3Rpb24gaXMgZGlzYWJsZWQgaWYgdGhlIGZpbHRlclZhbCBhcmd1bWVudCBwYXNzZWQgaXMgemVyby4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgICAgICAgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2hubFBhaXJOdW1iZXIgVGhlIFRQTSBjaGFubmVsIHBhaXIgbnVtYmVyOyBvcHRpb25zIGFyZSAwLCAxLCAyLCAzCisgKiBAcGFyYW0gZWRnZVBhcmFtICAgICAgU2V0cyB1cCB0aGUgZHVhbCBlZGdlIGNhcHR1cmUgZnVuY3Rpb24KKyAqIEBwYXJhbSBmaWx0ZXJWYWx1ZSAgICBGaWx0ZXIgdmFsdWUsIHNwZWNpZnkgMCB0byBkaXNhYmxlIGZpbHRlci4KKyAqLwordm9pZCBUUE1fU2V0dXBEdWFsRWRnZUNhcHR1cmUoVFBNX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fY2hubF90IGNobmxQYWlyTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHBtX2R1YWxfZWRnZV9jYXB0dXJlX3BhcmFtX3QgKmVkZ2VQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZpbHRlclZhbHVlKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX1FEQ1RSTCkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHBhcmFtZXRlcnMgYW5kIGFjdGl2YXRlcyB0aGUgcXVhZHJhdHVyZSBkZWNvZGUgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgICAgIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBoYXNlQVBhcmFtcyBQaGFzZSBBIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworICogQHBhcmFtIHBoYXNlQlBhcmFtcyBQaGFzZSBCIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworICogQHBhcmFtIHF1YWRNb2RlICAgICBTZWxlY3RzIGVuY29kaW5nIG1vZGUgdXNlZCBpbiBxdWFkcmF0dXJlIGRlY29kZXIgbW9kZQorICovCit2b2lkIFRQTV9TZXR1cFF1YWREZWNvZGUoVFBNX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHBtX3BoYXNlX3BhcmFtc190ICpwaGFzZUFQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHBtX3BoYXNlX3BhcmFtc190ICpwaGFzZUJQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX3F1YWRfZGVjb2RlX21vZGVfdCBxdWFkTW9kZSk7CisjZW5kaWYKKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBJbnRlcnJ1cHQgSW50ZXJmYWNlCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgdGhlIHNlbGVjdGVkIFRQTSBpbnRlcnJ1cHRzLgorICoKKyAqIEBwYXJhbSBiYXNlIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIG1hc2sgVGhlIGludGVycnVwdHMgdG8gZW5hYmxlLiBUaGlzIGlzIGEgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICAgICAgZW51bWVyYXRpb24gOjp0cG1faW50ZXJydXB0X2VuYWJsZV90CisgKi8KK3ZvaWQgVFBNX0VuYWJsZUludGVycnVwdHMoVFBNX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyB0aGUgc2VsZWN0ZWQgVFBNIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGJhc2UgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0cyB0byBkaXNhYmxlLiBUaGlzIGlzIGEgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICAgICAgZW51bWVyYXRpb24gOjp0cG1faW50ZXJydXB0X2VuYWJsZV90CisgKi8KK3ZvaWQgVFBNX0Rpc2FibGVJbnRlcnJ1cHRzKFRQTV9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgZW5hYmxlZCBUUE0gaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuIFRoZSBlbmFibGVkIGludGVycnVwdHMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgZW51bWVyYXRpb24gOjp0cG1faW50ZXJydXB0X2VuYWJsZV90CisgKi8KK3VpbnQzMl90IFRQTV9HZXRFbmFibGVkSW50ZXJydXB0cyhUUE1fVHlwZSAqYmFzZSk7CisKKy8qISBAfSovCisKKy8qIQorICogQG5hbWUgU3RhdHVzIEludGVyZmFjZQorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBUUE0gc3RhdHVzIGZsYWdzCisgKgorICogQHBhcmFtIGJhc2UgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKgorICogQHJldHVybiBUaGUgc3RhdHVzIGZsYWdzLiBUaGlzIGlzIHRoZSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgIGVudW1lcmF0aW9uIDo6dHBtX3N0YXR1c19mbGFnc190CisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgVFBNX0dldFN0YXR1c0ZsYWdzKFRQTV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiBiYXNlLT5TVEFUVVM7Cit9CisKKy8qIQorICogQGJyaWVmIENsZWFycyB0aGUgVFBNIHN0YXR1cyBmbGFncworICoKKyAqIEBwYXJhbSBiYXNlIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIG1hc2sgVGhlIHN0YXR1cyBmbGFncyB0byBjbGVhci4gVGhpcyBpcyBhIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgICAgIGVudW1lcmF0aW9uIDo6dHBtX3N0YXR1c19mbGFnc190CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBUUE1fQ2xlYXJTdGF0dXNGbGFncyhUUE1fVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICAvKiBDbGVhciB0aGUgc3RhdHVzIGZsYWdzICovCisgICAgYmFzZS0+U1RBVFVTID0gbWFzazsKK30KKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBSZWFkIGFuZCB3cml0ZSB0aGUgdGltZXIgcGVyaW9kCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIHRpbWVyIHBlcmlvZCBpbiB1bml0cyBvZiB0aWNrcy4KKyAqCisgKiBUaW1lcnMgY291bnRzIGZyb20gMCB1bnRpbCBpdCBlcXVhbHMgdGhlIGNvdW50IHZhbHVlIHNldCBoZXJlLiBUaGUgY291bnQgdmFsdWUgaXMgd3JpdHRlbiB0bworICogdGhlIE1PRCByZWdpc3Rlci4KKyAqCisgKiBAbm90ZQorICogMS4gVGhpcyBBUEkgYWxsb3dzIHRoZSB1c2VyIHRvIHVzZSB0aGUgVFBNIG1vZHVsZSBhcyBhIHRpbWVyLiBEbyBub3QgbWl4IHVzYWdlCisgKiAgICBvZiB0aGlzIEFQSSB3aXRoIFRQTSdzIFBXTSBzZXR1cCBBUEkncy4KKyAqIDIuIENhbGwgdGhlIHV0aWxpdHkgbWFjcm9zIHByb3ZpZGVkIGluIHRoZSBmc2xfY29tbW9uLmggdG8gY29udmVydCB1c2VjIG9yIG1zZWMgdG8gdGlja3MuCisgKgorICogQHBhcmFtIGJhc2UgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gdGlja3MgQSB0aW1lciBwZXJpb2QgaW4gdW5pdHMgb2YgdGlja3MsIHdoaWNoIHNob3VsZCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gMS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFRQTV9TZXRUaW1lclBlcmlvZChUUE1fVHlwZSAqYmFzZSwgdWludDMyX3QgdGlja3MpCit7CisgICAgYmFzZS0+TU9EID0gdGlja3M7Cit9CisKKy8qIQorICogQGJyaWVmIFJlYWRzIHRoZSBjdXJyZW50IHRpbWVyIGNvdW50aW5nIHZhbHVlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVhbC10aW1lIHRpbWVyIGNvdW50aW5nIHZhbHVlIGluIGEgcmFuZ2UgZnJvbSAwIHRvIGEKKyAqIHRpbWVyIHBlcmlvZC4KKyAqCisgKiBAbm90ZSBDYWxsIHRoZSB1dGlsaXR5IG1hY3JvcyBwcm92aWRlZCBpbiB0aGUgZnNsX2NvbW1vbi5oIHRvIGNvbnZlcnQgdGlja3MgdG8gdXNlYyBvciBtc2VjLgorICoKKyAqIEBwYXJhbSBiYXNlIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICoKKyAqIEByZXR1cm4gVGhlIGN1cnJlbnQgY291bnRlciB2YWx1ZSBpbiB0aWNrcworICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFRQTV9HZXRDdXJyZW50VGltZXJDb3VudChUUE1fVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90KSgoYmFzZS0+Q05UICYgVFBNX0NOVF9DT1VOVF9NQVNLKSA+PiBUUE1fQ05UX0NPVU5UX1NISUZUKTsKK30KKworLyohCisgKiBAbmFtZSBUaW1lciBTdGFydCBhbmQgU3RvcAorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBTdGFydHMgdGhlIFRQTSBjb3VudGVyLgorICoKKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgICAgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2xvY2tTb3VyY2UgVFBNIGNsb2NrIHNvdXJjZTsgb25jZSBjbG9jayBzb3VyY2UgaXMgc2V0IHRoZSBjb3VudGVyIHdpbGwgc3RhcnQgcnVubmluZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgVFBNX1N0YXJ0VGltZXIoVFBNX1R5cGUgKmJhc2UsIHRwbV9jbG9ja19zb3VyY2VfdCBjbG9ja1NvdXJjZSkKK3sKKyAgICB1aW50MzJfdCByZWcgPSBiYXNlLT5TQzsKKworICAgIHJlZyAmPSB+KFRQTV9TQ19DTU9EX01BU0spOworICAgIHJlZyB8PSBUUE1fU0NfQ01PRChjbG9ja1NvdXJjZSk7CisgICAgYmFzZS0+U0MgPSByZWc7Cit9CisKKy8qIQorICogQGJyaWVmIFN0b3BzIHRoZSBUUE0gY291bnRlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFRQTV9TdG9wVGltZXIoVFBNX1R5cGUgKmJhc2UpCit7CisgICAgLyogU2V0IGNsb2NrIHNvdXJjZSB0byBub25lIHRvIGRpc2FibGUgY291bnRlciAqLworICAgIGJhc2UtPlNDICY9IH4oVFBNX1NDX0NNT0RfTUFTSyk7CisKKyAgICAvKiBXYWl0IHRpbGwgdGhpcyByZWFkcyBhcyB6ZXJvIGFja25vd2xlZGdpbmcgdGhlIGNvdW50ZXIgaXMgZGlzYWJsZWQgKi8KKyAgICB3aGlsZSAoYmFzZS0+U0MgJiBUUE1fU0NfQ01PRF9NQVNLKQorICAgIHsKKyAgICB9Cit9CisKKy8qISBAfSovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfR0xPQkFMKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0dMT0JBTAorLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgYSBzb2Z0d2FyZSByZXNldCBvbiB0aGUgVFBNIG1vZHVsZS4KKyAqCisgKiBSZXNldCBhbGwgaW50ZXJuYWwgbG9naWMgYW5kIHJlZ2lzdGVycywgZXhjZXB0IHRoZSBHbG9iYWwgUmVnaXN0ZXIuIFJlbWFpbnMgc2V0IHVudGlsIGNsZWFyZWQgYnkgc29mdHdhcmUuLgorICoKKyAqIEBub3RlIFRQTSBzb2Z0d2FyZSByZXNldCBpcyBhdmFpbGFibGUgb24gY2VydGFpbiBTb0MncyBvbmx5CisgKgorICogQHBhcmFtIGJhc2UgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBUUE1fUmVzZXQoVFBNX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+R0xPQkFMIHw9IFRQTV9HTE9CQUxfUlNUX01BU0s7CisgICAgYmFzZS0+R0xPQkFMICY9IH5UUE1fR0xPQkFMX1JTVF9NQVNLOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRlNMX1RQTV9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHJuZy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHJuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NjBiYjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90cm5nLmMKQEAgLTAsMCArMSwxNjUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJmc2xfdHJuZy5oIgorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfVFJOR19DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX1RSTkdfQ09VTlQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlZmF1bHQgdmFsdWVzIGZvciB1c2VyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiovCisjaWYgKGRlZmluZWQoS1c0MFo0X1NFUklFUykgfHwgZGVmaW5lZChLVzQxWjRfU0VSSUVTKSB8fCBkZWZpbmVkKEtXMzFaNF9TRVJJRVMpIHx8IGRlZmluZWQoS1cyMVo0X1NFUklFUykgfHwgXAorICAgICBkZWZpbmVkKE1DSU1YN1U1X000X1NFUklFUykpCisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9PU0NfRElWIGtUUk5HX1JpbmdPc2NEaXY4CisjZWxpZihkZWZpbmVkKEtWNTZGMjRfU0VSSUVTKSB8fCBkZWZpbmVkKEtWNThGMjRfU0VSSUVTKSB8fCBkZWZpbmVkKEtMMjhaN19TRVJJRVMpIHx8IGRlZmluZWQoS0w4MVo3X1NFUklFUykgfHwgXAorICAgICAgZGVmaW5lZChLTDgyWjdfU0VSSUVTKSkKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX09TQ19ESVYga1RSTkdfUmluZ09zY0RpdjQKKyNlbGlmIGRlZmluZWQoSzgxRjI1NjE1X1NFUklFUykKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX09TQ19ESVYga1RSTkdfUmluZ09zY0RpdjIKKyNlbHNlCisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9PU0NfRElWIGtUUk5HX1JpbmdPc2NEaXYwCisjZW5kaWYKKworI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfTE9DSyAwCisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9FTlRST1BZX0RFTEFZIDMyMDAKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1NBTVBMRV9TSVpFIDI1MDAKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1NQQVJTRV9CSVRfTElNSVQgNjMKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JFVFJZX0NPVU5UIDEKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTl9NQVhfTElNSVQgMzQKKworI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfTU9OT0JJVF9NQVhJTVVNIDEzODQKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX01PTk9CSVRfTUlOSU1VTSAoVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX01PTk9CSVRfTUFYSU1VTSAtIDI2OCkKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDFfTUFYSU1VTSA0MDUKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDFfTUlOSU1VTSAoVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDFfTUFYSU1VTSAtIDE3OCkKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDJfTUFYSU1VTSAyMjAKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDJfTUlOSU1VTSAoVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDJfTUFYSU1VTSAtIDEyMikKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDNfTUFYSU1VTSAxMjUKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDNfTUlOSU1VTSAoVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDNfTUFYSU1VTSAtIDg4KQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUNF9NQVhJTVVNIDc1CisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQ0X01JTklNVU0gKFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQ0X01BWElNVU0gLSA2NCkKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDVfTUFYSU1VTSA0NworI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUNV9NSU5JTVVNIChUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUNV9NQVhJTVVNIC0gNDYpCisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQ2UExVU19NQVhJTVVNIDQ3CisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQ2UExVU19NSU5JTVVNIChUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUNlBMVVNfTUFYSU1VTSAtIDQ2KQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUE9LRVJfTUFYSU1VTSAyNjkxMgorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUE9LRVJfTUlOSU1VTSAoVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1BPS0VSX01BWElNVU0gLSAyNDY3KQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfRlJFUVVFTkNZX01BWElNVU0gMjU2MDAKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX0ZSRVFVRU5DWV9NSU5JTVVNIDE2MDAKKworLyohIEBicmllZiBUUk5HIHdvcmsgbW9kZSAqLwordHlwZWRlZiBlbnVtIF90cm5nX3dvcmtfbW9kZQoreworICAgIGtUUk5HX1dvcmtNb2RlUnVuID0gMFUsICAgIC8qITwgUnVuIE1vZGUuICovCisgICAga1RSTkdfV29ya01vZGVQcm9ncmFtID0gMVUgLyohPCBQcm9ncmFtIE1vZGUuICovCit9IHRybmdfd29ya19tb2RlX3Q7CisKKy8qISBAYnJpZWYgVFJORyBzdGF0aXN0aWNhbCBjaGVjayB0eXBlKi8KK3R5cGVkZWYgZW51bSBfdHJuZ19zdGF0aXN0aWNhbF9jaGVjaworeworICAgIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tNb25vYml0ID0KKyAgICAgICAgMVUsICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGF0aXN0aWNhbCBjaGVjayBvZiBudW1iZXIgb2Ygb25lcy96ZXJvIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uICovCisgICAga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDEsIC8qITwgU3RhdGlzdGljYWwgY2hlY2sgb2YgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDEgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbi4gKi8KKyAgICBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0MiwgLyohPCBTdGF0aXN0aWNhbCBjaGVjayBvZiBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggMiBkZXRlY3RlZCBkdXJpbmcgZW50cm9weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uLiAqLworICAgIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQzLCAvKiE8IFN0YXRpc3RpY2FsIGNoZWNrIG9mIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAzIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRpb24uICovCisgICAga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDQsIC8qITwgU3RhdGlzdGljYWwgY2hlY2sgb2YgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDQgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbi4gKi8KKyAgICBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0NSwgLyohPCBTdGF0aXN0aWNhbCBjaGVjayBvZiBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNSBkZXRlY3RlZCBkdXJpbmcgZW50cm9weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uLiAqLworICAgIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQ2UGx1cywgICAvKiE8IFN0YXRpc3RpY2FsIGNoZWNrIG9mIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCA2IG9yIG1vcmUgZGV0ZWN0ZWQgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICBrVFJOR19TdGF0aXN0aWNhbENoZWNrUG9rZXIsICAgICAgICAgLyohPCBTdGF0aXN0aWNhbCBjaGVjayBvZiAiUG9rZXIgVGVzdCIuICovCisgICAga1RSTkdfU3RhdGlzdGljYWxDaGVja0ZyZXF1ZW5jeUNvdW50IC8qITwgU3RhdGlzdGljYWwgY2hlY2sgb2YgZW50cm9weSBzYW1wbGUgZnJlcXVlbmN5IGNvdW50LiAqLworfSB0cm5nX3N0YXRpc3RpY2FsX2NoZWNrX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUUk5HX1NDTUlTQyAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDTUlTQywgZmllbGQgUlRZX0NUWzE5OjE2XSAoUlcpCisgKgorICogUkVUUlkgQ09VTlQuIElmIGEgc3RhdGlzdGljYWwgY2hlY2sgZmFpbHMgZHVyaW5nIHRoZSBUUk5HIEVudHJvcHkgR2VuZXJhdGlvbiwKKyAqIHRoZSBSVFlfQ1QgdmFsdWUgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgdGltZXMgYSByZXRyeSBzaG91bGQgb2NjdXIgYmVmb3JlCisgKiBnZW5lcmF0aW5nIGFuIGVycm9yLiBUaGlzIGZpZWxkIGlzIHdyaXRhYmxlIG9ubHkgaWYgTUNUTFtQUkdNXSBiaXQgaXMgMS4gVGhpcworICogZmllbGQgd2lsbCByZWFkIHplcm9lcyBpZiBNQ1RMW1BSR01dID0gMC4gVGhpcyBmaWVsZCBpcyBjbGVhcmVkIHRvIDFoIGJ5IHdyaXRpbmcKKyAqIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NDTUlTQ19SVFlfQ1QgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NNSVNDX1JUWV9DVChiYXNlKSAoKFRSTkdfU0NNSVNDX1JFRyhiYXNlKSAmIFRSTkdfU0NNSVNDX1JUWV9DVF9NQVNLKSA+PiBUUk5HX1NDTUlTQ19SVFlfQ1RfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBSVFlfQ1QgZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0NNSVNDX1JUWV9DVChiYXNlLCB2YWx1ZSkgKFRSTkdfUk1XX1NDTUlTQyhiYXNlLCBUUk5HX1NDTUlTQ19SVFlfQ1RfTUFTSywgVFJOR19TQ01JU0NfUlRZX0NUKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfU0NNTCAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBNb25vYml0IExpbWl0IFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYnJpZWYgVFJOR19TQ01MIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIE1vbm9iaXQgTGltaXQgUmVnaXN0ZXIgKFJXKQorICoKKyAqIFJlc2V0IHZhbHVlOiAweDAxMEMwNTY4VQorICoKKyAqIFRoZSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgTW9ub2JpdCBMaW1pdCBSZWdpc3RlciBkZWZpbmVzIHRoZSBhbGxvd2FibGUKKyAqIG1heGltdW0gYW5kIG1pbmltdW0gbnVtYmVyIG9mIG9uZXMvemVybyBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiBUbyBwYXNzCisgKiB0aGUgdGVzdCwgdGhlIG51bWJlciBvZiBvbmVzL3plcm9lcyBnZW5lcmF0ZWQgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIHByb2dyYW1tZWQKKyAqIG1heGltdW0gdmFsdWUsIGFuZCB0aGUgbnVtYmVyIG9mIG9uZXMvemVyb2VzIGdlbmVyYXRlZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbgorICogKG1heGltdW0gLSByYW5nZSkuIElmIHRoaXMgdGVzdCBmYWlscywgdGhlIFJldHJ5IENvdW50ZXIgaW4gU0NNSVNDIHdpbGwgYmUKKyAqIGRlY3JlbWVudGVkLCBhbmQgYSByZXRyeSB3aWxsIG9jY3VyIGlmIHRoZSBSZXRyeSBDb3VudCBoYXMgbm90IHJlYWNoZWQgemVyby4gSWYKKyAqIHRoZSBSZXRyeSBDb3VudCBoYXMgcmVhY2hlZCB6ZXJvLCBhbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZC4gTm90ZSB0aGF0IHRoaXMKKyAqIG9mZnNldCAoMHhCQVNFXzA2MjApIGlzIHVzZWQgYXMgU0NNTCBvbmx5IGlmIE1DVExbUFJHTV0gaXMgMS4gSWYgTUNUTFtQUkdNXSBpcyAwLAorICogdGhpcyBvZmZzZXQgaXMgdXNlZCBhcyBTQ01DIHJlYWRiYWNrIHJlZ2lzdGVyLgorICovCisvKiEKKyAqIEBuYW1lIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBlbnRpcmUgVFJOR19TQ01MIHJlZ2lzdGVyCisgKi8KKy8qQHsqLworI2RlZmluZSBUUk5HX1NDTUxfUkVHKGJhc2UpICgoYmFzZSktPlNDTUwpCisjZGVmaW5lIFRSTkdfUkRfU0NNTChiYXNlKSAoVFJOR19TQ01MX1JFRyhiYXNlKSkKKyNkZWZpbmUgVFJOR19XUl9TQ01MKGJhc2UsIHZhbHVlKSAoVFJOR19TQ01MX1JFRyhiYXNlKSA9ICh2YWx1ZSkpCisjZGVmaW5lIFRSTkdfUk1XX1NDTUwoYmFzZSwgbWFzaywgdmFsdWUpIChUUk5HX1dSX1NDTUwoYmFzZSwgKFRSTkdfUkRfU0NNTChiYXNlKSAmIH4obWFzaykpIHwgKHZhbHVlKSkpCisvKkB9Ki8KKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19TQ01MLCBmaWVsZCBNT05PX01BWFsxNTowXSAoUlcpCisgKgorICogTW9ub2JpdCBNYXhpbXVtIExpbWl0LiBEZWZpbmVzIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBjb3VudCB0YWtlbiBkdXJpbmcKKyAqIGVudHJvcHkgZ2VuZXJhdGlvbi4gVGhlIG51bWJlciBvZiBvbmVzL3plcm9lcyBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uCisgKiBtdXN0IGJlIGxlc3MgdGhhbiBNT05PX01BWCwgZWxzZSBhIHJldHJ5IG9yIGVycm9yIHdpbGwgb2NjdXIuIFRoaXMgcmVnaXN0ZXIgaXMKKyAqIGNsZWFyZWQgdG8gMDAwNTZCaCAoZGVjaW1hbCAxMzg3KSBieSB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NDTUxfTU9OT19NQVggZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NNTF9NT05PX01BWChiYXNlKSAoKFRSTkdfU0NNTF9SRUcoYmFzZSkgJiBUUk5HX1NDTUxfTU9OT19NQVhfTUFTSykgPj4gVFJOR19TQ01MX01PTk9fTUFYX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgTU9OT19NQVggZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0NNTF9NT05PX01BWChiYXNlLCB2YWx1ZSkgKFRSTkdfUk1XX1NDTUwoYmFzZSwgVFJOR19TQ01MX01PTk9fTUFYX01BU0ssIFRSTkdfU0NNTF9NT05PX01BWCh2YWx1ZSkpKQorLypAfSovCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NNTCwgZmllbGQgTU9OT19STkdbMzE6MTZdIChSVykKKyAqCisgKiBNb25vYml0IFJhbmdlLiBUaGUgbnVtYmVyIG9mIG9uZXMvemVyb2VzIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24KKyAqIG11c3QgYmUgZ3JlYXRlciB0aGFuIE1PTk9fTUFYIC0gTU9OT19STkcsIGVsc2UgYSByZXRyeSBvciBlcnJvciB3aWxsIG9jY3VyLgorICogVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAwMDExMmggKGRlY2ltYWwgMjc0KSBieSB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdCisgKiBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TQ01MX01PTk9fUk5HIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NDTUxfTU9OT19STkcoYmFzZSkgKChUUk5HX1NDTUxfUkVHKGJhc2UpICYgVFJOR19TQ01MX01PTk9fUk5HX01BU0spID4+IFRSTkdfU0NNTF9NT05PX1JOR19TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIE1PTk9fUk5HIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NDTUxfTU9OT19STkcoYmFzZSwgdmFsdWUpIChUUk5HX1JNV19TQ01MKGJhc2UsIFRSTkdfU0NNTF9NT05PX1JOR19NQVNLLCBUUk5HX1NDTUxfTU9OT19STkcodmFsdWUpKSkKKy8qQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVFJOR19TQ1IxTCAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDEgTGltaXQgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIFRSTkdfU0NSMUwgLSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAxIExpbWl0IFJlZ2lzdGVyIChSVykKKyAqCisgKiBSZXNldCB2YWx1ZTogMHgwMEIyMDE5NVUKKyAqCisgKiBUaGUgUk5HIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMSBMaW1pdCBSZWdpc3RlciBkZWZpbmVzIHRoZSBhbGxvd2FibGUKKyAqIG1heGltdW0gYW5kIG1pbmltdW0gbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDEgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkKKyAqIGdlbmVyYXRpb24uIFRvIHBhc3MgdGhlIHRlc3QsIHRoZSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggMSAoZm9yIHNhbXBsZXMgb2YgYm90aCAwCisgKiBhbmQgMSkgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIHByb2dyYW1tZWQgbWF4aW11bSB2YWx1ZSwgYW5kIHRoZSBudW1iZXIgb2YgcnVucyBvZgorICogbGVuZ3RoIDEgbXVzdCBiZSBncmVhdGVyIHRoYW4gKG1heGltdW0gLSByYW5nZSkuIElmIHRoaXMgdGVzdCBmYWlscywgdGhlCisgKiBSZXRyeSBDb3VudGVyIGluIFNDTUlTQyB3aWxsIGJlIGRlY3JlbWVudGVkLCBhbmQgYSByZXRyeSB3aWxsIG9jY3VyIGlmIHRoZSBSZXRyeQorICogQ291bnQgaGFzIG5vdCByZWFjaGVkIHplcm8uIElmIHRoZSBSZXRyeSBDb3VudCBoYXMgcmVhY2hlZCB6ZXJvLCBhbiBlcnJvciB3aWxsCisgKiBiZSBnZW5lcmF0ZWQuIE5vdGUgdGhhdCB0aGlzIGFkZHJlc3MgKDB4QkFTRV8wNjI0KSBpcyB1c2VkIGFzIFNDUjFMIG9ubHkgaWYKKyAqIE1DVExbUFJHTV0gaXMgMS4gSWYgTUNUTFtQUkdNXSBpcyAwLCB0aGlzIGFkZHJlc3MgaXMgdXNlZCBhcyBTQ1IxQyByZWFkYmFjaworICogcmVnaXN0ZXIuCisgKi8KKy8qIQorICogQG5hbWUgQ29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIGVudGlyZSBUUk5HX1NDUjFMIHJlZ2lzdGVyCisgKi8KKy8qQHsqLworI2RlZmluZSBUUk5HX1NDUjFMX1JFRyhiYXNlKSAoKGJhc2UpLT5TQ1IxTCkKKyNkZWZpbmUgVFJOR19SRF9TQ1IxTChiYXNlKSAoVFJOR19TQ1IxTF9SRUcoYmFzZSkpCisjZGVmaW5lIFRSTkdfV1JfU0NSMUwoYmFzZSwgdmFsdWUpIChUUk5HX1NDUjFMX1JFRyhiYXNlKSA9ICh2YWx1ZSkpCisjZGVmaW5lIFRSTkdfUk1XX1NDUjFMKGJhc2UsIG1hc2ssIHZhbHVlKSAoVFJOR19XUl9TQ1IxTChiYXNlLCAoVFJOR19SRF9TQ1IxTChiYXNlKSAmIH4obWFzaykpIHwgKHZhbHVlKSkpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDUjFMLCBmaWVsZCBSVU4xX01BWFsxNDowXSAoUlcpCisgKgorICogUnVuIExlbmd0aCAxIE1heGltdW0gTGltaXQuIERlZmluZXMgdGhlIG1heGltdW0gYWxsb3dhYmxlIHJ1bnMgb2YgbGVuZ3RoIDEKKyAqIChmb3IgYm90aCAwIGFuZCAxKSBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiBUaGUgbnVtYmVyIG9mIHJ1bnMgb2YKKyAqIGxlbmd0aCAxIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24gbXVzdCBiZSBsZXNzIHRoYW4gUlVOMV9NQVgsIGVsc2UgYQorICogcmV0cnkgb3IgZXJyb3Igd2lsbCBvY2N1ci4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAxRTVoIChkZWNpbWFsIDQ4NSkgYnkKKyAqIHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NSMUxfUlVOMV9NQVggZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NSMUxfUlVOMV9NQVgoYmFzZSkgKChUUk5HX1NDUjFMX1JFRyhiYXNlKSAmIFRSTkdfU0NSMUxfUlVOMV9NQVhfTUFTSykgPj4gVFJOR19TQ1IxTF9SVU4xX01BWF9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFJVTjFfTUFYIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NDUjFMX1JVTjFfTUFYKGJhc2UsIHZhbHVlKSAoVFJOR19STVdfU0NSMUwoYmFzZSwgVFJOR19TQ1IxTF9SVU4xX01BWF9NQVNLLCBUUk5HX1NDUjFMX1JVTjFfTUFYKHZhbHVlKSkpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDUjFMLCBmaWVsZCBSVU4xX1JOR1szMDoxNl0gKFJXKQorICoKKyAqIFJ1biBMZW5ndGggMSBSYW5nZS4gVGhlIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAxIChmb3IgYm90aCAwIGFuZCAxKQorICogZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBSVU4xX01BWCAtIFJVTjFfUk5HLCBlbHNlIGEKKyAqIHJldHJ5IG9yIGVycm9yIHdpbGwgb2NjdXIuIFRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byAwMTAyaCAoZGVjaW1hbCAyNTgpIGJ5CisgKiB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NDUjFMX1JVTjFfUk5HIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NDUjFMX1JVTjFfUk5HKGJhc2UpICgoVFJOR19TQ1IxTF9SRUcoYmFzZSkgJiBUUk5HX1NDUjFMX1JVTjFfUk5HX01BU0spID4+IFRSTkdfU0NSMUxfUlVOMV9STkdfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBSVU4xX1JORyBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TQ1IxTF9SVU4xX1JORyhiYXNlLCB2YWx1ZSkgKFRSTkdfUk1XX1NDUjFMKGJhc2UsIFRSTkdfU0NSMUxfUlVOMV9STkdfTUFTSywgVFJOR19TQ1IxTF9SVU4xX1JORyh2YWx1ZSkpKQorLypAfSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUUk5HX1NDUjJMIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMiBMaW1pdCBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgVFJOR19TQ1IyTCAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDIgTGltaXQgUmVnaXN0ZXIgKFJXKQorICoKKyAqIFJlc2V0IHZhbHVlOiAweDAwN0EwMERDVQorICoKKyAqIFRoZSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAyIExpbWl0IFJlZ2lzdGVyIGRlZmluZXMgdGhlIGFsbG93YWJsZQorICogbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggMiBkZXRlY3RlZCBkdXJpbmcgZW50cm9weQorICogZ2VuZXJhdGlvbi4gVG8gcGFzcyB0aGUgdGVzdCwgdGhlIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAyIChmb3Igc2FtcGxlcyBvZiBib3RoIDAKKyAqIGFuZCAxKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgcHJvZ3JhbW1lZCBtYXhpbXVtIHZhbHVlLCBhbmQgdGhlIG51bWJlciBvZiBydW5zIG9mCisgKiBsZW5ndGggMiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAobWF4aW11bSAtIHJhbmdlKS4gSWYgdGhpcyB0ZXN0IGZhaWxzLCB0aGUKKyAqIFJldHJ5IENvdW50ZXIgaW4gU0NNSVNDIHdpbGwgYmUgZGVjcmVtZW50ZWQsIGFuZCBhIHJldHJ5IHdpbGwgb2NjdXIgaWYgdGhlIFJldHJ5CisgKiBDb3VudCBoYXMgbm90IHJlYWNoZWQgemVyby4gSWYgdGhlIFJldHJ5IENvdW50IGhhcyByZWFjaGVkIHplcm8sIGFuIGVycm9yIHdpbGwKKyAqIGJlIGdlbmVyYXRlZC4gTm90ZSB0aGF0IHRoaXMgYWRkcmVzcyAoMHhCQVNFXzA2MjgpIGlzIHVzZWQgYXMgU0NSMkwgb25seSBpZgorICogTUNUTFtQUkdNXSBpcyAxLiBJZiBNQ1RMW1BSR01dIGlzIDAsIHRoaXMgYWRkcmVzcyBpcyB1c2VkIGFzIFNDUjJDIHJlYWRiYWNrCisgKiByZWdpc3Rlci4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfU0NSMkwgcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfU0NSMkxfUkVHKGJhc2UpICgoYmFzZSktPlNDUjJMKQorI2RlZmluZSBUUk5HX1JEX1NDUjJMKGJhc2UpIChUUk5HX1NDUjJMX1JFRyhiYXNlKSkKKyNkZWZpbmUgVFJOR19XUl9TQ1IyTChiYXNlLCB2YWx1ZSkgKFRSTkdfU0NSMkxfUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfU0NSMkwoYmFzZSwgbWFzaywgdmFsdWUpIChUUk5HX1dSX1NDUjJMKGJhc2UsIChUUk5HX1JEX1NDUjJMKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworCisvKgorICogQ29uc3RhbnRzICYgbWFjcm9zIGZvciBpbmRpdmlkdWFsIFRSTkdfU0NSMkwgYml0ZmllbGRzCisgKi8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDUjJMLCBmaWVsZCBSVU4yX01BWFsxMzowXSAoUlcpCisgKgorICogUnVuIExlbmd0aCAyIE1heGltdW0gTGltaXQuIERlZmluZXMgdGhlIG1heGltdW0gYWxsb3dhYmxlIHJ1bnMgb2YgbGVuZ3RoIDIKKyAqIChmb3IgYm90aCAwIGFuZCAxKSBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiBUaGUgbnVtYmVyIG9mIHJ1bnMgb2YKKyAqIGxlbmd0aCAyIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24gbXVzdCBiZSBsZXNzIHRoYW4gUlVOMl9NQVgsIGVsc2UgYQorICogcmV0cnkgb3IgZXJyb3Igd2lsbCBvY2N1ci4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAwRENoIChkZWNpbWFsIDIyMCkgYnkKKyAqIHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NSMkxfUlVOMl9NQVggZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NSMkxfUlVOMl9NQVgoYmFzZSkgKChUUk5HX1NDUjJMX1JFRyhiYXNlKSAmIFRSTkdfU0NSMkxfUlVOMl9NQVhfTUFTSykgPj4gVFJOR19TQ1IyTF9SVU4yX01BWF9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFJVTjJfTUFYIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NDUjJMX1JVTjJfTUFYKGJhc2UsIHZhbHVlKSAoVFJOR19STVdfU0NSMkwoYmFzZSwgVFJOR19TQ1IyTF9SVU4yX01BWF9NQVNLLCBUUk5HX1NDUjJMX1JVTjJfTUFYKHZhbHVlKSkpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDUjJMLCBmaWVsZCBSVU4yX1JOR1syOToxNl0gKFJXKQorICoKKyAqIFJ1biBMZW5ndGggMiBSYW5nZS4gVGhlIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAyIChmb3IgYm90aCAwIGFuZCAxKQorICogZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBSVU4yX01BWCAtIFJVTjJfUk5HLCBlbHNlIGEKKyAqIHJldHJ5IG9yIGVycm9yIHdpbGwgb2NjdXIuIFRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byAwMDdBaCAoZGVjaW1hbCAxMjIpIGJ5CisgKiB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NDUjJMX1JVTjJfUk5HIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NDUjJMX1JVTjJfUk5HKGJhc2UpICgoVFJOR19TQ1IyTF9SRUcoYmFzZSkgJiBUUk5HX1NDUjJMX1JVTjJfUk5HX01BU0spID4+IFRSTkdfU0NSMkxfUlVOMl9STkdfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBSVU4yX1JORyBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TQ1IyTF9SVU4yX1JORyhiYXNlLCB2YWx1ZSkgKFRSTkdfUk1XX1NDUjJMKGJhc2UsIFRSTkdfU0NSMkxfUlVOMl9STkdfTUFTSywgVFJOR19TQ1IyTF9SVU4yX1JORyh2YWx1ZSkpKQorLypAfSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUUk5HX1NDUjNMIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMyBMaW1pdCBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgVFJOR19TQ1IzTCAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDMgTGltaXQgUmVnaXN0ZXIgKFJXKQorICoKKyAqIFJlc2V0IHZhbHVlOiAweDAwNTgwMDdEVQorICoKKyAqIFRoZSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAzIExpbWl0IFJlZ2lzdGVyIGRlZmluZXMgdGhlIGFsbG93YWJsZQorICogbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggMyBkZXRlY3RlZCBkdXJpbmcgZW50cm9weQorICogZ2VuZXJhdGlvbi4gVG8gcGFzcyB0aGUgdGVzdCwgdGhlIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAzIChmb3Igc2FtcGxlcyBvZiBib3RoIDAKKyAqIGFuZCAxKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgcHJvZ3JhbW1lZCBtYXhpbXVtIHZhbHVlLCBhbmQgdGhlIG51bWJlciBvZiBydW5zIG9mCisgKiBsZW5ndGggMyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAobWF4aW11bSAtIHJhbmdlKS4gSWYgdGhpcyB0ZXN0IGZhaWxzLCB0aGUKKyAqIFJldHJ5IENvdW50ZXIgaW4gU0NNSVNDIHdpbGwgYmUgZGVjcmVtZW50ZWQsIGFuZCBhIHJldHJ5IHdpbGwgb2NjdXIgaWYgdGhlIFJldHJ5CisgKiBDb3VudCBoYXMgbm90IHJlYWNoZWQgemVyby4gSWYgdGhlIFJldHJ5IENvdW50IGhhcyByZWFjaGVkIHplcm8sIGFuIGVycm9yIHdpbGwKKyAqIGJlIGdlbmVyYXRlZC4gTm90ZSB0aGF0IHRoaXMgYWRkcmVzcyAoMHhCQVNFXzA2MkMpIGlzIHVzZWQgYXMgU0NSM0wgb25seSBpZgorICogTUNUTFtQUkdNXSBpcyAxLiBJZiBNQ1RMW1BSR01dIGlzIDAsIHRoaXMgYWRkcmVzcyBpcyB1c2VkIGFzIFNDUjNDIHJlYWRiYWNrCisgKiByZWdpc3Rlci4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfU0NSM0wgcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfU0NSM0xfUkVHKGJhc2UpICgoYmFzZSktPlNDUjNMKQorI2RlZmluZSBUUk5HX1JEX1NDUjNMKGJhc2UpIChUUk5HX1NDUjNMX1JFRyhiYXNlKSkKKyNkZWZpbmUgVFJOR19XUl9TQ1IzTChiYXNlLCB2YWx1ZSkgKFRSTkdfU0NSM0xfUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfU0NSM0woYmFzZSwgbWFzaywgdmFsdWUpIChUUk5HX1dSX1NDUjNMKGJhc2UsIChUUk5HX1JEX1NDUjNMKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworCisvKgorICogQ29uc3RhbnRzICYgbWFjcm9zIGZvciBpbmRpdmlkdWFsIFRSTkdfU0NSM0wgYml0ZmllbGRzCisgKi8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDUjNMLCBmaWVsZCBSVU4zX01BWFsxMjowXSAoUlcpCisgKgorICogUnVuIExlbmd0aCAzIE1heGltdW0gTGltaXQuIERlZmluZXMgdGhlIG1heGltdW0gYWxsb3dhYmxlIHJ1bnMgb2YgbGVuZ3RoIDMKKyAqIChmb3IgYm90aCAwIGFuZCAxKSBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiBUaGUgbnVtYmVyIG9mIHJ1bnMgb2YKKyAqIGxlbmd0aCAzIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24gbXVzdCBiZSBsZXNzIHRoYW4gUlVOM19NQVgsIGVsc2UgYQorICogcmV0cnkgb3IgZXJyb3Igd2lsbCBvY2N1ci4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAwN0RoIChkZWNpbWFsIDEyNSkgYnkKKyAqIHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NSM0xfUlVOM19NQVggZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NSM0xfUlVOM19NQVgoYmFzZSkgKChUUk5HX1NDUjNMX1JFRyhiYXNlKSAmIFRSTkdfU0NSM0xfUlVOM19NQVhfTUFTSykgPj4gVFJOR19TQ1IzTF9SVU4zX01BWF9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFJVTjNfTUFYIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NDUjNMX1JVTjNfTUFYKGJhc2UsIHZhbHVlKSAoVFJOR19STVdfU0NSM0woYmFzZSwgVFJOR19TQ1IzTF9SVU4zX01BWF9NQVNLLCBUUk5HX1NDUjNMX1JVTjNfTUFYKHZhbHVlKSkpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDUjNMLCBmaWVsZCBSVU4zX1JOR1syODoxNl0gKFJXKQorICoKKyAqIFJ1biBMZW5ndGggMyBSYW5nZS4gVGhlIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAzIChmb3IgYm90aCAwIGFuZCAxKQorICogZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBSVU4zX01BWCAtIFJVTjNfUk5HLCBlbHNlIGEKKyAqIHJldHJ5IG9yIGVycm9yIHdpbGwgb2NjdXIuIFRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byAwMDU4aCAoZGVjaW1hbCA4OCkgYnkKKyAqIHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NSM0xfUlVOM19STkcgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NSM0xfUlVOM19STkcoYmFzZSkgKChUUk5HX1NDUjNMX1JFRyhiYXNlKSAmIFRSTkdfU0NSM0xfUlVOM19STkdfTUFTSykgPj4gVFJOR19TQ1IzTF9SVU4zX1JOR19TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFJVTjNfUk5HIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NDUjNMX1JVTjNfUk5HKGJhc2UsIHZhbHVlKSAoVFJOR19STVdfU0NSM0woYmFzZSwgVFJOR19TQ1IzTF9SVU4zX1JOR19NQVNLLCBUUk5HX1NDUjNMX1JVTjNfUk5HKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfU0NSNEwgLSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA0IExpbWl0IFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBUUk5HX1NDUjRMIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggNCBMaW1pdCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDA0MDAwNEJVCisgKgorICogVGhlIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDQgTGltaXQgUmVnaXN0ZXIgZGVmaW5lcyB0aGUgYWxsb3dhYmxlCisgKiBtYXhpbXVtIGFuZCBtaW5pbXVtIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCA0IGRldGVjdGVkIGR1cmluZyBlbnRyb3B5CisgKiBnZW5lcmF0aW9uLiBUbyBwYXNzIHRoZSB0ZXN0LCB0aGUgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDQgKGZvciBzYW1wbGVzIG9mIGJvdGggMAorICogYW5kIDEpIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBwcm9ncmFtbWVkIG1heGltdW0gdmFsdWUsIGFuZCB0aGUgbnVtYmVyIG9mIHJ1bnMgb2YKKyAqIGxlbmd0aCA0IG11c3QgYmUgZ3JlYXRlciB0aGFuIChtYXhpbXVtIC0gcmFuZ2UpLiBJZiB0aGlzIHRlc3QgZmFpbHMsIHRoZQorICogUmV0cnkgQ291bnRlciBpbiBTQ01JU0Mgd2lsbCBiZSBkZWNyZW1lbnRlZCwgYW5kIGEgcmV0cnkgd2lsbCBvY2N1ciBpZiB0aGUgUmV0cnkKKyAqIENvdW50IGhhcyBub3QgcmVhY2hlZCB6ZXJvLiBJZiB0aGUgUmV0cnkgQ291bnQgaGFzIHJlYWNoZWQgemVybywgYW4gZXJyb3Igd2lsbAorICogYmUgZ2VuZXJhdGVkLiBOb3RlIHRoYXQgdGhpcyBhZGRyZXNzICgweEJBU0VfMDYzMCkgaXMgdXNlZCBhcyBTQ1I0TCBvbmx5IGlmCisgKiBNQ1RMW1BSR01dIGlzIDEuIElmIE1DVExbUFJHTV0gaXMgMCwgdGhpcyBhZGRyZXNzIGlzIHVzZWQgYXMgU0NSNEMgcmVhZGJhY2sKKyAqIHJlZ2lzdGVyLgorICovCisvKiEKKyAqIEBuYW1lIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBlbnRpcmUgVFJOR19TQ1I0TCByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19TQ1I0TF9SRUcoYmFzZSkgKChiYXNlKS0+U0NSNEwpCisjZGVmaW5lIFRSTkdfUkRfU0NSNEwoYmFzZSkgKFRSTkdfU0NSNExfUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX1NDUjRMKGJhc2UsIHZhbHVlKSAoVFJOR19TQ1I0TF9SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19TQ1I0TChiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfU0NSNEwoYmFzZSwgKFRSTkdfUkRfU0NSNEwoYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qCisgKiBDb25zdGFudHMgJiBtYWNyb3MgZm9yIGluZGl2aWR1YWwgVFJOR19TQ1I0TCBiaXRmaWVsZHMKKyAqLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NSNEwsIGZpZWxkIFJVTjRfTUFYWzExOjBdIChSVykKKyAqCisgKiBSdW4gTGVuZ3RoIDQgTWF4aW11bSBMaW1pdC4gRGVmaW5lcyB0aGUgbWF4aW11bSBhbGxvd2FibGUgcnVucyBvZiBsZW5ndGggNAorICogKGZvciBib3RoIDAgYW5kIDEpIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uIFRoZSBudW1iZXIgb2YgcnVucyBvZgorICogbGVuZ3RoIDQgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiBSVU40X01BWCwgZWxzZSBhCisgKiByZXRyeSBvciBlcnJvciB3aWxsIG9jY3VyLiBUaGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gMDA0QmggKGRlY2ltYWwgNzUpIGJ5CisgKiB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NDUjRMX1JVTjRfTUFYIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NDUjRMX1JVTjRfTUFYKGJhc2UpICgoVFJOR19TQ1I0TF9SRUcoYmFzZSkgJiBUUk5HX1NDUjRMX1JVTjRfTUFYX01BU0spID4+IFRSTkdfU0NSNExfUlVONF9NQVhfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBSVU40X01BWCBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TQ1I0TF9SVU40X01BWChiYXNlLCB2YWx1ZSkgKFRSTkdfUk1XX1NDUjRMKGJhc2UsIFRSTkdfU0NSNExfUlVONF9NQVhfTUFTSywgVFJOR19TQ1I0TF9SVU40X01BWCh2YWx1ZSkpKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19TQ1I0TCwgZmllbGQgUlVONF9STkdbMjc6MTZdIChSVykKKyAqCisgKiBSdW4gTGVuZ3RoIDQgUmFuZ2UuIFRoZSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNCAoZm9yIGJvdGggMCBhbmQgMSkKKyAqIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gUlVONF9NQVggLSBSVU40X1JORywgZWxzZSBhCisgKiByZXRyeSBvciBlcnJvciB3aWxsIG9jY3VyLiBUaGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gMDA0MGggKGRlY2ltYWwgNjQpIGJ5CisgKiB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NDUjRMX1JVTjRfUk5HIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NDUjRMX1JVTjRfUk5HKGJhc2UpICgoVFJOR19TQ1I0TF9SRUcoYmFzZSkgJiBUUk5HX1NDUjRMX1JVTjRfUk5HX01BU0spID4+IFRSTkdfU0NSNExfUlVONF9STkdfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBSVU40X1JORyBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TQ1I0TF9SVU40X1JORyhiYXNlLCB2YWx1ZSkgKFRSTkdfUk1XX1NDUjRMKGJhc2UsIFRSTkdfU0NSNExfUlVONF9STkdfTUFTSywgVFJOR19TQ1I0TF9SVU40X1JORyh2YWx1ZSkpKQorLypAfSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUUk5HX1NDUjVMIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggNSBMaW1pdCBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgVFJOR19TQ1I1TCAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDUgTGltaXQgUmVnaXN0ZXIgKFJXKQorICoKKyAqIFJlc2V0IHZhbHVlOiAweDAwMkUwMDJGVQorICoKKyAqIFRoZSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA1IExpbWl0IFJlZ2lzdGVyIGRlZmluZXMgdGhlIGFsbG93YWJsZQorICogbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNSBkZXRlY3RlZCBkdXJpbmcgZW50cm9weQorICogZ2VuZXJhdGlvbi4gVG8gcGFzcyB0aGUgdGVzdCwgdGhlIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCA1IChmb3Igc2FtcGxlcyBvZiBib3RoIDAKKyAqIGFuZCAxKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgcHJvZ3JhbW1lZCBtYXhpbXVtIHZhbHVlLCBhbmQgdGhlIG51bWJlciBvZiBydW5zIG9mCisgKiBsZW5ndGggNSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAobWF4aW11bSAtIHJhbmdlKS4gSWYgdGhpcyB0ZXN0IGZhaWxzLCB0aGUKKyAqIFJldHJ5IENvdW50ZXIgaW4gU0NNSVNDIHdpbGwgYmUgZGVjcmVtZW50ZWQsIGFuZCBhIHJldHJ5IHdpbGwgb2NjdXIgaWYgdGhlIFJldHJ5CisgKiBDb3VudCBoYXMgbm90IHJlYWNoZWQgemVyby4gSWYgdGhlIFJldHJ5IENvdW50IGhhcyByZWFjaGVkIHplcm8sIGFuIGVycm9yIHdpbGwKKyAqIGJlIGdlbmVyYXRlZC4gTm90ZSB0aGF0IHRoaXMgYWRkcmVzcyAoMHhCQVNFXzA2MzQpIGlzIHVzZWQgYXMgU0NSNUwgb25seSBpZgorICogTUNUTFtQUkdNXSBpcyAxLiBJZiBNQ1RMW1BSR01dIGlzIDAsIHRoaXMgYWRkcmVzcyBpcyB1c2VkIGFzIFNDUjVDIHJlYWRiYWNrCisgKiByZWdpc3Rlci4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfU0NSNUwgcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfU0NSNUxfUkVHKGJhc2UpICgoYmFzZSktPlNDUjVMKQorI2RlZmluZSBUUk5HX1JEX1NDUjVMKGJhc2UpIChUUk5HX1NDUjVMX1JFRyhiYXNlKSkKKyNkZWZpbmUgVFJOR19XUl9TQ1I1TChiYXNlLCB2YWx1ZSkgKFRSTkdfU0NSNUxfUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfU0NSNUwoYmFzZSwgbWFzaywgdmFsdWUpIChUUk5HX1dSX1NDUjVMKGJhc2UsIChUUk5HX1JEX1NDUjVMKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworCisvKgorICogQ29uc3RhbnRzICYgbWFjcm9zIGZvciBpbmRpdmlkdWFsIFRSTkdfU0NSNUwgYml0ZmllbGRzCisgKi8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDUjVMLCBmaWVsZCBSVU41X01BWFsxMDowXSAoUlcpCisgKgorICogUnVuIExlbmd0aCA1IE1heGltdW0gTGltaXQuIERlZmluZXMgdGhlIG1heGltdW0gYWxsb3dhYmxlIHJ1bnMgb2YgbGVuZ3RoIDUKKyAqIChmb3IgYm90aCAwIGFuZCAxKSBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiBUaGUgbnVtYmVyIG9mIHJ1bnMgb2YKKyAqIGxlbmd0aCA1IGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24gbXVzdCBiZSBsZXNzIHRoYW4gUlVONV9NQVgsIGVsc2UgYQorICogcmV0cnkgb3IgZXJyb3Igd2lsbCBvY2N1ci4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAwMkZoIChkZWNpbWFsIDQ3KSBieQorICogd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TQ1I1TF9SVU41X01BWCBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TQ1I1TF9SVU41X01BWChiYXNlKSAoKFRSTkdfU0NSNUxfUkVHKGJhc2UpICYgVFJOR19TQ1I1TF9SVU41X01BWF9NQVNLKSA+PiBUUk5HX1NDUjVMX1JVTjVfTUFYX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgUlVONV9NQVggZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0NSNUxfUlVONV9NQVgoYmFzZSwgdmFsdWUpIChUUk5HX1JNV19TQ1I1TChiYXNlLCBUUk5HX1NDUjVMX1JVTjVfTUFYX01BU0ssIFRSTkdfU0NSNUxfUlVONV9NQVgodmFsdWUpKSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NSNUwsIGZpZWxkIFJVTjVfUk5HWzI2OjE2XSAoUlcpCisgKgorICogUnVuIExlbmd0aCA1IFJhbmdlLiBUaGUgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDUgKGZvciBib3RoIDAgYW5kIDEpCisgKiBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIFJVTjVfTUFYIC0gUlVONV9STkcsIGVsc2UgYQorICogcmV0cnkgb3IgZXJyb3Igd2lsbCBvY2N1ci4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAwMkVoIChkZWNpbWFsIDQ2KSBieQorICogd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TQ1I1TF9SVU41X1JORyBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TQ1I1TF9SVU41X1JORyhiYXNlKSAoKFRSTkdfU0NSNUxfUkVHKGJhc2UpICYgVFJOR19TQ1I1TF9SVU41X1JOR19NQVNLKSA+PiBUUk5HX1NDUjVMX1JVTjVfUk5HX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgUlVONV9STkcgZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0NSNUxfUlVONV9STkcoYmFzZSwgdmFsdWUpIChUUk5HX1JNV19TQ1I1TChiYXNlLCBUUk5HX1NDUjVMX1JVTjVfUk5HX01BU0ssIFRSTkdfU0NSNUxfUlVONV9STkcodmFsdWUpKSkKKy8qQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVFJOR19TQ1I2UEwgLSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA2KyBMaW1pdCBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgVFJOR19TQ1I2UEwgLSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA2KyBMaW1pdCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDAyRTAwMkZVCisgKgorICogVGhlIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDYrIExpbWl0IFJlZ2lzdGVyIGRlZmluZXMgdGhlIGFsbG93YWJsZQorICogbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNiBvciBtb3JlIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5CisgKiBnZW5lcmF0aW9uLiBUbyBwYXNzIHRoZSB0ZXN0LCB0aGUgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDYgb3IgbW9yZSAoZm9yCisgKiBzYW1wbGVzIG9mIGJvdGggMCBhbmQgMSkgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIHByb2dyYW1tZWQgbWF4aW11bSB2YWx1ZSwgYW5kIHRoZQorICogbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDYgb3IgbW9yZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAobWF4aW11bSAtIHJhbmdlKS4gSWYKKyAqIHRoaXMgdGVzdCBmYWlscywgdGhlIFJldHJ5IENvdW50ZXIgaW4gU0NNSVNDIHdpbGwgYmUgZGVjcmVtZW50ZWQsIGFuZCBhIHJldHJ5CisgKiB3aWxsIG9jY3VyIGlmIHRoZSBSZXRyeSBDb3VudCBoYXMgbm90IHJlYWNoZWQgemVyby4gSWYgdGhlIFJldHJ5IENvdW50IGhhcworICogcmVhY2hlZCB6ZXJvLCBhbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZC4gTm90ZSB0aGF0IHRoaXMgb2Zmc2V0ICgweEJBU0VfMDYzOCkgaXMKKyAqIHVzZWQgYXMgU0NSNlBMIG9ubHkgaWYgTUNUTFtQUkdNXSBpcyAxLiBJZiBNQ1RMW1BSR01dIGlzIDAsIHRoaXMgb2Zmc2V0IGlzCisgKiB1c2VkIGFzIFNDUjZQQyByZWFkYmFjayByZWdpc3Rlci4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfU0NSNlBMIHJlZ2lzdGVyCisgKi8KKy8qQHsqLworI2RlZmluZSBUUk5HX1NDUjZQTF9SRUcoYmFzZSkgKChiYXNlKS0+U0NSNlBMKQorI2RlZmluZSBUUk5HX1JEX1NDUjZQTChiYXNlKSAoVFJOR19TQ1I2UExfUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX1NDUjZQTChiYXNlLCB2YWx1ZSkgKFRSTkdfU0NSNlBMX1JFRyhiYXNlKSA9ICh2YWx1ZSkpCisjZGVmaW5lIFRSTkdfUk1XX1NDUjZQTChiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfU0NSNlBMKGJhc2UsIChUUk5HX1JEX1NDUjZQTChiYXNlKSAmIH4obWFzaykpIHwgKHZhbHVlKSkpCisvKkB9Ki8KKworLyoKKyAqIENvbnN0YW50cyAmIG1hY3JvcyBmb3IgaW5kaXZpZHVhbCBUUk5HX1NDUjZQTCBiaXRmaWVsZHMKKyAqLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NSNlBMLCBmaWVsZCBSVU42UF9NQVhbMTA6MF0gKFJXKQorICoKKyAqIFJ1biBMZW5ndGggNisgTWF4aW11bSBMaW1pdC4gRGVmaW5lcyB0aGUgbWF4aW11bSBhbGxvd2FibGUgcnVucyBvZiBsZW5ndGggNgorICogb3IgbW9yZSAoZm9yIGJvdGggMCBhbmQgMSkgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbi4gVGhlIG51bWJlciBvZgorICogcnVucyBvZiBsZW5ndGggNiBvciBtb3JlIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24gbXVzdCBiZSBsZXNzIHRoYW4KKyAqIFJVTjZQX01BWCwgZWxzZSBhIHJldHJ5IG9yIGVycm9yIHdpbGwgb2NjdXIuIFRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byAwMDJGaAorICogKGRlY2ltYWwgNDcpIGJ5IHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NSNlBMX1JVTjZQX01BWCBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TQ1I2UExfUlVONlBfTUFYKGJhc2UpIFwKKyAgICAoKFRSTkdfU0NSNlBMX1JFRyhiYXNlKSAmIFRSTkdfU0NSNlBMX1JVTjZQX01BWF9NQVNLKSA+PiBUUk5HX1NDUjZQTF9SVU42UF9NQVhfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBSVU42UF9NQVggZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0NSNlBMX1JVTjZQX01BWChiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19TQ1I2UEwoYmFzZSwgVFJOR19TQ1I2UExfUlVONlBfTUFYX01BU0ssIFRSTkdfU0NSNlBMX1JVTjZQX01BWCh2YWx1ZSkpKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19TQ1I2UEwsIGZpZWxkIFJVTjZQX1JOR1syNjoxNl0gKFJXKQorICoKKyAqIFJ1biBMZW5ndGggNisgUmFuZ2UuIFRoZSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNiBvciBtb3JlIChmb3IgYm90aCAwIGFuZAorICogMSkgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBSVU42UF9NQVggLQorICogUlVONlBfUk5HLCBlbHNlIGEgcmV0cnkgb3IgZXJyb3Igd2lsbCBvY2N1ci4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAwMkVoCisgKiAoZGVjaW1hbCA0NikgYnkgd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TQ1I2UExfUlVONlBfUk5HIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NDUjZQTF9SVU42UF9STkcoYmFzZSkgXAorICAgICgoVFJOR19TQ1I2UExfUkVHKGJhc2UpICYgVFJOR19TQ1I2UExfUlVONlBfUk5HX01BU0spID4+IFRSTkdfU0NSNlBMX1JVTjZQX1JOR19TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFJVTjZQX1JORyBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TQ1I2UExfUlVONlBfUk5HKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX1NDUjZQTChiYXNlLCBUUk5HX1NDUjZQTF9SVU42UF9STkdfTUFTSywgVFJOR19TQ1I2UExfUlVONlBfUk5HKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfUEtSTUFYIC0gUk5HIFBva2VyIE1heGltdW0gTGltaXQgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIFRSTkdfUEtSTUFYIC0gUk5HIFBva2VyIE1heGltdW0gTGltaXQgUmVnaXN0ZXIgKFJXKQorICoKKyAqIFJlc2V0IHZhbHVlOiAweDAwMDA2OTIwVQorICoKKyAqIFRoZSBSTkcgUG9rZXIgTWF4aW11bSBMaW1pdCBSZWdpc3RlciBkZWZpbmVzIE1heGltdW0gTGltaXQgYWxsb3dhYmxlIGR1cmluZworICogdGhlIFRSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgVGVzdC4gTm90ZSB0aGF0IHRoaXMgb2Zmc2V0ICgweEJBU0VfMDYwQykgaXMKKyAqIHVzZWQgYXMgUEtSTUFYIG9ubHkgaWYgTUNUTFtQUkdNXSBpcyAxLiBJZiBNQ1RMW1BSR01dIGlzIDAsIHRoaXMgb2Zmc2V0IGlzIHVzZWQKKyAqIGFzIHRoZSBQS1JTUSByZWFkYmFjayByZWdpc3Rlci4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfUEtSTUFYIHJlZ2lzdGVyCisgKi8KKy8qQHsqLworI2RlZmluZSBUUk5HX1BLUk1BWF9SRUcoYmFzZSkgKChiYXNlKS0+UEtSTUFYKQorI2RlZmluZSBUUk5HX1JEX1BLUk1BWChiYXNlKSAoVFJOR19QS1JNQVhfUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX1BLUk1BWChiYXNlLCB2YWx1ZSkgKFRSTkdfUEtSTUFYX1JFRyhiYXNlKSA9ICh2YWx1ZSkpCisjZGVmaW5lIFRSTkdfUk1XX1BLUk1BWChiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfUEtSTUFYKGJhc2UsIChUUk5HX1JEX1BLUk1BWChiYXNlKSAmIH4obWFzaykpIHwgKHZhbHVlKSkpCisvKkB9Ki8KKworLyoKKyAqIENvbnN0YW50cyAmIG1hY3JvcyBmb3IgaW5kaXZpZHVhbCBUUk5HX1BLUk1BWCBiaXRmaWVsZHMKKyAqLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfUEtSTUFYLCBmaWVsZCBQS1JfTUFYWzIzOjBdIChSVykKKyAqCisgKiBQb2tlciBNYXhpbXVtIExpbWl0LiBEdXJpbmcgdGhlIFRSTkcgU3RhdGlzdGljYWwgQ2hlY2tzLCBhICJQb2tlciBUZXN0IiBpcworICogcnVuIHdoaWNoIHJlcXVpcmVzIGEgbWF4aW11bSBhbmQgbWluaW11bSBsaW1pdC4gVGhlIG1heGltdW0gYWxsb3dhYmxlIHJlc3VsdCBpcworICogcHJvZ3JhbW1lZCBpbiB0aGUgUEtSTUFYW1BLUl9NQVhdIHJlZ2lzdGVyLiBUaGlzIGZpZWxkIGlzIHdyaXRhYmxlIG9ubHkgaWYKKyAqIE1DVExbUFJHTV0gYml0IGlzIDEuIFRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byAwMDY5MjBoIChkZWNpbWFsIDI2OTEyKSBieQorICogd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4gTm90ZSB0aGF0IHRoZSBQS1JNQVggYW5kIFBLUlJORyByZWdpc3RlcnMKKyAqIGNvbWJpbmVkIGFyZSB1c2VkIHRvIGRlZmluZSB0aGUgbWluaW11bSBhbGxvd2FibGUgUG9rZXIgcmVzdWx0LCB3aGljaCBpcyBQS1JfTUFYIC0KKyAqIFBLUl9STkcgKyAxLiBOb3RlIHRoYXQgaWYgTUNUTFtQUkdNXSBiaXQgaXMgMCwgdGhpcyByZWdpc3RlciBhZGRyZXNzIGlzIHVzZWQKKyAqIHRvIHJlYWQgdGhlIFBva2VyIFRlc3QgU3F1YXJlIENhbGN1bGF0aW9uIHJlc3VsdCBpbiByZWdpc3RlciBQS1JTUSwgYXMgZGVmaW5lZAorICogaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1BLUk1BWF9QS1JfTUFYIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1BLUk1BWF9QS1JfTUFYKGJhc2UpICgoVFJOR19QS1JNQVhfUkVHKGJhc2UpICYgVFJOR19QS1JNQVhfUEtSX01BWF9NQVNLKSA+PiBUUk5HX1BLUk1BWF9QS1JfTUFYX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgUEtSX01BWCBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9QS1JNQVhfUEtSX01BWChiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19QS1JNQVgoYmFzZSwgVFJOR19QS1JNQVhfUEtSX01BWF9NQVNLLCBUUk5HX1BLUk1BWF9QS1JfTUFYKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfUEtSUk5HIC0gUk5HIFBva2VyIFJhbmdlIFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBUUk5HX1BLUlJORyAtIFJORyBQb2tlciBSYW5nZSBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDAwMDA5QTNVCisgKgorICogVGhlIFJORyBQb2tlciBSYW5nZSBSZWdpc3RlciBkZWZpbmVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIFRSTkcgUG9rZXIKKyAqIE1heGltdW0gTGltaXQgYW5kIHRoZSBtaW5pbXVtIGxpbWl0LiBUaGVzZSBsaW1pdHMgYXJlIHVzZWQgZHVyaW5nIHRoZSBUUk5HCisgKiBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBUZXN0LgorICovCisvKiEKKyAqIEBuYW1lIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBlbnRpcmUgVFJOR19QS1JSTkcgcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfUEtSUk5HX1JFRyhiYXNlKSAoKGJhc2UpLT5QS1JSTkcpCisjZGVmaW5lIFRSTkdfUkRfUEtSUk5HKGJhc2UpIChUUk5HX1BLUlJOR19SRUcoYmFzZSkpCisjZGVmaW5lIFRSTkdfV1JfUEtSUk5HKGJhc2UsIHZhbHVlKSAoVFJOR19QS1JSTkdfUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfUEtSUk5HKGJhc2UsIG1hc2ssIHZhbHVlKSAoVFJOR19XUl9QS1JSTkcoYmFzZSwgKFRSTkdfUkRfUEtSUk5HKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworCisvKgorICogQ29uc3RhbnRzICYgbWFjcm9zIGZvciBpbmRpdmlkdWFsIFRSTkdfUEtSUk5HIGJpdGZpZWxkcworICovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19QS1JSTkcsIGZpZWxkIFBLUl9STkdbMTU6MF0gKFJXKQorICoKKyAqIFBva2VyIFJhbmdlLiBEdXJpbmcgdGhlIFRSTkcgU3RhdGlzdGljYWwgQ2hlY2tzLCBhICJQb2tlciBUZXN0IiBpcyBydW4gd2hpY2gKKyAqIHJlcXVpcmVzIGEgbWF4aW11bSBhbmQgbWluaW11bSBsaW1pdC4gVGhlIG1heGltdW0gaXMgcHJvZ3JhbW1lZCBpbiB0aGUKKyAqIFJUUEtSTUFYW1BLUl9NQVhdIHJlZ2lzdGVyLCBhbmQgdGhlIG1pbmltdW0gaXMgZGVyaXZlZCBieSBzdWJ0cmFjdGluZyB0aGUgUEtSX1JORworICogdmFsdWUgZnJvbSB0aGUgcHJvZ3JhbW1lZCBtYXhpbXVtIHZhbHVlLiBUaGlzIGZpZWxkIGlzIHdyaXRhYmxlIG9ubHkgaWYKKyAqIE1DVExbUFJHTV0gYml0IGlzIDEuIFRoaXMgZmllbGQgd2lsbCByZWFkIHplcm9lcyBpZiBNQ1RMW1BSR01dID0gMC4gVGhpcyBmaWVsZCBpcworICogY2xlYXJlZCB0byAwOUEzaCAoZGVjaW1hbCAyNDY3KSBieSB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLiBOb3RlIHRoYXQKKyAqIHRoZSBtaW5pbXVtIGFsbG93YWJsZSBQb2tlciByZXN1bHQgaXMgUEtSX01BWCAtIFBLUl9STkcgKyAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1BLUlJOR19QS1JfUk5HIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1BLUlJOR19QS1JfUk5HKGJhc2UpICgoVFJOR19QS1JSTkdfUkVHKGJhc2UpICYgVFJOR19QS1JSTkdfUEtSX1JOR19NQVNLKSA+PiBUUk5HX1BLUlJOR19QS1JfUk5HX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgUEtSX1JORyBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9QS1JSTkdfUEtSX1JORyhiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19QS1JSTkcoYmFzZSwgVFJOR19QS1JSTkdfUEtSX1JOR19NQVNLLCBUUk5HX1BLUlJOR19QS1JfUk5HKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfRlJRTUFYIC0gUk5HIEZyZXF1ZW5jeSBDb3VudCBNYXhpbXVtIExpbWl0IFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBUUk5HX0ZSUU1BWCAtIFJORyBGcmVxdWVuY3kgQ291bnQgTWF4aW11bSBMaW1pdCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDAwMDY0MDBVCisgKgorICogVGhlIFJORyBGcmVxdWVuY3kgQ291bnQgTWF4aW11bSBMaW1pdCBSZWdpc3RlciBkZWZpbmVzIHRoZSBtYXhpbXVtIGFsbG93YWJsZQorICogY291bnQgdGFrZW4gYnkgdGhlIEVudHJvcHkgc2FtcGxlIGNvdW50ZXIgZHVyaW5nIGVhY2ggRW50cm9weSBzYW1wbGUuIER1cmluZworICogYW55IHNhbXBsZSBwZXJpb2QsIGlmIHRoZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gdGhpcyBwcm9ncmFtbWVkIG1heGltdW0sIGEKKyAqIEZyZXF1ZW5jeSBDb3VudCBGYWlsIGlzIGZsYWdnZWQgaW4gTUNUTFtGQ1RfRkFJTF0gYW5kIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4gTm90ZQorICogdGhhdCB0aGlzIGFkZHJlc3MgKDA2MUMpIGlzIHVzZWQgYXMgRlJRTUFYIG9ubHkgaWYgTUNUTFtQUkdNXSBpcyAxLiBJZgorICogTUNUTFtQUkdNXSBpcyAwLCB0aGlzIGFkZHJlc3MgaXMgdXNlZCBhcyBGUlFDTlQgcmVhZGJhY2sgcmVnaXN0ZXIuCisgKi8KKy8qIQorICogQG5hbWUgQ29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIGVudGlyZSBUUk5HX0ZSUU1BWCByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19GUlFNQVhfUkVHKGJhc2UpICgoYmFzZSktPkZSUU1BWCkKKyNkZWZpbmUgVFJOR19SRF9GUlFNQVgoYmFzZSkgKFRSTkdfRlJRTUFYX1JFRyhiYXNlKSkKKyNkZWZpbmUgVFJOR19XUl9GUlFNQVgoYmFzZSwgdmFsdWUpIChUUk5HX0ZSUU1BWF9SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19GUlFNQVgoYmFzZSwgbWFzaywgdmFsdWUpIChUUk5HX1dSX0ZSUU1BWChiYXNlLCAoVFJOR19SRF9GUlFNQVgoYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qCisgKiBDb25zdGFudHMgJiBtYWNyb3MgZm9yIGluZGl2aWR1YWwgVFJOR19GUlFNQVggYml0ZmllbGRzCisgKi8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX0ZSUU1BWCwgZmllbGQgRlJRX01BWFsyMTowXSAoUlcpCisgKgorICogRnJlcXVlbmN5IENvdW50ZXIgTWF4aW11bSBMaW1pdC4gRGVmaW5lcyB0aGUgbWF4aW11bSBhbGxvd2FibGUgY291bnQgdGFrZW4KKyAqIGR1cmluZyBlYWNoIGVudHJvcHkgc2FtcGxlLiBUaGlzIGZpZWxkIGlzIHdyaXRhYmxlIG9ubHkgaWYgTUNUTFtQUkdNXSBiaXQgaXMgMS4KKyAqIFRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byAwMDA2NDBoIGJ5IHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKiBOb3RlIHRoYXQgaWYgTUNUTFtQUkdNXSBiaXQgaXMgMCwgdGhpcyByZWdpc3RlciBhZGRyZXNzIGlzIHVzZWQgdG8gcmVhZCB0aGUKKyAqIEZyZXF1ZW5jeSBDb3VudCByZXN1bHQgaW4gcmVnaXN0ZXIgRlJRQ05ULCBhcyBkZWZpbmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19GUlFNQVhfRlJRX01BWCBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9GUlFNQVhfRlJRX01BWChiYXNlKSAoKFRSTkdfRlJRTUFYX1JFRyhiYXNlKSAmIFRSTkdfRlJRTUFYX0ZSUV9NQVhfTUFTSykgPj4gVFJOR19GUlFNQVhfRlJRX01BWF9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIEZSUV9NQVggZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfRlJRTUFYX0ZSUV9NQVgoYmFzZSwgdmFsdWUpIFwKKyAgICAoVFJOR19STVdfRlJRTUFYKGJhc2UsIFRSTkdfRlJRTUFYX0ZSUV9NQVhfTUFTSywgVFJOR19GUlFNQVhfRlJRX01BWCh2YWx1ZSkpKQorLypAfSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUUk5HX0ZSUU1JTiAtIFJORyBGcmVxdWVuY3kgQ291bnQgTWluaW11bSBMaW1pdCBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgVFJOR19GUlFNSU4gLSBSTkcgRnJlcXVlbmN5IENvdW50IE1pbmltdW0gTGltaXQgUmVnaXN0ZXIgKFJXKQorICoKKyAqIFJlc2V0IHZhbHVlOiAweDAwMDAwNjQwVQorICoKKyAqIFRoZSBSTkcgRnJlcXVlbmN5IENvdW50IE1pbmltdW0gTGltaXQgUmVnaXN0ZXIgZGVmaW5lcyB0aGUgbWluaW11bSBhbGxvd2FibGUKKyAqIGNvdW50IHRha2VuIGJ5IHRoZSBFbnRyb3B5IHNhbXBsZSBjb3VudGVyIGR1cmluZyBlYWNoIEVudHJvcHkgc2FtcGxlLiBEdXJpbmcKKyAqIGFueSBzYW1wbGUgcGVyaW9kLCBpZiB0aGUgY291bnQgaXMgbGVzcyB0aGFuIHRoaXMgcHJvZ3JhbW1lZCBtaW5pbXVtLCBhCisgKiBGcmVxdWVuY3kgQ291bnQgRmFpbCBpcyBmbGFnZ2VkIGluIE1DVExbRkNUX0ZBSUxdIGFuZCBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuCisgKi8KKy8qIQorICogQG5hbWUgQ29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIGVudGlyZSBUUk5HX0ZSUU1JTiByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19GUlFNSU5fUkVHKGJhc2UpICgoYmFzZSktPkZSUU1JTikKKyNkZWZpbmUgVFJOR19SRF9GUlFNSU4oYmFzZSkgKFRSTkdfRlJRTUlOX1JFRyhiYXNlKSkKKyNkZWZpbmUgVFJOR19XUl9GUlFNSU4oYmFzZSwgdmFsdWUpIChUUk5HX0ZSUU1JTl9SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19GUlFNSU4oYmFzZSwgbWFzaywgdmFsdWUpIChUUk5HX1dSX0ZSUU1JTihiYXNlLCAoVFJOR19SRF9GUlFNSU4oYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qCisgKiBDb25zdGFudHMgJiBtYWNyb3MgZm9yIGluZGl2aWR1YWwgVFJOR19GUlFNSU4gYml0ZmllbGRzCisgKi8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX0ZSUU1JTiwgZmllbGQgRlJRX01JTlsyMTowXSAoUlcpCisgKgorICogRnJlcXVlbmN5IENvdW50IE1pbmltdW0gTGltaXQuIERlZmluZXMgdGhlIG1pbmltdW0gYWxsb3dhYmxlIGNvdW50IHRha2VuCisgKiBkdXJpbmcgZWFjaCBlbnRyb3B5IHNhbXBsZS4gVGhpcyBmaWVsZCBpcyB3cml0YWJsZSBvbmx5IGlmIE1DVExbUFJHTV0gYml0IGlzIDEuCisgKiBUaGlzIGZpZWxkIHdpbGwgcmVhZCB6ZXJvZXMgaWYgTUNUTFtQUkdNXSA9IDAuIFRoaXMgZmllbGQgaXMgY2xlYXJlZCB0byAwMDAwaDY0CisgKiBieSB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX0ZSUU1JTl9GUlFfTUlOIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX0ZSUU1JTl9GUlFfTUlOKGJhc2UpICgoVFJOR19GUlFNSU5fUkVHKGJhc2UpICYgVFJOR19GUlFNSU5fRlJRX01JTl9NQVNLKSA+PiBUUk5HX0ZSUU1JTl9GUlFfTUlOX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgRlJRX01JTiBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9GUlFNSU5fRlJRX01JTihiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19GUlFNSU4oYmFzZSwgVFJOR19GUlFNSU5fRlJRX01JTl9NQVNLLCBUUk5HX0ZSUU1JTl9GUlFfTUlOKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfTUNUTCAtIFJORyBNaXNjZWxsYW5lb3VzIENvbnRyb2wgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIFRSTkdfTUNUTCAtIFJORyBNaXNjZWxsYW5lb3VzIENvbnRyb2wgUmVnaXN0ZXIgKFJXKQorICoKKyAqIFJlc2V0IHZhbHVlOiAweDAwMDEyMDAxVQorICoKKyAqIFRoaXMgcmVnaXN0ZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgcHJvZ3JhbW1pbmcsIGNvbmZpZ3VyaW5nIGFuZCB0ZXN0aW5nCisgKiB0aGUgUk5HLiBJdCBpcyB0aGUgbWFpbiByZWdpc3RlciB0byByZWFkL3dyaXRlLCBpbiBvcmRlciB0byBlbmFibGUgRW50cm9weQorICogZ2VuZXJhdGlvbiwgdG8gc3RvcCBlbnRyb3B5IGdlbmVyYXRpb24gYW5kIHRvIGJsb2NrIGFjY2VzcyB0byBlbnRyb3B5IHJlZ2lzdGVycy4KKyAqIFRoaXMgaXMgZG9uZSB2aWEgdGhlIHNwZWNpYWwgVFJOR19BQ0MgYW5kIFBSR00gYml0cyBiZWxvdy4gVGhlIFJORworICogTWlzY2VsbGFuZW91cyBDb250cm9sIFJlZ2lzdGVyIGlzIGEgcmVhZC93cml0ZSByZWdpc3RlciB1c2VkIHRvIGNvbnRyb2wgdGhlIFJORydzIFRydWUKKyAqIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChUUk5HKSBhY2Nlc3MsIG9wZXJhdGlvbiBhbmQgdGVzdC4gTm90ZSB0aGF0IGluIG1hbnkKKyAqIGNhc2VzIHR3byBSTkcgcmVnaXN0ZXJzIHNoYXJlIHRoZSBzYW1lIGFkZHJlc3MsIGFuZCBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIgYXQgdGhlCisgKiBzaGFyZWQgYWRkcmVzcyBpcyBzZWxlY3RlZCBiYXNlZCB1cG9uIHRoZSB2YWx1ZSBpbiB0aGUgUFJHTSBmaWVsZCBvZiB0aGUgTUNUTAorICogcmVnaXN0ZXIuCisgKi8KKy8qIQorICogQG5hbWUgQ29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIGVudGlyZSBUUk5HX01DVEwgcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfTUNUTF9SRUcoYmFzZSkgKChiYXNlKS0+TUNUTCkKKyNkZWZpbmUgVFJOR19SRF9NQ1RMKGJhc2UpIChUUk5HX01DVExfUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX01DVEwoYmFzZSwgdmFsdWUpIChUUk5HX01DVExfUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfTUNUTChiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfTUNUTChiYXNlLCAoVFJOR19SRF9NQ1RMKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfTUNUTCwgZmllbGQgRk9SX1NDTEtbN10gKFJXKQorICoKKyAqIEZvcmNlIFN5c3RlbSBDbG9jay4gSWYgc2V0LCB0aGUgc3lzdGVtIGNsb2NrIGlzIHVzZWQgdG8gb3BlcmF0ZSB0aGUgVFJORywKKyAqIGluc3RlYWQgb2YgdGhlIHJpbmcgb3NjaWxsYXRvci4gVGhpcyBpcyBmb3IgdGVzdCB1c2Ugb25seSwgYW5kIGluZGV0ZXJtaW5hdGUKKyAqIHJlc3VsdHMgbWF5IG9jY3VyLiBUaGlzIGJpdCBpcyB3cml0YWJsZSBvbmx5IGlmIFBSR00gYml0IGlzIDEsIG9yIFBSR00gYml0IGlzCisgKiBiZWluZyB3cml0dGVuIHRvIDEgc2ltdWx0YW5lb3VzbHkgdG8gd3JpdGluZyB0aGlzIGJpdC4gVGhpcyBiaXQgaXMgY2xlYXJlZCBieQorICogd3JpdGluZyB0aGUgUlNUX0RFRiBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19NQ1RMX0ZPUl9TQ0xLIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX01DVExfRk9SX1NDTEsoYmFzZSkgKChUUk5HX01DVExfUkVHKGJhc2UpICYgVFJOR19NQ1RMX0ZPUl9TQ0xLX01BU0spID4+IFRSTkdfTUNUTF9GT1JfU0NMS19TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIEZPUl9TQ0xLIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX01DVExfRk9SX1NDTEsoYmFzZSwgdmFsdWUpIFwKKyAgICAoVFJOR19STVdfTUNUTChiYXNlLCAoVFJOR19NQ1RMX0ZPUl9TQ0xLX01BU0sgfCBUUk5HX01DVExfRVJSX01BU0spLCBUUk5HX01DVExfRk9SX1NDTEsodmFsdWUpKSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfTUNUTCwgZmllbGQgT1NDX0RJVlszOjJdIChSVykKKyAqCisgKiBPc2NpbGxhdG9yIERpdmlkZS4gRGV0ZXJtaW5lcyB0aGUgYW1vdW50IG9mIGRpdmlkaW5nIGRvbmUgdG8gdGhlIHJpbmcKKyAqIG9zY2lsbGF0b3IgYmVmb3JlIGl0IGlzIHVzZWQgYnkgdGhlIFRSTkcuVGhpcyBmaWVsZCBpcyB3cml0YWJsZSBvbmx5IGlmIFBSR00gYml0IGlzCisgKiAxLCBvciBQUkdNIGJpdCBpcyBiZWluZyB3cml0dGVuIHRvIDEgc2ltdWx0YW5lb3VzbHkgdG8gd3JpdGluZyB0aGlzIGZpZWxkLiBUaGlzCisgKiBmaWVsZCBpcyBjbGVhcmVkIHRvIDAwIGJ5IHdyaXRpbmcgdGhlIFJTVF9ERUYgYml0IHRvIDEuCisgKgorICogVmFsdWVzOgorICogLSAwYjAwIC0gdXNlIHJpbmcgb3NjaWxsYXRvciB3aXRoIG5vIGRpdmlkZQorICogLSAwYjAxIC0gdXNlIHJpbmcgb3NjaWxsYXRvciBkaXZpZGVkLWJ5LTIKKyAqIC0gMGIxMCAtIHVzZSByaW5nIG9zY2lsbGF0b3IgZGl2aWRlZC1ieS00CisgKiAtIDBiMTEgLSB1c2UgcmluZyBvc2NpbGxhdG9yIGRpdmlkZWQtYnktOAorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX01DVExfT1NDX0RJViBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9NQ1RMX09TQ19ESVYoYmFzZSkgKChUUk5HX01DVExfUkVHKGJhc2UpICYgVFJOR19NQ1RMX09TQ19ESVZfTUFTSykgPj4gVFJOR19NQ1RMX09TQ19ESVZfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBPU0NfRElWIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX01DVExfT1NDX0RJVihiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19NQ1RMKGJhc2UsIChUUk5HX01DVExfT1NDX0RJVl9NQVNLIHwgVFJOR19NQ1RMX0VSUl9NQVNLKSwgVFJOR19NQ1RMX09TQ19ESVYodmFsdWUpKSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfTUNUTCwgZmllbGQgU0FNUF9NT0RFWzE6MF0gKFJXKQorICoKKyAqIFNhbXBsZSBNb2RlLiBEZXRlcm1pbmVzIHRoZSBtZXRob2Qgb2Ygc2FtcGxpbmcgdGhlIHJpbmcgb3NjaWxsYXRvciB3aGlsZQorICogZ2VuZXJhdGluZyB0aGUgRW50cm9weSB2YWx1ZTpUaGlzIGZpZWxkIGlzIHdyaXRhYmxlIG9ubHkgaWYgUFJHTSBiaXQgaXMgMSwgb3IgUFJHTQorICogYml0IGlzIGJlaW5nIHdyaXR0ZW4gdG8gMSBzaW11bHRhbmVvdXNseSB3aXRoIHdyaXRpbmcgdGhpcyBmaWVsZC4gVGhpcyBmaWVsZAorICogaXMgY2xlYXJlZCB0byAwMSBieSB3cml0aW5nIHRoZSBSU1RfREVGIGJpdCB0byAxLgorICoKKyAqIFZhbHVlczoKKyAqIC0gMGIwMCAtIHVzZSBWb24gTmV1bWFubiBkYXRhIGludG8gYm90aCBFbnRyb3B5IHNoaWZ0ZXIgYW5kIFN0YXRpc3RpY2FsCisgKiAgICAgQ2hlY2tlcgorICogLSAwYjAxIC0gdXNlIHJhdyBkYXRhIGludG8gYm90aCBFbnRyb3B5IHNoaWZ0ZXIgYW5kIFN0YXRpc3RpY2FsIENoZWNrZXIKKyAqIC0gMGIxMCAtIHVzZSBWb24gTmV1bWFubiBkYXRhIGludG8gRW50cm9weSBzaGlmdGVyLiBVc2UgcmF3IGRhdGEgaW50bworICogICAgIFN0YXRpc3RpY2FsIENoZWNrZXIKKyAqIC0gMGIxMSAtIHJlc2VydmVkLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX01DVExfU0FNUF9NT0RFIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX01DVExfU0FNUF9NT0RFKGJhc2UpICgoVFJOR19NQ1RMX1JFRyhiYXNlKSAmIFRSTkdfTUNUTF9TQU1QX01PREVfTUFTSykgPj4gVFJOR19NQ1RMX1NBTVBfTU9ERV9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFNBTVBfTU9ERSBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9NQ1RMX1NBTVBfTU9ERShiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19NQ1RMKGJhc2UsIChUUk5HX01DVExfU0FNUF9NT0RFX01BU0sgfCBUUk5HX01DVExfRVJSX01BU0spLCBUUk5HX01DVExfU0FNUF9NT0RFKHZhbHVlKSkpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX01DVEwsIGZpZWxkIFBSR01bMTZdIChSVykKKyAqCisgKiBQcm9ncmFtbWluZyBNb2RlIFNlbGVjdC4gV2hlbiB0aGlzIGJpdCBpcyAxLCB0aGUgVFJORyBpcyBpbiBQcm9ncmFtIE1vZGUsCisgKiBvdGhlcndpc2UgaXQgaXMgaW4gUnVuIE1vZGUuIE5vIEVudHJvcHkgdmFsdWUgd2lsbCBiZSBnZW5lcmF0ZWQgd2hpbGUgdGhlIFRSTkcgaXMKKyAqIGluIFByb2dyYW0gTW9kZS4gTm90ZSB0aGF0IGRpZmZlcmVudCBSTkcgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NpYmxlIGF0IHRoZSBzYW1lCisgKiBhZGRyZXNzIGRlcGVuZGluZyBvbiB3aGV0aGVyIFBSR00gaXMgc2V0IHRvIDEgb3IgMC4gVGhpcyBpcyBub3RlZCBpbiB0aGUgUk5HCisgKiByZWdpc3RlciBkZXNjcmlwdGlvbnMuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfTUNUTF9QUkdNIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX01DVExfUFJHTShiYXNlKSAoKFRSTkdfTUNUTF9SRUcoYmFzZSkgJiBUUk5HX01DVExfUFJHTV9NQVNLKSA+PiBUUk5HX01DVExfUFJHTV9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFBSR00gZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfTUNUTF9QUkdNKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX01DVEwoYmFzZSwgKFRSTkdfTUNUTF9QUkdNX01BU0sgfCBUUk5HX01DVExfRVJSX01BU0spLCBUUk5HX01DVExfUFJHTSh2YWx1ZSkpKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19NQ1RMLCBmaWVsZCBSU1RfREVGWzZdIChXTykKKyAqCisgKiBSZXNldCBEZWZhdWx0cy4gV3JpdGluZyBhIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHZhcmlvdXMgVFJORyByZWdpc3RlcnMsIGFuZAorICogYml0cyB3aXRoaW4gcmVnaXN0ZXJzLCB0byB0aGVpciBkZWZhdWx0IHN0YXRlLiBUaGlzIGJpdCBpcyB3cml0YWJsZSBvbmx5IGlmIFBSR00KKyAqIGJpdCBpcyAxLCBvciBQUkdNIGJpdCBpcyBiZWluZyB3cml0dGVuIHRvIDEgc2ltdWx0YW5lb3VzbHkgdG8gd3JpdGluZyB0aGlzCisgKiBiaXQuIFJlYWRpbmcgdGhpcyBiaXQgYWx3YXlzIHByb2R1Y2VzIGEgMC4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFNldCB0aGUgUlNUX0RFRiBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9NQ1RMX1JTVF9ERUYoYmFzZSwgdmFsdWUpIFwKKyAgICAoVFJOR19STVdfTUNUTChiYXNlLCAoVFJOR19NQ1RMX1JTVF9ERUZfTUFTSyB8IFRSTkdfTUNUTF9FUlJfTUFTSyksIFRSTkdfTUNUTF9SU1RfREVGKHZhbHVlKSkpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX01DVEwsIGZpZWxkIFRSTkdfQUNDWzVdIChSVykKKyAqCisgKiBUUk5HIEFjY2VzcyBNb2RlLiBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgdGhlIFRSTkcgd2lsbCBnZW5lcmF0ZSBhbiBFbnRyb3B5CisgKiB2YWx1ZSB0aGF0IGNhbiBiZSByZWFkIHZpYSB0aGUgRU5UMC1FTlQxNSByZWdpc3RlcnMuIFRoZSBFbnRyb3B5IHZhbHVlIG1heSBiZQorICogcmVhZCBvbmNlIHRoZSBFTlQgVkFMIGJpdCBpcyBhc3NlcnRlZC4gQWxzbyBzZWUgRU5UYSByZWdpc3RlciBkZXNjcmlwdGlvbnMKKyAqIChGb3IgYSA9IDAgdG8gMTUpLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX01DVExfVFJOR19BQ0MgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfTUNUTF9UUk5HX0FDQyhiYXNlKSAoKFRSTkdfTUNUTF9SRUcoYmFzZSkgJiBUUk5HX01DVExfVFJOR19BQ0NfTUFTSykgPj4gVFJOR19NQ1RMX1RSTkdfQUNDX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgVFJOR19BQ0MgZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfTUNUTF9UUk5HX0FDQyhiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19NQ1RMKGJhc2UsIChUUk5HX01DVExfVFJOR19BQ0NfTUFTSyB8IFRSTkdfTUNUTF9FUlJfTUFTSyksIFRSTkdfTUNUTF9UUk5HX0FDQyh2YWx1ZSkpKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19NQ1RMLCBmaWVsZCBUU1RPUF9PS1sxM10gKFJPKQorICoKKyAqIFRSTkdfT0tfVE9fU1RPUC4gU29mdHdhcmUgc2hvdWxkIGNoZWNrIHRoYXQgdGhpcyBiaXQgaXMgYSAxIGJlZm9yZQorICogdHJhbnNpdGlvbmluZyBSTkcgdG8gbG93IHBvd2VyIG1vZGUgKFJORyBjbG9jayBzdG9wcGVkKS4gUk5HIHR1cm5zIG9uIHRoZSBUUk5HCisgKiBmcmVlLXJ1bm5pbmcgcmluZyBvc2NpbGxhdG9yIHdoZW5ldmVyIG5ldyBlbnRyb3B5IGlzIGJlaW5nIGdlbmVyYXRlZCBhbmQgdHVybnMgb2ZmIHRoZQorICogcmluZyBvc2NpbGxhdG9yIHdoZW4gZW50cm9weSBnZW5lcmF0aW9uIGlzIGNvbXBsZXRlLiBJZiB0aGUgUk5HIGNsb2NrIGlzCisgKiBzdG9wcGVkIHdoaWxlIHRoZSBUUk5HIHJpbmcgb3NjaWxsYXRvciBpcyBydW5uaW5nLCB0aGUgb3NjaWxsYXRvciB3aWxsIGNvbnRpbnVlCisgKiBydW5uaW5nIGV2ZW4gdGhvdWdoIHRoZSBSTkcgY2xvY2sgaXMgc3RvcHBlZC4gVFNUT1BfT0sgaXMgYXNzZXJ0ZWQgd2hlbiB0aGUgVFJORworICogcmluZyBvc2NpbGxhdG9yIGlzIG5vdCBydW5uaW5nLiBhbmQgdGhlcmVmb3JlIGl0IGlzIG9rIHRvIHN0b3AgdGhlIFJORyBjbG9jay4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19NQ1RMX1RTVE9QX09LIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX01DVExfVFNUT1BfT0soYmFzZSkgKChUUk5HX01DVExfUkVHKGJhc2UpICYgVFJOR19NQ1RMX1RTVE9QX09LX01BU0spID4+IFRSTkdfTUNUTF9UU1RPUF9PS19TSElGVCkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfTUNUTCwgZmllbGQgRU5UX1ZBTFsxMF0gKFJPKQorICoKKyAqIFJlYWQgb25seTogRW50cm9weSBWYWxpZC4gV2lsbCBhc3NlcnQgb25seSBpZiBUUk5HIEFDQyBiaXQgaXMgc2V0LCBhbmQgdGhlbgorICogYWZ0ZXIgYW4gZW50cm9weSB2YWx1ZSBpcyBnZW5lcmF0ZWQuIFdpbGwgYmUgY2xlYXJlZCB3aGVuIEVOVDE1IGlzIHJlYWQuIChFTlQwCisgKiB0aHJvdWdoIEVOVDE0IHNob3VsZCBiZSByZWFkIGJlZm9yZSByZWFkaW5nIEVOVDE1KS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19NQ1RMX0VOVF9WQUwgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfTUNUTF9FTlRfVkFMKGJhc2UpICgoVFJOR19NQ1RMX1JFRyhiYXNlKSAmIFRSTkdfTUNUTF9FTlRfVkFMX01BU0spID4+IFRSTkdfTUNUTF9FTlRfVkFMX1NISUZUKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19NQ1RMLCBmaWVsZCBFUlJbMTJdIChXMUMpCisgKgorICogUmVhZDogRXJyb3Igc3RhdHVzLiAxID0gZXJyb3IgZGV0ZWN0ZWQuIDAgPSBubyBlcnJvci5Xcml0ZTogV3JpdGUgMSB0byBjbGVhcgorICogZXJyb3JzLiBXcml0aW5nIDAgaGFzIG5vIGVmZmVjdC4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19NQ1RMX0VSUiBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9NQ1RMX0VSUihiYXNlKSAoKFRSTkdfTUNUTF9SRUcoYmFzZSkgJiBUUk5HX01DVExfRVJSX01BU0spID4+IFRSTkdfTUNUTF9FUlJfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBFUlIgZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfTUNUTF9FUlIoYmFzZSwgdmFsdWUpIChUUk5HX1JNV19NQ1RMKGJhc2UsIFRSTkdfTUNUTF9FUlJfTUFTSywgVFJOR19NQ1RMX0VSUih2YWx1ZSkpKQorLypAfSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUUk5HX1NEQ1RMIC0gUk5HIFNlZWQgQ29udHJvbCBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgVFJOR19TRENUTCAtIFJORyBTZWVkIENvbnRyb2wgUmVnaXN0ZXIgKFJXKQorICoKKyAqIFJlc2V0IHZhbHVlOiAweDBDODAwOUM0VQorICoKKyAqIFRoZSBSTkcgU2VlZCBDb250cm9sIFJlZ2lzdGVyIGNvbnRhaW5zIHR3byBmaWVsZHMuIE9uZSBmaWVsZCBkZWZpbmVzIHRoZQorICogbGVuZ3RoIChpbiBzeXN0ZW0gY2xvY2tzKSBvZiBlYWNoIEVudHJvcHkgc2FtcGxlIChFTlRfRExZKSwgYW5kIHRoZSBvdGhlciBmaWVsZAorICogaW5kaWNhdGVzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHdpbGwgdGFrZW4gZHVyaW5nIGVhY2ggVFJORyBFbnRyb3B5CisgKiBnZW5lcmF0aW9uIChTQU1QX1NJWkUpLgorICovCisvKiEKKyAqIEBuYW1lIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBlbnRpcmUgVFJOR19TRENUTCByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19TRENUTF9SRUcoYmFzZSkgKChiYXNlKS0+U0RDVEwpCisjZGVmaW5lIFRSTkdfUkRfU0RDVEwoYmFzZSkgKFRSTkdfU0RDVExfUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX1NEQ1RMKGJhc2UsIHZhbHVlKSAoVFJOR19TRENUTF9SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19TRENUTChiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfU0RDVEwoYmFzZSwgKFRSTkdfUkRfU0RDVEwoYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qCisgKiBDb25zdGFudHMgJiBtYWNyb3MgZm9yIGluZGl2aWR1YWwgVFJOR19TRENUTCBiaXRmaWVsZHMKKyAqLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0RDVEwsIGZpZWxkIFNBTVBfU0laRVsxNTowXSAoUlcpCisgKgorICogU2FtcGxlIFNpemUuIERlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiBFbnRyb3B5IHNhbXBsZXMgdGhhdCB3aWxsIGJlIHRha2VuCisgKiBkdXJpbmcgRW50cm9weSBnZW5lcmF0aW9uLiBUaGlzIGZpZWxkIGlzIHdyaXRhYmxlIG9ubHkgaWYgTUNUTFtQUkdNXSBiaXQgaXMgMS4KKyAqIFRoaXMgZmllbGQgd2lsbCByZWFkIHplcm9lcyBpZiBNQ1RMW1BSR01dID0gMC4gVGhpcyBmaWVsZCBpcyBjbGVhcmVkIHRvIDA5QzRoCisgKiAoZGVjaW1hbCAyNTAwKSBieSB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NEQ1RMX1NBTVBfU0laRSBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TRENUTF9TQU1QX1NJWkUoYmFzZSkgKChUUk5HX1NEQ1RMX1JFRyhiYXNlKSAmIFRSTkdfU0RDVExfU0FNUF9TSVpFX01BU0spID4+IFRSTkdfU0RDVExfU0FNUF9TSVpFX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgU0FNUF9TSVpFIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NEQ1RMX1NBTVBfU0laRShiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19TRENUTChiYXNlLCBUUk5HX1NEQ1RMX1NBTVBfU0laRV9NQVNLLCBUUk5HX1NEQ1RMX1NBTVBfU0laRSh2YWx1ZSkpKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19TRENUTCwgZmllbGQgRU5UX0RMWVszMToxNl0gKFJXKQorICoKKyAqIEVudHJvcHkgRGVsYXkuIERlZmluZXMgdGhlIGxlbmd0aCAoaW4gc3lzdGVtIGNsb2Nrcykgb2YgZWFjaCBFbnRyb3B5IHNhbXBsZQorICogdGFrZW4uIFRoaXMgZmllbGQgaXMgd3JpdGFibGUgb25seSBpZiBNQ1RMW1BSR01dIGJpdCBpcyAxLiBUaGlzIGZpZWxkIHdpbGwgcmVhZAorICogemVyb2VzIGlmIE1DVExbUFJHTV0gPSAwLiBUaGlzIGZpZWxkIGlzIGNsZWFyZWQgdG8gMEM4MGggKGRlY2ltYWwgMzIwMCkgYnkKKyAqIHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0RDVExfRU5UX0RMWSBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TRENUTF9FTlRfRExZKGJhc2UpICgoVFJOR19TRENUTF9SRUcoYmFzZSkgJiBUUk5HX1NEQ1RMX0VOVF9ETFlfTUFTSykgPj4gVFJOR19TRENUTF9FTlRfRExZX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgRU5UX0RMWSBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TRENUTF9FTlRfRExZKGJhc2UsIHZhbHVlKSAoVFJOR19STVdfU0RDVEwoYmFzZSwgVFJOR19TRENUTF9FTlRfRExZX01BU0ssIFRSTkdfU0RDVExfRU5UX0RMWSh2YWx1ZSkpKQorLypAfSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUUk5HX1NCTElNIC0gUk5HIFNwYXJzZSBCaXQgTGltaXQgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIFRSTkdfU0JMSU0gLSBSTkcgU3BhcnNlIEJpdCBMaW1pdCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDAwMDAwM0ZVCisgKgorICogVGhlIFJORyBTcGFyc2UgQml0IExpbWl0IFJlZ2lzdGVyIGlzIHVzZWQgd2hlbiBWb24gTmV1bWFubiBzYW1wbGluZyBpcworICogc2VsZWN0ZWQgZHVyaW5nIEVudHJvcHkgR2VuZXJhdGlvbi4gSXQgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uc2VjdXRpdmUgVm9uCisgKiBOZXVtYW5uIHNhbXBsZXMgd2hpY2ggbWF5IGJlIGRpc2NhcmRlZCBiZWZvcmUgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLiBOb3RlCisgKiB0aGF0IHRoaXMgYWRkcmVzcyAoMHhCQVNFXzA2MTQpIGlzIHVzZWQgYXMgU0JMSU0gb25seSBpZiBNQ1RMW1BSR01dIGlzIDEuIElmCisgKiBNQ1RMW1BSR01dIGlzIDAsIHRoaXMgYWRkcmVzcyBpcyB1c2VkIGFzIFRPVFNBTSByZWFkYmFjayByZWdpc3Rlci4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfU0JMSU0gcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfU0JMSU1fUkVHKGJhc2UpICgoYmFzZSktPlNCTElNKQorI2RlZmluZSBUUk5HX1JEX1NCTElNKGJhc2UpIChUUk5HX1NCTElNX1JFRyhiYXNlKSkKKyNkZWZpbmUgVFJOR19XUl9TQkxJTShiYXNlLCB2YWx1ZSkgKFRSTkdfU0JMSU1fUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfU0JMSU0oYmFzZSwgbWFzaywgdmFsdWUpIChUUk5HX1dSX1NCTElNKGJhc2UsIChUUk5HX1JEX1NCTElNKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworCisvKgorICogQ29uc3RhbnRzICYgbWFjcm9zIGZvciBpbmRpdmlkdWFsIFRSTkdfU0JMSU0gYml0ZmllbGRzCisgKi8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NCTElNLCBmaWVsZCBTQl9MSU1bOTowXSAoUlcpCisgKgorICogU3BhcnNlIEJpdCBMaW1pdC4gRHVyaW5nIFZvbiBOZXVtYW5uIHNhbXBsaW5nIChpZiBlbmFibGVkIGJ5IE1DVExbU0FNUF9NT0RFXSwKKyAqIHNhbXBsZXMgYXJlIGRpc2NhcmRlZCBpZiB0d28gY29uc2VjdXRpdmUgcmF3IHNhbXBsZXMgYXJlIGJvdGggMCBvciBib3RoIDEuIElmCisgKiB0aGlzIGRpc2NhcmRpbmcgb2NjdXJzIGZvciBhIGxvbmcgcGVyaW9kIG9mIHRpbWUsIGl0IGluZGljYXRlcyB0aGF0IHRoZXJlIGlzCisgKiBpbnN1ZmZpY2llbnQgRW50cm9weS4gVGhlIFNwYXJzZSBCaXQgTGltaXQgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YKKyAqIGNvbnNlY3V0aXZlIHNhbXBsZXMgdGhhdCBtYXkgYmUgZGlzY2FyZGVkIGJlZm9yZSBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuIFRoaXMgZmllbGQKKyAqIGlzIHdyaXRhYmxlIG9ubHkgaWYgTUNUTFtQUkdNXSBiaXQgaXMgMS4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAzaEYgYnkKKyAqIHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuIE5vdGUgdGhhdCBpZiBNQ1RMW1BSR01dIGJpdCBpcyAwLCB0aGlzCisgKiByZWdpc3RlciBhZGRyZXNzIGlzIHVzZWQgdG8gcmVhZCB0aGUgVG90YWwgU2FtcGxlcyBjb3VudCBpbiByZWdpc3RlciBUT1RTQU0sIGFzCisgKiBkZWZpbmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TQkxJTV9TQl9MSU0gZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0JMSU1fU0JfTElNKGJhc2UpICgoVFJOR19TQkxJTV9SRUcoYmFzZSkgJiBUUk5HX1NCTElNX1NCX0xJTV9NQVNLKSA+PiBUUk5HX1NCTElNX1NCX0xJTV9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFNCX0xJTSBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TQkxJTV9TQl9MSU0oYmFzZSwgdmFsdWUpIChUUk5HX1JNV19TQkxJTShiYXNlLCBUUk5HX1NCTElNX1NCX0xJTV9NQVNLLCBUUk5HX1NCTElNX1NCX0xJTSh2YWx1ZSkpKQorLypAfSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUUk5HX1NDTUlTQyAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBUUk5HX1NDTUlTQyAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyIChSVykKKyAqCisgKiBSZXNldCB2YWx1ZTogMHgwMDAxMDAxRlUKKyAqCisgKiBUaGUgUk5HIFN0YXRpc3RpY2FsIENoZWNrIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIgY29udGFpbnMgdGhlIExvbmcgUnVuCisgKiBNYXhpbXVtIExpbWl0IHZhbHVlIGFuZCB0aGUgUmV0cnkgQ291bnQgdmFsdWUuIFRoaXMgcmVnaXN0ZXIgaXMgYWNjZXNzaWJsZSBvbmx5IHdoZW4KKyAqIHRoZSBNQ1RMW1BSR01dIGJpdCBpcyAxLCBvdGhlcndpc2UgdGhpcyByZWdpc3RlciB3aWxsIHJlYWQgemVyb2VzLCBhbmQgY2Fubm90CisgKiBiZSB3cml0dGVuLgorICovCisvKiEKKyAqIEBuYW1lIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBlbnRpcmUgVFJOR19TQ01JU0MgcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfU0NNSVNDX1JFRyhiYXNlKSAoKGJhc2UpLT5TQ01JU0MpCisjZGVmaW5lIFRSTkdfUkRfU0NNSVNDKGJhc2UpIChUUk5HX1NDTUlTQ19SRUcoYmFzZSkpCisjZGVmaW5lIFRSTkdfV1JfU0NNSVNDKGJhc2UsIHZhbHVlKSAoVFJOR19TQ01JU0NfUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfU0NNSVNDKGJhc2UsIG1hc2ssIHZhbHVlKSAoVFJOR19XUl9TQ01JU0MoYmFzZSwgKFRSTkdfUkRfU0NNSVNDKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworCisvKgorICogQ29uc3RhbnRzICYgbWFjcm9zIGZvciBpbmRpdmlkdWFsIFRSTkdfU0NNSVNDIGJpdGZpZWxkcworICovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19TQ01JU0MsIGZpZWxkIExSVU5fTUFYWzc6MF0gKFJXKQorICoKKyAqIExPTkcgUlVOIE1BWCBMSU1JVC4gVGhpcyB2YWx1ZSBpcyB0aGUgbGFyZ2VzdCBhbGxvd2FibGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlCisgKiBzYW1wbGVzIG9mIGFsbCAxLCBvciBhbGwgMCwgdGhhdCBpcyBhbGxvd2VkIGR1cmluZyB0aGUgRW50cm9weSBnZW5lcmF0aW9uLgorICogVGhpcyBmaWVsZCBpcyB3cml0YWJsZSBvbmx5IGlmIE1DVExbUFJHTV0gYml0IGlzIDEuIFRoaXMgZmllbGQgd2lsbCByZWFkIHplcm9lcworICogaWYgTUNUTFtQUkdNXSA9IDAuIFRoaXMgZmllbGQgaXMgY2xlYXJlZCB0byAyMmggYnkgd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXQorICogYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NNSVNDX0xSVU5fTUFYIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NDTUlTQ19MUlVOX01BWChiYXNlKSBcCisgICAgKChUUk5HX1NDTUlTQ19SRUcoYmFzZSkgJiBUUk5HX1NDTUlTQ19MUlVOX01BWF9NQVNLKSA+PiBUUk5HX1NDTUlTQ19MUlVOX01BWF9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIExSVU5fTUFYIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NDTUlTQ19MUlVOX01BWChiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19TQ01JU0MoYmFzZSwgVFJOR19TQ01JU0NfTFJVTl9NQVhfTUFTSywgVFJOR19TQ01JU0NfTFJVTl9NQVgodmFsdWUpKSkKKy8qQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVFJOR19FTlQgLSBSTkcgVFJORyBFbnRyb3B5IFJlYWQgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIFRSTkdfRU5UIC0gUk5HIFRSTkcgRW50cm9weSBSZWFkIFJlZ2lzdGVyIChSTykKKyAqCisgKiBSZXNldCB2YWx1ZTogMHgwMDAwMDAwMFUKKyAqCisgKiBUaGUgUk5HIFRSTkcgY2FuIGJlIHByb2dyYW1tZWQgdG8gZ2VuZXJhdGUgYW4gZW50cm9weSB2YWx1ZSB0aGF0IGlzIHJlYWRhYmxlCisgKiB2aWEgdGhlIFNreUJsdWUgYnVzLiBUbyBkbyB0aGlzLCBzZXQgdGhlIE1DVExbVFJOR19BQ0NdIGJpdCB0byAxLiBPbmNlIHRoZQorICogZW50cm9weSB2YWx1ZSBoYXMgYmVlbiBnZW5lcmF0ZWQsIHRoZSBNQ1RMW0VOVF9WQUxdIGJpdCB3aWxsIGJlIHNldCB0byAxLiBBdCB0aGlzCisgKiBwb2ludCwgRU5UMCB0aHJvdWdoIEVOVDE1IG1heSBiZSByZWFkIHRvIHJldHJpZXZlIHRoZSA1MTItYml0IGVudHJvcHkgdmFsdWUuCisgKiBOb3RlIHRoYXQgb25jZSBFTlQxNSBpcyByZWFkLCB0aGUgZW50cm9weSB2YWx1ZSB3aWxsIGJlIGNsZWFyZWQgYW5kIGEgbmV3CisgKiB2YWx1ZSB3aWxsIGJlZ2luIGdlbmVyYXRpb24sIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IEVOVDE1IGJlIHJlYWQgbGFzdC4gVGhlc2UKKyAqIHJlZ2lzdGVycyBhcmUgcmVhZGFibGUgb25seSB3aGVuIE1DVExbUFJHTV0gPSAwIChSdW4gTW9kZSksIE1DVExbVFJOR19BQ0NdID0gMQorICogKFRSTkcgYWNjZXNzIG1vZGUpIGFuZCBNQ1RMW0VOVF9WQUxdID0gMSwgb3RoZXJ3aXNlIHplcm9lcyB3aWxsIGJlIHJlYWQuCisgKi8KKy8qIQorICogQG5hbWUgQ29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIGVudGlyZSBUUk5HX0VOVCByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19FTlRfUkVHKGJhc2UsIGluZGV4KSAoKGJhc2UpLT5FTlRbaW5kZXhdKQorI2RlZmluZSBUUk5HX1JEX0VOVChiYXNlLCBpbmRleCkgKFRSTkdfRU5UX1JFRyhiYXNlLCBpbmRleCkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfU0VDX0NGRyAtIFJORyBTZWN1cml0eSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBUUk5HX1NFQ19DRkcgLSBSTkcgU2VjdXJpdHkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDAwMDAwMDBVCisgKgorICogVGhlIFJORyBTZWN1cml0eSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGlzIGEgcmVhZC93cml0ZSByZWdpc3RlciB1c2VkIHRvCisgKiBjb250cm9sIHRoZSB0ZXN0IG1vZGUsIHByb2dyYW1tYWJpbGl0eSBhbmQgc3RhdGUgbW9kZXMgb2YgdGhlIFJORy4gTWFueSBiaXRzIGFyZQorICogcGxhY2UgaG9sZGVycyBmb3IgdGhpcyB2ZXJzaW9uLiBNb3JlIGNvbmZpZ3VyYWJpbGl0eSB3aWxsIGJlIGFkZGVkIGhlcmUuIENsZWFycworICogb24gYXN5bmNocm9ub3VzIHJlc2V0LiBGb3IgU0EtVFJORyByZWxlYXNlcyBiZWZvcmUgMjAxNC9KdWx5LzAxLCBvZmZzZXRzIDB4QTAKKyAqIHRvIDB4QUMgdXNlZCB0byBiZSAweEIwIHRvIDB4QkMgcmVzcGVjdGl2ZWx5LiBTbywgdXBkYXRlIG5ld2VyIHRlc3RzIHRoYXQgdXNlCisgKiB0aGVzZSByZWdpc3RlcnMsIGlmIGhhcmQgY29kZWQuCisgKi8KKy8qIQorICogQG5hbWUgQ29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIGVudGlyZSBUUk5HX1NFQ19DRkcgcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfU0VDX0NGR19SRUcoYmFzZSkgKChiYXNlKS0+U0VDX0NGRykKKyNkZWZpbmUgVFJOR19SRF9TRUNfQ0ZHKGJhc2UpIChUUk5HX1NFQ19DRkdfUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX1NFQ19DRkcoYmFzZSwgdmFsdWUpIChUUk5HX1NFQ19DRkdfUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfU0VDX0NGRyhiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfU0VDX0NGRyhiYXNlLCAoVFJOR19SRF9TRUNfQ0ZHKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0VDX0NGRywgZmllbGQgTk9fUFJHTVsxXSAoUlcpCisgKgorICogSWYgc2V0IHRoZSBUUk5HIHJlZ2lzdGVycyBjYW5ub3QgYmUgcHJvZ3JhbW1lZC4gVGhhdCBpcywgcmVnYXJkbGVzcyBvZiB0aGUKKyAqIFRSTkcgYWNjZXNzIG1vZGUgaW4gdGhlIFNBLVRSTkcgTWlzY2VsbGFuZW91cyBDb250cm9sIFJlZ2lzdGVyLgorICoKKyAqIFZhbHVlczoKKyAqIC0gMGIwIC0gUHJvZ3JhbWFiaWxpdHkgb2YgcmVnaXN0ZXJzIGNvbnRyb2xsZWQgb25seSBieSB0aGUgUk5HIE1pc2NlbGxhbmVvdXMKKyAqICAgICBDb250cm9sIFJlZ2lzdGVyJ3MgYWNjZXNzIG1vZGUgYml0LgorICogLSAwYjEgLSBPdmVyaWRlcyBSTkcgTWlzY2VsbGFuZW91cyBDb250cm9sIFJlZ2lzdGVyIGFjY2VzcyBtb2RlIGFuZCBwcmV2ZW50cworICogICAgIFRSTkcgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0VDX0NGR19OT19QUkdNIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NFQ19DRkdfTk9fUFJHTShiYXNlKSBcCisgICAgKChUUk5HX1NFQ19DRkdfUkVHKGJhc2UpICYgVFJOR19TRUNfQ0ZHX05PX1BSR01fTUFTSykgPj4gVFJOR19TRUNfQ0ZHX05PX1BSR01fU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBOT19QUkdNIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NFQ19DRkdfTk9fUFJHTShiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19TRUNfQ0ZHKGJhc2UsIFRSTkdfU0VDX0NGR19OT19QUkdNX01BU0ssIFRSTkdfU0VDX0NGR19OT19QUkdNKHZhbHVlKSkpCisvKkB9Ki8KKworLyohIEBicmllZiBBcnJheSB0byBtYXAgVFJORyBpbnN0YW5jZSBudW1iZXIgdG8gYmFzZSBwb2ludGVyLiAqLworc3RhdGljIFRSTkdfVHlwZSAqY29uc3Qgc190cm5nQmFzZXNbXSA9IFRSTkdfQkFTRV9QVFJTOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorLyohIEBicmllZiBDbG9jayBhcnJheSBuYW1lICovCitzdGF0aWMgY29uc3QgY2xvY2tfaXBfbmFtZV90IHNfdHJuZ0Nsb2NrW10gPSBUUk5HX0NMT0NLUzsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0YXR1c190IHRybmdfQXBwbHlVc2VyQ29uZmlnKFRSTkdfVHlwZSAqYmFzZSwgY29uc3QgdHJuZ19jb25maWdfdCAqdXNlckNvbmZpZyk7CitzdGF0aWMgc3RhdHVzX3QgdHJuZ19TZXRSZXRyeUNvdW50KFRSTkdfVHlwZSAqYmFzZSwgdWludDhfdCByZXRyeV9jb3VudCk7CitzdGF0aWMgc3RhdHVzX3QgdHJuZ19TZXRTdGF0aXN0aWNhbENoZWNrTGltaXQoVFJOR19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRybmdfc3RhdGlzdGljYWxfY2hlY2tfdCBzdGF0aXN0aWNhbF9jaGVjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cm5nX3N0YXRpc3RpY2FsX2NoZWNrX2xpbWl0X3QgKmxpbWl0KTsKK3N0YXRpYyB1aW50MzJfdCB0cm5nX1JlYWRFbnRyb3B5KFRSTkdfVHlwZSAqYmFzZSwgdWludDMyX3QgaW5kZXgpOworc3RhdGljIHVpbnQzMl90IHRybmdfR2V0SW5zdGFuY2UoVFJOR19UeXBlICpiYXNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1aW50MzJfdCB0cm5nX0dldEluc3RhbmNlKFRSTkdfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc190cm5nQmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfdHJuZ0Jhc2VzW2luc3RhbmNlXSA9PSBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydChpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc190cm5nQmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworLypGVU5DVElPTioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZ1bmN0aW9uIE5hbWUgOiBUUk5HX0luaXRVc2VyQ29uZmlnRGVmYXVsdAorICogRGVzY3JpcHRpb24gICA6ICBJbml0aWFsaXplcyB1c2VyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHRvIGRlZmF1bHQgc2V0dGluZ3MuCisgKgorICpFTkQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdHVzX3QgVFJOR19HZXREZWZhdWx0Q29uZmlnKHRybmdfY29uZmlnX3QgKnVzZXJDb25maWcpCit7CisgICAgc3RhdHVzX3QgcmVzdWx0OworCisgICAgaWYgKHVzZXJDb25maWcgIT0gMCkKKyAgICB7CisgICAgICAgIHVzZXJDb25maWctPmxvY2sgPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfTE9DSzsKKyAgICAgICAgdXNlckNvbmZpZy0+Y2xvY2tNb2RlID0ga1RSTkdfQ2xvY2tNb2RlUmluZ09zY2lsbGF0b3I7CisgICAgICAgIHVzZXJDb25maWctPnJpbmdPc2NEaXYgPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfT1NDX0RJVjsKKyAgICAgICAgdXNlckNvbmZpZy0+c2FtcGxlTW9kZSA9IGtUUk5HX1NhbXBsZU1vZGVSYXc7CisgICAgICAgIHVzZXJDb25maWctPmVudHJvcHlEZWxheSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9FTlRST1BZX0RFTEFZOworICAgICAgICB1c2VyQ29uZmlnLT5zYW1wbGVTaXplID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1NBTVBMRV9TSVpFOworICAgICAgICB1c2VyQ29uZmlnLT5zcGFyc2VCaXRMaW1pdCA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9TUEFSU0VfQklUX0xJTUlUOworCisgICAgICAgIC8qIFN0YXRpc3RpY2FsIENoZWNrIFBhcmFtZXRlcnMuKi8KKyAgICAgICAgdXNlckNvbmZpZy0+cmV0cnlDb3VudCA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SRVRSWV9DT1VOVDsKKyAgICAgICAgdXNlckNvbmZpZy0+bG9uZ1J1bk1heExpbWl0ID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTl9NQVhfTElNSVQ7CisKKyAgICAgICAgdXNlckNvbmZpZy0+bW9ub2JpdExpbWl0Lm1heGltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfTU9OT0JJVF9NQVhJTVVNOworICAgICAgICB1c2VyQ29uZmlnLT5tb25vYml0TGltaXQubWluaW11bSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9NT05PQklUX01JTklNVU07CisgICAgICAgIHVzZXJDb25maWctPnJ1bkJpdDFMaW1pdC5tYXhpbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDFfTUFYSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+cnVuQml0MUxpbWl0Lm1pbmltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUMV9NSU5JTVVNOworICAgICAgICB1c2VyQ29uZmlnLT5ydW5CaXQyTGltaXQubWF4aW11bSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQyX01BWElNVU07CisgICAgICAgIHVzZXJDb25maWctPnJ1bkJpdDJMaW1pdC5taW5pbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDJfTUlOSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+cnVuQml0M0xpbWl0Lm1heGltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUM19NQVhJTVVNOworICAgICAgICB1c2VyQ29uZmlnLT5ydW5CaXQzTGltaXQubWluaW11bSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQzX01JTklNVU07CisgICAgICAgIHVzZXJDb25maWctPnJ1bkJpdDRMaW1pdC5tYXhpbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDRfTUFYSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+cnVuQml0NExpbWl0Lm1pbmltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUNF9NSU5JTVVNOworICAgICAgICB1c2VyQ29uZmlnLT5ydW5CaXQ1TGltaXQubWF4aW11bSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQ1X01BWElNVU07CisgICAgICAgIHVzZXJDb25maWctPnJ1bkJpdDVMaW1pdC5taW5pbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDVfTUlOSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+cnVuQml0NlBsdXNMaW1pdC5tYXhpbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDZQTFVTX01BWElNVU07CisgICAgICAgIHVzZXJDb25maWctPnJ1bkJpdDZQbHVzTGltaXQubWluaW11bSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQ2UExVU19NSU5JTVVNOworICAgICAgICB1c2VyQ29uZmlnLT5wb2tlckxpbWl0Lm1heGltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUE9LRVJfTUFYSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+cG9rZXJMaW1pdC5taW5pbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1BPS0VSX01JTklNVU07CisgICAgICAgIHVzZXJDb25maWctPmZyZXF1ZW5jeUNvdW50TGltaXQubWF4aW11bSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9GUkVRVUVOQ1lfTUFYSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+ZnJlcXVlbmN5Q291bnRMaW1pdC5taW5pbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX0ZSRVFVRU5DWV9NSU5JTVVNOworCisgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgVFJORyByZXRyeSBjb3VudC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHJldHJ5IGNvdW50ZXIgd2hpY2ggZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHRpbWVzIGEKKyAqIHN0YXRpc3RpY2FsIGNoZWNrIG1heSBmYWlscyBkdXJpbmcgdGhlIFRSTkcgRW50cm9weSBHZW5lcmF0aW9uIGJlZm9yZQorICogZ2VuZXJhdGluZyBhbiBlcnJvci4KKyovCitzdGF0aWMgc3RhdHVzX3QgdHJuZ19TZXRSZXRyeUNvdW50KFRSTkdfVHlwZSAqYmFzZSwgdWludDhfdCByZXRyeV9jb3VudCkKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBpZiAoKHJldHJ5X2NvdW50ID49IDF1KSAmJiAocmV0cnlfY291bnQgPD0gMTV1KSkKKyAgICB7CisgICAgICAgIC8qIFNldCByZXRyeSBjb3VudC4qLworICAgICAgICBUUk5HX1dSX1NDTUlTQ19SVFlfQ1QoYmFzZSwgcmV0cnlfY291bnQpOworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHN0YXRpc3RpY2FsIGNoZWNrIGxpbWl0cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IG1pbmltdW0gYW5kIG1heGltdW0gbGltaXRzIG9mIHN0YXRpc3RpY2FsIGNoZWNrcy4KKyAqCisgKi8KK3N0YXRpYyBzdGF0dXNfdCB0cm5nX1NldFN0YXRpc3RpY2FsQ2hlY2tMaW1pdChUUk5HX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJuZ19zdGF0aXN0aWNhbF9jaGVja190IHN0YXRpc3RpY2FsX2NoZWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRybmdfc3RhdGlzdGljYWxfY2hlY2tfbGltaXRfdCAqbGltaXQpCit7CisgICAgdWludDMyX3QgcmFuZ2U7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworCisgICAgaWYgKGxpbWl0ICYmIChsaW1pdC0+bWF4aW11bSA+IGxpbWl0LT5taW5pbXVtKSkKKyAgICB7CisgICAgICAgIHJhbmdlID0gbGltaXQtPm1heGltdW0gLSBsaW1pdC0+bWluaW11bTsgLyogUmVnaXN0ZXJzIHVzZSByYW5nZSBpbnN0ZWFkIG9mIG1pbmltdW0gdmFsdWUuKi8KKworICAgICAgICBzd2l0Y2ggKHN0YXRpc3RpY2FsX2NoZWNrKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tNb25vYml0OiAvKiBBbGxvd2FibGUgbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2Ygb25lcy96ZXJvIGRldGVjdGVkIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cm9weSBnZW5lcmF0aW9uLiAqLworICAgICAgICAgICAgICAgIGlmICgocmFuZ2UgPD0gMHhmZmZmdSkgJiYgKGxpbWl0LT5tYXhpbXVtIDw9IDB4ZmZmZnUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9TQ01MX01PTk9fTUFYKGJhc2UsIGxpbWl0LT5tYXhpbXVtKTsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9TQ01MX01PTk9fUk5HKGJhc2UsIHJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0MTogLyogQWxsb3dhYmxlIG1heGltdW0gYW5kIG1pbmltdW0gbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDEgZGV0ZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uICovCisgICAgICAgICAgICAgICAgaWYgKChyYW5nZSA8PSAweDdmZmZ1KSAmJiAobGltaXQtPm1heGltdW0gPD0gMHg3ZmZmdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1NDUjFMX1JVTjFfTUFYKGJhc2UsIGxpbWl0LT5tYXhpbXVtKTsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9TQ1IxTF9SVU4xX1JORyhiYXNlLCByYW5nZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDI6IC8qIEFsbG93YWJsZSBtYXhpbXVtIGFuZCBtaW5pbXVtIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAyIGRldGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiAqLworICAgICAgICAgICAgICAgIGlmICgocmFuZ2UgPD0gMHgzZmZmdSkgJiYgKGxpbWl0LT5tYXhpbXVtIDw9IDB4M2ZmZnUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9TQ1IyTF9SVU4yX01BWChiYXNlLCBsaW1pdC0+bWF4aW11bSk7CisgICAgICAgICAgICAgICAgICAgIFRSTkdfV1JfU0NSMkxfUlVOMl9STkcoYmFzZSwgcmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQzOiAvKiBBbGxvd2FibGUgbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggMyBkZXRlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJhbmdlIDw9IDB4MWZmZnUpICYmIChsaW1pdC0+bWF4aW11bSA8PSAweDFmZmZ1KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRSTkdfV1JfU0NSM0xfUlVOM19NQVgoYmFzZSwgbGltaXQtPm1heGltdW0pOworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1NDUjNMX1JVTjNfUk5HKGJhc2UsIHJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0NDogLyogQWxsb3dhYmxlIG1heGltdW0gYW5kIG1pbmltdW0gbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDQgZGV0ZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uICovCisgICAgICAgICAgICAgICAgaWYgKChyYW5nZSA8PSAweGZmZnUpICYmIChsaW1pdC0+bWF4aW11bSA8PSAweGZmZnUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9TQ1I0TF9SVU40X01BWChiYXNlLCBsaW1pdC0+bWF4aW11bSk7CisgICAgICAgICAgICAgICAgICAgIFRSTkdfV1JfU0NSNExfUlVONF9STkcoYmFzZSwgcmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQ1OiAvKiBBbGxvd2FibGUgbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNSBkZXRlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJhbmdlIDw9IDB4N2ZmdSkgJiYgKGxpbWl0LT5tYXhpbXVtIDw9IDB4N2ZmdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1NDUjVMX1JVTjVfTUFYKGJhc2UsIGxpbWl0LT5tYXhpbXVtKTsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9TQ1I1TF9SVU41X1JORyhiYXNlLCByYW5nZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDZQbHVzOiAvKiBBbGxvd2FibGUgbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2YgbGVuZ3RoIDYgb3IgbW9yZSBkZXRlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24gKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJhbmdlIDw9IDB4N2ZmdSkgJiYgKGxpbWl0LT5tYXhpbXVtIDw9IDB4N2ZmdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1NDUjZQTF9SVU42UF9NQVgoYmFzZSwgbGltaXQtPm1heGltdW0pOworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1NDUjZQTF9SVU42UF9STkcoYmFzZSwgcmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tQb2tlcjogLyogQWxsb3dhYmxlIG1heGltdW0gYW5kIG1pbmltdW0gbGltaXQgb2YgIlBva2VyIFRlc3QiIGRldGVjdGVkIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJvcHkgZ2VuZXJhdGlvbiAuICovCisgICAgICAgICAgICAgICAgaWYgKChyYW5nZSA8PSAweGZmZmZ1KSAmJiAobGltaXQtPm1heGltdW0gPD0gMHhmZmZmZmZ1KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRSTkdfV1JfUEtSTUFYX1BLUl9NQVgoYmFzZSwgbGltaXQtPm1heGltdW0pOworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1BLUlJOR19QS1JfUk5HKGJhc2UsIHJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrVFJOR19TdGF0aXN0aWNhbENoZWNrRnJlcXVlbmN5Q291bnQ6IC8qIEFsbG93YWJsZSBtYXhpbXVtIGFuZCBtaW5pbXVtIGxpbWl0IG9mIGVudHJvcHkgc2FtcGxlIGZycXVlbmN5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiAuICovCisgICAgICAgICAgICAgICAgaWYgKChsaW1pdC0+bWluaW11bSA8PSAweDNmZmZmZnUpICYmIChsaW1pdC0+bWF4aW11bSA8PSAweDNmZmZmZnUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9GUlFNQVhfRlJRX01BWChiYXNlLCBsaW1pdC0+bWF4aW11bSk7CisgICAgICAgICAgICAgICAgICAgIFRSTkdfV1JfRlJRTUlOX0ZSUV9NSU4oYmFzZSwgbGltaXQtPm1pbmltdW0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworLypGVU5DVElPTioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZ1bmN0aW9uIE5hbWUgOiB0cm5nX0FwcGx5VXNlckNvbmZpZworICogRGVzY3JpcHRpb24gICA6IEFwcGx5IHVzZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBUUk5HIG1vZHVsZS4KKyAqCisgKkVORCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RhdHVzX3QgdHJuZ19BcHBseVVzZXJDb25maWcoVFJOR19UeXBlICpiYXNlLCBjb25zdCB0cm5nX2NvbmZpZ190ICp1c2VyQ29uZmlnKQoreworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGlmICgoKHN0YXR1cyA9IHRybmdfU2V0UmV0cnlDb3VudChiYXNlLCB1c2VyQ29uZmlnLT5yZXRyeUNvdW50KSkgPT0ga1N0YXR1c19TdWNjZXNzKSAmJgorICAgICAgICAoKHN0YXR1cyA9IHRybmdfU2V0U3RhdGlzdGljYWxDaGVja0xpbWl0KGJhc2UsIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tNb25vYml0LCAmdXNlckNvbmZpZy0+bW9ub2JpdExpbWl0KSkgPT0KKyAgICAgICAgIGtTdGF0dXNfU3VjY2VzcykgJiYKKyAgICAgICAgKChzdGF0dXMgPSB0cm5nX1NldFN0YXRpc3RpY2FsQ2hlY2tMaW1pdChiYXNlLCBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0MSwgJnVzZXJDb25maWctPnJ1bkJpdDFMaW1pdCkpID09CisgICAgICAgICBrU3RhdHVzX1N1Y2Nlc3MpICYmCisgICAgICAgICgoc3RhdHVzID0gdHJuZ19TZXRTdGF0aXN0aWNhbENoZWNrTGltaXQoYmFzZSwga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDIsICZ1c2VyQ29uZmlnLT5ydW5CaXQyTGltaXQpKSA9PQorICAgICAgICAga1N0YXR1c19TdWNjZXNzKSAmJgorICAgICAgICAoKHN0YXR1cyA9IHRybmdfU2V0U3RhdGlzdGljYWxDaGVja0xpbWl0KGJhc2UsIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQzLCAmdXNlckNvbmZpZy0+cnVuQml0M0xpbWl0KSkgPT0KKyAgICAgICAgIGtTdGF0dXNfU3VjY2VzcykgJiYKKyAgICAgICAgKChzdGF0dXMgPSB0cm5nX1NldFN0YXRpc3RpY2FsQ2hlY2tMaW1pdChiYXNlLCBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0NCwgJnVzZXJDb25maWctPnJ1bkJpdDRMaW1pdCkpID09CisgICAgICAgICBrU3RhdHVzX1N1Y2Nlc3MpICYmCisgICAgICAgICgoc3RhdHVzID0gdHJuZ19TZXRTdGF0aXN0aWNhbENoZWNrTGltaXQoYmFzZSwga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDUsICZ1c2VyQ29uZmlnLT5ydW5CaXQ1TGltaXQpKSA9PQorICAgICAgICAga1N0YXR1c19TdWNjZXNzKSAmJgorICAgICAgICAoKHN0YXR1cyA9IHRybmdfU2V0U3RhdGlzdGljYWxDaGVja0xpbWl0KGJhc2UsIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQ2UGx1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlckNvbmZpZy0+cnVuQml0NlBsdXNMaW1pdCkpID09IGtTdGF0dXNfU3VjY2VzcykgJiYKKyAgICAgICAgKChzdGF0dXMgPSB0cm5nX1NldFN0YXRpc3RpY2FsQ2hlY2tMaW1pdChiYXNlLCBrVFJOR19TdGF0aXN0aWNhbENoZWNrUG9rZXIsICZ1c2VyQ29uZmlnLT5wb2tlckxpbWl0KSkgPT0KKyAgICAgICAgIGtTdGF0dXNfU3VjY2VzcykgJiYKKyAgICAgICAgKChzdGF0dXMgPSB0cm5nX1NldFN0YXRpc3RpY2FsQ2hlY2tMaW1pdChiYXNlLCBrVFJOR19TdGF0aXN0aWNhbENoZWNrRnJlcXVlbmN5Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXJDb25maWctPmZyZXF1ZW5jeUNvdW50TGltaXQpKSA9PSBrU3RhdHVzX1N1Y2Nlc3MpKQorICAgIHsKKyAgICAgICAgVFJOR19XUl9NQ1RMX0ZPUl9TQ0xLKGJhc2UsIHVzZXJDb25maWctPmNsb2NrTW9kZSk7CisgICAgICAgIFRSTkdfV1JfTUNUTF9PU0NfRElWKGJhc2UsIHVzZXJDb25maWctPnJpbmdPc2NEaXYpOworICAgICAgICBUUk5HX1dSX01DVExfU0FNUF9NT0RFKGJhc2UsIHVzZXJDb25maWctPnNhbXBsZU1vZGUpOworICAgICAgICBUUk5HX1dSX1NEQ1RMX0VOVF9ETFkoYmFzZSwgdXNlckNvbmZpZy0+ZW50cm9weURlbGF5KTsKKyAgICAgICAgVFJOR19XUl9TRENUTF9TQU1QX1NJWkUoYmFzZSwgdXNlckNvbmZpZy0+c2FtcGxlU2l6ZSk7CisgICAgICAgIFRSTkdfV1JfU0JMSU1fU0JfTElNKGJhc2UsIHVzZXJDb25maWctPnNwYXJzZUJpdExpbWl0KTsKKyAgICAgICAgVFJOR19XUl9TQ01JU0NfTFJVTl9NQVgoYmFzZSwgdXNlckNvbmZpZy0+bG9uZ1J1bk1heExpbWl0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKiEKKyAqIEBicmllZiBHZXRzIGEgZW50cnkgZGF0YSBmcm9tIHRoZSBUUk5HLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBhbiBlbnRyb3B5IGRhdGEgZnJvbSBUUk5HLgorICogRW50cm9weSBkYXRhIGlzIHNwcmVhZCBvdmVyIFRSTkdfRU5UX0NPVU5UIHJlZ2lzdGVycy4KKyAqIFJlYWQgcmVnaXN0ZXIgbnVtYmVyIGlzIGRlZmluZWQgYnkgaW5kZXggcGFyYW1ldGVyLgorKi8KK3N0YXRpYyB1aW50MzJfdCB0cm5nX1JlYWRFbnRyb3B5KFRSTkdfVHlwZSAqYmFzZSwgdWludDMyX3QgaW5kZXgpCit7CisgICAgdWludDMyX3QgZGF0YTsKKworICAgIGluZGV4ID0gaW5kZXggJSBUUk5HX0VOVF9DT1VOVDsgLyogVGhpcyB3YXkgd2UgY2FuIHVzZSBpbmNyZW1lbnRhbCBpbmRleCB3aXRob3V0IGxpbWl0IGNvbnRyb2wgZnJvbSBhcHBsaWNhdGlvbi4qLworCisgICAgZGF0YSA9IFRSTkdfUkRfRU5UKGJhc2UsIGluZGV4KTsKKworICAgIGlmIChpbmRleCA9PSAoVFJOR19FTlRfQ09VTlQgLSAxKSkKKyAgICB7CisgICAgICAgIC8qIER1bW15IHJlYWQuIERlZmVjdCB3b3JrYXJvdW5kLgorICAgICAgICAgKiBUUk5HIGNvdWxkIG5vdCBjbGVhciBFTlRfVkFMICBmbGFnIGF1dG9tYXRpY2FsbHksIGFwcGxpY2F0aW9uCisgICAgICAgICAqIGhhZCB0byBkbyBhIGR1bW15IHJlYWRpbmcgb3BlcmF0aW9uIGZvciBhbnlvbmUgVFJORyByZWdpc3RlcgorICAgICAgICAgKiB0byBjbGVhciBpdCBmaXJzdGx5LCB0aGVuIHRvIHJlYWQgdGhlIFJURU5UMCB0byBSVEVOVDE1IGFnYWluICovCisgICAgICAgIGluZGV4ID0gVFJOR19SRF9FTlQoYmFzZSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3N0YXR1c190IFRSTkdfSW5pdChUUk5HX1R5cGUgKmJhc2UsIGNvbnN0IHRybmdfY29uZmlnX3QgKnVzZXJDb25maWcpCit7CisgICAgc3RhdHVzX3QgcmVzdWx0OworCisgICAgLyogQ2hlY2sgaW5wdXQgcGFyYW1ldGVycy4qLworICAgIGlmICgoYmFzZSAhPSAwKSAmJiAodXNlckNvbmZpZyAhPSAwKSkKKyAgICB7CisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgICAgICAvKiBFbmFibGUgdGhlIGNsb2NrIGdhdGUuICovCisgICAgICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfdHJuZ0Nsb2NrW3RybmdfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworICAgICAgICAvKiBSZXNldCB0aGUgcmVnaXN0ZXJzIG9mIFRSTkcgbW9kdWxlIHRvIHJlc2V0IHN0YXRlLiAqLworICAgICAgICAvKiBNdXN0IGJlIGluIHByb2dyYW0gbW9kZS4qLworICAgICAgICBUUk5HX1dSX01DVExfUFJHTShiYXNlLCBrVFJOR19Xb3JrTW9kZVByb2dyYW0pOworICAgICAgICAvKiBSZXNldCBEZWZhdWx0cy4qLworICAgICAgICBUUk5HX1dSX01DVExfUlNUX0RFRihiYXNlLCAxKTsKKworICAgICAgICAvKiBTZXQgY29uZmlndXJhdGlvbi4qLworICAgICAgICBpZiAoKHJlc3VsdCA9IHRybmdfQXBwbHlVc2VyQ29uZmlnKGJhc2UsIHVzZXJDb25maWcpKSA9PSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFN0YXJ0IGVudHJvcHkgZ2VuZXJhdGlvbi4qLworICAgICAgICAgICAgLyogU2V0IHRvIFJ1biBtb2RlLiovCisgICAgICAgICAgICBUUk5HX1dSX01DVExfUFJHTShiYXNlLCBrVFJOR19Xb3JrTW9kZVJ1bik7CisgICAgICAgICAgICAvKiBFbmFibGUgVFJORyBBY2Nlc3MgTW9kZS4gVG8gZ2VuZXJhdGUgYW4gRW50cm9weQorICAgICAgICAgICAgKiB2YWx1ZSB0aGF0IGNhbiBiZSByZWFkIHZpYSB0aGUgdHJ1ZTAtdHJ1ZTE1IHJlZ2lzdGVycy4qLworICAgICAgICAgICAgVFJOR19XUl9NQ1RMX1RSTkdfQUNDKGJhc2UsIDEpOworCisgICAgICAgICAgICBpZiAodXNlckNvbmZpZy0+bG9jayA9PSAxKSAvKiBEaXNhYmxlIHByb2dyYW1tYWJpbGl0eSBvZiBUUk5HIHJlZ2lzdGVycy4gKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUUk5HX1dSX1NFQ19DRkdfTk9fUFJHTShiYXNlLCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgVFJOR19EZWluaXQoVFJOR19UeXBlICpiYXNlKQoreworICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMuKi8KKyAgICBpZiAoYmFzZSkKKyAgICB7CisgICAgICAgIC8qIE1vdmUgdG8gcHJvZ3JhbSBtb2RlLiBTdG9wIGVudHJvcHkgZ2VuZXJhdGlvbi4qLworICAgICAgICBUUk5HX1dSX01DVExfUFJHTShiYXNlLCBrVFJOR19Xb3JrTW9kZVByb2dyYW0pOworCisgICAgICAgIC8qIENoZWNrIGJlZm9yZSBjbG9jayBzdG9wLgorICAgICAgICAgVFJORyB0dXJucyBvbiB0aGUgVFJORyBmcmVlLXJ1bm5pbmcgcmluZyBvc2NpbGxhdG9yIHdoZW5ldmVyIG5ldyBlbnRyb3B5CisgICAgICAgICBpcyBiZWluZyBnZW5lcmF0ZWQgYW5kIHR1cm5zIG9mZiB0aGUgcmluZyBvc2NpbGxhdG9yIHdoZW4gZW50cm9weSBnZW5lcmF0aW9uCisgICAgICAgICBpcyBjb21wbGV0ZS4gSWYgdGhlIFRSTkcgY2xvY2sgaXMgc3RvcHBlZCB3aGlsZSB0aGUgVFJORyByaW5nIG9zY2lsbGF0b3IKKyAgICAgICAgIGlzIHJ1bm5pbmcsIHRoZSBvc2NpbGxhdG9yIGNvbnRpbnVlcyBydW5uaW5nIHRob3VnaCB0aGUgUk5HIGNsb2NrLgorICAgICAgICAgaXMgc3RvcHBlZC4gKi8KKyAgICAgICAgd2hpbGUgKFRSTkdfUkRfTUNUTF9UU1RPUF9PSyhiYXNlKSA9PSAwKQorICAgICAgICB7CisgICAgICAgIH0KKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAgICAgLyogRGlzYWJsZSBDbG9jayovCisgICAgICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX3RybmdDbG9ja1t0cm5nX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisgICAgfQorfQorCitzdGF0dXNfdCBUUk5HX0dldFJhbmRvbURhdGEoVFJOR19UeXBlICpiYXNlLCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YVNpemUpCit7CisgICAgc3RhdHVzX3QgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworICAgIHVpbnQzMl90IHJhbmRvbV8zMjsKKyAgICB1aW50OF90ICpyYW5kb21fcDsKKyAgICB1aW50MzJfdCByYW5kb21fc2l6ZTsKKyAgICB1aW50OF90ICpkYXRhX3AgPSAodWludDhfdCAqKWRhdGE7CisgICAgdWludDMyX3QgaTsKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgLyogQ2hlY2sgaW5wdXQgcGFyYW1ldGVycy4qLworICAgIGlmIChiYXNlICYmIGRhdGEgJiYgZGF0YVNpemUpCisgICAgeworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICAvKiBXYWl0IGZvciBWYWxpZCBvciBFcnJvciBmbGFnKi8KKyAgICAgICAgICAgIHdoaWxlICgoVFJOR19SRF9NQ1RMX0VOVF9WQUwoYmFzZSkgPT0gMCkgJiYgKFRSTkdfUkRfTUNUTF9FUlIoYmFzZSkgPT0gMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENoZWNrIEhXIGVycm9yLiovCisgICAgICAgICAgICBpZiAoVFJOR19SRF9NQ1RMX0VSUihiYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0ZhaWw7IC8qIFRSTkcgbW9kdWxlIGVycm9yIG9jY3VycmVkICovCisgICAgICAgICAgICAgICAgLyogQ2xlYXIgZXJyb3IuKi8KKyAgICAgICAgICAgICAgICBUUk5HX1dSX01DVExfRVJSKGJhc2UsIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBObyBzZW5zZSBzdGF5IGhlcmUuKi8KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogUmVhZCBFbnRyb3B5LiovCisgICAgICAgICAgICByYW5kb21fMzIgPSB0cm5nX1JlYWRFbnRyb3B5KGJhc2UsIGluZGV4KyspOworCisgICAgICAgICAgICByYW5kb21fcCA9ICh1aW50OF90ICopJnJhbmRvbV8zMjsKKworICAgICAgICAgICAgaWYgKGRhdGFTaXplIDwgc2l6ZW9mKHJhbmRvbV8zMikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmFuZG9tX3NpemUgPSBkYXRhU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByYW5kb21fc2l6ZSA9IHNpemVvZihyYW5kb21fMzIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGkgPSAwVTsgaSA8IHJhbmRvbV9zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmRhdGFfcCsrID0gKnJhbmRvbV9wKys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRhdGFTaXplIC09IHJhbmRvbV9zaXplOworICAgICAgICB9IHdoaWxlIChkYXRhU2l6ZSA+IDApOworCisgICAgICAgIC8qIFN0YXJ0IGEgbmV3IGVudHJvcHkgZ2VuZXJhdGlvbi4KKyAgICAgICAgSXQgaXMgZG9uZSBieSByZWFkaW5nIG9mIHRoZSBsYXN0IGVudHJvcHkgcmVnaXN0ZXIuKi8KKyAgICAgICAgaWYgKChpbmRleCAlIFRSTkdfRU5UX0NPVU5UKSAhPSAoVFJOR19FTlRfQ09VTlQgLSAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJuZ19SZWFkRW50cm9weShiYXNlLCAoVFJOR19FTlRfQ09VTlQgLSAxKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NPQ19UUk5HX0NPVU5UICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90cm5nLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90cm5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4M2VlOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RybmcuaApAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9UUk5HX0RSSVZFUl9IXworI2RlZmluZSBfRlNMX1RSTkdfRFJJVkVSX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19UUk5HX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfVFJOR19DT1VOVAorCisvKiEKKyAqIEBhZGR0b2dyb3VwIHRybmcKKyAqIEB7CisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBUUk5HIGRyaXZlciB2ZXJzaW9uIDIuMC4xLiAKKyAqCisgKiBDdXJyZW50IHZlcnNpb246IDIuMC4xCisgKgorICogQ2hhbmdlIGxvZzoKKyAqIC0gVmVyc2lvbiAyLjAuMQorICogICAtIGFkZCBzdXBwb3J0IGZvciBLTDh4IGFuZCBLTDI4WgorICogICAtIHVwZGF0ZSBkZWZhdWx0IE9TQ0RJViBmb3IgSzgxIHRvIGRpdmlkZSBieSAyCisgKi8KKyNkZWZpbmUgRlNMX1RSTkdfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAwLCAxKSkKKy8qQH0qLworCisvKiEgQGJyaWVmIFRSTkcgc2FtcGxlIG1vZGUuIFVzZWQgYnkgdHJuZ19jb25maWdfdC4gKi8KK3R5cGVkZWYgZW51bSBfdHJuZ19zYW1wbGVfbW9kZQoreworICAgIGtUUk5HX1NhbXBsZU1vZGVWb25OZXVtYW5uID0gMFUsIC8qITwgVXNlIHZvbiBOZXVtYW5uIGRhdGEgaW4gYm90aCBFbnRyb3B5IHNoaWZ0ZXIgYW5kIFN0YXRpc3RpY2FsIENoZWNrZXIuICovCisgICAga1RSTkdfU2FtcGxlTW9kZVJhdyA9IDFVLCAgICAgICAgLyohPCBVc2UgcmF3IGRhdGEgaW50byBib3RoIEVudHJvcHkgc2hpZnRlciBhbmQgU3RhdGlzdGljYWwgQ2hlY2tlci4gKi8KKyAgICBrVFJOR19TYW1wbGVNb2RlVm9uTmV1bWFublJhdyA9CisgICAgICAgIDJVIC8qITwgVXNlIHZvbiBOZXVtYW5uIGRhdGEgaW4gRW50cm9weSBzaGlmdGVyLiBVc2UgcmF3IGRhdGEgaW50byBTdGF0aXN0aWNhbCBDaGVja2VyLiAqLworfSB0cm5nX3NhbXBsZV9tb2RlX3Q7CisKKy8qISBAYnJpZWYgVFJORyBjbG9jayBtb2RlLiBVc2VkIGJ5IHRybmdfY29uZmlnX3QuICovCit0eXBlZGVmIGVudW0gX3RybmdfY2xvY2tfbW9kZQoreworICAgIGtUUk5HX0Nsb2NrTW9kZVJpbmdPc2NpbGxhdG9yID0gMFUsIC8qITwgUmluZyBvc2NpbGxhdG9yIGlzIHVzZWQgdG8gb3BlcmF0ZSB0aGUgVFJORyAoZGVmYXVsdCkuICovCisgICAga1RSTkdfQ2xvY2tNb2RlU3lzdGVtID0gMVUgICAgICAgICAgLyohPCBTeXN0ZW0gY2xvY2sgaXMgdXNlZCB0byBvcGVyYXRlIHRoZSBUUk5HLiBUaGlzIGlzIGZvciB0ZXN0IHVzZSBvbmx5LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlIHJlc3VsdHMgbWF5IG9jY3VyLiAqLworfSB0cm5nX2Nsb2NrX21vZGVfdDsKKworLyohIEBicmllZiBUUk5HIHJpbmcgb3NjaWxsYXRvciBkaXZpZGUuIFVzZWQgYnkgdHJuZ19jb25maWdfdC4gKi8KK3R5cGVkZWYgZW51bSBfdHJuZ19yaW5nX29zY19kaXYKK3sKKyAgICBrVFJOR19SaW5nT3NjRGl2MCA9IDBVLCAvKiE8IFJpbmcgb3NjaWxsYXRvciB3aXRoIG5vIGRpdmlkZSAqLworICAgIGtUUk5HX1JpbmdPc2NEaXYyID0gMVUsIC8qITwgUmluZyBvc2NpbGxhdG9yIGRpdmlkZWQtYnktMi4gKi8KKyAgICBrVFJOR19SaW5nT3NjRGl2NCA9IDJVLCAvKiE8IFJpbmcgb3NjaWxsYXRvciBkaXZpZGVkLWJ5LTQuICovCisgICAga1RSTkdfUmluZ09zY0RpdjggPSAzVSAgLyohPCBSaW5nIG9zY2lsbGF0b3IgZGl2aWRlZC1ieS04LiAqLworfSB0cm5nX3Jpbmdfb3NjX2Rpdl90OworCisvKiEgQGJyaWVmIERhdGEgc3RydWN0dXJlIGZvciBkZWZpbml0aW9uIG9mIHN0YXRpc3RpY2FsIGNoZWNrIGxpbWl0cy4gVXNlZCBieSB0cm5nX2NvbmZpZ190LiAqLwordHlwZWRlZiBzdHJ1Y3QgX3Rybmdfc3RhdGlzdGljYWxfY2hlY2tfbGltaXQKK3sKKyAgICB1aW50MzJfdCBtYXhpbXVtOyAvKiE8IE1heGltdW0gbGltaXQuKi8KKyAgICB1aW50MzJfdCBtaW5pbXVtOyAvKiE8IE1pbmltdW0gbGltaXQuKi8KK30gdHJuZ19zdGF0aXN0aWNhbF9jaGVja19saW1pdF90OworCisvKiEKKyAqIEBicmllZiBEYXRhIHN0cnVjdHVyZSBmb3IgdGhlIFRSTkcgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpbml0aWFsaXplcyB0aGUgVFJORyBieSBjYWxsaW5nIHRoZSB0aGUgVFJOR19Jbml0KCkgZnVuY3Rpb24uCisgKiBJdCBjb250YWlucyBhbGwgVFJORyBjb25maWd1cmF0aW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3RybmdfdXNlcl9jb25maWcKK3sKKyAgICBib29sIGxvY2s7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgQGJyaWVmIERpc2FibGUgcHJvZ3JhbW1hYmlsaXR5IG9mIFRSTkcgcmVnaXN0ZXJzLiAgKi8KKyAgICB0cm5nX2Nsb2NrX21vZGVfdCBjbG9ja01vZGU7ICAgIC8qITwgQGJyaWVmIENsb2NrIG1vZGUgdXNlZCB0byBvcGVyYXRlIFRSTkcuKi8KKyAgICB0cm5nX3Jpbmdfb3NjX2Rpdl90IHJpbmdPc2NEaXY7IC8qITwgQGJyaWVmIFJpbmcgb3NjaWxsYXRvciBkaXZpZGUgdXNlZCBieSBUUk5HLiAqLworICAgIHRybmdfc2FtcGxlX21vZGVfdCBzYW1wbGVNb2RlOyAgLyohPCBAYnJpZWYgU2FtcGxlIG1vZGUgb2YgdGhlIFRSTkcgcmluZyBvc2NpbGxhdG9yLiAqLworICAgIC8qIFNlZWQgQ29udHJvbCovCisgICAgdWludDE2X3QKKyAgICAgICAgZW50cm9weURlbGF5OyAvKiE8IEBicmllZiBFbnRyb3B5IERlbGF5LiBEZWZpbmVzIHRoZSBsZW5ndGggKGluIHN5c3RlbSBjbG9ja3MpIG9mIGVhY2ggRW50cm9weSBzYW1wbGUgdGFrZW4uICovCisgICAgdWludDE2X3Qgc2FtcGxlU2l6ZTsgLyohPCBAYnJpZWYgU2FtcGxlIFNpemUuIERlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiBFbnRyb3B5IHNhbXBsZXMgdGhhdCB3aWxsIGJlIHRha2VuIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICB1aW50MTZfdAorICAgICAgICBzcGFyc2VCaXRMaW1pdDsgLyohPCBAYnJpZWYgU3BhcnNlIEJpdCBMaW1pdCB3aGljaCBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICAgICAgKiBjb25zZWN1dGl2ZSBzYW1wbGVzIHRoYXQgbWF5IGJlIGRpc2NhcmRlZCBiZWZvcmUgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGlzIGxpbWl0IGlzIHVzZWQgb25seSBmb3IgZHVyaW5nIHZvbiBOZXVtYW5uIHNhbXBsaW5nIChlbmFibGVkIGJ5IFRSTkdfSEFMX1NldFNhbXBsZU1vZGUoKSkuCisgICAgICAgICAgICAgICAgICAgICAgICAqIFNhbXBsZXMgYXJlIGRpc2NhcmRlZCBpZiB0d28gY29uc2VjdXRpdmUgcmF3IHNhbXBsZXMgYXJlIGJvdGggMCBvciBib3RoIDEuIElmCisgICAgICAgICAgICAgICAgICAgICAgICAqIHRoaXMgZGlzY2FyZGluZyBvY2N1cnMgZm9yIGEgbG9uZyBwZXJpb2Qgb2YgdGltZSwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICogaW5zdWZmaWNpZW50IEVudHJvcHkuICovCisgICAgLyogU3RhdGlzdGljYWwgQ2hlY2sgUGFyYW1ldGVycy4qLworICAgIHVpbnQ4X3QgcmV0cnlDb3VudDsgICAgICAvKiE8IEBicmllZiBSZXRyeSBjb3VudC4gSXQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgc3RhdGlzdGljYWwgY2hlY2sgbWF5IGZhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZHVyaW5nIHRoZSBUUk5HIEVudHJvcHkgR2VuZXJhdGlvbiBiZWZvcmUgZ2VuZXJhdGluZyBhbiBlcnJvci4gKi8KKyAgICB1aW50OF90IGxvbmdSdW5NYXhMaW1pdDsgLyohPCBAYnJpZWYgTGFyZ2VzdCBhbGxvd2FibGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNhbXBsZXMgb2YgYWxsIDEsIG9yIGFsbCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoYXQgaXMgYWxsb3dlZCBkdXJpbmcgdGhlIEVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICB0cm5nX3N0YXRpc3RpY2FsX2NoZWNrX2xpbWl0X3QKKyAgICAgICAgbW9ub2JpdExpbWl0OyAvKiE8IEBicmllZiBNYXhpbXVtIGFuZCBtaW5pbXVtIGxpbWl0cyBmb3Igc3RhdGlzdGljYWwgY2hlY2sgb2YgbnVtYmVyIG9mIG9uZXMvemVybyBkZXRlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uICovCisgICAgdHJuZ19zdGF0aXN0aWNhbF9jaGVja19saW1pdF90CisgICAgICAgIHJ1bkJpdDFMaW1pdDsgLyohPCBAYnJpZWYgTWF4aW11bSBhbmQgbWluaW11bSBsaW1pdHMgZm9yIHN0YXRpc3RpY2FsIGNoZWNrIG9mIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAxCisgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICB0cm5nX3N0YXRpc3RpY2FsX2NoZWNrX2xpbWl0X3QKKyAgICAgICAgcnVuQml0MkxpbWl0OyAvKiE8IEBicmllZiBNYXhpbXVtIGFuZCBtaW5pbXVtIGxpbWl0cyBmb3Igc3RhdGlzdGljYWwgY2hlY2sgb2YgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDIKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiAqLworICAgIHRybmdfc3RhdGlzdGljYWxfY2hlY2tfbGltaXRfdAorICAgICAgICBydW5CaXQzTGltaXQ7IC8qITwgQGJyaWVmIE1heGltdW0gYW5kIG1pbmltdW0gbGltaXRzIGZvciBzdGF0aXN0aWNhbCBjaGVjayBvZiBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggMworICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uICovCisgICAgdHJuZ19zdGF0aXN0aWNhbF9jaGVja19saW1pdF90CisgICAgICAgIHJ1bkJpdDRMaW1pdDsgLyohPCBAYnJpZWYgTWF4aW11bSBhbmQgbWluaW11bSBsaW1pdHMgZm9yIHN0YXRpc3RpY2FsIGNoZWNrIG9mIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCA0CisgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICB0cm5nX3N0YXRpc3RpY2FsX2NoZWNrX2xpbWl0X3QKKyAgICAgICAgcnVuQml0NUxpbWl0OyAvKiE8IEBicmllZiBNYXhpbXVtIGFuZCBtaW5pbXVtIGxpbWl0cyBmb3Igc3RhdGlzdGljYWwgY2hlY2sgb2YgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDUKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiAqLworICAgIHRybmdfc3RhdGlzdGljYWxfY2hlY2tfbGltaXRfdCBydW5CaXQ2UGx1c0xpbWl0OyAvKiE8IEBicmllZiBNYXhpbXVtIGFuZCBtaW5pbXVtIGxpbWl0cyBmb3Igc3RhdGlzdGljYWwgY2hlY2sgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDYgb3IgbW9yZSBkZXRlY3RlZCBkdXJpbmcgZW50cm9weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uLiAqLworICAgIHRybmdfc3RhdGlzdGljYWxfY2hlY2tfbGltaXRfdAorICAgICAgICBwb2tlckxpbWl0OyAvKiE8IEBicmllZiBNYXhpbXVtIGFuZCBtaW5pbXVtIGxpbWl0cyBmb3Igc3RhdGlzdGljYWwgY2hlY2sgb2YgIlBva2VyIFRlc3QiLiAqLworICAgIHRybmdfc3RhdGlzdGljYWxfY2hlY2tfbGltaXRfdAorICAgICAgICBmcmVxdWVuY3lDb3VudExpbWl0OyAvKiE8IEBicmllZiBNYXhpbXVtIGFuZCBtaW5pbXVtIGxpbWl0cyBmb3Igc3RhdGlzdGljYWwgY2hlY2sgb2YgZW50cm9weSBzYW1wbGUgZnJlcXVlbmN5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LiAqLworfSB0cm5nX2NvbmZpZ190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgdXNlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byBkZWZhdWx0IHZhbHVlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byBkZWZhdWx0IHZhbHVlcy4gVGhlIGRlZmF1bHQKKyAqIHZhbHVlcyBhcmUgYXMgZm9sbG93cy4KKyAqIEBjb2RlCisgKiAgICAgdXNlcl9jb25maWctPmxvY2sgPSAwOworICogICAgIHVzZXJfY29uZmlnLT5jbG9ja01vZGUgPSBrVFJOR19DbG9ja01vZGVSaW5nT3NjaWxsYXRvcjsKKyAqICAgICB1c2VyX2NvbmZpZy0+cmluZ09zY0RpdiA9IGtUUk5HX1JpbmdPc2NEaXYwOyAgT3IgIHRvIG90aGVyIGtUUk5HX1JpbmdPc2NEaXZbMnw4XSBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorICogICAgIHVzZXJfY29uZmlnLT5zYW1wbGVNb2RlID0ga1RSTkdfU2FtcGxlTW9kZVJhdzsKKyAqICAgICB1c2VyX2NvbmZpZy0+ZW50cm9weURlbGF5ID0gMzIwMDsKKyAqICAgICB1c2VyX2NvbmZpZy0+c2FtcGxlU2l6ZSA9IDI1MDA7CisgKiAgICAgdXNlcl9jb25maWctPnNwYXJzZUJpdExpbWl0ID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1NQQVJTRV9CSVRfTElNSVQ7CisgKiAgICAgdXNlcl9jb25maWctPnJldHJ5Q291bnQgPSA2MzsKKyAqICAgICB1c2VyX2NvbmZpZy0+bG9uZ1J1bk1heExpbWl0ID0gMzQ7CisgKiAgICAgdXNlcl9jb25maWctPm1vbm9iaXRMaW1pdC5tYXhpbXVtID0gMTM4NDsKKyAqICAgICB1c2VyX2NvbmZpZy0+bW9ub2JpdExpbWl0Lm1pbmltdW0gPSAxMTE2OworICogICAgIHVzZXJfY29uZmlnLT5ydW5CaXQxTGltaXQubWF4aW11bSA9IDQwNTsKKyAqICAgICB1c2VyX2NvbmZpZy0+cnVuQml0MUxpbWl0Lm1pbmltdW0gPSAyMjc7CisgKiAgICAgdXNlcl9jb25maWctPnJ1bkJpdDJMaW1pdC5tYXhpbXVtID0gMjIwOworICogICAgIHVzZXJfY29uZmlnLT5ydW5CaXQyTGltaXQubWluaW11bSA9IDk4OworICogICAgIHVzZXJfY29uZmlnLT5ydW5CaXQzTGltaXQubWF4aW11bSA9IDEyNTsKKyAqICAgICB1c2VyX2NvbmZpZy0+cnVuQml0M0xpbWl0Lm1pbmltdW0gPSAzNzsKKyAqICAgICB1c2VyX2NvbmZpZy0+cnVuQml0NExpbWl0Lm1heGltdW0gPSA3NTsKKyAqICAgICB1c2VyX2NvbmZpZy0+cnVuQml0NExpbWl0Lm1pbmltdW0gPSAxMTsKKyAqICAgICB1c2VyX2NvbmZpZy0+cnVuQml0NUxpbWl0Lm1heGltdW0gPSA0NzsKKyAqICAgICB1c2VyX2NvbmZpZy0+cnVuQml0NUxpbWl0Lm1pbmltdW0gPSAxOworICogICAgIHVzZXJfY29uZmlnLT5ydW5CaXQ2UGx1c0xpbWl0Lm1heGltdW0gPSA0NzsKKyAqICAgICB1c2VyX2NvbmZpZy0+cnVuQml0NlBsdXNMaW1pdC5taW5pbXVtID0gMTsKKyAqICAgICB1c2VyX2NvbmZpZy0+cG9rZXJMaW1pdC5tYXhpbXVtID0gMjY5MTI7CisgKiAgICAgdXNlcl9jb25maWctPnBva2VyTGltaXQubWluaW11bSA9IDI0NDQ1OworICogICAgIHVzZXJfY29uZmlnLT5mcmVxdWVuY3lDb3VudExpbWl0Lm1heGltdW0gPSAyNTYwMDsKKyAqICAgICB1c2VyX2NvbmZpZy0+ZnJlcXVlbmN5Q291bnRMaW1pdC5taW5pbXVtID0gMTYwMDsKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIHVzZXJfY29uZmlnICAgVXNlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqIEByZXR1cm4gSWYgc3VjY2Vzc2Z1bCwgcmV0dXJucyB0aGUga1N0YXR1c19UUk5HX1N1Y2Nlc3MuIE90aGVyd2lzZSwgaXQgcmV0dXJucyBhbiBlcnJvci4KKyAqLworc3RhdHVzX3QgVFJOR19HZXREZWZhdWx0Q29uZmlnKHRybmdfY29uZmlnX3QgKnVzZXJDb25maWcpOworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgVFJORy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBUUk5HLgorICogV2hlbiBjYWxsZWQsIHRoZSBUUk5HIGVudHJvcHkgZ2VuZXJhdGlvbiBzdGFydHMgaW1tZWRpYXRlbHkuCisgKgorICogQHBhcmFtIGJhc2UgIFRSTkcgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gdXNlckNvbmZpZyAgICBQb2ludGVyIHRvIHRoZSBpbml0aWFsaXphdGlvbiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqIEByZXR1cm4gSWYgc3VjY2Vzc2Z1bCwgcmV0dXJucyB0aGUga1N0YXR1c19UUk5HX1N1Y2Nlc3MuIE90aGVyd2lzZSwgaXQgcmV0dXJucyBhbiBlcnJvci4KKyAqLworc3RhdHVzX3QgVFJOR19Jbml0KFRSTkdfVHlwZSAqYmFzZSwgY29uc3QgdHJuZ19jb25maWdfdCAqdXNlckNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIFNodXRzIGRvd24gdGhlIFRSTkcuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaHV0cyBkb3duIHRoZSBUUk5HLgorICoKKyAqIEBwYXJhbSBiYXNlICBUUk5HIGJhc2UgYWRkcmVzcy4KKyAqLwordm9pZCBUUk5HX0RlaW5pdChUUk5HX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHJhbmRvbSBkYXRhLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyByYW5kb20gZGF0YSBmcm9tIHRoZSBUUk5HLgorICoKKyAqIEBwYXJhbSBiYXNlICBUUk5HIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBkYXRhICBQb2ludGVyIGFkZHJlc3MgdXNlZCB0byBzdG9yZSByYW5kb20gZGF0YS4KKyAqIEBwYXJhbSBkYXRhU2l6ZSAgU2l6ZSBvZiB0aGUgYnVmZmVyIHBvaW50ZWQgYnkgdGhlIGRhdGEgcGFyYW1ldGVyLgorICogQHJldHVybiByYW5kb20gZGF0YQorICovCitzdGF0dXNfdCBUUk5HX0dldFJhbmRvbURhdGEoVFJOR19UeXBlICpiYXNlLCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YVNpemUpOworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisvKiEgQH0qLworCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU09DX1RSTkdfQ09VTlQgKi8KKyNlbmRpZiAvKl9GU0xfVFJOR19IXyovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90c2lfdjQuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RzaV92NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyOTljOTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90c2lfdjQuYwpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCAtIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImZzbF90c2lfdjQuaCIKKwordm9pZCBUU0lfSW5pdChUU0lfVHlwZSAqYmFzZSwgY29uc3QgdHNpX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNvbmZpZyAhPSBOVUxMKTsKKworICAgIGJvb2wgaXNfbW9kdWxlX2VuYWJsZWQgPSBmYWxzZTsKKyAgICBib29sIGlzX2ludF9lbmFibGVkID0gZmFsc2U7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soa0NMT0NLX1RzaTApOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworICAgIGlmIChiYXNlLT5HRU5DUyAmIFRTSV9HRU5DU19UU0lFTl9NQVNLKQorICAgIHsKKyAgICAgICAgaXNfbW9kdWxlX2VuYWJsZWQgPSB0cnVlOworICAgICAgICBUU0lfRW5hYmxlTW9kdWxlKGJhc2UsIGZhbHNlKTsKKyAgICB9CisgICAgaWYgKGJhc2UtPkdFTkNTICYgVFNJX0dFTkNTX1RTSUlFTl9NQVNLKQorICAgIHsKKyAgICAgICAgaXNfaW50X2VuYWJsZWQgPSB0cnVlOworICAgICAgICBUU0lfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga1RTSV9HbG9iYWxJbnRlcnJ1cHRFbmFibGUpOworICAgIH0KKyAgICAKKyAgICBpZihjb25maWctPm1vZGUgPT0ga1RTSV9BbmFsb2dNb2RlU2VsX0NhcGFjaXRpdmUpCisgICAgeworICAgICAgVFNJX1NldEhpZ2hUaHJlc2hvbGQoYmFzZSwgY29uZmlnLT50aHJlc2gpOworICAgICAgVFNJX1NldExvd1RocmVzaG9sZChiYXNlLCBjb25maWctPnRocmVzbCk7CisgICAgICBUU0lfU2V0RWxlY3Ryb2RlT1NDUHJlc2NhbGVyKGJhc2UsIGNvbmZpZy0+cHJlc2NhbGVyKTsKKyAgICAgIFRTSV9TZXRSZWZlcmVuY2VDaGFyZ2VDdXJyZW50KGJhc2UsIGNvbmZpZy0+cmVmY2hyZyk7CisgICAgICBUU0lfU2V0RWxlY3Ryb2RlQ2hhcmdlQ3VycmVudChiYXNlLCBjb25maWctPmV4dGNocmcpOworICAgICAgVFNJX1NldE51bWJlck9mU2NhbnMoYmFzZSwgY29uZmlnLT5uc2NuKTsKKyAgICAgIFRTSV9TZXRBbmFsb2dNb2RlKGJhc2UsIGNvbmZpZy0+bW9kZSk7CisgICAgICBUU0lfU2V0T3NjVm9sdGFnZVJhaWxzKGJhc2UsIGNvbmZpZy0+ZHZvbHQpOyAgIAorICAgIH0KKyAgICBlbHNlIC8qIEZvciBub2lzZSBtb2RlcyAqLworICAgIHsgIAorICAgICAgVFNJX1NldEhpZ2hUaHJlc2hvbGQoYmFzZSwgY29uZmlnLT50aHJlc2gpOworICAgICAgVFNJX1NldExvd1RocmVzaG9sZChiYXNlLCBjb25maWctPnRocmVzbCk7CisgICAgICBUU0lfU2V0RWxlY3Ryb2RlT1NDUHJlc2NhbGVyKGJhc2UsIGNvbmZpZy0+cHJlc2NhbGVyKTsKKyAgICAgIFRTSV9TZXRSZWZlcmVuY2VDaGFyZ2VDdXJyZW50KGJhc2UsIGNvbmZpZy0+cmVmY2hyZyk7CisgICAgICBUU0lfU2V0TnVtYmVyT2ZTY2FucyhiYXNlLCBjb25maWctPm5zY24pOworICAgICAgVFNJX1NldEFuYWxvZ01vZGUoYmFzZSwgY29uZmlnLT5tb2RlKTsKKyAgICAgIFRTSV9TZXRPc2NWb2x0YWdlUmFpbHMoYmFzZSwgY29uZmlnLT5kdm9sdCk7CisgICAgICBUU0lfU2V0RWxlY3Ryb2RlU2VyaWVzUmVzaXN0b3IoYmFzZSwgY29uZmlnLT5yZXNpc3Rvcik7CisgICAgICBUU0lfU2V0RmlsdGVyQml0cyhiYXNlLCBjb25maWctPmZpbHRlcik7ICAKKyAgICB9CisgICAgIAorICAgIGlmIChpc19tb2R1bGVfZW5hYmxlZCkKKyAgICB7CisgICAgICAgIFRTSV9FbmFibGVNb2R1bGUoYmFzZSwgdHJ1ZSk7CisgICAgfQorICAgIGlmIChpc19pbnRfZW5hYmxlZCkKKyAgICB7CisgICAgICAgIFRTSV9FbmFibGVJbnRlcnJ1cHRzKGJhc2UsIGtUU0lfR2xvYmFsSW50ZXJydXB0RW5hYmxlKTsKKyAgICB9Cit9CisKK3ZvaWQgVFNJX0RlaW5pdChUU0lfVHlwZSAqYmFzZSkKK3sKKyAgICBiYXNlLT5HRU5DUyA9IDBVOworICAgIGJhc2UtPkRBVEEgPSAwVTsKKyAgICBiYXNlLT5UU0hEID0gMFU7CisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIENMT0NLX0Rpc2FibGVDbG9jayhrQ0xPQ0tfVHNpMCk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCit9CisKK3ZvaWQgVFNJX0dldE5vcm1hbE1vZGVEZWZhdWx0Q29uZmlnKHRzaV9jb25maWdfdCAqdXNlckNvbmZpZykKK3sKKyAgICB1c2VyQ29uZmlnLT50aHJlc2ggPSAwVTsKKyAgICB1c2VyQ29uZmlnLT50aHJlc2wgPSAwVTsKKyAgICB1c2VyQ29uZmlnLT5wcmVzY2FsZXIgPSBrVFNJX0VsZWNPc2NQcmVzY2FsZXJfMmRpdjsKKyAgICB1c2VyQ29uZmlnLT5leHRjaHJnID0ga1RTSV9FeHRPc2NDaGFyZ2VDdXJyZW50XzUwMG5BOworICAgIHVzZXJDb25maWctPnJlZmNocmcgPSBrVFNJX1JlZk9zY0NoYXJnZUN1cnJlbnRfNHVBOworICAgIHVzZXJDb25maWctPm5zY24gPSBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfNXRpbWU7CisgICAgdXNlckNvbmZpZy0+bW9kZSA9IGtUU0lfQW5hbG9nTW9kZVNlbF9DYXBhY2l0aXZlOworICAgIHVzZXJDb25maWctPmR2b2x0ID0ga1RTSV9Pc2NWb2xSYWlsc09wdGlvbl8wOworfQorCit2b2lkIFRTSV9HZXRMb3dQb3dlck1vZGVEZWZhdWx0Q29uZmlnKHRzaV9jb25maWdfdCAqdXNlckNvbmZpZykKK3sKKyAgICB1c2VyQ29uZmlnLT50aHJlc2ggPSA0MDBVOworICAgIHVzZXJDb25maWctPnRocmVzbCA9IDBVOworICAgIHVzZXJDb25maWctPnByZXNjYWxlciA9IGtUU0lfRWxlY09zY1ByZXNjYWxlcl8yZGl2OworICAgIHVzZXJDb25maWctPmV4dGNocmcgPSBrVFNJX0V4dE9zY0NoYXJnZUN1cnJlbnRfNTAwbkE7CisgICAgdXNlckNvbmZpZy0+cmVmY2hyZyA9IGtUU0lfUmVmT3NjQ2hhcmdlQ3VycmVudF80dUE7CisgICAgdXNlckNvbmZpZy0+bnNjbiA9IGtUU0lfQ29uc2VjdXRpdmVTY2Fuc051bWJlcl81dGltZTsKKyAgICB1c2VyQ29uZmlnLT5tb2RlID0ga1RTSV9BbmFsb2dNb2RlU2VsX0NhcGFjaXRpdmU7CisgICAgdXNlckNvbmZpZy0+ZHZvbHQgPSBrVFNJX09zY1ZvbFJhaWxzT3B0aW9uXzA7Cit9CisKK3ZvaWQgVFNJX0NhbGlicmF0ZShUU0lfVHlwZSAqYmFzZSwgdHNpX2NhbGlicmF0aW9uX2RhdGFfdCAqY2FsQnVmZikKK3sKKyAgICBhc3NlcnQoY2FsQnVmZiAhPSBOVUxMKTsKKworICAgIHVpbnQ4X3QgaSA9IDBVOworICAgIGJvb2wgaXNfaW50X2VuYWJsZWQgPSBmYWxzZTsKKworICAgIGlmIChiYXNlLT5HRU5DUyAmIFRTSV9HRU5DU19UU0lJRU5fTUFTSykKKyAgICB7CisgICAgICAgIGlzX2ludF9lbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgVFNJX0Rpc2FibGVJbnRlcnJ1cHRzKGJhc2UsIGtUU0lfR2xvYmFsSW50ZXJydXB0RW5hYmxlKTsKKyAgICB9CisgICAgZm9yIChpID0gMFU7IGkgPCBGU0xfRkVBVFVSRV9UU0lfQ0hBTk5FTF9DT1VOVDsgaSsrKQorICAgIHsKKyAgICAgICAgVFNJX1NldE1lYXN1cmVkQ2hhbm5lbE51bWJlcihiYXNlLCBpKTsKKyAgICAgICAgVFNJX1N0YXJ0U29mdHdhcmVUcmlnZ2VyKGJhc2UpOworICAgICAgICB3aGlsZSAoIShUU0lfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrVFNJX0VuZE9mU2NhbkZsYWcpKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgY2FsQnVmZi0+Y2FsaWJyYXRlZERhdGFbaV0gPSBUU0lfR2V0Q291bnRlcihiYXNlKTsKKyAgICAgICAgVFNJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga1RTSV9FbmRPZlNjYW5GbGFnKTsKKyAgICB9CisgICAgaWYgKGlzX2ludF9lbmFibGVkKQorICAgIHsKKyAgICAgICAgVFNJX0VuYWJsZUludGVycnVwdHMoYmFzZSwga1RTSV9HbG9iYWxJbnRlcnJ1cHRFbmFibGUpOworICAgIH0KK30KKwordm9pZCBUU0lfRW5hYmxlSW50ZXJydXB0cyhUU0lfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICB1aW50MzJfdCByZWdWYWx1ZSA9IGJhc2UtPkdFTkNTICYgKH5BTExfRkxBR1NfTUFTSyk7CisKKyAgICBpZiAobWFzayAmIGtUU0lfR2xvYmFsSW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgcmVnVmFsdWUgfD0gVFNJX0dFTkNTX1RTSUlFTl9NQVNLOworICAgIH0KKyAgICBpZiAobWFzayAmIGtUU0lfT3V0T2ZSYW5nZUludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIHJlZ1ZhbHVlICY9ICh+VFNJX0dFTkNTX0VTT1JfTUFTSyk7CisgICAgfQorICAgIGlmIChtYXNrICYga1RTSV9FbmRPZlNjYW5JbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICByZWdWYWx1ZSB8PSBUU0lfR0VOQ1NfRVNPUl9NQVNLOworICAgIH0KKworICAgIGJhc2UtPkdFTkNTID0gcmVnVmFsdWU7ICAgICAvKiB3cml0ZSB2YWx1ZSB0byByZWdpc3RlciAqLworfQorCit2b2lkIFRTSV9EaXNhYmxlSW50ZXJydXB0cyhUU0lfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICB1aW50MzJfdCByZWdWYWx1ZSA9IGJhc2UtPkdFTkNTICYgKH5BTExfRkxBR1NfTUFTSyk7CisKKyAgICBpZiAobWFzayAmIGtUU0lfR2xvYmFsSW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgcmVnVmFsdWUgJj0gKH5UU0lfR0VOQ1NfVFNJSUVOX01BU0spOworICAgIH0KKyAgICBpZiAobWFzayAmIGtUU0lfT3V0T2ZSYW5nZUludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIHJlZ1ZhbHVlIHw9IFRTSV9HRU5DU19FU09SX01BU0s7CisgICAgfQorICAgIGlmIChtYXNrICYga1RTSV9FbmRPZlNjYW5JbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICByZWdWYWx1ZSAmPSAoflRTSV9HRU5DU19FU09SX01BU0spOworICAgIH0KKworICAgIGJhc2UtPkdFTkNTID0gcmVnVmFsdWU7ICAgICAvKiB3cml0ZSB2YWx1ZSB0byByZWdpc3RlciAqLworfQorCit2b2lkIFRTSV9DbGVhclN0YXR1c0ZsYWdzKFRTSV9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIHVpbnQzMl90IHJlZ1ZhbHVlID0gYmFzZS0+R0VOQ1MgJiAofkFMTF9GTEFHU19NQVNLKTsKKworICAgIGlmIChtYXNrICYga1RTSV9FbmRPZlNjYW5GbGFnKQorICAgIHsKKyAgICAgICAgcmVnVmFsdWUgfD0gVFNJX0dFTkNTX0VPU0ZfTUFTSzsKKyAgICB9CisgICAgaWYgKG1hc2sgJiBrVFNJX091dE9mUmFuZ2VGbGFnKQorICAgIHsKKyAgICAgICAgcmVnVmFsdWUgfD0gVFNJX0dFTkNTX09VVFJHRl9NQVNLOworICAgIH0KKworICAgIGJhc2UtPkdFTkNTID0gcmVnVmFsdWU7ICAgICAvKiB3cml0ZSB2YWx1ZSB0byByZWdpc3RlciAqLworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHNpX3Y0LmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90c2lfdjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzIwNDgwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHNpX3Y0LmgKQEAgLTAsMCArMSw3MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX1RTSV9WNF9IXworI2RlZmluZSBfRlNMX1RTSV9WNF9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIHRzaV92NF9kcml2ZXIKKyAqIEB7CisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgQGJyaWVmIFRTSSBkcml2ZXIgdmVyc2lvbiAqLworI2RlZmluZSBGU0xfVFNJX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMSwgMikpCisvKkB9Ki8KKworLyohIEBicmllZiBUU0kgc3RhdHVzIGZsYWdzIG1hY3JvIGNvbGxlY3Rpb24gKi8KKyNkZWZpbmUgQUxMX0ZMQUdTX01BU0sgIChUU0lfR0VOQ1NfRU9TRl9NQVNLIHwgVFNJX0dFTkNTX09VVFJHRl9NQVNLKQorCisvKiEgQGJyaWVmIHJlc2lzdG9yIGJpdCBzaGlmdCBpbiBFWFRDSFJHIGJpdC1maWVsZCAqLworI2RlZmluZSBUU0lfVjRfRVhUQ0hSR19SRVNJU1RPUl9CSVRfU0hJRlQgVFNJX0dFTkNTX0VYVENIUkdfU0hJRlQKKworLyohIEBicmllZiBmaWx0ZXIgYml0cyBzaGlmdCBpbiBFWFRDSFJHIGJpdC1maWVsZCAgKi8KKyNkZWZpbmUgVFNJX1Y0X0VYVENIUkdfRklMVEVSX0JJVFNfU0hJRlQgKDFVICsgVFNJX0dFTkNTX0VYVENIUkdfU0hJRlQpCisKKy8qISBAYnJpZWYgbWFjcm8gb2YgY2xlYXJpbmcgdGhlIHJlc2lzdG9yIGJpdCBpbiBFWFRDSFJHIGJpdC1maWVsZCAqLworI2RlZmluZSBUU0lfVjRfRVhUQ0hSR19SRVNJU1RPUl9CSVRfQ0xFQVIgXAorICAgICgodWludDMyX3QpKCh+KEFMTF9GTEFHU19NQVNLIHwgVFNJX0dFTkNTX0VYVENIUkdfTUFTSykpIHwgKDNVIDw8IFRTSV9WNF9FWFRDSFJHX0ZJTFRFUl9CSVRTX1NISUZUKSkpCisKKy8qISBAYnJpZWYgbWFjcm8gb2YgY2xlYXJpbmcgdGhlIGZpbHRlciBiaXRzIGluIEVYVENIUkcgYml0LWZpZWxkICovCisjZGVmaW5lIFRTSV9WNF9FWFRDSFJHX0ZJTFRFUl9CSVRTX0NMRUFSIFwKKyAgICAoKHVpbnQzMl90KSgofihBTExfRkxBR1NfTUFTSyB8IFRTSV9HRU5DU19FWFRDSFJHX01BU0spKSB8ICgxVSA8PCBUU0lfVjRfRVhUQ0hSR19SRVNJU1RPUl9CSVRfU0hJRlQpKSkKKworLyohCisgKiBAYnJpZWYgVFNJIG51bWJlciBvZiBzY2FuIGludGVydmFscyBmb3IgZWFjaCBlbGVjdHJvZGUuCisgKgorICogVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0aGUgdHNpIG51bWJlciBvZiBjb25zZWN1dGl2ZSBzY2FucyBpbiBhIFRTSSBpbnN0YW5jZSBmb3IgZWFjaCBlbGVjdHJvZGUuCisgKi8KK3R5cGVkZWYgZW51bSBfdHNpX25fY29uc2VjdXRpdmVfc2NhbnMKK3sKKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMXRpbWUgPSAwVSwgICAvKiE8IE9uY2UgcGVyIGVsZWN0cm9kZSAqLworICAgIGtUU0lfQ29uc2VjdXRpdmVTY2Fuc051bWJlcl8ydGltZSA9IDFVLCAgIC8qITwgVHdpY2UgcGVyIGVsZWN0cm9kZSAqLworICAgIGtUU0lfQ29uc2VjdXRpdmVTY2Fuc051bWJlcl8zdGltZSA9IDJVLCAgIC8qITwgMyB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzR0aW1lID0gM1UsICAgLyohPCA0IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfNXRpbWUgPSA0VSwgICAvKiE8IDUgdGltZXMgY29uc2VjdXRpdmUgc2NhbiAqLworICAgIGtUU0lfQ29uc2VjdXRpdmVTY2Fuc051bWJlcl82dGltZSA9IDVVLCAgIC8qITwgNiB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzd0aW1lID0gNlUsICAgLyohPCA3IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfOHRpbWUgPSA3VSwgICAvKiE8IDggdGltZXMgY29uc2VjdXRpdmUgc2NhbiAqLworICAgIGtUU0lfQ29uc2VjdXRpdmVTY2Fuc051bWJlcl85dGltZSA9IDhVLCAgIC8qITwgOSB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzEwdGltZSA9IDlVLCAgLyohPCAxMCB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzExdGltZSA9IDEwVSwgLyohPCAxMSB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzEydGltZSA9IDExVSwgLyohPCAxMiB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzEzdGltZSA9IDEyVSwgLyohPCAxMyB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzE0dGltZSA9IDEzVSwgLyohPCAxNCB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzE1dGltZSA9IDE0VSwgLyohPCAxNSB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzE2dGltZSA9IDE1VSwgLyohPCAxNiB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzE3dGltZSA9IDE2VSwgLyohPCAxNyB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzE4dGltZSA9IDE3VSwgLyohPCAxOCB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzE5dGltZSA9IDE4VSwgLyohPCAxOSB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzIwdGltZSA9IDE5VSwgLyohPCAyMCB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzIxdGltZSA9IDIwVSwgLyohPCAyMSB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzIydGltZSA9IDIxVSwgLyohPCAyMiB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzIzdGltZSA9IDIyVSwgLyohPCAyMyB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzI0dGltZSA9IDIzVSwgLyohPCAyNCB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzI1dGltZSA9IDI0VSwgLyohPCAyNSB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzI2dGltZSA9IDI1VSwgLyohPCAyNiB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzI3dGltZSA9IDI2VSwgLyohPCAyNyB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzI4dGltZSA9IDI3VSwgLyohPCAyOCB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzI5dGltZSA9IDI4VSwgLyohPCAyOSB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzMwdGltZSA9IDI5VSwgLyohPCAzMCB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzMxdGltZSA9IDMwVSwgLyohPCAzMSB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzMydGltZSA9IDMxVSAgLyohPCAzMiB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCit9IHRzaV9uX2NvbnNlY3V0aXZlX3NjYW5zX3Q7CisKKy8qIQorICogQGJyaWVmIFRTSSBlbGVjdHJvZGUgb3NjaWxsYXRvciBwcmVzY2FsZXIuCisgKgorICogVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0aGUgVFNJIGVsZWN0cm9kZSBvc2NpbGxhdG9yIHByZXNjYWxlciBpbiBhIFRTSSBpbnN0YW5jZS4KKyAqLwordHlwZWRlZiBlbnVtIF90c2lfZWxlY3Ryb2RlX29zY19wcmVzY2FsZXIKK3sKKyAgICBrVFNJX0VsZWNPc2NQcmVzY2FsZXJfMWRpdiA9IDBVLCAgLyohPCBFbGVjdHJvZGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgZGl2aWRlZCBieSAxICovCisgICAga1RTSV9FbGVjT3NjUHJlc2NhbGVyXzJkaXYgPSAxVSwgIC8qITwgRWxlY3Ryb2RlIG9zY2lsbGF0b3IgZnJlcXVlbmN5IGRpdmlkZWQgYnkgMiAqLworICAgIGtUU0lfRWxlY09zY1ByZXNjYWxlcl80ZGl2ID0gMlUsICAvKiE8IEVsZWN0cm9kZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IDQgKi8KKyAgICBrVFNJX0VsZWNPc2NQcmVzY2FsZXJfOGRpdiA9IDNVLCAgLyohPCBFbGVjdHJvZGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgZGl2aWRlZCBieSA4ICovCisgICAga1RTSV9FbGVjT3NjUHJlc2NhbGVyXzE2ZGl2ID0gNFUsIC8qITwgRWxlY3Ryb2RlIG9zY2lsbGF0b3IgZnJlcXVlbmN5IGRpdmlkZWQgYnkgMTYgKi8KKyAgICBrVFNJX0VsZWNPc2NQcmVzY2FsZXJfMzJkaXYgPSA1VSwgLyohPCBFbGVjdHJvZGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgZGl2aWRlZCBieSAzMiAqLworICAgIGtUU0lfRWxlY09zY1ByZXNjYWxlcl82NGRpdiA9IDZVLCAvKiE8IEVsZWN0cm9kZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IDY0ICovCisgICAga1RTSV9FbGVjT3NjUHJlc2NhbGVyXzEyOGRpdiA9IDdVIC8qITwgRWxlY3Ryb2RlIG9zY2lsbGF0b3IgZnJlcXVlbmN5IGRpdmlkZWQgYnkgMTI4ICovCit9IHRzaV9lbGVjdHJvZGVfb3NjX3ByZXNjYWxlcl90OworCisvKiEKKyAqIEBicmllZiBUU0kgYW5hbG9nIG1vZGUgc2VsZWN0LgorICoKKyAqIFNldCB1cCBUU0kgYW5hbG9nIG1vZGVzIGluIGEgVFNJIGluc3RhbmNlLgorICovCit0eXBlZGVmIGVudW0gX3RzaV9hbmFsb2dfbW9kZQoreworICAgIGtUU0lfQW5hbG9nTW9kZVNlbF9DYXBhY2l0aXZlID0gMFUsICAgICAvKiE8IEFjdGl2ZSBUU0kgY2FwYWNpdGl2ZSBzZW5zaW5nIG1vZGUgKi8KKyAgICBrVFNJX0FuYWxvZ01vZGVTZWxfTm9pc2VOb0ZyZXFMaW0gPSA0VSwgLyohPCBTaW5nbGUgdGhyZXNob2xkIG5vaXNlIGRldGVjdGlvbiBtb2RlIHdpdGggbm8gZnJlcS4gbGltaXRhdGlvbi4gKi8KKyAgICBrVFNJX0FuYWxvZ01vZGVTZWxfTm9pc2VGcmVxTGltID0gOFUsICAgLyohPCBTaW5nbGUgdGhyZXNob2xkIG5vaXNlIGRldGVjdGlvbiBtb2RlIHdpdGggZnJlcS4gbGltaXRhdGlvbi4gKi8KKyAgICBrVFNJX0FuYWxvZ01vZGVTZWxfQXV0b05vaXNlID0gMTJVICAgICAgLyohPCBBY3RpdmUgVFNJIGFuYWxvZyBpbiBhdXRvbWF0aWMgbm9pc2UgZGV0ZWN0aW9uIG1vZGUgKi8KK30gdHNpX2FuYWxvZ19tb2RlX3Q7CisKKy8qIQorICogQGJyaWVmIFRTSSBSZWZlcmVuY2Ugb3NjaWxsYXRvciBjaGFyZ2UgYW5kIGRpc2NoYXJnZSBjdXJyZW50IHNlbGVjdC4KKyAqCisgKiBUaGVzZSBjb25zdGFudHMgZGVmaW5lIHRoZSBUU0kgUmVmZXJlbmNlIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQgc2VsZWN0IGluIGEgVFNJIChSRUZDSFJHKSBpbnN0YW5jZS4KKyAqLwordHlwZWRlZiBlbnVtIF90c2lfcmVmZXJlbmNlX29zY19jaGFyZ2VfY3VycmVudAoreworICAgIGtUU0lfUmVmT3NjQ2hhcmdlQ3VycmVudF81MDBuQSA9IDBVLCAvKiE8IFJlZmVyZW5jZSBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDUwMCDCtUEgKi8KKyAgICBrVFNJX1JlZk9zY0NoYXJnZUN1cnJlbnRfMXVBID0gMVUsICAgLyohPCBSZWZlcmVuY2Ugb3NjaWxsYXRvciBjaGFyZ2UgY3VycmVudCBpcyAxIMK1QSAqLworICAgIGtUU0lfUmVmT3NjQ2hhcmdlQ3VycmVudF8ydUEgPSAyVSwgICAvKiE8IFJlZmVyZW5jZSBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDIgwrVBICovCisgICAga1RTSV9SZWZPc2NDaGFyZ2VDdXJyZW50XzR1QSA9IDNVLCAgIC8qITwgUmVmZXJlbmNlIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQgaXMgNCDCtUEgKi8KKyAgICBrVFNJX1JlZk9zY0NoYXJnZUN1cnJlbnRfOHVBID0gNFUsICAgLyohPCBSZWZlcmVuY2Ugb3NjaWxsYXRvciBjaGFyZ2UgY3VycmVudCBpcyA4IMK1QSAqLworICAgIGtUU0lfUmVmT3NjQ2hhcmdlQ3VycmVudF8xNnVBID0gNVUsICAvKiE8IFJlZmVyZW5jZSBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDE2IMK1QSAqLworICAgIGtUU0lfUmVmT3NjQ2hhcmdlQ3VycmVudF8zMnVBID0gNlUsICAvKiE8IFJlZmVyZW5jZSBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDMyIMK1QSAqLworICAgIGtUU0lfUmVmT3NjQ2hhcmdlQ3VycmVudF82NHVBID0gN1UgICAvKiE8IFJlZmVyZW5jZSBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDY0IMK1QSAqLworfSB0c2lfcmVmZXJlbmNlX29zY19jaGFyZ2VfY3VycmVudF90OworCisvKiEKKyAqIEBicmllZiBUU0kgb3NjaWxhdG9yJ3Mgdm9sdGFnZSByYWlscy4KKyAqCisgKiBUaGVzZSBiaXRzIGluZGljYXRlIHRoZSBvc2NpbGxhdG9yJ3Mgdm9sdGFnZSByYWlscy4KKyAqLwordHlwZWRlZiBlbnVtIF90c2lfb3NjX3ZvbHRhZ2VfcmFpbHMKK3sKKyAgICBrVFNJX09zY1ZvbFJhaWxzT3B0aW9uXzAgPSAwVSwgLyohPCBEVk9MVCB2YWx1ZSBvcHRpb24gMCwgdGhlIHZhbHVlIG1heSBkaWZmZXIgb24gZGlmZmVyZW50IHBsYXRmb3JtcyAqLworICAgIGtUU0lfT3NjVm9sUmFpbHNPcHRpb25fMSA9IDFVLCAvKiE8IERWT0xUIHZhbHVlIG9wdGlvbiAxLCB0aGUgdmFsdWUgbWF5IGRpZmZlciBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zICovCisgICAga1RTSV9Pc2NWb2xSYWlsc09wdGlvbl8yID0gMlUsIC8qITwgRFZPTFQgdmFsdWUgb3B0aW9uIDIsIHRoZSB2YWx1ZSBtYXkgZGlmZmVyIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMgKi8KKyAgICBrVFNJX09zY1ZvbFJhaWxzT3B0aW9uXzMgPSAzVSAgLyohPCBEVk9MVCB2YWx1ZSBvcHRpb24gMywgdGhlIHZhbHVlIG1heSBkaWZmZXIgb24gZGlmZmVyZW50IHBsYXRmb3JtcyAqLworfSB0c2lfb3NjX3ZvbHRhZ2VfcmFpbHNfdDsKKworLyohCisgKiBAYnJpZWYgVFNJIEV4dGVybmFsIG9zY2lsbGF0b3IgY2hhcmdlIGFuZCBkaXNjaGFyZ2UgY3VycmVudCBzZWxlY3QuCisgKgorICogVGhlc2UgYml0cyBpbmRpY2F0ZSB0aGUgZWxlY3Ryb2RlIG9zY2lsbGF0b3IgY2hhcmdlIGFuZCBkaXNjaGFyZ2UgY3VycmVudCB2YWx1ZQorICogaW4gVFNJIChFWFRDSFJHKSBpbnN0YW5jZS4KKyAqLwordHlwZWRlZiBlbnVtIF90c2lfZXh0ZXJuYWxfb3NjX2NoYXJnZV9jdXJyZW50Cit7CisgICAga1RTSV9FeHRPc2NDaGFyZ2VDdXJyZW50XzUwMG5BID0gMFUsIC8qITwgRXh0ZXJuYWwgb3NjaWxsYXRvciBjaGFyZ2UgY3VycmVudCBpcyA1MDAgwrVBICovCisgICAga1RTSV9FeHRPc2NDaGFyZ2VDdXJyZW50XzF1QSA9IDFVLCAgIC8qITwgRXh0ZXJuYWwgb3NjaWxsYXRvciBjaGFyZ2UgY3VycmVudCBpcyAxIMK1QSAqLworICAgIGtUU0lfRXh0T3NjQ2hhcmdlQ3VycmVudF8ydUEgPSAyVSwgICAvKiE8IEV4dGVybmFsIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQgaXMgMiDCtUEgKi8KKyAgICBrVFNJX0V4dE9zY0NoYXJnZUN1cnJlbnRfNHVBID0gM1UsICAgLyohPCBFeHRlcm5hbCBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDQgwrVBICovCisgICAga1RTSV9FeHRPc2NDaGFyZ2VDdXJyZW50Xzh1QSA9IDRVLCAgIC8qITwgRXh0ZXJuYWwgb3NjaWxsYXRvciBjaGFyZ2UgY3VycmVudCBpcyA4IMK1QSAqLworICAgIGtUU0lfRXh0T3NjQ2hhcmdlQ3VycmVudF8xNnVBID0gNVUsICAvKiE8IEV4dGVybmFsIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQgaXMgMTYgwrVBICovCisgICAga1RTSV9FeHRPc2NDaGFyZ2VDdXJyZW50XzMydUEgPSA2VSwgIC8qITwgRXh0ZXJuYWwgb3NjaWxsYXRvciBjaGFyZ2UgY3VycmVudCBpcyAzMiDCtUEgKi8KKyAgICBrVFNJX0V4dE9zY0NoYXJnZUN1cnJlbnRfNjR1QSA9IDdVICAgLyohPCBFeHRlcm5hbCBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDY0IMK1QSAqLworfSB0c2lfZXh0ZXJuYWxfb3NjX2NoYXJnZV9jdXJyZW50X3Q7CisKKy8qIQorICogQGJyaWVmIFRTSSBzZXJpZXMgcmVzaXN0YW5jZSBSUyB2YWx1ZSBzZWxlY3QuCisgKgorICogVGhlc2UgYml0cyBpbmRpY2F0ZSB0aGUgZWxlY3Ryb2RlIFJTIHNlcmllcyByZXNpc3RhbmNlIGZvciB0aGUgbm9pc2UgbW9kZQorICogaW4gVFNJIChFWFRDSFJHKSBpbnN0YW5jZS4KKyAqLwordHlwZWRlZiBlbnVtIF90c2lfc2VyaWVzX3Jlc2lzdGFuY2UKK3sKKyAgICBrVFNJX1Nlcmllc1Jlc2lzdGFuY2VfMzJrID0gMFUsIC8qITwgU2VyaWVzIFJlc2lzdGFuY2UgaXMgMzIga2lsbyBvaG1zICAgKi8KKyAgICBrVFNJX1Nlcmllc1Jlc2lzdGFuY2VfMTg3ayA9IDFVIC8qITwgU2VyaWVzIFJlc2lzdGFuY2UgaXMgMTggNyBraWxvIG9obXMgICovCit9IHRzaV9zZXJpZXNfcmVzaXN0b3JfdDsKKworLyohCisgKiBAYnJpZWYgVFNJIHNlcmllcyBmaWx0ZXIgYml0cyBzZWxlY3QuCisgKgorICogVGhlc2UgYml0cyBpbmRpY2F0ZSB0aGUgY291bnQgb2YgdGhlIGZpbHRlciBiaXRzCisgKiBpbiBUU0kgbm9pc2UgbW9kZSBFWFRDSFJHWzI6MV0gYml0cworICovCit0eXBlZGVmIGVudW0gX3RzaV9maWx0ZXJfYml0cworeworICAgIGtUU0lfRmlsdGVyQml0c18zID0gMFUsIC8qITwgMyBmaWx0ZXIgYml0cywgOCBwZWFrcyBpbmNyZW1lbnRzIHRoZSBjbnQrMSAqLworICAgIGtUU0lfRmlsdGVyQml0c18yID0gMVUsIC8qITwgMiBmaWx0ZXIgYml0cywgNCBwZWFrcyBpbmNyZW1lbnRzIHRoZSBjbnQrMSAqLworICAgIGtUU0lfRmlsdGVyQml0c18xID0gMlUsIC8qITwgMSBmaWx0ZXIgYml0cywgMiBwZWFrcyBpbmNyZW1lbnRzIHRoZSBjbnQrMSAqLworICAgIGtUU0lfRmlsdGVyQml0c18wID0gM1UgIC8qITwgbm8gZmlsdGVyIGJpdHMsMSBwZWFrICBpbmNyZW1lbnRzIHRoZSBjbnQrMSAqLworfSB0c2lfZmlsdGVyX2JpdHNfdDsKKworLyohIEBicmllZiBUU0kgc3RhdHVzIGZsYWdzLiAqLwordHlwZWRlZiBlbnVtIF90c2lfc3RhdHVzX2ZsYWdzCit7CisgICAga1RTSV9FbmRPZlNjYW5GbGFnID0gVFNJX0dFTkNTX0VPU0ZfTUFTSywgICAvKiE8IEVuZC1PZi1TY2FuIGZsYWcgKi8KKyAgICBrVFNJX091dE9mUmFuZ2VGbGFnID0gVFNJX0dFTkNTX09VVFJHRl9NQVNLIC8qITwgT3V0LU9mLVJhbmdlIGZsYWcgKi8KK30gdHNpX3N0YXR1c19mbGFnc190OworCisvKiEgQGJyaWVmIFRTSSBmZWF0dXJlIGludGVycnVwdCBzb3VyY2UuKi8KK3R5cGVkZWYgZW51bSBfdHNpX2ludGVycnVwdF9lbmFibGUKK3sKKyAgICBrVFNJX0dsb2JhbEludGVycnVwdEVuYWJsZSA9IDFVLCAgICAgLyohPCBUU0kgbW9kdWxlIGdsb2JhbCBpbnRlcnJ1cHQgKi8KKyAgICBrVFNJX091dE9mUmFuZ2VJbnRlcnJ1cHRFbmFibGUgPSAyVSwgLyohPCBPdXQtT2YtUmFuZ2UgaW50ZXJydXB0ICovCisgICAga1RTSV9FbmRPZlNjYW5JbnRlcnJ1cHRFbmFibGUgPSA0VSAgIC8qITwgRW5kLU9mLVNjYW4gaW50ZXJydXB0ICovCit9IHRzaV9pbnRlcnJ1cHRfZW5hYmxlX3Q7CisKKy8qISBAYnJpZWYgVFNJIGNhbGlicmF0aW9uIGRhdGEgc3RvcmFnZS4gKi8KK3R5cGVkZWYgc3RydWN0IF90c2lfY2FsaWJyYXRpb25fZGF0YQoreworICAgIHVpbnQxNl90IGNhbGlicmF0ZWREYXRhW0ZTTF9GRUFUVVJFX1RTSV9DSEFOTkVMX0NPVU5UXTsgLyohPCBUU0kgY2FsaWJyYXRpb24gZGF0YSBzdG9yYWdlIGJ1ZmZlciAqLworfSB0c2lfY2FsaWJyYXRpb25fZGF0YV90OworCisvKiEKKyAqIEBicmllZiBUU0kgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHNldHRpbmdzIGZvciB0aGUgbW9zdCBjb21tb24gVFNJIGNvbmZpZ3VyYXRpb25zIGluY2x1ZGluZworICogdGhlIFRTSSBtb2R1bGUgY2hhcmdlIGN1cnJlbnRzLCBudW1iZXIgb2Ygc2NhbnMsIHRocmVzaG9sZHMsIGFuZCBzbyBvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3RzaV9jb25maWcKK3sKKyAgICB1aW50MTZfdCB0aHJlc2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSGlnaCB0aHJlc2hvbGQuICovCisgICAgdWludDE2X3QgdGhyZXNsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IExvdyB0aHJlc2hvbGQuICovCisgICAgdHNpX2VsZWN0cm9kZV9vc2NfcHJlc2NhbGVyX3QgcHJlc2NhbGVyOyAgICAvKiE8IFByZXNjYWxlciAqLworICAgIHRzaV9leHRlcm5hbF9vc2NfY2hhcmdlX2N1cnJlbnRfdCBleHRjaHJnOyAgLyohPCBFbGVjdHJvZGUgY2hhcmdlIGN1cnJlbnQgKi8KKyAgICB0c2lfcmVmZXJlbmNlX29zY19jaGFyZ2VfY3VycmVudF90IHJlZmNocmc7IC8qITwgUmVmZXJlbmNlIGNoYXJnZSBjdXJyZW50ICovCisgICAgdHNpX25fY29uc2VjdXRpdmVfc2NhbnNfdCBuc2NuOyAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBzY2Fucy4gKi8KKyAgICB0c2lfYW5hbG9nX21vZGVfdCBtb2RlOyAgICAgICAgICAgICAgICAgICAgIC8qITwgVFNJIG1vZGUgb2Ygb3BlcmF0aW9uLiAqLworICAgIHRzaV9vc2Nfdm9sdGFnZV9yYWlsc190IGR2b2x0OyAgICAgICAgICAgICAgLyohPCBPc2NpbGxhdG9yJ3Mgdm9sdGFnZSByYWlscy4gKi8KKyAgICB0c2lfc2VyaWVzX3Jlc2lzdG9yX3QgcmVzaXN0b3I7ICAgICAgICAgICAgIC8qITwgU2VyaWVzIHJlc2lzdGFuY2UgdmFsdWUgICovCisgICAgdHNpX2ZpbHRlcl9iaXRzX3QgZmlsdGVyOyAgICAgICAgICAgICAgICAgICAvKiE8IE5vaXNlIG1vZGUgZmlsdGVyIGJpdHMgICAqLworfSB0c2lfY29uZmlnX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgaGFyZHdhcmUuCisgKgorICogQGRldGFpbHMgSW5pdGlhbGl6ZXMgdGhlIHBlcmlwaGVyYWwgdG8gdGhlIHRhcmdldGVkIHN0YXRlIHNwZWNpZmllZCBieSBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbiwKKyAqICAgICAgICAgIHN1Y2ggYXMgc2V0cyBwcmVzY2FsZXJzLCBudW1iZXIgb2Ygc2NhbnMsIGNsb2NrcywgZGVsdGEgdm9sdGFnZQorICogICAgICAgICAgc2VyaWVzIHJlc2lzdG9yLCBmaWx0ZXIgYml0cywgcmVmZXJlbmNlLCBhbmQgZWxlY3Ryb2RlIGNoYXJnZSBjdXJyZW50IGFuZCB0aHJlc2hvbGQuCisgKiBAcGFyYW0gIGJhc2UgICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtICBjb25maWcgIFBvaW50ZXIgdG8gVFNJIG1vZHVsZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqIEByZXR1cm4gbm9uZQorICovCit2b2lkIFRTSV9Jbml0KFRTSV9UeXBlICpiYXNlLCBjb25zdCB0c2lfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIERlLWluaXRpYWxpemVzIGhhcmR3YXJlLgorICoKKyAqIEBkZXRhaWxzIERlLWluaXRpYWxpemVzIHRoZSBwZXJpcGhlcmFsIHRvIGRlZmF1bHQgc3RhdGUuCisgKgorICogQHBhcmFtICBiYXNlICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIG5vbmUKKyAqLwordm9pZCBUU0lfRGVpbml0KFRTSV9UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgVFNJIG5vcm1hbCBtb2RlIHVzZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKiBUaGlzIGludGVyZmFjZSBzZXRzIHVzZXJDb25maWcgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB2YWx1ZS4gVGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIG9ubHkKKyAqIGluY2x1ZGVzIHRoZSBzZXR0aW5ncyBmb3IgdGhlIHdob2xlIFRTSS4KKyAqIFRoZSB1c2VyIGNvbmZpZ3VyZSBpcyBzZXQgdG8gdGhlc2UgdmFsdWVzOgorICogQGNvZGUKKyAgICB1c2VyQ29uZmlnLT5wcmVzY2FsZXIgPSBrVFNJX0VsZWNPc2NQcmVzY2FsZXJfMmRpdjsKKyAgICB1c2VyQ29uZmlnLT5leHRjaHJnID0ga1RTSV9FeHRPc2NDaGFyZ2VDdXJyZW50XzUwMG5BOworICAgIHVzZXJDb25maWctPnJlZmNocmcgPSBrVFNJX1JlZk9zY0NoYXJnZUN1cnJlbnRfNHVBOworICAgIHVzZXJDb25maWctPm5zY24gPSBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTB0aW1lOworICAgIHVzZXJDb25maWctPm1vZGUgPSBrVFNJX0FuYWxvZ01vZGVTZWxfQ2FwYWNpdGl2ZTsKKyAgICB1c2VyQ29uZmlnLT5kdm9sdCA9IGtUU0lfT3NjVm9sUmFpbHNPcHRpb25fMDsKKyAgICB1c2VyQ29uZmlnLT50aHJlc2ggPSAwVTsKKyAgICB1c2VyQ29uZmlnLT50aHJlc2wgPSAwVTsKKyAgIEBlbmRjb2RlCisgKgorICogQHBhcmFtIHVzZXJDb25maWcgUG9pbnRlciB0byB0aGUgVFNJIHVzZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgVFNJX0dldE5vcm1hbE1vZGVEZWZhdWx0Q29uZmlnKHRzaV9jb25maWdfdCAqdXNlckNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIFRTSSBsb3cgcG93ZXIgbW9kZSBkZWZhdWx0IHVzZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKiBUaGlzIGludGVyZmFjZSBzZXRzIHVzZXJDb25maWcgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB2YWx1ZS4gVGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIG9ubHkKKyAqIGluY2x1ZGVzIHRoZSBzZXR0aW5ncyBmb3IgdGhlIHdob2xlIFRTSS4KKyAqIFRoZSB1c2VyIGNvbmZpZ3VyZSBpcyBzZXQgdG8gdGhlc2UgdmFsdWVzOgorICogQGNvZGUKKyAgICB1c2VyQ29uZmlnLT5wcmVzY2FsZXIgPSBrVFNJX0VsZWNPc2NQcmVzY2FsZXJfMmRpdjsKKyAgICB1c2VyQ29uZmlnLT5leHRjaHJnID0ga1RTSV9FeHRPc2NDaGFyZ2VDdXJyZW50XzUwMG5BOworICAgIHVzZXJDb25maWctPnJlZmNocmcgPSBrVFNJX1JlZk9zY0NoYXJnZUN1cnJlbnRfNHVBOworICAgIHVzZXJDb25maWctPm5zY24gPSBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTB0aW1lOworICAgIHVzZXJDb25maWctPm1vZGUgPSBrVFNJX0FuYWxvZ01vZGVTZWxfQ2FwYWNpdGl2ZTsKKyAgICB1c2VyQ29uZmlnLT5kdm9sdCA9IGtUU0lfT3NjVm9sUmFpbHNPcHRpb25fMDsKKyAgICB1c2VyQ29uZmlnLT50aHJlc2ggPSA0MDBVOworICAgIHVzZXJDb25maWctPnRocmVzbCA9IDBVOworICAgQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gdXNlckNvbmZpZyBQb2ludGVyIHRvIHRoZSBUU0kgdXNlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBUU0lfR2V0TG93UG93ZXJNb2RlRGVmYXVsdENvbmZpZyh0c2lfY29uZmlnX3QgKnVzZXJDb25maWcpOworCisvKiEKKyAqIEBicmllZiBIYXJkd2FyZSBjYWxpYnJhdGlvbi4KKyAqCisgKiBAZGV0YWlscyBDYWxpYnJhdGVzIHRoZSBwZXJpcGhlcmFsIHRvIGZldGNoIHRoZSBpbml0aWFsIGNvdW50ZXIgdmFsdWUgb2YKKyAqICAgICAgICAgIHRoZSBlbmFibGVkIGVsZWN0cm9kZXMuCisgKiAgICAgICAgICBUaGlzIEFQSSBpcyBtb3N0bHkgdXNlZCBhdCBpbml0aWFsIGFwcGxpY2F0aW9uIHNldHVwLiBDYWxsCisgKiAgICAgICAgICB0aGlzIGZ1bmN0aW9uIGFmdGVyIHRoZSBccmVmIFRTSV9Jbml0IEFQSSBhbmQgdXNlIHRoZSBjYWxpYnJhdGVkCisgKiAgICAgICAgICBjb3VudGVyIHZhbHVlcyB0byBzZXQgdXAgYXBwbGljYXRpb25zIChzdWNoIGFzIHRvIGRldGVybWluZQorICogICAgICAgICAgdW5kZXIgd2hpY2ggY291bnRlciB2YWx1ZSB3ZSBjYW4gY29uZmlybSBhIHRvdWNoIGV2ZW50IG9jY3VycykuCisgKgorICogQHBhcmFtICAgYmFzZSAgICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gICBjYWxCdWZmIERhdGEgYnVmZmVyIHRoYXQgc3RvcmUgdGhlIGNhbGlicmF0ZWQgY291bnRlciB2YWx1ZS4KKyAqIEByZXR1cm4gbm9uZQorICoKKyAqLwordm9pZCBUU0lfQ2FsaWJyYXRlKFRTSV9UeXBlICpiYXNlLCB0c2lfY2FsaWJyYXRpb25fZGF0YV90ICpjYWxCdWZmKTsKKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgVFNJIGludGVycnVwdCByZXF1ZXN0cy4KKyAqIEBwYXJhbSBiYXNlIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIGludGVycnVwdCBzb3VyY2UKKyAqICAgICBUaGUgcGFyYW1ldGVyIGNhbiBiZSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHNvdXJjZSBpZiBkZWZpbmVkOgorICogICAgIEBhcmcga1RTSV9HbG9iYWxJbnRlcnJ1cHRFbmFibGUKKyAqICAgICBAYXJnIGtUU0lfRW5kT2ZTY2FuSW50ZXJydXB0RW5hYmxlCisgKiAgICAgQGFyZyBrVFNJX091dE9mUmFuZ2VJbnRlcnJ1cHRFbmFibGUKKyAqLwordm9pZCBUU0lfRW5hYmxlSW50ZXJydXB0cyhUU0lfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzayk7CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBUU0kgaW50ZXJydXB0IHJlcXVlc3RzLgorICogQHBhcmFtIGJhc2UgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgaW50ZXJydXB0IHNvdXJjZQorICogICAgIFRoZSBwYXJhbWV0ZXIgY2FuIGJlIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgc291cmNlIGlmIGRlZmluZWQ6CisgKiAgICAgQGFyZyBrVFNJX0dsb2JhbEludGVycnVwdEVuYWJsZQorICogICAgIEBhcmcga1RTSV9FbmRPZlNjYW5JbnRlcnJ1cHRFbmFibGUKKyAqICAgICBAYXJnIGtUU0lfT3V0T2ZSYW5nZUludGVycnVwdEVuYWJsZQorICovCit2b2lkIFRTSV9EaXNhYmxlSW50ZXJydXB0cyhUU0lfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzayk7CisKKy8qIQorKiBAYnJpZWYgR2V0cyBhbiBpbnRlcnJ1cHQgZmxhZy4KKyogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBUU0kgaW50ZXJydXB0IGZsYWdzLgorKgorKiBAcGFyYW0gICAgYmFzZSAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcmV0dXJuICAgICAgICAgVGhlIG1hc2sgb2YgdGhlc2Ugc3RhdHVzIGZsYWdzIGNvbWJpbmF0aW9uLgorKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgVFNJX0dldFN0YXR1c0ZsYWdzKFRTSV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAoYmFzZS0+R0VOQ1MgJiAoa1RTSV9FbmRPZlNjYW5GbGFnIHwga1RTSV9PdXRPZlJhbmdlRmxhZykpOworfQorCisvKiEKKyAqIEBicmllZiBDbGVhcnMgdGhlIGludGVycnVwdCBmbGFnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBUU0kgaW50ZXJydXB0IGZsYWcsCisgKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgZmxhZ3MgY2FuJ3QgYmUgY2xlYXJlZCBieSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIFRoZSBzdGF0dXMgZmxhZ3MgdG8gY2xlYXIuCisgKi8KK3ZvaWQgVFNJX0NsZWFyU3RhdHVzRmxhZ3MoVFNJX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiEKKyogQGJyaWVmIEdldHMgdGhlIFRTSSBzY2FuIHRyaWdnZXIgbW9kZS4KKyoKKyogQHBhcmFtICBiYXNlICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEByZXR1cm4gICAgICAgU2NhbiB0cmlnZ2VyIG1vZGUuCisqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBUU0lfR2V0U2NhblRyaWdnZXJNb2RlKFRTSV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAoYmFzZS0+R0VOQ1MgJiBUU0lfR0VOQ1NfU1RNX01BU0spOworfQorCisvKiEKKyogQGJyaWVmIEdldHMgdGhlIHNjYW4gaW4gcHJvZ3Jlc3MgZmxhZy4KKyoKKyogQHBhcmFtICAgIGJhc2UgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcmV0dXJuICAgVHJ1ZSAgLSBzY2FuIGlzIGluIHByb2dyZXNzLgorKiAgICAgICAgICAgRmFsc2UgLSBzY2FuIGlzIG5vdCBpbiBwcm9ncmVzcy4KKyovCitzdGF0aWMgaW5saW5lIGJvb2wgVFNJX0lzU2NhbkluUHJvZ3Jlc3MoVFNJX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChiYXNlLT5HRU5DUyAmIFRTSV9HRU5DU19TQ05JUF9NQVNLKTsKK30KKworLyohCisqIEBicmllZiBTZXRzIHRoZSBwcmVzY2FsZXIuCisqCisqIEBwYXJhbSAgICBiYXNlICAgICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gICAgcHJlc2NhbGVyIFByZXNjYWxlciB2YWx1ZS4KKyogQHJldHVybiAgIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9TZXRFbGVjdHJvZGVPU0NQcmVzY2FsZXIoVFNJX1R5cGUgKmJhc2UsIHRzaV9lbGVjdHJvZGVfb3NjX3ByZXNjYWxlcl90IHByZXNjYWxlcikKK3sKKyAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIH4oVFNJX0dFTkNTX1BTX01BU0sgfCBBTExfRkxBR1NfTUFTSykpIHwgKFRTSV9HRU5DU19QUyhwcmVzY2FsZXIpKTsKK30KKworLyohCisqIEBicmllZiBTZXRzIHRoZSBudW1iZXIgb2Ygc2NhbnMgKE5TQ04pLgorKgorKiBAcGFyYW0gICAgYmFzZSAgICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEBwYXJhbSAgICBudW1iZXIgIE51bWJlciBvZiBzY2Fucy4KKyogQHJldHVybiAgIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9TZXROdW1iZXJPZlNjYW5zKFRTSV9UeXBlICpiYXNlLCB0c2lfbl9jb25zZWN1dGl2ZV9zY2Fuc190IG51bWJlcikKK3sKKyAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIH4oVFNJX0dFTkNTX05TQ05fTUFTSyB8IEFMTF9GTEFHU19NQVNLKSkgfCAoVFNJX0dFTkNTX05TQ04obnVtYmVyKSk7Cit9CisKKy8qIQorKiBAYnJpZWYgRW5hYmxlcy9kaXNhYmxlcyB0aGUgVFNJIG1vZHVsZS4KKyoKKyogQHBhcmFtICAgYmFzZSAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgZW5hYmxlIENob29zZSB3aGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIG1vZHVsZTsKKyogICAgICAgICAgICAgICAgIC0gdHJ1ZSAgIEVuYWJsZSBUU0kgbW9kdWxlOworKiAgICAgICAgICAgICAgICAgLSBmYWxzZSAgRGlzYWJsZSBUU0kgbW9kdWxlOworKiBAcmV0dXJuICBub25lLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBUU0lfRW5hYmxlTW9kdWxlKFRTSV9UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+R0VOQ1MgPSAoYmFzZS0+R0VOQ1MgJiB+QUxMX0ZMQUdTX01BU0spIHwgVFNJX0dFTkNTX1RTSUVOX01BU0s7ICAgIC8qIEVuYWJsZSBtb2R1bGUgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+R0VOQ1MgPSAoYmFzZS0+R0VOQ1MgJiB+QUxMX0ZMQUdTX01BU0spICYgKH5UU0lfR0VOQ1NfVFNJRU5fTUFTSyk7IC8qIERpc2FibGUgbW9kdWxlICovCisgICAgfQorfQorCisvKiEKKyogQGJyaWVmIFNldHMgdGhlIFRTSSBsb3cgcG93ZXIgU1RPUCBtb2RlIGFzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisqICAgICAgICBUaGlzIGVuYWJsZXMgdGhlIFRTSSBtb2R1bGUgZnVuY3Rpb24gaW4gbG93IHBvd2VyIG1vZGVzLgorKgorKiBAcGFyYW0gICAgYmFzZSAgICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEBwYXJhbSAgICBlbmFibGUgIENob29zZSB0byBlbmFibGUgb3IgZGlzYWJsZSBTVE9QIG1vZGUuCisqICAgICAgICAgICAgICAgICAgIC0gdHJ1ZSAgIEVuYWJsZSBtb2R1bGUgaW4gU1RPUCBtb2RlOworKiAgICAgICAgICAgICAgICAgICAtIGZhbHNlICBEaXNhYmxlIG1vZHVsZSBpbiBTVE9QIG1vZGU7CisqIEByZXR1cm4gICBub25lLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBUU0lfRW5hYmxlTG93UG93ZXIoVFNJX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIH5BTExfRkxBR1NfTUFTSykgfCBUU0lfR0VOQ1NfU1RQRV9NQVNLOyAgICAvKiBNb2R1bGUgZW5hYmxlZCBpbiBsb3cgcG93ZXIgc3RvcCBtb2RlcyAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIH5BTExfRkxBR1NfTUFTSykgJiAoflRTSV9HRU5DU19TVFBFX01BU0spOyAvKiBNb2R1bGUgZGlzYWJsZWQgaW4gbG93IHBvd2VyIHN0b3AgbW9kZXMgKi8KKyAgICB9Cit9CisKKy8qIQorKiBAYnJpZWYgRW5hYmxlcy9kaXNhYmxlcyB0aGUgaGFyZHdhcmUgdHJpZ2dlciBzY2FuLgorKgorKiBAcGFyYW0gICAgYmFzZSBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEBwYXJhbSAgICBlbmFibGUgQ2hvb3NlIHRvIGVuYWJsZSBoYXJkd2FyZSB0cmlnZ2VyIG9yIHNvZnR3YXJlIHRyaWdnZXIgc2Nhbi4KKyogICAgICAgICAgICAgICAgICAtIHRydWUgICAgRW5hYmxlIGhhcmR3YXJlIHRyaWdnZXIgc2NhbjsKKyogICAgICAgICAgICAgICAgICAtIGZhbHNlICAgRW5hYmxlIHNvZnR3YXJlIHRyaWdnZXIgc2NhbjsKKyogQHJldHVybiAgIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9FbmFibGVIYXJkd2FyZVRyaWdnZXJTY2FuKFRTSV9UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+R0VOQ1MgPSAoYmFzZS0+R0VOQ1MgJiB+QUxMX0ZMQUdTX01BU0spIHwgVFNJX0dFTkNTX1NUTV9NQVNLOyAgICAvKiBFbmFibGUgaGFyZHdhcmUgdHJpZ2dlciBzY2FuICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkdFTkNTID0gKGJhc2UtPkdFTkNTICYgfkFMTF9GTEFHU19NQVNLKSAmICh+VFNJX0dFTkNTX1NUTV9NQVNLKTsgLyogRW5hYmxlIHNvZnR3YXJlIHRyaWdnZXIgc2NhbiAqLworICAgIH0KK30KKworLyohCisqIEBicmllZiBTdGFydHMgYSBzb2Z0d2FyZSB0cmlnZ2VyIG1lYXN1cmVtZW50ICh0cmlnZ2VycyBhIG5ldyBtZWFzdXJlbWVudCkuCisqCisqIEBwYXJhbSAgICBiYXNlIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHJldHVybiAgIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9TdGFydFNvZnR3YXJlVHJpZ2dlcihUU0lfVHlwZSAqYmFzZSkKK3sKKyAgICBiYXNlLT5EQVRBIHw9IFRTSV9EQVRBX1NXVFNfTUFTSzsKK30KKworLyohCisqIEBicmllZiBTZXRzIHRoZSB0aGUgbWVhc3VyZWQgY2hhbm5lbCBudW1iZXIuCisqCisqIEBwYXJhbSAgICBiYXNlICAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgIGNoYW5uZWwgQ2hhbm5lbCBudW1iZXIgMCAuLi4gMTUuCisqIEByZXR1cm4gICBub25lLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBUU0lfU2V0TWVhc3VyZWRDaGFubmVsTnVtYmVyKFRTSV9UeXBlICpiYXNlLCB1aW50OF90IGNoYW5uZWwpCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9UU0lfQ0hBTk5FTF9DT1VOVCk7CisKKyAgICBiYXNlLT5EQVRBID0gKChiYXNlLT5EQVRBKSAmIH5UU0lfREFUQV9UU0lDSF9NQVNLKSB8IChUU0lfREFUQV9UU0lDSChjaGFubmVsKSk7Cit9CisKKy8qIQorKiBAYnJpZWYgR2V0cyB0aGUgY3VycmVudCBtZWFzdXJlZCBjaGFubmVsIG51bWJlci4KKyoKKyogQHBhcmFtICAgIGJhc2UgICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcmV0dXJuICAgdWludDhfdCAgICBDaGFubmVsIG51bWJlciAwIC4uLiAxNS4KKyovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgVFNJX0dldE1lYXN1cmVkQ2hhbm5lbE51bWJlcihUU0lfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKHVpbnQ4X3QpKChiYXNlLT5EQVRBICYgVFNJX0RBVEFfVFNJQ0hfTUFTSykgPj4gVFNJX0RBVEFfVFNJQ0hfU0hJRlQpOworfQorCisvKiEKKyogQGJyaWVmIEVuYWJsZXMvZGlzYWJsZXMgdGhlIERNQSB0cmFuc2Zlci4KKyoKKyogQHBhcmFtICAgYmFzZSAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgZW5hYmxlIENob29zZSB0byBlbmFibGUgRE1BIHRyYW5zZmVyIG9yIG5vdC4KKyogICAgICAgICAgICAgICAgIC0gdHJ1ZSAgICBFbmFibGUgRE1BIHRyYW5zZmVyOworKiAgICAgICAgICAgICAgICAgLSBmYWxzZSAgIERpc2FibGUgRE1BIHRyYW5zZmVyOworKiBAcmV0dXJuICBub25lLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBUU0lfRW5hYmxlRG1hVHJhbnNmZXIoVFNJX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5EQVRBIHw9IFRTSV9EQVRBX0RNQUVOX01BU0s7IC8qIEVuYWJsZSBETUEgdHJhbnNmZXIgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+REFUQSAmPSB+VFNJX0RBVEFfRE1BRU5fTUFTSzsgLyogRGlzYWJsZSBETUEgdHJhbnNmZXIgKi8KKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RTSV9IQVNfRU5EX09GX1NDQU5fRE1BX0VOQUJMRSkgJiYgKEZTTF9GRUFUVVJFX1RTSV9IQVNfRU5EX09GX1NDQU5fRE1BX0VOQUJMRSA9PSAxKQorLyohCisqIEBicmllZiBEZWNpZGVzIHdoZXRoZXIgdG8gZW5hYmxlIGVuZCBvZiBzY2FuIERNQSB0cmFuc2ZlciByZXF1ZXN0IG9ubHkuCisqCisqIEBwYXJhbSAgICBiYXNlIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgIGVuYWJsZSAgQ2hvb3NlIHdoZXRoZXIgdG8gZW5hYmxlIEVuZCBvZiBTY2FuIERNQSB0cmFuc2ZlciByZXF1ZXN0IG9ubHkuCisqICAgICAgICAgICAgICAgICAgIC0gdHJ1ZSAgRW5hYmxlIEVuZCBvZiBTY2FuIERNQSB0cmFuc2ZlciByZXF1ZXN0IG9ubHk7CisqICAgICAgICAgICAgICAgICAgIC0gZmFsc2UgQm90aCBFbmQtb2YtU2NhbiBhbmQgT3V0LW9mLVJhbmdlIGNhbiBnZW5lcmF0ZSBETUEgdHJhbnNmZXIgcmVxdWVzdC4KKyogQHJldHVybiAgIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9FbmFibGVFbmRPZlNjYW5EbWFUcmFuc2Zlck9ubHkoVFNJX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIH5BTExfRkxBR1NfTUFTSykgfCBUU0lfR0VOQ1NfRU9TRE1FT19NQVNLOyAvKiBFbmFibGUgRW5kIG9mIFNjYW4gRE1BIHRyYW5zZmVyIHJlcXVlc3Qgb25seTsgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+R0VOQ1MgPQorICAgICAgICAgICAgKGJhc2UtPkdFTkNTICYgfkFMTF9GTEFHU19NQVNLKSAmICh+VFNJX0dFTkNTX0VPU0RNRU9fTUFTSyk7IC8qIEJvdGggRW5kLW9mLVNjYW4gYW5kIE91dC1vZi1SYW5nZSBjYW4gZ2VuZXJhdGUgRE1BIHRyYW5zZmVyIHJlcXVlc3QuICovCisgICAgfQorfQorI2VuZGlmIC8qIEVuZCBvZiAoRlNMX0ZFQVRVUkVfVFNJX0hBU19FTkRfT0ZfU0NBTl9ETUFfRU5BQkxFID09IDEpKi8KKworLyohCisqIEBicmllZiBHZXRzIHRoZSBjb252ZXJzaW9uIGNvdW50ZXIgdmFsdWUuCisqCisqIEBwYXJhbSAgICBiYXNlIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHJldHVybiAgIEFjY3VtdWxhdGVkIHNjYW4gY291bnRlciB2YWx1ZSB0aWNrZWQgYnkgdGhlIHJlZmVyZW5jZSBjbG9jay4KKyovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IFRTSV9HZXRDb3VudGVyKFRTSV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAodWludDE2X3QpKGJhc2UtPkRBVEEgJiBUU0lfREFUQV9UU0lDTlRfTUFTSyk7Cit9CisKKy8qIQorKiBAYnJpZWYgU2V0cyB0aGUgVFNJIHdha2UtdXAgY2hhbm5lbCBsb3cgdGhyZXNob2xkLgorKgorKiBAcGFyYW0gICAgYmFzZSAgICAgICAgICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gICAgbG93X3RocmVzaG9sZCAgTG93IGNvdW50ZXIgdGhyZXNob2xkLgorKiBAcmV0dXJuICAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX1NldExvd1RocmVzaG9sZChUU0lfVHlwZSAqYmFzZSwgdWludDE2X3QgbG93X3RocmVzaG9sZCkKK3sKKyAgICBhc3NlcnQobG93X3RocmVzaG9sZCA8IDB4RkZGRlUpOworCisgICAgYmFzZS0+VFNIRCA9ICgoYmFzZS0+VFNIRCkgJiB+VFNJX1RTSERfVEhSRVNMX01BU0spIHwgKFRTSV9UU0hEX1RIUkVTTChsb3dfdGhyZXNob2xkKSk7Cit9CisKKy8qIQorKiBAYnJpZWYgU2V0cyB0aGUgVFNJIHdha2UtdXAgY2hhbm5lbCBoaWdoIHRocmVzaG9sZC4KKyoKKyogQHBhcmFtICAgIGJhc2UgICAgICAgICAgICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEBwYXJhbSAgICBoaWdoX3RocmVzaG9sZCAgSGlnaCBjb3VudGVyIHRocmVzaG9sZC4KKyogQHJldHVybiAgIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9TZXRIaWdoVGhyZXNob2xkKFRTSV9UeXBlICpiYXNlLCB1aW50MTZfdCBoaWdoX3RocmVzaG9sZCkKK3sKKyAgICBhc3NlcnQoaGlnaF90aHJlc2hvbGQgPCAweEZGRkZVKTsKKworICAgIGJhc2UtPlRTSEQgPSAoKGJhc2UtPlRTSEQpICYgflRTSV9UU0hEX1RIUkVTSF9NQVNLKSB8IChUU0lfVFNIRF9USFJFU0goaGlnaF90aHJlc2hvbGQpKTsKK30KKworLyohCisqIEBicmllZiBTZXRzIHRoZSBhbmFsb2cgbW9kZSBvZiB0aGUgVFNJIG1vZHVsZS4KKyoKKyogQHBhcmFtICAgIGJhc2UgICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEBwYXJhbSAgICBtb2RlICAgTW9kZSB2YWx1ZS4KKyogQHJldHVybiAgIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9TZXRBbmFsb2dNb2RlKFRTSV9UeXBlICpiYXNlLCB0c2lfYW5hbG9nX21vZGVfdCBtb2RlKQoreworICAgIGJhc2UtPkdFTkNTID0gKGJhc2UtPkdFTkNTICYgfihUU0lfR0VOQ1NfTU9ERV9NQVNLIHwgQUxMX0ZMQUdTX01BU0spKSB8IChUU0lfR0VOQ1NfTU9ERShtb2RlKSk7Cit9CisKKy8qIQorKiBAYnJpZWYgR2V0cyB0aGUgbm9pc2UgbW9kZSByZXN1bHQgb2YgdGhlIFRTSSBtb2R1bGUuCisqCisqIEBwYXJhbSAgIGJhc2UgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHJldHVybiAgICAgICAgVmFsdWUgb2YgdGhlIEdFTkNTW01PREVdIGJpdC1maWVsZHMuCisqLworc3RhdGljIGlubGluZSB1aW50OF90IFRTSV9HZXROb2lzZU1vZGVSZXN1bHQoVFNJX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChiYXNlLT5HRU5DUyAmIFRTSV9HRU5DU19NT0RFX01BU0spID4+IFRTSV9HRU5DU19NT0RFX1NISUZUOworfQorCisvKiEKKyogQGJyaWVmIFNldHMgdGhlIHJlZmVyZW5jZSBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50LgorKgorKiBAcGFyYW0gICBiYXNlICAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgY3VycmVudCBUaGUgcmVmZXJlbmNlIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQuCisqIEByZXR1cm4gIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9TZXRSZWZlcmVuY2VDaGFyZ2VDdXJyZW50KFRTSV9UeXBlICpiYXNlLCB0c2lfcmVmZXJlbmNlX29zY19jaGFyZ2VfY3VycmVudF90IGN1cnJlbnQpCit7CisgICAgYmFzZS0+R0VOQ1MgPSAoYmFzZS0+R0VOQ1MgJiB+KFRTSV9HRU5DU19SRUZDSFJHX01BU0sgfCBBTExfRkxBR1NfTUFTSykpIHwgKFRTSV9HRU5DU19SRUZDSFJHKGN1cnJlbnQpKTsKK30KKworLyohCisqIEBicmllZiBTZXRzIHRoZSBleHRlcm5hbCBlbGVjdHJvZGUgY2hhcmdlIGN1cnJlbnQuCisqCisqIEBwYXJhbSAgICBiYXNlICAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgIGN1cnJlbnQgRXh0ZXJuYWwgZWxlY3Ryb2RlIGNoYXJnZSBjdXJyZW50LgorKiBAcmV0dXJuICAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX1NldEVsZWN0cm9kZUNoYXJnZUN1cnJlbnQoVFNJX1R5cGUgKmJhc2UsIHRzaV9leHRlcm5hbF9vc2NfY2hhcmdlX2N1cnJlbnRfdCBjdXJyZW50KQoreworICAgIGJhc2UtPkdFTkNTID0gKGJhc2UtPkdFTkNTICYgfihUU0lfR0VOQ1NfRVhUQ0hSR19NQVNLIHwgQUxMX0ZMQUdTX01BU0spKSB8IChUU0lfR0VOQ1NfRVhUQ0hSRyhjdXJyZW50KSk7Cit9CisKKy8qIQorKiBAYnJpZWYgU2V0cyB0aGUgb3NjaWxsYXRvcidzIHZvbHRhZ2UgcmFpbHMuCisqCisqIEBwYXJhbSAgICBiYXNlICAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgIGR2b2x0ICAgVGhlIHZvbHRhZ2UgcmFpbHMuCisqIEByZXR1cm4gICBub25lLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBUU0lfU2V0T3NjVm9sdGFnZVJhaWxzKFRTSV9UeXBlICpiYXNlLCB0c2lfb3NjX3ZvbHRhZ2VfcmFpbHNfdCBkdm9sdCkKK3sKKyAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIH4oVFNJX0dFTkNTX0RWT0xUX01BU0sgfCBBTExfRkxBR1NfTUFTSykpIHwgKFRTSV9HRU5DU19EVk9MVChkdm9sdCkpOworfQorCisvKiEKKyogQGJyaWVmIFNldHMgdGhlIGVsZWN0cm9kZSBzZXJpZXMgcmVzaXN0YW5jZSB2YWx1ZSBpbiBFWFRDSFJHWzBdIGJpdC4KKyoKKyogQHBhcmFtICAgIGJhc2UgICAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgIHJlc2lzdG9yIFNlcmllcyByZXNpc3RhbmNlLgorKiBAcmV0dXJuICAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX1NldEVsZWN0cm9kZVNlcmllc1Jlc2lzdG9yKFRTSV9UeXBlICpiYXNlLCB0c2lfc2VyaWVzX3Jlc2lzdG9yX3QgcmVzaXN0b3IpCit7CisgICAgYmFzZS0+R0VOQ1MgPSAoYmFzZS0+R0VOQ1MgJiBUU0lfVjRfRVhUQ0hSR19SRVNJU1RPUl9CSVRfQ0xFQVIpIHwgVFNJX0dFTkNTX0VYVENIUkcocmVzaXN0b3IpOworfQorCisvKiEKKyogQGJyaWVmIFNldHMgdGhlIGVsZWN0cm9kZSBmaWx0ZXIgYml0cyB2YWx1ZSBpbiBFWFRDSFJHWzI6MV0gYml0cy4KKyoKKyogQHBhcmFtICAgIGJhc2UgICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gICAgZmlsdGVyICBTZXJpZXMgcmVzaXN0YW5jZS4KKyogQHJldHVybiAgIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9TZXRGaWx0ZXJCaXRzKFRTSV9UeXBlICpiYXNlLCB0c2lfZmlsdGVyX2JpdHNfdCBmaWx0ZXIpCit7CisgICAgYmFzZS0+R0VOQ1MgPSAoYmFzZS0+R0VOQ1MgJiBUU0lfVjRfRVhUQ0hSR19GSUxURVJfQklUU19DTEVBUikgfCAoZmlsdGVyIDw8IFRTSV9WNF9FWFRDSFJHX0ZJTFRFUl9CSVRTX1NISUZUKTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfVFNJX1Y0X0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9mc2xfZGV2aWNlX3JlZ2lzdGVycy5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZnNsX2RldmljZV9yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDhlMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZnNsX2RldmljZV9yZWdpc3RlcnMuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQtMjAxNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0ZTTF9ERVZJQ0VfUkVHSVNURVJTX0hfXworI2RlZmluZSBfX0ZTTF9ERVZJQ0VfUkVHSVNURVJTX0hfXworCisvKgorICogSW5jbHVkZSB0aGUgY3B1IHNwZWNpZmljIHJlZ2lzdGVyIGhlYWRlciBmaWxlcy4KKyAqCisgKiBUaGUgQ1BVIG1hY3JvIHNob3VsZCBiZSBkZWNsYXJlZCBpbiB0aGUgcHJvamVjdCBvciBtYWtlZmlsZS4KKyAqLworI2lmIChkZWZpbmVkKENQVV9NS1c0MVoyNTZWSFQ0KSB8fCBkZWZpbmVkKENQVV9NS1c0MVo1MTJDQVQ0KSB8fCBkZWZpbmVkKENQVV9NS1c0MVo1MTJWSFQ0KSkKKworI2RlZmluZSBLVzQxWjRfU0VSSUVTCisKKy8qIENNU0lTLXN0eWxlIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjaW5jbHVkZSAiTUtXNDFaNC5oIgorLyogQ1BVIHNwZWNpZmljIGZlYXR1cmUgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJNS1c0MVo0X2ZlYXR1cmVzLmgiCisKKyNlbHNlCisgICAgI2Vycm9yICJObyB2YWxpZCBDUFUgZGVmaW5lZCEiCisjZW5kaWYKKworI2VuZGlmIC8qIF9fRlNMX0RFVklDRV9SRUdJU1RFUlNfSF9fICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFT0YKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9zdGFydHVwX01LVzQxWjQuUyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L3N0YXJ0dXBfTUtXNDFaNC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MmJhMGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9zdGFydHVwX01LVzQxWjQuUwpAQCAtMCwwICsxLDM2NSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBAZmlsZTogICAgc3RhcnR1cF9NS1c0MVo0LnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQHB1cnBvc2U6IENNU0lTIENvcnRleC1NMFAgQ29yZSBEZXZpY2UgU3RhcnR1cCBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICBNS1c0MVo0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBAdmVyc2lvbjogMS4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQGRhdGU6ICAgIDIwMTUtOS0yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEBidWlsZDogICBiMTcwMTEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogQ29weXJpZ2h0IChjKSAxOTk3IC0gMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIENvcHlyaWdodCAyMDE2IC0gMjAxNyBOWFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAgICAgICAqLworLyogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0ICAgICAqLworLyogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyAgICAgICAqLworLyogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IgICAgICAgICAgKi8KKy8qICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyAgICAgICAgICAgICovCisvKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgICAgICAgICovCisvKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAgICAgICAgICAqLworLyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSAgICAgICAgICAgICAgICAgKi8KKy8qIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SICAgICAgICovCisvKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgICAgICAqLworLyogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyAgICAgICAgICAgKi8KKy8qIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiAgICAgICAgICovCisvKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgICAgICAgICAgICAgICAqLworLyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgICAgICAgICAgKi8KKy8qIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBWZXJzaW9uOiBHQ0MgZm9yIEFSTSBFbWJlZGRlZCBQcm9jZXNzb3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLnN5bnRheCB1bmlmaWVkCisgICAgLmFyY2ggYXJtdjYtbQorCisgICAgLnNlY3Rpb24gLmlzcl92ZWN0b3IsICJhIgorICAgIC5hbGlnbiAyCisgICAgLmdsb2JsIF9faXNyX3ZlY3RvcgorX19pc3JfdmVjdG9yOgorICAgIC5sb25nICAgX19TdGFja1RvcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVG9wIG9mIFN0YWNrICovCisgICAgLmxvbmcgICBSZXNldF9IYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBIYW5kbGVyICovCisgICAgLmxvbmcgICBOTUlfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOTUkgSGFuZGxlciovCisgICAgLmxvbmcgICBIYXJkRmF1bHRfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXJkIEZhdWx0IEhhbmRsZXIqLworICAgIC5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQqLworICAgIC5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQqLworICAgIC5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQqLworICAgIC5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQqLworICAgIC5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQqLworICAgIC5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQqLworICAgIC5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQqLworICAgIC5sb25nICAgU1ZDX0hhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1ZDYWxsIEhhbmRsZXIqLworICAgIC5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQqLworICAgIC5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQqLworICAgIC5sb25nICAgUGVuZFNWX0hhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVuZFNWIEhhbmRsZXIqLworICAgIC5sb25nICAgU3lzVGlja19IYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzVGljayBIYW5kbGVyKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgSW50ZXJydXB0cyovCisgICAgLmxvbmcgICBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBETUEgY2hhbm5lbCAwIHRyYW5zZmVyIGNvbXBsZXRlKi8KKyAgICAubG9uZyAgIERNQTFfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERNQSBjaGFubmVsIDEgdHJhbnNmZXIgY29tcGxldGUqLworICAgIC5sb25nICAgRE1BMl9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE1BIGNoYW5uZWwgMiB0cmFuc2ZlciBjb21wbGV0ZSovCisgICAgLmxvbmcgICBETUEzX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBETUEgY2hhbm5lbCAzIHRyYW5zZmVyIGNvbXBsZXRlKi8KKyAgICAubG9uZyAgIFJlc2VydmVkMjBfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkIGludGVycnVwdCovCisgICAgLmxvbmcgICBGVEZBX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGNvbXBsZXRlIGFuZCByZWFkIGNvbGxpc2lvbiovCisgICAgLmxvbmcgICBMVkRfTFZXX0RDRENfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb3ctdm9sdGFnZSBkZXRlY3QsIGxvdy12b2x0YWdlIHdhcm5pbmcsIERDREMqLworICAgIC5sb25nICAgTExXVV9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG93IGxlYWthZ2Ugd2FrZXVwIFVuaXQqLworICAgIC5sb25nICAgSTJDMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSTJDMCBpbnRlcnJ1cHQqLworICAgIC5sb25nICAgSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSTJDMSBpbnRlcnJ1cHQqLworICAgIC5sb25nICAgU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1BJMCBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMqLworICAgIC5sb25nICAgVFNJMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFNJMCBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMqLworICAgIC5sb25nICAgTFBVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTFBVQVJUMCBzdGF0dXMgYW5kIGVycm9yKi8KKyAgICAubG9uZyAgIFRSTkcwX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRSTkcwIGludGVycnVwdCovCisgICAgLmxvbmcgICBDTVRfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDTVQgaW50ZXJydXB0Ki8KKyAgICAubG9uZyAgIEFEQzBfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFEQzAgaW50ZXJydXB0Ki8KKyAgICAubG9uZyAgIENNUDBfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENNUDAgaW50ZXJydXB0Ki8KKyAgICAubG9uZyAgIFRQTTBfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRQTTAgc2luZ2xlIGludGVycnVwdCB2ZWN0b3IgZm9yIGFsbCBzb3VyY2VzKi8KKyAgICAubG9uZyAgIFRQTTFfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRQTTEgc2luZ2xlIGludGVycnVwdCB2ZWN0b3IgZm9yIGFsbCBzb3VyY2VzKi8KKyAgICAubG9uZyAgIFRQTTJfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRQTTIgc2luZ2xlIGludGVycnVwdCB2ZWN0b3IgZm9yIGFsbCBzb3VyY2VzKi8KKyAgICAubG9uZyAgIFJUQ19JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJUQyBhbGFybSovCisgICAgLmxvbmcgICBSVENfU2Vjb25kc19JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSVEMgc2Vjb25kcyovCisgICAgLmxvbmcgICBQSVRfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSVQgaW50ZXJydXB0Ki8KKyAgICAubG9uZyAgIExUQzBfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExUQzAgaW50ZXJydXB0Ki8KKyAgICAubG9uZyAgIFJhZGlvXzBfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJUTEUsIFpJR0JFRSwgQU5ULCBHRU5GU0sgaW50ZXJydXB0IDAqLworICAgIC5sb25nICAgREFDMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREFDMCBpbnRlcnJ1cHQqLworICAgIC5sb25nICAgUmFkaW9fMV9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQlRMRSwgWklHQkVFLCBBTlQsIEdFTkZTSyBpbnRlcnJ1cHQgMSovCisgICAgLmxvbmcgICBNQ0dfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNQ0cgaW50ZXJydXB0Ki8KKyAgICAubG9uZyAgIExQVE1SMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExQVE1SMCBpbnRlcnJ1cHQqLworICAgIC5sb25nICAgU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1BJMSBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMqLworICAgIC5sb25nICAgUE9SVEFfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUE9SVEEgUGluIGRldGVjdCovCisgICAgLmxvbmcgICBQT1JUQl9QT1JUQ19JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQT1JUQiBhbmQgUE9SVEMgUGluIGRldGVjdCovCisKKyAgICAuc2l6ZSAgICBfX2lzcl92ZWN0b3IsIC4gLSBfX2lzcl92ZWN0b3IKKworLyogRmxhc2ggQ29uZmlndXJhdGlvbiAqLworICAgIC5zZWN0aW9uIC5GbGFzaENvbmZpZywgImEiCisgICAgLmxvbmcgMHhGRkZGRkZGRgorICAgIC5sb25nIDB4RkZGRkZGRkYKKyAgICAubG9uZyAweEZGRkZGRkZGCisgICAgLmxvbmcgMHhGRkZGRkZGRQorCisgICAgLnRleHQKKyAgICAudGh1bWIKKworLyogUmVzZXQgSGFuZGxlciAqLworCisgICAgLnRodW1iX2Z1bmMKKyAgICAuYWxpZ24gMgorICAgIC5nbG9ibCAgIFJlc2V0X0hhbmRsZXIKKyAgICAud2VhayAgICBSZXNldF9IYW5kbGVyCisgICAgLnR5cGUgICAgUmVzZXRfSGFuZGxlciwgJWZ1bmN0aW9uCitSZXNldF9IYW5kbGVyOgorICAgIGNwc2lkICAgaSAgICAgICAgICAgICAgIC8qIE1hc2sgaW50ZXJydXB0cyAqLworICAgIC5lcXUgICAgVlRPUiwgMHhFMDAwRUQwOAorICAgIGxkciAgICAgcjAsID1WVE9SCisgICAgbGRyICAgICByMSwgPV9faXNyX3ZlY3RvcgorICAgIHN0ciAgICAgcjEsIFtyMF0KKyAgICBsZHIgICAgIHIyLCBbcjFdCisgICAgbXNyICAgICBtc3AsIHIyCisjaWZuZGVmIF9fTk9fU1lTVEVNX0lOSVQKKyAgICBsZHIgICByMCw9U3lzdGVtSW5pdAorICAgIGJseCAgIHIwCisjZW5kaWYKKy8qICAgICBMb29wIHRvIGNvcHkgZGF0YSBmcm9tIHJlYWQgb25seSBtZW1vcnkgdG8gUkFNLiBUaGUgcmFuZ2VzCisgKiAgICAgIG9mIGNvcHkgZnJvbS90byBhcmUgc3BlY2lmaWVkIGJ5IGZvbGxvd2luZyBzeW1ib2xzIGV2YWx1YXRlZCBpbgorICogICAgICBsaW5rZXIgc2NyaXB0LgorICogICAgICBfX2V0ZXh0OiBFbmQgb2YgY29kZSBzZWN0aW9uLCBpLmUuLCBiZWdpbiBvZiBkYXRhIHNlY3Rpb25zIHRvIGNvcHkgZnJvbS4KKyAqICAgICAgX19kYXRhX3N0YXJ0X18vX19kYXRhX2VuZF9fOiBSQU0gYWRkcmVzcyByYW5nZSB0aGF0IGRhdGEgc2hvdWxkIGJlCisgKiAgICAgIGNvcGllZCB0by4gQm90aCBtdXN0IGJlIGFsaWduZWQgdG8gNCBieXRlcyBib3VuZGFyeS4gICovCisKKyAgICBsZHIgICAgcjEsID1fX2V0ZXh0CisgICAgbGRyICAgIHIyLCA9X19kYXRhX3N0YXJ0X18KKyAgICBsZHIgICAgcjMsID1fX2RhdGFfZW5kX18KKworICAgIHN1YnMgICAgcjMsIHIyCisgICAgYmxlICAgICAuTEMwCisKKy5MQzE6CisgICAgc3VicyAgICByMywgNAorICAgIGxkciAgICByMCwgW3IxLHIzXQorICAgIHN0ciAgICByMCwgW3IyLHIzXQorICAgIGJndCAgICAuTEMxCisuTEMwOgorCisjaWZkZWYgX19TVEFSVFVQX0NMRUFSX0JTUworLyogICAgIFRoaXMgcGFydCBvZiB3b3JrIHVzdWFsbHkgaXMgZG9uZSBpbiBDIGxpYnJhcnkgc3RhcnR1cCBjb2RlLiBPdGhlcndpc2UsCisgKiAgICAgZGVmaW5lIHRoaXMgbWFjcm8gdG8gZW5hYmxlIGl0IGluIHRoaXMgc3RhcnR1cC4KKyAqCisgKiAgICAgTG9vcCB0byB6ZXJvIG91dCBCU1Mgc2VjdGlvbiwgd2hpY2ggdXNlcyBmb2xsb3dpbmcgc3ltYm9scworICogICAgIGluIGxpbmtlciBzY3JpcHQ6CisgKiAgICAgIF9fYnNzX3N0YXJ0X186IHN0YXJ0IG9mIEJTUyBzZWN0aW9uLiBNdXN0IGFsaWduIHRvIDQKKyAqICAgICAgX19ic3NfZW5kX186IGVuZCBvZiBCU1Mgc2VjdGlvbi4gTXVzdCBhbGlnbiB0byA0CisgKi8KKyAgICBsZHIgcjEsID1fX2Jzc19zdGFydF9fCisgICAgbGRyIHIyLCA9X19ic3NfZW5kX18KKworICAgIHN1YnMgICAgcjIsIHIxCisgICAgYmxlIC5MQzMKKworICAgIG1vdnMgICAgcjAsIDAKKy5MQzI6CisgICAgc3RyIHIwLCBbcjEsIHIyXQorICAgIHN1YnMgICAgcjIsIDQKKyAgICBiZ2UgLkxDMgorLkxDMzoKKyNlbmRpZgorICAgIGNwc2llICAgaSAgICAgICAgICAgICAgIC8qIFVubWFzayBpbnRlcnJ1cHRzICovCisjaWZuZGVmIF9fU1RBUlQKKyNkZWZpbmUgX19TVEFSVCBfc3RhcnQKKyNlbmRpZgorI2lmbmRlZiBfX0FUT0xMSUNfXworICAgIGxkciAgIHIwLD1fX1NUQVJUCisgICAgYmx4ICAgcjAKKyNlbHNlCisgICAgbGRyICAgcjAsPV9fbGliY19pbml0X2FycmF5CisgICAgYmx4ICAgcjAKKyAgICBsZHIgICByMCw9bWFpbgorICAgIGJ4ICAgIHIwCisjZW5kaWYKKyAgICAucG9vbAorICAgIC5zaXplIFJlc2V0X0hhbmRsZXIsIC4gLSBSZXNldF9IYW5kbGVyCisKKyAgICAuYWxpZ24gIDEKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrIERlZmF1bHRJU1IKKyAgICAudHlwZSBEZWZhdWx0SVNSLCAlZnVuY3Rpb24KK0RlZmF1bHRJU1I6CisgICAgbGRyIHIwLCA9RGVmYXVsdElTUgorICAgIGJ4IHIwCisgICAgLnNpemUgRGVmYXVsdElTUiwgLiAtIERlZmF1bHRJU1IKKworICAgIC5hbGlnbiAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayBOTUlfSGFuZGxlcgorICAgIC50eXBlIE5NSV9IYW5kbGVyLCAlZnVuY3Rpb24KK05NSV9IYW5kbGVyOgorICAgIGxkciAgIHIwLD1OTUlfSGFuZGxlcgorICAgIGJ4ICAgIHIwCisgICAgLnNpemUgTk1JX0hhbmRsZXIsIC4gLSBOTUlfSGFuZGxlcgorCisgICAgLmFsaWduIDEKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrIEhhcmRGYXVsdF9IYW5kbGVyCisgICAgLnR5cGUgSGFyZEZhdWx0X0hhbmRsZXIsICVmdW5jdGlvbgorSGFyZEZhdWx0X0hhbmRsZXI6CisgICAgbGRyICAgcjAsPUhhcmRGYXVsdF9IYW5kbGVyCisgICAgYnggICAgcjAKKyAgICAuc2l6ZSBIYXJkRmF1bHRfSGFuZGxlciwgLiAtIEhhcmRGYXVsdF9IYW5kbGVyCisKKyAgICAuYWxpZ24gMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgU1ZDX0hhbmRsZXIKKyAgICAudHlwZSBTVkNfSGFuZGxlciwgJWZ1bmN0aW9uCitTVkNfSGFuZGxlcjoKKyAgICBsZHIgICByMCw9U1ZDX0hhbmRsZXIKKyAgICBieCAgICByMAorICAgIC5zaXplIFNWQ19IYW5kbGVyLCAuIC0gU1ZDX0hhbmRsZXIKKworICAgIC5hbGlnbiAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayBQZW5kU1ZfSGFuZGxlcgorICAgIC50eXBlIFBlbmRTVl9IYW5kbGVyLCAlZnVuY3Rpb24KK1BlbmRTVl9IYW5kbGVyOgorICAgIGxkciAgIHIwLD1QZW5kU1ZfSGFuZGxlcgorICAgIGJ4ICAgIHIwCisgICAgLnNpemUgUGVuZFNWX0hhbmRsZXIsIC4gLSBQZW5kU1ZfSGFuZGxlcgorCisgICAgLmFsaWduIDEKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrIFN5c1RpY2tfSGFuZGxlcgorICAgIC50eXBlIFN5c1RpY2tfSGFuZGxlciwgJWZ1bmN0aW9uCitTeXNUaWNrX0hhbmRsZXI6CisgICAgbGRyICAgcjAsPVN5c1RpY2tfSGFuZGxlcgorICAgIGJ4ICAgIHIwCisgICAgLnNpemUgU3lzVGlja19IYW5kbGVyLCAuIC0gU3lzVGlja19IYW5kbGVyCisKKyAgICAuYWxpZ24gMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgRE1BMF9JUlFIYW5kbGVyCisgICAgLnR5cGUgRE1BMF9JUlFIYW5kbGVyLCAlZnVuY3Rpb24KK0RNQTBfSVJRSGFuZGxlcjoKKyAgICBsZHIgICByMCw9RE1BMF9Ecml2ZXJJUlFIYW5kbGVyCisgICAgYnggICAgcjAKKyAgICAuc2l6ZSBETUEwX0lSUUhhbmRsZXIsIC4gLSBETUEwX0lSUUhhbmRsZXIKKworICAgIC5hbGlnbiAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayBETUExX0lSUUhhbmRsZXIKKyAgICAudHlwZSBETUExX0lSUUhhbmRsZXIsICVmdW5jdGlvbgorRE1BMV9JUlFIYW5kbGVyOgorICAgIGxkciAgIHIwLD1ETUExX0RyaXZlcklSUUhhbmRsZXIKKyAgICBieCAgICByMAorICAgIC5zaXplIERNQTFfSVJRSGFuZGxlciwgLiAtIERNQTFfSVJRSGFuZGxlcgorCisgICAgLmFsaWduIDEKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrIERNQTJfSVJRSGFuZGxlcgorICAgIC50eXBlIERNQTJfSVJRSGFuZGxlciwgJWZ1bmN0aW9uCitETUEyX0lSUUhhbmRsZXI6CisgICAgbGRyICAgcjAsPURNQTJfRHJpdmVySVJRSGFuZGxlcgorICAgIGJ4ICAgIHIwCisgICAgLnNpemUgRE1BMl9JUlFIYW5kbGVyLCAuIC0gRE1BMl9JUlFIYW5kbGVyCisKKyAgICAuYWxpZ24gMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgRE1BM19JUlFIYW5kbGVyCisgICAgLnR5cGUgRE1BM19JUlFIYW5kbGVyLCAlZnVuY3Rpb24KK0RNQTNfSVJRSGFuZGxlcjoKKyAgICBsZHIgICByMCw9RE1BM19Ecml2ZXJJUlFIYW5kbGVyCisgICAgYnggICAgcjAKKyAgICAuc2l6ZSBETUEzX0lSUUhhbmRsZXIsIC4gLSBETUEzX0lSUUhhbmRsZXIKKworICAgIC5hbGlnbiAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayBJMkMwX0lSUUhhbmRsZXIKKyAgICAudHlwZSBJMkMwX0lSUUhhbmRsZXIsICVmdW5jdGlvbgorSTJDMF9JUlFIYW5kbGVyOgorICAgIGxkciAgIHIwLD1JMkMwX0RyaXZlcklSUUhhbmRsZXIKKyAgICBieCAgICByMAorICAgIC5zaXplIEkyQzBfSVJRSGFuZGxlciwgLiAtIEkyQzBfSVJRSGFuZGxlcgorCisgICAgLmFsaWduIDEKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrIEkyQzFfSVJRSGFuZGxlcgorICAgIC50eXBlIEkyQzFfSVJRSGFuZGxlciwgJWZ1bmN0aW9uCitJMkMxX0lSUUhhbmRsZXI6CisgICAgbGRyICAgcjAsPUkyQzFfRHJpdmVySVJRSGFuZGxlcgorICAgIGJ4ICAgIHIwCisgICAgLnNpemUgSTJDMV9JUlFIYW5kbGVyLCAuIC0gSTJDMV9JUlFIYW5kbGVyCisKKyAgICAuYWxpZ24gMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgU1BJMF9JUlFIYW5kbGVyCisgICAgLnR5cGUgU1BJMF9JUlFIYW5kbGVyLCAlZnVuY3Rpb24KK1NQSTBfSVJRSGFuZGxlcjoKKyAgICBsZHIgICByMCw9U1BJMF9Ecml2ZXJJUlFIYW5kbGVyCisgICAgYnggICAgcjAKKyAgICAuc2l6ZSBTUEkwX0lSUUhhbmRsZXIsIC4gLSBTUEkwX0lSUUhhbmRsZXIKKworICAgIC5hbGlnbiAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayBMUFVBUlQwX0lSUUhhbmRsZXIKKyAgICAudHlwZSBMUFVBUlQwX0lSUUhhbmRsZXIsICVmdW5jdGlvbgorTFBVQVJUMF9JUlFIYW5kbGVyOgorICAgIGxkciAgIHIwLD1MUFVBUlQwX0RyaXZlcklSUUhhbmRsZXIKKyAgICBieCAgICByMAorICAgIC5zaXplIExQVUFSVDBfSVJRSGFuZGxlciwgLiAtIExQVUFSVDBfSVJRSGFuZGxlcgorCisgICAgLmFsaWduIDEKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrIFNQSTFfSVJRSGFuZGxlcgorICAgIC50eXBlIFNQSTFfSVJRSGFuZGxlciwgJWZ1bmN0aW9uCitTUEkxX0lSUUhhbmRsZXI6CisgICAgbGRyICAgcjAsPVNQSTFfRHJpdmVySVJRSGFuZGxlcgorICAgIGJ4ICAgIHIwCisgICAgLnNpemUgU1BJMV9JUlFIYW5kbGVyLCAuIC0gU1BJMV9JUlFIYW5kbGVyCisKKworLyogICAgTWFjcm8gdG8gZGVmaW5lIGRlZmF1bHQgaGFuZGxlcnMuIERlZmF1bHQgaGFuZGxlcgorICogICAgd2lsbCBiZSB3ZWFrIHN5bWJvbCBhbmQganVzdCBkZWFkIGxvb3BzLiBUaGV5IGNhbiBiZQorICogICAgb3ZlcndyaXR0ZW4gYnkgb3RoZXIgaGFuZGxlcnMgKi8KKyAgICAubWFjcm8gZGVmX2lycV9oYW5kbGVyICBoYW5kbGVyX25hbWUKKyAgICAud2VhayBcaGFuZGxlcl9uYW1lCisgICAgLnNldCAgXGhhbmRsZXJfbmFtZSwgRGVmYXVsdElTUgorICAgIC5lbmRtCisKKy8qIEV4Y2VwdGlvbiBIYW5kbGVycyAqLworICAgIGRlZl9pcnFfaGFuZGxlciAgICBETUEwX0RyaXZlcklSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgRE1BMV9Ecml2ZXJJUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIERNQTJfRHJpdmVySVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBETUEzX0RyaXZlcklSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgUmVzZXJ2ZWQyMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIEZURkFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBMVkRfTFZXX0RDRENfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBMTFdVX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgSTJDMF9Ecml2ZXJJUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIEkyQzFfRHJpdmVySVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBTUEkwX0RyaXZlcklSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgVFNJMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIExQVUFSVDBfRHJpdmVySVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBUUk5HMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIENNVF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIEFEQzBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBDTVAwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgVFBNMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIFRQTTFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBUUE0yX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgUlRDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgUlRDX1NlY29uZHNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBQSVRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBMVEMwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgUmFkaW9fMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIERBQzBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBSYWRpb18xX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgTUNHX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgTFBUTVIwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgU1BJMV9Ecml2ZXJJUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIFBPUlRBX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgUE9SVEJfUE9SVENfSVJRSGFuZGxlcgorCisgICAgLmVuZApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvc3lzdGVtX01LVzQxWjQuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L3N5c3RlbV9NS1c0MVo0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5ZGU2OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L3N5c3RlbV9NS1c0MVo0LmMKQEAgLTAsMCArMSwxODYgQEAKKy8qCisqKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisqKiAgICAgUHJvY2Vzc29yczogICAgICAgICAgTUtXNDFaMjU2VkhUNAorKiogICAgICAgICAgICAgICAgICAgICAgICAgIE1LVzQxWjUxMkNBVDQKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICBNS1c0MVo1MTJWSFQ0CisqKgorKiogICAgIENvbXBpbGVyczogICAgICAgICAgIEtlaWwgQVJNIEMvQysrIENvbXBpbGVyCisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgR05VIEMgQ29tcGlsZXIKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICBJQVIgQU5TSSBDL0MrKyBDb21waWxlciBmb3IgQVJNCisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgTUNVWHByZXNzbyBDb21waWxlcgorKioKKyoqICAgICBSZWZlcmVuY2UgbWFudWFsOiAgICBNS1c0MVo1MTJSTSBSZXYuIDAuMSwgMDQvMjAxNgorKiogICAgIFZlcnNpb246ICAgICAgICAgICAgIHJldi4gMS4wLCAyMDE1LTA5LTIzCisqKiAgICAgQnVpbGQ6ICAgICAgICAgICAgICAgYjE3MDIxMworKioKKyoqICAgICBBYnN0cmFjdDoKKyoqICAgICAgICAgUHJvdmlkZXMgYSBzeXN0ZW0gY29uZmlndXJhdGlvbiBmdW5jdGlvbiBhbmQgYSBnbG9iYWwgdmFyaWFibGUgdGhhdAorKiogICAgICAgICBjb250YWlucyB0aGUgc3lzdGVtIGZyZXF1ZW5jeS4gSXQgY29uZmlndXJlcyB0aGUgZGV2aWNlIGFuZCBpbml0aWFsaXplcworKiogICAgICAgICB0aGUgb3NjaWxsYXRvciAoUExMKSB0aGF0IGlzIHBhcnQgb2YgdGhlIG1pY3JvY29udHJvbGxlciBkZXZpY2UuCisqKgorKiogICAgIENvcHlyaWdodCAyMDE2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisqKiAgICAgQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyoqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorKiogICAgIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoqCisqKiAgICAgbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorKiogICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKioKKyoqICAgICBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworKiogICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisqKiAgICAgICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKioKKyoqICAgICBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyoqICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyoqICAgICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKioKKyoqICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisqKiAgICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyoqICAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisqKiAgICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyoqICAgICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyoqICAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqKiAgICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisqKiAgICAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyoqICAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworKiogICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKioKKyoqICAgICBodHRwOiAgICAgICAgICAgICAgICAgd3d3Lm54cC5jb20KKyoqICAgICBtYWlsOiAgICAgICAgICAgICAgICAgc3VwcG9ydEBueHAuY29tCisqKgorKiogICAgIFJldmlzaW9uczoKKyoqICAgICAtIHJldi4gMS4wICgyMDE1LTA5LTIzKQorKiogICAgICAgICBJbml0aWFsIHZlcnNpb24uCisqKgorKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKi8KKworLyohCisgKiBAZmlsZSBNS1c0MVo0CisgKiBAdmVyc2lvbiAxLjAKKyAqIEBkYXRlIDIwMTUtMDktMjMKKyAqIEBicmllZiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIGZvciBNS1c0MVo0IChpbXBsZW1lbnRhdGlvbiBmaWxlKQorICoKKyAqIFByb3ZpZGVzIGEgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gYW5kIGEgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBzeXN0ZW0gZnJlcXVlbmN5LiBJdCBjb25maWd1cmVzIHRoZSBkZXZpY2UgYW5kIGluaXRpYWxpemVzIHRoZSBvc2NpbGxhdG9yCisgKiAoUExMKSB0aGF0IGlzIHBhcnQgb2YgdGhlIG1pY3JvY29udHJvbGxlciBkZXZpY2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDb3JlIGNsb2NrCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3VpbnQzMl90IFN5c3RlbUNvcmVDbG9jayA9IERFRkFVTFRfU1lTVEVNX0NMT0NLOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTeXN0ZW1Jbml0KCkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZCBTeXN0ZW1Jbml0ICh2b2lkKSB7CisKKyNpZiAoRElTQUJMRV9XRE9HKQorICAvKiBTSU1fQ09QQzogQ09QVD0wLENPUENMS1M9MCxDT1BXPTAgKi8KKyAgU0lNLT5DT1BDID0gKHVpbnQzMl90KTB4MDB1OworI2VuZGlmIC8qIChESVNBQkxFX1dET0cpICovCisKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gU3lzdGVtQ29yZUNsb2NrVXBkYXRlKCkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZCBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUgKHZvaWQpIHsKKworICB1aW50MzJfdCBNQ0dPVVRDbG9jazsgICAgICAgICAgICAgICAgLyogVmFyaWFibGUgdG8gc3RvcmUgb3V0cHV0IGNsb2NrIGZyZXF1ZW5jeSBvZiB0aGUgTUNHIG1vZHVsZSAqLworICB1aW50MTZfdCBEaXZpZGVyOworCisgIGlmICgoTUNHLT5DMSAmIE1DR19DMV9DTEtTX01BU0spID09IDB4MDBVKSB7CisgICAgLyogRkxMIGlzIHNlbGVjdGVkICovCisgICAgaWYgKChNQ0ctPkMxICYgTUNHX0MxX0lSRUZTX01BU0spID09IDB4MDBVKSB7CisgICAgICAvKiBFeHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgaXMgc2VsZWN0ZWQgKi8KKyAgICAgIGlmKChNQ0ctPkM3ICYgTUNHX0M3X09TQ1NFTF9NQVNLKSA9PSAweDAwVSkgeworICAgICAgICBNQ0dPVVRDbG9jayA9IENQVV9YVEFMX0NMS19IWjsgLyogU3lzdGVtIG9zY2lsbGF0b3IgZHJpdmVzIE1DRyBjbG9jayAqLworICAgICAgfSBlbHNlIHsKKyAgICAgICAgTUNHT1VUQ2xvY2sgPSBDUFVfWFRBTDMya19DTEtfSFo7IC8qIFJUQyAzMiBrSHogb3NjaWxsYXRvciBkcml2ZXMgTUNHIGNsb2NrICovCisgICAgICB9CisgICAgICBpZiAoKChNQ0ctPkMyICYgTUNHX0MyX1JBTkdFX01BU0spICE9IDB4MDBVKSAmJiAoKE1DRy0+QzcgJiBNQ0dfQzdfT1NDU0VMX01BU0spICE9IDB4MDFVKSkgeworICAgICAgICBzd2l0Y2ggKE1DRy0+QzEgJiBNQ0dfQzFfRlJESVZfTUFTSykgeworICAgICAgICBjYXNlIDB4MzhVOgorICAgICAgICAgIERpdmlkZXIgPSAxNTM2VTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDMwVToKKyAgICAgICAgICBEaXZpZGVyID0gMTI4MFU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgRGl2aWRlciA9ICh1aW50MTZfdCkoMzJMVSA8PCAoKE1DRy0+QzEgJiBNQ0dfQzFfRlJESVZfTUFTSykgPj4gTUNHX0MxX0ZSRElWX1NISUZUKSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7LyogKChNQ0ctPkMyICYgTUNHX0MyX1JBTkdFX01BU0spICE9IDB4MDBVKSAqLworICAgICAgICBEaXZpZGVyID0gKHVpbnQxNl90KSgxTFUgPDwgKChNQ0ctPkMxICYgTUNHX0MxX0ZSRElWX01BU0spID4+IE1DR19DMV9GUkRJVl9TSElGVCkpOworICAgICAgfQorICAgICAgTUNHT1VUQ2xvY2sgPSAoTUNHT1VUQ2xvY2sgLyBEaXZpZGVyKTsgLyogQ2FsY3VsYXRlIHRoZSBkaXZpZGVkIEZMTCByZWZlcmVuY2UgY2xvY2sgKi8KKyAgICB9IGVsc2UgeyAvKiAoISgoTUNHLT5DMSAmIE1DR19DMV9JUkVGU19NQVNLKSA9PSAweDAwVSkpICovCisgICAgICBNQ0dPVVRDbG9jayA9IENQVV9JTlRfU0xPV19DTEtfSFo7IC8qIFRoZSBzbG93IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBpcyBzZWxlY3RlZCAqLworICAgIH0gLyogKCEoKE1DRy0+QzEgJiBNQ0dfQzFfSVJFRlNfTUFTSykgPT0gMHgwMFUpKSAqLworICAgIC8qIFNlbGVjdCBjb3JyZWN0IG11bHRpcGxpZXIgdG8gY2FsY3VsYXRlIHRoZSBNQ0cgb3V0cHV0IGNsb2NrICAqLworICAgIHN3aXRjaCAoTUNHLT5DNCAmIChNQ0dfQzRfRE1YMzJfTUFTSyB8IE1DR19DNF9EUlNUX0RSU19NQVNLKSkgeworICAgICAgY2FzZSAweDAwVToKKyAgICAgICAgTUNHT1VUQ2xvY2sgKj0gNjQwVTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDB4MjBVOgorICAgICAgICBNQ0dPVVRDbG9jayAqPSAxMjgwVTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDB4NDBVOgorICAgICAgICBNQ0dPVVRDbG9jayAqPSAxOTIwVTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDB4NjBVOgorICAgICAgICBNQ0dPVVRDbG9jayAqPSAyNTYwVTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDB4ODBVOgorICAgICAgICBNQ0dPVVRDbG9jayAqPSA3MzJVOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMHhBMFU6CisgICAgICAgIE1DR09VVENsb2NrICo9IDE0NjRVOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMHhDMFU6CisgICAgICAgIE1DR09VVENsb2NrICo9IDIxOTdVOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMHhFMFU6CisgICAgICAgIE1DR09VVENsb2NrICo9IDI5MjlVOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfSBlbHNlIGlmICgoTUNHLT5DMSAmIE1DR19DMV9DTEtTX01BU0spID09IDB4NDBVKSB7CisgICAgLyogSW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGlzIHNlbGVjdGVkICovCisgICAgaWYgKChNQ0ctPkMyICYgTUNHX0MyX0lSQ1NfTUFTSykgPT0gMHgwMFUpIHsKKyAgICAgIE1DR09VVENsb2NrID0gQ1BVX0lOVF9TTE9XX0NMS19IWjsgLyogU2xvdyBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgc2VsZWN0ZWQgKi8KKyAgICB9IGVsc2UgeyAvKiAoISgoTUNHLT5DMiAmIE1DR19DMl9JUkNTX01BU0spID09IDB4MDBVKSkgKi8KKyAgICAgIERpdmlkZXIgPSAodWludDE2X3QpKDB4MDFMVSA8PCAoKE1DRy0+U0MgJiBNQ0dfU0NfRkNSRElWX01BU0spID4+IE1DR19TQ19GQ1JESVZfU0hJRlQpKTsKKyAgICAgIE1DR09VVENsb2NrID0gKHVpbnQzMl90KSAoQ1BVX0lOVF9GQVNUX0NMS19IWiAvIERpdmlkZXIpOyAvKiBGYXN0IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBzZWxlY3RlZCAqLworICAgIH0gLyogKCEoKE1DRy0+QzIgJiBNQ0dfQzJfSVJDU19NQVNLKSA9PSAweDAwVSkpICovCisgIH0gZWxzZSBpZiAoKE1DRy0+QzEgJiBNQ0dfQzFfQ0xLU19NQVNLKSA9PSAweDgwVSkgeworICAgIC8qIEV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBpcyBzZWxlY3RlZCAqLworICAgIGlmKChNQ0ctPkM3ICYgTUNHX0M3X09TQ1NFTF9NQVNLKSA9PSAweDAwVSkgeworICAgICAgTUNHT1VUQ2xvY2sgPSBDUFVfWFRBTF9DTEtfSFo7ICAgLyogU3lzdGVtIG9zY2lsbGF0b3IgZHJpdmVzIE1DRyBjbG9jayAqLworICAgIH0gZWxzZSB7CisgICAgICBNQ0dPVVRDbG9jayA9IENQVV9YVEFMMzJrX0NMS19IWjsgLyogUlRDIDMyIGtIeiBvc2NpbGxhdG9yIGRyaXZlcyBNQ0cgY2xvY2sgKi8KKyAgICB9CisgIH0gZWxzZSB7IC8qICghKChNQ0ctPkMxICYgTUNHX0MxX0NMS1NfTUFTSykgPT0gMHg4MFUpKSAqLworICAgIC8qIFJlc2VydmVkIHZhbHVlICovCisgICAgcmV0dXJuOworICB9IC8qICghKChNQ0ctPkMxICYgTUNHX0MxX0NMS1NfTUFTSykgPT0gMHg4MFUpKSAqLworICBTeXN0ZW1Db3JlQ2xvY2sgPSAoTUNHT1VUQ2xvY2sgLyAoMHgwMVUgKyAoKFNJTS0+Q0xLRElWMSAmIFNJTV9DTEtESVYxX09VVERJVjFfTUFTSykgPj4gU0lNX0NMS0RJVjFfT1VURElWMV9TSElGVCkpKTsKKworfQorCisvL19fZXh0ZW5zaW9uX18gdHlwZWRlZiBpbnQgX19ndWFyZCBfX2F0dHJpYnV0ZV9fKChtb2RlKF9fRElfXykpKTsKKy8vaW50IF9fY3hhX2d1YXJkX2FjcXVpcmUoX19ndWFyZCAqZykgeyByZXR1cm4gISooY2hhciAqKShnKTsgfQorLy92b2lkIF9fY3hhX2d1YXJkX3JlbGVhc2UoX19ndWFyZCAqZykgeyAqKGNoYXIgKilnID0gMTsgfQorLy92b2lkIF9fY3hhX2d1YXJkX2Fib3J0KF9fZ3VhcmQgKmcpIHsgKHZvaWQpZzsgfQordm9pZCBfX2N4YV9wdXJlX3ZpcnR1YWwodm9pZCkgeyB3aGlsZSAoMSk7IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9zeXN0ZW1fTUtXNDFaNC5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvc3lzdGVtX01LVzQxWjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmFiMTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvc3lzdGVtX01LVzQxWjQuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyoqICAgICBQcm9jZXNzb3JzOiAgICAgICAgICBNS1c0MVoyNTZWSFQ0CisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgTUtXNDFaNTEyQ0FUNAorKiogICAgICAgICAgICAgICAgICAgICAgICAgIE1LVzQxWjUxMlZIVDQKKyoqCisqKiAgICAgQ29tcGlsZXJzOiAgICAgICAgICAgS2VpbCBBUk0gQy9DKysgQ29tcGlsZXIKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICBHTlUgQyBDb21waWxlcgorKiogICAgICAgICAgICAgICAgICAgICAgICAgIElBUiBBTlNJIEMvQysrIENvbXBpbGVyIGZvciBBUk0KKyoqICAgICAgICAgICAgICAgICAgICAgICAgICBNQ1VYcHJlc3NvIENvbXBpbGVyCisqKgorKiogICAgIFJlZmVyZW5jZSBtYW51YWw6ICAgIE1LVzQxWjUxMlJNIFJldi4gMC4xLCAwNC8yMDE2CisqKiAgICAgVmVyc2lvbjogICAgICAgICAgICAgcmV2LiAxLjAsIDIwMTUtMDktMjMKKyoqICAgICBCdWlsZDogICAgICAgICAgICAgICBiMTcwMjEzCisqKgorKiogICAgIEFic3RyYWN0OgorKiogICAgICAgICBQcm92aWRlcyBhIHN5c3RlbSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uIGFuZCBhIGdsb2JhbCB2YXJpYWJsZSB0aGF0CisqKiAgICAgICAgIGNvbnRhaW5zIHRoZSBzeXN0ZW0gZnJlcXVlbmN5LiBJdCBjb25maWd1cmVzIHRoZSBkZXZpY2UgYW5kIGluaXRpYWxpemVzCisqKiAgICAgICAgIHRoZSBvc2NpbGxhdG9yIChQTEwpIHRoYXQgaXMgcGFydCBvZiB0aGUgbWljcm9jb250cm9sbGVyIGRldmljZS4KKyoqCisqKiAgICAgQ29weXJpZ2h0IDIwMTYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyoqICAgICBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorKiogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisqKiAgICAgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKioKKyoqICAgICBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisqKiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqKgorKiogICAgIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisqKiAgICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyoqICAgICAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqKgorKiogICAgIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworKiogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworKiogICAgICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqKgorKiogICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyoqICAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiogICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyoqICAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorKiogICAgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKiogICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyoqICAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyoqICAgICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiogICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisqKiAgICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqKgorKiogICAgIGh0dHA6ICAgICAgICAgICAgICAgICB3d3cubnhwLmNvbQorKiogICAgIG1haWw6ICAgICAgICAgICAgICAgICBzdXBwb3J0QG54cC5jb20KKyoqCisqKiAgICAgUmV2aXNpb25zOgorKiogICAgIC0gcmV2LiAxLjAgKDIwMTUtMDktMjMpCisqKiAgICAgICAgIEluaXRpYWwgdmVyc2lvbi4KKyoqCisqKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisqLworCisvKiEKKyAqIEBmaWxlIE1LVzQxWjQKKyAqIEB2ZXJzaW9uIDEuMAorICogQGRhdGUgMjAxNS0wOS0yMworICogQGJyaWVmIERldmljZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgZm9yIE1LVzQxWjQgKGhlYWRlciBmaWxlKQorICoKKyAqIFByb3ZpZGVzIGEgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gYW5kIGEgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBzeXN0ZW0gZnJlcXVlbmN5LiBJdCBjb25maWd1cmVzIHRoZSBkZXZpY2UgYW5kIGluaXRpYWxpemVzIHRoZSBvc2NpbGxhdG9yCisgKiAoUExMKSB0aGF0IGlzIHBhcnQgb2YgdGhlIG1pY3JvY29udHJvbGxlciBkZXZpY2UuCisgKi8KKworI2lmbmRlZiBfU1lTVEVNX01LVzQxWjRfSF8KKyNkZWZpbmUgX1NZU1RFTV9NS1c0MVo0X0hfICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN5bWJvbCBwcmV2ZW50aW5nIHJlcGVhdGVkIGluY2x1c2lvbiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworCisjaWZuZGVmIERJU0FCTEVfV0RPRworICAjZGVmaW5lIERJU0FCTEVfV0RPRyAgICAgICAgICAgICAgICAgMQorI2VuZGlmCisKKy8qIERlZmluZSBjbG9jayBzb3VyY2UgdmFsdWVzICovCisKKyNkZWZpbmUgQ1BVX1hUQUxfQ0xLX0haICAgICAgICAgICAgICAgIDMyMDAwMDAwdSAgICAgICAgICAgLyogVmFsdWUgb2YgdGhlIGV4dGVybmFsIGNyeXN0YWwgb3Igb3NjaWxsYXRvciBjbG9jayBmcmVxdWVuY3kgaW4gSHogKi8KKyNkZWZpbmUgQ1BVX1hUQUwzMmtfQ0xLX0haICAgICAgICAgICAgIDMyNzY4dSAgICAgICAgICAgICAgLyogVmFsdWUgb2YgdGhlIGV4dGVybmFsIDMyayBjcnlzdGFsIG9yIG9zY2lsbGF0b3IgY2xvY2sgZnJlcXVlbmN5IGluIEh6ICovCisjZGVmaW5lIENQVV9JTlRfU0xPV19DTEtfSFogICAgICAgICAgICAzMjc2OHUgICAgICAgICAgICAgIC8qIFZhbHVlIG9mIHRoZSBzbG93IGludGVybmFsIG9zY2lsbGF0b3IgY2xvY2sgZnJlcXVlbmN5IGluIEh6ICAqLworI2RlZmluZSBDUFVfSU5UX0ZBU1RfQ0xLX0haICAgICAgICAgICAgNDAwMDAwMHUgICAgICAgICAgICAvKiBWYWx1ZSBvZiB0aGUgZmFzdCBpbnRlcm5hbCBvc2NpbGxhdG9yIGNsb2NrIGZyZXF1ZW5jeSBpbiBIeiAgKi8KKworLyogUkYgb3NjaWxsYXRvciBzZXR0aW5nICovCisjZGVmaW5lIFNZU1RFTV9SU0lNX0NPTlRST0xfVkFMVUUgICAgICAweEMwMDEwMFUgICAgICAgICAgIC8qIEVuYWJsZSBSRiBvc2NpbGxhdG9yIGluIFJ1bi9XYWl0IG1vZGUgKi8KKworLyogTG93IHBvd2VyIG1vZGUgZW5hYmxlICovCisKKy8qIFNNQ19QTVBST1Q6ID89MCw/PTAsQVZMUD0xLD89MCw/PTAsPz0wLEFWTExTPTEsPz0wICovCisjZGVmaW5lIFNZU1RFTV9TTUNfUE1QUk9UX1ZBTFVFICAgICAgICAoU01DX1BNUFJPVF9BVkxQX01BU0sgfCBTTUNfUE1QUk9UX0FMTFNfTUFTSyB8IFNNQ19QTVBST1RfQVZMTFNfTUFTSykgLyogTWFzayBvZiBhbGxvd2VkIGxvdyBwb3dlciBtb2RlcyB1c2VkIHRvIGluaXRpYWxpemUgcG93ZXIgbW9kZXMgcHJvdGVjdGlvbiByZWdpc3RlciAqLworCisjZGVmaW5lIERFRkFVTFRfU1lTVEVNX0NMT0NLICAgICAgICAgICAyMDk3MTUyMFUgICAgICAgICAgIC8qIERlZmF1bHQgU3lzdGVtIGNsb2NrIHZhbHVlICovCisKKworLyoqCisgKiBAYnJpZWYgU3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSAoY29yZSBjbG9jaykKKyAqCisgKiBUaGUgc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSBzdXBwbGllZCB0byB0aGUgU3lzVGljayB0aW1lciBhbmQgdGhlIHByb2Nlc3NvcgorICogY29yZSBjbG9jay4gVGhpcyB2YXJpYWJsZSBjYW4gYmUgdXNlZCBieSB0aGUgdXNlciBhcHBsaWNhdGlvbiB0byBzZXR1cCB0aGUKKyAqIFN5c1RpY2sgdGltZXIgb3IgY29uZmlndXJlIG90aGVyIHBhcmFtZXRlcnMuIEl0IG1heSBhbHNvIGJlIHVzZWQgYnkgZGVidWdnZXIgdG8KKyAqIHF1ZXJ5IHRoZSBmcmVxdWVuY3kgb2YgdGhlIGRlYnVnIHRpbWVyIG9yIGNvbmZpZ3VyZSB0aGUgdHJhY2UgY2xvY2sgc3BlZWQKKyAqIFN5c3RlbUNvcmVDbG9jayBpcyBpbml0aWFsaXplZCB3aXRoIGEgY29ycmVjdCBwcmVkZWZpbmVkIHZhbHVlLgorICovCitleHRlcm4gdWludDMyX3QgU3lzdGVtQ29yZUNsb2NrOworCisvKioKKyAqIEBicmllZiBTZXR1cCB0aGUgbWljcm9jb250cm9sbGVyIHN5c3RlbS4KKyAqCisgKiBUeXBpY2FsbHkgdGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBvc2NpbGxhdG9yIChQTEwpIHRoYXQgaXMgcGFydCBvZiB0aGUKKyAqIG1pY3JvY29udHJvbGxlciBkZXZpY2UuIEZvciBzeXN0ZW1zIHdpdGggdmFyaWFibGUgY2xvY2sgc3BlZWQgaXQgYWxzbyB1cGRhdGVzCisgKiB0aGUgdmFyaWFibGUgU3lzdGVtQ29yZUNsb2NrLiBTeXN0ZW1Jbml0IGlzIGNhbGxlZCBmcm9tIHN0YXJ0dXBfZGV2aWNlIGZpbGUuCisgKi8KK3ZvaWQgU3lzdGVtSW5pdCAodm9pZCk7CisKKy8qKgorICogQGJyaWVmIFVwZGF0ZXMgdGhlIFN5c3RlbUNvcmVDbG9jayB2YXJpYWJsZS4KKyAqCisgKiBJdCBtdXN0IGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgY29yZSBjbG9jayBpcyBjaGFuZ2VkIGR1cmluZyBwcm9ncmFtCisgKiBleGVjdXRpb24uIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSgpIGV2YWx1YXRlcyB0aGUgY2xvY2sgcmVnaXN0ZXIgc2V0dGluZ3MgYW5kIGNhbGN1bGF0ZXMKKyAqIHRoZSBjdXJyZW50IGNvcmUgY2xvY2suCisgKi8KK3ZvaWQgU3lzdGVtQ29yZUNsb2NrVXBkYXRlICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvKiBfU1lTVEVNX01LVzQxWjRfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9SRUFETUUubWQgYi90aGlyZF9wYXJ0eS9ueHAvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3N2Y3YzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTUgQEAKKyMgTlhQIFNlbWljb25kdWN0b3JzCisKK1VSTDogaHR0cDovL3d3dy5ueHAuY29tLworU0RLIFVSTDogaHR0cHM6Ly9tY3V4cHJlc3NvLm54cC5jb20vZW4vd2VsY29tZQorCitWZXJzaW9uOiAyLjAKKworCitMaWNlbnNlOgorT3BlbiBTb3VyY2UgLSBCU0QtMy1DbGF1c2UKKworRGVzY3JpcHRpb246CitUaGlzIGZvbGRlciBjb250YWlucyB0aGUgcGVyaXBoZXJyYWwgZHJpdmVycyB0aGF0IGFyZSBkZXNpZ25lZCBmb3IgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlcyAKK2luZGVudGlmaWVkIGZvciB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBibG9jay4KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvb3BlbnRocmVhZC10ZXN0LWRyaXZlci9MSUNFTlNFIGIvdGhpcmRfcGFydHkvb3BlbnRocmVhZC10ZXN0LWRyaXZlci9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9vcGVudGhyZWFkLXRlc3QtZHJpdmVyL0xJQ0VOU0UKQEAgLTAsMCArMSwzMzkgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvb3BlbnRocmVhZC10ZXN0LWRyaXZlci9SRUFETUUuZ29vZ2xlIGIvdGhpcmRfcGFydHkvb3BlbnRocmVhZC10ZXN0LWRyaXZlci9SRUFETUUuZ29vZ2xlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZGJiMTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9vcGVudGhyZWFkLXRlc3QtZHJpdmVyL1JFQURNRS5nb29nbGUKQEAgLTAsMCArMSwxMiBAQAorVVJMOiBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9hdXRvbWFrZS5naXQvdHJlZS9saWIvdGVzdC1kcml2ZXIKK1ZlcnNpb246IDIwMTYtMDEtMTEuMjIKK0xpY2Vuc2U6IEdQTCB2MgorTGljZW5zZSBGaWxlOiBMSUNFTlNFCisKK0Rlc2NyaXB0aW9uOgorQXV0b21ha2Ugc2NyaXB0IHRoYXQgZHJpdmVzIHRlc3RzIGV4ZWN1dGlvbi4KKworTG9jYWwgTW9kaWZpY2F0aW9uczoKK0NoYW5nZSB0aGUgdGVzdC1kcml2ZXIgYXV0b21ha2Ugc2NyaXB0IHRvIHN1cHBvcnQKK3BhcmFsbGVsIHRlc3Qgc2NyaXB0cyBleGVjdXRpb24sIGVhY2ggb25lIGluaXRpYXRlZAord2l0aCBhIHVuaXF1ZSBudW1iZXIuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9vcGVudGhyZWFkLXRlc3QtZHJpdmVyL3Rlc3QtZHJpdmVyIGIvdGhpcmRfcGFydHkvb3BlbnRocmVhZC10ZXN0LWRyaXZlci90ZXN0LWRyaXZlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOWViNjg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvb3BlbnRocmVhZC10ZXN0LWRyaXZlci90ZXN0LWRyaXZlcgpAQCAtMCwwICsxLDE2NSBAQAorIyEgL2Jpbi9zaAorIyB0ZXN0LWRyaXZlciAtIGJhc2ljIHRlc3RzdWl0ZSBkcml2ZXIgc2NyaXB0LgorCitzY3JpcHR2ZXJzaW9uPTIwMTYtMDEtMTEuMjI7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCisjIE1ha2UgdW5jb25kaXRpb25hbCBleHBhbnNpb24gb2YgdW5kZWZpbmVkIHZhcmlhYmxlcyBhbiBlcnJvci4gIFRoaXMKKyMgaGVscHMgYSBsb3QgaW4gcHJldmVudGluZyB0eXBvLXJlbGF0ZWQgYnVncy4KK3NldCAtdQorCit1c2FnZV9lcnJvciAoKQoreworICBlY2hvICIkMDogJCoiID4mMgorICBwcmludF91c2FnZSA+JjIKKyAgZXhpdCAyCit9CisKK3ByaW50X3VzYWdlICgpCit7CisgIGNhdCA8PEVORAorVXNhZ2U6CisgIHRlc3QtZHJpdmVyIC0tdGVzdC1uYW1lPU5BTUUgLS1sb2ctZmlsZT1QQVRIIC0tdHJzLWZpbGU9UEFUSAorICAgICAgICAgICAgICBbLS1leHBlY3QtZmFpbHVyZT17eWVzfG5vfV0gWy0tY29sb3ItdGVzdHM9e3llc3xub31dCisgICAgICAgICAgICAgIFstLWVuYWJsZS1oYXJkLWVycm9ycz17eWVzfG5vfV0gWy0tXQorICAgICAgICAgICAgICBURVNULVNDUklQVCBbVEVTVC1TQ1JJUFQtQVJHVU1FTlRTXQorVGhlICctLXRlc3QtbmFtZScsICctLWxvZy1maWxlJyBhbmQgJy0tdHJzLWZpbGUnIG9wdGlvbnMgYXJlIG1hbmRhdG9yeS4KK0VORAorfQorCit0ZXN0X25hbWU9ICMgVXNlZCBmb3IgcmVwb3J0aW5nLgorbG9nX2ZpbGU9ICAjIFdoZXJlIHRvIHNhdmUgdGhlIG91dHB1dCBvZiB0aGUgdGVzdCBzY3JpcHQuCit0cnNfZmlsZT0gICMgV2hlcmUgdG8gc2F2ZSB0aGUgbWV0YWRhdGEgb2YgdGhlIHRlc3QgcnVuLgorZXhwZWN0X2ZhaWx1cmU9bm8KK2NvbG9yX3Rlc3RzPW5vCitlbmFibGVfaGFyZF9lcnJvcnM9eWVzCit3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICBjYXNlICQxIGluCisgIC0taGVscCkgcHJpbnRfdXNhZ2U7IGV4aXQgJD87OworICAtLXZlcnNpb24pIGVjaG8gInRlc3QtZHJpdmVyICRzY3JpcHR2ZXJzaW9uIjsgZXhpdCAkPzs7CisgIC0tdGVzdC1uYW1lKSB0ZXN0X25hbWU9JDI7IHNoaWZ0OzsKKyAgLS1sb2ctZmlsZSkgbG9nX2ZpbGU9JDI7IHNoaWZ0OzsKKyAgLS10cnMtZmlsZSkgdHJzX2ZpbGU9JDI7IHNoaWZ0OzsKKyAgLS1jb2xvci10ZXN0cykgY29sb3JfdGVzdHM9JDI7IHNoaWZ0OzsKKyAgLS1leHBlY3QtZmFpbHVyZSkgZXhwZWN0X2ZhaWx1cmU9JDI7IHNoaWZ0OzsKKyAgLS1lbmFibGUtaGFyZC1lcnJvcnMpIGVuYWJsZV9oYXJkX2Vycm9ycz0kMjsgc2hpZnQ7OworICAtLSkgc2hpZnQ7IGJyZWFrOzsKKyAgLSopIHVzYWdlX2Vycm9yICJpbnZhbGlkIG9wdGlvbjogJyQxJyI7OworICAgKikgYnJlYWs7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK21pc3Npbmdfb3B0cz0KK3Rlc3QgeCIkdGVzdF9uYW1lIiA9IHggJiYgbWlzc2luZ19vcHRzPSIkbWlzc2luZ19vcHRzIC0tdGVzdC1uYW1lIgordGVzdCB4IiRsb2dfZmlsZSIgID0geCAmJiBtaXNzaW5nX29wdHM9IiRtaXNzaW5nX29wdHMgLS1sb2ctZmlsZSIKK3Rlc3QgeCIkdHJzX2ZpbGUiICA9IHggJiYgbWlzc2luZ19vcHRzPSIkbWlzc2luZ19vcHRzIC0tdHJzLWZpbGUiCitpZiB0ZXN0IHgiJG1pc3Npbmdfb3B0cyIgIT0geDsgdGhlbgorICB1c2FnZV9lcnJvciAidGhlIGZvbGxvd2luZyBtYW5kYXRvcnkgb3B0aW9ucyBhcmUgbWlzc2luZzokbWlzc2luZ19vcHRzIgorZmkKKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICB1c2FnZV9lcnJvciAibWlzc2luZyBhcmd1bWVudCIKK2ZpCisKK2lmIHRlc3QgJGNvbG9yX3Rlc3RzID0geWVzOyB0aGVuCisgICMgS2VlcCB0aGlzIGluIHN5bmMgd2l0aCAnbGliL2FtL2NoZWNrLmFtOiQoYW1fX3R0eV9jb2xvcnMpJy4KKyAgcmVkPScbWzA7MzFtJyAjIFJlZC4KKyAgZ3JuPScbWzA7MzJtJyAjIEdyZWVuLgorICBsZ249JxtbMTszMm0nICMgTGlnaHQgZ3JlZW4uCisgIGJsdT0nG1sxOzM0bScgIyBCbHVlLgorICBtZ249JxtbMDszNW0nICMgTWFnZW50YS4KKyAgc3RkPScbW20nICAgICAjIE5vIGNvbG9yLgorZWxzZQorICByZWQ9IGdybj0gbGduPSBibHU9IG1nbj0gc3RkPQorZmkKKworZG9fZXhpdD0ncm0gLWYgJGxvZ19maWxlICR0cnNfZmlsZTsgKGV4aXQgJHN0KTsgZXhpdCAkc3QnCit0cmFwICJzdD0xMjk7ICRkb19leGl0IiAxCit0cmFwICJzdD0xMzA7ICRkb19leGl0IiAyCit0cmFwICJzdD0xNDE7ICRkb19leGl0IiAxMwordHJhcCAic3Q9MTQzOyAkZG9fZXhpdCIgMTUKKworIyBUZXN0IHNjcmlwdCBpcyBydW4gaGVyZS4KKyMgR2V0IGFuIHVuaXF1ZSBvZmZzZXQKK2xvY2tfcGF0aD0iL3RtcC9vZmZzZXQiCitPRkZTRVQ9MAord2hpbGUgdHJ1ZTsgZG8KKyAgICBta2RpciAiJHtsb2NrX3BhdGh9LiR7T0ZGU0VUfS5sb2NrLmQiID4gL2Rldi9udWxsIDI+JjEKKyAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgYnJlYWsKKyAgICBmaQorICAgIE9GRlNFVD0kKGV4cHIgJE9GRlNFVCArIDEpIAorZG9uZQorCisjIFJ1biBhIHRlc3QKK1BPUlRfT0ZGU0VUPSRPRkZTRVQgIiRAIiA+JGxvZ19maWxlIDI+JjEKK2VzdGF0dXM9JD8KKworIyBSZXR1cm4gdGhlIG9mZnNldAorcm0gLXJmICIke2xvY2tfcGF0aH0uJHtPRkZTRVR9LmxvY2suZCIKKyMgUmVtb3ZlIHRoZSBmbGFzaCBmaWxlcworcm0gLWYgdG1wLyR7T0ZGU0VUfV8qLmZsYXNoCisKK2lmIHRlc3QgJGVuYWJsZV9oYXJkX2Vycm9ycyA9IG5vICYmIHRlc3QgJGVzdGF0dXMgLWVxIDk5OyB0aGVuCisgIHR3ZWFrZWRfZXN0YXR1cz0xCitlbHNlCisgIHR3ZWFrZWRfZXN0YXR1cz0kZXN0YXR1cworZmkKKworY2FzZSAkdHdlYWtlZF9lc3RhdHVzOiRleHBlY3RfZmFpbHVyZSBpbgorICAwOnllcykgY29sPSRyZWQgcmVzPVhQQVNTIHJlY2hlY2s9eWVzIGdjb3B5PXllczs7CisgIDA6KikgICBjb2w9JGdybiByZXM9UEFTUyAgcmVjaGVjaz1ubyAgZ2NvcHk9bm87OworICA3NzoqKSAgY29sPSRibHUgcmVzPVNLSVAgIHJlY2hlY2s9bm8gIGdjb3B5PXllczs7CisgIDk5OiopICBjb2w9JG1nbiByZXM9RVJST1IgcmVjaGVjaz15ZXMgZ2NvcHk9eWVzOzsKKyAgKjp5ZXMpIGNvbD0kbGduIHJlcz1YRkFJTCByZWNoZWNrPW5vICBnY29weT15ZXM7OworICAqOiopICAgY29sPSRyZWQgcmVzPUZBSUwgIHJlY2hlY2s9eWVzIGdjb3B5PXllczs7Citlc2FjCisKKyMgUmVwb3J0IHRoZSB0ZXN0IG91dGNvbWUgYW5kIGV4aXQgc3RhdHVzIGluIHRoZSBsb2dzLCBzbyB0aGF0IG9uZSBjYW4KKyMga25vdyB3aGV0aGVyIHRoZSB0ZXN0IHBhc3NlZCBvciBmYWlsZWQgc2ltcGx5IGJ5IGxvb2tpbmcgYXQgdGhlICcubG9nJworIyBmaWxlLCB3aXRob3V0IHRoZSBuZWVkIG9mIGFsc28gcGVha2luZyBpbnRvIHRoZSBjb3JyZXNwb25kaW5nICcudHJzJworIyBmaWxlIChhdXRvbWFrZSBidWcjMTE4MTQpLgorZWNobyAiJHJlcyAkdGVzdF9uYW1lIChleGl0IHN0YXR1czogJGVzdGF0dXMpIiA+PiRsb2dfZmlsZQorCisjIFJlcG9ydCBvdXRjb21lIHRvIGNvbnNvbGUuCitlY2hvICIke2NvbH0ke3Jlc30ke3N0ZH06ICR0ZXN0X25hbWUiCisKKyMgUmVnaXN0ZXIgdGhlIHRlc3QgcmVzdWx0LCBhbmQgb3RoZXIgcmVsZXZhbnQgbWV0YWRhdGEuCitlY2hvICI6dGVzdC1yZXN1bHQ6ICRyZXMiID4gJHRyc19maWxlCitlY2hvICI6Z2xvYmFsLXRlc3QtcmVzdWx0OiAkcmVzIiA+PiAkdHJzX2ZpbGUKK2VjaG8gIjpyZWNoZWNrOiAkcmVjaGVjayIgPj4gJHRyc19maWxlCitlY2hvICI6Y29weS1pbi1nbG9iYWwtbG9nOiAkZ2NvcHkiID4+ICR0cnNfZmlsZQorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMwIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9SRUFETUUubWQgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzODU0ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMjEgQEAKKyMgZW1iQVJDIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorIyMgSW50cm9kdWN0aW9uCitlbWJBUkMgQlNQIGlzIGEgYm9hcmQgc3VwcG9ydCBwYWNrYWdlIHRvIGZhY2lsaXRhdGUgdGhlIGRldmVsb3BtZW50IG9mIGVtYmVkZGVkIHN5c3RlbXMgYmFzZWQgb24gQVJDdjIgcHJvY2Vzc29ycy4KKworSXQgaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBhIGJvYXJkIHN1cHBvcnQgcGFja2FnZSBmb3IgQVJDdjIgdXNlcnMgYnkgZGVmaW5pbmcgY29uc2lzdGVudCBhbmQgc2ltcGxlIHNvZnR3YXJlIGludGVyZmFjZXMgdG8gdGhlIHByb2Nlc3NvciBhbmQgcGVyaXBoZXJhbHMuCisKKyMjIFVSTAoraHR0cHM6Ly93d3cuZW1iYXJjLm9yZy8KKworIyMgTGljZW5zZQorQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCiszKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX2NhY2hlLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL2FyY19jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjVlNjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL2FyY19jYWNoZS5jCkBAIC0wLDAgKzEsNDgyIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTE1DQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBBUkNfSEFMX01JU0NfQ0FDSEUNCisgKiBcYnJpZWYgaW1wbGVtZW50YXRpb24gb2YgY2FjaGUgcmVsYXRlZCBmdW5jdGlvbnMNCisgKi8NCisNCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfY2FjaGUuaCINCisNCisjZGVmaW5lIERJVl9ST1VORF9VUCh4LCB5KSAgKCgoeCkgKyAoeSkgLSAxKSAvICh5KSkNCisNCisNCitzdHJ1Y3QgY2FjaGVfY29uZmlnDQorew0KKyAgICB1aW50OF90IHZlcjsgICAgICAgICAgICAvKiB2ZXJzaW9uICovDQorICAgIHVpbnQ4X3QgYXNzb2M7ICAgICAgICAgIC8qIENhY2hlIEFzc29jaWF0aXZpdHkgKi8NCisgICAgdWludDE2X3QgbGluZTsgICAgICAgICAgLyogY2FjaGUgbGluZS9ibG9jayBzaXplICovDQorICAgIHVpbnQzMl90IGNhcGFjaXR5OyAgICAgIC8qIGNhcGFjaXR5ICovDQorfTsNCisNCisNCitzdGF0aWMgc3RydWN0IGNhY2hlX2NvbmZpZyBpY2FjaGVfY29uZmlnLCBkY2FjaGVfY29uZmlnOw0KKw0KKy8qKg0KKyAqIFxicmllZiBpbnZhbGlkYXRlIG11bHRpIGluc3RydWN0aW9uIGNhY2hlIGxpbmVzDQorICoNCisgKiBccGFyYW1baW5dIHN0YXJ0X2FkZHIgc3RhcnQgYWRkcmVzcyBpbiBpbnN0cnVjdGlvbiBjYWNoZQ0KKyAqIFxwYXJhbVtpbl0gc2l6ZSAgdGhlIGJ5dGVzIHRvIGJlIGludmFsaWRhdGVkDQorICogXHJldHVybiAwLCBzdWNjZWVkZWQsIC0xLCBmYWlsZWQNCisgKi8NCitpbnQzMl90IGljYWNoZV9pbnZhbGlkYXRlX21saW5lcyh1aW50MzJfdCBzdGFydF9hZGRyLCB1aW50MzJfdCBzaXplKQ0KK3sNCisgICAgaWYgKCFpY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGlmICgoc2l6ZSA9PSAwKSB8fCAoc2l6ZSA+IGljYWNoZV9jb25maWcuY2FwYWNpdHkpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgdWludDMyX3QgZW5kX2FkZHI7DQorICAgIHVpbnQzMl90IGxpbmVfc2l6ZTsNCisgICAgdWludDMyX3Qgc3RhdHVzOw0KKw0KKyAgICBsaW5lX3NpemUgPSAodWludDMyX3QpKGljYWNoZV9jb25maWcubGluZSk7DQorICAgIGVuZF9hZGRyID0gc3RhcnRfYWRkciArIHNpemUgLSAxOw0KKyAgICBzdGFydF9hZGRyICY9ICh1aW50MzJfdCkofihsaW5lX3NpemUgLSAxKSk7DQorDQorICAgIHN0YXR1cyA9IGNwdV9sb2NrX3NhdmUoKTsNCisNCisgICAgZG8NCisgICAgew0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX0lWSUwsIHN0YXJ0X2FkZHIpOw0KKyAgICAgICAgQXNtKCJub3BfcyIpOw0KKyAgICAgICAgQXNtKCJub3BfcyIpOw0KKyAgICAgICAgQXNtKCJub3BfcyIpOw0KKyAgICAgICAgc3RhcnRfYWRkciArPSBsaW5lX3NpemU7DQorICAgIH0NCisgICAgd2hpbGUgKHN0YXJ0X2FkZHIgPD0gZW5kX2FkZHIpOw0KKw0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoc3RhdHVzKTsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiBsb2NrIG11bHRpIGxpbmVzIGluIGluc3RydWN0aW9uIGNhY2hlDQorICoNCisgKiBccGFyYW1baW5dIHN0YXJ0X2FkZHIgc3RhcnQgYWRkcmVzcyBpbiBpbnN0cnVjdGlvbiBjYWNoZQ0KKyAqIFxwYXJhbVtpbl0gc2l6ZSAgdGhlIGJ5dGVzIHRvIGJlIGxvY2tlZA0KKyAqIFxyZXR1cm4gMCwgc3VjY2VlZGVkLCAtMSwgZmFpbGVkIChjYWNoZSBhbHJlYWR5IGxvY2tlZCBvciBvdGhlciByZWFzb25zKQ0KKyAqLw0KK2ludDMyX3QgaWNhY2hlX2xvY2tfbWxpbmVzKHVpbnQzMl90IHN0YXJ0X2FkZHIsIHVpbnQzMl90IHNpemUpDQorew0KKyAgICBpZiAoIWljYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgaWYgKChzaXplID09IDApIHx8IChzaXplID4gaWNhY2hlX2NvbmZpZy5jYXBhY2l0eSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICB1aW50MzJfdCBlbmRfYWRkcjsNCisgICAgdWludDMyX3QgbGluZV9zaXplOw0KKyAgICB1aW50MzJfdCBzdGF0dXM7DQorICAgIGludDMyX3QgZXJjZCA9IDA7DQorDQorICAgIGxpbmVfc2l6ZSA9ICh1aW50MzJfdCkoaWNhY2hlX2NvbmZpZy5saW5lKTsNCisgICAgZW5kX2FkZHIgPSBzdGFydF9hZGRyICsgc2l6ZSAtIDE7DQorICAgIHN0YXJ0X2FkZHIgJj0gKHVpbnQzMl90KSh+KGxpbmVfc2l6ZSAtIDEpKTsNCisNCisgICAgc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfSUNfTElMLCBzdGFydF9hZGRyKTsNCisNCisgICAgICAgIGlmIChfYXJjX2F1eF9yZWFkKEFVWF9JQ19DVFJMKSAmIElDX0NUUkxfT1BfU1VDQ0VFREVEKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHN0YXJ0X2FkZHIgKz0gbGluZV9zaXplOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVyY2QgPSAtMTsgIC8qIHRoZSBvcGVyYXRpb24gZmFpbGVkICovDQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgIH0NCisgICAgd2hpbGUgKHN0YXJ0X2FkZHIgPD0gZW5kX2FkZHIpOw0KKw0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoc3RhdHVzKTsNCisNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiBkaXJlY3RseSB3cml0ZSBpY2FjaGUgaW50ZXJuYWwgcmFtDQorICoNCisgKiBccGFyYW1baW5dIGNhY2hlX2FkZHIsIGljYWNoZSBpbnRlcm5hbCBhZGRyZXNzKHdheStpbmRleCtvZmZzZXQpDQorICogXHBhcmFtW2luXSB0YWcgICBjYWNoZSB0YWcgdG8gd3JpdGUgKHRhZytsb2NrIGJpdCt2YWxpZCBiaXQpDQorICogXHBhcmFtW2luXSBkYXRhICBjYWNoZSBkYXRhIHRvIHdyaXRlDQorICogXHJldHVybiAwLCBzdWNjZWVkZWQsIC0xLCBmYWlsZWQNCisgKi8NCitpbnQzMl90IGljYWNoZV9kaXJlY3Rfd3JpdGUodWludDMyX3QgY2FjaGVfYWRkciwgdWludDMyX3QgdGFnLCB1aW50MzJfdCBkYXRhKQ0KK3sNCisgICAgaWYgKCFpY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGlmIChfYXJjX2F1eF9yZWFkKEFVWF9JQ19DVFJMKSAmIElDX0NUUkxfSU5ESVJFQ1RfQUNDRVNTKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX1JBTV9BRERSLCBjYWNoZV9hZGRyKTsNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX1RBRywgdGFnKTsNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX0RBVEEsIGRhdGEpOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogXGJyaWVmIGRpcmVjdGx5IHJlYWQgaWNhY2hlIGludGVybmFsIHJhbQ0KKyAqDQorICogXHBhcmFtW2luXSBjYWNoZV9hZGRyLCBpY2FjaGUgaW50ZXJuYWwgYWRkcmVzcyh3YXkraW5kZXgrb2Zmc2V0KQ0KKyAqIFxwYXJhbVtvdXRdIHRhZyAgY2FjaGUgdGFnIHRvIHJlYWQgKHRhZytpbmRleCtsb2NrIGJpdCt2YWxpZCBiaXQpDQorICogXHBhcmFtW291dF0gZGF0YSBjYWNoZSBkYXRhIHRvIHJlYWQNCisgKiBccmV0dXJuIDAsIHN1Y2NlZWRlZCwgLTEsIGZhaWxlZA0KKyAqLw0KK2ludDMyX3QgaWNhY2hlX2RpcmVjdF9yZWFkKHVpbnQzMl90IGNhY2hlX2FkZHIsIHVpbnQzMl90ICp0YWcsIHVpbnQzMl90ICpkYXRhKQ0KK3sNCisgICAgaWYgKCFpY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGlmIChfYXJjX2F1eF9yZWFkKEFVWF9JQ19DVFJMKSAmIElDX0NUUkxfSU5ESVJFQ1RfQUNDRVNTKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX1JBTV9BRERSLCBjYWNoZV9hZGRyKTsNCisgICAgKnRhZyA9IF9hcmNfYXV4X3JlYWQoQVVYX0lDX1RBRyk7DQorICAgICpkYXRhID0gX2FyY19hdXhfcmVhZChBVVhfSUNfREFUQSk7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgaW5kaXJlY3RseSByZWFkIGljYWNoZSBpbnRlcm5hbCByYW0NCisgKg0KKyAqIFxwYXJhbVtpbl0gbWVtX2FkZHIsIG1lbW9yeSBhZGRyZXNzDQorICogXHBhcmFtW291dF0gdGFnICBjYWNoZSB0YWcgdG8gcmVhZA0KKyAqIFxwYXJhbVtvdXRdIGRhdGEgY2FjaGUgZGF0YSB0byByZWFkDQorICogXHJldHVybiAwLCBzdWNjZWVkZWQsIC0xLCBmYWlsZWQNCisgKi8NCitpbnQzMl90IGljYWNoZV9pbmRpcmVjdF9yZWFkKHVpbnQzMl90IG1lbV9hZGRyLCB1aW50MzJfdCAqdGFnLCB1aW50MzJfdCAqZGF0YSkNCit7DQorICAgIGlmICghaWNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICBpZiAoIShfYXJjX2F1eF9yZWFkKEFVWF9JQ19DVFJMKSAmIElDX0NUUkxfSU5ESVJFQ1RfQUNDRVNTKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JQ19SQU1fQUREUiwgbWVtX2FkZHIpOw0KKw0KKyAgICBpZiAoX2FyY19hdXhfcmVhZChBVVhfSUNfQ1RSTCkgJiBJQ19DVFJMX09QX1NVQ0NFRURFRCkNCisgICAgew0KKyAgICAgICAgKnRhZyA9IF9hcmNfYXV4X3JlYWQoQVVYX0lDX1RBRyk7DQorICAgICAgICAqZGF0YSA9IF9hcmNfYXV4X3JlYWQoQVVYX0lDX0RBVEEpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOyAgLyogdGhlIHNwZWNpZmllZCBtZW1vcnkgaXMgbm90IGluIGljYWNoZSAqLw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgaW52YWxpZGF0ZSBtdWx0aSBkYXRhIGNhY2hlIGxpbmVzDQorICoNCisgKiBccGFyYW1baW5dIHN0YXJ0X2FkZHIgc3RhcnQgYWRkcmVzcyBpbiBkYXRhIGNhY2hlDQorICogXHBhcmFtW2luXSBzaXplICB0aGUgYnl0ZXMgdG8gYmUgaW52YWxpZGF0ZWQNCisgKiBccmV0dXJuIDAsIHN1Y2NlZWRlZCwgLTEsIGZhaWxlZA0KKyAqLw0KK2ludDMyX3QgZGNhY2hlX2ludmFsaWRhdGVfbWxpbmVzKHVpbnQzMl90IHN0YXJ0X2FkZHIsIHVpbnQzMl90IHNpemUpDQorew0KKyAgICBpZiAoIWRjYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgdWludDMyX3QgZW5kX2FkZHI7DQorICAgIHVpbnQzMl90IGxpbmVfc2l6ZTsNCisgICAgdWludDMyX3Qgc3RhdHVzOw0KKw0KKyAgICBpZiAoKHNpemUgPT0gMCkgfHwgKHNpemUgPiBkY2FjaGVfY29uZmlnLmNhcGFjaXR5KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGxpbmVfc2l6ZSA9ICh1aW50MzJfdCkoZGNhY2hlX2NvbmZpZy5saW5lKTsNCisgICAgZW5kX2FkZHIgPSBzdGFydF9hZGRyICsgc2l6ZSAtIDE7DQorICAgIHN0YXJ0X2FkZHIgJj0gKHVpbnQzMl90KSh+KGxpbmVfc2l6ZSAtIDEpKTsNCisNCisgICAgc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfRENfSVZETCwgc3RhcnRfYWRkcik7DQorICAgICAgICBBc20oIm5vcF9zIik7DQorICAgICAgICBBc20oIm5vcF9zIik7DQorICAgICAgICBBc20oIm5vcF9zIik7DQorDQorICAgICAgICAvKiB3YWl0IGZvciBmbHVzaCBjb21wbGV0aW9uICovDQorICAgICAgICB3aGlsZSAoX2FyY19hdXhfcmVhZChBVVhfRENfQ1RSTCkgJiBEQ19DVFJMX0ZMVVNIX1NUQVRVUyk7DQorDQorICAgICAgICBzdGFydF9hZGRyICs9IGxpbmVfc2l6ZTsNCisgICAgfQ0KKyAgICB3aGlsZSAoc3RhcnRfYWRkciA8PSBlbmRfYWRkcik7DQorDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShzdGF0dXMpOw0KKw0KKyAgICByZXR1cm4gMDsNCisNCit9DQorDQorLyoqDQorICogXGJyaWVmIGZsdXNoIG11bHRpIGxpbmVzIGluIGRhdGEgY2FjaGUNCisgKg0KKyAqIFxwYXJhbVtpbl0gc3RhcnRfYWRkciBzdGFydCBhZGRyZXNzDQorICogXHBhcmFtW2luXSBzaXplICB0aGUgYnl0ZXMgdG8gYmUgZmx1c2hlZA0KKyAqIFxyZXR1cm4gMCwgc3VjY2VlZGVkLCAtMSwgZmFpbGVkDQorICovDQoraW50MzJfdCBkY2FjaGVfZmx1c2hfbWxpbmVzKHVpbnQzMl90IHN0YXJ0X2FkZHIsIHVpbnQzMl90IHNpemUpDQorew0KKyAgICBpZiAoIWRjYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgaWYgKChzaXplID09IDApIHx8IChzaXplID4gZGNhY2hlX2NvbmZpZy5jYXBhY2l0eSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICB1aW50MzJfdCBlbmRfYWRkcjsNCisgICAgdWludDMyX3QgbGluZV9zaXplOw0KKyAgICB1aW50MzJfdCBzdGF0dXM7DQorDQorICAgIGxpbmVfc2l6ZSA9ICh1aW50MzJfdCkoZGNhY2hlX2NvbmZpZy5saW5lKTsNCisgICAgZW5kX2FkZHIgPSBzdGFydF9hZGRyICsgc2l6ZSAtIDE7DQorICAgIHN0YXJ0X2FkZHIgJj0gKHVpbnQzMl90KSh+KGxpbmVfc2l6ZSAtIDEpKTsNCisNCisgICAgc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfRENfRkxETCwgc3RhcnRfYWRkcik7DQorICAgICAgICBBc20oIm5vcF9zIik7DQorICAgICAgICBBc20oIm5vcF9zIik7DQorICAgICAgICBBc20oIm5vcF9zIik7DQorDQorICAgICAgICAvKiB3YWl0IGZvciBmbHVzaCBjb21wbGV0aW9uICovDQorICAgICAgICB3aGlsZSAoX2FyY19hdXhfcmVhZChBVVhfRENfQ1RSTCkgJiBEQ19DVFJMX0ZMVVNIX1NUQVRVUyk7DQorDQorICAgICAgICBzdGFydF9hZGRyICs9IGxpbmVfc2l6ZTsNCisgICAgfQ0KKyAgICB3aGlsZSAoc3RhcnRfYWRkciA8PSBlbmRfYWRkcik7DQorDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShzdGF0dXMpOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogXGJyaWVmIGxvY2sgbXVsdGkgbGluZXMgaW4gZGF0YSBjYWNoZQ0KKyAqDQorICogXHBhcmFtW2luXSBzdGFydF9hZGRyIHN0YXJ0IGFkZHJlc3MgaW4gZGF0YSBjYWNoZQ0KKyAqIFxwYXJhbVtpbl0gc2l6ZSAgdGhlIGJ5dGVzIHRvIGJlIGxvY2tlZA0KKyAqIFxyZXR1cm4gMCwgc3VjY2VlZGVkLCAtMSwgZmFpbGVkDQorICovDQoraW50MzJfdCBkY2FjaGVfbG9ja19tbGluZXModWludDMyX3Qgc3RhcnRfYWRkciwgdWludDMyX3Qgc2l6ZSkNCit7DQorICAgIGlmICghZGNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICBpZiAoKHNpemUgPT0gMCkgfHwgKHNpemUgPiBkY2FjaGVfY29uZmlnLmNhcGFjaXR5KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHVpbnQzMl90IGVuZF9hZGRyOw0KKyAgICB1aW50MzJfdCBsaW5lX3NpemU7DQorICAgIHVpbnQzMl90IHN0YXR1czsNCisgICAgaW50MzJfdCBlcmNkID0gMDsNCisNCisgICAgbGluZV9zaXplID0gKHVpbnQzMl90KShkY2FjaGVfY29uZmlnLmxpbmUpOw0KKyAgICBlbmRfYWRkciA9IHN0YXJ0X2FkZHIgKyBzaXplIC0gMTsNCisgICAgc3RhcnRfYWRkciAmPSAodWludDMyX3QpKH4obGluZV9zaXplIC0gMSkpOw0KKw0KKyAgICBzdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorDQorICAgIGRvDQorICAgIHsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19MREwsIHN0YXJ0X2FkZHIpOw0KKyAgICAgICAgQXNtKCJub3BfcyIpOw0KKw0KKyAgICAgICAgaWYgKF9hcmNfYXV4X3JlYWQoQVVYX0RDX0NUUkwpICYgRENfQ1RSTF9PUF9TVUNDRUVERUQpDQorICAgICAgICB7DQorICAgICAgICAgICAgc3RhcnRfYWRkciArPSBsaW5lX3NpemU7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgZXJjZCA9IC0xOyAgLyogdGhlIG9wZXJhdGlvbiBmYWlsZWQgKi8NCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICB3aGlsZSAoc3RhcnRfYWRkciA8PSBlbmRfYWRkcik7DQorDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShzdGF0dXMpOw0KKw0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqDQorICogXGJyaWVmIGRpcmVjdGx5IHdyaXRlIGRjYWNoZSBpbnRlcm5hbCByYW0NCisgKg0KKyAqIFxwYXJhbVtpbl0gY2FjaGVfYWRkciwgZGNhY2hlIGludGVybmFsIGFkZHJlc3Mod2F5K2luZGV4K29mZnNldCkNCisgKiBccGFyYW1baW5dIHRhZyAgIGNhY2hlIHRhZyB0byB3cml0ZQ0KKyAqIFxwYXJhbVtpbl0gZGF0YSAgY2FjaGUgZGF0YSB0byB3cml0ZQ0KKyAqIFxyZXR1cm4gMCwgc3VjY2VlZGVkLCAtMSwgZmFpbGVkDQorICovDQoraW50MzJfdCBkY2FjaGVfZGlyZWN0X3dyaXRlKHVpbnQzMl90IGNhY2hlX2FkZHIsIHVpbnQzMl90IHRhZywgdWludDMyX3QgZGF0YSkNCit7DQorICAgIGlmICghZGNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICBpZiAoX2FyY19hdXhfcmVhZChBVVhfRENfQ1RSTCkgJiBEQ19DVFJMX0lORElSRUNUX0FDQ0VTUykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19SQU1fQUREUiwgY2FjaGVfYWRkcik7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19UQUcsIHRhZyk7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19EQVRBLCBkYXRhKTsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiBkaXJlY3RseSByZWFkIGRjYWNoZSBpbnRlcm5hbCByYW0NCisgKg0KKyAqIFxwYXJhbVtpbl0gY2FjaGVfYWRkciwgZGNhY2hlIGludGVybmFsIGFkZHJlc3Mod2F5K2luZGV4K29mZnNldCkNCisgKiBccGFyYW1bb3V0XSB0YWcgIGNhY2hlIHRhZyB0byByZWFkDQorICogXHBhcmFtW291dF0gZGF0YSBjYWNoZSBkYXRhIHRvIHJlYWQNCisgKiBccmV0dXJuIDAsIHN1Y2NlZWRlZCwgLTEsIGZhaWxlZA0KKyAqLw0KK2ludDMyX3QgZGNhY2hlX2RpcmVjdF9yZWFkKHVpbnQzMl90IGNhY2hlX2FkZHIsIHVpbnQzMl90ICp0YWcsIHVpbnQzMl90ICpkYXRhKQ0KK3sNCisgICAgaWYgKCFkY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGlmIChfYXJjX2F1eF9yZWFkKEFVWF9EQ19DVFJMKSAmIERDX0NUUkxfSU5ESVJFQ1RfQUNDRVNTKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0RDX1JBTV9BRERSLCBjYWNoZV9hZGRyKTsNCisgICAgKnRhZyA9IF9hcmNfYXV4X3JlYWQoQVVYX0RDX1RBRyk7DQorICAgICpkYXRhID0gX2FyY19hdXhfcmVhZChBVVhfRENfREFUQSk7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgaW5kaXJlY3RseSByZWFkIGRjYWNoZSBpbnRlcm5hbCByYW0NCisgKg0KKyAqIFxwYXJhbVtpbl0gbWVtX2FkZHIsIG1lbW9yeSBhZGRyZXNzKHRhZytpbmRleCtvZmZzZXQpDQorICogXHBhcmFtW291dF0gdGFnICBjYWNoZSB0YWcgdG8gcmVhZA0KKyAqIFxwYXJhbVtvdXRdIGRhdGEgY2FjaGUgZGF0YSB0byByZWFkDQorICogXHJldHVybiAwLCBzdWNjZWVkZWQsIC0xLCBmYWlsZWQNCisgKi8NCitpbnQzMl90IGRjYWNoZV9pbmRpcmVjdF9yZWFkKHVpbnQzMl90IG1lbV9hZGRyLCB1aW50MzJfdCAqdGFnLCB1aW50MzJfdCAqZGF0YSkNCit7DQorICAgIGlmICghZGNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICBpZiAoIShfYXJjX2F1eF9yZWFkKEFVWF9EQ19DVFJMKSAmIERDX0NUUkxfSU5ESVJFQ1RfQUNDRVNTKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19SQU1fQUREUiwgbWVtX2FkZHIpOw0KKw0KKyAgICBpZiAoX2FyY19hdXhfcmVhZChBVVhfRENfQ1RSTCkgJiBEQ19DVFJMX09QX1NVQ0NFRURFRCkNCisgICAgew0KKyAgICAgICAgKnRhZyA9IF9hcmNfYXV4X3JlYWQoQVVYX0RDX1RBRyk7DQorICAgICAgICAqZGF0YSA9IF9hcmNfYXV4X3JlYWQoQVVYX0RDX0RBVEEpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOyAgLyogdGhlIHNwZWNpZmllZCBtZW1vcnkgaXMgbm90IGluIGRjYWNoZSAqLw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGluaXRpYWxpemUgY2FjaGUNCisgKiAxLiBpbnZhbGlkYXRlIGljYWNoZSBhbmQgZGNhY2hlDQorICogMi4gT25seSBzdXBwb3J0IEFSQ3YyIGNhY2hlDQorICovDQordm9pZCBhcmNfY2FjaGVfaW5pdCh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgYnVpbGRfY2ZnOw0KKw0KKyAgICBidWlsZF9jZmcgPSBfYXJjX2F1eF9yZWFkKEFVWF9CQ1JfRF9DQUNIRSk7DQorDQorICAgIGRjYWNoZV9jb25maWcudmVyID0gYnVpbGRfY2ZnICYgMHhmZjsNCisNCisgICAgaWYgKGRjYWNoZV9jb25maWcudmVyID49IDB4MDQpICAgLyogQVJDdjIgKi8NCisgICAgew0KKyAgICAgICAgZGNhY2hlX2VuYWJsZShEQ19DVFJMX0RJU0FCTEVfRkxVU0hfTE9DS0VEIHwNCisgICAgICAgICAgICAgICAgICAgICAgRENfQ1RSTF9JTkRJUkVDVF9BQ0NFU1MgfCBEQ19DVFJMX0lOVkFMSURfRkxVU0gpOw0KKyAgICAgICAgZGNhY2hlX2ludmFsaWRhdGUoKTsNCisgICAgICAgIGRjYWNoZV9jb25maWcuYXNzb2MgPSAxIDw8ICgoYnVpbGRfY2ZnID4+IDgpICYgMHhmKTsNCisgICAgICAgIGRjYWNoZV9jb25maWcuY2FwYWNpdHkgPSA1MTIgPDwgKChidWlsZF9jZmcgPj4gMTIpICYgMHhmKTsNCisgICAgICAgIGRjYWNoZV9jb25maWcubGluZSA9IDE2IDw8ICgoYnVpbGRfY2ZnID4+IDE2KSAmIDB4Zik7DQorICAgIH0NCisNCisgICAgYnVpbGRfY2ZnID0gX2FyY19hdXhfcmVhZChBVVhfQkNSX0lfQ0FDSEUpOw0KKw0KKyAgICBpY2FjaGVfY29uZmlnLnZlciA9IGJ1aWxkX2NmZyAmIDB4ZmY7DQorDQorICAgIGlmIChpY2FjaGVfY29uZmlnLnZlciA+PSAweDA0KSAgIC8qIEFSQ3YyICovDQorICAgIHsNCisgICAgICAgIGljYWNoZV9jb25maWcuYXNzb2MgPSAxIDw8ICgoYnVpbGRfY2ZnID4+IDgpICYgMHhmKTsNCisgICAgICAgIGljYWNoZV9jb25maWcuY2FwYWNpdHkgPSA1MTIgPDwgKChidWlsZF9jZmcgPj4gMTIpICYgMHhmKTsNCisgICAgICAgIGljYWNoZV9jb25maWcubGluZSA9IDggPDwgKChidWlsZF9jZmcgPj4gMTYpICYgMHhmKTsNCisNCisgICAgICAgIGljYWNoZV9lbmFibGUoSUNfQ1RSTF9JQ19FTkFCTEUpOw0KKyAgICAgICAgaWNhY2hlX2ludmFsaWRhdGUoKTsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL2FyY19leGNfYXNtLlMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL2FyY19leGNfYXNtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmOWQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX2V4Y19hc20uUwpAQCAtMCwwICsxLDIwMiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0xNQ0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fQ1BVDQorICogXGJyaWVmICBhc3NlbWJseSBwYXJ0IG9mIGV4Y2VwdGlvbiBhbmQgaW50ZXJydXB0IHByb2Nlc3NpbmcNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCBBUkNfSEFMX0VYQ0VQVElPTl9DUFUNCisgKiBAew0KKyAqLw0KKw0KKy8qIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24gKi8NCisvKioNCisgKiBcZm4gdm9pZCBleGNfZW50cnlfY3B1KHZvaWQpDQorICogXGJyaWVmIGRlZmF1bHQgZW50cnkgb2YgQ1BVIGV4Y2VwdGlvbnMsIHN1Y2ggYXMgVExCIG1pc3MgYW5kIHN3YXAuDQorICoNCisgKiBcZm4gdm9pZCBleGNfZW50cnlfaW50KHZvaWQpDQorICogXGJyaWVmIG5vcm1hbCBpbnRlcnJ1cHQgZXhjZXB0aW9uIGVudHJ5Lg0KKyAqICBJbiBkZWZhdWx0LCBhbGwgaW50ZXJydXB0IGV4Y2VwdGlvbnMgYXJlIGluc3RhbGxlZCB3aXRoIG5vcm1hbCBlbnRyeS4NCisgKiAgSWYgRklSUSBpcyByZXF1aXJlZCwgZXhjX2VudHJ5X2ZpcnEgc2hvdWxkIGJlIHRoZSBlbnRyeS4NCisgKg0KKyAqIFxmbiB2b2lkIGV4Y19lbnRyeV9maXJxKHZvaWQpDQorICogXGJyaWVmIGZpcnEgZXhjZXB0aW9uIGVudHJ5DQorICovDQorLyoqIH1AICovDQorDQorLyoqIEBjb25kIEVYQ0VQVElPTl9BU00gKi8NCisNCisjZGVmaW5lIF9fQVNTRU1CTFlfXw0KKyNpbmNsdWRlICJlbWJBUkNfQlNQX2NvbmZpZy5oIg0KKyNpbmNsdWRlICIuLi9pbmMvYXJjL2FyYy5oIg0KKyNpbmNsdWRlICIuLi9pbmMvYXJjL2FyY19hc21fY29tbW9uLmgiDQorDQorLmZpbGUgImFyY19leGNfYXNtLlMiDQorDQorLyogZW50cnkgZm9yIGNwdSBleGNlcHRpb24gaGFuZGxpbmcgKi8NCisudGV4dA0KKy5nbG9iYWwgZXhjX2VudHJ5X2NwdQ0KKy53ZWFrIGV4Y19lbnRyeV9jcHUNCisuYWxpZ24gNA0KK2V4Y19lbnRyeV9jcHU6DQorDQorRVhDRVBUSU9OX1BST0xPR1VFDQorDQorbW92IHIzLCBzcCAgICAgICAgICAgICAgICAgIC8qIGFzIGV4Y2VwdGlvbiBoYW5kbGVyJ3MgcGFyYShleGNfZnJhbWUpICovDQorDQorLyogZXhjX25lc3RfY291bnQgKzEgKi8NCitsZCAgcjAsIFtleGNfbmVzdF9jb3VudF0NCithZGQgcjAsIHIwLCAxDQorc3QgIHIwLCBbZXhjX25lc3RfY291bnRdDQorDQorLyogZmluZCB0aGUgZXhjZXB0aW9uIGNhdXNlICovDQorbHIgIHIwLCBbQVVYX0VDUl0NCitsc3IgcjAsIHIwLCAxNg0KK2Jtc2sgICAgcjAsIHIwLCA3DQorbW92IHIxLCBleGNfaW50X2hhbmRsZXJfdGFibGUNCitsZC5hcyAgIHIyLCBbcjEsIHIwXQ0KKw0KK21vdiByMCwgcjMNCitqbCAgW3IyXSAgICAgICAgICAgICAgICAgICAgLyoganVtcCB0byBleGNlcHRpb24gaGFuZGxlciB3aGVyZSBpbnRlcnJ1cHRzIGFyZSBub3QgYWxsb3dlZCEgKi8NCisNCisvKiBpbnRlcnJ1cHRzIGFyZSBub3QgYWxsb3dlZCAqLw0KK2V4Y19yZXR1cm46DQorDQorLyogZXhjX25lc3RfY291bnQgLTEgKi8NCitsZCAgcjAsIFtleGNfbmVzdF9jb3VudF0NCitzdWIgcjAsIHIwLCAxDQorc3QgIHIwLCBbZXhjX25lc3RfY291bnRdDQorDQorRVhDRVBUSU9OX0VQSUxPR1VFDQorcnRpZQ0KKw0KKw0KKy8qKioqKiogZW50cnkgZm9yIG5vcm1hbCBpbnRlcnJ1cHQgZXhjZXB0aW9uIGhhbmRsaW5nICoqKioqKi8NCisuZ2xvYmFsIGV4Y19lbnRyeV9pbnQNCisud2VhayBleGNfZW50cnlfaW50DQorLmFsaWduIDQNCitleGNfZW50cnlfaW50Og0KK2NscmkgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKyNpZiBBUkNfRkVBVFVSRV9GSVJRID09IDENCisjaWYgQVJDX0ZFQVRVUkVfUkdGX05VTV9CQU5LUyA+IDENCitsciAgcjAsIFtBVVhfSVJRX0FDVF0gICAgICAgICAgIC8qICBjaGVjayB3aGV0aGVyIGl0IGlzIFAwIGludGVycnVwdCAqLw0KK2J0c3QgICAgcjAsIDANCitibnogZXhjX2VudHJ5X2ZpcnENCisjZWxzZQ0KK1BVU0ggICAgcjEwDQorbHIgIHIxMCwgW0FVWF9JUlFfQUNUXQ0KK2J0c3QgICAgcjEwLCAwDQorUE9QIHIxMA0KK2JueiBleGNfZW50cnlfZmlycQ0KKyNlbmRpZg0KKyNlbmRpZg0KK0lOVEVSUlVQVF9QUk9MT0dVRSAgICAgICAgICAvKiBzYXZlIHNjcmF0Y2ggcmVncywgdGhpcyB3aWxsIGJlIGFmZmVjdGVkICAqLw0KKw0KKw0KKy8qIGV4Y19uZXN0X2NvdW50ICsxICovDQorbGQgIHIwLCBbZXhjX25lc3RfY291bnRdDQorYWRkIHIwLCByMCwgMQ0KK3N0ICByMCwgW2V4Y19uZXN0X2NvdW50XQ0KKw0KKw0KK2xyICByMCwgW0FVWF9JUlFfQ0FVU0VdDQorbW92IHIxLCBleGNfaW50X2hhbmRsZXJfdGFibGUNCitsZC5hcyAgIHIyLCBbcjEsIHIwXSAgICAgICAgICAgICAgICAvKiByMiA9IF9rZXJuZWxfZXhjX3RibCArIGlycW5vICo0ICovDQorDQorLyogZm9yIHRoZSBjYXNlIG9mIHNvZnR3YXJlIHRyaWdnZXJlZCBpbnRlcnJ1cHQgKi8NCitsciAgcjMsIFtBVVhfSVJRX0hJTlRdDQorY21wIHIzLCByMA0KK2JuZS5kICAgaXJxX2hpbnRfaGFuZGxlZA0KK3hvciByMywgcjMsIHIzDQorc3IgIHIzLCBbQVVYX0lSUV9ISU5UXQ0KK2lycV9oaW50X2hhbmRsZWQ6DQorc2V0aSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuYWJsZSBoaWdoZXIgcHJpb3JpdHkgaW50ZXJydXB0ICovDQorDQorbW92IHIwLCBzcA0KK2psICBbcjJdICAgICAgICAgICAgICAgICAgICAvKiBqdW1wIHRvIGludGVycnVwdCBoYW5kbGVyICovDQorDQorLyogbm8gaW50ZXJydXB0cyBhcmUgYWxsb3dlZCBmcm9tIGhlcmUgKi8NCitpbnRfcmV0dXJuOg0KK2NscmkgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIGV4Y19uZXN0X2NvdW50IC0xICovDQorbGQgIHIwLCBbZXhjX25lc3RfY291bnRdDQorc3ViIHIwLCByMCwgMQ0KK3N0ICByMCwgW2V4Y19uZXN0X2NvdW50XQ0KKw0KK0lOVEVSUlVQVF9FUElMT0dVRQ0KK3J0aWUNCisNCisvKioqKioqIGVudHJ5IGZvciBmYXN0IGlycSBleGNlcHRpb24gaGFuZGxpbmcgKioqKioqLw0KKy5nbG9iYWwgZXhjX2VudHJ5X2ZpcnENCisud2VhayBleGNfZW50cnlfZmlycQ0KKy5hbGlnbiA0DQorZXhjX2VudHJ5X2ZpcnE6DQorY2xyaSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2FibGUgaW50ZXJydXB0ICovDQorU0FWRV9GSVFfRVhDX1JFR1MNCisNCisvKiBleGNfbmVzdF9jb3VudCArMSAqLw0KK2xkICByMCwgW2V4Y19uZXN0X2NvdW50XQ0KK2FkZCByMCwgcjAsIDENCitzdCAgcjAsIFtleGNfbmVzdF9jb3VudF0NCisNCitsciAgcjAsIFtBVVhfSVJRX0NBVVNFXQ0KK21vdiByMSwgZXhjX2ludF9oYW5kbGVyX3RhYmxlDQorbGQuYXMgICByMiwgW3IxLCByMF0gICAgICAgICAgICAgICAgLyogcjIgPSBfa2VybmVsX2V4Y190YmwgKyBpcnFubyAqNCAqLw0KKw0KKy8qIGZvciB0aGUgY2FzZSBvZiBzb2Z0d2FyZSB0cmlnZ2VyZWQgaW50ZXJydXB0ICovDQorbHIgIHIzLCBbQVVYX0lSUV9ISU5UXQ0KK2NtcCByMywgcjANCitibmUuZCAgIGZpcnFfaGludF9oYW5kbGVkDQoreG9yIHIzLCByMywgcjMNCitzciAgcjMsIFtBVVhfSVJRX0hJTlRdDQorZmlycV9oaW50X2hhbmRsZWQ6DQorDQoramwgIFtyMl0gICAgICAgICAgICAgICAgICAgIC8qIGp1bXAgdG8gaW50ZXJydXB0IGhhbmRsZXIgKi8NCisNCisvKiBubyBpbnRlcnJ1cHRzIGFyZSBhbGxvd2VkIGZyb20gaGVyZSAqLw0KK2ZpcnFfcmV0dXJuOg0KKw0KKy8qIGV4Y19uZXN0X2NvdW50IC0xICovDQorbGQgIHIwLCBbZXhjX25lc3RfY291bnRdDQorc3ViIHIwLCByMCwgMQ0KK3N0ICByMCwgW2V4Y19uZXN0X2NvdW50XQ0KKw0KK1JFU1RPUkVfRklRX0VYQ19SRUdTDQorcnRpZQ0KKw0KKy8qKiBAZW5kY29uZCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX2V4Y2VwdGlvbi5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9hcmNfZXhjZXB0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiYTVkYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX2V4Y2VwdGlvbi5jCkBAIC0wLDAgKzEsNTUyIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTE1DQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBBUkNfSEFMX0VYQ0VQVElPTl9DUFUgQVJDX0hBTF9FWENFUFRJT05fSU5URVJSVVBUDQorICogXGJyaWVmIEMgSW1wbGVtZW50YXRpb24gb2YgZXhjZXB0aW9uIGFuZCBpbnRlcnJ1cHQgbWFuYWdlbWVudA0KKyAqLw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19leGNlcHRpb24uaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfY2FjaGUuaCINCisNCisvLyNkZWZpbmUgICAgREJHX0xFU1MNCisvLyNpbmNsdWRlICJlbWJBUkNfZGVidWcuaCINCisNCisvKioNCisgKiBcYWRkdG9ncm91cCBBUkNfSEFMX0VYQ0VQVElPTl9DUFUNCisgKiBAew0KKyAqIFx2YXIgZXhjX2VudHJ5X3RhYmxlDQorICogXGJyaWVmIGV4Y2VwdGlvbiBlbnRyeSB0YWJsZQ0KKyAqDQorICogaW5zdGFsbCBleGNlcHRpb24gZW50cnkgdGFibGUgdG8gQVJDX0FVWF9JTlRfVkVDVF9CQVNFIGluIHN0YXJ0dXAuDQorICogQWNjb3JkaW5nIHRvIEFSQ3YyIElTQSwgdmVjdG9ycyBhcmUgZmV0Y2hlZCBpbiBpbnN0cnVjdGlvbiBzcGFjZSBhbmQgdGh1cw0KKyAqIG1heSBiZSBwcmVzZW50IGluIElDQ00sIEluc3RydWN0aW9uIENhY2hlLCBvcg0KKyAqIG1haW4gbWVtb3J5IGFjY2Vzc2VkIGJ5IGluc3RydWN0aW9uIGZldGNoIGxvZ2ljLg0KKyAqIFNvIGl0IGlzIHB1dCBpbnRvIGEgc3BlY2lmaWMgc2VjdGlvbiAudmVjdG9yLg0KKyAqDQorICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgZXhjX2VudHJ5X3RhYmxlIG1heWJlIGNhY2hlZCBpbiBBUkMuIFNvbWUgZnVuY3Rpb25zIGlzDQorICogZGVmaW5lZCBpbiAucyBmaWxlcy4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVQ0KKyAqIFxicmllZiAgZGVmYXVsdCBjcHUgZXhjZXB0aW9uIGhhbmRsZXINCisgKiBccGFyYW0gcF9leGNpbmYgcG9pbnRlciB0byB0aGUgZXhjZXB0aW9uIGZyYW1lDQorICovDQorc3RhdGljIHZvaWQgZXhjX2hhbmRsZXJfZGVmYXVsdCh2b2lkICpwX2V4Y2luZikNCit7DQorICAgIHVpbnQzMl90IGV4Y3B0X2NhdXNlX3JlZyA9IDA7DQorICAgIHVpbnQzMl90IGV4Y3B0X3JldF9yZWcgPSAwOw0KKyAgICB1aW50MzJfdCBleGNfbm8gPSAwOw0KKw0KKyAgICBleGNwdF9jYXVzZV9yZWcgPSBfYXJjX2F1eF9yZWFkKEFVWF9FQ1IpOw0KKyAgICBleGNwdF9yZXRfcmVnID0gX2FyY19hdXhfcmVhZChBVVhfRVJSRVQpOw0KKyAgICBleGNfbm8gPSAoZXhjcHRfY2F1c2VfcmVnID4+IDE2KSAmIDB4ZmY7DQorDQorICAgIC8vZGJnX3ByaW50ZihEQkdfTEVTU19JTkZPLCAiZGVmYXVsdCBjcHUgZXhjZXB0aW9uIGhhbmRsZXJcclxuIik7DQorICAgIC8vZGJnX3ByaW50ZihEQkdfTEVTU19JTkZPLCAiZXhjX25vOiVkLCBsYXN0IHNwOjB4JTA4eCwgZWNyOjB4JTA4eCwgZXJldDoweCUwOHhcclxuIiwNCisgICAgLy9leGNfbm8sICh1aW50MzJfdClwX2V4Y2luZiwgZXhjcHRfY2F1c2VfcmVnLCBleGNwdF9yZXRfcmVnKTsNCisjaWYgU0VDVVJFU0hJRUxEX1ZFUlNJT04gPT0gMg0KKw0KKyAgICB3aGlsZSAoMSk7DQorDQorI2Vsc2UNCisgICAgQXNtKCJrZmxhZyAxIik7DQorI2VuZGlmDQorfQ0KKw0KKw0KKy8qKg0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0lOVEVSUlVQVA0KKyAqIFxicmllZiAgZGVmYXVsdCBpbnRlcnJ1cHQgaGFuZGxlcg0KKyAqIFxwYXJhbVtpbl0gcF9leGNpbmYgIGluZm9ybWF0aW9uIGZvciBpbnRlcnJ1cHQgaGFuZGxlcg0KKyAqLw0KK3N0YXRpYyB2b2lkIGludF9oYW5kbGVyX2RlZmF1bHQodm9pZCAqcF9leGNpbmYpDQorew0KKyAgICB1aW50MzJfdCBpbnRfY2F1c2VfcmVnID0gMDsNCisNCisgICAgaW50X2NhdXNlX3JlZyA9IF9hcmNfYXV4X3JlYWQoQVVYX0lSUV9DQVVTRSk7DQorICAgIC8vZGJnX3ByaW50ZihEQkdfTEVTU19JTkZPLCAiZGVmYXVsdCBpbnRlcnJ1cHQgaGFuZGxlclxyXG4iKTsNCisgICAgLy9kYmdfcHJpbnRmKERCR19MRVNTX0lORk8sICJsYXN0IHNwOjB4JTA4eCwgaWNhdXNlOjB4JTA4eFxyXG4iLCAodWludDMyX3QpcF9leGNpbmYsIGludF9jYXVzZV9yZWcpOw0KKyNpZiBTRUNVUkVTSElFTERfVkVSU0lPTiA9PSAyDQorDQorICAgIHdoaWxlICgxKTsNCisNCisjZWxzZQ0KKyAgICBBc20oImtmbGFnIDEiKTsNCisjZW5kaWYNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMDI0KSwgc2VjdGlvbigiLnZlY3RvciIpKSkNCitFWENfRU5UUlkgZXhjX2VudHJ5X3RhYmxlW05VTV9FWENfQUxMXSA9DQorew0KKyAgICBbMF0gPSBfYXJjX3Jlc2V0LA0KKyAgICBbMSAuLi4gTlVNX0VYQ19DUFUgLSAxXSA9IGV4Y19lbnRyeV9jcHUsDQorICAgIFtOVU1fRVhDX0NQVSAuLi4gTlVNX0VYQ19BTEwgLSAxXSA9IGV4Y19lbnRyeV9pbnQNCit9Ow0KKy8qKg0KKyAqIFx2YXIgZXhjX2ludF9oYW5kbGVyX3RhYmxlDQorICogXGJyaWVmIHRoZSBjcHUgZXhjZXB0aW9uIGFuZCBpbnRlcnJ1cHQgZXhjZXB0aW9uIGhhbmRsZXIgdGFibGUNCisgKiBjYWxsZWQgaW4gZXhjX2VudHJ5X2RlZmF1bHQgYW5kIGV4Y19lbnRyeV9pbnQNCisgKi8NCitFWENfSEFORExFUiBleGNfaW50X2hhbmRsZXJfdGFibGVbTlVNX0VYQ19BTExdID0NCit7DQorICAgIFswIC4uLiBOVU1fRVhDX0NQVSAtIDFdID0gZXhjX2hhbmRsZXJfZGVmYXVsdCwNCisgICAgW05VTV9FWENfQ1BVIC4uLiBOVU1fRVhDX0FMTCAtIDFdID0gaW50X2hhbmRsZXJfZGVmYXVsdA0KK307DQorDQorLyoqDQorICogXHZhciBleGNfbmVzdF9jb3VudA0KKyAqIFxicmllZiB0aGUgY291bnRlciBmb3IgZXhjL2ludCBwcm9jZXNzaW5nLCA9MCBubyBpbnQvZXhjDQorICogPjEgaW4gaW50L2V4YyBwcm9jZXNzaW5nDQorICogQH0NCisgKi8NCit1aW50MzJfdCBleGNfbmVzdF9jb3VudDsNCisNCit0eXBlZGVmIHN0cnVjdCBhdXhfaXJxX2N0cmxfZmllbGQNCit7DQorICAgIC8qIG5vdGU6IGxpdHRsZSBlbmRpYW4gKi8NCisgICAgdWludDMyX3Qgc2F2ZV9ucl9ncHJfcGFpcnM6IDU7ICAvKiogSW5kaWNhdGVzIG51bWJlciBvZiBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgcGFpcnMgc2F2ZWQsIGZyb20gMCB0byA4LzE2ICovDQorICAgIHVpbnQzMl90IHJlczogNDsgICAgICAgIC8qKiBSZXNlcnZlZCAqLw0KKyAgICB1aW50MzJfdCBzYXZlX2JsaW5rOiAxOyAgICAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRvIHNhdmUgYW5kIHJlc3RvcmUgQkxJTksgKi8NCisgICAgdWludDMyX3Qgc2F2ZV9scF9yZWdzOiAxOyAgIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0byBzYXZlIGFuZCByZXN0b3JlIGxvb3AgcmVnaXN0ZXJzIChMUF9DT1VOVCwgTFBfU1RBUlQsIExQX0VORCkgKi8NCisgICAgdWludDMyX3Qgc2F2ZV91X3RvX3U6IDE7ICAgIC8qKiBJbmRpY2F0ZXMgaWYgdXNlciBjb250ZXh0IGlzIHNhdmVkIHRvIHVzZXIgc3RhY2sgKi8NCisgICAgdWludDMyX3QgcmVzMjogMTsgICAgICAgLyoqIFJlc2VydmVkICovDQordWludDMyX3Qgc2F2ZV9pZHhfcmVnczoNCisgICAgMTsgIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0byBzYXZlIGFuZCByZXN0b3JlIGNvZGUtZGVuc2l0eSByZWdpc3RlcnMgKEVJX0JBU0UsIEpMSV9CQVNFLCBMRElfQkFTRSkgKi8NCisgICAgdWludDMyX3QgcmVzMzogMTg7ICAgICAgLyoqIFJlc2VydmVkICovDQorfSBhdXhfaXJxX2N0cmxfZmllbGRfdDsNCisNCit0eXBlZGVmIHVuaW9uDQorew0KKyAgICBhdXhfaXJxX2N0cmxfZmllbGRfdCBiaXRzOw0KKyAgICB1aW50MzJfdCB2YWx1ZTsNCit9IGF1eF9pcnFfY3RybF90Ow0KKw0KKy8qKg0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVSBBUkNfSEFMX0VYQ0VQVElPTl9JTlRFUlJVUFQNCisgKiBcYnJpZWYgIGludGlhbGl6ZSB0aGUgZXhjZXB0aW9uIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcNCisgKi8NCit2b2lkIGV4Y19pbnRfaW5pdCh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgaTsNCisgICAgdWludDMyX3Qgc3RhdHVzOw0KKyAgICBhdXhfaXJxX2N0cmxfdCBpY3RybDsNCisNCisgICAgaWN0cmwudmFsdWUgPSAwOw0KKw0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KKyAgICBpY3RybC5iaXRzLnNhdmVfbnJfZ3ByX3BhaXJzID0gNjsgICAvKiByMCB0byByMTEgKHIxMiBzYXZlZCBtYW51YWxseSkgKi8NCisjZWxzZQ0KKyAgICBpY3RybC5iaXRzLnNhdmVfbnJfZ3ByX3BhaXJzID0gMzsgICAvKiByMCB0byByMywgcjEwLCByMTEgICovDQorI2VuZGlmDQorICAgIGljdHJsLmJpdHMuc2F2ZV9ibGluayA9IDE7DQorICAgIGljdHJsLmJpdHMuc2F2ZV9scF9yZWdzID0gMTsgICAgICAgIC8qIExQX0NPVU5ULCBMUF9TVEFSVCwgTFBfRU5EICovDQorICAgIGljdHJsLmJpdHMuc2F2ZV91X3RvX3UgPSAwOyAgICAgLyogdXNlciBjdHh0IHNhdmVkIG9uIGtlcm5lbCBzdGFjayAqLw0KKyAgICBpY3RybC5iaXRzLnNhdmVfaWR4X3JlZ3MgPSAxOyAgICAgICAvKiBKTEksIExESSwgRUkgKi8NCisNCisgICAgc3RhdHVzID0gYXJjX2xvY2tfc2F2ZSgpOw0KKw0KKyAgICBmb3IgKGkgPSBOVU1fRVhDX0NQVTsgaSA8IE5VTV9FWENfQUxMOyBpKyspDQorICAgIHsNCisgICAgICAgIC8qIGludGVycnVwdCBsZXZlbCB0cmlnZ2VyZWQsIGRpc2FibGVkLCBwcmlvcml0eSBpcyB0aGUgbG93ZXN0ICovDQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX1NFTEVDVCwgaSk7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX0VOQUJMRSwgMCk7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX1RSSUdHRVIsIDApOw0KKyNpZiBkZWZpbmVkKEFSQ19GRUFUVVJFX1NFQ19QUkVTRU5UKSAmJiAoU0VDVVJFU0hJRUxEX1ZFUlNJT04gPCAyKQ0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9QUklPUklUWSwgKDEgPDwgQVVYX0lSUV9QUklPUklUWV9CSVRfUykgfCAoSU5UX1BSSV9NQVggLSBJTlRfUFJJX01JTikpOw0KKyNlbHNlDQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX1BSSU9SSVRZLCBJTlRfUFJJX01BWCAtIElOVF9QUklfTUlOKTsNCisjZW5kaWYNCisgICAgfQ0KKw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX0NUUkwsIGljdHJsLnZhbHVlKTsNCisNCisgICAgYXJjX3VubG9ja19yZXN0b3JlKHN0YXR1cyk7DQorDQorICAgIC8qKiBpcG0gc2hvdWxkIGJlIHNldCBhZnRlciBjcHUgdW5sb2NrIHJlc3RvcmUgdG8gYXZvaWQgcmVzZXQgb2YgdGhlIHN0YXR1czMyIHZhbHVlICovDQorICAgIGFyY19pbnRfaXBtX3NldCgoSU5UX1BSSV9NQVggLSBJTlRfUFJJX01JTikpOw0KK30NCisNCisvKioNCisgKiBcaW5ncm91cCBBUkNfSEFMX0VYQ0VQVElPTl9DUFUNCisgKiBcYnJpZWYgIGluc3RhbGwgYSBDUFUgZXhjZXB0aW9uIGVudHJ5DQorICogXHBhcmFtW2luXSBleGNubyBleGNlcHRpb24gbnVtYmVyDQorICogXHBhcmFtW2luXSBlbnRyeSB0aGUgZW50cnkgb2YgZXhjZXB0aW9uIHRvIGluc3RhbGwNCisgKi8NCitpbnQzMl90IGV4Y19lbnRyeV9pbnN0YWxsKGNvbnN0IHVpbnQzMl90IGV4Y25vLCBFWENfRU5UUlkgZW50cnkpDQorew0KKyAgICB1aW50MzJfdCBzdGF0dXM7DQorDQorICAgIEVYQ19FTlRSWSAqdGFibGUgPSAoRVhDX0VOVFJZICopX2FyY19hdXhfcmVhZChBVVhfSU5UX1ZFQ1RfQkFTRSk7DQorDQorICAgIGlmIChleGNubyA8IE5VTV9FWENfQUxMICYmIGVudHJ5ICE9IE5VTEwNCisgICAgICAgICYmIHRhYmxlW2V4Y25vXSAhPSBlbnRyeSkNCisgICAgew0KKyAgICAgICAgc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKyAgICAgICAgLyogZGlyZWN0bHkgd3JpdGUgdG8gbWVtLCBhcyBhcmMgZ2V0cyBleGNlcHRpb24gaGFuZGxlciBmcm9tIG1lbSBub3QgZnJvbSBjYWNoZSAqLw0KKyAgICAgICAgLyogRklYTUUsIGhlcmUgbWF5YmUgaWNhY2hlIGlzIGRpcnR5LCBuZWVkIHRvIGJlIGludmFsaWRhdGVkICovDQorICAgICAgICB0YWJsZVtleGNub10gPSBlbnRyeTsNCisNCisgICAgICAgIGlmIChfYXJjX2F1eF9yZWFkKEFVWF9CQ1JfRF9DQUNIRSkgPiAweDIpDQorICAgICAgICB7DQorICAgICAgICAgICAgLyogZGNhY2hlIGlzIGF2YWlsYWJsZSAqLw0KKyAgICAgICAgICAgIGRjYWNoZV9mbHVzaF9saW5lKCh1aW50MzJfdCkmdGFibGVbZXhjbm9dKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChfYXJjX2F1eF9yZWFkKEFVWF9CQ1JfRF9DQUNIRSkgPiAweDIpDQorICAgICAgICB7DQorICAgICAgICAgICAgLyogaWNhY2hlIGlzIGF2YWlsYWJsZSAqLw0KKyAgICAgICAgICAgIGljYWNoZV9pbnZhbGlkYXRlX2xpbmUoKHVpbnQzMl90KSZ0YWJsZVtleGNub10pOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgY3B1X3VubG9ja19yZXN0b3JlKHN0YXR1cyk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8qKg0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVQ0KKyAqIFxicmllZiAgZ2V0IHRoZSBpbnN0YWxsZWQgQ1BVIGV4Y2VwdGlvbiBlbnRyeQ0KKyAqIFxwYXJhbVtpbl0gZXhjbm8gZXhjZXB0aW9uIG51bWJlcg0KKyAqIFxyZXR1cm4gdGhlIGluc3RhbGxlZCBDUFUgZXhjZXB0aW9uIGVudHJ5DQorICovDQorRVhDX0VOVFJZIGV4Y19lbnRyeV9nZXQoY29uc3QgdWludDMyX3QgZXhjbm8pDQorew0KKyAgICBpZiAoZXhjbm8gPCBOVU1fRVhDX0FMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGV4Y19lbnRyeV90YWJsZVtleGNub107DQorICAgIH0NCisNCisgICAgcmV0dXJuIE5VTEw7DQorfQ0KKw0KKy8qKg0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVQ0KKyAqIFxicmllZiAgaW5zdGFsbCBhbiBleGNlcHRpb24gaGFuZGxlcg0KKyAqIFxwYXJhbVtpbl0gZXhjbm8gZXhjZXB0aW9uIG51bWJlcg0KKyAqIFxwYXJhbVtpbl0gaGFuZGxlciB0aGUgaGFuZGxlciBvZiBleGNlcHRpb24gdG8gaW5zdGFsbA0KKyAqLw0KK2ludDMyX3QgZXhjX2hhbmRsZXJfaW5zdGFsbChjb25zdCB1aW50MzJfdCBleGNubywgRVhDX0hBTkRMRVIgaGFuZGxlcikNCit7DQorICAgIGlmIChleGNubyA8IE5VTV9FWENfQUxMICYmIGhhbmRsZXIgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgZXhjX2ludF9oYW5kbGVyX3RhYmxlW2V4Y25vXSA9IGhhbmRsZXI7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8qKg0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVQ0KKyAqIFxicmllZiAgZ2V0IHRoZSBpbnN0YWxsZWQgZXhjZXB0aW9uIGhhbmRsZXINCisgKiBccGFyYW1baW5dIGV4Y25vIGV4Y2VwdGlvbiBudW1iZXINCisgKiBccmV0dXJuIHRoZSBpbnN0YWxsZWQgZXhjZXB0aW9uIGhhbmRsZXIgb3IgTlVMTA0KKyAqLw0KK0VYQ19IQU5ETEVSIGV4Y19oYW5kbGVyX2dldChjb25zdCB1aW50MzJfdCBleGNubykNCit7DQorICAgIGlmIChleGNubyA8IE5VTV9FWENfQUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXhjX2ludF9oYW5kbGVyX3RhYmxlW2V4Y25vXTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gTlVMTDsNCit9DQorDQorDQorI2lmbmRlZiBFTUJBUkNfT1ZFUlJJREVfQVJDX0lOVEVSUlVQVF9NQU5BR0VNRU5UDQorLyoqDQorICogXGJyaWVmIGRpc2FibGUgdGhlIHNwZWNpZmljIGludGVycnVwdA0KKyAqDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICovDQoraW50MzJfdCBpbnRfZGlzYWJsZShjb25zdCB1aW50MzJfdCBpbnRubykNCit7DQorICAgIGlmIChpbnRubyA+PSBOVU1fRVhDX0NQVSAmJiBpbnRubyA8IE5VTV9FWENfQUxMKQ0KKyAgICB7DQorICAgICAgICBhcmNfaW50X2Rpc2FibGUoaW50bm8pOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGVuYWJsZSB0aGUgc3BlY2lmaWMgaW50DQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKi8NCitpbnQzMl90IGludF9lbmFibGUoY29uc3QgdWludDMyX3QgaW50bm8pDQorew0KKyAgICBpZiAoaW50bm8gPj0gTlVNX0VYQ19DUFUgJiYgaW50bm8gPCBOVU1fRVhDX0FMTCkNCisgICAgew0KKyAgICAgICAgYXJjX2ludF9lbmFibGUoaW50bm8pOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmljIGludCBpcyBlbmFibGVkDQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKiBccmV0dXJuIDAgZGlzYWJsZWQsIDEgZW5hYmxlZCwgPCAwIGVycm9yDQorICovDQoraW50MzJfdCBpbnRfZW5hYmxlZChjb25zdCB1aW50MzJfdCBpbnRubykNCit7DQorICAgIGlmIChpbnRubyA+PSBOVU1fRVhDX0NQVSAmJiBpbnRubyA8IE5VTV9FWENfQUxMKQ0KKyAgICB7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX1NFTEVDVCwgaW50bm8pOw0KKyAgICAgICAgcmV0dXJuIF9hcmNfYXV4X3JlYWQoQVVYX0lSUV9FTkFCTEUpOw0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBnZXQgdGhlIGludGVycnVwdCBwcmlvcml0eSBtYXNrDQorICoNCisgKiBccmV0dXJucyBpbnRlcnJ1cHQgcHJpb3JpdHkgbWFzaywgbmVnYXRpdmUgbnVtDQorICovDQoraW50MzJfdCBpbnRfaXBtX2dldCh2b2lkKQ0KK3sNCisgICAgcmV0dXJuICgoaW50MzJfdClhcmNfaW50X2lwbV9nZXQoKSArIElOVF9QUklfTUlOKTsNCit9DQorDQorDQorLyoqDQorICogXGJyaWVmICBzZXQgdGhlIGludGVycnVwdCBwcmlvcml0eSBtYXNrDQorICoNCisgKiBccGFyYW1baW5dIGludHByaSBpbnRlcnJ1cHQgcHJpb3JpdHkNCisgKi8NCitpbnQzMl90IGludF9pcG1fc2V0KGludDMyX3QgaW50cHJpKQ0KK3sNCisgICAgaWYgKGludHByaSA+PSBJTlRfUFJJX01JTiAmJiBpbnRwcmkgPD0gSU5UX1BSSV9NQVgpDQorICAgIHsNCisgICAgICAgIGludHByaSA9IGludHByaSAtIElOVF9QUklfTUlOOw0KKyAgICAgICAgYXJjX2ludF9pcG1fc2V0KGludHByaSk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gIC0xOw0KK30NCisNCisNCisvKioNCisgKiBcYnJpZWYgIGdldCBjdXJyZW50IGludGVycnVwdCBwcmlvcml0eSBtYXNrDQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKiBccmV0dXJuICA8MCBpbnRlcnJ1cHQgcHJpb3JpdHksIDAgZXJyb3INCisgKi8NCitpbnQzMl90IGludF9wcmlfZ2V0KGNvbnN0IHVpbnQzMl90IGludG5vKQ0KK3sNCisgICAgaWYgKGludG5vID49IE5VTV9FWENfQ1BVICYmIGludG5vIDwgTlVNX0VYQ19BTEwpDQorICAgIHsNCisgICAgICAgIHJldHVybiAoaW50MzJfdClhcmNfaW50X3ByaV9nZXQoaW50bm8pICsgSU5UX1BSSV9NSU47DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIFxicmllZiBzZXQgaW50ZXJydXB0IHByaW9yaXR5DQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKiBccGFyYW1baW5dIGludHByaSBpbnRlcnJ1cHQgcHJpb3JpdHkNCisgKiBccmV0dXJuICA8MCBlcnJvciwgMCBvaw0KKyAqLw0KK2ludDMyX3QgaW50X3ByaV9zZXQoY29uc3QgdWludDMyX3QgaW50bm8sIGludDMyX3QgaW50cHJpKQ0KK3sNCisgICAgdWludDMyX3Qgc3RhdHVzOw0KKw0KKyAgICBpZiAoaW50bm8gPj0gTlVNX0VYQ19DUFUgJiYgaW50bm8gPCBOVU1fRVhDX0FMTCkNCisgICAgew0KKyAgICAgICAgc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKyAgICAgICAgaW50cHJpID0gaW50cHJpIC0gSU5UX1BSSV9NSU47DQorICAgICAgICBhcmNfaW50X3ByaV9zZXQoaW50bm8sICh1aW50MzJfdClpbnRwcmkpOw0KKyAgICAgICAgY3B1X3VubG9ja19yZXN0b3JlKHN0YXR1cyk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiBzZXQgaW50ZXJydXB0IHNlY3VyZSBvciBub3Qgc2VjdXJlDQorICogVGhpcyBmdW5jdGlvbiBpcyB2YWxpZCBpbiBzZWN1cmVzaGllbGQgdjINCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKiBccGFyYW1baW5dIHNlY3VyZSwgMCBmb3Igbm9ybWFsLCA+MCBmb3Igc2VjdXJlDQorICogXHJldHVybiA8MCBlcnJvciwgMCBvaw0KKyAqLw0KK2ludDMyX3QgaW50X3NlY3VyZV9zZXQoY29uc3QgdWludDMyX3QgaW50bm8sIHVpbnQzMl90IHNlY3VyZSkNCit7DQorICAgIGlmIChpbnRubyA+PSBOVU1fRVhDX0NQVSAmJiBpbnRubyA8IE5VTV9FWENfQUxMKQ0KKyAgICB7DQorICAgICAgICBhcmNfaW50X3NlY3VyZV9zZXQoaW50bm8sIHNlY3VyZSk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gLTE7DQorDQorfQ0KKw0KKw0KKy8qKg0KKyAqIFxicmllZiAgcHJvYmUgdGhlIHBlbmRpbmcgc3RhdHVzIG9mIGludGVycnVwdA0KKyAqDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICoNCisgKiBccmV0dXJucyAxIHBlbmRpbmcsIDAgbm8gcGVuZGluZywgLTEgZXJyb3INCisgKi8NCitpbnQzMl90IGludF9wcm9iZShjb25zdCB1aW50MzJfdCBpbnRubykNCit7DQorICAgIGlmIChpbnRubyA+PSBOVU1fRVhDX0NQVSAmJiBpbnRubyA8IE5VTV9FWENfQUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gYXJjX2ludF9wcm9iZShpbnRubyk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisNCisvKioNCisgKiBcYnJpZWYgIHRyaWdnZXIgdGhlIGludGVycnVwdCBpbiBzb2Z0d2FyZQ0KKyAqDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICogXHJldHVybiAwIG9rLCAtMSBlcnJvcg0KKyAqLw0KK2ludDMyX3QgaW50X3N3X3RyaWdnZXIoY29uc3QgdWludDMyX3QgaW50bm8pDQorew0KKyAgICBpZiAoaW50bm8gPj0gTlVNX0VYQ19DUFUgJiYgaW50bm8gPCBOVU1fRVhDX0FMTCkNCisgICAgew0KKyAgICAgICAgYXJjX2ludF9zd190cmlnZ2VyKGludG5vKTsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBjb25maWcgdGhlIGludGVycnVwdCBsZXZlbCB0cmlnZ2VyZWQgb3IgcHVsc2UgdHJpZ2dlcmVkDQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKiBccGFyYW1baW5dIGxldmVsLCAwLWxldmVsIHRyaWdnZXIsIDEtcHVsc2UgdHJpZ2dlcmVkDQorICogXHJldHVybiAwIG9rLCAtMSBlcnJvcg0KKyAqLw0KK2ludDMyX3QgaW50X2xldmVsX2NvbmZpZyhjb25zdCB1aW50MzJfdCBpbnRubywgY29uc3QgdWludDMyX3QgbGV2ZWwpDQorew0KKyAgICBpZiAoaW50bm8gPj0gTlVNX0VYQ19DUFUgJiYgaW50bm8gPCBOVU1fRVhDX0FMTCkNCisgICAgew0KKyAgICAgICAgYXJjX2ludF9sZXZlbF9jb25maWcoaW50bm8sIGxldmVsKTsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsNCit9DQorDQorDQorLyoqDQorICogXGJyaWVmICBsb2NrIGNwdSwgZGlzYWJsZSBpbnRlcnJ1cHRzDQorICovDQordm9pZCBjcHVfbG9jayh2b2lkKQ0KK3sNCisgICAgYXJjX2xvY2soKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICB1bmxvY2sgY3B1LCBlbmFibGUgaW50ZXJydXB0cyB0byBoYXBwZW4NCisgKi8NCit2b2lkIGNwdV91bmxvY2sodm9pZCkNCit7DQorICAgIGFyY191bmxvY2soKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBsb2NrIGNwdSBhbmQgcmV0dXJuIHN0YXR1cw0KKyAqDQorICogXHJldHVybnMgY3B1IHN0YXR1cw0KKyAqLw0KK3VpbnQzMl90IGNwdV9sb2NrX3NhdmUodm9pZCkNCit7DQorICAgIHJldHVybiBhcmNfbG9ja19zYXZlKCk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgdW5sb2NrIGNwdSB3aXRoIHRoZSBzcGVjaWZpYyBzdGF0dXMNCisgKg0KKyAqIFxwYXJhbVtpbl0gc3RhdHVzICBjcHUgc3RhdHVzIHNhdmVkIGJ5IGNwdV9sb2NrX3NhdmUNCisgKi8NCit2b2lkIGNwdV91bmxvY2tfcmVzdG9yZShjb25zdCB1aW50MzJfdCBzdGF0dXMpDQorew0KKyAgICBhcmNfdW5sb2NrX3Jlc3RvcmUoc3RhdHVzKTsNCit9DQorDQorLyoqDQorICogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fSU5URVJSVVBUDQorICogXGJyaWVmICBpbnN0YWxsIGFuIGludGVycnVwdCBoYW5kbGVyDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICogXHBhcmFtW2luXSBoYW5kbGVyIGludGVycnVwdCBoYW5kbGVyIHRvIGluc3RhbGwNCisgKi8NCitpbnQzMl90IGludF9oYW5kbGVyX2luc3RhbGwoY29uc3QgdWludDMyX3QgaW50bm8sIElOVF9IQU5ETEVSIGhhbmRsZXIpDQorew0KKyAgICAvKiE8IFx0b2RvIHBhcmFtZXRlciBjaGVjayA/ICovDQorICAgIGlmIChpbnRubyA+PSBOVU1fRVhDX0NQVSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGV4Y19oYW5kbGVyX2luc3RhbGwoaW50bm8sIGhhbmRsZXIpOw0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqDQorICogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fSU5URVJSVVBUDQorICogXGJyaWVmICBnZXQgdGhlIGluc3RhbGxlZCBhbiBpbnRlcnJ1cHQgaGFuZGxlcg0KKyAqIFxwYXJhbVtpbl0gaW50bm8gaW50ZXJydXB0IG51bWJlcg0KKyAqIFxyZXR1cm4gdGhlIGluc3RhbGxlZCBpbnRlcnJ1cHQgaGFuZGxlciBvciBOVUxMDQorICovDQorSU5UX0hBTkRMRVIgaW50X2hhbmRsZXJfZ2V0KGNvbnN0IHVpbnQzMl90IGludG5vKQ0KK3sNCisgICAgaWYgKGludG5vID49IE5VTV9FWENfQ1BVKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXhjX2hhbmRsZXJfZ2V0KGludG5vKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gTlVMTDsNCit9DQorI2VuZGlmIC8qIEVNQkFSQ19PVkVSUklERV9BUkNfSU5URVJSVVBUX01BTkFHRU1FTlQgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL2FyY190aW1lci5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9hcmNfdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTgzN2UzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9hcmNfdGltZXIuYwpAQCAtMCwwICsxLDIzNSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0xNQ0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQVJDX0hBTF9NSVNDX1RJTUVSDQorICogXGJyaWVmICBpbXBsZW1lbnRhdGlvbiBvZiBpbnRlcm5hbCB0aW1lciByZWxhdGVkIGZ1bmN0aW9ucw0KKyAqIFx0b2RvIFJUQyBzdXBwb3J0IHNob3VsZCBiZSBpbXByb3ZlZCBpZiBSVEMgaXMgZW5hYmxlZA0KKyAqLw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY190aW1lci5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyYy5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19idWlsdGluLmgiDQorDQorLyoqDQorICogXGJyaWVmICBjaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpYyB0aW1lciBwcmVzZW50DQorICogXHBhcmFtW2luXSBubyB0aW1lciBudW1iZXINCisgKiBccmV0dmFsIDEgcHJlc2VudA0KKyAqIFxyZXR2YWwgMCBub3QgcHJlc2VudA0KKyAqLw0KK2ludDMyX3QgdGltZXJfcHJlc2VudChjb25zdCB1aW50MzJfdCBubykNCit7DQorICAgIHVpbnQzMl90IGJjciA9IF9hcmNfYXV4X3JlYWQoQVVYX0JDUl9USU1FUlMpOw0KKw0KKyAgICBzd2l0Y2ggKG5vKQ0KKyAgICB7DQorICAgIGNhc2UgVElNRVJfMDoNCisgICAgICAgIGJjciA9IChiY3IgPj4gOCkgJiAxOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVElNRVJfMToNCisgICAgICAgIGJjciA9IChiY3IgPj4gOSkgJiAxOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVElNRVJfUlRDOg0KKyAgICAgICAgYmNyID0gKGJjciA+PiAxMCkgJiAxOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICBiY3IgPSAwOw0KKyAgICAgICAgLyogaWxsZWdhbCBhcmd1bWVudCBzbyByZXR1cm4gZmFsc2UgKi8NCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIHJldHVybiAoaW50KWJjcjsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBzdGFydCB0aGUgc3BlY2lmaWMgdGltZXINCisgKiBccGFyYW1baW5dIG5vICAgIHRpbWVyIG51bWJlcg0KKyAqIFxwYXJhbVtpbl0gbW9kZSAgdGltZXIgbW9kZQ0KKyAqIFxwYXJhbVtpbl0gdmFsICAgdGltZXIgbGltaXQgdmFsdWUgKG5vdCBmb3IgUlRDKQ0KKyAqIFxyZXR1cm4gMCBzdWNjZXNzLCAtMSBmYWlsdXJlDQorICovDQoraW50MzJfdCB0aW1lcl9zdGFydChjb25zdCB1aW50MzJfdCBubywgY29uc3QgdWludDMyX3QgbW9kZSwgY29uc3QgdWludDMyX3QgdmFsKQ0KK3sNCisgICAgaWYgKHRpbWVyX3ByZXNlbnQobm8pID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBzd2l0Y2ggKG5vKQ0KKyAgICB7DQorICAgIGNhc2UgVElNRVJfMDoNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9USU1FUjBfQ1RSTCwgMCk7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfVElNRVIwX0xJTUlULCB2YWwpOw0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1RJTUVSMF9DVFJMLCBtb2RlKTsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9USU1FUjBfQ05ULCAwKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFRJTUVSXzE6DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfVElNRVIxX0NUUkwsIDApOw0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1RJTUVSMV9MSU1JVCwgdmFsKTsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9USU1FUjFfQ1RSTCwgbW9kZSk7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfVElNRVIxX0NOVCwgMCk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBUSU1FUl9SVEM6DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfUlRDX0NUUkwsIG1vZGUpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgc3RvcCBhbmQgY2xlYXIgdGhlIHNwZWNpZmljIHRpbWVyDQorICoNCisgKiBccGFyYW1baW5dIG5vIHRpbWVyIG51bWJlcg0KKyAqIFxyZXR1cm4gMCBzdWNjZXNzLCAtMSBmYWlsdXJlDQorICovDQoraW50MzJfdCB0aW1lcl9zdG9wKGNvbnN0IHVpbnQzMl90IG5vKQ0KK3sNCisgICAgaWYgKHRpbWVyX3ByZXNlbnQobm8pID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBzd2l0Y2ggKG5vKQ0KKyAgICB7DQorICAgIGNhc2UgVElNRVJfMCA6DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfVElNRVIwX0NUUkwsIDApOw0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1RJTUVSMF9MSU1JVCwgMCk7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfVElNRVIwX0NOVCwgMCk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBUSU1FUl8xOg0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1RJTUVSMV9DVFJMLCAwKTsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9USU1FUjFfTElNSVQsIDApOw0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1RJTUVSMV9DTlQsIDApOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVElNRVJfUlRDOg0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1JUQ19DVFJMLCBUSU1FUl9SVENfQ0xFQVIpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgZ2V0IHRpbWVyIGN1cnJlbnQgdGljaw0KKyAqDQorICogXHBhcmFtW2luXSBubyB0aW1lciBudW1iZXINCisgKiBccGFyYW1bb3V0XSB2YWwsIHRpbWVyIHZhbHVlDQorICogXHJldHVybiAwIHN1Y2Nlc3MsIC0xIGZhaWx1cmUNCisgKi8NCitpbnQzMl90IHRpbWVyX2N1cnJlbnQoY29uc3QgdWludDMyX3Qgbm8sIHZvaWQgKnZhbCkNCit7DQorICAgIGlmICh0aW1lcl9wcmVzZW50KG5vKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgc3dpdGNoIChubykNCisgICAgew0KKyAgICBjYXNlIFRJTUVSXzAgOg0KKyAgICAgICAgKigodWludDMyX3QgKil2YWwpID0gX2FyY19hdXhfcmVhZChBVVhfVElNRVIwX0NOVCk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBUSU1FUl8xIDoNCisgICAgICAgICooKHVpbnQzMl90ICopdmFsKSA9IF9hcmNfYXV4X3JlYWQoQVVYX1RJTUVSMV9DTlQpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVElNRVJfUlRDOg0KKyAgICAgICAgKigodWludDY0X3QgKil2YWwpID0gX2FyY19hdXhfcmVhZChBVVhfUlRDX0xPVyk7DQorICAgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdCA6DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgY2xlYXIgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdCBvZiB0aW1lcg0KKyAqDQorICogXHBhcmFtW2luXSBubyB0aW1lciBudW1iZXINCisgKiBccmV0dXJuIDAgc3VjY2VzcywgLTEgZmFpbHVyZQ0KKyAqLw0KK2ludDMyX3QgdGltZXJfaW50X2NsZWFyKGNvbnN0IHVpbnQzMl90IG5vKQ0KK3sNCisgICAgdWludDMyX3QgdmFsOw0KKw0KKyAgICBpZiAodGltZXJfcHJlc2VudChubykgPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHN3aXRjaCAobm8pDQorICAgIHsNCisgICAgY2FzZSBUSU1FUl8wIDoNCisgICAgICAgIHZhbCA9IF9hcmNfYXV4X3JlYWQoQVVYX1RJTUVSMF9DVFJMKTsNCisgICAgICAgIHZhbCAmPSB+VElNRVJfQ1RSTF9JUDsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9USU1FUjBfQ1RSTCwgdmFsKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFRJTUVSXzEgOg0KKyAgICAgICAgdmFsID0gX2FyY19hdXhfcmVhZChBVVhfVElNRVIxX0NUUkwpOw0KKyAgICAgICAgdmFsICY9IH5USU1FUl9DVFJMX0lQOw0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1RJTUVSMV9DVFJMLCB2YWwpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGRlZmF1bHQgOg0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGluaXQgaW50ZXJuYWwgdGltZXINCisgKi8NCit2b2lkIHRpbWVyX2luaXQodm9pZCkNCit7DQorICAgIHRpbWVyX3N0b3AoVElNRVJfMCk7DQorICAgIHRpbWVyX3N0b3AoVElNRVJfMSk7DQorICAgIHRpbWVyX3N0b3AoVElNRVJfUlRDKTsNCit9DQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9zdGFydHVwL2FyY19jeHhfc3VwcG9ydC5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9zdGFydHVwL2FyY19jeHhfc3VwcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZTIwOWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL3N0YXJ0dXAvYXJjX2N4eF9zdXBwb3J0LmMKQEAgLTAsMCArMSwxNzIgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuDQorICoNCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsNCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE1LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNi0wMy0wMg0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKHdlaS5yZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKyNpbmNsdWRlICJlbWJBUkNfQlNQX2NvbmZpZy5oIg0KKyNpZiBkZWZpbmVkKF9fR05VX18pDQorLyogZW1iQVJDJ3MgR05VIEMrKyBzdXBwb3J0IHRha2VzIHJlZmVyZW5jZSBmcm9tIFplcGh5ciAoY3BwX3h4eC5jKSAqLw0KKw0KKy8qKg0KKyAqIEBmaWxlIC0gQ29uc3RydWN0b3IgbW9kdWxlDQorICogQGJyaWVmDQorICogVGhlIGN0b3JzIHNlY3Rpb24gY29udGFpbnMgYSBsaXN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgZXhlY3V0ZSB0aGUNCisgKiBDKysgY29uc3RydWN0b3JzIG9mIHN0YXRpYyBnbG9iYWwgb2JqZWN0cy4gVGhlc2UgbXVzdCBiZSBleGVjdXRlZCBiZWZvcmUNCisgKiB0aGUgYXBwbGljYXRpb24ncyBtYWluKCkgcm91dGluZS4NCisgKg0KKyAqIE5PVEU6IE5vdCBhbGwgY29tcGlsZXJzIHB1dCB0aG9zZSBmdW5jdGlvbiBwb2ludGVycyBpbnRvIHRoZSBjdG9ycyBzZWN0aW9uOw0KKyAqIHNvbWUgcHV0IHRoZW0gaW50byB0aGUgaW5pdF9hcnJheSBzZWN0aW9uIGluc3RlYWQuDQorICovDQorDQorLyogV2hhdCBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHBvaW50ZXIgbG9va3MgbGlrZSAqLw0KKw0KK3R5cGVkZWYgdm9pZCAoKkN0b3JGdW5jUHRyKSh2b2lkKTsNCisNCisvKiBDb25zdHJ1Y3RvciBmdW5jdGlvbiBwb2ludGVyIGxpc3QgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBsaW5rZXIgc2NyaXB0LiAqLw0KKw0KK2V4dGVybiBDdG9yRnVuY1B0ciBfX0NUT1JfTElTVF9fW107DQorZXh0ZXJuIEN0b3JGdW5jUHRyIF9fQ1RPUl9FTkRfX1tdOw0KKw0KKy8qKg0KKyAqDQorICogQGJyaWVmIEludm9rZSBhbGwgQysrIHN0eWxlIGdsb2JhbCBvYmplY3QgY29uc3RydWN0b3JzDQorICoNCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCBiZWZvcmUgdGhlIGV4ZWN1dGlvbiBvZiB0aGUNCisgKiBhcHBsaWNhdGlvbidzIG1haW4oKS4NCisgKi8NCit2b2lkIF9fZG9fZ2xvYmFsX2N0b3JzX2F1eCh2b2lkKQ0KK3sNCisgICAgdW5zaWduZWQgaW50IG5DdG9yczsNCisNCisgICAgbkN0b3JzID0gKHVuc2lnbmVkIGludClfX0NUT1JfTElTVF9fWzBdOw0KKw0KKyAgICB3aGlsZSAobkN0b3JzID49IDEpDQorICAgIHsNCisgICAgICAgIF9fQ1RPUl9MSVNUX19bbkN0b3JzLS1dKCk7DQorICAgIH0NCit9DQorDQordHlwZWRlZiB2b2lkICgqRHRvckZ1bmNQdHIpKHZvaWQpOw0KKw0KK2V4dGVybiBEdG9yRnVuY1B0ciBfX0RUT1JfTElTVF9fW107DQorZXh0ZXJuIER0b3JGdW5jUHRyIF9fRFRPUl9FTkRfX1tdOw0KKw0KKy8qKg0KKyAqDQorICogQGJyaWVmIEludm9rZSBhbGwgQysrIHN0eWxlIGdsb2JhbCBvYmplY3QgZGVzdHJ1Y3RvcnMNCisgKg0KKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgdGhlDQorICogYXBwbGljYXRpb24ncyBtYWluKCkuDQorICovDQordm9pZCBfX2RvX2dsb2JhbF9kdG9yc19hdXgodm9pZCkNCit7DQorICAgIHVuc2lnbmVkIGludCBuRHRvcnM7DQorICAgIHVuc2lnbmVkIGludCBpOw0KKw0KKyAgICBuRHRvcnMgPSAodW5zaWduZWQgaW50KV9fRFRPUl9MSVNUX19bMF07DQorICAgIGkgPSAwOw0KKw0KKyAgICB3aGlsZSAoaSA8PSBuRHRvcnMpDQorICAgIHsNCisgICAgICAgIF9fRFRPUl9MSVNUX19baSsrXSgpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgKl9fZHNvX2hhbmRsZSA9IDA7DQorDQorLyoqDQorICogQGJyaWVmIFJlZ2lzdGVyIGRlc3RydWN0b3IgZm9yIGEgZ2xvYmFsIG9iamVjdA0KKyAqDQorICogQHBhcmFtIGRlc3RydWN0b3IgdGhlIGdsb2JhbCBvYmplY3QgZGVzdHJ1Y3RvciBmdW5jdGlvbg0KKyAqIEBwYXJhbSBvYmpwdHIgZ2xvYmFsIG9iamVjdCBwb2ludGVyDQorICogQHBhcmFtIGRzbyBEeW5hbWljIFNoYXJlZCBPYmplY3QgaGFuZGxlIGZvciBzaGFyZWQgbGlicmFyaWVzDQorICoNCisgKiBGdW5jdGlvbiBkb2VzIG5vdGhpbmcgYXQgdGhlIG1vbWVudCwgYXNzdW1pbmcgdGhlIGdsb2JhbCBvYmplY3RzDQorICogZG8gbm90IG5lZWQgdG8gYmUgZGVsZXRlZA0KKyAqDQorICogQHJldHVybiBOL0ENCisgKi8NCitpbnQgX19jeGFfYXRleGl0KHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lkICopLCB2b2lkICpvYmpwdHIsIHZvaWQgKmRzbykNCit7DQorICAgIHJldHVybiAwOw0KK30NCisNCit0eXBlZGVmIHZvaWQgKCpmdW5jX3B0cikodm9pZCk7DQorDQorZXh0ZXJuIGZ1bmNfcHRyIF9faW5pdF9hcnJheV9zdGFydFswXTsNCitleHRlcm4gZnVuY19wdHIgX19pbml0X2FycmF5X2VuZFswXTsNCisNCisvKioNCisgKiBAYnJpZWYgRXhlY3V0ZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyByZWZlcmVuY2VkIGluIC5pbml0X2FycmF5IHNlY3Rpb24NCisgKg0KKyAqIEByZXR1cm4gTi9BDQorICovDQordm9pZCBfX2RvX2luaXRfYXJyYXlfYXV4KHZvaWQpDQorew0KKyAgICBmb3IgKGZ1bmNfcHRyICpmdW5jID0gX19pbml0X2FycmF5X3N0YXJ0Ow0KKyAgICAgICAgIGZ1bmMgPCBfX2luaXRfYXJyYXlfZW5kOw0KKyAgICAgICAgIGZ1bmMrKykNCisgICAgew0KKyAgICAgICAgKCpmdW5jKSgpOw0KKyAgICB9DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBTdHViIGZvciBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zDQorICoNCisgKiBUaGlzIHJvdXRpbmUgaXMgbmVlZGVkIGZvciBsaW5raW5nIEMrKyBjb2RlIHRoYXQgdXNlcyBwdXJlIHZpcnR1YWwNCisgKiBmdW5jdGlvbnMuDQorICoNCisgKiBAcmV0dXJuIE4vQQ0KKyAqLw0KK3ZvaWQgX19jeGFfcHVyZV92aXJ0dWFsKHZvaWQpDQorew0KKyAgICB3aGlsZSAoMSkNCisgICAgew0KKyAgICAgICAgOw0KKyAgICB9DQorfQ0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvc3RhcnR1cC9hcmNfc3RhcnR1cC5TIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9zdGFydHVwL2FyY19zdGFydHVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxZTZhNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvc3RhcnR1cC9hcmNfc3RhcnR1cC5TCkBAIC0wLDAgKzEsMjY2IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTE1DQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBBUkNfSEFMX1NUQVJUVVANCisgKiBcYnJpZWYgYXNzZW1ibHkgcGFydCBvZiBzdGFydHVwIHByb2Nlc3MNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCBBUkNfSEFMX1NUQVJUVVANCisgKiBAew0KKyAqLw0KKy8qKiBAY29uZCBTVEFSVFVQX0FTTSAqLw0KKw0KKyNkZWZpbmUgX19BU1NFTUJMWV9fDQorI2luY2x1ZGUgImVtYkFSQ19CU1BfY29uZmlnLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjLmgiDQorDQorLmZpbGUgImFyY19zdGFydHVwLlMiDQorDQorLndlYWsgICBfZl9zZGF0YSAgICAgICAgLyogc3RhcnQgb2Ygc21hbGwgZGF0YSwgZGVmaW5lZCBpbiBsaW5rIHNjcmlwdCAqLw0KKy53ZWFrICAgaW5pdF9oYXJkd2FyZV9ob29rICAvKiBhcHAgaGFyZHdhcmUgaW5pdCBob29rICovDQorLndlYWsgICBpbml0X3NvZnR3YXJlX2hvb2sgIC8qIGFwcCBzb2Z0d2FyZSBpbml0IGhvb2sgKi8NCisNCisuZXh0ZXJuIGJvYXJkX21haW4NCisuZXh0ZXJuIGV4Y19lbnRyeV90YWJsZQ0KKw0KKy8qIGluaXRpYWwgdmVjdG9yIHRhYmxlICovDQorLnNlY3Rpb24gLmluaXRfdmVjdG9yLCAiYSINCisubG9uZyBfYXJjX3Jlc2V0DQorLnNlY3Rpb24gLmluaXRfYm9vdHN0cmFwLCAiYXgiDQorLmdsb2JhbCBfYXJjX3Jlc2V0DQorLmdsb2JhbCBfc3RhcnQNCisuYWxpZ24gNA0KK19zdGFydDoNCitfYXJjX3Jlc2V0Og0KK19hcmNfcmVzZXRfc3RhZ2UxOg0KK2tmbGFnICAgU1RBVFVTMzJfUkVTRVRfVkFMVUUNCisNCisvKiBTVEFHRSAxICovDQorDQorLyogbmVjZXNzYXJ5IGhhcmR3YXJlIHNob3VsZCBiZSBkb25lIGZpcnN0IHRvIHNwZWVkIHVwIGluaXRpYWxpemF0aW9uDQorICAgIDEuIHN5c3RlbSBjbGsNCisgICAgMi4gbWVtIGNvbnRyb2xsZXIgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYW55IGFjY2VzcyB0byBleHRlcm5hbA0KKyAgICBtZW0uDQorICAgIDMuIG90aGVycw0KKyovDQorX2FyY19jYWNoZV9pbml0X3N0YXJ0Og0KK2xyICByMCwgW0FVWF9CQ1JfRF9DQUNIRV0NCitjbXAgcjAsIDINCisvKiBpbnZhbGlkYXRlIGRjYWNoZSAqLw0KK2psZSBfYXJjX2ljYWNoZV9pbml0DQorbW92IHIwLCAxDQorc3IgIHIwLCBbQVVYX0RDX0lWRENdDQorc3IgIHIwLCBbQVVYX0RDX0NUUkxdDQorX2FyY19pY2FjaGVfaW5pdDoNCitsciAgcjAsIFtBVVhfQkNSX0lfQ0FDSEVdDQorY21wIHIwLCAyDQoramxlIF9hcmNfY2FjaGVfaW5pdF9lbmQNCisvKiBpbnZhbGlkYXRlIGljYWNoZSAqLw0KK21vdiByMCwgMQ0KK3NyICByMCwgW0FVWF9JQ19JVklDXQ0KK25vcF9zDQorbm9wX3MNCitub3Bfcw0KK3NyICByMCwgW0FVWF9JQ19DVFJMXQ0KKw0KK19hcmNfY2FjaGVfaW5pdF9lbmQ6DQorbW92IHIwLCBpbml0X2hhcmR3YXJlX2hvb2sNCitjbXAgcjAsIDANCitqbG5lICAgIFtyMF0NCisNCisvKiBTVEFHRSAyOiBpbml0IG5lY2Vzc2FyeSByZWdpc3RlcnMgKi8NCisNCitfYXJjX3Jlc2V0X3N0YWdlMjoNCittb3YgcjAsIDANCisNCisvKiBpbnRlcnJ1cHQgcmVsYXRlZCBpbml0ICovDQorc3IgIHIwLCBbQVVYX0lSUV9BQ1RdDQorc3IgIHIwLCBbQVVYX0lSUV9DVFJMXQ0KK3NyICByMCwgW0FVWF9JUlFfSElOVF0NCisNCisvKiB1c2UgdGhlIG5ldyB2ZWN0b3IgdGFibGUgdG8gcmVwbGFjZSB0aGUgb2xkIG9uZSAqLw0KKyNpZiBkZWZpbmVkKEFSQ19GRUFUVVJFX1NFQ19QUkVTRU5UKSAmJiAoU0VDVVJFU0hJRUxEX1ZFUlNJT04gPCAyKQ0KK3NyICBleGNfZW50cnlfdGFibGUsIFtBVVhfSU5UX1ZFQ1RfQkFTRV9TXQ0KKyNlbHNlDQorc3IgIGV4Y19lbnRyeV90YWJsZSwgW0FVWF9JTlRfVkVDVF9CQVNFXQ0KKyNlbmRpZg0KKw0KKy8qIGluaXQgc3RhY2sgKi8NCisjaWYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTID49IDE2ICYmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyA+IDEgJiYgQVJDX0ZFQVRVUkVfRklSUSA9PSAxDQorI2lmIF9TVEFDS1NJWkUgPCA1MTINCisjZXJyb3IgIm5vdCBlbm91Z2ggc3RhY2sgc2l6ZSBmb3IgaXJxIGFuZCBmaXJxIg0KKyNlbmRpZg0KKw0KKy8qIHN3aXRjaCB0byByZWdpc3RlciBiYW5rMSAqLw0KK2xyICAgICAgcjAsIFtBVVhfU1RBVFVTMzJdDQorYmljICAgICByMCwgcjAsIDB4NzAwMDANCitvciAgICAgIHIwLCByMCwgMHgxMDAwMA0KK2tmbGFnICAgcjANCisvKiBzZXQgc3AsIGdwLCBmcCBpbiBiYW5rMSAqLw0KK21vdiAgICAgc3AsIF9lX3N0YWNrDQorbW92ICAgICBncCwgX2Zfc2RhdGENCittb3YgICAgIGZwLCAwDQorLyogY29tZSBiYWNrIHRvIGJhbmswICovDQorbHIgICAgICByMCwgW0FVWF9TVEFUVVMzMl0NCitiaWMgICAgIHIwLCByMCwgMHg3MDAwMA0KK2tmbGFnICAgcjANCittb3Ygc3AsIF9lX3N0YWNrIC0gMjU2DQorI2Vsc2UNCittb3Ygc3AsIF9lX3N0YWNrICAgIC8qIGluaXQgc3RhY2sgcG9pbnRlciAqLw0KKyNlbmRpZg0KK21vdiBncCwgX2Zfc2RhdGEgICAgLyogaW5pdCBzbWFsbC1kYXRhIGJhc2UgcmVnaXN0ZXIgKi8NCittb3YgZnAsIDAgICAgICAgLyogaW5pdCBmcCByZWdpc3RlciAqLw0KKw0KK19hcmNfcmVzZXRfc3RhZ2UzOg0KK19zM19jb3B5X3RleHQ6DQorbW92IHIwLCBfZl90ZXh0DQorbW92IHIxLCBfbG9hZF9hZGRyX3RleHQNCitjbXAgcjAsIHIxDQorDQorLyogaWYgbG9hZCBhZGRyID09IHJ1biBhZGRyLCBubyBuZWVkIHRvIGNvcHkgKi8NCitqZXEgX3MzX2NvcHlfcm9kYXRhDQorbW92IHIzLCBfZV90ZXh0DQorX3MzX2NvcHlfdGV4dF9sb29wOg0KK2xkLmFiICAgcjIsIFtyMSwgNF0NCitzdC5hYiAgIHIyLCBbcjAsIDRdDQorY21wIHIwLCByMw0KK2psdCBfczNfY29weV90ZXh0X2xvb3ANCitfczNfY29weV9yb2RhdGE6DQorbW92IHIwLCBfZl9yb2RhdGENCittb3YgcjEsIF9sb2FkX2FkZHJfcm9kYXRhDQorY21wIHIwLCByMQ0KKw0KKy8qIGlmIGxvYWQgYWRkciA9PSBydW4gYWRkciwgbm8gbmVlZCB0byBjb3B5ICovDQoramVxIF9zM19jb3B5X2RhdGENCittb3YgcjMsIF9lX3JvZGF0YQ0KK19zM19jb3B5X3JvZGF0YV9sb29wOg0KK2xkLmFiICAgcjIsIFtyMSwgNF0NCitzdC5hYiAgIHIyLCBbcjAsIDRdDQorY21wIHIwLCByMw0KK2psdCBfczNfY29weV9yb2RhdGFfbG9vcA0KK19zM19jb3B5X2RhdGE6DQorbW92IHIwLCBfZl9kYXRhDQorbW92IHIxLCBfbG9hZF9hZGRyX2RhdGENCitjbXAgcjAsIHIxDQoramVxIF9zM19jbGVhcl9ic3MNCisNCisvKiBpZiBsb2FkIGFkZHIgPT0gcnVuIGFkZHIsIG5vIG5lZWQgdG8gY29weSAqLw0KK21vdiByMywgX2VfZGF0YQ0KK19zM19jb3B5X2RhdGFfbG9vcDoNCitsZC5hYiAgIHIyLCBbcjEsIDRdDQorc3QuYWIgICByMiwgW3IwLCA0XQ0KK2NtcCByMCwgcjMNCitqbHQgX3MzX2NvcHlfZGF0YV9sb29wDQorX3MzX2NsZWFyX2JzczoNCittb3YgcjAsIF9mX2Jzcw0KK21vdiByMSwgX2VfYnNzDQorY21wIHIwLCByMQ0KK2pnZSBfYXJjX3Jlc2V0X2NhbGxfbWFpbg0KK21vdiByMiwgMA0KK19zM19jbGVhcl9ic3NfbG9vcDoNCitzdC5hYiAgIHIyLCBbcjAsIDRdDQorY21wIHIwLCByMQ0KK2psdCBfczNfY2xlYXJfYnNzX2xvb3ANCisNCisvKiBTVEFHRSAzOiBnbyB0byBtYWluICovDQorDQorX2FyY19yZXNldF9jYWxsX21haW46DQorDQorLyogXHRvZG8gYWRkIGNwcCBpbml0IGhlcmUgKi8NCittb3YgcjAsIGluaXRfc29mdHdhcmVfaG9vaw0KK2NtcCByMCwgMA0KK2psbmUgICAgW3IwXQ0KKy8qIGJvYXJkIGxldmVsIGxpYnJhcnkgaW5pdCAqLw0KKyNpZmRlZiAgTElCX1NFQ1VSRVNISUVMRA0KK2psICBzZWN1cmVzaGllbGRfc3RhcnQNCisjZWxzZQ0KKy8qIGVhcmx5IGluaXQgb2YgaW50ZXJydXB0IGFuZCBleGNlcHRpb24gKi8NCitqbCAgZXhjX2ludF9pbml0DQorI2VuZGlmDQorLyogaW5pdCBjYWNoZSAqLw0KK2psICBhcmNfY2FjaGVfaW5pdA0KKyNpZiBkZWZpbmVkKF9fTVdfXykNCitqbCAgX2luaXQNCisjZWxpZiBkZWZpbmVkKF9fR05VX18pDQoramwgIF9fZG9fZ2xvYmFsX2N0b3JzX2F1eA0KK2psICBfX2RvX2luaXRfYXJyYXlfYXV4DQorI2VuZGlmDQoramwgIGJvYXJkX21haW4gIC8qIGJvYXJkLWxldmVsIG1haW4gKi8NCisjaWYgZGVmaW5lZChfX01XX18pDQoramwgIF9maW5pDQorI2VsaWYgZGVmaW5lZChfX0dOVV9fKQ0KK2psICBfX2RvX2dsb2JhbF9kdG9yc19hdXgNCisjZW5kaWYNCisuZ2xvYmFsIF9leGl0X2xvb3ANCisuZ2xvYmFsIF9leGl0X2hhbHQNCisuYWxpZ24gNA0KK19leGl0X2hhbHQ6DQorX2V4aXRfbG9vcDoNCitmbGFnICAgIDB4MQ0KK25vcA0KK25vcA0KK25vcA0KK2IgICBfZXhpdF9sb29wDQorDQorI2lmIGRlZmluZWQoX19NV19fKQ0KKy5nbG9iYWwgX2luaXQsIF9maW5pDQorLnNlY3Rpb24gIi5pbml0IiwgdGV4dA0KK19pbml0Og0KKy5jZmFfYmYgX2luaXQNCitwdXNoICAgICUgYmxpbmsNCisuY2ZhX3B1c2ggICB7ICUgYmxpbmt9DQorDQorLnNlY3Rpb24gIi5pbml0JDk5OTk5OSIsIHRleHQsIDEsIDIsIGNoZWNrX3RleHRfYWxpZ24gPSAwDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3AgJSBibGluaw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNmYV9wb3AgICAgeyAlIGJsaW5rfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiAgIFsgJSBibGlua10NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jZmFfZWYNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZWN0aW9uICIuZmluaSIsIHRleHQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9maW5pOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNmYV9iZiBfZmluaQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCAgICAlIGJsaW5rDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2ZhX3B1c2ggICB7ICUgYmxpbmt9DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2VjdGlvbiAiLmZpbmkkOTk5OTk5IiwgdGV4dCwgMSwgMiwgY2hlY2tfdGV4dF9hbGlnbiA9IDANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wICUgYmxpbmsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNmYV9wb3AgICAgeyAlIGJsaW5rfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICAgWyAlIGJsaW5rXQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2ZhX2VmDQorI2VuZGlmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBAZW5kY29uZCAqLw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogfUAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmNfY29yZV9jb25maWcuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmNfY29yZV9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODkzNmVkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyY19jb3JlX2NvbmZpZy5oCkBAIC0wLDAgKzEsMjU1IEBACisvKiBFTVNLMi4zIEFSQyBFTTExRCAqLw0KKw0KKyNpZm5kZWYgX19jb3JlX2NvbmZpZ19oDQorI2RlZmluZSBfX2NvcmVfY29uZmlnX2ggIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Npcl9pZGVudGl0eSAgICAweDAwMDAwMDQzDQorI2RlZmluZSBjb3JlX2NvbmZpZ19jaXJfaWRlbnRpdHlfY2hpcGlkIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Npcl9pZGVudGl0eV9hcmNudW0gMA0KKyNkZWZpbmUgY29yZV9jb25maWdfY2lyX2lkZW50aXR5X2FyY3ZlciA2Nw0KKyNkZWZpbmUgY29yZV9jb25maWdfY2lyX2lkZW50aXR5X2ZhbWlseSA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19jaXJfaWRlbnRpdHlfY29yZXZlciAgICAzDQorI2RlZmluZSBjb3JlX2NvbmZpZ19jaXJfYXV4X2RjY20gICAgMHg4MDAwMDAwMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2Jjcl92ZXIgMHgwMDAwMDAwMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2Jjcl92ZXJfdmVyc2lvbiAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfdmVjYmFzZV9hY19idWlsZCAgICAweDAwMDAwMDEwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfcmZfYnVpbGQgICAgMHgwMDAwYzkwMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3JmX2J1aWxkX3ZlcnNpb24gICAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3JmX2J1aWxkX3AgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9yZl9idWlsZF9lICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfcmZfYnVpbGRfciAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3JmX2J1aWxkX2IgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9yZl9idWlsZF9kICAzDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZCAgIDB4MDAyMTUxMDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kX2NhY2hlX2J1aWxkX3ZlcnNpb24gICA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZF9hc3NvYyAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZF9jYXBhY2l0eSAgNQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RfY2FjaGVfYnVpbGRfYnNpemUgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RfY2FjaGVfYnVpbGRfZmwgICAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RfY2FjaGVfYnVpbGRfaW9jICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RfY2FjaGVfYnVpbGRfY3AgICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RfY2FjaGVfYnVpbGRfdSAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZF9jeWNsZXMgICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RjY21fYnVpbGQgIDB4MDAwMTA4MDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kY2NtX2J1aWxkX3cgICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RjY21fYnVpbGRfY3ljbGVzICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RjY21fYnVpbGRfaW50ZXJsZWF2ZSAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kY2NtX2J1aWxkX3NpemUxICAgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kY2NtX2J1aWxkX3NpemUwICAgIDgNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kY2NtX2J1aWxkX3ZlcnNpb24gIDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl90aW1lcl9idWlsZCAweDAwMDEwMzA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfdGltZXJfYnVpbGRfc3AxIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl90aW1lcl9idWlsZF9zcDAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3RpbWVyX2J1aWxkX3AxICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfdGltZXJfYnVpbGRfcDAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl90aW1lcl9idWlsZF9zdDEgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3RpbWVyX2J1aWxkX3N0MCAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfdGltZXJfYnVpbGRfcnRjIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl90aW1lcl9idWlsZF9ydHNjX3ZlciAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfdGltZXJfYnVpbGRfcnRzYyAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfdGltZXJfYnVpbGRfdDAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl90aW1lcl9idWlsZF90MSAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3RpbWVyX2J1aWxkX3ZlcnNpb24gNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2FwX2J1aWxkICAgIDB4MDAwMDA0MDUNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9hcF9idWlsZF92ZXJzaW9uICAgIDUNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9hcF9idWlsZF90eXBlICAgNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lfY2FjaGVfYnVpbGQgICAweDAwMTM1MTA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaV9jYWNoZV9idWlsZF9hc3NvYyAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaV9jYWNoZV9idWlsZF92ZXJzaW9uICAgNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lfY2FjaGVfYnVpbGRfY2FwYWNpdHkgIDUNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pX2NhY2hlX2J1aWxkX2JzaXplIDMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pX2NhY2hlX2J1aWxkX2ZsICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pX2NhY2hlX2J1aWxkX2QgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ljY21fYnVpbGQgIDB4MDAwMDA4MDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pY2NtX2J1aWxkX2ljY20xX3NpemUxICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaWNjbV9idWlsZF9pY2NtMF9zaXplMSAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ljY21fYnVpbGRfaWNjbTFfc2l6ZTAgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pY2NtX2J1aWxkX2ljY20wX3NpemUwICA4DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaWNjbV9idWlsZF92ZXJzaW9uICA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfeHlfYnVpbGQgICAgMHgwMDAwMTUyMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3h5X2J1aWxkX21lbXNpemUgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3h5X2J1aWxkX2ludGVybGVhdmVkICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl94eV9idWlsZF9jb25maWcgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3h5X2J1aWxkX3ZlcnNpb24gICAgMzINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kc3BfYnVpbGQgICAweDAwMDAzNTIxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZHNwX2J1aWxkX3dpZGUgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kc3BfYnVpbGRfaXR1X3BhICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kc3BfYnVpbGRfYWNjX3NoaWZ0IDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kc3BfYnVpbGRfY29tcCAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RzcF9idWlsZF9kaXZzcXJ0ICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RzcF9idWlsZF92ZXJzaW9uICAgMzMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9tdWx0aXBseV9idWlsZCAgMHgwMDAyMjIwNg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX211bHRpcGx5X2J1aWxkX3ZlcnNpb24xNngxNiAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfbXVsdGlwbHlfYnVpbGRfZHNwICAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfbXVsdGlwbHlfYnVpbGRfY3ljICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfbXVsdGlwbHlfYnVpbGRfdHlwZSAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfbXVsdGlwbHlfYnVpbGRfdmVyc2lvbjMyeDMyIDYNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9zd2FwX2J1aWxkICAweDAwMDAwMDAzDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3Jfc3dhcF9idWlsZF92ZXJzaW9uICAzDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3Jfbm9ybV9idWlsZCAgMHgwMDAwMDAwMw0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX25vcm1fYnVpbGRfdmVyc2lvbiAgMw0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX21pbm1heF9idWlsZCAgICAweDAwMDAwMDAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfbWlubWF4X2J1aWxkX3ZlcnNpb24gICAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2JhcnJlbF9idWlsZCAgICAweDAwMDAwMzAzDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYmFycmVsX2J1aWxkX3ZlcnNpb24gICAgMw0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2JhcnJlbF9idWlsZF9zaGlmdF9vcHRpb24gICAzDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXNhX2NvbmZpZyAgMHgxMjQ0NzQwMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfcmVzMSAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXNhX2NvbmZpZ19kICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pc2FfY29uZmlnX3JlczIgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfZiAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXNhX2NvbmZpZ19jICAgIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pc2FfY29uZmlnX2wgICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfbiAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXNhX2NvbmZpZ19hICAgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pc2FfY29uZmlnX2IgICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfYWRkcl9zaXplICAgIDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pc2FfY29uZmlnX2xwY19zaXplIDcNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pc2FfY29uZmlnX3BjX3NpemUgIDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pc2FfY29uZmlnX3ZlcnNpb24gIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9zdGFja19yZWdpb25fYnVpbGQgIDB4MDAwMDAwMDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9mcHVfYnVpbGQgICAweDAxMDAwZjAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZnB1X2J1aWxkX2RhICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9mcHVfYnVpbGRfZGQgICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ZwdV9idWlsZF9kYyAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZnB1X2J1aWxkX2RmICAgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9mcHVfYnVpbGRfZHAgICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ZwdV9idWlsZF9mZCAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZnB1X2J1aWxkX2ZtICAgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9mcHVfYnVpbGRfc2QgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ZwdV9idWlsZF9zYyAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZnB1X2J1aWxkX3NmICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9mcHVfYnVpbGRfc3AgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ZwdV9idWlsZF92ZXJzaW9uICAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2JzX2J1aWxkICAgIDB4MDAwMDAwMDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9ic19idWlsZF92ZXJzaW9uICAgIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9hZ3VfYnVpbGQgICAweDAxOTg4YzAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYWd1X2J1aWxkX2FjY29yZGlhbiAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYWd1X2J1aWxkX3diX3NpemUgICA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYWd1X2J1aWxkX251bV9tb2RpZmllciAgMjQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9hZ3VfYnVpbGRfbnVtX29mZnNldCAgICA4DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYWd1X2J1aWxkX251bV9hZGRyICAxMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2FndV9idWlsZF92ZXJzaW9uICAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RtYWNfYnVpbGQgIDB4MDAwYTAxMDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kbWFjX2J1aWxkX2ludF9jZmcgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kbWFjX2J1aWxkX2ZpZm8gMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RtYWNfYnVpbGRfY2hhbl9tZW0gMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RtYWNfYnVpbGRfY2hhbm5lbHMgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RtYWNfYnVpbGRfdmVyc2lvbiAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2NvcmVfY29uZmlnIDB4MDAwMDAxMDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9jb3JlX2NvbmZpZ190dXJib19ib29zdCAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfY29yZV9jb25maWdfdmVyc2lvbiAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXJxX2J1aWxkICAgMHgxMzEyMTYwMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lycV9idWlsZF9yYXogICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXJxX2J1aWxkX2YgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lycV9idWlsZF9wIDMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pcnFfYnVpbGRfZXh0cyAgMTgNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pcnFfYnVpbGRfaXJxcyAgMjINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pcnFfYnVpbGRfdmVyc2lvbiAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9wY3RfYnVpbGQgICAweDA4MDgwMTAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfcGN0X2J1aWxkX3ZlcnNpb24gICAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfcGN0X2J1aWxkX3MgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3BjdF9idWlsZF9pIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9wY3RfYnVpbGRfYyA4DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfY2NfYnVpbGQgICAgMHgwMDZmMDAwNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2NjX2J1aWxkX3ZlcnNpb24gICAgNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2NjX2J1aWxkX2NjIDExMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3NtYXJ0X2J1aWxkIDB4MDAwMDIwMDMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9zbWFydF9idWlsZF92ZXJzaW9uIDMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9zbWFydF9idWlsZF9zdGFja19zaXplICA4DQorI2RlZmluZSBjb3JlX2NvbmZpZ19jaXJfYXV4X2ljY20gICAgMHgwMDAwMDAwMA0KKyNkZWZpbmUgY29yZV9jb25maWdfY2lyX2RtcF9wZXJpcGhlcmFsICAweGYwMDAwMDAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19jaXJfeWNjbV9iYXNlICAgMHhlMDAwMDAwMA0KKyNkZWZpbmUgY29yZV9jb25maWdfZmFtaWx5ICA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19jb3JlX3ZlcnNpb24gICAgMw0KKyNkZWZpbmUgY29yZV9jb25maWdfZmFtaWx5X25hbWUgImFyY3YyZW0iDQorI2RlZmluZSBjb3JlX2NvbmZpZ19yZ2ZfbnVtX2JhbmtzICAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfcmdmX2JhbmtlZF9yZWdzIDMyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19yZ2ZfbnVtX3dyX3BvcnRzICAgIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2VuZGlhbiAgImxpdHRsZSINCisjZGVmaW5lIGNvcmVfY29uZmlnX2VuZGlhbl9saXR0bGUgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19lbmRpYW5fYmlnICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19scGNfc2l6ZSAgICAzMg0KKyNkZWZpbmUgY29yZV9jb25maWdfcGNfc2l6ZSAzMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYWRkcl9zaXplICAgMzINCisjZGVmaW5lIGNvcmVfY29uZmlnX3VuYWxpZ25lZCAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2NvZGVfZGVuc2l0eSAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kaXZfcmVtICJyYWRpeDIiDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kaXZfcmVtX3JhZGl4MiAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfdHVyYm9fYm9vc3QgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfc3dhcCAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iaXRzY2FuIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX21weV9vcHRpb24gICJtcHlkIg0KKyNkZWZpbmUgY29yZV9jb25maWdfbXB5X29wdGlvbl9udW0gIDgNCisjZGVmaW5lIGNvcmVfY29uZmlnX3NoaWZ0X2Fzc2lzdCAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iYXJyZWxfc2hpZnRlciAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfZHNwIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2RzcDIgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfZHNwX2NvbXBsZXggMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfZHNwX2RpdnNxcnQgInJhZGl4MiINCisjZGVmaW5lIGNvcmVfY29uZmlnX2RzcF9kaXZzcXJ0X3JhZGl4MiAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfZHNwX2l0dSAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kc3BfYWNjc2hpZnQgICAgImZ1bGwiDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kc3BfYWNjc2hpZnRfZnVsbCAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2FndV9sYXJnZSAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2FndV93Yl9kZXB0aCAgICA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19hZ3VfYWNjb3JkICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ194eSAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfeHlfY29uZmlnICAgImRjY21feSINCisjZGVmaW5lIGNvcmVfY29uZmlnX3h5X2NvbmZpZ19kY2NtX3kgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfeHlfc2l6ZSA4MTkyDQorI2RlZmluZSBjb3JlX2NvbmZpZ194eV9zaXplX0tNICAiOEsiDQorI2RlZmluZSBjb3JlX2NvbmZpZ194eV9pbnRlcmxlYXZlICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfeHlfeV9iYXNlICAgMHhlMDAwMDAwMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYml0c3RyZWFtICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfZnB1c19kaXYgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfZnB1X21hYyAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19mcHVkYSAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2ZwdXNfbXB5X3Nsb3cgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19mcHVzX2Rpdl9zbG93ICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfdGltZXIwICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ190aW1lcjBfbGV2ZWwgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfdGltZXIwX3ZlY3RvciAgIDE2DQorI2RlZmluZSBjb3JlX2NvbmZpZ190aW1lcjEgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX3RpbWVyMV9sZXZlbCAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ190aW1lcjFfdmVjdG9yICAgMTcNCisjZGVmaW5lIGNvcmVfY29uZmlnX2FjdGlvbl9wb2ludHMgICAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19zdGFja19jaGVjayAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19zbWFydF9zdGFja19lbnRyaWVzIDgNCisjZGVmaW5lIGNvcmVfY29uZmlnX2ludGVycnVwdHNfcHJlc2VudCAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfaW50ZXJydXB0c19udW1iZXIgICAyMg0KKyNkZWZpbmUgY29yZV9jb25maWdfaW50ZXJydXB0c19wcmlvcml0aWVzICAgNA0KKyNkZWZpbmUgY29yZV9jb25maWdfaW50ZXJydXB0c19leHRlcm5hbHMgICAgMTgNCisjZGVmaW5lIGNvcmVfY29uZmlnX2ludGVycnVwdHMgIDIyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19pbnRlcnJ1cHRfcHJpb3JpdGllcyAgICA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19leHRfaW50ZXJydXB0cyAgMTgNCisjZGVmaW5lIGNvcmVfY29uZmlnX2ludGVycnVwdHNfZmlycSAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19pbnRlcnJ1cHRzX2Jhc2UgMHgwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kY2FjaGVfcHJlc2VudCAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfZGNhY2hlX3NpemUgMTYzODQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2RjYWNoZV9saW5lX3NpemUgICAgMzINCisjZGVmaW5lIGNvcmVfY29uZmlnX2RjYWNoZV93YXlzIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2RjYWNoZV9mZWF0dXJlICAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19pY2FjaGVfcHJlc2VudCAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfaWNhY2hlX3NpemUgMTYzODQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2ljYWNoZV9saW5lX3NpemUgICAgNjQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2ljYWNoZV93YXlzIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2ljYWNoZV9mZWF0dXJlICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kY2NtX3ByZXNlbnQgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfZGNjbV9zaXplICAgMHgxMDAwMA0KKyNkZWZpbmUgY29yZV9jb25maWdfZGNjbV9iYXNlICAgMHg4MDAwMDAwMA0KKyNkZWZpbmUgY29yZV9jb25maWdfZGNjbV9pbnRlcmxlYXZlIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2ljY21fcHJlc2VudCAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19pY2NtMF9wcmVzZW50ICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfaWNjbV9zaXplICAgMHgxMDAwMA0KKyNkZWZpbmUgY29yZV9jb25maWdfaWNjbTBfc2l6ZSAgMHgxMDAwMA0KKyNkZWZpbmUgY29yZV9jb25maWdfaWNjbV9iYXNlICAgMHgwMDAwMDAwMA0KKyNkZWZpbmUgY29yZV9jb25maWdfaWNjbTBfYmFzZSAgMHgwMDAwMDAwMA0KKyNkZWZpbmUgY29yZV9jb25maWdfcGN0X2NvdW50ZXJzICAgIDgNCisjZGVmaW5lIGNvcmVfY29uZmlnX2RtYWMgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfZG1hY19jaGFubmVscyAgIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2RtYWNfcmVnaXN0ZXJzICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kbWFjX2ZpZm9fZGVwdGggMg0KKyNkZWZpbmUgY29yZV9jb25maWdfZG1hY19pbnRfY29uZmlnICJzaW5nbGVfaW50ZXJuYWwiDQorI2RlZmluZSBjb3JlX2NvbmZpZ19jbG9ja19zcGVlZCAyMA0KKyNlbmRpZiAvKiBfX2NvcmVfY29uZmlnX2ggKi8NCisNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvYm9hcmQuYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9ib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNzhjMjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvYm9hcmQuYwpAQCAtMCwwICsxLDY2IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE2LTAxLTIwDQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2J1aWx0aW4uaCINCisjaW5jbHVkZSAiYm9hcmQvYm9hcmQuaCINCisjaW5jbHVkZSAiY29tbW9uL2NvbnNvbGVfaW8uaCINCisNCit0eXBlZGVmIHN0cnVjdCBtYWluX2FyZ3MNCit7DQorICAgIGludCBhcmdjOw0KKyAgICBjaGFyICphcmd2W107DQorfSBNQUlOX0FSR1M7DQorDQorLyoqIENoYW5nZSB0aGlzIHRvIHBhc3MgeW91ciBvd24gYXJndW1lbnRzIHRvIG1haW4gZnVuY3Rpb25zICovDQorTUFJTl9BUkdTIHNfbWFpbl9hcmdzID0gezEsIHsibWFpbiJ9fTsNCisNCitzdGF0aWMgdm9pZCBlbnRlcl90b19tYWluKE1BSU5fQVJHUyAqbWFpbl9hcmcpDQorew0KKyAgICBpZiAobWFpbl9hcmcgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgLyogbnVsbCBvciBhbGlnbmVkIG5vdCB0byA0IGJ5dGVzICovDQorICAgICAgICBfYXJjX2dvdG9fbWFpbigwLCBOVUxMKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIF9hcmNfZ290b19tYWluKG1haW5fYXJnLT5hcmdjLCBtYWluX2FyZy0+YXJndik7DQorICAgIH0NCit9DQorDQordm9pZCBib2FyZF9tYWluKHZvaWQpDQorew0KKyAgICAvKiBib2FyZCBsZXZlbCBoYXJkd2FyZSBpbml0ICovDQorICAgIGJvYXJkX2luaXQoKTsNCisgICAgeHByaW50Zl9zZXR1cCgpOw0KKyAgICBjcHVfdW5sb2NrKCk7ICAgLyogdW5sb2NrIGNwdSB0byBsZXQgaW50ZXJydXB0IHdvcmsgKi8NCisgICAgZW50ZXJfdG9fbWFpbigmc19tYWluX2FyZ3MpOw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvYm9hcmQuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9ib2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwYjUyZDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvYm9hcmQuaApAQCAtMCwwICsxLDY4IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE0LTA3LTAzDQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qKg0KKyAqDQorICogXGZpbGUNCisgKiBcaW5ncm91cAlCT0FSRF9DT01NT04NCisgKiBcYnJpZWYJY29tbW9uIGJvYXJkIGhlYWRlciBmaWxlDQorICogXGRldGFpbHMNCisgKiAtIFRoaXMgaGVhZGVyIGZpbGUgd2lsbCBjb250YWluIGJvYXJkIHJlbGF0ZWQgc2V0dGluZ3MgZm9yIGRpZmZlcmVudCBib2FyZHMuDQorICogLSBFYWNoIGJvYXJkIGNvbmZpZ3VyYXRpb25zIGFyZSBwdXQgaW4gaXRzIG93biBoZWFkZXIgZmlsZSwgbGlrZSBlbXNrL2Vtc2suaA0KKyAqIC0gSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uLCB5b3UgbmVlZCB0byBnbyB0byByZWxhdGVkIGhlYWRlciBmaWxlLCBlLmcuDQorICogICBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgRU1TSyBib2FyZCBzZXR0aW5ncywgeW91IG5lZWQgdG8gZ28gdG8gZW1zay9lbXNrLmgNCisgKiAtIEluIGVtYkFSQyAyMDE1LjA1LCBhbGwgdGhlIHNldHRpbmdzIGFyZSBpbiB0aGlzIGJvYXJkLmgsIGJ1dCBub3cgaXQgbW92ZWQgdG8gcmVsYXRlZCBib2FyZCBoZWFkZXIgZmlsZQ0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIEJPQVJEX0NPTU1PTg0KKyAqIEB7DQorICovDQorI2lmbmRlZiBfRU1CQVJDX0JPQVJEX0hfDQorI2RlZmluZSBfRU1CQVJDX0JPQVJEX0hfDQorDQorI2luY2x1ZGUgImVtYkFSQ19CU1BfY29uZmlnLmgiDQorLyoqDQorICogXHRvZG8JYWRkIGNvbW1lbnRzIGFuZCBkb2N1bWVudHMgdG8gZGVzY3JpYmUgdGhlIG1hY3Jvcw0KKyAqIFxub3RlIAl0aGUgZm9sbG93aW5nIG1hY3JvcyBtdXN0IHVzZSB0aGUgc2FtZSBuYW1lLCBiZWNhdXNlDQorICoJdGhleSBhcmUgdXNlZCBieSBtaWRkbGV3YXJlIGFuZCBvdGhlciBhcHBsaWNhdGlvbnMNCisgKi8NCisvKiogaGVyZSBpcyBhIHNhbXBsZSBvZiBFTVNLIGJvYXJkIHJlc291cmNlIGRlZmluaXRpb25zICovDQorI2lmZGVmIEJPQVJEX0VNU0sNCisjaW5jbHVkZSAiYm9hcmQvZW1zay9lbXNrLmgiDQorI2VuZGlmIC8qIEJPQVJEX0VNU0sgKi8NCisNCisvKiogeW91IGNhbiBhZGQgeW91ciBib2FyZCBjb25maWd1cmF0aW9uIGFzIEJPQVJEX0VNU0sgZGVmaW5lZCB1cCAqLw0KKw0KKyNlbmRpZiAvKiBfRU1CQVJDX0JPQVJEX0hfICovDQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9DT01NT04gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vZW1za19pbml0LmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vZW1za19pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVmMWY5ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9lbXNrX2luaXQuYwpAQCAtMCwwICsxLDExNiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0zMQ0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBCT0FSRF9FTVNLX0NPTU1PTl9JTklUICBFTVNLIENvbW1vbiBJbml0IE1vZHVsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfQ09NTU9ODQorICogXGJyaWVmICAgRU1TSyBCb2FyZCBDb21tb24gSW5pdCBNb2R1bGUNCisgKiBcZGV0YWlscw0KKyAqICAgICAgRU1TSyB0aW1lci9ncGlvL2ludGVycnVwdCBpbml0IHByb2Nlc3MuIERldmljZS1kcml2ZXIgaW5zdGFsbGF0aW9uIGlzIGRvbmUgd2hpbGUNCisgKiAgZ2V0dGluZyB0aGUgZGV2aWNlIG9iamVjdCBmb3IgdGhlIGZpcnN0IHRpbWUuDQorICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0NPTU1PTl9JTklUDQorICogXGJyaWVmICAgY29tbW9uIGVtc2sgaW5pdCBtb2R1bGUNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19DT01NT05fSU5JVA0KKyAqIEB7DQorICovDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2J1aWx0aW4uaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmMuaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfdGltZXIuaCINCisNCisjaW5jbHVkZSAiYm9hcmQvZW1zay9lbXNrLmgiDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svY29tbW9uL2Vtc2tfdGltZXIuaCINCisjaW5jbHVkZSAiYm9hcmQvZW1zay9jb21tb24vbXV4LmgiDQorDQorI2lmZGVmIEFSQ19GRUFUVVJFX0RNUF9QRVJJUEhFUkFMDQorI2RlZmluZSBQRVJJUEhFUkFMX0JBU0UgICAgIEFSQ19GRUFUVVJFX0RNUF9QRVJJUEhFUkFMDQorI2Vsc2UNCisjZGVmaW5lIFBFUklQSEVSQUxfQkFTRSAgICAgX2FyY19hdXhfcmVhZChBVVhfRE1QX1BFUklQSEVSQUwpDQorI2VuZGlmDQorDQorLyoqDQorICogXGJyaWVmICAgZW1zay1yZWxhdGVkIG11eCBpbyBpbml0DQorICovDQorc3RhdGljIHZvaWQgZW1za19tdXhfaW5pdCh2b2lkKQ0KK3sNCisgICAgTVVYX1JFRyAqbXV4X3JlZ3M7DQorDQorICAgIG11eF9yZWdzID0gKE1VWF9SRUcgKikoUEVSSVBIRVJBTF9CQVNFIHwgUkVMX1JFR0JBU0VfUElOTVVYKTsNCisgICAgbXV4X2luaXQobXV4X3JlZ3MpOw0KKw0KKyAgICAvKioNCisgICAgICogKyBQbGVhc2UgcmVmZXIgdG8gY29ycmVzcG9uZGluZyBFTVNLIFVzZXIgR3VpZGUgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uDQorICAgICAqICAgLT4gQXBwZW5kaXg6IEEgIEhhcmR3YXJlIEZ1bmN0aW9uYWwgRGVzY3JpcHRpb24NCisgICAgICogICAgICAtPiBQbW9kcyBDb25maWd1cmF0aW9uIHN1bW1hcnkNCisgICAgICogKyBTZXQgdXAgcGluLW11bHRpcGxleGVyIG9mIGFsbCBQTU9EIGNvbm5lY3Rpb25zDQorICAgICAqICAgLSBQTTEgSjE6IFVwcGVyIHJvdyBhcyBVQVJUIDAsIGxvd2VyIHJvdyBhcyBTUEkgU2xhdmUNCisgICAgICogICAtIFBNMiBKMjogSUlDIDAgYW5kIHJ1bi9oYWx0IHNpZ25hbHMNCisgICAgICogICAtIFBNMyBKMzogR1BJTyBQb3J0IEEgYW5kIFBvcnQgQw0KKyAgICAgKiAgIC0gUE00IEo0OiBJSUMgMSBhbmQgUG9ydCBEDQorICAgICAqICAgLSBQTTUgSjU6IFVwcGVyIHJvdyBhcyBTUEkgTWFzdGVyLCBsb3dlciByb3cgYXMgUG9ydCBBDQorICAgICAqICAgLSBQTTYgSjY6IFVwcGVyIHJvdyBhcyBTUEkgTWFzdGVyLCBsb3dlciByb3cgYXMgUG9ydCBBDQorICAgICAqLw0KKyAgICBzZXRfcG1vZF9tdXgobXV4X3JlZ3MsIFBNMV9VUl9VQVJUXzAgfCBQTTFfTFJfU1BJX1MgXA0KKyAgICAgICAgICAgICAgICAgfCBQTTJfSTJDX0hSSSAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgfCBQTTNfR1BJT19BQyAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgfCBQTTRfSTJDX0dQSU9fRCAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgfCBQTTVfVVJfU1BJX00xIHwgUE01X0xSX0dQSU9fQSBcDQorICAgICAgICAgICAgICAgICB8IFBNNl9VUl9TUElfTTAgfCBQTTZfTFJfR1BJT19BKTsNCisNCisgICAgLyoqDQorICAgICAqIFBNMSB1cHBlciByb3cgYXMgVUFSVA0KKyAgICAgKiBVTTQ6UlhELCBVTTM6VFhEDQorICAgICAqIFVNMjpSVFNfTiwgVU0xOkNUU19ODQorICAgICAqLw0KKyAgICBzZXRfdWFydF9tYXAobXV4X3JlZ3MsIDB4OWMpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBCb2FyZCBpbml0IHJvdXRpbmUgTVVTVCBiZSBjYWxsZWQgaW4gZWFjaCBhcHBsaWNhdGlvbg0KKyAqIFxub3RlICAgIEl0IGlzIGJldHRlciB0byBkaXNhYmxlIGludGVycnVwdHMgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24NCisgKiAgcmVtZW1iZXIgdG8gZW5hYmxlIGludGVycnVwdCB3aGVuIHlvdSB3YW50IHRvIHVzZSB0aGVtDQorICovDQordm9pZCBib2FyZF9pbml0KHZvaWQpDQorew0KKyAgICB0aW1lcl9pbml0KCk7DQorICAgIGVtc2tfbXV4X2luaXQoKTsNCisgICAgZW1za19ncGlvX2luaXQoKTsNCisgICAgZW1za190aW1lcl9pbml0KCk7DQorfQ0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fSU5JVCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9lbXNrX3RpbWVyLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vZW1za190aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMWRmMGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vZW1za190aW1lci5jCkBAIC0wLDAgKzEsMjEwIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTMxDQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyoqDQorICogXGRlZmdyb3VwICAgIEJPQVJEX0VNU0tfQ09NTU9OX1RJTUVSIEVNU0sgQ29tbW9uIFRpbWVyIE1vZHVsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfQ09NTU9ODQorICogXGJyaWVmICAgcHJvdmlkZSBiYXNpYyBib2FyZCB0aW1lci1yZWxhdGVkIGZ1bmN0aW9ucw0KKyAqIFxkZXRhaWxzDQorICogICAgICBQcm92aWRlIGEgMSBNUyAoZGVmYXVsdCkgdGltZXIgaW50ZXJydXB0LA0KKyAqICBwcm92aWRlIGEgNjQtYml0IGNvdW50ZXIgdmFsdWUgKG5vIGNsZWFyKSBjb3VudCBpbiB0aGUgdGltZXIgaW50ZXJydXB0LA0KKyAqICBwcm92aWRlIE1TLXByZWNpc2lvbiBkZWxheSwgd2l0aCBPUyBlbmFibGVkLXN1cHBvcnQgZGVsYXkNCisgKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfQ09NTU9OX1RJTUVSDQorICogXGJyaWVmICAgcHJvdmlkZSBlbXNrIGJvYXJkIHRpbWVyLXJlbGF0ZWQgZnVuY3Rpb25zDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgIEJPQVJEX0VNU0tfQ09NTU9OX1RJTUVSDQorICogQHsNCisgKi8NCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfYnVpbHRpbi5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyYy5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY190aW1lci5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19leGNlcHRpb24uaCINCisNCisjaW5jbHVkZSAiYm9hcmQvZW1zay9lbXNrLmgiDQorDQorI2RlZmluZSBNQVhfU1lTX0NPVU5URVJfVkFMVUUgICAgICAgKDB4ZmZmZmZmZmYpDQorDQorI2lmbmRlZiBCT0FSRF9TWVNfVElNRVJfSFoNCisjZGVmaW5lIEJPQVJEX1NZU19USU1FUl9IWiAgICAgICgxMDAwKQ0KKyNlbmRpZg0KKw0KKy8qKiBlbXNrIGJvYXJkIHRpbWVyIGludGVycnVwdCByZXNldCBjb3VudCAqLw0KK3N0YXRpYyB1aW50MzJfdCBjeWNfaHpfY291bnQgPSAoQk9BUkRfQ1BVX0NMT0NLIC8gQk9BUkRfU1lTX1RJTUVSX0haKTsNCisNCisvKiogZW1zayBib2FyZCB0aW1lciBjb3VudGVyIGluIHRpbWVyIGludGVycnVwdCAqLw0KK3ZvbGF0aWxlIHVpbnQ2NF90IGdsX2Vtc2tfc3lzX2h6X2NudCA9IDA7DQorLyoqIGVtc2sgYm9hcmQgMW1zIGNvdW50ZXIgKi8NCit2b2xhdGlsZSB1aW50MzJfdCBnbF9lbXNrX21zX2NudCA9IDA7DQorDQorI2RlZmluZSBIWl9DT1VOVF9DT05WKHByZWNpc2lvbiwgYmFzZSkgICgocHJlY2lzaW9uKS8oYmFzZSkpDQorDQorLyoqDQorICogXGJyaWVmICAgVXBkYXRlIHRpbWVyIGNvdW50ZXIgYW5kIG90aGVyIE1TIHBlcmlvZCBvcGVyYXRpb24NCisgKiAgaW4gY3ljbGluZyBpbnRlcnJ1cHQgYW5kIG11c3QgYmUgY2FsbGVkIHBlcmlvZGljYWxseS4gV2hlbiB0aGUgT1MgdGltZXINCisgKiAgaW50ZXJydXB0IGlzIGluIGNvbmZsaWN0IHdpdGggdGhlIGJhcmUtbWV0YWwgdGltZXIgaW50ZXJydXB0LA0KKyAqICBwdXQgdGhpcyBmdW5jdGlvbiBpbnRvIHRoZSBPUyB0aW1lciBpbnRlcnJ1cHQNCisgKiBccGFyYW1baW5dICAgcHJlY2lzaW9uICAgaW50ZXJydXB0LXBlcmlvZCBwcmVjaXNpb24gaW4gSHoNCisgKi8NCit2b2lkIGJvYXJkX3RpbWVyX3VwZGF0ZSh1aW50MzJfdCBwcmVjaXNpb24pDQorew0KKyAgICBzdGF0aWMgdWludDMyX3Qgc3lzX2h6X3VwZGF0ZSA9IDA7DQorICAgIHN0YXRpYyB1aW50MzJfdCBzeXNfbXNfdXBkYXRlID0gMDsNCisgICAgdWludDMyX3QgaHpfY29udiA9IDA7DQorDQorICAgIC8qKiBjb3VudCBzeXMgaHogKi8NCisgICAgaHpfY29udiA9IEhaX0NPVU5UX0NPTlYocHJlY2lzaW9uLCBCT0FSRF9TWVNfVElNRVJfSFopOw0KKyAgICBzeXNfaHpfdXBkYXRlICsrOw0KKw0KKyAgICBpZiAoc3lzX2h6X3VwZGF0ZSA+PSBoel9jb252KQ0KKyAgICB7DQorICAgICAgICBzeXNfaHpfdXBkYXRlID0gMDsNCisgICAgICAgIGdsX2Vtc2tfc3lzX2h6X2NudCArKzsNCisgICAgfQ0KKw0KKyAgICAvKiogY291bnQgbXMgKi8NCisgICAgaHpfY29udiA9IEhaX0NPVU5UX0NPTlYocHJlY2lzaW9uLCBCT0FSRF9TWVNfVElNRVJfTVNfSFopOw0KKyAgICBzeXNfbXNfdXBkYXRlICsrOw0KKw0KKyAgICBpZiAoc3lzX21zX3VwZGF0ZSA+PSBoel9jb252KQ0KKyAgICB7DQorICAgICAgICBzeXNfbXNfdXBkYXRlID0gMDsNCisgICAgICAgIGdsX2Vtc2tfbXNfY250ICsrOw0KKw0KKyAgICAgICAgLyogbm8gU0QgY2FyZCBzdXBwb3J0ICovDQorICAgICAgICAvL2Vtc2tfc2RjYXJkXzFtc191cGRhdGUoKTsNCisgICAgfQ0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBlbXNrIGJhcmUtbWV0YWwgdGltZXIgaW50ZXJydXB0Lg0KKyAqICB0aGUgSW50ZXJydXB0IGZyZXF1ZW5jeSBpcyBiYXNlZCBvbiB0aGUgZGVmaW5lZCBccmVmIEJPQVJEX1NZU19USU1FUl9IWg0KKyAqLw0KK3N0YXRpYyB2b2lkIGVtc2tfdGltZXJfaXNyKHZvaWQgKnB0cikNCit7DQorICAgIHRpbWVyX2ludF9jbGVhcihCT0FSRF9TWVNfVElNRVJfSUQpOw0KKw0KKyAgICBib2FyZF90aW1lcl91cGRhdGUoQk9BUkRfU1lTX1RJTUVSX0haKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgaW5pdCBiYXJlLW1ldGFsIGVtc2sgYm9hcmQgdGltZXIgYW5kIGludGVycnVwdA0KKyAqIFxkZXRhaWxzDQorICogICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBccmVmIGJvYXJkX2luaXQsIGFuZA0KKyAqICBpdCBpbml0aWFsaXplcyB0aGUgMS1NUyB0aW1lciBpbnRlcnJ1cHQgZm9yIGJhcmUtbWV0YWwgbW9kZQ0KKyAqLw0KK3ZvaWQgZW1za190aW1lcl9pbml0KHZvaWQpDQorew0KKyAgICBpZiAodGltZXJfcHJlc2VudChCT0FSRF9TWVNfVElNRVJfSUQpKQ0KKyAgICB7DQorICAgICAgICBpbnRfZGlzYWJsZShCT0FSRF9TWVNfVElNRVJfSU5UTk8pOyAvKiBkaXNhYmxlIGZpcnN0IHRoZW4gZW5hYmxlICovDQorICAgICAgICBpbnRfaGFuZGxlcl9pbnN0YWxsKEJPQVJEX1NZU19USU1FUl9JTlROTywgZW1za190aW1lcl9pc3IpOw0KKyAgICAgICAgdGltZXJfc3RhcnQoQk9BUkRfU1lTX1RJTUVSX0lELCBUSU1FUl9DVFJMX0lFIHwgVElNRVJfQ1RSTF9OSCwgY3ljX2h6X2NvdW50KTsgLyogc3RhcnQgMW1zIHRpbWVyIGludGVycnVwdCAqLw0KKw0KKyAgICAgICAgaW50X2VuYWJsZShCT0FSRF9TWVNfVElNRVJfSU5UTk8pOw0KKyAgICB9DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGdldCBjdXJyZW50IGNwdSBoYXJkd2FyZSB0aWNrcw0KKyAqIFxyZXR2YWwgIGhhcmR3YXJlIHRpY2tzIGNvdW50IGluIDY0Yml0IGZvcm1hdA0KKyAqLw0KK3VpbnQ2NF90IGJvYXJkX2dldF9od3RpY2tzKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCBzdWJfdGlja3M7DQorICAgIHVpbnQ2NF90IHRvdGFsX3RpY2tzOw0KKyAgICB0aW1lcl9jdXJyZW50KFRJTUVSXzAsICZzdWJfdGlja3MpOw0KKw0KKyAgICB0b3RhbF90aWNrcyA9ICh1aW50NjRfdClPU1BfR0VUX0NVUl9NUygpICogKEJPQVJEX0NQVV9DTE9DSyAvIEJPQVJEX1NZU19USU1FUl9IWik7DQorICAgIHRvdGFsX3RpY2tzICs9ICh1aW50NjRfdClzdWJfdGlja3M7DQorDQorICAgIHJldHVybiB0b3RhbF90aWNrczsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgZ2V0IGN1cnJlbnQgcGFzc2VkIHVzIHNpbmNlIHRpbWVyIGluaXQNCisgKiBccmV0dmFsICB1cyBjb3VudCBpbiA2NGJpdCBmb3JtYXQNCisgKi8NCit1aW50NjRfdCBib2FyZF9nZXRfY3VyX3VzKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCBzdWJfdXM7DQorICAgIHVpbnQ2NF90IHRvdGFsX3VzOw0KKyAgICB0aW1lcl9jdXJyZW50KFRJTUVSXzAsICZzdWJfdXMpOw0KKw0KKyAgICBzdWJfdXMgPSAoKHVpbnQ2NF90KXN1Yl91cyAqIDEwMDAwMDApIC8gQk9BUkRfQ1BVX0NMT0NLOw0KKyAgICB0b3RhbF91cyA9ICgodWludDY0X3QpT1NQX0dFVF9DVVJfTVMoKSkgKiAxMDAwICsgKHVpbnQ2NF90KXN1Yl91czsNCisNCisgICAgcmV0dXJuIHRvdGFsX3VzOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBwcm92aWRlIE1TIGRlbGF5IGZ1bmN0aW9uDQorICogXGRldGFpbHMNCisgKiAgICAgIHRoaXMgZnVuY3Rpb24gbmVlZHMgYSAxLU1TIHRpbWVyIGludGVycnVwdCB0byB3b3JrLg0KKyAqICBGb3IgYmFyZS1tZXRhbCwgaXQgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBmaWxlLg0KKyAqICBGb3IgT1MsIHlvdSBtdXN0IGNhbGwgXHJlZiBib2FyZF90aW1lcl91cGRhdGUgaW4NCisgKiAgdGhlIE9TIDEtTVMgdGltZXIgaW50ZXJydXB0IHdoZW4gdGhlIGJhcmUtbWV0YWwgdGltZXIgaW50ZXJydXB0DQorICogIGlzIG5vdCByZWFkeQ0KKyAqIFxwYXJhbVtpbl0gICBtcyAgICAgIE1TIHRvIGRlbGF5DQorICogXHBhcmFtW2luXSAgIG9zX2NvbXBhdCAgIEVuYWJsZSBvciBkaXNhYmxlDQorICogIFdoZW4gdGhpcyBkZWxheSBpcyBlbmFibGVkLCB1c2UgdGhlIE9TIGRlbGF5IGZ1bmN0aW9uLCBpZiBvbmUgaXMgcHJvdmlkZWQuDQorICogIFNlZSBccmVmIE9TUF9ERUxBWV9PU19DT01QQVRfRU5BQkxFIGFuZA0KKyAqICBccmVmIE9TUF9ERUxBWV9PU19DT01QQVRfRElTQUJMRQ0KKyAqLw0KK3ZvaWQgYm9hcmRfZGVsYXlfbXModWludDMyX3QgbXMsIHVpbnQ4X3Qgb3NfY29tcGF0KQ0KK3sNCisgICAgdWludDY0X3Qgc3RhcnRfdXMsIHVzX2RlbGF5ZWQ7DQorDQorI2lmZGVmIEVOQUJMRV9PUw0KKw0KKyAgICBpZiAob3NfY29tcGF0ID09IE9TUF9ERUxBWV9PU19DT01QQVRfRU5BQkxFKQ0KKyAgICB7DQorICAgICAgICAvKiogXHRvZG8gYWRkIGRpZmZlcmVudCBvcyBkZWxheSBmdW5jdGlvbnMgKi8NCisjaWZkZWYgT1NfRlJFRVJUT1MNCisgICAgICAgIHZUYXNrRGVsYXkobXMpOw0KKyAgICAgICAgcmV0dXJuOw0KKyNlbmRpZg0KKyAgICB9DQorDQorI2VuZGlmDQorICAgIHVzX2RlbGF5ZWQgPSAoKHVpbnQ2NF90KW1zICogMTAwMCk7DQorICAgIHN0YXJ0X3VzID0gYm9hcmRfZ2V0X2N1cl91cygpOw0KKw0KKyAgICB3aGlsZSAoKGJvYXJkX2dldF9jdXJfdXMoKSAtIHN0YXJ0X3VzKSA8IHVzX2RlbGF5ZWQpOw0KK30NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfQ09NTU9OX1RJTUVSICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL2Vtc2tfdGltZXIuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9lbXNrX3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzNzUzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9lbXNrX3RpbWVyLmgKQEAgLTAsMCArMSw2MyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0zMQ0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fVElNRVINCisgKiBcYnJpZWYgICBlbXNrIHRpbWVyIGZ1bmN0aW9ucyBoZWFkZXINCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCBCT0FSRF9FTVNLX0NPTU1PTl9USU1FUg0KKyAqIEB7DQorICovDQorI2lmbmRlZiBfRU1TS19USU1FUl8NCisjZGVmaW5lIF9FTVNLX1RJTUVSXw0KKw0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX3Rvb2xjaGFpbi5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK2V4dGVybiB2b2xhdGlsZSB1aW50NjRfdCBnbF9lbXNrX3N5c19oel9jbnQ7DQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IGdsX2Vtc2tfbXNfY250Ow0KKw0KK2V4dGVybiB2b2lkIGVtc2tfdGltZXJfaW5pdCh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9FTVNLX1RJTUVSXyAqLw0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fVElNRVIgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vbXV4LmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vbXV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU1MzI5NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXguYwpAQCAtMCwwICsxLDExNiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0wNw0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvKioNCisgKiBcZGVmZ3JvdXAgICAgQk9BUkRfRU1TS19EUlZfTVVYICBFTVNLIE11eCBEcml2ZXINCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSSVZFUg0KKyAqIFxicmllZiAgIEVNU0sgTXV4IENvbnRyb2xsZXIgRHJpdmVyDQorICogXGRldGFpbHMNCisgKiAgICAgIE11eCBjb250cm9sbGVyIGlzIHRoZSBoYXJkd2FyZSBleHRlcm5hbCBQTU9EIHBvcnQgcGluIGNvbm5lY3Rpb24NCisgKiAgY29udHJvbGxlciwgaXQgY2FuIGRpc3RyaWJ1dGUgdGhlIGV4dGVybmFsIHBvcnQgcGlucyBpbnRvIGRpZmZlcmVudA0KKyAqICBmdW5jdGlvbnMgbGlrZSBnZW5lcmFsIGlucHV0L291dHB1dCwgc3BpLCBpaWMsIHVhcnQgYW5kIHNvIG9uLg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfTVVYDQorICogXGJyaWVmICAgZW1zayBtdXggY29udHJvbGxlciBkcml2ZXINCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfTVVYDQorICogQHsNCisgKi8NCisjaW5jbHVkZSAiYm9hcmQvZW1zay9jb21tb24vbXV4X2hhbC5oIg0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2NvbW1vbi9tdXguaCINCisNCitzdGF0aWMgTVVYX1JFRyAqbXV4X2N0cmxfcmVncyA9IChNVVhfUkVHICopMDsNCisNCisvKiogaW5pdGlhbGl6ZSBpMmMgY29udHJvbGxlciBhbmQgc2V0IHNsYXZlIGRldmljZSBhZGRyZXNzICovDQordm9pZCBtdXhfaW5pdChNVVhfUkVHICptdXhfcmVncykNCit7DQorICAgIC8vIEluaXRpYWxpemUgTXV4IGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGJ5IGRlZmF1bHQgdmFsdWVzDQorICAgIG11eF9yZWdzW1BNT0RfTVVYX0NUUkxdID0gUE1PRF9NVVhfQ1RSTF9ERUZBVUxUOw0KKyAgICBtdXhfcmVnc1tTUElfTUFQX0NUUkxdID0gIFNQSV9NQVBfQ1RSTF9ERUZBVUxUOw0KKyAgICBtdXhfcmVnc1tVQVJUX01BUF9DVFJMXSA9IFVBUlRfTUFQX0NUUkxfREVGQVVMVDsNCisgICAgbXV4X2N0cmxfcmVncyA9IG11eF9yZWdzOw0KK30NCisNCisvKiogR2V0IG11eCBjdHJsIHJlZ2lzdGVyIHBvaW50ZXIsIG9ubHkgdmFsaWQgYWZ0ZXIgbXV4X2luaXQgKi8NCitNVVhfUkVHICpnZXRfbXV4X3JlZ3Modm9pZCkNCit7DQorICAgIHJldHVybiBtdXhfY3RybF9yZWdzOw0KK30NCisNCisvKiogc2V0IFBNT0QgbXV4ZXIgc2NoZW1lICovDQordm9pZCBzZXRfcG1vZF9tdXgoTVVYX1JFRyAqbXV4X3JlZ3MsIHVpbnQzMl90IHZhbCkNCit7DQorICAgIG11eF9yZWdzW1BNT0RfTVVYX0NUUkxdID0gdmFsOw0KK30NCisNCisvKiogZ2V0IFBNT0QgbXV4ZXIgc2NoZW1lICovDQordWludDMyX3QgZ2V0X3Btb2RfbXV4KE1VWF9SRUcgKm11eF9yZWdzKQ0KK3sNCisgICAgcmV0dXJuICh1aW50MzJfdCkgbXV4X3JlZ3NbUE1PRF9NVVhfQ1RSTF07DQorfQ0KKw0KKy8qKiBzZXQgUE1PRCBtdXhlciBzY2hlbWUgKi8NCit2b2lkIGNoYW5nZV9wbW9kX211eChNVVhfUkVHICptdXhfcmVncywgdWludDMyX3QgdmFsLCB1aW50MzJfdCBjaGFuZ2VfYml0cykNCit7DQorICAgIG11eF9yZWdzW1BNT0RfTVVYX0NUUkxdID0gKChtdXhfcmVnc1tQTU9EX01VWF9DVFJMXSAmIH5jaGFuZ2VfYml0cykgfCB2YWwpOw0KK30NCisNCisvKiogc2V0IFNQSSBjb25uZWN0aW9uIHNjaGVtZSAqLw0KK3ZvaWQgc2V0X3NwaV9tYXAoTVVYX1JFRyAqbXV4X3JlZ3MsIHVpbnQzMl90IHZhbCkNCit7DQorICAgIG11eF9yZWdzW1NQSV9NQVBfQ1RSTF0gPSB2YWw7DQorfQ0KKw0KKy8qKiBnZXQgU1BJIGNvbm5lY3Rpb24gc2NoZW1lICovDQordWludDMyX3QgZ2V0X3NwaV9tYXAoTVVYX1JFRyAqbXV4X3JlZ3MpDQorew0KKyAgICByZXR1cm4gKHVpbnQzMl90KSBtdXhfcmVnc1tTUElfTUFQX0NUUkxdOw0KK30NCisNCisvKiogc2V0IFVBUlQgY29ubmVjdGlvbiBzY2hlbWUgKi8NCit2b2lkIHNldF91YXJ0X21hcChNVVhfUkVHICptdXhfcmVncywgdWludDMyX3QgdmFsKQ0KK3sNCisgICAgbXV4X3JlZ3NbVUFSVF9NQVBfQ1RSTF0gPSB2YWw7DQorfQ0KKw0KKy8qKiBnZXQgVUFSVCBjb25uZWN0aW9uIHNjaGVtZSAqLw0KK3VpbnQzMl90IGdldF91YXJ0X21hcChNVVhfUkVHICptdXhfcmVncykNCit7DQorICAgIHJldHVybiAodWludDMyX3QpIG11eF9yZWdzW1VBUlRfTUFQX0NUUkxdOw0KK30NCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX01VWCAqLw0KKw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXguaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDc4ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL211eC5oCkBAIC0wLDAgKzEsMTg2IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTA3DQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfTVVYDQorICogXGJyaWVmICAgaGVhZGVyIGZpbGUgb2YgZW1zayBtdXggY29udHJvbGxlciBkcml2ZXINCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfTVVYDQorICogQHsNCisgKi8NCisjaWZuZGVmIF9NVVhfSF8NCisjZGVmaW5lIF9NVVhfSF8NCisNCisjaW5jbHVkZSAiaW5jL2VtYkFSQ190b29sY2hhaW4uaCINCisNCisjZGVmaW5lIEJJVDAgICAgICAgICAgICAoMCkNCisjZGVmaW5lIEJJVDEgICAgICAgICAgICAoMSkNCisjZGVmaW5lIEJJVDIgICAgICAgICAgICAoMikNCisjZGVmaW5lIEJJVDMgICAgICAgICAgICAoMykNCisjZGVmaW5lIFBNMV9PRkZTRVQgICAgICAoMCkNCisjZGVmaW5lIFBNMl9PRkZTRVQgICAgICAoNCkNCisjZGVmaW5lIFBNM19PRkZTRVQgICAgICAoOCkNCisjZGVmaW5lIFBNNF9PRkZTRVQgICAgICAoMTIpDQorI2RlZmluZSBQTTVfT0ZGU0VUICAgICAgKDE2KQ0KKyNkZWZpbmUgUE02X09GRlNFVCAgICAgICgyMCkNCisjZGVmaW5lIFBNN19PRkZTRVQgICAgICAoMjQpDQorDQorI2RlZmluZSBQTTFfTUFTSyAgICAgICAgKDB4ZiA8PCBQTTFfT0ZGU0VUKQ0KKyNkZWZpbmUgUE0yX01BU0sgICAgICAgICgweGYgPDwgUE0yX09GRlNFVCkNCisjZGVmaW5lIFBNM19NQVNLICAgICAgICAoMHhmIDw8IFBNM19PRkZTRVQpDQorI2RlZmluZSBQTTRfTUFTSyAgICAgICAgKDB4ZiA8PCBQTTRfT0ZGU0VUKQ0KKyNkZWZpbmUgUE01X01BU0sgICAgICAgICgweGYgPDwgUE01X09GRlNFVCkNCisjZGVmaW5lIFBNNl9NQVNLICAgICAgICAoMHhmIDw8IFBNNl9PRkZTRVQpDQorI2RlZmluZSBQTTdfTUFTSyAgICAgICAgKDB4ZiA8PCBQTTdfT0ZGU0VUKQ0KKw0KKw0KKyNkZWZpbmUgU1BJX01BUF9OT1JNQUwgICAgICAoMCkNCisjZGVmaW5lIFNQSV9NQVBfTE9PUEJBQ0sgICAgKDEpDQorDQorI2RlZmluZSBVQVJUX01BUF9UWVBFNCAgICAgICgweEU0KQ0KKyNkZWZpbmUgVUFSVF9NQVBfVFlQRTMgICAgICAoMHg2QykNCisNCisvKioNCisgKiBcbmFtZSAgICBEZWZhdWx0IHBpbiBtdXhlciBzZXR0aW5ncw0KKyAqIEB7DQorICovDQorI2RlZmluZSBQTU9EX01VWF9DVFJMX0RFRkFVTFQgICAoMCkgICAgICAgICAvKiE8IGFsbCBwaW5zIGFyZSBjb25maWd1cmVkIGFzIEdQSU8gaW5wdXRzICovDQorI2RlZmluZSBTUElfTUFQX0NUUkxfREVGQVVMVCAgICAoU1BJX01BUF9OT1JNQUwpICAgIC8qITwgbm9ybWFsIFNQSSBtb2RlICovDQorI2RlZmluZSBVQVJUX01BUF9DVFJMX0RFRkFVTFQgICAoVUFSVF9NQVBfVFlQRTQpICAgIC8qITwgVFlQRTQgUE1PRCBjb21wYXRpYmxlICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqDQorICogXG5hbWUgICAgUE1PRCAxIE11bHRpcGxleG9yDQorICogQHsNCisgKi8NCisjZGVmaW5lIFBNMV9VUl9HUElPX0MgICAgICAgKCgwIDw8IEJJVDApIDw8IFBNMV9PRkZTRVQpIC8qITwgUG1vZDFbNDoxXSBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBDWzExOjhdICovDQorI2RlZmluZSBQTTFfVVJfVUFSVF8wICAgICAgICgoMSA8PCBCSVQwKSA8PCBQTTFfT0ZGU0VUKSAvKiE8IFBtb2QxWzQ6MV0gYXJlIGNvbm5lY3RlZCB0byBEVyBVQVJUMCBzaWduYWxzICovDQorDQorI2RlZmluZSBQTTFfTFJfR1BJT19BICAgICAgICgoMCA8PCBCSVQyKSA8PCBQTTFfT0ZGU0VUKSAvKiE8IFBtb2QxWzEwOjddIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IEFbMTE6OF0gKi8NCisjZGVmaW5lIFBNMV9MUl9TUElfUyAgICAgICAgKCgxIDw8IEJJVDIpIDw8IFBNMV9PRkZTRVQpIC8qITwgUG1vZDFbMTA6N10gYXJlIGNvbm5lY3RlZCB0byBEVyBTUEkgU2xhdmUgc2lnbmFscyAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIFBNT0QgMiBNdWx0aXBsZXhvcg0KKyAqIEB7DQorICovDQorI2RlZmluZSBQTTJfR1BJT19BQyAgICAgKCgwIDw8IEJJVDApIDw8IFBNMl9PRkZTRVQpIC8qITwgUG1vZDJbNDoxXSAgYXJlIGNvbm5lY3RlZCB0byBEVyBHUElPIFBvcnQgQ1sxNToxMl0sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG1vZDJbMTA6N10gYXJlIGNvbm5lY3RlZCB0byBEVyBHUElPIFBvcnQgQVsxNToxMl0gICovDQorDQorI2RlZmluZSBQTTJfSTJDX0hSSSAgICAgKCgxIDw8IEJJVDApIDw8IFBNMl9PRkZTRVQpIC8qITwgY29ubmVjdCBJMkMgdG8gUG1vZDJbNDoxXSBhbmQgaGFsdC9ydW4gaW50ZXJmYWNlIHRvIFBtb2QyWzEwOjddICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorDQorLyoqDQorICogXG5hbWUgICAgUE1PRCAzIE11bHRpcGxleG9yDQorICogQHsNCisgKi8NCisjZGVmaW5lIFBNM19HUElPX0FDICAgICAoKDAgPDwgQklUMCkgPDwgUE0zX09GRlNFVCkgLyohPCBQbW9kM1s0OjFdICBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBDWzE5OjE2XSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbW9kM1sxMDo3XSBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBBWzE5OjE2XSAgKi8NCisNCisjZGVmaW5lIFBNM19JMkNfR1BJT19EICAgICAgKCgxIDw8IEJJVDApIDw8IFBNM19PRkZTRVQpIC8qITwgUG1vZDNbNDozXSAgYXJlIGNvbm5lY3RlZCB0byBEVyBJMkMgc2lnbmFscywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbW9kM1syOjFdICBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBEWzE6MF0sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG1vZDNbMTA6N10gYXJlIGNvbm5lY3RlZCB0byBEVyBHUElPIFBvcnQgRFszOjJdICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorDQorLyoqDQorICogXG5hbWUgICAgUE1PRCA0IE11bHRpcGxleG9yDQorICogQHsNCisgKi8NCisjZGVmaW5lIFBNNF9HUElPX0FDICAgICAoKDAgPDwgQklUMCkgPDwgUE00X09GRlNFVCkgLyohPCBQbW9kNFs0OjFdICBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBDWzIzOjIwXSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbW9kNFsxMDo3XSBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBBWzIzOjIwXSAqLw0KKw0KKyNkZWZpbmUgUE00X0kyQ19HUElPX0QgICAgICAoKDEgPDwgQklUMCkgPDwgUE00X09GRlNFVCkgLyohPCBQbW9kNFs0OjNdICBhcmUgY29ubmVjdGVkIHRvIERXIEkyQyBzaWduYWxzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBtb2Q0WzI6MV0gIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IERbNTo0XSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbW9kNFsxMDo3XSBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBEWzc6Nl0gKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBQTU9EIDUgTXVsdGlwbGV4b3INCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgUE01X1VSX0dQSU9fQyAgICAgICAoKDAgPDwgQklUMCkgPDwgUE01X09GRlNFVCkgLyohPCBQbW9kNVs0OjFdIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IENbMjc6MjRdICovDQorI2RlZmluZSBQTTVfVVJfU1BJX00xICAgICAgICgoMSA8PCBCSVQwKSA8PCBQTTVfT0ZGU0VUKSAvKiE8IFBtb2Q1WzQ6MV0gYXJlIGNvbm5lY3RlZCB0byBEVyBTUEkgTWFzdGVyIHNpZ25hbHMgdXNpbmcgQ1MxX04gKi8NCisNCisjZGVmaW5lIFBNNV9MUl9HUElPX0EgICAgICAgKCgwIDw8IEJJVDIpIDw8IFBNNV9PRkZTRVQpIC8qITwgUG1vZDVbMTA6N10gYXJlIGNvbm5lY3RlZCB0byBEVyBHUElPIFBvcnQgQVsyNzoyNF0gKi8NCisjZGVmaW5lIFBNNV9MUl9TUElfTTIgICAgICAgKCgxIDw8IEJJVDIpIDw8IFBNNV9PRkZTRVQpIC8qITwgUG1vZDVbMTA6N10gYXJlIGNvbm5lY3RlZCB0byBEVyBTUEkgTWFzdGVyIHNpZ25hbHMgdXNpbmcgQ1MyX04gKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisNCisvKioNCisgKiBcbmFtZSAgICBQTU9EIDYgTXVsdGlwbGV4b3INCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgUE02X1VSX0dQSU9fQyAgICAgICAoKDAgPDwgQklUMCkgPDwgUE02X09GRlNFVCkgLyohPCBQbW9kNls0OjFdIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IENbMzE6MjhdICovDQorI2RlZmluZSBQTTZfVVJfU1BJX00wICAgICAgICgoMSA8PCBCSVQwKSA8PCBQTTZfT0ZGU0VUKSAvKiE8IFBtb2Q2WzQ6MV0gYXJlIGNvbm5lY3RlZCB0byBEVyBTUEkgTWFzdGVyIHNpZ25hbHMgdXNpbmcgQ1MwX04gKi8NCisNCisjZGVmaW5lIFBNNl9MUl9HUElPX0EgICAgICAgKCgwIDw8IEJJVDIpIDw8IFBNNl9PRkZTRVQpIC8qITwgUG1vZDZbMTA6N10gYXJlIGNvbm5lY3RlZCB0byBEVyBHUElPIFBvcnQgQVszMToyOF0gKi8NCisNCisjZGVmaW5lIFBNNl9MUl9DU1NfU1RBVCAgICAgKCgxIDw8IEJJVDIpIDw8IFBNNl9PRkZTRVQpIC8qITwgUG1vZDZbODo3XSBhcmUgY29ubmVjdGVkIHRvIHRoZSBEVyBTUEkgTWFzdGVyIGNoaXAgc2VsZWN0IHNpZ25hbHMgQ1MxX04gYW5kIENTMl9OLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBtb2Q2WzY6NV0gYXJlIGNvbm5lY3RlZCB0byB0aGUgQVJDIEVNIGhhbHQgYW5kIHNsZWVwIHN0YXR1cyBzaWduYWxzICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqDQorICogXG5hbWUgICAgUE1PRCA3IE11bHRpcGxleG9yDQorICogQHsNCisgKi8NCisjZGVmaW5lIFBNN19HUElPX0QgICAgICAoKDAgPDwgQklUMCkgPDwgUE03X09GRlNFVCkgLyohPCBQbW9kN1s0OjFdIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IERbMTE6OF0gKi8NCisjZGVmaW5lIFBNN19TVEFUICAgICAgICAoKDEgPDwgQklUMCkgPDwgUE03X09GRlNFVCkgLyohPCBQbW9kN1s0OjFdIGFyZSBjb25uZWN0ZWQgdG8gdGhlIEFSQyBFTSBzbGVlcCBzdGF0dXMgc2lnbmFscyAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KK3R5cGVkZWYgdm9sYXRpbGUgdWludDMyX3QgTVVYX1JFRzsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCitleHRlcm4gdm9pZCBtdXhfaW5pdChNVVhfUkVHICptdXhfcmVncyk7DQorZXh0ZXJuIE1VWF9SRUcgKmdldF9tdXhfcmVncyh2b2lkKTsNCitleHRlcm4gdm9pZCBzZXRfcG1vZF9tdXgoTVVYX1JFRyAqbXV4X3JlZ3MsIHVpbnQzMl90IHZhbCk7DQorZXh0ZXJuIHVpbnQzMl90IGdldF9wbW9kX211eChNVVhfUkVHICptdXhfcmVncyk7DQorZXh0ZXJuIHZvaWQgY2hhbmdlX3Btb2RfbXV4KE1VWF9SRUcgKm11eF9yZWdzLCB1aW50MzJfdCB2YWwsIHVpbnQzMl90IGNoYW5nZV9iaXRzKTsNCitleHRlcm4gdm9pZCBzZXRfc3BpX21hcChNVVhfUkVHICptdXhfcmVncywgdWludDMyX3QgdmFsKTsNCitleHRlcm4gdWludDMyX3QgZ2V0X3NwaV9tYXAoTVVYX1JFRyAqbXV4X3JlZ3MpOw0KK2V4dGVybiB2b2lkIHNldF91YXJ0X21hcChNVVhfUkVHICptdXhfcmVncywgdWludDMyX3QgdmFsKTsNCitleHRlcm4gdWludDMyX3QgZ2V0X3VhcnRfbWFwKE1VWF9SRUcgKm11eF9yZWdzKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9NVVhfSF8gKi8NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX01VWCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXhfaGFsLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vbXV4X2hhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkM2ZmODYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vbXV4X2hhbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMDcNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9NVVgNCisgKiBcYnJpZWYgICBlbXNrIG11eCBjb250cm9sIHJlZ2lzdGVyIGluZGV4IGhlYWRlcg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9NVVgNCisgKiBAew0KKyAqLw0KKyNpZm5kZWYgX01VWF9IQUxfSF8NCisjZGVmaW5lIF9NVVhfSEFMX0hfDQorDQorLyoqDQorICogXG5hbWUgICAgTXV4IENvbnRyb2wgUmVnaXN0ZXIgSW5kZXgNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgUE1PRF9NVVhfQ1RSTCAgIDAgICAvKiE8IDMyLWJpdHMsIG9mZnNldCAweDAsDQorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlZ2lzdGVyIGNvbnRyb2xzIG1hcHBpbmcgb2YgdGhlIHBlcmlwaGVyYWwgZGV2aWNlIHNpZ25hbHMgb24gUG1vZCBjb25uZWN0b3JzICovDQorDQorI2RlZmluZSBJMkNfTUFQX0NUUkwgICAgMSAgIC8qITwgMzItYml0cywgb2Zmc2V0IDB4NCAqLw0KKw0KKyNkZWZpbmUgU1BJX01BUF9DVFJMICAgIDIgICAvKiE8IDMyLWJpdHMsIG9mZnNldCAweDgsDQorICAgICAgICAgICAgICAgICAgICBTUElfTUFQX0NUUkxbMF0gc2VsZWN0cyB0aGUgbW9kZSBvZiBvcGVyYXRpb24gb2YgdGhlIFNQSSBTbGF2ZToNCisgICAgICAgICAgICAgICAgICAgIC0gTm9ybWFsIG9wZXJhdGlvbiwgU1BJX01BUF9DVFJMWzBdPTA6IFNQSSBTbGF2ZSBpcyBjb25uZWN0ZWQgdG8gUG1vZDEgYXQgY29ubmVjdG9yIEoxLg0KKyAgICAgICAgICAgICAgICAgICAgLSBMb29wLWJhY2sgbW9kZSwgU1BJX01BUF9DVFJMWzBdPTE6IFNQSSBTbGF2ZSBpcyBjb25uZWN0ZWQgdG8gdGhlIFNQSSBNYXN0ZXIgaW5zaWRlIHRoZSBGUEdBIHVzaW5nIENTNC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorDQorI2RlZmluZSBVQVJUX01BUF9DVFJMICAgMyAgIC8qITwgMzItYml0cywgb2Zmc2V0IDB4OCwNCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVnaXN0ZXIgY29udHJvbHMgdGhlIG1hcHBpbmcgb2YgdGhlIFVBUlQgc2lnbmFscyBvbiB0aGUgUG1vZDEgY29ubmVjdG9yLiAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKw0KKyNlbmRpZiAgLyogX01VWF9IQUxfSF8gKi8NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX01VWCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2Vtc2suaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2Vtc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDUzMzYyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZW1zay5oCkBAIC0wLDAgKzEsMTQyIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA2LTE4DQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyoqDQorICoNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfQ09NTU9OX0lOSVQNCisgKiBcYnJpZWYgICBlbXNrIHJlc291cmNlIGRlZmluaXRpb25zDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fSU5JVA0KKyAqIEB7DQorICovDQorI2lmbmRlZiBfRU1TS19IXw0KKyNkZWZpbmUgX0VNU0tfSF8NCisNCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfZW0uaCINCisNCisjaW5jbHVkZSAiYm9hcmQvZW1zay91YXJ0L2R3X3VhcnRfb2JqLmgiDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svZ3Bpby9kd19ncGlvX29iai5oIg0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2dwaW8vZW1za19ncGlvLmgiDQorDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svY29tbW9uL2Vtc2tfdGltZXIuaCINCisNCisjaW5jbHVkZSAiYm9hcmQvZW1zay9lbXNrX2hhcmR3YXJlLmgiDQorDQorLyogQWRkaXRpb25hbCBoYXJkd2FyZSBkcml2ZXIgZm9yIGVtYkFSQyBCU1AgKi8NCisjaW5jbHVkZSAiYm9hcmQvZW1zay9zcGkvZHdfc3BpX29iai5oIg0KKyNpbmNsdWRlICJib2FyZC9lbXNrL3BtcmYvbXJmMjRqNDAuaCINCisjaW5jbHVkZSAiYm9hcmQvZW1zay9wbXJmL3BtcmYuaCINCisjaW5jbHVkZSAiYm9hcmQvZW1zay9zcGlmbGFzaC9zcGlmbGFzaC5oIg0KKw0KKyNkZWZpbmUgRU1TS19HUElPX1BPUlRfQSAgICAgICAgRFdfR1BJT19QT1JUX0ENCisjZGVmaW5lIEVNU0tfR1BJT19QT1JUX0IgICAgICAgIERXX0dQSU9fUE9SVF9CDQorI2RlZmluZSBFTVNLX0dQSU9fUE9SVF9DICAgICAgICBEV19HUElPX1BPUlRfQw0KKyNkZWZpbmUgRU1TS19HUElPX1BPUlRfRCAgICAgICAgRFdfR1BJT19QT1JUX0QNCisNCisvKiBjb21tb24gbWFjcm9zIG11c3QgYmUgZGVmaW5lZCBieSBhbGwgYm9hcmRzICovDQorDQorI2RlZmluZSBCT0FSRF9DT05TT0xFX1VBUlRfSUQgICAgICAgRFdfVUFSVF8xX0lEDQorI2RlZmluZSBCT0FSRF9DT05TT0xFX1VBUlRfQkFVRCAgICAgVUFSVF9CQVVEUkFURV8xMTUyMDANCisjZGVmaW5lIEJPQVJEX0FEQ19JSUNfSUQgICAgICAgIERXX0lJQ18wX0lEDQorI2RlZmluZSBCT0FSRF9URU1QX1NFTlNPUl9JSUNfSUQgICAgRFdfSUlDXzBfSUQNCisNCisjZGVmaW5lIEJPQVJEX1RFTVBfSUlDX1NMVkFERFIgICAgICBURU1QX0kyQ19TTEFWRV9BRERSRVNTDQorDQorI2RlZmluZSBCT0FSRF9TRENBUkRfU1BJX0lEICAgICBEV19TUElfMF9JRA0KKyNkZWZpbmUgQk9BUkRfV0lGSV9TUElfSUQgICAgICAgRFdfU1BJXzBfSUQNCisjZGVmaW5lIEJPQVJEX1NGTEFTSF9TUElfSUQgICAgIERXX1NQSV8wX0lEDQorDQorI2RlZmluZSBCT0FSRF9TRENBUkRfU1BJX0xJTkUgICAgICAgRU1TS19TUElfTElORV9TRENBUkQNCisjZGVmaW5lIEJPQVJEX1dJRklfU1BJX0xJTkUgICAgIEVNU0tfU1BJX0xJTkVfMQ0KKyNkZWZpbmUgQk9BUkRfU0ZMQVNIX1NQSV9MSU5FICAgICAgIEVNU0tfU1BJX0xJTkVfU0ZMQVNIDQorDQorI2lmbmRlZiBCT0FSRF9TUElfRlJFUQ0KKyNkZWZpbmUgQk9BUkRfU1BJX0ZSRVEgICAgICAgICAgKDEwMDAwMDApDQorI2VuZGlmDQorDQorI2lmbmRlZiBCT0FSRF9TUElfQ0xLTU9ERQ0KKyNkZWZpbmUgQk9BUkRfU1BJX0NMS01PREUgICAgICAgKFNQSV9DTEtfTU9ERV8wKQ0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgQk9BUkRfU1lTX1RJTUVSX0lEICAgICAgVElNRVJfMA0KKyNkZWZpbmUgQk9BUkRfU1lTX1RJTUVSX0lOVE5PICAgICAgIElOVE5PX1RJTUVSMA0KKyNkZWZpbmUgQk9BUkRfU1lTX1RJTUVSX0haICAgICAgKDEwMDApDQorDQorLyoqIGJvYXJkIHRpbWVyIGNvdW50IGZyZXF1ZW5jeSAoSFopICovDQorI2RlZmluZSBCT0FSRF9TWVNfVElNRVJfTVNfSFogICAgICAgKDEwMDApDQorLyoqIGJvYXJkIHRpbWVyIGNvdW50IGZyZXF1ZW5jeSBjb252ZW50aW9uIGJhc2VkIG9uIHRoZSBnbG9iYWwgdGltZXIgY291bnRlciAqLw0KKyNkZWZpbmUgQk9BUkRfU1lTX1RJTUVSX01TX0NPTlYgICAgIChCT0FSRF9TWVNfVElNRVJfTVNfSFovQk9BUkRfU1lTX1RJTUVSX0haKQ0KKw0KKyNkZWZpbmUgQk9BUkRfT1NfVElNRVJfSUQgICAgICAgVElNRVJfMA0KKyNkZWZpbmUgQk9BUkRfT1NfVElNRVJfSU5UTk8gICAgICAgIElOVE5PX1RJTUVSMA0KKw0KKyNkZWZpbmUgQk9BUkRfQ1BVX0NMT0NLICAgICAgICAgQ0xLX0NQVQ0KKyNkZWZpbmUgQk9BUkRfREVWX0NMT0NLICAgICAgICAgQ0xLX0JVU19BUEINCisNCisjZGVmaW5lIEJPQVJEX0xFRF9NQVNLICAgICAgICAgICgweDFmZikNCisjZGVmaW5lIEJPQVJEX0xFRF9DTlQgICAgICAgICAgICg5KQ0KKyNkZWZpbmUgQk9BUkRfQlROX01BU0sgICAgICAgICAgKDB4NykNCisjZGVmaW5lIEJPQVJEX0JUTl9DTlQgICAgICAgICAgICgzKQ0KKyNkZWZpbmUgQk9BUkRfU1dUX01BU0sgICAgICAgICAgKDB4ZikNCisjZGVmaW5lIEJPQVJEX1NXVF9DTlQgICAgICAgICAgICg0KQ0KKw0KKyNkZWZpbmUgQk9BUkRfT05CT0FSRF9OVFNIRUxMX0lEICAgIChFTVNLX05UU0hFTExfMF9JRCkNCisNCisjZGVmaW5lIE9TUF9ERUxBWV9PU19DT01QQVRfRU5BQkxFICAoMSkNCisjZGVmaW5lIE9TUF9ERUxBWV9PU19DT01QQVRfRElTQUJMRSAoMCkNCisNCisNCisjZGVmaW5lIE9TUF9HRVRfQ1VSX1NZU0haKCkgICAgIChnbF9lbXNrX3N5c19oel9jbnQpDQorI2RlZmluZSBPU1BfR0VUX0NVUl9NUygpICAgICAgICAoZ2xfZW1za19tc19jbnQpDQorI2RlZmluZSBPU1BfR0VUX0NVUl9VUygpICAgICAgICBib2FyZF9nZXRfY3VyX3VzKCkNCisjZGVmaW5lIE9TUF9HRVRfQ1VSX0hXVElDS1MoKSAgICAgICBib2FyZF9nZXRfaHd0aWNrcygpDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorZXh0ZXJuIHZvaWQgYm9hcmRfaW5pdCh2b2lkKTsNCitleHRlcm4gdm9pZCBib2FyZF90aW1lcl91cGRhdGUodWludDMyX3QgcHJlY2lzaW9uKTsNCitleHRlcm4gdm9pZCBib2FyZF9kZWxheV9tcyh1aW50MzJfdCBtcywgdWludDhfdCBvc19jb21wYXQpOw0KK2V4dGVybiB1aW50NjRfdCBib2FyZF9nZXRfaHd0aWNrcyh2b2lkKTsNCitleHRlcm4gdWludDY0X3QgYm9hcmRfZ2V0X2N1cl91cyh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmICAvKiBfRU1TS19IXyAqLw0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fSU5JVCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2Vtc2tfaGFyZHdhcmUuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2Vtc2tfaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2JhYzM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZW1za19oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTE3IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE1LTExLTE2DQorICogXGF1dGhvciBRaWFuZyBHdShRaWFuZy5HdUBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyoqDQorICoNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfQ09NTU9OX0lOSVQNCisgKiBcYnJpZWYgICBlbXNrIGhhcmR3YXJlIHJlc291cmNlIGRlZmluaXRpb25zDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fSU5JVA0KKyAqIEB7DQorICovDQorI2lmbmRlZiBfRU1TS19IQVJEV0FSRV9IXw0KKyNkZWZpbmUgX0VNU0tfSEFSRFdBUkVfSF8NCisNCisvKiogQ1BVIENsb2NrIEZyZXF1ZW5jeSBkZWZpbml0aW9uICovDQorI2lmIGRlZmluZWQoQk9BUkRfQ1BVX0ZSRVEpDQorLyohPCBHZXQgY3B1IGNsb2NrIGZyZXF1ZW5jeSBkZWZpbml0aW9uIGZyb20gYnVpbGQgc3lzdGVtICovDQorI2RlZmluZSBDTEtfQ1BVICAgICAgICAgKEJPQVJEX0NQVV9GUkVRKQ0KKyNlbGlmIGRlZmluZWQoQVJDX0ZFQVRVUkVfQ1BVX0NMT0NLX0ZSRVEpDQorLyohPCBHZXQgY3B1IGNsb2NrIGZyZXF1ZW5jeSBkZWZpbml0aW9uIGZyb20gdGNmIGZpbGUgKi8NCisjZGVmaW5lIENMS19DUFUgICAgICAgICAoQVJDX0ZFQVRVUkVfQ1BVX0NMT0NLX0ZSRVEpDQorI2Vsc2UNCisvKiE8IERlZmF1bHQgY3B1IGNsb2NrIGZyZXF1ZW5jeSAqLw0KKyNkZWZpbmUgQ0xLX0NQVSAgICAgICAgICgyMDAwMDAwMCkNCisjZW5kaWYNCisNCisvKiogUGVyaXBoZXJhbCBCdXMgUmVmZXJlbmNlIENsb2NrIGRlZmluaXRpb24gKi8NCisjaWZkZWYgQk9BUkRfREVWX0ZSRVENCisvKiE8IEdldCBwZXJpcGhlcmFsIGJ1cyByZWZlcmVuY2UgY2xvY2sgZGVmaW50aW9uIGZyb20gYnVpbGQgc3lzdGVtICovDQorI2RlZmluZSBDTEtfQlVTX0FQQiAgICAgKEJPQVJEX0RFVl9GUkVRKQ0KKyNlbHNlDQorLyohPCBEZWZhdWx0IHBlcmlwaGVyYWwgYnVzIHJlZmVyZW5jZSBjbG9jayBkZWZpbnRpb24gKi8NCisjZGVmaW5lIENMS19CVVNfQVBCICAgICAoNTAwMDAwMDBVKQ0KKyNlbmRpZg0KKw0KKy8qIERldmljZSBSZWdpc3RlciBCYXNlIEFkZHJlc3MgKi8NCisjZGVmaW5lIFJFTF9SRUdCQVNFX1BJTk1VWCAgICAgICgweDAwMDAwMDAwVSkgICAgICAgLyohPCBQSU5NVVggKi8NCisjZGVmaW5lIFJFTF9SRUdCQVNFX1NQSV9NU1RfQ1NfQ1RSTCAoMHgwMDAwMDAxNFUpICAgICAgIC8qITwgU1BJIE1hc3RlciBTZWxlY3QgQ3RybCAqLw0KKyNkZWZpbmUgUkVMX1JFR0JBU0VfR1BJTzAgICAgICAgKDB4MDAwMDIwMDBVKSAgICAgICAvKiE8IEdQSU8gMCBPbmJvYXJkICovDQorI2RlZmluZSBSRUxfUkVHQkFTRV9USU1FUlMgICAgICAoMHgwMDAwMzAwMFUpICAgICAgIC8qITwgRFcgVElNRVIgKi8NCisjZGVmaW5lIFJFTF9SRUdCQVNFX0kyQzAgICAgICAgICgweDAwMDA0MDAwVSkgICAgICAgLyohPCBJMkMgMCAqLw0KKyNkZWZpbmUgUkVMX1JFR0JBU0VfSTJDMSAgICAgICAgKDB4MDAwMDUwMDBVKSAgICAgICAvKiE8IEkyQyAxICovDQorI2RlZmluZSBSRUxfUkVHQkFTRV9TUEkwICAgICAgICAoMHgwMDAwNjAwMFUpICAgICAgIC8qITwgU1BJIE1hc3RlciAgKi8NCisjZGVmaW5lIFJFTF9SRUdCQVNFX1NQSTEgICAgICAgICgweDAwMDA3MDAwVSkgICAgICAgLyohPCBTUEkgU2xhdmUgICAqLw0KKyNkZWZpbmUgUkVMX1JFR0JBU0VfVUFSVDAgICAgICAgKDB4MDAwMDgwMDBVKSAgICAgICAvKiE8IFVBUlQwIGlzIGNvbm5lY3RlZCB0byBQTU9EICovDQorI2RlZmluZSBSRUxfUkVHQkFTRV9VQVJUMSAgICAgICAoMHgwMDAwOTAwMFUpICAgICAgIC8qITwgVUFSVDEgaXMgVVNCLVVBUlSjrCB1c2UgVUFSVDEgYXMgZGVmYXVsdCAqLw0KKyNkZWZpbmUgUkVMX1JFR0JBU0VfVUFSVDIgICAgICAgKDB4MDAwMEEwMDBVKSAgICAgICAvKiE8IFVBUlQyICovDQorI2RlZmluZSBSRUxfUkVHQkFTRV9XRFQgICAgICAgICAoMHgwMDAwQjAwMFUpICAgICAgIC8qITwgV0RUICAqLw0KKy8vICNkZWZpbmUgUkVMX1JFR0JBU0VfSTJTX01BU1RFUl9JTiAgICAoMHgwMDAwQzAwMFUpICAgICAgIC8qITwgSTJTIE1hc3RlciBJbiAgKi8NCisvLyAjZGVmaW5lIFJFTF9SRUdCQVNFX0kyU19NQVNURVJfT1VUICAgKDB4MDAwMEQwMDBVKSAgICAgICAvKiE8IEkyUyBNYXN0ZXIgT3V0ICAqLw0KKy8vICNkZWZpbmUgUkVMX1JFR0JBU0VfR01BQyAgICAgKDB4MDAwMEUwMDBVKSAgICAgICAvKiE8IEdNQUMgICovDQorDQorLyogSW50ZXJydXB0IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIElOVE5PX1RJTUVSMCAgICAgICAgICAgIDE2ICAgICAgICAgIC8qITwgQVJDIFRpbWVyMCAqLw0KKyNkZWZpbmUgSU5UTk9fVElNRVIxICAgICAgICAgICAgMTcgICAgICAgICAgLyohPCBBUkMgVGltZXIxICovDQorI2RlZmluZSBJTlROT19TRUNVUkVfVElNRVIwICAgICAyMCAgICAgICAgICAvKiE8IENvcmUgU2VjdXJlIFRpbWVyIDAgKi8NCisjZGVmaW5lIElOVE5PX0RNQV9TVEFSVCAgICAgICAgIDIyICAgICAgICAgIC8qITwgQ29yZSBETUEgQ29udHJvbGxlciAqLw0KKyNkZWZpbmUgSU5UTk9fRE1BX0NPTVBMRVRFICAgICAgMjIgICAgICAgICAgLyohPCBDb3JlIERNQSBDb250cm9sbGVyIENvbXBsZXRlICovDQorI2RlZmluZSBJTlROT19ETUFfRVJST1IgICAgICAgICAyMyAgICAgICAgICAvKiE8IENvcmUgRE1BIENvbnRyb2xsZXIgRXJyb3IgKi8NCisjZGVmaW5lIElOVE5PX0dQSU8gICAgICAgICAgMjQgICAgICAgICAgLyohPCBHUElPIGNvbnRyb2xsZXIgKi8NCisjZGVmaW5lIElOVE5PX0kyQzAgICAgICAgICAgMjUgICAgICAgICAgLyohPCBJMkNfMCBjb250cm9sbGVyICovDQorI2RlZmluZSBJTlROT19JMkMxICAgICAgICAgIDI2ICAgICAgICAgIC8qITwgSTJDXzEgY29udHJvbGxlciAqLw0KKyNkZWZpbmUgSU5UTk9fU1BJX01BU1RFUiAgICAgICAgMjcgICAgICAgICAgLyohPCBTUEkgTWFzdGVyIGNvbnRyb2xsZXIgKi8NCisjZGVmaW5lIElOVE5PX1NQSV9TTEFWRSAgICAgICAgIDI4ICAgICAgICAgIC8qITwgU1BJIFNsYXZlIGNvbnRyb2xsZXIgKi8NCisjZGVmaW5lIElOVE5PX1VBUlQwICAgICAgICAgMjkgICAgICAgICAgLyohPCBVQVJUMCAqLw0KKyNkZWZpbmUgSU5UTk9fVUFSVDEgICAgICAgICAzMCAgICAgICAgICAvKiE8IFVBUlQxICovDQorI2RlZmluZSBJTlROT19VQVJUMiAgICAgICAgIDMxICAgICAgICAgIC8qITwgVUFSVDIgKi8NCisjZGVmaW5lIElOVE5PX0RXX1dEVCAgICAgICAgICAgIDMyICAgICAgICAgIC8qITwgV0RUICovDQorI2RlZmluZSBJTlROT19EV19UTVIwICAgICAgICAgICAzMyAgICAgICAgICAvKiE8IERXIFRpbWVyIDAgKi8NCisjZGVmaW5lIElOVE5PX0RXX1RNUjEgICAgICAgICAgIDM0ICAgICAgICAgIC8qITwgRFcgVGltZXIgMSAqLw0KKy8vICNkZWZpbmUgSU5UTk9fSTJTX01hc3Rlcl9JbiAgICAgIDMzICAgICAgICAgIC8qITwgSTJTIE1hc3RlciBJbiAqLw0KKy8vICNkZWZpbmUgSU5UTk9fSTJTX01hc3Rlcl9PdXQgICAgIDM0ICAgICAgICAgIC8qITwgSTJTIE1hc3RlciBPdXQgKi8NCisvLyAjZGVmaW5lIElOVE5PX0dNQUMgICAgICAgICAgIDM1ICAgICAgICAgIC8qITwgR01BQyAqLw0KKw0KKy8qIFNQSSBNYXRlciBTaWduYWxzIFVzYWdlICovDQorI2RlZmluZSBFTVNLX1NQSV9MSU5FXzAgICAgICAgICAwICAgICAgICAgICAvKiE8IENTMCAtLSBQbW9kIDYgcGluMSAqLw0KKyNkZWZpbmUgRU1TS19TUElfTElORV8xICAgICAgICAgMSAgICAgICAgICAgLyohPCBDUzEgLS0gUG1vZCA1IHBpbjEgb3IgUG1vZCA2IHBpbiA3ICovDQorI2RlZmluZSBFTVNLX1NQSV9MSU5FXzIgICAgICAgICAyICAgICAgICAgICAvKiE8IENTMiAtLSBQbW9kIDYgcGluOCAqLw0KKyNkZWZpbmUgRU1TS19TUElfTElORV9TRENBUkQgICAgICAgIDMgICAgICAgICAgIC8qITwgQ1MzIC0tIE9uLWJvYXJkIFNEIGNhcmQgICovDQorI2RlZmluZSBFTVNLX1NQSV9MSU5FX1NQSVNMQVZFICAgICAgNCAgICAgICAgICAgLyohPCBDUzQgLS0gSW50ZXJuYWwgU1BJIHNsYXZlICovDQorI2RlZmluZSBFTVNLX1NQSV9MSU5FX1NGTEFTSCAgICAgICAgNSAgICAgICAgICAgLyohPCBDUzUgLS0gT24tYm9hcmQgU1BJIEZsYXNoIG1lbW9yeSAqLw0KKw0KKyNlbmRpZiAgLyogX0VNU0tfSEFSRFdBUkVfSF8gKi8NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfQ09NTU9OX0lOSVQgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9ncGlvL2R3X2dwaW9fb2JqLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9ncGlvL2R3X2dwaW9fb2JqLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2NmNmNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZHdfZ3Bpb19vYmouYwpAQCAtMCwwICsxLDM5NCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0yNA0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBCT0FSRF9FTVNLX0RSVl9EV19HUElPX09CSiAgRU1TSyBEVyBHUElPIE9iamVjdA0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJJVkVSDQorICogXGJyaWVmICAgRU1TSyBEZXNpZ253YXJlIEdQSU8gT2JqZWN0cw0KKyAqIFxkZXRhaWxzDQorICogICAgICBJbXBsZW1lbnQgdGhlIEVNU0sgYm9hcmQgR1BJTyBvYmplY3QgdXNpbmcgdGhlIERlc2lnbldhcmUgR1BJTyBkZXZpY2UgZHJpdmVyLg0KKyAqICBPbmx5IG5lZWQgdG8gaW1wbGVtZW50IHNvbWUgRGVzaWduV2FyZSBHUElPIHN0cnVjdHVyZXMgYW5kIGNvbWJpbmUgd2l0aCBFTVNLIEdQSU8NCisgKiAgaGFyZHdhcmUgcmVzb3VyY2VzLCBsaWtlIGluIEMrKyBjbGFzcyBpbnN0YW50aWF0aW9uLg0KKyAqICBGb3IgZXhhbXBsZSwgaW4gQysrLCBkZWZpbmUgYSBjbGFzcyBjYWxsZWQgZ3Bpbw0KKyAqICBjbGFzcyBncGlvIHsNCisgKg0KKyAqICB9Ow0KKyAqICB0aGVuIGluc3RhbnRpYXRlIHRoZSBncGlvIGNsYXNzOg0KKyAqICBncGlvIGVtc2tfZ3Bpb19hOw0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfRFdfR1BJT19PQkoNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIEdQSU8gb2JqZWN0IGluc3RhbnRpYXRpb24gb24gRU1TSw0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9EV19HUElPX09CSg0KKyAqIEB7DQorICovDQorI2luY2x1ZGUgImluYy9hcmMvYXJjLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2J1aWx0aW4uaCINCisNCisjaW5jbHVkZSAiYm9hcmQvZW1zay9ncGlvL2R3X2dwaW9fb2JqLmgiDQorDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svZW1zay5oIg0KKy8qDQorICogVW5jb21tZW50IHRoaXMgdG8gZW5hYmxlIGRlZmF1bHQNCisgKiBncGlvIGJpdCBoYW5kbGVyIG91dHB1dCBtZXNzYWdlDQorICogYnkgdWFydA0KKyAqLw0KKw0KKyNpZmRlZiBBUkNfRkVBVFVSRV9ETVBfUEVSSVBIRVJBTA0KKyNkZWZpbmUgUEVSSVBIRVJBTF9CQVNFICAgICBBUkNfRkVBVFVSRV9ETVBfUEVSSVBIRVJBTA0KKyNlbHNlDQorI2RlZmluZSBQRVJJUEhFUkFMX0JBU0UgICAgIF9hcmNfYXV4X3JlYWQoQVVYX0RNUF9QRVJJUEhFUkFMKQ0KKyNlbmRpZg0KKw0KKyNpZiAoVVNFX0RXX0dQSU9fUE9SVF9BKQ0KK3N0YXRpYyBERVZfR1BJTyAgICAgcG9ydF9hOw0KK3N0YXRpYyBEV19HUElPX1BPUlQgZHdfZ3Bpb19wb3J0X2E7DQorc3RhdGljIERFVl9HUElPX0hBTkRMRVIgZHdfZ3Bpb19iaXRfaGFuZGxlcl9hW0VNU0tfR1BJT19BX0lOVF9NQVhfQ09VTlRdOw0KK3N0YXRpYyBEV19HUElPX0JJVF9JU1IgZHdfZ3Bpb19iaXRfaXNyX2EgPQ0KK3sNCisgICAgRU1TS19HUElPX0FfSU5UX01BWF9DT1VOVCwgZHdfZ3Bpb19iaXRfaGFuZGxlcl9hDQorfTsNCisNCitzdGF0aWMgaW50MzJfdCBwb3J0YV9vcGVuKHVpbnQzMl90IGRpcikNCit7DQorICAgIHJldHVybiBkd19ncGlvX29wZW4oJnBvcnRfYSwgZGlyKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgcG9ydGFfY2xvc2Uodm9pZCkNCit7DQorICAgIHJldHVybiBkd19ncGlvX2Nsb3NlKCZwb3J0X2EpOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0YV9jb250cm9sKHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSkNCit7DQorICAgIHJldHVybiBkd19ncGlvX2NvbnRyb2woJnBvcnRfYSwgY3RybF9jbWQsIHBhcmFtKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgcG9ydGFfd3JpdGUodWludDMyX3QgdmFsLCB1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fd3JpdGUoJnBvcnRfYSwgdmFsLCBtYXNrKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgcG9ydGFfcmVhZCh1aW50MzJfdCAqdmFsLCB1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fcmVhZCgmcG9ydF9hLCB2YWwsIG1hc2spOw0KK30NCisNCitzdGF0aWMgdm9pZCBwb3J0YV9pc3Iodm9pZCAqcHRyKQ0KK3sNCisgICAgZHdfZ3Bpb19pc3JfaGFuZGxlcigmcG9ydF9hLCBwdHIpOw0KK30NCisNCitzdGF0aWMgdm9pZCBwb3J0YV9pbnN0YWxsKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCBpOw0KKyAgICBERVZfR1BJT19QVFIgcG9ydF9wdHIgPSAmcG9ydF9hOw0KKyAgICBERVZfR1BJT19JTkZPX1BUUiBpbmZvX3B0ciA9ICYocG9ydF9hLmdwaW9faW5mbyk7DQorICAgIERXX0dQSU9fUE9SVF9QVFIgZHdfcG9ydF9wdHIgPSAmKGR3X2dwaW9fcG9ydF9hKTsNCisNCisgICAgaW5mb19wdHItPmdwaW9fY3RybCA9ICh2b2lkICopZHdfcG9ydF9wdHI7DQorICAgIGluZm9fcHRyLT5vcG5fY250ID0gMDsNCisgICAgaW5mb19wdHItPm1ldGhvZCA9IDA7DQorICAgIGluZm9fcHRyLT5kaXJlY3Rpb24gPSAwOw0KKyAgICBpbmZvX3B0ci0+ZXh0cmEgPSAwOw0KKw0KKyAgICBkd19wb3J0X3B0ci0+bm8gPSBEV19HUElPX1BPUlRfQTsNCisgICAgZHdfcG9ydF9wdHItPnJlZ3MgPSAoRFdfR1BJT19SRUdfUFRSKShQRVJJUEhFUkFMX0JBU0UgfCBSRUxfUkVHQkFTRV9HUElPMCk7DQorICAgIGR3X3BvcnRfcHRyLT52YWxpZF9iaXRfbWFzayA9IEVNU0tfR1BJT19BX1ZBTElEX01BU0s7DQorICAgIGR3X3BvcnRfcHRyLT5pbnRubyA9IElOVE5PX0dQSU87DQorICAgIGR3X3BvcnRfcHRyLT5pbnRfaGFuZGxlciA9IHBvcnRhX2lzcjsNCisNCisgICAgZm9yIChpID0gMDsgaSA8IGR3X2dwaW9fYml0X2lzcl9hLmludF9iaXRfbWF4X2NudDsgaSsrKQ0KKyAgICB7DQorICAgICAgICBkd19ncGlvX2JpdF9pc3JfYS5pbnRfYml0X2hhbmRsZXJfcHRyW2ldID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBkd19wb3J0X3B0ci0+Z3Bpb19iaXRfaXNyID0gJmR3X2dwaW9fYml0X2lzcl9hOw0KKw0KKyAgICBwb3J0X3B0ci0+Z3Bpb19vcGVuID0gcG9ydGFfb3BlbjsNCisgICAgcG9ydF9wdHItPmdwaW9fY2xvc2UgPSBwb3J0YV9jbG9zZTsNCisgICAgcG9ydF9wdHItPmdwaW9fY29udHJvbCA9IHBvcnRhX2NvbnRyb2w7DQorICAgIHBvcnRfcHRyLT5ncGlvX3dyaXRlID0gcG9ydGFfd3JpdGU7DQorICAgIHBvcnRfcHRyLT5ncGlvX3JlYWQgPSBwb3J0YV9yZWFkOw0KK30NCisjZW5kaWYNCisNCisjaWYgKFVTRV9EV19HUElPX1BPUlRfQikNCitzdGF0aWMgREVWX0dQSU8gICAgIHBvcnRfYjsNCitzdGF0aWMgRFdfR1BJT19QT1JUIGR3X2dwaW9fcG9ydF9iOw0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRiX29wZW4odWludDMyX3QgZGlyKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fb3BlbigmcG9ydF9iLCBkaXIpOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0Yl9jbG9zZSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fY2xvc2UoJnBvcnRfYik7DQorfQ0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRiX2NvbnRyb2wodWludDMyX3QgY3RybF9jbWQsIHZvaWQgKnBhcmFtKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fY29udHJvbCgmcG9ydF9iLCBjdHJsX2NtZCwgcGFyYW0pOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0Yl93cml0ZSh1aW50MzJfdCB2YWwsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb193cml0ZSgmcG9ydF9iLCB2YWwsIG1hc2spOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0Yl9yZWFkKHVpbnQzMl90ICp2YWwsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb19yZWFkKCZwb3J0X2IsIHZhbCwgbWFzayk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHBvcnRiX2lzcih2b2lkICpwdHIpDQorew0KKyAgICBkd19ncGlvX2lzcl9oYW5kbGVyKCZwb3J0X2IsIHB0cik7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHBvcnRiX2luc3RhbGwodm9pZCkNCit7DQorICAgIERFVl9HUElPX1BUUiBwb3J0X3B0ciA9ICZwb3J0X2I7DQorICAgIERFVl9HUElPX0lORk9fUFRSIGluZm9fcHRyID0gJihwb3J0X2IuZ3Bpb19pbmZvKTsNCisgICAgRFdfR1BJT19QT1JUX1BUUiBkd19wb3J0X3B0ciA9ICYoZHdfZ3Bpb19wb3J0X2IpOw0KKw0KKyAgICBpbmZvX3B0ci0+Z3Bpb19jdHJsID0gKHZvaWQgKilkd19wb3J0X3B0cjsNCisgICAgaW5mb19wdHItPm9wbl9jbnQgPSAwOw0KKyAgICBpbmZvX3B0ci0+bWV0aG9kID0gMDsNCisgICAgaW5mb19wdHItPmRpcmVjdGlvbiA9IDA7DQorICAgIGluZm9fcHRyLT5leHRyYSA9IDA7DQorDQorICAgIGR3X3BvcnRfcHRyLT5ubyA9IERXX0dQSU9fUE9SVF9COw0KKyAgICBkd19wb3J0X3B0ci0+cmVncyA9IChEV19HUElPX1JFR19QVFIpKFBFUklQSEVSQUxfQkFTRSB8IFJFTF9SRUdCQVNFX0dQSU8wKTsNCisgICAgZHdfcG9ydF9wdHItPnZhbGlkX2JpdF9tYXNrID0gRU1TS19HUElPX0JfVkFMSURfTUFTSzsNCisNCisgICAgZHdfcG9ydF9wdHItPmludG5vID0gSU5UTk9fR1BJTzsNCisgICAgZHdfcG9ydF9wdHItPmludF9oYW5kbGVyID0gcG9ydGJfaXNyOw0KKyAgICBkd19wb3J0X3B0ci0+Z3Bpb19iaXRfaXNyID0gTlVMTDsNCisNCisgICAgcG9ydF9wdHItPmdwaW9fb3BlbiA9IHBvcnRiX29wZW47DQorICAgIHBvcnRfcHRyLT5ncGlvX2Nsb3NlID0gcG9ydGJfY2xvc2U7DQorICAgIHBvcnRfcHRyLT5ncGlvX2NvbnRyb2wgPSBwb3J0Yl9jb250cm9sOw0KKyAgICBwb3J0X3B0ci0+Z3Bpb193cml0ZSA9IHBvcnRiX3dyaXRlOw0KKyAgICBwb3J0X3B0ci0+Z3Bpb19yZWFkID0gcG9ydGJfcmVhZDsNCit9DQorI2VuZGlmDQorDQorDQorI2lmIChVU0VfRFdfR1BJT19QT1JUX0MpDQorc3RhdGljIERFVl9HUElPICAgICBwb3J0X2M7DQorc3RhdGljIERXX0dQSU9fUE9SVCBkd19ncGlvX3BvcnRfYzsNCisNCitzdGF0aWMgaW50MzJfdCBwb3J0Y19vcGVuKHVpbnQzMl90IGRpcikNCit7DQorICAgIHJldHVybiBkd19ncGlvX29wZW4oJnBvcnRfYywgZGlyKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgcG9ydGNfY2xvc2Uodm9pZCkNCit7DQorICAgIHJldHVybiBkd19ncGlvX2Nsb3NlKCZwb3J0X2MpOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0Y19jb250cm9sKHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSkNCit7DQorICAgIHJldHVybiBkd19ncGlvX2NvbnRyb2woJnBvcnRfYywgY3RybF9jbWQsIHBhcmFtKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgcG9ydGNfd3JpdGUodWludDMyX3QgdmFsLCB1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fd3JpdGUoJnBvcnRfYywgdmFsLCBtYXNrKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgcG9ydGNfcmVhZCh1aW50MzJfdCAqdmFsLCB1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fcmVhZCgmcG9ydF9jLCB2YWwsIG1hc2spOw0KK30NCisNCitzdGF0aWMgdm9pZCBwb3J0Y19pc3Iodm9pZCAqcHRyKQ0KK3sNCisgICAgZHdfZ3Bpb19pc3JfaGFuZGxlcigmcG9ydF9jLCBwdHIpOw0KK30NCisNCitzdGF0aWMgdm9pZCBwb3J0Y19pbnN0YWxsKHZvaWQpDQorew0KKyAgICBERVZfR1BJT19QVFIgcG9ydF9wdHIgPSAmcG9ydF9jOw0KKyAgICBERVZfR1BJT19JTkZPX1BUUiBpbmZvX3B0ciA9ICYocG9ydF9jLmdwaW9faW5mbyk7DQorICAgIERXX0dQSU9fUE9SVF9QVFIgZHdfcG9ydF9wdHIgPSAmKGR3X2dwaW9fcG9ydF9jKTsNCisNCisgICAgaW5mb19wdHItPmdwaW9fY3RybCA9ICh2b2lkICopZHdfcG9ydF9wdHI7DQorICAgIGluZm9fcHRyLT5vcG5fY250ID0gMDsNCisgICAgaW5mb19wdHItPm1ldGhvZCA9IDA7DQorICAgIGluZm9fcHRyLT5kaXJlY3Rpb24gPSAwOw0KKyAgICBpbmZvX3B0ci0+ZXh0cmEgPSAwOw0KKw0KKyAgICBkd19wb3J0X3B0ci0+bm8gPSBEV19HUElPX1BPUlRfQzsNCisgICAgZHdfcG9ydF9wdHItPnJlZ3MgPSAoRFdfR1BJT19SRUdfUFRSKShQRVJJUEhFUkFMX0JBU0UgfCBSRUxfUkVHQkFTRV9HUElPMCk7DQorICAgIGR3X3BvcnRfcHRyLT52YWxpZF9iaXRfbWFzayA9IEVNU0tfR1BJT19DX1ZBTElEX01BU0s7DQorDQorICAgIGR3X3BvcnRfcHRyLT5pbnRubyA9IElOVE5PX0dQSU87DQorICAgIGR3X3BvcnRfcHRyLT5pbnRfaGFuZGxlciA9IHBvcnRjX2lzcjsNCisgICAgZHdfcG9ydF9wdHItPmdwaW9fYml0X2lzciA9IE5VTEw7DQorDQorICAgIHBvcnRfcHRyLT5ncGlvX29wZW4gPSBwb3J0Y19vcGVuOw0KKyAgICBwb3J0X3B0ci0+Z3Bpb19jbG9zZSA9IHBvcnRjX2Nsb3NlOw0KKyAgICBwb3J0X3B0ci0+Z3Bpb19jb250cm9sID0gcG9ydGNfY29udHJvbDsNCisgICAgcG9ydF9wdHItPmdwaW9fd3JpdGUgPSBwb3J0Y193cml0ZTsNCisgICAgcG9ydF9wdHItPmdwaW9fcmVhZCA9IHBvcnRjX3JlYWQ7DQorfQ0KKyNlbmRpZg0KKw0KKyNpZiAoVVNFX0RXX0dQSU9fUE9SVF9EKQ0KK3N0YXRpYyBERVZfR1BJTyAgICAgcG9ydF9kOw0KK3N0YXRpYyBEV19HUElPX1BPUlQgZHdfZ3Bpb19wb3J0X2Q7DQorDQorc3RhdGljIGludDMyX3QgcG9ydGRfb3Blbih1aW50MzJfdCBkaXIpDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb19vcGVuKCZwb3J0X2QsIGRpcik7DQorfQ0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRkX2Nsb3NlKHZvaWQpDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb19jbG9zZSgmcG9ydF9kKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgcG9ydGRfY29udHJvbCh1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb19jb250cm9sKCZwb3J0X2QsIGN0cmxfY21kLCBwYXJhbSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRkX3dyaXRlKHVpbnQzMl90IHZhbCwgdWludDMyX3QgbWFzaykNCit7DQorICAgIHJldHVybiBkd19ncGlvX3dyaXRlKCZwb3J0X2QsIHZhbCwgbWFzayk7DQorfQ0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRkX3JlYWQodWludDMyX3QgKnZhbCwgdWludDMyX3QgbWFzaykNCit7DQorICAgIHJldHVybiBkd19ncGlvX3JlYWQoJnBvcnRfZCwgdmFsLCBtYXNrKTsNCit9DQorDQorc3RhdGljIHZvaWQgcG9ydGRfaXNyKHZvaWQgKnB0cikNCit7DQorICAgIGR3X2dwaW9faXNyX2hhbmRsZXIoJnBvcnRfZCwgcHRyKTsNCit9DQorDQorc3RhdGljIHZvaWQgcG9ydGRfaW5zdGFsbCh2b2lkKQ0KK3sNCisgICAgREVWX0dQSU9fUFRSIHBvcnRfcHRyID0gJnBvcnRfZDsNCisgICAgREVWX0dQSU9fSU5GT19QVFIgaW5mb19wdHIgPSAmKHBvcnRfZC5ncGlvX2luZm8pOw0KKyAgICBEV19HUElPX1BPUlRfUFRSIGR3X3BvcnRfcHRyID0gJihkd19ncGlvX3BvcnRfZCk7DQorDQorICAgIGluZm9fcHRyLT5ncGlvX2N0cmwgPSAodm9pZCAqKWR3X3BvcnRfcHRyOw0KKyAgICBpbmZvX3B0ci0+b3BuX2NudCA9IDA7DQorICAgIGluZm9fcHRyLT5tZXRob2QgPSAwOw0KKyAgICBpbmZvX3B0ci0+ZGlyZWN0aW9uID0gMDsNCisgICAgaW5mb19wdHItPmV4dHJhID0gMDsNCisNCisgICAgZHdfcG9ydF9wdHItPm5vID0gRFdfR1BJT19QT1JUX0Q7DQorICAgIGR3X3BvcnRfcHRyLT5yZWdzID0gKERXX0dQSU9fUkVHX1BUUikoUEVSSVBIRVJBTF9CQVNFIHwgUkVMX1JFR0JBU0VfR1BJTzApOw0KKyAgICBkd19wb3J0X3B0ci0+dmFsaWRfYml0X21hc2sgPSBFTVNLX0dQSU9fRF9WQUxJRF9NQVNLOw0KKw0KKyAgICBkd19wb3J0X3B0ci0+aW50bm8gPSBJTlROT19HUElPOw0KKyAgICBkd19wb3J0X3B0ci0+aW50X2hhbmRsZXIgPSBwb3J0ZF9pc3I7DQorICAgIGR3X3BvcnRfcHRyLT5ncGlvX2JpdF9pc3IgPSBOVUxMOw0KKw0KKyAgICBwb3J0X3B0ci0+Z3Bpb19vcGVuID0gcG9ydGRfb3BlbjsNCisgICAgcG9ydF9wdHItPmdwaW9fY2xvc2UgPSBwb3J0ZF9jbG9zZTsNCisgICAgcG9ydF9wdHItPmdwaW9fY29udHJvbCA9IHBvcnRkX2NvbnRyb2w7DQorICAgIHBvcnRfcHRyLT5ncGlvX3dyaXRlID0gcG9ydGRfd3JpdGU7DQorICAgIHBvcnRfcHRyLT5ncGlvX3JlYWQgPSBwb3J0ZF9yZWFkOw0KK30NCisjZW5kaWYNCisNCitERVZfR1BJT19QVFIgZ3Bpb19nZXRfZGV2KGludDMyX3QgZ3Bpb19pZCkNCit7DQorICAgIHN0YXRpYyB1aW50MzJfdCBpbnN0YWxsX2ZsYWcgPSAwOw0KKw0KKyAgICAvKiBpbnRhbGwgZGV2aWNlIG9iamVjdHMgKi8NCisgICAgaWYgKGluc3RhbGxfZmxhZyA9PSAwKQ0KKyAgICB7DQorICAgICAgICBpbnN0YWxsX2ZsYWcgPSAxOw0KKyAgICAgICAgZHdfZ3Bpb19hbGxfaW5zdGFsbCgpOw0KKyAgICB9DQorDQorICAgIHN3aXRjaCAoZ3Bpb19pZCkNCisgICAgew0KKyNpZiAoVVNFX0RXX0dQSU9fUE9SVF9BKQ0KKw0KKyAgICBjYXNlIERXX0dQSU9fUE9SVF9BOg0KKyAgICAgICAgcmV0dXJuICZwb3J0X2E7DQorI2VuZGlmDQorI2lmIChVU0VfRFdfR1BJT19QT1JUX0IpDQorDQorICAgIGNhc2UgRFdfR1BJT19QT1JUX0I6DQorICAgICAgICByZXR1cm4gJnBvcnRfYjsNCisjZW5kaWYNCisjaWYgKFVTRV9EV19HUElPX1BPUlRfQykNCisNCisgICAgY2FzZSBEV19HUElPX1BPUlRfQzoNCisgICAgICAgIHJldHVybiAmcG9ydF9jOw0KKyNlbmRpZg0KKyNpZiAoVVNFX0RXX0dQSU9fUE9SVF9EKQ0KKw0KKyAgICBjYXNlIERXX0dQSU9fUE9SVF9EOg0KKyAgICAgICAgcmV0dXJuICZwb3J0X2Q7DQorI2VuZGlmDQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gTlVMTDsNCit9DQorDQordm9pZCBkd19ncGlvX2FsbF9pbnN0YWxsKHZvaWQpDQorew0KKyNpZiAoVVNFX0RXX0dQSU9fUE9SVF9BKQ0KKyAgICBwb3J0YV9pbnN0YWxsKCk7DQorI2VuZGlmDQorI2lmIChVU0VfRFdfR1BJT19QT1JUX0IpDQorICAgIHBvcnRiX2luc3RhbGwoKTsNCisjZW5kaWYNCisjaWYgKFVTRV9EV19HUElPX1BPUlRfQykNCisgICAgcG9ydGNfaW5zdGFsbCgpOw0KKyNlbmRpZg0KKyNpZiAoVVNFX0RXX0dQSU9fUE9SVF9EKQ0KKyAgICBwb3J0ZF9pbnN0YWxsKCk7DQorI2VuZGlmDQorfQ0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19EUlZfRFdfR1BJT19PQkogKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9ncGlvL2R3X2dwaW9fb2JqLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9ncGlvL2R3X2dwaW9fb2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3YzRhZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZHdfZ3Bpb19vYmouaApAQCAtMCwwICsxLDkwIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTI0DQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9EV19HUElPX09CSg0KKyAqIFxicmllZiAgIGhlYWRlciBmaWxlIG9mIGRlc2lnbndhcmUgZ3BpbyBvYmplY3QgaW5zdGFudGlhdGlvbiBvbiBlbXNrDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgIEJPQVJEX0VNU0tfRFJWX0RXX0dQSU9fT0JKDQorICogQHsNCisgKi8NCisjaWZuZGVmIF9EV19HUElPX09CSl9IXw0KKyNkZWZpbmUgX0RXX0dQSU9fT0JKX0hfDQorDQorI2luY2x1ZGUgImRldmljZS9kZXNpZ253YXJlL2dwaW8vZHdfZ3Bpby5oIg0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbndhcmUgR1BJTyBQb3J0IEJhbmsgQ29udHJvbCBNYWNyb3MNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgVVNFX0RXX0dQSU9fUE9SVF9BICAgICAgMQ0KKyNkZWZpbmUgVVNFX0RXX0dQSU9fUE9SVF9CICAgICAgMQ0KKyNkZWZpbmUgVVNFX0RXX0dQSU9fUE9SVF9DICAgICAgMQ0KKyNkZWZpbmUgVVNFX0RXX0dQSU9fUE9SVF9EICAgICAgMQ0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbndhcmUgR1BJTyBQb3J0IEludGVycnVwdCBBdmFpbGFibGUgTnVtYmVyIE1hY3Jvcw0KKyAqIEB7DQorICovDQorI2RlZmluZSBFTVNLX0dQSU9fQV9JTlRfTUFYX0NPVU5UICAgMzINCisjZGVmaW5lIEVNU0tfR1BJT19CX0lOVF9NQVhfQ09VTlQgICAwDQorI2RlZmluZSBFTVNLX0dQSU9fQ19JTlRfTUFYX0NPVU5UICAgMA0KKyNkZWZpbmUgRU1TS19HUElPX0RfSU5UX01BWF9DT1VOVCAgIDANCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ253YXJlIEdQSU8gUG9ydCBBdmFpbGFibGUgQml0cyBNYWNyb3MNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgRU1TS19HUElPX0FfVkFMSURfTUFTSyAgICAgIERXX0dQSU9fTUFTS19BTEwNCisjZGVmaW5lIEVNU0tfR1BJT19CX1ZBTElEX01BU0sgICAgICBEV19HUElPX01BU0tfQUxMDQorI2RlZmluZSBFTVNLX0dQSU9fQ19WQUxJRF9NQVNLICAgICAgRFdfR1BJT19NQVNLX0FMTA0KKyNkZWZpbmUgRU1TS19HUElPX0RfVkFMSURfTUFTSyAgICAgIERXX0dQSU9fTUFTS19BTEwNCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCitleHRlcm4gdm9pZCBkd19ncGlvX2FsbF9pbnN0YWxsKHZvaWQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0RXX0dQSU9fT0JKX0hfKi8NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX0RXX0dQSU9fT0JKICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9lbXNrX2dwaW8uYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZW1za19ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EzZTUxMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZW1za19ncGlvLmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMzENCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvKioNCisgKiBcZGVmZ3JvdXAgICAgQk9BUkRfRU1TS19EUlZfR1BJTyBFTVNLIEdQSU8gRHJpdmVyDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUklWRVINCisgKiBcYnJpZWYgICBFTVNLIE9uYm9hcmQgR1BJTyBQZXJpcGhlcmFscyBEcml2ZXINCisgKiBcZGV0YWlscw0KKyAqICAgICAgSW1wbGVtZW50YXRpb24gb2YgRU1TSyBvbi1ib2FyZCBidXR0b24sIGxlZCwgZGlwIHN3aXRjaCBkcml2ZXIsDQorICogIHRoaXMgaXMgZm9yIGJldHRlciB1c2UsIHlvdSBkb24ndCBoYXZlIHRvIGdldCBhIGdwaW8gb2JqZWN0IGJlZm9yZSBvcGVyYXRpbmcNCisgKiAgbGVkLGJ1dHRvbixzd2l0Y2gsIGJlY2F1c2Ugc29tZSBiYXNpYyBmdW5jdGlvbnMgZm9yIHVzYWdlIGFyZSBwcm92aWRlZC4NCisgKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJWX0dQSU8NCisgKiBcYnJpZWYgICBhbGwgb24gZW1zayBib2FyZCBncGlvIGRldmljZSBpbml0IGFuZCBvcGVyYXRlIGZ1bmN0aW9ucw0KKyAqIFxkZXRhaWxzIHRoaXMgZ3BpbyBkZXZpY2VzIGFyZSBidXR0b24sIGxlZCwgZGlwIHN3aXRjaA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9HUElPDQorICogQHsNCisgKi8NCisjaW5jbHVkZSAiaW5jL2FyYy9hcmMuaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfYnVpbHRpbi5oIg0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX3Rvb2xjaGFpbi5oIg0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX2Vycm9yLmgiDQorDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svZ3Bpby9lbXNrX2dwaW8uaCINCisjaW5jbHVkZSAiYm9hcmQvZW1zay9lbXNrLmgiDQorDQorc3RhdGljIERFVl9HUElPICpsZWRfcG9ydDsNCitzdGF0aWMgREVWX0dQSU8gKmJ1dHRvbl9wb3J0Ow0KK3N0YXRpYyBERVZfR1BJTyAqc3dpdGNoX3BvcnQ7DQorDQorI2RlZmluZSBFTVNLX0dQSU9fQ0hFQ0tfRVhQX05PUlROKEVYUFIpICAgICBDSEVDS19FWFBfTk9FUkNEKEVYUFIsIGVycm9yX2V4aXQpDQorDQorLyoqIGVtc2sgb24gYm9hcmQgZ3BpbyBpbml0ICovDQordm9pZCBlbXNrX2dwaW9faW5pdCh2b2lkKQ0KK3sNCisgICAgZW1za19sZWRfaW5pdCgpOw0KKyAgICBlbXNrX2J1dHRvbl9pbml0KCk7DQorICAgIGVtc2tfc3dpdGNoX2luaXQoKTsNCit9DQorDQorLyoqIGVtc2sgb24tYm9hcmQgbGVkIGluaXQsIGxlZCBkZWZhdWx0IG9mZiAqLw0KK3ZvaWQgZW1za19sZWRfaW5pdCh2b2lkKQ0KK3sNCisgICAgbGVkX3BvcnQgPSBncGlvX2dldF9kZXYoRU1TS19MRURfUE9SVCk7DQorDQorICAgIEVNU0tfR1BJT19DSEVDS19FWFBfTk9SVE4obGVkX3BvcnQgIT0gTlVMTCk7DQorDQorICAgIGlmIChsZWRfcG9ydC0+Z3Bpb19vcGVuKEVNU0tfTEVEX0RJUikgPT0gRV9PUE5FRCkNCisgICAgew0KKyAgICAgICAgbGVkX3BvcnQtPmdwaW9fY29udHJvbChHUElPX0NNRF9TRVRfQklUX0RJUl9PVVRQVVQsICh2b2lkICopKEVNU0tfTEVEX01BU0spKTsNCisgICAgICAgIGxlZF9wb3J0LT5ncGlvX2NvbnRyb2woR1BJT19DTURfRElTX0JJVF9JTlQsICh2b2lkICopKEVNU0tfTEVEX01BU0spKTsNCisgICAgfQ0KKw0KKyAgICBsZWRfd3JpdGUoMCwgQk9BUkRfTEVEX01BU0spOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybjsNCit9DQorDQorLyoqIGVtc2sgb24tYm9hcmQgYnV0dG9uIGluaXQgKi8NCit2b2lkIGVtc2tfYnV0dG9uX2luaXQodm9pZCkNCit7DQorICAgIGJ1dHRvbl9wb3J0ID0gZ3Bpb19nZXRfZGV2KEVNU0tfQlVUVE9OX1BPUlQpOw0KKw0KKyAgICBFTVNLX0dQSU9fQ0hFQ0tfRVhQX05PUlROKGJ1dHRvbl9wb3J0ICE9IE5VTEwpOw0KKw0KKyAgICBpZiAoYnV0dG9uX3BvcnQtPmdwaW9fb3BlbihFTVNLX0JVVFRPTl9ESVIpID09IEVfT1BORUQpDQorICAgIHsNCisgICAgICAgIGJ1dHRvbl9wb3J0LT5ncGlvX2NvbnRyb2woR1BJT19DTURfU0VUX0JJVF9ESVJfSU5QVVQsICh2b2lkICopKEVNU0tfQlVUVE9OX01BU0spKTsNCisgICAgICAgIGJ1dHRvbl9wb3J0LT5ncGlvX2NvbnRyb2woR1BJT19DTURfRElTX0JJVF9JTlQsICh2b2lkICopKEVNU0tfQlVUVE9OX01BU0spKTsNCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybjsNCit9DQorDQorLyoqIGVtc2sgb24tYm9hcmQgc3dpdGNoIGluaXQgKi8NCit2b2lkIGVtc2tfc3dpdGNoX2luaXQodm9pZCkNCit7DQorICAgIHN3aXRjaF9wb3J0ID0gZ3Bpb19nZXRfZGV2KEVNU0tfU1dJVENIX1BPUlQpOw0KKw0KKyAgICBFTVNLX0dQSU9fQ0hFQ0tfRVhQX05PUlROKHN3aXRjaF9wb3J0ICE9IE5VTEwpOw0KKw0KKyAgICBpZiAoc3dpdGNoX3BvcnQtPmdwaW9fb3BlbihFTVNLX1NXSVRDSF9ESVIpID09IEVfT1BORUQpDQorICAgIHsNCisgICAgICAgIHN3aXRjaF9wb3J0LT5ncGlvX2NvbnRyb2woR1BJT19DTURfU0VUX0JJVF9ESVJfSU5QVVQsICh2b2lkICopKEVNU0tfU1dJVENIX01BU0spKTsNCisgICAgICAgIHN3aXRjaF9wb3J0LT5ncGlvX2NvbnRyb2woR1BJT19DTURfRElTX0JJVF9JTlQsICh2b2lkICopKEVNU0tfU1dJVENIX01BU0spKTsNCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybjsNCit9DQorDQorLyoqDQorICogd29ya2Fyb3VuZCBmb3IgZ2V0IGxlZCB2YWx1ZQ0KKyAqIGJlY2F1c2UgZ3BpbyByZWFkIHJldHVybiBpcyBub3QgcmlnaHQNCisgKi8NCitzdGF0aWMgdWludDMyX3QgZ19sZWRfdmFsOw0KKy8qKiB3cml0ZSAxIHRvIGxpZ2h0IG9uIGxlZCBiaXQsIGVsc2UgbGlnaHQgb2ZmIGxlZCAqLw0KK3ZvaWQgbGVkX3dyaXRlKHVpbnQzMl90IGxlZF92YWwsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICBFTVNLX0dQSU9fQ0hFQ0tfRVhQX05PUlROKGxlZF9wb3J0ICE9IE5VTEwpOw0KKw0KKyAgICBsZWRfdmFsID0gKH5sZWRfdmFsKSAmIG1hc2s7DQorICAgIGxlZF92YWwgPSBsZWRfdmFsIDw8IEVNU0tfTEVEX09GRlNFVDsNCisgICAgbWFzayA9IChtYXNrIDw8IEVNU0tfTEVEX09GRlNFVCkgJiBFTVNLX0xFRF9NQVNLOw0KKyAgICBsZWRfcG9ydC0+Z3Bpb193cml0ZShsZWRfdmFsLCBtYXNrKTsNCisNCisgICAgZ19sZWRfdmFsID0gbGVkX3ZhbDsNCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm47DQorfQ0KKw0KKy8qKiByZWFkIGxlZCB2YWx1ZSwgb24gZm9yIDEsIG9mZiBmb3IgMCAqLw0KKy8qKiBcdG9kbyBuZWVkIHRvIGZpbmQgd2h5IHdoZW4gbGVkIHNldCB0byBvdXRwdXQgdGhlbiBjYW4ndCBnZXQgdGhlIHJpZ2h0IHZhbHVlIG9mIGxlZCAqLw0KK3VpbnQzMl90IGxlZF9yZWFkKHVpbnQzMl90IG1hc2spDQorew0KKyAgICB1aW50MzJfdCB2YWx1ZTsNCisNCisgICAgRU1TS19HUElPX0NIRUNLX0VYUF9OT1JUTihsZWRfcG9ydCAhPSBOVUxMKTsNCisNCisgICAgbWFzayA9IChtYXNrIDw8IEVNU0tfTEVEX09GRlNFVCkgJiBFTVNLX0xFRF9NQVNLOw0KKyAgICBsZWRfcG9ydC0+Z3Bpb19yZWFkKCZ2YWx1ZSwgbWFzayk7DQorICAgIHZhbHVlID0gKH52YWx1ZSkgJiBFTVNLX0xFRF9NQVNLOw0KKw0KKyAgICByZXR1cm4gKHZhbHVlID4+IEVNU0tfTEVEX09GRlNFVCk7DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKiBQdWxsIGRvd24gc3dpdGNoIHJldHVybiAxLCBlbHNlIDAgKi8NCit1aW50MzJfdCBzd2l0Y2hfcmVhZCh1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgdWludDMyX3QgdmFsdWU7DQorDQorICAgIEVNU0tfR1BJT19DSEVDS19FWFBfTk9SVE4oc3dpdGNoX3BvcnQgIT0gTlVMTCk7DQorDQorICAgIG1hc2sgPSAobWFzayA8PCBFTVNLX1NXSVRDSF9PRkZTRVQpICYgRU1TS19TV0lUQ0hfTUFTSzsNCisgICAgc3dpdGNoX3BvcnQtPmdwaW9fcmVhZCgmdmFsdWUsIG1hc2spOw0KKyAgICB2YWx1ZSA9ICh+dmFsdWUpICYgbWFzazsNCisNCisgICAgcmV0dXJuICh2YWx1ZSA+PiBFTVNLX1NXSVRDSF9PRkZTRVQpOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiogUHJlc3MgZG93biBiaXQgc2V0IHRvIDEgZWxzZSAwICovDQordWludDMyX3QgYnV0dG9uX3JlYWQodWludDMyX3QgbWFzaykNCit7DQorICAgIHVpbnQzMl90IHZhbHVlOw0KKw0KKyAgICBFTVNLX0dQSU9fQ0hFQ0tfRVhQX05PUlROKGJ1dHRvbl9wb3J0ICE9IE5VTEwpOw0KKw0KKyAgICBtYXNrID0gKG1hc2sgPDwgRU1TS19CVVRUT05fT0ZGU0VUKSAmIEVNU0tfQlVUVE9OX01BU0s7DQorICAgIGJ1dHRvbl9wb3J0LT5ncGlvX3JlYWQoJnZhbHVlLCBtYXNrKTsNCisgICAgdmFsdWUgPSAofnZhbHVlKSAmIG1hc2s7DQorDQorICAgIHJldHVybiAodmFsdWUgPj4gRU1TS19CVVRUT05fT0ZGU0VUKTsNCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0RSVl9HUElPICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9lbXNrX2dwaW8uaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZW1za19ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U0NDI3OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZW1za19ncGlvLmgKQEAgLTAsMCArMSw5NiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0zMQ0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfR1BJTw0KKyAqIFxicmllZiAgIGVtc2sgYm9hcmQgZ3BpbyByZWxhdGVkIGZ1bmN0aW9ucyBoZWFkZXINCisgKi8NCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfR1BJTw0KKyAqIEB7DQorICovDQorI2lmbmRlZiBfRU1TS19HUElPX0hfDQorI2RlZmluZSBfRU1TS19HUElPX0hfDQorDQorI2luY2x1ZGUgImRldmljZS9kZXNpZ253YXJlL2dwaW8vZHdfZ3Bpby5oIg0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIEVNU0sgTEVEIFBvcnQgQ29uZmlndXJhdGlvbg0KKyAqIEB7DQorICovDQorI2RlZmluZSBFTVNLX0xFRF9PRkZTRVQgICAgICgwKQ0KKyNkZWZpbmUgRU1TS19MRURfTUFTSyAgICAgICAoKDB4MWZmKSA8PCBFTVNLX0xFRF9PRkZTRVQpDQorI2RlZmluZSBFTVNLX0xFRF9QT1JUICAgICAgIChEV19HUElPX1BPUlRfQikNCisjZGVmaW5lIEVNU0tfTEVEX0RJUiAgICAgICAgKCgweDFmZikgPDwgRU1TS19MRURfT0ZGU0VUKQ0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIEVNU0sgU3dpdGNoIFBvcnQgQ29uZmlndXJhdGlvbg0KKyAqIEB7DQorICovDQorI2RlZmluZSBFTVNLX1NXSVRDSF9PRkZTRVQgICgwKQ0KKyNkZWZpbmUgRU1TS19TV0lUQ0hfTUFTSyAgICAoKDB4ZikgPDwgRU1TS19TV0lUQ0hfT0ZGU0VUKQ0KKyNkZWZpbmUgRU1TS19TV0lUQ0hfUE9SVCAgICAoRFdfR1BJT19QT1JUX0MpDQorI2RlZmluZSBFTVNLX1NXSVRDSF9ESVIgICAgICgoMHgwKSA8PCBFTVNLX1NXSVRDSF9PRkZTRVQpDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqDQorICogXG5hbWUgICAgRU1TSyBCdXR0b24gUG9ydCBDb25maWd1cmF0aW9uDQorICogQHsNCisgKi8NCisjZGVmaW5lIEVNU0tfQlVUVE9OX09GRlNFVCAgKDApDQorI2RlZmluZSBFTVNLX0JVVFRPTl9NQVNLICAgICgoMHg3KSA8PCBFTVNLX0JVVFRPTl9PRkZTRVQpDQorI2RlZmluZSBFTVNLX0JVVFRPTl9QT1JUICAgIChEV19HUElPX1BPUlRfQSkNCisjZGVmaW5lIEVNU0tfQlVUVE9OX0RJUiAgICAgKCgweDApIDw8IEVNU0tfQlVUVE9OX09GRlNFVCkNCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCitleHRlcm4gdm9pZCBlbXNrX2xlZF9pbml0KHZvaWQpOw0KK2V4dGVybiB2b2lkIGVtc2tfYnV0dG9uX2luaXQodm9pZCk7DQorZXh0ZXJuIHZvaWQgZW1za19zd2l0Y2hfaW5pdCh2b2lkKTsNCitleHRlcm4gdm9pZCBlbXNrX2dwaW9faW5pdCh2b2lkKTsNCitleHRlcm4gdm9pZCBsZWRfd3JpdGUodWludDMyX3QgbGVkX3ZhbCwgdWludDMyX3QgbWFzayk7DQorZXh0ZXJuIHVpbnQzMl90IGxlZF9yZWFkKHVpbnQzMl90IG1hc2spOw0KK2V4dGVybiB1aW50MzJfdCBzd2l0Y2hfcmVhZCh1aW50MzJfdCBtYXNrKTsNCitleHRlcm4gdWludDMyX3QgYnV0dG9uX3JlYWQodWludDMyX3QgbWFzayk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfRU1TS19HUElPX0hfICovDQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0RSVl9HUElPICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svcG1yZi9tcmYyNGo0MC5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svcG1yZi9tcmYyNGo0MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMjhlMzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9wbXJmL21yZjI0ajQwLmMKQEAgLTAsMCArMSw1OTEgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDE0LCBNaWNoZWxlIEJhbGlzdHJlcmkNCisgKg0KKyAqIERlcml2ZWQgZnJvbSBjb2RlIG9yaWdpbmFsbHkgQ29weXJpZ2h0IChDKSAyMDExLCBBbGV4IEhvcm51bmcNCisgKg0KKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhDQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwNCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uDQorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCisgKg0KKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluDQorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQorICoNCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTA0KKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcNCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSDQorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KKyAqDQorICogTW9kaWZpZWQgYnkgUWlhbmcgR3UoUWlhbmcuR3VAc3lub3BzeXMuY29tKSBmb3IgZW1iQVJDDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTYtMDctMjkNCisgKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgQk9BUkRfRU1TS19EUlZfUkZfTVJGMjRKNDAgIEVNU0sgUkYtTVJGMjRKNDAgRHJpdmVyDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfUkYNCisgKiBcYnJpZWYgICBFTVNLIFJGIE1SRjI0SjQwIGRyaXZlcg0KKyAqIFxkZXRhaWxzDQorICogICAgICBJbXBsZW1lbnQgdGhlIE1SRjI0SjQwIGRyaXZlciB1c2luZyB0aGUgRGVzaWduV2FyZSBTUEkgZGV2aWNlIGRyaXZlci4NCisgKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJWX1JGX01SRjI0SjQwDQorICogXGJyaWVmICAgUkYgTVJGMjRKNDAgZHJpdmVyDQorICogXGRldGFpbHMgSW1wbGVtZW50IE1SRjI0SjQwIGRyaXZlci4NCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfUkZfTVJGMjRKNDANCisgKiBAew0KKyAqLw0KKw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL3BtcmYvbXJmMjRqNDAuaCINCisNCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgImJvYXJkL2Vtc2svcG1yZi9wbXJmLmgiDQorDQorLyogbXJmMjRqNDBfcmVhZF9sb25nX2N0cmxfcmVnKCksIG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoKSwNCisgKiBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKCkgYW5kIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKCkNCisgKiBpcyBtb2RpZmllZCBmb3IgZW1iQVJDICovDQorLyoqIFJlYWQgcmVnaXN0ZXIgaW4gbG9uZyBhZGRyZXNzIG1lbW9yeSBzcGFjZSAqLw0KK3VpbnQ4X3QgbXJmMjRqNDBfcmVhZF9sb25nX2N0cmxfcmVnKHVpbnQxNl90IGFkZHIpDQorew0KKyAgICByZXR1cm4gcG1yZl9yZWFkX2xvbmdfY3RybF9yZWcoYWRkcik7DQorfQ0KKw0KKy8qKiBSZWFkIHJlZ2lzdGVyIGluIHNob3J0IGFkZHJlc3MgbWVtb3J5IHNwYWNlICovDQordWludDhfdCBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKHVpbnQ4X3QgYWRkcikNCit7DQorICAgIHJldHVybiBwbXJmX3JlYWRfc2hvcnRfY3RybF9yZWcoYWRkcik7DQorfQ0KKw0KKy8qKiBXcml0ZSByZWdpc3RlciBpbiBsb25nIGFkZHJlc3MgbWVtb3J5IHNwYWNlICovDQordm9pZCBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKHVpbnQxNl90IGFkZHIsIHVpbnQ4X3QgdmFsdWUpDQorew0KKyAgICBwbXJmX3dyaXRlX2xvbmdfY3RybF9yZWcoYWRkciwgdmFsdWUpOw0KK30NCisNCisvKiogV3JpdGUgcmVnaXN0ZXIgaW4gc2hvcnQgYWRkcmVzcyBtZW1vcnkgc3BhY2UgKi8NCit2b2lkIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKHVpbnQ4X3QgYWRkciwgdWludDhfdCB2YWx1ZSkNCit7DQorICAgIHBtcmZfd3JpdGVfc2hvcnRfY3RybF9yZWcoYWRkciwgdmFsdWUpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgSU5UQ09OOiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIEVuYWJsZSBUWCBOb3JtYWwgRklGTyB0cmFuc21pc3Npb24gaW50ZXJydXB0IChUWE5JRSA9IDApLA0KKyAqICAgICAgICAgIFJYIEZJRk8gcmVjZXB0aW9uIGludGVycnVwdCAoUlhJRSA9IDApLA0KKyAqICAgICAgICAgIHNlY3VyaXR5IGtleSByZXF1ZXN0IGludGVycnVwdCAoU0VDSUUgPSAwKQ0KKyAqLw0KK3ZvaWQgbXJmMjRqNDBfaWUodm9pZCkNCit7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0lOVENPTiwgfihNUkYyNEo0MF9UWE5JRSB8IE1SRjI0SjQwX1JYSUUgfCBNUkYyNEo0MF9TRUNJRSkpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgU09GVFJTVDogU29mdHdhcmUgUmVzZXQgUmVnaXN0ZXINCisgKiBcZGV0YWlscyBSZXNldCBwb3dlciBtYW5hZ2VtZW50IGNpcmN1aXRyeSAoUlNUUFdSID0gMSkNCisgKi8NCit2b2lkIG1yZjI0ajQwX3B3cl9yZXNldCh2b2lkKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfU09GVFJTVCwgTVJGMjRKNDBfUlNUUFdSKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgU2V0IFNPRlRSU1Q6IFNvZnR3YXJlIFJlc2V0IFJlZ2lzdGVyDQorICogXGRldGFpbHMgUmVzZXQgYmFzZWJhbmQgY2lyY3VpdHJ5IChSU1RCQiA9IDEpDQorICovDQordm9pZCBtcmYyNGo0MF9iYl9yZXNldCh2b2lkKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfU09GVFJTVCwgTVJGMjRKNDBfUlNUQkIpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgU09GVFJTVDogU29mdHdhcmUgUmVzZXQgUmVnaXN0ZXINCisgKiBcZGV0YWlscyBSZXNldCBNQUMgY2lyY3VpdHJ5IChSU1RNQUMgPSAxKQ0KKyAqLw0KK3ZvaWQgbXJmMjRqNDBfbWFjX3Jlc2V0KHZvaWQpDQorew0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9TT0ZUUlNULCBNUkYyNEo0MF9SU1RNQUMpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgUkZDVEw6IFJGIE1vZGUgQ29udHJvbCBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIFBlcmZvcm0gUkYgUmVzZXQgYnkgc2V0dGluZyBSRlJTVCA9IDEgYW5kIHRoZW4gUkZSU1QgPSAwDQorICovDQordm9pZCBtcmYyNGo0MF9yZl9yZXNldCh2b2lkKQ0KK3sNCisgICAgdWludDhfdCBvbGQgPSBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1JGQ1RMKTsNCisNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUkZDVEwsIG9sZCB8IE1SRjI0SjQwX1JGUlNUKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUkZDVEwsIG9sZCAmIH5NUkYyNEo0MF9SRlJTVCk7DQorICAgIG1yZjI0ajQwX2RlbGF5X21zKDIpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBHZXQgRlBTVEFUIGluIFRYTkNPTjogVHJhbnNtaXQgTm9ybWFsIEZJRk8gQ29udHJvbCBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIEdldCBzdGF0dXMgb2YgdGhlIGZyYW1lIHBlbmRpbmcgYml0IGluIHRoZSByZWNlaXZlZCBBY2tub3dsZWRnZW1lbnQgZnJhbWUNCisgKiBccmV0dmFsIDEgICAgU2V0IGZyYW1lIHBlbmRpbmcgYml0DQorICogXHJldHZhbCAwICAgIENsZWFyIGZyYW1lIHBlbmRpbmcgYml0DQorICovDQordWludDhfdCBtcmYyNGo0MF9nZXRfcGVuZGluZ19mcmFtZSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIChtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1RYTkNPTikgPj4gNCkgJiAweDAxOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgUlhGTFVTSCBpbiBSWEZMVVNIOiBSZWNlaXZlIEZJRk8gRmx1c2ggUmVnaXN0ZXINCisgKiBcZGV0YWlscyBSZXNldCBSWEZJRk8gYWRkcmVzcyBwb2ludGVyIHRvIHplcm8NCisgKi8NCit2b2lkIG1yZjI0ajQwX3J4Zmlmb19mbHVzaCh2b2lkKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhGTFVTSCwgKG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhGTFVTSCkgfCBNUkYyNEo0MF9fUlhGTFVTSCkpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgQ0hBTk5FTCBpbiBSRkNPTjA6IFJGIENvbnRyb2wgMCBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIFNldCBjaGFubmVsIG51bWJlcg0KKyAqIFxwYXJhbSAgY2ggICBDaGFubmVsIG51bWJlciwgMDAwMCA9IENoYW5uZWwgMTEgKDI0MDUgTUh6KSBhcyBkZWZhdWx0DQorICovDQordm9pZCBtcmYyNGo0MF9zZXRfY2hhbm5lbChpbnQxNl90IGNoKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfbG9uZ19jdHJsX3JlZyhNUkYyNEo0MF9SRkNPTjAsIE1SRjI0SjQwX0NIQU5ORUwoY2gpIHwgTVJGMjRKNDBfUkZPUFQoMHgwMykpOw0KKyAgICBtcmYyNGo0MF9yZl9yZXNldCgpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgUFJPTUkgaW4gUlhNQ1I6IFJlY2VpdmUgTUFDIENvbnRyb2wgUmVnaXN0ZXINCisgKiBcZGV0YWlscyBTZXQgcHJvbWlzY3VvdXMgbW9kZQ0KKyAqIFxwYXJhbSAgY3JjX2NoZWNrICAgIDEgPSBEaXNjYXJkIHBhY2tldCB3aGVuIHRoZXJlIGlzIGEgTUFDIGFkZHJlc3MgbWlzbWF0Y2gsDQorICogICAgICAgICAgaWxsZWdhbCBmcmFtZSB0eXBlLCBkUEFOL3NQQU4gb3IgTUFDIHNob3J0IGFkZHJlc3MgbWlzbWF0Y2gsDQorICogICAgICAgICAgMCA9IFJlY2VpdmUgYWxsIHBhY2tldCB0eXBlcyB3aXRoIGdvb2QgQ1JDDQorICovDQordm9pZCBtcmYyNGo0MF9zZXRfcHJvbWlzY3VvdXMoYm9vbCBjcmNfY2hlY2spDQorew0KKyAgICB1aW50OF90IHcgPSBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1JYTUNSKTsNCisNCisgICAgaWYgKCFjcmNfY2hlY2spDQorICAgIHsNCisgICAgICAgIHcgfD0gTVJGMjRKNDBfUFJPTUk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICB3ICY9ICh+TVJGMjRKNDBfUFJPTUkpOw0KKyAgICB9DQorDQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1JYTUNSLCB3KTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgU2V0IFBBTkNPT1JEIGluIFJYTUNSOiBSZWNlaXZlIE1BQyBDb250cm9sIFJlZ2lzdGVyDQorICogXGRldGFpbHMgU2V0IGRldmljZSBhcyBQQU4gY29vcmRpbmF0b3INCisgKi8NCit2b2lkIG1yZjI0ajQwX3NldF9jb29yZGluYXRvcih2b2lkKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IsIG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IpIHwgTVJGMjRKNDBfUEFOQ09PUkQpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBDbGVhciBQQU5DT09SRCBpbiBSWE1DUjogUmVjZWl2ZSBNQUMgQ29udHJvbCBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIERldmljZSBpcyBub3Qgc2V0IGFzIFBBTiBjb29yZGluYXRvcg0KKyAqLw0KK3ZvaWQgbXJmMjRqNDBfY2xlYXJfY29vcmRpbmF0b3Iodm9pZCkNCit7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1JYTUNSLCBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1JYTUNSKSAmIH5NUkYyNEo0MF9QQU5DT09SRCk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBQQU4gSUQgaW4gUEFOSURMIGFuZCBQQU5JREgNCisgKiBccGFyYW0gICpwYW4gUG9pbnRlciBvZiBQQU4gSUQsIHBhblswXSBmb3IgbG93IGJ5dGUgYW5kIHBhblsxXSBmb3IgaGlnaCBieXRlDQorICovDQordm9pZCBtcmYyNGo0MF9zZXRfcGFuKHVpbnQ4X3QgKnBhbikNCit7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1BBTklETCwgcGFuWzBdKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUEFOSURILCBwYW5bMV0pOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgc2hvcnQgYWRkcmVzcyBpbiBTQURSTCBhbmQgU0FEUkgNCisgKiBccGFyYW0gICphZGRyICAgIFBvaW50ZXIgb2Ygc2hvcnQgYWRkcmVzcywgYWRkclswXSBmb3IgbG93IGJ5dGUgYW5kIGFkZHJbMV0gZm9yIGhpZ2ggYnl0ZQ0KKyAqLw0KK3ZvaWQgbXJmMjRqNDBfc2V0X3Nob3J0X2FkZHIodWludDhfdCAqYWRkcikNCit7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1NBRFJMLCBhZGRyWzBdKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfU0FEUkgsIGFkZHJbMV0pOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgZXh0ZW5kZWQgYWRkcmVzcyBmcm9tIEVBRFIwIHRvIEVBRFI3DQorICogXHBhcmFtICAqYWRkciAgICBQb2ludGVyIG9mIGV4dGVuZGVkIGFkZHJlc3MsIGV1aVswXSB0byBldWlbN10NCisgKi8NCisvKiBNb2RpZmllZCBmb3IgZW1iQVJDICovDQordm9pZCBtcmYyNGo0MF9zZXRfZXVpKHVpbnQ4X3QgKmV1aSkNCit7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0VBRFIwLCBldWlbMF0pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9FQURSMSwgZXVpWzFdKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfRUFEUjIsIGV1aVsyXSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0VBRFIzLCBldWlbM10pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9FQURSNCwgZXVpWzRdKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfRUFEUjUsIGV1aVs1XSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0VBRFI2LCBldWlbNl0pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9FQURSNywgZXVpWzddKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgU2V0IGFzc29jaWF0ZWQgY29vcmRpbmF0b3Igc2hvcnQgYWRkcmVzcyBpbiBBU1NPU0FEUjAgYW5kIEFTU09TQURSMQ0KKyAqIFxwYXJhbSAgKmFkZHIgICAgUG9pbnRlciBvZiBhc3NvY2lhdGVkIGNvb3JkaW5hdG9yIHNob3J0IGFkZHJlc3MNCisgKi8NCisvKiBNb2RpZmllZCBmb3IgZW1iQVJDICovDQordm9pZCBtcmYyNGo0MF9zZXRfY29vcmRpbmF0b3Jfc2hvcnRfYWRkcih1aW50OF90ICphZGRyKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfbG9uZ19jdHJsX3JlZyhNUkYyNEo0MF9BU1NPU0FEUjAsIGFkZHJbMF0pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX0FTU09TQURSMSwgYWRkclsxXSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBhc3NvY2lhdGVkIGNvb3JkaW5hdG9yIGV4dGVuZGVkIGFkZHJlc3MgZnJvbSBBU1NPRUFEUjAgdG8gQVNTT0VBRFI3DQorICogXHBhcmFtICAqYWRkciAgICBQb2ludGVyIG9mIGFzc29jaWF0ZWQgY29vcmRpbmF0b3IgZXh0ZW5kZWQgYWRkcmVzcywgZXVpWzBdIHRvIGV1aVs3XQ0KKyAqLw0KKy8qIE1vZGlmaWVkIGZvciBlbWJBUkMgKi8NCit2b2lkIG1yZjI0ajQwX3NldF9jb29yZGluYXRvcl9ldWkodWludDhfdCAqZXVpKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfbG9uZ19jdHJsX3JlZyhNUkYyNEo0MF9BU1NPRUFEUjAsIGV1aVswXSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfQVNTT0VBRFIxLCBldWlbMV0pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX0FTU09FQURSMiwgZXVpWzJdKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfbG9uZ19jdHJsX3JlZyhNUkYyNEo0MF9BU1NPRUFEUjMsIGV1aVszXSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfQVNTT0VBRFI0LCBldWlbNF0pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX0FTU09FQURSNSwgZXVpWzVdKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfbG9uZ19jdHJsX3JlZyhNUkYyNEo0MF9BU1NPRUFEUjYsIGV1aVs2XSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfQVNTT0VBRFI3LCBldWlbN10pOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQga2V5IGluIGFkZHJlc3MgZm9yIFNFQ0tUWE5GSUZPIGFuZCBTRUNLUlhGSUZPDQorICogXHBhcmFtICBhZGRyZXNzICBUWCBub3JtYWwgRklGTyBzZWN1cml0eSBrZXkgKDB4MjgwKSBhbmQgUlggRklGTyBzZWN1cml0eSBrZXkgKDB4MkIwKQ0KKyAqIFxwYXJhbSAgKmtleSAgICAgUG9pbnRlciBvZiBzZWN1cml0eSBrZXkgKDE2IGJ5dGVzKQ0KKyAqLw0KKy8qIE1vZGlmaWVkIGZvciBlbWJBUkMgKi8NCit2b2lkIG1yZjI0ajQwX3NldF9rZXkodWludDE2X3QgYWRkcmVzcywgdWludDhfdCAqa2V5KQ0KK3sNCisgICAgcG1yZl9zZXRfa2V5KGFkZHJlc3MsIGtleSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFBlcmZvcm0gaGFyZHdhcmUgUmVzZXQgYnkgYXNzZXJ0aW5nIFJFU0VUIHBpbg0KKyAqIFxkZXRhaWxzIFRoZSBNUkYyNEo0MCB3aWxsIGJlIHJlbGVhc2VkIGZyb20gUmVzZXQgYXBwcm94aW1hdGVseSAyNTAgdXMgYWZ0ZXIgdGhlIFJFU0VUIHBpbiBpcyByZWxlYXNlZC4NCisgKi8NCit2b2lkIG1yZjI0ajQwX2hhcmRfcmVzZXQoKQ0KK3sNCisgICAgbXJmMjRqNDBfcmVzZXRfcGluKDApOw0KKw0KKyAgICBtcmYyNGo0MF9kZWxheV91cyg1MDApOw0KKyAgICBtcmYyNGo0MF9yZXNldF9waW4oMSk7DQorICAgIG1yZjI0ajQwX2RlbGF5X3VzKDUwMCk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIEluaXRpYWxpemUgTVJGMjRKNDANCisgKi8NCisvKiBNb2RpZmllZCBmb3IgZW1iQVJDICovDQordm9pZCBtcmYyNGo0MF9pbml0aWFsaXplKCkNCit7DQorDQorICAgIHVpbnQ4X3Qgc29mdHJzdF9zdGF0dXM7DQorICAgIHVpbnQ4X3QgcmZfc3RhdGU7DQorDQorICAgIHBtcmZfYWxsX2luc3RhbGwoKTsNCisNCisgICAgLy9tcmYyNGo0MF9jc19waW4oMSk7DQorICAgIC8vbXJmMjRqNDBfd2FrZV9waW4oMSk7DQorICAgIG1yZjI0ajQwX3dha2VfcGluKDEpOw0KKw0KKyAgICBtcmYyNGo0MF9oYXJkX3Jlc2V0KCk7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1NPRlRSU1QsIChNUkYyNEo0MF9SU1RQV1IgfCBNUkYyNEo0MF9SU1RCQiB8IE1SRjI0SjQwX1JTVE1BQykpOw0KKyAgICBtcmYyNGo0MF9kZWxheV91cyg1MDApOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICBzb2Z0cnN0X3N0YXR1cyA9IG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfU09GVFJTVCk7DQorICAgIH0NCisgICAgd2hpbGUgKChzb2Z0cnN0X3N0YXR1cyAmIChNUkYyNEo0MF9SU1RQV1IgfCBNUkYyNEo0MF9SU1RCQiB8IE1SRjI0SjQwX1JTVE1BQykpICE9IDApOw0KKw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9QQUNPTjIsIE1SRjI0SjQwX0ZJRk9FTiB8IE1SRjI0SjQwX1RYT05UUygweDE4KSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1RYU1RCTCwgTVJGMjRKNDBfUkZTVEJMKDkpIHwgTVJGMjRKNDBfTVNJRlMoNSkpOw0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JGQ09OMCwgTVJGMjRKNDBfQ0hBTk5FTCgwKSB8IE1SRjI0SjQwX1JGT1BUKDB4MDMpKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfbG9uZ19jdHJsX3JlZyhNUkYyNEo0MF9SRkNPTjEsIE1SRjI0SjQwX1ZDT09QVCgweDAyKSk7IC8vIEluaXRpYWxpemUgVkNPT1BUID0gMHgwMg0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JGQ09OMiwgTVJGMjRKNDBfUExMRU4pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JGQ09ONiwgKE1SRjI0SjQwX1RYRklMIHwgTVJGMjRKNDBfXzIwTVJFQ1ZSKSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfUkZDT043LCBNUkYyNEo0MF9TTFBDTEtTRUwoMHgwMikpOw0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JGQ09OOCwgTVJGMjRKNDBfUkZWQ08pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1NMUENPTjEsIE1SRjI0SjQwX1NMUENMS0RJVigxKSB8IE1SRjI0SjQwX0NMS09VVERJUyk7DQorDQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1JYRkxVU0gsIChNUkYyNEo0MF9XQUtFUEFEIHwgTVJGMjRKNDBfV0FLRVBPTCkpOw0KKw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWE1DUiwgbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWE1DUikgJiAofk1SRjI0SjQwX05PQUNLUlNQKSk7DQorICAgIC8vIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1JYTUNSLCBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1JYTUNSKSB8IE1SRjI0SjQwX1BBTkNPT1JEKTsNCisgICAgLy8gbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IsIG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IpIHwgKE1SRjI0SjQwX05PQUNLUlNQKSk7DQorICAgIC8vIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0FDS1RNT1VULCBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0FDS1RNT1VUKSB8IDB4N2YpOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9UWE1DUiwgMGIwMDAxMTEwMCk7DQorICAgIC8vIG1yZjI0ajQwX3NldF9jb29yZGluYXRvcigpOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9PUkRFUiwgMHhGRik7DQorDQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0JCUkVHMSwgMHgwKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfQkJSRUcyLCBNUkYyNEo0MF9DQ0FNT0RFKDB4MDIpIHwgTVJGMjRKNDBfQ0NBU1RIKDB4MDApKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfQ0NBRURUSCwgMHg2MCk7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0JCUkVHNiwgTVJGMjRKNDBfUlNTSU1PREUyKTsNCisNCisgICAgLy8gVFVSTlRJTUUgRGVmYXVsZSB2YWx1ZTogMHg0IGFuZCBUVVJOVElNRT0weDMNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhUSU1FLCAweDMwKTsNCisNCisgICAgLy9tcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9UWFBFTkQsIG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhQRU5EKSAmIE1SRjI0SjQwX0ZQQUNLKTsNCisNCisgICAgLy9tcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1NMUENPTjAsIE1SRjI0SjQwX1NMUENMS0VOKTsNCisNCisgICAgLy8gbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfQUNLVE1PVVQsIG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfQUNLVE1PVVQpIHwgTVJGMjRKNDBfRFJQQUNLKTsNCisNCisgICAgLy8gbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IsIG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IpIHwgTVJGMjRKNDBfUFJPTUkpOw0KKw0KKyAgICBtcmYyNGo0MF9pZSgpOw0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JGQ09OMywgMHgwKTsNCisNCisgICAgbXJmMjRqNDBfcmZfcmVzZXQoKTsNCisNCisgICAgZG8NCisgICAgew0KKyAgICAgICAgcmZfc3RhdGUgPSBtcmYyNGo0MF9yZWFkX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfUkZTVEFURSk7DQorICAgIH0NCisgICAgd2hpbGUgKCgocmZfc3RhdGUgPj4gNSkgJiAweDA1KSAhPSAweDA1KTsNCisNCisgICAgbXJmMjRqNDBfcnhmaWZvX2ZsdXNoKCk7DQorDQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBsb3ctY3VycmVudCBTbGVlcCBtb2RlDQorICovDQordm9pZCBtcmYyNGo0MF9zbGVlcCgpDQorew0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9XQUtFQ09OLCBNUkYyNEo0MF9JTU1XQUtFKTsNCisNCisgICAgdWludDhfdCByID0gbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9TTFBBQ0spOw0KKyAgICBtcmYyNGo0MF93YWtlX3BpbigwKTsNCisNCisgICAgbXJmMjRqNDBfcHdyX3Jlc2V0KCk7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1NMUEFDSywgciB8IE1SRjI0SjQwX19TTFBBQ0spOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgd2FrZS11cCBmcm9tIFNsZWVwIG1vZGUNCisgKi8NCit2b2lkIG1yZjI0ajQwX3dha2V1cCgpDQorew0KKyAgICBtcmYyNGo0MF93YWtlX3BpbigxKTsNCisgICAgbXJmMjRqNDBfcmZfcmVzZXQoKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgRW5hYmxlIGFuZCB0cmFuc21pdCBmcmFtZSBpbiBUWCBOb3JtYWwgRklGTw0KKyAqIFxwYXJhbSAgKmZyYW1lICAgUG9pbnRlciBvZiB0aGUgVFggZnJhbWUNCisgKiBccGFyYW0gIGhkcl9sZW4gIEhlYWRlciBMZWdudGggb2YgdGhlIHRyYW5zbWlzc2lvbiBwYWNrZXQNCisgKiBccGFyYW0gIHNlY19oZHJfbGVuICBTZWN1cml0eSBoZWFkZXIgTGVnbnRoIG9mIHRoZSB0cmFuc21pc3Npb24gcGFja2V0DQorICogXHBhcmFtICBwYXlsb2FkX2xlbiAgRGF0YSBwYXlsb2FkIG9mIHRoZSB0cmFuc21pc3Npb24gcGFja2V0DQorICovDQorLyogTW9kaWZpZWQgZm9yIGVtYkFSQyAqLw0KK3ZvaWQgbXJmMjRqNDBfdHhwa3QodWludDhfdCAqZnJhbWUsIGludDE2X3QgaGRyX2xlbiwgaW50MTZfdCBzZWNfaGRyX2xlbiwgaW50MTZfdCBwYXlsb2FkX2xlbikNCit7DQorICAgIGludDE2X3QgZnJhbWVfbGVuID0gaGRyX2xlbiArIHNlY19oZHJfbGVuICsgcGF5bG9hZF9sZW47DQorDQorICAgIHVpbnQ4X3QgdyA9IG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhOQ09OKTsNCisgICAgdyAmPSB+KE1SRjI0SjQwX1RYTlNFQ0VOKTsNCisNCisgICAgaWYgKElFRUVfODAyXzE1XzRfSEFTX1NFQyhmcmFtZVswXSkpDQorICAgIHsNCisgICAgICAgIHcgfD0gTVJGMjRKNDBfVFhOU0VDRU47DQorICAgIH0NCisNCisgICAgaWYgKElFRUVfODAyXzE1XzRfV0FOVFNfQUNLKGZyYW1lWzBdKSkNCisgICAgew0KKyAgICAgICAgdyB8PSBNUkYyNEo0MF9UWE5BQ0tSRVE7DQorICAgIH0NCisNCisgICAgcG1yZl90eHBrdF9mcmFtZV93cml0ZShmcmFtZSwgaGRyX2xlbiwgZnJhbWVfbGVuKTsNCisNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhOQ09OLCB3IHwgTVJGMjRKNDBfVFhOVFJJRyk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBSWENJUEhFUiBhbmQgVFhOQ0lQSEVSIGluIFNFQ0NPTjA6IFNlY3VyaXR5IENvbnRyb2wgMCBSZWdpc3Rlcg0KKyAqIFxwYXJhbSAgcnhjaXBoZXIgUlggRklGTyBzZWN1cml0eSBzdWl0ZSBzZWxlY3QgYml0cw0KKyAqIFxwYXJhbSAgdHhjaXBoZXIgVFggbm9ybWFsIEZJRk8gc2VjdXJpdHkgc3VpdGUgc2VsZWN0IGJpdHMNCisgKiBcZGV0YWlscyAxMTEgPSBBRVMtQ0JDLU1BQy0zMg0KKyAqICAgICAgMTEwID0gQUVTLUNCQy1NQUMtNjQNCisgKiAgICAgIDEwMSA9IEFFUy1DQkMtTUFDLTEyOA0KKyAqICAgICAgMTAwID0gQUVTLUNNTS0zMg0KKyAqICAgICAgMDExID0gQUVTLUNNTS02NA0KKyAqICAgICAgMDEwID0gQUVTLUNNTS0xMjgNCisgKiAgICAgIDAwMSA9IEFFUy1DVFINCisgKiAgICAgIDAwMCA9IE5vbmUgKGRlZmF1bHQpDQorICovDQordm9pZCBtcmYyNGo0MF9zZXRfY2lwaGVyKHVpbnQ4X3QgcnhjaXBoZXIsIHVpbnQ4X3QgdHhjaXBoZXIpDQorew0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9TRUNDT04wLCBNUkYyNEo0MF9SWENJUEhFUihyeGNpcGhlcikgfCBNUkYyNEo0MF9UWE5DSVBIRVIodHhjaXBoZXIpKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgUmVhZCBTRUNERUNFUlIgaW4gUlhTUjogUlggTUFDIFN0YXR1cyBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIFJlYWQgc2VjdXJpdHkgZGVjcnlwdGlvbiBlcnJvciBiaXQNCisgKiBccmV0dmFsIDAgICAgU2VjdXJpdHkgZGVjcnlwdGlvbiBlcnJvciBvY2N1cnJlZA0KKyAqIFxyZXR2YWwgMSAgICBTZWN1cml0eSBkZWNyeXB0aW9uIGVycm9yIGRpZCBub3Qgb2NjdXINCisgKi8NCisvLyBTaG91bGQgYmUgdGVzdGVkDQorYm9vbCBtcmYyNGo0MF9yeF9zZWNfZmFpbCgpDQorew0KKyAgICBib29sIHJ4X3NlY19mYWlsID0gKG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhTUikgPj4gMikgJiAweDAxOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWFNSLCAweDAwKTsNCisgICAgcmV0dXJuIHJ4X3NlY19mYWlsOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgU0VDSUdOT1JFL1NFQ1NUQVJUIGluIFNFQ0NPTjA6IFNlY3VyaXR5IENvbnRyb2wgMCBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIFNldCBSWCBzZWN1cml0eSBkZWNyeXB0aW9uIGlnbm9yZS9zdGFydCBiaXQNCisgKiBccGFyYW0gIGFjY2VwdCAgIDE6IHN0YXJ0IGRlY3J5cHRpb24gcHJvY2VzcywgMDogaWdub3JlIGRlY3J5cHRpb24gcHJvY2Vzcw0KKyAqLw0KK3ZvaWQgbXJmMjRqNDBfc2VjX2ludGNiKGJvb2wgYWNjZXB0KQ0KK3sNCisgICAgdWludDhfdCB3ID0gbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9TRUNDT04wKTsNCisNCisgICAgdyB8PSBhY2NlcHQgPyBNUkYyNEo0MF9TRUNTVEFSVCA6IE1SRjI0SjQwX1NFQ0lHTk9SRTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfU0VDQ09OMCwgdyk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFJlYWQgVFggbm9ybWFsIEZJRk8gcmVsZWFzZSBzdGF0dXMgYml0IGluIFRYU1RBVDogVFggTUFDIFN0YXR1cyBSZWdpc3Rlcg0KKyAqIFxyZXR2YWwgTVJGMjRKNDBfRUJVU1kgICBGYWlsZWQsIGNoYW5uZWwgYnVzeQ0KKyAqIFxyZXR2YWwgTVJGMjRKNDBfRUlPICAgICBGYWlsZWQsIGNoYW5uZWwgaWRsZQ0KKyAqIFxyZXR2YWwgMCAgICAgICAgICAgIFN1Y2NlZWRlZA0KKyAqLw0KK2ludDE2X3QgbXJmMjRqNDBfdHhwa3RfaW50Y2Iodm9pZCkNCit7DQorICAgIHVpbnQ4X3Qgc3RhdCA9IG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhTVEFUKTsNCisNCisgICAgaWYgKHN0YXQgJiBNUkYyNEo0MF9UWE5TVEFUKQ0KKyAgICB7DQorICAgICAgICBpZiAoc3RhdCAmIE1SRjI0SjQwX0NDQUZBSUwpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIE1SRjI0SjQwX0VCVVNZOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBNUkYyNEo0MF9FSU87DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZW5kIFJYIHBhY2tldCBpbiBSWCBGSUZPDQorICogXHBhcmFtICAqYnVmICAgICBQb2ludGVyIG9mIFJYIGJ1ZmZlciBpbiBSWCBGSUZPDQorICogXHBhcmFtICAqcGxxaSAgICBQb2ludGVyIG9mIExRSSBpbiBSWCBGSUZPDQorICogXHBhcmFtICAqcHJzc2kgICBQb2ludGVyIG9mIFJTU0kgaW4gUlggRklGTw0KKyAqIFxyZXR1cm5zIEZyYW1lIGxlbmd0aCBpbiBSWCBGSUZPDQorICovDQorLyogTW9kaWZpZWQgZm9yIGVtYkFSQyAqLw0KK2ludDE2X3QgbXJmMjRqNDBfcnhwa3RfaW50Y2IodWludDhfdCAqYnVmLCB1aW50OF90ICpwbHFpLCB1aW50OF90ICpwcnNzaSkNCit7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0JCUkVHMSwgbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9CQlJFRzEpIHwgTVJGMjRKNDBfUlhERUNJTlYpOw0KKw0KKyAgICAvKiBQYWNrZXQgUmVjZXB0aW9uDQorICAgICAqIEZyYW1lIExlbmd0aCAtLSBIZWFkZXIgLS0gRGF0YSBQYXlsb2FkIC0tIEZDUyAtLSBMUUkgLS0gUlNTSQ0KKyAgICAgKi8NCisgICAgdWludDhfdCBmbGVuID0gbXJmMjRqNDBfcmVhZF9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JYRklGTyk7DQorDQorICAgIGlmIChmbGVuID4gKE1SRjI0SjQwX1JYRklGT19TSVpFIC0gMykpDQorICAgIHsNCisgICAgICAgIGZsZW4gPSBNUkYyNEo0MF9SWEZJRk9fU0laRSAtIDM7DQorICAgIH0NCisNCisgICAgcG1yZl9yeHBrdF9pbnRjYl9mcmFtZV9yZWFkKGJ1ZiwgZmxlbik7DQorDQorICAgIHVpbnQ4X3QgbHFpID0gbXJmMjRqNDBfcmVhZF9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JYRklGTyArIGZsZW4gKyAxKTsNCisgICAgdWludDhfdCByc3NpID0gbXJmMjRqNDBfcmVhZF9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JYRklGTyArIGZsZW4gKyAyKTsNCisNCisgICAgaWYgKHBscWkgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgKnBscWkgPSBscWk7DQorICAgIH0NCisNCisgICAgaWYgKHByc3NpICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgICpwcnNzaSA9IHJzc2k7DQorICAgIH0NCisNCisgICAgbXJmMjRqNDBfcnhmaWZvX2ZsdXNoKCk7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0JCUkVHMSwgbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9CQlJFRzEpICYgfk1SRjI0SjQwX1JYREVDSU5WKTsNCisNCisgICAgcmV0dXJuIChpbnQxNl90KWZsZW47DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFJlYWQgU0VDSUYsIFRYTklGIGFuZCBSWElGIGluIElOVFNUQVQ6IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisgKiBcZGV0YWlscyBSZWFkIHNlY3VyaXR5IGtleSByZXF1ZXN0IGludGVycnVwdCBiaXQsIFRYIG5vcm1hbCBGSUZPIHJlbGVhc2UgaW50ZXJydXB0IGJpdA0KKyAqICAgICAgYW5kIFJYIEZJRk8gcmVjZXB0aW9uIGludGVycnVwdCBiaXQNCisgKiBccmV0dXJucyBJbnRlcnJ1cHQgc3RhdHVzDQorICovDQoraW50MTZfdCBtcmYyNGo0MF9pbnRfdGFza3Modm9pZCkNCit7DQorICAgIGludDE2X3QgcmV0ID0gMDsNCisNCisgICAgdWludDhfdCBzdGF0ID0gbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9JTlRTVEFUKTsNCisNCisgICAgaWYgKHN0YXQgJiBNUkYyNEo0MF9SWElGKQ0KKyAgICB7DQorICAgICAgICByZXQgfD0gTVJGMjRKNDBfSU5UX1JYOw0KKyAgICB9DQorDQorICAgIGlmIChzdGF0ICYgTVJGMjRKNDBfVFhOSUYpDQorICAgIHsNCisgICAgICAgIHJldCB8PSBNUkYyNEo0MF9JTlRfVFg7DQorICAgIH0NCisNCisgICAgaWYgKHN0YXQgJiBNUkYyNEo0MF9TRUNJRikNCisgICAgew0KKyAgICAgICAgcmV0IHw9IE1SRjI0SjQwX0lOVF9TRUM7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHJldDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgV3JpdGUgVFggRklGTw0KKyAqIFxwYXJhbSAgYWRkcmVzcyAgRklGTyBBZGRyZXNzIChUWCBOb3JtYWwgRklGTykNCisgKiBccGFyYW0gICpkYXRhICAgIFBvaW50ZXIgb2YgZGF0YSBmb3IgVFggRklGTw0KKyAqIFxwYXJhbSAgaGRyX2xlbiAgSGVhZGVyIGxlZ250aCBmb3IgVFggRklGTw0KKyAqIFxwYXJhbSAgbGVuICAgICAgRnJhbWUgbGVuZ3RoIGZvciBUWCBGSUZPDQorICovDQordm9pZCBtcmYyNGo0MF90eGZpZm9fd3JpdGUodWludDE2X3QgYWRkcmVzcywgdWludDhfdCAqZGF0YSwgdWludDhfdCBoZHJfbGVuLCB1aW50OF90IGxlbikNCit7DQorICAgIHBtcmZfdHhmaWZvX3dyaXRlKGFkZHJlc3MsIGRhdGEsIGhkcl9sZW4sIGxlbik7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBUWE5UUklHIGluIFRYTkNPTjogVHJhbnNtaXQgbm9ybWFsIEZJRk8gY29udHJvbCByZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIFRyYW5zbWl0IGZyYW1lIGluIFRYIG5vcm1hbCBGSUZPIGJpdA0KKyAqLw0KK3ZvaWQgbXJmMjRqNDBfdHJhbnNtaXQodm9pZCkNCit7DQorICAgIHVpbnQ4X3QgcmVnID0gcG1yZl9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1RYTkNPTikgfCBNUkYyNEo0MF9UWE5UUklHOw0KKw0KKyAgICBwbXJmX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1RYTkNPTiwgcmVnKTsNCit9DQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0RSVl9SRl9NUkYyNEo0MCAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3BtcmYvbXJmMjRqNDAuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3BtcmYvbXJmMjRqNDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzkwMjBhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svcG1yZi9tcmYyNGo0MC5oCkBAIC0wLDAgKzEsMzk3IEBACisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgTWljaGVsZSBCYWxpc3RyZXJpDQorICoNCisgKiBEZXJpdmVkIGZyb20gY29kZSBvcmlnaW5hbGx5IENvcHlyaWdodCAoQykgMjAxMSwgQWxleCBIb3JudW5nDQorICoNCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQ0KKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLA0KKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQ0KKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQorICoNCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbg0KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KKyAqDQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwNCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUg0KKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HDQorICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUg0KKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCisgKg0KKyAqIE1vZGlmaWVkIGJ5IFFpYW5nIEd1KFFpYW5nLkd1QHN5bm9wc3lzLmNvbSkgZm9yIGVtYkFSQw0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE2LTA3LTI5DQorICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9SRl9NUkYyNEo0MA0KKyAqIFxicmllZiAgIFJGIE1SRjI0SjQwIGRyaXZlcg0KKyAqIFxkZXRhaWxzIGltcGxlbWVudCBNUkYyNEo0MCBkcml2ZXIgaGVhZGVyIGZpbGUNCisgKi8NCisNCisjaWZuZGVmIF9NUkYyNEo0MF9IXw0KKyNkZWZpbmUgX01SRjI0SjQwX0hfDQorDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNpbmNsdWRlIDxzdGRib29sLmg+DQorDQorI2RlZmluZSBNUkYyNEo0MF9SWEZJRk9fU0laRSAgICAgICAgMTQ0DQorDQorLyogUmV0dXJuIHZhbHVlcyAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfSU5UX1JYICAgICAgICAgMHgwMQ0KKyNkZWZpbmUgTVJGMjRKNDBfSU5UX1RYICAgICAgICAgMHgwMg0KKyNkZWZpbmUgTVJGMjRKNDBfSU5UX1NFQyAgICAgICAgMHgwNA0KKyNkZWZpbmUgTVJGMjRKNDBfSU5UX1NMUCAgICAgICAgMHgwOA0KKyNkZWZpbmUgTVJGMjRKNDBfSU5UX0VOQyAgICAgICAgMHgxMA0KKyNkZWZpbmUgTVJGMjRKNDBfSU5UX0RFQyAgICAgICAgMHgyMA0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfRUlPICAgICAgICAgICAgMQ0KKyNkZWZpbmUgTVJGMjRKNDBfRUJVU1kgICAgICAgICAgMg0KKw0KKy8qIElFRUUgODAyLjE1LjQgY29uc3RhbnRzIG5lZWRlZCBmb3Igc29tZSBmbGFncyAqLw0KKyNkZWZpbmUgSUVFRV84MDJfMTVfNF9IQVNfU0VDKHgpICAgICgoeCA+PiAzKSAmIDB4MDEpDQorI2RlZmluZSBJRUVFXzgwMl8xNV80X1dBTlRTX0FDSyh4KSAgKCh4ID4+IDUpICYgMHgwMSkNCisNCisvKiBlbmMgZGVjIHBhcmFtZXRlcnMgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1RYX0tFWSAgICAgICAgIDB4MDENCisjZGVmaW5lIE1SRjI0SjQwX1JYX0tFWSAgICAgICAgIDB4MDINCisjZGVmaW5lIE1SRjI0SjQwX1VQX0tFWSAgICAgICAgIE1SRjI0SjQwX1RYX0tFWQ0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfQUVTX0NCQ19NQUMzMiAgICAgIDB4MDcNCisjZGVmaW5lIE1SRjI0SjQwX0FFU19DQkNfTUFDNjQgICAgICAweDA2DQorI2RlZmluZSBNUkYyNEo0MF9BRVNfQ0JDX01BQzEyOCAgICAgMHgwNQ0KKyNkZWZpbmUgTVJGMjRKNDBfQUVTX0NDTTMyICAgICAgMHgwNA0KKyNkZWZpbmUgTVJGMjRKNDBfQUVTX0NDTTY0ICAgICAgMHgwMw0KKyNkZWZpbmUgTVJGMjRKNDBfQUVTX0NDTTEyOCAgICAgMHgwMg0KKyNkZWZpbmUgTVJGMjRKNDBfQUVTX0NUUiAgICAgICAgMHgwMQ0KKyNkZWZpbmUgTVJGMjRKNDBfQUxHT19OT05FICAgICAgMHgwMA0KKw0KKy8qIFNob3J0IEFkZHJlc3MgQ29udHJvbCBSZWdpc3RlciBNYXAgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1JYTUNSICAgICAgICAgIDB4MDANCisjZGVmaW5lIE1SRjI0SjQwX1BBTklETCAgICAgICAgIDB4MDENCisjZGVmaW5lIE1SRjI0SjQwX1BBTklESCAgICAgICAgIDB4MDINCisjZGVmaW5lIE1SRjI0SjQwX1NBRFJMICAgICAgICAgIDB4MDMNCisjZGVmaW5lIE1SRjI0SjQwX1NBRFJIICAgICAgICAgIDB4MDQNCisjZGVmaW5lIE1SRjI0SjQwX0VBRFIwICAgICAgICAgIDB4MDUNCisjZGVmaW5lIE1SRjI0SjQwX0VBRFIxICAgICAgICAgIDB4MDYNCisjZGVmaW5lIE1SRjI0SjQwX0VBRFIyICAgICAgICAgIDB4MDcNCisjZGVmaW5lIE1SRjI0SjQwX0VBRFIzICAgICAgICAgIDB4MDgNCisjZGVmaW5lIE1SRjI0SjQwX0VBRFI0ICAgICAgICAgIDB4MDkNCisjZGVmaW5lIE1SRjI0SjQwX0VBRFI1ICAgICAgICAgIDB4MEENCisjZGVmaW5lIE1SRjI0SjQwX0VBRFI2ICAgICAgICAgIDB4MEINCisjZGVmaW5lIE1SRjI0SjQwX0VBRFI3ICAgICAgICAgIDB4MEMNCisjZGVmaW5lIE1SRjI0SjQwX1JYRkxVU0ggICAgICAgIDB4MEQNCisNCisjZGVmaW5lIE1SRjI0SjQwX09SREVSICAgICAgICAgIDB4MTANCisjZGVmaW5lIE1SRjI0SjQwX1RYTUNSICAgICAgICAgIDB4MTENCisjZGVmaW5lIE1SRjI0SjQwX0FDS1RNT1VUICAgICAgIDB4MTINCisjZGVmaW5lIE1SRjI0SjQwX0VTTE9URzEgICAgICAgIDB4MTMNCisjZGVmaW5lIE1SRjI0SjQwX1NZTVRJQ0tMICAgICAgIDB4MTQNCisjZGVmaW5lIE1SRjI0SjQwX1NZTVRJQ0tIICAgICAgIDB4MTUNCisjZGVmaW5lIE1SRjI0SjQwX1BBQ09OMCAgICAgICAgIDB4MTYNCisjZGVmaW5lIE1SRjI0SjQwX1BBQ09OMSAgICAgICAgIDB4MTcNCisjZGVmaW5lIE1SRjI0SjQwX1BBQ09OMiAgICAgICAgIDB4MTgNCisjZGVmaW5lIE1SRjI0SjQwX1RYQkNPTjAgICAgICAgIDB4MUENCisjZGVmaW5lIE1SRjI0SjQwX1RYTkNPTiAgICAgICAgIDB4MUINCisjZGVmaW5lIE1SRjI0SjQwX1RYRzFDT04gICAgICAgIDB4MUMNCisjZGVmaW5lIE1SRjI0SjQwX1RYRzJDT04gICAgICAgIDB4MUQNCisjZGVmaW5lIE1SRjI0SjQwX0VTTE9URzIzICAgICAgIDB4MUUNCisjZGVmaW5lIE1SRjI0SjQwX0VTTE9URzQ1ICAgICAgIDB4MUYNCisNCisjZGVmaW5lIE1SRjI0SjQwX0VTTE9URzY3ICAgICAgIDB4MjANCisjZGVmaW5lIE1SRjI0SjQwX1RYUEVORCAgICAgICAgIDB4MjENCisjZGVmaW5lIE1SRjI0SjQwX1dBS0VDT04gICAgICAgIDB4MjINCisjZGVmaW5lIE1SRjI0SjQwX0ZSTU9GRlNFVCAgICAgIDB4MjMNCisjZGVmaW5lIE1SRjI0SjQwX1RYU1RBVCAgICAgICAgIDB4MjQNCisjZGVmaW5lIE1SRjI0SjQwX1RYQkNPTjEgICAgICAgIDB4MjUNCisjZGVmaW5lIE1SRjI0SjQwX0dBVEVDTEsgICAgICAgIDB4MjYNCisjZGVmaW5lIE1SRjI0SjQwX1RYVElNRSAgICAgICAgIDB4MjcNCisjZGVmaW5lIE1SRjI0SjQwX0hTWU1UTVJMICAgICAgIDB4MjgNCisjZGVmaW5lIE1SRjI0SjQwX0hTWU1UTVJIICAgICAgIDB4MjkNCisjZGVmaW5lIE1SRjI0SjQwX1NPRlRSU1QgICAgICAgIDB4MkENCisjZGVmaW5lIE1SRjI0SjQwX1NFQ0NPTjAgICAgICAgIDB4MmMNCisjZGVmaW5lIE1SRjI0SjQwX1NFQ0NPTjEgICAgICAgIDB4MmQNCisjZGVmaW5lIE1SRjI0SjQwX1RYU1RCTCAgICAgICAgIDB4MmUNCisNCisjZGVmaW5lIE1SRjI0SjQwX1JYU1IgICAgICAgICAgIDB4MzANCisjZGVmaW5lIE1SRjI0SjQwX0lOVFNUQVQgICAgICAgIDB4MzENCisjZGVmaW5lIE1SRjI0SjQwX0lOVENPTiAgICAgICAgIDB4MzINCisjZGVmaW5lIE1SRjI0SjQwX0dQSU8gICAgICAgICAgIDB4MzMNCisjZGVmaW5lIE1SRjI0SjQwX1RSSVNHUElPICAgICAgIDB4MzQNCisjZGVmaW5lIE1SRjI0SjQwX1NMUEFDSyAgICAgICAgIDB4MzUNCisjZGVmaW5lIE1SRjI0SjQwX1JGQ1RMICAgICAgICAgIDB4MzYNCisjZGVmaW5lIE1SRjI0SjQwX1NFQ0NSMiAgICAgICAgIDB4MzcNCisjZGVmaW5lIE1SRjI0SjQwX0JCUkVHMCAgICAgICAgIDB4MzgNCisjZGVmaW5lIE1SRjI0SjQwX0JCUkVHMSAgICAgICAgIDB4MzkNCisjZGVmaW5lIE1SRjI0SjQwX0JCUkVHMiAgICAgICAgIDB4M0ENCisjZGVmaW5lIE1SRjI0SjQwX0JCUkVHMyAgICAgICAgIDB4M0INCisjZGVmaW5lIE1SRjI0SjQwX0JCUkVHNCAgICAgICAgIDB4M0MNCisjZGVmaW5lIE1SRjI0SjQwX0JCUkVHNiAgICAgICAgIDB4M0UNCisjZGVmaW5lIE1SRjI0SjQwX0NDQUVEVEggICAgICAgIDB4M0YNCisNCisvKiBMb25nIEFkZHJlc3MgQ29udHJvbCBSZWdpc3RlciBNYXAgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1JGQ09OMCAgICAgICAgIDB4MjAwDQorI2RlZmluZSBNUkYyNEo0MF9SRkNPTjEgICAgICAgICAweDIwMQ0KKyNkZWZpbmUgTVJGMjRKNDBfUkZDT04yICAgICAgICAgMHgyMDINCisjZGVmaW5lIE1SRjI0SjQwX1JGQ09OMyAgICAgICAgIDB4MjAzDQorI2RlZmluZSBNUkYyNEo0MF9SRkNPTjUgICAgICAgICAweDIwNQ0KKyNkZWZpbmUgTVJGMjRKNDBfUkZDT042ICAgICAgICAgMHgyMDYNCisjZGVmaW5lIE1SRjI0SjQwX1JGQ09ONyAgICAgICAgIDB4MjA3DQorI2RlZmluZSBNUkYyNEo0MF9SRkNPTjggICAgICAgICAweDIwOA0KKyNkZWZpbmUgTVJGMjRKNDBfUkZTVEFURSAgICAgICAgMHgyMEYNCisNCisjZGVmaW5lIE1SRjI0SjQwX1JTU0kgICAgICAgICAgIDB4MjEwDQorI2RlZmluZSBNUkYyNEo0MF9TTFBDT04wICAgICAgICAweDIxMQ0KKyNkZWZpbmUgTVJGMjRKNDBfU0xQQ09OMSAgICAgICAgMHgyMjANCisNCisjZGVmaW5lIE1SRjI0SjQwX1dBS0VUSU1FTCAgICAgIDB4MjIyDQorI2RlZmluZSBNUkYyNEo0MF9XQUtFVElNRUggICAgICAweDIyMw0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfQUlOQ05UMCAgICAgICAgMHgyMjYNCisjZGVmaW5lIE1SRjI0SjQwX0FJTkNOVDEgICAgICAgIDB4MjI3DQorI2RlZmluZSBNUkYyNEo0MF9BSU5DTlQyICAgICAgICAweDIyOA0KKyNkZWZpbmUgTVJGMjRKNDBfQUlOQ05UMyAgICAgICAgMHgyMjkNCisNCisjZGVmaW5lIE1SRjI0SjQwX0FTU09FQURSMCAgICAgIDB4MjMwDQorI2RlZmluZSBNUkYyNEo0MF9BU1NPRUFEUjEgICAgICAweDIzMQ0KKyNkZWZpbmUgTVJGMjRKNDBfQVNTT0VBRFIyICAgICAgMHgyMzINCisjZGVmaW5lIE1SRjI0SjQwX0FTU09FQURSMyAgICAgIDB4MjMzDQorI2RlZmluZSBNUkYyNEo0MF9BU1NPRUFEUjQgICAgICAweDIzNA0KKyNkZWZpbmUgTVJGMjRKNDBfQVNTT0VBRFI1ICAgICAgMHgyMzUNCisjZGVmaW5lIE1SRjI0SjQwX0FTU09FQURSNiAgICAgIDB4MjM2DQorI2RlZmluZSBNUkYyNEo0MF9BU1NPRUFEUjcgICAgICAweDIzNw0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfQVNTT1NBRFIwICAgICAgMHgyMzgNCisjZGVmaW5lIE1SRjI0SjQwX0FTU09TQURSMSAgICAgIDB4MjM5DQorDQorI2RlZmluZSBNUkYyNEo0MF9VUE5PTkNFMCAgICAgICAweDI0MA0KKyNkZWZpbmUgTVJGMjRKNDBfVVBOT05DRTEgICAgICAgMHgyNDENCisjZGVmaW5lIE1SRjI0SjQwX1VQTk9OQ0UyICAgICAgIDB4MjQyDQorI2RlZmluZSBNUkYyNEo0MF9VUE5PTkNFMyAgICAgICAweDI0Mw0KKyNkZWZpbmUgTVJGMjRKNDBfVVBOT05DRTQgICAgICAgMHgyNDQNCisjZGVmaW5lIE1SRjI0SjQwX1VQTk9OQ0U1ICAgICAgIDB4MjQ1DQorI2RlZmluZSBNUkYyNEo0MF9VUE5PTkNFNiAgICAgICAweDI0Ng0KKyNkZWZpbmUgTVJGMjRKNDBfVVBOT05DRTcgICAgICAgMHgyNDcNCisjZGVmaW5lIE1SRjI0SjQwX1VQTk9OQ0U4ICAgICAgIDB4MjQ4DQorI2RlZmluZSBNUkYyNEo0MF9VUE5PTkNFOSAgICAgICAweDI0OQ0KKyNkZWZpbmUgTVJGMjRKNDBfVVBOT05DRTEwICAgICAgMHgyNEENCisjZGVmaW5lIE1SRjI0SjQwX1VQTk9OQ0UxMSAgICAgIDB4MjRCDQorI2RlZmluZSBNUkYyNEo0MF9VUE5PTkNFMTIgICAgICAweDI0Qw0KKw0KKy8qIExvbmcgQWRkcmVzcyBNZW1vcnkgTWFwICovDQorI2RlZmluZSBNUkYyNEo0MF9UWE5GSUZPICAgICAgICAweDAwMCAvKiAtIDB4MDdGLCAxMjggYnl0ZXMgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1RYQkZJRk8gICAgICAgIDB4MDgwIC8qIC0gMHgwRkYsIDEyOCBieXRlcyAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfVFhHMUZJRk8gICAgICAgMHgxMDAgLyogLSAweDE3RiwgMTI4IGJ5dGVzICovDQorI2RlZmluZSBNUkYyNEo0MF9UWEcyRklGTyAgICAgICAweDE4MCAvKiAtIDB4MUZGLCAxMjggYnl0ZXMgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1NFQ0tGSUZPICAgICAgIDB4MjgwIC8qIC0gMHgyQkYsIDY0IGJ5dGVzICovDQorI2RlZmluZSBNUkYyNEo0MF9TRUNLVFhORklGTyAgICAgICAgMHgyODAgLyogLSAweDI4RiwgMTYgYnl0ZXMgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1NFQ0tSWEZJRk8gICAgIDB4MkIwIC8qIC0gMHgyQkYsIDE2IGJ5dGVzICovDQorI2RlZmluZSBNUkYyNEo0MF9SWEZJRk8gICAgICAgICAweDMwMCAvKiAtIDB4MzhGLCAxNDQgYnl0ZXMgKi8NCisNCisNCisvKiBSWE1DUiAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfTk9BQ0tSU1AgICAgICAgKDE8PDUpDQorI2RlZmluZSBNUkYyNEo0MF9QQU5DT09SRCAgICAgICAoMTw8MykNCisjZGVmaW5lIE1SRjI0SjQwX0NPT1JEICAgICAgICAgICgxPDwyKQ0KKyNkZWZpbmUgTVJGMjRKNDBfRVJSUEtUICAgICAgICAgKDE8PDEpDQorI2RlZmluZSBNUkYyNEo0MF9QUk9NSSAgICAgICAgICAoMSkNCisNCisvKiBSWEZMVVNIICovDQorI2RlZmluZSBNUkYyNEo0MF9XQUtFUE9MICAgICAgICAoMTw8NikNCisjZGVmaW5lIE1SRjI0SjQwX1dBS0VQQUQgICAgICAgICgxPDw1KQ0KKyNkZWZpbmUgTVJGMjRKNDBfQ01ET05MWSAgICAgICAgKDE8PDMpDQorI2RlZmluZSBNUkYyNEo0MF9EQVRBT05MWSAgICAgICAoMTw8MikNCisjZGVmaW5lIE1SRjI0SjQwX0JDTk9OTFkgICAgICAgICgxPDwxKQ0KKyNkZWZpbmUgTVJGMjRKNDBfX1JYRkxVU0ggICAgICAgKDEpDQorDQorLyogVFhNQ1IgKi8NCisjZGVmaW5lIE1SRjI0SjQwX05PQ1NNQSAgICAgICAgICgxPDw3KQ0KKyNkZWZpbmUgTVJGMjRKNDBfQkFUTElGRVhUICAgICAgKDE8PDYpDQorI2RlZmluZSBNUkYyNEo0MF9TTE9UVEVEICAgICAgICAoMTw8NSkNCisjZGVmaW5lIE1SRjI0SjQwX01BQ01JTkJFKHgpICAgICAgICAoKHggJiAweDAzKTw8MykNCisjZGVmaW5lIE1SRjI0SjQwX0NTTUFCRih4KSAgICAgICh4ICYgMHgwNykNCisNCisvKiBBQ0tUTU9VVCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfRFJQQUNLICAgICAgICAgKDE8PDcpDQorDQorLyogUEFDT04yICovDQorI2RlZmluZSBNUkYyNEo0MF9GSUZPRU4gICAgICAgICAoMTw8NykNCisjZGVmaW5lIE1SRjI0SjQwX1RYT05UUyh4KSAgICAgICAgICAoeCAmIDB4M0YpDQorDQorLyogVFhOQ09OICovDQorI2RlZmluZSBNUkYyNEo0MF9GUFNUQVQgICAgICAgICAoMTw8NCkNCisjZGVmaW5lIE1SRjI0SjQwX0lORElSRUNUICAgICAgICgxPDwzKQ0KKyNkZWZpbmUgTVJGMjRKNDBfVFhOQUNLUkVRICAgICAgKDE8PDIpDQorI2RlZmluZSBNUkYyNEo0MF9UWE5TRUNFTiAgICAgICAoMTw8MSkNCisjZGVmaW5lIE1SRjI0SjQwX1RYTlRSSUcgICAgICAgICgxKQ0KKw0KKy8qIFRYUEVORCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfRlBBQ0sgICAgICAgICAgKDEpDQorDQorLyogV0FLRUNPTiAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfSU1NV0FLRSAgICAgICAgKDE8PDcpDQorI2RlZmluZSBNUkYyNEo0MF9SRUdXQUtFICAgICAgICAoMTw8NikNCisNCisvKiBUWFNUQVQgKi8NCisjZGVmaW5lIE1SRjI0SjQwX0NDQUZBSUwgICAgICAgICgxPDw1KQ0KKyNkZWZpbmUgTVJGMjRKNDBfVFhOU1RBVCAgICAgICAgKDEpDQorDQorLyogU09GVFJTVCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfUlNUUFdSICAgICAgICAgKDE8PDIpDQorI2RlZmluZSBNUkYyNEo0MF9SU1RCQiAgICAgICAgICAoMTw8MSkNCisjZGVmaW5lIE1SRjI0SjQwX1JTVE1BQyAgICAgICAgICgxKQ0KKw0KKy8qIFNFQ0NPTjAgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1NFQ0lHTk9SRSAgICAgICgxPDw3KQ0KKyNkZWZpbmUgTVJGMjRKNDBfU0VDU1RBUlQgICAgICAgKDE8PDYpDQorI2RlZmluZSBNUkYyNEo0MF9SWENJUEhFUih4KSAgICAgICAgKCh4ICYgMHgwNykgPDwgMykNCisjZGVmaW5lIE1SRjI0SjQwX1RYTkNJUEhFUih4KSAgICAgICAoKHggJiAweDA3KSkNCisNCisvKiBTRUNDT04xICovDQorI2RlZmluZSBNUkYyNEo0MF9ESVNERUMgICAgICAgICAoMTw8MSkNCisjZGVmaW5lIE1SRjI0SjQwX0RJU0VOQyAgICAgICAgICgxKQ0KKw0KKy8qIFRYU1RCTCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfUkZTVEJMKHgpICAgICAgKCh4ICYgMHgwZikgPDwgNCkNCisjZGVmaW5lIE1SRjI0SjQwX01TSUZTKHgpICAgICAgICgoeCAmIDB4MGYpKQ0KKw0KKy8qIFJYU1IgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1VQU0VDRVJSICAgICAgICgxPDw2KQ0KKyNkZWZpbmUgTVJGMjRKNDBfU0VDREVDRVJSICAgICAgKDE8PDIpDQorDQorLyogSU5UU1RBVCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfU0xQSUYgICAgICAgICAgKDE8PDcpDQorI2RlZmluZSBNUkYyNEo0MF9XQUtFSUYgICAgICAgICAoMTw8NikNCisjZGVmaW5lIE1SRjI0SjQwX0hTWU1UTVJJRiAgICAgICgxPDw1KQ0KKyNkZWZpbmUgTVJGMjRKNDBfU0VDSUYgICAgICAgICAgKDE8PDQpDQorI2RlZmluZSBNUkYyNEo0MF9SWElGICAgICAgICAgICAoMTw8MykNCisjZGVmaW5lIE1SRjI0SjQwX1RYRzJJRiAgICAgICAgICgxPDwyKQ0KKyNkZWZpbmUgTVJGMjRKNDBfVFhHMUlGICAgICAgICAgKDE8PDEpDQorI2RlZmluZSBNUkYyNEo0MF9UWE5JRiAgICAgICAgICAoMSkNCisNCisvKiBJTlRDT04gKi8NCisjZGVmaW5lIE1SRjI0SjQwX1NMUElFICAgICAgICAgICgxPDw3KQ0KKyNkZWZpbmUgTVJGMjRKNDBfV0FLRUlFICAgICAgICAgKDE8PDYpDQorI2RlZmluZSBNUkYyNEo0MF9IU1lNVE1SSUUgICAgICAoMTw8NSkNCisjZGVmaW5lIE1SRjI0SjQwX1NFQ0lFICAgICAgICAgICgxPDw0KQ0KKyNkZWZpbmUgTVJGMjRKNDBfUlhJRSAgICAgICAgICAgKDE8PDMpDQorI2RlZmluZSBNUkYyNEo0MF9UWEcySUUgICAgICAgICAoMTw8MikNCisjZGVmaW5lIE1SRjI0SjQwX1RYRzFJRSAgICAgICAgICgxPDwxKQ0KKyNkZWZpbmUgTVJGMjRKNDBfVFhOSUUgICAgICAgICAgKDEpDQorDQorLyogU0xQQUNLICovDQorI2RlZmluZSBNUkYyNEo0MF9fU0xQQUNLICAgICAgICAoMTw8NykNCisjZGVmaW5lIE1SRjI0SjQwX1dBS0VDTlRfTCh4KSAgICAgICAoeCAmIDB4MDNGKQ0KKw0KKy8qIFJGQ1RMICovDQorI2RlZmluZSBNUkYyNEo0MF9XQUtFQ05UX0goeCkgICAgICAgKCh4ICYgMHgwMykgPDwgMykNCisjZGVmaW5lIE1SRjI0SjQwX1JGUlNUICAgICAgICAgICgxPDwyKQ0KKyNkZWZpbmUgTVJGMjRKNDBfUkZUWE1PREUgICAgICAgKDE8PDEpDQorI2RlZmluZSBNUkYyNEo0MF9SRlJYTU9ERSAgICAgICAoMSkNCisNCisvKiBTRUNDUjIgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1VQREVDICAgICAgICAgICgxPDw3KQ0KKyNkZWZpbmUgTVJGMjRKNDBfVVBFTkMgICAgICAgICAgKDE8PDYpDQorDQorLyogQkJSRUcwICovDQorI2RlZmluZSBNUkYyNEo0MF9UVVJCTyAgICAgICAgICAoMSkNCisNCisvKiBCQlJFRzEgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1JYREVDSU5WICAgICAgICgxPDwyKQ0KKw0KKy8qIEJCUkVHMiAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfQ0NBTU9ERSh4KSAgICAgKCh4ICYgMHgwMykgPDw2KQ0KKyNkZWZpbmUgTVJGMjRKNDBfQ0NBU1RIKHgpICAgICAgKCh4ICYgMHgwRikgPDwyKQ0KKw0KKy8qIEJCUkVHMyAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfUFJFVkFMSURUSCh4KSAgICAgICgoeCAmIDB4MEYpIDw8NCkNCisNCisvKiBCQlJFRzQgKi8NCisjZGVmaW5lIE1SRjI0SjQwX0NTVEgoeCkgICAgICAgICgoeCAmIDB4MDcpIDw8IDUpDQorDQorLyogQkJSRUc2ICovDQorI2RlZmluZSBNUkYyNEo0MF9SU1NJTU9ERTEgICAgICAoMSA8PCA3KQ0KKyNkZWZpbmUgTVJGMjRKNDBfUlNTSU1PREUyICAgICAgKDE8PDYpDQorI2RlZmluZSBNUkYyNEo0MF9SU1NJUkRZICAgICAgICAoMSkNCisNCisvKiBSRkNPTjAgKi8NCisjZGVmaW5lIE1SRjI0SjQwX0NIQU5ORUwoeCkgICAgICgoeCAmIDB4MEYpIDw8IDQpDQorI2RlZmluZSBNUkYyNEo0MF9SRk9QVCh4KSAgICAgICAoKHggJiAweDBGKSkNCisNCisvKiBSRkNPTjEgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1ZDT09QVCh4KSAgICAgICgoeCAmIDB4RkYpKQ0KKw0KKy8qIFJGQ09OMiAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfUExMRU4gICAgICAgICAgKDE8PDcpDQorDQorLyogUkZDT04zICovDQorI2RlZmluZSBNUkYyNEo0MF9UWFBXUkwoeCkgICAgICAoKHggJiAweDAzKSA8PCA2KQ0KKyNkZWZpbmUgTVJGMjRKNDBfVFhQV1JTKHgpICAgICAgKCh4ICYgMHgwNykgPDwgMykNCisNCisvKiBSRkNPTjYgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1RYRklMICAgICAgICAgICgxIDw8IDcpDQorI2RlZmluZSBNUkYyNEo0MF9fMjBNUkVDVlIgICAgICAgICAgKDEgPDwgNCkNCisjZGVmaW5lIE1SRjI0SjQwX0JBVEVOICAgICAgICAgICAgICAoMSA8PCAzKQ0KKw0KKy8qIFJGQ09OIDcgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1NMUENMS1NFTCh4KSAgICAgICAoKHggJiAweDAzKSA8PCA2KQ0KKyNkZWZpbmUgTVJGMjRKNDBfU0xQQ0xLU0VMXzEwMGsgICAgIChNUkYyNEo0MF9TTFBDTEtTRUwoMHgwMikpDQorI2RlZmluZSBNUkYyNEo0MF9TTFBDTEtTRUxfMzJrICAgICAgKE1SRjI0SjQwX1NMUENMS1NFTCgweDAxKSkNCisNCisvKiBSRkNPTjggKi8NCisjZGVmaW5lIE1SRjI0SjQwX1JGVkNPICAgICAgICAgICgxIDw8IDQpDQorDQorLyogU0xQQ09OMCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfU0xQQ0xLRU4gICAgICAgKDEpDQorDQorLyogU0xQQ09OMSAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfQ0xLT1VURElTICAgICAgKDEgPDwgNSkgICAgLyogQ0xLT1VURU4nICovDQorI2RlZmluZSBNUkYyNEo0MF9TTFBDTEtESVYoeCkgICAgICAgKCh4ICYgMHgxRikpICAgIC8qIGRpdmlzaW9uIHJhdGlvOiAyXihTTFBDTEtESVYpICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQordWludDhfdCBtcmYyNGo0MF9yZWFkX2xvbmdfY3RybF9yZWcodWludDE2X3QgYWRkcik7DQordWludDhfdCBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKHVpbnQ4X3QgYWRkcik7DQordm9pZCBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKHVpbnQxNl90IGFkZHIsIHVpbnQ4X3QgdmFsdWUpOw0KK3ZvaWQgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcodWludDhfdCBhZGRyLCB1aW50OF90IHZhbHVlKTsNCit2b2lkIG1yZjI0ajQwX3J4Zmlmb19mbHVzaCh2b2lkKTsNCit1aW50OF90IG1yZjI0ajQwX2dldF9wZW5kaW5nX2ZyYW1lKHZvaWQpOw0KK3ZvaWQgbXJmMjRqNDBfaGFyZF9yZXNldCh2b2lkKTsNCit2b2lkIG1yZjI0ajQwX2luaXRpYWxpemUodm9pZCk7DQordm9pZCBtcmYyNGo0MF9zbGVlcCgpOw0KK3ZvaWQgbXJmMjRqNDBfd2FrZXVwKCk7DQordm9pZCBtcmYyNGo0MF9zZXRfc2hvcnRfYWRkcih1aW50OF90ICphZGRyKTsNCit2b2lkIG1yZjI0ajQwX3NldF9jb29yZGluYXRvcl9zaG9ydF9hZGRyKHVpbnQ4X3QgKmFkZHIpOw0KK3ZvaWQgbXJmMjRqNDBfc2V0X2Nvb3JkaW5hdG9yX2V1aSh1aW50OF90ICpldWkpOw0KK3ZvaWQgbXJmMjRqNDBfc2V0X2V1aSh1aW50OF90ICpldWkpOw0KK3ZvaWQgbXJmMjRqNDBfc2V0X3Bhbih1aW50OF90ICpwYW4pOw0KK3ZvaWQgbXJmMjRqNDBfc2V0X2tleSh1aW50MTZfdCBhZGRyZXNzLCB1aW50OF90ICprZXkpOw0KKyNkZWZpbmUgbXJmMjRqNDBfdHhfa2V5KGtleSkgbXJmMjRqNDBfc2V0X2tleShTRUNLVFhORklGTywga2V5KTsNCisjZGVmaW5lIG1yZjI0ajQwX3J4X2tleShrZXkpIG1yZjI0ajQwX3NldF9rZXkoU0VDS1JYRklGTywga2V5KTsNCit2b2lkIG1yZjI0ajQwX3NldF9jaGFubmVsKGludDE2X3QgY2gpOw0KK3ZvaWQgbXJmMjRqNDBfc2V0X3Byb21pc2N1b3VzKGJvb2wgY3JjX2NoZWNrKTsNCit2b2lkIG1yZjI0ajQwX3NldF9jb29yZGluYXRvcih2b2lkKTsNCit2b2lkIG1yZjI0ajQwX2NsZWFyX2Nvb3JkaW5hdG9yKHZvaWQpOw0KK3ZvaWQgbXJmMjRqNDBfdHhwa3QodWludDhfdCAqZnJhbWUsIGludDE2X3QgaGRyX2xlbiwgaW50MTZfdCBzZWNfaGRyX2xlbiwgaW50MTZfdCBwYXlsb2FkX2xlbik7DQordm9pZCBtcmYyNGo0MF9zZXRfY2lwaGVyKHVpbnQ4X3QgcnhjaXBoZXIsIHVpbnQ4X3QgdHhjaXBoZXIpOw0KK2Jvb2wgbXJmMjRqNDBfcnhfc2VjX2ZhaWwoKTsNCit1aW50OF90IG1yZjI0ajQwX2dldF9jaGFubmVsKHZvaWQpOw0KK2ludDE2X3QgbXJmMjRqNDBfaW50X3Rhc2tzKHZvaWQpOw0KK2ludDE2X3QgbXJmMjRqNDBfcnhwa3RfaW50Y2IodWludDhfdCAqYnVmLCB1aW50OF90ICpwbHFpLCB1aW50OF90ICpwcnNzaSk7DQoraW50MTZfdCBtcmYyNGo0MF90eHBrdF9pbnRjYih2b2lkKTsNCit2b2lkIG1yZjI0ajQwX3NlY19pbnRjYihib29sIGFjY2VwdCk7DQorDQordm9pZCBtcmYyNGo0MF90eGZpZm9fd3JpdGUodWludDE2X3QgYWRkcmVzcywgdWludDhfdCAqZGF0YSwgdWludDhfdCBoZHJfbGVuLCB1aW50OF90IGxlbik7DQordm9pZCBtcmYyNGo0MF90cmFuc21pdCh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9NUkYyNEo0MF9IXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3BtcmYvcG1yZi5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svcG1yZi9wbXJmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwNTM3ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3BtcmYvcG1yZi5jCkBAIC0wLDAgKzEsMzczIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE2LTA3LTE4DQorICogXGF1dGhvciBRaWFuZyBHdShRaWFuZy5HdUBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIEJPQVJEX0VNU0tfRFJWX1BNT0RSRiAgIEVNU0sgUE1PRCBSRiBEcml2ZXINCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSSVZFUg0KKyAqIFxicmllZiAgIEVNU0sgUG1vZCBSRiBEcml2ZXINCisgKiBcZGV0YWlscw0KKyAqICAgICAgUmVhbGl6ZSB0aGUgRU1TSyBib2FyZCBQTU9EIFJGIGRyaXZlcg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfUE1PRFJGDQorICogXGJyaWVmICAgUG1vZCBSRiBkcml2ZXIgZm9yIGVtc2sgYm9hcmQNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfUE1PRFJGDQorICogQHsNCisgKi8NCisjaW5jbHVkZSA8c3RkZGVmLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyYy5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19idWlsdGluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfZXJyb3IuaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmgiDQorDQorI2luY2x1ZGUgImJvYXJkL2JvYXJkLmgiDQorDQorI2luY2x1ZGUgImRldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfZ3Bpby5oIg0KKyNpbmNsdWRlICJkZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X3NwaS5oIg0KKw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL3BtcmYvcG1yZi5oIg0KKw0KKyNkZWZpbmUgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorDQorc3RhdGljIERFVl9TUElfUFRSIHBtcmZfc3BpX3B0cjsNCitzdGF0aWMgREVWX0dQSU9fUFRSIHBtcmZfZ3Bpb19wdHI7DQorc3RhdGljIHVpbnQzMl90IGNzX2xpbmUgPSBFTVNLX1BNUkZfMF9TUElfTElORTsNCisNCit2b2lkIHBtcmZfd2FrZV9waW4odWludDMyX3QgZmxhZykNCit7DQorICAgIGlmIChmbGFnID09IDEpDQorICAgIHsNCisgICAgICAgIHBtcmZfZ3Bpb19wdHItPmdwaW9fd3JpdGUoTVJGMjRKNDBfV0FLRV9PTiwgTVJGMjRKNDBfV0FLRV9QSU4pOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcG1yZl9ncGlvX3B0ci0+Z3Bpb193cml0ZShNUkYyNEo0MF9XQUtFX09GRiwgTVJGMjRKNDBfV0FLRV9QSU4pOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgcG1yZl9jc19waW4odWludDMyX3QgZmxhZykNCit7DQorICAgIHVpbnQzMl90IGNwdV9zdGF0dXM7DQorDQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKyNlbmRpZg0KKw0KKyAgICBpZiAoZmxhZyA9PSAxKQ0KKyAgICB7DQorICAgICAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX0RTRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9TRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyAgICB9DQorDQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoY3B1X3N0YXR1cyk7DQorI2VuZGlmDQorfQ0KKw0KK3ZvaWQgcG1yZl9yZXNldF9waW4odWludDMyX3QgZmxhZykNCit7DQorICAgIGlmIChmbGFnID09IDEpDQorICAgIHsNCisgICAgICAgIHBtcmZfZ3Bpb19wdHItPmdwaW9fd3JpdGUoTVJGMjRKNDBfUlNUX0hJR0gsIE1SRjI0SjQwX1JTVF9QSU4pOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcG1yZl9ncGlvX3B0ci0+Z3Bpb193cml0ZShNUkYyNEo0MF9SU1RfTE9XLCBNUkYyNEo0MF9SU1RfUElOKTsNCisgICAgfQ0KK30NCisNCit1aW50OF90IHBtcmZfcmVhZF9sb25nX2N0cmxfcmVnKHVpbnQxNl90IGFkZHIpDQorew0KKyAgICB1aW50OF90IG1zZ1syXTsNCisgICAgdWludDhfdCByZXRfdmFsOw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIHBtcmZfeGZlcjsNCisgICAgdWludDMyX3QgY3B1X3N0YXR1czsNCisNCisgICAgbXNnWzBdID0gKHVpbnQ4X3QpKCgoYWRkciA+PiAzKSAmIDB4N0YpIHwgMHg4MCk7DQorICAgIG1zZ1sxXSA9ICh1aW50OF90KSgoYWRkciA8PCA1KSAmIDB4RTApOw0KKw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKCZwbXJmX3hmZXIsIG1zZywgMCwgMik7DQorICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJnBtcmZfeGZlciwgJnJldF92YWwsIDIsIDEpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJnBtcmZfeGZlciwgTlVMTCk7DQorDQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKyNlbmRpZg0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX1NFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9UUkFOU0ZFUl9QT0xMSU5HLCBDT05WMlZPSUQoJnBtcmZfeGZlcikpOw0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX0RTRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyNpZmRlZiBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisgICAgY3B1X3VubG9ja19yZXN0b3JlKGNwdV9zdGF0dXMpOw0KKyNlbmRpZg0KKw0KKyAgICByZXR1cm4gcmV0X3ZhbDsNCit9DQorDQordWludDhfdCBwbXJmX3JlYWRfc2hvcnRfY3RybF9yZWcodWludDhfdCBhZGRyKQ0KK3sNCisgICAgdWludDhfdCBtc2c7DQorICAgIHVpbnQ4X3QgcmV0X3ZhbDsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiBwbXJmX3hmZXI7DQorICAgIHVpbnQzMl90IGNwdV9zdGF0dXM7DQorDQorICAgIG1zZyA9ICgoKGFkZHIgPDwgMSkgJiAweDdFKSB8IDApOw0KKw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKCZwbXJmX3hmZXIsICZtc2csIDAsIDEpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZwbXJmX3hmZXIsICZyZXRfdmFsLCAxLCAxKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZwbXJmX3hmZXIsIE5VTEwpOw0KKw0KKyNpZmRlZiBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisgICAgY3B1X3N0YXR1cyA9IGNwdV9sb2NrX3NhdmUoKTsNCisjZW5kaWYNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9TRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfVFJBTlNGRVJfUE9MTElORywgQ09OVjJWT0lEKCZwbXJmX3hmZXIpKTsNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9EU0VMX0RFViwgQ09OVjJWT0lEKGNzX2xpbmUpKTsNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShjcHVfc3RhdHVzKTsNCisjZW5kaWYNCisNCisgICAgcmV0dXJuIHJldF92YWw7DQorDQorfQ0KKw0KK3ZvaWQgcG1yZl93cml0ZV9sb25nX2N0cmxfcmVnKHVpbnQxNl90IGFkZHIsIHVpbnQ4X3QgdmFsdWUpDQorew0KKyAgICB1aW50OF90IG1zZ1s0XTsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiBwbXJmX3hmZXI7DQorICAgIHVpbnQzMl90IGNwdV9zdGF0dXM7DQorDQorICAgIG1zZ1swXSA9ICh1aW50OF90KSgoKGFkZHIgPj4gMykgJiAweDdGKSB8IDB4ODApOw0KKyAgICBtc2dbMV0gPSAodWludDhfdCkoKChhZGRyIDw8IDUpICYgMHhFMCkgfCAoMSA8PCA0KSk7DQorICAgIG1zZ1syXSA9IHZhbHVlOw0KKyAgICBtc2dbM10gPSAweDA7ICAgLyogaGF2ZSB0byB3cml0ZSAxIG1vcmUgYnl0ZSwgd2h5ID8qLw0KKw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKCZwbXJmX3hmZXIsIG1zZywgMCwgNCk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJnBtcmZfeGZlciwgTlVMTCwgNCwgMCk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfTkVYVCgmcG1yZl94ZmVyLCBOVUxMKTsNCisNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV9zdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorI2VuZGlmDQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfU0VMX0RFViwgQ09OVjJWT0lEKGNzX2xpbmUpKTsNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX1RSQU5TRkVSX1BPTExJTkcsIENPTlYyVk9JRCgmcG1yZl94ZmVyKSk7DQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfRFNFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoY3B1X3N0YXR1cyk7DQorI2VuZGlmDQorfQ0KKw0KK3ZvaWQgcG1yZl93cml0ZV9zaG9ydF9jdHJsX3JlZyh1aW50OF90IGFkZHIsIHVpbnQ4X3QgdmFsdWUpDQorew0KKyAgICBERVZfU1BJX1RSQU5TRkVSIHBtcmZfeGZlcjsNCisgICAgdWludDhfdCBtc2dbM107DQorICAgIHVpbnQzMl90IGNwdV9zdGF0dXM7DQorDQorICAgIG1zZ1swXSA9ICgoKGFkZHIgPDwgMSkgJiAweDdFKSB8IDEpOw0KKyAgICBtc2dbMV0gPSB2YWx1ZTsNCisgICAgbXNnWzJdID0gMHgwOyAgIC8qIGhhdmUgdG8gd3JpdGUgMSBtb3JlIGJ5dGUsIHdoeSA/Ki8NCisNCisgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmcG1yZl94ZmVyLCBtc2csIDAsIDMpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZwbXJmX3hmZXIsIE5VTEwsIDMsIDApOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJnBtcmZfeGZlciwgTlVMTCk7DQorDQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKyNlbmRpZg0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX1NFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9UUkFOU0ZFUl9QT0xMSU5HLCBDT05WMlZPSUQoJnBtcmZfeGZlcikpOw0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX0RTRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyNpZmRlZiBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisgICAgY3B1X3VubG9ja19yZXN0b3JlKGNwdV9zdGF0dXMpOw0KKyNlbmRpZg0KKw0KK30NCisNCit2b2lkIHBtcmZfZGVsYXlfdXModWludDMyX3QgdXMpDQorew0KKyAgICB1aW50NjRfdCBzdGFydF91cywgdXNfZGVsYXllZDsNCisNCisgICAgdXNfZGVsYXllZCA9ICh1aW50NjRfdCl1czsNCisgICAgc3RhcnRfdXMgPSBib2FyZF9nZXRfY3VyX3VzKCk7DQorDQorICAgIHdoaWxlICgoYm9hcmRfZ2V0X2N1cl91cygpIC0gc3RhcnRfdXMpIDwgdXNfZGVsYXllZCk7DQorfQ0KKw0KK3ZvaWQgcG1yZl9kZWxheV9tcyh1aW50MzJfdCBtcykNCit7DQorICAgIGJvYXJkX2RlbGF5X21zKG1zLCBPU1BfREVMQVlfT1NfQ09NUEFUX0RJU0FCTEUpOw0KK30NCisNCisvKiBuZWVkIHRlc3QgKi8NCit2b2lkIHBtcmZfc2V0X2tleSh1aW50MTZfdCBhZGRyLCB1aW50OF90ICprZXkpDQorew0KKyAgICB1aW50OF90IG1zZ1sxNiArIDJdOw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIHBtcmZfeGZlcjsNCisgICAgdWludDMyX3QgY3B1X3N0YXR1czsNCisgICAgdWludDhfdCBpOw0KKw0KKyAgICBtc2dbMF0gPSAodWludDhfdCkoKChhZGRyID4+IDMpICYgMHg3RikgfCAweDgwKTsNCisgICAgbXNnWzFdID0gKHVpbnQ4X3QpKCgoYWRkciA8PCA1KSAmIDB4RTApIHwgKDEgPDwgNCkpOw0KKw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykNCisgICAgew0KKyAgICAgICAgbXNnW2kgKyAyXSA9IGtleVswXTsNCisgICAgfQ0KKw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKCZwbXJmX3hmZXIsIG1zZywgMCwgMTgpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZwbXJmX3hmZXIsIE5VTEwsIDE4LCAwKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZwbXJmX3hmZXIsIE5VTEwpOw0KKw0KKyNpZmRlZiBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisgICAgY3B1X3N0YXR1cyA9IGNwdV9sb2NrX3NhdmUoKTsNCisjZW5kaWYNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9TRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfVFJBTlNGRVJfUE9MTElORywgQ09OVjJWT0lEKCZwbXJmX3hmZXIpKTsNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9EU0VMX0RFViwgQ09OVjJWT0lEKGNzX2xpbmUpKTsNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShjcHVfc3RhdHVzKTsNCisjZW5kaWYNCit9DQorDQorLyogbmVlZCB0ZXN0ICovDQordm9pZCBwbXJmX3R4cGt0X2ZyYW1lX3dyaXRlKHVpbnQ4X3QgKmZyYW1lLCBpbnQxNl90IGhkcl9sZW4sIGludDE2X3QgZnJhbWVfbGVuKQ0KK3sNCisgICAgdWludDhfdCBtc2dbZnJhbWVfbGVuICsgMiArIDJdOw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIHBtcmZfeGZlcjsNCisgICAgdWludDMyX3QgY3B1X3N0YXR1czsNCisgICAgdWludDhfdCBpID0gMDsNCisNCisgICAgbXNnWzBdID0gKHVpbnQ4X3QpKCgoTVJGMjRKNDBfVFhORklGTyA+PiAzKSAmIDB4N0YpIHwgMHg4MCk7DQorICAgIG1zZ1sxXSA9ICh1aW50OF90KSgoKE1SRjI0SjQwX1RYTkZJRk8gPDwgNSkgJiAweEUwKSB8ICgxIDw8IDQpKTsNCisgICAgbXNnWzJdID0gKHVpbnQ4X3QpaGRyX2xlbjsNCisgICAgbXNnWzNdID0gKHVpbnQ4X3QpZnJhbWVfbGVuOw0KKw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhbWVfbGVuOyBpKyspDQorICAgIHsNCisgICAgICAgIG1zZ1tpICsgNF0gPSAqZnJhbWU7DQorICAgICAgICBmcmFtZSsrOw0KKyAgICB9DQorDQorICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJnBtcmZfeGZlciwgbXNnLCAwLCBmcmFtZV9sZW4gKyAyICsgMik7DQorICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJnBtcmZfeGZlciwgTlVMTCwgZnJhbWVfbGVuICsgMiArIDIsIDApOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJnBtcmZfeGZlciwgTlVMTCk7DQorDQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKyNlbmRpZg0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX1NFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9UUkFOU0ZFUl9QT0xMSU5HLCBDT05WMlZPSUQoJnBtcmZfeGZlcikpOw0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX0RTRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyNpZmRlZiBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisgICAgY3B1X3VubG9ja19yZXN0b3JlKGNwdV9zdGF0dXMpOw0KKyNlbmRpZg0KK30NCisNCisvKiBuZWVkIHRlc3QgKi8NCit2b2lkIHBtcmZfcnhwa3RfaW50Y2JfZnJhbWVfcmVhZCh1aW50OF90ICpidWYsIHVpbnQ4X3QgbGVuZ3RoKQ0KK3sNCisgICAgdWludDhfdCBtc2dbbGVuZ3RoXTsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiBwbXJmX3hmZXI7DQorICAgIHVpbnQzMl90IGNwdV9zdGF0dXM7DQorDQorICAgIG1zZ1swXSA9ICh1aW50OF90KSgoKChNUkYyNEo0MF9SWEZJRk8gKyAxKSA+PiAzKSAmIDB4N0YpIHwgMHg4MCk7DQorICAgIG1zZ1sxXSA9ICh1aW50OF90KSgoKE1SRjI0SjQwX1JYRklGTyArIDEpIDw8IDUpICYgMHhFMCk7DQorDQorICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJnBtcmZfeGZlciwgbXNnLCAwLCAyKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRigmcG1yZl94ZmVyLCBidWYsIDIsIGxlbmd0aCk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfTkVYVCgmcG1yZl94ZmVyLCBOVUxMKTsNCisNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV9zdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorI2VuZGlmDQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfU0VMX0RFViwgQ09OVjJWT0lEKGNzX2xpbmUpKTsNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX1RSQU5TRkVSX1BPTExJTkcsIENPTlYyVk9JRCgmcG1yZl94ZmVyKSk7DQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfRFNFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoY3B1X3N0YXR1cyk7DQorI2VuZGlmDQorDQorfQ0KKw0KK3ZvaWQgcG1yZl9hbGxfaW5zdGFsbCh2b2lkKQ0KK3sNCisgICAgcG1yZl9zcGlfcHRyID0gc3BpX2dldF9kZXYoRU1TS19QTVJGXzBfU1BJX0lEKTsNCisgICAgcG1yZl9ncGlvX3B0ciA9IGdwaW9fZ2V0X2RldihFTVNLX1BNUkZfMF9HUElPX0lEKTsNCit9DQorDQordm9pZCBwbXJmX3R4Zmlmb193cml0ZSh1aW50MTZfdCBhZGRyZXNzLCB1aW50OF90ICpkYXRhLCB1aW50OF90IGhkcl9sZW4sIHVpbnQ4X3QgbGVuKQ0KK3sNCisgICAgdWludDhfdCBtc2dbbGVuICsgNF07DQorICAgIERFVl9TUElfVFJBTlNGRVIgcG1yZl94ZmVyOw0KKyAgICB1aW50MzJfdCBjcHVfc3RhdHVzOw0KKyAgICB1aW50OF90IGkgPSAwOw0KKw0KKyAgICBtc2dbMF0gPSAodWludDhfdCkoKChhZGRyZXNzID4+IDMpICYgMHg3RikgfCAweDgwKTsNCisgICAgbXNnWzFdID0gKHVpbnQ4X3QpKCgoYWRkcmVzcyA8PCA1KSAmIDB4RTApIHwgKDEgPDwgNCkpOw0KKyAgICBtc2dbMl0gPSBoZHJfbGVuOw0KKyAgICBtc2dbM10gPSBsZW47DQorDQorICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykNCisgICAgew0KKyAgICAgICAgbXNnW2kgKyA0XSA9ICooZGF0YSArIGkpOw0KKyAgICB9DQorDQorICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJnBtcmZfeGZlciwgbXNnLCAwLCBsZW4gKyA0KTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRigmcG1yZl94ZmVyLCBOVUxMLCBsZW4gKyA0LCAwKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZwbXJmX3hmZXIsIE5VTEwpOw0KKw0KKw0KKyNpZmRlZiBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisgICAgY3B1X3N0YXR1cyA9IGNwdV9sb2NrX3NhdmUoKTsNCisjZW5kaWYNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9TRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfVFJBTlNGRVJfUE9MTElORywgQ09OVjJWT0lEKCZwbXJmX3hmZXIpKTsNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9EU0VMX0RFViwgQ09OVjJWT0lEKGNzX2xpbmUpKTsNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShjcHVfc3RhdHVzKTsNCisjZW5kaWYNCisNCit9DQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0RSVl9QTU9EUkYgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9wbXJmL3BtcmYuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3BtcmYvcG1yZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMTYyMmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9wbXJmL3BtcmYuaApAQCAtMCwwICsxLDExMCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNi0wNy0xOA0KKyAqIFxhdXRob3IgUWlhbmcgR3UoUWlhbmcuR3VAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfUE1PRFJGDQorICogXGJyaWVmICAgaGVhZGVyIGZpbGUgb2YgUG1vZCBNUkYyNEo0ME1BIGRyaXZlciBmb3IgRU1TSyBib2FyZA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9QTU9EUkYNCisgKiBAew0KKyAqLw0KKw0KKyNpZm5kZWYgX1BNUkZfSF8NCisjZGVmaW5lIF9QTVJGX0hfDQorDQorLyoqIE1SRjI0SjQwIEZ1bmN0aW9ucyAqLw0KKw0KKyNkZWZpbmUgbXJmMjRqNDBfcmVzZXRfcGluKHZhbCkgICAgIHBtcmZfcmVzZXRfcGluKHZhbCkNCisjZGVmaW5lIG1yZjI0ajQwX3dha2VfcGluKHZhbCkgICAgICBwbXJmX3dha2VfcGluKHZhbCkNCisjZGVmaW5lIG1yZjI0ajQwX2NzX3Bpbih2YWwpICAgICAgICBwbXJmX2NzX3Bpbih2YWwpDQorDQorI2RlZmluZSBtcmYyNGo0MF9kZWxheV91cyh2YWwpICAgICAgcG1yZl9kZWxheV91cyh2YWwpDQorI2RlZmluZSBtcmYyNGo0MF9kZWxheV9tcyh2YWwpICAgICAgcG1yZl9kZWxheV9tcyh2YWwpDQorDQorDQorLyoqIFBNT0QgUkYgU1BJIEZSRVEgJiBDTEsgTU9ERSBTRVRUSU5HUyAqLw0KKyNkZWZpbmUgRU1TS19QTVJGXzBfU1BJRlJFUSAgICAgQk9BUkRfU1BJX0ZSRVENCisjZGVmaW5lIEVNU0tfUE1SRl8wX1NQSUNMS01PREUgICAgICBCT0FSRF9TUElfQ0xLTU9ERQ0KKw0KKy8qKiBQTU9EIFJGIFNQSSBJRCAqLw0KKyNkZWZpbmUgRU1TS19QTVJGXzBfU1BJX0lEICAgICAgRFdfU1BJXzBfSUQNCisNCisvKiogVXNlIEo2IGJ5IGRlZmF1bHQsIE1SRjI0SjQwIFBJTiAqLw0KKyNkZWZpbmUgRU1TS19QTVJGXzBfU1BJX0xJTkUgICAgICAgIEVNU0tfU1BJX0xJTkVfMA0KKyNkZWZpbmUgRU1TS19QTVJGXzBfR1BJT19JRCAgICAgRU1TS19HUElPX1BPUlRfQQ0KKyNkZWZpbmUgTVJGMjRKNDBfV0FLRV9QSU4gICAgICAgKDEgPDwgMzApDQorI2RlZmluZSBNUkYyNEo0MF9SU1RfUElOICAgICAgICAoMSA8PCAyOSkNCisjZGVmaW5lIE1SRjI0SjQwX0lOVF9QSU4gICAgICAgICgxIDw8IDI4KQ0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfV0FLRV9PRkYgICAgICAgKDAgPDwgMzApDQorI2RlZmluZSBNUkYyNEo0MF9XQUtFX09OICAgICAgICAoMSA8PCAzMCkNCisNCisjZGVmaW5lIE1SRjI0SjQwX1JTVF9MT1cgICAgICAgICgwIDw8IDI5KQ0KKyNkZWZpbmUgTVJGMjRKNDBfUlNUX0hJR0ggICAgICAgKDEgPDwgMjkpDQorDQorI2RlZmluZSBNUkYyNEo0MF9JTlRfUElOX09GUyAgICAgICAgKDI4KQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK2V4dGVybiB2b2lkIHBtcmZfcmVzZXRfcGluKHVpbnQzMl90IGZsYWcpOw0KK2V4dGVybiB2b2lkIHBtcmZfd2FrZV9waW4odWludDMyX3QgZmxhZyk7DQorZXh0ZXJuIHZvaWQgcG1yZl9jc19waW4odWludDMyX3QgZmxhZyk7DQorDQorZXh0ZXJuIHVpbnQ4X3QgcG1yZl9yZWFkX2xvbmdfY3RybF9yZWcodWludDE2X3QgYWRkcik7DQorZXh0ZXJuIHVpbnQ4X3QgcG1yZl9yZWFkX3Nob3J0X2N0cmxfcmVnKHVpbnQ4X3QgYWRkcik7DQorZXh0ZXJuIHZvaWQgcG1yZl93cml0ZV9sb25nX2N0cmxfcmVnKHVpbnQxNl90IGFkZHIsIHVpbnQ4X3QgdmFsdWUpOw0KK2V4dGVybiB2b2lkIHBtcmZfd3JpdGVfc2hvcnRfY3RybF9yZWcodWludDhfdCBhZGRyLCB1aW50OF90IHZhbHVlKTsNCitleHRlcm4gdm9pZCBwbXJmX3NwaV93cml0ZSh1aW50OF90IGRhdGEpOw0KK2V4dGVybiB2b2lkIHBtcmZfZGVsYXlfdXModWludDMyX3QgdXMpOw0KK2V4dGVybiB2b2lkIHBtcmZfZGVsYXlfbXModWludDMyX3QgbXMpOw0KKw0KK2V4dGVybiB2b2lkIHBtcmZfc2V0X2tleSh1aW50MTZfdCBhZGRyZXNzLCB1aW50OF90ICprZXkpOw0KK2V4dGVybiB2b2lkIHBtcmZfdHhwa3RfZnJhbWVfd3JpdGUodWludDhfdCAqZnJhbWUsIGludDE2X3QgaGRyX2xlbiwgaW50MTZfdCBmcmFtZV9sZW4pOw0KK2V4dGVybiB2b2lkIHBtcmZfcnhwa3RfaW50Y2JfZnJhbWVfcmVhZCh1aW50OF90ICpidWYsIHVpbnQ4X3QgbGVuZ3RoKTsNCisNCitleHRlcm4gdm9pZCBwbXJmX2FsbF9pbnN0YWxsKHZvaWQpOw0KKw0KK2V4dGVybiB2b2lkIHBtcmZfdHhmaWZvX3dyaXRlKHVpbnQxNl90IGFkZHJlc3MsIHVpbnQ4X3QgKmRhdGEsIHVpbnQ4X3QgaGRyX2xlbiwgdWludDhfdCBsZW4pOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX1BNUkZfSF8gKi8NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX1BNT0RSRiAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaS9kd19zcGlfb2JqLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9zcGkvZHdfc3BpX29iai5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MTY3NWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9zcGkvZHdfc3BpX29iai5jCkBAIC0wLDAgKzEsMzMzIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE0LTA3LTAzDQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBCT0FSRF9FTVNLX0RSVl9EV19TUElfT0JKICAgRU1TSyBEVyBTUEkgT2JqZWN0DQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUklWRVINCisgKiBcYnJpZWYgICBFTVNLIERlc2lnbndhcmUgU1BJIE9iamVjdHMNCisgKiBcZGV0YWlscw0KKyAqICAgICAgcmVhbGl6ZSB0aGUgRU1TSyBib2FyZCBzcGkgb2JqZWN0IHVzaW5nIGRlc2lnbndhcmUgc3BpIGRldmljZSBkcml2ZXIsDQorICogIG9ubHkgbmVlZCB0byByZWFsaXplIHNvbWUgZGVzaWdud2FyZSBzcGkgc3RydWN0dXJlcyBjb21iaW5lIHdpdGggRU1TSyBzcGkNCisgKiAgaGFyZHdhcmUgcmVzb3VyY2UuIGp1c3QgbGlrZSBjcHAgY2xhc3MgaW5zdGFudGlhdGlvbi4NCisgKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJWX0RXX1NQSV9PQkoNCisgKiBcYnJpZWYgICBkZXNpZ253YXJlIHNwaSBvYmplY3QgaW5zdGFudGlhdGlvbiBvbiBlbXNrDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgIEJPQVJEX0VNU0tfRFJWX0RXX1NQSV9PQkoNCisgKiBAew0KKyAqLw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyYy5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19idWlsdGluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfZXJyb3IuaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmgiDQorDQorI2luY2x1ZGUgImRldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGkuaCINCisjaW5jbHVkZSAiYm9hcmQvZW1zay9zcGkvZHdfc3BpX29iai5oIg0KKw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2Vtc2suaCINCisNCisjaWZkZWYgQVJDX0ZFQVRVUkVfRE1QX1BFUklQSEVSQUwNCisjZGVmaW5lIFBFUklQSEVSQUxfQkFTRSAgICAgQVJDX0ZFQVRVUkVfRE1QX1BFUklQSEVSQUwNCisjZWxzZQ0KKyNkZWZpbmUgUEVSSVBIRVJBTF9CQVNFICAgICBfYXJjX2F1eF9yZWFkKEFVWF9ETVBfUEVSSVBIRVJBTCkNCisjZW5kaWYNCisNCisvKioNCisgKiBcbmFtZSAgICBFTVNLIERlc2lnbldhcmUgU1BJIDAgT2JqZWN0IEluc3RhbnRpYXRpb24NCisgKiBAew0KKyAqLw0KKyNpZiAoVVNFX0RXX1NQSV8wKQ0KK3N0YXRpYyB2b2lkIGR3X3NwaV8wX2lzcih2b2lkICpwdHIpOw0KKyNkZWZpbmUgRFdfU1BJXzBfUkVMQkFTRSAgICAoUkVMX1JFR0JBU0VfU1BJMCkgIC8qITwgZGVzaWdud2FyZSBzcGkgMCByZWxhdGl2ZSBiYXNlYWRkciAqLw0KKyNkZWZpbmUgRFdfU1BJXzBfSU5UTk8gICAgICAoSU5UTk9fU1BJX01BU1RFUikgIC8qITwgZGVzaWdud2FyZSBzcGkgMCBpbnRlcnJ1cHQgbnVtYmVyICAqLw0KKw0KKyNkZWZpbmUgRFdfU1BJXzBfVFhfRklGT19MRU4gICAgKDMyKQ0KKyNkZWZpbmUgRFdfU1BJXzBfUlhfRklGT19MRU4gICAgKDMyKQ0KKw0KKyNkZWZpbmUgRFdfU1BJXzBfU1VQUE9SVEVEX01PREUgRFdfU1BJX01BU1RFUl9TVVBQT1JURUQNCisNCitERVZfU1BJICAgICAgICAgZHdfc3BpXzA7ICAgICAgICAgICAvKiE8IGRlc2lnbndhcmUgc3BpIG9iamVjdCAqLw0KK0RXX1NQSV9DVFJMICAgICBkd19zcGlfMF9jdHJsOyAgICAgICAgICAvKiE8IGRlc2lnbndhcmUgc3BpIDAgY3RybCAqLw0KKyNpZiBIV19WRVJTSU9OID49IDIyDQorc3RhdGljIHVpbnQzMl90IHNwaV9tc3RfY3NfY3RybF9jcmVnID0gMDsNCisjZW5kaWYNCisNCisvKiogZGVzaWdud2FyZSBzcGkgMCBvcGVuICovDQorc3RhdGljIGludDMyX3QgZHdfc3BpXzBfb3Blbih1aW50MzJfdCBtb2RlLCB1aW50MzJfdCBwYXJhbSkNCit7DQorICAgIHJldHVybiBkd19zcGlfb3BlbigmZHdfc3BpXzAsIG1vZGUsIHBhcmFtKTsNCit9DQorLyoqIGRlc2lnbndhcmUgc3BpIDAgY2xvc2UgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfMF9jbG9zZSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIGR3X3NwaV9jbG9zZSgmZHdfc3BpXzApOw0KK30NCisvKiogZGVzaWdud2FyZSBzcGkgMCBjb250cm9sICovDQorc3RhdGljIGludDMyX3QgZHdfc3BpXzBfY29udHJvbCh1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pDQorew0KKyNpZiBIV19WRVJTSU9OID49IDIyDQorICAgIGludDMyX3QgZXJjZDsNCisgICAgZXJjZCA9IGR3X3NwaV9jb250cm9sKCZkd19zcGlfMCwgY3RybF9jbWQsIHBhcmFtKTsNCisNCisgICAgaWYgKGN0cmxfY21kID09IFNQSV9DTURfTVNUX1NFTF9ERVYpDQorICAgIHsNCisgICAgICAgIF9hcmNfd3JpdGVfdW5jYWNoZWRfMzIoKHZvaWQgKilzcGlfbXN0X2NzX2N0cmxfY3JlZywgMSA8PCAoKHVpbnQzMl90KXBhcmFtKSk7DQorICAgIH0NCisgICAgZWxzZSBpZiAoY3RybF9jbWQgPT0gU1BJX0NNRF9NU1RfRFNFTF9ERVYpDQorICAgIHsNCisgICAgICAgIF9hcmNfd3JpdGVfdW5jYWNoZWRfMzIoKHZvaWQgKilzcGlfbXN0X2NzX2N0cmxfY3JlZywgMCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGVyY2Q7DQorI2Vsc2UNCisgICAgcmV0dXJuIGR3X3NwaV9jb250cm9sKCZkd19zcGlfMCwgY3RybF9jbWQsIHBhcmFtKTsNCisjZW5kaWYNCit9DQorLyoqIGRlc2lnbndhcmUgc3BpIDAgd3JpdGUgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfMF93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pDQorew0KKyAgICByZXR1cm4gZHdfc3BpX3dyaXRlKCZkd19zcGlfMCwgZGF0YSwgbGVuKTsNCit9DQorLyoqIGRlc2lnbndhcmUgc3BpIDAgY2xvc2UgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfMF9yZWFkKHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCit7DQorICAgIHJldHVybiBkd19zcGlfcmVhZCgmZHdfc3BpXzAsIGRhdGEsIGxlbik7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHNwaSAwIGludGVycnVwdCByb3V0aW5lICovDQorc3RhdGljIHZvaWQgZHdfc3BpXzBfaXNyKHZvaWQgKnB0cikNCit7DQorICAgIGR3X3NwaV9pc3IoJmR3X3NwaV8wLCBwdHIpOw0KK30NCisvKiogaW5zdGFsbCBkZXNpZ253YXJlIHNwaSAwIHRvIHN5c3RlbSAqLw0KK3N0YXRpYyB2b2lkIGR3X3NwaV8wX2luc3RhbGwodm9pZCkNCit7DQorICAgIHVpbnQzMl90IHNwaV9hYnNfYmFzZSA9IDA7DQorICAgIERFVl9TUEkgKmR3X3NwaV9wdHIgPSAmZHdfc3BpXzA7DQorICAgIERFVl9TUElfSU5GTyAqZHdfc3BpX2luZm9fcHRyID0gJihkd19zcGlfMC5zcGlfaW5mbyk7DQorICAgIERXX1NQSV9DVFJMICpkd19zcGlfY3RybF9wdHIgPSAmZHdfc3BpXzBfY3RybDsNCisgICAgRFdfU1BJX1JFRyAqZHdfc3BpX3JlZ19wdHI7DQorDQorICAgIC8qKg0KKyAgICAgKiBnZXQgYWJzb2x1dGUgZGVzaWdud2FyZSBiYXNlIGFkZHJlc3MNCisgICAgICovDQorICAgIHNwaV9hYnNfYmFzZSA9ICh1aW50MzJfdClQRVJJUEhFUkFMX0JBU0UgKyBEV19TUElfMF9SRUxCQVNFOw0KKw0KKyNpZiBIV19WRVJTSU9OID49IDIyDQorICAgIHNwaV9tc3RfY3NfY3RybF9jcmVnID0gc3BpX2Fic19iYXNlICsgUkVMX1JFR0JBU0VfU1BJX01TVF9DU19DVFJMOw0KKyNlbmRpZg0KKw0KKyAgICBkd19zcGlfcmVnX3B0ciA9IChEV19TUElfUkVHICopc3BpX2Fic19iYXNlOw0KKw0KKyAgICAvKiogc3BpIGluZm8gaW5pdCAqLw0KKyAgICBkd19zcGlfaW5mb19wdHItPnNwaV9jdHJsID0gKHZvaWQgKilkd19zcGlfY3RybF9wdHI7DQorICAgIGR3X3NwaV9pbmZvX3B0ci0+c3RhdHVzID0gREVWX0RJU0FCTEVEOw0KKyAgICBkd19zcGlfaW5mb19wdHItPmZyZXEgPSAxMDAwOw0KKyAgICBkd19zcGlfaW5mb19wdHItPm9wbl9jbnQgPSAwOw0KKyAgICBkd19zcGlfaW5mb19wdHItPm1vZGUgPSBERVZfTUFTVEVSX01PREU7DQorICAgIGR3X3NwaV9pbmZvX3B0ci0+Y2xrX21vZGUgPSBTUElfQ0xLX01PREVfREVGQVVMVDsNCisgICAgZHdfc3BpX2luZm9fcHRyLT5zbGF2ZSA9IFNQSV9TTEFWRV9OT1RfU0VMRUNURUQ7DQorICAgIGR3X3NwaV9pbmZvX3B0ci0+ZGZzID0gU1BJX0RGU19ERUZBVUxUOw0KKyAgICBkd19zcGlfaW5mb19wdHItPmR1bW15ID0gMHhmZjsNCisNCisgICAgLyogc3BpIGN0cmwgaW5pdCAqLw0KKyAgICAvKiBWYXJpYWJsZXMgd2hpY2ggc2hvdWxkIGJlIHNldCBkdXJpbmcgb2JqZWN0IGltcGxlbWVudGF0aW9uICovDQorICAgIGR3X3NwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3MgPSBkd19zcGlfcmVnX3B0cjsNCisgICAgZHdfc3BpX2N0cmxfcHRyLT5pbnRubyA9IERXX1NQSV8wX0lOVE5POw0KKyAgICBkd19zcGlfY3RybF9wdHItPnN1cHBvcnRfbW9kZXMgPSBEV19TUElfMF9TVVBQT1JURURfTU9ERTsNCisgICAgZHdfc3BpX2N0cmxfcHRyLT50eF9maWZvX2xlbiA9IERXX1NQSV8wX1RYX0ZJRk9fTEVOOw0KKyAgICBkd19zcGlfY3RybF9wdHItPnJ4X2ZpZm9fbGVuID0gRFdfU1BJXzBfVFhfRklGT19MRU47DQorICAgIGR3X3NwaV9jdHJsX3B0ci0+ZHdfYXBiX2J1c19mcmVxID0gQ0xLX0JVU19BUEI7DQorICAgIGR3X3NwaV9jdHJsX3B0ci0+ZHdfc3BpX2ludF9oYW5kbGVyID0gZHdfc3BpXzBfaXNyOw0KKyAgICAvKiBWYXJpYWJsZXMgd2hpY2ggYWx3YXlzIGNoYW5nZSBkdXJpbmcgc3BpIG9wZXJhdGlvbiAqLw0KKyAgICBkd19zcGlfY3RybF9wdHItPmludF9zdGF0dXMgPSAwOw0KKw0KKyAgICAvKiogc3BpIGRldiBpbml0ICovDQorICAgIGR3X3NwaV9wdHItPnNwaV9vcGVuID0gZHdfc3BpXzBfb3BlbjsNCisgICAgZHdfc3BpX3B0ci0+c3BpX2Nsb3NlID0gZHdfc3BpXzBfY2xvc2U7DQorICAgIGR3X3NwaV9wdHItPnNwaV9jb250cm9sID0gZHdfc3BpXzBfY29udHJvbDsNCisgICAgZHdfc3BpX3B0ci0+c3BpX3dyaXRlID0gZHdfc3BpXzBfd3JpdGU7DQorICAgIGR3X3NwaV9wdHItPnNwaV9yZWFkID0gZHdfc3BpXzBfcmVhZDsNCit9DQorI2VuZGlmIC8qIFVTRV9EV19TUElfMCAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIEVNU0sgRGVzaWduV2FyZSBTUEkgMSBPYmplY3QgSW5zdGFudGlhdGlvbg0KKyAqIEB7DQorICovDQorI2lmIChVU0VfRFdfU1BJXzEpDQorc3RhdGljIHZvaWQgZHdfc3BpXzFfaXNyKHZvaWQgKnB0cik7DQorI2RlZmluZSBEV19TUElfMV9SRUxCQVNFICAgIChSRUxfUkVHQkFTRV9TUEkxKSAgLyohPCBkZXNpZ253YXJlIHNwaSAxIHJlbGF0aXZlIGJhc2VhZGRyICovDQorI2RlZmluZSBEV19TUElfMV9JTlROTyAgICAgIChJTlROT19TUElfU0xBVkUpICAgLyohPCBkZXNpZ253YXJlIHNwaSAxIGludGVycnVwdCBudW1iZXIgICovDQorDQorI2RlZmluZSBEV19TUElfMV9UWF9GSUZPX0xFTiAgICAoMzIpDQorI2RlZmluZSBEV19TUElfMV9SWF9GSUZPX0xFTiAgICAoMzIpDQorDQorI2RlZmluZSBEV19TUElfMV9TVVBQT1JURURfTU9ERSBEV19TUElfU0xBVkVfU1VQUE9SVEVEDQorDQorREVWX1NQSSAgICAgICAgIGR3X3NwaV8xOyAgICAgICAgICAgLyohPCBkZXNpZ253YXJlIHNwaSAxIG9iamVjdCAqLw0KK0RXX1NQSV9DVFJMICAgICBkd19zcGlfMV9jdHJsOyAgICAgICAgICAvKiE8IGRlc2lnbndhcmUgc3BpIDEgY3RybCAqLw0KKw0KKy8qKiBkZXNpZ253YXJlIHNwaSAxIG9wZW4gKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfMV9vcGVuKHVpbnQzMl90IG1vZGUsIHVpbnQzMl90IHBhcmFtKQ0KK3sNCisgICAgcmV0dXJuIGR3X3NwaV9vcGVuKCZkd19zcGlfMSwgbW9kZSwgcGFyYW0pOw0KK30NCisvKiogZGVzaWdud2FyZSBzcGkgMSBjbG9zZSAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV8xX2Nsb3NlKHZvaWQpDQorew0KKyAgICByZXR1cm4gZHdfc3BpX2Nsb3NlKCZkd19zcGlfMSk7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHNwaSAxIGNvbnRyb2wgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfMV9jb250cm9sKHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSkNCit7DQorICAgIHJldHVybiBkd19zcGlfY29udHJvbCgmZHdfc3BpXzEsIGN0cmxfY21kLCBwYXJhbSk7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHNwaSAxIHdyaXRlICovDQorc3RhdGljIGludDMyX3QgZHdfc3BpXzFfd3JpdGUoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKQ0KK3sNCisgICAgcmV0dXJuIGR3X3NwaV93cml0ZSgmZHdfc3BpXzEsIGRhdGEsIGxlbik7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHNwaSAxIGNsb3NlICovDQorc3RhdGljIGludDMyX3QgZHdfc3BpXzFfcmVhZCh2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pDQorew0KKyAgICByZXR1cm4gZHdfc3BpX3JlYWQoJmR3X3NwaV8xLCBkYXRhLCBsZW4pOw0KK30NCisvKiogZGVzaWdud2FyZSBzcGkgMSBpbnRlcnJ1cHQgcm91dGluZSAqLw0KK3N0YXRpYyB2b2lkIGR3X3NwaV8xX2lzcih2b2lkICpwdHIpDQorew0KKyAgICBkd19zcGlfaXNyKCZkd19zcGlfMSwgcHRyKTsNCit9DQorLyoqIGluc3RhbGwgZGVzaWdud2FyZSBzcGkgMSB0byBzeXN0ZW0gKi8NCitzdGF0aWMgdm9pZCBkd19zcGlfMV9pbnN0YWxsKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCBzcGlfYWJzX2Jhc2UgPSAwOw0KKyAgICBERVZfU1BJICpkd19zcGlfcHRyID0gJmR3X3NwaV8xOw0KKyAgICBERVZfU1BJX0lORk8gKmR3X3NwaV9pbmZvX3B0ciA9ICYoZHdfc3BpXzEuc3BpX2luZm8pOw0KKyAgICBEV19TUElfQ1RSTCAqZHdfc3BpX2N0cmxfcHRyID0gJmR3X3NwaV8xX2N0cmw7DQorICAgIERXX1NQSV9SRUcgKmR3X3NwaV9yZWdfcHRyOw0KKw0KKyAgICAvKioNCisgICAgICogZ2V0IGFic29sdXRlIGRlc2lnbndhcmUgYmFzZSBhZGRyZXNzDQorICAgICAqLw0KKyAgICBzcGlfYWJzX2Jhc2UgPSAodWludDMyX3QpUEVSSVBIRVJBTF9CQVNFICsgRFdfU1BJXzFfUkVMQkFTRTsNCisgICAgZHdfc3BpX3JlZ19wdHIgPSAoRFdfU1BJX1JFRyAqKXNwaV9hYnNfYmFzZTsNCisNCisgICAgLyoqIHNwaSBpbmZvIGluaXQgKi8NCisgICAgZHdfc3BpX2luZm9fcHRyLT5zcGlfY3RybCA9ICh2b2lkICopZHdfc3BpX2N0cmxfcHRyOw0KKyAgICBkd19zcGlfaW5mb19wdHItPnN0YXR1cyA9IERFVl9ESVNBQkxFRDsNCisgICAgZHdfc3BpX2luZm9fcHRyLT5mcmVxID0gMTAwMDsNCisgICAgZHdfc3BpX2luZm9fcHRyLT5vcG5fY250ID0gMDsNCisgICAgZHdfc3BpX2luZm9fcHRyLT5tb2RlID0gREVWX1NMQVZFX01PREU7DQorICAgIGR3X3NwaV9pbmZvX3B0ci0+Y2xrX21vZGUgPSBTUElfQ0xLX01PREVfREVGQVVMVDsNCisgICAgZHdfc3BpX2luZm9fcHRyLT5zbGF2ZSA9IFNQSV9TTEFWRV9OT1RfU0VMRUNURUQ7DQorICAgIGR3X3NwaV9pbmZvX3B0ci0+ZGZzID0gU1BJX0RGU19ERUZBVUxUOw0KKyAgICBkd19zcGlfaW5mb19wdHItPmR1bW15ID0gMHhmZjsNCisNCisgICAgLyogc3BpIGN0cmwgaW5pdCAqLw0KKyAgICAvKiBWYXJpYWJsZXMgd2hpY2ggc2hvdWxkIGJlIHNldCBkdXJpbmcgb2JqZWN0IGltcGxlbWVudGF0aW9uICovDQorICAgIGR3X3NwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3MgPSBkd19zcGlfcmVnX3B0cjsNCisgICAgZHdfc3BpX2N0cmxfcHRyLT5pbnRubyA9IERXX1NQSV8xX0lOVE5POw0KKyAgICBkd19zcGlfY3RybF9wdHItPnN1cHBvcnRfbW9kZXMgPSBEV19TUElfMV9TVVBQT1JURURfTU9ERTsNCisgICAgZHdfc3BpX2N0cmxfcHRyLT50eF9maWZvX2xlbiA9IERXX1NQSV8xX1RYX0ZJRk9fTEVOOw0KKyAgICBkd19zcGlfY3RybF9wdHItPnJ4X2ZpZm9fbGVuID0gRFdfU1BJXzFfVFhfRklGT19MRU47DQorICAgIGR3X3NwaV9jdHJsX3B0ci0+ZHdfYXBiX2J1c19mcmVxID0gQ0xLX0JVU19BUEI7DQorICAgIGR3X3NwaV9jdHJsX3B0ci0+ZHdfc3BpX2ludF9oYW5kbGVyID0gZHdfc3BpXzFfaXNyOw0KKyAgICAvKiBWYXJpYWJsZXMgd2hpY2ggYWx3YXlzIGNoYW5nZSBkdXJpbmcgc3BpIG9wZXJhdGlvbiAqLw0KKyAgICBkd19zcGlfY3RybF9wdHItPmludF9zdGF0dXMgPSAwOw0KKw0KKyAgICAvKiogc3BpIGRldiBpbml0ICovDQorICAgIGR3X3NwaV9wdHItPnNwaV9vcGVuID0gZHdfc3BpXzFfb3BlbjsNCisgICAgZHdfc3BpX3B0ci0+c3BpX2Nsb3NlID0gZHdfc3BpXzFfY2xvc2U7DQorICAgIGR3X3NwaV9wdHItPnNwaV9jb250cm9sID0gZHdfc3BpXzFfY29udHJvbDsNCisgICAgZHdfc3BpX3B0ci0+c3BpX3dyaXRlID0gZHdfc3BpXzFfd3JpdGU7DQorICAgIGR3X3NwaV9wdHItPnNwaV9yZWFkID0gZHdfc3BpXzFfcmVhZDsNCit9DQorI2VuZGlmIC8qIFVTRV9EV19TUElfMSAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKiBnZXQgb25lIGRlc2lnbndhcmUgZGV2aWNlIHN0cnVjdHVyZSAqLw0KK0RFVl9TUElfUFRSIHNwaV9nZXRfZGV2KGludDMyX3Qgc3BpX2lkKQ0KK3sNCisgICAgc3RhdGljIHVpbnQzMl90IGluc3RhbGxfZmxhZyA9IDA7DQorDQorICAgIC8qIGluc3RhbGwgZGV2aWNlIG9iamVjdHMgKi8NCisgICAgaWYgKGluc3RhbGxfZmxhZyA9PSAwKQ0KKyAgICB7DQorICAgICAgICBpbnN0YWxsX2ZsYWcgPSAxOw0KKyAgICAgICAgZHdfc3BpX2FsbF9pbnN0YWxsKCk7DQorICAgIH0NCisNCisgICAgc3dpdGNoIChzcGlfaWQpDQorICAgIHsNCisjaWYgKFVTRV9EV19TUElfMCkNCisNCisgICAgY2FzZSBEV19TUElfMF9JRDoNCisgICAgICAgIHJldHVybiAmZHdfc3BpXzA7DQorICAgICAgICBicmVhazsNCisjZW5kaWYNCisjaWYgKFVTRV9EV19TUElfMSkNCisNCisgICAgY2FzZSBEV19TUElfMV9JRDoNCisgICAgICAgIHJldHVybiAmZHdfc3BpXzE7DQorICAgICAgICBicmVhazsNCisjZW5kaWYNCisNCisgICAgZGVmYXVsdDoNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIHJldHVybiBOVUxMOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBpbnN0YWxsIGFsbCBzcGkgb2JqZWN0cw0KKyAqIFxub3RlICAgIFxiIE1VU1QgYmUgY2FsbGVkIGR1cmluZyBzeXN0ZW0gaW5pdA0KKyAqLw0KK3ZvaWQgZHdfc3BpX2FsbF9pbnN0YWxsKHZvaWQpDQorew0KKyNpZiAoVVNFX0RXX1NQSV8wKQ0KKyAgICBkd19zcGlfMF9pbnN0YWxsKCk7DQorI2VuZGlmDQorI2lmIChVU0VfRFdfU1BJXzEpDQorICAgIGR3X3NwaV8xX2luc3RhbGwoKTsNCisjZW5kaWYNCit9DQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0RSVl9EV19TUElfT0JKICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svc3BpL2R3X3NwaV9vYmouaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaS9kd19zcGlfb2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2M2M0MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaS9kd19zcGlfb2JqLmgKQEAgLTAsMCArMSw4MiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNC0wNy0wMw0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJWX0RXX1NQSV9PQkoNCisgKiBcYnJpZWYgICBoZWFkZXIgZmlsZSBvZiBkZXNpZ253YXJlIHNwaSBvYmplY3QgaW5zdGFudGlhdGlvbiBvbiBlbXNrDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgIEJPQVJEX0VNU0tfRFJWX0RXX1NQSV9PQkoNCisgKiBAew0KKyAqLw0KKyNpZm5kZWYgX0RXX1NQSV9PQkpfSF8NCisjZGVmaW5lIF9EV19TUElfT0JKX0hfDQorDQorI2luY2x1ZGUgImRldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfc3BpLmgiDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBTUEkgT2JqZWN0IE51bWJlcg0KKyAqIEB7DQorICovDQorI2RlZmluZSBEV19TUElfTlVNICAgICAgKDIpIC8qITwgRGVzaWduV2FyZSBTUEkgdmFsaWQgbnVtYmVyICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWdud2FyZSBTUEkgT2JqZWN0IElEIE1hY3Jvcw0KKyAqIEB7DQorICovDQorI2RlZmluZSBEV19TUElfMF9JRCAgICAgMCAgIC8qITwgU1BJIDAgaWQgbWFjcm8gKG1hc3RlciBub2RlKSAqLw0KKyNkZWZpbmUgRFdfU1BJXzFfSUQgICAgIDEgICAvKiE8IFNQSSAxIGlkIG1hY3JvIChzbGF2ZSBub2RlKSAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbndhcmUgU1BJIE9iamVjdCBDb250cm9sIE1hY3Jvcw0KKyAqIEB7DQorICovDQorI2RlZmluZSBVU0VfRFdfU1BJXzAgICAgICAgIDEgICAvKiE8IGVuYWJsZSB1c2UgZGVzaWdud2FyZSBTUEkgMCAqLw0KKyNkZWZpbmUgVVNFX0RXX1NQSV8xICAgICAgICAxICAgLyohPCBlbmFibGUgdXNlIGRlc2lnbndhcmUgU1BJIDEgKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCitleHRlcm4gdm9pZCBkd19zcGlfYWxsX2luc3RhbGwodm9pZCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfRFdfU1BJX09CSl9IXyAqLw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19EUlZfRFdfU1BJX09CSiAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaWZsYXNoL3NwaWZsYXNoLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9zcGlmbGFzaC9zcGlmbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNWYxN2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9zcGlmbGFzaC9zcGlmbGFzaC5jCkBAIC0wLDAgKzEsNDQ5IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE0LTA3LTE3DQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBCT0FSRF9FTVNLX0RSVl9TUElGTEFTSCBFTVNLIFNQSSBGbGFzaCBEcml2ZXINCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSSVZFUg0KKyAqIFxicmllZiAgIEVNU0sgT24tYm9hcmQgU1BJIEZsYXNoIERyaXZlcg0KKyAqIFxkZXRhaWxzDQorICogICAgICBSZWFsaXplIGRyaXZlciBmb3Igb24tYm9hcmQgVzI1UTEyOEJWIHNwaSBmbGFzaCB1c2luZyBEZXNpZ253YXJlIHNwaSBkcml2ZXIuDQorICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9TUElGTEFTSA0KKyAqIFxicmllZiAgIGVtc2sgb24tYm9hcmQgVzI1UTEyOEJWIHNwaSBmbGFzaCBkcml2ZXINCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfU1BJRkxBU0gNCisgKiBAew0KKyAqLw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL3NwaWZsYXNoL3NwaWZsYXNoLmgiDQorDQorI2luY2x1ZGUgImluYy9lbWJBUkNfZXJyb3IuaCINCisjaW5jbHVkZSAiYm9hcmQvZW1zay9lbXNrLmgiDQorI2luY2x1ZGUgImRldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfc3BpLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2V4Y2VwdGlvbi5oIg0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIFNQSSBGbGFzaCBDb21tYW5kcw0KKyAqIEB7DQorICovDQorI2RlZmluZSBSRElEICAgIDB4OUYgICAgLyohPHJlYWQgY2hpcCBJRCAqLw0KKyNkZWZpbmUgUkRTUiAgICAweDA1ICAgIC8qITwgcmVhZCBzdGF0dXMgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdSU1IgICAgMHgwMSAgICAvKiE8IHdyaXRlIHN0YXR1cyByZWdpc3RlciAqLw0KKyNkZWZpbmUgV1JFTiAgICAweDA2ICAgIC8qITwgd3JpdGUgZW5hYmxld2FpdERldmljZVJlYWR5ICovDQorI2RlZmluZSBXUkRJICAgIDB4MDQgICAgLyohPCB3cml0ZSBkaXNhYmxlICovDQorI2RlZmluZSBSRUFEICAgIDB4MDMgICAgLyohPCByZWFkIGRhdGEgYnl0ZXMgKi8NCisjZGVmaW5lIFNFICAweDIwICAgIC8qITwgc2VjdG9yIGVyYXNlICovDQorI2RlZmluZSBQUCAgMHgwMiAgICAvKiE8IHBhZ2UgcHJvZ3JhbSAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKyNkZWZpbmUgU1BJX0xJTkVfU0ZMQVNIICAgICBCT0FSRF9TRkxBU0hfU1BJX0xJTkUNCisjZGVmaW5lIFNQSV9JRF9TRkxBU0ggICAgICAgQk9BUkRfU0ZMQVNIX1NQSV9JRA0KKw0KKyNkZWZpbmUgU1BJX0ZMQVNIX0ZSRVEgICAgICAoQk9BUkRfU1BJX0ZSRVEpDQorI2RlZmluZSBTUElfRkxBU0hfQ0xLTU9ERSAgIChCT0FSRF9TUElfQ0xLTU9ERSkNCisNCisjZGVmaW5lIFNQSV9GTEFTSF9OT1RfVkFMSUQgKDB4RkZGRkZGRkYpDQorDQorc3RhdGljIERFVl9TUEkgKnNwaV9mbGFzaDsNCitzdGF0aWMgdWludDMyX3QgY3NfZmxhc2ggPSBTUElfTElORV9TRkxBU0g7DQorDQorI2RlZmluZSBTUElGTEFTSF9DSEVDS19FWFAoRVhQUiwgRVJST1JfQ09ERSkgICAgICAgIENIRUNLX0VYUChFWFBSLCBlcmNkLCBFUlJPUl9DT0RFLCBlcnJvcl9leGl0KQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHNwaSBmbGFzaCBzcGkgc2VuZCBjb21tYW5kIHRvIG9wZXJhdGUgc3BpIGZsYXNoDQorICogXHBhcmFtW2luXSAgIHhmZXIgICAgc3BpIHRyYW5zZmVyIHRoYXQgbmVlZCB0byB0cmFuc2ZlciB0byBzcGkgZGV2aWNlDQorICogXHJldHZhbCAgMCAgIHN1Y2Nlc3MNCisgKiBccmV0dmFsICAtMSAgZmFpbA0KKyAqLw0KK0lubGluZSBpbnQzMl90IHNwaV9zZW5kX2NtZChERVZfU1BJX1RSQU5TRkVSICp4ZmVyKQ0KK3sNCisgICAgdWludDMyX3QgY3B1X3N0YXR1czsNCisgICAgaW50MzJfdCBlcmNkID0gMDsNCisNCisgICAgY3B1X3N0YXR1cyA9IGNwdV9sb2NrX3NhdmUoKTsNCisNCisgICAgLyogc2VsZWN0IGRldmljZSAqLw0KKyAgICBlcmNkID0gc3BpX2ZsYXNoLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9TRUxfREVWLCBDT05WMlZPSUQoY3NfZmxhc2gpKTsNCisgICAgU1BJRkxBU0hfQ0hFQ0tfRVhQKGVyY2QgPT0gRV9PSywgLTEpOw0KKyAgICBlcmNkID0gc3BpX2ZsYXNoLT5zcGlfY29udHJvbChTUElfQ01EX1RSQU5TRkVSX1BPTExJTkcsIENPTlYyVk9JRCh4ZmVyKSk7DQorICAgIC8qIGRlc2VsZWN0IGRldmljZSAqLw0KKyAgICBzcGlfZmxhc2gtPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX0RTRUxfREVWLCBDT05WMlZPSUQoY3NfZmxhc2gpKTsNCisgICAgU1BJRkxBU0hfQ0hFQ0tfRVhQKGVyY2QgPT0gRV9PSywgLTEpOw0KKw0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoY3B1X3N0YXR1cyk7DQorDQorICAgIGlmIChlcmNkID09IEVfT0spIHsgZXJjZCA9IDA7IH0NCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgaW5pdCBzcGkgZmxhc2ggcmVsYXRlZCBpbnRlcmZhY2UNCisgKiBccmV0dmFsICAwICAgc3VjY2Vzcw0KKyAqIFxyZXR2YWwgIC0xICBmYWlsDQorICovDQoraW50MzJfdCBmbGFzaF9pbml0KHZvaWQpDQorew0KKyAgICBpbnQzMl90IGVyY2QgPSAwOw0KKw0KKyAgICBzcGlfZmxhc2ggPSBzcGlfZ2V0X2RldihTUElfSURfU0ZMQVNIKTsNCisgICAgZXJjZCA9IHNwaV9mbGFzaC0+c3BpX29wZW4oREVWX01BU1RFUl9NT0RFLCBTUElfRkxBU0hfRlJFUSk7DQorICAgIHNwaV9mbGFzaC0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfU0VUX0ZSRVEsIENPTlYyVk9JRChTUElfRkxBU0hfRlJFUSkpOw0KKyAgICBzcGlfZmxhc2gtPnNwaV9jb250cm9sKFNQSV9DTURfU0VUX0RVTU1ZX0RBVEEsIENPTlYyVk9JRCgweEZGKSk7DQorICAgIHNwaV9mbGFzaC0+c3BpX2NvbnRyb2woU1BJX0NNRF9TRVRfQ0xLX01PREUsIENPTlYyVk9JRChTUElfRkxBU0hfQ0xLTU9ERSkpOw0KKw0KKyAgICBpZiAoZXJjZCA9PSBFX09LKSB7IGVyY2QgPSAwOyB9DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KK2ludDMyX3QgZmxhc2hfY2hhbmdlX2ZyZXEodWludDMyX3QgZnJlcSkNCit7DQorICAgIHNwaV9mbGFzaCA9IHNwaV9nZXRfZGV2KFNQSV9JRF9TRkxBU0gpOw0KKyAgICBpbnQzMl90IGVyY2QgPSBzcGlfZmxhc2gtPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX1NFVF9GUkVRLCBDT05WMlZPSUQoZnJlcSkpOw0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgcmVhZCBzcGkgZmxhc2ggaWRlbnRpZmljYXRpb24gSUQNCisgKiBccmV0dXJuICB0aGUgaWQgb2YgdGhlIHNwaSBmbGFzaA0KKyAqLw0KK3VpbnQzMl90IGZsYXNoX3JlYWRfaWQodm9pZCkNCit7DQorICAgIHVpbnQzMl90IGlkID0gMDsNCisgICAgdWludDhfdCBsb2NhbF9idWZbNF07DQorICAgIERFVl9TUElfVFJBTlNGRVIgY21kX3hmZXI7DQorDQorICAgIGxvY2FsX2J1ZlswXSA9IFJESUQ7DQorDQorICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJmNtZF94ZmVyLCBsb2NhbF9idWYsIDAsIDEpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZjbWRfeGZlciwgbG9jYWxfYnVmLCAxLCAzKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZjbWRfeGZlciwgTlVMTCk7DQorDQorICAgIGlmIChzcGlfc2VuZF9jbWQoJmNtZF94ZmVyKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBpZCA9IChsb2NhbF9idWZbMF0gPDwgMTYpIHwgKGxvY2FsX2J1ZlsxXSA8PCA4KSB8IGxvY2FsX2J1ZlsyXTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlkID0gU1BJX0ZMQVNIX05PVF9WQUxJRDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gaWQ7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHJlYWQgdGhlIHN0YXR1cyBvZiBzcGkgZmxhc2gNCisgKiBccmV0dXJuICBjdXJyZW50IHN0YXR1cyBvZiBzcGkgZmxhc2gNCisgKi8NCit1aW50MzJfdCBmbGFzaF9yZWFkX3N0YXR1cyh2b2lkKQ0KK3sNCisNCisgICAgdWludDhfdCBsb2NhbF9idWZbMl07DQorICAgIERFVl9TUElfVFJBTlNGRVIgY21kX3hmZXI7DQorDQorICAgIGxvY2FsX2J1ZlswXSA9IFJEU1I7DQorDQorICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJmNtZF94ZmVyLCBsb2NhbF9idWYsIDAsIDEpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZjbWRfeGZlciwgbG9jYWxfYnVmLCAxLCAxKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZjbWRfeGZlciwgTlVMTCk7DQorDQorICAgIGlmIChzcGlfc2VuZF9jbWQoJmNtZF94ZmVyKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKHVpbnQzMl90KWxvY2FsX2J1ZlswXTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiBTUElfRkxBU0hfTk9UX1ZBTElEOw0KKyAgICB9DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHJlYWQgZGF0YSBmcm9tIGZsYXNoDQorICogXHBhcmFtW2luXSAgIGFkZHJlc3MgICAgIHJlYWQgc3RhcnQgYWRkcmVzcyBvZiBzcGkgZmxhc2gNCisgKiBccGFyYW1baW5dICAgc2l6ZSAgICAgICAgcmVhZCBzaXplIG9mIHNwaSBmbGFzaA0KKyAqIFxwYXJhbVtvdXRdICBkYXRhICAgICAgICBkYXRhIHRvIHN0b3JlIHRoZSByZXR1cm4gZGF0YQ0KKyAqDQorICogXHJldHZhbCAgLTEgICAgICBmYWlsZWQgaW4gcmVhZCBvcGVyYXRpb24NCisgKiBccmV0dmFsICA+PTAgICAgIGRhdGEgc2l6ZSBvZiBkYXRhIHJlYWQNCisgKi8NCitpbnQzMl90IGZsYXNoX3JlYWQodWludDMyX3QgYWRkcmVzcywgdWludDMyX3Qgc2l6ZSwgdm9pZCAqZGF0YSkNCit7DQorDQorICAgIHVpbnQ4X3QgbG9jYWxfYnVmWzRdOw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIGNtZF94ZmVyOw0KKw0KKyAgICBsb2NhbF9idWZbMF0gPSBSRUFEOw0KKyAgICBsb2NhbF9idWZbMV0gPSAoYWRkcmVzcyA+PiAxNikgJiAweGZmOw0KKyAgICBsb2NhbF9idWZbMl0gPSAoYWRkcmVzcyA+PiA4KSAmIDB4ZmY7DQorICAgIGxvY2FsX2J1ZlszXSA9IGFkZHJlc3MgICYgMHhmZjsNCisNCisgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmY21kX3hmZXIsIGxvY2FsX2J1ZiwgMCwgNCk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJmNtZF94ZmVyLCBkYXRhLCA0LCBzaXplKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZjbWRfeGZlciwgTlVMTCk7DQorDQorICAgIGlmIChzcGlfc2VuZF9jbWQoJmNtZF94ZmVyKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gc2l6ZTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBSZWFkIHN0YXR1cyBhbmQgd2FpdCB3aGlsZSBidXN5IGZsYWcgaXMgc2V0DQorICogXHJldHZhbCAgMCAgIHN1Y2Nlc3MNCisgKiBccmV0dmFsICAtMSAgZmFpbA0KKyAqLw0KK2ludDMyX3QgZmxhc2hfd2FpdF9yZWFkeSh2b2lkKQ0KK3sNCisgICAgdWludDMyX3Qgc3RhdHVzID0gMHgwMTsNCisNCisgICAgZG8NCisgICAgew0KKyAgICAgICAgc3RhdHVzID0gZmxhc2hfcmVhZF9zdGF0dXMoKTsNCisNCisgICAgICAgIGlmIChzdGF0dXMgPT0gU1BJX0ZMQVNIX05PVF9WQUxJRCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorICAgIH0NCisgICAgd2hpbGUgKHN0YXR1cyAmIDB4MDEpOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgZW5hYmxlIHRvIHdyaXRlIGZsYXNoDQorICogXHJldHZhbCAgMCAgIHN1Y2Nlc3MNCisgKiBccmV0dmFsICAtMSAgZmFpbA0KKyAqLw0KK2ludDMyX3QgZmxhc2hfd3JpdGVfZW5hYmxlKHZvaWQpDQorew0KKyAgICB1aW50OF90IGxvY2FsX2J1ZlszXTsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiBjbWRfeGZlcjsNCisNCisgICAgdWludDMyX3Qgc3RhdHVzID0gMDsNCisNCisgICAgZG8NCisgICAgew0KKyAgICAgICAgbG9jYWxfYnVmWzBdID0gV1JFTjsNCisNCisgICAgICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJmNtZF94ZmVyLCBsb2NhbF9idWYsIDAsIDEpOw0KKyAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRigmY21kX3hmZXIsIE5VTEwsIDAsIDApOw0KKyAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZjbWRfeGZlciwgTlVMTCk7DQorDQorICAgICAgICBpZiAoc3BpX3NlbmRfY21kKCZjbWRfeGZlcikgIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICBzdGF0dXMgPSBmbGFzaF9yZWFkX3N0YXR1cygpOw0KKw0KKyAgICAgICAgaWYgKHN0YXR1cyA9PSBTUElfRkxBU0hfTk9UX1ZBTElEKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIGNsZWFyIHByb3RlY3Rpb24gYml0cw0KKyAgICAgICAgLy8gIFdyaXRlIFByb3RlY3QuIGFuZCBXcml0ZSBFbmFibGUuDQorICAgICAgICBpZiAoKHN0YXR1cyAmIDB4ZmMpICYmIChzdGF0dXMgJiAweDAyKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBsb2NhbF9idWZbMF0gPSBXUlNSOyAvLyB3cml0ZSBzdGF0dXMNCisgICAgICAgICAgICBsb2NhbF9idWZbMV0gPSAweDAwOyAvLyB3cml0ZSBzdGF0dXMNCisgICAgICAgICAgICBsb2NhbF9idWZbMl0gPSAweDAwOyAvLyB3cml0ZSBzdGF0dXMNCisNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKCZjbWRfeGZlciwgbG9jYWxfYnVmLCAwLCAzKTsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZjbWRfeGZlciwgTlVMTCwgMCwgMCk7DQorICAgICAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZjbWRfeGZlciwgTlVMTCk7DQorDQorICAgICAgICAgICAgaWYgKHNwaV9zZW5kX2NtZCgmY21kX3hmZXIpICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIHN0YXR1cyA9IDA7DQorICAgICAgICB9DQorICAgIH0NCisgICAgd2hpbGUgKHN0YXR1cyAhPSAweDAyKTsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGZsYXNoIGVyYXNlIGluIHNlY3RvcnMNCisgKg0KKyAqIFxwYXJhbVtpbl0gICBhZGRyZXNzICAgICBlcmFzZSBzdGFydCBhZGRyZXNzIG9mIHNwaSBmbGFzaA0KKyAqIFxwYXJhbVtpbl0gICBzaXplICAgICAgICBlcmFzZSBzaXplDQorICoNCisgKiBccmV0dmFsICAtMSAgICAgIGZhaWxlZCBpbiBlcmFzZSBvcGVyYXRpb24NCisgKiBccmV0dmFsICA+PTAgICAgIHNlY3RvciBjb3VudCBlcmFzZWQNCisgKi8NCitpbnQzMl90IGZsYXNoX2VyYXNlKHVpbnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IHNpemUpDQorew0KKyAgICB1aW50MzJfdCBsYXN0X2FkZHJlc3M7DQorICAgIHVpbnQzMl90IGNvdW50ID0gMDsNCisgICAgdWludDhfdCBsb2NhbF9idWZbNF07DQorICAgIERFVl9TUElfVFJBTlNGRVIgY21kX3hmZXI7DQorDQorICAgIC8vIHN0YXJ0IGFkZHJlc3Mgb2YgbGFzdCBzZWN0b3INCisgICAgbGFzdF9hZGRyZXNzID0gKGFkZHJlc3MgKyBzaXplKSAmICh+KEZMQVNIX1NFQ1RPUl9TSVpFIC0gMSkpOw0KKw0KKyAgICAvLyBzdGFydCBhZGRyZXNzIG9mIGZpcnN0IHNlY3Rvcg0KKyAgICBhZGRyZXNzICY9IH4oRkxBU0hfU0VDVE9SX1NJWkUgLSAxKTsNCisNCisgICAgZG8NCisgICAgew0KKyAgICAgICAgaWYgKGZsYXNoX3dyaXRlX2VuYWJsZSgpICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGZsYXNoX3dhaXRfcmVhZHkoKSAhPSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGxvY2FsX2J1ZlswXSA9IFNFOw0KKyAgICAgICAgbG9jYWxfYnVmWzFdID0gKGFkZHJlc3MgPj4gMTYpICYgMHhmZjsNCisgICAgICAgIGxvY2FsX2J1ZlsyXSA9IChhZGRyZXNzID4+IDgpICYgMHhmZjsNCisgICAgICAgIGxvY2FsX2J1ZlszXSA9ICBhZGRyZXNzICYgMHhmZjsNCisNCisgICAgICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJmNtZF94ZmVyLCBsb2NhbF9idWYsIDAsIDQpOw0KKyAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRigmY21kX3hmZXIsIE5VTEwsIDAsIDApOw0KKyAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZjbWRfeGZlciwgTlVMTCk7DQorDQorICAgICAgICBpZiAoc3BpX3NlbmRfY21kKCZjbWRfeGZlcikgIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICBhZGRyZXNzICs9IEZMQVNIX1NFQ1RPUl9TSVpFOw0KKyAgICAgICAgY291bnQrKzsNCisgICAgfQ0KKyAgICB3aGlsZSAoYWRkcmVzcyA8PSBsYXN0X2FkZHJlc3MpOw0KKw0KKyAgICBpZiAoZmxhc2hfd2FpdF9yZWFkeSgpICE9IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gKGludDMyX3QpY291bnQ7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHdyaXRlIGRhdGEgdG8gc3BpIGZsYXNoDQorICoNCisgKiBccGFyYW1baW5dICAgYWRkcmVzcyBzdGFydCBhZGRyZXNzDQorICogXHBhcmFtW2luXSAgIHNpemUgICAgZGF0YSBzaXplDQorICogXHBhcmFtW2luXSAgIGRhdGEgICAgcG9pbnRlciB0byBkYXRhDQorICoNCisgKiBccmV0dmFsICA+PTAgICAgIHdyaXR0ZW4gYnl0ZXMgbnVtYmVyDQorICogXHJldHZhbCAgPDAgICAgICBlcnJvcg0KKyAqLw0KK2ludDMyX3QgZmxhc2hfd3JpdGUodWludDMyX3QgYWRkcmVzcywgdWludDMyX3Qgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSkNCit7DQorDQorICAgIHVpbnQ4X3QgbG9jYWxfYnVmWzRdOw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIGNtZF94ZmVyOw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIGRhdGFfeGZlcjsNCisNCisgICAgdWludDMyX3QgZmlyc3QgPSAwOw0KKyAgICB1aW50MzJfdCBzaXplX29yaWcgPSBzaXplOw0KKw0KKyAgICBpZiAoZmxhc2hfd2FpdF9yZWFkeSgpICE9IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBmaXJzdCA9IEZMQVNIX1BBR0VfU0laRSAtIChhZGRyZXNzICYgKEZMQVNIX1BBR0VfU0laRSAtIDEpKTsNCisNCisgICAgZG8NCisgICAgew0KKyAgICAgICAgLy8gc2VuZCB3cml0ZSBlbmFibGUgY29tbWFuZCB0byBmbGFzaA0KKyAgICAgICAgaWYgKGZsYXNoX3dyaXRlX2VuYWJsZSgpICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGZsYXNoX3dhaXRfcmVhZHkoKSAhPSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGZpcnN0ID0gZmlyc3QgPCBzaXplID8gZmlyc3QgOiBzaXplOw0KKw0KKyAgICAgICAgbG9jYWxfYnVmWzBdID0gUFA7DQorICAgICAgICBsb2NhbF9idWZbMV0gPSAoYWRkcmVzcyA+PiAxNikgJiAweGZmOw0KKyAgICAgICAgbG9jYWxfYnVmWzJdID0gKGFkZHJlc3MgPj4gOCkgJiAweGZmOw0KKyAgICAgICAgbG9jYWxfYnVmWzNdID0gYWRkcmVzcyAgJiAweGZmOw0KKw0KKyAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmZGF0YV94ZmVyLCBkYXRhLCAwLCBmaXJzdCk7DQorICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZkYXRhX3hmZXIsIE5VTEwsIDAsIDApOw0KKyAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZkYXRhX3hmZXIsIE5VTEwpOw0KKw0KKyAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmY21kX3hmZXIsIGxvY2FsX2J1ZiwgMCwgNCk7DQorICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZjbWRfeGZlciwgTlVMTCwgMCwgMCk7DQorICAgICAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJmNtZF94ZmVyLCAmZGF0YV94ZmVyKTsNCisNCisgICAgICAgIGlmIChzcGlfc2VuZF9jbWQoJmNtZF94ZmVyKSAhPSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHNpemUgLT0gZmlyc3Q7DQorICAgICAgICBhZGRyZXNzICs9IGZpcnN0Ow0KKyAgICAgICAgZGF0YSArPSBmaXJzdDsNCisgICAgICAgIGZpcnN0ID0gRkxBU0hfUEFHRV9TSVpFOw0KKw0KKyAgICB9DQorICAgIHdoaWxlIChzaXplKTsNCisNCisgICAgaWYgKGZsYXNoX3dhaXRfcmVhZHkoKSAhPSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgcmV0dXJuIChpbnQzMl90KShzaXplX29yaWcpOw0KK30NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX1NQSUZMQVNIICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svc3BpZmxhc2gvc3BpZmxhc2guaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaWZsYXNoL3NwaWZsYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjNmU3OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaWZsYXNoL3NwaWZsYXNoLmgKQEAgLTAsMCArMSw4MyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNC0wNy0xNw0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJWX1NQSUZMQVNIDQorICogXGJyaWVmICAgaGVhZGVyIGZpbGUgb2YgZW1zayBvbmJhcmQgVzI1UTEyOEJWIHNwaSBmbGFzaCBkcml2ZXINCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfU1BJRkxBU0gNCisgKiBAew0KKyAqLw0KKyNpZm5kZWYgX0VNU0tfU1BJRkxBU0hfSF8NCisjZGVmaW5lIF9FTVNLX1NQSUZMQVNIX0hfDQorDQorI2RlZmluZSBGTEFTSF9QQUdFX1NJWkUgICAgIDB4MTAwDQorI2RlZmluZSBGTEFTSF9TRUNUT1JfU0laRSAgIDB4MTAwMA0KKw0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX3Rvb2xjaGFpbi5oIg0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX2Vycm9yLmgiDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQzMl90IGhlYWQ7ICAgICAgLyohPCAweDY4NjU2MTY0ID0naGVhZCcgKi8NCisgICAgdWludDMyX3QgY3B1X3R5cGU7ICAvKiE8ID0gMCAtIGFsbCBpbWFnZXMsIHJlc2VydmVkIGZvciBmdXR1cmUgKi8NCisgICAgdWludDMyX3Qgc3RhcnQ7ICAgICAvKiE8IHN0YXJ0IGFkZHJlc3Mgb2YgYXBwbGljYXRpb24gaW1hZ2UgaW4gc3BpIGZsYXNoICovDQorICAgIHVpbnQzMl90IHNpemU7ICAgICAgLyohPCBzaXplIG9mIGltYWdlIGluIGJ5dGVzICovDQorICAgIHVpbnQzMl90IHJhbWFkZHI7ICAgLyohPCBhZGRyZXNzIG9mIHJhbSBmb3IgbG9hZGluZyBpbWFnZSAqLw0KKyAgICB1aW50MzJfdCByYW1zdGFydDsgIC8qITwgc3RhcnQgYWRkcmVzcyBvZiBhcHBsaWNhdGlvbiBpbiBSQU0gISEhISAqLw0KKyAgICB1aW50MzJfdCBjaGVja3N1bTsgIC8qITwgY2hlY2tzdW0gb2YgYWxsIGJ5dGVzIGluIGltYWdlICovDQorfSBpbWFnZV90Ow0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK2V4dGVybiB1aW50MzJfdCBmbGFzaF9yZWFkX2lkKHZvaWQpOw0KK2V4dGVybiB1aW50MzJfdCBmbGFzaF9yZWFkX3N0YXR1cyh2b2lkKTsNCitleHRlcm4gaW50MzJfdCBmbGFzaF9yZWFkKHVpbnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IHNpemUsIHZvaWQgKmRhdGEpOw0KK2V4dGVybiBpbnQzMl90IGZsYXNoX3dyaXRlX2VuYWJsZSh2b2lkKTsNCitleHRlcm4gaW50MzJfdCBmbGFzaF93YWl0X3JlYWR5KHZvaWQpOw0KK2V4dGVybiBpbnQzMl90IGZsYXNoX2VyYXNlKHVpbnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IHNpemUpOw0KK2V4dGVybiBpbnQzMl90IGZsYXNoX3dyaXRlKHVpbnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpOw0KK2V4dGVybiBpbnQzMl90IGZsYXNoX2luaXQodm9pZCk7DQorZXh0ZXJuIGludDMyX3QgZmxhc2hfY2hhbmdlX2ZyZXEodWludDMyX3QgZnJlcSk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfRU1TS19TUElGTEFTSF9IXyAqLw0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19EUlZfU1BJRkxBU0ggKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay91YXJ0L2R3X3VhcnRfb2JqLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay91YXJ0L2R3X3VhcnRfb2JqLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwYWMxNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3VhcnQvZHdfdWFydF9vYmouYwpAQCAtMCwwICsxLDI3NCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0wMw0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgQk9BUkRfRU1TS19EUlZfRFdfVUFSVF9PQkogIEVNU0sgRFcgVUFSVCBPYmplY3QNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSSVZFUg0KKyAqIFxicmllZiAgIEVNU0sgRGVzaWdud2FyZSBVQVJUIE9iamVjdHMNCisgKiBcZGV0YWlscw0KKyAqICAgICAgUmVhbGl6ZSB0aGUgRU1TSyBib2FyZCB1YXJ0IG9iamVjdCB1c2luZyBEZXNpZ253YXJlIHVhcnQgZGV2aWNlIGRyaXZlciwNCisgKiAgb25seSBuZWVkIHRvIHJlYWxpemUgc29tZSBEZXNpZ253YXJlIHVhcnQgc3RydWN0dXJlcyBjb21iaW5lIHdpdGggRU1TSyB1YXJ0DQorICogIGhhcmR3YXJlIHJlc291cmNlLiBqdXN0IGxpa2UgY3BwIGNsYXNzIGluc3RhbnRpYXRpb24uDQorICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9EV19VQVJUX09CSg0KKyAqIFxicmllZiAgIGRlc2lnbndhcmUgdWFydCBvYmplY3QgaW5zdGFudGlhdGlvbiBvbiBlbXNrDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgIEJPQVJEX0VNU0tfRFJWX0RXX1VBUlRfT0JKDQorICogQHsNCisgKi8NCisjaW5jbHVkZSAiaW5jL2FyYy9hcmMuaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfYnVpbHRpbi5oIg0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX3Rvb2xjaGFpbi5oIg0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX2Vycm9yLmgiDQorDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2V4Y2VwdGlvbi5oIg0KKyNpbmNsdWRlICJkZXZpY2UvZGVzaWdud2FyZS91YXJ0L2R3X3VhcnQuaCINCisjaW5jbHVkZSAiYm9hcmQvZW1zay91YXJ0L2R3X3VhcnRfb2JqLmgiDQorDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svZW1zay5oIg0KKw0KKyNpZmRlZiBBUkNfRkVBVFVSRV9ETVBfUEVSSVBIRVJBTA0KKyNkZWZpbmUgUEVSSVBIRVJBTF9CQVNFICAgICBBUkNfRkVBVFVSRV9ETVBfUEVSSVBIRVJBTA0KKyNlbHNlDQorI2RlZmluZSBQRVJJUEhFUkFMX0JBU0UgICAgIF9hcmNfYXV4X3JlYWQoQVVYX0RNUF9QRVJJUEhFUkFMKQ0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgRFdfVUFSVF9GSUZPX0xFTiAgICAzMg0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIEVNU0sgRGVzaWduV2FyZSBVQVJUIDAgT2JqZWN0IEluc3RhbnRpYXRpb24NCisgKiBAew0KKyAqLw0KKyNpZiAoVVNFX0RXX1VBUlRfMCkNCitzdGF0aWMgdm9pZCBkd191YXJ0XzBfaXNyKHZvaWQgKnB0cik7DQorI2RlZmluZSBEV19VQVJUXzBfUkVMQkFTRSAgIChSRUxfUkVHQkFTRV9VQVJUMCkgLyohPCBkZXNpZ253YXJlIHVhcnQgMCByZWxhdGl2ZSBiYXNlYWRkciAqLw0KKyNkZWZpbmUgRFdfVUFSVF8wX0lOVE5PICAgICAoSU5UTk9fVUFSVDApICAgICAgIC8qITwgZGVzaWdud2FyZSB1YXJ0IDAgaW50ZXJydXB0IG51bWJlciAgKi8NCisNCitERVZfVUFSVCAgICAgICAgZHdfdWFydF8wOyAgICAgICAgICAvKiE8IGRlc2lnbndhcmUgdWFydCBvYmplY3QgKi8NCitEV19VQVJUX0NUUkwgICAgZHdfdWFydF8wX2N0cmwgPSAgICAgICAgICAgIC8qITwgZGVzaWdud2FyZSB1YXJ0IDAgY3RybCAqLw0KK3sNCisgICAgMCwgQ0xLX0JVU19BUEIsIERXX1VBUlRfMF9JTlROTywgKElOVF9IQU5ETEVSKWR3X3VhcnRfMF9pc3IsDQorICAgIERXX1VBUlRfRklGT19MRU4sIERXX1VBUlRfRklGT19MRU4sIDANCit9Ow0KKw0KKy8qKiBkZXNpZ253YXJlIHVhcnQgMCBvcGVuICovDQorc3RhdGljIGludDMyX3QgZHdfdWFydF8wX29wZW4odWludDMyX3QgYmF1ZCkNCit7DQorICAgIHJldHVybiBkd191YXJ0X29wZW4oJmR3X3VhcnRfMCwgYmF1ZCk7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHVhcnQgMCBjbG9zZSAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3VhcnRfMF9jbG9zZSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIGR3X3VhcnRfY2xvc2UoJmR3X3VhcnRfMCk7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHVhcnQgMCBjb250cm9sICovDQorc3RhdGljIGludDMyX3QgZHdfdWFydF8wX2NvbnRyb2wodWludDMyX3QgY3RybF9jbWQsIHZvaWQgKnBhcmFtKQ0KK3sNCisgICAgcmV0dXJuIGR3X3VhcnRfY29udHJvbCgmZHdfdWFydF8wLCBjdHJsX2NtZCwgcGFyYW0pOw0KK30NCisvKiogZGVzaWdud2FyZSB1YXJ0IDAgd3JpdGUgKi8NCitzdGF0aWMgaW50MzJfdCBkd191YXJ0XzBfd3JpdGUoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKQ0KK3sNCisgICAgcmV0dXJuIGR3X3VhcnRfd3JpdGUoJmR3X3VhcnRfMCwgZGF0YSwgbGVuKTsNCit9DQorLyoqIGRlc2lnbndhcmUgdWFydCAwIGNsb3NlICovDQorc3RhdGljIGludDMyX3QgZHdfdWFydF8wX3JlYWQodm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKQ0KK3sNCisgICAgcmV0dXJuIGR3X3VhcnRfcmVhZCgmZHdfdWFydF8wLCBkYXRhLCBsZW4pOw0KK30NCisvKiogZGVzaWdud2FyZSB1YXJ0IDAgaW50ZXJydXB0IHJvdW50aW5lICovDQorc3RhdGljIHZvaWQgZHdfdWFydF8wX2lzcih2b2lkICpwdHIpDQorew0KKyAgICBkd191YXJ0X2lzcigmZHdfdWFydF8wLCBwdHIpOw0KK30NCisvKiogaW5zdGFsbCBkZXNpZ253YXJlIHVhcnQgMCB0byBzeXN0ZW0gKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0XzBfaW5zdGFsbCh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgdWFydF9hYnNfYmFzZSA9IDA7DQorICAgIERFVl9VQVJUICpkd191YXJ0X3B0ciA9ICZkd191YXJ0XzA7DQorICAgIERFVl9VQVJUX0lORk8gKmR3X3VhcnRfaW5mb19wdHIgPSAmKGR3X3VhcnRfMC51YXJ0X2luZm8pOw0KKyAgICBEV19VQVJUX0NUUkwgKmR3X3VhcnRfY3RybF9wdHIgPSAmZHdfdWFydF8wX2N0cmw7DQorDQorICAgIC8qKg0KKyAgICAgKiBnZXQgYWJzb2x1dGUgZGVzaWdud2FyZSBiYXNlIGFkZHJlc3MNCisgICAgICovDQorICAgIHVhcnRfYWJzX2Jhc2UgPSAodWludDMyX3QpUEVSSVBIRVJBTF9CQVNFICsgRFdfVUFSVF8wX1JFTEJBU0U7DQorICAgIGR3X3VhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSA9IHVhcnRfYWJzX2Jhc2U7DQorDQorICAgIC8qKiB1YXJ0IGluZm8gaW5pdCAqLw0KKyAgICBkd191YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwgPSAodm9pZCAqKWR3X3VhcnRfY3RybF9wdHI7DQorICAgIGR3X3VhcnRfaW5mb19wdHItPm9wbl9jbnQgPSAwOw0KKyAgICBkd191YXJ0X2luZm9fcHRyLT5zdGF0dXMgPSAwOw0KKyAgICBkd191YXJ0X2luZm9fcHRyLT5iYXVkcmF0ZSA9IFVBUlRfQkFVRFJBVEVfMTE1MjAwOyAgLyogZGVmYXVsdCAxMTUyMDBicHMgKi8NCisNCisgICAgLyoqIHVhcnQgZGV2IGluaXQgKi8NCisgICAgZHdfdWFydF9wdHItPnVhcnRfb3BlbiA9IGR3X3VhcnRfMF9vcGVuOw0KKyAgICBkd191YXJ0X3B0ci0+dWFydF9jbG9zZSA9IGR3X3VhcnRfMF9jbG9zZTsNCisgICAgZHdfdWFydF9wdHItPnVhcnRfY29udHJvbCA9IGR3X3VhcnRfMF9jb250cm9sOw0KKyAgICBkd191YXJ0X3B0ci0+dWFydF93cml0ZSA9IGR3X3VhcnRfMF93cml0ZTsNCisgICAgZHdfdWFydF9wdHItPnVhcnRfcmVhZCA9IGR3X3VhcnRfMF9yZWFkOw0KKw0KK30NCisjZW5kaWYgLyogVVNFX0RXX1VBUlRfMCAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIEVNU0sgRGVzaWduV2FyZSBVQVJUIDEgT2JqZWN0IEluc3RhbnRpYXRpb24NCisgKiBAew0KKyAqLw0KKyNpZiAoVVNFX0RXX1VBUlRfMSkNCitzdGF0aWMgdm9pZCBkd191YXJ0XzFfaXNyKHZvaWQgKnB0cik7DQorI2RlZmluZSBEV19VQVJUXzFfUkVMQkFTRSAgIChSRUxfUkVHQkFTRV9VQVJUMSkgLyohPCBkZXNpZ253YXJlIHVhcnQgMSByZWxhdGl2ZSBiYXNlYWRkciAqLw0KKyNkZWZpbmUgRFdfVUFSVF8xX0lOVE5PICAgICAoSU5UTk9fVUFSVDEpICAgICAgIC8qITwgZGVzaWdud2FyZSB1YXJ0IDEgaW50ZXJydXB0IG51bWJlciAgKi8NCisNCitERVZfVUFSVCAgICAgICAgZHdfdWFydF8xOyAgICAgICAgICAvKiE8IGRlc2lnbndhcmUgdWFydCAxIG9iamVjdCAqLw0KK0RXX1VBUlRfQ1RSTCAgICBkd191YXJ0XzFfY3RybCA9ICAgICAgICAgICAgLyohPCBkZXNpZ253YXJlIHVhcnQgMSBjdHJsICovDQorew0KKyAgICAwLCBDTEtfQlVTX0FQQiwgRFdfVUFSVF8xX0lOVE5PLCAoSU5UX0hBTkRMRVIpZHdfdWFydF8xX2lzciwNCisgICAgRFdfVUFSVF9GSUZPX0xFTiwgRFdfVUFSVF9GSUZPX0xFTiwgMA0KK307DQorDQorLyoqIGRlc2lnbndhcmUgdWFydCAxIG9wZW4gKi8NCitzdGF0aWMgaW50MzJfdCBkd191YXJ0XzFfb3Blbih1aW50MzJfdCBiYXVkKQ0KK3sNCisgICAgcmV0dXJuIGR3X3VhcnRfb3BlbigmZHdfdWFydF8xLCBiYXVkKTsNCit9DQorLyoqIGRlc2lnbndhcmUgdWFydCAxIGNsb3NlICovDQorc3RhdGljIGludDMyX3QgZHdfdWFydF8xX2Nsb3NlKHZvaWQpDQorew0KKyAgICByZXR1cm4gZHdfdWFydF9jbG9zZSgmZHdfdWFydF8xKTsNCit9DQorLyoqIGRlc2lnbndhcmUgdWFydCAxIGNvbnRyb2wgKi8NCitzdGF0aWMgaW50MzJfdCBkd191YXJ0XzFfY29udHJvbCh1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pDQorew0KKyAgICByZXR1cm4gZHdfdWFydF9jb250cm9sKCZkd191YXJ0XzEsIGN0cmxfY21kLCBwYXJhbSk7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHVhcnQgMSB3cml0ZSAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3VhcnRfMV93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pDQorew0KKyAgICByZXR1cm4gZHdfdWFydF93cml0ZSgmZHdfdWFydF8xLCBkYXRhLCBsZW4pOw0KK30NCisvKiogZGVzaWdud2FyZSB1YXJ0IDEgY2xvc2UgKi8NCitzdGF0aWMgaW50MzJfdCBkd191YXJ0XzFfcmVhZCh2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pDQorew0KKyAgICByZXR1cm4gZHdfdWFydF9yZWFkKCZkd191YXJ0XzEsIGRhdGEsIGxlbik7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHVhcnQgMSBpbnRlcnJ1cHQgcm91dGluZSAqLw0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfMV9pc3Iodm9pZCAqcHRyKQ0KK3sNCisgICAgZHdfdWFydF9pc3IoJmR3X3VhcnRfMSwgcHRyKTsNCit9DQorLyoqIGluc3RhbGwgZGVzaWdud2FyZSB1YXJ0IDEgdG8gc3lzdGVtICovDQorc3RhdGljIHZvaWQgZHdfdWFydF8xX2luc3RhbGwodm9pZCkNCit7DQorICAgIHVpbnQzMl90IHVhcnRfYWJzX2Jhc2UgPSAwOw0KKyAgICBERVZfVUFSVCAqZHdfdWFydF9wdHIgPSAmZHdfdWFydF8xOw0KKyAgICBERVZfVUFSVF9JTkZPICpkd191YXJ0X2luZm9fcHRyID0gJihkd191YXJ0XzEudWFydF9pbmZvKTsNCisgICAgRFdfVUFSVF9DVFJMICpkd191YXJ0X2N0cmxfcHRyID0gJmR3X3VhcnRfMV9jdHJsOw0KKw0KKyAgICAvKioNCisgICAgICogZ2V0IGFic29sdXRlIGRlc2lnbndhcmUgYmFzZSBhZGRyZXNzDQorICAgICAqLw0KKyAgICB1YXJ0X2Fic19iYXNlID0gKHVpbnQzMl90KVBFUklQSEVSQUxfQkFTRSArIERXX1VBUlRfMV9SRUxCQVNFOw0KKyAgICBkd191YXJ0X2N0cmxfcHRyLT5kd191YXJ0X3JlZ2Jhc2UgPSB1YXJ0X2Fic19iYXNlOw0KKw0KKyAgICAvKiogdWFydCBpbmZvIGluaXQgKi8NCisgICAgZHdfdWFydF9pbmZvX3B0ci0+dWFydF9jdHJsID0gKHZvaWQgKilkd191YXJ0X2N0cmxfcHRyOw0KKyAgICBkd191YXJ0X2luZm9fcHRyLT5vcG5fY250ID0gMDsNCisgICAgZHdfdWFydF9pbmZvX3B0ci0+c3RhdHVzID0gMDsNCisgICAgZHdfdWFydF9pbmZvX3B0ci0+YmF1ZHJhdGUgPSBVQVJUX0JBVURSQVRFXzExNTIwMDsgIC8qIGRlZmF1bHQgMTE1MjAwYnBzICovDQorDQorICAgIC8qKiB1YXJ0IGRldiBpbml0ICovDQorICAgIGR3X3VhcnRfcHRyLT51YXJ0X29wZW4gPSBkd191YXJ0XzFfb3BlbjsNCisgICAgZHdfdWFydF9wdHItPnVhcnRfY2xvc2UgPSBkd191YXJ0XzFfY2xvc2U7DQorICAgIGR3X3VhcnRfcHRyLT51YXJ0X2NvbnRyb2wgPSBkd191YXJ0XzFfY29udHJvbDsNCisgICAgZHdfdWFydF9wdHItPnVhcnRfd3JpdGUgPSBkd191YXJ0XzFfd3JpdGU7DQorICAgIGR3X3VhcnRfcHRyLT51YXJ0X3JlYWQgPSBkd191YXJ0XzFfcmVhZDsNCit9DQorI2VuZGlmIC8qIFVTRV9EV19VQVJUXzEgKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisvKiogZ2V0IG9uZSBkZXNpZ253YXJlIGRldmljZSBzdHJ1Y3R1cmUgKi8NCitERVZfVUFSVF9QVFIgdWFydF9nZXRfZGV2KGludDMyX3QgdWFydF9pZCkNCit7DQorICAgIHN0YXRpYyB1aW50MzJfdCBpbnN0YWxsX2ZsYWcgPSAwOw0KKw0KKyAgICAvKiBpbnRhbGwgZGV2aWNlIG9iamVjdHMgKi8NCisgICAgaWYgKGluc3RhbGxfZmxhZyA9PSAwKQ0KKyAgICB7DQorICAgICAgICBpbnN0YWxsX2ZsYWcgPSAxOw0KKyAgICAgICAgZHdfdWFydF9hbGxfaW5zdGFsbCgpOw0KKyAgICB9DQorDQorICAgIHN3aXRjaCAodWFydF9pZCkNCisgICAgew0KKyNpZiAoVVNFX0RXX1VBUlRfMCkNCisNCisgICAgY2FzZSBEV19VQVJUXzBfSUQ6DQorICAgICAgICByZXR1cm4gJmR3X3VhcnRfMDsNCisgICAgICAgIGJyZWFrOw0KKyNlbmRpZg0KKyNpZiAoVVNFX0RXX1VBUlRfMSkNCisNCisgICAgY2FzZSBEV19VQVJUXzFfSUQ6DQorICAgICAgICByZXR1cm4gJmR3X3VhcnRfMTsNCisgICAgICAgIGJyZWFrOw0KKyNlbmRpZg0KKw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgcmV0dXJuIE5VTEw7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGluc3RhbGwgYWxsIHVhcnQgb2JqZWN0cw0KKyAqIFxub3RlICAgIFxiIE1VU1QgYmUgY2FsbGVkIGR1cmluZyBzeXN0ZW0gaW5pdA0KKyAqLw0KK3ZvaWQgZHdfdWFydF9hbGxfaW5zdGFsbCh2b2lkKQ0KK3sNCisjaWYgKFVTRV9EV19VQVJUXzApDQorICAgIGR3X3VhcnRfMF9pbnN0YWxsKCk7DQorI2VuZGlmDQorI2lmIChVU0VfRFdfVUFSVF8xKQ0KKyAgICBkd191YXJ0XzFfaW5zdGFsbCgpOw0KKyNlbmRpZg0KK30NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX0RXX1VBUlRfT0JKICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svdWFydC9kd191YXJ0X29iai5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svdWFydC9kd191YXJ0X29iai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNTNmOTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay91YXJ0L2R3X3VhcnRfb2JqLmgKQEAgLTAsMCArMSw4OSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0wMw0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJWX0RXX1VBUlRfT0JKDQorICogXGJyaWVmICAgaGVhZGVyIGZpbGUgb2YgZGVzaWdud2FyZSB1YXJ0IG9iamVjdCBpbnN0YW50aWF0aW9uIG9uIGVtc2sNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfRFdfVUFSVF9PQkoNCisgKiBAew0KKyAqLw0KKyNpZm5kZWYgX0RXX1VBUlRfT0JKX0hfDQorI2RlZmluZSBfRFdfVUFSVF9PQkpfSF8NCisNCisjaW5jbHVkZSAiZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl91YXJ0LmgiDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIE9iamVjdCBOdW1iZXINCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgRFdfVUFSVF9OVU0gKDIpIC8qITwgRGVzaWduV2FyZSBVQVJUIHZhbGlkIG51bWJlciAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbndhcmUgVUFSVCBPYmplY3QgSUQgTWFjcm9zDQorICogQHsNCisgKi8NCisjZGVmaW5lIERXX1VBUlRfMF9JRCAgICAwICAgLyohPCB1YXJ0IDAgaWQgbWFjcm8gKi8NCisjZGVmaW5lIERXX1VBUlRfMV9JRCAgICAxICAgLyohPCB1YXJ0IDEgaWQgbWFjcm8gKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ253YXJlIFVBUlQgT2JqZWN0IENvbnRyb2wgTWFjcm9zDQorICogQHsNCisgKi8NCisjZGVmaW5lIFVTRV9EV19VQVJUXzAgICAxICAgICAgIC8qITwgZW5hYmxlIHVzZSBkZXNpZ253YXJlIHVhcnQgMCAqLw0KKyNkZWZpbmUgVVNFX0RXX1VBUlRfMSAgIDEgICAgICAgLyohPCBlbmFibGUgdXNlIGRlc2lnbndhcmUgdWFydCAxICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWdud2FyZSBVQVJUIFJpbmdidWZmZXIgU2l6ZSBDb250cm9sIE1hY3Jvcw0KKyAqIEB7DQorICovDQorI2RlZmluZSBNQVhfU05EQlVGX1NJWkUgMjU2IC8qITwgbWF4IHNpemUgb2YgdWFydCBzZW5kIGJ1ZmZlciAqLw0KKyNkZWZpbmUgTUFYX1JDVkJVRl9TSVpFIDEwICAvKiE8IG1heCBzaXplIG9mIHVhcnQgcmVjdiBidWZmZXIgKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCitleHRlcm4gdm9pZCBkd191YXJ0X2FsbF9pbnN0YWxsKHZvaWQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0RXX1VBUlRfT0JKX0hfICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2NvbW1vbi9jb25zb2xlX2lvLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvY29tbW9uL2NvbnNvbGVfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDUzZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2NvbW1vbi9jb25zb2xlX2lvLmMKQEAgLTAsMCArMSwxNzIgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDYtMjMNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcYnJpZWYgIGNvbW1vbiBpbyBpbXBsZW1lbnRhdGlvbg0KKyAqLw0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKw0KKyNpbmNsdWRlICJkZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X3VhcnQuaCINCisjaW5jbHVkZSAiY29tbW9uL2NvbnNvbGVfaW8uaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfYnVpbHRpbi5oIg0KKyNpbmNsdWRlICJjb21tb24veHByaW50Zi94cHJpbnRmLmgiDQorDQorLyohPCB0byBpbmRpY2F0ZSB4cHJpbnRmIHNldHVwIHN0YXRlKDAgZm9yIG5vdCBzZXR1cCkgKi8NCitzdGF0aWMgaW50IHhwcmludGZfc2V0dXBfZmxhZyA9IDA7DQorc3RhdGljIERFVl9VQVJUICpjb25zb2xlX3VhcnQ7ICAgICAgLyohPCBjb25zb2xlIHVhcnQgZGV2aWNlIHBvaW50ZXIgKi8NCisNCisvKiogcHV0IG9uZSBjaGFyICovDQoraW50IGNvbnNvbGVfcHV0Y2hhcih1bnNpZ25lZCBjaGFyIGNocikNCit7DQorICAgIGlmIChjb25zb2xlX3VhcnQgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGNvbnNvbGVfdWFydC0+dWFydF93cml0ZSgoY29uc3Qgdm9pZCAqKSgmY2hyKSwgMSk7DQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiogcHV0IHN0cmluZyAqLw0KK2ludCBjb25zb2xlX3B1dHN0cihjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCBsZW4pDQorew0KKyAgICBpZiAoY29uc29sZV91YXJ0ID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gKGludCljb25zb2xlX3VhcnQtPnVhcnRfd3JpdGUoKGNvbnN0IHZvaWQgKikoc3RyKSwgbGVuKTsNCit9DQorDQorLyoqIGdldCBvbmUgY2hhciovDQoraW50IGNvbnNvbGVfZ2V0Y2hhcih2b2lkKQ0KK3sNCisgICAgdW5zaWduZWQgY2hhciBkYXRhOw0KKw0KKyAgICBpZiAoY29uc29sZV91YXJ0ID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoIWNvbnNvbGVfdWFydC0+dWFydF9yZWFkKCh2b2lkICopKCZkYXRhKSwgMSkpOw0KKw0KKyAgICByZXR1cm4gKGludClkYXRhOw0KK30NCisNCisvKiogZ2V0IHN0cmluZyAqLw0KK2ludCBjb25zb2xlX2dldHN0cihjaGFyICpzdHIsIHVuc2lnbmVkIGludCBsZW4pDQorew0KKyAgICBpZiAoY29uc29sZV91YXJ0ID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gKGludCljb25zb2xlX3VhcnQtPnVhcnRfcmVhZCgodm9pZCAqKShzdHIpLCBsZW4pOw0KK30NCisNCisjaWZuZGVmIEVOQUJMRV9CQU5ORVINCisjZGVmaW5lIEVOQUJMRV9CQU5ORVIgICAgICAgMQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgRU1CQVJDX0JBTk5FUl9UWVBFDQorI2RlZmluZSBFTUJBUkNfQkFOTkVSX1RZUEUgIDENCisjZW5kaWYNCisNCitzdGF0aWMgY29uc3QgY2hhciAqZW1iYXJjX2Jhbm5lciA9DQorI2lmIEVNQkFSQ19CQU5ORVJfVFlQRSA9PSAxDQorICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQlcclxuXA0KKyBfX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfIF9fX18JCQlcclxuXA0KK3wgIF8gXFwgX19fX18gICAgICBfX19fXyBfIF9fIF9fXyAgX198IHwgX18gKSBfICAgXwkJXHJcblwNCit8IHxfKSAvIF8gXFwgXFwgL1xcIC8gLyBfIFxcICdfXy8gXyBcXC8gX2AgfCAgXyBcXHwgfCB8IHwJXHJcblwNCit8ICBfXy8gKF8pIFxcIFYgIFYgLyAgX18vIHwgfCAgX18vIChffCB8IHxfKSB8IHxffCB8CQlcclxuXA0KK3xffCAgIFxcX19fLyBcXF8vXFxfLyBcXF9fX3xffCAgXFxfX198XFxfXyxffF9fX18vIFxcX18sIHwJXHJcblwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fLwkJXHJcblwNCisgICAgICAgICAgICAgICAgICAgICBfICAgICAgIF8gICAgX19fXyAgIF9fX18JCQlcclxuXA0KKyAgICAgICBfX18gXyBfXyBfX18gfCB8X18gICAvIFxcICB8ICBfIFxcIC8gX19ffAkJXHJcblwNCisgICAgICAvIF8gXFwgJ18gYCBfIFxcfCAnXyBcXCAvIF8gXFwgfCB8XykgfCB8CQkJXHJcblwNCisgICAgIHwgIF9fLyB8IHwgfCB8IHwgfF8pIC8gX19fIFxcfCAgXyA8fCB8X19fCQkJXHJcblwNCisgICAgICBcXF9fX3xffCB8X3wgfF98Xy5fXy9fLyAgIFxcX1xcX3wgXFxfXFxcXF9fX198CQlcclxuXA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQlcclxuXA0KKyI7DQorI2Vsc2UNCisgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblwNCisgICAgICBfL18vXy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy8gXy9fL18vCQlcclxuXA0KKyAgICAgXy8gICAgXy8gICBfL18vICAgXy8gICAgICBfLyAgICAgIF8vICAgXy9fLyAgIF8vICBfL18vICAgXy9fLyAgICAgXy9fL18vIF8vICAgIF8vIF8vICAgIF8vCVxyXG5cDQorICAgIF8vXy9fLyAgIF8vICAgIF8vIF8vICAgICAgXy8gICAgICBfLyBfL18vXy9fLyBfL18vICAgICBfL18vXy9fLyBfLyAgICBfLyBfL18vXy8gICBfLyAgICBfLwlcclxuXA0KKyAgIF8vICAgICAgIF8vICAgIF8vICAgXy8gIF8vICBfLyAgXy8gICBfLyAgICAgICBfLyAgICAgICBfLyAgICAgICBfLyAgICBfLyBfLyAgICBfLyBfLyAgICBfLwlcclxuXA0KKyAgXy8gICAgICAgICBfL18vICAgICAgIF8vICAgICAgXy8gICAgICAgXy9fL18vIF8vICAgICAgICAgXy9fL18vICAgXy9fL18vIF8vXy9fLyAgICAgXy9fL18vCVxyXG5cDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLwlcclxuXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8vXy8JXHJcblwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8vICAgICAgICAgICAgXy9fLyAgICAgIF8vXy9fLyAgICAgXy9fL18vCQlcclxuXA0KKyAgICAgICAgICAgICAgXy9fLyAgICAgXy9fL18vICBfL18vICAgICBfL18vXy8gICAgICBfLyAgICBfLyAgIF8vICAgIF8vICAgXy8JCQlcclxuXA0KKyAgICAgICAgICAgXy9fL18vXy8gICBfLyAgICBfLyAgICBfLyAgIF8vICAgIF8vICAgIF8vXy9fL18vICAgXy9fL18vICAgICBfLwkJCVxyXG5cDQorICAgICAgICAgIF8vICAgICAgICAgXy8gICAgXy8gICAgXy8gICBfLyAgICBfLyAgICBfLyAgICBfLyAgIF8vICAgIF8vICAgXy8JCQlcclxuXA0KKyAgICAgICAgICAgXy9fL18vICAgXy8gICAgXy8gICAgXy8gICBfL18vXy8gICAgICBfLyAgICBfLyAgIF8vICAgIF8vICAgICBfL18vXy8JCQlcclxuXA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cDQorIjsNCisjZW5kaWYNCisNCitzdGF0aWMgdm9pZCBlbWJhcmNfcHJpbnRfYmFubmVyKHZvaWQpDQorew0KKyAgICB4cHJpbnRmKCIlc1xyXG4iLCBlbWJhcmNfYmFubmVyKTsNCit9DQorDQorLyoqIHhwcmludGYgbmVlZCBmdW5jdGlvbnMgYXBpIHNldHVwICovDQordm9pZCB4cHJpbnRmX3NldHVwKHZvaWQpDQorew0KKyAgICBpZiAoeHByaW50Zl9zZXR1cF9mbGFnKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgY29uc29sZV91YXJ0ID0gdWFydF9nZXRfZGV2KENPTlNPTEVfVUFSVF9JRCk7DQorICAgIGNvbnNvbGVfdWFydC0+dWFydF9vcGVuKEJPQVJEX0NPTlNPTEVfVUFSVF9CQVVEKTsNCisNCisgICAgeGRldl9pbihjb25zb2xlX2dldGNoYXIpOw0KKyAgICB4ZGV2X291dChjb25zb2xlX3B1dGNoYXIpOw0KKw0KKyNpZiBFTkFCTEVfQkFOTkVSID09IDENCisgICAgZW1iYXJjX3ByaW50X2Jhbm5lcigpOw0KKyNlbmRpZg0KKw0KKyAgICB4cHJpbnRmKCJlbWJBUkMgQnVpbGQgVGltZTogJXMsICVzXHJcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7DQorI2lmIGRlZmluZWQoX19HTlVfXykNCisgICAgeHByaW50ZigiQ29tcGlsZXIgVmVyc2lvbjogQVJDIEdOVSwgJXNcclxuIiwgX19WRVJTSU9OX18pOw0KKyNlbHNlDQorICAgIHhwcmludGYoIkNvbXBpbGVyIFZlcnNpb246IE1ldGF3YXJlLCAlc1xyXG4iLCBfX1ZFUlNJT05fXyk7DQorI2VuZGlmDQorDQorICAgIHhwcmludGZfc2V0dXBfZmxhZyA9IDE7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24vY29uc29sZV9pby5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2NvbW1vbi9jb25zb2xlX2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwMzc3NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24vY29uc29sZV9pby5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDYtMjMNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcYnJpZWYgIGNvbW1vbiBpbyBpbXBsZW1lbnRhdGlvbg0KKyAqLw0KKyNpZm5kZWYgX0NPTlNPTEVfSU9fSF8NCisjZGVmaW5lIF9DT05TT0xFX0lPX0hfDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorI2luY2x1ZGUgImJvYXJkL2JvYXJkLmgiDQorDQorI2RlZmluZSBDT05TT0xFX1VBUlRfSUQgICAgIEJPQVJEX0NPTlNPTEVfVUFSVF9JRCAgIC8qITwgY29uc29sZSB1YXJ0IGlkICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorZXh0ZXJuIGludCBjb25zb2xlX3B1dGNoYXIodW5zaWduZWQgY2hhciBjaHIpOw0KK2V4dGVybiBpbnQgY29uc29sZV9wdXRzdHIoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbGVuKTsNCitleHRlcm4gaW50IGNvbnNvbGVfZ2V0Y2hhcih2b2lkKTsNCitleHRlcm4gaW50IGNvbnNvbGVfZ2V0c3RyKGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbik7DQorZXh0ZXJuIHZvaWQgeHByaW50Zl9zZXR1cCh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9DT05TT0xFX0lPX0hfICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2NvbW1vbi94cHJpbnRmL3hwcmludGYuYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24veHByaW50Zi94cHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5Y2JhYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24veHByaW50Zi94cHJpbnRmLmMKQEAgLTAsMCArMSw1MTAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLw0KKy8gIFVuaXZlcnNhbCBzdHJpbmcgaGFuZGxlciBmb3IgdXNlciBjb25zb2xlIGludGVyZmFjZQ0KKy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLw0KKy8NCisvICBDb3B5cmlnaHQgKEMpIDIwMTEsIENoYU4sIGFsbCByaWdodCByZXNlcnZlZC4NCisvDQorLyAqIFRoaXMgc29mdHdhcmUgaXMgYSBmcmVlIHNvZnR3YXJlIGFuZCB0aGVyZSBpcyBOTyBXQVJSQU5UWS4NCisvICogTm8gcmVzdHJpY3Rpb24gb24gdXNlLiBZb3UgY2FuIHVzZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgaXQgZm9yDQorLyAgIHBlcnNvbmFsLCBub24tcHJvZml0IG9yIGNvbW1lcmNpYWwgcHJvZHVjdHMgVU5ERVIgWU9VUiBSRVNQT05TSUJJTElUWS4NCisvICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLg0KKy8NCisvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgImNvbW1vbi94cHJpbnRmL3hwcmludGYuaCINCisNCisNCisjaWYgX1VTRV9YRlVOQ19PVVQNCisjaW5jbHVkZSA8c3RkYXJnLmg+DQordm9pZCAoKnhmdW5jX291dCkodW5zaWduZWQgY2hhcik7ICAgLyogUG9pbnRlciB0byB0aGUgb3V0cHV0IHN0cmVhbSAqLw0KK3N0YXRpYyBjaGFyICpvdXRwdHI7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQdXQgYSBjaGFyYWN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB4cHV0YyhjaGFyIGMpDQorew0KKyAgICBpZiAoX0NSX0NSTEYgJiYgYyA9PSAnXG4nKSB7IHhwdXRjKCdccicpOyB9ICAgICAvKiBDUiAtPiBDUkxGICovDQorDQorICAgIGlmIChvdXRwdHIpDQorICAgIHsNCisgICAgICAgICpvdXRwdHIrKyA9ICh1bnNpZ25lZCBjaGFyKWM7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgaWYgKHhmdW5jX291dCkgeyB4ZnVuY19vdXQoKHVuc2lnbmVkIGNoYXIpYyk7IH0NCit9DQorDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQdXQgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nICAgICAgICAgICAgICAgICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCB4cHV0cyggICAgICAvKiBQdXQgYSBzdHJpbmcgdG8gdGhlIGRlZmF1bHQgZGV2aWNlICovDQorICAgIGNvbnN0IGNoYXIgKnN0ciAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBzdHJpbmcgKi8NCispDQorew0KKyAgICB3aGlsZSAoKnN0cikNCisgICAgew0KKyAgICAgICAgeHB1dGMoKnN0cisrKTsNCisgICAgfQ0KK30NCisNCisNCit2b2lkIHhmcHV0cyggICAgICAvKiBQdXQgYSBzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBkZXZpY2UgKi8NCisgICAgdm9pZCgqZnVuYykodW5zaWduZWQgY2hhciksIC8qIFBvaW50ZXIgdG8gdGhlIG91dHB1dCBmdW5jdGlvbiAqLw0KKyAgICBjb25zdCBjaGFyICpzdHIgICAgICAgICAgICAgLyogUG9pbnRlciB0byB0aGUgc3RyaW5nICovDQorKQ0KK3sNCisgICAgdm9pZCAoKnBmKSh1bnNpZ25lZCBjaGFyKTsNCisNCisNCisgICAgcGYgPSB4ZnVuY19vdXQ7ICAgICAvKiBTYXZlIGN1cnJlbnQgb3V0cHV0IGRldmljZSAqLw0KKyAgICB4ZnVuY19vdXQgPSBmdW5jOyAgIC8qIFN3aXRjaCBvdXRwdXQgdG8gc3BlY2lmaWVkIGRldmljZSAqLw0KKw0KKyAgICB3aGlsZSAoKnN0cikgICAgICAgIC8qIFB1dCB0aGUgc3RyaW5nICovDQorICAgIHsNCisgICAgICAgIHhwdXRjKCpzdHIrKyk7DQorICAgIH0NCisNCisgICAgeGZ1bmNfb3V0ID0gcGY7ICAgICAvKiBSZXN0b3JlIG91dHB1dCBkZXZpY2UgKi8NCit9DQorDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBGb3JtYXR0ZWQgc3RyaW5nIG91dHB1dCAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogIHhwcmludGYoIiVkIiwgMTIzNCk7ICAgICAgICAgICAgIjEyMzQiDQorICAgIHhwcmludGYoIiU2ZCwlM2QlJSIsIC0yMDAsIDUpOyAgIiAgLTIwMCwgIDUlIg0KKyAgICB4cHJpbnRmKCIlLTZ1IiwgMTAwKTsgICAgICAgICAgICIxMDAgICAiDQorICAgIHhwcmludGYoIiVsZCIsIDEyMzQ1Njc4TCk7ICAgICAgIjEyMzQ1Njc4Ig0KKyAgICB4cHJpbnRmKCIlMDR4IiwgMHhBMyk7ICAgICAgICAgICIwMGEzIg0KKyAgICB4cHJpbnRmKCIlMDhMWCIsIDB4MTIzQUJDKTsgICAgICIwMDEyM0FCQyINCisgICAgeHByaW50ZigiJTAxNmIiLCAweDU1MEYpOyAgICAgICAiMDEwMTAxMDEwMDAwMTExMSINCisgICAgeHByaW50ZigiJXMiLCAiU3RyaW5nIik7ICAgICAgICAiU3RyaW5nIg0KKyAgICB4cHJpbnRmKCIlLTRzIiwgImFiYyIpOyAgICAgICAgICJhYmMgIg0KKyAgICB4cHJpbnRmKCIlNHMiLCAiYWJjIik7ICAgICAgICAgICIgYWJjIg0KKyAgICB4cHJpbnRmKCIlYyIsICdhJyk7ICAgICAgICAgICAgICJhIg0KKyAgICB4cHJpbnRmKCIlZiIsIDEwLjApOyAgICAgICAgICAgIDx4cHJpbnRmIGxhY2tzIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQ+DQorKi8NCisNCit2b2lkIHh2cHJpbnRmKA0KKyAgICBjb25zdCBjaGFyICpmbXQsICAgIC8qIFBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcgKi8NCisgICAgdmFfbGlzdCBhcnAgICAgICAgICAvKiBQb2ludGVyIHRvIGFyZ3VtZW50cyAqLw0KKykNCit7DQorICAgIHVuc2lnbmVkIGludCByLCBpLCBqLCB3LCBmOw0KKyAgICB1bnNpZ25lZCBsb25nIHY7DQorICAgIGNoYXIgc1sxNl0sIGMsIGQsICpwOw0KKw0KKw0KKyAgICBmb3IgKDs7KQ0KKyAgICB7DQorICAgICAgICBjID0gKmZtdCsrOyAgICAgICAgICAgICAgICAgLyogR2V0IGEgY2hhciAqLw0KKw0KKyAgICAgICAgaWYgKCFjKSB7IGJyZWFrOyB9ICAgICAgICAgICAgICAvKiBFbmQgb2YgZm9ybWF0PyAqLw0KKw0KKyAgICAgICAgaWYgKGMgIT0gJyUnKSAgICAgICAgICAgICAgIC8qIFBhc3MgdGhyb3VnaCBpdCBpZiBub3QgYSAlIHNlcXVlbnNlICovDQorICAgICAgICB7DQorICAgICAgICAgICAgeHB1dGMoYyk7DQorICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICB9DQorDQorICAgICAgICBmID0gMDsNCisgICAgICAgIGMgPSAqZm10Kys7ICAgICAgICAgICAgICAgICAvKiBHZXQgZmlyc3QgY2hhciBvZiB0aGUgc2VxdWVuc2UgKi8NCisNCisgICAgICAgIGlmIChjID09ICcwJykgICAgICAgICAgICAgICAvKiBGbGFnOiAnMCcgcGFkZGVkICovDQorICAgICAgICB7DQorICAgICAgICAgICAgZiA9IDE7DQorICAgICAgICAgICAgYyA9ICpmbXQrKzsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoYyA9PSAnLScpICAgICAgICAgICAvKiBGbGFnOiBsZWZ0IGp1c3RpZmllZCAqLw0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZiA9IDI7DQorICAgICAgICAgICAgICAgIGMgPSAqZm10Kys7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZm9yICh3ID0gMDsgYyA+PSAnMCcgJiYgYyA8PSAnOSc7IGMgPSAqZm10KyspICAgLyogTWluaW11bSB3aWR0aCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHcgPSB3ICogMTAgKyBjIC0gJzAnOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGMgPT0gJ2wnIHx8IGMgPT0gJ0wnKSAgIC8qIFByZWZpeDogU2l6ZSBpcyBsb25nIGludCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGYgfD0gNDsNCisgICAgICAgICAgICBjID0gKmZtdCsrOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKCFjKSB7IGJyZWFrOyB9ICAgICAgICAgICAgICAvKiBFbmQgb2YgZm9ybWF0PyAqLw0KKw0KKyAgICAgICAgZCA9IGM7DQorDQorICAgICAgICBpZiAoZCA+PSAnYScpIHsgZCAtPSAweDIwOyB9DQorDQorICAgICAgICBzd2l0Y2ggKGQpICAgICAgICAgICAgICAgICAgLyogVHlwZSBpcy4uLiAqLw0KKyAgICAgICAgew0KKyAgICAgICAgY2FzZSAnUycgOiAgICAgICAgICAgICAgICAgIC8qIFN0cmluZyAqLw0KKyAgICAgICAgICAgIHAgPSB2YV9hcmcoYXJwLCBjaGFyICopOw0KKw0KKyAgICAgICAgICAgIGZvciAoaiA9IDA7IHBbal07IGorKykgOw0KKw0KKyAgICAgICAgICAgIHdoaWxlICghKGYgJiAyKSAmJiBqKysgPCB3KSB7IHhwdXRjKCcgJyk7IH0NCisNCisgICAgICAgICAgICB4cHV0cyhwKTsNCisNCisgICAgICAgICAgICB3aGlsZSAoaisrIDwgdykgeyB4cHV0YygnICcpOyB9DQorDQorICAgICAgICAgICAgY29udGludWU7DQorDQorICAgICAgICBjYXNlICdDJyA6ICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyICovDQorICAgICAgICAgICAgeHB1dGMoKGNoYXIpdmFfYXJnKGFycCwgaW50KSk7DQorICAgICAgICAgICAgY29udGludWU7DQorDQorICAgICAgICBjYXNlICdCJyA6ICAgICAgICAgICAgICAgICAgLyogQmluYXJ5ICovDQorICAgICAgICAgICAgciA9IDI7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlICdPJyA6ICAgICAgICAgICAgICAgICAgLyogT2N0YWwgKi8NCisgICAgICAgICAgICByID0gODsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgJ0QnIDogICAgICAgICAgICAgICAgICAvKiBTaWduZWQgZGVjaW1hbCAqLw0KKyAgICAgICAgY2FzZSAnVScgOiAgICAgICAgICAgICAgICAgIC8qIFVuc2lnbmVkIGRlY2ltYWwgKi8NCisgICAgICAgICAgICByID0gMTA7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlICdYJyA6ICAgICAgICAgICAgICAgICAgLyogSGV4ZGVjaW1hbCAqLw0KKyAgICAgICAgICAgIHIgPSAxNjsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3duIHR5cGUgKHBhc3N0aHJvdWdoKSAqLw0KKyAgICAgICAgICAgIHhwdXRjKGMpOw0KKyAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogR2V0IGFuIGFyZ3VtZW50IGFuZCBwdXQgaXQgaW4gbnVtZXJhbCAqLw0KKyAgICAgICAgdiA9IChmICYgNCkgPyB2YV9hcmcoYXJwLCBsb25nKSA6ICgoZCA9PSAnRCcpID8gKGxvbmcpdmFfYXJnKGFycCwgaW50KSA6IChsb25nKXZhX2FyZyhhcnAsIHVuc2lnbmVkIGludCkpOw0KKw0KKyAgICAgICAgaWYgKGQgPT0gJ0QnICYmICh2ICYgMHg4MDAwMDAwMCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgdiA9IDAgLSB2Ow0KKyAgICAgICAgICAgIGYgfD0gODsNCisgICAgICAgIH0NCisNCisgICAgICAgIGkgPSAwOw0KKw0KKyAgICAgICAgZG8NCisgICAgICAgIHsNCisgICAgICAgICAgICBkID0gKGNoYXIpKHYgJSByKTsNCisgICAgICAgICAgICB2IC89IHI7DQorDQorICAgICAgICAgICAgaWYgKGQgPiA5KSB7IGQgKz0gKGMgPT0gJ3gnKSA/IDB4MjcgOiAweDA3OyB9DQorDQorICAgICAgICAgICAgc1tpKytdID0gZCArICcwJzsNCisgICAgICAgIH0NCisgICAgICAgIHdoaWxlICh2ICYmIGkgPCBzaXplb2YocykpOw0KKw0KKyAgICAgICAgaWYgKChmICYgOCkgJiYgKGkgPCBzaXplb2YocykpKSB7IHNbaSsrXSA9ICctJzsgfQ0KKw0KKyAgICAgICAgaiA9IGk7DQorICAgICAgICBkID0gKGYgJiAxKSA/ICcwJyA6ICcgJzsNCisNCisgICAgICAgIHdoaWxlICghKGYgJiAyKSAmJiBqKysgPCB3KSB7IHhwdXRjKGQpOyB9DQorDQorICAgICAgICBkbyB7IHhwdXRjKHNbLS1pXSk7IH0NCisgICAgICAgIHdoaWxlIChpKTsNCisNCisgICAgICAgIHdoaWxlIChqKysgPCB3KSB7IHhwdXRjKCcgJyk7IH0NCisgICAgfQ0KK30NCisNCisNCit2b2lkIHhwcmludGYoICAgIC8qIFB1dCBhIGZvcm1hdHRlZCBzdHJpbmcgdG8gdGhlIGRlZmF1bHQgZGV2aWNlICovDQorICAgIGNvbnN0IGNoYXIgKmZtdCwgICAgLyogUG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZyAqLw0KKyAgICAuLi4gICAgICAgICAgICAgICAgIC8qIE9wdGlvbmFsIGFyZ3VtZW50cyAqLw0KKykNCit7DQorICAgIHZhX2xpc3QgYXJwOw0KKw0KKw0KKyAgICB2YV9zdGFydChhcnAsIGZtdCk7DQorICAgIHh2cHJpbnRmKGZtdCwgYXJwKTsNCisgICAgdmFfZW5kKGFycCk7DQorfQ0KKw0KKw0KK3ZvaWQgeHNwcmludGYoICAgIC8qIFB1dCBhIGZvcm1hdHRlZCBzdHJpbmcgdG8gdGhlIG1lbW9yeSAqLw0KKyAgICBjaGFyICpidWZmLCAgICAgICAgIC8qIFBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIgKi8NCisgICAgY29uc3QgY2hhciAqZm10LCAgICAvKiBQb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nICovDQorICAgIC4uLiAgICAgICAgICAgICAgICAgLyogT3B0aW9uYWwgYXJndW1lbnRzICovDQorKQ0KK3sNCisgICAgdmFfbGlzdCBhcnA7DQorDQorDQorICAgIG91dHB0ciA9IGJ1ZmY7ICAgICAgLyogU3dpdGNoIGRlc3RpbmF0aW9uIGZvciBtZW1vcnkgKi8NCisNCisgICAgdmFfc3RhcnQoYXJwLCBmbXQpOw0KKyAgICB4dnByaW50ZihmbXQsIGFycCk7DQorICAgIHZhX2VuZChhcnApOw0KKw0KKyAgICAqb3V0cHRyID0gMDsgICAgICAgIC8qIFRlcm1pbmF0ZSBvdXRwdXQgc3RyaW5nIHdpdGggYSBcMCAqLw0KKyAgICBvdXRwdHIgPSAwOyAgICAgICAgIC8qIFN3aXRjaCBkZXN0aW5hdGlvbiBmb3IgZGV2aWNlICovDQorfQ0KKw0KKw0KK3ZvaWQgeGZwcmludGYoICAgICAgLyogUHV0IGEgZm9ybWF0dGVkIHN0cmluZyB0byB0aGUgc3BlY2lmaWVkIGRldmljZSAqLw0KKyAgICB2b2lkKCpmdW5jKSh1bnNpZ25lZCBjaGFyKSwgLyogUG9pbnRlciB0byB0aGUgb3V0cHV0IGZ1bmN0aW9uICovDQorICAgIGNvbnN0IGNoYXIgKmZtdCwgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nICovDQorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcHRpb25hbCBhcmd1bWVudHMgKi8NCispDQorew0KKyAgICB2YV9saXN0IGFycDsNCisgICAgdm9pZCAoKnBmKSh1bnNpZ25lZCBjaGFyKTsNCisNCisNCisgICAgcGYgPSB4ZnVuY19vdXQ7ICAgICAvKiBTYXZlIGN1cnJlbnQgb3V0cHV0IGRldmljZSAqLw0KKyAgICB4ZnVuY19vdXQgPSBmdW5jOyAgIC8qIFN3aXRjaCBvdXRwdXQgdG8gc3BlY2lmaWVkIGRldmljZSAqLw0KKw0KKyAgICB2YV9zdGFydChhcnAsIGZtdCk7DQorICAgIHh2cHJpbnRmKGZtdCwgYXJwKTsNCisgICAgdmFfZW5kKGFycCk7DQorDQorICAgIHhmdW5jX291dCA9IHBmOyAgICAgLyogUmVzdG9yZSBvdXRwdXQgZGV2aWNlICovDQorfQ0KKw0KKw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRHVtcCBhIGxpbmUgb2YgYmluYXJ5IGR1bXAgICAgICAgICAgICAgICAgICAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgcHV0X2R1bXAoDQorICAgIGNvbnN0IHZvaWQgKmJ1ZmYsICAgICAgIC8qIFBvaW50ZXIgdG8gdGhlIGFycmF5IHRvIGJlIGR1bXBlZCAqLw0KKyAgICB1bnNpZ25lZCBsb25nIGFkZHIsICAgICAvKiBIZWFkaW5nIGFkZHJlc3MgdmFsdWUgKi8NCisgICAgaW50IGxlbiwgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGl0ZW1zIHRvIGJlIGR1bXBlZCAqLw0KKyAgICBpbnQgd2lkdGggICAgICAgICAgICAgICAvKiBTaXplIG9mIHRoZSBpdGVtcyAoREZfQ0hBUiwgREZfU0hPUlQsIERGX0xPTkcpICovDQorKQ0KK3sNCisgICAgaW50IGk7DQorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJwOw0KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc3A7DQorICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmxwOw0KKw0KKw0KKyAgICB4cHJpbnRmKCIlMDhsWCAiLCBhZGRyKTsgICAgICAgIC8qIGFkZHJlc3MgKi8NCisNCisgICAgc3dpdGNoICh3aWR0aCkNCisgICAgew0KKyAgICBjYXNlIERXX0NIQVI6DQorICAgICAgICBicCA9IGJ1ZmY7DQorDQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspICAgICAgIC8qIEhleGRlY2ltYWwgZHVtcCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHhwcmludGYoIiAlMDJYIiwgYnBbaV0pOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgeHB1dGMoJyAnKTsNCisNCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgICAgICAgLyogQVNDSUkgZHVtcCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHhwdXRjKChicFtpXSA+PSAnICcgJiYgYnBbaV0gPD0gJ34nKSA/IGJwW2ldIDogJy4nKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIERXX1NIT1JUOg0KKyAgICAgICAgc3AgPSBidWZmOw0KKw0KKyAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZXhkZWNpbWFsIGR1bXAgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICB4cHJpbnRmKCIgJTA0WCIsICpzcCsrKTsNCisgICAgICAgIH0NCisgICAgICAgIHdoaWxlICgtLWxlbik7DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBEV19MT05HOg0KKyAgICAgICAgbHAgPSBidWZmOw0KKw0KKyAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZXhkZWNpbWFsIGR1bXAgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICB4cHJpbnRmKCIgJTA4TFgiLCAqbHArKyk7DQorICAgICAgICB9DQorICAgICAgICB3aGlsZSAoLS1sZW4pOw0KKw0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgeHB1dGMoJ1xuJyk7DQorfQ0KKw0KKyNlbmRpZiAvKiBfVVNFX1hGVU5DX09VVCAqLw0KKw0KKw0KKw0KKyNpZiBfVVNFX1hGVU5DX0lODQordW5zaWduZWQgY2hhciAoKnhmdW5jX2luKSh2b2lkKTsgICAgLyogUG9pbnRlciB0byB0aGUgaW5wdXQgc3RyZWFtICovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBHZXQgYSBsaW5lIGZyb20gdGhlIGlucHV0ICAgICAgICAgICAgICAgICAgICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQoraW50IHhnZXRzKCAgIC8qIDA6RW5kIG9mIHN0cmVhbSwgMTpBIGxpbmUgYXJyaXZlZCAqLw0KKyAgICBjaGFyICpidWZmLCAvKiBQb2ludGVyIHRvIHRoZSBidWZmZXIgKi8NCisgICAgaW50IGxlbiAgICAgLyogQnVmZmVyIGxlbmd0aCAqLw0KKykNCit7DQorICAgIGludCBjLCBpOw0KKw0KKw0KKyAgICBpZiAoIXhmdW5jX2luKSB7IHJldHVybiAwOyB9ICAgICAgICAvKiBObyBpbnB1dCBmdW5jdGlvbiBzcGVjaWZpZWQgKi8NCisNCisgICAgaSA9IDA7DQorDQorICAgIGZvciAoOzspDQorICAgIHsNCisgICAgICAgIGMgPSB4ZnVuY19pbigpOyAgICAgICAgICAgICAvKiBHZXQgYSBjaGFyIGZyb20gdGhlIGluY29taW5nIHN0cmVhbSAqLw0KKw0KKyAgICAgICAgaWYgKCFjKSB7IHJldHVybiAwOyB9ICAgICAgICAgICAvKiBFbmQgb2Ygc3RyZWFtPyAqLw0KKw0KKyAgICAgICAgaWYgKGMgPT0gJ1xyJykgeyBicmVhazsgfSAgICAgICAvKiBFbmQgb2YgbGluZT8gKi8NCisNCisgICAgICAgIGlmIChjID09ICdcYicgJiYgaSkgICAgICAgICAvKiBCYWNrIHNwYWNlPyAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGktLTsNCisNCisgICAgICAgICAgICBpZiAoX0xJTkVfRUNITykgeyB4cHV0YyhjKTsgfQ0KKw0KKyAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGMgPj0gJyAnICYmIGkgPCBsZW4gLSAxKSAgICAvKiBWaXNpYmxlIGNoYXJzICovDQorICAgICAgICB7DQorICAgICAgICAgICAgYnVmZltpKytdID0gYzsNCisNCisgICAgICAgICAgICBpZiAoX0xJTkVfRUNITykgeyB4cHV0YyhjKTsgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGJ1ZmZbaV0gPSAwOyAgICAvKiBUZXJtaW5hdGUgd2l0aCBhIFwwICovDQorDQorICAgIGlmIChfTElORV9FQ0hPKSB7IHhwdXRjKCdcbicpOyB9DQorDQorICAgIHJldHVybiAxOw0KK30NCisNCisNCitpbnQgeGZnZXRzKCAgLyogMDpFbmQgb2Ygc3RyZWFtLCAxOkEgbGluZSBhcnJpdmVkICovDQorICAgIHVuc2lnbmVkIGNoYXIgKCpmdW5jKSh2b2lkKSwgICAgLyogUG9pbnRlciB0byB0aGUgaW5wdXQgc3RyZWFtIGZ1bmN0aW9uICovDQorICAgIGNoYXIgKmJ1ZmYsIC8qIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciAqLw0KKyAgICBpbnQgbGVuICAgICAvKiBCdWZmZXIgbGVuZ3RoICovDQorKQ0KK3sNCisgICAgdW5zaWduZWQgY2hhciAoKnBmKSh2b2lkKTsNCisgICAgaW50IG47DQorDQorDQorICAgIHBmID0geGZ1bmNfaW47ICAgICAgICAgIC8qIFNhdmUgY3VycmVudCBpbnB1dCBkZXZpY2UgKi8NCisgICAgeGZ1bmNfaW4gPSBmdW5jOyAgICAgICAgLyogU3dpdGNoIGlucHV0IHRvIHNwZWNpZmllZCBkZXZpY2UgKi8NCisgICAgbiA9IHhnZXRzKGJ1ZmYsIGxlbik7ICAgLyogR2V0IGEgbGluZSAqLw0KKyAgICB4ZnVuY19pbiA9IHBmOyAgICAgICAgICAvKiBSZXN0b3JlIGlucHV0IGRldmljZSAqLw0KKw0KKyAgICByZXR1cm4gbjsNCit9DQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBHZXQgYSB2YWx1ZSBvZiB0aGUgc3RyaW5nICAgICAgICAgICAgICAgICAgICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogICIxMjMgLTUgICAweDNmZiAwYjExMTEgMDM3NyAgdyAiDQorICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgMXN0IGNhbGwgcmV0dXJucyAxMjMgYW5kIG5leHQgcHRyDQorICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgMm5kIGNhbGwgcmV0dXJucyAtNSBhbmQgbmV4dCBwdHINCisgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAzcmQgY2FsbCByZXR1cm5zIDEwMjMgYW5kIG5leHQgcHRyDQorICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgNHRoIGNhbGwgcmV0dXJucyAxNSBhbmQgbmV4dCBwdHINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICA1dGggY2FsbCByZXR1cm5zIDI1NSBhbmQgbmV4dCBwdHINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiA2dGggY2FsbCBmYWlscyBhbmQgcmV0dXJucyAwDQorKi8NCisNCitpbnQgeGF0b2koICAgIC8qIDA6RmFpbGVkLCAxOlN1Y2Nlc3NmdWwgKi8NCisgICAgY2hhciAqKnN0ciwgICAgIC8qIFBvaW50ZXIgdG8gcG9pbnRlciB0byB0aGUgc3RyaW5nICovDQorICAgIGxvbmcgKnJlcyAgICAgICAvKiBQb2ludGVyIHRvIHRoZSB2YWxpYWJsZSB0byBzdG9yZSB0aGUgdmFsdWUgKi8NCispDQorew0KKyAgICB1bnNpZ25lZCBsb25nIHZhbDsNCisgICAgdW5zaWduZWQgY2hhciBjLCByLCBzID0gMDsNCisNCisNCisgICAgKnJlcyA9IDA7DQorDQorICAgIHdoaWxlICgoYyA9ICoqc3RyKSA9PSAnICcpIHsgKCpzdHIpKys7IH0gICAgLyogU2tpcCBsZWFkaW5nIHNwYWNlcyAqLw0KKw0KKyAgICBpZiAoYyA9PSAnLScpICAgICAgIC8qIG5lZ2F0aXZlPyAqLw0KKyAgICB7DQorICAgICAgICBzID0gMTsNCisgICAgICAgIGMgPSAqKCsrKCpzdHIpKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoYyA9PSAnMCcpDQorICAgIHsNCisgICAgICAgIGMgPSAqKCsrKCpzdHIpKTsNCisNCisgICAgICAgIHN3aXRjaCAoYykNCisgICAgICAgIHsNCisgICAgICAgIGNhc2UgJ3gnOiAgICAgICAvKiBoZXhkZWNpbWFsICovDQorICAgICAgICAgICAgciA9IDE2Ow0KKyAgICAgICAgICAgIGMgPSAqKCsrKCpzdHIpKTsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgJ2InOiAgICAgICAvKiBiaW5hcnkgKi8NCisgICAgICAgICAgICByID0gMjsNCisgICAgICAgICAgICBjID0gKigrKygqc3RyKSk7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgIGlmIChjIDw9ICcgJykgeyByZXR1cm4gMTsgfSAvKiBzaW5nbGUgemVybyAqLw0KKw0KKyAgICAgICAgICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpIHsgcmV0dXJuIDA7IH0gICAvKiBpbnZhbGlkIGNoYXIgKi8NCisNCisgICAgICAgICAgICByID0gODsgICAgICAvKiBvY3RhbCAqLw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykgeyByZXR1cm4gMDsgfSAgIC8qIEVPTCBvciBpbnZhbGlkIGNoYXIgKi8NCisNCisgICAgICAgIHIgPSAxMDsgICAgICAgICAvKiBkZWNpbWFsICovDQorICAgIH0NCisNCisgICAgdmFsID0gMDsNCisNCisgICAgd2hpbGUgKGMgPiAnICcpDQorICAgIHsNCisgICAgICAgIGlmIChjID49ICdhJykgeyBjIC09IDB4MjA7IH0NCisNCisgICAgICAgIGMgLT0gJzAnOw0KKw0KKyAgICAgICAgaWYgKGMgPj0gMTcpDQorICAgICAgICB7DQorICAgICAgICAgICAgYyAtPSA3Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGMgPj0gcikgeyByZXR1cm4gMDsgfSAgICAgICAvKiBpbnZhbGlkIGNoYXIgZm9yIGN1cnJlbnQgcmFkaXggKi8NCisNCisgICAgICAgIHZhbCA9IHZhbCAqIHIgKyBjOw0KKyAgICAgICAgYyA9ICooKysoKnN0cikpOw0KKyAgICB9DQorDQorICAgIGlmIChzKSB7IHZhbCA9IDAgLSB2YWw7IH0gICAgICAgICAgIC8qIGFwcGx5IHNpZ24gaWYgbmVlZGVkICovDQorDQorICAgICpyZXMgPSB2YWw7DQorICAgIHJldHVybiAxOw0KK30NCisNCisjZW5kaWYgLyogX1VTRV9YRlVOQ19JTiAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24veHByaW50Zi94cHJpbnRmLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvY29tbW9uL3hwcmludGYveHByaW50Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YmMxNzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvY29tbW9uL3hwcmludGYveHByaW50Zi5oCkBAIC0wLDAgKzEsNDggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBVbml2ZXJzYWwgc3RyaW5nIGhhbmRsZXIgZm9yIHVzZXIgY29uc29sZSBpbnRlcmZhY2UgIChDKUNoYU4sIDIwMTEgICAgICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX1NUUkZVTkMNCisjZGVmaW5lIF9TVFJGVU5DDQorDQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgX1VTRV9YRlVOQ19PVVQgIDEgICAvKiAxOiBVc2Ugb3V0cHV0IGZ1bmN0aW9ucyAqLw0KKyNkZWZpbmUgX0NSX0NSTEYgICAgICAgIDEgICAvKiAxOiBDb252ZXJ0IFxuID09PiBcclxuIGluIHRoZSBvdXRwdXQgY2hhciAqLw0KKw0KKyNkZWZpbmUgX1VTRV9YRlVOQ19JTiAgIDEgICAvKiAxOiBVc2UgaW5wdXQgZnVuY3Rpb24gKi8NCisjZGVmaW5lIF9MSU5FX0VDSE8gICAgICAxICAgLyogMTogRWNobyBiYWNrIGlucHV0IGNoYXJzIGluIHhnZXRzIGZ1bmN0aW9uICovDQorDQorI2lmIF9VU0VfWEZVTkNfT1VUDQorI2RlZmluZSB4ZGV2X291dChmdW5jKSB4ZnVuY19vdXQgPSAodm9pZCgqKSh1bnNpZ25lZCBjaGFyKSkoZnVuYykNCitleHRlcm4gdm9pZCAoKnhmdW5jX291dCkodW5zaWduZWQgY2hhcik7DQorZXh0ZXJuIHZvaWQgeHB1dGMoY2hhciBjKTsNCitleHRlcm4gdm9pZCB4cHV0cyhjb25zdCBjaGFyICpzdHIpOw0KK2V4dGVybiB2b2lkIHhmcHV0cyh2b2lkICgqZnVuYykodW5zaWduZWQgY2hhciksIGNvbnN0IGNoYXIgKnN0cik7DQorZXh0ZXJuIHZvaWQgeHZwcmludGYoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFycCk7DQorZXh0ZXJuIHZvaWQgeHByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7DQorZXh0ZXJuIHZvaWQgeHNwcmludGYoY2hhciAqYnVmZiwgY29uc3QgY2hhciAqZm10LCAuLi4pOw0KK2V4dGVybiB2b2lkIHhmcHJpbnRmKHZvaWQgKCpmdW5jKSh1bnNpZ25lZCBjaGFyKSwgY29uc3QgY2hhciAgKmZtdCwgLi4uKTsNCitleHRlcm4gdm9pZCBwdXRfZHVtcChjb25zdCB2b2lkICpidWZmLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4sIGludCB3aWR0aCk7DQorI2RlZmluZSBEV19DSEFSICAgICBzaXplb2YoY2hhcikNCisjZGVmaW5lIERXX1NIT1JUICAgIHNpemVvZihzaG9ydCkNCisjZGVmaW5lIERXX0xPTkcgICAgIHNpemVvZihsb25nKQ0KKyNlbmRpZg0KKw0KKyNpZiBfVVNFX1hGVU5DX0lODQorI2RlZmluZSB4ZGV2X2luKGZ1bmMpIHhmdW5jX2luID0gKHVuc2lnbmVkIGNoYXIoKikodm9pZCkpKGZ1bmMpDQorZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKCp4ZnVuY19pbikodm9pZCk7DQorZXh0ZXJuIGludCB4Z2V0cyhjaGFyICpidWZmLCBpbnQgbGVuKTsNCitleHRlcm4gaW50IHhmZ2V0cyh1bnNpZ25lZCBjaGFyICgqZnVuYykodm9pZCksIGNoYXIgKmJ1ZmYsIGludCBsZW4pOw0KK2V4dGVybiBpbnQgeGF0b2koY2hhciAqKnN0ciwgbG9uZyAqcmVzKTsNCisjZW5kaWYNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL2dwaW8vZHdfZ3Bpby5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL2dwaW8vZHdfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNzRjODQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvZ3Bpby9kd19ncGlvLmMKQEAgLTAsMCArMSw1MzQgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMjINCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0RXX0dQSU8gIERlc2lnbndhcmUgR1BJTyBEcml2ZXINCisgKiBcaW5ncm91cCBERVZJQ0VfRFcNCisgKiBcYnJpZWYgICBEZXNpZ253YXJlIEdQSU8gRHJpdmVyIEltcGxlbWVudGF0aW9uDQorICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcYnJpZWYgICBkZXNpZ253YXJlIGdwaW8gZHJpdmVyDQorICogXGluZ3JvdXAgREVWSUNFX0RXX0dQSU8NCisgKiBcYnJpZWYgICBEZXNpZ253YXJlIEdQSU8gZHJpdmVyDQorICovDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfZXJyb3IuaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmgiDQorDQorI2luY2x1ZGUgImRldmljZS9kZXNpZ253YXJlL2dwaW8vZHdfZ3Bpby5oIg0KKw0KKy8qKiBjaGVjayBleHByZXNzaW9ucyB1c2VkIGluIERlc2lnbldhcmUgR1BJTyBkcml2ZXIgaW1wbGVtZW50YXRpb24gKi8NCisjZGVmaW5lIERXX0dQSU9fQ0hFQ0tfRVhQKEVYUFIsIEVSUk9SX0NPREUpICAgICBDSEVDS19FWFAoRVhQUiwgZXJjZCwgRVJST1JfQ09ERSwgZXJyb3JfZXhpdCkNCisNCisjaWZuZGVmIERJU0FCTEVfREVWSUNFX09CSkVDVF9WQUxJRF9DSEVDSw0KKy8qKiB2YWxpZCBjaGVjayBvZiB1YXJ0IGluZm8gb2JqZWN0ICovDQorI2RlZmluZSBWQUxJRF9DSEtfR1BJT19JTkZPX09CSkVDVChncGlvaW5mb19vYmpfcHRyKSAgICAgICAgeyAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICBEV19HUElPX0NIRUNLX0VYUCgoZ3Bpb2luZm9fb2JqX3B0cikhPU5VTEwsIEVfT0JKKTsgICAgICAgICBcDQorICAgICAgICAgICAgRFdfR1BJT19DSEVDS19FWFAoKChncGlvaW5mb19vYmpfcHRyKS0+Z3Bpb19jdHJsKSE9TlVMTCwgRV9PQkopOyAgICBcDQorICAgICAgICB9DQorI2VuZGlmDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9EV19HUElPX1NUQVRJQyAgIERlc2lnbldhcmUgR1BJTyBEcml2ZXIgU3RhdGljIEZ1bmN0aW9ucw0KKyAqIFxpbmdyb3VwIERFVklDRV9EV19HUElPDQorICogXGJyaWVmICAgU3RhdGljIG9yIGlubGluZSBmdW5jdGlvbnMsIHZhcmlhYmxlcyBmb3IgRGVzaWduV2FyZSBHUElPIGhhbmRsZSBncGlvIG9wZXJhdGlvbnMsDQorICogIG9ubHkgdXNlZCBpbiB0aGlzIGZpbGUNCisgKiBAew0KKyAqLw0KK0lubGluZSB1aW50MzJfdCBkd19ncGlvX3JlYWRfZXh0KERXX0dQSU9fUE9SVF9QVFIgcG9ydCkNCit7DQorICAgIHJldHVybiAgcG9ydC0+cmVncy0+RVhUX1BPUlRTW3BvcnQtPm5vXTsNCit9DQorDQorSW5saW5lIHVpbnQzMl90IGR3X2dwaW9fcmVhZF9kaXIoRFdfR1BJT19QT1JUX1BUUiBwb3J0KQ0KK3sNCisgICAgcmV0dXJuIHBvcnQtPnJlZ3MtPlNXUE9SVFNbcG9ydC0+bm9dLkREUjsNCit9DQorDQorSW5saW5lIHVpbnQzMl90IGR3X2dwaW9fcmVhZF9kcihEV19HUElPX1BPUlRfUFRSIHBvcnQpDQorew0KKyAgICByZXR1cm4gcG9ydC0+cmVncy0+U1dQT1JUU1twb3J0LT5ub10uRFI7DQorfQ0KKw0KK0lubGluZSB1aW50MzJfdCBkd19ncGlvX3JlYWRfbXRoZChEV19HUElPX1BPUlRfUFRSIHBvcnQpDQorew0KKyAgICByZXR1cm4gcG9ydC0+cmVncy0+SU5URU47DQorfQ0KKw0KK0lubGluZSB2b2lkIGR3X2dwaW9faW50X2VuYWJsZShEV19HUElPX1BPUlRfUFRSIHBvcnQsIHVpbnQzMl90IGJpdF9tYXNrKQ0KK3sNCisgICAgcG9ydC0+cmVncy0+SU5URU4gfD0gYml0X21hc2s7DQorfQ0KKw0KK0lubGluZSB2b2lkIGR3X2dwaW9faW50X2Rpc2FibGUoRFdfR1BJT19QT1JUX1BUUiBwb3J0LCB1aW50MzJfdCBiaXRfbWFzaykNCit7DQorICAgIHBvcnQtPnJlZ3MtPklOVEVOICY9ICh+Yml0X21hc2spOw0KK30NCisNCitJbmxpbmUgdm9pZCBkd19ncGlvX2ludF9tYXNrKERXX0dQSU9fUE9SVF9QVFIgcG9ydCwgdWludDMyX3QgYml0X21hc2spDQorew0KKyAgICBwb3J0LT5yZWdzLT5JTlRNQVNLIHw9IGJpdF9tYXNrOw0KK30NCisNCitJbmxpbmUgdm9pZCBkd19ncGlvX2ludF91bm1hc2soRFdfR1BJT19QT1JUX1BUUiBwb3J0LCB1aW50MzJfdCBiaXRfbWFzaykNCit7DQorICAgIHBvcnQtPnJlZ3MtPklOVE1BU0sgJj0gKH5iaXRfbWFzayk7DQorfQ0KKw0KK0lubGluZSB1aW50MzJfdCBkd19ncGlvX2ludF9yZWFkX2xldmVsKERXX0dQSU9fUE9SVF9QVFIgcG9ydCkNCit7DQorICAgIHJldHVybiBwb3J0LT5yZWdzLT5JTlRUWVBFX0xFVkVMOw0KK30NCisNCitJbmxpbmUgdWludDMyX3QgZHdfZ3Bpb19pbnRfcmVhZF9wb2xhcml0eShEV19HUElPX1BPUlRfUFRSIHBvcnQpDQorew0KKyAgICByZXR1cm4gcG9ydC0+cmVncy0+SU5UX1BPTEFSSVRZOw0KK30NCisNCitJbmxpbmUgdWludDMyX3QgZHdfZ3Bpb19pbnRfcmVhZF9kZWJvdW5jZShEV19HUElPX1BPUlRfUFRSIHBvcnQpDQorew0KKyAgICByZXR1cm4gcG9ydC0+cmVncy0+REVCT1VOQ0U7DQorfQ0KKw0KK0lubGluZSB1aW50MzJfdCBkd19ncGlvX2ludF9yZWFkX3N0YXR1cyhEV19HUElPX1BPUlRfUFRSIHBvcnQpDQorew0KKyAgICByZXR1cm4gcG9ydC0+cmVncy0+SU5UU1RBVFVTOw0KK30NCisNCitJbmxpbmUgdm9pZCBkd19ncGlvX2ludF9jbGVhcihEV19HUElPX1BPUlRfUFRSIHBvcnQsIHVpbnQzMl90IGJpdF9tYXNrKQ0KK3sNCisgICAgcG9ydC0+cmVncy0+UE9SVEFfRU9JID0gYml0X21hc2s7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGR3X2dwaW9faW50X3dyaXRlX2xldmVsKERXX0dQSU9fUE9SVF9QVFIgcG9ydCwgdWludDMyX3QgYml0X21hc2ssIHVpbnQzMl90IGJpdF9sZXZlbCkNCit7DQorICAgIHVpbnQzMl90IHJlZ192YWw7DQorDQorICAgIHJlZ192YWwgPSBwb3J0LT5yZWdzLT5JTlRUWVBFX0xFVkVMOw0KKyAgICByZWdfdmFsICY9ICh+Yml0X21hc2spOw0KKyAgICBiaXRfbGV2ZWwgJj0gYml0X21hc2s7DQorICAgIHJlZ192YWwgfD0gYml0X2xldmVsOw0KKw0KKyAgICBwb3J0LT5yZWdzLT5JTlRUWVBFX0xFVkVMID0gcmVnX3ZhbDsNCit9DQorDQorc3RhdGljIHZvaWQgZHdfZ3Bpb19pbnRfd3JpdGVfcG9sYXJpdHkoRFdfR1BJT19QT1JUX1BUUiBwb3J0LCB1aW50MzJfdCBiaXRfbWFzaywgdWludDMyX3QgYml0X3BvbGFyaXR5KQ0KK3sNCisgICAgdWludDMyX3QgcmVnX3ZhbDsNCisNCisgICAgcmVnX3ZhbCA9IHBvcnQtPnJlZ3MtPklOVF9QT0xBUklUWTsNCisNCisgICAgcmVnX3ZhbCAmPSAofmJpdF9tYXNrKTsNCisgICAgYml0X3BvbGFyaXR5ICY9IGJpdF9tYXNrOw0KKyAgICByZWdfdmFsIHw9IGJpdF9wb2xhcml0eTsNCisNCisgICAgcG9ydC0+cmVncy0+SU5UX1BPTEFSSVRZID0gcmVnX3ZhbDsNCit9DQorDQorc3RhdGljIHZvaWQgZHdfZ3Bpb19pbnRfd3JpdGVfZGVib3VuY2UoRFdfR1BJT19QT1JUX1BUUiBwb3J0LCB1aW50MzJfdCBiaXRfbWFzaywgdWludDMyX3QgYml0X2RlYm91bmNlKQ0KK3sNCisgICAgdWludDMyX3QgcmVnX3ZhbDsNCisNCisgICAgcmVnX3ZhbCA9IHBvcnQtPnJlZ3MtPkRFQk9VTkNFOw0KKw0KKyAgICByZWdfdmFsICY9ICh+Yml0X21hc2spOw0KKyAgICBiaXRfZGVib3VuY2UgJj0gYml0X21hc2s7DQorICAgIHJlZ192YWwgfD0gYml0X2RlYm91bmNlOw0KKw0KKyAgICBwb3J0LT5yZWdzLT5ERUJPVU5DRSA9IHJlZ192YWw7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGR3X2dwaW9fc2V0X2ludF9jZmcoRFdfR1BJT19QT1JUX1BUUiBwb3J0LCBERVZfR1BJT19JTlRfQ0ZHICppbnRfY2ZnKQ0KK3sNCisgICAgZHdfZ3Bpb19pbnRfd3JpdGVfbGV2ZWwocG9ydCwgaW50X2NmZy0+aW50X2JpdF9tYXNrLCBpbnRfY2ZnLT5pbnRfYml0X3R5cGUpOw0KKyAgICBkd19ncGlvX2ludF93cml0ZV9wb2xhcml0eShwb3J0LCBpbnRfY2ZnLT5pbnRfYml0X21hc2ssIGludF9jZmctPmludF9iaXRfcG9sYXJpdHkpOw0KKyAgICBkd19ncGlvX2ludF93cml0ZV9kZWJvdW5jZShwb3J0LCBpbnRfY2ZnLT5pbnRfYml0X21hc2ssIGludF9jZmctPmludF9iaXRfZGVib3VuY2UpOw0KK30NCisNCitzdGF0aWMgdm9pZCBkd19ncGlvX2dldF9pbnRfY2ZnKERXX0dQSU9fUE9SVF9QVFIgcG9ydCwgREVWX0dQSU9fSU5UX0NGRyAqaW50X2NmZykNCit7DQorICAgIGludF9jZmctPmludF9iaXRfdHlwZSA9IGR3X2dwaW9faW50X3JlYWRfbGV2ZWwocG9ydCkgJiBpbnRfY2ZnLT5pbnRfYml0X21hc2s7DQorICAgIGludF9jZmctPmludF9iaXRfcG9sYXJpdHkgPSBkd19ncGlvX2ludF9yZWFkX3BvbGFyaXR5KHBvcnQpICYgaW50X2NmZy0+aW50X2JpdF9tYXNrOw0KKyAgICBpbnRfY2ZnLT5pbnRfYml0X2RlYm91bmNlID0gZHdfZ3Bpb19pbnRfcmVhZF9kZWJvdW5jZShwb3J0KSAmIGludF9jZmctPmludF9iaXRfbWFzazsNCit9DQorDQorc3RhdGljIHZvaWQgZHdfZ3Bpb193cml0ZV9kcihEV19HUElPX1BPUlRfUFRSIHBvcnQsIHVpbnQzMl90IGJpdF9tYXNrLCB1aW50MzJfdCB2YWwpDQorew0KKyAgICB1aW50MzJfdCB0ZW1wX3JlZzsNCisNCisgICAgdGVtcF9yZWcgPSBwb3J0LT5yZWdzLT5TV1BPUlRTW3BvcnQtPm5vXS5EUjsNCisgICAgdGVtcF9yZWcgJj0gfmJpdF9tYXNrOw0KKyAgICB2YWwgJj0gYml0X21hc2s7DQorICAgIHRlbXBfcmVnIHw9IHZhbDsNCisNCisgICAgcG9ydC0+cmVncy0+U1dQT1JUU1twb3J0LT5ub10uRFIgPSB0ZW1wX3JlZzsNCit9DQorDQorc3RhdGljIHZvaWQgZHdfZ3Bpb193cml0ZV9kaXIoRFdfR1BJT19QT1JUX1BUUiBwb3J0LCB1aW50MzJfdCBiaXRfbWFzaywgdWludDMyX3QgdmFsKQ0KK3sNCisgICAgdWludDMyX3QgdGVtcF9yZWc7DQorDQorICAgIHRlbXBfcmVnID0gcG9ydC0+cmVncy0+U1dQT1JUU1twb3J0LT5ub10uRERSOw0KKyAgICB0ZW1wX3JlZyAmPSB+Yml0X21hc2s7DQorICAgIHZhbCAmPSBiaXRfbWFzazsNCisgICAgdGVtcF9yZWcgfD0gdmFsOw0KKw0KKyAgICBwb3J0LT5yZWdzLT5TV1BPUlRTW3BvcnQtPm5vXS5ERFIgPSB0ZW1wX3JlZzsNCit9DQorDQorc3RhdGljIHVpbnQzMl90IGR3X2dwaW9fcmVhZF92YWwoRFdfR1BJT19QT1JUX1BUUiBwb3J0KQ0KK3sNCisgICAgdWludDMyX3QgdmFsOw0KKw0KKyAgICB2YWwgPSBkd19ncGlvX3JlYWRfZXh0KHBvcnQpICYgKH5kd19ncGlvX3JlYWRfZGlyKHBvcnQpKTsNCisgICAgdmFsIHw9IGR3X2dwaW9fcmVhZF9kcihwb3J0KSAmIGR3X2dwaW9fcmVhZF9kaXIocG9ydCk7DQorDQorICAgIHJldHVybiB2YWw7DQorfQ0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgREVWSUNFX0RXX0dQSU9fU1RBVElDICovDQorDQorLyogaW50ZXJmYWNlIGZvciBERVZfR1BJTyAqLw0KKy8qKiBPcGVuIGRlc2lnbndhcmUgZ3BpbyBkZXZpY2Ugd2l0aCBzcGVjaWZpZWQgaW8gZGlyZWN0aW9uIGNvbmZpZ3VyYXRpb24gKi8NCitpbnQzMl90IGR3X2dwaW9fb3BlbihERVZfR1BJTyAqZ3Bpb19vYmosIHVpbnQzMl90IGRpcikNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9HUElPX0lORk9fUFRSIHBvcnRfaW5mb19wdHIgPSAmKGdwaW9fb2JqLT5ncGlvX2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfR1BJT19JTkZPX09CSkVDVChwb3J0X2luZm9fcHRyKTsNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIERXX0dQSU9fUE9SVF9QVFIgcG9ydCA9IChEV19HUElPX1BPUlRfUFRSKShwb3J0X2luZm9fcHRyLT5ncGlvX2N0cmwpOw0KKyAgICBEV19HUElPX0NIRUNLX0VYUChwb3J0LT5ubyA8PSBEV19HUElPX1BPUlRfRCwgRV9PQkopOw0KKw0KKyAgICBwb3J0X2luZm9fcHRyLT5vcG5fY250ICsrOw0KKw0KKyAgICBpZiAocG9ydF9pbmZvX3B0ci0+b3BuX2NudCA+IDEpICAgLyogb3BlbmVkIGJlZm9yZSAqLw0KKyAgICB7DQorICAgICAgICBpZiAoZGlyID09IHBvcnRfaW5mb19wdHItPmRpcmVjdGlvbikgICAvKiBkaXJlY3Rpb24gaXMgdGhlIHNhbWUgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gRV9PSzsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgICAgIC8qIG9wZW4gd2l0aCBkaWZmZXJlbnQgZGlyZWN0aW9uICovDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIEVfT1BORUQ7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgZHdfZ3Bpb193cml0ZV9kaXIocG9ydCwgcG9ydC0+dmFsaWRfYml0X21hc2ssIGRpcik7DQorDQorICAgIGlmIChwb3J0LT5ubyA9PSBEV19HUElPX1BPUlRfQSkNCisgICAgew0KKyAgICAgICAgZHdfZ3Bpb19pbnRfY2xlYXIocG9ydCwgRFdfR1BJT19NQVNLX0FMTCk7DQorICAgICAgICBkd19ncGlvX2ludF9kaXNhYmxlKHBvcnQsIERXX0dQSU9fTUFTS19BTEwpOw0KKyAgICAgICAgZHdfZ3Bpb19pbnRfdW5tYXNrKHBvcnQsIERXX0dQSU9fTUFTS19BTEwpOw0KKyAgICAgICAgLyogaW5zdGFsbCBncGlvIGludGVycnVwdCBoYW5kbGVyICovDQorICAgICAgICBpbnRfaGFuZGxlcl9pbnN0YWxsKHBvcnQtPmludG5vLCBwb3J0LT5pbnRfaGFuZGxlcik7DQorICAgICAgICBpbnRfZGlzYWJsZShwb3J0LT5pbnRubyk7DQorICAgICAgICAvKiogU2V0IGludCB0eXBlLCBpbnQgcG9sYXJpdHkgYW5kIGRlYm91bmNlIGNvbmZpZ3VyYXRpb24gdG8gZGVmYXVsdCBzZXR0aW5ncyBvZiBkZXZpY2UgZ3BpbyAqLw0KKyAgICAgICAgZHdfZ3Bpb19zZXRfaW50X2NmZyhwb3J0LCAoREVWX0dQSU9fSU5UX0NGRyAqKSgmZ3Bpb19pbnRfY2ZnX2RlZmF1bHQpKTsNCisgICAgICAgIHBvcnRfaW5mb19wdHItPm1ldGhvZCA9IGR3X2dwaW9fcmVhZF9tdGhkKHBvcnQpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcG9ydF9pbmZvX3B0ci0+bWV0aG9kID0gREVWX0dQSU9fQklUU19NVEhEX0RFRkFVTFQ7DQorICAgIH0NCisNCisgICAgZHdfZ3Bpb193cml0ZV9kcihwb3J0LCBwb3J0LT52YWxpZF9iaXRfbWFzaywgMCk7DQorDQorICAgIHBvcnRfaW5mb19wdHItPmRpcmVjdGlvbiA9IGRpcjsNCisgICAgcG9ydF9pbmZvX3B0ci0+ZXh0cmEgPSBOVUxMOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKiogQ2xvc2UgZGVzaWdud2FyZSBncGlvIGRldmljZSAqLw0KK2ludDMyX3QgZHdfZ3Bpb19jbG9zZShERVZfR1BJTyAqZ3Bpb19vYmopDQorew0KKyAgICBpbnQzMl90IGVyY2QgPSBFX09LOw0KKyAgICBERVZfR1BJT19JTkZPX1BUUiBwb3J0X2luZm9fcHRyID0gJihncGlvX29iai0+Z3Bpb19pbmZvKTsNCisNCisgICAgLyogU1RBUlQgRVJST1IgQ0hFQ0sgKi8NCisgICAgVkFMSURfQ0hLX0dQSU9fSU5GT19PQkpFQ1QocG9ydF9pbmZvX3B0cik7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICBEV19HUElPX1BPUlRfUFRSIHBvcnQgPSAoRFdfR1BJT19QT1JUX1BUUikocG9ydF9pbmZvX3B0ci0+Z3Bpb19jdHJsKTsNCisgICAgRFdfR1BJT19DSEVDS19FWFAocG9ydC0+bm8gPD0gRFdfR1BJT19QT1JUX0QsIEVfT0JKKTsNCisNCisgICAgRFdfR1BJT19DSEVDS19FWFAocG9ydF9pbmZvX3B0ci0+b3BuX2NudCA+IDAsIEVfT0spOw0KKw0KKyAgICBwb3J0X2luZm9fcHRyLT5vcG5fY250IC0tOw0KKw0KKyAgICBpZiAocG9ydF9pbmZvX3B0ci0+b3BuX2NudCA9PSAwKQ0KKyAgICB7DQorICAgICAgICBkd19ncGlvX3dyaXRlX2RyKHBvcnQsIHBvcnQtPnZhbGlkX2JpdF9tYXNrLCAwKTsNCisgICAgICAgIGR3X2dwaW9fd3JpdGVfZGlyKHBvcnQsIHBvcnQtPnZhbGlkX2JpdF9tYXNrLCAwKTsNCisNCisgICAgICAgIGlmIChwb3J0LT5ubyA9PSBEV19HUElPX1BPUlRfQSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBkd19ncGlvX2ludF9jbGVhcihwb3J0LCBEV19HUElPX01BU0tfQUxMKTsNCisgICAgICAgICAgICBkd19ncGlvX2ludF9kaXNhYmxlKHBvcnQsIERXX0dQSU9fTUFTS19BTEwpOw0KKyAgICAgICAgICAgIGludF9kaXNhYmxlKHBvcnQtPmludG5vKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHBvcnRfaW5mb19wdHItPmRpcmVjdGlvbiA9IDA7DQorICAgICAgICBwb3J0X2luZm9fcHRyLT5tZXRob2QgPSAwOw0KKyAgICAgICAgcG9ydF9pbmZvX3B0ci0+ZXh0cmEgPSBOVUxMOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgZXJjZCA9IEVfT1BORUQ7DQorICAgIH0NCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqIFJlYWQgZGVzaWdud2FyZSBncGlvIGRldmljZSB2YWx1ZSAqLw0KK2ludDMyX3QgZHdfZ3Bpb19yZWFkKERFVl9HUElPICpncGlvX29iaiwgdWludDMyX3QgKnZhbCwgdWludDMyX3QgbWFzaykNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9HUElPX0lORk9fUFRSIHBvcnRfaW5mb19wdHIgPSAmKGdwaW9fb2JqLT5ncGlvX2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfR1BJT19JTkZPX09CSkVDVChwb3J0X2luZm9fcHRyKTsNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIERXX0dQSU9fUE9SVF9QVFIgcG9ydCA9IChEV19HUElPX1BPUlRfUFRSKShwb3J0X2luZm9fcHRyLT5ncGlvX2N0cmwpOw0KKyAgICBEV19HUElPX0NIRUNLX0VYUChwb3J0LT5ubyA8PSBEV19HUElPX1BPUlRfRCwgRV9PQkopOw0KKyAgICBEV19HUElPX0NIRUNLX0VYUChwb3J0X2luZm9fcHRyLT5vcG5fY250ID4gMCwgRV9DTFNFRCk7DQorDQorICAgIERXX0dQSU9fQ0hFQ0tfRVhQKHZhbCAhPSBOVUxMLCBFX1BBUik7DQorDQorICAgIC8vKnZhbCA9IGR3X2dwaW9fcmVhZF9leHQocG9ydCkgJiBtYXNrOw0KKyAgICAqdmFsID0gZHdfZ3Bpb19yZWFkX3ZhbChwb3J0KSAmIG1hc2s7DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKiBXcml0ZSBkZXNpZ253YXJlIGdwaW8gZGV2aWNlIHZhbHVlICovDQoraW50MzJfdCBkd19ncGlvX3dyaXRlKERFVl9HUElPICpncGlvX29iaiwgdWludDMyX3QgdmFsLCB1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgREVWX0dQSU9fSU5GT19QVFIgcG9ydF9pbmZvX3B0ciA9ICYoZ3Bpb19vYmotPmdwaW9faW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19HUElPX0lORk9fT0JKRUNUKHBvcnRfaW5mb19wdHIpOw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgRFdfR1BJT19QT1JUX1BUUiBwb3J0ID0gKERXX0dQSU9fUE9SVF9QVFIpKHBvcnRfaW5mb19wdHItPmdwaW9fY3RybCk7DQorICAgIERXX0dQSU9fQ0hFQ0tfRVhQKHBvcnQtPm5vIDw9IERXX0dQSU9fUE9SVF9ELCBFX09CSik7DQorICAgIERXX0dQSU9fQ0hFQ0tfRVhQKHBvcnRfaW5mb19wdHItPm9wbl9jbnQgPiAwLCBFX0NMU0VEKTsNCisNCisgICAgZHdfZ3Bpb193cml0ZV9kcihwb3J0LCBtYXNrLCB2YWwpOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKiogQ29udHJvbCBkZXNpZ253YXJlIGdwaW8gZGV2aWNlICovDQoraW50MzJfdCBkd19ncGlvX2NvbnRyb2woREVWX0dQSU8gKmdwaW9fb2JqLCB1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pDQorew0KKyAgICBpbnQzMl90IGVyY2QgPSBFX09LOw0KKyAgICBERVZfR1BJT19JTkZPX1BUUiBwb3J0X2luZm9fcHRyID0gJihncGlvX29iai0+Z3Bpb19pbmZvKTsNCisNCisgICAgLyogU1RBUlQgRVJST1IgQ0hFQ0sgKi8NCisgICAgVkFMSURfQ0hLX0dQSU9fSU5GT19PQkpFQ1QocG9ydF9pbmZvX3B0cik7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICBEV19HUElPX1BPUlRfUFRSIHBvcnQgPSAoRFdfR1BJT19QT1JUX1BUUikocG9ydF9pbmZvX3B0ci0+Z3Bpb19jdHJsKTsNCisgICAgRFdfR1BJT19DSEVDS19FWFAocG9ydC0+bm8gPD0gRFdfR1BJT19QT1JUX0QsIEVfT0JKKTsNCisgICAgRFdfR1BJT19DSEVDS19FWFAocG9ydF9pbmZvX3B0ci0+b3BuX2NudCA+IDAsIEVfQ0xTRUQpOw0KKw0KKyAgICB1aW50MzJfdCB2YWwzMjsgLyoqIHRvIHJlY2VpdmUgdW5zaWduZWQgaW50IHZhbHVlICovDQorDQorICAgIGlmIChjdHJsX2NtZCA9PSBHUElPX0NNRF9TRVRfQklUX0RJUl9JTlBVVCkNCisgICAgew0KKyAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorICAgICAgICBkd19ncGlvX3dyaXRlX2Rpcihwb3J0LCB2YWwzMiwgRFdfR1BJT19JTlBVVF9BTEwpOw0KKyAgICAgICAgcG9ydF9pbmZvX3B0ci0+ZGlyZWN0aW9uID0gZHdfZ3Bpb19yZWFkX2Rpcihwb3J0KTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChjdHJsX2NtZCA9PSBHUElPX0NNRF9TRVRfQklUX0RJUl9PVVRQVVQpDQorICAgIHsNCisgICAgICAgIHZhbDMyID0gKHVpbnQzMl90KXBhcmFtOw0KKyAgICAgICAgZHdfZ3Bpb193cml0ZV9kaXIocG9ydCwgdmFsMzIsIERXX0dQSU9fT1VUUFVUX0FMTCk7DQorICAgICAgICBwb3J0X2luZm9fcHRyLT5kaXJlY3Rpb24gPSBkd19ncGlvX3JlYWRfZGlyKHBvcnQpOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGN0cmxfY21kID09IEdQSU9fQ01EX0dFVF9CSVRfRElSKQ0KKyAgICB7DQorICAgICAgICBEV19HUElPX0NIRUNLX0VYUCgocGFyYW0gIT0gTlVMTCkgJiYgQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgcG9ydF9pbmZvX3B0ci0+ZGlyZWN0aW9uID0gZHdfZ3Bpb19yZWFkX2Rpcihwb3J0KTsNCisgICAgICAgICooKGludDMyX3QgKilwYXJhbSkgPSBwb3J0X2luZm9fcHRyLT5kaXJlY3Rpb247DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBEV19HUElPX0NIRUNLX0VYUChwb3J0LT5ubyA9PSBEV19HUElPX1BPUlRfQSwgRV9OT1NQVCk7DQorICAgICAgICAvKiBvdXRwdXQgcGluIGNhbm5vdCBiZSB1c2VkIGFzIGludGVycnVwdCAqLw0KKyAgICAgICAgREVWX0dQSU9fSU5UX0NGRyAqZ3Bpb19pbnRfY2ZnOw0KKyAgICAgICAgREVWX0dQSU9fQklUX0lTUiAqcG9ydF9iaXRfaXNyOw0KKw0KKyAgICAgICAgc3dpdGNoIChjdHJsX2NtZCkNCisgICAgICAgIHsNCisgICAgICAgIGNhc2UgR1BJT19DTURfU0VUX0JJVF9JTlRfQ0ZHOg0KKyAgICAgICAgICAgIERXX0dQSU9fQ0hFQ0tfRVhQKChwYXJhbSAhPSBOVUxMKSAmJiBDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICAgICAgZ3Bpb19pbnRfY2ZnID0gKERFVl9HUElPX0lOVF9DRkcgKilwYXJhbTsNCisgICAgICAgICAgICBkd19ncGlvX3NldF9pbnRfY2ZnKHBvcnQsIGdwaW9faW50X2NmZyk7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIEdQSU9fQ01EX0dFVF9CSVRfSU5UX0NGRzoNCisgICAgICAgICAgICBEV19HUElPX0NIRUNLX0VYUCgocGFyYW0gIT0gTlVMTCkgJiYgQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgICAgIGdwaW9faW50X2NmZyA9IChERVZfR1BJT19JTlRfQ0ZHICopcGFyYW07DQorICAgICAgICAgICAgLyoqIHJlYWQgY29uZmlndXJhdGlvbiwgZWFjaCBiaXQgc3RhbmRzIGZvciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiAqLw0KKyAgICAgICAgICAgIGR3X2dwaW9fZ2V0X2ludF9jZmcocG9ydCwgZ3Bpb19pbnRfY2ZnKTsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgR1BJT19DTURfU0VUX0JJVF9JU1I6DQorICAgICAgICAgICAgRFdfR1BJT19DSEVDS19FWFAoKHBhcmFtICE9IE5VTEwpICYmIENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgICAgICBwb3J0X2JpdF9pc3IgPSAoREVWX0dQSU9fQklUX0lTUiAqKXBhcmFtOw0KKw0KKyAgICAgICAgICAgIGlmIChwb3J0X2JpdF9pc3ItPmludF9iaXRfb2ZzIDwgcG9ydC0+Z3Bpb19iaXRfaXNyLT5pbnRfYml0X21heF9jbnQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBwb3J0LT5ncGlvX2JpdF9pc3ItPmludF9iaXRfaGFuZGxlcl9wdHJbcG9ydF9iaXRfaXNyLT5pbnRfYml0X29mc10gPSBwb3J0X2JpdF9pc3ItPmludF9iaXRfaGFuZGxlcjsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZXJjZCA9IEVfUEFSOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgR1BJT19DTURfR0VUX0JJVF9JU1I6DQorICAgICAgICAgICAgRFdfR1BJT19DSEVDS19FWFAoKHBhcmFtICE9IE5VTEwpICYmIENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgICAgICBwb3J0X2JpdF9pc3IgPSAoREVWX0dQSU9fQklUX0lTUiAqKXBhcmFtOw0KKw0KKyAgICAgICAgICAgIGlmIChwb3J0X2JpdF9pc3ItPmludF9iaXRfb2ZzIDwgcG9ydC0+Z3Bpb19iaXRfaXNyLT5pbnRfYml0X21heF9jbnQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBwb3J0X2JpdF9pc3ItPmludF9iaXRfaGFuZGxlciA9IHBvcnQtPmdwaW9fYml0X2lzci0+aW50X2JpdF9oYW5kbGVyX3B0cltwb3J0X2JpdF9pc3ItPmludF9iaXRfb2ZzXTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZXJjZCA9IEVfUEFSOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgR1BJT19DTURfRU5BX0JJVF9JTlQ6DQorICAgICAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorICAgICAgICAgICAgZHdfZ3Bpb19pbnRfZW5hYmxlKHBvcnQsIHZhbDMyKTsNCisgICAgICAgICAgICBwb3J0X2luZm9fcHRyLT5tZXRob2QgPSBkd19ncGlvX3JlYWRfbXRoZChwb3J0KTsNCisNCisgICAgICAgICAgICBpZiAocG9ydF9pbmZvX3B0ci0+bWV0aG9kKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaW50X2VuYWJsZShwb3J0LT5pbnRubyk7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBHUElPX0NNRF9ESVNfQklUX0lOVDoNCisgICAgICAgICAgICB2YWwzMiA9ICh1aW50MzJfdClwYXJhbTsNCisgICAgICAgICAgICBkd19ncGlvX2ludF9kaXNhYmxlKHBvcnQsIHZhbDMyKTsNCisgICAgICAgICAgICBwb3J0X2luZm9fcHRyLT5tZXRob2QgPSBkd19ncGlvX3JlYWRfbXRoZChwb3J0KTsNCisNCisgICAgICAgICAgICBpZiAocG9ydF9pbmZvX3B0ci0+bWV0aG9kID09IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpbnRfZGlzYWJsZShwb3J0LT5pbnRubyk7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBHUElPX0NNRF9HRVRfQklUX01USEQ6DQorICAgICAgICAgICAgRFdfR1BJT19DSEVDS19FWFAoKHBhcmFtICE9IE5VTEwpICYmIENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgICAgICBwb3J0X2luZm9fcHRyLT5tZXRob2QgPSBkd19ncGlvX3JlYWRfbXRoZChwb3J0KTsNCisgICAgICAgICAgICAqKChpbnQzMl90ICopcGFyYW0pID0gcG9ydF9pbmZvX3B0ci0+bWV0aG9kOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICBlcmNkID0gRV9OT1NQVDsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKiogZGVzaWdud2FyZSBncGlvIGludGVycnVwdCBwcm9jZXNzICovDQoraW50MzJfdCBkd19ncGlvX2lzcl9oYW5kbGVyKERFVl9HUElPICpncGlvX29iaiwgdm9pZCAqcHRyKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgREVWX0dQSU9fSU5GT19QVFIgcG9ydF9pbmZvX3B0ciA9ICYoZ3Bpb19vYmotPmdwaW9faW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19HUElPX0lORk9fT0JKRUNUKHBvcnRfaW5mb19wdHIpOw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgRFdfR1BJT19QT1JUX1BUUiBwb3J0ID0gKERXX0dQSU9fUE9SVF9QVFIpKHBvcnRfaW5mb19wdHItPmdwaW9fY3RybCk7DQorICAgIERXX0dQSU9fQ0hFQ0tfRVhQKHBvcnQtPm5vID09IERXX0dQSU9fUE9SVF9BLCBFX05PU1BUKTsNCisNCisgICAgdWludDMyX3QgaSwgZ3Bpb19iaXRfaXNyX3N0YXRlOw0KKyAgICB1aW50MzJfdCBtYXhfaW50X2JpdF9jb3VudCA9IDA7DQorDQorICAgIC8qKiByZWFkIGludGVycnVwdCBzdGF0dXMgKi8NCisgICAgZ3Bpb19iaXRfaXNyX3N0YXRlID0gZHdfZ3Bpb19pbnRfcmVhZF9zdGF0dXMocG9ydCk7DQorDQorICAgIGlmIChwb3J0LT5ncGlvX2JpdF9pc3IpDQorICAgIHsNCisgICAgICAgIG1heF9pbnRfYml0X2NvdW50ID0gKHBvcnQtPmdwaW9fYml0X2lzci0+aW50X2JpdF9tYXhfY250KTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGR3X2dwaW9faW50X2NsZWFyKHBvcnQsIGdwaW9fYml0X2lzcl9zdGF0ZSk7DQorICAgIH0NCisNCisgICAgZm9yIChpID0gMDsgaSA8IG1heF9pbnRfYml0X2NvdW50OyBpKyspDQorICAgIHsNCisgICAgICAgIGlmIChncGlvX2JpdF9pc3Jfc3RhdGUgJiAoMSA8PCBpKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvKiB0aGlzIGJpdCBpbnRlcnJ1cHQgZW5hYmxlZCAqLw0KKyAgICAgICAgICAgIGlmIChwb3J0LT5ncGlvX2JpdF9pc3ItPmludF9iaXRfaGFuZGxlcl9wdHJbaV0pDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBwb3J0LT5ncGlvX2JpdF9pc3ItPmludF9iaXRfaGFuZGxlcl9wdHJbaV0oZ3Bpb19vYmopOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBkd19ncGlvX2ludF9jbGVhcihwb3J0LCAoMSA8PCBpKSk7IC8qKiBjbGVhciB0aGlzIGJpdCBpbnRlcnJ1cHQgKi8NCisgICAgICAgIH0NCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvZ3Bpby9kd19ncGlvLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvZ3Bpby9kd19ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRiY2I4ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9ncGlvL2R3X2dwaW8uaApAQCAtMCwwICsxLDE0OSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0yMg0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGJyaWVmICAgZGVzaWdud2FyZSBncGlvIGRyaXZlcg0KKyAqIFxpbmdyb3VwIERFVklDRV9EV19HUElPDQorICogXGJyaWVmICAgRGVzaWdud2FyZSBHUElPIGRyaXZlciBoZWFkZXIgZmlsZQ0KKyAqLw0KKw0KKyNpZm5kZWYgX0RXX0dQSU9fSF8NCisjZGVmaW5lIF9EV19HUElPX0hfDQorDQorI2luY2x1ZGUgImRldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfZ3Bpby5oIg0KKw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19leGNlcHRpb24uaCINCisNCisjZGVmaW5lIERXX0dQSU9fUE9SVF9BICAoMHgwMCkNCisjZGVmaW5lIERXX0dQSU9fUE9SVF9CICAoMHgwMSkNCisjZGVmaW5lIERXX0dQSU9fUE9SVF9DICAoMHgwMikNCisjZGVmaW5lIERXX0dQSU9fUE9SVF9EICAoMHgwMykNCisNCisjZGVmaW5lIERXX0dQSU9fSU5UX0FDVF9MT1cgICAgICAgICBHUElPX0lOVF9BQ1RJVkVfTE9XDQorI2RlZmluZSBEV19HUElPX0lOVF9BQ1RfSElHSCAgICAgICAgICAgIEdQSU9fSU5UX0FDVElWRV9ISUdIDQorDQorI2RlZmluZSBEV19HUElPX0lOVF9MRVZFTF9UUklHICAgICAgICAgIEdQSU9fSU5UX0xFVkVMX1RSSUcNCisjZGVmaW5lIERXX0dQSU9fSU5UX0VER0VfVFJJRyAgICAgICAgICAgR1BJT19JTlRfRURHRV9UUklHDQorDQorI2RlZmluZSBEV19HUElPX0lOVF9OT19ERUJPVU5DRSAgICAgICAgIEdQSU9fSU5UX05PX0RFQk9VTkNFDQorI2RlZmluZSBEV19HUElPX0lOVF9ERUJPVU5DRSAgICAgICAgICAgIEdQSU9fSU5UX0RFQk9VTkNFDQorDQorI2RlZmluZSBEV19HUElPX0FMTF9aRVJPICAgICAgICAgICAgKDB4MCkNCisjZGVmaW5lIERXX0dQSU9fQUxMX09ORSAgICAgICAgICAgICAoMHhmZmZmZmZmZikNCisjZGVmaW5lIERXX0dQSU9fTUFTS19BTEwgICAgICAgICAgICAoMHhmZmZmZmZmZikNCisjZGVmaW5lIERXX0dQSU9fSU5QVVRfQUxMICAgICAgICAgICAoMHgwKQ0KKyNkZWZpbmUgRFdfR1BJT19PVVRQVVRfQUxMICAgICAgICAgICgweGZmZmZmZmZmKQ0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgR1BJTyBSZWdpc3RlciBTdHJ1Y3R1cmUNCisgKiBcYnJpZWYgICBjb250YWlucyBkZWZpbml0aW9ucyBvZiBEZXNpZ25XYXJlIEdQSU8gcmVnaXN0ZXIgc3RydWN0dXJlLg0KKyAqIEB7DQorICovDQordHlwZWRlZiBzdHJ1Y3QgcG9ydF9jdHJsDQorew0KKyAgICB1aW50MzJfdCBEUjsNCisgICAgdWludDMyX3QgRERSOw0KKyAgICB1aW50MzJfdCBDVFJMOw0KK30gUE9SVF9DVFJMOw0KKw0KKy8qIERXIEdQSU8gUE9SVFMgUmVnaXN0ZXJzICovDQordHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgZHdfZ3Bpb19yZWcNCit7DQorICAgIFBPUlRfQ1RSTCBTV1BPUlRTWzRdOw0KKyAgICB1aW50MzJfdCBJTlRFTjsgICAgIC8qITwgKDB4MzApICovDQorICAgIHVpbnQzMl90IElOVE1BU0s7ICAgLyohPCAoMHgzNCkgKi8NCisgICAgdWludDMyX3QgSU5UVFlQRV9MRVZFTDsgLyohPCAoMHgzOCkgKi8NCisgICAgdWludDMyX3QgSU5UX1BPTEFSSVRZOyAgLyohPCAoMHgzYykgKi8NCisgICAgdWludDMyX3QgSU5UU1RBVFVTOyAvKiE8ICgweDQwKSAqLw0KKyAgICB1aW50MzJfdCBSQVdfSU5UU1RBVFVTOyAvKiE8ICgweDQ0KSAqLw0KKyAgICB1aW50MzJfdCBERUJPVU5DRTsgIC8qITwgKDB4NDgpICovDQorICAgIHVpbnQzMl90IFBPUlRBX0VPSTsgLyohPCAoMHg0YykgKi8NCisgICAgdWludDMyX3QgRVhUX1BPUlRTWzRdOyAgLyohPCAoMHg1MCkgLUENCisgICAgICAgICAgICAgICAgICAgICAoMHg1NCkgLUINCisgICAgICAgICAgICAgICAgICAgICAoMHg1OCkgLUMNCisgICAgICAgICAgICAgICAgICAgICAoMHg1YykgLUQgKi8NCisgICAgdWludDMyX3QgTFNfU1lOQzsgICAvKiE8ICgweDYwKSAqLw0KKyAgICB1aW50MzJfdCBJRF9DT0RFOyAgIC8qITwgKDB4NjQpICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVEXzM7ICAgIC8qITwgKDB4NjgpICovDQorICAgIHVpbnQzMl90IFZFUl9JRF9DT0RFOyAgIC8qITwgKDB4NmMpICovDQorICAgIHVpbnQzMl90IENPTkZJR19SRUcyOyAgIC8qITwgKDB4NzApICovDQorICAgIHVpbnQzMl90IENPTkZJR19SRUcxOyAgIC8qITwgKDB4NzQpICovDQorfSBEV19HUElPX1JFRywgKkRXX0dQSU9fUkVHX1BUUjsNCisvKiogQH0gKi8NCisNCisvKiogaW50ZXJydXB0IGhhbmRsZXIgZm9yIGVhY2ggcG9ydCBiaXQgKi8NCit0eXBlZGVmIHN0cnVjdCBkd19ncGlvX2JpdF9pc3INCit7DQorICAgIHVpbnQzMl90IGludF9iaXRfbWF4X2NudDsgICAgICAgLyohPCBtYXggYml0IGNvdW50IGZvciBlYWNoIHBvcnQgKi8NCisgICAgREVWX0dQSU9fSEFORExFUiAqaW50X2JpdF9oYW5kbGVyX3B0cjsgIC8qITwgaW50ZXJydXB0IGhhbmRsZXIgcG9pbnRlciAqLw0KK30gRFdfR1BJT19CSVRfSVNSLCAqIERXX0dQSU9fQklUX0lTUl9QVFI7DQorDQorLyoqDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBHUElPIGNvbnRyb2wgc3RydWN0dXJlIGRlZmluaXRpb24NCisgKiBcZGV0YWlscyBpbXBsZW1lbnQgb2YgZGV2X2dwaW9faW5mbzo6Z3Bpb19jdHJsDQorICovDQordHlwZWRlZiBzdHJ1Y3QgZHdfZ3Bpb19wb3J0DQorew0KKyAgICB1aW50MzJfdCBubzsgICAgICAgICAgICAgICAgLyohPCBncGlvIHBvcnQgbnVtYmVyICovDQorICAgIERXX0dQSU9fUkVHX1BUUiByZWdzOyAgICAgICAgICAgLyohPCBncGlvIHBvcnQgcmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgaW50bm87ICAgICAgICAgICAgIC8qITwgZ3BpbyBpbnRlcnJ1cHQgdmVjdG9yIG51bWJlciAqLw0KKyAgICB1aW50MzJfdCB2YWxpZF9iaXRfbWFzazsgICAgICAgIC8qITwgdmFsaWQgYml0IG1hc2sgb2YgZ3BpbyBwb3J0ICovDQorICAgIElOVF9IQU5ETEVSIGludF9oYW5kbGVyOyAgICAgICAgLyohPCBncGlvIGludGVycnVwdCBoYW5kbGVyICovDQorICAgIERXX0dQSU9fQklUX0lTUl9QVFIgZ3Bpb19iaXRfaXNyOyAgIC8qITwgZ3BpbyBiaXQgaGFuZGxlciBzdHJ1Y3QgKi8NCit9IERXX0dQSU9fUE9SVCwgKkRXX0dQSU9fUE9SVF9QVFI7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBHUElPIEZ1bmN0aW9uIERlY2xhcmF0aW9uDQorICogXGJyaWVmICAgY29udGFpbnMgZGVjbGFyYXRpb25zIG9mIGRlc2lnbndhcmUgZ3BpbyBmdW5jdGlvbnMuDQorICogXGRldGFpbHMgVGhpcyBhcmUgb25seSB1c2VkIGluIGdwaW8gb2JqZWN0IGltcGxlbWVudGF0aW9uIHNvdXJjZSBmaWxlDQorICogQHsNCisgKi8NCitleHRlcm4gaW50MzJfdCBkd19ncGlvX29wZW4oREVWX0dQSU8gKmdwaW9fb2JqLCB1aW50MzJfdCBkaXIpOw0KK2V4dGVybiBpbnQzMl90IGR3X2dwaW9fY2xvc2UoREVWX0dQSU8gKmdwaW9fb2JqKTsNCitleHRlcm4gaW50MzJfdCBkd19ncGlvX3JlYWQoREVWX0dQSU8gKmdwaW9fb2JqLCB1aW50MzJfdCAqdmFsLCB1aW50MzJfdCBtYXNrKTsNCitleHRlcm4gaW50MzJfdCBkd19ncGlvX3dyaXRlKERFVl9HUElPICpncGlvX29iaiwgdWludDMyX3QgdmFsLCB1aW50MzJfdCBtYXNrKTsNCitleHRlcm4gaW50MzJfdCBkd19ncGlvX2NvbnRyb2woREVWX0dQSU8gKmdwaW9fb2JqLCB1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pOw0KK2V4dGVybiBpbnQzMl90IGR3X2dwaW9faXNyX2hhbmRsZXIoREVWX0dQSU8gKmdwaW9fb2JqLCB2b2lkICpwdHIpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisvKiogQH0gKi8NCisNCisjZW5kaWYgLyogX0RXX0dQSU9fSF8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaS5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGI3YmVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGkuYwpAQCAtMCwwICsxLDE1NzkgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTQtMDYtMjUNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9EV19TUEkgICBEZXNpZ253YXJlIFNQSSBEcml2ZXINCisgKiBcaW5ncm91cCBERVZJQ0VfRFcNCisgKiBcYnJpZWYgICBEZXNpZ253YXJlIFNQSSBEcml2ZXIgSW1wbGVtZW50YXRpb24NCisgKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBkZXZpY2UgaGFsIGxheWVyIGRlZmluaXRpb24gKFxyZWYgZGV2X3NwaS5oKQ0KKyAqIFxpbmdyb3VwIERFVklDRV9EV19TUEkNCisgKi8NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfZXJyb3IuaCINCisNCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmgiDQorDQorI2luY2x1ZGUgImRldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGlfaGFsLmgiDQorI2luY2x1ZGUgImRldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGkuaCINCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0RXX1NQSV9ERUZJTkVTICAgRGVzaWduV2FyZSBTUEkgRHJpdmVyIE1hY3Jvcw0KKyAqIFxpbmdyb3VwIERFVklDRV9EV19TUEkNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFNQSSBkcml2ZXIgbWFjcm9zIHVzZWQgaW4gc3BpIGRyaXZlcg0KKyAqIEB7DQorICovDQorLyoqIGNoZWNrIGV4cHJlc3Npb25zIHVzZWQgaW4gRGVzaWduV2FyZSBTUEkgZHJpdmVyIGltcGxlbWVudGF0aW9uICovDQorI2RlZmluZSBEV19TUElfQ0hFQ0tfRVhQKEVYUFIsIEVSUk9SX0NPREUpICAgICAgQ0hFQ0tfRVhQKEVYUFIsIGVyY2QsIEVSUk9SX0NPREUsIGVycm9yX2V4aXQpDQorDQorLyoqIGNvbnZlcnQgRGVzaWduV2FyZSBmcmVxdWVuY2UgdG8gZGl2aXNvciAqLw0KKyNkZWZpbmUgRFdfU1BJX0ZSRVEyRFYocGVyaWZyZXEsIHNwaWZyZXEpICAgICAgICgocGVyaWZyZXEpIC8gKHNwaWZyZXEpKQ0KKw0KKyNpZm5kZWYgRElTQUJMRV9ERVZJQ0VfT0JKRUNUX1ZBTElEX0NIRUNLDQorLyoqIHZhbGlkIGNoZWNrIG9mIHNwaSBpbmZvIG9iamVjdCAqLw0KKyNkZWZpbmUgVkFMSURfQ0hLX1NQSV9JTkZPX09CSkVDVChzcGlpbmZvX29ial9wdHIpICAgICAgeyAgICAgICAgICAgXA0KKyAgICAgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaWluZm9fb2JqX3B0cikhPU5VTEwsIEVfT0JKKTsgICAgICAgXA0KKyAgICAgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKChzcGlpbmZvX29ial9wdHIpLT5zcGlfY3RybCkhPU5VTEwsIEVfT0JKKTsgICBcDQorICAgICAgICB9DQorI2VuZGlmDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9EV19TUElfREVGX0NCUiAgIERlc2lnbldhcmUgU1BJIEludGVycnVwdCBDYWxsYmFjayBSb3V0aW5lIFNlbGVjdCBNYXJjb3MNCisgKiBcaW5ncm91cCBERVZJQ0VfRFdfU1BJX0RFRklORVMNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFNQSSBpbnRlcnJ1cHQgY2FsbGJhY2sgcm91dGluZXMgc2VsZWN0IG1hY3JvcyBkZWZpbml0aW9ucw0KKyAqIEB7DQorICovDQorI2RlZmluZSBEV19TUElfUkRZX1NORCAgICAgICAgICAgICAgICAgICgxVSkgICAgLyohPCByZWFkeSB0byBzZW5kIGNhbGxiYWNrICovDQorI2RlZmluZSBEV19TUElfUkRZX1JDViAgICAgICAgICAgICAgICAgICgyVSkgICAgLyohPCByZWFkeSB0byByZWNlaXZlIGNhbGxiYWNrICovDQorI2RlZmluZSBEV19TUElfUkRZX1hGRVIgICAgICAgICAgICAgICAgICgzVSkgICAgLyohPCByZWFkeSB0byB0cmFuc2ZlciBjYWxsYmFjayAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfRFdfU1BJX1NUQVRJQyAgICBEZXNpZ25XYXJlIFNQSSBEcml2ZXIgU3RhdGljIEZ1bmN0aW9ucw0KKyAqIFxpbmdyb3VwIERFVklDRV9EV19TUEkNCisgKiBcYnJpZWYgICBTdGF0aWMgb3IgaW5saW5lIGZ1bmN0aW9ucywgdmFyaWFibGVzIGZvciBEZXNpZ25XYXJlIFNQSSBoYW5kbGUgc3BpIG9wZXJhdGlvbnMsDQorICogIG9ubHkgdXNlZCBpbiB0aGlzIGZpbGUuDQorICogQHsNCisgKi8NCisNCisvKiogRGlzYWJsZSBkZXNpZ253YXJlIHNwaSBkZXZpY2UgKi8NCitJbmxpbmUgdm9pZCBkd19zcGlfZGlzYWJsZShEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgIC8qKiBkaXNhYmxlIHNwaSBvcGVyYXRpb25zLCB0aGVuIHByb2dyYW0gc3BpIGNvbnRyb2wgcmVncyBpcyBwb3NzaWJsZSAqLw0KKyAgICBzcGlfcmVnX3B0ci0+U1NJRU5SID0gRFdfU1BJX1NTSV9ESVNBQkxFOw0KK30NCisvKiogRW5hYmxlIGRlc2lnbndhcmUgc3BpIGRldmljZSAqLw0KK0lubGluZSB2b2lkIGR3X3NwaV9lbmFibGUoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIpDQorew0KKyAgICBzcGlfcmVnX3B0ci0+U1NJRU5SID0gRFdfU1BJX1NTSV9FTkFCTEU7DQorfQ0KKw0KKy8qKiBDbGVhciBhbGwgZGVzaWdud2FyZSBzcGkgaW50ZXJydXB0ICovDQorSW5saW5lIHZvaWQgZHdfc3BpX2NsZWFyX2ludGVycnVwdF9hbGwoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIpDQorew0KKyAgICAodm9pZClzcGlfcmVnX3B0ci0+SUNSOw0KK30NCisNCisvKiogdGVzdCB3aGV0aGVyIHNwaSBpcyBidXN5LCBidXN5IHJldHVybiAxLCBlbHNlIDAgKi8NCitJbmxpbmUgaW50MzJfdCBkd19zcGlfYnVzeShEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgIHJldHVybiAoKHNwaV9yZWdfcHRyLT5TUiAmIERXX1NQSV9TUl9CVVNZKSAhPSAwKTsNCit9DQorLyoqIHRlc3Qgd2hldGhlciBzcGkgaXMgcmVhZHkgdG8gc2VuZCwgMSByZWFkeSwgMCBub3QgcmVhZHkgKi8NCitJbmxpbmUgaW50MzJfdCBkd19zcGlfcHV0cmVhZHkoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIpDQorew0KKyAgICByZXR1cm4gKChzcGlfcmVnX3B0ci0+U1IgJiBEV19TUElfU1JfVEZORikgIT0gMCk7DQorfQ0KKy8qKiB0ZXN0IHdoZXRoZXIgc3BpIGlzIHJlYWQgdG8gcmVjZWl2ZSwgMSByZWFkeSwgMCBub3QgcmVhZHkgKi8NCitJbmxpbmUgaW50MzJfdCBkd19zcGlfZ2V0cmVhZHkoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIpDQorew0KKyAgICByZXR1cm4gKChzcGlfcmVnX3B0ci0+U1IgJiBEV19TUElfU1JfUkZORSkgIT0gMCk7DQorfQ0KKy8qKiB3cml0ZSBkYXRhIHRvIHNwaSBzZW5kIGZpZm8gKi8NCitJbmxpbmUgdm9pZCBkd19zcGlfcHV0ZGF0YShEV19TUElfUkVHICpzcGlfcmVnX3B0ciwgaW50MzJfdCBkYXRhKQ0KK3sNCisgICAgc3BpX3JlZ19wdHItPkRBVEFSRUcgPSAodWludDMyX3QpZGF0YTsNCit9DQorLyoqIHJlYWQgZGF0YSBmcm9tIHNwaSByZWNlaXZlIGZpZm8sIHJldHVybiBkYXRhIHJlY2VpdmVkICovDQorSW5saW5lIGludDMyX3QgZHdfc3BpX2dldGRhdGEoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIpDQorew0KKyAgICByZXR1cm4gKGludDMyX3Qpc3BpX3JlZ19wdHItPkRBVEFSRUc7DQorfQ0KKy8qKg0KKyAqIFxicmllZiAgIHNlbmQgZGF0YSBieSBzcGkgd2hlbiBhdmFpbGFibGUsDQorICogIG1vc3RseSB1c2VkIGluIGludGVycnVwdCBtZXRob2QsIG5vbi1ibG9ja2VkIGZ1bmN0aW9uDQorICogXHBhcmFtW2luXSAgIHNwaV9yZWdfcHRyIHNwaSByZWdpc3RlciBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqIFxwYXJhbVtpbl0gICBkYXRhICAgICAgICBkYXRhIHRvIGJlIHNlbnQNCisgKiBccmV0dmFsICBFX09LICAgICAgICBzZW5kIHN1Y2Nlc3NmdWxseQ0KKyAqIFxyZXR2YWwgIEVfT0JKICAgICAgIG5vdCByZWFkeSB0byBzZW5kIGRhdGENCisgKi8NCitJbmxpbmUgaW50MzJfdCBkd19zcGlfc25kX2RhdChEV19TUElfUkVHICpzcGlfcmVnX3B0ciwgaW50MzJfdCBkYXRhKQ0KK3sNCisgICAgaWYgKGR3X3NwaV9wdXRyZWFkeShzcGlfcmVnX3B0cikpDQorICAgIHsNCisgICAgICAgIGR3X3NwaV9wdXRkYXRhKHNwaV9yZWdfcHRyLCBkYXRhKTsNCisgICAgICAgIHJldHVybiBFX09LOw0KKyAgICB9DQorDQorICAgIHJldHVybiBFX09CSjsNCit9DQorLyoqDQorICogXGJyaWVmICAgcmVjZWl2ZSBvbmUgY2hhciBmcm9tIHNwaSwNCisgKiAgbW9zdGx5IHVzZWQgaW4gaW50ZXJydXB0IHJvdXRpbmUsIG5vbi1ibG9ja2VkIGZ1bmN0aW9uDQorICogXHBhcmFtW2luXSAgIHNwaV9yZWdfcHRyIHNwaSByZWdpc3RlciBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqIFxyZXR1cm4gIGRhdGEgcmVjZWl2ZWQgYnkgdGhlIHNwaQ0KKyAqLw0KK0lubGluZSBpbnQzMl90IGR3X3NwaV9yY3ZfZGF0KERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyKQ0KK3sNCisgICAgcmV0dXJuIGR3X3NwaV9nZXRkYXRhKHNwaV9yZWdfcHRyKTsNCit9DQorLyoqDQorICogXGJyaWVmICAgc2VuZCBjaGFyIGJ5IHNwaSBpbiBwb2xsIG1ldGhvZCwgYmxvY2tlZCBmdW5jdGlvbg0KKyAqIFxwYXJhbVtpbl0gICBzcGlfcmVnX3B0ciBzcGkgcmVnaXN0ZXIgc3RydWN0dXJlIHBvaW50ZXINCisgKiBccGFyYW1baW5dICAgZGF0YSAgICAgICAgZGF0YSB0byBiZSBzZW50DQorICovDQorSW5saW5lIHZvaWQgZHdfc3BpX3BzbmRfZGF0KERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyLCBpbnQzMl90IGRhdGEpDQorew0KKyAgICAvKiogd2FpdCB1bnRpbCBzcGkgaXMgcmVhZHkgdG8gc2VuZCAqLw0KKyAgICB3aGlsZSAoIWR3X3NwaV9wdXRyZWFkeShzcGlfcmVnX3B0cikpOyAvKiBibG9ja2VkICovDQorDQorICAgIC8qKiBzZW5kIGNoYXIgKi8NCisgICAgZHdfc3BpX3B1dGRhdGEoc3BpX3JlZ19wdHIsIGRhdGEpOw0KK30NCisvKioNCisgKiBcYnJpZWYgICByZWNlaXZlIG9uZSBjaGFyIGZyb20gc3BpIGluIHBvbGwgbWV0aG9kLCBibG9ja2VkIGZ1bmN0aW9uDQorICogXHBhcmFtW2luXSAgIHNwaV9yZWdfcHRyIHNwaSByZWdpc3RlciBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqIFxyZXR1cm4gIGRhdGEgcmVjZWl2ZWQgYnkgdGhlIHNwaQ0KKyAqLw0KK0lubGluZSBpbnQzMl90IGR3X3NwaV9wcmN2X2RhdChEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgIC8qKiB3YWl0IHVudGlsIHNwaSBpcyByZWFkeSB0byByZWNlaXZlICovDQorICAgIHdoaWxlICghZHdfc3BpX2dldHJlYWR5KHNwaV9yZWdfcHRyKSk7IC8qIGJsb2NrZWQgKi8NCisNCisgICAgLyoqIHJlY2VpdmUgZGF0YSAqLw0KKyAgICByZXR1cm4gZHdfc3BpX2dldGRhdGEoc3BpX3JlZ19wdHIpOw0KK30NCisNCisvKiogUmVzZXQgZGVzaWdud2FyZSBGSUZPIGJ5IGRpc2FibGUgc3BpIGRldmljZSwgdGhlbiBlbmFibGUgZGV2aWNlICovDQorSW5saW5lIHZvaWQgZHdfc3BpX3Jlc2V0X2ZpZm8oRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIpDQorew0KKyAgICBkd19zcGlfZGlzYWJsZShzcGlfcmVnX3B0cik7DQorICAgIGR3X3NwaV9lbmFibGUoc3BpX3JlZ19wdHIpOw0KK30NCisNCisvKiogRW5hYmxlIGRlc2lnbndhcmUgc3BpIGJpdCBpbnRlcnJ1cHQgd2l0aCBtYXNrICovDQorSW5saW5lIHZvaWQgZHdfc3BpX3VubWFza19pbnRlcnJ1cHQoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICBzcGlfcmVnX3B0ci0+SU1SIHw9IG1hc2s7DQorfQ0KKw0KKy8qKiBEaXNhYmxlIGRlc2lnbndhcmUgc3BpIGJpdCBpbnRlcnJ1cHQgd2l0aCBtYXNrICovDQorSW5saW5lIHZvaWQgZHdfc3BpX21hc2tfaW50ZXJydXB0KERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyLCB1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgc3BpX3JlZ19wdHItPklNUiAmPSB+bWFzazsNCit9DQorDQorLyoqIFNldCBkZXNpZ253YXJlIHNwaSBkZXZpY2UgZnJlcXVlbmN5ICovDQorSW5saW5lIHZvaWQgZHdfc3BpX3NldF9mcmVxKERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIsIHVpbnQzMl90IGZyZXEpDQorew0KKyAgICB1aW50MzJfdCBzY2tfZGl2aXNvcjsNCisgICAgRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIgPSBzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzOw0KKw0KKyAgICBkd19zcGlfZGlzYWJsZShzcGlfcmVnX3B0cik7DQorDQorICAgIHNja19kaXZpc29yID0gRFdfU1BJX0ZSRVEyRFYoc3BpX2N0cmxfcHRyLT5kd19hcGJfYnVzX2ZyZXEsIGZyZXEpOw0KKyAgICBzcGlfcmVnX3B0ci0+QkFVRFIgPSBzY2tfZGl2aXNvcjsNCisgICAgZHdfc3BpX2VuYWJsZShzcGlfcmVnX3B0cik7DQorfQ0KKw0KKy8qKiBTZXQgZGVzaWdud2FyZSBzcGkgZGV2aWNlIGRhdGEgZnJhbWUgc2l6ZSAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV9zZXRfZGZzKERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyLCB1aW50MzJfdCBkZnMpDQorew0KKyAgICB1aW50MzJfdCBjdHJsMF9yZWc7DQorDQorICAgIGlmICgoZGZzIDw9IDMpIHx8IChkZnMgPiAxNikpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGR3X3NwaV9kaXNhYmxlKHNwaV9yZWdfcHRyKTsNCisgICAgY3RybDBfcmVnID0gc3BpX3JlZ19wdHItPkNUUkxSMDsNCisgICAgY3RybDBfcmVnICY9IH4oRFdfU1BJX0NUUkxSMF9ERlNfTUFTSyk7DQorICAgIHNwaV9yZWdfcHRyLT5DVFJMUjAgPSBjdHJsMF9yZWcgfCAoZGZzIC0gMSk7DQorICAgIGR3X3NwaV9lbmFibGUoc3BpX3JlZ19wdHIpOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqIENob29zZSBwcm9wZXIgZGVzaWdud2FyZSBzcGkgY2xvY2sgbW9kZSBzZXR0aW5nIHZhbHVlICovDQorSW5saW5lIHVpbnQzMl90IGR3X3NwaV9zZWxlY3RfY2xvY2ttb2RlKHVpbnQzMl90IGNsa19tb2RlKQ0KK3sNCisgICAgcmV0dXJuIChjbGtfbW9kZSA8PCBEV19TUElfQ1RSTFIwX1NDX09GUyk7DQorfQ0KKw0KKy8qKiBTZXQgZGVzaWdud2FyZSBzcGkgY2xvY2sgbW9kZSAqLw0KK0lubGluZSBpbnQzMl90IGR3X3NwaV9zZXRfY2xvY2ttb2RlKERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyLCB1aW50MzJfdCBjbGtfbW9kZSkNCit7DQorICAgIGlmIChjbGtfbW9kZSA+IFNQSV9DUE9MXzFfQ1BIQV8xKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgZHdfc3BpX2Rpc2FibGUoc3BpX3JlZ19wdHIpOw0KKyAgICBzcGlfcmVnX3B0ci0+Q1RSTFIwICY9IH4oRFdfU1BJX0NUUkxSMF9TQ19NQVNLKTsNCisgICAgc3BpX3JlZ19wdHItPkNUUkxSMCB8PSBkd19zcGlfc2VsZWN0X2Nsb2NrbW9kZShjbGtfbW9kZSk7DQorICAgIGR3X3NwaV9lbmFibGUoc3BpX3JlZ19wdHIpOw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqIFNlbGVjdCBhIHNwaSBzbGF2ZSB3aXRoIHNsdl9saW5lICovDQorSW5saW5lIGludDMyX3QgZHdfc3BpX3NlbGVjdF9zbGF2ZShEV19TUElfUkVHICpzcGlfcmVnX3B0ciwgdWludDMyX3Qgc2x2X2xpbmUpDQorew0KKyAgICAvKiBjaGVjayBpZiBzcGkgYnVzeSAqLw0KKyAgICBpZiAoZHdfc3BpX2J1c3koc3BpX3JlZ19wdHIpKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICBzcGlfcmVnX3B0ci0+U0VSID0gMSA8PCBzbHZfbGluZTsNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKiBEZXNlbGVjdCBhIHNwaSBkZXZpY2UgKi8NCitJbmxpbmUgaW50MzJfdCBkd19zcGlfZGVzZWxlY3Rfc2xhdmUoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIsIHVpbnQzMl90IHNsdl9saW5lKQ0KK3sNCisgICAgLyogY2hlY2sgaWYgc3BpIGJ1c3kgKi8NCisgICAgaWYgKGR3X3NwaV9idXN5KHNwaV9yZWdfcHRyKSkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgc3BpX3JlZ19wdHItPlNFUiA9IDA7DQorICAgIHJldHVybiAwOw0KK30NCisNCitJbmxpbmUgdm9pZCBkd19zcGlfZmx1c2hfdHgoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIpDQorew0KKyAgICBkd19zcGlfcmVzZXRfZmlmbyhzcGlfcmVnX3B0cik7DQorfQ0KKw0KK0lubGluZSB2b2lkIGR3X3NwaV9mbHVzaF9yeChEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgIGR3X3NwaV9yZXNldF9maWZvKHNwaV9yZWdfcHRyKTsNCit9DQorDQorLyoqIEdldCBUWCBGSUZPIExlbmd0aC4NCisgKiAgICBjYWxjdWxhdGUgc3BpIGZpZm8gbGVuZ3RoIHVzaW5nIGZpZm8gdGhyZXNob2xkIG1ldGhvZA0KKyAqICBJZiB5b3UgYXR0ZW1wdCB0byBzZXQgYml0cyBbNzowXSBvZiB0aGlzIHJlZ2lzdGVyIHRvDQorICogIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBkZXB0aCBvZiB0aGUgRklGTywNCisgKiAgdGhpcyBmaWVsZCBpcyBub3Qgd3JpdHRlbiBhbmQgcmV0YWlucyBpdHMgY3VycmVudCB2YWx1ZS4NCisgKi8NCitzdGF0aWMgdWludDMyX3QgZHdfc3BpX2dldF90eGZpZm9fbGVuKERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyKQ0KK3sNCisgICAgdWludDMyX3QgZmlmb190aHJfbGV2X3RtcCwgbGVmdCwgcmlnaHQsIGk7DQorDQorICAgIGZpZm9fdGhyX2xldl90bXAgPSBzcGlfcmVnX3B0ci0+VFhGVExSOw0KKw0KKyAgICBpZiAoZmlmb190aHJfbGV2X3RtcCAhPSAwKQ0KKyAgICB7DQorICAgICAgICBsZWZ0ID0gZmlmb190aHJfbGV2X3RtcDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGxlZnQgPSBEV19TUElfTUlOX0ZJRk9fTEVOR1RIOw0KKyAgICB9DQorDQorICAgIHJpZ2h0ID0gRFdfU1BJX01BWF9GSUZPX0xFTkdUSCArIDE7DQorDQorICAgIGZvciAoaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7IGkrKykNCisgICAgew0KKyAgICAgICAgc3BpX3JlZ19wdHItPlRYRlRMUiA9IGk7DQorDQorICAgICAgICBpZiAoc3BpX3JlZ19wdHItPlRYRlRMUiAhPSBpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHNwaV9yZWdfcHRyLT5UWEZUTFIgPSBmaWZvX3Rocl9sZXZfdG1wOyAvKiByZXN0b3JlIG9sZCBmaWZvIHRocmVzaG9sZCAqLw0KKw0KKyAgICByZXR1cm4gKGkpOw0KK30NCisNCisvKiogR2V0IFJYIEZJRk8gTGVuZ3RoICovDQorc3RhdGljIHVpbnQzMl90IGR3X3NwaV9nZXRfcnhmaWZvX2xlbihEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgIHVpbnQzMl90IGZpZm9fdGhyX2xldl90bXAsIGxlZnQsIHJpZ2h0LCBpOw0KKw0KKyAgICBmaWZvX3Rocl9sZXZfdG1wID0gc3BpX3JlZ19wdHItPlJYRlRMUjsNCisNCisgICAgaWYgKGZpZm9fdGhyX2xldl90bXAgIT0gMCkNCisgICAgew0KKyAgICAgICAgbGVmdCA9IGZpZm9fdGhyX2xldl90bXA7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBsZWZ0ID0gRFdfU1BJX01JTl9GSUZPX0xFTkdUSDsNCisgICAgfQ0KKw0KKyAgICByaWdodCA9IERXX1NQSV9NQVhfRklGT19MRU5HVEggKyAxOw0KKw0KKyAgICBmb3IgKGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyBpKyspDQorICAgIHsNCisgICAgICAgIHNwaV9yZWdfcHRyLT5SWEZUTFIgPSBpOw0KKw0KKyAgICAgICAgaWYgKHNwaV9yZWdfcHRyLT5SWEZUTFIgIT0gaSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBzcGlfcmVnX3B0ci0+UlhGVExSID0gZmlmb190aHJfbGV2X3RtcDsgLyogcmVzdG9yZSBvbGQgZmlmbyB0aHJlc2hvbGQgKi8NCisNCisgICAgcmV0dXJuIChpKTsNCit9DQorDQorLyoqIEluaXQgRGVzaWdud2FyZSBTUEkgSGFyZHdhcmUgKi8NCitzdGF0aWMgdm9pZCBkd19zcGlfaHdfaW5pdChEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyLCB1aW50MzJfdCBjbGtfbW9kZSwgdWludDMyX3QgZGZzKQ0KK3sNCisgICAgdWludDMyX3QgY3RybDBfcmVnID0gMDsNCisgICAgRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIgPSBzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzOw0KKw0KKyAgICBkd19zcGlfZGlzYWJsZShzcGlfcmVnX3B0cik7DQorDQorICAgIC8qIENsZWFyIGludGVycnVwdHMgKi8NCisgICAgY3RybDBfcmVnID0gc3BpX3JlZ19wdHItPklDUjsNCisgICAgLyogTWFzayBhbGwgaW50ZXJydXB0cyAqLw0KKyAgICBzcGlfcmVnX3B0ci0+SU1SID0gMDsNCisNCisgICAgY3RybDBfcmVnID0gRFdfU1BJX0NUUkxSMF9GUkZfTU9UT1JPTEEgfCBEV19TUElfVE1PRF9UUkFOU01JVF9SRUNFSVZFIFwNCisgICAgICAgICAgICAgICAgfCBkd19zcGlfc2VsZWN0X2Nsb2NrbW9kZShjbGtfbW9kZSkgfCAoZGZzIC0gMSkgfCBEV19TUElfQ1RSTFIwX1NMVl9PRV9FTkFCTEU7DQorICAgIHNwaV9yZWdfcHRyLT5DVFJMUjAgPSBjdHJsMF9yZWc7DQorICAgIHNwaV9yZWdfcHRyLT5DVFJMUjEgPSAwOw0KKw0KKyAgICAvKiBkZXNlbGVjdCBzbGF2ZXMgKi8NCisgICAgc3BpX3JlZ19wdHItPlNFUiA9IDA7DQorDQorICAgIC8qIFNldCB0aHJlc2hvbGQgdmFsdWVzIGZvciBib3RoIHR4IGFuZCByeCAqLw0KKyAgICBzcGlfcmVnX3B0ci0+VFhGVExSID0gMDsNCisgICAgc3BpX3JlZ19wdHItPlJYRlRMUiA9IDA7DQorDQorICAgIGR3X3NwaV9lbmFibGUoc3BpX3JlZ19wdHIpOw0KK30NCisNCisvKiogZW5hYmxlIGRlc2lnbndhcmUgc3BpICovDQorc3RhdGljIHZvaWQgZHdfc3BpX2VuYWJsZV9kZXZpY2UoREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIpDQorew0KKyAgICBEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyID0gKERXX1NQSV9DVFJMICopKHNwaV9pbmZvX3B0ci0+c3BpX2N0cmwpOw0KKyAgICBEV19TUElfUkVHICpzcGlfcmVnX3B0ciA9IChEV19TUElfUkVHICopKHNwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3MpOw0KKw0KKyAgICBpZiAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0VOQUJMRUQpID09IDApDQorICAgIHsNCisgICAgICAgIGR3X3NwaV9lbmFibGUoc3BpX3JlZ19wdHIpOw0KKyAgICAgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgfD0gREVWX0VOQUJMRUQ7DQorICAgIH0NCit9DQorDQorLyoqIGRpc2FibGUgZGVzaWdud2FyZSBzcGkgKi8NCitzdGF0aWMgdm9pZCBkd19zcGlfZGlzYWJsZV9kZXZpY2UoREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIpDQorew0KKyAgICBEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyID0gKERXX1NQSV9DVFJMICopKHNwaV9pbmZvX3B0ci0+c3BpX2N0cmwpOw0KKyAgICBEV19TUElfUkVHICpzcGlfcmVnX3B0ciA9IChEV19TUElfUkVHICopKHNwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3MpOw0KKw0KKyAgICBkd19zcGlfZGlzYWJsZShzcGlfcmVnX3B0cik7DQorICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzICY9IH5ERVZfRU5BQkxFRDsNCit9DQorDQorDQorLyoqDQorICogXGJyaWVmICAgZGlzYWJsZSBkZXNpZ253YXJlIHNwaSBzZW5kIG9yIHJlY2VpdmUgaW50ZXJydXB0DQorICogXHBhcmFtW2luXSAgIERFVl9TUElfSU5GTyAgICAqc3BpX2luZm9fcHRyDQorICogXHBhcmFtW2luXSAgIGNicnRuICAgICAgIGNvbnRyb2wgY29kZSBvZiBjYWxsYmFjayByb3V0aW5lIG9mIHNlbmQgb3IgcmVjZWl2ZQ0KKyAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV9kaXNfY2JyKERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyLCB1aW50MzJfdCBjYnJ0bikNCit7DQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkwgKikoc3BpX2luZm9fcHRyLT5zcGlfY3RybCk7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorDQorICAgIGlmICgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBEV19TUElfSU5fWEZFUikgIT0gMCkgICAvKiBvbmx5IGluIHRyYW5zZmVyIG5lZWQgZG8gY2hlY2sgKi8NCisgICAgew0KKyAgICAgICAgc3dpdGNoIChjYnJ0bikNCisgICAgICAgIHsNCisgICAgICAgIGNhc2UgRFdfU1BJX1JEWV9TTkQ6DQorICAgICAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBEV19TUElfSU5fWEZFUikgPT0gRFdfU1BJX0lOX1RYLCBFX0NUWCk7DQorICAgICAgICAgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgJj0gfihEV19TUElfSU5fVFgpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBEV19TUElfUkRZX1JDVjoNCisgICAgICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERXX1NQSV9JTl9YRkVSKSA9PSBEV19TUElfSU5fUlgsIEVfQ1RYKTsNCisgICAgICAgICAgICBzcGlfaW5mb19wdHItPnN0YXR1cyAmPSB+KERXX1NQSV9JTl9SWCk7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIERXX1NQSV9SRFlfWEZFUjoNCisgICAgICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERXX1NQSV9JTl9YRkVSKSA9PSBEV19TUElfSU5fWEZFUiwgRV9DVFgpOw0KKyAgICAgICAgICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzICY9IH4oRFdfU1BJX0lOX1hGRVIpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBkd19zcGlfbWFza19pbnRlcnJ1cHQoc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncywgRFdfU1BJX0lNUl9YRkVSKTsNCisNCisgICAgaWYgKHNwaV9jdHJsX3B0ci0+aW50X3N0YXR1cyAmIERXX1NQSV9HSU5UX0VOQUJMRSkNCisgICAgew0KKyAgICAgICAgaW50X2Rpc2FibGUoc3BpX2N0cmxfcHRyLT5pbnRubyk7DQorICAgICAgICBzcGlfY3RybF9wdHItPmludF9zdGF0dXMgJj0gfkRXX1NQSV9HSU5UX0VOQUJMRTsNCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBlbmFibGUgRGVzaWduV2FyZSBTUEkgc2VuZCBvciByZWNlaXZlIGludGVycnVwdA0KKyAqIFxwYXJhbVtpbl0gICBERVZfU1BJX0lORk8gICAgKnNwaV9pbmZvX3B0cg0KKyAqIFxwYXJhbVtpbl0gICBjYnJ0biAgICAgICBjb250cm9sIGNvZGUgb2YgY2FsbGJhY2sgcm91dGluZSBvZiBzZW5kIG9yIHJlY2VpdmUNCisgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfZW5hX2NicihERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0ciwgdWludDMyX3QgY2JydG4pDQorew0KKyAgICBEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyID0gKERXX1NQSV9DVFJMICopKHNwaV9pbmZvX3B0ci0+c3BpX2N0cmwpOw0KKyAgICBpbnQzMl90IGVyY2QgPSBFX09LOw0KKw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERXX1NQSV9JTl9YRkVSKSA9PSAwLCBFX0NUWCk7DQorDQorICAgIHN3aXRjaCAoY2JydG4pDQorICAgIHsNCisgICAgY2FzZSBEV19TUElfUkRZX1NORDoNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzIHw9IERXX1NQSV9JTl9UWDsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIERXX1NQSV9SRFlfUkNWOg0KKyAgICAgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgfD0gRFdfU1BJX0lOX1JYOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgRFdfU1BJX1JEWV9YRkVSOg0KKyAgICAgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgfD0gRFdfU1BJX0lOX1hGRVI7DQorICAgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdDoNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIGR3X3NwaV91bm1hc2tfaW50ZXJydXB0KHNwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3MsIERXX1NQSV9JTVJfWEZFUik7DQorDQorICAgIGlmICgoc3BpX2N0cmxfcHRyLT5pbnRfc3RhdHVzICYgRFdfU1BJX0dJTlRfRU5BQkxFKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBzcGlfY3RybF9wdHItPmludF9zdGF0dXMgfD0gRFdfU1BJX0dJTlRfRU5BQkxFOw0KKyAgICAgICAgaW50X2VuYWJsZShzcGlfY3RybF9wdHItPmludG5vKTsNCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBlbmFibGUgZGVzaWdud2FyZSBzcGkgaW50ZXJydXB0DQorICogXHBhcmFtICAgc3BpX2luZm9fcHRyICAgIHNwaSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqLw0KK3N0YXRpYyB2b2lkIGR3X3NwaV9lbmFibGVfaW50ZXJydXB0KERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyKQ0KK3sNCisgICAgRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciA9IChEV19TUElfQ1RSTCAqKShzcGlfaW5mb19wdHItPnNwaV9jdHJsKTsNCisNCisgICAgaW50X2hhbmRsZXJfaW5zdGFsbChzcGlfY3RybF9wdHItPmludG5vLCBzcGlfY3RybF9wdHItPmR3X3NwaV9pbnRfaGFuZGxlcik7DQorICAgIHNwaV9jdHJsX3B0ci0+aW50X3N0YXR1cyB8PSBEV19TUElfR0lOVF9FTkFCTEU7DQorICAgIGludF9lbmFibGUoc3BpX2N0cmxfcHRyLT5pbnRubyk7ICAgIC8qKiBlbmFibGUgc3BpIGludGVycnVwdCAqLw0KK30NCisvKioNCisgKiBcYnJpZWYgICBkaXNhYmxlIGRlc2lnbndhcmUgc3BpIGludGVycnVwdA0KKyAqIFxwYXJhbSAgIHNwaV9pbmZvX3B0ciAgICBzcGkgaW5mb3JtYXRpb24gc3RydWN0dXJlIHBvaW50ZXINCisgKi8NCitzdGF0aWMgdm9pZCBkd19zcGlfZGlzYWJsZV9pbnRlcnJ1cHQoREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIpDQorew0KKyAgICBEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyID0gKERXX1NQSV9DVFJMICopKHNwaV9pbmZvX3B0ci0+c3BpX2N0cmwpOw0KKw0KKyAgICAvKiogZGlzYWJsZSBzcGkgc2VuZCZyZWNlaXZlIGludGVycnVwdCBhZnRlciBkaXNhYmxlIHNwaSBpbnRlcnJ1cHQgKi8NCisgICAgZHdfc3BpX2Rpc19jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1NORCk7DQorICAgIGR3X3NwaV9kaXNfY2JyKHNwaV9pbmZvX3B0ciwgRFdfU1BJX1JEWV9SQ1YpOw0KKyAgICBkd19zcGlfZGlzX2NicihzcGlfaW5mb19wdHIsIERXX1NQSV9SRFlfWEZFUik7DQorICAgIC8qIGRpc2FibGUgc3BpIGludGVycnVwdCAqLw0KKyAgICBkd19zcGlfbWFza19pbnRlcnJ1cHQoc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncywgRFdfU1BJX0lNUl9YRkVSKTsNCisgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgJj0gfkRXX1NQSV9JTl9YRkVSOw0KKyAgICBpbnRfZGlzYWJsZShzcGlfY3RybF9wdHItPmludG5vKTsNCisgICAgc3BpX2N0cmxfcHRyLT5pbnRfc3RhdHVzICY9IH4oRFdfU1BJX0dJTlRfRU5BQkxFKTsNCit9DQorDQorc3RhdGljIHZvaWQgZHdfc3BpX3Jlc2V0X2RldmljZShERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0cikNCit7DQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkwgKikoc3BpX2luZm9fcHRyLT5zcGlfY3RybCk7DQorICAgIERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyID0gKERXX1NQSV9SRUcgKikoc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncyk7DQorDQorICAgIGR3X3NwaV9kaXNhYmxlX2RldmljZShzcGlfaW5mb19wdHIpOw0KKyAgICBkd19zcGlfZGlzYWJsZV9pbnRlcnJ1cHQoc3BpX2luZm9fcHRyKTsNCisgICAgZHdfc3BpX2NsZWFyX2ludGVycnVwdF9hbGwoc3BpX3JlZ19wdHIpOw0KKyAgICBkd19zcGlfZW5hYmxlX2RldmljZShzcGlfaW5mb19wdHIpOw0KK30NCisNCisvKiogYWJvcnQgY3VycmVudCBpbnRlcnJ1cHQgdHJhbnNtaXQgdHJhbnNmZXIgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfYWJvcnRfdHgoREVWX1NQSSAqc3BpX29iaikNCit7DQorICAgIERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyID0gJihzcGlfb2JqLT5zcGlfaW5mbyk7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorDQorICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpICE9IDAsIEVfT0spOw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERXX1NQSV9JTl9YRkVSKSA9PSBEV19TUElfSU5fVFgsIEVfQ1RYKTsNCisNCisgICAgZHdfc3BpX2Rpc19jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1NORCk7DQorICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzIHw9IERFVl9JTl9UWF9BQlJUOw0KKw0KKyAgICBpZiAoc3BpX2luZm9fcHRyLT5zcGlfY2JzLnR4X2NiICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+c3BpX2Nicy50eF9jYihzcGlfb2JqKTsNCisgICAgfQ0KKw0KKyAgICBzcGlfaW5mb19wdHItPnN0YXR1cyAmPSB+KERFVl9JTl9UWF9BQlJUKTsNCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqIGFib3J0IGN1cnJlbnQgaW50ZXJydXB0IHJlY2VpdmUgdHJhbnNmZXIgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfYWJvcnRfcngoREVWX1NQSSAqc3BpX29iaikNCit7DQorICAgIERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyID0gJihzcGlfb2JqLT5zcGlfaW5mbyk7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorDQorICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpICE9IDAsIEVfT0spOw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERXX1NQSV9JTl9YRkVSKSA9PSBEV19TUElfSU5fUlgsIEVfQ1RYKTsNCisNCisgICAgZHdfc3BpX2Rpc19jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1JDVik7DQorICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzIHw9IERFVl9JTl9SWF9BQlJUOw0KKw0KKyAgICBpZiAoc3BpX2luZm9fcHRyLT5zcGlfY2JzLnJ4X2NiICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+c3BpX2Nicy5yeF9jYihzcGlfb2JqKTsNCisgICAgfQ0KKw0KKyAgICBzcGlfaW5mb19wdHItPnN0YXR1cyAmPSB+KERFVl9JTl9SWF9BQlJUKTsNCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqIGFib3J0IGN1cnJlbnQgaW50ZXJydXB0IHRyYW5zZmVyICovDQorc3RhdGljIGludDMyX3QgZHdfc3BpX2Fib3J0X3hmZXIoREVWX1NQSSAqc3BpX29iaikNCit7DQorICAgIERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyID0gJihzcGlfb2JqLT5zcGlfaW5mbyk7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorDQorICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpICE9IDAsIEVfT0spOw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERXX1NQSV9JTl9YRkVSKSA9PSBEV19TUElfSU5fWEZFUiwgRV9DVFgpOw0KKw0KKyAgICBkd19zcGlfZGlzX2NicihzcGlfaW5mb19wdHIsIERXX1NQSV9SRFlfWEZFUik7DQorICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzIHw9IERFVl9JTl9YRkVSX0FCUlQ7DQorDQorICAgIGlmIChzcGlfaW5mb19wdHItPnNwaV9jYnMueGZlcl9jYiAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBzcGlfaW5mb19wdHItPnNwaV9jYnMueGZlcl9jYihzcGlfb2JqKTsNCisgICAgfQ0KKw0KKyAgICBzcGlfaW5mb19wdHItPnN0YXR1cyAmPSB+KERFVl9JTl9YRkVSX0FCUlQpOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKiogR2V0IGF2YWlsYWJsZSB0cmFuc21pdCBmaWZvIGNvdW50ICovDQorc3RhdGljIGludDMyX3QgZHdfc3BpX2dldF90eGF2YWlsKERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIpDQorew0KKyAgICBpbnQzMl90IHR4X2F2YWlsID0gMDsNCisgICAgRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIgPSAoRFdfU1BJX1JFRyAqKShzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzKTsNCisNCisjaWYgRFdfU1BJX0NBTENfRklGT19MRU5fRU5BQkxFDQorDQorICAgIGlmIChzcGlfY3RybF9wdHItPnR4X2ZpZm9fbGVuIDw9IDEpDQorICAgIHsNCisgICAgICAgIGlmIChkd19zcGlfcHV0cmVhZHkoc3BpX3JlZ19wdHIpID09IDEpDQorICAgICAgICB7DQorICAgICAgICAgICAgdHhfYXZhaWwgPSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHR4X2F2YWlsID0gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorI2VuZGlmDQorICAgIHsNCisgICAgICAgIHR4X2F2YWlsID0gc3BpX2N0cmxfcHRyLT50eF9maWZvX2xlbiAtIHNwaV9yZWdfcHRyLT5UWEZMUjsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHhfYXZhaWw7DQorfQ0KKw0KKy8qKiBHZXQgYXZhaWxhYmxlIHJlY2VpdmUgZmlmbyBjb3VudCAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV9nZXRfcnhhdmFpbChEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyKQ0KK3sNCisgICAgaW50MzJfdCByeF9hdmFpbCA9IDA7DQorICAgIERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyID0gKERXX1NQSV9SRUcgKikoc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncyk7DQorDQorI2lmIERXX1NQSV9DQUxDX0ZJRk9fTEVOX0VOQUJMRQ0KKw0KKyAgICBpZiAoc3BpX2N0cmxfcHRyLT5yeF9maWZvX2xlbiA8PSAxKQ0KKyAgICB7DQorICAgICAgICBpZiAoZHdfc3BpX2dldHJlYWR5KHNwaV9yZWdfcHRyKSA9PSAxKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJ4X2F2YWlsID0gMTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICByeF9hdmFpbCA9IDA7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyNlbmRpZg0KKyAgICB7DQorICAgICAgICByeF9hdmFpbCA9IHNwaV9yZWdfcHRyLT5SWEZMUjsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcnhfYXZhaWw7DQorfQ0KKw0KK3N0YXRpYyB1aW50MzJfdCBkd19zcGlfdHhfbWF4KERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIpDQorew0KKyAgICB1aW50MzJfdCB0eF9sZWZ0LCB0eF9yb29tOw0KKyAgICBEV19TUElfVFJBTlNGRVIgKnhmZXIgPSAmKHNwaV9jdHJsX3B0ci0+ZHdfeGZlcik7DQorDQorICAgIHR4X2xlZnQgPSAoeGZlci0+eGZlcl9sZW4gLSB4ZmVyLT50eF9pZHgpIC8geGZlci0+bmJ5dGVzOw0KKyAgICB0eF9yb29tID0gZHdfc3BpX2dldF90eGF2YWlsKHNwaV9jdHJsX3B0cik7DQorDQorICAgIHJldHVybiAodHhfbGVmdCA8IHR4X3Jvb20pID8gdHhfbGVmdCA6IHR4X3Jvb207DQorfQ0KKw0KK3N0YXRpYyB1aW50MzJfdCBkd19zcGlfcnhfbWF4KERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIpDQorew0KKyAgICB1aW50MzJfdCByeF9sZWZ0LCByeF9yb29tOw0KKyAgICBEV19TUElfVFJBTlNGRVIgKnhmZXIgPSAmKHNwaV9jdHJsX3B0ci0+ZHdfeGZlcik7DQorDQorICAgIHJ4X2xlZnQgPSAoeGZlci0+eGZlcl9sZW4gLSB4ZmVyLT5yeF9pZHgpIC8geGZlci0+bmJ5dGVzOw0KKyAgICByeF9yb29tID0gZHdfc3BpX2dldF9yeGF2YWlsKHNwaV9jdHJsX3B0cik7DQorDQorICAgIHJldHVybiAocnhfbGVmdCA8IHJ4X3Jvb20pID8gcnhfbGVmdCA6IHJ4X3Jvb207DQorfQ0KKw0KK0lubGluZSBpbnQzMl90IGR3X3NwaV9yeF9lbmQoRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0cikNCit7DQorICAgIERXX1NQSV9UUkFOU0ZFUiAqeGZlciA9ICYoc3BpX2N0cmxfcHRyLT5kd194ZmVyKTsNCisNCisgICAgcmV0dXJuICh4ZmVyLT5yeF9pZHggPj0geGZlci0+eGZlcl9sZW4pOw0KK30NCisNCitJbmxpbmUgaW50MzJfdCBkd19zcGlfdHhfZW5kKERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIpDQorew0KKyAgICBEV19TUElfVFJBTlNGRVIgKnhmZXIgPSAmKHNwaV9jdHJsX3B0ci0+ZHdfeGZlcik7DQorDQorICAgIHJldHVybiAoeGZlci0+dHhfaWR4ID49IHhmZXItPnhmZXJfbGVuKTsNCit9DQorDQorLyoqIDEgZm9yIGVuZCwgMCBmb3Igbm90IGVuZCAqLw0KK0lubGluZSBpbnQzMl90IGR3X3NwaV94ZmVyX2VuZChEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyKQ0KK3sNCisgICAgcmV0dXJuIChkd19zcGlfdHhfZW5kKHNwaV9jdHJsX3B0cikgJiYgZHdfc3BpX3J4X2VuZChzcGlfY3RybF9wdHIpKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgZHdfc3BpX3dyaXRlcihERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0cikNCit7DQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkxfUFRSKShzcGlfaW5mb19wdHItPnNwaV9jdHJsKTsNCisgICAgRFdfU1BJX1RSQU5TRkVSICpkd194ZmVyID0gJihzcGlfY3RybF9wdHItPmR3X3hmZXIpOw0KKyAgICBEV19TUElfUkVHICpzcGlfcmVnX3B0ciA9IChEV19TUElfUkVHICopKHNwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3MpOw0KKyAgICB1aW50MzJfdCB0eF9tYXggPSBkd19zcGlfdHhfbWF4KHNwaV9jdHJsX3B0cik7DQorICAgIGludDMyX3QgdHhfdzsNCisgICAgdWludDMyX3QgdHhfY250ID0gdHhfbWF4Ow0KKw0KKyAgICBpZiAoZHdfeGZlci0+dHhfeGZlciA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAodHhfbWF4KQ0KKyAgICB7DQorICAgICAgICBpZiAoZHdfeGZlci0+dHhfeGZlci0+dHhfaWR4ID49IGR3X3hmZXItPnR4X3hmZXItPnRvdF9sZW4pDQorICAgICAgICB7DQorICAgICAgICAgICAgZHdfeGZlci0+dHhfeGZlciA9IGR3X3hmZXItPnR4X3hmZXItPm5leHQ7DQorDQorICAgICAgICAgICAgaWYgKGR3X3hmZXItPnR4X3hmZXIgPT0gTlVMTCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmICgoZHdfeGZlci0+dHhfeGZlci0+dHhfaWR4ID49IGR3X3hmZXItPnR4X3hmZXItPnR4X29mcykgXA0KKyAgICAgICAgICAgICYmIChkd194ZmVyLT50eF94ZmVyLT50eF9pZHggPCBkd194ZmVyLT50eF94ZmVyLT50eF90b3RsZW4pKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChkd194ZmVyLT5uYnl0ZXMgPT0gMSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHR4X3cgPSAoaW50MzJfdCkoKihpbnQ4X3QgKikoZHdfeGZlci0+dHhfeGZlci0+dHhfYnVmKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHR4X3cgPSAoaW50MzJfdCkoKihpbnQxNl90ICopKGR3X3hmZXItPnR4X3hmZXItPnR4X2J1ZikpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBkd194ZmVyLT50eF94ZmVyLT50eF9idWYgKz0gZHdfeGZlci0+bmJ5dGVzOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHR4X3cgPSBzcGlfaW5mb19wdHItPmR1bW15Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZHdfc3BpX3B1dGRhdGEoc3BpX3JlZ19wdHIsIHR4X3cpOw0KKyAgICAgICAgZHdfeGZlci0+dHhfeGZlci0+dHhfaWR4ICs9IGR3X3hmZXItPm5ieXRlczsNCisgICAgICAgIGR3X3hmZXItPnR4X2lkeCArPSBkd194ZmVyLT5uYnl0ZXM7DQorICAgICAgICB0eF9tYXggLS07DQorICAgIH0NCisNCisgICAgcmV0dXJuICgodHhfY250IC0gdHhfbWF4KSAqIGR3X3hmZXItPm5ieXRlcyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV9yZWFkZXIoREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIpDQorew0KKyAgICBEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyID0gKERXX1NQSV9DVFJMX1BUUikoc3BpX2luZm9fcHRyLT5zcGlfY3RybCk7DQorICAgIERXX1NQSV9UUkFOU0ZFUiAqZHdfeGZlciA9ICYoc3BpX2N0cmxfcHRyLT5kd194ZmVyKTsNCisgICAgRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIgPSAoRFdfU1BJX1JFRyAqKShzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzKTsNCisgICAgdWludDMyX3QgcnhfbWF4ID0gZHdfc3BpX3J4X21heChzcGlfY3RybF9wdHIpOw0KKyAgICBpbnQzMl90IHJ4X3c7DQorICAgIHVpbnQzMl90IHJ4X2NudCA9IHJ4X21heDsNCisNCisgICAgaWYgKGR3X3hmZXItPnJ4X3hmZXIgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgd2hpbGUgKHJ4X21heCkNCisgICAgew0KKyAgICAgICAgaWYgKGR3X3hmZXItPnJ4X3hmZXItPnJ4X2lkeCA+PSBkd194ZmVyLT5yeF94ZmVyLT50b3RfbGVuKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGR3X3hmZXItPnJ4X3hmZXIgPSBkd194ZmVyLT5yeF94ZmVyLT5uZXh0Ow0KKw0KKyAgICAgICAgICAgIGlmIChkd194ZmVyLT5yeF94ZmVyID09IE5VTEwpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICByeF93ID0gZHdfc3BpX2dldGRhdGEoc3BpX3JlZ19wdHIpOw0KKw0KKyAgICAgICAgaWYgKChkd194ZmVyLT5yeF94ZmVyLT5yeF9pZHggPj0gZHdfeGZlci0+cnhfeGZlci0+cnhfb2ZzKSBcDQorICAgICAgICAgICAgJiYgKGR3X3hmZXItPnJ4X3hmZXItPnJ4X2lkeCA8IGR3X3hmZXItPnJ4X3hmZXItPnJ4X3RvdGxlbikpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKGR3X3hmZXItPm5ieXRlcyA9PSAxKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKihpbnQ4X3QgKikoZHdfeGZlci0+cnhfeGZlci0+cnhfYnVmKSA9IHJ4X3c7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICooaW50MTZfdCAqKShkd194ZmVyLT5yeF94ZmVyLT5yeF9idWYpID0gcnhfdzsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgZHdfeGZlci0+cnhfeGZlci0+cnhfYnVmICs9IGR3X3hmZXItPm5ieXRlczsNCisgICAgICAgIH0NCisNCisgICAgICAgIGR3X3hmZXItPnJ4X3hmZXItPnJ4X2lkeCArPSBkd194ZmVyLT5uYnl0ZXM7DQorICAgICAgICBkd194ZmVyLT5yeF9pZHggKz0gZHdfeGZlci0+bmJ5dGVzOw0KKyAgICAgICAgcnhfbWF4IC0tOw0KKyAgICB9DQorDQorICAgIHJldHVybiAoKHJ4X2NudCAtIHJ4X21heCkgKiBkd194ZmVyLT5uYnl0ZXMpOw0KK30NCisNCitJbmxpbmUgdWludDMyX3QgZHdfc3BpX25ieXRlcyh1aW50MzJfdCBkZnMpDQorew0KKyAgICB1aW50MzJfdCBuYnl0ZXMgPSAxOw0KKw0KKyAgICBpZiAoZGZzID4gOCkgeyBuYnl0ZXMgPSAyOyB9DQorDQorICAgIHJldHVybiBuYnl0ZXM7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGR3X3NwaV9pbml0X3RyYW5zZmVyKERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIsIERFVl9TUElfVFJBTlNGRVIgKnhmZXIsIHVpbnQzMl90IGRmcykNCit7DQorICAgIERXX1NQSV9UUkFOU0ZFUiAqZHdfeGZlciA9ICYoc3BpX2N0cmxfcHRyLT5kd194ZmVyKTsNCisgICAgdWludDMyX3QgdG90X2xlbiA9IDA7DQorDQorICAgIGR3X3hmZXItPnR4X3hmZXIgPSB4ZmVyOw0KKyAgICBkd194ZmVyLT5yeF94ZmVyID0geGZlcjsNCisgICAgZHdfeGZlci0+dHhfaWR4ID0gMDsNCisgICAgZHdfeGZlci0+cnhfaWR4ID0gMDsNCisgICAgZHdfeGZlci0+bmJ5dGVzID0gZHdfc3BpX25ieXRlcyhkZnMpOw0KKw0KKyAgICAvKiogQ2FsY3VsYXRlIGFsbCB0cmFuc2ZlciBsZW5ndGggKi8NCisgICAgd2hpbGUgKHhmZXIpDQorICAgIHsNCisgICAgICAgIERFVl9TUElfWEZFUl9JTklUKHhmZXIpOw0KKyAgICAgICAgdG90X2xlbiArPSB4ZmVyLT50b3RfbGVuOw0KKyAgICAgICAgeGZlciA9IHhmZXItPm5leHQ7DQorICAgIH0NCisNCisgICAgZHdfeGZlci0+eGZlcl9sZW4gPSB0b3RfbGVuOw0KK30NCisNCisvKiBDaGVjayBidWZmZXIgYWxpZ24gc3RhdHVzLCAwIGZvciBhbGlnbmVkLCAtMSBmb3Igbm90LWFsaWduZWQgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfY2hrX3hmZXJfYWxpZ25lZChERVZfU1BJX1RSQU5TRkVSICp4ZmVyLCB1aW50MzJfdCBkZnMpDQorew0KKyAgICB1aW50MzJfdCBhbGlnbl9ieXRlcyA9IDE7DQorDQorICAgIGlmICh4ZmVyID09IE5VTEwpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGlmIChkZnMgPiA4KQ0KKyAgICB7DQorICAgICAgICBhbGlnbl9ieXRlcyA9IDI7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoeGZlcikNCisgICAgew0KKyAgICAgICAgLyogY2hlY2sgdHggYnVmZmVyIGFsaWduIHN0YXR1cyAqLw0KKyAgICAgICAgaWYgKHhmZXItPnR4X2xlbiAhPSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICh4ZmVyLT50eF9sZW4gJSBhbGlnbl9ieXRlcykgeyByZXR1cm4gLTE7IH0NCisNCisgICAgICAgICAgICBpZiAoeGZlci0+dHhfb2ZzICUgYWxpZ25fYnl0ZXMpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgICAgICAgICAgaWYgKCFDSEVDS19BTElHTl9CWVRFUyh4ZmVyLT50eF9idWYsIGFsaWduX2J5dGVzKSkgeyByZXR1cm4gLTE7IH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8qIGNoZWNrIHR4IGJ1ZmZlciBhbGlnbiBzdGF0dXMgKi8NCisgICAgICAgIGlmICh4ZmVyLT5yeF9sZW4gIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoeGZlci0+cnhfbGVuICUgYWxpZ25fYnl0ZXMpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgICAgICAgICAgaWYgKHhmZXItPnJ4X29mcyAlIGFsaWduX2J5dGVzKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICAgICAgICAgIGlmICghQ0hFQ0tfQUxJR05fQllURVMoeGZlci0+cnhfYnVmLCBhbGlnbl9ieXRlcykpIHsgcmV0dXJuIC0xOyB9DQorICAgICAgICB9DQorDQorICAgICAgICB4ZmVyID0geGZlci0+bmV4dDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHVpbnQzMl90IGR3X3NwaV9wb2xsX3RyYW5zZmVyKERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyKQ0KK3sNCisgICAgdWludDMyX3QgbGVuID0gMDsNCisgICAgRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciA9IChEV19TUElfQ1RSTF9QVFIpKHNwaV9pbmZvX3B0ci0+c3BpX2N0cmwpOw0KKw0KKyAgICBzcGlfaW5mb19wdHItPnN0YXR1cyB8PSBERVZfSU5fWEZFUjsNCisNCisgICAgd2hpbGUgKCFkd19zcGlfeGZlcl9lbmQoc3BpX2N0cmxfcHRyKSkNCisgICAgew0KKyAgICAgICAgbGVuICs9IGR3X3NwaV93cml0ZXIoc3BpX2luZm9fcHRyKTsNCisgICAgICAgIGxlbiArPSBkd19zcGlfcmVhZGVyKHNwaV9pbmZvX3B0cik7DQorICAgIH0NCisNCisgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgJj0gfkRFVl9JTl9YRkVSOw0KKw0KKyAgICByZXR1cm4gbGVuID4+IDE7DQorfQ0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxicmllZiAgIG9wZW4gYSBkZXNpZ253YXJlIHNwaSBkZXZpY2UNCisgKiBccGFyYW1baW5dICAgc3BpX29iaiBzcGkgb2JqZWN0IHBvaW50ZXINCisgKiBccGFyYW1baW5dICAgbW9kZSAgICBzcGkgd29ya2luZyBtb2RlIChtYXN0ZXIgb3Igc2xhdmUpDQorICogXHBhcmFtW2luXSAgIHBhcmFtICAgcGFyYW1ldGVyLCBmb3IgbWFzdGVyLCBwYXJhbSBpcyB0aGUgZnJlcSwgZm9yIHNsYXZlLCBwYXJhbSBpcyBkZnMNCisgKiBccmV0dmFsICBFX09LICAgIE9wZW4gc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgYW55IGlzc3Vlcw0KKyAqIFxyZXR2YWwgIEVfT1BORUQgSWYgZGV2aWNlIHdhcyBvcGVuZWQgYmVmb3JlIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMsDQorICogICAgICAgICAgdGhlbiBqdXN0IGluY3JlYXNlIHRoZSBccmVmIGRldl9zcGlfaW5mbzo6b3BuX2NudCAib3BuX2NudCIgYW5kIHJldHVybiBccmVmIEVfT1BORUQNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9TWVMgICBEZXZpY2UgaXMgb3BlbmVkIGZvciBkaWZmZXJlbnQgbW9kZSBiZWZvcmUsIGlmIHlvdSB3YW50IHRvIG9wZW4gaXQgd2l0aCBkaWZmZXJlbnQgbW9kZSwgeW91IG5lZWQgdG8gZnVsbHkgY2xvc2UgaXQgZmlyc3QuDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9OT1NQVCBPcGVuIHNldHRpbmdzIGFyZSBub3Qgc3VwcG9ydGVkDQorICovDQoraW50MzJfdCBkd19zcGlfb3BlbihERVZfU1BJICpzcGlfb2JqLCB1aW50MzJfdCBtb2RlLCB1aW50MzJfdCBwYXJhbSkNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIHVpbnQzMl90IHBhcmFtMmNoZWNrOw0KKyAgICB1aW50MzJfdCBjbGtfbW9kZSwgZGZzX3ZhbDsNCisgICAgdWludDMyX3Qgc3VwcG9ydF9tb2RlczsNCisgICAgREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIgPSAmKHNwaV9vYmotPnNwaV9pbmZvKTsNCisNCisgICAgLyogU1RBUlQgRVJST1IgQ0hFQ0sgKi8NCisgICAgVkFMSURfQ0hLX1NQSV9JTkZPX09CSkVDVChzcGlfaW5mb19wdHIpOw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKChtb2RlID09IERFVl9NQVNURVJfTU9ERSkgfHwgKG1vZGUgPT0gREVWX1NMQVZFX01PREUpLCBFX1BBUik7DQorDQorICAgIGlmIChtb2RlID09IERFVl9TTEFWRV9NT0RFKSAgIC8qIGNsb2NrIG1vZGUgc2hvdWxkIGJlIGluIHRoZSBlbnVtIHN0cnVjdHVyZSAqLw0KKyAgICB7DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChwYXJhbSA+PSBTUElfQ1BPTF8wX0NQSEFfMCkgJiYgKHBhcmFtIDw9IFNQSV9DUE9MXzFfQ1BIQV8xKSwgRV9QQVIpOw0KKyAgICB9DQorICAgIGVsc2UgICAgIC8qIGZyZXF1ZW5jZSBzaG91bGQgPiAwICovDQorICAgIHsNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAocGFyYW0gPiAwLCBFX1BBUik7DQorICAgIH0NCisNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkxfUFRSKShzcGlfaW5mb19wdHItPnNwaV9jdHJsKTsNCisNCisgICAgLyogQ2hlY2sgc3VwcG9ydGVkIG1vZGVzLCBtYXN0ZXIgb3Igc2xhdmUgKi8NCisgICAgc3VwcG9ydF9tb2RlcyA9IHNwaV9jdHJsX3B0ci0+c3VwcG9ydF9tb2RlczsNCisgICAgRFdfU1BJX0NIRUNLX0VYUCgoKChzdXBwb3J0X21vZGVzKSZEV19TUElfTUFTVEVSX1NVUFBPUlRFRCkgJiYgKG1vZGUgPT0gREVWX01BU1RFUl9NT0RFKSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICgoKHN1cHBvcnRfbW9kZXMpJkRXX1NQSV9TTEFWRV9TVVBQT1JURUQpICYmIChtb2RlID09IERFVl9TTEFWRV9NT0RFKSksIEVfTk9TUFQpOw0KKw0KKyAgICAvKiogQ2hlY2sgb3BlbmVkIGJlZm9yZSB1c2UgY2FzZSAqLw0KKyAgICBpZiAoc3BpX2luZm9fcHRyLT5vcG5fY250ID4gMCkNCisgICAgew0KKyAgICAgICAgaWYgKG1vZGUgIT0gc3BpX2luZm9fcHRyLT5tb2RlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8qIGN1cnJlbnQgd29ya2luZyBtb2RlIGlzIGRpZmZlcmVudCBmcm9tIHBhc3NpbmcgbW9kZSAqLw0KKyAgICAgICAgICAgIHJldHVybiBFX1NZUzsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChtb2RlID09IERFVl9NQVNURVJfTU9ERSkgICAvKiBwYXJhbSBpcyBmcmVxIHdoZW4gYXMgbWFzdGVyICovDQorICAgICAgICB7DQorICAgICAgICAgICAgcGFyYW0yY2hlY2sgPSBzcGlfaW5mb19wdHItPmZyZXE7DQorICAgICAgICB9DQorICAgICAgICBlbHNlICAgICAvKiBwYXJhbSBpcyBjbGtfbW9kZSB3aGVuIGFzIHNsYXZlICovDQorICAgICAgICB7DQorICAgICAgICAgICAgcGFyYW0yY2hlY2sgPSBzcGlfaW5mb19wdHItPmNsa19tb2RlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgc3BpX2luZm9fcHRyLT5vcG5fY250ICsrOw0KKw0KKyAgICAgICAgaWYgKHBhcmFtICE9IHBhcmFtMmNoZWNrKSAgIC8qIG9wZW4gd2l0aCBkaWZmZXJlbnQgc3BlZWQgbW9kZSAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBFX09QTkVEOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBFX09LOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8qIGF1dG8gaW5jcmVhc2Ugb3BlbiBjb3VudCAqLw0KKyAgICBzcGlfaW5mb19wdHItPm9wbl9jbnQgKys7DQorDQorICAgIC8qIERvIEZJRk8gTGVuZ3RoIGdldCBiZWZvcmUgaW5pdCAqLw0KKyNpZiBEV19TUElfQ0FMQ19GSUZPX0xFTl9FTkFCTEUNCisgICAgc3BpX2N0cmxfcHRyLT50eF9maWZvX2xlbiA9IGR3X3NwaV9nZXRfdHhmaWZvX2xlbihzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzKTsNCisgICAgc3BpX2N0cmxfcHRyLT5yeF9maWZvX2xlbiA9IGR3X3NwaV9nZXRfcnhmaWZvX2xlbihzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzKTsNCisjZW5kaWYNCisgICAgLyogaGFyZHdhcmUgaW5pdCAqLw0KKyAgICBzcGlfaW5mb19wdHItPm1vZGUgPSBtb2RlOw0KKyAgICBjbGtfbW9kZSA9IFNQSV9DTEtfTU9ERV9ERUZBVUxUOw0KKyAgICBkZnNfdmFsID0gU1BJX0RGU19ERUZBVUxUOw0KKw0KKyAgICBpZiAobW9kZSA9PSBERVZfU0xBVkVfTU9ERSkNCisgICAgew0KKyAgICAgICAgY2xrX21vZGUgPSBwYXJhbTsNCisgICAgfQ0KKw0KKyAgICBzcGlfaW5mb19wdHItPmRmcyA9IGRmc192YWw7DQorICAgIHNwaV9pbmZvX3B0ci0+Y2xrX21vZGUgPSBjbGtfbW9kZTsNCisgICAgZHdfc3BpX2h3X2luaXQoc3BpX2N0cmxfcHRyLCBjbGtfbW9kZSwgZGZzX3ZhbCk7DQorDQorICAgIGlmIChtb2RlID09IERFVl9NQVNURVJfTU9ERSkgICAvKiBEZXNlbGVjdCBhbGwgc2xhdmVzLCBhbmQgc2V0IGZyZXF1ZW5jZSAqLw0KKyAgICB7DQorICAgICAgICBkd19zcGlfZGVzZWxlY3Rfc2xhdmUoc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncywgMCk7DQorICAgICAgICBkd19zcGlfc2V0X2ZyZXEoc3BpX2N0cmxfcHRyLCBwYXJhbSk7DQorICAgICAgICBzcGlfaW5mb19wdHItPmZyZXEgPSBwYXJhbTsNCisgICAgfQ0KKw0KKyAgICBzcGlfaW5mb19wdHItPnN0YXR1cyA9IERFVl9FTkFCTEVEOw0KKyAgICBzcGlfaW5mb19wdHItPmV4dHJhID0gTlVMTDsNCisgICAgc3BpX2luZm9fcHRyLT5zbGF2ZSA9IFNQSV9TTEFWRV9OT1RfU0VMRUNURUQ7DQorICAgIHNwaV9pbmZvX3B0ci0+ZHVtbXkgPSAweGZmOw0KKw0KKyAgICBzcGlfY3RybF9wdHItPmludF9zdGF0dXMgPSAwOw0KKyAgICBkd19zcGlfaW5pdF90cmFuc2ZlcihzcGlfY3RybF9wdHIsIE5VTEwsIGRmc192YWwpOw0KKw0KKyAgICAvKiogaW5zdGFsbCBzcGkgaW50ZXJydXB0IGludG8gc3lzdGVtICovDQorICAgIGR3X3NwaV9kaXNhYmxlX2ludGVycnVwdChzcGlfaW5mb19wdHIpOw0KKyAgICBpbnRfaGFuZGxlcl9pbnN0YWxsKHNwaV9jdHJsX3B0ci0+aW50bm8sIHNwaV9jdHJsX3B0ci0+ZHdfc3BpX2ludF9oYW5kbGVyKTsNCisgICAgbWVtc2V0KCYoc3BpX2luZm9fcHRyLT54ZmVyKSwgMCwgc2l6ZW9mKERFVl9TUElfVFJBTlNGRVIpKTsNCisgICAgbWVtc2V0KCYoc3BpX2luZm9fcHRyLT5zcGlfY2JzKSwgMCwgc2l6ZW9mKERFVl9TUElfQ0JTKSk7DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGNsb3NlIGEgRGVzaWduV2FyZSBTUEkgZGV2aWNlDQorICogXHBhcmFtW2luXSAgIHNwaV9vYmogc3BpIG9iamVjdCBwb2ludGVyDQorICogXHJldHZhbCAgRV9PSyAgICBDbG9zZSBzdWNjZXNzZnVsbHkgd2l0aG91dCBhbnkgaXNzdWVzKGluY2x1ZGluZyBzY2VuYXJpbyB0aGF0IGRldmljZSBpcyBhbHJlYWR5IGNsb3NlZCkNCisgKiBccmV0dmFsICBFX09QTkVEIERldmljZSBpcyBzdGlsbCBvcGVuZWQsIHRoZSBkZXZpY2UgXHJlZiBkZXZfc3BpX2luZm86Om9wbl9jbnQgIm9wbl9jbnQiIGRlY3JlYXNlZCBieSAxDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZA0KKyAqLw0KK2ludDMyX3QgZHdfc3BpX2Nsb3NlKERFVl9TUEkgKnNwaV9vYmopDQorew0KKyAgICBpbnQzMl90IGVyY2QgPSBFX09LOw0KKyAgICBERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0ciA9ICYoc3BpX29iai0+c3BpX2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfU1BJX0lORk9fT0JKRUNUKHNwaV9pbmZvX3B0cik7DQorICAgIERXX1NQSV9DSEVDS19FWFAoc3BpX2luZm9fcHRyLT5vcG5fY250ID4gMCwgRV9PSyk7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICBzcGlfaW5mb19wdHItPm9wbl9jbnQgLS07DQorDQorICAgIGlmIChzcGlfaW5mb19wdHItPm9wbl9jbnQgPT0gMCkNCisgICAgew0KKyAgICAgICAgRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciA9IChEV19TUElfQ1RSTCAqKShzcGlfaW5mb19wdHItPnNwaV9jdHJsKTsNCisNCisgICAgICAgIGR3X3NwaV9kaXNhYmxlX2ludGVycnVwdChzcGlfaW5mb19wdHIpOw0KKyAgICAgICAgZHdfc3BpX2Fib3J0X3R4KHNwaV9vYmopOw0KKyAgICAgICAgZHdfc3BpX2Fib3J0X3J4KHNwaV9vYmopOw0KKyAgICAgICAgbWVtc2V0KCYoc3BpX2luZm9fcHRyLT54ZmVyKSwgMCwgc2l6ZW9mKERFVl9TUElfVFJBTlNGRVIpKTsNCisgICAgICAgIG1lbXNldCgmKHNwaV9pbmZvX3B0ci0+c3BpX2NicyksIDAsIHNpemVvZihERVZfU1BJX0NCUykpOw0KKyAgICAgICAgbWVtc2V0KCYoc3BpX2N0cmxfcHRyLT5kd194ZmVyKSwgMCwgc2l6ZW9mKERXX1NQSV9UUkFOU0ZFUikpOw0KKyAgICAgICAgZHdfc3BpX2Rpc2FibGVfZGV2aWNlKHNwaV9pbmZvX3B0cik7DQorICAgICAgICBzcGlfaW5mb19wdHItPnN0YXR1cyA9IERFVl9ESVNBQkxFRDsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+ZXh0cmEgPSBOVUxMOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgZXJjZCA9IEVfT1BORUQ7DQorICAgIH0NCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgY29udHJvbCBzcGkgYnkgY3RybCBjb21tYW5kDQorICogXHBhcmFtW2luXSAgICAgICBzcGlfb2JqICAgICBzcGkgb2JqZWN0IHBvaW50ZXINCisgKiBccGFyYW1baW5dICAgICAgIGN0cmxfY21kICAgIGNvbnRyb2wgY29tbWFuZCBjb2RlIHRvIGRvIHNwZWNpZmljIHNwaSB3b3JrDQorICogXHBhcmFtW2luLG91dF0gICBwYXJhbSAgICAgICBwYXJhbWV0ZXJzIHVzZWQgdG8gY29udHJvbCBzcGkgb3IgcmV0dXJuIHNvbWV0aGluZw0KKyAqIFxyZXR2YWwgIEVfT0sgICAgQ29udHJvbCBkZXZpY2Ugc3VjY2Vzc2Z1bGx5DQorICogXHJldHZhbCAgRV9DTFNFRCBEZXZpY2UgaXMgbm90IG9wZW5lZA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZCBmb3IgY3VycmVudCBjb250cm9sIGNvbW1hbmQNCisgKiBccmV0dmFsICBFX1NZUyAgIENvbnRyb2wgZGV2aWNlIGZhaWxlZCwgZHVlIHRvIGhhcmR3YXJlIGlzc3Vlcywgc3VjaCBhcyBkZXZpY2UgaXMgZGlzYWJsZWQNCisgKiBccmV0dmFsICBFX0NUWCAgIENvbnRyb2wgZGV2aWNlIGZhaWxlZCwgZHVlIHRvIGRpZmZlcmVudCByZWFzb25zIGxpa2UgaW4gdHJhbnNmZXIgc3RhdGUNCisgKiBccmV0dmFsICBFX05PU1BUIENvbnRyb2wgY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkIG9yIG5vdCB2YWxpZA0KKyAqLw0KK2ludDMyX3QgZHdfc3BpX2NvbnRyb2woREVWX1NQSSAqc3BpX29iaiwgdWludDMyX3QgY3RybF9jbWQsIHZvaWQgKnBhcmFtKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIgPSAmKHNwaV9vYmotPnNwaV9pbmZvKTsNCisNCisgICAgLyogU1RBUlQgRVJST1IgQ0hFQ0sgKi8NCisgICAgVkFMSURfQ0hLX1NQSV9JTkZPX09CSkVDVChzcGlfaW5mb19wdHIpOw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKHNwaV9pbmZvX3B0ci0+b3BuX2NudCA+IDAsIEVfQ0xTRUQpOw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgdWludDMyX3QgdmFsMzI7IC8qKiB0byByZWNlaXZlIHVuc2lnbmVkIGludCB2YWx1ZSAqLw0KKyAgICBERVZfQlVGRkVSICpkZXZidWY7DQorDQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkwgKikoc3BpX2luZm9fcHRyLT5zcGlfY3RybCk7DQorICAgIERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyID0gKERXX1NQSV9SRUcgKikoc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncyk7DQorICAgIERFVl9TUElfVFJBTlNGRVIgKnNwaV94ZmVyID0gJihzcGlfaW5mb19wdHItPnhmZXIpOw0KKw0KKyAgICAvKiBjaGVjayB3aGV0aGVyIGN1cnJlbnQgZGV2aWNlIGlzIGRpc2FibGVkICovDQorICAgIGlmICgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfRU5BQkxFRCkgPT0gMCkNCisgICAgew0KKyAgICAgICAgLyoqIFdoZW4gZGV2aWNlIGlzIGRpc2FibGVkLA0KKyAgICAgICAgICogb25seSBTUElfQ01EX0VOQV9ERVYsIFNQSV9DTURfRElTX0RFViwgU1BJX0NNRF9HRVRfU1RBVFVTLCBTUElfQ01EX1JFU0VUDQorICAgICAgICAgKiBhcmUgYXZhaWxhYmxlLCBvdGhlciBjb21tYW5kcyB3aWxsIHJldHVybiBFX1NZUw0KKyAgICAgICAgICovDQorICAgICAgICBpZiAoKGN0cmxfY21kICE9IFNQSV9DTURfRU5BX0RFVikgJiYgXA0KKyAgICAgICAgICAgIChjdHJsX2NtZCAhPSBTUElfQ01EX0RJU19ERVYpICYmIFwNCisgICAgICAgICAgICAoY3RybF9jbWQgIT0gU1BJX0NNRF9HRVRfU1RBVFVTKSAmJiBcDQorICAgICAgICAgICAgKGN0cmxfY21kICE9IFNQSV9DTURfUkVTRVQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBFX1NZUzsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBzd2l0Y2ggKGN0cmxfY21kKQ0KKyAgICB7DQorICAgIC8qIENvbW1tb24gY29tbWFuZHMgZm9yIGJvdGggbWFzdGVyIGFuZCBzbGF2ZSBtb2RlICovDQorICAgIGNhc2UgU1BJX0NNRF9HRVRfU1RBVFVTOg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgocGFyYW0gIT0gTlVMTCkgJiYgQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgKigoaW50MzJfdCAqKXBhcmFtKSA9IHNwaV9pbmZvX3B0ci0+c3RhdHVzOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9TRVRfQ0xLX01PREU6DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9JTl9YRkVSKSA9PSAwLCBFX0NUWCk7DQorICAgICAgICB2YWwzMiA9ICh1aW50MzJfdClwYXJhbTsNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKHZhbDMyID49IFNQSV9DUE9MXzBfQ1BIQV8wKSAmJiAodmFsMzIgPD0gU1BJX0NQT0xfMV9DUEhBXzEpLCBFX1BBUik7DQorDQorICAgICAgICBpZiAoZHdfc3BpX3NldF9jbG9ja21vZGUoc3BpX3JlZ19wdHIsIHZhbDMyKSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNwaV9pbmZvX3B0ci0+Y2xrX21vZGUgPSB2YWwzMjsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBlcmNkID0gRV9TWVM7DQorICAgICAgICB9DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX0VOQV9ERVY6DQorICAgICAgICBkd19zcGlfZW5hYmxlX2RldmljZShzcGlfaW5mb19wdHIpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9ESVNfREVWOg0KKyAgICAgICAgZHdfc3BpX2Rpc2FibGVfZGV2aWNlKHNwaV9pbmZvX3B0cik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX1JFU0VUOg0KKyAgICAgICAgZHdfc3BpX3Jlc2V0X2RldmljZShzcGlfaW5mb19wdHIpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9GTFVTSF9UWDoNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0lOX1hGRVIpID09IDAsIEVfQ1RYKTsNCisgICAgICAgIGR3X3NwaV9mbHVzaF90eChzcGlfcmVnX3B0cik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX0ZMVVNIX1JYOg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfSU5fWEZFUikgPT0gMCwgRV9DVFgpOw0KKyAgICAgICAgZHdfc3BpX2ZsdXNoX3J4KHNwaV9yZWdfcHRyKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfU0VUX0RGUzoNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0lOX1hGRVIpID09IDAsIEVfQ1RYKTsNCisgICAgICAgIHZhbDMyID0gKHVpbnQzMl90KXBhcmFtOw0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCh2YWwzMiA+IDAsIEVfUEFSKTsNCisNCisgICAgICAgIGlmIChkd19zcGlfc2V0X2RmcyhzcGlfcmVnX3B0ciwgdmFsMzIpID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgc3BpX2luZm9fcHRyLT5kZnMgPSB2YWwzMjsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBlcmNkID0gRV9TWVM7DQorICAgICAgICB9DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX1NFVF9EVU1NWV9EQVRBOg0KKyAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorICAgICAgICBzcGlfaW5mb19wdHItPmR1bW15ID0gdmFsMzI7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX0dFVF9SWEFWQUlMOiAvKiBOb3RpY2UgaW4gYnl0ZXMgdW5pdCAqLw0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgocGFyYW0gIT0gTlVMTCkgJiYgQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgKigoaW50MzJfdCAqKXBhcmFtKSA9IGR3X3NwaV9nZXRfcnhhdmFpbChzcGlfY3RybF9wdHIpICogZHdfc3BpX25ieXRlcyhzcGlfaW5mb19wdHItPmRmcyk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX0dFVF9UWEFWQUlMOiAvKiBOb3RpY2UgaW4gYnl0ZXMgdW5pdCAqLw0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgocGFyYW0gIT0gTlVMTCkgJiYgQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgKigoaW50MzJfdCAqKXBhcmFtKSA9IGR3X3NwaV9nZXRfdHhhdmFpbChzcGlfY3RybF9wdHIpICogZHdfc3BpX25ieXRlcyhzcGlfaW5mb19wdHItPmRmcyk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX1NFVF9UWENCOg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICBzcGlfaW5mb19wdHItPnNwaV9jYnMudHhfY2IgPSBwYXJhbTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfU0VUX1JYQ0I6DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+c3BpX2Nicy5yeF9jYiA9IHBhcmFtOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9TRVRfWEZFUkNCOg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICBzcGlfaW5mb19wdHItPnNwaV9jYnMueGZlcl9jYiA9IHBhcmFtOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9TRVRfRVJSQ0I6DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+c3BpX2Nicy5lcnJfY2IgPSBwYXJhbTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfQUJPUlRfVFg6DQorICAgICAgICBlcmNkID0gZHdfc3BpX2Fib3J0X3R4KHNwaV9vYmopOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9BQk9SVF9SWDoNCisgICAgICAgIGVyY2QgPSBkd19zcGlfYWJvcnRfcngoc3BpX29iaik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX0FCT1JUX1hGRVI6DQorICAgICAgICBlcmNkID0gZHdfc3BpX2Fib3J0X3hmZXIoc3BpX29iaik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX1NFVF9UWElOVDoNCisgICAgICAgIHZhbDMyID0gKHVpbnQzMl90KXBhcmFtOw0KKw0KKyAgICAgICAgaWYgKHZhbDMyID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgZXJjZCA9IGR3X3NwaV9kaXNfY2JyKHNwaV9pbmZvX3B0ciwgRFdfU1BJX1JEWV9TTkQpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVyY2QgPSBkd19zcGlfZW5hX2NicihzcGlfaW5mb19wdHIsIERXX1NQSV9SRFlfU05EKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfU0VUX1JYSU5UOg0KKyAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorDQorICAgICAgICBpZiAodmFsMzIgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBlcmNkID0gZHdfc3BpX2Rpc19jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1JDVik7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgZXJjZCA9IGR3X3NwaV9lbmFfY2JyKHNwaV9pbmZvX3B0ciwgRFdfU1BJX1JEWV9SQ1YpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9TRVRfVFhJTlRfQlVGOg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9JTl9YRkVSKSA9PSAwLCBFX0NUWCk7DQorDQorICAgICAgICBpZiAocGFyYW0gIT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXZidWYgPSAoREVWX0JVRkZFUiAqKXBhcmFtOw0KKyAgICAgICAgICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoc3BpX3hmZXIsIGRldmJ1Zi0+YnVmLCAwLCBkZXZidWYtPmxlbik7DQorICAgICAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRihzcGlfeGZlciwgTlVMTCwgZGV2YnVmLT5sZW4sIDApOw0KKyAgICAgICAgICAgIERFVl9TUElfWEZFUl9TRVRfTkVYVChzcGlfeGZlciwgTlVMTCk7DQorICAgICAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChkd19zcGlfY2hrX3hmZXJfYWxpZ25lZChzcGlfeGZlciwgc3BpX2luZm9fcHRyLT5kZnMpID09IDAsIEVfUEFSKTsNCisgICAgICAgICAgICBkd19zcGlfaW5pdF90cmFuc2ZlcihzcGlfY3RybF9wdHIsIHNwaV94ZmVyLCBzcGlfaW5mb19wdHItPmRmcyk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRihzcGlfeGZlciwgTlVMTCwgMCwgMCk7DQorICAgICAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRihzcGlfeGZlciwgTlVMTCwgMCwgMCk7DQorICAgICAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKHNwaV94ZmVyLCBOVUxMKTsNCisgICAgICAgICAgICBkd19zcGlfaW5pdF90cmFuc2ZlcihzcGlfY3RybF9wdHIsIE5VTEwsIHNwaV9pbmZvX3B0ci0+ZGZzKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfU0VUX1JYSU5UX0JVRjoNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfSU5fWEZFUikgPT0gMCwgRV9DVFgpOw0KKw0KKyAgICAgICAgaWYgKHBhcmFtICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgZGV2YnVmID0gKERFVl9CVUZGRVIgKilwYXJhbTsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKHNwaV94ZmVyLCBOVUxMLCBkZXZidWYtPmxlbiwgMCk7DQorICAgICAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRihzcGlfeGZlciwgZGV2YnVmLT5idWYsIDAsIGRldmJ1Zi0+bGVuKTsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoc3BpX3hmZXIsIE5VTEwpOw0KKyAgICAgICAgICAgIC8qIENoZWNrIHRyYW5zZmVyIGFsaWduICovDQorICAgICAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChkd19zcGlfY2hrX3hmZXJfYWxpZ25lZChzcGlfeGZlciwgc3BpX2luZm9fcHRyLT5kZnMpID09IDAsIEVfUEFSKTsNCisgICAgICAgICAgICBkd19zcGlfaW5pdF90cmFuc2ZlcihzcGlfY3RybF9wdHIsIHNwaV94ZmVyLCBzcGlfaW5mb19wdHItPmRmcyk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRihzcGlfeGZlciwgTlVMTCwgMCwgMCk7DQorICAgICAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRihzcGlfeGZlciwgTlVMTCwgMCwgMCk7DQorICAgICAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKHNwaV94ZmVyLCBOVUxMKTsNCisgICAgICAgICAgICBkd19zcGlfaW5pdF90cmFuc2ZlcihzcGlfY3RybF9wdHIsIE5VTEwsIHNwaV9pbmZvX3B0ci0+ZGZzKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfVFJBTlNGRVJfUE9MTElORzoNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfSU5fWEZFUikgPT0gMCwgRV9DVFgpOw0KKw0KKyAgICAgICAgaWYgKHBhcmFtICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgLyogQ2hlY2sgdHJhbnNmZXIgYWxpZ24gKi8NCisgICAgICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKGR3X3NwaV9jaGtfeGZlcl9hbGlnbmVkKChERVZfU1BJX1RSQU5TRkVSICopcGFyYW0sIHNwaV9pbmZvX3B0ci0+ZGZzKSA9PSAwLCBFX1BBUik7DQorICAgICAgICAgICAgKnNwaV94ZmVyID0gKigoREVWX1NQSV9UUkFOU0ZFUiAqKXBhcmFtKTsNCisgICAgICAgICAgICBkd19zcGlfaW5pdF90cmFuc2ZlcihzcGlfY3RybF9wdHIsIHNwaV94ZmVyLCBzcGlfaW5mb19wdHItPmRmcyk7DQorICAgICAgICAgICAgLyogVHJhbnNmZXIgZGF0YSBieSBwb2xsICovDQorICAgICAgICAgICAgZHdfc3BpX3BvbGxfdHJhbnNmZXIoc3BpX2luZm9fcHRyKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBlcmNkID0gRV9QQVI7DQorICAgICAgICB9DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX1RSQU5TRkVSX0lOVDoNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKw0KKyAgICAgICAgaWYgKHBhcmFtICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfSU5fWEZFUikgPT0gMCwgRV9DVFgpOw0KKyAgICAgICAgICAgIC8qIENoZWNrIHRyYW5zZmVyIGFsaWduICovDQorICAgICAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChkd19zcGlfY2hrX3hmZXJfYWxpZ25lZCgoREVWX1NQSV9UUkFOU0ZFUiAqKXBhcmFtLCBzcGlfaW5mb19wdHItPmRmcykgPT0gMCwgRV9QQVIpOw0KKyAgICAgICAgICAgICpzcGlfeGZlciA9ICooKERFVl9TUElfVFJBTlNGRVIgKilwYXJhbSk7DQorICAgICAgICAgICAgZHdfc3BpX2luaXRfdHJhbnNmZXIoc3BpX2N0cmxfcHRyLCBzcGlfeGZlciwgc3BpX2luZm9fcHRyLT5kZnMpOw0KKyAgICAgICAgICAgIC8qIFRyYW5zZmVyIGRhdGEgYnkgaW50ZXJydXB0ICovDQorICAgICAgICAgICAgZXJjZCA9IGR3X3NwaV9lbmFfY2JyKHNwaV9pbmZvX3B0ciwgRFdfU1BJX1JEWV9YRkVSKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBlcmNkID0gZHdfc3BpX2Rpc19jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1hGRVIpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIC8qIE1hc3RlciBtb2RlIG9ubHkgY29tbWFuZHMgKi8NCisgICAgY2FzZSBTUElfQ01EX01TVF9TRVRfRlJFUToNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoc3BpX2luZm9fcHRyLT5tb2RlID09IERFVl9NQVNURVJfTU9ERSwgRV9OT1NQVCk7DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9JTl9YRkVSKSA9PSAwLCBFX0NUWCk7DQorICAgICAgICB2YWwzMiA9ICh1aW50MzJfdClwYXJhbTsNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAodmFsMzIgPiAwLCBFX1BBUik7DQorICAgICAgICBkd19zcGlfc2V0X2ZyZXEoc3BpX2N0cmxfcHRyLCB2YWwzMik7DQorICAgICAgICBzcGlfaW5mb19wdHItPmZyZXEgPSB2YWwzMjsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfTVNUX1NFTF9ERVY6DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKHNwaV9pbmZvX3B0ci0+bW9kZSA9PSBERVZfTUFTVEVSX01PREUsIEVfTk9TUFQpOw0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfSU5fWEZFUikgPT0gMCwgRV9DVFgpOw0KKyAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorDQorICAgICAgICBpZiAoZHdfc3BpX3NlbGVjdF9zbGF2ZShzcGlfcmVnX3B0ciwgdmFsMzIpID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgc3BpX2luZm9fcHRyLT5zbGF2ZSA9IHZhbDMyOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVyY2QgPSBFX1NZUzsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfTVNUX0RTRUxfREVWOg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChzcGlfaW5mb19wdHItPm1vZGUgPT0gREVWX01BU1RFUl9NT0RFLCBFX05PU1BUKTsNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0lOX1hGRVIpID09IDAsIEVfQ1RYKTsNCisgICAgICAgIHZhbDMyID0gKHVpbnQzMl90KXBhcmFtOw0KKw0KKyAgICAgICAgaWYgKGR3X3NwaV9kZXNlbGVjdF9zbGF2ZShzcGlfcmVnX3B0ciwgdmFsMzIpID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgc3BpX2luZm9fcHRyLT5zbGF2ZSA9IFNQSV9TTEFWRV9OT1RfU0VMRUNURUQ7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgZXJjZCA9IEVfU1lTOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIC8qIFNsYXZlIG1vZGUgb25seSBjb21tYW5kcyAqLw0KKw0KKw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgZXJjZCA9IEVfTk9TUFQ7DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBzZW5kIGRhdGEgdGhyb3VnaCBEZXNpZ25XYXJlIFNQSQ0KKyAqIFxwYXJhbVtpbl0gICBzcGlfb2JqIHNwaSBvYmplY3QgcG9pbnRlcg0KKyAqIFxwYXJhbVtpbl0gICBkYXRhICAgIHBvaW50ZXIgdG8gZGF0YSBuZWVkIHRvIHNlbmQgYnkgc3BpDQorICogXHBhcmFtW2luXSAgIGxlbiBsZW5ndGggb2YgZGF0YSB0byBiZSBzZW50DQorICogXHJldHZhbCAgPjAgIEJ5dGUgY291bnQgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQgZm9yIHBvbGwgbWV0aG9kDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZCBvciBub3QgZXhpc3RzDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9DVFggICBEZXZpY2UgaXMgc3RpbGwgaW4gdHJhbnNmZXIgc3RhdGUNCisgKiBccmV0dmFsICBFX1NZUyAgIENhbid0IHdyaXRlIGRhdGEgdG8gaGFyZHdhcmUgZHVlIHRvIGhhcmR3YXJlIGlzc3Vlcywgc3VjaCBhcyBkZXZpY2UgaXMgZGlzYWJsZWQNCisgKi8NCitpbnQzMl90IGR3X3NwaV93cml0ZShERVZfU1BJICpzcGlfb2JqLCBjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pDQorew0KKyAgICBpbnQzMl90IGVyY2QgPSBFX09LOw0KKyAgICBERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0ciA9ICYoc3BpX29iai0+c3BpX2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfU1BJX0lORk9fT0JKRUNUKHNwaV9pbmZvX3B0cik7DQorICAgIERXX1NQSV9DSEVDS19FWFAoc3BpX2luZm9fcHRyLT5vcG5fY250ID4gMCwgRV9DTFNFRCk7DQorICAgIERXX1NQSV9DSEVDS19FWFAoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfRU5BQkxFRCwgRV9TWVMpOw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9JTl9YRkVSKSA9PSAwLCBFX0NUWCk7DQorICAgIERXX1NQSV9DSEVDS19FWFAoZGF0YSAhPSBOVUxMLCBFX1BBUik7DQorICAgIERXX1NQSV9DSEVDS19FWFAobGVuID4gMCwgRV9QQVIpOw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciA9IChEV19TUElfQ1RSTF9QVFIpKHNwaV9pbmZvX3B0ci0+c3BpX2N0cmwpOw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIHNwaV94ZmVyOw0KKw0KKyAgICAvKiBNYXN0ZXIgYW5kIFNsYXZlIHRyYW5zbWl0ICovDQorICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJnNwaV94ZmVyLCBkYXRhLCAwLCBsZW4pOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZzcGlfeGZlciwgTlVMTCwgbGVuLCAwKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZzcGlfeGZlciwgTlVMTCk7DQorDQorICAgIC8qIENoZWNrIHRyYW5zZmVyIGFsaWduICovDQorICAgIERXX1NQSV9DSEVDS19FWFAoZHdfc3BpX2Noa194ZmVyX2FsaWduZWQoJnNwaV94ZmVyLCBzcGlfaW5mb19wdHItPmRmcykgPT0gMCwgRV9QQVIpOw0KKw0KKyAgICBkd19zcGlfaW5pdF90cmFuc2ZlcihzcGlfY3RybF9wdHIsICZzcGlfeGZlciwgc3BpX2luZm9fcHRyLT5kZnMpOw0KKw0KKyAgICBlcmNkID0gZHdfc3BpX3BvbGxfdHJhbnNmZXIoc3BpX2luZm9fcHRyKTsNCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgcmVhZCBkYXRhIHRocm91Z2ggRGVzaWduV2FyZSBTUEkNCisgKiBccGFyYW1baW5dICAgc3BpX2luZm9fcHRyICAgIHNwaSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqIFxwYXJhbVtvdXRdICBkYXRhICAgICAgICBkYXRhIHRoYXQgbmVlZCB0byByZWFkIChkYXRhIG11c3QgYmUgY2hhciB0eXBlKQ0KKyAqIFxwYXJhbVtpbl0gICBsZW4gICAgIGRhdGEgY291bnQgbmVlZCB0byByZWFkDQorICogXHJldHZhbCAgPj0wICAgICBkYXRhIGhhdmUgYmVlbiByZWFkDQorICogXHJldHZhbCAgRV9QQVIgICAgICAgYXJndW1lbnRzIHBhc3NlZCB3YXMgd3JvbmcNCisgKiBccmV0dmFsICBFX09CSiAgICAgICBzcGkgaGFzIHNvbWV0aGluZyBlcnJvciwgbm90aGluZyBjYW4gYmUgZG9uZQ0KKyAqIFxyZXR2YWwgIEVfQ0xTRUQgICAgIHNwaSB3YXMgY2xvc2VkLCBub3QgYXZhaWxhYmxlIGZvciBjb250cm9sDQorICogXHJldHZhbCAgPDAgICAgICBvdGhlciBlcnJvciBjb2RlIG5vdCBkZWZpbmVkIGhlcmUNCisgKi8NCitpbnQzMl90IGR3X3NwaV9yZWFkKERFVl9TUEkgKnNwaV9vYmosIHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyID0gJihzcGlfb2JqLT5zcGlfaW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19TUElfSU5GT19PQkpFQ1Qoc3BpX2luZm9fcHRyKTsNCisgICAgRFdfU1BJX0NIRUNLX0VYUChzcGlfaW5mb19wdHItPm9wbl9jbnQgPiAwLCBFX0NMU0VEKTsNCisgICAgRFdfU1BJX0NIRUNLX0VYUChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9FTkFCTEVELCBFX1NZUyk7DQorICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0lOX1hGRVIpID09IDAsIEVfQ1RYKTsNCisgICAgRFdfU1BJX0NIRUNLX0VYUChkYXRhICE9IE5VTEwsIEVfUEFSKTsNCisgICAgRFdfU1BJX0NIRUNLX0VYUChsZW4gPiAwLCBFX1BBUik7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICBEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyID0gKERXX1NQSV9DVFJMX1BUUikoc3BpX2luZm9fcHRyLT5zcGlfY3RybCk7DQorICAgIERFVl9TUElfVFJBTlNGRVIgc3BpX3hmZXI7DQorDQorICAgIC8qIE1hc3RlciBhbmQgU2xhdmUgdHJhbnNtaXQgKi8NCisgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmc3BpX3hmZXIsIE5VTEwsIGxlbiwgMCk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJnNwaV94ZmVyLCBkYXRhLCAwLCBsZW4pOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJnNwaV94ZmVyLCBOVUxMKTsNCisNCisgICAgLyogQ2hlY2sgdHJhbnNmZXIgYWxpZ24gKi8NCisgICAgRFdfU1BJX0NIRUNLX0VYUChkd19zcGlfY2hrX3hmZXJfYWxpZ25lZCgmc3BpX3hmZXIsIHNwaV9pbmZvX3B0ci0+ZGZzKSA9PSAwLCBFX1BBUik7DQorDQorICAgIGR3X3NwaV9pbml0X3RyYW5zZmVyKHNwaV9jdHJsX3B0ciwgJnNwaV94ZmVyLCBzcGlfaW5mb19wdHItPmRmcyk7DQorDQorICAgIGVyY2QgPSBkd19zcGlfcG9sbF90cmFuc2ZlcihzcGlfaW5mb19wdHIpOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFNQSSBpbnRlcnJ1cHQgcHJvY2Vzc2luZyByb3V0aW5lDQorICogXHBhcmFtW2luXSAgIHNwaV9pbmZvX3B0ciAgICBERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0cg0KKyAqIFxwYXJhbVtpbl0gICBwdHIgICAgIGV4dHJhIGluZm9ybWF0aW9uDQorICovDQordm9pZCBkd19zcGlfaXNyKERFVl9TUEkgKnNwaV9vYmosIHZvaWQgKnB0cikNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyID0gJihzcGlfb2JqLT5zcGlfaW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19TUElfSU5GT19PQkpFQ1Qoc3BpX2luZm9fcHRyKTsNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkxfUFRSKShzcGlfaW5mb19wdHItPnNwaV9jdHJsKTsNCisgICAgRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIgPSAoRFdfU1BJX1JFRyAqKShzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzKTsNCisNCisgICAgdWludDMyX3QgaXNyX3N0YXR1czsNCisNCisgICAgaXNyX3N0YXR1cyA9IHNwaV9yZWdfcHRyLT5JU1I7DQorDQorICAgIGlmICghaXNyX3N0YXR1cykgeyByZXR1cm47IH0NCisNCisgICAgaWYgKHNwaV9jdHJsX3B0ci0+ZHdfeGZlci54ZmVyX2xlbiA9PSAwKQ0KKyAgICB7DQorICAgICAgICBkd19zcGlfZGlzYWJsZV9pbnRlcnJ1cHQoc3BpX2luZm9fcHRyKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlmIChpc3Jfc3RhdHVzICYgKERXX1NQSV9JTVJfVFhPSU0gfCBEV19TUElfSU1SX1JYT0lNIHwgRFdfU1BJX0lNUl9SWFVJTSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgZHdfc3BpX2NsZWFyX2ludGVycnVwdF9hbGwoc3BpX3JlZ19wdHIpOw0KKyAgICAgICAgICAgIGR3X3NwaV9kaXNhYmxlX2ludGVycnVwdChzcGlfaW5mb19wdHIpOw0KKw0KKyAgICAgICAgICAgIGlmIChzcGlfaW5mb19wdHItPnNwaV9jYnMuZXJyX2NiKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc3BpX2luZm9fcHRyLT5zcGlfY2JzLmVycl9jYihzcGlfb2JqKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgbWVtc2V0KCYoc3BpX2N0cmxfcHRyLT5kd194ZmVyKSwgMCwgc2l6ZW9mKERXX1NQSV9UUkFOU0ZFUikpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZHdfc3BpX3JlYWRlcihzcGlfaW5mb19wdHIpOw0KKw0KKyAgICAgICAgaWYgKGlzcl9zdGF0dXMgJiBEV19TUElfSU1SX1RYRUlNKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGR3X3NwaV93cml0ZXIoc3BpX2luZm9fcHRyKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChkd19zcGlfeGZlcl9lbmQoc3BpX2N0cmxfcHRyKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpID09IERXX1NQSV9JTl9UWCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGR3X3NwaV9kaXNfY2JyKHNwaV9pbmZvX3B0ciwgRFdfU1BJX1JEWV9TTkQpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoc3BpX2luZm9fcHRyLT5zcGlfY2JzLnR4X2NiKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBzcGlfaW5mb19wdHItPnNwaV9jYnMudHhfY2Ioc3BpX29iaik7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZSBpZiAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpID09IERXX1NQSV9JTl9SWCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGR3X3NwaV9kaXNfY2JyKHNwaV9pbmZvX3B0ciwgRFdfU1BJX1JEWV9SQ1YpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoc3BpX2luZm9fcHRyLT5zcGlfY2JzLnJ4X2NiKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBzcGlfaW5mb19wdHItPnNwaV9jYnMucnhfY2Ioc3BpX29iaik7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZSBpZiAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpID09IERXX1NQSV9JTl9YRkVSKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZHdfc3BpX2Rpc19jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1hGRVIpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoc3BpX2luZm9fcHRyLT5zcGlfY2JzLnhmZXJfY2IpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNwaV9pbmZvX3B0ci0+c3BpX2Nicy54ZmVyX2NiKHNwaV9vYmopOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGR3X3NwaV9kaXNhYmxlX2ludGVycnVwdChzcGlfaW5mb19wdHIpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBtZW1zZXQoJihzcGlfY3RybF9wdHItPmR3X3hmZXIpLCAwLCBzaXplb2YoRFdfU1BJX1RSQU5TRkVSKSk7DQorICAgICAgICB9DQorICAgIH0NCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm47DQorfQ0KKy8qKiBAfSAqLyAvKiBERVZJQ0VfRFdfU1BJX0lNUExFTUVOVCAqLw0KKw0KKy8qKiBAfSAqLyAvKiBERVZJQ0VfRFdfU1BJICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGkuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwMTE4MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpLmgKQEAgLTAsMCArMSwxOTIgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTQtMDYtMjUNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFNQSSBkcml2ZXIgaGVhZGVyIGZpbGUNCisgKiBcaW5ncm91cCBERVZJQ0VfRFdfU1BJDQorICovDQorDQorI2lmbmRlZiBfREVWSUNFX0RXX1NQSV9IXw0KKyNkZWZpbmUgX0RFVklDRV9EV19TUElfSF8NCisNCisjaW5jbHVkZSAiZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9zcGkuaCINCisNCisvKioNCisgKiBpZiB0aGlzIGhlYWRlciBmaWxlIGlzIGluY2x1ZGVkLA0KKyAqIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGlzIGRlc2lnbndhcmUgc3BpIGRldmljZQ0KKyAqIGlzIHVzZWQNCisgKi8NCisjZGVmaW5lIERFVklDRV9VU0VfREVTSUdOV0FSRV9TUEkNCisNCisjZGVmaW5lIERXX1NQSV9JTl9GUkVFICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgLyohPCBDdXJyZW50bHkgbm90IGluIHNwaSB0cmFuc2ZlciAqLw0KKyNkZWZpbmUgRFdfU1BJX0lOX1hGRVIgICAgICAgICAgKERFVl9JTl9UWHxERVZfSU5fUlh8REVWX0lOX1hGRVIpICAgLyohPCBDdXJyZW50bHkgaW4gc3BpIHRyYW5zZmVyICovDQorI2RlZmluZSBEV19TUElfSU5fVFggICAgICAgICAgICAoREVWX0lOX1RYfERFVl9JTl9YRkVSKSAgICAgICAgIC8qITwgQ3VycmVudGx5IGluIHNwaSB0eCAqLw0KKyNkZWZpbmUgRFdfU1BJX0lOX1JYICAgICAgICAgICAgKERFVl9JTl9SWHxERVZfSU5fWEZFUikgICAgICAgICAvKiE8IEN1cnJlbnRseSBpbiBzcGkgcnggKi8NCisNCisjZGVmaW5lIERXX1NQSV9HSU5UX0RJU0FCTEVEICAgICAgICAoMCkgICAgIC8qITwgZGVzaWdud2FyZSBpbnRlcnJ1cHQgZGlzYWJsZWQgZm9yIGNvbnRyb2wgaWljIGlycS9maXEgKi8NCisjZGVmaW5lIERXX1NQSV9HSU5UX0VOQUJMRSAgICAgICgxPDwwKSAgICAgIC8qITwgZGVzaWdud2FyZSBpbnRlcnJ1cHQgZW5hYmxlZCBmb3IgY29udHJvbCBpaWMgaXJxL2ZpcSAqLw0KKw0KKyNkZWZpbmUgRFdfU1BJX01BU1RFUl9TVVBQT1JURUQgICAgICgweDEpICAgLyohPCBTdXBwb3J0IERlc2lnbndhcmUgU1BJIE1hc3RlciBNb2RlICovDQorI2RlZmluZSBEV19TUElfU0xBVkVfU1VQUE9SVEVEICAgICAgKDB4MikgICAvKiE8IFN1cHBvcnQgRGVzaWdud2FyZSBTUEkgU2xhdmUgTW9kZSAqLw0KKy8qITwgU3VwcG9ydCBEZXNpZ253YXJlIFNQSSBCb3RoIE1hc3RlciBhbmQgU2xhdmUgTW9kZSAqLw0KKyNkZWZpbmUgRFdfU1BJX0JPVEhfU1VQUE9SVEVEICAgICAgIChEV19TUElfTUFTVEVSX1NVUFBPUlRFRHxEV19TUElfU0xBVkVfU1VQUE9SVEVEKQ0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfRFdfU1BJX1JFR1NUUlVDVCAgICAgRGVzaWduV2FyZSBTUEkgUmVnaXN0ZXIgU3RydWN0dXJlDQorICogXGluZ3JvdXAgREVWSUNFX0RXX1NQSQ0KKyAqIFxicmllZiAgIGNvbnRhaW5zIGRlZmluaXRpb25zIG9mIERlc2lnbldhcmUgU1BJIHJlZ2lzdGVyIHN0cnVjdHVyZS4NCisgKiBcZGV0YWlscyBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBEZXNpZ25XYXJlIFNQSSByZWdpc3RlciBpbmZvcm1hdGlvbg0KKyAqIEB7DQorICovDQorLyoqDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBTUEkgcmVnaXN0ZXIgc3RydWN0dXJlDQorICogXGRldGFpbHMgRGV0YWlsZWQgc3RydWN0IGRlc2NyaXB0aW9uIG9mIERlc2lnbldhcmUgU1BJDQorICogIGJsb2NrIHJlZ2lzdGVyIGluZm9ybWF0aW9uLCBpbXBsZW1lbnRhdGlvbiBvZiBkZXZfc3BpX2luZm86OnNwaV9yZWdzDQorICovDQordHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgZHdfc3BpX3JlZw0KK3sNCisgICAgLyohPCBDb250cm9sIFJlZ2lzdGVyICovDQorICAgIC8qITwgU1BJIENvbnRyb2wgUmVnaXN0ZXIgMCAgKDB4MCkgKi8NCisgICAgdWludDMyX3QgQ1RSTFIwOw0KKyAgICAvKiE8IFNQSSBDb250cm9sIFJlZ2lzdGVyIDEgICgweDQpICovDQorICAgIHVpbnQzMl90IENUUkxSMTsNCisgICAgLyohPCBFbmFibGUgUmVnaXN0ZXIgKi8NCisgICAgLyohPCBTUEkgRW5hYmxlIFJlZ2lzdGVyICAoMHg4KSAqLw0KKyAgICB1aW50MzJfdCBTU0lFTlI7DQorICAgIC8qITwgU1BJIE1pY3Jvd2lyZSBDb250cm9sIFJlZ2lzdGVyICAoMHhDKSAqLw0KKyAgICB1aW50MzJfdCBNV0NSOw0KKyAgICAvKiE8IFNQSSBTbGF2ZSBFbmFibGUgUmVnaXN0ZXIgICgweDEwKSAqLw0KKyAgICB1aW50MzJfdCBTRVI7DQorICAgIC8qITwgU1BJIEJhdWQgUmF0ZSBTZWxlY3QgUmVnaXN0ZXIgICgweDE0KSAqLw0KKyAgICB1aW50MzJfdCBCQVVEUjsNCisgICAgLyohPCBUWCBhbmQgUlggRklGTyBDb250cm9sIFJlZ2lzdGVyICovDQorICAgIC8qITwgU1BJIFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkIExldmVsIFJlZ2lzdGVyICAoMHgxOCkgKi8NCisgICAgdWludDMyX3QgVFhGVExSOw0KKyAgICAvKiE8IFNQSSBSZWNlaXZlICBGSUZPIFRocmVzaG9sZCBMZXZlbCBSZWdpc3RlciAgKDB4MUMpICovDQorICAgIHVpbnQzMl90IFJYRlRMUjsNCisgICAgLyohPCBTUEkgVHJhbnNtaXQgRklGTyBMZXZlbCBSZWdpc3RlciAgKDB4MjApICovDQorICAgIHVpbnQzMl90IFRYRkxSOw0KKyAgICAvKiE8IFNQSSBSZWNlaXZlICBGSUZPIExldmVsIFJlZ2lzdGVyICAoMHgyNCkgKi8NCisgICAgdWludDMyX3QgUlhGTFI7DQorICAgIC8qITwgU1BJIFN0YXR1cyAgIFJlZ2lzdGVyICAoMHgyOCkgKi8NCisgICAgdWludDMyX3QgU1I7DQorICAgIC8qITwgSW50ZXJydXB0IEVuYWJsZS9EaXNhYmxlL0NvbnRyb2wgUmVnaXN0ZXJzICovDQorICAgIC8qITwgU1BJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICAoMHgyQykgKi8NCisgICAgdWludDMyX3QgSU1SOw0KKyAgICAvKiE8IFNQSSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAoMHgzMCkgKi8NCisgICAgdWludDMyX3QgSVNSOw0KKyAgICAvKiE8IFNQSSBSYXcgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAoMHgzNCkgKi8NCisgICAgdWludDMyX3QgUklTUjsNCisgICAgLyohPCBTUEkgVHJhbnNtaXQgRklGTyBPdmVyZmxvdyBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgICgweDM4KSAqLw0KKyAgICB1aW50MzJfdCBUWE9JQ1I7DQorICAgIC8qITwgU1BJIFJlY2VpdmUgIEZJRk8gT3ZlcmZsb3cgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyICAoMHgzQykgKi8NCisgICAgdWludDMyX3QgUlhPSUNSOw0KKyAgICAvKiE8IFNQSSBSZWNlaXZlIEZJRk8gVW5kZXJmbG93IEludGVycnVwdCBDbGVhciBSZWdpc3RlciAgKDB4NDApICovDQorICAgIHVpbnQzMl90IFJYVUlDUjsNCisgICAgLyohPCBTUEkgTXVsdGktTWFzdGVyIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAgKDB4NDQpICovDQorICAgIHVpbnQzMl90IE1TVElDUjsNCisgICAgLyohPCBTUEkgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyICAoMHg0OCkgKi8NCisgICAgdWludDMyX3QgSUNSOw0KKyAgICAvKiE8IERNQSBDb250cm9sIFJlZ2lzdGVyICAoMHg0QykgKi8NCisgICAgdWludDMyX3QgRE1BQ1I7DQorICAgIC8qITwgRE1BIFRyYW5zbWl0IERhdGEgTGV2ZWwgICgweDUwKSAqLw0KKyAgICB1aW50MzJfdCBETUFURExSOw0KKyAgICAvKiE8IERNQSBSZWNlaXZlIERhdGEgTGV2ZWwgICgweDU0KSAqLw0KKyAgICB1aW50MzJfdCBETUFSRExSOw0KKyAgICAvKiE8IFNQSSBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAgKDB4NTgpICovDQorICAgIHVpbnQzMl90IElEUjsNCisgICAgLyohPCBTUEkgQ29yZUtpdCBJRCBSZWdpc3RlciAoVmFsdWUgYWZ0ZXIgUmVzZXQgOiAweDMzMzIzMjJBKSAgKDB4NUMpICovDQorICAgIHVpbnQzMl90IFNTSV9WRVJfSUQ7DQorICAgIC8qITwgRGF0YSBSZWdpc3RlciAqLw0KKyAgICAvKiE8IFNQSSBEQVRBIFJlZ2lzdGVyIGZvciBib3RoIFJlYWQgYW5kIFdyaXRlICAoMHg2MCkgKi8NCisgICAgdWludDMyX3QgREFUQVJFRzsNCit9IERXX1NQSV9SRUcsICpEV19TUElfUkVHX1BUUjsNCisvKiogQH0gKi8NCisNCisvKiogRGVzaWdud2FyZSBTUEkgTWVzc2FnZSBUcmFuc2ZlciAqLw0KK3R5cGVkZWYgc3RydWN0IGR3X3NwaV90cmFuc2Zlcg0KK3sNCisgICAgdWludDMyX3QgeGZlcl9sZW47DQorICAgIHVpbnQzMl90IHR4X2lkeDsNCisgICAgdWludDMyX3QgcnhfaWR4Ow0KKyAgICB1aW50MzJfdCBuYnl0ZXM7DQorICAgIERFVl9TUElfVFJBTlNGRVIgKnR4X3hmZXI7DQorICAgIERFVl9TUElfVFJBTlNGRVIgKnJ4X3hmZXI7DQorfSBEV19TUElfVFJBTlNGRVIsICpEV19TUElfVFJBTlNGRVJfUFRSOw0KKw0KKy8qKg0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGNvbnRyb2wgc3RydWN0dXJlIGRlZmluaXRpb24NCisgKiBcZGV0YWlscyBpbXBsZW1lbnQgb2YgZGV2X3NwaV9pbmZvOjpkZXZfc3BpX2luZm8NCisgKi8NCit0eXBlZGVmIHN0cnVjdCBkd19zcGlfY3RybA0KK3sNCisgICAgRFdfU1BJX1JFRyAqZHdfc3BpX3JlZ3M7ICAgIC8qITwgc3BpIHJlZ2lzdGVyICovDQorICAgIC8qIFZhcmlhYmxlcyB3aGljaCBzaG91bGQgYmUgc2V0IGR1cmluZyBvYmplY3QgaW1wbGVtZW50YXRpb24gKi8NCisgICAgdWludDMyX3Qgc3VwcG9ydF9tb2RlczsgICAgIC8qITwgc3VwcG9ydGVkIHNwaSBtb2RlcyAqLw0KKyAgICB1aW50MzJfdCBpbnRubzsgICAgICAgICAvKiE8IGludGVycnVwdCBubyAqLw0KKyAgICB1aW50MzJfdCBkd19hcGJfYnVzX2ZyZXE7ICAgLyohPCBzcGkgaXAgYXBiIGJ1cyBmcmVxdWVuY3kgKi8NCisgICAgdWludDMyX3QgdHhfZmlmb19sZW47ICAgICAgIC8qITwgdHJhbnNtaXQgZmlmbyBsZW5ndGggKi8NCisgICAgdWludDMyX3QgcnhfZmlmb19sZW47ICAgICAgIC8qITwgcmVjZWl2ZSBmaWZvIGxlbmd0aCAqLw0KKyAgICBJTlRfSEFORExFUiBkd19zcGlfaW50X2hhbmRsZXI7IC8qITwgc3BpIGludGVycnVwdCBoYW5kbGVyICovDQorICAgIC8qIFZhcmlhYmxlcyB3aGljaCBhbHdheXMgY2hhbmdlIGR1cmluZyBpaWMgb3BlcmF0aW9uICovDQorICAgIHVpbnQzMl90IGludF9zdGF0dXM7ICAgICAgICAvKiE8IGlpYyBpbnRlcnJ1cHQgc3RhdHVzICovDQorICAgIERXX1NQSV9UUkFOU0ZFUiBkd194ZmVyOyAgICAvKiE8IGRlc2lnbndhcmUgc3BpIHRyYW5zZmVyICovDQorfSBEV19TUElfQ1RSTCwgKkRXX1NQSV9DVFJMX1BUUjsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0RXX1NQSV9GVU5DRExSICAgICAgIERlc2lnbldhcmUgU1BJIEZ1bmN0aW9uIERlY2xhcmF0aW9uDQorICogXGluZ3JvdXAgREVWSUNFX0RXX1NQSQ0KKyAqIFxicmllZiAgIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyBvZiBkZXNpZ253YXJlIHNwaSBmdW5jdGlvbnMuDQorICogXGRldGFpbHMgVGhpcyBhcmUgb25seSB1c2VkIGluIFxyZWYgZHdfc3BpX29iai5jDQorICogQHsNCisgKi8NCitleHRlcm4gaW50MzJfdCBkd19zcGlfb3BlbihERVZfU1BJICpzcGlfb2JqLCB1aW50MzJfdCBtb2RlLCB1aW50MzJfdCBwYXJhbSk7DQorZXh0ZXJuIGludDMyX3QgZHdfc3BpX2Nsb3NlKERFVl9TUEkgKnNwaV9vYmopOw0KK2V4dGVybiBpbnQzMl90IGR3X3NwaV9jb250cm9sKERFVl9TUEkgKnNwaV9vYmosIHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSk7DQorZXh0ZXJuIGludDMyX3QgZHdfc3BpX3dyaXRlKERFVl9TUEkgKnNwaV9vYmosIGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbik7DQorZXh0ZXJuIGludDMyX3QgZHdfc3BpX3JlYWQoREVWX1NQSSAqc3BpX29iaiwgdm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKTsNCitleHRlcm4gdm9pZCBkd19zcGlfaXNyKERFVl9TUEkgKnNwaV9vYmosIHZvaWQgKnB0cik7DQorLyoqIEB9ICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKy8qKiBAfSAqLw0KKw0KKyNlbmRpZiAvKiBfREVWSUNFX0RXX1NQSV9IXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpX2hhbC5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGlfaGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyOWY1NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpX2hhbC5oCkBAIC0wLDAgKzEsMTQxIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE0LTA2LTI1DQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgREVWSUNFX0RXX1NQSQ0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGRyaXZlciBoYXJkd2FyZSBkZXNjcmlwdGlvbiByZWxhdGVkIGhlYWRlciBmaWxlDQorICogXGRldGFpbHMgZGV0YWlsZWQgaGFyZHdhcmUgcmVsYXRlZCBkZWZpbml0aW9ucyBvZiBEZXNpZ25XYXJlIFNQSSBkcml2ZXINCisgKi8NCisNCisjaWZuZGVmIF9ERVZJQ0VfRFdfU1BJX0hBTF9IXw0KKyNkZWZpbmUgX0RFVklDRV9EV19TUElfSEFMX0hfDQorDQorI2luY2x1ZGUgImRldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGlfaGFsX2NmZy5oIg0KKw0KKy8qIERXIEFQQiBTUEkgYml0IGRlZmluaXRpb25zICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBTUEkgSEFMIENUUkwwIE1hY3Jvcw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGhhbCBjdHJsMCBtYWNyb3MsDQorICogIGluY2x1ZGUgZGZzLCBzY3BoLCBzY3BwbCwgdG1vZCwgZXRjDQorICogQHsNCisgKi8NCisjZGVmaW5lIERXX1NQSV9DVFJMUjBfREZTX01BU0sgICAgICAgICAgKDB4ZikNCisNCisjZGVmaW5lIERXX1NQSV9DVFJMUjBfU0NfT0ZTICAgICAgICAgICAgKDYpDQorI2RlZmluZSBEV19TUElfQ1RSTFIwX1NDX01BU0sgICAgICAgICAgICgweEMwKQ0KKyNkZWZpbmUgRFdfU1BJX0NUUkxSMF9TQ1BIX0hJR0ggICAgICAgICAoMHg0MCkNCisjZGVmaW5lIERXX1NQSV9DVFJMUjBfU0NQSF9MT1cgICAgICAgICAgKDApDQorI2RlZmluZSBEV19TUElfQ1RSTFIwX1NDUE9MX0hJR0ggICAgICAgICgweDgwKQ0KKyNkZWZpbmUgRFdfU1BJX0NUUkxSMF9TQ1BPTF9MT1cgICAgICAgICAoMCkNCisNCisjZGVmaW5lIERXX1NQSV9DVFJMUjBfVE1PRF9NQVNLICAgICAgICAgKDB4MzAwKQ0KKyNkZWZpbmUgRFdfU1BJX1RNT0RfVFJBTlNNSVRfUkVDRUlWRSAgICAgICAgKDApDQorI2RlZmluZSBEV19TUElfVE1PRF9UUkFOU01JVF9PTkxZICAgICAgICgweDEwMCkNCisjZGVmaW5lIERXX1NQSV9UTU9EX1JFQ0VJVkVfT05MWSAgICAgICAgKDB4MjAwKQ0KKyNkZWZpbmUgRFdfU1BJX1RNT0RfRUVQUk9NX1JFQURfT05MWSAgICAgICAgKDB4MzAwKQ0KKw0KKyNkZWZpbmUgRFdfU1BJX0NUUkxSMF9GUkZfTU9UT1JPTEEgICAgICAoMHgwKQ0KKyNkZWZpbmUgRFdfU1BJX0NUUkxSMF9GUkZfVEkgICAgICAgICAgICAoMHgxMCkNCisjZGVmaW5lIERXX1NQSV9DVFJMUjBfRlJGX01JQ1JPV0lSRSAgICAgKDB4MjApDQorDQorI2RlZmluZSBEV19TUElfQ1RSTFIwX1NMVl9PRV9ESVNBQkxFICAgICAgICAoMTw8MTApDQorI2RlZmluZSBEV19TUElfQ1RSTFIwX1NMVl9PRV9FTkFCTEUgICAgICgwKQ0KKw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgU1BJIEhBTCBJU1IgRmxhZ3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFNQSSBoYWwgSW50ZXJydXB0IFN0YXR1cyBGbGFncw0KKyAqIEB7DQorICovDQorI2RlZmluZSBEV19TUElfVFhfT1ZFUkZMT1dfRVJST1IgICAgICAgICgweDIpDQorI2RlZmluZSBEV19TUElfUlhfVU5ERVJGTE9XX0VSUk9SICAgICAgICgweDQpDQorI2RlZmluZSBEV19TUElfUlhfT1ZFUkZMT1dfRVJST1IgICAgICAgICgweDgpDQorDQorI2RlZmluZSBEV19TUElfSVNSX1JYX0ZJRk9fSU5UX01BU0sgICAgICgweDEwKQ0KKyNkZWZpbmUgRFdfU1BJX0lTUl9UWF9GSUZPX0lOVF9NQVNLICAgICAoMHgxKQ0KKyNkZWZpbmUgRFdfU1BJX0lTUl9UWF9PVkVSRkxPV19JTlRfTUFTSyAgICAgKDB4MikNCisjZGVmaW5lIERXX1NQSV9JU1JfUlhfVU5ERVJGTE9XX0lOVF9NQVNLICAgICgweDQpDQorI2RlZmluZSBEV19TUElfSVNSX1JYX09WRVJGTE9XX0lOVF9NQVNLICAgICAoMHg4KQ0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgU1BJIEhBTCBTUiBGbGFncw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGhhbCBTdGF0dXMgRmxhZ3MNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgRFdfU1BJX1NSX0RDT0wgICAgICAgICAgICAgICgweDQwKQ0KKyNkZWZpbmUgRFdfU1BJX1NSX1RYRSAgICAgICAgICAgICAgICgweDIwKQ0KKyNkZWZpbmUgRFdfU1BJX1NSX1JGRiAgICAgICAgICAgICAgICgweDEwKQ0KKyNkZWZpbmUgRFdfU1BJX1NSX1JGTkUgICAgICAgICAgICAgICgweDgpDQorI2RlZmluZSBEV19TUElfU1JfVEZFICAgICAgICAgICAgICAgKDB4NCkNCisjZGVmaW5lIERXX1NQSV9TUl9URk5GICAgICAgICAgICAgICAoMHgyKQ0KKyNkZWZpbmUgRFdfU1BJX1NSX0JVU1kgICAgICAgICAgICAgICgweDEpDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBTUEkgSEFMIFNTSSBFbmFibGUgTWFjcm9zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBTUEkgaGFsIHNzaSBlbmFibGUgbWFjcm9zDQorICogQHsNCisgKi8NCisvKiBNYWNyb3MgKi8NCisjZGVmaW5lIERXX1NQSV9TU0lfRU5BQkxFICAgICAgICAgICAoMSkgLyohPCBTU0kgRW5hYmxlICovDQorI2RlZmluZSBEV19TUElfU1NJX0RJU0FCTEUgICAgICAgICAgKDApIC8qITwgU1NJIERpc2FibGUgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFNQSSBIQUwgSU1SIE1hY3Jvcw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGhhbCBpbnRlcnJ1cHQgbWFzayBtYWNyb3MNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgRFdfU1BJX0lNUl9NU1RJTSAgICAgICAgICAgICgweDIwKSAgLyohPCBNdWx0aS1NYXN0ZXIgQ29udGVudGlvbiBJbnRlcnJ1cHQgTWFzayAqLw0KKyNkZWZpbmUgRFdfU1BJX0lNUl9SWEZJTSAgICAgICAgICAgICgweDEwKSAgLyohPCBSZWNlaXZlIEZJRk8gRnVsbCBJbnRlcnJ1cHQgTWFzayAqLw0KKyNkZWZpbmUgRFdfU1BJX0lNUl9SWE9JTSAgICAgICAgICAgICgweDA4KSAgLyohPCBSZWNlaXZlIEZJRk8gT3ZlcmZsb3cgSW50ZXJydXB0IE1hc2sgKi8NCisjZGVmaW5lIERXX1NQSV9JTVJfUlhVSU0gICAgICAgICAgICAoMHgwNCkgIC8qITwgUmVjZWl2ZSBGSUZPIFVuZGVyZmxvdyBJbnRlcnJ1cHQgTWFzayAqLw0KKyNkZWZpbmUgRFdfU1BJX0lNUl9UWE9JTSAgICAgICAgICAgICgweDAyKSAgLyohPCBUcmFuc21pdCBGSUZPIE92ZXJmbG93IEludGVycnVwdCBNYXNrICovDQorI2RlZmluZSBEV19TUElfSU1SX1RYRUlNICAgICAgICAgICAgKDB4MDEpICAvKiE8IFRyYW5zbWl0IEZJRk8gRW1wdHkgSW50ZXJydXB0IE1hc2sgKi8NCisNCisjZGVmaW5lIERXX1NQSV9JTVJfWEZFUiAgICAgICAgICAgICAoRFdfU1BJX0lNUl9UWEVJTXxEV19TUElfSU1SX1JYRklNfERXX1NQSV9JTVJfVFhPSU18RFdfU1BJX0lNUl9SWE9JTXxEV19TUElfSU1SX1JYVUlNKQ0KKy8qKiBAfSAqLw0KKw0KKyNkZWZpbmUgRFdfU1BJX1NTSV9JRExFICAgICAgICAgICAgICgxKQ0KKyNkZWZpbmUgRFdfU1BJX1NQSV9UUkFOU01JVCAgICAgICAgICgxKQ0KKyNkZWZpbmUgRFdfU1BJX1NQSV9SRUNFSVZFICAgICAgICAgICgyKQ0KKyNkZWZpbmUgRFdfU1BJX1NTSV9NQVNURVIgICAgICAgICAgICgxKQ0KKyNkZWZpbmUgRFdfU1BJX1NTSV9TTEFWRSAgICAgICAgICAgICgwKQ0KKw0KKw0KKyNlbmRpZiAvKiBfREVWSUNFX0RXX1NQSV9IQUxfSF8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaV9oYWxfY2ZnLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaV9oYWxfY2ZnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyYzEwYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpX2hhbF9jZmcuaApAQCAtMCwwICsxLDU4IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE1LTA5LTA5DQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgREVWSUNFX0RXX1NQSQ0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGRyaXZlciBoYXJkd2FyZSBkZXNjcmlwdGlvbg0KKyAqICByZWxhdGVkIGhlYWRlciBmaWxlIGNvbmZpZ3VyYXRpb24gZmlsZQ0KKyAqIFxkZXRhaWxzIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBlbmFibGUgb3IgZGlzYWJsZSBzb21lIGZ1bmN0aW9uIG9mIHNwaQ0KKyAqLw0KKw0KKyNpZm5kZWYgX0RFVklDRV9EV19TUElfSEFMX0NGR19IXw0KKyNkZWZpbmUgX0RFVklDRV9EV19TUElfSEFMX0NGR19IXw0KKw0KKyNpZm5kZWYgRFdfU1BJX0NBTENfRklGT19MRU5fRU5BQkxFDQorI2RlZmluZSBEV19TUElfQ0FMQ19GSUZPX0xFTl9FTkFCTEUgICAgICgxKSAvKiE8IERlZmF1bHRseSBlbmFibGUgY2FsY3VsYXRlIGZpZm8gbGVuZ3RoICovDQorI2VuZGlmDQorDQorI2lmbmRlZiBEV19TUElfTUFYX0ZJRk9fTEVOR1RIDQorI2RlZmluZSBEV19TUElfTUFYX0ZJRk9fTEVOR1RIICAgICAgICAgICgyNTYpICAgLyohPCBNYXggRklGTyBkZXB0aCBmb3IgZGVzaWdud2FyZSBTUEkgZGV2aWNlICovDQorI2VuZGlmDQorDQorI2lmbmRlZiBEV19TUElfTUlOX0ZJRk9fTEVOR1RIDQorI2RlZmluZSBEV19TUElfTUlOX0ZJRk9fTEVOR1RIICAgICAgICAgICgyKSAvKiE8IE1pbiBGSUZPIGRlcHRoIGZvciBkZXNpZ253YXJlIFNQSSBkZXZpY2UgKi8NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0RFVklDRV9EV19TUElfSEFMX0NGR19IXyAqLw0KKw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS91YXJ0L2R3X3VhcnQuYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS91YXJ0L2R3X3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTgzZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydC5jCkBAIC0wLDAgKzEsMTExOSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNi0yMA0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0RXX1VBUlQgIERlc2lnbndhcmUgVUFSVCBEcml2ZXINCisgKiBcaW5ncm91cCBERVZJQ0VfRFcNCisgKiBcYnJpZWYgICBEZXNpZ253YXJlIFVBUlQgRHJpdmVyIEltcGxlbWVudGF0aW9uDQorICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBERVZJQ0VfRFdfVUFSVA0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBkcml2ZXIgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gZGV2aWNlIGhhbCBsYXllciBkZWZpbml0aW9uIChccmVmIGRldl91YXJ0LmgpDQorICovDQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKw0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX3Rvb2xjaGFpbi5oIg0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX2Vycm9yLmgiDQorDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2V4Y2VwdGlvbi5oIg0KKw0KKyNpbmNsdWRlICJkZXZpY2UvZGVzaWdud2FyZS91YXJ0L2R3X3VhcnRfaGFsLmgiDQorI2luY2x1ZGUgImRldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydC5oIg0KKw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBEcml2ZXIgTWFjcm9zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGRyaXZlciBtYWNyb3MgdXNlZCBpbiB1YXJ0IGRyaXZlcg0KKyAqIEB7DQorICovDQorLyoqIGNoZWNrIGV4cHJlc3Npb25zIHVzZWQgaW4gRGVzaWduV2FyZSBVQVJUIGRyaXZlciBpbXBsZW1lbnRhdGlvbiAqLw0KKyNkZWZpbmUgRFdfVUFSVF9DSEVDS19FWFAoRVhQUiwgRVJST1JfQ09ERSkgICAgIENIRUNLX0VYUChFWFBSLCBlcmNkLCBFUlJPUl9DT0RFLCBlcnJvcl9leGl0KQ0KKw0KKyNpZm5kZWYgRElTQUJMRV9ERVZJQ0VfT0JKRUNUX1ZBTElEX0NIRUNLDQorLyoqIHZhbGlkIGNoZWNrIG9mIHVhcnQgaW5mbyBvYmplY3QgKi8NCisjZGVmaW5lIFZBTElEX0NIS19VQVJUX0lORk9fT0JKRUNUKHVhcnRpbmZvX29ial9wdHIpICAgICAgICB7ICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgIERXX1VBUlRfQ0hFQ0tfRVhQKCh1YXJ0aW5mb19vYmpfcHRyKSE9TlVMTCwgRV9PQkopOyAgICAgICAgIFwNCisgICAgICAgICAgICBEV19VQVJUX0NIRUNLX0VYUCgoKHVhcnRpbmZvX29ial9wdHIpLT51YXJ0X2N0cmwpIT1OVUxMLCBFX09CSik7ICAgIFwNCisgICAgICAgIH0NCisjZW5kaWYNCisNCisvKiogY29udmVydCBEZXNpZ25XYXJlIGJhdWRyYXRlIHRvIGRpdmlzb3IgKi8NCisjZGVmaW5lIERXX1VBUlRfQkFVRDJESVYocGVyaWZyZXEsIGJhdWQpICAgICAgICAoKHBlcmlmcmVxKSAvICgoYmF1ZCkqMTYpKQ0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBJbnRlcnJ1cHQgQ2FsbGJhY2sgUm91dGluZSBTZWxlY3QgTWFyY29zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGludGVycnVwdCBjYWxsYmFjayByb3V0aW5lcyBzZWxlY3QgbWFjcm9zIGRlZmluaXRpb25zDQorICogQHsNCisgKi8NCisjZGVmaW5lIERXX1VBUlRfUkRZX1NORCAgICAgICAgICAgICAgICAgKDFVKSAgICAvKiE8IHJlYWR5IHRvIHNlbmQgY2FsbGJhY2sgKi8NCisjZGVmaW5lIERXX1VBUlRfUkRZX1JDViAgICAgICAgICAgICAgICAgKDJVKSAgICAvKiE8IHJlYWR5IHRvIHJlY2VpdmUgY2FsbGJhY2sgKi8NCisvKiogQH0gKi8NCisNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0RXX1VBUlRfU1RBVElDICAgRGVzaWduV2FyZSBVQVJUIERyaXZlciBTdGF0aWMgRnVuY3Rpb25zDQorICogXGluZ3JvdXAgREVWSUNFX0RXX1VBUlQNCisgKiBcYnJpZWYgICBTdGF0aWMgb3IgaW5saW5lIGZ1bmN0aW9ucywgdmFyaWFibGVzIGZvciBEZXNpZ25XYXJlIFVBUlQgaGFuZGxlIHVhcnQgb3BlcmF0aW9ucywNCisgKiAgb25seSB1c2VkIGluIHRoaXMgZmlsZQ0KKyAqIEB7DQorICovDQorY29uc3QgdWludDhfdCBkd191YXJ0X2RhdGFiaXRzW10gPSB7IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdfVUFSVF9MQ1JfV09SRF9MRU41LCBEV19VQVJUX0xDUl9XT1JEX0xFTjYsIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdfVUFSVF9MQ1JfV09SRF9MRU43LCBEV19VQVJUX0xDUl9XT1JEX0xFTjgNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07DQorY29uc3QgdWludDhfdCBkd191YXJ0X3Bhcml0eVtdID0NCit7DQorICAgIERXX1VBUlRfTENSX1BBUklUWV9OT05FLCBEV19VQVJUX0xDUl9QQVJJVFlfT0RELA0KKyAgICBEV19VQVJUX0xDUl9QQVJJVFlfRVZFTiwgRFdfVUFSVF9MQ1JfUEFSSVRZX01BU0ssDQorICAgIERXX1VBUlRfTENSX1BBUklUWV9TUEFDRQ0KK307DQorY29uc3QgdWludDhfdCBkd191YXJ0X3N0b3BiaXRzW10gPQ0KK3sNCisgICAgRFdfVUFSVF9MQ1JfMV9TVE9QX0JJVCwgRFdfVUFSVF9MQ1JfMUQ1X1NUT1BfQklULA0KKyAgICBEV19VQVJUX0xDUl8yX1NUT1BfQklUDQorfTsNCisNCisvKiogdGVzdCB3aGV0aGVyIHVhcnQgaXMgcmVhZHkgdG8gc2VuZCwgMSByZWFkeSwgMCBub3QgcmVhZHkgKi8NCitJbmxpbmUgaW50MzJfdCBkd191YXJ0X3B1dHJlYWR5KERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIpDQorew0KKyAgICByZXR1cm4gKCh1YXJ0X3JlZ19wdHItPlVTUiAmIERXX1VBUlRfVVNSX1RGTkYpICE9IDApOw0KK30NCisvKiogdGVzdCB3aGV0aGVyIHVhcnQgaXMgcmVhZHkgdG8gcmVjZWl2ZSwgMSByZWFkeSwgMCBub3QgcmVhZHkgKi8NCitJbmxpbmUgaW50MzJfdCBkd191YXJ0X2dldHJlYWR5KERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIpDQorew0KKyAgICByZXR1cm4gKCh1YXJ0X3JlZ19wdHItPlVTUiAmIERXX1VBUlRfVVNSX1JGTkUpICE9IDApOw0KK30NCisvKiogd3JpdGUgY2hhciB0byB1YXJ0IHNlbmQgZmlmbyAqLw0KK0lubGluZSB2b2lkIGR3X3VhcnRfcHV0Y2hhcihEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyLCBjaGFyIGNocikNCit7DQorICAgIHVhcnRfcmVnX3B0ci0+REFUQSA9IGNocjsNCit9DQorLyoqIHJlYWQgZGF0YSBmcm9tIHVhcnQgcmVjZWl2ZSBmaWZvLCByZXR1cm4gZGF0YSByZWNlaXZlZCAqLw0KK0lubGluZSBpbnQzMl90IGR3X3VhcnRfZ2V0Y2hhcihEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyKQ0KK3sNCisgICAgcmV0dXJuIChpbnQzMl90KXVhcnRfcmVnX3B0ci0+REFUQTsNCit9DQorLyoqDQorICogXGJyaWVmICAgc2VuZCBjaGFyIGJ5IHVhcnQgd2hlbiBhdmFpbGFibGUsDQorICogIG1vc3RseSB1c2VkIGluIGludGVycnVwdCBtZXRob2QsIG5vbi1ibG9ja2VkIGZ1bmN0aW9uDQorICogXHBhcmFtW2luXSAgIHVhcnRfcmVnX3B0ciAgICB1YXJ0IHJlZ2lzdGVyIHN0cnVjdHVyZSBwb2ludGVyDQorICogXHBhcmFtW2luXSAgIGNociAgICAgY2hhciB0byBiZSBzZW50DQorICogXHJldHZhbCAgMCAgICAgICBzZW5kIHN1Y2Nlc3NmdWxseQ0KKyAqIFxyZXR2YWwgIC0xICAgICAgbm90IHJlYWR5IHRvIHNlbmQgZGF0YQ0KKyAqLw0KK0lubGluZSBpbnQzMl90IGR3X3VhcnRfc25kX2NocihEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyLCBjaGFyIGNocikNCit7DQorICAgIGlmIChkd191YXJ0X3B1dHJlYWR5KHVhcnRfcmVnX3B0cikpDQorICAgIHsNCisgICAgICAgIGR3X3VhcnRfcHV0Y2hhcih1YXJ0X3JlZ19wdHIsIGNocik7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gLTE7DQorfQ0KKy8qKg0KKyAqIFxicmllZiAgIHJlY2VpdmUgb25lIGNoYXIgZnJvbSB1YXJ0LA0KKyAqICBtb3N0bHkgdXNlZCBpbiBpbnRlcnJ1cHQgcm91dGluZSwgbm9uLWJsb2NrZWQgZnVuY3Rpb24NCisgKiBccGFyYW1baW5dICAgdWFydF9yZWdfcHRyICAgIHVhcnQgcmVnaXN0ZXIgc3RydWN0dXJlIHBvaW50ZXINCisgKiBccmV0dXJuICBkYXRhIHJlY2VpdmVkIGJ5IHRoZSB1YXJ0DQorICovDQorSW5saW5lIGludDMyX3QgZHdfdWFydF9yY3ZfY2hyKERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIpDQorew0KKyAgICByZXR1cm4gZHdfdWFydF9nZXRjaGFyKHVhcnRfcmVnX3B0cik7DQorfQ0KKy8qKg0KKyAqIFxicmllZiAgIHNlbmQgY2hhciBieSB1YXJ0IGluIHBvbGwgbWV0aG9kLCBibG9ja2VkIGZ1bmN0aW9uDQorICogXHBhcmFtW2luXSAgIHVhcnRfcmVnX3B0ciAgICB1YXJ0IHJlZ2lzdGVyIHN0cnVjdHVyZSBwb2ludGVyDQorICogXHBhcmFtW2luXSAgIGNociAgICAgY2hhciB0byBiZSBzZW50DQorICovDQorSW5saW5lIHZvaWQgZHdfdWFydF9wc25kX2NocihEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyLCBjaGFyIGNocikNCit7DQorICAgIC8qKiB3YWl0IHVudGlsIHVhcnQgaXMgcmVhZHkgdG8gc2VuZCAqLw0KKyAgICB3aGlsZSAoIWR3X3VhcnRfcHV0cmVhZHkodWFydF9yZWdfcHRyKSk7IC8qIGJsb2NrZWQgKi8NCisNCisgICAgLyoqIHNlbmQgY2hhciAqLw0KKyAgICBkd191YXJ0X3B1dGNoYXIodWFydF9yZWdfcHRyLCBjaHIpOw0KK30NCisvKioNCisgKiBcYnJpZWYgICByZWNlaXZlIG9uZSBjaGFyIGZyb20gdWFydCBpbiBwb2xsIG1ldGhvZCwgYmxvY2tlZCBmdW5jdGlvbg0KKyAqIFxwYXJhbVtpbl0gICB1YXJ0X3JlZ19wdHIgICAgdWFydCByZWdpc3RlciBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqIFxyZXR1cm4gIGRhdGEgcmVjZWl2ZWQgYnkgdGhlIHVhcnQNCisgKi8NCitJbmxpbmUgaW50MzJfdCBkd191YXJ0X3ByY3ZfY2hyKERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIpDQorew0KKyAgICAvKiogd2FpdCB1bnRpbCB1YXJ0IGlzIHJlYWR5IHRvIHJlY2VpdmUgKi8NCisgICAgd2hpbGUgKCFkd191YXJ0X2dldHJlYWR5KHVhcnRfcmVnX3B0cikpOyAvKiBibG9ja2VkICovDQorDQorICAgIC8qKiByZWNlaXZlIGRhdGEgKi8NCisgICAgcmV0dXJuIGR3X3VhcnRfZ2V0Y2hhcih1YXJ0X3JlZ19wdHIpOw0KK30NCisNCisvKiogR2V0IFRYIEZJRk8gTGVuZ3RoICovDQorSW5saW5lIHVpbnQzMl90IGR3X3VhcnRfZ2V0X3R4Zmlmb19sZW4oRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0cikNCit7DQorICAgIHVpbnQzMl90IHR4Zmlmb2xlbjsNCisgICAgdWludDMyX3QgdWFydF9jcHI7DQorDQorICAgIHVhcnRfY3ByID0gdWFydF9yZWdfcHRyLT5DUFI7DQorDQorICAgIGlmICh1YXJ0X2NwciAmIERXX1VBUlRfQ1BSX0ZJRk9fU1RBVCkNCisgICAgew0KKyAgICAgICAgdHhmaWZvbGVuID0gKCh1YXJ0X2NwciAmIERXX1VBUlRfQ1BSX0ZJRk9fTU9ERSkgPj4gRFdfVUFSVF9DUFJfRklGT19NT0RFX09GUykgPDwgNDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHR4Zmlmb2xlbiA9IDA7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHR4Zmlmb2xlbjsNCit9DQorDQorLyoqIEdldCBSWCBGSUZPIExlbmd0aCAqLw0KK0lubGluZSB1aW50MzJfdCBkd191YXJ0X2dldF9yeGZpZm9fbGVuKERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIpDQorew0KKyAgICB1aW50MzJfdCByeGZpZm9sZW47DQorICAgIHVpbnQzMl90IHVhcnRfY3ByOw0KKw0KKyAgICB1YXJ0X2NwciA9IHVhcnRfcmVnX3B0ci0+Q1BSOw0KKw0KKyAgICBpZiAodWFydF9jcHIgJiBEV19VQVJUX0NQUl9GSUZPX1NUQVQpDQorICAgIHsNCisgICAgICAgIHJ4Zmlmb2xlbiA9ICgodWFydF9jcHIgJiBEV19VQVJUX0NQUl9GSUZPX01PREUpID4+IERXX1VBUlRfQ1BSX0ZJRk9fTU9ERV9PRlMpIDw8IDQ7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByeGZpZm9sZW4gPSAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiByeGZpZm9sZW47DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHNldCBkZXNpZ253YXJlIHVhcnQgRFBTIHZhbHVlDQorICogXHBhcmFtICAgdWFydF9yZWdfcHRyICAgIHVhcnQgcmVnaXN0ZXIgc3RydWN0dXJlDQorICogXHBhcmFtICAgZHBzICAgICBkYXRhIGJpdHMvcGFyaXR5IGJpdC9zdG9wIGJpdHMgcGFyYW1ldGVyDQorICogXHJldHZhbCAgMCAgIFNldCBvaw0KKyAqIFxyZXR2YWwgICEwICBTZXQgZmFpbGVkDQorICovDQorc3RhdGljIGludDMyX3QgZHdfdWFydF9zZXRfZHBzKERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIsIFVBUlRfRFBTX0ZPUk1BVCAqZHBzKQ0KK3sNCisgICAgdWludDMyX3QgZHBzX3ZhbHVlID0gMDsNCisNCisgICAgaWYgKGRwcyA9PSBOVUxMKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICAvKiBkYXRhIGJpdHMgY2hlY2sgKi8NCisgICAgaWYgKChkcHMtPmRhdGFiaXRzIDwgNSkgfHwgKGRwcy0+ZGF0YWJpdHMgPiA4KSkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgLyogc3RvcCBiaXRzIGNoZWNrICovDQorICAgIGlmIChkcHMtPnN0b3BiaXRzID4gVUFSVF9TVFBCSVRTX1RXTykgeyByZXR1cm4gLTE7IH0NCisNCisgICAgLyogcGFyaXR5IGJpdCB0eXBlIGNoZWNrICovDQorICAgIGlmIChkcHMtPnBhcml0eSA+IFVBUlRfUEFSSVRZX1NQQUNFKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICBkcHNfdmFsdWUgfD0gKHVpbnQzMl90KWR3X3VhcnRfZGF0YWJpdHNbZHBzLT5kYXRhYml0cyAtIDVdOw0KKyAgICBkcHNfdmFsdWUgfD0gKHVpbnQzMl90KWR3X3VhcnRfc3RvcGJpdHNbZHBzLT5zdG9wYml0c107DQorICAgIGRwc192YWx1ZSB8PSAodWludDMyX3QpZHdfdWFydF9wYXJpdHlbZHBzLT5wYXJpdHldOw0KKw0KKyAgICAvKiBjbGVhciBkcHMgYml0cyAqLw0KKyAgICB1YXJ0X3JlZ19wdHItPkxDUiAmPSAofkRXX1VBUlRfTENSX0RQU19NQVNLKTsNCisgICAgLyogc2V0IGRwcyBiaXRzICovDQorICAgIHVhcnRfcmVnX3B0ci0+TENSIHw9IGRwc192YWx1ZTsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHNldCBkZXNpZ253YXJlIHVhcnQgYmF1ZHJhdGUNCisgKiBccGFyYW0gICB1YXJ0X3JlZ19wdHIgICAgdWFydCByZWdpc3RlciBzdHJ1Y3R1cmUNCisgKiBccGFyYW0gICBiYXVkX2Rpdmlzb3IgICAgdWFydCBiYXVkcmF0ZSBkaXZpc29yDQorICovDQorc3RhdGljIHZvaWQgZHdfdWFydF9zZXRfYmF1ZChEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyLCB1aW50MzJfdCBiYXVkX2Rpdmlzb3IpDQorew0KKyAgICAvKiBlbmFibGUgdWFydCBiYXVkcmF0ZSB1cGRhdGUgKi8NCisgICAgdWFydF9yZWdfcHRyLT5MQ1IgfD0gRFdfVUFSVF9MQ1JfRExBQjsNCisgICAgLyoqDQorICAgICAqIHNldHRpbmcgdWFydCBiYXVkcmF0ZSByZWdpc3RlcnMNCisgICAgICovDQorICAgIHVhcnRfcmVnX3B0ci0+REFUQSA9IGJhdWRfZGl2aXNvciAmIDB4ZmY7ICAgLyohPCBETEwgKi8NCisgICAgdWFydF9yZWdfcHRyLT5JRVIgPSAoYmF1ZF9kaXZpc29yID4+IDgpICYgMHhmZjsgLyohPCBETEggKi8NCisgICAgLyoqIGRpc2FibGUgRExBQiAqLw0KKyAgICB1YXJ0X3JlZ19wdHItPkxDUiAmPSB+KERXX1VBUlRfTENSX0RMQUIpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBEbyB1YXJ0IHNvZnR3YXJlIHJlc2V0DQorICogXHBhcmFtICAgdWFydF9yZWdfcHRyICAgIHVhcnQgcmVnaXN0ZXIgc3RydWN0dXJlDQorICovDQorSW5saW5lIHZvaWQgZHdfdWFydF9zb2Z0d2FyZV9yZXNldChEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyKQ0KK3sNCisgICAgdWFydF9yZWdfcHRyLT5TUlIgPSBEV19VQVJUX1NSUl9VUiB8IERXX1VBUlRfU1JSX1JGUiB8IERXX1VBUlRfU1JSX1hGUjsNCisNCisgICAgd2hpbGUgKHVhcnRfcmVnX3B0ci0+VVNSICYgRFdfVUFSVF9VU1JfQlVTWSk7IC8qIHdhaXQgdW50aWwgc29mdHdhcmUgcmVzZXQgY29tcGxldGVkICovDQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHNldCBkZXNpZ253YXJlIHVhcnQgYmF1ZHJhdGUNCisgKiBccGFyYW0gICB1YXJ0X3JlZ19wdHIgICAgdWFydCByZWdpc3RlciBzdHJ1Y3R1cmUNCisgKiBccGFyYW0gICBod2ZjICAgICAgICB1YXJ0IGhhcmR3YXJlIGZsb3cgY29udHJvbCB0eXBlDQorICogXG5vdGUgICAgTmVlZCB0byBzZXQgY29ycmVzcG9uZGluZyBwaW4gZnVuY3Rpb25zDQorICovDQorc3RhdGljIHZvaWQgZHdfdWFydF9zZXRfaHdmYyhEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyLCBVQVJUX0hXX0ZMT1dfQ09OVFJPTCBod2ZjKQ0KK3sNCisgICAgaWYgKGh3ZmMgPT0gVUFSVF9GQ19OT05FKQ0KKyAgICB7DQorICAgICAgICB1YXJ0X3JlZ19wdHItPk1DUiAmPSB+KERXX1VBUlRfTUNSX0FGQ0UgfCBEV19VQVJUX01DUl9SVFMpOw0KKyAgICB9DQorDQorICAgIGlmICgoaHdmYyA9PSBVQVJUX0ZDX1JUUykgfHwgKGh3ZmMgPT0gVUFSVF9GQ19CT1RIKSkNCisgICAgew0KKyAgICAgICAgdWFydF9yZWdfcHRyLT5NQ1IgfD0gKERXX1VBUlRfTUNSX0FGQ0UgfCBEV19VQVJUX01DUl9SVFMpOw0KKyAgICB9DQorDQorICAgIGlmICgoaHdmYyA9PSBVQVJUX0ZDX0NUUykgfHwgKGh3ZmMgPT0gVUFSVF9GQ19CT1RIKSkNCisgICAgew0KKyAgICAgICAgdWFydF9yZWdfcHRyLT5NQ1IgfD0gKERXX1VBUlRfTUNSX0FGQ0UpOw0KKyAgICB9DQorfQ0KKw0KK0lubGluZSB2b2lkIGR3X3VhcnRfc2V0X2JyZWFrKERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIpDQorew0KKyAgICB1YXJ0X3JlZ19wdHItPkxDUiB8PSBEV19VQVJUX0xDUl9CUkVBSzsNCit9DQorDQorSW5saW5lIHZvaWQgZHdfdWFydF9jbHJfYnJlYWsoRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0cikNCit7DQorICAgIHVhcnRfcmVnX3B0ci0+TENSICY9IH5EV19VQVJUX0xDUl9CUkVBSzsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgaW5pdCBkZXNpZ253YXJlIHVhcnQgd2l0aCBzZWxlY3RlZCBiYXVkDQorICogXHBhcmFtW2luXSAgIHVhcnRfcmVnX3B0ciAgICB1YXJ0IHJlZ2lzdGVyIHN0cnVjdHVyZSBwb2ludGVyDQorICogXHBhcmFtW2luXSAgIGJhdWRfZGl2aXNvciAgICBiYXVkcmF0ZSBkaXZpc29yDQorICovDQorc3RhdGljIHZvaWQgZHdfdWFydF9pbml0KERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIsIHVpbnQzMl90IGJhdWRfZGl2aXNvciwgVUFSVF9EUFNfRk9STUFUICpkcHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgIFVBUlRfSFdfRkxPV19DT05UUk9MIGh3ZmMpDQorew0KKyAgICBkd191YXJ0X3NvZnR3YXJlX3Jlc2V0KHVhcnRfcmVnX3B0cik7DQorDQorICAgIGR3X3VhcnRfc2V0X2h3ZmModWFydF9yZWdfcHRyLCBod2ZjKTsNCisgICAgZHdfdWFydF9zZXRfZHBzKHVhcnRfcmVnX3B0ciwgZHBzKTsNCisgICAgZHdfdWFydF9zZXRfYmF1ZCh1YXJ0X3JlZ19wdHIsIGJhdWRfZGl2aXNvcik7DQorDQorICAgIHVhcnRfcmVnX3B0ci0+SUlSID0gMHgxOyAgICAvKiogZW5hYmxlIHVhcnQgZmlmbyAoRkNSIElJUiBpcyB0aGUgc2FtZSkgKi8NCisgICAgdWFydF9yZWdfcHRyLT5JRVIgPSAweDA7ICAgIC8qKiBkaXNhYmxlIGFsbCB1YXJ0IGludGVycnVwdCAqLw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBzZXQgZGVzaWdud2FyZSB1YXJ0IGJhdWRyYXRlDQorICogXHBhcmFtICAgdWFydF9pbmZvX3B0ciAgIHVhcnQgaW5mb3JtYXRpb24gc3RydWN0dXJlIHBvaW50ZXINCisgKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0X2ZsdXNoX291dHB1dChERVZfVUFSVF9JTkZPICp1YXJ0X2luZm9fcHRyKQ0KK3sNCisgICAgdWludDMyX3QgaTsNCisgICAgY2hhciAqcF9jaGFyYnVmOw0KKw0KKyAgICBEV19VQVJUX0NUUkwgKnVhcnRfY3RybF9wdHIgPSAoRFdfVUFSVF9DVFJMX1BUUikodWFydF9pbmZvX3B0ci0+dWFydF9jdHJsKTsNCisgICAgRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0ciA9IChEV19VQVJUX1JFR19QVFIpKHVhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSk7DQorDQorICAgIGlmICh1YXJ0X2luZm9fcHRyLT50eF9idWYuYnVmICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIHBfY2hhcmJ1ZiA9IChjaGFyICopKHVhcnRfaW5mb19wdHItPnR4X2J1Zi5idWYpOw0KKw0KKyAgICAgICAgZm9yIChpID0gdWFydF9pbmZvX3B0ci0+dHhfYnVmLm9mczsgaSA8IHVhcnRfaW5mb19wdHItPnR4X2J1Zi5sZW47IGkgKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZHdfdWFydF9wc25kX2Nocih1YXJ0X3JlZ19wdHIsIHBfY2hhcmJ1ZltpXSk7DQorICAgICAgICB9DQorDQorICAgICAgICAvKiBjbGVhciB0cmFuc21pdCBidWZmZXIgKi8NCisgICAgICAgIHVhcnRfaW5mb19wdHItPnR4X2J1Zi5idWYgPSBOVUxMOw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+dHhfYnVmLmxlbiA9IDA7DQorICAgICAgICB1YXJ0X2luZm9fcHRyLT50eF9idWYub2ZzID0gMDsNCisgICAgfQ0KKw0KKyAgICAvKiB3YWl0IHVudGlsIHRyYW5zbWl0IGZpZm8gaXMgZW1wdHkgKi8NCisgICAgd2hpbGUgKCh1YXJ0X3JlZ19wdHItPlVTUiAmIERXX1VBUlRfVVNSX1RGRSkgPT0gMCk7DQorDQorICAgIHdoaWxlICh1YXJ0X3JlZ19wdHItPlVTUiAmIERXX1VBUlRfVVNSX0JVU1kpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBkaXNhYmxlIGRlc2lnbndhcmUgdWFydCBzZW5kIG9yIHJlY2VpdmUgaW50ZXJydXB0DQorICogXHBhcmFtW2luXSAgIERFVl9VQVJUX0lORk8gICAqdWFydF9pbmZvX3B0cg0KKyAqIFxwYXJhbVtpbl0gICBjYnJ0biAgICAgICBjb250cm9sIGNvZGUgb2YgY2FsbGJhY2sgcm91dGluZSBvZiBzZW5kIG9yIHJlY2VpdmUNCisgKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0X2Rpc19jYnIoREVWX1VBUlRfSU5GTyAqdWFydF9pbmZvX3B0ciwgdWludDMyX3QgY2JydG4pDQorew0KKyAgICBEV19VQVJUX0NUUkwgKnVhcnRfY3RybF9wdHIgPSAoRFdfVUFSVF9DVFJMX1BUUikodWFydF9pbmZvX3B0ci0+dWFydF9jdHJsKTsNCisgICAgRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0ciA9IChEV19VQVJUX1JFR19QVFIpKHVhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSk7DQorDQorICAgIHN3aXRjaCAoY2JydG4pDQorICAgIHsNCisgICAgY2FzZSBEV19VQVJUX1JEWV9TTkQ6DQorICAgICAgICB1YXJ0X3JlZ19wdHItPklFUiAmPSB+RFdfVUFSVF9JRVJfWE1JVF9FTVBUWTsNCisgICAgICAgIHVhcnRfY3RybF9wdHItPmludF9zdGF0dXMgJj0gfkRXX1VBUlRfVFhJTlRfRU5BQkxFOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgRFdfVUFSVF9SRFlfUkNWOg0KKyAgICAgICAgdWFydF9yZWdfcHRyLT5JRVIgJj0gfkRXX1VBUlRfSUVSX0RBVEFfQVZBSUw7DQorICAgICAgICB1YXJ0X2N0cmxfcHRyLT5pbnRfc3RhdHVzICY9IH5EV19VQVJUX1JYSU5UX0VOQUJMRTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgaWYgKHVhcnRfY3RybF9wdHItPmludF9zdGF0dXMgJiBEV19VQVJUX0dJTlRfRU5BQkxFKQ0KKyAgICB7DQorICAgICAgICBpZiAoKHVhcnRfY3RybF9wdHItPmludF9zdGF0dXMgJiAoRFdfVUFSVF9SWElOVF9FTkFCTEUgfCBEV19VQVJUX1RYSU5UX0VOQUJMRSkpID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50X2Rpc2FibGUodWFydF9jdHJsX3B0ci0+aW50bm8pOw0KKyAgICAgICAgICAgIHVhcnRfY3RybF9wdHItPmludF9zdGF0dXMgJj0gfkRXX1VBUlRfR0lOVF9FTkFCTEU7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorLyoqDQorICogXGJyaWVmICAgZW5hYmxlIERlc2lnbldhcmUgVUFSVCBzZW5kIG9yIHJlY2VpdmUgaW50ZXJydXB0DQorICogXHBhcmFtW2luXSAgIERFVl9VQVJUX0lORk8gICAqdWFydF9pbmZvX3B0cg0KKyAqIFxwYXJhbVtpbl0gICBjYnJ0biAgICAgICBjb250cm9sIGNvZGUgb2YgY2FsbGJhY2sgcm91dGluZSBvZiBzZW5kIG9yIHJlY2VpdmUNCisgKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0X2VuYV9jYnIoREVWX1VBUlRfSU5GTyAqdWFydF9pbmZvX3B0ciwgdWludDMyX3QgY2JydG4pDQorew0KKyAgICBEV19VQVJUX0NUUkwgKnVhcnRfY3RybF9wdHIgPSAoRFdfVUFSVF9DVFJMX1BUUikodWFydF9pbmZvX3B0ci0+dWFydF9jdHJsKTsNCisgICAgRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0ciA9IChEV19VQVJUX1JFR19QVFIpKHVhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSk7DQorDQorICAgIHN3aXRjaCAoY2JydG4pDQorICAgIHsNCisgICAgY2FzZSBEV19VQVJUX1JEWV9TTkQ6DQorICAgICAgICB1YXJ0X2N0cmxfcHRyLT5pbnRfc3RhdHVzIHw9IERXX1VBUlRfVFhJTlRfRU5BQkxFOw0KKyAgICAgICAgdWFydF9yZWdfcHRyLT5JRVIgfD0gRFdfVUFSVF9JRVJfWE1JVF9FTVBUWTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIERXX1VBUlRfUkRZX1JDVjoNCisgICAgICAgIHVhcnRfY3RybF9wdHItPmludF9zdGF0dXMgfD0gRFdfVUFSVF9SWElOVF9FTkFCTEU7DQorICAgICAgICB1YXJ0X3JlZ19wdHItPklFUiB8PSBEV19VQVJUX0lFUl9EQVRBX0FWQUlMOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKw0KKyAgICBpZiAoKHVhcnRfY3RybF9wdHItPmludF9zdGF0dXMgJiBEV19VQVJUX0dJTlRfRU5BQkxFKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBpZiAodWFydF9jdHJsX3B0ci0+aW50X3N0YXR1cyAmIChEV19VQVJUX1JYSU5UX0VOQUJMRSB8IERXX1VBUlRfVFhJTlRfRU5BQkxFKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICB1YXJ0X2N0cmxfcHRyLT5pbnRfc3RhdHVzIHw9IERXX1VBUlRfR0lOVF9FTkFCTEU7DQorICAgICAgICAgICAgaW50X2VuYWJsZSh1YXJ0X2N0cmxfcHRyLT5pbnRubyk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorLyoqDQorICogXGJyaWVmICAgZW5hYmxlIGRlc2lnbndhcmUgdWFydCBpbnRlcnJ1cHQNCisgKiBccGFyYW0gICB1YXJ0X2luZm9fcHRyICAgdWFydCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqLw0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfZW5hYmxlX2ludGVycnVwdChERVZfVUFSVF9JTkZPICp1YXJ0X2luZm9fcHRyKQ0KK3sNCisgICAgRFdfVUFSVF9DVFJMICp1YXJ0X2N0cmxfcHRyID0gKERXX1VBUlRfQ1RSTF9QVFIpKHVhcnRfaW5mb19wdHItPnVhcnRfY3RybCk7DQorDQorICAgIGludF9oYW5kbGVyX2luc3RhbGwodWFydF9jdHJsX3B0ci0+aW50bm8sIHVhcnRfY3RybF9wdHItPmR3X3VhcnRfaW50X2hhbmRsZXIpOw0KKyAgICB1YXJ0X2N0cmxfcHRyLT5pbnRfc3RhdHVzIHw9IERXX1VBUlRfR0lOVF9FTkFCTEU7DQorICAgIGludF9lbmFibGUodWFydF9jdHJsX3B0ci0+aW50bm8pOyAgIC8qKiBlbmFibGUgdWFydCBpbnRlcnJ1cHQgKi8NCit9DQorLyoqDQorICogXGJyaWVmICAgZGlzYWJsZSBkZXNpZ253YXJlIHVhcnQgaW50ZXJydXB0DQorICogXHBhcmFtICAgdWFydF9pbmZvX3B0ciAgIHVhcnQgaW5mb3JtYXRpb24gc3RydWN0dXJlIHBvaW50ZXINCisgKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0X2Rpc2FibGVfaW50ZXJydXB0KERFVl9VQVJUX0lORk8gKnVhcnRfaW5mb19wdHIpDQorew0KKyAgICBEV19VQVJUX0NUUkwgKnVhcnRfY3RybF9wdHIgPSAoRFdfVUFSVF9DVFJMX1BUUikodWFydF9pbmZvX3B0ci0+dWFydF9jdHJsKTsNCisNCisgICAgLyoqIGRpc2FibGUgdWFydCBzZW5kJnJlY2VpdmUgaW50ZXJydXB0IGFmdGVyIGRpc2FibGUgdWFydCBpbnRlcnJ1cHQgKi8NCisgICAgZHdfdWFydF9kaXNfY2JyKHVhcnRfaW5mb19wdHIsIERXX1VBUlRfUkRZX1NORCk7DQorICAgIGR3X3VhcnRfZGlzX2Nicih1YXJ0X2luZm9fcHRyLCBEV19VQVJUX1JEWV9SQ1YpOw0KKyAgICAvKiBkaXNhYmxlIHVhcnQgaW50ZXJydXB0ICovDQorICAgIGludF9kaXNhYmxlKHVhcnRfY3RybF9wdHItPmludG5vKTsNCisgICAgdWFydF9jdHJsX3B0ci0+aW50X3N0YXR1cyAmPSB+KERXX1VBUlRfR0lOVF9FTkFCTEUgfCBEV19VQVJUX1RYSU5UX0VOQUJMRSB8IERXX1VBUlRfUlhJTlRfRU5BQkxFKTsNCit9DQorDQorLyoqIGVuYWJsZSBkZXNpZ253YXJlIHVhcnQgKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0X2VuYWJsZV9kZXZpY2UoREVWX1VBUlRfSU5GTyAqdWFydF9pbmZvX3B0cikNCit7DQorICAgIERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0ciA9IChEV19VQVJUX0NUUkxfUFRSKSh1YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwpOw0KKyAgICBEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyID0gKERXX1VBUlRfUkVHX1BUUikodWFydF9jdHJsX3B0ci0+ZHdfdWFydF9yZWdiYXNlKTsNCisNCisgICAgaWYgKCh1YXJ0X2luZm9fcHRyLT5zdGF0dXMgJiBERVZfRU5BQkxFRCkgPT0gMCkNCisgICAgew0KKyAgICAgICAgZHdfdWFydF9zZXRfYmF1ZCh1YXJ0X3JlZ19wdHIsIHVhcnRfaW5mb19wdHItPmJhdWRyYXRlKTsNCisgICAgICAgIHVhcnRfaW5mb19wdHItPnN0YXR1cyB8PSBERVZfRU5BQkxFRDsNCisgICAgfQ0KK30NCisNCisvKiogZGlzYWJsZSBkZXNpZ253YXJlIHVhcnQgKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0X2Rpc2FibGVfZGV2aWNlKERFVl9VQVJUX0lORk8gKnVhcnRfaW5mb19wdHIpDQorew0KKyAgICBEV19VQVJUX0NUUkwgKnVhcnRfY3RybF9wdHIgPSAoRFdfVUFSVF9DVFJMX1BUUikodWFydF9pbmZvX3B0ci0+dWFydF9jdHJsKTsNCisgICAgRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0ciA9IChEV19VQVJUX1JFR19QVFIpKHVhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSk7DQorDQorICAgIGlmICgodWFydF9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0VOQUJMRUQpID09IERFVl9FTkFCTEVEKQ0KKyAgICB7DQorICAgICAgICBkd191YXJ0X3NldF9iYXVkKHVhcnRfcmVnX3B0ciwgMCk7DQorICAgICAgICB1YXJ0X2luZm9fcHRyLT5zdGF0dXMgJj0gfkRFVl9FTkFCTEVEOw0KKyAgICB9DQorfQ0KKw0KKy8qKiBhYm9ydCBjdXJyZW50IGludGVycnVwdCB0cmFuc21pdCB0cmFuc2ZlciAqLw0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfYWJvcnRfdHgoREVWX1VBUlQgKnVhcnRfb2JqKQ0KK3sNCisgICAgREVWX1VBUlRfSU5GTyAqdWFydF9pbmZvX3B0ciA9ICYodWFydF9vYmotPnVhcnRfaW5mbyk7DQorICAgIERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0ciA9IChEV19VQVJUX0NUUkxfUFRSKSh1YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwpOw0KKw0KKyAgICBpZiAodWFydF9jdHJsX3B0ci0+aW50X3N0YXR1cyAmIERXX1VBUlRfVFhJTlRfRU5BQkxFKQ0KKyAgICB7DQorICAgICAgICBkd191YXJ0X2Rpc19jYnIodWFydF9pbmZvX3B0ciwgRFdfVUFSVF9SRFlfU05EKTsNCisgICAgICAgIHVhcnRfaW5mb19wdHItPnN0YXR1cyB8PSBERVZfSU5fVFhfQUJSVDsNCisNCisgICAgICAgIGlmICh1YXJ0X2luZm9fcHRyLT51YXJ0X2Nicy50eF9jYiAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLnR4X2NiKHVhcnRfb2JqKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHVhcnRfaW5mb19wdHItPnN0YXR1cyAmPSB+KERFVl9JTl9UWF9BQlJUKTsNCisgICAgfQ0KK30NCisNCisvKiogYWJvcnQgY3VycmVudCBpbnRlcnJ1cHQgcmVjZWl2ZSB0cmFuc2ZlciAqLw0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfYWJvcnRfcngoREVWX1VBUlQgKnVhcnRfb2JqKQ0KK3sNCisgICAgREVWX1VBUlRfSU5GTyAqdWFydF9pbmZvX3B0ciA9ICYodWFydF9vYmotPnVhcnRfaW5mbyk7DQorICAgIERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0ciA9IChEV19VQVJUX0NUUkxfUFRSKSh1YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwpOw0KKw0KKyAgICBpZiAodWFydF9jdHJsX3B0ci0+aW50X3N0YXR1cyAmIERXX1VBUlRfUlhJTlRfRU5BQkxFKQ0KKyAgICB7DQorICAgICAgICBkd191YXJ0X2Rpc19jYnIodWFydF9pbmZvX3B0ciwgRFdfVUFSVF9SRFlfUkNWKTsNCisgICAgICAgIHVhcnRfaW5mb19wdHItPnN0YXR1cyB8PSBERVZfSU5fUlhfQUJSVDsNCisNCisgICAgICAgIGlmICh1YXJ0X2luZm9fcHRyLT51YXJ0X2Nicy5yeF9jYiAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLnJ4X2NiKHVhcnRfb2JqKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHVhcnRfaW5mb19wdHItPnN0YXR1cyAmPSB+KERFVl9JTl9SWF9BQlJUKTsNCisgICAgfQ0KK30NCisNCisvKiogR2V0IGF2YWlsYWJsZSB0cmFuc21pdCBmaWZvIGNvdW50ICovDQorc3RhdGljIGludDMyX3QgZHdfdWFydF9nZXRfdHhhdmFpbChEV19VQVJUX0NUUkwgKnVhcnRfY3RybF9wdHIpDQorew0KKyAgICBpbnQzMl90IHR4X2F2YWlsID0gMDsNCisgICAgRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0ciA9IChEV19VQVJUX1JFRyAqKSh1YXJ0X2N0cmxfcHRyLT5kd191YXJ0X3JlZ2Jhc2UpOw0KKw0KKyAgICBpZiAodWFydF9jdHJsX3B0ci0+dHhfZmlmb19sZW4gPD0gMSkNCisgICAgew0KKyAgICAgICAgaWYgKGR3X3VhcnRfcHV0cmVhZHkodWFydF9yZWdfcHRyKSA9PSAxKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHR4X2F2YWlsID0gMTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICB0eF9hdmFpbCA9IDA7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICB0eF9hdmFpbCA9IHVhcnRfY3RybF9wdHItPnR4X2ZpZm9fbGVuIC0gdWFydF9yZWdfcHRyLT5URkw7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHR4X2F2YWlsOw0KK30NCisNCisvKiogR2V0IGF2YWlsYWJsZSByZWNlaXZlIGZpZm8gY291bnQgKi8NCitzdGF0aWMgaW50MzJfdCBkd191YXJ0X2dldF9yeGF2YWlsKERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0cikNCit7DQorICAgIGludDMyX3QgcnhfYXZhaWwgPSAwOw0KKyAgICBEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyID0gKERXX1VBUlRfUkVHICopKHVhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSk7DQorDQorICAgIGlmICh1YXJ0X2N0cmxfcHRyLT5yeF9maWZvX2xlbiA8PSAxKQ0KKyAgICB7DQorICAgICAgICBpZiAoZHdfdWFydF9nZXRyZWFkeSh1YXJ0X3JlZ19wdHIpID09IDEpDQorICAgICAgICB7DQorICAgICAgICAgICAgcnhfYXZhaWwgPSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJ4X2F2YWlsID0gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJ4X2F2YWlsID0gdWFydF9yZWdfcHRyLT5SRkw7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHJ4X2F2YWlsOw0KK30NCisNCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIERFVklDRV9EV19VQVJUX1NUQVRJQyAqLw0KKw0KKy8qKg0KKyAqIFxicmllZiAgIG9wZW4gYSBkZXNpZ253YXJlIHVhcnQgZGV2aWNlDQorICogXHBhcmFtW2luXSAgIHVhcnRfb2JqICAgIHVhcnQgb2JqZWN0IHN0cnVjdHVyZSBwb2ludGVyDQorICogXHBhcmFtW2luXSAgIGJhdWQgICAgICAgIGJhdWRyYXRlIHRvIGluaXRpYWxpemVkDQorICogXHJldHZhbCAgRV9PSyAgICBPcGVuIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGFueSBpc3N1ZXMNCisgKiBccmV0dmFsICBFX09QTkVEIElmIGRldmljZSB3YXMgb3BlbmVkIGJlZm9yZSB3aXRoIGRpZmZlcmVudCBiYXVkcmF0ZSwgdGhlbiByZXR1cm4gRV9PUE5FRA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQNCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQNCisgKiBccmV0dmFsICBFX05PU1BUIE9wZW4gc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQNCisgKi8NCitpbnQzMl90IGR3X3VhcnRfb3BlbihERVZfVUFSVCAqdWFydF9vYmosIHVpbnQzMl90IGJhdWQpDQorew0KKyAgICBpbnQzMl90IGVyY2QgPSBFX09LOw0KKyAgICBERVZfVUFSVF9JTkZPICp1YXJ0X2luZm9fcHRyID0gJih1YXJ0X29iai0+dWFydF9pbmZvKTsNCisNCisgICAgLyogU1RBUlQgRVJST1IgQ0hFQ0sgKi8NCisgICAgVkFMSURfQ0hLX1VBUlRfSU5GT19PQkpFQ1QodWFydF9pbmZvX3B0cik7DQorICAgIERXX1VBUlRfQ0hFQ0tfRVhQKGJhdWQgPiAwLCBFX1BBUik7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICB1YXJ0X2luZm9fcHRyLT5vcG5fY250ICsrOw0KKw0KKyAgICBpZiAodWFydF9pbmZvX3B0ci0+b3BuX2NudCA+IDEpICAgLyogb3BlbmVkIGJlZm9yZSAqLw0KKyAgICB7DQorICAgICAgICBpZiAoYmF1ZCA9PSB1YXJ0X2luZm9fcHRyLT5iYXVkcmF0ZSkgICAvKiBiYXVkcmF0ZSBpcyB0aGUgc2FtZSAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBFX09LOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSAgICAgLyogb3BlbiB3aXRoIGRpZmZlcmVudCBiYXVkcmF0ZSAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBFX09QTkVEOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGludDMyX3QgYmF1ZF9kaXZpc29yID0gMDsNCisNCisgICAgRFdfVUFSVF9DVFJMICp1YXJ0X2N0cmxfcHRyID0gKERXX1VBUlRfQ1RSTF9QVFIpKHVhcnRfaW5mb19wdHItPnVhcnRfY3RybCk7DQorICAgIERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIgPSAoRFdfVUFSVF9SRUdfUFRSKSh1YXJ0X2N0cmxfcHRyLT5kd191YXJ0X3JlZ2Jhc2UpOw0KKw0KKyAgICAvKiBHZXQgRklGTyBMZW5ndGggKi8NCisgICAgdWFydF9jdHJsX3B0ci0+dHhfZmlmb19sZW4gPSBkd191YXJ0X2dldF90eGZpZm9fbGVuKHVhcnRfcmVnX3B0cik7DQorICAgIHVhcnRfY3RybF9wdHItPnJ4X2ZpZm9fbGVuID0gZHdfdWFydF9nZXRfcnhmaWZvX2xlbih1YXJ0X3JlZ19wdHIpOw0KKw0KKyAgICAvKiogaW5pdCB1YXJ0ICovDQorICAgIHVhcnRfaW5mb19wdHItPmJhdWRyYXRlID0gYmF1ZDsNCisgICAgYmF1ZF9kaXZpc29yID0gRFdfVUFSVF9CQVVEMkRJVih1YXJ0X2N0cmxfcHRyLT5kd19hcGJfYnVzX2ZyZXEsIGJhdWQpOw0KKyAgICB1YXJ0X2luZm9fcHRyLT5kcHNfZm9ybWF0ID0gZHBzX2Zvcm1hdF9kZWZhdWx0Ow0KKyAgICB1YXJ0X2luZm9fcHRyLT5od2ZjID0gaHdmY19kZWZhdWx0Ow0KKyAgICBkd191YXJ0X2luaXQodWFydF9yZWdfcHRyLCBiYXVkX2Rpdmlzb3IsICYodWFydF9pbmZvX3B0ci0+ZHBzX2Zvcm1hdCksIHVhcnRfaW5mb19wdHItPmh3ZmMpOw0KKw0KKyAgICB1YXJ0X2luZm9fcHRyLT5zdGF0dXMgPSBERVZfRU5BQkxFRDsNCisgICAgdWFydF9pbmZvX3B0ci0+ZXh0cmEgPSBOVUxMOw0KKw0KKyAgICAvKioNCisgICAgICogdWFydCBpbnRlcnJ1cHQgcmVsYXRlZCBpbml0DQorICAgICAqLw0KKyAgICBkd191YXJ0X2Rpc2FibGVfaW50ZXJydXB0KHVhcnRfaW5mb19wdHIpOw0KKyAgICAvKiogaW5zdGFsbCB1YXJ0IGludGVycnVwdCBpbnRvIHN5c3RlbSAqLw0KKyAgICBpbnRfaGFuZGxlcl9pbnN0YWxsKHVhcnRfY3RybF9wdHItPmludG5vLCB1YXJ0X2N0cmxfcHRyLT5kd191YXJ0X2ludF9oYW5kbGVyKTsNCisNCisgICAgbWVtc2V0KCYodWFydF9pbmZvX3B0ci0+dHhfYnVmKSwgMCwgc2l6ZW9mKERFVl9CVUZGRVIpKTsNCisgICAgbWVtc2V0KCYodWFydF9pbmZvX3B0ci0+cnhfYnVmKSwgMCwgc2l6ZW9mKERFVl9CVUZGRVIpKTsNCisgICAgbWVtc2V0KCYodWFydF9pbmZvX3B0ci0+dWFydF9jYnMpLCAwLCBzaXplb2YoREVWX1VBUlRfQ0JTKSk7DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGNsb3NlIGEgRGVzaWduV2FyZSBVQVJUIGRldmljZQ0KKyAqIFxwYXJhbVtpbl0gICB1YXJ0X29iaiAgICB1YXJ0IG9iamVjdCBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqIFxyZXR2YWwgIEVfT0sgICAgT3BlbiBzdWNjZXNzZnVsbHkgd2l0aG91dCBhbnkgaXNzdWVzDQorICogXHJldHZhbCAgRV9PUE5FRCBEZXZpY2UgaXMgc3RpbGwgb3BlbmVkLCB0aGUgZGV2aWNlIG9wbl9jbnQgZGVjcmVhc2VkIGJ5IDENCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkDQorICovDQoraW50MzJfdCBkd191YXJ0X2Nsb3NlKERFVl9VQVJUICp1YXJ0X29iaikNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9VQVJUX0lORk8gKnVhcnRfaW5mb19wdHIgPSAmKHVhcnRfb2JqLT51YXJ0X2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfVUFSVF9JTkZPX09CSkVDVCh1YXJ0X2luZm9fcHRyKTsNCisgICAgRFdfVUFSVF9DSEVDS19FWFAodWFydF9pbmZvX3B0ci0+b3BuX2NudCA+IDAsIEVfT0spOw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgdWFydF9pbmZvX3B0ci0+b3BuX2NudCAtLTsNCisNCisgICAgaWYgKHVhcnRfaW5mb19wdHItPm9wbl9jbnQgPT0gMCkNCisgICAgew0KKyAgICAgICAgZHdfdWFydF9kaXNhYmxlX2ludGVycnVwdCh1YXJ0X2luZm9fcHRyKTsNCisgICAgICAgIGR3X3VhcnRfYWJvcnRfdHgodWFydF9vYmopOw0KKyAgICAgICAgZHdfdWFydF9hYm9ydF9yeCh1YXJ0X29iaik7DQorICAgICAgICBkd191YXJ0X2ZsdXNoX291dHB1dCh1YXJ0X2luZm9fcHRyKTsNCisgICAgICAgIG1lbXNldCgmKHVhcnRfaW5mb19wdHItPnR4X2J1ZiksIDAsIHNpemVvZihERVZfQlVGRkVSKSk7DQorICAgICAgICBtZW1zZXQoJih1YXJ0X2luZm9fcHRyLT5yeF9idWYpLCAwLCBzaXplb2YoREVWX0JVRkZFUikpOw0KKyAgICAgICAgbWVtc2V0KCYodWFydF9pbmZvX3B0ci0+dWFydF9jYnMpLCAwLCBzaXplb2YoREVWX1VBUlRfQ0JTKSk7DQorICAgICAgICBkd191YXJ0X2Rpc2FibGVfZGV2aWNlKHVhcnRfaW5mb19wdHIpOw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+c3RhdHVzID0gMDsNCisgICAgICAgIHVhcnRfaW5mb19wdHItPmV4dHJhID0gTlVMTDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGVyY2QgPSBFX09QTkVEOw0KKyAgICB9DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGNvbnRyb2wgdWFydCBieSBjdHJsIGNvbW1hbmQNCisgKiBccGFyYW1baW5dICAgdWFydF9vYmogICAgdWFydCBvYmplY3Qgc3RydWN0dXJlIHBvaW50ZXINCisgKiBccGFyYW1baW5dICAgY3RybF9jbWQgICAgY29udHJvbCBjb21tYW5kIGNvZGUgdG8gZG8gc3BlY2lmaWMgdWFydCB3b3JrDQorICogXHBhcmFtW2luLG91dF0gICBwYXJhbSAgIHBhcmFtZXRlcnMgdXNlZCB0byBjb250cm9sIHVhcnQgb3IgcmV0dXJuIHNvbWV0aGluZw0KKyAqIFxyZXR2YWwgIEVfT0sgICAgQ29udHJvbCBkZXZpY2Ugc3VjY2Vzc2Z1bGx5DQorICogXHJldHZhbCAgRV9DTFNFRCBEZXZpY2UgaXMgbm90IG9wZW5lZA0KKyAqIFxyZXR2YWwgIEVfRElTICAgRGV2aWNlIGlzIGRpc2FibGVkDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZCBvciBub3QgZXhpc3RzDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkIGZvciBjdXJyZW50IGNvbnRyb2wgY29tbWFuZA0KKyAqIFxyZXR2YWwgIEVfU1lTICAgQ29udHJvbCBkZXZpY2UgZmFpbGVkLCBkdWUgdG8gaGFyZHdhcmUgaXNzdWVzDQorICogXHJldHZhbCAgRV9DVFggICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBkaWZmZXJlbnQgcmVhc29ucyBsaWtlIGluIHRyYW5zZmVyIHN0YXRlDQorICogXHJldHZhbCAgRV9OT1NQVCBDb250cm9sIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCBvciBub3QgdmFsaWQNCisgKi8NCitpbnQzMl90IGR3X3VhcnRfY29udHJvbChERVZfVUFSVCAqdWFydF9vYmosIHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSkNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9VQVJUX0lORk8gKnVhcnRfaW5mb19wdHIgPSAmKHVhcnRfb2JqLT51YXJ0X2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfVUFSVF9JTkZPX09CSkVDVCh1YXJ0X2luZm9fcHRyKTsNCisgICAgRFdfVUFSVF9DSEVDS19FWFAodWFydF9pbmZvX3B0ci0+b3BuX2NudCA+IDAsIEVfQ0xTRUQpOw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgdWludDMyX3QgdmFsMzI7IC8qKiB0byByZWNlaXZlIHVuc2lnbmVkIGludCB2YWx1ZSAqLw0KKyAgICBpbnQzMl90IGJhdWRfZGl2aXNvciA9IDA7DQorICAgIERFVl9CVUZGRVIgKmRldmJ1ZjsNCisgICAgVUFSVF9EUFNfRk9STUFUICpkcHNfcHRyOw0KKyAgICBVQVJUX0hXX0ZMT1dfQ09OVFJPTCBod2ZjX2xvY2FsOw0KKw0KKyAgICBEV19VQVJUX0NUUkwgKnVhcnRfY3RybF9wdHIgPSAoRFdfVUFSVF9DVFJMX1BUUikodWFydF9pbmZvX3B0ci0+dWFydF9jdHJsKTsNCisgICAgRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0ciA9IChEV19VQVJUX1JFR19QVFIpKHVhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSk7DQorDQorICAgIC8qIGNoZWNrIHdoZXRoZXIgY3VycmVudCBkZXZpY2UgaXMgZGlzYWJsZWQgKi8NCisgICAgaWYgKCh1YXJ0X2luZm9fcHRyLT5zdGF0dXMgJiBERVZfRU5BQkxFRCkgPT0gMCkNCisgICAgew0KKyAgICAgICAgLyoqIFdoZW4gZGV2aWNlIGlzIGRpc2FibGVkLA0KKyAgICAgICAgICogb25seSBVQVJUX0NNRF9FTkFfREVWLCBVQVJUX0NNRF9ESVNfREVWLCBVQVJUX0NNRF9HRVRfU1RBVFVTDQorICAgICAgICAgKiBhcmUgYXZhaWxhYmxlLCBvdGhlciBjb21tYW5kcyB3aWxsIHJldHVybiBFX1NZUw0KKyAgICAgICAgICovDQorICAgICAgICBpZiAoKGN0cmxfY21kICE9IFVBUlRfQ01EX0VOQV9ERVYpICYmIFwNCisgICAgICAgICAgICAoY3RybF9jbWQgIT0gVUFSVF9DTURfRElTX0RFVikgJiYgXA0KKyAgICAgICAgICAgIChjdHJsX2NtZCAhPSBVQVJUX0NNRF9HRVRfU1RBVFVTKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gRV9TWVM7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgc3dpdGNoIChjdHJsX2NtZCkNCisgICAgew0KKyAgICBjYXNlIFVBUlRfQ01EX1NFVF9CQVVEOg0KKyAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorICAgICAgICBEV19VQVJUX0NIRUNLX0VYUCh2YWwzMiA+IDAsIEVfUEFSKTsNCisNCisgICAgICAgIGlmICh2YWwzMiAhPSB1YXJ0X2luZm9fcHRyLT5iYXVkcmF0ZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBiYXVkX2Rpdmlzb3IgPSBEV19VQVJUX0JBVUQyRElWKHVhcnRfY3RybF9wdHItPmR3X2FwYl9idXNfZnJlcSwgdmFsMzIpOw0KKyAgICAgICAgICAgIGR3X3VhcnRfc2V0X2JhdWQodWFydF9yZWdfcHRyLCBiYXVkX2Rpdmlzb3IpOw0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPmJhdWRyYXRlID0gdmFsMzI7DQorICAgICAgICB9DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9HRVRfU1RBVFVTOg0KKyAgICAgICAgRFdfVUFSVF9DSEVDS19FWFAoKHBhcmFtICE9IE5VTEwpICYmIENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgICooKGludDMyX3QgKilwYXJhbSkgPSB1YXJ0X2luZm9fcHRyLT5zdGF0dXM7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9FTkFfREVWOg0KKyAgICAgICAgZHdfdWFydF9lbmFibGVfZGV2aWNlKHVhcnRfaW5mb19wdHIpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVUFSVF9DTURfRElTX0RFVjoNCisgICAgICAgIGR3X3VhcnRfZGlzYWJsZV9kZXZpY2UodWFydF9pbmZvX3B0cik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9GTFVTSF9PVVRQVVQ6DQorICAgICAgICBkd191YXJ0X2ZsdXNoX291dHB1dCh1YXJ0X2luZm9fcHRyKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX0dFVF9SWEFWQUlMOg0KKyAgICAgICAgRFdfVUFSVF9DSEVDS19FWFAoKHBhcmFtICE9IE5VTEwpICYmIENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgICooKGludDMyX3QgKilwYXJhbSkgPSBkd191YXJ0X2dldF9yeGF2YWlsKHVhcnRfY3RybF9wdHIpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVUFSVF9DTURfR0VUX1RYQVZBSUw6DQorICAgICAgICBEV19VQVJUX0NIRUNLX0VYUCgocGFyYW0gIT0gTlVMTCkgJiYgQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgKigoaW50MzJfdCAqKXBhcmFtKSA9IGR3X3VhcnRfZ2V0X3R4YXZhaWwodWFydF9jdHJsX3B0cik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9CUkVBS19TRVQ6DQorICAgICAgICBkd191YXJ0X3NldF9icmVhayh1YXJ0X3JlZ19wdHIpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVUFSVF9DTURfQlJFQUtfQ0xSOg0KKyAgICAgICAgZHdfdWFydF9jbHJfYnJlYWsodWFydF9yZWdfcHRyKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX1NFVF9EUFNfRk9STUFUOg0KKyAgICAgICAgRFdfVUFSVF9DSEVDS19FWFAocGFyYW0gIT0gTlVMTCwgRV9QQVIpOw0KKyAgICAgICAgZHBzX3B0ciA9IChVQVJUX0RQU19GT1JNQVQgKilwYXJhbTsNCisNCisgICAgICAgIGlmIChkd191YXJ0X3NldF9kcHModWFydF9yZWdfcHRyLCBkcHNfcHRyKSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPmRwc19mb3JtYXQgPSAqZHBzX3B0cjsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBlcmNkID0gRV9QQVI7DQorICAgICAgICB9DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9TRVRfSFdGQzoNCisgICAgICAgIGh3ZmNfbG9jYWwgPSAoVUFSVF9IV19GTE9XX0NPTlRST0wpcGFyYW07DQorICAgICAgICBEV19VQVJUX0NIRUNLX0VYUCgoKGh3ZmNfbG9jYWwgPj0gVUFSVF9GQ19OT05FKSAmJiAoaHdmY19sb2NhbCA8PSBVQVJUX0ZDX0JPVEgpKSwgRV9QQVIpOw0KKyAgICAgICAgZHdfdWFydF9zZXRfaHdmYyh1YXJ0X3JlZ19wdHIsIGh3ZmNfbG9jYWwpOw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+aHdmYyA9IGh3ZmNfbG9jYWw7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9TRVRfVFhDQjoNCisgICAgICAgIERXX1VBUlRfQ0hFQ0tfRVhQKENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgIHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLnR4X2NiID0gcGFyYW07DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9TRVRfUlhDQjoNCisgICAgICAgIERXX1VBUlRfQ0hFQ0tfRVhQKENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgIHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLnJ4X2NiID0gcGFyYW07DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9TRVRfRVJSQ0I6DQorICAgICAgICBEV19VQVJUX0NIRUNLX0VYUChDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICB1YXJ0X2luZm9fcHRyLT51YXJ0X2Nicy5lcnJfY2IgPSBwYXJhbTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX0FCT1JUX1RYOg0KKyAgICAgICAgZHdfdWFydF9hYm9ydF90eCh1YXJ0X29iaik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9BQk9SVF9SWDoNCisgICAgICAgIGR3X3VhcnRfYWJvcnRfcngodWFydF9vYmopOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVUFSVF9DTURfU0VUX1RYSU5UOg0KKyAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorDQorICAgICAgICBpZiAodmFsMzIgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBkd191YXJ0X2Rpc19jYnIodWFydF9pbmZvX3B0ciwgRFdfVUFSVF9SRFlfU05EKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBkd191YXJ0X2VuYV9jYnIodWFydF9pbmZvX3B0ciwgRFdfVUFSVF9SRFlfU05EKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX1NFVF9SWElOVDoNCisgICAgICAgIHZhbDMyID0gKHVpbnQzMl90KXBhcmFtOw0KKw0KKyAgICAgICAgaWYgKHZhbDMyID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgZHdfdWFydF9kaXNfY2JyKHVhcnRfaW5mb19wdHIsIERXX1VBUlRfUkRZX1JDVik7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgZHdfdWFydF9lbmFfY2JyKHVhcnRfaW5mb19wdHIsIERXX1VBUlRfUkRZX1JDVik7DQorICAgICAgICB9DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9TRVRfVFhJTlRfQlVGOg0KKyAgICAgICAgRFdfVUFSVF9DSEVDS19FWFAoQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKw0KKyAgICAgICAgaWYgKHBhcmFtICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgZGV2YnVmID0gKERFVl9CVUZGRVIgKilwYXJhbTsNCisgICAgICAgICAgICB1YXJ0X2luZm9fcHRyLT50eF9idWYgPSAqZGV2YnVmOw0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnR4X2J1Zi5vZnMgPSAwOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnR4X2J1Zi5idWYgPSBOVUxMOw0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnR4X2J1Zi5sZW4gPSAwOw0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnR4X2J1Zi5vZnMgPSAwOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVUFSVF9DTURfU0VUX1JYSU5UX0JVRjoNCisgICAgICAgIERXX1VBUlRfQ0hFQ0tfRVhQKENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisNCisgICAgICAgIGlmIChwYXJhbSAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRldmJ1ZiA9IChERVZfQlVGRkVSICopcGFyYW07DQorICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+cnhfYnVmID0gKmRldmJ1ZjsNCisgICAgICAgICAgICB1YXJ0X2luZm9fcHRyLT5yeF9idWYub2ZzID0gMDsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICB1YXJ0X2luZm9fcHRyLT5yeF9idWYuYnVmID0gTlVMTDsNCisgICAgICAgICAgICB1YXJ0X2luZm9fcHRyLT5yeF9idWYubGVuID0gMDsNCisgICAgICAgICAgICB1YXJ0X2luZm9fcHRyLT5yeF9idWYub2ZzID0gMDsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgZXJjZCA9IEVfTk9TUFQ7DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBzZW5kIGRhdGEgdGhyb3VnaCBEZXNpZ25XYXJlIFVBUlQNCisgKiBccGFyYW1baW5dICAgdWFydF9vYmogICAgdWFydCBvYmplY3Qgc3RydWN0dXJlIHBvaW50ZXINCisgKiBccGFyYW1baW5dICAgZGF0YSAgICAgICAgZGF0YSB0aGF0IG5lZWQgdG8gc2VuZCAoZGF0YSBtdXN0IGJlIGNoYXIgdHlwZSkNCisgKiBccGFyYW1baW5dICAgbGVuICAgICBkYXRhIGxlbmd0aCBuZWVkIHRvIHNlbmQNCisgKiBccmV0dmFsICA+MCAgQnl0ZSBjb3VudCB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgc2VudCBmb3IgcG9sbCBtZXRob2QNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkIG9yIG5vdCBleGlzdHMNCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQgZm9yIGN1cnJlbnQgY29udHJvbCBjb21tYW5kDQorICogXHJldHZhbCAgRV9TWVMgICBDYW4ndCB3cml0ZSBkYXRhIHRvIGhhcmR3YXJlIGR1ZSB0byBoYXJkd2FyZSBpc3N1ZXMNCisgKi8NCitpbnQzMl90IGR3X3VhcnRfd3JpdGUoREVWX1VBUlQgKnVhcnRfb2JqLCBjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pDQorew0KKyAgICBpbnQzMl90IGVyY2QgPSBFX09LOw0KKyAgICBERVZfVUFSVF9JTkZPICp1YXJ0X2luZm9fcHRyID0gJih1YXJ0X29iai0+dWFydF9pbmZvKTsNCisNCisgICAgLyogU1RBUlQgRVJST1IgQ0hFQ0sgKi8NCisgICAgVkFMSURfQ0hLX1VBUlRfSU5GT19PQkpFQ1QodWFydF9pbmZvX3B0cik7DQorICAgIERXX1VBUlRfQ0hFQ0tfRVhQKHVhcnRfaW5mb19wdHItPm9wbl9jbnQgPiAwLCBFX0NMU0VEKTsNCisgICAgRFdfVUFSVF9DSEVDS19FWFAodWFydF9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0VOQUJMRUQsIEVfU1lTKTsNCisgICAgRFdfVUFSVF9DSEVDS19FWFAoZGF0YSAhPSBOVUxMLCBFX1BBUik7DQorICAgIERXX1VBUlRfQ0hFQ0tfRVhQKGxlbiA+IDAsIEVfUEFSKTsNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIGludDMyX3QgaSA9IDA7DQorICAgIGNvbnN0IGNoYXIgKnBfY2hhcmJ1ZiA9IChjb25zdCBjaGFyICopZGF0YTsNCisNCisgICAgRFdfVUFSVF9DVFJMICp1YXJ0X2N0cmxfcHRyID0gKERXX1VBUlRfQ1RSTF9QVFIpKHVhcnRfaW5mb19wdHItPnVhcnRfY3RybCk7DQorICAgIERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIgPSAoRFdfVUFSVF9SRUdfUFRSKSh1YXJ0X2N0cmxfcHRyLT5kd191YXJ0X3JlZ2Jhc2UpOw0KKw0KKyAgICB3aGlsZSAoaSA8IGxlbikNCisgICAgew0KKyAgICAgICAgZHdfdWFydF9wc25kX2Nocih1YXJ0X3JlZ19wdHIsIHBfY2hhcmJ1ZltpKytdKTsNCisgICAgfQ0KKw0KKyAgICBlcmNkID0gaTsNCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgcmVhZCBkYXRhIHRocm91Z2ggRGVzaWduV2FyZSBVQVJUDQorICogXHBhcmFtW2luXSAgIHVhcnRfb2JqICAgIHVhcnQgb2JqZWN0IHN0cnVjdHVyZSBwb2ludGVyDQorICogXHBhcmFtW291dF0gIGRhdGEgICAgICAgIGRhdGEgdGhhdCBuZWVkIHRvIHJlYWQgKGRhdGEgbXVzdCBiZSBjaGFyIHR5cGUpDQorICogXHBhcmFtW2luXSAgIGxlbiAgICAgZGF0YSBjb3VudCBuZWVkIHRvIHJlYWQNCisgKiBccmV0dmFsICA+MCAgQnl0ZSBjb3VudCB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgc2VudCBmb3IgcG9sbCBtZXRob2QNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkIG9yIG5vdCBleGlzdHMNCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQgZm9yIGN1cnJlbnQgY29udHJvbCBjb21tYW5kDQorICogXHJldHZhbCAgRV9TWVMgICBDYW4ndCByZWNlaXZlIGRhdGEgZnJvbSBoYXJkd2FyZSBkdWUgdG8gaGFyZHdhcmUgaXNzdWVzLCBzdWNoIGFzIGRldmljZSBpcyBkaXNhYmxlZA0KKyAqLw0KK2ludDMyX3QgZHdfdWFydF9yZWFkKERFVl9VQVJUICp1YXJ0X29iaiwgdm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgREVWX1VBUlRfSU5GTyAqdWFydF9pbmZvX3B0ciA9ICYodWFydF9vYmotPnVhcnRfaW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19VQVJUX0lORk9fT0JKRUNUKHVhcnRfaW5mb19wdHIpOw0KKyAgICBEV19VQVJUX0NIRUNLX0VYUCh1YXJ0X2luZm9fcHRyLT5vcG5fY250ID4gMCwgRV9DTFNFRCk7DQorICAgIERXX1VBUlRfQ0hFQ0tfRVhQKHVhcnRfaW5mb19wdHItPnN0YXR1cyAmIERFVl9FTkFCTEVELCBFX1NZUyk7DQorICAgIERXX1VBUlRfQ0hFQ0tfRVhQKGRhdGEgIT0gTlVMTCwgRV9QQVIpOw0KKyAgICBEV19VQVJUX0NIRUNLX0VYUChsZW4gPiAwLCBFX1BBUik7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICBpbnQzMl90IGkgPSAwOw0KKyAgICBjaGFyICpwX2NoYXJidWYgPSAoY2hhciAqKWRhdGE7DQorDQorICAgIERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0ciA9IChEV19VQVJUX0NUUkxfUFRSKSh1YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwpOw0KKyAgICBEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyID0gKERXX1VBUlRfUkVHX1BUUikodWFydF9jdHJsX3B0ci0+ZHdfdWFydF9yZWdiYXNlKTsNCisNCisgICAgd2hpbGUgKGkgPCBsZW4pDQorICAgIHsNCisgICAgICAgIHBfY2hhcmJ1ZltpKytdID0gZHdfdWFydF9wcmN2X2Nocih1YXJ0X3JlZ19wdHIpOw0KKyAgICB9DQorDQorICAgIGVyY2QgPSBpOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgaW50ZXJydXB0IHByb2Nlc3Npbmcgcm91dGluZQ0KKyAqIFxwYXJhbVtpbl0gICB1YXJ0X29iaiAgICB1YXJ0IG9iamVjdCBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqIFxwYXJhbVtpbl0gICBwdHIgICAgIGV4dHJhIGluZm9ybWF0aW9uDQorICovDQordm9pZCBkd191YXJ0X2lzcihERVZfVUFSVCAqdWFydF9vYmosIHZvaWQgKnB0cikNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9VQVJUX0lORk8gKnVhcnRfaW5mb19wdHIgPSAmKHVhcnRfb2JqLT51YXJ0X2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfVUFSVF9JTkZPX09CSkVDVCh1YXJ0X2luZm9fcHRyKTsNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIHVpbnQzMl90IHVhcnRfaW50X3N0YXR1czsgLyoqIHVhcnQgaW50ZXJydXB0IHN0YXR1cyAqLw0KKyAgICB2b2xhdGlsZSB1aW50MzJfdCB0ZW1wOyAvKiogcmVhZCBlcnJvciBzdGF0dXMgdG8gY2xlYXIgaW50ZXJydXB0ICovDQorICAgIERFVl9CVUZGRVIgKmJ1Zl9wdHI7DQorICAgIGNoYXIgKnBfY2hhcmJ1ZjsNCisNCisgICAgRFdfVUFSVF9DVFJMICp1YXJ0X2N0cmxfcHRyID0gKERXX1VBUlRfQ1RSTF9QVFIpKHVhcnRfaW5mb19wdHItPnVhcnRfY3RybCk7DQorICAgIERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIgPSAoRFdfVUFSVF9SRUdfUFRSKSh1YXJ0X2N0cmxfcHRyLT5kd191YXJ0X3JlZ2Jhc2UpOw0KKw0KKyAgICAvKiogZ2V0IHVhcnQgaW50ZXJydXB0IHN0YXR1cyAqLw0KKyAgICB1YXJ0X2ludF9zdGF0dXMgPSAodWFydF9yZWdfcHRyLT5JSVIpICYgRFdfVUFSVF9JSVJfSU5UX0lEX01BU0s7DQorDQorICAgIHN3aXRjaCAodWFydF9pbnRfc3RhdHVzKQ0KKyAgICB7DQorICAgIGNhc2UgRFdfVUFSVF9JSVJfTURNX1NUQVRVUzoNCisgICAgICAgIHRlbXAgPSAodm9sYXRpbGUgdWludDMyX3QpKHVhcnRfcmVnX3B0ci0+TVNSKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIERXX1VBUlRfSUlSX0xJTkVfU1RBVFVTOg0KKyAgICAgICAgaWYgKHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLmVycl9jYikNCisgICAgICAgIHsNCisgICAgICAgICAgICB1YXJ0X2luZm9fcHRyLT51YXJ0X2Nicy5lcnJfY2IodWFydF9pbmZvX3B0cik7DQorICAgICAgICB9DQorDQorICAgICAgICB0ZW1wID0gKHZvbGF0aWxlIHVpbnQzMl90KSh1YXJ0X3JlZ19wdHItPkxTUik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBEV19VQVJUX0lJUl9YTUlUX0VNUFRZOg0KKyAgICAgICAgYnVmX3B0ciA9ICYodWFydF9pbmZvX3B0ci0+dHhfYnVmKTsNCisgICAgICAgIHBfY2hhcmJ1ZiA9IChjaGFyICopYnVmX3B0ci0+YnVmOw0KKw0KKyAgICAgICAgaWYgKHBfY2hhcmJ1ZiAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHdoaWxlIChkd191YXJ0X3B1dHJlYWR5KHVhcnRfcmVnX3B0cikpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBkd191YXJ0X3B1dGNoYXIodWFydF9yZWdfcHRyLCBwX2NoYXJidWZbYnVmX3B0ci0+b2ZzXSk7DQorICAgICAgICAgICAgICAgIGJ1Zl9wdHItPm9mcyArKzsNCisNCisgICAgICAgICAgICAgICAgaWYgKGJ1Zl9wdHItPm9mcyA+PSBidWZfcHRyLT5sZW4pDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGR3X3VhcnRfZGlzX2Nicih1YXJ0X2luZm9fcHRyLCBEV19VQVJUX1JEWV9TTkQpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLnR4X2NiKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLnR4X2NiKHVhcnRfb2JqKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIC8qIGNsZWFyIHRoZSBzZW5kIGJ1ZmZlciBwb2ludGVyICovDQorICAgICAgICAgICAgICAgICAgICBtZW1zZXQoYnVmX3B0ciwgMCwgc2l6ZW9mKERFVl9CVUZGRVIpKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICh1YXJ0X2luZm9fcHRyLT51YXJ0X2Nicy50eF9jYikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLnR4X2NiKHVhcnRfb2JqKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBEV19VQVJUX0lJUl9SWF9USU1FT1VUOg0KKyAgICAgICAgdGVtcCA9IGR3X3VhcnRfZ2V0Y2hhcih1YXJ0X3JlZ19wdHIpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgRFdfVUFSVF9JSVJfREFUQV9BVkFJTDoNCisgICAgICAgIGJ1Zl9wdHIgPSAmKHVhcnRfaW5mb19wdHItPnJ4X2J1Zik7DQorICAgICAgICBwX2NoYXJidWYgPSAoY2hhciAqKWJ1Zl9wdHItPmJ1ZjsNCisNCisgICAgICAgIGlmIChwX2NoYXJidWYgIT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICB3aGlsZSAoZHdfdWFydF9nZXRyZWFkeSh1YXJ0X3JlZ19wdHIpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcF9jaGFyYnVmW2J1Zl9wdHItPm9mc10gPSAoY2hhcilkd191YXJ0X2dldGNoYXIodWFydF9yZWdfcHRyKTsNCisgICAgICAgICAgICAgICAgYnVmX3B0ci0+b2ZzICsrOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoYnVmX3B0ci0+b2ZzID49IGJ1Zl9wdHItPmxlbikNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgZHdfdWFydF9kaXNfY2JyKHVhcnRfaW5mb19wdHIsIERXX1VBUlRfUkRZX1JDVik7DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAodWFydF9pbmZvX3B0ci0+dWFydF9jYnMucnhfY2IpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+dWFydF9jYnMucnhfY2IodWFydF9vYmopOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgLyogY2xlYXIgdGhlIHNlbmQgYnVmZmVyIHBvaW50ZXIgKi8NCisgICAgICAgICAgICAgICAgICAgIG1lbXNldChidWZfcHRyLCAwLCBzaXplb2YoREVWX0JVRkZFUikpOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLnJ4X2NiKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+dWFydF9jYnMucnhfY2IodWFydF9vYmopOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgdGVtcCA9ICh2b2xhdGlsZSB1aW50MzJfdCkodWFydF9yZWdfcHRyLT5VU1IpOw0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm47DQorfQ0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS91YXJ0L2R3X3VhcnQuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS91YXJ0L2R3X3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2U0N2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydC5oCkBAIC0wLDAgKzEsMTQzIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA2LTIwDQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgREVWSUNFX0RXX1VBUlQNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgZHJpdmVyIGhlYWRlciBmaWxlDQorICogXGRldGFpbHMgICAgIGRldGFpbGVkIGRlZmluaXRpb25zIG9mIGRlc2lnbndhcmUgdWFydCBkcml2ZXINCisgKi8NCisNCisjaWZuZGVmIF9EV19VQVJUX0hfDQorI2RlZmluZSBfRFdfVUFSVF9IXw0KKw0KKyNpbmNsdWRlICJkZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X3VhcnQuaCINCisNCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmgiDQorDQorLyoqDQorICogaWYgdGhpcyBoZWFkZXIgZmlsZSBpcyBpbmNsdWRlZCwNCisgKiB3aWxsIGluZGljYXRlIHRoYXQgdGhpcyBkZXNpZ253YXJlIHVhcnQgZGV2aWNlDQorICogaXMgdXNlZA0KKyAqLw0KKyNkZWZpbmUgREVWSUNFX1VTRV9ERVNJR05XQVJFX1VBUlQNCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFVBUlQgUmVnaXN0ZXIgU3RydWN0dXJlDQorICogXGJyaWVmICAgY29udGFpbnMgZGVmaW5pdGlvbnMgb2YgRGVzaWduV2FyZSBVQVJUIHJlZ2lzdGVyIHN0cnVjdHVyZS4NCisgKiBAew0KKyAqLw0KKy8qKg0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCByZWdpc3RlciBzdHJ1Y3R1cmUNCisgKiBcZGV0YWlscyBEZXRhaWxlZCBzdHJ1Y3QgZGVzY3JpcHRpb24gb2YgRGVzaWduV2FyZSBVQVJUDQorICogIGJsb2NrIHJlZ2lzdGVyIGluZm9ybWF0aW9uLCBpbXBsZW1lbnRhdGlvbiBvZiBkZXZfdWFydF9pbmZvOjp1YXJ0X3JlZ3MNCisgKi8NCit0eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCBkd191YXJ0X3JlZw0KK3sNCisgICAgdWludDMyX3QgREFUQTsgICAgICAvKiE8IGRhdGEgaW4vb3V0IGFuZCBETEwgKi8NCisgICAgdWludDMyX3QgSUVSOyAgICAgICAvKiE8IEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgYW5kIERMSCAqLw0KKyAgICB1aW50MzJfdCBJSVI7ICAgICAgIC8qITwgSW50ZXJydXB0IElkIHJlZ2lzdGVyIGFuZCBGQ1IgKi8NCisgICAgdWludDMyX3QgTENSOyAgICAgICAvKiE8IExpbmUgY29udHJvbCBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBNQ1I7ICAgICAgIC8qITwgTW9kZW0gY29udHJvbCByZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBMU1I7ICAgICAgIC8qITwgTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgTVNSOyAgICAgICAvKiE8IE1vZGVtIHN0YXR1cyBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBTQ1JBVENIUEFEOyAgICAvKiE8IFVhcnQgc2NyYXRjaCBwYWQgcmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgTFBETEw7ICAgICAvKiE8IExvdyBQb3dlciBEaXZpc29yIExhdGNoIChMb3cpIFJlZyAqLw0KKyAgICB1aW50MzJfdCBMUERMSDsgICAgIC8qITwgTG93IFBvd2VyIERpdmlzb3IgTGF0Y2ggKEhpZ2gpIFJlZyAqLw0KKyAgICB1aW50MzJfdCBSRVMxWzJdOyAgIC8qITwgUmVzZXJ2ZWQgKi8NCisgICAgdWludDMyX3QgU0hSWzE2XTsgICAvKiE8IFNoYWRvdyBkYXRhIHJlZ2lzdGVyKFNSQlIgYW5kIFNUSFIpICovDQorICAgIHVpbnQzMl90IEZBUjsgICAgICAgLyohPCBGSUZPIEFjY2VzcyByZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBURlI7ICAgICAgIC8qITwgVHJhbnNtaXQgRklGTyBSZWFkICovDQorICAgIHVpbnQzMl90IFJGVzsgICAgICAgLyohPCBSZWNlaXZlIEZJRk8gd3JpdGUgKi8NCisgICAgdWludDMyX3QgVVNSOyAgICAgICAvKiE8IFVBUlQgc3RhdHVzIHJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFRGTDsgICAgICAgLyohPCBUcmFuc21pdCBGSUZPIGxldmVsICovDQorICAgIHVpbnQzMl90IFJGTDsgICAgICAgLyohPCBSZWNlaXZlIEZJRk8gbGV2ZWwgKi8NCisgICAgdWludDMyX3QgU1JSOyAgICAgICAvKiE8IFNvZnR3YXJlIHJlc2V0IHJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFNSVFM7ICAgICAgLyohPCBTaGFkb3cgcmVxdWVzdCB0byBzZW5kICovDQorICAgIHVpbnQzMl90IFNCQ1I7ICAgICAgLyohPCBTaGFkb3cgYnJlYWsgY29udHJvbCAqLw0KKyAgICB1aW50MzJfdCBTRE1BTTsgICAgIC8qITwgU2hhZG93IERNQSBtb2RlICovDQorICAgIHVpbnQzMl90IFNGRTsgICAgICAgLyohPCBTaGFkb3cgRklGTyBlbmFibGUgKi8NCisgICAgdWludDMyX3QgU1JUOyAgICAgICAvKiE8IFNoYWRvdyBSQ1ZSIFRyaWdnZXIgKi8NCisgICAgdWludDMyX3QgU1RFVDsgICAgICAvKiE8IFNoYWRvdyBUWCBlbXB0eSByZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBIVFg7ICAgICAgIC8qITwgSGFsdCBUWCAqLw0KKyAgICB1aW50MzJfdCBETUFTQTsgICAgIC8qITwgRE1BIFNvZnR3YXJlIEFDSyAqLw0KKyAgICB1aW50MzJfdCBSRVMyWzE4XTsgIC8qITwgUmVzZXJ2ZWQgKi8NCisgICAgdWludDMyX3QgQ1BSOyAgICAgICAvKiE8IENhbXBvbmVudCBwYXJhbWV0ZXIgcmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgVUNWOyAgICAgICAvKiE8IFVBUlQgQ29tcG9uZW50IFZlcnNpb24gKi8NCisgICAgdWludDMyX3QgQ1RSOyAgICAgICAvKiE8IENvbXBvbmVudCB0eXB3IHJlZ2lzdGVyICovDQorfSBEV19VQVJUX1JFRywgKkRXX1VBUlRfUkVHX1BUUjsNCisvKiogQH0gKi8NCisNCisjZGVmaW5lIERXX1VBUlRfR0lOVF9ESVNBQkxFRCAgICgwKSAgICAgLyohPCBkZXNpZ253YXJlIGludGVycnVwdCBkaXNhYmxlZCBmb3IgY29udHJvbCB1YXJ0IGlycS9maXEgKi8NCisjZGVmaW5lIERXX1VBUlRfR0lOVF9FTkFCTEUgKDE8PDApICAgICAgLyohPCBkZXNpZ253YXJlIGludGVycnVwdCBlbmFibGVkIGZvciBjb250cm9sIHVhcnQgaXJxL2ZpcSAqLw0KKyNkZWZpbmUgRFdfVUFSVF9UWElOVF9FTkFCTEUgICAgKDE8PDEpICAgICAgLyohPCBkZXNpZ253YXJlIGludGVycnVwdCBlbmFibGVkIGZvciBjb250cm9sIHRyYW5zbWl0IHByb2Nlc3MgKi8NCisjZGVmaW5lIERXX1VBUlRfUlhJTlRfRU5BQkxFICAgICgxPDwyKSAgICAgIC8qITwgZGVzaWdud2FyZSBpbnRlcnJ1cHQgZW5hYmxlZCBmb3IgY29udHJvbCB0cmFuc21pdCBwcm9jZXNzICovDQorDQorLyoqDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGNvbnRyb2wgc3RydWN0dXJlIGRlZmluaXRpb24NCisgKiBcZGV0YWlscyBpbXBsZW1lbnQgb2YgZGV2X3VhcnRfaW5mbzo6dWFydF9jdHJsDQorICovDQordHlwZWRlZiBzdHJ1Y3QgZHdfdWFydF9jdHJsDQorew0KKyAgICB1aW50MzJfdCBkd191YXJ0X3JlZ2Jhc2U7ICAgICAgIC8qITwgdWFydCBpcCByZWdpc3RlciBiYXNlICovDQorICAgIHVpbnQzMl90IGR3X2FwYl9idXNfZnJlcTsgICAgICAgLyohPCB1YXJ0IGlwIGFwYiBidXMgZnJlcXVlbmN5ICovDQorICAgIHVpbnQzMl90IGludG5vOyAgICAgICAgICAgICAvKiE8IHVhcnQgaW50ZXJydXB0IHZlY3RvciBudW1iZXIgKi8NCisgICAgSU5UX0hBTkRMRVIgZHdfdWFydF9pbnRfaGFuZGxlcjsgICAgLyohPCB1YXJ0IGludGVycnVwdCBoYW5kbGVyICovDQorICAgIHVpbnQzMl90IHR4X2ZpZm9fbGVuOyAgICAgICAgICAgLyohPCB0cmFuc21pdCBmaWZvIGxlbmd0aCwgc2V0IGJ5IHVzZXIgaW4gb2JqZWN0IGltcGxlbWVudGF0aW9uICovDQorICAgIHVpbnQzMl90IHJ4X2ZpZm9fbGVuOyAgICAgICAgICAgLyohPCByZWNlaXZlIGZpZm8gbGVuZ3RoLCBzZXQgYnkgdXNlciBpbiBvYmplY3QgaW1wbGVtZW50YXRpb24gKi8NCisgICAgdWludDMyX3QgaW50X3N0YXR1czsgICAgICAgICAgICAvKiE8IGludGVycnVwdCBzdGF0dXMgZm9yIGRlc2lnbndhcmUgdWFydCAqLw0KK30gRFdfVUFSVF9DVFJMLCAqRFdfVUFSVF9DVFJMX1BUUjsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFVBUlQgRnVuY3Rpb24gRGVjbGFyYXRpb24NCisgKiBcYnJpZWYgICBjb250YWlucyBkZWNsYXJhdGlvbnMgb2YgZGVzaWdud2FyZSB1YXJ0IGZ1bmN0aW9ucy4NCisgKiBcZGV0YWlscyBUaGlzIGFyZSBvbmx5IHVzZWQgaW4gdWFydCBvYmplY3QgaW1wbGVtZW50YXRpb24gc291cmNlIGZpbGUNCisgKiBAew0KKyAqLw0KK2V4dGVybiBpbnQzMl90IGR3X3VhcnRfb3BlbihERVZfVUFSVCAqdWFydF9vYmosIHVpbnQzMl90IGJhdWQpOw0KK2V4dGVybiBpbnQzMl90IGR3X3VhcnRfY2xvc2UoREVWX1VBUlQgKnVhcnRfb2JqKTsNCitleHRlcm4gaW50MzJfdCBkd191YXJ0X2NvbnRyb2woREVWX1VBUlQgKnVhcnRfb2JqLCB1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pOw0KK2V4dGVybiBpbnQzMl90IGR3X3VhcnRfd3JpdGUoREVWX1VBUlQgKnVhcnRfb2JqLCBjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pOw0KK2V4dGVybiBpbnQzMl90IGR3X3VhcnRfcmVhZChERVZfVUFSVCAqdWFydF9vYmosIHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbik7DQorZXh0ZXJuIHZvaWQgZHdfdWFydF9pc3IoREVWX1VBUlQgKnVhcnRfb2JqLCB2b2lkICpwdHIpOw0KKy8qKiBAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0RXX1VBUlRfSF8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvdWFydC9kd191YXJ0X2hhbC5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydF9oYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQ1Yzc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydF9oYWwuaApAQCAtMCwwICsxLDI1MyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNi0yMA0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIERFVklDRV9EV19JSUMNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgZHJpdmVyIGhhcmR3YXJlIGRlc2NyaXB0aW9uIHJlbGF0ZWQgaGVhZGVyIGZpbGUNCisgKiBcZGV0YWlscyBkZXRhaWxlZCBoYXJkd2FyZSByZWxhdGVkIGRlZmluaXRpb25zIG9mIERlc2lnbldhcmUgVUFSVCBkcml2ZXINCisgKi8NCisNCisjaWZuZGVmIF9ERVZJQ0VfRFdfVUFSVF9IQUxfSF8NCisjZGVmaW5lIF9ERVZJQ0VfRFdfVUFSVF9IQUxfSF8NCisNCisvKiBEVyBBUEIgVUFSVCBiaXQgZGVmaW5pdGlvbnMgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFVBUlQgSEFMIElFUiBNYXJjb3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgaGFsIElFUiByZWxhdGVkIG1hY3Jvcw0KKyAqIEB7DQorICovDQorLyogSUVSICovDQorI2RlZmluZSBEV19VQVJUX0lFUl9EQVRBX0FWQUlMICAgICAgICAgICgweDAxKQ0KKyNkZWZpbmUgRFdfVUFSVF9JRVJfWE1JVF9FTVBUWSAgICAgICAgICAoMHgwMikNCisjZGVmaW5lIERXX1VBUlRfSUVSX0xJTkVfU1RBVFVTICAgICAgICAgKDB4MDQpDQorI2RlZmluZSBEV19VQVJUX0lFUl9NRE1fU1RBVFVTICAgICAgICAgICgweDA4KQ0KKyNkZWZpbmUgRFdfVUFSVF9JRVJfUFRJTUUgICAgICAgICAgICgweDgwKQ0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBIQUwgSUlSIE1hcmNvcw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBoYWwgSUlSIHJlbGF0ZWQgbWFjcm9zDQorICogQHsNCisgKi8NCisvKiBJSVIgKi8NCisvKiBJSVIgUkVBRCAqLw0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfSVAgICAgICAgICAgICAgICgweDAxKQ0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfTUFTSyAgICAgICAgICAgICgweDBFKQ0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfUkVBRF9GSUZPX0VOQUJMRSAgICAgICAgKDB4QzApDQorDQorLyogUG9zc2libGUgaW50ZXJydXB0IElJUl9NQVNLIHZhbHVlcyAqLw0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfTURNX1NUQVRVUyAgICAgICAgICAoMHgwMCkNCisjZGVmaW5lIERXX1VBUlRfSUlSX1hNSVRfRU1QVFkgICAgICAgICAgKDB4MDIpDQorI2RlZmluZSBEV19VQVJUX0lJUl9EQVRBX0FWQUlMICAgICAgICAgICgweDA0KQ0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfTElORV9TVEFUVVMgICAgICAgICAoMHgwNikNCisjZGVmaW5lIERXX1VBUlRfSUlSX1JYX1RJTUVPVVQgICAgICAgICAgKDB4MEMpDQorI2RlZmluZSBEV19VQVJUX0lJUl9JTlRfSURfTUFTSyAgICAgICAgICgweDBmKQ0KKw0KKy8qIElJUiBXUklURSAqLw0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfRklGT19FTkFCTEUgICAgICAgICAoMHgwMSkNCisjZGVmaW5lIERXX1VBUlRfSUlSX1JDVlJfRklGT19SRVNFVCAgICAgKDB4MDIpDQorI2RlZmluZSBEV19VQVJUX0lJUl9YTUlUX0ZJRk9fUkVTRVQgICAgICgweDA0KQ0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfRE1BX01PREVfU0VMRUNUICAgICAoMHgwOCkNCisjZGVmaW5lIERXX1VBUlRfSUlSX1JDVl9UUklHR0VSX01BU0sgICAgICAgICgweEMwKQ0KKw0KKy8qIFZhbHVlcyBmb3IgSUlSIHJlY2VpdmUgdHJpZ2dlciAqLw0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfVFJJR0dFUl9MRVZFTF8xX0NIQVIgICAgKDB4MDApDQorI2RlZmluZSBEV19VQVJUX0lJUl9UUklHR0VSX0xFVkVMXzFfNF9GVUxMICAoMHg0MCkNCisjZGVmaW5lIERXX1VBUlRfSUlSX1RSSUdHRVJfTEVWRUxfMV8yX0ZVTEwgICgweDgwKQ0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfVFJJR0dFUl9MRVZFTF8yX0xFU1NfRlVMTCAgICgweEMwKQ0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBIQUwgTENSIE1hcmNvcw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBoYWwgTENSIHJlbGF0ZWQgbWFjcm9zDQorICogQHsNCisgKi8NCisvKiBMQ1IgKi8NCisjZGVmaW5lIERXX1VBUlRfTENSX1dPUkRfTEVOX01BU0sgICAgICAgKDB4MDMpDQorI2RlZmluZSBEV19VQVJUX0xDUl9TVE9QX0JJVF9NQVNLICAgICAgICgweDA0KQ0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfUEFSSVRZX01BU0sgICAgICAgICAoMHgzOCkNCisjZGVmaW5lIERXX1VBUlRfTENSX0RQU19NQVNLICAgICAgICAgICAgKDB4M0YpDQorI2RlZmluZSBEV19VQVJUX0xDUl9TVElDS19QQVJJVFkgICAgICAgICgweDIwKQ0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfQlJFQUsgICAgICAgICAgICgweDQwKQ0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfRExBQiAgICAgICAgICAgICgweDgwKQ0KKw0KKy8qIFdvcmQgbGVuZ3RoIHZhbHVlcyAqLw0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfV09SRF9MRU41ICAgICAgICAgICAoMHgwMCkNCisjZGVmaW5lIERXX1VBUlRfTENSX1dPUkRfTEVONiAgICAgICAgICAgKDB4MDEpDQorI2RlZmluZSBEV19VQVJUX0xDUl9XT1JEX0xFTjcgICAgICAgICAgICgweDAyKQ0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfV09SRF9MRU44ICAgICAgICAgICAoMHgwMykNCisNCisvKiBzdG9wIGJpdCB2YWx1ZXMgKi8NCisjZGVmaW5lIERXX1VBUlRfTENSXzFfU1RPUF9CSVQgICAgICAgICAgKDB4MDApDQorI2RlZmluZSBEV19VQVJUX0xDUl8xRDVfU1RPUF9CSVQgICAgICAgICgweDA0KQ0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfMl9TVE9QX0JJVCAgICAgICAgICAoMHgwNCkNCisNCisvKiBQYXJpdHkgYml0IHZhbHVlcyAqLw0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfUEFSSVRZX05PTkUgICAgICAgICAoMHgwMCkNCisjZGVmaW5lIERXX1VBUlRfTENSX1BBUklUWV9PREQgICAgICAgICAgKDB4MDgpDQorI2RlZmluZSBEV19VQVJUX0xDUl9QQVJJVFlfRVZFTiAgICAgICAgICgweDE4KQ0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfUEFSSVRZX01BUksgICAgICAgICAoMHgyOCkNCisjZGVmaW5lIERXX1VBUlRfTENSX1BBUklUWV9TUEFDRSAgICAgICAgKDB4MzgpDQorDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIEhBTCBNQ1IgTWFyY29zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGhhbCBNQ1IgcmVsYXRlZCBtYWNyb3MNCisgKiBAew0KKyAqLw0KKy8qIE1DUiAqLw0KKyNkZWZpbmUgRFdfVUFSVF9NQ1JfRFRSICAgICAgICAgICAgICgweDAxKQ0KKyNkZWZpbmUgRFdfVUFSVF9NQ1JfUlRTICAgICAgICAgICAgICgweDAyKQ0KKyNkZWZpbmUgRFdfVUFSVF9NQ1JfTE9PUEJBQ0sgICAgICAgICAgICAoMHgxMCkNCisjZGVmaW5lIERXX1VBUlRfTUNSX0FGQ0UgICAgICAgICAgICAoMHgyMCkNCisjZGVmaW5lIERXX1VBUlRfTUNSX1NJUkUgICAgICAgICAgICAoMHg0MCkNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFVBUlQgSEFMIExTUiBNYXJjb3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgaGFsIExTUiByZWxhdGVkIG1hY3Jvcw0KKyAqIEB7DQorICovDQorLyogTFNSICovDQorI2RlZmluZSBEV19VQVJUX0xTUl9EUiAgICAgICAgICAgICAgKDB4MDEpDQorI2RlZmluZSBEV19VQVJUX0xTUl9PVkVSUlVOICAgICAgICAgKDB4MDIpDQorI2RlZmluZSBEV19VQVJUX0xTUl9QQVJJVFlFUlIgICAgICAgICAgICgweDA0KQ0KKyNkZWZpbmUgRFdfVUFSVF9MU1JfRlJBTUVFUlIgICAgICAgICAgICAoMHgwOCkNCisjZGVmaW5lIERXX1VBUlRfTFNSX0JSRUFLUkNWRCAgICAgICAgICAgKDB4MTApDQorI2RlZmluZSBEV19VQVJUX0xTUl9UWERfRU1QVFkgICAgICAgICAgICgweDIwKQ0KKyNkZWZpbmUgRFdfVUFSVF9MU1JfVFhfU1RBVFVTICAgICAgICAgICAoMHg0MCkNCisjZGVmaW5lIERXX1VBUlRfTFNSX1JYX0ZJRk9FUlIgICAgICAgICAgKDB4ODApDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIEhBTCBNU1IgTWFyY29zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGhhbCBNU1IgcmVsYXRlZCBtYWNyb3MNCisgKiBAew0KKyAqLw0KKy8qIE1TUiAqLw0KKyNkZWZpbmUgRFdfVUFSVF9NU1JfRENUUyAgICAgICAgICAgICgweDAxKQ0KKyNkZWZpbmUgRFdfVUFSVF9NU1JfRERTUiAgICAgICAgICAgICgweDAyKQ0KKyNkZWZpbmUgRFdfVUFSVF9NU1JfVEVSSSAgICAgICAgICAgICgweDA0KQ0KKyNkZWZpbmUgRFdfVUFSVF9NU1JfRERDRCAgICAgICAgICAgICgweDA4KQ0KKyNkZWZpbmUgRFdfVUFSVF9NU1JfQ1RTICAgICAgICAgICAgICgweDEwKQ0KKyNkZWZpbmUgRFdfVUFSVF9NU1JfRFNSICAgICAgICAgICAgICgweDIwKQ0KKyNkZWZpbmUgRFdfVUFSVF9NU1JfUklDICAgICAgICAgICAgICgweDQwKQ0KKyNkZWZpbmUgRFdfVUFSVF9NU1JfRENEICAgICAgICAgICAgICgweDgwKQ0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBIQUwgRkNSIE1hcmNvcw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBoYWwgRkNSIHJlbGF0ZWQgbWFjcm9zDQorICogQHsNCisgKi8NCisvKiBGQ1IgKi8NCisjZGVmaW5lIERXX1VBUlRfRkNSX0ZFTiAgICAgICAgICAgICAoMHgwMSkNCisjZGVmaW5lIERXX1VBUlRfRkNSX1JGUiAgICAgICAgICAgICAoMHgwMikNCisjZGVmaW5lIERXX1VBUlRfRkNSX1RGUiAgICAgICAgICAgICAoMHgwNCkNCisjZGVmaW5lIERXX1VBUlRfRkNSX0RNUyAgICAgICAgICAgICAoMHgwOCkNCisjZGVmaW5lIERXX1VBUlRfRkNSX1JUTCAgICAgICAgICAgICAoMHhDMCkNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFVBUlQgSEFMIFVTUiBNYXJjb3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgaGFsIFVTUiByZWxhdGVkIG1hY3Jvcw0KKyAqIEB7DQorICovDQorLyogVVNSICovDQorI2RlZmluZSBEV19VQVJUX1VTUl9CVVNZICAgICAgICAgICAgKDB4MDEpDQorI2RlZmluZSBEV19VQVJUX1VTUl9URk5GICAgICAgICAgICAgKDB4MDIpDQorI2RlZmluZSBEV19VQVJUX1VTUl9URkUgICAgICAgICAgICAgKDB4MDQpDQorI2RlZmluZSBEV19VQVJUX1VTUl9SRk5FICAgICAgICAgICAgKDB4MDgpDQorI2RlZmluZSBEV19VQVJUX1VTUl9SRkYgICAgICAgICAgICAgKDB4MTApDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIEhBTCBTRkUgTWFyY29zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGhhbCBTRkUgcmVsYXRlZCBtYWNyb3MNCisgKiBAew0KKyAqLw0KKy8qIFNGRSAqLw0KKyNkZWZpbmUgRFdfVUFSVF9TRkVfU0hBRE9XX0ZJRk9fRU5BQkxFICAgICAgKDB4MDEpDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIEhBTCBTUlIgTWFyY29zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGhhbCBTUlIgcmVsYXRlZCBtYWNyb3MNCisgKiBAew0KKyAqLw0KKy8qIFNSUiAqLw0KKyNkZWZpbmUgRFdfVUFSVF9TUlJfVVIgICAgICAgICAgICAgICgweDAxKQ0KKyNkZWZpbmUgRFdfVUFSVF9TUlJfUkZSICAgICAgICAgICAgICgweDAyKQ0KKyNkZWZpbmUgRFdfVUFSVF9TUlJfWEZSICAgICAgICAgICAgICgweDA0KQ0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBIQUwgU1JUIE1hcmNvcw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBoYWwgU1JUIHJlbGF0ZWQgbWFjcm9zDQorICogQHsNCisgKi8NCisvKiBTUlQgKi8NCisjZGVmaW5lIERXX1VBUlRfU1JUX1RSSUdHRVJfTEVWRUxfMV9DSEFSICAgICgweDAwKQ0KKyNkZWZpbmUgRFdfVUFSVF9TUlRfVFJJR0dFUl9MRVZFTF8xXzRfRlVMTCAgKDB4MDEpDQorI2RlZmluZSBEV19VQVJUX1NSVF9UUklHR0VSX0xFVkVMXzFfMl9GVUxMICAoMHgwMikNCisjZGVmaW5lIERXX1VBUlRfU1JUX1RSSUdHRVJfTEVWRUxfMl9MRVNTX0ZVTEwgICAoMHgwMykNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFVBUlQgSEFMIFNURVQgTWFyY29zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGhhbCBTVEVUIHJlbGF0ZWQgbWFjcm9zDQorICogQHsNCisgKi8NCisvKiBTVEVUKi8NCisjZGVmaW5lIERXX1VBUlRfU1RFVF9GSUZPX0VNUFRZICAgICAgICAgKDB4MDApDQorI2RlZmluZSBEV19VQVJUX1NURVRfMl9DSEFSU19JTl9GSUZPICAgICAgICAoMHgwMSkNCisjZGVmaW5lIERXX1VBUlRfU1RFVF8xXzRfRlVMTCAgICAgICAgICAgKDB4MDIpDQorI2RlZmluZSBEV19VQVJUX1NURVRfMV8yX0ZVTEwgICAgICAgICAgICgweDAzKQ0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBIQUwgQ1BSIE1hcmNvcw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBoYWwgQ1BSIHJlbGF0ZWQgbWFjcm9zDQorICogQHsNCisgKi8NCisvKiBDUFIqLw0KKyNkZWZpbmUgRFdfVUFSVF9DUFJfRklGT19TVEFUICAgICAgICAgICAoMTw8MTApDQorI2RlZmluZSBEV19VQVJUX0NQUl9GSUZPX01PREVfT0ZTICAgICAgICgxNikNCisjZGVmaW5lIERXX1VBUlRfQ1BSX0ZJRk9fTU9ERV9NQVNLICAgICAgKDB4RkYpDQorI2RlZmluZSBEV19VQVJUX0NQUl9GSUZPX01PREUgICAgICAgICAgICgweEZGMDAwMCkNCisvKiogQH0gKi8NCisNCisjZW5kaWYgLyogX0RFVklDRV9EV19VQVJUX0hBTF9IXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X2NvbW1vbi5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhNTRlNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X2NvbW1vbi5oCkBAIC0wLDAgKzEsMTc0IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA2LTE2DQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX0NPTU1PTiAgIENvbW1vbiBEZXZpY2UgTGF5ZXIgRGVmaW5pdGlvbnMNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX0RFRg0KKyAqIFxicmllZiAgIGNvbW1vbiBkZWZpbml0aW9ucyBmb3IgZGV2aWNlIGxheWVyIChccmVmIGRldl9jb21tb24uaCkNCisgKg0KKyAqIEB7DQorICoNCisgKiBcZmlsZQ0KKyAqIFxicmllZiAgIGhlYWRlciBmaWxlIHRvIGRlZmluZSBjb21tb24gZGVmaW5pdGlvbnMgZm9yIGRldmljZSBsYXllcg0KKyAqIFxkZXRhaWxzIEhlcmUgaW4gdGhpcyBmaWxlIHByb3ZpZGUgZGVmaW5pdGlvbnMgdGhhdCBuZWVkIGJ5IG90aGVyDQorICogIGRldmljZXMgaW4gZGV2aWNlIGxheWVyDQorICovDQorDQorI2lmbmRlZiBfREVWSUNFX0hBTF9DT01NT05fSF8NCisjZGVmaW5lIF9ERVZJQ0VfSEFMX0NPTU1PTl9IXw0KKw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9DT01NT05fREVWU1RBVEUgIENvbW1vbiBEZXZpY2UgU3RhdGUNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX0NPTU1PTg0KKyAqIFxicmllZiAgIGRlZmluaXRpb25zIGZvciBkZXZpY2Ugc3RhdGUNCisgKiBcZGV0YWlscyBoZXJlIGRlZmluZXMgbWFjcm9zIGZvciBkZXZpY2Ugb3Blbi9jbG9zZSwNCisgKiAgZGV2aWNlIHdvcmtpbmcgZ29vZC9lcnJvciwgdXNlZCBpbg0KKyAqICBccmVmIERFVklDRV9IQUxfVUFSVCwgXHJlZiBERVZJQ0VfSEFMX1NQSSwNCisgKiAgXHJlZiBERVZJQ0VfSEFMX0lJQywgXHJlZiBERVZJQ0VfSEFMX0dQSU8NCisgKiBAew0KKyAqLw0KKy8qDQorICogbWFjcm9zIGZvciBkZXZpY2Ugb3BlbiBhbmQgY2xvc2Ugc3RhdGUNCisgKi8NCisjZGVmaW5lIERFVl9DTE9TRUQgICAgICAgICAgICAgICgwKSAvKiE8IEluZGljYXRlIHRoYXQgZGV2aWNlIHdhcyBjbG9zZWQgKi8NCisjZGVmaW5lIERFVl9PUEVORUQgICAgICAgICAgICAgICgxKSAvKiE8IEluZGljYXRlIHRoYXQgdGhlIGRldmljZSB3YXMgb3BlbmVkICovDQorDQorLyoNCisgKiBtYWNyb3MgZm9yIGRldmljZSBnb29kIGFuZCBlcnJvciBzdGF0ZQ0KKyAqLw0KKyNkZWZpbmUgREVWX0dPT0QgICAgICAgICAgICAgICAgKDApIC8qITwgSW5kaWNhdGUgZGV2aWNlIGlzIGdvb2QgKi8NCisjZGVmaW5lIERFVl9FUlJPUiAgICAgICAgICAgICAgICgxKSAvKiE8IEluZGljYXRlIGRldmljZSBlcnJvciAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX0NPTU1PTl9ERVZNVEhEICAgQ29tbW9uIERldmljZSBXb3JraW5nIE1ldGhvZA0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfQ09NTU9ODQorICogXGJyaWVmICAgZGVmaW5pdGlvbnMgZm9yIGRldmljZSB3b3JraW5nIG1ldGhvZChpbnRlcnJ1cHQgb3IgcG9sbCkNCisgKiBcZGV0YWlscyBoZXJlIGRlZmluZXMgbWFjcm9zIGZvciB3b3JraW5nIG1ldGhvZCwNCisgKiAgaW50ZXJydXB0IG9yIHBvbGwgbWV0aG9kLHVzZWQgaW4NCisgKiAgXHJlZiBERVZJQ0VfSEFMX1VBUlQsIFxyZWYgREVWSUNFX0hBTF9TUEksDQorICogIFxyZWYgREVWSUNFX0hBTF9JSUMsIFxyZWYgREVWSUNFX0hBTF9HUElPDQorICogQHsNCisgKi8NCisvKg0KKyAqIG1hY3JvcyBmb3IgZGV2aWNlIHdvcmtpbmcgbWV0aG9kDQorICovDQorI2RlZmluZSBERVZfUE9MTF9NRVRIT0QgICAgICAgICAgICAgKDApIC8qITwgSW5kaWNhdGUgdGhhdCB0aGUgZGV2aWNlIHJ1bm5pbmcgaW4gcG9sbCBtZXRob2QgKi8NCisjZGVmaW5lIERFVl9JTlRFUlJVUFRfTUVUSE9EICAgICAgICAgICAgKDEpIC8qITwgSW5kaWNhdGUgdGhhdCB0aGUgZGV2aWNlIHJ1bm5pbmcgaW4gaW50ZXJydXB0IG1ldGhvZCAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX0NPTU1PTl9ERVZNT0RFICAgQ29tbW9uIERldmljZSBXb3JraW5nIE1vZGUNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX0NPTU1PTg0KKyAqIFxicmllZiAgIGRlZmluaXRpb25zIGZvciBkZXZpY2Ugd29ya2luZyBtb2RlKG1hc3RlciBvciBzbGF2ZSkNCisgKiBcZGV0YWlscyBoZXJlIGRlZmluZXMgbWFjcm9zIGZvciB3b3JraW5nIG1vZGUsDQorICogIE1hc3RlciBvciBTbGF2ZSBtb2RlLHVzZWQgaW4NCisgKiAgXHJlZiBERVZfSEFMX0lJQywgXHJlZiBERVZfSEFMX1NQSS4NCisgKiBAew0KKyAqLw0KKy8qDQorICogbWFjcm9zIGZvciBkZXZpY2Ugd29ya2luZyBtb2RlDQorICovDQorI2RlZmluZSBERVZfTUFTVEVSX01PREUgICAgICAgICAgICAgKDApIC8qITwgSW5kaWNhdGUgdGhhdCB0aGUgZGV2aWNlIHdvcmtpbmcgYXMgbWFzdGVyICovDQorI2RlZmluZSBERVZfU0xBVkVfTU9ERSAgICAgICAgICAgICAgKDEpIC8qITwgSW5kaWNhdGUgdGhhdCB0aGUgZGV2aWNlIHdvcmtpbmcgYXMgc2xhdmUgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9DT01NT05fREVWU1RBVFVTIENvbW1vbiBEZXZpY2UgU3RhdHVzDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9DT01NT04NCisgKiBcYnJpZWYgICBkZWZpbml0aW9ucyBmb3IgZGV2aWNlIHN0YXR1cywgMSBiaXQgZm9yIDEgZnVuY3Rpb24NCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgREVWX0RJU0FCTEVEICAgICAgICAgICAgICAgICgwKSAvKiE8IEJpdCAwIGZvciBkZXZpY2UgZW5hYmxlZCBzdGF0ZSwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIERFVl9FTkFCTEVEICAgICAgICAgICAgICgxPDwwKSAgLyohPCBCaXQgMCBmb3IgZGV2aWNlIGVuYWJsZWQgc3RhdGUsIGVuYWJsZWQgKi8NCisjZGVmaW5lIERFVl9JTl9UWCAgICAgICAgICAgICAgICgxPDwxKSAgLyohPCBCaXQgMSBmb3IgZGV2aWNlIGluIHRyYW5zbWl0IHN0YXRlICovDQorI2RlZmluZSBERVZfSU5fUlggICAgICAgICAgICAgICAoMTw8MikgIC8qITwgQml0IDIgZm9yIGRldmljZSBpbiByZWNlaXZlIHN0YXRlICovDQorI2RlZmluZSBERVZfSU5fWEZFUiAgICAgICAgICAgICAoMTw8MykgIC8qITwgQml0IDMgZm9yIGRldmljZSBpbiB0cmFuc2ZlciBzdGF0ZSAqLw0KKyNkZWZpbmUgREVWX0lOX1RYX0FCUlQgICAgICAgICAgICAgICgxPDw0KSAgLyohPCBCaXQgNCBmb3IgZGV2aWNlIGluIHRyYW5zbWl0IGFib3J0IHN0YXRlICovDQorI2RlZmluZSBERVZfSU5fUlhfQUJSVCAgICAgICAgICAgICAgKDE8PDUpICAvKiE8IEJpdCA1IGZvciBkZXZpY2UgaW4gcmVjZWl2ZSBhYm9ydCBzdGF0ZSAqLw0KKyNkZWZpbmUgREVWX0lOX1hGRVJfQUJSVCAgICAgICAgICAgICgxPDw2KSAgLyohPCBCaXQgNiBmb3IgZGV2aWNlIGluIHRyYW5zZmVyIGFib3J0IHN0YXRlICovDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfQ09NTU9OX0RFRkNNRCAgICBDb21tb24gRGV2aWNlIERlZmluaW5nIENvbW1hbmQNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX0NPTU1PTg0KKyAqIFxicmllZiAgIGRlZmluaXRpb25zIGZvciBkZWZpbmluZyBjb21tYW5kIGNvZGUNCisgKiBcZGV0YWlscyBoZXJlIGRlZmluZXMgbWFjcm9zIHRvIGRlZmluZSBjb21tYW5kIGNvZGUsDQorICogIGluIHN5c3RlbSBjb2RlLCB1c2UgXHJlZiBERVZfU0VUX1NZU0NNRCB0byBkZWZpbmUgY29tbWFuZCBjb2RlLg0KKyAqICBpbiB1c2VyIGNvZGUsIHVzZSBccmVmIERFVl9TRVRfVVNSQ01EIHRvIGRlZmluZSBjb21tYW5kIGNvZGUuDQorICogIFNvIHRoYXQgdGhlcmUgd2lsbCBiZSBubyBjb25mbGljdHMgaW4gc3lzdGVtIGFuZCB1c2VyIGRlZmluZWQgY29tbWFuZCBjb2RlLg0KKyAqICB0aGlzIHVzZWQgdXNlZCBpbg0KKyAqICBccmVmIERFVklDRV9IQUxfVUFSVCwgXHJlZiBERVZJQ0VfSEFMX1NQSSwNCisgKiAgXHJlZiBERVZJQ0VfSEFMX0lJQywgXHJlZiBERVZJQ0VfSEFMX0dQSU8sDQorICogICAgICBhbmQgaW4gdXNlciBjb2RlDQorICogQHsNCisgKi8NCisvKg0KKyAqIG1hY3JvcyBmb3IgY29udHJvbCBjb21tYW5kIGJhc2UNCisgKi8NCisjZGVmaW5lIERFVl9TWVNfQ01EQlNFICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkgICAgICAgIC8qITwgZGVmYXVsdCBzeXN0ZW0gZGV2aWNlIGNvbnRyb2wgY29tbWFuZCBiYXNlKGRlZmluZWQgYnkgZW1iQVJDKSAqLw0KKyNkZWZpbmUgREVWX1VTUl9DTURCU0UgICAgICAgICAgICAgICgweDgwMDAwMDAwKSAgICAgICAgLyohPCBkZWZhdWx0IHVzZXIgZGV2aWNlIGNvbnRyb2wgY29tbWFuZCBiYXNlKGRlZmluZWQgYnkgdXNlcikgaW4gdXNlciBpbXBsZW1lbnRpbmcgKi8NCisjZGVmaW5lIERFVl9TRVRfU1lTQ01EKGNtZCkgICAgICAgICAoREVWX1NZU19DTURCU0V8KGNtZCkpICAvKiE8IHNldCBkZXZpY2Ugc3lzdGVtIGNvbnRyb2wgY29tbWFuZCAqLw0KKyNkZWZpbmUgREVWX1NFVF9VU1JDTUQoY21kKSAgICAgICAgIChERVZfVVNSX0NNREJTRXwoY21kKSkgIC8qITwgc2V0IGRldmljZSB1c2VyIGNvbnRyb2wgY29tbWFuZCAqLw0KKw0KKyNkZWZpbmUgQ09OVjJWT0lEKHBhcmFtKSAgICAgICAgICAgICgodm9pZCAqKShwYXJhbSkpICAgLyohPCBjb252ZXJ0IHBhcmFtIGludG8gdm9pZCAqIHR5cGUgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBDb21tb24gRGV2aWNlIEJ1ZmZlciBTdHJ1Y3R1cmUNCisgKi8NCit0eXBlZGVmIHN0cnVjdCBkZXZfYnVmZmVyDQorew0KKyAgICB2b2lkICpidWY7ICAvKiE8IGJ1ZmZlciBwb2ludGVyICovDQorICAgIHVpbnQzMl90IGxlbjsgICAvKiE8IGJ1ZmZlciBsZW5ndGggaW4gYnl0ZXMgKi8NCisgICAgdWludDMyX3Qgb2ZzOyAgIC8qITwgY3VycmVudCBvZmZzZXQgaW4gYnVmZmVyICovDQorfSBERVZfQlVGRkVSOw0KKw0KKy8qKiBJbml0IGRldmljZSBidWZmZXIgKi8NCisjZGVmaW5lIERFVl9CVUZGRVJfSU5JVChkZXZidWYsIGJ1ZmZlciwgc2l6ZSkgICB7ICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgIChkZXZidWYpLT5idWYgPSAodm9pZCAqKShidWZmZXIpOyAgIFwNCisgICAgICAgICAgICAgICAgICAgIChkZXZidWYpLT5sZW4gPSAodWludDMyX3QpKHNpemUpOyAgIFwNCisgICAgICAgICAgICAgICAgICAgIChkZXZidWYpLT5vZnMgPSAodWludDMyX3QpKDApOyAgICAgIFwNCisgICAgICAgICAgICAgICAgfQ0KKw0KKy8qKg0KKyAqICAgRGV2aWNlIGNhbGxiYWNrIGZ1bmN0aW9uIHR5cGVkZWYuDQorICogVGhpcyBpcyB1c3VhbGx5IHVzZWQgaW4gZGV2aWNlIGNhbGxiYWNrIHNldHRpbmdzLA0KKyAqIGFuZCBccHRyIHNob3VsZCBiZSB0aGUgZGV2aWNlIG9iamVjdCBwb2ludGVyLA0KKyAqIHN1Y2ggYXMgREVWX0lJQyAqICovDQordHlwZWRlZiB2b2lkICgqREVWX0NBTExCQUNLKSh2b2lkICpwdHIpOw0KKw0KKy8qKiBAfSAqLw0KKyNlbmRpZiAvKiBfREVWSUNFX0hBTF9DT01NT05fSF8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9ncGlvLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0ZDE1MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X2dwaW8uaApAQCAtMCwwICsxLDQzMSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNi0xNw0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9HUElPICAgICBHUElPIERldmljZSBIQUwgSW50ZXJmYWNlDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9ERUYNCisgKiBcYnJpZWYgICBkZWZpbml0aW9ucyBmb3IgZ3BpbyBkZXZpY2UgaGFyZHdhcmUgbGF5ZXIgKFxyZWYgZGV2X2dwaW8uaCkNCisgKiBcZGV0YWlscyBwcm92aWRlIGludGVyZmFjZXMgZm9yIGdwaW8gZHJpdmVyIHRvIGltcGxlbWVudA0KKyAqICBIZXJlIGlzIGEgZGlhZ3JhbSBmb3IgdGhlIGdwaW8gaW50ZXJmYWNlLg0KKyAqDQorICogIFxodG1sb25seQ0KKyAqICA8ZGl2IGNsYXNzPSJpbWFnZWJveCI+DQorICogICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogNjAwcHgiPg0KKyAqICAgICAgICAgIDxpbWcgc3JjPSJwaWMvZGV2X2dwaW9faGFsLmpwZyIgYWx0PSJHUElPIERldmljZSBIQUwgSW50ZXJmYWNlIERpYWdyYW0iLz4NCisgKiAgICAgICAgICA8cD5HUElPIERldmljZSBIQUwgSW50ZXJmYWNlIERpYWdyYW08L3A+DQorICogICAgICA8L2Rpdj4NCisgKiAgPC9kaXY+DQorICogIFxlbmRodG1sb25seQ0KKyAqDQorICogQHsNCisgKg0KKyAqIFxmaWxlDQorICogXGJyaWVmICAgZ3BpbyBkZXZpY2UgaGFyZHdhcmUgbGF5ZXIgZGVmaW5pdGlvbnMNCisgKiBcZGV0YWlscyBQcm92aWRlIGNvbW1vbiBkZWZpbml0aW9ucyBmb3IgZ3BpbyBkZXZpY2UsDQorICogIHRoZW4gdGhlIHNvZnR3YXJlIGRldmVsb3BlciBjYW4gZGV2ZWxvcCBncGlvIGRyaXZlcg0KKyAqICBmb2xsb3dpbmcgdGhlc2UgZGVmaW5pdGlvbnMsIGFuZCB0aGUgYXBwbGljYXRpb25zDQorICogIGNhbiBkaXJlY3RseSBjYWxsIHRoaXMgZGVmaW5pdGlvbiB0byByZWFsaXplIGZ1bmN0aW9ucw0KKyAqDQorICovDQorDQorI2lmbmRlZiBfREVWSUNFX0hBTF9HUElPX0hfDQorI2RlZmluZSBfREVWSUNFX0hBTF9HUElPX0hfDQorDQorI2luY2x1ZGUgImRldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfY29tbW9uLmgiDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfR1BJT19ERUZESVIgIEdQSU8gUG9ydCBEaXJlY3Rpb24gRGVmaW5pdGlvbg0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfR1BJTw0KKyAqIFxicmllZiAgIERlZmluZSBtYWNyb3MgdG8gaW5kaWNhdGUgZ3BpbyBkaXJlY3Rpb25zDQorICogQHsNCisgKi8NCisvKg0KKyAqIGRlZmluZXMgZm9yIGdwaW8gZGlyZWN0aW9ucw0KKyAqLw0KKyNkZWZpbmUgR1BJT19ESVJfSU5QVVQgICAgICAgICAgICAgICgwKSAgICAgLyohPCBncGlvIHdvcmtzIGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9PVVRQVVQgICAgICAgICAgICAgKDEpICAgICAvKiE8IGdwaW8gd29ya3MgYXMgb3V0cHV0ICovDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfR1BJT19DVFJMQ01EICAgICBHUElPIERldmljZSBDb250cm9sIENvbW1hbmRzDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9HUElPDQorICogXGJyaWVmICAgRGVmaW5pdGlvbnMgZm9yIGdwaW8gY29udHJvbCBjb21tYW5kLCB1c2VkIGluIFxyZWYgZGV2X2dwaW86OmdwaW9fY29udHJvbCAiR1BJTyBJTyBDb250cm9sIg0KKyAqIFxkZXRhaWxzIFRoZXNlIGNvbW1hbmRzIGRlZmluZWQgaGVyZSBjYW4gYmUgdXNlZCBpbiB1c2VyIGNvZGUgZGlyZWN0bHkuDQorICogLSBQYXJhbWV0ZXJzIFVzYWdlDQorICogICAtIEZvciBwYXNzaW5nIHBhcmFtZXRlcnMgbGlrZSBpbnRlZ2VyLCBqdXN0IHVzZSB1aW50MzJfdC9pbnQzMl90IHRvIGRpcmVjdGx5IHBhc3MgdmFsdWVzDQorICogICAtIEZvciBwYXNzaW5nIHBhcmFtZXRlcnMgZm9yIGEgc3RydWN0dXJlLCBwbGVhc2UgdXNlIHBvaW50ZXIgdG8gcGFzcyB2YWx1ZXMNCisgKiAgIC0gRm9yIGdldHRpbmcgc29tZSBkYXRhLCBwbGVhc2UgdXNlIHBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybiBkYXRhDQorICogLSBDb21tb24gUmV0dXJuIFZhbHVlcw0KKyAqICAgLSBccmVmIEVfT0ssICAgQ29udHJvbCBkZXZpY2Ugc3VjY2Vzc2Z1bGx5DQorICogICAtIFxyZWYgRV9DTFNFRCwgICAgRGV2aWNlIGlzIG5vdCBvcGVuZWQNCisgKiAgIC0gXHJlZiBFX09CSiwgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkIG9yIG5vdCBleGlzdHMNCisgKiAgIC0gXHJlZiBFX1BBUiwgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQgZm9yIGN1cnJlbnQgY29udHJvbCBjb21tYW5kDQorICogICAtIFxyZWYgRV9TWVMsICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBoYXJkd2FyZSBpc3N1ZXMgc3VjaCBhcyBkZXZpY2UgaXMgZGlzYWJsZWQNCisgKiAgIC0gXHJlZiBFX05PU1BULCAgICBDb250cm9sIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCBvciBub3QgdmFsaWQNCisgKiBAew0KKyAqLw0KKy8qKg0KKyAqIFNldCB0aGUgXHJlZiBkZXZfZ3Bpb19pbmZvOjpkaXJlY3Rpb24gImRpcmVjdGlvbiIgb2YgbWFza2VkIGJpdHMgb2YgZ3BpbyBwb3J0IGludG8gXHJlZiBHUElPX0RJUl9JTlBVVCAiaW5wdXQiDQorICogLSBQYXJhbSB0eXBlIDogdWludDMyX3QNCisgKiAtIFBhcmFtIHVzYWdlIDogMSBpbiBlYWNoIGJpdCB3aWxsIGJlIG1hc2tlZC4NCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBHUElPX0NNRF9TRVRfQklUX0RJUl9JTlBVVCAgICAgICAgICBERVZfU0VUX1NZU0NNRCgwKQ0KKy8qKg0KKyAqIFNldCB0aGUgXHJlZiBkZXZfZ3Bpb19pbmZvOjpkaXJlY3Rpb24gImRpcmVjdGlvbiIgb2YgbWFza2VkIGJpdHMgb2YgZ3BpbyBwb3J0IGludG8gXHJlZiBHUElPX0RJUl9PVVRQVVQgIm91dHB1dCINCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiAxIGluIGVhY2ggYml0IHdpbGwgYmUgbWFza2VkLg0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIEdQSU9fQ01EX1NFVF9CSVRfRElSX09VVFBVVCAgICAgICAgIERFVl9TRVRfU1lTQ01EKDEpDQorLyoqDQorICogR2V0IFxyZWYgZGV2X2dwaW9faW5mbzo6ZGlyZWN0aW9uICJncGlvIHBvcnQgZGlyZWN0aW9uIi4NCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiAxIGJpdCBmb3IgMSBiaXQgb2YgZ3BpbyBwb3J0LCAwIGZvciBpbnB1dCwgMSBmb3Igb3V0cHV0DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgR1BJT19DTURfR0VUX0JJVF9ESVIgICAgICAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoMikNCisvKioNCisgKiBTZXQgZ3BpbyBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBmb3IgZWFjaCBiaXQuDQorICogLSBQYXJhbSB0eXBlIDogXHJlZiBERVZfR1BJT19JTlRfQ0ZHICoNCisgKiAtIFBhcmFtIHVzYWdlIDogc3RvcmUgZ3BpbyBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBmb3IgZWFjaCBiaXQuDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgR1BJT19DTURfU0VUX0JJVF9JTlRfQ0ZHICAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoMykNCisvKioNCisgKiBHZXQgZ3BpbyBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBmb3IgZWFjaCBiaXQuDQorICogLSBQYXJhbSB0eXBlIDogXHJlZiBERVZfR1BJT19JTlRfQ0ZHICoNCisgKiAtIFBhcmFtIHVzYWdlIDogRmlyc3Qgc2V0IGludF9iaXRfbWFzayBpbiBERVZfR1BJT19JTlRfQ0ZHIHN0cnVjdHVyZSB0bw0KKyAqIHRoZSBtYXNrIG9mIHdoaWNoIGJpdCBvZiBHUElPIHlvdSB3YW50IHRvIGdldC4gQW5kIHRoZSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbg0KKyAqIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdHJ1Y3R1cmUgREVWX0dQSU9fSU5UX0NGRywgZWFjaCBiaXQgc3RhbmQgZm9yIGVhY2ggYml0IG9mIHBvcnQuDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgR1BJT19DTURfR0VUX0JJVF9JTlRfQ0ZHICAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoNCkNCisvKioNCisgKiBTZXQgZ3BpbyBzZXJ2aWNlIHJvdXRpbmUgZm9yIGVhY2ggYml0Lg0KKyAqIC0gUGFyYW0gdHlwZSA6IFxyZWYgREVWX0dQSU9fQklUX0lTUiAqDQorICogLSBQYXJhbSB1c2FnZSA6IHN0b3JlIGdwaW8gaGFuZGxlciBpbmZvcm1hdGlvbiBmb3IgZWFjaCBiaXQsIGludCBoYW5kbGVyJ3MgcGFyYW0gd2lsbCBiZSBERVZfR1BJTyAqLg0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIEdQSU9fQ01EX1NFVF9CSVRfSVNSICAgICAgICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDUpDQorLyoqDQorICogR2V0IGdwaW8gc2VydmljZSByb3V0aW5lIGZvciBlYWNoIGJpdC4NCisgKiAtIFBhcmFtIHR5cGUgOiBccmVmIERFVl9HUElPX0JJVF9JU1IgKg0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBCeSBwYXNzaW5nIGludF9iaXRfb2ZzIGluIERFVl9HUElPX0JJVF9JU1IsDQorICogaXQgd2lsbCByZXR1cm4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoaXMgYml0IGFuZCBzdG9yZSBpdCBpbiBpbnRfYml0X2hhbmRsZXIuDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgR1BJT19DTURfR0VUX0JJVF9JU1IgICAgICAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoNikNCisvKioNCisgKiBFbmFibGUgZ3BpbyBpbnRlcnJ1cHQgb2YgdGhlIG1hc2tlZCBiaXRzLg0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IDEgaW4gZWFjaCBiaXQgd2lsbCBiZSBtYXNrZWQuDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgR1BJT19DTURfRU5BX0JJVF9JTlQgICAgICAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoNykNCisvKioNCisgKiBEaXNhYmxlIGdwaW8gaW50ZXJydXB0IG9mIHRoZSBtYXNrZWQgYml0cy4NCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiAxIGluIGVhY2ggYml0IHdpbGwgYmUgbWFza2VkLg0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIEdQSU9fQ01EX0RJU19CSVRfSU5UICAgICAgICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDgpDQorLyoqDQorICogR2V0IFxyZWYgZGV2X2dwaW9faW5mbzo6bWV0aG9kICJncGlvIGludGVycnVwdCBlbmFibGUgc3RhdHVzIi4NCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdCAqDQorICogLSBQYXJhbSB1c2FnZSA6IDEgYml0IGZvciAxIGJpdCBvZiBncGlvIHBvcnQsIDAgZm9yIHBvbGwsIDEgZm9yIGludGVycnVwdA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIEdQSU9fQ01EX0dFVF9CSVRfTVRIRCAgICAgICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDkpDQorLyogQH0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9HUElPX0lOVF9DRkdfU0VUIEdQSU8gRGV2aWNlIEludCBDb25maWd1cmF0aW9uIFNldHRpbmdzDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9HUElPDQorICogXGJyaWVmICAgZGVmaW5pdGlvbiBvZiBncGlvIGludGVycnVwdCB0eXBlDQorICogQHsNCisgKi8NCisNCisvKiBHUElPIE1hc2sgRGVmaW50aW9ucyAqLw0KKy8qKiBNYXNrIG5vbmUgYml0cyBvZiB0aGUgbWF4IDMyYml0cyAqLw0KKyNkZWZpbmUgR1BJT19CSVRTX01BU0tfTk9ORSAgICAgICAgICgwKQ0KKy8qKiBNYXNrIGFsbCBiaXRzIG9mIHRoZSBtYXggMzJiaXRzICovDQorI2RlZmluZSBHUElPX0JJVFNfTUFTS19BTEwgICAgICAgICAgKDBYRkZGRkZGRkYpDQorDQorLyogR1BJTyBJbnRlcnJ1cHQgVHlwZSBSZWxhdGVkIERlZmluaXRpb25zICovDQorDQorLyoqIExldmVsIHNlbnNpdGl2ZSBpbnRlcnJ1cHQgdHlwZSBmb3IgMSBiaXQgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0xFVkVMX1RSSUcgICAgICAgICAoMCkNCisvKiogRWRnZSBzZW5zaXRpdmUgaW50ZXJydXB0IHR5cGUgZm9yIDEgYml0ICovDQorI2RlZmluZSBHUElPX0lOVF9FREdFX1RSSUcgICAgICAgICAgKDEpDQorLyoqIExldmVsIHNlbnNpdGl2ZSBpbnRlcnJ1cHQgdHlwZSBmb3IgYWxsIDMyIGJpdHMgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0xFVkVMX1RSSUdfQUxMICAgICAgICAgKDApDQorLyoqIEVkZ2Ugc2Vuc2l0aXZlIGludGVycnVwdCB0eXBlIGZvciBhbGwgMzIgYml0cyAqLw0KKyNkZWZpbmUgR1BJT19JTlRfRURHRV9UUklHX0FMTCAgICAgICAgICAoMFhGRkZGRkZGRikNCisNCisvKiBGb3IgYml0IHNldHRpbmdzICovDQorLyoqIFNldCBiaXQgaW50ZXJydXB0IHR5cGUgb2YgZ3BpbyBpbnRvIGxldmVsIHNlbnNpdGl2ZSAqLw0KKyNkZWZpbmUgR1BJT19JTlRfQklUX0xFVkVMX1RSSUcoYml0X29mcykgICAgKEdQSU9fSU5UX0xFVkVMX1RSSUc8PChiaXRfb2ZzKSkNCisvKiogU2V0IGJpdCBpbnRlcnJ1cHQgdHlwZSBvZiBncGlvIGludG8gZWRnZSBzZW5zaXRpdmUgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0JJVF9FREdFX1RSSUcoYml0X29mcykgICAgIChHUElPX0lOVF9FREdFX1RSSUc8PChiaXRfb2ZzKSkNCisvKiBGb3IgYml0cyBzZXR0aW5ncyAqLw0KKy8qKiBTZXQgaW50ZXJydXB0IHR5cGUgb2YgbWFza2VkIGJpdHMgb2YgZ3BpbyBpbnRvIGxldmVsIHNlbnNpdGl2ZSAqLw0KKyNkZWZpbmUgR1BJT19JTlRfQklUU19MRVZFTF9UUklHKGJpdF9tYXNrKSAgKEdQSU9fSU5UX0xFVkVMX1RSSUdfQUxMJihiaXRfbWFzaykpDQorLyoqIFNldCBiaXQgaW50ZXJydXB0IHR5cGUgb2YgZ3BpbyBpbnRvIGVkZ2Ugc2Vuc2l0aXZlICovDQorI2RlZmluZSBHUElPX0lOVF9CSVRTX0VER0VfVFJJRyhiaXRfbWFzaykgICAoR1BJT19JTlRfRURHRV9UUklHX0FMTCYoYml0X21hc2spKQ0KKw0KKy8qIEdQSU8gSW50ZXJydXB0IFBvbGFyaXR5IFJlbGF0ZWQgRGVmaW5pdGlvbnMgKi8NCisNCisvKiogR1BJTyBJbnRlcnJ1cHQgcG9sYXJpdHkgdHlwZSBlbnVtICovDQordHlwZWRlZiBlbnVtIGdwaW9faW50X3BvbGFyaXR5DQorew0KKyAgICAvKiBQb2xhcml0eSBmb3IgMSBiaXQgKi8NCisgICAgR1BJT19JTlRfQUNUSVZFX0xPVyAgID0gMCwgLyohPCBBY3RpdmUgbG93IGZvciBsZXZlbC1zZW5zaXRpdmUgaW50ZXJydXB0IGZvciAxIGJpdCAqLw0KKyAgICBHUElPX0lOVF9GQUxMSU5HX0VER0UgPSAwLCAvKiE8IEZhbGxpbmctZWRnZSBmb3IgZWRnZS1zZW5zaXRpdmUgaW50ZXJydXB0IGZvciAxIGJpdCAqLw0KKyAgICBHUElPX0lOVF9BQ1RJVkVfSElHSCA9ICAxLCAvKiE8IEFjdGl2ZSBoaWdoIGZvciBsZXZlbC1zZW5zaXRpdmUgaW50ZXJydXB0IGZvciAxIGJpdCAqLw0KKyAgICBHUElPX0lOSV9SSVNJTkdfRURHRSA9IDEsIC8qITwgUmlzaW5nLWVkZ2UgZm9yIGVkZ2Utc2Vuc2l0aXZlIGludGVycnVwdCBmb3IgMSBiaXQgKi8NCisgICAgLyogUG9sYXJ0aXkgZm9yIGFsbCAzMiBiaXRzICovDQorICAgIEdQSU9fSU5UX0FDVElWRV9MT1dfQUxMICAgPSAwLCAvKiE8IEFjdGl2ZSBsb3cgZm9yIGxldmVsLXNlbnNpdGl2ZSBpbnRlcnJ1cHQgZm9yIGFsbCBiaXRzICovDQorICAgIEdQSU9fSU5UX0ZBTExJTkdfRURHRV9BTEwgPSAwLCAvKiE8IEZhbGxpbmctZWRnZSBmb3IgZWRnZS1zZW5zaXRpdmUgaW50ZXJydXB0IGZvciBhbGwgYml0cyAqLw0KKyAgICBHUElPX0lOVF9BQ1RJVkVfSElHSF9BTEwgPSAgMFhGRkZGRkZGRiwgLyohPCBBY3RpdmUgaGlnaCBmb3IgbGV2ZWwtc2Vuc2l0aXZlIGludGVycnVwdCBmb3IgYWxsIGJpdHMgKi8NCisgICAgR1BJT19JTklfUklTSU5HX0VER0VfQUxMID0gMFhGRkZGRkZGRiAvKiE8IFJpc2luZy1lZGdlIGZvciBlZGdlLXNlbnNpdGl2ZSBpbnRlcnJ1cHQgZm9yIGFsbCBiaXRzICovDQorfSBHUElPX0lOVF9QT0xBUklUWTsNCisNCisvKiBGb3IgYml0IHNldHRpbmdzICovDQorLyoqIFNldCBiaXQgcG9sYXJpdHkgb2YgZ3BpbyBpbnRvIGFjdGl2ZSBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0JJVF9QT0xfQUNUX0xPVyhiaXRfb2ZzKSAgIChHUElPX0lOVF9BQ1RJVkVfTE9XPDwoYml0X29mcykpDQorLyoqIFNldCBiaXQgcG9sYXJpdHkgb2YgZ3BpbyBpbnRvIGFjdGl2ZSBoaWdoICovDQorI2RlZmluZSBHUElPX0lOVF9CSVRfUE9MX0FDVF9ISUdIKGJpdF9vZnMpICAoR1BJT19JTlRfQUNUSVZFX0hJR0g8PChiaXRfb2ZzKSkNCisvKiogU2V0IGJpdCBwb2xhcml0eSBvZiBncGlvIGludG8gZmFsbGluZyBlZGdlICovDQorI2RlZmluZSBHUElPX0lOVF9CSVRfUE9MX0ZBTExfRURHRShiaXRfb2ZzKSAoR1BJT19JTlRfRkFMTElOR19FREdFPDwoYml0X29mcykpDQorLyoqIFNldCBiaXQgcG9sYXJpdHkgb2YgZ3BpbyBpbnRvIHJpc2luZyBlZGdlICovDQorI2RlZmluZSBHUElPX0lOVF9CSVRfUE9MX1JJU0VfRURHRShiaXRfb2ZzKSAoR1BJT19JTklfUklTSU5HX0VER0U8PChiaXRfb2ZzKSkNCisNCisvKiBGb3IgYml0cyBzZXR0aW5ncyAqLw0KKy8qKiBTZXQgcG9sYXJpdHkgb2YgbWFza2VkIGJpdHMgb2YgZ3BpbyBpbnRvIGFjdGl2ZSBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0JJVFNfUE9MX0FDVF9MT1coYml0X21hc2spIChHUElPX0lOVF9BQ1RJVkVfTE9XX0FMTCYoYml0X21hc2spKQ0KKy8qKiBTZXQgcG9sYXJpdHkgb2YgbWFza2VkIGJpdHMgb2YgZ3BpbyBpbnRvIGFjdGl2ZSBoaWdoICovDQorI2RlZmluZSBHUElPX0lOVF9CSVRTX1BPTF9BQ1RfSElHSChiaXRfbWFzaykgICAgKEdQSU9fSU5UX0FDVElWRV9ISUdIX0FMTCYoYml0X21hc2spKQ0KKy8qKiBTZXQgcG9sYXJpdHkgb2YgbWFza2VkIGJpdHMgb2YgZ3BpbyBpbnRvIGZhbGxpbmcgZWRnZSAqLw0KKyNkZWZpbmUgR1BJT19JTlRfQklUU19QT0xfRkFMTF9FREdFKGJpdF9tYXNrKSAgIChHUElPX0lOVF9GQUxMSU5HX0VER0VfQUxMJihiaXRfbWFzaykpDQorLyoqIFNldCBwb2xhcml0eSBvZiBtYXNrZWQgYml0cyBvZiBncGlvIGludG8gcmlzaW5nIGVkZ2UgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0JJVFNfUE9MX1JJU0VfRURHRShiaXRfbWFzaykgICAoR1BJT19JTklfUklTSU5HX0VER0VfQUxMJihiaXRfbWFzaykpDQorDQorLyogR1BJTyBJbnRlcnJ1cHQgRGVib3VuY2UgUmVsYXRlZCBEZWZpbml0aW9ucyAqLw0KKw0KKy8qIEZvciBiaXQgc2V0dGluZ3MgKi8NCisvKiogRGlzYWJsZSBkZWJvdW5jZSBjaXJjdWl0cnkgZm9yIDEgYml0ICovDQorI2RlZmluZSBHUElPX0lOVF9OT19ERUJPVU5DRSAgICAgICAgICAgICgwKQ0KKy8qKiBFbmFibGUgZGVib3VuY2UgY2lyY3VpdHJ5IGZvciAxIGJpdCAqLw0KKyNkZWZpbmUgR1BJT19JTlRfREVCT1VOQ0UgICAgICAgICAgICgxKQ0KKw0KKy8qIEZvciBiaXRzIHNldHRpbmdzICovDQorLyoqIERpc2FibGUgZGVib3VuY2UgY2lyY3VpdHJ5IGZvciBhbGwgYml0cyAqLw0KKyNkZWZpbmUgR1BJT19JTlRfTk9fREVCT1VOQ0VfQUxMICAgICAgICAoMCkNCisvKiogRW5hYmxlIGRlYm91bmNlIGNpcmN1aXRyeSBmb3IgYWxsIGJpdHMgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0RFQk9VTkNFX0FMTCAgICAgICAgICAgKDBYRkZGRkZGRkYpDQorDQorLyogRm9yIGJpdCBzZXR0aW5ncyAqLw0KKy8qKiBTZXQgYml0IGludGVycnVwdCBkZWJvdW5jZSBvZiBncGlvIGludG8gZW5hYmxlZCAqLw0KKyNkZWZpbmUgR1BJT19JTlRfQklUX0VOQV9ERUJPVU5DRShiaXRfb2ZzKSAgKEdQSU9fSU5UX0RFQk9VTkNFPDwoYml0X29mcykpDQorLyoqIFNldCBiaXQgaW50ZXJydXB0IGRlYm91bmNlIG9mIGdwaW8gaW50byBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgR1BJT19JTlRfQklUX0RJU19ERUJPVU5DRShiaXRfb2ZzKSAgKEdQSU9fSU5UX05PX0RFQk9VTkNFPDwoYml0X29mcykpDQorLyogRm9yIGJpdHMgc2V0dGluZ3MgKi8NCisvKiogU2V0IGJpdCBpbnRlcnJ1cHQgZGVib3VuY2Ugb2YgZ3BpbyBpbnRvIGVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0JJVFNfRU5BX0RFQk9VTkNFKGJpdF9tYXNrKSAgICAoR1BJT19JTlRfREVCT1VOQ0VfQUxMJihiaXRfbWFzaykpDQorLyoqIFNldCBiaXQgaW50ZXJydXB0IGRlYm91bmNlIG9mIGdwaW8gaW50byBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgR1BJT19JTlRfQklUU19ESVNfREVCT1VOQ0UoYml0X21hc2spICAgIChHUElPX0lOVF9OT19ERUJPVU5DRV9BTEwmKGJpdF9tYXNrKSkNCisNCisvKiogR1BJTyBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiAqLw0KK3R5cGVkZWYgc3RydWN0IGRldl9ncGlvX2ludF9jZmcNCit7DQorICAgIHVpbnQzMl90IGludF9iaXRfbWFzazsgICAgICAvKiE8IGludGVycnVwdCBiaXQgbWFzayBmb3IgZ3BpbyAqLw0KKyAgICB1aW50MzJfdCBpbnRfYml0X3R5cGU7ICAgICAgLyohPCBccmVmIEdQSU9fSU5UX0xFVkVMX1RSSUcgImxldmVsIHNlbnNpdGl2ZSIgb3IgXHJlZiBHUElPX0lOVF9FREdFX1RSSUcgImVkZ2Ugc2Vuc2l0aXZlIiBmb3IgZWFjaCBncGlvIGJpdCAqLw0KKyAgICB1aW50MzJfdCBpbnRfYml0X3BvbGFyaXR5OyAgLyohPCBhY3RpdmUgaGlnaCBvciBsb3csIHJlZmVyIHRvIFxyZWYgR1BJT19JTlRfUE9MQVJJVFkgZm9yIGVhY2ggZ3BpbyBiaXQgKi8NCisgICAgdWludDMyX3QgaW50X2JpdF9kZWJvdW5jZTsgIC8qITwgXHJlZiBHUElPX0lOVF9ERUJPVU5DRSAiZW5hYmxlIiBvciBccmVmIEdQSU9fSU5UX05PX0RFQk9VTkNFICJkaXNhYmxlIiBkZWJvdW5jZSBsb2dpYyBmb3IgZWFjaCBncGlvIGJpdCAqLw0KK30gREVWX0dQSU9fSU5UX0NGRywgKiBERVZfR1BJT19JTlRfQ0ZHX1BUUjsNCisNCisvKiogRGVmYXVsdCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBmb3IgYWxsIGdwaW8gYml0cyAqLw0KK3N0YXRpYyBjb25zdCBERVZfR1BJT19JTlRfQ0ZHIGdwaW9faW50X2NmZ19kZWZhdWx0ID0gXA0KK3sNCisgICAgR1BJT19CSVRTX01BU0tfQUxMLCBHUElPX0lOVF9MRVZFTF9UUklHX0FMTCwgXA0KKyAgICBHUElPX0lOVF9BQ1RJVkVfTE9XX0FMTCwgR1BJT19JTlRfTk9fREVCT1VOQ0VfQUxMDQorfTsNCisNCisvKiogR1BJTyBpbnRlcnJ1cHQgaGFuZGxlciBvciBJbnRlcnJ1cHQgU2VydmljZSBSb3V0aW5lKElTUikgKi8NCit0eXBlZGVmIHZvaWQgKCpERVZfR1BJT19IQU5ETEVSKSh2b2lkICpwdHIpOw0KKw0KKy8qKiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgZWFjaCBwb3J0IGJpdCAqLw0KK3R5cGVkZWYgc3RydWN0IGRldl9ncGlvX2JpdF9pc3INCit7DQorICAgIHVpbnQzMl90IGludF9iaXRfb2ZzOyAgICAgICAgICAgLyohPCBpbnQgYml0IG9mZnNldCAqLw0KKyAgICBERVZfR1BJT19IQU5ETEVSIGludF9iaXRfaGFuZGxlcjsgICAvKiE8IGludGVycnVwdCBoYW5kbGVyICovDQorfSBERVZfR1BJT19CSVRfSVNSLCAqIERFVl9HUElPX0JJVF9JU1JfUFRSOw0KKy8qIEB9ICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfR1BJT19ERVZTVFJVQ1QgICBHUElPIERldmljZSBJbnRlcmZhY2UgRGVmaW5pdGlvbg0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfR1BJTw0KKyAqIFxicmllZiAgIGNvbnRhaW5zIGRlZmluaXRpb25zIG9mIGdwaW8gZGV2aWNlIHN0cnVjdHVyZS4NCisgKiBcZGV0YWlscyBUaGlzIHN0cnVjdHVyZSB3aWxsIGJlIHVzZWQgaW4gdXNlciBpbXBsZW1lbnRlZCBjb2RlLCB3aGljaCB3YXMgY2FsbGVkDQorICogICAgIFxyZWYgREVWSUNFX0lNUEwgIkRldmljZSBEcml2ZXIgSW1wbGVtZW50IExheWVyIiBmb3IgZ3BpbyB0byB1c2UgaW4gaW1wbGVtZW50YXRpb24gY29kZS4NCisgKiAgICAgQXBwbGljYXRpb24gZGV2ZWxvcGVyIHNob3VsZCB1c2UgdGhlIEdQSU8gQVBJIHByb3ZpZGVkIGhlcmUgdG8gYWNjZXNzIHRvIEdQSU8gZGV2aWNlcy4NCisgKiAgICAgQlNQIGRldmVsb3BlciBzaG91bGQgZm9sbG93IHRoZSBBUEkgZGVmaW5pdGlvbiB0byBpbXBsZW1lbnQgR1BJTyBkZXZpY2UgZHJpdmVycy4NCisgKiBAew0KKyAqLw0KKy8qKg0KKyAqIFxicmllZiAgIGdwaW8gaW5mb3JtYXRpb24gc3RydWN0IGRlZmluaXRpb24NCisgKiBcZGV0YWlscyBpbmZvcm1hdGlvbnMgYWJvdXQgZ3BpbyBvcGVuIGNvdW50LCB3b3JraW5nIHN0YXR1cw0KKyAqICBncGlvIHJlZ2lzdGVycyBhbmQgY29udHJvbCBibG9jaywgZ3BpbyBpbyBkaXJlY3Rpb24gYW5kIGludGVycnVwdC9wb2xsIGZvciBlYWNoIGJpdCBvZiBncGlvDQorICogXG5vdGUgICAgT25seSBhdmFpbGFibGUgZm9yIGdwaW8gd2l0aCBtYXggMzJiaXRzDQorICovDQordHlwZWRlZiBzdHJ1Y3QgZGV2X2dwaW9faW5mbw0KK3sNCisgICAgdm9pZCAqZ3Bpb19jdHJsOyAgICAvKiE8IGdwaW8gY29udHJvbCByZWxhdGVkIHBvaW50ZXIsIGltcGxlbWVudGVkIGJ5IGJzcCBkZXZlbG9wZXIsIGFuZCB0aGlzIHNob3VsZCBiZSBzZXQgZHVyaW5nIGdwaW8gb2JqZWN0IGltcGxlbWVudGF0aW9uICovDQorICAgIHVpbnQzMl90IG9wbl9jbnQ7ICAgLyohPCBncGlvIG9wZW4gY291bnQsIG9wZW4gaXQgd2lsbCBpbmNyZWFzZSAxLCBjbG9zZSBpdCB3aWxsIGRlY3JlYXNlIDEsIDAgZm9yIGNsb3NlLCA+MCBmb3Igb3BlbiAqLw0KKyAgICB1aW50MzJfdCBkaXJlY3Rpb247IC8qITwgZWFjaCBiaXQgZGlyZWN0aW9uIG9mIHRoaXMgR1BJTywgZGVmYXVsdCBhbGwgXHJlZiBHUElPX0RJUl9JTlBVVCAiaW5wdXQiIGZvciBmaXJzdCBvcGVuICovDQorICAgIHVpbnQzMl90IG1ldGhvZDsgICAgLyohPCBpbnQvcG9sbCBtZXRob2QgZm9yIGVhY2ggYml0IG9mIEdQSU8sIDAgZm9yIHBvbGwsIDEgZm9yIGludGVycnVwdCwgZGVmYXVsdCBhbGwgXHJlZiBERVZfUE9MTF9NRVRIT0QgInBvbGwiIGZvciBmaXJzdCBvcGVuICovDQorICAgIHZvaWQgKmV4dHJhOyAgICAgICAvKiE8IGEgZXh0cmEgcG9pbnRlciB0byBnZXQgaG9vayB0byBhcHBsaWNhdGlvbnMgd2hpY2ggc2hvdWxkIG5vdCB1c2VkIGJ5IGJzcCBkZXZlbG9wZXIsDQorICAgICAgICAgICAgICAgICAgICB0aGlzIHNob3VsZCBiZSBOVUxMIGZvciBmaXJzdCBvcGVuIGFuZCB5b3UgY2FuIFxyZWYgREVWX0dQSU9fSU5GT19TRVRfRVhUUkFfT0JKRUNUICJzZXQiDQorICAgICAgICAgICAgICAgICAgICBvciBccmVmIERFVl9HUElPX0lORk9fR0VUX0VYVFJBX09CSkVDVCAiZ2V0IiB0aGUgZXh0cmEgaW5mb3JtYXRpb24gcG9pbnRlciAqLw0KK30gREVWX0dQSU9fSU5GTywgKiBERVZfR1BJT19JTkZPX1BUUjsNCisvKiogU2V0IGV4dHJhIGluZm9ybWF0aW9uIHBvaW50ZXIgb2YgZ3BpbyBpbmZvICovDQorI2RlZmluZSBERVZfR1BJT19JTkZPX1NFVF9FWFRSQV9PQkpFQ1QoZ3Bpb19pbmZvX3B0ciwgZXh0cmFfaW5mbykgICAoZ3Bpb19pbmZvX3B0ciktPmV4dHJhID0gKHZvaWQgKikoZXh0cmFfaW5mbykNCisvKiogR2V0IGV4dHJhIGluZm9ybWF0aW9uIHBvaW50ZXIgb2YgZ3BpbyBpbmZvICovDQorI2RlZmluZSBERVZfR1BJT19JTkZPX0dFVF9FWFRSQV9PQkpFQ1QoZ3Bpb19pbmZvX3B0cikgICAgICAgICAgICgoZ3Bpb19pbmZvX3B0ciktPmV4dHJhKQ0KKw0KKy8qKiBNZXRob2Qgb2YgYWxsIGdwaW8gYml0cyBzZXQgdG8gcG9sbCAqLw0KKyNkZWZpbmUgREVWX0dQSU9fQklUU19NVEhEX1BPTEwgICAgICAgICAoMCkNCisvKiogTWV0aG9kIG9mIGFsbCBncGlvIGJpdHMgc2V0IHRvIGludGVycnVwdCAqLw0KKyNkZWZpbmUgREVWX0dQSU9fQklUU19NVEhEX0lOVEVSUlVQVCAgICAgICAgKDB4RkZGRkZGRkYpDQorLyoqIERlZmF1bHQgbWV0aG9kIG9mIGFsbCBncGlvIGJpdHMgc2hvdWxkIGJlIHBvbGwgZm9yIGZpcnN0IG9wZW4gKi8NCisjZGVmaW5lIERFVl9HUElPX0JJVFNfTVRIRF9ERUZBVUxUICAgICAgKERFVl9HUElPX0JJVFNfTVRIRF9QT0xMKQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGdwaW8gZGV2aWNlIGludGVyZmFjZSBkZWZpbml0aW9uDQorICogXGRldGFpbHMgZGVmaW5lIGdwaW8gZGV2aWNlIGludGVyZmFjZSwgbGlrZSBncGlvIGluZm9ybWF0aW9uIHN0cnVjdHVyZSwNCisgKiAgZnVjdGlvbnMgdG8gb3Blbi9jbG9zZS9jb250cm9sIGdwaW8sIHdyaXRlIG9yIHJlYWQgZGF0YSB2aWEgZ3Bpbw0KKyAqIFxub3RlICAgIGFsbCB0aGlzIGRldGFpbHMgYXJlIGltcGxlbWVudGVkIGJ5IHVzZXIgaW4gdXNlciBwb3J0aW5nIGNvZGUNCisgKi8NCit0eXBlZGVmIHN0cnVjdCBkZXZfZ3Bpbw0KK3sNCisgICAgREVWX0dQSU9fSU5GTyBncGlvX2luZm87ICAgICAgICAvKiE8IGdwaW8gZGV2aWNlIGluZm9ybWF0aW9uICovDQorICAgIGludDMyX3QgKCpncGlvX29wZW4pKHVpbnQzMl90IGRpcik7ICAgICAvKiE8IG9wZW4gZ3BpbyBkZXZpY2Ugd2l0aCBwcmUtZGVmaW5lZCBncGlvIGRpcmVjdGlvbiAqLw0KKyAgICBpbnQzMl90ICgqZ3Bpb19jbG9zZSkodm9pZCk7ICAgICAgICAvKiE8IGNsb3NlIGdwaW8gZGV2aWNlICovDQorICAgIGludDMyX3QgKCpncGlvX2NvbnRyb2wpKHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSk7ICAgIC8qITwgY29udHJvbCBncGlvIGRldmljZSAqLw0KKyAgICBpbnQzMl90ICgqZ3Bpb193cml0ZSkodWludDMyX3QgdmFsLCB1aW50MzJfdCBtYXNrKTsgICAgIC8qITwgd3JpdGUgZ3BpbyBkZXZpY2Ugd2l0aCB2YWwsIG9ubHkgd3JpdGUgdGhlIG1hc2tlZCBiaXRzICovDQorICAgIGludDMyX3QgKCpncGlvX3JlYWQpKHVpbnQzMl90ICp2YWwsIHVpbnQzMl90IG1hc2spOyAgICAgLyohPCByZWFkIGdwaW8gZGV2aWNlIHZhbCwgb25seSByZWFkIHRoZSBtYXNrZWQgYml0cyAqLw0KK30gREVWX0dQSU8sICogREVWX0dQSU9fUFRSOw0KKw0KKy8qKg0KKyAqIFxmbiAgICAgIGludDMyX3QgKCogZGV2X2dwaW86OmdwaW9fb3BlbikgKHVpbnQzMl90IGRpcikNCisgKiBcZGV0YWlscyBPcGVuIGEgZ3BpbyBkZXZpY2Ugd2l0aCBwcmUtZGVmaW5lZCBpbyBkaXJlY3Rpb24uDQorICogXHBhcmFtW2luXSAgIGRpciBncGlvIGRpcmVjdGlvbiBmb3IgZWFjaCBiaXQNCisgKiBccmV0dmFsICBFX09LICAgIE9wZW4gc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgYW55IGlzc3Vlcw0KKyAqIFxyZXR2YWwgIEVfT1BORUQgSWYgZGV2aWNlIHdhcyBvcGVuZWQgYmVmb3JlIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMsDQorICogICAgICAgICAgdGhlbiBqdXN0IGluY3JlYXNlIHRoZSBccmVmIGRldl9ncGlvX2luZm86Om9wbl9jbnQgIm9wbl9jbnQiIGFuZCByZXR1cm4gXHJlZiBFX09QTkVEDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZA0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZA0KKyAqIFxyZXR2YWwgIEVfTk9TUFQgT3BlbiBzZXR0aW5ncyBhcmUgbm90IHN1cHBvcnRlZA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmbiAgICAgIGludDMyX3QgKCogZGV2X2dwaW86OmdwaW9fY2xvc2UpICh2b2lkKQ0KKyAqIFxkZXRhaWxzIENsb3NlIGFuIGdwaW8gZGV2aWNlLCBqdXN0IGRlY3JlYXNlIHRoZSBccmVmIGRldl9ncGlvX2luZm86Om9wbl9jbnQgIm9wbl9jbnQiLA0KKyAqICAgICAgaWYgXHJlZiBkZXZfZ3Bpb19pbmZvOjpvcG5fY250ICJvcG5fY250IiBlcXVhbHMgMCwgdGhlbiBjbG9zZSB0aGUgZGV2aWNlDQorICogXHJldHZhbCAgRV9PSyAgICBDbG9zZSBzdWNjZXNzZnVsbHkgd2l0aG91dCBhbnkgaXNzdWVzKGluY2x1ZGluZyBzY2VuYXJpbyB0aGF0IGRldmljZSBpcyBhbHJlYWR5IGNsb3NlZCkNCisgKiBccmV0dmFsICBFX09QTkVEIERldmljZSBpcyBzdGlsbCBvcGVuZWQsIHRoZSBkZXZpY2UgXHJlZiBkZXZfZ3Bpb19pbmZvOjpvcG5fY250ICJvcG5fY250IiBkZWNyZWFzZWQgYnkgMQ0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQNCisgKi8NCisNCisvKioNCisgKiBcZm4gICAgICBpbnQzMl90ICgqIGRldl9ncGlvOjpncGlvX2NvbnRyb2wpICh1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pDQorICogXGRldGFpbHMgQ29udHJvbCBhbiBncGlvIGRldmljZSBieSBccmVmIGN0cmxfY21kLCB3aXRoIHBhc3NlZCBccmVmIHBhcmFtLg0KKyAqICB5b3UgY2FuIGNvbnRyb2wgZ3BpbyBkZXZpY2UgdXNpbmcgcHJlZGVmaW5lZCBncGlvIGNvbnRyb2wgY29tbWFuZHMgZGVmaW5lZCB1c2luZyBccmVmIERFVl9TRVRfU1lTQ01EDQorICogICh3aGljaCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGJzcCBkZXZlbG9wZXIpLCBzdWNoIGFzIFxyZWYgR1BJT19DTURfU0VUX0JJVF9ESVJfSU5QVVQNCisgKiAgImNoYW5nZSBtYXNrZWQgZ3BpbyBkaXJlY3Rpb24gdG8gaW5wdXQiLCBhbmQgXHJlZiBERVZJQ0VfSEFMX0dQSU9fQ1RSTENNRCAibW9yZSIuDQorICogIEFuZCB5b3UgY2FuIGFsc28gY29udHJvbCBncGlvIGRldmljZSB1c2luZyB5b3VyIG93biBzcGVjaWZpZWQgY29tbWFuZHMgZGVmaW5lZCB1c2luZyBccmVmIERFVl9TRVRfVVNSQ01ELA0KKyAqICBidXQgdGhlc2Ugc3BlY2lmaWVkIGNvbW1hbmRzIHNob3VsZCBiZSBkZWZpbmVkIGluIHlvdXIgb3duIGdwaW8gZGV2aWNlIGRyaXZlciBpbXBsZW1lbnRhdGlvbi4NCisgKiBccGFyYW1baW5dICAgICAgIGN0cmxfY21kICAgIFxyZWYgREVWSUNFX0hBTF9HUElPX0NUUkxDTUQgImNvbnRyb2wgY29tbWFuZCIsIHRvIGNoYW5nZSBvciBnZXQgc29tZSB0aGluZyByZWxhdGVkIHRvIGdwaW8NCisgKiBccGFyYW1baW4sb3V0XSAgIHBhcmFtICAgICAgIHBhcmFtZXRlcnMgdGhhdCBtYXliZSBhcmd1bWVudCBvZiB0aGUgY29tbWFuZCwgb3IgcmV0dXJuIHZhbHVlcyBvZiB0aGUgY29tbWFuZA0KKyAqIFxyZXR2YWwgIEVfT0sgICAgQ29udHJvbCBkZXZpY2Ugc3VjY2Vzc2Z1bGx5DQorICogXHJldHZhbCAgRV9DTFNFRCBEZXZpY2UgaXMgbm90IG9wZW5lZA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZCBmb3IgY3VycmVudCBjb250cm9sIGNvbW1hbmQNCisgKiBccmV0dmFsICBFX1NZUyAgIENvbnRyb2wgZGV2aWNlIGZhaWxlZCwgZHVlIHRvIGhhcmR3YXJlIGlzc3Vlcw0KKyAqIFxyZXR2YWwgIEVfQ1RYICAgQ29udHJvbCBkZXZpY2UgZmFpbGVkLCBkdWUgdG8gZGlmZmVyZW50IHJlYXNvbnMgbGlrZSBpbiB0cmFuc2ZlciBzdGF0ZQ0KKyAqIFxyZXR2YWwgIEVfTk9TUFQgQ29udHJvbCBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQgb3Igbm90IHZhbGlkLCBzdWNoIGFzIGludGVycnVwdCBpcyBub3Qgc3VwcG9ydGVkDQorICovDQorDQorLyoqDQorICogXGZuICAgICAgaW50MzJfdCAoKiBkZXZfZ3Bpbzo6Z3Bpb193cml0ZSkgKHVpbnQzMl90IHZhbCwgdWludDMyX3QgbWFzaykNCisgKiBcZGV0YWlscyBXcml0ZSBncGlvIHdpdGggXHJlZiB2YWwsIGFuZCBvbmx5IGNoYW5nZSB0aGUgbWFza2VkIGJpdHMgb2YgZ3Bpby4NCisgKiBccGFyYW1baW5dICAgdmFsIHRoZSBkYXRhIHRoYXQgbmVlZCB0byB3cml0ZSB0byBncGlvDQorICogXHBhcmFtW2luXSAgIG1hc2sgICAgZ3BpbyBiaXQgbWFzaw0KKyAqIFxyZXR2YWwgIEVfT0sgICAgV3JpdGUgZ3BpbyB3aXRoIHNwZWNpZmllZCB2YWx1ZSBzdWNjZXNzZnVsbHkNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkIG9yIG5vdCBleGlzdHMNCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQNCisgKi8NCisNCisvKioNCisgKiBcZm4gICAgICBpbnQzMl90ICgqIGRldl9ncGlvOjpncGlvX3JlYWQpICh1aW50MzJfdCAqdmFsLCB1aW50MzJfdCBtYXNrKQ0KKyAqIFxkZXRhaWxzIFJlYWQgdGhlIG1hc2tlZCBncGlvIHZhbHVlDQorICogXHBhcmFtW291dF0gIHZhbCBwb2ludGVyIHRvIGRhdGEgbmVlZCB0byByZWFkIGZyb20gZ3Bpbw0KKyAqIFxwYXJhbVtpbl0gICBtYXNrICAgIGdwaW8gYml0IG1hc2sNCisgKiBccmV0dmFsICBFX09LICAgIFJlYWQgZ3BpbyBkYXRhIHN1Y2Nlc3NmdWxseQ0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZA0KKyAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGdldCBhbiBccmVmIGRldl9ncGlvICJncGlvIGRldmljZSIgYnkgZ3BpbyBkZXZpY2UgaWQuDQorICogIEZvciBob3cgdG8gdXNlIGdwaW8gZGV2aWNlIGhhbCByZWZlciB0byBccmVmIGRldl9ncGlvICJGdW5jdGlvbnMgaW4gZ3BpbyBkZXZpY2Ugc3RydWN0dXJlIg0KKyAqIFxwYXJhbVtpbl0gICBncGlvX2lkIGlkIG9mIGdwaW8sIGRlZmluZWQgYnkgdXNlcg0KKyAqIFxyZXR2YWwgICFOVUxMICAgcG9pbnRlciB0byBhbiBccmVmIGRldl9ncGlvICJncGlvIGRldmljZSBzdHJ1Y3R1cmUiDQorICogXHJldHZhbCAgTlVMTCAgICBmYWlsZWQgdG8gZmluZCB0aGUgZ3BpbyBkZXZpY2UgYnkgXHJlZiBncGlvX2lkDQorICogXG5vdGUgICAgbmVlZCB0byBpbXBsZW1lbnRlZCBieSB1c2VyIGluIHVzZXIgY29kZQ0KKyAqLw0KK2V4dGVybiBERVZfR1BJT19QVFIgZ3Bpb19nZXRfZGV2KGludDMyX3QgZ3Bpb19pZCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKy8qKiBAfSAqLw0KKyNlbmRpZiAvKiBfREVWSUNFX0hBTF9HUElPX0hfICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfc3BpLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjJkZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfc3BpLmgKQEAgLTAsMCArMSw1ODIgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTQtMDYtMTYNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfU1BJICBTUEkgRGV2aWNlIEhBTCBJbnRlcmZhY2UNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX0RFRg0KKyAqIFxicmllZiAgIGRlZmluaXRpb25zIGZvciBzcGkgZGV2aWNlIGhhcmR3YXJlIGxheWVyIChccmVmIGRldl9zcGkuaCkNCisgKiBcZGV0YWlscyBwcm92aWRlIGludGVyZmFjZXMgZm9yIHNwaSBkcml2ZXIgdG8gaW1wbGVtZW50DQorICogIEhlcmUgaXMgYSBkaWFncmFtIGZvciB0aGUgc3BpIGludGVyZmFjZS4NCisgKg0KKyAqICBcaHRtbG9ubHkNCisgKiAgPGRpdiBjbGFzcz0iaW1hZ2Vib3giPg0KKyAqICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDYwMHB4Ij4NCisgKiAgICAgICAgICA8aW1nIHNyYz0icGljL2Rldl9zcGlfaGFsLmpwZyIgYWx0PSJTUEkgRGV2aWNlIEhBTCBJbnRlcmZhY2UgRGlhZ3JhbSIvPg0KKyAqICAgICAgICAgIDxwPlNQSSBEZXZpY2UgSEFMIEludGVyZmFjZSBEaWFncmFtPC9wPg0KKyAqICAgICAgPC9kaXY+DQorICogIDwvZGl2Pg0KKyAqICBcZW5kaHRtbG9ubHkNCisgKg0KKyAqIEB7DQorICoNCisgKiBcZmlsZQ0KKyAqIFxicmllZiAgIHNwaSBkZXZpY2UgaGFyZHdhcmUgbGF5ZXIgZGVmaW5pdGlvbnMNCisgKiBcZGV0YWlscyBwcm92aWRlIGNvbW1vbiBkZWZpbml0aW9ucyBmb3Igc3BpIGRldmljZSwNCisgKiAgdGhlbiBzb2Z0d2FyZSBkZXZlbG9wZXIgY2FuIGRldmVsb3Agc3BpIGRyaXZlcg0KKyAqICBmb2xsb3dpbmcgdGhpcyBkZWZpbml0aW9ucywgYW5kIHRoZSBhcHBsaWNhdGlvbnMNCisgKiAgY2FuIGRpcmVjdGx5IGNhbGwgdGhpcyBkZWZpbml0aW9uIHRvIHJlYWxpemUgZnVuY3Rpb25zDQorICovDQorDQorI2lmbmRlZiBfREVWSUNFX0hBTF9TUElfSF8NCisjZGVmaW5lIF9ERVZJQ0VfSEFMX1NQSV9IXw0KKw0KKyNpbmNsdWRlICJkZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X2NvbW1vbi5oIg0KKw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX1NQSV9DVFJMQ01EICAgICAgU1BJIERldmljZSBDb250cm9sIENvbW1hbmRzDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9TUEkNCisgKiBcYnJpZWYgICBEZWZpbml0aW9ucyBmb3Igc3BpIGNvbnRyb2wgY29tbWFuZCwgdXNlZCBpbiBccmVmIGRldl9zcGk6OnNwaV9jb250cm9sICJTUEkgSU8gQ29udHJvbCINCisgKiBcZGV0YWlscyBUaGVzZSBjb21tYW5kcyBkZWZpbmVkIGhlcmUgY2FuIGJlIHVzZWQgaW4gdXNlciBjb2RlIGRpcmVjdGx5Lg0KKyAqIC0gUGFyYW1ldGVycyBVc2FnZQ0KKyAqICAgLSBGb3IgcGFzc2luZyBwYXJhbWV0ZXJzIGxpa2UgaW50ZWdlciwganVzdCB1c2UgdWludDMyX3QvaW50MzJfdCB0byBkaXJlY3RseSBwYXNzIHZhbHVlcw0KKyAqICAgLSBGb3IgcGFzc2luZyBwYXJhbWV0ZXJzIGZvciBhIHN0cnVjdHVyZSwgcGxlYXNlIHVzZSBwb2ludGVyIHRvIHBhc3MgdmFsdWVzDQorICogICAtIEZvciBnZXR0aW5nIHNvbWUgZGF0YSwgcGxlYXNlIHVzZSBwb2ludGVyIHRvIHN0b3JlIHRoZSByZXR1cm4gZGF0YQ0KKyAqIC0gQ29tbW9uIFJldHVybiBWYWx1ZXMNCisgKiAgIC0gXHJlZiBFX09LLCAgIENvbnRyb2wgZGV2aWNlIHN1Y2Nlc3NmdWxseQ0KKyAqICAgLSBccmVmIEVfQ0xTRUQsICAgIERldmljZSBpcyBub3Qgb3BlbmVkDQorICogICAtIFxyZWYgRV9PQkosICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZCBvciBub3QgZXhpc3RzDQorICogICAtIFxyZWYgRV9QQVIsICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkIGZvciBjdXJyZW50IGNvbnRyb2wgY29tbWFuZA0KKyAqICAgLSBccmVmIEVfU1lTLCAgQ29udHJvbCBkZXZpY2UgZmFpbGVkLCBkdWUgdG8gaGFyZHdhcmUgaXNzdWVzIHN1Y2ggYXMgZGV2aWNlIGlzIGRpc2FibGVkDQorICogICAtIFxyZWYgRV9DVFgsICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBkaWZmZXJlbnQgcmVhc29ucyBsaWtlIGluIHRyYW5zZmVyIHN0YXRlDQorICogICAtIFxyZWYgRV9OT1NQVCwgICAgQ29udHJvbCBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQgb3Igbm90IHZhbGlkDQorICogLSBVc2FnZSBDb21tZW50DQorICogICAtIEZvciBTUEkgcG9sbCBvciBpbnRlcnJ1cHQgcmVhZC93cml0ZS90cmFuc2ZlciBvcGVyYXRpb25zLCBvbmx5IDEgb3BlcmF0aW9uIGNhbiBiZSB0cmlnZ2VyZWQuDQorICogICAgIElmIHRoZXJlIGlzIGEgb3BlcmF0aW9uIGlzIHJ1bm5pbmcsIGFueSBvdGhlciBvcGVyYXRpb24gd2lsbCByZXR1cm4gXHJlZiBFX0NUWA0KKyAqICAgLSBJZiBTUEkgaXMgaW4gdHJhbnNmZXIsIHRoZW4gdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIG1heSByZXR1cm4gXHJlZiBFX0NUWC4gTGlrZQ0KKyAqICAgICBccmVmIFNQSV9DTURfU0VUX0NMS19NT0RFLCBccmVmIFNQSV9DTURfU0VUX1RYSU5UX0JVRiwgXHJlZiBTUElfQ01EX1NFVF9SWElOVF9CVUYsDQorICogICAgIFxyZWYgU1BJX0NNRF9TRVRfVFhJTlQsIFxyZWYgU1BJX0NNRF9TRVRfUlhJTlQsIFxyZWYgU1BJX0NNRF9BQk9SVF9UWCwgXHJlZiBTUElfQ01EX0FCT1JUX1JYLA0KKyAqICAgICBccmVmIFNQSV9DTURfRkxVU0hfVFgsIFxyZWYgU1BJX0NNRF9GTFVTSF9SWCwgXHJlZiBTUElfQ01EX1NFVF9ERlMsIFxyZWYgU1BJX0NNRF9UUkFOU0ZFUl9QT0xMSU5HLA0KKyAqICAgICBccmVmIFNQSV9DTURfVFJBTlNGRVJfSU5ULCBccmVmIFNQSV9DTURfQUJPUlRfWEZFUiwgXHJlZiBTUElfQ01EX01TVF9TRUxfREVWLCBccmVmIFNQSV9DTURfTVNUX0RTRUxfREVWLA0KKyAqICAgICBccmVmIFNQSV9DTURfTVNUX1NFVF9GUkVRIGFuZCBccmVmIGRldl9zcGk6OnNwaV93cml0ZSAiU1BJIFBvbGwgV3JpdGUiIG9yIFxyZWYgZGV2X3NwaTo6c3BpX3JlYWQgIlNQSSBQb2xsIFJlYWQiLg0KKyAqIEB7DQorICovDQorDQorLyoqIERlZmluZSBTUEkgY29udHJvbCBjb21tYW5kcyBmb3IgY29tbW9uIHVzYWdlICovDQorI2RlZmluZSBERVZfU0VUX1NQSV9TWVNDTUQoY21kKSAgICAgREVWX1NFVF9TWVNDTUQoKGNtZCkpDQorLyoqIERlZmluZSBTUEkgY29udHJvbCBjb21tYW5kcyBmb3IgbWFzdGVyIHVzYWdlICovDQorI2RlZmluZSBERVZfU0VUX1NQSV9NU1RfU1lTQ01EKGNtZCkgREVWX1NFVF9TWVNDTUQoMHgwMDAwMTAwMHwoY21kKSkNCisvKiogRGVmaW5lIFNQSSBjb250cm9sIGNvbW1hbmRzIGZvciBzbGF2ZSB1c2FnZSAqLw0KKyNkZWZpbmUgREVWX1NFVF9TUElfU0xWX1NZU0NNRChjbWQpIERFVl9TRVRfU1lTQ01EKDB4MDAwMDIwMDB8KGNtZCkpDQorDQorDQorLyogKysrKyBDb21tb24gY29tbWFuZHMgZm9yIFNQSSBEZXZpY2UgKysrKyAqLw0KKy8qKg0KKyAqIEdldCBccmVmIGRldl9zcGlfaW5mbzo6c3RhdHVzICJjdXJyZW50IGRldmljZSBzdGF0dXMiDQorICogLSBQYXJhbSB0eXBlIDogdWludDMyX3QgKg0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBzdG9yZSByZXN1bHQgb2YgY3VycmVudCBzdGF0dXMNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX0dFVF9TVEFUVVMgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDApDQorLyoqDQorICogc2V0IHRoZSBccmVmIGRldl9zcGlfaW5mbzo6Y2xrX21vZGUgImNsb2NrIG1vZGUiIG9mIHNwaSB0cmFuc2Zlcg0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IHNwaSBjbG9jayBtb2RlIHRvIGNob29zZSBjbG9jayBwaGFzZSBhbmQgY2xvY2sgcG9sYXJpdHkNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX1NFVF9DTEtfTU9ERSAgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgxKQ0KKy8qKg0KKyAqIHNldCBzcGkgXHJlZiBkZXZfc3BpX2luZm86OmRmcyAiZGF0YSBmcmFtZSBzaXplIg0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IHNob3VsZCA+IDANCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6IElmIGRmcyBpcyBub3Qgc3VwcG9ydGVkLCB0aGVuIHJldHVybiBccmVmIEVfU1lTDQorICovDQorI2RlZmluZSBTUElfQ01EX1NFVF9ERlMgICAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDIpDQorLyoqDQorICogc2V0IHRoZSBccmVmIGRldl9zcGlfaW5mbzo6ZHVtbXkgImR1bW15IGRhdGEiIGR1cmluZyBzcGkgdHJhbnNmZXINCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBkdW1teSBkYXRhIHRvIHRyYW5zZmVyDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9TRVRfRFVNTVlfREFUQSAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMykNCisvKioNCisgKiBTZXQgXHJlZiBkZXZfc3BpX2Niczo6dHhfY2IgInNwaSB0cmFuc21pdCBzdWNjZXNzIGNhbGxiYWNrIiBmdW5jdGlvbg0KKyAqIHdoZW4gYWxsIHJlcXVpcmVkIGJ5dGVzIGFyZSB0cmFuc21pdHRlZCBmb3IgaW50ZXJydXB0IG1ldGhvZA0KKyAqIC0gUGFyYW0gdHlwZSA6IFxyZWYgREVWX0NBTExCQUNLICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiB0cmFuc21pdCBzdWNjZXNzIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBzcGkNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX1NFVF9UWENCICAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDQpDQorLyoqDQorICogU2V0IFxyZWYgZGV2X3NwaV9jYnM6OnJ4X2NiICJzcGkgcmVjZWl2ZSBzdWNjZXNzIGNhbGxiYWNrIiBmdW5jdGlvbg0KKyAqIHdoZW4gYWxsIHJlcXVpcmVkIGJ5dGVzIGFyZSByZWNlaXZlZCBmb3IgaW50ZXJydXB0IG1ldGhvZA0KKyAqIC0gUGFyYW0gdHlwZSA6IFxyZWYgREVWX0NBTExCQUNLICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiByZWNlaXZlIHN1Y2Nlc3MgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHNwaQ0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfU0VUX1JYQ0IgICAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoNSkNCisvKioNCisgKiBTZXQgXHJlZiBkZXZfc3BpX2Niczo6eGZlcl9jYiAic3BpIHRyYW5zZmVyIHN1Y2Nlc3MgY2FsbGJhY2siIGZ1bmN0aW9uDQorICogd2hlbiBhbGwgcmVxdWlyZWQgdHJhbnNmZXIgYXJlIGRvbmUgZm9yIGludGVycnVwdCBtZXRob2QNCisgKiAtIFBhcmFtIHR5cGUgOiBccmVmIERFVl9DQUxMQkFDSyAqIG9yIE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDogdHJhbnNmZXIgc3VjY2VzcyBjYWxsYmFjayBmdW5jdGlvbiBmb3Igc3BpDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9TRVRfWEZFUkNCICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCg2KQ0KKy8qKg0KKyAqIFNldCBccmVmIGRldl9zcGlfY2JzOjplcnJfY2IgInNwaSB0cmFuc2ZlciBlcnJvciBjYWxsYmFjayIgZnVuY3Rpb24NCisgKiB3aGVuIHNvbWV0aGluZyBlcnJvciBoYXBwZW5lZCBmb3IgaW50ZXJydXB0IG1ldGhvZA0KKyAqIC0gUGFyYW0gdHlwZSA6IFxyZWYgREVWX0NBTExCQUNLICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiB0cmFuc2ZlciBlcnJvciBjYWxsYmFjayBmdW5jdGlvbiBmb3Igc3BpDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9TRVRfRVJSQ0IgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCg3KQ0KKy8qKg0KKyAqIFNldCBidWZmZXIgaW4gaW50ZXJydXB0IHRyYW5zbWl0LCBhbmQgaXQgd2lsbCBzZXQgXHJlZiBkZXZfc3BpX2luZm86OnhmZXIgInNwaSB0cmFuZmVyIi4NCisgKiAtIFNQSSBtYXN0ZXIgYW5kIHNsYXZlIG1vZGUgdXNlIGNhc2UgIFxuDQorICogICAgRm9yIGJvdGggbWFzdGVyIGFuZCBzbGF2ZSBtb2RlLCBpZiB5b3Ugc2V0IHR4IGJ1ZmZlciB0byBOVUxMLCB3aGVuIHR4IGludGVycnVwdCBpcyBlbmFibGVkIGFuZCBlbnRlcmVkIGludG8gdHggaW50ZXJydXB0LA0KKyAqIGl0IHdpbGwgYXV0b21hdGljYWxseSBkaXNhYmxlIHRoZSB0eCBpbnRlcnJ1cHQsIHNvIHdoZW4geW91IHdhbnQgdG8gdHJhbnNmZXIgc29tZXRoaW5nLCB5b3UgbmVlZCB0byBzZXQgdGhlDQorICogdHggYnVmZmVyIHRvIE5vbi1OVUxMIGFuZCBlbmFibGUgdHggaW50ZXJydXB0LCB3aGVuIHRoZSB0eCBidWZmZXIgaXMgc2VudCwgaXQgd2lsbCBkaXNhYmxlIHRoZSB0eCBpbnRlcnJ1cHQNCisgKiBhbmQgY2FsbCB0eCBjYWxsYmFjayBmdW5jdGlvbiBpZiBhdmFpbGFibGUuDQorICogLSBQYXJhbSB0eXBlIDogREVWX0JVRkZFUiAqIG9yIE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDogYnVmZmVyIHN0cnVjdHVyZSBwb2ludGVyLCBpZiBwYXJhbSBpcyBOVUxMLCB0aGVuIGl0IHdpbGwgc2V0IHhmZXIgdG8gZW1wdHkNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX1NFVF9UWElOVF9CVUYgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCg4KQ0KKy8qKg0KKyAqIFNldCBidWZmZXIgaW4gaW50ZXJydXB0IHJlY2VpdmUsIGFuZCBpdCB3aWxsIHNldCBccmVmIGRldl9zcGlfaW5mbzo6eGZlciAic3BpIHRyYW5mZXIiLg0KKyAqIC0gU1BJIG1hc3RlciBtb2RlIHVzZSBjYXNlICBcbg0KKyAqICAgU2ltaWxhciB0byBccmVmIFNQSV9DTURfU0VUX1RYSU5UX0JVRg0KKyAqIC0gU1BJIHNsYXZlIG1vZGUgdXNlIGNhc2UgICBcbg0KKyAqICAgU2ltaWxpYXIgdG8gXHJlZiBTUElfQ01EX1NFVF9UWElOVF9CVUYNCisgKiAtIFBhcmFtIHR5cGUgOiBERVZfQlVGRkVSICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBidWZmZXIgc3RydWN0dXJlIHBvaW50ZXIsIGlmIHBhcmFtIGlzIE5VTEwsIHRoZW4gaXQgd2lsbCBzZXQgeGZlciB0byBlbXB0eQ0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfU0VUX1JYSU5UX0JVRiAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDkpDQorLyoqDQorICogRW5hYmxlIG9yIGRpc2FibGUgdHJhbnNtaXQgaW50ZXJydXB0LA0KKyAqIGZvciBtYXN0ZXIgbW9kZSwgb25seSBvbmUgb2YgdHggYW5kIHJ4IGludGVycnVwdCBjYW4gYmUgZW5hYmxlZCwNCisgKiBpZiB0eCBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgdGhlbiByeCBpbnRlcnJ1cHQgY2FuJ3QgYmUgZW5hYmxlZC4NCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBlbmFibGUobm9uZS16ZXJvKSBvciBkaXNhYmxlKHplcm8pIGZsYWcNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX1NFVF9UWElOVCAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDEwKQ0KKy8qKg0KKyAqIEVuYWJsZSBvciBkaXNhYmxlIHJlY2VpdmUgaW50ZXJydXB0LA0KKyAqIGZvciBtYXN0ZXIgbW9kZSwgb25seSBvbmUgb2YgdHggYW5kIHJ4IGludGVycnVwdCBjYW4gYmUgZW5hYmxlZCwNCisgKiBpZiByeCBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgdGhlbiB0eCBpbnRlcnJ1cHQgY2FuJ3QgYmUgZW5hYmxlZC4NCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBlbmFibGUobm9uZS16ZXJvKSBvciBkaXNhYmxlKHplcm8pIGZsYWcNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX1NFVF9SWElOVCAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDExKQ0KKy8qKg0KKyAqIHN0YXJ0IHRoZSB0cmFuc2ZlciBieSBwb2xsaW5nDQorICogLSBQYXJhbSB0eXBlIDogXHJlZiBERVZfU1BJX1RSQU5TRkVSICoNCisgKiAtIFBhcmFtIHVzYWdlIDoNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX1RSQU5TRkVSX1BPTExJTkcgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgxMikNCisvKioNCisgKiBzdGFydCB0aGUgdHJhbnNmZXIgYnkgaW50ZXJydXB0DQorICogLSBQYXJhbSB0eXBlIDogXHJlZiBERVZfU1BJX1RSQU5TRkVSICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBJZiBOVUxMLCBpdCB3aWxsIGRpc2FibGUgdHJhbnNmZXIgaW50ZXJydXB0LCBpZiBub3QgTlVMTCwgaXQgd2lsbCBlbmFibGUgdHJhbnNmZXIgaW50ZXJydXB0DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9UUkFOU0ZFUl9JTlQgICAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMTMpDQorLyoqDQorICogQWJvcnQgY3VycmVudCBpbnRlcnJ1cHQgdHJhbnNtaXQgb3BlcmF0aW9uIGlmIHR4IGludGVycnVwdCBlbmFibGVkLA0KKyAqIGl0IHdpbGwgZGlzYWJsZSB0cmFuc21pdCBpbnRlcnJ1cHQsIGFuZCBzZXQgXHJlZiBERVZfSU5fVFhfQUJSVA0KKyAqIGluIFxyZWYgZGV2X3NwaV9pbmZvOjpzdGF0dXMgInN0YXR1cyIgdmFyaWFibGUsDQorICogYW5kIGNhbGwgdGhlIHRyYW5zbWl0IGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGVuIHR4IGNhbGxiYWNrIGlzIGZpbmlzaGVkLA0KKyAqIGl0IHdpbGwgY2xlYXIgXHJlZiBERVZfSU5fVFhfQUJSVCBhbmQgcmV0dXJuDQorICogLSBQYXJhbSB0eXBlIDogTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOg0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfQUJPUlRfVFggICAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMTQpDQorLyoqDQorICogQWJvcnQgY3VycmVudCBpbnRlcnJ1cHQgcmVjZWl2ZSBvcGVyYXRpb24gaWYgcnggaW50ZXJydXB0IGVuYWJsZWQsDQorICogaXQgd2lsbCBkaXNhYmxlIHJlY2VpdmUgaW50ZXJydXB0LCBhbmQgc2V0IFxyZWYgREVWX0lOX1RYX0FCUlQNCisgKiBpbiBccmVmIGRldl9zcGlfaW5mbzo6c3RhdHVzICJzdGF0dXMiIHZhcmlhYmxlLA0KKyAqIGFuZCBjYWxsIHRoZSByZWNlaXZlIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGVuIHJ4IGNhbGxiYWNrIGlzIGZpbmlzaGVkLA0KKyAqIGl0IHdpbGwgY2xlYXIgXHJlZiBERVZfSU5fVFhfQUJSVCBhbmQgcmV0dXJuDQorICogLSBQYXJhbSB0eXBlIDogTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOg0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfQUJPUlRfUlggICAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMTUpDQorLyoqDQorICogQWJvcnQgY3VycmVudCBpbnRlcnJ1cHQgdHJhbnNmZXIgb3BlcmF0aW9uIGlmIHRyYW5zZmVyIGlzIGlzc3VlZCwNCisgKiBpdCB3aWxsIGRpc2FibGUgdHJhbnNmZXIgaW50ZXJydXB0LCBhbmQgc2V0IFxyZWYgREVWX0lOX1hGRVJfQUJSVA0KKyAqIGluIFxyZWYgZGV2X3NwaV9pbmZvOjpzdGF0dXMgInN0YXR1cyIgdmFyaWFibGUsDQorICogYW5kIGNhbGwgdGhlIHRyYW5zZmVyIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGVuIHhmZXIgY2FsbGJhY2sgaXMgZmluaXNoZWQsDQorICogaXQgd2lsbCBjbGVhciBccmVmIERFVl9JTl9YRkVSX0FCUlQgYW5kIHJldHVybg0KKyAqIC0gUGFyYW0gdHlwZSA6IE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDoNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX0FCT1JUX1hGRVIgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDE2KQ0KKy8qKg0KKyAqIERvIGEgc29mdHdhcmUgcmVzZXQgZm9yIFNQSSBkZXZpY2UsIGl0IHdpbGwgc3RvcCBjdXJyZW50IHRyYW5zZmVyLA0KKyAqIGFuZCBjbGVhciBlcnJvciBzdGF0ZSBhbmQgYnJpbmcgZGV2aWNlIHRvIG5vcm1hbCBzdGF0ZSwgc2V0IG5leHQgY29uZGl0aW9uIHRvIFNUT1ANCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9SRVNFVCAgICAgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgxNykNCisvKioNCisgKiBGbHVzaCBzcGkgdHggZmlmbywgdGhpcyB3aWxsIGNsZWFyIHRoZSBkYXRhIGluIHR4IGZpZm8NCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9GTFVTSF9UWCAgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgxOCkNCisvKioNCisgKiBGbHVzaCBzcGkgcnggZmlmbywgdGhpcyB3aWxsIGNsZWFyIHRoZSBkYXRhIGluIHJ4IGZpZm8NCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9GTFVTSF9SWCAgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgxOSkNCisvKioNCisgKiBFbmFibGUgc3BpIGRldmljZQ0KKyAqIC0gUGFyYW0gdHlwZSA6IE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDogcGFyYW0gaXMgbm90IHJlcXVpcmVkDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9FTkFfREVWICAgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgyMCkNCisvKioNCisgKiBEaXNhYmxlIHNwaSBkZXZpY2UsIHdoZW4gZGV2aWNlIGlzIGRpc2FibGVkLA0KKyAqIG9ubHkgXHJlZiBTUElfQ01EX0VOQV9ERVYsIFxyZWYgU1BJX0NNRF9ESVNfREVWLA0KKyAqIFxyZWYgU1BJX0NNRF9HRVRfU1RBVFVTIGFuZCBccmVmIFNQSV9DTURfUkVTRVQNCisgKiBjb21tYW5kcyBjYW4gYmUgZXhlY3V0ZWQsIG90aGVyIGNvbW1hbmRzIHdpbGwgcmV0dXJuIFxyZWYgRV9TWVMNCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IHBhcmFtIGlzIG5vdCByZXF1aXJlZA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfRElTX0RFViAgICAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMjEpDQorLyoqDQorICogR2V0IGhvdyBtYW55IGJ5dGVzIHNwYWNlIGluIHNwaSBhcmUgYXZhaWxhYmxlIHRvIHRyYW5zbWl0LA0KKyAqIHRoaXMgY2FuIGJlIHVzZWQgaW4gaW50ZXJydXB0IGNhbGxiYWNrIGZ1bmN0aW9ucywNCisgKiBjb29wZXJhdGUgd2l0aCBccmVmIGRldl9zcGk6OnNwaV93cml0ZSAic3BpX3dyaXRlIiBBUEkgdG8gcmVhbGl6ZSBub24tYmxvY2tlZCB3cml0ZQ0KKyAqIC0gUGFyYW0gdHlwZSA6IGludDMyX3QgKg0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBzdG9yZSB0aGUgd3JpdGUgYXZhaWxhYmxlIGJ5dGVzLCA+IDAgZm9yIGF2YWlsYWJsZSBieXRlcywgMCBmb3Igbm90IGF2YWlsYWJsZQ0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfR0VUX1RYQVZBSUwgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMjIpDQorLyoqDQorICogR2V0IGhvdyBtYW55IGJ5dGVzIGluIHNwaSBhcmUgYXZhaWxhYmxlIHRvIHJlY2VpdmUsDQorICogdGhpcyBjYW4gYmUgdXNlZCBpbiBpbnRlcnJ1cHQgY2FsbGJhY2sgZnVuY3Rpb25zLA0KKyAqIGNvb3BlcmF0ZSB3aXRoIFxyZWYgZGV2X3NwaTo6c3BpX3JlYWQgInNwaV9yZWFkIiBBUEkgdG8gcmVhbGl6ZSBub24tYmxvY2tlZCByZWFkDQorICogLSBQYXJhbSB0eXBlIDogaW50MzJfdCAqDQorICogLSBQYXJhbSB1c2FnZSA6IHN0b3JlIHRoZSByZWFkIGF2YWlsYWJsZSBieXRlcywgPiAwIGZvciBhdmFpbGFibGUgYnl0ZXMsIDAgZm9yIG5vdCBhdmFpbGFibGUNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX0dFVF9SWEFWQUlMICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDIzKQ0KKw0KKw0KKy8qICsrKysgTWFzdGVyIG9ubHkgY29tbWFuZHMgZm9yIFNQSSBEZXZpY2UgKysrKyAqLw0KKy8qKg0KKyAqICBzZWxlY3Qgc3BpIHNsYXZlIGRldmljZQ0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IHRoZSBudW1iZXIgb2Ygc3BpIHNsYXZlIGRldmljZSB0byBzZWxlY3QNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6IHJldHVybiBccmVmIEVfU1lTIHdoZW4gc2VsZWN0aW9uIGNhbid0IGJlIGRvbmUsIHJldHVybiBccmVmIEVfQ1RYIGR1cmluZyB0cmFuc2Zlcg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9NU1RfU0VMX0RFViAgICAgICAgIERFVl9TRVRfU1BJX01TVF9TWVNDTUQoMCkNCisvKioNCisgKiAgZGUtc2VsZWN0IHNwaSBzbGF2ZSBkZXZpY2UNCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiB0aGUgbnVtYmVyIG9mIHNwaSBzbGF2ZSBkZXZpY2UgdG8gZGUtc2VsZWN0DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOiByZXR1cm4gXHJlZiBFX1NZUyB3aGVuIHNlbGVjdGlvbiBjYW4ndCBiZSBkb25lLCByZXR1cm4gXHJlZiBFX0NUWCBkdXJpbmcgdHJhbnNmZXINCisgKi8NCisjZGVmaW5lIFNQSV9DTURfTVNUX0RTRUxfREVWICAgICAgICAgICAgREVWX1NFVF9TUElfTVNUX1NZU0NNRCgxKQ0KKy8qKg0KKyogU2V0IFxyZWYgZGV2X3NwaV9pbmZvOjpmcmVxICJzcGkgZnJlcXVlbmN5Ii4NCisqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorKiAtIFBhcmFtIHVzYWdlIDogc3BpIGZyZXENCisqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDogbm8gcmV0dXJuDQorKi8NCisjZGVmaW5lIFNQSV9DTURfTVNUX1NFVF9GUkVRICAgICAgICAgICAgREVWX1NFVF9TUElfTVNUX1NZU0NNRCgyKQ0KKw0KKw0KKy8qICsrKysgU2xhdmUgb25seSBjb21tYW5kcyBmb3IgU1BJIERldmljZSArKysrICovDQorDQorLyogXHRvZG8gYWRkIHNwaSBzbGF2ZSByZWxhdGVkIENNRHMgKi8NCisNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9TUElfQ0FMTEJBQ0sgU1BJIEludGVycnVwdCBjYWxsYmFjayBmdW5jdGlvbnMNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX1NQSQ0KKyAqIFxicmllZiAgIGNhbGxiYWNrIGZ1bmN0aW9uIHN0cnVjdHVyZSBmb3IgU1BJIGRldmljZQ0KKyAqIEB7DQorICovDQordHlwZWRlZiBzdHJ1Y3QgZGV2X3NwaV9jYnMNCit7DQorICAgIERFVl9DQUxMQkFDSyB0eF9jYjsgLyohPCBzcGkgZGF0YSB0cmFuc21pdCBzdWNjZXNzIHJlcXVpcmVkIGJ5dGVzIGNhbGxiYWNrICovDQorICAgIERFVl9DQUxMQkFDSyByeF9jYjsgLyohPCBzcGkgZGF0YSByZWNlaXZlIHN1Y2Nlc3MgcmVxdWlyZWQgYnl0ZXMgY2FsbGJhY2sgKi8NCisgICAgREVWX0NBTExCQUNLIGVycl9jYjsgICAgLyohPCBzcGkgZXJyb3IgY2FsbGJhY2sgKi8NCisgICAgREVWX0NBTExCQUNLIHhmZXJfY2I7ICAgLyohPCB0cmFuc2ZlciBjYWxsYmFjayAqLw0KK30gREVWX1NQSV9DQlMsICpERVZfU1BJX0NCU19QVFI7DQorLyoqIEB9ICovDQorDQorLyoqIFNQSSBDbG9jayBNb2RlICovDQordHlwZWRlZiBlbnVtIHNwaV9jbGtfbW9kZQ0KK3sNCisgICAgU1BJX0NQT0xfMF9DUEhBXzAgPSAwLCAgLyohPCBJbmFjdGl2ZSBzdGF0ZSBvZiBzZXJpYWwgY2xvY2sgaXMgbG93LCBzZXJpYWwgY2xvY2sgdG9nZ2xlcyBpbiBtaWRkbGUgb2YgZmlyc3QgZGF0YSBiaXQgKi8NCisgICAgU1BJX0NQT0xfMF9DUEhBXzEgPSAxLCAgLyohPCBJbmFjdGl2ZSBzdGF0ZSBvZiBzZXJpYWwgY2xvY2sgaXMgbG93LCBzZXJpYWwgY2xvY2sgdG9nZ2xlcyBhdCBzdGFydCBvZiBmaXJzdCBkYXRhIGJpdCAgKi8NCisgICAgU1BJX0NQT0xfMV9DUEhBXzAgPSAyLCAgLyohPCBJbmFjdGl2ZSBzdGF0ZSBvZiBzZXJpYWwgY2xvY2sgaXMgaGlnaCwgc2VyaWFsIGNsb2NrIHRvZ2dsZXMgaW4gbWlkZGxlIG9mIGZpcnN0IGRhdGEgYml0ICovDQorICAgIFNQSV9DUE9MXzFfQ1BIQV8xID0gMywgIC8qITwgSW5hY3RpdmUgc3RhdGUgb2Ygc2VyaWFsIGNsb2NrIGlzIGhpZ2gsIHNlcmlhbCBjbG9jayB0b2dnbGVzIGF0IHN0YXJ0IG9mIGZpcnN0IGRhdGEgYml0ICovDQorDQorICAgIFNQSV9DTEtfTU9ERV8wICAgID0gU1BJX0NQT0xfMF9DUEhBXzAsICAvKiE8IEVxdWFsIHRvIFxyZWYgU1BJX0NQT0xfMF9DUEhBXzAgKi8NCisgICAgU1BJX0NMS19NT0RFXzEgICAgPSBTUElfQ1BPTF8wX0NQSEFfMSwgIC8qITwgRXF1YWwgdG8gXHJlZiBTUElfQ1BPTF8wX0NQSEFfMSAqLw0KKyAgICBTUElfQ0xLX01PREVfMiAgICA9IFNQSV9DUE9MXzFfQ1BIQV8wLCAgLyohPCBFcXVhbCB0byBccmVmIFNQSV9DUE9MXzFfQ1BIQV8wICovDQorICAgIFNQSV9DTEtfTU9ERV8zICAgID0gU1BJX0NQT0xfMV9DUEhBXzEgICAvKiE8IEVxdWFsIHRvIFxyZWYgU1BJX0NQT0xfMV9DUEhBXzEgKi8NCit9IFNQSV9DTEtfTU9ERTsNCisNCisjZGVmaW5lIFNQSV9DTEtfTU9ERV9ERUZBVUxUICAgIFNQSV9DUE9MXzBfQ1BIQV8wICAgLyohPCBEZWZhdWx0IFNQSSBkZXZpY2UgY2xvY2sgbW9kZSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX1NQSV9ERVZTVFJVQ1QgICAgU1BJIERldmljZSBTdHJ1Y3R1cmUNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX1NQSQ0KKyAqIFxicmllZiAgIGNvbnRhaW5zIGRlZmluaXRpb25zIG9mIHNwaSBkZXZpY2Ugc3RydWN0dXJlLg0KKyAqIFxkZXRhaWxzIHRoaXMgc3RydWN0dXJlIHdpbGwgYmUgdXNlZCBpbiB1c2VyIGltcGxlbWVudGVkIGNvZGUsIHdoaWNoIHdhcyBjYWxsZWQNCisgKiAgRGV2aWNlIERyaXZlciBJbXBsZW1lbnQgTGF5ZXIgZm9yIHNwaSB0byByZWFsaXplIGluIHVzZXIgY29kZS4NCisgKiBAew0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IGRldl9zcGlfdHJhbnNmZXIgREVWX1NQSV9UUkFOU0ZFUiwgKkRFVl9TUElfVFJBTlNGRVJfUFRSOw0KKy8qKg0KKyAqIFxicmllZiAgIHNwaSByZWFkIGFuZCB3cml0ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGJ5IFxyZWYgU1BJX0NNRF9UUkFOU0ZFUg0KKyAqICBzcGkgd3JpdGUgdGhlbiByZWFkIGRhdGENCisgKg0KKyAqLw0KK3N0cnVjdCBkZXZfc3BpX3RyYW5zZmVyDQorew0KKyAgICBERVZfU1BJX1RSQU5TRkVSICpuZXh0Ow0KKyAgICAvKiBDYWxjIGJ5IHNvZnR3YXJlICovDQorICAgIC8qKiB0b3RfbGVuID0gKHR4X3RvdGxlbj5yeF90b3RsZW4pP3R4X3RvdGxlbjpyeF90b3RsZW4gKi8NCisgICAgdWludDMyX3QgdG90X2xlbjsNCisgICAgLyogU2V0IGJ5IHVzZXIgKi8NCisgICAgdWludDhfdCAqdHhfYnVmOw0KKyAgICB1aW50MzJfdCB0eF9vZnM7DQorICAgIHVpbnQzMl90IHR4X2xlbjsNCisgICAgdWludDhfdCAqcnhfYnVmOw0KKyAgICB1aW50MzJfdCByeF9vZnM7DQorICAgIHVpbnQzMl90IHJ4X2xlbjsNCisgICAgLyogU2hvdWxkIGF1dG8gc2V0IHRvIHByb3BlciB2YWx1ZSBkdXJpbmcgc2V0IGJ1ZmZlciB2YWx1ZSAqLw0KKyAgICB1aW50MzJfdCB0eF9pZHg7DQorICAgIHVpbnQzMl90IHR4X3RvdGxlbjsgLyoqIHR4X3RvdGxlbiA9IHR4X2xlbiArIHR4X29mcyAqLw0KKyAgICB1aW50MzJfdCByeF9pZHg7DQorICAgIHVpbnQzMl90IHJ4X3RvdGxlbjsgLyoqIHJ4X3RvdGxlbiA9IHJ4X2xlbiArIHJ4X29mcyAqLw0KK307DQorDQorLyoqIFNldCB0eCBidWZmZXIgb2YgZGV2aWNlIHNwaSB0cmFuc2ZlciAqLw0KKyNkZWZpbmUgREVWX1NQSV9YRkVSX1NFVF9UWEJVRih4ZmVyLCBidWYsIG9mcywgbGVuKSAgICAgeyAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnR4X2J1ZiA9ICh1aW50OF90ICopKGJ1Zik7ICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnR4X2xlbiA9ICh1aW50MzJfdCkobGVuKTsgICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnR4X29mcyA9ICh1aW50MzJfdCkob2ZzKTsgICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnR4X2lkeCA9IDA7ICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgKHhmZXIpLT50eF90b3RsZW4gPSAoICh1aW50MzJfdCkobGVuKSAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAodWludDMyX3QpKG9mcykgKSA7ICAgXA0KKyAgICAgICAgICAgICAgICB9DQorDQorLyoqIFNldCByeCBidWZmZXIgb2YgZGV2aWNlIHNwaSB0cmFuc2ZlciAqLw0KKyNkZWZpbmUgREVWX1NQSV9YRkVSX1NFVF9SWEJVRih4ZmVyLCBidWYsIG9mcywgbGVuKSAgICAgeyAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnJ4X2J1ZiA9ICh1aW50OF90ICopKGJ1Zik7ICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnJ4X2xlbiA9ICh1aW50MzJfdCkobGVuKTsgICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnJ4X29mcyA9ICh1aW50MzJfdCkob2ZzKTsgICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnJ4X2lkeCA9IDA7ICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgKHhmZXIpLT5yeF90b3RsZW4gPSAoICh1aW50MzJfdCkobGVuKSAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAodWludDMyX3QpKG9mcykgKSA7ICAgXA0KKyAgICAgICAgICAgICAgICB9DQorDQorLyoqIENhbGN1bGF0ZSB0b3RhbCBsZW5ndGggb2YgY3VycmVudCB0cmFuc2ZlciB3aXRob3V0IG5leHQgdHJhbnNmZXIgKi8NCisjZGVmaW5lIERFVl9TUElfWEZFUl9DQUxDX1RPVExFTih4ZmVyKSAgICAgICh4ZmVyKS0+dG90X2xlbiA9ICAgXA0KKyAgICAgICAgICAgICAgICAoKHhmZXIpLT50eF90b3RsZW4gPiAoeGZlciktPnJ4X3RvdGxlbikgPyAoeGZlciktPnR4X3RvdGxlbiA6ICh4ZmVyKS0+cnhfdG90bGVuIDsNCisNCisvKiogU2V0IG5leHQgU1BJIHRyYW5zZmVyICovDQorI2RlZmluZSBERVZfU1BJX1hGRVJfU0VUX05FWFQoeGZlciwgbmV4dF94ZmVyKSAgKHhmZXIpLT5uZXh0ID0gKG5leHRfeGZlcik7DQorDQorLyoqIEluaXQgc3BpIHRyYW5zZmVyICovDQorI2RlZmluZSBERVZfU1BJX1hGRVJfSU5JVCh4ZmVyKSAgICAgICAgICAgICAgICAgeyAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnR4X2lkeCA9IDA7ICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgKHhmZXIpLT5yeF9pZHggPSAwOyAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICh4ZmVyKS0+dHhfdG90bGVuID0gKCh4ZmVyKS0+dHhfbGVuICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKHhmZXIpLT50eF9vZnMpIDsgXA0KKyAgICAgICAgICAgICAgICAgICAgKHhmZXIpLT5yeF90b3RsZW4gPSAoKHhmZXIpLT5yeF9sZW4gICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoeGZlciktPnJ4X29mcykgOyBcDQorICAgICAgICAgICAgICAgICAgICBERVZfU1BJX1hGRVJfQ0FMQ19UT1RMRU4oeGZlcik7ICAgICBcDQorICAgICAgICAgICAgICAgIH0NCisvKioNCisgKiBcYnJpZWYgICBzcGkgaW5mb3JtYXRpb24gc3RydWN0IGRlZmluaXRpb24NCisgKiBcZGV0YWlscyBpbmZvcm1hdGlvbnMgYWJvdXQgc3BpIG9wZW4gc3RhdGUsIHdvcmtpbmcgc3RhdGUsDQorICogIGZyZXF1ZW5jeSwgc3BpIHJlZ2lzdGVycywgd29ya2luZyBtZXRob2QsIGludGVycnVwdCBudW1iZXINCisgKi8NCit0eXBlZGVmIHN0cnVjdCBkZXZfc3BpX2luZm8NCit7DQorICAgIHZvaWQgKnNwaV9jdHJsOyAgICAgLyohPCBzcGkgY29udHJvbCByZWxhdGVkICovDQorICAgIHVpbnQzMl90IHN0YXR1czsgICAgLyohPCBjdXJyZW50IHdvcmtpbmcgc3RhdHVzLCByZWZlciB0byBccmVmIERFVklDRV9IQUxfQ09NTU9OX0RFVlNUQVRVUywgdGhpcyBzaG91bGQgYmUgXHJlZiBERVZfRU5BQkxFRCBmb3IgZmlyc3Qgb3BlbiAqLw0KKyAgICB1aW50MzJfdCBmcmVxOyAgICAgIC8qITwgc3BpIHdvcmtpbmcgYmF1ZHJhdGUgKi8NCisgICAgdWludDhfdCBtb2RlOyAgICAgICAvKiE8IHNwaSB3b3JraW5nIG1vZGUgKG1hc3Rlci9zbGF2ZSkgKi8NCisgICAgdWludDhfdCBjbGtfbW9kZTsgICAvKiE8IHNwaSBjbG9jayBwaGFzZSBhbmQgcG9sYXJpdHksIHRoaXMgc2hvdWxkIGJlIFxyZWYgU1BJX0NMS19NT0RFX0RFRkFVTFQgZm9yIGZpcnN0IG9wZW4gKi8NCisgICAgdWludDhfdCBvcG5fY250OyAgICAvKiE8IHNwaSBvcGVuIGNvdW50LCBvcGVuIGl0IHdpbGwgaW5jcmVhc2UgMSwgY2xvc2UgaXQgd2lsbCBkZWNyZWFzZSAxLCAwIGZvciBjbG9zZSwgPjAgZm9yIG9wZW4gKi8NCisgICAgdWludDhfdCBzbGF2ZTsgICAgICAvKiE8IGN1cnJlbnQgc2VsZWN0ZWQgc2xhdmUgZGV2aWNlIG5vLCBzdGFydCBmcm9tIDAsIHRoaXMgc2hvdWxkIGJlIFxyZWYgU1BJX1NMQVZFX05PVF9TRUxFQ1RFRCBmb3IgZmlyc3Qgb3BlbiAqLw0KKyAgICB1aW50OF90IGRmczsgICAgICAgIC8qITwgZGF0YSBmcmFtZSBzaXplLCB0aGlzIHNob3VsZCBiZSBccmVmIFNQSV9ERlNfREVGQVVMVCBmb3IgZmlyc3Qgb3BlbiAqLw0KKw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIHhmZXI7ICAvKiE8IHNwaSB0cmFuc2ZlciwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIGFsbCB6ZXJvIGZvciBmaXJzdCBvcGVuICovDQorICAgIERFVl9TUElfQ0JTIHNwaV9jYnM7ICAgIC8qITwgc3BpIGNhbGxiYWNrcywgZm9yIGJvdGggbWFzdGVyIGFuZCBzbGF2ZSBtb2RlLCB0aGlzIHNob3VsZCBiZSBhbGwgTlVMTCBmb3IgZmlyc3Qgb3BlbiAqLw0KKyAgICB2b2lkICpleHRyYTsgICAgICAgIC8qITwgYSBleHRyYSBwb2ludGVyIHRvIGdldCBob29rIHRvIGFwcGxpY2F0aW9ucyB3aGljaCBzaG91bGQgbm90IHVzZWQgYnkgYnNwIGRldmVsb3BlciwNCisgICAgICAgICAgICAgICAgICAgIHRoaXMgc2hvdWxkIGJlIE5VTEwgZm9yIGZpcnN0IG9wZW4gYW5kIHlvdSBjYW4gXHJlZiBERVZfU1BJX0lORk9fU0VUX0VYVFJBX09CSkVDVCAic2V0Ig0KKyAgICAgICAgICAgICAgICAgICAgb3IgXHJlZiBERVZfU1BJX0lORk9fR0VUX0VYVFJBX09CSkVDVCAiZ2V0IiB0aGUgZXh0cmEgaW5mb3JtYXRpb24gcG9pbnRlciAqLw0KKyAgICB1aW50MzJfdCBkdW1teTsgICAgIC8qITwgZHVtbXkgd3JpdGUgZGF0YSB3aGVuIHNlbmQgYW5kIHJlY2VpdmUsIHRoaXMgc2hvdWxkIGJlIFxyZWYgU1BJX0RVTU1ZX0RFRkFVTFQgZm9yIGZpcnN0IG9wZW4gKi8NCit9IERFVl9TUElfSU5GTywgKiBERVZfU1BJX0lORk9fUFRSOw0KKw0KKy8qKiBTZXQgZXh0cmEgaW5mb3JtYXRpb24gcG9pbnRlciBvZiBzcGkgaW5mbyAqLw0KKyNkZWZpbmUgREVWX1NQSV9JTkZPX1NFVF9FWFRSQV9PQkpFQ1Qoc3BpX2luZm9fcHRyLCBleHRyYV9pbmZvKSAgICAgKHNwaV9pbmZvX3B0ciktPmV4dHJhID0gKHZvaWQgKikoZXh0cmFfaW5mbykNCisvKiogR2V0IGV4dHJhIGluZm9ybWF0aW9uIHBvaW50ZXIgb2Ygc3BpIGluZm8gKi8NCisjZGVmaW5lIERFVl9TUElfSU5GT19HRVRfRVhUUkFfT0JKRUNUKHNwaV9pbmZvX3B0cikgICAgICAgICAoKHNwaV9pbmZvX3B0ciktPmV4dHJhKQ0KKw0KKyNkZWZpbmUgU1BJX0RGU19ERUZBVUxUICAgICAgICAgICAgIDggICAgICAgLyohPCBEZWZhdWx0IHNwaSBkYXRhIGZyYW1lIHNpemUgKi8NCisjZGVmaW5lIFNQSV9TTEFWRV9OT1RfU0VMRUNURUQgICAgICAgICAgKDB4RkYpICAgICAgLyohPCBTbGF2ZSBpcyBub3Qgc2VsZWN0ZWQgKi8NCisjZGVmaW5lIFNQSV9EVU1NWV9ERUZBVUxUICAgICAgICAgICAoMHhGRikgICAgICAvKiE8IGRlZmF1bHQgZHVtbXkgdmFsdWUgZm9yIGZpcnN0IG9wZW4gKi8NCisNCisvKioNCisgKiBcYnJpZWYgICBzcGkgZGV2aWNlIGludGVyZmFjZSBkZWZpbml0aW9uDQorICogXGRldGFpbHMgZGVmaW5lIHNwaSBkZXZpY2UgaW50ZXJmYWNlLCBsaWtlIHNwaSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUsDQorICogIGZ1Y3Rpb25zIHRvIGdldCBzcGkgaW5mbywgb3Blbi9jbG9zZS9jb250cm9sIHNwaSwgc2VuZC9yZWNlaXZlIGRhdGEgYnkgc3BpDQorICogXG5vdGUgICAgYWxsIHRoaXMgZGV0YWlscyBhcmUgaW1wbGVtZW50ZWQgYnkgdXNlciBpbiB1c2VyIHBvcnRpbmcgY29kZQ0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IGRldl9zcGkNCit7DQorICAgIERFVl9TUElfSU5GTyBzcGlfaW5mbzsgICAgICAgICAgICAgICAgICAgICAgLyohPCBzcGkgZGV2aWNlIGluZm9ybWF0aW9uICovDQorICAgIGludDMyX3QgKCpzcGlfb3BlbikodWludDMyX3QgbW9kZSwgdWludDMyX3QgcGFyYW0pOyAgICAgICAgLyohPCBvcGVuIHNwaSBkZXZpY2UgaW4gbWFzdGVyL3NsYXZlIG1vZGUsIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGluIG1hc3RlciBtb2RlLCBwYXJhbSBzdGFuZHMgZm9yIGZyZXF1ZW5jeSwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gaW4gc2xhdmUgbW9kZSwgcGFyYW0gc3RhbmRzIGZvciBjbG9jayBtb2RlICovDQorICAgIGludDMyX3QgKCpzcGlfY2xvc2UpKHZvaWQpOyAgICAgICAgICAgICAgICAgICAgIC8qITwgY2xvc2Ugc3BpIGRldmljZSAqLw0KKyAgICBpbnQzMl90ICgqc3BpX2NvbnRyb2wpKHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSk7ICAgICAvKiE8IGNvbnRyb2wgc3BpIGRldmljZSAqLw0KKyAgICBpbnQzMl90ICgqc3BpX3dyaXRlKShjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pOyAgICAgICAvKiE8IHNlbmQgZGF0YSB0byBzcGkgZGV2aWNlIChibG9ja2luZyBtZXRob2QpICovDQorICAgIGludDMyX3QgKCpzcGlfcmVhZCkodm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKTsgICAgICAgICAgLyohPCByZWFkIGRhdGEgZnJvbSBzcGkgZGV2aWNlIChibG9ja2luZyBtZXRob2QpICovDQorfSBERVZfU1BJLCAqIERFVl9TUElfUFRSOw0KKw0KKy8qKg0KKyAqIFxmbiAgICAgIGludDMyX3QgKCogZGV2X3NwaTo6c3BpX29wZW4pICh1aW50MzJfdCBtb2RlLCB1aW50MzJfdCBwYXJhbSkNCisgKiBcZGV0YWlscyBvcGVuIGFuIHNwaSBkZXZpY2Ugd2l0aCBzZWxlY3RlZCBtb2RlIChtYXN0ZXIgb3Igc2xhdmUpIHdpdGggZGVmaW5lZCBccmVmIHBhcmFtDQorICogXHBhcmFtW2luXSAgIG1vZGUgICAgd29ya2luZyBtb2RlIChccmVmIERFVl9NQVNURVJfTU9ERSAibWFzdGVyIiBvciBccmVmIERFVl9TTEFWRV9NT0RFICJzbGF2ZSIpDQorICogXHBhcmFtW2luXSAgIHBhcmFtICAgV2hlbiBtb2RlIGlzIFxyZWYgREVWX01BU1RFUl9NT0RFLCBwYXJhbSBzdGFuZHMgZm9yIFxyZWYgZGV2X3NwaV9pbmZvOjpmcmVxICJmcmVxdWVuY3kiLA0KKyAqICAgICAgICAgIHdoZW4gbW9kZSBpcyBccmVmIERFVl9TTEFWRV9NT0RFLCBwYXJhbSBzdGFuZHMgZm9yIFxyZWYgZGV2X3NwaV9pbmZvOjpjbGtfbW9kZSAic2xhdmUgY2xvY2sgbW9kZSINCisgKiBccmV0dmFsICBFX09LICAgIE9wZW4gc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgYW55IGlzc3Vlcw0KKyAqIFxyZXR2YWwgIEVfT1BORUQgSWYgZGV2aWNlIHdhcyBvcGVuZWQgYmVmb3JlIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMsDQorICogICAgICAgICAgdGhlbiBqdXN0IGluY3JlYXNlIHRoZSBccmVmIGRldl9zcGlfaW5mbzo6b3BuX2NudCAib3BuX2NudCIgYW5kIHJldHVybiBccmVmIEVfT1BORUQNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9TWVMgICBEZXZpY2UgaXMgb3BlbmVkIGZvciBkaWZmZXJlbnQgbW9kZSBiZWZvcmUsIGlmIHlvdSB3YW50IHRvIG9wZW4gaXQgd2l0aCBkaWZmZXJlbnQgbW9kZSwgeW91IG5lZWQgdG8gZnVsbHkgY2xvc2UgaXQgZmlyc3QuDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9OT1NQVCBPcGVuIHNldHRpbmdzIGFyZSBub3Qgc3VwcG9ydGVkDQorICovDQorDQorLyoqDQorICogXGZuICAgICAgaW50MzJfdCAoKiBkZXZfc3BpOjpzcGlfY2xvc2UpICh2b2lkKQ0KKyAqIFxkZXRhaWxzIGNsb3NlIGFuIHNwaSBkZXZpY2UsIGp1c3QgZGVjcmVhc2UgdGhlIFxyZWYgZGV2X3NwaV9pbmZvOjpvcG5fY250ICJvcG5fY250IiwNCisgKiAgICAgIGlmIFxyZWYgZGV2X3NwaV9pbmZvOjpvcG5fY250ICJvcG5fY250IiBlcXVhbHMgMCwgdGhlbiBjbG9zZSB0aGUgZGV2aWNlDQorICogXHJldHZhbCAgRV9PSyAgICBDbG9zZSBzdWNjZXNzZnVsbHkgd2l0aG91dCBhbnkgaXNzdWVzKGluY2x1ZGluZyBzY2VuYXJpbyB0aGF0IGRldmljZSBpcyBhbHJlYWR5IGNsb3NlZCkNCisgKiBccmV0dmFsICBFX09QTkVEIERldmljZSBpcyBzdGlsbCBvcGVuZWQsIHRoZSBkZXZpY2UgXHJlZiBkZXZfc3BpX2luZm86Om9wbl9jbnQgIm9wbl9jbnQiIGRlY3JlYXNlZCBieSAxDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmbiAgICAgIGludDMyX3QgKCogZGV2X3NwaTo6c3BpX2NvbnRyb2wpICh1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pDQorICogXGRldGFpbHMgY29udHJvbCBhbiBzcGkgZGV2aWNlIGJ5IFxyZWYgY3RybF9jbWQsIHdpdGggcGFzc2VkIFxyZWYgcGFyYW0uDQorICogIHlvdSBjYW4gY29udHJvbCBzcGkgZGV2aWNlIHVzaW5nIHByZWRlZmluZWQgc3BpIGNvbnRyb2wgY29tbWFuZHMgZGVmaW5lZCB1c2luZyBccmVmIERFVl9TRVRfU1lTQ01EDQorICogICh3aGljaCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGJzcCBkZXZlbG9wZXIpLCBzdWNoIGFzIFxyZWYgU1BJX0NNRF9NU1RfU0VUX0ZSRVEgInNldCBzcGkgbWFzdGVyIGZyZXF1ZW5jeSIsDQorICogIFxyZWYgU1BJX0NNRF9GTFVTSF9UWCAiZmx1c2ggdHgiIGFuZCBccmVmIERFVklDRV9IQUxfU1BJX0NUUkxDTUQgIm1vcmUiLg0KKyAqICBBbmQgeW91IGNhbiBhbHNvIGNvbnRyb2wgc3BpIGRldmljZSB1c2luZyB5b3VyIG93biBzcGVjaWZpZWQgY29tbWFuZHMgZGVmaW5lZCB1c2luZyBccmVmIERFVl9TRVRfVVNSQ01ELA0KKyAqICBidXQgdGhlc2Ugc3BlY2lmaWVkIGNvbW1hbmRzIHNob3VsZCBiZSBkZWZpbmVkIGluIHlvdXIgb3duIHNwaSBkZXZpY2UgZHJpdmVyIGltcGxlbWVudGF0aW9uLg0KKyAqIFxwYXJhbVtpbl0gICAgICAgY3RybF9jbWQgICAgXHJlZiBERVZJQ0VfSEFMX1NQSV9DVFJMQ01EICJjb250cm9sIGNvbW1hbmQiLCB0byBjaGFuZ2Ugb3IgZ2V0IHNvbWUgdGhpbmcgcmVsYXRlZCB0byBzcGkNCisgKiBccGFyYW1baW4sb3V0XSAgIHBhcmFtICAgICAgIHBhcmFtZXRlcnMgdGhhdCBtYXliZSBhcmd1bWVudCBvZiB0aGUgY29tbWFuZCwNCisgKiAgICAgICAgICAgICAgICAgIG9yIHJldHVybiB2YWx1ZXMgb2YgdGhlIGNvbW1hbmQsIG11c3Qgbm90IGJlIE5VTEwNCisgKiBccmV0dmFsICBFX09LICAgIENvbnRyb2wgZGV2aWNlIHN1Y2Nlc3NmdWxseQ0KKyAqIFxyZXR2YWwgIEVfQ0xTRUQgRGV2aWNlIGlzIG5vdCBvcGVuZWQNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkIG9yIG5vdCBleGlzdHMNCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQgZm9yIGN1cnJlbnQgY29udHJvbCBjb21tYW5kDQorICogXHJldHZhbCAgRV9TWVMgICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBoYXJkd2FyZSBpc3N1ZXMsIHN1Y2ggYXMgZGV2aWNlIGlzIGRpc2FibGVkDQorICogXHJldHZhbCAgRV9DVFggICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBkaWZmZXJlbnQgcmVhc29ucyBsaWtlIGluIHRyYW5zZmVyIHN0YXRlDQorICogXHJldHZhbCAgRV9OT1NQVCBDb250cm9sIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCBvciBub3QgdmFsaWQNCisgKi8NCisNCisvKioNCisgKiBcZm4gICAgICBpbnQzMl90ICgqIGRldl9zcGk6OnNwaV93cml0ZSkgKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCisgKiBcZGV0YWlscyBzZW5kIFxyZWYgZGF0YSB0aHJvdWdoIHNwaSB3aXRoIGRlZmluZWQgXHJlZiBsZW4gdG8gc2xhdmUgZGV2aWNlIC4NCisgKiBccGFyYW1baW5dICAgZGF0YSAgICBwb2ludGVyIHRvIGRhdGEgbmVlZCB0byBzZW5kIGJ5IHNwaQ0KKyAqIFxwYXJhbVtpbl0gICBsZW4gbGVuZ3RoIG9mIGRhdGEgdG8gYmUgc2VudA0KKyAqIFxyZXR2YWwgID4wICBCeXRlIGNvdW50IHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBzZW50IGZvciBwb2xsIG1ldGhvZA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZA0KKyAqIFxyZXR2YWwgIEVfQ1RYICAgRGV2aWNlIGlzIHN0aWxsIGluIHRyYW5zZmVyIHN0YXRlDQorICogXHJldHZhbCAgRV9TWVMgICBDYW4ndCB3cml0ZSBkYXRhIHRvIGhhcmR3YXJlIGR1ZSB0byBoYXJkd2FyZSBpc3N1ZXMsIHN1Y2ggYXMgZGV2aWNlIGlzIGRpc2FibGVkDQorICovDQorDQorLyoqDQorICogXGZuICAgICAgaW50MzJfdCAoKiBkZXZfc3BpOjpzcGlfcmVhZCkgKHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCisgKiBcZGV0YWlscyByZWNlaXZlIFxyZWYgZGF0YSBvZiBkZWZpbmVkIFxyZWYgbGVuIHRocm91Z2ggc3BpIGZyb20gc2xhdmUgZGV2aWNlIC4NCisgKiBccGFyYW1bb3V0XSAgZGF0YSAgICBwb2ludGVyIHRvIGRhdGEgbmVlZCB0byByZWNlaXZlZCBieSBzcGkNCisgKiBccGFyYW1baW5dICAgbGVuIGxlbmd0aCBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkDQorICogXHJldHZhbCAgPjAgIEJ5dGUgY291bnQgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGZvciBwb2xsIG1ldGhvZA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqIFxyZXR2YWwgIEVfQ1RYICAgRGV2aWNlIGlzIHN0aWxsIGluIHRyYW5zZmVyIHN0YXRlDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9TWVMgICBDYW4ndCByZWNlaXZlIGRhdGEgZnJvbSBoYXJkd2FyZSBkdWUgdG8gaGFyZHdhcmUgaXNzdWVzLCBzdWNoIGFzIGRldmljZSBpcyBkaXNhYmxlZA0KKyAqLw0KKy8qKiBAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGdldCBhbiBccmVmIGRldl9zcGkgInNwaSBkZXZpY2UiIGJ5IHNwaSBkZXZpY2UgaWQuDQorICogIEZvciBob3cgdG8gdXNlIHNwaSBkZXZpY2UgaGFsIHJlZmVyIHRvIFxyZWYgZGV2X3NwaSAiRnVuY3Rpb25zIGluIHNwaSBkZXZpY2Ugc3RydWN0dXJlIg0KKyAqIFxwYXJhbVtpbl0gICBzcGlfaWQgIGlkIG9mIHNwaSwgZGVmaW5lZCBieSB1c2VyDQorICogXHJldHZhbCAgIU5VTEwgICBwb2ludGVyIHRvIGFuIFxyZWYgZGV2X3NwaSAic3BpIGRldmljZSBzdHJ1Y3R1cmUiDQorICogXHJldHZhbCAgTlVMTCAgICBmYWlsZWQgdG8gZmluZCB0aGUgc3BpIGRldmljZSBieSBccmVmIHNwaV9pZA0KKyAqIFxub3RlICAgIG5lZWQgdG8gaW1wbGVtZW50ZWQgYnkgdXNlciBpbiB1c2VyIGNvZGUNCisgKi8NCitleHRlcm4gREVWX1NQSV9QVFIgc3BpX2dldF9kZXYoaW50MzJfdCBzcGlfaWQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisvKiogQH0gKi8NCisjZW5kaWYgLyogX0RFVklDRV9IQUxfU1BJX0hfICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfdWFydC5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMDQ2MTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl91YXJ0LmgKQEAgLTAsMCArMSw0ODUgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDYtMTYNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfVUFSVCAgICAgVUFSVCBEZXZpY2UgSEFMIEludGVyZmFjZQ0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfREVGDQorICogXGJyaWVmICAgRGVmaW5pdGlvbnMgZm9yIHVhcnQgZGV2aWNlIGhhcmR3YXJlIGxheWVyIChccmVmIGRldl91YXJ0LmgpDQorICogXGRldGFpbHMgUHJvdmlkZSB1bmlmaWVkIEFQSXMgZm9yIHVhcnQgZHJpdmVyIHRvIGltcGxlbWVudC4NCisgKiAgSGVyZSBpcyBhIGRpYWdyYW0gZm9yIHRoZSB1YXJ0IGludGVyZmFjZS4NCisgKg0KKyAqICBcaHRtbG9ubHkNCisgKiAgPGRpdiBjbGFzcz0iaW1hZ2Vib3giPg0KKyAqICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDYwMHB4Ij4NCisgKiAgICAgICAgICA8aW1nIHNyYz0icGljL2Rldl91YXJ0X2hhbC5qcGciIGFsdD0iVUFSVCBEZXZpY2UgSEFMIEludGVyZmFjZSBEaWFncmFtIi8+DQorICogICAgICAgICAgPHA+VUFSVCBEZXZpY2UgSEFMIEludGVyZmFjZSBEaWFncmFtPC9wPg0KKyAqICAgICAgPC9kaXY+DQorICogIDwvZGl2Pg0KKyAqICBcZW5kaHRtbG9ubHkNCisgKg0KKyAqICMjIyBSZWZlcmVuY2UgTGlua3MNCisgKiAgICAgKiBbU2VyaWFsIFBvcnRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NlcmlhbF9wb3J0KQ0KKyAqDQorICogQHs2DQorICoNCisgKiBcZmlsZQ0KKyAqIFxicmllZiAgIHVhcnQgZGV2aWNlIGhhcmR3YXJlIGxheWVyIGRlZmluaXRpb25zDQorICogXGRldGFpbHMgUHJvdmlkZSBjb21tb24gZGVmaW5pdGlvbnMgZm9yIHVhcnQgZGV2aWNlLA0KKyAqICB0aGVuIHNvZnR3YXJlIGRldmVsb3BlciBjYW4gZGV2ZWxvcCB1YXJ0IGRyaXZlcg0KKyAqICBmb2xsb3dpbmcgdGhpcyBkZWZpbml0aW9ucywgYW5kIHRoZSBhcHBsaWNhdGlvbnMNCisgKiAgY2FuIGRpcmVjdGx5IGNhbGwgdGhpcyBkZWZpbml0aW9uIHRvIHJlYWxpemUgZnVuY3Rpb25zDQorICoNCisgKi8NCisNCisjaWZuZGVmIF9ERVZJQ0VfSEFMX1VBUlRfSF8NCisjZGVmaW5lIF9ERVZJQ0VfSEFMX1VBUlRfSF8NCisNCisjaW5jbHVkZSAiZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9jb21tb24uaCINCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9VQVJUX0JBVUQgICAgVUFSVCBEZXZpY2UgQmF1ZHJhdGUgRGVmaW5pdGlvbnMNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX1VBUlQNCisgKiBcYnJpZWYgICBNYWNyb3MgZm9yIHVhcnQgYmF1ZHJhdGUuDQorICogXGRldGFpbHMgRGVmaW5pdGlvbnMgZm9yIGJhdWRyYXRlIGZyb20gNDgwMCB0byAxMTUyMDBicHMuDQorICogQHsNCisgKi8NCisvKg0KKyAqIGRlZmluZXMgZm9yIHVhcnQgYmF1ZHJhdGVzDQorICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFXzExMCAgICAgICAgICAgKDExMCkgICAgICAgLyohPCB1YXJ0IGJhdWRyYXRlIDExMGJwcyAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV8zMDAgICAgICAgICAgICgzMDApICAgICAgIC8qITwgdWFydCBiYXVkcmF0ZSAzMDBicHMgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfNjAwICAgICAgICAgICAoNjAwKSAgICAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgNjAwYnBzICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFXzEyMDAgICAgICAgICAgKDEyMDApICAgICAgLyohPCB1YXJ0IGJhdWRyYXRlIDEyMDBicHMgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfMjQwMCAgICAgICAgICAoMjQwMCkgICAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgMjQwMGJwcyAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV80ODAwICAgICAgICAgICg0ODAwKSAgICAgIC8qITwgdWFydCBiYXVkcmF0ZSA0ODAwYnBzICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFXzk2MDAgICAgICAgICAgKDk2MDApICAgICAgLyohPCB1YXJ0IGJhdWRyYXRlIDk2MDBicHMgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfMTQ0MDAgICAgICAgICAoMTQ0MDApICAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgMTQ0MDBicHMgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfMTkyMDAgICAgICAgICAoMTkyMDApICAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgMTkyMDBicHMgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfMzg0MDAgICAgICAgICAoMzg0MDApICAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgMzg0MDBicHMgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfNTc2MDAgICAgICAgICAoNTc2MDApICAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgNTc2MDBicHMgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfMTE1MjAwICAgICAgICAgICAgKDExNTIwMCkgICAgLyohPCB1YXJ0IGJhdWRyYXRlIDExNTIwMGJwcyAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV8yMzA0MDAgICAgICAgICAgICAoMjMwNDAwKSAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgMjMwNDAwYnBzICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFXzQ2MDgwMCAgICAgICAgICAgICg0NjA4MDApICAgIC8qITwgdWFydCBiYXVkcmF0ZSA0NjA4MDBicHMgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfOTIxNjAwICAgICAgICAgICAgKDkyMTYwMCkgICAgLyohPCB1YXJ0IGJhdWRyYXRlIDkyMTYwMGJwcyAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX1VBUlRfRk9STUFUICBVQVJUIERldmljZSBGb3JtYXQgRGVmaW5pdGlvbnMNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX1VBUlQNCisgKiBcYnJpZWYgICBNYWNyb3MgZm9yIHVhcnQgZm9ybWF0Lg0KKyAqIFxkZXRhaWxzIERlZmluaXRpb25zIGZvciB1YXJ0IGZvcm1hdCBsaWtlIGRhdGFiaXRzLCBwYXJpdHksIHN0b3BiaXRzLg0KKyAqIEB7DQorICovDQorLyoqDQorICogVUFSVCBEZXZpY2UgUGFyaXR5IFR5cGVzIEVudW0NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIFVBUlRfUEFSSVRZX05PTkUgID0gMCwgIC8qITwgbm8gcGFyaXR5IGJpdCAqLw0KKyAgICBVQVJUX1BBUklUWV9PREQgICA9IDEsICAvKiE8IG9kZCBwYXJpdHkgYml0ICovDQorICAgIFVBUlRfUEFSSVRZX0VWRU4gID0gMiwgIC8qITwgZXZlbiBwYXJpdHkgYml0ICovDQorICAgIFVBUlRfUEFSSVRZX01BUksgID0gMywgIC8qITwgbWFyayBwYXJpdHkgYml0LCBhbHdheXMgbG9naWNhbCAxICovDQorICAgIFVBUlRfUEFSSVRZX1NQQUNFID0gNCAgIC8qITwgc3BhY2UgcGFyaXR5IGJpdCwgYWx3YXlzIGxvZ2ljYWwgMCAqLw0KK30gVUFSVF9QQVJJVFk7DQorDQorLyoqDQorICogVUFSVCBEZXZpY2UgU3RvcCBCaXRzIEVudW0NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIFVBUlRfU1RQQklUU19PTkUgICAgID0gMCwgICAvKiE8IDEgc3RvcCBiaXQgKi8NCisgICAgVUFSVF9TVFBCSVRTX09ORUhBTEYgPSAxLCAgIC8qITwgMS41IHN0b3AgYml0cyAqLw0KKyAgICBVQVJUX1NUUEJJVFNfVFdPICAgICA9IDIgICAgLyohPCAyIHN0b3AgYml0cyAqLw0KK30gVUFSVF9TVE9QQklUUzsNCisNCisvKioNCisgKiBVQVJUIERQUyBGb3JtYXQ6IGRhdGFiaXRzL3Bhcml0eS9zdG9wYml0cw0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IHVhcnRfZHBzX2Zvcm1hdA0KK3sNCisgICAgdWludDMyX3QgZGF0YWJpdHM7ICAvKiE8IGRhdGEgYml0cyAqLw0KKyAgICBVQVJUX1BBUklUWSBwYXJpdHk7IC8qITwgcGFyaXR5IGJpdCB0eXBlICovDQorICAgIFVBUlRfU1RPUEJJVFMgc3RvcGJpdHM7IC8qITwgc3RvcCBiaXRzICovDQorfSBVQVJUX0RQU19GT1JNQVQ7DQorDQorI2RlZmluZSBVQVJUX0RBVEFCSVRTX0RFRkFVTFQgICA4ICAgLyohPCBkZWZhdWx0IGRhdGEgYml0cyAqLw0KKw0KKy8qKiBEZWZhdWx0IFVBUlQgRFBTIGZvcm1hdCAqLw0KK3N0YXRpYyBjb25zdCBVQVJUX0RQU19GT1JNQVQgZHBzX2Zvcm1hdF9kZWZhdWx0ID0ge1VBUlRfREFUQUJJVFNfREVGQVVMVCwgVUFSVF9QQVJJVFlfTk9ORSwgVUFSVF9TVFBCSVRTX09ORX07DQorLyoqIEB9ICovDQorDQorLyoqDQorICogVUFSVCBEZXZpY2UgSGFyZHdhcmUgRmxvdyBDb250cm9sIFR5cGVzIEVudW0NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIFVBUlRfRkNfTk9ORSA9IDAsICAgLyohPCBOb24gaGFyZHdhcmUgZmxvdyBjb250cm9sICovDQorICAgIFVBUlRfRkNfUlRTICA9IDEsICAgLyohPCBSZXF1ZXN0IFRvIFNlbmQgKi8NCisgICAgVUFSVF9GQ19DVFMgID0gMiwgICAvKiE8IENsZWFyIFRvIFNlbmQgKi8NCisgICAgVUFSVF9GQ19CT1RIID0gMyAgICAvKiE8IEJvdGggaGFyZHdhcmUgZmxvdyBjb250cm9sIG1ldGhvZHMgKi8NCit9IFVBUlRfSFdfRkxPV19DT05UUk9MOw0KKy8qKiBEZWZhdWx0IGhhcmR3YXJlIGZsb3cgY29udHJvbCBtZXRob2QgKi8NCitzdGF0aWMgY29uc3QgVUFSVF9IV19GTE9XX0NPTlRST0wgaHdmY19kZWZhdWx0ID0gVUFSVF9GQ19OT05FOw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX1VBUlRfQ1RSTENNRCAgICAgVUFSVCBEZXZpY2UgQ29udHJvbCBDb21tYW5kcw0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfVUFSVA0KKyAqIFxicmllZiAgIERlZmluaXRpb25zIGZvciB1YXJ0IGNvbnRyb2wgY29tbWFuZCwgdXNlZCBpbiBccmVmIGRldl91YXJ0Ojp1YXJ0X2NvbnRyb2wgIlVBUlQgSU8gQ29udHJvbCINCisgKiBcZGV0YWlscyBUaGVzZSBjb21tYW5kcyBkZWZpbmVkIGhlcmUgY2FuIGJlIHVzZWQgaW4gdXNlciBjb2RlIGRpcmVjdGx5Lg0KKyAqIC0gUGFyYW1ldGVycyBVc2FnZQ0KKyAqICAgLSBGb3IgcGFzc2luZyBwYXJhbWV0ZXJzIGxpa2UgaW50ZWdlciwganVzdCB1c2UgdWludDMyX3QvaW50MzJfdCB0byBkaXJlY3RseSBwYXNzIHZhbHVlcw0KKyAqICAgLSBGb3IgcGFzc2luZyBwYXJhbWV0ZXJzIGZvciBhIHN0cnVjdHVyZSwgcGxlYXNlIHVzZSBwb2ludGVyIHRvIHBhc3MgdmFsdWVzDQorICogICAtIEZvciBnZXR0aW5nIHNvbWUgZGF0YSwgcGxlYXNlIHVzZSBwb2ludGVyIHRvIHN0b3JlIHRoZSByZXR1cm4gZGF0YQ0KKyAqIC0gQ29tbW9uIFJldHVybiBWYWx1ZXMNCisgKiAgIC0gXHJlZiBFX09LLCAgIENvbnRyb2wgZGV2aWNlIHN1Y2Nlc3NmdWxseQ0KKyAqICAgLSBccmVmIEVfQ0xTRUQsICAgIERldmljZSBpcyBub3Qgb3BlbmVkDQorICogICAtIFxyZWYgRV9PQkosICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZCBvciBub3QgZXhpc3RzDQorICogICAtIFxyZWYgRV9QQVIsICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkIGZvciBjdXJyZW50IGNvbnRyb2wgY29tbWFuZA0KKyAqICAgLSBccmVmIEVfU1lTLCAgQ29udHJvbCBkZXZpY2UgZmFpbGVkLCBkdWUgdG8gaGFyZHdhcmUgaXNzdWVzIHN1Y2ggYXMgZGV2aWNlIGlzIGRpc2FibGVkDQorICogICAtIFxyZWYgRV9DVFgsICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBkaWZmZXJlbnQgcmVhc29ucyBsaWtlIGluIHRyYW5zZmVyIHN0YXRlDQorICogICAtIFxyZWYgRV9OT1NQVCwgICAgQ29udHJvbCBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQgb3Igbm90IHZhbGlkDQorICogQHsNCisgKi8NCisvKioNCisgKiBTZXQgXHJlZiBkZXZfdWFydF9pbmZvOjpiYXVkcmF0ZSAidWFydCBiYXVkcmF0ZSIuDQorICogLSBQYXJhbSB0eXBlIDogdWludDMyX3QNCisgKiAtIFBhcmFtIHVzYWdlIDogdWFydCBiYXVkcmF0ZSwgbXVzdCBhYm92ZSB6ZXJvLiBIZXJlIGlzIGEgbGlzdCBvZiBccmVmIERFVklDRV9IQUxfVUFSVF9CQVVEICJwb3NzaWJsZSBiYXVkcmF0ZXMiDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfU0VUX0JBVUQgICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDApDQorLyoqDQorICogR2V0IFxyZWYgZGV2X3VhcnRfaW5mbzo6c3RhdHVzICJjdXJyZW50IGRldmljZSBzdGF0dXMiDQorICogLSBQYXJhbSB0eXBlIDogdWludDMyX3QgKg0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBzdG9yZSByZXN1bHQgb2YgY3VycmVudCBzdGF0dXMNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9HRVRfU1RBVFVTICAgICAgICAgREVWX1NFVF9TWVNDTUQoMSkNCisvKioNCisgKiBFbmFibGUgdWFydCBkZXZpY2UNCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IHBhcmFtIGlzIG5vdCByZXF1aXJlZA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX0VOQV9ERVYgICAgICAgICAgICBERVZfU0VUX1NZU0NNRCgyKQ0KKy8qKg0KKyAqIERpc2FibGUgdWFydCBkZXZpY2UsIHdoZW4gZGV2aWNlIGlzIGRpc2FibGVkLA0KKyAqIG9ubHkgXHJlZiBVQVJUX0NNRF9FTkFfREVWLCBccmVmIFVBUlRfQ01EX0RJU19ERVYgYW5kDQorICogXHJlZiBVQVJUX0NNRF9HRVRfU1RBVFVTIGNvbW1hbmRzIGNhbiBiZSBleGVjdXRlZCwNCisgKiBvdGhlciBjb21tYW5kcyB3aWxsIHJldHVybiBccmVmIEVfU1lTDQorICogLSBQYXJhbSB0eXBlIDogTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBwYXJhbSBpcyBub3QgcmVxdWlyZWQNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9ESVNfREVWICAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoMykNCisvKioNCisgKiBGbHVzaCB1YXJ0IGRldmljZSBvdXRwdXQNCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IHBhcmFtIGlzIG5vdCByZXF1aXJlZA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX0ZMVVNIX09VVFBVVCAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoNCkNCisvKioNCisgKiBHZXQgaG93IG1hbnkgYnl0ZXMgc3BhY2UgaW4gdWFydCBhcmUgYXZhaWxhYmxlIHRvIHRyYW5zbWl0LA0KKyAqIHRoaXMgY2FuIGJlIHVzZWQgaW4gaW50ZXJydXB0IGNhbGxiYWNrIGZ1bmN0aW9ucywNCisgKiBjb29wZXJhdGUgd2l0aCBccmVmIGRldl91YXJ0Ojp1YXJ0X3dyaXRlICJ1YXJ0X3dyaXRlIiBBUEkgdG8gcmVhbGl6ZSBub24tYmxvY2tlZCB3cml0ZQ0KKyAqIC0gUGFyYW0gdHlwZSA6IGludDMyX3QgKg0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBzdG9yZSB0aGUgd3JpdGUgYXZhaWxhYmxlIGJ5dGVzLCA+IDAgZm9yIGF2YWlsYWJsZSBieXRlcywgMCBmb3Igbm90IGF2YWlsYWJsZQ0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX0dFVF9UWEFWQUlMICAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoNSkNCisvKioNCisgKiBHZXQgaG93IG1hbnkgYnl0ZXMgaW4gdWFydCBhcmUgYXZhaWxhYmxlIHRvIHJlY2VpdmUsDQorICogdGhpcyBjYW4gYmUgdXNlZCBpbiBpbnRlcnJ1cHQgY2FsbGJhY2sgZnVuY3Rpb25zLA0KKyAqIGNvb3BlcmF0ZSB3aXRoIFxyZWYgZGV2X3VhcnQ6OnVhcnRfcmVhZCAidWFydF9yZWFkIiBBUEkgdG8gcmVhbGl6ZSBub24tYmxvY2tlZCByZWFkDQorICogLSBQYXJhbSB0eXBlIDogaW50MzJfdCAqDQorICogLSBQYXJhbSB1c2FnZSA6IHN0b3JlIHRoZSByZWFkIGF2YWlsYWJsZSBieXRlcywgPiAwIGZvciBhdmFpbGFibGUgYnl0ZXMsIDAgZm9yIG5vdCBhdmFpbGFibGUNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9HRVRfUlhBVkFJTCAgICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDYpDQorLyoqDQorICogQ2F1c2UgYSBicmVhayBjb25kaXRpb24gdG8gYmUgdHJhbnNtaXR0ZWQgdG8gdGhlIHJlY2VpdmluZyBkZXZpY2UNCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IHBhcmFtIGlzIG5vdCByZXF1aXJlZA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX0JSRUFLX1NFVCAgICAgICAgICBERVZfU0VUX1NZU0NNRCg3KQ0KKy8qKg0KKyAqIENsZWFyIGJyZWFrIGNvbmRpdGlvbiBhbmQgcmV0dXJuIHRvIG5vcm1hbA0KKyAqIC0gUGFyYW0gdHlwZSA6IE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDogcGFyYW0gaXMgbm90IHJlcXVpcmVkDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfQlJFQUtfQ0xSICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDgpDQorLyoqDQorICogQ2hhbmdlIHVhcnQgXHJlZiBkZXZfdWFydF9pbmZvOjpkcHNfZm9ybWF0ICJEL1AvUyhEYXRhL1Bhcml0eS9TdG9wKSBmb3JtYXQiDQorICogLSBQYXJhbSB0eXBlIDogXHJlZiBVQVJUX0RQU19GT1JNQVQgKg0KKyAqIC0gUGFyYW0gdXNhZ2UgOiB1YXJ0IGRwcyBmb3JtYXQgaW5jbHVkaW5nIGRhdGFiaXRzLCBwYXJpdHkgYW5kIHN0b3BiaXRzDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfU0VUX0RQU19GT1JNQVQgICAgICAgICBERVZfU0VUX1NZU0NNRCg5KQ0KKy8qKg0KKyAqIFNldCB1YXJ0IGRldmljZSBccmVmIGRldl91YXJ0X2luZm86Omh3ZmMgImhhcmR3YXJlIGZsb3cgY29udHJvbCINCisgKiAtIFBhcmFtIHR5cGUgOiBccmVmIFVBUlRfSFdfRkxPV19DT05UUk9MDQorICogLSBQYXJhbSB1c2FnZSA6IHVhcnQgZHBzIGZvcm1hdCBpbmNsdWRpbmcgZGF0YWJpdHMsIHBhcml0eSBhbmQgc3RvcGJpdHMNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9TRVRfSFdGQyAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoMTApDQorLyoqDQorICogU2V0IFxyZWYgZGV2X3VhcnRfY2JzOjp0eF9jYiAidWFydCB0cmFuc21pdCBzdWNjZXNzIGNhbGxiYWNrIiBmdW5jdGlvbg0KKyAqIHdoZW4gYWxsIHJlcXVpcmVkIGJ5dGVzIGFyZSB0cmFuc21pdHRlZCBmb3IgaW50ZXJydXB0IG1ldGhvZA0KKyAqIC0gUGFyYW0gdHlwZSA6IFxyZWYgREVWX0NBTExCQUNLICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiB0cmFuc21pdCBzdWNjZXNzIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB1YXJ0DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfU0VUX1RYQ0IgICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDExKQ0KKy8qKg0KKyAqIFNldCBccmVmIGRldl91YXJ0X2Niczo6cnhfY2IgInVhcnQgcmVjZWl2ZSBzdWNjZXNzIGNhbGxiYWNrIiBmdW5jdGlvbg0KKyAqIHdoZW4gYWxsIHJlcXVpcmVkIGJ5dGVzIGFyZSByZWNlaXZlZCBmb3IgaW50ZXJydXB0IG1ldGhvZA0KKyAqIC0gUGFyYW0gdHlwZSA6IFxyZWYgREVWX0NBTExCQUNLICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiByZWNlaXZlIHN1Y2Nlc3MgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHVhcnQNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9TRVRfUlhDQiAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoMTIpDQorLyoqDQorICogU2V0IFxyZWYgZGV2X3VhcnRfY2JzOjplcnJfY2IgInVhcnQgdHJhbnNmZXIgZXJyb3IgY2FsbGJhY2siIGZ1bmN0aW9uDQorICogd2hlbiBzb21ldGhpbmcgZXJyb3IgaGFwcGVuZWQgZm9yIGludGVycnVwdCBtZXRob2QNCisgKiAtIFBhcmFtIHR5cGUgOiBccmVmIERFVl9DQUxMQkFDSyAqIG9yIE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDogdHJhbnNmZXIgZXJyb3IgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHVhcnQNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9TRVRfRVJSQ0IgICAgICAgICAgREVWX1NFVF9TWVNDTUQoMTMpDQorLyoqDQorICogU2V0IHRyYW5zbWl0IGJ1ZmZlciB2aWEgaW50ZXJydXB0LCBhbmQgaXQgd2lsbCBzZXQgXHJlZiBkZXZfdWFydF9pbmZvOjp0eF9idWYgInR4X2J1ZiINCisgKiAtIFBhcmFtIHR5cGUgOiBERVZfQlVGRkVSICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBidWZmZXIgc3RydWN0dXJlIHBvaW50ZXIsIGlmIHBhcmFtIGlzIE5VTEwsIHRoZW4gaXQgd2lsbCBzZXQgdHhfYnVmIHRvIE5VTEwNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9TRVRfVFhJTlRfQlVGICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDE0KQ0KKy8qKg0KKyAqIFNldCByZWNlaXZlIGJ1ZmZlciB2aWEgaW50ZXJydXB0LCBhbmQgaXQgd2lsbCBzZXQgXHJlZiBkZXZfdWFydF9pbmZvOjpyeF9idWYgInJ4X2J1ZiINCisgKiAtIFBhcmFtIHR5cGUgOiBERVZfQlVGRkVSICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBidWZmZXIgc3RydWN0dXJlIHBvaW50ZXIsIGlmIHBhcmFtIGlzIE5VTEwsIHRoZW4gaXQgd2lsbCBzZXQgcnhfYnVmIHRvIE5VTEwNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9TRVRfUlhJTlRfQlVGICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDE1KQ0KKy8qKg0KKyAqIEVuYWJsZSBvciBkaXNhYmxlIHRyYW5zbWl0IGludGVycnVwdA0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IGVuYWJsZShub25lLXplcm8pIG9yIGRpc2FibGUoemVybykgZmxhZw0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX1NFVF9UWElOVCAgICAgICAgICBERVZfU0VUX1NZU0NNRCgxNikNCisvKioNCisgKiBFbmFibGUgb3IgZGlzYWJsZSByZWNlaXZlIGludGVycnVwdA0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IGVuYWJsZShub25lLXplcm8pIG9yIGRpc2FibGUoemVybykgZmxhZw0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX1NFVF9SWElOVCAgICAgICAgICBERVZfU0VUX1NZU0NNRCgxNykNCisvKioNCisgKiBBYm9ydCBjdXJyZW50IGludGVycnVwdCB0cmFuc21pdCBvcGVyYXRpb24gaWYgdHggaW50ZXJydXB0IGVuYWJsZWQsDQorICogaXQgd2lsbCBkaXNhYmxlIHRyYW5zbWl0IGludGVycnVwdCwgYW5kIHNldCBccmVmIERFVl9JTl9UWF9BQlJUDQorICogaW4gXHJlZiBkZXZfdWFydF9pbmZvOjpzdGF0dXMgInN0YXR1cyIgdmFyaWFibGUsDQorICogYW5kIGNhbGwgdGhlIHRyYW5zbWl0IGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGVuIHR4IGNhbGxiYWNrIGlzIGZpbmlzaGVkLA0KKyAqIGl0IHdpbGwgY2xlYXIgXHJlZiBERVZfSU5fVFhfQUJSVCBhbmQgcmV0dXJuDQorICogLSBQYXJhbSB0eXBlIDogTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOg0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX0FCT1JUX1RYICAgICAgICAgICBERVZfU0VUX1NZU0NNRCgxOCkNCisvKioNCisgKiBBYm9ydCBjdXJyZW50IGludGVycnVwdCByZWNlaXZlIG9wZXJhdGlvbiBpZiByeCBpbnRlcnJ1cHQgZW5hYmxlZCwNCisgKiBpdCB3aWxsIGRpc2FibGUgcmVjZWl2ZSBpbnRlcnJ1cHQsIGFuZCBzZXQgXHJlZiBERVZfSU5fVFhfQUJSVA0KKyAqIGluIFxyZWYgZGV2X3VhcnRfaW5mbzo6c3RhdHVzICJzdGF0dXMiIHZhcmlhYmxlLA0KKyAqIGFuZCBjYWxsIHRoZSByZWNlaXZlIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGVuIHJ4IGNhbGxiYWNrIGlzIGZpbmlzaGVkLA0KKyAqIGl0IHdpbGwgY2xlYXIgXHJlZiBERVZfSU5fVFhfQUJSVCBhbmQgcmV0dXJuDQorICogLSBQYXJhbSB0eXBlIDogTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOg0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX0FCT1JUX1JYICAgICAgICAgICBERVZfU0VUX1NZU0NNRCgxOSkNCisNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9VQVJUX0NBTExCQUNLICAgIFVBUlQgSW50ZXJydXB0IGNhbGxiYWNrIGZ1bmN0aW9ucw0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfVUFSVA0KKyAqIFxicmllZiAgIGNhbGxiYWNrIGZ1bmN0aW9uIHN0cnVjdHVyZSBmb3IgVUFSVCBkZXZpY2UNCisgKiBAew0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IGRldl91YXJ0X2Nicw0KK3sNCisgICAgREVWX0NBTExCQUNLIHR4X2NiOyAvKiE8IHVhcnQgZGF0YSB0cmFuc21pdCBzdWNjZXNzIHJlcXVpcmVkIGJ5dGVzIGNhbGxiYWNrICovDQorICAgIERFVl9DQUxMQkFDSyByeF9jYjsgLyohPCB1YXJ0IGRhdGEgcmVjZWl2ZSBzdWNjZXNzIHJlcXVpcmVkIGJ5dGVzIGNhbGxiYWNrICovDQorICAgIERFVl9DQUxMQkFDSyBlcnJfY2I7ICAgIC8qITwgdWFydCBlcnJvciBjYWxsYmFjayAqLw0KK30gREVWX1VBUlRfQ0JTLCAqREVWX1VBUlRfQ0JTX1BUUjsNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9VQVJUX0RFVlNUUlVDVCAgIFVBUlQgRGV2aWNlIEludGVyZmFjZSBEZWZpbml0aW9uDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9VQVJUDQorICogXGJyaWVmICAgQ29udGFpbnMgZGVmaW5pdGlvbnMgb2YgdWFydCBkZXZpY2UgaW50ZXJmYWNlIHN0cnVjdHVyZS4NCisgKiBcZGV0YWlscyBUaGlzIHN0cnVjdHVyZSB3aWxsIGJlIHVzZWQgaW4gdXNlciBpbXBsZW1lbnRlZCBjb2RlLCB3aGljaCB3YXMgY2FsbGVkDQorICogICAgIFxyZWYgREVWSUNFX0lNUEwgIkRldmljZSBEcml2ZXIgSW1wbGVtZW50IExheWVyIiBmb3IgdWFydCB0byB1c2UgaW4gaW1wbGVtZW50YXRpb24gY29kZS4NCisgKiAgICAgQXBwbGljYXRpb24gZGV2ZWxvcGVyIHNob3VsZCB1c2UgdGhlIFVBUlQgQVBJIHByb3ZpZGVkIGhlcmUgdG8gYWNjZXNzIHRvIFVBUlQgZGV2aWNlcy4NCisgKiAgICAgQlNQIGRldmVsb3BlciBzaG91bGQgZm9sbG93IHRoZSBBUEkgZGVmaW5pdGlvbiB0byBpbXBsZW1lbnQgVUFSVCBkZXZpY2UgZHJpdmVycy4NCisgKiBAew0KKyAqLw0KKy8qKg0KKyAqIFxicmllZiAgIFVBUlQgaW5mb3JtYXRpb24gc3RydWN0IGRlZmluaXRpb24NCisgKiBcZGV0YWlscyBpbmZvcm1hdGlvbnMgYWJvdXQgdWFydCBvcGVuIGNvdW50LCB3b3JraW5nIHN0YXR1cywNCisgKiAgICAgYmF1ZHJhdGUsIHVhcnQgcmVnaXN0ZXJzIGFuZCBjdHJsIHN0cnVjdHVyZSwgdWFydCBkcHMgZm9ybWF0DQorICovDQordHlwZWRlZiBzdHJ1Y3QgZGV2X3VhcnRfaW5mbw0KK3sNCisgICAgdm9pZCAqdWFydF9jdHJsOyAgICAvKiE8IHVhcnQgY29udHJvbCByZWxhdGVkIHBvaW50ZXIsIGltcGxlbWVudGVkIGJ5IGJzcCBkZXZlbG9wZXIsIGFuZCB0aGlzIHNob3VsZCBiZSBzZXQgZHVyaW5nIHVhcnQgb2JqZWN0IGltcGxlbWVudGF0aW9uICovDQorICAgIHVpbnQzMl90IG9wbl9jbnQ7ICAgLyohPCB1YXJ0IG9wZW4gY291bnQsIG9wZW4gaXQgd2lsbCBpbmNyZWFzZSAxLCBjbG9zZSBpdCB3aWxsIGRlY3JlYXNlIDEsIDAgZm9yIGNsb3NlLCA+MCBmb3Igb3BlbiAqLw0KKyAgICB1aW50MzJfdCBzdGF0dXM7ICAgIC8qITwgY3VycmVudCB3b3JraW5nIHN0YXR1cywgcmVmZXIgdG8gXHJlZiBERVZJQ0VfSEFMX0NPTU1PTl9ERVZTVEFUVVMsIHRoaXMgc2hvdWxkIGJlIFxyZWYgREVWX0VOQUJMRUQgZm9yIGZpcnN0IG9wZW4gKi8NCisgICAgdWludDMyX3QgYmF1ZHJhdGU7ICAvKiE8IHVhcnQgYmF1ZCByYXRlLCB0aGlzIHNob3VsZCBiZSB0aGUgdmFsdWUgb2YgYmF1ZCBwYXNzaW5nIGJ5IHVhcnRfb3BlbiBpZiBmaXJzdCBzdWNjZXNzZnVsbHkgb3BlbmVkICovDQorICAgIFVBUlRfRFBTX0ZPUk1BVA0KKyAgICBkcHNfZm9ybWF0OyAvKiE8IEQvUC9TIGZvcm1hdCBzZXR0aW5ncyBmb3IgdWFydCBkZXZpY2UsIGhlcmUgaXMgXHJlZiBkcHNfZm9ybWF0X2RlZmF1bHQgImRlZmF1bHQgc2V0dGluZ3MgZm9yIGZpcnN0IG9wZW4iICovDQorICAgIFVBUlRfSFdfRkxPV19DT05UUk9MDQorICAgIGh3ZmM7ICAvKiE8IFVBUlQgaGFyZHdhcmUgZmxvdyBjb250cm9sLCBoZXJlIGlzIFxyZWYgaHdmY19kZWZhdWx0ICJkZWZhdWx0IGhhcmR3YXJlIGZsb3cgY29udHJvbCBzZXR0aW5ncyBmb3IgZmlyc3Qgb3BlbiIgKi8NCisgICAgREVWX0JVRkZFUiB0eF9idWY7ICAvKiE8IHRyYW5zbWl0IGJ1ZmZlciB2aWEgaW50ZXJydXB0LCB0aGlzIHNob3VsZCBiZSBhbGwgemVybyBmb3IgZmlyc3Qgb3BlbiAqLw0KKyAgICBERVZfQlVGRkVSIHJ4X2J1ZjsgIC8qITwgcmVjZWl2ZSBidWZmZXIgdmlhIGludGVycnVwdCwgdGhpcyBzaG91bGQgYmUgYWxsIHplcm8gZm9yIGZpcnN0IG9wZW4gKi8NCisgICAgREVWX1VBUlRfQ0JTDQorICAgIHVhcnRfY2JzOyAgLyohPCB1YXJ0IGNhbGxiYWNrcywgY2FsbGJhY2sgYXJndW1lbnRzIHNob3VsZCBiZSBccmVmIERFVl9VQVJUICogb3IgTlVMTCwgdGhpcyBzaG91bGQgYmUgYWxsIE5VTEwgZm9yIGZpcnN0IG9wZW4gKi8NCisgICAgdm9pZCAqZXh0cmE7ICAgICAgICAvKiE8IGEgZXh0cmEgcG9pbnRlciB0byBnZXQgaG9vayB0byBhcHBsaWNhdGlvbnMgd2hpY2ggc2hvdWxkIG5vdCB1c2VkIGJ5IGJzcCBkZXZlbG9wZXIsDQorICAgICAgICAgICAgICAgICAgICB0aGlzIHNob3VsZCBiZSBOVUxMIGZvciBmaXJzdCBvcGVuIGFuZCB5b3UgY2FuIFxyZWYgREVWX1VBUlRfSU5GT19TRVRfRVhUUkFfT0JKRUNUICJzZXQiDQorICAgICAgICAgICAgICAgICAgICBvciBccmVmIERFVl9VQVJUX0lORk9fR0VUX0VYVFJBX09CSkVDVCAiZ2V0IiB0aGUgZXh0cmEgaW5mb3JtYXRpb24gcG9pbnRlciAqLw0KK30gREVWX1VBUlRfSU5GTywgKiBERVZfVUFSVF9JTkZPX1BUUjsNCisNCisvKiogU2V0IGV4dHJhIGluZm9ybWF0aW9uIHBvaW50ZXIgb2YgdWFydCBpbmZvICovDQorI2RlZmluZSBERVZfVUFSVF9JTkZPX1NFVF9FWFRSQV9PQkpFQ1QodWFydF9pbmZvX3B0ciwgZXh0cmFfaW5mbykgICAodWFydF9pbmZvX3B0ciktPmV4dHJhID0gKHZvaWQgKikoZXh0cmFfaW5mbykNCisvKiogR2V0IGV4dHJhIGluZm9ybWF0aW9uIHBvaW50ZXIgb2YgdWFydCBpbmZvICovDQorI2RlZmluZSBERVZfVUFSVF9JTkZPX0dFVF9FWFRSQV9PQkpFQ1QodWFydF9pbmZvX3B0cikgICAgICAgICAgICgodWFydF9pbmZvX3B0ciktPmV4dHJhKQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFVBUlQgZGV2aWNlIGludGVyZmFjZSBkZWZpbml0aW9uDQorICogXGRldGFpbHMgRGVmaW5lIHVhcnQgZGV2aWNlIGludGVyZmFjZSwgbGlrZSB1YXJ0IGluZm9ybWF0aW9uIHN0cnVjdHVyZSwNCisgKiAgcHJvdmlkZSBmdW5jdGlvbnMgdG8gb3Blbi9jbG9zZS9jb250cm9sIHVhcnQsIHNlbmQvcmVjZWl2ZSBkYXRhIGJ5IHVhcnQNCisgKiBcbm90ZSAgICBBbGwgdGhpcyBkZXRhaWxzIGFyZSBpbXBsZW1lbnRlZCBieSB1c2VyIGluIHVzZXIgcG9ydGluZyBjb2RlDQorICovDQordHlwZWRlZiBzdHJ1Y3QgZGV2X3VhcnQNCit7DQorICAgIERFVl9VQVJUX0lORk8gdWFydF9pbmZvOyAgICAgICAgICAgICAgICAvKiE8IFVBUlQgZGV2aWNlIGluZm9ybWF0aW9uICovDQorICAgIGludDMyX3QgKCp1YXJ0X29wZW4pKHVpbnQzMl90IGJhdWQpOyAgICAgICAgICAgIC8qITwgT3BlbiB1YXJ0IGRldmljZSAqLw0KKyAgICBpbnQzMl90ICgqdWFydF9jbG9zZSkodm9pZCk7ICAgICAgICAgICAgICAgIC8qITwgQ2xvc2UgdWFydCBkZXZpY2UgKi8NCisgICAgaW50MzJfdCAoKnVhcnRfY29udHJvbCkodWludDMyX3QgY3RybF9jbWQsIHZvaWQgKnBhcmFtKTsgICAgLyohPCBDb250cm9sIHVhcnQgZGV2aWNlICovDQorICAgIGludDMyX3QgKCp1YXJ0X3dyaXRlKShjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pOyAgLyohPCBTZW5kIGRhdGEgYnkgdWFydCBkZXZpY2UoYmxvY2tlZCkgKi8NCisgICAgaW50MzJfdCAoKnVhcnRfcmVhZCkodm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKTsgICAgIC8qITwgUmVhZCBkYXRhIGZyb20gdWFydCBkZXZpY2UoYmxvY2tlZCkgKi8NCit9IERFVl9VQVJULCAqIERFVl9VQVJUX1BUUjsNCisNCisvKioNCisgKiBcZm4gICAgICBpbnQzMl90ICgqIGRldl91YXJ0Ojp1YXJ0X29wZW4pICh1aW50MzJfdCBiYXVkKQ0KKyAqIFxkZXRhaWxzIG9wZW4gYW4gdWFydCBkZXZpY2Ugd2l0aCBkZWZpbmVkIGJhdWRyYXRlDQorICogXHBhcmFtW2luXSAgIGJhdWQgICAgXHJlZiBERVZJQ0VfSEFMX1VBUlRfQkFVRCAiaW5pdGlhbCBiYXVkcmF0ZSBvZiB1YXJ0IiwgbXVzdCA+IDANCisgKiBccmV0dmFsICBFX09LICAgIE9wZW4gc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgYW55IGlzc3Vlcw0KKyAqIFxyZXR2YWwgIEVfT1BORUQgSWYgZGV2aWNlIHdhcyBvcGVuZWQgYmVmb3JlIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMsDQorICogICAgICAgICAgdGhlbiBqdXN0IGluY3JlYXNlIHRoZSBccmVmIGRldl91YXJ0X2luZm86Om9wbl9jbnQgIm9wbl9jbnQiIGFuZCByZXR1cm4gXHJlZiBFX09QTkVEDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZA0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZA0KKyAqIFxyZXR2YWwgIEVfTk9TUFQgT3BlbiBzZXR0aW5ncyBhcmUgbm90IHN1cHBvcnRlZA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmbiAgICAgIGludDMyX3QgKCogZGV2X3VhcnQ6OnVhcnRfY2xvc2UpICh2b2lkKQ0KKyAqIFxkZXRhaWxzIGNsb3NlIGFuIHVhcnQgZGV2aWNlLCBqdXN0IGRlY3JlYXNlIHRoZSBccmVmIGRldl91YXJ0X2luZm86Om9wbl9jbnQgIm9wbl9jbnQiLA0KKyAqICAgICAgaWYgXHJlZiBkZXZfdWFydF9pbmZvOjpvcG5fY250ICJvcG5fY250IiBlcXVhbHMgMCwgdGhlbiBjbG9zZSB0aGUgZGV2aWNlDQorICogXHJldHZhbCAgRV9PSyAgICBDbG9zZSBzdWNjZXNzZnVsbHkgd2l0aG91dCBhbnkgaXNzdWVzKGluY2x1ZGluZyBzY2VuYXJpbyB0aGF0IGRldmljZSBpcyBhbHJlYWR5IGNsb3NlZCkNCisgKiBccmV0dmFsICBFX09QTkVEIERldmljZSBpcyBzdGlsbCBvcGVuZWQsIHRoZSBkZXZpY2UgXHJlZiBkZXZfdWFydF9pbmZvOjpvcG5fY250ICJvcG5fY250IiBkZWNyZWFzZWQgYnkgMQ0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQNCisgKi8NCisNCisvKioNCisgKiBcZm4gICAgICBpbnQzMl90ICgqIGRldl91YXJ0Ojp1YXJ0X2NvbnRyb2wpICh1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pDQorICogXGRldGFpbHMgY29udHJvbCBhbiB1YXJ0IGRldmljZSBieSBccmVmIGN0cmxfY21kLCB3aXRoIHBhc3NlZCBccmVmIHBhcmFtLg0KKyAqICB5b3UgY2FuIGNvbnRyb2wgdWFydCBkZXZpY2UgdXNpbmcgcHJlZGVmaW5lZCB1YXJ0IGNvbnRyb2wgY29tbWFuZHMgZGVmaW5lZCB1c2luZyBccmVmIERFVl9TRVRfU1lTQ01EDQorICogICh3aGljaCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGJzcCBkZXZlbG9wZXIpLCBzdWNoIGFzIFxyZWYgVUFSVF9DTURfU0VUX0JBVUQgImNoYW5nZSBiYXVkcmF0ZSIsDQorICogIFxyZWYgVUFSVF9DTURfRkxVU0hfT1VUUFVUICJmbHVzaCBvdXRwdXQiIGFuZCBccmVmIERFVklDRV9IQUxfVUFSVF9DVFJMQ01EICJtb3JlIi4NCisgKiAgQW5kIHlvdSBjYW4gYWxzbyBjb250cm9sIHVhcnQgZGV2aWNlIHVzaW5nIHlvdXIgb3duIHNwZWNpZmllZCBjb21tYW5kcyBkZWZpbmVkIHVzaW5nIFxyZWYgREVWX1NFVF9VU1JDTUQsDQorICogIGJ1dCB0aGVzZSBzcGVjaWZpZWQgY29tbWFuZHMgc2hvdWxkIGJlIGRlZmluZWQgaW4geW91ciBvd24gdWFydCBkZXZpY2UgZHJpdmVyIGltcGxlbWVudGF0aW9uLg0KKyAqIFxwYXJhbVtpbl0gICAgICAgY3RybF9jbWQgICAgXHJlZiBERVZJQ0VfSEFMX1VBUlRfQ1RSTENNRCAiY29udHJvbCBjb21tYW5kIiwgdG8gY2hhbmdlIG9yIGdldCBzb21lIHRoaW5nIHJlbGF0ZWQgdG8gdWFydA0KKyAqIFxwYXJhbVtpbixvdXRdICAgcGFyYW0gICAgICAgcGFyYW1ldGVycyB0aGF0IG1heWJlIGFyZ3VtZW50IG9mIHRoZSBjb21tYW5kLCBvciByZXR1cm4gdmFsdWVzIG9mIHRoZSBjb21tYW5kDQorICogXHJldHZhbCAgRV9PSyAgICBDb250cm9sIGRldmljZSBzdWNjZXNzZnVsbHkNCisgKiBccmV0dmFsICBFX0NMU0VEIERldmljZSBpcyBub3Qgb3BlbmVkDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZCBvciBub3QgZXhpc3RzDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkIGZvciBjdXJyZW50IGNvbnRyb2wgY29tbWFuZA0KKyAqIFxyZXR2YWwgIEVfU1lTICAgQ29udHJvbCBkZXZpY2UgZmFpbGVkLCBkdWUgdG8gaGFyZHdhcmUgaXNzdWVzLCBzdWNoIGFzIGRldmljZSBpcyBkaXNhYmxlZA0KKyAqIFxyZXR2YWwgIEVfQ1RYICAgQ29udHJvbCBkZXZpY2UgZmFpbGVkLCBkdWUgdG8gZGlmZmVyZW50IHJlYXNvbnMgbGlrZSBpbiB0cmFuc2ZlciBzdGF0ZQ0KKyAqIFxyZXR2YWwgIEVfTk9TUFQgQ29udHJvbCBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQgb3Igbm90IHZhbGlkDQorICovDQorDQorLyoqDQorICogXGZuICAgICAgaW50MzJfdCAoKiBkZXZfdWFydDo6dWFydF93cml0ZSkgKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCisgKiBcZGV0YWlscyBzZW5kIFxyZWYgZGF0YSB0aHJvdWdoIHVhcnQgd2l0aCBkZWZpbmVkIFxyZWYgbGVuKGJsb2NrZWQpLg0KKyAqIFxwYXJhbVtpbl0gICBkYXRhICAgIHBvaW50ZXIgdG8gZGF0YSBuZWVkIHRvIHNlbmQgYnkgdWFydCwgbXVzdCBub3QgYmUgTlVMTA0KKyAqIFxwYXJhbVtpbl0gICBsZW4gbGVuZ3RoIG9mIGRhdGEgdG8gYmUgc2VudCwgbXVzdCA+IDANCisgKiBccmV0dmFsICA+MCAgQnl0ZSBjb3VudCB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgc2VudCBmb3IgcG9sbCBtZXRob2QNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkIG9yIG5vdCBleGlzdHMNCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQNCisgKiBccmV0dmFsICBFX1NZUyAgIENhbid0IHdyaXRlIGRhdGEgdG8gaGFyZHdhcmUgZHVlIHRvIGhhcmR3YXJlIGlzc3Vlcywgc3VjaCBhcyBkZXZpY2UgaXMgZGlzYWJsZWQNCisgKi8NCisNCisvKioNCisgKiBcZm4gICAgICBpbnQzMl90ICgqIGRldl91YXJ0Ojp1YXJ0X3JlYWQpICh2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pDQorICogXGRldGFpbHMgcmVjZWl2ZSBccmVmIGRhdGEgb2YgZGVmaW5lZCBccmVmIGxlbiB0aHJvdWdoIHVhcnQoYmxvY2tlZCkuDQorICogXHBhcmFtW291dF0gIGRhdGEgICAgcG9pbnRlciB0byBkYXRhIG5lZWQgdG8gcmVjZWl2ZWQgYnkgdWFydCwgbXVzdCBub3QgYmUgTlVMTA0KKyAqIFxwYXJhbVtpbl0gICBsZW4gbGVuZ3RoIG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQsIG11c3QgPiAwDQorICogXHJldHZhbCAgPjAgIEJ5dGUgY291bnQgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGZvciBwb2xsIG1ldGhvZA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZA0KKyAqIFxyZXR2YWwgIEVfU1lTICAgQ2FuJ3QgcmVjZWl2ZSBkYXRhIGZyb20gaGFyZHdhcmUgZHVlIHRvIGhhcmR3YXJlIGlzc3Vlcywgc3VjaCBhcyBkZXZpY2UgaXMgZGlzYWJsZWQNCisgKi8NCisvKiogQH0gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgKiBcYnJpZWYgICBnZXQgYW4gXHJlZiBkZXZfdWFydCAidWFydCBkZXZpY2UiIGJ5IHVhcnQgZGV2aWNlIGlkLg0KKyAqICBGb3IgaG93IHRvIHVzZSB1YXJ0IGRldmljZSBoYWwgcmVmZXIgdG8gXHJlZiBERVZJQ0VfSEFMX1VBUlRfREVWU1RSVUNUICJGdW5jdGlvbnMgaW4gdWFydCBkZXZpY2Ugc3RydWN0dXJlIg0KKyAqIFxwYXJhbVtpbl0gICB1YXJ0X2lkIGlkIG9mIHVhcnQsIGRlZmluZWQgYnkgdXNlcg0KKyAqIFxyZXR2YWwgICFOVUxMICAgcG9pbnRlciB0byBhbiBccmVmIGRldl91YXJ0ICJ1YXJ0IGRldmljZSBzdHJ1Y3R1cmUiDQorICogXHJldHZhbCAgTlVMTCAgICBmYWlsZWQgdG8gZmluZCB0aGUgdWFydCBkZXZpY2UgYnkgXHJlZiB1YXJ0X2lkDQorICogXG5vdGUgICAgbmVlZCB0byBpbXBsZW1lbnRlZCBieSB1c2VyIGluIHVzZXIgY29kZQ0KKyAqLw0KK2V4dGVybiBERVZfVUFSVF9QVFIgdWFydF9nZXRfZGV2KGludDMyX3QgdWFydF9pZCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKy8qKiBAfSAqLw0KKyNlbmRpZiAvKiBfREVWSUNFX0hBTF9VQVJUX0hfICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2VtYkFSQ19CU1BfY29uZmlnLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZW1iQVJDX0JTUF9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNzJjZjBmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2VtYkFSQ19CU1BfY29uZmlnLmgKQEAgLTAsMCArMSw4MyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0xMi0yNQ0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQ09NTU9OX0NPTkZJRw0KKyAqIFxicmllZiAgIGhlYWRlciBmaWxlIHRvIGRlZmluZSBjb21tb24gZGVmaW5pdGlvbnMgZXJyb3IgbWFuYWdlbWVudA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBDT01NT05fQ09ORklHDQorICogQHsNCisgKi8NCisNCisjaWZuZGVmIF9DT01NT05fQ09ORklHX0hfDQorI2RlZmluZSBfQ09NTU9OX0NPTkZJR19IXw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgQk9BUkRfRU1TSw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQlNQIERlZmluaXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioNCisgKiAgVG9vbGNoYWluIERlZmluaXRpb24gZm9yIE1ldGFXYXJlIG9yIEdOVQ0KKyAqLw0KKy8vICNkZWZpbmUgX19NV19fDQorI2RlZmluZSBfX0dOVV9fDQorI2RlZmluZSBfSEFWRV9MSUJHTE9TU18NCisNCisvKioNCisgKiAgVXNlIHRhc2tfbWFpbiBpbiBlbWJBUkMgU3RhcnR1cCBwcm9jZXNzLiBTZWUgYm9hcmQvYm9hcmQuYyBmb3IgZGV0YWlscy4NCisgKi8NCisjZGVmaW5lIEVNQkFSQ19VU0VfQk9BUkRfTUFJTg0KKw0KKy8qKg0KKyAqICBNdXN0IGJlIHNldC4NCisgKiAgSWYgY2hhbmdlZCwgbW9kaWZ5IC5sY2YgZmlsZSBmb3INCisgKiAgLnN0YWNrIEFMSUdOKDQpIFNJWkUoNTI0Mjg4KToge30NCisgKiAgLmhlYXA/IEFMSUdOKDQpIFNJWkUoNTI0Mjg4KToge30NCisgKi8NCisjZGVmaW5lIF9TVEFDS1NJWkUgICAgICAgICAgNTI0Mjg4DQorI2RlZmluZSBfSEVBUFNaICAgICAgICAgICAgIDUyNDI4OA0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0NPTU1PTl9DT05GSUdfSF8gKi8NCisvKiogQH0gZW5kIG9mIGdyb3VwIENPTU1PTl9DT05GSUcgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmMuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYzdhZTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmMuaApAQCAtMCwwICsxLDQzNiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNi0yMA0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQVJDX0hBTF9DT1JFX0NPTU0NCisgKiBcYnJpZWYgIGhlYWRlciBmaWxlIGluY2x1ZGluZyBjb21tb24gY29yZSBkZWZpbml0aW9ucw0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIEFSQ19IQUxfQ09SRV9DT01NDQorICogQHsNCisgKi8NCisNCisNCisjaWZuZGVmIF9BUkNfSEFMX0NPUkVfSF8NCisjZGVmaW5lIF9BUkNfSEFMX0NPUkVfSF8NCisNCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfZmVhdHVyZV9jb25maWcuaCINCisNCisvKioNCisgKiBcbmFtZSBleGNlcHRpb24gbnVtYmVyIGRlZmluaXRpb25zDQorICogQHsNCisgKi8NCisNCisvKiBBUkMgZXhjZXB0aW9uIG51bWJlciAqLw0KKyNkZWZpbmUgRVhDX05PX1JFU0VUICAgICAgICAgICAgKDApIC8qITwgcmVzZXQgdmVjdG9yLCB0aGUgZW50cnkgb2YgcG93ZXIgdXAgYW5kIHJlc2V0ICovDQorI2RlZmluZSBFWENfTk9fTUVNX0VSUiAgICAgICAgICAoMSkgLyohPCBleHRlcm5hbCBtZW1vcnkgYnVzIGVycm9yICovDQorI2RlZmluZSBFWENfTk9fSU5TX0VSUiAgICAgICAgICAoMikgLyohPCBpbGxlZ2FsIGluc3RydWN0aW9uIG9yIGlsbGVnYWwgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgKi8NCisjZGVmaW5lIEVYQ19OT19NQUNfQ0hLICAgICAgICAgICgzKSAvKiE8IG1hY2hpbmUgY2hlY2sgZXJyb3IgKi8NCisjZGVmaW5lIEVYQ19OT19UTEJfTUlTU19JICAgICAgICg0KSAvKiE8IGluc3RydWN0aW9uIFRMQiBtaXNzaW5nIGV4Y2VwdGlvbiwgdXNlbGVzcyB3aXRob3V0IE1NVSAqLw0KKyNkZWZpbmUgRVhDX05PX1RMQl9NSVNTX0QgICAgICAgKDUpIC8qITwgZGF0YSBUTEIgbWlzc2luZyBleGNlcHRpb24sIHVzZWxlc3Mgd2l0aG91dCBNTVUgKi8NCisjZGVmaW5lIEVYQ19OT19QUk9fVklPICAgICAgICAgICg2KSAvKiE8IHByb3RlY3Rpb24gdmlvbGF0aW9uICovDQorI2RlZmluZSBFWENfTk9fUFJJX1ZJTyAgICAgICAgICAoNykgLyohPCBwcml2aWxlZ2UgdmlvbGF0aW9uICovDQorI2RlZmluZSBFWENfTk9fU1dJICAgICAgICAgICg4KSAvKiE8IHNvZnR3YXJlIGludGVycnVwdCAqLw0KKyNkZWZpbmUgRVhDX05PX1RSQVAgICAgICAgICAoOSkgLyohPCB0cmFwICovDQorI2RlZmluZSBFWENfTk9fRVhUICAgICAgICAgICgxMCkgICAgLyohPCBleHRlbnNpb24gZXhjZXB0aW9uICovDQorI2RlZmluZSBFWENfTk9fRElWX1pFUjAgICAgICAgICAoMTEpICAgIC8qITwgZGl2aWRlIGJ5IHplcm8gKi8NCisjZGVmaW5lIEVYQ19OT19EQ19FUlIgICAgICAgICAgICgxMikgICAgLyohPCBkYXRhIGNhY2hlIGNvbnNpc3RlbmN5IGVycm9yICovDQorI2RlZmluZSBFWENfTk9fTUFMX0FMSUdOICAgICAgICAoMTMpICAgIC8qITwgbWlzYWxpZ25lZCBkYXRhIGFjY2VzcyAqLw0KKyNkZWZpbmUgRVhDX05PX1JFU0VSVkUwICAgICAgICAgKDE0KSAgICAvKiE8IHJlc2VydmVkICovDQorI2RlZmluZSBFWENfTk9fUkVTRVJWRTEgICAgICAgICAoMTUpICAgIC8qITwgcmVzZXJ2ZWQgKi8NCisNCisvKiBleHRlbnNpb24gaW50ZXJydXB0cyAqLw0KKyNkZWZpbmUgRVhDX05PXzE2ICAgICAgICAgICAoMTYpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAxNiAqLw0KKyNkZWZpbmUgRVhDX05PXzE3ICAgICAgICAgICAoMTcpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAxNyAqLw0KKyNkZWZpbmUgRVhDX05PXzE4ICAgICAgICAgICAoMTgpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAxOCAqLw0KKyNkZWZpbmUgRVhDX05PXzE5ICAgICAgICAgICAoMTkpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAxOSAqLw0KKyNkZWZpbmUgRVhDX05PXzIwICAgICAgICAgICAoMjApICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAyMCAqLw0KKyNkZWZpbmUgRVhDX05PXzIxICAgICAgICAgICAoMjEpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAyMSAqLw0KKyNkZWZpbmUgRVhDX05PXzIyICAgICAgICAgICAoMjIpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAyMiAqLw0KKyNkZWZpbmUgRVhDX05PXzIzICAgICAgICAgICAoMjMpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAyMyAqLw0KKyNkZWZpbmUgRVhDX05PXzI0ICAgICAgICAgICAoMjQpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAyNCAqLw0KKyNkZWZpbmUgRVhDX05PXzI1ICAgICAgICAgICAoMjUpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAyNSAqLw0KKyNkZWZpbmUgRVhDX05PXzI2ICAgICAgICAgICAoMjYpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAyNiAqLw0KKyNkZWZpbmUgRVhDX05PXzI3ICAgICAgICAgICAoMjcpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAyNyAqLw0KKyNkZWZpbmUgRVhDX05PXzI4ICAgICAgICAgICAoMjgpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAyOCAqLw0KKyNkZWZpbmUgRVhDX05PXzI5ICAgICAgICAgICAoMjkpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAyOSAqLw0KKyNkZWZpbmUgRVhDX05PXzMwICAgICAgICAgICAoMzApICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAzMCAqLw0KKyNkZWZpbmUgRVhDX05PXzMxICAgICAgICAgICAoMzEpICAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAzMSAqLw0KKy8qIC4uLiBBUkMgc3VwcG9ydHMgMjU1IGludGVycnVwdCB2ZWN0b3JzIGF0IG1vc3QgKi8NCisjZGVmaW5lIEVYQ19OT18yNTUgICAgICAgICAgKDI1NSkgICAvKiE8IGludGVycnVwdCB2ZWN0b3IgMjU1ICovDQorDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgZXhjZXB0aW9uIHZlY3RvciBvZmZzZXQNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgRVhDX05PX1RPX09GRlNFVChubykgICAgKG5vIDw8IDIpDQorDQorLyogQVJDIGV4Y2VwdGlvbiB2ZWN0b3Igb2Zmc2V0ICovDQorI2RlZmluZSBFWENfVkVDVE9SX1JFU0VUICAgICAgICAoMHgwMCkgIC8qITwgRVhDX05PX1JFU0VUIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9NRU1fRVJSICAgICAgKDB4MDQpICAvKiE8IEVYQ19OT19NRU1fRVJSIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9JTlNfRVJSICAgICAgKDB4MDgpICAvKiE8IEVYQ19OT19JTlNfRVJSIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9NQUNfQ0hLICAgICAgKDB4MGMpICAvKiE8IEVYQ19OT19NQUNfQ0hLIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9UTEJfTUlTU19JICAgICAgICgweDEwKSAgLyohPCBFWENfTk9fVExCX01JU1NfSSBvZmZzZXQgKi8NCisjZGVmaW5lIEVYQ19WRUNUT1JfVExCX01JU1NfRCAgICAgICAoMHgxNCkgIC8qITwgRVhDX05PX1RMQl9NSVNTX0Qgb2Zmc2V0ICovDQorI2RlZmluZSBFWENfVkVDVE9SX1BST19WSU8gICAgICAoMHgxOCkgIC8qITwgRVhDX05PX1BST19WSU8gb2Zmc2V0ICovDQorI2RlZmluZSBFWENfVkVDVE9SX1BSSV9WSU8gICAgICAoMHgxYykgIC8qITwgRVhDX05PX1BSSV9WSU8gb2Zmc2V0ICovDQorI2RlZmluZSBFWENfVkVDVE9SX1NXSSAgICAgICAgICAoMHgyMCkgIC8qITwgRVhDX05PX1NXSSBvZmZzZXQgKi8NCisjZGVmaW5lIEVYQ19WRUNUT1JfVFJBUCAgICAgICAgICgweDI0KSAgLyohPCBFWENfTk9fVFJBUCBvZmZzZXQgKi8NCisjZGVmaW5lIEVYQ19WRUNUT1JfRVhUICAgICAgICAgICgweDI4KSAgLyohPCBFWENfTk9fRVhUIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9ESVZfWkVSMCAgICAgKDB4MmMpICAvKiE8IEVYQ19OT19ESVZfWkVSMCBvZmZzZXQgKi8NCisjZGVmaW5lIEVYQ19WRUNUT1JfRENfRVJSICAgICAgICgweDMwKSAgLyohPCBFWENfTk9fRENfRVJSIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9NQUxfQUxJR04gICAgICAgICgweDM0KSAgLyohPCBFWENfTk9fTUFMX0FMSUdOIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9SRVNFUlZFMCAgICAgKDB4MzgpICAvKiE8IEVYQ19OT19SRVNFUlZFMCBvZmZzZXQgKi8NCisjZGVmaW5lIEVYQ19WRUNUT1JfUkVTRVJWRTEgICAgICgweDNjKSAgLyohPCBFWENfTk9fUkVTRVJWRTEgb2Zmc2V0ICovDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgYnVpbGQgY29uZmlndXJhdGlvbiByZWdpc3Rlcg0KKyAqIEB7DQorICovDQorI2RlZmluZSBBVVhfQkNSX1ZFUiAgICAgICAgICgweDYwKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHZlcnNpb24gKi8NCisjZGVmaW5lIEFVWF9CQ1JfQlRBICAgICAgICAgKDB4NjMpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIEJUQSBMSU5LICovDQorI2RlZmluZSBBVVhfQkNSX1ZFQ0JBU0UgICAgICAgICAoMHg2OCkgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgaW50ZXJydXB0IHZlY3RvciBiYXNlICovDQorI2RlZmluZSBBVVhfQkNSX01QVSAgICAgICAgICgweDZkKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBtZW1vcnkgcHJvdGVjdGlvbiB1bml0ICovDQorI2RlZmluZSBBVVhfQkNSX1JGICAgICAgICAgICgweDZlKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBjb3JlIHJlZ2lzdGVycyAqLw0KKyNkZWZpbmUgQVVYX0JDUl9EX0NBQ0hFICAgICAgICAgKDB4NzIpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGRhdGEgY2FjaGUgKi8NCisjZGVmaW5lIEFVWF9CQ1JfRENDTSAgICAgICAgICAgICgweDc0KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBEQ0NNICovDQorI2RlZmluZSBBVVhfQkNSX1RJTUVSUyAgICAgICAgICAoMHg3NSkgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgcHJvY2Vzc29yIHRpbWVycyAqLw0KKyNkZWZpbmUgQVVYX0JDUl9BUCAgICAgICAgICAoMHg3NikgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYWN0aW9ucG9pbnRzICovDQorI2RlZmluZSBBVVhfQkNSX0lfQ0FDSEUgICAgICAgICAoMHg3NykgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8NCisjZGVmaW5lIEFVWF9CQ1JfSUNDTSAgICAgICAgICAgICgweDc4KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBJQ0NNICovDQorI2RlZmluZSBBVVhfQkNSX0RTUCAgICAgICAgICgweDdhKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBEU1AgKi8NCisjZGVmaW5lIEFVWF9CQ1JfTVVMICAgICAgICAgKDB4N2IpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIG11bHRpcGx5ICovDQorI2RlZmluZSBBVVhfQkNSX1NXQVAgICAgICAgICAgICAoMHg3YykgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3Igc3dhcCAqLw0KKyNkZWZpbmUgQVVYX0JDUl9OT1JNICAgICAgICAgICAgKDB4N2QpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIG5vcm1hbGl6ZSAqLw0KKyNkZWZpbmUgQVVYX0JDUl9NSVhNQVggICAgICAgICAgKDB4N2UpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIE1JTi9NQVggKi8NCisjZGVmaW5lIEFVWF9CQ1JfQkFSUkVMICAgICAgICAgICgweDdmKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBiYXJyZWwgc2hpZnQgKi8NCisjZGVmaW5lIEFVWF9CQ1JfSVNBICAgICAgICAgKDB4YzEpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIElTQSBjb25maWd1cmF0aW9uICovDQorI2RlZmluZSBBVVhfQkNSX1NUQUNLICAgICAgICAgICAoMHhjNSkgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3Igc3RhY2sgcmVnaW9uICovDQorI2RlZmluZSBBVVhfQkNSX0VSUCAgICAgICAgICgweGM3KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBlcnJvciBwcm90ZWN0aW9uICovDQorI2RlZmluZSBBVVhfQkNSX0ZQVSAgICAgICAgICgweGM4KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBmbG9hdGluZy1wb2ludCB1bml0ICovDQorI2RlZmluZSBBVVhfQkNSX0NQT1JUICAgICAgICAgICAoMHhjOSkgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgY29kZSBwcm90ZWN0aW9uICovDQorI2RlZmluZSBBVVhfQkNSX0JTICAgICAgICAgICgweGNiKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBiaXRzdHJlYW0gKi8NCisjZGVmaW5lIEFVWF9CQ1JfQUdVICAgICAgICAgKDB4Y2MpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGFkZHJlc3MgZ2VuZXJhdGUgdW5pdCAqLw0KKyNkZWZpbmUgQVVYX0JDUl9ETUFDICAgICAgICAgICAgKDB4Y2QpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIERNQSAqLw0KKyNkZWZpbmUgQVVYX0JDUl9DT05ORUNUX1NZU1RFTSAgICAgICgweGQwKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBhcmMgY29ubmVjdCAqLw0KKyNkZWZpbmUgQVVYX0JDUl9DT05ORUNUX1NFTUEgICAgICAgICgweGQxKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBpbnRlci1jb3JlIHNlbWFwaG9yZSAqLw0KKyNkZWZpbmUgQVVYX0JDUl9DT05ORUNUX01FU1NBR0UgICAgICgweGQyKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBpbnRlci1jb2RlIG1lc3NhZ2UgKi8NCisjZGVmaW5lIEFVWF9CQ1JfQ09OTkVDVF9QTVUgICAgICgweGQzKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBwb3dlciBtYW5hZ2VtZW50IHVuaXQgKi8NCisjZGVmaW5lIEFVWF9CQ1JfQ09OTkVDVF9HRlJDICAgICAgICAoMHhkNikgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgZ2xvYmFsIGZyZWUgcnVubmluZyBjb3VudGVyICovDQorI2RlZmluZSBBVVhfQkNSX0NBTF9TVE9SRSAgICAgICAoMHhkOSkgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgY2FsaWJyYXRpb24gcGFyYW1ldGVyIHN0b3JhZ2UgKi8NCisjZGVmaW5lIEFVWF9CQ1JfQ09OTkVDVF9JQ0kgICAgICgweGUwKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBpbnRlci1jb3JlIGludGVycnVwdCB1bml0ICovDQorI2RlZmluZSBBVVhfQkNSX0NPTk5FQ1RfSUNEICAgICAoMHhlMSkgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgaW50ZXItY29yZSBkZWJ1ZyB1bml0ICovDQorI2RlZmluZSBBVVhfQkNSX0NPTk5FQ1RfUERNICAgICAoMHhlMykgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgcG93ZXIgZG9tYWluIG1hbmFnZW1lbnQgdW5pdCovDQorI2RlZmluZSBBVVhfQkNSX1JUVCAgICAgICAgICgweGYyKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciByZWFsLXRpbWUgdHJhY2UgKi8NCisjZGVmaW5lIEFVWF9CQ1JfSVJRICAgICAgICAgKDB4ZjMpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGludGVycnVwdCAqLw0KKyNkZWZpbmUgQVVYX0JDUl9QQ1QgICAgICAgICAoMHhmNSkgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgcGVyZm9ybWFuY2UgY291bnRlcnMgKi8NCisjZGVmaW5lIEFVWF9CQ1JfQ0MgICAgICAgICAgKDB4ZjYpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHBlcmZvcm1hbmNlIGNvdW50ZXJzICovDQorI2RlZmluZSBBVVhfQkNSX1BETV9EVkZTICAgICAgICAoMHhmNykgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgUERNIGFuZCBEVkZTICovDQorDQorI2RlZmluZSBBVVhfQkNSX1NFQ19CVUlMRCAgICAgICAoMHhkYikNCisNCisvKiBmcm9tIDB4RjUgYW5kIDB4RjYgKi8NCisNCisjZGVmaW5lIEFVWF9CQ1JfSUZRVUVVRSAgICAgICAgICgweGZlKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBpbnN0cnVjdGlvbiBmZXRjaCBxdWV1ZSAqLw0KKyNkZWZpbmUgQVVYX0JDUl9TTUFSVCAgICAgICAgICAgKDB4ZmYpICAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBTbWFSVCBkZWJ1ZyBmZWF0dXJlICovDQorLyoqIEB9ICovDQorDQorDQorI2RlZmluZSBBVVhfU0VDX1NUQVQgICAgICAgICAgICAoMHg5KQ0KKyNkZWZpbmUgQVVYX1NFQ19TVEFUX0JJVF9TU0MgICAgICAgICgwKQ0KKyNkZWZpbmUgQVVYX1NFQ19TVEFUX0JJVF9OU1JUICAgICAgICgxKQ0KKyNkZWZpbmUgQVVYX1NFQ19TVEFUX0JJVF9OU1JVICAgICAgICgyKQ0KKyNkZWZpbmUgQVVYX1NFQ19TVEFUX0JJVF9JUk0gICAgICAgICgzKQ0KKyNkZWZpbmUgQVVYX1NFQ19TVEFUX0JJVF9TVUUgICAgICAgICg0KQ0KKyNkZWZpbmUgQVVYX1NFQ19TVEFUX0JJVF9OSUMgICAgICAgICg1KQ0KKw0KKy8qKg0KKyAqIFxuYW1lIHN0YXR1cyByZWdpc3RlciBTVEFUVVMzMg0KKyAqIEB7DQorICovDQorI2RlZmluZSBBVVhfU1RBVFVTMzIgICAgICAgICAgICAoMHhhKQ0KKyNkZWZpbmUgQVVYX1NUQVRVUzMyX1AwICAgICAgICAgKDB4YikNCisNCisvKiBTVEFUVVMzMiBiaXQtZmllbGQgZGVmaW5pdGlvbiAqLw0KKyNkZWZpbmUgQVVYX1NUQVRVU19CSVRfQUUgICAgICAgKDUpIC8qITwgcHJvY2Vzc29yIGlzIGluIGFuIGV4Y2VwdGlvbiAqLw0KKyNkZWZpbmUgQVVYX1NUQVRVU19CSVRfREUgICAgICAgKDYpIC8qITwgZGVsYXllZCBicmFuY2ggaXMgcGVuZGluZyAqLw0KKyNkZWZpbmUgQVVYX1NUQVRVU19CSVRfVSAgICAgICAgKDcpIC8qITwgdXNlciBtb2RlICovDQorI2RlZmluZSBBVVhfU1RBVFVTX0JJVF9MICAgICAgICAoMTIpICAgIC8qITwgemVyby1vdmVyaGVhZCBsb29wIGVuYWJsZSAqLw0KKyNkZWZpbmUgQVVYX1NUQVRVU19CSVRfSUUgICAgICAgKDMxKSAgICAvKiE8IGludGVycnVwdCBlbmFibGUgKi8NCisNCisvKiBtYXNrcyBjb3JyZXNwb25kIHRvIFNUQVRVUzMyIGJpdC1maWVsZCAqLw0KKyNkZWZpbmUgQVVYX1NUQVRVU19NQVNLX0FFICAgICAgKDE8PEFVWF9TVEFUVVNfQklUX0FFKSAgLyohPCBtYXNrIG9mIEFVWF9TVEFUVVNfQklUX0FFICovDQorI2RlZmluZSBBVVhfU1RBVFVTX01BU0tfREUgICAgICAoMTw8QVVYX1NUQVRVU19CSVRfREUpICAvKiE8IG1hc2sgb2YgQVVYX1NUQVRVU19CSVRfREUgKi8NCisjZGVmaW5lIEFVWF9TVEFUVVNfTUFTS19VICAgICAgICgxPDxBVVhfU1RBVFVTX0JJVF9VKSAgIC8qITwgbWFzayBvZiBBVVhfU1RBVFVTX0JJVF9VICovDQorI2RlZmluZSBBVVhfU1RBVFVTX01BU0tfTCAgICAgICAoMTw8QVVYX1NUQVRVU19CSVRfTCkgICAvKiE8IG1hc2sgb2YgQVVYX1NUQVRVU19CSVRfTCAqLw0KKyNkZWZpbmUgQVVYX1NUQVRVU19NQVNLX0lFICAgICAgKDE8PEFVWF9TVEFUVVNfQklUX0lFKSAgLyohPCBtYXNrIG9mIEFVWF9TVEFUVVNfQklUX0lFICovDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgemVybyBvdmVyaGVhZCBsb29wIGF1eGlsaWFyeSByZWdpc3Rlcg0KKyAqIEB7DQorICovDQorI2RlZmluZSBBVVhfTFBfU1RBUlQgICAgICAgICAgICAoMHgyKSAgIC8qITwgbG9vcCBzdGFydCBhZGRyZXNzICgzMi1iaXQpICovDQorI2RlZmluZSBBVVhfTFBfRU5EICAgICAgICAgICgweDMpICAgLyohPCBsb29wIGVuZCBhZGRyZXNzICgzMi1iaXQpICovDQorLyoqIEB9ICovDQorDQorI2RlZmluZSBBVVhfVVNFUl9TUCAgICAgICAgICgweGQpICAgLyohPCB1c2VyLW1vZGUgc3RhY2sgcG9pbnRlciAqLw0KKy8qIGFkZGVkIGluIHNpbHZlcnN0b25lICovDQorI2RlZmluZSBBVVhfS0VSTkVMX1NQICAgICAgICAgICAoMHgzOCkgIC8qITwga2VybmVsLW1vZGUgc3RhY2sgcG9pbnRlciAqLw0KKyNkZWZpbmUgQVVYX1NFQ19VX1NQICAgICAgICAgICAgKDB4MzkpICAvKiE8IHNlY3VyZSB1c2VyLW1vZGUgc3RhY2sgcG9pbnRlciAqLw0KKyNkZWZpbmUgQVVYX1NFQ19LX1NQICAgICAgICAgICAgKDB4M2EpICAvKiE8IHNlY3VyZSBrZXJuZWwtbW9kZSBzdGFjayBwb2ludGVyICovDQorDQorLyogYWRkaXRpb25hbCBzdGFjayBjaGVja2luZ2ggcmVnaXN0ZXJzIGZvciBzZWN1cmUgbW9kZSAqLw0KKyNkZWZpbmUgQVVYX1NfVVNUQUNLX0JBU0UgICAgICAgKDB4MjYzKQ0KKyNkZWZpbmUgQVVYX1NfVVNUQUNLX1RPUCAgICAgICAgKDB4MjYyKQ0KKw0KKyNkZWZpbmUgQVVYX1NfS1NUQUNLX0JBU0UgICAgICAgKDB4MjY3KQ0KKyNkZWZpbmUgQVVYX1NfS1NUQUNLX1RPUCAgICAgICAgKDB4MjY2KQ0KKw0KKy8qKg0KKyAqIFxuYW1lIGF1eGlsaWFyeSByZWdpc3RlciBmb3IgaGFyZHdhcmUgY291bnRlciAwIGFuZCAxDQorICogQHsNCisgKi8NCisjZGVmaW5lIEFVWF9USU1FUjBfTElNSVQgICAgICAgICgweDIzKSAgLyohPCB0aW1lciAwIGxpbWl0IHZhbHVlICovDQorI2RlZmluZSBBVVhfVElNRVIwX0NUUkwgICAgICAgICAoMHgyMikgIC8qITwgdGltZXIgMCBjb250cm9sIHZhbHVlICovDQorI2RlZmluZSBBVVhfVElNRVIwX0NOVCAgICAgICAgICAoMHgyMSkgIC8qITwgdGltZXIgMCBjb3VudCB2YWx1ZSAqLw0KKyNkZWZpbmUgQVVYX1RJTUVSMV9MSU1JVCAgICAgICAgKDB4MTAyKSAvKiE8IHRpbWVyIDEgbGltaXQgdmFsdWUgKi8NCisjZGVmaW5lIEFVWF9USU1FUjFfQ1RSTCAgICAgICAgICgweDEwMSkgLyohPCB0aW1lciAxIGNvbnRyb2wgdmFsdWUgKi8NCisjZGVmaW5lIEFVWF9USU1FUjFfQ05UICAgICAgICAgICgweDEwMCkgLyohPCB0aW1lciAxIGNvdW50IHZhbHVlICovDQorLyoqIEB9ICovDQorDQorI2RlZmluZSBBVVhfU0VDVVJFX1RJTUVSMF9DTlQgICAgICAgKDB4MTA2KSAvKiE8IHNlY3VyZSB0aW1lciAwIGNvdW50IHZhbHVlICovDQorI2RlZmluZSBBVVhfU0VDVVJFX1RJTUVSMF9DVFJMICAgICAgKDB4MTA3KSAvKiE8IHNlY3VyZSB0aW1lciAwIGNvbnRyb2wgdmFsdWUgKi8NCisjZGVmaW5lIEFVWF9TRUNVUkVfVElNRVIwX0xJTUlUICAgICAoMHgxMDgpIC8qITwgc2VjdXJlIHRpbWVyIDAgbGltaXQgdmFsdWUgKi8NCisjZGVmaW5lIEFVWF9TRUNVUkVfVElNRVIxX0NOVCAgICAgICAoMHgxMDkpIC8qITwgc2VjdXJlIHRpbWVyIDEgY291bnQgdmFsdWUgKi8NCisjZGVmaW5lIEFVWF9TRUNVUkVfVElNRVIxX0NUUkwgICAgICAoMHgxMGEpIC8qITwgc2VjdXJlIHRpbWVyIDEgY29udHJvbCB2YWx1ZSAqLw0KKyNkZWZpbmUgQVVYX1NFQ1VSRV9USU1FUjFfTElNSVQgICAgICgweDEwYikgLyohPCBzZWN1cmUgdGltZXIgMSBsaW1pdCB2YWx1ZSAqLw0KKw0KKw0KKy8qKg0KKyAqIFxuYW1lIGF1eGlsaWFyeSByZWdpc3RlciBmb3IgcmVhbC10aW1lIGNvdW50ZXINCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQVVYX1JUQ19DVFJMICAgICAgICAgICAgKDB4MTAzKSAvKiE8IHJlYWwtdGltZSBjb3VudGVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9SVENfTE9XICAgICAgICAgKDB4MTA0KSAvKiE8IHJlYWwtdGltZSBjb3VudGVyIGNvdW50IGxvdyByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX1JUQ19ISUdIICAgICAgICAgICAgKDB4MTA1KSAvKiE8IHJlYWwtdGltZSBjb3VudGVyIGNvdW50IGhpZ2ggcmVnaXN0ZXIgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSBpbmRleGVkIHRhYmxlIGF1eGlsaWFyeSByZWdpc3Rlcg0KKyAqIEB7DQorICovDQorI2RlZmluZSBBVVhfSkxJX0JBU0UgICAgICAgICAgICAoMHgyOTApIC8qITwganVtcCBhbmQgbGluayBpbmRleGVkIGJhc2UgYWRkcmVzcyAqLw0KKyNkZWZpbmUgQVVYX0xESV9CQVNFICAgICAgICAgICAgKDB4MjkxKSAvKiE8IGxvYWQgaW5kZXhlZCBiYXNlIGFkZHJlc3MgKi8NCisjZGVmaW5lIEFVWF9FSV9CQVNFICAgICAgICAgKDB4MjkyKSAvKiE8IGV4ZWN1dGUgaW5kZXhlZCBiYXNlIGFkZHJlc3MgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSBiYXNlbGluZSBhdXhpbGlhcnkgcmVnaXN0ZXIgc2V0DQorICogQHsNCisgKi8NCisvKiB0byBiZSBhZGRlZCAqLw0KKyNkZWZpbmUgQVVYX0VSUkVUICAgICAgICAgICAoMHg0MDApIC8qITwgZXhjZXB0aW9uIHJldHVybiBhZGRyZXNzICovDQorI2RlZmluZSBBVVhfRVJCVEEgICAgICAgICAgICgweDQwMSkgLyohPCBCVEEgc2F2ZWQgb24gZXhjZXB0aW9uIGVudHJ5ICovDQorI2RlZmluZSBBVVhfRVJTVEFUVVMgICAgICAgICAgICAoMHg0MDIpIC8qITwgU1RBVFVTMzIgc2F2ZWQgb24gZXhjZXB0aW9uICovDQorI2RlZmluZSBBVVhfRUNSICAgICAgICAgICAgICgweDQwMykgLyohPCBleGNlcHRpb24gY2F1c2UgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9FRkEgICAgICAgICAgICAgKDB4NDA0KSAvKiE8IGV4Y2VwdGlvbiBmYXVsdCBhZGRyZXNzICovDQorI2RlZmluZSBBVVhfQlRBICAgICAgICAgICAgICgweDQxMikgLyohPCBicmFuY2ggdGFyZ2V0IGFkZHJlc3MgKi8NCisvKiogQH0gKi8NCisNCisvKiBOZXcgcmVnaXN0ZXIgdG8gY29udHJvbCB3aGljaCBleGNlcHRpb25zIGNhbiBiZSBoYW5kbGVkIGluIE5TIG1vZGUgKi8NCisjZGVmaW5lIEFVWF9FUlNFQ19TVEFUICAgICAgICAgICgweDQwNikNCisjZGVmaW5lIEFVWF9FUlNFQ19TVEFUX0JJVF9FUk0gICAgICAzMQ0KKyNkZWZpbmUgQVVYX1NFQ19FWENFUFQgICAgICAgICAgKDB4NDA3KQ0KKw0KKy8qKg0KKyAqIFxuYW1lIE1QVSByZWdpc3RlciBzZXQNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQVVYX01QVV9FTiAgICAgICAgICAgICAgKDB4NDA5KSAvKiE8IE1QVSBlbmFibGUgcmVnaXN0ZXIgICovDQorI2RlZmluZSBBVVhfTVBVX0VDUiAgICAgICAgICgweDQyMCkgLyohPCBNUFUgZXhjZXB0aW9uIGNhdXNlICovDQorI2RlZmluZSBBVVhfTVBVX1JEQjAgICAgICAgICAgICAoMHg0MjIpIC8qITwgTVBVIHJlZ2lvbiBkZXNjcmlwdG9yIGJhc2UgMCAqLw0KKyNkZWZpbmUgQVVYX01QVV9SRFAwICAgICAgICAgICAgKDB4NDIzKSAvKiE8IE1QVSByZWdpb24gZGVzY3JpcHRvciBwZXJtaXNzaW9uIDAgKi8NCisNCisvKiBNUFUgcmVnaXN0ZXIgc2V0IGluIHNpbHZlcnN0b25lICovDQorI2RlZmluZSBBVVhfTVBVX0lOREVYICAgICAgICAgICAoMHg0NDgpDQorI2RlZmluZSBBVVhfTVBVX0lOREVYX0JJVF9EICAgICAoMzEpDQorI2RlZmluZSBBVVhfTVBVX1JTVEFSVCAgICAgICAgICAoMHg0NDkpDQorI2RlZmluZSBBVVhfTVBVX1JFTkQgICAgICAgICAgICAoMHg0NGEpDQorI2RlZmluZSBBVVhfTVBVX1JQRVIgICAgICAgICAgICAoMHg0NGIpDQorI2RlZmluZSBBVVhfTVBVX1JQRVJfQklUX1MgICAgICAoMTUpDQorI2RlZmluZSBBVVhfTVBVX1BST0JFICAgICAgICAgICAoMHg0NGMpDQorI2RlZmluZSBBVVhfTVBVX0VDUiAgICAgICAgICgweDQyMCkNCisNCisjZGVmaW5lIEFVWF9OU0NfVEFCTEVfQkFTRSAgICAgICgweDI2OSkNCisjZGVmaW5lIEFVWF9OU0NfVEFCTEVfVE9QICAgICAgICgweDI2OCkNCisNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSBleGNlcHRpb24gY2F1c2UgcmVnaXN0ZXIgKEVDUikgYml0LWZpZWxkIGRlZmluaXRpb24NCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQVVYX0VDUl9WRUNfTUFTSyAgICAgICAgKDB4ZmYwMDAwKSAgLyohPCBbMjM6MTZdID0gZXhjZXB0aW9uIHZlY3RvciAqLw0KKyNkZWZpbmUgQVVYX0VDUl9DT0RFX01BU0sgICAgICAgKDB4MDBmZjAwKSAgLyohPCBbMTU6IDhdID0gZXhjZXB0aW9uIGNhdXNlIGNvZGUgKi8NCisjZGVmaW5lIEFVWF9FQ1JfUEFSQU1fTUFTSyAgICAgICgweDAwMDBmZikgIC8qITwgWyA3OiAwXSA9IGV4Y2VwdGlvbiBwYXJhbWV0ZXJzICovDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgZXhjZXB0aW9uIHZlY3RvciBudW1iZXIgYW5kIGNhdXNlIGNvZGUNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQVVYX0VDUl9WX0lOU05fRVJSICAgICAgKDB4MDIpICAvKiE8IHZlY3RvciBudW1iZXIgb2YgaWxsZWdhbCBpbnN0cnVjdGlvbiAqLw0KKyNkZWZpbmUgQVVYX0VDUl9WX01BQ0hfQ0hLICAgICAgKDB4MDMpICAvKiE8IHZlY3RvciBudW1iZXIgb2YgbWFjaGluZSBjaGVjayAqLw0KKyNkZWZpbmUgQVVYX0VDUl9WX0lUTEJfTUlTUyAgICAgKDB4MDQpICAvKiE8IHZlY3RvciBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gVExCIG1pc3NpbmcgZXhjZXB0aW9uICovDQorI2RlZmluZSBBVVhfRUNSX1ZfRFRMQl9NSVNTICAgICAoMHgwNSkgIC8qITwgdmVjdG9yIG51bWJlciBvZiBkYXRhIFRMQiBtaXNzaW5nIGV4Y2VwdGlvbiAqLw0KKyNkZWZpbmUgQVVYX0VDUl9WX1BST1RWICAgICAgICAgKDB4MDYpICAvKiE8IHZlY3RvciBudW1iZXIgb2YgcHJvdGVjdGlvbiB2aW9sYXRpb24gKi8NCisjZGVmaW5lIEFVWF9FQ1JfVl9UUkFQICAgICAgICAgICgweDA5KSAgLyohPCB2ZWN0b3IgbnVtYmVyIG9mIHRyYXAgKi8NCisjZGVmaW5lIEFVWF9FQ1JfVl9NSVNBTElHX0RBVEEgICAgICAoMHgwZCkgIC8qITwgdmVjdG9yIG51bWJlciBvZiBtaXNhbGlnbmVkIGRhdGEgYWNjZXNzICovDQorDQorI2RlZmluZSBBVVhfRUNSX0NfUFJPVFZfSU5TVF9GRVRDSCAgKDB4MDApICAvKiE8IGNhdXNlIGNvZGUgb2YgaW5zdHJ1Y3Rpb24gZmV0Y2ggKHByb3RlY3Rpb24gdmlvbGF0aW9uKSAqLw0KKyNkZWZpbmUgQVVYX0VDUl9DX1BST1RWX0xPQUQgICAgICAgICgweDAxKSAgLyohPCBjYXVzZSBjb2RlIHJlbGF0ZWQgbWVtb3J5IHJlYWQgKHByb3RlY3Rpb24gdmlvbGF0aW9uKSAqLw0KKyNkZWZpbmUgQVVYX0VDUl9DX1BST1RWX1NUT1JFICAgICAgICgweDAyKSAgLyohPCBjYXVzZSBjb2RlIHJlbGF0ZWQgbWVtb3J5IHdyaXRlIChwcm90ZWN0aW9uIHZpb2xhdGlvbikgKi8NCisjZGVmaW5lIEFVWF9FQ1JfQ19QUk9UVl9YQ0hHICAgICAgICAoMHgwMykgIC8qITwgY2F1c2UgY29kZSByZWxhdGVkIHJlYWQtbW9kaWZ5LXdyaXRlIChwcm90ZWN0aW9uIHZpb2xhdGlvbikgKi8NCisNCisjZGVmaW5lIEFVWF9FQ1JfQ19NQ0hLX0RVUF9UTEIgICAgICAoMHgwMSkgIC8qITwgXHRvZG8gZGVmaW5pdGlvbiBpcyB0byBiZSBhZGRlZC4gKi8NCisNCisjZGVmaW5lIEFVWF9FQ1JfQ19CSVRfRFRMQl9MRF9NSVNTICAoOCkgLyohPCBcdG9kbyBkZWZpbml0aW9uIGlzIHRvIGJlIGFkZGVkLiAqLw0KKyNkZWZpbmUgQVVYX0VDUl9DX0JJVF9EVExCX1NUX01JU1MgICg5KSAvKiE8IFx0b2RvIGRlZmluaXRpb24gaXMgdG8gYmUgYWRkZWQuICovDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgaW50ZXJydXB0IHJlbGF0ZWQgYXV4aWxpYXJ5IHJlZ2lzdGVyDQorICogQHsNCisgKi8NCisjZGVmaW5lIEFVWF9JUlFfQ1RSTCAgICAgICAgICAgICgweGUpICAgLyohPCBpbnRlcnJ1cHQgY29udGV4dCBzYXZpbmcgY29udHJvbCByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lOVF9WRUNUX0JBU0UgICAgICAgKDB4MjUpICAvKiE8IGludGVycnVwdCB2ZWN0b3IgYmFzZSByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lOVF9WRUNUX0JBU0VfUyAgICAgKDB4MjYpICAvKiE8IHNlY3VyZSBpbnRlcnJ1cHQgdmVjdG9yIGJhc2VkIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfSVJRX0FDVCAgICAgICAgICgweDQzKSAgLyohPCBhY3RpdmUgaW50ZXJydXB0cyByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lSUV9DQVVTRSAgICAgICAgICAgKDB4NDBhKSAvKiE8IGludGVycnVwdCBjYXVzZSByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lSUV9TRUxFQ1QgICAgICAgICAgKDB4NDBiKSAvKiE8IGludGVycnVwdCBzZWxlY3QgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9JUlFfUFJJT1JJVFkgICAgICAgICgweDIwNikgLyohPCBpbnRlcnJ1cHQgcHJpb3JpdHkgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9JUlFfUFJJT1JJVFlfQklUX1MgICAgICAoMHg4KSAgIC8qITwgUyBiaXQgb2Zmc2V0IGluIGludGVycnVwdCBwcmlvcml0eSByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lSUV9FTkFCTEUgICAgICAgICAgKDB4NDBjKSAvKiE8IGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9JUlFfVFJJR0dFUiAgICAgICAgICgweDQwZCkgLyohPCBpbnRlcnJ1cHQgdHJpZ2dlcjogbGV2ZWwgb3IgcHVsc2UgKi8NCisjZGVmaW5lIEFVWF9JUlFfUEVORElORyAgICAgICAgICgweDQxNikgLyohPCBpbnRlcnJ1cHQgcGVuZGluZyByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lSUV9QTFVTRV9DTFIgICAgICAgKDB4NDE1KSAvKiE8IGludGVycnVwdCBwdWxzZSBjYW5jZWwgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9JUlFfU1RBVFVTICAgICAgICAgICgweDQwZikgLyohPCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfSVJRX1BSSV9QRU5ESU5HICAgICAoMHgyMDApIC8qITwgaW50ZXJydXB0IHByaW9yaXR5IHBlbmRpbmcgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9JUlFfSElOVCAgICAgICAgICAgICgweDIwMSkgLyohPCBzb2Z0d2FyZSBpbnRlcnJ1cHQgdHJpZ2dlciAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lIGNhY2hlIHJlbGF0ZWQgYXV4aWxpYXJ5IHJlZ2lzdGVyDQorICogQHsNCisgKi8NCisjZGVmaW5lIEFVWF9JQ19JVklDICAgICAgICAgKDB4MTApICAvKiE8IGludmFsaWRhdGUgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8NCisjZGVmaW5lIEFVWF9JQ19DVFJMICAgICAgICAgKDB4MTEpICAvKiE8IGluc3RydWN0aW9uIGNhY2hlIGNvbnRyb2wgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9JQ19MSUwgICAgICAgICAgKDB4MTMpICAvKiE8IGxvY2sgaW5zdHJ1Y3Rpb24gY2FjaGUgbGluZSAqLw0KKyNkZWZpbmUgQVVYX0lDX0lWSUwgICAgICAgICAoMHgxOSkgIC8qITwgaW52YWxpZGF0ZSBpbnN0cnVjdGlvbiBjYWNoZSBsaW5lICovDQorI2RlZmluZSBBVVhfSUNfUkFNX0FERFIgICAgICAgICAoMHgxYSkgIC8qITwgaW5zdHJ1Y3Rpb24gY2FjaGUgZXh0ZXJuYWwgYWNjZXNzIGFkZHJlc3MgKi8NCisjZGVmaW5lIEFVWF9JQ19UQUcgICAgICAgICAgKDB4MWIpICAvKiE8IGluc3RydWN0aW9uIGNhY2hlIHRhZyBhY2Nlc3MgKi8NCisjZGVmaW5lIEFVWF9JQ19EQVRBICAgICAgICAgKDB4MWQpICAvKiE8IGluc3RydWN0aW9uIGNhY2hlIGRhdGEgYWNjZXNzICovDQorI2RlZmluZSBBVVhfRENfSVZEQyAgICAgICAgICgweDQ3KSAgLyohPCBpbnZhbGlkYXRlIGRhdGEgY2FjaGUgKi8NCisjZGVmaW5lIEFVWF9EQ19DVFJMICAgICAgICAgKDB4NDgpICAvKiE8IGRhdGEgY2FjaGUgY29udHJvbCByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0RDX0xETCAgICAgICAgICAoMHg0OSkgIC8qITwgbG9jayBkYXRhIGNhY2hlIGxpbmUgKi8NCisjZGVmaW5lIEFVWF9EQ19JVkRMICAgICAgICAgKDB4NGEpICAvKiE8IGludmFsaWRhdGUgZGF0YSBjYWNoZSBsaW5lICovDQorI2RlZmluZSBBVVhfRENfRkxTSCAgICAgICAgICgweDRiKSAgLyohPCBmbHVzaCBkYXRhIGNhY2hlICovDQorI2RlZmluZSBBVVhfRENfRkxETCAgICAgICAgICgweDRjKSAgLyohPCBmbHVzaCBkYXRhIGxpbmUgKi8NCisjZGVmaW5lIEFVWF9EQ19SQU1fQUREUiAgICAgICAgICgweDU4KSAgLyohPCBkYXRhIGNhY2hlIGV4dGVybmFsIGFjY2VzcyBhZGRyZXNzICovDQorI2RlZmluZSBBVVhfRENfVEFHICAgICAgICAgICgweDU5KSAgLyohPCBkYXRhIGNhY2hlIHRhZyBhY2Nlc3MgKi8NCisjZGVmaW5lIEFVWF9EQ19EQVRBICAgICAgICAgKDB4NWIpICAvKiE8IGRhdGEgY2FjaGUgZGF0YSBhY2Nlc3MgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSBkbWFjIHJlbGF0ZWQgYXV4aWxpYXJ5IHJlZ2lzdGVyDQorICogQHsNCisgKi8NCisjZGVmaW5lIEFVWF9ETUFDVFJMICAgICAgICAgKDB4NjgwKSAvKiE8IERNQSBjb250cm9sIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfRE1BQ0VOQiAgICAgICAgICgweDY4MSkgLyohPCBETUEgY2hhbm5lbCBlbmFibGUgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9ETUFDRFNCICAgICAgICAgKDB4NjgyKSAvKiE8IERNQSBjaGFubmVsIGRpc2FibGUgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9ETUFDSFBSSSAgICAgICAgICAgICgweDY4MykgLyohPCBETUEgY2hhbm5lbCBoaWdoIHByaW9yaXR5IGxldmVsIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfRE1BQ05QUkkgICAgICAgICAgICAoMHg2ODQpIC8qITwgRE1BIGNoYW5uZWwgbm9ybWFsIHByaW9yaXR5IGxldmVsIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfRE1BQ1JFUSAgICAgICAgICgweDY4NSkgLyohPCBETUEgY2hhbm5lbCB0cmFuc2ZlciByZXF1ZXN0IHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfRE1BQ1NUQVQwICAgICAgICAgICAoMHg2ODYpIC8qITwgRE1BIGNoYW5uZWwgc3RhdHVzIHJlZ2lzdGVyIDAgKi8NCisjZGVmaW5lIEFVWF9ETUFDU1RBVDEgICAgICAgICAgICgweDY4NykgLyohPCBETUEgY2hhbm5lbCBzdGF0dXMgcmVnaXN0ZXIgMSAqLw0KKyNkZWZpbmUgQVVYX0RNQUNJUlEgICAgICAgICAoMHg2ODgpIC8qITwgRE1BIGNoYW5uZWwgaW50ZXJydXB0IHJlcXVlc3Qgc3RhdHVzL2NsZWFyIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfRE1BQ0JBU0UgICAgICAgICAgICAoMHg2ODkpIC8qITwgRE1BIGNoYW5uZWwgc3RydWN0dXJlIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLw0KKyNkZWZpbmUgQVVYX0RNQUNSU1QgICAgICAgICAoMHg2OEEpIC8qITwgRE1BIGNoYW5uZWwgcmVzZXQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovDQorDQorI2RlZmluZSBBVVhfRE1BQ1RSTDAgICAgICAgICAgICAoMHg2OTApIC8qITwgRE1BIGNoYW5uZWwgMCBjb250cm9sIHJlZ2lzdGVyIHdoZW4gbWFwcGVkIGluIGF1eCAqLw0KKyNkZWZpbmUgQVVYX0RNQVNBUjAgICAgICAgICAoMHg2OTEpIC8qITwgRE1BIGNoYW5uZWwgMCBzb3VyY2UgYWRkcmVzcyByZWdpc3RlciB3aGVuIG1hcHBlZCBpbiBhdXggKi8NCisjZGVmaW5lIEFVWF9ETUFEQVIwICAgICAgICAgKDB4NjkyKSAvKiE8IERNQSBjaGFubmVsIDAgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2hlbiBtYXBwZWQgaW4gYXV4ICovDQorI2RlZmluZSBBVVhfRE1BQ1RSTHggICAgICAgICAgICAoQVVYX0RNQUNUUkwwKSAgLyohPCBETUEgY2hhbm5lbCAwIGNvbnRyb2wgcmVnaXN0ZXIgd2hlbiBtYXBwZWQgaW4gYXV4ICovDQorI2RlZmluZSBBVVhfRE1BU0FSeCAgICAgICAgIChBVVhfRE1BU0FSMCkgICAvKiE8IERNQSBjaGFubmVsIDAgc291cmNlIGFkZHJlc3MgcmVnaXN0ZXIgd2hlbiBtYXBwZWQgaW4gYXV4ICovDQorI2RlZmluZSBBVVhfRE1BREFSeCAgICAgICAgIChBVVhfRE1BREFSMCkgICAvKiE8IERNQSBjaGFubmVsIDAgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2hlbiBtYXBwZWQgaW4gYXV4ICovDQorLyoqIEB9ICovDQorDQorDQorDQorLyoqDQorICogXG5hbWUgb3RoZXIgYXV4aWxpYXJ5IHJlZ2lzdGVyDQorICogQHsNCisgKi8NCisjZGVmaW5lIEFVWF9JREVOVElUWSAgICAgICAgICAgICgweDQpICAgLyohPCBpZGVudGl0eSByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0RNUF9QRVJJUEhFUkFMICAgICAgKDB4MjBhKSAvKiE8IHBlcmlwaGVyYWwgbWVtb3J5IHJlZ2lvbiAqLw0KKyNkZWZpbmUgQVVYX1hGTEFHUyAgICAgICAgICAoMHg0NGYpIC8qITwgdXNlciBleHRlbnNpb24gZmxhZ3MgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9NQ0lQX0NNRCAgICAgICAgICAgICgweDYwMCkgLyohPCBcdG9kbyBkZWZpbml0aW9uIGlzIHRvIGJlIGFkZGVkLiAqLw0KKyNkZWZpbmUgQVVYX01DSVBfV0RBVEEgICAgICAgICAgKDB4NjAxKSAvKiE8IFx0b2RvIGRlZmluaXRpb24gaXMgdG8gYmUgYWRkZWQuICovDQorI2RlZmluZSBBVVhfTUNJUF9SRUFEQkFDSyAgICAgICAoMHg2MDIpIC8qITwgXHRvZG8gZGVmaW5pdGlvbiBpcyB0byBiZSBhZGRlZC4gKi8NCisjZGVmaW5lIEFVWF9TTUFSVF9DT05UUk9MICAgICAgICgweDcwMCkgLyohPCBcdG9kbyBkZWZpbml0aW9uIGlzIHRvIGJlIGFkZGVkLiAqLw0KKyNkZWZpbmUgQVVYX1NNQVJUX0RBVEEgICAgICAgICAgKDB4NzAxKSAvKiE8IFx0b2RvIGRlZmluaXRpb24gaXMgdG8gYmUgYWRkZWQuICovDQorDQorLyoqIEB9ICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2lmbmRlZiBfX0FTU0VNQkxZX18NCisvKiBhZGQgdHlwZSBkZWZpbml0aW9uIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBoZXJlICovDQorI2VuZGlmICAvKiBhc3NlbWJseSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisNCisjZW5kaWYgIC8qIF9BUkNfSEFMX0NPUkVfSF8gKi8NCisNCisvKiogIEB9ICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2FzbV9jb21tb24uaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19hc21fY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2NTI2OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19hc21fY29tbW9uLmgKQEAgLTAsMCArMSw1NDEgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMTUNCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfTUlTQw0KKyAqIFxicmllZiBjb21tb24gbWFjcm8gZGVmaW5pdGlvbnMgZm9yIGFzc2VtYmx5IGZpbGUNCisgKi8NCisvKiogQGNvbmQgQVJDX0hBTF9BU01fQ09NTU9OICovDQorDQorI2lmbmRlZiBfQVJDX0hBTF9BU01fQ09NTU9OX0hfDQorI2RlZmluZSBfQVJDX0hBTF9BU01fQ09NTU9OX0hfDQorDQorI2luY2x1ZGUgImVtYkFSQ19CU1BfY29uZmlnLmgiDQorI2luY2x1ZGUgImFyY19mZWF0dXJlX2NvbmZpZy5oIg0KKw0KKy8qIE5vdGUgb24gdGhlIExEL1NUIGFkZHIgbW9kZXMgd2l0aCBhZGRyIHJlZyB3YmFjaw0KKyAqDQorICogTEQuYSBzYW1lIGFzIExELmF3DQorICoNCisgKiBMRC5hICAgIHJlZzEsIFtyZWcyLCB4XSAgPT4gUHJlIEluY3INCisgKiAgICAgIEVmZiBBZGRyIGZvciBsb2FkID0gW3JlZzIgKyB4XQ0KKyAqDQorICogTEQuYWIgICByZWcxLCBbcmVnMiwgeF0gID0+IFBvc3QgSW5jcg0KKyAqICAgICAgRWZmIEFkZHIgZm9yIGxvYWQgPSBbcmVnMl0NCisgKi8NCisjaWYgZGVmaW5lZChfX0dOVV9fKQ0KKy5tYWNybyBQVVNIIHJlZw0KK3N0LmEgICAgXHJlZywgW3NwLCAtNF0NCisuZW5kbQ0KKw0KKy5tYWNybyBQVVNIQVggYXV4DQorbHIgIHIxMCwgW1xhdXhdDQorUFVTSCAgICByMTANCisuZW5kbQ0KKw0KKy5tYWNybyBQT1AgcmVnDQorbGQuYWIgICBccmVnLCBbc3AsIDRdDQorLmVuZG0NCisNCisubWFjcm8gUE9QQVggYXV4DQorUE9QIHIxMA0KK3NyICByMTAsIFtcYXV4XQ0KKy5lbmRtDQorI2Vsc2UNCisubWFjcm8gUFVTSCwgcmVnDQorc3QuYSAgICByZWcsIFtzcCwgLTRdDQorLmVuZG0NCisNCisubWFjcm8gUFVTSEFYLCBhdXgNCitsciAgcjEwLCBbYXV4XQ0KK1BVU0ggICAgcjEwDQorLmVuZG0NCisNCisubWFjcm8gUE9QLCByZWcNCitsZC5hYiAgIHJlZywgW3NwLCA0XQ0KKy5lbmRtDQorDQorLm1hY3JvIFBPUEFYLCBhdXgNCitQT1AgcjEwDQorc3IgIHIxMCwgW2F1eF0NCisuZW5kbQ0KKyNlbmRpZg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBIZWxwZXJzIHRvIHNhdmUvcmVzdG9yZSBjYWxsZWUtc2F2ZWQgcmVnczoNCisgKiB1c2VkIGJ5IHNldmVyYWwgbWFjcm9zIGJlbG93DQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisubWFjcm8gU0FWRV9DQUxMRUVfUkVHUw0KK1BVU0ggICAgcjEzDQorUFVTSCAgICByMTQNCitQVVNIICAgIHIxNQ0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KK1BVU0ggICAgcjE2DQorUFVTSCAgICByMTcNCitQVVNIICAgIHIxOA0KK1BVU0ggICAgcjE5DQorUFVTSCAgICByMjANCitQVVNIICAgIHIyMQ0KK1BVU0ggICAgcjIyDQorUFVTSCAgICByMjMNCitQVVNIICAgIHIyNA0KK1BVU0ggICAgcjI1DQorI2VuZGlmDQorLmVuZG0NCisNCisubWFjcm8gUkVTVE9SRV9DQUxMRUVfUkVHUw0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KK1BPUCByMjUNCitQT1AgcjI0DQorUE9QIHIyMw0KK1BPUCByMjINCitQT1AgcjIxDQorUE9QIHIyMA0KK1BPUCByMTkNCitQT1AgcjE4DQorUE9QIHIxNw0KK1BPUCByMTYNCisjZW5kaWYNCitQT1AgcjE1DQorUE9QIHIxNA0KK1BPUCByMTMNCisuZW5kbQ0KKw0KKy5tYWNybyBDTEVBUl9DQUxMRUVfUkVHUw0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KK21vdiByMjUsIDANCittb3YgcjI0LCAwDQorbW92IHIyMywgMA0KK21vdiByMjIsIDANCittb3YgcjIxLCAwDQorbW92IHIyMCwgMA0KK21vdiByMTksIDANCittb3YgcjE4LCAwDQorbW92IHIxNywgMA0KK21vdiByMTYsIDANCisjZW5kaWYNCittb3YgcjE1LCAwDQorbW92IHIxNCwgMA0KK21vdiByMTMsIDANCisuZW5kbQ0KKw0KKy5tYWNybyBDTEVBUl9TQ1JBVENIX1JFR1MNCittb3YgcjEsIDANCittb3YgICAgIHIyLCAwDQorbW92IHIzLCAwDQorbW92IHI0LCAwDQorbW92IHI1LCAwDQorbW92IHI2LCAwDQorbW92IHI3LCAwDQorbW92IHI4LCAwDQorbW92ICAgICByOSwgMA0KK21vdiByMTAsIDANCittb3YgcjExLCAwDQorbW92IHIxMiwgMA0KKw0KK21vdiAgICAgZnAsIDANCittb3YgICAgIHIyOSwgMA0KK21vdiAgICAgcjMwLCAwDQorLmVuZG0NCisNCisNCisubWFjcm8gU0FWRV9MUF9SRUdTDQorUFVTSCAgICByNjANCitQVVNIQVggIEFVWF9MUF9TVEFSVA0KK1BVU0hBWCAgQVVYX0xQX0VORA0KKy5lbmRtDQorDQorLm1hY3JvIFJFU1RPUkVfTFBfUkVHUw0KK1BPUEFYICAgQVVYX0xQX0VORA0KK1BPUEFYICAgQVVYX0xQX1NUQVJUDQorUE9QIHIxMA0KKy8qIG11c3Qgbm90IHVzZSB0aGUgTFBfQ09VTlQgcmVnaXN0ZXIocjYwKSBhcyB0aGUgZGVzdGluYXRpb24gb2YgbXVsdGktY3ljbGUgaW5zdHJ1Y3Rpb24gKi8NCittb3YgcjYwLCByMTANCisNCisuZW5kbQ0KKw0KKy5tYWNybyBTQVZFX1IwX1RPX1IxMg0KK1BVU0ggICAgcjANCitQVVNIICAgIHIxDQorUFVTSCAgICByMg0KK1BVU0ggICAgcjMNCisjaWZuZGVmIEFSQ19GRUFUVVJFX1JGMTYNCitQVVNIICAgIHI0DQorUFVTSCAgICByNQ0KK1BVU0ggICAgcjYNCitQVVNIICAgIHI3DQorUFVTSCAgICByOA0KK1BVU0ggICAgcjkNCisjZW5kaWYNCitQVVNIICAgIHIxMA0KK1BVU0ggICAgcjExDQorUFVTSCAgICByMTINCisuZW5kbQ0KKw0KKy5tYWNybyBSRVNUT1JFX1IwX1RPX1IxMg0KK1BPUCByMTINCitQT1AgcjExDQorUE9QIHIxMA0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KK1BPUCByOQ0KK1BPUCByOA0KK1BPUCByNw0KK1BPUCByNg0KK1BPUCByNQ0KK1BPUCByNA0KKyNlbmRpZg0KK1BPUCByMw0KK1BPUCByMg0KK1BPUCByMQ0KK1BPUCByMA0KKy5lbmRtDQorDQorLm1hY3JvIFNBVkVfQ09ERV9ERU5TSVRZDQorUFVTSEFYICBBVVhfSkxJX0JBU0UNCitQVVNIQVggIEFVWF9MRElfQkFTRQ0KK1BVU0hBWCAgQVVYX0VJX0JBU0UNCisuZW5kbQ0KKw0KKy5tYWNybyBSRVNUT1JFX0NPREVfREVOU0lUWQ0KK1BPUEFYICAgQVVYX0VJX0JBU0UNCitQT1BBWCAgIEFVWF9MRElfQkFTRQ0KK1BPUEFYICAgQVVYX0pMSV9CQVNFDQorLmVuZG0NCisNCisvKiB0b2RvOiBjaGVjayB0aGUgY29udGVudHMgb2YgTk9OX1NDUkFUQ0hfUkVHUyBpbiBkZWJ1ZyAqLw0KKy5tYWNybyBTQVZFX05PTlNDUkFUQ0hfUkVHUw0KKy8qIHIwLXIxMiBhcmUgc2F2ZWQgYnkgY2FsbGVyIGZ1bmN0aW9uICovDQorUFVTSCAgICBncA0KK1BVU0ggICAgZnANCitQVVNIICAgIGJsaW5rDQorU0FWRV9DQUxMRUVfUkVHUw0KKy5lbmRtDQorDQorLm1hY3JvIFJFU1RPUkVfTk9OU0NSQVRDSF9SRUdTDQorUkVTVE9SRV9DQUxMRUVfUkVHUw0KK1BPUCBibGluaw0KK1BPUCBmcA0KK1BPUCBncA0KKy5lbmRtDQorDQorDQorLm1hY3JvIFNBVkVfRklRX0VYQ19SRUdTDQorI2lmbmRlZiBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MNCitTQVZFX1IwX1RPX1IxMg0KKw0KK1BVU0ggICAgZ3ANCitQVVNIICAgIGZwDQorUFVTSCAgICByMzAgICAgIC8qIGdlbmVyYWwgcHVycG9zZSAqLw0KK1BVU0ggICAgYmxpbmsNCisNCisjZWxzZQ0KKyNpZiBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgIT0gNCAmJiBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgIT0gOCAmJiBcDQorICAgIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyAhPSAxNiAgJiYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTICE9IDMyDQorI2Vycm9yICAidW5zdXBwb3J0ZWQgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTIg0KKyNlbmRpZg0KKw0KKyNpZiBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgPT0gNCB8fCBBUkNfRkVBVFVSRV9CQU5LRURfUkVHUyA9PSA4IHx8IFwNCisgICAgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTID09IDE2DQorUFVTSCAgICByNA0KK1BVU0ggICAgcjUNCitQVVNIICAgIHI2DQorUFVTSCAgICByNw0KK1BVU0ggICAgcjgNCitQVVNIICAgIHI5DQorI2VuZGlmDQorDQorI2lmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyA9PSA0IHx8IEFSQ19GRUFUVVJFX0JBTktFRF9SRUdTID09IDgNCitQVVNIICAgIHIxMA0KK1BVU0ggICAgcjExDQorI2VuZGlmDQorDQorI2lmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyA9PSA0DQorUFVTSCAgICByMTINCisjZW5kaWYNCisNCisjaWYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTID09IDQgfHwgQVJDX0ZFQVRVUkVfQkFOS0VEX1JFR1MgPT0gOA0KK1BVU0ggICAgZ3ANCitQVVNIICAgIGZwDQorUFVTSCAgICByMzAgICAgIC8qIGdlbmVyYWwgcHVycG9zZSAqLw0KK1BVU0ggICAgYmxpbmsNCisjZW5kaWYNCisNCisjZW5kaWYgLyogI2lmbmRlZiBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgKi8NCisNCisjaWZkZWYgQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZDQorU0FWRV9DT0RFX0RFTlNJVFkNCisjZW5kaWYNCitTQVZFX0xQX1JFR1MNCisuZW5kbQ0KKw0KKy5tYWNybyBSRVNUT1JFX0ZJUV9FWENfUkVHUw0KK1JFU1RPUkVfTFBfUkVHUw0KKyNpZmRlZiAgQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZDQorUkVTVE9SRV9DT0RFX0RFTlNJVFkNCisjZW5kaWYNCisNCisjaWZuZGVmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUw0KK1BPUCBibGluaw0KK1BPUCByMzANCitQT1AgZnANCitQT1AgZ3ANCisNCitSRVNUT1JFX1IwX1RPX1IxMg0KKyNlbHNlDQorDQorI2lmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyAhPSA0ICYmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyAhPSA4ICYmIFwNCisgICAgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTICE9IDE2ICYmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyAhPSAzMg0KKyNlcnJvciAgInVuc3VwcG9ydGVkIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyINCisjZW5kaWYNCisNCisjaWYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTID09IDQgfHwgQVJDX0ZFQVRVUkVfQkFOS0VEX1JFR1MgPT0gOA0KK1BPUCBibGluaw0KK1BPUCByMzANCitQT1AgZnANCitQT1AgZ3ANCisjZW5kaWYNCisNCisjaWYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTID09IDQNCitQT1AgcjEyDQorI2VuZGlmDQorDQorI2lmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyA9PSA0IHx8IEFSQ19GRUFUVVJFX0JBTktFRF9SRUdTID09IDgNCitQT1AgICAgIHIxMQ0KK1BPUCAgICAgcjEwDQorI2VuZGlmDQorDQorI2lmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyA9PSA0IHx8IEFSQ19GRUFUVVJFX0JBTktFRF9SRUdTID09IDggfHwgXA0KKyAgICBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgPT0gMTYNCitQT1AgICAgIHI5DQorUE9QICAgICByOA0KK1BPUCAgICAgcjcNCitQT1AgICAgIHI2DQorUE9QICAgICByNQ0KK1BPUCAgICAgcjQNCisjZW5kaWYNCisNCisjZW5kaWYgIC8qICNpZm5kZWYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTICovDQorLmVuZG0NCisNCisvKiBub3JtYWwgaW50ZXJydXB0IHByb2xvZ3VlLCBwYywgc3RhdHVzIGFuZCByMC1yMTEgYXJlIHNhdmVkIGJ5IGhhcmR3YXJlICovDQorLm1hY3JvIElOVEVSUlVQVF9QUk9MT0dVRQ0KK1BVU0ggICAgcjEyDQorUFVTSCAgICBncA0KK1BVU0ggICAgZnANCitQVVNIICAgIGlsaW5rDQorUFVTSCAgICByMzANCisNCitzdWIgc3AsIHNwLCA0IC8qIHNraXAgYnRhICovDQorLmVuZG0NCisNCisNCisvKiBub3JtYWwgaW50ZXJydXB0IGVwaWxvZ3VlLCBwYywgc3RhdHVzIGFuZCByMC1yMTEgYXJlIHJlc3RvcmVkIGJ5IGhhcmR3YXJlICovDQorLm1hY3JvIElOVEVSUlVQVF9FUElMT0dVRQ0KK2FkZCBzcCwgc3AsIDQgLyogc2tpcCBidGEgKi8NCisNCitQT1AgcjMwDQorUE9QIGlsaW5rDQorUE9QIGZwDQorUE9QIGdwDQorUE9QIHIxMg0KKy5lbmRtDQorDQorI2lmIFNFQ1VSRVNISUVMRF9WRVJTSU9OID09IDINCisvKiBleGNlcHRpb24gcHJvbG9ndWUsIGNyZWF0ZSB0aGUgc2FtZSBmcmFtZSBvZiBpbnRlcnJ1cHQgbWFudWFsbHkgKi8NCisubWFjcm8gRVhDRVBUSU9OX1BST0xPR1VFDQorc3QuYXMgICByMTAsIFtzcCwgLTZdICAgLyogc2F2ZSByMTAgZmlyc3QsIGZyZWUgdXAgYSByZWdpc3RlciovDQorDQorUFVTSEFYICBBVVhfRVJTVEFUVVMNCitzdWIgICAgIHNwLCBzcCwgNCAvKiBzbG90IGZvciBTRUNfU1RBVCAqLw0KK1BVU0hBWCAgQVVYX0VSUkVUDQorDQorUFVTSCAgICBibGluaw0KKw0KK1BVU0ggICAgcjExDQorc3ViIHNwLCBzcCwgNCAvKiByMTAgaXMgIHB1c2hlZCBiZWZvcmUgKi8NCisjaWZuZGVmIEFSQ19GRUFUVVJFX1JGMTYNCitQVVNIICAgIHI5DQorUFVTSCAgICByOA0KK1BVU0ggICAgcjcNCitQVVNIICAgIHI2DQorUFVTSCAgICByNQ0KK1BVU0ggICAgcjQNCisjZW5kaWYNCitQVVNIICAgIHIzDQorUFVTSCAgICByMg0KK1BVU0ggICAgcjENCitQVVNIICAgIHIwDQorDQorI2lmZGVmIEFSQ19GRUFUVVJFX0NPREVfREVOU0lUWQ0KK1NBVkVfQ09ERV9ERU5TSVRZDQorI2VuZGlmDQorU0FWRV9MUF9SRUdTDQorDQorUFVTSCAgICByMTINCitQVVNIICAgIGdwDQorUFVTSCAgICBmcA0KK1BVU0ggICAgaWxpbmsNCitQVVNIICAgIHIzMA0KKw0KK1BVU0hBWCAgQVVYX0VSQlRBDQorLmVuZG0NCisNCisvKiBleGNlcHRpb24gZXBpbG9ndWUsIHJlc3RvcmUgdGhlIHNhbWUgZnJhbWUgb2YgaW50ZXJydXB0IG1hbnVhbGx5ICovDQorLm1hY3JvIEVYQ0VQVElPTl9FUElMT0dVRQ0KK1BPUEFYICAgQVVYX0VSQlRBDQorDQorUE9QIHIzMA0KK1BPUCBpbGluaw0KK1BPUCBmcA0KK1BPUCBncA0KK1BPUCByMTINCisNCitSRVNUT1JFX0xQX1JFR1MNCisNCisjaWZkZWYgQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZDQorUkVTVE9SRV9DT0RFX0RFTlNJVFkNCisjZW5kaWYNCitQT1AgcjANCitQT1AgcjENCitQT1AgcjINCitQT1AgcjMNCisjaWZuZGVmIEFSQ19GRUFUVVJFX1JGMTYNCitQT1AgcjQNCitQT1AgcjUNCitQT1AgcjYNCitQT1AgcjcNCitQT1AgcjgNCitQT1AgcjkNCisjZW5kaWYNCithZGQgc3AsIHNwLCA0IC8qIHIxMCB3aWxsIGJlIHBvcHBlZCBmaW5hbGx5ICovDQorUE9QIHIxMQ0KKw0KK1BPUCBibGluaw0KKw0KKw0KK1BPUEFYICAgQVVYX0VSUkVUDQorYWRkICAgICBzcCwgc3AsIDQgIC8qIHNsb3QgZm9yIFNFQ19TVEFUICovDQorUE9QQVggICBBVVhfRVJTVEFUVVMNCisNCitsZC5hcyAgIHIxMCwgW3NwLCAtNl0gICAvKiByZXN0b3JlIHIxMCAqLw0KKy5lbmRtDQorI2Vsc2UgLyogbm9ybWFsIHZlcnNpb24gKi8NCisvKiBleGNlcHRpb24gcHJvbG9ndWUsIGNyZWF0ZSB0aGUgc2FtZSBmcmFtZSBvZiBpbnRlcnJ1cHQgbWFudWFsbHkgKi8NCisubWFjcm8gRVhDRVBUSU9OX1BST0xPR1VFDQorI2lmZGVmICBBUkNfRkVBVFVSRV9DT0RFX0RFTlNJVFkNCitzdC5hcyAgIHIxMCwgW3NwLCAtMTFdICAvKiBzYXZlIHIxMCBmaXJzdCwgZnJlZSB1cCBhIHJlZ2lzdGVyKi8NCisjZWxzZQ0KK3N0LmFzICAgcjEwLCBbc3AsIC04XQ0KKyNlbmRpZg0KK1BVU0hBWCAgQVVYX0VSU1RBVFVTDQorUFVTSEFYICBBVVhfRVJSRVQNCisNCisjaWZkZWYgQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZDQorU0FWRV9DT0RFX0RFTlNJVFkNCisjZW5kaWYNCitTQVZFX0xQX1JFR1MNCisNCitQVVNIICAgIGJsaW5rDQorDQorUFVTSCAgICByMTENCitzdWIgc3AsIHNwLCA0IC8qIHIxMCBpcyAgcHVzaGVkIGJlZm9yZSAqLw0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KK1BVU0ggICAgcjkNCitQVVNIICAgIHI4DQorUFVTSCAgICByNw0KK1BVU0ggICAgcjYNCitQVVNIICAgIHI1DQorUFVTSCAgICByNA0KKyNlbmRpZg0KK1BVU0ggICAgcjMNCitQVVNIICAgIHIyDQorUFVTSCAgICByMQ0KK1BVU0ggICAgcjANCisNCitQVVNIICAgIHIxMg0KK1BVU0ggICAgZ3ANCitQVVNIICAgIGZwDQorUFVTSCAgICBpbGluaw0KK1BVU0ggICAgcjMwDQorDQorUFVTSEFYICBBVVhfRVJCVEENCisuZW5kbQ0KKw0KKy8qIGV4Y2VwdGlvbiBlcGlsb2d1ZSwgcmVzdG9yZSB0aGUgc2FtZSBmcmFtZSBvZiBpbnRlcnJ1cHQgbWFudWFsbHkgKi8NCisubWFjcm8gRVhDRVBUSU9OX0VQSUxPR1VFDQorUE9QQVggICBBVVhfRVJCVEENCisNCitQT1AgcjMwDQorUE9QIGlsaW5rDQorUE9QIGZwDQorUE9QIGdwDQorUE9QIHIxMg0KKw0KK1BPUCByMA0KK1BPUCByMQ0KK1BPUCByMg0KK1BPUCByMw0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KK1BPUCByNA0KK1BPUCByNQ0KK1BPUCByNg0KK1BPUCByNw0KK1BPUCByOA0KK1BPUCByOQ0KKyNlbmRpZg0KK2FkZCBzcCwgc3AsIDQgLyogcjEwIHdpbGwgYmUgcG9wcGVkIGZpbmFsbHkgKi8NCitQT1AgcjExDQorDQorUE9QIGJsaW5rDQorDQorUkVTVE9SRV9MUF9SRUdTDQorDQorI2lmZGVmIEFSQ19GRUFUVVJFX0NPREVfREVOU0lUWQ0KK1JFU1RPUkVfQ09ERV9ERU5TSVRZDQorI2VuZGlmDQorDQorUE9QQVggICBBVVhfRVJSRVQNCitQT1BBWCAgIEFVWF9FUlNUQVRVUw0KKw0KKyNpZmRlZiAgQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZDQorbGQuYXMgICByMTAsIFtzcCwgLTExXSAgLyogcmVzdG9yZSByMTAgKi8NCisjZWxzZQ0KK2xkLmFzICAgcjEwLCBbc3AsIC04XQ0KKyNlbmRpZg0KKy5lbmRtDQorDQorI2VuZGlmIC8qIFNFQ1VSRVNISUVMRF9WRVJTSU9OID09IDIgKi8NCisNCisjZW5kaWYgIC8qIF9BUkNfSEFMX0FTTV9DT01NT05fSCAqLw0KKy8qKiBAZW5kY29uZCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19idWlsdGluLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfYnVpbHRpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZjI1N2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfYnVpbHRpbi5oCkBAIC0wLDAgKzEsMzA4IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA2LTEyDQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBBUkNfSEFMX0JVSUxUSU4NCisgKiBcYnJpZWYgaGVhZGVyIGZpbGUgb2YgYnVpbHRpbiBhbmQgaGVscGVyIGZ1bmN0aW9ucw0KKyAqDQorICogVGhlIE1ldGF3YXJlIHRvb2xjaGFpbiBhbmQgdGhlIEdOVSB0b29sY2hhaW4gYXJlIHN1cHBvcnRlZC4gVGhlIGRldGFpbHMgcGxlYXNlIGdvIHRvIHNlZSB0aGUgZmlsZS4NCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQVJDX0hBTF9CVUlMVElODQorICogQHsNCisgKi8NCisNCisjaWZuZGVmIF9BUkNfSEFMX0JVSUxUSU5fSF8NCisjZGVmaW5lIF9BUkNfSEFMX0JVSUxUSU5fSF8NCisNCisjaW5jbHVkZSAiaW5jL2VtYkFSQ190b29sY2hhaW4uaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZCAoX19NV19fKSAgICAvKiBNZXRhd2FyZSB0b29sY2hhaW4gKi8NCisNCisjZGVmaW5lIF9hcmNfbm9wICAgICAgICAgICAgX25vcCAgICAvKiE8IG5vIG9wZXJhdGlvbiwgZ2VuZXJhdGUgYSBub3AgaW5zdHJ1Y3Rpb24gcHJvZHVjZXMgYSBzaW5nbGUgTk9QIGluc3RydWN0aW9uIGluIHRoZSBjb21waWxlZCBjb2RlICovDQorDQorI2RlZmluZSBfYXJjX2JyayAgICAgICAgICAgIF9icmsgICAgLyohPCBnZW5lcmF0ZSBhIGJyayBpbnN0cnVjdGlvbiAqLw0KKw0KKyNkZWZpbmUgX2FyY19jbHJpICAgICAgICAgICBfY2xyaSAgIC8qITwgZ2VuZXJhdGUgYSBjbHJpIGluc3RydWN0aW9uICovDQorDQorI2RlZmluZSBfYXJjX3NldGkoYykgICAgICAgICAgICBfc2V0aShjKSAvKiE8IGdlbmVyYXRlIGEgc2V0aSBpbnN0cnVjdGlvbiAqLw0KKw0KKyNkZWZpbmUgX2FyY19jb3JlX3dyaXRlKHJlZ25vLCB2YWwpIF9jb3JlX3dyaXRlKHZhbCwgcmVnbm8pIC8qITwgd3JpdGUgY29yZSByZWdpc3RlciAqLw0KKw0KKyNkZWZpbmUgX2FyY19jb3JlX3JlYWQocmVnbm8pICAgICAgIF9jb3JlX3JlYWQocmVnbm8pICAgLyohPCByZWFkIGNvcmUgcmVnaXN0ZXIgKi8NCisNCisjZGVmaW5lIF9hcmNfbHJfcmVnKGF1eCkgICAgICAgIF9scihhdXgpICAgIC8qITwgcmVhZCBhdXhpbGlhcnkgcmVnaXN0ZXIgKi8NCisNCisjZGVmaW5lIF9hcmNfc3JfcmVnKGF1eCwgdmFsKSAgICAgICBfc3IodmFsLCBhdXgpICAgLyohPCB3cml0ZSBhdXhpbGlhcnkgcmVnaXN0ZXIgKi8NCisNCisjZGVmaW5lIF9hcmNfc2xlZXAoYSkgICAgICAgICAgIF9zbGVlcChhKSAgIC8qITwgZ2VuZXJhdGUgYSBzbGVlcCBpbnN0cnVjdGlvbiAqLw0KKw0KKyNkZWZpbmUgX2FyY19mbGFnKGEpICAgICAgICAgICAgX2ZsYWcoYSkgICAgLyohPCBnZW5lcmF0ZSBhIGZsYWcgaW5zdHJ1Y3Rpb24gKi8NCisNCisjZGVmaW5lIF9hcmNfa2ZsYWcoYSkNCisNCisjZGVmaW5lIF9hcmNfc3luYyAgICAgICAgICAgX3N5bmMgICAgICAgLyohPCBnZW5lcmF0ZSBhIHN5bmMgaW5zdHJ1Y3Rpb24gKi8NCisNCisvKg0KKyAqICE8IF9hcmNfdXN1YWxseSAoZXhwcikgZXZhbHVhdGVzIGV4cHJlc3Npb24gZXhwciBhbmQNCisgKiBpbmZvcm1zIHRoZSBjb21waWxlciB0aGF0IHRoZSB2YWx1ZSBpcyB1c3VhbGx5IHRydWUuDQorICovDQorI2RlZmluZSBfYXJjX3VzdWFsbHkoYSkgICAgICAgICBfVXN1YWxseSgoYSkpDQorDQorLyoNCisgKiAhPCBfYXJjX3JhcmVseSAoZXhwcikgZXZhbHVhdGVzIGV4cHJlc3Npb24gZXhwciBhbmQNCisgKiBpbmZvcm1zIHRoZSBjb21waWxlciB0aGF0IHRoZSB2YWx1ZSBpcyByYXJlbHkgdHJ1ZS4NCisgKi8NCisjZGVmaW5lIF9hcmNfcmFyZWx5KGEpICAgICAgICAgIF9SYXJlbHkoKGEpKQ0KKw0KKyNpZiAwDQorLyoqDQorICogXGJyaWVmICAgUmV2ZXJzZXMgdGhlIGJ5dGUgb3JkZXIgb2YgdGhlIDE2LWJpdCBvcGVyYW5kLA0KKyAqICAgICAgICAgIHJldmVyc2luZyB0aGUgZW5kaWFubmVzcyBvZiB0aGUgdmFsdWUuDQorICogICAgICAgICAgTm90IGZvciBBUkMgSFMgZmFtaWx5DQorICovDQorI2RlZmluZSBfYXJjX3N3YXAxNihhKSAgICAgICAgICBfc3dhcDE2KGEpDQorLyoqDQorICogXGJyaWVmICAgUmV2ZXJzZXMgdGhlIGJ5dGUgb3JkZXIgb2YgdGhlIDMyLWJpdCBvcGVyYW5kLA0KKyAqICAgICAgICAgIHJldmVyc2luZyB0aGUgZW5kaWFubmVzcyBvZiB0aGUgdmFsdWUuDQorICogICAgICAgICAgTm90IGZvciBBUkMgSFMgZmFtaWx5DQorICovDQorI2RlZmluZSBfYXJjX3N3YXAzMihhKSAgICAgICAgICBfc3dhcDMyKGEpDQorI2Vsc2UNCitJbmxpbmUgdWludDMyX3QgX2FyY19zd2FwMzIodWludDMyX3QgdmFsKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgdjsNCisgICAgX19hc21fXyB2b2xhdGlsZSgic3dhcGUgJTAsICUxIiA6Ij1yIih2KTogInIiKHZhbCkpOw0KKyAgICByZXR1cm4gdjsNCit9DQorDQorSW5saW5lIHVpbnQxNl90IF9hcmNfc3dhcDE2KHVpbnQzMl90IHZhbCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IHRlbXA7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IHY7DQorICAgIF9fYXNtX18gdm9sYXRpbGUoInN3YXBlICUwLCAlMSIgOiI9ciIodGVtcCk6ICJyIih2YWwpKTsNCisgICAgX19hc21fXyB2b2xhdGlsZSgibHNyMTYgJTAsICUxIiA6Ij1yIih2KTogInIiKHRlbXApKTsNCisgICAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCl2Ow0KK30NCisjZW5kaWYNCisNCisvKioNCisgKiBcYnJpZWYgICBFYWNoIGNhbGwgdG8gX3N3aSgpIGdlbmVyYXRlcyBvbmUNCisgKiAgICAgICAgICBzb2Z0d2FyZSBpbnRlcnJ1cHQgaW5zdHJ1Y3Rpb24gKFNXSSkgZm9yIHByb2Nlc3NvcnMNCisgKiAgICAgICAgICB0byBzdXBwb3J0IHRoZSBTV0kgaW5zdHJ1Y3Rpb24uDQorICovDQorI2RlZmluZSBfYXJjX3N3aSAgICAgICAgICAgICAgICBfc3dpDQorDQorLyogXHRvZG8gYWRkIG1vcmUgYnVpbHRpbiBmdW5jdGlvbnMgb2YgbWV0YXdhcmUgdG9vbCAqLw0KKw0KKyNlbGlmIGRlZmluZWQgKF9fR05VX18pIC8qIEdOVSB0b29sY2hhaW4gKi8NCisNCisjZGVmaW5lIF9hcmNfbm9wICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9hcmNfbm9wDQorI2RlZmluZSBfYXJjX2JyayAgICAgICAgICAgICAgICBfX2J1aWx0aW5fYXJjX2Jyaw0KKyNkZWZpbmUgX2FyY19zZXRpKGMpICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9hcmNfc2V0aShjKQ0KKyNkZWZpbmUgX2FyY19jb3JlX3dyaXRlKHJlZ25vLCB2YWwpICAgICBfX2J1aWx0aW5fYXJjX2NvcmVfd3JpdGUocmVnbm8sdmFsKQ0KKyNkZWZpbmUgX2FyY19jb3JlX3JlYWQocmVnbm8pICAgICAgICAgICBfX2J1aWx0aW5fYXJjX2NvcmVfcmVhZChyZWdubykNCisjZGVmaW5lIF9hcmNfZmxhZyhhKSAgICAgICAgICAgICAgICBfX2J1aWx0aW5fYXJjX2ZsYWcoYSkNCisjZGVmaW5lIF9hcmNfa2ZsYWcoYSkgICAgICAgICAgICAgICBfX2J1aWx0aW5fYXJjX2tmbGFnKGEpDQorI2RlZmluZSBfYXJjX2xyX3JlZyhhdXgpICAgICAgICAgICAgX19idWlsdGluX2FyY19scihhdXgpDQorLyogZG9uJ3QgdW5jb21tZW50IHRoaXMgbm93ICovDQorLy8jZGVmaW5lIF9hcmNfc3JfcmVnKGF1eCwgdmFsKSAgICAgICAgIF9fYnVpbHRpbl9hcmNfc3IoYXV4LCB2YWwpDQorI2RlZmluZSBfYXJjX3NsZWVwKGEpICAgICAgICAgICAgICAgX19idWlsdGluX2FyY19zbGVlcChhKQ0KKy8vI2RlZmluZSBfYXJjX3N5bmMgICAgICAgICAgICAgX19idWlsdGluX2FyY19zeW5jDQorDQorLyoqDQorICogXGJyaWVmIF9hcmNfdXN1YWxseSAoZXhwcikgZXZhbHVhdGVzIGV4cHJlc3Npb24gZXhwciBhbmQNCisgKiAgICAgICAgaW5mb3JtcyB0aGUgY29tcGlsZXIgdGhhdCB0aGUgdmFsdWUgaXMgdXN1YWxseSB0cnVlLg0KKyAqLw0KKyNkZWZpbmUgX2FyY191c3VhbGx5KGEpICAgICAgICAgICAgIF9fYnVpbHRpbl9leHBlY3QoKGludCkoYSksIDEpDQorDQorLyoqDQorICogXGJyaWVmIF9hcmNfcmFyZWx5IChleHByKSBldmFsdWF0ZXMgZXhwcmVzc2lvbiBleHByIGFuZA0KKyAqICBpbmZvcm1zIHRoZSBjb21waWxlciB0aGF0IHRoZSB2YWx1ZSBpcyByYXJlbHkgdHJ1ZS4NCisgKi8NCisjZGVmaW5lIF9hcmNfcmFyZWx5KGEpICAgICAgICAgICAgICBfX2J1aWx0aW5fZXhwZWN0KChpbnQpKGEpLCAwKQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIEVhY2ggY2FsbCB0byBfc3dpKCkgZ2VuZXJhdGVzIG9uZQ0KKyAqICAgICAgICAgIHNvZnR3YXJlIGludGVycnVwdCBpbnN0cnVjdGlvbiAoU1dJKSBmb3IgcHJvY2Vzc29ycw0KKyAqICAgICAgICAgIHRvIHN1cHBvcnQgdGhlIFNXSSBpbnN0cnVjdGlvbi4NCisgKi8NCisjZGVmaW5lIF9hcmNfc3dpICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9hcmNfc3dpDQorDQorSW5saW5lIHVpbnQzMl90IF9hcmNfY2xyaSh2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgdjsNCisgICAgX19hc21fXyB2b2xhdGlsZSgiY2xyaSAlMCIgOiI9ciIodikpOw0KKyAgICByZXR1cm4gdjsNCisNCit9DQorLyogXHRvZG8gYWRkIG1vcmUgYnVpbHRpbiBmdW5jdGlvbnMgb2YgZ251IHRvb2wgKi8NCisNCitJbmxpbmUgdWludDMyX3QgX2FyY19zd2FwMzIodWludDMyX3QgdmFsKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgdjsNCisgICAgX19hc21fXyB2b2xhdGlsZSgic3dhcGUgJTAsICUxIiA6Ij1yIih2KTogInIiKHZhbCkpOw0KKyAgICByZXR1cm4gdjsNCit9DQorDQorSW5saW5lIHVpbnQxNl90IF9hcmNfc3dhcDE2KHVpbnQzMl90IHZhbCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IHRlbXA7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IHY7DQorICAgIF9fYXNtX18gdm9sYXRpbGUoInN3YXBlICUwLCAlMSIgOiI9ciIodGVtcCk6ICJyIih2YWwpKTsNCisgICAgX19hc21fXyB2b2xhdGlsZSgibHNyMTYgJTAsICUxIiA6Ij1yIih2KTogInIiKHRlbXApKTsNCisgICAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCl2Ow0KK30NCisNCitJbmxpbmUgdm9pZCBfYXJjX3N5bmModm9pZCkNCit7DQorICAgIF9fYXNtX18gdm9sYXRpbGUoInN5bmMiKTsNCit9DQorDQorLyoqDQorICogXG5vdGUgRm9sbG93aW5nIGlzIGEgd29ya2Fyb3VuZCBmb3IgYXJjIGdjYw0KKyAqICAgICAgIGJ1aWx0LWluIGZ1bmN0aW9uIF9fYnVpbHRpbl9hcmNfc3IuDQorICogICAgICAgQnV0IGl0IGlzIHdyb25nIGluIEdDQyBhcmMtNC44LVIzLXJjMyBhbmQgc2hvdWxkbid0IGJlIHVzZWQuDQorICovDQorDQorLyoNCisgKiBUaGUgYXV4aWxpYXJ5IHJlZ2lzdGVyIGFkZHJlc3MgaXMgc3BlY2lmaWVkIGFzIGEgbG9uZyBpbW1lZGlhdGUgb3BlcmFuZCBieSBjYWxsZXIuDQorICogZS5nLg0KKyAqICAgIHdyaXRlX2F1eF9yZWcoMHg2OSwgc29tZV92YWwpOw0KKyAqIFRoaXMgZ2VuZXJhdGVzIHRoZSB0aWdodGVzdCBjb2RlLg0KKyAqLw0KKyNkZWZpbmUgd3JpdGVfYXV4X3JlZyhyZWdfaW1tLCB2YWwpIFwNCisoeyAgICAgICAgICAgICAgICAgIFwNCisgICAgQXNtKCAgICAgICAgXA0KKyAgICAiCXNyICAgJTAsIFslMV0JXG4iIFwNCisgICAgOiAgICAgICAgICAgICAgIFwNCisgICAgOiAiaXIiKHZhbCksICJyIihyZWdfaW1tKSk7IFwNCit9KQ0KKw0KKyNkZWZpbmUgX2FyY19zcl9yZWcoYXV4LCB2YWwpICAgICAgICAgICB3cml0ZV9hdXhfcmVnKGF1eCwgdmFsKQ0KKw0KKyNlbmRpZg0KKw0KKy8qIFx0b2RvIGFkZCBtb3JlIGhlbHBlciBmdW5jdGlvbnMgaGVyZSwgc3VjaCBhcyBtZW1vcnkgb3BlcmF0aW9uICovDQorDQorI2RlZmluZSBfYXJjX2F1eF9yZWFkKGF1eCkgICAgICAgICAgX2FyY19scl9yZWcoYXV4KQ0KKyNkZWZpbmUgX2FyY19hdXhfd3JpdGUoYXV4LCB2YWwpICAgICAgICBfYXJjX3NyX3JlZyhhdXgsIHZhbCkNCisNCisvKioNCisgKiBcbmFtZSBjYWNoZSByZWxhdGVkIGhlbHBlciBmdW5jdGlvbg0KKyAqIEB7DQorICovDQorDQorLyoqDQorICogXGJyaWVmICByZWFkIG1lbW9yeSBhbmQgYnlwYXNzIHRoZSBjYWNoZQ0KKyAqIFxwYXJhbVtpbl0gcHRyIG1lbW9yeSBhZGRyZXNzDQorICogXHJldHVybiB2YWx1ZSBpbiB0aGUgbWVtb3J5DQorICovDQorSW5saW5lIHVpbnQzMl90IF9hcmNfcmVhZF91bmNhY2hlZF8zMih2b2lkICpwdHIpDQorew0KKyAgICB1aW50MzJfdCBfX3JldDsNCisgICAgQXNtKCJsZC5kaSAlMCwgWyUxXSI6ICI9ciIoX19yZXQpOiAiciIocHRyKSk7DQorICAgIHJldHVybiBfX3JldDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICB3cml0ZSBtZW1vcnkgYW5kIGJ5cGFzcyB0aGUgY2FjaGUNCisgKiBccGFyYW1baW5dIHB0ciBtZW1vcnkgYWRkcmVzcw0KKyAqIFxwYXJhbVtpbl0gZGF0YSAgdmF1bGUgdG8gYmUgd3JpdHRlbg0KKyAqLw0KK0lubGluZSB2b2lkIF9hcmNfd3JpdGVfdW5jYWNoZWRfMzIodm9pZCAqcHRyLCB1aW50MzJfdCBkYXRhKQ0KK3sNCisgICAgQXNtKCJzdC5kaSAlMCwgWyUxXSI6OiAiciIoZGF0YSksICJyIihwdHIpKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICByZWFkIG1lbW9yeSB3aXRoIGNhY2hlDQorICogXHBhcmFtW2luXSBwdHIgbWVtb3J5IGFkZHJlc3MNCisgKiBccmV0dXJucyB2YWx1ZSBpbiB0aGUgbWVtb3J5DQorICovDQorSW5saW5lIHVpbnQzMl90IF9hcmNfcmVhZF9jYWNoZWRfMzIodm9pZCAqcHRyKQ0KK3sNCisgICAgdWludDMyX3QgX19yZXQ7DQorICAgIEFzbSgibGQgJTAsIFslMV0iOiAiPXIiKF9fcmV0KTogInIiKHB0cikpOw0KKyAgICByZXR1cm4gX19yZXQ7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgcmVhZCBtZW1vcnkgd2l0aCBjYWNoZQ0KKyAqIFxwYXJhbVtpbl0gcHRyIG1lbW9yeSBhZGRyZXNzDQorICogXHBhcmFtW2luXSBkYXRhIHZhdWxlIHRvIGJlIHdyaXR0ZW4NCisgKiBccmV0dXJuIGRlc2NyaXB0aW9uDQorICovDQorSW5saW5lIHZvaWQgX2FyY193cml0ZV9jYWNoZWRfMzIodm9pZCAqcHRyLCB1aW50MzJfdCBkYXRhKQ0KK3sNCisgICAgQXNtKCJzdCAlMCwgWyUxXSI6OiAiciIoZGF0YSksICJyIihwdHIpKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmIGdvIHRvIG1haW4gZnVuY3Rpb24gd2l0aCBwcm9wZXIgYXJndW1lbnRzDQorICogXHBhcmFtICBhcmdjIGFyZ3VtZW50IGNvdW50DQorICogXHBhcmFtICBhcmd2IGFyZ3VtZW50IGNvbnRlbnQgYXJyYXkNCisgKiBccmV0dmFsIHJldHVybiB2YWx1ZSBvZiBtYWluIGZ1bmN0aW9uDQorICovDQorSW5saW5lIGludDMyX3QgX2FyY19nb3RvX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KK3sNCisgICAgaW50IF9fcmV0Ow0KKyAgICBfX2FzbV9fIHZvbGF0aWxlKA0KKyAgICAgICAgIm1vdiAlJXIwLCAlMVxuIg0KKyAgICAgICAgIm1vdiAlJXIxLCAlMlxuIg0KKyAgICAgICAgInB1c2hfcyAlJWJsaW5rXG4iDQorICAgICAgICAiamwgbWFpblxuIg0KKyAgICAgICAgInBvcF9zICUlYmxpbmtcbiINCisgICAgICAgICJtb3YgJTAsICUlcjAiDQorICAgICAgICA6Ij1yIihfX3JldCk6ICJyIihhcmdjKSwgInIiKGFyZ3YpKTsNCisgICAgcmV0dXJuIChpbnQpX19yZXQ7DQorfQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZChMSUJfU0VDVVJFU0hJRUxEKSAmJiBkZWZpbmVkKExJQl9TRUNVUkVTSElFTERfT1ZFUlJJREVTKSAmJiAoU0VDVVJFU0hJRUxEX1ZFUlNJT04gPT0gMSkNCisjZGVmaW5lIE9WRVJSSURFX0FSQ19IQUxfQlVJTFRJTl9IDQorI2luY2x1ZGUgInNlY3VyZXNoaWVsZF9vdmVycmlkZXMuaCINCisjZW5kaWYNCisNCisvKiogQH0gKi8NCisjZW5kaWYgLyogX0FSQ19IQUxfQlVJTFRJTl9IXyAqLw0KKy8qKiBAfSAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19jYWNoZS5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzZjllZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19jYWNoZS5oCkBAIC0wLDAgKzEsMzU0IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTE1DQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBBUkNfSEFMX01JU0NfQ0FDSEUNCisgKiBcYnJpZWYgaGVhZGVyIGZpbGUgb2YgY2FjaGUgbW9kdWxlDQorICovDQorDQorI2lmbmRlZiBfQVJDX0hBTF9DQUNIRV9IXw0KKyNkZWZpbmUgX0FSQ19IQUxfQ0FDSEVfSF8NCisNCisjaW5jbHVkZSAiaW5jL2VtYkFSQ190b29sY2hhaW4uaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmMuaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfYnVpbHRpbi5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19leGNlcHRpb24uaCINCisNCisvKioNCisgKiBcbmFtZSBpbnN0cnVjdGlvbiBjYWNoZSBjb250cm9sIHJlZ2lzdGVyIHJlbGF0ZWQgZGVmaW5pdGlvbg0KKyAqIFx0b2RvIHRoaXMgZGVmaW5pdGlvbnMgd2lsbCBiZSByZXZpZXdlZC4NCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgSUNfQ1RSTF9JQ19FTkFCTEUgICAgICAgICAgIDB4MCAvKiE8IGVuYWJsZSBpbnN0cnVjdGlvbiBjYWNoZSAqLw0KKyNkZWZpbmUgSUNfQ1RSTF9JQ19ESVNBQkxFICAgICAgICAgIDB4MSAvKiE8IGRpc2FibGUgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8NCisjZGVmaW5lIElDX0NUUkxfRElSRUNUX0FDQ0VTUyAgICAgICAgICAgMHgwIC8qITwgZGlyZWN0IGFjY2VzcyBtb2RlICovDQorI2RlZmluZSBJQ19DVFJMX0lORElSRUNUX0FDQ0VTUyAgICAgICAgIDB4MjAgICAgLyohPCBpbmRpcmVjdCBhY2Nlc3MgbW9kZSAqLw0KKyNkZWZpbmUgSUNfQ1RSTF9PUF9TVUNDRUVERUQgICAgICAgICAgICAweDggLyohPCBpbnN0cnVjdGlvbiBjYWNoZSBvcGVyYXRpb24gc3VjY2VlZGVkICovDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgZGF0YSBjYWNoZSBjb250cm9sIHJlZ2lzdGVyIHJlbGF0ZWQgZGVmaW5pdGlvbg0KKyAqIFx0b2RvIHRoaXMgZGVmaW5pdGlvbiB3aWxsIGJlIHJldmlld2VkLg0KKyAqIEB7DQorICovDQorI2RlZmluZSBJQ19DVFJMX0kNCisjZGVmaW5lIERDX0NUUkxfRENfRU5BQkxFICAgICAgICAgICAweDAgLyohPCBlbmFibGUgZGF0YSBjYWNoZSAqLw0KKyNkZWZpbmUgRENfQ1RSTF9EQ19ESVNBQkxFICAgICAgICAgIDB4MSAvKiE8IGRpc2FibGUgZGF0YSBjYWNoZSAqLw0KKyNkZWZpbmUgRENfQ1RSTF9JTlZBTElEX09OTFkgICAgICAgICAgICAweDAgLyohPCBpbnZhbGlkIGRhdGEgY2FjaGUgb25seSAqLw0KKyNkZWZpbmUgRENfQ1RSTF9JTlZBTElEX0ZMVVNIICAgICAgICAgICAweDQwICAgIC8qITwgaW52YWxpZCBhbmQgZmx1c2ggZGF0YSBjYWNoZSAqLw0KKyNkZWZpbmUgRENfQ1RSTF9FTkFCTEVfRkxVU0hfTE9DS0VEICAgICAweDgwICAgIC8qITwgdGhlIGxvY2tlZCBkYXRhIGNhY2hlIGNhbiBiZSBmbHVzaGVkICovDQorI2RlZmluZSBEQ19DVFJMX0RJU0FCTEVfRkxVU0hfTE9DS0VEICAgICAgICAweDAgLyohPCB0aGUgbG9ja2VkIGRhdGEgY2FjaGUgY2Fubm90IGJlIGZsdXNoZWQgKi8NCisjZGVmaW5lIERDX0NUUkxfRkxVU0hfU1RBVFVTICAgICAgICAgICAgMHgxMDAgICAvKiE8IGZsdXNoIHN0YXR1cyAqLw0KKyNkZWZpbmUgRENfQ1RSTF9ESVJFQ1RfQUNDRVNTICAgICAgICAgICAweDAgLyohPCBkaXJlY3QgYWNjZXNzIG1vZGUgICovDQorI2RlZmluZSBEQ19DVFJMX0lORElSRUNUX0FDQ0VTUyAgICAgICAgIDB4MjAgICAgLyohPCBpbmRpcmVjdCBhY2Nlc3MgbW9kZSAqLw0KKyNkZWZpbmUgRENfQ1RSTF9PUF9TVUNDRUVERUQgICAgICAgICAgICAweDQgLyohPCBkYXRhIGNhY2hlIG9wZXJhdGlvbiBzdWNjZWVkZWQgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSBpbnN0cnVjdGlvbiBjYWNoZSByZWxhdGVkIGlubGluZSBmdW5jdGlvbg0KKyAqIEB7DQorICovDQorDQorLyoqDQorICogXGJyaWVmICBjaGVjayB3aGV0aGVyIGluc3RydWN0aW9uIGNhY2hlIGlzIGF2YWlsYWJsZSwNCisgKiAwIGZvciBub3QgYXZhaWxhYmxlLCA+MCBmb3IgYXZhaWxhYmxlDQorICovDQorSW5saW5lIHVpbnQ4X3QgaWNhY2hlX2F2YWlsYWJsZSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIChfYXJjX2F1eF9yZWFkKEFVWF9CQ1JfSV9DQUNIRSkgJiAweEYpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGVuYWJsZSBpbnN0cnVjdGlvbiBjYWNoZQ0KKyAqIFxwYXJhbVtpbl0gaWNhY2hlX2VuX21hc2sgb3BlcmF0aW9uIG1hc2sNCisgKi8NCitJbmxpbmUgdm9pZCBpY2FjaGVfZW5hYmxlKHVpbnQzMl90IGljYWNoZV9lbl9tYXNrKQ0KK3sNCisgICAgaWYgKCFpY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuOyB9DQorDQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JQ19DVFJMLCBpY2FjaGVfZW5fbWFzayk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgZGlzYWJsZSBpbnN0cnVjdGlvbiBjYWNoZQ0KKyAqLw0KK0lubGluZSB2b2lkIGljYWNoZV9kaXNhYmxlKHZvaWQpDQorew0KKyAgICBpZiAoIWljYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm47IH0NCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX0NUUkwsIElDX0NUUkxfSUNfRElTQUJMRSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGluc3RydWN0aW9uIGNhY2hlDQorICovDQorSW5saW5lIHZvaWQgaWNhY2hlX2ludmFsaWRhdGUodm9pZCkNCit7DQorICAgIGlmICghaWNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybjsgfQ0KKw0KKyAgICAvKiBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgaWNhY2hlICovDQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JQ19JVklDLCAwKTsNCisgICAgQXNtKCJub3BfcyIpOw0KKyAgICBBc20oIm5vcF9zIik7DQorICAgIEFzbSgibm9wX3MiKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBpbnZhbGlkYXRlIHNwZWNpZmljIGNhY2hlIGxpbmUNCisgKiBccGFyYW1baW5dIGFkZHJlc3MgbWVtb3J5IGFkZHJlc3MNCisgKi8NCitJbmxpbmUgdm9pZCBpY2FjaGVfaW52YWxpZGF0ZV9saW5lKHVpbnQzMl90IGFkZHJlc3MpDQorew0KKyAgICBpZiAoIWljYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm47IH0NCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX0lWSUwsIGFkZHJlc3MpOw0KKyAgICAvKiB0aGUgMyBub3BzIGFyZSByZXF1aXJlZCBieSBBUkN2MiBJU0EgKi8NCisgICAgQXNtKCJub3BfcyIpOw0KKyAgICBBc20oIm5vcF9zIik7DQorICAgIEFzbSgibm9wX3MiKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBsb2NrIHNwZWNpZmljIGNhY2hlIGxpbmUNCisgKiBccGFyYW1baW5dIGFkZHJlc3MgbWVtb3J5IGFkZHJlc3MNCisgKiBccmV0dXJuIDAsIHN1Y2NlZWRlZCwgLTEsIGZhaWxlZA0KKyAqLw0KK0lubGluZSBpbnQzMl90IGljYWNoZV9sb2NrX2xpbmUodWludDMyX3QgYWRkcmVzcykNCit7DQorICAgIGlmICghaWNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSUNfTElMLCBhZGRyZXNzKTsNCisNCisgICAgaWYgKF9hcmNfYXV4X3JlYWQoQVVYX0lDX0NUUkwpICYgSUNfQ1RSTF9PUF9TVUNDRUVERUQpDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgc2V0IGljYWNoZSBhY2Nlc3MgbW9kZQ0KKyAqIFxwYXJhbVtpbl0gbW9kZSwgYWNjZXNzIG1vZGUsIDE6IGluZGlyZWN0IGFjY2VzcyAwOmRpcmVjdCBhY2Nlc3MNCisgKi8NCitJbmxpbmUgdm9pZCBpY2FjaGVfYWNjZXNzX21vZGUodWludDMyX3QgbW9kZSkNCit7DQorICAgIGlmICghaWNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybjsgfQ0KKw0KKyAgICBpZiAobW9kZSkNCisgICAgew0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX0NUUkwsIF9hcmNfYXV4X3JlYWQoQVVYX0lDX0NUUkwpIHwgSUNfQ1RSTF9JTkRJUkVDVF9BQ0NFU1MpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX0NUUkwsIF9hcmNfYXV4X3JlYWQoQVVYX0lDX0NUUkwpICYgKH5JQ19DVFJMX0lORElSRUNUX0FDQ0VTUykpOw0KKyAgICB9DQorfQ0KKw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lIGRhdGEgY2FjaGUgcmVsYXRlZCBpbmxpbmUgZnVuY3Rpb25zDQorICogQHsNCisgKi8NCisNCisvKioNCisgKiBcYnJpZWYgIGNoZWNrIHdoZXRoZXIgZGF0YSBjYWNoZSBpcyBhdmFpbGFibGUsDQorICogMCBmb3Igbm90IGF2YWlsYWJsZSwgPjAgZm9yIGF2YWlsYWJsZQ0KKyAqLw0KK0lubGluZSB1aW50OF90IGRjYWNoZV9hdmFpbGFibGUodm9pZCkNCit7DQorICAgIHJldHVybiAoX2FyY19hdXhfcmVhZChBVVhfQkNSX0RfQ0FDSEUpICYgMHhGKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGRhdGEgY2FjaGUNCisgKi8NCitJbmxpbmUgdm9pZCBkY2FjaGVfaW52YWxpZGF0ZSh2b2lkKQ0KK3sNCisgICAgaWYgKCFkY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuOyB9DQorDQorICAgIHVpbnQzMl90IHN0YXR1czsNCisNCisgICAgc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfRENfSVZEQywgMSk7DQorDQorICAgIC8qIHdhaXQgZm9yIGZsdXNoIGNvbXBsZXRpb24gKi8NCisgICAgd2hpbGUgKF9hcmNfYXV4X3JlYWQoQVVYX0RDX0NUUkwpICYgRENfQ1RSTF9GTFVTSF9TVEFUVVMpOw0KKw0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoc3RhdHVzKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmIGludmFsaWRhdGUgdGhlIHNwZWNpZmljIGNhY2hlIGxpbmUNCisgKiBccGFyYW1baW5dIGFkZHJlc3MgbWVtb3J5IGFkZHJlc3MNCisgKi8NCitJbmxpbmUgdm9pZCBkY2FjaGVfaW52YWxpZGF0ZV9saW5lKHVpbnQzMl90IGFkZHJlc3MpDQorew0KKyAgICBpZiAoIWRjYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm47IH0NCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0RDX0lWREwsIGFkZHJlc3MpOw0KKyAgICBBc20oIm5vcF9zIik7DQorICAgIEFzbSgibm9wX3MiKTsNCisgICAgQXNtKCJub3BfcyIpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgZW5hYmxlIGRhdGEgY2FjaGUNCisgKiBccGFyYW1baW5dIGRjYWNoZV9lbl9tYXNrIG9wZXJhdGlvbiBtYXNrDQorICovDQorSW5saW5lIHZvaWQgZGNhY2hlX2VuYWJsZSh1aW50MzJfdCBkY2FjaGVfZW5fbWFzaykNCit7DQorICAgIGlmICghZGNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybjsgfQ0KKw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfRENfQ1RSTCwgZGNhY2hlX2VuX21hc2spOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgZGlzYWJsZSBkYXRhIGNhY2hlDQorICovDQorSW5saW5lIHZvaWQgZGNhY2hlX2Rpc2FibGUodm9pZCkNCit7DQorICAgIGlmICghZGNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybjsgfQ0KKw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfRENfQ1RSTCwgRENfQ1RSTF9EQ19ESVNBQkxFKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmIGZsdXNoIGRhdGEgY2FjaGUNCisgKi8NCitJbmxpbmUgdm9pZCBkY2FjaGVfZmx1c2godm9pZCkNCit7DQorICAgIGlmICghZGNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybjsgfQ0KKw0KKyAgICB1aW50MzJfdCBzdGF0dXM7DQorDQorICAgIHN0YXR1cyA9IGNwdV9sb2NrX3NhdmUoKTsNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0RDX0ZMU0gsIDEpOw0KKw0KKyAgICAvKiB3YWl0IGZvciBmbHVzaCBjb21wbGV0aW9uICovDQorICAgIHdoaWxlIChfYXJjX2F1eF9yZWFkKEFVWF9EQ19DVFJMKSAmIERDX0NUUkxfRkxVU0hfU1RBVFVTKTsNCisNCisgICAgY3B1X3VubG9ja19yZXN0b3JlKHN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgZmx1c2ggdGhlIHNwZWNpZmljIGRhdGEgY2FjaGUgbGluZQ0KKyAqIFxwYXJhbVtpbl0gYWRkcmVzcyBtZW1vcnkgYWRkcmVzcw0KKyAqLw0KK0lubGluZSB2b2lkIGRjYWNoZV9mbHVzaF9saW5lKHVpbnQzMl90IGFkZHJlc3MpDQorew0KKyAgICBpZiAoIWRjYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm47IH0NCisNCisgICAgdWludDMyX3Qgc3RhdHVzOw0KKw0KKyAgICBzdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19GTERMLCBhZGRyZXNzKTsNCisNCisgICAgd2hpbGUgKF9hcmNfYXV4X3JlYWQoQVVYX0RDX0NUUkwpICYgRENfQ1RSTF9GTFVTSF9TVEFUVVMpOw0KKw0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoc3RhdHVzKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBsb2NrIHRoZSBzcGVjaWZpYyBkYXRhIGNhY2hlIGxpbmUNCisgKiBccGFyYW1baW5dIGFkZHJlc3MgbWVtb3J5IGFkZHJlc3MNCisgKiBccmV0dXJuIDAsIHN1Y2NlZWRlZCwgLTEsIGZhaWxlZA0KKyAqLw0KK0lubGluZSBpbnQgZGNhY2hlX2xvY2tfbGluZSh1aW50MzJfdCBhZGRyZXNzKQ0KK3sNCisgICAgaWYgKCFkY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19MREwsIGFkZHJlc3MpOw0KKw0KKyAgICBpZiAoX2FyY19hdXhfcmVhZChBVVhfRENfQ1RSTCkgJiBEQ19DVFJMX09QX1NVQ0NFRURFRCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCit9DQorDQorLyoqDQorICogXGJyaWVmICBzZXQgZGNhY2hlIGFjY2VzcyBtb2RlDQorICogXHBhcmFtW2luXSBtb2RlLCBhY2Nlc3MgbW9kZSwgMTogaW5kaXJlY3QgYWNjZXNzIDA6ZGlyZWN0IGFjY2Vzcw0KKyAqLw0KK0lubGluZSB2b2lkIGRjYWNoZV9hY2Nlc3NfbW9kZSh1aW50MzJfdCBtb2RlKQ0KK3sNCisgICAgaWYgKCFkY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuOyB9DQorDQorICAgIGlmIChtb2RlKQ0KKyAgICB7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfRENfQ1RSTCwgX2FyY19hdXhfcmVhZChBVVhfRENfQ1RSTCkgfCBEQ19DVFJMX0lORElSRUNUX0FDQ0VTUyk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfRENfQ1RSTCwgX2FyY19hdXhfcmVhZChBVVhfRENfQ1RSTCkgJiAofkRDX0NUUkxfSU5ESVJFQ1RfQUNDRVNTKSk7DQorICAgIH0NCit9DQorDQorLyoqIEB9ICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqDQorICogXG5hbWUgZGVjbGFyYXRpb25zIG9mIGNhY2hlIHJlbGF0ZWQgZnVuY3Rpb25zDQorICogQHsNCisgKi8NCitleHRlcm4gaW50MzJfdCBpY2FjaGVfaW52YWxpZGF0ZV9tbGluZXModWludDMyX3Qgc3RhcnRfYWRkciwgdWludDMyX3Qgc2l6ZSk7DQorZXh0ZXJuIGludDMyX3QgaWNhY2hlX2xvY2tfbWxpbmVzKHVpbnQzMl90IHN0YXJ0X2FkZHIsIHVpbnQzMl90IHNpemUpOw0KK2V4dGVybiBpbnQzMl90IGljYWNoZV9kaXJlY3Rfd3JpdGUodWludDMyX3QgY2FjaGVfYWRkciwgdWludDMyX3QgdGFnLCB1aW50MzJfdCBkYXRhKTsNCitleHRlcm4gaW50MzJfdCBpY2FjaGVfZGlyZWN0X3JlYWQodWludDMyX3QgY2FjaGVfYWRkciwgdWludDMyX3QgKnRhZywgdWludDMyX3QgKmRhdGEpOw0KK2V4dGVybiBpbnQzMl90IGljYWNoZV9pbmRpcmVjdF9yZWFkKHVpbnQzMl90IG1lbV9hZGRyLCB1aW50MzJfdCAqdGFnLCB1aW50MzJfdCAqZGF0YSk7DQorZXh0ZXJuIGludDMyX3QgZGNhY2hlX2ludmFsaWRhdGVfbWxpbmVzKHVpbnQzMl90IHN0YXJ0X2FkZHIsIHVpbnQzMl90IHNpemUpOw0KK2V4dGVybiBpbnQzMl90IGRjYWNoZV9mbHVzaF9tbGluZXModWludDMyX3Qgc3RhcnRfYWRkciwgdWludDMyX3Qgc2l6ZSk7DQorZXh0ZXJuIGludDMyX3QgZGNhY2hlX2xvY2tfbWxpbmVzKHVpbnQzMl90IHN0YXJ0X2FkZHIsIHVpbnQzMl90IHNpemUpOw0KK2V4dGVybiBpbnQzMl90IGRjYWNoZV9kaXJlY3Rfd3JpdGUodWludDMyX3QgY2FjaGVfYWRkciwgdWludDMyX3QgdGFnLCB1aW50MzJfdCBkYXRhKTsNCitleHRlcm4gaW50MzJfdCBkY2FjaGVfZGlyZWN0X3JlYWQodWludDMyX3QgY2FjaGVfYWRkciwgdWludDMyX3QgKnRhZywgdWludDMyX3QgKmRhdGEpOw0KK2V4dGVybiBpbnQzMl90IGRjYWNoZV9pbmRpcmVjdF9yZWFkKHVpbnQzMl90IG1lbV9hZGRyLCB1aW50MzJfdCAqdGFnLCB1aW50MzJfdCAqZGF0YSk7DQorZXh0ZXJuIHZvaWQgYXJjX2NhY2hlX2luaXQodm9pZCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKy8qKiBAfSAqLw0KKyNlbmRpZiAgLyogX0FSQ19IQUxfQ0FDSEVfSF8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfZW0uaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NGNjMzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfZW0uaApAQCAtMCwwICsxLDEzMyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNi0xMg0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQVJDX0hBTF9DT1JFX0VNDQorICogXGJyaWVmIGhlYWRlciBmaWxlIG9mIEVNIHNlcmllcw0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIEFSQ19IQUxfQ09SRV9FTQ0KKyAqIEB7DQorICovDQorDQorI2lmbmRlZiBfQVJDX0hBTF9FTV9IXw0KKyNkZWZpbmUgX0FSQ19IQUxfRU1fSF8NCisNCisjaW5jbHVkZSAiaW5jL2FyYy9hcmMuaCINCisNCisjZGVmaW5lIEFVWF9BQ0MwX0xPICAgICAoMHg1ODApDQorI2RlZmluZSBBVVhfQUNDMF9HTE8gICAgICAgICgweDU4MSkNCisjZGVmaW5lIEFVWF9BQ0MwX0hJICAgICAoMHg1ODIpDQorI2RlZmluZSBBVVhfQUNDMF9HSEkgICAgICAgICgweDU4MykNCisjZGVmaW5lIEFVWF9EU1BfQkZMWTAgICAgICAgKDB4NTk4KQ0KKyNkZWZpbmUgQVVYX0RTUF9GRlRfQ1RSTCAgICAoMHg1OWUpDQorI2RlZmluZSBBVVhfRFNQX0NUUkwgICAgICAgICgweDU5ZikNCisNCisjZGVmaW5lIEFVWF9BR1VfQVVYX0FQMCAgICAgKDB4NWMwKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfQVAxICAgICAoMHg1YzEpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9BUDIgICAgICgweDVjMikNCisjZGVmaW5lIEFVWF9BR1VfQVVYX0FQMyAgICAgKDB4NWMzKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfQVA0ICAgICAoMHg1YzQpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9BUDUgICAgICgweDVjNSkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX0FQNiAgICAgKDB4NWM2KQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfQVA3ICAgICAoMHg1YzcpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9BUDggICAgICgweDVjOCkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX0FQOSAgICAgKDB4NWM5KQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfQVAxMCAgICAoMHg1Y2EpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9BUDExICAgICgweDVjYikNCisjZGVmaW5lIEFVWF9BR1VfQVVYX0FQMTIgICAgKDB4NWNjKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfQVAxMyAgICAoMHg1Y2QpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9BUDE0ICAgICgweDVjZSkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX0FQMTUgICAgKDB4NWNmKQ0KKw0KKyNkZWZpbmUgQVVYX0FHVV9BWFVfT1MwICAgICAoMHg1ZDApDQorI2RlZmluZSBBVVhfQUdVX0FYVV9PUzEgICAgICgweDVkMSkNCisjZGVmaW5lIEFVWF9BR1VfQVhVX09TMiAgICAgKDB4NWQyKQ0KKyNkZWZpbmUgQVVYX0FHVV9BWFVfT1MzICAgICAoMHg1ZDMpDQorI2RlZmluZSBBVVhfQUdVX0FYVV9PUzQgICAgICgweDVkNCkNCisjZGVmaW5lIEFVWF9BR1VfQVhVX09TNSAgICAgKDB4NWQ1KQ0KKyNkZWZpbmUgQVVYX0FHVV9BWFVfT1M2ICAgICAoMHg1ZDYpDQorI2RlZmluZSBBVVhfQUdVX0FYVV9PUzcgICAgICgweDVkNykNCisjZGVmaW5lIEFVWF9BR1VfQVhVX09TOCAgICAgKDB4NWQ4KQ0KKyNkZWZpbmUgQVVYX0FHVV9BWFVfT1M5ICAgICAoMHg1ZDkpDQorI2RlZmluZSBBVVhfQUdVX0FYVV9PUzEwICAgICgweDVkYSkNCisjZGVmaW5lIEFVWF9BR1VfQVhVX09TMTEgICAgKDB4NWRiKQ0KKyNkZWZpbmUgQVVYX0FHVV9BWFVfT1MxMiAgICAoMHg1ZGMpDQorI2RlZmluZSBBVVhfQUdVX0FYVV9PUzEzICAgICgweDVkZCkNCisjZGVmaW5lIEFVWF9BR1VfQVhVX09TMTQgICAgKDB4NWRlKQ0KKyNkZWZpbmUgQVVYX0FHVV9BWFVfT1MxNSAgICAoMHg1ZGYpDQorDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QwICAgICgweDVlMCkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDEgICAgKDB4NWUxKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMiAgICAoMHg1ZTIpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QzICAgICgweDVlMykNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDQgICAgKDB4NWU0KQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9ENSAgICAoMHg1ZTUpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0Q2ICAgICgweDVlNikNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDcgICAgKDB4NWU3KQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EOCAgICAoMHg1ZTgpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0Q5ICAgICgweDVlOSkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDEwICAgKDB4NWVhKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMTEgICAoMHg1ZWIpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QxMiAgICgweDVlYykNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDEzICAgKDB4NWVkKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMTQgICAoMHg1ZWUpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QxNSAgICgweDVlZikNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDE2ICAgKDB4NWYwKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMTcgICAoMHg1ZjEpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QxOCAgICgweDVmMikNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDE5ICAgKDB4NWYzKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMjAgICAoMHg1ZjQpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QyMSAgICgweDVmNSkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDIyICAgKDB4NWY2KQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMjMgICAoMHg1ZjcpDQorDQorI2RlZmluZSBBVVhfWENDTV9CQVNFICAgICAgICgweDVmOCkNCisjZGVmaW5lIEFVWF9ZQ0NNX0JBU0UgICAgICAgKDB4NWY5KQ0KKw0KKw0KKy8qKiBcdG9kbyBhZGQgZW0gc2VyaWVzIHNwZWNpZmljIGRlZmluaXRpb25zIGhlcmUgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9BUkNfSEFMX0VNX0hfICovDQorDQorLyoqIEB9ICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2V4Y2VwdGlvbi5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2V4Y2VwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Yzg3YTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmgKQEAgLTAsMCArMSw0NzMgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMTUNCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVSBBUkNfSEFMX0VYQ0VQVElPTl9JTlRFUlJVUFQNCisgKiBcYnJpZWYgaGVhZGVyIGZpbGUgb2YgZXhjZXB0aW9uIGFuZCBpbnRlcnJ1cHQgbWFuYWdlbWVudCBtb2R1bGUNCisgKi8NCisNCisjaWZuZGVmIF9BUkNfSEFMX0VYQ0VQVElPTl9IXw0KKyNkZWZpbmUgX0FSQ19IQUxfRVhDRVBUSU9OX0hfDQorDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2J1aWx0aW4uaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgKiBcYWRkdG9ncm91cCBBUkNfSEFMX0VYQ0VQVElPTl9DUFUNCisgKiBAew0KKyAqIFx0b2RvIG5lZWQgYSBjb25mLmggZnJvbSBhcHBsaWNhdGlvbiBvciBib2FyZCB0byBkZWZpbmUgdGhlDQorICogZmVhdHVyZXMgb2YgcHJvY2Vzc29yLCBzdWNoIGFzIG51bWJlciBvZiBleGNlcHRpb24sIGNvZGUNCisgKiBkZW5zaXR5IGFuZCBGSVEuDQorICovDQorI2lmbmRlZiBOVU1fRVhDX0NQVQ0KKyNkZWZpbmUgTlVNX0VYQ19DUFUgMTYgIC8qITwgbnVtYmVyIG9mIENQVSBleGNlcHRpb25zICovDQorI2VuZGlmDQorDQorI2lmbmRlZiBOVU1fRVhDX0lOVA0KKyNkZWZpbmUgTlVNX0VYQ19JTlQgOSAgIC8qITwgbnVtYmVyIG9mIGludGVycnVwdCBleGNlcHRpb25zLCBkZWZpbmVkIGJ5IHVzZXJzKi8NCisjZW5kaWYNCisNCisjZGVmaW5lIE5VTV9FWENfQUxMIChOVU1fRVhDX0NQVSArIE5VTV9FWENfSU5UKSAvKiE8IHRvdGFsIG51bWJlciBvZiBleGNlcHRpb25zICovDQorDQorDQorDQorI2lmZGVmIEFSQ19GRUFUVVJFX1NFQ19QUkVTRU5UDQordHlwZWRlZiBzdHJ1Y3QgaW50X2V4Y19mcmFtZQ0KK3sNCisgICAgdWludDMyX3QgZXJidGE7DQorDQorICAgIHVpbnQzMl90IHIzMDsgICAvKiByMzAgaXMgdXNlbGVzcywgc2tpcHBlZD8gKi8NCisgICAgdWludDMyX3QgaWxpbms7IC8qIHIyOSBpcyB1c2VsZXNzLCBza2lwcGVkPyovDQorICAgIC8qIHIyOCBpcyBzcCwgc2F2ZWQgb3RoZXIgcGxhY2UgKi8NCisgICAgdWludDMyX3QgZnA7ICAgIC8qIHIyNyAqLw0KKyAgICB1aW50MzJfdCBncDsgICAgLyogcjI2ICovDQorDQorICAgIHVpbnQzMl90IHIxMjsNCisNCisgICAgdWludDMyX3QgbHBfZW5kLCBscF9zdGFydCwgbHBfY291bnQ7DQorDQorI2lmZGVmIEFSQ19GRUFUVVJFX0NPREVfREVOU0lUWQ0KKyAgICB1aW50MzJfdCBlaSwgbGRpLCBqbGk7DQorI2VuZGlmDQorDQorICAgIHVpbnQzMl90IHIwLCByMSwgcjIsIHIzOw0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KKyAgICB1aW50MzJfdCByNCwgcjUsIHI2LCByNywgcjgsIHI5Ow0KKyNlbmRpZg0KKyAgICB1aW50MzJfdCByMTAsIHIxMTsNCisNCisgICAgdWludDMyX3QgYmxpbms7IC8qIHIzMSAqLw0KKyAgICB1aW50MzJfdCByZXQ7DQorICAgIHVpbnQzMl90IHNlY19zdGF0Ow0KKyAgICB1aW50MzJfdCBzdGF0dXMzMjsNCit9IEVNQkFSQ19QQUNLRUQgSU5UX0VYQ19GUkFNRTsNCisjZWxzZQ0KK3R5cGVkZWYgc3RydWN0IGludF9leGNfZnJhbWUNCit7DQorICAgIHVpbnQzMl90IGVyYnRhOw0KKw0KKyAgICB1aW50MzJfdCByMzA7ICAgLyogcjMwIGlzIHVzZWxlc3MsIHNraXBwZWQ/ICovDQorICAgIHVpbnQzMl90IGlsaW5rOyAvKiByMjkgaXMgdXNlbGVzcywgc2tpcHBlZD8qLw0KKyAgICAvKiByMjggaXMgc3AsIHNhdmVkIG90aGVyIHBsYWNlICovDQorICAgIHVpbnQzMl90IGZwOyAgICAvKiByMjcgKi8NCisgICAgdWludDMyX3QgZ3A7ICAgIC8qIHIyNiAqLw0KKw0KKyAgICB1aW50MzJfdCByMTI7DQorDQorICAgIHVpbnQzMl90IHIwLCByMSwgcjIsIHIzOw0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KKyAgICB1aW50MzJfdCByNCwgcjUsIHI2LCByNywgcjgsIHI5Ow0KKyNlbmRpZg0KKyAgICB1aW50MzJfdCByMTAsIHIxMTsNCisNCisgICAgdWludDMyX3QgYmxpbms7IC8qIHIzMSAqLw0KKw0KKyAgICB1aW50MzJfdCBscF9lbmQsIGxwX3N0YXJ0LCBscF9jb3VudDsNCisNCisjaWZkZWYgQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZDQorICAgIHVpbnQzMl90IGVpLCBsZGksIGpsaTsNCisjZW5kaWYNCisNCisgICAgdWludDMyX3QgcmV0Ow0KKyAgICB1aW50MzJfdCBzdGF0dXMzMjsNCit9IEVNQkFSQ19QQUNLRUQgSU5UX0VYQ19GUkFNRTsNCisjZW5kaWYNCisNCit0eXBlZGVmIHN0cnVjdCBjYWxsZWVfZnJhbWUNCit7DQorI2lmbmRlZiBBUkNfRkVBVFVSRV9SRjE2DQorICAgIHVpbnQzMl90IHIyNTsNCisgICAgdWludDMyX3QgcjI0Ow0KKyAgICB1aW50MzJfdCByMjM7DQorICAgIHVpbnQzMl90IHIyMjsNCisgICAgdWludDMyX3QgcjIxOw0KKyAgICB1aW50MzJfdCByMjA7DQorICAgIHVpbnQzMl90IHIxOTsNCisgICAgdWludDMyX3QgcjE4Ow0KKyAgICB1aW50MzJfdCByMTc7DQorICAgIHVpbnQzMl90IHIxNjsNCisjZW5kaWYNCisgICAgdWludDMyX3QgcjE1Ow0KKyAgICB1aW50MzJfdCByMTQ7DQorICAgIHVpbnQzMl90IHIxMzsNCit9IEVNQkFSQ19QQUNLRUQgQ0FMTEVFX0ZSQU1FOw0KKw0KK3R5cGVkZWYgc3RydWN0IHByb2Nlc3Nvcl9mcmFtZQ0KK3sNCisgICAgQ0FMTEVFX0ZSQU1FIGNhbGxlZV9yZWdzOw0KKyAgICBJTlRfRVhDX0ZSQU1FIGV4Y19mcmFtZTsNCit9IEVNQkFSQ19QQUNLRUQgUFJPQ0VTU09SX0ZSQU1FOw0KKw0KKyNkZWZpbmUgQVJDX1BST0NFU1NPUl9GUkFNRV9TSVpFICAgIChzaXplb2YoUFJPQ0VTU09SX0ZSQU1FKSAvIHNpemVvZih1aW50MzJfdCkpDQorI2RlZmluZSBBUkNfRVhDX0ZSQU1FX1NJWkUgICAgICAoc2l6ZW9mKElOVF9FWENfRlJBTUUpIC8gc2l6ZW9mKHVpbnQzMl90KSkNCisjZGVmaW5lIEFSQ19DQUxMRUVfRlJBTUVfU0laRSAgICAgICAoc2l6ZW9mKENBTExFRV9GUkFNRSkgLyBzaXplb2YodWludDMyX3QpKQ0KKw0KKw0KK2V4dGVybiB1aW50MzJfdCBleGNfbmVzdF9jb3VudDsNCisNCisvKioNCisgKiBcYnJpZWYgd3JpdGUgdGhlIGV4Y2VwdGlvbiB2ZWN0b3IgYmFzZQ0KKyAqDQorICogXHBhcmFtW2luXSB2ZWNfYmFzZSB0aGUgdGFyZ2V0IHZlY3RvciBiYXNlDQorICovDQorSW5saW5lIHZvaWQgYXJjX3ZlY3Rvcl9iYXNlX3dyaXRlKGNvbnN0IHZvaWQgKnZlY19iYXNlKQ0KK3sNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lOVF9WRUNUX0JBU0UsICh1aW50MzJfdCl2ZWNfYmFzZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiByZWFkIGN1cnJlbnQgZXhjZXB0aW9uIHZlY3RvciBiYXNlDQorICoNCisgKiBccmV0dXJucyBleGNlcHRpb24gdmVjdG9yIGJhc2UgKHVpbnQzMl90KQ0KKyAqLw0KK0lubGluZSB1aW50MzJfdCBhcmNfdmVjdG9yX2Jhc2VfcmVhZCh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIF9hcmNfYXV4X3JlYWQoQVVYX0lOVF9WRUNUX0JBU0UpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIHNlbnNlIHdoZXRoZXIgaW4gZXhjL2ludGVycnVwdCBwcm9jZXNzaW5nDQorICoNCisgKiBccmV0dmFsIDAgICAgbm90IGluIGV4Yy9pbnRlcnJ1cHQgcHJvY2Vzc2luZw0KKyAqIFxyZXR2YWwgMSAgICBpbiBleGMvaW50ZXJydXB0IHByb2Nlc3NpbmcNCisgKi8NCitJbmxpbmUgdWludDMyX3QgZXhjX3NlbnNlKHZvaWQpDQorew0KKyAgICByZXR1cm4gKGV4Y19uZXN0X2NvdW50ID4gMFUpOw0KK30NCisNCisvKiogQH0qLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0lOVEVSUlVQVA0KKyAqIEB7DQorICovDQorI2lmbmRlZiBJTlRfUFJJX01JTg0KKyNkZWZpbmUgSU5UX1BSSV9NSU4gKC0yKSAgICAgICAgLyohPCB0aGUgbWluaW11bSBpbnRlcnJ1cHQgcHJpb3JpdHkgKi8NCisjZW5kaWYNCisNCisjZGVmaW5lIElOVF9QUklfTUFYICgtMSkgICAgICAgIC8qITwgdGhlIG1heGltdW0gaW50ZXJydXB0IHByaW9yaXR5ICovDQorLyoqDQorICogXGJyaWVmIGRpc2FibGUgdGhlIHNwZWNpZmljIGludGVycnVwdA0KKyAqDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICovDQorSW5saW5lIHZvaWQgYXJjX2ludF9kaXNhYmxlKGNvbnN0IHVpbnQzMl90IGludG5vKQ0KK3sNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9TRUxFQ1QsIGludG5vKTsNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9FTkFCTEUsIDApOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGVuYWJsZSB0aGUgc3BlY2lmaWMgaW50DQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKi8NCitJbmxpbmUgdm9pZCBhcmNfaW50X2VuYWJsZShjb25zdCB1aW50MzJfdCBpbnRubykNCit7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfU0VMRUNULCBpbnRubyk7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfRU5BQkxFLCAxKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBjaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpYyBpbnQgaXMgZW5hYmxlZA0KKyAqDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICogXHJldHVybiAwIGRpc2FibGVkLCAxIGVuYWJsZWQNCisgKi8NCitJbmxpbmUgdWludDMyX3QgYXJjX2ludF9lbmFibGVkKGNvbnN0IHVpbnQzMl90IGludG5vKQ0KK3sNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9TRUxFQ1QsIGludG5vKTsNCisgICAgcmV0dXJuIF9hcmNfYXV4X3JlYWQoQVVYX0lSUV9FTkFCTEUpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGdldCB0aGUgaW50ZXJydXB0IHByaW9yaXR5IG1hc2sNCisgKg0KKyAqIFxyZXR1cm5zIGludGVycnVwdCBwcmlvcml0eSBtYXNrLCBuZWdhdGl2ZSBudW0NCisgKi8NCitJbmxpbmUgdWludDMyX3QgYXJjX2ludF9pcG1fZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gKChfYXJjX2F1eF9yZWFkKEFVWF9TVEFUVVMzMikgPj4gMSkgJiAweDBmKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBzZXQgdGhlIGludGVycnVwdCBwcmlvcml0eSBtYXNrDQorICoNCisgKiBccGFyYW1baW5dIGludHByaSBpbnRlcnJ1cHQgcHJpb3JpdHkNCisgKi8NCitJbmxpbmUgdm9pZCBhcmNfaW50X2lwbV9zZXQodWludDMyX3QgaW50cHJpKQ0KK3sNCisgICAgdm9sYXRpbGUgdWludDMyX3Qgc3RhdHVzOw0KKyAgICBzdGF0dXMgPSBfYXJjX2F1eF9yZWFkKEFVWF9TVEFUVVMzMikgJiB+MHgxZTsNCisNCisgICAgc3RhdHVzID0gc3RhdHVzIHwgKChpbnRwcmkgPDwgMSkgJiAweDFlKTsNCisgICAgLyogc3IgY2Fubm90IHdyaXRlIEFVWF9TVEFUVVMzMiAqLw0KKyAgICBBc20oImtmbGFnICUwIjo6ImlyIihzdGF0dXMpKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBnZXQgY3VycmVudCBpbnRlcnJ1cHQgcHJpb3JpdHkgbWFzaw0KKyAqDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICovDQorSW5saW5lIHVpbnQzMl90IGFyY19pbnRfcHJpX2dldChjb25zdCB1aW50MzJfdCBpbnRubykNCit7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfU0VMRUNULCBpbnRubyk7DQorICAgIHJldHVybiBfYXJjX2F1eF9yZWFkKEFVWF9JUlFfUFJJT1JJVFkpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgc2V0IGludGVycnVwdCBwcmlvcml0eQ0KKyAqDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICogXHBhcmFtW2luXSBpbnRwcmkgaW50ZXJydXB0IHByaW9yaXR5DQorICovDQorSW5saW5lIHZvaWQgYXJjX2ludF9wcmlfc2V0KGNvbnN0IHVpbnQzMl90IGludG5vLCB1aW50MzJfdCBpbnRwcmkpDQorew0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX1NFTEVDVCwgaW50bm8pOw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX1BSSU9SSVRZLCBpbnRwcmkgfCAoX2FyY19hdXhfcmVhZChBVVhfSVJRX1BSSU9SSVRZKSAmIDB4ZmZmZmZmZjApKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmIHNldCBpbnRlcnJ1cHQgc2VjdXJlIG9yIG5vdCBzZWN1cmUNCisgKg0KKyAqIFxwYXJhbVtpbl0gaW50bm8gaW50ZXJydXB0IG51bWJlcg0KKyAqIFxwYXJhbVtpbl0gc2VjdXJlLCAwIGZvciBub3JtYWwsID4wIGZvciBzZWN1cmUNCisgKi8NCitJbmxpbmUgdm9pZCBhcmNfaW50X3NlY3VyZV9zZXQoY29uc3QgdWludDMyX3QgaW50bm8sIHVpbnQzMl90IHNlY3VyZSkNCit7DQorDQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfU0VMRUNULCBpbnRubyk7DQorDQorICAgIGlmIChzZWN1cmUpDQorICAgIHsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfUFJJT1JJVFksIF9hcmNfYXV4X3JlYWQoQVVYX0lSUV9QUklPUklUWSkgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgQVVYX0lSUV9QUklPUklUWV9CSVRfUykpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9QUklPUklUWSwgX2FyY19hdXhfcmVhZChBVVhfSVJRX1BSSU9SSVRZKSAmIDB4Zik7DQorICAgIH0NCisNCit9DQorDQorLyoqDQorICogXGJyaWVmICBwcm9iZSB0aGUgcGVuZGluZyBzdGF0dXMgb2YgaW50ZXJydXB0DQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKg0KKyAqIFxyZXR1cm5zIDEgcGVuZGluZywgMCBubyBwZW5kaW5nDQorICovDQorSW5saW5lIHVpbnQzMl90IGFyY19pbnRfcHJvYmUoY29uc3QgdWludDMyX3QgaW50bm8pDQorew0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX1NFTEVDVCwgaW50bm8pOw0KKyAgICByZXR1cm4gX2FyY19hdXhfcmVhZChBVVhfSVJRX1BFTkRJTkcpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIHRyaWdnZXIgdGhlIGludGVycnVwdCBpbiBzb2Z0d2FyZQ0KKyAqDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICovDQorSW5saW5lIHZvaWQgYXJjX2ludF9zd190cmlnZ2VyKGNvbnN0IHVpbnQzMl90IGludG5vKQ0KK3sNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9ISU5ULCBpbnRubyk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgY29uZmlnIHRoZSBpbnRlcnJ1cHQgbGV2ZWwgdHJpZ2dlcmVkIG9yIHB1bHNlIHRyaWdnZXJlZA0KKyAqDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICogXHBhcmFtW2luXSBsZXZlbCwgMC1sZXZlbCB0cmlnZ2VyLCAxLXBsdXNlIHRyaWdnZXJlZA0KKyAqLw0KK0lubGluZSB2b2lkIGFyY19pbnRfbGV2ZWxfY29uZmlnKGNvbnN0IHVpbnQzMl90IGludG5vLCBjb25zdCB1aW50MzJfdCBsZXZlbCkNCit7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfU0VMRUNULCBpbnRubyk7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfVFJJR0dFUiwgbGV2ZWwpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGxvY2sgY3B1LCBkaXNhYmxlIGludGVycnVwdHMNCisgKi8NCitJbmxpbmUgdm9pZCBhcmNfbG9jayh2b2lkKQ0KK3sNCisgICAgQXNtKCJjbHJpIik7DQorICAgIEFzbSgiIjo6OiAibWVtb3J5Iik7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgdW5sb2NrIGNwdSwgZW5hYmxlIGludGVycnVwdHMgdG8gaGFwcGVuDQorICovDQorSW5saW5lIHZvaWQgYXJjX3VubG9jayh2b2lkKQ0KK3sNCisgICAgQXNtKCIiOjo6ICJtZW1vcnkiKTsNCisgICAgQXNtKCJzZXRpIik7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgbG9jayBjcHUgYW5kIHN0YXVzDQorICoNCisgKiBccmV0dXJucyBjcHUgc3RhdHVzDQorICovDQorSW5saW5lIHVpbnQzMl90IGFyY19sb2NrX3NhdmUodm9pZCkNCit7DQorICAgIHJldHVybiBfYXJjX2NscmkoKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICB1bmxvY2sgY3B1IHdpdGggdGhlIHNwZWNpZmljIHN0YXR1cw0KKyAqDQorICogXHBhcmFtW2luXSBzdGF0dXMgIGNwdSBzdGF0dXMgc2F2ZWQgYnkgY3B1X2xvY2tfc2F2ZQ0KKyAqLw0KK0lubGluZSB2b2lkIGFyY191bmxvY2tfcmVzdG9yZShjb25zdCB1aW50MzJfdCBzdGF0dXMpDQorew0KKyAgICBfYXJjX3NldGkoc3RhdHVzKTsNCit9DQorLyoqIEB9Ki8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCBBUkNfSEFMX0VYQ0VQVElPTl9DUFUNCisgKiBAew0KKyAqLw0KKy8qKg0KKyAqIFx0eXBlZGVmIEVYQ19FTlRSWQ0KKyAqIFxicmllZiAgdGhlIGRhdGEgdHlwZSBmb3IgZXhjZXB0aW9uIGVudHJ5DQorICovDQordHlwZWRlZiB2b2lkICgqRVhDX0VOVFJZKSh2b2lkKTsNCisvKioNCisgKiBcdHlwZWRlZiBFWENfSEFORExFUg0KKyAqIFxicmllZiAgdGhlIGRhdGEgdHlwZSBmb3IgZXhjZXB0aW9uIGhhbmRsZXINCisgKi8NCit0eXBlZGVmIHZvaWQgKCpFWENfSEFORExFUikodm9pZCAqZXhjX2ZyYW1lKTsNCisvKiogQH0qLw0KKw0KKw0KKy8qKg0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0lOVEVSUlVQVA0KKyAqIFx0eXBlZGVmIElOVF9IQU5ETEVSDQorICogXGJyaWVmICB0aGUgZGF0YSB0eXBlIGZvciBpbnRlcnJ1cHQgaGFuZGxlcg0KKyAqLw0KK3R5cGVkZWYgdm9pZCAoKklOVF9IQU5ETEVSKSh2b2lkICpwdHIpOw0KKw0KK2V4dGVybiBFWENfRU5UUlkgZXhjX2VudHJ5X3RhYmxlW05VTV9FWENfQUxMXTsNCitleHRlcm4gRVhDX0hBTkRMRVIgZXhjX2ludF9oYW5kbGVyX3RhYmxlW05VTV9FWENfQUxMXTsNCisNCisvKiogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fQ1BVDQorICogQHsNCisgKi8NCisvKioNCisgKiBcZm4gX2FyY19yZXNldA0KKyAqIFxicmllZiB0aGUgcmVzZXQgZW50cnkNCisgKi8NCitleHRlcm4gdm9pZCBfYXJjX3Jlc2V0KHZvaWQpOw0KKy8qKg0KKyAqIFxmbiBleGNfZW50cnlfY3B1DQorICogXGJyaWVmIHRoZSBkZWZhdWx0IENQVSBleGNlcHRpb24gZW50cnkNCisgKi8NCitleHRlcm4gdm9pZCBleGNfZW50cnlfY3B1KHZvaWQpOw0KKw0KKy8qKg0KKyAqIFxmbiBleGNfZW50cnlfZmlycQ0KKyAqIFxicmllZiB0aGUgZmFzdCBpbnRlcnJ1cHQgZXhjZXB0aW9uIGVudHJ5DQorICovDQorZXh0ZXJuIHZvaWQgZXhjX2VudHJ5X2ZpcnEodm9pZCk7DQorLyoqDQorICogXGZuIGV4Y19lbnRyeV9pbnQNCisgKiBcYnJpZWYgdGhlIGludGVycnVwdCBleGNlcHRpb24gZW50cnkNCisgKi8NCitleHRlcm4gdm9pZCBleGNfZW50cnlfaW50KHZvaWQpOw0KKy8qKiBAfSovDQorDQorLyogZXhjZXRwaW9uIHJlbGF0ZWQgYXBpcyAqLw0KK2V4dGVybiB2b2lkIGV4Y19pbnRfaW5pdCh2b2lkKTsNCitleHRlcm4gaW50MzJfdCBleGNfZW50cnlfaW5zdGFsbChjb25zdCB1aW50MzJfdCBleGNubywgRVhDX0VOVFJZIGVudHJ5KTsNCitleHRlcm4gRVhDX0VOVFJZIGV4Y19lbnRyeV9nZXQoY29uc3QgdWludDMyX3QgZXhjbm8pOw0KK2V4dGVybiBpbnQzMl90IGV4Y19oYW5kbGVyX2luc3RhbGwoY29uc3QgdWludDMyX3QgZXhjbm8sIEVYQ19IQU5ETEVSIGhhbmRsZXIpOw0KK2V4dGVybiBFWENfSEFORExFUiBleGNfaGFuZGxlcl9nZXQoY29uc3QgdWludDMyX3QgZXhjbm8pOw0KKw0KKy8qIGludGVycnVwdCByZWxhdGVkIGFwaXMgKi8NCitleHRlcm4gaW50MzJfdCBpbnRfZGlzYWJsZShjb25zdCB1aW50MzJfdCBpbnRubyk7DQorZXh0ZXJuIGludDMyX3QgaW50X2VuYWJsZShjb25zdCB1aW50MzJfdCBpbnRubyk7DQorZXh0ZXJuIGludDMyX3QgaW50X2VuYWJsZWQoY29uc3QgdWludDMyX3QgaW50bm8pOw0KK2V4dGVybiBpbnQzMl90IGludF9pcG1fZ2V0KHZvaWQpOw0KK2V4dGVybiBpbnQzMl90IGludF9pcG1fc2V0KGludDMyX3QgaW50cHJpKTsNCitleHRlcm4gaW50MzJfdCBpbnRfcHJpX2dldChjb25zdCB1aW50MzJfdCBpbnRubyk7DQorZXh0ZXJuIGludDMyX3QgaW50X3ByaV9zZXQoY29uc3QgdWludDMyX3QgaW50bm8sIGludDMyX3QgaW50cHJpKTsNCitleHRlcm4gaW50MzJfdCBpbnRfcHJvYmUoY29uc3QgdWludDMyX3QgaW50bm8pOw0KK2V4dGVybiBpbnQzMl90IGludF9zd190cmlnZ2VyKGNvbnN0IHVpbnQzMl90IGludG5vKTsNCitleHRlcm4gaW50MzJfdCBpbnRfbGV2ZWxfY29uZmlnKGNvbnN0IHVpbnQzMl90IGludG5vLCBjb25zdCB1aW50MzJfdCBsZXZlbCk7DQorZXh0ZXJuIHZvaWQgY3B1X2xvY2sodm9pZCk7DQorZXh0ZXJuIHZvaWQgY3B1X3VubG9jayh2b2lkKTsNCitleHRlcm4gdWludDMyX3QgY3B1X2xvY2tfc2F2ZSh2b2lkKTsNCitleHRlcm4gdm9pZCBjcHVfdW5sb2NrX3Jlc3RvcmUoY29uc3QgdWludDMyX3Qgc3RhdHVzKTsNCitleHRlcm4gaW50MzJfdCBpbnRfaGFuZGxlcl9pbnN0YWxsKGNvbnN0IHVpbnQzMl90IGludG5vLCBJTlRfSEFORExFUiBoYW5kbGVyKTsNCitleHRlcm4gSU5UX0hBTkRMRVIgaW50X2hhbmRsZXJfZ2V0KGNvbnN0IHVpbnQzMl90IGludG5vKTsNCitleHRlcm4gaW50MzJfdCBpbnRfc2VjdXJlX3NldChjb25zdCB1aW50MzJfdCBpbnRubywgdWludDMyX3Qgc2VjdXJlKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2lmIGRlZmluZWQoTElCX1NFQ1VSRVNISUVMRCkgJiYgZGVmaW5lZChMSUJfU0VDVVJFU0hJRUxEX09WRVJSSURFUykgJiYgKFNFQ1VSRVNISUVMRF9WRVJTSU9OID09IDEpDQorI2RlZmluZSBPVkVSUklERV9BUkNfSEFMX0VYQ0VQVElPTl9IDQorI2luY2x1ZGUgInNlY3VyZXNoaWVsZF9vdmVycmlkZXMuaCINCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0FSQ19IQUxfRVhDRVBUSU9OX0hfKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfZmVhdHVyZV9jb25maWcuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19mZWF0dXJlX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNjJlNDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfZmVhdHVyZV9jb25maWcuaApAQCAtMCwwICsxLDM5NyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNi0wOS0wOA0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfTUlTQw0KKyAqIFxicmllZiBoZWFkZXIgZmlsZSBmb3IgYXJjIGZlYXR1cmUgY29uZmlndXJhdGlvbg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIEFSQ19IQUxfTUlTQw0KKyAqIEB7DQorICovDQorDQorI2lmbmRlZiBfQVJDX0ZFQVRVUkVfQ09ORklHX0hfDQorI2RlZmluZSBfQVJDX0ZFQVRVUkVfQ09ORklHX0hfDQorDQorLy8gRW5hYmxlIGNvcmVfY29uZmlnLmggaW4gRU1TSyBPU1ANCisvLyNpZmRlZiBFTUJBUkNfVENGX0dFTkVSQVRFRA0KKyNpbmNsdWRlICJhcmNfY29yZV9jb25maWcuaCINCisvLyNlbmRpZg0KKw0KKy8qKiBBUkMgYmFzZWxpbmUgaW5zdHJ1Y3Rpb24gc2V0IHZlcnNpb24gbnVtYmVyICovDQorI2lmICFkZWZpbmVkKF9BUkNWRVIpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfY2lyX2lkZW50aXR5X2FyY3ZlcikNCisjZGVmaW5lIF9BUkNWRVIgICAgICAgICAgICAgY29yZV9jb25maWdfY2lyX2lkZW50aXR5X2FyY3Zlcg0KKyNlbHNlDQorI2RlZmluZSBfQVJDVkVSICAgICAgICAgICAgIDB4NDINCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogQVJDIENQVSBDbG9jayBGcmVxdWVuY3kgaW4gSHogdW5pdCAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9DUFVfQ0xPQ0tfRlJFUSkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19jbG9ja19zcGVlZCkNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0NQVV9DTE9DS19GUkVRICAoY29yZV9jb25maWdfY2xvY2tfc3BlZWQqMTAwMDAwMCkNCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogQVJDIFBDIHNpemUgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfUENfU0laRSkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19wY19zaXplKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfUENfU0laRSAgICAgY29yZV9jb25maWdfcGNfc2l6ZQ0KKyNlbHNlDQorI2RlZmluZSBBUkNfRkVBVFVSRV9QQ19TSVpFICAgICAzMg0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBBUkMgTFBDIHNpemUgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfTFBDX1NJWkUpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfbHBjX3NpemUpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9MUENfU0laRSAgICAgICAgY29yZV9jb25maWdfbHBjX3NpemUNCisjZWxzZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfTFBDX1NJWkUgICAgICAgIDMyDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIEFSQyBBZGRyIHNpemUgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfQUREUl9TSVpFKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2FkZHJfc2l6ZSkNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0FERFJfU0laRSAgICAgICBjb3JlX2NvbmZpZ19hZGRyX3NpemUNCisjZWxzZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfQUREUl9TSVpFICAgICAgIDMyDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIEFSQyBFbmRpYW4vQnl0ZSBPcmRlciAqLw0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfTElUVExFX0VORElBTiAgIDEyMzQNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0JJR19FTkRJQU4gICAgICA0MzIxDQorDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX0JZVEVfT1JERVIpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfYikNCisjaWYgY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfYiA9PSAwDQorI2RlZmluZSBBUkNfRkVBVFVSRV9CWVRFX09SREVSICAgICAgQVJDX0ZFQVRVUkVfTElUVExFX0VORElBTg0KKyNlbHNlDQorI2RlZmluZSBBUkNfRkVBVFVSRV9CWVRFX09SREVSICAgICAgQVJDX0ZFQVRVUkVfQklHX0VORElBTg0KKyNlbmRpZg0KKyNlbHNlDQorI2RlZmluZSBBUkNfRkVBVFVSRV9CWVRFX09SREVSICAgICAgQVJDX0ZFQVRVUkVfTElUVExFX0VORElBTg0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBSZWR1Y2VkIHJlZ2lzdGVyIG9wdGlvbiwgaWYgZW5hYmxlZCwgQVJDX0ZFQVRVUkVfUkYxNiB3aWxsIGJlIGRlZmluZWQgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfUkYxNikNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19iY3JfcmZfYnVpbGRfZSkgJiYgY29yZV9jb25maWdfYmNyX3JmX2J1aWxkX2UgPT0gMQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfUkYxNg0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBVbmFsaWduZWQgYWNjZXNzIG9wdGlvbiwgaWYgZW5hYmxlZCwgQVJDX0ZFQVRVUkVfVU5BTElHTkVEIHdpbGwgYmUgZGVmaW5lZCAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9VTkFMSUdORUQpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfdW5hbGlnbmVkKSAmJiBjb3JlX2NvbmZpZ191bmFsaWduZWQgPT0gMQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfVU5BTElHTkVEDQorI2VuZGlmDQorI2VuZGlmDQorDQorDQorLyoqIENvZGUgZGVuc2l0eSBvcHRpb24sIGlmIGVuYWJsZWQsIEFSQ19GRUFUVVJFX0NPREVfREVOU0lUWSB3aWxsIGJlIGRlZmluZWQgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2NvZGVfZGVuc2l0eSkgJiYgY29yZV9jb25maWdfY29kZV9kZW5zaXR5ID09IDENCisjZGVmaW5lIEFSQ19GRUFUVVJFX0NPREVfREVOU0lUWQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBUaGUgbnVtYmVyIG9mIHJlZ2lzdGVyIGZpbGUgYmFua3MgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfUkdGX05VTV9CQU5LUykNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19yZ2ZfbnVtX2JhbmtzKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfUkdGX05VTV9CQU5LUyAgIGNvcmVfY29uZmlnX3JnZl9udW1fYmFua3MNCisjZWxzZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfUkdGX05VTV9CQU5LUyAgIDENCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogVGhlIG51bWJlciBvZiByZWdpc3RlcnMgcmVwbGljYXRlZCBwZXIgcmVnaXN0ZXIgYmFuayAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfcmdmX2JhbmtlZF9yZWdzKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTIGNvcmVfY29uZmlnX3JnZl9iYW5rZWRfcmVncw0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBJbnRlcnJ1cHQgdW5pdCBwcmVzZW5jZSAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9JTlRFUlJVUFRTX1BSRVNFTlQpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfaW50ZXJydXB0c19wcmVzZW50KQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSU5URVJSVVBUU19QUkVTRU5UICBjb3JlX2NvbmZpZ19pbnRlcnJ1cHRzX3ByZXNlbnQNCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogRklSUV9PUFRJT04gY29uZmlndXJhdGlvbiBvcHRpb24sIDEgZm9yIGVuYWJsZWQsIDAgZm9yIGRpc2FibGVkICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX0ZJUlEpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfYmNyX2lycV9idWlsZF9mKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRklSUSAgICAgICAgY29yZV9jb25maWdfYmNyX2lycV9idWlsZF9mDQorI2Vsc2UNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0ZJUlEgICAgICAgIDANCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogVGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzICovDQorI2lmICFkZWZpbmVkKE5VTV9FWENfSU5UKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2ludGVycnVwdHNfbnVtYmVyKQ0KKyNkZWZpbmUgTlVNX0VYQ19JTlQgICAgICAgICBjb3JlX2NvbmZpZ19pbnRlcnJ1cHRzX251bWJlcg0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBUaGUgbnVtYmVyIG9mIGV4dGVybmFsIGludGVycnVwdHMgKi8NCisjaWYgIWRlZmluZWQoTlVNX0VYQ19FWFRfSU5UKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2ludGVycnVwdHNfZXh0ZXJuYWxzKQ0KKyNkZWZpbmUgTlVNX0VYQ19FWFRfSU5UICAgICAgICAgY29yZV9jb25maWdfaW50ZXJydXB0c19leHRlcm5hbHMNCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogVGhlIGludGVycnVwdCBwcmlvcml0eSBsZXZlbHMgKi8NCisjaWYgIWRlZmluZWQoSU5UX1BSSV9NSU4pDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfaW50ZXJydXB0c19wcmlvcml0aWVzKQ0KKyNkZWZpbmUgSU5UX1BSSV9NSU4gICAgICAgICAoLWNvcmVfY29uZmlnX2ludGVycnVwdHNfcHJpb3JpdGllcykNCisjZW5kaWYNCisjZW5kaWYNCisNCisvLyBBUkMgVElNRVJfQlVJTEQNCisvKiogVGltZXIwIHByZXNlbnQgb3Igbm90ICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX1RJTUVSMF9QUkVTRU5UKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX3RpbWVyMCkNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1RJTUVSMF9QUkVTRU5UICBjb3JlX2NvbmZpZ190aW1lcjANCisjZGVmaW5lIEFSQ19GRUFUVVJFX1RJTUVSMF9MRVZFTCAgICAoY29yZV9jb25maWdfdGltZXIwX2xldmVsLWNvcmVfY29uZmlnX2ludGVycnVwdHNfcHJpb3JpdGllcykNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1RJTUVSMF9WRUNUT1IgICBjb3JlX2NvbmZpZ190aW1lcjBfdmVjdG9yDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIFRpbWVyMSBwcmVzZW50IG9yIG5vdCAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9USU1FUjFfUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ190aW1lcjEpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9USU1FUjFfUFJFU0VOVCAgY29yZV9jb25maWdfdGltZXIxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9USU1FUjFfTEVWRUwgICAgKGNvcmVfY29uZmlnX3RpbWVyMV9sZXZlbC1jb3JlX2NvbmZpZ19pbnRlcnJ1cHRzX3ByaW9yaXRpZXMpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9USU1FUjFfVkVDVE9SICAgY29yZV9jb25maWdfdGltZXIxX3ZlY3Rvcg0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBTZWN1cmUgVGltZXIwIHByZXNlbnQgb3Igbm90ICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX1NFQ19USU1FUjBfUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19zZWNfdGltZXIwKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfU0VDX1RJTUVSMF9QUkVTRU5UICBjb3JlX2NvbmZpZ19zZWNfdGltZXIwDQorI2RlZmluZSBBUkNfRkVBVFVSRV9TRUNfVElNRVIwX0xFVkVMICAgIChjb3JlX2NvbmZpZ19zZWNfdGltZXIwX2xldmVsLWNvcmVfY29uZmlnX2ludGVycnVwdHNfcHJpb3JpdGllcykNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1NFQ19USU1FUjBfVkVDVE9SICAgMjANCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogU2VjdXJlIFRpbWVyMSBwcmVzZW50IG9yIG5vdCAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9TRUNfVElNRVIxX1BSRVNFTlQpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfc2VjX3RpbWVyMSkNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1NFQ19USU1FUjFfUFJFU0VOVCAgY29yZV9jb25maWdfc2VjX3RpbWVyMQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfU0VDX1RJTUVSMV9MRVZFTCAgICAoY29yZV9jb25maWdfc2VjX3RpbWVyMV9sZXZlbC1jb3JlX2NvbmZpZ19pbnRlcnJ1cHRzX3ByaW9yaXRpZXMpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9TRUNfVElNRVIxX1ZFQ1RPUiAgIDIxDQorI2VuZGlmDQorI2VuZGlmDQorDQorDQorLyoqIDY0Yml0IFJUQyBwcmVzZW50IG9yIG5vdCAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9SVENfUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19ydGMpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9SVENfUFJFU0VOVCAgICAgY29yZV9jb25maWdfcnRjDQorI2VuZGlmDQorI2VuZGlmDQorDQorLy8gTWVtb3J5IHJlbGF0ZWQgZGVmaW5pdGlvbnMNCisvKiogSUNDTSBQcmVzZW5jZSwgYmFzZSBhZGRyZXNzIGFuZCBzaXplICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX0lDQ01fUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19pY2NtX3ByZXNlbnQpICYmIGNvcmVfY29uZmlnX2ljY21fcHJlc2VudCA9PSAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0NNX1BSRVNFTlQgICAgMQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNDTV9CQVNFICAgICAgIGNvcmVfY29uZmlnX2ljY21fYmFzZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNDTV9TSVpFICAgICAgIGNvcmVfY29uZmlnX2ljY21fc2l6ZQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBJQ0NNMCBQcmVzZW5jZSwgYmFzZSBhZGRyZXNzIGFuZCBzaXplICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX0lDQ00wX1BSRVNFTlQpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfaWNjbTBfcHJlc2VudCkgJiYgY29yZV9jb25maWdfaWNjbTBfcHJlc2VudCA9PSAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0NNMF9QUkVTRU5UICAgMQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNDTTBfQkFTRSAgICAgIGNvcmVfY29uZmlnX2ljY20wX2Jhc2UNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQ00wX1NJWkUgICAgICBjb3JlX2NvbmZpZ19pY2NtMF9zaXplDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIElDQ00xIFByZXNlbmNlLCBiYXNlIGFkZHJlc3MgYW5kIHNpemUgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfSUNDTTFfUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19pY2NtMV9wcmVzZW50KSAmJiBjb3JlX2NvbmZpZ19pY2NtMV9wcmVzZW50ID09IDENCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQ00xX1BSRVNFTlQgICAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0NNMV9CQVNFICAgICAgY29yZV9jb25maWdfaWNjbTFfYmFzZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNDTTFfU0laRSAgICAgIGNvcmVfY29uZmlnX2ljY20xX3NpemUNCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogRENDTSBQcmVzZW5jZSwgYmFzZSBhZGRyZXNzIGFuZCBzaXplICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX0RDQ01fUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19kY2NtX3ByZXNlbnQpICYmIGNvcmVfY29uZmlnX2RjY21fcHJlc2VudCA9PSAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9EQ0NNX1BSRVNFTlQgICAgMQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRENDTV9CQVNFICAgICAgIGNvcmVfY29uZmlnX2RjY21fYmFzZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRENDTV9TSVpFICAgICAgIGNvcmVfY29uZmlnX2RjY21fc2l6ZQ0KKyNpZmRlZiBjb3JlX2NvbmZpZ19kY2NtX2ludGVybGVhdmUNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQ01fSU5URVJMRUFWRSBjb3JlX2NvbmZpZ19kY2NtX2ludGVybGVhdmUNCisjZW5kaWYNCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogUGVyaXBoZXJhbCBtZW1vcnkgcmVnaW9uKERNUCkgYmFzZSBhZGRyZXNzLCBpZiBkbXAgY29uZmlndXJlZCwgdGhpcyBtYWNybyB3aWxsIGJlIGRlZmluZWQgYXMgYmFzZSBhZGRyZXNzICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX0RNUF9QRVJJUEhFUkFMKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2Npcl9kbXBfcGVyaXBoZXJhbCkNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RNUF9QRVJJUEhFUkFMICBjb3JlX2NvbmZpZ19jaXJfZG1wX3BlcmlwaGVyYWwNCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogTVBVIG9wdGlvbnMgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfTVBVX1BSRVNFTlQpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfbXB1X3ByZXNlbnQpICYmIGNvcmVfY29uZmlnX21wdV9wcmVzZW50ID09IDENCisjZGVmaW5lIEFSQ19GRUFUVVJFX01QVV9QUkVTRU5UICAgICAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9NUFVfVkVSU0lPTiAgICAgY29yZV9jb25maWdfYmNyX21wdV9idWlsZF92ZXJzaW9uDQorI2RlZmluZSBBUkNfRkVBVFVSRV9NUFVfUkVHSU9OUyAgICAgY29yZV9jb25maWdfbXB1X3JlZ2lvbnMNCisjaWZkZWYgY29yZV9jb25maWdfYmNyX21wdV9idWlsZF9pDQorI2RlZmluZSBBUkNfRkVBVFVSRV9NUFVfQlVJTERfSSAgICAgY29yZV9jb25maWdfYmNyX21wdV9idWlsZF9pDQorI2VuZGlmDQorI2lmZGVmIGNvcmVfY29uZmlnX2Jjcl9tcHVfYnVpbGRfcw0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfTVBVX0JVSUxEX1MgICAgIGNvcmVfY29uZmlnX2Jjcl9tcHVfYnVpbGRfcw0KKyNlbmRpZg0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBTZWN1cmUgQkNSIFNFQ19CVUlMRCBCQ1IgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfU0VDX1BSRVNFTlQpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfYmNyX3NlY19idWlsZCkNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1NFQ19QUkVTRU5UICAgICAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9TRUNfVkVSU0lPTiAgICAgY29yZV9jb25maWdfYmNyX3NlY19idWlsZF92ZXJzaW9uDQorI2RlZmluZSBBUkNfRkVBVFVSRV9TRUNfQlVJTERfRFNNICAgY29yZV9jb25maWdfYmNyX3NlY19idWlsZF9kc20NCisjZGVmaW5lIEFSQ19GRUFUVVJFX1NFQ19CVUlMRF9OU00gICBjb3JlX2NvbmZpZ19iY3Jfc2VjX2J1aWxkX25zbQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfU0VDX0JVSUxEX0kxU00gIGNvcmVfY29uZmlnX2Jjcl9zZWNfYnVpbGRfaTFzbQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfU0VDX0JVSUxEX0kwU00gIGNvcmVfY29uZmlnX2Jjcl9zZWNfYnVpbGRfaTBzbQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfU0VDX0JVSUxEX1MgICAgIGNvcmVfY29uZmlnX2Jjcl9zZWNfYnVpbGRfcw0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfU0VDX0JVSUxEX0VJICAgIGNvcmVfY29uZmlnX2Jjcl9zZWNfYnVpbGRfZWkNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1NFQ19CVUlMRF9FRCAgICBjb3JlX2NvbmZpZ19iY3Jfc2VjX2J1aWxkX2VkDQorI2VuZGlmDQorI2VuZGlmDQorDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX1NFQ19NT0RFUykNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19zZWNfbW9kZXMpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9TRUNfTU9ERVMgICAgICAgY29yZV9jb25maWdfc2VjX21vZGVzDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIERhdGEgQ2FjaGUgb3B0aW9ucyAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9EQ0FDSEVfUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19kY2FjaGVfcHJlc2VudCkgJiYgY29yZV9jb25maWdfZGNhY2hlX3ByZXNlbnQgPT0gMQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRENBQ0hFX1BSRVNFTlQgICAgICAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9EQ0FDSEVfQlVJTEQgICAgICAgIGNvcmVfY29uZmlnX2Jjcl9kX2NhY2hlX2J1aWxkDQorI2RlZmluZSBBUkNfRkVBVFVSRV9EQ0FDSEVfQlVJTERfVkVSU0lPTiAgICBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZF92ZXJzaW9uDQorI2RlZmluZSBBUkNfRkVBVFVSRV9EQ0FDSEVfQlVJTERfQVNTT0MgICAgICBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZF9hc3NvYw0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRENBQ0hFX0JVSUxEX0NBUEFDSVRZICAgY29yZV9jb25maWdfYmNyX2RfY2FjaGVfYnVpbGRfY2FwYWNpdHkNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQUNIRV9CVUlMRF9CU0laRSAgICAgIGNvcmVfY29uZmlnX2Jjcl9kX2NhY2hlX2J1aWxkX2JzaXplDQorI2RlZmluZSBBUkNfRkVBVFVSRV9EQ0FDSEVfQlVJTERfRkwgICAgIGNvcmVfY29uZmlnX2Jjcl9kX2NhY2hlX2J1aWxkX2ZsDQorI2RlZmluZSBBUkNfRkVBVFVSRV9EQ0FDSEVfQlVJTERfVSAgICAgIGNvcmVfY29uZmlnX2Jjcl9kX2NhY2hlX2J1aWxkX3UNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQUNIRV9TSVpFICAgICAgICAgY29yZV9jb25maWdfZGNhY2hlX3NpemUNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQUNIRV9MSU5FX1NJWkUgICAgICAgIGNvcmVfY29uZmlnX2RjYWNoZV9saW5lX3NpemUNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQUNIRV9XQVlTICAgICAgICAgY29yZV9jb25maWdfZGNhY2hlX3dheXMNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQUNIRV9GRUFUVVJFICAgICAgY29yZV9jb25maWdfZGNhY2hlX2ZlYXR1cmUNCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogSW5zdHJ1Y3Rpb24gQ2FjaGUgb3B0aW9ucyAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9JQ0FDSEVfUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19pY2FjaGVfcHJlc2VudCkgJiYgY29yZV9jb25maWdfaWNhY2hlX3ByZXNlbnQgPT0gMQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNBQ0hFX1BSRVNFTlQgICAgICAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0FDSEVfQlVJTEQgICAgICAgIGNvcmVfY29uZmlnX2Jjcl9pX2NhY2hlX2J1aWxkDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0FDSEVfQlVJTERfVkVSU0lPTiAgICBjb3JlX2NvbmZpZ19iY3JfaV9jYWNoZV9idWlsZF92ZXJzaW9uDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0FDSEVfQlVJTERfQVNTT0MgICAgICBjb3JlX2NvbmZpZ19iY3JfaV9jYWNoZV9idWlsZF9hc3NvYw0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNBQ0hFX0JVSUxEX0NBUEFDSVRZICAgY29yZV9jb25maWdfYmNyX2lfY2FjaGVfYnVpbGRfY2FwYWNpdHkNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQUNIRV9CVUlMRF9CU0laRSAgICAgIGNvcmVfY29uZmlnX2Jjcl9pX2NhY2hlX2J1aWxkX2JzaXplDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0FDSEVfQlVJTERfRkwgICAgIGNvcmVfY29uZmlnX2Jjcl9pX2NhY2hlX2J1aWxkX2ZsDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0FDSEVfQlVJTERfRCAgICAgIGNvcmVfY29uZmlnX2Jjcl9pX2NhY2hlX2J1aWxkX2QNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQUNIRV9TSVpFICAgICAgICAgY29yZV9jb25maWdfaWNhY2hlX3NpemUNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQUNIRV9MSU5FX1NJWkUgICAgICAgIGNvcmVfY29uZmlnX2ljYWNoZV9saW5lX3NpemUNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQUNIRV9XQVlTICAgICAgICAgY29yZV9jb25maWdfaWNhY2hlX3dheXMNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQUNIRV9GRUFUVVJFICAgICAgY29yZV9jb25maWdfaWNhY2hlX2ZlYXR1cmUNCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogQVJDIHVETUEgb3B0aW9ucyAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9ETUFDKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2RtYWMpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9ETUFDICAgICAgICBjb3JlX2NvbmZpZ19kbWFjDQorI2RlZmluZSBDT1JFX0RNQUNfQ0hBTk5FTFMgICAgICBjb3JlX2NvbmZpZ19kbWFjX2NoYW5uZWxzDQorI2RlZmluZSBDT1JFX0RNQUNfUkVHSVNURVJTICAgICBjb3JlX2NvbmZpZ19kbWFjX3JlZ2lzdGVycw0KKyNpZiBjb3JlX2NvbmZpZ19iY3JfZG1hY19idWlsZF9pbnRfY2ZnID09IDIgJiYgY29yZV9jb25maWdfYmNyX2RtYWNfYnVpbGRfaW50X2NmZyA9PSA0DQorI2RlZmluZSBETUFfTVVMVElfSVJRICAgICAgICAgICAxDQorI2Vsc2UNCisjZGVmaW5lIERNQV9NVUxUSV9JUlEgICAgICAgICAgIDANCisjZW5kaWYNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RNQUNfUFJFU0VOVCAgICBjb3JlX2NvbmZpZ19kbWFjDQorI2RlZmluZSBBUkNfRkVBVFVSRV9ETUFDX1ZFUlNJT04gICAgY29yZV9jb25maWdfYmNyX2RtYWNfYnVpbGRfdmVyc2lvbg0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRE1BQ19DSEFOTkVMUyAgIGNvcmVfY29uZmlnX2RtYWNfY2hhbm5lbHMNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RNQUNfUkVHSVNURVJTICBjb3JlX2NvbmZpZ19kbWFjX3JlZ2lzdGVycw0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRE1BQ19JTlRfQ0ZHICAgIGNvcmVfY29uZmlnX2Jjcl9kbWFjX2J1aWxkX2ludF9jZmcNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RNQUNfRklGT19ERVBUSCBjb3JlX2NvbmZpZ19kbWFjX2ZpZm9fZGVwdGgNCisNCisjaWZkZWYgQVJDX0ZFQVRVUkVfU0VDX1RJTUVSMF9QUkVTRU5UDQorI2RlZmluZSBETUFfSVJRX05VTV9TVEFSVCAgICAgICAyMg0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRE1BQ19WRUNUT1JfU1RBUlQgICAyMg0KKyNlbHNlDQorI2RlZmluZSBETUFfSVJRX05VTV9TVEFSVCAgICAgICAyMA0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRE1BQ19WRUNUT1JfU1RBUlQgICAyMA0KKyNlbmRpZg0KKw0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNpZmRlZiBBUkNfRkVBVFVSRV9VTkFMSUdORUQNCisjZGVmaW5lIFNUQVRVUzMyX1JFU0VUX1ZBTFVFICAgICAgICAoMTw8MTkpDQorI2Vsc2UNCisjZGVmaW5lIFNUQVRVUzMyX1JFU0VUX1ZBTFVFICAgICAgICAoMCkNCisjZW5kaWYNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9BUkNfRkVBVFVSRV9DT05GSUdfSF8gKi8NCisNCisvKiogQH0gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfdGltZXIuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY190aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTAwMTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfdGltZXIuaApAQCAtMCwwICsxLDk5IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTE1DQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBBUkNfSEFMX01JU0NfVElNRVINCisgKiBcYnJpZWYgaGVhZGVyIGZpbGUgb2YgQVJDIGludGVybmFsIHRpbWVyDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgQVJDX0hBTF9NSVNDX1RJTUVSDQorICogQHsNCisgKi8NCisNCisjaWZuZGVmIF9BUkNfSEFMX1RJTUVSX0hfDQorI2RlZmluZSBfQVJDX0hBTF9USU1FUl9IXw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyYy5oIg0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX3Rvb2xjaGFpbi5oIg0KKw0KKy8qKg0KKyAqIFxuYW1lIGFyYyBpbnRlcm5hbCB0aW1lcnMgbmFtZXMNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgVElNRVJfMCAgICAgMCAgIC8qITwgbWFjcm8gbmFtZSBmb3IgYXJjIGludGVybmFsIHRpbWVyIDAgKi8NCisjZGVmaW5lIFRJTUVSXzEgICAgIDEgICAvKiE8IG1hY3JvIG5hbWUgZm9yIGFyYyBpbnRlcm5hbCB0aW1lciAxICovDQorI2RlZmluZSBUSU1FUl9SVEMgICAyICAgLyohPCBtYWNybyBuYW1lIGZvciBhcmMgaW50ZXJuYWwgUlRDICovDQorDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgYml0IGRlZmluaXRpb24gb2YgUlRDIENUUkwgcmVnDQorICogQHsNCisgKi8NCisNCisjZGVmaW5lIFRJTUVSX1JUQ19FTkFCTEUgICAgMHgwMSAgICAgICAvKiE8IGVuYWJsZSBSVEMgKi8NCisjZGVmaW5lIFRJTUVSX1JUQ19DTEVBUiAgICAgMHgwMiAgICAgICAvKiBjbGVhcnMgdGhlIEFVWF9SVENfTE9XIGFuZCBBVVhfUlRDX0hJR0ggKi8NCisjZGVmaW5lIFRJTUVSX1JUQ19TVEFUVVNfQTAgMHg0MDAwMDAwMCAvKiE8IHRyYWNrIGJpdCBvZiBhdG9taWNpdHkgb2YgcmVhZHMgb2YgUlRDICovDQorI2RlZmluZSBUSU1FUl9SVENfU1RBVFVTX0ExIDB4ODAwMDAwMDAgLyohPCB0cmFjayBiaXQgb2YgYXRvbWljaXR5IG9mIHJlYWRzIG9mIFJUQyAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lIGJpdCBkZWZpbml0aW9uIG9mIHRpbWVyIENUUkwgcmVnDQorICogQHsNCisgKi8NCisjZGVmaW5lIFRJTUVSX0NUUkxfSUUgICAgICAgKDEgPDwgMCkgICAgLyohPCBJbnRlcnJ1cHQgd2hlbiBjb3VudCByZWFjaGVzIGxpbWl0ICovDQorI2RlZmluZSBUSU1FUl9DVFJMX05IICAgICAgICgxIDw8IDEpICAgIC8qITwgQ291bnQgb25seSB3aGVuIENQVSBOT1QgaGFsdGVkICovDQorI2RlZmluZSBUSU1FUl9DVFJMX1cgICAgICAgICgxIDw8IDIpICAgIC8qITwgd2F0Y2hkb2cgZW5hYmxlICovDQorI2RlZmluZSBUSU1FUl9DVFJMX0lQICAgICAgICgxIDw8IDMpICAgIC8qITwgaW50ZXJydXB0IHBlbmRpbmcgKi8NCisNCisvKiogQH0gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCitleHRlcm4gaW50MzJfdCB0aW1lcl9wcmVzZW50KGNvbnN0IHVpbnQzMl90IG5vKTsNCitleHRlcm4gaW50MzJfdCB0aW1lcl9zdGFydChjb25zdCB1aW50MzJfdCBubywgY29uc3QgdWludDMyX3QgbW9kZSwgY29uc3QgdWludDMyX3QgdmFsKTsNCitleHRlcm4gaW50MzJfdCB0aW1lcl9zdG9wKGNvbnN0IHVpbnQzMl90IG5vKTsNCitleHRlcm4gaW50MzJfdCB0aW1lcl9jdXJyZW50KGNvbnN0IHVpbnQzMl90IG5vLCB2b2lkICp2YWwpOw0KK2V4dGVybiBpbnQzMl90IHRpbWVyX2ludF9jbGVhcihjb25zdCB1aW50MzJfdCBubyk7DQorZXh0ZXJuIHZvaWQgdGltZXJfaW5pdCh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmICAvKiBfQVJDX0hBTF9USU1FUl9IXyAqLw0KKy8qKiB9QCovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9lbWJBUkNfZXJyb3IuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvZW1iQVJDX2Vycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1ZTE4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvZW1iQVJDX2Vycm9yLmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMTItMjUNCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEVNQkFSQ19FUlJPUg0KKyAqIFxicmllZiAgIGhlYWRlciBmaWxlIHRvIGRlZmluZSBjb21tb24gZGVmaW5pdGlvbnMgZXJyb3IgbWFuYWdlbWVudA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBFTUJBUkNfRVJST1INCisgKiBAew0KKyAqLw0KKw0KKyNpZm5kZWYgX0VNQkFSQ19FUlJPUl9IXw0KKyNkZWZpbmUgX0VNQkFSQ19FUlJPUl9IXw0KKw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfYnVpbHRpbi5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKy8qKg0KKyAqIFxuYW1lICAgIE1haW4gRXJyb3IgQ29kZSBEZWZpbml0aW9ucw0KKyAqIEB7DQorICovDQorI2RlZmluZSBFX09LICAgICAgICAoMCkgICAgIC8qITwgb2sgKi8NCisjZGVmaW5lIEVfU1lTICAgICAgICgtNSkgICAgICAgIC8qITwgc3lzdGVtIGVycm9yICovDQorI2RlZmluZSBFX05PU1BUICAgICAoLTkpICAgICAgICAvKiE8IHVuc3VwcG9ydGVkIGZlYXR1cmVzICovDQorI2RlZmluZSBFX1JTRk4gICAgICAoLTEwKSAgICAgICAvKiE8IHJlc2VydmVkIGZ1bmN0aW9uIGNvZGUgKi8NCisjZGVmaW5lIEVfUlNBVFIgICAgICgtMTEpICAgICAgIC8qITwgcmVzZXJ2ZWQgYXR0cmlidXRlICovDQorI2RlZmluZSBFX1BBUiAgICAgICAoLTE3KSAgICAgICAvKiE8IHBhcmFtZXRlciBlcnJvciAqLw0KKyNkZWZpbmUgRV9JRCAgICAgICAgKC0xOCkgICAgICAgLyohPCBpbnZhbGlkIElEIG51bWJlciAqLw0KKyNkZWZpbmUgRV9DVFggICAgICAgKC0yNSkgICAgICAgLyohPCBjb250ZXh0IGVycm9yICovDQorI2RlZmluZSBFX01BQ1YgICAgICAoLTI2KSAgICAgICAvKiE8IG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9uICovDQorI2RlZmluZSBFX09BQ1YgICAgICAoLTI3KSAgICAgICAvKiE8IG9iamVjdCBhY2Nlc3MgdmlvbGF0aW9uICovDQorI2RlZmluZSBFX0lMVVNFICAgICAoLTI4KSAgICAgICAvKiE8IGlsbGVnYWwgc2VydmljZSBjYWxsIHVzZSAqLw0KKyNkZWZpbmUgRV9OT01FTSAgICAgKC0zMykgICAgICAgLyohPCBpbnN1ZmZpY2llbnQgbWVtb3J5ICovDQorI2RlZmluZSBFX05PSUQgICAgICAoLTM0KSAgICAgICAvKiE8IG5vIElEIG51bWJlciBhdmFpbGFibGUgKi8NCisjZGVmaW5lIEVfTk9SRVMgICAgICgtMzUpICAgICAgIC8qITwgbm8gcmVzb3VyY2UgYXZhaWxhYmxlICovDQorI2RlZmluZSBFX09CSiAgICAgICAoLTQxKSAgICAgICAvKiE8IG9iamVjdCBzdGF0ZSBlcnJvciAqLw0KKyNkZWZpbmUgRV9OT0VYUyAgICAgKC00MikgICAgICAgLyohPCBub24tZXhpc3RlbnQgb2JqZWN0ICovDQorI2RlZmluZSBFX1FPVlIgICAgICAoLTQzKSAgICAgICAvKiE8IHF1ZXVlIG92ZXJmbG93ICovDQorI2RlZmluZSBFX1JMV0FJICAgICAoLTQ5KSAgICAgICAvKiE8IGZvcmNlZCByZWxlYXNlIGZyb20gd2FpdGluZyAqLw0KKyNkZWZpbmUgRV9UTU9VVCAgICAgKC01MCkgICAgICAgLyohPCBwb2xsaW5nIGZhaWx1cmUgb3IgdGltZW91dCAqLw0KKyNkZWZpbmUgRV9ETFQgICAgICAgKC01MSkgICAgICAgLyohPCB3YWl0aW5nIG9iamVjdCBkZWxldGVkICovDQorI2RlZmluZSBFX0NMUyAgICAgICAoLTUyKSAgICAgICAvKiE8IHdhaXRpbmcgb2JqZWN0IHN0YXRlIGNoYW5nZWQgKi8NCisjZGVmaW5lIEVfV0JMSyAgICAgICgtNTcpICAgICAgIC8qITwgbm9uLWJsb2NraW5nIGFjY2VwdGVkICovDQorI2RlZmluZSBFX0JPVlIgICAgICAoLTU4KSAgICAgICAvKiE8IGJ1ZmZlciBvdmVyZmxvdyAqLw0KKyNkZWZpbmUgRV9PUE5FRCAgICAgKC02KSAgICAgICAgLyohPCBkZXZpY2UgaXMgb3BlbmVkICovDQorI2RlZmluZSBFX0NMU0VEICAgICAoLTcpICAgICAgICAvKiE8IGRldmljZSBpcyBjbG9zZWQgKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBHZW5lcmF0ZSBBbmQgRGVjb21wb3NlIEVycm9yIENvZGUNCisgKiBAew0KKyAqLw0KKyNpZm5kZWYgRVJDRA0KKy8qKiBnZW5lcmF0ZSBlcnJvciBjb2RlIHVzaW5nIG1haW4gZXJyb3IgY29kZSBhbmQgc3ViIGVycm9yIGNvZGUgKi8NCisjZGVmaW5lIEVSQ0QobWVyY2QsIHNlcmNkKSBcDQorICAgICAgICAoKHVpbnQzMl90KSgoKCh1aW50MzJfdCkgc2VyY2QpIDw8IDgpIHwgKCgodWludDMyX3QpIG1lcmNkKSAmIDB4ZmZVKSkpDQorI2VuZGlmIC8qIEVSQ0QgKi8NCisNCisjaWZuZGVmIE1FUkNEDQorI2lmZGVmIElOVDhfTUFYDQorLyoqIGdldCBtYWluIGVycm9yIGNvZGUgZnJvbSBlcnJvciBjb2RlICovDQorI2RlZmluZSBNRVJDRChlcmNkKSAgICAgKCh1aW50MzJfdCkoKGludDhfdCkoZXJjZCkpKQ0KKyNlbHNlIC8qIElOVDhfTUFYICovDQorLyoqIGdldCBtYWluIGVycm9yIGNvZGUgZnJvbSBlcnJvciBjb2RlICovDQorI2RlZmluZSBNRVJDRChlcmNkKSAgICAgKCh1aW50MzJfdCkoKCh1aW50MzJfdCkgZXJjZCkgfCB+MHhmZlUpKQ0KKyNlbmRpZiAvKiBJTlQ4X01BWCAqLw0KKyNlbmRpZiAvKiBNRVJDRCAqLw0KKw0KKyNpZm5kZWYgU0VSQ0QNCisvKiogZ2V0IHN1YiBlcnJvciBjb2RlIGZyb20gZXJyb3IgY29kZSAqLw0KKyNkZWZpbmUgU0VSQ0QoZXJjZCkgICAgICgodWludDMyX3QpKChlcmNkKSA+PiA4KSkNCisjZW5kaWYgLyogU0VSQ0QgKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBDaGVjayBFcnJvcg0KKyAqIEB7DQorICovDQorLyoqDQorICogXGJyaWVmICAgY2hlY2sgYW4gZXhwcmVzc2lvbiB0byBzZWUgaWYgaXQgaXMgcmlnaHQsIGFuZCB3aGVuIGVycm9yDQorICogIHNldCB0aGUgZXJjZCwgYW5kIGdvdG8gZXhpdF9sYWJlbA0KKyAqIFxwYXJhbSAgIEVYUFIgICAgdGhlIGV4cHJlc3Npb24gdGhhdCBuZWVkIHRvIGJlIGNoZWNrZWQgKD09MCBmYWlsZWQpDQorICogXHBhcmFtICAgRVJDRCAgICBNVVNUIHBhc3MgYSB2YXJpYWJsZSB0byBoZXJlIHRvIGdldCB0aGUgZXJyb3IgY29kZQ0KKyAqIFxwYXJhbSAgIEVSUk9SX0NPREUgZXJyb3IgY29kZSB0aGF0IHBhc3MgdG8gRVJDRA0KKyAqIFxwYXJhbSAgIEVYSVRfTEFCRUwgYSBsYWJlbCB0byBnbyB3aGVuIGVycm9yIGhhcHBlbnMNCisgKi8NCisjZGVmaW5lIENIRUNLX0VYUChFWFBSLCBFUkNELCBFUlJPUl9DT0RFLCBFWElUX0xBQkVMKSAgIHsgICBcDQorICAgICAgICBpZiAoX2FyY19yYXJlbHkoIShFWFBSKSkpIHsgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgIEVSQ0QgPSAoRVJST1JfQ09ERSk7ICAgICAgICAgICAgXA0KKyAgICAgICAgICAgIGdvdG8gRVhJVF9MQUJFTDsgICAgICAgICAgICBcDQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIH0NCisvKioNCisgKiBcYnJpZWYgICBjaGVjayBhbiBleHByZXNzaW9uIHRvIHNlZSBpZiBpdCBpcyByaWdodCwgYW5kIHdoZW4gZXJyb3INCisgKiAgICAgICAgICBkaXJlY3RseSBnb3RvIGV4aXRfbGFiZWwNCisgKiBccGFyYW0gICBFWFBSICAgICAgIHRoZSBleHByZXNzaW9uIHRoYXQgbmVlZCB0byBiZSBjaGVja2VkICg9PTAgZmFpbGVkKQ0KKyAqIFxwYXJhbSAgIEVYSVRfTEFCRUwgYSBsYWJlbCB0byBnbyB3aGVuIGVycm9yIGhhcHBlbnMNCisgKiBccmV0dmFsDQorICovDQorI2RlZmluZSBDSEVDS19FWFBfTk9FUkNEKEVYUFIsIEVYSVRfTEFCRUwpIHsgICAgICAgICAgICBcDQorICAgICAgICBpZiAoX2FyY19yYXJlbHkoIShFWFBSKSkpIHsgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgIGdvdG8gRVhJVF9MQUJFTDsgICAgICAgICAgICBcDQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIH0NCisvKiogY2hlY2sgY250IGJ5dGVzIGFsaWduLCAxIGZvciBhbGlnbmVkLCAwIGZvciBub3QtYWxpZ25lZCAqLw0KKyNkZWZpbmUgQ0hFQ0tfQUxJR05fQllURVMocG9pbnRlciwgY250KSAgICAgKCgoKHVpbnQzMl90KShwb2ludGVyKSkgJiAoY250LTEpKSA9PSAwKQ0KKy8qKiBjaGVjayAyIGJ5dGVzIGFsaWduLCAxIGZvciBhbGlnbmVkLCAwIGZvciBub3QtYWxpZ25lZCAqLw0KKyNkZWZpbmUgQ0hFQ0tfQUxJR05fMkJZVEVTKHBvaW50ZXIpICAgICAoKCgodWludDMyX3QpKHBvaW50ZXIpKSAmIDB4MSkgPT0gMCkNCisvKiogY2hlY2sgNCBieXRlcyBhbGlnbiwgMSBmb3IgYWxpZ25lZCwgMCBmb3Igbm90LWFsaWduZWQgKi8NCisjZGVmaW5lIENIRUNLX0FMSUdOXzRCWVRFUyhwb2ludGVyKSAgICAgKCgoKHVpbnQzMl90KShwb2ludGVyKSkgJiAweDMpID09IDApDQorLyoqIGNoZWNrIDggYnl0ZXMgYWxpZ24sIDEgZm9yIGFsaWduZWQsIDAgZm9yIG5vdC1hbGlnbmVkICovDQorI2RlZmluZSBDSEVDS19BTElHTl84QllURVMocG9pbnRlcikgICAgICgoKCh1aW50MzJfdCkocG9pbnRlcikpICYgMHg3KSA9PSAwKQ0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0VNQkFSQ19FUlJPUl9IXyAqLw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgRU1CQVJDX0VSUk9SICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9lbWJBUkNfdG9vbGNoYWluLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2VtYkFSQ190b29sY2hhaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTUzNjNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9lbWJBUkNfdG9vbGNoYWluLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMTItMjUNCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIFRPT0xDSEFJTg0KKyAqIFxicmllZiB0b29sY2hhaW4gZGVwZW5kZW50IGRlZmluaXRpb25zDQorICovDQorDQorI2luY2x1ZGUgPHN0ZGludC5oPiAvKiBDOTkgc3RhbmRhcmQgbGliICovDQorI2luY2x1ZGUgPGxpbWl0cy5oPiAvKiBDOTkgc3RhbmRhcmQgbGliICovDQorI2luY2x1ZGUgPHN0ZGRlZi5oPiAvKiBDOTkgc3RhbmRhcmQgbGliICovDQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4gICAgLyogQzk5IHN0YW5kYXJkIGxpYiAqLw0KKw0KKyNpbmNsdWRlICJlbWJBUkNfQlNQX2NvbmZpZy5oIg0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIFRPT0xDSEFJTg0KKyAqIEB7DQorICovDQorDQorI2lmbmRlZiBfRU1CQVJDX1RPT0xDSEFJTl9IXw0KKyNkZWZpbmUgX0VNQkFSQ19UT09MQ0hBSU5fSF8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKg0KKyAqICBtYWNybyBkZWZpbml0aW9ucyBvZiBjb21waWxlciBleHRlbmQgZnVuY3Rpb24NCisgKi8NCisjaWZuZGVmIF9fY3BsdXNwbHVzICAgICAgICAgICAgIC8qIEMrKyBzdXBwb3J0cyBpbmxpbmUgKi8NCisjaWYgX19TVERDX1ZFUlNJT05fXyA8IDE5OTkwMUwgICAgICAgICAgLyogQzk5IHN1cHBvcnRzIGlubGluZSAqLw0KKyNpZm5kZWYgaW5saW5lDQorI2RlZmluZSBpbmxpbmUgIF9faW5saW5lX18gICAgICAgICAgLyogaW5saW5lIGZ1bmN0aW9uICovDQorI2VuZGlmDQorI2VuZGlmIC8qIF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDFMICovDQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQorDQorI2lmbmRlZiBJbmxpbmUNCisjZGVmaW5lIElubGluZSAgc3RhdGljIF9faW5saW5lX18gICAgICAgLyogaW5saW5lIGZ1bmN0aW9uICovDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX2NwbHVzcGx1cyAgICAgICAgICAgICAvKiBDKysgc3VwcG9ydHMgYXNtICovDQorI2lmbmRlZiBhc20NCisjZGVmaW5lIGFzbSBfX2FzbV9fICAgICAgICAgICAgIC8qIGlubGluZSBhc20gKi8NCisjZW5kaWYNCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCisNCisjaWZuZGVmIEFzbQ0KKyNkZWZpbmUgQXNtIF9fYXNtX18gdm9sYXRpbGUgICAgICAgIC8qIGlubGluZSBhc20gKG5vIG9wdGltaXphdGlvbikgKi8NCisjZW5kaWYNCisNCisvKiBjb21waWxlciBhdHRyaWJ1dGVzICovDQorI2RlZmluZSBFTUJBUkNfRk9SQ0VJTkxJTkUgIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQ0KKyNkZWZpbmUgRU1CQVJDX05PSU5MSU5FICAgICBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpDQorI2RlZmluZSBFTUJBUkNfUEFDS0VEICAgICAgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpDQorI2RlZmluZSBFTUJBUkNfV0VBSyAgICAgX19hdHRyaWJ1dGVfXygod2VhaykpDQorI2RlZmluZSBFTUJBUkNfQUxJQVMoZikgICAgIF9fYXR0cmlidXRlX18oKHdlYWssIGFsaWFzICgjZikpKQ0KKyNkZWZpbmUgRU1CQVJDX0xJTktUTyhmKSAgICBfX2F0dHJpYnV0ZV9fKChhbGlhcyAoI2YpKSkNCisjZGVmaW5lIEVNQkFSQ19OT1JFVFVSTiAgICAgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKQ0KKyNkZWZpbmUgRU1CQVJDX05BS0VEICAgICAgICBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpICAvKiBmdW5jdGlvbiB3aXRob3V0IHJldHVybiAqLw0KKyNkZWZpbmUgRU1CQVJDX0FMSUdORUQoeCkgICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHgpKSkNCisNCisNCisvKiBhcnJheSBjb3VudCBtYWNybyAqLw0KKyNkZWZpbmUgRU1CQVJDX0FSUkFZX0NPVU5UKHgpIChzaXplb2YoeCkvc2l6ZW9mKHhbMF0pKQ0KKw0KKy8qIGNvbnZlcnQgbWFjcm8gYXJndW1lbnQgdG8gc3RyaW5nICovDQorLyogbm90ZTogdGhpcyBuZWVkcyBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24sIGFjY29tcGxpc2hlZCB3aXRoIHRoZSBoZWxwZXIgbWFjcm8NCisgKiAgICAgICBfX0VNQkFSQ19UT19TVFJJTkcgKi8NCisjZGVmaW5lIF9fRU1CQVJDX1RPX1NUUklORyh4KSAjeA0KKyNkZWZpbmUgRU1CQVJDX1RPX1NUUklORyh4KSAgIF9fRU1CQVJDX1RPX1NUUklORyh4KQ0KKw0KKyNpZiBkZWZpbmVkKF9fR05VX18pDQorLyogR05VIHRvb2wgc3BlY2lmaWMgZGVmaW5pdGlvbnMgKi8NCisNCisjZWxpZiBkZWZpbmVkKF9fTVdfXykNCisvKiBNZXRhd2FyZSB0b29sIHNwZWNpZmljIGRlZmluaXRpb25zICovDQorLyogTWV0YXdhcmUgdG9vbGNoYWluIHJlbGF0ZWQgZGVmaW5pdGlvbnMgKi8NCisNCisjZWxzZQ0KKyNlcnJvciAidW5zdXBwb3J0ZWQgdG9vbGNoYWluIg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0VNQkFSQ19UT09MQ0hBSU5fSF8gKi8NCisvKiogfUAgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2RpcmVudC5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9kaXJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMzIyZjEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9kaXJlbnQuaApAQCAtMCwwICsxLDQ2IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE2LTAxLTIwDQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorI2lmbmRlZiBfRElSRU5UX0hfDQorI2RlZmluZSBfRElSRU5UX0hfDQorDQorI2luY2x1ZGUgImZhdGZzX2RpcmVudC5oIg0KKy8vI3VuZGVmIFNfSVNSRUcNCisNCisjdW5kZWYgRElSDQorI2RlZmluZSBESVIgRkFURlNfRElSDQorDQorLy8gI2RlZmluZSBzdGF0IGZhdGZzX3N0YXQNCisvLyAjZGVmaW5lIFNfSVNSRUcgRkFURlNfU19JU1JFRw0KKw0KKyNlbmRpZiAvKl9ESVJFTlRfSF8qLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX21pc2MuYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGMyMTUwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfbWlzYy5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTYtMDMtMDINCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorI2luY2x1ZGUgImVtYkFSQ19CU1BfY29uZmlnLmgiDQorDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2V4Y2VwdGlvbi5oIg0KKyNpbmNsdWRlICJlbWJBUkNfc3lzY2FsbHMuaCINCisNCisvKioNCisgKiBcYnJpZWYgSW5zdGFsbCB0aGUgc3lzY2FsbCBzd2kgaGFuZGxlciBpbnRvIGV4Y2VwdGlvbiB0YWJsZS4NCisgKiAgVGhpcyBuZWVkIHRvIGJlIGRvbmUgYWZ0ZXIgZXhjZXB0aW9uIHRhYmxlIGhhcyBiZWVuIGluaXRpYWxpemVkLg0KKyAqICBXaGVuIFJUT1MgaXMgaW1wbGVtZW50ZWQsIHlvdSBuZWVkIHRvIG1hbnVhbGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlcg0KKyAqICB5b3VyIFJUT1MgZXhjZXB0aW9uIHRhYmxlIGlzIHNldHVwLg0KKyAqLw0KK3ZvaWQgZ251X3ByaW50Zl9zZXR1cCh2b2lkKQ0KK3sNCisjaWYgZGVmaW5lZChfX0dOVV9fKSAmJiAhZGVmaW5lZChfSEFWRV9MSUJHTE9TU18pICYmICFkZWZpbmVkKF9IT1NUTElOS18pDQorICAgIGV4Y19oYW5kbGVyX2luc3RhbGwoRVhDX05PX1NXSSwgKEVYQ19IQU5ETEVSKXN5c2NhbGxfc3dpKTsNCisjZW5kaWYNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfc2Jyay5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfc2Jyay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ODY2NDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ19zYnJrLmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTYtMDMtMDINCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorI2luY2x1ZGUgImVtYkFSQ19CU1BfY29uZmlnLmgiDQorDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8Y3R5cGUuaD4NCisjaW5jbHVkZSA8ZXJybm8uaD4NCisjaW5jbHVkZSAiZW1iQVJDX3N5c2NhbGxzLmgiDQorDQorI2lmbmRlZiBfSE9TVExJTktfIC8qIE5vdCB1c2luZyBob3N0bGluayBsaWJyYXJ5ICovDQorDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLyBNZW1vcnkgTWFuYWdlbWVudCAvLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLyoqIEFsbG9jYXRpbmcgTWVtb3J5ICovDQorI2RlZmluZSBFTUJBUkNfV0lUSF9NV1NCUksNCisvKiBXaGV0aGVyIGhlYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICovDQorI2lmIGRlZmluZWQoX19NV19fKSAmJiBkZWZpbmVkKEVNQkFSQ19XSVRIX01XU0JSSykNCisNCitzdGF0aWMgaW50IF9faGVhcF9pbml0ID0gMDsNCitzdGF0aWMgY2hhciAqX19oZWFwX2VuZCwgKl9faGVhcF9jdXI7DQorZXh0ZXJuIGNoYXIgX2ZfaGVhcFtdOw0KK2V4dGVybiBjaGFyIF9lX2hlYXBbXTsNCisNCisvKiogQWxsb2NhdGluZyBNZW1vcnkgKi8NCit2b2lkICpTWVNDQUxMX1BSRUZJWChfc2JyaykodW5zaWduZWQgaW50IHNpemUpDQorew0KKyAgICBjaGFyICpuZXdfY3VyOw0KKw0KKyAgICBpZiAoX19oZWFwX2luaXQgPT0gMCkNCisgICAgew0KKyAgICAgICAgX19oZWFwX2N1ciA9IF9mX2hlYXA7DQorICAgICAgICBfX2hlYXBfZW5kID0gX2VfaGVhcDsNCisgICAgICAgIF9faGVhcF9pbml0ID0gMTsNCisgICAgfQ0KKw0KKyAgICBuZXdfY3VyID0gX19oZWFwX2N1ciArIHNpemU7DQorDQorICAgIGlmIChfX2hlYXBfY3VyIDw9IG5ld19jdXIgJiYgbmV3X2N1ciA8PSBfX2hlYXBfZW5kKQ0KKyAgICB7DQorICAgICAgICB2b2lkICpwID0gKHZvaWQgKilfX2hlYXBfY3VyOw0KKyAgICAgICAgX19oZWFwX2N1ciA9IG5ld19jdXI7DQorICAgICAgICByZXR1cm4gKHZvaWQgKilwOyAvKiogcmV0dXJuIG9sZCBfX2hlYXBfY3VyICovDQorICAgIH0NCisNCisgICAgcmV0dXJuIE5VTEw7DQorfQ0KKw0KKy8qKiBGcmVlaW5nIE1lbW9yeSAqLw0KK3ZvaWQgKlNZU0NBTExfUFJFRklYKF9icmspKHZvaWQgKnApDQorew0KKyAgICBfX2hlYXBfY3VyID0gcDsNCisgICAgcmV0dXJuIE5VTEw7DQorfQ0KKw0KKyNwcmFnbWEgd2VhayBzYnJrID0gX3NicmsNCisjcHJhZ21hIHdlYWsgYnJrID0gX2Jyaw0KKw0KKyNlbGlmIGRlZmluZWQoX19HTlVfXykNCisNCitleHRlcm4gY2hhciBfX3N0YXJ0X2hlYXA7DQorZXh0ZXJuIGNoYXIgX19lbmRfaGVhcDsNCisNCitjYWRkcl90ICpTWVNDQUxMX1BSRUZJWChfc2Jyaykoc2l6ZV90IG5ieXRlcykNCit7DQorICAgIHN0YXRpYyBjaGFyICpoZWFwX3B0ciA9IE5VTEw7DQorICAgIGNoYXIgKnByZXZfaGVhcF9wdHI7DQorDQorICAgIGlmIChoZWFwX3B0ciA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBoZWFwX3B0ciA9ICZfX3N0YXJ0X2hlYXA7DQorICAgIH0NCisNCisgICAgLyogQWxpZ24gdGhlICdoZWFwX3B0cicgc28gdGhhdCBtZW1vcnkgd2lsbCBhbHdheXMgYmUgYWxsb2NhdGVkIGF0IHdvcmQNCisgICAgYm91bmRhcmllcy4gKi8NCisgICAgaGVhcF9wdHIgPSAoY2hhciAqKSgoKCh1bnNpZ25lZCBsb25nKSBoZWFwX3B0cikgKyA3KSAmIH43KTsNCisgICAgcHJldl9oZWFwX3B0ciA9IGhlYXBfcHRyOw0KKw0KKyAgICBpZiAoKGhlYXBfcHRyICsgbmJ5dGVzKSA8ICZfX2VuZF9oZWFwKQ0KKyAgICB7DQorICAgICAgICBoZWFwX3B0ciArPSBuYnl0ZXM7DQorICAgICAgICByZXR1cm4gKGNhZGRyX3QgKikgcHJldl9oZWFwX3B0cjsNCisgICAgfQ0KKw0KKyAgICBlcnJubyA9IEVOT01FTTsNCisgICAgcmV0dXJuIChjYWRkcl90ICopIC0gMTsNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qICFkZWZpbmVkKF9IT1NUTElOS18pICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfc3lzY2FsbHMuYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3N5c2NhbGxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjNTVlMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3N5c2NhbGxzLmMKQEAgLTAsMCArMSw4OTQgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTYtMDEtMTgNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorI2luY2x1ZGUgImVtYkFSQ19zeXNjYWxscy5oIg0KKyNpbmNsdWRlICJkZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X3VhcnQuaCINCisNCisjaW5jbHVkZSA8ZXJybm8uaD4NCisjaW5jbHVkZSA8c3RkYXJnLmg+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8ZmNudGwuaD4NCisjaW5jbHVkZSA8dGltZS5oPg0KKyNpbmNsdWRlIDxjdHlwZS5oPg0KKyNpbmNsdWRlIDxzeXMvdGltZS5oPg0KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KKyNpZmRlZiBfX0dOVV9fDQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KKyNpbmNsdWRlIDxzeXMvZXJybm8uaD4NCisjaW5jbHVkZSA8c3lzL3RpbWVzLmg+DQorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQorI2VuZGlmDQorDQorLyoqDQorICogXHRvZG8gQ29uc2lkZXIgaG9zdGxpbmsgYW5kIG5zaW0gc3VwcG9ydA0KKyAqLw0KKw0KKyNpZm5kZWYgX0hPU1RMSU5LXyAvKiBOb3QgdXNpbmcgaG9zdGxpbmsgbGlicmFyeSAqLw0KKw0KKyNpZm5kZWYgX0VOVklST05fTEVODQorI2RlZmluZSBfRU5WSVJPTl9MRU4gICAgMzINCisjZW5kaWYNCisNCisjaWZuZGVmIEJPQVJEX0NPTlNPTEVfVUFSVF9JRA0KKyNkZWZpbmUgQk9BUkRfQ09OU09MRV9VQVJUX0lEICAgICAgIDENCisjZW5kaWYNCisjaWZuZGVmIEJPQVJEX0NPTlNPTEVfVUFSVF9CQVVEDQorI2RlZmluZSBCT0FSRF9DT05TT0xFX1VBUlRfQkFVRCAgICAgVUFSVF9CQVVEUkFURV8xMTUyMDANCisjZW5kaWYNCisNCisjaWZuZGVmIEVNQkFSQ19DRkdfU1RESU9fQ1JMRg0KKyNkZWZpbmUgRU1CQVJDX0NGR19TVERJT19DUkxGICAgICAgIDENCisjZW5kaWYNCisNCisjaWZuZGVmIEVNQkFSQ19DRkdfVVNFX1JUQ1RJTUUNCisjZGVmaW5lIEVNQkFSQ19DRkdfVVNFX1JUQ1RJTUUgICAgICAwDQorI2VuZGlmDQorDQorI2RlZmluZSBTVERJT19GSURfT0ZTICAgICAgICAgICAzDQorDQoraW50IHN0ZGlvX3VhcnRfaW5pdGVkID0gMDsNCitERVZfVUFSVCAqc3RkaW9fdWFydF9vYmo7DQorc3RhdGljIHZvaWQgaW5pdF9zdGRpb19zZXJpYWwodm9pZCkNCit7DQorICAgIGlmIChzdGRpb191YXJ0X2luaXRlZCkgeyByZXR1cm47IH0NCisNCisgICAgc3RkaW9fdWFydF9pbml0ZWQgPSAxOw0KKyAgICBzdGRpb191YXJ0X29iaiA9IHVhcnRfZ2V0X2RldihCT0FSRF9DT05TT0xFX1VBUlRfSUQpOw0KKw0KKyAgICBpZiAoc3RkaW9fdWFydF9vYmopDQorICAgIHsNCisgICAgICAgIHN0ZGlvX3VhcnRfb2JqLT51YXJ0X29wZW4oQk9BUkRfQ09OU09MRV9VQVJUX0JBVUQpOw0KKyAgICAgICAgc3RkaW9fdWFydF9vYmotPnVhcnRfY29udHJvbChVQVJUX0NNRF9TRVRfQkFVRCwgQ09OVjJWT0lEKEJPQVJEX0NPTlNPTEVfVUFSVF9CQVVEKSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzdGRpb191YXJ0X2luaXRlZCA9IC0xOw0KKyAgICB9DQorfQ0KKw0KK3N0YXRpYyBpbnQgc3RkaW9fcmVhZChjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgpDQorew0KKyAgICBpZiAoIXN0ZGlvX3VhcnRfb2JqKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICB1bnNpZ25lZCBpbnQgYXZhaWxfbGVuOw0KKyAgICBzdGRpb191YXJ0X29iai0+dWFydF9jb250cm9sKFVBUlRfQ01EX0dFVF9SWEFWQUlMLCAodm9pZCAqKSgmYXZhaWxfbGVuKSk7DQorICAgIGxlbmd0aCA9IChsZW5ndGggPCBhdmFpbF9sZW4pID8gbGVuZ3RoIDogYXZhaWxfbGVuOw0KKw0KKyAgICBpZiAobGVuZ3RoID09IDApDQorICAgIHsNCisgICAgICAgIGxlbmd0aCA9IDE7DQorICAgIH0NCisNCisgICAgcmV0dXJuIChpbnQpc3RkaW9fdWFydF9vYmotPnVhcnRfcmVhZCgodm9pZCAqKWJ1ZmZlciwgKHVpbnQzMl90KWxlbmd0aCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHN0ZGlvX3dyaXRlX2NoYXIoY2hhciBkYXRhKQ0KK3sNCisgICAgc3RkaW9fdWFydF9vYmotPnVhcnRfd3JpdGUoKGNvbnN0IHZvaWQgKikoJmRhdGEpLCAxKTsNCit9DQorDQorDQorc3RhdGljIGludCBzdGRpb193cml0ZShjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgpDQorew0KKyAgICBpZiAoIXN0ZGlvX3VhcnRfb2JqKSB7IHJldHVybiAtMTsgfQ0KKw0KKyNpZiBFTUJBUkNfQ0ZHX1NURElPX0NSTEYNCisgICAgdW5zaWduZWQgaW50IGkgPSAwOw0KKw0KKyAgICB3aGlsZSAoaSA8IGxlbmd0aCkNCisgICAgew0KKyAgICAgICAgaWYgKF9hcmNfcmFyZWx5KGJ1ZmZlcltpXSA9PSAnXG4nKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBzdGRpb193cml0ZV9jaGFyKCdccicpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgc3RkaW9fd3JpdGVfY2hhcihidWZmZXJbaV0pOw0KKyAgICAgICAgaSsrOw0KKyAgICB9DQorDQorICAgIHJldHVybiAoaW50KWk7DQorI2Vsc2UNCisgICAgcmV0dXJuIChpbnQpc3RkaW9fdWFydF9vYmotPnVhcnRfd3JpdGUoKGNvbnN0IHZvaWQgKilidWZmZXIsICh1aW50MzJfdClsZW5ndGgpOw0KKyNlbmRpZg0KK30NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLyBGaWxlIFByb2Nlc3NpbmcgLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisjaWZkZWYgTUlEX0ZBVEZTDQorI2luY2x1ZGUgImZmLmgiDQorI2lmbmRlZiBFTUJBUkNfQ0ZHX01BWF9GSUxFSEFORExFUw0KKyNkZWZpbmUgRU1CQVJDX0NGR19NQVhfRklMRUhBTkRMRVMgIDMyDQorI2VuZGlmDQorc3RhdGljIEZJTCAqZmlsZV9oYW5kbGVzW0VNQkFSQ19DRkdfTUFYX0ZJTEVIQU5ETEVTXSA9IHsgTlVMTCB9Ow0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKE1JRF9GQVRGUykgJiYgIV9GU19SRUFET05MWQ0KKy8qKiBQb3NpeCBtb2RlIHRvIEZhdEZTIG1vZGUgKi8NCitJbmxpbmUgQllURSBjb252X29wZW5tb2RlKGludCBmbGFncykNCit7DQorICAgIEJZVEUgb3Blbm1vZGUgPSAwOw0KKw0KKyAgICBpZiAoZmxhZ3MgPT0gT19SRE9OTFkpDQorICAgIHsNCisgICAgICAgIG9wZW5tb2RlID0gRkFfUkVBRDsNCisgICAgfQ0KKw0KKyAgICBpZiAoZmxhZ3MgJiBPX1dST05MWSkNCisgICAgew0KKyAgICAgICAgb3Blbm1vZGUgfD0gRkFfV1JJVEU7DQorICAgIH0NCisNCisgICAgaWYgKGZsYWdzICYgT19SRFdSKQ0KKyAgICB7DQorICAgICAgICBvcGVubW9kZSB8PSBGQV9SRUFEIHwgRkFfV1JJVEU7DQorICAgIH0NCisNCisgICAgaWYgKGZsYWdzICYgT19DUkVBVCkNCisgICAgew0KKyAgICAgICAgaWYgKGZsYWdzICYgT19UUlVOQykNCisgICAgICAgIHsNCisgICAgICAgICAgICBvcGVubW9kZSB8PSBGQV9DUkVBVEVfQUxXQVlTOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG9wZW5tb2RlIHw9IEZBX09QRU5fQUxXQVlTOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiBvcGVubW9kZTsNCit9DQorI2VuZGlmDQorDQorLyoqIE9wZW5pbmcgRmlsZXMgKi8NCisjaWZkZWYgX19NV19fDQoraW50IFNZU0NBTExfUFJFRklYKF9vcGVuKShjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIC8qIGludCBtb2RlICovIC4uLikNCisjZWxzZQ0KK2ludCBTWVNDQUxMX1BSRUZJWChfb3BlbikoY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLCBpbnQgbW9kZSkNCisjZW5kaWYNCit7DQorI2lmZGVmIE1JRF9GQVRGUw0KKyAgICBpbnQgZmlkOyAvKiogZmlsZSBoYW5kbGUgaWQgKi8NCisgICAgRklMICp0bXBfZmlsZXA7IC8qKiB0ZW1wIGZpbGUgaGFuZGxlIHBvaW50ZXIgKi8NCisgICAgQllURSBvcGVubW9kZTsNCisNCisgICAgLyogRmluZCB0aGUgZmlyc3QgYXZhaWxhYmxlIGZpbGUgcG9pbnRlciBpbiB0aGlzIGhhbmRsZXMgKi8NCisgICAgZm9yIChmaWQgPSAwOyBmaWQgPCBFTUJBUkNfQ0ZHX01BWF9GSUxFSEFORExFUzsgZmlkICsrKQ0KKyAgICB7DQorICAgICAgICBpZiAoZmlsZV9oYW5kbGVzW2ZpZF0gPT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAoZmlkID49IEVNQkFSQ19DRkdfTUFYX0ZJTEVIQU5ETEVTKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7IC8qIE5vIG1vcmUgYXZhaWxhYmxlIGZpbGUgaGFuZGxlciAqLw0KKyAgICB9DQorDQorICAgIC8qIE1hbGxvYyBtZW1vcnkgZm9yIEZJTCBvYmplY3QgKi8NCisgICAgdG1wX2ZpbGVwID0gKEZJTCAqKW1hbGxvYyhzaXplb2YoRklMKSk7DQorDQorICAgIGlmICghdG1wX2ZpbGVwKSAgIC8qIE5vIG1vcmUgbWVtb3J5ICovDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBmaWxlX2hhbmRsZXNbZmlkXSA9IHRtcF9maWxlcDsNCisjaWYgX0ZTX1JFQURPTkxZDQorDQorICAgIGlmIChmbGFncyA9PSBPX1JET05MWSkNCisgICAgew0KKyAgICAgICAgb3Blbm1vZGUgPSBGQV9SRUFEOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorI2Vsc2UNCisgICAgb3Blbm1vZGUgPSBjb252X29wZW5tb2RlKGZsYWdzKTsNCisjZW5kaWYNCisgICAgRlJFU1VMVCByZXMgPSBmX29wZW4odG1wX2ZpbGVwLCBwYXRoLCBvcGVubW9kZSk7DQorDQorICAgIGlmIChyZXMpICAgLyogb3BlbiBlcnJvciAqLw0KKyAgICB7DQorICAgICAgICBmcmVlKHRtcF9maWxlcCk7DQorICAgICAgICBmaWxlX2hhbmRsZXNbZmlkXSA9IE5VTEw7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgLyoqIEFwcGVuZCBpZiBPX0FQUEVORCBmbGFncyBpcyBzZXQgKi8NCisgICAgaWYgKGZsYWdzICYgT19BUFBFTkQpDQorICAgIHsNCisgICAgICAgIGZfbHNlZWsodG1wX2ZpbGVwLCBmX3NpemUodG1wX2ZpbGVwKSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZpZCArIFNURElPX0ZJRF9PRlM7IC8qIDAtMiBhcmUgc3RkaW4vc3Rkb3V0L3N0ZGVyciwgc28gcGx1cyAzICovDQorDQorI2Vsc2UgLyogTm8gRmlsZSBTeXN0ZW0gKi8NCisgICAgcmV0dXJuIC0xOw0KKyNlbmRpZg0KK30NCisNCisvKiogQ2xvc2luZyBGaWxlcyAqLw0KK2ludCBTWVNDQUxMX1BSRUZJWChfY2xvc2UpKGludCBoYW5kbGUpDQorew0KKyAgICBpZiAoaGFuZGxlIDwgU1RESU9fRklEX09GUykgICAvKiBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciAqLw0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyNpZmRlZiBNSURfRkFURlMNCisNCisgICAgaWYgKChoYW5kbGUgLSBTVERJT19GSURfT0ZTKSA+PSBFTUJBUkNfQ0ZHX01BWF9GSUxFSEFORExFUykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOyAvKiBObyBtb3JlIGF2YWlsYWJsZSBmaWxlIGhhbmRsZXIgKi8NCisgICAgfQ0KKw0KKyAgICBGSUwgKnRtcF9maWxlcDsgLyoqIHRlbXAgZmlsZSBoYW5kbGUgcG9pbnRlciAqLw0KKyAgICB0bXBfZmlsZXAgPSBmaWxlX2hhbmRsZXNbaGFuZGxlIC0gU1RESU9fRklEX09GU107DQorDQorICAgIGlmICh0bXBfZmlsZXApDQorICAgIHsNCisgICAgICAgIGZpbGVfaGFuZGxlc1toYW5kbGUgLSBTVERJT19GSURfT0ZTXSA9IE5VTEw7DQorICAgICAgICBGUkVTVUxUIHJlcyA9IGZfY2xvc2UodG1wX2ZpbGVwKTsNCisgICAgICAgIGZyZWUodG1wX2ZpbGVwKTsNCisNCisgICAgICAgIGlmIChyZXMpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisjZW5kaWYNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKiogUmVhZGluZyBGaWxlcyAqLw0KK2ludCBTWVNDQUxMX1BSRUZJWChfcmVhZCkoaW50IGhhbmRsZSwgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQ0KK3sNCisgICAgaWYgKGhhbmRsZSA8IFNURElPX0ZJRF9PRlMpDQorICAgIHsNCisgICAgICAgIGluaXRfc3RkaW9fc2VyaWFsKCk7DQorICAgICAgICByZXR1cm4gc3RkaW9fcmVhZChidWZmZXIsIGxlbmd0aCk7DQorICAgIH0NCisNCisjaWZkZWYgTUlEX0ZBVEZTDQorDQorICAgIGlmICgoaGFuZGxlIC0gU1RESU9fRklEX09GUykgPj0gRU1CQVJDX0NGR19NQVhfRklMRUhBTkRMRVMpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsgLyogTm8gbW9yZSBhdmFpbGFibGUgZmlsZSBoYW5kbGVyICovDQorICAgIH0NCisNCisgICAgRklMICp0bXBfZmlsZXA7IC8qKiB0ZW1wIGZpbGUgaGFuZGxlIHBvaW50ZXIgKi8NCisgICAgdG1wX2ZpbGVwID0gZmlsZV9oYW5kbGVzW2hhbmRsZSAtIFNURElPX0ZJRF9PRlNdOw0KKw0KKyAgICBpZiAodG1wX2ZpbGVwKQ0KKyAgICB7DQorICAgICAgICBVSU5UIGJyOw0KKyAgICAgICAgRlJFU1VMVCByZXMgPSBmX3JlYWQodG1wX2ZpbGVwLCAodm9pZCAqKWJ1ZmZlciwgKFVJTlQpbGVuZ3RoLCAmYnIpOw0KKw0KKyAgICAgICAgaWYgKHJlcykNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICByZXR1cm4gKGludClicjsNCisgICAgfQ0KKw0KKyNlbmRpZg0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8qKiBXcml0aW5nIEZpbGVzICovDQoraW50IFNZU0NBTExfUFJFRklYKF93cml0ZSkoaW50IGhhbmRsZSwgY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQ0KK3sNCisgICAgaWYgKGhhbmRsZSA8IFNURElPX0ZJRF9PRlMpDQorICAgIHsNCisgICAgICAgIGluaXRfc3RkaW9fc2VyaWFsKCk7DQorICAgICAgICByZXR1cm4gc3RkaW9fd3JpdGUoYnVmZmVyLCBsZW5ndGgpOw0KKyAgICB9DQorDQorI2lmZGVmIE1JRF9GQVRGUw0KKw0KKyAgICBpZiAoKGhhbmRsZSAtIFNURElPX0ZJRF9PRlMpID49IEVNQkFSQ19DRkdfTUFYX0ZJTEVIQU5ETEVTKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7IC8qIE5vIG1vcmUgYXZhaWxhYmxlIGZpbGUgaGFuZGxlciAqLw0KKyAgICB9DQorDQorICAgIEZJTCAqdG1wX2ZpbGVwOyAvKiogdGVtcCBmaWxlIGhhbmRsZSBwb2ludGVyICovDQorICAgIHRtcF9maWxlcCA9IGZpbGVfaGFuZGxlc1toYW5kbGUgLSBTVERJT19GSURfT0ZTXTsNCisNCisgICAgaWYgKHRtcF9maWxlcCkNCisgICAgew0KKyAgICAgICAgVUlOVCBidzsNCisgICAgICAgIEZSRVNVTFQgcmVzID0gZl93cml0ZSh0bXBfZmlsZXAsICh2b2lkICopYnVmZmVyLCAoVUlOVClsZW5ndGgsICZidyk7DQorDQorICAgICAgICBpZiAocmVzKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHJldHVybiAoaW50KWJ3Ow0KKyAgICB9DQorDQorI2VuZGlmDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqIFNlZWtpbmcgdG8gYSBMb2NhdGlvbiBpbiBhIEZpbGUgKi8NCitsb25nIFNZU0NBTExfUFJFRklYKF9sc2VlaykoaW50IGhhbmRsZSwgbG9uZyBvZmZzZXQsIGludCBtZXRob2QpDQorew0KKyAgICBpZiAoaGFuZGxlIDwgU1RESU9fRklEX09GUykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisjaWZkZWYgTUlEX0ZBVEZTDQorDQorICAgIGlmICgoaGFuZGxlIC0gU1RESU9fRklEX09GUykgPj0gRU1CQVJDX0NGR19NQVhfRklMRUhBTkRMRVMpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsgLyogTm8gbW9yZSBhdmFpbGFibGUgZmlsZSBoYW5kbGVyICovDQorICAgIH0NCisNCisgICAgRklMICp0bXBfZmlsZXA7IC8qKiB0ZW1wIGZpbGUgaGFuZGxlIHBvaW50ZXIgKi8NCisgICAgdG1wX2ZpbGVwID0gZmlsZV9oYW5kbGVzW2hhbmRsZSAtIFNURElPX0ZJRF9PRlNdOw0KKw0KKyAgICBpZiAodG1wX2ZpbGVwKQ0KKyAgICB7DQorICAgICAgICBGUkVTVUxUIHJlczsNCisgICAgICAgIGxvbmcgb2ZzID0gb2Zmc2V0Ow0KKw0KKyAgICAgICAgaWYgKG1ldGhvZCA9PSBTRUVLX0NVUikNCisgICAgICAgIHsNCisgICAgICAgICAgICBvZnMgPSAobG9uZylmX3RlbGwodG1wX2ZpbGVwKSArIG9mZnNldDsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PSBTRUVLX0VORCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBvZnMgPSAobG9uZylmX3NpemUodG1wX2ZpbGVwKSArIG9mZnNldDsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChvZnMgPj0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXMgPSBmX2xzZWVrKHRtcF9maWxlcCwgKERXT1JEKW9mcyk7DQorDQorICAgICAgICAgICAgaWYgKHJlcykgeyByZXR1cm4gLTE7IH0NCisNCisgICAgICAgICAgICByZXR1cm4gZl90ZWxsKHRtcF9maWxlcCk7DQorICAgICAgICB9DQorDQorICAgIH0NCisNCisjZW5kaWYNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKiogVGVzdGluZyBGaWxlIEFjY2VzcyAqLw0KK2ludCBTWVNDQUxMX1BSRUZJWChfYWNjZXNzKShjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZSkNCit7DQorI2lmZGVmIE1JRF9GQVRGUw0KKyAgICBGUkVTVUxUIHJlcyA9IGZfc3RhdCgoY29uc3QgVENIQVIgKiluYW1lLCBOVUxMKTsNCisNCisgICAgaWYgKHJlcykgeyByZXR1cm4gLTE7IH0NCisNCisgICAgcmV0dXJuIDA7DQorI2VuZGlmDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqIFRlc3RpbmcgZm9yIGFuIEludGVyYWN0aXZlIERpc3BsYXkgRGV2aWNlICovDQoraW50IFNZU0NBTExfUFJFRklYKF9pc2F0dHkpKGludCBoYW5kbGUpDQorew0KKyAgICBpZiAoaGFuZGxlIDwgU1RESU9fRklEX09GUykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIDE7DQorICAgIH0NCisNCisjaWZkZWYgTUlEX0ZBVEZTDQorDQorICAgIGlmICgoaGFuZGxlIC0gU1RESU9fRklEX09GUykgPj0gRU1CQVJDX0NGR19NQVhfRklMRUhBTkRMRVMpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsgLyogTm8gbW9yZSBhdmFpbGFibGUgZmlsZSBoYW5kbGVyICovDQorICAgIH0NCisNCisgICAgRklMICp0bXBfZmlsZXA7IC8qKiB0ZW1wIGZpbGUgaGFuZGxlIHBvaW50ZXIgKi8NCisgICAgdG1wX2ZpbGVwID0gZmlsZV9oYW5kbGVzW2hhbmRsZSAtIFNURElPX0ZJRF9PRlNdOw0KKw0KKyAgICBpZiAodG1wX2ZpbGVwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyNlbmRpZg0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8qKiBVbmxpbmsgRmlsZXMgKi8NCitpbnQgU1lTQ0FMTF9QUkVGSVgoX3VubGluaykoY29uc3QgY2hhciAqcGF0aCkNCit7DQorI2lmZGVmIE1JRF9GQVRGUw0KKw0KKyAgICBpZiAoZl91bmxpbmsoKGNvbnN0IFRDSEFSICopcGF0aCkgPT0gRlJfT0spDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorI2VuZGlmDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqIFJlbmFtaW5nIEZpbGVzICovDQoraW50IFNZU0NBTExfUFJFRklYKHJlbmFtZSkoY29uc3QgY2hhciAqb2xkLCBjb25zdCBjaGFyICpuZXcpDQorew0KKyNpZmRlZiBNSURfRkFURlMNCisNCisgICAgaWYgKGZfcmVuYW1lKChjb25zdCBUQ0hBUiAqKW9sZCwgKGNvbnN0IFRDSEFSICopbmV3KSA9PSBGUl9PSykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisjZW5kaWYNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKiogUmVtb3ZlIERpcmVjdG9yeSAqLw0KK2ludCBTWVNDQUxMX1BSRUZJWChfcm1kaXIpKGNvbnN0IGNoYXIgKnBhdGhuYW1lKQ0KK3sNCisgICAgcmV0dXJuIFNZU0NBTExfUFJFRklYKF91bmxpbmspKHBhdGhuYW1lKTsNCit9DQorDQorLyoqIFN0YXR1cyBvZiBhIGZpbGUgKGJ5IG5hbWUpLiAqLw0KK2ludCBTWVNDQUxMX1BSRUZJWChfc3RhdCkoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKmJ1ZikNCit7DQorICAgIGlmICghYnVmKSB7IHJldHVybiAtMTsgfQ0KKw0KKyNpZmRlZiBNSURfRkFURlMNCisgICAgRklMSU5GTyBmbm87DQorDQorI2lmIF9VU0VfTEZODQorICAgIGZuby5sZm5hbWUgPSBOVUxMOw0KKyAgICBmbm8ubGZzaXplID0gMDsNCisjZW5kaWYNCisNCisgICAgaWYgKGZfc3RhdCgoY29uc3QgVENIQVIgKilwYXRoLCAmZm5vKSA9PSBGUl9PSykNCisgICAgew0KKyAgICAgICAgaWYgKGZuby5mYXR0cmliICYgQU1fRElSKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJ1Zi0+c3RfbW9kZSA9IFNfSUZESVI7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgYnVmLT5zdF9tb2RlID0gU19JRlJFRzsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJ1Zi0+c3Rfc2l6ZSA9IGZuby5mc2l6ZTsNCisgICAgICAgIGJ1Zi0+c3RfbXRpbWUgPSBmbm8uZnRpbWU7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyNlbmRpZg0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8qKiBTdGF0dXMgb2YgYSBmaWxlIChieSBuYW1lKS4gKi8NCitpbnQgU1lTQ0FMTF9QUkVGSVgoX2xzdGF0KShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqYnVmKQ0KK3sNCisgICAgcmV0dXJuIFNZU0NBTExfUFJFRklYKF9zdGF0KShwYXRoLCBidWYpOw0KK30NCisNCisvKiogU3RhdHVzIG9mIGFuIG9wZW4gZmlsZSAqLw0KKy8qKiBcdG9kbyBmc3RhdCBuZWVkIG1vcmUgd29yayB0byBwcm92aWRlIGNvcnJlY3QgZmlsZSBzdGF0ICovDQoraW50IFNZU0NBTExfUFJFRklYKF9mc3RhdCkoaW50IGhhbmRsZSwgc3RydWN0IHN0YXQgKmJ1ZikNCit7DQorICAgIGlmICghYnVmKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICBpZiAoaGFuZGxlIDwgU1RESU9fRklEX09GUykNCisgICAgew0KKyAgICAgICAgYnVmLT5zdF9tb2RlID0gU19JRkNIUjsNCisgICAgICAgIGJ1Zi0+c3RfYmxrc2l6ZSA9IDE7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICAvKiogQ2FuJ3QgcHJvdmlkZSB1bml4IGZpbGUgc3RhdCB1c2luZyBmYXRmcyBBUEkgKi8NCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLyBEaXJlY3RvcnkgSWRlbnRpZmljYXRpb24gLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvKiogRGV0ZXJtaW5pbmcgdGhlIEN1cnJlbnQgRGlyZWN0b3J5ICovDQorY2hhciAqU1lTQ0FMTF9QUkVGSVgoX2dldGN3ZCkoY2hhciAqYnVmLCBpbnQgbGVuKQ0KK3sNCisjaWZkZWYgTUlEX0ZBVEZTDQorDQorICAgIGlmIChmX2dldGN3ZCgoVENIQVIgKilidWYsIChVSU5UKWxlbikgPT0gRlJfT0spDQorICAgIHsNCisgICAgICAgIHJldHVybiBidWY7DQorICAgIH0NCisNCisjZW5kaWYNCisgICAgcmV0dXJuIE5VTEw7DQorfQ0KKw0KKyNpZmRlZiBfX0dOVV9fDQorY2hhciAqU1lTQ0FMTF9QUkVGSVgoZ2V0Y3dkKShjaGFyICpidWYsIGludCBsZW4pDQorew0KKyAgICByZXR1cm4gU1lTQ0FMTF9QUkVGSVgoX2dldGN3ZCkoYnVmLCBsZW4pOw0KK30NCisjZW5kaWYNCisNCisjaWYgX19NV19fDQorI3ByYWdtYSB3ZWFrIG9wZW4gPSBfb3Blbg0KKyNwcmFnbWEgd2VhayBjbG9zZSA9IF9jbG9zZQ0KKyNwcmFnbWEgd2VhayByZWFkID0gX3JlYWQNCisjcHJhZ21hIHdlYWsgd3JpdGUgPSBfd3JpdGUNCisjcHJhZ21hIHdlYWsgbHNlZWsgPSBfbHNlZWsNCisjcHJhZ21hIHdlYWsgdW5saW5rID0gX3VubGluaw0KKyNwcmFnbWEgd2VhayBnZXRjd2QgPSBfZ2V0Y3dkDQorI3ByYWdtYSB3ZWFrIGlzYXR0eSA9IF9pc2F0dHkNCisjcHJhZ21hIHdlYWsgZ2V0cGlkID0gX2dldHBpZA0KKyNwcmFnbWEgd2VhayBhY2Nlc3MgPSBfYWNjZXNzDQorI3ByYWdtYSB3ZWFrIHJlbW92ZSA9IF91bmxpbmsNCisNCisjcHJhZ21hIHdlYWsgZnN0YXQgPSBfZnN0YXQNCisjcHJhZ21hIHdlYWsgc3RhdCA9IF9zdGF0DQorI3ByYWdtYSB3ZWFrIGxzdGF0ID0gX2xzdGF0DQorDQorI2VuZGlmDQorDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vIFByb2Nlc3MgTWFuYWdlbWVudCAgICAgICAgICAgICAgICAgLy8NCisvLyBcdG9kbyBJbnRlZ3JhdGUgd2l0aCBGcmVlUlRPUyB0YXNrIC8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8qKiBEZXRlcm1pbmluZyBhIFByb2Nlc3MgSUQgKi8NCitpbnQgU1lTQ0FMTF9QUkVGSVgoX2dldHBpZCkodm9pZCkNCit7DQorICAgIHJldHVybiAwOw0KK30NCisNCitleHRlcm4gdm9pZCBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpIF9leGl0X2xvb3AoKTsNCisNCisvKiogVGVybWluYXRpbmcgYSBQcm9jZXNzICovDQordm9pZCBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpIFNZU0NBTExfUFJFRklYKF9leGl0KShpbnQgc3RhdHVzKQ0KK3sNCisgICAgX2V4aXRfbG9vcChzdGF0dXMpOw0KK30NCisNCisvKiogS2lsbCBhIHByb2Nlc3MgKi8NCitpbnQgU1lTQ0FMTF9QUkVGSVgoX2tpbGwpKGludCBwaWQsIGludCBzaWcpDQorew0KKyAgICBTWVNDQUxMX1BSRUZJWChfZXhpdCkoc2lnKTsNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vIEVudmlyb25tZW50IElkZW50aWZpY2F0aW9uIC8vDQorLy8gTm8gZW52aXJvbm1lbnQgcHJvdmlkZWQgICAgLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KK3N0YXRpYyBjaGFyICpzZXR0aW5nc1tfRU5WSVJPTl9MRU5dID0NCit7DQorICAgIC8qDQorICAgICAqIEFkZCB5b3VyIGRlZmF1bHQgZW52aXJvbm1lbnQgaGVyZToNCisgICAgICovDQorICAgICJQTEFURk9STT1FTUJBUkMiLA0KKyAgICAiUE9TSVhMWV9DT1JSRUNUIiwNCisgICAgMA0KK307DQorDQorY2hhciAqKl9lbnZpcm9uID0gc2V0dGluZ3M7DQorDQorLyoqIEdldHRpbmcgRW52aXJvbm1lbnQgVmFyaWFibGVzICovDQorY2hhciAqU1lTQ0FMTF9QUkVGSVgoX2dldGVudikoY29uc3QgY2hhciAqdmFyKQ0KK3sNCisgICAgaW50IGxlbjsNCisgICAgY2hhciAqKmVwOw0KKw0KKyAgICBpZiAoIShlcCA9IF9lbnZpcm9uKSkgeyByZXR1cm4gTlVMTDsgfQ0KKw0KKyAgICBsZW4gPSBzdHJsZW4odmFyKTsNCisNCisgICAgd2hpbGUgKCplcCkNCisgICAgew0KKyAgICAgICAgaWYgKG1lbWNtcCh2YXIsICplcCwgbGVuKSA9PSAwICYmICgqZXApW2xlbl0gPT0gJz0nKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAqZXAgKyBsZW4gKyAxOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZXArKzsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gTlVMTDsNCit9DQorDQorLyoqIFB1dHRpbmcgRW52aXJvbm1lbnQgVmFyaWFibGUgKi8NCitpbnQgU1lTQ0FMTF9QUkVGSVgoX3B1dGVudikoY2hhciAqc3RyaW5nKQ0KK3sNCisgICAgaW50IGksIGxlbjsNCisNCisgICAgZm9yIChsZW4gPSAwOyBzdHJpbmdbbGVuXSAmJiBzdHJpbmdbbGVuXSAhPSAnPSc7IGxlbisrKTsNCisNCisgICAgZm9yIChpID0gMDsgaSA8IF9FTlZJUk9OX0xFTjsgaSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAoX2Vudmlyb25baV0gIT0gMCAmJiBzdHJuY21wKHN0cmluZywgX2Vudmlyb25baV0sIGxlbikgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBfZW52aXJvbltpXSA9IHN0cmluZzsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgX0VOVklST05fTEVOOyBpKyspDQorICAgIHsNCisgICAgICAgIGlmIChfZW52aXJvbltpXSA9PSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF9lbnZpcm9uW2ldID0gc3RyaW5nOw0KKw0KKyAgICAgICAgICAgIGlmICgoaSArIDEpIDwgX0VOVklST05fTEVOKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgX2Vudmlyb25baSArIDFdID0gTlVMTDsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisjaWYgX19NV19fDQorY2hhciAqX213Z2V0ZW52Mihjb25zdCBjaGFyICp2YXIpDQorew0KKyAgICByZXR1cm4gU1lTQ0FMTF9QUkVGSVgoX2dldGVudikodmFyKTsNCit9DQorI3ByYWdtYSB3ZWFrIGdldGVudiA9IF9nZXRlbnYNCisjcHJhZ21hIHdlYWsgcHV0ZW52ID0gX3B1dGVudg0KKyNlbmRpZg0KKw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLyBUaW1lIENhbGN1bGF0aW9uIC8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKw0KKy8qKiBEZXRlcm1pbmluZyB0aGUgQ2xvY2sgVmFsdWUgKi8NCitjbG9ja190IFNZU0NBTExfUFJFRklYKGNsb2NrKSh2b2lkKQ0KK3sNCisgICAgdWludDY0X3QgdG90YWxfdGlja3M7DQorDQorICAgIHRvdGFsX3RpY2tzID0gKHVpbnQ2NF90KU9TUF9HRVRfQ1VSX0hXVElDS1MoKTsNCisNCisgICAgcmV0dXJuIChjbG9ja190KSgodWludDY0X3QpKHRvdGFsX3RpY2tzICogQ0xPQ0tTX1BFUl9TRUMpIC8gQk9BUkRfQ1BVX0NMT0NLKTsNCit9DQorDQorI2lmICFFTUJBUkNfQ0ZHX1VTRV9SVENUSU1FDQorc3RhdGljIGludCBidWlsZHRpbWVfcmVhZHkgPSAwOw0KK3N0YXRpYyBzdHJ1Y3QgdG0gYnVpbGRfdG07DQorc3RhdGljIHRpbWVfdCBidWlsZF90aW1lOw0KKyNlbmRpZg0KKy8qKiBEZXRlcm1pbmluZyB0aGUgVGltZSBWYWx1ZSAqLw0KK3RpbWVfdCBTWVNDQUxMX1BSRUZJWChfdGltZSkodGltZV90ICp0aW1lcikNCit7DQorICAgIGlmICghYnVpbGR0aW1lX3JlYWR5KQ0KKyAgICB7DQorICAgICAgICBidWlsZF90aW1lID0gZ2V0X2J1aWxkX3RpbWVkYXRlKCZidWlsZF90bSk7DQorICAgICAgICBidWlsZHRpbWVfcmVhZHkgPSAxOw0KKyAgICB9DQorDQorICAgIHRpbWVfdCBjdXJfdGltZTsNCisgICAgY3VyX3RpbWUgPSBidWlsZF90aW1lICsgKE9TUF9HRVRfQ1VSX01TKCkgLyAxMDAwKTsNCisNCisgICAgaWYgKHRpbWVyKQ0KKyAgICB7DQorICAgICAgICAqdGltZXIgPSBjdXJfdGltZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gY3VyX3RpbWU7DQorfQ0KKw0KKyNpZmRlZiBfX0dOVV9fDQoraW50IFNZU0NBTExfUFJFRklYKF90aW1lcykoc3RydWN0IHRtcyAqYnVmKQ0KK3sNCisgICAgaWYgKCFidWYpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGJ1Zi0+dG1zX3V0aW1lID0gT1NQX0dFVF9DVVJfTVMoKSAvIDEwMDA7DQorICAgIGJ1Zi0+dG1zX3N0aW1lID0gMDsNCisgICAgYnVmLT50bXNfY3V0aW1lID0gMDsNCisgICAgYnVmLT50bXNfY3N0aW1lID0gMDsNCisgICAgcmV0dXJuIDA7DQorfQ0KKyNlbmRpZg0KKw0KK2ludCBTWVNDQUxMX1BSRUZJWChfZ2V0dGltZW9mZGF5KShzdHJ1Y3QgdGltZXZhbCAqdHYsIHZvaWQgKnR6KQ0KK3sNCisgICAgaWYgKHR2ID09IE5VTEwpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGlmICghYnVpbGR0aW1lX3JlYWR5KQ0KKyAgICB7DQorICAgICAgICBidWlsZF90aW1lID0gZ2V0X2J1aWxkX3RpbWVkYXRlKCZidWlsZF90bSk7DQorICAgICAgICBidWlsZHRpbWVfcmVhZHkgPSAxOw0KKyAgICB9DQorDQorICAgIHR2LT50dl9zZWMgPSBidWlsZF90aW1lICsgKE9TUF9HRVRfQ1VSX1VTKCkgLyAxMDAwMDAwKTsNCisgICAgdHYtPnR2X3VzZWMgPSBPU1BfR0VUX0NVUl9VUygpICUgMTAwMDAwMDsNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKyNpZiBfX01XX18NCisjcHJhZ21hIHdlYWsgdGltZSA9IF90aW1lDQorI3ByYWdtYSB3ZWFrIGdldHRpbWVvZmRheSA9IF9nZXR0aW1lb2ZkYXkNCisjZW5kaWYNCisNCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8gQXJndW1lbnQgUHJvY2Vzc2luZyAvLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvKiogQ291bnRpbmcgQXJndW1lbnRzICovDQoraW50IFNZU0NBTExfUFJFRklYKF9fYXJnYykodm9pZCkNCit7DQorICAgIHJldHVybiAwOw0KK30NCisvKiogRmluZGluZyB0aGUgVmFsdWUgb2YgYW4gQXJndW1lbnQgKi8NCitjaGFyICpTWVNDQUxMX1BSRUZJWChfX2FyZ3YpKGludCBudW0pDQorew0KKyAgICByZXR1cm4gTlVMTDsNCit9DQorDQorI2VuZGlmIC8qICFkZWZpbmVkKF9IT1NUTElOS18pICovDQorDQorI2lmIGRlZmluZWQoX19HTlVfXykgJiYgIWRlZmluZWQoX0hBVkVfTElCR0xPU1NfKSAmJiAhZGVmaW5lZChfSE9TVExJTktfKQ0KKy8qIFN1cHBvcnQgbmV3bGliYyBmb3IgbmV3bGliYyg8PSBBUkMgR05VIDIwMTUuMDYpICovDQordHlwZWRlZiBzdHJ1Y3QgZXhjX2ZyYW1lDQorew0KKyAgICB1aW50MzJfdCBlcmJ0YTsNCisgICAgdWludDMyX3QgZXJldDsNCisgICAgdWludDMyX3QgZXJzdGF0dXM7DQorICAgIHVpbnQzMl90IGxwY291bnQ7DQorICAgIHVpbnQzMl90IGxwZW5kOw0KKyAgICB1aW50MzJfdCBscHN0YXJ0Ow0KKyAgICB1aW50MzJfdCBibGluazsNCisgICAgdWludDMyX3QgcjMwOw0KKyAgICB1aW50MzJfdCBpbGluazsNCisgICAgdWludDMyX3QgZnA7DQorICAgIHVpbnQzMl90IGdwOw0KKyAgICB1aW50MzJfdCByMTI7DQorICAgIHVpbnQzMl90IHIxMTsNCisgICAgdWludDMyX3QgcjEwOw0KKyAgICB1aW50MzJfdCByOTsNCisgICAgdWludDMyX3Qgcjg7DQorICAgIHVpbnQzMl90IHI3Ow0KKyAgICB1aW50MzJfdCByNjsNCisgICAgdWludDMyX3QgcjU7DQorICAgIHVpbnQzMl90IHI0Ow0KKyAgICB1aW50MzJfdCByMzsNCisgICAgdWludDMyX3QgcjI7DQorICAgIHVpbnQzMl90IHIxOw0KKyAgICB1aW50MzJfdCByMDsNCit9IEVYQ19GUkFNRTsNCisvKioNCisgKiBcYnJpZWYgc3lzY2FsbCBmdW5jdGlvbnMNCisgKiAgICAgICAgcGFydGx5IGltcGxlbWVudGVkIGZvciBnbnUgaW4gc3dpIGV4Y2VwdGlvbiBoYW5kbGVyDQorICogXHBhcmFtIHB0ciBleGNlcHRpb24gaGFuZGxlIHN0YWNrIHBvaW50ZXINCisgKi8NCit2b2lkIHN5c2NhbGxfc3dpKHZvaWQgKnB0cikNCit7DQorICAgIEVYQ19GUkFNRSAqc3dpX2ZyYW1lID0gKEVYQ19GUkFNRSAqKXB0cjsNCisNCisgICAgc3dpdGNoIChzd2lfZnJhbWUtPnI4KQ0KKyAgICB7DQorICAgIGNhc2UgU1lTX3JlYWQ6DQorICAgICAgICBzd2lfZnJhbWUtPnIwID0gU1lTQ0FMTF9QUkVGSVgoX3JlYWQpKChpbnQpKHN3aV9mcmFtZS0+cjApLCAoY2hhciAqKShzd2lfZnJhbWUtPnIxKSwgKGludCkoc3dpX2ZyYW1lLT5yMikpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1lTX3dyaXRlOg0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IFNZU0NBTExfUFJFRklYKF93cml0ZSkoKGludCkoc3dpX2ZyYW1lLT5yMCksIChjaGFyICopKHN3aV9mcmFtZS0+cjEpLCAoaW50KShzd2lfZnJhbWUtPnIyKSk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTWVNfZXhpdDoNCisgICAgICAgIFNZU0NBTExfUFJFRklYKF9leGl0KSgxKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNZU19vcGVuOg0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IFNZU0NBTExfUFJFRklYKF9vcGVuKSgoY29uc3QgY2hhciAqKShzd2lfZnJhbWUtPnIwKSwgKGludCkoc3dpX2ZyYW1lLT5yMSksIChpbnQpKHN3aV9mcmFtZS0+cjIpKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNZU19jbG9zZToNCisgICAgICAgIHN3aV9mcmFtZS0+cjAgPSBTWVNDQUxMX1BSRUZJWChfY2xvc2UpKChpbnQpKHN3aV9mcmFtZS0+cjApKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNZU19sc2VlazoNCisgICAgICAgIHN3aV9mcmFtZS0+cjAgPSBTWVNDQUxMX1BSRUZJWChfbHNlZWspKChpbnQpKHN3aV9mcmFtZS0+cjApLCAobG9uZykoc3dpX2ZyYW1lLT5yMSksIChpbnQpKHN3aV9mcmFtZS0+cjIpKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNZU19mc3RhdDoNCisgICAgICAgIHN3aV9mcmFtZS0+cjAgPSBTWVNDQUxMX1BSRUZJWChfZnN0YXQpKChpbnQpKHN3aV9mcmFtZS0+cjApLCAoc3RydWN0IHN0YXQgKikoc3dpX2ZyYW1lLT5yMSkpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1lTX3VubGluazoNCisgICAgICAgIHN3aV9mcmFtZS0+cjAgPSBTWVNDQUxMX1BSRUZJWChfdW5saW5rKSgoY29uc3QgY2hhciAqKShzd2lfZnJhbWUtPnIwKSk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTWVNfdGltZToNCisgICAgICAgIHN3aV9mcmFtZS0+cjAgPSBTWVNDQUxMX1BSRUZJWChfdGltZSkoKHRpbWVfdCAqKShzd2lfZnJhbWUtPnIwKSk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTWVNfZ2V0dGltZW9mZGF5Og0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IFNZU0NBTExfUFJFRklYKF9nZXR0aW1lb2ZkYXkpKChzdHJ1Y3QgdGltZXZhbCAqKShzd2lfZnJhbWUtPnIwKSwgKHZvaWQgKikoc3dpX2ZyYW1lLT5yMSkpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1lTX2FjY2VzczoNCisgICAgICAgIHN3aV9mcmFtZS0+cjAgPSBTWVNDQUxMX1BSRUZJWChfYWNjZXNzKSgoY29uc3QgY2hhciAqKShzd2lfZnJhbWUtPnIwKSwgKGludCkoc3dpX2ZyYW1lLT5yMSkpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1lTX2tpbGw6DQorICAgICAgICBzd2lfZnJhbWUtPnIwID0gU1lTQ0FMTF9QUkVGSVgoX2tpbGwpKChpbnQpKHN3aV9mcmFtZS0+cjApLCAoaW50KShzd2lfZnJhbWUtPnIxKSk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTWVNfcmVuYW1lOg0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IFNZU0NBTExfUFJFRklYKHJlbmFtZSkoKGNvbnN0IGNoYXIgKikoc3dpX2ZyYW1lLT5yMCksIChjb25zdCBjaGFyICopKHN3aV9mcmFtZS0+cjEpKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNZU190aW1lczoNCisgICAgICAgIHN3aV9mcmFtZS0+cjAgPSBTWVNDQUxMX1BSRUZJWChfdGltZXMpKChzdHJ1Y3QgdG1zICopKHN3aV9mcmFtZS0+cjApKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNZU19nZXRjd2Q6DQorICAgICAgICBzd2lfZnJhbWUtPnIwID0gKHVpbnQzMl90KVNZU0NBTExfUFJFRklYKF9nZXRjd2QpKChjaGFyICopKHN3aV9mcmFtZS0+cjApLCAoaW50KShzd2lfZnJhbWUtPnIxKSk7DQorICAgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdDoNCisgICAgICAgIHN3aV9mcmFtZS0+cjAgPSAtMTsNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIHN3aV9mcmFtZS0+ZXJldCA9IHN3aV9mcmFtZS0+ZXJldCArIDQ7DQorfQ0KKyNlbmRpZiAvKiBfX0dOVV9fICYmICFfSEFWRV9MSUJHTE9TU18gJiYgX0hPU1RMSU5LXyAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3N5c2NhbGxzLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ19zeXNjYWxscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYWJmYTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ19zeXNjYWxscy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTYtMDEtMTgNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBFTUJBUkNfU1lTQ0FMTA0KKyAqIFxicmllZiBTeXNjYWxsIHN1cHBvcnQgaGVhZGVyIGZpbGUNCisgKi8NCisjaWZuZGVmIF9FTUJBUkNfU1lTQ0FMTFNfDQorI2RlZmluZSBfRU1CQVJDX1NZU0NBTExTXw0KKw0KKyNpbmNsdWRlICJlbWJBUkNfQlNQX2NvbmZpZy5oIg0KKyNpbmNsdWRlICJib2FyZC9ib2FyZC5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKF9fR05VX18pICYmICFkZWZpbmVkKF9IQVZFX0xJQkdMT1NTXykNCisvKiBfSEFWRV9MSUJHTE9TU18gaXMgZGVmaW5lZCBpbiBvcHRpb25zL3Rvb2xjaGFpbi90b29sY2hhaW5fZ251Lm1rICovDQorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+DQorI2RlZmluZSBTWVNDQUxMX1BSRUZJWCh4KSAgICAgICBzeXNjYWxsIyN4DQorDQorI2VuZGlmIC8qIF9fR05VX18gJiYgIV9IQVZFX0xJQkdMT1NTXyAqLw0KKw0KKyNpZm5kZWYgU1lTQ0FMTF9QUkVGSVgNCisjZGVmaW5lIFNZU0NBTExfUFJFRklYKHgpICAgICAgIHgNCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZChfX0dOVV9fKSAmJiAhZGVmaW5lZChfSEFWRV9MSUJHTE9TU18pICYmICFkZWZpbmVkKF9IT1NUTElOS18pDQorZXh0ZXJuIHZvaWQgc3lzY2FsbF9zd2kodm9pZCAqcHRyKTsNCisjZW5kaWYNCisNCisjaW5jbHVkZSAiZW1iQVJDX3RhcmdldC5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgIC8qIF9FTUJBUkNfU1lTQ0FMTFNfICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfdGFyZ2V0LmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ190YXJnZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGRmMGIzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfdGFyZ2V0LmMKQEAgLTAsMCArMSw4NCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNi0wMy0wMg0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPGN0eXBlLmg+DQorI2luY2x1ZGUgImVtYkFSQ19zeXNjYWxscy5oIg0KKw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vIE9USEVSIFJFUVVJUkVEIEZVTkNUSU9OUyAvLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKw0KK3N0YXRpYyBjb25zdCBjaGFyIHN6RW5nbGlzaE1vbnRoWzEyXVs0XSA9IHsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWciLCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07DQorDQordGltZV90IGdldF9idWlsZF90aW1lZGF0ZShzdHJ1Y3QgdG0gKmJ1aWxkX3RtKQ0KK3sNCisgICAgaWYgKCFidWlsZF90bSkgeyByZXR1cm4gMDsgfQ0KKw0KKyAgICBjaGFyIHN6TW9udGhbNV07DQorICAgIGludCB0bV95ZWFyLCB0bV9tb24gPSAwLCB0bV9kYXk7DQorICAgIGludCB0bV9ob3VyLCB0bV9taW4sIHRtX3NlYzsNCisgICAgdGltZV90IGJ1aWxkX3RpbWU7DQorDQorICAgIC8qKiBHZXQgQnVpbGQgRGF0ZSAqLw0KKyAgICBzc2NhbmYoX19EQVRFX18sICIlcyAlZCAlZCIsIHN6TW9udGgsICZ0bV9kYXksICZ0bV95ZWFyKSA7DQorDQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTI7IGkrKykNCisgICAgew0KKyAgICAgICAgaWYgKHN0cm5jbXAoc3pNb250aCwgc3pFbmdsaXNoTW9udGhbaV0sIDMpID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgdG1fbW9uID0gaTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICAvKiogR2V0IEJ1aWxkIFRpbWUgKi8NCisgICAgc3NjYW5mKF9fVElNRV9fLCAiJWQ6JWQ6JWQiLCAmdG1faG91ciwgJnRtX21pbiwgJnRtX3NlYyk7DQorICAgIGJ1aWxkX3RtLT50bV9zZWMgPSB0bV9zZWM7DQorICAgIGJ1aWxkX3RtLT50bV9taW4gPSB0bV9taW47DQorICAgIGJ1aWxkX3RtLT50bV9ob3VyID0gdG1faG91cjsNCisgICAgYnVpbGRfdG0tPnRtX21kYXkgPSB0bV9kYXk7DQorICAgIGJ1aWxkX3RtLT50bV9tb24gPSB0bV9tb247DQorICAgIGJ1aWxkX3RtLT50bV95ZWFyID0gdG1feWVhciAtIDE5MDA7DQorICAgIGJ1aWxkX3RtLT50bV9pc2RzdCA9IDA7DQorDQorICAgIGJ1aWxkX3RpbWUgPSBta3RpbWUoYnVpbGRfdG0pOw0KKyAgICByZXR1cm4gYnVpbGRfdGltZTsNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfdGFyZ2V0LmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ190YXJnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjUxYjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfdGFyZ2V0LmgKQEAgLTAsMCArMSw2NCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNi0wMy0wMg0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEVNQkFSQ19TWVNDQUxMDQorICogXGJyaWVmIENvbW1vbiBmdW5jdGlvbnMgcHJvdmlkZWQgZm9yIGVtYkFSQyB0YXJnZXQgcGxhdGZvcm0NCisgKi8NCisjaWZuZGVmIF9FTUJBUkNfVEFSR0VUX0hfDQorI2RlZmluZSBfRU1CQVJDX1RBUkdFVF9IXw0KKyNpbmNsdWRlICJlbWJBUkNfQlNQX2NvbmZpZy5oIg0KKyNpbmNsdWRlIDx0aW1lLmg+DQorI2luY2x1ZGUgPGxpbWl0cy5oPg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgUEFUSF9NQVgNCisjZGVmaW5lIFBBVEhfTUFYICAgIDQwOTYNCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZChfX01XX18pDQorI2luY2x1ZGUgInlhX2dldG9wdC5oIg0KKyNlbmRpZg0KKw0KK2V4dGVybiB0aW1lX3QgZ2V0X2J1aWxkX3RpbWVkYXRlKHN0cnVjdCB0bSAqYnVpbGRfdG0pOw0KK2V4dGVybiB2b2lkIGdudV9wcmludGZfc2V0dXAodm9pZCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAgLyogX0VNQkFSQ19UQVJHRVRfSF8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2ZhdGZzX2RpcmVudC5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9mYXRmc19kaXJlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTA1ZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9mYXRmc19kaXJlbnQuYwpAQCAtMCwwICsxLDEzMCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBGQVRGU19ESVJFQ1QsIElORkFURlNfRElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNi0wMS0yMA0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKyNpZmRlZiBNSURfRkFURlMNCisNCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlICJmYXRmc19kaXJlbnQuaCINCisNCitGQVRGU19ESVIgKm9wZW5kaXIoY29uc3QgY2hhciAqcGF0aCkNCit7DQorICAgIEZSRVNVTFQgcmVzOw0KKyAgICBGQVRGU19ESVIgKmRwOw0KKw0KKyAgICAvKiBNYWxsb2MgbWVtb3J5IGZvciBkaXIgb2JqZWN0ICovDQorICAgIGRwID0gKEZBVEZTX0RJUiAqKW1hbGxvYyhzaXplb2YoRkFURlNfRElSKSk7DQorDQorICAgIGlmICghZHApICAgLyogTm8gbW9yZSBtZW1vcnkgKi8NCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisNCisgICAgcmVzID0gZl9vcGVuZGlyKCZkcC0+ZGlyLCBwYXRoKTsNCisNCisgICAgaWYgKHJlcyAhPSBGUl9PSykNCisgICAgew0KKyAgICAgICAgZnJlZShkcCk7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gZHA7DQorfQ0KKw0KK2V4dGVybiBzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyKEZBVEZTX0RJUiAqZHApDQorew0KKyAgICBpZiAoIWRwKSB7IHJldHVybiBOVUxMOyB9DQorDQorICAgIEZSRVNVTFQgcmVzOw0KKyAgICBGSUxJTkZPIGluZm87DQorDQorI2lmIF9VU0VfTEZODQorICAgIGluZm8ubGZuYW1lID0gZHAtPmRfZGlyZW50LmRfbmFtZTsNCisgICAgaW5mby5sZnNpemUgPSBzaXplb2YoZHAtPmRfZGlyZW50LmRfbmFtZSk7DQorI2VuZGlmDQorICAgIHJlcyA9IGZfcmVhZGRpcigmZHAtPmRpciwgJmluZm8pOw0KKw0KKyAgICBpZiAocmVzICE9IEZSX09LIHx8IGluZm8uZm5hbWVbMF0gPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuICBOVUxMOw0KKyAgICB9DQorDQorI2lmIF9VU0VfTEZODQorDQorICAgIGlmICgqKGluZm8ubGZuYW1lKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBkcC0+ZF9kaXJlbnQuZF9uYW1sZW4gPSAxMzsgLyogOC4zIGZvcm1hdCAqLw0KKyAgICAgICAgbWVtY3B5KGRwLT5kX2RpcmVudC5kX25hbWUsIGluZm8uZm5hbWUsIDEzKTsNCisgICAgfQ0KKw0KKyNlbHNlDQorICAgIGRwLT5kX2RpcmVudC5kX25hbWxlbiA9IDEzOyAvKiA4LjMgZm9ybWF0ICovDQorICAgIG1lbWNweShkcC0+ZF9kaXJlbnQuZF9uYW1lLCBpbmZvLmZuYW1lLCAxMyk7DQorI2VuZGlmDQorDQorICAgIHJldHVybiAmKGRwLT5kX2RpcmVudCk7DQorfQ0KKw0KK2V4dGVybiBpbnQgY2xvc2VkaXIoRkFURlNfRElSICpkcCkNCit7DQorICAgIEZSRVNVTFQgcmVzOw0KKw0KKyAgICBpZiAoIWRwKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICByZXMgPSBmX2Nsb3NlZGlyKCZkcC0+ZGlyKTsNCisgICAgZnJlZShkcCk7DQorDQorICAgIGlmIChyZXMgIT0gRlJfT0spDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorDQorZXh0ZXJuIGludCBmYXRmc19zdGF0KGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBmYXRmc19zdGF0ICpidWYpDQorew0KKyAgICBGUkVTVUxUIHJlczsNCisNCisgICAgcmVzID0gZl9zdGF0KHBhdGgsICYoYnVmLT5mYXRmc19maWxpbmZvKSk7DQorDQorICAgIGlmIChyZXMgIT0gRlJfT0spDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBidWYtPnN0X21vZGUgPSBidWYtPmZhdGZzX2ZpbGluZm8uZmF0dHJpYjsNCisgICAgcmV0dXJuIDA7DQorfQ0KKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZmF0ZnNfZGlyZW50LmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2ZhdGZzX2RpcmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWM5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2ZhdGZzX2RpcmVudC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTYtMDEtMjANCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisjaWZuZGVmIF9GQVRGU19ESVJFTlRfSF8NCisjZGVmaW5lIF9GQVRGU19ESVJFTlRfSF8NCisNCisjaW5jbHVkZSAiYm9hcmQvYm9hcmQuaCINCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4NCisNCisjaWZuZGVmIE1JRF9GQVRGUw0KKyNlcnJvciAiRmF0RnMgc2hvdWxkIGJlIGVuYWJsZWQiDQorI2VuZGlmDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2lmIF9VU0VfTEZODQorI2RlZmluZSBNQVhOQU1MRU4gICBfTUFYX0xGTg0KKyNlbHNlDQorI2RlZmluZSBNQVhOQU1MRU4gICA2NA0KKyNlbmRpZg0KKw0KK3N0cnVjdCBmYXRmc19zdGF0DQorew0KKyAgICBGSUxJTkZPIGZhdGZzX2ZpbGluZm87DQorICAgIHVuc2lnbmVkIGNoYXIgc3RfbW9kZTsNCit9Ow0KKw0KK3N0cnVjdCBkaXJlbnQNCit7DQorICAgIHVuc2lnbmVkIHNob3J0IGRfbmFtbGVuOyAgICAgICAgLyogbGVuZ3RoIG9mIHN0cmluZyBpbiBkX25hbWUgKi8NCisgICAgY2hhciBkX25hbWVbTUFYTkFNTEVOICsgMV07ICAgICAvKiBuYW1lICh1cCB0byBNQVhOQU1MRU4gKyAxKSAqLw0KK307DQorDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIERJUiBkaXI7IC8qIEZhdEZTIERJUiBzdHJ1Y3QgKi8NCisgICAgc3RydWN0IGRpcmVudCBkX2RpcmVudDsNCit9IEZBVEZTX0RJUjsNCisNCitleHRlcm4gRkFURlNfRElSICpvcGVuZGlyKGNvbnN0IGNoYXIgKnBhdGgpOw0KK2V4dGVybiBzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyKEZBVEZTX0RJUiAqZHApOw0KK2V4dGVybiBpbnQgY2xvc2VkaXIoRkFURlNfRElSICpkcCk7DQorZXh0ZXJuIGludCBmYXRmc19zdGF0KGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBmYXRmc19zdGF0ICpidWYpOw0KKw0KKyNkZWZpbmUgRkFURlNfU19JU1JFRyhtKSAobSA9PSAwKQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLypfRkFURlNfRElSRU5UX0hfKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL21hbGxvYy5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9tYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzE0ZWVlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9tYWxsb2MuYwpAQCAtMCwwICsxLDcyODIgQEAKKyNpbmNsdWRlICJlbWJBUkNfQlNQX2NvbmZpZy5oIg0KKyNpZm5kZWYgX19HTlVfXw0KKy8qDQorICBUaGlzIGlzIGEgdmVyc2lvbiAoYWthIGRsbWFsbG9jKSBvZiBtYWxsb2MvZnJlZS9yZWFsbG9jIHdyaXR0ZW4gYnkNCisgIERvdWcgTGVhIGFuZCByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgYXMgZXhwbGFpbmVkIGF0DQorICBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvIFNlbmQgcXVlc3Rpb25zLA0KKyAgY29tbWVudHMsIGNvbXBsYWludHMsIHBlcmZvcm1hbmNlIGRhdGEsIGV0YyB0byBkbEBjcy5vc3dlZ28uZWR1DQorDQorKiBWZXJzaW9uIDIuOC42IFdlZCBBdWcgMjkgMDY6NTc6NTggMjAxMiAgRG91ZyBMZWENCisgICBOb3RlOiBUaGVyZSBtYXkgYmUgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jIG9idGFpbmFibGUgYXQNCisgICAgICAgICAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy5jDQorICAgICAgICAgQ2hlY2sgYmVmb3JlIGluc3RhbGxpbmchDQorDQorKiBRdWlja3N0YXJ0DQorDQorICBUaGlzIGxpYnJhcnkgaXMgYWxsIGluIG9uZSBmaWxlIHRvIHNpbXBsaWZ5IHRoZSBtb3N0IGNvbW1vbiB1c2FnZToNCisgIGZ0cCBpdCwgY29tcGlsZSBpdCAoLU8zKSwgYW5kIGxpbmsgaXQgaW50byBhbm90aGVyIHByb2dyYW0uIEFsbCBvZg0KKyAgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIGRlZmF1bHQgdG8gcmVhc29uYWJsZSB2YWx1ZXMgZm9yIHVzZSBvbg0KKyAgbW9zdCBwbGF0Zm9ybXMuICBZb3UgbWlnaHQgbGF0ZXIgd2FudCB0byBzdGVwIHRocm91Z2ggdmFyaW91cw0KKyAgY29tcGlsZS10aW1lIGFuZCBkeW5hbWljIHR1bmluZyBvcHRpb25zLg0KKw0KKyAgRm9yIGNvbnZlbmllbmNlLCBhbiBpbmNsdWRlIGZpbGUgZm9yIGNvZGUgdXNpbmcgdGhpcyBtYWxsb2MgaXMgYXQ6DQorICAgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MtMi44LjYuaA0KKyAgWW91IGRvbid0IHJlYWxseSBuZWVkIHRoaXMgLmggZmlsZSB1bmxlc3MgeW91IGNhbGwgZnVuY3Rpb25zIG5vdA0KKyAgZGVmaW5lZCBpbiB5b3VyIHN5c3RlbSBpbmNsdWRlIGZpbGVzLiAgVGhlIC5oIGZpbGUgY29udGFpbnMgb25seSB0aGUNCisgIGV4Y2VycHRzIGZyb20gdGhpcyBmaWxlIG5lZWRlZCBmb3IgdXNpbmcgdGhpcyBtYWxsb2Mgb24gQU5TSSBDL0MrKw0KKyAgc3lzdGVtcywgc28gbG9uZyBhcyB5b3UgaGF2ZW4ndCBjaGFuZ2VkIGNvbXBpbGUtdGltZSBvcHRpb25zIGFib3V0DQorICBuYW1pbmcgYW5kIHR1bmluZyBwYXJhbWV0ZXJzLiAgSWYgeW91IGRvLCB0aGVuIHlvdSBjYW4gY3JlYXRlIHlvdXINCisgIG93biBtYWxsb2MuaCB0aGF0IGRvZXMgaW5jbHVkZSBhbGwgc2V0dGluZ3MgYnkgY3V0dGluZyBhdCB0aGUgcG9pbnQNCisgIGluZGljYXRlZCBiZWxvdy4gTm90ZSB0aGF0IHlvdSBtYXkgYWxyZWFkeSBieSBkZWZhdWx0IGJlIHVzaW5nIGEgQw0KKyAgbGlicmFyeSBjb250YWluaW5nIGEgbWFsbG9jIHRoYXQgaXMgYmFzZWQgb24gc29tZSB2ZXJzaW9uIG9mIHRoaXMNCisgIG1hbGxvYyAoZm9yIGV4YW1wbGUgaW4gbGludXgpLiBZb3UgbWlnaHQgc3RpbGwgd2FudCB0byB1c2UgdGhlIG9uZQ0KKyAgaW4gdGhpcyBmaWxlIHRvIGN1c3RvbWl6ZSBzZXR0aW5ncyBvciB0byBhdm9pZCBvdmVyaGVhZHMgYXNzb2NpYXRlZA0KKyAgd2l0aCBsaWJyYXJ5IHZlcnNpb25zLg0KKw0KKyogVml0YWwgc3RhdGlzdGljczoNCisNCisgIFN1cHBvcnRlZCBwb2ludGVyL3NpemVfdCByZXByZXNlbnRhdGlvbjogICAgICAgNCBvciA4IGJ5dGVzDQorICAgICAgIHNpemVfdCBNVVNUIGJlIGFuIHVuc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMNCisgICAgICAgcG9pbnRlcnMuIChJZiB5b3UgYXJlIHVzaW5nIGFuIGFuY2llbnQgc3lzdGVtIHRoYXQgZGVjbGFyZXMNCisgICAgICAgc2l6ZV90IGFzIGEgc2lnbmVkIHR5cGUsIG9yIG5lZWQgaXQgdG8gYmUgYSBkaWZmZXJlbnQgd2lkdGgNCisgICAgICAgdGhhbiBwb2ludGVycywgeW91IGNhbiB1c2UgYSBwcmV2aW91cyByZWxlYXNlIG9mIHRoaXMgbWFsbG9jDQorICAgICAgIChlLmcuIDIuNy4yKSBzdXBwb3J0aW5nIHRoZXNlLikNCisNCisgIEFsaWdubWVudDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyAobWluaW11bSkNCisgICAgICAgVGhpcyBzdWZmaWNlcyBmb3IgbmVhcmx5IGFsbCBjdXJyZW50IG1hY2hpbmVzIGFuZCBDIGNvbXBpbGVycy4NCisgICAgICAgSG93ZXZlciwgeW91IGNhbiBkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCB0byBiZSB3aWRlciB0aGFuIHRoaXMNCisgICAgICAgaWYgbmVjZXNzYXJ5ICh1cCB0byAxMjhieXRlcyksIGF0IHRoZSBleHBlbnNlIG9mIHVzaW5nIG1vcmUgc3BhY2UuDQorDQorICBNaW5pbXVtIG92ZXJoZWFkIHBlciBhbGxvY2F0ZWQgY2h1bms6ICAgNCBvciAgOCBieXRlcyAoaWYgNGJ5dGUgc2l6ZXMpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCBvciAxNiBieXRlcyAoaWYgOGJ5dGUgc2l6ZXMpDQorICAgICAgIEVhY2ggbWFsbG9jZWQgY2h1bmsgaGFzIGEgaGlkZGVuIHdvcmQgb2Ygb3ZlcmhlYWQgaG9sZGluZyBzaXplDQorICAgICAgIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24sIGFuZCBhZGRpdGlvbmFsIGNyb3NzLWNoZWNrIHdvcmQNCisgICAgICAgaWYgRk9PVEVSUyBpcyBkZWZpbmVkLg0KKw0KKyAgTWluaW11bSBhbGxvY2F0ZWQgc2l6ZTogNC1ieXRlIHB0cnM6ICAxNiBieXRlcyAgICAoaW5jbHVkaW5nIG92ZXJoZWFkKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgOC1ieXRlIHB0cnM6ICAzMiBieXRlcyAgICAoaW5jbHVkaW5nIG92ZXJoZWFkKQ0KKw0KKyAgICAgICBFdmVuIGEgcmVxdWVzdCBmb3IgemVybyBieXRlcyAoaS5lLiwgbWFsbG9jKDApKSByZXR1cm5zIGENCisgICAgICAgcG9pbnRlciB0byBzb21ldGhpbmcgb2YgdGhlIG1pbmltdW0gYWxsb2NhdGFibGUgc2l6ZS4NCisgICAgICAgVGhlIG1heGltdW0gb3ZlcmhlYWQgd2FzdGFnZSAoaS5lLiwgbnVtYmVyIG9mIGV4dHJhIGJ5dGVzDQorICAgICAgIGFsbG9jYXRlZCB0aGFuIHdlcmUgcmVxdWVzdGVkIGluIG1hbGxvYykgaXMgbGVzcyB0aGFuIG9yIGVxdWFsDQorICAgICAgIHRvIHRoZSBtaW5pbXVtIHNpemUsIGV4Y2VwdCBmb3IgcmVxdWVzdHMgPj0gbW1hcF90aHJlc2hvbGQgdGhhdA0KKyAgICAgICBhcmUgc2VydmljZWQgdmlhIG1tYXAoKSwgd2hlcmUgdGhlIHdvcnN0IGNhc2Ugd2FzdGFnZSBpcyBhYm91dA0KKyAgICAgICAzMiBieXRlcyBwbHVzIHRoZSByZW1haW5kZXIgZnJvbSBhIHN5c3RlbSBwYWdlICh0aGUgbWluaW1hbA0KKyAgICAgICBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBvciA4MTkyIGJ5dGVzLg0KKw0KKyAgU2VjdXJpdHk6IHN0YXRpYy1zYWZlOyBvcHRpb25hbGx5IG1vcmUgb3IgbGVzcw0KKyAgICAgICBUaGUgInNlY3VyaXR5IiBvZiBtYWxsb2MgcmVmZXJzIHRvIHRoZSBhYmlsaXR5IG9mIG1hbGljaW91cw0KKyAgICAgICBjb2RlIHRvIGFjY2VudHVhdGUgdGhlIGVmZmVjdHMgb2YgZXJyb3JzIChmb3IgZXhhbXBsZSwgZnJlZWluZw0KKyAgICAgICBzcGFjZSB0aGF0IGlzIG5vdCBjdXJyZW50bHkgbWFsbG9jJ2VkIG9yIG92ZXJ3cml0aW5nIHBhc3QgdGhlDQorICAgICAgIGVuZHMgb2YgY2h1bmtzKSBpbiBjb2RlIHRoYXQgY2FsbHMgbWFsbG9jLiAgVGhpcyBtYWxsb2MNCisgICAgICAgZ3VhcmFudGVlcyBub3QgdG8gbW9kaWZ5IGFueSBtZW1vcnkgbG9jYXRpb25zIGJlbG93IHRoZSBiYXNlIG9mDQorICAgICAgIGhlYXAsIGkuZS4sIHN0YXRpYyB2YXJpYWJsZXMsIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHVzYWdlDQorICAgICAgIGVycm9ycy4gIFRoZSByb3V0aW5lcyBhZGRpdGlvbmFsbHkgZGV0ZWN0IG1vc3QgaW1wcm9wZXIgZnJlZXMNCisgICAgICAgYW5kIHJlYWxsb2NzLiAgQWxsIHRoaXMgaG9sZHMgYXMgbG9uZyBhcyB0aGUgc3RhdGljIGJvb2trZWVwaW5nDQorICAgICAgIGZvciBtYWxsb2MgaXRzZWxmIGlzIG5vdCBjb3JydXB0ZWQgYnkgc29tZSBvdGhlciBtZWFucy4gIFRoaXMNCisgICAgICAgaXMgb25seSBvbmUgYXNwZWN0IG9mIHNlY3VyaXR5IC0tIHRoZXNlIGNoZWNrcyBkbyBub3QsIGFuZA0KKyAgICAgICBjYW5ub3QsIGRldGVjdCBhbGwgcG9zc2libGUgcHJvZ3JhbW1pbmcgZXJyb3JzLg0KKw0KKyAgICAgICBJZiBGT09URVJTIGlzIGRlZmluZWQgbm9uemVybywgdGhlbiBlYWNoIGFsbG9jYXRlZCBjaHVuaw0KKyAgICAgICBjYXJyaWVzIGFuIGFkZGl0aW9uYWwgY2hlY2sgd29yZCB0byB2ZXJpZnkgdGhhdCBpdCB3YXMgbWFsbG9jZWQNCisgICAgICAgZnJvbSBpdHMgc3BhY2UuICBUaGVzZSBjaGVjayB3b3JkcyBhcmUgdGhlIHNhbWUgd2l0aGluIGVhY2gNCisgICAgICAgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbSB1c2luZyBtYWxsb2MsIGJ1dCBkaWZmZXIgYWNyb3NzDQorICAgICAgIGV4ZWN1dGlvbnMsIHNvIGV4dGVybmFsbHkgY3JhZnRlZCBmYWtlIGNodW5rcyBjYW5ub3QgYmUNCisgICAgICAgZnJlZWQuIFRoaXMgaW1wcm92ZXMgc2VjdXJpdHkgYnkgcmVqZWN0aW5nIGZyZWVzL3JlYWxsb2NzIHRoYXQNCisgICAgICAgY291bGQgY29ycnVwdCBoZWFwIG1lbW9yeSwgaW4gYWRkaXRpb24gdG8gdGhlIGNoZWNrcyBwcmV2ZW50aW5nDQorICAgICAgIHdyaXRlcyB0byBzdGF0aWNzIHRoYXQgYXJlIGFsd2F5cyBvbi4gIFRoaXMgbWF5IGZ1cnRoZXIgaW1wcm92ZQ0KKyAgICAgICBzZWN1cml0eSBhdCB0aGUgZXhwZW5zZSBvZiB0aW1lIGFuZCBzcGFjZSBvdmVyaGVhZC4gIChOb3RlIHRoYXQNCisgICAgICAgRk9PVEVSUyBtYXkgYWxzbyBiZSB3b3J0aCB1c2luZyB3aXRoIE1TUEFDRVMuKQ0KKw0KKyAgICAgICBCeSBkZWZhdWx0IGRldGVjdGVkIGVycm9ycyBjYXVzZSB0aGUgcHJvZ3JhbSB0byBhYm9ydCAoY2FsbGluZw0KKyAgICAgICAiYWJvcnQoKSIpLiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgdG8gaW5zdGVhZCBwcm9jZWVkIHBhc3QNCisgICAgICAgZXJyb3JzIGJ5IGRlZmluaW5nIFBST0NFRURfT05fRVJST1IuICBJbiB0aGlzIGNhc2UsIGEgYmFkIGZyZWUNCisgICAgICAgaGFzIG5vIGVmZmVjdCwgYW5kIGEgbWFsbG9jIHRoYXQgZW5jb3VudGVycyBhIGJhZCBhZGRyZXNzDQorICAgICAgIGNhdXNlZCBieSB1c2VyIG92ZXJ3cml0ZXMgd2lsbCBpZ25vcmUgdGhlIGJhZCBhZGRyZXNzIGJ5DQorICAgICAgIGRyb3BwaW5nIHBvaW50ZXJzIGFuZCBpbmRpY2VzIHRvIGFsbCBrbm93biBtZW1vcnkuIFRoaXMgbWF5DQorICAgICAgIGJlIGFwcHJvcHJpYXRlIGZvciBwcm9ncmFtcyB0aGF0IHNob3VsZCBjb250aW51ZSBpZiBhdCBhbGwNCisgICAgICAgcG9zc2libGUgaW4gdGhlIGZhY2Ugb2YgcHJvZ3JhbW1pbmcgZXJyb3JzLCBhbHRob3VnaCB0aGV5IG1heQ0KKyAgICAgICBydW4gb3V0IG9mIG1lbW9yeSBiZWNhdXNlIGRyb3BwZWQgbWVtb3J5IGlzIG5ldmVyIHJlY2xhaW1lZC4NCisNCisgICAgICAgSWYgeW91IGRvbid0IGxpa2UgZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMsIHlvdSBjYW4gZGVmaW5lDQorICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OIGFuZCBVU0FHRV9FUlJPUl9BQ1RJT04gdG8gZG8gYW55dGhpbmcNCisgICAgICAgZWxzZS4gQW5kIGlmIGlmIHlvdSBhcmUgc3VyZSB0aGF0IHlvdXIgcHJvZ3JhbSB1c2luZyBtYWxsb2MgaGFzDQorICAgICAgIG5vIGVycm9ycyBvciB2dWxuZXJhYmlsaXRpZXMsIHlvdSBjYW4gZGVmaW5lIElOU0VDVVJFIHRvIDEsDQorICAgICAgIHdoaWNoIG1pZ2h0IChvciBtaWdodCBub3QpIHByb3ZpZGUgYSBzbWFsbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4NCisNCisgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBsaW1pdCB0aGUgbWF4aW11bSB0b3RhbCBhbGxvY2F0YWJsZQ0KKyAgICAgICBzcGFjZSwgdXNpbmcgbWFsbG9jX3NldF9mb290cHJpbnRfbGltaXQuIFRoaXMgaXMgbm90DQorICAgICAgIGRlc2lnbmVkIGFzIGEgc2VjdXJpdHkgZmVhdHVyZSBpbiBpdHNlbGYgKGNhbGxzIHRvIHNldCBsaW1pdHMNCisgICAgICAgYXJlIG5vdCBzY3JlZW5lZCBvciBwcml2aWxlZ2VkKSwgYnV0IG1heSBiZSB1c2VmdWwgYXMgb25lDQorICAgICAgIGFzcGVjdCBvZiBhIHNlY3VyZSBpbXBsZW1lbnRhdGlvbi4NCisNCisgIFRocmVhZC1zYWZldHk6IE5PVCB0aHJlYWQtc2FmZSB1bmxlc3MgVVNFX0xPQ0tTIGRlZmluZWQgbm9uLXplcm8NCisgICAgICAgV2hlbiBVU0VfTE9DS1MgaXMgZGVmaW5lZCwgZWFjaCBwdWJsaWMgY2FsbCB0byBtYWxsb2MsIGZyZWUsDQorICAgICAgIGV0YyBpcyBzdXJyb3VuZGVkIHdpdGggYSBsb2NrLiBCeSBkZWZhdWx0LCB0aGlzIHVzZXMgYSBwbGFpbg0KKyAgICAgICBwdGhyZWFkIG11dGV4LCB3aW4zMiBjcml0aWNhbCBzZWN0aW9uLCBvciBhIHNwaW4tbG9jayBpZiBpZg0KKyAgICAgICBhdmFpbGFibGUgZm9yIHRoZSBwbGF0Zm9ybSBhbmQgbm90IGRpc2FibGVkIGJ5IHNldHRpbmcNCisgICAgICAgVVNFX1NQSU5fTE9DS1M9MC4gIEhvd2V2ZXIsIGlmIFVTRV9SRUNVUlNJVkVfTE9DS1MgaXMgZGVmaW5lZCwNCisgICAgICAgcmVjdXJzaXZlIHZlcnNpb25zIGFyZSB1c2VkIGluc3RlYWQgKHdoaWNoIGFyZSBub3QgcmVxdWlyZWQgZm9yDQorICAgICAgIGJhc2UgZnVuY3Rpb25hbGl0eSBidXQgbWF5IGJlIG5lZWRlZCBpbiBsYXllcmVkIGV4dGVuc2lvbnMpLg0KKyAgICAgICBVc2luZyBhIGdsb2JhbCBsb2NrIGlzIG5vdCBlc3BlY2lhbGx5IGZhc3QsIGFuZCBjYW4gYmUgYSBtYWpvcg0KKyAgICAgICBib3R0bGVuZWNrLiAgSXQgaXMgZGVzaWduZWQgb25seSB0byBwcm92aWRlIG1pbmltYWwgcHJvdGVjdGlvbg0KKyAgICAgICBpbiBjb25jdXJyZW50IGVudmlyb25tZW50cywgYW5kIHRvIHByb3ZpZGUgYSBiYXNpcyBmb3INCisgICAgICAgZXh0ZW5zaW9ucy4gIElmIHlvdSBhcmUgdXNpbmcgbWFsbG9jIGluIGEgY29uY3VycmVudCBwcm9ncmFtLA0KKyAgICAgICBjb25zaWRlciBpbnN0ZWFkIHVzaW5nIG5lZG1hbGxvYw0KKyAgICAgICAoaHR0cDovL3d3dy5uZWRwcm9kLmNvbS9wcm9ncmFtcy9wb3J0YWJsZS9uZWRtYWxsb2MvKSBvcg0KKyAgICAgICBwdG1hbGxvYyAoU2VlIGh0dHA6Ly93d3cubWFsbG9jLmRlKSwgd2hpY2ggYXJlIGRlcml2ZWQgZnJvbQ0KKyAgICAgICB2ZXJzaW9ucyBvZiB0aGlzIG1hbGxvYy4NCisNCisgIFN5c3RlbSByZXF1aXJlbWVudHM6IEFueSBjb21iaW5hdGlvbiBvZiBNT1JFQ09SRSBhbmQvb3IgTU1BUC9NVU5NQVANCisgICAgICAgVGhpcyBtYWxsb2MgY2FuIHVzZSB1bml4IHNicmsgb3IgYW55IGVtdWxhdGlvbiAoaW52b2tlZCB1c2luZw0KKyAgICAgICB0aGUgQ0FMTF9NT1JFQ09SRSBtYWNybykgYW5kL29yIG1tYXAvbXVubWFwIG9yIGFueSBlbXVsYXRpb24NCisgICAgICAgKGludm9rZWQgdXNpbmcgQ0FMTF9NTUFQL0NBTExfTVVOTUFQKSB0byBnZXQgYW5kIHJlbGVhc2Ugc3lzdGVtDQorICAgICAgIG1lbW9yeS4gIE9uIG1vc3QgdW5peCBzeXN0ZW1zLCBpdCB0ZW5kcyB0byB3b3JrIGJlc3QgaWYgYm90aA0KKyAgICAgICBNT1JFQ09SRSBhbmQgTU1BUCBhcmUgZW5hYmxlZC4gIE9uIFdpbjMyLCBpdCB1c2VzIGVtdWxhdGlvbnMNCisgICAgICAgYmFzZWQgb24gVmlydHVhbEFsbG9jLiBJdCBhbHNvIHVzZXMgY29tbW9uIEMgbGlicmFyeSBmdW5jdGlvbnMNCisgICAgICAgbGlrZSBtZW1zZXQuDQorDQorICBDb21wbGlhbmNlOiBJIGJlbGlldmUgaXQgaXMgY29tcGxpYW50IHdpdGggdGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24NCisgICAgICAgKFNlZSBodHRwOi8vd3d3LnVuaXgub3JnKS4gQWxzbyBTVklEL1hQRywgQU5TSSBDLCBhbmQgcHJvYmFibHkNCisgICAgICAgb3RoZXJzIGFzIHdlbGwuDQorDQorKiBPdmVydmlldyBvZiBhbGdvcml0aG1zDQorDQorICBUaGlzIGlzIG5vdCB0aGUgZmFzdGVzdCwgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBtb3N0IHBvcnRhYmxlLCBvcg0KKyAgbW9zdCB0dW5hYmxlIG1hbGxvYyBldmVyIHdyaXR0ZW4uIEhvd2V2ZXIgaXQgaXMgYW1vbmcgdGhlIGZhc3Rlc3QNCisgIHdoaWxlIGFsc28gYmVpbmcgYW1vbmcgdGhlIG1vc3Qgc3BhY2UtY29uc2VydmluZywgcG9ydGFibGUgYW5kDQorICB0dW5hYmxlLiAgQ29uc2lzdGVudCBiYWxhbmNlIGFjcm9zcyB0aGVzZSBmYWN0b3JzIHJlc3VsdHMgaW4gYSBnb29kDQorICBnZW5lcmFsLXB1cnBvc2UgYWxsb2NhdG9yIGZvciBtYWxsb2MtaW50ZW5zaXZlIHByb2dyYW1zLg0KKw0KKyAgSW4gbW9zdCB3YXlzLCB0aGlzIG1hbGxvYyBpcyBhIGJlc3QtZml0IGFsbG9jYXRvci4gR2VuZXJhbGx5LCBpdA0KKyAgY2hvb3NlcyB0aGUgYmVzdC1maXR0aW5nIGV4aXN0aW5nIGNodW5rIGZvciBhIHJlcXVlc3QsIHdpdGggdGllcw0KKyAgYnJva2VuIGluIGFwcHJveGltYXRlbHkgbGVhc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoaXMgc3RyYXRlZ3kNCisgIG5vcm1hbGx5IG1haW50YWlucyBsb3cgZnJhZ21lbnRhdGlvbi4pIEhvd2V2ZXIsIGZvciByZXF1ZXN0cyBsZXNzDQorICB0aGFuIDI1NmJ5dGVzLCBpdCBkZXZpYXRlcyBmcm9tIGJlc3QtZml0IHdoZW4gdGhlcmUgaXMgbm90IGFuDQorICBleGFjdGx5IGZpdHRpbmcgYXZhaWxhYmxlIGNodW5rIGJ5IHByZWZlcnJpbmcgdG8gdXNlIHNwYWNlIGFkamFjZW50DQorICB0byB0aGF0IHVzZWQgZm9yIHRoZSBwcmV2aW91cyBzbWFsbCByZXF1ZXN0LCBhcyB3ZWxsIGFzIGJ5IGJyZWFraW5nDQorICB0aWVzIGluIGFwcHJveGltYXRlbHkgbW9zdC1yZWNlbnRseS11c2VkIG9yZGVyLiAoVGhlc2UgZW5oYW5jZQ0KKyAgbG9jYWxpdHkgb2Ygc2VyaWVzIG9mIHNtYWxsIGFsbG9jYXRpb25zLikgIEFuZCBmb3IgdmVyeSBsYXJnZSByZXF1ZXN0cw0KKyAgKD49IDI1NktiIGJ5IGRlZmF1bHQpLCBpdCByZWxpZXMgb24gc3lzdGVtIG1lbW9yeSBtYXBwaW5nDQorICBmYWNpbGl0aWVzLCBpZiBzdXBwb3J0ZWQuICAoVGhpcyBoZWxwcyBhdm9pZCBjYXJyeWluZyBhcm91bmQgYW5kDQorICBwb3NzaWJseSBmcmFnbWVudGluZyBtZW1vcnkgdXNlZCBvbmx5IGZvciBsYXJnZSBjaHVua3MuKQ0KKw0KKyAgQWxsIG9wZXJhdGlvbnMgKGV4Y2VwdCBtYWxsb2Nfc3RhdHMgYW5kIG1hbGxpbmZvKSBoYXZlIGV4ZWN1dGlvbg0KKyAgdGltZXMgdGhhdCBhcmUgYm91bmRlZCBieSBhIGNvbnN0YW50IGZhY3RvciBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4NCisgIGEgc2l6ZV90LCBub3QgY291bnRpbmcgYW55IGNsZWFyaW5nIGluIGNhbGxvYyBvciBjb3B5aW5nIGluIHJlYWxsb2MsDQorICBvciBhY3Rpb25zIHN1cnJvdW5kaW5nIE1PUkVDT1JFIGFuZCBNTUFQIHRoYXQgaGF2ZSB0aW1lcw0KKyAgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2Ygbm9uLWNvbnRpZ3VvdXMgcmVnaW9ucyByZXR1cm5lZCBieQ0KKyAgc3lzdGVtIGFsbG9jYXRpb24gcm91dGluZXMsIHdoaWNoIGlzIG9mdGVuIGp1c3QgMS4gSW4gcmVhbC10aW1lDQorICBhcHBsaWNhdGlvbnMsIHlvdSBjYW4gb3B0aW9uYWxseSBzdXBwcmVzcyBzZWdtZW50IHRyYXZlcnNhbHMgdXNpbmcNCisgIE5PX1NFR01FTlRfVFJBVkVSU0FMLCB3aGljaCBhc3N1cmVzIGJvdW5kZWQgZXhlY3V0aW9uIGV2ZW4gd2hlbg0KKyAgc3lzdGVtIGFsbG9jYXRvcnMgcmV0dXJuIG5vbi1jb250aWd1b3VzIHNwYWNlcywgYXQgdGhlIHR5cGljYWwNCisgIGV4cGVuc2Ugb2YgY2FycnlpbmcgYXJvdW5kIG1vcmUgbWVtb3J5IGFuZCBpbmNyZWFzZWQgZnJhZ21lbnRhdGlvbi4NCisNCisgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdmVyeSBtb2R1bGFyIGFuZCBzZXJpb3VzbHkgb3ZlcnVzZXMNCisgIG1hY3Jvcy4gUGVyaGFwcyBzb21lZGF5IGFsbCBDIGNvbXBpbGVycyB3aWxsIGRvIGFzIGdvb2QgYSBqb2INCisgIGlubGluaW5nIG1vZHVsYXIgY29kZSBhcyBjYW4gbm93IGJlIGRvbmUgYnkgYnJ1dGUtZm9yY2UgZXhwYW5zaW9uLA0KKyAgYnV0IG5vdywgZW5vdWdoIG9mIHRoZW0gc2VlbSBub3QgdG8uDQorDQorICBTb21lIGNvbXBpbGVycyBpc3N1ZSBhIGxvdCBvZiB3YXJuaW5ncyBhYm91dCBjb2RlIHRoYXQgaXMNCisgIGRlYWQvdW5yZWFjaGFibGUgb25seSBvbiBzb21lIHBsYXRmb3JtcywgYW5kIGFsc28gYWJvdXQgaW50ZW50aW9uYWwNCisgIHVzZXMgb2YgbmVnYXRpb24gb24gdW5zaWduZWQgdHlwZXMuIEFsbCBrbm93biBjYXNlcyBvZiBlYWNoIGNhbiBiZQ0KKyAgaWdub3JlZC4NCisNCisgIEZvciBhIGxvbmdlciBidXQgb3V0IG9mIGRhdGUgaGlnaC1sZXZlbCBkZXNjcmlwdGlvbiwgc2VlDQorICAgICBodHRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvZGwvaHRtbC9tYWxsb2MuaHRtbA0KKw0KKyogTVNQQUNFUw0KKyAgSWYgTVNQQUNFUyBpcyBkZWZpbmVkLCB0aGVuIGluIGFkZGl0aW9uIHRvIG1hbGxvYywgZnJlZSwgZXRjLiwNCisgIHRoaXMgZmlsZSBhbHNvIGRlZmluZXMgbXNwYWNlX21hbGxvYywgbXNwYWNlX2ZyZWUsIGV0Yy4gVGhlc2UNCisgIGFyZSB2ZXJzaW9ucyBvZiBtYWxsb2Mgcm91dGluZXMgdGhhdCB0YWtlIGFuICJtc3BhY2UiIGFyZ3VtZW50DQorICBvYnRhaW5lZCB1c2luZyBjcmVhdGVfbXNwYWNlLCB0byBjb250cm9sIGFsbCBpbnRlcm5hbCBib29ra2VlcGluZy4NCisgIElmIE9OTFlfTVNQQUNFUyBpcyBkZWZpbmVkLCBvbmx5IHRoZXNlIHZlcnNpb25zIGFyZSBjb21waWxlZC4NCisgIFNvIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGlzIGFsbG9jYXRvciBmb3Igb25seSBzb21lIGFsbG9jYXRpb25zLA0KKyAgYW5kIHlvdXIgc3lzdGVtIG1hbGxvYyBmb3Igb3RoZXJzLCB5b3UgY2FuIGNvbXBpbGUgd2l0aA0KKyAgT05MWV9NU1BBQ0VTIGFuZCB0aGVuIGRvIHNvbWV0aGluZyBsaWtlLi4uDQorICAgIHN0YXRpYyBtc3BhY2UgbXltc3BhY2UgPSBjcmVhdGVfbXNwYWNlKDAsMCk7IC8vIGZvciBleGFtcGxlDQorICAgICNkZWZpbmUgbXltYWxsb2MoYnl0ZXMpICBtc3BhY2VfbWFsbG9jKG15bXNwYWNlLCBieXRlcykNCisNCisgIChOb3RlOiBJZiB5b3Ugb25seSBuZWVkIG9uZSBpbnN0YW5jZSBvZiBhbiBtc3BhY2UsIHlvdSBjYW4gaW5zdGVhZA0KKyAgdXNlICJVU0VfRExfUFJFRklYIiB0byByZWxhYmVsIHRoZSBnbG9iYWwgbWFsbG9jLikNCisNCisgIFlvdSBjYW4gc2ltaWxhcmx5IGNyZWF0ZSB0aHJlYWQtbG9jYWwgYWxsb2NhdG9ycyBieSBzdG9yaW5nDQorICBtc3BhY2VzIGFzIHRocmVhZC1sb2NhbHMuIEZvciBleGFtcGxlOg0KKyAgICBzdGF0aWMgX190aHJlYWQgbXNwYWNlIHRsbXMgPSAwOw0KKyAgICB2b2lkKiAgdGxtYWxsb2Moc2l6ZV90IGJ5dGVzKSB7DQorICAgICAgaWYgKHRsbXMgPT0gMCkgdGxtcyA9IGNyZWF0ZV9tc3BhY2UoMCwgMCk7DQorICAgICAgcmV0dXJuIG1zcGFjZV9tYWxsb2ModGxtcywgYnl0ZXMpOw0KKyAgICB9DQorICAgIHZvaWQgIHRsZnJlZSh2b2lkKiBtZW0pIHsgbXNwYWNlX2ZyZWUodGxtcywgbWVtKTsgfQ0KKw0KKyAgVW5sZXNzIEZPT1RFUlMgaXMgZGVmaW5lZCwgZWFjaCBtc3BhY2UgaXMgY29tcGxldGVseSBpbmRlcGVuZGVudC4NCisgIFlvdSBjYW5ub3QgYWxsb2NhdGUgZnJvbSBvbmUgYW5kIGZyZWUgdG8gYW5vdGhlciAoYWx0aG91Z2gNCisgIGNvbmZvcm1hbmNlIGlzIG9ubHkgd2Vha2x5IGNoZWNrZWQsIHNvIHVzYWdlIGVycm9ycyBhcmUgbm90IGFsd2F5cw0KKyAgY2F1Z2h0KS4gSWYgRk9PVEVSUyBpcyBkZWZpbmVkLCB0aGVuIGVhY2ggY2h1bmsgY2FycmllcyBhcm91bmQgYSB0YWcNCisgIGluZGljYXRpbmcgaXRzIG9yaWdpbmF0aW5nIG1zcGFjZSwgYW5kIGZyZWVzIGFyZSBkaXJlY3RlZCB0byB0aGVpcg0KKyAgb3JpZ2luYXRpbmcgc3BhY2VzLiBOb3JtYWxseSwgdGhpcyByZXF1aXJlcyB1c2Ugb2YgbG9ja3MuDQorDQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENvbXBpbGUtdGltZSBvcHRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK0JlIGNhcmVmdWwgaW4gc2V0dGluZyAjZGVmaW5lIHZhbHVlcyBmb3IgbnVtZXJpY2FsIGNvbnN0YW50cyBvZiB0eXBlDQorc2l6ZV90LiBPbiBzb21lIHN5c3RlbXMsIGxpdGVyYWwgdmFsdWVzIGFyZSBub3QgYXV0b21hdGljYWxseSBleHRlbmRlZA0KK3RvIHNpemVfdCBwcmVjaXNpb24gdW5sZXNzIHRoZXkgYXJlIGV4cGxpY2l0bHkgY2FzdGVkLiBZb3UgY2FuIGFsc28NCit1c2UgdGhlIHN5bWJvbGljIHZhbHVlcyBNQVhfU0laRV9ULCBTSVpFX1RfT05FLCBldGMgYmVsb3cuDQorDQorV0lOMzIgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgaWYgX1dJTjMyIGRlZmluZWQNCisgIERlZmluaW5nIFdJTjMyIHNldHMgdXAgZGVmYXVsdHMgZm9yIE1TIGVudmlyb25tZW50IGFuZCBjb21waWxlcnMuDQorICBPdGhlcndpc2UgZGVmYXVsdHMgYXJlIGZvciB1bml4LiBCZXdhcmUgdGhhdCB0aGVyZSBzZWVtIHRvIGJlIHNvbWUNCisgIGNhc2VzIHdoZXJlIHRoaXMgbWFsbG9jIG1pZ2h0IG5vdCBiZSBhIHB1cmUgZHJvcC1pbiByZXBsYWNlbWVudCBmb3INCisgIFdpbjMyIG1hbGxvYzogUmFuZG9tLWxvb2tpbmcgZmFpbHVyZXMgZnJvbSBXaW4zMiBHREkgQVBJJ3MgKGVnOw0KKyAgU2V0RElCaXRzKCkpIG1heSBiZSBkdWUgdG8gYnVncyBpbiBzb21lIHZpZGVvIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMNCisgIHdoZW4gcGl4ZWwgYnVmZmVycyBhcmUgbWFsbG9jKCllZCwgYW5kIHRoZSByZWdpb24gc3BhbnMgbW9yZSB0aGFuDQorICBvbmUgVmlydHVhbEFsbG9jKCllZCByZWdpb24uIEJlY2F1c2UgZGxtYWxsb2MgdXNlcyBhIHNtYWxsICg2NEtiKQ0KKyAgZGVmYXVsdCBncmFudWxhcml0eSwgcGl4ZWwgYnVmZmVycyBtYXkgc3RyYWRkbGUgdmlydHVhbCBhbGxvY2F0aW9uDQorICByZWdpb25zIG1vcmUgb2Z0ZW4gdGhhbiB3aGVuIHVzaW5nIHRoZSBNaWNyb3NvZnQgYWxsb2NhdG9yLiAgWW91IGNhbg0KKyAgYXZvaWQgdGhpcyBieSB1c2luZyBWaXJ0dWFsQWxsb2MoKSBhbmQgVmlydHVhbEZyZWUoKSBmb3IgYWxsIHBpeGVsDQorICBidWZmZXJzIHJhdGhlciB0aGFuIHVzaW5nIG1hbGxvYygpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsDQorICByZWNvbXBpbGUgdGhpcyBtYWxsb2Mgd2l0aCBhIGxhcmdlciBERUZBVUxUX0dSQU5VTEFSSVRZLiBOb3RlOg0KKyAgaW4gY2FzZXMgd2hlcmUgTVNDIGFuZCBnY2MgKGN5Z3dpbikgYXJlIGtub3duIHRvIGRpZmZlciBvbiBXSU4zMiwNCisgIGNvbmRpdGlvbnMgdXNlIF9NU0NfVkVSIHRvIGRpc3Rpbmd1aXNoIHRoZW0uDQorDQorRExNQUxMT0NfRVhQT1JUICAgICAgIGRlZmF1bHQ6IGV4dGVybg0KKyAgRGVmaW5lcyBob3cgcHVibGljIEFQSXMgYXJlIGRlY2xhcmVkLiBJZiB5b3Ugd2FudCB0byBleHBvcnQgdmlhIGENCisgIFdpbmRvd3MgRExMLCB5b3UgbWlnaHQgZGVmaW5lIHRoaXMgYXMNCisgICAgI2RlZmluZSBETE1BTExPQ19FWFBPUlQgZXh0ZXJuICBfX2RlY2xzcGVjKGRsbGV4cG9ydCkNCisgIElmIHlvdSB3YW50IGEgUE9TSVggRUxGIHNoYXJlZCBvYmplY3QsIHlvdSBtaWdodCB1c2UNCisgICAgI2RlZmluZSBETE1BTExPQ19FWFBPUlQgZXh0ZXJuIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpDQorDQorTUFMTE9DX0FMSUdOTUVOVCAgICAgICAgIGRlZmF1bHQ6IChzaXplX3QpKDIgKiBzaXplb2Yodm9pZCAqKSkNCisgIENvbnRyb2xzIHRoZSBtaW5pbXVtIGFsaWdubWVudCBmb3IgbWFsbG9jJ2VkIGNodW5rcy4gIEl0IG11c3QgYmUgYQ0KKyAgcG93ZXIgb2YgdHdvIGFuZCBhdCBsZWFzdCA4LCBldmVuIG9uIG1hY2hpbmVzIGZvciB3aGljaCBzbWFsbGVyDQorICBhbGlnbm1lbnRzIHdvdWxkIHN1ZmZpY2UuIEl0IG1heSBiZSBkZWZpbmVkIGFzIGxhcmdlciB0aGFuIHRoaXMNCisgIHRob3VnaC4gTm90ZSBob3dldmVyIHRoYXQgY29kZSBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBvcHRpbWl6ZWQgZm9yDQorICB0aGUgY2FzZSBvZiA4LWJ5dGUgYWxpZ25tZW50Lg0KKw0KK01TUEFDRVMgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkNCisgIElmIHRydWUsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnQgYWxsb2NhdGlvbiBzcGFjZXMuDQorICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGlmIEhBVkVfTU1BUCBpcyB0cnVlLg0KKw0KK09OTFlfTVNQQUNFUyAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkNCisgIElmIHRydWUsIG9ubHkgY29tcGlsZSBpbiBtc3BhY2UgdmVyc2lvbnMsIG5vdCByZWd1bGFyIHZlcnNpb25zLg0KKw0KK1VTRV9MT0NLUyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkNCisgIENhdXNlcyBlYWNoIGNhbGwgdG8gZWFjaCBwdWJsaWMgcm91dGluZSB0byBiZSBzdXJyb3VuZGVkIHdpdGgNCisgIHB0aHJlYWQgb3IgV0lOMzIgbXV0ZXggbG9jay91bmxvY2suIChJZiBzZXQgdHJ1ZSwgdGhpcyBjYW4gYmUNCisgIG92ZXJyaWRkZW4gb24gYSBwZXItbXNwYWNlIGJhc2lzIGZvciBtc3BhY2UgdmVyc2lvbnMuKSBJZiBzZXQgdG8gYQ0KKyAgbm9uLXplcm8gdmFsdWUgb3RoZXIgdGhhbiAxLCBsb2NrcyBhcmUgdXNlZCwgYnV0IHRoZWlyDQorICBpbXBsZW1lbnRhdGlvbiBpcyBsZWZ0IG91dCwgc28gbG9jayBmdW5jdGlvbnMgbXVzdCBiZSBzdXBwbGllZCBtYW51YWxseSwNCisgIGFzIGRlc2NyaWJlZCBiZWxvdy4NCisNCitVU0VfU1BJTl9MT0NLUyAgICAgICAgICAgZGVmYXVsdDogMSBpZmYgVVNFX0xPQ0tTIGFuZCBzcGluIGxvY2tzIGF2YWlsYWJsZQ0KKyAgSWYgdHJ1ZSwgdXNlcyBjdXN0b20gc3BpbiBsb2NrcyBmb3IgbG9ja2luZy4gVGhpcyBpcyBjdXJyZW50bHkNCisgIHN1cHBvcnRlZCBvbmx5IGdjYyA+PSA0LjEsIG9sZGVyIGdjY3Mgb24geDg2IHBsYXRmb3JtcywgYW5kIHJlY2VudA0KKyAgTVMgY29tcGlsZXJzLiAgT3RoZXJ3aXNlLCBwb3NpeCBsb2NrcyBvciB3aW4zMiBjcml0aWNhbCBzZWN0aW9ucyBhcmUNCisgIHVzZWQuDQorDQorVVNFX1JFQ1VSU0lWRV9MT0NLUyAgICAgIGRlZmF1bHQ6IG5vdCBkZWZpbmVkDQorICBJZiBkZWZpbmVkIG5vbnplcm8sIHVzZXMgcmVjdXJzaXZlIChha2EgcmVlbnRyYW50KSBsb2Nrcywgb3RoZXJ3aXNlDQorICB1c2VzIHBsYWluIG11dGV4ZXMuIFRoaXMgaXMgbm90IHJlcXVpcmVkIGZvciBtYWxsb2MgcHJvcGVyLCBidXQgbWF5DQorICBiZSBuZWVkZWQgZm9yIGxheWVyZWQgYWxsb2NhdG9ycyBzdWNoIGFzIG5lZG1hbGxvYy4NCisNCitMT0NLX0FUX0ZPUksgICAgICAgICAgICBkZWZhdWx0OiBub3QgZGVmaW5lZA0KKyAgSWYgZGVmaW5lZCBub256ZXJvLCBwZXJmb3JtcyBwdGhyZWFkX2F0Zm9yayB1cG9uIGluaXRpYWxpemF0aW9uDQorICB0byBpbml0aWFsaXplIGNoaWxkIGxvY2sgd2hpbGUgaG9sZGluZyBwYXJlbnQgbG9jay4gVGhlIGltcGxlbWVudGF0aW9uDQorICBhc3N1bWVzIHRoYXQgcHRocmVhZCBsb2NrcyAobm90IGN1c3RvbSBsb2NrcykgYXJlIGJlaW5nIHVzZWQuIEluIG90aGVyDQorICBjYXNlcywgeW91IG1heSBuZWVkIHRvIGN1c3RvbWl6ZSB0aGUgaW1wbGVtZW50YXRpb24uDQorDQorRk9PVEVSUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDANCisgIElmIHRydWUsIHByb3ZpZGUgZXh0cmEgY2hlY2tpbmcgYW5kIGRpc3BhdGNoaW5nIGJ5IHBsYWNpbmcNCisgIGluZm9ybWF0aW9uIGluIHRoZSBmb290ZXJzIG9mIGFsbG9jYXRlZCBjaHVua3MuIFRoaXMgYWRkcw0KKyAgc3BhY2UgYW5kIHRpbWUgb3ZlcmhlYWQuDQorDQorSU5TRUNVUkUgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDANCisgIElmIHRydWUsIG9taXQgY2hlY2tzIGZvciB1c2FnZSBlcnJvcnMgYW5kIGhlYXAgc3BhY2Ugb3ZlcndyaXRlcy4NCisNCitVU0VfRExfUFJFRklYICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQNCisgIENhdXNlcyBjb21waWxlciB0byBwcmVmaXggYWxsIHB1YmxpYyByb3V0aW5lcyB3aXRoIHRoZSBzdHJpbmcgJ2RsJy4NCisgIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgbWFsbG9jIGluIG9uZSBwYXJ0DQorICBvZiBhIHByb2dyYW0sIHVzaW5nIHlvdXIgcmVndWxhciBzeXN0ZW0gbWFsbG9jIGVsc2V3aGVyZS4NCisNCitNQUxMT0NfSU5TUEVDVF9BTEwgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQNCisgIElmIGRlZmluZWQsIGNvbXBpbGVzIG1hbGxvY19pbnNwZWN0X2FsbCBhbmQgbXNwYWNlX2luc3BlY3RfYWxsLCB0aGF0DQorICBwZXJmb3JtIHRyYXZlcnNhbCBvZiBhbGwgaGVhcCBzcGFjZS4gIFVubGVzcyBhY2Nlc3MgdG8gdGhlc2UNCisgIGZ1bmN0aW9ucyBpcyBvdGhlcndpc2UgcmVzdHJpY3RlZCwgeW91IHByb2JhYmx5IGRvIG5vdCB3YW50IHRvDQorICBpbmNsdWRlIHRoZW0gaW4gc2VjdXJlIGltcGxlbWVudGF0aW9ucy4NCisNCitBQk9SVCAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBhcyBhYm9ydCgpDQorICBEZWZpbmVzIGhvdyB0byBhYm9ydCBvbiBmYWlsZWQgY2hlY2tzLiAgT24gbW9zdCBzeXN0ZW1zLCBhIGZhaWxlZA0KKyAgY2hlY2sgY2Fubm90IGRpZSB3aXRoIGFuICJhc3NlcnQiIG9yIGV2ZW4gcHJpbnQgYW4gaW5mb3JtYXRpdmUNCisgIG1lc3NhZ2UsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgcHJpbnQgcm91dGluZXMgaW4gdHVybiBjYWxsIG1hbGxvYywNCisgIHdoaWNoIHdpbGwgZmFpbCBhZ2Fpbi4gIEdlbmVyYWxseSwgdGhlIGJlc3QgcG9saWN5IGlzIHRvIHNpbXBseSBjYWxsDQorICBhYm9ydCgpLiBJdCdzIG5vdCB2ZXJ5IHVzZWZ1bCB0byBkbyBtb3JlIHRoYW4gdGhpcyBiZWNhdXNlIG1hbnkNCisgIGVycm9ycyBkdWUgdG8gb3ZlcndyaXRpbmcgd2lsbCBzaG93IHVwIGFzIGFkZHJlc3MgZmF1bHRzIChudWxsLCBvZGQNCisgIGFkZHJlc3NlcyBldGMpIHJhdGhlciB0aGFuIG1hbGxvYy10cmlnZ2VyZWQgY2hlY2tzLCBzbyB3aWxsIGFsc28NCisgIGFib3J0LiAgQWxzbywgbW9zdCBjb21waWxlcnMga25vdyB0aGF0IGFib3J0KCkgZG9lcyBub3QgcmV0dXJuLCBzbw0KKyAgY2FuIGJldHRlciBvcHRpbWl6ZSBjb2RlIGNvbmRpdGlvbmFsbHkgY2FsbGluZyBpdC4NCisNCitQUk9DRUVEX09OX0VSUk9SICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDAgKGZhbHNlKQ0KKyAgQ29udHJvbHMgd2hldGhlciBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzIGNhdXNlIHRoZW0gdG8gYnlwYXNzZWQNCisgIHJhdGhlciB0aGFuIGFib3J0aW5nLiBJZiBzZXQsIGRldGVjdGVkIGJhZCBhcmd1bWVudHMgdG8gZnJlZSBhbmQNCisgIHJlYWxsb2MgYXJlIGlnbm9yZWQuIEFuZCBhbGwgYm9va2tlZXBpbmcgaW5mb3JtYXRpb24gaXMgemVyb2VkIG91dA0KKyAgdXBvbiBhIGRldGVjdGVkIG92ZXJ3cml0ZSBvZiBmcmVlZCBoZWFwIHNwYWNlLCB0aHVzIGxvc2luZyB0aGUNCisgIGFiaWxpdHkgdG8gZXZlciByZXR1cm4gaXQgZnJvbSBtYWxsb2MgYWdhaW4sIGJ1dCBlbmFibGluZyB0aGUNCisgIGFwcGxpY2F0aW9uIHRvIHByb2NlZWQuIElmIFBST0NFRURfT05fRVJST1IgaXMgZGVmaW5lZCwgdGhlDQorICBzdGF0aWMgdmFyaWFibGUgbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQgaXMgY29tcGlsZWQgaW4NCisgIGFuZCBjYW4gYmUgZXhhbWluZWQgdG8gc2VlIGlmIGVycm9ycyBoYXZlIG9jY3VycmVkLiBUaGlzIG9wdGlvbg0KKyAgZ2VuZXJhdGVzIHNsb3dlciBjb2RlIHRoYW4gdGhlIGRlZmF1bHQgYWJvcnQgcG9saWN5Lg0KKw0KK0RFQlVHICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZA0KKyAgVGhlIERFQlVHIHNldHRpbmcgaXMgbWFpbmx5IGludGVuZGVkIGZvciBwZW9wbGUgdHJ5aW5nIHRvIG1vZGlmeQ0KKyAgdGhpcyBjb2RlIG9yIGRpYWdub3NlIHByb2JsZW1zIHdoZW4gcG9ydGluZyB0byBuZXcgcGxhdGZvcm1zLg0KKyAgSG93ZXZlciwgaXQgbWF5IGFsc28gYmUgYWJsZSB0byBiZXR0ZXIgaXNvbGF0ZSB1c2VyIGVycm9ycyB0aGFuIGp1c3QNCisgIHVzaW5nIHJ1bnRpbWUgY2hlY2tzLiAgVGhlIGFzc2VydGlvbnMgaW4gdGhlIGNoZWNrIHJvdXRpbmVzIHNwZWxsDQorICBvdXQgaW4gbW9yZSBkZXRhaWwgdGhlIGFzc3VtcHRpb25zIGFuZCBpbnZhcmlhbnRzIHVuZGVybHlpbmcgdGhlDQorICBhbGdvcml0aG1zLiAgVGhlIGNoZWNraW5nIGlzIGZhaXJseSBleHRlbnNpdmUsIGFuZCB3aWxsIHNsb3cgZG93bg0KKyAgZXhlY3V0aW9uIG5vdGljZWFibHkuIENhbGxpbmcgbWFsbG9jX3N0YXRzIG9yIG1hbGxpbmZvIHdpdGggREVCVUcNCisgIHNldCB3aWxsIGF0dGVtcHQgdG8gY2hlY2sgZXZlcnkgbm9uLW1tYXBwZWQgYWxsb2NhdGVkIGFuZCBmcmVlIGNodW5rDQorICBpbiB0aGUgY291cnNlIG9mIGNvbXB1dGluZyB0aGUgc3VtbWFyaWVzLg0KKw0KK0FCT1JUX09OX0FTU0VSVF9GQUlMVVJFICAgZGVmYXVsdDogZGVmaW5lZCBhcyAxICh0cnVlKQ0KKyAgRGVidWdnaW5nIGFzc2VydGlvbiBmYWlsdXJlcyBjYW4gYmUgbmVhcmx5IGltcG9zc2libGUgaWYgeW91cg0KKyAgdmVyc2lvbiBvZiB0aGUgYXNzZXJ0IG1hY3JvIGNhdXNlcyBtYWxsb2MgdG8gYmUgY2FsbGVkLCB3aGljaCB3aWxsDQorICBsZWFkIHRvIGEgY2FzY2FkZSBvZiBmdXJ0aGVyIGZhaWx1cmVzLCBibG93aW5nIHRoZSBydW50aW1lIHN0YWNrLg0KKyAgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgY2F1c2UgYXNzZXJ0aW9ucyBmYWlsdXJlcyB0byBjYWxsIGFib3J0KCksDQorICB3aGljaCB3aWxsIHVzdWFsbHkgbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLg0KKw0KK01BTExPQ19GQUlMVVJFX0FDVElPTiAgICAgZGVmYXVsdDogc2V0cyBlcnJubyB0byBFTk9NRU0sIG9yIG5vLW9wIG9uIHdpbjMyDQorICBUaGUgYWN0aW9uIHRvIHRha2UgYmVmb3JlICJyZXR1cm4gMCIgd2hlbiBtYWxsb2MgZmFpbHMgdG8gYmUgYWJsZSB0bw0KKyAgcmV0dXJuIG1lbW9yeSBiZWNhdXNlIHRoZXJlIGlzIG5vbmUgYXZhaWxhYmxlLg0KKw0KK0hBVkVfTU9SRUNPUkUgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkgdW5sZXNzIHdpbjMyIG9yIE9OTFlfTVNQQUNFUw0KKyAgVHJ1ZSBpZiB0aGlzIHN5c3RlbSBzdXBwb3J0cyBzYnJrIG9yIGFuIGVtdWxhdGlvbiBvZiBpdC4NCisNCitNT1JFQ09SRSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHNicmsNCisgIFRoZSBuYW1lIG9mIHRoZSBzYnJrLXN0eWxlIHN5c3RlbSByb3V0aW5lIHRvIGNhbGwgdG8gb2J0YWluIG1vcmUNCisgIG1lbW9yeS4gIFNlZSBiZWxvdyBmb3IgZ3VpZGFuY2Ugb24gd3JpdGluZyBjdXN0b20gTU9SRUNPUkUNCisgIGZ1bmN0aW9ucy4gVGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHRvIHNicmsvTU9SRUNPUkUgdmFyaWVzIGFjcm9zcw0KKyAgc3lzdGVtcy4gIEl0IGNhbm5vdCBiZSBzaXplX3QsIGJlY2F1c2UgaXQgc3VwcG9ydHMgbmVnYXRpdmUNCisgIGFyZ3VtZW50cywgc28gaXQgaXMgbm9ybWFsbHkgdGhlIHNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzDQorICBzaXplX3QgKHNvbWV0aW1lcyBkZWNsYXJlZCBhcyAiaW50cHRyX3QiKS4gIEl0IGRvZXNuJ3QgbXVjaCBtYXR0ZXINCisgIHRob3VnaC4gSW50ZXJuYWxseSwgd2Ugb25seSBjYWxsIGl0IHdpdGggYXJndW1lbnRzIGxlc3MgdGhhbiBoYWxmDQorICB0aGUgbWF4IHZhbHVlIG9mIGEgc2l6ZV90LCB3aGljaCBzaG91bGQgd29yayBhY3Jvc3MgYWxsIHJlYXNvbmFibGUNCisgIHBvc3NpYmlsaXRpZXMsIGFsdGhvdWdoIHNvbWV0aW1lcyBnZW5lcmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzLg0KKw0KK01PUkVDT1JFX0NPTlRJR1VPVVMgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkgaWYgSEFWRV9NT1JFQ09SRQ0KKyAgSWYgdHJ1ZSwgdGFrZSBhZHZhbnRhZ2Ugb2YgZmFjdCB0aGF0IGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFDQorICB3aXRoIHBvc2l0aXZlIGFyZ3VtZW50cyBhbHdheXMgcmV0dXJuIGNvbnRpZ3VvdXMgaW5jcmVhc2luZw0KKyAgYWRkcmVzc2VzLiAgVGhpcyBpcyB0cnVlIG9mIHVuaXggc2Jyay4gSXQgZG9lcyBub3QgaHVydCB0b28gbXVjaCB0bw0KKyAgc2V0IGl0IHRydWUgYW55d2F5LCBzaW5jZSBtYWxsb2MgY29wZXMgd2l0aCBub24tY29udGlndWl0aWVzLg0KKyAgU2V0dGluZyBpdCBmYWxzZSB3aGVuIGRlZmluaXRlbHkgbm9uLWNvbnRpZ3VvdXMgc2F2ZXMgdGltZQ0KKyAgYW5kIHBvc3NpYmx5IHdhc3RlZCBzcGFjZSBpdCB3b3VsZCB0YWtlIHRvIGRpc2NvdmVyIHRoaXMgdGhvdWdoLg0KKw0KK01PUkVDT1JFX0NBTk5PVF9UUklNICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQNCisgIFRydWUgaWYgTU9SRUNPUkUgY2Fubm90IHJlbGVhc2Ugc3BhY2UgYmFjayB0byB0aGUgc3lzdGVtIHdoZW4gZ2l2ZW4NCisgIG5lZ2F0aXZlIGFyZ3VtZW50cy4gVGhpcyBpcyBnZW5lcmFsbHkgbmVjZXNzYXJ5IG9ubHkgaWYgeW91IGFyZQ0KKyAgdXNpbmcgYSBoYW5kLWNyYWZ0ZWQgTU9SRUNPUkUgZnVuY3Rpb24gdGhhdCBjYW5ub3QgaGFuZGxlIG5lZ2F0aXZlDQorICBhcmd1bWVudHMuDQorDQorTk9fU0VHTUVOVF9UUkFWRVJTQUwgICAgICAgZGVmYXVsdDogMA0KKyAgSWYgbm9uLXplcm8sIHN1cHByZXNzZXMgdHJhdmVyc2FscyBvZiBtZW1vcnkgc2VnbWVudHMNCisgIHJldHVybmVkIGJ5IGVpdGhlciBNT1JFQ09SRSBvciBDQUxMX01NQVAuIFRoaXMgZGlzYWJsZXMNCisgIG1lcmdpbmcgb2Ygc2VnbWVudHMgdGhhdCBhcmUgY29udGlndW91cywgYW5kIHNlbGVjdGl2ZWx5DQorICByZWxlYXNpbmcgdGhlbSB0byB0aGUgT1MgaWYgdW51c2VkLCBidXQgYm91bmRzIGV4ZWN1dGlvbiB0aW1lcy4NCisNCitIQVZFX01NQVAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpDQorICBUcnVlIGlmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIG1tYXAgb3IgYW4gZW11bGF0aW9uIG9mIGl0LiAgSWYgc28sIGFuZA0KKyAgSEFWRV9NT1JFQ09SRSBpcyBub3QgdHJ1ZSwgTU1BUCBpcyB1c2VkIGZvciBhbGwgc3lzdGVtDQorICBhbGxvY2F0aW9uLiBJZiBzZXQgYW5kIEhBVkVfTU9SRUNPUkUgaXMgdHJ1ZSBhcyB3ZWxsLCBNTUFQIGlzDQorICBwcmltYXJpbHkgdXNlZCB0byBkaXJlY3RseSBhbGxvY2F0ZSB2ZXJ5IGxhcmdlIGJsb2Nrcy4gSXQgaXMgYWxzbw0KKyAgdXNlZCBhcyBhIGJhY2t1cCBzdHJhdGVneSBpbiBjYXNlcyB3aGVyZSBNT1JFQ09SRSBmYWlscyB0byBwcm92aWRlDQorICBzcGFjZSBmcm9tIHN5c3RlbS4gTm90ZTogQSBzaW5nbGUgY2FsbCB0byBNVU5NQVAgaXMgYXNzdW1lZCB0byBiZQ0KKyAgYWJsZSB0byB1bm1hcCBtZW1vcnkgdGhhdCBtYXkgaGF2ZSBiZSBhbGxvY2F0ZWQgdXNpbmcgbXVsdGlwbGUgY2FsbHMNCisgIHRvIE1NQVAsIHNvIGxvbmcgYXMgdGhleSBhcmUgYWRqYWNlbnQuDQorDQorSEFWRV9NUkVNQVAgICAgICAgICAgICAgICBkZWZhdWx0OiAxIG9uIGxpbnV4LCBlbHNlIDANCisgIElmIHRydWUgcmVhbGxvYygpIHVzZXMgbXJlbWFwKCkgdG8gcmUtYWxsb2NhdGUgbGFyZ2UgYmxvY2tzIGFuZA0KKyAgZXh0ZW5kIG9yIHNocmluayBhbGxvY2F0aW9uIHNwYWNlcy4NCisNCitNTUFQX0NMRUFSUyAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgZXhjZXB0IG9uIFdJTkNFLg0KKyAgVHJ1ZSBpZiBtbWFwIGNsZWFycyBtZW1vcnkgc28gY2FsbG9jIGRvZXNuJ3QgbmVlZCB0by4gVGhpcyBpcyB0cnVlDQorICBmb3Igc3RhbmRhcmQgdW5peCBtbWFwIHVzaW5nIC9kZXYvemVybyBhbmQgb24gV0lOMzIgZXhjZXB0IGZvciBXSU5DRS4NCisNCitVU0VfQlVJTFRJTl9GRlMgICAgICAgICAgICBkZWZhdWx0OiAwIChpLmUuLCBub3QgdXNlZCkNCisgIENhdXNlcyBtYWxsb2MgdG8gdXNlIHRoZSBidWlsdGluIGZmcygpIGZ1bmN0aW9uIHRvIGNvbXB1dGUgaW5kaWNlcy4NCisgIFNvbWUgY29tcGlsZXJzIG1heSByZWNvZ25pemUgYW5kIGludHJpbnNpZnkgZmZzIHRvIGJlIGZhc3RlciB0aGFuIHRoZQ0KKyAgc3VwcGxpZWQgQyB2ZXJzaW9uLiBBbHNvLCB0aGUgY2FzZSBvZiB4ODYgdXNpbmcgZ2NjIGlzIHNwZWNpYWwtY2FzZWQNCisgIHRvIGFuIGFzbSBpbnN0cnVjdGlvbiwgc28gaXMgYWxyZWFkeSBhcyBmYXN0IGFzIGl0IGNhbiBiZSwgYW5kIHNvDQorICB0aGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdC4gU2ltaWxhcmx5IGZvciBXaW4zMiB1bmRlciByZWNlbnQgTVMgY29tcGlsZXJzLg0KKyAgKE9uIG1vc3QgeDg2cywgdGhlIGFzbSB2ZXJzaW9uIGlzIG9ubHkgc2xpZ2h0bHkgZmFzdGVyIHRoYW4gdGhlIEMgdmVyc2lvbi4pDQorDQorbWFsbG9jX2dldHBhZ2VzaXplICAgICAgICAgZGVmYXVsdDogZGVyaXZlIGZyb20gc3lzdGVtIGluY2x1ZGVzLCBvciA0MDk2Lg0KKyAgVGhlIHN5c3RlbSBwYWdlIHNpemUuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoaXMgbWFsbG9jIG1hbmFnZXMNCisgIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0gaW4gcGFnZS1zaXplIHVuaXRzLiAgVGhpcyBtYXkgYmUgKGFuZA0KKyAgdXN1YWxseSBpcykgYSBmdW5jdGlvbiByYXRoZXIgdGhhbiBhIGNvbnN0YW50LiBUaGlzIGlzIGlnbm9yZWQNCisgIGlmIFdJTjMyLCB3aGVyZSBwYWdlIHNpemUgaXMgZGV0ZXJtaW5lZCB1c2luZyBnZXRTeXN0ZW1JbmZvIGR1cmluZw0KKyAgaW5pdGlhbGl6YXRpb24uDQorDQorVVNFX0RFVl9SQU5ET00gICAgICAgICAgICAgZGVmYXVsdDogMCAoaS5lLiwgbm90IHVzZWQpDQorICBDYXVzZXMgbWFsbG9jIHRvIHVzZSAvZGV2L3JhbmRvbSB0byBpbml0aWFsaXplIHNlY3VyZSBtYWdpYyBzZWVkIGZvcg0KKyAgc3RhbXBpbmcgZm9vdGVycy4gT3RoZXJ3aXNlLCB0aGUgY3VycmVudCB0aW1lIGlzIHVzZWQuDQorDQorTk9fTUFMTElORk8gICAgICAgICAgICAgICAgZGVmYXVsdDogMA0KKyAgSWYgZGVmaW5lZCwgZG9uJ3QgY29tcGlsZSAibWFsbGluZm8iLiBUaGlzIGNhbiBiZSBhIHNpbXBsZSB3YXkNCisgIG9mIGRlYWxpbmcgd2l0aCBtaXNtYXRjaGVzIGJldHdlZW4gc3lzdGVtIGRlY2xhcmF0aW9ucyBhbmQNCisgIHRob3NlIGluIHRoaXMgZmlsZS4NCisNCitNQUxMSU5GT19GSUVMRF9UWVBFICAgICAgICBkZWZhdWx0OiBzaXplX3QNCisgIFRoZSB0eXBlIG9mIHRoZSBmaWVsZHMgaW4gdGhlIG1hbGxpbmZvIHN0cnVjdC4gVGhpcyB3YXMgb3JpZ2luYWxseQ0KKyAgZGVmaW5lZCBhcyAiaW50IiBpbiBTVklEIGV0YywgYnV0IGlzIG1vcmUgdXNlZnVsbHkgZGVmaW5lZCBhcw0KKyAgc2l6ZV90LiBUaGUgdmFsdWUgaXMgdXNlZCBvbmx5IGlmICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIGlzIG5vdCBzZXQNCisNCitOT19NQUxMT0NfU1RBVFMgICAgICAgICAgICBkZWZhdWx0OiAwDQorICBJZiBkZWZpbmVkLCBkb24ndCBjb21waWxlICJtYWxsb2Nfc3RhdHMiLiBUaGlzIGF2b2lkcyBjYWxscyB0bw0KKyAgZnByaW50ZiBhbmQgYnJpbmdpbmcgaW4gc3RkaW8gZGVwZW5kZW5jaWVzIHlvdSBtaWdodCBub3Qgd2FudC4NCisNCitSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgICAgZGVmYXVsdDogbm90IGRlZmluZWQNCisgIFRoaXMgc2hvdWxkIGJlIHNldCBpZiBhIGNhbGwgdG8gcmVhbGxvYyB3aXRoIHplcm8gYnl0ZXMgc2hvdWxkDQorICBiZSB0aGUgc2FtZSBhcyBhIGNhbGwgdG8gZnJlZS4gU29tZSBwZW9wbGUgdGhpbmsgaXQgc2hvdWxkLiBPdGhlcndpc2UsDQorICBzaW5jZSB0aGlzIG1hbGxvYyByZXR1cm5zIGEgdW5pcXVlIHBvaW50ZXIgZm9yIG1hbGxvYygwKSwgc28gZG9lcw0KKyAgcmVhbGxvYyhwLCAwKS4NCisNCitMQUNLU19VTklTVERfSCwgTEFDS1NfRkNOVExfSCwgTEFDS1NfU1lTX1BBUkFNX0gsIExBQ0tTX1NZU19NTUFOX0gNCitMQUNLU19TVFJJTkdTX0gsIExBQ0tTX1NUUklOR19ILCBMQUNLU19TWVNfVFlQRVNfSCwgIExBQ0tTX0VSUk5PX0gNCitMQUNLU19TVERMSUJfSCBMQUNLU19TQ0hFRF9IIExBQ0tTX1RJTUVfSCAgZGVmYXVsdDogTk9UIGRlZmluZWQgdW5sZXNzIG9uIFdJTjMyDQorICBEZWZpbmUgdGhlc2UgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGVzZSBoZWFkZXIgZmlsZXMuDQorICBZb3UgbWlnaHQgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgc29tZSBvZiB0aGUgZGVjbGFyYXRpb25zIHRoZXkgcHJvdmlkZS4NCisNCitERUZBVUxUX0dSQU5VTEFSSVRZICAgICAgICBkZWZhdWx0OiBwYWdlIHNpemUgaWYgTU9SRUNPUkVfQ09OVElHVU9VUywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9pbmZvLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5IGluIFdJTjMyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIDY0Sy4NCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgeCkNCisgIFRoZSB1bml0IGZvciBhbGxvY2F0aW5nIGFuZCBkZWFsbG9jYXRpbmcgbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4gIE9uDQorICBtb3N0IHN5c3RlbXMgd2l0aCBjb250aWd1b3VzIE1PUkVDT1JFLCB0aGVyZSBpcyBubyByZWFzb24gdG8NCisgIG1ha2UgdGhpcyBtb3JlIHRoYW4gYSBwYWdlLiBIb3dldmVyLCBzeXN0ZW1zIHdpdGggTU1BUCB0ZW5kIHRvDQorICBlaXRoZXIgcmVxdWlyZSBvciBlbmNvdXJhZ2UgbGFyZ2VyIGdyYW51bGFyaXRpZXMuICBZb3UgY2FuIGluY3JlYXNlDQorICB0aGlzIHZhbHVlIHRvIHByZXZlbnQgc3lzdGVtIGFsbG9jYXRpb24gZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBzbw0KKyAgb2Z0ZW4sIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgc2xvdy4gIFRoZSB2YWx1ZSBtdXN0IGJlIGF0IGxlYXN0IG9uZQ0KKyAgcGFnZSBhbmQgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4gIFNldHRpbmcgdG8gMCBjYXVzZXMgaW5pdGlhbGl6YXRpb24NCisgIHRvIGVpdGhlciBwYWdlIHNpemUgb3Igd2luMzIgcmVnaW9uIHNpemUuICAoTm90ZTogSW4gcHJldmlvdXMNCisgIHZlcnNpb25zIG9mIG1hbGxvYywgdGhlIGVxdWl2YWxlbnQgb2YgdGhpcyBvcHRpb24gd2FzIGNhbGxlZA0KKyAgIlRPUF9QQUQiKQ0KKw0KK0RFRkFVTFRfVFJJTV9USFJFU0hPTEQgICAgZGVmYXVsdDogMk1CDQorICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fVFJJTV9USFJFU0hPTEQsIHgpDQorICBUaGUgbWF4aW11bSBhbW91bnQgb2YgdW51c2VkIHRvcC1tb3N0IG1lbW9yeSB0byBrZWVwIGJlZm9yZQ0KKyAgcmVsZWFzaW5nIHZpYSBtYWxsb2NfdHJpbSBpbiBmcmVlKCkuICBBdXRvbWF0aWMgdHJpbW1pbmcgaXMgbWFpbmx5DQorICB1c2VmdWwgaW4gbG9uZy1saXZlZCBwcm9ncmFtcyB1c2luZyBjb250aWd1b3VzIE1PUkVDT1JFLiAgQmVjYXVzZQ0KKyAgdHJpbW1pbmcgdmlhIHNicmsgY2FuIGJlIHNsb3cgb24gc29tZSBzeXN0ZW1zLCBhbmQgY2FuIHNvbWV0aW1lcyBiZQ0KKyAgd2FzdGVmdWwgKGluIGNhc2VzIHdoZXJlIHByb2dyYW1zIGltbWVkaWF0ZWx5IGFmdGVyd2FyZCBhbGxvY2F0ZQ0KKyAgbW9yZSBsYXJnZSBjaHVua3MpIHRoZSB2YWx1ZSBzaG91bGQgYmUgaGlnaCBlbm91Z2ggc28gdGhhdCB5b3VyDQorICBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3b3VsZCBpbXByb3ZlIGJ5IHJlbGVhc2luZyB0aGlzIG11Y2gNCisgIG1lbW9yeS4gIEFzIGEgcm91Z2ggZ3VpZGUsIHlvdSBtaWdodCBzZXQgdG8gYSB2YWx1ZSBjbG9zZSB0byB0aGUNCisgIGF2ZXJhZ2Ugc2l6ZSBvZiBhIHByb2Nlc3MgKHByb2dyYW0pIHJ1bm5pbmcgb24geW91ciBzeXN0ZW0uDQorICBSZWxlYXNpbmcgdGhpcyBtdWNoIG1lbW9yeSB3b3VsZCBhbGxvdyBzdWNoIGEgcHJvY2VzcyB0byBydW4gaW4NCisgIG1lbW9yeS4gIEdlbmVyYWxseSwgaXQgaXMgd29ydGggdHVuaW5nIHRyaW0gdGhyZXNob2xkcyB3aGVuIGENCisgIHByb2dyYW0gdW5kZXJnb2VzIHBoYXNlcyB3aGVyZSBzZXZlcmFsIGxhcmdlIGNodW5rcyBhcmUgYWxsb2NhdGVkDQorICBhbmQgcmVsZWFzZWQgaW4gd2F5cyB0aGF0IGNhbiByZXVzZSBlYWNoIG90aGVyJ3Mgc3RvcmFnZSwgcGVyaGFwcw0KKyAgbWl4ZWQgd2l0aCBwaGFzZXMgd2hlcmUgdGhlcmUgYXJlIG5vIHN1Y2ggY2h1bmtzIGF0IGFsbC4gVGhlIHRyaW0NCisgIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHBhZ2Ugc2l6ZSB0byBoYXZlIGFueSB1c2VmdWwgZWZmZWN0LiAgVG8NCisgIGRpc2FibGUgdHJpbW1pbmcgY29tcGxldGVseSwgeW91IGNhbiBzZXQgdG8gTUFYX1NJWkVfVC4gTm90ZSB0aGF0IHRoZSB0cmljaw0KKyAgc29tZSBwZW9wbGUgdXNlIG9mIG1hbGxvY2luZyBhIGh1Z2Ugc3BhY2UgYW5kIHRoZW4gZnJlZWluZyBpdCBhdA0KKyAgcHJvZ3JhbSBzdGFydHVwLCBpbiBhbiBhdHRlbXB0IHRvIHJlc2VydmUgc3lzdGVtIG1lbW9yeSwgZG9lc24ndA0KKyAgaGF2ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IHVuZGVyIGF1dG9tYXRpYyB0cmltbWluZywgc2luY2UgdGhhdCBtZW1vcnkNCisgIHdpbGwgaW1tZWRpYXRlbHkgYmUgcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4NCisNCitERUZBVUxUX01NQVBfVEhSRVNIT0xEICAgICAgIGRlZmF1bHQ6IDI1NksNCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9NTUFQX1RIUkVTSE9MRCwgeCkNCisgIFRoZSByZXF1ZXN0IHNpemUgdGhyZXNob2xkIGZvciB1c2luZyBNTUFQIHRvIGRpcmVjdGx5IHNlcnZpY2UgYQ0KKyAgcmVxdWVzdC4gUmVxdWVzdHMgb2YgYXQgbGVhc3QgdGhpcyBzaXplIHRoYXQgY2Fubm90IGJlIGFsbG9jYXRlZA0KKyAgdXNpbmcgYWxyZWFkeS1leGlzdGluZyBzcGFjZSB3aWxsIGJlIHNlcnZpY2VkIHZpYSBtbWFwLiAgKElmIGVub3VnaA0KKyAgbm9ybWFsIGZyZWVkIHNwYWNlIGFscmVhZHkgZXhpc3RzIGl0IGlzIHVzZWQgaW5zdGVhZC4pICBVc2luZyBtbWFwDQorICBzZWdyZWdhdGVzIHJlbGF0aXZlbHkgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSBzbyB0aGF0IHRoZXkgY2FuIGJlDQorICBpbmRpdmlkdWFsbHkgb2J0YWluZWQgYW5kIHJlbGVhc2VkIGZyb20gdGhlIGhvc3Qgc3lzdGVtLiBBIHJlcXVlc3QNCisgIHNlcnZpY2VkIHRocm91Z2ggbW1hcCBpcyBuZXZlciByZXVzZWQgYnkgYW55IG90aGVyIHJlcXVlc3QgKGF0IGxlYXN0DQorICBub3QgZGlyZWN0bHk7IHRoZSBzeXN0ZW0gbWF5IGp1c3Qgc28gaGFwcGVuIHRvIHJlbWFwIHN1Y2Nlc3NpdmUNCisgIHJlcXVlc3RzIHRvIHRoZSBzYW1lIGxvY2F0aW9ucykuICBTZWdyZWdhdGluZyBzcGFjZSBpbiB0aGlzIHdheSBoYXMNCisgIHRoZSBiZW5lZml0cyB0aGF0OiBNbWFwcGVkIHNwYWNlIGNhbiBhbHdheXMgYmUgaW5kaXZpZHVhbGx5IHJlbGVhc2VkDQorICBiYWNrIHRvIHRoZSBzeXN0ZW0sIHdoaWNoIGhlbHBzIGtlZXAgdGhlIHN5c3RlbSBsZXZlbCBtZW1vcnkgZGVtYW5kcw0KKyAgb2YgYSBsb25nLWxpdmVkIHByb2dyYW0gbG93LiAgQWxzbywgbWFwcGVkIG1lbW9yeSBkb2Vzbid0IGJlY29tZQ0KKyAgYGxvY2tlZCcgYmV0d2VlbiBvdGhlciBjaHVua3MsIGFzIGNhbiBoYXBwZW4gd2l0aCBub3JtYWxseSBhbGxvY2F0ZWQNCisgIGNodW5rcywgd2hpY2ggbWVhbnMgdGhhdCBldmVuIHRyaW1taW5nIHZpYSBtYWxsb2NfdHJpbSB3b3VsZCBub3QNCisgIHJlbGVhc2UgdGhlbS4gIEhvd2V2ZXIsIGl0IGhhcyB0aGUgZGlzYWR2YW50YWdlIHRoYXQgdGhlIHNwYWNlDQorICBjYW5ub3QgYmUgcmVjbGFpbWVkLCBjb25zb2xpZGF0ZWQsIGFuZCB0aGVuIHVzZWQgdG8gc2VydmljZSBsYXRlcg0KKyAgcmVxdWVzdHMsIGFzIGhhcHBlbnMgd2l0aCBub3JtYWwgY2h1bmtzLiAgVGhlIGFkdmFudGFnZXMgb2YgbW1hcA0KKyAgbmVhcmx5IGFsd2F5cyBvdXR3ZWlnaCBkaXNhZHZhbnRhZ2VzIGZvciAibGFyZ2UiIGNodW5rcywgYnV0IHRoZQ0KKyAgdmFsdWUgb2YgImxhcmdlIiBtYXkgdmFyeSBhY3Jvc3Mgc3lzdGVtcy4gIFRoZSBkZWZhdWx0IGlzIGFuDQorICBlbXBpcmljYWxseSBkZXJpdmVkIHZhbHVlIHRoYXQgd29ya3Mgd2VsbCBpbiBtb3N0IHN5c3RlbXMuIFlvdSBjYW4NCisgIGRpc2FibGUgbW1hcCBieSBzZXR0aW5nIHRvIE1BWF9TSVpFX1QuDQorDQorTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSAgIGRlZmF1bHQ6IDQwOTUgdW5sZXNzIG5vdCBIQVZFX01NQVANCisgIFRoZSBudW1iZXIgb2YgY29uc29saWRhdGVkIGZyZWVzIGJldHdlZW4gY2hlY2tzIHRvIHJlbGVhc2UNCisgIHVudXNlZCBzZWdtZW50cyB3aGVuIGZyZWVpbmcuIFdoZW4gdXNpbmcgbm9uLWNvbnRpZ3VvdXMgc2VnbWVudHMsDQorICBlc3BlY2lhbGx5IHdpdGggbXVsdGlwbGUgbXNwYWNlcywgY2hlY2tpbmcgb25seSBmb3IgdG9wbW9zdCBzcGFjZQ0KKyAgZG9lc24ndCBhbHdheXMgc3VmZmljZSB0byB0cmlnZ2VyIHRyaW1taW5nLiBUbyBjb21wZW5zYXRlIGZvciB0aGlzLA0KKyAgZnJlZSgpIHdpbGwsIHdpdGggYSBwZXJpb2Qgb2YgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSAob3IgdGhlDQorICBjdXJyZW50IG51bWJlciBvZiBzZWdtZW50cywgaWYgZ3JlYXRlcikgdHJ5IHRvIHJlbGVhc2UgdW51c2VkDQorICBzZWdtZW50cyB0byB0aGUgT1Mgd2hlbiBmcmVlaW5nIGNodW5rcyB0aGF0IHJlc3VsdCBpbg0KKyAgY29uc29saWRhdGlvbi4gVGhlIGJlc3QgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIGEgY29tcHJvbWlzZQ0KKyAgYmV0d2VlbiBzbG93aW5nIGRvd24gZnJlZXMgd2l0aCByZWxhdGl2ZWx5IGNvc3RseSBjaGVja3MgdGhhdA0KKyAgcmFyZWx5IHRyaWdnZXIgdmVyc3VzIGhvbGRpbmcgb24gdG8gdW51c2VkIG1lbW9yeS4gVG8gZWZmZWN0aXZlbHkNCisgIGRpc2FibGUsIHNldCB0byBNQVhfU0laRV9ULiBUaGlzIG1heSBsZWFkIHRvIGEgdmVyeSBzbGlnaHQgc3BlZWQNCisgIGltcHJvdmVtZW50IGF0IHRoZSBleHBlbnNlIG9mIGNhcnJ5aW5nIGFyb3VuZCBtb3JlIG1lbW9yeS4NCisqLw0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX3Rvb2xjaGFpbi5oIg0KK2V4dGVybiB2b2lkICpfc2Jyayh1bnNpZ25lZCBpbnQgc2l6ZSk7DQorDQorI2lmbmRlZiBfV0lOMzINCisjaWZkZWYgU01BTExfTUVNT1JZDQorI2RlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKDEyOCkNCisjZWxzZQ0KKyNkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplICg0MDk2KQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qIFZlcnNpb24gaWRlbnRpZmllciB0byBhbGxvdyBwZW9wbGUgdG8gc3VwcG9ydCBtdWx0aXBsZSB2ZXJzaW9ucyAqLw0KKyNpZm5kZWYgRExNQUxMT0NfVkVSU0lPTg0KKyNkZWZpbmUgRExNQUxMT0NfVkVSU0lPTiAyMDgwNg0KKyNlbmRpZiAvKiBETE1BTExPQ19WRVJTSU9OICovDQorDQorI2lmbmRlZiBETE1BTExPQ19FWFBPUlQNCisjZGVmaW5lIERMTUFMTE9DX0VYUE9SVCBleHRlcm4NCisjZW5kaWYNCisNCisjaWZuZGVmIFdJTjMyDQorI2lmZGVmIF9XSU4zMg0KKyNkZWZpbmUgV0lOMzIgMQ0KKyNlbmRpZiAgLyogX1dJTjMyICovDQorI2lmZGVmIF9XSU4zMl9XQ0UNCisjZGVmaW5lIExBQ0tTX0ZDTlRMX0gNCisjZGVmaW5lIFdJTjMyIDENCisjZW5kaWYgLyogX1dJTjMyX1dDRSAqLw0KKyNlbmRpZiAgLyogV0lOMzIgKi8NCisjaWZkZWYgV0lOMzINCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4NCisjaW5jbHVkZSA8d2luZG93cy5oPg0KKyNpbmNsdWRlIDx0Y2hhci5oPg0KKyNkZWZpbmUgSEFWRV9NTUFQIDENCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMA0KKyNkZWZpbmUgTEFDS1NfVU5JU1REX0gNCisjZGVmaW5lIExBQ0tTX1NZU19QQVJBTV9IDQorI2RlZmluZSBMQUNLU19TWVNfTU1BTl9IDQorI2RlZmluZSBMQUNLU19TVFJJTkdfSA0KKyNkZWZpbmUgTEFDS1NfU1RSSU5HU19IDQorI2RlZmluZSBMQUNLU19TWVNfVFlQRVNfSA0KKyNkZWZpbmUgTEFDS1NfRVJSTk9fSA0KKyNkZWZpbmUgTEFDS1NfU0NIRURfSA0KKyNpZm5kZWYgTUFMTE9DX0ZBSUxVUkVfQUNUSU9ODQorI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04NCisjZW5kaWYgLyogTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovDQorI2lmbmRlZiBNTUFQX0NMRUFSUw0KKyNpZmRlZiBfV0lOMzJfV0NFIC8qIFdJTkNFIHJlcG9ydGVkbHkgZG9lcyBub3QgY2xlYXIgKi8NCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDANCisjZWxzZQ0KKyNkZWZpbmUgTU1BUF9DTEVBUlMgMQ0KKyNlbmRpZiAvKiBfV0lOMzJfV0NFICovDQorI2VuZGlmIC8qTU1BUF9DTEVBUlMgKi8NCisjZW5kaWYgIC8qIFdJTjMyICovDQorDQorI2lmIGRlZmluZWQoREFSV0lOKSB8fCBkZWZpbmVkKF9EQVJXSU4pDQorLyogTWFjIE9TWCBkb2NzIGFkdmlzZSBub3QgdG8gdXNlIHNicms7IGl0IHNlZW1zIGJldHRlciB0byB1c2UgbW1hcCAqLw0KKyNpZm5kZWYgSEFWRV9NT1JFQ09SRQ0KKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwDQorI2RlZmluZSBIQVZFX01NQVAgMQ0KKy8qIE9TWCBhbGxvY2F0b3JzIHByb3ZpZGUgMTYgYnl0ZSBhbGlnbm1lbnQgKi8NCisjaWZuZGVmIE1BTExPQ19BTElHTk1FTlQNCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgKChzaXplX3QpMTZVKQ0KKyNlbmRpZg0KKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLw0KKyNlbmRpZiAgLyogREFSV0lOICovDQorDQorI2lmbmRlZiBMQUNLU19TWVNfVFlQRVNfSA0KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gIC8qIEZvciBzaXplX3QgKi8NCisjZW5kaWYgIC8qIExBQ0tTX1NZU19UWVBFU19IICovDQorDQorLyogVGhlIG1heGltdW0gcG9zc2libGUgc2l6ZV90IHZhbHVlIGhhcyBhbGwgYml0cyBzZXQgKi8NCisjZGVmaW5lIE1BWF9TSVpFX1QgICAgICAgICAgICh+KHNpemVfdCkwKQ0KKw0KKyNpZm5kZWYgVVNFX0xPQ0tTIC8qIGVuc3VyZSB0cnVlIGlmIHNwaW4gb3IgcmVjdXJzaXZlIGxvY2tzIHNldCAqLw0KKyNkZWZpbmUgVVNFX0xPQ0tTICAoKGRlZmluZWQoVVNFX1NQSU5fTE9DS1MpICYmIFVTRV9TUElOX0xPQ0tTICE9IDApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgIChkZWZpbmVkKFVTRV9SRUNVUlNJVkVfTE9DS1MpICYmIFVTRV9SRUNVUlNJVkVfTE9DS1MgIT0gMCkpDQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLw0KKw0KKyNpZiBVU0VfTE9DS1MgLyogU3BpbiBsb2NrcyBmb3IgZ2NjID49IDQuMSwgb2xkZXIgZ2NjIG9uIHg4NiwgTVNDID49IDEzMTAgKi8NCisjaWYgKChkZWZpbmVkKF9fR05VQ19fKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgKChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gMSkpIHx8ICAgICAgXA0KKyAgICAgICBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKSkgfHwgICAgICAgICAgICAgICAgICAgIFwNCisgICAgIChkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMxMCkpDQorI2lmbmRlZiBVU0VfU1BJTl9MT0NLUw0KKyNkZWZpbmUgVVNFX1NQSU5fTE9DS1MgMQ0KKyNlbmRpZiAvKiBVU0VfU1BJTl9MT0NLUyAqLw0KKyNlbGlmIFVTRV9TUElOX0xPQ0tTDQorI2Vycm9yICJVU0VfU1BJTl9MT0NLUyBkZWZpbmVkIHdpdGhvdXQgaW1wbGVtZW50YXRpb24iDQorI2VuZGlmIC8qIC4uLiBsb2NrcyBhdmFpbGFibGUuLi4gKi8NCisjZWxpZiAhZGVmaW5lZChVU0VfU1BJTl9MT0NLUykNCisjZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDANCisjZW5kaWYgLyogVVNFX0xPQ0tTICovDQorDQorI2lmbmRlZiBPTkxZX01TUEFDRVMNCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAwDQorI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8NCisjaWZuZGVmIE1TUEFDRVMNCisjaWYgT05MWV9NU1BBQ0VTDQorI2RlZmluZSBNU1BBQ0VTIDENCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLw0KKyNkZWZpbmUgTVNQQUNFUyAwDQorI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8NCisjZW5kaWYgIC8qIE1TUEFDRVMgKi8NCisjaWZuZGVmIE1BTExPQ19BTElHTk1FTlQNCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgKChzaXplX3QpKDIgKiBzaXplb2Yodm9pZCAqKSkpDQorI2VuZGlmICAvKiBNQUxMT0NfQUxJR05NRU5UICovDQorI2lmbmRlZiBGT09URVJTDQorI2RlZmluZSBGT09URVJTIDANCisjZW5kaWYgIC8qIEZPT1RFUlMgKi8NCisjaWZuZGVmIEFCT1JUDQorI2RlZmluZSBBQk9SVCAgYWJvcnQoKQ0KKyNlbmRpZiAgLyogQUJPUlQgKi8NCisjaWZuZGVmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFDQorI2RlZmluZSBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAxDQorI2VuZGlmICAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLw0KKyNpZm5kZWYgUFJPQ0VFRF9PTl9FUlJPUg0KKyNkZWZpbmUgUFJPQ0VFRF9PTl9FUlJPUiAwDQorI2VuZGlmICAvKiBQUk9DRUVEX09OX0VSUk9SICovDQorDQorI2lmbmRlZiBJTlNFQ1VSRQ0KKyNkZWZpbmUgSU5TRUNVUkUgMA0KKyNlbmRpZiAgLyogSU5TRUNVUkUgKi8NCisjaWZuZGVmIE1BTExPQ19JTlNQRUNUX0FMTA0KKyNkZWZpbmUgTUFMTE9DX0lOU1BFQ1RfQUxMIDANCisjZW5kaWYgIC8qIE1BTExPQ19JTlNQRUNUX0FMTCAqLw0KKyNpZm5kZWYgSEFWRV9NTUFQDQorI2RlZmluZSBIQVZFX01NQVAgMQ0KKyNlbmRpZiAgLyogSEFWRV9NTUFQICovDQorI2lmbmRlZiBNTUFQX0NMRUFSUw0KKyNkZWZpbmUgTU1BUF9DTEVBUlMgMQ0KKyNlbmRpZiAgLyogTU1BUF9DTEVBUlMgKi8NCisjaWZuZGVmIEhBVkVfTVJFTUFQDQorI2lmZGVmIGxpbnV4DQorI2RlZmluZSBIQVZFX01SRU1BUCAxDQorI2RlZmluZSBfR05VX1NPVVJDRSAvKiBUdXJucyBvbiBtcmVtYXAoKSBkZWZpbml0aW9uICovDQorI2Vsc2UgICAvKiBsaW51eCAqLw0KKyNkZWZpbmUgSEFWRV9NUkVNQVAgMA0KKyNlbmRpZiAgLyogbGludXggKi8NCisjZW5kaWYgIC8qIEhBVkVfTVJFTUFQICovDQorI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04NCisjZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTiAgZXJybm8gPSBFTk9NRU07DQorI2VuZGlmICAvKiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8NCisjaWZuZGVmIEhBVkVfTU9SRUNPUkUNCisjaWYgT05MWV9NU1BBQ0VTDQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDANCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLw0KKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAxDQorI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8NCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8NCisjaWYgIUhBVkVfTU9SRUNPUkUNCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMA0KKyNlbHNlICAgLyogIUhBVkVfTU9SRUNPUkUgKi8NCisjZGVmaW5lIE1PUkVDT1JFX0RFRkFVTFQgX3NicmsNCisjaWZuZGVmIE1PUkVDT1JFX0NPTlRJR1VPVVMNCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMQ0KKyNlbmRpZiAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLw0KKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLw0KKyNpZm5kZWYgREVGQVVMVF9HUkFOVUxBUklUWQ0KKyNpZiAoTU9SRUNPUkVfQ09OVElHVU9VUyB8fCBkZWZpbmVkKFdJTjMyKSkNCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKDApICAvKiAwIG1lYW5zIHRvIGNvbXB1dGUgaW4gaW5pdF9tcGFyYW1zICovDQorI2Vsc2UgICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovDQorI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgoc2l6ZV90KTY0VSAqIChzaXplX3QpMTAyNFUpDQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovDQorI2VuZGlmICAvKiBERUZBVUxUX0dSQU5VTEFSSVRZICovDQorI2lmbmRlZiBERUZBVUxUX1RSSU1fVEhSRVNIT0xEDQorI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQ0KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAoKHNpemVfdCkyVSAqIChzaXplX3QpMTAyNFUgKiAoc2l6ZV90KTEwMjRVKQ0KKyNlbHNlICAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8NCisjZGVmaW5lIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgTUFYX1NJWkVfVA0KKyNlbmRpZiAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8NCisjZW5kaWYgIC8qIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKi8NCisjaWZuZGVmIERFRkFVTFRfTU1BUF9USFJFU0hPTEQNCisjaWYgSEFWRV9NTUFQDQorI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEICgoc2l6ZV90KTI1NlUgKiAoc2l6ZV90KTEwMjRVKQ0KKyNlbHNlICAgLyogSEFWRV9NTUFQICovDQorI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEIE1BWF9TSVpFX1QNCisjZW5kaWYgIC8qIEhBVkVfTU1BUCAqLw0KKyNlbmRpZiAgLyogREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAqLw0KKyNpZm5kZWYgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURQ0KKyNpZiBIQVZFX01NQVANCisjZGVmaW5lIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgNDA5NQ0KKyNlbHNlDQorI2RlZmluZSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIE1BWF9TSVpFX1QNCisjZW5kaWYgLyogSEFWRV9NTUFQICovDQorI2VuZGlmIC8qIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgKi8NCisjaWZuZGVmIFVTRV9CVUlMVElOX0ZGUw0KKyNkZWZpbmUgVVNFX0JVSUxUSU5fRkZTIDANCisjZW5kaWYgIC8qIFVTRV9CVUlMVElOX0ZGUyAqLw0KKyNpZm5kZWYgVVNFX0RFVl9SQU5ET00NCisjZGVmaW5lIFVTRV9ERVZfUkFORE9NIDANCisjZW5kaWYgIC8qIFVTRV9ERVZfUkFORE9NICovDQorI2lmbmRlZiBOT19NQUxMSU5GTw0KKyNkZWZpbmUgTk9fTUFMTElORk8gMA0KKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8NCisjaWZuZGVmIE1BTExJTkZPX0ZJRUxEX1RZUEUNCisjZGVmaW5lIE1BTExJTkZPX0ZJRUxEX1RZUEUgc2l6ZV90DQorI2VuZGlmICAvKiBNQUxMSU5GT19GSUVMRF9UWVBFICovDQorI2lmbmRlZiBOT19NQUxMT0NfU1RBVFMNCisjZGVmaW5lIE5PX01BTExPQ19TVEFUUyAwDQorI2VuZGlmICAvKiBOT19NQUxMT0NfU1RBVFMgKi8NCisjaWZuZGVmIE5PX1NFR01FTlRfVFJBVkVSU0FMDQorI2RlZmluZSBOT19TRUdNRU5UX1RSQVZFUlNBTCAwDQorI2VuZGlmIC8qIE5PX1NFR01FTlRfVFJBVkVSU0FMICovDQorDQorLyoNCisgIG1hbGxvcHQgdHVuaW5nIG9wdGlvbnMuICBTVklEL1hQRyBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW1ldGVyDQorICBudW1iZXJzIGZvciBtYWxsb3B0LCBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZQ0KKyAgYXJlIHVzZWQgaW4gdGhpcyBtYWxsb2MsIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhpcw0KKyAgbWFsbG9jIGRvZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG9wdGlvbnMuDQorKi8NCisNCisjZGVmaW5lIE1fVFJJTV9USFJFU0hPTEQgICAgICgtMSkNCisjZGVmaW5lIE1fR1JBTlVMQVJJVFkgICAgICAgICgtMikNCisjZGVmaW5lIE1fTU1BUF9USFJFU0hPTEQgICAgICgtMykNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFsbGluZm8gZGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKyNpZiAhTk9fTUFMTElORk8NCisvKg0KKyAgVGhpcyB2ZXJzaW9uIG9mIG1hbGxvYyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgU1ZJRC9YUEcgbWFsbGluZm8NCisgIHJvdXRpbmUgdGhhdCByZXR1cm5zIGEgc3RydWN0IGNvbnRhaW5pbmcgdXNhZ2UgcHJvcGVydGllcyBhbmQNCisgIHN0YXRpc3RpY3MuIEl0IHNob3VsZCB3b3JrIG9uIGFueSBzeXN0ZW0gdGhhdCBoYXMgYQ0KKyAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGRlZmluaW5nIHN0cnVjdCBtYWxsaW5mby4gIFRoZSBtYWluDQorICBkZWNsYXJhdGlvbiBuZWVkZWQgaXMgdGhlIG1hbGxpbmZvIHN0cnVjdCB0aGF0IGlzIHJldHVybmVkIChieS1jb3B5KQ0KKyAgYnkgbWFsbGluZm8oKS4gIFRoZSBtYWxsb2luZm8gc3RydWN0IGNvbnRhaW5zIGEgYnVuY2ggb2YgZmllbGRzIHRoYXQNCisgIGFyZSBub3QgZXZlbiBtZWFuaW5nZnVsIGluIHRoaXMgdmVyc2lvbiBvZiBtYWxsb2MuICBUaGVzZSBmaWVsZHMgYXJlDQorICBhcmUgaW5zdGVhZCBmaWxsZWQgYnkgbWFsbGluZm8oKSB3aXRoIG90aGVyIG51bWJlcnMgdGhhdCBtaWdodCBiZSBvZg0KKyAgaW50ZXJlc3QuDQorDQorICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIHNob3VsZCBiZSBzZXQgaWYgeW91IGhhdmUgYQ0KKyAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGZpbGUgdGhhdCBpbmNsdWRlcyBhIGRlY2xhcmF0aW9uIG9mIHN0cnVjdA0KKyAgbWFsbGluZm8uICBJZiBzbywgaXQgaXMgaW5jbHVkZWQ7IGVsc2UgYSBjb21wbGlhbnQgdmVyc2lvbiBpcw0KKyAgZGVjbGFyZWQgYmVsb3cuICBUaGVzZSBtdXN0IGJlIHByZWNpc2VseSB0aGUgc2FtZSBmb3IgbWFsbGluZm8oKSB0bw0KKyAgd29yay4gIFRoZSBvcmlnaW5hbCBTVklEIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3QsIGRlZmluZWQgb24gbW9zdA0KKyAgc3lzdGVtcyB3aXRoIG1hbGxpbmZvLCBkZWNsYXJlcyBhbGwgZmllbGRzIGFzIGludHMuIEJ1dCBzb21lIG90aGVycw0KKyAgZGVmaW5lIGFzIHVuc2lnbmVkIGxvbmcuIElmIHlvdXIgc3lzdGVtIGRlZmluZXMgdGhlIGZpZWxkcyB1c2luZyBhDQorICB0eXBlIG9mIGRpZmZlcmVudCB3aWR0aCB0aGFuIGxpc3RlZCBoZXJlLCB5b3UgTVVTVCAjaW5jbHVkZSB5b3VyDQorICBzeXN0ZW0gdmVyc2lvbiBhbmQgI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ILg0KKyovDQorDQorLyogI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovDQorDQorI2lmZGVmIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0gNCisjaW5jbHVkZSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIg0KKyNlbHNlIC8qIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8NCisjaWZuZGVmIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRA0KKy8qIEhQLVVYIChhbmQgb3RoZXJzPykgcmVkZWZpbmVzIG1hbGxpbmZvIHVubGVzcyBfU1RSVUNUX01BTExJTkZPIGlzIGRlZmluZWQgKi8NCisjZGVmaW5lIF9TVFJVQ1RfTUFMTElORk8NCisjZGVmaW5lIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRCAxDQorc3RydWN0IG1hbGxpbmZvDQorew0KKyAgICBNQUxMSU5GT19GSUVMRF9UWVBFIGFyZW5hOyAgICAvKiBub24tbW1hcHBlZCBzcGFjZSBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0gKi8NCisgICAgTUFMTElORk9fRklFTERfVFlQRSBvcmRibGtzOyAgLyogbnVtYmVyIG9mIGZyZWUgY2h1bmtzICovDQorICAgIE1BTExJTkZPX0ZJRUxEX1RZUEUgc21ibGtzOyAgIC8qIGFsd2F5cyAwICovDQorICAgIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa3M7ICAgIC8qIGFsd2F5cyAwICovDQorICAgIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa2hkOyAgIC8qIHNwYWNlIGluIG1tYXBwZWQgcmVnaW9ucyAqLw0KKyAgICBNQUxMSU5GT19GSUVMRF9UWVBFIHVzbWJsa3M7ICAvKiBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLw0KKyAgICBNQUxMSU5GT19GSUVMRF9UWVBFIGZzbWJsa3M7ICAvKiBhbHdheXMgMCAqLw0KKyAgICBNQUxMSU5GT19GSUVMRF9UWVBFIHVvcmRibGtzOyAvKiB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8NCisgICAgTUFMTElORk9fRklFTERfVFlQRSBmb3JkYmxrczsgLyogdG90YWwgZnJlZSBzcGFjZSAqLw0KKyAgICBNQUxMSU5GT19GSUVMRF9UWVBFIGtlZXBjb3N0OyAvKiByZWxlYXNhYmxlICh2aWEgbWFsbG9jX3RyaW0pIHNwYWNlICovDQorfTsNCisjZW5kaWYgLyogU1RSVUNUX01BTExJTkZPX0RFQ0xBUkVEICovDQorI2VuZGlmIC8qIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8NCisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8NCisNCisvKg0KKyAgVHJ5IHRvIHBlcnN1YWRlIGNvbXBpbGVycyB0byBpbmxpbmUuIFRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3INCisgIGlubGluaW5nIGFyZSBkZWZpbmVkIGFzIG1hY3Jvcywgc28gdGhlc2UgYXJlbid0IHVzZWQgZm9yIHRoZW0uDQorKi8NCisNCisjaWZuZGVmIEZPUkNFSU5MSU5FDQorI2lmIGRlZmluZWQoX19HTlVDX18pDQorI2RlZmluZSBGT1JDRUlOTElORSBfX2lubGluZSBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpDQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikNCisjZGVmaW5lIEZPUkNFSU5MSU5FIF9fZm9yY2VpbmxpbmUNCisjZW5kaWYNCisjZW5kaWYNCisjaWZuZGVmIE5PSU5MSU5FDQorI2lmIGRlZmluZWQoX19HTlVDX18pDQorI2RlZmluZSBOT0lOTElORSBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQ0KKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpDQorI2RlZmluZSBOT0lOTElORSBfX2RlY2xzcGVjKG5vaW5saW5lKQ0KKyNlbHNlDQorI2RlZmluZSBOT0lOTElORQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNpZm5kZWYgRk9SQ0VJTkxJTkUNCisjZGVmaW5lIEZPUkNFSU5MSU5FIGlubGluZQ0KKyNlbmRpZg0KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KKyNpZm5kZWYgRk9SQ0VJTkxJTkUNCisjZGVmaW5lIEZPUkNFSU5MSU5FDQorI2VuZGlmDQorDQorI2lmICFPTkxZX01TUEFDRVMNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIERlY2xhcmF0aW9ucyBvZiBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKyNpZm5kZWYgVVNFX0RMX1BSRUZJWA0KKyNkZWZpbmUgZGxjYWxsb2MgICAgICAgICAgICAgICBjYWxsb2MNCisjZGVmaW5lIGRsZnJlZSAgICAgICAgICAgICAgICAgZnJlZQ0KKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MNCisjZGVmaW5lIGRsbWVtYWxpZ24gICAgICAgICAgICAgbWVtYWxpZ24NCisjZGVmaW5lIGRscG9zaXhfbWVtYWxpZ24gICAgICAgcG9zaXhfbWVtYWxpZ24NCisjZGVmaW5lIGRscmVhbGxvYyAgICAgICAgICAgICAgcmVhbGxvYw0KKyNkZWZpbmUgZGxyZWFsbG9jX2luX3BsYWNlICAgICByZWFsbG9jX2luX3BsYWNlDQorI2RlZmluZSBkbHZhbGxvYyAgICAgICAgICAgICAgIHZhbGxvYw0KKyNkZWZpbmUgZGxwdmFsbG9jICAgICAgICAgICAgICBwdmFsbG9jDQorI2RlZmluZSBkbG1hbGxpbmZvICAgICAgICAgICAgIG1hbGxpbmZvDQorI2RlZmluZSBkbG1hbGxvcHQgICAgICAgICAgICAgIG1hbGxvcHQNCisjZGVmaW5lIGRsbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0NCisjZGVmaW5lIGRsbWFsbG9jX3N0YXRzICAgICAgICAgbWFsbG9jX3N0YXRzDQorI2RlZmluZSBkbG1hbGxvY191c2FibGVfc2l6ZSAgIG1hbGxvY191c2FibGVfc2l6ZQ0KKyNkZWZpbmUgZGxtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50DQorI2RlZmluZSBkbG1hbGxvY19tYXhfZm9vdHByaW50IG1hbGxvY19tYXhfZm9vdHByaW50DQorI2RlZmluZSBkbG1hbGxvY19mb290cHJpbnRfbGltaXQgbWFsbG9jX2Zvb3RwcmludF9saW1pdA0KKyNkZWZpbmUgZGxtYWxsb2Nfc2V0X2Zvb3RwcmludF9saW1pdCBtYWxsb2Nfc2V0X2Zvb3RwcmludF9saW1pdA0KKyNkZWZpbmUgZGxtYWxsb2NfaW5zcGVjdF9hbGwgICBtYWxsb2NfaW5zcGVjdF9hbGwNCisjZGVmaW5lIGRsaW5kZXBlbmRlbnRfY2FsbG9jICAgaW5kZXBlbmRlbnRfY2FsbG9jDQorI2RlZmluZSBkbGluZGVwZW5kZW50X2NvbWFsbG9jIGluZGVwZW5kZW50X2NvbWFsbG9jDQorI2RlZmluZSBkbGJ1bGtfZnJlZSAgICAgICAgICAgIGJ1bGtfZnJlZQ0KKyNlbmRpZiAvKiBVU0VfRExfUFJFRklYICovDQorDQorLyoNCisgIG1hbGxvYyhzaXplX3QgbikNCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yDQorICBudWxsIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSBlcnJubyBpcyBzZXQgdG8gRU5PTUVNDQorICBvbiBBTlNJIEMgc3lzdGVtcy4NCisNCisgIElmIG4gaXMgemVybywgbWFsbG9jIHJldHVybnMgYSBtaW5pbXVtLXNpemVkIGNodW5rLiAoVGhlIG1pbmltdW0NCisgIHNpemUgaXMgMTYgYnl0ZXMgb24gbW9zdCAzMmJpdCBzeXN0ZW1zLCBhbmQgMzIgYnl0ZXMgb24gNjRiaXQNCisgIHN5c3RlbXMuKSAgTm90ZSB0aGF0IHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxscyB3aXRoDQorICBhcmd1bWVudHMgdGhhdCB3b3VsZCBiZSBuZWdhdGl2ZSBpZiBzaWduZWQgYXJlIGludGVycHJldGVkIGFzDQorICByZXF1ZXN0cyBmb3IgaHVnZSBhbW91bnRzIG9mIHNwYWNlLCB3aGljaCB3aWxsIG9mdGVuIGZhaWwuIFRoZQ0KKyAgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbiBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBidXQgaXMgaW4gYWxsDQorICBjYXNlcyBsZXNzIHRoYW4gdGhlIG1heGltdW0gcmVwcmVzZW50YWJsZSB2YWx1ZSBvZiBhIHNpemVfdC4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICpkbG1hbGxvYyhzaXplX3QpOw0KKw0KKy8qDQorICBmcmVlKHZvaWQqIHApDQorICBSZWxlYXNlcyB0aGUgY2h1bmsgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgcCwgdGhhdCBoYWQgYmVlbiBwcmV2aW91c2x5DQorICBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jIG9yIGEgcmVsYXRlZCByb3V0aW5lIHN1Y2ggYXMgcmVhbGxvYy4NCisgIEl0IGhhcyBubyBlZmZlY3QgaWYgcCBpcyBudWxsLiBJZiBwIHdhcyBub3QgbWFsbG9jZWQgb3IgYWxyZWFkeQ0KKyAgZnJlZWQsIGZyZWUocCkgd2lsbCBieSBkZWZhdWx0IGNhdXNlIHRoZSBjdXJyZW50IHByb2dyYW0gdG8gYWJvcnQuDQorKi8NCitETE1BTExPQ19FWFBPUlQgdm9pZCAgZGxmcmVlKHZvaWQgKik7DQorDQorLyoNCisgIGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7DQorICBSZXR1cm5zIGEgcG9pbnRlciB0byBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplIGJ5dGVzLCB3aXRoIGFsbCBsb2NhdGlvbnMNCisgIHNldCB0byB6ZXJvLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgKmRsY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsNCisNCisvKg0KKyAgcmVhbGxvYyh2b2lkKiBwLCBzaXplX3QgbikNCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQ0KKyAgYXMgZG9lcyBjaHVuayBwIHVwIHRvIHRoZSBtaW5pbXVtIG9mIChuLCBwJ3Mgc2l6ZSkgYnl0ZXMsIG9yIG51bGwNCisgIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZS4NCisNCisgIFRoZSByZXR1cm5lZCBwb2ludGVyIG1heSBvciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHAuIFRoZSBhbGdvcml0aG0NCisgIHByZWZlcnMgZXh0ZW5kaW5nIHAgaW4gbW9zdCBjYXNlcyB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2UgaXQNCisgIGVtcGxveXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLg0KKw0KKyAgSWYgcCBpcyBudWxsLCByZWFsbG9jIGlzIGVxdWl2YWxlbnQgdG8gbWFsbG9jLg0KKw0KKyAgSWYgc3BhY2UgaXMgbm90IGF2YWlsYWJsZSwgcmVhbGxvYyByZXR1cm5zIG51bGwsIGVycm5vIGlzIHNldCAoaWYgb24NCisgIEFOU0kpIGFuZCBwIGlzIE5PVCBmcmVlZC4NCisNCisgIGlmIG4gaXMgZm9yIGZld2VyIGJ5dGVzIHRoYW4gYWxyZWFkeSBoZWxkIGJ5IHAsIHRoZSBuZXdseSB1bnVzZWQNCisgIHNwYWNlIGlzIGxvcHBlZCBvZmYgYW5kIGZyZWVkIGlmIHBvc3NpYmxlLiAgcmVhbGxvYyB3aXRoIGEgc2l6ZQ0KKyAgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4NCisNCisgIFRoZSBvbGQgdW5peCByZWFsbG9jIGNvbnZlbnRpb24gb2YgYWxsb3dpbmcgdGhlIGxhc3QtZnJlZSdkIGNodW5rDQorICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICpkbHJlYWxsb2Modm9pZCAqLCBzaXplX3QpOw0KKw0KKy8qDQorICByZWFsbG9jX2luX3BsYWNlKHZvaWQqIHAsIHNpemVfdCBuKQ0KKyAgUmVzaXplcyB0aGUgc3BhY2UgYWxsb2NhdGVkIGZvciBwIHRvIHNpemUgbiwgb25seSBpZiB0aGlzIGNhbiBiZQ0KKyAgZG9uZSB3aXRob3V0IG1vdmluZyBwIChpLmUuLCBvbmx5IGlmIHRoZXJlIGlzIGFkamFjZW50IHNwYWNlDQorICBhdmFpbGFibGUgaWYgbiBpcyBncmVhdGVyIHRoYW4gcCdzIGN1cnJlbnQgYWxsb2NhdGVkIHNpemUsIG9yIG4gaXMNCisgIGxlc3MgdGhhbiBvciBlcXVhbCB0byBwJ3Mgc2l6ZSkuIFRoaXMgbWF5IGJlIHVzZWQgaW5zdGVhZCBvZiBwbGFpbg0KKyAgcmVhbGxvYyBpZiBhbiBhbHRlcm5hdGl2ZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIG5lZWRlZCB1cG9uIGZhaWx1cmUNCisgIHRvIGV4cGFuZCBzcGFjZTsgZm9yIGV4YW1wbGUsIHJlYWxsb2NhdGlvbiBvZiBhIGJ1ZmZlciB0aGF0IG11c3QgYmUNCisgIG1lbW9yeS1hbGlnbmVkIG9yIGNsZWFyZWQuIFlvdSBjYW4gdXNlIHJlYWxsb2NfaW5fcGxhY2UgdG8gdHJpZ2dlcg0KKyAgdGhlc2UgYWx0ZXJuYXRpdmVzIG9ubHkgd2hlbiBuZWVkZWQuDQorDQorICBSZXR1cm5zIHAgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlIG51bGwuDQorKi8NCitETE1BTExPQ19FWFBPUlQgdm9pZCAqZGxyZWFsbG9jX2luX3BsYWNlKHZvaWQgKiwgc2l6ZV90KTsNCisNCisvKg0KKyAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IG4pOw0KKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgY2h1bmsgb2YgbiBieXRlcywgYWxpZ25lZA0KKyAgaW4gYWNjb3JkIHdpdGggdGhlIGFsaWdubWVudCBhcmd1bWVudC4NCisNCisgIFRoZSBhbGlnbm1lbnQgYXJndW1lbnQgc2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLiBJZiB0aGUgYXJndW1lbnQgaXMNCisgIG5vdCBhIHBvd2VyIG9mIHR3bywgdGhlIG5lYXJlc3QgZ3JlYXRlciBwb3dlciBpcyB1c2VkLg0KKyAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0DQorICBib3RoZXIgY2FsbGluZyBtZW1hbGlnbiB3aXRoIGFuIGFyZ3VtZW50IG9mIDggb3IgbGVzcy4NCisNCisgIE92ZXJyZWxpYW5jZSBvbiBtZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgKmRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOw0KKw0KKy8qDQorICBpbnQgcG9zaXhfbWVtYWxpZ24odm9pZCoqIHBwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgbik7DQorICBBbGxvY2F0ZXMgYSBjaHVuayBvZiBuIGJ5dGVzLCBhbGlnbmVkIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQNCisgIGFyZ3VtZW50LiBEaWZmZXJzIGZyb20gbWVtYWxpZ24gb25seSBpbiB0aGF0IGl0ICgxKSBhc3NpZ25zIHRoZQ0KKyAgYWxsb2NhdGVkIG1lbW9yeSB0byAqcHAgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGl0LCAoMikgZmFpbHMgYW5kDQorICByZXR1cm5zIEVJTlZBTCBpZiB0aGUgYWxpZ25tZW50IGlzIG5vdCBhIHBvd2VyIG9mIHR3byAoMykgZmFpbHMgYW5kDQorICByZXR1cm5zIEVOT01FTSBpZiBtZW1vcnkgY2Fubm90IGJlIGFsbG9jYXRlZC4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCBpbnQgZGxwb3NpeF9tZW1hbGlnbih2b2lkICoqLCBzaXplX3QsIHNpemVfdCk7DQorDQorLyoNCisgIHZhbGxvYyhzaXplX3Qgbik7DQorICBFcXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhlIHBhZ2UNCisgIHNpemUgb2YgdGhlIHN5c3RlbS4gSWYgdGhlIHBhZ2VzaXplIGlzIHVua25vd24sIDQwOTYgaXMgdXNlZC4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICpkbHZhbGxvYyhzaXplX3QpOw0KKw0KKy8qDQorICBtYWxsb3B0KGludCBwYXJhbWV0ZXJfbnVtYmVyLCBpbnQgcGFyYW1ldGVyX3ZhbHVlKQ0KKyAgU2V0cyB0dW5hYmxlIHBhcmFtZXRlcnMgVGhlIGZvcm1hdCBpcyB0byBwcm92aWRlIGENCisgIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRoZW4gc2V0cyB0aGUNCisgIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBhcmd1bWVudCB2YWx1ZSBpZiBpdCBjYW4gKGkuZS4sIHNvDQorICBsb25nIGFzIHRoZSB2YWx1ZSBpcyBtZWFuaW5nZnVsKSwgYW5kIHJldHVybnMgMSBpZiBzdWNjZXNzZnVsIGVsc2UNCisgIDAuICBUbyB3b3JrYXJvdW5kIHRoZSBmYWN0IHRoYXQgbWFsbG9wdCBpcyBzcGVjaWZpZWQgdG8gdXNlIGludCwNCisgIG5vdCBzaXplX3QgcGFyYW1ldGVycywgdGhlIHZhbHVlIC0xIGlzIHNwZWNpYWxseSB0cmVhdGVkIGFzIHRoZQ0KKyAgbWF4aW11bSB1bnNpZ25lZCBzaXplX3QgdmFsdWUuDQorDQorICBTVklEL1hQRy9BTlNJIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbSBudW1iZXJzIGZvciBtYWxsb3B0LA0KKyAgbm9ybWFsbHkgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE5vbmUgb2YgdGhlc2UgYXJlIHVzZSBpbiB0aGlzIG1hbGxvYywNCisgIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhpcyBtYWxsb2MgYWxzbyBzdXBwb3J0cyBvdGhlcg0KKyAgb3B0aW9ucyBpbiBtYWxsb3B0LiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuICBCcmllZmx5LCBzdXBwb3J0ZWQNCisgIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3MgKGxpc3RlZCBkZWZhdWx0cyBhcmUgZm9yICJ0eXBpY2FsIg0KKyAgY29uZmlndXJhdGlvbnMpLg0KKw0KKyAgU3ltYm9sICAgICAgICAgICAgcGFyYW0gIyAgZGVmYXVsdCAgICBhbGxvd2VkIHBhcmFtIHZhbHVlcw0KKyAgTV9UUklNX1RIUkVTSE9MRCAgICAgLTEgICAyKjEwMjQqMTAyNCAgIGFueSAgICgtMSBkaXNhYmxlcykNCisgIE1fR1JBTlVMQVJJVFkgICAgICAgIC0yICAgICBwYWdlIHNpemUgICBhbnkgcG93ZXIgb2YgMiA+PSBwYWdlIHNpemUNCisgIE1fTU1BUF9USFJFU0hPTEQgICAgIC0zICAgICAgMjU2KjEwMjQgICBhbnkgICAob3IgMCBpZiBubyBNTUFQIHN1cHBvcnQpDQorKi8NCitETE1BTExPQ19FWFBPUlQgaW50IGRsbWFsbG9wdChpbnQsIGludCk7DQorDQorLyoNCisgIG1hbGxvY19mb290cHJpbnQoKTsNCisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgdG90YWwNCisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYnkgbWFsbG9jLCByZWFsbG9jIGV0Yy4sIGlzIGxlc3MgdGhhbiB0aGlzDQorICB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkDQorICByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4NCisgIEV2ZW4gaWYgbG9ja3MgYXJlIG90aGVyd2lzZSBkZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSB0aGVtLA0KKyAgc28gcmVzdWx0cyBtaWdodCBub3QgYmUgdXAgdG8gZGF0ZS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCBzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KHZvaWQpOw0KKw0KKy8qDQorICBtYWxsb2NfbWF4X2Zvb3RwcmludCgpOw0KKyAgUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGlzDQorICB2YWx1ZSB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBjdXJyZW50IGZvb3RwcmludCBpZiBkZWFsbG9jYXRlZCBzcGFjZQ0KKyAgaGFzIGJlZW4gcmVjbGFpbWVkIGJ5IHRoZSBzeXN0ZW0uIFRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQNCisgIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcyB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLA0KKyAgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZCByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQNCisgIGZyZXF1ZW50bHkgdG8gbW9uaXRvciBtZW1vcnkgY29uc3VtcHRpb24uICBFdmVuIGlmIGxvY2tzIGFyZQ0KKyAgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sIHNvIHJlc3VsdHMgbWlnaHQNCisgIG5vdCBiZSB1cCB0byBkYXRlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHNpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpOw0KKw0KKy8qDQorICBtYWxsb2NfZm9vdHByaW50X2xpbWl0KCk7DQorICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgaGVhcCBpcyBhbGxvd2VkIHRvIG9idGFpbiBmcm9tDQorICB0aGUgc3lzdGVtLCByZXR1cm5pbmcgdGhlIGxhc3QgdmFsdWUgcmV0dXJuZWQgYnkNCisgIG1hbGxvY19zZXRfZm9vdHByaW50X2xpbWl0LCBvciB0aGUgbWF4aW11bSBzaXplX3QgdmFsdWUgaWYNCisgIG5ldmVyIHNldC4gVGhlIHJldHVybmVkIHZhbHVlIHJlZmxlY3RzIGEgcGVybWlzc2lvbi4gVGhlcmUgaXMgbm8NCisgIGd1YXJhbnRlZSB0aGF0IHRoaXMgbnVtYmVyIG9mIGJ5dGVzIGNhbiBhY3R1YWxseSBiZSBvYnRhaW5lZCBmcm9tDQorICB0aGUgc3lzdGVtLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHNpemVfdCBkbG1hbGxvY19mb290cHJpbnRfbGltaXQoKTsNCisNCisvKg0KKyAgbWFsbG9jX3NldF9mb290cHJpbnRfbGltaXQoKTsNCisgIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIG9idGFpbiBmcm9tIHRoZSBzeXN0ZW0sIGNhdXNpbmcNCisgIGZhaWx1cmUgcmV0dXJucyBmcm9tIG1hbGxvYyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdXBvbiBhdHRlbXB0cyB0bw0KKyAgZXhjZWVkIHRoaXMgdmFsdWUuIFRoZSBhcmd1bWVudCB2YWx1ZSBtYXkgYmUgc3ViamVjdCB0byBwYWdlDQorICByb3VuZGluZyB0byBhbiBlbmZvcmNlYWJsZSBsaW1pdDsgdGhpcyBhY3R1YWwgdmFsdWUgaXMgcmV0dXJuZWQuDQorICBVc2luZyBhbiBhcmd1bWVudCBvZiB0aGUgbWF4aW11bSBwb3NzaWJsZSBzaXplX3QgZWZmZWN0aXZlbHkNCisgIGRpc2FibGVzIGNoZWNrcy4gSWYgdGhlIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUNCisgIGN1cnJlbnQgbWFsbG9jX2Zvb3RwcmludCwgdGhlbiBhbGwgZnV0dXJlIGFsbG9jYXRpb25zIHRoYXQgcmVxdWlyZQ0KKyAgYWRkaXRpb25hbCBzeXN0ZW0gbWVtb3J5IHdpbGwgZmFpbC4gSG93ZXZlciwgaW52b2NhdGlvbiBjYW5ub3QNCisgIHJldHJvYWN0aXZlbHkgZGVhbGxvY2F0ZSBleGlzdGluZyB1c2VkIG1lbW9yeS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCBzaXplX3QgZGxtYWxsb2Nfc2V0X2Zvb3RwcmludF9saW1pdChzaXplX3QgYnl0ZXMpOw0KKw0KKyNpZiBNQUxMT0NfSU5TUEVDVF9BTEwNCisvKg0KKyAgbWFsbG9jX2luc3BlY3RfYWxsKHZvaWQoKmhhbmRsZXIpKHZvaWQgKnN0YXJ0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmVuZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNlZF9ieXRlcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjYWxsYmFja19hcmcpLA0KKyAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhcmcpOw0KKyAgVHJhdmVyc2VzIHRoZSBoZWFwIGFuZCBjYWxscyB0aGUgZ2l2ZW4gaGFuZGxlciBmb3IgZWFjaCBtYW5hZ2VkDQorICByZWdpb24sIHNraXBwaW5nIGFsbCBieXRlcyB0aGF0IGFyZSAob3IgbWF5IGJlKSB1c2VkIGZvciBib29ra2VlcGluZw0KKyAgcHVycG9zZXMuICBUcmF2ZXJzYWwgZG9lcyBub3QgaW5jbHVkZSBpbmNsdWRlIGNodW5rcyB0aGF0IGhhdmUgYmVlbg0KKyAgZGlyZWN0bHkgbWVtb3J5IG1hcHBlZC4gRWFjaCByZXBvcnRlZCByZWdpb24gYmVnaW5zIGF0IHRoZSBzdGFydA0KKyAgYWRkcmVzcywgYW5kIGNvbnRpbnVlcyB1cCB0byBidXQgbm90IGluY2x1ZGluZyB0aGUgZW5kIGFkZHJlc3MuICBUaGUNCisgIGZpcnN0IHVzZWRfYnl0ZXMgb2YgdGhlIHJlZ2lvbiBjb250YWluIGFsbG9jYXRlZCBkYXRhLiBJZg0KKyAgdXNlZF9ieXRlcyBpcyB6ZXJvLCB0aGUgcmVnaW9uIGlzIHVuYWxsb2NhdGVkLiBUaGUgaGFuZGxlciBpcw0KKyAgaW52b2tlZCB3aXRoIHRoZSBnaXZlbiBjYWxsYmFjayBhcmd1bWVudC4gSWYgbG9ja3MgYXJlIGRlZmluZWQsIHRoZXkNCisgIGFyZSBoZWxkIGR1cmluZyB0aGUgZW50aXJlIHRyYXZlcnNhbC4gSXQgaXMgYSBiYWQgaWRlYSB0byBpbnZva2UNCisgIG90aGVyIG1hbGxvYyBmdW5jdGlvbnMgZnJvbSB3aXRoaW4gdGhlIGhhbmRsZXIuDQorDQorICBGb3IgZXhhbXBsZSwgdG8gY291bnQgdGhlIG51bWJlciBvZiBpbi11c2UgY2h1bmtzIHdpdGggc2l6ZSBncmVhdGVyDQorICB0aGFuIDEwMDAsIHlvdSBjb3VsZCB3cml0ZToNCisgIHN0YXRpYyBpbnQgY291bnQgPSAwOw0KKyAgdm9pZCBjb3VudF9jaHVua3Modm9pZCogc3RhcnQsIHZvaWQqIGVuZCwgc2l6ZV90IHVzZWQsIHZvaWQqIGFyZykgew0KKyAgICBpZiAodXNlZCA+PSAxMDAwKSArK2NvdW50Ow0KKyAgfQ0KKyAgdGhlbjoNCisgICAgbWFsbG9jX2luc3BlY3RfYWxsKGNvdW50X2NodW5rcywgTlVMTCk7DQorDQorICBtYWxsb2NfaW5zcGVjdF9hbGwgaXMgY29tcGlsZWQgb25seSBpZiBNQUxMT0NfSU5TUEVDVF9BTEwgaXMgZGVmaW5lZC4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkIGRsbWFsbG9jX2luc3BlY3RfYWxsKHZvaWQoKmhhbmRsZXIpKHZvaWQgKiwgdm9pZCAqLCBzaXplX3QsIHZvaWQgKiksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsNCisNCisjZW5kaWYgLyogTUFMTE9DX0lOU1BFQ1RfQUxMICovDQorDQorI2lmICFOT19NQUxMSU5GTw0KKy8qDQorICBtYWxsaW5mbygpDQorICBSZXR1cm5zIChieSBjb3B5KSBhIHN0cnVjdCBjb250YWluaW5nIHZhcmlvdXMgc3VtbWFyeSBzdGF0aXN0aWNzOg0KKw0KKyAgYXJlbmE6ICAgICBjdXJyZW50IHRvdGFsIG5vbi1tbWFwcGVkIGJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5c3RlbQ0KKyAgb3JkYmxrczogICB0aGUgbnVtYmVyIG9mIGZyZWUgY2h1bmtzDQorICBzbWJsa3M6ICAgIGFsd2F5cyB6ZXJvLg0KKyAgaGJsa3M6ICAgICBjdXJyZW50IG51bWJlciBvZiBtbWFwcGVkIHJlZ2lvbnMNCisgIGhibGtoZDogICAgdG90YWwgYnl0ZXMgaGVsZCBpbiBtbWFwcGVkIHJlZ2lvbnMNCisgIHVzbWJsa3M6ICAgdGhlIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlLiBUaGlzIHdpbGwgYmUgZ3JlYXRlcg0KKyAgICAgICAgICAgICAgICB0aGFuIGN1cnJlbnQgdG90YWwgaWYgdHJpbW1pbmcgaGFzIG9jY3VycmVkLg0KKyAgZnNtYmxrczogICBhbHdheXMgemVybw0KKyAgdW9yZGJsa3M6ICBjdXJyZW50IHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAobm9ybWFsIG9yIG1tYXBwZWQpDQorICBmb3JkYmxrczogIHRvdGFsIGZyZWUgc3BhY2UNCisgIGtlZXBjb3N0OiAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgaWRlYWxseSBiZSByZWxlYXNlZA0KKyAgICAgICAgICAgICAgIGJhY2sgdG8gc3lzdGVtIHZpYSBtYWxsb2NfdHJpbS4gKCJpZGVhbGx5IiBtZWFucyB0aGF0DQorICAgICAgICAgICAgICAgaXQgaWdub3JlcyBwYWdlIHJlc3RyaWN0aW9ucyBldGMuKQ0KKw0KKyAgQmVjYXVzZSB0aGVzZSBmaWVsZHMgYXJlIGludHMsIGJ1dCBpbnRlcm5hbCBib29ra2VlcGluZyBtYXkNCisgIGJlIGtlcHQgYXMgbG9uZ3MsIHRoZSByZXBvcnRlZCB2YWx1ZXMgbWF5IHdyYXAgYXJvdW5kIHplcm8gYW5kDQorICB0aHVzIGJlIGluYWNjdXJhdGUuDQorKi8NCitETE1BTExPQ19FWFBPUlQgc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCk7DQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovDQorDQorLyoNCisgIGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSwgdm9pZCogY2h1bmtzW10pOw0KKw0KKyAgaW5kZXBlbmRlbnRfY2FsbG9jIGlzIHNpbWlsYXIgdG8gY2FsbG9jLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYQ0KKyAgc2luZ2xlIGNsZWFyZWQgc3BhY2UsIGl0IHJldHVybnMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gbl9lbGVtZW50cw0KKyAgaW5kZXBlbmRlbnQgZWxlbWVudHMgdGhhdCBjYW4gaG9sZCBjb250ZW50cyBvZiBzaXplIGVsZW1fc2l6ZSwgZWFjaA0KKyAgb2Ygd2hpY2ggc3RhcnRzIG91dCBjbGVhcmVkLCBhbmQgY2FuIGJlIGluZGVwZW5kZW50bHkgZnJlZWQsDQorICByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFkamFjZW50bHkNCisgIGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRoIG11bHRpcGxlIGNhbGxvY3Mgb3INCisgIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5IGluIHNvbWUNCisgIGFwcGxpY2F0aW9ucy4NCisNCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwsIHdoaWNoIGlzDQorICBwcm9iYWJseSB0aGUgbW9zdCB0eXBpY2FsIHVzYWdlKS4gSWYgaXQgaXMgbnVsbCwgdGhlIHJldHVybmVkIGFycmF5DQorICBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYWxzbyBiZSBmcmVlZCB3aGVuIGl0IGlzDQorICBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkgbXVzdCBiZSBvZiBhdCBsZWFzdA0KKyAgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBwb2ludGVycyB0byB0aGUNCisgIGNodW5rcy4NCisNCisgIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jYWxsb2MgcmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yDQorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgImNodW5rcyINCisgIGlzIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzDQorICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLg0KKw0KKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGlzIGNhbiBiZQ0KKyAgZG9uZSBhbGwgYXQgb25jZSB1c2luZyBidWxrX2ZyZWUuDQorDQorICBpbmRlcGVuZGVudF9jYWxsb2Mgc2ltcGxpZmllcyBhbmQgc3BlZWRzIHVwIGltcGxlbWVudGF0aW9ucyBvZiBtYW55DQorICBraW5kcyBvZiBwb29scy4gIEl0IG1heSBhbHNvIGJlIHVzZWZ1bCB3aGVuIGNvbnN0cnVjdGluZyBsYXJnZSBkYXRhDQorICBzdHJ1Y3R1cmVzIHRoYXQgaW5pdGlhbGx5IGhhdmUgYSBmaXhlZCBudW1iZXIgb2YgZml4ZWQtc2l6ZWQgbm9kZXMsDQorICBidXQgdGhlIG51bWJlciBpcyBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLCBhbmQgc29tZSBvZiB0aGUgbm9kZXMNCisgIG1heSBsYXRlciBuZWVkIHRvIGJlIGZyZWVkLiBGb3IgZXhhbXBsZToNCisNCisgIHN0cnVjdCBOb2RlIHsgaW50IGl0ZW07IHN0cnVjdCBOb2RlKiBuZXh0OyB9Ow0KKw0KKyAgc3RydWN0IE5vZGUqIGJ1aWxkX2xpc3QoKSB7DQorICAgIHN0cnVjdCBOb2RlKiogcG9vbDsNCisgICAgaW50IG4gPSByZWFkX251bWJlcl9vZl9ub2Rlc19uZWVkZWQoKTsNCisgICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7DQorICAgIHBvb2wgPSAoc3RydWN0IE5vZGUqKikoaW5kZXBlbmRlbnRfY2FsbG9jKG4sIHNpemVvZihzdHJ1Y3QgTm9kZSksIDApOw0KKyAgICBpZiAocG9vbCA9PSAwKSBkaWUoKTsNCisgICAgLy8gb3JnYW5pemUgaW50byBhIGxpbmtlZCBsaXN0Li4uDQorICAgIHN0cnVjdCBOb2RlKiBmaXJzdCA9IHBvb2xbMF07DQorICAgIGZvciAoaSA9IDA7IGkgPCBuLTE7ICsraSkNCisgICAgICBwb29sW2ldLT5uZXh0ID0gcG9vbFtpKzFdOw0KKyAgICBmcmVlKHBvb2wpOyAgICAgLy8gQ2FuIG5vdyBmcmVlIHRoZSBhcnJheSAob3Igbm90LCBpZiBpdCBpcyBuZWVkZWQgbGF0ZXIpDQorICAgIHJldHVybiBmaXJzdDsNCisgIH0NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICoqZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90LCBzaXplX3QsIHZvaWQgKiopOw0KKw0KKy8qDQorICBpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKTsNCisNCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGFsbG9jYXRlcywgYWxsIGF0IG9uY2UsIGEgc2V0IG9mIG5fZWxlbWVudHMNCisgIGNodW5rcyB3aXRoIHNpemVzIGluZGljYXRlZCBpbiB0aGUgInNpemVzIiBhcnJheS4gICAgSXQgcmV0dXJucw0KKyAgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlc2UgZWxlbWVudHMsIGVhY2ggb2Ygd2hpY2ggY2FuIGJlDQorICBpbmRlcGVuZGVudGx5IGZyZWVkLCByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvDQorICBiZSBhZGphY2VudGx5IGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRoDQorICBtdWx0aXBsZSBjYWxsb2NzIG9yIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5DQorICBpbiBzb21lIGFwcGxpY2F0aW9ucy4NCisNCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwpLiBJZiBpdCBpcyBudWxsDQorICB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28NCisgIGJlIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5DQorICBtdXN0IGJlIG9mIGF0IGxlYXN0IG5fZWxlbWVudHMgaW4gbGVuZ3RoLiBJdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUNCisgIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MuDQorDQorICBJbiBlaXRoZXIgY2FzZSwgaW5kZXBlbmRlbnRfY29tYWxsb2MgcmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yDQorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgY2h1bmtzIGlzDQorICBudWxsLCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cw0KKyAgKHdoaWNoIHNob3VsZCBiZSBmcmVlZCBpZiBub3Qgd2FudGVkKS4NCisNCisgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBjYW4gYmUNCisgIGRvbmUgYWxsIGF0IG9uY2UgdXNpbmcgYnVsa19mcmVlLg0KKw0KKyAgaW5kZXBlbmRlbnRfY29tYWxsYWMgZGlmZmVycyBmcm9tIGluZGVwZW5kZW50X2NhbGxvYyBpbiB0aGF0IGVhY2gNCisgIGVsZW1lbnQgbWF5IGhhdmUgYSBkaWZmZXJlbnQgc2l6ZSwgYW5kIGFsc28gdGhhdCBpdCBkb2VzIG5vdA0KKyAgYXV0b21hdGljYWxseSBjbGVhciBlbGVtZW50cy4NCisNCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBiZSB1c2VkIHRvIHNwZWVkIHVwIGFsbG9jYXRpb24gaW4gY2FzZXMNCisgIHdoZXJlIHNldmVyYWwgc3RydWN0cyBvciBvYmplY3RzIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBhdCB0aGUNCisgIHNhbWUgdGltZS4gIEZvciBleGFtcGxlOg0KKw0KKyAgc3RydWN0IEhlYWQgeyAuLi4gfQ0KKyAgc3RydWN0IEZvb3QgeyAuLi4gfQ0KKw0KKyAgdm9pZCBzZW5kX21lc3NhZ2UoY2hhciogbXNnKSB7DQorICAgIGludCBtc2dsZW4gPSBzdHJsZW4obXNnKTsNCisgICAgc2l6ZV90IHNpemVzWzNdID0geyBzaXplb2Yoc3RydWN0IEhlYWQpLCBtc2dsZW4sIHNpemVvZihzdHJ1Y3QgRm9vdCkgfTsNCisgICAgdm9pZCogY2h1bmtzWzNdOw0KKyAgICBpZiAoaW5kZXBlbmRlbnRfY29tYWxsb2MoMywgc2l6ZXMsIGNodW5rcykgPT0gMCkNCisgICAgICBkaWUoKTsNCisgICAgc3RydWN0IEhlYWQqIGhlYWQgPSAoc3RydWN0IEhlYWQqKShjaHVua3NbMF0pOw0KKyAgICBjaGFyKiAgICAgICAgYm9keSA9IChjaGFyKikoY2h1bmtzWzFdKTsNCisgICAgc3RydWN0IEZvb3QqIGZvb3QgPSAoc3RydWN0IEZvb3QqKShjaHVua3NbMl0pOw0KKyAgICAvLyAuLi4NCisgIH0NCisNCisgIEluIGdlbmVyYWwgdGhvdWdoLCBpbmRlcGVuZGVudF9jb21hbGxvYyBpcyB3b3J0aCB1c2luZyBvbmx5IGZvcg0KKyAgbGFyZ2VyIHZhbHVlcyBvZiBuX2VsZW1lbnRzLiBGb3Igc21hbGwgdmFsdWVzLCB5b3UgcHJvYmFibHkgd29uJ3QNCisgIGRldGVjdCBlbm91Z2ggZGlmZmVyZW5jZSBmcm9tIHNlcmllcyBvZiBtYWxsb2MgY2FsbHMgdG8gYm90aGVyLg0KKw0KKyAgT3ZlcnVzZSBvZiBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gaW5jcmVhc2Ugb3ZlcmFsbCBtZW1vcnkgdXNhZ2UsDQorICBzaW5jZSBpdCBjYW5ub3QgcmV1c2UgZXhpc3Rpbmcgbm9uY29udGlndW91cyBzbWFsbCBjaHVua3MgdGhhdA0KKyAgbWlnaHQgYmUgYXZhaWxhYmxlIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cy4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICoqZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QsIHNpemVfdCAqLCB2b2lkICoqKTsNCisNCisvKg0KKyAgYnVsa19mcmVlKHZvaWQqIGFycmF5W10sIHNpemVfdCBuX2VsZW1lbnRzKQ0KKyAgRnJlZXMgYW5kIGNsZWFycyAoc2V0cyB0byBudWxsKSBlYWNoIG5vbi1udWxsIHBvaW50ZXIgaW4gdGhlIGdpdmVuDQorICBhcnJheS4gIFRoaXMgaXMgbGlrZWx5IHRvIGJlIGZhc3RlciB0aGFuIGZyZWVpbmcgdGhlbSBvbmUtYnktb25lLg0KKyAgSWYgZm9vdGVycyBhcmUgdXNlZCwgcG9pbnRlcnMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIGluIGRpZmZlcmVudA0KKyAgbXNwYWNlcyBhcmUgbm90IGZyZWVkIG9yIGNsZWFyZWQsIGFuZCB0aGUgY291bnQgb2YgYWxsIHN1Y2ggcG9pbnRlcnMNCisgIGlzIHJldHVybmVkLiAgRm9yIGxhcmdlIGFycmF5cyBvZiBwb2ludGVycyB3aXRoIHBvb3IgbG9jYWxpdHksIGl0DQorICBtYXkgYmUgd29ydGh3aGlsZSB0byBzb3J0IHRoaXMgYXJyYXkgYmVmb3JlIGNhbGxpbmcgYnVsa19mcmVlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHNpemVfdCAgZGxidWxrX2ZyZWUodm9pZCAqKiwgc2l6ZV90IG5fZWxlbWVudHMpOw0KKw0KKy8qDQorICBwdmFsbG9jKHNpemVfdCBuKTsNCisgIEVxdWl2YWxlbnQgdG8gdmFsbG9jKG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywNCisgIHJvdW5kIHVwIG4gdG8gbmVhcmVzdCBwYWdlc2l6ZS4NCisgKi8NCitETE1BTExPQ19FWFBPUlQgdm9pZCAgKmRscHZhbGxvYyhzaXplX3QpOw0KKw0KKy8qDQorICBtYWxsb2NfdHJpbShzaXplX3QgcGFkKTsNCisNCisgIElmIHBvc3NpYmxlLCBnaXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzDQorICB0byBzYnJrKSBpZiB0aGVyZSBpcyB1bnVzZWQgbWVtb3J5IGF0IHRoZSBgaGlnaCcgZW5kIG9mIHRoZSBtYWxsb2MNCisgIHBvb2wgb3IgaW4gdW51c2VkIE1NQVAgc2VnbWVudHMuIFlvdSBjYW4gY2FsbCB0aGlzIGFmdGVyIGZyZWVpbmcNCisgIGxhcmdlIGJsb2NrcyBvZiBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5DQorICByZXF1aXJlbWVudHMgb2YgYSBwcm9ncmFtLiBIb3dldmVyLCBpdCBjYW5ub3QgZ3VhcmFudGVlIHRvIHJlZHVjZQ0KKyAgbWVtb3J5LiBVbmRlciBzb21lIGFsbG9jYXRpb24gcGF0dGVybnMsIHNvbWUgbGFyZ2UgZnJlZSBibG9ja3Mgb2YNCisgIG1lbW9yeSB3aWxsIGJlIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUNCisgIGdpdmVuIGJhY2sgdG8gdGhlIHN5c3RlbS4NCisNCisgIFRoZSBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJlZQ0KKyAgdHJhaWxpbmcgc3BhY2UgdG8gbGVhdmUgdW50cmltbWVkLiBJZiB0aGlzIGFyZ3VtZW50IGlzIHplcm8sIG9ubHkNCisgIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBtZW1vcnkgdG8gbWFpbnRhaW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzDQorICB3aWxsIGJlIGxlZnQuIE5vbi16ZXJvIGFyZ3VtZW50cyBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoDQorICB0cmFpbGluZyBzcGFjZSB0byBzZXJ2aWNlIGZ1dHVyZSBleHBlY3RlZCBhbGxvY2F0aW9ucyB3aXRob3V0IGhhdmluZw0KKyAgdG8gcmUtb2J0YWluIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uDQorDQorICBNYWxsb2NfdHJpbSByZXR1cm5zIDEgaWYgaXQgYWN0dWFsbHkgcmVsZWFzZWQgYW55IG1lbW9yeSwgZWxzZSAwLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIGludCAgZGxtYWxsb2NfdHJpbShzaXplX3QpOw0KKw0KKy8qDQorICBtYWxsb2Nfc3RhdHMoKTsNCisgIFByaW50cyBvbiBzdGRlcnIgdGhlIGFtb3VudCBvZiBzcGFjZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0gKGJvdGgNCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuDQorICBjdXJyZW50IGlmIG1hbGxvY190cmltIGFuZC9vciBtdW5tYXAgZ290IGNhbGxlZCksIGFuZCB0aGUgY3VycmVudA0KKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCB2aWEgbWFsbG9jIChvciByZWFsbG9jLCBldGMpIGJ1dCBub3QgeWV0DQorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUNCisgIG51bWJlciByZXF1ZXN0ZWQuIEl0IHdpbGwgYmUgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQNCisgIGJlY2F1c2Ugb2YgYWxpZ25tZW50IGFuZCBib29ra2VlcGluZyBvdmVyaGVhZC4gQmVjYXVzZSBpdCBpbmNsdWRlcw0KKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuDQorICB6ZXJvIGV2ZW4gd2hlbiBubyB1c2VyLWxldmVsIGNodW5rcyBhcmUgYWxsb2NhdGVkLg0KKw0KKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZg0KKyAgYSBwcm9ncmFtIG1ha2VzIG90aGVyIGNhbGxzIHRvIHN5c3RlbSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMNCisgIChub3JtYWxseSBzYnJrKSBvdXRzaWRlIG9mIG1hbGxvYy4NCisNCisgIG1hbGxvY19zdGF0cyBwcmludHMgb25seSB0aGUgbW9zdCBjb21tb25seSBpbnRlcmVzdGluZyBzdGF0aXN0aWNzLg0KKyAgTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyBtYWxsaW5mby4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICBkbG1hbGxvY19zdGF0cyh2b2lkKTsNCisNCisvKg0KKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApOw0KKw0KKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluDQorICBhbiBhbGxvY2F0ZWQgY2h1bmssIHdoaWNoIG1heSBiZSBtb3JlIHRoYW4geW91IHJlcXVlc3RlZCAoYWx0aG91Z2gNCisgIG9mdGVuIG5vdCkgZHVlIHRvIGFsaWdubWVudCBhbmQgbWluaW11bSBzaXplIGNvbnN0cmFpbnRzLg0KKyAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQNCisgIG92ZXJ3cml0aW5nIG90aGVyIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIG5vdCBhIHBhcnRpY3VsYXJseSBncmVhdA0KKyAgcHJvZ3JhbW1pbmcgcHJhY3RpY2UuIG1hbGxvY191c2FibGVfc2l6ZSBjYW4gYmUgbW9yZSB1c2VmdWwgaW4NCisgIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6DQorDQorICBwID0gbWFsbG9jKG4pOw0KKyAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOw0KKyovDQorc2l6ZV90IGRsbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQgKik7DQorDQorI2VuZGlmIC8qIE9OTFlfTVNQQUNFUyAqLw0KKw0KKyNpZiBNU1BBQ0VTDQorDQorLyoNCisgIG1zcGFjZSBpcyBhbiBvcGFxdWUgdHlwZSByZXByZXNlbnRpbmcgYW4gaW5kZXBlbmRlbnQNCisgIHJlZ2lvbiBvZiBzcGFjZSB0aGF0IHN1cHBvcnRzIG1zcGFjZV9tYWxsb2MsIGV0Yy4NCisqLw0KK3R5cGVkZWYgdm9pZCAqbXNwYWNlOw0KKw0KKy8qDQorICBjcmVhdGVfbXNwYWNlIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgaW5kZXBlbmRlbnQgc3BhY2Ugd2l0aCB0aGUNCisgIGdpdmVuIGluaXRpYWwgY2FwYWNpdHksIG9yLCBpZiAwLCB0aGUgZGVmYXVsdCBncmFudWxhcml0eSBzaXplLiAgSXQNCisgIHJldHVybnMgbnVsbCBpZiB0aGVyZSBpcyBubyBzeXN0ZW0gbWVtb3J5IGF2YWlsYWJsZSB0byBjcmVhdGUgdGhlDQorICBzcGFjZS4gIElmIGFyZ3VtZW50IGxvY2tlZCBpcyBub24temVybywgdGhlIHNwYWNlIHVzZXMgYSBzZXBhcmF0ZQ0KKyAgbG9jayB0byBjb250cm9sIGFjY2Vzcy4gVGhlIGNhcGFjaXR5IG9mIHRoZSBzcGFjZSB3aWxsIGdyb3cNCisgIGR5bmFtaWNhbGx5IGFzIG5lZWRlZCB0byBzZXJ2aWNlIG1zcGFjZV9tYWxsb2MgcmVxdWVzdHMuICBZb3UgY2FuDQorICBjb250cm9sIHRoZSBzaXplcyBvZiBpbmNyZW1lbnRhbCBpbmNyZWFzZXMgb2YgdGhpcyBzcGFjZSBieQ0KKyAgY29tcGlsaW5nIHdpdGggYSBkaWZmZXJlbnQgREVGQVVMVF9HUkFOVUxBUklUWSBvciBkeW5hbWljYWxseQ0KKyAgc2V0dGluZyB3aXRoIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgdmFsdWUpLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIG1zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7DQorDQorLyoNCisgIGRlc3Ryb3lfbXNwYWNlIGRlc3Ryb3lzIHRoZSBnaXZlbiBzcGFjZSwgYW5kIGF0dGVtcHRzIHRvIHJldHVybiBhbGwNCisgIG9mIGl0cyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtLCByZXR1cm5pbmcgdGhlIHRvdGFsIG51bWJlciBvZg0KKyAgYnl0ZXMgZnJlZWQuIEFmdGVyIGRlc3RydWN0aW9uLCB0aGUgcmVzdWx0cyBvZiBhY2Nlc3MgdG8gYWxsIG1lbW9yeQ0KKyAgdXNlZCBieSB0aGUgc3BhY2UgYmVjb21lIHVuZGVmaW5lZC4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCBzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCk7DQorDQorLyoNCisgIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlIHVzZXMgdGhlIG1lbW9yeSBzdXBwbGllZCBhcyB0aGUgaW5pdGlhbCBiYXNlDQorICBvZiBhIG5ldyBtc3BhY2UuIFBhcnQgKGxlc3MgdGhhbiAxMjgqc2l6ZW9mKHNpemVfdCkgYnl0ZXMpIG9mIHRoaXMNCisgIHNwYWNlIGlzIHVzZWQgZm9yIGJvb2trZWVwaW5nLCBzbyB0aGUgY2FwYWNpdHkgbXVzdCBiZSBhdCBsZWFzdCB0aGlzDQorICBsYXJnZS4gKE90aGVyd2lzZSAwIGlzIHJldHVybmVkLikgV2hlbiB0aGlzIGluaXRpYWwgc3BhY2UgaXMNCisgIGV4aGF1c3RlZCwgYWRkaXRpb25hbCBtZW1vcnkgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uDQorICBEZXN0cm95aW5nIHRoaXMgc3BhY2Ugd2lsbCBkZWFsbG9jYXRlIGFsbCBhZGRpdGlvbmFsbHkgYWxsb2NhdGVkDQorICBzcGFjZSAoaWYgcG9zc2libGUpIGJ1dCBub3QgdGhlIGluaXRpYWwgYmFzZS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCBtc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCAqYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsNCisNCisvKg0KKyAgbXNwYWNlX3RyYWNrX2xhcmdlX2NodW5rcyBjb250cm9scyB3aGV0aGVyIHJlcXVlc3RzIGZvciBsYXJnZSBjaHVua3MNCisgIGFyZSBhbGxvY2F0ZWQgaW4gdGhlaXIgb3duIHVudHJhY2tlZCBtbWFwcGVkIHJlZ2lvbnMsIHNlcGFyYXRlIGZyb20NCisgIG90aGVycyBpbiB0aGlzIG1zcGFjZS4gQnkgZGVmYXVsdCBsYXJnZSBjaHVua3MgYXJlIG5vdCB0cmFja2VkLA0KKyAgd2hpY2ggcmVkdWNlcyBmcmFnbWVudGF0aW9uLiBIb3dldmVyLCBzdWNoIGNodW5rcyBhcmUgbm90DQorICBuZWNlc3NhcmlseSByZWxlYXNlZCB0byB0aGUgc3lzdGVtIHVwb24gZGVzdHJveV9tc3BhY2UuICBFbmFibGluZw0KKyAgdHJhY2tpbmcgYnkgc2V0dGluZyB0byB0cnVlIG1heSBpbmNyZWFzZSBmcmFnbWVudGF0aW9uLCBidXQgYXZvaWRzDQorICBsZWFrYWdlIHdoZW4gcmVseWluZyBvbiBkZXN0cm95X21zcGFjZSB0byByZWxlYXNlIGFsbCBtZW1vcnkNCisgIGFsbG9jYXRlZCB1c2luZyB0aGlzIHNwYWNlLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByZXZpb3VzDQorICBzZXR0aW5nLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIGludCBtc3BhY2VfdHJhY2tfbGFyZ2VfY2h1bmtzKG1zcGFjZSBtc3AsIGludCBlbmFibGUpOw0KKw0KKw0KKy8qDQorICBtc3BhY2VfbWFsbG9jIGJlaGF2ZXMgYXMgbWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluDQorICB0aGUgZ2l2ZW4gc3BhY2UuDQorKi8NCitETE1BTExPQ19FWFBPUlQgdm9pZCAqbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOw0KKw0KKy8qDQorICBtc3BhY2VfZnJlZSBiZWhhdmVzIGFzIGZyZWUsIGJ1dCBvcGVyYXRlcyB3aXRoaW4NCisgIHRoZSBnaXZlbiBzcGFjZS4NCisNCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX2ZyZWUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZC4NCisgIGZyZWUgbWF5IGJlIGNhbGxlZCBpbnN0ZWFkIG9mIG1zcGFjZV9mcmVlIGJlY2F1c2UgZnJlZWQgY2h1bmtzIGZyb20NCisgIGFueSBzcGFjZSBhcmUgaGFuZGxlZCBieSB0aGVpciBvcmlnaW5hdGluZyBzcGFjZXMuDQorKi8NCitETE1BTExPQ19FWFBPUlQgdm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkICptZW0pOw0KKw0KKy8qDQorICBtc3BhY2VfcmVhbGxvYyBiZWhhdmVzIGFzIHJlYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4NCisgIHRoZSBnaXZlbiBzcGFjZS4NCisNCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX3JlYWxsb2MgaXMgbm90IGFjdHVhbGx5DQorICBuZWVkZWQuICByZWFsbG9jIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfcmVhbGxvYyBiZWNhdXNlDQorICByZWFsbG9jZWQgY2h1bmtzIGZyb20gYW55IHNwYWNlIGFyZSBoYW5kbGVkIGJ5IHRoZWlyIG9yaWdpbmF0aW5nDQorICBzcGFjZXMuDQorKi8NCitETE1BTExPQ19FWFBPUlQgdm9pZCAqbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCAqbWVtLCBzaXplX3QgbmV3c2l6ZSk7DQorDQorLyoNCisgIG1zcGFjZV9jYWxsb2MgYmVoYXZlcyBhcyBjYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4NCisgIHRoZSBnaXZlbiBzcGFjZS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICptc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKTsNCisNCisvKg0KKyAgbXNwYWNlX21lbWFsaWduIGJlaGF2ZXMgYXMgbWVtYWxpZ24sIGJ1dCBvcGVyYXRlcyB3aXRoaW4NCisgIHRoZSBnaXZlbiBzcGFjZS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICptc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsNCisNCisvKg0KKyAgbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NhbGxvYywgYnV0DQorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgKiptc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLCB2b2lkICpjaHVua3NbXSk7DQorDQorLyoNCisgIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NvbWFsbG9jLCBidXQNCisgIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuDQorKi8NCitETE1BTExPQ19FWFBPUlQgdm9pZCAqKm1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZXNbXSwgdm9pZCAqY2h1bmtzW10pOw0KKw0KKy8qDQorICBtc3BhY2VfZm9vdHByaW50KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlDQorICBzeXN0ZW0gZm9yIHRoaXMgc3BhY2UuDQorKi8NCitETE1BTExPQ19FWFBPUlQgc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCk7DQorDQorLyoNCisgIG1zcGFjZV9tYXhfZm9vdHByaW50KCkgcmV0dXJucyB0aGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUNCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCBzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCk7DQorDQorDQorI2lmICFOT19NQUxMSU5GTw0KKy8qDQorICBtc3BhY2VfbWFsbGluZm8gYmVoYXZlcyBhcyBtYWxsaW5mbywgYnV0IHJlcG9ydHMgcHJvcGVydGllcyBvZg0KKyAgdGhlIGdpdmVuIHNwYWNlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHN0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCk7DQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovDQorDQorLyoNCisgIG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiBwKSBiZWhhdmVzIHRoZSBzYW1lIGFzIG1hbGxvY191c2FibGVfc2l6ZTsNCisqLw0KK0RMTUFMTE9DX0VYUE9SVCBzaXplX3QgbXNwYWNlX3VzYWJsZV9zaXplKGNvbnN0IHZvaWQgKm1lbSk7DQorDQorLyoNCisgIG1zcGFjZV9tYWxsb2Nfc3RhdHMgYmVoYXZlcyBhcyBtYWxsb2Nfc3RhdHMsIGJ1dCByZXBvcnRzDQorICBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBzcGFjZS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCk7DQorDQorLyoNCisgIG1zcGFjZV90cmltIGJlaGF2ZXMgYXMgbWFsbG9jX3RyaW0sIGJ1dA0KKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCBpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCk7DQorDQorLyoNCisgIEFuIGFsaWFzIGZvciBtYWxsb3B0Lg0KKyovDQorRExNQUxMT0NfRVhQT1JUIGludCBtc3BhY2VfbWFsbG9wdChpbnQsIGludCk7DQorDQorI2VuZGlmIC8qIE1TUEFDRVMgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9ICAvKiBlbmQgb2YgZXh0ZXJuICJDIiAqLw0KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KKw0KKy8qDQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgIFRvIG1ha2UgYSBmdWxseSBjdXN0b21pemFibGUgbWFsbG9jLmggaGVhZGVyIGZpbGUsIGN1dCBldmVyeXRoaW5nDQorICBhYm92ZSB0aGlzIGxpbmUsIHB1dCBpbnRvIGZpbGUgbWFsbG9jLmgsIGVkaXQgdG8gc3VpdCwgYW5kICNpbmNsdWRlIGl0DQorICBvbiB0aGUgbmV4dCBsaW5lLCBhcyB3ZWxsIGFzIGluIHByb2dyYW1zIHRoYXQgdXNlIHRoaXMgbWFsbG9jLg0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorKi8NCisNCisvKiAjaW5jbHVkZSAibWFsbG9jLmgiICovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW50ZXJuYWwgI2luY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisjaWZkZWYgX01TQ19WRVINCisjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MTQ2ICkgLyogbm8gInVuc2lnbmVkIiB3YXJuaW5ncyAqLw0KKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLw0KKyNpZiAhTk9fTUFMTE9DX1NUQVRTDQorI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgIC8qIGZvciBwcmludGluZyBpbiBtYWxsb2Nfc3RhdHMgKi8NCisjZW5kaWYgLyogTk9fTUFMTE9DX1NUQVRTICovDQorI2lmbmRlZiBMQUNLU19FUlJOT19IDQorI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgIC8qIGZvciBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8NCisjZW5kaWYgLyogTEFDS1NfRVJSTk9fSCAqLw0KKyNpZmRlZiBERUJVRw0KKyNpZiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRQ0KKyN1bmRlZiBhc3NlcnQNCisjZGVmaW5lIGFzc2VydCh4KSBpZighKHgpKSBBQk9SVA0KKyNlbHNlIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovDQorI2luY2x1ZGUgPGFzc2VydC5oPg0KKyNlbmRpZiAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLw0KKyNlbHNlICAvKiBERUJVRyAqLw0KKyNpZm5kZWYgYXNzZXJ0DQorI2RlZmluZSBhc3NlcnQoeCkNCisjZW5kaWYNCisjZGVmaW5lIERFQlVHIDANCisjZW5kaWYgLyogREVCVUcgKi8NCisjaWYgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKExBQ0tTX1RJTUVfSCkNCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAgLyogZm9yIG1hZ2ljIGluaXRpYWxpemF0aW9uICovDQorI2VuZGlmIC8qIFdJTjMyICovDQorI2lmbmRlZiBMQUNLU19TVERMSUJfSA0KKyNpbmNsdWRlIDxzdGRsaWIuaD4gICAgICAvKiBmb3IgYWJvcnQoKSAqLw0KKyNlbmRpZiAvKiBMQUNLU19TVERMSUJfSCAqLw0KKyNpZm5kZWYgTEFDS1NfU1RSSU5HX0gNCisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgLyogZm9yIG1lbXNldCBldGMgKi8NCisjZW5kaWYgIC8qIExBQ0tTX1NUUklOR19IICovDQorI2lmIFVTRV9CVUlMVElOX0ZGUw0KKyNpZm5kZWYgTEFDS1NfU1RSSU5HU19IDQorI2luY2x1ZGUgPHN0cmluZ3MuaD4gICAgIC8qIGZvciBmZnMgKi8NCisjZW5kaWYgLyogTEFDS1NfU1RSSU5HU19IICovDQorI2VuZGlmIC8qIFVTRV9CVUlMVElOX0ZGUyAqLw0KKyNpZiBIQVZFX01NQVANCisjaWZuZGVmIExBQ0tTX1NZU19NTUFOX0gNCisvKiBPbiBzb21lIHZlcnNpb25zIG9mIGxpbnV4LCBtcmVtYXAgZGVjbCBpbiBtbWFuLmggbmVlZHMgX19VU0VfR05VIHNldCAqLw0KKyNpZiAoZGVmaW5lZChsaW51eCkgJiYgIWRlZmluZWQoX19VU0VfR05VKSkNCisjZGVmaW5lIF9fVVNFX0dOVSAxDQorI2luY2x1ZGUgPHN5cy9tbWFuLmg+ICAgIC8qIGZvciBtbWFwICovDQorI3VuZGVmIF9fVVNFX0dOVQ0KKyNlbHNlDQorI2luY2x1ZGUgPHN5cy9tbWFuLmg+ICAgIC8qIGZvciBtbWFwICovDQorI2VuZGlmIC8qIGxpbnV4ICovDQorI2VuZGlmIC8qIExBQ0tTX1NZU19NTUFOX0ggKi8NCisjaWZuZGVmIExBQ0tTX0ZDTlRMX0gNCisjaW5jbHVkZSA8ZmNudGwuaD4NCisjZW5kaWYgLyogTEFDS1NfRkNOVExfSCAqLw0KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8NCisjaWZuZGVmIExBQ0tTX1VOSVNURF9IDQorI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogZm9yIHNicmssIHN5c2NvbmYgKi8NCisjZWxzZSAvKiBMQUNLU19VTklTVERfSCAqLw0KKyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19PcGVuQlNEX18pICYmICFkZWZpbmVkKF9fTmV0QlNEX18pDQorZXh0ZXJuIHZvaWQgICAgICpzYnJrKHB0cmRpZmZfdCk7DQorI2VuZGlmIC8qIEZyZWVCU0QgZXRjICovDQorI2VuZGlmIC8qIExBQ0tTX1VOSVNURF9IICovDQorDQorLyogRGVjbGFyYXRpb25zIGZvciBsb2NraW5nICovDQorI2lmIFVTRV9MT0NLUw0KKyNpZm5kZWYgV0lOMzINCisjaWYgZGVmaW5lZCAoX19TVlI0KSAmJiBkZWZpbmVkIChfX3N1bikgIC8qIHNvbGFyaXMgKi8NCisjaW5jbHVkZSA8dGhyZWFkLmg+DQorI2VsaWYgIWRlZmluZWQoTEFDS1NfU0NIRURfSCkNCisjaW5jbHVkZSA8c2NoZWQuaD4NCisjZW5kaWYgLyogc29sYXJpcyBvciBMQUNLU19TQ0hFRF9IICovDQorI2lmIChkZWZpbmVkKFVTRV9SRUNVUlNJVkVfTE9DS1MpICYmIFVTRV9SRUNVUlNJVkVfTE9DS1MgIT0gMCkgfHwgIVVTRV9TUElOX0xPQ0tTDQorI2luY2x1ZGUgPHB0aHJlYWQuaD4NCisjZW5kaWYgLyogVVNFX1JFQ1VSU0lWRV9MT0NLUyAuLi4gKi8NCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQ0KKyNpZm5kZWYgX01fQU1ENjQNCisvKiBUaGVzZSBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIEFNRDY0IGJ1aWxkcyAqLw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KK0xPTkcgX19jZGVjbCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoTE9ORyB2b2xhdGlsZSAqRGVzdCwgTE9ORyBFeGNoYW5nZSwgTE9ORyBDb21wKTsNCitMT05HIF9fY2RlY2wgX0ludGVybG9ja2VkRXhjaGFuZ2UoTE9ORyB2b2xhdGlsZSAqVGFyZ2V0LCBMT05HIFZhbHVlKTsNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQorI2VuZGlmIC8qIF9NX0FNRDY0ICovDQorI3ByYWdtYSBpbnRyaW5zaWMgKF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSkNCisjcHJhZ21hIGludHJpbnNpYyAoX0ludGVybG9ja2VkRXhjaGFuZ2UpDQorI2RlZmluZSBpbnRlcmxvY2tlZGNvbXBhcmVleGNoYW5nZSBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UNCisjZGVmaW5lIGludGVybG9ja2VkZXhjaGFuZ2UgX0ludGVybG9ja2VkRXhjaGFuZ2UNCisjZWxpZiBkZWZpbmVkKFdJTjMyKSAmJiBkZWZpbmVkKF9fR05VQ19fKQ0KKyNkZWZpbmUgaW50ZXJsb2NrZWRjb21wYXJlZXhjaGFuZ2UoYSwgYiwgYykgX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKGEsIGMsIGIpDQorI2RlZmluZSBpbnRlcmxvY2tlZGV4Y2hhbmdlIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldA0KKyNlbmRpZiAvKiBXaW4zMiAqLw0KKyNlbHNlIC8qIFVTRV9MT0NLUyAqLw0KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8NCisNCisjaWZuZGVmIExPQ0tfQVRfRk9SSw0KKyNkZWZpbmUgTE9DS19BVF9GT1JLIDANCisjZW5kaWYNCisNCisvKiBEZWNsYXJhdGlvbnMgZm9yIGJpdCBzY2FubmluZyBvbiB3aW4zMiAqLw0KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMA0KKyNpZm5kZWYgQml0U2NhbkZvcndhcmQgLyogVHJ5IHRvIGF2b2lkIHB1bGxpbmcgaW4gV2luTlQuaCAqLw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5Gb3J3YXJkKHVuc2lnbmVkIGxvbmcgKmluZGV4LCB1bnNpZ25lZCBsb25nIG1hc2spOw0KK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5SZXZlcnNlKHVuc2lnbmVkIGxvbmcgKmluZGV4LCB1bnNpZ25lZCBsb25nIG1hc2spOw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCisNCisjZGVmaW5lIEJpdFNjYW5Gb3J3YXJkIF9CaXRTY2FuRm9yd2FyZA0KKyNkZWZpbmUgQml0U2NhblJldmVyc2UgX0JpdFNjYW5SZXZlcnNlDQorI3ByYWdtYSBpbnRyaW5zaWMoX0JpdFNjYW5Gb3J3YXJkKQ0KKyNwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuUmV2ZXJzZSkNCisjZW5kaWYgLyogQml0U2NhbkZvcndhcmQgKi8NCisjZW5kaWYgLyogZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMDAgKi8NCisNCisjaWZuZGVmIFdJTjMyDQorI2lmbmRlZiBtYWxsb2NfZ2V0cGFnZXNpemUNCisjICBpZmRlZiBfU0NfUEFHRVNJWkUgICAgICAgICAvKiBzb21lIFNWUjQgc3lzdGVtcyBvbWl0IGFuIHVuZGVyc2NvcmUgKi8NCisjICAgIGlmbmRlZiBfU0NfUEFHRV9TSVpFDQorIyAgICAgIGRlZmluZSBfU0NfUEFHRV9TSVpFIF9TQ19QQUdFU0laRQ0KKyMgICAgZW5kaWYNCisjICBlbmRpZg0KKyMgIGlmZGVmIF9TQ19QQUdFX1NJWkUNCisjICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgc3lzY29uZihfU0NfUEFHRV9TSVpFKQ0KKyMgIGVsc2UNCisjICAgIGlmIGRlZmluZWQoQlNEKSB8fCBkZWZpbmVkKERHVVgpIHx8IGRlZmluZWQoSEFWRV9HRVRQQUdFU0laRSkNCitleHRlcm4gc2l6ZV90IGdldHBhZ2VzaXplKCk7DQorIyAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKQ0KKyMgICAgZWxzZQ0KKyMgICAgICBpZmRlZiBXSU4zMiAvKiB1c2Ugc3VwcGxpZWQgZW11bGF0aW9uIG9mIGdldHBhZ2VzaXplICovDQorIyAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpDQorIyAgICAgIGVsc2UNCisjICAgICAgICBpZm5kZWYgTEFDS1NfU1lTX1BBUkFNX0gNCisjICAgICAgICAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPg0KKyMgICAgICAgIGVuZGlmDQorIyAgICAgICAgaWZkZWYgRVhFQ19QQUdFU0laRQ0KKyMgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBFWEVDX1BBR0VTSVpFDQorIyAgICAgICAgZWxzZQ0KKyMgICAgICAgICAgaWZkZWYgTkJQRw0KKyMgICAgICAgICAgICBpZm5kZWYgQ0xTSVpFDQorIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBOQlBHDQorIyAgICAgICAgICAgIGVsc2UNCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIChOQlBHICogQ0xTSVpFKQ0KKyMgICAgICAgICAgICBlbmRpZg0KKyMgICAgICAgICAgZWxzZQ0KKyMgICAgICAgICAgICBpZmRlZiBOQlBDDQorIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBOQlBDDQorIyAgICAgICAgICAgIGVsc2UNCisjICAgICAgICAgICAgICBpZmRlZiBQQUdFU0laRQ0KKyMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBQQUdFU0laRQ0KKyMgICAgICAgICAgICAgIGVsc2UgLyoganVzdCBndWVzcyAqLw0KKyMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoKHNpemVfdCk0MDk2VSkNCisjICAgICAgICAgICAgICBlbmRpZg0KKyMgICAgICAgICAgICBlbmRpZg0KKyMgICAgICAgICAgZW5kaWYNCisjICAgICAgICBlbmRpZg0KKyMgICAgICBlbmRpZg0KKyMgICAgZW5kaWYNCisjICBlbmRpZg0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gc2l6ZV90IGFuZCBhbGlnbm1lbnQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qIFRoZSBieXRlIGFuZCBiaXQgc2l6ZSBvZiBhIHNpemVfdCAqLw0KKyNkZWZpbmUgU0laRV9UX1NJWkUgICAgICAgICAoc2l6ZW9mKHNpemVfdCkpDQorI2RlZmluZSBTSVpFX1RfQklUU0laRSAgICAgIChzaXplb2Yoc2l6ZV90KSA8PCAzKQ0KKw0KKy8qIFNvbWUgY29uc3RhbnRzIGNvZXJjZWQgdG8gc2l6ZV90ICovDQorLyogQW5ub3lpbmcgYnV0IG5lY2Vzc2FyeSB0byBhdm9pZCBlcnJvcnMgb24gc29tZSBwbGF0Zm9ybXMgKi8NCisjZGVmaW5lIFNJWkVfVF9aRVJPICAgICAgICAgKChzaXplX3QpMCkNCisjZGVmaW5lIFNJWkVfVF9PTkUgICAgICAgICAgKChzaXplX3QpMSkNCisjZGVmaW5lIFNJWkVfVF9UV08gICAgICAgICAgKChzaXplX3QpMikNCisjZGVmaW5lIFNJWkVfVF9GT1VSICAgICAgICAgKChzaXplX3QpNCkNCisjZGVmaW5lIFRXT19TSVpFX1RfU0laRVMgICAgKFNJWkVfVF9TSVpFPDwxKQ0KKyNkZWZpbmUgRk9VUl9TSVpFX1RfU0laRVMgICAoU0laRV9UX1NJWkU8PDIpDQorI2RlZmluZSBTSVhfU0laRV9UX1NJWkVTICAgIChGT1VSX1NJWkVfVF9TSVpFUytUV09fU0laRV9UX1NJWkVTKQ0KKyNkZWZpbmUgSEFMRl9NQVhfU0laRV9UICAgICAoTUFYX1NJWkVfVCAvIDJVKQ0KKw0KKy8qIFRoZSBiaXQgbWFzayB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIE1BTExPQ19BTElHTk1FTlQgKi8NCisjZGVmaW5lIENIVU5LX0FMSUdOX01BU0sgICAgKE1BTExPQ19BTElHTk1FTlQgLSBTSVpFX1RfT05FKQ0KKw0KKy8qIFRydWUgaWYgYWRkcmVzcyBhIGhhcyBhY2NlcHRhYmxlIGFsaWdubWVudCAqLw0KKyNkZWZpbmUgaXNfYWxpZ25lZChBKSAgICAgICAoKChzaXplX3QpKChBKSkgJiAoQ0hVTktfQUxJR05fTUFTSykpID09IDApDQorDQorLyogdGhlIG51bWJlciBvZiBieXRlcyB0byBvZmZzZXQgYW4gYWRkcmVzcyB0byBhbGlnbiBpdCAqLw0KKyNkZWZpbmUgYWxpZ25fb2Zmc2V0KEEpXA0KKyAoKCgoc2l6ZV90KShBKSAmIENIVU5LX0FMSUdOX01BU0spID09IDApPyAwIDpcDQorICAoKE1BTExPQ19BTElHTk1FTlQgLSAoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSkgJiBDSFVOS19BTElHTl9NQVNLKSkNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNTUFQIHByZWxpbWluYXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qDQorICAgSWYgSEFWRV9NT1JFQ09SRSBvciBIQVZFX01NQVAgYXJlIGZhbHNlLCB3ZSBqdXN0IGRlZmluZSBjYWxscyBhbmQNCisgICBjaGVja3MgdG8gZmFpbCBzbyBjb21waWxlciBvcHRpbWl6ZXIgY2FuIGRlbGV0ZSBjb2RlIHJhdGhlciB0aGFuDQorICAgdXNpbmcgc28gbWFueSAiI2lmInMuDQorKi8NCisNCisNCisvKiBNT1JFQ09SRSBhbmQgTU1BUCBtdXN0IHJldHVybiBNRkFJTCBvbiBmYWlsdXJlICovDQorI2RlZmluZSBNRkFJTCAgICAgICAgICAgICAgICAoKHZvaWQqKShNQVhfU0laRV9UKSkNCisjZGVmaW5lIENNRkFJTCAgICAgICAgICAgICAgICgoY2hhciopKE1GQUlMKSkgLyogZGVmaW5lZCBmb3IgY29udmVuaWVuY2UgKi8NCisNCisjaWYgSEFWRV9NTUFQDQorDQorI2lmbmRlZiBXSU4zMg0KKyNkZWZpbmUgTVVOTUFQX0RFRkFVTFQoYSwgcykgIG11bm1hcCgoYSksIChzKSkNCisjZGVmaW5lIE1NQVBfUFJPVCAgICAgICAgICAgIChQUk9UX1JFQUR8UFJPVF9XUklURSkNCisjaWYgIWRlZmluZWQoTUFQX0FOT05ZTU9VUykgJiYgZGVmaW5lZChNQVBfQU5PTikNCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMgICAgICAgIE1BUF9BTk9ODQorI2VuZGlmIC8qIE1BUF9BTk9OICovDQorI2lmZGVmIE1BUF9BTk9OWU1PVVMNCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTKQ0KKyNkZWZpbmUgTU1BUF9ERUZBVUxUKHMpICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIC0xLCAwKQ0KKyNlbHNlIC8qIE1BUF9BTk9OWU1PVVMgKi8NCisvKg0KKyAgIE5lYXJseSBhbGwgdmVyc2lvbnMgb2YgbW1hcCBzdXBwb3J0IE1BUF9BTk9OWU1PVVMsIHNvIHRoZSBmb2xsb3dpbmcNCisgICBpcyB1bmxpa2VseSB0byBiZSBuZWVkZWQsIGJ1dCBpcyBzdXBwbGllZCBqdXN0IGluIGNhc2UuDQorKi8NCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURSkNCitzdGF0aWMgaW50IGRldl96ZXJvX2ZkID0gLTE7IC8qIENhY2hlZCBmaWxlIGRlc2NyaXB0b3IgZm9yIC9kZXYvemVyby4gKi8NCisjZGVmaW5lIE1NQVBfREVGQVVMVChzKSAoKGRldl96ZXJvX2ZkIDwgMCkgPyBcDQorICAgICAgICAgICAoZGV2X3plcm9fZmQgPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpLCBcDQorICAgICAgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgZGV2X3plcm9fZmQsIDApKSA6IFwNCisgICAgICAgICAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpDQorI2VuZGlmIC8qIE1BUF9BTk9OWU1PVVMgKi8NCisNCisjZGVmaW5lIERJUkVDVF9NTUFQX0RFRkFVTFQocykgTU1BUF9ERUZBVUxUKHMpDQorDQorI2Vsc2UgLyogV0lOMzIgKi8NCisNCisvKiBXaW4zMiBNTUFQIHZpYSBWaXJ0dWFsQWxsb2MgKi8NCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCAqd2luMzJtbWFwKHNpemVfdCBzaXplKQ0KK3sNCisgICAgdm9pZCAqcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFIHwgTUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOw0KKyAgICByZXR1cm4gKHB0ciAhPSAwKSA/IHB0ciA6IE1GQUlMOw0KK30NCisNCisvKiBGb3IgZGlyZWN0IE1NQVAsIHVzZSBNRU1fVE9QX0RPV04gdG8gbWluaW1pemUgaW50ZXJmZXJlbmNlICovDQorc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQgKndpbjMyZGlyZWN0X21tYXAoc2l6ZV90IHNpemUpDQorew0KKyAgICB2b2lkICpwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkUgfCBNRU1fQ09NTUlUIHwgTUVNX1RPUF9ET1dOLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9SRUFEV1JJVEUpOw0KKyAgICByZXR1cm4gKHB0ciAhPSAwKSA/IHB0ciA6IE1GQUlMOw0KK30NCisNCisvKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHJlbGVhc2luZyBjb2FsZXNlZCBzZWdtZW50cyAqLw0KK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgd2luMzJtdW5tYXAodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkNCit7DQorICAgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtaW5mbzsNCisgICAgY2hhciAqY3B0ciA9IChjaGFyICopcHRyOw0KKw0KKyAgICB3aGlsZSAoc2l6ZSkNCisgICAgew0KKyAgICAgICAgaWYgKFZpcnR1YWxRdWVyeShjcHRyLCAmbWluZm8sIHNpemVvZihtaW5mbykpID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1pbmZvLkJhc2VBZGRyZXNzICE9IGNwdHIgfHwgbWluZm8uQWxsb2NhdGlvbkJhc2UgIT0gY3B0ciB8fA0KKyAgICAgICAgICAgIG1pbmZvLlN0YXRlICE9IE1FTV9DT01NSVQgfHwgbWluZm8uUmVnaW9uU2l6ZSA+IHNpemUpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKFZpcnR1YWxGcmVlKGNwdHIsIDAsIE1FTV9SRUxFQVNFKSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGNwdHIgKz0gbWluZm8uUmVnaW9uU2l6ZTsNCisgICAgICAgIHNpemUgLT0gbWluZm8uUmVnaW9uU2l6ZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorI2RlZmluZSBNTUFQX0RFRkFVTFQocykgICAgICAgICAgICAgd2luMzJtbWFwKHMpDQorI2RlZmluZSBNVU5NQVBfREVGQVVMVChhLCBzKSAgICAgICAgd2luMzJtdW5tYXAoKGEpLCAocykpDQorI2RlZmluZSBESVJFQ1RfTU1BUF9ERUZBVUxUKHMpICAgICAgd2luMzJkaXJlY3RfbW1hcChzKQ0KKyNlbmRpZiAvKiBXSU4zMiAqLw0KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8NCisNCisjaWYgSEFWRV9NUkVNQVANCisjaWZuZGVmIFdJTjMyDQorI2RlZmluZSBNUkVNQVBfREVGQVVMVChhZGRyLCBvc3osIG5zeiwgbXYpIG1yZW1hcCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkNCisjZW5kaWYgLyogV0lOMzIgKi8NCisjZW5kaWYgLyogSEFWRV9NUkVNQVAgKi8NCisNCisvKioNCisgKiBEZWZpbmUgQ0FMTF9NT1JFQ09SRQ0KKyAqLw0KKyNpZiBIQVZFX01PUkVDT1JFDQorI2lmZGVmIE1PUkVDT1JFDQorI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgIE1PUkVDT1JFKFMpDQorI2Vsc2UgIC8qIE1PUkVDT1JFICovDQorI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgIE1PUkVDT1JFX0RFRkFVTFQoUykNCisjZW5kaWYgLyogTU9SRUNPUkUgKi8NCisjZWxzZSAgLyogSEFWRV9NT1JFQ09SRSAqLw0KKyNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICAgICAgTUZBSUwNCisjZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAqLw0KKw0KKy8qKg0KKyAqIERlZmluZSBDQUxMX01NQVAvQ0FMTF9NVU5NQVAvQ0FMTF9ESVJFQ1RfTU1BUA0KKyAqLw0KKyNpZiBIQVZFX01NQVANCisjZGVmaW5lIFVTRV9NTUFQX0JJVCAgICAgICAgICAgIChTSVpFX1RfT05FKQ0KKw0KKyNpZmRlZiBNTUFQDQorI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgIE1NQVAocykNCisjZWxzZSAvKiBNTUFQICovDQorI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgIE1NQVBfREVGQVVMVChzKQ0KKyNlbmRpZiAvKiBNTUFQICovDQorI2lmZGVmIE1VTk1BUA0KKyNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICBNVU5NQVAoKGEpLCAocykpDQorI2Vsc2UgLyogTVVOTUFQICovDQorI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgIE1VTk1BUF9ERUZBVUxUKChhKSwgKHMpKQ0KKyNlbmRpZiAvKiBNVU5NQVAgKi8NCisjaWZkZWYgRElSRUNUX01NQVANCisjZGVmaW5lIENBTExfRElSRUNUX01NQVAocykgRElSRUNUX01NQVAocykNCisjZWxzZSAvKiBESVJFQ1RfTU1BUCAqLw0KKyNkZWZpbmUgQ0FMTF9ESVJFQ1RfTU1BUChzKSBESVJFQ1RfTU1BUF9ERUZBVUxUKHMpDQorI2VuZGlmIC8qIERJUkVDVF9NTUFQICovDQorI2Vsc2UgIC8qIEhBVkVfTU1BUCAqLw0KKyNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgICAgKFNJWkVfVF9aRVJPKQ0KKw0KKyNkZWZpbmUgTU1BUChzKSAgICAgICAgICAgICAgICAgTUZBSUwNCisjZGVmaW5lIE1VTk1BUChhLCBzKSAgICAgICAgICAgICgtMSkNCisjZGVmaW5lIERJUkVDVF9NTUFQKHMpICAgICAgICAgIE1GQUlMDQorI2RlZmluZSBDQUxMX0RJUkVDVF9NTUFQKHMpICAgICBESVJFQ1RfTU1BUChzKQ0KKyNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICAgICAgTU1BUChzKQ0KKyNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICAgICAgTVVOTUFQKChhKSwgKHMpKQ0KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8NCisNCisvKioNCisgKiBEZWZpbmUgQ0FMTF9NUkVNQVANCisgKi8NCisjaWYgSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQDQorI2lmZGVmIE1SRU1BUA0KKyNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSBNUkVNQVAoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpDQorI2Vsc2UgLyogTVJFTUFQICovDQorI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpIE1SRU1BUF9ERUZBVUxUKChhZGRyKSwgKG9zeiksIChuc3opLCAobXYpKQ0KKyNlbmRpZiAvKiBNUkVNQVAgKi8NCisjZWxzZSAgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovDQorI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpICAgICBNRkFJTA0KKyNlbmRpZiAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8NCisNCisvKiBtc3RhdGUgYml0IHNldCBpZiBjb250aW5ndW91cyBtb3JlY29yZSBkaXNhYmxlZCBvciBmYWlsZWQgKi8NCisjZGVmaW5lIFVTRV9OT05DT05USUdVT1VTX0JJVCAoNFUpDQorDQorLyogc2VnbWVudCBiaXQgc2V0IGluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlICovDQorI2RlZmluZSBFWFRFUk5fQklUICAgICAgICAgICAgKDhVKQ0KKw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2NrIHByZWxpbWluYXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoNCisgIFdoZW4gbG9ja3MgYXJlIGRlZmluZWQsIHRoZXJlIGlzIG9uZSBnbG9iYWwgbG9jaywgcGx1cw0KKyAgb25lIHBlci1tc3BhY2UgbG9jay4NCisNCisgIFRoZSBnbG9iYWwgbG9ja19lbnN1cmVzIHRoYXQgbXBhcmFtcy5tYWdpYyBhbmQgb3RoZXIgdW5pcXVlDQorICBtcGFyYW1zIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlLiBJdCBhbHNvIHByb3RlY3RzDQorICBzZXF1ZW5jZXMgb2YgY2FsbHMgdG8gTU9SRUNPUkUuICBJbiBtYW55IGNhc2VzIHN5c19hbGxvYyByZXF1aXJlcw0KKyAgdHdvIGNhbGxzLCB0aGF0IHNob3VsZCBub3QgYmUgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyBieSBvdGhlcg0KKyAgdGhyZWFkcy4gIFRoaXMgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGRpcmVjdCBjYWxscyB0byBNT1JFQ09SRQ0KKyAgYnkgb3RoZXIgdGhyZWFkcyBub3QgdXNpbmcgdGhpcyBsb2NrLCBzbyB0aGVyZSBpcyBzdGlsbCBjb2RlIHRvDQorICBjb3BlIHRoZSBiZXN0IHdlIGNhbiBvbiBpbnRlcmZlcmVuY2UuDQorDQorICBQZXItbXNwYWNlIGxvY2tzIHN1cnJvdW5kIGNhbGxzIHRvIG1hbGxvYywgZnJlZSwgZXRjLg0KKyAgQnkgZGVmYXVsdCwgbG9ja3MgYXJlIHNpbXBsZSBub24tcmVlbnRyYW50IG11dGV4ZXMuDQorDQorICBCZWNhdXNlIGxvY2stcHJvdGVjdGVkIHJlZ2lvbnMgZ2VuZXJhbGx5IGhhdmUgYm91bmRlZCB0aW1lcywgaXQgaXMNCisgIE9LIHRvIHVzZSB0aGUgc3VwcGxpZWQgc2ltcGxlIHNwaW5sb2Nrcy4gU3BpbmxvY2tzIGFyZSBsaWtlbHkgdG8NCisgIGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yIGxpZ2h0bHkgY29udGVuZGVkIGFwcGxpY2F0aW9ucywgYnV0IHdvcnNlbg0KKyAgcGVyZm9ybWFuY2UgdW5kZXIgaGVhdnkgY29udGVudGlvbi4NCisNCisgIElmIFVTRV9MT0NLUyBpcyA+IDEsIHRoZSBkZWZpbml0aW9ucyBvZiBsb2NrIHJvdXRpbmVzIGhlcmUgYXJlDQorICBieXBhc3NlZCwgaW4gd2hpY2ggY2FzZSB5b3Ugd2lsbCBuZWVkIHRvIGRlZmluZSB0aGUgdHlwZSBNTE9DS19ULA0KKyAgYW5kIGF0IGxlYXN0IElOSVRJQUxfTE9DSywgREVTVFJPWV9MT0NLLCBBQ1FVSVJFX0xPQ0ssIFJFTEVBU0VfTE9DSw0KKyAgYW5kIFRSWV9MT0NLLiAgWW91IG11c3QgYWxzbyBkZWNsYXJlIGENCisgICAgc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IHsgaW5pdGlhbGl6YXRpb24gdmFsdWVzIH07Lg0KKw0KKyovDQorDQorI2lmICFVU0VfTE9DS1MNCisjZGVmaW5lIFVTRV9MT0NLX0JJVCAgICAgICAgICAgICAgICgwVSkNCisjZGVmaW5lIElOSVRJQUxfTE9DSyhsKSAgICAgICAgICAgICgwKQ0KKyNkZWZpbmUgREVTVFJPWV9MT0NLKGwpICAgICAgICAgICAgKDApDQorI2RlZmluZSBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpDQorI2RlZmluZSBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpDQorDQorI2Vsc2UNCisjaWYgVVNFX0xPQ0tTID4gMQ0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVc2VyLWRlZmluZWQgbG9ja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyogRGVmaW5lIHlvdXIgb3duIGxvY2sgaW1wbGVtZW50YXRpb24gaGVyZSAqLw0KKy8qICNkZWZpbmUgSU5JVElBTF9MT0NLKGxrKSAgLi4uICovDQorLyogI2RlZmluZSBERVNUUk9ZX0xPQ0sobGspICAuLi4gKi8NCisvKiAjZGVmaW5lIEFDUVVJUkVfTE9DSyhsaykgIC4uLiAqLw0KKy8qICNkZWZpbmUgUkVMRUFTRV9MT0NLKGxrKSAgLi4uICovDQorLyogI2RlZmluZSBUUllfTE9DSyhsaykgLi4uICovDQorLyogc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IC4uLiAqLw0KKw0KKyNlbGlmIFVTRV9TUElOX0xPQ0tTDQorDQorLyogRmlyc3QsIGRlZmluZSBDQVNfTE9DSyBhbmQgQ0xFQVJfTE9DSyBvbiBpbnRzICovDQorLyogTm90ZSBDQVNfTE9DSyBkZWZpbmVkIHRvIHJldHVybiAwIG9uIHN1Y2Nlc3MgKi8NCisNCisjaWYgZGVmaW5lZChfX0dOVUNfXykmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDEpKQ0KKyNkZWZpbmUgQ0FTX0xPQ0soc2wpICAgICBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQoc2wsIDEpDQorI2RlZmluZSBDTEVBUl9MT0NLKHNsKSAgIF9fc3luY19sb2NrX3JlbGVhc2Uoc2wpDQorDQorI2VsaWYgKGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKSkNCisvKiBDdXN0b20gc3BpbiBsb2NrcyBmb3Igb2xkZXIgZ2NjIG9uIHg4NiAqLw0KK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgeDg2X2Nhc19sb2NrKGludCAqc2wpDQorew0KKyAgICBpbnQgcmV0Ow0KKyAgICBpbnQgdmFsID0gMTsNCisgICAgaW50IGNtcCA9IDA7DQorICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyBjbXB4Y2hnbCAlMSwgJTIiDQorICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1hIihyZXQpDQorICAgICAgICAgICAgICAgICAgICAgICAgIDogInIiKHZhbCksICJtIigqKHNsKSksICIwIihjbXApDQorICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIsICJjYyIpOw0KKyAgICByZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCB4ODZfY2xlYXJfbG9jayhpbnQgKnNsKQ0KK3sNCisgICAgYXNzZXJ0KCpzbCAhPSAwKTsNCisgICAgaW50IHByZXYgPSAwOw0KKyAgICBpbnQgcmV0Ow0KKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibG9jazsgeGNoZ2wgJTAsICUxIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIocmV0KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtIigqKHNsKSksICIwIihwcmV2KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsNCit9DQorDQorI2RlZmluZSBDQVNfTE9DSyhzbCkgICAgIHg4Nl9jYXNfbG9jayhzbCkNCisjZGVmaW5lIENMRUFSX0xPQ0soc2wpICAgeDg2X2NsZWFyX2xvY2soc2wpDQorDQorI2Vsc2UgLyogV2luMzIgTVNDICovDQorI2RlZmluZSBDQVNfTE9DSyhzbCkgICAgIGludGVybG9ja2VkZXhjaGFuZ2Uoc2wsIChMT05HKTEpDQorI2RlZmluZSBDTEVBUl9MT0NLKHNsKSAgIGludGVybG9ja2VkZXhjaGFuZ2UgKHNsLCAoTE9ORykwKQ0KKw0KKyNlbmRpZiAvKiAuLi4gZ2NjIHNwaW5zIGxvY2tzIC4uLiAqLw0KKw0KKy8qIEhvdyB0byB5aWVsZCBmb3IgYSBzcGluIGxvY2sgKi8NCisjZGVmaW5lIFNQSU5TX1BFUl9ZSUVMRCAgICAgICA2Mw0KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQ0KKyNkZWZpbmUgU0xFRVBfRVhfRFVSQVRJT04gICAgIDUwIC8qIGRlbGF5IGZvciB5aWVsZC9zbGVlcCAqLw0KKyNkZWZpbmUgU1BJTl9MT0NLX1lJRUxEICBTbGVlcEV4KFNMRUVQX0VYX0RVUkFUSU9OLCBGQUxTRSkNCisjZWxpZiBkZWZpbmVkIChfX1NWUjQpICYmIGRlZmluZWQgKF9fc3VuKSAvKiBzb2xhcmlzICovDQorI2RlZmluZSBTUElOX0xPQ0tfWUlFTEQgICB0aHJfeWllbGQoKTsNCisjZWxpZiAhZGVmaW5lZChMQUNLU19TQ0hFRF9IKQ0KKyNkZWZpbmUgU1BJTl9MT0NLX1lJRUxEICAgc2NoZWRfeWllbGQoKTsNCisjZWxzZQ0KKyNkZWZpbmUgU1BJTl9MT0NLX1lJRUxEDQorI2VuZGlmIC8qIC4uLiB5aWVsZCAuLi4gKi8NCisNCisjaWYgIWRlZmluZWQoVVNFX1JFQ1VSU0lWRV9MT0NLUykgfHwgVVNFX1JFQ1VSU0lWRV9MT0NLUyA9PSAwDQorLyogUGxhaW4gc3BpbiBsb2NrcyB1c2Ugc2luZ2xlIHdvcmQgKGVtYmVkZGVkIGluIG1hbGxvY19zdGF0ZXMpICovDQorc3RhdGljIGludCBzcGluX2FjcXVpcmVfbG9jayhpbnQgKnNsKQ0KK3sNCisgICAgaW50IHNwaW5zID0gMDsNCisNCisgICAgd2hpbGUgKCoodm9sYXRpbGUgaW50ICopc2wgIT0gMCB8fCBDQVNfTE9DSyhzbCkpDQorICAgIHsNCisgICAgICAgIGlmICgoKytzcGlucyAmIFNQSU5TX1BFUl9ZSUVMRCkgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBTUElOX0xPQ0tfWUlFTEQ7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIGludA0KKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgICFDQVNfTE9DSyhzbCkNCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgICAgICBDTEVBUl9MT0NLKHNsKQ0KKyNkZWZpbmUgQUNRVUlSRV9MT0NLKHNsKSAgICAgIChDQVNfTE9DSyhzbCk/IHNwaW5fYWNxdWlyZV9sb2NrKHNsKSA6IDApDQorI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAgICAgKCpzbCA9IDApDQorI2RlZmluZSBERVNUUk9ZX0xPQ0soc2wpICAgICAgKDApDQorc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IDA7DQorDQorI2Vsc2UgLyogVVNFX1JFQ1VSU0lWRV9MT0NLUyAqLw0KKy8qIHR5cGVzIGZvciBsb2NrIG93bmVycyAqLw0KKyNpZmRlZiBXSU4zMg0KKyNkZWZpbmUgVEhSRUFEX0lEX1QgICAgICAgICAgIERXT1JEDQorI2RlZmluZSBDVVJSRU5UX1RIUkVBRCAgICAgICAgR2V0Q3VycmVudFRocmVhZElkKCkNCisjZGVmaW5lIEVRX09XTkVSKFgsWSkgICAgICAgICAoKFgpID09IChZKSkNCisjZWxzZQ0KKy8qDQorICBOb3RlOiB0aGUgZm9sbG93aW5nIGFzc3VtZSB0aGF0IHB0aHJlYWRfdCBpcyBhIHR5cGUgdGhhdCBjYW4gYmUNCisgIGluaXRpYWxpemVkIHRvIChjYXN0ZWQpIHplcm8uIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCB5b3Ugd2lsbCBuZWVkIHRvDQorICBzb21laG93IHJlZGVmaW5lIHRoZXNlIG9yIG5vdCB1c2Ugc3BpbiBsb2Nrcy4NCisqLw0KKyNkZWZpbmUgVEhSRUFEX0lEX1QgICAgICAgICAgIHB0aHJlYWRfdA0KKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIHB0aHJlYWRfc2VsZigpDQorI2RlZmluZSBFUV9PV05FUihYLFkpICAgICAgICAgcHRocmVhZF9lcXVhbChYLCBZKQ0KKyNlbmRpZg0KKw0KK3N0cnVjdCBtYWxsb2NfcmVjdXJzaXZlX2xvY2sNCit7DQorICAgIGludCBzbDsNCisgICAgdW5zaWduZWQgaW50IGM7DQorICAgIFRIUkVBRF9JRF9UIHRocmVhZGlkOw0KK307DQorDQorI2RlZmluZSBNTE9DS19UICBzdHJ1Y3QgbWFsbG9jX3JlY3Vyc2l2ZV9sb2NrDQorc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IHsgMCwgMCwgKFRIUkVBRF9JRF9UKTB9Ow0KKw0KK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkIHJlY3Vyc2l2ZV9yZWxlYXNlX2xvY2soTUxPQ0tfVCAqbGspDQorew0KKyAgICBhc3NlcnQobGstPnNsICE9IDApOw0KKw0KKyAgICBpZiAoLS1say0+YyA9PSAwKQ0KKyAgICB7DQorICAgICAgICBDTEVBUl9MT0NLKCZsay0+c2wpOw0KKyAgICB9DQorfQ0KKw0KK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgcmVjdXJzaXZlX2FjcXVpcmVfbG9jayhNTE9DS19UICpsaykNCit7DQorICAgIFRIUkVBRF9JRF9UIG15dGhyZWFkaWQgPSBDVVJSRU5UX1RIUkVBRDsNCisgICAgaW50IHNwaW5zID0gMDsNCisNCisgICAgZm9yICg7OykNCisgICAgew0KKyAgICAgICAgaWYgKCooKHZvbGF0aWxlIGludCAqKSgmbGstPnNsKSkgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoIUNBU19MT0NLKCZsay0+c2wpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbGstPnRocmVhZGlkID0gbXl0aHJlYWRpZDsNCisgICAgICAgICAgICAgICAgbGstPmMgPSAxOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmIChFUV9PV05FUihsay0+dGhyZWFkaWQsIG15dGhyZWFkaWQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgICsrbGstPmM7DQorICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoKCsrc3BpbnMgJiBTUElOU19QRVJfWUlFTEQpID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgU1BJTl9MT0NLX1lJRUxEOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgcmVjdXJzaXZlX3RyeV9sb2NrKE1MT0NLX1QgKmxrKQ0KK3sNCisgICAgVEhSRUFEX0lEX1QgbXl0aHJlYWRpZCA9IENVUlJFTlRfVEhSRUFEOw0KKw0KKyAgICBpZiAoKigodm9sYXRpbGUgaW50ICopKCZsay0+c2wpKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBpZiAoIUNBU19MT0NLKCZsay0+c2wpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGxrLT50aHJlYWRpZCA9IG15dGhyZWFkaWQ7DQorICAgICAgICAgICAgbGstPmMgPSAxOw0KKyAgICAgICAgICAgIHJldHVybiAxOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UgaWYgKEVRX09XTkVSKGxrLT50aHJlYWRpZCwgbXl0aHJlYWRpZCkpDQorICAgIHsNCisgICAgICAgICsrbGstPmM7DQorICAgICAgICByZXR1cm4gMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorI2RlZmluZSBSRUxFQVNFX0xPQ0sobGspICAgICAgcmVjdXJzaXZlX3JlbGVhc2VfbG9jayhsaykNCisjZGVmaW5lIFRSWV9MT0NLKGxrKSAgICAgICAgICByZWN1cnNpdmVfdHJ5X2xvY2sobGspDQorI2RlZmluZSBBQ1FVSVJFX0xPQ0sobGspICAgICAgcmVjdXJzaXZlX2FjcXVpcmVfbG9jayhsaykNCisjZGVmaW5lIElOSVRJQUxfTE9DSyhsaykgICAgICAoKGxrKS0+dGhyZWFkaWQgPSAoVEhSRUFEX0lEX1QpMCwgKGxrKS0+c2wgPSAwLCAobGspLT5jID0gMCkNCisjZGVmaW5lIERFU1RST1lfTE9DSyhsaykgICAgICAoMCkNCisjZW5kaWYgLyogVVNFX1JFQ1VSU0lWRV9MT0NLUyAqLw0KKw0KKyNlbGlmIGRlZmluZWQoV0lOMzIpIC8qIFdpbjMyIGNyaXRpY2FsIHNlY3Rpb25zICovDQorI2RlZmluZSBNTE9DS19UICAgICAgICAgICAgICAgQ1JJVElDQUxfU0VDVElPTg0KKyNkZWZpbmUgQUNRVUlSRV9MT0NLKGxrKSAgICAgIChFbnRlckNyaXRpY2FsU2VjdGlvbihsayksIDApDQorI2RlZmluZSBSRUxFQVNFX0xPQ0sobGspICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24obGspDQorI2RlZmluZSBUUllfTE9DSyhsaykgICAgICAgICAgVHJ5RW50ZXJDcml0aWNhbFNlY3Rpb24obGspDQorI2RlZmluZSBJTklUSUFMX0xPQ0sobGspICAgICAgKCFJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uQW5kU3BpbkNvdW50KChsayksIDB4ODAwMDAwMDB8NDAwMCkpDQorI2RlZmluZSBERVNUUk9ZX0xPQ0sobGspICAgICAgKERlbGV0ZUNyaXRpY2FsU2VjdGlvbihsayksIDApDQorI2RlZmluZSBORUVEX0dMT0JBTF9MT0NLX0lOSVQNCisNCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4Ow0KK3N0YXRpYyB2b2xhdGlsZSBMT05HIG1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzOw0KKw0KKy8qIFVzZSBzcGluIGxvb3AgdG8gaW5pdGlhbGl6ZSBnbG9iYWwgbG9jayAqLw0KK3N0YXRpYyB2b2lkIGluaXRfbWFsbG9jX2dsb2JhbF9tdXRleCgpDQorew0KKyAgICBmb3IgKDs7KQ0KKyAgICB7DQorICAgICAgICBsb25nIHN0YXQgPSBtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1czsNCisNCisgICAgICAgIGlmIChzdGF0ID4gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorDQorICAgICAgICAvKiB0cmFuc2l0aW9uIHRvIDwgMCB3aGlsZSBpbml0aWFsaXppbmcsIHRoZW4gdG8gPiAwKSAqLw0KKyAgICAgICAgaWYgKHN0YXQgPT0gMCAmJg0KKyAgICAgICAgICAgIGludGVybG9ja2VkY29tcGFyZWV4Y2hhbmdlKCZtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1cywgKExPTkcpIC0gMSwgKExPTkcpMCkgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZtYWxsb2NfZ2xvYmFsX211dGV4KTsNCisgICAgICAgICAgICBpbnRlcmxvY2tlZGV4Y2hhbmdlKCZtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1cywgKExPTkcpMSk7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgU2xlZXBFeCgwLCBGQUxTRSk7DQorICAgIH0NCit9DQorDQorI2Vsc2UgLyogcHRocmVhZHMtYmFzZWQgbG9ja3MgKi8NCisjZGVmaW5lIE1MT0NLX1QgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QNCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhsaykgICAgICBwdGhyZWFkX211dGV4X2xvY2sobGspDQorI2RlZmluZSBSRUxFQVNFX0xPQ0sobGspICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sobGspDQorI2RlZmluZSBUUllfTE9DSyhsaykgICAgICAgICAgKCFwdGhyZWFkX211dGV4X3RyeWxvY2sobGspKQ0KKyNkZWZpbmUgSU5JVElBTF9MT0NLKGxrKSAgICAgIHB0aHJlYWRfaW5pdF9sb2NrKGxrKQ0KKyNkZWZpbmUgREVTVFJPWV9MT0NLKGxrKSAgICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveShsaykNCisNCisjaWYgZGVmaW5lZChVU0VfUkVDVVJTSVZFX0xPQ0tTKSAmJiBVU0VfUkVDVVJTSVZFX0xPQ0tTICE9IDAgJiYgZGVmaW5lZChsaW51eCkgJiYgIWRlZmluZWQoUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpDQorLyogQ29wZSB3aXRoIG9sZC1zdHlsZSBsaW51eCByZWN1cnNpdmUgbG9jayBpbml0aWFsaXphdGlvbiBieSBhZGRpbmcgKi8NCisvKiBza2lwcGVkIGludGVybmFsIGRlY2xhcmF0aW9uIGZyb20gcHRocmVhZC5oICovDQorZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRraW5kX25wIF9fUCgocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2tpbmQpKTsNCisjZGVmaW5lIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QDQorI2RlZmluZSBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKHgseSkgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCh4LHkpDQorI2VuZGlmIC8qIFVTRV9SRUNVUlNJVkVfTE9DS1MgLi4uICovDQorDQorc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7DQorDQorc3RhdGljIGludCBwdGhyZWFkX2luaXRfbG9jayhNTE9DS19UICpsaykNCit7DQorICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0cjsNCisNCisgICAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpKSB7IHJldHVybiAxOyB9DQorDQorI2lmIGRlZmluZWQoVVNFX1JFQ1VSU0lWRV9MT0NLUykgJiYgVVNFX1JFQ1VSU0lWRV9MT0NLUyAhPSAwDQorDQorICAgIGlmIChwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZhdHRyLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSkpIHsgcmV0dXJuIDE7IH0NCisNCisjZW5kaWYNCisNCisgICAgaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdChsaywgJmF0dHIpKSB7IHJldHVybiAxOyB9DQorDQorICAgIGlmIChwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZhdHRyKSkgeyByZXR1cm4gMTsgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorI2VuZGlmIC8qIC4uLiBsb2NrIHR5cGVzIC4uLiAqLw0KKw0KKy8qIENvbW1vbiBjb2RlIGZvciBhbGwgbG9jayB0eXBlcyAqLw0KKyNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDJVKQ0KKw0KKyNpZm5kZWYgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0sNCisjZGVmaW5lIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCkgIEFDUVVJUkVfTE9DSygmbWFsbG9jX2dsb2JhbF9tdXRleCk7DQorI2VuZGlmDQorDQorI2lmbmRlZiBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSw0KKyNkZWZpbmUgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKSAgUkVMRUFTRV9MT0NLKCZtYWxsb2NfZ2xvYmFsX211dGV4KTsNCisjZW5kaWYNCisNCisjZW5kaWYgLyogVVNFX0xPQ0tTICovDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENodW5rIHJlcHJlc2VudGF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKg0KKyAgKFRoZSBmb2xsb3dpbmcgaW5jbHVkZXMgbGlnaHRseSBlZGl0ZWQgZXhwbGFuYXRpb25zIGJ5IENvbGluIFBsdW1iLikNCisNCisgIFRoZSBtYWxsb2NfY2h1bmsgZGVjbGFyYXRpb24gYmVsb3cgaXMgbWlzbGVhZGluZyAoYnV0IGFjY3VyYXRlIGFuZA0KKyAgbmVjZXNzYXJ5KS4gIEl0IGRlY2xhcmVzIGEgInZpZXciIGludG8gbWVtb3J5IGFsbG93aW5nIGFjY2VzcyB0bw0KKyAgbmVjZXNzYXJ5IGZpZWxkcyBhdCBrbm93biBvZmZzZXRzIGZyb20gYSBnaXZlbiBiYXNlLg0KKw0KKyAgQ2h1bmtzIG9mIG1lbW9yeSBhcmUgbWFpbnRhaW5lZCB1c2luZyBhIGBib3VuZGFyeSB0YWcnIG1ldGhvZCBhcw0KKyAgb3JpZ2luYWxseSBkZXNjcmliZWQgYnkgS251dGguICAoU2VlIHRoZSBwYXBlciBieSBQYXVsIFdpbHNvbg0KKyAgZnRwOi8vZnRwLmNzLnV0ZXhhcy5lZHUvcHViL2dhcmJhZ2UvYWxsb2NzcnYucHMgZm9yIGEgc3VydmV5IG9mIHN1Y2gNCisgIHRlY2huaXF1ZXMuKSAgU2l6ZXMgb2YgZnJlZSBjaHVua3MgYXJlIHN0b3JlZCBib3RoIGluIHRoZSBmcm9udCBvZg0KKyAgZWFjaCBjaHVuayBhbmQgYXQgdGhlIGVuZC4gIFRoaXMgbWFrZXMgY29uc29saWRhdGluZyBmcmFnbWVudGVkDQorICBjaHVua3MgaW50byBiaWdnZXIgY2h1bmtzIGZhc3QuICBUaGUgaGVhZCBmaWVsZHMgYWxzbyBob2xkIGJpdHMNCisgIHJlcHJlc2VudGluZyB3aGV0aGVyIGNodW5rcyBhcmUgZnJlZSBvciBpbiB1c2UuDQorDQorICBIZXJlIGFyZSBzb21lIHBpY3R1cmVzIHRvIG1ha2UgaXQgY2xlYXJlci4gIFRoZXkgYXJlICJleHBsb2RlZCIgdG8NCisgIHNob3cgdGhhdCB0aGUgc3RhdGUgb2YgYSBjaHVuayBjYW4gYmUgdGhvdWdodCBvZiBhcyBleHRlbmRpbmcgZnJvbQ0KKyAgdGhlIGhpZ2ggMzEgYml0cyBvZiB0aGUgaGVhZCBmaWVsZCBvZiBpdHMgaGVhZGVyIHRocm91Z2ggdGhlDQorICBwcmV2X2Zvb3QgYW5kIFBJTlVTRV9CSVQgYml0IG9mIHRoZSBmb2xsb3dpbmcgY2h1bmsgaGVhZGVyLg0KKw0KKyAgQSBjaHVuayB0aGF0J3MgaW4gdXNlIGxvb2tzIGxpa2U6DQorDQorICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgICAgfCBTaXplIG9mIHByZXZpb3VzIGNodW5rIChpZiBQID0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfA0KKyAgICAgICAgIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxfCArLSsNCisgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsNCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgICAgICAgICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rDQorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoNCisgICAgICAgICArLSAgICAgIHNpemUgLSBzaXplb2Yoc2l6ZV90KSBhdmFpbGFibGUgcGF5bG9hZCBieXRlcyAgICAgICAgICAtKw0KKyAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsNCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8MXwNCisgICAgICAgfCBTaXplIG9mIG5leHQgY2h1bmsgKG1heSBvciBtYXkgbm90IGJlIGluIHVzZSkgICAgICAgICAgICAgICB8ICstKw0KKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKw0KKyAgICBBbmQgaWYgaXQncyBmcmVlLCBpdCBsb29rcyBsaWtlIHRoaXM6DQorDQorICAgY2h1bmstPiArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKw0KKyAgICAgICAgICAgfCBVc2VyIHBheWxvYWQgKG11c3QgYmUgaW4gdXNlLCBvciB3ZSB3b3VsZCBoYXZlIG1lcmdlZCEpICAgICAgIHwNCisgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfA0KKyAgICAgICAgIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwfCArLSsNCisgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgIHwgTmV4dCBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICB8IFByZXYgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoNCisgICAgICAgICArLSAgICAgIHNpemUgLSBzaXplb2Yoc3RydWN0IGNodW5rKSB1bnVzZWQgYnl0ZXMgICAgICAgICAgICAgICAtKw0KKyAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8MHwNCisgICAgICAgfCBTaXplIG9mIG5leHQgY2h1bmsgKG11c3QgYmUgaW4gdXNlLCBvciB3ZSB3b3VsZCBoYXZlIG1lcmdlZCl8ICstKw0KKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOg0KKyAgICAgICArLSBVc2VyIHBheWxvYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKw0KKyAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwwfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstKw0KKyAgTm90ZSB0aGF0IHNpbmNlIHdlIGFsd2F5cyBtZXJnZSBhZGphY2VudCBmcmVlIGNodW5rcywgdGhlIGNodW5rcw0KKyAgYWRqYWNlbnQgdG8gYSBmcmVlIGNodW5rIG11c3QgYmUgaW4gdXNlLg0KKw0KKyAgR2l2ZW4gYSBwb2ludGVyIHRvIGEgY2h1bmsgKHdoaWNoIGNhbiBiZSBkZXJpdmVkIHRyaXZpYWxseSBmcm9tIHRoZQ0KKyAgcGF5bG9hZCBwb2ludGVyKSB3ZSBjYW4sIGluIE8oMSkgdGltZSwgZmluZCBvdXQgd2hldGhlciB0aGUgYWRqYWNlbnQNCisgIGNodW5rcyBhcmUgZnJlZSwgYW5kIGlmIHNvLCB1bmxpbmsgdGhlbSBmcm9tIHRoZSBsaXN0cyB0aGF0IHRoZXkNCisgIGFyZSBvbiBhbmQgbWVyZ2UgdGhlbSB3aXRoIHRoZSBjdXJyZW50IGNodW5rLg0KKw0KKyAgQ2h1bmtzIGFsd2F5cyBiZWdpbiBvbiBldmVuIHdvcmQgYm91bmRhcmllcywgc28gdGhlIG1lbSBwb3J0aW9uDQorICAod2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIpIGlzIGFsc28gb24gYW4gZXZlbiB3b3JkIGJvdW5kYXJ5LCBhbmQNCisgIHRodXMgYXQgbGVhc3QgZG91YmxlLXdvcmQgYWxpZ25lZC4NCisNCisgIFRoZSBQIChQSU5VU0VfQklUKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIGxvdy1vcmRlciBiaXQgb2YgdGhlDQorICBjaHVuayBzaXplICh3aGljaCBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiB0d28gd29yZHMpLCBpcyBhbiBpbi11c2UNCisgIGJpdCBmb3IgdGhlICpwcmV2aW91cyogY2h1bmsuICBJZiB0aGF0IGJpdCBpcyAqY2xlYXIqLCB0aGVuIHRoZQ0KKyAgd29yZCBiZWZvcmUgdGhlIGN1cnJlbnQgY2h1bmsgc2l6ZSBjb250YWlucyB0aGUgcHJldmlvdXMgY2h1bmsNCisgIHNpemUsIGFuZCBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBmcm9udCBvZiB0aGUgcHJldmlvdXMgY2h1bmsuDQorICBUaGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlzIGhhcyB0aGlzIGJpdCBzZXQsIHByZXZlbnRpbmcNCisgIGFjY2VzcyB0byBub24tZXhpc3RlbnQgKG9yIG5vbi1vd25lZCkgbWVtb3J5LiBJZiBwaW51c2UgaXMgc2V0IGZvcg0KKyAgYW55IGdpdmVuIGNodW5rLCB0aGVuIHlvdSBDQU5OT1QgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZQ0KKyAgcHJldmlvdXMgY2h1bmssIGFuZCBtaWdodCBldmVuIGdldCBhIG1lbW9yeSBhZGRyZXNzaW5nIGZhdWx0IHdoZW4NCisgIHRyeWluZyB0byBkbyBzby4NCisNCisgIFRoZSBDIChDSU5VU0VfQklUKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIHNlY29uZC1sb3dlc3QgYml0IG9mDQorICB0aGUgY2h1bmsgc2l6ZSByZWR1bmRhbnRseSByZWNvcmRzIHdoZXRoZXIgdGhlIGN1cnJlbnQgY2h1bmsgaXMNCisgIGludXNlICh1bmxlc3MgdGhlIGNodW5rIGlzIG1tYXBwZWQpLiBUaGlzIHJlZHVuZGFuY3kgZW5hYmxlcyB1c2FnZQ0KKyAgY2hlY2tzIHdpdGhpbiBmcmVlIGFuZCByZWFsbG9jLCBhbmQgcmVkdWNlcyBpbmRpcmVjdGlvbiB3aGVuIGZyZWVpbmcNCisgIGFuZCBjb25zb2xpZGF0aW5nIGNodW5rcy4NCisNCisgIEVhY2ggZnJlc2hseSBhbGxvY2F0ZWQgY2h1bmsgbXVzdCBoYXZlIGJvdGggY2ludXNlIGFuZCBwaW51c2Ugc2V0Lg0KKyAgVGhhdCBpcywgZWFjaCBhbGxvY2F0ZWQgY2h1bmsgYm9yZGVycyBlaXRoZXIgYSBwcmV2aW91c2x5IGFsbG9jYXRlZA0KKyAgYW5kIHN0aWxsIGluLXVzZSBjaHVuaywgb3IgdGhlIGJhc2Ugb2YgaXRzIG1lbW9yeSBhcmVuYS4gVGhpcyBpcw0KKyAgZW5zdXJlZCBieSBtYWtpbmcgYWxsIGFsbG9jYXRpb25zIGZyb20gdGhlIGBsb3dlc3QnIHBhcnQgb2YgYW55DQorICBmb3VuZCBjaHVuay4gIEZ1cnRoZXIsIG5vIGZyZWUgY2h1bmsgcGh5c2ljYWxseSBib3JkZXJzIGFub3RoZXIgb25lLA0KKyAgc28gZWFjaCBmcmVlIGNodW5rIGlzIGtub3duIHRvIGJlIHByZWNlZGVkIGFuZCBmb2xsb3dlZCBieSBlaXRoZXINCisgIGludXNlIGNodW5rcyBvciB0aGUgZW5kcyBvZiBtZW1vcnkuDQorDQorICBOb3RlIHRoYXQgdGhlIGBmb290JyBvZiB0aGUgY3VycmVudCBjaHVuayBpcyBhY3R1YWxseSByZXByZXNlbnRlZA0KKyAgYXMgdGhlIHByZXZfZm9vdCBvZiB0aGUgTkVYVCBjaHVuay4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8NCisgIGRlYWwgd2l0aCBhbGlnbm1lbnRzIGV0YyBidXQgY2FuIGJlIHZlcnkgY29uZnVzaW5nIHdoZW4gdHJ5aW5nDQorICB0byBleHRlbmQgb3IgYWRhcHQgdGhpcyBjb2RlLg0KKw0KKyAgVGhlIGV4Y2VwdGlvbnMgdG8gYWxsIHRoaXMgYXJlDQorDQorICAgICAxLiBUaGUgc3BlY2lhbCBjaHVuayBgdG9wJyBpcyB0aGUgdG9wLW1vc3QgYXZhaWxhYmxlIGNodW5rIChpLmUuLA0KKyAgICAgICAgdGhlIG9uZSBib3JkZXJpbmcgdGhlIGVuZCBvZiBhdmFpbGFibGUgbWVtb3J5KS4gSXQgaXMgdHJlYXRlZA0KKyAgICAgICAgc3BlY2lhbGx5LiAgVG9wIGlzIG5ldmVyIGluY2x1ZGVkIGluIGFueSBiaW4sIGlzIHVzZWQgb25seSBpZg0KKyAgICAgICAgbm8gb3RoZXIgY2h1bmsgaXMgYXZhaWxhYmxlLCBhbmQgaXMgcmVsZWFzZWQgYmFjayB0byB0aGUNCisgICAgICAgIHN5c3RlbSBpZiBpdCBpcyB2ZXJ5IGxhcmdlIChzZWUgTV9UUklNX1RIUkVTSE9MRCkuICBJbiBlZmZlY3QsDQorICAgICAgICB0aGUgdG9wIGNodW5rIGlzIHRyZWF0ZWQgYXMgbGFyZ2VyIChhbmQgdGh1cyBsZXNzIHdlbGwNCisgICAgICAgIGZpdHRpbmcpIHRoYW4gYW55IG90aGVyIGF2YWlsYWJsZSBjaHVuay4gIFRoZSB0b3AgY2h1bmsNCisgICAgICAgIGRvZXNuJ3QgdXBkYXRlIGl0cyB0cmFpbGluZyBzaXplIGZpZWxkIHNpbmNlIHRoZXJlIGlzIG5vIG5leHQNCisgICAgICAgIGNvbnRpZ3VvdXMgY2h1bmsgdGhhdCB3b3VsZCBoYXZlIHRvIGluZGV4IG9mZiBpdC4gSG93ZXZlciwNCisgICAgICAgIHNwYWNlIGlzIHN0aWxsIGFsbG9jYXRlZCBmb3IgaXQgKFRPUF9GT09UX1NJWkUpIHRvIGVuYWJsZQ0KKyAgICAgICAgc2VwYXJhdGlvbiBvciBtZXJnaW5nIHdoZW4gc3BhY2UgaXMgZXh0ZW5kZWQuDQorDQorICAgICAzLiBDaHVua3MgYWxsb2NhdGVkIHZpYSBtbWFwLCBoYXZlIGJvdGggY2ludXNlIGFuZCBwaW51c2UgYml0cw0KKyAgICAgICAgY2xlYXJlZCBpbiB0aGVpciBoZWFkIGZpZWxkcy4gIEJlY2F1c2UgdGhleSBhcmUgYWxsb2NhdGVkDQorICAgICAgICBvbmUtYnktb25lLCBlYWNoIG11c3QgY2FycnkgaXRzIG93biBwcmV2X2Zvb3QgZmllbGQsIHdoaWNoIGlzDQorICAgICAgICBhbHNvIHVzZWQgdG8gaG9sZCB0aGUgb2Zmc2V0IHRoaXMgY2h1bmsgaGFzIHdpdGhpbiBpdHMgbW1hcHBlZA0KKyAgICAgICAgcmVnaW9uLCB3aGljaCBpcyBuZWVkZWQgdG8gcHJlc2VydmUgYWxpZ25tZW50LiBFYWNoIG1tYXBwZWQNCisgICAgICAgIGNodW5rIGlzIHRyYWlsZWQgYnkgdGhlIGZpcnN0IHR3byBmaWVsZHMgb2YgYSBmYWtlIG5leHQtY2h1bmsNCisgICAgICAgIGZvciBzYWtlIG9mIHVzYWdlIGNoZWNrcy4NCisNCisqLw0KKw0KK3N0cnVjdCBtYWxsb2NfY2h1bmsNCit7DQorICAgIHNpemVfdCAgICAgICAgICAgICAgIHByZXZfZm9vdDsgIC8qIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIGZyZWUpLiAgKi8NCisgICAgc2l6ZV90ICAgICAgICAgICAgICAgaGVhZDsgICAgICAgLyogU2l6ZSBhbmQgaW51c2UgYml0cy4gKi8NCisgICAgc3RydWN0IG1hbGxvY19jaHVuayAqZmQ7ICAgICAgICAgLyogZG91YmxlIGxpbmtzIC0tIHVzZWQgb25seSBpZiBmcmVlLiAqLw0KKyAgICBzdHJ1Y3QgbWFsbG9jX2NodW5rICpiazsNCit9Ow0KKw0KK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayAgbWNodW5rOw0KK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayAqbWNodW5rcHRyOw0KK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayAqc2JpbnB0cjsgIC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgY2h1bmtzICovDQordHlwZWRlZiB1bnNpZ25lZCBpbnQgYmluZGV4X3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovDQordHlwZWRlZiB1bnNpZ25lZCBpbnQgYmlubWFwX3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovDQordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxhZ190OyAgICAgICAgICAgLyogVGhlIHR5cGUgb2YgdmFyaW91cyBiaXQgZmxhZyBzZXRzICovDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBDaHVua3Mgc2l6ZXMgYW5kIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisjZGVmaW5lIE1DSFVOS19TSVpFICAgICAgICAgKHNpemVvZihtY2h1bmspKQ0KKw0KKyNpZiBGT09URVJTDQorI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChUV09fU0laRV9UX1NJWkVTKQ0KKyNlbHNlIC8qIEZPT1RFUlMgKi8NCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFNJWkVfVF9TSVpFKQ0KKyNlbmRpZiAvKiBGT09URVJTICovDQorDQorLyogTU1hcHBlZCBjaHVua3MgbmVlZCBhIHNlY29uZCB3b3JkIG9mIG92ZXJoZWFkIC4uLiAqLw0KKyNkZWZpbmUgTU1BUF9DSFVOS19PVkVSSEVBRCAoVFdPX1NJWkVfVF9TSVpFUykNCisvKiAuLi4gYW5kIGFkZGl0aW9uYWwgcGFkZGluZyBmb3IgZmFrZSBuZXh0LWNodW5rIGF0IGZvb3QgKi8NCisjZGVmaW5lIE1NQVBfRk9PVF9QQUQgICAgICAgKEZPVVJfU0laRV9UX1NJWkVTKQ0KKw0KKy8qIFRoZSBzbWFsbGVzdCBzaXplIHdlIGNhbiBtYWxsb2MgaXMgYW4gYWxpZ25lZCBtaW5pbWFsIGNodW5rICovDQorI2RlZmluZSBNSU5fQ0hVTktfU0laRVwNCisgICgoTUNIVU5LX1NJWkUgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQ0KKw0KKy8qIGNvbnZlcnNpb24gZnJvbSBtYWxsb2MgaGVhZGVycyB0byB1c2VyIHBvaW50ZXJzLCBhbmQgYmFjayAqLw0KKyNkZWZpbmUgY2h1bmsybWVtKHApICAgICAgICAoKHZvaWQqKSgoY2hhciopKHApICAgICAgICsgVFdPX1NJWkVfVF9TSVpFUykpDQorI2RlZmluZSBtZW0yY2h1bmsobWVtKSAgICAgICgobWNodW5rcHRyKSgoY2hhciopKG1lbSkgLSBUV09fU0laRV9UX1NJWkVTKSkNCisvKiBjaHVuayBhc3NvY2lhdGVkIHdpdGggYWxpZ25lZCBhZGRyZXNzIEEgKi8NCisjZGVmaW5lIGFsaWduX2FzX2NodW5rKEEpICAgKG1jaHVua3B0cikoKEEpICsgYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShBKSkpDQorDQorLyogQm91bmRzIG9uIHJlcXVlc3QgKG5vdCBjaHVuaykgc2l6ZXMuICovDQorI2RlZmluZSBNQVhfUkVRVUVTVCAgICAgICAgICgoLU1JTl9DSFVOS19TSVpFKSA8PCAyKQ0KKyNkZWZpbmUgTUlOX1JFUVVFU1QgICAgICAgICAoTUlOX0NIVU5LX1NJWkUgLSBDSFVOS19PVkVSSEVBRCAtIFNJWkVfVF9PTkUpDQorDQorLyogcGFkIHJlcXVlc3QgYnl0ZXMgaW50byBhIHVzYWJsZSBzaXplICovDQorI2RlZmluZSBwYWRfcmVxdWVzdChyZXEpIFwNCisgICAoKChyZXEpICsgQ0hVTktfT1ZFUkhFQUQgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQ0KKw0KKy8qIHBhZCByZXF1ZXN0LCBjaGVja2luZyBmb3IgbWluaW11bSAoYnV0IG5vdCBtYXhpbXVtKSAqLw0KKyNkZWZpbmUgcmVxdWVzdDJzaXplKHJlcSkgXA0KKyAgKCgocmVxKSA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChyZXEpKQ0KKw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGhlYWQgYW5kIGZvb3QgZmllbGRzIC0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoNCisgIFRoZSBoZWFkIGZpZWxkIG9mIGEgY2h1bmsgaXMgb3InZWQgd2l0aCBQSU5VU0VfQklUIHdoZW4gcHJldmlvdXMNCisgIGFkamFjZW50IGNodW5rIGluIHVzZSwgYW5kIG9yJ2VkIHdpdGggQ0lOVVNFX0JJVCBpZiB0aGlzIGNodW5rIGlzIGluDQorICB1c2UsIHVubGVzcyBtbWFwcGVkLCBpbiB3aGljaCBjYXNlIGJvdGggYml0cyBhcmUgY2xlYXJlZC4NCisNCisgIEZMQUc0X0JJVCBpcyBub3QgdXNlZCBieSB0aGlzIG1hbGxvYywgYnV0IG1pZ2h0IGJlIHVzZWZ1bCBpbiBleHRlbnNpb25zLg0KKyovDQorDQorI2RlZmluZSBQSU5VU0VfQklUICAgICAgICAgIChTSVpFX1RfT05FKQ0KKyNkZWZpbmUgQ0lOVVNFX0JJVCAgICAgICAgICAoU0laRV9UX1RXTykNCisjZGVmaW5lIEZMQUc0X0JJVCAgICAgICAgICAgKFNJWkVfVF9GT1VSKQ0KKyNkZWZpbmUgSU5VU0VfQklUUyAgICAgICAgICAoUElOVVNFX0JJVHxDSU5VU0VfQklUKQ0KKyNkZWZpbmUgRkxBR19CSVRTICAgICAgICAgICAoUElOVVNFX0JJVHxDSU5VU0VfQklUfEZMQUc0X0JJVCkNCisNCisvKiBIZWFkIHZhbHVlIGZvciBmZW5jZXBvc3RzICovDQorI2RlZmluZSBGRU5DRVBPU1RfSEVBRCAgICAgIChJTlVTRV9CSVRTfFNJWkVfVF9TSVpFKQ0KKw0KKy8qIGV4dHJhY3Rpb24gb2YgZmllbGRzIGZyb20gaGVhZCB3b3JkcyAqLw0KKyNkZWZpbmUgY2ludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgQ0lOVVNFX0JJVCkNCisjZGVmaW5lIHBpbnVzZShwKSAgICAgICAgICAgKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpDQorI2RlZmluZSBmbGFnNGludXNlKHApICAgICAgICgocCktPmhlYWQgJiBGTEFHNF9CSVQpDQorI2RlZmluZSBpc19pbnVzZShwKSAgICAgICAgICgoKHApLT5oZWFkICYgSU5VU0VfQklUUykgIT0gUElOVVNFX0JJVCkNCisjZGVmaW5lIGlzX21tYXBwZWQocCkgICAgICAgKCgocCktPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSAwKQ0KKw0KKyNkZWZpbmUgY2h1bmtzaXplKHApICAgICAgICAoKHApLT5oZWFkICYgfihGTEFHX0JJVFMpKQ0KKw0KKyNkZWZpbmUgY2xlYXJfcGludXNlKHApICAgICAoKHApLT5oZWFkICY9IH5QSU5VU0VfQklUKQ0KKyNkZWZpbmUgc2V0X2ZsYWc0KHApICAgICAgICAoKHApLT5oZWFkIHw9IEZMQUc0X0JJVCkNCisjZGVmaW5lIGNsZWFyX2ZsYWc0KHApICAgICAgKChwKS0+aGVhZCAmPSB+RkxBRzRfQklUKQ0KKw0KKy8qIFRyZWF0IHNwYWNlIGF0IHB0ciArLy0gb2Zmc2V0IGFzIGEgY2h1bmsgKi8NCisjZGVmaW5lIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHMpICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSkNCisjZGVmaW5lIGNodW5rX21pbnVzX29mZnNldChwLCBzKSAoKG1jaHVua3B0cikoKChjaGFyKikocCkpIC0gKHMpKSkNCisNCisvKiBQdHIgdG8gbmV4dCBvciBwcmV2aW91cyBwaHlzaWNhbCBtYWxsb2NfY2h1bmsuICovDQorI2RlZmluZSBuZXh0X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpICsgKChwKS0+aGVhZCAmIH5GTEFHX0JJVFMpKSkNCisjZGVmaW5lIHByZXZfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgLSAoKHApLT5wcmV2X2Zvb3QpICkpDQorDQorLyogZXh0cmFjdCBuZXh0IGNodW5rJ3MgcGludXNlIGJpdCAqLw0KKyNkZWZpbmUgbmV4dF9waW51c2UocCkgICgobmV4dF9jaHVuayhwKS0+aGVhZCkgJiBQSU5VU0VfQklUKQ0KKw0KKy8qIEdldC9zZXQgc2l6ZSBhdCBmb290ZXIgKi8NCisjZGVmaW5lIGdldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290KQ0KKyNkZWZpbmUgc2V0X2Zvb3QocCwgcykgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QgPSAocykpDQorDQorLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGFuZCBmb290ICovDQorI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcylcDQorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVCksIHNldF9mb290KHAsIHMpKQ0KKw0KKy8qIFNldCBzaXplLCBwaW51c2UgYml0LCBmb290LCBhbmQgY2xlYXIgbmV4dCBwaW51c2UgKi8NCisjZGVmaW5lIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHMsIG4pXA0KKyAgKGNsZWFyX3BpbnVzZShuKSwgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHMpKQ0KKw0KKy8qIEdldCB0aGUgaW50ZXJuYWwgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIGNodW5rIHAgKi8NCisjZGVmaW5lIG92ZXJoZWFkX2ZvcihwKVwNCisgKGlzX21tYXBwZWQocCk/IE1NQVBfQ0hVTktfT1ZFUkhFQUQgOiBDSFVOS19PVkVSSEVBRCkNCisNCisvKiBSZXR1cm4gdHJ1ZSBpZiBtYWxsb2NlZCBzcGFjZSBpcyBub3QgbmVjZXNzYXJpbHkgY2xlYXJlZCAqLw0KKyNpZiBNTUFQX0NMRUFSUw0KKyNkZWZpbmUgY2FsbG9jX211c3RfY2xlYXIocCkgKCFpc19tbWFwcGVkKHApKQ0KKyNlbHNlIC8qIE1NQVBfQ0xFQVJTICovDQorI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoMSkNCisjZW5kaWYgLyogTU1BUF9DTEVBUlMgKi8NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE92ZXJsYWlkIGRhdGEgc3RydWN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qDQorICBXaGVuIGNodW5rcyBhcmUgbm90IGluIHVzZSwgdGhleSBhcmUgdHJlYXRlZCBhcyBub2RlcyBvZiBlaXRoZXINCisgIGxpc3RzIG9yIHRyZWVzLg0KKw0KKyAgIlNtYWxsIiAgY2h1bmtzIGFyZSBzdG9yZWQgaW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0cywgYW5kIGxvb2sNCisgIGxpa2UgdGhpczoNCisNCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfA0KKyAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgIHwNCisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgICAgIHwgICAgICAgICAgICAgQmFjayBwb2ludGVyIHRvIHByZXZpb3VzIGNodW5rIGluIGxpc3QgICAgICAgICAgICB8DQorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAgICAgLg0KKyAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuDQorICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCituZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisNCisgIExhcmdlciBjaHVua3MgYXJlIGtlcHQgaW4gYSBmb3JtIG9mIGJpdHdpc2UgZGlnaXRhbCB0cmVlcyAoYWthDQorICB0cmllcykga2V5ZWQgb24gY2h1bmtzaXplcy4gIEJlY2F1c2UgbWFsbG9jX3RyZWVfY2h1bmtzIGFyZSBvbmx5IGZvcg0KKyAgZnJlZSBjaHVua3MgZ3JlYXRlciB0aGFuIDI1NiBieXRlcywgdGhlaXIgc2l6ZSBkb2Vzbid0IGltcG9zZSBhbnkNCisgIGNvbnN0cmFpbnRzIG9uIHVzZXIgY2h1bmsgc2l6ZXMuICBFYWNoIG5vZGUgbG9va3MgbGlrZToNCisNCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfA0KKyAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBvZiBzYW1lIHNpemUgICAgICAgIHwNCisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgICAgIHwgICAgICAgICAgICAgQmFjayBwb2ludGVyIHRvIHByZXZpb3VzIGNodW5rIG9mIHNhbWUgc2l6ZSAgICAgICB8DQorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gbGVmdCBjaGlsZCAoY2hpbGRbMF0pICAgICAgICAgICAgICAgICAgfA0KKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIHJpZ2h0IGNoaWxkIChjaGlsZFsxXSkgICAgICAgICAgICAgICAgIHwNCisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byBwYXJlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICAgICB8ICAgICAgICAgICAgIGJpbiBpbmRleCBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgICAgfCAgICAgICAgICAgICBVbnVzZWQgc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4NCisgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KK25leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKw0KKyAgRWFjaCB0cmVlIGhvbGRpbmcgdHJlZW5vZGVzIGlzIGEgdHJlZSBvZiB1bmlxdWUgY2h1bmsgc2l6ZXMuICBDaHVua3MNCisgIG9mIHRoZSBzYW1lIHNpemUgYXJlIGFycmFuZ2VkIGluIGEgY2lyY3VsYXJseS1saW5rZWQgbGlzdCwgd2l0aCBvbmx5DQorICB0aGUgb2xkZXN0IGNodW5rICh0aGUgbmV4dCB0byBiZSB1c2VkLCBpbiBvdXIgRklGTyBvcmRlcmluZykNCisgIGFjdHVhbGx5IGluIHRoZSB0cmVlLiAgKFRyZWUgbWVtYmVycyBhcmUgZGlzdGluZ3Vpc2hlZCBieSBhIG5vbi1udWxsDQorICBwYXJlbnQgcG9pbnRlci4pICBJZiBhIGNodW5rIHdpdGggdGhlIHNhbWUgc2l6ZSBhbiBhbiBleGlzdGluZyBub2RlDQorICBpcyBpbnNlcnRlZCwgaXQgaXMgbGlua2VkIG9mZiB0aGUgZXhpc3Rpbmcgbm9kZSB1c2luZyBwb2ludGVycyB0aGF0DQorICB3b3JrIGluIHRoZSBzYW1lIHdheSBhcyBmZC9iayBwb2ludGVycyBvZiBzbWFsbCBjaHVua3MuDQorDQorICBFYWNoIHRyZWUgY29udGFpbnMgYSBwb3dlciBvZiAyIHNpemVkIHJhbmdlIG9mIGNodW5rIHNpemVzICh0aGUNCisgIHNtYWxsZXN0IGlzIDB4MTAwIDw9IHggPCAweDE4MCksIHdoaWNoIGlzIGlzIGRpdmlkZWQgaW4gaGFsZiBhdCBlYWNoDQorICB0cmVlIGxldmVsLCB3aXRoIHRoZSBjaHVua3MgaW4gdGhlIHNtYWxsZXIgaGFsZiBvZiB0aGUgcmFuZ2UgKDB4MTAwDQorICA8PSB4IDwgMHgxNDAgZm9yIHRoZSB0b3Agbm9zZSkgaW4gdGhlIGxlZnQgc3VidHJlZSBhbmQgdGhlIGxhcmdlcg0KKyAgaGFsZiAoMHgxNDAgPD0geCA8IDB4MTgwKSBpbiB0aGUgcmlnaHQgc3VidHJlZS4gIFRoaXMgaXMsIG9mIGNvdXJzZSwNCisgIGRvbmUgYnkgaW5zcGVjdGluZyBpbmRpdmlkdWFsIGJpdHMuDQorDQorICBVc2luZyB0aGVzZSBydWxlcywgZWFjaCBub2RlJ3MgbGVmdCBzdWJ0cmVlIGNvbnRhaW5zIGFsbCBzbWFsbGVyDQorICBzaXplcyB0aGFuIGl0cyByaWdodCBzdWJ0cmVlLiAgSG93ZXZlciwgdGhlIG5vZGUgYXQgdGhlIHJvb3Qgb2YgZWFjaA0KKyAgc3VidHJlZSBoYXMgbm8gcGFydGljdWxhciBvcmRlcmluZyByZWxhdGlvbnNoaXAgdG8gZWl0aGVyLiAgKFRoZQ0KKyAgZGl2aWRpbmcgbGluZSBiZXR3ZWVuIHRoZSBzdWJ0cmVlIHNpemVzIGlzIGJhc2VkIG9uIHRyaWUgcmVsYXRpb24uKQ0KKyAgSWYgd2UgcmVtb3ZlIHRoZSBsYXN0IGNodW5rIG9mIGEgZ2l2ZW4gc2l6ZSBmcm9tIHRoZSBpbnRlcmlvciBvZiB0aGUNCisgIHRyZWUsIHdlIG5lZWQgdG8gcmVwbGFjZSBpdCB3aXRoIGEgbGVhZiBub2RlLiAgVGhlIHRyZWUgb3JkZXJpbmcNCisgIHJ1bGVzIHBlcm1pdCBhIG5vZGUgdG8gYmUgcmVwbGFjZWQgYnkgYW55IGxlYWYgYmVsb3cgaXQuDQorDQorICBUaGUgc21hbGxlc3QgY2h1bmsgaW4gYSB0cmVlIChhIGNvbW1vbiBvcGVyYXRpb24gaW4gYSBiZXN0LWZpdA0KKyAgYWxsb2NhdG9yKSBjYW4gYmUgZm91bmQgYnkgd2Fsa2luZyBhIHBhdGggdG8gdGhlIGxlZnRtb3N0IGxlYWYgaW4NCisgIHRoZSB0cmVlLiAgVW5saWtlIGEgdXN1YWwgYmluYXJ5IHRyZWUsIHdoZXJlIHdlIGZvbGxvdyBsZWZ0IGNoaWxkDQorICBwb2ludGVycyB1bnRpbCB3ZSByZWFjaCBhIG51bGwsIGhlcmUgd2UgZm9sbG93IHRoZSByaWdodCBjaGlsZA0KKyAgcG9pbnRlciBhbnkgdGltZSB0aGUgbGVmdCBvbmUgaXMgbnVsbCwgdW50aWwgd2UgcmVhY2ggYSBsZWFmIHdpdGgNCisgIGJvdGggY2hpbGQgcG9pbnRlcnMgbnVsbC4gVGhlIHNtYWxsZXN0IGNodW5rIGluIHRoZSB0cmVlIHdpbGwgYmUNCisgIHNvbWV3aGVyZSBhbG9uZyB0aGF0IHBhdGguDQorDQorICBUaGUgd29yc3QgY2FzZSBudW1iZXIgb2Ygc3RlcHMgdG8gYWRkLCBmaW5kLCBvciByZW1vdmUgYSBub2RlIGlzDQorICBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgYml0cyBkaWZmZXJlbnRpYXRpbmcgY2h1bmtzIHdpdGhpbg0KKyAgYmlucy4gVW5kZXIgY3VycmVudCBiaW4gY2FsY3VsYXRpb25zLCB0aGlzIHJhbmdlcyBmcm9tIDYgdXAgdG8gMjENCisgIChmb3IgMzIgYml0IHNpemVzKSBvciB1cCB0byA1MyAoZm9yIDY0IGJpdCBzaXplcykuIFRoZSB0eXBpY2FsIGNhc2UNCisgIGlzIG9mIGNvdXJzZSBtdWNoIGJldHRlci4NCisqLw0KKw0KK3N0cnVjdCBtYWxsb2NfdHJlZV9jaHVuaw0KK3sNCisgICAgLyogVGhlIGZpcnN0IGZvdXIgZmllbGRzIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIG1hbGxvY19jaHVuayAqLw0KKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgIHByZXZfZm9vdDsNCisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBoZWFkOw0KKyAgICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgKmZkOw0KKyAgICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgKmJrOw0KKw0KKyAgICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgKmNoaWxkWzJdOw0KKyAgICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgKnBhcmVudDsNCisgICAgYmluZGV4X3QgICAgICAgICAgICAgICAgICBpbmRleDsNCit9Ow0KKw0KK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rICB0Y2h1bms7DQordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgKnRjaHVua3B0cjsNCit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayAqdGJpbnB0cjsgLyogVGhlIHR5cGUgb2YgYmlucyBvZiB0cmVlcyAqLw0KKw0KKy8qIEEgbGl0dGxlIGhlbHBlciBtYWNybyBmb3IgdHJlZXMgKi8NCisjZGVmaW5lIGxlZnRtb3N0X2NoaWxkKHQpICgodCktPmNoaWxkWzBdICE9IDA/ICh0KS0+Y2hpbGRbMF0gOiAodCktPmNoaWxkWzFdKQ0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNlZ21lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoNCisgIEVhY2ggbWFsbG9jIHNwYWNlIG1heSBpbmNsdWRlIG5vbi1jb250aWd1b3VzIHNlZ21lbnRzLCBoZWxkIGluIGENCisgIGxpc3QgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZCByZXByZXNlbnRpbmcgdGhlDQorICB0b3AtbW9zdCBzcGFjZS4gU2VnbWVudHMgYWxzbyBpbmNsdWRlIGZsYWdzIGhvbGRpbmcgcHJvcGVydGllcyBvZg0KKyAgdGhlIHNwYWNlLiBMYXJnZSBjaHVua3MgdGhhdCBhcmUgZGlyZWN0bHkgYWxsb2NhdGVkIGJ5IG1tYXAgYXJlIG5vdA0KKyAgaW5jbHVkZWQgaW4gdGhpcyBsaXN0LiBUaGV5IGFyZSBpbnN0ZWFkIGluZGVwZW5kZW50bHkgY3JlYXRlZCBhbmQNCisgIGRlc3Ryb3llZCB3aXRob3V0IG90aGVyd2lzZSBrZWVwaW5nIHRyYWNrIG9mIHRoZW0uDQorDQorICBTZWdtZW50IG1hbmFnZW1lbnQgbWFpbmx5IGNvbWVzIGludG8gcGxheSBmb3Igc3BhY2VzIGFsbG9jYXRlZCBieQ0KKyAgTU1BUC4gIEFueSBjYWxsIHRvIE1NQVAgbWlnaHQgb3IgbWlnaHQgbm90IHJldHVybiBtZW1vcnkgdGhhdCBpcw0KKyAgYWRqYWNlbnQgdG8gYW4gZXhpc3Rpbmcgc2VnbWVudC4gIE1PUkVDT1JFIG5vcm1hbGx5IGNvbnRpZ3VvdXNseQ0KKyAgZXh0ZW5kcyB0aGUgY3VycmVudCBzcGFjZSwgc28gdGhpcyBzcGFjZSBpcyBhbG1vc3QgYWx3YXlzIGFkamFjZW50LA0KKyAgd2hpY2ggaXMgc2ltcGxlciBhbmQgZmFzdGVyIHRvIGRlYWwgd2l0aC4gKFRoaXMgaXMgd2h5IE1PUkVDT1JFIGlzDQorICB1c2VkIHByZWZlcmVudGlhbGx5IHRvIE1NQVAgd2hlbiBib3RoIGFyZSBhdmFpbGFibGUgLS0gc2VlDQorICBzeXNfYWxsb2MuKSAgV2hlbiBhbGxvY2F0aW5nIHVzaW5nIE1NQVAsIHdlIGRvbid0IHVzZSBhbnkgb2YgdGhlDQorICBoaW50aW5nIG1lY2hhbmlzbXMgKGluY29uc2lzdGVudGx5KSBzdXBwb3J0ZWQgaW4gdmFyaW91cw0KKyAgaW1wbGVtZW50YXRpb25zIG9mIHVuaXggbW1hcCwgb3IgZGlzdGluZ3Vpc2ggcmVzZXJ2aW5nIGZyb20NCisgIGNvbW1pdHRpbmcgbWVtb3J5LiBJbnN0ZWFkLCB3ZSBqdXN0IGFzayBmb3Igc3BhY2UsIGFuZCBleHBsb2l0DQorICBjb250aWd1aXR5IHdoZW4gd2UgZ2V0IGl0LiAgSXQgaXMgcHJvYmFibHkgcG9zc2libGUgdG8gZG8NCisgIGJldHRlciB0aGFuIHRoaXMgb24gc29tZSBzeXN0ZW1zLCBidXQgbm8gZ2VuZXJhbCBzY2hlbWUgc2VlbXMNCisgIHRvIGJlIHNpZ25pZmljYW50bHkgYmV0dGVyLg0KKw0KKyAgTWFuYWdlbWVudCBlbnRhaWxzIGEgc2ltcGxlciB2YXJpYW50IG9mIHRoZSBjb25zb2xpZGF0aW9uIHNjaGVtZQ0KKyAgdXNlZCBmb3IgY2h1bmtzIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIC0tIG5ldyBhZGphY2VudCBtZW1vcnkgaXMNCisgIG5vcm1hbGx5IHByZXBlbmRlZCBvciBhcHBlbmRlZCB0byBhbiBleGlzdGluZyBzZWdtZW50LiBIb3dldmVyLA0KKyAgdGhlcmUgYXJlIGxpbWl0YXRpb25zIGNvbXBhcmVkIHRvIGNodW5rIGNvbnNvbGlkYXRpb24gdGhhdCBtb3N0bHkNCisgIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCBzZWdtZW50IHByb2Nlc3NpbmcgaXMgcmVsYXRpdmVseSBpbmZyZXF1ZW50DQorICAob2NjdXJyaW5nIG9ubHkgd2hlbiBnZXR0aW5nIG1lbW9yeSBmcm9tIHN5c3RlbSkgYW5kIHRoYXQgd2UNCisgIGRvbid0IGV4cGVjdCB0byBoYXZlIGh1Z2UgbnVtYmVycyBvZiBzZWdtZW50czoNCisNCisgICogU2VnbWVudHMgYXJlIG5vdCBpbmRleGVkLCBzbyB0cmF2ZXJzYWwgcmVxdWlyZXMgbGluZWFyIHNjYW5zLiAgKEl0DQorICAgIHdvdWxkIGJlIHBvc3NpYmxlIHRvIGluZGV4IHRoZXNlLCBidXQgaXMgbm90IHdvcnRoIHRoZSBleHRyYQ0KKyAgICBvdmVyaGVhZCBhbmQgY29tcGxleGl0eSBmb3IgbW9zdCBwcm9ncmFtcyBvbiBtb3N0IHBsYXRmb3Jtcy4pDQorICAqIE5ldyBzZWdtZW50cyBhcmUgb25seSBhcHBlbmRlZCB0byBvbGQgb25lcyB3aGVuIGhvbGRpbmcgdG9wLW1vc3QNCisgICAgbWVtb3J5OyBpZiB0aGV5IGNhbm5vdCBiZSBwcmVwZW5kZWQgdG8gb3RoZXJzLCB0aGV5IGFyZSBoZWxkIGluDQorICAgIGRpZmZlcmVudCBzZWdtZW50cy4NCisNCisgIEV4Y2VwdCBmb3IgdGhlIHRvcC1tb3N0IHNlZ21lbnQgb2YgYW4gbXN0YXRlLCBlYWNoIHNlZ21lbnQgcmVjb3JkDQorICBpcyBrZXB0IGF0IHRoZSB0YWlsIG9mIGl0cyBzZWdtZW50LiBTZWdtZW50cyBhcmUgYWRkZWQgYnkgcHVzaGluZw0KKyAgc2VnbWVudCByZWNvcmRzIG9udG8gdGhlIGxpc3QgaGVhZGVkIGJ5ICZtc3RhdGUuc2VnIGZvciB0aGUNCisgIGNvbnRhaW5pbmcgbXN0YXRlLg0KKw0KKyAgU2VnbWVudCBmbGFncyBjb250cm9sIGFsbG9jYXRpb24vbWVyZ2UvZGVhbGxvY2F0aW9uIHBvbGljaWVzOg0KKyAgKiBJZiBFWFRFUk5fQklUIHNldCwgdGhlbiB3ZSBkaWQgbm90IGFsbG9jYXRlIHRoaXMgc2VnbWVudCwNCisgICAgYW5kIHNvIHNob3VsZCBub3QgdHJ5IHRvIGRlYWxsb2NhdGUgb3IgbWVyZ2Ugd2l0aCBvdGhlcnMuDQorICAgIChUaGlzIGN1cnJlbnRseSBob2xkcyBvbmx5IGZvciB0aGUgaW5pdGlhbCBzZWdtZW50IHBhc3NlZA0KKyAgICBpbnRvIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlLikNCisgICogSWYgVVNFX01NQVBfQklUIHNldCwgdGhlIHNlZ21lbnQgbWF5IGJlIG1lcmdlZCB3aXRoDQorICAgIG90aGVyIHN1cnJvdW5kaW5nIG1tYXBwZWQgc2VnbWVudHMgYW5kIHRyaW1tZWQvZGUtYWxsb2NhdGVkDQorICAgIHVzaW5nIG11bm1hcC4NCisgICogSWYgbmVpdGhlciBiaXQgaXMgc2V0LCB0aGVuIHRoZSBzZWdtZW50IHdhcyBvYnRhaW5lZCB1c2luZw0KKyAgICBNT1JFQ09SRSBzbyBjYW4gYmUgbWVyZ2VkIHdpdGggc3Vycm91bmRpbmcgTU9SRUNPUkUnZCBzZWdtZW50cw0KKyAgICBhbmQgZGVhbGxvY2F0ZWQvdHJpbW1lZCB1c2luZyBNT1JFQ09SRSB3aXRoIG5lZ2F0aXZlIGFyZ3VtZW50cy4NCisqLw0KKw0KK3N0cnVjdCBtYWxsb2Nfc2VnbWVudA0KK3sNCisgICAgY2hhciAgICAgICAgKmJhc2U7ICAgICAgICAgICAgIC8qIGJhc2UgYWRkcmVzcyAqLw0KKyAgICBzaXplX3QgICAgICAgc2l6ZTsgICAgICAgICAgICAgLyogYWxsb2NhdGVkIHNpemUgKi8NCisgICAgc3RydWN0IG1hbGxvY19zZWdtZW50ICpuZXh0OyAgIC8qIHB0ciB0byBuZXh0IHNlZ21lbnQgKi8NCisgICAgZmxhZ190ICAgICAgIHNmbGFnczsgICAgICAgICAgIC8qIG1tYXAgYW5kIGV4dGVybiBmbGFnICovDQorfTsNCisNCisjZGVmaW5lIGlzX21tYXBwZWRfc2VnbWVudChTKSAgKChTKS0+c2ZsYWdzICYgVVNFX01NQVBfQklUKQ0KKyNkZWZpbmUgaXNfZXh0ZXJuX3NlZ21lbnQoUykgICAoKFMpLT5zZmxhZ3MgJiBFWFRFUk5fQklUKQ0KKw0KK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50ICBtc2VnbWVudDsNCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCAqbXNlZ21lbnRwdHI7DQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsb2Nfc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKg0KKyAgIEEgbWFsbG9jX3N0YXRlIGhvbGRzIGFsbCBvZiB0aGUgYm9va2tlZXBpbmcgZm9yIGEgc3BhY2UuDQorICAgVGhlIG1haW4gZmllbGRzIGFyZToNCisNCisgIFRvcA0KKyAgICBUaGUgdG9wbW9zdCBjaHVuayBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzZWdtZW50LiBJdHMgc2l6ZSBpcw0KKyAgICBjYWNoZWQgaW4gdG9wc2l6ZS4gIFRoZSBhY3R1YWwgc2l6ZSBvZiB0b3Btb3N0IHNwYWNlIGlzDQorICAgIHRvcHNpemUrVE9QX0ZPT1RfU0laRSwgd2hpY2ggaW5jbHVkZXMgc3BhY2UgcmVzZXJ2ZWQgZm9yIGFkZGluZw0KKyAgICBmZW5jZXBvc3RzIGFuZCBzZWdtZW50IHJlY29yZHMgaWYgbmVjZXNzYXJ5IHdoZW4gZ2V0dGluZyBtb3JlDQorICAgIHNwYWNlIGZyb20gdGhlIHN5c3RlbS4gIFRoZSBzaXplIGF0IHdoaWNoIHRvIGF1dG90cmltIHRvcCBpcw0KKyAgICBjYWNoZWQgZnJvbSBtcGFyYW1zIGluIHRyaW1fY2hlY2ssIGV4Y2VwdCB0aGF0IGl0IGlzIGRpc2FibGVkIGlmDQorICAgIGFuIGF1dG90cmltIGZhaWxzLg0KKw0KKyAgRGVzaWduYXRlZCB2aWN0aW0gKGR2KQ0KKyAgICBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgY2h1bmsgZm9yIHNlcnZpY2luZyBzbWFsbCByZXF1ZXN0cyB0aGF0DQorICAgIGRvbid0IGhhdmUgZXhhY3QgZml0cy4gIEl0IGlzIG5vcm1hbGx5IHRoZSBjaHVuayBzcGxpdCBvZmYgbW9zdA0KKyAgICByZWNlbnRseSB0byBzZXJ2aWNlIGFub3RoZXIgc21hbGwgcmVxdWVzdC4gIEl0cyBzaXplIGlzIGNhY2hlZCBpbg0KKyAgICBkdnNpemUuIFRoZSBsaW5rIGZpZWxkcyBvZiB0aGlzIGNodW5rIGFyZSBub3QgbWFpbnRhaW5lZCBzaW5jZSBpdA0KKyAgICBpcyBub3Qga2VwdCBpbiBhIGJpbi4NCisNCisgIFNtYWxsQmlucw0KKyAgICBBbiBhcnJheSBvZiBiaW4gaGVhZGVycyBmb3IgZnJlZSBjaHVua3MuICBUaGVzZSBiaW5zIGhvbGQgY2h1bmtzDQorICAgIHdpdGggc2l6ZXMgbGVzcyB0aGFuIE1JTl9MQVJHRV9TSVpFIGJ5dGVzLiBFYWNoIGJpbiBjb250YWlucw0KKyAgICBjaHVua3Mgb2YgYWxsIHRoZSBzYW1lIHNpemUsIHNwYWNlZCA4IGJ5dGVzIGFwYXJ0LiAgVG8gc2ltcGxpZnkNCisgICAgdXNlIGluIGRvdWJsZS1saW5rZWQgbGlzdHMsIGVhY2ggYmluIGhlYWRlciBhY3RzIGFzIGEgbWFsbG9jX2NodW5rDQorICAgIHBvaW50aW5nIHRvIHRoZSByZWFsIGZpcnN0IG5vZGUsIGlmIGl0IGV4aXN0cyAoZWxzZSBwb2ludGluZyB0bw0KKyAgICBpdHNlbGYpLiAgVGhpcyBhdm9pZHMgc3BlY2lhbC1jYXNpbmcgZm9yIGhlYWRlcnMuICBCdXQgdG8gYXZvaWQNCisgICAgd2FzdGUsIHdlIGFsbG9jYXRlIG9ubHkgdGhlIGZkL2JrIHBvaW50ZXJzIG9mIGJpbnMsIGFuZCB0aGVuIHVzZQ0KKyAgICByZXBvc2l0aW9uaW5nIHRyaWNrcyB0byB0cmVhdCB0aGVzZSBhcyB0aGUgZmllbGRzIG9mIGEgY2h1bmsuDQorDQorICBUcmVlQmlucw0KKyAgICBUcmVlYmlucyBhcmUgcG9pbnRlcnMgdG8gdGhlIHJvb3RzIG9mIHRyZWVzIGhvbGRpbmcgYSByYW5nZSBvZg0KKyAgICBzaXplcy4gVGhlcmUgYXJlIDIgZXF1YWxseSBzcGFjZWQgdHJlZWJpbnMgZm9yIGVhY2ggcG93ZXIgb2YgdHdvDQorICAgIGZyb20gVFJFRV9TSElGVCB0byBUUkVFX1NISUZUKzE2LiBUaGUgbGFzdCBiaW4gaG9sZHMgYW55dGhpbmcNCisgICAgbGFyZ2VyLg0KKw0KKyAgQmluIG1hcHMNCisgICAgVGhlcmUgaXMgb25lIGJpdCBtYXAgZm9yIHNtYWxsIGJpbnMgKCJzbWFsbG1hcCIpIGFuZCBvbmUgZm9yDQorICAgIHRyZWViaW5zICgidHJlZW1hcCkuICBFYWNoIGJpbiBzZXRzIGl0cyBiaXQgd2hlbiBub24tZW1wdHksIGFuZA0KKyAgICBjbGVhcnMgdGhlIGJpdCB3aGVuIGVtcHR5LiAgQml0IG9wZXJhdGlvbnMgYXJlIHRoZW4gdXNlZCB0byBhdm9pZA0KKyAgICBiaW4tYnktYmluIHNlYXJjaGluZyAtLSBuZWFybHkgYWxsICJzZWFyY2giIGlzIGRvbmUgd2l0aG91dCBldmVyDQorICAgIGxvb2tpbmcgYXQgYmlucyB0aGF0IHdvbid0IGJlIHNlbGVjdGVkLiAgVGhlIGJpdCBtYXBzDQorICAgIGNvbnNlcnZhdGl2ZWx5IHVzZSAzMiBiaXRzIHBlciBtYXAgd29yZCwgZXZlbiBpZiBvbiA2NGJpdCBzeXN0ZW0uDQorICAgIEZvciBhIGdvb2QgZGVzY3JpcHRpb24gb2Ygc29tZSBvZiB0aGUgYml0LWJhc2VkIHRlY2huaXF1ZXMgdXNlZA0KKyAgICBoZXJlLCBzZWUgSGVucnkgUy4gV2FycmVuIEpyJ3MgYm9vayAiSGFja2VyJ3MgRGVsaWdodCIgKGFuZA0KKyAgICBzdXBwbGVtZW50IGF0IGh0dHA6Ly9oYWNrZXJzZGVsaWdodC5vcmcvKS4gTWFueSBvZiB0aGVzZSBhcmUNCisgICAgaW50ZW5kZWQgdG8gcmVkdWNlIHRoZSBicmFuY2hpbmVzcyBvZiBwYXRocyB0aHJvdWdoIG1hbGxvYyBldGMsIGFzDQorICAgIHdlbGwgYXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbWVtb3J5IGxvY2F0aW9ucyByZWFkIG9yIHdyaXR0ZW4uDQorDQorICBTZWdtZW50cw0KKyAgICBBIGxpc3Qgb2Ygc2VnbWVudHMgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZA0KKyAgICByZXByZXNlbnRpbmcgdGhlIGluaXRpYWwgc3BhY2UuDQorDQorICBBZGRyZXNzIGNoZWNrIHN1cHBvcnQNCisgICAgVGhlIGxlYXN0X2FkZHIgZmllbGQgaXMgdGhlIGxlYXN0IGFkZHJlc3MgZXZlciBvYnRhaW5lZCBmcm9tDQorICAgIE1PUkVDT1JFIG9yIE1NQVAuIEF0dGVtcHRlZCBmcmVlcyBhbmQgcmVhbGxvY3Mgb2YgYW55IGFkZHJlc3MgbGVzcw0KKyAgICB0aGFuIHRoaXMgYXJlIHRyYXBwZWQgKHVubGVzcyBJTlNFQ1VSRSBpcyBkZWZpbmVkKS4NCisNCisgIE1hZ2ljIHRhZw0KKyAgICBBIGNyb3NzLWNoZWNrIGZpZWxkIHRoYXQgc2hvdWxkIGFsd2F5cyBob2xkIHNhbWUgdmFsdWUgYXMgbXBhcmFtcy5tYWdpYy4NCisNCisgIE1heCBhbGxvd2VkIGZvb3RwcmludA0KKyAgICBUaGUgbWF4aW11bSBhbGxvd2VkIGJ5dGVzIHRvIGFsbG9jYXRlIGZyb20gc3lzdGVtICh6ZXJvIG1lYW5zIG5vIGxpbWl0KQ0KKw0KKyAgRmxhZ3MNCisgICAgQml0cyByZWNvcmRpbmcgd2hldGhlciB0byB1c2UgTU1BUCwgbG9ja3MsIG9yIGNvbnRpZ3VvdXMgTU9SRUNPUkUNCisNCisgIFN0YXRpc3RpY3MNCisgICAgRWFjaCBzcGFjZSBrZWVwcyB0cmFjayBvZiBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkNCisgICAgb2J0YWluZWQgdmlhIE1PUkVDT1JFIG9yIE1NQVAuDQorDQorICBUcmltIHN1cHBvcnQNCisgICAgRmllbGRzIGhvbGRpbmcgdGhlIGFtb3VudCBvZiB1bnVzZWQgdG9wbW9zdCBtZW1vcnkgdGhhdCBzaG91bGQgdHJpZ2dlcg0KKyAgICB0cmltbWluZywgYW5kIGEgY291bnRlciB0byBmb3JjZSBwZXJpb2RpYyBzY2FubmluZyB0byByZWxlYXNlIHVudXNlZA0KKyAgICBub24tdG9wbW9zdCBzZWdtZW50cy4NCisNCisgIExvY2tpbmcNCisgICAgSWYgVVNFX0xPQ0tTIGlzIGRlZmluZWQsIHRoZSAibXV0ZXgiIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkDQorICAgIGFyb3VuZCBldmVyeSBwdWJsaWMgY2FsbCB1c2luZyB0aGlzIG1zcGFjZS4NCisNCisgIEV4dGVuc2lvbiBzdXBwb3J0DQorICAgIEEgdm9pZCogcG9pbnRlciBhbmQgYSBzaXplX3QgZmllbGQgdGhhdCBjYW4gYmUgdXNlZCB0byBoZWxwIGltcGxlbWVudA0KKyAgICBleHRlbnNpb25zIHRvIHRoaXMgbWFsbG9jLg0KKyovDQorDQorLyogQmluIHR5cGVzLCB3aWR0aHMgYW5kIHNpemVzICovDQorI2RlZmluZSBOU01BTExCSU5TICAgICAgICAoMzJVKQ0KKyNkZWZpbmUgTlRSRUVCSU5TICAgICAgICAgKDMyVSkNCisjZGVmaW5lIFNNQUxMQklOX1NISUZUICAgICgzVSkNCisjZGVmaW5lIFNNQUxMQklOX1dJRFRIICAgIChTSVpFX1RfT05FIDw8IFNNQUxMQklOX1NISUZUKQ0KKyNkZWZpbmUgVFJFRUJJTl9TSElGVCAgICAgKDhVKQ0KKyNkZWZpbmUgTUlOX0xBUkdFX1NJWkUgICAgKFNJWkVfVF9PTkUgPDwgVFJFRUJJTl9TSElGVCkNCisjZGVmaW5lIE1BWF9TTUFMTF9TSVpFICAgIChNSU5fTEFSR0VfU0laRSAtIFNJWkVfVF9PTkUpDQorI2RlZmluZSBNQVhfU01BTExfUkVRVUVTVCAoTUFYX1NNQUxMX1NJWkUgLSBDSFVOS19BTElHTl9NQVNLIC0gQ0hVTktfT1ZFUkhFQUQpDQorDQorc3RydWN0IG1hbGxvY19zdGF0ZQ0KK3sNCisgICAgYmlubWFwX3QgICBzbWFsbG1hcDsNCisgICAgYmlubWFwX3QgICB0cmVlbWFwOw0KKyAgICBzaXplX3QgICAgIGR2c2l6ZTsNCisgICAgc2l6ZV90ICAgICB0b3BzaXplOw0KKyAgICBjaGFyICAgICAgKmxlYXN0X2FkZHI7DQorICAgIG1jaHVua3B0ciAgZHY7DQorICAgIG1jaHVua3B0ciAgdG9wOw0KKyAgICBzaXplX3QgICAgIHRyaW1fY2hlY2s7DQorICAgIHNpemVfdCAgICAgcmVsZWFzZV9jaGVja3M7DQorICAgIHNpemVfdCAgICAgbWFnaWM7DQorICAgIG1jaHVua3B0ciAgc21hbGxiaW5zWyhOU01BTExCSU5TICsgMSkgKiAyXTsNCisgICAgdGJpbnB0ciAgICB0cmVlYmluc1tOVFJFRUJJTlNdOw0KKyAgICBzaXplX3QgICAgIGZvb3RwcmludDsNCisgICAgc2l6ZV90ICAgICBtYXhfZm9vdHByaW50Ow0KKyAgICBzaXplX3QgICAgIGZvb3RwcmludF9saW1pdDsgLyogemVybyBtZWFucyBubyBsaW1pdCAqLw0KKyAgICBmbGFnX3QgICAgIG1mbGFnczsNCisjaWYgVVNFX0xPQ0tTDQorICAgIE1MT0NLX1QgICAgbXV0ZXg7ICAgICAvKiBsb2NhdGUgbG9jayBhbW9uZyBmaWVsZHMgdGhhdCByYXJlbHkgY2hhbmdlICovDQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLw0KKyAgICBtc2VnbWVudCAgIHNlZzsNCisgICAgdm9pZCAgICAgICpleHRwOyAgICAgIC8qIFVudXNlZCBidXQgYXZhaWxhYmxlIGZvciBleHRlbnNpb25zICovDQorICAgIHNpemVfdCAgICAgZXh0czsNCit9Ow0KKw0KK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zdGF0ZSAgICAqbXN0YXRlOw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0gR2xvYmFsIG1hbGxvY19zdGF0ZSBhbmQgbWFsbG9jX3BhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoNCisgIG1hbGxvY19wYXJhbXMgaG9sZHMgZ2xvYmFsIHByb3BlcnRpZXMsIGluY2x1ZGluZyB0aG9zZSB0aGF0IGNhbiBiZQ0KKyAgZHluYW1pY2FsbHkgc2V0IHVzaW5nIG1hbGxvcHQuIFRoZXJlIGlzIGEgc2luZ2xlIGluc3RhbmNlLCBtcGFyYW1zLA0KKyAgaW5pdGlhbGl6ZWQgaW4gaW5pdF9tcGFyYW1zLiBOb3RlIHRoYXQgdGhlIG5vbi16ZXJvbmVzcyBvZiAibWFnaWMiDQorICBhbHNvIHNlcnZlcyBhcyBhbiBpbml0aWFsaXphdGlvbiBmbGFnLg0KKyovDQorDQorc3RydWN0IG1hbGxvY19wYXJhbXMNCit7DQorICAgIHNpemVfdCBtYWdpYzsNCisgICAgc2l6ZV90IHBhZ2Vfc2l6ZTsNCisgICAgc2l6ZV90IGdyYW51bGFyaXR5Ow0KKyAgICBzaXplX3QgbW1hcF90aHJlc2hvbGQ7DQorICAgIHNpemVfdCB0cmltX3RocmVzaG9sZDsNCisgICAgZmxhZ190IGRlZmF1bHRfbWZsYWdzOw0KK307DQorDQorc3RhdGljIHN0cnVjdCBtYWxsb2NfcGFyYW1zIG1wYXJhbXM7DQorDQorLyogRW5zdXJlIG1wYXJhbXMgaW5pdGlhbGl6ZWQgKi8NCisjZGVmaW5lIGVuc3VyZV9pbml0aWFsaXphdGlvbigpICh2b2lkKShtcGFyYW1zLm1hZ2ljICE9IDAgfHwgaW5pdF9tcGFyYW1zKCkpDQorDQorI2lmICFPTkxZX01TUEFDRVMNCisNCisvKiBUaGUgZ2xvYmFsIG1hbGxvY19zdGF0ZSB1c2VkIGZvciBhbGwgbm9uLSJtc3BhY2UiIGNhbGxzICovDQorc3RhdGljIHN0cnVjdCBtYWxsb2Nfc3RhdGUgX2dtXzsNCisjZGVmaW5lIGdtICAgICAgICAgICAgICAgICAoJl9nbV8pDQorI2RlZmluZSBpc19nbG9iYWwoTSkgICAgICAgKChNKSA9PSAmX2dtXykNCisNCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLw0KKw0KKyNkZWZpbmUgaXNfaW5pdGlhbGl6ZWQoTSkgICgoTSktPnRvcCAhPSAwKQ0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN5c3RlbSBhbGxvYyBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyogT3BlcmF0aW9ucyBvbiBtZmxhZ3MgKi8NCisNCisjZGVmaW5lIHVzZV9sb2NrKE0pICAgICAgICAgICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9MT0NLX0JJVCkNCisjZGVmaW5lIGVuYWJsZV9sb2NrKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9MT0NLX0JJVCkNCisjaWYgVVNFX0xPQ0tTDQorI2RlZmluZSBkaXNhYmxlX2xvY2soTSkgICAgICAgKChNKS0+bWZsYWdzICY9IH5VU0VfTE9DS19CSVQpDQorI2Vsc2UNCisjZGVmaW5lIGRpc2FibGVfbG9jayhNKQ0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgdXNlX21tYXAoTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX01NQVBfQklUKQ0KKyNkZWZpbmUgZW5hYmxlX21tYXAoTSkgICAgICAgICgoTSktPm1mbGFncyB8PSAgVVNFX01NQVBfQklUKQ0KKyNpZiBIQVZFX01NQVANCisjZGVmaW5lIGRpc2FibGVfbW1hcChNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9NTUFQX0JJVCkNCisjZWxzZQ0KKyNkZWZpbmUgZGlzYWJsZV9tbWFwKE0pDQorI2VuZGlmDQorDQorI2RlZmluZSB1c2Vfbm9uY29udGlndW91cyhNKSAgKChNKS0+bWZsYWdzICYgICBVU0VfTk9OQ09OVElHVU9VU19CSVQpDQorI2RlZmluZSBkaXNhYmxlX2NvbnRpZ3VvdXMoTSkgKChNKS0+bWZsYWdzIHw9ICBVU0VfTk9OQ09OVElHVU9VU19CSVQpDQorDQorI2RlZmluZSBzZXRfbG9jayhNLEwpXA0KKyAoKE0pLT5tZmxhZ3MgPSAoTCk/XA0KKyAgKChNKS0+bWZsYWdzIHwgVVNFX0xPQ0tfQklUKSA6XA0KKyAgKChNKS0+bWZsYWdzICYgflVTRV9MT0NLX0JJVCkpDQorDQorLyogcGFnZS1hbGlnbiBhIHNpemUgKi8NCisjZGVmaW5lIHBhZ2VfYWxpZ24oUylcDQorICgoKFMpICsgKG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpICYgfihtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKQ0KKw0KKy8qIGdyYW51bGFyaXR5LWFsaWduIGEgc2l6ZSAqLw0KKyNkZWZpbmUgZ3JhbnVsYXJpdHlfYWxpZ24oUylcDQorICAoKChTKSArIChtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpXA0KKyAgICYgfihtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpDQorDQorDQorLyogRm9yIG1tYXAsIHVzZSBncmFudWxhcml0eSBhbGlnbm1lbnQgb24gd2luZG93cywgZWxzZSBwYWdlLWFsaWduICovDQorI2lmZGVmIFdJTjMyDQorI2RlZmluZSBtbWFwX2FsaWduKFMpIGdyYW51bGFyaXR5X2FsaWduKFMpDQorI2Vsc2UNCisjZGVmaW5lIG1tYXBfYWxpZ24oUykgcGFnZV9hbGlnbihTKQ0KKyNlbmRpZg0KKw0KKy8qIEZvciBzeXNfYWxsb2MsIGVub3VnaCBwYWRkaW5nIHRvIGVuc3VyZSBjYW4gbWFsbG9jIHJlcXVlc3Qgb24gc3VjY2VzcyAqLw0KKyNkZWZpbmUgU1lTX0FMTE9DX1BBRERJTkcgKFRPUF9GT09UX1NJWkUgKyBNQUxMT0NfQUxJR05NRU5UKQ0KKw0KKyNkZWZpbmUgaXNfcGFnZV9hbGlnbmVkKFMpXA0KKyAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgPT0gMCkNCisjZGVmaW5lIGlzX2dyYW51bGFyaXR5X2FsaWduZWQoUylcDQorICAgKCgoc2l6ZV90KShTKSAmIChtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpID09IDApDQorDQorLyogIFRydWUgaWYgc2VnbWVudCBTIGhvbGRzIGFkZHJlc3MgQSAqLw0KKyNkZWZpbmUgc2VnbWVudF9ob2xkcyhTLCBBKVwNCisgICgoY2hhciopKEEpID49IFMtPmJhc2UgJiYgKGNoYXIqKShBKSA8IFMtPmJhc2UgKyBTLT5zaXplKQ0KKw0KKy8qIFJldHVybiBzZWdtZW50IGhvbGRpbmcgZ2l2ZW4gYWRkcmVzcyAqLw0KK3N0YXRpYyBtc2VnbWVudHB0ciBzZWdtZW50X2hvbGRpbmcobXN0YXRlIG0sIGNoYXIgKmFkZHIpDQorew0KKyAgICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7DQorDQorICAgIGZvciAoOzspDQorICAgIHsNCisgICAgICAgIGlmIChhZGRyID49IHNwLT5iYXNlICYmIGFkZHIgPCBzcC0+YmFzZSArIHNwLT5zaXplKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBzcDsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmICgoc3AgPSBzcC0+bmV4dCkgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCisvKiBSZXR1cm4gdHJ1ZSBpZiBzZWdtZW50IGNvbnRhaW5zIGEgc2VnbWVudCBsaW5rICovDQorc3RhdGljIGludCBoYXNfc2VnbWVudF9saW5rKG1zdGF0ZSBtLCBtc2VnbWVudHB0ciBzcykNCit7DQorICAgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsNCisNCisgICAgZm9yICg7OykNCisgICAgew0KKyAgICAgICAgaWYgKChjaGFyICopc3AgPj0gc3MtPmJhc2UgJiYgKGNoYXIgKilzcCA8IHNzLT5iYXNlICsgc3MtPnNpemUpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIDE7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQ0KKyNkZWZpbmUgc2hvdWxkX3RyaW0oTSxzKSAgKChzKSA+IChNKS0+dHJpbV9jaGVjaykNCisjZWxzZSAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8NCisjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgwKQ0KKyNlbmRpZiAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLw0KKw0KKy8qDQorICBUT1BfRk9PVF9TSVpFIGlzIHBhZGRpbmcgYXQgdGhlIGVuZCBvZiBhIHNlZ21lbnQsIGluY2x1ZGluZyBzcGFjZQ0KKyAgdGhhdCBtYXkgYmUgbmVlZGVkIHRvIHBsYWNlIHNlZ21lbnQgcmVjb3JkcyBhbmQgZmVuY2Vwb3N0cyB3aGVuIG5ldw0KKyAgbm9uY29udGlndW91cyBzZWdtZW50cyBhcmUgYWRkZWQuDQorKi8NCisjZGVmaW5lIFRPUF9GT09UX1NJWkVcDQorICAoYWxpZ25fb2Zmc2V0KGNodW5rMm1lbSgwKSkrcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpK01JTl9DSFVOS19TSVpFKQ0KKw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEhvb2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoNCisgIFBSRUFDVElPTiBzaG91bGQgYmUgZGVmaW5lZCB0byByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbmQgbm9uemVybyBvbg0KKyAgZmFpbHVyZS4gSWYgeW91IGFyZSBub3QgdXNpbmcgbG9ja2luZywgeW91IGNhbiByZWRlZmluZSB0aGVzZSB0byBkbw0KKyAgYW55dGhpbmcgeW91IGxpa2UuDQorKi8NCisNCisjaWYgVVNFX0xPQ0tTDQorI2RlZmluZSBQUkVBQ1RJT04oTSkgICgodXNlX2xvY2soTSkpPyBBQ1FVSVJFX0xPQ0soJihNKS0+bXV0ZXgpIDogMCkNCisjZGVmaW5lIFBPU1RBQ1RJT04oTSkgeyBpZiAodXNlX2xvY2soTSkpIFJFTEVBU0VfTE9DSygmKE0pLT5tdXRleCk7IH0NCisjZWxzZSAvKiBVU0VfTE9DS1MgKi8NCisNCisjaWZuZGVmIFBSRUFDVElPTg0KKyNkZWZpbmUgUFJFQUNUSU9OKE0pICgwKQ0KKyNlbmRpZiAgLyogUFJFQUNUSU9OICovDQorDQorI2lmbmRlZiBQT1NUQUNUSU9ODQorI2RlZmluZSBQT1NUQUNUSU9OKE0pDQorI2VuZGlmICAvKiBQT1NUQUNUSU9OICovDQorDQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLw0KKw0KKy8qDQorICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgdXBvbiBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzLg0KKyAgVVNBR0VfRVJST1JfQUNUSU9OIGlzIHRyaWdnZXJlZCBvbiBkZXRlY3RlZCBiYWQgZnJlZXMgYW5kDQorICByZWFsbG9jcy4gVGhlIGFyZ3VtZW50IHAgaXMgYW4gYWRkcmVzcyB0aGF0IG1pZ2h0IGhhdmUgdHJpZ2dlcmVkIHRoZQ0KKyAgZmF1bHQuIEl0IGlzIGlnbm9yZWQgYnkgdGhlIHR3byBwcmVkZWZpbmVkIGFjdGlvbnMsIGJ1dCBtaWdodCBiZQ0KKyAgdXNlZnVsIGluIGN1c3RvbSBhY3Rpb25zIHRoYXQgdHJ5IHRvIGhlbHAgZGlhZ25vc2UgZXJyb3JzLg0KKyovDQorDQorI2lmIFBST0NFRURfT05fRVJST1INCisNCisvKiBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgY29ycnVwdGlvbiBlcnJvcnMgY2F1c2luZyByZXNldHMgKi8NCitpbnQgbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQ7DQorDQorLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLw0KK3N0YXRpYyB2b2lkIHJlc2V0X29uX2Vycm9yKG1zdGF0ZSBtKTsNCisNCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pICByZXNldF9vbl9lcnJvcihtKQ0KKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0sIHApDQorDQorI2Vsc2UgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLw0KKw0KKyNpZm5kZWYgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04NCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pIEFCT1JUDQorI2VuZGlmIC8qIENPUlJVUFRJT05fRVJST1JfQUNUSU9OICovDQorDQorI2lmbmRlZiBVU0FHRV9FUlJPUl9BQ1RJT04NCisjZGVmaW5lIFVTQUdFX0VSUk9SX0FDVElPTihtLHApIEFCT1JUDQorI2VuZGlmIC8qIFVTQUdFX0VSUk9SX0FDVElPTiAqLw0KKw0KKyNlbmRpZiAvKiBQUk9DRUVEX09OX0VSUk9SICovDQorDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWdnaW5nIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisjaWYgISBERUJVRw0KKw0KKyNkZWZpbmUgY2hlY2tfZnJlZV9jaHVuayhNLFApDQorI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhNLFApDQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikNCisjZGVmaW5lIGNoZWNrX21tYXBwZWRfY2h1bmsoTSxQKQ0KKyNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pDQorI2RlZmluZSBjaGVja190b3BfY2h1bmsoTSxQKQ0KKw0KKyNlbHNlIC8qIERFQlVHICovDQorI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkgICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhNLFApDQorI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhNLFApICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsoTSxQKQ0KKyNkZWZpbmUgY2hlY2tfdG9wX2NodW5rKE0sUCkgICAgICAgIGRvX2NoZWNrX3RvcF9jaHVuayhNLFApDQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pDQorI2RlZmluZSBjaGVja19tbWFwcGVkX2NodW5rKE0sUCkgICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApDQorI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkgICAgICAgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKE0pDQorDQorc3RhdGljIHZvaWQgICBkb19jaGVja19hbnlfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsNCitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOw0KK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOw0KK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsNCitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsNCitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkICptZW0sIHNpemVfdCBzKTsNCitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RyZWUobXN0YXRlIG0sIHRjaHVua3B0ciB0KTsNCitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOw0KK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOw0KK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKG1zdGF0ZSBtKTsNCitzdGF0aWMgaW50ICAgIGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCk7DQorc3RhdGljIHNpemVfdCB0cmF2ZXJzZV9hbmRfY2hlY2sobXN0YXRlIG0pOw0KKyNlbmRpZiAvKiBERUJVRyAqLw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5kZXhpbmcgQmlucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorI2RlZmluZSBpc19zbWFsbChzKSAgICAgICAgICgoKHMpID4+IFNNQUxMQklOX1NISUZUKSA8IE5TTUFMTEJJTlMpDQorI2RlZmluZSBzbWFsbF9pbmRleChzKSAgICAgIChiaW5kZXhfdCkoKHMpICA+PiBTTUFMTEJJTl9TSElGVCkNCisjZGVmaW5lIHNtYWxsX2luZGV4MnNpemUoaSkgKChpKSAgPDwgU01BTExCSU5fU0hJRlQpDQorI2RlZmluZSBNSU5fU01BTExfSU5ERVggICAgIChzbWFsbF9pbmRleChNSU5fQ0hVTktfU0laRSkpDQorDQorLyogYWRkcmVzc2luZyBieSBpbmRleC4gU2VlIGFib3ZlIGFib3V0IHNtYWxsYmluIHJlcG9zaXRpb25pbmcgKi8NCisjZGVmaW5lIHNtYWxsYmluX2F0KE0sIGkpICAgKChzYmlucHRyKSgoY2hhciopJigoTSktPnNtYWxsYmluc1soaSk8PDFdKSkpDQorI2RlZmluZSB0cmVlYmluX2F0KE0saSkgICAgICgmKChNKS0+dHJlZWJpbnNbaV0pKQ0KKw0KKy8qIGFzc2lnbiB0cmVlIGluZGV4IGZvciBzaXplIFMgdG8gdmFyaWFibGUgSS4gVXNlIHg4NiBhc20gaWYgcG9zc2libGUgICovDQorI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQ0KKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXA0KK3tcDQorICB1bnNpZ25lZCBpbnQgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcDQorICBpZiAoWCA9PSAwKVwNCisgICAgSSA9IDA7XA0KKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcDQorICAgIEkgPSBOVFJFRUJJTlMtMTtcDQorICBlbHNlIHtcDQorICAgIHVuc2lnbmVkIGludCBLID0gKHVuc2lnbmVkKSBzaXplb2YoWCkqX19DSEFSX0JJVF9fIC0gMSAtICh1bnNpZ25lZCkgX19idWlsdGluX2NseihYKTsgXA0KKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wNCisgIH1cDQorfQ0KKw0KKyNlbGlmIGRlZmluZWQgKF9fSU5URUxfQ09NUElMRVIpDQorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcDQore1wNCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wNCisgIGlmIChYID09IDApXA0KKyAgICBJID0gMDtcDQorICBlbHNlIGlmIChYID4gMHhGRkZGKVwNCisgICAgSSA9IE5UUkVFQklOUy0xO1wNCisgIGVsc2Uge1wNCisgICAgdW5zaWduZWQgaW50IEsgPSBfYml0X3NjYW5fcmV2ZXJzZSAoWCk7IFwNCisgICAgSSA9ICAoYmluZGV4X3QpKChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpKTtcDQorICB9XA0KK30NCisNCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMA0KKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXA0KK3tcDQorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcDQorICBpZiAoWCA9PSAwKVwNCisgICAgSSA9IDA7XA0KKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcDQorICAgIEkgPSBOVFJFRUJJTlMtMTtcDQorICBlbHNlIHtcDQorICAgIHVuc2lnbmVkIGludCBLO1wNCisgICAgX0JpdFNjYW5SZXZlcnNlKChEV09SRCAqKSAmSywgKERXT1JEKSBYKTtcDQorICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XA0KKyAgfVwNCit9DQorDQorI2Vsc2UgLyogR05VQyAqLw0KKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXA0KK3tcDQorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcDQorICBpZiAoWCA9PSAwKVwNCisgICAgSSA9IDA7XA0KKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcDQorICAgIEkgPSBOVFJFRUJJTlMtMTtcDQorICBlbHNlIHtcDQorICAgIHVuc2lnbmVkIGludCBZID0gKHVuc2lnbmVkIGludClYO1wNCisgICAgdW5zaWduZWQgaW50IE4gPSAoKFkgLSAweDEwMCkgPj4gMTYpICYgODtcDQorICAgIHVuc2lnbmVkIGludCBLID0gKCgoWSA8PD0gTikgLSAweDEwMDApID4+IDE2KSAmIDQ7XA0KKyAgICBOICs9IEs7XA0KKyAgICBOICs9IEsgPSAoKChZIDw8PSBLKSAtIDB4NDAwMCkgPj4gMTYpICYgMjtcDQorICAgIEsgPSAxNCAtIE4gKyAoKFkgPDw9IEspID4+IDE1KTtcDQorICAgIEkgPSAoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKTtcDQorICB9XA0KK30NCisjZW5kaWYgLyogR05VQyAqLw0KKw0KKy8qIEJpdCByZXByZXNlbnRpbmcgbWF4aW11bSByZXNvbHZlZCBzaXplIGluIGEgdHJlZWJpbiBhdCBpICovDQorI2RlZmluZSBiaXRfZm9yX3RyZWVfaW5kZXgoaSkgXA0KKyAgIChpID09IE5UUkVFQklOUy0xKT8gKFNJWkVfVF9CSVRTSVpFLTEpIDogKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikNCisNCisvKiBTaGlmdCBwbGFjaW5nIG1heGltdW0gcmVzb2x2ZWQgYml0IGluIGEgdHJlZWJpbiBhdCBpIGFzIHNpZ24gYml0ICovDQorI2RlZmluZSBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoaSkgXA0KKyAgICgoaSA9PSBOVFJFRUJJTlMtMSk/IDAgOiBcDQorICAgICgoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkgLSAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKSkpDQorDQorLyogVGhlIHNpemUgb2YgdGhlIHNtYWxsZXN0IGNodW5rIGhlbGQgaW4gYmluIHdpdGggaW5kZXggaSAqLw0KKyNkZWZpbmUgbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpKSBcDQorICAgKChTSVpFX1RfT05FIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCkpIHwgIFwNCisgICAoKChzaXplX3QpKChpKSAmIFNJWkVfVF9PTkUpKSA8PCAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAxKSkpDQorDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gYmluIG1hcHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKiBiaXQgY29ycmVzcG9uZGluZyB0byBnaXZlbiBpbmRleCAqLw0KKyNkZWZpbmUgaWR4MmJpdChpKSAgICAgICAgICAgICAgKChiaW5tYXBfdCkoMSkgPDwgKGkpKQ0KKw0KKy8qIE1hcmsvQ2xlYXIgYml0cyB3aXRoIGdpdmVuIGluZGV4ICovDQorI2RlZmluZSBtYXJrX3NtYWxsbWFwKE0saSkgICAgICAoKE0pLT5zbWFsbG1hcCB8PSAgaWR4MmJpdChpKSkNCisjZGVmaW5lIGNsZWFyX3NtYWxsbWFwKE0saSkgICAgICgoTSktPnNtYWxsbWFwICY9IH5pZHgyYml0KGkpKQ0KKyNkZWZpbmUgc21hbGxtYXBfaXNfbWFya2VkKE0saSkgKChNKS0+c21hbGxtYXAgJiAgIGlkeDJiaXQoaSkpDQorDQorI2RlZmluZSBtYXJrX3RyZWVtYXAoTSxpKSAgICAgICAoKE0pLT50cmVlbWFwICB8PSAgaWR4MmJpdChpKSkNCisjZGVmaW5lIGNsZWFyX3RyZWVtYXAoTSxpKSAgICAgICgoTSktPnRyZWVtYXAgICY9IH5pZHgyYml0KGkpKQ0KKyNkZWZpbmUgdHJlZW1hcF9pc19tYXJrZWQoTSxpKSAgKChNKS0+dHJlZW1hcCAgJiAgIGlkeDJiaXQoaSkpDQorDQorLyogaXNvbGF0ZSB0aGUgbGVhc3Qgc2V0IGJpdCBvZiBhIGJpdG1hcCAqLw0KKyNkZWZpbmUgbGVhc3RfYml0KHgpICAgICAgICAgKCh4KSAmIC0oeCkpDQorDQorLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2YgbGVhc3QgYml0IG9mIHggb24gKi8NCisjZGVmaW5lIGxlZnRfYml0cyh4KSAgICAgICAgICgoeDw8MSkgfCAtKHg8PDEpKQ0KKw0KKy8qIG1hc2sgd2l0aCBhbGwgYml0cyB0byBsZWZ0IG9mIG9yIGVxdWFsIHRvIGxlYXN0IGJpdCBvZiB4IG9uICovDQorI2RlZmluZSBzYW1lX29yX2xlZnRfYml0cyh4KSAoKHgpIHwgLSh4KSkNCisNCisvKiBpbmRleCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGJpdC4gVXNlIHg4NiBhc20gaWYgcG9zc2libGUgKi8NCisNCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpDQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcDQore1wNCisgIHVuc2lnbmVkIGludCBKO1wNCisgIEogPSBfX2J1aWx0aW5fY3R6KFgpOyBcDQorICBJID0gKGJpbmRleF90KUo7XA0KK30NCisNCisjZWxpZiBkZWZpbmVkIChfX0lOVEVMX0NPTVBJTEVSKQ0KKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXA0KK3tcDQorICB1bnNpZ25lZCBpbnQgSjtcDQorICBKID0gX2JpdF9zY2FuX2ZvcndhcmQgKFgpOyBcDQorICBJID0gKGJpbmRleF90KUo7XA0KK30NCisNCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMA0KKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXA0KK3tcDQorICB1bnNpZ25lZCBpbnQgSjtcDQorICBfQml0U2NhbkZvcndhcmQoKERXT1JEICopICZKLCBYKTtcDQorICBJID0gKGJpbmRleF90KUo7XA0KK30NCisNCisjZWxpZiBVU0VfQlVJTFRJTl9GRlMNCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKSBJID0gZmZzKFgpLTENCisNCisjZWxzZQ0KKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXA0KK3tcDQorICB1bnNpZ25lZCBpbnQgWSA9IFggLSAxO1wNCisgIHVuc2lnbmVkIGludCBLID0gWSA+PiAoMTYtNCkgJiAxNjtcDQorICB1bnNpZ25lZCBpbnQgTiA9IEs7ICAgICAgICBZID4+PSBLO1wNCisgIE4gKz0gSyA9IFkgPj4gKDgtMykgJiAgODsgIFkgPj49IEs7XA0KKyAgTiArPSBLID0gWSA+PiAoNC0yKSAmICA0OyAgWSA+Pj0gSztcDQorICBOICs9IEsgPSBZID4+ICgyLTEpICYgIDI7ICBZID4+PSBLO1wNCisgIE4gKz0gSyA9IFkgPj4gKDEtMCkgJiAgMTsgIFkgPj49IEs7XA0KKyAgSSA9IChiaW5kZXhfdCkoTiArIFkpO1wNCit9DQorI2VuZGlmIC8qIEdOVUMgKi8NCisNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSdW50aW1lIENoZWNrIFN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qDQorICBGb3Igc2VjdXJpdHksIHRoZSBtYWluIGludmFyaWFudCBpcyB0aGF0IG1hbGxvYy9mcmVlL2V0YyBuZXZlcg0KKyAgd3JpdGVzIHRvIGEgc3RhdGljIGFkZHJlc3Mgb3RoZXIgdGhhbiBtYWxsb2Nfc3RhdGUsIHVubGVzcyBzdGF0aWMNCisgIG1hbGxvY19zdGF0ZSBpdHNlbGYgaGFzIGJlZW4gY29ycnVwdGVkLCB3aGljaCBjYW5ub3Qgb2NjdXIgdmlhDQorICBtYWxsb2MgKGJlY2F1c2Ugb2YgdGhlc2UgY2hlY2tzKS4gSW4gZXNzZW5jZSB0aGlzIG1lYW5zIHRoYXQgd2UNCisgIGJlbGlldmUgYWxsIHBvaW50ZXJzLCBzaXplcywgbWFwcyBldGMgaGVsZCBpbiBtYWxsb2Nfc3RhdGUsIGJ1dA0KKyAgY2hlY2sgYWxsIG9mIHRob3NlIGxpbmtlZCBvciBvZmZzZXR0ZWQgZnJvbSBvdGhlciBlbWJlZGRlZCBkYXRhDQorICBzdHJ1Y3R1cmVzLiAgVGhlc2UgY2hlY2tzIGFyZSBpbnRlcnNwZXJzZWQgd2l0aCBtYWluIGNvZGUgaW4gYSB3YXkNCisgIHRoYXQgdGVuZHMgdG8gbWluaW1pemUgdGhlaXIgcnVuLXRpbWUgY29zdC4NCisNCisgIFdoZW4gRk9PVEVSUyBpcyBkZWZpbmVkLCBpbiBhZGRpdGlvbiB0byByYW5nZSBjaGVja2luZywgd2UgYWxzbw0KKyAgdmVyaWZ5IGZvb3RlciBmaWVsZHMgb2YgaW51c2UgY2h1bmtzLCB3aGljaCBjYW4gYmUgdXNlZCBndWFyYW50ZWUNCisgIHRoYXQgdGhlIG1zdGF0ZSBjb250cm9sbGluZyBtYWxsb2MvZnJlZSBpcyBpbnRhY3QuICBUaGlzIGlzIGENCisgIHN0cmVhbWxpbmVkIHZlcnNpb24gb2YgdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBieSBXaWxsaWFtIFJvYmVydHNvbg0KKyAgZXQgYWwgaW4gIlJ1bi10aW1lIERldGVjdGlvbiBvZiBIZWFwLWJhc2VkIE92ZXJmbG93cyIgTElTQScwMw0KKyAgaHR0cDovL3d3dy51c2VuaXgub3JnL2V2ZW50cy9saXNhMDMvdGVjaC9yb2JlcnRzb24uaHRtbCBUaGUgZm9vdGVyDQorICBvZiBhbiBpbnVzZSBjaHVuayBob2xkcyB0aGUgeG9yIG9mIGl0cyBtc3RhdGUgYW5kIGEgcmFuZG9tIHNlZWQsDQorICB0aGF0IGlzIGNoZWNrZWQgdXBvbiBjYWxscyB0byBmcmVlKCkgYW5kIHJlYWxsb2MoKS4gIFRoaXMgaXMNCisgIChwcm9iYWJhbGlzdGljYWxseSkgdW5ndWVzc2FibGUgZnJvbSBvdXRzaWRlIHRoZSBwcm9ncmFtLCBidXQgY2FuIGJlDQorICBjb21wdXRlZCBieSBhbnkgY29kZSBzdWNjZXNzZnVsbHkgbWFsbG9jJ2luZyBhbnkgY2h1bmssIHNvIGRvZXMgbm90DQorICBpdHNlbGYgcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgY29kZSB0aGF0IGhhcyBhbHJlYWR5IGJyb2tlbg0KKyAgc2VjdXJpdHkgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLiAgVW5saWtlIFJvYmVydHNvbiBldCBhbCwgd2UNCisgIGFsd2F5cyBkeW5hbWljYWxseSBjaGVjayBhZGRyZXNzZXMgb2YgYWxsIG9mZnNldCBjaHVua3MgKHByZXZpb3VzLA0KKyAgbmV4dCwgZXRjKS4gVGhpcyB0dXJucyBvdXQgdG8gYmUgY2hlYXBlciB0aGFuIHJlbHlpbmcgb24gaGFzaGVzLg0KKyovDQorDQorI2lmICFJTlNFQ1VSRQ0KKy8qIENoZWNrIGlmIGFkZHJlc3MgYSBpcyBhdCBsZWFzdCBhcyBoaWdoIGFzIGFueSBmcm9tIE1PUkVDT1JFIG9yIE1NQVAgKi8NCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKChjaGFyKikoYSkgPj0gKE0pLT5sZWFzdF9hZGRyKQ0KKy8qIENoZWNrIGlmIGFkZHJlc3Mgb2YgbmV4dCBjaHVuayBuIGlzIGhpZ2hlciB0aGFuIGJhc2UgY2h1bmsgcCAqLw0KKyNkZWZpbmUgb2tfbmV4dChwLCBuKSAgICAoKGNoYXIqKShwKSA8IChjaGFyKikobikpDQorLyogQ2hlY2sgaWYgcCBoYXMgaW51c2Ugc3RhdHVzICovDQorI2RlZmluZSBva19pbnVzZShwKSAgICAgaXNfaW51c2UocCkNCisvKiBDaGVjayBpZiBwIGhhcyBpdHMgcGludXNlIGJpdCBvbiAqLw0KKyNkZWZpbmUgb2tfcGludXNlKHApICAgICBwaW51c2UocCkNCisNCisjZWxzZSAvKiAhSU5TRUNVUkUgKi8NCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKDEpDQorI2RlZmluZSBva19uZXh0KGIsIG4pICAgICgxKQ0KKyNkZWZpbmUgb2tfaW51c2UocCkgICAgICAoMSkNCisjZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgKDEpDQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLw0KKw0KKyNpZiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpDQorLyogQ2hlY2sgaWYgKGFsbGVnZWQpIG1zdGF0ZSBtIGhhcyBleHBlY3RlZCBtYWdpYyBmaWVsZCAqLw0KKyNkZWZpbmUgb2tfbWFnaWMoTSkgICAgICAoKE0pLT5tYWdpYyA9PSBtcGFyYW1zLm1hZ2ljKQ0KKyNlbHNlICAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovDQorI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgxKQ0KKyNlbmRpZiAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovDQorDQorLyogSW4gZ2NjLCB1c2UgX19idWlsdGluX2V4cGVjdCB0byBtaW5pbWl6ZSBpbXBhY3Qgb2YgY2hlY2tzICovDQorI2lmICFJTlNFQ1VSRQ0KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzDQorI2RlZmluZSBSVENIRUNLKGUpICBfX2J1aWx0aW5fZXhwZWN0KGUsIDEpDQorI2Vsc2UgLyogR05VQyAqLw0KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKGUpDQorI2VuZGlmIC8qIEdOVUMgKi8NCisjZWxzZSAvKiAhSU5TRUNVUkUgKi8NCisjZGVmaW5lIFJUQ0hFQ0soZSkgICgxKQ0KKyNlbmRpZiAvKiAhSU5TRUNVUkUgKi8NCisNCisvKiBtYWNyb3MgdG8gc2V0IHVwIGludXNlIGNodW5rcyB3aXRoIG9yIHdpdGhvdXQgZm9vdGVycyAqLw0KKw0KKyNpZiAhRk9PVEVSUw0KKw0KKyNkZWZpbmUgbWFya19pbnVzZV9mb290KE0scCxzKQ0KKw0KKy8qIE1hY3JvcyBmb3Igc2V0dGluZyBoZWFkL2Zvb3Qgb2Ygbm9uLW1tYXBwZWQgY2h1bmtzICovDQorDQorLyogU2V0IGNpbnVzZSBiaXQgYW5kIHBpbnVzZSBiaXQgb2YgbmV4dCBjaHVuayAqLw0KKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwNCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXA0KKyAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpDQorDQorLyogU2V0IGNpbnVzZSBhbmQgcGludXNlIG9mIHRoaXMgY2h1bmsgYW5kIHBpbnVzZSBvZiBuZXh0IGNodW5rICovDQorI2RlZmluZSBzZXRfaW51c2VfYW5kX3BpbnVzZShNLHAscylcDQorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcDQorICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCkNCisNCisvKiBTZXQgc2l6ZSwgY2ludXNlIGFuZCBwaW51c2UgYml0IG9mIHRoaXMgY2h1bmsgKi8NCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoTSwgcCwgcylcDQorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSkNCisNCisjZWxzZSAvKiBGT09URVJTICovDQorDQorLyogU2V0IGZvb3Qgb2YgaW51c2UgY2h1bmsgdG8gYmUgeG9yIG9mIG1zdGF0ZSBhbmQgc2VlZCAqLw0KKyNkZWZpbmUgbWFya19pbnVzZV9mb290KE0scCxzKVwNCisgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QgPSAoKHNpemVfdCkoTSkgXiBtcGFyYW1zLm1hZ2ljKSkNCisNCisjZGVmaW5lIGdldF9tc3RhdGVfZm9yKHApXA0KKyAgKChtc3RhdGUpKCgobWNodW5rcHRyKSgoY2hhciopKHApICtcDQorICAgIChjaHVua3NpemUocCkpKSktPnByZXZfZm9vdCBeIG1wYXJhbXMubWFnaWMpKQ0KKw0KKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwNCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXA0KKyAgKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKSwgXA0KKyAgbWFya19pbnVzZV9mb290KE0scCxzKSkNCisNCisjZGVmaW5lIHNldF9pbnVzZV9hbmRfcGludXNlKE0scCxzKVwNCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwNCisgICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksXA0KKyBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpKQ0KKw0KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwNCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwNCisgIG1hcmtfaW51c2VfZm9vdChNLCBwLCBzKSkNCisNCisjZW5kaWYgLyogIUZPT1RFUlMgKi8NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNldHRpbmcgbXBhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKyNpZiBMT0NLX0FUX0ZPUksNCitzdGF0aWMgdm9pZCBwcmVfZm9yayh2b2lkKSAgICAgICAgIHsgQUNRVUlSRV9MT0NLKCYoZ20pLT5tdXRleCk7IH0NCitzdGF0aWMgdm9pZCBwb3N0X2ZvcmtfcGFyZW50KHZvaWQpIHsgUkVMRUFTRV9MT0NLKCYoZ20pLT5tdXRleCk7IH0NCitzdGF0aWMgdm9pZCBwb3N0X2ZvcmtfY2hpbGQodm9pZCkgIHsgSU5JVElBTF9MT0NLKCYoZ20pLT5tdXRleCk7IH0NCisjZW5kaWYgLyogTE9DS19BVF9GT1JLICovDQorDQorLyogSW5pdGlhbGl6ZSBtcGFyYW1zICovDQorc3RhdGljIGludCBpbml0X21wYXJhbXModm9pZCkNCit7DQorI2lmZGVmIE5FRURfR0xPQkFMX0xPQ0tfSU5JVA0KKw0KKyAgICBpZiAobWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXMgPD0gMCkNCisgICAgew0KKyAgICAgICAgaW5pdF9tYWxsb2NfZ2xvYmFsX211dGV4KCk7DQorICAgIH0NCisNCisjZW5kaWYNCisNCisgICAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsNCisNCisgICAgaWYgKG1wYXJhbXMubWFnaWMgPT0gMCkNCisgICAgew0KKyAgICAgICAgc2l6ZV90IG1hZ2ljOw0KKyAgICAgICAgc2l6ZV90IHBzaXplOw0KKyAgICAgICAgc2l6ZV90IGdzaXplOw0KKw0KKyNpZm5kZWYgV0lOMzINCisgICAgICAgIHBzaXplID0gbWFsbG9jX2dldHBhZ2VzaXplOw0KKyAgICAgICAgZ3NpemUgPSAoKERFRkFVTFRfR1JBTlVMQVJJVFkgIT0gMCkgPyBERUZBVUxUX0dSQU5VTEFSSVRZIDogcHNpemUpOw0KKyNlbHNlIC8qIFdJTjMyICovDQorICAgICAgICB7DQorICAgICAgICAgICAgU1lTVEVNX0lORk8gc3lzdGVtX2luZm87DQorICAgICAgICAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtX2luZm8pOw0KKyAgICAgICAgICAgIHBzaXplID0gc3lzdGVtX2luZm8uZHdQYWdlU2l6ZTsNCisgICAgICAgICAgICBnc2l6ZSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKSA/DQorICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9HUkFOVUxBUklUWSA6IHN5c3RlbV9pbmZvLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5KTsNCisgICAgICAgIH0NCisjZW5kaWYgLyogV0lOMzIgKi8NCisNCisgICAgICAgIC8qIFNhbml0eS1jaGVjayBjb25maWd1cmF0aW9uOg0KKyAgICAgICAgICAgc2l6ZV90IG11c3QgYmUgdW5zaWduZWQgYW5kIGFzIHdpZGUgYXMgcG9pbnRlciB0eXBlLg0KKyAgICAgICAgICAgaW50cyBtdXN0IGJlIGF0IGxlYXN0IDQgYnl0ZXMuDQorICAgICAgICAgICBhbGlnbm1lbnQgbXVzdCBiZSBhdCBsZWFzdCA4Lg0KKyAgICAgICAgICAgQWxpZ25tZW50LCBtaW4gY2h1bmsgc2l6ZSwgYW5kIHBhZ2Ugc2l6ZSBtdXN0IGFsbCBiZSBwb3dlcnMgb2YgMi4NCisgICAgICAgICovDQorICAgICAgICBpZiAoKHNpemVvZihzaXplX3QpICE9IHNpemVvZihjaGFyICopKSB8fA0KKyAgICAgICAgICAgIChNQVhfU0laRV9UIDwgTUlOX0NIVU5LX1NJWkUpICB8fA0KKyAgICAgICAgICAgIChzaXplb2YoaW50KSA8IDQpICB8fA0KKyAgICAgICAgICAgIChNQUxMT0NfQUxJR05NRU5UIDwgKHNpemVfdCk4VSkgfHwNCisgICAgICAgICAgICAoKE1BTExPQ19BTElHTk1FTlQgJiAoTUFMTE9DX0FMSUdOTUVOVCAtIFNJWkVfVF9PTkUpKSAhPSAwKSB8fA0KKyAgICAgICAgICAgICgoTUNIVU5LX1NJWkUgICAgICAmIChNQ0hVTktfU0laRSAtIFNJWkVfVF9PTkUpKSAgICAgICE9IDApIHx8DQorICAgICAgICAgICAgKChnc2l6ZSAgICAgICAgICAgICYgKGdzaXplIC0gU0laRV9UX09ORSkpICAgICAgICAgICAgIT0gMCkgfHwNCisgICAgICAgICAgICAoKHBzaXplICAgICAgICAgICAgJiAocHNpemUgLSBTSVpFX1RfT05FKSkgICAgICAgICAgICAhPSAwKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBQk9SVDsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSBnc2l6ZTsNCisgICAgICAgIG1wYXJhbXMucGFnZV9zaXplID0gcHNpemU7DQorICAgICAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gREVGQVVMVF9NTUFQX1RIUkVTSE9MRDsNCisgICAgICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEOw0KKyNpZiBNT1JFQ09SRV9DT05USUdVT1VTDQorICAgICAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUIHwgVVNFX01NQVBfQklUOw0KKyNlbHNlICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovDQorICAgICAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUIHwgVVNFX01NQVBfQklUIHwgVVNFX05PTkNPTlRJR1VPVVNfQklUOw0KKyNlbmRpZiAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovDQorDQorI2lmICFPTkxZX01TUEFDRVMNCisgICAgICAgIC8qIFNldCB1cCBsb2NrIGZvciBtYWluIG1hbGxvYyBhcmVhICovDQorICAgICAgICBnbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsNCisgICAgICAgICh2b2lkKUlOSVRJQUxfTE9DSygmZ20tPm11dGV4KTsNCisjZW5kaWYNCisjaWYgTE9DS19BVF9GT1JLDQorICAgICAgICBwdGhyZWFkX2F0Zm9yaygmcHJlX2ZvcmssICZwb3N0X2ZvcmtfcGFyZW50LCAmcG9zdF9mb3JrX2NoaWxkKTsNCisjZW5kaWYNCisNCisgICAgICAgIHsNCisjaWYgVVNFX0RFVl9SQU5ET00NCisgICAgICAgICAgICBpbnQgZmQ7DQorICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZbc2l6ZW9mKHNpemVfdCldOw0KKw0KKyAgICAgICAgICAgIC8qIFRyeSB0byB1c2UgL2Rldi91cmFuZG9tLCBlbHNlIGZhbGwgYmFjayBvbiB1c2luZyB0aW1lICovDQorICAgICAgICAgICAgaWYgKChmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKSkgPj0gMCAmJg0KKyAgICAgICAgICAgICAgICByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSA9PSBzaXplb2YoYnVmKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1hZ2ljID0gKigoc2l6ZV90ICopIGJ1Zik7DQorICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyNlbmRpZiAvKiBVU0VfREVWX1JBTkRPTSAqLw0KKyNpZmRlZiBXSU4zMg0KKyAgICAgICAgICAgICAgICBtYWdpYyA9IChzaXplX3QpKEdldFRpY2tDb3VudCgpIF4gKHNpemVfdCkweDU1NTU1NTU1VSk7DQorDQorI2VsaWYgZGVmaW5lZChMQUNLU19USU1FX0gpDQorICAgICAgICAgICAgICAgIG1hZ2ljID0gKHNpemVfdCkmbWFnaWMgXiAoc2l6ZV90KTB4NTU1NTU1NTVVOw0KKyNlbHNlDQorICAgICAgICAgICAgICAgIG1hZ2ljID0gKHNpemVfdCkodGltZSgwKSBeIChzaXplX3QpMHg1NTU1NTU1NVUpOw0KKyNlbmRpZg0KKyAgICAgICAgICAgIG1hZ2ljIHw9IChzaXplX3QpOFU7ICAgIC8qIGVuc3VyZSBub256ZXJvICovDQorICAgICAgICAgICAgbWFnaWMgJj0gfihzaXplX3QpN1U7ICAgLyogaW1wcm92ZSBjaGFuY2VzIG9mIGZhdWx0IGZvciBiYWQgdmFsdWVzICovDQorICAgICAgICAgICAgLyogVW50aWwgbWVtb3J5IG1vZGVzIGNvbW1vbmx5IGF2YWlsYWJsZSwgdXNlIHZvbGF0aWxlLXdyaXRlICovDQorICAgICAgICAgICAgKCoodm9sYXRpbGUgc2l6ZV90ICopKCYobXBhcmFtcy5tYWdpYykpKSA9IG1hZ2ljOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7DQorICAgIHJldHVybiAxOw0KK30NCisNCisvKiBzdXBwb3J0IGZvciBtYWxsb3B0ICovDQorc3RhdGljIGludCBjaGFuZ2VfbXBhcmFtKGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkNCit7DQorICAgIHNpemVfdCB2YWw7DQorICAgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOw0KKyAgICB2YWwgPSAodmFsdWUgPT0gLTEpID8gTUFYX1NJWkVfVCA6IChzaXplX3QpdmFsdWU7DQorDQorICAgIHN3aXRjaCAocGFyYW1fbnVtYmVyKQ0KKyAgICB7DQorICAgIGNhc2UgTV9UUklNX1RIUkVTSE9MRDoNCisgICAgICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSB2YWw7DQorICAgICAgICByZXR1cm4gMTsNCisNCisgICAgY2FzZSBNX0dSQU5VTEFSSVRZOg0KKyAgICAgICAgaWYgKHZhbCA+PSBtcGFyYW1zLnBhZ2Vfc2l6ZSAmJiAoKHZhbCAmICh2YWwgLSAxKSkgPT0gMCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IHZhbDsNCisgICAgICAgICAgICByZXR1cm4gMTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisNCisgICAgY2FzZSBNX01NQVBfVEhSRVNIT0xEOg0KKyAgICAgICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IHZhbDsNCisgICAgICAgIHJldHVybiAxOw0KKw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCit9DQorDQorI2lmIERFQlVHDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgU3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGFueSBjaHVuaywgd2hldGhlciBmcmVlLCBpbnVzZSwgbW1hcHBlZCBldGMgICovDQorc3RhdGljIHZvaWQgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkNCit7DQorICAgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOw0KKyAgICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7DQorfQ0KKw0KKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgdG9wIGNodW5rICovDQorc3RhdGljIHZvaWQgZG9fY2hlY2tfdG9wX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkNCit7DQorICAgIG1zZWdtZW50cHRyIHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyICopcCk7DQorICAgIHNpemVfdCAgc3ogPSBwLT5oZWFkICYgfklOVVNFX0JJVFM7IC8qIHRoaXJkLWxvd2VzdCBiaXQgY2FuIGJlIHNldCEgKi8NCisgICAgYXNzZXJ0KHNwICE9IDApOw0KKyAgICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsNCisgICAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOw0KKyAgICBhc3NlcnQoc3ogPT0gbS0+dG9wc2l6ZSk7DQorICAgIGFzc2VydChzeiA+IDApOw0KKyAgICBhc3NlcnQoc3ogPT0gKChzcC0+YmFzZSArIHNwLT5zaXplKSAtIChjaGFyICopcCkgLSBUT1BfRk9PVF9TSVpFKTsNCisgICAgYXNzZXJ0KHBpbnVzZShwKSk7DQorICAgIGFzc2VydCghcGludXNlKGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KSkpOw0KK30NCisNCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIChpbnVzZSkgbW1hcHBlZCBjaHVua3MgKi8NCitzdGF0aWMgdm9pZCBkb19jaGVja19tbWFwcGVkX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkNCit7DQorICAgIHNpemVfdCAgc3ogPSBjaHVua3NpemUocCk7DQorICAgIHNpemVfdCBsZW4gPSAoc3ogKyAocC0+cHJldl9mb290KSArIE1NQVBfRk9PVF9QQUQpOw0KKyAgICBhc3NlcnQoaXNfbW1hcHBlZChwKSk7DQorICAgIGFzc2VydCh1c2VfbW1hcChtKSk7DQorICAgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOw0KKyAgICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7DQorICAgIGFzc2VydCghaXNfc21hbGwoc3opKTsNCisgICAgYXNzZXJ0KChsZW4gJiAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgPT0gMCk7DQorICAgIGFzc2VydChjaHVua19wbHVzX29mZnNldChwLCBzeiktPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpOw0KKyAgICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3ogKyBTSVpFX1RfU0laRSktPmhlYWQgPT0gMCk7DQorfQ0KKw0KKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgaW51c2UgY2h1bmtzICovDQorc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51c2VfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKQ0KK3sNCisgICAgZG9fY2hlY2tfYW55X2NodW5rKG0sIHApOw0KKyAgICBhc3NlcnQoaXNfaW51c2UocCkpOw0KKyAgICBhc3NlcnQobmV4dF9waW51c2UocCkpOw0KKyAgICAvKiBJZiBub3QgcGludXNlIGFuZCBub3QgbW1hcHBlZCwgcHJldmlvdXMgY2h1bmsgaGFzIE9LIG9mZnNldCAqLw0KKyAgICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBwaW51c2UocCkgfHwgbmV4dF9jaHVuayhwcmV2X2NodW5rKHApKSA9PSBwKTsNCisNCisgICAgaWYgKGlzX21tYXBwZWQocCkpDQorICAgIHsNCisgICAgICAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobSwgcCk7DQorICAgIH0NCit9DQorDQorLyogQ2hlY2sgcHJvcGVydGllcyBvZiBmcmVlIGNodW5rcyAqLw0KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2ZyZWVfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKQ0KK3sNCisgICAgc2l6ZV90IHN6ID0gY2h1bmtzaXplKHApOw0KKyAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KTsNCisgICAgZG9fY2hlY2tfYW55X2NodW5rKG0sIHApOw0KKyAgICBhc3NlcnQoIWlzX2ludXNlKHApKTsNCisgICAgYXNzZXJ0KCFuZXh0X3BpbnVzZShwKSk7DQorICAgIGFzc2VydCghaXNfbW1hcHBlZChwKSk7DQorDQorICAgIGlmIChwICE9IG0tPmR2ICYmIHAgIT0gbS0+dG9wKQ0KKyAgICB7DQorICAgICAgICBpZiAoc3ogPj0gTUlOX0NIVU5LX1NJWkUpDQorICAgICAgICB7DQorICAgICAgICAgICAgYXNzZXJ0KChzeiAmIENIVU5LX0FMSUdOX01BU0spID09IDApOw0KKyAgICAgICAgICAgIGFzc2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOw0KKyAgICAgICAgICAgIGFzc2VydChuZXh0LT5wcmV2X2Zvb3QgPT0gc3opOw0KKyAgICAgICAgICAgIGFzc2VydChwaW51c2UocCkpOw0KKyAgICAgICAgICAgIGFzc2VydChuZXh0ID09IG0tPnRvcCB8fCBpc19pbnVzZShuZXh0KSk7DQorICAgICAgICAgICAgYXNzZXJ0KHAtPmZkLT5iayA9PSBwKTsNCisgICAgICAgICAgICBhc3NlcnQocC0+YmstPmZkID09IHApOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSAgLyogbWFya2VycyBhcmUgYWx3YXlzIG9mIHNpemUgU0laRV9UX1NJWkUgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBhc3NlcnQoc3ogPT0gU0laRV9UX1NJWkUpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgbWFsbG9jZWQgY2h1bmtzIGF0IHRoZSBwb2ludCB0aGV5IGFyZSBtYWxsb2NlZCAqLw0KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkICptZW0sIHNpemVfdCBzKQ0KK3sNCisgICAgaWYgKG1lbSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOw0KKyAgICAgICAgc2l6ZV90IHN6ID0gcC0+aGVhZCAmIH5JTlVTRV9CSVRTOw0KKyAgICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcCk7DQorICAgICAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7DQorICAgICAgICBhc3NlcnQoc3ogPj0gTUlOX0NIVU5LX1NJWkUpOw0KKyAgICAgICAgYXNzZXJ0KHN6ID49IHMpOw0KKyAgICAgICAgLyogdW5sZXNzIG1tYXBwZWQsIHNpemUgaXMgbGVzcyB0aGFuIE1JTl9DSFVOS19TSVpFIG1vcmUgdGhhbiByZXF1ZXN0ICovDQorICAgICAgICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBzeiA8IChzICsgTUlOX0NIVU5LX1NJWkUpKTsNCisgICAgfQ0KK30NCisNCisvKiBDaGVjayBhIHRyZWUgYW5kIGl0cyBzdWJ0cmVlcy4gICovDQorc3RhdGljIHZvaWQgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpDQorew0KKyAgICB0Y2h1bmtwdHIgaGVhZCA9IDA7DQorICAgIHRjaHVua3B0ciB1ID0gdDsNCisgICAgYmluZGV4X3QgdGluZGV4ID0gdC0+aW5kZXg7DQorICAgIHNpemVfdCB0c2l6ZSA9IGNodW5rc2l6ZSh0KTsNCisgICAgYmluZGV4X3QgaWR4Ow0KKyAgICBjb21wdXRlX3RyZWVfaW5kZXgodHNpemUsIGlkeCk7DQorICAgIGFzc2VydCh0aW5kZXggPT0gaWR4KTsNCisgICAgYXNzZXJ0KHRzaXplID49IE1JTl9MQVJHRV9TSVpFKTsNCisgICAgYXNzZXJ0KHRzaXplID49IG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoaWR4KSk7DQorICAgIGFzc2VydCgoaWR4ID09IE5UUkVFQklOUyAtIDEpIHx8ICh0c2l6ZSA8IG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoKGlkeCArIDEpKSkpOw0KKw0KKyAgICBkbyAgIC8qIHRyYXZlcnNlIHRocm91Z2ggY2hhaW4gb2Ygc2FtZS1zaXplZCBub2RlcyAqLw0KKyAgICB7DQorICAgICAgICBkb19jaGVja19hbnlfY2h1bmsobSwgKChtY2h1bmtwdHIpdSkpOw0KKyAgICAgICAgYXNzZXJ0KHUtPmluZGV4ID09IHRpbmRleCk7DQorICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHUpID09IHRzaXplKTsNCisgICAgICAgIGFzc2VydCghaXNfaW51c2UodSkpOw0KKyAgICAgICAgYXNzZXJ0KCFuZXh0X3BpbnVzZSh1KSk7DQorICAgICAgICBhc3NlcnQodS0+ZmQtPmJrID09IHUpOw0KKyAgICAgICAgYXNzZXJ0KHUtPmJrLT5mZCA9PSB1KTsNCisNCisgICAgICAgIGlmICh1LT5wYXJlbnQgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMF0gPT0gMCk7DQorICAgICAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdID09IDApOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGFzc2VydChoZWFkID09IDApOyAvKiBvbmx5IG9uZSBub2RlIG9uIGNoYWluIGhhcyBwYXJlbnQgKi8NCisgICAgICAgICAgICBoZWFkID0gdTsNCisgICAgICAgICAgICBhc3NlcnQodS0+cGFyZW50ICE9IHUpOw0KKyAgICAgICAgICAgIGFzc2VydCh1LT5wYXJlbnQtPmNoaWxkWzBdID09IHUgfHwNCisgICAgICAgICAgICAgICAgICAgdS0+cGFyZW50LT5jaGlsZFsxXSA9PSB1IHx8DQorICAgICAgICAgICAgICAgICAgICooKHRiaW5wdHIgKikodS0+cGFyZW50KSkgPT0gdSk7DQorDQorICAgICAgICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMF0tPnBhcmVudCA9PSB1KTsNCisgICAgICAgICAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdICE9IHUpOw0KKyAgICAgICAgICAgICAgICBkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzBdKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKHUtPmNoaWxkWzFdICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0tPnBhcmVudCA9PSB1KTsNCisgICAgICAgICAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdICE9IHUpOw0KKyAgICAgICAgICAgICAgICBkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzFdKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDAgJiYgdS0+Y2hpbGRbMV0gIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGFzc2VydChjaHVua3NpemUodS0+Y2hpbGRbMF0pIDwgY2h1bmtzaXplKHUtPmNoaWxkWzFdKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgdSA9IHUtPmZkOw0KKyAgICB9DQorICAgIHdoaWxlICh1ICE9IHQpOw0KKw0KKyAgICBhc3NlcnQoaGVhZCAhPSAwKTsNCit9DQorDQorLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgdHJlZWJpbi4gICovDQorc3RhdGljIHZvaWQgZG9fY2hlY2tfdHJlZWJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSkNCit7DQorICAgIHRiaW5wdHIgKnRiID0gdHJlZWJpbl9hdChtLCBpKTsNCisgICAgdGNodW5rcHRyIHQgPSAqdGI7DQorICAgIGludCBlbXB0eSA9IChtLT50cmVlbWFwICYgKDFVIDw8IGkpKSA9PSAwOw0KKw0KKyAgICBpZiAodCA9PSAwKQ0KKyAgICB7DQorICAgICAgICBhc3NlcnQoZW1wdHkpOw0KKyAgICB9DQorDQorICAgIGlmICghZW1wdHkpDQorICAgIHsNCisgICAgICAgIGRvX2NoZWNrX3RyZWUobSwgdCk7DQorICAgIH0NCit9DQorDQorLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgc21hbGxiaW4uICAqLw0KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3NtYWxsYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKQ0KK3sNCisgICAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgaSk7DQorICAgIG1jaHVua3B0ciBwID0gYi0+Yms7DQorICAgIHVuc2lnbmVkIGludCBlbXB0eSA9IChtLT5zbWFsbG1hcCAmICgxVSA8PCBpKSkgPT0gMDsNCisNCisgICAgaWYgKHAgPT0gYikNCisgICAgew0KKyAgICAgICAgYXNzZXJ0KGVtcHR5KTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWVtcHR5KQ0KKyAgICB7DQorICAgICAgICBmb3IgKDsgcCAhPSBiOyBwID0gcC0+YmspDQorICAgICAgICB7DQorICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUocCk7DQorICAgICAgICAgICAgbWNodW5rcHRyIHE7DQorICAgICAgICAgICAgLyogZWFjaCBjaHVuayBjbGFpbXMgdG8gYmUgZnJlZSAqLw0KKyAgICAgICAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobSwgcCk7DQorICAgICAgICAgICAgLyogY2h1bmsgYmVsb25ncyBpbiBiaW4gKi8NCisgICAgICAgICAgICBhc3NlcnQoc21hbGxfaW5kZXgoc2l6ZSkgPT0gaSk7DQorICAgICAgICAgICAgYXNzZXJ0KHAtPmJrID09IGIgfHwgY2h1bmtzaXplKHAtPmJrKSA9PSBjaHVua3NpemUocCkpOw0KKyAgICAgICAgICAgIC8qIGNodW5rIGlzIGZvbGxvd2VkIGJ5IGFuIGludXNlIGNodW5rICovDQorICAgICAgICAgICAgcSA9IG5leHRfY2h1bmsocCk7DQorDQorICAgICAgICAgICAgaWYgKHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBxKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorLyogRmluZCB4IGluIGEgYmluLiBVc2VkIGluIG90aGVyIGNoZWNrIGZ1bmN0aW9ucy4gKi8NCitzdGF0aWMgaW50IGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCkNCit7DQorICAgIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHgpOw0KKw0KKyAgICBpZiAoaXNfc21hbGwoc2l6ZSkpDQorICAgIHsNCisgICAgICAgIGJpbmRleF90IHNpZHggPSBzbWFsbF9pbmRleChzaXplKTsNCisgICAgICAgIHNiaW5wdHIgYiA9IHNtYWxsYmluX2F0KG0sIHNpZHgpOw0KKw0KKyAgICAgICAgaWYgKHNtYWxsbWFwX2lzX21hcmtlZChtLCBzaWR4KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtY2h1bmtwdHIgcCA9IGI7DQorDQorICAgICAgICAgICAgZG8NCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGlmIChwID09IHgpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHdoaWxlICgocCA9IHAtPmZkKSAhPSBiKTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGJpbmRleF90IHRpZHg7DQorICAgICAgICBjb21wdXRlX3RyZWVfaW5kZXgoc2l6ZSwgdGlkeCk7DQorDQorICAgICAgICBpZiAodHJlZW1hcF9pc19tYXJrZWQobSwgdGlkeCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgdGNodW5rcHRyIHQgPSAqdHJlZWJpbl9hdChtLCB0aWR4KTsNCisgICAgICAgICAgICBzaXplX3Qgc2l6ZWJpdHMgPSBzaXplIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleCh0aWR4KTsNCisNCisgICAgICAgICAgICB3aGlsZSAodCAhPSAwICYmIGNodW5rc2l6ZSh0KSAhPSBzaXplKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdCA9IHQtPmNoaWxkWyhzaXplYml0cyA+PiAoU0laRV9UX0JJVFNJWkUgLSBTSVpFX1RfT05FKSkgJiAxXTsNCisgICAgICAgICAgICAgICAgc2l6ZWJpdHMgPDw9IDE7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmICh0ICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB0Y2h1bmtwdHIgdSA9IHQ7DQorDQorICAgICAgICAgICAgICAgIGRvDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlmICh1ID09ICh0Y2h1bmtwdHIpeCkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB3aGlsZSAoKHUgPSB1LT5mZCkgIT0gdCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiBUcmF2ZXJzZSBlYWNoIGNodW5rIGFuZCBjaGVjayBpdDsgcmV0dXJuIHRvdGFsICovDQorc3RhdGljIHNpemVfdCB0cmF2ZXJzZV9hbmRfY2hlY2sobXN0YXRlIG0pDQorew0KKyAgICBzaXplX3Qgc3VtID0gMDsNCisNCisgICAgaWYgKGlzX2luaXRpYWxpemVkKG0pKQ0KKyAgICB7DQorICAgICAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsNCisgICAgICAgIHN1bSArPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsNCisNCisgICAgICAgIHdoaWxlIChzICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsNCisgICAgICAgICAgICBtY2h1bmtwdHIgbGFzdHEgPSAwOw0KKyAgICAgICAgICAgIGFzc2VydChwaW51c2UocSkpOw0KKw0KKyAgICAgICAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmDQorICAgICAgICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzdW0gKz0gY2h1bmtzaXplKHEpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoaXNfaW51c2UocSkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCghYmluX2ZpbmQobSwgcSkpOw0KKyAgICAgICAgICAgICAgICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQocSA9PSBtLT5kdiB8fCBiaW5fZmluZChtLCBxKSk7DQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQobGFzdHEgPT0gMCB8fCBpc19pbnVzZShsYXN0cSkpOyAvKiBOb3QgMiBjb25zZWN1dGl2ZSBmcmVlICovDQorICAgICAgICAgICAgICAgICAgICBkb19jaGVja19mcmVlX2NodW5rKG0sIHEpOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGxhc3RxID0gcTsNCisgICAgICAgICAgICAgICAgcSA9IG5leHRfY2h1bmsocSk7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIHMgPSBzLT5uZXh0Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiBzdW07DQorfQ0KKw0KKw0KKy8qIENoZWNrIGFsbCBwcm9wZXJ0aWVzIG9mIG1hbGxvY19zdGF0ZS4gKi8NCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pDQorew0KKyAgICBiaW5kZXhfdCBpOw0KKyAgICBzaXplX3QgdG90YWw7DQorDQorICAgIC8qIGNoZWNrIGJpbnMgKi8NCisgICAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkNCisgICAgew0KKyAgICAgICAgZG9fY2hlY2tfc21hbGxiaW4obSwgaSk7DQorICAgIH0NCisNCisgICAgZm9yIChpID0gMDsgaSA8IE5UUkVFQklOUzsgKytpKQ0KKyAgICB7DQorICAgICAgICBkb19jaGVja190cmVlYmluKG0sIGkpOw0KKyAgICB9DQorDQorICAgIGlmIChtLT5kdnNpemUgIT0gMCkgICAvKiBjaGVjayBkdiBjaHVuayAqLw0KKyAgICB7DQorICAgICAgICBkb19jaGVja19hbnlfY2h1bmsobSwgbS0+ZHYpOw0KKyAgICAgICAgYXNzZXJ0KG0tPmR2c2l6ZSA9PSBjaHVua3NpemUobS0+ZHYpKTsNCisgICAgICAgIGFzc2VydChtLT5kdnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpOw0KKyAgICAgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPmR2KSA9PSAwKTsNCisgICAgfQ0KKw0KKyAgICBpZiAobS0+dG9wICE9IDApICAgICAvKiBjaGVjayB0b3AgY2h1bmsgKi8NCisgICAgew0KKyAgICAgICAgZG9fY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7DQorICAgICAgICAvKmFzc2VydChtLT50b3BzaXplID09IGNodW5rc2l6ZShtLT50b3ApKTsgcmVkdW5kYW50ICovDQorICAgICAgICBhc3NlcnQobS0+dG9wc2l6ZSA+IDApOw0KKyAgICAgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPnRvcCkgPT0gMCk7DQorICAgIH0NCisNCisgICAgdG90YWwgPSB0cmF2ZXJzZV9hbmRfY2hlY2sobSk7DQorICAgIGFzc2VydCh0b3RhbCA8PSBtLT5mb290cHJpbnQpOw0KKyAgICBhc3NlcnQobS0+Zm9vdHByaW50IDw9IG0tPm1heF9mb290cHJpbnQpOw0KK30NCisjZW5kaWYgLyogREVCVUcgKi8NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdGF0aXN0aWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKyNpZiAhTk9fTUFMTElORk8NCitzdGF0aWMgc3RydWN0IG1hbGxpbmZvIGludGVybmFsX21hbGxpbmZvKG1zdGF0ZSBtKQ0KK3sNCisgICAgc3RydWN0IG1hbGxpbmZvIG5tID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07DQorICAgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOw0KKw0KKyAgICBpZiAoIVBSRUFDVElPTihtKSkNCisgICAgew0KKyAgICAgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOw0KKw0KKyAgICAgICAgaWYgKGlzX2luaXRpYWxpemVkKG0pKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNpemVfdCBuZnJlZSA9IFNJWkVfVF9PTkU7IC8qIHRvcCBhbHdheXMgZnJlZSAqLw0KKyAgICAgICAgICAgIHNpemVfdCBtZnJlZSA9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOw0KKyAgICAgICAgICAgIHNpemVfdCBzdW0gPSBtZnJlZTsNCisgICAgICAgICAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsNCisNCisgICAgICAgICAgICB3aGlsZSAocyAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsNCisNCisgICAgICAgICAgICAgICAgd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYNCisgICAgICAgICAgICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzeiA9IGNodW5rc2l6ZShxKTsNCisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBzejsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNfaW51c2UocSkpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgbWZyZWUgKz0gc3o7DQorICAgICAgICAgICAgICAgICAgICAgICAgKytuZnJlZTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIHEgPSBuZXh0X2NodW5rKHEpOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIHMgPSBzLT5uZXh0Ow0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBubS5hcmVuYSAgICA9IHN1bTsNCisgICAgICAgICAgICBubS5vcmRibGtzICA9IG5mcmVlOw0KKyAgICAgICAgICAgIG5tLmhibGtoZCAgID0gbS0+Zm9vdHByaW50IC0gc3VtOw0KKyAgICAgICAgICAgIG5tLnVzbWJsa3MgID0gbS0+bWF4X2Zvb3RwcmludDsNCisgICAgICAgICAgICBubS51b3JkYmxrcyA9IG0tPmZvb3RwcmludCAtIG1mcmVlOw0KKyAgICAgICAgICAgIG5tLmZvcmRibGtzID0gbWZyZWU7DQorICAgICAgICAgICAgbm0ua2VlcGNvc3QgPSBtLT50b3BzaXplOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgUE9TVEFDVElPTihtKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbm07DQorfQ0KKyNlbmRpZiAvKiAhTk9fTUFMTElORk8gKi8NCisNCisjaWYgIU5PX01BTExPQ19TVEFUUw0KK3N0YXRpYyB2b2lkIGludGVybmFsX21hbGxvY19zdGF0cyhtc3RhdGUgbSkNCit7DQorICAgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOw0KKw0KKyAgICBpZiAoIVBSRUFDVElPTihtKSkNCisgICAgew0KKyAgICAgICAgc2l6ZV90IG1heGZwID0gMDsNCisgICAgICAgIHNpemVfdCBmcCA9IDA7DQorICAgICAgICBzaXplX3QgdXNlZCA9IDA7DQorICAgICAgICBjaGVja19tYWxsb2Nfc3RhdGUobSk7DQorDQorICAgICAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7DQorICAgICAgICAgICAgbWF4ZnAgPSBtLT5tYXhfZm9vdHByaW50Ow0KKyAgICAgICAgICAgIGZwID0gbS0+Zm9vdHByaW50Ow0KKyAgICAgICAgICAgIHVzZWQgPSBmcCAtIChtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRSk7DQorDQorICAgICAgICAgICAgd2hpbGUgKHMgIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7DQorDQorICAgICAgICAgICAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmDQorICAgICAgICAgICAgICAgICAgICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX2ludXNlKHEpKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgLT0gY2h1bmtzaXplKHEpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgcSA9IG5leHRfY2h1bmsocSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgcyA9IHMtPm5leHQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgUE9TVEFDVElPTihtKTsgLyogZHJvcCBsb2NrICovDQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1heCBzeXN0ZW0gYnl0ZXMgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKG1heGZwKSk7DQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInN5c3RlbSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKGZwKSk7DQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImluIHVzZSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKHVzZWQpKTsNCisgICAgfQ0KK30NCisjZW5kaWYgLyogTk9fTUFMTE9DX1NUQVRTICovDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBzbWFsbGJpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKg0KKyAgVmFyaW91cyBmb3JtcyBvZiBsaW5raW5nIGFuZCB1bmxpbmtpbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLiAgRXZlbg0KKyAgdGhlIG9uZXMgZm9yIHRyZWVzLCB3aGljaCBhcmUgdmVyeSBsb25nIGJ1dCBoYXZlIHZlcnkgc2hvcnQgdHlwaWNhbA0KKyAgcGF0aHMuICBUaGlzIGlzIHVnbHkgYnV0IHJlZHVjZXMgcmVsaWFuY2Ugb24gaW5saW5pbmcgc3VwcG9ydCBvZg0KKyAgY29tcGlsZXJzLg0KKyovDQorDQorLyogTGluayBhIGZyZWUgY2h1bmsgaW50byBhIHNtYWxsYmluICAqLw0KKyNkZWZpbmUgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcDQorICBiaW5kZXhfdCBJICA9IHNtYWxsX2luZGV4KFMpO1wNCisgIG1jaHVua3B0ciBCID0gc21hbGxiaW5fYXQoTSwgSSk7XA0KKyAgbWNodW5rcHRyIEYgPSBCO1wNCisgIGFzc2VydChTID49IE1JTl9DSFVOS19TSVpFKTtcDQorICBpZiAoIXNtYWxsbWFwX2lzX21hcmtlZChNLCBJKSlcDQorICAgIG1hcmtfc21hbGxtYXAoTSwgSSk7XA0KKyAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEItPmZkKSkpXA0KKyAgICBGID0gQi0+ZmQ7XA0KKyAgZWxzZSB7XA0KKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcDQorICB9XA0KKyAgQi0+ZmQgPSBQO1wNCisgIEYtPmJrID0gUDtcDQorICBQLT5mZCA9IEY7XA0KKyAgUC0+YmsgPSBCO1wNCit9DQorDQorLyogVW5saW5rIGEgY2h1bmsgZnJvbSBhIHNtYWxsYmluICAqLw0KKyNkZWZpbmUgdW5saW5rX3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcDQorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wNCisgIG1jaHVua3B0ciBCID0gUC0+Yms7XA0KKyAgYmluZGV4X3QgSSA9IHNtYWxsX2luZGV4KFMpO1wNCisgIGFzc2VydChQICE9IEIpO1wNCisgIGFzc2VydChQICE9IEYpO1wNCisgIGFzc2VydChjaHVua3NpemUoUCkgPT0gc21hbGxfaW5kZXgyc2l6ZShJKSk7XA0KKyAgaWYgKFJUQ0hFQ0soRiA9PSBzbWFsbGJpbl9hdChNLEkpIHx8IChva19hZGRyZXNzKE0sIEYpICYmIEYtPmJrID09IFApKSkgeyBcDQorICAgIGlmIChCID09IEYpIHtcDQorICAgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XA0KKyAgICB9XA0KKyAgICBlbHNlIGlmIChSVENIRUNLKEIgPT0gc21hbGxiaW5fYXQoTSxJKSB8fFwNCisgICAgICAgICAgICAgICAgICAgICAob2tfYWRkcmVzcyhNLCBCKSAmJiBCLT5mZCA9PSBQKSkpIHtcDQorICAgICAgRi0+YmsgPSBCO1wNCisgICAgICBCLT5mZCA9IEY7XA0KKyAgICB9XA0KKyAgICBlbHNlIHtcDQorICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XA0KKyAgICB9XA0KKyAgfVwNCisgIGVsc2Uge1wNCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XA0KKyAgfVwNCit9DQorDQorLyogVW5saW5rIHRoZSBmaXJzdCBjaHVuayBmcm9tIGEgc21hbGxiaW4gKi8NCisjZGVmaW5lIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhNLCBCLCBQLCBJKSB7XA0KKyAgbWNodW5rcHRyIEYgPSBQLT5mZDtcDQorICBhc3NlcnQoUCAhPSBCKTtcDQorICBhc3NlcnQoUCAhPSBGKTtcDQorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wNCisgIGlmIChCID09IEYpIHtcDQorICAgIGNsZWFyX3NtYWxsbWFwKE0sIEkpO1wNCisgIH1cDQorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgRikgJiYgRi0+YmsgPT0gUCkpIHtcDQorICAgIEYtPmJrID0gQjtcDQorICAgIEItPmZkID0gRjtcDQorICB9XA0KKyAgZWxzZSB7XA0KKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcDQorICB9XA0KK30NCisNCisvKiBSZXBsYWNlIGR2IG5vZGUsIGJpbm5pbmcgdGhlIG9sZCBvbmUgKi8NCisvKiBVc2VkIG9ubHkgd2hlbiBkdnNpemUga25vd24gdG8gYmUgc21hbGwgKi8NCisjZGVmaW5lIHJlcGxhY2VfZHYoTSwgUCwgUykge1wNCisgIHNpemVfdCBEVlMgPSBNLT5kdnNpemU7XA0KKyAgYXNzZXJ0KGlzX3NtYWxsKERWUykpO1wNCisgIGlmIChEVlMgIT0gMCkge1wNCisgICAgbWNodW5rcHRyIERWID0gTS0+ZHY7XA0KKyAgICBpbnNlcnRfc21hbGxfY2h1bmsoTSwgRFYsIERWUyk7XA0KKyAgfVwNCisgIE0tPmR2c2l6ZSA9IFM7XA0KKyAgTS0+ZHYgPSBQO1wNCit9DQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIHRyZWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKiBJbnNlcnQgY2h1bmsgaW50byB0cmVlICovDQorI2RlZmluZSBpbnNlcnRfbGFyZ2VfY2h1bmsoTSwgWCwgUykge1wNCisgIHRiaW5wdHIqIEg7XA0KKyAgYmluZGV4X3QgSTtcDQorICBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSk7XA0KKyAgSCA9IHRyZWViaW5fYXQoTSwgSSk7XA0KKyAgWC0+aW5kZXggPSBJO1wNCisgIFgtPmNoaWxkWzBdID0gWC0+Y2hpbGRbMV0gPSAwO1wNCisgIGlmICghdHJlZW1hcF9pc19tYXJrZWQoTSwgSSkpIHtcDQorICAgIG1hcmtfdHJlZW1hcChNLCBJKTtcDQorICAgICpIID0gWDtcDQorICAgIFgtPnBhcmVudCA9ICh0Y2h1bmtwdHIpSDtcDQorICAgIFgtPmZkID0gWC0+YmsgPSBYO1wNCisgIH1cDQorICBlbHNlIHtcDQorICAgIHRjaHVua3B0ciBUID0gKkg7XA0KKyAgICBzaXplX3QgSyA9IFMgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KEkpO1wNCisgICAgZm9yICg7Oykge1wNCisgICAgICBpZiAoY2h1bmtzaXplKFQpICE9IFMpIHtcDQorICAgICAgICB0Y2h1bmtwdHIqIEMgPSAmKFQtPmNoaWxkWyhLID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXSk7XA0KKyAgICAgICAgSyA8PD0gMTtcDQorICAgICAgICBpZiAoKkMgIT0gMClcDQorICAgICAgICAgIFQgPSAqQztcDQorICAgICAgICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQykpKSB7XA0KKyAgICAgICAgICAqQyA9IFg7XA0KKyAgICAgICAgICBYLT5wYXJlbnQgPSBUO1wNCisgICAgICAgICAgWC0+ZmQgPSBYLT5iayA9IFg7XA0KKyAgICAgICAgICBicmVhaztcDQorICAgICAgICB9XA0KKyAgICAgICAgZWxzZSB7XA0KKyAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcDQorICAgICAgICAgIGJyZWFrO1wNCisgICAgICAgIH1cDQorICAgICAgfVwNCisgICAgICBlbHNlIHtcDQorICAgICAgICB0Y2h1bmtwdHIgRiA9IFQtPmZkO1wNCisgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgVCkgJiYgb2tfYWRkcmVzcyhNLCBGKSkpIHtcDQorICAgICAgICAgIFQtPmZkID0gRi0+YmsgPSBYO1wNCisgICAgICAgICAgWC0+ZmQgPSBGO1wNCisgICAgICAgICAgWC0+YmsgPSBUO1wNCisgICAgICAgICAgWC0+cGFyZW50ID0gMDtcDQorICAgICAgICAgIGJyZWFrO1wNCisgICAgICAgIH1cDQorICAgICAgICBlbHNlIHtcDQorICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wNCisgICAgICAgICAgYnJlYWs7XA0KKyAgICAgICAgfVwNCisgICAgICB9XA0KKyAgICB9XA0KKyAgfVwNCit9DQorDQorLyoNCisgIFVubGluayBzdGVwczoNCisNCisgIDEuIElmIHggaXMgYSBjaGFpbmVkIG5vZGUsIHVubGluayBpdCBmcm9tIGl0cyBzYW1lLXNpemVkIGZkL2JrIGxpbmtzDQorICAgICBhbmQgY2hvb3NlIGl0cyBiayBub2RlIGFzIGl0cyByZXBsYWNlbWVudC4NCisgIDIuIElmIHggd2FzIHRoZSBsYXN0IG5vZGUgb2YgaXRzIHNpemUsIGJ1dCBub3QgYSBsZWFmIG5vZGUsIGl0IG11c3QNCisgICAgIGJlIHJlcGxhY2VkIHdpdGggYSBsZWFmIG5vZGUgKG5vdCBtZXJlbHkgb25lIHdpdGggYW4gb3BlbiBsZWZ0IG9yDQorICAgICByaWdodCksIHRvIG1ha2Ugc3VyZSB0aGF0IGxlZnRzIGFuZCByaWdodHMgb2YgZGVzY2VuZGVudHMNCisgICAgIGNvcnJlc3BvbmQgcHJvcGVybHkgdG8gYml0IG1hc2tzLiAgV2UgdXNlIHRoZSByaWdodG1vc3QgZGVzY2VuZGVudA0KKyAgICAgb2YgeC4gIFdlIGNvdWxkIHVzZSBhbnkgb3RoZXIgbGVhZiwgYnV0IHRoaXMgaXMgZWFzeSB0byBsb2NhdGUgYW5kDQorICAgICB0ZW5kcyB0byBjb3VudGVyYWN0IHJlbW92YWwgb2YgbGVmdG1vc3RzIGVsc2V3aGVyZSwgYW5kIHNvIGtlZXBzDQorICAgICBwYXRocyBzaG9ydGVyIHRoYW4gbWluaW1hbGx5IGd1YXJhbnRlZWQuICBUaGlzIGRvZXNuJ3QgbG9vcCBtdWNoDQorICAgICBiZWNhdXNlIG9uIGF2ZXJhZ2UgYSBub2RlIGluIGEgdHJlZSBpcyBuZWFyIHRoZSBib3R0b20uDQorICAzLiBJZiB4IGlzIHRoZSBiYXNlIG9mIGEgY2hhaW4gKGkuZS4sIGhhcyBwYXJlbnQgbGlua3MpIHJlbGluaw0KKyAgICAgeCdzIHBhcmVudCBhbmQgY2hpbGRyZW4gdG8geCdzIHJlcGxhY2VtZW50IChvciBudWxsIGlmIG5vbmUpLg0KKyovDQorDQorI2RlZmluZSB1bmxpbmtfbGFyZ2VfY2h1bmsoTSwgWCkge1wNCisgIHRjaHVua3B0ciBYUCA9IFgtPnBhcmVudDtcDQorICB0Y2h1bmtwdHIgUjtcDQorICBpZiAoWC0+YmsgIT0gWCkge1wNCisgICAgdGNodW5rcHRyIEYgPSBYLT5mZDtcDQorICAgIFIgPSBYLT5iaztcDQorICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgRikgJiYgRi0+YmsgPT0gWCAmJiBSLT5mZCA9PSBYKSkge1wNCisgICAgICBGLT5iayA9IFI7XA0KKyAgICAgIFItPmZkID0gRjtcDQorICAgIH1cDQorICAgIGVsc2Uge1wNCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcDQorICAgIH1cDQorICB9XA0KKyAgZWxzZSB7XA0KKyAgICB0Y2h1bmtwdHIqIFJQO1wNCisgICAgaWYgKCgoUiA9ICooUlAgPSAmKFgtPmNoaWxkWzFdKSkpICE9IDApIHx8XA0KKyAgICAgICAgKChSID0gKihSUCA9ICYoWC0+Y2hpbGRbMF0pKSkgIT0gMCkpIHtcDQorICAgICAgdGNodW5rcHRyKiBDUDtcDQorICAgICAgd2hpbGUgKCgqKENQID0gJihSLT5jaGlsZFsxXSkpICE9IDApIHx8XA0KKyAgICAgICAgICAgICAoKihDUCA9ICYoUi0+Y2hpbGRbMF0pKSAhPSAwKSkge1wNCisgICAgICAgIFIgPSAqKFJQID0gQ1ApO1wNCisgICAgICB9XA0KKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgUlApKSlcDQorICAgICAgICAqUlAgPSAwO1wNCisgICAgICBlbHNlIHtcDQorICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcDQorICAgICAgfVwNCisgICAgfVwNCisgIH1cDQorICBpZiAoWFAgIT0gMCkge1wNCisgICAgdGJpbnB0ciogSCA9IHRyZWViaW5fYXQoTSwgWC0+aW5kZXgpO1wNCisgICAgaWYgKFggPT0gKkgpIHtcDQorICAgICAgaWYgKCgqSCA9IFIpID09IDApIFwNCisgICAgICAgIGNsZWFyX3RyZWVtYXAoTSwgWC0+aW5kZXgpO1wNCisgICAgfVwNCisgICAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFhQKSkpIHtcDQorICAgICAgaWYgKFhQLT5jaGlsZFswXSA9PSBYKSBcDQorICAgICAgICBYUC0+Y2hpbGRbMF0gPSBSO1wNCisgICAgICBlbHNlIFwNCisgICAgICAgIFhQLT5jaGlsZFsxXSA9IFI7XA0KKyAgICB9XA0KKyAgICBlbHNlXA0KKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wNCisgICAgaWYgKFIgIT0gMCkge1wNCisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFIpKSkge1wNCisgICAgICAgIHRjaHVua3B0ciBDMCwgQzE7XA0KKyAgICAgICAgUi0+cGFyZW50ID0gWFA7XA0KKyAgICAgICAgaWYgKChDMCA9IFgtPmNoaWxkWzBdKSAhPSAwKSB7XA0KKyAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMwKSkpIHtcDQorICAgICAgICAgICAgUi0+Y2hpbGRbMF0gPSBDMDtcDQorICAgICAgICAgICAgQzAtPnBhcmVudCA9IFI7XA0KKyAgICAgICAgICB9XA0KKyAgICAgICAgICBlbHNlXA0KKyAgICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wNCisgICAgICAgIH1cDQorICAgICAgICBpZiAoKEMxID0gWC0+Y2hpbGRbMV0pICE9IDApIHtcDQorICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzEpKSkge1wNCisgICAgICAgICAgICBSLT5jaGlsZFsxXSA9IEMxO1wNCisgICAgICAgICAgICBDMS0+cGFyZW50ID0gUjtcDQorICAgICAgICAgIH1cDQorICAgICAgICAgIGVsc2VcDQorICAgICAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XA0KKyAgICAgICAgfVwNCisgICAgICB9XA0KKyAgICAgIGVsc2VcDQorICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcDQorICAgIH1cDQorICB9XA0KK30NCisNCisvKiBSZWxheXMgdG8gbGFyZ2UgdnMgc21hbGwgYmluIG9wZXJhdGlvbnMgKi8NCisNCisjZGVmaW5lIGluc2VydF9jaHVuayhNLCBQLCBTKVwNCisgIGlmIChpc19zbWFsbChTKSkgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpXA0KKyAgZWxzZSB7IHRjaHVua3B0ciBUUCA9ICh0Y2h1bmtwdHIpKFApOyBpbnNlcnRfbGFyZ2VfY2h1bmsoTSwgVFAsIFMpOyB9DQorDQorI2RlZmluZSB1bmxpbmtfY2h1bmsoTSwgUCwgUylcDQorICBpZiAoaXNfc21hbGwoUykpIHVubGlua19zbWFsbF9jaHVuayhNLCBQLCBTKVwNCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgdW5saW5rX2xhcmdlX2NodW5rKE0sIFRQKTsgfQ0KKw0KKw0KKy8qIFJlbGF5cyB0byBpbnRlcm5hbCBjYWxscyB0byBtYWxsb2MvZnJlZSBmcm9tIHJlYWxsb2MsIG1lbWFsaWduIGV0YyAqLw0KKw0KKyNpZiBPTkxZX01TUEFDRVMNCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBtc3BhY2VfbWFsbG9jKG0sIGIpDQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSkgbXNwYWNlX2ZyZWUobSxtZW0pOw0KKyNlbHNlIC8qIE9OTFlfTVNQQUNFUyAqLw0KKyNpZiBNU1BBQ0VTDQorI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYilcDQorICAoKG0gPT0gZ20pPyBkbG1hbGxvYyhiKSA6IG1zcGFjZV9tYWxsb2MobSwgYikpDQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSlcDQorICAgaWYgKG0gPT0gZ20pIGRsZnJlZShtZW0pOyBlbHNlIG1zcGFjZV9mcmVlKG0sbWVtKTsNCisjZWxzZSAvKiBNU1BBQ0VTICovDQorI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYikgZGxtYWxsb2MoYikNCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBkbGZyZWUobWVtKQ0KKyNlbmRpZiAvKiBNU1BBQ0VTICovDQorI2VuZGlmIC8qIE9OTFlfTVNQQUNFUyAqLw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEaXJlY3QtbW1hcHBpbmcgY2h1bmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoNCisgIERpcmVjdGx5IG1tYXBwZWQgY2h1bmtzIGFyZSBzZXQgdXAgd2l0aCBhbiBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mDQorICB0aGUgbW1hcHBlZCByZWdpb24gc3RvcmVkIGluIHRoZSBwcmV2X2Zvb3QgZmllbGQgb2YgdGhlIGNodW5rLiBUaGlzDQorICBhbGxvd3MgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50IHRvIE1VTk1BUCB3aGVuIGZyZWVkLA0KKyAgYW5kIGFsc28gYWxsb3dzIGFkanVzdG1lbnQgb2YgdGhlIHJldHVybmVkIGNodW5rIHRvIG1lZXQgYWxpZ25tZW50DQorICByZXF1aXJlbWVudHMgKGVzcGVjaWFsbHkgaW4gbWVtYWxpZ24pLg0KKyovDQorDQorLyogTWFsbG9jIHVzaW5nIG1tYXAgKi8NCitzdGF0aWMgdm9pZCAqbW1hcF9hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKQ0KK3sNCisgICAgc2l6ZV90IG1tc2l6ZSA9IG1tYXBfYWxpZ24obmIgKyBTSVhfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7DQorDQorICAgIGlmIChtLT5mb290cHJpbnRfbGltaXQgIT0gMCkNCisgICAgew0KKyAgICAgICAgc2l6ZV90IGZwID0gbS0+Zm9vdHByaW50ICsgbW1zaXplOw0KKw0KKyAgICAgICAgaWYgKGZwIDw9IG0tPmZvb3RwcmludCB8fCBmcCA+IG0tPmZvb3RwcmludF9saW1pdCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAobW1zaXplID4gbmIpICAgICAgIC8qIENoZWNrIGZvciB3cmFwIGFyb3VuZCAwICovDQorICAgIHsNCisgICAgICAgIGNoYXIgKm1tID0gKGNoYXIgKikoQ0FMTF9ESVJFQ1RfTU1BUChtbXNpemUpKTsNCisNCisgICAgICAgIGlmIChtbSAhPSBDTUZBSUwpDQorICAgICAgICB7DQorICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0obW0pKTsNCisgICAgICAgICAgICBzaXplX3QgcHNpemUgPSBtbXNpemUgLSBvZmZzZXQgLSBNTUFQX0ZPT1RfUEFEOw0KKyAgICAgICAgICAgIG1jaHVua3B0ciBwID0gKG1jaHVua3B0cikobW0gKyBvZmZzZXQpOw0KKyAgICAgICAgICAgIHAtPnByZXZfZm9vdCA9IG9mZnNldDsNCisgICAgICAgICAgICBwLT5oZWFkID0gcHNpemU7DQorICAgICAgICAgICAgbWFya19pbnVzZV9mb290KG0sIHAsIHBzaXplKTsNCisgICAgICAgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSktPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsNCisgICAgICAgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSArIFNJWkVfVF9TSVpFKS0+aGVhZCA9IDA7DQorDQorICAgICAgICAgICAgaWYgKG0tPmxlYXN0X2FkZHIgPT0gMCB8fCBtbSA8IG0tPmxlYXN0X2FkZHIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtLT5sZWFzdF9hZGRyID0gbW07DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmICgobS0+Zm9vdHByaW50ICs9IG1tc2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgYXNzZXJ0KGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSk7DQorICAgICAgICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsNCisgICAgICAgICAgICByZXR1cm4gY2h1bmsybWVtKHApOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiBSZWFsbG9jIHVzaW5nIG1tYXAgKi8NCitzdGF0aWMgbWNodW5rcHRyIG1tYXBfcmVzaXplKG1zdGF0ZSBtLCBtY2h1bmtwdHIgb2xkcCwgc2l6ZV90IG5iLCBpbnQgZmxhZ3MpDQorew0KKyAgICBzaXplX3Qgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsNCisgICAgKHZvaWQpZmxhZ3M7IC8qIHBsYWNhdGUgcGVvcGxlIGNvbXBpbGluZyAtV3VudXNlZCAqLw0KKw0KKyAgICBpZiAoaXNfc21hbGwobmIpKSAvKiBDYW4ndCBzaHJpbmsgbW1hcCByZWdpb25zIGJlbG93IHNtYWxsIHNpemUgKi8NCisgICAgew0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgLyogS2VlcCBvbGQgY2h1bmsgaWYgYmlnIGVub3VnaCBidXQgbm90IHRvbyBiaWcgKi8NCisgICAgaWYgKG9sZHNpemUgPj0gbmIgKyBTSVpFX1RfU0laRSAmJg0KKyAgICAgICAgKG9sZHNpemUgLSBuYikgPD0gKG1wYXJhbXMuZ3JhbnVsYXJpdHkgPDwgMSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBvbGRwOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IG9sZHAtPnByZXZfZm9vdDsNCisgICAgICAgIHNpemVfdCBvbGRtbXNpemUgPSBvbGRzaXplICsgb2Zmc2V0ICsgTU1BUF9GT09UX1BBRDsNCisgICAgICAgIHNpemVfdCBuZXdtbXNpemUgPSBtbWFwX2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOw0KKyAgICAgICAgY2hhciAqY3AgPSAoY2hhciAqKUNBTExfTVJFTUFQKChjaGFyICopb2xkcCAtIG9mZnNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRtbXNpemUsIG5ld21tc2l6ZSwgZmxhZ3MpOw0KKw0KKyAgICAgICAgaWYgKGNwICE9IENNRkFJTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtY2h1bmtwdHIgbmV3cCA9IChtY2h1bmtwdHIpKGNwICsgb2Zmc2V0KTsNCisgICAgICAgICAgICBzaXplX3QgcHNpemUgPSBuZXdtbXNpemUgLSBvZmZzZXQgLSBNTUFQX0ZPT1RfUEFEOw0KKyAgICAgICAgICAgIG5ld3AtPmhlYWQgPSBwc2l6ZTsNCisgICAgICAgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgbmV3cCwgcHNpemUpOw0KKyAgICAgICAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOw0KKyAgICAgICAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplICsgU0laRV9UX1NJWkUpLT5oZWFkID0gMDsNCisNCisgICAgICAgICAgICBpZiAoY3AgPCBtLT5sZWFzdF9hZGRyKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbS0+bGVhc3RfYWRkciA9IGNwOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBuZXdtbXNpemUgLSBvbGRtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGNoZWNrX21tYXBwZWRfY2h1bmsobSwgbmV3cCk7DQorICAgICAgICAgICAgcmV0dXJuIG5ld3A7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1zcGFjZSBtYW5hZ2VtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyogSW5pdGlhbGl6ZSB0b3AgY2h1bmsgYW5kIGl0cyBzaXplICovDQorc3RhdGljIHZvaWQgaW5pdF90b3AobXN0YXRlIG0sIG1jaHVua3B0ciBwLCBzaXplX3QgcHNpemUpDQorew0KKyAgICAvKiBFbnN1cmUgYWxpZ25tZW50ICovDQorICAgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKHApKTsNCisgICAgcCA9IChtY2h1bmtwdHIpKChjaGFyICopcCArIG9mZnNldCk7DQorICAgIHBzaXplIC09IG9mZnNldDsNCisNCisgICAgbS0+dG9wID0gcDsNCisgICAgbS0+dG9wc2l6ZSA9IHBzaXplOw0KKyAgICBwLT5oZWFkID0gcHNpemUgfCBQSU5VU0VfQklUOw0KKyAgICAvKiBzZXQgc2l6ZSBvZiBmYWtlIHRyYWlsaW5nIGNodW5rIGhvbGRpbmcgb3ZlcmhlYWQgc3BhY2Ugb25seSBvbmNlICovDQorICAgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IFRPUF9GT09UX1NJWkU7DQorICAgIG0tPnRyaW1fY2hlY2sgPSBtcGFyYW1zLnRyaW1fdGhyZXNob2xkOyAvKiByZXNldCBvbiBlYWNoIHVwZGF0ZSAqLw0KK30NCisNCisvKiBJbml0aWFsaXplIGJpbnMgZm9yIGEgbmV3IG1zdGF0ZSB0aGF0IGlzIG90aGVyd2lzZSB6ZXJvZWQgb3V0ICovDQorc3RhdGljIHZvaWQgaW5pdF9iaW5zKG1zdGF0ZSBtKQ0KK3sNCisgICAgLyogRXN0YWJsaXNoIGNpcmN1bGFyIGxpbmtzIGZvciBzbWFsbGJpbnMgKi8NCisgICAgYmluZGV4X3QgaTsNCisNCisgICAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkNCisgICAgew0KKyAgICAgICAgc2JpbnB0ciBiaW4gPSBzbWFsbGJpbl9hdChtLCBpKTsNCisgICAgICAgIGJpbi0+ZmQgPSBiaW4tPmJrID0gYmluOw0KKyAgICB9DQorfQ0KKw0KKyNpZiBQUk9DRUVEX09OX0VSUk9SDQorDQorLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLw0KK3N0YXRpYyB2b2lkIHJlc2V0X29uX2Vycm9yKG1zdGF0ZSBtKQ0KK3sNCisgICAgaW50IGk7DQorICAgICsrbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQ7DQorICAgIC8qIFJlaW5pdGlhbGl6ZSBmaWVsZHMgdG8gZm9yZ2V0IGFib3V0IGFsbCBtZW1vcnkgKi8NCisgICAgbS0+c21hbGxtYXAgPSBtLT50cmVlbWFwID0gMDsNCisgICAgbS0+ZHZzaXplID0gbS0+dG9wc2l6ZSA9IDA7DQorICAgIG0tPnNlZy5iYXNlID0gMDsNCisgICAgbS0+c2VnLnNpemUgPSAwOw0KKyAgICBtLT5zZWcubmV4dCA9IDA7DQorICAgIG0tPnRvcCA9IG0tPmR2ID0gMDsNCisNCisgICAgZm9yIChpID0gMDsgaSA8IE5UUkVFQklOUzsgKytpKQ0KKyAgICB7DQorICAgICAgICAqdHJlZWJpbl9hdChtLCBpKSA9IDA7DQorICAgIH0NCisNCisgICAgaW5pdF9iaW5zKG0pOw0KK30NCisjZW5kaWYgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLw0KKw0KKy8qIEFsbG9jYXRlIGNodW5rIGFuZCBwcmVwZW5kIHJlbWFpbmRlciB3aXRoIGNodW5rIGluIHN1Y2Nlc3NvciBiYXNlLiAqLw0KK3N0YXRpYyB2b2lkICpwcmVwZW5kX2FsbG9jKG1zdGF0ZSBtLCBjaGFyICpuZXdiYXNlLCBjaGFyICpvbGRiYXNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYikNCit7DQorICAgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsobmV3YmFzZSk7DQorICAgIG1jaHVua3B0ciBvbGRmaXJzdCA9IGFsaWduX2FzX2NodW5rKG9sZGJhc2UpOw0KKyAgICBzaXplX3QgcHNpemUgPSAoY2hhciAqKW9sZGZpcnN0IC0gKGNoYXIgKilwOw0KKyAgICBtY2h1bmtwdHIgcSA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsNCisgICAgc2l6ZV90IHFzaXplID0gcHNpemUgLSBuYjsNCisgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBuYik7DQorDQorICAgIGFzc2VydCgoY2hhciAqKW9sZGZpcnN0ID4gKGNoYXIgKilxKTsNCisgICAgYXNzZXJ0KHBpbnVzZShvbGRmaXJzdCkpOw0KKyAgICBhc3NlcnQocXNpemUgPj0gTUlOX0NIVU5LX1NJWkUpOw0KKw0KKyAgICAvKiBjb25zb2xpZGF0ZSByZW1haW5kZXIgd2l0aCBmaXJzdCBjaHVuayBvZiBvbGQgYmFzZSAqLw0KKyAgICBpZiAob2xkZmlyc3QgPT0gbS0+dG9wKQ0KKyAgICB7DQorICAgICAgICBzaXplX3QgdHNpemUgPSBtLT50b3BzaXplICs9IHFzaXplOw0KKyAgICAgICAgbS0+dG9wID0gcTsNCisgICAgICAgIHEtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7DQorICAgICAgICBjaGVja190b3BfY2h1bmsobSwgcSk7DQorICAgIH0NCisgICAgZWxzZSBpZiAob2xkZmlyc3QgPT0gbS0+ZHYpDQorICAgIHsNCisgICAgICAgIHNpemVfdCBkc2l6ZSA9IG0tPmR2c2l6ZSArPSBxc2l6ZTsNCisgICAgICAgIG0tPmR2ID0gcTsNCisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhxLCBkc2l6ZSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBpZiAoIWlzX2ludXNlKG9sZGZpcnN0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUob2xkZmlyc3QpOw0KKyAgICAgICAgICAgIHVubGlua19jaHVuayhtLCBvbGRmaXJzdCwgbnNpemUpOw0KKyAgICAgICAgICAgIG9sZGZpcnN0ID0gY2h1bmtfcGx1c19vZmZzZXQob2xkZmlyc3QsIG5zaXplKTsNCisgICAgICAgICAgICBxc2l6ZSArPSBuc2l6ZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHEsIHFzaXplLCBvbGRmaXJzdCk7DQorICAgICAgICBpbnNlcnRfY2h1bmsobSwgcSwgcXNpemUpOw0KKyAgICAgICAgY2hlY2tfZnJlZV9jaHVuayhtLCBxKTsNCisgICAgfQ0KKw0KKyAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsNCisgICAgcmV0dXJuIGNodW5rMm1lbShwKTsNCit9DQorDQorLyogQWRkIGEgc2VnbWVudCB0byBob2xkIGEgbmV3IG5vbmNvbnRpZ3VvdXMgcmVnaW9uICovDQorc3RhdGljIHZvaWQgYWRkX3NlZ21lbnQobXN0YXRlIG0sIGNoYXIgKnRiYXNlLCBzaXplX3QgdHNpemUsIGZsYWdfdCBtbWFwcGVkKQ0KK3sNCisgICAgLyogRGV0ZXJtaW5lIGxvY2F0aW9ucyBhbmQgc2l6ZXMgb2Ygc2VnbWVudCwgZmVuY2Vwb3N0cywgb2xkIHRvcCAqLw0KKyAgICBjaGFyICpvbGRfdG9wID0gKGNoYXIgKiltLT50b3A7DQorICAgIG1zZWdtZW50cHRyIG9sZHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIG9sZF90b3ApOw0KKyAgICBjaGFyICpvbGRfZW5kID0gb2xkc3AtPmJhc2UgKyBvbGRzcC0+c2l6ZTsNCisgICAgc2l6ZV90IHNzaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpOw0KKyAgICBjaGFyICpyYXdzcCA9IG9sZF9lbmQgLSAoc3NpemUgKyBGT1VSX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOw0KKyAgICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShyYXdzcCkpOw0KKyAgICBjaGFyICphc3AgPSByYXdzcCArIG9mZnNldDsNCisgICAgY2hhciAqY3NwID0gKGFzcCA8IChvbGRfdG9wICsgTUlOX0NIVU5LX1NJWkUpKSA/IG9sZF90b3AgOiBhc3A7DQorICAgIG1jaHVua3B0ciBzcCA9IChtY2h1bmtwdHIpY3NwOw0KKyAgICBtc2VnbWVudHB0ciBzcyA9IChtc2VnbWVudHB0cikoY2h1bmsybWVtKHNwKSk7DQorICAgIG1jaHVua3B0ciB0bmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHNwLCBzc2l6ZSk7DQorICAgIG1jaHVua3B0ciBwID0gdG5leHQ7DQorICAgIGludCBuZmVuY2VzID0gMDsNCisNCisgICAgLyogcmVzZXQgdG9wIHRvIG5ldyBzcGFjZSAqLw0KKyAgICBpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRPUF9GT09UX1NJWkUpOw0KKw0KKyAgICAvKiBTZXQgdXAgc2VnbWVudCByZWNvcmQgKi8NCisgICAgYXNzZXJ0KGlzX2FsaWduZWQoc3MpKTsNCisgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBzcCwgc3NpemUpOw0KKyAgICAqc3MgPSBtLT5zZWc7IC8qIFB1c2ggY3VycmVudCByZWNvcmQgKi8NCisgICAgbS0+c2VnLmJhc2UgPSB0YmFzZTsNCisgICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsNCisgICAgbS0+c2VnLnNmbGFncyA9IG1tYXBwZWQ7DQorICAgIG0tPnNlZy5uZXh0ID0gc3M7DQorDQorICAgIC8qIEluc2VydCB0cmFpbGluZyBmZW5jZXBvc3RzICovDQorICAgIGZvciAoOzspDQorICAgIHsNCisgICAgICAgIG1jaHVua3B0ciBuZXh0cCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIFNJWkVfVF9TSVpFKTsNCisgICAgICAgIHAtPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsNCisgICAgICAgICsrbmZlbmNlczsNCisNCisgICAgICAgIGlmICgoY2hhciAqKSgmKG5leHRwLT5oZWFkKSkgPCBvbGRfZW5kKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHAgPSBuZXh0cDsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBhc3NlcnQobmZlbmNlcyA+PSAyKTsNCisNCisgICAgLyogSW5zZXJ0IHRoZSByZXN0IG9mIG9sZCB0b3AgaW50byBhIGJpbiBhcyBhbiBvcmRpbmFyeSBmcmVlIGNodW5rICovDQorICAgIGlmIChjc3AgIT0gb2xkX3RvcCkNCisgICAgew0KKyAgICAgICAgbWNodW5rcHRyIHEgPSAobWNodW5rcHRyKW9sZF90b3A7DQorICAgICAgICBzaXplX3QgcHNpemUgPSBjc3AgLSBvbGRfdG9wOw0KKyAgICAgICAgbWNodW5rcHRyIHRuID0gY2h1bmtfcGx1c19vZmZzZXQocSwgcHNpemUpOw0KKyAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcHNpemUsIHRuKTsNCisgICAgICAgIGluc2VydF9jaHVuayhtLCBxLCBwc2l6ZSk7DQorICAgIH0NCisNCisgICAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7DQorfQ0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN5c3RlbSBhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyogR2V0IG1lbW9yeSBmcm9tIHN5c3RlbSB1c2luZyBNT1JFQ09SRSBvciBNTUFQICovDQorc3RhdGljIHZvaWQgKnN5c19hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKQ0KK3sNCisgICAgY2hhciAqdGJhc2UgPSBDTUZBSUw7DQorICAgIHNpemVfdCB0c2l6ZSA9IDA7DQorICAgIGZsYWdfdCBtbWFwX2ZsYWcgPSAwOw0KKyAgICBzaXplX3QgYXNpemU7IC8qIGFsbG9jYXRpb24gc2l6ZSAqLw0KKw0KKyAgICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsNCisNCisgICAgLyogRGlyZWN0bHkgbWFwIGxhcmdlIGNodW5rcywgYnV0IG9ubHkgaWYgYWxyZWFkeSBpbml0aWFsaXplZCAqLw0KKyAgICBpZiAodXNlX21tYXAobSkgJiYgbmIgPj0gbXBhcmFtcy5tbWFwX3RocmVzaG9sZCAmJiBtLT50b3BzaXplICE9IDApDQorICAgIHsNCisgICAgICAgIHZvaWQgKm1lbSA9IG1tYXBfYWxsb2MobSwgbmIpOw0KKw0KKyAgICAgICAgaWYgKG1lbSAhPSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBtZW07DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HKTsNCisNCisgICAgaWYgKGFzaXplIDw9IG5iKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsgICAgLyogd3JhcGFyb3VuZCAqLw0KKyAgICB9DQorDQorICAgIGlmIChtLT5mb290cHJpbnRfbGltaXQgIT0gMCkNCisgICAgew0KKyAgICAgICAgc2l6ZV90IGZwID0gbS0+Zm9vdHByaW50ICsgYXNpemU7DQorDQorICAgICAgICBpZiAoZnAgPD0gbS0+Zm9vdHByaW50IHx8IGZwID4gbS0+Zm9vdHByaW50X2xpbWl0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8qDQorICAgICAgVHJ5IGdldHRpbmcgbWVtb3J5IGluIGFueSBvZiB0aHJlZSB3YXlzIChpbiBtb3N0LXByZWZlcnJlZCB0bw0KKyAgICAgIGxlYXN0LXByZWZlcnJlZCBvcmRlcik6DQorICAgICAgMS4gQSBjYWxsIHRvIE1PUkVDT1JFIHRoYXQgY2FuIG5vcm1hbGx5IGNvbnRpZ3VvdXNseSBleHRlbmQgbWVtb3J5Lg0KKyAgICAgICAgIChkaXNhYmxlZCBpZiBub3QgTU9SRUNPUkVfQ09OVElHVU9VUyBvciBub3QgSEFWRV9NT1JFQ09SRSBvcg0KKyAgICAgICAgIG9yIG1haW4gc3BhY2UgaXMgbW1hcHBlZCBvciBhIHByZXZpb3VzIGNvbnRpZ3VvdXMgY2FsbCBmYWlsZWQpDQorICAgICAgMi4gQSBjYWxsIHRvIE1NQVAgbmV3IHNwYWNlIChkaXNhYmxlZCBpZiBub3QgSEFWRV9NTUFQKS4NCisgICAgICAgICBOb3RlIHRoYXQgdW5kZXIgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGlmIE1PUkVDT1JFIGlzIHVuYWJsZSB0bw0KKyAgICAgICAgIGZ1bGZpbGwgYSByZXF1ZXN0LCBhbmQgSEFWRV9NTUFQIGlzIHRydWUsIHRoZW4gbW1hcCBpcw0KKyAgICAgICAgIHVzZWQgYXMgYSBub25jb250aWd1b3VzIHN5c3RlbSBhbGxvY2F0b3IuIFRoaXMgaXMgYSB1c2VmdWwgYmFja3VwDQorICAgICAgICAgc3RyYXRlZ3kgZm9yIHN5c3RlbXMgd2l0aCBob2xlcyBpbiBhZGRyZXNzIHNwYWNlcyAtLSBpbiB0aGlzIGNhc2UNCisgICAgICAgICBzYnJrIGNhbm5vdCBjb250aWd1b3VzbHkgZXhwYW5kIHRoZSBoZWFwLCBidXQgbW1hcCBtYXkgYmUgYWJsZSB0bw0KKyAgICAgICAgIGZpbmQgc3BhY2UuDQorICAgICAgMy4gQSBjYWxsIHRvIE1PUkVDT1JFIHRoYXQgY2Fubm90IHVzdWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnkuDQorICAgICAgICAgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01PUkVDT1JFKQ0KKw0KKyAgICAgSW4gYWxsIGNhc2VzLCB3ZSBuZWVkIHRvIHJlcXVlc3QgZW5vdWdoIGJ5dGVzIGZyb20gc3lzdGVtIHRvIGVuc3VyZQ0KKyAgICAgd2UgY2FuIG1hbGxvYyBuYiBieXRlcyB1cG9uIHN1Y2Nlc3MsIHNvIHBhZCB3aXRoIGVub3VnaCBzcGFjZSBmb3INCisgICAgIHRvcF9mb290LCBwbHVzIGFsaWdubWVudC1wYWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGxvc2UgYnl0ZXMgaWYNCisgICAgIG5vdCBvbiBib3VuZGFyeSwgYW5kIHJvdW5kIHRoaXMgdXAgdG8gYSBncmFudWxhcml0eSB1bml0Lg0KKyAgICAqLw0KKw0KKyAgICBpZiAoTU9SRUNPUkVfQ09OVElHVU9VUyAmJiAhdXNlX25vbmNvbnRpZ3VvdXMobSkpDQorICAgIHsNCisgICAgICAgIGNoYXIgKmJyID0gQ01GQUlMOw0KKyAgICAgICAgc2l6ZV90IHNzaXplID0gYXNpemU7IC8qIHNicmsgY2FsbCBzaXplICovDQorICAgICAgICBtc2VnbWVudHB0ciBzcyA9IChtLT50b3AgPT0gMCkgPyAwIDogc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyICopbS0+dG9wKTsNCisgICAgICAgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7DQorDQorICAgICAgICBpZiAoc3MgPT0gMCkgICAgLyogRmlyc3QgdGltZSB0aHJvdWdoIG9yIHJlY292ZXJ5ICovDQorICAgICAgICB7DQorICAgICAgICAgICAgY2hhciAqYmFzZSA9IChjaGFyICopQ0FMTF9NT1JFQ09SRSgwKTsNCisNCisgICAgICAgICAgICBpZiAoYmFzZSAhPSBDTUZBSUwpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzaXplX3QgZnA7DQorDQorICAgICAgICAgICAgICAgIC8qIEFkanVzdCB0byBlbmQgb24gYSBwYWdlIGJvdW5kYXJ5ICovDQorICAgICAgICAgICAgICAgIGlmICghaXNfcGFnZV9hbGlnbmVkKGJhc2UpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBzc2l6ZSArPSAocGFnZV9hbGlnbigoc2l6ZV90KWJhc2UpIC0gKHNpemVfdCliYXNlKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBmcCA9IG0tPmZvb3RwcmludCArIHNzaXplOyAvKiByZWNoZWNrIGxpbWl0cyAqLw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoc3NpemUgPiBuYiAmJiBzc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJg0KKyAgICAgICAgICAgICAgICAgICAgKG0tPmZvb3RwcmludF9saW1pdCA9PSAwIHx8DQorICAgICAgICAgICAgICAgICAgICAgKGZwID4gbS0+Zm9vdHByaW50ICYmIGZwIDw9IG0tPmZvb3RwcmludF9saW1pdCkpICYmDQorICAgICAgICAgICAgICAgICAgICAoYnIgPSAoY2hhciAqKShDQUxMX01PUkVDT1JFKHNzaXplKSkpID09IGJhc2UpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHRiYXNlID0gYmFzZTsNCisgICAgICAgICAgICAgICAgICAgIHRzaXplID0gc3NpemU7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgLyogU3VidHJhY3Qgb3V0IGV4aXN0aW5nIGF2YWlsYWJsZSB0b3Agc3BhY2UgZnJvbSBNT1JFQ09SRSByZXF1ZXN0LiAqLw0KKyAgICAgICAgICAgIHNzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgLSBtLT50b3BzaXplICsgU1lTX0FMTE9DX1BBRERJTkcpOw0KKw0KKyAgICAgICAgICAgIC8qIFVzZSBtZW0gaGVyZSBvbmx5IGlmIGl0IGRpZCBjb250aW51b3VzbHkgZXh0ZW5kIG9sZCBzcGFjZSAqLw0KKyAgICAgICAgICAgIGlmIChzc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJg0KKyAgICAgICAgICAgICAgICAoYnIgPSAoY2hhciAqKShDQUxMX01PUkVDT1JFKHNzaXplKSkpID09IHNzLT5iYXNlICsgc3MtPnNpemUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB0YmFzZSA9IGJyOw0KKyAgICAgICAgICAgICAgICB0c2l6ZSA9IHNzaXplOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmICh0YmFzZSA9PSBDTUZBSUwpICAgICAgLyogQ29wZSB3aXRoIHBhcnRpYWwgZmFpbHVyZSAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChiciAhPSBDTUZBSUwpICAgICAgLyogVHJ5IHRvIHVzZS9leHRlbmQgdGhlIHNwYWNlIHdlIGRpZCBnZXQgKi8NCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGlmIChzc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJg0KKyAgICAgICAgICAgICAgICAgICAgc3NpemUgPCBuYiArIFNZU19BTExPQ19QQURESU5HKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBzaXplX3QgZXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HIC0gc3NpemUpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGVzaXplIDwgSEFMRl9NQVhfU0laRV9UKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmVuZCA9IChjaGFyICopQ0FMTF9NT1JFQ09SRShlc2l6ZSk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZCAhPSBDTUZBSUwpDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZSArPSBlc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgLyogQ2FuJ3QgdXNlOyB0cnkgdG8gcmVsZWFzZSAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIENBTExfTU9SRUNPUkUoLXNzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnIgPSBDTUZBSUw7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmIChiciAhPSBDTUZBSUwpICAgICAgLyogVXNlIHRoZSBzcGFjZSB3ZSBkaWQgZ2V0ICovDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB0YmFzZSA9IGJyOw0KKyAgICAgICAgICAgICAgICB0c2l6ZSA9IHNzaXplOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBkaXNhYmxlX2NvbnRpZ3VvdXMobSk7ICAgIC8qIERvbid0IHRyeSBjb250aWd1b3VzIHBhdGggaW4gdGhlIGZ1dHVyZSAqLw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7DQorICAgIH0NCisNCisgICAgaWYgKEhBVkVfTU1BUCAmJiB0YmFzZSA9PSBDTUZBSUwpICAgIC8qIFRyeSBNTUFQICovDQorICAgIHsNCisgICAgICAgIGNoYXIgKm1wID0gKGNoYXIgKikoQ0FMTF9NTUFQKGFzaXplKSk7DQorDQorICAgICAgICBpZiAobXAgIT0gQ01GQUlMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHRiYXNlID0gbXA7DQorICAgICAgICAgICAgdHNpemUgPSBhc2l6ZTsNCisgICAgICAgICAgICBtbWFwX2ZsYWcgPSBVU0VfTU1BUF9CSVQ7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKEhBVkVfTU9SRUNPUkUgJiYgdGJhc2UgPT0gQ01GQUlMKSAgIC8qIFRyeSBub25jb250aWd1b3VzIE1PUkVDT1JFICovDQorICAgIHsNCisgICAgICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjaGFyICpiciA9IENNRkFJTDsNCisgICAgICAgICAgICBjaGFyICplbmQgPSBDTUZBSUw7DQorICAgICAgICAgICAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsNCisgICAgICAgICAgICBiciA9IChjaGFyICopKENBTExfTU9SRUNPUkUoYXNpemUpKTsNCisgICAgICAgICAgICBlbmQgPSAoY2hhciAqKShDQUxMX01PUkVDT1JFKDApKTsNCisgICAgICAgICAgICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOw0KKw0KKyAgICAgICAgICAgIGlmIChiciAhPSBDTUZBSUwgJiYgZW5kICE9IENNRkFJTCAmJiBiciA8IGVuZCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemVfdCBzc2l6ZSA9IGVuZCAtIGJyOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoc3NpemUgPiBuYiArIFRPUF9GT09UX1NJWkUpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHRiYXNlID0gYnI7DQorICAgICAgICAgICAgICAgICAgICB0c2l6ZSA9IHNzaXplOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmICh0YmFzZSAhPSBDTUZBSUwpDQorICAgIHsNCisNCisgICAgICAgIGlmICgobS0+Zm9vdHByaW50ICs9IHRzaXplKSA+IG0tPm1heF9mb290cHJpbnQpDQorICAgICAgICB7DQorICAgICAgICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmICghaXNfaW5pdGlhbGl6ZWQobSkpICAgLyogZmlyc3QtdGltZSBpbml0aWFsaXphdGlvbiAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtLT5sZWFzdF9hZGRyID09IDAgfHwgdGJhc2UgPCBtLT5sZWFzdF9hZGRyKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbS0+bGVhc3RfYWRkciA9IHRiYXNlOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBtLT5zZWcuYmFzZSA9IHRiYXNlOw0KKyAgICAgICAgICAgIG0tPnNlZy5zaXplID0gdHNpemU7DQorICAgICAgICAgICAgbS0+c2VnLnNmbGFncyA9IG1tYXBfZmxhZzsNCisgICAgICAgICAgICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7DQorICAgICAgICAgICAgbS0+cmVsZWFzZV9jaGVja3MgPSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFOw0KKyAgICAgICAgICAgIGluaXRfYmlucyhtKTsNCisjaWYgIU9OTFlfTVNQQUNFUw0KKw0KKyAgICAgICAgICAgIGlmIChpc19nbG9iYWwobSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRPUF9GT09UX1NJWkUpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorI2VuZGlmDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAvKiBPZmZzZXQgdG9wIGJ5IGVtYmVkZGVkIG1hbGxvY19zdGF0ZSAqLw0KKyAgICAgICAgICAgICAgICBtY2h1bmtwdHIgbW4gPSBuZXh0X2NodW5rKG1lbTJjaHVuayhtKSk7DQorICAgICAgICAgICAgICAgIGluaXRfdG9wKG0sIG1uLCAoc2l6ZV90KSgodGJhc2UgKyB0c2l6ZSkgLSAoY2hhciAqKW1uKSAtIFRPUF9GT09UX1NJWkUpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICAvKiBUcnkgdG8gbWVyZ2Ugd2l0aCBhbiBleGlzdGluZyBzZWdtZW50ICovDQorICAgICAgICAgICAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOw0KKw0KKyAgICAgICAgICAgIC8qIE9ubHkgY29uc2lkZXIgbW9zdCByZWNlbnQgc2VnbWVudCBpZiB0cmF2ZXJzYWwgc3VwcHJlc3NlZCAqLw0KKyAgICAgICAgICAgIHdoaWxlIChzcCAhPSAwICYmIHRiYXNlICE9IHNwLT5iYXNlICsgc3AtPnNpemUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzcCA9IChOT19TRUdNRU5UX1RSQVZFUlNBTCkgPyAwIDogc3AtPm5leHQ7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmIChzcCAhPSAwICYmDQorICAgICAgICAgICAgICAgICFpc19leHRlcm5fc2VnbWVudChzcCkgJiYNCisgICAgICAgICAgICAgICAgKHNwLT5zZmxhZ3MgJiBVU0VfTU1BUF9CSVQpID09IG1tYXBfZmxhZyAmJg0KKyAgICAgICAgICAgICAgICBzZWdtZW50X2hvbGRzKHNwLCBtLT50b3ApKSAgIC8qIGFwcGVuZCAqLw0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc3AtPnNpemUgKz0gdHNpemU7DQorICAgICAgICAgICAgICAgIGluaXRfdG9wKG0sIG0tPnRvcCwgbS0+dG9wc2l6ZSArIHRzaXplKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYgKHRiYXNlIDwgbS0+bGVhc3RfYWRkcikNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbS0+bGVhc3RfYWRkciA9IHRiYXNlOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIHNwID0gJm0tPnNlZzsNCisNCisgICAgICAgICAgICAgICAgd2hpbGUgKHNwICE9IDAgJiYgc3AtPmJhc2UgIT0gdGJhc2UgKyB0c2l6ZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgc3AgPSAoTk9fU0VHTUVOVF9UUkFWRVJTQUwpID8gMCA6IHNwLT5uZXh0Ow0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGlmIChzcCAhPSAwICYmDQorICAgICAgICAgICAgICAgICAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmDQorICAgICAgICAgICAgICAgICAgICAoc3AtPnNmbGFncyAmIFVTRV9NTUFQX0JJVCkgPT0gbW1hcF9mbGFnKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBjaGFyICpvbGRiYXNlID0gc3AtPmJhc2U7DQorICAgICAgICAgICAgICAgICAgICBzcC0+YmFzZSA9IHRiYXNlOw0KKyAgICAgICAgICAgICAgICAgICAgc3AtPnNpemUgKz0gdHNpemU7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJlcGVuZF9hbGxvYyhtLCB0YmFzZSwgb2xkYmFzZSwgbmIpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgYWRkX3NlZ21lbnQobSwgdGJhc2UsIHRzaXplLCBtbWFwX2ZsYWcpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG5iIDwgbS0+dG9wc2l6ZSkgICAvKiBBbGxvY2F0ZSBmcm9tIG5ldyBvciBleHRlbmRlZCB0b3Agc3BhY2UgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBzaXplX3QgcnNpemUgPSBtLT50b3BzaXplIC09IG5iOw0KKyAgICAgICAgICAgIG1jaHVua3B0ciBwID0gbS0+dG9wOw0KKyAgICAgICAgICAgIG1jaHVua3B0ciByID0gbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOw0KKyAgICAgICAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7DQorICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBuYik7DQorICAgICAgICAgICAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7DQorICAgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobSwgY2h1bmsybWVtKHApLCBuYik7DQorICAgICAgICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047DQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgc3lzdGVtIGRlYWxsb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qIFVubWFwIGFuZCB1bmxpbmsgYW55IG1tYXBwZWQgc2VnbWVudHMgdGhhdCBkb24ndCBjb250YWluIHVzZWQgY2h1bmtzICovDQorc3RhdGljIHNpemVfdCByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhtc3RhdGUgbSkNCit7DQorICAgIHNpemVfdCByZWxlYXNlZCA9IDA7DQorICAgIGludCBuc2VncyA9IDA7DQorICAgIG1zZWdtZW50cHRyIHByZWQgPSAmbS0+c2VnOw0KKyAgICBtc2VnbWVudHB0ciBzcCA9IHByZWQtPm5leHQ7DQorDQorICAgIHdoaWxlIChzcCAhPSAwKQ0KKyAgICB7DQorICAgICAgICBjaGFyICpiYXNlID0gc3AtPmJhc2U7DQorICAgICAgICBzaXplX3Qgc2l6ZSA9IHNwLT5zaXplOw0KKyAgICAgICAgbXNlZ21lbnRwdHIgbmV4dCA9IHNwLT5uZXh0Ow0KKyAgICAgICAgKytuc2VnczsNCisNCisgICAgICAgIGlmIChpc19tbWFwcGVkX3NlZ21lbnQoc3ApICYmICFpc19leHRlcm5fc2VnbWVudChzcCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhiYXNlKTsNCisgICAgICAgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7DQorDQorICAgICAgICAgICAgLyogQ2FuIHVubWFwIGlmIGZpcnN0IGNodW5rIGhvbGRzIGVudGlyZSBzZWdtZW50IGFuZCBub3QgcGlubmVkICovDQorICAgICAgICAgICAgaWYgKCFpc19pbnVzZShwKSAmJiAoY2hhciAqKXAgKyBwc2l6ZSA+PSBiYXNlICsgc2l6ZSAtIFRPUF9GT09UX1NJWkUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7DQorICAgICAgICAgICAgICAgIGFzc2VydChzZWdtZW50X2hvbGRzKHNwLCAoY2hhciAqKXNwKSk7DQorDQorICAgICAgICAgICAgICAgIGlmIChwID09IG0tPmR2KQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtLT5kdiA9IDA7DQorICAgICAgICAgICAgICAgICAgICBtLT5kdnNpemUgPSAwOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHRwKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoQ0FMTF9NVU5NQVAoYmFzZSwgc2l6ZSkgPT0gMCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZWQgKz0gc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgIG0tPmZvb3RwcmludCAtPSBzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgLyogdW5saW5rIG9ic29sZXRlZCByZWNvcmQgKi8NCisgICAgICAgICAgICAgICAgICAgIHNwID0gcHJlZDsNCisgICAgICAgICAgICAgICAgICAgIHNwLT5uZXh0ID0gbmV4dDsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNlICAgLyogYmFjayBvdXQgaWYgY2Fubm90IHVubWFwICovDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGluc2VydF9sYXJnZV9jaHVuayhtLCB0cCwgcHNpemUpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKE5PX1NFR01FTlRfVFJBVkVSU0FMKSAvKiBzY2FuIG9ubHkgZmlyc3Qgc2VnbWVudCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcHJlZCA9IHNwOw0KKyAgICAgICAgc3AgPSBuZXh0Ow0KKyAgICB9DQorDQorICAgIC8qIFJlc2V0IGNoZWNrIGNvdW50ZXIgKi8NCisgICAgbS0+cmVsZWFzZV9jaGVja3MgPSAoKChzaXplX3QpIG5zZWdzID4gKHNpemVfdCkgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSkgPw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBuc2VncyA6IChzaXplX3QpIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUpOw0KKyAgICByZXR1cm4gcmVsZWFzZWQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgc3lzX3RyaW0obXN0YXRlIG0sIHNpemVfdCBwYWQpDQorew0KKyAgICBzaXplX3QgcmVsZWFzZWQgPSAwOw0KKyAgICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsNCisNCisgICAgaWYgKHBhZCA8IE1BWF9SRVFVRVNUICYmIGlzX2luaXRpYWxpemVkKG0pKQ0KKyAgICB7DQorICAgICAgICBwYWQgKz0gVE9QX0ZPT1RfU0laRTsgLyogZW5zdXJlIGVub3VnaCByb29tIGZvciBzZWdtZW50IG92ZXJoZWFkICovDQorDQorICAgICAgICBpZiAobS0+dG9wc2l6ZSA+IHBhZCkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvKiBTaHJpbmsgdG9wIHNwYWNlIGluIGdyYW51bGFyaXR5LXNpemUgdW5pdHMsIGtlZXBpbmcgYXQgbGVhc3Qgb25lICovDQorICAgICAgICAgICAgc2l6ZV90IHVuaXQgPSBtcGFyYW1zLmdyYW51bGFyaXR5Ow0KKyAgICAgICAgICAgIHNpemVfdCBleHRyYSA9ICgobS0+dG9wc2l6ZSAtIHBhZCArICh1bml0IC0gU0laRV9UX09ORSkpIC8gdW5pdCAtDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVfVF9PTkUpICogdW5pdDsNCisgICAgICAgICAgICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciAqKW0tPnRvcCk7DQorDQorICAgICAgICAgICAgaWYgKCFpc19leHRlcm5fc2VnbWVudChzcCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAoaXNfbW1hcHBlZF9zZWdtZW50KHNwKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKEhBVkVfTU1BUCAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNwLT5zaXplID49IGV4dHJhICYmDQorICAgICAgICAgICAgICAgICAgICAgICAgIWhhc19zZWdtZW50X2xpbmsobSwgc3ApKSAgIC8qIGNhbid0IHNocmluayBpZiBwaW5uZWQgKi8NCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IHNwLT5zaXplIC0gZXh0cmE7DQorICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpbmV3c2l6ZTsgLyogcGxhY2F0ZSBwZW9wbGUgY29tcGlsaW5nIC1XdW51c2VkLXZhcmlhYmxlICovDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlZmVyIG1yZW1hcCwgZmFsbCBiYWNrIHRvIG11bm1hcCAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoQ0FMTF9NUkVNQVAoc3AtPmJhc2UsIHNwLT5zaXplLCBuZXdzaXplLCAwKSAhPSBNRkFJTCkgfHwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENBTExfTVVOTUFQKHNwLT5iYXNlICsgbmV3c2l6ZSwgZXh0cmEpID09IDApKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZWQgPSBleHRyYTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoSEFWRV9NT1JFQ09SRSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhID49IEhBTEZfTUFYX1NJWkVfVCkgLyogQXZvaWQgd3JhcHBpbmcgbmVnYXRpdmUgKi8NCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IChIQUxGX01BWF9TSVpFX1QpICsgU0laRV9UX09ORSAtIHVuaXQ7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOw0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBlbmQgb2YgbWVtb3J5IGlzIHdoZXJlIHdlIGxhc3Qgc2V0IGl0LiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm9sZF9iciA9IChjaGFyICopKENBTExfTU9SRUNPUkUoMCkpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfYnIgPT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlbF9iciA9IChjaGFyICopKENBTExfTU9SRUNPUkUoLWV4dHJhKSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5ld19iciA9IChjaGFyICopKENBTExfTU9SRUNPUkUoMCkpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsX2JyICE9IENNRkFJTCAmJiBuZXdfYnIgPCBvbGRfYnIpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VkID0gb2xkX2JyIC0gbmV3X2JyOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAocmVsZWFzZWQgIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNwLT5zaXplIC09IHJlbGVhc2VkOw0KKyAgICAgICAgICAgICAgICBtLT5mb290cHJpbnQgLT0gcmVsZWFzZWQ7DQorICAgICAgICAgICAgICAgIGluaXRfdG9wKG0sIG0tPnRvcCwgbS0+dG9wc2l6ZSAtIHJlbGVhc2VkKTsNCisgICAgICAgICAgICAgICAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogVW5tYXAgYW55IHVudXNlZCBtbWFwcGVkIHNlZ21lbnRzICovDQorICAgICAgICBpZiAoSEFWRV9NTUFQKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJlbGVhc2VkICs9IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG0pOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogT24gZmFpbHVyZSwgZGlzYWJsZSBhdXRvdHJpbSB0byBhdm9pZCByZXBlYXRlZCBmYWlsZWQgZnV0dXJlIGNhbGxzICovDQorICAgICAgICBpZiAocmVsZWFzZWQgPT0gMCAmJiBtLT50b3BzaXplID4gbS0+dHJpbV9jaGVjaykNCisgICAgICAgIHsNCisgICAgICAgICAgICBtLT50cmltX2NoZWNrID0gTUFYX1NJWkVfVDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gKHJlbGVhc2VkICE9IDApID8gMSA6IDA7DQorfQ0KKw0KKy8qIENvbnNvbGlkYXRlIGFuZCBiaW4gYSBjaHVuay4gRGlmZmVycyBmcm9tIGV4cG9ydGVkIHZlcnNpb25zDQorICAgb2YgZnJlZSBtYWlubHkgaW4gdGhhdCB0aGUgY2h1bmsgbmVlZCBub3QgYmUgbWFya2VkIGFzIGludXNlLg0KKyovDQorc3RhdGljIHZvaWQgZGlzcG9zZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHAsIHNpemVfdCBwc2l6ZSkNCit7DQorICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOw0KKw0KKyAgICBpZiAoIXBpbnVzZShwKSkNCisgICAgew0KKyAgICAgICAgbWNodW5rcHRyIHByZXY7DQorICAgICAgICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7DQorDQorICAgICAgICBpZiAoaXNfbW1hcHBlZChwKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZSArIE1NQVBfRk9PVF9QQUQ7DQorDQorICAgICAgICAgICAgaWYgKENBTExfTVVOTUFQKChjaGFyICopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG0tPmZvb3RwcmludCAtPSBwc2l6ZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7DQorICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZTsNCisgICAgICAgIHAgPSBwcmV2Ow0KKw0KKyAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCBwcmV2KSkpICAgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAocCAhPSBtLT5kdikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHVubGlua19jaHVuayhtLCBwLCBwcmV2c2l6ZSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG0tPmR2c2l6ZSA9IHBzaXplOw0KKyAgICAgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7DQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSk7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgbmV4dCkpKQ0KKyAgICB7DQorICAgICAgICBpZiAoIWNpbnVzZShuZXh0KSkgICAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChuZXh0ID09IG0tPnRvcCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemVfdCB0c2l6ZSA9IG0tPnRvcHNpemUgKz0gcHNpemU7DQorICAgICAgICAgICAgICAgIG0tPnRvcCA9IHA7DQorICAgICAgICAgICAgICAgIHAtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7DQorDQorICAgICAgICAgICAgICAgIGlmIChwID09IG0tPmR2KQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtLT5kdiA9IDA7DQorICAgICAgICAgICAgICAgICAgICBtLT5kdnNpemUgPSAwOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PSBtLT5kdikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemVfdCBkc2l6ZSA9IG0tPmR2c2l6ZSArPSBwc2l6ZTsNCisgICAgICAgICAgICAgICAgbS0+ZHYgPSBwOw0KKyAgICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgZHNpemUpOw0KKyAgICAgICAgICAgICAgICByZXR1cm47DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsNCisgICAgICAgICAgICAgICAgcHNpemUgKz0gbnNpemU7DQorICAgICAgICAgICAgICAgIHVubGlua19jaHVuayhtLCBuZXh0LCBuc2l6ZSk7DQorICAgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7DQorDQorICAgICAgICAgICAgICAgIGlmIChwID09IG0tPmR2KQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtLT5kdnNpemUgPSBwc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7DQorICAgICAgICB9DQorDQorICAgICAgICBpbnNlcnRfY2h1bmsobSwgcCwgcHNpemUpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSk7DQorICAgIH0NCit9DQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsb2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyogYWxsb2NhdGUgYSBsYXJnZSByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8NCitzdGF0aWMgdm9pZCAqdG1hbGxvY19sYXJnZShtc3RhdGUgbSwgc2l6ZV90IG5iKQ0KK3sNCisgICAgdGNodW5rcHRyIHYgPSAwOw0KKyAgICBzaXplX3QgcnNpemUgPSAtbmI7IC8qIFVuc2lnbmVkIG5lZ2F0aW9uICovDQorICAgIHRjaHVua3B0ciB0Ow0KKyAgICBiaW5kZXhfdCBpZHg7DQorICAgIGNvbXB1dGVfdHJlZV9pbmRleChuYiwgaWR4KTsNCisNCisgICAgaWYgKCh0ID0gKnRyZWViaW5fYXQobSwgaWR4KSkgIT0gMCkNCisgICAgew0KKyAgICAgICAgLyogVHJhdmVyc2UgdHJlZSBmb3IgdGhpcyBiaW4gbG9va2luZyBmb3Igbm9kZSB3aXRoIHNpemUgPT0gbmIgKi8NCisgICAgICAgIHNpemVfdCBzaXplYml0cyA9IG5iIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpZHgpOw0KKyAgICAgICAgdGNodW5rcHRyIHJzdCA9IDA7ICAvKiBUaGUgZGVlcGVzdCB1bnRha2VuIHJpZ2h0IHN1YnRyZWUgKi8NCisNCisgICAgICAgIGZvciAoOzspDQorICAgICAgICB7DQorICAgICAgICAgICAgdGNodW5rcHRyIHJ0Ow0KKyAgICAgICAgICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7DQorDQorICAgICAgICAgICAgaWYgKHRyZW0gPCByc2l6ZSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHYgPSB0Ow0KKw0KKyAgICAgICAgICAgICAgICBpZiAoKHJzaXplID0gdHJlbSkgPT0gMCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgcnQgPSB0LT5jaGlsZFsxXTsNCisgICAgICAgICAgICB0ID0gdC0+Y2hpbGRbKHNpemViaXRzID4+IChTSVpFX1RfQklUU0laRSAtIFNJWkVfVF9PTkUpKSAmIDFdOw0KKw0KKyAgICAgICAgICAgIGlmIChydCAhPSAwICYmIHJ0ICE9IHQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByc3QgPSBydDsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKHQgPT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHQgPSByc3Q7IC8qIHNldCB0IHRvIGxlYXN0IHN1YnRyZWUgaG9sZGluZyBzaXplcyA+IG5iICovDQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBzaXplYml0cyA8PD0gMTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAodCA9PSAwICYmIHYgPT0gMCkgICAvKiBzZXQgdCB0byByb290IG9mIG5leHQgbm9uLWVtcHR5IHRyZWViaW4gKi8NCisgICAgew0KKyAgICAgICAgYmlubWFwX3QgbGVmdGJpdHMgPSBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKSAmIG0tPnRyZWVtYXA7DQorDQorICAgICAgICBpZiAobGVmdGJpdHMgIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBiaW5kZXhfdCBpOw0KKyAgICAgICAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsNCisgICAgICAgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOw0KKyAgICAgICAgICAgIHQgPSAqdHJlZWJpbl9hdChtLCBpKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICB3aGlsZSAodCAhPSAwKSAgIC8qIGZpbmQgc21hbGxlc3Qgb2YgdHJlZSBvciBzdWJ0cmVlICovDQorICAgIHsNCisgICAgICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7DQorDQorICAgICAgICBpZiAodHJlbSA8IHJzaXplKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJzaXplID0gdHJlbTsNCisgICAgICAgICAgICB2ID0gdDsNCisgICAgICAgIH0NCisNCisgICAgICAgIHQgPSBsZWZ0bW9zdF9jaGlsZCh0KTsNCisgICAgfQ0KKw0KKyAgICAvKiAgSWYgZHYgaXMgYSBiZXR0ZXIgZml0LCByZXR1cm4gMCBzbyBtYWxsb2Mgd2lsbCB1c2UgaXQgKi8NCisgICAgaWYgKHYgIT0gMCAmJiByc2l6ZSA8IChzaXplX3QpKG0tPmR2c2l6ZSAtIG5iKSkNCisgICAgew0KKyAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpICAgLyogc3BsaXQgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsNCisgICAgICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOw0KKw0KKyAgICAgICAgICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHYpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOw0KKyAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsNCisgICAgICAgICAgICAgICAgICAgIGluc2VydF9jaHVuayhtLCByLCByc2l6ZSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rMm1lbSh2KTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyogYWxsb2NhdGUgYSBzbWFsbCByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8NCitzdGF0aWMgdm9pZCAqdG1hbGxvY19zbWFsbChtc3RhdGUgbSwgc2l6ZV90IG5iKQ0KK3sNCisgICAgdGNodW5rcHRyIHQsIHY7DQorICAgIHNpemVfdCByc2l6ZTsNCisgICAgYmluZGV4X3QgaTsNCisgICAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobS0+dHJlZW1hcCk7DQorICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7DQorICAgIHYgPSB0ID0gKnRyZWViaW5fYXQobSwgaSk7DQorICAgIHJzaXplID0gY2h1bmtzaXplKHQpIC0gbmI7DQorDQorICAgIHdoaWxlICgodCA9IGxlZnRtb3N0X2NoaWxkKHQpKSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOw0KKw0KKyAgICAgICAgaWYgKHRyZW0gPCByc2l6ZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByc2l6ZSA9IHRyZW07DQorICAgICAgICAgICAgdiA9IHQ7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpDQorICAgIHsNCisgICAgICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQodiwgbmIpOw0KKyAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZSh2KSA9PSByc2l6ZSArIG5iKTsNCisNCisgICAgICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVubGlua19sYXJnZV9jaHVuayhtLCB2KTsNCisNCisgICAgICAgICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOw0KKyAgICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOw0KKyAgICAgICAgICAgICAgICByZXBsYWNlX2R2KG0sIHIsIHJzaXplKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgcmV0dXJuIGNodW5rMm1lbSh2KTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKyNpZiAhT05MWV9NU1BBQ0VTDQorDQordm9pZCAqZGxtYWxsb2Moc2l6ZV90IGJ5dGVzKQ0KK3sNCisgICAgLyoNCisgICAgICAgQmFzaWMgYWxnb3JpdGhtOg0KKyAgICAgICBJZiBhIHNtYWxsIHJlcXVlc3QgKDwgMjU2IGJ5dGVzIG1pbnVzIHBlci1jaHVuayBvdmVyaGVhZCk6DQorICAgICAgICAgMS4gSWYgb25lIGV4aXN0cywgdXNlIGEgcmVtYWluZGVybGVzcyBjaHVuayBpbiBhc3NvY2lhdGVkIHNtYWxsYmluLg0KKyAgICAgICAgICAgIChSZW1haW5kZXJsZXNzIG1lYW5zIHRoYXQgdGhlcmUgYXJlIHRvbyBmZXcgZXhjZXNzIGJ5dGVzIHRvDQorICAgICAgICAgICAgcmVwcmVzZW50IGFzIGEgY2h1bmsuKQ0KKyAgICAgICAgIDIuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgZHYgY2h1bmssIHdoaWNoIGlzIG5vcm1hbGx5IHRoZQ0KKyAgICAgICAgICAgIGNodW5rIGFkamFjZW50IHRvIHRoZSBvbmUgdXNlZCBmb3IgdGhlIG1vc3QgcmVjZW50IHNtYWxsIHJlcXVlc3QuDQorICAgICAgICAgMy4gSWYgb25lIGV4aXN0cywgc3BsaXQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBjaHVuayBpbiBhIGJpbiwNCisgICAgICAgICAgICBzYXZpbmcgcmVtYWluZGVyIGluIGR2Lg0KKyAgICAgICAgIDQuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLg0KKyAgICAgICAgIDUuIElmIGF2YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0DQorICAgICAgIE90aGVyd2lzZSwgZm9yIGEgbGFyZ2UgcmVxdWVzdDoNCisgICAgICAgICAxLiBGaW5kIHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgYmlubmVkIGNodW5rIHRoYXQgZml0cywgYW5kIHVzZSBpdA0KKyAgICAgICAgICAgIGlmIGl0IGlzIGJldHRlciBmaXR0aW5nIHRoYW4gZHYgY2h1bmssIHNwbGl0dGluZyBpZiBuZWNlc3NhcnkuDQorICAgICAgICAgMi4gSWYgYmV0dGVyIGZpdHRpbmcgdGhhbiBhbnkgYmlubmVkIGNodW5rLCB1c2UgdGhlIGR2IGNodW5rLg0KKyAgICAgICAgIDMuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLg0KKyAgICAgICAgIDQuIElmIHJlcXVlc3Qgc2l6ZSA+PSBtbWFwIHRocmVzaG9sZCwgdHJ5IHRvIGRpcmVjdGx5IG1tYXAgdGhpcyBjaHVuay4NCisgICAgICAgICA1LiBJZiBhdmFpbGFibGUsIGdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gYW5kIHVzZSBpdA0KKw0KKyAgICAgICBUaGUgdWdseSBnb3RvJ3MgaGVyZSBlbnN1cmUgdGhhdCBwb3N0YWN0aW9uIG9jY3VycyBhbG9uZyBhbGwgcGF0aHMuDQorICAgICovDQorDQorI2lmIFVTRV9MT0NLUw0KKyAgICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsgLyogaW5pdGlhbGl6ZSBpbiBzeXNfYWxsb2MgaWYgbm90IHVzaW5nIGxvY2tzICovDQorI2VuZGlmDQorDQorICAgIGlmICghUFJFQUNUSU9OKGdtKSkNCisgICAgew0KKyAgICAgICAgdm9pZCAqbWVtOw0KKyAgICAgICAgc2l6ZV90IG5iOw0KKw0KKyAgICAgICAgaWYgKGJ5dGVzIDw9IE1BWF9TTUFMTF9SRVFVRVNUKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJpbmRleF90IGlkeDsNCisgICAgICAgICAgICBiaW5tYXBfdCBzbWFsbGJpdHM7DQorICAgICAgICAgICAgbmIgPSAoYnl0ZXMgPCBNSU5fUkVRVUVTVCkgPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KGJ5dGVzKTsNCisgICAgICAgICAgICBpZHggPSBzbWFsbF9pbmRleChuYik7DQorICAgICAgICAgICAgc21hbGxiaXRzID0gZ20tPnNtYWxsbWFwID4+IGlkeDsNCisNCisgICAgICAgICAgICBpZiAoKHNtYWxsYml0cyAmIDB4M1UpICE9IDApICAgLyogUmVtYWluZGVybGVzcyBmaXQgdG8gYSBzbWFsbGJpbi4gKi8NCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1jaHVua3B0ciBiLCBwOw0KKyAgICAgICAgICAgICAgICBpZHggKz0gfnNtYWxsYml0cyAmIDE7ICAgICAgIC8qIFVzZXMgbmV4dCBiaW4gaWYgaWR4IGVtcHR5ICovDQorICAgICAgICAgICAgICAgIGIgPSBzbWFsbGJpbl9hdChnbSwgaWR4KTsNCisgICAgICAgICAgICAgICAgcCA9IGItPmZkOw0KKyAgICAgICAgICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaWR4KSk7DQorICAgICAgICAgICAgICAgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhnbSwgYiwgcCwgaWR4KTsNCisgICAgICAgICAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7DQorICAgICAgICAgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsNCisgICAgICAgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOw0KKyAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGVsc2UgaWYgKG5iID4gZ20tPmR2c2l6ZSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGlmIChzbWFsbGJpdHMgIT0gMCkgICAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLw0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtY2h1bmtwdHIgYiwgcCwgcjsNCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCByc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgIGJpbmRleF90IGk7DQorICAgICAgICAgICAgICAgICAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IChzbWFsbGJpdHMgPDwgaWR4KSAmIGxlZnRfYml0cyhpZHgyYml0KGlkeCkpOw0KKyAgICAgICAgICAgICAgICAgICAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOw0KKyAgICAgICAgICAgICAgICAgICAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsNCisgICAgICAgICAgICAgICAgICAgIGIgPSBzbWFsbGJpbl9hdChnbSwgaSk7DQorICAgICAgICAgICAgICAgICAgICBwID0gYi0+ZmQ7DQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaSkpOw0KKyAgICAgICAgICAgICAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpKTsNCisgICAgICAgICAgICAgICAgICAgIHJzaXplID0gc21hbGxfaW5kZXgyc2l6ZShpKSAtIG5iOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgLyogRml0IGhlcmUgY2Fubm90IGJlIHJlbWFpbmRlcmxlc3MgaWYgNGJ5dGUgc2l6ZXMgKi8NCisgICAgICAgICAgICAgICAgICAgIGlmIChTSVpFX1RfU0laRSAhPSA0ICYmIHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaSkpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsNCisgICAgICAgICAgICAgICAgICAgICAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZV9kdihnbSwgciwgcnNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOw0KKyAgICAgICAgICAgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOw0KKyAgICAgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGdtLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2Nfc21hbGwoZ20sIG5iKSkgIT0gMCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOw0KKyAgICAgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpDQorICAgICAgICB7DQorICAgICAgICAgICAgbmIgPSBNQVhfU0laRV9UOyAgICAvKiBUb28gYmlnIHRvIGFsbG9jYXRlLiBGb3JjZSBmYWlsdXJlIChpbiBzeXMgYWxsb2MpICovDQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbmIgPSBwYWRfcmVxdWVzdChieXRlcyk7DQorDQorICAgICAgICAgICAgaWYgKGdtLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2NfbGFyZ2UoZ20sIG5iKSkgIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsNCisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChuYiA8PSBnbS0+ZHZzaXplKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT5kdnNpemUgLSBuYjsNCisgICAgICAgICAgICBtY2h1bmtwdHIgcCA9IGdtLT5kdjsNCisNCisgICAgICAgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpICAgLyogc3BsaXQgZHYgKi8NCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1jaHVua3B0ciByID0gZ20tPmR2ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOw0KKyAgICAgICAgICAgICAgICBnbS0+ZHZzaXplID0gcnNpemU7DQorICAgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7DQorICAgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZSAgIC8qIGV4aGF1c3QgZHYgKi8NCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemVfdCBkdnMgPSBnbS0+ZHZzaXplOw0KKyAgICAgICAgICAgICAgICBnbS0+ZHZzaXplID0gMDsNCisgICAgICAgICAgICAgICAgZ20tPmR2ID0gMDsNCisgICAgICAgICAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIGR2cyk7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsNCisgICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7DQorICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZWxzZSBpZiAobmIgPCBnbS0+dG9wc2l6ZSkgICAvKiBTcGxpdCB0b3AgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBzaXplX3QgcnNpemUgPSBnbS0+dG9wc2l6ZSAtPSBuYjsNCisgICAgICAgICAgICBtY2h1bmtwdHIgcCA9IGdtLT50b3A7DQorICAgICAgICAgICAgbWNodW5rcHRyIHIgPSBnbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOw0KKyAgICAgICAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7DQorICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOw0KKyAgICAgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsNCisgICAgICAgICAgICBjaGVja190b3BfY2h1bmsoZ20sIGdtLT50b3ApOw0KKyAgICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsNCisgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICB9DQorDQorICAgICAgICBtZW0gPSBzeXNfYWxsb2MoZ20sIG5iKTsNCisNCitwb3N0YWN0aW9uOg0KKyAgICAgICAgUE9TVEFDVElPTihnbSk7DQorICAgICAgICByZXR1cm4gbWVtOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZyZWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQordm9pZCBkbGZyZWUodm9pZCAqbWVtKQ0KK3sNCisgICAgLyoNCisgICAgICAgQ29uc29saWRhdGUgZnJlZWQgY2h1bmtzIHdpdGggcHJlY2VlZGluZyBvciBzdWNjZWVkaW5nIGJvcmRlcmluZw0KKyAgICAgICBmcmVlIGNodW5rcywgaWYgdGhleSBleGlzdCwgYW5kIHRoZW4gcGxhY2UgaW4gYSBiaW4uICBJbnRlcm1peGVkDQorICAgICAgIHdpdGggc3BlY2lhbCBjYXNlcyBmb3IgdG9wLCBkdiwgbW1hcHBlZCBjaHVua3MsIGFuZCB1c2FnZSBlcnJvcnMuDQorICAgICovDQorDQorICAgIGlmIChtZW0gIT0gMCkNCisgICAgew0KKyAgICAgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7DQorI2lmIEZPT1RFUlMNCisgICAgICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOw0KKw0KKyAgICAgICAgaWYgKCFva19tYWdpYyhmbSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorDQorI2Vsc2UgLyogRk9PVEVSUyAqLw0KKyNkZWZpbmUgZm0gZ20NCisjZW5kaWYgLyogRk9PVEVSUyAqLw0KKw0KKyAgICAgICAgaWYgKCFQUkVBQ1RJT04oZm0pKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsNCisNCisgICAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwKSAmJiBva19pbnVzZShwKSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7DQorICAgICAgICAgICAgICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoIXBpbnVzZShwKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHByZXZzaXplID0gcC0+cHJldl9mb290Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21tYXBwZWQocCkpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciAqKXAgLSBwcmV2c2l6ZSwgcHNpemUpID09IDApDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+Zm9vdHByaW50IC09IHBzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgbWNodW5rcHRyIHByZXYgPSBjaHVua19taW51c19vZmZzZXQocCwgcHJldnNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBwcmV2Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHByZXYpKSkgICAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgIT0gZm0tPmR2KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIHAsIHByZXZzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgobmV4dC0+aGVhZCAmIElOVVNFX0JJVFMpID09IElOVVNFX0JJVFMpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yYWN0aW9uOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlmICghY2ludXNlKG5leHQpKSAgICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gZm0tPnRvcCkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0c2l6ZSA9IGZtLT50b3BzaXplICs9IHBzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+dG9wID0gcDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+ZHYgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c190cmltKGZtLCAwKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgPT0gZm0tPmR2KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0tPmR2ID0gcDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUobmV4dCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzaXplICs9IG5zaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIG5leHQsIG5zaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHBzaXplKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3NtYWxsKHBzaXplKSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRfc21hbGxfY2h1bmsoZm0sIHAsIHBzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICB0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0X2xhcmdlX2NodW5rKGZtLCB0cCwgcHNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLWZtLT5yZWxlYXNlX2NoZWNrcyA9PSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMoZm0pOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisNCitlcnJvcmFjdGlvbjoNCisgICAgICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOw0KK3Bvc3RhY3Rpb246DQorICAgICAgICAgICAgUE9TVEFDVElPTihmbSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisjaWYgIUZPT1RFUlMNCisjdW5kZWYgZm0NCisjZW5kaWYgLyogRk9PVEVSUyAqLw0KK30NCisNCit2b2lkICpkbGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkNCit7DQorICAgIHZvaWQgKm1lbTsNCisgICAgc2l6ZV90IHJlcSA9IDA7DQorDQorICAgIGlmIChuX2VsZW1lbnRzICE9IDApDQorICAgIHsNCisgICAgICAgIHJlcSA9IG5fZWxlbWVudHMgKiBlbGVtX3NpemU7DQorDQorICAgICAgICBpZiAoKChuX2VsZW1lbnRzIHwgZWxlbV9zaXplKSAmIH4oc2l6ZV90KTB4ZmZmZikgJiYNCisgICAgICAgICAgICAocmVxIC8gbl9lbGVtZW50cyAhPSBlbGVtX3NpemUpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJlcSA9IE1BWF9TSVpFX1Q7ICAgIC8qIGZvcmNlIGRvd25zdHJlYW0gZmFpbHVyZSBvbiBvdmVyZmxvdyAqLw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIG1lbSA9IGRsbWFsbG9jKHJlcSk7DQorDQorICAgIGlmIChtZW0gIT0gMCAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpDQorICAgIHsNCisgICAgICAgIG1lbXNldChtZW0sIDAsIHJlcSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1lbTsNCit9DQorDQorI2VuZGlmIC8qICFPTkxZX01TUEFDRVMgKi8NCisNCisvKiAtLS0tLS0tLS0tLS0gSW50ZXJuYWwgc3VwcG9ydCBmb3IgcmVhbGxvYywgbWVtYWxpZ24sIGV0YyAtLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qIFRyeSB0byByZWFsbG9jOyBvbmx5IGluLXBsYWNlIHVubGVzcyBjYW5fbW92ZSB0cnVlICovDQorc3RhdGljIG1jaHVua3B0ciB0cnlfcmVhbGxvY19jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHAsIHNpemVfdCBuYiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYW5fbW92ZSkNCit7DQorICAgIG1jaHVua3B0ciBuZXdwID0gMDsNCisgICAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUocCk7DQorICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgb2xkc2l6ZSk7DQorDQorICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgcCkgJiYgb2tfaW51c2UocCkgJiYNCisgICAgICAgICAgICAgICAgb2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKQ0KKyAgICB7DQorICAgICAgICBpZiAoaXNfbW1hcHBlZChwKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBuZXdwID0gbW1hcF9yZXNpemUobSwgcCwgbmIsIGNhbl9tb3ZlKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKG9sZHNpemUgPj0gbmIpICAgICAgICAgICAgICAgLyogYWxyZWFkeSBiaWcgZW5vdWdoICovDQorICAgICAgICB7DQorICAgICAgICAgICAgc2l6ZV90IHJzaXplID0gb2xkc2l6ZSAtIG5iOw0KKw0KKyAgICAgICAgICAgIGlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgICAgICAgIC8qIHNwbGl0IG9mZiByZW1haW5kZXIgKi8NCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOw0KKyAgICAgICAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbmIpOw0KKyAgICAgICAgICAgICAgICBzZXRfaW51c2UobSwgciwgcnNpemUpOw0KKyAgICAgICAgICAgICAgICBkaXNwb3NlX2NodW5rKG0sIHIsIHJzaXplKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgbmV3cCA9IHA7DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmIChuZXh0ID09IG0tPnRvcCkgICAgLyogZXh0ZW5kIGludG8gdG9wICovDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKG9sZHNpemUgKyBtLT50b3BzaXplID4gbmIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IG9sZHNpemUgKyBtLT50b3BzaXplOw0KKyAgICAgICAgICAgICAgICBzaXplX3QgbmV3dG9wc2l6ZSA9IG5ld3NpemUgLSBuYjsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIG5ld3RvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsNCisgICAgICAgICAgICAgICAgc2V0X2ludXNlKG0sIHAsIG5iKTsNCisgICAgICAgICAgICAgICAgbmV3dG9wLT5oZWFkID0gbmV3dG9wc2l6ZSB8IFBJTlVTRV9CSVQ7DQorICAgICAgICAgICAgICAgIG0tPnRvcCA9IG5ld3RvcDsNCisgICAgICAgICAgICAgICAgbS0+dG9wc2l6ZSA9IG5ld3RvcHNpemU7DQorICAgICAgICAgICAgICAgIG5ld3AgPSBwOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKG5leHQgPT0gbS0+ZHYpICAgLyogZXh0ZW5kIGludG8gZHYgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBzaXplX3QgZHZzID0gbS0+ZHZzaXplOw0KKw0KKyAgICAgICAgICAgIGlmIChvbGRzaXplICsgZHZzID49IG5iKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2l6ZV90IGRzaXplID0gb2xkc2l6ZSArIGR2cyAtIG5iOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoZHNpemUgPj0gTUlOX0NIVU5LX1NJWkUpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOw0KKyAgICAgICAgICAgICAgICAgICAgbWNodW5rcHRyIG4gPSBjaHVua19wbHVzX29mZnNldChyLCBkc2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbmIpOw0KKyAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIGRzaXplKTsNCisgICAgICAgICAgICAgICAgICAgIGNsZWFyX3BpbnVzZShuKTsNCisgICAgICAgICAgICAgICAgICAgIG0tPmR2c2l6ZSA9IGRzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgbS0+ZHYgPSByOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVsc2UgICAvKiBleGhhdXN0IGR2ICovDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZXdzaXplID0gb2xkc2l6ZSArIGR2czsNCisgICAgICAgICAgICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBuZXdzaXplKTsNCisgICAgICAgICAgICAgICAgICAgIG0tPmR2c2l6ZSA9IDA7DQorICAgICAgICAgICAgICAgICAgICBtLT5kdiA9IDA7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbmV3cCA9IHA7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSBpZiAoIWNpbnVzZShuZXh0KSkgICAvKiBleHRlbmQgaW50byBuZXh0IGZyZWUgY2h1bmsgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBzaXplX3QgbmV4dHNpemUgPSBjaHVua3NpemUobmV4dCk7DQorDQorICAgICAgICAgICAgaWYgKG9sZHNpemUgKyBuZXh0c2l6ZSA+PSBuYikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemVfdCByc2l6ZSA9IG9sZHNpemUgKyBuZXh0c2l6ZSAtIG5iOw0KKyAgICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsobSwgbmV4dCwgbmV4dHNpemUpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBvbGRzaXplICsgbmV4dHNpemU7DQorICAgICAgICAgICAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbmV3c2l6ZSk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsNCisgICAgICAgICAgICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBuYik7DQorICAgICAgICAgICAgICAgICAgICBzZXRfaW51c2UobSwgciwgcnNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgZGlzcG9zZV9jaHVuayhtLCByLCByc2l6ZSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbmV3cCA9IHA7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIGNodW5rMm1lbShwKSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG5ld3A7DQorfQ0KKw0KK3N0YXRpYyB2b2lkICppbnRlcm5hbF9tZW1hbGlnbihtc3RhdGUgbSwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKQ0KK3sNCisgICAgdm9pZCAqbWVtID0gMDsNCisNCisgICAgaWYgKGFsaWdubWVudCA8ICBNSU5fQ0hVTktfU0laRSkgLyogbXVzdCBiZSBhdCBsZWFzdCBhIG1pbmltdW0gY2h1bmsgc2l6ZSAqLw0KKyAgICB7DQorICAgICAgICBhbGlnbm1lbnQgPSBNSU5fQ0hVTktfU0laRTsNCisgICAgfQ0KKw0KKyAgICBpZiAoKGFsaWdubWVudCAmIChhbGlnbm1lbnQgLSBTSVpFX1RfT05FKSkgIT0gMCkgLyogRW5zdXJlIGEgcG93ZXIgb2YgMiAqLw0KKyAgICB7DQorICAgICAgICBzaXplX3QgYSA9IE1BTExPQ19BTElHTk1FTlQgPDwgMTsNCisNCisgICAgICAgIHdoaWxlIChhIDwgYWxpZ25tZW50KSB7IGEgPDw9IDE7IH0NCisNCisgICAgICAgIGFsaWdubWVudCA9IGE7DQorICAgIH0NCisNCisgICAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUIC0gYWxpZ25tZW50KQ0KKyAgICB7DQorICAgICAgICBpZiAobSAhPSAwKSAgICAvKiBUZXN0IGlzbid0IG5lZWRlZCBidXQgYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOw0KKyAgICAgICAgc2l6ZV90IHJlcSA9IG5iICsgYWxpZ25tZW50ICsgTUlOX0NIVU5LX1NJWkUgLSBDSFVOS19PVkVSSEVBRDsNCisgICAgICAgIG1lbSA9IGludGVybmFsX21hbGxvYyhtLCByZXEpOw0KKw0KKyAgICAgICAgaWYgKG1lbSAhPSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7DQorDQorICAgICAgICAgICAgaWYgKFBSRUFDVElPTihtKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAoKCgoc2l6ZV90KShtZW0pKSAmIChhbGlnbm1lbnQgLSAxKSkgIT0gMCkgICAvKiBtaXNhbGlnbmVkICovDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAvKg0KKyAgICAgICAgICAgICAgICAgIEZpbmQgYW4gYWxpZ25lZCBzcG90IGluc2lkZSBjaHVuay4gIFNpbmNlIHdlIG5lZWQgdG8gZ2l2ZQ0KKyAgICAgICAgICAgICAgICAgIGJhY2sgbGVhZGluZyBzcGFjZSBpbiBhIGNodW5rIG9mIGF0IGxlYXN0IE1JTl9DSFVOS19TSVpFLCBpZg0KKyAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBjYWxjdWxhdGlvbiBwbGFjZXMgdXMgYXQgYSBzcG90IHdpdGggbGVzcyB0aGFuDQorICAgICAgICAgICAgICAgICAgTUlOX0NIVU5LX1NJWkUgbGVhZGVyLCB3ZSBjYW4gbW92ZSB0byB0aGUgbmV4dCBhbGlnbmVkIHNwb3QuDQorICAgICAgICAgICAgICAgICAgV2UndmUgYWxsb2NhdGVkIGVub3VnaCB0b3RhbCByb29tIHNvIHRoYXQgdGhpcyBpcyBhbHdheXMNCisgICAgICAgICAgICAgICAgICBwb3NzaWJsZS4NCisgICAgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAgICAgY2hhciAqYnIgPSAoY2hhciAqKW1lbTJjaHVuaygoc2l6ZV90KSgoKHNpemVfdCkoKGNoYXIgKiltZW0gKyBhbGlnbm1lbnQgLQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFX1RfT05FKSkgJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1hbGlnbm1lbnQpKTsNCisgICAgICAgICAgICAgICAgY2hhciAqcG9zID0gKChzaXplX3QpKGJyIC0gKGNoYXIgKikocCkpID49IE1JTl9DSFVOS19TSVpFKSA/DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyIDogYnIgKyBhbGlnbm1lbnQ7DQorICAgICAgICAgICAgICAgIG1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cilwb3M7DQorICAgICAgICAgICAgICAgIHNpemVfdCBsZWFkc2l6ZSA9IHBvcyAtIChjaGFyICopKHApOw0KKyAgICAgICAgICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IGNodW5rc2l6ZShwKSAtIGxlYWRzaXplOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoaXNfbW1hcHBlZChwKSkgICAvKiBGb3IgbW1hcHBlZCBjaHVua3MsIGp1c3QgYWRqdXN0IG9mZnNldCAqLw0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBuZXdwLT5wcmV2X2Zvb3QgPSBwLT5wcmV2X2Zvb3QgKyBsZWFkc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgIG5ld3AtPmhlYWQgPSBuZXdzaXplOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVsc2UgICAvKiBPdGhlcndpc2UsIGdpdmUgYmFjayBsZWFkZXIsIHVzZSB0aGUgcmVzdCAqLw0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBzZXRfaW51c2UobSwgbmV3cCwgbmV3c2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbGVhZHNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgZGlzcG9zZV9jaHVuayhtLCBwLCBsZWFkc2l6ZSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgcCA9IG5ld3A7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIC8qIEdpdmUgYmFjayBzcGFyZSByb29tIGF0IHRoZSBlbmQgKi8NCisgICAgICAgICAgICBpZiAoIWlzX21tYXBwZWQocCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKHNpemUgPiBuYiArIE1JTl9DSFVOS19TSVpFKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVtYWluZGVyX3NpemUgPSBzaXplIC0gbmI7DQorICAgICAgICAgICAgICAgICAgICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOw0KKyAgICAgICAgICAgICAgICAgICAgc2V0X2ludXNlKG0sIHAsIG5iKTsNCisgICAgICAgICAgICAgICAgICAgIHNldF9pbnVzZShtLCByZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplKTsNCisgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2VfY2h1bmsobSwgcmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOw0KKyAgICAgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPj0gbmIpOw0KKyAgICAgICAgICAgIGFzc2VydCgoKHNpemVfdCltZW0gJiAoYWxpZ25tZW50IC0gMSkpID09IDApOw0KKyAgICAgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIHApOw0KKyAgICAgICAgICAgIFBPU1RBQ1RJT04obSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1lbTsNCit9DQorDQorLyoNCisgIENvbW1vbiBzdXBwb3J0IGZvciBpbmRlcGVuZGVudF9YIHJvdXRpbmVzLCBoYW5kbGluZw0KKyAgICBhbGwgb2YgdGhlIGNvbWJpbmF0aW9ucyB0aGF0IGNhbiByZXN1bHQuDQorICBUaGUgb3B0cyBhcmcgaGFzOg0KKyAgICBiaXQgMCBzZXQgaWYgYWxsIGVsZW1lbnRzIGFyZSBzYW1lIHNpemUgKHVzaW5nIHNpemVzWzBdKQ0KKyAgICBiaXQgMSBzZXQgaWYgZWxlbWVudHMgc2hvdWxkIGJlIHplcm9lZA0KKyovDQorc3RhdGljIHZvaWQgKippYWxsb2MobXN0YXRlIG0sDQorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5fZWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpzaXplcywNCisgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0cywNCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpjaHVua3NbXSkNCit7DQorDQorICAgIHNpemVfdCAgICBlbGVtZW50X3NpemU7ICAgLyogY2h1bmtzaXplIG9mIGVhY2ggZWxlbWVudCwgaWYgYWxsIHNhbWUgKi8NCisgICAgc2l6ZV90ICAgIGNvbnRlbnRzX3NpemU7ICAvKiB0b3RhbCBzaXplIG9mIGVsZW1lbnRzICovDQorICAgIHNpemVfdCAgICBhcnJheV9zaXplOyAgICAgLyogcmVxdWVzdCBzaXplIG9mIHBvaW50ZXIgYXJyYXkgKi8NCisgICAgdm9pZCAgICAgKm1lbTsgICAgICAgICAgICAvKiBtYWxsb2NlZCBhZ2dyZWdhdGUgc3BhY2UgKi8NCisgICAgbWNodW5rcHRyIHA7ICAgICAgICAgICAgICAvKiBjb3JyZXNwb25kaW5nIGNodW5rICovDQorICAgIHNpemVfdCAgICByZW1haW5kZXJfc2l6ZTsgLyogcmVtYWluaW5nIGJ5dGVzIHdoaWxlIHNwbGl0dGluZyAqLw0KKyAgICB2b2lkICAgICoqbWFycmF5OyAgICAgICAgIC8qIGVpdGhlciAiY2h1bmtzIiBvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8NCisgICAgbWNodW5rcHRyIGFycmF5X2NodW5rOyAgICAvKiBjaHVuayBmb3IgbWFsbG9jZWQgcHRyIGFycmF5ICovDQorICAgIGZsYWdfdCAgICB3YXNfZW5hYmxlZDsgICAgLyogdG8gZGlzYWJsZSBtbWFwICovDQorICAgIHNpemVfdCAgICBzaXplOw0KKyAgICBzaXplX3QgICAgaTsNCisNCisgICAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7DQorDQorICAgIC8qIGNvbXB1dGUgYXJyYXkgbGVuZ3RoLCBpZiBuZWVkZWQgKi8NCisgICAgaWYgKGNodW5rcyAhPSAwKQ0KKyAgICB7DQorICAgICAgICBpZiAobl9lbGVtZW50cyA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBjaHVua3M7ICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8NCisgICAgICAgIH0NCisNCisgICAgICAgIG1hcnJheSA9IGNodW5rczsNCisgICAgICAgIGFycmF5X3NpemUgPSAwOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgLyogaWYgZW1wdHkgcmVxLCBtdXN0IHN0aWxsIHJldHVybiBjaHVuayByZXByZXNlbnRpbmcgZW1wdHkgYXJyYXkgKi8NCisgICAgICAgIGlmIChuX2VsZW1lbnRzID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuICh2b2lkICoqKWludGVybmFsX21hbGxvYyhtLCAwKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1hcnJheSA9IDA7DQorICAgICAgICBhcnJheV9zaXplID0gcmVxdWVzdDJzaXplKG5fZWxlbWVudHMgKiAoc2l6ZW9mKHZvaWQgKikpKTsNCisgICAgfQ0KKw0KKyAgICAvKiBjb21wdXRlIHRvdGFsIGVsZW1lbnQgc2l6ZSAqLw0KKyAgICBpZiAob3B0cyAmIDB4MSkgICAvKiBhbGwtc2FtZS1zaXplICovDQorICAgIHsNCisgICAgICAgIGVsZW1lbnRfc2l6ZSA9IHJlcXVlc3Qyc2l6ZSgqc2l6ZXMpOw0KKyAgICAgICAgY29udGVudHNfc2l6ZSA9IG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemU7DQorICAgIH0NCisgICAgZWxzZSAgIC8qIGFkZCB1cCBhbGwgdGhlIHNpemVzICovDQorICAgIHsNCisgICAgICAgIGVsZW1lbnRfc2l6ZSA9IDA7DQorICAgICAgICBjb250ZW50c19zaXplID0gMDsNCisNCisgICAgICAgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbnRlbnRzX3NpemUgKz0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBzaXplID0gY29udGVudHNfc2l6ZSArIGFycmF5X3NpemU7DQorDQorICAgIC8qDQorICAgICAgIEFsbG9jYXRlIHRoZSBhZ2dyZWdhdGUgY2h1bmsuICBGaXJzdCBkaXNhYmxlIGRpcmVjdC1tbWFwcGluZyBzbw0KKyAgICAgICBtYWxsb2Mgd29uJ3QgdXNlIGl0LCBzaW5jZSB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byBsYXRlcg0KKyAgICAgICBmcmVlL3JlYWxsb2Mgc3BhY2UgaW50ZXJuYWwgdG8gYSBzZWdyZWdhdGVkIG1tYXAgcmVnaW9uLg0KKyAgICAqLw0KKyAgICB3YXNfZW5hYmxlZCA9IHVzZV9tbWFwKG0pOw0KKyAgICBkaXNhYmxlX21tYXAobSk7DQorICAgIG1lbSA9IGludGVybmFsX21hbGxvYyhtLCBzaXplIC0gQ0hVTktfT1ZFUkhFQUQpOw0KKw0KKyAgICBpZiAod2FzX2VuYWJsZWQpDQorICAgIHsNCisgICAgICAgIGVuYWJsZV9tbWFwKG0pOw0KKyAgICB9DQorDQorICAgIGlmIChtZW0gPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgaWYgKFBSRUFDVElPTihtKSkgeyByZXR1cm4gMDsgfQ0KKw0KKyAgICBwID0gbWVtMmNodW5rKG1lbSk7DQorICAgIHJlbWFpbmRlcl9zaXplID0gY2h1bmtzaXplKHApOw0KKw0KKyAgICBhc3NlcnQoIWlzX21tYXBwZWQocCkpOw0KKw0KKyAgICBpZiAob3B0cyAmIDB4MikgICAgICAgICAvKiBvcHRpb25hbGx5IGNsZWFyIHRoZSBlbGVtZW50cyAqLw0KKyAgICB7DQorICAgICAgICBtZW1zZXQoKHNpemVfdCAqKW1lbSwgMCwgcmVtYWluZGVyX3NpemUgLSBTSVpFX1RfU0laRSAtIGFycmF5X3NpemUpOw0KKyAgICB9DQorDQorICAgIC8qIElmIG5vdCBwcm92aWRlZCwgYWxsb2NhdGUgdGhlIHBvaW50ZXIgYXJyYXkgYXMgZmluYWwgcGFydCBvZiBjaHVuayAqLw0KKyAgICBpZiAobWFycmF5ID09IDApDQorICAgIHsNCisgICAgICAgIHNpemVfdCAgYXJyYXlfY2h1bmtfc2l6ZTsNCisgICAgICAgIGFycmF5X2NodW5rID0gY2h1bmtfcGx1c19vZmZzZXQocCwgY29udGVudHNfc2l6ZSk7DQorICAgICAgICBhcnJheV9jaHVua19zaXplID0gcmVtYWluZGVyX3NpemUgLSBjb250ZW50c19zaXplOw0KKyAgICAgICAgbWFycmF5ID0gKHZvaWQgKiopKGNodW5rMm1lbShhcnJheV9jaHVuaykpOw0KKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBhcnJheV9jaHVuaywgYXJyYXlfY2h1bmtfc2l6ZSk7DQorICAgICAgICByZW1haW5kZXJfc2l6ZSA9IGNvbnRlbnRzX3NpemU7DQorICAgIH0NCisNCisgICAgLyogc3BsaXQgb3V0IGVsZW1lbnRzICovDQorICAgIGZvciAoaSA9IDA7IDsgKytpKQ0KKyAgICB7DQorICAgICAgICBtYXJyYXlbaV0gPSBjaHVuazJtZW0ocCk7DQorDQorICAgICAgICBpZiAoaSAhPSBuX2VsZW1lbnRzIC0gMSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoZWxlbWVudF9zaXplICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzaXplID0gZWxlbWVudF9zaXplOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzaXplID0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgcmVtYWluZGVyX3NpemUgLT0gc2l6ZTsNCisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHNpemUpOw0KKyAgICAgICAgICAgIHAgPSBjaHVua19wbHVzX29mZnNldChwLCBzaXplKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgICAvKiB0aGUgZmluYWwgZWxlbWVudCBhYnNvcmJzIGFueSBvdmVyYWxsb2NhdGlvbiBzbG9wICovDQorICAgICAgICB7DQorICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCByZW1haW5kZXJfc2l6ZSk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgIH0NCisNCisjaWYgREVCVUcNCisNCisgICAgaWYgKG1hcnJheSAhPSBjaHVua3MpDQorICAgIHsNCisgICAgICAgIC8qIGZpbmFsIGVsZW1lbnQgbXVzdCBoYXZlIGV4YWN0bHkgZXhoYXVzdGVkIGNodW5rICovDQorICAgICAgICBpZiAoZWxlbWVudF9zaXplICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IGVsZW1lbnRfc2l6ZSk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSkpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbWVtMmNodW5rKG1hcnJheSkpOw0KKyAgICB9DQorDQorICAgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQ0KKyAgICB7DQorICAgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBtZW0yY2h1bmsobWFycmF5W2ldKSk7DQorICAgIH0NCisNCisjZW5kaWYgLyogREVCVUcgKi8NCisNCisgICAgUE9TVEFDVElPTihtKTsNCisgICAgcmV0dXJuIG1hcnJheTsNCit9DQorDQorLyogVHJ5IHRvIGZyZWUgYWxsIHBvaW50ZXJzIGluIHRoZSBnaXZlbiBhcnJheS4NCisgICBOb3RlOiB0aGlzIGNvdWxkIGJlIG1hZGUgZmFzdGVyLCBieSBkZWxheWluZyBjb25zb2xpZGF0aW9uLA0KKyAgIGF0IHRoZSBwcmljZSBvZiBkaXNhYmxpbmcgc29tZSB1c2VyIGludGVncml0eSBjaGVja3MsIFdlDQorICAgc3RpbGwgb3B0aW1pemUgc29tZSBjb25zb2xpZGF0aW9ucyBieSBjb21iaW5pbmcgYWRqYWNlbnQNCisgICBjaHVua3MgYmVmb3JlIGZyZWVpbmcsIHdoaWNoIHdpbGwgb2NjdXIgb2Z0ZW4gaWYgYWxsb2NhdGVkDQorICAgd2l0aCBpYWxsb2Mgb3IgdGhlIGFycmF5IGlzIHNvcnRlZC4NCisqLw0KK3N0YXRpYyBzaXplX3QgaW50ZXJuYWxfYnVsa19mcmVlKG1zdGF0ZSBtLCB2b2lkICphcnJheVtdLCBzaXplX3QgbmVsZW0pDQorew0KKyAgICBzaXplX3QgdW5mcmVlZCA9IDA7DQorDQorICAgIGlmICghUFJFQUNUSU9OKG0pKQ0KKyAgICB7DQorICAgICAgICB2b2lkICoqYTsNCisgICAgICAgIHZvaWQgKipmZW5jZSA9ICYoYXJyYXlbbmVsZW1dKTsNCisNCisgICAgICAgIGZvciAoYSA9IGFycmF5OyBhICE9IGZlbmNlOyArK2EpDQorICAgICAgICB7DQorICAgICAgICAgICAgdm9pZCAqbWVtID0gKmE7DQorDQorICAgICAgICAgICAgaWYgKG1lbSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsNCisgICAgICAgICAgICAgICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOw0KKyNpZiBGT09URVJTDQorDQorICAgICAgICAgICAgICAgIGlmIChnZXRfbXN0YXRlX2ZvcihwKSAhPSBtKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICArK3VuZnJlZWQ7DQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyNlbmRpZg0KKyAgICAgICAgICAgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBwKTsNCisgICAgICAgICAgICAgICAgKmEgPSAwOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHApICYmIG9rX2ludXNlKHApKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmIgPSBhICsgMTsgIC8qIHRyeSB0byBtZXJnZSB3aXRoIG5leHQgY2h1bmsgKi8NCisgICAgICAgICAgICAgICAgICAgIG1jaHVua3B0ciBuZXh0ID0gbmV4dF9jaHVuayhwKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChiICE9IGZlbmNlICYmICpiID09IGNodW5rMm1lbShuZXh0KSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IGNodW5rc2l6ZShuZXh0KSArIHBzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBuZXdzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAqYiA9IGNodW5rMm1lbShwKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NlX2NodW5rKG0sIHAsIHBzaXplKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoc2hvdWxkX3RyaW0obSwgbS0+dG9wc2l6ZSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgc3lzX3RyaW0obSwgMCk7DQorICAgICAgICB9DQorDQorICAgICAgICBQT1NUQUNUSU9OKG0pOw0KKyAgICB9DQorDQorICAgIHJldHVybiB1bmZyZWVkOw0KK30NCisNCisvKiBUcmF2ZXJzYWwgKi8NCisjaWYgTUFMTE9DX0lOU1BFQ1RfQUxMDQorc3RhdGljIHZvaWQgaW50ZXJuYWxfaW5zcGVjdF9hbGwobXN0YXRlIG0sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCgqaGFuZGxlcikodm9pZCAqc3RhcnQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZW5kLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c2VkX2J5dGVzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2FyZyksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKQ0KK3sNCisgICAgaWYgKGlzX2luaXRpYWxpemVkKG0pKQ0KKyAgICB7DQorICAgICAgICBtY2h1bmtwdHIgdG9wID0gbS0+dG9wOw0KKyAgICAgICAgbXNlZ21lbnRwdHIgczsNCisNCisgICAgICAgIGZvciAocyA9ICZtLT5zZWc7IHMgIT0gMDsgcyA9IHMtPm5leHQpDQorICAgICAgICB7DQorICAgICAgICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsNCisNCisgICAgICAgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIG5leHQgPSBuZXh0X2NodW5rKHEpOw0KKyAgICAgICAgICAgICAgICBzaXplX3Qgc3ogPSBjaHVua3NpemUocSk7DQorICAgICAgICAgICAgICAgIHNpemVfdCB1c2VkOw0KKyAgICAgICAgICAgICAgICB2b2lkICpzdGFydDsNCisNCisgICAgICAgICAgICAgICAgaWYgKGlzX2ludXNlKHEpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB1c2VkID0gc3ogLSBDSFVOS19PVkVSSEVBRDsgLyogbXVzdCBub3QgYmUgbW1hcHBlZCAqLw0KKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBjaHVuazJtZW0ocSk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB1c2VkID0gMDsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChpc19zbWFsbChzeikpICAgICAgIC8qIG9mZnNldCBieSBwb3NzaWJsZSBib29ra2VlcGluZyAqLw0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gKHZvaWQgKikoKGNoYXIgKilxICsgc2l6ZW9mKHN0cnVjdCBtYWxsb2NfY2h1bmspKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9ICh2b2lkICopKChjaGFyICopcSArIHNpemVvZihzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmspKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCAodm9pZCAqKW5leHQpIC8qIHNraXAgaWYgYWxsIHNwYWNlIGlzIGJvb2trZWVwaW5nICovDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIoc3RhcnQsIG5leHQsIHVzZWQsIGFyZyk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgaWYgKHEgPT0gdG9wKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBxID0gbmV4dDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCit9DQorI2VuZGlmIC8qIE1BTExPQ19JTlNQRUNUX0FMTCAqLw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBFeHBvcnRlZCByZWFsbG9jLCBtZW1hbGlnbiwgZXRjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorI2lmICFPTkxZX01TUEFDRVMNCisNCit2b2lkICpkbHJlYWxsb2Modm9pZCAqb2xkbWVtLCBzaXplX3QgYnl0ZXMpDQorew0KKyAgICB2b2lkICptZW0gPSAwOw0KKw0KKyAgICBpZiAob2xkbWVtID09IDApDQorICAgIHsNCisgICAgICAgIG1lbSA9IGRsbWFsbG9jKGJ5dGVzKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkNCisgICAgew0KKyAgICAgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOw0KKyAgICB9DQorDQorI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUw0KKyAgICBlbHNlIGlmIChieXRlcyA9PSAwKQ0KKyAgICB7DQorICAgICAgICBkbGZyZWUob2xkbWVtKTsNCisgICAgfQ0KKw0KKyNlbmRpZiAvKiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgKi8NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOw0KKyAgICAgICAgbWNodW5rcHRyIG9sZHAgPSBtZW0yY2h1bmsob2xkbWVtKTsNCisjaWYgISBGT09URVJTDQorICAgICAgICBtc3RhdGUgbSA9IGdtOw0KKyNlbHNlIC8qIEZPT1RFUlMgKi8NCisgICAgICAgIG1zdGF0ZSBtID0gZ2V0X21zdGF0ZV9mb3Iob2xkcCk7DQorDQorICAgICAgICBpZiAoIW9rX21hZ2ljKG0pKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtLCBvbGRtZW0pOw0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfQ0KKw0KKyNlbmRpZiAvKiBGT09URVJTICovDQorDQorICAgICAgICBpZiAoIVBSRUFDVElPTihtKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtY2h1bmtwdHIgbmV3cCA9IHRyeV9yZWFsbG9jX2NodW5rKG0sIG9sZHAsIG5iLCAxKTsNCisgICAgICAgICAgICBQT1NUQUNUSU9OKG0pOw0KKw0KKyAgICAgICAgICAgIGlmIChuZXdwICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBuZXdwKTsNCisgICAgICAgICAgICAgICAgbWVtID0gY2h1bmsybWVtKG5ld3ApOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtZW0gPSBpbnRlcm5hbF9tYWxsb2MobSwgYnl0ZXMpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAobWVtICE9IDApDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvYyA9IGNodW5rc2l6ZShvbGRwKSAtIG92ZXJoZWFkX2ZvcihvbGRwKTsNCisgICAgICAgICAgICAgICAgICAgIG1lbWNweShtZW0sIG9sZG1lbSwgKG9jIDwgYnl0ZXMpID8gb2MgOiBieXRlcyk7DQorICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbF9mcmVlKG0sIG9sZG1lbSk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1lbTsNCit9DQorDQordm9pZCAqZGxyZWFsbG9jX2luX3BsYWNlKHZvaWQgKm9sZG1lbSwgc2l6ZV90IGJ5dGVzKQ0KK3sNCisgICAgdm9pZCAqbWVtID0gMDsNCisNCisgICAgaWYgKG9sZG1lbSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpDQorICAgICAgICB7DQorICAgICAgICAgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7DQorICAgICAgICAgICAgbWNodW5rcHRyIG9sZHAgPSBtZW0yY2h1bmsob2xkbWVtKTsNCisjaWYgISBGT09URVJTDQorICAgICAgICAgICAgbXN0YXRlIG0gPSBnbTsNCisjZWxzZSAvKiBGT09URVJTICovDQorICAgICAgICAgICAgbXN0YXRlIG0gPSBnZXRfbXN0YXRlX2ZvcihvbGRwKTsNCisNCisgICAgICAgICAgICBpZiAoIW9rX21hZ2ljKG0pKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7DQorICAgICAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgICAgIH0NCisNCisjZW5kaWYgLyogRk9PVEVSUyAqLw0KKw0KKyAgICAgICAgICAgIGlmICghUFJFQUNUSU9OKG0pKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIG5ld3AgPSB0cnlfcmVhbGxvY19jaHVuayhtLCBvbGRwLCBuYiwgMCk7DQorICAgICAgICAgICAgICAgIFBPU1RBQ1RJT04obSk7DQorDQorICAgICAgICAgICAgICAgIGlmIChuZXdwID09IG9sZHApDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG5ld3ApOw0KKyAgICAgICAgICAgICAgICAgICAgbWVtID0gb2xkbWVtOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiBtZW07DQorfQ0KKw0KK3ZvaWQgKmRsbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKQ0KK3sNCisgICAgaWYgKGFsaWdubWVudCA8PSBNQUxMT0NfQUxJR05NRU5UKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZGxtYWxsb2MoYnl0ZXMpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBpbnRlcm5hbF9tZW1hbGlnbihnbSwgYWxpZ25tZW50LCBieXRlcyk7DQorfQ0KKw0KK2ludCBkbHBvc2l4X21lbWFsaWduKHZvaWQgKipwcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKQ0KK3sNCisgICAgdm9pZCAqbWVtID0gMDsNCisNCisgICAgaWYgKGFsaWdubWVudCA9PSBNQUxMT0NfQUxJR05NRU5UKQ0KKyAgICB7DQorICAgICAgICBtZW0gPSBkbG1hbGxvYyhieXRlcyk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzaXplX3QgZCA9IGFsaWdubWVudCAvIHNpemVvZih2b2lkICopOw0KKyAgICAgICAgc2l6ZV90IHIgPSBhbGlnbm1lbnQgJSBzaXplb2Yodm9pZCAqKTsNCisNCisgICAgICAgIGlmIChyICE9IDAgfHwgZCA9PSAwIHx8IChkICYgKGQgLSBTSVpFX1RfT05FKSkgIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gRUlOVkFMOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSBpZiAoYnl0ZXMgPD0gTUFYX1JFUVVFU1QgLSBhbGlnbm1lbnQpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKGFsaWdubWVudCA8ICBNSU5fQ0hVTktfU0laRSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGFsaWdubWVudCA9IE1JTl9DSFVOS19TSVpFOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBtZW0gPSBpbnRlcm5hbF9tZW1hbGlnbihnbSwgYWxpZ25tZW50LCBieXRlcyk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKG1lbSA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gRU5PTUVNOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgKnBwID0gbWVtOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCit9DQorDQordm9pZCAqZGx2YWxsb2Moc2l6ZV90IGJ5dGVzKQ0KK3sNCisgICAgc2l6ZV90IHBhZ2VzejsNCisgICAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7DQorICAgIHBhZ2VzeiA9IG1wYXJhbXMucGFnZV9zaXplOw0KKyAgICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIGJ5dGVzKTsNCit9DQorDQordm9pZCAqZGxwdmFsbG9jKHNpemVfdCBieXRlcykNCit7DQorICAgIHNpemVfdCBwYWdlc3o7DQorICAgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOw0KKyAgICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsNCisgICAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCAoYnl0ZXMgKyBwYWdlc3ogLSBTSVpFX1RfT05FKSAmIH4ocGFnZXN6IC0gU0laRV9UX09ORSkpOw0KK30NCisNCit2b2lkICoqZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNodW5rc1tdKQ0KK3sNCisgICAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovDQorICAgIHJldHVybiBpYWxsb2MoZ20sIG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsNCit9DQorDQordm9pZCAqKmRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNodW5rc1tdKQ0KK3sNCisgICAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7DQorfQ0KKw0KK3NpemVfdCBkbGJ1bGtfZnJlZSh2b2lkICphcnJheVtdLCBzaXplX3QgbmVsZW0pDQorew0KKyAgICByZXR1cm4gaW50ZXJuYWxfYnVsa19mcmVlKGdtLCBhcnJheSwgbmVsZW0pOw0KK30NCisNCisjaWYgTUFMTE9DX0lOU1BFQ1RfQUxMDQordm9pZCBkbG1hbGxvY19pbnNwZWN0X2FsbCh2b2lkKCpoYW5kbGVyKSh2b2lkICpzdGFydCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmVuZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c2VkX2J5dGVzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYXJnKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykNCit7DQorICAgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOw0KKw0KKyAgICBpZiAoIVBSRUFDVElPTihnbSkpDQorICAgIHsNCisgICAgICAgIGludGVybmFsX2luc3BlY3RfYWxsKGdtLCBoYW5kbGVyLCBhcmcpOw0KKyAgICAgICAgUE9TVEFDVElPTihnbSk7DQorICAgIH0NCit9DQorI2VuZGlmIC8qIE1BTExPQ19JTlNQRUNUX0FMTCAqLw0KKw0KK2ludCBkbG1hbGxvY190cmltKHNpemVfdCBwYWQpDQorew0KKyAgICBpbnQgcmVzdWx0ID0gMDsNCisgICAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7DQorDQorICAgIGlmICghUFJFQUNUSU9OKGdtKSkNCisgICAgew0KKyAgICAgICAgcmVzdWx0ID0gc3lzX3RyaW0oZ20sIHBhZCk7DQorICAgICAgICBQT1NUQUNUSU9OKGdtKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcmVzdWx0Ow0KK30NCisNCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KHZvaWQpDQorew0KKyAgICByZXR1cm4gZ20tPmZvb3RwcmludDsNCit9DQorDQorc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCkNCit7DQorICAgIHJldHVybiBnbS0+bWF4X2Zvb3RwcmludDsNCit9DQorDQorc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludF9saW1pdCh2b2lkKQ0KK3sNCisgICAgc2l6ZV90IG1hZiA9IGdtLT5mb290cHJpbnRfbGltaXQ7DQorICAgIHJldHVybiBtYWYgPT0gMCA/IE1BWF9TSVpFX1QgOiBtYWY7DQorfQ0KKw0KK3NpemVfdCBkbG1hbGxvY19zZXRfZm9vdHByaW50X2xpbWl0KHNpemVfdCBieXRlcykNCit7DQorICAgIHNpemVfdCByZXN1bHQ7ICAvKiBpbnZlcnQgc2Vuc2Ugb2YgMCAqLw0KKw0KKyAgICBpZiAoYnl0ZXMgPT0gMCkNCisgICAgew0KKyAgICAgICAgcmVzdWx0ID0gZ3JhbnVsYXJpdHlfYWxpZ24oMSk7ICAgIC8qIFVzZSBtaW5pbWFsIHNpemUgKi8NCisgICAgfQ0KKw0KKyAgICBpZiAoYnl0ZXMgPT0gTUFYX1NJWkVfVCkNCisgICAgew0KKyAgICAgICAgcmVzdWx0ID0gMDsgICAgLyogZGlzYWJsZSAqLw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmVzdWx0ID0gZ3JhbnVsYXJpdHlfYWxpZ24oYnl0ZXMpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBnbS0+Zm9vdHByaW50X2xpbWl0ID0gcmVzdWx0Ow0KK30NCisNCisjaWYgIU5PX01BTExJTkZPDQorc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCkNCit7DQorICAgIHJldHVybiBpbnRlcm5hbF9tYWxsaW5mbyhnbSk7DQorfQ0KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLw0KKw0KKyNpZiAhTk9fTUFMTE9DX1NUQVRTDQordm9pZCBkbG1hbGxvY19zdGF0cygpDQorew0KKyAgICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMoZ20pOw0KK30NCisjZW5kaWYgLyogTk9fTUFMTE9DX1NUQVRTICovDQorDQoraW50IGRsbWFsbG9wdChpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpDQorew0KKyAgICByZXR1cm4gY2hhbmdlX21wYXJhbShwYXJhbV9udW1iZXIsIHZhbHVlKTsNCit9DQorDQorc2l6ZV90IGRsbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQgKm1lbSkNCit7DQorICAgIGlmIChtZW0gIT0gMCkNCisgICAgew0KKyAgICAgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsNCisNCisgICAgICAgIGlmIChpc19pbnVzZShwKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gb3ZlcmhlYWRfZm9yKHApOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHVzZXIgbXNwYWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorI2lmIE1TUEFDRVMNCisNCitzdGF0aWMgbXN0YXRlIGluaXRfdXNlcl9tc3RhdGUoY2hhciAqdGJhc2UsIHNpemVfdCB0c2l6ZSkNCit7DQorICAgIHNpemVfdCBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7DQorICAgIG1jaHVua3B0ciBtbjsNCisgICAgbWNodW5rcHRyIG1zcCA9IGFsaWduX2FzX2NodW5rKHRiYXNlKTsNCisgICAgbXN0YXRlIG0gPSAobXN0YXRlKShjaHVuazJtZW0obXNwKSk7DQorICAgIG1lbXNldChtLCAwLCBtc2l6ZSk7DQorICAgICh2b2lkKUlOSVRJQUxfTE9DSygmbS0+bXV0ZXgpOw0KKyAgICBtc3AtPmhlYWQgPSAobXNpemUgfCBJTlVTRV9CSVRTKTsNCisgICAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7DQorICAgIG0tPnNlZy5zaXplID0gbS0+Zm9vdHByaW50ID0gbS0+bWF4X2Zvb3RwcmludCA9IHRzaXplOw0KKyAgICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7DQorICAgIG0tPnJlbGVhc2VfY2hlY2tzID0gTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURTsNCisgICAgbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsNCisgICAgbS0+ZXh0cCA9IDA7DQorICAgIG0tPmV4dHMgPSAwOw0KKyAgICBkaXNhYmxlX2NvbnRpZ3VvdXMobSk7DQorICAgIGluaXRfYmlucyhtKTsNCisgICAgbW4gPSBuZXh0X2NodW5rKG1lbTJjaHVuayhtKSk7DQorICAgIGluaXRfdG9wKG0sIG1uLCAoc2l6ZV90KSgodGJhc2UgKyB0c2l6ZSkgLSAoY2hhciAqKW1uKSAtIFRPUF9GT09UX1NJWkUpOw0KKyAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsNCisgICAgcmV0dXJuIG07DQorfQ0KKw0KK21zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCkNCit7DQorICAgIG1zdGF0ZSBtID0gMDsNCisgICAgc2l6ZV90IG1zaXplOw0KKyAgICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsNCisgICAgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOw0KKw0KKyAgICBpZiAoY2FwYWNpdHkgPCAoc2l6ZV90KSAtIChtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpDQorICAgIHsNCisgICAgICAgIHNpemVfdCBycyA9ICgoY2FwYWNpdHkgPT0gMCkgPyBtcGFyYW1zLmdyYW51bGFyaXR5IDoNCisgICAgICAgICAgICAgICAgICAgICAoY2FwYWNpdHkgKyBUT1BfRk9PVF9TSVpFICsgbXNpemUpKTsNCisgICAgICAgIHNpemVfdCB0c2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKHJzKTsNCisgICAgICAgIGNoYXIgKnRiYXNlID0gKGNoYXIgKikoQ0FMTF9NTUFQKHRzaXplKSk7DQorDQorICAgICAgICBpZiAodGJhc2UgIT0gQ01GQUlMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKHRiYXNlLCB0c2l6ZSk7DQorICAgICAgICAgICAgbS0+c2VnLnNmbGFncyA9IFVTRV9NTUFQX0JJVDsNCisgICAgICAgICAgICBzZXRfbG9jayhtLCBsb2NrZWQpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAobXNwYWNlKW07DQorfQ0KKw0KK21zcGFjZSBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSh2b2lkICpiYXNlLCBzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpDQorew0KKyAgICBtc3RhdGUgbSA9IDA7DQorICAgIHNpemVfdCBtc2l6ZTsNCisgICAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7DQorICAgIG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsNCisNCisgICAgaWYgKGNhcGFjaXR5ID4gbXNpemUgKyBUT1BfRk9PVF9TSVpFICYmDQorICAgICAgICBjYXBhY2l0eSA8IChzaXplX3QpIC0gKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkNCisgICAgew0KKyAgICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUoKGNoYXIgKiliYXNlLCBjYXBhY2l0eSk7DQorICAgICAgICBtLT5zZWcuc2ZsYWdzID0gRVhURVJOX0JJVDsNCisgICAgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIChtc3BhY2UpbTsNCit9DQorDQoraW50IG1zcGFjZV90cmFja19sYXJnZV9jaHVua3MobXNwYWNlIG1zcCwgaW50IGVuYWJsZSkNCit7DQorICAgIGludCByZXQgPSAwOw0KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsNCisNCisgICAgaWYgKCFQUkVBQ1RJT04obXMpKQ0KKyAgICB7DQorICAgICAgICBpZiAoIXVzZV9tbWFwKG1zKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXQgPSAxOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKCFlbmFibGUpDQorICAgICAgICB7DQorICAgICAgICAgICAgZW5hYmxlX21tYXAobXMpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRpc2FibGVfbW1hcChtcyk7DQorICAgICAgICB9DQorDQorICAgICAgICBQT1NUQUNUSU9OKG1zKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcmV0Ow0KK30NCisNCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCkNCit7DQorICAgIHNpemVfdCBmcmVlZCA9IDA7DQorICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOw0KKw0KKyAgICBpZiAob2tfbWFnaWMobXMpKQ0KKyAgICB7DQorICAgICAgICBtc2VnbWVudHB0ciBzcCA9ICZtcy0+c2VnOw0KKyAgICAgICAgKHZvaWQpREVTVFJPWV9MT0NLKCZtcy0+bXV0ZXgpOyAvKiBkZXN0cm95IGJlZm9yZSB1bm1hcHBlZCAqLw0KKw0KKyAgICAgICAgd2hpbGUgKHNwICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgY2hhciAqYmFzZSA9IHNwLT5iYXNlOw0KKyAgICAgICAgICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7DQorICAgICAgICAgICAgZmxhZ190IGZsYWcgPSBzcC0+c2ZsYWdzOw0KKyAgICAgICAgICAgICh2b2lkKWJhc2U7IC8qIHBsYWNhdGUgcGVvcGxlIGNvbXBpbGluZyAtV3VudXNlZC12YXJpYWJsZSAqLw0KKyAgICAgICAgICAgIHNwID0gc3AtPm5leHQ7DQorDQorICAgICAgICAgICAgaWYgKChmbGFnICYgVVNFX01NQVBfQklUKSAmJiAhKGZsYWcgJiBFWFRFUk5fQklUKSAmJg0KKyAgICAgICAgICAgICAgICBDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZnJlZWQgKz0gc2l6ZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsIG1zKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gZnJlZWQ7DQorfQ0KKw0KKy8qDQorICBtc3BhY2UgdmVyc2lvbnMgb2Ygcm91dGluZXMgYXJlIG5lYXItY2xvbmVzIG9mIHRoZSBnbG9iYWwNCisgIHZlcnNpb25zLiBUaGlzIGlzIG5vdCBzbyBuaWNlIGJ1dCBiZXR0ZXIgdGhhbiB0aGUgYWx0ZXJuYXRpdmVzLg0KKyovDQorDQordm9pZCAqbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpDQorew0KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsNCisNCisgICAgaWYgKCFva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgaWYgKCFQUkVBQ1RJT04obXMpKQ0KKyAgICB7DQorICAgICAgICB2b2lkICptZW07DQorICAgICAgICBzaXplX3QgbmI7DQorDQorICAgICAgICBpZiAoYnl0ZXMgPD0gTUFYX1NNQUxMX1JFUVVFU1QpDQorICAgICAgICB7DQorICAgICAgICAgICAgYmluZGV4X3QgaWR4Ow0KKyAgICAgICAgICAgIGJpbm1hcF90IHNtYWxsYml0czsNCisgICAgICAgICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKSA/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOw0KKyAgICAgICAgICAgIGlkeCA9IHNtYWxsX2luZGV4KG5iKTsNCisgICAgICAgICAgICBzbWFsbGJpdHMgPSBtcy0+c21hbGxtYXAgPj4gaWR4Ow0KKw0KKyAgICAgICAgICAgIGlmICgoc21hbGxiaXRzICYgMHgzVSkgIT0gMCkgICAvKiBSZW1haW5kZXJsZXNzIGZpdCB0byBhIHNtYWxsYmluLiAqLw0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIGIsIHA7DQorICAgICAgICAgICAgICAgIGlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8NCisgICAgICAgICAgICAgICAgYiA9IHNtYWxsYmluX2F0KG1zLCBpZHgpOw0KKyAgICAgICAgICAgICAgICBwID0gYi0+ZmQ7DQorICAgICAgICAgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsNCisgICAgICAgICAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKG1zLCBiLCBwLCBpZHgpOw0KKyAgICAgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsNCisgICAgICAgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOw0KKyAgICAgICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7DQorICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgZWxzZSBpZiAobmIgPiBtcy0+ZHZzaXplKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYgKHNtYWxsYml0cyAhPSAwKSAgIC8qIFVzZSBjaHVuayBpbiBuZXh0IG5vbmVtcHR5IHNtYWxsYmluICovDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1jaHVua3B0ciBiLCBwLCByOw0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgYmluZGV4X3QgaTsNCisgICAgICAgICAgICAgICAgICAgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxsYml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7DQorICAgICAgICAgICAgICAgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7DQorICAgICAgICAgICAgICAgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOw0KKyAgICAgICAgICAgICAgICAgICAgYiA9IHNtYWxsYmluX2F0KG1zLCBpKTsNCisgICAgICAgICAgICAgICAgICAgIHAgPSBiLT5mZDsNCisgICAgICAgICAgICAgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7DQorICAgICAgICAgICAgICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXMsIGIsIHAsIGkpOw0KKyAgICAgICAgICAgICAgICAgICAgcnNpemUgPSBzbWFsbF9pbmRleDJzaXplKGkpIC0gbmI7DQorDQorICAgICAgICAgICAgICAgICAgICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKFNJWkVfVF9TSVpFICE9IDQgJiYgcnNpemUgPCBNSU5fQ0hVTktfU0laRSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlX2R2KG1zLCByLCByc2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7DQorICAgICAgICAgICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7DQorICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgZWxzZSBpZiAobXMtPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19zbWFsbChtcywgbmIpKSAhPSAwKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7DQorICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBuYiA9IE1BWF9TSVpFX1Q7ICAgIC8qIFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsNCisNCisgICAgICAgICAgICBpZiAobXMtPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19sYXJnZShtcywgbmIpKSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOw0KKyAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG5iIDw9IG1zLT5kdnNpemUpDQorICAgICAgICB7DQorICAgICAgICAgICAgc2l6ZV90IHJzaXplID0gbXMtPmR2c2l6ZSAtIG5iOw0KKyAgICAgICAgICAgIG1jaHVua3B0ciBwID0gbXMtPmR2Ow0KKw0KKyAgICAgICAgICAgIGlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgICAvKiBzcGxpdCBkdiAqLw0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIHIgPSBtcy0+ZHYgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7DQorICAgICAgICAgICAgICAgIG1zLT5kdnNpemUgPSByc2l6ZTsNCisgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsNCisgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlICAgLyogZXhoYXVzdCBkdiAqLw0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2l6ZV90IGR2cyA9IG1zLT5kdnNpemU7DQorICAgICAgICAgICAgICAgIG1zLT5kdnNpemUgPSAwOw0KKyAgICAgICAgICAgICAgICBtcy0+ZHYgPSAwOw0KKyAgICAgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgZHZzKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOw0KKyAgICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsNCisgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICB9DQorDQorICAgICAgICBlbHNlIGlmIChuYiA8IG1zLT50b3BzaXplKSAgIC8qIFNwbGl0IHRvcCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT50b3BzaXplIC09IG5iOw0KKyAgICAgICAgICAgIG1jaHVua3B0ciBwID0gbXMtPnRvcDsNCisgICAgICAgICAgICBtY2h1bmtwdHIgciA9IG1zLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7DQorICAgICAgICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsNCisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7DQorICAgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOw0KKyAgICAgICAgICAgIGNoZWNrX3RvcF9jaHVuayhtcywgbXMtPnRvcCk7DQorICAgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOw0KKyAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1lbSA9IHN5c19hbGxvYyhtcywgbmIpOw0KKw0KK3Bvc3RhY3Rpb246DQorICAgICAgICBQT1NUQUNUSU9OKG1zKTsNCisgICAgICAgIHJldHVybiBtZW07DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCAqbWVtKQ0KK3sNCisgICAgaWYgKG1lbSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsNCisjaWYgRk9PVEVSUw0KKyAgICAgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7DQorICAgICAgICAodm9pZCltc3A7IC8qIHBsYWNhdGUgcGVvcGxlIGNvbXBpbGluZyAtV3VudXNlZCAqLw0KKyNlbHNlIC8qIEZPT1RFUlMgKi8NCisgICAgICAgIG1zdGF0ZSBmbSA9IChtc3RhdGUpbXNwOw0KKyNlbmRpZiAvKiBGT09URVJTICovDQorDQorICAgICAgICBpZiAoIW9rX21hZ2ljKGZtKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOw0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmICghUFJFQUNUSU9OKGZtKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjaGVja19pbnVzZV9jaHVuayhmbSwgcCk7DQorDQorICAgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcCkgJiYgb2tfaW51c2UocCkpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOw0KKyAgICAgICAgICAgICAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKCFwaW51c2UocCkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChpc19tbWFwcGVkKHApKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ0FMTF9NVU5NQVAoKGNoYXIgKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0tPmZvb3RwcmludCAtPSBwc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICBwID0gcHJldjsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwcmV2KSkpICAgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwICE9IGZtLT5kdikNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBwLCBwcmV2c2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKG5leHQtPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSBJTlVTRV9CSVRTKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcmFjdGlvbjsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoIWNpbnVzZShuZXh0KSkgICAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLw0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09IGZtLT50b3ApDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdHNpemUgPSBmbS0+dG9wc2l6ZSArPSBwc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0tPnRvcCA9IHA7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0tPmR2ID0gMDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRfdHJpbShmbSwgdHNpemUpKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfdHJpbShmbSwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09IGZtLT5kdikNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkc2l6ZSA9IGZtLT5kdnNpemUgKz0gcHNpemU7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtLT5kdiA9IHA7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2l6ZSArPSBuc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBuZXh0LCBuc2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IHBzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChpc19zbWFsbChwc2l6ZSkpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0X3NtYWxsX2NodW5rKGZtLCBwLCBwc2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgdGNodW5rcHRyIHRwID0gKHRjaHVua3B0cilwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydF9sYXJnZV9jaHVuayhmbSwgdHAsIHBzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1mbS0+cmVsZWFzZV9jaGVja3MgPT0gMCkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKGZtKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorDQorZXJyb3JhY3Rpb246DQorICAgICAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsNCitwb3N0YWN0aW9uOg0KKyAgICAgICAgICAgIFBPU1RBQ1RJT04oZm0pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgKm1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpDQorew0KKyAgICB2b2lkICptZW07DQorICAgIHNpemVfdCByZXEgPSAwOw0KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsNCisNCisgICAgaWYgKCFva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgaWYgKG5fZWxlbWVudHMgIT0gMCkNCisgICAgew0KKyAgICAgICAgcmVxID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsNCisNCisgICAgICAgIGlmICgoKG5fZWxlbWVudHMgfCBlbGVtX3NpemUpICYgfihzaXplX3QpMHhmZmZmKSAmJg0KKyAgICAgICAgICAgIChyZXEgLyBuX2VsZW1lbnRzICE9IGVsZW1fc2l6ZSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmVxID0gTUFYX1NJWkVfVDsgICAgLyogZm9yY2UgZG93bnN0cmVhbSBmYWlsdXJlIG9uIG92ZXJmbG93ICovDQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG1zLCByZXEpOw0KKw0KKyAgICBpZiAobWVtICE9IDAgJiYgY2FsbG9jX211c3RfY2xlYXIobWVtMmNodW5rKG1lbSkpKQ0KKyAgICB7DQorICAgICAgICBtZW1zZXQobWVtLCAwLCByZXEpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBtZW07DQorfQ0KKw0KK3ZvaWQgKm1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQgKm9sZG1lbSwgc2l6ZV90IGJ5dGVzKQ0KK3sNCisgICAgdm9pZCAqbWVtID0gMDsNCisNCisgICAgaWYgKG9sZG1lbSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBtZW0gPSBtc3BhY2VfbWFsbG9jKG1zcCwgYnl0ZXMpOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQ0KKyAgICB7DQorICAgICAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047DQorICAgIH0NCisNCisjaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTDQorICAgIGVsc2UgaWYgKGJ5dGVzID09IDApDQorICAgIHsNCisgICAgICAgIG1zcGFjZV9mcmVlKG1zcCwgb2xkbWVtKTsNCisgICAgfQ0KKw0KKyNlbmRpZiAvKiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgKi8NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOw0KKyAgICAgICAgbWNodW5rcHRyIG9sZHAgPSBtZW0yY2h1bmsob2xkbWVtKTsNCisjaWYgISBGT09URVJTDQorICAgICAgICBtc3RhdGUgbSA9IChtc3RhdGUpbXNwOw0KKyNlbHNlIC8qIEZPT1RFUlMgKi8NCisgICAgICAgIG1zdGF0ZSBtID0gZ2V0X21zdGF0ZV9mb3Iob2xkcCk7DQorDQorICAgICAgICBpZiAoIW9rX21hZ2ljKG0pKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtLCBvbGRtZW0pOw0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfQ0KKw0KKyNlbmRpZiAvKiBGT09URVJTICovDQorDQorICAgICAgICBpZiAoIVBSRUFDVElPTihtKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtY2h1bmtwdHIgbmV3cCA9IHRyeV9yZWFsbG9jX2NodW5rKG0sIG9sZHAsIG5iLCAxKTsNCisgICAgICAgICAgICBQT1NUQUNUSU9OKG0pOw0KKw0KKyAgICAgICAgICAgIGlmIChuZXdwICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBuZXdwKTsNCisgICAgICAgICAgICAgICAgbWVtID0gY2h1bmsybWVtKG5ld3ApOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtZW0gPSBtc3BhY2VfbWFsbG9jKG0sIGJ5dGVzKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKG1lbSAhPSAwKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2MgPSBjaHVua3NpemUob2xkcCkgLSBvdmVyaGVhZF9mb3Iob2xkcCk7DQorICAgICAgICAgICAgICAgICAgICBtZW1jcHkobWVtLCBvbGRtZW0sIChvYyA8IGJ5dGVzKSA/IG9jIDogYnl0ZXMpOw0KKyAgICAgICAgICAgICAgICAgICAgbXNwYWNlX2ZyZWUobSwgb2xkbWVtKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbWVtOw0KK30NCisNCit2b2lkICptc3BhY2VfcmVhbGxvY19pbl9wbGFjZShtc3BhY2UgbXNwLCB2b2lkICpvbGRtZW0sIHNpemVfdCBieXRlcykNCit7DQorICAgIHZvaWQgKm1lbSA9IDA7DQorDQorICAgIGlmIChvbGRtZW0gIT0gMCkNCisgICAgew0KKyAgICAgICAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOw0KKyAgICAgICAgICAgIG1jaHVua3B0ciBvbGRwID0gbWVtMmNodW5rKG9sZG1lbSk7DQorI2lmICEgRk9PVEVSUw0KKyAgICAgICAgICAgIG1zdGF0ZSBtID0gKG1zdGF0ZSltc3A7DQorI2Vsc2UgLyogRk9PVEVSUyAqLw0KKyAgICAgICAgICAgIG1zdGF0ZSBtID0gZ2V0X21zdGF0ZV9mb3Iob2xkcCk7DQorICAgICAgICAgICAgKHZvaWQpbXNwOyAvKiBwbGFjYXRlIHBlb3BsZSBjb21waWxpbmcgLVd1bnVzZWQgKi8NCisNCisgICAgICAgICAgICBpZiAoIW9rX21hZ2ljKG0pKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7DQorICAgICAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgICAgIH0NCisNCisjZW5kaWYgLyogRk9PVEVSUyAqLw0KKw0KKyAgICAgICAgICAgIGlmICghUFJFQUNUSU9OKG0pKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIG5ld3AgPSB0cnlfcmVhbGxvY19jaHVuayhtLCBvbGRwLCBuYiwgMCk7DQorICAgICAgICAgICAgICAgIFBPU1RBQ1RJT04obSk7DQorDQorICAgICAgICAgICAgICAgIGlmIChuZXdwID09IG9sZHApDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG5ld3ApOw0KKyAgICAgICAgICAgICAgICAgICAgbWVtID0gb2xkbWVtOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiBtZW07DQorfQ0KKw0KK3ZvaWQgKm1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpDQorew0KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsNCisNCisgICAgaWYgKCFva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgaWYgKGFsaWdubWVudCA8PSBNQUxMT0NfQUxJR05NRU5UKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gbXNwYWNlX21hbGxvYyhtc3AsIGJ5dGVzKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gaW50ZXJuYWxfbWVtYWxpZ24obXMsIGFsaWdubWVudCwgYnl0ZXMpOw0KK30NCisNCit2b2lkICoqbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLCB2b2lkICpjaHVua3NbXSkNCit7DQorICAgIHNpemVfdCBzeiA9IGVsZW1fc2l6ZTsgLyogc2VydmVzIGFzIDEtZWxlbWVudCBhcnJheSAqLw0KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsNCisNCisgICAgaWYgKCFva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGlhbGxvYyhtcywgbl9lbGVtZW50cywgJnN6LCAzLCBjaHVua3MpOw0KK30NCisNCit2b2lkICoqbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemVzW10sIHZvaWQgKmNodW5rc1tdKQ0KK3sNCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7DQorDQorICAgIGlmICghb2tfbWFnaWMobXMpKQ0KKyAgICB7DQorICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsIG1zKTsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOw0KK30NCisNCitzaXplX3QgbXNwYWNlX2J1bGtfZnJlZShtc3BhY2UgbXNwLCB2b2lkICphcnJheVtdLCBzaXplX3QgbmVsZW0pDQorew0KKyAgICByZXR1cm4gaW50ZXJuYWxfYnVsa19mcmVlKChtc3RhdGUpbXNwLCBhcnJheSwgbmVsZW0pOw0KK30NCisNCisjaWYgTUFMTE9DX0lOU1BFQ1RfQUxMDQordm9pZCBtc3BhY2VfaW5zcGVjdF9hbGwobXNwYWNlIG1zcCwNCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKCpoYW5kbGVyKSh2b2lkICpzdGFydCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICplbmQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzZWRfYnl0ZXMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYXJnKSwNCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpDQorew0KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsNCisNCisgICAgaWYgKG9rX21hZ2ljKG1zKSkNCisgICAgew0KKyAgICAgICAgaWYgKCFQUkVBQ1RJT04obXMpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGludGVybmFsX2luc3BlY3RfYWxsKG1zLCBoYW5kbGVyLCBhcmcpOw0KKyAgICAgICAgICAgIFBPU1RBQ1RJT04obXMpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLCBtcyk7DQorICAgIH0NCit9DQorI2VuZGlmIC8qIE1BTExPQ19JTlNQRUNUX0FMTCAqLw0KKw0KK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKQ0KK3sNCisgICAgaW50IHJlc3VsdCA9IDA7DQorICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOw0KKw0KKyAgICBpZiAob2tfbWFnaWMobXMpKQ0KKyAgICB7DQorICAgICAgICBpZiAoIVBSRUFDVElPTihtcykpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmVzdWx0ID0gc3lzX3RyaW0obXMsIHBhZCk7DQorICAgICAgICAgICAgUE9TVEFDVElPTihtcyk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsIG1zKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcmVzdWx0Ow0KK30NCisNCisjaWYgIU5PX01BTExPQ19TVEFUUw0KK3ZvaWQgbXNwYWNlX21hbGxvY19zdGF0cyhtc3BhY2UgbXNwKQ0KK3sNCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7DQorDQorICAgIGlmIChva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIGludGVybmFsX21hbGxvY19zdGF0cyhtcyk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsIG1zKTsNCisgICAgfQ0KK30NCisjZW5kaWYgLyogTk9fTUFMTE9DX1NUQVRTICovDQorDQorc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCkNCit7DQorICAgIHNpemVfdCByZXN1bHQgPSAwOw0KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsNCisNCisgICAgaWYgKG9rX21hZ2ljKG1zKSkNCisgICAgew0KKyAgICAgICAgcmVzdWx0ID0gbXMtPmZvb3RwcmludDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICB9DQorDQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KK3NpemVfdCBtc3BhY2VfbWF4X2Zvb3RwcmludChtc3BhY2UgbXNwKQ0KK3sNCisgICAgc2l6ZV90IHJlc3VsdCA9IDA7DQorICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOw0KKw0KKyAgICBpZiAob2tfbWFnaWMobXMpKQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBtcy0+bWF4X2Zvb3RwcmludDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICB9DQorDQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KK3NpemVfdCBtc3BhY2VfZm9vdHByaW50X2xpbWl0KG1zcGFjZSBtc3ApDQorew0KKyAgICBzaXplX3QgcmVzdWx0ID0gMDsNCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7DQorDQorICAgIGlmIChva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIHNpemVfdCBtYWYgPSBtcy0+Zm9vdHByaW50X2xpbWl0Ow0KKyAgICAgICAgcmVzdWx0ID0gKG1hZiA9PSAwKSA/IE1BWF9TSVpFX1QgOiBtYWY7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsIG1zKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcmVzdWx0Ow0KK30NCisNCitzaXplX3QgbXNwYWNlX3NldF9mb290cHJpbnRfbGltaXQobXNwYWNlIG1zcCwgc2l6ZV90IGJ5dGVzKQ0KK3sNCisgICAgc2l6ZV90IHJlc3VsdCA9IDA7DQorICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOw0KKw0KKyAgICBpZiAob2tfbWFnaWMobXMpKQ0KKyAgICB7DQorICAgICAgICBpZiAoYnl0ZXMgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXN1bHQgPSBncmFudWxhcml0eV9hbGlnbigxKTsgICAgLyogVXNlIG1pbmltYWwgc2l6ZSAqLw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGJ5dGVzID09IE1BWF9TSVpFX1QpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmVzdWx0ID0gMDsgICAgLyogZGlzYWJsZSAqLw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJlc3VsdCA9IGdyYW51bGFyaXR5X2FsaWduKGJ5dGVzKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1zLT5mb290cHJpbnRfbGltaXQgPSByZXN1bHQ7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsIG1zKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcmVzdWx0Ow0KK30NCisNCisjaWYgIU5PX01BTExJTkZPDQorc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKQ0KK3sNCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7DQorDQorICAgIGlmICghb2tfbWFnaWMobXMpKQ0KKyAgICB7DQorICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsIG1zKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gaW50ZXJuYWxfbWFsbGluZm8obXMpOw0KK30NCisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8NCisNCitzaXplX3QgbXNwYWNlX3VzYWJsZV9zaXplKGNvbnN0IHZvaWQgKm1lbSkNCit7DQorICAgIGlmIChtZW0gIT0gMCkNCisgICAgew0KKyAgICAgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsNCisNCisgICAgICAgIGlmIChpc19pbnVzZShwKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gb3ZlcmhlYWRfZm9yKHApOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCitpbnQgbXNwYWNlX21hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKQ0KK3sNCisgICAgcmV0dXJuIGNoYW5nZV9tcGFyYW0ocGFyYW1fbnVtYmVyLCB2YWx1ZSk7DQorfQ0KKw0KKyNlbmRpZiAvKiBNU1BBQ0VTICovDQorDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWx0ZXJuYXRpdmUgTU9SRUNPUkUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKg0KKyAgR3VpZGVsaW5lcyBmb3IgY3JlYXRpbmcgYSBjdXN0b20gdmVyc2lvbiBvZiBNT1JFQ09SRToNCisNCisgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIE1PUkVDT1JFIHNob3VsZCBhbGxvY2F0ZSBpbiBtdWx0aXBsZXMgb2YgcGFnZXNpemUuDQorICAqIE1PUkVDT1JFIG1heSBhbGxvY2F0ZSBtb3JlIG1lbW9yeSB0aGFuIHJlcXVlc3RlZC4gKE9yIGV2ZW4gbGVzcywNCisgICAgICBidXQgdGhpcyB3aWxsIHVzdWFsbHkgcmVzdWx0IGluIGEgbWFsbG9jIGZhaWx1cmUuKQ0KKyAgKiBNT1JFQ09SRSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2hlbiBnaXZlbiBhcmd1bWVudCB6ZXJvLCBidXQNCisgICAgICBpbnN0ZWFkIHJldHVybiBvbmUgcGFzdCB0aGUgZW5kIGFkZHJlc3Mgb2YgbWVtb3J5IGZyb20gcHJldmlvdXMNCisgICAgICBub256ZXJvIGNhbGwuDQorICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSB3aXRoIHBvc2l0aXZlDQorICAgICAgYXJndW1lbnRzIHNob3VsZCByZXR1cm4gaW5jcmVhc2luZyBhZGRyZXNzZXMsIGluZGljYXRpbmcgdGhhdA0KKyAgICAgIHNwYWNlIGhhcyBiZWVuIGNvbnRpZ3VvdXNseSBleHRlbmRlZC4NCisgICogRXZlbiB0aG91Z2ggY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgcmV0dXJuIGNvbnRpZ3VvdXMNCisgICAgICBhZGRyZXNzZXMsIGl0IG11c3QgYmUgT0sgZm9yIG1hbGxvYydlZCBjaHVua3MgdG8gc3BhbiBtdWx0aXBsZQ0KKyAgICAgIHJlZ2lvbnMgaW4gdGhvc2UgY2FzZXMgd2hlcmUgdGhleSBkbyBoYXBwZW4gdG8gYmUgY29udGlndW91cy4NCisgICogTU9SRUNPUkUgbmVlZCBub3QgaGFuZGxlIG5lZ2F0aXZlIGFyZ3VtZW50cyAtLSBpdCBtYXkgaW5zdGVhZA0KKyAgICAgIGp1c3QgcmV0dXJuIE1GQUlMIHdoZW4gZ2l2ZW4gbmVnYXRpdmUgYXJndW1lbnRzLg0KKyAgICAgIE5lZ2F0aXZlIGFyZ3VtZW50cyBhcmUgYWx3YXlzIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4gTU9SRUNPUkUNCisgICAgICBtdXN0IG5vdCBtaXNpbnRlcnByZXQgbmVnYXRpdmUgYXJncyBhcyBsYXJnZSBwb3NpdGl2ZSB1bnNpZ25lZA0KKyAgICAgIGFyZ3MuIFlvdSBjYW4gc3VwcHJlc3MgYWxsIHN1Y2ggY2FsbHMgZnJvbSBldmVuIG9jY3VycmluZyBieSBkZWZpbmluZw0KKyAgICAgIE1PUkVDT1JFX0NBTk5PVF9UUklNLA0KKw0KKyAgQXMgYW4gZXhhbXBsZSBhbHRlcm5hdGl2ZSBNT1JFQ09SRSwgaGVyZSBpcyBhIGN1c3RvbSBhbGxvY2F0b3INCisgIGtpbmRseSBjb250cmlidXRlZCBmb3IgcHJlLU9TWCBtYWNPUy4gIEl0IHVzZXMgdmlydHVhbGx5IGJ1dCBub3QNCisgIG5lY2Vzc2FyaWx5IHBoeXNpY2FsbHkgY29udGlndW91cyBub24tcGFnZWQgbWVtb3J5IChsb2NrZWQgaW4sDQorICBwcmVzZW50IGFuZCB3b24ndCBnZXQgc3dhcHBlZCBvdXQpLiAgWW91IGNhbiB1c2UgaXQgYnkgdW5jb21tZW50aW5nDQorICB0aGlzIHNlY3Rpb24sIGFkZGluZyBzb21lICNpbmNsdWRlcywgYW5kIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlDQorICBkZWZpbmVzIGFib3ZlOg0KKw0KKyAgICAgICNkZWZpbmUgTU9SRUNPUkUgb3NNb3JlQ29yZQ0KKw0KKyAgVGhlcmUgaXMgYWxzbyBhIHNodXRkb3duIHJvdXRpbmUgdGhhdCBzaG91bGQgc29tZWhvdyBiZSBjYWxsZWQgZm9yDQorICBjbGVhbnVwIHVwb24gcHJvZ3JhbSBleGl0Lg0KKw0KKyAgI2RlZmluZSBNQVhfUE9PTF9FTlRSSUVTIDEwMA0KKyAgI2RlZmluZSBNSU5JTVVNX01PUkVDT1JFX1NJWkUgICg2NCAqIDEwMjRVKQ0KKyAgc3RhdGljIGludCBuZXh0X29zX3Bvb2w7DQorICB2b2lkICpvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107DQorDQorICB2b2lkICpvc01vcmVDb3JlKGludCBzaXplKQ0KKyAgew0KKyAgICB2b2lkICpwdHIgPSAwOw0KKyAgICBzdGF0aWMgdm9pZCAqc2Jya190b3AgPSAwOw0KKw0KKyAgICBpZiAoc2l6ZSA+IDApDQorICAgIHsNCisgICAgICBpZiAoc2l6ZSA8IE1JTklNVU1fTU9SRUNPUkVfU0laRSkNCisgICAgICAgICBzaXplID0gTUlOSU1VTV9NT1JFQ09SRV9TSVpFOw0KKyAgICAgIGlmIChDdXJyZW50RXhlY3V0aW9uTGV2ZWwoKSA9PSBrVGFza0xldmVsKQ0KKyAgICAgICAgIHB0ciA9IFBvb2xBbGxvY2F0ZVJlc2lkZW50KHNpemUgKyBSTV9QQUdFX1NJWkUsIDApOw0KKyAgICAgIGlmIChwdHIgPT0gMCkNCisgICAgICB7DQorICAgICAgICByZXR1cm4gKHZvaWQgKikgTUZBSUw7DQorICAgICAgfQ0KKyAgICAgIC8vIHNhdmUgcHRycyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBkdXJpbmcgY2xlYW51cA0KKyAgICAgIG91cl9vc19wb29sc1tuZXh0X29zX3Bvb2xdID0gcHRyOw0KKyAgICAgIG5leHRfb3NfcG9vbCsrOw0KKyAgICAgIHB0ciA9ICh2b2lkICopICgoKChzaXplX3QpIHB0cikgKyBSTV9QQUdFX01BU0spICYgflJNX1BBR0VfTUFTSyk7DQorICAgICAgc2Jya190b3AgPSAoY2hhciAqKSBwdHIgKyBzaXplOw0KKyAgICAgIHJldHVybiBwdHI7DQorICAgIH0NCisgICAgZWxzZSBpZiAoc2l6ZSA8IDApDQorICAgIHsNCisgICAgICAvLyB3ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBzaHJpbmsgYmVoYXZpb3INCisgICAgICByZXR1cm4gKHZvaWQgKikgTUZBSUw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgcmV0dXJuIHNicmtfdG9wOw0KKyAgICB9DQorICB9DQorDQorICAvLyBjbGVhbnVwIGFueSBhbGxvY2F0ZWQgbWVtb3J5IHBvb2xzDQorICAvLyBjYWxsZWQgYXMgbGFzdCB0aGluZyBiZWZvcmUgc2h1dHRpbmcgZG93biBkcml2ZXINCisNCisgIHZvaWQgb3NDbGVhbnVwTWVtKHZvaWQpDQorICB7DQorICAgIHZvaWQgKipwdHI7DQorDQorICAgIGZvciAocHRyID0gb3VyX29zX3Bvb2xzOyBwdHIgPCAmb3VyX29zX3Bvb2xzW01BWF9QT09MX0VOVFJJRVNdOyBwdHIrKykNCisgICAgICBpZiAoKnB0cikNCisgICAgICB7DQorICAgICAgICAgUG9vbERlYWxsb2NhdGUoKnB0cik7DQorICAgICAgICAgKnB0ciA9IDA7DQorICAgICAgfQ0KKyAgfQ0KKw0KKyovDQorDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitIaXN0b3J5Og0KKyAgICB2Mi44LjYgV2VkIEF1ZyAyOSAwNjo1Nzo1OCAyMDEyICBEb3VnIExlYQ0KKyAgICAgICogZml4IGJhZCBjb21wYXJpc29uIGluIGRscG9zaXhfbWVtYWxpZ24NCisgICAgICAqIGRvbid0IHJldXNlIGFkanVzdGVkIGFzaXplIGluIHN5c19hbGxvYw0KKyAgICAgICogYWRkIExPQ0tfQVRfRk9SSyAtLSB0aGFua3MgdG8gS2lyaWxsIEFydGFtb25vdiBmb3IgdGhlIHN1Z2dlc3Rpb24NCisgICAgICAqIHJlZHVjZSBjb21waWxlciB3YXJuaW5ncyAtLSB0aGFua3MgdG8gYWxsIHdobyByZXBvcnRlZC9zdWdnZXN0ZWQgdGhlc2UNCisNCisgICAgdjIuOC41IFN1biBNYXkgMjIgMTA6MjY6MDIgMjAxMSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiBBbHdheXMgcGVyZm9ybSB1bmxpbmsgY2hlY2tzIHVubGVzcyBJTlNFQ1VSRQ0KKyAgICAgICogQWRkIHBvc2l4X21lbWFsaWduLg0KKyAgICAgICogSW1wcm92ZSByZWFsbG9jIHRvIGV4cGFuZCBpbiBtb3JlIGNhc2VzOyBleHBvc2UgcmVhbGxvY19pbl9wbGFjZS4NCisgICAgICAgIFRoYW5rcyB0byBQZXRlciBCdWhyIGZvciB0aGUgc3VnZ2VzdGlvbi4NCisgICAgICAqIEFkZCBmb290cHJpbnRfbGltaXQsIGluc3BlY3RfYWxsLCBidWxrX2ZyZWUuIFRoYW5rcw0KKyAgICAgICAgdG8gQmFycnkgSGF5ZXMgYW5kIG90aGVycyBmb3IgdGhlIHN1Z2dlc3Rpb25zLg0KKyAgICAgICogSW50ZXJuYWwgcmVmYWN0b3JpbmdzIHRvIGF2b2lkIGNhbGxzIHdoaWxlIGhvbGRpbmcgbG9ja3MNCisgICAgICAqIFVzZSBub24tcmVlbnRyYW50IGxvY2tzIGJ5IGRlZmF1bHQuIFRoYW5rcyB0byBSb2xhbmQgTWNHcmF0aA0KKyAgICAgICAgZm9yIHRoZSBzdWdnZXN0aW9uLg0KKyAgICAgICogU21hbGwgZml4ZXMgdG8gbXNwYWNlX2Rlc3Ryb3ksIHJlc2V0X29uX2Vycm9yLg0KKyAgICAgICogVmFyaW91cyBjb25maWd1cmF0aW9uIGV4dGVuc2lvbnMvY2hhbmdlcy4gVGhhbmtzDQorICAgICAgICAgdG8gYWxsIHdobyBjb250cmlidXRlZCB0aGVzZS4NCisNCisgICAgVjIuOC40YSBUaHUgQXByIDI4IDE0OjM5OjQzIDIwMTEgKGRsIGF0IGdlZS5jcy5vc3dlZ28uZWR1KQ0KKyAgICAgICogVXBkYXRlIENyZWF0aXZlIENvbW1vbnMgVVJMDQorDQorICAgIFYyLjguNCBXZWQgTWF5IDI3IDA5OjU2OjIzIDIwMDkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQ0KKyAgICAgICogVXNlIHplcm9zIGluc3RlYWQgb2YgcHJldiBmb290IGZvciBpc19tbWFwcGVkDQorICAgICAgKiBBZGQgbXNwYWNlX3RyYWNrX2xhcmdlX2NodW5rczsgdGhhbmtzIHRvIEplYW4gQnJvdXdlcnMNCisgICAgICAqIEZpeCBzZXRfaW51c2UgaW4gaW50ZXJuYWxfcmVhbGxvYzsgdGhhbmtzIHRvIEplYW4gQnJvdXdlcnMNCisgICAgICAqIEZpeCBpbnN1ZmZpY2llbnQgc3lzX2FsbG9jIHBhZGRpbmcgd2hlbiB1c2luZyAxNmJ5dGUgYWxpZ25tZW50DQorICAgICAgKiBGaXggYmFkIGVycm9yIGNoZWNrIGluIG1zcGFjZV9mb290cHJpbnQNCisgICAgICAqIEFkYXB0YXRpb25zIGZvciBwdG1hbGxvYzsgdGhhbmtzIHRvIFdvbGZyYW0gR2xvZ2VyLg0KKyAgICAgICogUmVlbnRyYW50IHNwaW4gbG9ja3M7IHRoYW5rcyB0byBFYXJsIENoZXcgYW5kIG90aGVycw0KKyAgICAgICogV2luMzIgaW1wcm92ZW1lbnRzOyB0aGFua3MgdG8gTmlhbGwgRG91Z2xhcyBhbmQgRWFybCBDaGV3DQorICAgICAgKiBBZGQgTk9fU0VHTUVOVF9UUkFWRVJTQUwgYW5kIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgb3B0aW9ucw0KKyAgICAgICogRXh0ZW5zaW9uIGhvb2sgaW4gbWFsbG9jX3N0YXRlDQorICAgICAgKiBWYXJpb3VzIHNtYWxsIGFkanVzdG1lbnRzIHRvIHJlZHVjZSB3YXJuaW5ncyBvbiBzb21lIGNvbXBpbGVycw0KKyAgICAgICogVmFyaW91cyBjb25maWd1cmF0aW9uIGV4dGVuc2lvbnMvY2hhbmdlcyBmb3IgbW9yZSBwbGF0Zm9ybXMuIFRoYW5rcw0KKyAgICAgICAgIHRvIGFsbCB3aG8gY29udHJpYnV0ZWQgdGhlc2UuDQorDQorICAgIFYyLjguMyBUaHUgU2VwIDIyIDExOjE2OjMyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQ0KKyAgICAgICogQWRkIG1heF9mb290cHJpbnQgZnVuY3Rpb25zDQorICAgICAgKiBFbnN1cmUgYWxsIGFwcHJvcHJpYXRlIGxpdGVyYWxzIGFyZSBzaXplX3QNCisgICAgICAqIEZpeCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBwcm9ibGVtIGZvciBzb21lICNkZWZpbmUgc2V0dGluZ3MNCisgICAgICAqIEF2b2lkIGNvbmNhdGVuYXRpbmcgc2VnbWVudHMgd2l0aCB0aGUgb25lIHByb3ZpZGVkDQorICAgICAgICBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZQ0KKyAgICAgICogUmVuYW1lIHNvbWUgdmFyaWFibGVzIHRvIGF2b2lkIGNvbXBpbGVyIHNoYWRvd2luZyB3YXJuaW5ncw0KKyAgICAgICogVXNlIGV4cGxpY2l0IGxvY2sgaW5pdGlhbGl6YXRpb24uDQorICAgICAgKiBCZXR0ZXIgaGFuZGxpbmcgb2Ygc2JyayBpbnRlcmZlcmVuY2UuDQorICAgICAgKiBTaW1wbGlmeSBhbmQgZml4IHNlZ21lbnQgaW5zZXJ0aW9uLCB0cmltbWluZyBhbmQgbXNwYWNlX2Rlc3Ryb3kNCisgICAgICAqIFJlaW5zdGF0ZSBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgb3B0aW9uIGZyb20gMi43LngNCisgICAgICAqIFRoYW5rcyBlc3BlY2lhbGx5IHRvIERlbm5pcyBGbGFuYWdhbiBmb3IgaGVscCBvbiB0aGVzZS4NCisNCisgICAgVjIuOC4yIFN1biBKdW4gMTIgMTY6MDE6MTAgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiBGaXggbWVtYWxpZ24gYnJhY2UgZXJyb3IuDQorDQorICAgIFYyLjguMSBXZWQgSnVuICA4IDE2OjExOjQ2IDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQ0KKyAgICAgICogRml4IGltcHJvcGVyICNlbmRpZiBuZXN0aW5nIGluIEMrKw0KKyAgICAgICogQWRkIGV4cGxpY2l0IGNhc3RzIG5lZWRlZCBmb3IgQysrDQorDQorICAgIFYyLjguMCBNb24gTWF5IDMwIDE0OjA5OjAyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQ0KKyAgICAgICogVXNlIHRyZWVzIGZvciBsYXJnZSBiaW5zDQorICAgICAgKiBTdXBwb3J0IG1zcGFjZXMNCisgICAgICAqIFVzZSBzZWdtZW50cyB0byB1bmlmeSBzYnJrLWJhc2VkIGFuZCBtbWFwLWJhc2VkIHN5c3RlbSBhbGxvY2F0aW9uLA0KKyAgICAgICAgcmVtb3ZpbmcgbmVlZCBmb3IgZW11bGF0aW9uIG9uIG1vc3QgcGxhdGZvcm1zIHdpdGhvdXQgc2Jyay4NCisgICAgICAqIERlZmF1bHQgc2FmZXR5IGNoZWNrcw0KKyAgICAgICogT3B0aW9uYWwgZm9vdGVyIGNoZWNrcy4gVGhhbmtzIHRvIFdpbGxpYW0gUm9iZXJ0c29uIGZvciB0aGUgaWRlYS4NCisgICAgICAqIEludGVybmFsIGNvZGUgcmVmYWN0b3JpbmcNCisgICAgICAqIEluY29ycG9yYXRlIHN1Z2dlc3Rpb25zIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBjaGFuZ2VzLg0KKyAgICAgICAgVGhhbmtzIHRvIERlbm5pcyBGbGFuYWdhbiwgQ29saW4gUGx1bWIsIE5pYWxsIERvdWdsYXMsDQorICAgICAgICBBYXJvbiBCYWNobWFubiwgIEVtZXJ5IEJlcmdlciwgYW5kIG90aGVycy4NCisgICAgICAqIFNwZWVkIHVwIG5vbi1mYXN0YmluIHByb2Nlc3NpbmcgZW5vdWdoIHRvIHJlbW92ZSBmYXN0Ymlucy4NCisgICAgICAqIFJlbW92ZSB1c2VsZXNzIGNmcmVlKCkgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgYXBwcy4NCisgICAgICAqIFJlbW92ZSBpbnRlcm5hbCBtZW1jcHksIG1lbXNldC4gQ29tcGlsZXJzIGhhbmRsZSBidWlsdGlucyBiZXR0ZXIuDQorICAgICAgKiBSZW1vdmUgc29tZSBvcHRpb25zIHRoYXQgbm8gb25lIGV2ZXIgdXNlZCBhbmQgcmVuYW1lIG90aGVycy4NCisNCisgICAgVjIuNy4yIFNhdCBBdWcgMTcgMDk6MDc6MzAgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiBGaXggbWFsbG9jX3N0YXRlIGJpdG1hcCBhcnJheSBtaXNkZWNsYXJhdGlvbg0KKw0KKyAgICBWMi43LjEgVGh1IEp1bCAyNSAxMDo1ODowMyAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkNCisgICAgICAqIEFsbG93IHR1bmluZyBvZiBGSVJTVF9TT1JURURfQklOX1NJWkUNCisgICAgICAqIFVzZSBQVFJfVUlOVCBhcyB0eXBlIGZvciBhbGwgcHRyLT5pbnQgY2FzdHMuIFRoYW5rcyB0byBKb2huIEJlbG1vbnRlLg0KKyAgICAgICogQmV0dGVyIGRldGVjdGlvbiBhbmQgc3VwcG9ydCBmb3Igbm9uLWNvbnRpZ3VvdXNuZXNzIG9mIE1PUkVDT1JFLg0KKyAgICAgICAgVGhhbmtzIHRvIEFuZHJlYXMgTXVlbGxlciwgQ29uYWwgV2Fsc2gsIGFuZCBXb2xmcmFtIEdsb2dlcg0KKyAgICAgICogQnlwYXNzIG1vc3Qgb2YgbWFsbG9jIGlmIG5vIGZyZWVzLiBUaGFua3MgVG8gRW1lcnkgQmVyZ2VyLg0KKyAgICAgICogRml4IGZyZWVpbmcgb2Ygb2xkIHRvcCBub24tY29udGlndW91cyBjaHVuayBpbSBzeXNtYWxsb2MuDQorICAgICAgKiBSYWlzZWQgZGVmYXVsdCB0cmltIGFuZCBtYXAgdGhyZXNob2xkcyB0byAyNTZLLg0KKyAgICAgICogRml4IG1tYXAtcmVsYXRlZCAjZGVmaW5lcy4gVGhhbmtzIHRvIEx1Ym9zIEx1bmFrLg0KKyAgICAgICogRml4IGNvcHkgbWFjcm9zOyBhZGRlZCBMQUNLU19GQ05UTF9ILiBUaGFua3MgdG8gTmVhbCBXYWxmaWVsZC4NCisgICAgICAqIEJyYW5jaC1mcmVlIGJpbiBjYWxjdWxhdGlvbg0KKyAgICAgICogRGVmYXVsdCB0cmltIGFuZCBtbWFwIHRocmVzaG9sZHMgbm93IDI1NksuDQorDQorICAgIFYyLjcuMCBTdW4gTWFyIDExIDE0OjE0OjA2IDIwMDEgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQ0KKyAgICAgICogSW50cm9kdWNlIGluZGVwZW5kZW50X2NvbWFsbG9jIGFuZCBpbmRlcGVuZGVudF9jYWxsb2MuDQorICAgICAgICBUaGFua3MgdG8gTWljaGFlbCBQYWNob3MgZm9yIG1vdGl2YXRpb24gYW5kIGhlbHAuDQorICAgICAgKiBNYWtlIG9wdGlvbmFsIC5oIGZpbGUgYXZhaWxhYmxlDQorICAgICAgKiBBbGxvdyA+IDJHQiByZXF1ZXN0cyBvbiAzMmJpdCBzeXN0ZW1zLg0KKyAgICAgICogbmV3IFdJTjMyIHNicmssIG1tYXAsIG11bm1hcCwgbG9jayBjb2RlIGZyb20gPFdhbHRlckBHZU5lU3lzLWUuZGU+Lg0KKyAgICAgICAgVGhhbmtzIGFsc28gdG8gQW5kcmVhcyBNdWVsbGVyIDxhLm11ZWxsZXIgYXQgcGFyYWRhdGVjLmRlPiwNCisgICAgICAgIGFuZCBBbm9ueW1vdXMuDQorICAgICAgKiBBbGxvdyBvdmVycmlkZSBvZiBNQUxMT0NfQUxJR05NRU5UIChUaGFua3MgdG8gUnV1ZCBXYWlqIGZvcg0KKyAgICAgICAgaGVscGluZyB0ZXN0IHRoaXMuKQ0KKyAgICAgICogbWVtYWxpZ246IGNoZWNrIGFsaWdubWVudCBhcmcNCisgICAgICAqIHJlYWxsb2M6IGRvbid0IHRyeSB0byBzaGlmdCBjaHVua3MgYmFja3dhcmRzLCBzaW5jZSB0aGlzDQorICAgICAgICBsZWFkcyB0byAgbW9yZSBmcmFnbWVudGF0aW9uIGluIHNvbWUgcHJvZ3JhbXMgYW5kIGRvZXNuJ3QNCisgICAgICAgIHNlZW0gdG8gaGVscCBpbiBhbnkgb3RoZXJzLg0KKyAgICAgICogQ29sbGVjdCBhbGwgY2FzZXMgaW4gbWFsbG9jIHJlcXVpcmluZyBzeXN0ZW0gbWVtb3J5IGludG8gc3lzbWFsbG9jDQorICAgICAgKiBVc2UgbW1hcCBhcyBiYWNrdXAgdG8gc2Jyaw0KKyAgICAgICogUGxhY2UgYWxsIGludGVybmFsIHN0YXRlIGluIG1hbGxvY19zdGF0ZQ0KKyAgICAgICogSW50cm9kdWNlIGZhc3RiaW5zIChhbHRob3VnaCBzaW1pbGFyIHRvIDIuNS4xKQ0KKyAgICAgICogTWFueSBtaW5vciB0dW5pbmdzIGFuZCBjb3NtZXRpYyBpbXByb3ZlbWVudHMNCisgICAgICAqIEludHJvZHVjZSBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUywgVVNFX01BTExPQ19MT0NLDQorICAgICAgKiBJbnRyb2R1Y2UgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OLCBNT1JFQ09SRV9DT05USUdVT1VTDQorICAgICAgICBUaGFua3MgdG8gVG9ueSBFLiBCZW5uZXR0IDx0YmVubmV0dEBudmlkaWEuY29tPiBhbmQgb3RoZXJzLg0KKyAgICAgICogSW5jbHVkZSBlcnJuby5oIHRvIHN1cHBvcnQgZGVmYXVsdCBmYWlsdXJlIGFjdGlvbi4NCisNCisgICAgVjIuNi42IFN1biBEZWMgIDUgMDc6NDI6MTkgMTk5OSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRpdmUgYXJndW1lbnRzDQorICAgICAgKiBBZGRlZCBTZXZlcmFsIFdJTjMyIGNsZWFudXBzIGZyb20gTWFydGluIEMuIEZvbmcgPG1jZm9uZyBhdCB5YWhvby5jb20+DQorICAgICAgICAgKiBBZGQgJ0xBQ0tTX1NZU19QQVJBTV9IJyBmb3IgdGhvc2Ugc3lzdGVtcyB3aXRob3V0ICdzeXMvcGFyYW0uaCcNCisgICAgICAgICAgKGUuZy4gV0lOMzIgcGxhdGZvcm1zKQ0KKyAgICAgICAgICogQ2xlYW51cCBoZWFkZXIgZmlsZSBpbmNsdXNpb24gZm9yIFdJTjMyIHBsYXRmb3Jtcw0KKyAgICAgICAgICogQ2xlYW51cCBjb2RlIHRvIGF2b2lkIE1pY3Jvc29mdCBWaXN1YWwgQysrIGNvbXBpbGVyIGNvbXBsYWludHMNCisgICAgICAgICAqIEFkZCAnVVNFX0RMX1BSRUZJWCcgdG8gcXVpY2tseSBhbGxvdyBjby1leGlzdGVuY2Ugd2l0aCBleGlzdGluZw0KKyAgICAgICAgICAgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMNCisgICAgICAgICAqIFNldCAnbWFsbG9jX2dldHBhZ2VzaXplJyBmb3IgV0lOMzIgcGxhdGZvcm1zIChuZWVkcyBtb3JlIHdvcmspDQorICAgICAgICAgKiBVc2UgJ2Fzc2VydCcgcmF0aGVyIHRoYW4gJ0FTU0VSVCcgaW4gV0lOMzIgY29kZSB0byBjb25mb3JtIHRvDQorICAgICAgICAgICB1c2FnZSBvZiAnYXNzZXJ0JyBpbiBub24tV0lOMzIgY29kZQ0KKyAgICAgICAgICogSW1wcm92ZSBXSU4zMiAnc2JyaygpJyBlbXVsYXRpb24ncyAnZmluZFJlZ2lvbigpJyByb3V0aW5lIHRvDQorICAgICAgICAgICBhdm9pZCBpbmZpbml0ZSBsb29wDQorICAgICAgKiBBbHdheXMgY2FsbCAnZlJFZSgpJyByYXRoZXIgdGhhbiAnZnJlZSgpJw0KKw0KKyAgICBWMi42LjUgV2VkIEp1biAxNyAxNTo1NzozMSAxOTk4ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkNCisgICAgICAqIEZpeGVkIG9yZGVyaW5nIHByb2JsZW0gd2l0aCBib3VuZGFyeS1zdGFtcGluZw0KKw0KKyAgICBWMi42LjMgU3VuIE1heSAxOSAwODoxNzo1OCAxOTk2ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkNCisgICAgICAqIEFkZGVkIHB2YWxsb2MsIGFzIHJlY29tbWVuZGVkIGJ5IEguSi4gTGl1DQorICAgICAgKiBBZGRlZCA2NGJpdCBwb2ludGVyIHN1cHBvcnQgbWFpbmx5IGZyb20gV29sZnJhbSBHbG9nZXINCisgICAgICAqIEFkZGVkIGFub255bW91c2x5IGRvbmF0ZWQgV0lOMzIgc2JyayBlbXVsYXRpb24NCisgICAgICAqIE1hbGxvYywgY2FsbG9jLCBnZXRwYWdlc2l6ZTogYWRkIG9wdGltaXphdGlvbnMgZnJvbSBSYXltb25kIE5panNzZW4NCisgICAgICAqIG1hbGxvY19leHRlbmRfdG9wOiBmaXggbWFzayBlcnJvciB0aGF0IGNhdXNlZCB3YXN0YWdlIGFmdGVyDQorICAgICAgICBmb3JlaWduIHNicmtzDQorICAgICAgKiBBZGQgbGludXggbXJlbWFwIHN1cHBvcnQgY29kZSBmcm9tIEhKIExpdQ0KKw0KKyAgICBWMi42LjIgVHVlIERlYyAgNSAwNjo1Mjo1NSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkNCisgICAgICAqIEludGVncmF0ZWQgbW9zdCBkb2N1bWVudGF0aW9uIHdpdGggdGhlIGNvZGUuDQorICAgICAgKiBBZGQgc3VwcG9ydCBmb3IgbW1hcCwgd2l0aCBoZWxwIGZyb20NCisgICAgICAgIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuDQorICAgICAgKiBVc2UgbGFzdF9yZW1haW5kZXIgaW4gbW9yZSBjYXNlcy4NCisgICAgICAqIFBhY2sgYmlucyB1c2luZyBpZGVhIGZyb20gIGNvbGluQG55eDEwLmNzLmR1LmVkdQ0KKyAgICAgICogVXNlIG9yZGVyZWQgYmlucyBpbnN0ZWFkIG9mIGJlc3QtZml0IHRocmVzaGhvbGQNCisgICAgICAqIEVsaW1pbmF0ZSBibG9jay1sb2NhbCBkZWNscyB0byBzaW1wbGlmeSB0cmFjaW5nIGFuZCBkZWJ1Z2dpbmcuDQorICAgICAgKiBTdXBwb3J0IGFub3RoZXIgY2FzZSBvZiByZWFsbG9jIHZpYSBtb3ZlIGludG8gdG9wDQorICAgICAgKiBGaXggZXJyb3Igb2NjdXJpbmcgd2hlbiBpbml0aWFsIHNicmtfYmFzZSBub3Qgd29yZC1hbGlnbmVkLg0KKyAgICAgICogUmVseSBvbiBwYWdlIHNpemUgZm9yIHVuaXRzIGluc3RlYWQgb2YgU0JSS19VTklUIHRvDQorICAgICAgICBhdm9pZCBzdXJwcmlzZXMgYWJvdXQgc2JyayBhbGlnbm1lbnQgY29udmVudGlvbnMuDQorICAgICAgKiBBZGQgbWFsbGluZm8sIG1hbGxvcHQuIFRoYW5rcyB0byBSYXltb25kIE5panNzZW4NCisgICAgICAgIChyYXltb25kQGVzLmVsZS50dWUubmwpIGZvciB0aGUgc3VnZ2VzdGlvbi4NCisgICAgICAqIEFkZCBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSBhbmQgdG9wX3BhZCBtYWxsb3B0IHBhcmFtZXRlci4NCisgICAgICAqIE1vcmUgcHJlY2F1dGlvbnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywNCisgICAgICAgIGNvdXJ0ZXN5IG9mIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuDQorICAgICAgKiBBZGRlZCBtYWNyb3MgZXRjLiwgYWxsb3dpbmcgdXNlIGluIGxpbnV4IGxpYmMgZnJvbQ0KKyAgICAgICAgSC5KLiBMdSAoaGpsQGdudS5haS5taXQuZWR1KQ0KKyAgICAgICogSW52ZXJ0ZWQgdGhpcyBoaXN0b3J5IGxpc3QNCisNCisgICAgVjIuNi4xIFNhdCBEZWMgIDIgMTQ6MTA6NTcgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiBSZS10dW5lZCBhbmQgZml4ZWQgdG8gYmVoYXZlIG1vcmUgbmljZWx5IHdpdGggVjIuNi4wIGNoYW5nZXMuDQorICAgICAgKiBSZW1vdmVkIGFsbCBwcmVhbGxvY2F0aW9uIGNvZGUgc2luY2UgdW5kZXIgY3VycmVudCBzY2hlbWUNCisgICAgICAgIHRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMNCisgICAgICAgIHRoZSB3b3JrIHNhdmVkIGluIGdvb2QgY2FzZXMgZm9yIG1vc3QgdGVzdCBwcm9ncmFtcy4NCisgICAgICAqIE5vIGxvbmdlciB1c2UgcmV0dXJuIGxpc3Qgb3IgdW5jb25zb2xpZGF0ZWQgYmlucyBzaW5jZQ0KKyAgICAgICAgbm8gc2NoZW1lIHVzaW5nIHRoZW0gY29uc2lzdGVudGx5IG91dHBlcmZvcm1zIHRob3NlIHRoYXQgZG9uJ3QNCisgICAgICAgIGdpdmVuIGFib3ZlIGNoYW5nZXMuDQorICAgICAgKiBVc2UgYmVzdCBmaXQgZm9yIHZlcnkgbGFyZ2UgY2h1bmtzIHRvIHByZXZlbnQgc29tZSB3b3JzdC1jYXNlcy4NCisgICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nDQorDQorICAgIFYyLjYuMCBTYXQgTm92ICA0IDA3OjA1OjIzIDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQ0KKyAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5rcyB0bw0KKyAgICAgICAgUGF1bCBXaWxzb24gKHdpbHNvbkBjcy50ZXhhcy5lZHUpIGZvciB0aGUgc3VnZ2VzdGlvbi4NCisNCisgICAgVjIuNS40IFdlZCBOb3YgIDEgMDc6NTQ6NTEgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiBBZGRlZCBtYWxsb2NfdHJpbSwgd2l0aCBoZWxwIGZyb20gV29sZnJhbSBHbG9nZXINCisgICAgICAgICh3bWdsb0BEZW50Lk1FRC5VbmktTXVlbmNoZW4uREUpLg0KKw0KKyAgICBWMi41LjMgVHVlIEFwciAyNiAxMDoxNjowMSAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpDQorDQorICAgIFYyLjUuMiBUdWUgQXByICA1IDE2OjIwOjQwIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykNCisgICAgICAqIHJlYWxsb2M6IHRyeSB0byBleHBhbmQgaW4gYm90aCBkaXJlY3Rpb25zDQorICAgICAgKiBtYWxsb2M6IHN3YXAgb3JkZXIgb2YgY2xlYW4tYmluIHN0cmF0ZWd5Ow0KKyAgICAgICogcmVhbGxvYzogb25seSBjb25kaXRpb25hbGx5IGV4cGFuZCBiYWNrd2FyZHMNCisgICAgICAqIFRyeSBub3QgdG8gc2NhdmVuZ2UgdXNlZCBiaW5zDQorICAgICAgKiBVc2UgYmluIGNvdW50cyBhcyBhIGd1aWRlIHRvIHByZWFsbG9jYXRpb24NCisgICAgICAqIE9jY2FzaW9uYWxseSBiaW4gcmV0dXJuIGxpc3QgY2h1bmtzIGluIGZpcnN0IHNjYW4NCisgICAgICAqIEFkZCBhIGZldyBvcHRpbWl6YXRpb25zIGZyb20gY29saW5Abnl4MTAuY3MuZHUuZWR1DQorDQorICAgIFYyLjUuMSBTYXQgQXVnIDE0IDE1OjQwOjQzIDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZykNCisgICAgICAqIGZhc3RlciBiaW4gY29tcHV0YXRpb24gJiBzbGlnaHRseSBkaWZmZXJlbnQgYmlubmluZw0KKyAgICAgICogbWVyZ2VkIGFsbCBjb25zb2xpZGF0aW9ucyB0byBvbmUgcGFydCBvZiBtYWxsb2MgcHJvcGVyDQorICAgICAgICAgKGVsaW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pDQorICAgICAgKiBTY2FuIDIgcmV0dXJucyBjaHVua3MgKG5vdCBqdXN0IDEpDQorICAgICAgKiBQcm9wYWdhdGUgZmFpbHVyZSBpbiByZWFsbG9jIGlmIG1hbGxvYyByZXR1cm5zIDANCisgICAgICAqIEFkZCBzdHVmZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMNCisgICAgICAgICAgZnJvbSBrcHZAcmVzZWFyY2guYXR0LmNvbQ0KKw0KKyAgICBWMi41IFNhdCBBdWcgIDcgMDc6NDE6NTkgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpDQorICAgICAgKiByZW1vdmVkIHBvdGVudGlhbCBmb3Igb2RkIGFkZHJlc3MgYWNjZXNzIGluIHByZXZfY2h1bmsNCisgICAgICAqIHJlbW92ZWQgZGVwZW5kZW5jeSBvbiBnZXRwYWdlc2l6ZS5oDQorICAgICAgKiBtaXNjIGNvc21ldGljcyBhbmQgYSBiaXQgbW9yZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uDQorICAgICAgKiBhbnRpY29zbWV0aWNzOiBtYW5nbGVkIG5hbWVzIGluIG1hY3JvcyB0byBldmFkZSBkZWJ1Z2dlciBzdHJhbmdlbmVzcw0KKyAgICAgICogdGVzdGVkIG9uIHNwYXJjLCBocC03MDAsIGRlYy1taXBzLCByczYwMDANCisgICAgICAgICAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcNCisgICAgICAgICAgRGV0bGVmcyAmIFpvcm4gY29tcGFyaXNvbiBzdHVkeSAoaW4gU0lHUExBTiBOb3RpY2VzLikNCisNCisgICAgVHJpYWwgdmVyc2lvbiBGcmkgQXVnIDI4IDEzOjE0OjI5IDE5OTIgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQ0KKyAgICAgICogQmFzZWQgbG9vc2VseSBvbiBsaWJnKystMS4yWCBtYWxsb2MuIChJdCByZXRhaW5zIHNvbWUgb2YgdGhlIG92ZXJhbGwNCisgICAgICAgICBzdHJ1Y3R1cmUgb2Ygb2xkIHZlcnNpb24sICBidXQgbW9zdCBkZXRhaWxzIGRpZmZlci4pDQorDQorKi8NCisjZW5kaWYgLyogIV9fR05VX18gKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL3lhX2dldG9wdC5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi95YV9nZXRvcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2QwNTJlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi95YV9nZXRvcHQuYwpAQCAtMCwwICsxLDQzMCBAQAorLyogLSotIGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0NCisgKg0KKyAqIHlhX2dldG9wdCAgLSBZZXQgYW5vdGhlciBnZXRvcHQNCisgKiBodHRwczovL2dpdGh1Yi5jb20va3Viby95YV9nZXRvcHQNCisgKg0KKyAqIENvcHlyaWdodCAyMDE1IEt1Ym8gVGFrZWhpcm8gPGt1Ym9Aaml1YmFvLm9yZz4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQ0KKyAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YNCisgKiAgICAgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdA0KKyAqICAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzDQorICogICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyAnJ0FTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQNCisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EDQorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBPUg0KKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HDQorICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGDQorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZQ0KKyAqIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkDQorICogb3IgaW1wbGllZCwgb2YgdGhlIGF1dGhvcnMuDQorICoNCisgKi8NCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3RkYXJnLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSAieWFfZ2V0b3B0LmgiDQorDQorY2hhciAqeWFfb3B0YXJnID0gTlVMTDsNCitpbnQgeWFfb3B0aW5kID0gMTsNCitpbnQgeWFfb3B0ZXJyID0gMTsNCitpbnQgeWFfb3B0b3B0ID0gJz8nOw0KK3N0YXRpYyBjaGFyICp5YV9vcHRuZXh0ID0gTlVMTDsNCitzdGF0aWMgaW50IHBvc2l4bHlfY29ycmVjdCA9IC0xOw0KK3N0YXRpYyBpbnQgaGFuZGxlX25vbm9wdF9hcmd2ID0gMDsNCisNCitzdGF0aWMgdm9pZCB5YV9nZXRvcHRfZXJyb3IoY29uc3QgY2hhciAqb3B0c3RyaW5nLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7DQorc3RhdGljIHZvaWQgY2hlY2tfZ251X2V4dGVuc2lvbihjb25zdCBjaGFyICpvcHRzdHJpbmcpOw0KK3N0YXRpYyBpbnQgeWFfZ2V0b3B0X2ludGVybmFsKGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZywgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsb25naW5kZXgsIGludCBsb25nX29ubHkpOw0KK3N0YXRpYyBpbnQgeWFfZ2V0b3B0X3Nob3J0b3B0cyhpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcsIGludCBsb25nX29ubHkpOw0KK3N0YXRpYyBpbnQgeWFfZ2V0b3B0X2xvbmdvcHRzKGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNoYXIgKmFyZywgY29uc3QgY2hhciAqb3B0c3RyaW5nLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmRleCwgaW50ICpsb25nX29ubHlfZmxhZyk7DQorDQorc3RhdGljIHZvaWQgeWFfZ2V0b3B0X2Vycm9yKGNvbnN0IGNoYXIgKm9wdHN0cmluZywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pDQorew0KKyNpZiAwDQorDQorICAgIGlmICh5YV9vcHRlcnIgJiYgb3B0c3RyaW5nWzBdICE9ICc6JykNCisgICAgew0KKyAgICAgICAgdmFfbGlzdCBhcDsNCisgICAgICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOw0KKyAgICAgICAgdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsNCisgICAgICAgIHZhX2VuZChhcCk7DQorICAgIH0NCisNCisjZW5kaWYNCit9DQorDQorc3RhdGljIHZvaWQgY2hlY2tfZ251X2V4dGVuc2lvbihjb25zdCBjaGFyICpvcHRzdHJpbmcpDQorew0KKyNpZiAxDQorDQorICAgIGlmIChvcHRzdHJpbmdbMF0gPT0gJysnIHx8IGdldGVudigiUE9TSVhMWV9DT1JSRUNUIikgIT0gTlVMTCkNCisgICAgew0KKyNlbHNlDQorDQorICAgIGlmIChvcHRzdHJpbmdbMF0gPT0gJysnKQ0KKyAgICB7DQorI2VuZGlmDQorICAgICAgICBwb3NpeGx5X2NvcnJlY3QgPSAwOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcG9zaXhseV9jb3JyZWN0ID0gMTsNCisgICAgfQ0KKw0KKyAgICBpZiAob3B0c3RyaW5nWzBdID09ICctJykNCisgICAgew0KKyAgICAgICAgaGFuZGxlX25vbm9wdF9hcmd2ID0gMTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGhhbmRsZV9ub25vcHRfYXJndiA9IDA7DQorICAgIH0NCit9DQorDQoraW50IHlhX2dldG9wdChpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcpDQorew0KKyAgICByZXR1cm4geWFfZ2V0b3B0X2ludGVybmFsKGFyZ2MsIGFyZ3YsIG9wdHN0cmluZywgTlVMTCwgTlVMTCwgMCk7DQorfQ0KKw0KK2ludCB5YV9nZXRvcHRfbG9uZyhpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcsIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmRleCkNCit7DQorICAgIHJldHVybiB5YV9nZXRvcHRfaW50ZXJuYWwoYXJnYywgYXJndiwgb3B0c3RyaW5nLCBsb25nb3B0cywgbG9uZ2luZGV4LCAwKTsNCit9DQorDQoraW50IHlhX2dldG9wdF9sb25nX29ubHkoaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY29uc3QgY2hhciAqb3B0c3RyaW5nLCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nb3B0cywNCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxvbmdpbmRleCkNCit7DQorICAgIHJldHVybiB5YV9nZXRvcHRfaW50ZXJuYWwoYXJnYywgYXJndiwgb3B0c3RyaW5nLCBsb25nb3B0cywgbG9uZ2luZGV4LCAxKTsNCit9DQorDQorc3RhdGljIGludCB5YV9nZXRvcHRfaW50ZXJuYWwoaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY29uc3QgY2hhciAqb3B0c3RyaW5nLCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nb3B0cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxvbmdpbmRleCwgaW50IGxvbmdfb25seSkNCit7DQorICAgIHN0YXRpYyBpbnQgc3RhcnQsIGVuZDsNCisNCisgICAgaWYgKHlhX29wdG9wdCA9PSAnPycpDQorICAgIHsNCisgICAgICAgIHlhX29wdG9wdCA9IDA7DQorICAgIH0NCisNCisgICAgaWYgKHBvc2l4bHlfY29ycmVjdCA9PSAtMSkNCisgICAgew0KKyAgICAgICAgY2hlY2tfZ251X2V4dGVuc2lvbihvcHRzdHJpbmcpOw0KKyAgICB9DQorDQorICAgIGlmICh5YV9vcHRpbmQgPT0gMCkNCisgICAgew0KKyAgICAgICAgY2hlY2tfZ251X2V4dGVuc2lvbihvcHRzdHJpbmcpOw0KKyAgICAgICAgeWFfb3B0aW5kID0gMTsNCisgICAgICAgIHlhX29wdG5leHQgPSBOVUxMOw0KKyAgICB9DQorDQorICAgIHN3aXRjaCAob3B0c3RyaW5nWzBdKQ0KKyAgICB7DQorICAgIGNhc2UgJysnOg0KKyAgICBjYXNlICctJzoNCisgICAgICAgIG9wdHN0cmluZysrOw0KKyAgICB9DQorDQorICAgIGlmICh5YV9vcHRuZXh0ID09IE5VTEwgJiYgc3RhcnQgIT0gMCkNCisgICAgew0KKyAgICAgICAgaW50IGxhc3RfcG9zID0geWFfb3B0aW5kIC0gMTsNCisNCisgICAgICAgIHlhX29wdGluZCAtPSBlbmQgLSBzdGFydDsNCisNCisgICAgICAgIGlmICh5YV9vcHRpbmQgPD0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICB5YV9vcHRpbmQgPSAxOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kLS0pDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50IGk7DQorICAgICAgICAgICAgY2hhciAqYXJnID0gYXJndltlbmRdOw0KKw0KKyAgICAgICAgICAgIGZvciAoaSA9IGVuZDsgaSA8IGxhc3RfcG9zOyBpKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAoKGNoYXIgKiopYXJndilbaV0gPSBhcmd2W2kgKyAxXTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgKChjaGFyIGNvbnN0ICoqKWFyZ3YpW2ldID0gYXJnOw0KKyAgICAgICAgICAgIGxhc3RfcG9zLS07DQorICAgICAgICB9DQorDQorICAgICAgICBzdGFydCA9IDA7DQorICAgIH0NCisNCisgICAgaWYgKHlhX29wdGluZCA+PSBhcmdjKQ0KKyAgICB7DQorICAgICAgICB5YV9vcHRhcmcgPSBOVUxMOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGlmICh5YV9vcHRuZXh0ID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIGNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbeWFfb3B0aW5kXTsNCisNCisgICAgICAgIGlmICgqYXJnICE9ICctJykNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoaGFuZGxlX25vbm9wdF9hcmd2KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgeWFfb3B0YXJnID0gYXJndltvcHRpbmQrK107DQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDsNCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBvc2l4bHlfY29ycmVjdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHlhX29wdGFyZyA9IE5VTEw7DQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaW50IGk7DQorDQorICAgICAgICAgICAgICAgIHN0YXJ0ID0geWFfb3B0aW5kOw0KKw0KKyAgICAgICAgICAgICAgICBmb3IgKGkgPSB5YV9vcHRpbmQgKyAxOyBpIDwgYXJnYzsgaSsrKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoYXJndltpXVswXSA9PSAnLScpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gaTsNCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoaSA9PSBhcmdjKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB5YV9vcHRhcmcgPSBOVUxMOw0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIHlhX29wdGluZCA9IGk7DQorICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbeWFfb3B0aW5kXTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoc3RyY21wKGFyZywgIi0tIikgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICB5YV9vcHRpbmQrKzsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobG9uZ29wdHMgIT0gTlVMTCAmJiBhcmdbMV0gPT0gJy0nKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiB5YV9nZXRvcHRfbG9uZ29wdHMoYXJnYywgYXJndiwgYXJndlt5YV9vcHRpbmRdICsgMiwgb3B0c3RyaW5nLCBsb25nb3B0cywgbG9uZ2luZGV4LCBOVUxMKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAoeWFfb3B0bmV4dCA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICB5YV9vcHRuZXh0ID0gYXJndlt5YV9vcHRpbmRdICsgMTsNCisgICAgfQ0KKw0KKyAgICBpZiAobG9uZ19vbmx5ICYmIGxvbmdvcHRzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGludCBsb25nX29ubHlfZmxhZyA9IDA7DQorICAgICAgICBpbnQgcnYgPSB5YV9nZXRvcHRfbG9uZ29wdHMoYXJnYywgYXJndiwgeWFfb3B0bmV4dCwgb3B0c3RyaW5nLCBsb25nb3B0cywgbG9uZ2luZGV4LCAmbG9uZ19vbmx5X2ZsYWcpOw0KKw0KKyAgICAgICAgaWYgKCFsb25nX29ubHlfZmxhZykNCisgICAgICAgIHsNCisgICAgICAgICAgICB5YV9vcHRuZXh0ID0gTlVMTDsNCisgICAgICAgICAgICByZXR1cm4gcnY7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHlhX2dldG9wdF9zaG9ydG9wdHMoYXJnYywgYXJndiwgb3B0c3RyaW5nLCBsb25nX29ubHkpOw0KK30NCisNCitzdGF0aWMgaW50IHlhX2dldG9wdF9zaG9ydG9wdHMoaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY29uc3QgY2hhciAqb3B0c3RyaW5nLCBpbnQgbG9uZ19vbmx5KQ0KK3sNCisgICAgaW50IG9wdCA9ICp5YV9vcHRuZXh0Ow0KKyAgICBjb25zdCBjaGFyICpvcyA9IHN0cmNocihvcHRzdHJpbmcsIG9wdCk7DQorDQorICAgIGlmIChvcyA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICB5YV9vcHRhcmcgPSBOVUxMOw0KKw0KKyAgICAgICAgaWYgKGxvbmdfb25seSkNCisgICAgICAgIHsNCisgICAgICAgICAgICB5YV9nZXRvcHRfZXJyb3Iob3B0c3RyaW5nLCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJy0lcydcbiIsIGFyZ3ZbMF0sIHlhX29wdG5leHQpOw0KKyAgICAgICAgICAgIHlhX29wdGluZCsrOw0KKyAgICAgICAgICAgIHlhX29wdG5leHQgPSBOVUxMOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHlhX29wdG9wdCA9IG9wdDsNCisgICAgICAgICAgICB5YV9nZXRvcHRfZXJyb3Iob3B0c3RyaW5nLCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICclYydcbiIsIGFyZ3ZbMF0sIG9wdCk7DQorDQorICAgICAgICAgICAgaWYgKCooKyt5YV9vcHRuZXh0KSA9PSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgeWFfb3B0aW5kKys7DQorICAgICAgICAgICAgICAgIHlhX29wdG5leHQgPSBOVUxMOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIHJldHVybiAnPyc7DQorICAgIH0NCisNCisgICAgaWYgKG9zWzFdID09ICc6JykNCisgICAgew0KKyAgICAgICAgaWYgKHlhX29wdG5leHRbMV0gPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICB5YV9vcHRpbmQrKzsNCisNCisgICAgICAgICAgICBpZiAob3NbMl0gPT0gJzonKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgLyogb3B0aW9uYWwgYXJndW1lbnQgKi8NCisgICAgICAgICAgICAgICAgeWFfb3B0YXJnID0gTlVMTDsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYgKHlhX29wdGluZCA9PSBhcmdjKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB5YV9vcHRhcmcgPSBOVUxMOw0KKyAgICAgICAgICAgICAgICAgICAgeWFfb3B0b3B0ID0gb3B0Ow0KKyAgICAgICAgICAgICAgICAgICAgeWFfZ2V0b3B0X2Vycm9yKG9wdHN0cmluZywgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJyVjJ1xuIiwgYXJndlswXSwgb3B0KTsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzdHJpbmdbMF0gPT0gJzonKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnOic7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc/JzsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICB5YV9vcHRhcmcgPSBhcmd2W3lhX29wdGluZF07DQorICAgICAgICAgICAgICAgIHlhX29wdGluZCsrOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICB5YV9vcHRhcmcgPSB5YV9vcHRuZXh0ICsgMTsNCisgICAgICAgICAgICB5YV9vcHRpbmQrKzsNCisgICAgICAgIH0NCisNCisgICAgICAgIHlhX29wdG5leHQgPSBOVUxMOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgeWFfb3B0YXJnID0gTlVMTDsNCisNCisgICAgICAgIGlmICh5YV9vcHRuZXh0WzFdID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgeWFfb3B0bmV4dCA9IE5VTEw7DQorICAgICAgICAgICAgeWFfb3B0aW5kKys7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgeWFfb3B0bmV4dCsrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiBvcHQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgeWFfZ2V0b3B0X2xvbmdvcHRzKGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNoYXIgKmFyZywgY29uc3QgY2hhciAqb3B0c3RyaW5nLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmRleCwgaW50ICpsb25nX29ubHlfZmxhZykNCit7DQorICAgIGNoYXIgKnZhbCA9IE5VTEw7DQorICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdDsNCisgICAgc2l6ZV90IG5hbWVsZW47DQorICAgIGludCBpZHg7DQorDQorICAgIGZvciAoaWR4ID0gMDsgbG9uZ29wdHNbaWR4XS5uYW1lICE9IE5VTEw7IGlkeCsrKQ0KKyAgICB7DQorICAgICAgICBvcHQgPSAmbG9uZ29wdHNbaWR4XTsNCisgICAgICAgIG5hbWVsZW4gPSBzdHJsZW4ob3B0LT5uYW1lKTsNCisNCisgICAgICAgIGlmIChzdHJuY21wKGFyZywgb3B0LT5uYW1lLCBuYW1lbGVuKSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHN3aXRjaCAoYXJnW25hbWVsZW5dKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICBjYXNlICdcMCc6DQorICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0LT5oYXNfYXJnKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGNhc2UgeWFfcmVxdWlyZWRfYXJndW1lbnQ6DQorICAgICAgICAgICAgICAgICAgICB5YV9vcHRpbmQrKzsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmICh5YV9vcHRpbmQgPT0gYXJnYykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICB5YV9vcHRhcmcgPSBOVUxMOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHlhX29wdG9wdCA9IG9wdC0+dmFsOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHlhX2dldG9wdF9lcnJvcihvcHRzdHJpbmcsICIlczogb3B0aW9uICctLSVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIiwgYXJndlswXSwgb3B0LT5uYW1lKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0c3RyaW5nWzBdID09ICc6JykNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnOic7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPyc7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgdmFsID0gYXJndlt5YV9vcHRpbmRdOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgZ290byBmb3VuZDsNCisNCisgICAgICAgICAgICBjYXNlICc9JzoNCisgICAgICAgICAgICAgICAgaWYgKG9wdC0+aGFzX2FyZyA9PSB5YV9ub19hcmd1bWVudCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaHlwaGVucyA9IChhcmd2W3lhX29wdGluZF1bMV0gPT0gJy0nKSA/ICItLSIgOiAiLSI7DQorDQorICAgICAgICAgICAgICAgICAgICB5YV9vcHRpbmQrKzsNCisgICAgICAgICAgICAgICAgICAgIHlhX29wdGFyZyA9IE5VTEw7DQorICAgICAgICAgICAgICAgICAgICB5YV9vcHRvcHQgPSBvcHQtPnZhbDsNCisgICAgICAgICAgICAgICAgICAgIHlhX2dldG9wdF9lcnJvcihvcHRzdHJpbmcsICIlczogb3B0aW9uICclcyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iLCBhcmd2WzBdLCBoeXBoZW5zLCBvcHQtPm5hbWUpOw0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc/JzsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICB2YWwgPSBhcmcgKyBuYW1lbGVuICsgMTsNCisgICAgICAgICAgICAgICAgZ290byBmb3VuZDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGxvbmdfb25seV9mbGFnKQ0KKyAgICB7DQorICAgICAgICAqbG9uZ19vbmx5X2ZsYWcgPSAxOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgeWFfZ2V0b3B0X2Vycm9yKG9wdHN0cmluZywgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uICclcydcbiIsIGFyZ3ZbMF0sIGFyZ3ZbeWFfb3B0aW5kXSk7DQorICAgICAgICB5YV9vcHRpbmQrKzsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gJz8nOw0KK2ZvdW5kOg0KKyAgICB5YV9vcHRhcmcgPSB2YWw7DQorICAgIHlhX29wdGluZCsrOw0KKw0KKyAgICBpZiAob3B0LT5mbGFnKQ0KKyAgICB7DQorICAgICAgICAqb3B0LT5mbGFnID0gb3B0LT52YWw7DQorICAgIH0NCisNCisgICAgaWYgKGxvbmdpbmRleCkNCisgICAgew0KKyAgICAgICAgKmxvbmdpbmRleCA9IGlkeDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gb3B0LT5mbGFnID8gMCA6IG9wdC0+dmFsOw0KK30NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL3lhX2dldG9wdC5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi95YV9nZXRvcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGMxMjEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi95YV9nZXRvcHQuaApAQCAtMCwwICsxLDc4IEBACisvKiAtKi0gaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQ0KKyAqDQorICogeWFfZ2V0b3B0ICAtIFlldCBhbm90aGVyIGdldG9wdA0KKyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJvL3lhX2dldG9wdA0KKyAqDQorICogQ29weXJpZ2h0IDIwMTUgS3VibyBUYWtlaGlybyA8a3Vib0BqaXViYW8ub3JnPg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlDQorICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZg0KKyAqICAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0DQorICogICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMNCisgKiAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1JTICcnQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQNCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IE9SDQorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYNCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2Ugb2YgdGhlDQorICogYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQNCisgKiBvciBpbXBsaWVkLCBvZiB0aGUgYXV0aG9ycy4NCisgKg0KKyAqLw0KKyNpZm5kZWYgWUFfR0VUT1BUX0gNCisjZGVmaW5lIFlBX0dFVE9QVF9IIDENCisNCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjZGVmaW5lIHlhX25vX2FyZ3VtZW50ICAgICAgICAwDQorI2RlZmluZSB5YV9yZXF1aXJlZF9hcmd1bWVudCAgMQ0KKyNkZWZpbmUgeWFfb3B0aW9uYWxfYXJndW1lbnQgIDINCisNCitzdHJ1Y3Qgb3B0aW9uDQorew0KKyAgICBjb25zdCBjaGFyICpuYW1lOw0KKyAgICBpbnQgaGFzX2FyZzsNCisgICAgaW50ICpmbGFnOw0KKyAgICBpbnQgdmFsOw0KK307DQorDQoraW50IHlhX2dldG9wdChpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcpOw0KK2ludCB5YV9nZXRvcHRfbG9uZyhpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcsDQorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmRleCk7DQoraW50IHlhX2dldG9wdF9sb25nX29ubHkoaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY29uc3QgY2hhciAqb3B0c3RyaW5nLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmRleCk7DQorDQorZXh0ZXJuIGNoYXIgKnlhX29wdGFyZzsNCitleHRlcm4gaW50IHlhX29wdGluZCwgeWFfb3B0ZXJyLCB5YV9vcHRvcHQ7DQorDQorI2lmbmRlZiBZQV9HRVRPUFRfTk9fQ09NUEFUX01BQ1JPDQorI2RlZmluZSBnZXRvcHQgeWFfZ2V0b3B0DQorI2RlZmluZSBnZXRvcHRfbG9uZyB5YV9nZXRvcHRfbG9uZw0KKyNkZWZpbmUgZ2V0b3B0X2xvbmdfb25seSB5YV9nZXRvcHRfbG9uZ19vbmx5DQorI2RlZmluZSBvcHRhcmcgeWFfb3B0YXJnDQorI2RlZmluZSBvcHRpbmQgeWFfb3B0aW5kDQorI2RlZmluZSBvcHRlcnIgeWFfb3B0ZXJyDQorI2RlZmluZSBvcHRvcHQgeWFfb3B0b3B0DQorI2RlZmluZSBub19hcmd1bWVudCB5YV9ub19hcmd1bWVudA0KKyNkZWZpbmUgcmVxdWlyZWRfYXJndW1lbnQgeWFfcmVxdWlyZWRfYXJndW1lbnQNCisjZGVmaW5lIG9wdGlvbmFsX2FyZ3VtZW50IHlhX29wdGlvbmFsX2FyZ3VtZW50DQorI2VuZGlmDQorDQorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL1JFQURNRS5tZCBiL3RoaXJkX3BhcnR5L3RpL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDY3MjgwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMzUgQEAKKyNDQzI2WFh3YXJlCisKKyMjIFVSTAorCitodHRwOi8vd3d3LnRpLmNvbS90b29sL2NjMjZ4eHdhcmUKKworKm5vdGUqOiBUaGlzIHdpbGwgcmVkaXJlY3QgdG8gaHR0cDovL3d3dy50aS5jb20vdG9vbC90aS1ydG9zIGJlY2F1c2UgQ0MyNlhYd2FyZQorICAgICAgICBpcyBubyBsb25nZXIgZGlzdHJpYnV0ZWQgYXMgaXRzIG93biBwYWNrYWdlLgorCisjIyBWZXJzaW9uCisKKzIuMjQuMHgKKworIyMgTGljZW5zZQorCitCU0QtMy1DbGF1c2UKKworIyMgTGljZW5zZSBGaWxlCisKK1tFeHBvcnQgTWFuaWZlc3RdKGNjMjZ4eHdhcmUvY2MyNnh4d2FyZV8yXzI0XzB4X21hbmlmZXN0Lmh0bWwpCisKKyMjIERvY3VtZW50YXRpb24KKworVGhpcyB2ZXJzaW9uIG9mIENDMjZYWHdhcmUgd2FzIGNvcGllZCBmcm9tCitbVEktUlRPU3YyLjIwLjAwLjA2XShodHRwOi8vc29mdHdhcmUtZGwudGkuY29tL2RzcHMvZHNwc19wdWJsaWNfc3cvc2RvX3NiL3RhcmdldGNvbnRlbnQvdGlydG9zLzJfMjBfMDBfMDYvZXhwb3J0cy90aXJ0b3NfZnVsbF8yXzIwXzAwXzA2L2RvY3MvRG9jdW1lbnRhdGlvbl9PdmVydmlld19jYzEzeHhfY2MyNnh4Lmh0bWwpLgorUkYgY29tbWFuZCBmaWxlcyB3ZXJlIGFkZGVkIHRvIHN1cHBvcnQgSUVFRSBtb2RlLiBUaGUgZG9jdW1lbnRhdGlvbiB3YXMgcmVtb3ZlZAorZnJvbSBgY2MyNnh4d2FyZS9kb2NgIGFuZCBjYW4gYmUgZm91bmQKK1toZXJlXShodHRwOi8vc29mdHdhcmUtZGwudGkuY29tL2RzcHMvZHNwc19wdWJsaWNfc3cvc2RvX3NiL3RhcmdldGNvbnRlbnQvdGlydG9zLzJfMjBfMDBfMDYvZXhwb3J0cy90aXJ0b3NfZnVsbF8yXzIwXzAwXzA2L3Byb2R1Y3RzL2NjMjZ4eHdhcmVfMl8yNF8wMl8xNzIwMi9kb2MvZG9jX292ZXJ2aWV3Lmh0bWwpLgorCisjIyBEZXNjcmlwdGlvbgorCitDQzI2WFh3YXJlIGlzIHRoZSBib2FyZCBzdXBwb3J0IGxpYnJhcnkgZm9yIFRleGFzIEluc3RydW1lbnRzJyBDQzI2WDAgbGluZSBvZgorY29ubmVjdGVkIE1DVXMgZm9yIGRldmVsb3BlcnMgdG8gZWFzaWx5IGxldmVyYWdlIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgb2YKK3Rob3NlIHBsYXRmb3Jtcy4gVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIHJlY29tbWVuZHMgVEktUlRPUyBhbmQgaXRzCithc3NvY2lhdGVkIGRyaXZlcnMgZm9yIGZ1dHVyZSBkZXZlbG9wbWVudC4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvY2MyNnh4d2FyZV8yXzI0XzB4X21hbmlmZXN0Lmh0bWwgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2NjMjZ4eHdhcmVfMl8yNF8weF9tYW5pZmVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZTI1YzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2NjMjZ4eHdhcmVfMl8yNF8weF9tYW5pZmVzdC5odG1sCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2FkaS5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYWRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U0ZjJkNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2FkaS5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhZGkuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMTItMTUgMTA6NDA6NTYgKzAxMDAgKFR1ZSwgMTUgRGVjIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDUzMDcKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBBREkgaW50ZXJmYWNlCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19hdXhfc21waC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9hZGkuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvY3B1Lmg+CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFNhZmVIYXBpVm9pZCgpIGFuZCBTYWZlSGFwaUF1eEFkaVNlbGVjdCgpCisvLyBDb21tb24gd3JhcHBlciBmdW5jdGlvbnMgZm9yIHRoZSBIYXBpIGZ1bmN0aW9ucyBuZWVkaW5nIHRoZSAiYnVzIGFyYml0cmF0aW9uCisvLyBpc3N1ZSIgd29ya2Fyb3VuZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkIFNhZmVIYXBpVm9pZCggRlBUUl9WT0lEX1ZPSURfVCBmUHRyICkKK3sKKyAgICBib29sIGJJcnFFbmFibGVkID0gKCAhIENQVWNwc2lkKCkgKTsKKyAgICB3aGlsZSAoICEgSFdSRUcoIEFVWF9TTVBIX0JBU0UgKyBBVVhfU01QSF9PX1NNUEgwICkpOworICAgIGZQdHIoKTsKKyAgICBIV1JFRyggQVVYX1NNUEhfQkFTRSArIEFVWF9TTVBIX09fU01QSDAgKSA9IDE7CisgICAgaWYgKCBiSXJxRW5hYmxlZCApIHsKKyAgICAgICAgQ1BVY3BzaWUoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2FmZUhhcGlBdXhBZGlTZWxlY3QoIEZQVFJfVk9JRF9VSU5UOF9UIGZQdHIsIHVpbnQ4X3QgdXQ4U2lnbmFsICkKK3sKKyAgICBib29sIGJJcnFFbmFibGVkID0gKCAhIENQVWNwc2lkKCkgKTsKKyAgICB3aGlsZSAoICEgSFdSRUcoIEFVWF9TTVBIX0JBU0UgKyBBVVhfU01QSF9PX1NNUEgwICkpOworICAgIGZQdHIoIHV0OFNpZ25hbCApOworICAgIEhXUkVHKCBBVVhfU01QSF9CQVNFICsgQVVYX1NNUEhfT19TTVBIMCApID0gMTsKKyAgICBpZiAoIGJJcnFFbmFibGVkICkgeworICAgICAgICBDUFVjcHNpZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2FkaS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYWRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdmYmFlNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2FkaS5oCkBAIC0wLDAgKzEsOTQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYWRpLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTExLTE2IDE3OjA1OjExICswMTAwIChNb24sIDE2IE5vdiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ1MDg3CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEFESSBtYXN0ZXIgaW50ZXJmYWNlLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBhbmFsb2dfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGFkaV9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0FESV9IX18KKyNkZWZpbmUgX19BRElfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdWFydC5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od19hZGkuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGRpLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBOdW1iZXIgb2YgcmVnaXN0ZXJzIGluIHRoZSBBREkgc2xhdmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9TTEFWRV9SRUdTICAgICAgMTYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBBRElDb25maWdTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX05PX1dBSVQgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEFESV9XQUlUX0ZPUl9BQ0sgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfU1BFRURfMiAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQURJX1NQRUVEXzQgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV9TUEVFRF84ICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfU1BFRURfMTYgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQURJX0NPTkZJR19NQVNLICAgICAweDAwMDAwMDA3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIHRoYXQgaXMgdXNlZCB0byBjb250cm9sIHRoZSBBREkgc2xhdmUgYW5kIG1hc3RlcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX1BST1RFQ1QgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV9BQ0sgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfU1lOQyAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZmRlZiBEUklWRVJMSUJfREVCVUcKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGludGVybmFsCisvLyEgXGJyaWVmIENoZWNrcyBhbiBBREkgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGFuIEFESSBwb3J0IGJhc2UgYWRkcmVzcyBpcyB2YWxpZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBBREkgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIHRoZSBiYXNlIGFkZHJlc3MgaXMgdmFsaWQgYW5kIFxjIGZhbHNlCisvLyEgb3RoZXJ3aXNlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIGJvb2wKK0FESUJhc2VWYWxpZCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICByZXR1cm4odWkzMkJhc2UgPT0gQURJMl9CQVNFIHx8IHVpMzJCYXNlID09IEFESTNfQkFTRSB8fAorICAgICAgICAgICB1aTMyQmFzZSA9PSBBVVhfQURJNF9CQVNFKTsKK30KKyNlbmRpZgorCisKKworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdyaXRlIGFuIDggYml0IHZhbHVlIHRvIGEgcmVnaXN0ZXIgaW4gYW4gQURJIHNsYXZlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHdyaXRlIGEgdmFsdWUgdG8gYSBzaW5nbGUgcmVnaXN0ZXIgaW4gdGhlIGFuYWxvZyBkb21haW4uCisvLyEgVGhlIGFjY2VzcyB0byB0aGUgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluIGlzIGVpdGhlciA4LCAxNiwgb3IgMzIgYml0CisvLyEgYWxpZ25lZC4gWW91IGNhbiBvbmx5IGRvIDE2IGJpdCBhY2Nlc3Mgb24gcmVnaXN0ZXJzIDAtMSAvIDItMywgZXRjLiBTaW1pbGFybHkKKy8vISAzMiBiaXQgYWNjZXNzZXMgYXJlIGFsd2F5cyBwZXJmb3JtZWQgb24gcmVnaXN0ZXIgMC0zIC8gNC03LCBldGMuIEFkZHJlc3NlcworLy8hIGZvciB0aGUgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgYmVpbmcgd3JpdHRlbiB0byB0aGUgcmVnaXN0ZXJzIHdpbGwgYmUKKy8vISB0cnVuY2F0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzIHNjaGVtZS4KKy8vIQorLy8hIFxub3RlIFRoaXMgb3BlcmF0aW9uIGlzIHdyaXRlIG9ubHkgZm9yIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIuIE5vCisvLyEgcHJldmlvdXMgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIHdpbGwgYmUga2VwdCAoaS5lLiB0aGlzIGlzIE5PVAorLy8hIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIHRoZSByZWdpc3RlcikuCisvLyEKKy8vISBcbm90ZSBBVVhfQURJNF9CQVNFIDogQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgQURJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gd3JpdGUuCisvLyEgXHBhcmFtIHVpOFZhbCBpcyB0aGUgOCBiaXQgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQURJMTZSZWdXcml0ZSgpLCBBREkzMlJlZ1dyaXRlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQURJOFJlZ1dyaXRlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCB1aW50OF90IHVpOFZhbCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQURJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBBRElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSB2YWx1ZSB0byB0aGUgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgdWkzMlJlZywgdWk4VmFsLCAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBIV1JFR0IodWkzMkJhc2UgKyB1aTMyUmVnKSA9IHVpOFZhbDsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdyaXRlIGEgMTYgYml0IHZhbHVlIHRvIDIgcmVnaXN0ZXJzIGluIHRoZSBBREkgc2xhdmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgd3JpdGUgYSB2YWx1ZSB0byAyIGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nCisvLyEgZG9tYWluLiBUaGUgYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4gaXMgZWl0aGVyIDgsIDE2CisvLyEgb3IgMzIgYml0IGFsaWduZWQuIFlvdSBjYW4gb25seSBkbyAxNiBiaXQgYWNjZXNzIG9uIHJlZ2lzdGVycyAwLTEgLyAyLTMsCisvLyEgZXRjLiBTaW1pbGFybHkgMzIgYml0IGFjY2Vzc2VzIGFyZSBhbHdheXMgcGVyZm9ybWVkIG9uIHJlZ2lzdGVyIDAtMyAvIDQtNywKKy8vISBldGMuIEFkZHJlc3NlcyBmb3IgdGhlIHJlZ2lzdGVycyBhbmQgdmFsdWVzIGJlaW5nIHdyaXR0ZW4KKy8vISB0byB0aGUgcmVnaXN0ZXJzIHdpbGwgYmUgdHJ1bmNhdGVkIGFjY29yZGluZyB0byB0aGlzIGFjY2VzcyBzY2hlbWUuCisvLyEKKy8vISBcbm90ZSBUaGUgYnl0ZSBhZGRyZXNzaW5nIGJpdCB3aWxsIGJlIGlnbm9yZWQsIHRvIGVuc3VyZSAxNiBiaXQgYWNjZXNzCisvLyEgdG8gdGhlIEFESSBzbGF2ZS4KKy8vIQorLy8hIFxub3RlIFRoaXMgb3BlcmF0aW9uIGlzIHdyaXRlIG9ubHkgZm9yIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIuIE5vCisvLyEgcHJldmlvdXMgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIHdpbGwgYmUga2VwdCAoaS5lLiB0aGlzIGlzIE5PVAorLy8hIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIHRoZSByZWdpc3RlcikuCisvLyEKKy8vISBcbm90ZSBBVVhfQURJNF9CQVNFIDogQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgQURJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gd3JpdGUuCisvLyEgXHBhcmFtIHVpMTZWYWwgaXMgdGhlIDE2IGJpdCB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBREk4UmVnV3JpdGUoKSwgQURJMzJSZWdXcml0ZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FESTE2UmVnV3JpdGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsCisgICAgICAgICAgICAgIHVpbnQxNl90IHVpMTZWYWwpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyUmVnIDwgQURJX1NMQVZFX1JFR1MpOworCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgdmFsdWUgdG8gdGhlIHJlZ2lzdGVyLgorICAgIC8vCisgICAgaWYgKHVpMzJCYXNlPT1BVVhfQURJNF9CQVNFKSB7CisgICAgICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyQmFzZSArICh1aTMyUmVnICYgMHhGRSksIHVpMTZWYWwsIDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEhXUkVHSCh1aTMyQmFzZSArICh1aTMyUmVnICYgMHhGRSkpID0gdWkxNlZhbDsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdyaXRlIGEgMzIgYml0IHZhbHVlIHRvIDQgcmVnaXN0ZXJzIGluIHRoZSBBREkgc2xhdmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgd3JpdGUgYSB2YWx1ZSB0byA0IGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nCisvLyEgZG9tYWluLiBUaGUgYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4gaXMgZWl0aGVyIDgsIDE2CisvLyEgb3IgMzIgYml0IGFsaWduZWQuIFlvdSBjYW4gb25seSBkbyAxNiBiaXQgYWNjZXNzIG9uIHJlZ2lzdGVycyAwLTEgLyAyLTMsCisvLyEgZXRjLiBTaW1pbGFybHkgMzIgYml0IGFjY2Vzc2VzIGFyZSBhbHdheXMgcGVyZm9ybWVkIG9uIHJlZ2lzdGVyIDAtMyAvIDQtNywKKy8vISBldGMuIEFkZHJlc3NlcyBmb3IgdGhlIHJlZ2lzdGVycyBhbmQgdmFsdWVzIGJlaW5nIHdyaXR0ZW4KKy8vISB0byB0aGUgcmVnaXN0ZXJzIHdpbGwgYmUgdHJ1bmNhdGVkIGFjY29yZGluZyB0byB0aGlzIGFjY2VzcyBzY2hlbWUuCisvLyEKKy8vISBcbm90ZSBUaGUgYnl0ZSBhbmQgaGFsZiB3b3JkIGFkZHJlc3NpbmcgYml0cyB3aWxsIGJlIGlnbm9yZWQsIHRvIGVuc3VyZQorLy8hIDMyIGJpdCBhY2Nlc3MgdG8gdGhlIEFESSBzbGF2ZS4KKy8vIQorLy8hIFxub3RlIFRoaXMgb3BlcmF0aW9uIGlzIHdyaXRlIG9ubHkgZm9yIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIuIE5vCisvLyEgcHJldmlvdXMgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIHdpbGwgYmUga2VwdCAoaS5lLiB0aGlzIGlzIE5PVAorLy8hIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIHRoZSByZWdpc3RlcikuCisvLyEKKy8vISBcbm90ZSBBVVhfQURJNF9CQVNFIDogQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgQURJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gd3JpdGUuCisvLyEgXHBhcmFtIHVpMzJWYWwgaXMgdGhlIDMyIGJpdCB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBREk4UmVnV3JpdGUoKSwgQURJMTZSZWdXcml0ZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FESTMyUmVnV3JpdGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsIHVpbnQzMl90IHVpMzJWYWwpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyUmVnIDwgQURJX1NMQVZFX1JFR1MpOworCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgdmFsdWUgdG8gdGhlIHJlZ2lzdGVyLgorICAgIC8vCisgICAgaWYgKHVpMzJCYXNlPT1BVVhfQURJNF9CQVNFKSB7CisgICAgICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyQmFzZSArICh1aTMyUmVnICYgMHhGQyksIHVpMzJWYWwsIDQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgKHVpMzJSZWcgJiAweEZDKSkgPSB1aTMyVmFsOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVhZCB0aGUgdmFsdWUgb2YgYW4gOCBiaXQgcmVnaXN0ZXIgaW4gdGhlIEFESSBzbGF2ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGFuIDggYml0IHJlZ2lzdGVyIGluIHRoZSBhbmFsb2cgZG9tYWluIGFuZCByZXR1cm4KKy8vISB0aGUgdmFsdWUgYXMgdGhlIGxvd2VyIDggYml0cyBvZiBhbiBcYyB1aW50MzJfdC4gVGhlIGFjY2VzcyB0byB0aGUKKy8vISByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4gaXMgZWl0aGVyIDgsIDE2IG9yIDMyIGJpdCBhbGlnbmVkLiBZb3UgY2FuCisvLyEgb25seSBkbyAxNiBiaXQgYWNjZXNzIG9uIHJlZ2lzdGVycyAwLTEgLyAyLTMsIGV0Yy4gU2ltaWxhcmx5IDMyIGJpdCBhY2Nlc3NlcworLy8hIGFyZSBhbHdheXMgcGVyZm9ybWVkIG9uIHJlZ2lzdGVyIDAtMyAvIDQtNywgZXRjLiBBZGRyZXNzZXMgZm9yIHRoZQorLy8hIHJlZ2lzdGVycyBhbmQgdmFsdWVzIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVycyB3aWxsIGJlIHRydW5jYXRlZAorLy8hIGFjY29yZGluZyB0byB0aGlzIGFjY2VzcyBzY2hlbWUuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgQURJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgOCBiaXQgcmVnaXN0ZXIgdG8gcmVhZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgOCBiaXQgdmFsdWUgb2YgdGhlIGFuYWxvZyByZWdpc3RlciBpbiB0aGUgbGVhc3QKKy8vISBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBcYyB1aW50MzJfdC4KKy8vIQorLy8hIFxzYSBBREkxNlJlZ1JlYWQoKSwgQURJMzJSZWdSZWFkKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FESThSZWdSZWFkKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBRElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IEFESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gUmVhZCB0aGUgcmVnaXN0ZXIgYW5kIHJldHVybiB0aGUgdmFsdWUuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgcmV0dXJuIEF1eEFkaURkaVNhZmVSZWFkKHVpMzJCYXNlICsgdWkzMlJlZywgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuKEhXUkVHQih1aTMyQmFzZSArIHVpMzJSZWcpKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlYWQgdGhlIHZhbHVlIGluIGEgMTYgYml0IHJlZ2lzdGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgMiB4IDggYml0IHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nIGRvbWFpbiBhbmQgcmV0dXJuCisvLyEgdGhlIHZhbHVlIGFzIHRoZSBsb3dlciAxNiBiaXRzIG9mIGFuIFxjIHVpbnQzMl90LiBUaGUgYWNjZXNzIHRvIHRoZQorLy8hIHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nIGRvbWFpbiBpcyBlaXRoZXIgOCwgMTYgb3IgMzIgYml0IGFsaWduZWQuIFlvdSBjYW4KKy8vISBvbmx5IGRvIDE2IGJpdCBhY2Nlc3Mgb24gcmVnaXN0ZXJzIDAtMSAvIDItMywgZXRjLiBTaW1pbGFybHkgMzIgYml0IGFjY2Vzc2VzCisvLyEgYXJlIGFsd2F5cyBwZXJmb3JtZWQgb24gcmVnaXN0ZXIgMC0zIC8gNC03LCBldGMuIEFkZHJlc3NlcyBmb3IgdGhlCisvLyEgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgYmVpbmcgd3JpdHRlbiB0byB0aGUgcmVnaXN0ZXJzIHdpbGwgYmUgdHJ1bmNhdGVkCisvLyEgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzIHNjaGVtZS4KKy8vIQorLy8hIFxub3RlIFRoZSBieXRlIGFkZHJlc3NpbmcgYml0IHdpbGwgYmUgaWdub3JlZCwgdG8gZW5zdXJlIDE2IGJpdCBhY2Nlc3MKKy8vISB0byB0aGUgQURJIHNsYXZlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIEFESSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIDE2IGJpdCByZWdpc3RlciB0byByZWFkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSAxNiBiaXQgdmFsdWUgb2YgdGhlIDIgYW5hbG9nIHJlZ2lzdGVyIGluIHRoZSAyIGxlYXN0CisvLyEgc2lnbmlmaWNhbnQgYnl0ZXMgb2YgdGhlIFxjIHVpbnQzMl90LgorLy8hCisvLyEgXHNhIEFESThSZWdSZWFkKCksIEFESTMyUmVnUmVhZCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBREkxNlJlZ1JlYWQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyUmVnIDwgQURJX1NMQVZFX1JFR1MpOworCisgICAgLy8KKyAgICAvLyBSZWFkIHRoZSByZWdpc3RlcnMgYW5kIHJldHVybiB0aGUgdmFsdWUuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgcmV0dXJuIEF1eEFkaURkaVNhZmVSZWFkKHVpMzJCYXNlICsgKHVpMzJSZWcgJiAweEZFKSwgMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuKEhXUkVHSCh1aTMyQmFzZSArICh1aTMyUmVnICYgMHhGRSkpKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlYWQgdGhlIHZhbHVlIGluIGEgMzIgYml0IHJlZ2lzdGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgNCB4IDggYml0IHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nIGRvbWFpbiBhbmQgcmV0dXJuCisvLyEgdGhlIHZhbHVlIGFzIGFuIFxjIHVpbnQzMl90LiBUaGUgYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZworLy8hIGRvbWFpbiBpcyBlaXRoZXIgOCwgMTYgb3IgMzIgYml0IGFsaWduZWQuIFlvdSBjYW4gb25seSBkbyAxNiBiaXQgYWNjZXNzIG9uCisvLyEgcmVnaXN0ZXJzIDAtMSAvIDItMywgZXRjLiBTaW1pbGFybHkgMzIgYml0IGFjY2Vzc2VzIGFyZSBhbHdheXMgcGVyZm9ybWVkIG9uCisvLyEgcmVnaXN0ZXIgMC0zIC8gNC03LCBldGMuIEFkZHJlc3NlcyBmb3IgdGhlIHJlZ2lzdGVycyBhbmQgdmFsdWVzIGJlaW5nCisvLyEgd3JpdHRlbiB0byB0aGUgcmVnaXN0ZXJzIHdpbGwgYmUgdHJ1bmNhdGVkIGFjY29yZGluZyB0byB0aGlzIGFjY2VzcyBzY2hlbWUuCisvLyEKKy8vISBcbm90ZSBUaGUgYnl0ZSBhbmQgaGFsZiB3b3JkIGFkZHJlc3NpbmcgYml0cyB3aWxsIGJlIGlnbm9yZWQsIHRvIGVuc3VyZQorLy8hIDMyIGJpdCBhY2Nlc3MgdG8gdGhlIEFESSBzbGF2ZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBBREkgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSAzMiBiaXQgcmVnaXN0ZXIgdG8gcmVhZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgMzIgYml0IHZhbHVlIG9mIHRoZSA0IGFuYWxvZyByZWdpc3RlcnMuCisvLyEKKy8vISBcc2EgQURJOFJlZ1JlYWQoKSwgQURJMTZSZWdSZWFkKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FESTMyUmVnUmVhZCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQURJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBBRElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIFJlYWQgdGhlIHJlZ2lzdGVycyBhbmQgcmV0dXJuIHRoZSB2YWx1ZS4KKyAgICAvLworICAgIGlmICh1aTMyQmFzZT09QVVYX0FESTRfQkFTRSkgeworICAgICAgICByZXR1cm4gQXV4QWRpRGRpU2FmZVJlYWQodWkzMkJhc2UgKyAodWkzMlJlZyAmIDB4RkMpLCA0KTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4oSFdSRUcodWkzMkJhc2UgKyAodWkzMlJlZyAmIDB4RkMpKSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgc3BlY2lmaWMgYml0cyBpbiBhIHNpbmdsZSA4IGJpdCBBREkgcmVnaXN0ZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGJpdHMgaW4gYSBzaW5nbGUgcmVnaXN0ZXIgaW4gdGhlIGFuYWxvZyBkb21haW4uCisvLyEgVGhlIGFjY2VzcyB0byB0aGUgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluIGlzIGVpdGhlciA4LCAxNiBvciAzMiBiaXQKKy8vISBhbGlnbmVkLCBidXQgYXJyYW5nZWQgaW4gY2h1bmtzIG9mIDMyIGJpdHMuIFlvdSBjYW4gb25seSBkbyAxNiBiaXQgYWNjZXNzCisvLyEgb24gcmVnaXN0ZXJzIDAtMSAvIDItMywgZXRjLiBTaW1pbGFybHkgMzIgYml0IGFjY2Vzc2VzIGFyZSBhbHdheXMKKy8vISBwZXJmb3JtZWQgb24gcmVnaXN0ZXIgMC0zIC8gNC03IGV0Yy4gQWRkcmVzc2VzIGZvciB0aGUgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMKKy8vISBiZWluZyB3cml0dGVuIHRvIHRoZSByZWdpc3RlcnMgd2lsbCBiZSB0cnVuY2F0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzCisvLyEgc2NoZW1lLgorLy8hCisvLyEgXG5vdGUgVGhpcyBvcGVyYXRpb24gaXMgd3JpdGUgb25seSBmb3IgdGhlIHNwZWNpZmllZCByZWdpc3Rlci4KKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IGJpdHMgaW4gYSBzcGVjaWZpYyA4IGJpdCByZWdpc3RlciBpbiB0aGUKKy8vISBBREkgc2xhdmUuIE9ubHkgYml0cyBpbiB0aGUgc2VsZWN0ZWQgcmVnaXN0ZXIgYXJlIGFmZmVjdGVkIGJ5IHRoZQorLy8hIG9wZXJhdGlvbi4KKy8vIQorLy8hIFxub3RlIEFVWF9BREk0X0JBU0UgOiBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBBREkgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSBiYXNlIHJlZ2lzdGVyIHRvIGFzc2VydCB0aGUgYml0cyBpbi4KKy8vISBccGFyYW0gdWk4VmFsIGlzIHRoZSA4IGJpdCBvbmUtaG90IGVuY29kZWQgdmFsdWUgc3BlY2lmeWluZyB3aGljaAorLy8hIGJpdHMgdG8gc2V0IGluIHRoZSByZWdpc3Rlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFESTE2Qml0c1NldCgpLCBBREkzMkJpdHNTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBREk4Qml0c1NldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywgdWludDhfdCB1aThWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBRElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IEFESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHVzZWQgZm9yIHNldHRpbmcgYml0cworICAgIC8vIGluIHRoZSBBREkgc2xhdmUuCisgICAgLy8KKyAgICB1aTMyUmVnT2Zmc2V0ID0gQURJX09fU0VUOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGJpdHMuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCArIHVpMzJSZWcsIHVpOFZhbCwgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSFdSRUdCKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCArIHVpMzJSZWcpID0gdWk4VmFsOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHNwZWNpZmljIGJpdHMgaW4gMiB4IDggYml0IEFESSBzbGF2ZSByZWdpc3RlcnMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGJpdHMgaW4gMiByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4uCisvLyEgVGhlIGFjY2VzcyB0byB0aGUgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluIGlzIGVpdGhlciA4LCAxNiBvciAzMiBiaXQKKy8vISBhbGlnbmVkLCBidXQgYXJyYW5nZWQgaW4gY2h1bmtzIG9mIDMyIGJpdHMuIFlvdSBjYW4gb25seSBkbyAxNiBiaXQgYWNjZXNzCisvLyEgb24gcmVnaXN0ZXJzIDAtMSAvIDItMywgZXRjLiBTaW1pbGFybHkgMzIgYml0IGFjY2Vzc2VzIGFyZSBhbHdheXMKKy8vISBwZXJmb3JtZWQgb24gcmVnaXN0ZXIgMC0zIC8gNC03IGV0Yy4gQWRkcmVzc2VzIGZvciB0aGUgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMKKy8vISBiZWluZyB3cml0dGVuIHRvIHRoZSByZWdpc3RlcnMgd2lsbCBiZSB0cnVuY2F0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzCisvLyEgc2NoZW1lLgorLy8hCisvLyEgXG5vdGUgVGhpcyBvcGVyYXRpb24gaXMgd3JpdGUgb25seSBmb3IgdGhlIHNwZWNpZmllZCByZWdpc3Rlci4KKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IGJpdHMgaW4gMiBjb25zZWN1dGl2ZSA4IGJpdCByZWdpc3RlcnMgaW4gdGhlCisvLyEgQURJIHNsYXZlLiBPbmx5IGJpdHMgaW4gdGhlIHNlbGVjdGVkIHJlZ2lzdGVycyBhcmUgYWZmZWN0ZWQgYnkgdGhlCisvLyEgb3BlcmF0aW9uLgorLy8hCisvLyEgXG5vdGUgQVVYX0FESTRfQkFTRSA6IEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIEFESSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIGJhc2UgcmVnaXN0ZXIgdG8gYXNzZXJ0IHRoZSBiaXRzIGluLgorLy8hIFxwYXJhbSB1aTE2VmFsIGlzIHRoZSAxNiBiaXQgb25lLWhvdCBlbmNvZGVkIHZhbHVlIHNwZWNpZnlpbmcgd2hpY2gKKy8vISBiaXRzIHRvIHNldCBpbiB0aGUgcmVnaXN0ZXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQURJOEJpdHNTZXQoKSwgQURJMzJCaXRzU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQURJMTZCaXRzU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCB1aW50MTZfdCB1aTE2VmFsKQoreworICAgIHVpbnQzMl90IHVpMzJSZWdPZmZzZXQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQURJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBBRElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY29ycmVjdCBhZGRyZXNzIG9mIHRoZSBmaXJzdCByZWdpc3RlciB1c2VkIGZvciBzZXR0aW5nIGJpdHMKKyAgICAvLyBpbiB0aGUgQURJIHNsYXZlLgorICAgIC8vCisgICAgdWkzMlJlZ09mZnNldCA9IEFESV9PX1NFVDsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBiaXRzLgorICAgIC8vCisgICAgaWYgKHVpMzJCYXNlPT1BVVhfQURJNF9CQVNFKSB7CisgICAgICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQgKyAodWkzMlJlZyAmIDB4RkUpLCB1aTE2VmFsLCAyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBIV1JFR0godWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0ICsgKHVpMzJSZWcgJiAweEZFKSkgPSB1aTE2VmFsOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHNwZWNpZmljIGJpdHMgaW4gNCB4IDggYml0IEFESSBzbGF2ZSByZWdpc3RlcnMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGJpdHMgaW4gNCByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4uCisvLyEgVGhlIGFjY2VzcyB0byB0aGUgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluIGlzIGVpdGhlciA4LCAxNiBvciAzMiBiaXQKKy8vISBhbGlnbmVkLCBidXQgYXJyYW5nZWQgaW4gY2h1bmtzIG9mIDMyIGJpdHMuIFlvdSBjYW4gb25seSBkbyAxNiBiaXQgYWNjZXNzCisvLyEgb24gcmVnaXN0ZXJzIDAtMSAvIDItMywgZXRjLiBTaW1pbGFybHkgMzIgYml0IGFjY2Vzc2VzIGFyZSBhbHdheXMKKy8vISBwZXJmb3JtZWQgb24gcmVnaXN0ZXIgMC0zIC8gNC03IGV0Yy4gQWRkcmVzc2VzIGZvciB0aGUgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMKKy8vISBiZWluZyB3cml0dGVuIHRvIHRoZSByZWdpc3RlcnMgd2lsbCBiZSB0cnVuY2F0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzCisvLyEgc2NoZW1lLgorLy8hCisvLyEgXG5vdGUgVGhpcyBvcGVyYXRpb24gaXMgd3JpdGUgb25seSBmb3IgdGhlIHNwZWNpZmllZCByZWdpc3Rlci4KKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IGJpdHMgaW4gNCBjb25zZWN1dGl2ZSA4IGJpdCByZWdpc3RlcnMgaW4gdGhlCisvLyEgQURJIHNsYXZlLiBPbmx5IGJpdHMgaW4gdGhlIHNlbGVjdGVkIHJlZ2lzdGVycyBhcmUgYWZmZWN0ZWQgYnkgdGhlCisvLyEgb3BlcmF0aW9uLgorLy8hCisvLyEgXG5vdGUgQVVYX0FESTRfQkFTRSA6IEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIEFESSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIGJhc2UgcmVnaXN0ZXIgdG8gYXNzZXJ0IHRoZSBiaXRzIGluLgorLy8hIFxwYXJhbSB1aTMyVmFsIGlzIHRoZSAzMiBiaXQgb25lLWhvdCBlbmNvZGVkIHZhbHVlIHNwZWNpZnlpbmcgd2hpY2gKKy8vISBiaXRzIHRvIHNldCBpbiB0aGUgcmVnaXN0ZXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQURJOEJpdHNTZXQoKSwgQURJMTZCaXRzU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQURJMzJCaXRzU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCB1aW50MzJfdCB1aTMyVmFsKQoreworICAgIHVpbnQzMl90IHVpMzJSZWdPZmZzZXQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQURJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBBRElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY29ycmVjdCBhZGRyZXNzIG9mIHRoZSBmaXJzdCByZWdpc3RlciB1c2VkIGZvciBzZXR0aW5nIGJpdHMKKyAgICAvLyBpbiB0aGUgQURJIHNsYXZlLgorICAgIC8vCisgICAgdWkzMlJlZ09mZnNldCA9IEFESV9PX1NFVDsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBiaXRzLgorICAgIC8vCisgICAgaWYgKHVpMzJCYXNlPT1BVVhfQURJNF9CQVNFKSB7CisgICAgICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQgKyAodWkzMlJlZyAmIDB4RkMpLCB1aTMyVmFsLCA0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQgKyAodWkzMlJlZyAmIDB4RkMpKSA9IHVpMzJWYWw7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhciBzcGVjaWZpYyBiaXRzIGluIGFuIDggYml0IEFESSByZWdpc3Rlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBiaXRzIGluIGEgcmVnaXN0ZXIgaW4gdGhlIGFuYWxvZyBkb21haW4uCisvLyEgVGhlIGFjY2VzcyB0byB0aGUgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluIGlzIGVpdGhlciA4LCAxNiBvciAzMiBiaXQKKy8vISBhbGlnbmVkLCBidXQgYXJyYW5nZWQgaW4gY2h1bmtzIG9mIDMyIGJpdHMuIFlvdSBjYW4gb25seSBkbyAxNiBiaXQgYWNjZXNzCisvLyEgb24gcmVnaXN0ZXJzIDAtMSAvIDItMywgZXRjLiBTaW1pbGFybHkgMzIgYml0IGFjY2Vzc2VzIGFyZSBhbHdheXMKKy8vISBwZXJmb3JtZWQgb24gcmVnaXN0ZXIgMC0zIC8gNC03IGV0Yy4gQWRkcmVzc2VzIGZvciB0aGUgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMKKy8vISBiZWluZyB3cml0dGVuIHRvIHRoZSByZWdpc3RlcnMgd2lsbCBiZSB0cnVuY2F0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzCisvLyEgc2NoZW1lLgorLy8hCisvLyEgXG5vdGUgVGhpcyBvcGVyYXRpb24gaXMgd3JpdGUgb25seSBmb3IgdGhlIHNwZWNpZmllZCByZWdpc3Rlci4KKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgYml0cyBpbiBhIHNwZWNpZmljIDggYml0IHJlZ2lzdGVyIGluCisvLyEgdGhlIEFESSBzbGF2ZS4gT25seSBiaXRzIGluIHRoZSBzZWxlY3RlZCByZWdpc3RlciBhcmUgYWZmZWN0ZWQgYnkgdGhlCisvLyEgb3BlcmF0aW9uLgorLy8hCisvLyEgXG5vdGUgQVVYX0FESTRfQkFTRSA6IEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIEFESSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIGJhc2UgcmVnaXN0ZXJzIHRvIGNsZWFyIHRoZSBiaXRzIGluLgorLy8hIFxwYXJhbSB1aThWYWwgaXMgdGhlIDggYml0IG9uZS1ob3QgZW5jb2RlZCB2YWx1ZSBzcGVjaWZ5aW5nIHdoaWNoCisvLyEgYml0cyB0byBjbGVhciBpbiB0aGUgcmVnaXN0ZXIuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBREkxNkJpdHNDbGVhcigpLCBBREkzMkJpdHNDbGVhcigpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FESThCaXRzQ2xlYXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsIHVpbnQ4X3QgdWk4VmFsKQoreworICAgIHVpbnQzMl90IHVpMzJSZWdPZmZzZXQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQURJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBBRElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY29ycmVjdCBhZGRyZXNzIG9mIHRoZSBmaXJzdCByZWdpc3RlciB1c2VkIGZvciBzZXR0aW5nIGJpdHMKKyAgICAvLyBpbiB0aGUgQURJIHNsYXZlLgorICAgIC8vCisgICAgdWkzMlJlZ09mZnNldCA9IEFESV9PX0NMUjsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBiaXRzLgorICAgIC8vCisgICAgaWYgKHVpMzJCYXNlPT1BVVhfQURJNF9CQVNFKSB7CisgICAgICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQgKyB1aTMyUmVnLCB1aThWYWwsIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIEhXUkVHQih1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQgKyB1aTMyUmVnKSA9IHVpOFZhbDsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFyIHNwZWNpZmljIGJpdHMgaW4gdHdvIDggYml0IEFESSByZWdpc3Rlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBiaXRzIGluIDIgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluLgorLy8hIFRoZSBhY2Nlc3MgdG8gdGhlIHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nIGRvbWFpbiBpcyBlaXRoZXIgOCwgMTYgb3IgMzIgYml0CisvLyEgYWxpZ25lZCwgYnV0IGFycmFuZ2VkIGluIGNodW5rcyBvZiAzMiBiaXRzLiBZb3UgY2FuIG9ubHkgZG8gMTYgYml0IGFjY2VzcworLy8hIG9uIHJlZ2lzdGVycyAwLTEgLyAyLTMsIGV0Yy4gU2ltaWxhcmx5IDMyIGJpdCBhY2Nlc3NlcyBhcmUgYWx3YXlzCisvLyEgcGVyZm9ybWVkIG9uIHJlZ2lzdGVyIDAtMyAvIDQtNyBldGMuIEFkZHJlc3NlcyBmb3IgdGhlIHJlZ2lzdGVycyBhbmQgdmFsdWVzCisvLyEgYmVpbmcgd3JpdHRlbiB0byB0aGUgcmVnaXN0ZXJzIHdpbGwgYmUgdHJ1bmNhdGVkIGFjY29yZGluZyB0byB0aGlzIGFjY2VzcworLy8hIHNjaGVtZS4KKy8vIQorLy8hIFxub3RlIFRoaXMgb3BlcmF0aW9uIGlzIHdyaXRlIG9ubHkgZm9yIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIuCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIGJpdHMgaW4gMiBjb25zZWN1dGl2ZSA4IGJpdCByZWdpc3RlcnMgaW4KKy8vISB0aGUgQURJIHNsYXZlLiBPbmx5IGJpdHMgaW4gdGhlIHNlbGVjdGVkIHJlZ2lzdGVycyBhcmUgYWZmZWN0ZWQgYnkgdGhlCisvLyEgb3BlcmF0aW9uLgorLy8hCisvLyEgXG5vdGUgQVVYX0FESTRfQkFTRSA6IEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIEFESSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIGJhc2UgcmVnaXN0ZXJzIHRvIGNsZWFyIHRoZSBiaXRzIGluLgorLy8hIFxwYXJhbSB1aTE2VmFsIGlzIHRoZSAxNiBiaXQgb25lLWhvdCBlbmNvZGVkIHZhbHVlIHNwZWNpZnlpbmcgd2hpY2gKKy8vISBiaXRzIHRvIGNsZWFyIGluIHRoZSByZWdpc3RlcnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBREk4Qml0c0NsZWFyKCksIEFESTMyQml0c0NsZWFyKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQURJMTZCaXRzQ2xlYXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsIHVpbnQxNl90IHVpMTZWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBRElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IEFESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHVzZWQgZm9yIHNldHRpbmcgYml0cworICAgIC8vIGluIHRoZSBBREkgc2xhdmUuCisgICAgLy8KKyAgICB1aTMyUmVnT2Zmc2V0ID0gQURJX09fQ0xSOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGJpdHMuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCArICh1aTMyUmVnICYgMHhGRSksIHVpMTZWYWwsIDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEhXUkVHSCh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQgKyAodWkzMlJlZyAmIDB4RkUpKSA9IHVpMTZWYWw7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhciBzcGVjaWZpYyBiaXRzIGluIGZvdXIgOCBiaXQgQURJIHJlZ2lzdGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIGJpdHMgaW4gNCByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4uCisvLyEgVGhlIGFjY2VzcyB0byB0aGUgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluIGlzIGVpdGhlciA4LCAxNiBvciAzMiBiaXQKKy8vISBhbGlnbmVkLCBidXQgYXJyYW5nZWQgaW4gY2h1bmtzIG9mIDMyIGJpdHMuIFlvdSBjYW4gb25seSBkbyAxNiBiaXQgYWNjZXNzCisvLyEgb24gcmVnaXN0ZXJzIDAtMSAvIDItMywgZXRjLiBTaW1pbGFybHkgMzIgYml0IGFjY2Vzc2VzIGFyZSBhbHdheXMKKy8vISBwZXJmb3JtZWQgb24gcmVnaXN0ZXIgMC0zIC8gNC03IGV0Yy4gQWRkcmVzc2VzIGZvciB0aGUgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMKKy8vISBiZWluZyB3cml0dGVuIHRvIHRoZSByZWdpc3RlcnMgd2lsbCBiZSB0cnVuY2F0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzCisvLyEgc2NoZW1lLgorLy8hCisvLyEgXG5vdGUgVGhpcyBvcGVyYXRpb24gaXMgd3JpdGUgb25seSBmb3IgdGhlIHNwZWNpZmllZCByZWdpc3Rlci4KKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgYml0cyBpbiA0IGNvbnNlY3V0aXZlIDggYml0IHJlZ2lzdGVycyBpbgorLy8hIHRoZSBBREkgc2xhdmUuIE9ubHkgYml0cyBpbiB0aGUgc2VsZWN0ZWQgcmVnaXN0ZXJzIGFyZSBhZmZlY3RlZCBieSB0aGUKKy8vISBvcGVyYXRpb24uCisvLyEKKy8vISBcbm90ZSBBVVhfQURJNF9CQVNFIDogQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgQURJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgYmFzZSByZWdpc3RlcnMgdG8gY2xlYXIgdGhlIGJpdHMgaW4uCisvLyEgXHBhcmFtIHVpMzJWYWwgaXMgdGhlIDMyIGJpdCBvbmUtaG90IGVuY29kZWQgdmFsdWUgc3BlY2lmeWluZyB3aGljaAorLy8hIGJpdHMgdG8gY2xlYXIgaW4gdGhlIHJlZ2lzdGVycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFESThCaXRzQ2xlYXIoKSwgQURJMTZCaXRzQ2xlYXIoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBREkzMkJpdHNDbGVhcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywgdWludDMyX3QgdWkzMlZhbCkKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnT2Zmc2V0OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyUmVnIDwgQURJX1NMQVZFX1JFR1MpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcmVnaXN0ZXIgdXNlZCBmb3Igc2V0dGluZyBiaXRzCisgICAgLy8gaW4gdGhlIEFESSBzbGF2ZS4KKyAgICAvLworICAgIHVpMzJSZWdPZmZzZXQgPSBBRElfT19DTFI7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgc2VsZWN0ZWQgYml0cy4KKyAgICAvLworICAgIGlmICh1aTMyQmFzZT09QVVYX0FESTRfQkFTRSkgeworICAgICAgICBBdXhBZGlEZGlTYWZlV3JpdGUodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0ICsgKHVpMzJSZWcgJiAweEZDKSwgdWkzMlZhbCwgNCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0ICsgKHVpMzJSZWcgJiAweEZDKSkgPSB1aTMyVmFsOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IGEgdmFsdWUgb24gYW55IDQgYml0cyBpbnNpZGUgYW4gOCBiaXQgcmVnaXN0ZXIgaW4gdGhlIEFESSBzbGF2ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGhhbGZieXRlICg0IGJpdCkgYWNjZXNzIHRvIHRoZSBBREkgc2xhdmUgcmVnaXN0ZXJzLgorLy8hIFRoZSBwYXJhbWV0ZXIgXGMgYldyaXRlSGlnaCBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gd3JpdGUgdG8gdGhlIGxvd2VyCisvLyEgb3IgaGlnaGVyIHBhcnQgb2YgdGhlIDggYml0IHJlZ2lzdGVyLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gd3JpdGUgYW55IHZhbHVlIGluIHRoZSByYW5nZSAwLTMgYml0cyBhbGlnbmVkIG9uIGEKKy8vISBoYWxmIGJ5dGUgYm91bmRhcnkuIEZ4LiBmb3Igd3JpdGluZyB0aGUgdmFsdWUgMGIxMDEgdG8gYml0cyAxIHRvIDMgdGhlCisvLyEgXGMgdWk4VmFsID0gMHhBIGFuZCB0aGUgXGMgdWk4TWFzayA9IDB4RS4gQml0IDAgd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkKKy8vISB0aGUgb3BlcmF0aW9uLCBhcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgbm90IHNldCBpbiB0aGUgXGMgdWk4TWFzay4KKy8vIQorLy8hIFxub3RlIEFVWF9BREk0X0JBU0UgOiBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBBREkgcG9ydC4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgTGVhc3QgU2lnbmlmaWNhbnQgUmVnaXN0ZXIgaW4gdGhlIEFESSBzbGF2ZSB0aGF0CisvLyEgd2lsbCBiZSBhZmZlY3RlZCBieSB0aGUgd3JpdGUgb3BlcmF0aW9uLgorLy8hIFxwYXJhbSBiV3JpdGVIaWdoIGRlZmluZXMgd2hpY2ggcGFydCBvZiB0aGUgcmVnaXN0ZXIgdG8gd3JpdGUgaW4uCisvLyEgLSBcYyB0cnVlOiBXcml0ZSB1cHBlciBoYWxmIGJ5dGUgb2YgcmVnaXN0ZXIuCisvLyEgLSBcYyBmYWxzZTogV3JpdGUgbG93ZXIgaGFsZiBieXRlIG9mIHJlZ2lzdGVyLgorLy8hIFxwYXJhbSB1aThNYXNrIGlzIHRoZSBtYXNrIGRlZmluaW5nIHdoaWNoIG9mIHRoZSA0IGJpdHMgdGhhdCBzaG91bGQgYmUKKy8vISBvdmVyd3JpdHRlbi4gVGhlIG1hc2sgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBsb3dlciBoYWxmIG9mIHRoZSA4IGJpdHMgb2YKKy8vISB0aGUgcGFyYW1ldGVyLgorLy8hIFxwYXJhbSB1aThWYWwgaXMgdGhlIHZhbHVlIHRvIHdyaXRlLiBUaGUgdmFsdWUgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBsb3dlcgorLy8hIGhhbGYgb2YgdGhlIDggYml0cyBvZiB0aGUgcGFyYW1ldGVyLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQURJOFNldFZhbEJpdCgpLCBBREkxNlNldFZhbEJpdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBREk0U2V0VmFsQml0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCBib29sIGJXcml0ZUhpZ2gsCisgICAgICAgICAgICAgIHVpbnQ4X3QgdWk4TWFzaywgdWludDhfdCB1aThWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBRElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IEFESV9TTEFWRV9SRUdTKTsKKyAgICBBU1NFUlQoISh1aThWYWwgJiAweEYwKSk7CisgICAgQVNTRVJUKCEodWk4TWFzayAmIDB4RjApKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHVzZWQgZm9yIHNldHRpbmcgYml0cworICAgIC8vIGluIHRoZSBBREkgc2xhdmUuCisgICAgLy8KKyAgICB1aTMyUmVnT2Zmc2V0ID0gQURJX09fTUFTSzRCICsgKHVpMzJSZWcgPDwgMSkgKyAoYldyaXRlSGlnaCA/IDEgOiAwKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBiaXRzLgorICAgIC8vCisgICAgaWYgKHVpMzJCYXNlPT1BVVhfQURJNF9CQVNFKSB7CisgICAgICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQsICh1aThNYXNrIDw8IDQpIHwgdWk4VmFsLCAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBIV1JFR0IodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0KSA9ICh1aThNYXNrIDw8IDQpIHwgdWk4VmFsOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IGEgdmFsdWUgb24gYW55IGJpdHMgaW5zaWRlIGFuIDggYml0IHJlZ2lzdGVyIGluIHRoZSBBREkgc2xhdmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGFsbG93cyBieXRlICg4IGJpdCkgYWNjZXNzIHRvIHRoZSBBREkgc2xhdmUgcmVnaXN0ZXJzLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gd3JpdGUgYW55IHZhbHVlIGluIHRoZSByYW5nZSAwLTcgYml0cyBhbGlnbmVkIG9uIGEKKy8vISBieXRlIGJvdW5kYXJ5LiBGeC4gZm9yIHdyaXRpbmcgdGhlIHZhbHVlIDBiMTAxIHRvIGJpdHMgMSBhbmQgMyB0aGUKKy8vISBcYyB1aTE2VmFsID0gMHgwQSBhbmQgdGhlIFxjIHVpMTZNYXNrID0gMHgwRS4gQml0cyAwIGFuZCA1LTcgd2lsbCBub3QgYmUgYWZmZWN0ZWQKKy8vISBieSB0aGUgb3BlcmF0aW9uLCBhcyB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGFyZSBub3Qgc2V0IGluIHRoZQorLy8hIFxjIHVpMTZNYXNrLgorLy8hCisvLyEgXG5vdGUgQVVYX0FESTRfQkFTRSA6IEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFESSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSBMZWFzdCBTaWduaWZpY2FudCBSZWdpc3RlciBpbiB0aGUgQURJIHNsYXZlIHRoYXQKKy8vISB3aWxsIGJlIGFmZmVjdGVkIGJ5IHRoZSB3cml0ZSBvcGVyYXRpb24uCisvLyEgXHBhcmFtIHVpMTZNYXNrIGlzIHRoZSBtYXNrIGRlZmluaW5nIHdoaWNoIG9mIHRoZSA4IGJpdCB0aGF0IHNob3VsZCBiZQorLy8hIG92ZXJ3cml0dGVuLiBUaGUgbWFzayBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxvd2VyIGhhbGYgb2YgdGhlIDE2IGJpdHMuCisvLyEgXHBhcmFtIHVpMTZWYWwgaXMgdGhlIHZhbHVlIHRvIHdyaXRlLiBUaGUgdmFsdWUgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBsb3dlcgorLy8hIGhhbGYgb2YgdGhlIDE2IGJpdHMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBREk0U2V0VmFsQml0KCksIEFESTE2U2V0VmFsQml0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQURJOFNldFZhbEJpdCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywgdWludDE2X3QgdWkxNk1hc2ssCisgICAgICAgICAgICAgIHVpbnQxNl90IHVpMTZWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBRElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IEFESV9TTEFWRV9SRUdTKTsKKyAgICBBU1NFUlQoISh1aTE2VmFsICYgMHhGRjAwKSk7CisgICAgQVNTRVJUKCEodWkxNk1hc2sgJiAweEZGMDApKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHVzZWQgZm9yIHNldHRpbmcgYml0cworICAgIC8vIGluIHRoZSBBREkgc2xhdmUuCisgICAgLy8KKyAgICB1aTMyUmVnT2Zmc2V0ID0gQURJX09fTUFTSzhCICsgKHVpMzJSZWcgPDwgMSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgc2VsZWN0ZWQgYml0cy4KKyAgICAvLworICAgIGlmICh1aTMyQmFzZT09QVVYX0FESTRfQkFTRSkgeworICAgICAgICBBdXhBZGlEZGlTYWZlV3JpdGUodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0LCAodWkxNk1hc2sgPDwgOCkgfCB1aTE2VmFsLCAyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBIV1JFR0godWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0KSA9ICh1aTE2TWFzayA8PCA4KSB8IHVpMTZWYWw7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgYSB2YWx1ZSBvbiBhbnkgYml0cyBpbnNpZGUgYW4gMiB4IDggYml0IHJlZ2lzdGVyIGFsaWduZWQgb24gYQorLy8hIGhhbGYtd29yZCAoYnl0ZSkgYm91bmRhcnkgaW4gdGhlIEFESSBzbGF2ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gYWxsb3dzIDIgYnl0ZSAoMTYgYml0KSBhY2Nlc3MgdG8gdGhlIEFESSBzbGF2ZSByZWdpc3RlcnMuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byB3cml0ZSBhbnkgdmFsdWUgaW4gdGhlIHJhbmdlIDAtMTUgYml0cyBhbGlnbmVkIG9uIGEKKy8vISBoYWxmLXdvcmQgKGJ5dGUpIGJvdW5kYXJ5LiBGeC4gZm9yIHdyaXRpbmcgdGhlIHZhbHVlIDBiMTAxIHRvIGJpdHMgMSBhbmQgMyB0aGUKKy8vISBcYyB1aTMyVmFsID0gMHgwMDBBIGFuZCB0aGUgXGMgdWkzMk1hc2sgPSAweDAwMEUuIEJpdHMgMCBhbmQgNS0xNSB3aWxsIG5vdAorLy8hIGJlIGFmZmVjdGVkIGJ5IHRoZSBvcGVyYXRpb24sIGFzIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgYXJlIG5vdCBzZXQKKy8vISBpbiB0aGUgXGMgdWkzMk1hc2suCisvLyEKKy8vISBcbm90ZSBBVVhfQURJNF9CQVNFIDogQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgQURJIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIExlYXN0IFNpZ25pZmljYW50IFJlZ2lzdGVyIGluIHRoZSBBREkgc2xhdmUgdGhhdAorLy8hIHdpbGwgYmUgYWZmZWN0ZWQgYnkgdGhlIHdyaXRlIG9wZXJhdGlvbi4KKy8vISBccGFyYW0gdWkzMk1hc2sgaXMgdGhlIG1hc2sgZGVmaW5pbmcgd2hpY2ggb2YgdGhlIDE2IGJpdCB0aGF0IHNob3VsZCBiZQorLy8hIG92ZXJ3cml0dGVuLiBUaGUgbWFzayBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxvd2VyIGhhbGYgb2YgdGhlIDMyIGJpdHMuCisvLyEgXHBhcmFtIHVpMzJWYWwgaXMgdGhlIHZhbHVlIHRvIHdyaXRlLiBUaGUgdmFsdWUgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBsb3dlcgorLy8hIGhhbGYgb2YgdGhlIDMyIGJpdHMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBREk0U2V0VmFsQml0KCksIEFESThTZXRWYWxCaXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBREkxNlNldFZhbEJpdCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywgdWludDMyX3QgdWkzMk1hc2ssCisgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyVmFsKQoreworICAgIHVpbnQzMl90IHVpMzJSZWdPZmZzZXQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQURJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBBRElfU0xBVkVfUkVHUyk7CisgICAgQVNTRVJUKCEodWkzMlZhbCAmIDB4RkZGRjAwMDApKTsKKyAgICBBU1NFUlQoISh1aTMyTWFzayAmIDB4RkZGRjAwMDApKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHVzZWQgZm9yIHNldHRpbmcgYml0cworICAgIC8vIGluIHRoZSBBREkgc2xhdmUuCisgICAgLy8KKyAgICB1aTMyUmVnT2Zmc2V0ID0gQURJX09fTUFTSzE2QiArICgodWkzMlJlZyA8PCAxKSAmIDB4RkMpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGJpdHMuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCwgKHVpMzJNYXNrIDw8IDE2KSB8IHVpMzJWYWwsIDQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCkgPSAodWkzMk1hc2sgPDwgMTYpIHwgdWkzMlZhbDsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gIF9fQURJX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hZGlfZG9jLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hZGlfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkYzU3YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2FkaV9kb2MuaApAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYWRpX2RvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0zMCAxMzowMzo1OSArMDIwMCAoV2VkLCAzMCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk3MQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vISBcYWRkdG9ncm91cCBhZGlfYXBpCisvLyEgQHsKKy8vISBcc2VjdGlvbiBzZWNfYWRpIEludHJvZHVjdGlvbgorLy8hIFxuCisvLyEKKy8vISBcc2VjdGlvbiBzZWNfYWRpX2FwaSBBUEkKKy8vIQorLy8hIFRoZSBBUEkgZnVuY3Rpb25zIGNhbiBiZSBncm91cGVkIGxpa2UgdGhpczoKKy8vIQorLy8hIFdyaXRlOgorLy8hIC0gRGlyZWN0IChhbGwgYml0cyk6CisvLyEgICAtIFxyZWYgQURJOFJlZ1dyaXRlKCkKKy8vISAgIC0gXHJlZiBBREkxNlJlZ1dyaXRlKCkKKy8vISAgIC0gXHJlZiBBREkzMlJlZ1dyaXRlKCkKKy8vISAtIFNldCBpbmRpdmlkdWFsIGJpdHM6CisvLyEgICAtIFxyZWYgQURJOEJpdHNTZXQoKQorLy8hICAgLSBccmVmIEFESTE2Qml0c1NldCgpCisvLyEgICAtIFxyZWYgQURJMzJCaXRzU2V0KCkKKy8vISAtIENsZWFyIGluZGl2aWR1YWwgYml0czoKKy8vISAgIC0gXHJlZiBBREk4Qml0c0NsZWFyKCkKKy8vISAgIC0gXHJlZiBBREkxNkJpdHNDbGVhcigpCisvLyEgICAtIFxyZWYgQURJMzJCaXRzQ2xlYXIoKQorLy8hIC0gTWFza2VkOgorLy8hICAgLSBccmVmIEFESTRTZXRWYWxCaXQoKQorLy8hICAgLSBccmVmIEFESThTZXRWYWxCaXQoKQorLy8hICAgLSBccmVmIEFESTE2U2V0VmFsQml0KCkKKy8vIQorLy8hIFJlYWQ6CisvLyEgLSBccmVmIEFESThSZWdSZWFkKCkKKy8vISAtIFxyZWYgQURJMTZSZWdSZWFkKCkKKy8vISAtIFxyZWYgQURJMzJSZWdSZWFkKCkKKy8vIQorLy8hIEB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fYmF0bW9uLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fYmF0bW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmZjA1MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9iYXRtb24uYwpAQCAtMCwwICsxLDg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX2JhdG1vbi5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMi0wNyAxNjoyMjo1NiArMDEwMCAoTW9uLCAwNyBEZWMgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTI2OQorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIEFPTiBCYXR0ZXJ5IGFuZCBUZW1wZXJhdHVyZSBNb25pdG9yCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl9iYXRtb24uaD4KKyNpbmNsdWRlIDxpbmMvaHdfZmNmZzEuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIEFPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQworICAgICNkZWZpbmUgQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDICAgICBOT1JPTV9BT05CYXRNb25UZW1wZXJhdHVyZUdldERlZ0MKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDKCkKKy8vIFJldHVybnMgc2lnbiBleHRlbmRlZCB0ZW1wZXJhdHVyZSBpbiBEZWcgQyAoLTI1NiAuLiArMjU1KQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDMyX3QKK0FPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQyggdm9pZCApCit7CisgICBpbnQzMl90ICBzaWduZWRUZW1wICAgICAgICA7IC8vIFNpZ25lZCBleHRlbmRlZCB0ZW1wZXJhdHVyZSB3aXRoIDggZnJhY3Rpb25hbCBiaXRzCisgICBpbnQzMl90ICB0ZW1wQ29ycmVjdGlvbiAgICA7IC8vIFZvbHRhZ2UgZGVwZW5kZW50IHRlbXAgY29ycmVjdGlvbiB3aXRoIDggZnJhY3Rpb25hbCBiaXRzCisgICBpbnQ4X3QgICB2b2x0YWdlU2xvcGUgICAgICA7IC8vIFNpZ25lZCBieXRlIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgVEVNUCBzbG9wZSB3aXRoIGJhdHRlcnkgdm9sdGFnZSwgaW4gZGVncmVlcyBDL1YsIHdpdGggNCBmcmFjdGlvbmFsIGJpdHMuCisKKyAgIC8vCisgICAvLyBTaGlmdCBsZWZ0IHRoZW4gcmlnaHQgdG8gc2lnbiBleHRlbmQgdGhlIEJBVE1PTl9URU1QIGZpZWxkCisgICAvLworICAgc2lnbmVkVGVtcCA9ICgoKChpbnQzMl90KUhXUkVHKCBBT05fQkFUTU9OX0JBU0UgKyBBT05fQkFUTU9OX09fVEVNUCApKQorICAgICA8PCAoIDMyIC0gQU9OX0JBVE1PTl9URU1QX0lOVF9XIC0gQU9OX0JBVE1PTl9URU1QX0lOVF9TICkpCisgICAgID4+ICggMzIgLSBBT05fQkFUTU9OX1RFTVBfSU5UX1cgLSBBT05fQkFUTU9OX1RFTVBfSU5UX1MgKSk7CisKKyAgIC8vCisgICAvLyBUeXBlY2FzdGluZyB2b2x0YWdlU2xvcGUgdG8gaW50OF90IHByaW9yIHRvIGFzc2lnbm1lbnQgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIHNpZ24gZXh0ZW5zaW9uIHdvcmtzIHByb3Blcmx5CisgICAvLyBVc2luZyBieXRlIHJlYWQgKEhXUkVHQikgaW4gb3JkZXIgdG8gbWFrZSBtb3JlIGVmZmljaWVudCBjb2RlIHNpbmNlIHZvbHRhZ2VTbG9wZSBpcyBhc3NpZ25lZCB0byBiaXRzWzc6MF0gb2YgRkNGRzFfT19NSVNDX1RSSU0KKyAgIC8vCisgICB2b2x0YWdlU2xvcGUgICAgICA9ICgoaW50OF90KUhXUkVHQiggRkNGRzFfQkFTRSArIEZDRkcxX09fTUlTQ19UUklNICkpOworICAgdGVtcENvcnJlY3Rpb24gICAgPSAoKCB2b2x0YWdlU2xvcGUgKiAoKChpbnQzMl90KUhXUkVHKCBBT05fQkFUTU9OX0JBU0UgKyBBT05fQkFUTU9OX09fQkFUICkpIC0gMHgzMDAgKSkgPj4gNCApOworCisgICByZXR1cm4gKCgoIHNpZ25lZFRlbXAgLSB0ZW1wQ29ycmVjdGlvbiApICsgMHg4MCApID4+IDggKTsKK30KKworCisvLyBTZWUgYW9uX2JhdG1vbi5oIGZvciBpbXBsZW1lbnRhdGlvbiBvZiByZW1haW5pbmcgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fYmF0bW9uLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fYmF0bW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiMTY0NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9iYXRtb24uaApAQCAtMCwwICsxLDMyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGFvbl9iYXRtb24uaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMjcgMTI6NDc6MTkgKzAyMDAgKEZyaSwgMjcgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDY1MzUKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgQU9OIEJhdHRlcnkgYW5kIFRlbXBlcmF0dXJlCisqICAgICAgICAgICAgICAgICAgTW9uaXRvcgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBhb25fZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGFvbmJhdG1vbl9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0FPTl9CQVRNT05fSF9fCisjZGVmaW5lIF9fQU9OX0JBVE1PTl9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX2JhdG1vbi5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBBT05CYXRNb25UZW1wZXJhdHVyZUdldERlZ0MgICAgIE5PUk9NX0FPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQworI2VuZGlmCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSB0aGUgdGVtcGVyYXR1cmUgYW5kIGJhdHRlcnkgbW9uaXRvcmluZy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBlbmFibGUgdGhlIG1lYXN1cmVtZW50cyBvZiB0aGUgdGVtcGVyYXR1cmUgYW5kIHRoZQorLy8hIGJhdHRlcnkgdm9sdGFnZS4KKy8vIQorLy8hIFRvIHNwZWVkIHVwIHRoZSBtZWFzdXJlbWVudCBvZiB0aGUgbGV2ZWxzIHRoZSBtZWFzdXJlbWVudCBjYW4gYmUgZW5hYmxlZAorLy8hIGJlZm9yZSBjb25maWd1cmluZyB0aGUgYmF0dGVyeSBhbmQgdGVtcGVyYXR1cmUgc2V0dGluZ3MuIFdoZW4gYWxsIG9mIHRoZQorLy8hIEFPTl9CQVRNT04gcmVnaXN0ZXJzIGFyZSBjb25maWd1cmVkLCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIHZvbHRhZ2UgYW5kCisvLyEgdGVtcGVyYXR1cmUgdmFsdWVzIGNhbiBiZSBlbmFibGVkICh0aGUgbWVhc3VyZW1lbnQgd2lsbCBub3cgdGFrZQorLy8hIGVmZmVjdC9wcm9wYWdhdGUgdG8gb3RoZXIgYmxvY2tzKS4KKy8vIQorLy8hIEl0IGlzIHBvc3NpYmxlIHRvIGVuYWJsZSBib3RoIGF0IHRoZSBzYW1lIHRpbWUsIGFmdGVyIHRoZSBBT05fQkFUTU9OCisvLyEgcmVnaXN0ZXJzIGFyZSBjb25maWd1cmVkLCBidXQgdGhlbiB0aGUgZmlyc3QgdmFsdWVzIHdpbGwgYmUgcmVhZHkgYXQgYQorLy8hIGxhdGVyIHBvaW50IGNvbXBhcmVkIHRvIHRoZSBzY2VuYXJpbyBhYm92ZS4KKy8vIQorLy8hIFxub3RlIFRlbXBlcmF0dXJlIGFuZCBiYXR0ZXJ5IHZvbHRhZ2UgbWVhc3VyZW1lbnRzIGFyZSBub3QgZG9uZSBpbgorLy8hIHBhcmFsbGVsLiBUaGUgbWVhc3VyZW1lbnQgY3ljbGUgaXMgY29udHJvbGxlZCBieSBhIGhhcmR3YXJlIEZpbml0ZSBTdGF0ZQorLy8hIE1hY2hpbmUuIEZpcnN0IHRoZSB0ZW1wZXJhdHVyZSBhbmQgdGhlbiB0aGUgYmF0dGVyeSB2b2x0YWdlIGVhY2ggdGFraW5nCisvLyEgb25lIGN5Y2xlIHRvIGNvbXBsZXRlLiBIb3dldmVyLCBpZiB0aGUgY29tcGFyYXRvciBtZWFzdXJpbmcgdGhlIGJhdHRlcnkKKy8vISB2b2x0YWdlIGRldGVjdHMgYSBjaGFuZ2Ugb24gdGhlIHJlZmVyZW5jZSB2YWx1ZSwgYSBuZXcgbWVhc3VyZW1lbnQgb2YgdGhlCisvLyEgYmF0dGVyeSB2b2x0YWdlIG9ubHkgaXMgcGVyZm9ybWVkIGltbWVkaWF0ZWx5IGFmdGVyLiBUaGlzIGhhcyBubyBpbXBhY3Qgb24KKy8vISB0aGUgY3ljbGUgY291bnQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OQmF0TW9uRW5hYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIG1lYXN1cmVtZW50cy4KKyAgICAvLworICAgIEhXUkVHKEFPTl9CQVRNT05fQkFTRSArIEFPTl9CQVRNT05fT19DVEwpID0KKyAgICAgICAgQU9OX0JBVE1PTl9DVExfQ0FMQ19FTiB8CisgICAgICAgIEFPTl9CQVRNT05fQ1RMX01FQVNfRU47Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGUgdGhlIHRlbXBlcmF0dXJlIGFuZCBiYXR0ZXJ5IG1vbml0b3JpbmcuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgZGlzYWJsZSB0aGUgbWVhc3VyZW1lbnRzIG9mIHRoZSB0ZW1wZXJhdHVyZSBhbmQgdGhlCisvLyEgYmF0dGVyeSB2b2x0YWdlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTkJhdE1vbkRpc2FibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIG1lYXN1cmVtZW50cy4KKyAgICAvLworICAgIEhXUkVHKEFPTl9CQVRNT05fQkFTRSArIEFPTl9CQVRNT05fT19DVEwpID0gMDsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQgYXMgYSBzaWduZWQgdmFsdWUgaW4gRGVnIENlbHNpdXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gY2FsaWJyYXRlZCBhbmQgcm91bmRlZCB2YWx1ZSBpbiBkZWdyZWUgQ2Vsc2l1cy4KKy8vISBUaGUgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnRzIGFyZSB1cGRhdGVkIGV2ZXJ5IGN5Y2xlLgorLy8hCisvLyEgXG5vdGUgVGhlIHRlbXBlcmF0dXJlIGRyaWZ0cyBzbGlnaHRseSBkZXBlbmRpbmcgb24gdGhlIGJhdHRlcnkgdm9sdGFnZS4KKy8vISBUaGlzIGZ1bmN0aW9uIGNvbXBlbnNhdGVzIGZvciB0aGlzIGRyaWZ0IGFuZCByZXR1cm5zIGEgY2FsaWJyYXRlZCB0ZW1wZXJhdHVyZS4KKy8vIQorLy8hIFxub3RlIFVzZSB0aGUgZnVuY3Rpb24gQU9OQmF0TW9uTmV3VGVtcE1lYXN1cmVSZWFkeSgpIHRvIHRlc3QgZm9yIGEgbmV3IG1lYXN1cmVtZW50LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHNpZ25lZCBpbnRlZ2VyIHBhcnQgb2YgdGVtcGVyYXR1cmUgaW4gRGVnIEMgKC0yNTYgLi4gKzI1NSkKKy8vIQorLy8hIFxzYSBBT05CYXRNb25OZXdUZW1wTWVhc3VyZVJlYWR5KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gaW50MzJfdCBBT05CYXRNb25UZW1wZXJhdHVyZUdldERlZ0MoIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBiYXR0ZXJ5IG1vbml0b3IgbWVhc3VyZW1lbnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IGJhdHRlcnkgbW9uaXRvciBtZWFzdXJlbWVudC4KKy8vISBUaGUgYmF0dGVyeSB2b2x0YWdlIG1lYXN1cmVtZW50cyBhcmUgdXBkYXRlZCBldmVyeSBjeWNsZS4KKy8vIQorLy8hIFxub3RlIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBOT1Qgc2lnbi1leHRlbmRlZCEKKy8vIQorLy8hIFxub3RlIFVzZSB0aGUgZnVuY3Rpb24gXHJlZiBBT05CYXRNb25OZXdCYXR0ZXJ5TWVhc3VyZVJlYWR5KCkgdG8gdGVzdCBmb3IKKy8vISBhIGNoYW5nZSBpbiBtZWFzdXJlbWVudC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBiYXR0ZXJ5IG1vbml0b3IgdmFsdWUgb2YgdGhlIGJhdHRlcnkgdm9sdGFnZQorLy8hIG1lYXN1cmVtZW50IGluIGEgPGludC5mcmFjPiBmb3JtYXQgc2l6ZSA8My44PiBpbiB1bml0cyBvZiB2b2x0LgorLy8hCisvLyEgXHNhIEFPTkJhdE1vbk5ld0JhdHRlcnlNZWFzdXJlUmVhZHkoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQU9OQmF0TW9uQmF0dGVyeVZvbHRhZ2VHZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyQ3VycmVudEJhdHRlcnk7CisKKyAgICB1aTMyQ3VycmVudEJhdHRlcnkgPSBIV1JFRyhBT05fQkFUTU9OX0JBU0UgKyBBT05fQkFUTU9OX09fQkFUKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGJhdHRlcnkgdm9sdGFnZSBtZWFzdXJlbWVudC4KKyAgICAvLworICAgIHJldHVybiAodWkzMkN1cnJlbnRCYXR0ZXJ5ID4+IEFPTl9CQVRNT05fQkFUX0ZSQUNfUyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENoZWNrIGlmIGJhdHRlcnkgbW9uaXRvciBtZWFzdXJlbWVudCBoYXMgY2hhbmdlZC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgbmV3IGJhdHRlcnkgbW9uaXRvciB2YWx1ZSBpcyBhdmFpbGFibGUuIElmIHRoZQorLy8hIG1lYXN1cmVtZW50IHZhbHVlIGhhcyBcYiBjaGFuZ2VkIHNpbmNlIGxhc3QgY2xlYXIgdGhlIGZ1bmN0aW9uIHJldHVybnMgXGMgdHJ1ZS4KKy8vIQorLy8hIElmIHRoZSBtZWFzdXJlbWVudCBoYXMgY2hhbmdlZCB0aGUgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZQorLy8hIHN0YXR1cyBiaXQuCisvLyEKKy8vISBcbm90ZSBJdCBpcyBhbHdheXMgcG9zc2libGUgdG8gcmVhZCBvdXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlCisvLyEgYmF0dGVyeSBsZXZlbCB1c2luZyBBT05CYXRNb25CYXR0ZXJ5Vm9sdGFnZUdldCgpIGJ1dCB0aGlzIGZ1bmN0aW9uIGNhbiBiZQorLy8hIHVzZWQgdG8gY2hlY2sgaWYgdGhlIG1lYXN1cmVtZW50IGhhcyBjaGFuZ2VkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIFxjIHRydWUgaWYgdGhlIG1lYXN1cmVtZW50IHZhbHVlIGhhcyBjaGFuZ2VkIGFuZCBcYyBmYWxzZQorLy8hIG90aGVyd2lzZS4KKy8vIQorLy8hIFxzYSBBT05CYXRNb25OZXdUZW1wTWVhc3VyZVJlYWR5KCksIEFPTkJhdE1vbkJhdHRlcnlWb2x0YWdlR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQU9OQmF0TW9uTmV3QmF0dGVyeU1lYXN1cmVSZWFkeSh2b2lkKQoreworICAgIGJvb2wgYlN0YXR1czsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIHN0YXR1cyBiaXQuCisgICAgLy8KKyAgICBiU3RhdHVzID0gSFdSRUcoQU9OX0JBVE1PTl9CQVNFICsgQU9OX0JBVE1PTl9PX0JBVFVQRCkgJgorICAgICAgICAgICAgICBBT05fQkFUTU9OX0JBVFVQRF9TVEFUID8gdHJ1ZSA6IGZhbHNlOworCisgICAgLy8KKyAgICAvLyBDbGVhciBzdGF0dXMgYml0IGlmIHNldC4KKyAgICAvLworICAgIGlmKGJTdGF0dXMpCisgICAgeworICAgICAgICBIV1JFRyhBT05fQkFUTU9OX0JBU0UgKyBBT05fQkFUTU9OX09fQkFUVVBEKSA9IDE7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXR1cm4gc3RhdHVzLgorICAgIC8vCisgICAgcmV0dXJuIChiU3RhdHVzKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2sgaWYgdGVtcGVyYXR1cmUgbW9uaXRvciBtZWFzdXJlbWVudCBoYXMgY2hhbmdlZC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgbmV3IHRlbXBlcmF0dXJlIHZhbHVlIGlzIGF2YWlsYWJsZS4gSWYgdGhlCisvLyEgbWVhc3VyZW1lbnQgdmFsdWUgaGFzIFxiIGNoYW5nZWQgc2luY2UgbGFzdCBjbGVhciB0aGUgZnVuY3Rpb24gcmV0dXJucyBcYyB0cnVlLgorLy8hCisvLyEgSWYgdGhlIG1lYXN1cmVtZW50IGhhcyBjaGFuZ2VkIHRoZSBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgY2xlYXIgdGhlCisvLyEgc3RhdHVzIGJpdC4KKy8vIQorLy8hIFxub3RlIEl0IGlzIGFsd2F5cyBwb3NzaWJsZSB0byByZWFkIG91dCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKKy8vISB0ZW1wZXJhdHVyZSB1c2luZyBccmVmIEFPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQygpCisvLyEgYnV0IHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY2hlY2sgaWYgdGhlIG1lYXN1cmVtZW50IGhhcyBjaGFuZ2VkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIFxjIHRydWUgaWYgdGhlIG1lYXN1cmVtZW50IHZhbHVlIGhhcyBjaGFuZ2VkIGFuZCBcYyBmYWxzZQorLy8hIG90aGVyd2lzZS4KKy8vIQorLy8hIFxzYSBBT05CYXRNb25OZXdCYXR0ZXJ5TWVhc3VyZVJlYWR5KCksIEFPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0FPTkJhdE1vbk5ld1RlbXBNZWFzdXJlUmVhZHkodm9pZCkKK3sKKyAgICBib29sIGJTdGF0dXM7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBzdGF0dXMgYml0LgorICAgIC8vCisgICAgYlN0YXR1cyA9IEhXUkVHKEFPTl9CQVRNT05fQkFTRSArIEFPTl9CQVRNT05fT19URU1QVVBEKSAmCisgICAgICAgICAgICAgIEFPTl9CQVRNT05fVEVNUFVQRF9TVEFUID8gdHJ1ZSA6IGZhbHNlOworCisgICAgLy8KKyAgICAvLyBDbGVhciBzdGF0dXMgYml0IGlmIHNldC4KKyAgICAvLworICAgIGlmKGJTdGF0dXMpCisgICAgeworICAgICAgICBIV1JFRyhBT05fQkFUTU9OX0JBU0UgKyBBT05fQkFUTU9OX09fVEVNUFVQRCkgPSAxOworICAgIH0KKworICAgIC8vCisgICAgLy8gUmV0dXJuIHN0YXR1cy4KKyAgICAvLworICAgIHJldHVybiAoYlN0YXR1cyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0FPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQworICAgICAgICAjdW5kZWYgIEFPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQworICAgICAgICAjZGVmaW5lIEFPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQyAgICAgUk9NX0FPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQworICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gIF9fQU9OX0JBVE1PTl9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2V2ZW50LmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGVlMDFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2V2ZW50LmMKQEAgLTAsMCArMSwzMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhb25fZXZlbnQuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMDQgMTY6NDk6MzggKzAxMDAgKEZyaSwgMDQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU4NzQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBBT04gRXZlbnQgZmFicmljLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9hb25fZXZlbnQuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIEFPTkV2ZW50TWN1V2FrZVVwU2V0CisgICAgI2RlZmluZSBBT05FdmVudE1jdVdha2VVcFNldCAgICAgICAgICAgIE5PUk9NX0FPTkV2ZW50TWN1V2FrZVVwU2V0CisgICAgI3VuZGVmICBBT05FdmVudE1jdVdha2VVcEdldAorICAgICNkZWZpbmUgQU9ORXZlbnRNY3VXYWtlVXBHZXQgICAgICAgICAgICBOT1JPTV9BT05FdmVudE1jdVdha2VVcEdldAorICAgICN1bmRlZiAgQU9ORXZlbnRBdXhXYWtlVXBTZXQKKyAgICAjZGVmaW5lIEFPTkV2ZW50QXV4V2FrZVVwU2V0ICAgICAgICAgICAgTk9ST01fQU9ORXZlbnRBdXhXYWtlVXBTZXQKKyAgICAjdW5kZWYgIEFPTkV2ZW50QXV4V2FrZVVwR2V0CisgICAgI2RlZmluZSBBT05FdmVudEF1eFdha2VVcEdldCAgICAgICAgICAgIE5PUk9NX0FPTkV2ZW50QXV4V2FrZVVwR2V0CisgICAgI3VuZGVmICBBT05FdmVudE1jdVNldAorICAgICNkZWZpbmUgQU9ORXZlbnRNY3VTZXQgICAgICAgICAgICAgICAgICBOT1JPTV9BT05FdmVudE1jdVNldAorICAgICN1bmRlZiAgQU9ORXZlbnRNY3VHZXQKKyAgICAjZGVmaW5lIEFPTkV2ZW50TWN1R2V0ICAgICAgICAgICAgICAgICAgTk9ST01fQU9ORXZlbnRNY3VHZXQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFNlbGVjdCBldmVudCBzb3VyY2UgZm9yIHRoZSBzcGVjaWZpZWQgTUNVIHdha2V1cCBwcm9ncmFtbWFibGUgZXZlbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBT05FdmVudE1jdVdha2VVcFNldCh1aW50MzJfdCB1aTMyTUNVV1VFdmVudCwgdWludDMyX3QgdWkzMkV2ZW50U3JjKQoreworICAgIHVpbnQzMl90IHVpMzJDdHJsOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyTUNVV1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX1dVMCkgfHwKKyAgICAgICAgICAgKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UxKSB8fAorICAgICAgICAgICAodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTIpIHx8CisgICAgICAgICAgICh1aTMyTUNVV1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX1dVMykpOworICAgIEFTU0VSVCh1aTMyRXZlbnRTcmMgPD0gQU9OX0VWRU5UX05PTkUpOworCisgICAgdWkzMkN0cmwgPSBIV1JFRyhBT05fRVZFTlRfQkFTRSArIEFPTl9FVkVOVF9PX01DVVdVU0VMKTsKKworICAgIGlmKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UwKQorICAgIHsKKyAgICAgICAgdWkzMkN0cmwgJj0gfihBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX00pOworICAgICAgICB1aTMyQ3RybCB8PSAodWkzMkV2ZW50U3JjICYgMHgzZikgPDwgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9TOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UxKQorICAgIHsKKyAgICAgICAgdWkzMkN0cmwgJj0gfihBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX00pOworICAgICAgICB1aTMyQ3RybCB8PSAodWkzMkV2ZW50U3JjICYgMHgzZikgPDwgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9TOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UyKQorICAgIHsKKyAgICAgICAgdWkzMkN0cmwgJj0gfihBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX00pOworICAgICAgICB1aTMyQ3RybCB8PSAodWkzMkV2ZW50U3JjICYgMHgzZikgPDwgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9TOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UzKQorICAgIHsKKyAgICAgICAgdWkzMkN0cmwgJj0gfihBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX00pOworICAgICAgICB1aTMyQ3RybCB8PSAodWkzMkV2ZW50U3JjICYgMHgzZikgPDwgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9TOworICAgIH0KKworICAgIEhXUkVHKEFPTl9FVkVOVF9CQVNFICsgQU9OX0VWRU5UX09fTUNVV1VTRUwpID0gdWkzMkN0cmw7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IGV2ZW50IHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZCBNQ1Ugd2FrZXVwIHByb2dyYW1tYWJsZSBldmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitBT05FdmVudE1jdVdha2VVcEdldCh1aW50MzJfdCB1aTMyTUNVV1VFdmVudCkKK3sKKyAgICB1aW50MzJfdCB1aTMyRXZlbnRTcmM7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UwKSB8fAorICAgICAgICAgICAodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTEpIHx8CisgICAgICAgICAgICh1aTMyTUNVV1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX1dVMikgfHwKKyAgICAgICAgICAgKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UzKSk7CisKKyAgICB1aTMyRXZlbnRTcmMgPSBIV1JFRyhBT05fRVZFTlRfQkFTRSArIEFPTl9FVkVOVF9PX01DVVdVU0VMKTsKKworICAgIGlmKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UwKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCh1aTMyRXZlbnRTcmMgJiBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX00pID4+CisgICAgICAgICAgICAgICBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1MpOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UxKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCh1aTMyRXZlbnRTcmMgJiBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX00pID4+CisgICAgICAgICAgICAgICBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1MpOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UyKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCh1aTMyRXZlbnRTcmMgJiBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX00pID4+CisgICAgICAgICAgICAgICBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1MpOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UzKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCh1aTMyRXZlbnRTcmMgJiBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX00pID4+CisgICAgICAgICAgICAgICBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1MpOworICAgIH0KKworICAgIC8vCisgICAgLy8gU2hvdWxkIG5ldmVyIGdldCB0byB0aGlzIHN0YXRlbWVudCwgYnV0IHN1cHByZXNzIHdhcm5pbmcuCisgICAgLy8KKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuKDApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFNlbGVjdCBldmVudCBzb3VyY2UgZm9yIHRoZSBzcGVjaWZpZWQgQVVYIHdha2V1cCBwcm9ncmFtbWFibGUgZXZlbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBT05FdmVudEF1eFdha2VVcFNldCh1aW50MzJfdCB1aTMyQVVYV1VFdmVudCwgdWludDMyX3QgdWkzMkV2ZW50U3JjKQoreworICAgIHVpbnQzMl90IHVpMzJDdHJsOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyQVVYV1VFdmVudCA9PSBBT05fRVZFTlRfQVVYX1dVMCkgfHwKKyAgICAgICAgICAgKHVpMzJBVVhXVUV2ZW50ID09IEFPTl9FVkVOVF9BVVhfV1UxKSB8fAorICAgICAgICAgICAodWkzMkFVWFdVRXZlbnQgPT0gQU9OX0VWRU5UX0FVWF9XVTIpKTsKKyAgICBBU1NFUlQodWkzMkV2ZW50U3JjIDw9IEFPTl9FVkVOVF9OT05FKTsKKworICAgIHVpMzJDdHJsID0gSFdSRUcoQU9OX0VWRU5UX0JBU0UgKyBBT05fRVZFTlRfT19BVVhXVVNFTCk7CisKKyAgICBpZih1aTMyQVVYV1VFdmVudCA9PSBBT05fRVZFTlRfQVVYX1dVMCkKKyAgICB7CisgICAgICAgIHVpMzJDdHJsICY9IH4oQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9NKTsKKyAgICAgICAgdWkzMkN0cmwgfD0gKHVpMzJFdmVudFNyYyAmIDB4M2YpIDw8IEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUzsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyQVVYV1VFdmVudCA9PSBBT05fRVZFTlRfQVVYX1dVMSkKKyAgICB7CisgICAgICAgIHVpMzJDdHJsICY9IH4oQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9NKTsKKyAgICAgICAgdWkzMkN0cmwgfD0gKHVpMzJFdmVudFNyYyAmIDB4M2YpIDw8IEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUzsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyQVVYV1VFdmVudCA9PSBBT05fRVZFTlRfQVVYX1dVMikKKyAgICB7CisgICAgICAgIHVpMzJDdHJsICY9IH4oQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9NKTsKKyAgICAgICAgdWkzMkN0cmwgfD0gKHVpMzJFdmVudFNyYyAmIDB4M2YpIDw8IEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUzsKKyAgICB9CisKKyAgICBIV1JFRyhBT05fRVZFTlRfQkFTRSArIEFPTl9FVkVOVF9PX0FVWFdVU0VMKSA9IHVpMzJDdHJsOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldCBldmVudCBzb3VyY2UgZm9yIHRoZSBzcGVjaWZpZWQgQVVYIHdha2V1cCBwcm9ncmFtbWFibGUgZXZlbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQU9ORXZlbnRBdXhXYWtlVXBHZXQodWludDMyX3QgdWkzMkFVWFdVRXZlbnQpCit7CisgICAgdWludDMyX3QgdWkzMkV2ZW50U3JjOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyQVVYV1VFdmVudCA9PSBBT05fRVZFTlRfQVVYX1dVMCkgfHwKKyAgICAgICAgICAgKHVpMzJBVVhXVUV2ZW50ID09IEFPTl9FVkVOVF9BVVhfV1UxKSB8fAorICAgICAgICAgICAodWkzMkFVWFdVRXZlbnQgPT0gQU9OX0VWRU5UX0FVWF9XVTIpKTsKKworICAgIHVpMzJFdmVudFNyYyA9IEhXUkVHKEFPTl9FVkVOVF9CQVNFICsgQU9OX0VWRU5UX09fQVVYV1VTRUwpOworCisgICAgaWYodWkzMkFVWFdVRXZlbnQgPT0gQU9OX0VWRU5UX0FVWF9XVTApCisgICAgeworICAgICAgICByZXR1cm4oKHVpMzJFdmVudFNyYyAmIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfTSkgPj4KKyAgICAgICAgICAgICAgIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUyk7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkFVWFdVRXZlbnQgPT0gQU9OX0VWRU5UX0FVWF9XVTEpCisgICAgeworICAgICAgICByZXR1cm4oKHVpMzJFdmVudFNyYyAmIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfTSkgPj4KKyAgICAgICAgICAgICAgIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUyk7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkFVWFdVRXZlbnQgPT0gQU9OX0VWRU5UX0FVWF9XVTIpCisgICAgeworICAgICAgICByZXR1cm4oKHVpMzJFdmVudFNyYyAmIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfTSkgPj4KKyAgICAgICAgICAgICAgIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUyk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTaG91bGQgbmV2ZXIgZ2V0IHRvIHRoaXMgc3RhdGVtZW50LCBidXQgc3VwcHJlc3Mgd2FybmluZy4KKyAgICAvLworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2VsZWN0IGV2ZW50IHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZCBwcm9ncmFtbWFibGUgZXZlbnQgZm9yd2FyZGVkIHRvIHRoZQorLy8hIE1DVSBldmVudCBmYWJyaWMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBT05FdmVudE1jdVNldCh1aW50MzJfdCB1aTMyTUNVRXZlbnQsIHVpbnQzMl90IHVpMzJFdmVudFNyYykKK3sKKyAgICB1aW50MzJfdCB1aTMyQ3RybDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMk1DVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfRVZFTlQwKSB8fAorICAgICAgICAgICAodWkzMk1DVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfRVZFTlQxKSB8fAorICAgICAgICAgICAodWkzMk1DVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfRVZFTlQyKSk7CisgICAgQVNTRVJUKHVpMzJFdmVudFNyYyA8PSBBT05fRVZFTlRfTk9ORSk7CisKKyAgICB1aTMyQ3RybCA9IEhXUkVHKEFPTl9FVkVOVF9CQVNFICsgQU9OX0VWRU5UX09fRVZUT01DVVNFTCk7CisKKyAgICBpZih1aTMyTUNVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9FVkVOVDApCisgICAgeworICAgICAgICB1aTMyQ3RybCAmPSB+KEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9NKTsKKyAgICAgICAgdWkzMkN0cmwgfD0gKHVpMzJFdmVudFNyYyAmIDB4M2YpIDw8IEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9TOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJNQ1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX0VWRU5UMSkKKyAgICB7CisgICAgICAgIHVpMzJDdHJsICY9IH4oQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX00pOworICAgICAgICB1aTMyQ3RybCB8PSAodWkzMkV2ZW50U3JjICYgMHgzZikgPDwgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1M7CisgICAgfQorICAgIGVsc2UgaWYodWkzMk1DVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfRVZFTlQyKQorICAgIHsKKyAgICAgICAgdWkzMkN0cmwgJj0gfihBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfTSk7CisgICAgICAgIHVpMzJDdHJsIHw9ICh1aTMyRXZlbnRTcmMgJiAweDNmKSA8PCBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUzsKKyAgICB9CisKKyAgICBIV1JFRyhBT05fRVZFTlRfQkFTRSArIEFPTl9FVkVOVF9PX0VWVE9NQ1VTRUwpID0gdWkzMkN0cmw7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZCBwcm9ncmFtbWFibGUgZXZlbnQgZm9yd2FyZGVkIHRvIHRoZSBNQ1UgZXZlbnQKKy8vISBmYWJyaWMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0FPTkV2ZW50TWN1R2V0KHVpbnQzMl90IHVpMzJNQ1VFdmVudCkKK3sKKyAgICB1aW50MzJfdCB1aTMyRXZlbnRTcmM7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJNQ1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX0VWRU5UMCkgfHwKKyAgICAgICAgICAgKHVpMzJNQ1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX0VWRU5UMSkgfHwKKyAgICAgICAgICAgKHVpMzJNQ1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX0VWRU5UMikpOworCisgICAgdWkzMkV2ZW50U3JjID0gSFdSRUcoQU9OX0VWRU5UX0JBU0UgKyBBT05fRVZFTlRfT19FVlRPTUNVU0VMKTsKKworICAgIGlmKHVpMzJNQ1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX0VWRU5UMCkKKyAgICB7CisgICAgICAgIHJldHVybigodWkzMkV2ZW50U3JjICYgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX00pID4+CisgICAgICAgICAgICAgICBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUyk7CisgICAgfQorICAgIGVsc2UgaWYodWkzMk1DVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfRVZFTlQxKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCh1aTMyRXZlbnRTcmMgJiBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfTSkgPj4KKyAgICAgICAgICAgICAgIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9TKTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyTUNVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9FVkVOVDIpCisgICAgeworICAgICAgICByZXR1cm4oKHVpMzJFdmVudFNyYyAmIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9NKSA+PgorICAgICAgICAgICAgICAgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1MpOworICAgIH0KKworICAgIC8vCisgICAgLy8gU2hvdWxkIG5ldmVyIGdldCB0byB0aGlzIHN0YXRlbWVudCwgYnV0IHN1cHByZXNzIHdhcm5pbmcuCisgICAgLy8KKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuKDApOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2V2ZW50LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2NkNDQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2V2ZW50LmgKQEAgLTAsMCArMSw2MzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhb25fZXZlbnQuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTEgMTk6MDg6NTggKzAxMDAgKEZyaSwgMTEgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MTcKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgQU9OIEV2ZW50IGZhYnJpYy4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgYW9uX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBhb25ldmVudF9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0FPTl9FVkVOVF9IX18KKyNkZWZpbmUgX19BT05fRVZFTlRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2RldmljZS5oPgorI2luY2x1ZGUgPGluYy9od19hb25fZXZlbnQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgQU9ORXZlbnRNY3VXYWtlVXBTZXQgICAgICAgICAgICBOT1JPTV9BT05FdmVudE1jdVdha2VVcFNldAorICAgICNkZWZpbmUgQU9ORXZlbnRNY3VXYWtlVXBHZXQgICAgICAgICAgICBOT1JPTV9BT05FdmVudE1jdVdha2VVcEdldAorICAgICNkZWZpbmUgQU9ORXZlbnRBdXhXYWtlVXBTZXQgICAgICAgICAgICBOT1JPTV9BT05FdmVudEF1eFdha2VVcFNldAorICAgICNkZWZpbmUgQU9ORXZlbnRBdXhXYWtlVXBHZXQgICAgICAgICAgICBOT1JPTV9BT05FdmVudEF1eFdha2VVcEdldAorICAgICNkZWZpbmUgQU9ORXZlbnRNY3VTZXQgICAgICAgICAgICAgICAgICBOT1JPTV9BT05FdmVudE1jdVNldAorICAgICNkZWZpbmUgQU9ORXZlbnRNY3VHZXQgICAgICAgICAgICAgICAgICBOT1JPTV9BT05FdmVudE1jdUdldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBFdmVudCBzb3VyY2VzIGZvciB0aGUgZXZlbnQgQU9OIGZhYnJpYy4KKy8vIE5vdGU6IEV2ZW50cyBhcmUgbGV2ZWwtdHJpZ2dlcmVkIGFjdGl2ZSBoaWdoCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQU9OX0VWRU5UX0RJTzAgICAgICAgICAgICAgICAgICAgICAgLy8gRWRnZSBkZXRlY3Qgb24gRElPMC4gU2VlIGh3X2RldmljZS5oIGZvciBESU8tdG8tUEFEIG1hcHBpbmcuCisvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi4KKy8vIEFPTl9FVkVOVF9ESU8zMSAgICAgICAgICAgICAgICAgICAgIC8vIEVkZ2UgZGV0ZWN0IG9uIERJTzMxLiBTZWUgaHdfZGV2aWNlLmggZm9yIERJTy10by1QQUQgbWFwcGluZy4KKyNkZWZpbmUgQU9OX0VWRU5UX0lPICAgICAgICAgICAgICAgIDMyIC8vIEVkZ2UgZGV0ZWN0IG9uIGFueSBESU8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZW50IElEIDMzIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFdmVudCBJRCAzNCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorI2RlZmluZSBBT05fRVZFTlRfUlRDX0NIMCAgICAgICAgICAgMzUgLy8gUlRDIGNoYW5uZWwgMAorI2RlZmluZSBBT05fRVZFTlRfUlRDX0NIMSAgICAgICAgICAgMzYgLy8gUlRDIGNoYW5uZWwgMQorI2RlZmluZSBBT05fRVZFTlRfUlRDX0NIMiAgICAgICAgICAgMzcgLy8gUlRDIGNoYW5uZWwgMgorI2RlZmluZSBBT05fRVZFTlRfUlRDX0NIMF9ETFkgICAgICAgMzggLy8gUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ19DSDFfRExZICAgICAgIDM5IC8vIFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisjZGVmaW5lIEFPTl9FVkVOVF9SVENfQ0gyX0RMWSAgICAgICA0MCAvLyBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorI2RlZmluZSBBT05fRVZFTlRfUlRDX0NPTUJfRExZICAgICAgNDEgLy8gUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ19VUEQgICAgICAgICAgIDQyIC8vIFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKyNkZWZpbmUgQU9OX0VWRU5UX0pUQUcgICAgICAgICAgICAgIDQzIC8vIEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhfU1dFVjAgICAgICAgICA0NCAvLyBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhfU1dFVjEgICAgICAgICA0NSAvLyBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhfU1dFVjIgICAgICAgICA0NiAvLyBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhfQ09NUEEgICAgICAgICA0NyAvLyBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorI2RlZmluZSBBT05fRVZFTlRfQVVYX0NPTVBCICAgICAgICAgNDggLy8gQ29tcGFyYXRvciBCIHRyaWdnZXJlZCAoc3luY2hyb25pemVkIGluIEFVWCkKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWF9BRENfRE9ORSAgICAgIDQ5IC8vIEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorI2RlZmluZSBBT05fRVZFTlRfQVVYX1REQ19ET05FICAgICAgNTAgLy8gVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWF9USU1FUjBfRVYgICAgIDUxIC8vIFRpbWVyIDAgZXZlbnQKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWF9USU1FUjFfRVYgICAgIDUyIC8vIFRpbWVyIDEgZXZlbnQKKyNkZWZpbmUgQU9OX0VWRU5UX0JBVE1PTl9URU1QICAgICAgIDUzIC8vIEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKyNkZWZpbmUgQU9OX0VWRU5UX0JBVE1PTl9WT0xUICAgICAgIDU0IC8vIEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorI2RlZmluZSBBT05fRVZFTlRfQVVYX0NPTVBCX0FTWU5DICAgNTUgLy8gQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkNfTiA1NiAvLyBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFdmVudCBJRCA1Ny02MiBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorI2RlZmluZSBBT05fRVZFTlRfTk9ORSAgICAgICAgICAgICAgNjMgLy8gTm8gZXZlbnQsIGFsd2F5cyBsb3cKKworLy8KKy8vIEtlZXBpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB1bnRpbCBtYWpvciByZXZpc2lvbiBudW1iZXIgaXMgaW5jcmVtZW50ZWQKKy8vCisjZGVmaW5lIEFPTl9FVkVOVF9SVEMwICAgICAoIEFPTl9FVkVOVF9SVENfQ0gwICkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gQU9ORXZlbnRNQ1VXYWtlVXBTZXQoKSBhbmQgcmV0dXJuZWQKKy8vIGJ5IEFPTkV2ZW50TUNVV2FrZVVwR2V0KCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBT05fRVZFTlRfTUNVX1dVMCAwICAgICAvLyBQcm9ncmFtbWFibGUgTUNVIHdha2V1cCBldmVudCAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VfV1UxIDEgICAgIC8vIFByb2dyYW1tYWJsZSBNQ1Ugd2FrZXVwIGV2ZW50IDEKKyNkZWZpbmUgQU9OX0VWRU5UX01DVV9XVTIgMiAgICAgLy8gUHJvZ3JhbW1hYmxlIE1DVSB3YWtldXAgZXZlbnQgMgorI2RlZmluZSBBT05fRVZFTlRfTUNVX1dVMyAzICAgICAvLyBQcm9ncmFtbWFibGUgTUNVIHdha2V1cCBldmVudCAzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIEFPTkV2ZW50QXV4V2FrZVVwU2V0KCkgYW5kIEFPTkV2ZW50QXV4V2FrZVVwR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhfV1UwIDAgICAgIC8vIFByb2dyYW1tYWJsZSBBVVggd2FrZXVwIGV2ZW50IDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWF9XVTEgMSAgICAgLy8gUHJvZ3JhbW1hYmxlIEFVWCB3YWtldXAgZXZlbnQgMQorI2RlZmluZSBBT05fRVZFTlRfQVVYX1dVMiAyICAgICAvLyBQcm9ncmFtbWFibGUgQVVYIHdha2V1cCBldmVudCAyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIEFPTkV2ZW50TWN1U2V0KCkgYW5kIEFPTkV2ZW50TWN1R2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VfRVZFTlQwIDAgIC8vIFByb2dyYW1tYWJsZSBldmVudCBzb3VyY2UgZmVkIHRvIE1DVSBldmVudCBmYWJyaWMgKGZpcnN0IG9mIDMpCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VfRVZFTlQxIDEgIC8vIFByb2dyYW1tYWJsZSBldmVudCBzb3VyY2UgZmVkIHRvIE1DVSBldmVudCBmYWJyaWMgKHNlY29uZCBvZiAzKQorI2RlZmluZSBBT05fRVZFTlRfTUNVX0VWRU5UMiAyICAvLyBQcm9ncmFtbWFibGUgZXZlbnQgc291cmNlIGZlZCB0byBNQ1UgZXZlbnQgZmFicmljICh0aGlyZCBvZiAzKQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2VsZWN0IGV2ZW50IHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZCBNQ1Ugd2FrZXVwIHByb2dyYW1tYWJsZSBldmVudC4KKy8vIQorLy8hIFRoZSBBT04gZXZlbnQgZmFicmljIGhhcyBhIHRvdGFsIG9mIGZvdXIgcHJvZ3JhbW1hYmxlIGV2ZW50cyB0aGF0IGNhbgorLy8hIHdha2UtdXAgdGhlIE1DVS4gVGhlIGV2ZW50cyBhcmUgZm9yd2FyZGVkIHRvIHRoZSB3YWtldXAgY29udHJvbGxlciAoV1VDKS4KKy8vIQorLy8hIFxub3RlIFRoZSBmb3VyIHByb2dyYW1tYWJsZSBldmVudCBzb3VyY2VzIGFyZSBlZmZlY3RpdmVseSBPUidlZCB0b2dldGhlcgorLy8hICB0byBmb3JtIGEgc2luZ2xlIHdha2UtdXAgZXZlbnQgZm9yd2FyZGVkIHRvIHRoZSBXVUMuCisvLyEKKy8vISBccGFyYW0gdWkzMk1DVVdVRXZlbnQgaXMgb25lIG9mIGZvdXIgcHJvZ3JhbW1hYmxlIE1DVSB3YWtldXAgZXZlbnQgc291cmNlcy4KKy8vISAtIFxyZWYgQU9OX0VWRU5UX01DVV9XVTAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX01DVV9XVTEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX01DVV9XVTIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX01DVV9XVTMKKy8vISBccGFyYW0gdWkzMkV2ZW50U3JjIGlzIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhlIGV2ZW50IEFPTiBmYWJyaWMuCisvLyEgLSBBT05fRVZFTlRfRElPMCAgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzAuIFNlZSBod19kZXZpY2UuaAorLy8hIC0gLi4uCisvLyEgLSBBT05fRVZFTlRfRElPMzEgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzMxLiBTZWUgaHdfZGV2aWNlLmgKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0lPICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gYW55IERJTworLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMCAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gxICAgICAgICAgICA6IFJUQyBjaGFubmVsIDEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDIgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMF9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMV9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMl9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NPTUJfRExZICAgICAgOiBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX1VQRCAgICAgICAgICAgOiBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZSB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9KVEFHICAgICAgICAgICAgICA6IEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjAgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMSAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYyICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEEgICAgICAgICA6IENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEIgICAgICAgICA6IENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQURDX0RPTkUgICAgICA6IEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1REQ19ET05FICAgICAgOiBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1RJTUVSMF9FViAgICAgOiBUaW1lciAwIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVElNRVIxX0VWICAgICA6IFRpbWVyIDEgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0JBVE1PTl9URU1QICAgICAgIDogQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQkFUTU9OX1ZPTFQgICAgICAgOiBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQyAgIDogQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkNfTiA6IENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX05PTkUgICAgICAgICAgICAgIDogTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFPTkV2ZW50TWN1V2FrZVVwR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBT05FdmVudE1jdVdha2VVcFNldCh1aW50MzJfdCB1aTMyTUNVV1VFdmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJFdmVudFNyYyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBldmVudCBzb3VyY2UgZm9yIHRoZSBzcGVjaWZpZWQgTUNVIHdha2V1cCBwcm9ncmFtbWFibGUgZXZlbnQuCisvLyEKKy8vISBUaGUgQU9OIGV2ZW50IGZhYnJpYyBoYXMgYSB0b3RhbCBvZiBmb3VyIHByb2dyYW1tYWJsZSBldmVudHMgdGhhdCBjYW4KKy8vISB3YWtlLXVwIHRoZSBNQ1UuIFRoZSBldmVudHMgYXJlIGZvcndhcmRlZCB0byB0aGUgd2FrZXVwIGNvbnRyb2xsZXIgKFdVQykuCisvLyEKKy8vISBccGFyYW0gdWkzMk1DVVdVRXZlbnQgaXMgb25lIG9mIGZvdXIgcHJvZ3JhbW1hYmxlIE1DVSB3YWtldXAgZXZlbnQgc291cmNlcy4KKy8vISAtIFxyZWYgQU9OX0VWRU5UX01DVV9XVTAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX01DVV9XVTEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX01DVV9XVTIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX01DVV9XVTMKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBhbiBldmVudCBzb3VyY2UgZm9yIHRoZSBldmVudCBBT04gZmFicmljLCBpLmUuIG9uZSBvZiB0aGUKKy8vISBmb2xsb3dpbmc6CisvLyEgLSBBT05fRVZFTlRfRElPMCAgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzAuIFNlZSBod19kZXZpY2UuaAorLy8hIC0gLi4uCisvLyEgLSBBT05fRVZFTlRfRElPMzEgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzMxLiBTZWUgaHdfZGV2aWNlLmgKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0lPICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gYW55IERJTworLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMCAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gxICAgICAgICAgICA6IFJUQyBjaGFubmVsIDEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDIgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMF9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMV9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMl9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NPTUJfRExZICAgICAgOiBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX1VQRCAgICAgICAgICAgOiBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZSB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9KVEFHICAgICAgICAgICAgICA6IEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjAgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMSAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYyICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEEgICAgICAgICA6IENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEIgICAgICAgICA6IENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQURDX0RPTkUgICAgICA6IEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1REQ19ET05FICAgICAgOiBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1RJTUVSMF9FViAgICAgOiBUaW1lciAwIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVElNRVIxX0VWICAgICA6IFRpbWVyIDEgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0JBVE1PTl9URU1QICAgICAgIDogQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQkFUTU9OX1ZPTFQgICAgICAgOiBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQyAgIDogQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkNfTiA6IENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX05PTkUgICAgICAgICAgICAgIDogTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIQorLy8hIFxzYSBBT05FdmVudE1jdVdha2VVcFNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEFPTkV2ZW50TWN1V2FrZVVwR2V0KHVpbnQzMl90IHVpMzJNQ1VXVUV2ZW50KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2VsZWN0IGV2ZW50IHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZCBBVVggd2FrZXVwIHByb2dyYW1tYWJsZSBldmVudC4KKy8vIQorLy8hIFRoZSBBT04gZXZlbnQgZmFicmljIGhhcyBhIHRvdGFsIG9mIHRocmVlIHByb2dyYW1tYWJsZSBldmVudHMgdGhhdCBjYW4KKy8vISB3YWtlLXVwIHRoZSBBVVggZG9tYWluLiBUaGUgZXZlbnRzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIHdha2V1cAorLy8hIGNvbnRyb2xsZXIgKFdVQykuCisvLyEKKy8vISBcbm90ZSBUaGUgdGhyZWUgcHJvZ3JhbW1hYmxlIGV2ZW50IHNvdXJjZXMgYXJlIGVmZmVjdGl2ZWx5IE9SJ2VkIHRvZ2V0aGVyCisvLyEgIHRvIGZvcm0gYSBzaW5nbGUgd2FrZS11cCBldmVudCBmb3J3YXJkZWQgdG8gdGhlIFdVQy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQVVYV1VFdmVudCBpcyBvbmUgb2YgdGhyZWUgcHJvZ3JhbW1hYmxlIEFVWCB3YWtldXAgZXZlbnQgc291cmNlcy4KKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9XVTAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9XVTEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9XVTIKKy8vISBccGFyYW0gdWkzMkV2ZW50U3JjIGlzIGFuIGV2ZW50IHNvdXJjZXMgZm9yIHRoZSBldmVudCBBT04gZmFicmljLgorLy8hIC0gQU9OX0VWRU5UX0RJTzAgICAgICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBESU8wLiBTZWUgaHdfZGV2aWNlLmgKKy8vISAtIC4uLgorLy8hIC0gQU9OX0VWRU5UX0RJTzMxICAgICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBESU8zMS4gU2VlIGh3X2RldmljZS5oCisvLyEgLSBccmVmIEFPTl9FVkVOVF9JTyAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIGFueSBESU8KKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDAgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMSAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gyICAgICAgICAgICA6IFJUQyBjaGFubmVsIDIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDBfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDFfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDJfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DT01CX0RMWSAgICAgIDogUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19VUEQgICAgICAgICAgIDogUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfSlRBRyAgICAgICAgICAgICAgOiBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYwICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjEgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMiAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBBICAgICAgICAgOiBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCICAgICAgICAgOiBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0FEQ19ET05FICAgICAgOiBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9URENfRE9ORSAgICAgIDogVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9USU1FUjBfRVYgICAgIDogVGltZXIgMCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1RJTUVSMV9FViAgICAgOiBUaW1lciAxIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9CQVRNT05fVEVNUCAgICAgICA6IEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0JBVE1PTl9WT0xUICAgICAgIDogQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkMgICA6IENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCX0FTWU5DX04gOiBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisvLyEgLSBccmVmIEFPTl9FVkVOVF9OT05FICAgICAgICAgICAgICA6IE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBT05FdmVudEF1eFdha2VVcEdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQU9ORXZlbnRBdXhXYWtlVXBTZXQodWludDMyX3QgdWkzMkFVWFdVRXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyRXZlbnRTcmMpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgZXZlbnQgc291cmNlIGZvciB0aGUgc3BlY2lmaWVkIEFVWCB3YWtldXAgcHJvZ3JhbW1hYmxlIGV2ZW50LgorLy8hCisvLyEgVGhlIEFPTiBldmVudCBmYWJyaWMgaGFzIGEgdG90YWwgb2YgdGhyZWUgcHJvZ3JhbW1hYmxlIGV2ZW50cyB0aGF0IGNhbgorLy8hIHdha2UtdXAgdGhlIEFVWCBkb21haW4uIFRoZSBldmVudHMgYXJlIGZvcndhcmRlZCB0byB0aGUgd2FrZXVwCisvLyEgY29udHJvbGxlciAoV1VDKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQVVYV1VFdmVudCBpcyBvbmUgb2YgdGhyZWUgcHJvZ3JhbW1hYmxlIEFVWCB3YWtldXAgZXZlbnQgc291cmNlcy4KKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9XVTAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9XVTEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9XVTIKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBhbiBldmVudCBzb3VyY2UgZm9yIHRoZSBldmVudCBBT04gZmFicmljLCBpLmUuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gQU9OX0VWRU5UX0RJTzAgICAgICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBESU8wLiBTZWUgaHdfZGV2aWNlLmgKKy8vISAtIC4uLgorLy8hIC0gQU9OX0VWRU5UX0RJTzMxICAgICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBESU8zMS4gU2VlIGh3X2RldmljZS5oCisvLyEgLSBccmVmIEFPTl9FVkVOVF9JTyAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIGFueSBESU8KKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDAgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMSAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gyICAgICAgICAgICA6IFJUQyBjaGFubmVsIDIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDBfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDFfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDJfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DT01CX0RMWSAgICAgIDogUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19VUEQgICAgICAgICAgIDogUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfSlRBRyAgICAgICAgICAgICAgOiBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYwICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjEgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMiAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBBICAgICAgICAgOiBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCICAgICAgICAgOiBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0FEQ19ET05FICAgICAgOiBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9URENfRE9ORSAgICAgIDogVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9USU1FUjBfRVYgICAgIDogVGltZXIgMCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1RJTUVSMV9FViAgICAgOiBUaW1lciAxIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9CQVRNT05fVEVNUCAgICAgICA6IEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0JBVE1PTl9WT0xUICAgICAgIDogQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkMgICA6IENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCX0FTWU5DX04gOiBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisvLyEgLSBccmVmIEFPTl9FVkVOVF9OT05FICAgICAgICAgICAgICA6IE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyEKKy8vISBcc2EgQU9ORXZlbnRBdXhXYWtlVXBTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBBT05FdmVudEF1eFdha2VVcEdldCh1aW50MzJfdCB1aTMyQVVYV1VFdmVudCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNlbGVjdCBldmVudCBzb3VyY2UgZm9yIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbW1hYmxlIGV2ZW50IGZvcndhcmRlZCB0byB0aGUKKy8vISBNQ1UgZXZlbnQgZmFicmljLgorLy8hCisvLyEgVGhlIEFPTiBldmVudCBmYWJyaWMgaGFzIGEgdG90YWwgb2YgdGhyZWUgcHJvZ3JhbW1hYmxlIGV2ZW50cyB0aGF0IGNhbgorLy8hIGJlIGZvcndhcmRlZCB0byB0aGUgTUNVIGV2ZW50IGZhYnJpYy4KKy8vIQorLy8hIFxub3RlIFRoZSB0aHJlZSBwcm9ncmFtbWFibGUgZXZlbnQgc291cmNlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBNQ1UgRXZlbnQKKy8vISBGYWJyaWMgYXM6CisvLyEgLSBBT05fUFJPRzAKKy8vISAtIEFPTl9QUk9HMQorLy8hIC0gQU9OX1BST0cyCisvLyEKKy8vISBccGFyYW0gdWkzMk1DVUV2ZW50IGlzIG9uZSBvZiB0aHJlZSBwcm9ncmFtbWFibGUgZXZlbnRzIGZvcndhcmRlZCB0byB0aGUKKy8vISBNQ1UgZXZlbnQgZmFicmljLgorLy8hIC0gXHJlZiBBT05fRVZFTlRfTUNVX0VWRU5UMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfTUNVX0VWRU5UMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfTUNVX0VWRU5UMgorLy8hIFxwYXJhbSB1aTMyRXZlbnRTcmMgaXMgZXZlbnQgc291cmNlcyBmb3IgdGhlIGV2ZW50IEFPTiBmYWJyaWMuCisvLyEgLSBBT05fRVZFTlRfRElPMCAgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzAuIFNlZSBod19kZXZpY2UuaAorLy8hIC0gLi4uCisvLyEgLSBBT05fRVZFTlRfRElPMzEgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzMxLiBTZWUgaHdfZGV2aWNlLmgKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0lPICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gYW55IERJTworLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMCAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gxICAgICAgICAgICA6IFJUQyBjaGFubmVsIDEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDIgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMF9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMV9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMl9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NPTUJfRExZICAgICAgOiBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX1VQRCAgICAgICAgICAgOiBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZSB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9KVEFHICAgICAgICAgICAgICA6IEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjAgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMSAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYyICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEEgICAgICAgICA6IENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEIgICAgICAgICA6IENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQURDX0RPTkUgICAgICA6IEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1REQ19ET05FICAgICAgOiBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1RJTUVSMF9FViAgICAgOiBUaW1lciAwIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVElNRVIxX0VWICAgICA6IFRpbWVyIDEgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0JBVE1PTl9URU1QICAgICAgIDogQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQkFUTU9OX1ZPTFQgICAgICAgOiBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQyAgIDogQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkNfTiA6IENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX05PTkUgICAgICAgICAgICAgIDogTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFPTkV2ZW50TWN1R2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBT05FdmVudE1jdVNldCh1aW50MzJfdCB1aTMyTUNVRXZlbnQsIHVpbnQzMl90IHVpMzJFdmVudFNyYyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBzb3VyY2UgZm9yIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbW1hYmxlIGV2ZW50IGZvcndhcmRlZCB0byB0aGUgTUNVIGV2ZW50CisvLyEgZmFicmljLgorLy8hCisvLyEgVGhlIEFPTiBldmVudCBmYWJyaWMgaGFzIGEgdG90YWwgb2YgdGhyZWUgcHJvZ3JhbW1hYmxlIGV2ZW50cyB0aGF0IGNhbgorLy8hIGJlIGZvcndhcmRlZCB0byB0aGUgTUNVIGV2ZW50IGZhYnJpYy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyTUNVRXZlbnQgaXMgb25lIG9mIHRocmVlIHByb2dyYW1tYWJsZSBldmVudHMgZm9yd2FyZGVkIHRvIHRoZQorLy8hIE1DVSBldmVudCBmYWJyaWMuCisvLyEgLSBccmVmIEFPTl9FVkVOVF9NQ1VfRVZFTlQwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9NQ1VfRVZFTlQxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9NQ1VfRVZFTlQyCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgYW4gZXZlbnQgc291cmNlIGZvciB0aGUgZXZlbnQgQU9OIGZhYnJpYywgaS5lLiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIEFPTl9FVkVOVF9ESU8wICAgICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gRElPMC4gU2VlIGh3X2RldmljZS5oCisvLyEgLSAuLi4KKy8vISAtIEFPTl9FVkVOVF9ESU8zMSAgICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gRElPMzEuIFNlZSBod19kZXZpY2UuaAorLy8hIC0gXHJlZiBBT05fRVZFTlRfSU8gICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBhbnkgRElPCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gwICAgICAgICAgICA6IFJUQyBjaGFubmVsIDAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDEgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMiAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAyCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gwX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gxX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gyX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ09NQl9ETFkgICAgICA6IFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfVVBEICAgICAgICAgICA6IFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0pUQUcgICAgICAgICAgICAgIDogSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMCAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYxICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjIgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQSAgICAgICAgIDogQ29tcGFyYXRvciBBIHRyaWdnZXJlZCAoc3luY2hyb25pemVkIGluIEFVWCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQiAgICAgICAgIDogQ29tcGFyYXRvciBCIHRyaWdnZXJlZCAoc3luY2hyb25pemVkIGluIEFVWCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9BRENfRE9ORSAgICAgIDogQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVERDX0RPTkUgICAgICA6IFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVElNRVIwX0VWICAgICA6IFRpbWVyIDAgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9USU1FUjFfRVYgICAgIDogVGltZXIgMSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQkFUTU9OX1RFTVAgICAgICAgOiBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9CQVRNT05fVk9MVCAgICAgICA6IEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCX0FTWU5DICAgOiBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQ19OIDogQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQgorLy8hIC0gXHJlZiBBT05fRVZFTlRfTk9ORSAgICAgICAgICAgICAgOiBObyBldmVudCwgYWx3YXlzIGxvdworLy8hCisvLyEgXHNhIEFPTkV2ZW50TWN1U2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQU9ORXZlbnRNY3VHZXQodWludDMyX3QgdWkzMk1DVUV2ZW50KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2VsZWN0IGV2ZW50IHNvdXJjZSBmb3J3YXJkZWQgdG8gQU9OIFJlYWwgVGltZSBDbG9jayAoUlRDKS4KKy8vIQorLy8hIEEgcHJvZ3JhbW1hYmxlIGV2ZW50IGNhbiBiZSBmb3J3YXJkZWQgdG8gdGhlIEFPTiByZWFsIHRpbWUgY2xvY2sKKy8vISBmb3IgdHJpZ2dlcmluZyBhIGNhcHR1cmUgZXZlbnQgb24gUlRDIGNoYW5uZWwgMS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyRXZlbnRTcmMgaXMgdGhlIGV2ZW50IHNvdXJjZXMgZm9yIHRoZSBldmVudCBBT04gZmFicmljLgorLy8hIC0gQU9OX0VWRU5UX0RJTzAgICAgICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBESU8wLiBTZWUgaHdfZGV2aWNlLmgKKy8vISAtIC4uLgorLy8hIC0gQU9OX0VWRU5UX0RJTzMxICAgICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBESU8zMS4gU2VlIGh3X2RldmljZS5oCisvLyEgLSBccmVmIEFPTl9FVkVOVF9JTyAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIGFueSBESU8KKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDAgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMSAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gyICAgICAgICAgICA6IFJUQyBjaGFubmVsIDIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDBfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDFfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDJfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DT01CX0RMWSAgICAgIDogUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19VUEQgICAgICAgICAgIDogUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfSlRBRyAgICAgICAgICAgICAgOiBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYwICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjEgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMiAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBBICAgICAgICAgOiBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCICAgICAgICAgOiBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0FEQ19ET05FICAgICAgOiBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9URENfRE9ORSAgICAgIDogVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9USU1FUjBfRVYgICAgIDogVGltZXIgMCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1RJTUVSMV9FViAgICAgOiBUaW1lciAxIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9CQVRNT05fVEVNUCAgICAgICA6IEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0JBVE1PTl9WT0xUICAgICAgIDogQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkMgICA6IENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCX0FTWU5DX04gOiBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisvLyEgLSBccmVmIEFPTl9FVkVOVF9OT05FICAgICAgICAgICAgICA6IE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBT05FdmVudFJ0Y0dldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTkV2ZW50UnRjU2V0KHVpbnQzMl90IHVpMzJFdmVudFNyYykKK3sKKyAgICB1aW50MzJfdCB1aTMyQ3RybDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMyRXZlbnRTcmMgPD0gQU9OX0VWRU5UX05PTkUpOworCisgICAgdWkzMkN0cmwgPSBIV1JFRyhBT05fRVZFTlRfQkFTRSArIEFPTl9FVkVOVF9PX1JUQ1NFTCk7CisgICAgdWkzMkN0cmwgJj0gfihBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9NKTsKKyAgICB1aTMyQ3RybCB8PSAodWkzMkV2ZW50U3JjICYgMHgzZikgPDwgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUzsKKworICAgIEhXUkVHKEFPTl9FVkVOVF9CQVNFICsgQU9OX0VWRU5UX09fUlRDU0VMKSA9IHVpMzJDdHJsOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgZXZlbnQgc291cmNlIGZvcndhcmRlZCB0byBBT04gUmVhbCBUaW1lIENsb2NrIChSVEMpLgorLy8hCisvLyEgQSBwcm9ncmFtbWFibGUgZXZlbnQgY2FuIGJlIGZvcndhcmRlZCB0byB0aGUgQU9OIHJlYWwgdGltZSBjbG9jaworLy8hIGZvciB0cmlnZ2VyaW5nIGEgY2FwdHVyZSBldmVudCBvbiBSVEMgY2hhbm5lbCAxLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGFuIGV2ZW50IHNvdXJjZSB0byB0aGUgZXZlbnQgQU9OIGZhYnJpYywgaS5lLiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIEFPTl9FVkVOVF9ESU8wICAgICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gRElPMC4gU2VlIGh3X2RldmljZS5oCisvLyEgLSAuLi4KKy8vISAtIEFPTl9FVkVOVF9ESU8zMSAgICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gRElPMzEuIFNlZSBod19kZXZpY2UuaAorLy8hIC0gXHJlZiBBT05fRVZFTlRfSU8gICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBhbnkgRElPCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gwICAgICAgICAgICA6IFJUQyBjaGFubmVsIDAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDEgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMiAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAyCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gwX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gxX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gyX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ09NQl9ETFkgICAgICA6IFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfVVBEICAgICAgICAgICA6IFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0pUQUcgICAgICAgICAgICAgIDogSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMCAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYxICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjIgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQSAgICAgICAgIDogQ29tcGFyYXRvciBBIHRyaWdnZXJlZCAoc3luY2hyb25pemVkIGluIEFVWCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQiAgICAgICAgIDogQ29tcGFyYXRvciBCIHRyaWdnZXJlZCAoc3luY2hyb25pemVkIGluIEFVWCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9BRENfRE9ORSAgICAgIDogQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVERDX0RPTkUgICAgICA6IFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVElNRVIwX0VWICAgICA6IFRpbWVyIDAgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9USU1FUjFfRVYgICAgIDogVGltZXIgMSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQkFUTU9OX1RFTVAgICAgICAgOiBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9CQVRNT05fVk9MVCAgICAgICA6IEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCX0FTWU5DICAgOiBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQ19OIDogQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQgorLy8hIC0gXHJlZiBBT05fRVZFTlRfTk9ORSAgICAgICAgICAgICAgOiBObyBldmVudCwgYWx3YXlzIGxvdworLy8hCisvLyEgXHNhIEFPTkV2ZW50UnRjU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FPTkV2ZW50UnRjR2V0KHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMkV2ZW50U3JjOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGFjdGl2ZSBldmVudC4KKyAgICAvLworICAgIHVpMzJFdmVudFNyYyA9IEhXUkVHKEFPTl9FVkVOVF9CQVNFICsgQU9OX0VWRU5UX09fUlRDU0VMKTsKKworICAgIHJldHVybiAoKHVpMzJFdmVudFNyYyAmIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX00pID4+CisgICAgICAgICAgICBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9TKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fQU9ORXZlbnRNY3VXYWtlVXBTZXQKKyAgICAgICAgI3VuZGVmICBBT05FdmVudE1jdVdha2VVcFNldAorICAgICAgICAjZGVmaW5lIEFPTkV2ZW50TWN1V2FrZVVwU2V0ICAgICAgICAgICAgUk9NX0FPTkV2ZW50TWN1V2FrZVVwU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BT05FdmVudE1jdVdha2VVcEdldAorICAgICAgICAjdW5kZWYgIEFPTkV2ZW50TWN1V2FrZVVwR2V0CisgICAgICAgICNkZWZpbmUgQU9ORXZlbnRNY3VXYWtlVXBHZXQgICAgICAgICAgICBST01fQU9ORXZlbnRNY3VXYWtlVXBHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FPTkV2ZW50QXV4V2FrZVVwU2V0CisgICAgICAgICN1bmRlZiAgQU9ORXZlbnRBdXhXYWtlVXBTZXQKKyAgICAgICAgI2RlZmluZSBBT05FdmVudEF1eFdha2VVcFNldCAgICAgICAgICAgIFJPTV9BT05FdmVudEF1eFdha2VVcFNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQU9ORXZlbnRBdXhXYWtlVXBHZXQKKyAgICAgICAgI3VuZGVmICBBT05FdmVudEF1eFdha2VVcEdldAorICAgICAgICAjZGVmaW5lIEFPTkV2ZW50QXV4V2FrZVVwR2V0ICAgICAgICAgICAgUk9NX0FPTkV2ZW50QXV4V2FrZVVwR2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BT05FdmVudE1jdVNldAorICAgICAgICAjdW5kZWYgIEFPTkV2ZW50TWN1U2V0CisgICAgICAgICNkZWZpbmUgQU9ORXZlbnRNY3VTZXQgICAgICAgICAgICAgICAgICBST01fQU9ORXZlbnRNY3VTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FPTkV2ZW50TWN1R2V0CisgICAgICAgICN1bmRlZiAgQU9ORXZlbnRNY3VHZXQKKyAgICAgICAgI2RlZmluZSBBT05FdmVudE1jdUdldCAgICAgICAgICAgICAgICAgIFJPTV9BT05FdmVudE1jdUdldAorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gIF9fQU9OX0VWRU5UX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fZXZlbnRfZG9jLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fZXZlbnRfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE3ZjdjNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ldmVudF9kb2MuaApAQCAtMCwwICsxLDYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX2V2ZW50X2RvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0zMCAxMzowMzo1OSArMDIwMCAoV2VkLCAzMCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk3MQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vISBcYWRkdG9ncm91cCBhb25ldmVudF9hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19hb25ldmVudCBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSBldmVudCBmYWJyaWMgY29uc2lzdHMgb2YgdHdvIGV2ZW50IG1vZHVsZXMuIE9uZSBpbiB0aGUgTUNVIHBvd2VyIGRvbWFpbiAoTUNVIGV2ZW50IGZhYnJpYykgYW5kCisvLyEgdGhlIG90aGVyIGluIHRoZSBBT04gcG93ZXIgZG9tYWluIChBT04gZXZlbnQgZmFicmljKS4gVGhlIE1DVSBldmVudCBmYWJyaWMgaXMgb25lIG9mIHRoZSBzdWJzY3JpYmVycworLy8hIHRvIHRoZSBBT04gZXZlbnQgZmFicmljLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBNQ1UgZXZlbnQgZmFicmljLCBzZWUgW01DVSBldmVudCBBUEldKEByZWYgZXZlbnRfYXBpKS4KKy8vIQorLy8hIFRoZSBBT04gZXZlbnQgZmFicmljIGlzIGEgY29uZmlndXJhYmxlIGNvbWJpbmF0b3JpYWwgcm91dGVyIGJldHdlZW4gQU9OIGV2ZW50IHNvdXJjZXMgYW5kIGV2ZW50CisvLyEgc3Vic2NyaWJlcnMgaW4gYm90aCBBT04gYW5kIE1DVSBkb21haW5zLiBUaGUgQU9OIGV2ZW50IGZhYnJpYyBoYXMgdGhyZWUgbWFpbiBldmVudCBzdWJzY3JpYmVyczogQU9OIFdVQywKKy8vISBBT04gUlRDLCBhbmQgTUNVIGV2ZW50IGZhYnJpYy4gVGhlIEFQSSB0byBjb250cm9sIHRoZSBBT04gZXZlbnQgZmFicmljIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGdyb3VwZWQgYmFzZWQKKy8vISBvbiB0aGUgZXZlbnQgc3Vic2NyaWJlciB0byBjb25maWd1cmU6CisvLyEKKy8vISAtIEFPTiBXVUMgcmVjZWl2ZXMgdHdvIHByb2dyYW1tYWJsZSBldmVudCBsaW5lcyBmcm9tIEFPTiBldmVudCBmYWJyaWMuIE9uZSBmb3IgTUNVIHdha2UtdXAgZXZlbnRzIGFuZCBvbmUgZm9yIEFVWCB3YWtlLXVwIGV2ZW50cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQU9OIFdVQyBBUEldKEByZWYgYW9ud3VjX2FwaSkuCisvLyEgICAtIE1DVSB3YWtlLXVwIGV2ZW50CisvLyEgICAgIC0gQHJlZiBBT05FdmVudE1jdVdha2VVcFNldCgpCisvLyEgICAgIC0gQHJlZiBBT05FdmVudE1jdVdha2VVcEdldCgpCisvLyEgICAtIEFVWCB3YWtlLXVwIGV2ZW50CisvLyEgICAgIC0gQHJlZiBBT05FdmVudEF1eFdha2VVcFNldCgpCisvLyEgICAgIC0gQHJlZiBBT05FdmVudEF1eFdha2VVcEdldCgpCisvLyEgLSBBT04gUlRDIHJlY2VpdmVzIGEgc2luZ2xlIHByb2dyYW1tYWJsZSBldmVudCBsaW5lIGZyb20gdGhlIEFPTiBldmVudCBmYWJyaWMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FPTiBSVEMgQVBJXShAcmVmIGFvbnJ0Y19hcGkpLgorLy8hICAgLSBAcmVmIEFPTkV2ZW50UnRjU2V0KCkKKy8vISAgIC0gQHJlZiBBT05FdmVudFJ0Y0dldCgpCisvLyEgLSBNQ1UgZXZlbnQgZmFicmljIHJlY2VpdmVzIGEgbnVtYmVyIG9mIHByb2dyYW1tYWJsZSBldmVudCBsaW5lcyBmcm9tIHRoZSBBT04gZXZlbnQgZmFicmljLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNQ1UgZXZlbnQgQVBJXShAcmVmIGV2ZW50X2FwaSkuCisvLyEgICAtIEByZWYgQU9ORXZlbnRNY3VTZXQoKQorLy8hICAgLSBAcmVmIEFPTkV2ZW50TWN1R2V0KCkKKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2lvYy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2lvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YTY0NDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25faW9jLmMKQEAgLTAsMCArMSwzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGFvbl9pb2MuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDktMDggMTA6MjE6MjIgKzAyMDAgKFR1ZSwgMDggU2VwIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQ1MjYKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBBT04gSU8gQ29udHJvbGxlcgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9hb25faW9jLmg+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25faW9jLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25faW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE2ODY1NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9pb2MuaApAQCAtMCwwICsxLDMwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGFvbl9pb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDktMDggMTY6Mzg6NTUgKzAyMDAgKFR1ZSwgMDggU2VwIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQ1MzEKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgQU9OIElPIENvbnRyb2xsZXIKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgYW9uX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBhb25pb2NfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19BT05fSU9DX0hfXworI2RlZmluZSBfX0FPTl9JT0NfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9pb2MuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBkcml2ZSBzdHJlbmd0aAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQU9OSU9DX0RSVl9TVFJfMSAgMHgwMDAwMDAwMCAvLyBMb3dlc3QgZHJpdmUgc3RyZW5ndGgKKyNkZWZpbmUgQU9OSU9DX0RSVl9TVFJfMiAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05JT0NfRFJWX1NUUl8zICAweDAwMDAwMDAzCisjZGVmaW5lIEFPTklPQ19EUlZfU1RSXzQgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OSU9DX0RSVl9TVFJfNSAgMHgwMDAwMDAwNgorI2RlZmluZSBBT05JT0NfRFJWX1NUUl82ICAweDAwMDAwMDA3CisjZGVmaW5lIEFPTklPQ19EUlZfU1RSXzcgIDB4MDAwMDAwMDUKKyNkZWZpbmUgQU9OSU9DX0RSVl9TVFJfOCAgMHgwMDAwMDAwNCAvLyBIaWdoZXN0IGRyaXZlIHN0cmVuZ3RoCisKKyNkZWZpbmUgQU9OSU9DX0RSVl9MVkxfTUlOICAoQU9OX0lPQ19PX0lPU1RSTUlOKQorI2RlZmluZSBBT05JT0NfRFJWX0xWTF9NRUQgIChBT05fSU9DX09fSU9TVFJNRUQpCisjZGVmaW5lIEFPTklPQ19EUlZfTFZMX01BWCAgKEFPTl9JT0NfT19JT1NUUk1BWCkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSBkcml2ZSBzdHJlbmd0aCB2YWx1ZXMgZm9yIHRoZSBtYW51YWwgZHJpdmUgc3RyZW5ndGggb3B0aW9ucy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGVmaW5lcyB0aGUgZ2VuZXJhbCBkcml2ZSBzdHJlbmd0aCBzZXR0aW5ncyBmb3IgdGhlIG5vbi1BVVRPCisvLyEgZHJpdmUgc3RyZW5ndGggb3B0aW9ucyBpbiB0aGUgTUNVIElPQy4gQ29uc2VxdWVudGx5LCBpZiBhbGwgSU9zIGFyZSB1c2luZyB0aGUKKy8vISBhdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGggb3B0aW9uIHRoaXMgZnVuY3Rpb24gaGFzIG5vIGVmZmVjdC4KKy8vIQorLy8hIENoYW5naW5nIHRoZSBkcml2ZSBzdHJlbmd0aCB2YWx1ZXMgYWZmZWN0cyBhbGwgY3VycmVudCBtb2RlcyAoTG93LUN1cnJlbnQsCisvLyEgSGlnaC1DdXJyZW50LCBhbmQgRXh0ZW5kZWQtQ3VycmVudCkuIEN1cnJlbnQgbW9kZSBmb3IgaW5kaXZpZHVhbCBJT3MgaXMgc2V0IGluCisvLyEgTUNVIElPQyBieSBccmVmIElPQ0lPRHJ2U3RyZW5ndGhTZXQoKS4KKy8vIQorLy8hIFxub3RlIFZhbHVlcyBhcmUgR3JheSBlbmNvZGVkLiBTaW1wbHkgaW5jcmVtZW50aW5nIHZhbHVlcyB0byBpbmNyZWFzZSBkcml2ZQorLy8hIHN0cmVuZ3RoIHdpbGwgbm90IHdvcmsuCisvLyEKKy8vISBccGFyYW0gdWkzMkRyaXZlTGV2ZWwKKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9MVkxfTUlOIDogTWluaW11bSBkcml2ZSBzdHJlbmd0aCBvcHRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2VsZWN0ZWQKKy8vISAgICAgICAgdG8gZ2l2ZSBtaW5pbXVtIDIvNC84IG1BIEAzLjNWIGZvciBMb3ctQ3VycmVudCBtb2RlLCBIaWdoLUN1cnJlbnQgbW9kZSwKKy8vISAgICAgICAgYW5kIEV4dGVuZGVkLUN1cnJlbnQgbW9kZSByZXNwZWN0aXZlbHkuCisvLyEgLSBccmVmIEFPTklPQ19EUlZfTFZMX01FRCA6IE1lZGl1bSBkcml2ZSBzdHJlbmd0aCBvcHRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2VsZWN0ZWQKKy8vISAgICAgICAgdG8gZ2l2ZSBtaW5pbXVtIDIvNC84IG1BIEAyLjVWIGZvciBMb3ctQ3VycmVudCBtb2RlLCBIaWdoLUN1cnJlbnQgbW9kZSwKKy8vISAgICAgICAgYW5kIEV4dGVuZGVkLUN1cnJlbnQgbW9kZSByZXNwZWN0aXZlbHkuCisvLyEgLSBccmVmIEFPTklPQ19EUlZfTFZMX01BWCA6IE1heGltdW0gZHJpdmUgc3RyZW5ndGggb3B0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIHNlbGVjdGVkCisvLyEgICAgICAgIHRvIGdpdmUgbWluaW11bSAyLzQvOCBtQSBAMS44ViBmb3IgTG93LUN1cnJlbnQgbW9kZSwgSGlnaC1DdXJyZW50IG1vZGUsCisvLyEgICAgICAgIGFuZCBFeHRlbmRlZC1DdXJyZW50IG1vZGUgcmVzcGVjdGl2ZWx5LgorLy8hIFxwYXJhbSB1aTMyRHJpdmVTdHJlbmd0aCBzZXRzIHRoZSB2YWx1ZSB1c2VkIGJ5IElPcyBjb25maWd1cmVkIGFzIG5vbi1BVVRPIGRyaXZlIHN0cmVuZ3RoIGluIE1DVSBJT0MuCisvLyEgLSBccmVmIEFPTklPQ19EUlZfU1RSXzEgOiBMb3dlc3QgZHJpdmUgc3RyZW5ndGgKKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9TVFJfMgorLy8hIC0gXHJlZiBBT05JT0NfRFJWX1NUUl8zCisvLyEgLSBccmVmIEFPTklPQ19EUlZfU1RSXzQKKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9TVFJfNQorLy8hIC0gXHJlZiBBT05JT0NfRFJWX1NUUl82CisvLyEgLSBccmVmIEFPTklPQ19EUlZfU1RSXzcKKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9TVFJfOCA6IEhpZ2hlc3QgZHJpdmUgc3RyZW5ndGgKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgQU9OSU9DRHJpdmVTdHJlbmd0aEdldCgpLCBccmVmIElPQ0lPRHJ2U3RyZW5ndGhTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05JT0NEcml2ZVN0cmVuZ3RoU2V0KHVpbnQzMl90IHVpMzJEcml2ZUxldmVsLCB1aW50MzJfdCB1aTMyRHJpdmVTdHJlbmd0aCkKK3sKKyAgICBBU1NFUlQoKHVpMzJEcml2ZUxldmVsID09IEFPTklPQ19EUlZfTFZMX01JTikgfHwKKyAgICAgICAgICAgKHVpMzJEcml2ZUxldmVsID09IEFPTklPQ19EUlZfTFZMX01FRCkgfHwKKyAgICAgICAgICAgKHVpMzJEcml2ZUxldmVsID09IEFPTklPQ19EUlZfTFZMX01BWCkpOworICAgIEFTU0VSVCgodWkzMkRyaXZlU3RyZW5ndGggPT0gQU9OSU9DX0RSVl9TVFJfMSkgfHwKKyAgICAgICAgICAgKHVpMzJEcml2ZVN0cmVuZ3RoID09IEFPTklPQ19EUlZfU1RSXzIpIHx8CisgICAgICAgICAgICh1aTMyRHJpdmVTdHJlbmd0aCA9PSBBT05JT0NfRFJWX1NUUl8zKSB8fAorICAgICAgICAgICAodWkzMkRyaXZlU3RyZW5ndGggPT0gQU9OSU9DX0RSVl9TVFJfNCkgfHwKKyAgICAgICAgICAgKHVpMzJEcml2ZVN0cmVuZ3RoID09IEFPTklPQ19EUlZfU1RSXzUpIHx8CisgICAgICAgICAgICh1aTMyRHJpdmVTdHJlbmd0aCA9PSBBT05JT0NfRFJWX1NUUl82KSB8fAorICAgICAgICAgICAodWkzMkRyaXZlU3RyZW5ndGggPT0gQU9OSU9DX0RSVl9TVFJfNykgfHwKKyAgICAgICAgICAgKHVpMzJEcml2ZVN0cmVuZ3RoID09IEFPTklPQ19EUlZfU1RSXzgpKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aC4KKyAgICAvLworICAgIEhXUkVHKEFPTl9JT0NfQkFTRSArIHVpMzJEcml2ZUxldmVsKSA9IHVpMzJEcml2ZVN0cmVuZ3RoOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgYSBzcGVjaWZpYyBkcml2ZSBsZXZlbCBzZXR0aW5nIGZvciBhbGwgSU9zLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmVhZCB0aGUgZHJpdmUgc3RyZW5ndGggc2V0dGluZyBmb3IgYSBzcGVjaWZpYworLy8hIElPIGRyaXZlIGxldmVsLgorLy8hCisvLyEgXG5vdGUgVmFsdWVzIGFyZSBHcmF5IGVuY29kZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkRyaXZlTGV2ZWwgaXMgdGhlIHNwZWNpZmljIGRyaXZlIGxldmVsIHRvIGdldCB0aGUgc2V0dGluZyBmb3IuCisvLyEgLSBccmVmIEFPTklPQ19EUlZfTFZMX01JTiA6IE1pbmltdW0gZHJpdmUgc3RyZW5ndGggb3B0aW9uLgorLy8hIC0gXHJlZiBBT05JT0NfRFJWX0xWTF9NRUQgOiBNZWRpdW0gZHJpdmUgc3RyZW5ndGggb3B0aW9uLgorLy8hIC0gXHJlZiBBT05JT0NfRFJWX0xWTF9NQVggOiBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoIG9wdGlvbi4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgcmVxdWVzdGVkIGRyaXZlIHN0cmVuZ3RoIGxldmVsIHNldHRpbmcgZm9yIGFsbCBJT3MuCisvLyEgUG9zc2libGUgdmFsdWVzIGFyZToKKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9TVFJfMSA6IExvd2VzdCBkcml2ZSBzdHJlbmd0aAorLy8hIC0gXHJlZiBBT05JT0NfRFJWX1NUUl8yCisvLyEgLSBccmVmIEFPTklPQ19EUlZfU1RSXzMKKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9TVFJfNAorLy8hIC0gXHJlZiBBT05JT0NfRFJWX1NUUl81CisvLyEgLSBccmVmIEFPTklPQ19EUlZfU1RSXzYKKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9TVFJfNworLy8hIC0gXHJlZiBBT05JT0NfRFJWX1NUUl84IDogSGlnaGVzdCBkcml2ZSBzdHJlbmd0aAorLy8hCisvLyEgXHNhIEFPTklPQ0RyaXZlU3RyZW5ndGhTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQU9OSU9DRHJpdmVTdHJlbmd0aEdldCh1aW50MzJfdCB1aTMyRHJpdmVMZXZlbCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJEcml2ZUxldmVsID09IEFPTklPQ19EUlZfTFZMX01JTikgfHwKKyAgICAgICAgICAgKHVpMzJEcml2ZUxldmVsID09IEFPTklPQ19EUlZfTFZMX01FRCkgfHwKKyAgICAgICAgICAgKHVpMzJEcml2ZUxldmVsID09IEFPTklPQ19EUlZfTFZMX01BWCkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGRyaXZlIHN0cmVuZ3RoIHZhbHVlLgorICAgIC8vCisgICAgcmV0dXJuKCBIV1JFRyhBT05fSU9DX0JBU0UgKyB1aTMyRHJpdmVMZXZlbCkgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRnJlZXplIHRoZSBJT3MuCisvLyEKKy8vISBUbyByZXRhaW4gdGhlIHZhbHVlcyBvZiB0aGUgb3V0cHV0IElPcyBkdXJpbmcgYSBwb3dlcmRvd24vc2h1dGRvd24gb2YgdGhlCisvLyEgZGV2aWNlIGFsbCBJTyBsYXRjaGVzIGluIHRoZSBBT04gZG9tYWluIHNob3VsZCBiZSBmcm96ZW4gaW4gdGhlaXIgY3VycmVudAorLy8hIHN0YXRlLiBUaGlzIGVuc3VyZXMgdGhhdCBzb2Z0d2FyZSBjYW4gcmVnYWluIGNvbnRyb2wgb2YgdGhlIElPcyBhZnRlciBhCisvLyEgcmVib290IHdpdGhvdXQgdGhlIElPcyBmaXJzdCBmYWxsaW5nIGJhY2sgdG8gdGhlIGRlZmF1bHQgdmFsdWVzIChpLmUuIGlucHV0CisvLyEgYW5kIG5vIHB1bGwpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9OSU9DRnJlZXplRGlzYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTklPQ0ZyZWV6ZUVuYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gU2V0IHRoZSBBT04gSU8gbGF0Y2hlcyBhcyBzdGF0aWMuCisgICAgLy8KKyAgICBIV1JFRyhBT05fSU9DX0JBU0UgKyBBT05fSU9DX09fSU9DTEFUQ0gpID0gMHgwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBVbi1mcmVlemUgdGhlIElPcy4KKy8vIQorLy8hIFdoZW4gcmVib290aW5nIHRoZSBjaGlwIGFmdGVyIGl0IGhhcyBlbnRlcmVkIHBvd2VyZG93bi9zaHV0ZG93biBtb2RlLCB0aGUKKy8vISBzb2Z0d2FyZSBjYW4gcmVnYWluIGNvbnRyb2wgb2YgdGhlIElPcyBieSBzZXR0aW5nIHRoZSBJTyBsYXRjaGVzIGFzCisvLyEgdHJhbnNwYXJlbnQuIFRoZSBJT3Mgc2hvdWxkIG5vdCBiZSB1bmZyb3plbiBiZWZvcmUgc29mdHdhcmUgaGFzIHJlc3RvcmVkCisvLyEgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIElPLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9OSU9DRnJlZXplRW5hYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OSU9DRnJlZXplRGlzYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gU2V0IHRoZSBBT04gSU9DIGxhdGNoZXMgYXMgdHJhbnNwYXJlbnQuCisgICAgLy8KKyAgICBIV1JFRyhBT05fSU9DX0JBU0UgKyBBT05fSU9DX09fSU9DTEFUQ0gpID0gQU9OX0lPQ19JT0NMQVRDSF9FTjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSB0aGUgMzJrSHogY2xvY2sgb3V0cHV0LgorLy8hCisvLyEgV2hlbiBvdXRwdXR0aW5nIGEgMzIga0h6IGNsb2NrIG9uIGFuIElPLCB0aGUgb3V0cHV0IGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uYWxpdHkKKy8vISBpbiB0aGUgSU9DIGlzIGJ5cGFzc2VkLiBUaGVyZWZvcmUsIHRoZSBwcm9ncmFtbWVyIG5lZWRzIHRvIGNhbGwgdGhpcworLy8hIGZ1bmN0aW9uIHRvIGRpc2FibGUgdGhlIGNsb2NrIG91dHB1dC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFPTklPQzMya0h6T3V0cHV0RW5hYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OSU9DMzJrSHpPdXRwdXREaXNhYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBMRiBjbG9jayBvdXRwdXQuCisgICAgLy8KKyAgICBIV1JFRyhBT05fSU9DX0JBU0UgKyBBT05fSU9DX09fQ0xLMzJLQ1RMKSA9IEFPTl9JT0NfQ0xLMzJLQ1RMX09FX047Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSB0aGUgMzJrSHogY2xvY2sgb3V0cHV0LgorLy8hCisvLyEgV2hlbiBvdXRwdXR0aW5nIGEgMzIga0h6IGNsb2NrIG9uIGFuIElPLCB0aGUgb3V0cHV0IGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uYWxpdHkKKy8vISBpbiB0aGUgSU9DIGlzIGJ5cGFzc2VkLiBUaGVyZWZvcmUsIHRoZSBwcm9ncmFtbWVyIG5lZWRzIHRvIGNhbGwgdGhpcworLy8hIGZ1bmN0aW9uIHRvIGVuYWJsZSB0aGUgY2xvY2sgb3V0cHV0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9OSU9DMzJrSHpPdXRwdXREaXNhYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OSU9DMzJrSHpPdXRwdXRFbmFibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgTEYgY2xvY2sgb3V0cHV0LgorICAgIC8vCisgICAgSFdSRUcoQU9OX0lPQ19CQVNFICsgQU9OX0lPQ19PX0NMSzMyS0NUTCkgPSAweDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gIF9fQU9OX0lPQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2lvY19kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9pb2NfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYyODhlNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9pb2NfZG9jLmgKQEAgLTAsMCArMSw2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGFvbl9pb2NfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDExOjAxOjMwICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTY5CisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGFvbmlvY19hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19hb25pb2MgSW50cm9kdWN0aW9uCisvLyEKKy8vISBUaGUgSW5wdXQvT3V0cHV0IENvbnRyb2xsZXIgKElPQykgY29udHJvbHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHBpbnMgKGNhbGxlZCBESU8pLgorLy8hIFRoZSBJT0MgY29uc2lzdHMgb2YgdHdvIEFQSXM6CisvLyEgLSBNQ1UgSU9DIEFQSSBzZWxlY3RzIHdoaWNoIHBlcmlwaGVyYWwgbW9kdWxlIGlzIGNvbm5lY3RlZCB0byB0aGUgaW5kaXZpZHVhbCBESU8gYW5kIHRodXMgYWxsb3dlZCB0byBjb250cm9sIGl0LgorLy8hICAgSXQgYWxzbyBjb250cm9scyBpbmRpdmlkdWFsIGRyaXZlIHN0cmVuZ3RoLCBzbGV3IHJhdGUsIHB1bGwtdXAvcHVsbC1kb3duLCBlZGdlIGRldGVjdGlvbiwgZXRjLgorLy8hIC0gQU9OIElPQyBBUEkgY29udHJvbHMgdGhlIGdlbmVyYWwgZHJpdmUgc3RyZW5ndGggZGVmaW5pdGlvbnMsIElPIGxhdGNoZXMsIGFuZCBpZiB0aGUgTEYgY2xvY2sgaXMKKy8vISAgIHJvdXRlZCB0byBhIERJTyBmb3IgZXh0ZXJuYWwgdXNlLgorLy8hCisvLyEgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIE1DVSBJT0Mgc2VlIHRoZSBbSU9DIEFQSV0oXHJlZiBpb2NfYXBpKS4KKy8vIQorLy8hIFxzZWN0aW9uIHNlY19hb25pb2NfYXBpIEFQSQorLy8hCisvLyEgVGhlIEFQSSBmdW5jdGlvbnMgY2FuIGJlIGdyb3VwZWQgbGlrZSB0aGlzOgorLy8hCisvLyEgRnJlZXplIElPcyB3aGlsZSBNQ1UgZG9tYWluIGlzIHBvd2VyZWQgZG93bjoKKy8vISAtIFxyZWYgQU9OSU9DRnJlZXplRW5hYmxlKCkKKy8vISAtIFxyZWYgQU9OSU9DRnJlZXplRGlzYWJsZSgpCisvLyEKKy8vISBPdXRwdXQgTEYgY2xvY2sgdG8gYSBESU86CisvLyEgLSBccmVmIEFPTklPQzMya0h6T3V0cHV0RW5hYmxlKCkKKy8vISAtIFxyZWYgQU9OSU9DMzJrSHpPdXRwdXREaXNhYmxlKCkKKy8vIQorLy8hIENvbmZpZ3VyZSB0aGUgdmFsdWUgb2YgZHJpdmUgc3RyZW5ndGggZm9yIHRoZSB0aHJlZSBtYW51YWwgTUNVIElPQyBzZXR0aW5ncyAoTUlOLCBNRUQsIE1BWCk6CisvLyEgLSBccmVmIEFPTklPQ0RyaXZlU3RyZW5ndGhTZXQoKQorLy8hIC0gXHJlZiBBT05JT0NEcml2ZVN0cmVuZ3RoR2V0KCkKKy8vIQorLy8hIEB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fcnRjLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4YjJlNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ydGMuYwpAQCAtMCwwICsxLDEwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGFvbl9ydGMuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDItMjkgMTM6NDM6MzcgKzAxMDAgKE1vbiwgMjkgRmViIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU3OTEKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBBT04gUlRDLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9hb25fcnRjLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NwdS5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldAorICAgICNkZWZpbmUgQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldCAgICBOT1JPTV9BT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0CisgICAgI3VuZGVmICBBT05SVENDdXJyZW50NjRCaXRWYWx1ZUdldAorICAgICNkZWZpbmUgQU9OUlRDQ3VycmVudDY0Qml0VmFsdWVHZXQgICAgICBOT1JPTV9BT05SVENDdXJyZW50NjRCaXRWYWx1ZUdldAorI2VuZGlmCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUlRDIGNvdW50ZXIgaW4gYSBmb3JtYXQgY29tcGF0aWJsZSB0byB0aGUgY29tcGFyZSByZWdpc3RlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0FPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoIHZvaWQgKQoreworICAgIHVpbnQzMl90ICAgdWkzMkN1cnJlbnRTZWMgICAgOworICAgIHVpbnQzMl90ICAgdWkzMkN1cnJlbnRTdWJTZWMgOworICAgIHVpbnQzMl90ICAgdWkzMlNlY29uZFNlY1JlYWQgOworCisgICAgLy8KKyAgICAvLyBSZWFkaW5nIFNFQyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgU1VCU0VDIGluIG9yZGVyIHRvIGRldGVjdCBpZiBTRUMgaW5jcmVtZW50ZWQgd2hpbGUgcmVhZGluZyBTVUJTRUMKKyAgICAvLyBJZiBTRUMgaW5jcmVtZW50ZWQsIHdlIGNhbid0IGJlIHN1cmUgd2hpY2ggU0VDIHRoZSBTVUJTRUMgYmVsb25ncyB0bywgc28gcmVwZWF0aW5nIHRoZSBzZXF1ZW5jZSB0aGVuLgorICAgIC8vCisgICAgZG8geworICAgICAgICB1aTMyQ3VycmVudFNlYyAgICA9IEhXUkVHKCBBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fU0VDICAgICk7CisgICAgICAgIHVpMzJDdXJyZW50U3ViU2VjID0gSFdSRUcoIEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19TVUJTRUMgKTsKKyAgICAgICAgdWkzMlNlY29uZFNlY1JlYWQgPSBIV1JFRyggQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NFQyAgICApOworICAgIH0gd2hpbGUgKCB1aTMyQ3VycmVudFNlYyAhPSB1aTMyU2Vjb25kU2VjUmVhZCApOworCisgICAgcmV0dXJuICgoIHVpMzJDdXJyZW50U2VjIDw8IDE2ICkgfCAoIHVpMzJDdXJyZW50U3ViU2VjID4+IDE2ICkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gR2V0IHRoZSBjdXJyZW50IDY0LWJpdCB2YWx1ZSBvZiB0aGUgUlRDIGNvdW50ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDY0X3QKK0FPTlJUQ0N1cnJlbnQ2NEJpdFZhbHVlR2V0KCB2b2lkICkKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQ2NF90ICByZXR1cm5WYWx1ZSAgICAgICA7CisgICAgICAgIHVpbnQzMl90ICBzZWNBbmRTdWJTZWNbIDIgXSA7CisgICAgfSBjdXJyZW50UnRjICAgICAgICAgICAgICAgICAgICA7CisgICAgdWludDMyX3QgICAgICB1aTMyU2Vjb25kU2VjUmVhZCA7CisKKyAgICAvLworICAgIC8vIFJlYWRpbmcgU0VDIGJvdGggYmVmb3JlIGFuZCBhZnRlciBTVUJTRUMgaW4gb3JkZXIgdG8gZGV0ZWN0IGlmIFNFQyBpbmNyZW1lbnRlZCB3aGlsZSByZWFkaW5nIFNVQlNFQworICAgIC8vIElmIFNFQyBpbmNyZW1lbnRlZCwgd2UgY2FuJ3QgYmUgc3VyZSB3aGljaCBTRUMgdGhlIFNVQlNFQyBiZWxvbmdzIHRvLCBzbyByZXBlYXRpbmcgdGhlIHNlcXVlbmNlIHRoZW4uCisgICAgLy8KKyAgICBkbyB7CisgICAgICAgIGN1cnJlbnRSdGMuc2VjQW5kU3ViU2VjWyAxIF0gPSBIV1JFRyggQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NFQyAgICApOworICAgICAgICBjdXJyZW50UnRjLnNlY0FuZFN1YlNlY1sgMCBdID0gSFdSRUcoIEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19TVUJTRUMgKTsKKyAgICAgICAgdWkzMlNlY29uZFNlY1JlYWQgICAgICAgICAgICA9IEhXUkVHKCBBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fU0VDICAgICk7CisgICAgfSB3aGlsZSAoIGN1cnJlbnRSdGMuc2VjQW5kU3ViU2VjWyAxIF0gIT0gdWkzMlNlY29uZFNlY1JlYWQgKTsKKworICAgIHJldHVybiAoIGN1cnJlbnRSdGMucmV0dXJuVmFsdWUgKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ydGMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzZlY2UxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX3J0Yy5oCkBAIC0wLDAgKzEsOTUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX3J0Yy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0wMSAxMTozMzoyOSArMDEwMCAoVHVlLCAwMSBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTgwNgorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBBT04gUlRDCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIGFvbl9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgYW9ucnRjX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQU9OX1JUQ19IX18KKyNkZWZpbmUgX19BT05fUlRDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19hb25fcnRjLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQgICAgTk9ST01fQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldAorICAgICNkZWZpbmUgQU9OUlRDQ3VycmVudDY0Qml0VmFsdWVHZXQgICAgICBOT1JPTV9BT05SVENDdXJyZW50NjRCaXRWYWx1ZUdldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIG1vc3Qgb2YgdGhlIEFPTl9SVEMgQVBJcyBhcyB0aGUgdWkzMkNoYW5uZWwKKy8vIHBhcmFtZXRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFPTl9SVENfQ0hfTk9ORSAgICAgICAgICAgIDB4MCAvLyBSVEMgTm8gY2hhbm5lbAorI2RlZmluZSBBT05fUlRDX0NIMCAgICAgICAgICAgICAgICAweDEgLy8gUlRDIENoYW5uZWwgMAorI2RlZmluZSBBT05fUlRDX0NIMSAgICAgICAgICAgICAgICAweDIgLy8gUlRDIENoYW5uZWwgMQorI2RlZmluZSBBT05fUlRDX0NIMiAgICAgICAgICAgICAgICAweDQgLy8gUlRDIENoYW5uZWwgMgorI2RlZmluZSBBT05fUlRDX0FDVElWRSAgICAgICAgICAgICAweDggLy8gUlRDIEFjdGl2ZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBBT05SVENDb25maWdEZWxheSBhcyB0aGUgdWkzMkRlbGF5IHBhcmFtZXRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFPTl9SVENfQ09ORklHX0RFTEFZX05PREVMQVkgMCAvLyBOTyBERUxBWQorI2RlZmluZSBBT05fUlRDX0NPTkZJR19ERUxBWV8xICAgICAgIDEgLy8gRGVsYXkgb2YgICAxIGNsayBjeWNsZQorI2RlZmluZSBBT05fUlRDX0NPTkZJR19ERUxBWV8yICAgICAgIDIgLy8gRGVsYXkgb2YgICAyIGNsayBjeWNsZXMKKyNkZWZpbmUgQU9OX1JUQ19DT05GSUdfREVMQVlfNCAgICAgICAzIC8vIERlbGF5IG9mICAgNCBjbGsgY3ljbGVzCisjZGVmaW5lIEFPTl9SVENfQ09ORklHX0RFTEFZXzggICAgICAgNCAvLyBEZWxheSBvZiAgIDggY2xrIGN5Y2xlcworI2RlZmluZSBBT05fUlRDX0NPTkZJR19ERUxBWV8xNiAgICAgIDUgLy8gRGVsYXkgb2YgIDE2IGNsayBjeWNsZXMKKyNkZWZpbmUgQU9OX1JUQ19DT05GSUdfREVMQVlfMzIgICAgICA2IC8vIERlbGF5IG9mICAzMiBjbGsgY3ljbGVzCisjZGVmaW5lIEFPTl9SVENfQ09ORklHX0RFTEFZXzQ4ICAgICAgNyAvLyBEZWxheSBvZiAgNDggY2xrIGN5Y2xlcworI2RlZmluZSBBT05fUlRDX0NPTkZJR19ERUxBWV82NCAgICAgIDggLy8gRGVsYXkgb2YgIDY0IGNsayBjeWNsZXMKKyNkZWZpbmUgQU9OX1JUQ19DT05GSUdfREVMQVlfODAgICAgICA5IC8vIERlbGF5IG9mICA4MCBjbGsgY3ljbGVzCisjZGVmaW5lIEFPTl9SVENfQ09ORklHX0RFTEFZXzk2ICAgICAxMCAvLyBEZWxheSBvZiAgOTYgY2xrIGN5Y2xlcworI2RlZmluZSBBT05fUlRDX0NPTkZJR19ERUxBWV8xMTIgICAgMTEgLy8gRGVsYXkgb2YgMTEyIGNsayBjeWNsZXMKKyNkZWZpbmUgQU9OX1JUQ19DT05GSUdfREVMQVlfMTI4ICAgIDEyIC8vIERlbGF5IG9mIDEyOCBjbGsgY3ljbGVzCisjZGVmaW5lIEFPTl9SVENfQ09ORklHX0RFTEFZXzE0NCAgICAxMyAvLyBEZWxheSBvZiAxNDQgY2xrIGN5Y2xlcworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBBT05SVENTZXRNb2RlQ0gxIGFzIHRoZSB1aTMyTW9kZQorLy8gcGFyYW1ldGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQU9OX1JUQ19NT0RFX0NIMV9DQVBUVVJFICAgICAxIC8vIENhcHR1cmUgbW9kZQorI2RlZmluZSBBT05fUlRDX01PREVfQ0gxX0NPTVBBUkUgICAgIDAgLy8gQ29tcGFyZSBNb2RlCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIEFPTlJUQ1NldE1vZGVDSDIgYXMgdGhlIHVpMzJNb2RlCisvLyBwYXJhbWV0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBT05fUlRDX01PREVfQ0gyX0NPTlRJTlVPVVMgICAgMSAvLyBDb250aW51b3VzIG1vZGUKKyNkZWZpbmUgQU9OX1JUQ19NT0RFX0NIMl9OT1JNQUxDT01QQVJFIDAgLy8gTm9ybWFsIGNvbXBhcmUgbW9kZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTXV0bGlwbGljYXRpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGZyb20gc2Vjb25kcyB0byBjb3JyZXNwb25kaW5nIHRpbWUgaW4KKy8vIHRoZSAiQ29tcGFyZVZhbHVlIiBmb3JtYXQuCisvLyBUaGUgZmFjdG9yIGNvcnJlc3BvbmQgdG8gdGhlIGNvbXBhcmUgdmFsdWUgZm9ybWF0IGRlc2NyaWJlZCBpbiB0aGUgcmVnaXN0ZXJzCisvLyAgIFxyZWYgQU9OX1JUQ19PX0NIMENNUCwgXHJlZiBBT05fUlRDX09fQ0gxQ01QIGFuZCBccmVmIEFPTl9SVENfT19DSDJDTVAuCisvLyBFeGFtcGxlMToKKy8vICAgNCBtaWxsaXNlY29uZHMgaW4gQ29tcGFyZVZhbHVlIGZvcm1hdCBjYW4gYmUgd3JpdHRlbiBsaWtlIHRoaXM6CisvLyAgICgodWludDMyX3QpKCAwLjAwNCAqIEZBQ1RPUl9TRUNfVE9fQ09NUF9WQUxfRk9STUFUICkpCisvLyBFeGFtcGxlMjoKKy8vICAgNCBzZWNvbmRzIGluIENvbXBhcmVWYWx1ZSBmb3JtYXQgY2FuIGJlIHdyaXR0ZW4gbGlrZSB0aGlzOgorLy8gICAoIDQgKiBGQUNUT1JfU0VDX1RPX0NPTVBfVkFMX0ZPUk1BVCApCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBGQUNUT1JfU0VDX1RPX0NPTVBfVkFMX0ZPUk1BVCAgIDB4MDAwMTAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSB0aGUgUlRDLgorLy8hCisvLyEgRW5hYmxlIHRoZSBBT04gUmVhbCBUaW1lIENsb2NrLgorLy8hCisvLyEgXG5vdGUgRXZlbnQgZ2VuZXJhdGlvbiBmb3IgZWFjaCBvZiB0aGUgdGhyZWUgY2hhbm5lbHMgbXVzdCBhbHNvIGJlIGVuYWJsZWQKKy8vISAgdXNpbmcgdGhlIGZ1bmN0aW9uIEFPTlJUQ0NoYW5uZWxFbmFibGUoKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFPTlJUQ0NoYW5uZWxFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05SVENFbmFibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEVuYWJsZSBSVEMuCisgICAgLy8KKyAgICBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NUTCwgQU9OX1JUQ19DVExfRU5fQklUTikgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIHRoZSBSVEMuCisvLyEKKy8vISBEaXNhYmxlIHRoZSBBT04gUmVhbCBUaW1lIENsb2NrLgorLy8hCisvLyEgXG5vdGUgRXZlbnQgZ2VuZXJhdGlvbiBmb3IgZWFjaCBvZiB0aGUgdGhyZWUgY2hhbm5lbHMgY2FuIGFsc28gYmUgZGlzYWJsZWQKKy8vISB1c2luZyB0aGUgZnVuY3Rpb24gQU9OUlRDQ2hhbm5lbERpc2FibGUoKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFPTlJUQ0NoYW5uZWxEaXNhYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OUlRDRGlzYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gRGlzYWJsZSBSVEMKKyAgICAvLworICAgIEhXUkVHQklUVyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ1RMLCBBT05fUlRDX0NUTF9FTl9CSVROKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlc2V0IHRoZSBSVEMuCisvLyEKKy8vISBSZXNldCB0aGUgQU9OIFJlYWwgVGltZSBDbG9jay4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05SVENSZXNldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmVzZXQgUlRDLgorICAgIC8vCisgICAgSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DVEwsIEFPTl9SVENfQ1RMX1JFU0VUX0JJVE4pID0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2sgaWYgdGhlIFJUQyBpcyBhY3RpdmUgKGVuYWJsZWQpLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIFJUQy4KKy8vISAtIGZhbHNlIDogUlRDIGlzIGRpc2FibGVkCisvLyEgLSB0cnVlICA6IFJUQyBpcyBlbmFibGVkCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0FPTlJUQ0FjdGl2ZSh2b2lkKQoreworICAgIC8vIFJlYWQgaWYgUlRDIGlzIGVuYWJsZWQKKyAgICByZXR1cm4oSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DVEwsIEFPTl9SVENfQ1RMX0VOX0JJVE4pKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2sgaWYgYW4gUlRDIGNoYW5uZWwgaXMgYWN0aXZlIChlbmFibGVkKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbCBzcGVjaWZpZXMgdGhlIFJUQyBjaGFubmVsIHRvIGNoZWNrIHN0YXR1cyBvZi4KKy8vISBQYXJhbWV0ZXIgbXVzdCBiZSBvbmUgKGFuZCBvbmx5IG9uZSkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDAKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDEKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDIKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0ZWQgY2hhbm5lbDoKKy8vISAtIGZhbHNlIDogQ2hhbm5lbCBpcyBkaXNhYmxlZAorLy8hIC0gdHJ1ZSAgOiBDaGFubmVsIGlzIGVuYWJsZWQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQU9OUlRDQ2hhbm5lbEFjdGl2ZSh1aW50MzJfdCB1aTMyQ2hhbm5lbCkKK3sKKyAgICB1aW50MzJfdCB1aW50MzJTdGF0dXMgPSAwOworCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMCkKKyAgICB7CisgICAgICAgIHVpbnQzMlN0YXR1cyA9IEhXUkVHQklUVyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0hDVEwsIEFPTl9SVENfQ0hDVExfQ0gwX0VOX0JJVE4pOworICAgIH0KKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDEpCisgICAgeworICAgICAgICB1aW50MzJTdGF0dXMgPSBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIQ1RMLCBBT05fUlRDX0NIQ1RMX0NIMV9FTl9CSVROKTsKKyAgICB9CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gyKQorICAgIHsKKyAgICAgICAgdWludDMyU3RhdHVzID0gSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSENUTCwgQU9OX1JUQ19DSENUTF9DSDJfRU5fQklUTik7CisgICAgfQorCisgICAgcmV0dXJuKHVpbnQzMlN0YXR1cyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSBFdmVudCBEZWxheSBmb3IgdGhlIFJUQy4KKy8vIQorLy8hIEVhY2ggZXZlbnQgZnJvbSB0aGUgdGhyZWUgaW5kaXZpZHVhbCBjaGFubmVscyBjYW4gZ2VuZXJhdGUgYSBkZWxheWVkCisvLyEgZXZlbnQuIFRoZSBkZWxheSB0aW1lIGZvciB0aGVzZSBldmVudHMgaXMgc2V0IHVzaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEgVGhlIGRlbGF5IGlzIG1lYXN1cmVkIGluIGNsb2NrIGN5Y2xlcy4KKy8vIQorLy8hIFxub3RlIFRoZXJlIGlzIG9ubHkgb25lIGRlbGF5IHNldHRpbmcgc2hhcmVkIGZvciBhbGwgdGhyZWUgY2hhbm5lbHMuCisvLyEKKy8vISBccGFyYW0gdWkzMkRlbGF5IHNwZWNpZmllcyB0aGUgZGVsYXkgdGltZSBmb3IgZGVsYXllZCBldmVudHMuCisvLyEgUGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEFPTl9SVENfQ09ORklHX0RFTEFZX05PREVMQVkKKy8vISAtIFxyZWYgQU9OX1JUQ19DT05GSUdfREVMQVlfMQorLy8hIC0gXHJlZiBBT05fUlRDX0NPTkZJR19ERUxBWV8yCisvLyEgLSBccmVmIEFPTl9SVENfQ09ORklHX0RFTEFZXzQKKy8vISAtIFxyZWYgQU9OX1JUQ19DT05GSUdfREVMQVlfOAorLy8hIC0gXHJlZiBBT05fUlRDX0NPTkZJR19ERUxBWV8xNgorLy8hIC0gXHJlZiBBT05fUlRDX0NPTkZJR19ERUxBWV8zMgorLy8hIC0gXHJlZiBBT05fUlRDX0NPTkZJR19ERUxBWV80OAorLy8hIC0gXHJlZiBBT05fUlRDX0NPTkZJR19ERUxBWV82NAorLy8hIC0gXHJlZiBBT05fUlRDX0NPTkZJR19ERUxBWV84MAorLy8hIC0gXHJlZiBBT05fUlRDX0NPTkZJR19ERUxBWV85NgorLy8hIC0gXHJlZiBBT05fUlRDX0NPTkZJR19ERUxBWV8xMTIKKy8vISAtIFxyZWYgQU9OX1JUQ19DT05GSUdfREVMQVlfMTI4CisvLyEgLSBccmVmIEFPTl9SVENfQ09ORklHX0RFTEFZXzE0NAorLy8hCisvLyEgXHJldHVybiBOb25lLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05SVENEZWxheUNvbmZpZyh1aW50MzJfdCB1aTMyRGVsYXkpCit7CisgICAgdWludDMyX3QgdWkzMkNmZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMyRGVsYXkgPD0gQU9OX1JUQ19DT05GSUdfREVMQVlfMTQ0KTsKKworCisgICAgdWkzMkNmZyA9ICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ1RMKTsKKyAgICB1aTMyQ2ZnICY9IH4oQU9OX1JUQ19DVExfRVZfREVMQVlfTSk7CisgICAgdWkzMkNmZyB8PSAodWkzMkRlbGF5IDw8IEFPTl9SVENfQ1RMX0VWX0RFTEFZX1MpOworCisgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NUTCkgPSB1aTMyQ2ZnOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgdGhlIHNvdXJjZSBvZiB0aGUgY29tYmluZWQgZXZlbnQuCisvLyEKKy8vISBBIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIGEgY29tYmluYXRpb24gb2YgdGhlIHRocmVlCisvLyEgZGVsYXllZCBldmVudHMuIERlbGF5ZWQgZXZlbnRzIGZvcm0gdGhlIHNwZWNpZmllZCBjaGFubmVscyBhcmUgT1InZWQKKy8vISB0b2dldGhlciB0byBnZW5lcmF0ZSB0aGUgY29tYmluZWQgZXZlbnQuCisvLyEKKy8vISBccGFyYW0gdWkzMkNoYW5uZWxzIHNwZWNpZmllcyB0aGUgY2hhbm5lbHMgdGhhdCBhcmUgdG8gYmUgdXNlZCBmb3IKKy8vISBnZW5lcmF0aW5nIHRoZSBjb21iaW5lZCBldmVudC4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEFPTl9SVENfQ0gwCisvLyEgLSBccmVmIEFPTl9SVENfQ0gxCisvLyEgLSBccmVmIEFPTl9SVENfQ0gyCisvLyEgLSBccmVmIEFPTl9SVENfQ0hfTk9ORQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTlJUQ0NvbWJpbmVkRXZlbnRDb25maWcodWludDMyX3QgdWkzMkNoYW5uZWxzKQoreworICAgIHVpbnQzMl90IHVpMzJDZmc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoICh1aTMyQ2hhbm5lbHMgJiAoQU9OX1JUQ19DSDAgfCBBT05fUlRDX0NIMSB8IEFPTl9SVENfQ0gyKSkgfHwKKyAgICAgICAgICAgICh1aTMyQ2hhbm5lbHMgPT0gQU9OX1JUQ19DSF9OT05FKSApOworCisgICAgdWkzMkNmZyA9ICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ1RMKTsKKyAgICB1aTMyQ2ZnICY9IH4oQU9OX1JUQ19DVExfQ09NQl9FVl9NQVNLX00pOworICAgIHVpMzJDZmcgfD0gKHVpMzJDaGFubmVscyA8PCBBT05fUlRDX0NUTF9DT01CX0VWX01BU0tfUyk7CisKKyAgICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ1RMKSA9IHVpMzJDZmc7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFyIGV2ZW50IGZyb20gYSBzcGVjaWZpZWQgY2hhbm5lbC4KKy8vIQorLy8hIEluIGNhc2Ugb2YgYW4gYWN0aXZlIGV2ZW50IGZyb20gdGhlIHNwZWNpZmllZCBjaGFubmVsLCB0aGUgZXZlbnQKKy8vISB3aWxsIGJlIGNsZWFyZWQgKGRlLWFzc2VydGVkKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbCBjbGVhcnMgdGhlIGV2ZW50IGZyb20gb25lIG9yIG1vcmUgUlRDIGNoYW5uZWxzOgorLy8hIC0gXHJlZiBBT05fUlRDX0NIMAorLy8hIC0gXHJlZiBBT05fUlRDX0NIMQorLy8hIC0gXHJlZiBBT05fUlRDX0NIMgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTlJUQ0V2ZW50Q2xlYXIodWludDMyX3QgdWkzMkNoYW5uZWwpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gwKSB8fAorICAgICAgICAgICAodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDEpIHx8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMikpOworCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMCkKKyAgICB7CisgICAgICAgIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19FVkZMQUdTKSA9IEFPTl9SVENfRVZGTEFHU19DSDA7CisgICAgfQorCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMSkKKyAgICB7CisgICAgICAgIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19FVkZMQUdTKSA9IEFPTl9SVENfRVZGTEFHU19DSDE7CisgICAgfQorCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMikKKyAgICB7CisgICAgICAgIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19FVkZMQUdTKSA9IEFPTl9SVENfRVZGTEFHU19DSDI7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgZXZlbnQgc3RhdHVzIGZvciBhIHNwZWNpZmllZCBjaGFubmVsLgorLy8hCisvLyEgSW4gY2FzZSBvZiBhbiBhY3RpdmUgZXZlbnQgZnJvbSB0aGUgc3BlY2lmaWVkIGNoYW5uZWwsCisvLyEgdGhpcyBjYWxsIHdpbGwgcmV0dXJuIFxjIHRydWUgb3RoZXJ3aXNlIFxjIGZhbHNlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsIHNwZWNpZmllcyB0aGUgY2hhbm5lbCBmcm9tIHdoaWNoIHRvIHF1ZXJ5IHRoZSBldmVudCBzdGF0ZS4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgb25lIChhbmQgb25seSBvbmUpIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEFPTl9SVENfQ0gwCisvLyEgLSBccmVmIEFPTl9SVENfQ0gxCisvLyEgLSBccmVmIEFPTl9SVENfQ0gyCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXGMgdHJ1ZSBpZiBhbiBldmVudCBoYXMgb2NjdXJyZWQgZm9yIHRoZSBnaXZlbiBjaGFubmVsLAorLy8hIG90aGVyd2lzZSBcYyBmYWxzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQU9OUlRDRXZlbnRHZXQodWludDMyX3QgdWkzMkNoYW5uZWwpCit7CisgICAgdWludDMyX3QgdWludDMyRXZlbnQgPSAwOworCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gwKSB8fAorICAgICAgICAgICAodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDEpIHx8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMikpOworCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMCkKKyAgICB7CisgICAgICAgIHVpbnQzMkV2ZW50ID0gSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19FVkZMQUdTLCBBT05fUlRDX0VWRkxBR1NfQ0gwX0JJVE4pOworICAgIH0KKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDEpCisgICAgeworICAgICAgICB1aW50MzJFdmVudCA9IEhXUkVHQklUVyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fRVZGTEFHUywgQU9OX1JUQ19FVkZMQUdTX0NIMV9CSVROKTsKKyAgICB9CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gyKQorICAgIHsKKyAgICAgICAgdWludDMyRXZlbnQgPSBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0VWRkxBR1MsIEFPTl9SVENfRVZGTEFHU19DSDJfQklUTik7CisgICAgfQorCisgICAgcmV0dXJuKHVpbnQzMkV2ZW50KTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IGludGVnZXIgcGFydCAoc2Vjb25kcykgb2YgUlRDIGZyZWUtcnVubmluZyB0aW1lci4KKy8vIQorLy8hIEdldCB0aGUgdmFsdWUgaW4gc2Vjb25kcyBvZiBSVEMgZnJlZS1ydW5uaW5nIHRpbWVyLCBpLmUuIHRoZSBpbnRlZ2VyIHBhcnQuCisvLyEgVGhlIGZyYWN0aW9uYWwgcGFydCBpcyByZXR1cm5lZCBmcm9tIGEgY2FsbCB0byBBT05SVENGcmFjdGlvbkdldCgpLgorLy8hCisvLyEgXG5vdGUgSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFxyZWYgQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldCgpIGluc3RlYWQKKy8vISBvZiB0aGlzIGZ1bmN0aW9uIGlmIHRoZSA8MTYuMTY+IGZvcm1hdCBpcyBzdWZmaWNpZW50LgorLy8hCisvLyEgXG5vdGUgVG8gcmVhZCBhIGNvbnNpc3RlbnQgcGFpciBvZiBpbnRlZ2VyIGFuZCBmcmFjdGlvbmFsIHBhcnRzLAorLy8hIFxyZWYgQU9OUlRDU2VjR2V0KCkgbXVzdCBiZSBjYWxsZWQgZmlyc3QgdG8gdHJpZ2dlciBsYXRjaGluZyBvZiB0aGUKKy8vISBmcmFjdGlvbmFsIHBhcnQsIHdoaWNoIGlzIHRoZW4gcmVhZCBieSBccmVmIEFPTlJUQ0ZyYWN0aW9uR2V0KCkuIEludGVycnVwdHMKKy8vISBtdXN0IGJlIGRpc2FibGVkIHRvIGVuc3VyZSB0aGF0IHRoZXNlIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBhdG9taWNhbGx5LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBpbnRlZ2VyIHBhcnQgb2YgUlRDIGZyZWUgcnVubmluZyB0aW1lci4KKy8vIQorLy8hIFxzYSBccmVmIEFPTlJUQ0ZyYWN0aW9uR2V0KCkgXHJlZiBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FPTlJUQ1NlY0dldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gVGhlIGZvbGxvd2luZyByZWFkIGdldHMgdGhlIHNlY29uZHMsIGJ1dCBhbHNvIGxhdGNoZXMgdGhlIGZyYWN0aW9uYWwKKyAgICAvLyBwYXJ0LgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19TRUMpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IGZyYWN0aW9uYWwgcGFydCAoc3ViLXNlY29uZHMpIG9mIFJUQyBmcmVlLXJ1bm5pbmcgdGltZXIuCisvLyEKKy8vISBHZXQgdGhlIHZhbHVlIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgUlRDIGZyZWUtcnVubmluZyB0aW1lciwgaS5lLiB0aGUKKy8vISBzdWItc2Vjb25kIHBhcnQuCisvLyEKKy8vISBcbm90ZSBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgXHJlZiBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KCkgaW5zdGVhZAorLy8hIG9mIHRoaXMgZnVuY3Rpb24gaWYgdGhlIDwxNi4xNj4gZm9ybWF0IGlzIHN1ZmZpY2llbnQuCisvLyEKKy8vISBcbm90ZSBUbyByZWFkIGEgY29uc2lzdGVudCBwYWlyIG9mIGludGVnZXIgYW5kIGZyYWN0aW9uYWwgcGFydHMsCisvLyEgXHJlZiBBT05SVENTZWNHZXQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCB0byB0cmlnZ2VyIGxhdGNoaW5nIG9mIHRoZQorLy8hIGZyYWN0aW9uYWwgcGFydCwgd2hpY2ggaXMgdGhlbiByZWFkIGJ5IFxyZWYgQU9OUlRDRnJhY3Rpb25HZXQoKS4gSW50ZXJydXB0cworLy8hIG11c3QgYmUgZGlzYWJsZWQgdG8gZW5zdXJlIHRoYXQgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIGF0b21pY2FsbHkuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiBSVEMgZnJlZSBydW5uaW5nIHRpbWVyLgorLy8hCisvLyEgXHNhIFxyZWYgQU9OUlRDU2VjR2V0KCkgXHJlZiBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FPTlJUQ0ZyYWN0aW9uR2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBOb3RlMTogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIEFPTiBSVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KCkgaW5zdGVhZAorICAgIC8vICAgICAgICBvZiB0aGlzIGZ1bmN0aW9uIGlmIHRoZSA8MTYuMTY+IGZvcm1hdCBpcyBzdWZmaWNpZW50LgorICAgIC8vIE5vdGUyOiBBT05SVENTZWNHZXQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiB0byBnZXQgYQorICAgIC8vICAgICAgICBjb25zaXN0ZW50IHJlYWRpbmcuCisgICAgLy8gTm90ZTM6IEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZCBiZXR3ZWVuIHRoZSBjYWxsIHRvIEFPTlJUQ1NlY0dldCgpIGFuZCB0aGlzCisgICAgLy8gICAgICAgIGNhbGwgc2luY2UgdGhlcmUgYXJlIGludGVycnVwdCBmdW5jdGlvbnMgdGhhdCByZWFkcyBBT05fUlRDX09fU0VDCisgICAgLy8KKyAgICByZXR1cm4oSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NVQlNFQykpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIHN1YiBzZWNvbmQgaW5jcmVtZW50IG9mIHRoZSBSVEMuCisvLyEKKy8vISBHZXQgdGhlIHZhbHVlIG9mIHRoZSBzdWItc2Vjb25kIGluY3JlbWVudCB3aGljaCBpcyBhZGRlZCB0byB0aGUgUlRDCisvLyEgYWJzb2x1dGUgdGltZSBvbiBldmVyeSBjbG9jayB0aWNrLgorLy8hCisvLyEgXG5vdGUgRm9yIGEgcHJlY2lzZSBhbmQgdGVtcGVyYXR1cmUgaW5kZXBlbmRlbnQgTEYgY2xvY2sgKGUuZy4gYW4gTEYgWFRBTCkKKy8vISB0aGlzIHZhbHVlIHdvdWxkIHN0YXkgdGhlIHNhbWUgYWNyb3NzIHRlbXBlcmF0dXJlLiBGb3IgdGVtcGVyYXR1ZQorLy8hIGRlcGVuZGVudCBjbG9jayBzb3VyY2VzIGxpa2UgYW4gUkMgb3NjaWxsYXRvciwgdGhpcyB2YWx1ZSB3aWxsIGNoYW5nZQorLy8hIG92ZXIgdGltZSBpZiB0aGUgYXBwbGljYXRpb24gaW5jbHVkZXMgZnVuY3Rpb25hbGl0eSBmb3IgZG9pbmcgdGVtcGVyYXR1cmUKKy8vISBjb21wZW5zYXRpb24gb2YgdGhlIFJUQyBjbG9jayBzb3VyY2UuIFRoZSBkZWZhdWx0IHZhbHVlIGNvcnJlc3BvbmRzIHRvIGEKKy8vISBMRiBjbG9jayBmcmVxdWVuY3kgb2YgZXhhY3RseSAzMi43Njgga0h6LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzdWItc2Vjb25kIGluY3JlbWVudCBvZiB0aGUgUlRDIGFkZGVkIHRvIHRoZSBvdmVyYWxsCisvLyEgdmFsdWUgb24gZXZlcnkgUlRDIGNsb2NrIHRpY2suCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBT05SVENTdWJTZWNJbmNyR2V0KHZvaWQpCit7CisgICAgcmV0dXJuKEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19TVUJTRUNJTkMpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IG9wZXJhdGlvbmFsIG1vZGUgb2YgY2hhbm5lbCAxLgorLy8hCisvLyEgU2V0IHRoZSBvcGVyYXRpb25hbCBtb2RlIG9mIGNoYW5uZWwgMS4gSXQgY2FuIGJlIGNhcHR1cmUgb3IgY29tcGFyZSBtb2RlLgorLy8hIEluIGNhcHR1cmUgbW9kZSwgYW4gZXh0ZXJuYWwgZXZlbnQgY2F1c2VzIHRoZSB2YWx1ZSBvZiB0aGUgZnJlZSBydW5uaW5nCisvLyEgY291bnRlciB0byBiZSBzdG9yZWQsIHRvIHJlbWVtYmVyIHRoZSB0aW1lIG9mIHRoZSBldmVudC4KKy8vIQorLy8hIFxub3RlIFRoZSBkZWZhdWx0IG1vZGUgaXMgY29tcGFyZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyTW9kZSBzcGVjaWZpZXMgdGhlIG1vZGUgZm9yIGNoYW5uZWwgMS4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEFPTl9SVENfTU9ERV9DSDFfQ0FQVFVSRQorLy8hIC0gXHJlZiBBT05fUlRDX01PREVfQ0gxX0NPTVBBUkUKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgIFxzYSBBT05SVENNb2RlQ2gxR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OUlRDTW9kZUNoMVNldCh1aW50MzJfdCB1aTMyTW9kZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVCgodWkzMk1vZGUgPT0gQU9OX1JUQ19NT0RFX0NIMV9DQVBUVVJFKSB8fAorICAgICAgICAgICAodWkzMk1vZGUgPT0gQU9OX1JUQ19NT0RFX0NIMV9DT01QQVJFKSk7CisKKyAgICBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIQ1RMLCBBT05fUlRDX0NIQ1RMX0NIMV9DQVBUX0VOX0JJVE4pID0gdWkzMk1vZGU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBvcGVyYXRpb25hbCBtb2RlIG9mIGNoYW5uZWwgMS4KKy8vIQorLy8hIEdldCB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiBjaGFubmVsIDEuIEl0IGNhbiBiZSBjYXB0dXJlIG9yIGNvbXBhcmUgbW9kZS4KKy8vISBJbiBjYXB0dXJlIG1vZGUsIGFuIGV4dGVybmFsIGV2ZW50IGNhdXNlcyB0aGUgdmFsdWUgb2YgdGhlIGZyZWUgcnVubmluZworLy8hIGNvdW50ZXIgdG8gYmUgc3RvcmVkLCB0byByZW1lbWJlciB0aGUgdGltZSBvZiB0aGUgZXZlbnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIG9wZXJhdGlvbmFsIG1vZGUgb2YgY2hhbm5lbCAxLCBvbmUgb2Y6CisvLyEgLSBccmVmIEFPTl9SVENfTU9ERV9DSDFfQ0FQVFVSRQorLy8hIC0gXHJlZiBBT05fUlRDX01PREVfQ0gxX0NPTVBBUkUKKy8vIQorLy8hIFxzYSBBT05SVENNb2RlQ2gxU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FPTlJUQ01vZGVDaDFHZXQodm9pZCkKK3sKKyAgICByZXR1cm4oSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSENUTCwgQU9OX1JUQ19DSENUTF9DSDFfQ0FQVF9FTl9CSVROKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBvcGVyYXRpb25hbCBtb2RlIG9mIGNoYW5uZWwgMi4KKy8vIQorLy8hIFNldCB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiBjaGFubmVsIDIuIEl0IGNhbiBiZSBpbiBjb250aW51b3VzIGNvbXBhcmUKKy8vISBtb2RlIG9yIG5vcm1hbCBjb21wYXJlIG1vZGUuCisvLyEgSW4gY29udGludW91cyBtb2RlLCBhIHZhbHVlIGlzIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50ZWQgdG8gdGhlIGNoYW5uZWwgMgorLy8hIGNvbXBhcmUgcmVnaXN0ZXIsIHVwb24gYSBjaGFubmVsIDIgY29tcGFyZSBldmVudC4gVGhpcyBhbGxvd3MgY2hhbm5lbCAyIHRvCisvLyEgZ2VuZXJhdGUgYSBzZXJpZXMgb2YgY29tcGxldGVseSBlcXVpZGlzdGFudCBldmVudHMuCisvLyEgVGhlIGluY3JlbWVudCB2YWx1ZSBpcyBzZXQgYnkgdGhlIEFPTlJUQ0luY1ZhbHVlQ2gyU2V0KCkgY2FsbC4KKy8vIQorLy8hIFxub3RlIFRoZSBkZWZhdWx0IG1vZGUgaXMgbm9ybWFsIGNvbXBhcmUuCisvLyEKKy8vISBccGFyYW0gdWkzMk1vZGUgc3BlY2lmaWVzIHRoZSBtb2RlIGZvciBjaGFubmVsIDIuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBBT05fUlRDX01PREVfQ0gyX0NPTlRJTlVPVVMKKy8vISAtIFxyZWYgQU9OX1JUQ19NT0RFX0NIMl9OT1JNQUxDT01QQVJFCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBT05SVENJbmNWYWx1ZUNoMlNldCgpLCBBT05SVENJbmNWYWx1ZUNoMkdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTlJUQ01vZGVDaDJTZXQodWludDMyX3QgdWkzMk1vZGUpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoKHVpMzJNb2RlID09IEFPTl9SVENfTU9ERV9DSDJfQ09OVElOVU9VUykgfHwKKyAgICAgICAgICAgKHVpMzJNb2RlID09IEFPTl9SVENfTU9ERV9DSDJfTk9STUFMQ09NUEFSRSkpOworCisgICAgSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSENUTCwgQU9OX1JUQ19DSENUTF9DSDJfQ09OVF9FTl9CSVROKSA9IHVpMzJNb2RlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgb3BlcmF0aW9uYWwgbW9kZSBvZiBjaGFubmVsIDIuCisvLyEKKy8vISBHZXQgdGhlIG9wZXJhdGlvbmFsIG1vZGUgb2YgY2hhbm5lbCAyLiBJdCBjYW4gYmUgaW4gY29udGludW91cyBjb21wYXJlCisvLyEgbW9kZSBvciBub3JtYWwgY29tcGFyZSBtb2RlLgorLy8hIEluIGNvbnRpbnVvdXMgbW9kZSwgYSB2YWx1ZSBpcyBhdXRvbWF0aWNhbGx5IGluY3JlbWVudGVkIHRvIHRoZSBjaGFubmVsIDIKKy8vISBjb21wYXJlIHJlZ2lzdGVyLCB1cG9uIGEgY2hhbm5lbCAyIGNvbXBhcmUgZXZlbnQuIFRoaXMgYWxsb3dzIGNoYW5uZWwgMiB0bworLy8hIGdlbmVyYXRlIGEgc2VyaWVzIG9mIGNvbXBsZXRlbHkgZXF1aWRpc3RhbnQgZXZlbnRzLgorLy8hIFRoZSBpbmNyZW1lbnQgdmFsdWUgaXMgc2V0IGJ5IHRoZSBBT05SVENJbmNWYWx1ZUNoMlNldCgpIGNhbGwuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIG9wZXJhdGlvbmFsIG1vZGUgb2YgY2hhbm5lbCAyLCBpLmUuIG9uZSBvZjoKKy8vISAtIFxyZWYgQU9OX1JUQ19NT0RFX0NIMl9DT05USU5VT1VTCisvLyEgLSBccmVmIEFPTl9SVENfTU9ERV9DSDJfTk9STUFMQ09NUEFSRQorLy8hCisvLyEgXHNhIEFPTlJUQ0luY1ZhbHVlQ2gyU2V0KCksIEFPTlJUQ0luY1ZhbHVlQ2gyR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FPTlJUQ01vZGVDaDJHZXQodm9pZCkKK3sKKyAgICByZXR1cm4oSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSENUTCwgQU9OX1JUQ19DSENUTF9DSDJfQ09OVF9FTl9CSVROKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSBldmVudCBvcGVyYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KKy8vIQorLy8hIEVuYWJsZSB0aGUgZXZlbnQgZ2VuZXJhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsLgorLy8hCisvLyEgXG5vdGUgVGhlIFJUQyBmcmVlIHJ1bm5pbmcgY2xvY2sgIG11c3QgYWxzbyBiZSBlbmFibGVkIGdsb2JhbGx5IHVzaW5nIHRoZQorLy8hIEFPTlJUQ0VuYWJsZSgpIGNhbGwuCisvLyEKKy8vISBccGFyYW0gdWkzMkNoYW5uZWwgc3BlY2lmaWVzIG9uZSBvciBtb3JlIGNoYW5uZWxzIHRvIGVuYWJsZToKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDAKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDEKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDIKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFPTlJUQ0VuYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTlJUQ0NoYW5uZWxFbmFibGUodWludDMyX3QgdWkzMkNoYW5uZWwpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gwKSB8fAorICAgICAgICAgICAodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDEpIHx8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMikpOworCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMCkKKyAgICB7CisgICAgICAgIEhXUkVHQklUVyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0hDVEwsIEFPTl9SVENfQ0hDVExfQ0gwX0VOX0JJVE4pID0gMTsKKyAgICB9CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gxKQorICAgIHsKKyAgICAgICAgSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSENUTCwgQU9OX1JUQ19DSENUTF9DSDFfRU5fQklUTikgPSAxOworICAgIH0KKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDIpCisgICAgeworICAgICAgICBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIQ1RMLCBBT05fUlRDX0NIQ1RMX0NIMl9FTl9CSVROKSA9IDE7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIGV2ZW50IG9wZXJhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsLgorLy8hCisvLyEgRGlzYWJsZSB0aGUgZXZlbnQgZ2VuZXJhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsLgorLy8hCisvLyEgXG5vdGUgVGhlIFJUQyBmcmVlIHJ1bm5pbmcgY2xvY2sgIGNhbiBhbHNvIGJlIGRpc2FibGVkIGdsb2JhbGx5IHVzaW5nIHRoZQorLy8hIEFPTlJUQ0Rpc2FibGUoKSBjYWxsLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsIHNwZWNpZmllcyBvbmUgb3IgbW9yZSBjaGFubmVscyB0byBkaXNhYmxlOgorLy8hIC0gXHJlZiBBT05fUlRDX0NIMAorLy8hIC0gXHJlZiBBT05fUlRDX0NIMQorLy8hIC0gXHJlZiBBT05fUlRDX0NIMgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9OUlRDRGlzYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTlJUQ0NoYW5uZWxEaXNhYmxlKHVpbnQzMl90IHVpMzJDaGFubmVsKQoreworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgQVNTRVJUKCh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMCkgfHwKKyAgICAgICAgICAgKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gxKSB8fAorICAgICAgICAgICAodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDIpKTsKKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDApCisgICAgeworICAgICAgICBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIQ1RMLCBBT05fUlRDX0NIQ1RMX0NIMF9FTl9CSVROKSA9IDA7CisgICAgfQorCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMSkKKyAgICB7CisgICAgICAgIEhXUkVHQklUVyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0hDVEwsIEFPTl9SVENfQ0hDVExfQ0gxX0VOX0JJVE4pID0gMDsKKyAgICB9CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gyKQorICAgIHsKKyAgICAgICAgSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSENUTCwgQU9OX1JUQ19DSENUTF9DSDJfRU5fQklUTikgPSAwOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHRoZSBjb21wYXJlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gY2hhbm5lbC4KKy8vIQorLy8hIFNldCBjb21wYXJlIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCisvLyEKKy8vISBUaGUgZm9ybWF0IG9mIHRoZSBjb21wYXJlIHZhbHVlIGlzIGEgMTYgYml0IGludGVnZXIgYW5kIDE2IGJpdCBmcmFjdGlvbmFsCisvLyEgZm9ybWF0IDwxNiBzZWMuMTYgc3Vic2VjPi4gVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFJUQyBjb3VudGVyCisvLyEgY2FuIGJlIHJldHJpZXZlZCBpbiBhIGZvcm1hdCBjb21wYXRpYmxlIHRvIHRoZSBjb21wYXJlIHJlZ2lzdGVyIHVzaW5nCisvLyEgXHJlZiBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KCkKKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbCBzcGVjaWZpZXMgb25lIG9yIG1vcmUgY2hhbm5lbHMgdG8gc2V0IGNvbXBhcmUgdmFsdWUgZm9yOgorLy8hIC0gXHJlZiBBT05fUlRDX0NIMAorLy8hIC0gXHJlZiBBT05fUlRDX0NIMQorLy8hIC0gXHJlZiBBT05fUlRDX0NIMgorLy8hIFxwYXJhbSB1aTMyQ29tcFZhbHVlIGlzIHRoZSBjb21wYXJlIHZhbHVlIHRvIHNldCBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsLgorLy8hIC0gRm9ybWF0OiA8MTYgc2VjLjE2IHN1YnNlYz4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05SVENDb21wYXJlVmFsdWVTZXQodWludDMyX3QgdWkzMkNoYW5uZWwsIHVpbnQzMl90IHVpMzJDb21wVmFsdWUpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gwKSB8fAorICAgICAgICAgICAodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDEpIHx8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMikpOworCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMCkKKyAgICB7CisgICAgICAgIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSDBDTVApID0gdWkzMkNvbXBWYWx1ZTsKKyAgICB9CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gxKQorICAgIHsKKyAgICAgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIMUNNUCkgPSB1aTMyQ29tcFZhbHVlOworICAgIH0KKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDIpCisgICAgeworICAgICAgICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0gyQ01QKSA9IHVpMzJDb21wVmFsdWU7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIGNvbXBhcmUgdmFsdWUgZm9yIHRoZSBnaXZlbiBjaGFubmVsLgorLy8hCisvLyEgR2V0IGNvbXBhcmUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbCBzcGVjaWZpZXMgYSBjaGFubmVsLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgKGFuZCBvbmx5IG9uZSkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDAKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDEKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDIKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RvcmVkIGNvbXBhcmUgdmFsdWUgZm9yIHRoZSBnaXZlbiBjaGFubmVsLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQU9OUlRDQ29tcGFyZVZhbHVlR2V0KHVpbnQzMl90IHVpMzJDaGFubmVsKQoreworICAgIHVpbnQzMl90IHVpMzJWYWx1ZSA9IDA7CisKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzCisgICAgQVNTRVJUKCh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMCkgfHwKKyAgICAgICAgICAgKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gxKSB8fAorICAgICAgICAgICAodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDIpKTsKKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDApCisgICAgeworICAgICAgICB1aTMyVmFsdWUgPSBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0gwQ01QKTsKKyAgICB9CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gxKQorICAgIHsKKyAgICAgICAgdWkzMlZhbHVlID0gSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIMUNNUCk7CisgICAgfQorCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMikKKyAgICB7CisgICAgICAgIHVpMzJWYWx1ZSA9IEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSDJDTVApOworICAgIH0KKworICAgIHJldHVybih1aTMyVmFsdWUpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFJUQyBjb3VudGVyIGluIGEgZm9ybWF0IHRoYXQgbWF0Y2hlcworLy8hIFJUQyBjb21wYXJlIHZhbHVlcy4KKy8vIQorLy8hIFRoZSBjb21wYXJlIHZhbHVlIHJlZ2lzdGVycyBjb250YWlucyAxNiBpbnRlZ2VyIGFuZCAxNiBmcmFjdGlvbmFsIGJpdHMuCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUlRDIGNvdW50ZXIgaW4gYW4KKy8vISBpZGVudGljYWwgZm9ybWF0LgorLy8hCisvLyEgXG5vdGUgUmVhZGluZyBTRUMgYm90aCBiZWZvcmUgYW5kIGFmdGVyIFNVQlNFQyBpbiBvcmRlciB0byBkZXRlY3QgaWYgU0VDCisvLyEgaW5jcmVtZW50ZWQgd2hpbGUgcmVhZGluZyBTVUJTRUMuIElmIFNFQyBpbmNyZW1lbnRlZCwgd2UgY2FuJ3QgYmUgc3VyZQorLy8hIHdoaWNoIFNFQyB0aGUgU1VCU0VDIGJlbG9uZ3MgdG8sIHNvIHJlcGVhdGluZyB0aGUgc2VxdWVuY2UgdGhlbi4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUlRDIGNvdW50ZXIgaW4gYSA8MTYuMTY+IGZvcm1hdAorLy8hIChTRUNbMTU6MF0uU1VCU0VDWzMxOjE2XSkuCisvLyEKKy8vISBcc2EgXHJlZiBBT05SVENDb21wYXJlVmFsdWVTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIGN1cnJlbnQgNjQtYml0IHZhbHVlIG9mIHRoZSBSVEMgY291bnRlci4KKy8vIQorLy8hIFxub3RlIFJlYWRpbmcgU0VDIGJvdGggYmVmb3JlIGFuZCBhZnRlciBTVUJTRUMgaW4gb3JkZXIgdG8gZGV0ZWN0IGlmIFNFQworLy8hIGluY3JlbWVudGVkIHdoaWxlIHJlYWRpbmcgU1VCU0VDLiBJZiBTRUMgaW5jcmVtZW50ZWQsIHdlIGNhbid0IGJlIHN1cmUKKy8vISB3aGljaCBTRUMgdGhlIFNVQlNFQyBiZWxvbmdzIHRvLCBzbyByZXBlYXRpbmcgdGhlIHNlcXVlbmNlIHRoZW4uCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFJUQyBjb3VudGVyIGluIGEgNjQtYml0cyBmb3JtYXQKKy8vISAoU0VDWzMxOjBdLlNVQlNFQ1szMTowXSkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQ2NF90IEFPTlJUQ0N1cnJlbnQ2NEJpdFZhbHVlR2V0KHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgdGhlIGNoYW5uZWwgMiBpbmNyZW1lbnQgdmFsdWUgd2hlbiBvcGVyYXRpbmcgaW4gY29udGludW91cyBtb2RlLgorLy8hCisvLyEgU2V0IHRoZSBjaGFubmVsIDIgaW5jcmVtZW50IHZhbHVlIHdoZW4gb3BlcmF0aW5nIGluIGNvbnRpbnVvdXMgbW9kZS4KKy8vISBUaGUgc3BlY2lmaWVkIHZhbHVlIGlzIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50ZWQgdG8gdGhlIGNoYW5uZWwgMiBjb21wYXJlCisvLyEgcmVnaXN0ZXIsIHVwb24gYSBjaGFubmVsIDIgY29tcGFyZSBldmVudC4gVGhpcyBhbGxvd3MgY2hhbm5lbCAyIHRvIGdlbmVyYXRlCisvLyEgYSBzZXJpZXMgb2YgY29tcGxldGVseSBlcXVpZGlzdGFudCBldmVudHMuCisvLyEKKy8vISBccGFyYW0gdWkzMkluY1ZhbHVlIGlzIHRoZSBpbmNyZW1lbnQgdmFsdWUgd2hlbiBvcGVyYXRpbmcgaW4gY29udGludW91cyBtb2RlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9OUlRDSW5jVmFsdWVDaDJHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05SVENJbmNWYWx1ZUNoMlNldCh1aW50MzJfdCB1aTMySW5jVmFsdWUpCit7CisgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIMkNNUElOQykgPSB1aTMySW5jVmFsdWU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY2hhbm5lbDIgaW5jcmVtZW50IHZhbHVlIHdoZW4gb3BlcmF0aW5nIGluIGNvbnRpbnVvdXMgbW9kZS4KKy8vIQorLy8hIEdldCB0aGUgY2hhbm5lbCAyIGluY3JlbWVudCB2YWx1ZSwgd2hlbiBjaGFubmVsIDIgaXMgb3BlcmF0aW5nIGluCisvLyEgY29udGludW91cyBtb2RlLgorLy8hIFRoaXMgdmFsdWUgaXMgYXV0b21hdGljYWxseSBpbmNyZW1lbnRlZCB0byB0aGUgY2hhbm5lbCAyIGNvbXBhcmUKKy8vISByZWdpc3RlciwgdXBvbiBhIGNoYW5uZWwgMiBjb21wYXJlIGV2ZW50LiBUaGlzIGFsbG93cyBjaGFubmVsIDIgdG8KKy8vISBnZW5lcmF0ZSBhIHNlcmllcyBvZiBjb21wbGV0ZWx5IGVxdWlkaXN0YW50IGV2ZW50cy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY2hhbm5lbCAyIGluY3JlbWVudCB2YWx1ZSB3aGVuIG9wZXJhdGluZyBpbiBjb250aW51b3VzCisvLyEgbW9kZS4KKy8vIQorLy8hIFxzYSBBT05SVENJbmNWYWx1ZUNoMlNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBT05SVENJbmNWYWx1ZUNoMkdldCh2b2lkKQoreworICAgIHJldHVybihIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0gyQ01QSU5DKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY2hhbm5lbCAxIGNhcHR1cmUgdmFsdWUuCisvLyEKKy8vISBHZXQgdGhlIGNoYW5uZWwgMSBjYXB0dXJlIHZhbHVlLgorLy8hIFRoZSB1cHBlciAxNiBiaXRzIG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUKKy8vISBpbnRlZ2VyIHBhcnQgb2YgdGhlIFJUQyB0aW1lci4gVGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIHJldHVybmVkIHBhcnQKKy8vISBpcyB0aGUgdXBwZXIgMTYgYml0cyBvZiB0aGUgZnJhY3Rpb25hbCBwYXJ0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjaGFubmVsIDEgY2FwdHVyZSB2YWx1ZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FPTlJUQ0NhcHR1cmVWYWx1ZUNoMUdldCh2b2lkKQoreworICAgIHJldHVybihIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0gxQ0FQVCkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9BT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0CisgICAgICAgICN1bmRlZiAgQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldAorICAgICAgICAjZGVmaW5lIEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQgICAgUk9NX0FPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FPTlJUQ0N1cnJlbnQ2NEJpdFZhbHVlR2V0CisgICAgICAgICN1bmRlZiAgQU9OUlRDQ3VycmVudDY0Qml0VmFsdWVHZXQKKyAgICAgICAgI2RlZmluZSBBT05SVENDdXJyZW50NjRCaXRWYWx1ZUdldCAgICAgIFJPTV9BT05SVENDdXJyZW50NjRCaXRWYWx1ZUdldAorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gIF9fQU9OX1JUQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX3J0Y19kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ydGNfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzYmM2ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ydGNfZG9jLmgKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGFvbl9ydGNfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGFvbnJ0Y19hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19hb25ydGMgSW50cm9kdWN0aW9uCisvLyEKKy8vISBcbm90ZSBJZiB1c2luZyBUSS1SVE9TIHRoZW4gb25seSBUSS1SVE9TIGlzIGFsbG93ZWQgdG8gY29uZmlndXJlIHRoZSBSVEMgdGltZXIhCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl93dWMuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl93dWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWZlMjljCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX3d1Yy5jCkBAIC0wLDAgKzEsMjQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX3d1Yy5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0wNCAxNjo0OTozOCArMDEwMCAoRnJpLCAwNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTg3NAorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIEFPTiBXYWtlLVVwIENvbnRyb2xsZXIuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl93dWMuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIEFPTldVQ0F1eFJlc2V0CisgICAgI2RlZmluZSBBT05XVUNBdXhSZXNldCAgICAgICAgICAgICAgICAgIE5PUk9NX0FPTldVQ0F1eFJlc2V0CisgICAgI3VuZGVmICBBT05XVUNSZWNoYXJnZUN0cmxDb25maWdTZXQKKyAgICAjZGVmaW5lIEFPTldVQ1JlY2hhcmdlQ3RybENvbmZpZ1NldCAgICAgTk9ST01fQU9OV1VDUmVjaGFyZ2VDdHJsQ29uZmlnU2V0CisgICAgI3VuZGVmICBBT05XVUNPc2NDb25maWcKKyAgICAjZGVmaW5lIEFPTldVQ09zY0NvbmZpZyAgICAgICAgICAgICAgICAgTk9ST01fQU9OV1VDT3NjQ29uZmlnCisjZW5kaWYKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFJlc2V0IHRoZSBBVVggZG9tYWluCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQU9OV1VDQXV4UmVzZXQodm9pZCkKK3sKKyAgICAvLyBSZXNldCB0aGUgQVVYIGRvbWFpbi4KKy8vICBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fQVVYQ1RMKSB8PSBBT05fV1VDX0FVWENUTF9SRVNFVF9SRVE7ICAvLyBST00gdmVyc2lvbgorICAgIEhXUkVHQklUVyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fQVVYQ1RMLCBBT05fV1VDX0FVWENUTF9SRVNFVF9SRVFfQklUTikgPSAxOworCisgICAgLy8gV2FpdCBmb3IgQU9OIGludGVyZmFjZSB0byBiZSBpbiBzeW5jLgorICAgIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19TWU5DKTsKKworICAgIC8vIERlLWFzc2VydCByZXNldCBvbiB0aGUgQVVYIGRvbWFpbi4KKy8vICBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fQVVYQ1RMKSAmPSB+QU9OX1dVQ19BVVhDVExfUkVTRVRfUkVROyAgLy8gUk9NIHZlcnNpb24KKyAgICBIV1JFR0JJVFcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0FVWENUTCwgQU9OX1dVQ19BVVhDVExfUkVTRVRfUkVRX0JJVE4pID0gMDsKKworICAgIC8vIFdhaXQgZm9yIEFPTiBpbnRlcmZhY2UgdG8gYmUgaW4gc3luYy4KKyAgICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fU1lOQyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29uZmlndXJlIHRoZSByZWNoYXJnZSBjb250cm9sbGVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQU9OV1VDUmVjaGFyZ2VDdHJsQ29uZmlnU2V0KGJvb2wgYkFkYXB0RW5hYmxlLCB1aW50MzJfdCB1aTMyQWRhcHRSYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJQZXJpb2QsIHVpbnQzMl90IHVpMzJNYXhQZXJpb2QpCit7CisgICAgdWludDMyX3QgdWkzMlNoaWZ0OworICAgIHVpbnQzMl90IHVpMzJDMTsKKyAgICB1aW50MzJfdCB1aTMyQzI7CisgICAgdWludDMyX3QgdWkzMlJlZzsKKyAgICB1aW50MzJfdCB1aTMyRXhwb25lbnQ7CisgICAgdWludDMyX3QgdWkzMk1heEV4cG9uZW50OworICAgIHVpbnQzMl90IHVpMzJNYW50aXNzYTsKKyAgICB1aW50MzJfdCB1aTMyTWF4TWFudGlzc2E7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJBZGFwdFJhdGUgPj0gUkNfUkFURV9NSU4pIHx8CisgICAgICAgICAgICh1aTMyQWRhcHRSYXRlIDw9IFJDX1JBVEVfTUFYKSk7CisKKyAgICB1aTMyQzEgPSAwOworICAgIHVpMzJDMiA9IDA7CisgICAgdWkzMlNoaWZ0ID0gOTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHByZXZpb3VzIHZhbHVlcy4KKyAgICAvLworICAgIHVpMzJSZWcgPSBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fUkVDSEFSR0VDRkcpOworICAgIHVpMzJSZWcgJj0gfihBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfTV9NIHwgQU9OX1dVQ19SRUNIQVJHRUNGR19NQVhfUEVSX0VfTSB8CisgICAgICAgICAgICAgICAgIEFPTl9XVUNfUkVDSEFSR0VDRkdfQURBUFRJVkVfRU5fTSB8IEFPTl9XVUNfUkVDSEFSR0VDRkdfUEVSX01fTSB8CisgICAgICAgICAgICAgICAgIEFPTl9XVUNfUkVDSEFSR0VDRkdfUEVSX0VfTSB8IEFPTl9XVUNfUkVDSEFSR0VDRkdfQzFfTSB8CisgICAgICAgICAgICAgICAgIEFPTl9XVUNfUkVDSEFSR0VDRkdfQzJfTSk7CisKKyAgICAvLworICAgIC8vIENoZWNrIGlmIHRoZSByZWNoYXJnZSBjb250cm9sbGVyIGFkYXB0YXRpb24gYWxnb3JpdGhtIHNob3VsZCBiZSBhY3RpdmUuCisgICAgLy8KKyAgICBpZihiQWRhcHRFbmFibGUpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBDYWxjdWxhdGUgYWRhcHRhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAvLworICAgICAgICB3aGlsZSh1aTMyQWRhcHRSYXRlKQorICAgICAgICB7CisgICAgICAgICAgICBpZih1aTMyQWRhcHRSYXRlICYgKDEgPDwgdWkzMlNoaWZ0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZighdWkzMkMxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdWkzMkMxID0gdWkzMlNoaWZ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKCF1aTMyQzIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZigoMiAqIHVpMzJBZGFwdFJhdGUpID4gKCh1aW50MzJfdCkoMyA8PCB1aTMyU2hpZnQpKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdWkzMkMyID0gdWkzMlNoaWZ0ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpMzJDMiA9IHVpMzJTaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdWkzMkFkYXB0UmF0ZSAmPSB+KDEgPDwgdWkzMlNoaWZ0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVpMzJTaGlmdC0tOworICAgICAgICB9CisgICAgICAgIGlmKCF1aTMyQzIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpMzJDMiA9IHVpMzJDMSA9IHVpMzJDMSAtIDE7CisgICAgICAgIH0KKworICAgICAgICB1aTMyQzEgPSAxMCAtIHVpMzJDMTsKKyAgICAgICAgdWkzMkMyID0gMTAgLSB1aTMyQzI7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVXBkYXRlIHRoZSByZWNoYXJnZSByYXRlIHBhcmFtZXRlcnMuCisgICAgICAgIC8vCisgICAgICAgIHVpMzJSZWcgJj0gfihBT05fV1VDX1JFQ0hBUkdFQ0ZHX0MxX00gfCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX0MyX00pOworICAgICAgICB1aTMyUmVnIHw9ICh1aTMyQzEgPDwgQU9OX1dVQ19SRUNIQVJHRUNGR19DMV9TKSB8CisgICAgICAgICAgICAgICAgICAgKHVpMzJDMiA8PCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX0MyX1MpIHwKKyAgICAgICAgICAgICAgICAgICBBT05fV1VDX1JFQ0hBUkdFQ0ZHX0FEQVBUSVZFX0VOX007CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXNvbHZlIHRoZSBwZXJpb2QgaW50byBhbiBleHBvbmVudCBhbmQgbWFudGlzc2EuCisgICAgLy8KKyAgICB1aTMyUGVyaW9kID0gKHVpMzJQZXJpb2QgPj4gNCk7CisgICAgdWkzMkV4cG9uZW50ID0gMDsKKyAgICB3aGlsZSh1aTMyUGVyaW9kID4gKEFPTl9XVUNfUkVDSEFSR0VDRkdfUEVSX01fTSA+PiBBT05fV1VDX1JFQ0hBUkdFQ0ZHX1BFUl9NX1MpKQorICAgIHsKKyAgICAgICAgdWkzMlBlcmlvZCA+Pj0gMTsKKyAgICAgICAgdWkzMkV4cG9uZW50Kys7CisgICAgfQorICAgIHVpMzJNYW50aXNzYSA9IHVpMzJQZXJpb2Q7CisKKyAgICAvLworICAgIC8vIFJlc29sdmUgdGhlIG1heCBwZXJpb2QgaW50byBhbiBleHBvbmVudCBhbmQgbWFudGlzc2EuCisgICAgLy8KKyAgICB1aTMyTWF4UGVyaW9kID0gKHVpMzJNYXhQZXJpb2QgPj4gNCk7CisgICAgdWkzMk1heEV4cG9uZW50ID0gMDsKKyAgICB3aGlsZSh1aTMyTWF4UGVyaW9kID4gKEFPTl9XVUNfUkVDSEFSR0VDRkdfTUFYX1BFUl9NX00gPj4gQU9OX1dVQ19SRUNIQVJHRUNGR19NQVhfUEVSX01fUykpCisgICAgeworICAgICAgICB1aTMyTWF4UGVyaW9kID4+PSAxOworICAgICAgICB1aTMyTWF4RXhwb25lbnQrKzsKKyAgICB9CisgICAgdWkzMk1heE1hbnRpc3NhID0gdWkzMk1heFBlcmlvZDsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBjb250cm9sbGVyLgorICAgIC8vCisgICAgdWkzMlJlZyB8PSAoKHVpMzJNYXhNYW50aXNzYSA8PCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfTV9TKSB8CisgICAgICAgICAgICAgICAgKHVpMzJNYXhFeHBvbmVudCA8PCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfRV9TKSB8CisgICAgICAgICAgICAgICAgKHVpMzJNYW50aXNzYSA8PCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX1BFUl9NX1MpIHwKKyAgICAgICAgICAgICAgICAodWkzMkV4cG9uZW50IDw8IEFPTl9XVUNfUkVDSEFSR0VDRkdfUEVSX0VfUykpOworICAgIEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19SRUNIQVJHRUNGRykgPSB1aTMyUmVnOworCit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29uZmlndXJlIHRoZSBpbnRlcnZhbCBmb3Igb3NjaWxsYXRvciBhbXBsaXR1ZGUgY2FsaWJyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBT05XVUNPc2NDb25maWcodWludDMyX3QgdWkzMlBlcmlvZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyTWFudGlzc2E7CisgICAgdWludDMyX3QgdWkzMkV4cG9uZW50OworICAgIHVpbnQzMl90IHVpMzJSZWc7CisKKyAgICAvLworICAgIC8vIFJlc29sdmUgdGhlIHBlcmlvZCBpbnRvIGEgZXhwb25lbnQgYW5kIG1hbnRpc3NhLgorICAgIC8vCisgICAgdWkzMlBlcmlvZCA9ICh1aTMyUGVyaW9kID4+IDQpOworICAgIHVpMzJFeHBvbmVudCA9IDA7CisgICAgd2hpbGUodWkzMlBlcmlvZCA+IChBT05fV1VDX09TQ0NGR19QRVJfTV9NID4+IEFPTl9XVUNfT1NDQ0ZHX1BFUl9NX1MpKQorICAgIHsKKyAgICAgICAgdWkzMlBlcmlvZCA+Pj0gMTsKKyAgICAgICAgdWkzMkV4cG9uZW50Kys7CisgICAgfQorICAgIHVpMzJNYW50aXNzYSA9IHVpMzJQZXJpb2Q7CisKKyAgICAvLworICAgIC8vIFVwZGF0ZSB0aGUgcGVyaW9kIGZvciB0aGUgb3NjaWxsYXRvciBhbXBsaXR1ZGUgY2FsaWJyYXRpb24uCisgICAgLy8KKyAgICBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fT1NDQ0ZHKSA9CisgICAgICAgICh1aTMyTWFudGlzc2EgPDwgQU9OX1dVQ19PU0NDRkdfUEVSX01fUykgfAorICAgICAgICAodWkzMkV4cG9uZW50IDw8IEFPTl9XVUNfT1NDQ0ZHX1BFUl9FX1MpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIG1heGltdW0gcmVjaGFyZ2UgcGVyaW9kIGVxdWFsIHRvIHRoZSBvc2NpbGxhdG9yIGFtcGxpdHVkZQorICAgIC8vIGNhbGlicmF0aW9uIHBlcmlvZC4KKyAgICAvLworICAgIHVpMzJSZWcgPSBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fUkVDSEFSR0VDRkcpOworICAgIHVpMzJSZWcgJj0gfihBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfTV9NIHwgQU9OX1dVQ19SRUNIQVJHRUNGR19NQVhfUEVSX0VfTSk7CisgICAgdWkzMlJlZyB8PSAoKHVpMzJNYW50aXNzYSA8PCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfTV9TKSB8CisgICAgICAgICAgICAgICAgKHVpMzJFeHBvbmVudCA8PCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfRV9TKSk7CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBjb25maWd1cmF0aW9uLgorICAgIC8vCisgICAgSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX1JFQ0hBUkdFQ0ZHKSA9IHVpMzJSZWc7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fd3VjLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fd3VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxZDg5YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl93dWMuaApAQCAtMCwwICsxLDg2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGFvbl93dWMuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMDQgMTY6NDk6MzggKzAxMDAgKEZyaSwgMDQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU4NzQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgQU9OIFdha2UtVXAgQ29udHJvbGxlcgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBhb25fZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGFvbnd1Y19hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0FPTl9XVUNfSF9fCisjZGVmaW5lIF9fQU9OX1dVQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od19hb25fd3VjLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9ydGMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIEFPTldVQ0F1eFJlc2V0ICAgICAgICAgICAgICAgICAgTk9ST01fQU9OV1VDQXV4UmVzZXQKKyAgICAjZGVmaW5lIEFPTldVQ1JlY2hhcmdlQ3RybENvbmZpZ1NldCAgICAgTk9ST01fQU9OV1VDUmVjaGFyZ2VDdHJsQ29uZmlnU2V0CisgICAgI2RlZmluZSBBT05XVUNPc2NDb25maWcgICAgICAgICAgICAgICAgIE5PUk9NX0FPTldVQ09zY0NvbmZpZworI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIHRoZSBwb3NzaWJsZSBjbG9jayBzb3VyY2UgZm9yIHRoZSBNQ1UgYW5kIEFVWCBkb21haW4uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBT05XVUNfQ0xPQ0tfU1JDX0hGICAgICAweDAwMDAwMDAzICAvLyBTeXN0ZW0gY2xvY2sgaGlnaCBmcmVxdWVuY3kgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0OCBNSHouCisjZGVmaW5lIEFPTldVQ19DTE9DS19TUkNfTEYgICAgIDB4MDAwMDAwMDEgIC8vIFN5c3RlbSBjbG9jayBsb3cgZnJlcXVlbmN5IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzIga0h6LgorI2RlZmluZSBBT05XVUNfTk9fQ0xPQ0sgICAgICAgICAweDAwMDAwMDAwICAvLyBTeXN0ZW0gY2xvY2sgbG93IGZyZXF1ZW5jeSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMyIGtIei4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgdGhlIHBvc3NpYmxlIGNsb2NrIGRpdmlzaW9uIGZhY3RvcnMgZm9yIHRoZSBBVVggZG9tYWluLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYX0NMT0NLX0RJVl8yICAgICAgICAgKCBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9ESVYyICAgKQorI2RlZmluZSBBVVhfQ0xPQ0tfRElWXzQgICAgICAgICAoIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX0RJVjQgICApCisjZGVmaW5lIEFVWF9DTE9DS19ESVZfOCAgICAgICAgICggQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfRElWOCAgICkKKyNkZWZpbmUgQVVYX0NMT0NLX0RJVl8xNiAgICAgICAgKCBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9ESVYxNiAgKQorI2RlZmluZSBBVVhfQ0xPQ0tfRElWXzMyICAgICAgICAoIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX0RJVjMyICApCisjZGVmaW5lIEFVWF9DTE9DS19ESVZfNjQgICAgICAgICggQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfRElWNjQgICkKKyNkZWZpbmUgQVVYX0NMT0NLX0RJVl8xMjggICAgICAgKCBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9ESVYxMjggKQorI2RlZmluZSBBVVhfQ0xPQ0tfRElWXzI1NiAgICAgICAoIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX0RJVjI1NiApCisjZGVmaW5lIEFVWF9DTE9DS19ESVZfVU5VU0VEICAgICggQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfTSArICggMSA8PCBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9TICkpCisjZGVmaW5lIEFVWF9DTE9DS19ESVZfTSAgICAgICAgICggQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfTSApCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIHVzZWQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBwb3dlci1vZmYgYW5kIHdha2UgdXAgcHJvY2VkdXJlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTUNVX1ZJUlRfUFdPRkZfRElTQUJMRSAgMHgwMDAwMDAwMAorI2RlZmluZSBNQ1VfVklSVF9QV09GRl9FTkFCTEUgICAweDAwMDIwMDAwCisjZGVmaW5lIE1DVV9JTU1fV0FLRV9VUCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTUNVX0ZJWEVEX1dBS0VfVVAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBVVhfVklSVF9QV09GRl9ESVNBQkxFICAweDAwMDAwMDAwCisjZGVmaW5lIEFVWF9WSVJUX1BXT0ZGX0VOQUJMRSAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQVVYX0lNTV9XQUtFX1VQICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBBVVhfRklYRURfV0FLRV9VUCAgICAgICAweDAwMDEwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIHRoYXQgY2FuIGJlIGJlIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGVudGlyZSBTUkFNIGFuZCB0aGUKKy8vIHJldGVudGlvbiBvbiB0aGUgU1JBTSBpbiBib3RoIHRoZSBNQ1UgYW5kIHRoZSBBVVggZG9tYWluLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTUNVX1JBTTBfUkVURU5USU9OICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNQ1VfUkFNMV9SRVRFTlRJT04gICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE1DVV9SQU0yX1JFVEVOVElPTiAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTUNVX1JBTTNfUkVURU5USU9OICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNQ1VfUkFNX0JMT0NLX1JFVEVOVElPTiAweDAwMDAwMDBGCisjZGVmaW5lIE1DVV9BVVhfUkVUX0VOQUJMRSAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIGRpZmZlcmVudCB3YWtlIHVwIG1vZGVzIGZvciBBVVggZG9tYWluIHdoaWNoIGNhbiBiZSBzZXQgdXNpbmcKKy8vIEFPTldVQ0F1eFdha2VVcEV2ZW50KCkgLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQU9OV1VDX0FVWF9XQUtFVVAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05XVUNfQVVYX0FMTE9XX1NMRUVQICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciBhbGwgdGhlIGRpZmZlcmVudCBwb3dlciBtb2RlcyBhdmFpbGFibGUgdGhyb3VnaAorLy8gQU9OV1VDUG93ZXJTdGF0dXNHZXQoKSAuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBT05XVUNfT1NDX0dCSUFTX1JFUSAgICAweDAwNDAwMDAwICAvLyBPU0MgaXMgcmVxdWVzdGluZyBHQmlhcworI2RlZmluZSBBT05XVUNfQVVYX0dCSUFTX1JFUSAgICAweDAwMjAwMDAwICAvLyBBVVggaXMgcmVxdWVzdGluZyBHQmlhcworI2RlZmluZSBBT05XVUNfTUNVX0dCSUFTX1JFUSAgICAweDAwMTAwMDAwICAvLyBNQ1UgaXMgcmVxdWVzdGluZyBHQmlhcworI2RlZmluZSBBT05XVUNfT1NDX0JHQVBfUkVRICAgICAweDAwMDQwMDAwICAvLyBPU0MgaXMgcmVxdWVzdGluZyBCR2FwCisjZGVmaW5lIEFPTldVQ19BVVhfQkdBUF9SRVEgICAgIDB4MDAwMjAwMDAgIC8vIEFVWCBpcyByZXF1ZXN0aW5nIEJHYXAKKyNkZWZpbmUgQU9OV1VDX01DVV9CR0FQX1JFUSAgICAgMHgwMDAxMDAwMCAgLy8gTUNVIGlzIHJlcXVlc3RpbmcgQkdhcAorI2RlZmluZSBBT05XVUNfR0JJQVNfT04gICAgICAgICAweDAwMDAyMDAwICAvLyBHbG9iYWwgQmlhcyBpcyBvbgorI2RlZmluZSBBT05XVUNfQkdBUF9PTiAgICAgICAgICAweDAwMDAxMDAwICAvLyBCYW5kIEdhcCBpcyBvbgorI2RlZmluZSBBT05XVUNfQVVYX1BPV0VSX0RPV04gICAweDAwMDAwMjAwICAvLyBBVVggaXMgaW4gcG93ZXJkb3duIG1vZGUKKyNkZWZpbmUgQU9OV1VDX01DVV9QT1dFUl9ET1dOICAgMHgwMDAwMDEwMCAgLy8gTUNVIGlzIGluIHBvd2VyZG93biBtb2RlCisjZGVmaW5lIEFPTldVQ19KVEFHX1BPV0VSX09OICAgIDB4MDAwMDAwNDAgIC8vIEpUQUcgaXMgcG93ZXJlZCBvbgorI2RlZmluZSBBT05XVUNfQVVYX1BPV0VSX09OICAgICAweDAwMDAwMDIwICAvLyBBVVggaXMgcG93ZXJlZCBvbgorI2RlZmluZSBBT05XVUNfTUNVX1BPV0VSX09OICAgICAweDAwMDAwMDEwICAvLyBNQ1UgaXMgcG93ZXJlZCBvbgorI2RlZmluZSBBT05XVUNfU1BMWV9QT1dFUl9ET1dOICAweDAwMDAwMDAxICAvLyBQb3dlciBzdXBwbHkgaXMgaW4gcG93ZXIgZG93bgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSQU0gcmVwYWlyIHN0YXR1cyBiaXRzLiBWYWx1ZXMgYXJlIHJldHVybmVkIGJ5IEFPWFdVQ1JhbVJlcGFpclN0YXR1c0dldCgpIC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE1DVV9SQU1SRVBBSVJfRE9ORSAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1JBTVJFUEFJUl9ET05FICAgICAgMHgwMDAwMDAwMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUkNfUkFURV9NQVggICAgICAgICAgICAgICAgICAgNzY4ICAgLy8gTWF4aW11bSByZWNoYXJnZSByYXRlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjaGFyZ2UgY29udHJvbGxlci4KKyNkZWZpbmUgUkNfUkFURV9NSU4gICAgICAgICAgICAgICAgICAgICAyICAgLy8gTWluaW11bSByZWNoYXJnZSByYXRlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjaGFyZ2UgY29udHJvbGxlci4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBT05XVUNfTUNVX1JFU0VUX1NSQyAgICAweDAwMDAwMDAyICAvLyBNQ1UgcmVzZXQgc291cmNlIGNhbiBiZSBTVyBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKVEFHCisjZGVmaW5lIEFPTldVQ19NQ1VfV0FSTV9SRVNFVCAgIDB4MDAwMDAwMDEgIC8vIE1DVSByZXNldCB0eXBlIGFuZCBjYW4gYmUgd2FybQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBub3Qgd2FybS4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgcG93ZXIgZG93biBjbG9jayBmb3IgdGhlIE1DVSBkb21haW4uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBjb250cm9sIHdoaWNoIG9uZSBvZiB0aGUgY2xvY2sgc291cmNlcyB0aGF0CisvLyEgaXMgZmVkIGludG8gdGhlIE1DVSBkb21haW4gd2hlbiB0aGUgc3lzdGVtIGlzIGluIHN0YW5kYnkgbW9kZS4gV2hlbiB0aGUKKy8vISBwb3dlciBpcyBiYWNrIGluIEFjdGl2ZSBtb2RlIHRoZSBjbG9jayBzb3VyY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0bworLy8hIFxyZWYgQU9OV1VDX0NMT0NLX1NSQ19IRi4KKy8vIQorLy8hIEVhY2ggY2xvY2sgaXMgZmVkICdhcyBpcycgaW50byB0aGUgTUNVIGRvbWFpbiwgc2luY2UgdGhlIE1DVSBkb21haW4KKy8vISBjb250YWlucyBpbnRlcm5hbCBjbG9jayBkaXZpZGVycyBjb250cm9sbGFibGUgdGhyb3VnaCB0aGUgUFJDTS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2xrU3JjIGlzIHRoZSBjbG9jayBzb3VyY2UgZm9yIHRoZSBNQ1UgZG9tYWluIHdoZW4gaW4gcG93ZXIKKy8vISBkb3duLiBWYWx1ZXMgYXZhaWxhYmxlIGFzIGNsb2NrIHNvdXJjZToKKy8vISAtIFxyZWYgQU9OV1VDX05PX0NMT0NLCisvLyEgLSBccmVmIEFPTldVQ19DTE9DS19TUkNfTEYKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05XVUNNY3VQb3dlckRvd25Db25maWcodWludDMyX3QgdWkzMkNsa1NyYykKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyQ2xrU3JjID09IEFPTldVQ19OT19DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbGtTcmMgPT0gQU9OV1VDX0NMT0NLX1NSQ19MRikpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIE1DVSBkb21haW4gd2hlbiBpbiBwb3dlciBkb3duLgorICAgIC8vCisgICAgdWkzMlJlZyA9IEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19NQ1VDTEspOworICAgIHVpMzJSZWcgJj0gfkFPTl9XVUNfTUNVQ0xLX1BXUl9EV05fU1JDX007CisgICAgSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX01DVUNMSykgPSB1aTMyUmVnIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aTMyQ2xrU3JjIDw8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1dVQ19NQ1VDTEtfUFdSX0RXTl9TUkNfUyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgcG93ZXIgZG93biBtb2RlIGZvciB0aGUgTUNVIGRvbWFpbi4KKy8vIQorLy8hIFRoZSBwYXJhbWV0ZXIgXGMgdWkzMk1vZGUgZGV0ZXJtaW5lcyB0aGUgcG93ZXIgZG93biBtb2RlIG9mIHRoZSBNQ1UgVm9sdGFnZQorLy8hIERvbWFpbi4gV2hlbiB0aGUgQU9OIFdVQyByZWNlaXZlcyBhIHJlcXVlc3QgdG8gcG93ZXIgb2ZmIHRoZSBNQ1UgZG9tYWluIGl0CisvLyEgY2FuIGNob29zZSB0byBwb3dlciBvZmYgY29tcGxldGVseSBvciB1c2UgYSB2aXJ0dWFsIHBvd2VyLW9mZi4gSW4gYSB2aXJ0dWFsCisvLyEgcG93ZXItb2ZmLCByZXNldCBpcyBhc3NlcnRlZCBhbmQgdGhlIGNsb2NrIGlzIHN0b3BwZWQgYnV0IHRoZSBwb3dlciB0byB0aGUKKy8vISBkb21haW4gaXMga2VwdCBvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyTW9kZSBkZWZpbmVzIHRoZSBwb3dlciBkb3duIG1vZGUgb2YgdGhlIE1DVSBkb21haW4uCisvLyEgQWxsb3dlZCB2YWx1ZXMgZm9yIHNldHRpbmcgdGhlIHZpcnR1YWwgcG93ZXItb2ZmIGFyZToKKy8vISAtIFxyZWYgTUNVX1ZJUlRfUFdPRkZfRElTQUJMRQorLy8hIC0gXHJlZiBNQ1VfVklSVF9QV09GRl9FTkFCTEUKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05XVUNNY3VQb3dlck9mZkNvbmZpZyh1aW50MzJfdCB1aTMyTW9kZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVCgodWkzMk1vZGUgPT0gTUNVX1ZJUlRfUFdPRkZfRU5BQkxFKSB8fAorICAgICAgICAgICAodWkzMk1vZGUgPT0gTUNVX1ZJUlRfUFdPRkZfRElTQUJMRSkpOworCisgICAgLy8gU2V0IHRoZSBwb3dlcmRvd24gbW9kZS4KKyAgICBIV1JFR0JJVFcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX01DVUNGRywgQU9OX1dVQ19NQ1VDRkdfVklSVF9PRkZfQklUTikgPSAodWkzMk1vZGUgIT0gMCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgd2FrZS11cCBwcm9jZWR1cmUgZm9yIHRoZSBNQ1UgZG9tYWluLgorLy8hCisvLyEgVGhlIE1DVSBkb21haW4gY2FuIHdha2UgdXAgdXNpbmcgdHdvIGRpZmZlcmVudCBwcm9jZWR1cmVzLiBFaXRoZXIgaXQgd2FrZXMKKy8vISB1cCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIHRyaWdnZXJpbmcgZXZlbnQgb3Igd2FrZS11cCBpcyBmb3JjZWQgdG8KKy8vISBoYXBwZW4gYSBmaXhlZCBudW1iZXIgb2YgMzIgS0h6IGNsb2NrcyBmb2xsb3dpbmcgdGhlIHRyaWdnZXJpbmcKKy8vISBldmVudC4gVGhlIGxhc3QgY2FuIGJlIHVzZWQgdG8gY29tcGVuc2F0ZSBmb3IgYW55IHZhcmlhYmxlIGRlbGF5cyBjYXVzZWQKKy8vISBieSBvdGhlciBhY3Rpdml0aWVzIGdvaW5nIG9uIGF0IHRoZSB0aW1lIG9mIHdha2V1cCAoc3VjaCBhcyBhIHJlY2hhcmdlCisvLyEgZXZlbnQsIGV0Yy4pLgorLy8hCisvLyEgXHBhcmFtIHVpMzJXYWtlVXAgZGV0ZXJtaW5lcyB0aGUgdGltaW5nIG9mIHRoZSBNQ1Ugd2FrZSB1cCAgcHJvY2VkdXJlLgorLy8hIC0gXHJlZiBNQ1VfSU1NX1dBS0VfVVAKKy8vISAtIFxyZWYgTUNVX0ZJWEVEX1dBS0VfVVAKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05XVUNNY3VXYWtlVXBDb25maWcodWludDMyX3QgdWkzMldha2VVcCkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVCgodWkzMldha2VVcCA9PSBNQ1VfSU1NX1dBS0VfVVApIHx8CisgICAgICAgICAgICh1aTMyV2FrZVVwID09IE1DVV9GSVhFRF9XQUtFX1VQKSk7CisKKyAgICAvLyBDb25maWd1cmUgdGhlIHdha2UgdXAgcHJvY2VkdXJlLgorICAgIEhXUkVHQklUVyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fTUNVQ0ZHLCBBT05fV1VDX01DVUNGR19GSVhFRF9XVV9FTl9CSVROKSA9ICh1aTMyV2FrZVVwICE9IDApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgdGhlIHJldGVudGlvbiBvbiB0aGUgYmxvY2sgUkFNIGluIHRoZSBNQ1UgZG9tYWluLgorLy8hCisvLyEgTUNVIFNSQU0gaXMgcGFydGl0aW9uZWQgaW50byA0IGJhbmtzIG9mIDFrIHggMzIgZWFjaC4gVGhlIFNSQU0gc3VwcG9ydHMKKy8vISByZXRlbnRpb24gb24gYWxsIDQgYmxvY2tzLiBUaGUgcmV0ZW50aW9uIG9uIHRoZSBTUkFNIGNhbiBiZSB0dXJuZWQgb24gYW5kCisvLyEgb2ZmLiBVc2UgdGhpcyBmdW5jdGlvbiB0byBlbmFibGUgdGhlIHJldGVudGlvbiBvbiB0aGUgaW5kaXZpZHVhbCBibG9ja3MuCisvLyEKKy8vISBJZiBhIGJsb2NrIGlzIG5vdCByZXByZXNlbnRlZCBpbiB0aGUgcGFyYW1ldGVyIFxjIHVpMzJSZXRlbnRpb24gdGhlbiB0aGUKKy8vISB0aGUgcmV0ZW50aW9uIHdpbGwgYmUgZGlzYWJsZWQgZm9yIHRoYXQgYmxvY2suCisvLyEKKy8vISBcbm90ZSBSZXRlbnRpb24gb24gdGhlIFNSQU0gaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdC4gSWYgcmV0ZW50aW9uIGlzCisvLyEgdHVybmVkIG9mZiBvbiBhbGwgUkFNIGJsb2NrcyB0aGVuIHRoZSBTUkFNIGlzIHBvd2VyZWQgb2ZmIHdoZW4gaXQgd291bGQKKy8vISBvdGhlcndpc2UgYmUgcHV0IGluIHJldGVudGlvbiBtb2RlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJSZXRlbnRpb24gZGVmaW5lcyB3aGljaCBSQU0gYmxvY2tzIHRvIGVuYWJsZS9kaXNhYmxlIHJldGVudGlvbiBvbi4KKy8vISBUbyBlbmFibGUgcmV0ZW50aW9uIG9uIGluZGl2aWR1YWwgcGFydHMgb2YgdGhlIFJBTSB1c2UgYSBiaXR3aXNlIE9SJ2VkCisvLyEgY29tYmluYXRpb24gb2Y6CisvLyEgLSBccmVmIE1DVV9SQU0wX1JFVEVOVElPTgorLy8hIC0gXHJlZiBNQ1VfUkFNMV9SRVRFTlRJT04KKy8vISAtIFxyZWYgTUNVX1JBTTJfUkVURU5USU9OCisvLyEgLSBccmVmIE1DVV9SQU0zX1JFVEVOVElPTgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTldVQ01jdVNSYW1Db25maWcodWludDMyX3QgdWkzMlJldGVudGlvbikKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJSZXRlbnRpb24gJiBNQ1VfUkFNX0JMT0NLX1JFVEVOVElPTik7CisgICAgQVNTRVJUKCEodWkzMlJldGVudGlvbiAmIH5NQ1VfUkFNX0JMT0NLX1JFVEVOVElPTikpOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIHJldGVudGlvbi4KKyAgICAvLworICAgIHVpMzJSZWcgPSBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fTUNVQ0ZHKSAmIH5NQ1VfUkFNX0JMT0NLX1JFVEVOVElPTjsKKyAgICB1aTMyUmVnIHw9IHVpMzJSZXRlbnRpb247CisgICAgSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX01DVUNGRykgPSB1aTMyUmVnOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybiB0aGUgY2xvY2sgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFVWCBkb21haW4uCisvLyEKKy8vISBUaGUgQVVYIGRvbWFpbiBkb2VzIG5vdCBoYXZlIGEgbG9jYWwgY2xvY2sgZGl2aWRlciwgc28gdGhlIEFPTiBXVUMgY29udGFpbnMKKy8vISBhIGRlZGljYXRlZCBjbG9jayBkaXZpZGVyIGZvciBBVVggZG9tYWluLiBVc2UgdGhpcyBmdW5jdGlvbiB0bworLy8hIGdldCB0aGUgc2V0dGluZyBvZiB0aGUgY2xvY2sgZGl2aWRlci4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJuIHRoZSBjbG9jayBjb25maWd1cmF0aW9uLiBFbnVtZXJhdGVkIHJldHVybiB2YWx1ZXMgYXJlOgorLy8hIC0gXHJlZiBBVVhfQ0xPQ0tfRElWXzIKKy8vISAtIFxyZWYgQVVYX0NMT0NLX0RJVl80CisvLyEgLSBccmVmIEFVWF9DTE9DS19ESVZfOAorLy8hIC0gXHJlZiBBVVhfQ0xPQ0tfRElWXzE2CisvLyEgLSBccmVmIEFVWF9DTE9DS19ESVZfMzIKKy8vISAtIFxyZWYgQVVYX0NMT0NLX0RJVl82NAorLy8hIC0gXHJlZiBBVVhfQ0xPQ0tfRElWXzEyOAorLy8hIC0gXHJlZiBBVVhfQ0xPQ0tfRElWXzI1NgorLy8hCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBT05XVUNBdXhDbG9ja0NvbmZpZ0dldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBjbG9jayBkaXZpZGVyIHZhbHVlLgorICAgIC8vCisgICAgcmV0dXJuICgoSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0FVWENMSykgJgorICAgICAgICAgICAgIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX00pID4+CisgICAgICAgICAgICAgQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfUyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgcG93ZXIgZG93biBtb2RlIGZvciB0aGUgQVVYIGRvbWFpbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbnRyb2wgd2hpY2ggb25lIG9mIHRoZSBjbG9jayBzb3VyY2VzIHRoYXQKKy8vISBpcyBmZWQgaW50byB0aGUgTUNVIGRvbWFpbiB3aGVuIGl0IGlzIGluIFBvd2VyIERvd24gbW9kZS4gV2hlbiB0aGUgUG93ZXIKKy8vISBpcyBiYWNrIGluIGFjdGl2ZSBtb2RlIHRoZSBjbG9jayBzb3VyY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0bworLy8hIFxyZWYgQU9OV1VDX0NMT0NLX1NSQ19IRi4KKy8vIQorLy8hIEVhY2ggY2xvY2sgaXMgZmVkICdhcyBpcycgaW50byB0aGUgQVVYIGRvbWFpbiwgc2luY2UgdGhlIEFVWCBkb21haW4KKy8vISBjb250YWlucyBpbnRlcm5hbCBjbG9jayBkaXZpZGVycyBjb250cm9sbGFibGUgdGhyb3VnaCB0aGUgUFJDTS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2xrU3JjIGlzIHRoZSBjbG9jayBzb3VyY2UgZm9yIHRoZSBBVVggZG9tYWluIHdoZW4gaW4gcG93ZXIgZG93bi4KKy8vISAtIFxyZWYgQU9OV1VDX05PX0NMT0NLCisvLyEgLSBccmVmIEFPTldVQ19DTE9DS19TUkNfTEYKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OV1VDQXV4UG93ZXJEb3duQ29uZmlnKHVpbnQzMl90IHVpMzJDbGtTcmMpCit7CisgICAgdWludDMyX3QgdWkzMlJlZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkNsa1NyYyA9PSBBT05XVUNfTk9fQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xrU3JjID09IEFPTldVQ19DTE9DS19TUkNfTEYpKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBjbG9jayBzb3VyY2UgZm9yIHRoZSBBVVggZG9tYWluIHdoZW4gaW4gcG93ZXIgZG93bi4KKyAgICAvLworICAgIHVpMzJSZWcgPSBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fQVVYQ0xLKTsKKyAgICB1aTMyUmVnICY9IH5BT05fV1VDX0FVWENMS19QV1JfRFdOX1NSQ19NOworICAgIEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19BVVhDTEspID0gdWkzMlJlZyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWkzMkNsa1NyYyA8PAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9XVUNfQVVYQ0xLX1BXUl9EV05fU1JDX1MpOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgcmV0ZW50aW9uIG9uIHRoZSBBVVggU1JBTS4KKy8vIQorLy8hIFRoZSBBVVggU1JBTSBjb250YWlucyBvbmx5IG9uZSBibG9jayB3aGljaCBzdXBwb3J0cyByZXRlbnRpb24uIFRoZSByZXRlbnRpb24KKy8vISBvbiB0aGUgU1JBTSBjYW4gYmUgdHVybmVkIG9uIGFuZCBvZmYuIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZS9kaXNhYmxlCisvLyEgdGhlIHJldGVudGlvbiBvbiB0aGUgZW50aXJlIFJBTS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyUmV0ZW50aW9uIGVpdGhlciBlbmFibGVzIG9yIGRpc2FibGVzIEFVWCBTUkFNIHJldGVudGlvbi4KKy8vISAtIDAgOiBEaXNhYmxlIHJldGVudGlvbi4KKy8vISAtIDEgOiBFbmFibGUgcmV0ZW50aW9uLgorLy8hCisvLyEgXG5vdGUgUmV0ZW50aW9uIG9uIHRoZSBTUkFNIGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuIElmIHJldGVudGlvbiBpcworLy8hIHR1cm5lZCBvZmYgdGhlbiB0aGUgU1JBTSBpcyBwb3dlcmVkIG9mZiB3aGVuIGl0IHdvdWxkIG90aGVyd2lzZSBiZSBwdXQgaW4KKy8vISByZXRlbnRpb24gbW9kZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05XVUNBdXhTUmFtQ29uZmlnKHVpbnQzMl90IHVpMzJSZXRlbnRpb24pCit7CisgICAgLy8gRW5hYmxlL2Rpc2FibGUgdGhlIHJldGVudGlvbi4KKyAgICBIV1JFR0JJVFcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0FVWENGRywgQU9OX1dVQ19BVVhDRkdfUkFNX1JFVF9FTl9CSVROKSA9IHVpMzJSZXRlbnRpb247Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbnRyb2wgdGhlIHdha2UgdXAgcHJvY2VkdXJlIG9mIHRoZSBBVVggZG9tYWluLgorLy8hCisvLyEgVGhlIEFVWCBkb21haW4gY2FuIGJlIHdva2VuIGluIHR3byBkaWZmZXJlbnQgbW9kZXMuIEluIGJvdGggbW9kZXMgcG93ZXIKKy8vISBpcyB0dXJuZWQgb24uIEluIG9uZSBtb2RlIGEgc29mdHdhcmUgZXZlbnQgaXMgZ2VuZXJhdGVkIGZvciB0aGUKKy8vISBTZW5zb3IgQ29udHJvbGxlciBhbmQgaXQgaXMgYWxsb3dlZCB0byBzdGFydCBwcm9jZXNzaW5nLiBUaGUgc2Vjb25kIG1vZGUgd2lsbAorLy8hIGp1c3QgZm9yY2UgcG93ZXIgb24gdGhlIFNlbnNvciBDb250cm9sbGVyLiBJZiBTeXN0ZW0gQ1BVIHJlcXVpcmVzIGV4Y2x1c2l2ZSBhY2Nlc3MKKy8vISB0byB0aGUgQVVYIGRvbWFpbiByZXNvdXJjZXMsIGl0IGlzIGFkdmlzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGltYWdlIGluCisvLyEgdGhlIFNlbnNvciBDb250cm9sbGVyIG1lbW9yeSBpcyBkZWNsYXJlZCBpbnZhbGlkLiBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieQorLy8hIGNhbGxpbmcgQU9OV1VDQXV4SW1hZ2VJbnZhbGlkKCkuCisvLyEKKy8vISBcbm90ZSBBbnkgd3JpdGVzIHRvIHRoZSBBT04gaW50ZXJmYWNlIG11c3QgcGFzcyBhIDMyIGtIeiBjbG9jayBib3VuZGFyeSwKKy8vISBhbmQgaXMgdGhlcmVmb3JlIHJlbGF0aXZlbHkgc2xvdy4gVG8gZW5zdXJlIHRoYXQgYSBnaXZlbiB3cml0ZSBpcworLy8hIGNvbXBsZXRlIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgY2FuIGJlIHJlYWQgYmFjayBhZnRlciB3cml0ZS4KKy8vCisvLyEgXG5vdGUgV2hlbiBhY2Nlc3NpbmcgdGhlIEFVWCBkb21haW4gZnJvbSB0aGUgU3lzdGVtIENQVSwgaXQgaXMgYWR2aXNlZCBhbHdheXMgdG8KKy8vISBoYXZlIHNldCB0aGUgQVVYIGluIGF0IGxlYXN0IFxyZWYgQU9OV1VDX0FVWF9XQUtFVVAuIFRoaXMgb3ZlcndyaXRlcyBhbnkKKy8vISBpbnN0cnVjdGlvbiBmcm9tIHRoZSBTZW5zb3IgQ29udHJvbGxlciBhbmQgZW5zdXJlcyB0aGF0IHRoZSBBVVggZG9tYWluCisvLyEgaXMgb24gc28gaXQgd29uJ3QgbGVhdmUgdGhlIFN5c3RlbSBDUFUgaGFuZ2luZy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyTW9kZSBpcyB0aGUgd2FrZSB1cCBtb2RlIGZvciB0aGUgQVVYIGRvbWFpbi4KKy8vISAtIFxyZWYgQU9OV1VDX0FVWF9XQUtFVVAKKy8vISAtIFxyZWYgQU9OV1VDX0FVWF9BTExPV19TTEVFUAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTldVQ0F1eFdha2V1cEV2ZW50KHVpbnQzMl90IHVpMzJNb2RlKQoreworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgQVNTRVJUKCh1aTMyTW9kZSA9PSBBT05XVUNfQVVYX1dBS0VVUCkgfHwKKyAgICAgICAgICAgKHVpMzJNb2RlID09IEFPTldVQ19BVVhfQUxMT1dfU0xFRVApKTsKKworICAgIC8vIFdha2UgdXAgdGhlIEFVWCBkb21haW4uCisgICAgSFdSRUdCSVRXKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19BVVhDVEwsIEFPTl9XVUNfQVVYQ1RMX0FVWF9GT1JDRV9PTl9CSVROKSA9IHVpMzJNb2RlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXNldCB0aGUgQVVYIGRvbWFpbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJlc2V0IHRoZSBlbnRpcmUgQVVYIGRvbWFpbi4gVGhlIHdyaXRlIHRvIHRoZSBBT05fV1VDCisvLyEgbW9kdWxlIG11c3QgcGFzcyBhbiAzMiBrSHogY2xvY2sgYm91bmRhcnkuIEJ5IHJlYWRpbmcgdGhlCisvLyEgQU9OX1JUQ19PX1NZTkMgcmVnaXN0ZXIgYWZ0ZXIgZWFjaCB3cml0ZSwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoZSBBT04KKy8vISBpbnRlcmZhY2Ugd2lsbCBiZSBpbiBzeW5jIGFuZCB0aGF0IGJvdGggdGhlIGFzc2VydCBhbmQgdGhlIGRlLWFzc2VydCBvZiB0aGUKKy8vISByZXNldCBzaWduYWwgdG8gQVVYIHdpbGwgcHJvcGFnYXRlLgorLy8hCisvLyEgXG5vdGUgVGhpcyByZXF1aXJlcyB0d28gd3JpdGVzIGFuZCB0d28gcmVhZHMgb24gYSAzMiBrSHogY2xvY2sgYm91bmRhcnkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBT05XVUNBdXhSZXNldCh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVGVsbHMgdGhlIFNlbnNvciBDb250cm9sbGVyIHRoYXQgdGhlIGltYWdlIGluIG1lbW9yeSBpcyB2YWxpZC4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHRlbGwgdGhlIHNlbnNvciBjb250cm9sbGVyIHRoYXQgdGhlIGltYWdlIGluIG1lbW9yeSBpcworLy8hIHZhbGlkLCBhbmQgaXQgaXMgYWxsb3dlZCB0byBzdGFydCBleGVjdXRpbmcgdGhlIHByb2dyYW0uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OV1VDQXV4SW1hZ2VWYWxpZCh2b2lkKQoreworICAgIC8vIFRlbGwgdGhlIFNlbnNvciBDb250cm9sbGVyIHRoYXQgdGhlIGltYWdlIGluIG1lbW9yeSBpcyB2YWxpZC4KKyAgICBIV1JFR0JJVFcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0FVWENUTCwgQU9OX1dVQ19BVVhDVExfU0NFX1JVTl9FTl9CSVROKSA9IDE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFRlbGxzIHRoZSBTZW5zb3IgQ29udHJvbGxlciB0aGF0IHRoZSBpbWFnZSBpbiBtZW1vcnkgaXMgaW52YWxpZC4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHRlbGwgdGhlIHNlbnNvciBjb250cm9sbGVyIHRoYXQgdGhlIGltYWdlIGluIG1lbW9yeSBpcworLy8hIGludmFsaWQuIFNlbnNvciBDb250cm9sbGVyIG1pZ2h0IHdha2UgdXAsIGJ1dCBpdCB3aWxsIHN0YXkgaWRsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05XVUNBdXhJbWFnZUludmFsaWQodm9pZCkKK3sKKyAgICAvLyBUZWxsIHRoZSBTZW5zb3IgQ29udHJvbGxlciB0aGF0IHRoZSBpbWFnZSBpbiBtZW1vcnkgaXMgaW52YWxpZC4KKyAgICBIV1JFR0JJVFcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0FVWENUTCwgQU9OX1dVQ19BVVhDVExfU0NFX1JVTl9FTl9CSVROKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgcG93ZXIgc3RhdHVzIG9mIHRoZSBkZXZpY2UuCisvLyEKKy8vISBUaGUgQWx3YXlzIE9uIChBT04pIGRvbWFpbiBpcyB0aGUgb25seSBwYXJ0IG9mIHRoZSBkZXZpY2Ugd2hpY2ggaXMgdHJ1bHkKKy8vISAiQUxXQVlTIE9OIi4gVGhlIHBvd2VyIHN0YXR1cyBmb3IgdGhlIG90aGVyIGRldmljZSBjYW4gYWx3YXlzIGJlIHJlYWQgZnJvbQorLy8hIHRoaXMgc3RhdHVzIHJlZ2lzdGVyLgorLy8hCisvLyEgUG9zc2libGUgcG93ZXIgbW9kZXMgZm9yIHRoZSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGRldmljZSBhcmU6CisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgcG93ZXIgc3RhdHVzIG9mIHRoZSBkZXZpY2UgYXMgYSBiaXR3aXNlIE9SJ2VkCisvLyEgY29tYmluYXRpb24gb2YgdGhlc2UgdmFsdWVzOgorLy8hIC0gXHJlZiBBT05XVUNfQVVYX1BPV0VSX0RPV04KKy8vISAtIFxyZWYgQU9OV1VDX0FVWF9QT1dFUl9PTgorLy8hIC0gXHJlZiBBT05XVUNfSlRBR19QT1dFUl9PTgorLy8hIC0gXHJlZiBBT05XVUNfTUNVX1BPV0VSX09OCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBT05XVUNQb3dlclN0YXR1c0dldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBwb3dlciBzdGF0dXMuCisgICAgLy8KKyAgICByZXR1cm4gKEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19QV1JTVEFUKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSBzaHV0LWRvd24gb2YgdGhlIGRldmljZS4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSBzaHV0LWRvd24gb2YgdGhlIGRldmljZS4gVGhpcyB3aWxsIGZvcmNlIGFsbCBJL08gdmFsdWVzIHRvCisvLyEgYmUgbGF0Y2hlZCAtIHBvc3NpYmx5IGVuYWJsaW5nIEkvTyB3YWtldXAgLSB0aGVuIGFsbCBpbnRlcm5hbCBwb3dlcgorLy8hIHN1cHBsaWVzIGFyZSB0dXJuZWQgb2ZmLCBlZmZlY3RpdmVseSBwdXR0aW5nIHRoZSBkZXZpY2UgaW50byBzaHV0LWRvd24gbW9kZS4KKy8vIQorLy8hIFxub3RlIE5vIGFjdGlvbiB3aWxsIHRha2UgcGxhY2UgYmVmb3JlIHRoZSBTeXN0ZW0gQ1BVIGlzIHB1dCB0byBkZWVwIHNsZWVwLgorLy8hCisvLyEgXG5vdGUgVGhlIHNodXQtZG93biBjb21tYW5kIGlzIGlnbm9yZWQgaWYgdGhlIEpUQUcgaW50ZXJmYWNlIGhhcyBiZWVuCisvLyEgYWN0aXZhdGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTldVQ1NodXREb3duRW5hYmxlKHZvaWQpCit7CisgICAgLy8gRW5zdXJlIHRoZSBKVEFHIGRvbWFpbiBpcyB0dXJuZWQgb2ZmOworICAgIC8vIG90aGVyd2lzZSBNQ1UgZG9tYWluIGNhbid0IGJlIHR1cm5lZCBvZmYuCisgICAgSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0pUQUdDRkcpID0gMDsKKworICAgIC8vIEVuYWJsZSBzaHV0ZG93biBvZiB0aGUgZGV2aWNlLgorICAgIEhXUkVHQklUVyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fQ1RMMCwgQU9OX1dVQ19DVEwwX1BXUl9EV05fRElTX0JJVE4pID0gMDsKKyAgICBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fU0hVVERPV04pID0gQU9OX1dVQ19TSFVURE9XTl9FTjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIHBvd2VyIGRvd24gbW9kZSBvbiBBVVggYW5kIE1DVSBkb21haW4uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBlbmFibGUgcG93ZXJkb3duIG9uIHRoZSBBVVggYW5kIE1DVSBkb21haW4uCisvLyEKKy8vISBcbm90ZSBUaGUgcG93ZXJkb3duIGNvbW1hbmQgaXMgaWdub3JlZCBpZiB0aGUgSlRBRyBpbnRlcmZhY2UgaGFzIGJlZW4KKy8vISBhY3RpdmF0ZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OV1VDRG9tYWluUG93ZXJEb3duRW5hYmxlKHZvaWQpCit7CisgICAgLy8gRW5zdXJlIHRoZSBKVEFHIGRvbWFpbiBpcyB0dXJuZWQgb2ZmOworICAgIC8vIG90aGVyd2lzZSBNQ1UgZG9tYWluIGNhbid0IGJlIHR1cm5lZCBvZmYuCisgICAgSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0pUQUdDRkcpID0gMDsKKworICAgIC8vIEVuYWJsZSBwb3dlciBkb3duIG1vZGUuCisgICAgSFdSRUdCSVRXKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19DVEwwLCBBT05fV1VDX0NUTDBfUFdSX0RXTl9ESVNfQklUTikgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBVc2UgdGhpcyBmdW5jdGlvbiB0byBkaXNhYmxlIHBvd2VyIGRvd24gbW9kZSBvZiB0aGUgTUNVIGFuZCBBVVggZG9tYWluLgorLy8hCisvLyEgRGlzYWJsaW5nIHBvd2VyZG93biBvbiB0aGUgTUNVIGFuZC9vciBBVVggd2lsbCBwdXQgdGhlIGRvbWFpbnMgaW4gYQorLy8hIHZpcnR1YWwgcG93ZXIgZG93biB3aGVuIHJlcXVlc3RpbmcgdG8gYmUgcG93ZXJlZCBkb3duLiBMb2dpYyBpcyB0aGUgc2FtZQorLy8hIGJ1dCBwb3dlciBpcyBrZXB0IG9uLgorLy8hCisvLyEgXHJldHVybiBOb25lLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05XVUNEb21haW5Qb3dlckRvd25EaXNhYmxlKHZvaWQpCit7CisgICAgLy8gRGlzYWJsZSBwb3dlciBkb3duIG1vZGUuCisgICAgSFdSRUdCSVRXKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19DVEwwLCBBT05fV1VDX0NUTDBfUFdSX0RXTl9ESVNfQklUTikgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBVc2UgdGhpcyBmdW5jdGlvbiB0byBjbGVhciBzcGVjaWZpYyBzdGF0dXMgYml0cy4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNsZWFyIHRoZSBiaXRzIHRoYXQgYXJlIHNldCBpbiB0aGUgQU9OIFdVQyBzdGF0dXMKKy8vISByZWdpc3Rlci4gVGhpcyByZWdpc3RlciByZXF1aXJlcyBhIHdyaXRlIDEgdG8gY2xlYXIuCisvLyEKKy8vISBBT04gV2FrZSBVcCBDb250cm9sbGVyIFRBUCBjYW4gcmVxdWVzdCBhIHRvdGFsL2Z1bGwgRmxhc2ggZXJhc2UuIElmIHNvLAorLy8hIHRoZSBjb3JyZXNwb25kaW5nIHN0YXR1cyBiaXRzIHdpbGwgYmUgc2V0IGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgYW5kIGNhbgorLy8hIGJlIHJlYWQgdXNpbmcgXHJlZiBBT05XVUNNY3VSZXNldFN0YXR1c0dldCgpIG9yIGNsZWFyZWQgdXNpbmcgdGhpcyBmdW5jdGlvbi4gVGhlIHJlc2V0CisvLyEgc291cmNlIGFuZCB0eXBlIGdpdmUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBhbmQgaG93IHRoZSBsYXRlc3QgcmVzZXQKKy8vISB3YXMgcGVyZm9ybWVkLiBBY2Nlc3MgdG8gdGhlc2UgYml0cyBhcmUgaWRlbnRpY2FsIHRvIHRoZSBmbGFzaCBlcmFzZQorLy8hIGJpdHMuCisvLyEKKy8vISBccGFyYW0gdWkzMlN0YXR1cyBkZWZpbmVzIGluIGEgb25lLWhvdCBlbmNvZGluZyB3aGljaCBiaXRzIHRvIGNsZWFyIGluIHRoZQorLy8hIHN0YXR1cyByZWdpc3Rlci4gVXNlIE9SJ2VkIGNvbWJpbmF0aW9ucyBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBBT05XVUNfTUNVX1JFU0VUX1NSQworLy8hIC0gXHJlZiBBT05XVUNfTUNVX1dBUk1fUkVTRVQKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05XVUNNY3VSZXNldENsZWFyKHVpbnQzMl90IHVpMzJTdGF0dXMpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyU3RhdHVzICYgQU9OV1VDX01DVV9SRVNFVF9TUkMpIHx8CisgICAgICAgICAgICh1aTMyU3RhdHVzICYgQU9OV1VDX01DVV9XQVJNX1JFU0VUKSk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSBzdGF0dXMgYml0cy4KKyAgICAvLworICAgIEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19DVEwxKSA9IHVpMzJTdGF0dXM7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybiB0aGUgcmVzZXQgc3RhdHVzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgQU9OX1dVQ19PX0NUTDEgcmVnaXN0ZXIuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHN0YXR1cyBmcm9tIHRoZSBBT04gV1VDLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQU9OV1VDTWN1UmVzZXRTdGF0dXNHZXQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBzdGF0dXMuCisgICAgLy8KKyAgICByZXR1cm4gKEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19DVEwxKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgcmVjaGFyZ2UgY29udHJvbGxlci4KKy8vIQorLy8hIFRoZSBwYXJhbWV0ZXIgXGMgYkFkYXB0RW5hYmxlIGlzIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGFkYXB0aXZlCisvLyEgYWxnb3JpdGhtIGZvciB0aGUgcmVjaGFyZ2UgY29udHJvbGxlci4KKy8vISBUaGUgYWRhcHRpdmUgYWxnb3JpdGhtIGZvciB0aGUgcmVjaGFyZ2UgY29udHJvbGxlciBpcyBkZWZpbmVkIGFzCisvLyEKKy8qIQorXHZlcmJhdGltCisKKyAgTmV3X1BlcmlvZCA9IFBlcmlvZCAqICgxICsgKEFkYXB0UmF0ZSAvIDEwMjQpICkKKworICAgICAgQWRhcHRSYXRlCisgICAgIC0tLS0tLS0tLS0tID0gKCAyXigtQzEpICsgMl4oLUMyKSAgKQorICAgICAgICAxMDI0CisKK1xlbmR2ZXJiYXRpbQorKi8KKy8vIQorLy8hIFdoZXJlIEMxIGlzIGJldHdlZW4gMSBhbmQgMTAgYW5kIEMyIGlzIGJldHdlZW4gMiBhbmQgMTAuIFRoZSBcYyB1aTMyQWRhcHRSYXRlCisvLyEgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDIgYW5kIDc2OCAoXHJlZiBSQ19SQVRFX01JTiBhbmQgXHJlZiBSQ19SQVRFX01BWCkKKy8vISByZXN1bHRpbmcgaW4gYW4gYWRhcHRpdmUgcmF0ZSBiZXR3ZWVuIDAuMiUgYW5kIDc1JS4KKy8vIQorLy8hIFRoZSBcYyB1aTMyUGVyaW9kIGlzIHRoZSBudW1iZXIgb2YgMzIgS0h6IGNsb2NrcyBiZXR3ZWVuIHR3byByZWNoYXJnZXMuIFRoZQorLy8hIGxlbmd0aCBvZiB0aGUgaW50ZXJ2YWwgaXMgZGVmaW5lZCBieSB0aGUgZm9ybXVsYToKKy8vIQorLyohCitcdmVyYmF0aW0KKworICBQZXJpb2QgPSAoe3VsTWFudGlzc2EsNSdiMTExMX0gPDwgdWkzMkV4cG9uZW50KQorCitcZW5kdmVyYmF0aW0KKyovCisvLyEKKy8vISBcbm90ZSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcmVjaGFyZ2UgY3ljbGVzIGlzIHJlcXVpcmVkIHdoZW4gZW5hYmxpbmcgdGhlCisvLyEgYWRhcHRpdmUgcmVjaGFyZ2UgYWxnb3JpdGhtLgorLy8hCisvLyEgXG5vdGUgVGhlIG1heGltdW0gcGVyaW9kIGJldHdlZW4gdHdvIHJlY2hhcmdlcyBzaG91bGQgbmV2ZXIgZXhjZWVkIHRoZQorLy8hIHBlcmlvZCBiZXR3ZWVuIHR3byBvc2NpbGxhdG9yIGFtcGxpdHVkZSBjYWxpYnJhdGlvbnMgd2hpY2ggaXMgY29uZmlndXJlZAorLy8hIHVzaW5nIEFPTldVQ09zY0NvbmZpZygpLgorLy8hCisvLyEgXHBhcmFtIGJBZGFwdEVuYWJsZSBlbmFibGVzIHRoZSBhZGFwdGF0aW9uIGFsZ29yaXRobSBmb3IgdGhlIGNvbnRyb2xsZXIuCisvLyEgXHBhcmFtIHVpMzJBZGFwdFJhdGUgZGV0ZXJtaW5lcyB0aGUgYWRqdXN0bWVudCB2YWx1ZSBmb3IgdGhlIGFkb3B0aW9uCisvLyEgYWxnb3JpdGhtLgorLy8hIFxwYXJhbSB1aTMyUGVyaW9kIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBjbG9jayBjeWNsZXMgYmV0d2VlbiBlYWNoCisvLyEgYWN0aXZhdGlvbiBvZiB0aGUgcmVjaGFyZ2UgY29udHJvbGxlci4KKy8vISBccGFyYW0gdWkzMk1heFBlcmlvZCBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjbG9jayBjeWNsZXMgYmV0d2VlbgorLy8hIGVhY2ggYWN0aXZhdGlvbiBvZiB0aGUgcmVjaGFyZ2UgY29udHJvbGxlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFPTldVQ1JlY2hhcmdlQ3RybENvbmZpZ1NldChib29sIGJBZGFwdEVuYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQWRhcHRSYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJQZXJpb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk1heFBlcmlvZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIHRoZSByZWNoYXJnZSBjb250cm9sbGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgQU9OX1dVQ19PX1JFQ0hBUkdFQ0ZHLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJlY2hhcmdlIGNvbnRyb2xsZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBT05XVUNSZWNoYXJnZUN0cmxDb25maWdHZXQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19SRUNIQVJHRUNGRykpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgdGhlIGludGVydmFsIGZvciBvc2NpbGxhdG9yIGFtcGxpdHVkZSBjYWxpYnJhdGlvbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNldCB0aGUgbnVtYmVyIG9mIDMyIGtIeiBjbG9ja3MgYmV0d2VlbiBvc2NpbGxhdG9yCisvLyEgYW1wbGl0dWRlIGNhbGlicmF0aW9ucy4KKy8vIQorLy8hIFRoZSB2YWx1ZSBvZiB0aGUgaW50ZXJ2YWwgaXMgZGVmaW5lZCBieSB0aGUgZm9ybXVsYToKKy8vIQorLyohCitcdmVyYmF0aW0KKworICBQZXJpb2QgPSAoe3VsTWFudGlzc2EsNSdiMTExMX0gPDwgdWkzMkV4cG9uZW50KQorCitcZW5kdmVyYmF0aW0KKyovCisvLyEKKy8vISBcbm90ZSBXaGVuIHRoaXMgY291bnRlciBleHBpcmVzIGFuIG9zY2lsbGF0b3IgYW1wbGl0dWRlIGNhbGlicmF0aW9uIGlzCisvLyEgdHJpZ2dlcmVkIGltbWVkaWF0ZWx5IGluIEFjdGl2ZSBtb2RlLiBXaGVuIHRoaXMgY291bnRlciBleHBpcmVzIGluCisvLyEgUG93ZXJkb3duIG1vZGUgYW4gaW50ZXJuYWwgZmxhZyBpcyBzZXQgdGhhdCBjYXVzZXMgR0JJQVMgdG8gdHVybiBvbgorLy8hIHRvZ2V0aGVyIHdpdGggQkdBUCB3aGVuIHRoZSBuZXh0IHJlY2hhcmdlIG9jY3VycywgYXQgdGhlIHNhbWUgdGltZQorLy8hIHRyaWdnZXJpbmcgdGhlIG9zY2lsbGF0b3IgYW1wbGl0dWRlIGNhbGlicmF0aW9uIGFzIHdlbGwgYXMgYSByZWNoYXJnZSBvZgorLy8hIHRoZSB1TERPIHJlZmVyZW5jZSB2b2x0YWdlLgorLy8hCisvLyEgXG5vdGUgVGhlIG9zY2lsbGF0b3IgYW1wbGl0dWRlIGNhbGlicmF0aW9uIGlzIHBlcmZvcm1lZCBhdCB0aGUgc2FtZSB0aW1lCisvLyEgYXMgdGhlIHJlY2hhcmdlIGZvciB0aGUgdUxETyByZWZlcmVuY2Ugdm9sdGFnZS4gU28gdGhlIG1heGltdW0gcGVyaW9kCisvLyEgYmV0d2VlbiBlYWNoIHJlY2hhcmdlIG9wZXJhdGlvbiBzaG91bGQgbm90IGV4Y2VlZCB0aGUgbnVtYmVyIG9mIGNsb2NrCisvLyEgY3ljbGVzIGZvciB0aGUgYW1wbGl0dWRlIGNhbGlicmF0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQZXJpb2QgaXMgdGhlIG51bWJlciBvZiAzMiBrSHogY2xvY2sgY3ljbGVzIGluIGVhY2ggaW50ZXJ2YWwuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBT05XVUNPc2NDb25maWcodWludDMyX3QgdWkzMlBlcmlvZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlcXVlc3QgcG93ZXIgb2ZmIG9mIHRoZSBKVEFHIGRvbWFpbi4KKy8vIQorLy8hIFRoZSBKVEFHIGRvbWFpbiBpcyBhdXRvbWF0aWNhbGx5IHBvd2VyZWQgdXAgb24gaWYgYSBkZWJ1Z2dlciBpcyBjb25uZWN0ZWQuCisvLyEgSWYgYSBkZWJ1Z2dlciBpcyBub3QgY29ubmVjdGVkIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcG93ZXIgb2ZmIHRoZQorLy8hIEpUQUcgZG9tYWluLgorLy8hCisvLyEgXG5vdGUgQWNoaWV2aW5nIHRoZSBsb3dlc3QgcG93ZXIgbW9kZXMgKHNodXRkb3duL3Bvd2VyZG93bikgcmVxdWlyZXMgdGhlCisvLyEgSlRBRyBkb21haW4gdG8gYmUgdHVybmVkIG9mZi4gSW4gZ2VuZXJhbCB0aGUgSlRBRyBkb21haW4gc2hvdWxkIG5ldmVyIGJlCisvLyEgcG93ZXJlZCBpbiBwcm9kdWN0aW9uIGNvZGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OV1VDSnRhZ1Bvd2VyT2ZmKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZXF1ZXN0IHRoZSBwb3dlciBvZmYgb2YgdGhlIEp0YWcgZG9tYWluCisgICAgLy8KKyAgICBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fSlRBR0NGRykgPSAwOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0FPTldVQ0F1eFJlc2V0CisgICAgICAgICN1bmRlZiAgQU9OV1VDQXV4UmVzZXQKKyAgICAgICAgI2RlZmluZSBBT05XVUNBdXhSZXNldCAgICAgICAgICAgICAgICAgIFJPTV9BT05XVUNBdXhSZXNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQU9OV1VDUmVjaGFyZ2VDdHJsQ29uZmlnU2V0CisgICAgICAgICN1bmRlZiAgQU9OV1VDUmVjaGFyZ2VDdHJsQ29uZmlnU2V0CisgICAgICAgICNkZWZpbmUgQU9OV1VDUmVjaGFyZ2VDdHJsQ29uZmlnU2V0ICAgICBST01fQU9OV1VDUmVjaGFyZ2VDdHJsQ29uZmlnU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BT05XVUNPc2NDb25maWcKKyAgICAgICAgI3VuZGVmICBBT05XVUNPc2NDb25maWcKKyAgICAgICAgI2RlZmluZSBBT05XVUNPc2NDb25maWcgICAgICAgICAgICAgICAgIFJPTV9BT05XVUNPc2NDb25maWcKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fQU9OX1dVQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X2FkYy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X2FkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOTQxMjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfYWRjLmMKQEAgLTAsMCArMSwzMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhdXhfYWRjLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTA0IDE2OjQ5OjM4ICswMTAwIChGcmksIDA0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1ODc0CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgQVVYIFRpbWUgdG8gRGlnaXRhbCBDb252ZXJ0ZXIgaW50ZXJmYWNlLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9hdXhfYWRjLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19hdXhfd3VjLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ZjZmcxLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2FkaS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9ldmVudC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgQVVYQURDRGlzYWJsZQorICAgICNkZWZpbmUgQVVYQURDRGlzYWJsZSAgICAgICAgICAgICAgICAgICBOT1JPTV9BVVhBRENEaXNhYmxlCisgICAgI3VuZGVmICBBVVhBRENFbmFibGVBc3luYworICAgICNkZWZpbmUgQVVYQURDRW5hYmxlQXN5bmMgICAgICAgICAgICAgICBOT1JPTV9BVVhBRENFbmFibGVBc3luYworICAgICN1bmRlZiAgQVVYQURDRW5hYmxlU3luYworICAgICNkZWZpbmUgQVVYQURDRW5hYmxlU3luYyAgICAgICAgICAgICAgICBOT1JPTV9BVVhBRENFbmFibGVTeW5jCisgICAgI3VuZGVmICBBVVhBRENEaXNhYmxlSW5wdXRTY2FsaW5nCisgICAgI2RlZmluZSBBVVhBRENEaXNhYmxlSW5wdXRTY2FsaW5nICAgICAgIE5PUk9NX0FVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcKKyAgICAjdW5kZWYgIEFVWEFEQ0ZsdXNoRmlmbworICAgICNkZWZpbmUgQVVYQURDRmx1c2hGaWZvICAgICAgICAgICAgICAgICBOT1JPTV9BVVhBRENGbHVzaEZpZm8KKyAgICAjdW5kZWYgIEFVWEFEQ1JlYWRGaWZvCisgICAgI2RlZmluZSBBVVhBRENSZWFkRmlmbyAgICAgICAgICAgICAgICAgIE5PUk9NX0FVWEFEQ1JlYWRGaWZvCisgICAgI3VuZGVmICBBVVhBRENQb3BGaWZvCisgICAgI2RlZmluZSBBVVhBRENQb3BGaWZvICAgICAgICAgICAgICAgICAgIE5PUk9NX0FVWEFEQ1BvcEZpZm8KKyAgICAjdW5kZWYgIEFVWEFEQ0dldEFkanVzdG1lbnRHYWluCisgICAgI2RlZmluZSBBVVhBRENHZXRBZGp1c3RtZW50R2FpbiAgICAgICAgIE5PUk9NX0FVWEFEQ0dldEFkanVzdG1lbnRHYWluCisgICAgI3VuZGVmICBBVVhBRENHZXRBZGp1c3RtZW50T2Zmc2V0CisgICAgI2RlZmluZSBBVVhBRENHZXRBZGp1c3RtZW50T2Zmc2V0ICAgICAgIE5PUk9NX0FVWEFEQ0dldEFkanVzdG1lbnRPZmZzZXQKKyAgICAjdW5kZWYgIEFVWEFEQ1ZhbHVlVG9NaWNyb3ZvbHRzCisgICAgI2RlZmluZSBBVVhBRENWYWx1ZVRvTWljcm92b2x0cyAgICAgICAgIE5PUk9NX0FVWEFEQ1ZhbHVlVG9NaWNyb3ZvbHRzCisgICAgI3VuZGVmICBBVVhBRENNaWNyb3ZvbHRzVG9WYWx1ZQorICAgICNkZWZpbmUgQVVYQURDTWljcm92b2x0c1RvVmFsdWUgICAgICAgICBOT1JPTV9BVVhBRENNaWNyb3ZvbHRzVG9WYWx1ZQorICAgICN1bmRlZiAgQVVYQURDQWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0CisgICAgI2RlZmluZSBBVVhBRENBZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQgTk9ST01fQVVYQURDQWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0CisgICAgI3VuZGVmICBBVVhBRENVbmFkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldAorICAgICNkZWZpbmUgQVVYQURDVW5hZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQgTk9ST01fQVVYQURDVW5hZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyB0aGUgQURDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQVVYQURDRGlzYWJsZSh2b2lkKQoreworICAgIC8vIERpc2FibGUgdGhlIEFEQyByZWZlcmVuY2UKKyAgICBBREk4Qml0c0NsZWFyKEFVWF9BREk0X0JBU0UsIEFESV80X0FVWF9PX0FEQ1JFRjAsIEFESV80X0FVWF9BRENSRUYwX0VOX00gfCBBRElfNF9BVVhfQURDUkVGMF9SRUZfT05fSURMRV9NIHwgQURJXzRfQVVYX0FEQ1JFRjBfU1JDX00pOworCisgICAgLy8gQXNzZXJ0IHJlc2V0IGFuZCBkaXNhYmxlIHRoZSBBREMKKyAgICBBREk4Qml0c0NsZWFyKEFVWF9BREk0X0JBU0UsIEFESV80X0FVWF9PX0FEQzAsIEFESV80X0FVWF9BREMwX0VOX00gfCBBRElfNF9BVVhfQURDMF9SRVNFVF9OX00gfCBBRElfNF9BVVhfQURDMF9TTVBMX01PREVfTSB8IEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQX00pOworCisgICAgLy8gRW5zdXJlIHRoYXQgc2NhbGluZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYmVmb3JlIG5leHQgdXNlIG9mIHRoZSBBREMKKyAgICBBREk4Qml0c0NsZWFyKEFVWF9BREk0X0JBU0UsIEFESV80X0FVWF9PX0FEQzEsIEFESV80X0FVWF9BREMxX1NDQUxFX0RJU19NKTsKKworICAgIC8vIERpc2FibGUgdGhlIEFEQyBjbG9jayAobm8gbmVlZCB0byB3YWl0IHNpbmNlIElPQl9XVUNfQURDQ0xLQ1RMX0FDSyBnb2VzIGxvdyBpbW1lZGlhdGVseSkKKyAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fQURDQ0xLQ1RMKSA9IDA7CisKKyAgICAvLyBEaXNhYmxlIHRoZSBBREMgZGF0YSBpbnRlcmZhY2UKKyAgICBIV1JFRyhBVVhfQU5BSUZfQkFTRSArIEFVWF9BTkFJRl9PX0FEQ0NUTCkgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRW5hYmxlcyB0aGUgQURDIGZvciBhc3luY2hyb25vdXMgb3BlcmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQVVYQURDRW5hYmxlQXN5bmModWludDMyX3QgcmVmU291cmNlLCB1aW50MzJfdCB0cmlnZ2VyKQoreworICAgIC8vIEVuYWJsZSB0aGUgQURDIHJlZmVyZW5jZSwgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisgICAgLy8gLSBTUkM6IFNldCB3aGVuIHVzaW5nIHJlbGF0aXZlIHJlZmVyZW5jZQorICAgIC8vIC0gUkVGX09OX0lETEU6IEFsd2F5cyBjbGVhcmVkIHNpbmNlIHRoZXJlIGlzIG5vIGlkbGUgc3RhdGUgaW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbgorICAgIEFESThCaXRzU2V0KEFVWF9BREk0X0JBU0UsIEFESV80X0FVWF9PX0FEQ1JFRjAsIHJlZlNvdXJjZSB8IEFESV80X0FVWF9BRENSRUYwX0VOX00pOworCisgICAgLy8gRW5hYmxlIHRoZSBBREMgY2xvY2sKKyAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fQURDQ0xLQ1RMKSA9IEFVWF9XVUNfQURDQ0xLQ1RMX1JFUV9NOworICAgIHdoaWxlICghKEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19BRENDTEtDVEwpICYgQVVYX1dVQ19BRENDTEtDVExfQUNLX00pKTsKKworICAgIC8vIEVuYWJsZSB0aGUgQURDIGRhdGEgaW50ZXJmYWNlCisgICAgaWYgKHRyaWdnZXIgPT0gQVVYQURDX1RSSUdHRVJfTUFOVUFMKSB7CisgICAgICAgIC8vIE1hbnVhbCB0cmlnZ2VyOiBObyBuZWVkIHRvIGNvbmZpZ3VyZSBldmVudCByb3V0aW5nIGZyb20gR1BUCisgICAgICAgIEhXUkVHKEFVWF9BTkFJRl9CQVNFICsgQVVYX0FOQUlGX09fQURDQ1RMKSA9IEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX05PX0VWRU5UMCB8IEFVWF9BTkFJRl9BRENDVExfQ01EX0VOOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEdQVCB0cmlnZ2VyOiBDb25maWd1cmUgZXZlbnQgcm91dGluZyB2aWEgTUNVX0VWIHRvIHRoZSBBVVggZG9tYWluCisgICAgICAgIEhXUkVHKEVWRU5UX0JBU0UgKyBFVkVOVF9PX0FVWFNFTDApID0gdHJpZ2dlcjsKKyAgICAgICAgSFdSRUcoQVVYX0FOQUlGX0JBU0UgKyBBVVhfQU5BSUZfT19BRENDVEwpID0gQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfTUNVX0VWIHwgQVVYX0FOQUlGX0FEQ0NUTF9DTURfRU47CisgICAgfQorCisgICAgLy8gQ29uZmlndXJlIHRoZSBBREMKKyAgICBBREk4Qml0c1NldChBVVhfQURJNF9CQVNFLCBBRElfNF9BVVhfT19BREMwLCBBRElfNF9BVVhfQURDMF9TTVBMX01PREVfTSk7CisKKyAgICAvLyBSZWxlYXNlIHJlc2V0IGFuZCBlbmFibGUgdGhlIEFEQworICAgIEFESThCaXRzU2V0KEFVWF9BREk0X0JBU0UsIEFESV80X0FVWF9PX0FEQzAsIEFESV80X0FVWF9BREMwX0VOX00gfCBBRElfNF9BVVhfQURDMF9SRVNFVF9OX00pOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRW5hYmxlcyB0aGUgQURDIGZvciBzeW5jaHJvbm91cyBvcGVyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBVVhBRENFbmFibGVTeW5jKHVpbnQzMl90IHJlZlNvdXJjZSwgdWludDMyX3Qgc2FtcGxlVGltZSwgdWludDMyX3QgdHJpZ2dlcikKK3sKKyAgICAvLyBFbmFibGUgdGhlIEFEQyByZWZlcmVuY2UsIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOgorICAgIC8vIC0gU1JDOiBTZXQgd2hlbiB1c2luZyByZWxhdGl2ZSByZWZlcmVuY2UKKyAgICAvLyAtIFJFRl9PTl9JRExFOiBTZXQgd2hlbiB1c2luZyBmaXhlZCByZWZlcmVuY2UgYW5kIHNhbXBsZSB0aW1lIDwgMjEuMyB1cworICAgIHVpbnQ4X3QgYWRjcmVmMCA9IHJlZlNvdXJjZSB8IEFESV80X0FVWF9BRENSRUYwX0VOX007CisgICAgaWYgKCFyZWZTb3VyY2UgJiYgKHNhbXBsZVRpbWUgPCBBVVhBRENfU0FNUExFX1RJTUVfMjFQM19VUykpIHsKKyAgICAgICAgYWRjcmVmMCB8PSBBRElfNF9BVVhfQURDUkVGMF9SRUZfT05fSURMRV9NOworICAgIH0KKyAgICBBREk4Qml0c1NldChBVVhfQURJNF9CQVNFLCBBRElfNF9BVVhfT19BRENSRUYwLCBhZGNyZWYwKTsKKworICAgIC8vIEVuYWJsZSB0aGUgQURDIGNsb2NrCisgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX0FEQ0NMS0NUTCkgPSBBVVhfV1VDX0FEQ0NMS0NUTF9SRVFfTTsKKyAgICB3aGlsZSAoIShIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fQURDQ0xLQ1RMKSAmIEFVWF9XVUNfQURDQ0xLQ1RMX0FDS19NKSk7CisKKyAgICAvLyBFbmFibGUgdGhlIEFEQyBkYXRhIGludGVyZmFjZQorICAgIGlmICh0cmlnZ2VyID09IEFVWEFEQ19UUklHR0VSX01BTlVBTCkgeworICAgICAgICAvLyBNYW51YWwgdHJpZ2dlcjogTm8gbmVlZCB0byBjb25maWd1cmUgZXZlbnQgcm91dGluZyBmcm9tIEdQVAorICAgICAgICBIV1JFRyhBVVhfQU5BSUZfQkFTRSArIEFVWF9BTkFJRl9PX0FEQ0NUTCkgPSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19OT19FVkVOVDAgfCBBVVhfQU5BSUZfQURDQ1RMX0NNRF9FTjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBHUFQgdHJpZ2dlcjogQ29uZmlndXJlIGV2ZW50IHJvdXRpbmcgdmlhIE1DVV9FViB0byB0aGUgQVVYIGRvbWFpbgorICAgICAgICBIV1JFRyhFVkVOVF9CQVNFICsgRVZFTlRfT19BVVhTRUwwKSA9IHRyaWdnZXI7CisgICAgICAgIEhXUkVHKEFVWF9BTkFJRl9CQVNFICsgQVVYX0FOQUlGX09fQURDQ1RMKSA9IEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX01DVV9FViB8IEFVWF9BTkFJRl9BRENDVExfQ01EX0VOOworICAgIH0KKworICAgIC8vIENvbmZpZ3VyZSB0aGUgQURDCisgICAgQURJOEJpdHNTZXQoQVVYX0FESTRfQkFTRSwgQURJXzRfQVVYX09fQURDMCwgc2FtcGxlVGltZSA8PCBBRElfNF9BVVhfQURDMF9TTVBMX0NZQ0xFX0VYUF9TKTsKKworICAgIC8vIFJlbGVhc2UgcmVzZXQgYW5kIGVuYWJsZSB0aGUgQURDCisgICAgQURJOEJpdHNTZXQoQVVYX0FESTRfQkFTRSwgQURJXzRfQVVYX09fQURDMCwgQURJXzRfQVVYX0FEQzBfRU5fTSB8IEFESV80X0FVWF9BREMwX1JFU0VUX05fTSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEaXNhYmxlcyBzY2FsaW5nIG9mIHRoZSBBREMgaW5wdXQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBVVhBRENEaXNhYmxlSW5wdXRTY2FsaW5nKHZvaWQpCit7CisgICAgQURJOEJpdHNTZXQoQVVYX0FESTRfQkFTRSwgQURJXzRfQVVYX09fQURDMSwgQURJXzRfQVVYX0FEQzFfU0NBTEVfRElTX00pOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRmx1c2hlcyB0aGUgQURDIEZJRk8KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBVVhBRENGbHVzaEZpZm8odm9pZCkKK3sKKyAgICBIV1JFR0JJVFcoQVVYX0FOQUlGX0JBU0UgKyBBVVhfQU5BSUZfT19BRENDVEwsIDEpID0gMTsgLy8gQ01EOiBFTigxKSAtPiBGTFVTSCgzKQorICAgIEhXUkVHQklUVyhBVVhfQU5BSUZfQkFTRSArIEFVWF9BTkFJRl9PX0FEQ0NUTCwgMSkgPSAwOyAvLyBDTUQ6IEZMVVNIKDMpIC0+IEVOKDEpCit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBXYWl0cyBmb3IgYW5kIHJldHVybnMgdGhlIGZpcnN0IHNhbXBsZSBpbiB0aGUgQURDIEZJRk8KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQVVYQURDUmVhZEZpZm8odm9pZCkgeworCisgICAgLy8gV2FpdCB1bnRpbCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc2FtcGxlIGluIHRoZSBGSUZPCisgICAgd2hpbGUgKEhXUkVHKEFVWF9BTkFJRl9CQVNFICsgQVVYX0FOQUlGX09fQURDRklGT1NUQVQpICYgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX0VNUFRZX00pOworCisgICAgLy8gUmV0dXJuIHRoZSBmaXJzdCBzYW1wbGUgZnJvbSB0aGUgRklGTworICAgIHJldHVybiBIV1JFRyhBVVhfQU5BSUZfQkFTRSArIEFVWF9BTkFJRl9PX0FEQ0ZJRk8pOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmV0dXJucyB0aGUgZmlyc3Qgc2FtcGxlIGluIHRoZSBBREMgRklGTywgd2l0aG91dCB3YWl0aW5nCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0FVWEFEQ1BvcEZpZm8odm9pZCkgeworCisgICAgLy8gUmV0dXJuIHRoZSBmaXJzdCBzYW1wbGUgZnJvbSB0aGUgRklGTy4gSWYgdGhlIEZJRk8gaXMgZW1wdHksIHRoaXMKKyAgICAvLyBnZW5lcmF0ZXMgQURDIEZJRk8gdW5kZXJmbG93CisgICAgcmV0dXJuIEhXUkVHKEFVWF9BTkFJRl9CQVNFICsgQVVYX0FOQUlGX09fQURDRklGTyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZXR1cm5zIHRoZSBnYWluIHZhbHVlIHVzZWQgd2hlbiBhZGp1c3RpbmcgZm9yIEFEQyBnYWluL29mZnNldAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDMyX3QKK0FVWEFEQ0dldEFkanVzdG1lbnRHYWluKHVpbnQzMl90IHJlZlNvdXJjZSkKK3sKKyAgICBpbnQzMl90IGdhaW47CisgICAgaWYgKHJlZlNvdXJjZSA9PSBBVVhBRENfUkVGX0ZJWEVEKSB7CisgICAgICAgIC8vIEFVWEFEQ19SRUZfRklYRUQgPT0+IEFCU19HQUlOCisgICAgICAgIGdhaW4gPSAoSFdSRUcoRkNGRzFfQkFTRSArIEZDRkcxX09fU09DX0FEQ19BQlNfR0FJTikgJiBGQ0ZHMV9TT0NfQURDX0FCU19HQUlOX1NPQ19BRENfQUJTX0dBSU5fVEVNUDFfTSkgPj4gRkNGRzFfU09DX0FEQ19BQlNfR0FJTl9TT0NfQURDX0FCU19HQUlOX1RFTVAxX1M7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIEFVWEFEQ19SRUZfVkREU19SRUwgPT0+IFJFTF9HQUlOCisgICAgICAgIGdhaW4gPSAoSFdSRUcoRkNGRzFfQkFTRSArIEZDRkcxX09fU09DX0FEQ19SRUxfR0FJTikgJiBGQ0ZHMV9TT0NfQURDX1JFTF9HQUlOX1NPQ19BRENfUkVMX0dBSU5fVEVNUDFfTSkgPj4gRkNGRzFfU09DX0FEQ19SRUxfR0FJTl9TT0NfQURDX1JFTF9HQUlOX1RFTVAxX1M7CisgICAgfQorICAgIHJldHVybiBnYWluOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmV0dXJucyB0aGUgb2Zmc2V0IHZhbHVlIHVzZWQgd2hlbiBhZGp1c3RpbmcgZm9yIEFEQyBnYWluL29mZnNldAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDMyX3QKK0FVWEFEQ0dldEFkanVzdG1lbnRPZmZzZXQodWludDMyX3QgcmVmU291cmNlKQoreworICAgIGludDhfdCBvZmZzZXQ7CisgICAgaWYgKCByZWZTb3VyY2UgPT0gQVVYQURDX1JFRl9GSVhFRCApIHsKKyAgICAgICAgLy8gQVVYQURDX1JFRl9GSVhFRCA9PT4gQUJTX09GRlNFVAorICAgICAgICBvZmZzZXQgPSBIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19TT0NfQURDX09GRlNFVF9JTlQpID4+IEZDRkcxX1NPQ19BRENfT0ZGU0VUX0lOVF9TT0NfQURDX0FCU19PRkZTRVRfVEVNUDFfUzsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBVVhBRENfUkVGX1ZERFNfUkVMID09PiBSRUxfT0ZGU0VUCisgICAgICAgIG9mZnNldCA9IEhXUkVHKEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX1NPQ19BRENfT0ZGU0VUX0lOVCkgPj4gRkNGRzFfU09DX0FEQ19PRkZTRVRfSU5UX1NPQ19BRENfUkVMX09GRlNFVF9URU1QMV9TOworICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0OworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ29udmVydHMgYW4gImlkZWFsIiBBREMgdmFsdWUgdG8gbWljcm92b2x0cworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDMyX3QKK0FVWEFEQ1ZhbHVlVG9NaWNyb3ZvbHRzKGludDMyX3QgZml4ZWRSZWZWb2x0YWdlLCBpbnQzMl90IGFkY1ZhbHVlKQoreworICAgIC8vIENob3Agb2ZmIDQgYml0cyBkdXJpbmcgY2FsY3VsYXRpb25zIHRvIGF2b2lkIDMyLWJpdCBvdmVyZmxvdworICAgIGZpeGVkUmVmVm9sdGFnZSA+Pj0gNDsKKyAgICByZXR1cm4gKCgoYWRjVmFsdWUgKiBmaXhlZFJlZlZvbHRhZ2UpICsgMjA0NykgLyA0MDk1KSA8PCA0OworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ29udmVydHMgYSBudW1iZXIgb2YgbWljcm92b2x0cyB0byBjb3JyZXNwb25kaW5nICJpZGVhbCIgQURDIHZhbHVlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MzJfdAorQVVYQURDTWljcm92b2x0c1RvVmFsdWUoaW50MzJfdCBmaXhlZFJlZlZvbHRhZ2UsIGludDMyX3QgbWljcm92b2x0cykKK3sKKyAgICAvLyBDaG9wIG9mZiA0IGJpdHMgZHVyaW5nIGNhbGN1bGF0aW9ucyB0byBhdm9pZCAzMi1iaXQgb3ZlcmZsb3cKKyAgICBmaXhlZFJlZlZvbHRhZ2UgPj49IDQ7CisgICAgbWljcm92b2x0cyA+Pj0gNDsKKyAgICByZXR1cm4gKChtaWNyb3ZvbHRzICogNDA5NSkgKyAoZml4ZWRSZWZWb2x0YWdlIC8gMikpIC8gZml4ZWRSZWZWb2x0YWdlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUGVyZm9ybXMgQURDIHZhbHVlIGdhaW4gYW5kIG9mZnNldCBhZGp1c3RtZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MzJfdAorQVVYQURDQWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0KGludDMyX3QgYWRjVmFsdWUsIGludDMyX3QgZ2FpbiwgaW50MzJfdCBvZmZzZXQpCit7CisgICAgLy8gQXBwbHkgZ2FpbiBhbmQgb2Zmc2V0IGFkanVzdG1lbnQKKyAgICBhZGNWYWx1ZSA9ICgoKGFkY1ZhbHVlICsgb2Zmc2V0KSAqIGdhaW4pICsgMTYzODQpIC8gMzI3Njg7CisKKyAgICAvLyBTYXR1cmF0ZQorICAgIGlmIChhZGNWYWx1ZSA8IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIGlmIChhZGNWYWx1ZSA+IDQwOTUpIHsKKyAgICAgICAgcmV0dXJuIDQwOTU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGFkY1ZhbHVlOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFBlcmZvcm1zIHRoZSBpbnZlcnNlIG9mIHRoZSBBREMgdmFsdWUgZ2FpbiBhbmQgb2Zmc2V0IGFkanVzdG1lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitpbnQzMl90CitBVVhBRENVbmFkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldChpbnQzMl90IGFkY1ZhbHVlLCBpbnQzMl90IGdhaW4sIGludDMyX3Qgb2Zmc2V0KQoreworICAgIC8vIEFwcGx5IGludmVyc2UgZ2FpbiBhbmQgb2Zmc2V0IGFkanVzdG1lbnQKKyAgICBhZGNWYWx1ZSA9ICgoKGFkY1ZhbHVlICogMzI3NjgpICsgKGdhaW4gLyAyKSkgLyBnYWluKSAtIG9mZnNldDsKKworICAgIC8vIFNhdHVyYXRlCisgICAgaWYgKGFkY1ZhbHVlIDwgMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKGFkY1ZhbHVlID4gNDA5NSkgeworICAgICAgICByZXR1cm4gNDA5NTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gYWRjVmFsdWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X2FkYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X2FkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NzUyYWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfYWRjLmgKQEAgLTAsMCArMSw1OTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhdXhfYWRjLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA3LTE2IDEyOjEyOjA0ICswMjAwIChUaHUsIDE2IEp1bCAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0MTUxCisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEFVWCBBbmFsb2ctdG8tRGlnaXRhbAorKiAgICAgICAgICAgICAgICAgIENvbnZlcnRlcgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBhdXhfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGF1eGFkY19hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0FVWF9BRENfSF9fCisjZGVmaW5lIF9fQVVYX0FEQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZXZlbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYWRpLmg+CisjaW5jbHVkZSA8aW5jL2h3X2FkaV80X2F1eC5oPgorI2luY2x1ZGUgPGluYy9od19hdXhfYW5haWYuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIEFVWEFEQ0Rpc2FibGUgICAgICAgICAgICAgICAgICAgTk9ST01fQVVYQURDRGlzYWJsZQorICAgICNkZWZpbmUgQVVYQURDRW5hYmxlQXN5bmMgICAgICAgICAgICAgICBOT1JPTV9BVVhBRENFbmFibGVBc3luYworICAgICNkZWZpbmUgQVVYQURDRW5hYmxlU3luYyAgICAgICAgICAgICAgICBOT1JPTV9BVVhBRENFbmFibGVTeW5jCisgICAgI2RlZmluZSBBVVhBRENEaXNhYmxlSW5wdXRTY2FsaW5nICAgICAgIE5PUk9NX0FVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcKKyAgICAjZGVmaW5lIEFVWEFEQ0ZsdXNoRmlmbyAgICAgICAgICAgICAgICAgTk9ST01fQVVYQURDRmx1c2hGaWZvCisgICAgI2RlZmluZSBBVVhBRENSZWFkRmlmbyAgICAgICAgICAgICAgICAgIE5PUk9NX0FVWEFEQ1JlYWRGaWZvCisgICAgI2RlZmluZSBBVVhBRENQb3BGaWZvICAgICAgICAgICAgICAgICAgIE5PUk9NX0FVWEFEQ1BvcEZpZm8KKyAgICAjZGVmaW5lIEFVWEFEQ0dldEFkanVzdG1lbnRHYWluICAgICAgICAgTk9ST01fQVVYQURDR2V0QWRqdXN0bWVudEdhaW4KKyAgICAjZGVmaW5lIEFVWEFEQ0dldEFkanVzdG1lbnRPZmZzZXQgICAgICAgTk9ST01fQVVYQURDR2V0QWRqdXN0bWVudE9mZnNldAorICAgICNkZWZpbmUgQVVYQURDVmFsdWVUb01pY3Jvdm9sdHMgICAgICAgICBOT1JPTV9BVVhBRENWYWx1ZVRvTWljcm92b2x0cworICAgICNkZWZpbmUgQVVYQURDTWljcm92b2x0c1RvVmFsdWUgICAgICAgICBOT1JPTV9BVVhBRENNaWNyb3ZvbHRzVG9WYWx1ZQorICAgICNkZWZpbmUgQVVYQURDQWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0IE5PUk9NX0FVWEFEQ0FkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldAorICAgICNkZWZpbmUgQVVYQURDVW5hZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQgTk9ST01fQVVYQURDVW5hZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgQURDIHJlZmVyZW5jZSBzb3VyY2VzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYQURDX1JFRl9GSVhFRCAgICAgICAgICAgICAgICAgICAgKDAgPDwgQURJXzRfQVVYX0FEQ1JFRjBfU1JDX1MpCisjZGVmaW5lIEFVWEFEQ19SRUZfVkREU19SRUwgICAgICAgICAgICAgICAgICgxIDw8IEFESV80X0FVWF9BRENSRUYwX1NSQ19TKQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIEFEQyBGSUZPIHN0YXR1cyBiaXRzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYQURDX0ZJRk9fRU1QVFlfTSAgICAgICAgICAgICAgICAgKEFVWF9BTkFJRl9BRENGSUZPU1RBVF9FTVBUWV9NKQorI2RlZmluZSBBVVhBRENfRklGT19BTE1PU1RfRlVMTF9NICAgICAgICAgICAoQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX0FMTU9TVF9GVUxMX00pCisjZGVmaW5lIEFVWEFEQ19GSUZPX0ZVTExfTSAgICAgICAgICAgICAgICAgIChBVVhfQU5BSUZfQURDRklGT1NUQVRfRlVMTF9NKQorI2RlZmluZSBBVVhBRENfRklGT19VTkRFUkZMT1dfTSAgICAgICAgICAgICAoQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX1VOREVSRkxPV19NKQorI2RlZmluZSBBVVhBRENfRklGT19PVkVSRkxPV19NICAgICAgICAgICAgICAoQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX09WRVJGTE9XX00pCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciBzdXBwb3J0ZWQgQURDIHRyaWdnZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYQURDX1RSSUdHRVJfTUFOVUFMICAgICAgICAgICAgICAgKEVWRU5UX0FVWFNFTDBfRVZfTk9ORSkKKyNkZWZpbmUgQVVYQURDX1RSSUdHRVJfR1BUMEEgICAgICAgICAgICAgICAgKEVWRU5UX0FVWFNFTDBfRVZfR1BUMEEpCisjZGVmaW5lIEFVWEFEQ19UUklHR0VSX0dQVDBCICAgICAgICAgICAgICAgIChFVkVOVF9BVVhTRUwwX0VWX0dQVDBCKQorI2RlZmluZSBBVVhBRENfVFJJR0dFUl9HUFQxQSAgICAgICAgICAgICAgICAoRVZFTlRfQVVYU0VMMF9FVl9HUFQxQSkKKyNkZWZpbmUgQVVYQURDX1RSSUdHRVJfR1BUMUIgICAgICAgICAgICAgICAgKEVWRU5UX0FVWFNFTDBfRVZfR1BUMUIpCisjZGVmaW5lIEFVWEFEQ19UUklHR0VSX0dQVDJBICAgICAgICAgICAgICAgIChFVkVOVF9BVVhTRUwwX0VWX0dQVDJBKQorI2RlZmluZSBBVVhBRENfVFJJR0dFUl9HUFQyQiAgICAgICAgICAgICAgICAoRVZFTlRfQVVYU0VMMF9FVl9HUFQyQikKKyNkZWZpbmUgQVVYQURDX1RSSUdHRVJfR1BUM0EgICAgICAgICAgICAgICAgKEVWRU5UX0FVWFNFTDBfRVZfR1BUM0EpCisjZGVmaW5lIEFVWEFEQ19UUklHR0VSX0dQVDNCICAgICAgICAgICAgICAgIChFVkVOVF9BVVhTRUwwX0VWX0dQVDNCKQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgQURDIHNhbXBsaW5nIHR5cGUgZm9yIHN5bmNocm9ub3VzIG9wZXJhdGlvbi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFVWEFEQ19TQU1QTEVfVElNRV8yUDdfVVMgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYQURDX1NBTVBMRV9USU1FXzVQM19VUyAgICAgICAgICAgNAorI2RlZmluZSBBVVhBRENfU0FNUExFX1RJTUVfMTBQNl9VUyAgICAgICAgICA1CisjZGVmaW5lIEFVWEFEQ19TQU1QTEVfVElNRV8yMVAzX1VTICAgICAgICAgIDYKKyNkZWZpbmUgQVVYQURDX1NBTVBMRV9USU1FXzQyUDZfVVMgICAgICAgICAgNworI2RlZmluZSBBVVhBRENfU0FNUExFX1RJTUVfODVQM19VUyAgICAgICAgICA4CisjZGVmaW5lIEFVWEFEQ19TQU1QTEVfVElNRV8xNzBfVVMgICAgICAgICAgIDkKKyNkZWZpbmUgQVVYQURDX1NBTVBMRV9USU1FXzM0MV9VUyAgICAgICAgICAgMTAKKyNkZWZpbmUgQVVYQURDX1NBTVBMRV9USU1FXzY4Ml9VUyAgICAgICAgICAgMTEKKyNkZWZpbmUgQVVYQURDX1NBTVBMRV9USU1FXzFQMzdfTVMgICAgICAgICAgMTIKKyNkZWZpbmUgQVVYQURDX1NBTVBMRV9USU1FXzJQNzNfTVMgICAgICAgICAgMTMKKyNkZWZpbmUgQVVYQURDX1NBTVBMRV9USU1FXzVQNDZfTVMgICAgICAgICAgMTQKKyNkZWZpbmUgQVVYQURDX1NBTVBMRV9USU1FXzEwUDlfTVMgICAgICAgICAgMTUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEVxdWl2YWxlbnQgdm9sdGFnZXMgZm9yIGZpeGVkIEFEQyByZWZlcmVuY2UsIGluIG1pY3Jvdm9sdHMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhBRENfRklYRURfUkVGX1ZPTFRBR0VfTk9STUFMICAgICA0MzAwMDAwCisjZGVmaW5lIEFVWEFEQ19GSVhFRF9SRUZfVk9MVEFHRV9VTlNDQUxFRCAgIDE0Nzg1MDAKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyB0aGUgQURDLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZDoKKy8vISAtIEJlZm9yZSByZS1lbmFibGluZyB0aGUgQURDIHVzaW5nIFxyZWYgQVVYQURDRW5hYmxlQXN5bmMoKSBvcgorLy8hICAgXHJlZiBBVVhBRENFbmFibGVTeW5jKCkKKy8vISAtIEJlZm9yZSBlbnRlcmluZyBzeXN0ZW0gc3RhbmRieQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFVWEFEQ0Rpc2FibGUodm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdGhlIEFEQyBmb3IgYXN5bmNocm9ub3VzIG9wZXJhdGlvbi4KKy8vIQorLy8hIEluIGFzeW5jaHJvbm91cyBvcGVyYXRpb24sIHRoZSBBREMgc2FtcGxlcyBjb250aW51b3VzbHkgYmV0d2VlbgorLy8hIGNvbnZlcnNpb25zLgorLy8hCisvLyEgVGhlIEFEQyB0cmlnZ2VyIHN0YXJ0cyB0aGUgY29udmVyc2lvbi4gTm90ZSB0aGF0IHRoZSBmaXJzdCBjb252ZXJzaW9uIG1heQorLy8hIGJlIGludmFsaWQgaWYgdGhlIHNhbXBsaW5nIHBlcmlvZCBpcyB0b28gc2hvcnQuCisvLyEKKy8vISBBREMgaW5wdXQgc2NhbGluZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYWZ0ZXIgZGV2aWNlIHJlc2V0LCBhbmQgaXMgYWxzbyByZS0KKy8vISBlbmFibGVkIGJ5IFxyZWYgQVVYQURDRGlzYWJsZSgpLiBUbyBkaXNhYmxlIGlucHV0IHNjYWxpbmcsIGNhbGwKKy8vISBccmVmIEFVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcoKSBiZWZvcmUgY2FsbGluZyBccmVmIEFVWEFEQ0VuYWJsZUFzeW5jKCkuCisvLyEKKy8vISBccGFyYW0gcmVmU291cmNlCisvLyEgICAgIEFEQyByZWZlcmVuY2Ugc291cmNlOgorLy8hICAgICAtIFxyZWYgQVVYQURDX1JFRl9GSVhFRCAobm9taW5hbGx5IDQuMyBWKQorLy8hICAgICAtIFxyZWYgQVVYQURDX1JFRl9WRERTX1JFTCAobm9taW5hbGx5IFZERFMpCisvLyEgXHBhcmFtIHRyaWdnZXIKKy8vISAgICAgQURDIGNvbnZlcnNpb24gdHJpZ2dlcjoKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX01BTlVBTAorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfR1BUMEEKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX0dQVDBCCisvLyEgICAgIC0gXHJlZiBBVVhBRENfVFJJR0dFUl9HUFQxQQorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfR1BUMUIKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX0dQVDJBCisvLyEgICAgIC0gXHJlZiBBVVhBRENfVFJJR0dFUl9HUFQyQgorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfR1BUM0EKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX0dQVDNCCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQVVYQURDRW5hYmxlQXN5bmModWludDMyX3QgcmVmU291cmNlLCB1aW50MzJfdCB0cmlnZ2VyKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyB0aGUgQURDIGZvciBzeW5jaHJvbm91cyBvcGVyYXRpb24uCisvLyEKKy8vISBJbiBzeW5jaHJvbm91cyBvcGVyYXRpb24sIHRoZSBBREMgaXMgaWRsZSBiZXR3ZWVuIGEgY29udmVyc2lvbiBhbmQKKy8vISBzdWJzZXF1ZW50IHNhbXBsaW5ncy4KKy8vIQorLy8hIFRoZSBBREMgdHJpZ2dlciBzdGFydHMgc2FtcGxpbmcgd2l0aCBzcGVjaWZpZWQgZHVyYXRpb24sIGZvbGxvd2VkIGJ5IHRoZQorLy8hIGNvbnZlcnNpb24uIE5vdGUgdGhhdCB0aGUgZmlyc3QgY29udmVyc2lvbiBtYXkgYmUgaW52YWxpZCBpZiB0aGUgaW5pdGlhbAorLy8hIHNhbXBsaW5nIHBlcmlvZCBpcyB0b28gc2hvcnQuCisvLyEKKy8vISBBREMgaW5wdXQgc2NhbGluZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYWZ0ZXIgZGV2aWNlIHJlc2V0LCBhbmQgaXMgYWxzbyByZS0KKy8vISBlbmFibGVkIGJ5IFxyZWYgQVVYQURDRGlzYWJsZSgpLiBUbyBkaXNhYmxlIGlucHV0IHNjYWxpbmcsIGNhbGwKKy8vISBccmVmIEFVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcoKSBiZWZvcmUgY2FsbGluZyBccmVmIEFVWEFEQ0VuYWJsZVN5bmMoKS4KKy8vIQorLy8hIFxwYXJhbSByZWZTb3VyY2UKKy8vISAgICAgQURDIHJlZmVyZW5jZSBzb3VyY2U6CisvLyEgICAgIC0gXHJlZiBBVVhBRENfUkVGX0ZJWEVEIChub21pbmFsbHkgNC4zIFYpCisvLyEgICAgIC0gXHJlZiBBVVhBRENfUkVGX1ZERFNfUkVMIChub21pbmFsbHkgVkREUykKKy8vISBccGFyYW0gc2FtcGxlVGltZQorLy8hICAgICBBREMgc2FtcGxpbmcgdGltZToKKy8vISAgICAgLSBccmVmIEFVWEFEQ19TQU1QTEVfVElNRV8yUDdfVVMKKy8vISAgICAgLSBccmVmIEFVWEFEQ19TQU1QTEVfVElNRV81UDNfVVMKKy8vISAgICAgLSBccmVmIEFVWEFEQ19TQU1QTEVfVElNRV8xMFA2X1VTCisvLyEgICAgIC0gXHJlZiBBVVhBRENfU0FNUExFX1RJTUVfMjFQM19VUworLy8hICAgICAtIFxyZWYgQVVYQURDX1NBTVBMRV9USU1FXzQyUDZfVVMKKy8vISAgICAgLSBccmVmIEFVWEFEQ19TQU1QTEVfVElNRV84NVAzX1VTCisvLyEgICAgIC0gXHJlZiBBVVhBRENfU0FNUExFX1RJTUVfMTcwX1VTCisvLyEgICAgIC0gXHJlZiBBVVhBRENfU0FNUExFX1RJTUVfMzQxX1VTCisvLyEgICAgIC0gXHJlZiBBVVhBRENfU0FNUExFX1RJTUVfNjgyX1VTCisvLyEgICAgIC0gXHJlZiBBVVhBRENfU0FNUExFX1RJTUVfMVAzN19NUworLy8hICAgICAtIFxyZWYgQVVYQURDX1NBTVBMRV9USU1FXzJQNzNfTVMKKy8vISAgICAgLSBccmVmIEFVWEFEQ19TQU1QTEVfVElNRV81UDQ2X01TCisvLyEgICAgIC0gXHJlZiBBVVhBRENfU0FNUExFX1RJTUVfMTBQOV9NUworLy8hIFxwYXJhbSB0cmlnZ2VyCisvLyEgICAgIEFEQyBjb252ZXJzaW9uIHRyaWdnZXI6CisvLyEgICAgIC0gXHJlZiBBVVhBRENfVFJJR0dFUl9NQU5VQUwKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX0dQVDBBCisvLyEgICAgIC0gXHJlZiBBVVhBRENfVFJJR0dFUl9HUFQwQgorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfR1BUMUEKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX0dQVDFCCisvLyEgICAgIC0gXHJlZiBBVVhBRENfVFJJR0dFUl9HUFQyQQorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfR1BUMkIKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX0dQVDNBCisvLyEgICAgIC0gXHJlZiBBVVhBRENfVFJJR0dFUl9HUFQzQgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFVWEFEQ0VuYWJsZVN5bmModWludDMyX3QgcmVmU291cmNlLCB1aW50MzJfdCBzYW1wbGVUaW1lLCB1aW50MzJfdCB0cmlnZ2VyKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgc2NhbGluZyBvZiB0aGUgQURDIGlucHV0LgorLy8hCisvLyEgQnkgZGVmYXVsdCwgdGhlIEFEQyBvcGVyYXRlcyBpbnRlcm5hbGx5IG9uIGEgdmVyc2lvbiBvZiB0aGUgaW5wdXQgc2lnbmFsCisvLyEgdGhhdCBoYXMgYmVlbiBzY2FsZWQgZG93biBieSBhIGZhY3RvciA8dHQ+MTQwOCAvIDQwOTU8L3R0Pi4gVGhpcyBmdW5jdGlvbgorLy8hIGRpc2FibGVzIHRoYXQgc2NhbGluZywgYWxsb3dpbmcgZm9yIGEgdHJhZGUtb2ZmIGJldHdlZW4gZHluYW1pYyByYW5nZSBhbmQKKy8vISBhbmQgcmVzb2x1dGlvbi4KKy8vIQorLy8hIFxub3RlIFRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGUgQURDIGlzIGRpc2FibGVkLCBiZWZvcmUKKy8vISAgICAgICBjYWxsaW5nIFxyZWYgQVVYQURDRW5hYmxlU3luYygpIG9yIFxyZWYgQVVYQURDRW5hYmxlQXN5bmMoKS4KKy8vISBcbm90ZSBEaWZmZXJlbnQgaW5wdXQgbWF4aW11bSByYXRpbmdzIGFwcGx5IHdoZW4gaW5wdXQgc2NhbGluZyBpcyBkaXNhYmxlZC4KKy8vISAgICAgICBWaW9sYXRpbmcgdGhlc2UgbWF5IGRhbWFnZSB0aGUgZGV2aWNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcodm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEZsdXNoZXMgdGhlIEFEQyBGSUZPLgorLy8hCisvLyEgVGhpcyBlbXB0aWVzIHRoZSBGSUZPIGFuZCBjbGVhcnMgdGhlIHVuZGVyZmxvdy9vdmVyZmxvdyBmbGFncy4KKy8vIQorLy8hIE5vdGU6IFRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGUgQURDIGlzIGVuYWJsZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQVVYQURDRmx1c2hGaWZvKHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZW5lcmF0ZXMgYSBzaW5nbGUgbWFudWFsIEFEQyB0cmlnZ2VyLgorLy8hCisvLyEgRm9yIHN5bmNocm9ub3VzIG1vZGUsIHRoZSB0cmlnZ2VyIHN0YXJ0cyBzYW1wbGluZyBmb2xsb3dlZCBieSBjb252ZXJzaW9uLgorLy8hIEZvciBhc3luY2hyb25vdXMgbW9kZSwgdGhlIHRyaWdnZXIgc3RhcnRzIGNvbnZlcnNpb24uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FVWEFEQ0dlbk1hbnVhbFRyaWdnZXIodm9pZCkKK3sKKyAgICBIV1JFRyhBVVhfQU5BSUZfQkFTRSArIEFVWF9BTkFJRl9PX0FEQ1RSSUcpID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyBmbGFncyBpbmRpY2F0aW5nIHRoZSBzdGF0dXMgb2YgdGhlIEFEQyBGSUZPLgorLy8hCisvLyEgVGhlIGZsYWdzIGluZGljYXRlIEZJRk8gZW1wdHksIGZ1bGwgYW5kIGFsbW9zdCBmdWxsLCBhbmQgd2hldGhlcgorLy8hIG92ZXJmbG93L3VuZGVyZmxvdyBoYXMgb2NjdXJyZWQuCisvLyEKKy8vISBccmV0dXJuCisvLyEgICAgIEEgY29tYmluYXRpb24gKGJpdHdpc2UgT1IpIG9mIHRoZSBmb2xsb3dpbmcgZmxhZ3M6CisvLyEgICAgIC0gXHJlZiBBVVhBRENfRklGT19FTVBUWV9NCisvLyEgICAgIC0gXHJlZiBBVVhBRENfRklGT19BTE1PU1RfRlVMTF9NCisvLyEgICAgIC0gXHJlZiBBVVhBRENfRklGT19GVUxMX00KKy8vISAgICAgLSBccmVmIEFVWEFEQ19GSUZPX1VOREVSRkxPV19NCisvLyEgICAgIC0gXHJlZiBBVVhBRENfRklGT19PVkVSRkxPV19NCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBVVhBRENHZXRGaWZvU3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIEhXUkVHKEFVWF9BTkFJRl9CQVNFICsgQVVYX0FOQUlGX09fQURDRklGT1NUQVQpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBXYWl0cyBmb3IgYW5kIHJldHVybnMgdGhlIGZpcnN0IHNhbXBsZSBpbiB0aGUgQURDIEZJRk8uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdhaXRzIHVudGlsIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzYW1wbGUgaW4gdGhlIEFEQyBGSUZPLiBJdAorLy8hIHRoZW4gcG9wcyBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgc2FtcGxlIGZyb20gdGhlIEZJRk8uCisvLyEKKy8vISBcbm90ZSBUaGlzIHByb2NlZHVyZSB3aWxsIGRlYWRsb2NrIGlmIGNhbGxlZCB3aXRob3V0IHNldHRpbmcgdXAgQURDIHRyaWdnZXIKKy8vISAgICAgICBnZW5lcmF0aW9uIGluIGFkdmFuY2UuIFRoZSB0cmlnZ2VyIGNhbiBlaXRoZXIgYmUgbWFudWFsIG9yIHBlcmlvZGljYWwKKy8vISAgICAgICAodXNpbmcgYSBHUFQpLgorLy8hCisvLyEgXHJldHVybiBUaGUgZmlyc3QgKDEyLWJpdCkgc2FtcGxlIGZyb20gdGhlIEFEQyBGSUZPCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEFVWEFEQ1JlYWRGaWZvKHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSBmaXJzdCBzYW1wbGUgaW4gdGhlIEFEQyBGSUZPLCB3aXRob3V0IHdhaXRpbmcuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHdhaXQsIGFuZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYXQgbGVhc3QKKy8vISBvbmUgc2FtcGxlIGluIHRoZSBBREMgRklGTy4gT3RoZXJ3aXNlIHRoZSBjYWxsIHdpbGwgZ2VuZXJhdGUgRklGTyB1bmRlcmZsb3cKKy8vISAoXHJlZiBBVVhBRENfRklGT19VTkRFUkZMT1dfTSkuCisvLyEKKy8vISBccmV0dXJuIFRoZSBmaXJzdCAoMTItYml0KSBzYW1wbGUgZnJvbSB0aGUgQURDIEZJRk8sIG9yIGFuIHVuZGVmaW5lZCB2YWx1ZQorLy8hICAgICAgICAgaWYgdGhlIEZJRk8gaXMgZW1wdHkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQVVYQURDUG9wRmlmbyh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2VsZWN0cyBpbnRlcm5hbCBvciBleHRlcm5hbCBpbnB1dCBmb3IgdGhlIEFEQy4KKy8vIQorLy8hIE5vdGUgdGhhdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYWxzbyBzZWxlY3RzIHRoZSBzYW1lIGlucHV0IGZvciBBVVhfQ09NUEIuCisvLyEKKy8vISBccGFyYW0gaW5wdXQKKy8vISAgICAgSW50ZXJuYWwvZXh0ZXJuYWwgaW5wdXQgc2VsZWN0aW9uOgorLy8hICAgICAtIFxyZWYgQURDX0NPTVBCX0lOX0RDT1VQTAorLy8hICAgICAtIFxyZWYgQURDX0NPTVBCX0lOX1ZTUworLy8hICAgICAtIFxyZWYgQURDX0NPTVBCX0lOX1ZERFMKKy8vISAgICAgLSBccmVmIEFEQ19DT01QQl9JTl9BVVhJTzcKKy8vISAgICAgLSBccmVmIEFEQ19DT01QQl9JTl9BVVhJTzYKKy8vISAgICAgLSBccmVmIEFEQ19DT01QQl9JTl9BVVhJTzUKKy8vISAgICAgLSBccmVmIEFEQ19DT01QQl9JTl9BVVhJTzQKKy8vISAgICAgLSBccmVmIEFEQ19DT01QQl9JTl9BVVhJTzMKKy8vISAgICAgLSBccmVmIEFEQ19DT01QQl9JTl9BVVhJTzIKKy8vISAgICAgLSBccmVmIEFEQ19DT01QQl9JTl9BVVhJTzEKKy8vISAgICAgLSBccmVmIEFEQ19DT01QQl9JTl9BVVhJTzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQVVYQURDU2VsZWN0SW5wdXQodWludDMyX3QgaW5wdXQpCit7CisgICAgSGFwaVNlbGVjdEFEQ0NvbXBCSW5wdXQoaW5wdXQpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSBnYWluIHZhbHVlIHVzZWQgd2hlbiBhZGp1c3RpbmcgZm9yIEFEQyBnYWluL29mZnNldC4KKy8vIQorLy8hIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBnYWluIHZhbHVlIHRvIGJlIHVzZWQgd2l0aAorLy8hIFxyZWYgQVVYQURDQWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0KCkgb3IKKy8vISBccmVmIEFVWEFEQ1VuYWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0KCkuIFRoZSBnYWluIHZhbHVlIGlzIGZvdW5kIGR1cmluZworLy8hIGNoaXAgbWFudWZhY3R1cmluZyBhbmQgaXMgc3RvcmVkIGluIHRoZSBmYWN0b3J5IGNvbmZpZ3VyYXRpb24sIEZDRkcxLgorLy8hCisvLyEgXHBhcmFtIHJlZlNvdXJjZQorLy8hICAgICBBREMgcmVmZXJlbmNlIHNvdXJjZToKKy8vISAgICAgLSBccmVmIEFVWEFEQ19SRUZfRklYRUQgKG5vbWluYWxseSA0LjMgVikKKy8vISAgICAgLSBccmVmIEFVWEFEQ19SRUZfVkREU19SRUwgKG5vbWluYWxseSBWRERTKQorLy8hCisvLyEgXHJldHVybgorLy8hICAgICBUaGUgZ2FpbiB2YWx1ZSB0byBiZSB1c2VkIGluIGFkanVzdG1lbnRzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGludDMyX3QgQVVYQURDR2V0QWRqdXN0bWVudEdhaW4odWludDMyX3QgcmVmU291cmNlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgb2Zmc2V0IHZhbHVlIHVzZWQgd2hlbiBhZGp1c3RpbmcgZm9yIEFEQyBnYWluL29mZnNldC4KKy8vIQorLy8hIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvZmZzZXQgdmFsdWUgdG8gYmUgdXNlZCB3aXRoCisvLyEgXHJlZiBBVVhBRENBZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQoKSBvcgorLy8hIFxyZWYgQVVYQURDVW5hZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQoKS4gVGhlIG9mZnNldCB2YWx1ZSBpcyBmb3VuZAorLy8hIGR1cmluZyBjaGlwIG1hbnVmYWN0dXJpbmcgYW5kIGlzIHN0b3JlZCBpbiB0aGUgZmFjdG9yeSBjb25maWd1cmF0aW9uLAorLy8hIEZDRkcxLgorLy8hCisvLyEgXHBhcmFtIHJlZlNvdXJjZQorLy8hICAgICBBREMgcmVmZXJlbmNlIHNvdXJjZToKKy8vISAgICAgLSBccmVmIEFVWEFEQ19SRUZfRklYRUQgKG5vbWluYWxseSA0LjMgVikKKy8vISAgICAgLSBccmVmIEFVWEFEQ19SRUZfVkREU19SRUwgKG5vbWluYWxseSBWRERTKQorLy8hCisvLyEgXHJldHVybgorLy8hICAgICBUaGUgb2Zmc2V0IHZhbHVlIHRvIGJlIHVzZWQgaW4gYWRqdXN0bWVudHMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gaW50MzJfdCBBVVhBRENHZXRBZGp1c3RtZW50T2Zmc2V0KHVpbnQzMl90IHJlZlNvdXJjZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbnZlcnRzIGFuICJhZGp1c3RlZCIgQURDIHZhbHVlIHRvIG1pY3Jvdm9sdHMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBtZWFzdXJpbmcgd2l0aCBmaXhlZCBBREMgcmVmZXJlbmNlCisvLyEgKFxyZWYgQVVYQURDX1JFRl9GSVhFRCkuIFRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIHZvbHRhZ2UgYWNjb3VudHMgZm9yCisvLyEgd2hldGhlciB0aGUgc2FtcGxlZCBBREMgaW5wdXQgaXMgc2NhbGVkIGRvd24gYmVmb3JlIGNvbnZlcnNpb24gb3Igbm90LgorLy8hCisvLyEgXHBhcmFtIGZpeGVkUmVmVm9sdGFnZQorLy8hICAgICBGaXhlZCByZWZlcmVuY2Ugdm9sdGFnZSwgaW4gbWljcm92b2x0cworLy8hICAgICAtIFxyZWYgQVVYQURDX0ZJWEVEX1JFRl9WT0xUQUdFX05PUk1BTCB3aGVuIHVzaW5nIHNjYWxlZCBpbnB1dCAobm9ybWFsKQorLy8hICAgICAtIFxyZWYgQVVYQURDX0ZJWEVEX1JFRl9WT0xUQUdFX1VOU0NBTEVEIHdoZW4gdXNpbmcgdW5zY2FsZWQgaW5wdXQKKy8vISBccGFyYW0gYWRjVmFsdWUKKy8vISAgICAgVGhlIEFEQyB2YWx1ZQorLy8hCisvLyEgXHJldHVybgorLy8hICAgICBUaGUgY29ycmVzcG9uZGluZyBudW1iZXIgb2YgbWljcm92b2x0cworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQzMl90IEFVWEFEQ1ZhbHVlVG9NaWNyb3ZvbHRzKGludDMyX3QgZml4ZWRSZWZWb2x0YWdlLCBpbnQzMl90IGFkY1ZhbHVlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29udmVydHMgYSBudW1iZXIgb2YgbWljcm92b2x0cyB0byBjb3JyZXNwb25kaW5nICJhZGp1c3RlZCIgQURDIHZhbHVlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHdoZW4gbWVhc3VyaW5nIHdpdGggZml4ZWQgQURDIHJlZmVyZW5jZQorLy8hIChccmVmIEFVWEFEQ19SRUZfRklYRUQpLiBUaGUgc3BlY2lmaWVkIHJlZmVyZW5jZSB2b2x0YWdlIGFjY291bnRzIGZvcgorLy8hIHdoZXRoZXIgdGhlIHNhbXBsZWQgQURDIGlucHV0IGlzIHNjYWxlZCBkb3duIGJlZm9yZSBjb252ZXJzaW9uIG9yIG5vdC4KKy8vIQorLy8hIFxwYXJhbSBmaXhlZFJlZlZvbHRhZ2UKKy8vISAgICAgRml4ZWQgcmVmZXJlbmNlIHZvbHRhZ2UsIGluIG1pY3Jvdm9sdHMKKy8vISAgICAgLSBccmVmIEFVWEFEQ19GSVhFRF9SRUZfVk9MVEFHRV9OT1JNQUwgd2hlbiB1c2luZyBzY2FsZWQgaW5wdXQgKG5vcm1hbCkKKy8vISAgICAgLSBccmVmIEFVWEFEQ19GSVhFRF9SRUZfVk9MVEFHRV9VTlNDQUxFRCB3aGVuIHVzaW5nIHVuc2NhbGVkIGlucHV0CisvLyEgXHBhcmFtIG1pY3Jvdm9sdHMKKy8vISAgICAgVGhlIG51bWJlciBvZiBtaWNyb3ZvbHRzCisvLyEKKy8vISBccmV0dXJuCisvLyEgICAgIFRoZSBjb3JyZXNwb25kaW5nIGV4cGVjdGVkIEFEQyB2YWx1ZSAoYWRqdXN0ZWQgZm9yIEFEQyBnYWluL29mZnNldCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gaW50MzJfdCBBVVhBRENNaWNyb3ZvbHRzVG9WYWx1ZShpbnQzMl90IGZpeGVkUmVmVm9sdGFnZSwgaW50MzJfdCBtaWNyb3ZvbHRzKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUGVyZm9ybXMgQURDIHZhbHVlIGdhaW4gYW5kIG9mZnNldCBhZGp1c3RtZW50LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIG1lYXN1cmVkIEFEQyB2YWx1ZSBjb21wZW5zYXRlcyBmb3IgdGhlIGludGVybmFsIGdhaW4KKy8vISBhbmQgb2Zmc2V0IGluIHRoZSBBREMuCisvLyEKKy8vISBccGFyYW0gYWRjVmFsdWUKKy8vISAgICAgMTItYml0IEFEQyB1bmFkanVzdGVkIHZhbHVlCisvLyEgXHBhcmFtIGdhaW4KKy8vISAgICAgR2FpbiBhZGp1c3RtZW50IHZhbHVlIHByb3ZpZGVkIGJ5IFxyZWYgQVVYQURDR2V0QWRqdXN0bWVudEdhaW4oKQorLy8hIFxwYXJhbSBvZmZzZXQKKy8vISAgICAgT2Zmc2V0IGFkanVzdG1lbnQgdmFsdWUgcHJvdmlkZWQgYnkgXHJlZiBBVVhBRENHZXRBZGp1c3RtZW50T2Zmc2V0KCkKKy8vIQorLy8hIFxyZXR1cm4KKy8vISAgICAgMTItYml0IEFEQyBhZGp1c3RlZCB2YWx1ZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQzMl90IEFVWEFEQ0FkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldChpbnQzMl90IGFkY1ZhbHVlLCBpbnQzMl90IGdhaW4sIGludDMyX3Qgb2Zmc2V0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUGVyZm9ybXMgdGhlIGludmVyc2Ugb2YgdGhlIEFEQyB2YWx1ZSBnYWluIGFuZCBvZmZzZXQgYWRqdXN0bWVudC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIGV4cGVjdGVkIG1lYXN1cmVkIEFEQyB2YWx1ZSwgd2l0aG91dCBnYWluIGFuZAorLy8hIG9mZnNldCBjb21wZW5zYXRpb24sIGZvciBhIGdpdmVuICJpZGVhbCIgQURDIHZhbHVlLiBUaGUgZnVuY3Rpb24gY2FuIGZvcgorLy8hIGV4YW1wbGUgYmUgdXNlZCB0byBmaW5kIEFEQyB2YWx1ZSB0aHJlc2hvbGRzIHRvIGJlIHVzZWQgaW4gU2Vuc29yCisvLyEgQ29udHJvbGxlciB0YXNrIGNvbmZpZ3VyYXRpb25zLgorLy8hCisvLyEgXHBhcmFtIGFkY1ZhbHVlCisvLyEgICAgIDEyLWJpdCBBREMgYWRqdXN0ZWQgdmFsdWUKKy8vISBccGFyYW0gZ2FpbgorLy8hICAgICBHYWluIGFkanVzdG1lbnQgdmFsdWUgcHJvdmlkZWQgYnkgXHJlZiBBVVhBRENHZXRBZGp1c3RtZW50R2FpbigpCisvLyEgXHBhcmFtIG9mZnNldAorLy8hICAgICBPZmZzZXQgYWRqdXN0bWVudCB2YWx1ZSBwcm92aWRlZCBieSBccmVmIEFVWEFEQ0dldEFkanVzdG1lbnRPZmZzZXQoKQorLy8hCisvLyEgXHJldHVybgorLy8hICAgICAxMi1iaXQgQURDIHVuYWRqdXN0ZWQgdmFsdWUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gaW50MzJfdCBBVVhBRENVbmFkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldChpbnQzMl90IGFkY1ZhbHVlLCBpbnQzMl90IGdhaW4sIGludDMyX3Qgb2Zmc2V0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fQVVYQURDRGlzYWJsZQorICAgICAgICAjdW5kZWYgIEFVWEFEQ0Rpc2FibGUKKyAgICAgICAgI2RlZmluZSBBVVhBRENEaXNhYmxlICAgICAgICAgICAgICAgICAgIFJPTV9BVVhBRENEaXNhYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhBRENFbmFibGVBc3luYworICAgICAgICAjdW5kZWYgIEFVWEFEQ0VuYWJsZUFzeW5jCisgICAgICAgICNkZWZpbmUgQVVYQURDRW5hYmxlQXN5bmMgICAgICAgICAgICAgICBST01fQVVYQURDRW5hYmxlQXN5bmMKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWEFEQ0VuYWJsZVN5bmMKKyAgICAgICAgI3VuZGVmICBBVVhBRENFbmFibGVTeW5jCisgICAgICAgICNkZWZpbmUgQVVYQURDRW5hYmxlU3luYyAgICAgICAgICAgICAgICBST01fQVVYQURDRW5hYmxlU3luYworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYQURDRGlzYWJsZUlucHV0U2NhbGluZworICAgICAgICAjdW5kZWYgIEFVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcKKyAgICAgICAgI2RlZmluZSBBVVhBRENEaXNhYmxlSW5wdXRTY2FsaW5nICAgICAgIFJPTV9BVVhBRENEaXNhYmxlSW5wdXRTY2FsaW5nCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhBRENGbHVzaEZpZm8KKyAgICAgICAgI3VuZGVmICBBVVhBRENGbHVzaEZpZm8KKyAgICAgICAgI2RlZmluZSBBVVhBRENGbHVzaEZpZm8gICAgICAgICAgICAgICAgIFJPTV9BVVhBRENGbHVzaEZpZm8KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWEFEQ1JlYWRGaWZvCisgICAgICAgICN1bmRlZiAgQVVYQURDUmVhZEZpZm8KKyAgICAgICAgI2RlZmluZSBBVVhBRENSZWFkRmlmbyAgICAgICAgICAgICAgICAgIFJPTV9BVVhBRENSZWFkRmlmbworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYQURDUG9wRmlmbworICAgICAgICAjdW5kZWYgIEFVWEFEQ1BvcEZpZm8KKyAgICAgICAgI2RlZmluZSBBVVhBRENQb3BGaWZvICAgICAgICAgICAgICAgICAgIFJPTV9BVVhBRENQb3BGaWZvCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhBRENHZXRBZGp1c3RtZW50R2FpbgorICAgICAgICAjdW5kZWYgIEFVWEFEQ0dldEFkanVzdG1lbnRHYWluCisgICAgICAgICNkZWZpbmUgQVVYQURDR2V0QWRqdXN0bWVudEdhaW4gICAgICAgICBST01fQVVYQURDR2V0QWRqdXN0bWVudEdhaW4KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWEFEQ0dldEFkanVzdG1lbnRPZmZzZXQKKyAgICAgICAgI3VuZGVmICBBVVhBRENHZXRBZGp1c3RtZW50T2Zmc2V0CisgICAgICAgICNkZWZpbmUgQVVYQURDR2V0QWRqdXN0bWVudE9mZnNldCAgICAgICBST01fQVVYQURDR2V0QWRqdXN0bWVudE9mZnNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYQURDVmFsdWVUb01pY3Jvdm9sdHMKKyAgICAgICAgI3VuZGVmICBBVVhBRENWYWx1ZVRvTWljcm92b2x0cworICAgICAgICAjZGVmaW5lIEFVWEFEQ1ZhbHVlVG9NaWNyb3ZvbHRzICAgICAgICAgUk9NX0FVWEFEQ1ZhbHVlVG9NaWNyb3ZvbHRzCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhBRENNaWNyb3ZvbHRzVG9WYWx1ZQorICAgICAgICAjdW5kZWYgIEFVWEFEQ01pY3Jvdm9sdHNUb1ZhbHVlCisgICAgICAgICNkZWZpbmUgQVVYQURDTWljcm92b2x0c1RvVmFsdWUgICAgICAgICBST01fQVVYQURDTWljcm92b2x0c1RvVmFsdWUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWEFEQ0FkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldAorICAgICAgICAjdW5kZWYgIEFVWEFEQ0FkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldAorICAgICAgICAjZGVmaW5lIEFVWEFEQ0FkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldCBST01fQVVYQURDQWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhBRENVbmFkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldAorICAgICAgICAjdW5kZWYgIEFVWEFEQ1VuYWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0CisgICAgICAgICNkZWZpbmUgQVVYQURDVW5hZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQgUk9NX0FVWEFEQ1VuYWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0CisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0FVWF9BRENfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF9zbXBoLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfc21waC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYWYxNmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfc21waC5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhdXhfc21waC5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wMS0xMyAxNjo1OTo1NSArMDEwMCAoVHVlLCAxMyBKYW4gMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0MjM2NQorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIEFVWCBTZW1hcGhvcmUuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2F1eF9zbXBoLmg+CisKKy8vIFNlZSBhdXhfc21waC5oIGZvciBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3NtcGguaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF9zbXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiYzIxYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF9zbXBoLmgKQEAgLTAsMCArMSwyNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhdXhfc21waC5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wNy0xNiAxMjoxMjowNCArMDIwMCAoVGh1LCAxNiBKdWwgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NDE1MQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBBVVggU2VtYXBob3JlCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIGF1eF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgYXV4c21waF9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0FVWF9TTVBIX0hfXworI2RlZmluZSBfX0FVWF9TTVBIX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2F1eF9zbXBoLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gR2VuZXJhbCBjb25zdGFudHMgYW5kIGRlZmluZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFVWF9TTVBIX0ZSRUUgICAgIDB4MDAwMDAwMDEgLy8gTUNVIFNlbWFwaG9yZSBoYXMgbm90IGJlZW4gY2xhaW1lZAorI2RlZmluZSBBVVhfU01QSF9DTEFJTUVEICAweDAwMDAwMDAwIC8vIE1DVSBTZW1hcGhvcmUgaGFzIGJlZW4gY2xhaW1lZAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBBVVhTTVBIQWNxdWlyZSBhbmQgQVVYU01QSFJlbGVhc2UKKy8vIGFzIHRoZSB1aTMyU2VtYXBob3JlIHBhcmFtZXRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFVWF9TTVBIXzAgICAgICAgICAgICAgICAgMCAvLyBBVVggU2VtYXBob3JlICAwCisjZGVmaW5lIEFVWF9TTVBIXzEgICAgICAgICAgICAgICAgMSAvLyBBVVggU2VtYXBob3JlICAxCisjZGVmaW5lIEFVWF9TTVBIXzIgICAgICAgICAgICAgICAgMiAvLyBBVVggU2VtYXBob3JlICAyCisjZGVmaW5lIEFVWF9TTVBIXzMgICAgICAgICAgICAgICAgMyAvLyBBVVggU2VtYXBob3JlICAzCisjZGVmaW5lIEFVWF9TTVBIXzQgICAgICAgICAgICAgICAgNCAvLyBBVVggU2VtYXBob3JlICA0CisjZGVmaW5lIEFVWF9TTVBIXzUgICAgICAgICAgICAgICAgNSAvLyBBVVggU2VtYXBob3JlICA1CisjZGVmaW5lIEFVWF9TTVBIXzYgICAgICAgICAgICAgICAgNiAvLyBBVVggU2VtYXBob3JlICA2CisjZGVmaW5lIEFVWF9TTVBIXzcgICAgICAgICAgICAgICAgNyAvLyBBVVggU2VtYXBob3JlICA3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBBY3F1aXJlIGFuIEFVWCBzZW1hcGhvcmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGFjcXVpcmVzIHRoZSBnaXZlbiBBVVggc2VtYXBob3JlLCBibG9ja2luZyB0aGUgY2FsbCB1bnRpbAorLy8hIHRoZSBzZW1hcGhvcmUgaXMgYXZhaWxhYmxlLgorLy8hCisvLyEgXG5vdGUgVGhlIHNlbWFwaG9yZSBjYW4gYWxzbyBiZSBhY3F1aXJlZCBieSB0aGUgZGVkaWNhdGVkIFNlbnNvciBDb250cm9sbGVyLgorLy8hIFRoZSBTeXN0ZW0gQ1BVIG1hc3RlciBjYW4gdGh1cyBiZSBjb21wZXRpbmcgZm9yIHRoZSBzaGFyZWQgcmVzb3VyY2UsIGkuZS4KKy8vISB0aGUgc3BlY2lmaWVkIHNlbWFwaG9yZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyU2VtYXBob3JlIGlzIHRoZSBzZW1hcGhvcmUgbnVtYmVyLgorLy8hIC0gXHJlZiBBVVhfU01QSF8wCisvLyEgLSBccmVmIEFVWF9TTVBIXzEKKy8vISAtIFxyZWYgQVVYX1NNUEhfMgorLy8hIC0gXHJlZiBBVVhfU01QSF8zCisvLyEgLSBccmVmIEFVWF9TTVBIXzQKKy8vISAtIFxyZWYgQVVYX1NNUEhfNQorLy8hIC0gXHJlZiBBVVhfU01QSF82CisvLyEgLSBccmVmIEFVWF9TTVBIXzcKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFVWFNNUEhUcnlBY3F1aXJlKCksIEFVWFNNUEhSZWxlYXNlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQVVYU01QSEFjcXVpcmUodWludDMyX3QgdWkzMlNlbWFwaG9yZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJTZW1hcGhvcmUgPT0gQVVYX1NNUEhfMCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gQVVYX1NNUEhfMSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gQVVYX1NNUEhfMikgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gQVVYX1NNUEhfMykgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gQVVYX1NNUEhfNCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gQVVYX1NNUEhfNSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gQVVYX1NNUEhfNikgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gQVVYX1NNUEhfNykpOworCisgICAgLy8KKyAgICAvLyBXYWl0IGZvciBzZW1hcGhvcmUgdG8gYmUgcmVsZWFzZWQgc3VjaCB0aGF0IGl0IGNhbiBiZSBjbGFpbWVkCisgICAgLy8gU2VtYXBob3JlIHJlZ2lzdGVyIHJlYWRzIDEgd2hlbiBsb2NrIHdhcyBhY3F1aXJlZCBvdGhlcndpc2UgMAorICAgIC8vIChpLmUuIEFVWF9TTVBIX0NMQUlNRUQpLgorICAgIC8vCisgICAgd2hpbGUoSFdSRUcoQVVYX1NNUEhfQkFTRSArIEFVWF9TTVBIX09fU01QSDAgKyA0ICogdWkzMlNlbWFwaG9yZSkgPT0KKyAgICAgICAgICAgIEFVWF9TTVBIX0NMQUlNRUQpCisgICAgeworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVHJ5IHRvIGFjcXVpcmUgYW4gQVVYIHNlbWFwaG9yZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gYWNxdWlyZSB0aGUgZ2l2ZW4gQVVYIHNlbWFwaG9yZSwgaWYgdGhlIHNlbWFwaG9yZQorLy8hIGNvdWxkIG5vdCBiZSBjbGFpbWVkIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLgorLy8hCisvLyEgXG5vdGUgVGhlIHNlbWFwaG9yZSBjYW4gYWxzbyBiZSBhY3F1aXJlZCBieSB0aGUgZGVkaWNhdGVkIFNlbnNvciBDb250cm9sbGVyLgorLy8hIFRoZSBTeXN0ZW0gQ1BVIG1hc3RlciBjYW4gdGh1cyBiZSBjb21wZXRpbmcgZm9yIHRoZSBzaGFyZWQgcmVzb3VyY2UsIGkuZS4KKy8vISB0aGUgc3BlY2lmaWVkIHNlbWFwaG9yZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyU2VtYXBob3JlIGlzIHRoZSBzZW1hcGhvcmUgbnVtYmVyLgorLy8hIC0gXHJlZiBBVVhfU01QSF8wCisvLyEgLSBccmVmIEFVWF9TTVBIXzEKKy8vISAtIFxyZWYgQVVYX1NNUEhfMgorLy8hIC0gXHJlZiBBVVhfU01QSF8zCisvLyEgLSBccmVmIEFVWF9TTVBIXzQKKy8vISAtIFxyZWYgQVVYX1NNUEhfNQorLy8hIC0gXHJlZiBBVVhfU01QSF82CisvLyEgLSBccmVmIEFVWF9TTVBIXzcKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0cnVlIGlmIHNlbWFwaG9yZSB3YXMgYWNxdWlyZWQsIGZhbHNlIG90aGVyd2lzZQorLy8hCisvLyEgXHNhIEFVWFNNUEhBY3F1aXJlKCksIEFVWFNNUEhSZWxlYXNlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQVVYU01QSFRyeUFjcXVpcmUodWludDMyX3QgdWkzMlNlbWFwaG9yZSkKK3sKKyAgICB1aW50MzJfdCB1aTMyU2VtYVJlZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8wKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8xKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8yKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8zKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF80KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF81KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF82KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF83KSk7CisKKyAgICAvLworICAgIC8vIEFVWCBTZW1hcGhvcmUgcmVnaXN0ZXIgcmVhZHMgMSBpZiBsb2NrIHdhcyBhY3F1aXJlZAorICAgIC8vIChpLmUuIFNNUEhfRlJFRSB3aGVuIHJlYWQpIGJ1dCBzdWJzZXF1ZW50IHJlYWRzIHdpbGwgcmVhZCAwLgorICAgIC8vCisgICAgdWkzMlNlbWFSZWcgPSBIV1JFRyhBVVhfU01QSF9CQVNFICsgQVVYX1NNUEhfT19TTVBIMCArIDQgKiB1aTMyU2VtYXBob3JlKTsKKworICAgIHJldHVybiAodWkzMlNlbWFSZWcgPT0gQVVYX1NNUEhfRlJFRSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlbGVhc2UgYW4gQVVYIHNlbWFwaG9yZSBieSBTeXN0ZW0gQ1BVIG1hc3Rlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgdGhlIGdpdmVuIEFVWCBzZW1hcGhvcmUuCisvLyEKKy8vISBcbm90ZSBJdCBpcyB1cCB0byB0aGUgYXBwbGljYXRpb24gdG8gcHJvdmlkZSB0aGUgY29udmVudGlvbiBmb3IgY2xlYXJpbmcKKy8vISBzZW1hcGhvcmUuCisvLyEKKy8vISBcbm90ZSBUaGUgc2VtYXBob3JlIGNhbiBhbHNvIGJlIGFjcXVpcmVkIGJ5IHRoZSBkZWRpY2F0ZWQgU2Vuc29yIENvbnRyb2xsZXIuCisvLyEgVGhlIFN5c3RlbSBDUFUgbWFzdGVyIGNhbiB0aHVzIGJlIGNvbXBldGluZyBmb3IgdGhlIHNoYXJlZCByZXNvdXJjZSwgaS5lLgorLy8hIHRoZSBzcGVjaWZpZWQgc2VtYXBob3JlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJTZW1hcGhvcmUgaXMgdGhlIHNlbWFwaG9yZSBudW1iZXIuCisvLyEgLSBccmVmIEFVWF9TTVBIXzAKKy8vISAtIFxyZWYgQVVYX1NNUEhfMQorLy8hIC0gXHJlZiBBVVhfU01QSF8yCisvLyEgLSBccmVmIEFVWF9TTVBIXzMKKy8vISAtIFxyZWYgQVVYX1NNUEhfNAorLy8hIC0gXHJlZiBBVVhfU01QSF81CisvLyEgLSBccmVmIEFVWF9TTVBIXzYKKy8vISAtIFxyZWYgQVVYX1NNUEhfNworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQVVYU01QSEFjcXVpcmUoKSwgQVVYU01QSFRyeUFjcXVpcmUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBVVhTTVBIUmVsZWFzZSh1aW50MzJfdCB1aTMyU2VtYXBob3JlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8wKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8xKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8yKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8zKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF80KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF81KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF82KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF83KSk7CisKKyAgICAvLworICAgIC8vIE5vIGNoZWNrIGJlZm9yZSByZWxlYXNlLiBJdCBpcyB1cCB0byB0aGUgYXBwbGljYXRpb24gdG8gcHJvdmlkZSB0aGUKKyAgICAvLyBjb252ZW50aW9ucyBmb3Igd2hvIGFuZCB3aGVuIGEgc2VtYXBob3JlIGNhbiBiZSByZWxlYXNlZC4KKyAgICAvLworICAgIEhXUkVHKEFVWF9TTVBIX0JBU0UgKyBBVVhfU01QSF9PX1NNUEgwICsgNCAqIHVpMzJTZW1hcGhvcmUpID0KKyAgICAgICAgQVVYX1NNUEhfRlJFRTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0FVWF9TTVBIX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfdGRjLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfdGRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyZDc0NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF90ZGMuYwpAQCAtMCwwICsxLDEyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGF1eF90ZGMuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDEtMTMgMTY6NTk6NTUgKzAxMDAgKFR1ZSwgMTMgSmFuIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDIzNjUKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBBVVggVGltZSB0byBEaWdpdGFsIENvbnZlcnRlciBpbnRlcmZhY2UuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2F1eF90ZGMuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIEFVWFREQ0NvbmZpZ1NldAorICAgICNkZWZpbmUgQVVYVERDQ29uZmlnU2V0ICAgICAgICAgICAgICAgICBOT1JPTV9BVVhURENDb25maWdTZXQKKyAgICAjdW5kZWYgIEFVWFREQ01lYXN1cmVtZW50RG9uZQorICAgICNkZWZpbmUgQVVYVERDTWVhc3VyZW1lbnREb25lICAgICAgICAgICBOT1JPTV9BVVhURENNZWFzdXJlbWVudERvbmUKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENvbmZpZ3VyZSB0aGUgb3BlcmF0aW9uIG9mIHRoZSBBVVggVERDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQVVYVERDQ29uZmlnU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyU3RhcnRDb25kaXRpb24sCisgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlN0b3BDb25kaXRpb24pCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFVWFREQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBNYWtlIHN1cmUgdGhlIEFVWCBUREMgaXMgaW4gdGhlIGlkbGUgc3RhdGUgYmVmb3JlIGNoYW5naW5nIHRoZQorICAgIC8vIGNvbmZpZ3VyYXRpb24uCisgICAgLy8KKyAgICB3aGlsZSghKChIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19TVEFUKSAmIEFVWF9URENfU1RBVF9TVEFURV9NKSA9PQorICAgICAgICAgICAgQVVYX1REQ19TVEFUX1NUQVRFX0lETEUpKQorICAgIHsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENsZWFyIHByZXZpb3VzIHJlc3VsdHMuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19DVEwpID0gMHgwOworCisgICAgLy8KKyAgICAvLyBDaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24uCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19UUklHU1JDKSA9IHVpMzJTdGFydENvbmRpdGlvbiB8IHVpMzJTdG9wQ29uZGl0aW9uOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENoZWNrIGlmIHRoZSBBVVggVERDIGlzIGRvbmUgbWVhc3VyaW5nCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0FVWFREQ01lYXN1cmVtZW50RG9uZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnOworICAgIHVpbnQzMl90IHVpMzJTdGF0dXM7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQVVYVERDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIENoZWNrIGlmIHRoZSBBVVggVERDIGlzIGRvbmUgbWVhc3VyaW5nLgorICAgIC8vCisgICAgdWkzMlJlZyA9IEhXUkVHKHVpMzJCYXNlICsgQVVYX1REQ19PX1NUQVQpOworICAgIGlmKHVpMzJSZWcgJiBBVVhfVERDX1NUQVRfRE9ORSkKKyAgICB7CisgICAgICAgIHVpMzJTdGF0dXMgPSBBVVhfVERDX0RPTkU7CisgICAgfQorICAgIGVsc2UgaWYodWkzMlJlZyAmIEFVWF9URENfU1RBVF9TQVQpCisgICAgeworICAgICAgICB1aTMyU3RhdHVzID0gQVVYX1REQ19USU1FT1VUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aTMyU3RhdHVzID0gQVVYX1REQ19CVVNZOworICAgIH0KKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBzdGF0dXMuCisgICAgLy8KKyAgICByZXR1cm4gKHVpMzJTdGF0dXMpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3RkYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3RkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYTQ3YTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfdGRjLmgKQEAgLTAsMCArMSw4MzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhdXhfdGRjLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTExLTAzIDA5OjU0OjQ3ICswMTAwIChUdWUsIDAzIE5vdiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0OTMzCisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEFVWCBUaW1lLXRvLURpZ2l0YWwgQ29udmVydGVyCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIGF1eF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgYXV4dGRjX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQVVYX1REQ19IX18KKyNkZWZpbmUgX19BVVhfVERDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2F1eF90ZGMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgQVVYVERDQ29uZmlnU2V0ICAgICAgICAgICAgICAgICBOT1JPTV9BVVhURENDb25maWdTZXQKKyAgICAjZGVmaW5lIEFVWFREQ01lYXN1cmVtZW50RG9uZSAgICAgICAgICAgTk9ST01fQVVYVERDTWVhc3VyZW1lbnREb25lCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBzdGF0dXMgb2YgYSBBVVggVERDIG1lYXN1cmVtZW50LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYX1REQ19CVVNZICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVERDX1RJTUVPVVQgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9URENfRE9ORSAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBjb250cm9sIG9mIGEgQVVYIFREQy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFVWF9URENfUlVOU1lOQyAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1REQ19SVU4gICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfVERDX0FCT1JUICAgICAgICAgICAweDAwMDAwMDAzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciBwb3NzaWJsZSBzdGF0ZXMgb2YgdGhlIFREQyBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYVERDX1dBSVRfU1RBUlQgICAgICAgICAoQVVYX1REQ19TVEFUX1NUQVRFX1dBSVRfU1RBUlQpCisjZGVmaW5lIEFVWFREQ19XQUlUX1NUQVJUX0NOVEVOICAgKEFVWF9URENfU1RBVF9TVEFURV9XQUlUX1NUQVJUX1NUT1BfQ05UX0VOKQorI2RlZmluZSBBVVhURENfSURMRSAgICAgICAgICAgICAgIChBVVhfVERDX1NUQVRfU1RBVEVfSURMRSkKKyNkZWZpbmUgQVVYVERDX0NMUkNOVCAgICAgICAgICAgICAoQVVYX1REQ19TVEFUX1NUQVRFX0NMUl9DTlQpCisjZGVmaW5lIEFVWFREQ19XQUlUX1NUT1AgICAgICAgICAgKEFVWF9URENfU1RBVF9TVEFURV9XQUlUX1NUT1ApCisjZGVmaW5lIEFVWFREQ19XQUlUX1NUT1BfQ05URE9XTiAgKEFVWF9URENfU1RBVF9TVEFURV9XQUlUX1NUT1BfQ05URFdOKQorI2RlZmluZSBBVVhURENfR0VUUkVTVUxUUyAgICAgICAgIChBVVhfVERDX1NUQVRfU1RBVEVfR0VUX1JFU1VMVCkKKyNkZWZpbmUgQVVYVERDX1BPUiAgICAgICAgICAgICAgICAoQVVYX1REQ19TVEFUX1NUQVRFX1BPUikKKyNkZWZpbmUgQVVYVERDX1dBSVRfQ0xSQ05UX0RPTkUgICAoQVVYX1REQ19TVEFUX1NUQVRFX1dBSVRfQ0xSX0NOVF9ET05FKQorI2RlZmluZSBBVVhURENfU1RBUlRfRkFMTCAgICAgICAgIChBVVhfVERDX1NUQVRfU1RBVEVfU1RBUlRfRkFMTCkKKyNkZWZpbmUgQVVYVERDX0ZPUkNFX1NUT1AgICAgICAgICAoQVVYX1REQ19TVEFUX1NUQVRFX0ZPUkNFX1NUT1ApCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciBjb250cm9sbGluZyB0aGUgQVVYIFREQy4gVmFsdWVzIGNhbiBiZSBwYXNzZWQgdG8gQVVYVERDQ29uZmlnU2V0KCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhURENfU1RPUFBPTF9SSVMgICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1BPTF9ISUdIKSAvLyBSaXNpbmcgZWRnZSBwb2xhcml0eSBmb3Igc3RvcCBldmVudAorI2RlZmluZSBBVVhURENfU1RPUFBPTF9GQUxMICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1BPTF9MT1cpICAvLyBGYWxsaW5nIGVkZ2UgcG9sYXJpdHkgZm9yIHN0b3AgZXZlbnQKKworI2RlZmluZSBBVVhURENfU1RPUF9BT05fUlRDX0NIMiAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BT05fUlRDX0NIMikKKyNkZWZpbmUgQVVYVERDX1NUT1BfQVVYX0NPTVBBICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYX0NPTVBBKQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhfQ09NUEIgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhfQ09NUEIpCisjZGVmaW5lIEFVWFREQ19TVE9QX0lTUkNfUkVTRVQgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0lTUkNfUkVTRVQpCisjZGVmaW5lIEFVWFREQ19TVE9QX1RJTUVSMF9FViAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX1RJTUVSMF9FVikKKyNkZWZpbmUgQVVYVERDX1NUT1BfVElNRVIxX0VWICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfVElNRVIxX0VWKQorI2RlZmluZSBBVVhURENfU1RPUF9TTVBIX0FVVE9UQUtFX0RPTkUgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19TTVBIX0FVVE9UQUtFX0RPTkUpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FEQ19ET05FICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FEQ19ET05FKQorI2RlZmluZSBBVVhURENfU1RPUF9BRENfRklGT19BTE1PU1RfRlVMTCAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BRENfRklGT19BTE1PU1RfRlVMTCkKKyNkZWZpbmUgQVVYVERDX1NUT1BfT0JTTVVYMCAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfT0JTTVVYMCkKKyNkZWZpbmUgQVVYVERDX1NUT1BfT0JTTVVYMSAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfT0JTTVVYMSkKKyNkZWZpbmUgQVVYVERDX1NUT1BfQU9OX1NXICAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQU9OX1NXKQorI2RlZmluZSBBVVhURENfU1RPUF9BT05fUFJPR19XVSAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BT05fUFJPR19XVSkKKyNkZWZpbmUgQVVYVERDX1NUT1BfQVVYSU8wICAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU8wKQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzEgICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzEpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPMiAgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMikKKyNkZWZpbmUgQVVYVERDX1NUT1BfQVVYSU8zICAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU8zKQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzQgICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzQpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPNSAgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPNSkKKyNkZWZpbmUgQVVYVERDX1NUT1BfQVVYSU82ICAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU82KQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzcgICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzcpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPOCAgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPOCkKKyNkZWZpbmUgQVVYVERDX1NUT1BfQVVYSU85ICAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU85KQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzEwICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzEwKQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzExICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzExKQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzEyICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzEyKQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzEzICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzEzKQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzE0ICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzE0KQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzE1ICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzE1KQorI2RlZmluZSBBVVhURENfU1RPUF9BQ0xLX1JFRiAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BQ0xLX1JFRikKKyNkZWZpbmUgQVVYVERDX1NUT1BfTUNVX0VWICAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfTUNVX0VWKQorI2RlZmluZSBBVVhURENfU1RPUF9URENfUFJFICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19URENfUFJFKQorCisjZGVmaW5lIEFVWFREQ19TVEFSVFBPTF9SSVMgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1BPTF9ISUdIKSAvLyBSaXNpbmcgZWRnZSBwb2xhcml0eSBmb3Igc3RhcnQgZXZlbnQKKyNkZWZpbmUgQVVYVERDX1NUQVJUUE9MX0ZBTEwgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfUE9MX0xPVykgIC8vIEZhbGxpbmcgZWRnZSBwb2xhcml0eSBmb3Igc3RhcnQgZXZlbnQKKworI2RlZmluZSBBVVhURENfU1RBUlRfQU9OX1JUQ19DSDIgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQU9OX1JUQ19DSDIpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhfQ09NUEEgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhfQ09NUEEpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhfQ09NUEIgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhfQ09NUEIpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9JU1JDX1JFU0VUICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19JU1JDX1JFU0VUKQorI2RlZmluZSBBVVhURENfU1RBUlRfVElNRVIwX0VWICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfVElNRVIwX0VWKQorI2RlZmluZSBBVVhURENfU1RBUlRfVElNRVIxX0VWICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfVElNRVIxX0VWKQorI2RlZmluZSBBVVhURENfU1RBUlRfU01QSF9BVVRPVEFLRV9ET05FICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfU01QSF9BVVRPVEFLRV9ET05FKQorI2RlZmluZSBBVVhURENfU1RBUlRfQURDX0RPTkUgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQURDX0RPTkUpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BRENfRklGT19BTE1PU1RfRlVMTCAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BRENfRklGT19BTE1PU1RfRlVMTCkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX09CU01VWDAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX09CU01VWDApCisjZGVmaW5lIEFVWFREQ19TVEFSVF9PQlNNVVgxICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19PQlNNVVgxKQorI2RlZmluZSBBVVhURENfU1RBUlRfQU9OX1NXICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQU9OX1NXKQorI2RlZmluZSBBVVhURENfU1RBUlRfQU9OX1BST0dfV1UgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQU9OX1BST0dfV1UpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzAgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzApCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzEgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzEpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzIgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzIpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzMgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzMpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzQgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzQpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzUgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzUpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzYgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzYpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzcgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzcpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzggICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzgpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzkgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzkpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzEwICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzEwKQorI2RlZmluZSBBVVhURENfU1RBUlRfQVVYSU8xMSAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU8xMSkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPMTIgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMTIpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzEzICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzEzKQorI2RlZmluZSBBVVhURENfU1RBUlRfQVVYSU8xNCAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU8xNCkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPMTUgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMTUpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BQ0xLX1JFRiAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BQ0xLX1JFRikKKyNkZWZpbmUgQVVYVERDX1NUQVJUX01DVV9FViAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX01DVV9FVikKKyNkZWZpbmUgQVVYVERDX1NUQVJUX1REQ19QUkUgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX1REQ19QUkUpCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgcG9zc2libGUgc2F0dXJhdGlvbiB2YWx1ZXMgc2V0IHVzaW5nIEFVWFREQ0xpbWl0U2V0KCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhURENfU0FUXzQwOTYgICAgICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjEyKQorI2RlZmluZSBBVVhURENfU0FUXzgxOTIgICAgICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjEzKQorI2RlZmluZSBBVVhURENfU0FUXzE2Mzg0ICAgICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjE0KQorI2RlZmluZSBBVVhURENfU0FUXzMyNzY4ICAgICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjE1KQorI2RlZmluZSBBVVhURENfU0FUXzY1NTM2ICAgICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjE2KQorI2RlZmluZSBBVVhURENfU0FUXzEzMTA3MiAgICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjE3KQorI2RlZmluZSBBVVhURENfU0FUXzI2MjE0NCAgICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjE4KQorI2RlZmluZSBBVVhURENfU0FUXzUyNDI4OCAgICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjE5KQorI2RlZmluZSBBVVhURENfU0FUXzEwNDg1NzYgICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjIwKQorI2RlZmluZSBBVVhURENfU0FUXzIwOTcxNTIgICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjIxKQorI2RlZmluZSBBVVhURENfU0FUXzQxOTQzMDQgICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjIyKQorI2RlZmluZSBBVVhURENfU0FUXzgzODg2MDggICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjIzKQorI2RlZmluZSBBVVhURENfU0FUXzE2Nzc3MjE2ICAgICAoQVVYX1REQ19TQVRDRkdfTElNSVRfUjI0KQorI2RlZmluZSBBVVhURENfTlVNX1NBVF9WQUxTICAgICAxNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmZGVmIERSSVZFUkxJQl9ERUJVRworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcaW50ZXJuYWwKKy8vISBcYnJpZWYgQ2hlY2tzIGFuIEFVWCBUREMgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGEgQVVYIFREQyBwb3J0IGJhc2UgYWRkcmVzcyBpcyB2YWxpZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGUgYmFzZSBhZGRyZXNzIGlzIHZhbGlkIGFuZCBcYyBmYWxzZQorLy8hIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgYm9vbAorQVVYVERDQmFzZVZhbGlkKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIHJldHVybih1aTMyQmFzZSA9PSBBVVhfVERDX0JBU0UpOworfQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgc3RhdHVzIG9mIHRoZSBBVVggVERDIGludGVybmFsIHN0YXRlIG1hY2hpbmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBBVVggVERDIGludGVybmFsIHN0YXRlCisvLyEgbWFjaGluZS4KKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHN0YXRlIG1hY2hpbmUuCisvLyEgUG9zc2libGUgc3RhdGVzIGZvciB0aGUgc3RhdGUgbWFjaGluZSBhcmU6CisvLyEgLSBccmVmIEFVWFREQ19XQUlUX1NUQVJUCisvLyEgLSBccmVmIEFVWFREQ19XQUlUX1NUQVJUX0NOVEVOCisvLyEgLSBccmVmIEFVWFREQ19JRExFCisvLyEgLSBccmVmIEFVWFREQ19DTFJDTlQKKy8vISAtIFxyZWYgQVVYVERDX1dBSVRfU1RPUAorLy8hIC0gXHJlZiBBVVhURENfV0FJVF9TVE9QX0NOVERPV04KKy8vISAtIFxyZWYgQVVYVERDX0dFVFJFU1VMVFMKKy8vISAtIFxyZWYgQVVYVERDX1BPUgorLy8hIC0gXHJlZiBBVVhURENfV0FJVF9DTFJDTlRfRE9ORQorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfRkFMTAorLy8hIC0gXHJlZiBBVVhURENfRk9SQ0VfU1RPUC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FVWFREQ1N0YXR1c0dldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQVVYVERDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgc3RhdHVzIHZhbHVlIGZvciB0aGUgY29ycmVjdCBBREkgU2xhdmUuCisgICAgLy8KKyAgICByZXR1cm4oKEhXUkVHKHVpMzJCYXNlICsgQVVYX1REQ19PX1NUQVQpICYgQVVYX1REQ19TVEFUX1NUQVRFX00pID4+CisgICAgICAgICAgIEFVWF9URENfU1RBVF9TVEFURV9TKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSBvcGVyYXRpb24gb2YgdGhlIEFVWCBUREMuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBjb25maWd1cmUgdGhlIHN0YXJ0IGFuZCBzdG9wIGV2ZW50IGZvciB0aGUgQVVYIFREQy4KKy8vIQorLy8hIFRoZSBcYyB1aTMyU3RhcnRDb25kaXRpb24gbXVzdCBiZSBhIGJpdHdpc2UgT1Igb2YgdGhlIHN0YXJ0IGV2ZW50IGFuZCB0aGUKKy8vISBwb2xhcml0eSBvZiB0aGUgc3RhcnQgZXZlbnQuIFRoZSBzdGFydCBldmVudHMgYXJlOgorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQU9OX1JUQ19DSDIKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX0FVWF9DT01QQQorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYX0NPTVBCCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9JU1JDX1JFU0VUCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9USU1FUjBfRVYKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX1RJTUVSMV9FVgorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfU01QSF9BVVRPVEFLRV9ET05FCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BRENfRE9ORQorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX09CU01VWDAKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX09CU01VWDEKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX0FPTl9TVworLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQU9OX1BST0dfV1UKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX0FVWElPMAorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU8xCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzIKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX0FVWElPMworLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU80CisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzUKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX0FVWElPNgorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU83CisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzgKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX0FVWElPOQorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU8xMAorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU8xMQorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU8xMgorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU8xMworLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU8xNAorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU8xNQorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQUNMS19SRUYKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX01DVV9FVgorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfVERDX1BSRQorLy8hCisvLyEgVGhlIHBvbGFyaXR5IG9mIHRoZSBzdGFydCBldmVudCBpcyBlaXRoZXIgcmlzaW5nIFxyZWYgQVVYVERDX1NUQVJUUE9MX1JJUworLy8hIG9yIGZhbGxpbmcgXHJlZiBBVVhURENfU1RBUlRQT0xfRkFMTC4KKy8vIQorLy8hIFRoZSBcYyB1aTMyU3RvcENvbmRpdGlvbiBtdXN0IGJlIGEgYml0d2lzZSBPUiBvZiB0aGUgc3RvcCBldmVudCBhbmQgdGhlCisvLyEgcG9sYXJpdHkgb2YgdGhlIHN0b3AgZXZlbnQuIFRoZSBzdG9wIGV2ZW50cyBhcmU6CisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FPTl9SVENfQ0gyCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWF9DT01QQQorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BVVhfQ09NUEIKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfSVNSQ19SRVNFVAorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9USU1FUjBfRVYKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfVElNRVIxX0VWCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX1NNUEhfQVVUT1RBS0VfRE9ORQorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BRENfRE9ORQorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BRENfRklGT19BTE1PU1RfRlVMTAorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9PQlNNVVgwCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX09CU01VWDEKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQU9OX1NXCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FPTl9QUk9HX1dVCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWElPMAorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BVVhJTzEKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYSU8yCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWElPMworLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BVVhJTzQKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYSU81CisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWElPNgorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BVVhJTzcKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYSU84CisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWElPOQorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BVVhJTzEwCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWElPMTEKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYSU8xMgorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BVVhJTzEzCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWElPMTQKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYSU8xNQorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BQ0xLX1JFRgorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9NQ1VfRVYKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfVERDX1BSRQorLy8hCisvLyEgVGhlIHBvbGFyaXR5IG9mIHRoZSBzdG9wIGV2ZW50IGlzIGVpdGhlciByaXNpbmcgXHJlZiBBVVhURENfU1RPUFBPTF9SSVMKKy8vISBvciBmYWxsaW5nIFxyZWYgQVVYVERDX1NUT1BQT0xfRkFMTC4KKy8vIQorLy8hIFxub3RlIFRoZSBBVVggVERDIHNob3VsZCBvbmx5IGJlIGNvbmZpZ3VyZWQgd2hlbiB0aGUgQVVYIFREQyBpcyBpbiB0aGUgSWRsZQorLy8hIHN0YXRlLiBUbyBlbnN1cmUgdGhhdCBzb2Z0d2FyZSBkb2VzIG5vdCBsb2NrIHVwLCBpdCBpcyByZWNvbW1lbmRlZCB0bworLy8hIGVuc3VyZSB0aGF0IHRoZSBBVVggVERDIGlzIGFjdHVhbGx5IGluIGlkbGUgd2hlbiBjYWxsaW5nIFxyZWYgQVVYVERDQ29uZmlnU2V0KCkuCisvLyEgVGhpcyBjYW4gYmUgdGVzdGVkIHVzaW5nIFxyZWYgQVVYVERDSWRsZSgpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIGJhc2UgYWRkcmVzcyBvZiB0aGUgQVVYIFREQy4KKy8vISBccGFyYW0gdWkzMlN0YXJ0Q29uZGl0aW9uIGlzIEFVWCBUREMgYSBiaXR3aXNlIE9SIG9mIGEgc3RhcnQgZXZlbnQgYW5kIHBvbGFyaXR5LgorLy8hIFxwYXJhbSB1aTMyU3RvcENvbmRpdGlvbiBpcyBBVVggVERDIGEgYml0d2lzZSBPUiBvZiBhIHN0b3AgZXZlbnQgYW5kIHBvbGFyaXR5LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBBVVhURENDb25maWdTZXQoKSwgXHJlZiBBVVhURENJZGxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBVVhURENDb25maWdTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJTdGFydENvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyU3RvcENvbmRpdGlvbik7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENoZWNrIGlmIHRoZSBBVVggVERDIGlzIGluIGlkbGUgbW9kZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgQVVYIFREQyBpbnRlcm5hbCBzdGF0ZQorLy8hIG1hY2hpbmUgaXMgaW4gaWRsZSBtb2RlLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSBzZXR0aW5nIHRoZSBwb2xhcml0eQorLy8hIG9mIHRoZSBzdGFydCBhbmQgc3RvcCBldmVudC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIFxjIHRydWUgaWYgc3RhdGUgbWFjaGluZSBpcyBpbiBpZGxlIGFuZCByZXR1cm5zIFxjIGZhbHNlCisvLyEgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgaW4gYW55IG90aGVyIHN0YXRlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitBVVhURENJZGxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBVVhURENCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgdGhlIEFVWCBUREMgaXMgaW4gdGhlIElkbGUgc3RhdGUuCisgICAgLy8KKyAgICByZXR1cm4gKCgoSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fU1RBVCkgJiBBVVhfVERDX1NUQVRfU1RBVEVfTSkgPT0KKyAgICAgICAgICAgICBBVVhfVERDX1NUQVRfU1RBVEVfSURMRSkgPyB0cnVlIDogZmFsc2UpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgdGhlIEFVWCBUREMgZm9yIGEgbWVhc3VyZW1lbnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGFybWluZyB0aGUgQVVYIFREQyB0byBiZWdpbiBhIG1lYXN1cmVtZW50IGFzCisvLyEgc29vbiBhcyB0aGUgc3RhcnQgY29uZGl0aW9uIGlzIG1ldC4gVGhlcmUgYXJlIHR3byBydW4gbW9kZXM6CisvLyEgLSBccmVmIEFVWF9URENfUlVOU1lOQyB3aWxsIHdhaXQgZm9yIGEgZmFsbGluZyBldmVudCBvZiB0aGUgc3RhcnQgcHVsc2UgYmVmb3JlCisvLyEgICBzdGFydGluZyBtZWFzdXJlbWVudCBvbiBuZXh0IHJpc2luZyBlZGdlIG9mIHN0YXJ0LiBUaGlzIGd1YXJhbnRlZXMgYW4gZWRnZQorLy8hICAgdHJpZ2dlcmVkIHN0YXJ0IGFuZCBpcyByZWNvbW1lbmRlZCBmb3IgZnJlcXVlbmN5IG1lYXN1cmVtZW50cy4gSWYgdGhlCisvLyEgICBmaXJzdCBmYWxsaW5nIGVkZ2UgaXMgY2xvc2UgdG8gdGhlIHN0YXJ0IGNvbW1hbmQgaXQgbWF5IGJlIG1pc3NlZCwgYnV0CisvLyEgICB0aGUgVERDIHNoYWxsIGNhdGNoIGxhdGVyIGZhbGxpbmcgZWRnZXMgYW5kIGluIGFueSBjYXNlIGd1YXJhbnRlZSBhCisvLyEgICBtZWFzdXJlbWVudCBzdGFydCBzeW5jaHJvbm91cyB0byB0aGUgcmlzaW5nIGVkZ2Ugb2YgdGhlIHN0YXJ0IGV2ZW50LgorLy8hIC0gVGhlIFxyZWYgQVVYX1REQ19SVU4gaXMgYXN5bmNocm9ub3VzIHN0YXJ0IGFuZCBhc3luY2hyb25vdXMgc3RvcCBtb2RlLiBVc2luZworLy8hICAgdGhpcyBhIFREQyBtZWFzdXJlbWVudCBtYXkgc3RhcnQgaW1tZWRpYXRlbHkgaWYgc3RhcnQgaXMgaGlnaCBhbmQgaGVuY2UgaXQKKy8vISAgIG1heSBub3QgZ2l2ZSBwcmVjaXNlIGVkZ2UgdG8gZWRnZSBtZWFzdXJlbWVudHMuIFRoaXMgbW9kZSBpcyBvbmx5CisvLyEgICByZWNvbW1lbmRlZCB3aGVuIHN0YXJ0IHB1bHNlIGlzIGd1YXJhbnRlZWQgdG8gYXJyaXZlIGF0IGxlYXN0IDcgY2xvY2sKKy8vISAgIHBlcmlvZHMgYWZ0ZXIgY29tbWFuZC4KKy8vIQorLy8hIFxub3RlIFRoZSBBVVggVERDIHNob3VsZCBiZSBjb25maWd1cmVkIGFuZCBpbiBJZGxlIG1vZGUgYmVmb3JlIGNhbGxpbmcgdGhpcworLy8hIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFVWCBUREMuCisvLyEgXHBhcmFtIHVpMzJSdW5Nb2RlIGlzIHRoZSBydW4gbW9kZSBmb3IgdGhlIEFVWCBUREMuCisvLyEgLSBccmVmIEFVWF9URENfUlVOU1lOQyA6IFN5bmNocm9ub3VzIHJ1biBtb2RlLgorLy8hIC0gXHJlZiBBVVhfVERDX1JVTiA6IEFzeW5jaHJvbm91cyBydW4gbW9kZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBVVhURENFbmFibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSdW5Nb2RlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBVVhURENCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJSdW5Nb2RlID09IEFVWF9URENfUlVOKSB8fAorICAgICAgICAgICAodWkzMlJ1bk1vZGUgPT0gQVVYX1REQ19SVU5TWU5DKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgQVVYIFREQy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgQVVYX1REQ19PX0NUTCkgPSB1aTMyUnVuTW9kZTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRm9yY2UgdGhlIEFVWCBUREMgYmFjayB0byBJZGxlIG1vZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgZm9yY2UgdGhlIEFVWCBUREMgaW4gSWRsZSBtb2RlLiBUaGUgaW50ZXJuYWwgc3RhdGUKKy8vISBtYWNoaW5lIHdpbGwgbm90IGdvIGRpcmVjdGx5IHRvIElkbGUgbW9kZSwgc28gaXQgaXMgbGVmdCB0byB0aGUgcHJvZ3JhbW1lciB0bworLy8hIGVuc3VyZSB0aGF0IHRoZSBzdGF0ZSBtYWNoaW5lIGlzIGluIElkbGUgbW9kZSBiZWZvcmUgZG9pbmcgYW55IG5ldworLy8hIGNvbmZpZ3VyYXRpb24uIFRoaXMgY2FuIGJlIGNoZWNrZWQgdXNpbmcgXHJlZiBBVVhURENJZGxlKCkuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgQVVYIFREQy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgQVVYVERDSWRsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FVWFREQ0lkbGVGb3JjZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMKKyAgICAvLworICAgIEFTU0VSVChBVVhURENCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQWJvcnQgb3BlcmF0aW9uIG9mIEFVWCBUREMgYW5kIGZvcmNlIGludG8gSWRsZSBtb2RlLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fQ1RMKSA9IEFVWF9URENfQ1RMX0NNRF9BQk9SVDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2sgaWYgdGhlIEFVWCBUREMgaXMgZG9uZSBtZWFzdXJpbmcuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIEFVWCBUREMgaGFzIGZpbmlzaGVkIGEKKy8vISBtZWFzdXJlbWVudC4gVGhlIEFVWCBUREMgbWF5IGhhdmUgY29tcGxldGVkIGEgbWVhc3VyZW1lbnQgZm9yIHR3byByZWFzb25zLgorLy8hIEVpdGhlciBpdCBmaW5pc2ggc3VjY2Vzc2Z1bGx5IFxyZWYgQVVYX1REQ19ET05FIG9yIGl0IGZhaWxlZCBkdWUgdG8gYSB0aW1lb3V0CisvLyEgXHJlZiBBVVhfVERDX1RJTUVPVVQuIElmIHRoZSBBVVggVERDIGlzIHN0aWxsIG1lYXN1cmluZyBpdCB0aGlzIGZ1bmN0aW9uCisvLyEgd2lsbCByZXR1cm4gXHJlZiBBVVhfVERDX0JVU1kuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgQVVYIFREQy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBzdGF0dXMgb2YgYSBtZWFzdXJlbWVudDoKKy8vISAtIFxyZWYgQVVYX1REQ19ET05FIDogQW4gQVVYIFREQyBtZWFzdXJlbWVudCBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuCisvLyEgLSBccmVmIEFVWF9URENfVElNRU9VVCA6IEFuIEFVWCBUREMgbWVhc3VyZW1lbnQgZmFpbGVkIGR1ZSB0byB0aW1lb3V0LgorLy8hIC0gXHJlZiBBVVhfVERDX0JVU1kgOiBBbiBBVVggVERDIG1lYXN1cmVtZW50IGlzIGJlaW5nIHBlcmZvcm1lZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQVVYVERDTWVhc3VyZW1lbnREb25lKHVpbnQzMl90IHVpMzJCYXNlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgbGF0ZXN0IG1lYXN1cmVtZW50LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciByZXRyaWV2aW5nIHRoZSB2YWx1ZSBvZiB0aGUgbGF0ZXN0IG1lYXN1cmVtZW50CisvLyEgcGVyZm9ybWVkIGJ5IHRoZSBBVVggVERDLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFVWCBUREMuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgbGF0ZXN0IG1lYXN1cmVtZW50LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQVVYVERDTWVhc3VyZW1lbnRHZXQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFVWFREQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIG1lYXN1cmVtZW50LgorICAgIC8vCisgICAgcmV0dXJuIChIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19SRVNVTFQpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHRoZSBzYXR1cmF0aW9uIGxpbWl0IG9mIHRoZSBtZWFzdXJlbWVudC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgYSBzYXR1cmF0aW9uIGxpbWl0IGZvciB0aGUgZXZlbnQgYWNjdW11bGF0aW9uCisvLyEgcmVnaXN0ZXIuIFRoZSBzYXR1cmF0aW9uIGxpbWl0IGlzIGRlZmluZWQgYXMgYSBiaXQgd2lkdGggb2YgdGhlCisvLyEgYWNjdW11bGF0aW9uIHJlZ2lzdGVyIGFuZCB0aGVyZWZvcmUgaW5jcmVhc2VzIGluIHBvd2VyIG9mIDIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDLgorLy8hIFxwYXJhbSB1aTMyTGltaXQgaXMgdGhlIHNhdHVyYXRpb24gbGltaXQuCisvLyEgLSBccmVmIEFVWFREQ19TQVRfNDA5NgorLy8hIC0gXHJlZiBBVVhURENfU0FUXzgxOTIKKy8vISAtIFxyZWYgQVVYVERDX1NBVF8xNjM4NAorLy8hIC0gXHJlZiBBVVhURENfU0FUXzMyNzY4CisvLyEgLSBccmVmIEFVWFREQ19TQVRfNjU1MzYKKy8vISAtIFxyZWYgQVVYVERDX1NBVF8xMzEwNzIKKy8vISAtIFxyZWYgQVVYVERDX1NBVF8yNjIxNDQKKy8vISAtIFxyZWYgQVVYVERDX1NBVF81MjQyODgKKy8vISAtIFxyZWYgQVVYVERDX1NBVF8xMDQ4NTc2CisvLyEgLSBccmVmIEFVWFREQ19TQVRfMjA5NzE1MgorLy8hIC0gXHJlZiBBVVhURENfU0FUXzQxOTQzMDQKKy8vISAtIFxyZWYgQVVYVERDX1NBVF84Mzg4NjA4CisvLyEgLSBccmVmIEFVWFREQ19TQVRfMTY3NzcyMTYgKGRlZmF1bHQpCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxub3RlIFRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIGFjY3VtdWxhdGlvbiByZWdpc3RlciBtaWdodCBpbmNyZWFzZSBzbGlnaHRseSBiZXlvbmQKKy8vISB0aGUgc2F0dXJhdGlvbiB2YWx1ZSBiZWZvcmUgdGhlIHNhdHVyYXRpb24gdGFrZXMgZWZmZWN0LgorLy8hCisvLyEgXHNhIFxyZWYgQVVYVERDTGltaXRHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBVVhURENMaW1pdFNldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkxpbWl0KQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBVVhURENCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkxpbWl0IDwgQVVYVERDX05VTV9TQVRfVkFMUyk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgc2F0dXJhdGlvbiBsaW1pdC4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgQVVYX1REQ19PX1NBVENGRykgPSB1aTMyTGltaXQ7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgc2F0dXJhdGlvbiBsaW1pdCBvZiB0aGUgbWVhc3VyZW1lbnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgc2F0dXJhdGlvbiBmb3IgdGhlCisvLyEgYWNjdW11bGF0b3IgcmVnaXN0ZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzYXR1cmF0aW9uIGxpbWl0LgorLy8hIC0gXHJlZiBBVVhURENfU0FUXzQwOTYKKy8vISAtIFxyZWYgQVVYVERDX1NBVF84MTkyCisvLyEgLSBccmVmIEFVWFREQ19TQVRfMTYzODQKKy8vISAtIFxyZWYgQVVYVERDX1NBVF8zMjc2OAorLy8hIC0gXHJlZiBBVVhURENfU0FUXzY1NTM2CisvLyEgLSBccmVmIEFVWFREQ19TQVRfMTMxMDcyCisvLyEgLSBccmVmIEFVWFREQ19TQVRfMjYyMTQ0CisvLyEgLSBccmVmIEFVWFREQ19TQVRfNTI0Mjg4CisvLyEgLSBccmVmIEFVWFREQ19TQVRfMTA0ODU3NgorLy8hIC0gXHJlZiBBVVhURENfU0FUXzIwOTcxNTIKKy8vISAtIFxyZWYgQVVYVERDX1NBVF80MTk0MzA0CisvLyEgLSBccmVmIEFVWFREQ19TQVRfODM4ODYwOAorLy8hIC0gXHJlZiBBVVhURENfU0FUXzE2Nzc3MjE2CisvLyEKKy8vISBcc2EgXHJlZiBBVVhURENMaW1pdFNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBVVhURENMaW1pdEdldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQVVYVERDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgc2F0dXJhdGlvbiBsaW1pdC4KKyAgICAvLworICAgIHJldHVybiAoSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fU0FUQ0ZHKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdGhlIGNvdW50ZXIgaWYgcG9zc2libGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSB0aGUgQVVYIFREQyBzdG9wL2NvbXBhcmUgZXZlbnQgY291bnRlci4KKy8vISBUaGUgY291bnRlciBjYW4gYmUgdXNlZCB0byBtZWFzdXJlIG11bHRpcGxlIHBlcmlvZHMgb2YgYSBjbG9jayBzaWduYWwuCisvLyEgRm9yIGVhY2ggc3RvcC9jb21wYXJlIGV2ZW50IHRoZSBjb3VudGVyIHdpbGwgYmUgZGVjcmVtZW50ZWQgYnkgb25lIGFuZAorLy8hIHRoZSBtZWFzdXJlbWVudCB3aWxsIGNvbnRpbnVlIHJ1bm5pbmcgdW50aWwgdGhlIHZhbHVlIG9mIHRoZSBjb3VudGVyCisvLyEgcmVhY2hlcyAwLiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgY291bnRlciBjYW4gYmUgcmVhZCB1c2luZworLy8hIFxyZWYgQVVYVERDQ291bnRlckdldCgpLiBUaGUgcmVzZXQgdmFsdWUgb2YgdGhlIGNvdW50ZXIgY2FuIGJlIHNldCB1c2luZworLy8hIFxyZWYgQVVYVERDQ291bnRlclNldCgpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIGJhc2UgYWRkcmVzcyBvZiB0aGUgQVVYIFREQy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIHRoZSBjb3VudGVyIHdhcyBzdWNjZXNzZnVsbHkgZW5hYmxlZC4gSWYgdGhlCisvLyEgQVVYIFREQyBpcyBub3QgaW4gSWRsZSBtb2RlLCB0aGUgY291bnRlciBjYW4gbm90IGJlIGVuYWJsZWQsIGFuZCB0aGUKKy8vISByZXR1cm4gdmFsdWUgd2lsbCBiZSBcYyBmYWxzZS4KKy8vIQorLy8hIFxzYSBccmVmIEFVWFREQ0NvdW50ZXJHZXQoKSwgXHJlZiBBVVhURENDb3VudGVyU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQVVYVERDQ291bnRlckVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQVVYVERDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIENoZWNrIGlmIHRoZSBBVVggVERDIGlzIGluIGlkbGUgbW9kZS4gSWYgbm90IGluIElkbGUgbW9kZSwgdGhlIGNvdW50ZXIKKyAgICAvLyB3aWxsIG5vdCBiZSBlbmFibGVkLgorICAgIC8vCisgICAgaWYoISgoSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fU1RBVCkgJiBBVVhfVERDX1NUQVRfU1RBVEVfTSkgPT0KKyAgICAgICAgICAgIEFVWF9URENfU1RBVF9TVEFURV9JRExFKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgY291bnRlci4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgQVVYX1REQ19PX1RSSUdDTlRDRkcpID0gQVVYX1REQ19UUklHQ05UQ0ZHX0VOOworCisgICAgLy8KKyAgICAvLyBDb3VudGVyIHN1Y2Nlc3NmdWxseSBlbmFibGVkLgorICAgIC8vCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSBjb3VudGVyIGlmIHBvc3NpYmxlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHRoZSBBVVggVERDIHN0b3AvY29tcGFyZSBldmVudCBjb3VudGVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIGJhc2UgYWRkcmVzcyBvZiB0aGUgQVVYIFREQy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIHRoZSBjb3VudGVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQuIElmIHRoZQorLy8hIEFVWCBUREMgaXMgbm90IGluIElkbGUgbW9kZSwgdGhlIGNvdW50ZXIgY2FuIG5vdCBiZSBkaXNhYmxlZCwgYW5kIHRoZQorLy8hIHJldHVybiB2YWx1ZSB3aWxsIGJlIFxjIGZhbHNlLgorLy8hCisvLyEgXHNhIFxyZWYgQVVYVERDQ291bnRlckVuYWJsZSgpIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIGNvdW50ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0FVWFREQ0NvdW50ZXJEaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBVVhURENCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgdGhlIEFVWCBUREMgaXMgaW4gSWRsZSBtb2RlLiBJZiBub3QgaW4gSWRsZSBtb2RlLCB0aGUgY291bnRlcgorICAgIC8vIHdpbGwgbm90IGJlIGRpc2FibGVkLgorICAgIC8vCisgICAgaWYoISgoSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fU1RBVCkgJiBBVVhfVERDX1NUQVRfU1RBVEVfTSkgPT0KKyAgICAgICAgICAgIEFVWF9URENfU1RBVF9TVEFURV9JRExFKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIGNvdW50ZXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19UUklHQ05UQ0ZHKSA9IDA7CisKKyAgICAvLworICAgIC8vIENvdW50ZXIgc3VjY2Vzc2Z1bGx5IGRpc2FibGVkLgorICAgIC8vCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCB0aGUgcmVzZXQgbnVtYmVyIG9mIGNvdW50ZXIgY29tcGFyZS9zdG9wIGV2ZW50IHRvIGlnbm9yZSBiZWZvcmUgdGFraW5nCisvLyEgYSBtZWFzdXJlbWVudC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gbG9hZHMgdGhlIHJlc2V0IHZhbHVlIG9mIHRoZSBjb3VudGVyIHdpdGggdGhlIHNwZWNpZmllZAorLy8hIG51bWJlciBvZiBldmVudHMgdG8gaWdub3JlLiBBIHJlc2V0IGluIHRoaXMgY29udGV4dCBtZWFucyB0aGUgY291bnRlcgorLy8hIGhhcyBiZWVuIGRpc2FibGVkIGFuZCB0aGVuIGVuYWJsZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDLgorLy8hIFxwYXJhbSB1aTMyRXZlbnRzIGlzIHRoZSBudW1iZXIgb2YgY29tcGFyZS9zdG9wIGV2ZW50cyB0byBsb2FkIGludG8gdGhlCisvLyEgY291bnRlci4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIHRoZSBjb3VudGVyIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZC4gSWYgdGhlCisvLyEgQVVYIFREQyBpcyBub3QgaW4gSWRsZSBtb2RlLCB0aGUgY291bnRlciBjYW4gbm90IGJlIHVwZGF0ZWQsIGFuZCB0aGUKKy8vISByZXR1cm4gdmFsdWUgd2lsbCBiZSBcYyBmYWxzZS4KKy8vIQorLy8hIFxzYSBccmVmIEFVWFREQ0NvdW50ZXJFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitBVVhURENDb3VudGVyU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRXZlbnRzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBVVhURENCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgdGhlIEFVWCBUREMgaXMgaW4gaWRsZSBtb2RlLiBJZiBub3QgaW4gaWRsZSBtb2RlLCB0aGUgY291bnRlcgorICAgIC8vIHdpbGwgbm90IGJlIGRpc2FibGVkLgorICAgIC8vCisgICAgaWYoISgoSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fU1RBVCkgJiBBVVhfVERDX1NUQVRfU1RBVEVfTSkgPT0KKyAgICAgICAgICAgIEFVWF9URENfU1RBVF9TVEFURV9JRExFKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFVwZGF0ZSB0aGUgcmVzZXQgY291bnRlciB2YWx1ZS4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgQVVYX1REQ19PX1RSSUdDTlRMT0FEKSA9IHVpMzJFdmVudHM7CisKKyAgICAvLworICAgIC8vIENvdW50ZXIgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuCisgICAgLy8KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBjdXJyZW50IG51bWJlciBvZiBjb3VudGVyIGNvbXBhcmUvc3RvcCBldmVudCB0byBpZ25vcmUgYmVmb3JlCisvLyEgdGFraW5nIGEgbWVhc3VyZW1lbnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgY29tcGFyZS9zdG9wIGV2ZW50cyBiZWZvcmUKKy8vISBhIG1lYXN1cmVtZW50IGlzIHJlZ2lzdGVyZWQuIFRoaXMgdmFsdWUgaXMgZGVjcmVtZW50ZWQgYnkgb25lIGZvciBlYWNoCisvLyEgcmVnaXN0ZXJlZCBjb21wYXJlL3N0b3AgZXZlbnQgYW5kIHdpbGwgYWx3YXlzIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0aGUKKy8vISByZXNldCB2YWx1ZSBvZiB0aGUgY291bnRlciBzZXQgdXNpbmcgXHJlZiBBVVhURENDb3VudGVyU2V0KCkuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIGNvbXBhcmUvc3RvcCBldmVudHMgaWdub3JlZCBiZWZvcmUgYQorLy8hIG1lYXN1cmVtZW50IGlzIHBlcmZvcm1lZC4KKy8vIQorLy8hIFxzYSBccmVmIEFVWFREQ0NvdW50ZXJFbmFibGUoKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FVWFREQ0NvdW50ZXJHZXQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFVWFREQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgY291bnRlciB2YWx1ZS4KKyAgICAvLworICAgIHJldHVybiAoSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fVFJJR0NOVCkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9BVVhURENDb25maWdTZXQKKyAgICAgICAgI3VuZGVmICBBVVhURENDb25maWdTZXQKKyAgICAgICAgI2RlZmluZSBBVVhURENDb25maWdTZXQgICAgICAgICAgICAgICAgIFJPTV9BVVhURENDb25maWdTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWFREQ01lYXN1cmVtZW50RG9uZQorICAgICAgICAjdW5kZWYgIEFVWFREQ01lYXN1cmVtZW50RG9uZQorICAgICAgICAjZGVmaW5lIEFVWFREQ01lYXN1cmVtZW50RG9uZSAgICAgICAgICAgUk9NX0FVWFREQ01lYXN1cmVtZW50RG9uZQorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19BVVhfVERDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfdGltZXIuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYzU1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfdGltZXIuYwpAQCAtMCwwICsxLDMzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGF1eF90aW1lci5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMi0yNCAxNDowODo1NSArMDEwMCAoV2VkLCAyNCBGZWIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTc2NworKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIEFVWCBUaW1lciBNb2R1bGUKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvYXV4X3RpbWVyLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBBVVhUaW1lckNvbmZpZ3VyZQorICAgICNkZWZpbmUgQVVYVGltZXJDb25maWd1cmUgICAgICAgICAgICAgICBOT1JPTV9BVVhUaW1lckNvbmZpZ3VyZQorICAgICN1bmRlZiAgQVVYVGltZXJTdGFydAorICAgICNkZWZpbmUgQVVYVGltZXJTdGFydCAgICAgICAgICAgICAgICAgICBOT1JPTV9BVVhUaW1lclN0YXJ0CisgICAgI3VuZGVmICBBVVhUaW1lclN0b3AKKyAgICAjZGVmaW5lIEFVWFRpbWVyU3RvcCAgICAgICAgICAgICAgICAgICAgTk9ST01fQVVYVGltZXJTdG9wCisgICAgI3VuZGVmICBBVVhUaW1lclByZXNjYWxlU2V0CisgICAgI2RlZmluZSBBVVhUaW1lclByZXNjYWxlU2V0ICAgICAgICAgICAgIE5PUk9NX0FVWFRpbWVyUHJlc2NhbGVTZXQKKyAgICAjdW5kZWYgIEFVWFRpbWVyUHJlc2NhbGVHZXQKKyAgICAjZGVmaW5lIEFVWFRpbWVyUHJlc2NhbGVHZXQgICAgICAgICAgICAgTk9ST01fQVVYVGltZXJQcmVzY2FsZUdldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29uZmlndXJlIEFVWCB0aW1lcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FVWFRpbWVyQ29uZmlndXJlKHVpbnQzMl90IHVpMzJUaW1lciwgdWludDMyX3QgdWkzMkNvbmZpZykKK3sKKyAgICB1aW50MzJfdCB1aTMyVmFsOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzApIHx8ICh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzEpIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gQVVYX1RJTUVSX0JPVEgpKTsKKyAgICBBU1NFUlQoKCh1aTMyQ29uZmlnICYgMHgwMDAwMDAwRikgPT0gQVVYX1RJTUVSX0NGR19PTkVfU0hPVCkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMDAwRikgPT0gQVVYX1RJTUVSX0NGR19QRVJJT0RJQykgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMDAwRikgPT0gQVVYX1RJTUVSX0NGR19PTkVfU0hPVF9FREdFX0NPVU5UKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwMDBGKSA9PSBBVVhfVElNRVJfQ0ZHX1BFUklPRElDX0VER0VfQ09VTlQpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDAwRjApID09IEFVWF9USU1FUl9DRkdfUklTSU5HX0VER0UpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDAwRjApID09IEFVWF9USU1FUl9DRkdfRkFMTElOR19FREdFKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1JUQ19FVkVOVCkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19DTVBfQSkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19DTVBfQikgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19URENET05FKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1RJTUVSMF9FVkVOVCkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19USU1FUjFfRVZFTlQpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfU01QSF9SRUxFQVNFKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FEQ19ET05FKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzApIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMSkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8yKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzMpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPNCkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU81KSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzYpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPNykgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU84KSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzkpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTApIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTEpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTIpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTMpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTQpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTUpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUNMS19SRUYpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfTUNVX0VWRU5UKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FEQ19JUlEpKTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIFRpbWVyIDAuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBBVVhfVElNRVJfMCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFN0b3AgdGltZXIgMC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMENUTCkgPSAwOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFNldCBtb2RlLgorICAgICAgICAvLworICAgICAgICB1aTMyVmFsID0gSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMENGRyk7CisgICAgICAgIHVpMzJWYWwgJj0gfihBVVhfVElNRVJfVDBDRkdfTU9ERV9NIHwgQVVYX1RJTUVSX1QwQ0ZHX1JFTE9BRF9NKTsKKyAgICAgICAgdWkzMlZhbCB8PSAodWkzMkNvbmZpZyAmIChBVVhfVElNRVJfVDBDRkdfTU9ERV9NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfVElNRVJfVDBDRkdfUkVMT0FEX00pKTsKKyAgICAgICAgSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMENGRykgPSB1aTMyVmFsOworCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIGVkZ2UgY291bnRlciwgc2V0IHJpc2luZy9mYWxsaW5nIGVkZ2UgYW5kIHRpY2sgc291cmNlLgorICAgICAgICAvLworICAgICAgICBpZih1aTMyQ29uZmlnICYgQVVYX1RJTUVSX1QwQ0ZHX01PREVfTSkKKyAgICAgICAgeworICAgICAgICAgICAgdWkzMlZhbCA9IEhXUkVHKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDBDRkcpOworICAgICAgICAgICAgdWkzMlZhbCAmPSB+KEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19QT0xfTSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX00pOworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2V0IGVkZ2UgcG9sYXJpdHkuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYodWkzMkNvbmZpZyAmIEFVWF9USU1FUl9DRkdfRkFMTElOR19FREdFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVpMzJWYWwgfD0gQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1BPTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNldCB0aWNrIHNvdXJjZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICB1aTMyVmFsIHw9ICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID4+IDgpIDw8CisgICAgICAgICAgICAgICAgICAgICAgIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19TOworCisgICAgICAgICAgICBIV1JFRyhBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QwQ0ZHKSA9IHVpMzJWYWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSBUaW1lciAxLgorICAgIC8vCisgICAgaWYodWkzMlRpbWVyICYgQVVYX1RJTUVSXzEpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBTdG9wIHRpbWVyIDEuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDFDVEwpID0gMDsKKworICAgICAgICAvLworICAgICAgICAvLyBTZXQgbW9kZS4KKyAgICAgICAgLy8KKyAgICAgICAgdWkzMlZhbCA9IEhXUkVHKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDFDRkcpOworICAgICAgICB1aTMyVmFsICY9IH4oQVVYX1RJTUVSX1QxQ0ZHX01PREVfTSB8IEFVWF9USU1FUl9UMUNGR19SRUxPQURfTSk7CisgICAgICAgIHVpMzJWYWwgfD0gKCh1aTMyQ29uZmlnKSAmIChBVVhfVElNRVJfVDFDRkdfTU9ERV9NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9USU1FUl9UMUNGR19SRUxPQURfTSkpOworICAgICAgICBIV1JFRyhBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QxQ0ZHKSA9IHVpMzJWYWw7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgZWRnZSBjb3VudGVyLCBzZXQgcmlzaW5nL2ZhbGxpbmcgZWRnZSBhbmQgdGljayBzb3VyY2UuCisgICAgICAgIC8vCisgICAgICAgIGlmKHVpMzJDb25maWcgJiBBVVhfVElNRVJfVDFDRkdfTU9ERSkKKyAgICAgICAgeworICAgICAgICAgICAgdWkzMlZhbCA9IEhXUkVHKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDFDRkcpOworICAgICAgICAgICAgdWkzMlZhbCAmPSB+KEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19QT0xfTSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX00pOworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2V0IGVkZ2UgcG9sYXJpdHkuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYodWkzMkNvbmZpZyAmIEFVWF9USU1FUl9DRkdfRkFMTElOR19FREdFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVpMzJWYWwgfD0gQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX1BPTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNldCB0aWNrIHNvdXJjZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICB1aTMyVmFsIHw9ICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID4+IDgpIDw8CisgICAgICAgICAgICAgICAgICAgICAgIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19TOworICAgICAgICAgICAgSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMUNGRykgPSB1aTMyVmFsOworICAgICAgICB9CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFN0YXJ0IEFVWCB0aW1lcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FVWFRpbWVyU3RhcnQodWludDMyX3QgdWkzMlRpbWVyKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IEFVWF9USU1FUl8wKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IEFVWF9USU1FUl8xKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IEFVWF9USU1FUl9CT1RIKSk7CisKKyAgICBpZih1aTMyVGltZXIgJiBBVVhfVElNRVJfMCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFN0YXJ0IHRpbWVyIDAuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDBDVEwpID0gQVVYX1RJTUVSX1QwQ1RMX0VOOworICAgIH0KKyAgICBpZih1aTMyVGltZXIgJiBBVVhfVElNRVJfMSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFN0YXJ0IHRpbWVyIDEuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDFDVEwpID0gQVVYX1RJTUVSX1QxQ1RMX0VOOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTdG9wIEFVWCB0aW1lcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FVWFRpbWVyU3RvcCh1aW50MzJfdCB1aTMyVGltZXIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzApIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzEpIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gQVVYX1RJTUVSX0JPVEgpKTsKKworICAgIGlmKHVpMzJUaW1lciAmIEFVWF9USU1FUl8wKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RvcCB0aW1lciAwLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QwQ1RMKSA9IDA7CisgICAgfQorICAgIGlmKHVpMzJUaW1lciAmIEFVWF9USU1FUl8xKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RvcCB0aW1lciAxLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QxQ1RMKSA9IDA7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFNldCBBVVggdGltZXIgcHJlc2NhbGUgdmFsdWUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBVVhUaW1lclByZXNjYWxlU2V0KHVpbnQzMl90IHVpMzJUaW1lciwgdWludDMyX3QgdWkzMlByZXNjYWxlRGl2KQoreworICAgIHVpbnQzMl90IHVpMzJWYWw7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBBVVhfVElNRVJfMCkgfHwgKHVpMzJUaW1lciA9PSBBVVhfVElNRVJfMSkgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBBVVhfVElNRVJfQk9USCkpOworICAgIEFTU0VSVCh1aTMyUHJlc2NhbGVEaXYgPD0gQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8zMjc2OCk7CisKKyAgICBpZih1aTMyVGltZXIgJiBBVVhfVElNRVJfMCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFNldCB0aW1lciAwIHByZXNjYWxlIHZhbHVlLgorICAgICAgICAvLworICAgICAgICB1aTMyVmFsID0gSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMENGRyk7CisgICAgICAgIHVpMzJWYWwgJj0gfkFVWF9USU1FUl9UMENGR19QUkVfTTsKKyAgICAgICAgdWkzMlZhbCB8PSAgdWkzMlByZXNjYWxlRGl2IDw8IEFVWF9USU1FUl9UMENGR19QUkVfUzsKKyAgICAgICAgSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMENGRykgPSB1aTMyVmFsOworICAgIH0KKyAgICBpZih1aTMyVGltZXIgJiBBVVhfVElNRVJfMSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFNldCB0aW1lciAxIHByZXNjYWxlIHZhbHVlLgorICAgICAgICAvLworICAgICAgICB1aTMyVmFsID0gSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMUNGRyk7CisgICAgICAgIHVpMzJWYWwgJj0gfkFVWF9USU1FUl9UMUNGR19QUkVfTTsKKyAgICAgICAgdWkzMlZhbCB8PSAgdWkzMlByZXNjYWxlRGl2IDw8IEFVWF9USU1FUl9UMUNGR19QUkVfUzsKKyAgICAgICAgSFdSRUcoQVVYX1RJTUVSX0JBU0UgICsgQVVYX1RJTUVSX09fVDFDRkcpID0gdWkzMlZhbDsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IEFVWCB0aW1lciBwcmVzY2FsZSB2YWx1ZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitBVVhUaW1lclByZXNjYWxlR2V0KHVpbnQzMl90IHVpMzJUaW1lcikKK3sKKyAgICB1aW50MzJfdCB1aTMyVmFsOworICAgIHVpbnQzMl90IHVpMzJQcmVzY2FsZURpdjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IEFVWF9USU1FUl8wKSB8fCAodWkzMlRpbWVyID09IEFVWF9USU1FUl8xKSk7CisKKyAgICB1aTMyVmFsID0gKEhXUkVHKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDBDRkcpKTsKKyAgICBpZih1aTMyVGltZXIgJiBBVVhfVElNRVJfMCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEdldCB0aW1lciAwIHByZXNjYWxlIHZhbHVlLgorICAgICAgICAvLworICAgICAgICB1aTMyUHJlc2NhbGVEaXYgPQorICAgICAgICAgICAgKHVpMzJWYWwgJiBBVVhfVElNRVJfVDBDRkdfUFJFX00pID4+IEFVWF9USU1FUl9UMENGR19QUkVfUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gR2V0IHRpbWVyIDEgcHJlc2NhbGUgdmFsdWUuCisgICAgICAgIC8vCisgICAgICAgIHVpMzJQcmVzY2FsZURpdiA9CisgICAgICAgICAgICAodWkzMlZhbCAmIEFVWF9USU1FUl9UMUNGR19QUkVfTSkgPj4gQVVYX1RJTUVSX1QxQ0ZHX1BSRV9TOworICAgIH0KKworICAgIHJldHVybih1aTMyUHJlc2NhbGVEaXYpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3RpbWVyLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTRjODBjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3RpbWVyLmgKQEAgLTAsMCArMSw0ODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhdXhfdGltZXIuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDItMjQgMTQ6MDg6NTUgKzAxMDAgKFdlZCwgMjQgRmViIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU3NjcKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgQVVYIFRpbWVyCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIGF1eF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgYXV4dGltZXJfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19BVVhfVElNRVJfSF9fCisjZGVmaW5lIF9fQVVYX1RJTUVSX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2F1eF90aW1lci5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgQVVYVGltZXJDb25maWd1cmUgICAgICAgICAgICAgICBOT1JPTV9BVVhUaW1lckNvbmZpZ3VyZQorICAgICNkZWZpbmUgQVVYVGltZXJTdGFydCAgICAgICAgICAgICAgICAgICBOT1JPTV9BVVhUaW1lclN0YXJ0CisgICAgI2RlZmluZSBBVVhUaW1lclN0b3AgICAgICAgICAgICAgICAgICAgIE5PUk9NX0FVWFRpbWVyU3RvcAorICAgICNkZWZpbmUgQVVYVGltZXJQcmVzY2FsZVNldCAgICAgICAgICAgICBOT1JPTV9BVVhUaW1lclByZXNjYWxlU2V0CisgICAgI2RlZmluZSBBVVhUaW1lclByZXNjYWxlR2V0ICAgICAgICAgICAgIE5PUk9NX0FVWFRpbWVyUHJlc2NhbGVHZXQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBBVVhUaW1lckNvbmZpZ3VyZSgpLgorLy8KKy8vIFJlcXVpcmVzIHRpbWVyMCBhbmQgdGltZXIxIHRvIHVzZSBzYW1lIGVudW1lcmF0aW9ucyBhbmQgdmFsdWVzIQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19PTkVfU0hPVCAgICAgICAgICAgICAgKEFVWF9USU1FUl9UMENGR19SRUxPQURfTUFOKSAgICAgICAgLy8gT25lLXNob3QgdGltZXIgbW9kZQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1BFUklPRElDICAgICAgICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1JFTE9BRF9DT05UKSAgICAgICAvLyBQZXJpb2QgdGltZXIgbW9kZQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX09ORV9TSE9UX0VER0VfQ09VTlQgICAoKEFVWF9USU1FUl9UMENGR19SRUxPQURfTUFOKSB8IChBVVhfVElNRVJfVDBDRkdfTU9ERV9USUNLKSkgIC8vIE9uZS1zaG90IHRpbWVyIHdpdGggZWRnZSBjb3VudAorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1BFUklPRElDX0VER0VfQ09VTlQgICAoKEFVWF9USU1FUl9UMENGR19SRUxPQURfQ09OVCkgfCAoQVVYX1RJTUVSX1QwQ0ZHX01PREVfVElDSykpIC8vIFBlcmlvZGljIHRpbWVyIHdpdGggZWRnZSBjb3VudAorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1JJU0lOR19FREdFICAgICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1BPTF9SSVNFKSAvLyBDb3VudCByaXNpbmcgZWRnZXMgKHVzZWQgd2l0aCBlZGdlIGNvdW50IG1vZGUpCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfRkFMTElOR19FREdFICAgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfUE9MX0ZBTEwpIC8vIENvdW50IGZhbGxpbmcgZWRnZXMgKHVzZWQgd2l0aCBlZGdlIGNvdW50IG1vZGUpCisKKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19SVENfRVZFTlQgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19SVENfQ0gyX0VWKSAvLyBBT04gd2FrZS11cCBldmVudAorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0NNUF9BICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWF9DT01QQSkgIC8vIENvbXBhcmF0b3IgQQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0NNUF9CICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWF9DT01QQikgIC8vIENvbXBhcmF0b3IgQgorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1REQ0RPTkUgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1REQ19ET05FKSAgIC8vIFREQyBEb25lCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfVElNRVIwX0VWRU5UIChBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfVElNRVIwX0VWKSAgLy8gVGltZXIgMCBldmVudAorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1RJTUVSMV9FVkVOVCAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1RJTUVSMV9FVikgIC8vIFRpbWVyIDEgZXZlbnQKKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19TTVBIX1JFTEVBU0UgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19TTVBIX0FVVE9UQUtFX0RPTkUpIC8vIFNlbWFwaG9yZSByZWxlYXNlCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQURDX0RPTkUgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQURDX0RPTkUpICAgLy8gQURDIGRvbmUKKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19SVENfNEtIWiAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19SVENfNEtIWikKKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19PQlNNVVgwICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19PQlNNVVgwKQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX09CU01VWDEgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX09CU01VWDEpCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQU9OX1NXICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQU9OX1NXKQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FPTl9QUk9HX1dVICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FPTl9QUk9HX1dVKQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzAgICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMCkgICAgIC8vIEFJT19EQVRbIDBdCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMSAgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8xKSAgICAgLy8gQUlPX0RBVFsgMV0KKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8yICAgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzIpICAgICAvLyBBSU9fREFUWyAyXQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzMgICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMykgICAgIC8vIEFJT19EQVRbIDNdCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPNCAgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU80KSAgICAgLy8gQUlPX0RBVFsgNF0KKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU81ICAgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzUpICAgICAvLyBBSU9fREFUWyA1XQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzYgICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPNikgICAgIC8vIEFJT19EQVRbIDZdCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPNyAgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU83KSAgICAgLy8gQUlPX0RBVFsgN10KKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU84ICAgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzgpICAgICAvLyBBSU9fREFUWyA4XQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzkgICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPOSkgICAgIC8vIEFJT19EQVRbIDldCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTAgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8xMCkgICAgLy8gQUlPX0RBVFsxMF0KKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xMSAgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzExKSAgICAvLyBBSU9fREFUWzExXQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzEyICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMTIpICAgIC8vIEFJT19EQVRbMTJdCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTMgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8xMykgICAgLy8gQUlPX0RBVFsxM10KKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xNCAgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzE0KSAgICAvLyBBSU9fREFUWzE0XQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzE1ICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMTUpICAgIC8vIEFJT19EQVRbMTVdCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUNMS19SRUYgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQUNMS19SRUYpICAgLy8gQUNMS19SRUZfaQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX01DVV9FVkVOVCAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX01DVV9FVkVOVCkgIC8vIE1DVSBldmVudAorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FEQ19JUlEgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FEQ19JUlEpICAgIC8vIERNQSBkb25lCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIG1vc3Qgb2YgdGhlIHRpbWVyIEFQSXMgYXMgdGhlIHVpMzJUaW1lcgorLy8gcGFyYW1ldGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYX1RJTUVSXzAgICAgICAgICAgICAgMHgwMDAwRkZGRiAgLy8gQVVYIFRpbWVyIDAKKyNkZWZpbmUgQVVYX1RJTUVSXzEgICAgICAgICAgICAgMHgwMEZGMDAwMCAgLy8gQVVYIFRpbWVyIDEKKyNkZWZpbmUgQVVYX1RJTUVSX0JPVEggICAgICAgICAgMHgwMEZGRkZGRiAgLy8gQVVYIFRpbWVyIEJvdGggMCBhbmQgMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBBVVhUaW1lclByZXNjYWxlU2V0IGFuZCByZXR1cm5lZCBmcm9tCisvLyBBVVhUaW1lclByZXNjYWxlR2V0LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8xICAgICAgMHgwMDAwMDAwMCAgLy8gUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMQorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzIgICAgICAweDAwMDAwMDAxICAvLyBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAyCisjZGVmaW5lIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfNCAgICAgIDB4MDAwMDAwMDIgIC8vIFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDQKKyNkZWZpbmUgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl84ICAgICAgMHgwMDAwMDAwMyAgLy8gUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gOAorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzE2ICAgICAweDAwMDAwMDA0ICAvLyBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAxNgorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzMyICAgICAweDAwMDAwMDA1ICAvLyBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAzMgorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzY0ICAgICAweDAwMDAwMDA2ICAvLyBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyA2NAorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzEyOCAgICAweDAwMDAwMDA3ICAvLyBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAxMjgKKyNkZWZpbmUgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8yNTYgICAgMHgwMDAwMDAwOCAgLy8gUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMjU2CisjZGVmaW5lIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfNTEyICAgIDB4MDAwMDAwMDkgIC8vIFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDUxMgorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzEwMjggICAweDAwMDAwMDBBICAvLyBQcmVzY2FsZSBkaXYuIHJhdGlvIDEwMjgKKyNkZWZpbmUgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8yMDQ4ICAgMHgwMDAwMDAwQiAgLy8gUHJlc2NhbGUgZGl2LiByYXRpbyAyMDQ4CisjZGVmaW5lIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfNDA5NiAgIDB4MDAwMDAwMEMgIC8vIFByZXNjYWxlIGRpdi4gcmF0aW8gNDA5NgorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzgxOTIgICAweDAwMDAwMDBEICAvLyBQcmVzY2FsZSBkaXYuIHJhdGlvIDgxOTIKKyNkZWZpbmUgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8xNjM4NCAgMHgwMDAwMDAwRSAgLy8gUHJlc2NhbGUgZGl2LiByYXRpbyAxNjM4NAorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzMyNzY4ICAweDAwMDAwMDBGICAvLyBQcmVzY2FsZSBkaXYuIHJhdGlvIDMyNzY4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgQVVYIHRpbWVyLgorLy8hCisvLyEgVGhpcyBjYWxsIGNvbmZpZ3VyZXMgdGhlIEFVWCB0aW1lciBzZWxlY3RlZCBieSB0aGUgXGMgdWkzMlRpbWVyLgorLy8hIFRoZSB0aW1lciBtb2R1bGUgaXMgZGlzYWJsZWQgYmVmb3JlIGJlaW5nIGNvbmZpZ3VyZWQgYW5kIGlzIGxlZnQgaW4gdGhlCisvLyEgZGlzYWJsZWQgc3RhdGUuCisvLyEKKy8vISBUaGUgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQgaW4gXGMgdWkzMkNvbmZpZyBhcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8hIHZhbHVlczoKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19PTkVfU0hPVCAgICAgICAgICAgIDogT25lLXNob3QgdGltZXIuCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfUEVSSU9ESUMgICAgICAgICAgICA6IFBlcmlvZGljIHRpbWVyLgorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX09ORV9TSE9UX0VER0VfQ09VTlQgOiBPbmUtc2hvdCBlZGdlIGNvdW50ZXIuCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfUEVSSU9ESUNfRURHRV9DT1VOVCA6IFBlcmlvZGljIGVkZ2UgY291bnRlci4KKy8vIQorLy8hIFdoZW4gY29uZmlndXJlZCBhcyB0aW1lciwgdGhlIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYmFzZWQgb24gdGhlIEFVWCBjbG9jaworLy8hIGFmdGVyIHRoZSBwcmVzY2FsZXIuIFRoZSBwcmVzY2FsZSBkaXZpc2lvbiByYXRpbyBpcyBzZXQKKy8vISB1c2luZyBccmVmIEFVWFRpbWVyUHJlc2NhbGVTZXQoKS4KKy8vIQorLy8hIFdoZW4gY29uZmlndXJlZCBhcyBhbiBlZGdlIGNvdW50ZXIgdGhlIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgb25seSBvbiBlZGdlcworLy8hIG9mIHRoZSBzZWxlY3RlZCBldmVudC4KKy8vISBUaGUgcG9sYXJpdHkgb2YgdGhlIGV2ZW50IGlzIHNlbGVjdGVkIGJ5OgorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1JJU0lOR19FREdFICA6IHJpc2luZyBlZGdlIHRyaWdnZXIKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19GQUxMSU5HX0VER0UgOiBmYWxsaW5nIGVkZ2UgdHJpZ2dlcgorLy8hCisvLyEgVGhlIGV2ZW50IHNvdXJjZSBpcyBzZWxlY3RlZCBhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBkZWZpbmVzOgorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1JUQ19FVkVOVAorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0NNUF9BCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQ01QX0IKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19URENET05FCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfVElNRVIwX0VWRU5UCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfVElNRVIxX0VWRU5UCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfU01QSF9SRUxFQVNFCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQURDX0RPTkUKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19SVENfNEtIWgorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX09CU01VWDAKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19PQlNNVVgxCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQU9OX1NXCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQU9OX1BST0dfV1UKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8wCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMQorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzIKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8zCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPNAorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzUKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU82CisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPNworLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzgKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU85CisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTAKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xMQorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzEyCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTMKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xNAorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzE1CisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUNMS19SRUYKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19NQ1VfRVZFTlQKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BRENfSVJRCisvLyEKKy8vISBUaGUgbW9kZSwgZXZlbnQgcG9sYXJpdHkgYW5kIGV2ZW50IHNvdXJjZSBhcmUgY29uZmlndXJlZCBieSBzZXR0aW5nIHRoZQorLy8hIFxjIHVpMzJDb25maWcgcGFyYW1ldGVyIGFzIHRoZSBiaXR3aXNlIE9SIG9mIHRoZSB2YXJpb3VzIHNldHRpbmdzLgorLy8hIEkuZS4gKFxyZWYgQVVYX1RJTUVSX0NGR19PTkVfU0hPVF9FREdFX0NPVU5UIHwgXHJlZiBBVVhfVElNRVJfQ0ZHX1JJU0lOR19FREdFIHwKKy8vISAgICAgICBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfUlRDX0VWRU5UKS4KKy8vIQorLy8hIFxub3RlIFdoZW4gdXNlZCBhcyBhbiBlZGdlIGNvdW50ZXIgdGhlIHByZXNjYWxlciBzaG91bGQgYmUgc2V0IHRvCisvLyEgXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzEuCisvLyEKKy8vISBcbm90ZSBBIHRpbWVyIGNhbiBub3QgdHJpZ2dlciBpdHNlbGYgdGh1cyB0aW1lciAwIGNhbiBcYiBub3QgdXNlCisvLyEgXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1RJTUVSMF9FVkVOVCBhbmQgdGltZXIgMSBjYW4gXGIgbm90IHVzZQorLy8hIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19USU1FUjFfRVZFTlQuCisvLyEKKy8vISBccGFyYW0gdWkzMlRpbWVyIGlzIHRoZSB0aW1lciB0byBjb25maWd1cmUuCisvLyEgLSBccmVmIEFVWF9USU1FUl8wCisvLyEgLSBccmVmIEFVWF9USU1FUl8xCisvLyEgXHBhcmFtIHVpMzJDb25maWcgaXMgdGhlIHRpbWVyIGNvbmZpZ3VyYXRpb24uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEFVWFRpbWVyUHJlc2NhbGVTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFVWFRpbWVyQ29uZmlndXJlKHVpbnQzMl90IHVpMzJUaW1lciwgdWludDMyX3QgdWkzMkNvbmZpZyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFN0YXJ0IEFVWCB0aW1lcihzKS4KKy8vIQorLy8hIFRoaXMgY2FsbCBzdGFydHMgdGhlIHNlbGVjdGVkIEFVWCB0aW1lcihzKS4KKy8vIQorLy8hIFxub3RlIFRoZSBjb3VudGVyIHdpbGwgc3RhcnQgY291bnRpbmcgdXAgZnJvbSB6ZXJvLgorLy8hCisvLyEgXHBhcmFtIHVpMzJUaW1lciBpcyB0aGUgdGltZXIgdG8gc3RhcnQuCisvLyEgLSBccmVmIEFVWF9USU1FUl8wCisvLyEgLSBccmVmIEFVWF9USU1FUl8xCisvLyEgLSBccmVmIEFVWF9USU1FUl9CT1RICisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEFVWFRpbWVyU3RvcCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQVVYVGltZXJTdGFydCh1aW50MzJfdCB1aTMyVGltZXIpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTdG9wIEFVWCB0aW1lcihzKS4KKy8vIQorLy8hIFRoaXMgY2FsbCBzdG9wcyB0aGUgc2VsZWN0ZWQgQVVYIHRpbWVyKHMpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJUaW1lciBpcyB0aGUgdGltZXIgdG8gc3RvcC4KKy8vISAtIFxyZWYgQVVYX1RJTUVSXzAKKy8vISAtIFxyZWYgQVVYX1RJTUVSXzEKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0JPVEgKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgQVVYVGltZXJTdGFydCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQVVYVGltZXJTdG9wKHVpbnQzMl90IHVpMzJUaW1lcik7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBBVVggdGltZXIgdGFyZ2V0IHZhbHVlLgorLy8hCisvLyEgVGhlIHRpbWVyIGNvdW50cyBmcm9tIHplcm8gdG8gdGhlIHRhcmdldCB2YWx1ZS4gV2hlbiB0YXJnZXQgdmFsdWUgaXMKKy8vISByZWFjaGVkIGFuIGV2ZW50IGlzIGdlbmVyYXRlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyVGltZXIgaXMgdGhlIHRpbWVyIHRvIHNldCB0aGUgdGFyZ2V0IHZhbHVlIGZvci4KKy8vISAtIFxyZWYgQVVYX1RJTUVSXzAKKy8vISAtIFxyZWYgQVVYX1RJTUVSXzEKKy8vISBccGFyYW0gdWkzMlRhcmdldCBpcyB0aGUgdGltZXIgdGFyZ2V0IHZhbHVlLgorLy8hIC0gRm9yIFxyZWYgQVVYX1RJTUVSXzAgdGhlIHRhcmdldCB2YWx1ZSBtdXN0IGJlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAuLjY1NTM1ICgxNiBiaXQpLgorLy8hIC0gRm9yIFxyZWYgQVVYX1RJTUVSXzEgdGhlIHRhcmdldCB2YWx1ZSBtdXN0IGJlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAuLjI1NSAoOCBiaXQpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBBVVhUaW1lclRhcmdldFZhbEdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FVWFRpbWVyVGFyZ2V0VmFsU2V0KHVpbnQzMl90IHVpMzJUaW1lciwgdWludDMyX3QgdWkzMlRhcmdldCkKK3sKKyAgICB1aW50MzJfdCB1aTMyQWRkcjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IEFVWF9USU1FUl8wKSB8fCAodWkzMlRpbWVyID09IEFVWF9USU1FUl8xKSk7CisgICAgQVNTRVJUKCgodWkzMlRpbWVyICYgQVVYX1RJTUVSXzApICYmICh1aTMyVGFyZ2V0IDw9IDY1NTM1KSkgfHwKKyAgICAgICAgICAgKCh1aTMyVGltZXIgJiBBVVhfVElNRVJfMSkgJiYgKHVpMzJUYXJnZXQgPD0gMjU1KSkpOworCisgICAgdWkzMkFkZHIgPSAodWkzMlRpbWVyICYgQVVYX1RJTUVSXzApID8KKyAgICAgICAgICAgICAgIChBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QwVEFSR0VUKSA6CisgICAgICAgICAgICAgICAoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMVRBUkdFVCk7CisKKyAgICBIV1JFRyh1aTMyQWRkcikgPSB1aTMyVGFyZ2V0OworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgQVVYIHRpbWVyIHRhcmdldCB2YWx1ZS4KKy8vIQorLy8hIFRoZSB0aW1lciBjb3VudHMgZnJvbSB6ZXJvIHRvIHRoZSB0YXJnZXQgdmFsdWUuIFdoZW4gdGFyZ2V0IHZhbHVlIGlzCisvLyEgcmVhY2hlZCBhbiBldmVudCBpcyBnZW5lcmF0ZWQuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJvZ3JhbW1lZCB0YXJnZXQKKy8vISB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCB0aW1lci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyVGltZXIgaXMgdGhlIHRpbWVyIHRvIGdldCB0aGUgdGFyZ2V0IHZhbHVlIGZyb20uCisvLyEgLSBccmVmIEFVWF9USU1FUl8wCisvLyEgLSBccmVmIEFVWF9USU1FUl8xCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGFyZ2V0IHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHRpbWVyCisvLyEKKy8vISBcc2EgXHJlZiBBVVhUaW1lclRhcmdldFZhbFNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBVVhUaW1lclRhcmdldFZhbEdldCh1aW50MzJfdCB1aTMyVGltZXIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzApIHx8ICh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzEpKTsKKworICAgIHJldHVybihIV1JFRygodWkzMlRpbWVyICYgQVVYX1RJTUVSXzApID8KKyAgICAgICAgICAgICAgICAgKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDBUQVJHRVQpIDoKKyAgICAgICAgICAgICAgICAgKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDFUQVJHRVQpKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBBVVggdGltZXIgcHJlc2NhbGUgdmFsdWUuCisvLyEKKy8vISBXaGVuIGNvbmZpZ3VyZWQgYXMgdGltZXIsIHRoZSBjb3VudGVyIGlzIGluY3JlbWVudGVkIGJhc2VkIG9uIHRoZSBBVVggY2xvY2sKKy8vISBhZnRlciB0aGUgcHJlc2NhbGVyLgorLy8hCisvLyEgXG5vdGUgU2V0dGluZyBwcmVzY2FsZSB2YWx1ZSBpcyBcYiBub3QgYWR2aXNlZCB3aGVuIHRoZSB0aW1lciBpcyBydW5uaW5nLgorLy8hCisvLyEgXG5vdGUgV2hlbiB0aW1lciBpcyB1c2VkIGFzIGFuIGVkZ2UgY291bnRlciB0aGUgcHJlc2NhbGVyIHNob3VsZCBiZQorLy8hICAgICAgIHNldCB0byBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyVGltZXIgaXMgdGhlIHRpbWVyIHRvIHNldCB0aGUgcHJlc2NhbGUgb24uCisvLyEgLSBccmVmIEFVWF9USU1FUl8wCisvLyEgLSBccmVmIEFVWF9USU1FUl8xCisvLyEgXHBhcmFtIHVpMzJQcmVzY2FsZURpdiBpcyB0aGUgcHJlc2NhbGVyIGRpdmlzaW9uIHJhdGlvLgorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzEgICAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMQorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzIgICAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMgorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzQgICAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gNAorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzE2ICAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMTYKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8zMiAgICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDMyCisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfNjQgICAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyA2NAorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzEyOCAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMTI4CisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMjU2ICAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAyNTYKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8xMDI4ICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDEwMjgKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8yMDQ4ICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDIwNDgKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl80MDk2ICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDQwOTYKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl84MTkyICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDgxOTIKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8xNjM4NCA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDE2Mzg0CisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMzI3NjggOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAzMjc2OAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBBVVhUaW1lclByZXNjYWxlR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBVVhUaW1lclByZXNjYWxlU2V0KHVpbnQzMl90IHVpMzJUaW1lciwgdWludDMyX3QgdWkzMlByZXNjYWxlRGl2KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IEFVWCB0aW1lciBwcmVzY2FsZSB2YWx1ZS4KKy8vIQorLy8hIFdoZW4gY29uZmlndXJlZCBhcyB0aW1lciwgdGhlIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYmFzZWQgb24gdGhlIEFVWCBjbG9jaworLy8hIGFmdGVyIHRoZSBwcmVzY2FsZXIuIFRoaXMgY2FsbCByZXR1cm5zIHRoZSBzZXR0aW5nIG9mIHRoZSBwcmVzY2FsZSBkaXZpZGUKKy8vISByYXRpbyBmb3IgdGhlIHNwZWNpZmllZCB0aW1lci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyVGltZXIgaXMgdGhlIHRpbWVyIHRvIGdldCB0aGUgcHJlc2NhbGUgdmFsdWUgZnJvbS4KKy8vISAtIFxyZWYgQVVYX1RJTUVSXzAKKy8vISAtIFxyZWYgQVVYX1RJTUVSXzEKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgcHJlc2NhbGVyIGRpdmlzaW9uIHJhdGlvIGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8xICAgICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDEKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8yICAgICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDIKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl80ICAgICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDQKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8xNiAgICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDE2CisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMzIgICAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAzMgorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzY0ICAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gNjQKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8xMjggICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDEyOAorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzI1NiAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMjU2CisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMTAyOCAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAxMDI4CisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMjA0OCAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAyMDQ4CisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfNDA5NiAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyA0MDk2CisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfODE5MiAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyA4MTkyCisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMTYzODQgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAxNjM4NAorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzMyNzY4IDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMzI3NjgKKy8vIQorLy8hIFxzYSBccmVmIEFVWFRpbWVyUHJlc2NhbGVTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBBVVhUaW1lclByZXNjYWxlR2V0KHVpbnQzMl90IHVpMzJUaW1lcik7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0FVWFRpbWVyQ29uZmlndXJlCisgICAgICAgICN1bmRlZiAgQVVYVGltZXJDb25maWd1cmUKKyAgICAgICAgI2RlZmluZSBBVVhUaW1lckNvbmZpZ3VyZSAgICAgICAgICAgICAgIFJPTV9BVVhUaW1lckNvbmZpZ3VyZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYVGltZXJTdGFydAorICAgICAgICAjdW5kZWYgIEFVWFRpbWVyU3RhcnQKKyAgICAgICAgI2RlZmluZSBBVVhUaW1lclN0YXJ0ICAgICAgICAgICAgICAgICAgIFJPTV9BVVhUaW1lclN0YXJ0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhUaW1lclN0b3AKKyAgICAgICAgI3VuZGVmICBBVVhUaW1lclN0b3AKKyAgICAgICAgI2RlZmluZSBBVVhUaW1lclN0b3AgICAgICAgICAgICAgICAgICAgIFJPTV9BVVhUaW1lclN0b3AKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWFRpbWVyUHJlc2NhbGVTZXQKKyAgICAgICAgI3VuZGVmICBBVVhUaW1lclByZXNjYWxlU2V0CisgICAgICAgICNkZWZpbmUgQVVYVGltZXJQcmVzY2FsZVNldCAgICAgICAgICAgICBST01fQVVYVGltZXJQcmVzY2FsZVNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYVGltZXJQcmVzY2FsZUdldAorICAgICAgICAjdW5kZWYgIEFVWFRpbWVyUHJlc2NhbGVHZXQKKyAgICAgICAgI2RlZmluZSBBVVhUaW1lclByZXNjYWxlR2V0ICAgICAgICAgICAgIFJPTV9BVVhUaW1lclByZXNjYWxlR2V0CisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0FVWF9USU1FUl9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3d1Yy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3d1Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjk1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfd3VjLmMKQEAgLTAsMCArMSwzMTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhdXhfd3VjLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAyLTI0IDE0OjA4OjU1ICswMTAwIChXZWQsIDI0IEZlYiAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1NzY3CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgQVVYIFdha2V1cCBDb250cm9sbGVyLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9hdXhfd3VjLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBBVVhXVUNDbG9ja0VuYWJsZQorICAgICNkZWZpbmUgQVVYV1VDQ2xvY2tFbmFibGUgICAgICAgICAgICAgICBOT1JPTV9BVVhXVUNDbG9ja0VuYWJsZQorICAgICN1bmRlZiAgQVVYV1VDQ2xvY2tEaXNhYmxlCisgICAgI2RlZmluZSBBVVhXVUNDbG9ja0Rpc2FibGUgICAgICAgICAgICAgIE5PUk9NX0FVWFdVQ0Nsb2NrRGlzYWJsZQorICAgICN1bmRlZiAgQVVYV1VDQ2xvY2tTdGF0dXMKKyAgICAjZGVmaW5lIEFVWFdVQ0Nsb2NrU3RhdHVzICAgICAgICAgICAgICAgTk9ST01fQVVYV1VDQ2xvY2tTdGF0dXMKKyAgICAjdW5kZWYgIEFVWFdVQ1Bvd2VyQ3RybAorICAgICNkZWZpbmUgQVVYV1VDUG93ZXJDdHJsICAgICAgICAgICAgICAgICBOT1JPTV9BVVhXVUNQb3dlckN0cmwKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRW5hYmxlIGNsb2NrcyBmb3IgcGVyaXBoZXJhbHMgaW4gdGhlIEFVWCBkb21haW4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FVWFdVQ0Nsb2NrRW5hYmxlKHVpbnQzMl90IHVpMzJDbG9ja3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyQ2xvY2tzICYgQVVYX1dVQ19BRElfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19PU0NDVFJMX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfVERDSUZfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19BTkFJRl9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1RJTUVSX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfQUlPRElPMF9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FJT0RJTzFfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19TTVBIX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfVERDX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfQURDX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfUkVGX0NMT0NLKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBzb21lIG9mIHRoZSBjbG9ja3MgaW4gdGhlIGNsb2NrIHJlZ2lzdGVyLgorICAgIC8vCisgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX01PRENMS0VOMCkgfD0gKHVpMzJDbG9ja3MgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19NT0RDTEtfTUFTSyk7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSByZXN0LgorICAgIC8vCisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfQURDX0NMT0NLKQorICAgIHsKKyAgICAgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX0FEQ0NMS0NUTCkgPQorICAgICAgICAgICAgQVVYX1dVQ19BRENDTEtDVExfUkVROworICAgIH0KKyAgICBpZih1aTMyQ2xvY2tzICYgQVVYX1dVQ19URENfQ0xPQ0spCisgICAgeworICAgICAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fVERDQ0xLQ1RMKSA9CisgICAgICAgICAgICBBVVhfV1VDX1REQ0NMS0NUTF9SRVE7CisgICAgfQorICAgIGlmKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1JFRl9DTE9DSykKKyAgICB7CisgICAgICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19SRUZDTEtDVEwpID0KKyAgICAgICAgICAgIEFVWF9XVUNfUkVGQ0xLQ1RMX1JFUTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBEaXNhYmxlIGNsb2NrcyBmb3IgcGVyaXBoZXJhbHMgaW4gdGhlIEFVWCBkb21haW4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FVWFdVQ0Nsb2NrRGlzYWJsZSh1aW50MzJfdCB1aTMyQ2xvY2tzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkNsb2NrcyAmIEFVWF9XVUNfQURJX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfT1NDQ1RSTF9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1REQ0lGX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfQU5BSUZfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19USU1FUl9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FJT0RJTzBfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19BSU9ESU8xX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfU01QSF9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1REQ19DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FEQ19DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1JFRl9DTE9DSykpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHNvbWUgb2YgdGhlIGNsb2NrcyBpbiB0aGUgY2xvY2sgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fTU9EQ0xLRU4wKSAmPSB+KHVpMzJDbG9ja3MgJgorICAgICAgICAgICAgQVVYX1dVQ19NT0RDTEtfTUFTSyk7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSByZXN0LgorICAgIC8vCisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfQURDX0NMT0NLKQorICAgIHsKKyAgICAgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX0FEQ0NMS0NUTCkgJj0KKyAgICAgICAgICAgIH5BVVhfV1VDX0FEQ0NMS0NUTF9SRVE7CisgICAgfQorICAgIGlmKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1REQ19DTE9DSykKKyAgICB7CisgICAgICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19URENDTEtDVEwpICY9CisgICAgICAgICAgICB+QVVYX1dVQ19URENDTEtDVExfUkVROworICAgIH0KKyAgICBpZih1aTMyQ2xvY2tzICYgQVVYX1dVQ19SRUZfQ0xPQ0spCisgICAgeworICAgICAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fUkVGQ0xLQ1RMKSAmPQorICAgICAgICAgICAgfkFVWF9XVUNfUkVGQ0xLQ1RMX1JFUTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgdGhlIHN0YXR1cyBvZiBhIGNsb2NrCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQVVYV1VDQ2xvY2tTdGF0dXModWludDMyX3QgdWkzMkNsb2NrcykKK3sKKyAgICBib29sIGJDbG9ja1N0YXR1czsKKyAgICB1aW50MzJfdCB1aTMyQ2xvY2tSZWdpc3RlcjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkNsb2NrcyAmIEFVWF9XVUNfQURJX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfT1NDQ1RSTF9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1REQ0lGX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfQU5BSUZfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19USU1FUl9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FJT0RJTzBfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19BSU9ESU8xX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfU01QSF9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1REQ19DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FEQ19DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1JFRl9DTE9DSykpOworCisgICAgYkNsb2NrU3RhdHVzID0gdHJ1ZTsKKworICAgIC8vCisgICAgLy8gUmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVycy4KKyAgICAvLworICAgIHVpMzJDbG9ja1JlZ2lzdGVyID0gSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX01PRENMS0VOMCk7CisKKyAgICAvLworICAgIC8vIENoZWNrIGFsbCByZXF1ZXN0ZWQgY2xvY2tzCisgICAgLy8KKyAgICBpZih1aTMyQ2xvY2tzICYgQVVYX1dVQ19BRElfQ0xPQ0spCisgICAgeworICAgICAgICBiQ2xvY2tTdGF0dXMgPSBiQ2xvY2tTdGF0dXMgJiYgKHVpMzJDbG9ja1JlZ2lzdGVyICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX01PRENMS0VOMF9BVVhfQURJNCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlKTsKKyAgICB9CisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfT1NDQ1RSTF9DTE9DSykKKyAgICB7CisgICAgICAgIGJDbG9ja1N0YXR1cyA9IGJDbG9ja1N0YXR1cyAmJiAodWkzMkNsb2NrUmVnaXN0ZXIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9EREkwX09TQyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlKTsKKyAgICB9CisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfVERDSUZfQ0xPQ0spCisgICAgeworICAgICAgICBiQ2xvY2tTdGF0dXMgPSBiQ2xvY2tTdGF0dXMgJiYgKHVpMzJDbG9ja1JlZ2lzdGVyICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX01PRENMS0VOMF9UREMgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiBmYWxzZSk7CisgICAgfQorICAgIGlmKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FOQUlGX0NMT0NLKQorICAgIHsKKyAgICAgICAgYkNsb2NrU3RhdHVzID0gYkNsb2NrU3RhdHVzICYmICh1aTMyQ2xvY2tSZWdpc3RlciAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19NT0RDTEtFTjBfQU5BSUYgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiBmYWxzZSk7CisgICAgfQorICAgIGlmKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1RJTUVSX0NMT0NLKQorICAgIHsKKyAgICAgICAgYkNsb2NrU3RhdHVzID0gYkNsb2NrU3RhdHVzICYmICh1aTMyQ2xvY2tSZWdpc3RlciAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19NT0RDTEtFTjBfVElNRVIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiBmYWxzZSk7CisgICAgfQorICAgIGlmKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FJT0RJTzBfQ0xPQ0spCisgICAgeworICAgICAgICBiQ2xvY2tTdGF0dXMgPSBiQ2xvY2tTdGF0dXMgJiYgKHVpMzJDbG9ja1JlZ2lzdGVyICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8wID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIDogZmFsc2UpOworICAgIH0KKyAgICBpZih1aTMyQ2xvY2tzICYgQVVYX1dVQ19BSU9ESU8xX0NMT0NLKQorICAgIHsKKyAgICAgICAgYkNsb2NrU3RhdHVzID0gYkNsb2NrU3RhdHVzICYmICh1aTMyQ2xvY2tSZWdpc3RlciAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19NT0RDTEtFTjBfQUlPRElPMSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlKTsKKyAgICB9CisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfU01QSF9DTE9DSykKKyAgICB7CisgICAgICAgIGJDbG9ja1N0YXR1cyA9IGJDbG9ja1N0YXR1cyAmJiAodWkzMkNsb2NrUmVnaXN0ZXIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9XVUNfTU9EQ0xLRU4wX1NNUEggPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiBmYWxzZSk7CisgICAgfQorICAgIGlmKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FEQ19DTE9DSykKKyAgICB7CisgICAgICAgIHVpMzJDbG9ja1JlZ2lzdGVyID0gSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX0FEQ0NMS0NUTCk7CisgICAgICAgIGJDbG9ja1N0YXR1cyA9IGJDbG9ja1N0YXR1cyAmJiAodWkzMkNsb2NrUmVnaXN0ZXIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9XVUNfQURDQ0xLQ1RMX0FDSyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlKTsKKyAgICB9CisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfVERDX0NMT0NLKQorICAgIHsKKyAgICAgICAgdWkzMkNsb2NrUmVnaXN0ZXIgPSBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fVERDQ0xLQ1RMKTsKKyAgICAgICAgYkNsb2NrU3RhdHVzID0gYkNsb2NrU3RhdHVzICYmICh1aTMyQ2xvY2tSZWdpc3RlciAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19URENDTEtDVExfQUNLID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIDogZmFsc2UpOworICAgIH0KKyAgICBpZih1aTMyQ2xvY2tzICYgQVVYX1dVQ19SRUZfQ0xPQ0spCisgICAgeworICAgICAgICB1aTMyQ2xvY2tSZWdpc3RlciA9IEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19SRUZDTEtDVEwpOworICAgICAgICBiQ2xvY2tTdGF0dXMgPSBiQ2xvY2tTdGF0dXMgJiYgKHVpMzJDbG9ja1JlZ2lzdGVyICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX1JFRkNMS0NUTF9BQ0sgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiBmYWxzZSk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGNsb2NrIHN0YXR1cy4KKyAgICAvLworICAgIHJldHVybiBiQ2xvY2tTdGF0dXMgPyBBVVhfV1VDX0NMT0NLX1JFQURZIDogQVVYX1dVQ19DTE9DS19PRkY7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb250cm9sIHRoZSBwb3dlciB0byB0aGUgQVVYIGRvbWFpbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQVVYV1VDUG93ZXJDdHJsKHVpbnQzMl90IHVpMzJQb3dlck1vZGUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyUG93ZXJNb2RlID09IEFVWF9XVUNfUE9XRVJfT0ZGKSB8fAorICAgICAgICAgICAodWkzMlBvd2VyTW9kZSA9PSBBVVhfV1VDX1BPV0VSX0RPV04pIHx8CisgICAgICAgICAgICh1aTMyUG93ZXJNb2RlID09IEFVWF9XVUNfUE9XRVJfQUNUSVZFKSk7CisKKyAgICAvLworICAgIC8vIFBvd2VyIG9uL29mZi4KKyAgICAvLworICAgIGlmKHVpMzJQb3dlck1vZGUgPT0gQVVYX1dVQ19QT1dFUl9PRkYpCisgICAgeworICAgICAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fUFdST0ZGUkVRKSA9IEFVWF9XVUNfUFdST0ZGUkVRX1JFUTsKKyAgICAgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX01DVUJVU0NUTCkgPSBBVVhfV1VDX01DVUJVU0NUTF9ESVNDT05ORUNUX1JFUTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fUFdST0ZGUkVRKSA9IDB4MDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFBvd2VyIGRvd24vYWN0aXZlLgorICAgIC8vCisgICAgaWYodWkzMlBvd2VyTW9kZSA9PSBBVVhfV1VDX1BPV0VSX0RPV04pCisgICAgeworICAgICAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fUFdSRFdOUkVRKSA9CisgICAgICAgICAgICBBVVhfV1VDX1BXUkRXTlJFUV9SRVE7CisgICAgICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19NQ1VCVVNDVEwpID0gQVVYX1dVQ19NQ1VCVVNDVExfRElTQ09OTkVDVF9SRVE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19QV1JEV05SRVEpID0gMHgwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF93dWMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF93dWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGY3YmQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3d1Yy5oCkBAIC0wLDAgKzEsMzU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX3d1Yy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMi0yNCAxNDowODo1NSArMDEwMCAoV2VkLCAyNCBGZWIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTc2NworKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBBVVggV2FrZXVwIENvbnRyb2xsZXIKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBhdXhfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGF1eHd1Y19hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQVVYX1dVQ19IX18KKyNkZWZpbmUgX19BVVhfV1VDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19hdXhfd3VjLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIEFVWFdVQ0Nsb2NrRW5hYmxlICAgICAgICAgICAgICAgTk9ST01fQVVYV1VDQ2xvY2tFbmFibGUKKyAgICAjZGVmaW5lIEFVWFdVQ0Nsb2NrRGlzYWJsZSAgICAgICAgICAgICAgTk9ST01fQVVYV1VDQ2xvY2tEaXNhYmxlCisgICAgI2RlZmluZSBBVVhXVUNDbG9ja1N0YXR1cyAgICAgICAgICAgICAgIE5PUk9NX0FVWFdVQ0Nsb2NrU3RhdHVzCisgICAgI2RlZmluZSBBVVhXVUNQb3dlckN0cmwgICAgICAgICAgICAgICAgIE5PUk9NX0FVWFdVQ1Bvd2VyQ3RybAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgQVVYIHBvd2VyIGNvbnRyb2wuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhfV1VDX1BPV0VSX09GRiAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfUE9XRVJfRE9XTiAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19QT1dFUl9BQ1RJVkUgICAgMHgwMDAwMDAwNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIEFVWCBwZXJpcGhlcmFscyBjbG9jayBjb250cm9sLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYX1dVQ19TTVBIX0NMT0NLICAgICAgKEFVWF9XVUNfTU9EQ0xLRU4wX1NNUEhfRU4pCisjZGVmaW5lIEFVWF9XVUNfQUlPRElPMF9DTE9DSyAgIChBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8wX0VOKQorI2RlZmluZSBBVVhfV1VDX0FJT0RJTzFfQ0xPQ0sgICAoQVVYX1dVQ19NT0RDTEtFTjBfQUlPRElPMV9FTikKKyNkZWZpbmUgQVVYX1dVQ19USU1FUl9DTE9DSyAgICAgKEFVWF9XVUNfTU9EQ0xLRU4wX1RJTUVSX0VOKQorI2RlZmluZSBBVVhfV1VDX0FOQUlGX0NMT0NLICAgICAoQVVYX1dVQ19NT0RDTEtFTjBfQU5BSUZfRU4pCisjZGVmaW5lIEFVWF9XVUNfVERDSUZfQ0xPQ0sgICAgIChBVVhfV1VDX01PRENMS0VOMF9URENfRU4pCisjZGVmaW5lIEFVWF9XVUNfT1NDQ1RSTF9DTE9DSyAgIChBVVhfV1VDX01PRENMS0VOMF9BVVhfRERJMF9PU0NfRU4pCisjZGVmaW5lIEFVWF9XVUNfQURJX0NMT0NLICAgICAgIChBVVhfV1VDX01PRENMS0VOMF9BVVhfQURJNF9FTikKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtfTUFTSyAgICAgMHgwMDAwMDBGRgorCisjZGVmaW5lIEFVWF9XVUNfVERDX0NMT0NLICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX1dVQ19BRENfQ0xPQ0sgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfV1VDX1JFRl9DTE9DSyAgICAgICAweDAwMDAwNDAwCisKKyNkZWZpbmUgQVVYX1dVQ19DTE9DS19PRkYgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBBVVhfV1VDX0NMT0NLX1VOU1RBQkxFICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfQ0xPQ0tfUkVBRFkgICAgIDB4MDAwMDAwMTEKKworI2RlZmluZSBBVVhfV1VDX0NMT0NLX0hJRlJFUSAgICAweDAwMDAwMDAwCisjZGVmaW5lIEFVWF9XVUNfQ0xPQ0tfTE9GUkVRICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIGNsb2NrcyBmb3IgcGVyaXBoZXJhbHMgaW4gdGhlIEFVWCBkb21haW4uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBlbmFibGUgc3BlY2lmaWMgY2xvY2tzIGluIHRoZSBBVVggZG9tYWluLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDbG9ja3MgaXMgYSBiaXRtYXAgb2YgY2xvY2tzIHRvIGVuYWJsZS4KKy8vISBVc2UgYSBiaXR3aXNlIE9SIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLy8hIC0gXHJlZiBBVVhfV1VDX0FESV9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX09TQ0NUUkxfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19URENJRl9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX0FOQUlGX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfVElNRVJfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19BSU9ESU8wX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfQUlPRElPMV9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1NNUEhfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19URENfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19BRENfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19SRUZfQ0xPQ0sKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgQVVYV1VDQ2xvY2tEaXNhYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFVWFdVQ0Nsb2NrRW5hYmxlKHVpbnQzMl90IHVpMzJDbG9ja3MpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGUgY2xvY2tzIGZvciBwZXJpcGhlcmFscyBpbiB0aGUgQVVYIGRvbWFpbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSBzcGVjaWZpYyBjbG9ja3MgaW4gdGhlIEFVWCBkb21haW4uCisvLyEKKy8vISBccGFyYW0gdWkzMkNsb2NrcyBhIGJpdG1hcCBvZiBjbG9ja3MgdG8gZGlzYWJsZS4KKy8vISBVc2UgYSBiaXR3aXNlIE9SIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLy8hIC0gXHJlZiBBVVhfV1VDX0FESV9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX09TQ0NUUkxfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19URENJRl9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX0FOQUlGX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfVElNRVJfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19BSU9ESU8wX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfQUlPRElPMV9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1NNUEhfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19URENfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19BRENfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19SRUZfQ0xPQ0sKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgQVVYV1VDQ2xvY2tFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQVVYV1VDQ2xvY2tEaXNhYmxlKHVpbnQzMl90IHVpMzJDbG9ja3MpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgc3RhdHVzIG9mIGEgY2xvY2suCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBwb2xsIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBjbG9jayBpbiB0aGUgQVVYCisvLyEgZG9tYWluLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDbG9ja3MgaXMgdGhlIGNsb2NrIGZvciB3aGljaCB0byByZXR1cm4gc3RhdHVzLgorLy8hIC0gXHJlZiBBVVhfV1VDX0FESV9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX09TQ0NUUkxfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19URENJRl9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX0FOQUlGX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfVElNRVJfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19BSU9ESU8wX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfQUlPRElPMV9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1NNUEhfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19URENfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19BRENfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19SRUZfQ0xPQ0sKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBjbG9jayBhcyBvbmUgb2YgdHdvIHN0YXRlczoKKy8vISAtIFxyZWYgQVVYX1dVQ19DTE9DS19PRkYKKy8vISAtIFxyZWYgQVVYX1dVQ19DTE9DS19SRUFEWQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEFVWFdVQ0Nsb2NrU3RhdHVzKHVpbnQzMl90IHVpMzJDbG9ja3MpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlcXVlc3QgYSBoaWdoIG9yIGxvdyBmcmVxdWVuY3kgY2xvY2sgc291cmNlLgorLy8hCisvLyEgVXNpbmcgdGhpcyBmdW5jdGlvbiBpdCBpcyBwb3NzaWJsZSB0byBtYWtlIGEgcmVxdWVzdCB0byB0aGUgU3lzdGVtCisvLyEgQ29udHJvbCB0byB1c2UgYSBoaWdoIG9yIGxvdyBmcmVxdWVuY3kgY2xvY2sgYXMgY2xvY2sgc291cmNlIGZvciB0aGUgQVVYCisvLyEgZG9tYWluLgorLy8hCisvLyEgXG5vdGUgQSBsb3cgZnJlcXVlbmN5IGNsb2NrIGlzIGFsd2F5cyAzMiBrSHosIHdoaWxlIGEgaGlnaCBmcmVxdWVuY3kgY2xvY2sKKy8vISBpcyByZWFsbHkgYSBsYXJnZSBzcGFuIG9mIGZyZXF1ZW5jaWVzIGRldGVybWluZWQgYnkgdGhlIGNsb2NrIHNvdXJjZSAoSGlnaAorLy8hIEZyZXF1ZW5jeSBvciBNZWRpdW0gRnJlcXVlbmN5KSBhbmQgdGhlIHNldHRpbmcgZm9yIHRoZSBjbG9jayBkaXZpZGVyIGZvcgorLy8hIHRoZSBBVVggZG9tYWluIGluIHRoZSBTeXN0ZW0gQ29udHJvbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2xvY2tGcmVxIGRldGVybWluZXMgdGhlIGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kuCisvLyEgLSBccmVmIEFVWF9XVUNfQ0xPQ0tfTE9GUkVRIDogUmVxdWVzdCBsb3cgZnJlcXVlbmN5IGNsb2NrIHNvdXJjZSBmb3IgQVVYIGRvbWFpbi4KKy8vISAtIFxyZWYgQVVYX1dVQ19DTE9DS19ISUZSRVEgOiBSZXF1ZXN0IGhpZ2ggZnJlcXVlbmN5IGNsb2NrIHNvdXJjZSBmb3IgQVVYIGRvbWFpbi4KKy8vIQorLy8hIFxyZXR1cm4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBVVhXVUNDbG9ja0ZyZXFSZXEodWludDMyX3QgdWkzMkNsb2NrRnJlcSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJDbG9ja0ZyZXEgPT0gQVVYX1dVQ19DTE9DS19ISUZSRVEpIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tGcmVxID09IEFVWF9XVUNfQ0xPQ0tfTE9GUkVRKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgcmVxdWVzdAorICAgIC8vCisgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX0NMS0xGUkVRKSA9IHVpMzJDbG9ja0ZyZXE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29udHJvbCB0aGUgcG93ZXIgdG8gdGhlIEFVWCBkb21haW4uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBzZXQgdGhlIHBvd2VyIG1vZGUgb2YgdGhlIGVudGlyZSBBVVggZG9tYWluLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQb3dlck1vZGUgY29udHJvbCB0aGUgZGVzaXJlZCBwb3dlciBtb2RlIGZvciB0aGUgQVVYIGRvbWFpbi4KKy8vISBUaGUgZG9tYWluIGhhcyB0aHJlZSBkaWZmZXJlbnQgcG93ZXIgbW9kZXM6CisvLyEgLSBccmVmIEFVWF9XVUNfUE9XRVJfT0ZGCisvLyEgLSBccmVmIEFVWF9XVUNfUE9XRVJfRE9XTgorLy8hIC0gXHJlZiBBVVhfV1VDX1BPV0VSX0FDVElWRQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBVVhXVUNQb3dlckN0cmwodWludDMyX3QgdWkzMlBvd2VyTW9kZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEZyZWV6ZSB0aGUgQVVYIElPcy4KKy8vIQorLy8hIFRvIHJldGFpbiB0aGUgdmFsdWVzIG9mIHRoZSBvdXRwdXQgSU9zIGR1cmluZyBhIHBvd2VyZG93biBvZiB0aGUgQVVYIGRvbWFpbgorLy8hIGFsbCBJTyBsYXRjaGVzIGluIHRoZSBBVVggZG9tYWluIHNob3VsZCBiZSBmcm96ZW4gaW4gdGhlaXIgY3VycmVudCBzdGF0ZS4KKy8vISBUaGlzIGVuc3VyZXMgdGhhdCBzb2Z0d2FyZSBjYW4gcmVnYWluIGNvbnRyb2wgb2YgdGhlIElPcyBhZnRlciBhIHBvd2VyZG93bgorLy8hIHdpdGhvdXQgdGhlIElPcyBmaXJzdCBmYWxsaW5nIGJhY2sgdG8gdGhlIGRlZmF1bHQgdmFsdWVzIChpLmUuIGlucHV0IGFuZAorLy8hIHB1bGwtdXApLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQVVYV1VDRnJlZXplRGlzYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FVWFdVQ0ZyZWV6ZUVuYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gU2V0IHRoZSBBVVggV1VDIGxhdGNoZXMgYXMgc3RhdGljLgorICAgIC8vCisgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX0FVWElPTEFUQ0gpID0gMHgwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBVbmZyZWV6ZSB0aGUgQVVYIElPcy4KKy8vIQorLy8hIFdoZW4gcmVzdGFydGluZyB0aGUgQVVYIGRvbWFpbiBhZnRlciBpdCBoYXMgZW50ZXJlZCBwb3dlcmRvd24gbW9kZSwgdGhlCisvLyEgc29mdHdhcmUgY2FuIHJlZ2FpbiBjb250cm9sIG9mIHRoZSBJT3MgYnkgc2V0dGluZyB0aGUgSU8gbGF0Y2hlcyBhcworLy8hIHRyYW5zcGFyZW50LgorLy8hCisvLyEgXG5vdGUgVGhlIElPcyBzaG91bGQgbm90IGJlIHVuZnJvemVuIGJlZm9yZSBzb2Z0d2FyZSBoYXMgcmVzdG9yZWQKKy8vISB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgSU8uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBVVhXVUNGcmVlemVFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBVVhXVUNGcmVlemVEaXNhYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBTZXQgdGhlIEFVWCBXVUMgbGF0Y2hlcyBhcyB0cmFuc3BhcmVudC4KKyAgICAvLworICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19BVVhJT0xBVENIKSA9IEFVWF9XVUNfQVVYSU9MQVRDSF9FTjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fQVVYV1VDQ2xvY2tFbmFibGUKKyAgICAgICAgI3VuZGVmICBBVVhXVUNDbG9ja0VuYWJsZQorICAgICAgICAjZGVmaW5lIEFVWFdVQ0Nsb2NrRW5hYmxlICAgICAgICAgICAgICAgUk9NX0FVWFdVQ0Nsb2NrRW5hYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhXVUNDbG9ja0Rpc2FibGUKKyAgICAgICAgI3VuZGVmICBBVVhXVUNDbG9ja0Rpc2FibGUKKyAgICAgICAgI2RlZmluZSBBVVhXVUNDbG9ja0Rpc2FibGUgICAgICAgICAgICAgIFJPTV9BVVhXVUNDbG9ja0Rpc2FibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWFdVQ0Nsb2NrU3RhdHVzCisgICAgICAgICN1bmRlZiAgQVVYV1VDQ2xvY2tTdGF0dXMKKyAgICAgICAgI2RlZmluZSBBVVhXVUNDbG9ja1N0YXR1cyAgICAgICAgICAgICAgIFJPTV9BVVhXVUNDbG9ja1N0YXR1cworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYV1VDUG93ZXJDdHJsCisgICAgICAgICN1bmRlZiAgQVVYV1VDUG93ZXJDdHJsCisgICAgICAgICNkZWZpbmUgQVVYV1VDUG93ZXJDdHJsICAgICAgICAgICAgICAgICBST01fQVVYV1VDUG93ZXJDdHJsCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19BVVhfV1VDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2Njcy9kcml2ZXJsaWIubGliIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2Njcy9kcml2ZXJsaWIubGliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODBlNDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vY2NzL2RyaXZlcmxpYi5saWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2Njcy9tYWtlZGVmcyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9jY3MvbWFrZWRlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2MTMzMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9jY3MvbWFrZWRlZnMKQEAgLTAsMCArMSwzIEBACitDT01QSUxFUl9UT09MID0gIi9jeWdkcml2ZS9jL3RpL0NDUzYuMi4wLjAwMDE5X3dpbjMyLWJldGEyL2Njc3Y2L3Rvb2xzL2NvbXBpbGVyL3RpLWNndC1hcm1fMTUuMTIuMS5MVFMvYmluL2FybWNsIgorQ09NUElMRVJfSU5DTCA9ICJDOi90aS9DQ1M2LjIuMC4wMDAxOV93aW4zMi1iZXRhMi9jY3N2Ni90b29scy9jb21waWxlci90aS1jZ3QtYXJtXzE1LjEyLjEuTFRTL2luY2x1ZGUiCitBUkNISVZFUl9UT09MID0gIi9jeWdkcml2ZS9jL3RpL0NDUzYuMi4wLjAwMDE5X3dpbjMyLWJldGEyL2Njc3Y2L3Rvb2xzL2NvbXBpbGVyL3RpLWNndC1hcm1fMTUuMTIuMS5MVFMvYmluL2FybWFyIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2djYy9kcml2ZXJsaWIuYSBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9nY2MvZHJpdmVybGliLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3NjI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9nY2MvZHJpdmVybGliLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2djYy9kcml2ZXJsaWIubGliIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2djYy9kcml2ZXJsaWIubGliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzYyNWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vZ2NjL2RyaXZlcmxpYi5saWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2djYy9tYWtlZGVmcyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9nY2MvbWFrZWRlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFlZTA0OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9nY2MvbWFrZWRlZnMKQEAgLTAsMCArMSwyIEBACitDT01QSUxFUl9UT09MID0gIi9jeWdkcml2ZS9jL3RpL0NDUzYuMi4wLjAwMDE5X3dpbjMyLWJldGEyL2Njc3Y2L3Rvb2xzL2NvbXBpbGVyL2djYy1hcm0tbm9uZS1lYWJpLTRfOS0yMDE1cTMvYmluL2FybS1ub25lLWVhYmktZ2NjIgorQVJDSElWRVJfVE9PTCA9ICIvY3lnZHJpdmUvYy90aS9DQ1M2LjIuMC4wMDAxOV93aW4zMi1iZXRhMi9jY3N2Ni90b29scy9jb21waWxlci9nY2MtYXJtLW5vbmUtZWFiaS00XzktMjAxNXEzL2Jpbi9hcm0tbm9uZS1lYWJpLWFyIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2lhci9kcml2ZXJsaWIubGliIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2lhci9kcml2ZXJsaWIubGliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmM2U5NzMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vaWFyL2RyaXZlcmxpYi5saWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2lhci9tYWtlZGVmcyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9pYXIvbWFrZWRlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkZjQzOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9pYXIvbWFrZWRlZnMKQEAgLTAsMCArMSwzIEBACitDT01QSUxFUl9UT09MID0gIi9jeWdkcml2ZS9jL1Byb2dyYW0gRmlsZXMgKHg4NikvSUFSIFN5c3RlbXMvSUFSIEVXQVJNdjcuNjAuMS9hcm0vYmluL2ljY2FybS5leGUiCitBUkNISVZFUl9UT09MID0gIi9jeWdkcml2ZS9jL1Byb2dyYW0gRmlsZXMgKHg4NikvSUFSIFN5c3RlbXMvSUFSIEVXQVJNdjcuNjAuMS9hcm0vYmluL2lhcmNoaXZlLmV4ZSIKK09CSl9NQU5JUF9UT09MID0gIi9jeWdkcml2ZS9jL1Byb2dyYW0gRmlsZXMgKHg4NikvSUFSIFN5c3RlbXMvSUFSIEVXQVJNdjcuNjAuMS9hcm0vYmluL2lvYmptYW5pcC5leGUiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4va2VpbC9kcml2ZXJsaWIubGliIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2tlaWwvZHJpdmVybGliLmxpYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQ5ZjFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2tlaWwvZHJpdmVybGliLmxpYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4va2VpbC9tYWtlZGVmcyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9rZWlsL21ha2VkZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YWM4YTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4va2VpbC9tYWtlZGVmcwpAQCAtMCwwICsxLDIgQEAKK0NPTVBJTEVSX1RPT0wgPSAiL2N5Z2RyaXZlL2MvS2VpbF92NS9BUk0vQVJNQ0MvYmluL2FybWNjIgorQVJDSElWRVJfVE9PTCA9ICIvY3lnZHJpdmUvYy9LZWlsX3Y1L0FSTS9BUk1DQy9iaW4vYXJtYXIiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY2NmZ3JlYWQuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NjZmdyZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyNjVmMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NjZmdyZWFkLmMKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGNjZmdyZWFkLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA4LTA0IDExOjQ0OjIwICswMjAwIChUdWUsIDA0IEF1ZyAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0MzI5CisqCisqICBEZXNjcmlwdGlvbjogICAgQVBJIGZvciByZWFkaW5nIENDRkcuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2NjZmdyZWFkLmg+CisKKy8vIFNlZSBjY2ZncmVhZC5oIGZvciBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY2NmZ3JlYWQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NjZmdyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhZWIyMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NjZmdyZWFkLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBjY2ZncmVhZC5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMS0wNyAyMDowODoyMiArMDEwMCAoVGh1LCAwNyBKYW4gMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTQwMAorKgorKiAgRGVzY3JpcHRpb246ICAgIEFQSSBmb3IgcmVhZGluZyBDQ0ZHLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBzeXN0ZW1fY29udHJvbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgY2NmZ3JlYWRfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19DQ0ZHUkVBRF9IX18KKyNkZWZpbmUgX19DQ0ZHUkVBRF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfY2NmZy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gR2VuZXJhbCBjb25zdGFudHMgYW5kIGRlZmluZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlYWQgRElTX0dQUkFNIGZyb20gQ0NGRy4KKy8vIQorLy8hIFxyZXR1cm4gVmFsdWUgb2YgQ0NGRyBmaWVsZCBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ0NGR1JlYWRfRElTX0dQUkFNKCB2b2lkICkKK3sKKyAgICByZXR1cm4gKCggSFdSRUcoIENDRkdfQkFTRSArIENDRkdfT19TSVpFX0FORF9ESVNfRkxBR1MgKSAmCisgICAgICAgIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19HUFJBTV9NICkgPj4KKyAgICAgICAgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNX1MgKSA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlYWQgRVhUX0xGX0NMS19ESU8gZnJvbSBDQ0ZHLgorLy8hCisvLyEgXHJldHVybiBWYWx1ZSBvZiBDQ0ZHIGZpZWxkIENDRkdfRVhUX0xGX0NMS19ESU8KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ0NGR1JlYWRfRVhUX0xGX0NMS19ESU8oIHZvaWQgKQoreworICAgIHJldHVybiAoKCBIV1JFRyggQ0NGR19CQVNFICsgQ0NGR19PX0VYVF9MRl9DTEsgKSAmCisgICAgICAgIENDRkdfRVhUX0xGX0NMS19ESU9fTSApID4+CisgICAgICAgIENDRkdfRVhUX0xGX0NMS19ESU9fUyApIDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgdGhlIHBvc3NpYmxlIHZhbHVlcyByZXR1cm5lZCBmcm9tIENDRkdSZWFkX1NDTEtfTEZfT1BUSU9OKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIENDRkdSRUFEX1NDTEtfTEZfT1BUSU9OX1hPU0NfSEZfRExGICggQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fWE9TQ19IRl9ETEYgPj4gQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fUyApCisjZGVmaW5lIENDRkdSRUFEX1NDTEtfTEZfT1BUSU9OX0VYVEVSTkFMX0xGICggQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fRVhURVJOQUxfTEYgPj4gQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fUyApCisjZGVmaW5lIENDRkdSRUFEX1NDTEtfTEZfT1BUSU9OX1hPU0NfTEYgICAgICggQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fWE9TQ19MRiAgICAgPj4gQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fUyApCisjZGVmaW5lIENDRkdSRUFEX1NDTEtfTEZfT1BUSU9OX1JDT1NDX0xGICAgICggQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fUkNPU0NfTEYgICAgPj4gQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fUyApCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlYWQgU0NMS19MRl9PUFRJT04gZnJvbSBDQ0ZHLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgQ0NGRyBmaWVsZCBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTiBmaWVsZC4KKy8vISBSZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBDQ0ZHUkVBRF9TQ0xLX0xGX09QVElPTl9YT1NDX0hGX0RMRgorLy8hIC0gXHJlZiBDQ0ZHUkVBRF9TQ0xLX0xGX09QVElPTl9FWFRFUk5BTF9MRgorLy8hIC0gXHJlZiBDQ0ZHUkVBRF9TQ0xLX0xGX09QVElPTl9YT1NDX0xGCisvLyEgLSBccmVmIENDRkdSRUFEX1NDTEtfTEZfT1BUSU9OX1JDT1NDX0xGCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitDQ0ZHUmVhZF9TQ0xLX0xGX09QVElPTiggdm9pZCApCit7CisgICAgcmV0dXJuICgoIEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fTU9ERV9DT05GICkgJgorICAgICAgICBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9NICkgPj4KKyAgICAgICAgQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fUyApIDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgdGhlIHBvc3NpYmxlIHZhbHVlcyByZXR1cm5lZCBmcm9tIENDRkdSZWFkX1hPU0NfRlJFUSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBDQ0ZHUkVBRF9YT1NDX0ZSRVFfMjRNICAgKCBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfMjRNICAgPj4gQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRX1MgKQorI2RlZmluZSBDQ0ZHUkVBRF9YT1NDX0ZSRVFfNDhNICAgKCBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfNDhNICAgPj4gQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRX1MgKQorI2RlZmluZSBDQ0ZHUkVBRF9YT1NDX0ZSRVFfSFBPU0MgKCBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfSFBPU0MgPj4gQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRX1MgKQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWFkIFhPU0NfRlJFUSBzZXR0aW5nIENDRkcuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVEgZmllbGQuCisvLyEgUmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgQ0NGR1JFQURfWE9TQ19GUkVRXzI0TQorLy8hIC0gXHJlZiBDQ0ZHUkVBRF9YT1NDX0ZSRVFfNDhNCisvLyEgLSBccmVmIENDRkdSRUFEX1hPU0NfRlJFUV9IUE9TQworLy8hCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitDQ0ZHUmVhZF9YT1NDX0ZSRVEoIHZvaWQgKQoreworICAgIHJldHVybiAoKCBIV1JFRyggQ0NGR19CQVNFICsgQ0NGR19PX01PREVfQ09ORiApICYKKyAgICAgICAgQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRX00gKSA+PgorICAgICAgICBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfUyApIDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0FVWF9TTVBIX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jY2ZncmVhZF9kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NjZmdyZWFkX2RvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMGM1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jY2ZncmVhZF9kb2MuaApAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgY2NmZ3JlYWRfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGNjZmdyZWFkX2FwaQorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX2NjZmdyZWFkIEludHJvZHVjdGlvbgorLy8hCisvLyEgVGhlIHZhbHVlcyBvZiBjdXN0b21lciBjb25maWd1cmF0aW9uIChDQ0ZHKSBzZXR0aW5ncyBpbiBmbGFzaCBhcmUgZGV0ZXJtaW5lZCBieSBjY2ZnLmMgYW5kIHR5cGljYWxseQorLy8hIGEgdXNlciBhcHBsaWNhdGlvbiBkb2VzIG5vdCBuZWVkIHRvIHJlYWQgdGhlc2UgQ0NGRyB2YWx1ZXMgYXMgdGhleSBhcmUgdXNlZCBtYWlubHkgZHVyaW5nIFJPTSBib290CisvLyEgYW5kIGRldmljZSB0cmltbWluZy4gSG93ZXZlciwgYSBzdWJzZXQgb2YgdGhlIENDRkcgc2V0dGluZ3MgbmVlZCB0byBiZSByZWFkIGJ5IGFwcGxpY2F0aW9uCisvLyEgY29kZSB0aHVzIERyaXZlckxpYiBwcm92aWRlcyB0aGlzIEFQSSB0byBhbGxvdyBlYXN5IHJlYWQgYWNjZXNzIHRvIHRoZXNlIHNwZWNpZmljIHNldHRpbmdzLgorLy8hCisvLyEgVGhlIHJlbWFpbmluZyBzZXR0aW5ncyBub3QgYWNjZXNzaWJsZSB0aHJvdWdoIHRoaXMgQVBJIGNhbiBvZiBjb3Vyc2UgYmUgcmVhZCBkaXJlY3RseSBhdCB0aGUgQ0NGRworLy8hIGFkZHJlc3NlcyBpbiB0aGUgZmxhc2ggKHN0YXJ0aW5nIGF0IENDRkdfQkFTRSkgdXNpbmcgdGhlIEhXUkVHIG1hY3JvIGFuZCB0aGUgcHJvdmlkZWQgZGVmaW5lcy4KKy8vISBDQ0ZHIHNldHRpbmdzIGFyZSBkb2N1bWVudGVkIGFzIHBhcnQgb2YgdGhlIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBpbiB0aGUgQ1BVIG1lbW9yeSBtYXAuCisvLyEKKy8vISBcbm90ZSBDQ0ZHIHNldHRpbmdzIGFyZSBsb2NhdGVkIGluIGZsYXNoIGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZCByZWFkLW9ubHkgZnJvbSBhbiBhcHBsaWNhdGlvbgorLy8hIHBvaW50LW9mLXZpZXcuCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NoaXBpbmZvLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jaGlwaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZTg5MTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jaGlwaW5mby5jCkBAIC0wLDAgKzEsMjQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgY2hpcGluZm8uYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMjQgMTU6NDI6MzMgKzAyMDAgKFR1ZSwgMjQgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDY0NjQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBDb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyByZXR1cm5pbmcgY2hpcCBpbmZvcm1hdGlvbi4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvY2hpcGluZm8uaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIENoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWCisgICAgI2RlZmluZSBDaGlwSW5mb19HZXRTdXBwb3J0ZWRQcm90b2NvbF9CViBOT1JPTV9DaGlwSW5mb19HZXRTdXBwb3J0ZWRQcm90b2NvbF9CVgorICAgICN1bmRlZiAgQ2hpcEluZm9fR2V0UGFja2FnZVR5cGUKKyAgICAjZGVmaW5lIENoaXBJbmZvX0dldFBhY2thZ2VUeXBlICAgICAgICAgTk9ST01fQ2hpcEluZm9fR2V0UGFja2FnZVR5cGUKKyAgICAjdW5kZWYgIENoaXBJbmZvX0dldENoaXBUeXBlCisgICAgI2RlZmluZSBDaGlwSW5mb19HZXRDaGlwVHlwZSAgICAgICAgICAgIE5PUk9NX0NoaXBJbmZvX0dldENoaXBUeXBlCisgICAgI3VuZGVmICBDaGlwSW5mb19HZXRDaGlwRmFtaWx5CisgICAgI2RlZmluZSBDaGlwSW5mb19HZXRDaGlwRmFtaWx5ICAgICAgICAgIE5PUk9NX0NoaXBJbmZvX0dldENoaXBGYW1pbHkKKyAgICAjdW5kZWYgIENoaXBJbmZvX0dldEh3UmV2aXNpb24KKyAgICAjZGVmaW5lIENoaXBJbmZvX0dldEh3UmV2aXNpb24gICAgICAgICAgTk9ST01fQ2hpcEluZm9fR2V0SHdSZXZpc2lvbgorICAgICN1bmRlZiAgVGhpc0NvZGVJc0J1aWx0Rm9yQ0MyNnh4SHdSZXYyMkFuZExhdGVyX0hhbHRJZlZpb2xhdGVkCisgICAgI2RlZmluZSBUaGlzQ29kZUlzQnVpbHRGb3JDQzI2eHhId1JldjIyQW5kTGF0ZXJfSGFsdElmVmlvbGF0ZWQgTk9ST01fVGhpc0NvZGVJc0J1aWx0Rm9yQ0MyNnh4SHdSZXYyMkFuZExhdGVyX0hhbHRJZlZpb2xhdGVkCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitQcm90b2NvbEJpdFZlY3Rvcl90CitDaGlwSW5mb19HZXRTdXBwb3J0ZWRQcm90b2NvbF9CViggdm9pZCApCit7CisgICByZXR1cm4gKChQcm90b2NvbEJpdFZlY3Rvcl90KSggSFdSRUcoIFBSQ01fQkFTRSArIDB4MUQ0ICkgJiAweDBFICkpOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDaGlwSW5mb19HZXRQYWNrYWdlVHlwZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorUGFja2FnZVR5cGVfdAorQ2hpcEluZm9fR2V0UGFja2FnZVR5cGUoIHZvaWQgKQoreworICAgUGFja2FnZVR5cGVfdCBwYWNrVHlwZSA9IChQYWNrYWdlVHlwZV90KSgoCisgICAgICBIV1JFRyggRkNGRzFfQkFTRSArIEZDRkcxX09fVVNFUl9JRCAgICAgKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX1VTRVJfSURfUEtHX00gKSA+PgorICAgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9VU0VSX0lEX1BLR19TICkgOworCisgICBpZiAoKCBwYWNrVHlwZSA8IFBBQ0tBR0VfNHg0ICApIHx8CisgICAgICAgKCBwYWNrVHlwZSA+IFBBQ0tBR0VfV0NTUCApICAgICkKKyAgIHsKKyAgICAgIHBhY2tUeXBlID0gUEFDS0FHRV9Vbmtub3duOworICAgfQorCisgICByZXR1cm4gKCBwYWNrVHlwZSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ2hpcEluZm9fR2V0Q2hpcEZhbWlseSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQ2hpcEZhbWlseV90CitDaGlwSW5mb19HZXRDaGlwRmFtaWx5KCB2b2lkICkKK3sKKyAgIENoaXBGYW1pbHlfdCAgIGNoaXBGYW0gID0gRkFNSUxZX1Vua25vd24gIDsKKyAgIHVpbnQzMl90ICAgICAgIHdhZmVySWQgICAgICAgICAgICAgICAgICAgIDsKKworICAgd2FmZXJJZCA9ICgoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19JQ0VQSUNLX0RFVklDRV9JRCApICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0lDRVBJQ0tfREVWSUNFX0lEX1dBRkVSX0lEX00gKSA+PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfSUNFUElDS19ERVZJQ0VfSURfV0FGRVJfSURfUyApIDsKKworICAgaWYgKCB3YWZlcklkID09IDB4Qjk5QSApIHsKKyAgICAgIGlmICggQ2hpcEluZm9fR2V0RGV2aWNlSWRId1JldkNvZGUoKSA9PSAweEIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwRmFtID0gRkFNSUxZX0NDMjZ4eF9SMiAgICA7CisgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpcEZhbSA9IEZBTUlMWV9DQzI2eHggICAgICAgOworICAgICAgfQorICAgfSBlbHNlIGlmICggd2FmZXJJZCA9PSAweEI5QkUgKSAgY2hpcEZhbSA9IEZBTUlMWV9DQzEzeHggICAgICAgOworICAgZWxzZSBpZiAoICAgd2FmZXJJZCA9PSAweEJCNDEgKSAgY2hpcEZhbSA9IEZBTUlMWV9DQzI2eHhfQWdhICAgOworICAgZWxzZSBpZiAoICAgd2FmZXJJZCA9PSAweEJCMjAgKSAgY2hpcEZhbSA9IEZBTUlMWV9DQzI2eHhfTGl6ICAgOworCisgICByZXR1cm4gKCBjaGlwRmFtICk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENoaXBJbmZvX0dldENoaXBUeXBlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitDaGlwVHlwZV90CitDaGlwSW5mb19HZXRDaGlwVHlwZSggdm9pZCApCit7CisgICBDaGlwVHlwZV90IGNoaXBUeXBlICAgICAgPSBDSElQX1RZUEVfVW5rbm93biA7CisgICB1aW50MzJfdCAgIGZjZmcxVXNlcklkICAgPSBDaGlwSW5mb19HZXRVc2VySWQoKTsKKyAgIHVpbnQzMl90ICAgZmNmZzFQcm90b2NvbCA9ICgoIGZjZmcxVXNlcklkICYgRkNGRzFfVVNFUl9JRF9QUk9UT0NPTF9NICkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfVVNFUl9JRF9QUk9UT0NPTF9TICkgOworCisgICBzd2l0Y2goIENoaXBJbmZvX0dldENoaXBGYW1pbHkoKSApIHsKKworICAgY2FzZSBGQU1JTFlfQ0MyNnh4IDoKKyAgICAgIHN3aXRjaCAoIGZjZmcxUHJvdG9jb2wgKSB7CisgICAgICBjYXNlIDB4MiA6CisgICAgICAgICBjaGlwVHlwZSA9IENISVBfVFlQRV9DQzI2MjAgOworICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDB4NCA6CisgICAgICAgICBjaGlwVHlwZSA9IENISVBfVFlQRV9DQzI2MzAgOworICAgICAgY2FzZSAweDEgOgorICAgICAgY2FzZSAweDkgOgorICAgICAgICAgY2hpcFR5cGUgPSBDSElQX1RZUEVfQ0MyNjQwIDsKKyAgICAgICAgIGlmICggZmNmZzFVc2VySWQgJiAoIDEgPDwgMjMgKSkgeworICAgICAgICAgICAgY2hpcFR5cGUgPSBDSElQX1RZUEVfQ1VTVE9NXzE7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMHhGIDoKKyAgICAgICAgIGNoaXBUeXBlID0gQ0hJUF9UWVBFX0NDMjY1MCA7CisgICAgICAgICBpZiAoIGZjZmcxVXNlcklkICYgKCAxIDw8IDI0ICkpIHsKKyAgICAgICAgICAgIGNoaXBUeXBlID0gQ0hJUF9UWVBFX0NVU1RPTV8wOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgZGVmYXVsdCA6CisgICAgICBjaGlwVHlwZSA9IENISVBfVFlQRV9Vbmtub3duIDsKKyAgICAgIGJyZWFrOworICAgfQorCisgICByZXR1cm4gKCBjaGlwVHlwZSApOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDaGlwSW5mb19HZXRId1JldmlzaW9uKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitId1JldmlzaW9uX3QKK0NoaXBJbmZvX0dldEh3UmV2aXNpb24oIHZvaWQgKQoreworICAgSHdSZXZpc2lvbl90ICAgaHdSZXYgICAgICAgPSBIV1JFVl9Vbmtub3duICAgICAgICAgICAgICAgICAgICAgOworICAgdWludDMyX3QgICAgICAgZmNmZzFSZXYgICAgPSBDaGlwSW5mb19HZXREZXZpY2VJZEh3UmV2Q29kZSgpICAgOworICAgdWludDMyX3QgICAgICAgbWlub3JId1JldiAgPSBDaGlwSW5mb19HZXRNaW5vckh3UmV2KCkgICAgICAgICAgOworCisgICBzd2l0Y2goIENoaXBJbmZvX0dldENoaXBGYW1pbHkoKSApIHsKKyAgIGNhc2UgRkFNSUxZX0NDMjZ4eCA6CisgICAgICBzd2l0Y2ggKCBmY2ZnMVJldiApIHsKKyAgICAgIGNhc2UgMSA6IC8vIENDMjZ4eCBQRzEuMAorICAgICAgICAgaHdSZXYgPSBIV1JFVl8xXzA7CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMyA6IC8vIENDMjZ4eCBQRzIuMAorICAgICAgICAgaHdSZXYgPSBIV1JFVl8yXzA7CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgNyA6IC8vIENDMjZ4eCBQRzIuMQorICAgICAgICAgaHdSZXYgPSBIV1JFVl8yXzE7CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgOCA6IC8vIENDMjZ4eCBQRzIuMiAob3IgbGF0ZXIpCisgICAgICAgICBod1JldiA9IChId1JldmlzaW9uX3QpKCgodWludDMyX3QpSFdSRVZfMl8yICkgKyBtaW5vckh3UmV2ICk7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgY2FzZSBGQU1JTFlfQ0MxM3h4IDoKKyAgICAgIHN3aXRjaCAoIGZjZmcxUmV2ICkgeworICAgICAgY2FzZSAwIDogLy8gQ0MxM3h4IFBHMS4wCisgICAgICAgICBod1JldiA9IEhXUkVWXzFfMDsKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAyIDogLy8gQ0MxM3h4IFBHMi4wIChvciBsYXRlcikKKyAgICAgICAgIGh3UmV2ID0gKEh3UmV2aXNpb25fdCkoKCh1aW50MzJfdClIV1JFVl8yXzAgKSArIG1pbm9ySHdSZXYgKTsKKyAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICBjYXNlIEZBTUlMWV9DQzI2eHhfTGl6IDoKKyAgIGNhc2UgRkFNSUxZX0NDMjZ4eF9BZ2EgOgorICAgICAgc3dpdGNoICggZmNmZzFSZXYgKSB7CisgICAgICBjYXNlIDAgOiAvLyBDQzI2eHhfTGl6IG9yIENDMjZ4eF9BZ2EgUEcxLjAgKG9yIGxhdGVyKQorICAgICAgICAgaHdSZXYgPSAoSHdSZXZpc2lvbl90KSgoKHVpbnQzMl90KUhXUkVWXzFfMCApICsgbWlub3JId1JldiApOworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgRkFNSUxZX0NDMjZ4eF9SMiAgOgorICAgICAgaHdSZXYgPSAoSHdSZXZpc2lvbl90KSgoKHVpbnQzMl90KUhXUkVWXzFfMCApICsgbWlub3JId1JldiApOworICAgICAgYnJlYWs7CisgICBkZWZhdWx0IDoKKyAgICAgIC8vIEdDQyBnaXZlcyB3YXJuaW5nIGlmIG5vdCBoYW5kbGluZyBhbGwgb3B0aW9ucyBleHBsaWNpdGx5IGluIGEgInN3aXRjaCIgb24gYSB2YXJpYWJsZSBvZiB0eXBlICJlbnVtIgorICAgICAgYnJlYWs7CisgICB9CisKKyAgIHJldHVybiAoIGh3UmV2ICk7Cit9CisKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBUaGlzQ29kZUlzQnVpbHRGb3JDQzI2eHhId1JldjIyQW5kTGF0ZXJfSGFsdElmVmlvbGF0ZWQoKQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVGhpc0NvZGVJc0J1aWx0Rm9yQ0MyNnh4SHdSZXYyMkFuZExhdGVyX0hhbHRJZlZpb2xhdGVkKCB2b2lkICkKK3sKKyAgIGlmICgoICEgQ2hpcEluZm9fQ2hpcEZhbWlseUlzQ0MyNnh4KCkgICAgKSB8fAorICAgICAgICggISBDaGlwSW5mb19Id1JldmlzaW9uSXNfR1RFUV8yXzIoKSApICAgICkKKyAgIHsKKyAgICAgIHdoaWxlKDEpCisgICAgICB7CisgICAgICAgICAvLworICAgICAgICAgLy8gVGhpcyBkcml2ZXJsaWIgdmVyc2lvbiBpcyBmb3IgQ0MyNnh4IFBHMi4yIGFuZCBsYXRlcgorICAgICAgICAgLy8gRG8gbm90aGluZyAtIHN0YXkgaGVyZSBmb3JldmVyCisgICAgICAgICAvLworICAgICAgfQorICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY2hpcGluZm8uaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NoaXBpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNjMjVmMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NoaXBpbmZvLmgKQEAgLTAsMCArMSw2MzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBjaGlwaW5mby5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0yNCAxNTo0MjozMyArMDIwMCAoVHVlLCAyNCBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjQ2NAorKgorKiAgRGVzY3JpcHRpb246ICAgIENvbGxlY3Rpb24gb2YgZnVuY3Rpb25zIHJldHVybmluZyBjaGlwIGluZm9ybWF0aW9uLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBzeXN0ZW1fY29udHJvbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgQ2hpcEluZm8KKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0NISVBfSU5GT19IX18KKyNkZWZpbmUgX19DSElQX0lORk9fSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ZjZmcxLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIENoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWIE5PUk9NX0NoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWCisgICAgI2RlZmluZSBDaGlwSW5mb19HZXRQYWNrYWdlVHlwZSAgICAgICAgIE5PUk9NX0NoaXBJbmZvX0dldFBhY2thZ2VUeXBlCisgICAgI2RlZmluZSBDaGlwSW5mb19HZXRDaGlwVHlwZSAgICAgICAgICAgIE5PUk9NX0NoaXBJbmZvX0dldENoaXBUeXBlCisgICAgI2RlZmluZSBDaGlwSW5mb19HZXRDaGlwRmFtaWx5ICAgICAgICAgIE5PUk9NX0NoaXBJbmZvX0dldENoaXBGYW1pbHkKKyAgICAjZGVmaW5lIENoaXBJbmZvX0dldEh3UmV2aXNpb24gICAgICAgICAgTk9ST01fQ2hpcEluZm9fR2V0SHdSZXZpc2lvbgorICAgICNkZWZpbmUgVGhpc0NvZGVJc0J1aWx0Rm9yQ0MyNnh4SHdSZXYyMkFuZExhdGVyX0hhbHRJZlZpb2xhdGVkIE5PUk9NX1RoaXNDb2RlSXNCdWlsdEZvckNDMjZ4eEh3UmV2MjJBbmRMYXRlcl9IYWx0SWZWaW9sYXRlZAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVudW1lcmF0aW9uIGlkZW50aWZ5aW5nIHRoZSBwcm90b2NvbHMgc3VwcG9ydGVkLgorLy8hCisvLyEgXG5vdGUKKy8vISBUaGlzIGlzIGEgYml0IHZlY3RvciBlbnVtZXJhdGlvbiB0aGF0IGluZGljYXRlcyBzdXBwb3J0ZWQgcHJvdG9jb2xzLgorLy8hIEUuZzogMHgwNiBtZWFucyB0aGF0IHRoZSBjaGlwIHN1cHBvcnRzIGJvdGggQkxFIGFuZCBJRUVFIDgwMi4xNS40CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordHlwZWRlZiBlbnVtIHsKKyAgIFBST1RPQ09MX1Vua25vd24gICAgICAgICAgPSAwICAgLCAvLyE8IE5vbmUgb2YgdGhlIGtub3duIHByb3RvY29scyBhcmUgc3VwcG9ydGVkLgorICAgUFJPVE9DT0xCSVRfQkxFICAgICAgICAgICA9IDB4MDIsIC8vITwgQml0WzFdIHNldCwgaW5kaWNhdGVzIHRoYXQgQmx1ZXRvb3RoIExvdyBFbmVyZ3kgaXMgc3VwcG9ydGVkLgorICAgUFJPVE9DT0xCSVRfSUVFRV84MDJfMTVfNCA9IDB4MDQsIC8vITwgQml0WzJdIHNldCwgaW5kaWNhdGVzIHRoYXQgSUVFRSA4MDIuMTUuNCBpcyBzdXBwb3J0ZWQuCisgICBQUk9UT0NPTEJJVF9Qcm9wcmlldGFyeSAgID0gMHgwOCAgLy8hPCBCaXRbM10gc2V0LCBpbmRpY2F0ZXMgdGhhdCBwcm9wcmlldGFyeSBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZC4KK30gUHJvdG9jb2xCaXRWZWN0b3JfdDsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyBiaXQgdmVjdG9yIHNob3dpbmcgc3VwcG9ydGVkIHByb3RvY29scy4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxyZWYgUHJvdG9jb2xCaXRWZWN0b3JfdCB3aGljaCBpcyBhIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBzdXBwb3J0ZWQgcHJvdG9jb2xzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBQcm90b2NvbEJpdFZlY3Rvcl90IENoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWKCB2b2lkICk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoZSBjaGlwIHN1cHBvcnRzIHRoZSBCTEUgcHJvdG9jb2wuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIHN1cHBvcnRpbmcgdGhlIEJMRSBwcm90b2NvbCwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19TdXBwb3J0c0JMRSggdm9pZCApCit7CisgICByZXR1cm4gKCggQ2hpcEluZm9fR2V0U3VwcG9ydGVkUHJvdG9jb2xfQlYoKSAmIFBST1RPQ09MQklUX0JMRSApICE9IDAgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoZSBjaGlwIHN1cHBvcnRzIHRoZSBJRUVFIDgwMi4xNS40IHByb3RvY29sLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiBzdXBwb3J0aW5nIHRoZSBJRUVFIDgwMi4xNS40IHByb3RvY29sLCBcYyBmYWxzZSBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0NoaXBJbmZvX1N1cHBvcnRzSUVFRV84MDJfMTVfNCggdm9pZCApCit7CisgICByZXR1cm4gKCggQ2hpcEluZm9fR2V0U3VwcG9ydGVkUHJvdG9jb2xfQlYoKSAmIFBST1RPQ09MQklUX0lFRUVfODAyXzE1XzQgKSAhPSAwICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2hpcCBzdXBwb3J0cyBwcm9wcmlhdGFyeSBwcm90b2NvbHMuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIHN1cHBvcnRpbmcgcHJvcHJpYXRhcnkgcHJvdG9jb2xzLCBcYyBmYWxzZSBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0NoaXBJbmZvX1N1cHBvcnRzUFJPUFJJRVRBUlkoIHZvaWQgKQoreworICAgcmV0dXJuICgoIENoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWKCkgJiBQUk9UT0NPTEJJVF9Qcm9wcmlldGFyeSApICE9IDAgKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBQYWNrYWdlIHR5cGUgZW51bWVyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit0eXBlZGVmIGVudW0geworICAgUEFDS0FHRV9Vbmtub3duICAgPSAtMSwgLy8hPCAtMSBtZWFucyB0aGF0IGN1cnJlbnQgY2hpcCB0eXBlIGlzIHVua25vd24uCisgICBQQUNLQUdFXzR4NCAgICAgICA9ICAwLCAvLyE8ICAwIG1lYW5zIHRoYXQgdGhpcyBpcyBhIDR4NG1tIGNoaXAuCisgICBQQUNLQUdFXzV4NSAgICAgICA9ICAxLCAvLyE8ICAxIG1lYW5zIHRoYXQgdGhpcyBpcyBhIDV4NW1tIGNoaXAuCisgICBQQUNLQUdFXzd4NyAgICAgICA9ICAyLCAvLyE8ICAyIG1lYW5zIHRoYXQgdGhpcyBpcyBhIDd4N21tIGNoaXAuCisgICBQQUNLQUdFX1dBRkVSICAgICA9ICAzLCAvLyE8ICAzIG1lYW5zIHRoYXQgdGhpcyBpcyBhIHdhZmVyIHNhbGUgY2hpcCAobmFrZWQgZGllKS4KKyAgIFBBQ0tBR0VfV0NTUCAgICAgID0gIDQgIC8vITwgIDQgbWVhbnMgdGhhdCB0aGlzIGlzIGEgV0NTUCBjaGlwIChmbGlwIGNoaXApLgorfSBQYWNrYWdlVHlwZV90OworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHBhY2thZ2UgdHlwZS4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxyZWYgUGFja2FnZVR5cGVfdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBQYWNrYWdlVHlwZV90IENoaXBJbmZvX0dldFBhY2thZ2VUeXBlKCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGEgNHg0bW0gY2hpcC4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgdGhpcyBpcyBhIDR4NG1tIGNoaXAsIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fUGFja2FnZVR5cGVJczR4NCggdm9pZCApCit7CisgICByZXR1cm4gKCBDaGlwSW5mb19HZXRQYWNrYWdlVHlwZSgpID09IFBBQ0tBR0VfNHg0ICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGEgNXg1bW0gY2hpcC4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgdGhpcyBpcyBhIDV4NW1tIGNoaXAsIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fUGFja2FnZVR5cGVJczV4NSggdm9pZCApCit7CisgICByZXR1cm4gKCBDaGlwSW5mb19HZXRQYWNrYWdlVHlwZSgpID09IFBBQ0tBR0VfNXg1ICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGEgN3g3bW0gY2hpcC4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgdGhpcyBpcyBhIDd4N21tIGNoaXAsIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fUGFja2FnZVR5cGVJczd4Nyggdm9pZCApCit7CisgICByZXR1cm4gKCBDaGlwSW5mb19HZXRQYWNrYWdlVHlwZSgpID09IFBBQ0tBR0VfN3g3ICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGEgd2FmZXIgc2FsZSBjaGlwIChuYWtlZCBkaWUpLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGlzIGlzIGEgd2FmZXIgc2FsZSBjaGlwLCBcYyBmYWxzZSBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0NoaXBJbmZvX1BhY2thZ2VUeXBlSXNXQUZFUiggdm9pZCApCit7CisgICByZXR1cm4gKCBDaGlwSW5mb19HZXRQYWNrYWdlVHlwZSgpID09IFBBQ0tBR0VfV0FGRVIgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYSBXQ1NQIGNoaXAgKGZsaXAgY2hpcCkuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIHRoaXMgaXMgYSBXQ1NQIGNoaXAsIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fUGFja2FnZVR5cGVJc1dDU1AoIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0UGFja2FnZVR5cGUoKSA9PSBQQUNLQUdFX1dDU1AgKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSBpbnRlcm5hbCBjaGlwIEhXIHJldmlzaW9uIGNvZGUuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyB0aGUgaW50ZXJuYWwgY2hpcCBIVyByZXZpc2lvbiBjb2RlIChpbiByYW5nZSAwLTE1KQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitDaGlwSW5mb19HZXREZXZpY2VJZEh3UmV2Q29kZSggdm9pZCApCit7CisgICAvLyBSZXR1cm5zIEh3UmV2Q29kZSA9IEZDRkcxX09fSUNFUElDS19ERVZJQ0VfSURbMzE6MjhdCisgICByZXR1cm4gKCBIV1JFRyggRkNGRzFfQkFTRSArIEZDRkcxX09fSUNFUElDS19ERVZJQ0VfSUQgKSA+PiAyOCApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIG1pbm9yIGhhcmR3YXJlIHJldmlzaW9uIG51bWJlcgorLy8hCisvLyEgVGhlIG1pbm9yIHJldmlzaW9uIG51bWJlciBpcyBzZXQgdG8gMCBmb3IgdGhlIGZpcnN0IG1hcmtldCByZWxlYXNlZCBjaGlwCisvLyEgYW5kIHRoZXJlYWZ0ZXIgaW5jcmVtZW50ZWQgYnkgMSBmb3IgZWFjaCBtaW5vciBoYXJkd2FyZSBjaGFuZ2UuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyB0aGUgbWlub3IgaGFyZHdhcmUgcmV2aXNpb24gbnVtYmVyIChpbiByYW5nZSAwLTEyNykKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0NoaXBJbmZvX0dldE1pbm9ySHdSZXYoIHZvaWQgKQoreworICAgdWludDMyX3QgbWlub3JSZXYgPSAoKCBIV1JFRyggRkNGRzFfQkFTRSArIEZDRkcxX09fTUlTQ19DT05GXzEgKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX01JU0NfQ09ORl8xX0RFVklDRV9NSU5PUl9SRVZfTSApID4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX01JU0NfQ09ORl8xX0RFVklDRV9NSU5PUl9SRVZfUyApIDsKKworICAgaWYgKCBtaW5vclJldiA+PSAweDgwICkgeworICAgICAgbWlub3JSZXYgPSAwOworICAgfQorCisgICByZXR1cm4oIG1pbm9yUmV2ICk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgMzIgYml0cyBVU0VSX0lEIGZpZWxkCisvLyEKKy8vISBIb3cgdG8gZGVjb2RlIHRoZSBVU0VSX0lEIGZpbGVkIGlzIGRlc2NyaWJlZCBpbiB0aGUgVGVjaG5pY2FsIFJlZmVyZW5jZSBNYW51YWwgKFRSTSkKKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIHRoZSB0aGUgMzIgYml0cyBVU0VSX0lEIGZpZWxkCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitDaGlwSW5mb19HZXRVc2VySWQoIHZvaWQgKQoreworICAgcmV0dXJuICggSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX1VTRVJfSUQgKSk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hpcCB0eXBlIGVudW1lcmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordHlwZWRlZiBlbnVtIHsKKyAgIENISVBfVFlQRV9Vbmtub3duICAgICAgID0gLTEsIC8vITwgLTEgbWVhbnMgdGhhdCB0aGUgY2hpcCB0eXBlIGlzIHVua25vd24uCisgICBDSElQX1RZUEVfQ0MxMzEwICAgICAgICA9ICAwLCAvLyE8ICAwIG1lYW5zIHRoYXQgdGhpcyBpcyBhIENDMTMxMCBjaGlwLgorICAgQ0hJUF9UWVBFX0NDMTM1MCAgICAgICAgPSAgMSwgLy8hPCAgMSBtZWFucyB0aGF0IHRoaXMgaXMgYSBDQzEzNTAgY2hpcC4KKyAgIENISVBfVFlQRV9DQzI2MjAgICAgICAgID0gIDIsIC8vITwgIDIgbWVhbnMgdGhhdCB0aGlzIGlzIGEgQ0MyNjIwIGNoaXAuCisgICBDSElQX1RZUEVfQ0MyNjMwICAgICAgICA9ICAzLCAvLyE8ICAzIG1lYW5zIHRoYXQgdGhpcyBpcyBhIENDMjYzMCBjaGlwLgorICAgQ0hJUF9UWVBFX0NDMjY0MCAgICAgICAgPSAgNCwgLy8hPCAgNCBtZWFucyB0aGF0IHRoaXMgaXMgYSBDQzI2NDAgY2hpcC4KKyAgIENISVBfVFlQRV9DQzI2NTAgICAgICAgID0gIDUsIC8vITwgIDUgbWVhbnMgdGhhdCB0aGlzIGlzIGEgQ0MyNjUwIGNoaXAuCisgICBDSElQX1RZUEVfQ1VTVE9NXzAgICAgICA9ICA2LCAvLyE8ICA2IG1lYW5zIHRoYXQgdGhpcyBpcyBhIENVU1RPTV8wIGNoaXAuCisgICBDSElQX1RZUEVfQ1VTVE9NXzEgICAgICA9ICA3ICAvLyE8ICA3IG1lYW5zIHRoYXQgdGhpcyBpcyBhIENVU1RPTV8xIGNoaXAuCit9IENoaXBUeXBlX3Q7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgY2hpcCB0eXBlLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXHJlZiBDaGlwVHlwZV90CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIENoaXBUeXBlX3QgQ2hpcEluZm9fR2V0Q2hpcFR5cGUoIHZvaWQgKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGlwIGZhbWlseSBlbnVtZXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3R5cGVkZWYgZW51bSB7CisgICBGQU1JTFlfVW5rbm93biAgICAgICA9IC0xLCAvLyE8IC0xIG1lYW5zIHRoYXQgdGhlIGNoaXAncyBmYW1pbHkgbWVtYmVyIGlzIHVua25vd24uCisgICBGQU1JTFlfQ0MyNnh4ICAgICAgICA9ICAwLCAvLyE8ICAwIG1lYW5zIHRoYXQgdGhlIGNoaXAgaXMgYSBDQzI2eDAgZmFtaWx5IG1lbWJlci4KKyAgIEZBTUlMWV9DQzEzeHggICAgICAgID0gIDEsIC8vITwgIDEgbWVhbnMgdGhhdCB0aGUgY2hpcCBpcyBhIENDMTN4MCBmYW1pbHkgbWVtYmVyLgorICAgRkFNSUxZX0NDMjZ4eF9MaXogICAgPSAgMiwgLy8hPCAgMiBtZWFucyB0aGF0IHRoZSBjaGlwIGlzIGEgQ0MyNngxIGZhbWlseSBtZW1iZXIuCisgICBGQU1JTFlfQ0MyNnh4X0FnYSAgICA9ICAzLCAvLyE8ICAzIG1lYW5zIHRoYXQgdGhlIGNoaXAgaXMgYSBDQ3h4eDIveHh4NCBmYW1pbHkgbWVtYmVyLgorICAgRkFNSUxZX0NDMjZ4eF9SMiAgICAgPSAgNCAgLy8hPCAgNCBtZWFucyB0aGF0IHRoZSBjaGlwIGlzIGEgQ0MyNngwX1IyIGZhbWlseSAobmV3IFJPTSBjb250ZW50cykuCit9IENoaXBGYW1pbHlfdDsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyBjaGlwIGZhbWlseSBtZW1iZXIuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBccmVmIENoaXBGYW1pbHlfdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBDaGlwRmFtaWx5X3QgQ2hpcEluZm9fR2V0Q2hpcEZhbWlseSggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgdGhpcyBjaGlwIGlzIG1lbWJlciBvZiB0aGUgQ0MyNnh4IGZhbWlseS4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgdGhpcyBjaGlwIGlzIG1lbWJlciBvZiB0aGUgQ0MyNnh4IGZhbWlseSwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19DaGlwRmFtaWx5SXNDQzI2eHgoIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0Q2hpcEZhbWlseSgpID09IEZBTUlMWV9DQzI2eHggKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoaXMgY2hpcCBpcyBtZW1iZXIgb2YgdGhlIENDMTN4eCBmYW1pbHkuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIHRoaXMgY2hpcCBpcyBtZW1iZXIgb2YgdGhlIENDMTN4eCBmYW1pbHksIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fQ2hpcEZhbWlseUlzQ0MxM3h4KCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldENoaXBGYW1pbHkoKSA9PSBGQU1JTFlfQ0MxM3h4ICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNoaXAgaXMgbWVtYmVyIG9mIHRoZSBDQzI2eHhfUjIgZmFtaWx5LgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGlzIGNoaXAgaXMgbWVtYmVyIG9mIHRoZSBDQzI2eHhfUjIgZmFtaWx5LCBcYyBmYWxzZSBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0NoaXBJbmZvX0NoaXBGYW1pbHlJc0NDMjZ4eF9SMiggdm9pZCApCit7CisgICByZXR1cm4gKCBDaGlwSW5mb19HZXRDaGlwRmFtaWx5KCkgPT0gRkFNSUxZX0NDMjZ4eF9SMiApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgdGhpcyBjaGlwIGlzIG1lbWJlciBvZiB0aGUgQ0MyNnh4X0xpeiBmYW1pbHkuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIHRoaXMgY2hpcCBpcyBtZW1iZXIgb2YgdGhlIENDMjZ4eF9MaXogZmFtaWx5LCBcYyBmYWxzZSBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0NoaXBJbmZvX0NoaXBGYW1pbHlJc0NDMjZ4eF9MaXooIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0Q2hpcEZhbWlseSgpID09IEZBTUlMWV9DQzI2eHhfTGl6ICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNoaXAgaXMgbWVtYmVyIG9mIHRoZSBDQzI2eHhfQWdhIGZhbWlseS4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgdGhpcyBjaGlwIGlzIG1lbWJlciBvZiB0aGUgQ0MyNnh4X0FnYSBmYW1pbHksIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fQ2hpcEZhbWlseUlzQ0MyNnh4X0FnYSggdm9pZCApCit7CisgICByZXR1cm4gKCBDaGlwSW5mb19HZXRDaGlwRmFtaWx5KCkgPT0gRkFNSUxZX0NDMjZ4eF9BZ2EgKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBIVyByZXZpc2lvbiBlbnVtZXJhdGlvbi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit0eXBlZGVmIGVudW0geworICAgSFdSRVZfVW5rbm93biAgICAgPSAtMSwgLy8hPCAtMSBtZWFucyB0aGF0IHRoZSBjaGlwJ3MgSFcgcmV2aXNpb24gaXMgdW5rbm93bi4KKyAgIEhXUkVWXzFfMCAgICAgICAgID0gMTAsIC8vITwgMTAgbWVhbnMgdGhhdCB0aGUgY2hpcCdzIEhXIHJldmlzaW9uIGlzIDEuMAorICAgSFdSRVZfMl8wICAgICAgICAgPSAyMCwgLy8hPCAyMCBtZWFucyB0aGF0IHRoZSBjaGlwJ3MgSFcgcmV2aXNpb24gaXMgMi4wCisgICBIV1JFVl8yXzEgICAgICAgICA9IDIxLCAvLyE8IDIxIG1lYW5zIHRoYXQgdGhlIGNoaXAncyBIVyByZXZpc2lvbiBpcyAyLjEKKyAgIEhXUkVWXzJfMiAgICAgICAgID0gMjIsIC8vITwgMjIgbWVhbnMgdGhhdCB0aGUgY2hpcCdzIEhXIHJldmlzaW9uIGlzIDIuMgorICAgSFdSRVZfMl8zICAgICAgICAgPSAyMyAgLy8hPCAyMyBtZWFucyB0aGF0IHRoZSBjaGlwJ3MgSFcgcmV2aXNpb24gaXMgMi4zCit9IEh3UmV2aXNpb25fdDsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyBjaGlwIEhXIHJldmlzaW9uLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXHJlZiBId1JldmlzaW9uX3QKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gSHdSZXZpc2lvbl90IENoaXBJbmZvX0dldEh3UmV2aXNpb24oIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMS4wLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiBIVyByZXZpc2lvbiBmb3IgdGhpcyBjaGlwIGlzIDEuMCwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19Id1JldmlzaW9uSXNfMV8wKCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldEh3UmV2aXNpb24oKSA9PSBIV1JFVl8xXzAgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4wLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiBIVyByZXZpc2lvbiBmb3IgdGhpcyBjaGlwIGlzIDIuMCwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19Id1JldmlzaW9uSXNfMl8wKCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldEh3UmV2aXNpb24oKSA9PSBIV1JFVl8yXzAgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4wIG9yIGdyZWF0ZXIuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4wIG9yIGdyZWF0ZXIsIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fSHdSZXZpc2lvbklzX0dURVFfMl8wKCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldEh3UmV2aXNpb24oKSA+PSBIV1JFVl8yXzAgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4xLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiBIVyByZXZpc2lvbiBmb3IgdGhpcyBjaGlwIGlzIDIuMSwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19Id1JldmlzaW9uSXNfMl8xKCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldEh3UmV2aXNpb24oKSA9PSBIV1JFVl8yXzEgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4xIG9yIGdyZWF0ZXIuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4xIG9yIGdyZWF0ZXIsIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fSHdSZXZpc2lvbklzX0dURVFfMl8xKCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldEh3UmV2aXNpb24oKSA+PSBIV1JFVl8yXzEgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4yLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiBIVyByZXZpc2lvbiBmb3IgdGhpcyBjaGlwIGlzIDIuMiwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19Id1JldmlzaW9uSXNfMl8yKCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldEh3UmV2aXNpb24oKSA9PSBIV1JFVl8yXzIgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4yIG9yIGdyZWF0ZXIuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4yIG9yIGdyZWF0ZXIsIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fSHdSZXZpc2lvbklzX0dURVFfMl8yKCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldEh3UmV2aXNpb24oKSA+PSBIV1JFVl8yXzIgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4zIG9yIGdyZWF0ZXIuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4zIG9yIGdyZWF0ZXIsIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fSHdSZXZpc2lvbklzX0dURVFfMl8zKCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldEh3UmV2aXNpb24oKSA+PSBIV1JFVl8yXzMgKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBWZXJpZmllcyB0aGF0IGN1cnJlbnQgY2hpcCBpcyBidWlsdCBmb3IgQ0MyNnh4IEh3UmV2IDIuMiBvciBsYXRlciBhbmQgbmV2ZXIgcmV0dXJucyBpZiB2aW9sYXRlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFRoaXNDb2RlSXNCdWlsdEZvckNDMjZ4eEh3UmV2MjJBbmRMYXRlcl9IYWx0SWZWaW9sYXRlZCggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9DaGlwSW5mb19HZXRTdXBwb3J0ZWRQcm90b2NvbF9CVgorICAgICAgICAjdW5kZWYgIENoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWCisgICAgICAgICNkZWZpbmUgQ2hpcEluZm9fR2V0U3VwcG9ydGVkUHJvdG9jb2xfQlYgUk9NX0NoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DaGlwSW5mb19HZXRQYWNrYWdlVHlwZQorICAgICAgICAjdW5kZWYgIENoaXBJbmZvX0dldFBhY2thZ2VUeXBlCisgICAgICAgICNkZWZpbmUgQ2hpcEluZm9fR2V0UGFja2FnZVR5cGUgICAgICAgICBST01fQ2hpcEluZm9fR2V0UGFja2FnZVR5cGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NoaXBJbmZvX0dldENoaXBUeXBlCisgICAgICAgICN1bmRlZiAgQ2hpcEluZm9fR2V0Q2hpcFR5cGUKKyAgICAgICAgI2RlZmluZSBDaGlwSW5mb19HZXRDaGlwVHlwZSAgICAgICAgICAgIFJPTV9DaGlwSW5mb19HZXRDaGlwVHlwZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ2hpcEluZm9fR2V0Q2hpcEZhbWlseQorICAgICAgICAjdW5kZWYgIENoaXBJbmZvX0dldENoaXBGYW1pbHkKKyAgICAgICAgI2RlZmluZSBDaGlwSW5mb19HZXRDaGlwRmFtaWx5ICAgICAgICAgIFJPTV9DaGlwSW5mb19HZXRDaGlwRmFtaWx5CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DaGlwSW5mb19HZXRId1JldmlzaW9uCisgICAgICAgICN1bmRlZiAgQ2hpcEluZm9fR2V0SHdSZXZpc2lvbgorICAgICAgICAjZGVmaW5lIENoaXBJbmZvX0dldEh3UmV2aXNpb24gICAgICAgICAgUk9NX0NoaXBJbmZvX0dldEh3UmV2aXNpb24KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1RoaXNDb2RlSXNCdWlsdEZvckNDMjZ4eEh3UmV2MjJBbmRMYXRlcl9IYWx0SWZWaW9sYXRlZAorICAgICAgICAjdW5kZWYgIFRoaXNDb2RlSXNCdWlsdEZvckNDMjZ4eEh3UmV2MjJBbmRMYXRlcl9IYWx0SWZWaW9sYXRlZAorICAgICAgICAjZGVmaW5lIFRoaXNDb2RlSXNCdWlsdEZvckNDMjZ4eEh3UmV2MjJBbmRMYXRlcl9IYWx0SWZWaW9sYXRlZCBST01fVGhpc0NvZGVJc0J1aWx0Rm9yQ0MyNnh4SHdSZXYyMkFuZExhdGVyX0hhbHRJZlZpb2xhdGVkCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0NISVBfSU5GT19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3B1LmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRlMDA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3B1LmMKQEAgLTAsMCArMSw0MjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBjcHUuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMzAgMTA6MTA6NDUgKzAyMDAgKE1vbiwgMzAgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDY1NDgKKyoKKyogIERlc2NyaXB0aW9uOiAgICBJbnN0cnVjdGlvbiB3cmFwcGVycyBmb3Igc3BlY2lhbCBDUFUgaW5zdHJ1Y3Rpb25zIG5lZWRlZCBieQorKiAgICAgICAgICAgICAgICAgIHRoZSBkcml2ZXJzLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9jcHUuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIENQVWNwc2lkCisgICAgI2RlZmluZSBDUFVjcHNpZCAgICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0NQVWNwc2lkCisgICAgI3VuZGVmICBDUFVwcmltYXNrCisgICAgI2RlZmluZSBDUFVwcmltYXNrICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0NQVXByaW1hc2sKKyAgICAjdW5kZWYgIENQVWNwc2llCisgICAgI2RlZmluZSBDUFVjcHNpZSAgICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0NQVWNwc2llCisgICAgI3VuZGVmICBDUFViYXNlcHJpR2V0CisgICAgI2RlZmluZSBDUFViYXNlcHJpR2V0ICAgICAgICAgICAgICAgICAgIE5PUk9NX0NQVWJhc2VwcmlHZXQKKyAgICAjdW5kZWYgIENQVWRlbGF5CisgICAgI2RlZmluZSBDUFVkZWxheSAgICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0NQVWRlbGF5CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBEaXNhYmxlIGFsbCBleHRlcm5hbCBpbnRlcnJ1cHRzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKK3VpbnQzMl90CitDUFVjcHNpZCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmVhZCBQUklNQVNLIGFuZCBkaXNhYmxlIGludGVycnVwdHMuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1ycyAgICAgcjAsIFBSSU1BU0tcbiIKKyAgICAgICAgICAiICAgIGNwc2lkICAgaVxuIik7CisKKyAgICAvLworICAgIC8vICJXYXJuaW5nW1BlOTQwXTogbWlzc2luZyByZXR1cm4gc3RhdGVtZW50IGF0IGVuZCBvZiBub24tdm9pZCBmdW5jdGlvbiIKKyAgICAvLyBpcyBzdXBwcmVzc2VkIGhlcmUgdG8gYXZvaWQgcHV0dGluZyBhICJieCBsciIgaW4gdGhlIGlubGluZSBhc3NlbWJseQorICAgIC8vIGFib3ZlIGFuZCBhIHN1cGVyZmx1b3VzIHJldHVybiBzdGF0ZW1lbnQgaGVyZS4KKyAgICAvLworI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBlOTQwCit9CisjcHJhZ21hIGRpYWdfZGVmYXVsdD1QZTk0MAorI2VsaWYgZGVmaW5lZChfX0NDX0FSTSkgfHwgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pCitfX2FzbSB1aW50MzJfdAorQ1BVY3BzaWQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJlYWQgUFJJTUFTSyBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgbXJzICAgICByMCwgUFJJTUFTSzsKKyAgICBjcHNpZCAgIGk7CisgICAgYnggICAgICBscgorfQorI2VsaWYgZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykgfHwgZGVmaW5lZChET1hZR0VOKQordWludDMyX3QKK0NQVWNwc2lkKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZWFkIFBSSU1BU0sgYW5kIGRpc2FibGUgaW50ZXJydXB0cy4KKyAgICAvLworICAgIF9fYXNtKCIgICAgbXJzICAgICByMCwgUFJJTUFTS1xuIgorICAgICAgICAgICIgICAgY3BzaWQgICBpXG4iCisgICAgICAgICAgIiAgICBieCAgICAgIGxyXG4iKTsKKworICAgIC8vCisgICAgLy8gVGhlIGZvbGxvd2luZyBrZWVwcyB0aGUgY29tcGlsZXIgaGFwcHksIGJlY2F1c2UgaXQgd2FudHMgdG8gc2VlIGEKKyAgICAvLyByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIGZ1bmN0aW9uLiAgSXQgd2lsbCBnZW5lcmF0ZSBjb2RlIHRvIHJldHVybgorICAgIC8vIGEgemVyby4gIEhvd2V2ZXIsIHRoZSByZWFsIHJldHVybiBpcyB0aGUgImJ4IGxyIiBhYm92ZSwgc28gdGhlCisgICAgLy8gcmV0dXJuKDApIGlzIG5ldmVyIGV4ZWN1dGVkIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB3aXRoIHRoZSB2YWx1ZQorICAgIC8vIHlvdSBleHBlY3QgaW4gUjAuCisgICAgLy8KKyAgICByZXR1cm4oMCk7Cit9CisjZWxzZQordWludDMyX3QgX19hdHRyaWJ1dGVfXygobmFrZWQpKQorQ1BVY3BzaWQodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyUmV0OworCisgICAgLy8KKyAgICAvLyBSZWFkIFBSSU1BU0sgYW5kIGRpc2FibGUgaW50ZXJydXB0cworICAgIC8vCisgICAgX19hc20oIiAgICBtcnMgICAgIHIwLCBQUklNQVNLXG4iCisgICAgICAgICAgIiAgICBjcHNpZCAgIGlcbiIKKyAgICAgICAgICAiICAgIGJ4ICAgICAgbHJcbiIKKyAgICAgIDogIj1yIih1aTMyUmV0KSk7CisKKyAgICAvLworICAgIC8vIFRoZSByZXR1cm4gaXMgaGFuZGxlZCBpbiB0aGUgaW5saW5lIGFzc2VtYmx5LCBidXQgdGhlIGNvbXBpbGVyIHdpbGwKKyAgICAvLyBzdGlsbCBjb21wbGFpbiBpZiB0aGVyZSBpcyBub3QgYW4gZXhwbGljaXQgcmV0dXJuIGhlcmUgKGRlc3BpdGUgdGhlIGZhY3QKKyAgICAvLyB0aGF0IHRoaXMgZG9lcyBub3QgcmVzdWx0IGluIGFueSBjb2RlIGJlaW5nIHByb2R1Y2VkIGJlY2F1c2Ugb2YgdGhlCisgICAgLy8gbmFrZWQgYXR0cmlidXRlKS4KKyAgICAvLworICAgIHJldHVybih1aTMyUmV0KTsKK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldCB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQordWludDMyX3QKK0NQVXByaW1hc2sodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJlYWQgUFJJTUFTSy4KKyAgICAvLworICAgIF9fYXNtKCIgICAgbXJzICAgICByMCwgUFJJTUFTS1xuIik7CisKKyAgICAvLworICAgIC8vICJXYXJuaW5nW1BlOTQwXTogbWlzc2luZyByZXR1cm4gc3RhdGVtZW50IGF0IGVuZCBvZiBub24tdm9pZCBmdW5jdGlvbiIKKyAgICAvLyBpcyBzdXBwcmVzc2VkIGhlcmUgdG8gYXZvaWQgcHV0dGluZyBhICJieCBsciIgaW4gdGhlIGlubGluZSBhc3NlbWJseQorICAgIC8vIGFib3ZlIGFuZCBhIHN1cGVyZmx1b3VzIHJldHVybiBzdGF0ZW1lbnQgaGVyZS4KKyAgICAvLworI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBlOTQwCit9CisjcHJhZ21hIGRpYWdfZGVmYXVsdD1QZTk0MAorI2VsaWYgZGVmaW5lZChfX0NDX0FSTSkgfHwgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pCitfX2FzbSB1aW50MzJfdAorQ1BVcHJpbWFzayh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmVhZCBQUklNQVNLLgorICAgIC8vCisgICAgbXJzICAgICByMCwgUFJJTUFTSzsKKyAgICBieCAgICAgIGxyCit9CisjZWxpZiBkZWZpbmVkKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fKSB8fCBkZWZpbmVkKERPWFlHRU4pCit1aW50MzJfdAorQ1BVcHJpbWFzayh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmVhZCBQUklNQVNLLgorICAgIC8vCisgICAgX19hc20oIiAgICBtcnMgICAgIHIwLCBQUklNQVNLXG4iCisgICAgICAgICAgIiAgICBieCAgICAgIGxyXG4iKTsKKworICAgIC8vCisgICAgLy8gVGhlIGZvbGxvd2luZyBrZWVwcyB0aGUgY29tcGlsZXIgaGFwcHksIGJlY2F1c2UgaXQgd2FudHMgdG8gc2VlIGEKKyAgICAvLyByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIGZ1bmN0aW9uLiAgSXQgd2lsbCBnZW5lcmF0ZSBjb2RlIHRvIHJldHVybgorICAgIC8vIGEgemVyby4gIEhvd2V2ZXIsIHRoZSByZWFsIHJldHVybiBpcyB0aGUgImJ4IGxyIiBhYm92ZSwgc28gdGhlCisgICAgLy8gcmV0dXJuKDApIGlzIG5ldmVyIGV4ZWN1dGVkIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB3aXRoIHRoZSB2YWx1ZQorICAgIC8vIHlvdSBleHBlY3QgaW4gUjAuCisgICAgLy8KKyAgICByZXR1cm4oMCk7Cit9CisjZWxzZQordWludDMyX3QgX19hdHRyaWJ1dGVfXygobmFrZWQpKQorQ1BVcHJpbWFzayh2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJSZXQ7CisKKyAgICAvLworICAgIC8vIFJlYWQgUFJJTUFTSworICAgIC8vCisgICAgX19hc20oIiAgICBtcnMgICAgIHIwLCBQUklNQVNLXG4iCisgICAgICAgICAgIiAgICBieCAgICAgIGxyXG4iCisgICAgICA6ICI9ciIodWkzMlJldCkpOworCisgICAgLy8KKyAgICAvLyBUaGUgcmV0dXJuIGlzIGhhbmRsZWQgaW4gdGhlIGlubGluZSBhc3NlbWJseSwgYnV0IHRoZSBjb21waWxlciB3aWxsCisgICAgLy8gc3RpbGwgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm90IGFuIGV4cGxpY2l0IHJldHVybiBoZXJlIChkZXNwaXRlIHRoZSBmYWN0CisgICAgLy8gdGhhdCB0aGlzIGRvZXMgbm90IHJlc3VsdCBpbiBhbnkgY29kZSBiZWluZyBwcm9kdWNlZCBiZWNhdXNlIG9mIHRoZQorICAgIC8vIG5ha2VkIGF0dHJpYnV0ZSkuCisgICAgLy8KKyAgICByZXR1cm4odWkzMlJldCk7Cit9CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBFbmFibGUgYWxsIGV4dGVybmFsIGludGVycnVwdHMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQordWludDMyX3QKK0NQVWNwc2llKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZWFkIFBSSU1BU0sgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgX19hc20oIiAgICBtcnMgICAgIHIwLCBQUklNQVNLXG4iCisgICAgICAgICAgIiAgICBjcHNpZSAgIGlcbiIpOworCisgICAgLy8KKyAgICAvLyAiV2FybmluZ1tQZTk0MF06IG1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCBhdCBlbmQgb2Ygbm9uLXZvaWQgZnVuY3Rpb24iCisgICAgLy8gaXMgc3VwcHJlc3NlZCBoZXJlIHRvIGF2b2lkIHB1dHRpbmcgYSAiYnggbHIiIGluIHRoZSBpbmxpbmUgYXNzZW1ibHkKKyAgICAvLyBhYm92ZSBhbmQgYSBzdXBlcmZsdW91cyByZXR1cm4gc3RhdGVtZW50IGhlcmUuCisgICAgLy8KKyNwcmFnbWEgZGlhZ19zdXBwcmVzcz1QZTk0MAorfQorI3ByYWdtYSBkaWFnX2RlZmF1bHQ9UGU5NDAKKyNlbGlmIGRlZmluZWQoX19DQ19BUk0pIHx8IGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKQorX19hc20gdWludDMyX3QKK0NQVWNwc2llKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZWFkIFBSSU1BU0sgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgbXJzICAgICByMCwgUFJJTUFTSzsKKyAgICBjcHNpZSAgIGk7CisgICAgYnggICAgICBscgorfQorI2VsaWYgZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykgfHwgZGVmaW5lZChET1hZR0VOKQordWludDMyX3QKK0NQVWNwc2llKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZWFkIFBSSU1BU0sgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgX19hc20oIiAgICBtcnMgICAgIHIwLCBQUklNQVNLXG4iCisgICAgICAgICAgIiAgICBjcHNpZSAgIGlcbiIKKyAgICAgICAgICAiICAgIGJ4ICAgICAgbHJcbiIpOworCisgICAgLy8KKyAgICAvLyBUaGUgZm9sbG93aW5nIGtlZXBzIHRoZSBjb21waWxlciBoYXBweSwgYmVjYXVzZSBpdCB3YW50cyB0byBzZWUgYQorICAgIC8vIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgZnVuY3Rpb24uICBJdCB3aWxsIGdlbmVyYXRlIGNvZGUgdG8gcmV0dXJuCisgICAgLy8gYSB6ZXJvLiAgSG93ZXZlciwgdGhlIHJlYWwgcmV0dXJuIGlzIHRoZSAiYnggbHIiIGFib3ZlLCBzbyB0aGUKKyAgICAvLyByZXR1cm4oMCkgaXMgbmV2ZXIgZXhlY3V0ZWQgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHdpdGggdGhlIHZhbHVlCisgICAgLy8geW91IGV4cGVjdCBpbiBSMC4KKyAgICAvLworICAgIHJldHVybigwKTsKK30KKyNlbHNlCit1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitDUFVjcHNpZSh2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJSZXQ7CisKKyAgICAvLworICAgIC8vIFJlYWQgUFJJTUFTSyBhbmQgZW5hYmxlIGludGVycnVwdHMuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1ycyAgICAgcjAsIFBSSU1BU0tcbiIKKyAgICAgICAgICAiICAgIGNwc2llICAgaVxuIgorICAgICAgICAgICIgICAgYnggICAgICBsclxuIgorICAgICAgOiAiPXIiKHVpMzJSZXQpKTsKKworICAgIC8vCisgICAgLy8gVGhlIHJldHVybiBpcyBoYW5kbGVkIGluIHRoZSBpbmxpbmUgYXNzZW1ibHksIGJ1dCB0aGUgY29tcGlsZXIgd2lsbAorICAgIC8vIHN0aWxsIGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vdCBhbiBleHBsaWNpdCByZXR1cm4gaGVyZSAoZGVzcGl0ZSB0aGUgZmFjdAorICAgIC8vIHRoYXQgdGhpcyBkb2VzIG5vdCByZXN1bHQgaW4gYW55IGNvZGUgYmVpbmcgcHJvZHVjZWQgYmVjYXVzZSBvZiB0aGUKKyAgICAvLyBuYWtlZCBhdHRyaWJ1dGUpLgorICAgIC8vCisgICAgcmV0dXJuKHVpMzJSZXQpOworfQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgZGlzYWJsZSBsZXZlbAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCit1aW50MzJfdAorQ1BVYmFzZXByaUdldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmVhZCBCQVNFUFJJLgorICAgIC8vCisgICAgX19hc20oIiAgICBtcnMgICAgIHIwLCBCQVNFUFJJXG4iKTsKKworICAgIC8vCisgICAgLy8gIldhcm5pbmdbUGU5NDBdOiBtaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQgYXQgZW5kIG9mIG5vbi12b2lkIGZ1bmN0aW9uIgorICAgIC8vIGlzIHN1cHByZXNzZWQgaGVyZSB0byBhdm9pZCBwdXR0aW5nIGEgImJ4IGxyIiBpbiB0aGUgaW5saW5lIGFzc2VtYmx5CisgICAgLy8gYWJvdmUgYW5kIGEgc3VwZXJmbHVvdXMgcmV0dXJuIHN0YXRlbWVudCBoZXJlLgorICAgIC8vCisjcHJhZ21hIGRpYWdfc3VwcHJlc3M9UGU5NDAKK30KKyNwcmFnbWEgZGlhZ19kZWZhdWx0PVBlOTQwCisjZWxpZiBkZWZpbmVkKF9fQ0NfQVJNKSB8fCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikKK19fYXNtIHVpbnQzMl90CitDUFViYXNlcHJpR2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZWFkIEJBU0VQUkkuCisgICAgLy8KKyAgICBtcnMgICAgIHIwLCBCQVNFUFJJOworICAgIGJ4ICAgICAgbHIKK30KKyNlbGlmIGRlZmluZWQoX19USV9DT01QSUxFUl9WRVJTSU9OX18pIHx8IGRlZmluZWQoRE9YWUdFTikKK3VpbnQzMl90CitDUFViYXNlcHJpR2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZWFkIEJBU0VQUkkuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1ycyAgICAgcjAsIEJBU0VQUklcbiIKKyAgICAgICAgICAiICAgIGJ4ICAgICAgbHJcbiIpOworCisgICAgLy8KKyAgICAvLyBUaGUgZm9sbG93aW5nIGtlZXBzIHRoZSBjb21waWxlciBoYXBweSwgYmVjYXVzZSBpdCB3YW50cyB0byBzZWUgYQorICAgIC8vIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgZnVuY3Rpb24uICBJdCB3aWxsIGdlbmVyYXRlIGNvZGUgdG8gcmV0dXJuCisgICAgLy8gYSB6ZXJvLiAgSG93ZXZlciwgdGhlIHJlYWwgcmV0dXJuIGlzIHRoZSAiYnggbHIiIGFib3ZlLCBzbyB0aGUKKyAgICAvLyByZXR1cm4oMCkgaXMgbmV2ZXIgZXhlY3V0ZWQgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHdpdGggdGhlIHZhbHVlCisgICAgLy8geW91IGV4cGVjdCBpbiBSMC4KKyAgICAvLworICAgIHJldHVybigwKTsKK30KKyNlbHNlCit1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitDUFViYXNlcHJpR2V0KHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMlJldDsKKworICAgIC8vCisgICAgLy8gUmVhZCBCQVNFUFJJLgorICAgIC8vCisgICAgX19hc20oIiAgICBtcnMgICAgIHIwLCBCQVNFUFJJXG4iCisgICAgICAgICAgIiAgICBieCAgICAgIGxyXG4iCisgICAgICA6ICI9ciIodWkzMlJldCkpOworCisgICAgLy8KKyAgICAvLyBUaGUgcmV0dXJuIGlzIGhhbmRsZWQgaW4gdGhlIGlubGluZSBhc3NlbWJseSwgYnV0IHRoZSBjb21waWxlciB3aWxsCisgICAgLy8gc3RpbGwgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm90IGFuIGV4cGxpY2l0IHJldHVybiBoZXJlIChkZXNwaXRlIHRoZSBmYWN0CisgICAgLy8gdGhhdCB0aGlzIGRvZXMgbm90IHJlc3VsdCBpbiBhbnkgY29kZSBiZWluZyBwcm9kdWNlZCBiZWNhdXNlIG9mIHRoZQorICAgIC8vIG5ha2VkIGF0dHJpYnV0ZSkuCisgICAgLy8KKyAgICByZXR1cm4odWkzMlJldCk7Cit9CisjZW5kaWYKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgUHJvdmlkZSBhIHNtYWxsIGRlbGF5CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKK3ZvaWQKK0NQVWRlbGF5KHVpbnQzMl90IHVpMzJDb3VudCkKK3sKKyAgICAvLworICAgIC8vIERlbGF5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpbWVzICgzIGN5Y2xlcyBwci4gbG9vcCkKKyAgICAvLworICAgIF9fYXNtKCJDUFVkZWxheTpcbiIKKyAgICAgICAgICAiICAgIHN1YnMgICAgcjAsICMxXG4iCisgICAgICAgICAgIiAgICBibmUubiAgIENQVWRlbGF5XG4iCisgICAgICAgICAgIiAgICBieCAgICAgIGxyIik7CisjcHJhZ21hIGRpYWdfc3VwcHJlc3M9UGU5NDAKK30KKyNwcmFnbWEgZGlhZ19kZWZhdWx0PVBlOTQwCisjZWxpZiBkZWZpbmVkKF9fQ0NfQVJNKSB8fCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikKK19fYXNtIHZvaWQKK0NQVWRlbGF5KHVpbnQzMl90IHVpMzJDb3VudCkKK3sKKyAgICAvLworICAgIC8vIERlbGF5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpbWVzICgzIGN5Y2xlcyBwci4gbG9vcCkKKyAgICAvLworQ1BVZGVsCisgICAgc3VicyAgICByMCwgIzE7CisgICAgYm5lICAgICBDUFVkZWw7CisgICAgYnggICAgICBscjsKK30KKyNlbGlmIGRlZmluZWQoX19USV9DT01QSUxFUl9WRVJTSU9OX18pIHx8IGRlZmluZWQoRE9YWUdFTikKKy8vCisvLyBGb3IgQ0NTIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGluIHB1cmUgYXNzZW1ibHkuIFRoaXMgcHJldmVudHMgdGhlIFRJCisvLyBjb21waWxlciBmcm9tIGRvaW5nIGZ1bm55IHRoaW5ncyB3aXRoIHRoZSBvcHRpbWl6ZXIuCisvLworICAgIC8vCisgICAgLy8gRGVsYXkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGltZXMgKDMgY3ljbGVzIHByLiBsb29wKQorICAgIC8vCitfX2FzbSgiICAgIC5zZWN0IFwiLnRleHQ6Tk9ST01fQ1BVZGVsYXlcIlxuIgorICAgICAgIiAgICAuY2xpbmtcbiIKKyAgICAgICIgICAgLnRodW1iZnVuYyBOT1JPTV9DUFVkZWxheVxuIgorICAgICAgIiAgICAudGh1bWJcbiIKKyAgICAgICIgICAgLmdsb2JhbCBOT1JPTV9DUFVkZWxheVxuIgorICAgICAgIk5PUk9NX0NQVWRlbGF5OlxuIgorICAgICAgIiAgICBzdWJzIHIwLCAjMVxuIgorICAgICAgIiAgICBibmUubiBOT1JPTV9DUFVkZWxheVxuIgorICAgICAgIiAgICBieCBsclxuIik7CisjZWxzZQordm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitDUFVkZWxheSh1aW50MzJfdCB1aTMyQ291bnQpCit7CisgICAgLy8KKyAgICAvLyBEZWxheSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0aW1lcyAoMyBjeWNsZXMgcHIuIGxvb3ApCisgICAgLy8KKyAgICBfX2FzbSgiICAgIHN1YnMgICAgJTAsICMxXG4iCisgICAgICAgICAgIiAgICBibmUgICAgIE5PUk9NX0NQVWRlbGF5XG4iCisgICAgICAgICAgIiAgICBieCAgICAgIGxyIgorICAgICAgICAgIDogIityIiAodWkzMkNvdW50KQorICAgICAgICAgIDoKKyAgICAgICAgICA6CisgICAgICAgICAgKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3B1LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDU4ZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3B1LmgKQEAgLTAsMCArMSw0NTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBjcHUuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDEtMDYgMTU6NTU6NDggKzAxMDAgKFdlZCwgMDYgSmFuIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDUzODUKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgQ1BVIGluc3RydWN0aW9uIHdyYXBwZXIKKyogICAgICAgICAgICAgICAgICBmdW5jdGlvbnMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHN5c3RlbV9jcHVfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGNwdV9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0NQVV9IX18KKyNkZWZpbmUgX19DUFVfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2NwdV9zY3MuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgQ1BVY3BzaWQgICAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9DUFVjcHNpZAorICAgICNkZWZpbmUgQ1BVcHJpbWFzayAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9DUFVwcmltYXNrCisgICAgI2RlZmluZSBDUFVjcHNpZSAgICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0NQVWNwc2llCisgICAgI2RlZmluZSBDUFViYXNlcHJpR2V0ICAgICAgICAgICAgICAgICAgIE5PUk9NX0NQVWJhc2VwcmlHZXQKKyAgICAjZGVmaW5lIENQVWRlbGF5ICAgICAgICAgICAgICAgICAgICAgICAgTk9ST01fQ1BVZGVsYXkKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0cy4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRpc2FibGUgYWxsIHN5c3RlbSBpbnRlcnJ1cHRzLiBUaGlzIGZ1bmN0aW9uIGlzCisvLyEgaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgQ1BTSUQgaW5zdHJ1Y3Rpb24uCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHN0YXRlIG9mIFxiIFBSSU1BU0sgb24gZW50cnkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQ1BVY3BzaWQodm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdGUuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0cy4gVGhpcworLy8hIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgd3JhcHBlciBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHN0YXRlIG9mCisvLyEgUFJJTUFTSy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIFxiIFBSSU1BU0sgKGluZGljYXRpbmcgd2hldGhlciBpbnRlcnJ1cHRzCisvLyEgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQpLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBDUFVwcmltYXNrKHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgYWxsIGV4dGVybmFsIGludGVycnVwdHMuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBlbmFibGUgYWxsIHN5c3RlbSBpbnRlcnJ1cHRzLiBUaGlzIGZ1bmN0aW9uIGlzCisvLyEgaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgQ1BTSUUgaW5zdHJ1Y3Rpb24uCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHN0YXRlIG9mIFxiIFBSSU1BU0sgb24gZW50cnkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENQVWNwc2llKHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBXYWl0IGZvciBpbnRlcnJ1cHQuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBsZXQgdGhlIFN5c3RlbSBDUFUgd2FpdCBmb3IgdGhlIG5leHQgaW50ZXJydXB0LiBUaGlzCisvLyEgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgV0ZJIGluc3RydWN0aW9uLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKK19fU1RBVElDX0lOTElORSB2b2lkCitDUFV3Zmkodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIHRoZSBuZXh0IGludGVycnVwdC4KKyAgICAvLworICAgIF9fYXNtKCIgICAgd2ZpXG4iKTsKK30KKyNlbGlmIGRlZmluZWQoX19DQ19BUk0pIHx8IGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKQorX19hc20gX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NQVXdmaSh2b2lkKQoreworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgdGhlIG5leHQgaW50ZXJydXB0LgorICAgIC8vCisgICAgd2ZpOworICAgIGJ4ICAgICAgbHIKK30KKyNlbGlmIGRlZmluZWQoX19USV9DT01QSUxFUl9WRVJTSU9OX18pIHx8IGRlZmluZWQoRE9YWUdFTikKK19fU1RBVElDX0lOTElORSB2b2lkCitDUFV3Zmkodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIHRoZSBuZXh0IGludGVycnVwdC4KKyAgICAvLworICAgIF9fYXNtKCIgICAgd2ZpXG4iKTsKK30KKyNlbHNlCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKK0NQVXdmaSh2b2lkKQoreworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgdGhlIG5leHQgaW50ZXJydXB0LgorICAgIC8vCisgICAgX19hc20oIiAgICB3ZmlcbiIpOworfQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdhaXQgZm9yIGV2ZW50LgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gbGV0IHRoZSBTeXN0ZW0gQ1BVIHdhaXQgZm9yIHRoZSBuZXh0IGV2ZW50LiBUaGlzCisvLyEgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgV0ZFIGluc3RydWN0aW9uLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKK19fU1RBVElDX0lOTElORSB2b2lkCitDUFV3ZmUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIHRoZSBuZXh0IGV2ZW50LgorICAgIC8vCisgICAgX19hc20oIiAgICB3ZmVcbiIpOworfQorI2VsaWYgZGVmaW5lZChfX0NDX0FSTSkgfHwgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pCitfX2FzbSBfX1NUQVRJQ19JTkxJTkUgdm9pZAorQ1BVd2ZlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCBldmVudC4KKyAgICAvLworICAgIHdmZTsKKyAgICBieCAgICAgIGxyCit9CisjZWxpZiBkZWZpbmVkKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fKSB8fCBkZWZpbmVkKERPWFlHRU4pCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQ1BVd2ZlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCBldmVudC4KKyAgICAvLworICAgIF9fYXNtKCIgICAgd2ZlXG4iKTsKK30KKyNlbHNlCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKK0NQVXdmZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgdGhlIG5leHQgZXZlbnQuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIHdmZVxuIik7Cit9CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2VuZCBldmVudC4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGxldCB0aGUgU3lzdGVtIENQVSBzZW5kIGFuIGV2ZW50LiBUaGlzIGZ1bmN0aW9uIGlzCisvLyEgaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgU0VWIGluc3RydWN0aW9uLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKK19fU1RBVElDX0lOTElORSB2b2lkCitDUFVzZXYodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFNlbmQgZXZlbnQuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIHNldlxuIik7Cit9CisjZWxpZiBkZWZpbmVkKF9fQ0NfQVJNKSB8fCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikKK19fYXNtIF9fU1RBVElDX0lOTElORSB2b2lkCitDUFVzZXYodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFNlbmQgZXZlbnQuCisgICAgLy8KKyAgICBzZXY7CisgICAgYnggICAgICBscgorfQorI2VsaWYgZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykgfHwgZGVmaW5lZChET1hZR0VOKQorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NQVXNldih2b2lkKQoreworICAgIC8vCisgICAgLy8gU2VuZCBldmVudC4KKyAgICAvLworICAgIF9fYXNtKCIgICAgc2V2XG4iKTsKK30KKyNlbHNlCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKK0NQVXNldih2b2lkKQoreworICAgIC8vCisgICAgLy8gU2VuZCBldmVudC4KKyAgICAvLworICAgIF9fYXNtKCIgICAgc2V2XG4iKTsKK30KKyNlbmRpZgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVwZGF0ZSB0aGUgaW50ZXJydXB0IHByaW9yaXR5IGRpc2FibGUgbGV2ZWwuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBjaGFuZ2UgdGhlIGxldmVsIG9mIHByaW9yaXR5IHRoYXQgd2lsbCBkaXNhYmxlCisvLyEgaW50ZXJydXB0cyB3aXRoIGEgbG93ZXIgcHJpb3JpdHkgbGV2ZWwuCisvLyEKKy8vISBccGFyYW0gdWkzMk5ld0Jhc2VwcmkgaXMgdGhlIG5ldyBiYXNpcyBwcmlvcml0eSBsZXZlbCB0byBzZXQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NQVWJhc2VwcmlTZXQodWludDMyX3QgdWkzMk5ld0Jhc2VwcmkpCit7CisgICAgLy8KKyAgICAvLyBTZXQgdGhlIEJBU0VQUkkgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1zciAgICAgQkFTRVBSSSwgcjBcbiIpOworfQorI2VsaWYgZGVmaW5lZChfX0NDX0FSTSkgfHwgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pCitfX2FzbSBfX1NUQVRJQ19JTkxJTkUgdm9pZAorQ1BVYmFzZXByaVNldCh1aW50MzJfdCB1aTMyTmV3QmFzZXByaSkKK3sKKyAgICAvLworICAgIC8vIFNldCB0aGUgQkFTRVBSSSByZWdpc3Rlci4KKyAgICAvLworICAgIG1zciAgICAgQkFTRVBSSSwgcjA7CisgICAgYnggICAgICBscgorfQorI2VsaWYgZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykgfHwgZGVmaW5lZChET1hZR0VOKQorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NQVWJhc2VwcmlTZXQodWludDMyX3QgdWkzMk5ld0Jhc2VwcmkpCit7CisgICAgLy8KKyAgICAvLyBTZXQgdGhlIEJBU0VQUkkgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1zciAgICAgQkFTRVBSSSwgcjBcbiIpOworfQorI2Vsc2UKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2F0dHJpYnV0ZXMiCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2F0dHJpYnV0ZV9fICgobmFrZWQpKQorQ1BVYmFzZXByaVNldCh1aW50MzJfdCB1aTMyTmV3QmFzZXByaSkKK3sKKyAgIC8vCisgICAvLyBTZXQgdGhlIEJBU0VQUkkgcmVnaXN0ZXIuCisgICAvLworICAgX19hc20oIiAgICBtc3IgICAgIEJBU0VQUkksICUwXG4iCisgICAgICAgICAiICAgIGJ4ICAgICAgbHJcbiIKKyAgICAgICAgIDoKKyAgICAgICAgIDogInIiICh1aTMyTmV3QmFzZXByaSkKKyAgICAgICAgIDoKKyAgICAgICAgICk7Cit9CisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgaW50ZXJydXB0IHByaW9yaXR5IGRpc2FibGUgbGV2ZWwuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIHRoZSBsZXZlbCBvZiBwcmlvcml0eSB0aGF0IHdpbGwgZGlzYWJsZQorLy8hIGludGVycnVwdHMgd2l0aCBhIGxvd2VyIHByaW9yaXR5IGxldmVsLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgXGIgQkFTRVBSSSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQ1BVYmFzZXByaUdldCh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUHJvdmlkZSBhIHNtYWxsIGRlbGF5LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBtZWFucyBmb3IgZ2VuZXJhdGluZyBhIGNvbnN0YW50IGxlbmd0aCBkZWxheS4gSXQKKy8vISBpcyB3cml0dGVuIGluIGFzc2VtYmx5IHRvIGtlZXAgdGhlIGRlbGF5IGNvbnNpc3RlbnQgYWNyb3NzIHRvb2wgY2hhaW5zLAorLy8hIGF2b2lkaW5nIHRoZSBuZWVkIHRvIHR1bmUgdGhlIGRlbGF5IGJhc2VkIG9uIHRoZSB0b29sIGNoYWluIGluIHVzZS4KKy8vIQorLy8hIFRoZSBsb29wIHRha2VzIDMgY3ljbGVzL2xvb3AuCisvLyEKKy8vISBccGFyYW0gdWkzMkNvdW50IGlzIHRoZSBudW1iZXIgb2YgZGVsYXkgbG9vcCBpdGVyYXRpb25zIHRvIHBlcmZvcm0uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBDUFVkZWxheSh1aW50MzJfdCB1aTMyQ291bnQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIENQVSB3cml0ZSBidWZmZXJpbmcgKHJlY29tbWVuZGVkIGZvciBkZWJ1ZyBwdXJwb3NlIG9ubHkpLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBoZWxwcyBkZWJ1Z2dpbmcgImJ1cyBmYXVsdCBjcmFzaGVzIi4KKy8vISBEaXNhYmxlcyB3cml0ZSBidWZmZXIgdXNlIGR1cmluZyBkZWZhdWx0IG1lbW9yeSBtYXAgYWNjZXNzZXMuCisvLyEKKy8vISBUaGlzIGNhdXNlcyBhbGwgYnVzIGZhdWx0cyB0byBiZSBwcmVjaXNlIGJ1cyBmYXVsdHMgYnV0IGRlY3JlYXNlcyB0aGUKKy8vISBwZXJmb3JtYW5jZSBvZiB0aGUgcHJvY2Vzc29yIGJlY2F1c2UgdGhlIHN0b3JlcyB0byBtZW1vcnkgaGF2ZSB0byBjb21wbGV0ZQorLy8hIGJlZm9yZSB0aGUgbmV4dCBpbnN0cnVjdGlvbiBjYW4gYmUgZXhlY3V0ZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIENQVV9Xcml0ZUJ1ZmZlckVuYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NQVV9Xcml0ZUJ1ZmZlckRpc2FibGUoIHZvaWQgKQoreworICAgIEhXUkVHQklUVyggQ1BVX1NDU19CQVNFICsgQ1BVX1NDU19PX0FDVExSLCBDUFVfU0NTX0FDVExSX0RJU0RFRldCVUZfQklUTiApID0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIENQVSB3cml0ZSBidWZmZXJpbmcgKGRlZmF1bHQgc2V0dGluZykuCisvLyEKKy8vISBSZS1lbmFibGVzIHdyaXRlIGJ1ZmZlciBkdXJpbmcgZGVmYXVsdCBtZW1vcnkgbWFwIGFjY2Vzc2VzIGlmCisvLyEgXHJlZiBDUFVfV3JpdGVCdWZmZXJEaXNhYmxlKCkgaGFzIGJlZW4gdXNlZCBmb3IgYnVzIGZhdWx0IGRlYnVnZ2luZy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgQ1BVX1dyaXRlQnVmZmVyRGlzYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NQVV9Xcml0ZUJ1ZmZlckVuYWJsZSggdm9pZCApCit7CisgICAgSFdSRUdCSVRXKCBDUFVfU0NTX0JBU0UgKyBDUFVfU0NTX09fQUNUTFIsIENQVV9TQ1NfQUNUTFJfRElTREVGV0JVRl9CSVROICkgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9DUFVjcHNpZAorICAgICAgICAjdW5kZWYgIENQVWNwc2lkCisgICAgICAgICNkZWZpbmUgQ1BVY3BzaWQgICAgICAgICAgICAgICAgICAgICAgICBST01fQ1BVY3BzaWQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NQVXByaW1hc2sKKyAgICAgICAgI3VuZGVmICBDUFVwcmltYXNrCisgICAgICAgICNkZWZpbmUgQ1BVcHJpbWFzayAgICAgICAgICAgICAgICAgICAgICBST01fQ1BVcHJpbWFzaworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1BVY3BzaWUKKyAgICAgICAgI3VuZGVmICBDUFVjcHNpZQorICAgICAgICAjZGVmaW5lIENQVWNwc2llICAgICAgICAgICAgICAgICAgICAgICAgUk9NX0NQVWNwc2llCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DUFViYXNlcHJpR2V0CisgICAgICAgICN1bmRlZiAgQ1BVYmFzZXByaUdldAorICAgICAgICAjZGVmaW5lIENQVWJhc2VwcmlHZXQgICAgICAgICAgICAgICAgICAgUk9NX0NQVWJhc2VwcmlHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NQVWRlbGF5CisgICAgICAgICN1bmRlZiAgQ1BVZGVsYXkKKyAgICAgICAgI2RlZmluZSBDUFVkZWxheSAgICAgICAgICAgICAgICAgICAgICAgIFJPTV9DUFVkZWxheQorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19DUFVfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NwdV9kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NwdV9kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTgyMTEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3B1X2RvYy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBjcHVfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGNwdV9hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19jcHUgSW50cm9kdWN0aW9uCisvLyEKKy8vISBUaGUgQ1BVIEFQSSBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgcGVyZm9ybWluZyB2ZXJ5IGxvdy1sZXZlbCBjb250cm9sIG9mIHRoZSBzeXN0ZW0gQ1BVLgorLy8hIEFsbCBmdW5jdGlvbnMgaW4gdGhpcyBBUEkgYXJlIHdyaXR0ZW4gaW4gYXNzZW1ibGVyIGluIG9yZGVyIHRvIGVpdGhlciBhY2Nlc3Mgc3BlY2lhbCByZWdpc3RlcnMKKy8vISBvciBhdm9pZCBhbnkgY29tcGlsZXIgb3B0aW1pemF0aW9ucy4gRWFjaCBmdW5jdGlvbiBleGlzdHMgaW4gc2V2ZXJhbCBjb21waWxlciBzcGVjaWZpYyB2ZXJzaW9uczoKKy8vISBPbmUgdmVyc2lvbiBmb3IgZWFjaCBzdXBwb3J0ZWQgY29tcGlsZXIuCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NyeXB0by5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3J5cHRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI0NzBiNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NyeXB0by5jCkBAIC0wLDAgKzEsMTI0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGNyeXB0by5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0yNyAwOTozNzo1NCArMDIwMCAoRnJpLCAyNyBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjUxOQorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIENyeXB0byBtb2R1bGUKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvY3J5cHRvLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBDUllQVE9BZXNMb2FkS2V5CisgICAgI2RlZmluZSBDUllQVE9BZXNMb2FkS2V5ICAgICAgICAgICAgICAgIE5PUk9NX0NSWVBUT0Flc0xvYWRLZXkKKyAgICAjdW5kZWYgIENSWVBUT0Flc0NiYworICAgICNkZWZpbmUgQ1JZUFRPQWVzQ2JjICAgICAgICAgICAgICAgICAgICBOT1JPTV9DUllQVE9BZXNDYmMKKyAgICAjdW5kZWYgIENSWVBUT0Flc0NiY1N0YXR1cworICAgICNkZWZpbmUgQ1JZUFRPQWVzQ2JjU3RhdHVzICAgICAgICAgICAgICBOT1JPTV9DUllQVE9BZXNDYmNTdGF0dXMKKyAgICAjdW5kZWYgIENSWVBUT0Flc0VjYgorICAgICNkZWZpbmUgQ1JZUFRPQWVzRWNiICAgICAgICAgICAgICAgICAgICBOT1JPTV9DUllQVE9BZXNFY2IKKyAgICAjdW5kZWYgIENSWVBUT0Flc0VjYlN0YXR1cworICAgICNkZWZpbmUgQ1JZUFRPQWVzRWNiU3RhdHVzICAgICAgICAgICAgICBOT1JPTV9DUllQVE9BZXNFY2JTdGF0dXMKKyAgICAjdW5kZWYgIENSWVBUT0NjbUF1dGhFbmNyeXB0CisgICAgI2RlZmluZSBDUllQVE9DY21BdXRoRW5jcnlwdCAgICAgICAgICAgIE5PUk9NX0NSWVBUT0NjbUF1dGhFbmNyeXB0CisgICAgI3VuZGVmICBDUllQVE9DY21BdXRoRW5jcnlwdFN0YXR1cworICAgICNkZWZpbmUgQ1JZUFRPQ2NtQXV0aEVuY3J5cHRTdGF0dXMgICAgICBOT1JPTV9DUllQVE9DY21BdXRoRW5jcnlwdFN0YXR1cworICAgICN1bmRlZiAgQ1JZUFRPQ2NtQXV0aEVuY3J5cHRSZXN1bHRHZXQKKyAgICAjZGVmaW5lIENSWVBUT0NjbUF1dGhFbmNyeXB0UmVzdWx0R2V0ICAgTk9ST01fQ1JZUFRPQ2NtQXV0aEVuY3J5cHRSZXN1bHRHZXQKKyAgICAjdW5kZWYgIENSWVBUT0NjbUludkF1dGhEZWNyeXB0CisgICAgI2RlZmluZSBDUllQVE9DY21JbnZBdXRoRGVjcnlwdCAgICAgICAgIE5PUk9NX0NSWVBUT0NjbUludkF1dGhEZWNyeXB0CisgICAgI3VuZGVmICBDUllQVE9DY21JbnZBdXRoRGVjcnlwdFN0YXR1cworICAgICNkZWZpbmUgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRTdGF0dXMgICBOT1JPTV9DUllQVE9DY21JbnZBdXRoRGVjcnlwdFN0YXR1cworICAgICN1bmRlZiAgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRSZXN1bHRHZXQKKyAgICAjZGVmaW5lIENSWVBUT0NjbUludkF1dGhEZWNyeXB0UmVzdWx0R2V0IE5PUk9NX0NSWVBUT0NjbUludkF1dGhEZWNyeXB0UmVzdWx0R2V0CisgICAgI3VuZGVmICBDUllQVE9EbWFFbmFibGUKKyAgICAjZGVmaW5lIENSWVBUT0RtYUVuYWJsZSAgICAgICAgICAgICAgICAgTk9ST01fQ1JZUFRPRG1hRW5hYmxlCisgICAgI3VuZGVmICBDUllQVE9EbWFEaXNhYmxlCisgICAgI2RlZmluZSBDUllQVE9EbWFEaXNhYmxlICAgICAgICAgICAgICAgIE5PUk9NX0NSWVBUT0RtYURpc2FibGUKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ3VycmVudCBBRVMgb3BlcmF0aW9uIGluaXRpYWxpemVkIHRvIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2xhdGlsZSB1aW50MzJfdCBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX05PTkU7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBXcml0ZSB0aGUga2V5IGludG8gdGhlIEtleSBSYW0uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0NSWVBUT0Flc0xvYWRLZXkodWludDMyX3QgKnB1aTMyQWVzS2V5LAorICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyS2V5TG9jYXRpb24pCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyS2V5TG9jYXRpb24gPT0gQ1JZUFRPX0tFWV9BUkVBXzApIHwKKyAgICAgICAgICAgKHVpMzJLZXlMb2NhdGlvbiA9PSBDUllQVE9fS0VZX0FSRUFfMSkgfAorICAgICAgICAgICAodWkzMktleUxvY2F0aW9uID09IENSWVBUT19LRVlfQVJFQV8yKSB8CisgICAgICAgICAgICh1aTMyS2V5TG9jYXRpb24gPT0gQ1JZUFRPX0tFWV9BUkVBXzMpIHwKKyAgICAgICAgICAgKHVpMzJLZXlMb2NhdGlvbiA9PSBDUllQVE9fS0VZX0FSRUFfNCkgfAorICAgICAgICAgICAodWkzMktleUxvY2F0aW9uID09IENSWVBUT19LRVlfQVJFQV81KSB8CisgICAgICAgICAgICh1aTMyS2V5TG9jYXRpb24gPT0gQ1JZUFRPX0tFWV9BUkVBXzYpIHwKKyAgICAgICAgICAgKHVpMzJLZXlMb2NhdGlvbiA9PSBDUllQVE9fS0VZX0FSRUFfNykpOworCisgICAgLy8KKyAgICAvLyBTZXQgY3VycmVudCBvcGVyYXRpbmcgc3RhdGUgb2YgdGhlIENyeXB0byBtb2R1bGUuCisgICAgLy8KKyAgICBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX0tFWUwwQUQ7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIGV4dGVybmFsIGludGVycnVwdCB0byBzdG9wIHRoZSBpbnRlcnJ1cHQgZm9ybSBwcm9wYWdhdGluZworICAgIC8vIGZyb20gdGhlIG1vZHVsZSB0byB0aGUgU3lzdGVtIENQVS4KKyAgICAvLworICAgIEludERpc2FibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIGludGVybmFsIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVRZUEUpID0gQ1JZUFRPX0lSUVRZUEVfTEVWRUw7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFFTikgPSBDUllQVE9fSVJRRU5fRE1BX0lOX0RPTkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX0lSUUVOX1JFU1VMVF9BVkFJTDsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIG1hc3RlciBjb250cm9sIG1vZHVsZS4KKyAgICAvLworICAgIEhXUkVHQklUVyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FMR1NFTCwgQ1JZUFRPX0FMR1NFTF9LRVlfU1RPUkVfQklUTikgPSAxOworCisgICAgLy8KKyAgICAvLyBDbGVhciBhbnkgb3V0c3RhbmRpbmcgZXZlbnRzLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFDTFIpID0gKENSWVBUT19JUlFDTFJfRE1BX0lOX0RPTkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE9fSVJRQ0xSX1JFU1VMVF9BVkFJTCk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSBrZXkgc3RvcmUgbW9kdWxlIGZvciAxMjggYml0IG9wZXJhdGlvbi4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fS0VZU0laRSkgJj0gfkNSWVBUT19LRVlTSVpFX1NJWkVfTTsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0tFWVNJWkUpIHw9IEtFWV9TVE9SRV9TSVpFXzEyODsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIGtleXMgdG8gd3JpdGUgKGUuZy4gS2V5IDApLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19LRVlXUklURUFSRUEpID0gKDB4MDAwMDAwMDEgPDwgdWkzMktleUxvY2F0aW9uKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIENyeXB0byBETUEgY2hhbm5lbCAwLgorICAgIC8vCisgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwQ1RMLCBDUllQVE9fRE1BQ0gwQ1RMX0VOX0JJVE4pID0gMTsKKworICAgIC8vCisgICAgLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSBrZXkgaW4gZXh0LiBtZW1vcnkuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMEVYVEFERFIpID0gKHVpbnQzMl90KXB1aTMyQWVzS2V5OworCisgICAgLy8KKyAgICAvLyBUb3RhbCBrZXkgbGVuZ3RoIGluIGJ5dGVzIChlLmcuIDE2IGZvciAxIHggMTI4LWJpdCBrZXkpLgorICAgIC8vIFdyaXRpbmcgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGVuYWJsZXMgdGhlIERNQSBvcGVyYXRpb24uCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMExFTikgPSBLRVlfQkxFTkdUSDsKKworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgdGhlIERNQSBvcGVyYXRpb24gdG8gY29tcGxldGUuCisgICAgLy8KKyAgICBkbworICAgIHsKKyAgICAgICAgQ1BVZGVsYXkoMSk7CisgICAgfQorICAgIHdoaWxlKCEoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFTVEFUKSAmIDB4MDAwMDAwMDEpKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgZm9yIGVycm9ycyBpbiBETUEgYW5kIGtleSBzdG9yZS4KKyAgICAvLworICAgIGlmKChIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVNUQVQpICYKKyAgICAgICAgICAgIChDUllQVE9fSVJRU1RBVF9ETUFfQlVTX0VSUiB8CisgICAgICAgICAgICAgQ1JZUFRPX0lSUVNUQVRfS0VZX1NUX1dSX0VSUikpID09IDApCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBBY2tub3dsZWRnZS9jbGVhciB0aGUgaW50ZXJydXB0IGFuZCBkaXNhYmxlIHRoZSBtYXN0ZXIgY29udHJvbC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFDTFIpID0gKENSWVBUT19JUlFDTFJfRE1BX0lOX0RPTkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX0lSUUNMUl9SRVNVTFRfQVZBSUwpOworICAgICAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FMR1NFTCkgPSAweDAwMDAwMDAwOworCisgICAgICAgIC8vCisgICAgICAgIC8vIENoZWNrIHN0YXR1cywgaWYgZXJyb3IgcmV0dXJuIGVycm9yIGNvZGUuCisgICAgICAgIC8vCisgICAgICAgIGlmKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fS0VZV1JJVFRFTkFSRUEpICE9ICgxdSA8PCB1aTMyS2V5TG9jYXRpb24pKQorICAgICAgICB7CisgICAgICAgICAgICBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX05PTkU7CisgICAgICAgICAgICByZXR1cm4gKEFFU19LRVlTVE9SRV9SRUFEX0VSUk9SKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gUmV0dXJuIHN1Y2Nlc3MuCisgICAgLy8KKyAgICBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX05PTkU7CisgICAgcmV0dXJuIChBRVNfU1VDQ0VTUyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU3RhcnQgYW4gQUVTLUNCQyBvcGVyYXRpb24gKGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbikuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0NSWVBUT0Flc0NiYyh1aW50MzJfdCAqcHVpMzJNc2dJbiwgdWludDMyX3QgKnB1aTMyTXNnT3V0LCB1aW50MzJfdCB1aTMyTXNnTGVuZ3RoLAorICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMk5vbmNlLCB1aW50MzJfdCB1aTMyS2V5TG9jYXRpb24sCisgICAgICAgICAgICAgYm9vbCBiRW5jcnlwdCwgYm9vbCBiSW50RW5hYmxlKQoreworICAgIHVpbnQzMl90IHVpMzJDdHJsVmFsOworCisgICAgLy8KKyAgICAvLyBTZXQgY3VycmVudCBvcGVyYXRpbmcgc3RhdGUgb2YgdGhlIENyeXB0byBtb2R1bGUuCisgICAgLy8KKyAgICBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX0NCQzsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIGludGVybmFsIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVRZUEUpID0gQ1JZUFRPX0lSUVRZUEVfTEVWRUw7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFFTikgPSBDUllQVE9fSVJRRU5fUkVTVUxUX0FWQUlMOworCisgICAgLy8KKyAgICAvLyBDbGVhciBhbnkgb3V0c3RhbmRpbmcgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRQ0xSKSA9IChDUllQVE9fSVJRQ0xSX0RNQV9JTl9ET05FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX0lSUUNMUl9SRVNVTFRfQVZBSUwpOworCisgICAgLy8KKyAgICAvLyBXYWl0IGZvciBpbnRlcnJ1cHQgbGluZXMgZnJvbSBtb2R1bGUgdG8gYmUgY2xlYXJlZAorICAgIC8vCisgICAgd2hpbGUoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFTVEFUKSAmIChDUllQVE9fSVJRU1RBVF9ETUFfSU5fRE9ORSB8IENSWVBUT19JUlFTVEFUX1JFU1VMVF9BVkFJTCkpOworCisgICAgLy8KKyAgICAvLyBJZiB1c2luZyBpbnRlcnJ1cHRzIGNsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzCisgICAgLy8gZm9yIHRoZSBDcnlwdG8gbW9kdWxlLgorICAgIC8vCisgICAgaWYoYkludEVuYWJsZSkKKyAgICB7CisgICAgICAgIEludFBlbmRDbGVhcihJTlRfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEpOworICAgICAgICBJbnRFbmFibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSBNYXN0ZXIgQ29udHJvbCBtb2R1bGUuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FMR1NFTCkgPSBDUllQVE9fQUxHU0VMX0FFUzsKKworICAgIC8vCisgICAgLy8KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fS0VZUkVBREFSRUEpID0gdWkzMktleUxvY2F0aW9uOworCisgICAgLy8KKyAgICAvL1dhaXQgdW50aWwga2V5IGlzIGxvYWRlZCB0byB0aGUgQUVTIG1vZHVsZS4KKyAgICAvLworICAgIGRvCisgICAgeworICAgICAgICBDUFVkZWxheSgxKTsKKyAgICB9CisgICAgd2hpbGUoKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fS0VZUkVBREFSRUEpICYgQ1JZUFRPX0tFWVJFQURBUkVBX0JVU1kpKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgZm9yIEtleSBzdG9yZSBSZWFkIGVycm9yLgorICAgIC8vCisgICAgaWYoKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRU1RBVCkmIENSWVBUT19LRVlfU1RfUkRfRVJSKSkKKyAgICB7CisgICAgICAgIHJldHVybiAoQUVTX0tFWVNUT1JFX1JFQURfRVJST1IpOworICAgIH0KKworICAgIC8vCisgICAgLy8gV3JpdGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNJVjApID0gcHVpMzJOb25jZVswXTsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0lWMSkgPSBwdWkzMk5vbmNlWzFdOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTSVYyKSA9IHB1aTMyTm9uY2VbMl07CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNJVjMpID0gcHVpMzJOb25jZVszXTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIEFFUyBlbmdpbmUgZm9yIEFFUy1DQkMgd2l0aCAxMjgtYml0IGtleSBzaXplLgorICAgIC8vCisgICAgdWkzMkN0cmxWYWwgID0gKENSWVBUT19BRVNDVExfU0FWRV9DT05URVhUIHwgQ1JZUFRPX0FFU0NUTF9DQkMpOworICAgIGlmKGJFbmNyeXB0KQorICAgIHsKKyAgICAgICAgdWkzMkN0cmxWYWwgfD0gQ1JZUFRPX0FFUzEyOF9FTkNSWVBUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aTMyQ3RybFZhbCB8PSBDUllQVE9fQUVTMTI4X0RFQ1JZUFQ7CisgICAgfQorICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTQ1RMKSA9IHVpMzJDdHJsVmFsOworCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBjcnlwdG8gYmxvY2sgKHBsYWluIHRleHQpLgorICAgIC8vIExvdyBhbmQgaGlnaCBwYXJ0IChoaWdoIHBhcnQgaXMgYXNzdW1lZCB0byBiZSBhbHdheXMgMCkuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0RBVEFMRU4wKSA9IHVpMzJNc2dMZW5ndGg7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNEQVRBTEVOMSkgPSAwOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTQVVUSExFTikgID0gMDsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIENyeXB0byBETUEgY2hhbm5lbCAwLgorICAgIC8vCisgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwQ1RMLCBDUllQVE9fRE1BQ0gwQ1RMX0VOX0JJVE4pID0gMTsKKworICAgIC8vCisgICAgLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSBpbnB1dCBkYXRhIGluIGV4dC4gbWVtb3J5LgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBFWFRBRERSKSA9ICh1aW50MzJfdClwdWkzMk1zZ0luOworCisgICAgLy8KKyAgICAvLyBJbnB1dCBkYXRhIGxlbmd0aCBpbiBieXRlcywgZXF1YWwgdG8gdGhlIG1lc3NhZ2UuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMExFTikgPSB1aTMyTXNnTGVuZ3RoOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgQ3J5cHRvIERNQSBjaGFubmVsIDEuCisgICAgLy8KKyAgICBIV1JFR0JJVFcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDFDVEwsIENSWVBUT19ETUFDSDFDVExfRU5fQklUTikgPSAxOworCisgICAgLy8KKyAgICAvLyBTZXQgdXAgdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGRhdGEuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMUVYVEFERFIpID0gKHVpbnQzMl90KXB1aTMyTXNnT3V0OworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gxTEVOKSA9IHVpMzJNc2dMZW5ndGg7CisKKyAgICAvLworICAgIC8vIFJldHVybiBzdWNjZXNzCisgICAgLy8KKyAgICByZXR1cm4gQUVTX1NVQ0NFU1M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2hlY2sgdGhlIHJlc3VsdCBvZiBhbiBBRVMgQ0JDIG9wZXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitDUllQVE9BZXNDYmNTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4oQ1JZUFRPQWVzRWNiU3RhdHVzKCkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFN0YXJ0IGFuIEFFUy1FQ0Igb3BlcmF0aW9uIChlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24pLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitDUllQVE9BZXNFY2IodWludDMyX3QgKnB1aTMyTXNnSW4sIHVpbnQzMl90ICpwdWkzMk1zZ091dCwKKyAgICAgICAgICAgICB1aW50MzJfdCB1aTMyS2V5TG9jYXRpb24sIGJvb2wgYkVuY3J5cHQsCisgICAgICAgICAgICAgYm9vbCBiSW50RW5hYmxlKQoreworICAgIC8vCisgICAgLy8gU2V0IGN1cnJlbnQgb3BlcmF0aW5nIHN0YXRlIG9mIHRoZSBDcnlwdG8gbW9kdWxlLgorICAgIC8vCisgICAgZ191aTMyQ3VycmVudEFlc09wID0gQ1JZUFRPX0FFU19FQ0I7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBpbnRlcm5hbCBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFUWVBFKSA9IENSWVBUT19JUlFUWVBFX0xFVkVMOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRRU4pID0gQ1JZUFRPX0lSUUVOX1JFU1VMVF9BVkFJTDsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgYW55IG91dHN0YW5kaW5nIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUNMUikgPSAoQ1JZUFRPX0lSUUNMUl9ETUFfSU5fRE9ORSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUT19JUlFDTFJfUkVTVUxUX0FWQUlMKTsKKworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgaW50ZXJydXB0IGxpbmVzIGZyb20gbW9kdWxlIHRvIGJlIGNsZWFyZWQKKyAgICAvLworICAgIHdoaWxlKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRU1RBVCkgJiAoQ1JZUFRPX0lSUVNUQVRfRE1BX0lOX0RPTkUgfCBDUllQVE9fSVJRU1RBVF9SRVNVTFRfQVZBSUwpKTsKKworICAgIC8vCisgICAgLy8gSWYgdXNpbmcgaW50ZXJydXB0cyBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCBlbmFibGUgaW50ZXJydXB0cworICAgIC8vIGZvciB0aGUgQ3J5cHRvIG1vZHVsZS4KKyAgICAvLworICAgIGlmKGJJbnRFbmFibGUpCisgICAgeworICAgICAgICBJbnRQZW5kQ2xlYXIoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICAgICAgSW50RW5hYmxlKElOVF9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgTWFzdGVyIENvbnRyb2wgbW9kdWxlLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BTEdTRUwpID0gQ1JZUFRPX0FMR1NFTF9BRVM7CisKKyAgICAvLworICAgIC8vCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0tFWVJFQURBUkVBKSA9IHVpMzJLZXlMb2NhdGlvbjsKKworICAgIC8vCisgICAgLy9XYWl0IHVudGlsIGtleSBpcyBsb2FkZWQgdG8gdGhlIEFFUyBtb2R1bGUuCisgICAgLy8KKyAgICBkbworICAgIHsKKyAgICAgICAgQ1BVZGVsYXkoMSk7CisgICAgfQorICAgIHdoaWxlKChIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0tFWVJFQURBUkVBKSAmIENSWVBUT19LRVlSRUFEQVJFQV9CVVNZKSk7CisKKyAgICAvLworICAgIC8vIENoZWNrIGZvciBLZXkgc3RvcmUgUmVhZCBlcnJvci4KKyAgICAvLworICAgIGlmKChIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVNUQVQpJiBDUllQVE9fS0VZX1NUX1JEX0VSUikpCisgICAgeworICAgICAgICByZXR1cm4gKEFFU19LRVlTVE9SRV9SRUFEX0VSUk9SKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSBBRVMgZW5naW5lIChwcm9ncmFtIEFFUy1FQ0ItMTI4IGVuY3J5cHRpb24gYW5kIG5vCisgICAgLy8gaW5pdGlhbGl6YXRpb24gdmVjdG9yIC0gSVYpLgorICAgIC8vCisgICAgaWYoYkVuY3J5cHQpCisgICAgeworICAgICAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0NUTCkgPSBDUllQVE9fQUVTMTI4X0VOQ1JZUFQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTQ1RMKSA9IENSWVBUT19BRVMxMjhfREVDUllQVDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0RBVEFMRU4wKSA9IEFFU19FQ0JfTEVOR1RIOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTREFUQUxFTjEpID0gMDsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIENyeXB0byBETUEgY2hhbm5lbCAwLgorICAgIC8vCisgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwQ1RMLCBDUllQVE9fRE1BQ0gwQ1RMX0VOX0JJVE4pID0gMTsKKworICAgIC8vCisgICAgLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSBpbnB1dCBkYXRhIGluIGV4dC4gbWVtb3J5LgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBFWFRBRERSKSA9ICh1aW50MzJfdClwdWkzMk1zZ0luOworCisgICAgLy8KKyAgICAvLyBJbnB1dCBkYXRhIGxlbmd0aCBpbiBieXRlcywgZXF1YWwgdG8gdGhlIG1lc3NhZ2UuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMExFTikgPSBBRVNfRUNCX0xFTkdUSDsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIENyeXB0byBETUEgY2hhbm5lbCAxLgorICAgIC8vCisgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gxQ1RMLCBDUllQVE9fRE1BQ0gxQ1RMX0VOX0JJVE4pID0gMTsKKworICAgIC8vCisgICAgLy8gU2V0IHVwIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIG91dHB1dCBkYXRhLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDFFWFRBRERSKSA9ICh1aW50MzJfdClwdWkzMk1zZ091dDsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMUxFTikgPSBBRVNfRUNCX0xFTkdUSDsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHN1Y2Nlc3MKKyAgICAvLworICAgIHJldHVybiBBRVNfU1VDQ0VTUzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDaGVjayB0aGUgcmVzdWx0IG9mIGFuIEFFUyBFQ0Igb3BlcmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0NSWVBUT0Flc0VjYlN0YXR1cyh2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJTdGF0dXM7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY3VycmVudCBETUEgc3RhdHVzLgorICAgIC8vCisgICAgdWkzMlN0YXR1cyA9IEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BU1RBVCk7CisKKyAgICAvLworICAgIC8vIENoZWNrIGlmIERNQSBpcyBzdGlsbCBidXN5LgorICAgIC8vCisgICAgaWYodWkzMlN0YXR1cyAmIENSWVBUT19ETUFfQlNZKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChBRVNfRE1BX0JTWSk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBETUEgb3BlcmF0aW9uIC0gcmV0dXJuIGVycm9yIGlmIG5vdCBzdWNjZXNzLgorICAgIC8vCisgICAgaWYodWkzMlN0YXR1cyAmIENSWVBUT19ETUFfQlVTX0VSUk9SKQorICAgIHsKKyAgICAgICAgZ191aTMyQ3VycmVudEFlc09wID0gQ1JZUFRPX0FFU19OT05FOworICAgICAgICByZXR1cm4gKEFFU19ETUFfQlVTX0VSUk9SKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE9wZXJhdGlvbiBzdWNjZXNzZnVsIC0gZGlzYWJsZSBpbnRlcnJ1cHQgYW5kIHJldHVybiBzdWNjZXNzLgorICAgIC8vCisgICAgZ191aTMyQ3VycmVudEFlc09wID0gQ1JZUFRPX0FFU19OT05FOworICAgIEludERpc2FibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICByZXR1cm4gKEFFU19TVUNDRVNTKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTdGFydCBDQ00gb3BlcmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0NSWVBUT0NjbUF1dGhFbmNyeXB0KGJvb2wgYkVuY3J5cHQsIHVpbnQzMl90IHVpMzJBdXRoTGVuZ3RoICwKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMk5vbmNlLCB1aW50MzJfdCAqcHVpMzJQbGFpblRleHQsCisgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyUGxhaW5UZXh0TGVuZ3RoLCB1aW50MzJfdCAqcHVpMzJIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMySGVhZGVyTGVuZ3RoLCB1aW50MzJfdCB1aTMyS2V5TG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyRmllbGRMZW5ndGgsIGJvb2wgYkludEVuYWJsZSkKK3sKKyAgICB1aW50MzJfdCB1aTMyQ3RybFZhbDsKKyAgICB1aW50MzJfdCBpOworICAgIHVpbnQzMl90ICpwdWkzMkNpcGhlclRleHQ7CisgICAgdW5pb24geworICAgICAgICB1aW50MzJfdCB3WzRdOworICAgICAgICB1aW50OF90ICBiWzE2XTsKKyAgICB9IHVpOEluaXRWZWM7CisKKyAgICAvLworICAgIC8vIElucHV0IGFkZHJlc3MgZm9yIHRoZSBlbmNyeXB0aW9uIGVuZ2luZSBpcyB0aGUgc2FtZSBhcyB0aGUgb3V0cHV0LgorICAgIC8vCisgICAgcHVpMzJDaXBoZXJUZXh0ID0gcHVpMzJQbGFpblRleHQ7CisKKyAgICAvLworICAgIC8vIFNldCBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZSBvZiB0aGUgQ3J5cHRvIG1vZHVsZS4KKyAgICAvLworICAgIGdfdWkzMkN1cnJlbnRBZXNPcCA9IENSWVBUT19BRVNfQ0NNOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIGdsb2JhbCBpbnRlcnJ1cHQsIGVuYWJsZSBsb2NhbCBpbnRlcnJ1cHQgYW5kIGNsZWFyIGFueSBwZW5kaW5nCisgICAgLy8gaW50ZXJydXB0cy4KKyAgICAvLworICAgIEludERpc2FibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUNMUikgPSAoQ1JZUFRPX0lSUUNMUl9ETUFfSU5fRE9ORSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUT19JUlFDTFJfUkVTVUxUX0FWQUlMKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIGludGVybmFsIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVRZUEUpID0gQ1JZUFRPX0lSUVRZUEVfTEVWRUw7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFFTikgPSBDUllQVE9fSVJRRU5fRE1BX0lOX0RPTkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX0lSUUVOX1JFU1VMVF9BVkFJTDsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIG1hc3RlciBjb250cm9sIG1vZHVsZSBmb3IgQUVTIG9wZXJhdGlvbi4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUxHU0VMKSA9IENSWVBUT19BTEdTRUxfQUVTOworCisgICAgLy8KKyAgICAvLyBFbmFibGUga2V5cyB0byByZWFkIChlLmcuIEtleSAwKS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fS0VZUkVBREFSRUEpID0gdWkzMktleUxvY2F0aW9uOworCisgICAgLy8KKyAgICAvLyBXYWl0IHVudGlsIGtleSBpcyBsb2FkZWQgdG8gdGhlIEFFUyBtb2R1bGUuCisgICAgLy8KKyAgICBkbworICAgIHsKKyAgICAgICAgQ1BVZGVsYXkoMSk7CisgICAgfQorICAgIHdoaWxlKChIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0tFWVJFQURBUkVBKSAmIENSWVBUT19LRVlSRUFEQVJFQV9CVVNZKSk7CisKKyAgICAvLworICAgIC8vIENoZWNrIGZvciBLZXkgc3RvcmUgUmVhZCBlcnJvci4KKyAgICAvLworICAgIGlmKChIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVNUQVQpJiBDUllQVE9fS0VZX1NUX1JEX0VSUikpCisgICAgeworICAgICAgICByZXR1cm4gKEFFU19LRVlTVE9SRV9SRUFEX0VSUk9SKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFByZXBhcmUgdGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciAoSVYpLAorICAgIC8vIExlbmd0aCBvZiBOb25jZSBsKG4pID0gMTUgLSB1aTMyRmllbGRMZW5ndGguCisgICAgLy8KKyAgICB1aThJbml0VmVjLmJbMF0gPSB1aTMyRmllbGRMZW5ndGggLSAxOworICAgIGZvcihpID0gMDsgaSA8IDEyOyBpKyspCisgICAgeworICAgICAgICB1aThJbml0VmVjLmJbaSArIDFdID0gKCh1aW50OF90KilwdWkzMk5vbmNlKVtpXTsKKyAgICB9CisgICAgaWYodWkzMkZpZWxkTGVuZ3RoID09IDIpCisgICAgeworICAgICAgICB1aThJbml0VmVjLmJbMTNdID0gKCh1aW50OF90KilwdWkzMk5vbmNlKVsxMl07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpOEluaXRWZWMuYlsxM10gPSAwOworICAgIH0KKyAgICB1aThJbml0VmVjLmJbMTRdID0gMDsKKyAgICB1aThJbml0VmVjLmJbMTVdID0gMDsKKworICAgIC8vCisgICAgLy8gV3JpdGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNJVjApID0gdWk4SW5pdFZlYy53WzBdOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTSVYxKSA9IHVpOEluaXRWZWMud1sxXTsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0lWMikgPSB1aThJbml0VmVjLndbMl07CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNJVjMpID0gdWk4SW5pdFZlYy53WzNdOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgQUVTIGVuZ2luZS4KKyAgICAvLworICAgIHVpMzJDdHJsVmFsID0gKCh1aTMyRmllbGRMZW5ndGggLSAxKSA8PCBDUllQVE9fQUVTQ1RMX0NDTV9MX1MpOworICAgIGlmICggdWkzMkF1dGhMZW5ndGggPj0gMiApIHsKKyAgICAgICAgdWkzMkN0cmxWYWwgfD0gKCgoIHVpMzJBdXRoTGVuZ3RoIC0gMiApID4+IDEgKSA8PCBDUllQVE9fQUVTQ1RMX0NDTV9NX1MgKTsKKyAgICB9CisgICAgdWkzMkN0cmxWYWwgfD0gQ1JZUFRPX0FFU0NUTF9DQ007CisgICAgdWkzMkN0cmxWYWwgfD0gQ1JZUFRPX0FFU0NUTF9DVFI7CisgICAgdWkzMkN0cmxWYWwgfD0gQ1JZUFRPX0FFU0NUTF9TQVZFX0NPTlRFWFQ7CisgICAgdWkzMkN0cmxWYWwgfD0gKEtFWV9TVE9SRV9TSVpFXzEyOCA8PCBDUllQVE9fQUVTQ1RMX0tFWV9TSVpFX1MpOworICAgIHVpMzJDdHJsVmFsIHw9ICgxIDw8IENSWVBUT19BRVNDVExfRElSX1MpOworICAgIHVpMzJDdHJsVmFsIHw9IChDUllQVE9fQUVTX0NUUl8xMjggPDwgQ1JZUFRPX0FFU0NUTF9DVFJfV0lEVEhfUyk7CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBjb25maWd1cmF0aW9uIGZvciAxMjggYml0IEFFUy1DQ00uCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0NUTCkgPSB1aTMyQ3RybFZhbDsKKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgY3J5cHRvIGJsb2NrIChwbGFpbiB0ZXh0KS4KKyAgICAvLyBMb3cgYW5kIGhpZ2ggcGFydCAoaGlnaCBwYXJ0IGlzIGFzc3VtZWQgdG8gYmUgYWx3YXlzIDApLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNEQVRBTEVOMCkgPSB1aTMyUGxhaW5UZXh0TGVuZ3RoOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTREFUQUxFTjEpICA9ICAwOworCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBoZWFkZXIgZmllbGQuCisgICAgLy8gQWxzbyBjYWxsZWQgQUFEIC0gQWRkaXRpb25hbCBBdXRoZW50aWNhdGlvbiBEYXRhLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNBVVRITEVOKSA9IHVpMzJIZWFkZXJMZW5ndGg7CisKKyAgICAvLworICAgIC8vIENoZWNrIGlmIGFueSBoZWFkZXIgaW5mb3JtYXRpb24gKEFBRCkuCisgICAgLy8gSWYgc28gY29uZmlndXJlIHRoZSBETUEgY29udHJvbGxlciB0byBmZXRjaCB0aGUgaGVhZGVyLgorICAgIC8vCisgICAgaWYodWkzMkhlYWRlckxlbmd0aCAhPSAwKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRW5hYmxlIERNQSBjaGFubmVsIDAuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHQklUVyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMENUTCwgQ1JZUFRPX0RNQUNIMENUTF9FTl9CSVROKSA9IDE7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaGVhZGVyIChBQUQpLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMEVYVEFERFIpID0gKHVpbnQzMl90KXB1aTMySGVhZGVyOworCisgICAgICAgIC8vCisgICAgICAgIC8vIEhlYWRlciBsZW5ndGggaW4gYnl0ZXMgKG1heSBiZSBub24tYmxvY2sgc2l6ZSBhbGlnbmVkKS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBMRU4pID0gdWkzMkhlYWRlckxlbmd0aDsKKworICAgICAgICAvLworICAgICAgICAvLyBXYWl0IGZvciBjb21wbGV0aW9uIG9mIHRoZSBoZWFkZXIgZGF0YSB0cmFuc2ZlciwgRE1BX0lOX0RPTkUuCisgICAgICAgIC8vCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIENQVWRlbGF5KDEpOworICAgICAgICB9CisgICAgICAgIHdoaWxlKCEoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFTVEFUKSAmIENSWVBUT19JUlFTVEFUX0RNQV9JTl9ET05FKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ2hlY2sgZm9yIERNQSBlcnJvcnMuCisgICAgICAgIC8vCisgICAgICAgIGlmKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRU1RBVCkgJiBDUllQVE9fRE1BX0JVU19FUlIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBBRVNfRE1BX0JVU19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gQ2xlYXIgaW50ZXJydXB0IHN0YXR1cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRQ0xSKSA9IChDUllQVE9fSVJRQ0xSX0RNQV9JTl9ET05FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX0lSUUNMUl9SRVNVTFRfQVZBSUwpOworCisgICAgLy8KKyAgICAvLyBXYWl0IGZvciBpbnRlcnJ1cHQgbGluZXMgZnJvbSBtb2R1bGUgdG8gYmUgY2xlYXJlZAorICAgIC8vCisgICAgd2hpbGUoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFTVEFUKSAmIChDUllQVE9fSVJRU1RBVF9ETUFfSU5fRE9ORSB8IENSWVBUT19JUlFTVEFUX1JFU1VMVF9BVkFJTCkpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIENSWVBUT19JUlFFTl9ETUFfSU5fRE9ORSBpbnRlcnJ1cHQgYXMgd2Ugb25seQorICAgIC8vIHdhbnQgaW50ZXJydXB0IHRvIHRyaWdnZXIgb25jZSBSRVNVTFRfQVZBSUwgb2NjdXJzLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFFTikgJj0gfkNSWVBUT19JUlFFTl9ETUFfSU5fRE9ORTsKKworCisgICAgLy8KKyAgICAvLyBJcyB1c2luZyBpbnRlcnJ1cHRzIGVuYWJsZSBnbG9iYWxseS4KKyAgICAvLworICAgIGlmKGJJbnRFbmFibGUpCisgICAgeworICAgICAgICBJbnRQZW5kQ2xlYXIoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICAgICAgSW50RW5hYmxlKElOVF9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBFbmFibGUgaW50ZXJydXB0cyBsb2NhbGx5LgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFFTikgPSBDUllQVE9fSVJRRU5fUkVTVUxUX0FWQUlMOworCisgICAgLy8KKyAgICAvLyBQZXJmb3JtIGVuY3J5cHRpb24gaWYgcmVxdWVzdGVkLgorICAgIC8vCisgICAgaWYoYkVuY3J5cHQpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBFbmFibGUgRE1BIGNoYW5uZWwgMAorICAgICAgICAvLworICAgICAgICBIV1JFR0JJVFcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBDVEwsIENSWVBUT19ETUFDSDBDVExfRU5fQklUTikgPSAxOworCisgICAgICAgIC8vCisgICAgICAgIC8vIGJhc2UgYWRkcmVzcyBvZiB0aGUgcGF5bG9hZCBkYXRhIGluIGV4dC4gbWVtb3J5LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMEVYVEFERFIpID0KKyAgICAgICAgICAgICh1aW50MzJfdClwdWkzMlBsYWluVGV4dDsKKworICAgICAgICAvLworICAgICAgICAvLyBFbmFibGUgRE1BIGNoYW5uZWwgMQorICAgICAgICAvLworICAgICAgICBIV1JFR0JJVFcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDFDVEwsIENSWVBUT19ETUFDSDFDVExfRU5fQklUTikgPSAxOworCisgICAgICAgIC8vCisgICAgICAgIC8vIEJhc2UgYWRkcmVzcyBvZiB0aGUgb3V0cHV0IGRhdGEgYnVmZmVyLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMUVYVEFERFIpID0KKyAgICAgICAgICAgICh1aW50MzJfdClwdWkzMkNpcGhlclRleHQ7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUGF5bG9hZCBkYXRhIGxlbmd0aCBpbiBieXRlcywgZXF1YWwgdG8gdGhlIHBsYWludGV4dCBsZW5ndGguCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwTEVOKSA9IHVpMzJQbGFpblRleHRMZW5ndGg7CisgICAgICAgIC8vCisgICAgICAgIC8vIE91dHB1dCBkYXRhIGxlbmd0aCBpbiBieXRlcywgZXF1YWwgdG8gdGhlIHBsYWludGV4dCBsZW5ndGguCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gxTEVOKSA9IHVpMzJQbGFpblRleHRMZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIEFFU19TVUNDRVNTOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENoZWNrIHRoZSByZXN1bHQgb2YgYW4gQUVTIENDTSBvcGVyYXRpb24uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0NSWVBUT0NjbUF1dGhFbmNyeXB0U3RhdHVzKHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMlN0YXR1czsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjdXJyZW50IERNQSBzdGF0dXMuCisgICAgLy8KKyAgICB1aTMyU3RhdHVzID0gSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFTVEFUKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgRE1BIGlzIHN0aWxsIGJ1c3kuCisgICAgLy8KKyAgICBpZih1aTMyU3RhdHVzICYgQ1JZUFRPX0RNQV9CU1kpCisgICAgeworICAgICAgICByZXR1cm4gKEFFU19ETUFfQlNZKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIERNQSBvcGVyYXRpb24gLSByZXR1cm4gZXJyb3IgaWYgbm90IHN1Y2Nlc3MuCisgICAgLy8KKyAgICBpZih1aTMyU3RhdHVzICYgQ1JZUFRPX0RNQV9CVVNfRVJST1IpCisgICAgeworICAgICAgICBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX05PTkU7CisgICAgICAgIHJldHVybiAoQUVTX0RNQV9CVVNfRVJST1IpOworICAgIH0KKworICAgIC8vCisgICAgLy8gT3BlcmF0aW9uIHN1Y2Nlc3NmdWwgLSBkaXNhYmxlIGludGVycnVwdCBhbmQgcmV0dXJuIHN1Y2Nlc3MuCisgICAgLy8KKyAgICBJbnREaXNhYmxlKElOVF9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSk7CisgICAgcmV0dXJuIChBRVNfU1VDQ0VTUyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IHRoZSByZXN1bHQgb2YgYW4gQUVTLUNDTSBvcGVyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQ1JZUFRPQ2NtQXV0aEVuY3J5cHRSZXN1bHRHZXQodWludDMyX3QgdWkzMlRhZ0xlbmd0aCwgdWludDMyX3QgKnB1aTMyQ2NtVGFnKQoreworICAgIHVpbnQzMl90IHZvbGF0aWxlIHVpMzJUYWdbNF07CisgICAgdWludDMyX3QgdWkzMklkeDsKKworICAgIC8vCisgICAgLy8gUmVzdWx0IGhhcyBhbHJlYWR5IGJlZW4gY29waWVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIGJ5IERNQQorICAgIC8vIERpc2FibGUgbWFzdGVyIGNvbnRyb2wuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FMR1NFTCkgPSAweDAwMDAwMDAwOworCisgICAgLy8KKyAgICAvLyBSZWFkIHRhZyAtIHdhaXQgZm9yIHRoZSBjb250ZXh0IHJlYWR5IGJpdC4KKyAgICAvLworICAgIGRvCisgICAgeworICAgICAgICBDUFVkZWxheSgxKTsKKyAgICB9CisgICAgd2hpbGUoIShIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0NUTCkgJgorICAgICAgICAgICAgQ1JZUFRPX0FFU0NUTF9TQVZFRF9DT05URVhUX1JEWSkpOworCisgICAgLy8KKyAgICAvLyBSZWFkIHRoZSBUYWcgcmVnaXN0ZXJzLgorICAgIC8vCisgICAgdWkzMlRhZ1swXSA9IEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTVEFHT1VUMCk7CisgICAgdWkzMlRhZ1sxXSA9IEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTVEFHT1VUMSk7CisgICAgdWkzMlRhZ1syXSA9IEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTVEFHT1VUMik7CisgICAgdWkzMlRhZ1szXSA9IEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTVEFHT1VUMyk7CisKKyAgICBmb3IodWkzMklkeCA9IDA7IHVpMzJJZHggPCB1aTMyVGFnTGVuZ3RoIDsgdWkzMklkeCsrKQorICAgIHsKKyAgICAgICAgKigodWludDhfdCopcHVpMzJDY21UYWcgKyB1aTMySWR4KSA9ICooKHVpbnQ4X3QqKXVpMzJUYWcgKyB1aTMySWR4KTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE9wZXJhdGlvbiBzdWNjZXNzZnVsIC0gIGNsZWFyIGludGVycnVwdCBzdGF0dXMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUNMUikgPSAoQ1JZUFRPX0lSUUNMUl9ETUFfSU5fRE9ORSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUT19JUlFDTFJfUkVTVUxUX0FWQUlMKTsKKyAgICBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX05PTkU7CisgICAgcmV0dXJuIEFFU19TVUNDRVNTOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFN0YXJ0IGEgQ0NNIERlY3J5cHRpb24gYW5kIEludmVyc2UgQXV0aGVudGljYXRpb24gb3BlcmF0aW9uLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitDUllQVE9DY21JbnZBdXRoRGVjcnlwdChib29sIGJEZWNyeXB0LCB1aW50MzJfdCB1aTMyQXV0aExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMk5vbmNlLCB1aW50MzJfdCAqcHVpMzJDaXBoZXJUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNpcGhlclRleHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVpMzJIZWFkZXIsIHVpbnQzMl90IHVpMzJIZWFkZXJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyS2V5TG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyRmllbGRMZW5ndGgsIGJvb2wgYkludEVuYWJsZSkKK3sKKyAgICB1aW50MzJfdCB1aTMyQ3RybFZhbDsKKyAgICB1aW50MzJfdCBpOworICAgIHVpbnQzMl90ICpwdWkzMlBsYWluVGV4dDsKKyAgICB1aW50MzJfdCB1aTMyQ3J5cHRvQmxvY2tMZW5ndGg7CisgICAgdW5pb24geworICAgICAgICB1aW50MzJfdCB3WzRdOworICAgICAgICB1aW50OF90ICBiWzE2XTsKKyAgICB9IHVpOEluaXRWZWM7CisKKyAgICAvLworICAgIC8vIElucHV0IGFkZHJlc3MgZm9yIHRoZSBlbmNyeXB0aW9uIGVuZ2luZSBpcyB0aGUgc2FtZSBhcyB0aGUgb3V0cHV0LgorICAgIC8vCisgICAgcHVpMzJQbGFpblRleHQgPSBwdWkzMkNpcGhlclRleHQ7CisKKyAgICAvLworICAgIC8vIFNldCBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZSBvZiB0aGUgQ3J5cHRvIG1vZHVsZS4KKyAgICAvLworICAgIGdfdWkzMkN1cnJlbnRBZXNPcCA9IENSWVBUT19BRVNfQ0NNOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIGdsb2JhbCBpbnRlcnJ1cHQsIGVuYWJsZSBsb2NhbCBpbnRlcnJ1cHQgYW5kIGNsZWFyIGFueSBwZW5kaW5nLgorICAgIC8vIGludGVycnVwdHMuCisgICAgLy8KKyAgICBJbnREaXNhYmxlKElOVF9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSk7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFDTFIpID0gKENSWVBUT19JUlFDTFJfRE1BX0lOX0RPTkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE9fSVJRQ0xSX1JFU1VMVF9BVkFJTCk7CisgICAgLy8KKyAgICAvLyBFbmFibGUgaW50ZXJuYWwgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRVFlQRSkgPSBDUllQVE9fSVJRVFlQRV9MRVZFTDsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUVOKSA9IENSWVBUT19JUlFFTl9ETUFfSU5fRE9ORSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE9fSVJRRU5fUkVTVUxUX0FWQUlMOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgbWFzdGVyIGNvbnRyb2wgbW9kdWxlIGZvciBBRVMgb3BlcmF0aW9uLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BTEdTRUwpID0gQ1JZUFRPX0FMR1NFTF9BRVM7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBrZXlzIHRvIHJlYWQgKGUuZy4gS2V5IDApLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19LRVlSRUFEQVJFQSkgPSB1aTMyS2V5TG9jYXRpb247CisKKyAgICAvLworICAgIC8vIFdhaXQgdW50aWwga2V5IGlzIGxvYWRlZCB0byB0aGUgQUVTIG1vZHVsZS4KKyAgICAvLworICAgIGRvCisgICAgeworICAgICAgICBDUFVkZWxheSgxKTsKKyAgICB9CisgICAgd2hpbGUoKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fS0VZUkVBREFSRUEpICYgQ1JZUFRPX0tFWVJFQURBUkVBX0JVU1kpKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgZm9yIEtleSBzdG9yZSBSZWFkIGVycm9yLgorICAgIC8vCisgICAgaWYoKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRU1RBVCkmIENSWVBUT19LRVlfU1RfUkRfRVJSKSkKKyAgICB7CisgICAgICAgIHJldHVybiAoQUVTX0tFWVNUT1JFX1JFQURfRVJST1IpOworICAgIH0KKworICAgIC8vCisgICAgLy8gUHJlcGFyZSB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yIChJViksCisgICAgLy8gTGVuZ3RoIG9mIE5vbmNlIGwobikgPSAxNSAtIHVpMzJGaWVsZExlbmd0aC4KKyAgICAvLworICAgIHVpOEluaXRWZWMuYlswXSA9IHVpMzJGaWVsZExlbmd0aCAtIDE7CisgICAgZm9yKGkgPSAwOyBpIDwgMTI7IGkrKykKKyAgICB7CisgICAgICAgIHVpOEluaXRWZWMuYltpICsgMV0gPSAoKHVpbnQ4X3QqKXB1aTMyTm9uY2UpW2ldOworICAgIH0KKyAgICBpZih1aTMyRmllbGRMZW5ndGggPT0gMikKKyAgICB7CisgICAgICAgIHVpOEluaXRWZWMuYlsxM10gPSAoKHVpbnQ4X3QqKXB1aTMyTm9uY2UpWzEyXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWk4SW5pdFZlYy5iWzEzXSA9IDA7CisgICAgfQorICAgIHVpOEluaXRWZWMuYlsxNF0gPSAwOworICAgIHVpOEluaXRWZWMuYlsxNV0gPSAwOworCisgICAgLy8KKyAgICAvLyBXcml0ZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0lWMCkgPSB1aThJbml0VmVjLndbMF07CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNJVjEpID0gdWk4SW5pdFZlYy53WzFdOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTSVYyKSA9IHVpOEluaXRWZWMud1syXTsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0lWMykgPSB1aThJbml0VmVjLndbM107CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSBBRVMgZW5naW5lCisgICAgLy8KKyAgICB1aTMyQ3J5cHRvQmxvY2tMZW5ndGggPSB1aTMyQ2lwaGVyVGV4dExlbmd0aCAtIHVpMzJBdXRoTGVuZ3RoOworICAgIHVpMzJDdHJsVmFsID0gKCh1aTMyRmllbGRMZW5ndGggLSAxKSA8PCBDUllQVE9fQUVTQ1RMX0NDTV9MX1MpOworICAgIGlmICggdWkzMkF1dGhMZW5ndGggPj0gMiApIHsKKyAgICAgICAgdWkzMkN0cmxWYWwgfD0gKCgoIHVpMzJBdXRoTGVuZ3RoIC0gMiApID4+IDEgKSA8PCBDUllQVE9fQUVTQ1RMX0NDTV9NX1MgKTsKKyAgICB9CisgICAgdWkzMkN0cmxWYWwgfD0gQ1JZUFRPX0FFU0NUTF9DQ007CisgICAgdWkzMkN0cmxWYWwgfD0gQ1JZUFRPX0FFU0NUTF9DVFI7CisgICAgdWkzMkN0cmxWYWwgfD0gQ1JZUFRPX0FFU0NUTF9TQVZFX0NPTlRFWFQ7CisgICAgdWkzMkN0cmxWYWwgfD0gKEtFWV9TVE9SRV9TSVpFXzEyOCA8PCBDUllQVE9fQUVTQ1RMX0tFWV9TSVpFX1MpOworICAgIHVpMzJDdHJsVmFsIHw9ICgwIDw8IENSWVBUT19BRVNDVExfRElSX1MpOworICAgIHVpMzJDdHJsVmFsIHw9IChDUllQVE9fQUVTX0NUUl8xMjggPDwgQ1JZUFRPX0FFU0NUTF9DVFJfV0lEVEhfUyk7CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBjb25maWd1cmF0aW9uIGZvciAxMjggYml0IEFFUy1DQ00uCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0NUTCkgPSB1aTMyQ3RybFZhbDsKKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgY3J5cHRvIGJsb2NrIChwbGFpbiB0ZXh0KS4KKyAgICAvLyBMb3cgYW5kIGhpZ2ggcGFydCAoaGlnaCBwYXJ0IGlzIGFzc3VtZWQgdG8gYmUgYWx3YXlzIDApLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNEQVRBTEVOMCkgPSB1aTMyQ3J5cHRvQmxvY2tMZW5ndGg7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNEQVRBTEVOMSkgID0gIDA7CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciBmaWVsZC4KKyAgICAvLyBBbHNvIGNhbGxlZCBBQUQgLSBBZGRpdGlvbmFsIEF1dGhlbnRpY2F0aW9uIERhdGEuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0FVVEhMRU4pID0gdWkzMkhlYWRlckxlbmd0aDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgYW55IGhlYWRlciBpbmZvcm1hdGlvbiAoQUFEKS4KKyAgICAvLyBJZiBzbyBjb25maWd1cmUgdGhlIERNQSBjb250cm9sbGVyIHRvIGZldGNoIHRoZSBoZWFkZXIuCisgICAgLy8KKyAgICBpZih1aTMySGVhZGVyTGVuZ3RoICE9IDApCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBFbmFibGUgRE1BIGNoYW5uZWwgMC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwQ1RMLCBDUllQVE9fRE1BQ0gwQ1RMX0VOX0JJVE4pID0gMTsKKworICAgICAgICAvLworICAgICAgICAvLyBSZWdpc3RlciB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBoZWFkZXIgKEFBRCkuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwRVhUQUREUikgPSAodWludDMyX3QpcHVpMzJIZWFkZXI7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSGVhZGVyIGxlbmd0aCBpbiBieXRlcyAobWF5IGJlIG5vbi1ibG9jayBzaXplIGFsaWduZWQpLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMExFTikgPSB1aTMySGVhZGVyTGVuZ3RoOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgdGhlIGhlYWRlciBkYXRhIHRyYW5zZmVyLCBETUFfSU5fRE9ORS4KKyAgICAgICAgLy8KKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgQ1BVZGVsYXkoMSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUoIShIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVNUQVQpICYgQ1JZUFRPX0lSUVNUQVRfRE1BX0lOX0RPTkUpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBDaGVjayBmb3IgRE1BIGVycm9ycy4KKyAgICAgICAgLy8KKyAgICAgICAgaWYoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFTVEFUKSAmIENSWVBUT19ETUFfQlVTX0VSUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEFFU19ETUFfQlVTX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDbGVhciBpbnRlcnJ1cHQgc3RhdHVzLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFDTFIpID0gKENSWVBUT19JUlFDTFJfRE1BX0lOX0RPTkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE9fSVJRQ0xSX1JFU1VMVF9BVkFJTCk7CisKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIGludGVycnVwdCBsaW5lcyBmcm9tIG1vZHVsZSB0byBiZSBjbGVhcmVkCisgICAgLy8KKyAgICB3aGlsZShIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVNUQVQpICYgKENSWVBUT19JUlFTVEFUX0RNQV9JTl9ET05FIHwgQ1JZUFRPX0lSUVNUQVRfUkVTVUxUX0FWQUlMKSk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgQ1JZUFRPX0lSUUVOX0RNQV9JTl9ET05FIGludGVycnVwdCBhcyB3ZSBvbmx5CisgICAgLy8gd2FudCBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBvbmNlIFJFU1VMVF9BVkFJTCBvY2N1cnMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUVOKSAmPSB+Q1JZUFRPX0lSUUVOX0RNQV9JTl9ET05FOworCisgICAgLy8KKyAgICAvLyBJcyB1c2luZyBpbnRlcnJ1cHRzIC0gY2xlYXIgYW5kIGVuYWJsZSBnbG9iYWxseS4KKyAgICAvLworICAgIGlmKGJJbnRFbmFibGUpCisgICAgeworICAgICAgICBJbnRQZW5kQ2xlYXIoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICAgICAgSW50RW5hYmxlKElOVF9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBFbmFibGUgaW50ZXJuYWwgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRVFlQRSkgPSBDUllQVE9fSVJRVFlQRV9MRVZFTDsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUVOKSA9IENSWVBUT19JUlFFTl9SRVNVTFRfQVZBSUw7CisKKyAgICAvLworICAgIC8vIFBlcmZvcm0gZGVjcnlwdGlvbiBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZihiRGVjcnlwdCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIENvbmZpZ3VyZSB0aGUgRE1BIGNvbnRyb2xsZXIgLSBlbmFibGUgYm90aCBETUEgY2hhbm5lbHMuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHQklUVyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMENUTCwgQ1JZUFRPX0RNQUNIMENUTF9FTl9CSVROKSA9IDE7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSBwYXlsb2FkIGRhdGEgaW4gZXh0LiBtZW1vcnkuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwRVhUQUREUikgPQorICAgICAgICAgICAgKHVpbnQzMl90KXB1aTMyQ2lwaGVyVGV4dDsKKworICAgICAgICAvLworICAgICAgICAvLyBQYXlsb2FkIGRhdGEgbGVuZ3RoIGluIGJ5dGVzLCBlcXVhbCB0byB0aGUgY2lwaGVyIHRleHQgbGVuZ3RoLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMExFTikgPSB1aTMyQ3J5cHRvQmxvY2tMZW5ndGg7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRW5hYmxlIERNQSBjaGFubmVsIDEuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHQklUVyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMUNUTCwgQ1JZUFRPX0RNQUNIMUNUTF9FTl9CSVROKSA9IDE7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSBvdXRwdXQgZGF0YSBidWZmZXIuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gxRVhUQUREUikgPQorICAgICAgICAgICAgKHVpbnQzMl90KXB1aTMyUGxhaW5UZXh0OworCisgICAgICAgIC8vCisgICAgICAgIC8vIE91dHB1dCBkYXRhIGxlbmd0aCBpbiBieXRlcywgZXF1YWwgdG8gdGhlIGNpcGhlciB0ZXh0IGxlbmd0aC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDFMRU4pID0gdWkzMkNyeXB0b0Jsb2NrTGVuZ3RoOworICAgIH0KKworICAgIHJldHVybiBBRVNfU1VDQ0VTUzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDaGVja3MgQ0NNIGRlY3J5cHQgYW5kIEludmVyc2UgQXV0aGVudGljYXRpb24gcmVzdWx0LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitDUllQVE9DY21JbnZBdXRoRGVjcnlwdFN0YXR1cyh2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJTdGF0dXM7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY3VycmVudCBETUEgc3RhdHVzLgorICAgIC8vCisgICAgdWkzMlN0YXR1cyA9IEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BU1RBVCk7CisKKyAgICAvLworICAgIC8vIENoZWNrIGlmIERNQSBpcyBzdGlsbCBidXN5LgorICAgIC8vCisgICAgaWYodWkzMlN0YXR1cyAmIENSWVBUT19ETUFfQlNZKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChBRVNfRE1BX0JTWSk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBETUEgb3BlcmF0aW9uIC0gcmV0dXJuIGVycm9yIGlmIG5vdCBzdWNjZXNzLgorICAgIC8vCisgICAgaWYodWkzMlN0YXR1cyAmIENSWVBUT19ETUFfQlVTX0VSUk9SKQorICAgIHsKKyAgICAgICAgZ191aTMyQ3VycmVudEFlc09wID0gQ1JZUFRPX0FFU19OT05FOworICAgICAgICByZXR1cm4gKEFFU19ETUFfQlVTX0VSUk9SKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE9wZXJhdGlvbiBzdWNjZXNzZnVsIC0gZGlzYWJsZSBpbnRlcnJ1cHQgYW5kIHJldHVybiBzdWNjZXNzCisgICAgLy8KKyAgICBJbnREaXNhYmxlKElOVF9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSk7CisgICAgcmV0dXJuIChBRVNfU1VDQ0VTUyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IHRoZSByZXN1bHQgb2YgdGhlIENDTSBvcGVyYXRpb24uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0NSWVBUT0NjbUludkF1dGhEZWNyeXB0UmVzdWx0R2V0KHVpbnQzMl90IHVpMzJBdXRoTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyQ2lwaGVyVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDaXBoZXJUZXh0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyQ2NtVGFnKQoreworICAgIHVpbnQzMl90IHZvbGF0aWxlIHVpMzJUYWdbNF07CisgICAgdWludDMyX3QgdWkzMlRhZ0luZGV4OworICAgIHVpbnQzMl90IGk7CisgICAgdWludDMyX3QgdWkzMklkeDsKKworICAgIHVpMzJUYWdJbmRleCA9IHVpMzJDaXBoZXJUZXh0TGVuZ3RoIC0gdWkzMkF1dGhMZW5ndGg7CisKKyAgICAvLworICAgIC8vIFJlc3VsdCBoYXMgYWxyZWFkeSBiZWVuIGNvcGllZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciBieSBETUEKKyAgICAvLyBEaXNhYmxlIG1hc3RlciBjb250cm9sLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BTEdTRUwpID0gMHgwMDAwMDAwMDsKKworICAgIC8vCisgICAgLy8gUmVhZCB0YWcgLSB3YWl0IGZvciB0aGUgY29udGV4dCByZWFkeSBiaXQuCisgICAgLy8KKyAgICBkbworICAgIHsKKyAgICAgICAgQ1BVZGVsYXkoMSk7CisgICAgfQorICAgIHdoaWxlKCEoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNDVEwpICYKKyAgICAgICAgICAgIENSWVBUT19BRVNDVExfU0FWRURfQ09OVEVYVF9SRFkpKTsKKworICAgIC8vCisgICAgLy8gUmVhZCB0aGUgVGFnIHJlZ2lzdGVycy4KKyAgICAvLworICAgIHVpMzJUYWdbMF0gPSBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU1RBR09VVDApOworICAgIHVpMzJUYWdbMV0gPSBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU1RBR09VVDEpOworICAgIHVpMzJUYWdbMl0gPSBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU1RBR09VVDIpOworICAgIHVpMzJUYWdbM10gPSBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU1RBR09VVDMpOworCisgICAgZm9yKHVpMzJJZHggPSAwOyB1aTMySWR4IDwgdWkzMkF1dGhMZW5ndGggOyB1aTMySWR4KyspCisgICAgeworICAgICAgICAqKCh1aW50OF90KilwdWkzMkNjbVRhZyArIHVpMzJJZHgpID0gKigodWludDhfdCopdWkzMlRhZyArIHVpMzJJZHgpOworICAgIH0KKworICAgIC8vCisgICAgLy8gT3BlcmF0aW9uIHN1Y2Nlc3NmdWwgLSAgY2xlYXIgaW50ZXJydXB0IHN0YXR1cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRQ0xSKSA9IChDUllQVE9fSVJRQ0xSX0RNQV9JTl9ET05FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX0lSUUNMUl9SRVNVTFRfQVZBSUwpOworCisgICAgLy8KKyAgICAvLyBWZXJpZnkgdGhlIFRhZy4KKyAgICAvLworICAgIGZvcihpID0gMDsgaSA8IHVpMzJBdXRoTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBpZigqKCh1aW50OF90ICopcHVpMzJDY21UYWcgKyBpKSAhPQorICAgICAgICAgICAgKCooKHVpbnQ4X3QgKilwdWkzMkNpcGhlclRleHQgKyB1aTMyVGFnSW5kZXggKyBpKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBDQ01fQVVUSEVOVElDQVRJT05fRkFJTEVEOworICAgICAgICB9CisgICAgfQorCisgICAgZ191aTMyQ3VycmVudEFlc09wID0gQ1JZUFRPX0FFU19OT05FOworICAgIHJldHVybiBBRVNfU1VDQ0VTUzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBFbmFibGUgQ3J5cHRvIERNQSBvcGVyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitDUllQVE9EbWFFbmFibGUodWludDMyX3QgdWkzMkNoYW5uZWxzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkNoYW5uZWxzICYgQ1JZUFRPX0RNQV9DSEFOMCkgfAorICAgICAgICAgICAodWkzMkNoYW5uZWxzICYgQ1JZUFRPX0RNQV9DSEFOMSkpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIHNlbGVjdGVkIGNoYW5uZWxzLAorICAgIC8vCisgICAgaWYodWkzMkNoYW5uZWxzICYgQ1JZUFRPX0RNQV9DSEFOMCkKKyAgICB7CisgICAgICAgIEhXUkVHQklUVyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMENUTCwgQ1JZUFRPX0RNQUNIMENUTF9FTl9CSVROKSA9IDE7CisgICAgfQorICAgIGlmKHVpMzJDaGFubmVscyAmIENSWVBUT19ETUFfQ0hBTjEpCisgICAgeworICAgICAgICBIV1JFR0JJVFcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDFDVEwsIENSWVBUT19ETUFDSDFDVExfRU5fQklUTikgPSAxOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBEaXNhYmxlIENyeXB0byBETUEgb3BlcmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQ1JZUFRPRG1hRGlzYWJsZSh1aW50MzJfdCB1aTMyQ2hhbm5lbHMpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyQ2hhbm5lbHMgJiBDUllQVE9fRE1BX0NIQU4wKSB8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbHMgJiBDUllQVE9fRE1BX0NIQU4xKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgc2VsZWN0ZWQgY2hhbm5lbHMuCisgICAgLy8KKyAgICBpZih1aTMyQ2hhbm5lbHMgJiBDUllQVE9fRE1BX0NIQU4wKQorICAgIHsKKyAgICAgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwQ1RMLCBDUllQVE9fRE1BQ0gwQ1RMX0VOX0JJVE4pID0gMDsKKyAgICB9CisgICAgaWYodWkzMkNoYW5uZWxzICYgQ1JZUFRPX0RNQV9DSEFOMSkKKyAgICB7CisgICAgICAgIEhXUkVHQklUVyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMUNUTCwgQ1JZUFRPX0RNQUNIMUNUTF9FTl9CSVROKSA9IDA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3J5cHRvLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jcnlwdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTI0OTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3J5cHRvLmgKQEAgLTAsMCArMSw4ODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBjcnlwdG8uaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDQtMjQgMDA6NDc6MDIgKzAyMDAgKFN1biwgMjQgQXByIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDYxMjkKKyoKKyogIERlc2NyaXB0aW9uOiAgICBBRVMgaGVhZGVyIGZpbGUuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHBlcmlwaGVyYWxfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGNyeXB0b19hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0NSWVBUT19IX18KKyNkZWZpbmUgX19DUllQVE9fSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfY3J5cHRvLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9jcHUuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgQ1JZUFRPQWVzTG9hZEtleSAgICAgICAgICAgICAgICBOT1JPTV9DUllQVE9BZXNMb2FkS2V5CisgICAgI2RlZmluZSBDUllQVE9BZXNDYmMgICAgICAgICAgICAgICAgICAgIE5PUk9NX0NSWVBUT0Flc0NiYworICAgICNkZWZpbmUgQ1JZUFRPQWVzQ2JjU3RhdHVzICAgICAgICAgICAgICBOT1JPTV9DUllQVE9BZXNDYmNTdGF0dXMKKyAgICAjZGVmaW5lIENSWVBUT0Flc0VjYiAgICAgICAgICAgICAgICAgICAgTk9ST01fQ1JZUFRPQWVzRWNiCisgICAgI2RlZmluZSBDUllQVE9BZXNFY2JTdGF0dXMgICAgICAgICAgICAgIE5PUk9NX0NSWVBUT0Flc0VjYlN0YXR1cworICAgICNkZWZpbmUgQ1JZUFRPQ2NtQXV0aEVuY3J5cHQgICAgICAgICAgICBOT1JPTV9DUllQVE9DY21BdXRoRW5jcnlwdAorICAgICNkZWZpbmUgQ1JZUFRPQ2NtQXV0aEVuY3J5cHRTdGF0dXMgICAgICBOT1JPTV9DUllQVE9DY21BdXRoRW5jcnlwdFN0YXR1cworICAgICNkZWZpbmUgQ1JZUFRPQ2NtQXV0aEVuY3J5cHRSZXN1bHRHZXQgICBOT1JPTV9DUllQVE9DY21BdXRoRW5jcnlwdFJlc3VsdEdldAorICAgICNkZWZpbmUgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHQgICAgICAgICBOT1JPTV9DUllQVE9DY21JbnZBdXRoRGVjcnlwdAorICAgICNkZWZpbmUgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRTdGF0dXMgICBOT1JPTV9DUllQVE9DY21JbnZBdXRoRGVjcnlwdFN0YXR1cworICAgICNkZWZpbmUgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRSZXN1bHRHZXQgTk9ST01fQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRSZXN1bHRHZXQKKyAgICAjZGVmaW5lIENSWVBUT0RtYUVuYWJsZSAgICAgICAgICAgICAgICAgTk9ST01fQ1JZUFRPRG1hRW5hYmxlCisgICAgI2RlZmluZSBDUllQVE9EbWFEaXNhYmxlICAgICAgICAgICAgICAgIE5PUk9NX0NSWVBUT0RtYURpc2FibGUKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTGVuZ3RoIG9mIEFFUyBFbGVjdHJvbmljIENvZGUgQm9vayAoRUNCKSBibG9jayBpbiBieXRlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQUVTX0VDQl9MRU5HVEggIDE2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIENyeXB0b0ludEVuYWJsZSwgQ3J5cHRvSW50RGlzYWJsZSwgYW5kIENyeXB0b0ludENsZWFyCisvLyBhcyB0aGUgdWkzMkludEZsYWdzIHBhcmFtZXRlciwgYW5kIHJldHVybmVkIGZyb20gQ3J5cHRvSW50U3RhdHVzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQ1JZUFRPX0RNQV9JTl9ET05FICAgICAgMHgwMDAwMDAwMiAgLy8gRE1BIGRvbmUgaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgQ1JZUFRPX1JFU1VMVF9SRFkgICAgICAgMHgwMDAwMDAwMSAgLy8gUmVzdWx0IHJlYWR5IGludGVycnVwdCBtYXNrCisjZGVmaW5lIENSWVBUT19ETUFfQlVTX0VSUiAgICAgIDB4ODAwMDAwMDAgIC8vIERNQSBCdXMgZXJyb3IKKyNkZWZpbmUgQ1JZUFRPX0tFWV9TVF9XUl9FUlIgICAgMHg0MDAwMDAwMCAgLy8gS2V5IFN0b3JlIFdyaXRlIGZhaWxlZAorI2RlZmluZSBDUllQVE9fS0VZX1NUX1JEX0VSUiAgICAweDIwMDAwMDAwICAvLyBLZXkgU3RvcmUgUmVhZCBmYWlsZWQKKworI2RlZmluZSBDUllQVE9fSVJRVFlQRV9MRVZFTCAgICAweDAwMDAwMDAxICAvLyBDcnlwdG8gTGV2ZWwgaW50ZXJydXB0IGVuYWJsZWQKKyNkZWZpbmUgQ1JZUFRPX0lSUVRZUEVfUFVMU0UgICAgMHgwMDAwMDAwMCAgLy8gQ3J5cHRvIHB1bHNlIGludGVycnVwdCBlbmFibGVkCisKKyNkZWZpbmUgQ1JZUFRPX0RNQV9DSEFOMCAgICAgICAgMHgwMDAwMDAwMSAgLy8gQ3J5cHRvIERNQSBDaGFubmVsIDAKKyNkZWZpbmUgQ1JZUFRPX0RNQV9DSEFOMSAgICAgICAgMHgwMDAwMDAwMiAgLy8gQ3J5cHRvIERNQSBDaGFubmVsIDEKKworI2RlZmluZSBDUllQVE9fQUVTMTI4X0VOQ1JZUFQgICAweDAwMDAwMDBDICAvLworI2RlZmluZSBDUllQVE9fQUVTMTI4X0RFQ1JZUFQgICAweDAwMDAwMDA4ICAvLworCisjZGVmaW5lIENSWVBUT19ETUFfUkVBRFkgICAgICAgIDB4MDAwMDAwMDAgIC8vIERNQSByZWFkeQorI2RlZmluZSBDUllQVE9fRE1BX0JTWSAgICAgICAgICAweDAwMDAwMDAzICAvLyBETUEgYnVzeQorI2RlZmluZSBDUllQVE9fRE1BX0JVU19FUlJPUiAgICAweDAwMDIwMDAwICAvLyBETUEgZW5jb3VudGVyZWQgYnVzIGVycm9yCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyAgR2VuZXJhbCBjb25zdGFudHMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vIEFFUyBtb2R1bGUgcmV0dXJuIGNvZGVzCisjZGVmaW5lIEFFU19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQUVTX0tFWVNUT1JFX1JFQURfRVJST1IgICAgICAgICAgMQorI2RlZmluZSBBRVNfS0VZU1RPUkVfV1JJVEVfRVJST1IgICAgICAgICAyCisjZGVmaW5lIEFFU19ETUFfQlVTX0VSUk9SICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ0NNX0FVVEhFTlRJQ0FUSU9OX0ZBSUxFRCAgICAgICAgNAorI2RlZmluZSBBRVNfRUNCX1RFU1RfRVJST1IgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFFU19OVUxMX0VSUk9SICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQUVTX0NDTV9URVNUX0VSUk9SICAgICAgICAgICAgICAxMAorI2RlZmluZSBBRVNfRE1BX0JTWSAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEtleSBzdG9yZSBtb2R1bGUgZGVmaW5lcworI2RlZmluZSBTVEFURV9CTEVOR1RIICAgICAgICAgICAgICAgICAgIDE2ICAvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gU3RhdGUKKyNkZWZpbmUgS0VZX0JMRU5HVEggICAgICAgICAgICAgICAgICAgICAxNiAgLy8gTnVtYmVyIG9mIGJ5dGVzIGluIEtleQorI2RlZmluZSBLRVlfRVhQX0xFTkdUSCAgICAgICAgICAgICAgICAgMTc2ICAvLyBOYiAqIChOcisxKSAqIDQKKworI2RlZmluZSBLRVlfU1RPUkVfU0laRV8xMjggICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEtFWV9TVE9SRV9TSVpFXzE5MiAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgS0VZX1NUT1JFX1NJWkVfMjU2ICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBLRVlfU1RPUkVfU0laRV9CSVRTICAgICAweDAwMDAwMDAzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBGb3IgMTI4IGJpdCBrZXkgYWxsIDggS2V5IEFyZWEgbG9jYXRpb25zIGZyb20gMCB0byA4IGFyZSB2YWxpZAorLy8gSG93ZXZlciBmb3IgMTkyIGJpdCBhbmQgMjU2IGJpdCBrZXlzLCBvbmx5IGV2ZW4gS2V5IEFyZWFzIDAsIDIsIDQsIDYKKy8vIGFyZSB2YWxpZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIENSWVBUT19LRVlfQVJFQV8wICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0tFWV9BUkVBXzEgICAgICAgMQorI2RlZmluZSBDUllQVE9fS0VZX0FSRUFfMiAgICAgICAyCisjZGVmaW5lIENSWVBUT19LRVlfQVJFQV8zICAgICAgIDMKKyNkZWZpbmUgQ1JZUFRPX0tFWV9BUkVBXzQgICAgICAgNAorI2RlZmluZSBDUllQVE9fS0VZX0FSRUFfNSAgICAgICA1CisjZGVmaW5lIENSWVBUT19LRVlfQVJFQV82ICAgICAgIDYKKyNkZWZpbmUgQ1JZUFRPX0tFWV9BUkVBXzcgICAgICAgNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIGN1cnJlbnQgQUVTIG9wZXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQ1JZUFRPX0FFU19OT05FICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fQUVTX0tFWUwwQUQgICAgICAxCisjZGVmaW5lIENSWVBUT19BRVNfRUNCICAgICAgICAgIDIKKyNkZWZpbmUgQ1JZUFRPX0FFU19DQ00gICAgICAgICAgMworI2RlZmluZSBDUllQVE9fQUVTX1JORyAgICAgICAgICA0CisjZGVmaW5lIENSWVBUT19BRVNfQ0JDICAgICAgICAgIDUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBBRVMtQ1RSIG1vZGUgY291bnRlciB3aWR0aAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQ1JZUFRPX0FFU19DVFJfMzIgICAgICAgMHgwCisjZGVmaW5lIENSWVBUT19BRVNfQ1RSXzY0ICAgICAgIDB4MQorI2RlZmluZSBDUllQVE9fQUVTX0NUUl85NiAgICAgICAweDIKKyNkZWZpbmUgQ1JZUFRPX0FFU19DVFJfMTI4ICAgICAgMHgzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBXcml0ZSB0aGUga2V5IGludG8gdGhlIEtleSBSYW0uCisvLyEKKy8vISBUaGUgXGMgdWkzMktleUxvY2F0aW9uIHBhcmFtZXRlciBpcyBhbiBlbnVtZXJhdGVkIHR5cGUgd2hpY2ggc3BlY2lmaWVzCisvLyEgdGhlIEtleSBSYW0gbG9jYXRpb24gaW4gd2hpY2ggdGhlIGtleSBpcyBzdG9yZWQuCisvLyEKKy8vISBUaGUgcG9pbnRlciBcYyBwdWk4QWVzS2V5IGhhcyB0aGUgYWRkcmVzcyB3aGVyZSB0aGUgS2V5IGlzIHN0b3JlZC4KKy8vIQorLy8hIFxwYXJhbSBwdWkzMkFlc0tleSBpcyBhIHBvaW50ZXIgdG8gYW4gQUVTIEtleS4KKy8vISBccGFyYW0gdWkzMktleUxvY2F0aW9uIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUga2V5IGluIEtleSBSQU0uCisvLyEgVGhpcyBwYXJhbWV0ZXIgY2FuIGhhdmUgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfMAorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfMQorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfMgorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfMworLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfNAorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfNQorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfNgorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfNworLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiB0aGUgZnVuY3Rpb246CisvLyEgLSBccmVmIEFFU19TVUNDRVNTCisvLyEgLSBccmVmIEFFU19LRVlTVE9SRV9SRUFEX0VSUk9SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENSWVBUT0Flc0xvYWRLZXkodWludDMyX3QgKnB1aTMyQWVzS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMktleUxvY2F0aW9uKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU3RhcnQgYW4gQUVTLUNCQyBvcGVyYXRpb24gKGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbikuCisvLyEKKy8vISBUaGUgZnVuY3Rpb24gc3RhcnRzIGFuIEFFUyBDQkMgbW9kZSBlbmN5cHQgb3IgZGVjcnlwdCBvcGVyYXRpb24uCisvLyEgRW5kIG9wZXJhdGlvbiBjYW4gYmUgZGV0ZWNlZCBieSBlbmFibGluZyBpbnRlcnJ1cHQgb3IgYnkgcG9sbGluZworLy8hIENSWVBUT0Flc0NiY1N0YXR1cygpLiBSZXN1bHQgb2Ygb3BlcmF0aW9uIGlzIHJldHVybmVkIGJ5IENSWVBUT0Flc0NiY1N0YXR1cygpLgorLy8hCisvLyEgXHBhcmFtIHB1aTMyTXNnSW4gaXMgYSBwb2ludGVyIHRvIHRoZSBpbnB1dCBkYXRhLgorLy8hIFxwYXJhbSBwdWkzMk1zZ091dCBpcyBhIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBkYXRhLgorLy8hIFxwYXJhbSB1aTMyTXNnTGVuZ3RoIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGlucHV0IGRhdGEuCisvLyEgXHBhcmFtIHB1aTMyTm9uY2UgaXMgYSBwb2ludGVyIHRvIDE2LWJ5dGUgTm9uY2UuCisvLyEgXHBhcmFtIHVpMzJLZXlMb2NhdGlvbiBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGtleSBpbiBLZXkgUkFNLgorLy8hIFRoaXMgcGFyYW1ldGVyIGNhbiBoYXZlIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzAKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzEKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzIKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzMKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzQKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzUKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzYKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzcKKy8vISBccGFyYW0gYkVuY3J5cHQgaXMgc2V0IFxjIHRydWUgdG8gZW5jcnlwdCBvciBzZXQgXGMgZmFsc2UgdG8gZGVjcnlwdC4KKy8vISBccGFyYW0gYkludEVuYWJsZSBpcyBzZXQgXGMgdHJ1ZSB0byBlbmFibGUgQ3J5cHRvIGludGVycnVwdHMgb3IgXGMgZmFsc2UgdG8KKy8vISBkaXNhYmxlIENyeXB0byBpbnRlcnJ1cHQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIHRoZSBBRVMtQ0JDIG9wZXJhdGlvbjoKKy8vISAtIFxyZWYgQUVTX1NVQ0NFU1MKKy8vISAtIFxyZWYgQUVTX0tFWVNUT1JFX1JFQURfRVJST1IKKy8vIQorLy8hIFxzYSBccmVmIENSWVBUT0Flc0NiY1N0YXR1cygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENSWVBUT0Flc0NiYyh1aW50MzJfdCAqcHVpMzJNc2dJbiwgdWludDMyX3QgKnB1aTMyTXNnT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyTXNnTGVuZ3RoLCB1aW50MzJfdCAqcHVpMzJOb25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMktleUxvY2F0aW9uLCBib29sIGJFbmNyeXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJJbnRFbmFibGUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVjayB0aGUgcmVzdWx0IG9mIGFuIEFFUyBDQkMgb3BlcmF0aW9uLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIFxyZWYgQ1JZUFRPQWVzQ2JjKCkgZnVuY3Rpb24gdG8KKy8vISBjaGVjayBpZiB0aGUgQUVTIENCQyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgQUVTIENCQyBvcGVyYXRpb246CisvLyEgLSBccmVmIEFFU19TVUNDRVNTICAgICAgIDogU3VjY2Vzc2Z1bC4KKy8vISAtIFxyZWYgQUVTX0RNQV9CVVNfRVJST1IgOiBGYWlsZWQuCisvLyEgLSBccmVmIEFFU19ETUFfQlNZICAgICAgIDogT3BlcmF0aW9uIGlzIG9uZ29pbmcuCisvLyEKKy8vISBcc2EgXHJlZiBDUllQVE9BZXNDYmMoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBDUllQVE9BZXNDYmNTdGF0dXModm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFN0YXJ0IGFuIEFFUy1FQ0Igb3BlcmF0aW9uIChlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24pLgorLy8hCisvLyEgVGhlIFxjIHVpMzJLZXlMb2NhdGlvbiBwYXJhbWV0ZXIgaXMgYW4gZW51bWVyYXRlZCB0eXBlIHdoaWNoIHNwZWNpZmllcworLy8hIHRoZSBLZXkgUmFtIGxvY2F0aW9uIGluIHdoaWNoIHRoZSBrZXkgaXMgc3RvcmVkLgorLy8hCisvLyEgXHBhcmFtIHB1aTMyTXNnSW4gaXMgYSBwb2ludGVyIHRvIHRoZSBpbnB1dCBkYXRhLgorLy8hIFxwYXJhbSBwdWkzMk1zZ091dCBpcyBhIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBkYXRhLgorLy8hIFxwYXJhbSB1aTMyS2V5TG9jYXRpb24gaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBrZXkgaW4gS2V5IFJBTS4KKy8vISBUaGlzIHBhcmFtZXRlciBjYW4gaGF2ZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8wCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8xCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8yCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8zCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV80CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV81CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV82CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV83CisvLyEgXHBhcmFtIGJFbmNyeXB0IGlzIHNldCBcYyB0cnVlIHRvIGVuY3J5cHQgb3Igc2V0IFxjIGZhbHNlIHRvIGRlY3J5cHQuCisvLyEgXHBhcmFtIGJJbnRFbmFibGUgaXMgc2V0IFxjIHRydWUgdG8gZW5hYmxlIENyeXB0byBpbnRlcnJ1cHRzIG9yIFxjIGZhbHNlIHRvCisvLyEgZGlzYWJsZSBDcnlwdG8gaW50ZXJydXB0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiB0aGUgQUVTLUVDQiBvcGVyYXRpb246CisvLyEgLSBccmVmIEFFU19TVUNDRVNTCisvLyEgLSBccmVmIEFFU19LRVlTVE9SRV9SRUFEX0VSUk9SCisvLyEKKy8vISBcc2EgXHJlZiBDUllQVE9BZXNFY2JTdGF0dXMoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBDUllQVE9BZXNFY2IodWludDMyX3QgKnB1aTMyTXNnSW4sIHVpbnQzMl90ICpwdWkzMk1zZ091dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMktleUxvY2F0aW9uLCBib29sIGJFbmNyeXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJJbnRFbmFibGUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVjayB0aGUgcmVzdWx0IG9mIGFuIEFFUyBFQ0Igb3BlcmF0aW9uLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIFxyZWYgQ1JZUFRPQWVzRWNiKCkgZnVuY3Rpb24gdG8KKy8vISBjaGVjayBpZiB0aGUgQUVTIEVDQiBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgQUVTIEVDQiBvcGVyYXRpb246CisvLyEgLSBccmVmIEFFU19TVUNDRVNTICAgICAgIDogU3VjY2Vzc2Z1bC4KKy8vISAtIFxyZWYgQUVTX0RNQV9CVVNfRVJST1IgOiBGYWlsZWQuCisvLyEgLSBccmVmIEFFU19ETUFfQlNZICAgICAgIDogT3BlcmF0aW9uIGlzIG9uZ29pbmcuCisvLyEKKy8vISBcc2EgXHJlZiBDUllQVE9BZXNFY2IoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBDUllQVE9BZXNFY2JTdGF0dXModm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEZpbmlzaCB0aGUgZW5jcnlwdGlvbiBvcGVyYXRpb24gYnkgcmVzZXR0aW5nIHRoZSBvcGVyYXRpb24gbW9kZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBccmVmIENSWVBUT0Flc0VjYlN0YXR1cygpIGhhcyByZXBvcnRlZAorLy8hIHRoYXQgdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIENSWVBUT0Flc0VjYlN0YXR1cygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NSWVBUT0Flc0VjYkZpbmlzaCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmVzdWx0IGhhcyBhbHJlYWR5IGJlZW4gY29waWVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIGJ5IERNQS4KKyAgICAvLyBEaXNhYmxlIG1hc3RlciBjb250cm9sL0RNQSBjbG9jayBhbmQgY2xlYXIgdGhlIG9wZXJhdGluZyBtb2RlLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BTEdTRUwpID0gMHgwMDAwMDAwMDsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0NUTCkgPSAweDAwMDAwMDAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBGaW5pc2ggdGhlIGVuY3J5cHRpb24gb3BlcmF0aW9uIGJ5IHJlc2V0dGluZyB0aGUgb3BlcmF0aW9uIG1vZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgXHJlZiBDUllQVE9BZXNDYmNTdGF0dXMoKSBoYXMgcmVwb3J0ZWQKKy8vISB0aGF0IHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBDUllQVE9BZXNDYmNTdGF0dXMoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitDUllQVE9BZXNDYmNGaW5pc2godm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJlc3VsdCBoYXMgYWxyZWFkeSBiZWVuIGNvcGllZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciBieSBETUEuCisgICAgLy8gRGlzYWJsZSBtYXN0ZXIgY29udHJvbC9ETUEgY2xvY2sgYW5kIGNsZWFyIHRoZSBvcGVyYXRpbmcgbW9kZS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUxHU0VMKSA9IDB4MDAwMDAwMDA7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNDVEwpID0gMHgwMDAwMDAwMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU3RhcnQgQ0NNIG9wZXJhdGlvbi4KKy8vIQorLy8hIFRoZSBcYyB1aTMyS2V5TG9jYXRpb24gaXMgYW4gZW51bWVyYXRlZCB0eXBlIHdoaWNoIHNwZWNpZmllcyB0aGUgS2V5IFJhbQorLy8hIGxvY2F0aW9uIGluIHdoaWNoIHRoZSBrZXkgaXMgc3RvcmVkLgorLy8hCisvLyEgXHBhcmFtIGJFbmNyeXB0IGRldGVybWluZXMgd2hldGhlciB0byBydW4gZW5jcnlwdGlvbiBvciBub3QuCisvLyEgXHBhcmFtIHVpMzJBdXRoTGVuZ3RoIGlzIHRoZSB0aGUgbGVuZ3RoIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBmaWVsZCAtCisvLyEgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCBvciAxNiBvY3RldHMuCisvLyEgXHBhcmFtIHB1aTMyTm9uY2UgaXMgYSBwb2ludGVyIHRvIDEzLWJ5dGUgb3IgMTItYnl0ZSBOb25jZSAoTnVtYmVyIHVzZWQgb25jZSkuCisvLyEgXHBhcmFtIHB1aTMyUGxhaW5UZXh0IGlzIGEgcG9pbnRlciB0byB0aGUgb2N0ZXQgc3RyaW5nIGlucHV0IG1lc3NhZ2UuCisvLyEgXHBhcmFtIHVpMzJQbGFpblRleHRMZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZS4KKy8vISBccGFyYW0gcHVpMzJIZWFkZXIgaXMgdGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIChBZGRpdGlvbmFsIEF1dGhlbnRpY2F0aW9uCisvLyEgRGF0YSBvciBBQUQpLgorLy8hIFxwYXJhbSB1aTMySGVhZGVyTGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciBpbiBvY3RldHMuCisvLyEgXHBhcmFtIHVpMzJLZXlMb2NhdGlvbiBpcyB0aGUgbG9jYXRpb24gaW4gS2V5IFJBTSB3aGVyZSB0aGUga2V5IGlzIHN0b3JlZC4KKy8vISBUaGlzIHBhcmFtZXRlciBjYW4gaGF2ZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8wCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8xCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8yCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8zCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV80CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV81CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV82CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV83CisvLyEgXHBhcmFtIHVpMzJGaWVsZExlbmd0aCBpcyB0aGUgc2l6ZSBvZiB0aGUgbGVuZ3RoIGZpZWxkICgyIG9yIDMpLgorLy8hIFxwYXJhbSBiSW50RW5hYmxlIGVuYWJsZXMgaW50ZXJydXB0cy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBDQ00gb3BlcmF0aW9uCisvLyEgLSBccmVmIEFFU19TVUNDRVNTCisvLyEgLSBccmVmIEFFU19LRVlTVE9SRV9SRUFEX0VSUk9SCisvLyEgLSBccmVmIEFFU19ETUFfQlVTX0VSUk9SCisvLyEKKy8vISBcc2EgXHJlZiBDUllQVE9DY21BdXRoRW5jcnlwdFN0YXR1cygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENSWVBUT0NjbUF1dGhFbmNyeXB0KGJvb2wgYkVuY3J5cHQsIHVpbnQzMl90IHVpMzJBdXRoTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMk5vbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMlBsYWluVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyUGxhaW5UZXh0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMkhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMySGVhZGVyTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJLZXlMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyRmllbGRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBiSW50RW5hYmxlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2sgdGhlIHJlc3VsdCBvZiBhbiBBRVMgQ0NNIG9wZXJhdGlvbi4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBccmVmIENSWVBUT0NjbUF1dGhFbmNyeXB0KCkgZnVuY3Rpb24gdG8gY2hlY2sKKy8vISBpZiB0aGUgQUVTIENDTSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgQUVTIENDTSBvcGVyYXRpb246CisvLyEgLSBccmVmIEFFU19TVUNDRVNTICAgICAgIDogU3VjY2Vzc2Z1bC4KKy8vISAtIFxyZWYgQUVTX0RNQV9CVVNfRVJST1IgOiBGYWlsZWQuCisvLyEgLSBccmVmIEFFU19ETUFfQlNZICAgICAgIDogT3BlcmF0aW9uIGlzIG9uZ29pbmcuCisvLyEKKy8vISBcc2EgXHJlZiBDUllQVE9DY21BdXRoRW5jcnlwdCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENSWVBUT0NjbUF1dGhFbmNyeXB0U3RhdHVzKHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIHJlc3VsdCBvZiBhbiBBRVMgQ0NNIG9wZXJhdGlvbi4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBccmVmIENSWVBUT0NjbUF1dGhFbmNyeXB0U3RhdHVzKCkuCisvLyEKKy8vISBccGFyYW0gdWkzMlRhZ0xlbmd0aCBpcyBsZW5ndGggb2YgdGhlIFRhZy4KKy8vISBccGFyYW0gcHVpMzJDY21UYWcgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBUYWcuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXHJlZiBBRVNfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsLgorLy8hCisvLyEgXHNhIFxyZWYgQ1JZUFRPQ2NtQXV0aEVuY3J5cHRTdGF0dXMoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBDUllQVE9DY21BdXRoRW5jcnlwdFJlc3VsdEdldCh1aW50MzJfdCB1aTMyVGFnTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMkNjbVRhZyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFN0YXJ0IGEgQ0NNIERlY3J5cHRpb24gYW5kIEludmVyc2UgQXV0aGVudGljYXRpb24gb3BlcmF0aW9uLgorLy8hCisvLyEgVGhlIFxjIHVpMzJLZXlMb2NhdGlvbiBpcyBhbiBlbnVtZXJhdGVkIHR5cGUgd2hpY2ggc3BlY2lmaWVzIHRoZSBLZXkgUmFtCisvLyEgbG9jYXRpb24gaW4gd2hpY2ggdGhlIGtleSBpcyBzdG9yZWQuCisvLyEKKy8vISBccGFyYW0gYkRlY3J5cHQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJ1biBkZWNyeXB0aW9uIG9yIG5vdC4KKy8vISBccGFyYW0gdWkzMkF1dGhMZW5ndGggaXMgdGhlIHRoZSBsZW5ndGggb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGZpZWxkIC0KKy8vISAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0IG9yIDE2IG9jdGV0cy4KKy8vISBccGFyYW0gcHVpMzJOb25jZSBpcyBhIHBvaW50ZXIgdG8gMTMtYnl0ZSBvciAxMi1ieXRlIE5vbmNlIChOdW1iZXIgdXNlZCBvbmNlKS4KKy8vISBccGFyYW0gcHVpMzJDaXBoZXJUZXh0IGlzIGEgcG9pbnRlciB0byB0aGUgb2N0ZXQgc3RyaW5nIGVuY3J5cHRlZCBtZXNzYWdlLgorLy8hIFxwYXJhbSB1aTMyQ2lwaGVyVGV4dExlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbmNyeXB0ZWQgbWVzc2FnZS4KKy8vISBccGFyYW0gcHVpMzJIZWFkZXIgaXMgdGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIChBZGRpdGlvbmFsIEF1dGhlbnRpY2F0aW9uCisvLyEgRGF0YSBvciBBQUQpLgorLy8hIFxwYXJhbSB1aTMySGVhZGVyTGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciBpbiBvY3RldHMuCisvLyEgXHBhcmFtIHVpMzJLZXlMb2NhdGlvbiBpcyB0aGUgbG9jYXRpb24gaW4gS2V5IFJBTSB3aGVyZSB0aGUga2V5IGlzIHN0b3JlZC4KKy8vISBUaGlzIHBhcmFtZXRlciBjYW4gaGF2ZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8wCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8xCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8yCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8zCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV80CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV81CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV82CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV83CisvLyEgXHBhcmFtIHVpMzJGaWVsZExlbmd0aCBpcyB0aGUgc2l6ZSBvZiB0aGUgbGVuZ3RoIGZpZWxkICgyIG9yIDMpLgorLy8hIFxwYXJhbSBiSW50RW5hYmxlIGVuYWJsZXMgaW50ZXJydXB0cy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBvcGVyYXRpb246CisvLyEgLSBccmVmIEFFU19TVUNDRVNTCisvLyEgLSBccmVmIEFFU19LRVlTVE9SRV9SRUFEX0VSUk9SCisvLyEgLSBccmVmIEFFU19ETUFfQlVTX0VSUk9SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENSWVBUT0NjbUludkF1dGhEZWNyeXB0KGJvb2wgYkRlY3J5cHQsIHVpbnQzMl90IHVpMzJBdXRoTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMk5vbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMkNpcGhlclRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNpcGhlclRleHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMySGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJIZWFkZXJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMktleUxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJGaWVsZExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJJbnRFbmFibGUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVja3MgQ0NNIGRlY3J5cHQgYW5kIEludmVyc2UgQXV0aGVudGljYXRpb24gcmVzdWx0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiBvcGVyYXRpb246CisvLyEgLSBccmVmIEFFU19TVUNDRVNTICAgICAgIDogT3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLgorLy8hIC0gXHJlZiBBRVNfRE1BX0JTWSAgICAgICA6IE9wZXJhdGlvbiBpcyBidXN5LgorLy8hIC0gXHJlZiBBRVNfRE1BX0JVU19FUlJPUiA6IEFuIGVycm9yIGlzIGVuY291bnRlcmVkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBDUllQVE9DY21JbnZBdXRoRGVjcnlwdFN0YXR1cyh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSByZXN1bHQgb2YgdGhlIENDTSBvcGVyYXRpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkF1dGhMZW5ndGggaXMgdGhlIHRoZSBsZW5ndGggb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGZpZWxkIC0KKy8vISAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0IG9yIDE2IG9jdGV0cy4KKy8vISBccGFyYW0gcHVpMzJDaXBoZXJUZXh0IGlzIGEgcG9pbnRlciB0byB0aGUgb2N0ZXQgc3RyaW5nIGVuY3J5cHRlZCBtZXNzYWdlLgorLy8hIFxwYXJhbSB1aTMyQ2lwaGVyVGV4dExlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbmNyeXB0ZWQgbWVzc2FnZS4KKy8vISBccGFyYW0gcHVpMzJDY21UYWcgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBUYWcuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgQUVTX1NVQ0NFU1MgaWYgc3VjY2Vzc2Z1bC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRSZXN1bHRHZXQodWludDMyX3QgdWkzMkF1dGhMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyQ2lwaGVyVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2lwaGVyVGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVpMzJDY21UYWcpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBDcnlwdG8gRE1BIGNvbnRyb2xsZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcG9sbCB0aGUgQ3J5cHRvIERNQSBjb250cm9sbGVyIHRvIGNoZWNrIGlmIGl0IGlzCisvLyEgcmVhZHkgZm9yIGEgbmV3IG9wZXJhdGlvbiBvciBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuCisvLyEKKy8vISBUaGUgXHJlZiBDUllQVE9fRE1BX0JVU19FUlJPUiBjYW4gYWxzbyBiZSBjYXVnaHQgdXNpbmcgdGhlIGNyeXB0byBldmVudAorLy8hIGhhbmRsZXIuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBETUEgY29udHJvbGxlcjoKKy8vISAtIFxyZWYgQ1JZUFRPX0RNQV9SRUFEWSAgICAgOiBETUEgcmVhZHkgZm9yIGEgbmV3IG9wZXJhdGlvbgorLy8hIC0gXHJlZiBDUllQVE9fRE1BX0JTWSAgICAgICA6IERNQSBpcyBidXN5CisvLyEgLSBccmVmIENSWVBUT19ETUFfQlVTX0VSUk9SIDogRE1BIEJ1cyBlcnJvcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQ1JZUFRPRG1hU3RhdHVzKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBzdGF0dXMgcmVnaXN0ZXIuCisgICAgLy8KKyAgICByZXR1cm4gKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BU1RBVCkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgQ3J5cHRvIERNQSBvcGVyYXRpb24uCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIENyeXB0byBETUEgY2hhbm5lbHMgYXJlIGVuYWJsZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkNoYW5uZWxzIGlzIGEgYml0d2lzZSBPUiBvZiB0aGUgY2hhbm5lbHMgdG8gZW5hYmxlLgorLy8hIC0gXHJlZiBDUllQVE9fRE1BX0NIQU4wCisvLyEgLSBccmVmIENSWVBUT19ETUFfQ0hBTjEKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIENSWVBUT0RtYUVuYWJsZSh1aW50MzJfdCB1aTMyQ2hhbm5lbHMpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIENyeXB0byBETUEgb3BlcmF0aW9uLgorLy8hCisvLyEgVGhlIHNwZWNpZmllZCBDcnlwdG8gRE1BIGNoYW5uZWxzIGFyZSBkaXNhYmxlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbHMgaXMgYSBiaXR3aXNlIE9SIG9mIHRoZSBjaGFubmVscyB0byBkaXNhYmxlLgorLy8hIC0gXHJlZiBDUllQVE9fRE1BX0NIQU4wCisvLyEgLSBccmVmIENSWVBUT19ETUFfQ0hBTjEKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIENSWVBUT0RtYURpc2FibGUodWludDMyX3QgdWkzMkNoYW5uZWxzKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBpbmRpdmlkdWFsIENyeXB0byBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgaW5kaWNhdGVkIENyeXB0byBpbnRlcnJ1cHQgc291cmNlcy4gT25seSB0aGUKKy8vISBzb3VyY2VzIHRoYXQgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdC4KKy8vISBEaXNhYmxlZCBzb3VyY2VzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXR3aXNlIE9SIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkLgorLy8hIC0gXHJlZiBDUllQVE9fRE1BX0lOX0RPTkUKKy8vISAtIFxyZWYgQ1JZUFRPX1JFU1VMVF9SRFkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitDUllQVE9JbnRFbmFibGUodWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkludEZsYWdzICYgQ1JZUFRPX0RNQV9JTl9ET05FKSB8CisgICAgICAgICAgICh1aTMySW50RmxhZ3MgJiBDUllQVE9fUkVTVUxUX1JEWSkpOworCisgICAgLy8KKyAgICAvLyBVc2luZyBsZXZlbCBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVRZUEUpID0gQ1JZUFRPX0lSUVRZUEVfTEVWRUw7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUVOKSB8PSB1aTMySW50RmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIGluZGl2aWR1YWwgQ1JZUFRPIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgaW5kaWNhdGVkIENyeXB0byBpbnRlcnJ1cHQgc291cmNlcy4gT25seSB0aGUKKy8vISBzb3VyY2VzIHRoYXQgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdC4KKy8vISBEaXNhYmxlZCBzb3VyY2VzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXR3aXNlIE9SIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkLgorLy8hIC0gXHJlZiBDUllQVE9fRE1BX0lOX0RPTkUKKy8vISAtIFxyZWYgQ1JZUFRPX1JFU1VMVF9SRFkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitDUllQVE9JbnREaXNhYmxlKHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJJbnRGbGFncyAmIENSWVBUT19ETUFfSU5fRE9ORSkgfAorICAgICAgICAgICAodWkzMkludEZsYWdzICYgQ1JZUFRPX1JFU1VMVF9SRFkpKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUVOKSAmPSB+dWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGludGVycnVwdCBzdGF0dXMgZm9yIHRoZSBzcGVjaWZpZWQgQ3J5cHRvLiBFaXRoZXIKKy8vISB0aGUgcmF3IGludGVycnVwdCBzdGF0dXMgb3IgdGhlIHN0YXR1cyBvZiBpbnRlcnJ1cHRzIHRoYXQgYXJlIGFsbG93ZWQgdG8KKy8vISByZWZsZWN0IHRvIHRoZSBwcm9jZXNzb3IgY2FuIGJlIHJldHVybmVkLgorLy8hCisvLyEgXHBhcmFtIGJNYXNrZWQgd2hldGhlciB0byB1c2UgcmF3IG9yIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzOgorLy8hIC0gXGMgZmFsc2UgOiBSYXcgaW50ZXJydXB0IHN0YXR1cyBpcyByZXF1aXJlZC4KKy8vISAtIFxjIHRydWUgIDogTWFza2VkIGludGVycnVwdCBzdGF0dXMgaXMgcmVxdWlyZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1czoKKy8vISAtIFxyZWYgQ1JZUFRPX0RNQV9JTl9ET05FCisvLyEgLSBccmVmIENSWVBUT19SRVNVTFRfUkRZCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitDUllQVE9JbnRTdGF0dXMoYm9vbCBiTWFza2VkKQoreworICAgIHVpbnQzMl90IHVpMzJNYXNrOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZWl0aGVyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBhcworICAgIC8vIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKGJNYXNrZWQpCisgICAgeworICAgICAgICB1aTMyTWFzayA9IEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRRU4pOworICAgICAgICByZXR1cm4odWkzMk1hc2sgJiBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVNUQVQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRU1RBVCkgJiAweDAwMDAwMDAzKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyBDcnlwdG8gaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIENyeXB0byBpbnRlcnJ1cHQgc291cmNlcyBhcmUgY2xlYXJlZCwgc28gdGhhdCB0aGV5IG5vIGxvbmdlcgorLy8hIGFzc2VydC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8ga2VlcCB0aGUKKy8vISBpbnRlcnJ1cHQgZnJvbSBiZWluZyByZWNvZ25pemVkIGFnYWluIGltbWVkaWF0ZWx5IHVwb24gZXhpdC4KKy8vIQorLy8hIFxub3RlIER1ZSB0byB3cml0ZSBidWZmZXJzIGFuZCBzeW5jaHJvbml6ZXJzIGluIHRoZSBzeXN0ZW0gaXQgbWF5IHRha2Ugc2V2ZXJhbAorLy8hIGNsb2NrIGN5Y2xlcyBmcm9tIGEgcmVnaXN0ZXIgd3JpdGUgY2xlYXJpbmcgYW4gZXZlbnQgaW4gYSBtb2R1bGUgYW5kIHVudGlsIHRoZQorLy8hIGV2ZW50IGlzIGFjdHVhbGx5IGNsZWFyZWQgaW4gdGhlIE5WSUMgb2YgdGhlIHN5c3RlbSBDUFUuIEl0IGlzIHJlY29tbWVuZGVkIHRvCisvLyEgY2xlYXIgdGhlIGV2ZW50IHNvdXJjZSBlYXJseSBpbiB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAoSVNSKSB0byBhbGxvdworLy8hIHRoZSBldmVudCBjbGVhciB0byBwcm9wYWdhdGUgdG8gdGhlIE5WSUMgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IuCisvLyEgQXQgdGhlIHNhbWUgdGltZSwgYW4gZWFybHkgZXZlbnQgY2xlYXIgYWxsb3dzIG5ldyBldmVudHMgb2YgdGhlIHNhbWUgdHlwZSB0byBiZQorLy8hIHBlbmRlZCBpbnN0ZWFkIG9mIGlnbm9yZWQgaWYgdGhlIGV2ZW50IGlzIGNsZWFyZWQgbGF0ZXIgaW4gdGhlIElTUi4KKy8vISBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHByb2dyYW1tZXIgdG8gbWFrZSBzdXJlIHRoYXQgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZAorLy8hIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIHRvIGF2b2lkIGZhbHNlIHJlLXRyaWdnZXJpbmcgb2YgdGhlIGNsZWFyZWQgZXZlbnQuCisvLyEgQSBzaW1wbGUsIGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSBvcHRpbWFsLCB3YXkgb2YgY2xlYXJpbmcgYW4gZXZlbnQgYmVmb3JlCisvLyEgcmV0dXJuaW5nIGZyb20gdGhlIElTUiBpczoKKy8vISAtIyBXcml0ZSB0byBjbGVhciBldmVudCAoaW50ZXJydXB0IHNvdXJjZSkuIChidWZmZXJlZCB3cml0ZSkKKy8vISAtIyBEdW1teSByZWFkIGZyb20gdGhlIGV2ZW50IHNvdXJjZSBtb2R1bGUuIChtYWtpbmcgc3VyZSB0aGUgd3JpdGUgaGFzIHByb3BhZ2F0ZWQpCisvLyEgLSMgV2FpdCB0d28gc3lzdGVtIENQVSBjbG9jayBjeWNsZXMgKHVzZXIgY29kZSBvciB0d28gTk9QcykuIChhbGxvd2luZyBjbGVhcmVkIGV2ZW50IHRvIHByb3BhZ2F0ZSB0aHJvdWdoIGFueSBzeW5jaHJvbml6ZXJzKQorLy8hCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyBhIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBjbGVhcmVkLgorLy8hIC0gXHJlZiBDUllQVE9fRE1BX0lOX0RPTkUKKy8vISAtIFxyZWYgQ1JZUFRPX1JFU1VMVF9SRFkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitDUllQVE9JbnRDbGVhcih1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMySW50RmxhZ3MgJiBDUllQVE9fRE1BX0lOX0RPTkUpIHwKKyAgICAgICAgICAgKHVpMzJJbnRGbGFncyAmIENSWVBUT19SRVNVTFRfUkRZKSk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSByZXF1ZXN0ZWQgaW50ZXJydXB0IHNvdXJjZXMsCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUNMUikgPSB1aTMySW50RmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYSBDcnlwdG8gaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhY3R1YWwgcmVnaXN0ZXJpbmcgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLiAgVGhpcworLy8hIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyOyBzcGVjaWZpYworLy8hIFVBUlQgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgdmlhIFxyZWYgQ1JZUFRPSW50RW5hYmxlKCkuIEl0IGlzIHRoZSBpbnRlcnJ1cHQKKy8vISBoYW5kbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gY2xlYXIgdGhlIGludGVycnVwdCBzb3VyY2UuCisvLyEKKy8vISBccGFyYW0gcGZuSGFuZGxlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZQorLy8hIFVBUlQgaW50ZXJydXB0IG9jY3Vycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitDUllQVE9JbnRSZWdpc3Rlcih2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpCit7CisgICAgLy8KKyAgICAvLyBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRSZWdpc3RlcihJTlRfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEsIHBmbkhhbmRsZXIpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIFVBUlQgaW50ZXJydXB0LgorICAgIC8vCisgICAgSW50RW5hYmxlKElOVF9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciBhIENyeXB0byBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFjdHVhbCB1bnJlZ2lzdGVyaW5nIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gSXQKKy8vISBjbGVhcnMgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gYSBDcnlwdG8gaW50ZXJydXB0IG9jY3Vycy4gVGhpcworLy8hIGZ1bmN0aW9uIGFsc28gbWFza3Mgb2ZmIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIHNvIHRoYXQKKy8vISB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbm8gbG9uZ2VyIGlzIGNhbGxlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitDUllQVE9JbnRVbnJlZ2lzdGVyKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBJbnREaXNhYmxlKElOVF9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSk7CisKKyAgICAvLworICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50VW5yZWdpc3RlcihJTlRfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9DUllQVE9BZXNMb2FkS2V5CisgICAgICAgICN1bmRlZiAgQ1JZUFRPQWVzTG9hZEtleQorICAgICAgICAjZGVmaW5lIENSWVBUT0Flc0xvYWRLZXkgICAgICAgICAgICAgICAgUk9NX0NSWVBUT0Flc0xvYWRLZXkKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NSWVBUT0Flc0NiYworICAgICAgICAjdW5kZWYgIENSWVBUT0Flc0NiYworICAgICAgICAjZGVmaW5lIENSWVBUT0Flc0NiYyAgICAgICAgICAgICAgICAgICAgUk9NX0NSWVBUT0Flc0NiYworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1JZUFRPQWVzQ2JjU3RhdHVzCisgICAgICAgICN1bmRlZiAgQ1JZUFRPQWVzQ2JjU3RhdHVzCisgICAgICAgICNkZWZpbmUgQ1JZUFRPQWVzQ2JjU3RhdHVzICAgICAgICAgICAgICBST01fQ1JZUFRPQWVzQ2JjU3RhdHVzCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DUllQVE9BZXNFY2IKKyAgICAgICAgI3VuZGVmICBDUllQVE9BZXNFY2IKKyAgICAgICAgI2RlZmluZSBDUllQVE9BZXNFY2IgICAgICAgICAgICAgICAgICAgIFJPTV9DUllQVE9BZXNFY2IKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NSWVBUT0Flc0VjYlN0YXR1cworICAgICAgICAjdW5kZWYgIENSWVBUT0Flc0VjYlN0YXR1cworICAgICAgICAjZGVmaW5lIENSWVBUT0Flc0VjYlN0YXR1cyAgICAgICAgICAgICAgUk9NX0NSWVBUT0Flc0VjYlN0YXR1cworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1JZUFRPQ2NtQXV0aEVuY3J5cHQKKyAgICAgICAgI3VuZGVmICBDUllQVE9DY21BdXRoRW5jcnlwdAorICAgICAgICAjZGVmaW5lIENSWVBUT0NjbUF1dGhFbmNyeXB0ICAgICAgICAgICAgUk9NX0NSWVBUT0NjbUF1dGhFbmNyeXB0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DUllQVE9DY21BdXRoRW5jcnlwdFN0YXR1cworICAgICAgICAjdW5kZWYgIENSWVBUT0NjbUF1dGhFbmNyeXB0U3RhdHVzCisgICAgICAgICNkZWZpbmUgQ1JZUFRPQ2NtQXV0aEVuY3J5cHRTdGF0dXMgICAgICBST01fQ1JZUFRPQ2NtQXV0aEVuY3J5cHRTdGF0dXMKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NSWVBUT0NjbUF1dGhFbmNyeXB0UmVzdWx0R2V0CisgICAgICAgICN1bmRlZiAgQ1JZUFRPQ2NtQXV0aEVuY3J5cHRSZXN1bHRHZXQKKyAgICAgICAgI2RlZmluZSBDUllQVE9DY21BdXRoRW5jcnlwdFJlc3VsdEdldCAgIFJPTV9DUllQVE9DY21BdXRoRW5jcnlwdFJlc3VsdEdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHQKKyAgICAgICAgI3VuZGVmICBDUllQVE9DY21JbnZBdXRoRGVjcnlwdAorICAgICAgICAjZGVmaW5lIENSWVBUT0NjbUludkF1dGhEZWNyeXB0ICAgICAgICAgUk9NX0NSWVBUT0NjbUludkF1dGhEZWNyeXB0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DUllQVE9DY21JbnZBdXRoRGVjcnlwdFN0YXR1cworICAgICAgICAjdW5kZWYgIENSWVBUT0NjbUludkF1dGhEZWNyeXB0U3RhdHVzCisgICAgICAgICNkZWZpbmUgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRTdGF0dXMgICBST01fQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRTdGF0dXMKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NSWVBUT0NjbUludkF1dGhEZWNyeXB0UmVzdWx0R2V0CisgICAgICAgICN1bmRlZiAgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRSZXN1bHRHZXQKKyAgICAgICAgI2RlZmluZSBDUllQVE9DY21JbnZBdXRoRGVjcnlwdFJlc3VsdEdldCBST01fQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRSZXN1bHRHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NSWVBUT0RtYUVuYWJsZQorICAgICAgICAjdW5kZWYgIENSWVBUT0RtYUVuYWJsZQorICAgICAgICAjZGVmaW5lIENSWVBUT0RtYUVuYWJsZSAgICAgICAgICAgICAgICAgUk9NX0NSWVBUT0RtYUVuYWJsZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1JZUFRPRG1hRGlzYWJsZQorICAgICAgICAjdW5kZWYgIENSWVBUT0RtYURpc2FibGUKKyAgICAgICAgI2RlZmluZSBDUllQVE9EbWFEaXNhYmxlICAgICAgICAgICAgICAgIFJPTV9DUllQVE9EbWFEaXNhYmxlCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgLy8gX19DUllQVE9fSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RkaS5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhN2U4MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RkaS5jCkBAIC0wLDAgKzEsMjYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgZGRpLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTA5IDEyOjA1OjAyICswMjAwIChNb24sIDA5IE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2MzE1CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgRERJIG1hc3RlciBpbnRlcmZhY2UKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGRpLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBEREkzMlJlZ1dyaXRlCisgICAgI2RlZmluZSBEREkzMlJlZ1dyaXRlICAgICAgICAgICAgICAgICAgIE5PUk9NX0RESTMyUmVnV3JpdGUKKyAgICAjdW5kZWYgIERESTE2Qml0V3JpdGUKKyAgICAjZGVmaW5lIERESTE2Qml0V3JpdGUgICAgICAgICAgICAgICAgICAgTk9ST01fRERJMTZCaXRXcml0ZQorICAgICN1bmRlZiAgRERJMTZCaXRmaWVsZFdyaXRlCisgICAgI2RlZmluZSBEREkxNkJpdGZpZWxkV3JpdGUgICAgICAgICAgICAgIE5PUk9NX0RESTE2Qml0ZmllbGRXcml0ZQorICAgICN1bmRlZiAgRERJMTZCaXRSZWFkCisgICAgI2RlZmluZSBEREkxNkJpdFJlYWQgICAgICAgICAgICAgICAgICAgIE5PUk9NX0RESTE2Qml0UmVhZAorICAgICN1bmRlZiAgRERJMTZCaXRmaWVsZFJlYWQKKyAgICAjZGVmaW5lIERESTE2Qml0ZmllbGRSZWFkICAgICAgICAgICAgICAgTk9ST01fRERJMTZCaXRmaWVsZFJlYWQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFdyaXRlIGEgMzIgYml0IHZhbHVlIHRvIGEgcmVnaXN0ZXIgaW4gdGhlIERESSBzbGF2ZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitEREkzMlJlZ1dyaXRlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLAorICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyVmFsKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChERElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IERESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIHZhbHVlIHRvIHRoZSByZWdpc3Rlci4KKyAgICAvLworICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyQmFzZSArIHVpMzJSZWcsIHVpMzJWYWwsIDQpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFdyaXRlIGEgc2luZ2xlIGJpdCB1c2luZyBhIDE2LWJpdCBtYXNrYWJsZSB3cml0ZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0RESTE2Qml0V3JpdGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsCisgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJNYXNrLCB1aW50MzJfdCB1aTMyV3JEYXRhKQoreworICAgIHVpbnQzMl90IHVpMzJSZWdBZGRyOworICAgIHVpbnQzMl90IHVpMzJEYXRhOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKERESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCghKCh1aTMyTWFzayAmIDB4RkZGRjAwMDApIF4gKHVpMzJNYXNrICYgMHgwMDAwRkZGRikpKTsKKyAgICBBU1NFUlQoISh1aTMyV3JEYXRhICYgMHhGRkZGMDAwMCkpOworCisgICAgLy8KKyAgICAvLyBEREkgMTYtYml0IHRhcmdldCBpcyBvbiAzMi1iaXQgYm91bmRhcnkgc28gZG91YmxlIG9mZnNldAorICAgIC8vCisgICAgdWkzMlJlZ0FkZHIgPSB1aTMyQmFzZSArICh1aTMyUmVnIDw8IDEpICsgRERJX09fTUFTSzE2QjsKKworICAgIC8vCisgICAgLy8gQWRqdXN0IGZvciB0YXJnZXQgYml0IGluIGhpZ2ggaGFsZiBvZiB0aGUgd29yZC4KKyAgICAvLworICAgIGlmKHVpMzJNYXNrICYgMHhGRkZGMDAwMCkKKyAgICB7CisgICAgICAgIHVpMzJSZWdBZGRyICs9IDQ7CisgICAgICAgIHVpMzJNYXNrID4+PSAxNjsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFdyaXRlIG1hc2sgaWYgZGF0YSBpcyBub3QgemVybyAodG8gc2V0IG1hc2sgYml0KSwgZWxzZSB3cml0ZSAnMCcuCisgICAgLy8KKyAgICB1aTMyRGF0YSA9IHVpMzJXckRhdGEgPyB1aTMyTWFzayA6IDB4MDsKKworICAgIC8vCisgICAgLy8gVXBkYXRlIHRoZSByZWdpc3Rlci4KKyAgICAvLworICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyUmVnQWRkciwgKHVpMzJNYXNrIDw8IDE2KSB8IHVpMzJEYXRhLCA0KTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBXcml0ZSBhIGJpdGZpZWxkIHZpYSB0aGUgRERJIHVzaW5nIDE2LWJpdCBtYXNrYWJsZSB3cml0ZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0RESTE2Qml0ZmllbGRXcml0ZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyTWFzaywgdWludDMyX3QgdWkzMlNoaWZ0LAorICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHVpMzJEYXRhKQoreworICAgIHVpbnQzMl90IHVpMzJSZWdBZGRyOworICAgIHVpbnQzMl90IHVpMzJXckRhdGE7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoRERJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIDE2LWJpdCB0YXJnZXQgaXMgb24gMzItYml0IGJvdW5kYXJ5IHNvIGRvdWJsZSBvZmZzZXQuCisgICAgLy8KKyAgICB1aTMyUmVnQWRkciA9IHVpMzJCYXNlICsgKHVpMzJSZWcgPDwgMSkgKyBERElfT19NQVNLMTZCOworCisgICAgLy8KKyAgICAvLyBBZGp1c3QgZm9yIHRhcmdldCBiaXQgaW4gaGlnaCBoYWxmIG9mIHRoZSB3b3JkLgorICAgIC8vCisgICAgaWYodWkzMlNoaWZ0ID49IDE2KQorICAgIHsKKyAgICAgICAgdWkzMlNoaWZ0ID0gdWkzMlNoaWZ0IC0gMTY7CisgICAgICAgIHVpMzJSZWdBZGRyICs9IDQ7CisgICAgICAgIHVpMzJNYXNrID0gdWkzMk1hc2sgPj4gMTY7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTaGlmdCBkYXRhIGluIHRvIHBvc2l0aW9uLgorICAgIC8vCisgICAgdWkzMldyRGF0YSA9IHVpMzJEYXRhIDw8IHVpMzJTaGlmdDsKKworICAgIC8vCisgICAgLy8gV3JpdGUgZGF0YS4KKyAgICAvLworICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyUmVnQWRkciwgKHVpMzJNYXNrIDw8IDE2KSB8IHVpMzJXckRhdGEsIDQpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFJlYWQgYSBiaXQgdmlhIHRoZSBEREkgdXNpbmcgMTYtYml0IFJFQUQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDE2X3QKK0RESTE2Qml0UmVhZCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywgdWludDMyX3QgdWkzMk1hc2spCit7CisgICAgdWludDMyX3QgdWkzMlJlZ0FkZHI7CisgICAgdWludDE2X3QgdWkxNkRhdGE7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoRERJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIENhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIuCisgICAgLy8KKyAgICB1aTMyUmVnQWRkciA9IHVpMzJCYXNlICsgdWkzMlJlZyArIERESV9PX0RJUjsKKworICAgIC8vCisgICAgLy8gQWRqdXN0IGZvciB0YXJnZXQgYml0IGluIGhpZ2ggaGFsZiBvZiB0aGUgd29yZC4KKyAgICAvLworICAgIGlmKHVpMzJNYXNrICYgMHhGRkZGMDAwMCkKKyAgICB7CisgICAgICAgIHVpMzJSZWdBZGRyICs9IDI7CisgICAgICAgIHVpMzJNYXNrID0gdWkzMk1hc2sgPj4gMTY7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZWFkIGEgaGFsZndvcmQgb24gdGhlIERESSBpbnRlcmZhY2UuCisgICAgLy8KKyAgICB1aTE2RGF0YSA9IEF1eEFkaURkaVNhZmVSZWFkKHVpMzJSZWdBZGRyLCAyKTsKKworICAgIC8vCisgICAgLy8gTWFzayBkYXRhLgorICAgIC8vCisgICAgdWkxNkRhdGEgPSB1aTE2RGF0YSAmIHVpMzJNYXNrOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gbWFza2VkIGRhdGEuCisgICAgLy8KKyAgICByZXR1cm4odWkxNkRhdGEpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFJlYWQgYSBiaXRmaWVsZCB2aWEgdGhlIERESSB1c2luZyAxNi1iaXQgcmVhZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MTZfdAorRERJMTZCaXRmaWVsZFJlYWQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyTWFzaywgdWludDMyX3QgdWkzMlNoaWZ0KQoreworICAgIHVpbnQzMl90IHVpMzJSZWdBZGRyOworICAgIHVpbnQxNl90IHVpMTZEYXRhOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKERESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBDYWxjdWxhdGUgdGhlIHJlZ2lzdGVyIGFkZHJlc3MuCisgICAgLy8KKyAgICB1aTMyUmVnQWRkciA9IHVpMzJCYXNlICsgdWkzMlJlZyArIERESV9PX0RJUjsKKworICAgIC8vCisgICAgLy8gQWRqdXN0IGZvciB0YXJnZXQgYml0IGluIGhpZ2ggaGFsZiBvZiB0aGUgd29yZC4KKyAgICAvLworICAgIGlmKHVpMzJTaGlmdCA+PSAxNikKKyAgICB7CisgICAgICAgIHVpMzJTaGlmdCA9IHVpMzJTaGlmdCAtIDE2OworICAgICAgICB1aTMyUmVnQWRkciArPSAyOworICAgICAgICB1aTMyTWFzayA9IHVpMzJNYXNrID4+IDE2OworICAgIH0KKworICAgIC8vCisgICAgLy8gUmVhZCB0aGUgcmVnaXN0ZXIuCisgICAgLy8KKyAgICB1aTE2RGF0YSA9IEF1eEFkaURkaVNhZmVSZWFkKHVpMzJSZWdBZGRyLCAyKTsKKworICAgIC8vCisgICAgLy8gTWFzayBkYXRhIGFuZCBzaGlmdCBpbnRvIHBsYWNlLgorICAgIC8vCisgICAgdWkxNkRhdGEgJj0gdWkzMk1hc2s7CisgICAgdWkxNkRhdGEgPj49IHVpMzJTaGlmdDsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIGRhdGEuCisgICAgLy8KKyAgICByZXR1cm4odWkxNkRhdGEpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGRpLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM3N2ExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGRpLmgKQEAgLTAsMCArMSw1OTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBkZGkuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMDkgMTI6MDU6MDIgKzAyMDAgKE1vbiwgMDkgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDYzMTUKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgRERJIG1hc3RlciBpbnRlcmZhY2UuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIGFuYWxvZ19ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgZGRpX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fRERJX0hfXworI2RlZmluZSBfX0RESV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZGRpLmg+CisjaW5jbHVkZSA8aW5jL2h3X2F1eF9zbXBoLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NwdS5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBEREkzMlJlZ1dyaXRlICAgICAgICAgICAgICAgICAgIE5PUk9NX0RESTMyUmVnV3JpdGUKKyAgICAjZGVmaW5lIERESTE2Qml0V3JpdGUgICAgICAgICAgICAgICAgICAgTk9ST01fRERJMTZCaXRXcml0ZQorICAgICNkZWZpbmUgRERJMTZCaXRmaWVsZFdyaXRlICAgICAgICAgICAgICBOT1JPTV9EREkxNkJpdGZpZWxkV3JpdGUKKyAgICAjZGVmaW5lIERESTE2Qml0UmVhZCAgICAgICAgICAgICAgICAgICAgTk9ST01fRERJMTZCaXRSZWFkCisgICAgI2RlZmluZSBEREkxNkJpdGZpZWxkUmVhZCAgICAgICAgICAgICAgIE5PUk9NX0RESTE2Qml0ZmllbGRSZWFkCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE51bWJlciBvZiByZWdpc3RlciBpbiB0aGUgRERJIHNsYXZlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBERElfU0xBVkVfUkVHUyAgICAgICAgICA2NAorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIHRoYXQgaXMgdXNlZCB0byBjb250cm9sIHRoZSBBREkgc2xhdmUgYW5kIG1hc3RlcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgRERJX1BST1RFQ1QgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIERESV9BQ0sgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBERElfU1lOQyAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhlbHBlciBmdW5jdGlvbnMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNhZmVseSB3cml0ZSB0byBBVVggQURJL0RESSBpbnRlcmZhY2VzIHVzaW5nIGEgc2VtYXBob3JlLgorLy8hCisvLyEgXG5vdGUgQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gbkFkZHIgaXMgdGhlIHJlZ2lzdGVyIGFkZHJlc3MuCisvLyEgXHBhcmFtIG5EYXRhIGlzIHRoZSBkYXRhIHRvIHdyaXRlIHRvIHRoZSByZWdpc3Rlci4KKy8vISBccGFyYW0gblNpemUgaXMgdGhlIHJlZ2lzdGVyIGFjY2VzcyBzaXplIGluIGJ5dGVzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0F1eEFkaURkaVNhZmVXcml0ZSh1aW50MzJfdCBuQWRkciwgdWludDMyX3QgbkRhdGEsIHVpbnQzMl90IG5TaXplKQoreworICAgIC8vIERpc2FibGUgaW50ZXJydXB0cyBhbmQgcmVtZW1iZXIgd2hldGhlciB0byByZS1lbmFibGUKKyAgICBib29sIGJJcnFFbmFibGVkID0gIUNQVWNwc2lkKCk7CisgICAgLy8gQWNxdWlyZSBzZW1hcGhvcmUgZm9yIGFjY2Vzc2luZyBBREkvRERJIGluIEFVWCwgcGVyZm9ybSBhY2Nlc3MsIHJlbGVhc2Ugc2VtYXBob3JlCisgICAgd2hpbGUgKCFIV1JFRyhBVVhfU01QSF9CQVNFICsgQVVYX1NNUEhfT19TTVBIMCkpOworICAgIHN3aXRjaCAoblNpemUpIHsKKyAgICBjYXNlIDE6ICAgICAgICAgICAgIEhXUkVHQihuQWRkcikgPSAodWludDhfdCluRGF0YTsgYnJlYWs7CisgICAgY2FzZSAyOiAgICAgICAgICAgICBIV1JFR0gobkFkZHIpID0gKHVpbnQxNl90KW5EYXRhOyBicmVhazsKKyAgICBjYXNlIDQ6IGRlZmF1bHQ6ICAgIEhXUkVHKG5BZGRyKSAgPSBuRGF0YTsgYnJlYWs7CisgICAgfQorICAgIEhXUkVHKEFVWF9TTVBIX0JBU0UgKyBBVVhfU01QSF9PX1NNUEgwKSA9IDE7CisgICAgLy8gUmVzdG9yZSBpbnRlcnJ1cHQgZW5hYmxlCisgICAgaWYgKGJJcnFFbmFibGVkKSB7CisgICAgICAgIENQVWNwc2llKCk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTYWZlbHkgcmVhZCBmcm9tIEFVWCBBREkvRERJIGludGVyZmFjZXMgdXNpbmcgYSBzZW1hcGhvcmUuCisvLyEKKy8vISBcbm90ZSBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSBuQWRkciBpcyB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKy8vISBccGFyYW0gblNpemUgaXMgdGhlIHJlZ2lzdGVyIGFjY2VzcyBzaXplIGluIGJ5dGVzLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBkYXRhIHJlYWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBdXhBZGlEZGlTYWZlUmVhZCh1aW50MzJfdCBuQWRkciwgdWludDMyX3QgblNpemUpCit7CisgICAgdWludDMyX3QgblJldDsKKyAgICAvLyBEaXNhYmxlIGludGVycnVwdHMgYW5kIHJlbWVtYmVyIHdoZXRoZXIgdG8gcmUtZW5hYmxlCisgICAgYm9vbCBiSXJxRW5hYmxlZCA9ICFDUFVjcHNpZCgpOworICAgIC8vIEFjcXVpcmUgc2VtYXBob3JlIGZvciBhY2Nlc3NpbmcgQURJL0RESSBpbiBBVVgsIHBlcmZvcm0gYWNjZXNzLCByZWxlYXNlIHNlbWFwaG9yZQorICAgIHdoaWxlICghSFdSRUcoQVVYX1NNUEhfQkFTRSArIEFVWF9TTVBIX09fU01QSDApKTsKKyAgICBzd2l0Y2ggKG5TaXplKSB7CisgICAgY2FzZSAxOiAgICAgICAgICAgICBuUmV0ID0gSFdSRUdCKG5BZGRyKTsgYnJlYWs7CisgICAgY2FzZSAyOiAgICAgICAgICAgICBuUmV0ID0gSFdSRUdIKG5BZGRyKTsgYnJlYWs7CisgICAgY2FzZSA0OiBkZWZhdWx0OiAgICBuUmV0ID0gSFdSRUcobkFkZHIpOyBicmVhazsKKyAgICB9CisgICAgSFdSRUcoQVVYX1NNUEhfQkFTRSArIEFVWF9TTVBIX09fU01QSDApID0gMTsKKyAgICAvLyBSZXN0b3JlIGludGVycnVwdCBlbmFibGUKKyAgICBpZiAoYklycUVuYWJsZWQpIHsKKyAgICAgICAgQ1BVY3BzaWUoKTsKKyAgICB9CisgICAgcmV0dXJuIG5SZXQ7Cit9CisKKyNpZmRlZiBEUklWRVJMSUJfREVCVUcKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGludGVybmFsCisvLyEKKy8vISBcYnJpZWYgQ2hlY2sgYSBEREkgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGEgRERJIHBvcnQgYmFzZSBhZGRyZXNzIGlzIHZhbGlkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIERESSBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIFxjIHRydWUgaWYgdGhlIGJhc2UgYWRkcmVzcyBpcyB2YWxpZCBhbmQgXGMgZmFsc2UKKy8vISBvdGhlcndpc2UuCisvLyEKKy8vISBcZW5kaW50ZXJuYWwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgYm9vbAorRERJQmFzZVZhbGlkKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIHJldHVybih1aTMyQmFzZSA9PSBBVVhfRERJMF9PU0NfQkFTRSk7Cit9CisjZW5kaWYKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWFkIHRoZSB2YWx1ZSBpbiBhIDMyIGJpdCByZWdpc3Rlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGEgcmVnaXN0ZXIgaW4gdGhlIGFuYWxvZyBkb21haW4gYW5kIHJldHVybgorLy8hIHRoZSB2YWx1ZSBhcyBhbiBcYyB1aW50MzJfdC4KKy8vIQorLy8hIFxub3RlIEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIERESSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIDMyIGJpdCByZWdpc3RlciB0byByZWFkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSAzMiBiaXQgdmFsdWUgb2YgdGhlIGFuYWxvZyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0RESTMyUmVnUmVhZCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoRERJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBERElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIFJlYWQgdGhlIHJlZ2lzdGVyIGFuZCByZXR1cm4gdGhlIHZhbHVlLgorICAgIC8vCisgICAgcmV0dXJuIEF1eEFkaURkaVNhZmVSZWFkKHVpMzJCYXNlICsgdWkzMlJlZywgNCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBzcGVjaWZpYyBiaXRzIGluIGEgRERJIHNsYXZlIHJlZ2lzdGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCBiaXRzIGluIGEgcmVnaXN0ZXIgaW4gdGhlIGFuYWxvZyBkb21haW4uCisvLyEKKy8vISBcbm90ZSBUaGlzIG9wZXJhdGlvbiBpcyB3cml0ZSBvbmx5IGZvciB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyLgorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgYml0cyBpbiBzcGVjaWZpYyByZWdpc3RlciBpbiB0aGUKKy8vISBEREkgc2xhdmUuIE9ubHkgYml0cyBpbiB0aGUgc2VsZWN0ZWQgcmVnaXN0ZXIgYXJlIGFmZmVjdGVkIGJ5IHRoZQorLy8hIG9wZXJhdGlvbi4KKy8vIQorLy8hIFxub3RlIEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIERESSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIGJhc2UgcmVnaXN0ZXIgdG8gYXNzZXJ0IHRoZSBiaXRzIGluLgorLy8hIFxwYXJhbSB1aTMyVmFsIGlzIHRoZSAzMiBiaXQgb25lLWhvdCBlbmNvZGVkIHZhbHVlIHNwZWNpZnlpbmcgd2hpY2gKKy8vISBiaXRzIHRvIHNldCBpbiB0aGUgcmVnaXN0ZXIuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorRERJMzJCaXRzU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCB1aW50MzJfdCB1aTMyVmFsKQoreworICAgIHVpbnQzMl90IHVpMzJSZWdPZmZzZXQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoRERJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBERElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY29ycmVjdCBhZGRyZXNzIG9mIHRoZSBmaXJzdCByZWdpc3RlciB1c2VkIGZvciBzZXR0aW5nIGJpdHMKKyAgICAvLyBpbiB0aGUgRERJIHNsYXZlLgorICAgIC8vCisgICAgdWkzMlJlZ09mZnNldCA9IERESV9PX1NFVDsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBiaXRzLgorICAgIC8vCisgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCArIHVpMzJSZWcsIHVpMzJWYWwsIDQpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhciBzcGVjaWZpYyBiaXRzIGluIGEgMzIgYml0IERESSByZWdpc3Rlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBiaXRzIGluIGEgcmVnaXN0ZXIgaW4gdGhlIGFuYWxvZyBkb21haW4uCisvLyEKKy8vISBcbm90ZSBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBEREkgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSBiYXNlIHJlZ2lzdGVycyB0byBjbGVhciB0aGUgYml0cyBpbi4KKy8vISBccGFyYW0gdWkzMlZhbCBpcyB0aGUgMzIgYml0IG9uZS1ob3QgZW5jb2RlZCB2YWx1ZSBzcGVjaWZ5aW5nIHdoaWNoCisvLyEgYml0cyB0byBjbGVhciBpbiB0aGUgcmVnaXN0ZXIuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorRERJMzJCaXRzQ2xlYXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsCisgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyVmFsKQoreworICAgIHVpbnQzMl90IHVpMzJSZWdPZmZzZXQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoRERJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBERElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY29ycmVjdCBhZGRyZXNzIG9mIHRoZSBmaXJzdCByZWdpc3RlciB1c2VkIGZvciBzZXR0aW5nIGJpdHMKKyAgICAvLyBpbiB0aGUgRERJIHNsYXZlLgorICAgIC8vCisgICAgdWkzMlJlZ09mZnNldCA9IERESV9PX0NMUjsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHNlbGVjdGVkIGJpdHMuCisgICAgLy8KKyAgICBBdXhBZGlEZGlTYWZlV3JpdGUodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0ICsgdWkzMlJlZywgdWkzMlZhbCwgNCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBhIHZhbHVlIG9uIGFueSA4IGJpdHMgaW5zaWRlIGEgMzIgYml0IHJlZ2lzdGVyIGluIHRoZSBEREkgc2xhdmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGFsbG93cyBieXRlICg4IGJpdCBhY2Nlc3MpIHRvIHRoZSBEREkgc2xhdmUgcmVnaXN0ZXJzLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gd3JpdGUgYW55IHZhbHVlIGluIHRoZSByYW5nZSAwLTcgYml0cyBhbGlnbmVkIG9uIGEKKy8vISBieXRlIGJvdW5kYXJ5LiBGeC4gZm9yIHdyaXRpbmcgdGhlIHZhbHVlIDBiMTAxIHRvIGJpdHMgMS0zIHNldAorLy8hIDx0dD51aTE2VmFsID0gMHgwQTwvdHQ+IGFuZCA8dHQ+dWkxNk1hc2sgPSAweDBFPC90dD4uIEJpdHMgMCBhbmQgNS03IHdpbGwKKy8vISBub3QgYmUgYWZmZWN0ZWQgYnkgdGhlIG9wZXJhdGlvbiwgYXMgbG9uZyBhcyB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGFyZQorLy8hIG5vdCBzZXQgaW4gdGhlIFxjIHVpMTZNYXNrLgorLy8hCisvLyEgXG5vdGUgQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgRERJIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIExlYXN0IFNpZ25pZmljYW50IFJlZ2lzdGVyIGluIHRoZSBEREkgc2xhdmUgdGhhdAorLy8hIHdpbGwgYmUgYWZmZWN0ZWQgYnkgdGhlIHdyaXRlIG9wZXJhdGlvbi4KKy8vISBccGFyYW0gdWkzMkJ5dGUgaXMgdGhlIGJ5dGUgbnVtYmVyIHRvIGFjY2VzcyB3aXRoaW4gdGhlIDMyIGJpdCByZWdpc3Rlci4KKy8vISBccGFyYW0gdWkxNk1hc2sgaXMgdGhlIG1hc2sgZGVmaW5pbmcgd2hpY2ggb2YgdGhlIDggYml0cyB0aGF0IHNob3VsZCBiZQorLy8hIG92ZXJ3cml0dGVuLiBUaGUgbWFzayBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxvd2VyIGhhbGYgb2YgdGhlIDE2IGJpdHMuCisvLyEgXHBhcmFtIHVpMTZWYWwgaXMgdGhlIHZhbHVlIHRvIHdyaXRlLiBUaGUgdmFsdWUgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBsb3dlcgorLy8hIGhhbGYgb2YgdGhlIDE2IGJpdHMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorRERJOFNldFZhbEJpdCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywgdWludDMyX3QgdWkzMkJ5dGUsCisgICAgICAgICAgICAgIHVpbnQxNl90IHVpMTZNYXNrLCB1aW50MTZfdCB1aTE2VmFsKQoreworICAgIHVpbnQzMl90IHVpMzJSZWdPZmZzZXQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoRERJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBERElfU0xBVkVfUkVHUyk7CisgICAgQVNTRVJUKCEodWkxNlZhbCAmIDB4RkYwMCkpOworICAgIEFTU0VSVCghKHVpMTZNYXNrICYgMHhGRjAwKSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY29ycmVjdCBhZGRyZXNzIG9mIHRoZSBmaXJzdCByZWdpc3RlciB1c2VkIGZvciBzZXR0aW5nIGJpdHMKKyAgICAvLyBpbiB0aGUgRERJIHNsYXZlLgorICAgIC8vCisgICAgdWkzMlJlZ09mZnNldCA9IERESV9PX01BU0s4QiArICh1aTMyUmVnIDw8IDEpICsgKHVpMzJCeXRlIDw8IDEpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGJpdHMuCisgICAgLy8KKyAgICBBdXhBZGlEZGlTYWZlV3JpdGUodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0LCAodWkxNk1hc2sgPDwgOCkgfCB1aTE2VmFsLCAyKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IGEgdmFsdWUgb24gYW55IDE2IGJpdHMgaW5zaWRlIGEgMzIgYml0IHJlZ2lzdGVyIGFsaWduZWQgb24gYQorLy8hIGhhbGYtd29yZCBib3VuZGFyeSBpbiB0aGUgRERJIHNsYXZlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBhbGxvd3MgMTYgYml0IG1hc2tlZCBhY2Nlc3MgdG8gdGhlIERESSBzbGF2ZSByZWdpc3RlcnMuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byB3cml0ZSBhbnkgdmFsdWUgaW4gdGhlIHJhbmdlIDAtMTUgYml0cyBhbGlnbmVkIG9uIGEKKy8vISBoYWxmLXdvcmQgYm91bmRhcnkuIEZ4LiBmb3Igd3JpdGluZyB0aGUgdmFsdWUgMGIxMDEgdG8gYml0cyAxLTMgc2V0CisvLyEgPHR0PnVpMzJWYWwgPSAweDAwMEE8L3R0PiBhbmQgPHR0PnVpMzJNYXNrID0gMHgwMDBFPC90dD4uIEJpdHMgMCBhbmQgNS0xNSB3aWxsIG5vdCBiZQorLy8hIGFmZmVjdGVkIGJ5IHRoZSBvcGVyYXRpb24sIGFzIGxvbmcgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBhcmUgbm90IHNldAorLy8hIGluIHRoZSBcYyB1aTMyTWFzay4KKy8vIQorLy8hIFxub3RlIEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIERESSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHJlZ2lzdGVyIHRvIGFjY2Vzcy4KKy8vISBccGFyYW0gYldyaXRlSGlnaCBkZWZpbmVzIHdoaWNoIHBhcnQgb2YgdGhlIHJlZ2lzdGVyIHRvIHdyaXRlIGluLgorLy8hIFxwYXJhbSB1aTMyTWFzayBpcyB0aGUgbWFzayBkZWZpbmluZyB3aGljaCBvZiB0aGUgMTYgYml0IHRoYXQgc2hvdWxkIGJlCisvLyEgb3ZlcndyaXR0ZW4uIFRoZSBtYXNrIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgbG93ZXIgaGFsZiBvZiB0aGUgMzIgYml0cy4KKy8vISBccGFyYW0gdWkzMlZhbCBpcyB0aGUgdmFsdWUgdG8gd3JpdGUuIFRoZSB2YWx1ZSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxvd2VyCisvLyEgaGFsZiBvZiB0aGUgMzIgYml0cy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitEREkxNlNldFZhbEJpdCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywgYm9vbCBiV3JpdGVIaWdoLAorICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk1hc2ssIHVpbnQzMl90IHVpMzJWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChERElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IERESV9TTEFWRV9SRUdTKTsKKyAgICBBU1NFUlQoISh1aTMyVmFsICYgMHhGRkZGMDAwMCkpOworICAgIEFTU0VSVCghKHVpMzJNYXNrICYgMHhGRkZGMDAwMCkpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcmVnaXN0ZXIgdXNlZCBmb3Igc2V0dGluZyBiaXRzCisgICAgLy8gaW4gdGhlIERESSBzbGF2ZS4KKyAgICAvLworICAgIHVpMzJSZWdPZmZzZXQgPSBERElfT19NQVNLMTZCICsgKHVpMzJSZWcgPDwgMSkgKyAoYldyaXRlSGlnaCA/IDQgOiAwKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBiaXRzLgorICAgIC8vCisgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCwgKHVpMzJNYXNrIDw8IDE2KSB8IHVpMzJWYWwsIDQpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBXcml0ZSBhIDMyIGJpdCB2YWx1ZSB0byBhIHJlZ2lzdGVyIGluIHRoZSBEREkgc2xhdmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgd3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIGluIHRoZSBhbmFsb2cKKy8vISBkb21haW4uCisvLyEKKy8vISBcbm90ZSBUaGlzIG9wZXJhdGlvbiBpcyB3cml0ZSBvbmx5IGZvciB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyLiBObworLy8hIGNvbnNlcnZhdGlvbiBvZiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIHdpbGwgYmUga2VwdCAoaS5lLiB0aGlzCisvLyEgaXMgTk9UIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIHRoZSByZWdpc3RlcikuCisvLyEKKy8vISBcbm90ZSBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBEREkgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSByZWdpc3RlciB0byB3cml0ZS4KKy8vISBccGFyYW0gdWkzMlZhbCBpcyB0aGUgMzIgYml0IHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3Rlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIERESTMyUmVnV3JpdGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsIHVpbnQzMl90IHVpMzJWYWwpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBXcml0ZSBhIHNpbmdsZSBiaXQgdXNpbmcgYSAxNi1iaXQgbWFza2FibGUgd3JpdGUuCisvLyEKKy8vISBBICcxJyBpcyB3cml0dGVuIHRvIHRoZSBiaXQgaWYgXGMgdWkzMldyRGF0YSBpcyBub24temVybywgZWxzZSBhICcwJyBpcyB3cml0dGVuLgorLy8hCisvLyEgXG5vdGUgQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgRERJIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgcmVnaXN0ZXIgdG8gYWNjZXNzLgorLy8hIFxwYXJhbSB1aTMyTWFzayBpcyB0aGUgbWFzayBkZWZpbmluZyB3aGljaCBvZiB0aGUgMTYgYml0IHRoYXQgc2hvdWxkIGJlCisvLyEgb3ZlcndyaXR0ZW4uIFRoZSBtYXNrIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgbG93ZXIgaGFsZiBvZiB0aGUgMzIgYml0cy4KKy8vISBccGFyYW0gdWkzMldyRGF0YSBpcyB0aGUgdmFsdWUgdG8gd3JpdGUuIFRoZSB2YWx1ZSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxvd2VyCisvLyEgaGFsZiBvZiB0aGUgMzIgYml0cy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIERESTE2Qml0V3JpdGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJNYXNrLCB1aW50MzJfdCB1aTMyV3JEYXRhKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBXcml0ZSBhIGJpdCBmaWVsZCB2aWEgdGhlIERESSB1c2luZyAxNi1iaXQgbWFza2FibGUgd3JpdGUuCisvLyEKKy8vISBSZXF1aXJlcyB0aGF0IGJpdGZpZWxkcyBub3Qgc3BhY2UgdGhlIGxvdy9oaWdoIHdvcmQgYm91bmRhcnkuCisvLyEKKy8vISBcbm90ZSBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBEREkgcG9ydC4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyByZWdpc3RlciB0byBhY2Nlc3MuCisvLyEgXHBhcmFtIHVpMzJNYXNrIGlzIHRoZSBtYXNrIGRlZmluaW5nIHdoaWNoIG9mIHRoZSAxNiBiaXRzIHRoYXQgc2hvdWxkIGJlCisvLyEgb3ZlcndyaXR0ZW4uIFRoZSBtYXNrIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgbG93ZXIgaGFsZiBvZiB0aGUgMzIgYml0cy4KKy8vISBccGFyYW0gdWkzMlNoaWZ0CisvLyEgXHBhcmFtIHVpMzJEYXRhCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBEREkxNkJpdGZpZWxkV3JpdGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk1hc2ssIHVpbnQzMl90IHVpMzJTaGlmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCB1aTMyRGF0YSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlYWQgYSBiaXQgdmlhIHRoZSBEREkgdXNpbmcgMTYtYml0IHJlYWQuCisvLyEKKy8vISBcbm90ZSBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBEREkgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSByZWdpc3RlciB0byByZWFkLgorLy8hIFxwYXJhbSB1aTMyTWFzayBkZWZpbmVzIHRoZSBiaXQgd2hpY2ggc2hvdWxkIGJlIHJlYWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgYSB6ZXJvIGlmIGJpdCBzZWxlY3RlZCBieSBtYXNrIGlzICcwJy4gRWxzZSByZXR1cm5zIHRoZSBtYXNrLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MTZfdCBEREkxNkJpdFJlYWQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJNYXNrKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVhZCBhIGJpdGZpZWxkIHZpYSB0aGUgRERJIHVzaW5nIDE2LWJpdCByZWFkLgorLy8hCisvLyEgUmVxdWlyZXMgdGhhdCBiaXQgZmllbGRzIGRvIG5vdCBzcGFjZSB0aGUgbG93L2hpZ2ggd29yZCBib3VuZGFyeS4KKy8vIQorLy8hIFxub3RlIEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIERESSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHJlZ2lzdGVyIHRvIGFjY2Vzcy4KKy8vISBccGFyYW0gdWkzMk1hc2sgaXMgdGhlIG1hc2sgZGVmaW5pbmcgd2hpY2ggb2YgdGhlIDE2IGJpdHMgdGhhdCBzaG91bGQgYmUKKy8vISBvdmVyd3JpdHRlbi4gVGhlIG1hc2sgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBsb3dlciBoYWxmIG9mIHRoZSAzMiBiaXRzLgorLy8hIFxwYXJhbSB1aTMyU2hpZnQgZGVmaW5lcyB0aGUgcmVxdWlyZWQgc2hpZnQgb2YgdGhlIGRhdGEgdG8gYWxpZ24gd2l0aCBiaXQgMC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBkYXRhIGFsaWduZWQgdG8gYml0IDAuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQxNl90IERESTE2Qml0ZmllbGRSZWFkKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJNYXNrLCB1aW50MzJfdCB1aTMyU2hpZnQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9EREkzMlJlZ1dyaXRlCisgICAgICAgICN1bmRlZiAgRERJMzJSZWdXcml0ZQorICAgICAgICAjZGVmaW5lIERESTMyUmVnV3JpdGUgICAgICAgICAgICAgICAgICAgUk9NX0RESTMyUmVnV3JpdGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0RESTE2Qml0V3JpdGUKKyAgICAgICAgI3VuZGVmICBEREkxNkJpdFdyaXRlCisgICAgICAgICNkZWZpbmUgRERJMTZCaXRXcml0ZSAgICAgICAgICAgICAgICAgICBST01fRERJMTZCaXRXcml0ZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fRERJMTZCaXRmaWVsZFdyaXRlCisgICAgICAgICN1bmRlZiAgRERJMTZCaXRmaWVsZFdyaXRlCisgICAgICAgICNkZWZpbmUgRERJMTZCaXRmaWVsZFdyaXRlICAgICAgICAgICAgICBST01fRERJMTZCaXRmaWVsZFdyaXRlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9EREkxNkJpdFJlYWQKKyAgICAgICAgI3VuZGVmICBEREkxNkJpdFJlYWQKKyAgICAgICAgI2RlZmluZSBEREkxNkJpdFJlYWQgICAgICAgICAgICAgICAgICAgIFJPTV9EREkxNkJpdFJlYWQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0RESTE2Qml0ZmllbGRSZWFkCisgICAgICAgICN1bmRlZiAgRERJMTZCaXRmaWVsZFJlYWQKKyAgICAgICAgI2RlZmluZSBEREkxNkJpdGZpZWxkUmVhZCAgICAgICAgICAgICAgIFJPTV9EREkxNkJpdGZpZWxkUmVhZAorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19ERElfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RkaV9kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RkaV9kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTFlNTM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGRpX2RvYy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBkZGlfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGRkaV9hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19kZGkgSW50cm9kdWN0aW9uCisvLyEgXG4KKy8vIQorLy8hIFxzZWN0aW9uIHNlY19kZGlfYXBpIEFQSQorLy8hCisvLyEgVGhlIEFQSSBmdW5jdGlvbnMgY2FuIGJlIGdyb3VwZWQgbGlrZSB0aGlzOgorLy8hCisvLyEgV3JpdGU6CisvLyEgLSBEaXJlY3QgKGFsbCBiaXRzKToKKy8vISAgIC0gXHJlZiBEREkzMlJlZ1dyaXRlKCkKKy8vISAtIFNldCBpbmRpdmlkdWFsIGJpdHM6CisvLyEgICAtIFxyZWYgRERJMzJCaXRzU2V0KCkKKy8vISAtIENsZWFyIGluZGl2aWR1YWwgYml0czoKKy8vISAgIC0gXHJlZiBEREkzMkJpdHNDbGVhcigpCisvLyEgLSBNYXNrZWQ6CisvLyEgICAtIFxyZWYgRERJOFNldFZhbEJpdCgpCisvLyEgICAtIFxyZWYgRERJMTZTZXRWYWxCaXQoKQorLy8hIC0gU3BlY2lhbCBmdW5jdGlvbnMgdXNpbmcgbWFza2VkIHdyaXRlOgorLy8hICAgLSBccmVmIERESTE2Qml0V3JpdGUoKQorLy8hICAgLSBccmVmIERESTE2Qml0ZmllbGRXcml0ZSgpCisvLyEKKy8vISBSZWFkOgorLy8hIC0gRGlyZWN0IChhbGwgYml0cyk6CisvLyEgICAtIFxyZWYgRERJMzJSZWdSZWFkKCkKKy8vISAtIFNwZWNpYWwgZnVuY3Rpb25zIHVzaW5nIG1hc2tlZCByZWFkOgorLy8hICAgLSBccmVmIERESTE2Qml0UmVhZCgpCisvLyEgICAtIFxyZWYgRERJMTZCaXRmaWVsZFJlYWQoKQorLy8hCisvLyEgQVVYIGFjY2VzcyB1c2luZyBzZW1hcGhvcmVzICh1c2VkIGJ5IGJvdGggQURJIGFuZCBEREkgQVBJcyB3aGVuIG5lY2Vzc2FyeSk6CisvLyEgLSBccmVmIEF1eEFkaURkaVNhZmVSZWFkKCkKKy8vISAtIFxyZWYgQXV4QWRpRGRpU2FmZVdyaXRlKCkKKy8vIQorLy8hIEB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kZWJ1Zy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjI4NWI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGVidWcuYwpAQCAtMCwwICsxLDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgZGVidWcuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDctMTYgMTI6MTI6MDQgKzAyMDAgKFRodSwgMTYgSnVsIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQxNTEKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBEZWJ1ZyBmdW5jdGlvbmFsaXR5IChOQi4gVGhpcyBpcyBhIHN0dWIgd2hpY2gKKyogICAgICAgICAgICAgICAgICBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgaW4gYSByZWxlYXNlKS4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEKKy8vISBGdW5jdGlvbiBzdHViIGZvciBhbGxvd2luZyBjb21waWxlIHdpdGggRFJJVkVSTElCX0RFQlVHIGZsYWcgYXNzZXJ0ZWQuCisvLyEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitfX2Vycm9yX18oY2hhciAqcGNGaWxlbmFtZSwgdWludDMyX3QgdWkzMkxpbmUpCit7CisgICAgLy8gRXJyb3IgY2F0Y2hpbmcuCisgICAgLy8gVXNlciBjYW4gaW1wbGVtZW50IGN1c3RvbSBlcnJvciBoYW5kbGluZyBmb3IgZmFpbGluZyBBU1NFUlRzLgorICAgIC8vIFNldHRpbmcgYnJlYWtwb2ludCBoZXJlIGFsbG93cyB0cmFjaW5nIG9mIHRoZSBmYWlsaW5nIEFTU0VSVC4KKyAgICAodm9pZClwY0ZpbGVuYW1lOworICAgICh2b2lkKXVpMzJMaW5lOworICAgIHdoaWxlKCB0cnVlICk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kZWJ1Zy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDNiNDlmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGVidWcuaApAQCAtMCwwICsxLDg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgZGVidWcuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDctMTYgMTI6MTI6MDQgKzAyMDAgKFRodSwgMTYgSnVsIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQxNTEKKyoKKyogIERlc2NyaXB0aW9uOiAgICBNYWNyb3MgZm9yIGFzc2lzdGluZyBkZWJ1ZyBvZiB0aGUgZHJpdmVyIGxpYnJhcnkuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHN5c3RlbV9jb250cm9sX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBkZWJ1Z19hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0RFQlVHX0hfXworI2RlZmluZSBfX0RFQlVHX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUHJvdG90eXBlIGZvciB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHBhc3NlZAorLy8gdG8gYW4gQVBJLiAgVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiBkb2luZyBhIERSSVZFUkxJQl9ERUJVRyBidWlsZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBfX2Vycm9yX18oY2hhciAqcGNGaWxlbmFtZSwgdWludDMyX3QgdWkzMkxpbmUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIEFTU0VSVCBtYWNybywgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIGFzc2VydGlvbiBjaGVja2luZy4gVHlwaWNhbGx5LCB0aGlzCisvLyB3aWxsIGJlIGZvciBwcm9jZWR1cmUgYXJndW1lbnRzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBEUklWRVJMSUJfREVCVUcKKyNkZWZpbmUgQVNTRVJUKGV4cHIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZighKGV4cHIpKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnJvcl9fKF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIH0KKworI2Vsc2UKKyNkZWZpbmUgQVNTRVJUKGV4cHIpCisjZW5kaWYKKworI2VuZGlmIC8vIF9fREVCVUdfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RyaXZlcmxpYl9yZWxlYXNlLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kcml2ZXJsaWJfcmVsZWFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3N2I4YmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kcml2ZXJsaWJfcmVsZWFzZS5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBkcml2ZXJsaWJfcmVsZWFzZS5jCisqICBSZXZpc2VkOiAgICAgICAgJERhdGU6IDIwMTUtMDMtMTEgMTE6MjU6NDYgKzAxMDAgKFdlZCwgMTEgTWFyIDIwMTUpICQKKyogIFJldmlzaW9uOiAgICAgICAkUmV2aXNpb246IDQyOTMyICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBQcm92aWRlcyBtYWNyb3MgZm9yIGVuc3VyaW5nIHRoYXQgYSBzcGVjZmljIHJlbGVhc2Ugb2YKKyogICAgICAgICAgICAgICAgICBEcml2ZXJMaWIgaXMgdXNlZC4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8ZHJpdmVybGliL2RyaXZlcmxpYl9yZWxlYXNlLmg+CisKKworCisKKy8vLyBEZWNsYXJlIHRoZSBjdXJyZW50IERyaXZlckxpYiByZWxlYXNlCitEUklWRVJMSUJfREVDTEFSRV9SRUxFQVNFKDAsIDQ2NTkzKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RyaXZlcmxpYl9yZWxlYXNlLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kcml2ZXJsaWJfcmVsZWFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YjU5MzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kcml2ZXJsaWJfcmVsZWFzZS5oCkBAIC0wLDAgKzEsMTU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgZHJpdmVybGliX3JlbGVhc2UuaAorKiAgUmV2aXNlZDogICAgICAgICREYXRlOiAyMDE1LTA3LTE2IDEyOjEyOjA0ICswMjAwIChUaHUsIDE2IEp1bCAyMDE1KSAkCisqICBSZXZpc2lvbjogICAgICAgJFJldmlzaW9uOiA0NDE1MSAkCisqCisqICBEZXNjcmlwdGlvbjogICAgUHJvdmlkZXMgbWFjcm9zIGZvciBlbnN1cmluZyB0aGF0IGEgc3BlY2ZpYyByZWxlYXNlIG9mCisqICAgICAgICAgICAgICAgICAgRHJpdmVyTGliIGlzIHVzZWQuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHN5c3RlbV9jb250cm9sX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBkcml2ZXJsaWJfcmVsZWFzZV9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0RSSVZFUkxJQl9SRUxFQVNFX0hfXworI2RlZmluZSBfX0RSSVZFUkxJQl9SRUxFQVNFX0hfXworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworCisKKworLy8vIERyaXZlckxpYiByZWxlYXNlIGdyb3VwIG51bWJlcgorI2RlZmluZSBEUklWRVJMSUJfUkVMRUFTRV9HUk9VUCAgIDAKKy8vLyBEcml2ZXJMaWIgcmVsZWFzZSBidWlsZCBudW1iZXIKKyNkZWZpbmUgRFJJVkVSTElCX1JFTEVBU0VfQlVJTEQgICA0NjU5MworCisKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgbWFjcm8gaXMgY2FsbGVkIGludGVybmFsbHkgZnJvbSB3aXRoaW4gRHJpdmVyTGliIHRvIGRlY2xhcmUgdGhlCisvLyEgRHJpdmVyTGliIHJlbGVhc2UgbG9ja2luZyBvYmplY3Q6CisvLyEgXHBhcmFtIGdyb3VwIGlzIHRoZSBEcml2ZXJMaWIgcmVsZWFzZSBncm91cCBudW1iZXIuCisvLyEgXHBhcmFtIGJ1aWxkIGlzIHRoZSBEcml2ZXJMaWIgcmVsZWFzZSBidWlsZCBudW1iZXIuCisvLyEKKy8vISBUaGlzIG1hY3JvIHNoYWxsIG5vdCBiZSBjYWxsZWQgaW4gdGhlIGFwcGxpY2F0aW9uIHVubGVzcyB0aGUgaW50ZW50aW9uIGlzCisvLyEgdG8gYnlwYXNzIHRoZSByZWxlYXNlIGxvY2tpbmcgKGF0IG93biByaXNrKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIERSSVZFUkxJQl9ERUNMQVJFX1JFTEVBU0UoZ3JvdXAsIGJ1aWxkKSBcCisgICAgY29uc3Qgdm9sYXRpbGUgdWludDhfdCBkcml2ZXJsaWJfcmVsZWFzZV8jI2dyb3VwIyNfIyNidWlsZAorCisvLy8gRXh0ZXJuYWwgZGVjbGFyYXRpb24gb2YgdGhlIERyaXZlckxpYiByZWxlYXNlIGxvY2tpbmcgb2JqZWN0CitleHRlcm4gRFJJVkVSTElCX0RFQ0xBUkVfUkVMRUFTRSgwLCA0NjU5Myk7CisKKworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhpcyBtYWNybyBzaGFsbCBiZSBjYWxsZWQgb25jZSBmcm9tIHdpdGhpbiBhIGZ1bmN0aW9uIG9mIGEgcHJlY29tcGlsZWQKKy8vISBzb2Z0d2FyZSBkZWxpdmVyYWJsZSB0byBsb2NrIHRoZSBkZWxpdmVyYWJsZSB0byBhIHNwZWNpZmljIERyaXZlckxpYgorLy8hIHJlbGVhc2UuIEl0IGlzIGVzc2VudGlhbCB0aGF0IHRoZSBjYWxsIGlzIG1hZGUgZnJvbSBjb2RlIHRoYXQgaXMgbm90CisvLyEgb3B0aW1pemVkIGF3YXkuCisvLyEKKy8vISBUaGlzIG1hY3JvIGxvY2tzIHRvIGEgc3BlY2lmaWMgRHJpdmVyTGliIHJlbGVhc2U6CisvLyEgXHBhcmFtIGdyb3VwIGlzIHRoZSBEcml2ZXJMaWIgcmVsZWFzZSBncm91cCBudW1iZXIuCisvLyEgXHBhcmFtIGJ1aWxkIGlzIHRoZSBEcml2ZXJMaWIgcmVsZWFzZSBidWlsZCBudW1iZXIuCisvLyEKKy8vISBJZiBhdHRlbXB0aW5nIHRvIHVzZSB0aGUgcHJlY29tcGlsZWQgZGVsaXZlcmFibGUgd2l0aCBhIGRpZmZlcmVudCByZWxlYXNlCisvLyEgb2YgRHJpdmVyTGliLCBhIGxpbmtlciBlcnJvciB3aWxsIGJlIHByb2R1Y2VkLCBzdGF0aW5nIHRoYXQKKy8vISAiZHJpdmVybGliX3JlbGVhc2VfeHhfeXl5eXkgaXMgdW5kZWZpbmVkIiBvciBzaW1pbGFyLgorLy8hCisvLyEgVG8gb3ZlcnJpZGUgdGhlIGNoZWNrLCBmb3IgZXhhbXBsZSB3aGVuIHVwZ3JhZGluZyBEcml2ZXJMaWIgYnV0IG5vdCB0aGUKKy8vISBwcmVjb21waWxlZCBkZWxpdmVyYWJsZXMsIG9yIHdoZW4gbWl4aW5nIHByZWNvbXBpbGVkIGRlbGl2ZXJhYmxlcywKKy8vISBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIG1heSAoYXQgb3duIHJpc2spIGRlY2xhcmUgdGhlIG1pc3NpbmcgRHJpdmVyTGliCisvLyEgcmVsZWFzZSB1c2luZyB0aGUgXHJlZiBEUklWRVJMSUJfREVDTEFSRV9SRUxFQVNFKCkgbWFjcm8uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBEUklWRVJMSUJfQVNTRVJUX1JFTEVBU0UoZ3JvdXAsIGJ1aWxkKSBcCisgICAgKGRyaXZlcmxpYl9yZWxlYXNlXyMjZ3JvdXAjI18jI2J1aWxkKQorCisKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgbWFjcm8gc2hhbGwgYmUgY2FsbGVkIG9uY2UgZnJvbSB3aXRoaW4gYSBmdW5jdGlvbiBvZiBhIHByZWNvbXBpbGVkCisvLyEgc29mdHdhcmUgZGVsaXZlcmFibGUgdG8gbG9jayB0aGUgZGVsaXZlcmFibGUgdG8gYSBzcGVjaWZpYyBEcml2ZXJMaWIKKy8vISByZWxlYXNlLiBJdCBpcyBlc3NlbnRpYWwgdGhhdCB0aGUgY2FsbCBpcyBtYWRlIGZyb20gY29kZSB0aGF0IGlzIG5vdAorLy8hIG9wdGltaXplZCBhd2F5LgorLy8hCisvLyEgVGhpcyBtYWNybyBsb2NrcyB0byB0aGUgY3VycmVudCBEcml2ZXJMaWIgcmVsZWFzZSB1c2VkIGF0IGNvbXBpbGUtdGltZS4KKy8vIQorLy8hIElmIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBwcmVjb21waWxlZCBkZWxpdmVyYWJsZSB3aXRoIGEgZGlmZmVyZW50IHJlbGVhc2UKKy8vISBvZiBEcml2ZXJMaWIsIGEgbGlua2VyIGVycm9yIHdpbGwgYmUgcHJvZHVjZWQsIHN0YXRpbmcgdGhhdAorLy8hICJkcml2ZXJsaWJfcmVsZWFzZV94eF95eXl5eSBpcyB1bmRlZmluZWQiIG9yIHNpbWlsYXIuCisvLyEKKy8vISBUbyBvdmVycmlkZSB0aGUgY2hlY2ssIGZvciBleGFtcGxlIHdoZW4gdXBncmFkaW5nIERyaXZlckxpYiBidXQgbm90IHRoZQorLy8hIHByZWNvbXBpbGVkIGRlbGl2ZXJhYmxlcywgb3Igd2hlbiBtaXhpbmcgcHJlY29tcGlsZWQgZGVsaXZlcmFibGVzLAorLy8hIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMgbWF5IChhdCBvd24gcmlzaykgZGVjbGFyZSB0aGUgbWlzc2luZyBEcml2ZXJMaWIKKy8vISByZWxlYXNlIHVzaW5nIHRoZSBccmVmIERSSVZFUkxJQl9ERUNMQVJFX1JFTEVBU0UoKSBtYWNyby4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIERSSVZFUkxJQl9BU1NFUlRfQ1VSUl9SRUxFQVNFKCkgXAorICAgIERSSVZFUkxJQl9BU1NFUlRfUkVMRUFTRSgwLCA0NjU5MykKKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fRFJJVkVSTElCX1JFTEVBU0VfSF9fCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZXZlbnQuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2V2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA5MWE1MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2V2ZW50LmMKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGV2ZW50LmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTAxLTEzIDE2OjU5OjU1ICswMTAwIChUdWUsIDEzIEphbiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQyMzY1CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgRXZlbnQgRmFicmljLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9ldmVudC5oPgorCisvLyBTZWUgZXZlbnQuaCBmb3IgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2V2ZW50LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjY3NDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ldmVudC5oCkBAIC0wLDAgKzEsMjY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgZXZlbnQuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDctMTYgMTI6MTI6MDQgKzAyMDAgKFRodSwgMTYgSnVsIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQxNTEKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgRXZlbnQgSGFuZGxlci4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcGVyaXBoZXJhbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgZXZlbnRfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19FVkVOVF9IX18KKyNkZWZpbmUgX19FVkVOVF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZXZlbnQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29ubmVjdHMgYW4gZXZlbnQgdG8gYW4gZXZlbnQgc3Vic2NyaWJlciB2aWEgRXZlbnQgRmFicmljLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb25uZWN0cyBldmVudCBzb3VyY2VzIHRvIGV2ZW50IHN1YnNjcmliZXJzLgorLy8hCisvLyEgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlYWQgZXZlbnQgc3RhdHVzIGluIHRoaXMgbW9kdWxlIChleGNlcHQgc29mdHdhcmUgZXZlbnRzKS4KKy8vISBFdmVudCBzdGF0dXMgbXVzdCBiZSByZWFkIGluIHRoZSBtb2R1bGUgdGhhdCBjb250YWlucyB0aGUgZXZlbnQgc291cmNlLiBIb3cgYQorLy8hIHNwZWNpZmljIGV2ZW50IHN1YnNjcmliZXIgcmVhY3RzIHRvIGFuIGV2ZW50IGlzIGNvbmZpZ3VyZWQgYW5kIGRvY3VtZW50ZWQgaW4KKy8vISB0aGUgcmVzcGVjdGl2ZSBtb2R1bGVzLgorLy8hCisvLyEgRm9yIGEgZnVsbCBsaXN0IG9mIGNvbmZpZ3VyYWJsZSBhbmQgY29uc3RhbnQgbWFwcGVkIGV2ZW50IHNvdXJjZXMgdG8gZXZlbnQKKy8vISBzdWJzY3JpYmVycyBzZWUgdGhlIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBmb3IKKy8vISA8YSBocmVmPSIuLi9yZWdpc3Rlcl9kZXNjcmlwdGlvbnMvQ1BVX01NQVAvRVZFTlQuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPkV2ZW50IEZhYnJpYzwvYT4uCisvLyEKKy8vISBEZWZpbmVzIGZvciBldmVudCBzdWJzY3JpYmVyIGFyZ3VtZW50IChcYyB1aTMyRXZlbnRTdWJzY3JpYmVyKSBoYXZlIHRoZSBmb3JtYXQ6CisvLyEgLSBcdGlfY29kZXtFVkVOVF9PX1tzdWJzY3JpYmVyX25hbWVdfQorLy8hCisvLyEgRGVmaW5lcyBmb3IgZXZlbnQgc291cmNlIGFyZ3VtZW50IChcYyB1aTMyRXZlbnRTb3VyY2UpIG11c3QgaGF2ZSB0aGUKKy8vISBmb2xsb3dpbmcgZm9ybWF0IHdoZXJlIHZhbGlkIFxjIGV2ZW50X2VudW0gdmFsdWVzIGFyZSBmb3VuZCBpbiB0aGUKKy8vISByZWdpc3RlciBkZXNjcmlwdGlvbiA6CisvLyEgLSBcdGlfY29kZXtFVkVOVF9bc3Vic2NyaWJlcl9uYW1lXV9FVl9bZXZlbnRfZW51bV19CisvLyEKKy8vISBFeGFtcGxlcyBvZiB2YWxpZCBkZWZpbmVzIGZvciBcYyB1aTMyRXZlbnRTb3VyY2U6CisvLyEgLSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9BVVhfVERDX0RPTkUKKy8vISAtIEVWRU5UX1JGQ1NFTDlfRVZfQVVYX0NPTVBBCisvLyEgLSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQU9OX1JUQ19VUEQKKy8vIQorLy8hIFxub3RlIEVhY2ggZXZlbnQgc3Vic2NyaWJlciBjYW4gb25seSByZWNlaXZlIGEgc3ViLXNldCBvZiB0aGUgZXZlbnQgc291cmNlcyEKKy8vIQorLy8hIFxub3RlIFN3aXRjaGluZyB0aGUgZXZlbnQgc291cmNlIGlzIG5vdCBnbGl0Y2ggZnJlZSwgc28gaXQgaXMgaW1wZXJhdGl2ZQorLy8hIHRoYXQgdGhlIHN1YnNjcmliZXIgaXMgZGlzYWJsZWQgZm9yIGludGVycnVwdHMgd2hlbiBzd2l0Y2hpbmcgdGhlIGV2ZW50CisvLyEgc291cmNlLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIG5vdCBkaXNhYmxlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyRXZlbnRTdWJzY3JpYmVyIGlzIHRoZSBcYiBjb25maWd1cmFibGUgZXZlbnQgc3Vic2NyaWJlciB0byByZWNlaXZlIHRoZSBldmVudC4KKy8vISBDbGljayB0aGUgZXZlbnQgc3Vic2NyaWJlciB0byBzZWUgdGhlIGxpc3Qgb2YgdmFsaWQgZXZlbnQgc291cmNlcyBpbiB0aGUKKy8vISByZWdpc3RlciBkZXNjcmlwdGlvbi4KKy8vISAtIEVWRU5UX09fQ1BVSVJRU0VMMzAgIDogU3lzdGVtIENQVSBpbnRlcnJ1cHQgMzAKKy8vISAtIEVWRU5UX09fUkZDU0VMOSAgICAgIDogUkYgQ29yZSBldmVudCA5CisvLyEgLSBFVkVOVF9PX0dQVDBBQ0FQVFNFTCA6IEdQVCAwQSBjYXB0dXJlIGV2ZW50CisvLyEgLSBFVkVOVF9PX0dQVDBCQ0FQVFNFTCA6IEdQVCAwQiBjYXB0dXJlIGV2ZW50CisvLyEgLSBFVkVOVF9PX0dQVDFBQ0FQVFNFTCA6IEdQVCAxQSBjYXB0dXJlIGV2ZW50CisvLyEgLSBFVkVOVF9PX0dQVDFCQ0FQVFNFTCA6IEdQVCAxQiBjYXB0dXJlIGV2ZW50CisvLyEgLSBFVkVOVF9PX0dQVDJBQ0FQVFNFTCA6IEdQVCAyQSBjYXB0dXJlIGV2ZW50CisvLyEgLSBFVkVOVF9PX0dQVDJCQ0FQVFNFTCA6IEdQVCAyQiBjYXB0dXJlIGV2ZW50CisvLyEgLSBFVkVOVF9PX0dQVDNBQ0FQVFNFTCA6IEdQVCAzQSBjYXB0dXJlIGV2ZW50CisvLyEgLSBFVkVOVF9PX0dQVDNCQ0FQVFNFTCA6IEdQVCAzQiBjYXB0dXJlIGV2ZW50CisvLyEgLSBFVkVOVF9PX1VETUFDSDlTU0VMICA6IHVETUEgY2hhbm5lbCA5IHNpbmdsZSByZXF1ZXN0CisvLyEgLSBFVkVOVF9PX1VETUFDSDlCU0VMICA6IHVETUEgY2hhbm5lbCA5IGJ1cnN0IHJlcXVlc3QKKy8vISAtIEVWRU5UX09fVURNQUNIMTBTU0VMIDogdURNQSBjaGFubmVsIDEwIHNpbmdsZSByZXF1ZXN0CisvLyEgLSBFVkVOVF9PX1VETUFDSDEwQlNFTCA6IHVETUEgY2hhbm5lbCAxMCBidXJzdCByZXF1ZXN0CisvLyEgLSBFVkVOVF9PX1VETUFDSDExU1NFTCA6IHVETUEgY2hhbm5lbCAxMSBzaW5nbGUgcmVxdWVzdAorLy8hIC0gRVZFTlRfT19VRE1BQ0gxMUJTRUwgOiB1RE1BIGNoYW5uZWwgMTEgYnVyc3QgcmVxdWVzdAorLy8hIC0gRVZFTlRfT19VRE1BQ0gxMlNTRUwgOiB1RE1BIGNoYW5uZWwgMTIgc2luZ2xlIHJlcXVlc3QKKy8vISAtIEVWRU5UX09fVURNQUNIMTJCU0VMIDogdURNQSBjaGFubmVsIDEyIGJ1cnN0IHJlcXVlc3QKKy8vISAtIEVWRU5UX09fVURNQUNIMTRCU0VMIDogdURNQSBjaGFubmVsIDE0IHNpbmdsZSByZXF1ZXN0CisvLyEgLSBFVkVOVF9PX0FVWFNFTDAgICAgICA6IEFVWAorLy8hIC0gRVZFTlRfT19JMlNTVE1QU0VMMCAgOiBJMlMKKy8vISAtIEVWRU5UX09fRlJaU0VMMCAgICAgIDogRnJlZXplIG1vZHVsZXMgKHNvbWUgbW9kdWxlcyBjYW4gZnJlZXplIG9uIENQVSBIYWx0KQorLy8hIFxwYXJhbSB1aTMyRXZlbnRTb3VyY2UgaXMgdGhlIHNwZWNpZmljIGV2ZW50IHRoYXQgbXVzdCBiZSBhY3RlZCB1cG9uLgorLy8hIC0gRm9ybWF0OiBcdGlfY29kZXtFVkVOVF9bc3Vic2NyaWJlcl9uYW1lXV9FVl9bZXZlbnRfZW51bV19IChzZWUgZXhwbGFuYXRpb24gYWJvdmUpCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorRXZlbnRSZWdpc3Rlcih1aW50MzJfdCB1aTMyRXZlbnRTdWJzY3JpYmVyLCB1aW50MzJfdCB1aTMyRXZlbnRTb3VyY2UpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fQ1BVSVJRU0VMMzAgICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fUkZDU0VMOSAgICAgICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fR1BUMEFDQVBUU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fR1BUMEJDQVBUU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fR1BUMUFDQVBUU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fR1BUMUJDQVBUU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fR1BUMkFDQVBUU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fR1BUMkJDQVBUU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fR1BUM0FDQVBUU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fR1BUM0JDQVBUU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fVURNQUNIOVNTRUwgICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fVURNQUNIOUJTRUwgICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fVURNQUNIMTBTU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fVURNQUNIMTBCU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fVURNQUNIMTFTU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fVURNQUNIMTFCU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fVURNQUNIMTJTU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fVURNQUNIMTJCU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fVURNQUNIMTRCU0VMICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fQVVYU0VMMCAgICAgICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fSTJTU1RNUFNFTDAgICkgfHwKKyAgICAgICAgICAgKCB1aTMyRXZlbnRTdWJzY3JpYmVyID09IEVWRU5UX09fRlJaU0VMMCAgICAgICkgKTsKKworICAgIC8vIE1hcCB0aGUgZXZlbnQgc291cmNlIHRvIHRoZSBldmVudCBzdWJzY3JpYmVyCisgICAgSFdSRUcoRVZFTlRfQkFTRSArIHVpMzJFdmVudFN1YnNjcmliZXIpID0gdWkzMkV2ZW50U291cmNlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHNvZnR3YXJlIGV2ZW50LgorLy8hCisvLyEgU2V0dGluZyBhIHNvZnR3YXJlIGV2ZW50IHRyaWdnZXJzIHRoZSBldmVudCBpZiB0aGUgdmFsdWUgd2FzIDAgYmVmb3JlLgorLy8hCisvLyEgXG5vdGUgVGhlIHNvZnR3YXJlIGV2ZW50IG11c3QgYmUgY2xlYXJlZCBtYW51YWxseSBhZnRlciB0aGUgZXZlbnQgaGFzCisvLyEgdHJpZ2dlcmVkIHRoZSBldmVudCBzdWJzY3JpYmVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJTd0V2ZW50IGlzIHRoZSBzb2Z0d2FyZSBldmVudCBudW1iZXIuCisvLyEgLSAwIDogU1cgRXZlbnQgMAorLy8hIC0gMSA6IFNXIEV2ZW50IDEKKy8vISAtIDIgOiBTVyBFdmVudCAyCisvLyEgLSAzIDogU1cgRXZlbnQgMworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBFdmVudFN3RXZlbnRDbGVhcigpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0V2ZW50U3dFdmVudFNldCh1aW50MzJfdCB1aTMyU3dFdmVudCkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVCggdWkzMlN3RXZlbnQgPD0gMyApOworCisgICAgLy8gRWFjaCBzb2Z0d2FyZSBldmVudCBpcyBieXRlIGFjY2Vzc2libGUKKyAgICBIV1JFR0IoRVZFTlRfQkFTRSArIEVWRU5UX09fU1dFViArIHVpMzJTd0V2ZW50KSA9IDE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyBzb2Z0d2FyZSBldmVudC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyU3dFdmVudCBpcyB0aGUgc29mdHdhcmUgZXZlbnQgbnVtYmVyLgorLy8hIC0gMCA6IFNXIEV2ZW50IDAKKy8vISAtIDEgOiBTVyBFdmVudCAxCisvLyEgLSAyIDogU1cgRXZlbnQgMgorLy8hIC0gMyA6IFNXIEV2ZW50IDMKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitFdmVudFN3RXZlbnRDbGVhcih1aW50MzJfdCB1aTMyU3dFdmVudCkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVCggdWkzMlN3RXZlbnQgPD0gMyApOworCisgICAgLy8gRWFjaCBzb2Z0d2FyZSBldmVudCBpcyBieXRlIGFjY2Vzc2libGUKKyAgICBIV1JFR0IoRVZFTlRfQkFTRSArIEVWRU5UX09fU1dFViArIHVpMzJTd0V2ZW50KSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgc29mdHdhcmUgZXZlbnQgc3RhdHVzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJTd0V2ZW50IGlzIHRoZSBzb2Z0d2FyZSBldmVudCBudW1iZXIuCisvLyEgLSAwIDogU1cgRXZlbnQgMAorLy8hIC0gMSA6IFNXIEV2ZW50IDEKKy8vISAtIDIgOiBTVyBFdmVudCAyCisvLyEgLSAzIDogU1cgRXZlbnQgMworLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGN1cnJlbnQgdmFsdWUgb2YgcmVxdWVzdGVkIHNvZnR3YXJlIGV2ZW50LgorLy8hIC0gMCA6IFNvZnR3YXJlIGV2ZW50IGlzIGRlLWFzc2VydGVkLgorLy8hIC0gMSA6IFNvZnR3YXJlIGV2ZW50IGlzIGFzc2VydGVkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorRXZlbnRTd0V2ZW50R2V0KHVpbnQzMl90IHVpMzJTd0V2ZW50KQoreworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgQVNTRVJUKCB1aTMyU3dFdmVudCA8PSAzICk7CisKKyAgICAvLyBFYWNoIHNvZnR3YXJlIGV2ZW50IGlzIGJ5dGUgYWNjZXNzaWJsZQorICAgIHJldHVybiggSFdSRUdCKEVWRU5UX0JBU0UgKyBFVkVOVF9PX1NXRVYgKyB1aTMyU3dFdmVudCkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fRVZFTlRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2V2ZW50X2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZXZlbnRfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhNzlkNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2V2ZW50X2RvYy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBldmVudF9kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgZXZlbnRfYXBpCisvLyEgQHsKKy8vISBcc2VjdGlvbiBzZWNfZXZlbnQgSW50cm9kdWN0aW9uCisvLyEKKy8vISBUaGUgZXZlbnQgZmFicmljIGNvbnNpc3RzIG9mIHR3byBldmVudCBtb2R1bGVzLiBPbmUgaW4gdGhlIE1DVSBwb3dlciBkb21haW4gKE1DVSBldmVudCBmYWJyaWMpIGFuZAorLy8hIHRoZSBvdGhlciBpbiB0aGUgQU9OIHBvd2VyIGRvbWFpbiAoQU9OIGV2ZW50IGZhYnJpYykuIFRoZSBNQ1UgZXZlbnQgZmFicmljIGlzIG9uZSBvZiB0aGUgc3Vic2NyaWJlcnMKKy8vISB0byB0aGUgQU9OIGV2ZW50IGZhYnJpYy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQU9OIGV2ZW50IGZhYnJpYywgc2VlIFtBT04gZXZlbnQgQVBJXShAcmVmIGFvbmV2ZW50X2FwaSkuCisvLyEKKy8vISBUaGUgTUNVIGV2ZW50IGZhYnJpYyBpcyBhIGNvbWJpbmF0aW9uYWwgcm91dGVyIGJldHdlZW4gZXZlbnQgc291cmNlcyBhbmQgZXZlbnQgc3Vic2NyaWJlcnMuIE1vc3QKKy8vISBldmVudCBzdWJzY3JpYmVycyBoYXZlIHN0YXRpY2FsbHkgcm91dGVkIGV2ZW50IHNvdXJjZXMgYnV0IHNldmVyYWwgZXZlbnQgc3Vic2NyaWJlcnMgaGF2ZQorLy8hIGNvbmZpZ3VyYWJsZSBldmVudCBzb3VyY2VzIHdoaWNoIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIE1DVSBldmVudCBmYWJyaWMgdGhyb3VnaCB0aGlzIEFQSS4gQWx0aG91Z2gKKy8vISBjb25maWd1cmFibGUgb25seSBhIHN1YnNldCBvZiBldmVudCBzb3VyY2VzIGFyZSBhdmFpbGFibGUgdG8gZWFjaCBvZiB0aGUgY29uZmlndXJhYmxlIGV2ZW50IHN1YnNjcmliZXJzLgorLy8hIFRoaXMgaXMgZXhwbGFpbmVkIGluIG1vcmUgZGV0YWlscyBpbiB0aGUgZnVuY3Rpb24gQHJlZiBFdmVudFJlZ2lzdGVyKCkgd2hpY2ggZG9lcyBhbGwgdGhlIGV2ZW50IHJvdXRpbmcKKy8vISBjb25maWd1cmF0aW9uLgorLy8hCisvLyEgTUNVIGV2ZW50IGZhYnJpYyBhbHNvIGNvbnRhaW5zIGZvdXIgc29mdHdhcmUgZXZlbnRzIHdoaWNoIGFsbG93IHNvZnR3YXJlIHRvIHRyaWdnZXIgY2VydGFpbiBldmVudAorLy8hIHN1YnNjcmliZXJzLiBFYWNoIG9mIHRoZSBmb3VyIHNvZnR3YXJlIGV2ZW50cyBpcyBhbiBpbmRlcGVuZGVudCBldmVudCBzb3VyY2Ugd2hpY2ggbXVzdCBiZSBzZXQgYW5kCisvLyEgY2xlYXJlZCBpbiB0aGUgTUNVIGV2ZW50IGZhYnJpYyB0aHJvdWdoIHRoZSBmdW5jdGlvbnM6CisvLyEgLSBAcmVmIEV2ZW50U3dFdmVudFNldCgpCisvLyEgLSBAcmVmIEV2ZW50U3dFdmVudENsZWFyKCkKKy8vISAtIEByZWYgRXZlbnRTd0V2ZW50R2V0KCkKKy8vIQorLy8hIEB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9mbGFzaC5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzI0OTA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZmxhc2guYwpAQCAtMCwwICsxLDc4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGZsYXNoLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTI0IDA4OjE2OjM0ICswMjAwIChUdWUsIDI0IE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2NDQ3CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciBvbiBjaGlwIEZsYXNoLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19jY2ZnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2ZsYXNoLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9jaGlwaW5mby5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgRmxhc2hQb3dlck1vZGVTZXQKKyAgICAjZGVmaW5lIEZsYXNoUG93ZXJNb2RlU2V0ICAgICAgICAgICAgICAgTk9ST01fRmxhc2hQb3dlck1vZGVTZXQKKyAgICAjdW5kZWYgIEZsYXNoUG93ZXJNb2RlR2V0CisgICAgI2RlZmluZSBGbGFzaFBvd2VyTW9kZUdldCAgICAgICAgICAgICAgIE5PUk9NX0ZsYXNoUG93ZXJNb2RlR2V0CisgICAgI3VuZGVmICBGbGFzaFByb3RlY3Rpb25TZXQKKyAgICAjZGVmaW5lIEZsYXNoUHJvdGVjdGlvblNldCAgICAgICAgICAgICAgTk9ST01fRmxhc2hQcm90ZWN0aW9uU2V0CisgICAgI3VuZGVmICBGbGFzaFByb3RlY3Rpb25HZXQKKyAgICAjZGVmaW5lIEZsYXNoUHJvdGVjdGlvbkdldCAgICAgICAgICAgICAgTk9ST01fRmxhc2hQcm90ZWN0aW9uR2V0CisgICAgI3VuZGVmICBGbGFzaFByb3RlY3Rpb25TYXZlCisgICAgI2RlZmluZSBGbGFzaFByb3RlY3Rpb25TYXZlICAgICAgICAgICAgIE5PUk9NX0ZsYXNoUHJvdGVjdGlvblNhdmUKKyAgICAjdW5kZWYgIEZsYXNoU2VjdG9yRXJhc2UKKyAgICAjZGVmaW5lIEZsYXNoU2VjdG9yRXJhc2UgICAgICAgICAgICAgICAgTk9ST01fRmxhc2hTZWN0b3JFcmFzZQorICAgICN1bmRlZiAgRmxhc2hQcm9ncmFtCisgICAgI2RlZmluZSBGbGFzaFByb2dyYW0gICAgICAgICAgICAgICAgICAgIE5PUk9NX0ZsYXNoUHJvZ3JhbQorICAgICN1bmRlZiAgRmxhc2hFZnVzZVJlYWRSb3cKKyAgICAjZGVmaW5lIEZsYXNoRWZ1c2VSZWFkUm93ICAgICAgICAgICAgICAgTk9ST01fRmxhc2hFZnVzZVJlYWRSb3cKKyAgICAjdW5kZWYgIEZsYXNoRGlzYWJsZVNlY3RvcnNGb3JXcml0ZQorICAgICNkZWZpbmUgRmxhc2hEaXNhYmxlU2VjdG9yc0ZvcldyaXRlICAgICBOT1JPTV9GbGFzaERpc2FibGVTZWN0b3JzRm9yV3JpdGUKKyNlbmRpZgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciBhY2Nlc3NlcyB0byB0aGUgc2VjdXJpdHkgY29udHJvbCBpbiB0aGUgY3VzdG9tZXIgY29uZmlndXJhdGlvbgorLy8gYXJlYSBpbiBmbGFzaCB0b3Agc2VjdG9yLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQ0NGR19PRkZTRVRfU0VDVVJJVFkgICBDQ0ZHX09fQkxfQ09ORklHCisjZGVmaW5lIENDRkdfT0ZGU0VUX1NFQ1RfUFJPVCAgQ0NGR19PX0NDRkdfUFJPVF8zMV8wCisjZGVmaW5lIENDRkdfU0laRV9TRUNVUklUWSAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBDQ0ZHX1NJWkVfU0VDVF9QUk9UICAgIDB4MDAwMDAwMDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmF1bHQgdmFsdWVzIGZvciBzZWN1cml0eSBjb250cm9sIGluIGN1c3RvbWVyIGNvbmZpZ3VyYXRpb24gYXJlYSBpbiBmbGFzaAorLy8gdG9wIHNlY3Rvci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitjb25zdCB1aW50OF90IGdfcHVpOENjZmdEZWZhdWx0U2VjW10gPSB7MHhGRiwgMHhGRiwgMHhGRiwgMHhDNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzUsIDB4RkYsIDB4RkYsIDB4RkYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDNSwgMHhDNSwgMHhDNSwgMHhGRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEM1LCAweEM1LCAweEM1LCAweEZGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCit0eXBlZGVmIHVpbnQzMl90ICgqIEZsYXNoUHJnUG9pbnRlcl90KSAodWludDhfdCAqLCB1aW50MzJfdCwgdWludDMyX3QpOworCit0eXBlZGVmIHVpbnQzMl90ICgqIEZsYXNoU2VjdG9yRXJhc2VQb2ludGVyX3QpICh1aW50MzJfdCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGF0aWMgZnVuY3Rpb25zCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHZvaWQgU2V0UmVhZE1vZGUodm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2V0IHBvd2VyIG1vZGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitGbGFzaFBvd2VyTW9kZVNldCh1aW50MzJfdCB1aTMyUG93ZXJNb2RlLCB1aW50MzJfdCB1aTMyQmFua0dyYWNlUGVyaW9kZSwKKyAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJQdW1wR3JhY2VQZXJpb2RlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMyUG93ZXJNb2RlID09IEZMQVNIX1BXUl9BQ1RJVkVfTU9ERSB8fAorICAgICAgICAgICB1aTMyUG93ZXJNb2RlID09IEZMQVNIX1BXUl9PRkZfTU9ERSAgICB8fAorICAgICAgICAgICB1aTMyUG93ZXJNb2RlID09IEZMQVNIX1BXUl9ERUVQX1NUREJZX01PREUpOworICAgIEFTU0VSVCh1aTMyQmFua0dyYWNlUGVyaW9kZSA8PSAweEZGKTsKKyAgICBBU1NFUlQodWkzMlB1bXBHcmFjZVBlcmlvZGUgPD0gMHhGRkZGKTsKKworICAgIHN3aXRjaCh1aTMyUG93ZXJNb2RlKQorICAgIHsKKyAgICBjYXNlIEZMQVNIX1BXUl9BQ1RJVkVfTU9ERToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IGJhbmsgcG93ZXIgbW9kZSB0byBBQ1RJVkUuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZCRkFMTEJBQ0spID0KKyAgICAgICAgICAgIChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GQkZBTExCQUNLKSAmCisgICAgICAgICAgICAgfkZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjBfTSkgfCBGQkZBTExCQUNLX0FDVElWRTsKKworICAgICAgICAvLworICAgICAgICAvLyBTZXQgY2hhcmdlIHB1bXAgcG93ZXIgbW9kZSB0byBBQ1RJVkUgbW9kZS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlBBQzEpID0KKyAgICAgICAgICAgIChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GUEFDMSkgJiB+RkxBU0hfRlBBQzFfUFVNUFBXUl9NKSB8ICgxIDw8IEZMQVNIX0ZQQUMxX1BVTVBQV1JfUyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGTEFTSF9QV1JfT0ZGX01PREU6CisgICAgICAgIC8vCisgICAgICAgIC8vIFNldCBiYW5rIGdyYWNlIHBlcmlvZGUuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZCQUMpID0KKyAgICAgICAgICAgIChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GQkFDKSAmICh+RkxBU0hfRkJBQ19CQUdQX00pKSB8CisgICAgICAgICAgICAoKHVpMzJCYW5rR3JhY2VQZXJpb2RlIDw8IEZMQVNIX0ZCQUNfQkFHUF9TKSAmIEZMQVNIX0ZCQUNfQkFHUF9NKTsKKworICAgICAgICAvLworICAgICAgICAvLyBTZXQgcHVtcCBncmFjZSBwZXJpb2RlLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GUEFDMikgPQorICAgICAgICAgICAgKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZQQUMyKSAmICh+RkxBU0hfRlBBQzJfUEFHUF9NKSkgfAorICAgICAgICAgICAgKCh1aTMyUHVtcEdyYWNlUGVyaW9kZSA8PCBGTEFTSF9GUEFDMl9QQUdQX1MpICYgRkxBU0hfRlBBQzJfUEFHUF9NKTsKKworICAgICAgICAvLworICAgICAgICAvLyBTZXQgYmFuayBwb3dlciBtb2RlIHRvIFNMRUVQLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GQkZBTExCQUNLKSAmPSB+RkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSMF9NOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFNldCBjaGFyZ2UgcHVtcCBwb3dlciBtb2RlIHRvIFNMRUVQIG1vZGUuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZQQUMxKSAmPSB+RkxBU0hfRlBBQzFfUFVNUFBXUl9NOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkxBU0hfUFdSX0RFRVBfU1REQllfTU9ERToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IGJhbmsgZ3JhY2UgcGVyaW9kZS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkJBQykgPQorICAgICAgICAgICAgKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZCQUMpICYgKH5GTEFTSF9GQkFDX0JBR1BfTSkpIHwKKyAgICAgICAgICAgICgodWkzMkJhbmtHcmFjZVBlcmlvZGUgPDwgRkxBU0hfRkJBQ19CQUdQX1MpICYgRkxBU0hfRkJBQ19CQUdQX00pOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFNldCBwdW1wIGdyYWNlIHBlcmlvZGUuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZQQUMyKSA9CisgICAgICAgICAgICAoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlBBQzIpICYgKH5GTEFTSF9GUEFDMl9QQUdQX00pKSB8CisgICAgICAgICAgICAoKHVpMzJQdW1wR3JhY2VQZXJpb2RlIDw8IEZMQVNIX0ZQQUMyX1BBR1BfUykgJiBGTEFTSF9GUEFDMl9QQUdQX00pOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFNldCBiYW5rIHBvd2VyIG1vZGUgdG8gREVFUCBTVEFOREJZIG1vZGUuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZCRkFMTEJBQ0spID0KKyAgICAgICAgICAgIChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GQkZBTExCQUNLKSAmCisgICAgICAgICAgICAgfkZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjBfTSkgfCBGQkZBTExCQUNLX0RFRVBfU1REQlk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IGNoYXJnZSBwdW1wIHBvd2VyIG1vZGUgdG8gU1RBTkRCWSBtb2RlLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GUEFDMSkgfD0gRkxBU0hfRlBBQzFfUFVNUFBXUl9NOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IGN1cnJlbnQgY29uZmlndXJlZCBwb3dlciBtb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0ZsYXNoUG93ZXJNb2RlR2V0KHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMlBvd2VyTW9kZTsKKyAgICB1aW50MzJfdCB1aTMyQmFua1B3ck1vZGU7CisKKyAgICB1aTMyQmFua1B3ck1vZGUgPSBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GQkZBTExCQUNLKSAmCisgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSMF9NOworCisgICAgaWYodWkzMkJhbmtQd3JNb2RlID09IEZCRkFMTEJBQ0tfU0xFRVApCisgICAgeworICAgICAgICB1aTMyUG93ZXJNb2RlID0gRkxBU0hfUFdSX09GRl9NT0RFOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJCYW5rUHdyTW9kZSA9PSBGQkZBTExCQUNLX0RFRVBfU1REQlkpCisgICAgeworICAgICAgICB1aTMyUG93ZXJNb2RlID0gRkxBU0hfUFdSX0RFRVBfU1REQllfTU9ERTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWkzMlBvd2VyTW9kZSA9IEZMQVNIX1BXUl9BQ1RJVkVfTU9ERTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFJldHVybiBwb3dlciBtb2RlLgorICAgIC8vCisgICAgcmV0dXJuKHVpMzJQb3dlck1vZGUpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFNldCBzZWN0b3IgcHJvdGVjdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0ZsYXNoUHJvdGVjdGlvblNldCh1aW50MzJfdCB1aTMyU2VjdG9yQWRkcmVzcywgdWludDMyX3QgdWkzMlByb3RlY3RNb2RlKQoreworICAgIHVpbnQzMl90IHVpMzJTZWN0b3JOdW1iZXI7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMlNlY3RvckFkZHJlc3MgPD0gKEZMQVNITUVNX0JBU0UgKyBGbGFzaFNpemVHZXQoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFzaFNlY3RvclNpemVHZXQoKSkpOworICAgIEFTU0VSVCgodWkzMlNlY3RvckFkZHJlc3MgJiAoRmxhc2hTZWN0b3JTaXplR2V0KCkgLSAxKSkgPT0gMDApOworCisgICAgaWYodWkzMlByb3RlY3RNb2RlID09IEZMQVNIX1dSSVRFX1BST1RFQ1QpCisgICAgeworICAgICAgICB1aTMyU2VjdG9yTnVtYmVyID0gKHVpMzJTZWN0b3JBZGRyZXNzIC0gRkxBU0hNRU1fQkFTRSkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhc2hTZWN0b3JTaXplR2V0KCk7CisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTTV9XUl9FTkEpID0gRlNNX1JFR19XUlRfRU5BQkxFOworCisgICAgICAgIGlmKHVpMzJTZWN0b3JOdW1iZXIgPD0gMzEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTTV9CU0xFMCkgfD0gKDEgPDwgdWkzMlNlY3Rvck51bWJlcik7CisgICAgICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fQlNMUDApIHw9ICgxIDw8IHVpMzJTZWN0b3JOdW1iZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYodWkzMlNlY3Rvck51bWJlciA8PSA2MykKKyAgICAgICAgeworICAgICAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX0JTTEUxKSB8PQorICAgICAgICAgICAgICAgICgxIDw8ICh1aTMyU2VjdG9yTnVtYmVyICYgMHgxRikpOworICAgICAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX0JTTFAxKSB8PQorICAgICAgICAgICAgICAgICgxIDw8ICh1aTMyU2VjdG9yTnVtYmVyICYgMHgxRikpOworICAgICAgICB9CisKKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX1dSX0VOQSkgPSBGU01fUkVHX1dSVF9ESVNBQkxFOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgc2VjdG9yIHByb3RlY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorRmxhc2hQcm90ZWN0aW9uR2V0KHVpbnQzMl90IHVpMzJTZWN0b3JBZGRyZXNzKQoreworICAgIHVpbnQzMl90IHVpMzJTZWN0b3JQcm90ZWN0OworICAgIHVpbnQzMl90IHVpMzJTZWN0b3JOdW1iZXI7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMlNlY3RvckFkZHJlc3MgPD0gKEZMQVNITUVNX0JBU0UgKyBGbGFzaFNpemVHZXQoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFzaFNlY3RvclNpemVHZXQoKSkpOworICAgIEFTU0VSVCgodWkzMlNlY3RvckFkZHJlc3MgJiAoRmxhc2hTZWN0b3JTaXplR2V0KCkgLSAxKSkgPT0gMDApOworCisgICAgdWkzMlNlY3RvclByb3RlY3QgPSBGTEFTSF9OT19QUk9URUNUOworICAgIHVpMzJTZWN0b3JOdW1iZXIgPSAodWkzMlNlY3RvckFkZHJlc3MgLSBGTEFTSE1FTV9CQVNFKSAvIEZsYXNoU2VjdG9yU2l6ZUdldCgpOworCisgICAgaWYodWkzMlNlY3Rvck51bWJlciA8PSAzMSkKKyAgICB7CisgICAgICAgIGlmKChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fQlNMRTApICYgKDEgPDwgdWkzMlNlY3Rvck51bWJlcikpICYmCisgICAgICAgICAgICAgICAgKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTTV9CU0xQMCkgJiAoMSA8PCB1aTMyU2VjdG9yTnVtYmVyKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpMzJTZWN0b3JQcm90ZWN0ID0gRkxBU0hfV1JJVEVfUFJPVEVDVDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKHVpMzJTZWN0b3JOdW1iZXIgPD0gNjMpCisgICAgeworICAgICAgICBpZigoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX0JTTEUxKSAmCisgICAgICAgICAgICAgICAgKDEgPDwgKHVpMzJTZWN0b3JOdW1iZXIgJiAweDFGKSkpICYmCisgICAgICAgICAgICAgICAgKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTTV9CU0xQMSkgJgorICAgICAgICAgICAgICAgICAoMSA8PCAodWkzMlNlY3Rvck51bWJlciAmIDB4MUYpKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpMzJTZWN0b3JQcm90ZWN0ID0gRkxBU0hfV1JJVEVfUFJPVEVDVDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybih1aTMyU2VjdG9yUHJvdGVjdCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2F2ZSBzZWN0b3IgcHJvdGVjdGlvbiB0byBtYWtlIGl0IHBlcm1hbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitGbGFzaFByb3RlY3Rpb25TYXZlKHVpbnQzMl90IHVpMzJTZWN0b3JBZGRyZXNzKQoreworICAgIHVpbnQzMl90IHVpMzJFcnJvclJldHVybjsKKyAgICB1aW50MzJfdCB1aTMyU2VjdG9yTnVtYmVyOworICAgIHVpbnQzMl90IHVpMzJDY2ZnU2VjdG9yQWRkcjsKKyAgICB1aW50MzJfdCB1aTMyUHJvZ0J1ZjsKKworICAgIHVpMzJFcnJvclJldHVybiA9IEZBUElfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMlNlY3RvckFkZHJlc3MgPD0gKEZMQVNITUVNX0JBU0UgKyBGbGFzaFNpemVHZXQoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFzaFNlY3RvclNpemVHZXQoKSkpOworICAgIEFTU0VSVCgodWkzMlNlY3RvckFkZHJlc3MgJiAoRmxhc2hTZWN0b3JTaXplR2V0KCkgLSAxKSkgPT0gMDApOworCisgICAgaWYoRmxhc2hQcm90ZWN0aW9uR2V0KHVpMzJTZWN0b3JBZGRyZXNzKSA9PSBGTEFTSF9XUklURV9QUk9URUNUKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRmluZCBzZWN0b3IgbnVtYmVyIGZvciBzcGVjaWZpZWQgc2VjdG9yLgorICAgICAgICAvLworICAgICAgICB1aTMyU2VjdG9yTnVtYmVyID0gKHVpMzJTZWN0b3JBZGRyZXNzIC0gRkxBU0hNRU1fQkFTRSkgLyBGbGFzaFNlY3RvclNpemVHZXQoKTsKKyAgICAgICAgdWkzMkNjZmdTZWN0b3JBZGRyID0gRkxBU0hNRU1fQkFTRSArIEZsYXNoU2l6ZUdldCgpIC0gRmxhc2hTZWN0b3JTaXplR2V0KCk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWRqdXN0IENDRkcgYWRkcmVzcyB0byB0aGUgMzItYml0IENDRkcgd29yZCBob2xkaW5nIHRoZQorICAgICAgICAvLyBwcm90ZWN0LWJpdCBmb3IgdGhlIHNwZWNpZmllZCBzZWN0b3IuCisgICAgICAgIC8vCisgICAgICAgIHVpMzJDY2ZnU2VjdG9yQWRkciArPSAoKCh1aTMyU2VjdG9yTnVtYmVyID4+IDUpICogNCkgKyBDQ0ZHX09GRlNFVF9TRUNUX1BST1QpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIEZpbmQgdmFsdWUgdG8gcHJvZ3JhbSBieSBzZXR0aW5nIHRoZSBwcm90ZWN0LWJpdCB3aGljaAorICAgICAgICAvLyBjb3JyZXNwb25kcyB0byBzcGVjaWZpZWQgc2VjdG9yIG51bWJlciwgdG8gMC4KKyAgICAgICAgLy8gTGVhdmUgb3RoZXIgcHJvdGVjdC1iaXRzIHVuY2hhbmdlZC4KKyAgICAgICAgLy8KKyAgICAgICAgdWkzMlByb2dCdWYgPSAofigxIDw8ICh1aTMyU2VjdG9yTnVtYmVyICYgMHgxRikpKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoodWludDMyX3QgKil1aTMyQ2NmZ1NlY3RvckFkZHI7CisKKyAgICAgICAgdWkzMkVycm9yUmV0dXJuID0gRmxhc2hQcm9ncmFtKCh1aW50OF90KikmdWkzMlByb2dCdWYsIHVpMzJDY2ZnU2VjdG9yQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDRkdfU0laRV9TRUNUX1BST1QpOworICAgIH0KKworICAgIC8vCisgICAgLy8gUmV0dXJuIHN0YXR1cy4KKyAgICAvLworICAgIHJldHVybih1aTMyRXJyb3JSZXR1cm4pOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEVyYXNlIGEgZmxhc2ggc2VjdG9yCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0ZsYXNoU2VjdG9yRXJhc2UodWludDMyX3QgdWkzMlNlY3RvckFkZHJlc3MpCit7CisgICAgdWludDMyX3QgdWkzMkVycm9yUmV0dXJuOworICAgIEZsYXNoU2VjdG9yRXJhc2VQb2ludGVyX3QgRnVuY1BvaW50ZXI7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMlNlY3RvckFkZHJlc3MgPD0gKEZMQVNITUVNX0JBU0UgKyBGbGFzaFNpemVHZXQoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFzaFNlY3RvclNpemVHZXQoKSkpOworICAgIEFTU0VSVCgodWkzMlNlY3RvckFkZHJlc3MgJiAoRmxhc2hTZWN0b3JTaXplR2V0KCkgLSAxKSkgPT0gMDApOworCisgICAgLy8KKyAgICAvLyBDYWxsIFJPTSBmdW5jdGlvbgorICAgIC8vCisgICAgRnVuY1BvaW50ZXIgPSAodWludDMyX3QgKCopKHVpbnQzMl90KSkgKFJPTV9BUElfRkxBU0hfVEFCTEVbNV0pOworICAgIHVpMzJFcnJvclJldHVybiA9IEZ1bmNQb2ludGVyKHVpMzJTZWN0b3JBZGRyZXNzKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHN0YW5kYnkgaW4gZmxhc2ggYmFuayBzaW5jZSBST00gZnVuY3Rpb24gbWlndGggaGF2ZSBkaXNhYmxlZCBpdAorICAgIC8vCisgICAgSFdSRUdCSVRXKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRywgRkxBU0hfQ0ZHX0RJU19TVEFOREJZX0JJVE4gKSA9IDA7CisKKyAgICAvLworICAgIC8vIFJldHVybiBzdGF0dXMgb2Ygb3BlcmF0aW9uLgorICAgIC8vCisgICAgcmV0dXJuKHVpMzJFcnJvclJldHVybik7CisKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFByb2dyYW1zIHVucHJvdGVjdGVkIG1haW4gYmFuayBmbGFzaCBzZWN0b3JzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0ZsYXNoUHJvZ3JhbSh1aW50OF90ICpwdWk4RGF0YUJ1ZmZlciwgdWludDMyX3QgdWkzMkFkZHJlc3MsIHVpbnQzMl90IHVpMzJDb3VudCkKK3sKKyAgICB1aW50MzJfdCB1aTMyRXJyb3JSZXR1cm47CisgICAgRmxhc2hQcmdQb2ludGVyX3QgRnVuY1BvaW50ZXI7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJBZGRyZXNzICsgdWkzMkNvdW50KSA8PSAoRkxBU0hNRU1fQkFTRSArIEZsYXNoU2l6ZUdldCgpKSk7CisKKyAgICAvLworICAgIC8vIENhbGwgUk9NIGZ1bmN0aW9uCisgICAgLy8KKyAgICBGdW5jUG9pbnRlciA9ICh1aW50MzJfdCAoKikodWludDhfdCAqLCB1aW50MzJfdCwgdWludDMyX3QpKSAoUk9NX0FQSV9GTEFTSF9UQUJMRVs2XSk7CisgICAgdWkzMkVycm9yUmV0dXJuID0gRnVuY1BvaW50ZXIoIHB1aThEYXRhQnVmZmVyLCB1aTMyQWRkcmVzcywgdWkzMkNvdW50KTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHN0YW5kYnkgaW4gZmxhc2ggYmFuayBzaW5jZSBST00gZnVuY3Rpb24gbWlndGggaGF2ZSBkaXNhYmxlZCBpdAorICAgIC8vCisgICAgSFdSRUdCSVRXKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRywgRkxBU0hfQ0ZHX0RJU19TVEFOREJZX0JJVE4gKSA9IDA7CisKKyAgICAvLworICAgIC8vIFJldHVybiBzdGF0dXMgb2Ygb3BlcmF0aW9uLgorICAgIC8vCisgICAgcmV0dXJuKHVpMzJFcnJvclJldHVybik7CisKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBSZWFkcyBlZnVzZSBkYXRhIGZyb20gc3BlY2lmaWVkIHJvdworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2Jvb2wKK0ZsYXNoRWZ1c2VSZWFkUm93KHVpbnQzMl90ICpwdWkzMkVmdXNlRGF0YSwgdWludDMyX3QgdWkzMlJvd0FkZHJlc3MpCit7CisgICAgYm9vbCBiU3RhdHVzOworCisgICAgLy8KKyAgICAvLyBNYWtlIHN1cmUgdGhlIGNsb2NrIGZvciB0aGUgZWZ1c2UgaXMgZW5hYmxlZAorICAgIC8vCisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fQ0ZHKSAmPSB+RkxBU0hfQ0ZHX0RJU19FRlVTRUNMSzsKKworICAgIC8vCisgICAgLy8gU2V0IHRpbWluZyBmb3IgRUZVU0UgcmVhZCBvcGVyYXRpb25zLgorICAgIC8vCisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRUZVU0VSRUFEKSB8PSAoKDUgPDwgRkxBU0hfRUZVU0VSRUFEX1JFQURDTE9DS19TKSAmCisgICAgICAgICAgICBGTEFTSF9FRlVTRVJFQURfUkVBRENMT0NLX00pOworCisgICAgLy8KKyAgICAvLyBDbGVhciBzdGF0dXMgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19FRlVTRUVSUk9SKSA9IDA7CisKKyAgICAvLworICAgIC8vIFNlbGVjdCB0aGUgRnVzZVJPTSBibG9jayAwLgorICAgIC8vCisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRUZVU0VBRERSKSA9IDB4MDAwMDAwMDA7CisKKyAgICAvLworICAgIC8vIFN0YXJ0IHRoZSByZWFkIG9wZXJhdGlvbi4KKyAgICAvLworICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0VGVVNFKSA9CisgICAgICAgIChEVU1QV09SRF9JTlNUUiA8PCBGTEFTSF9FRlVTRV9JTlNUUlVDVElPTl9TKSB8CisgICAgICAgICh1aTMyUm93QWRkcmVzcyAmIEZMQVNIX0VGVVNFX0RVTVBXT1JEX00pOworCisgICAgLy8KKyAgICAvLyBXYWl0IGZvciBvcGVyYXRpb24gdG8gZmluaXNoLgorICAgIC8vCisgICAgd2hpbGUoIShIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19FRlVTRUVSUk9SKSAmIEZMQVNIX0VGVVNFRVJST1JfRE9ORSkpCisgICAgeworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgZXJyb3IgcmVwb3J0ZWQuCisgICAgLy8KKyAgICBpZihIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19FRlVTRUVSUk9SKSAmIEZMQVNIX0VGVVNFRVJST1JfQ09ERV9NKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IGVycm9yIHN0YXR1cy4KKyAgICAgICAgLy8KKyAgICAgICAgYlN0YXR1cyA9IDE7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ2xlYXIgZGF0YS4KKyAgICAgICAgLy8KKyAgICAgICAgKnB1aTMyRWZ1c2VEYXRhID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IG9rIHN0YXR1cy4KKyAgICAgICAgLy8KKyAgICAgICAgYlN0YXR1cyA9IDA7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm8gZXJyb3IuIEdldCBkYXRhIGZyb20gZGF0YSByZWdpc3Rlci4KKyAgICAgICAgLy8KKyAgICAgICAgKnB1aTMyRWZ1c2VEYXRhID0gSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fREFUQUxPV0VSKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIGVmdXNlIGNsb2NrIHRvIGNvbnNlcnZlIHBvd2VyCisgICAgLy8KKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19DRkcpIHw9IEZMQVNIX0NGR19ESVNfRUZVU0VDTEs7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgZGF0YS4KKyAgICAvLworICAgIHJldHVybihiU3RhdHVzKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIERpc2FibGVzIGFsbCBzZWN0b3JzIGZvciBlcmFzZSBhbmQgcHJvZ3JhbW1pbmcgb24gdGhlIGFjdGl2ZSBiYW5rCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorRmxhc2hEaXNhYmxlU2VjdG9yc0ZvcldyaXRlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgZmxhc2ggYmFjayB0byByZWFkIG1vZGUKKyAgICAvLworICAgIFNldFJlYWRNb2RlKCk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgTGV2ZWwgMSBQcm90ZWN0aW9uLgorICAgIC8vCisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkJQUk9UKSA9IEZMQVNIX0ZCUFJPVF9QUk9UTDFESVM7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgYWxsIHNlY3RvcnMgZm9yIGVyYXNlIGFuZCBwcm9ncmFtbWluZy4KKyAgICAvLworICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZCU0UpID0gMHgwMDAwOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgTGV2ZWwgMSBQcm90ZWN0aW9uLgorICAgIC8vCisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkJQUk9UKSA9IDA7CisKKyAgICAvLworICAgIC8vIFByb3RlY3Qgc2VjdG9ycyBmcm9tIHNlY3RvciBlcmFzZS4KKyAgICAvLworICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTTV9XUl9FTkEpID0gRlNNX1JFR19XUlRfRU5BQkxFOworICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTTV9TRUNUT1IxKSA9IDB4RkZGRkZGRkY7CisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX1NFQ1RPUjIpID0gMHhGRkZGRkZGRjsKKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fV1JfRU5BKSA9IEZTTV9SRUdfV1JUX0RJU0FCTEU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGludGVybmFsCisvLyEgVXNlZCB0byBzZXQgZmxhc2ggaW4gcmVhZCBtb2RlLgorLy8hCisvLyEgRmxhc2ggaXMgY29uZmlndXJlZCB3aXRoIHZhbHVlcyBsb2FkZWQgZnJvbSBPVFAgZGVwZW5kZW50IG9uIHRoZSBjdXJyZW50CisvLyEgcmVndWxhdG9yIG1vZGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHZvaWQKK1NldFJlYWRNb2RlKHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMlRyaW1WYWx1ZTsKKyAgICB1aW50MzJfdCB1aTMyVmFsdWU7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgU1RBTkRCWV9NT0RFX1NFTCwgU1RBTkRCWV9QV19TRUwsIERJU19TVEFOREJZLCBESVNfSURMRSwKKyAgICAvLyBWSU5fQVRfWCBhbmQgVklOX0JZX1BBU1MgZm9yIHJlYWQgbW9kZQorICAgIC8vCisgICAgaWYoSFdSRUcoQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1BXUkNUTCkgJgorICAgICAgIEFPTl9TWVNDVExfUFdSQ1RMX0VYVF9SRUdfTU9ERSkKKyAgICB7CisgICAgICAgIC8vIFNlbGVjdCB0cmltIHZhbHVlcyBmb3IgZXh0ZXJuYWwgcmVndWxhdG9yIG1vZGU6CisgICAgICAgIC8vIENvbmZpZ3VyZSBTVEFOREJZX01PREVfU0VMIChPVFAgb2Zmc2V0IDB4MzA4IGJpdCA3KQorICAgICAgICAvLyBDT25maWd1cmUgU1RBTkRCWV9QV19TRUwgICAoT1RQIG9mZnNldCAweDMwOCBiaXQgNjo1KQorICAgICAgICAvLyBNdXN0IGJlIGRvbmUgd2hpbGUgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZCBDT05GSUcuRElTX1NUQU5EQlkgPSAxCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRykgfD0gRkxBU0hfQ0ZHX0RJU19TVEFOREJZOworCisgICAgICAgIHVpMzJUcmltVmFsdWUgPQorICAgICAgICAgICBIV1JFRyhGTEFTSF9DRkdfQkFTRSArIEZDRkcxX09GRlNFVCArIEZDRkcxX09fRkxBU0hfT1RQX0RBVEE0KTsKKworICAgICAgICB1aTMyVmFsdWUgPSAoKHVpMzJUcmltVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0VYVF9SRF9NKSA+PgorICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0VYVF9SRF9TKSA8PAorICAgICAgICAgICAgICAgICAgICBGTEFTSF9DRkdfU1RBTkRCWV9NT0RFX1NFTF9TOworCisgICAgICAgIHVpMzJWYWx1ZSB8PSAoKHVpMzJUcmltVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9QV19TRUxfRVhUX1JEX00pID4+CisgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9FWFRfUkRfUykgPDwKKyAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0NGR19TVEFOREJZX1BXX1NFTF9TOworCisgICAgICAgIC8vIENvbmZpZ3VyZSBESVNfU1RBTkRCWSAoT1RQIG9mZnNldCAweDMwOCBiaXQgNCkuCisgICAgICAgIC8vIENvbmZpZ3VyZSBESVNfSURMRSAgICAoT1RQIG9mZnNldCAweDMwOCBiaXQgMykuCisgICAgICAgIHVpMzJWYWx1ZSB8PSAoKHVpMzJUcmltVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICAoRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19TVEFOREJZX0VYVF9SRF9NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9FWFRfUkRfTSkpID4+CisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfRVhUX1JEX1MpIDw8CisgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9DRkdfRElTX0lETEVfUzsKKworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19DRkcpID0gKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4oRkxBU0hfQ0ZHX1NUQU5EQllfTU9ERV9TRUxfTSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9DRkdfU1RBTkRCWV9QV19TRUxfTSAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0NGR19ESVNfU1RBTkRCWV9NICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfQ0ZHX0RJU19JRExFX00pKSB8IHVpMzJWYWx1ZTsKKworICAgICAgICAvLyBDaGVjayBpZiBzYW1wbGUgYW5kIGhvbGQgZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZC4KKyAgICAgICAgaWYoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fQ0ZHKSAmIEZMQVNIX0NGR19ESVNfSURMRSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdhaXQgZm9yIGRpc2FibGVkIHNhbXBsZSBhbmQgaG9sZCBmdW5jdGlvbmFsaXR5IHRvIGJlIHN0YWJsZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICB3aGlsZSghKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX1NUQVQpICYgRkxBU0hfU1RBVF9TQU1IT0xEX0RJUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDb25maWd1cmUgVklOX0FUX1ggKE9UUCBvZmZzZXQgMHgzMDggYml0cyAyOjApCisgICAgICAgIHVpMzJWYWx1ZSA9ICgodWkzMlRyaW1WYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1ZJTl9BVF9YX0VYVF9SRF9NKSA+PgorICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9WSU5fQVRfWF9FWFRfUkRfUykgPDwKKyAgICAgICAgICAgICAgICAgICAgRkxBU0hfRlNFUVBNUF9WSU5fQVRfWF9TOworCisgICAgICAgIC8vIENvbmZpZ3VyZSBWSU5fQllfUEFTUyB3aGljaCBpcyBkZXBlbmRlbnQgb24gdGhlIFZJTl9BVF9YIHZhbHVlLgorICAgICAgICAvLyBJZiBWSU5fQVRfWCA9IDcgdGhlbiBWSU5fQllfUEFTUyBzaG91bGQgYmUgMCBvdGhlcndpc2UKKyAgICAgICAgLy8gVklOX0JZX1BBU1Mgc2hvdWxkIGJlIDEKKyAgICAgICAgaWYoKCh1aTMyVmFsdWUgJiBGTEFTSF9GU0VRUE1QX1ZJTl9BVF9YX00pID4+CisgICAgICAgICAgICBGTEFTSF9GU0VRUE1QX1ZJTl9BVF9YX1MpICE9IDB4NykKKyAgICAgICAgeworICAgICAgICAgICAgdWkzMlZhbHVlIHw9IEZMQVNIX0ZTRVFQTVBfVklOX0JZX1BBU1M7CisgICAgICAgIH0KKworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GTE9DSykgPSAweEFBQUE7CisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTRVFQTVApID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU0VRUE1QKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfihGTEFTSF9GU0VRUE1QX1ZJTl9CWV9QQVNTX00gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRlNFUVBNUF9WSU5fQVRfWF9NKSkgIHwgdWkzMlZhbHVlOworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GTE9DSykgPSAweDU1QUE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFNlbGVjdCB0cmltIHZhbHVlcyBmb3IgaW50ZXJuYWwgcmVndWxhdG9yIG1vZGU6CisgICAgICAgIC8vIENvbmZpZ3VyZSBTVEFOREJZX01PREVfU0VMIChPVFAgb2Zmc2V0IDB4MzA4IGJpdCAxNSkKKyAgICAgICAgLy8gQ09uZmlndXJlIFNUQU5EQllfUFdfU0VMICAgKE9UUCBvZmZzZXQgMHgzMDggYml0IDE0OjEzKQorICAgICAgICAvLyBNdXN0IGJlIGRvbmUgd2hpbGUgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZCBDT05GSUcuRElTX1NUQU5EQlkgPSAxCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRykgfD0gRkxBU0hfQ0ZHX0RJU19TVEFOREJZOworCisgICAgICAgIHVpMzJUcmltVmFsdWUgPQorICAgICAgICAgICBIV1JFRyhGTEFTSF9DRkdfQkFTRSArIEZDRkcxX09GRlNFVCArIEZDRkcxX09fRkxBU0hfT1RQX0RBVEE0KTsKKworICAgICAgICB1aTMyVmFsdWUgPSAoKHVpMzJUcmltVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0lOVF9SRF9NKSA+PgorICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0lOVF9SRF9TKSA8PAorICAgICAgICAgICAgICAgICAgICBGTEFTSF9DRkdfU1RBTkRCWV9NT0RFX1NFTF9TOworCisgICAgICAgIHVpMzJWYWx1ZSB8PSAoKHVpMzJUcmltVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9QV19TRUxfSU5UX1JEX00pID4+CisgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9JTlRfUkRfUykgPDwKKyAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0NGR19TVEFOREJZX1BXX1NFTF9TOworCisgICAgICAgIC8vIENvbmZpZ3VyZSBESVNfU1RBTkRCWSAoT1RQIG9mZnNldCAweDMwOCBiaXQgMTIpLgorICAgICAgICAvLyBDb25maWd1cmUgRElTX0lETEUgICAgKE9UUCBvZmZzZXQgMHgzMDggYml0IDExKS4KKyAgICAgICAgdWkzMlZhbHVlIHw9ICgodWkzMlRyaW1WYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgIChGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfSU5UX1JEX00gfAorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0lOVF9SRF9NKSkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9JTlRfUkRfUykgPDwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0NGR19ESVNfSURMRV9TOworCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRykgPSAoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fQ0ZHKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfihGTEFTSF9DRkdfU1RBTkRCWV9NT0RFX1NFTF9NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0NGR19TVEFOREJZX1BXX1NFTF9NICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfQ0ZHX0RJU19TVEFOREJZX00gICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9DRkdfRElTX0lETEVfTSkpIHwgdWkzMlZhbHVlOworCisgICAgICAgIC8vIENoZWNrIGlmIHNhbXBsZSBhbmQgaG9sZCBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLgorICAgICAgICBpZihIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19DRkcpICYgRkxBU0hfQ0ZHX0RJU19JRExFKQorICAgICAgICB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2FpdCBmb3IgZGlzYWJsZWQgc2FtcGxlIGFuZCBob2xkIGZ1bmN0aW9uYWxpdHkgdG8gYmUgc3RhYmxlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHdoaWxlKCEoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fU1RBVCkgJiBGTEFTSF9TVEFUX1NBTUhPTERfRElTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbmZpZ3VyZSBWSU5fQVRfWCAoT1RQIG9mZnNldCAweDMwOCBiaXRzIDEwOjgpCisgICAgICAgIHVpMzJWYWx1ZSA9ICgoKHVpMzJUcmltVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfVklOX0FUX1hfSU5UX1JEX00pID4+CisgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9WSU5fQVRfWF9JTlRfUkRfUykgPDwKKyAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRlNFUVBNUF9WSU5fQVRfWF9TKTsKKworICAgICAgICAvLyBDb25maWd1cmUgVklOX0JZX1BBU1Mgd2hpY2ggaXMgZGVwZW5kZW50IG9uIHRoZSBWSU5fQVRfWCB2YWx1ZS4KKyAgICAgICAgLy8gSWYgVklOX0FUX1ggPSA3IHRoZW4gVklOX0JZX1BBU1Mgc2hvdWxkIGJlIDAgb3RoZXJ3aXNlCisgICAgICAgIC8vIFZJTl9CWV9QQVNTIHNob3VsZCBiZSAxCisgICAgICAgIGlmKCgodWkzMlZhbHVlICYgRkxBU0hfRlNFUVBNUF9WSU5fQVRfWF9NKSA+PgorICAgICAgICAgICAgRkxBU0hfRlNFUVBNUF9WSU5fQVRfWF9TKSAhPSAweDcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpMzJWYWx1ZSB8PSBGTEFTSF9GU0VRUE1QX1ZJTl9CWV9QQVNTOworICAgICAgICB9CisKKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkxPQ0spID0gMHhBQUFBOworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU0VRUE1QKSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNFUVBNUCkgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4oRkxBU0hfRlNFUVBNUF9WSU5fQllfUEFTU19NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0ZTRVFQTVBfVklOX0FUX1hfTSkpIHwgdWkzMlZhbHVlOworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GTE9DSykgPSAweDU1QUE7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSEFQSSBGbGFzaCBwcm9ncmFtIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK01lbUJ1c1dya0Fyb3VuZEhhcGlQcm9ncmFtRmxhc2godWludDhfdCAqcHVpOERhdGFCdWZmZXIsIHVpbnQzMl90IHVpMzJBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ291bnQpCit7CisgICAgdWludDMyX3QgdWkzMkVycm9yUmV0dXJuOworICAgIEZsYXNoUHJnUG9pbnRlcl90IEZ1bmNQb2ludGVyOworICAgIHVpbnQzMl90IHVpMzJSb21BZGRyID0gSFdSRUcoUk9NX0hBUElfVEFCTEVfQUREUiArICg1ICogNCkpOworCisgICAgLy8KKyAgICAvLyBDYWxsIFJPTSBmdW5jdGlvbgorICAgIC8vCisgICAgRnVuY1BvaW50ZXIgPSAodWludDMyX3QgKCopKHVpbnQ4X3QgKiwgdWludDMyX3QsIHVpbnQzMl90KSkgKHVpMzJSb21BZGRyKTsKKyAgICB1aTMyRXJyb3JSZXR1cm4gPSBGdW5jUG9pbnRlciggcHVpOERhdGFCdWZmZXIsIHVpMzJBZGRyZXNzLCB1aTMyQ291bnQpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgc3RhbmRieSBpbiBmbGFzaCBiYW5rIHNpbmNlIFJPTSBmdW5jdGlvbiBtaWd0aCBoYXZlIGRpc2FibGVkIGl0CisgICAgLy8KKyAgICBIV1JFR0JJVFcoRkxBU0hfQkFTRSArIEZMQVNIX09fQ0ZHLCBGTEFTSF9DRkdfRElTX1NUQU5EQllfQklUTiApID0gMDsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHN0YXR1cyBvZiBvcGVyYXRpb24uCisgICAgLy8KKyAgICByZXR1cm4odWkzMkVycm9yUmV0dXJuKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhBUEkgRmxhc2ggc2VjdG9yIGVyYXNlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK01lbUJ1c1dya0Fyb3VuZEhhcGlFcmFzZVNlY3Rvcih1aW50MzJfdCB1aTMyQWRkcmVzcykKK3sKKyAgICB1aW50MzJfdCB1aTMyRXJyb3JSZXR1cm47CisKKyAgICBGbGFzaFNlY3RvckVyYXNlUG9pbnRlcl90IEZ1bmNQb2ludGVyOworICAgIHVpbnQzMl90IHVpMzJSb21BZGRyID0gSFdSRUcoUk9NX0hBUElfVEFCTEVfQUREUiArICgzICogNCkpOworCisgICAgLy8KKyAgICAvLyBDYWxsIFJPTSBmdW5jdGlvbgorICAgIC8vCisgICAgRnVuY1BvaW50ZXIgPSAodWludDMyX3QgKCopKHVpbnQzMl90KSkgKHVpMzJSb21BZGRyKTsKKyAgICB1aTMyRXJyb3JSZXR1cm4gPSBGdW5jUG9pbnRlcih1aTMyQWRkcmVzcyk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBzdGFuZGJ5IGluIGZsYXNoIGJhbmsgc2luY2UgUk9NIGZ1bmN0aW9uIG1pZ3RoIGhhdmUgZGlzYWJsZWQgaXQKKyAgICAvLworICAgIEhXUkVHQklUVyhGTEFTSF9CQVNFICsgRkxBU0hfT19DRkcsIEZMQVNIX0NGR19ESVNfU1RBTkRCWV9CSVROICkgPSAwOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gc3RhdHVzIG9mIG9wZXJhdGlvbi4KKyAgICAvLworICAgIHJldHVybih1aTMyRXJyb3JSZXR1cm4pOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZmxhc2guaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2ZsYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiMzMxMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2ZsYXNoLmgKQEAgLTAsMCArMSw4MjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBmbGFzaC5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0yNCAwODowODo1MCArMDIwMCAoVHVlLCAyNCBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjQ0NgorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBGbGFzaCBkcml2ZXIuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHN5c3RlbV9jb250cm9sX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBmbGFzaF9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0ZMQVNIX0hfXworI2RlZmluZSBfX0ZMQVNIX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ZsYXNoLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9zeXNjdGwuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZmNmZzEuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIEZsYXNoUG93ZXJNb2RlU2V0ICAgICAgICAgICAgICAgTk9ST01fRmxhc2hQb3dlck1vZGVTZXQKKyAgICAjZGVmaW5lIEZsYXNoUG93ZXJNb2RlR2V0ICAgICAgICAgICAgICAgTk9ST01fRmxhc2hQb3dlck1vZGVHZXQKKyAgICAjZGVmaW5lIEZsYXNoUHJvdGVjdGlvblNldCAgICAgICAgICAgICAgTk9ST01fRmxhc2hQcm90ZWN0aW9uU2V0CisgICAgI2RlZmluZSBGbGFzaFByb3RlY3Rpb25HZXQgICAgICAgICAgICAgIE5PUk9NX0ZsYXNoUHJvdGVjdGlvbkdldAorICAgICNkZWZpbmUgRmxhc2hQcm90ZWN0aW9uU2F2ZSAgICAgICAgICAgICBOT1JPTV9GbGFzaFByb3RlY3Rpb25TYXZlCisgICAgI2RlZmluZSBGbGFzaFNlY3RvckVyYXNlICAgICAgICAgICAgICAgIE5PUk9NX0ZsYXNoU2VjdG9yRXJhc2UKKyAgICAjZGVmaW5lIEZsYXNoUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgTk9ST01fRmxhc2hQcm9ncmFtCisgICAgI2RlZmluZSBGbGFzaEVmdXNlUmVhZFJvdyAgICAgICAgICAgICAgIE5PUk9NX0ZsYXNoRWZ1c2VSZWFkUm93CisgICAgI2RlZmluZSBGbGFzaERpc2FibGVTZWN0b3JzRm9yV3JpdGUgICAgIE5PUk9NX0ZsYXNoRGlzYWJsZVNlY3RvcnNGb3JXcml0ZQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSB0aGUgQVBJIGZ1bmN0aW9ucworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgRkFQSV9TVEFUVVNfU1VDQ0VTUyAgICAgMHgwMDAwMDAwMCAgLy8gRnVuY3Rpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQorI2RlZmluZSBGQVBJX1NUQVRVU19GU01fQlVTWSAgICAweDAwMDAwMDAxICAvLyBGU00gaXMgQnVzeQorI2RlZmluZSBGQVBJX1NUQVRVU19GU01fUkVBRFkgICAweDAwMDAwMDAyICAvLyBGU00gaXMgUmVhZHkKKyNkZWZpbmUgRkFQSV9TVEFUVVNfSU5DT1JSRUNUX0RBVEFCVUZGRVJfTEVOR1RIIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMyAgLy8gSW5jb3JyZWN0IHBhcmFtZXRlciB2YWx1ZQorI2RlZmluZSBGQVBJX1NUQVRVU19GU01fRVJST1IgICAweDAwMDAwMDA0ICAvLyBPcGVyYXRpb24gZmFpbGVkCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgcGFzc2VkIHRvIEZsYXNoSW50RW5hYmxlKCksIEZsYXNoSW50RGlzYWJsZSgpIGFuZCBGbGFzaEludENsZWFyKCkgYW5kCisvLyByZXR1cm5lZCBmcm9tIEZsYXNoSW50U3RhdHVzKCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBGTEFTSF9JTlRfRlNNX0RPTkUgICAgICAweDAwNDAwMDAwICAvLyBGU00gRG9uZSBJbnRlcnJ1cHQgTWFzaworI2RlZmluZSBGTEFTSF9JTlRfUlYgICAgICAgICAgICAweDAwMDEwMDAwICAvLyBSZWFkIFZlcmlmeSBlcnJvciBJbnRlcnJ1cHQgTWFzaworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHBhc3NlZCB0byBGbGFzaFNldFBvd2VyTW9kZSgpIGFuZCByZXR1cm5lZCBmcm9tIEZsYXNoR2V0UG93ZXJNb2RlKCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBGTEFTSF9QV1JfQUNUSVZFX01PREUgICAweDAwMDAwMDAwCisjZGVmaW5lIEZMQVNIX1BXUl9PRkZfTU9ERSAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfUFdSX0RFRVBfU1REQllfTU9ERSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyBwYXNzZWQgdG8gRmxhc2hTZXRQcm90ZWN0aW9uKCkgYW5kIHJldHVybmVkIGZyb20gRmxhc2hHZXRQcm90ZWN0aW9uKCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBGTEFTSF9OT19QUk9URUNUICAgICAgICAweDAwMDAwMDAwIC8vIFNlY3RvciBub3QgcHJvdGVjdGVkCisjZGVmaW5lIEZMQVNIX1dSSVRFX1BST1RFQ1QgICAgIDB4MDAwMDAwMDEgLy8gU2VjdG9yIGVyYXNlIGFuZCBwcm9ncmFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvdGVjdGVkCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmUgdXNlZCBieSB0aGUgZmxhc2ggcHJvZ3JhbW1pbmcgYW5kIGVyYXNlIGZ1bmN0aW9ucworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQUREUl9PRkZTRVQgICAgICAgICAgICAoMHgxRjgwMDAwMCAtIEZMQVNITUVNX0JBU0UpCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmUgdXNlZCBmb3IgYWNjZXNzIHRvIGZhY3RvcnkgY29uZmlndXJhdGlvbiBhcmVhLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgRkNGRzFfT0ZGU0VUICAgICAgICAgICAweDEwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZSBmb3IgdGhlIGNsb2NrIGZyZXF1ZW5jZXkgaW5wdXQgdG8gdGhlIGZsYXNoIG1vZHVsZSBpbiBudW1iZXIgb2YgTUh6CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBGTEFTSF9NT0RVTEVfQ0xLX0ZSRVEgIDQ4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERlZmluZWQgdmFsdWVzIGZvciBGbGFzaCBTdGF0ZSBNYWNoaW5lIGNvbW1hbmRzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordHlwZWRlZiBlbnVtCit7CisgICAgRkFQSV9QUk9HUkFNX0RBVEEgICAgPSAweDAwMDIsIC8vITwgUHJvZ3JhbSBkYXRhLgorICAgIEZBUElfRVJBU0VfU0VDVE9SICAgID0gMHgwMDA2LCAvLyE8IEVyYXNlIHNlY3Rvci4KKyAgICBGQVBJX0VSQVNFX0JBTksgICAgICA9IDB4MDAwOCwgLy8hPCBFcmFzZSBiYW5rLgorICAgIEZBUElfVkFMSURBVEVfU0VDVE9SID0gMHgwMDBFLCAvLyE8IFZhbGlkYXRlIHNlY3Rvci4KKyAgICBGQVBJX0NMRUFSX1NUQVRVUyAgICA9IDB4MDAxMCwgLy8hPCBDbGVhciBzdGF0dXMuCisgICAgRkFQSV9QUk9HUkFNX1JFU1VNRSAgPSAweDAwMTQsIC8vITwgUHJvZ3JhbSByZXN1bWUuCisgICAgRkFQSV9FUkFTRV9SRVNVTUUgICAgPSAweDAwMTYsIC8vITwgRXJhc2UgcmVzdW1lLgorICAgIEZBUElfQ0xFQVJfTU9SRSAgICAgID0gMHgwMDE4LCAvLyE8IENsZWFyIG1vcmUuCisgICAgRkFQSV9QUk9HUkFNX1NFQ1RPUiAgPSAweDAwMjAsIC8vITwgUHJvZ3JhbSBzZWN0b3IuCisgICAgRkFQSV9FUkFTRV9PVFAgICAgICAgPSAweDAwMzAgIC8vITwgRXJhc2UgT1RQLgorfSB0Rmxhc2hTdGF0ZUNvbW1hbmRzVHlwZTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHZhbHVlcyB3cml0dGVuIHRvIHRoZSBGTEFTSF9PX0ZTTV9XUl9FTkEgcmVnaXN0ZXIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEZTTV9SRUdfV1JUX0VOQUJMRSAgICAgNQorI2RlZmluZSBGU01fUkVHX1dSVF9ESVNBQkxFICAgIDIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBiYW5rIHBvd2VyIG1vZGUgZmllbGQgdGhlIEZMQVNIX09fRkJGQUxMQkFDSyByZWdpc3RlcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgRkJGQUxMQkFDS19TTEVFUCAgICAgICAwCisjZGVmaW5lIEZCRkFMTEJBQ0tfREVFUF9TVERCWSAgMQorI2RlZmluZSBGQkZBTExCQUNLX0FDVElWRSAgICAgIDMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBiYW5rIGdyYWNlIHBlcmlvZGUgYW5kIHB1bXAgZ3JhY2UgcGVyaW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgRkxBU0hfQkFHUCAgICAgICAgICAgICAweDE0CisjZGVmaW5lIEZMQVNIX1BBR1AgICAgICAgICAgICAgMHgxNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyB1c2VkIGJ5IHRoZSBGbGFzaFByb2dyYW1QYXR0ZXJuKCkgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFBBVFRFUk5fQklUUyAgICAgICAgICAgMHgyMCAgLy8gTm8gb2YgYml0cyBpbiBkYXRhIHBhdHRlcm4gdG8gcHJvZ3JhbQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIEZXIGZsYWcgYml0cyBpbiB0aGUgRkxBU0hfT19GV0ZMQUcgcmVnaXN0ZXIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEZXX1dSVF9UUklNTUVEICAgICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyB1c2VkIGJ5IHRoZSBmbGFzaCBwcm9ncmFtbWluZyBmdW5jdGlvbnMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit0eXBlZGVmIHZvbGF0aWxlIHVpbnQ4X3QgdEZ3cFdyaXRlQnl0ZTsKKyNkZWZpbmUgRldQV1JJVEVfQllURV9BRERSRVNTICgodEZ3cFdyaXRlQnl0ZSAqKSgoRkxBU0hfQkFTRSArIEZMQVNIX09fRldQV1JJVEUwKSkpCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmUgZm9yIGVmdXNlIGluc3RydWN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBEVU1QV09SRF9JTlNUUiAgICAgICAgIDB4MDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZSBmb3IgRlNNIGNvbW1hbmQgZXhlY3V0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBGTEFTSF9DTURfRVhFQyAgICAgICAgIDB4MTUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHNpemUgb2YgYSBmbGFzaCBzZWN0b3IgaW4gbnVtYmVyIG9mIGJ5dGVzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgc2l6ZSBvZiBhIGZsYXNoIHNlY3RvciBpbiBudW1iZXIgb2YgYnl0ZXMuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc2l6ZSBvZiBhIGZsYXNoIHNlY3RvciBpbiBudW1iZXIgb2YgYnl0ZXMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitGbGFzaFNlY3RvclNpemVHZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyU2VjdG9yU2l6ZUluS2J5dGU7CisKKyAgICB1aTMyU2VjdG9yU2l6ZUluS2J5dGUgPSAoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkNGR19CMF9TU0laRTApICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRkNGR19CMF9TU0laRTBfQjBfU0VDVF9TSVpFX00pID4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRkNGR19CMF9TU0laRTBfQjBfU0VDVF9TSVpFX1M7CisKKyAgICAvLworICAgIC8vIFJldHVybiBmbGFzaCBzZWN0b3Igc2l6ZSBpbiBudW1iZXIgb2YgYnl0ZXMuCisgICAgLy8KKyAgICByZXR1cm4odWkzMlNlY3RvclNpemVJbktieXRlICogMTAyNCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgc2l6ZSBvZiB0aGUgZmxhc2guCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGZsYXNoIG1haW4gYmFuayBpbiBudW1iZXIgb2YgYnl0ZXMuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGZsYXNoIHNpemUgaW4gbnVtYmVyIG9mIGJ5dGVzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorRmxhc2hTaXplR2V0KHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMk5vT2ZTZWN0b3JzOworCisgICAgLy8KKyAgICAvLyBHZXQgbnVtYmVyIG9mIGZsYXNoIHNlY3RvcnMKKyAgICAvLworICAgIHVpMzJOb09mU2VjdG9ycyA9IChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GTEFTSF9TSVpFKSAmCisgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0ZMQVNIX1NJWkVfU0VDVE9SU19NKSA+PgorICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0ZMQVNIX1NJWkVfU0VDVE9SU19TOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZmxhc2ggc2l6ZSBpbiBudW1iZXIgb2YgYnl0ZXMKKyAgICAvLworICAgIHJldHVybih1aTMyTm9PZlNlY3RvcnMgKiBGbGFzaFNlY3RvclNpemVHZXQoKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBwb3dlciBtb2RlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgc3BlY2lmaWVkIHBvd2VyIG1vZGUuCisvLyEKKy8vISBBbnkgYWNjZXNzIHRvIHRoZSBiYW5rIGNhdXNlcyBhIHJlbG9hZCBvZiB0aGUgc3BlY2lmaWVkIGJhbmsgZ3JhY2UgcGVyaW9kZQorLy8hIGlucHV0IHZhbHVlIGludG8gdGhlIGJhbmsgZG93biBjb3VudGVyLiBBZnRlciB0aGUgbGFzdCBhY2Nlc3MgdG8gdGhlCisvLyEgZmxhc2ggYmFuaywgdGhlIGRvd24gY291bnRlciBkZWxheXMgZnJvbSAwIHRvIDI1NSBwcmVzY2FsZWQgSENMSyBjbG9jaworLy8hIGN5Y2xlcyBiZWZvcmUgcHV0dGluZyB0aGUgYmFuayBpbnRvIG9uZSBvZiB0aGUgZmFsbGJhY2sgcG93ZXIgbW9kZXMgYXMKKy8vISBkZXRlcm1pbmVkIGJ5IFxjIHVpMzJQb3dlck1vZGUuIFRoaXMgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSB3aGVuIHRoZQorLy8hIGZhbGxiYWNrIG1vZGUgaXMgbm90IFxyZWYgRkxBU0hfUFdSX0FDVElWRV9NT0RFLgorLy8hCisvLyEgTm90ZTogVGhlIHByZXNjYWxlZCBjbG9jayB1c2VkIGZvciB0aGUgZG93biBjb3VudGVyIGlzIGEgY2xvY2sgZGl2aWRlZCBieQorLy8hIDE2IGZyb20gaW5wdXQgSENMSy4gVGhlIFxjIHVpMzJCYW5rR3JhY2VQZXJpb2RlIHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmCisvLyEgXGMgdWkzMlBvd2VyTW9kZSBpcyBlcXVhbCB0byBccmVmIEZMQVNIX1BXUl9BQ1RJVkVfTU9ERS4KKy8vISBBbnkgYWNjZXNzIHRvIGZsYXNoIG1lbW9yeSBjYXVzZXMgdGhlIHB1bXAgZ3JhY2UgcGVyaW9kZSBkb3duIGNvdW50ZXIgdG8KKy8vISByZWxvYWQgd2l0aCB2YWx1ZSBvZiBcYyB1aTMyUHVtcEdyYWNlUGVyaW9kZS4gQWZ0ZXIgdGhlIGJhbmsgaGFzIGdvbmUgdG8gc2xlZXAsCisvLyEgdGhlIGRvd24gY291bnRlciBkZWxheXMgdGhpcyBudW1iZXIgb2YgcHJlc2NhbGVkIEhDTEsgY2xvY2sgY3ljbGVzIGJlZm9yZQorLy8hIGVudGVyaW5nIG9uZSBvZiB0aGUgY2hhcmdlIHB1bXAgZmFsbGJhY2sgcG93ZXIgbW9kZXMgYXMgZGV0ZXJtaW5lZCBieQorLy8hIFxjIHVpMzJQb3dlck1vZGUuIFRoZSBwcmVzY2FsZWQgY2xvY2sgdXNlZCBmb3IgdGhlIHB1bXAgZ3JhY2UgcGVyaW9kZSBkb3duCisvLyEgY291bnRlciBpcyBhIGNsb2NrIGRpdmlkZWQgYnkgMTYgZnJvbSBpbnB1dCBIQ0xLLiBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkCisvLyEgaWYgXGMgdWkzMlBvd2VyTW9kZSBpcyBlcXVhbCB0byBccmVmIEZMQVNIX1BXUl9BQ1RJVkVfTU9ERS4KKy8vIQorLy8hIENoYW5naW5nIHRoZSBwb3dlciBtb2RlIG9mIHRoZSBmbGFzaCBtb2R1bGUgbXVzdCBiZSBhIHBhcnQgd2l0aGluIGEKKy8vISBkZXZpY2UgcG93ZXIgbW9kZSB0cmFuc2l0aW9uIHJlcXVpcmluZyBjb25maWd1cmF0aW9uIG9mIG11bHRpcGxlIG1vZHVsZXMuCisvLyEgUmVmZXIgdG8gZG9jdW1lbnRzIGRlc2NyaWJpbmcgdGhlIGRldmljZSBwb3dlciBtb2Rlcy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyUG93ZXJNb2RlIGlzIHRoZSB3YW50ZWQgcG93ZXIgbW9kZS4KKy8vISBUaGUgZGVmaW5lZCBmbGFzaCBwb3dlciBtb2RlcyBhcmU6CisvLyEgLSBccmVmIEZMQVNIX1BXUl9BQ1RJVkVfTU9ERQorLy8hIC0gXHJlZiBGTEFTSF9QV1JfT0ZGX01PREUKKy8vISAtIFxyZWYgRkxBU0hfUFdSX0RFRVBfU1REQllfTU9ERQorLy8hIFxwYXJhbSB1aTMyQmFua0dyYWNlUGVyaW9kZSBpcyB0aGUgc3RhcnRpbmcgY291bnQgdmFsdWUgZm9yIHRoZSBiYW5rIGdyYWNlCisvLyEgcGVyaW9kZSBkb3duIGNvdW50ZXIuCisvLyEgXHBhcmFtIHVpMzJQdW1wR3JhY2VQZXJpb2RlIGlzIHRoZSBzdGFydGluZyBjb3VudCB2YWx1ZSBmb3IgdGhlIHB1bXAgZ3JhY2UKKy8vISBwZXJpb2RlIGRvd24gY291bnRlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEZsYXNoUG93ZXJNb2RlU2V0KHVpbnQzMl90IHVpMzJQb3dlck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQmFua0dyYWNlUGVyaW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJQdW1wR3JhY2VQZXJpb2RlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IGN1cnJlbnQgY29uZmlndXJlZCBwb3dlciBtb2RlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgY3VycmVudCBjb25maWd1cmVkIHBvd2VyIG1vZGUuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgY29uZmlndXJlZCBwb3dlciBtb2RlLgorLy8hIFRoZSBkZWZpbmVkIHBvd2VyIG1vZGVzIGFyZToKKy8vISAtIFxyZWYgRkxBU0hfUFdSX0FDVElWRV9NT0RFCisvLyEgLSBccmVmIEZMQVNIX1BXUl9PRkZfTU9ERQorLy8hIC0gXHJlZiBGTEFTSF9QV1JfREVFUF9TVERCWV9NT0RFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEZsYXNoUG93ZXJNb2RlR2V0KHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgc2VjdG9yIHByb3RlY3Rpb24uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBzcGVjaWZpZWQgcHJvdGVjdGlvbiBvbiBzcGVjaWZpZWQgZmxhc2ggYmFuaworLy8hIHNlY3Rvci4gQSBzZWN0b3IgY2FuIGVpdGhlciBoYXZlIG5vIHByb3RlY3Rpb24gb3IgaGF2ZSB3cml0ZSBwcm90ZWN0aW9uCisvLyEgd2hpY2ggZ3VhcmRzIGZvciBib3RoIHByb2dyYW0gYW5kIGVyYXNlIG9mIHRoYXQgc2VjdG9yLgorLy8hIFNlY3RvciBwcm90ZWN0aW9uIGNhbiBvbmx5IGJlIGNoYW5nZWQgZnJvbSBccmVmIEZMQVNIX05PX1BST1RFQ1QgdG8KKy8vISBccmVmIEZMQVNIX1dSSVRFX1BST1RFQ1QhIEFmdGVyIHdyaXRlIHByb3RlY3RpbmcgYSBzZWN0b3IgdGhpcyBzZWN0b3IgY2FuCisvLyEgb25seSBiZSBzZXQgYmFjayB0byB1bnByb3RlY3RlZCBieSBhIGRldmljZSByZXNldC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyU2VjdG9yQWRkcmVzcyBpcyB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgc2VjdG9yIHRvIHByb3RlY3QuCisvLyEgXHBhcmFtIHVpMzJQcm90ZWN0TW9kZSBpcyB0aGUgZW51bWVyYXRlZCBzZWN0b3IgcHJvdGVjdGlvbiBtb2RlLgorLy8hIC0gXHJlZiBGTEFTSF9OT19QUk9URUNUCisvLyEgLSBccmVmIEZMQVNIX1dSSVRFX1BST1RFQ1QKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEZsYXNoUHJvdGVjdGlvblNldCh1aW50MzJfdCB1aTMyU2VjdG9yQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyUHJvdGVjdE1vZGUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgc2VjdG9yIHByb3RlY3Rpb24uCisvLyEKKy8vISBUaGlzIHJldHVybiB0aGUgcHJvdGVjdGlvbiBtb2RlIGZvciB0aGUgc3BlY2lmaWVkIGZsYXNoIGJhbmsgc2VjdG9yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJTZWN0b3JBZGRyZXNzIGlzIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBkZXNpcmVkIHNlY3Rvci4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc2VjdG9yIHByb3RlY3Rpb246CisvLyEgLSBccmVmIEZMQVNIX05PX1BST1RFQ1QKKy8vISAtIFxyZWYgRkxBU0hfV1JJVEVfUFJPVEVDVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBGbGFzaFByb3RlY3Rpb25HZXQodWludDMyX3QgdWkzMlNlY3RvckFkZHJlc3MpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTYXZlIHNlY3RvciBwcm90ZWN0aW9uIHRvIG1ha2UgaXQgcGVybWFuZW50LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHNhdmUgdGhlIGN1cnJlbnQgcHJvdGVjdGlvbiBtb2RlIGZvciB0aGUgc3BlY2lmaWVkCisvLyEgZmxhc2ggYmFuayBzZWN0b3IuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIG11c3Qgb25seSBiZSBleGVjdXRlZCBmcm9tIFJPTSBvciBTUkFNLgorLy8hCisvLyEgXG5vdGUgQSB3cml0ZSBwcm90ZWN0ZWQgc2VjdG9yIHdpbGwgYmVjb21lIHBlcm1hbmVudCB3cml0ZQorLy8hIHByb3RlY3RlZCEhIEEgZGV2aWNlIHJlc2V0IHdpbGwgbm90IGNoYW5nZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiEKKy8vIQorLy8hIFxwYXJhbSB1aTMyU2VjdG9yQWRkcmVzcyBpcyB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgc2VjdG9yIHRvIGJlIHByb3RlY3RlZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBzZWN0b3IgcHJvdGVjdGlvbjoKKy8vISAtIFxyZWYgRkFQSV9TVEFUVVNfU1VDQ0VTUyA6IFN1Y2Nlc3MuCisvLyEgLSBccmVmIEZBUElfU1RBVFVTX0ZTTV9FUlJPUiA6IEFuIGVyYXNlIGVycm9yIGlzIGVuY291bnRlcmVkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBGbGFzaFByb3RlY3Rpb25TYXZlKHVpbnQzMl90IHVpMzJTZWN0b3JBZGRyZXNzKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2tzIGlmIHRoZSBGbGFzaCBzdGF0ZSBtYWNoaW5lIGhhcyBkZXRlY3RlZCBhbiBlcnJvci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBGbGFzaCBTdGF0ZSBNYWNoaW5lIGluZGljYXRpbmcgaWYKKy8vISBhbiBlcnJvciBpcyBkZXRlY3RlZCBvciBub3QuIFByaW1hcnkgdXNlIGlzIHRvIGNoZWNrIGlmIGFuIEVyYXNlIG9yCisvLyEgUHJvZ3JhbSBvcGVyYXRpb24gaGFzIGZhaWxlZC4KKy8vIQorLy8hIFxub3RlIFBsZWFzZSBub3RlIHRoYXQgY29kZSBjYW4gbm90IGV4ZWN1dGUgaW4gZmxhc2ggd2hpbGUgYW55IHBhcnQgb2YgdGhlIGZsYXNoCisvLyEgaXMgYmVpbmcgcHJvZ3JhbW1lZCBvciBlcmFzZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSBST00gb3IKKy8vISBTUkFNIHdoaWxlIGFueSBwYXJ0IG9mIHRoZSBmbGFzaCBpcyBiZWluZyBwcm9ncmFtbWVkIG9yIGVyYXNlZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgRmxhc2ggc3RhdGUgbWFjaGluZToKKy8vISAtIFxyZWYgRkFQSV9TVEFUVVNfRlNNX0VSUk9SCisvLyEgLSBccmVmIEZBUElfU1RBVFVTX1NVQ0NFU1MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0ZsYXNoQ2hlY2tGc21Gb3JFcnJvcih2b2lkKQoreworICAgIGlmKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZNU1RBVCkgJiBGTEFTSF9GTVNUQVRfQ1NUQVQpCisgICAgeworICAgICAgICByZXR1cm4oRkFQSV9TVEFUVVNfRlNNX0VSUk9SKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuKEZBUElfU1RBVFVTX1NVQ0NFU1MpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2tzIGlmIHRoZSBGbGFzaCBzdGF0ZSBtYWNoaW5lIGlzIHJlYWR5LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIEZsYXNoIFN0YXRlIE1hY2hpbmUgaW5kaWNhdGluZyBpZgorLy8hIGl0IGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBjb21tYW5kIG9yIG5vdC4gUHJpbWFyeSB1c2UgaXMgdG8gY2hlY2sgaWYgYW4KKy8vISBFcmFzZSBvciBQcm9ncmFtIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQuCisvLyEKKy8vISBcbm90ZSBQbGVhc2Ugbm90ZSB0aGF0IGNvZGUgY2FuIG5vdCBleGVjdXRlIGluIGZsYXNoIHdoaWxlIGFueSBwYXJ0IG9mIHRoZSBmbGFzaAorLy8hIGlzIGJlaW5nIHByb2dyYW1tZWQgb3IgZXJhc2VkLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gUk9NIG9yCisvLyEgU1JBTWggd2hpbGUgYW55IHBhcnQgb2YgdGhlIGZsYXNoIGlzIGJlaW5nIHByb2dyYW1tZWQgb3IgZXJhc2VkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHJlYWRpbmVzcyBzdGF0dXMgb2YgRmxhc2ggc3RhdGUgbWFjaGluZToKKy8vISAtIFxyZWYgRkFQSV9TVEFUVVNfRlNNX1JFQURZCisvLyEgLSBccmVmIEZBUElfU1RBVFVTX0ZTTV9CVVNZCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitGbGFzaENoZWNrRnNtRm9yUmVhZHkodm9pZCkKK3sKKyAgICBpZihIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19TVEFUKSAmIEZMQVNIX1NUQVRfQlVTWSkKKyAgICB7CisgICAgICAgIHJldHVybihGQVBJX1NUQVRVU19GU01fQlVTWSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybihGQVBJX1NUQVRVU19GU01fUkVBRFkpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgZmxhc2ggaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhY3R1YWwgcmVnaXN0ZXJpbmcgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLiBUaGlzCisvLyEgZnVuY3Rpb24gZW5hYmxlcyB0aGUgZ2xvYmFsIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXI7IHNwZWNpZmljCisvLyEgRkxBU0ggaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgdmlhIFxyZWYgRmxhc2hJbnRFbmFibGUoKS4gSXQgaXMgdGhlIGludGVycnVwdAorLy8hIGhhbmRsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZS4KKy8vIQorLy8hIFxwYXJhbSBwZm5IYW5kbGVyIGlzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGZsYXNoCisvLyEgaW50ZXJydXB0IG9jY3Vycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitGbGFzaEludFJlZ2lzdGVyKHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSkKK3sKKyAgICAvLworICAgIC8vIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFJlZ2lzdGVyKElOVF9GTEFTSCwgcGZuSGFuZGxlcik7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgZmxhc2ggaW50ZXJydXB0LgorICAgIC8vCisgICAgSW50RW5hYmxlKElOVF9GTEFTSCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIGZsYXNoIGludGVycnVwdC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgYWN0dWFsIHVucmVnaXN0ZXJpbmcgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLiBJdAorLy8hIGNsZWFycyB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhIEZMQVNIIGludGVycnVwdCBvY2N1cnMuIFRoaXMKKy8vISBmdW5jdGlvbiBhbHNvIG1hc2tzIG9mZiB0aGUgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBzbyB0aGF0CisvLyEgdGhlIGludGVycnVwdCBoYW5kbGVyIG5vIGxvbmdlciBpcyBjYWxsZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorRmxhc2hJbnRVbnJlZ2lzdGVyKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSW50RGlzYWJsZShJTlRfRkxBU0gpOworCisgICAgLy8KKyAgICAvLyBVbnJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFVucmVnaXN0ZXIoSU5UX0ZMQVNIKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBmbGFzaCBjb250cm9sbGVyIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBmbGFzaCBjb250cm9sbGVyIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyB0aGUgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgRkxBU0hfSU5UX0ZTTV9ET05FIDogRlNNIERvbmUgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBGTEFTSF9JTlRfUlYgICAgICAgOiBSZWFkIHZlcmlmeSBlcnJvciBpbnRlcnJ1cHQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorRmxhc2hJbnRFbmFibGUodWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTTV9XUl9FTkEpID0gRlNNX1JFR19XUlRfRU5BQkxFOworICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTTV9TVF9NQUNISU5FKSB8PSB1aTMySW50RmxhZ3M7CisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX1dSX0VOQSkgPSBGU01fUkVHX1dSVF9ESVNBQkxFOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBpbmRpdmlkdWFsIGZsYXNoIGNvbnRyb2xsZXIgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBmbGFzaCBjb250cm9sbGVyIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyB0aGUgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGRpc2FibGVkLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEZMQVNIX0lOVF9GU01fRE9ORSA6IEZTTSBEb25lIGludGVycnVwdC4KKy8vISAtIFxyZWYgRkxBU0hfSU5UX1JWICAgICAgIDogUmVhZCB2ZXJpZnkgZXJyb3IgaW50ZXJydXB0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0ZsYXNoSW50RGlzYWJsZSh1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX1dSX0VOQSkgPSBGU01fUkVHX1dSVF9FTkFCTEU7CisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX1NUX01BQ0hJTkUpICY9IH51aTMySW50RmxhZ3M7CisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX1dSX0VOQSkgPSBGU01fUkVHX1dSVF9ESVNBQkxFOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGludGVycnVwdCBzdGF0dXMgZm9yIHRoZSBGbGFzaC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzIGFzIHZhbHVlcyBkZXNjcmliZWQgaW4KKy8vISBccmVmIEZsYXNoSW50RW5hYmxlKCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitGbGFzaEludFN0YXR1cyh2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJJbnRGbGFnczsKKworICAgIHVpMzJJbnRGbGFncyA9IDA7CisKKyAgICAvLworICAgIC8vIENoZWNrIGlmIEZTTV9ET05FIGludGVycnVwdCBzdGF0dXMgaXMgc2V0LgorICAgIC8vCisgICAgaWYoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkVEQUNTVEFUKSAmIEZMQVNIX0ZFREFDU1RBVF9GU01fRE9ORSkKKyAgICB7CisgICAgICAgIHVpMzJJbnRGbGFncyA9IEZMQVNIX0lOVF9GU01fRE9ORTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENoZWNrIGlmIFJWRl9JTlQgaW50ZXJydXB0IHN0YXR1cyBpcyBzZXQuCisgICAgLy8KKyAgICBpZihIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GRURBQ1NUQVQpICYgRkxBU0hfRkVEQUNTVEFUX1JWRl9JTlQpCisgICAgeworICAgICAgICB1aTMySW50RmxhZ3MgfD0gRkxBU0hfSU5UX1JWOworICAgIH0KKworICAgIHJldHVybih1aTMySW50RmxhZ3MpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhcnMgZmxhc2ggY29udHJvbGxlciBpbnRlcnJ1cHQgc291cmNlLgorLy8hCisvLyEgVGhlIGZsYXNoIGNvbnRyb2xsZXIgaW50ZXJydXB0IHNvdXJjZSBpcyBjbGVhcmVkLCBzbyB0aGF0IGl0IG5vIGxvbmdlcgorLy8hIGFzc2VydHMuIFRoaXMgbXVzdCBiZSBkb25lIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBrZWVwIGl0IGZyb20gYmVpbmcKKy8vISBjYWxsZWQgYWdhaW4gaW1tZWRpYXRlbHkgdXBvbiBleGl0LgorLy8hCisvLyEgXG5vdGUgRHVlIHRvIHdyaXRlIGJ1ZmZlcnMgYW5kIHN5bmNocm9uaXplcnMgaW4gdGhlIHN5c3RlbSBpdCBtYXkgdGFrZSBzZXZlcmFsCisvLyEgY2xvY2sgY3ljbGVzIGZyb20gYSByZWdpc3RlciB3cml0ZSBjbGVhcmluZyBhbiBldmVudCBpbiBhIG1vZHVsZSBhbmQgdW50aWwgdGhlCisvLyEgZXZlbnQgaXMgYWN0dWFsbHkgY2xlYXJlZCBpbiB0aGUgTlZJQyBvZiB0aGUgc3lzdGVtIENQVS4gSXQgaXMgcmVjb21tZW5kZWQgdG8KKy8vISBjbGVhciB0aGUgZXZlbnQgc291cmNlIGVhcmx5IGluIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpIHRvIGFsbG93CisvLyEgdGhlIGV2ZW50IGNsZWFyIHRvIHByb3BhZ2F0ZSB0byB0aGUgTlZJQyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUi4KKy8vISBBdCB0aGUgc2FtZSB0aW1lLCBhbiBlYXJseSBldmVudCBjbGVhciBhbGxvd3MgbmV3IGV2ZW50cyBvZiB0aGUgc2FtZSB0eXBlIHRvIGJlCisvLyEgcGVuZGVkIGluc3RlYWQgb2YgaWdub3JlZCBpZiB0aGUgZXZlbnQgaXMgY2xlYXJlZCBsYXRlciBpbiB0aGUgSVNSLgorLy8hIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcHJvZ3JhbW1lciB0byBtYWtlIHN1cmUgdGhhdCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkCisvLyEgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IgdG8gYXZvaWQgZmFsc2UgcmUtdHJpZ2dlcmluZyBvZiB0aGUgY2xlYXJlZCBldmVudC4KKy8vISBBIHNpbXBsZSwgYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IG9wdGltYWwsIHdheSBvZiBjbGVhcmluZyBhbiBldmVudCBiZWZvcmUKKy8vISByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIGlzOgorLy8hIC0jIFdyaXRlIHRvIGNsZWFyIGV2ZW50IChpbnRlcnJ1cHQgc291cmNlKS4gKGJ1ZmZlcmVkIHdyaXRlKQorLy8hIC0jIER1bW15IHJlYWQgZnJvbSB0aGUgZXZlbnQgc291cmNlIG1vZHVsZS4gKG1ha2luZyBzdXJlIHRoZSB3cml0ZSBoYXMgcHJvcGFnYXRlZCkKKy8vISAtIyBXYWl0IHR3byBzeXN0ZW0gQ1BVIGNsb2NrIGN5Y2xlcyAodXNlciBjb2RlIG9yIHR3byBOT1BzKS4gKGFsbG93aW5nIGNsZWFyZWQgZXZlbnQgdG8gcHJvcGFnYXRlIHRocm91Z2ggYW55IHN5bmNocm9uaXplcnMpCisvLyEKKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgY2xlYXJlZC4KKy8vISBDYW4gYmUgYW55IG9mOgorLy8hIC0gXHJlZiBGTEFTSF9JTlRfRlNNX0RPTkUKKy8vISAtIFxyZWYgRkxBU0hfSU5UX1JWCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorRmxhc2hJbnRDbGVhcih1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgdWludDMyX3QgdWkzMlRlbXBWYWw7CisKKyAgICB1aTMyVGVtcFZhbCA9IDA7CisKKyAgICBpZih1aTMySW50RmxhZ3MgJiBGTEFTSF9JTlRfRlNNX0RPTkUpCisgICAgeworICAgICAgICB1aTMyVGVtcFZhbCA9IEZMQVNIX0ZFREFDU1RBVF9GU01fRE9ORTsKKyAgICB9CisKKyAgICBpZih1aTMySW50RmxhZ3MgJiBGTEFTSF9JTlRfUlYpCisgICAgeworICAgICAgICB1aTMyVGVtcFZhbCB8PSBGTEFTSF9GRURBQ1NUQVRfUlZGX0lOVDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSBmbGFzaCBpbnRlcnJ1cHQgc291cmNlLgorICAgIC8vCisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkVEQUNTVEFUKSA9IHVpMzJUZW1wVmFsOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFcmFzZSBhIGZsYXNoIHNlY3Rvci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBlcmFzZSB0aGUgc3BlY2lmaWVkIGZsYXNoIHNlY3Rvci4gVGhlIGZ1bmN0aW9uIHdpbGwKKy8vISBub3QgcmV0dXJuIHVudGlsIHRoZSBmbGFzaCBzZWN0b3IgaGFzIGJlZW4gZXJhc2VkIG9yIGFuIGVycm9yIGNvbmRpdGlvbgorLy8hIG9jY3VycmVkLiBJZiBmbGFzaCB0b3Agc2VjdG9yIGlzIGVyYXNlZCB0aGUgZnVuY3Rpb24gd2lsbCBwcm9ncmFtIHRoZQorLy8hIHRoZSBkZXZpY2Ugc2VjdXJpdHkgZGF0YSBieXRlcyB3aXRoIGRlZmF1bHQgdmFsdWVzLiBUaGUgZGV2aWNlIHNlY3VyaXR5CisvLyEgZGF0YSBsb2NhdGVkIGluIHRoZSBjdXN0b21lciBjb25maWd1cmF0aW9uIGFyZWEgb2YgdGhlIGZsYXNoIHRvcCBzZWN0b3IsCisvLyEgbXVzdCBoYXZlIHZhbGlkIHZhbHVlcyBhdCBhbGwgdGltZXMuIFRoZXNlIHZhbHVlcyBhZmZlY3QgdGhlIGNvbmZpZ3VyYXRpb24KKy8vISBvZiB0aGUgZGV2aWNlIGR1cmluZyBib290LgorLy8hCisvLyEgXG5vdGUgUGxlYXNlIG5vdGUgdGhhdCBjb2RlIGNhbiBub3QgZXhlY3V0ZSBpbiBmbGFzaCB3aGlsZSBhbnkgcGFydCBvZiB0aGUgZmxhc2gKKy8vISBpcyBiZWluZyBwcm9ncmFtbWVkIG9yIGVyYXNlZC4gVGhpcyBmdW5jdGlvbiBtdXN0IG9ubHkgYmUgZXhlY3V0ZWQgZnJvbSBST00KKy8vISBvciBTUkFNLgorLy8hCisvLyEgXHBhcmFtIHVpMzJTZWN0b3JBZGRyZXNzIGlzIHRoZSBzdGFydGluZyBhZGRyZXNzIGluIGZsYXNoIG9mIHRoZSBzZWN0b3IgdG8gYmUKKy8vISBlcmFzZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgc2VjdG9yIGVyYXNlOgorLy8hIC0gXHJlZiBGQVBJX1NUQVRVU19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgOiBTdWNjZXNzLgorLy8hIC0gXHJlZiBGQVBJX1NUQVRVU19JTkNPUlJFQ1RfREFUQUJVRkZFUl9MRU5HVEggOiBJbnZhbGlkIGFyZ3VtZW50LgorLy8hIC0gXHJlZiBGQVBJX1NUQVRVU19GU01fRVJST1IgICAgICAgICAgICAgICAgICAgOiBBIHByb2dyYW1taW5nIGVycm9yIGlzIGVuY291bnRlcmVkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBGbGFzaFNlY3RvckVyYXNlKHVpbnQzMl90IHVpMzJTZWN0b3JBZGRyZXNzKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBQcm9ncmFtcyB1bnByb3RlY3RlZCBtYWluIGJhbmsgZmxhc2ggc2VjdG9ycy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBwcm9ncmFtIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgaW50byB0aGUgb24tY2hpcCBmbGFzaC4KKy8vISBQcm9ncmFtbWluZyBlYWNoIGxvY2F0aW9uIGNvbnNpc3RzIG9mIHRoZSByZXN1bHQgb2YgYW4gQU5EIG9wZXJhdGlvbgorLy8hIG9mIHRoZSBuZXcgZGF0YSBhbmQgdGhlIGV4aXN0aW5nIGRhdGE7IGluIG90aGVyIHdvcmRzIGJpdHMgdGhhdCBjb250YWluCisvLyEgMSBjYW4gcmVtYWluIDEgb3IgYmUgY2hhbmdlZCB0byAwLCBidXQgYml0cyB0aGF0IGFyZSAwIGNhbm5vdCBiZSBjaGFuZ2VkCisvLyEgdG8gMS4gIFRoZXJlZm9yZSwgYSBieXRlIGNhbiBiZSBwcm9ncmFtbWVkIG11bHRpcGxlIHRpbWVzIGFzIGxvbmcgYXMgdGhlc2UKKy8vISBydWxlcyBhcmUgZm9sbG93ZWQ7IGlmIGEgcHJvZ3JhbSBvcGVyYXRpb24gYXR0ZW1wdHMgdG8gY2hhbmdlIGEgMCBiaXQgdG8KKy8vISBhIDEgYml0LCB0aGF0IGJpdCB3aWxsIG5vdCBoYXZlIGl0cyB2YWx1ZSBjaGFuZ2VkLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCByZXR1cm4gdW50aWwgdGhlIGRhdGEgaGFzIGJlZW4gcHJvZ3JhbW1lZCBvciBhbgorLy8hIHByb2dyYW1taW5nIGVycm9yIGhhcyBvY2N1cnJlZC4KKy8vIQorLy8hIFxub3RlIFBsZWFzZSBub3RlIHRoYXQgY29kZSBjYW4gbm90IGV4ZWN1dGUgaW4gZmxhc2ggd2hpbGUgYW55IHBhcnQgb2YgdGhlIGZsYXNoCisvLyEgaXMgYmVpbmcgcHJvZ3JhbW1lZCBvciBlcmFzZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGV4ZWN1dGVkIGZyb20gUk9NCisvLyEgb3IgU1JBTS4KKy8vIQorLy8hIFRoZSBcYyBwdWk4RGF0YUJ1ZmZlciBwb2ludGVyIGNhbiBub3QgcG9pbnQgdG8gZmxhc2guCisvLyEKKy8vISBccGFyYW0gcHVpOERhdGFCdWZmZXIgaXMgYSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHByb2dyYW1tZWQuCisvLyEgXHBhcmFtIHVpMzJBZGRyZXNzIGlzIHRoZSBzdGFydGluZyBhZGRyZXNzIGluIGZsYXNoIHRvIGJlIHByb2dyYW1tZWQuCisvLyEgXHBhcmFtIHVpMzJDb3VudCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHByb2dyYW1tZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIHRoZSBmbGFzaCBwcm9ncmFtbWluZzoKKy8vISAtIFxyZWYgRkFQSV9TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIDogU3VjY2Vzcy4KKy8vISAtIFxyZWYgRkFQSV9TVEFUVVNfSU5DT1JSRUNUX0RBVEFCVUZGRVJfTEVOR1RIIDogVG9vIG1hbnkgYnl0ZXMgd2VyZSByZXF1ZXN0ZWQuCisvLyEgLSBccmVmIEZBUElfU1RBVFVTX0ZTTV9FUlJPUiAgICAgICAgICAgICAgICAgICA6IEEgcHJvZ3JhbW1pbmcgZXJyb3IgaXMgZW5jb3VudGVyZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEZsYXNoUHJvZ3JhbSh1aW50OF90ICpwdWk4RGF0YUJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkFkZHJlc3MsIHVpbnQzMl90IHVpMzJDb3VudCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlYWRzIGVmdXNlIGRhdGEgZnJvbSBzcGVjaWZpZWQgcm93LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgb25lIGVmdXNlIHJvdy4KKy8vISBJdCBpcyBhc3N1bWVkIHRoYXQgYW55IHByZXZpb3VzIGVmdXNlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQuCisvLyEKKy8vISBccGFyYW0gcHVpMzJFZnVzZURhdGEgaXMgcG9pbnRlciB0byB2YXJpYWJsZSB0byBiZSB1cGRhdGVkIHdpdGggZWZ1c2UgZGF0YS4KKy8vISBccGFyYW0gdWkzMlJvd0FkZHJlc3MgaXMgdGhlIGVmdXNlIHJvdyBudW1iZXIgdG8gYmUgcmVhZC4gRmlyc3Qgcm93IGlzIHJvdworLy8hIG51bWJlciAwLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGVmdXNlIHJlYWQgb3BlcmF0aW9uLgorLy8hIC0gXGMgZmFsc2UgOiBPSyBzdGF0dXMuCisvLyEgLSBcYyB0cnVlICA6IEVycm9yIHN0YXR1cworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBib29sIEZsYXNoRWZ1c2VSZWFkUm93KHVpbnQzMl90ICpwdWkzMkVmdXNlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJSb3dBZGRyZXNzKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgYWxsIHNlY3RvcnMgZm9yIGVyYXNlIGFuZCBwcm9ncmFtbWluZyBvbiB0aGUgYWN0aXZlIGJhbmsuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIGFsbCBzZWN0b3JzIGZvciBlcmFzZSBhbmQgcHJvZ3JhbW1pbmcgb24gdGhlIGFjdGl2ZQorLy8hIGJhbmsgYW5kIGVuYWJsZXMgdGhlIElkbGUgUmVhZGluZyBQb3dlciByZWR1Y3Rpb24gbW9kZSBpZiBubyBsb3cgcG93ZXIKKy8vISBtb2RlIGlzIGNvbmZpZ3VyZWQuIEZ1cnRoZXJtb3JlLCBhbiBhZGRpdGlvbmFsIGxldmVsIG9mIHByb3RlY3Rpb24gZnJvbQorLy8hIGVyYXNlIGlzIGVuYWJsZWQuCisvLyEKKy8vISBcbm90ZSBQbGVhc2Ugbm90ZSB0aGF0IGNvZGUgY2FuIG5vdCBleGVjdXRlIGluIGZsYXNoIHdoaWxlIGFueSBwYXJ0IG9mIHRoZSBmbGFzaAorLy8hIGlzIGJlaW5nIHByb2dyYW1tZWQgb3IgZXJhc2VkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgRmxhc2hEaXNhYmxlU2VjdG9yc0ZvcldyaXRlKHZvaWQpOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0ZsYXNoUG93ZXJNb2RlU2V0CisgICAgICAgICN1bmRlZiAgRmxhc2hQb3dlck1vZGVTZXQKKyAgICAgICAgI2RlZmluZSBGbGFzaFBvd2VyTW9kZVNldCAgICAgICAgICAgICAgIFJPTV9GbGFzaFBvd2VyTW9kZVNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fRmxhc2hQb3dlck1vZGVHZXQKKyAgICAgICAgI3VuZGVmICBGbGFzaFBvd2VyTW9kZUdldAorICAgICAgICAjZGVmaW5lIEZsYXNoUG93ZXJNb2RlR2V0ICAgICAgICAgICAgICAgUk9NX0ZsYXNoUG93ZXJNb2RlR2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9GbGFzaFByb3RlY3Rpb25TZXQKKyAgICAgICAgI3VuZGVmICBGbGFzaFByb3RlY3Rpb25TZXQKKyAgICAgICAgI2RlZmluZSBGbGFzaFByb3RlY3Rpb25TZXQgICAgICAgICAgICAgIFJPTV9GbGFzaFByb3RlY3Rpb25TZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ZsYXNoUHJvdGVjdGlvbkdldAorICAgICAgICAjdW5kZWYgIEZsYXNoUHJvdGVjdGlvbkdldAorICAgICAgICAjZGVmaW5lIEZsYXNoUHJvdGVjdGlvbkdldCAgICAgICAgICAgICAgUk9NX0ZsYXNoUHJvdGVjdGlvbkdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fRmxhc2hQcm90ZWN0aW9uU2F2ZQorICAgICAgICAjdW5kZWYgIEZsYXNoUHJvdGVjdGlvblNhdmUKKyAgICAgICAgI2RlZmluZSBGbGFzaFByb3RlY3Rpb25TYXZlICAgICAgICAgICAgIFJPTV9GbGFzaFByb3RlY3Rpb25TYXZlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9GbGFzaFNlY3RvckVyYXNlCisgICAgICAgICN1bmRlZiAgRmxhc2hTZWN0b3JFcmFzZQorICAgICAgICAjZGVmaW5lIEZsYXNoU2VjdG9yRXJhc2UgICAgICAgICAgICAgICAgUk9NX0ZsYXNoU2VjdG9yRXJhc2UKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ZsYXNoUHJvZ3JhbQorICAgICAgICAjdW5kZWYgIEZsYXNoUHJvZ3JhbQorICAgICAgICAjZGVmaW5lIEZsYXNoUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgUk9NX0ZsYXNoUHJvZ3JhbQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fRmxhc2hFZnVzZVJlYWRSb3cKKyAgICAgICAgI3VuZGVmICBGbGFzaEVmdXNlUmVhZFJvdworICAgICAgICAjZGVmaW5lIEZsYXNoRWZ1c2VSZWFkUm93ICAgICAgICAgICAgICAgUk9NX0ZsYXNoRWZ1c2VSZWFkUm93CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9GbGFzaERpc2FibGVTZWN0b3JzRm9yV3JpdGUKKyAgICAgICAgI3VuZGVmICBGbGFzaERpc2FibGVTZWN0b3JzRm9yV3JpdGUKKyAgICAgICAgI2RlZmluZSBGbGFzaERpc2FibGVTZWN0b3JzRm9yV3JpdGUgICAgIFJPTV9GbGFzaERpc2FibGVTZWN0b3JzRm9yV3JpdGUKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fRkxBU0hfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dwaW8uYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGY2NzBlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3Bpby5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBncGlvLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTAxLTEzIDE2OjU5OjU1ICswMTAwIChUdWUsIDEzIEphbiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQyMzY1CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgR1BJTworKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9ncGlvLmg+CisKKy8vIHNlZSBncGlvLmggZm9yIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ncGlvLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmN2MzYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dwaW8uaApAQCAtMCwwICsxLDcwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGdwaW8uaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMTItMDcgMTY6MjI6NTYgKzAxMDAgKE1vbiwgMDcgRGVjIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDUyNjkKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgR1BJTy4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcGVyaXBoZXJhbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgZ3Bpb19hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0dQSU9fSF9fCisjZGVmaW5lIF9fR1BJT19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19ncGlvLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDaGVjayBmb3IgbGVnYWwgcmFuZ2Ugb2YgdmFyaWFibGUgZGlvTnVtYmVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIERSSVZFUkxJQl9ERUJVRworI2luY2x1ZGUgPGluYy9od19mY2ZnMS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9jaGlwaW5mby5oPgorCitzdGF0aWMgYm9vbAorZGlvTnVtYmVyTGVnYWwoIHVpbnQzMl90IGRpb051bWJlciApCit7CisgICAgdWludDMyX3QgaW9Db3VudCA9CisgICAgICAgICgoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19JT0NPTkYgKSAmCisgICAgICAgICAgICBGQ0ZHMV9JT0NPTkZfR1BJT19DTlRfTSApID4+CisgICAgICAgICAgICBGQ0ZHMV9JT0NPTkZfR1BJT19DTlRfUyApIDsKKworICAgIC8vCisgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBvZiBDQzEzeHggN3g3LCB3aGVyZSBJT19DTlQgPSAzMCBhbmQgbGVnYWwgcmFuZ2UgaXMgMS4uMzAKKyAgICAvLyBmb3IgYWxsIG90aGVyIGNoaXBzIGxlZ2FsIHJhbmdlIGlzIDAuLihkaW9OdW1iZXItMSkKKyAgICAvLworICAgIGlmICgoIGlvQ291bnQgPT0gMzAgKSAmJiBDaGlwSW5mb19DaGlwRmFtaWx5SXNDQzEzeHgoKSApIHsKKyAgICAgICAgcmV0dXJuICgoIGRpb051bWJlciA+IDAgKSAmJiAoIGRpb051bWJlciA8PSBpb0NvdW50ICkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAoIGRpb051bWJlciA8IGlvQ291bnQgKTsKKyAgICB9Cit9CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGRlZmluZSB0aGUgYml0IGZpZWxkIGZvciB0aGUgR1BJTyBESU9zLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgR1BJT19ESU9fMF9NQVNLICAgICAgICAgMHgwMDAwMDAwMSAgLy8gR1BJTyBESU8gMCBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzFfTUFTSyAgICAgICAgIDB4MDAwMDAwMDIgIC8vIEdQSU8gRElPIDEgbWFzaworI2RlZmluZSBHUElPX0RJT18yX01BU0sgICAgICAgICAweDAwMDAwMDA0ICAvLyBHUElPIERJTyAyIG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fM19NQVNLICAgICAgICAgMHgwMDAwMDAwOCAgLy8gR1BJTyBESU8gMyBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzRfTUFTSyAgICAgICAgIDB4MDAwMDAwMTAgIC8vIEdQSU8gRElPIDQgbWFzaworI2RlZmluZSBHUElPX0RJT181X01BU0sgICAgICAgICAweDAwMDAwMDIwICAvLyBHUElPIERJTyA1IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fNl9NQVNLICAgICAgICAgMHgwMDAwMDA0MCAgLy8gR1BJTyBESU8gNiBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzdfTUFTSyAgICAgICAgIDB4MDAwMDAwODAgIC8vIEdQSU8gRElPIDcgbWFzaworI2RlZmluZSBHUElPX0RJT184X01BU0sgICAgICAgICAweDAwMDAwMTAwICAvLyBHUElPIERJTyA4IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fOV9NQVNLICAgICAgICAgMHgwMDAwMDIwMCAgLy8gR1BJTyBESU8gOSBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzEwX01BU0sgICAgICAgIDB4MDAwMDA0MDAgIC8vIEdQSU8gRElPIDEwIG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMTFfTUFTSyAgICAgICAgMHgwMDAwMDgwMCAgLy8gR1BJTyBESU8gMTEgbWFzaworI2RlZmluZSBHUElPX0RJT18xMl9NQVNLICAgICAgICAweDAwMDAxMDAwICAvLyBHUElPIERJTyAxMiBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzEzX01BU0sgICAgICAgIDB4MDAwMDIwMDAgIC8vIEdQSU8gRElPIDEzIG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMTRfTUFTSyAgICAgICAgMHgwMDAwNDAwMCAgLy8gR1BJTyBESU8gMTQgbWFzaworI2RlZmluZSBHUElPX0RJT18xNV9NQVNLICAgICAgICAweDAwMDA4MDAwICAvLyBHUElPIERJTyAxNSBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzE2X01BU0sgICAgICAgIDB4MDAwMTAwMDAgIC8vIEdQSU8gRElPIDE2IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMTdfTUFTSyAgICAgICAgMHgwMDAyMDAwMCAgLy8gR1BJTyBESU8gMTcgbWFzaworI2RlZmluZSBHUElPX0RJT18xOF9NQVNLICAgICAgICAweDAwMDQwMDAwICAvLyBHUElPIERJTyAxOCBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzE5X01BU0sgICAgICAgIDB4MDAwODAwMDAgIC8vIEdQSU8gRElPIDE5IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMjBfTUFTSyAgICAgICAgMHgwMDEwMDAwMCAgLy8gR1BJTyBESU8gMjAgbWFzaworI2RlZmluZSBHUElPX0RJT18yMV9NQVNLICAgICAgICAweDAwMjAwMDAwICAvLyBHUElPIERJTyAyMSBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzIyX01BU0sgICAgICAgIDB4MDA0MDAwMDAgIC8vIEdQSU8gRElPIDIyIG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMjNfTUFTSyAgICAgICAgMHgwMDgwMDAwMCAgLy8gR1BJTyBESU8gMjMgbWFzaworI2RlZmluZSBHUElPX0RJT18yNF9NQVNLICAgICAgICAweDAxMDAwMDAwICAvLyBHUElPIERJTyAyNCBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzI1X01BU0sgICAgICAgIDB4MDIwMDAwMDAgIC8vIEdQSU8gRElPIDI1IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMjZfTUFTSyAgICAgICAgMHgwNDAwMDAwMCAgLy8gR1BJTyBESU8gMjYgbWFzaworI2RlZmluZSBHUElPX0RJT18yN19NQVNLICAgICAgICAweDA4MDAwMDAwICAvLyBHUElPIERJTyAyNyBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzI4X01BU0sgICAgICAgIDB4MTAwMDAwMDAgIC8vIEdQSU8gRElPIDI4IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMjlfTUFTSyAgICAgICAgMHgyMDAwMDAwMCAgLy8gR1BJTyBESU8gMjkgbWFzaworI2RlZmluZSBHUElPX0RJT18zMF9NQVNLICAgICAgICAweDQwMDAwMDAwICAvLyBHUElPIERJTyAzMCBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzMxX01BU0sgICAgICAgIDB4ODAwMDAwMDAgIC8vIEdQSU8gRElPIDMxIG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fQUxMX01BU0sgICAgICAgMHhGRkZGRkZGRiAgLy8gR1BJTyBhbGwgRElPcyBtYXNrCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmUgY29uc3RhbnRzIHRoYXQgc2hhbGwgYmUgcGFzc2VkIGFzIHRoZSBvdXRwdXRFbmFibGVWYWx1ZSBwYXJhbWV0ZXIgdG8KKy8vIEdQSU9fc2V0T3V0cHV0RW5hYmxlRGlvKCkgYW5kIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSB0aGUgZnVuY3Rpb24KKy8vIEdQSU9fZ2V0T3V0cHV0RW5hYmxlRGlvKCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBHUElPX09VVFBVVF9ESVNBQkxFICAgICAweDAwMDAwMDAwICAvLyBESU8gb3V0cHV0IGlzIGRpc2FibGVkCisjZGVmaW5lIEdQSU9fT1VUUFVUX0VOQUJMRSAgICAgIDB4MDAwMDAwMDEgIC8vIERJTyBvdXRwdXQgaXMgZW5hYmxlZAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVhZHMgYSBzcGVjaWZpYyBESU8uCisvLyEKKy8vISBccGFyYW0gZGlvTnVtYmVyIHNwZWNpZmllcyB0aGUgRElPIHRvIHJlYWQgKDAtMzEpLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIDAgb3IgMSByZWZsZWN0aW5nIHRoZSBpbnB1dCB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIERJTy4KKy8vIQorLy8hIFxzYSBccmVmIEdQSU9fcmVhZE11bHRpRGlvKCksIFxyZWYgR1BJT193cml0ZURpbygpLCBccmVmIEdQSU9fd3JpdGVNdWx0aURpbygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitHUElPX3JlYWREaW8oIHVpbnQzMl90IGRpb051bWJlciApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9OdW1iZXJMZWdhbCggZGlvTnVtYmVyICkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGlucHV0IHZhbHVlIGZyb20gdGhlIHNwZWNpZmllZCBESU8uCisgICAgLy8KKyAgICByZXR1cm4gKCggSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19ESU4zMV8wICkgPj4gZGlvTnVtYmVyICkgJiAxICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlYWRzIHRoZSBpbnB1dCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBESU9zLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aGUgaW5wdXQgdmFsdWUgZm9yIG11bHRpcGxlIERJT3MuCisvLyEgVGhlIHZhbHVlIHJldHVybmVkIGlzIG5vdCBzaGlmdGVkIGFuZCBoZW5jZSBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIGRpb01hc2sgYml0cy4KKy8vIQorLy8hIFxwYXJhbSBkaW9NYXNrIGlzIHRoZSBiaXQtbWFzayByZXByZXNlbnRhdGlvbiBvZiB0aGUgRElPcyB0byByZWFkLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJpdHdpc2UgT1InZWQgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgR1BJT19ESU9fMF9NQVNLCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgR1BJT19ESU9fMzFfTUFTSworLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGEgYml0IHZlY3RvciByZWZsZWN0aW5nIHRoZSBpbnB1dCB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBESU9zLgorLy8hIC0gMCA6IENvcnJlc3BvbmRpbmcgRElPIGlzIGxvdy4KKy8vISAtIDEgOiBDb3JyZXNwb25kaW5nIERJTyBpcyBoaWdoLgorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19yZWFkRGlvKCksIFxyZWYgR1BJT193cml0ZURpbygpLCBccmVmIEdQSU9fd3JpdGVNdWx0aURpbygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitHUElPX3JlYWRNdWx0aURpbyggdWludDMyX3QgZGlvTWFzayApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9NYXNrICYgR1BJT19ESU9fQUxMX01BU0sgKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBpbnB1dCB2YWx1ZSBmcm9tIHRoZSBzcGVjaWZpZWQgRElPcy4KKyAgICAvLworICAgIHJldHVybiAoIEhXUkVHKCBHUElPX0JBU0UgKyBHUElPX09fRElOMzFfMCApICYgZGlvTWFzayApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBXcml0ZXMgYSB2YWx1ZSB0byBhIHNwZWNpZmljIERJTy4KKy8vIQorLy8hIFxwYXJhbSBkaW9OdW1iZXIgc3BlY2lmaWVzIHRoZSBESU8gdG8gdXBkYXRlICgwLTMxKS4KKy8vISBccGFyYW0gdmFsdWUgc3BlY2lmaWVzIHRoZSB2YWx1ZSB0byB3cml0ZQorLy8hIC0gMCA6IExvZ2ljIHplcm8gKGxvdykKKy8vISAtIDEgOiBMb2dpYyBvbmUgKGhpZ2gpCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEdQSU9fd3JpdGVNdWx0aURpbygpLCBccmVmIEdQSU9fcmVhZERpbygpLCBccmVmIEdQSU9fcmVhZE11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorR1BJT193cml0ZURpbyggdWludDMyX3QgZGlvTnVtYmVyLCB1aW50MzJfdCB2YWx1ZSApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9OdW1iZXJMZWdhbCggZGlvTnVtYmVyICkpOworICAgIEFTU0VSVCgoIHZhbHVlID09IDAgKSB8fCAoIHZhbHVlID09IDEgKSk7CisKKyAgICAvLworICAgIC8vIFdyaXRlIDAgb3IgMSB0byB0aGUgYnl0ZSBpbmRleGVkIERPVVQgbWFwCisgICAgLy8KKyAgICBIV1JFR0IoIEdQSU9fQkFTRSArIGRpb051bWJlciApID0gdmFsdWU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdyaXRlcyBtYXNrZWQgZGF0YSB0byB0aGUgc3BlY2lmaWVkIERJT3MuCisvLyEKKy8vISBFbmFibGVzIGZvciB3cml0aW5nIG11bHRpcGxlIGJpdHMgc2ltdWx0YW5lb3VzbHkuCisvLyEgVGhlIHZhbHVlIHRvIHdyaXRlIG11c3QgYmUgc2hpZnRlZCBzbyBpdCBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIGRpb01hc2sgYml0cy4KKy8vIQorLy8hIFxub3RlIE5vdGUgdGhhdCB0aGlzIGlzIGEgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9uIGFuZCBoZW5jZSBub3QgYXRvbWljLgorLy8hCisvLyEgXHBhcmFtIGRpb01hc2sgaXMgdGhlIGJpdC1tYXNrIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBESU9zIHRvIHdyaXRlLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJpdHdpc2UgT1InZWQgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgR1BJT19ESU9fMF9NQVNLCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgR1BJT19ESU9fMzFfTUFTSworLy8hIFxwYXJhbSBiaXRWZWN0b3JlZFZhbHVlIGhvbGRzIHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBjb3JyZXNwb25kaW5nIERJTy1iaXRzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBHUElPX3dyaXRlRGlvKCksIFxyZWYgR1BJT19yZWFkRGlvKCksIFxyZWYgR1BJT19yZWFkTXVsdGlEaW8oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitHUElPX3dyaXRlTXVsdGlEaW8oIHVpbnQzMl90IGRpb01hc2ssIHVpbnQzMl90IGJpdFZlY3RvcmVkVmFsdWUgKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCggZGlvTWFzayAmIEdQSU9fRElPX0FMTF9NQVNLICk7CisKKyAgICBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0RPVVQzMV8wICkgPQorICAgICAgICAoIEhXUkVHKCBHUElPX0JBU0UgKyBHUElPX09fRE9VVDMxXzAgKSAmIH5kaW9NYXNrICkgfAorICAgICAgICAoIGJpdFZlY3RvcmVkVmFsdWUgJiBkaW9NYXNrICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgYSBzcGVjaWZpYyBESU8gdG8gMSAoaGlnaCkuCisvLyEKKy8vISBccGFyYW0gZGlvTnVtYmVyIHNwZWNpZmllcyB0aGUgRElPIHRvIHNldCAoMC0zMSkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEdQSU9fc2V0TXVsdGlEaW8oKSwgXHJlZiBHUElPX2NsZWFyRGlvKCksIFxyZWYgR1BJT19jbGVhck11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorR1BJT19zZXREaW8oIHVpbnQzMl90IGRpb051bWJlciApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9OdW1iZXJMZWdhbCggZGlvTnVtYmVyICkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHNwZWNpZmllZCBESU8uCisgICAgLy8KKyAgICBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0RPVVRTRVQzMV8wICkgPSAoIDEgPDwgZGlvTnVtYmVyICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIHNwZWNpZmllZCBESU9zIHRvIDEgKGhpZ2gpLgorLy8hCisvLyEgXHBhcmFtIGRpb01hc2sgaXMgdGhlIGJpdC1tYXNrIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBESU9zIHRvIHNldC4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgYSBiaXR3aXNlIE9SJ2VkIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEdQSU9fRElPXzBfTUFTSworLy8hIC0gLi4uCisvLyEgLSBccmVmIEdQSU9fRElPXzMxX01BU0sKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19zZXREaW8oKSwgXHJlZiBHUElPX2NsZWFyRGlvKCksIFxyZWYgR1BJT19jbGVhck11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorR1BJT19zZXRNdWx0aURpbyggdWludDMyX3QgZGlvTWFzayApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9NYXNrICYgR1BJT19ESU9fQUxMX01BU0sgKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBESU9zLgorICAgIC8vCisgICAgSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19ET1VUU0VUMzFfMCApID0gZGlvTWFzazsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIGEgc3BlY2lmaWMgRElPIHRvIDAgKGxvdykuCisvLyEKKy8vISBccGFyYW0gZGlvTnVtYmVyIHNwZWNpZmllcyB0aGUgRElPIHRvIGNsZWFyICgwLTMxKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19jbGVhck11bHRpRGlvKCksIFxyZWYgR1BJT19zZXREaW8oKSwgXHJlZiBHUElPX3NldE11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorR1BJT19jbGVhckRpbyggdWludDMyX3QgZGlvTnVtYmVyICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb051bWJlckxlZ2FsKCBkaW9OdW1iZXIgKSk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSBzcGVjaWZpZWQgRElPLgorICAgIC8vCisgICAgSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19ET1VUQ0xSMzFfMCApID0gKCAxIDw8IGRpb051bWJlciApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhcnMgdGhlIHNwZWNpZmllZCBESU9zIHRvIDAgKGxvdykuCisvLyEKKy8vISBccGFyYW0gZGlvTWFzayBpcyB0aGUgYml0LW1hc2sgcmVwcmVzZW50YXRpb24gb2YgdGhlIERJT3MgdG8gY2xlYXIuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIGEgYml0d2lzZSBPUidlZCBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBHUElPX0RJT18wX01BU0sKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBHUElPX0RJT18zMV9NQVNLCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEdQSU9fY2xlYXJEaW8oKSwgXHJlZiBHUElPX3NldERpbygpLCBccmVmIEdQSU9fc2V0TXVsdGlEaW8oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitHUElPX2NsZWFyTXVsdGlEaW8oIHVpbnQzMl90IGRpb01hc2sgKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCggZGlvTWFzayAmIEdQSU9fRElPX0FMTF9NQVNLICk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSBESU9zLgorICAgIC8vCisgICAgSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19ET1VUQ0xSMzFfMCApID0gZGlvTWFzazsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVG9nZ2xlcyBhIHNwZWNpZmljIERJTy4KKy8vIQorLy8hIFxwYXJhbSBkaW9OdW1iZXIgc3BlY2lmaWVzIHRoZSBESU8gdG8gdG9nZ2xlICgwLTMxKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgR1BJT190b2dnbGVNdWx0aURpbygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0dQSU9fdG9nZ2xlRGlvKCB1aW50MzJfdCBkaW9OdW1iZXIgKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCggZGlvTnVtYmVyTGVnYWwoIGRpb051bWJlciApKTsKKworICAgIC8vCisgICAgLy8gVG9nZ2xlIHRoZSBzcGVjaWZpZWQgRElPLgorICAgIC8vCisgICAgSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19ET1VUVEdMMzFfMCApID0gKCAxIDw8IGRpb051bWJlciApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUb2dnbGVzIHRoZSBzcGVjaWZpZWQgRElPcy4KKy8vIQorLy8hIFxwYXJhbSBkaW9NYXNrIGlzIHRoZSBiaXQtbWFzayByZXByZXNlbnRhdGlvbiBvZiB0aGUgRElPcyB0byB0b2dnbGUuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIGEgYml0d2lzZSBPUidlZCBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBHUElPX0RJT18wX01BU0sKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBHUElPX0RJT18zMV9NQVNLCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEdQSU9fdG9nZ2xlRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorR1BJT190b2dnbGVNdWx0aURpbyggdWludDMyX3QgZGlvTWFzayApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9NYXNrICYgR1BJT19ESU9fQUxMX01BU0sgKTsKKworICAgIC8vCisgICAgLy8gVG9nZ2xlIHRoZSBESU9zLgorICAgIC8vCisgICAgSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19ET1VUVEdMMzFfMCApID0gZGlvTWFzazsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgb3V0cHV0IGVuYWJsZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBESU8uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG91dHB1dCBlbmFibGUgc3RhdHVzIGZvciB0aGUgc3BlY2lmaWVkIERJTy4KKy8vISBUaGUgRElPIGNhbiBiZSBjb25maWd1cmVkIGFzIGVpdGhlciBpbnB1dCBvciBvdXRwdXQgdW5kZXIgc29mdHdhcmUgY29udHJvbC4KKy8vIQorLy8hIFxwYXJhbSBkaW9OdW1iZXIgc3BlY2lmaWVzIHRoZSBESU8gdG8gZ2V0IHRoZSBvdXRwdXQgZW5hYmxlIHNldHRpbmcgZnJvbSAoMC0zMSkuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgb25lIG9mIHRoZSBlbnVtZXJhdGVkIGRhdGEgdHlwZXMgKDAgb3IgMSk6CisvLyEgLSBccmVmIEdQSU9fT1VUUFVUX0RJU0FCTEUgOiBESU8gb3V0cHV0IGlzIGRpc2FibGVkLgorLy8hIC0gXHJlZiBHUElPX09VVFBVVF9FTkFCTEUgIDogRElPIG91dHB1dCBpcyBlbmFibGVkLgorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19nZXRPdXRwdXRFbmFibGVNdWx0aURpbygpLCBccmVmIEdQSU9fc2V0T3V0cHV0RW5hYmxlRGlvKCksIFxyZWYgR1BJT19zZXRPdXRwdXRFbmFibGVNdWx0aURpbygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitHUElPX2dldE91dHB1dEVuYWJsZURpbyggdWludDMyX3QgZGlvTnVtYmVyICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb051bWJlckxlZ2FsKCBkaW9OdW1iZXIgKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgb3V0cHV0IGVuYWJsZSBzdGF0dXMgZm9yIHRoZSBzcGVjaWZpZWQgRElPLgorICAgIC8vCisgICAgcmV0dXJuICgoIEhXUkVHKCBHUElPX0JBU0UgKyBHUElPX09fRE9FMzFfMCApID4+IGRpb051bWJlciApICYgMSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBvdXRwdXQgZW5hYmxlIHNldHRpbmcgb2YgdGhlIHNwZWNpZmllZCBESU9zLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBvdXRwdXQgZW5hYmxlIHNldHRpbmcgZm9yIG11bHRpcGxlIERJT3MuCisvLyEgVGhlIHZhbHVlIHJldHVybmVkIGlzIG5vdCBzaGlmdGVkIGFuZCBoZW5jZSBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIGRpb01hc2sgYml0cy4KKy8vIQorLy8hIFxwYXJhbSBkaW9NYXNrIGlzIHRoZSBiaXQtbWFzayByZXByZXNlbnRhdGlvbiBvZiB0aGUgRElPcyB0byByZXR1cm4gdGhlIG91dHB1dCBlbmFibGUgc2V0dGluZ3MgZnJvbS4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgYSBiaXR3aXNlIE9SJ2VkIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEdQSU9fRElPXzBfTUFTSworLy8hIC0gLi4uCisvLyEgLSBccmVmIEdQSU9fRElPXzMxX01BU0sKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgb3V0cHV0IGVuYWJsZSBzZXR0aW5nIGZvciBtdWx0aXBsZSBESU9zIGFzIGEgYml0IHZlY3RvciBjb3JyZXNwb25kaW5nIHRvIHRoZSBkaW9NYXNrIGJpdHMuCisvLyEgLSAwIDogQ29ycmVzcG9uZGluZyBESU8gaXMgY29uZmlndXJlZCB3aXRoIG91dHB1dCBkaXNhYmxlZC4KKy8vISAtIDEgOiBDb3JyZXNwb25kaW5nIERJTyBpcyBjb25maWd1cmVkIHdpdGggb3V0cHV0IGVuYWJsZWQuCisvLyEKKy8vISBcc2EgXHJlZiBHUElPX2dldE91dHB1dEVuYWJsZURpbygpLCBccmVmIEdQSU9fc2V0T3V0cHV0RW5hYmxlRGlvKCksIFxyZWYgR1BJT19zZXRPdXRwdXRFbmFibGVNdWx0aURpbygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitHUElPX2dldE91dHB1dEVuYWJsZU11bHRpRGlvKCB1aW50MzJfdCBkaW9NYXNrICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb01hc2sgJiBHUElPX0RJT19BTExfTUFTSyApOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIG91dHB1dCBlbmFibGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgRElPcy4KKyAgICAvLworICAgIHJldHVybiAoIEhXUkVHKCBHUElPX0JBU0UgKyBHUElPX09fRE9FMzFfMCApICYgZGlvTWFzayApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIG91dHB1dCBlbmFibGUgb2YgYSBzcGVjaWZpYyBESU8uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIEdQSU8gb3V0cHV0IGVuYWJsZSBiaXQgZm9yIHRoZSBzcGVjaWZpZWQgRElPLgorLy8hIFRoZSBESU8gY2FuIGJlIGNvbmZpZ3VyZWQgYXMgZWl0aGVyIGlucHV0IG9yIG91dHB1dCB1bmRlciBzb2Z0d2FyZSBjb250cm9sLgorLy8hCisvLyEgXHBhcmFtIGRpb051bWJlciBzcGVjaWZpZXMgdGhlIERJTyB0byBjb25maWd1cmUgKDAtMzEpLgorLy8hIFxwYXJhbSBvdXRwdXRFbmFibGVWYWx1ZSBzcGVjaWZpZXMgdGhlIG91dHB1dCBlbmFibGUgc2V0dGluZyBvZiB0aGUgc3BlY2lmaWVkIERJTzoKKy8vISAtIFxyZWYgR1BJT19PVVRQVVRfRElTQUJMRSA6IERJTyBvdXRwdXQgaXMgZGlzYWJsZWQuCisvLyEgLSBccmVmIEdQSU9fT1VUUFVUX0VOQUJMRSAgOiBESU8gb3V0cHV0IGlzIGVuYWJsZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEdQSU9fc2V0T3V0cHV0RW5hYmxlTXVsdGlEaW8oKSwgXHJlZiBHUElPX2dldE91dHB1dEVuYWJsZURpbygpLCBccmVmIEdQSU9fZ2V0T3V0cHV0RW5hYmxlTXVsdGlEaW8oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitHUElPX3NldE91dHB1dEVuYWJsZURpbyggdWludDMyX3QgZGlvTnVtYmVyLCB1aW50MzJfdCBvdXRwdXRFbmFibGVWYWx1ZSApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9OdW1iZXJMZWdhbCggZGlvTnVtYmVyICkpOworICAgIEFTU0VSVCgoIG91dHB1dEVuYWJsZVZhbHVlID09IEdQSU9fT1VUUFVUX0RJU0FCTEUgKSB8fAorICAgICAgICAgICAoIG91dHB1dEVuYWJsZVZhbHVlID09IEdQSU9fT1VUUFVUX0VOQUJMRSAgKSAgICApOworCisgICAgLy8KKyAgICAvLyBVcGRhdGUgdGhlIG91dHB1dCBlbmFibGUgYml0IGZvciB0aGUgc3BlY2lmaWVkIERJTy4KKyAgICAvLworICAgIEhXUkVHQklUVyggR1BJT19CQVNFICsgR1BJT19PX0RPRTMxXzAsIGRpb051bWJlciApID0gb3V0cHV0RW5hYmxlVmFsdWU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZXMgdGhlIG91dHB1dCBlbmFibGUgc2V0dGluZyBmb3IgYWxsIHNwZWNpZmllZCBESU9zLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBvdXRwdXQgZW5hYmxlIHNldHRpbmcgZm9yIHRoZSBzcGVjaWZpZWQgRElPcy4KKy8vISBUaGUgb3V0cHV0IGVuYWJsZSBzZXR0aW5nIG11c3QgYmUgc2hpZnRlZCBzbyBpdCBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIGRpb01hc2sgYml0cy4KKy8vISBUaGUgRElPcyBjYW4gYmUgY29uZmlndXJlZCBhcyBlaXRoZXIgYW4gaW5wdXQgb3Igb3V0cHV0IHVuZGVyIHNvZnR3YXJlIGNvbnRyb2wuCisvLyEKKy8vISBcbm90ZSBOb3RlIHRoYXQgdGhpcyBpcyBhIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbiBhbmQgaGVuY2Ugbm90IGF0b21pYy4KKy8vIQorLy8hIFxwYXJhbSBkaW9NYXNrIGlzIHRoZSBiaXQtbWFzayByZXByZXNlbnRhdGlvbiBvZiB0aGUgRElPcyBvbiB3aGljaCB0byBjb25maWd1cmUgdGhlCisvLyEgb3V0cHV0IGVuYWJsZSBzZXR0aW5nLiBUaGUgcGFyYW1ldGVyIG11c3QgYmUgYSBiaXR3aXNlIE9SJ2VkIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEdQSU9fRElPXzBfTUFTSworLy8hIC0gLi4uCisvLyEgLSBccmVmIEdQSU9fRElPXzMxX01BU0sKKy8vISBccGFyYW0gYml0VmVjdG9yZWRPdXRwdXRFbmFibGUgaG9sZHMgdGhlIG91dHB1dCBlbmFibGUgc2V0dGluZyB0aGUgY29ycmVzcG9uZGluZyBESU8tYml0czoKKy8vISAtIDAgOiBDb3JyZXNwb25kaW5nIERJTyBpcyBjb25maWd1cmVkIHdpdGggb3V0cHV0IGRpc2FibGVkLgorLy8hIC0gMSA6IENvcnJlc3BvbmRpbmcgRElPIGlzIGNvbmZpZ3VyZWQgd2l0aCBvdXRwdXQgZW5hYmxlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19zZXRPdXRwdXRFbmFibGVEaW8oKSwgXHJlZiBHUElPX2dldE91dHB1dEVuYWJsZURpbygpLCBccmVmIEdQSU9fZ2V0T3V0cHV0RW5hYmxlTXVsdGlEaW8oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitHUElPX3NldE91dHB1dEVuYWJsZU11bHRpRGlvKCB1aW50MzJfdCBkaW9NYXNrLCB1aW50MzJfdCBiaXRWZWN0b3JlZE91dHB1dEVuYWJsZSApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9NYXNrICYgR1BJT19ESU9fQUxMX01BU0sgKTsKKworICAgIEhXUkVHKCBHUElPX0JBU0UgKyBHUElPX09fRE9FMzFfMCApID0KKyAgICAgICAgKCBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0RPRTMxXzAgKSAmIH5kaW9NYXNrICkgfAorICAgICAgICAoIGJpdFZlY3RvcmVkT3V0cHV0RW5hYmxlICYgZGlvTWFzayApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBldmVudCBzdGF0dXMgb2YgYSBzcGVjaWZpYyBESU8uCisvLyEKKy8vISBccGFyYW0gZGlvTnVtYmVyIHNwZWNpZmllcyB0aGUgRElPIHRvIGdldCB0aGUgZXZlbnQgc3RhdHVzIGZyb20gKDAtMzEpLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IGV2ZW50IHN0YXR1cyBvbiB0aGUgc3BlY2lmaWVkIERJTy4KKy8vISAtIDAgOiBOb24tdHJpZ2dlcmVkIGV2ZW50LgorLy8hIC0gMSA6IFRyaWdnZXJlZCBldmVudC4KKy8vIQorLy8hIFxzYSBccmVmIEdQSU9fZ2V0RXZlbnRNdWx0aURpbygpLCBccmVmIEdQSU9fY2xlYXJFdmVudERpbygpLCBccmVmIEdQSU9fY2xlYXJFdmVudE11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0dQSU9fZ2V0RXZlbnREaW8oIHVpbnQzMl90IGRpb051bWJlciApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9OdW1iZXJMZWdhbCggZGlvTnVtYmVyICkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGV2ZW50IHN0YXR1cyBmb3IgdGhlIHNwZWNpZmllZCBESU8uCisgICAgLy8KKyAgICByZXR1cm4gKCggSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19FVkZMQUdTMzFfMCApID4+IGRpb051bWJlciApICYgMSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBldmVudCBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBESU9zLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBldmVudCBzdGF0dXMgZm9yIG11bHRpcGxlIERJT3MuCisvLyEgVGhlIHZhbHVlIHJldHVybmVkIGlzIG5vdCBzaGlmdGVkIGFuZCBoZW5jZSBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIGRpb01hc2sgYml0cy4KKy8vIQorLy8hIFxwYXJhbSBkaW9NYXNrIGlzIHRoZSBiaXQtbWFzayByZXByZXNlbnRhdGlvbiBvZiB0aGUgRElPcyB0byBnZXQgdGhlCisvLyEgZXZlbnQgc3RhdHVzIGZyb20gKDAtMzEpLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJpdHdpc2UgT1InZWQgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgR1BJT19ESU9fMF9NQVNLCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgR1BJT19ESU9fMzFfTUFTSworLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGEgYml0IHZlY3RvciB3aXRoIHRoZSBjdXJyZW50IGV2ZW50IHN0YXR1cyBjb3JyZXNwb25kaWcgdG8gdGhlIHNwZWNpZmllZCBESU9zLgorLy8hIC0gMCA6IENvcnJlc3BvbmRpbmcgRElPIGhhcyBubyB0cmlnZ2VyZWQgZXZlbnQuCisvLyEgLSAxIDogQ29ycmVzcG9uZGluZyBESU8gaGFzIGEgdHJpZ2dlcmVkIGV2ZW50LgorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19nZXRFdmVudERpbygpLCBccmVmIEdQSU9fY2xlYXJFdmVudERpbygpLCBccmVmIEdQSU9fY2xlYXJFdmVudE11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0dQSU9fZ2V0RXZlbnRNdWx0aURpbyggdWludDMyX3QgZGlvTWFzayApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9NYXNrICYgR1BJT19ESU9fQUxMX01BU0sgKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBldmVudCBzdGF0dXMgZm9yIHRoZSBzcGVjaWZpZWQgRElPLgorICAgIC8vCisgICAgcmV0dXJuICggSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19FVkZMQUdTMzFfMCApICYgZGlvTWFzayApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhcnMgdGhlIElPIGV2ZW50IHN0YXR1cyBvZiBhIHNwZWNpZmljIERJTy4KKy8vIQorLy8hIFxwYXJhbSBkaW9OdW1iZXIgc3BlY2lmaWVzIHRoZSBESU8gb24gd2hpY2ggdG8gY2xlYXIgdGhlIGV2ZW50IHN0YXR1cyAoMC0zMSkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEdQSU9fY2xlYXJFdmVudE11bHRpRGlvKCksIFxyZWYgR1BJT19nZXRFdmVudERpbygpLCBccmVmIEdQSU9fZ2V0RXZlbnRNdWx0aURpbygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0dQSU9fY2xlYXJFdmVudERpbyggdWludDMyX3QgZGlvTnVtYmVyICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb051bWJlckxlZ2FsKCBkaW9OdW1iZXIgKSk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSBldmVudCBzdGF0dXMgZm9yIHRoZSBzcGVjaWZpZWQgRElPLgorICAgIC8vCisgICAgSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19FVkZMQUdTMzFfMCApID0gKCAxIDw8IGRpb051bWJlciApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhcnMgdGhlIElPIGV2ZW50IHN0YXR1cyBvbiB0aGUgc3BlY2lmaWVkIERJT3MuCisvLyEKKy8vISBccGFyYW0gZGlvTWFzayBpcyB0aGUgYml0LW1hc2sgcmVwcmVzZW50YXRpb24gb2YgdGhlIERJT3Mgb24gd2hpY2ggdG8KKy8vISBjbGVhciB0aGUgZXZlbnRzIHN0YXR1cy4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgYSBiaXR3aXNlIE9SJ2VkIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEdQSU9fRElPXzBfTUFTSworLy8hIC0gLi4uCisvLyEgLSBccmVmIEdQSU9fRElPXzMxX01BU0sKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19jbGVhckV2ZW50RGlvKCksIFxyZWYgR1BJT19nZXRFdmVudERpbygpLCBccmVmIEdQSU9fZ2V0RXZlbnRNdWx0aURpbygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0dQSU9fY2xlYXJFdmVudE11bHRpRGlvKCB1aW50MzJfdCBkaW9NYXNrICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb01hc2sgJiBHUElPX0RJT19BTExfTUFTSyApOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgZXZlbnQgc3RhdHVzIGZvciB0aGUgc3BlY2lmaWVkIERJT3MuCisgICAgLy8KKyAgICBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0VWRkxBR1MzMV8wICkgPSBkaW9NYXNrOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fR1BJT19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3Bpb19kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dwaW9fZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyYzkzOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dwaW9fZG9jLmgKQEAgLTAsMCArMSw5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGdwaW9fZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGdwaW9fYXBpCisvLyEgQHsKKy8vISBcc2VjdGlvbiBzZWNfZ3BpbyBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSBHUElPIG1vZHVsZSBhbGxvd3Mgc29mdHdhcmUgdG8gY29udHJvbCB0aGUgcGlucyBvZiB0aGUgZGV2aWNlIGRpcmVjdGx5IGlmIHRoZSBJT0MgbW9kdWxlIGhhcworLy8hIGJlZW4gY29uZmlndXJlZCB0byByb3V0ZSB0aGUgR1BJTyBzaWduYWwgdG8gYSBwaHlzaWNhbCBwaW4gKGNhbGxlZCBESU8pLiBBbHRlcm5hdGl2ZWx5LCBwaW5zIGNhbgorLy8hIGJlIGhhcmR3YXJlIGNvbnRyb2xsZWQgYnkgb3RoZXIgcGVyaXBoZXJhbCBtb2R1bGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSU9DIG1vZHVsZSwKKy8vISBob3cgdG8gY29uZmlndXJlIHBoeXNpY2FsIHBpbnMsIGFuZCBob3cgdG8gc2VsZWN0IGJldHdlZW4gc29mdHdhcmUgY29udHJvbGxlZCBhbmQgaGFyZHdhcmUgY29udHJvbGxlZCwKKy8vISBzZWUgdGhlIFtJT0MgQVBJXShccmVmIGlvY19hcGkpLgorLy8hCisvLyEgVGhlIFN5c3RlbSBDUFUgY2FuIGFjY2VzcyB0aGUgR1BJTyBtb2R1bGUgdG8gcmVhZCB0aGUgdmFsdWUgb2YgYW55IERJTyBvZiB0aGUgZGV2aWNlIGFuZCBpZiB0aGUgSU9DCisvLyEgbW9kdWxlIGhhcyBiZWVuIGNvbmZpZ3VyZWQgc3VjaCB0aGF0IG9uZSBvciBtb3JlIERJT3MgYXJlIEdQSU8gY29udHJvbGxlZCAoc29mdHdhcmUgY29udHJvbGxlZCkgdGhlCisvLyEgU3lzdGVtIENQVSBjYW4gd3JpdGUgdGhlc2UgRElPcyB0aHJvdWdoIHRoZSBHUElPIG1vZHVsZS4KKy8vIQorLy8hIFRoZSBJT0MgbW9kdWxlIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgZXZlbnRzIG9uIGVkZ2UgZGV0ZWN0aW9uIGFuZCB0aGVzZSBldmVudHMgY2FuIGJlCisvLyEgcmVhZCBhbmQgY2xlYXJlZCBpbiB0aGUgR1BJTyBtb2R1bGUgYnkgdGhlIFN5c3RlbSBDUFUuCisvLyEKKy8vISBcc2VjdGlvbiBzZWNfZ3Bpb19hcGkgQVBJCisvLyEKKy8vISBUaGUgQVBJIGZ1bmN0aW9ucyBjYW4gYmUgZ3JvdXBlZCBsaWtlIHRoaXM6CisvLyEKKy8vISBTZXQgYW5kIGdldCBkaXJlY3Rpb24gb2YgRElPIChvdXRwdXQgZW5hYmxlKToKKy8vISAtIFxyZWYgR1BJT19zZXRPdXRwdXRFbmFibGVEaW8oKQorLy8hIC0gXHJlZiBHUElPX3NldE91dHB1dEVuYWJsZU11bHRpRGlvKCkKKy8vISAtIFxyZWYgR1BJT19nZXRPdXRwdXRFbmFibGVEaW8oKQorLy8hIC0gXHJlZiBHUElPX2dldE91dHB1dEVuYWJsZU11bHRpRGlvKCkKKy8vIQorLy8hIFdyaXRlIERJTyAocmVxdWlyZXMgSU9DIHRvIGJlIGNvbmZpZ3VyZWQgZm9yIEdQSU8gdXNhZ2UpOgorLy8hIC0gXHJlZiBHUElPX3dyaXRlRGlvKCkKKy8vISAtIFxyZWYgR1BJT193cml0ZU11bHRpRGlvKCkKKy8vIQorLy8hIFNldCwgY2xlYXIsIG9yIHRvZ2dsZSBESU8gKHJlcXVpcmVzIElPQyB0byBiZSBjb25maWd1cmVkIGZvciBHUElPIHVzYWdlKToKKy8vISAtIFxyZWYgR1BJT19zZXREaW8oKQorLy8hIC0gXHJlZiBHUElPX3NldE11bHRpRGlvKCkKKy8vISAtIFxyZWYgR1BJT19jbGVhckRpbygpCisvLyEgLSBccmVmIEdQSU9fY2xlYXJNdWx0aURpbygpCisvLyEgLSBccmVmIEdQSU9fdG9nZ2xlRGlvKCkKKy8vISAtIFxyZWYgR1BJT190b2dnbGVNdWx0aURpbygpCisvLyEKKy8vISBSZWFkIERJTyAoZXZlbiBpZiBJT0MgaXMgTk9UIGNvbmZpZ3VyZWQgZm9yIEdQSU8gdXNhZ2U7IGhvd2V2ZXIsIHRoZSBESU8gbXVzdCBiZSBjb25maWd1cmVkIGZvciBpbnB1dCBlbmFibGUgaW4gSU9DKToKKy8vISAtIFxyZWYgR1BJT19yZWFkRGlvKCkKKy8vISAtIFxyZWYgR1BJT19yZWFkTXVsdGlEaW8oKQorLy8hCisvLyEgUmVhZCBvciBjbGVhciBldmVudHMgKGV2ZW4gaWYgSU9DIGlzIE5PVCBjb25maWd1cmVkIGZvciBHUElPIHVzYWdlOyBob3dldmVyLCB0aGUgRElPIG11c3QgYmUgY29uZmlndXJlZCBmb3IgaW5wdXQgZW5hYmxlIGluIElPQyk6CisvLyEgLSBccmVmIEdQSU9fZ2V0RXZlbnREaW8oKQorLy8hIC0gXHJlZiBHUElPX2dldEV2ZW50TXVsdGlEaW8oKQorLy8hIC0gXHJlZiBHUElPX2NsZWFyRXZlbnREaW8oKQorLy8hIC0gXHJlZiBHUElPX2NsZWFyRXZlbnRNdWx0aURpbygpCisvLyEKKy8vISBUaGUgW0lPQyBBUEldKFxyZWYgaW9jX2FwaSkgcHJvdmlkZXMgdHdvIGZ1bmN0aW9ucyBmb3IgZWFzeSBjb25maWd1cmF0aW9uIG9mIERJT3MgYXMgR1BJTyBlbmFibGVkIHVzaW5nCisvLyEgdHlwaWNhbCBzZXR0aW5ncy4gVGhleSBhbHNvIHNlcnZlIGFzIGV4YW1wbGVzIG9uIGhvdyB0byBjb25maWd1cmUgdGhlIElPQyBhbmQgR1BJTyBtb2R1bGVzIGZvciBHUElPIHVzYWdlOgorLy8hIC0gXHJlZiBJT0NQaW5UeXBlR3Bpb0lucHV0KCkKKy8vISAtIFxyZWYgSU9DUGluVHlwZUdwaW9PdXRwdXQoKQorLy8hCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dyb3VwX2FuYWxvZ19kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dyb3VwX2FuYWxvZ19kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Q1NWZjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3JvdXBfYW5hbG9nX2RvYy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgZ3JvdXBfYW5hbG9nX2RvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0zMCAxMzowMzo1OSArMDIwMCAoV2VkLCAzMCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk3MQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vISBcYWRkdG9ncm91cCBhbmFsb2dfZ3JvdXAKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19hbmFsb2cgSW50cm9kdWN0aW9uCisvLyEKKy8vISBBY2Nlc3MgdG8gcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluIG9mIHRoZSBkZXZpY2UgZ29lcyB0aHJvdWdoIG1hc3RlciBtb2R1bGVzIGNvbnRyb2xsaW5nIHNsYXZlCisvLyEgbW9kdWxlcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgcmVnaXN0ZXJzLiBUaGUgbWFzdGVyIG1vZHVsZSBpcyBsb2NhdGVkIGluIHRoZSBkaWdpdGFsIGRvbWFpbiBvZiB0aGUKKy8vISBkZXZpY2UuIFRoZSBpbnRlcmZhY2VzIGJldHdlZW4gbWFzdGVyIGFuZCBzbGF2ZSBtb2R1bGVzIGFyZSBjYWxsZWQgQURJIChBbmFsb2ctdG8tRGlnaXRhbCBJbnRlcmZhY2UpCisvLyEgYW5kIERESSAoRGlnaXRhbC10by1EaWdpdGFsIEludGVyZmFjZSkgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIG1vZHVsZSB0byBhY2Nlc3MgYW5kIHRodXMgdGhlIHNsYXZlCisvLyEgbW9kdWxlcyBhcmUgcmVmZXJyZWQgdG8gYXMgQURJIHNsYXZlIGFuZCBEREkgc2xhdmUuCisvLyEKKy8vISBUaGUgQURJIGFuZCBEREkgQVBJcyBwcm92aWRlIGFjY2VzcyB0byB0aGVzZSByZWdpc3RlcnM6CisvLyEgLSA8YSBocmVmPSIuLi9yZWdpc3Rlcl9kZXNjcmlwdGlvbnMvQU5BVE9QX01NQVAvQURJXzJfUkVGU1lTLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5BRElfMl9SRUZTWVM8L2E+IDogUmVmZXJlbmNlIFN5c3RlbSBmb3IgZ2VuZXJhdGluZyByZWZlcmVuY2Ugdm9sdGFnZXMgYW5kIHJlZmVyZW5jZSBjdXJyZW50cy4KKy8vISAgIC0gUmVmZXJlbmNlIHN5c3RlbSBjb250cm9sCisvLyEgICAtIFNPQyBMRE8gY29udHJvbAorLy8hIC0gPGEgaHJlZj0iLi4vcmVnaXN0ZXJfZGVzY3JpcHRpb25zL0FOQVRPUF9NTUFQL0FESV8zX1JFRlNZUy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+QURJXzNfUkVGU1lTPC9hPiA6IFJlZmVyZW5jZSBTeXN0ZW0gZm9yIGdlbmVyYXRpbmcgcmVmZXJlbmNlIHZvbHRhZ2VzIGFuZCByZWZlcmVuY2UgY3VycmVudHMuCisvLyEgICAtIFJlZmVyZW5jZSBzeXN0ZW0gY29udHJvbAorLy8hICAgLSBEQy9EQyBjb250cm9sCisvLyEgLSA8YSBocmVmPSIuLi9yZWdpc3Rlcl9kZXNjcmlwdGlvbnMvQU5BVE9QX01NQVAvQURJXzRfQVVYLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5BRElfNF9BVVg8L2E+IDogQ29udHJvbGxpbmcgYW5hbG9nIHBlcmlwaGVyYWxzIG9mIEFVWC4KKy8vISAgIC0gTXVsdGlwbGV4ZXJzCisvLyEgICAtIEN1cnJlbnQgc291cmNlCisvLyEgICAtIENvbXBhcmF0b3JzCisvLyEgICAtIEFEQ3MKKy8vISAtIDxhIGhyZWY9Ii4uL3JlZ2lzdGVyX2Rlc2NyaXB0aW9ucy9BTkFUT1BfTU1BUC9ERElfMF9PU0MuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPkRESV8wX09TQzwvYT4gOiBDb250cm9sbGluZyB0aGUgb3NjaWxsYXRvcnMgKHZpYSBBVVggZG9tYWluKQorLy8hCisvLyEgVGhlIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBvZiBDUFUgbWVtb3J5IG1hcCBkb2N1bWVudCB0aGUgQURJL0RESSBtYXN0ZXJzLiBUaGUgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIG9mCisvLyEgYW5hbG9nIG1lbW9yeSBtYXAgZG9jdW1lbnQgdGhlIEFESS9EREkgc2xhdmVzLiBUaGUgQURJL0RESSBBUElzIGFsbG93IHRoZSBwcm9ncmFtbWVyIHRvIGZvY3VzIG9uIHRoZQorLy8hIHNsYXZlIHJlZ2lzdGVycyBvZiBpbnRlcmVzdCB3aXRob3V0IGJlaW5nIGNvbmNlcm5lZCB3aXRoIHRoZSBBREkvRERJIG1hc3RlciBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UuCisvLyEKKy8vISBBbHRob3VnaCB0aGUgQURJL0RESSBBUElzIG1ha2UgdGhlIG1hc3RlciAidHJhbnNwYXJlbnQiIGl0IGNhbiBiZSB1c2VmdWwgdG8ga25vdyBhIGZldyBkZXRhaWxzIGFib3V0CisvLyEgdGhlIEFESS9EREkgcHJvdG9jb2wgYW5kIGhvdyB0aGUgbWFzdGVyIGhhbmRsZXMgdHJhbnNhY3Rpb25zIGFzIGl0IGNhbiBhZmZlY3QgaG93IHRoZSBzeXN0ZW0gQ1BVIHBlcmZvcm1zLgorLy8hIC0gQURJIHByb3RvY29sIHVzZXMgOC1iaXQgd3JpdGUgYnVzIGNvbXBhcmVkIHRvIDMyLWJpdCB3cml0ZSBidXMgaW4gRERJLiBBREkgcHJvdG9jb2wgdXNlcyA0LWJpdCByZWFkCisvLyEgICBidXMgY29tcGFyZWQgdG8gMTYtYml0IHJlYWQgYnVzIGluIERESS4gSGVuY2UgYSAzMi1iaXQgcmVhZCBmcm9tIGFuIEFESSByZWdpc3RlciBpcyB0cmFuc2xhdGVkIGludG8gOAorLy8hICAgdHJhbnNhY3Rpb25zIGluIHRoZSBBREkgcHJvdG9jb2wuCisvLyEgLSBPbmUgdHJhbnNhY3Rpb24gb24gdGhlIEFESS9EREkgcHJvdG9jb2wgdGFrZXMgc2V2ZXJhbCBjbG9jayBjeWNsZXMgZm9yIHRoZSBtYXN0ZXIgdG8gY29tcGxldGUuCisvLyEgLSBBY2Nlc3MgdG8gQVVYIEFESS9EREkgcmVxdWlyZXMgdXNlIG9mIGEgc2VtYXBob3JlLiBUaGlzIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSBEcml2ZXJMaWIgd2hpY2ggdXNlcworLy8hICAgXHJlZiBBdXhBZGlEZGlTYWZlV3JpdGUoKSBhbmQgXHJlZiBBdXhBZGlEZGlTYWZlUmVhZCgpIHdoZW5ldmVyIEFVWCBpcyBhY2Nlc3NlZC4KKy8vISAtIEFESSBzbGF2ZSByZWdpc3RlcnMgYXJlIDgtYml0IHdpZGUuCisvLyEgLSBEREkgc2xhdmUgcmVnaXN0ZXJzIGFyZSAzMi1iaXQgd2lkZS4KKy8vISAtIEFESS9EREkgbWFzdGVyIHN1cHBvcnRzIG11bHRpcGxlIGRhdGEgd2lkdGggYWNjZXNzZXMgc2VlbiBmcm9tIHRoZSBzeXN0ZW0gQ1BVCisvLyEgICAoaG93ZXZlciwgbm90IGFsbCBiaXQgd2lkdGggYWNjZXNzZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgQVBJcyk6CisvLyEgICAtIFJlYWQ6IDgsIDE2LCAzMi1iaXQKKy8vISAgIC0gV3JpdGUKKy8vISAgICAgLSBEaXJlY3QgKHdyaXRlLCBzZXQsIGNsZWFyKTogOCwgMTYsIDMyLWJpdAorLy8hICAgICAtIE1hc2tlZDogNCwgOCwgMTYtYml0CisvLyEKKy8vISBNYWtpbmcgcG9zdGVkL2J1ZmZlcmVkIHdyaXRlcyBmcm9tIHRoZSBzeXN0ZW0gQ1BVIChkZWZhdWx0KSB0byB0aGUgQURJL0RESSBhbGxvd3MgdGhlIHN5c3RlbSBDUFUgdG8gY29udGludWUKKy8vISB3aGlsZSB0aGUgQURJL0RESSBtYXN0ZXIgaGFuZGxlcyB0aGUgdHJhbnNhY3Rpb25zIG9uIHRoZSBBREkvRERJIHByb3RvY29sLiBJZiB1c2luZyBub24tcG9zdGVkL25vbi1idWZmZXJlZAorLy8hIHdyaXRlcyB0aGUgc3lzdGVtIENQVSB3aWxsIHdhaXQgZm9yIEFESS9EREkgbWFzdGVyIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2FjdGlvbnMgdG8gdGhlIHNsYXZlIGJlZm9yZSBjb250aW51aW5nCisvLyEgZXhlY3V0aW9uLgorLy8hCisvLyEgUmVhZGluZyBmcm9tIEFESS9EREkgcmVxdWlyZXMgdGhhdCBhbGwgdHJhbnNhY3Rpb25zIG9uIHRoZSBBREkvRERJIHByb3RvY29sIGhhdmUgY29tcGxldGVkIGJlZm9yZSB0aGUgc3lzdGVtIENQVQorLy8hIHJlY2VpdmVzIHRoZSByZXNwb25zZSB0aHVzIHRoZSBwcm9ncmFtbWVyIG11c3QgdW5kZXJzdGFuZCB0aGF0IHRoZSByZXNwb25zZSB0aW1lIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBieXRlcworLy8hIHJlYWQuIEhvd2V2ZXIsIGR1ZSB0byB0aGUgJ3NldCcsICdjbGVhcicgYW5kICdtYXNrZWQgd3JpdGUnIGZlYXR1cmVzIG9mIHRoZSBBREkvRERJIG1vc3Qgd3JpdGVzIGNhbiBiZSBkb25lCisvLyEgd2l0aG91dCB0aGUgdHlwaWNhbCByZWFkLW1vZGlmeS13cml0ZSBzZXF1ZW5jZSB0aHVzIHJlZHVjaW5nIHRoZSBuZWVkIGZvciByZWFkcyB0byBhIG1pbmltdW0uCisvLyEKKy8vISBDb25zZXF1ZW50bHksIGlmIG1ha2luZyBwb3N0ZWQvYnVmZmVyZWQgd3JpdGVzIHRoZW4gdGhlIHdyaXR0ZW4gdmFsdWUgd2lsbCBub3QgdGFrZSBlZmZlY3QgaW4gdGhlCisvLyEgYW5hbG9nIGRvbWFpbiB1bnRpbCBzb21lIHBvaW50IGxhdGVyIGluIHRpbWUuIEFuIGFsdGVybmF0aXZlIHRvIG5vbi1wb3N0ZWQvbm9uLWJ1ZmZlcmVkIHdyaXRlcyAtIGluIG9yZGVyIHRvIG1ha2UKKy8vISBzdXJlIGEgd3JpdHRlbiB2YWx1ZSBoYXMgdGFrZW4gZWZmZWN0IC0gaXMgdG8gcmVhZCBmcm9tIHRoZSBzYW1lIEFESS9EREkgYXMgdGhlIHdyaXRlIGFzIHRoaXMgd2lsbCBrZWVwIHRoZSBzeXN0ZW0gQ1BVCisvLyEgd2FpdGluZyB1bnRpbCBib3RoIHRoZSB3cml0ZSBhbmQgdGhlIHJlYWQgaGF2ZSBjb21wbGV0ZWQuCisvLyEKKy8vISBcbm90ZQorLy8hIERvIE5PVCB1c2UgbWFza2VkIHdyaXRlIHdoZW4gd3JpdGluZyBiaXQgZmllbGRzIHNwYW5uaW5nIHRoZSAibWFza2VkIHdyaXRlIGJvdW5kYXJ5IiBpLmUuIHRoZSB3aWRlc3QgcG9zc2libGUKKy8vISBtYXNrZWQgd3JpdGUgdGhhdCB0aGUgcHJvdG9jb2wgc3VwcG9ydHMgKEFESSA9IDQgYml0cywgRERJID0gMTYgYml0cykuIFRoaXMgd2lsbCBwdXQgdGhlIGRldmljZSBpbnRvIGEKKy8vISB0ZW1wb3Jhcnkgc3RhdGUgLSB3aGljaCBpcyBwb3RlbnRpYWxseSBoYXJtZnVsIHRvIHRoZSBkZXZpY2UgLSBhcyB0aGUgYml0IGZpZWxkIHdpbGwgYmUgd3JpdHRlbiBvdmVyIHR3byB0cmFuc2FjdGlvbnMuCisvLyEgVGh1cyB0byB1c2UgbWFza2VkIHdyaXRlczoKKy8vISAtIEZvciBBREkgdGhlIGJpdCBmaWVsZChzKSBtdXN0IGJlIHdpdGhpbiBiaXQgMCB0byAzIChSRUdbMzowXSkgb3IgYml0IDQgdG8gNyAoUkVHWzc6NF0pLgorLy8hIC0gRm9yIERESSB0aGUgYml0IGZpZWxkKHMpIG11c3QgYmUgd2l0aGluIGJpdCAwIHRvIDE1IChSRUdbMTU6MF0pIG9yIGJpdCAxNiB0byAzMSAoUkVHWzMxOjE2XSkuCisvLyEKKy8vISBcbm90ZQorLy8hIElmIG1hc2tlZCB3cml0ZSBpcyBub3QgYWxsb3dlZCwgYSByZWd1bGFyIHJlYWQtbW9kaWZ5LXdyaXRlIGlzIG5lY2Vzc2FyeS4KKy8vIQorLy8hIEB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ncm91cF9hb25fZG9jLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ncm91cF9hb25fZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyMWQzOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dyb3VwX2Fvbl9kb2MuaApAQCAtMCwwICsxLDc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgZ3JvdXBfYW9uX2RvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0zMCAxMzowMzo1OSArMDIwMCAoV2VkLCAzMCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk3MQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vISBcYWRkdG9ncm91cCBhb25fZ3JvdXAKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19hb24gSW50cm9kdWN0aW9uCisvLyEKKy8vISBUaGUgQWx3YXlzLU9OIChBT04pIHZvbHRhZ2UgZG9tYWluIGNvbnRhaW5zIHRoZSBBVVggcG93ZXIgZG9tYWluLCBBT04gcG93ZXIgZG9tYWluLCBhbmQgSlRBRyBwb3dlciBkb21haW4uCisvLyEgVGhlIEFPTiBBUEkgaW5jbHVkZXMgZnVuY3Rpb25zIHRvIGFjY2VzcyB0aGUgQU9OIHBvd2VyIGRvbWFpbi4gRm9yIGZ1bmN0aW9ucyBhY2Nlc3NpbmcgdGhlIEFVWCBwb3dlciBkb21haW4KKy8vISBzZWUgdGhlIFtBVVggQVBJXShAcmVmIGF1eF9ncm91cCkuCisvLyEKKy8vISBUaGUgQU9OIHBvd2VyIGRvbWFpbiBjb250YWlucyBjaXJjdWl0cnkgdGhhdCBpcyBhbHdheXMgZW5hYmxlZCwgZXhjZXB0IGZvciB0aGUgc2h1dGRvd24gbW9kZQorLy8hIChkaWdpdGFsIHN1cHBseSBpcyBvZmYpLCBhbmQgdGhlIEFPTiBwb3dlciBkb21haW4gaXMgY2xvY2tlZCBhdCAzMi1rSHouCisvLyEKKy8vISBUaGUgQU9OIEFQSSBhY2Nlc3NlcyB0aGUgQU9OIHJlZ2lzdGVycyB0aHJvdWdoIGEgY29tbW9uIG1vZHVsZSBjYWxsZWQgQU9OIEludGVyZmFjZSAoQU9OIElGKSB3aGljaCBoYW5kbGVzIHRoZQorLy8hIGFjdHVhbCB0cmFuc2FjdGlvbnMgdG93YXJkcyB0aGUgbXVjaCBzbG93ZXIgQU9OIHJlZ2lzdGVycy4gQmVjYXVzZSBhY2Nlc3NpbmcgQU9OIGNhbiBjYXVzZSBhIHNpZ25pZmljYW50CisvLyEgZGVsYXkgaW4gdGVybXMgb2Ygc3lzdGVtIENQVSBjbG9jayBjeWNsZXMgaXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJhc2ljcyBhYm91dCBob3cgdGhlIEFPTiBJRgorLy8hIG9wZXJhdGVzLiBUaGUgZm9sbG93aW5nIGxpc3QgZGVzY3JpYmVzIGEgZmV3IG9mIHRoZSBtb3N0IHJlbGV2YW50IHByb3BlcnRpZXMgb2YgdGhlIEFPTiBJRiBzZWVuIGZyb20gdGhlIHN5c3RlbSBDUFU6CisvLyEgLSBcdGlfYm9sZHtTaGFkb3cgcmVnaXN0ZXJzfTogVGhlIHN5c3RlbSBDUFUgYWN0dWFsbHkgYWNjZXNzZXMgYSBzZXQgb2YgInNoYWRvdyByZWdpc3RlcnMiIHdoaWNoIGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgdG8gdGhlIEFPTiByZWdpc3RlcnMKKy8vISAgIGJ5IHRoZSBBT04gSUYgZXZlcnkgQU9OIGNsb2NrIGN5Y2xlLgorLy8hICAgLSBXcml0aW5nIGFuIEFPTiByZWdpc3RlciB2aWEgQU9OIElGIGNhbiB0YWtlIHVwIHRvIG9uZSBBT04gY2xvY2sgY3ljbGUgYmVmb3JlIHRha2luZyBlZmZlY3QgaW4gdGhlIEFPTiBkb21haW4uIEhvd2V2ZXIsIHRoZSBzeXN0ZW0gQ1BVIGNhbgorLy8hICAgICBjb250aW51ZSBleGVjdXRpbmcgd2l0aG91dCB3YWl0aW5nIGZvciB0aGlzLgorLy8hICAgLSBUaGUgQU9OIElGIHN1cHBvcnRzIG11bHRpcGxlIHdyaXRlcyB3aXRoaW4gdGhlIHNhbWUgQU9OIGNsb2NrIGN5Y2xlIHRodXMgc2V2ZXJhbCByZWdpc3RlcnMvYml0IGZpZWxkcyBjYW4gYmUgc3luY2hyb25pemVkIHNpbXVsdGFuZW91c2x5LgorLy8hICAgLSBSZWFkaW5nIGZyb20gQU9OIElGIHJldHVybnMgdGhlIHZhbHVlIGZyb20gbGFzdCB0aW1lIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIHdlcmUgc3luY2hyb25pemVkIChpZiBubyB3cml0ZXMgdG8gQU9OIElGIGhhdmUgb2NjdXJyZWQgc2luY2UpCisvLyEgICAgIHRodXMgdGhlIHZhbHVlIGNhbiBiZSB1cCB0byBvbmUgQU9OIGNsb2NrIGN5Y2xlIG9sZC4KKy8vISAgIC0gUmVhZGluZyBmcm9tIEFPTiBJRiBhZnRlciBhIHdyaXRlIChidXQgYmVmb3JlIHN5bmNocm9uaXphdGlvbiBoYXMgaGFwcGVuZWQpIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZSBmcm9tIHRoZSBzaGFkb3cgcmVnaXN0ZXIKKy8vISAgICAgYW5kIG5vdCB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSBBT04gcmVnaXN0ZXIuIFRodXMgZG9pbmcgbXVsdGlwbGUgcmVhZC1tb2RpZnktd3JpdGVzIHdpdGhpbiBvbmUgQU9OIGNsb2NrIGN5Y2xlIGlzIHN1cHBvcnRlZC4KKy8vISAtIFx0aV9ib2xke1JlYWQgZGVsYXl9OiBEdWUgdG8gYW4gYXN5bmNocm9ub3VzIGludGVyZmFjZSB0byB0aGUgQU9OIElGLCByZWFkaW5nIEFPTiByZWdpc3RlcnMgd2lsbCBnZW5lcmF0ZSBhIGZldyB3YWl0IGN5Y2xlcyB0aHVzIHN0YWxsaW5nCisvLyEgICB0aGUgc3lzdGVtIENQVSB1bnRpbCB0aGUgcmVhZCBjb21wbGV0ZXMuIFRoZXJlIGlzIG5vIGRlbGF5IG9uIHdyaXRlcyB0byBBT04gSUYgaWYgdXNpbmcgcG9zdGVkL2J1ZmZlcmVkIHdyaXRlcy4KKy8vISAtIFx0aV9ib2xke1N5bmNocm9uaXppbmd9OiBJZiBpdCBpcyByZXF1aXJlZCB0aGF0IGEgd3JpdGUgdG8gQU9OIHRha2VzIGVmZmVjdCBiZWZvcmUgY29udGludWluZyBjb2RlIGV4ZWN1dGlvbiBpdCBpcyBwb3NzaWJsZSB0byBkbyBhIGNvbmRpdGlvbmFsICJ3YWl0IGZvcgorLy8hICAgc3luY2hyb25pemF0aW9uIiBieSBjYWxsaW5nIFxyZWYgU3lzQ3RybEFvblN5bmMoKS4gVGhpcyB3aWxsIHdhaXQgZm9yIGFueSBwZW5kaW5nIHdyaXRlcyB0byBzeW5jaHJvbml6ZS4KKy8vISAtIFx0aV9ib2xke1VwZGF0aW5nfTogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkbyBhbiB1bmNvbmRpdGlvbmFsICJ3YWl0IGZvciBzeW5jaHJvbml6YXRpb24iLCBpbiBjYXNlIGEgbmV3IHJlYWQKKy8vISAgIHZhbHVlIGlzIHJlcXVpcmVkLCBieSBjYWxsaW5nIFxyZWYgU3lzQ3RybEFvblVwZGF0ZSgpLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGFmdGVyIHdha2UtdXAgdG8gbWFrZSBzdXJlIHRoZSBBT04gSUYgaGFzIGJlZW4KKy8vISAgIHN5bmNocm9uaXplZCBhdCBsZWFzdCBvbmNlIGJlZm9yZSByZWFkaW5nIHRoZSB2YWx1ZXMuCisvLyEKKy8vISBCZWxvdyBhcmUgYSBmZXcgZ3VpZGVsaW5lcyB0byB3cml0ZSBlZmZpY2llbnQgY29kZSBmb3IgQU9OIGFjY2VzcyBiYXNlZCBvbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgaW50ZXJmYWNlIHRvIHRoZSBBT04gcmVnaXN0ZXJzLgorLy8hIC0gQXZvaWQgc3luY2hyb25pemluZyB1bmxlc3MgcmVxdWlyZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiBJZiBzeW5jaHJvbml6YXRpb24gaXMgbmVlZGVkIHRoZW4gdHJ5IHRvIGdyb3VwL2FycmFuZ2UgQU9OIHdyaXRlcyB0bworLy8hICAgbWluaW1pemUgdGhlIG51bWJlciBvZiByZXF1aXJlZCBzeW5jaHJvbml6YXRpb25zLgorLy8hIC0gSWYgbW9kaWZ5aW5nIHNldmVyYWwgYml0IGZpZWxkcyB3aXRoaW4gYSBzaW5nbGUgQU9OIHJlZ2lzdGVyIGl0IGlzIHNsaWdodGx5IGZhc3RlciB0byBkbyBhIHNpbmdsZSByZWFkLCBtb2RpZnkgdGhlIGJpdCBmaWVsZHMsCisvLyEgICBhbmQgdGhlbiB3cml0ZSBpdCBiYWNrIHJhdGhlciB0aGFuIGRvaW5nIG11bHRpcGxlIGluZGVwZW5kZW50IHJlYWQtbW9kaWZ5LXdyaXRlcyAoZHVlIHRvIHRoZSByZWFkIGRlbGF5KS4KKy8vISAtIFVzaW5nIHBvc3RlZC9idWZmZXJlZCB3cml0ZXMgdG8gQU9OIChkZWZhdWx0KSBsZXRzIHRoZSBzeXN0ZW0gQ1BVIGNvbnRpbnVlIGV4ZWN1dGlvbiBpbW1lZGlhdGVseS4gVXNpbmcgbm9uLXBvc3RlZC9ub24tYnVmZmVyZWQKKy8vISAgIHdyaXRlcyB3aWxsIGdlbmVyYXRlIGEgZGVsYXkgc2ltaWxhciB0byBhIHJlYWQgYWNjZXNzLgorLy8hCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dyb3VwX2F1eF9kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dyb3VwX2F1eF9kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJkYTlmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3JvdXBfYXV4X2RvYy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBncm91cF9hdXhfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGF1eF9ncm91cAorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX2F1eCBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSBBVVggaXMgYSBjb2xsZWN0aXZlIGRlc2NyaXB0aW9uIG9mIGFsbCB0aGUgYW5hbG9nIHBlcmlwaGVyYWxzIChBREMsIGNvbXBhcmF0b3JzLCBhbmQgY3VycmVudCBzb3VyY2UpIGFuZAorLy8hIHRoZSBkaWdpdGFsIG1vZHVsZXMgaW4gdGhlIEFVWCBwb3dlciBkb21haW4gKEFVWF9QRCkgc3VjaCBhcyB0aGUgc2Vuc29yIGNvbnRyb2xsZXIsIHRpbWVycywgdGltZS10by1kaWdpdGFsCisvLyEgY29udmVydGVyLCBldGMuIEFVWF9QRCBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgQU9OIHZvbHRhZ2UgZG9tYWluIG9mIHRoZSBkZXZpY2UuCisvLyEKKy8vISBUaGUgc2Vuc29yIGNvbnRyb2xsZXIgaGFzIHRoZSBhYmlsaXR5IHRvCisvLyEgZG8gaXRzIG93biBwb3dlciBhbmQgY2xvY2sgbWFuYWdlbWVudCBvZiBBVVhfUEQsIGluZGVwZW5kZW50bHkgb2YgdGhlIE1DVSBkb21haW4uIFRoZSBzZW5zb3IKKy8vISBjb250cm9sbGVyIGNhbiBhbHNvIGNvbnRpbnVlIGRvaW5nIHRhc2tzIHdoaWxlIHRoZSBNQ1Ugc3Vic3lzdGVtIGlzIHBvd2VyZWQgZG93biwgYnV0IHdpdGggbGltaXRlZAorLy8hIHJlc291cmNlcyBjb21wYXJlZCB0byB0aGUgbGFyZ2VyIE1DVSBkb21haW4uCisvLyEKKy8vISBUaGUgQVVYIHBvd2VyIGRvbWFpbiBpcyBjb25uZWN0ZWQgdG8gdGhlIE1DVSBzeXN0ZW0gdGhyb3VnaCBhbiBhc3luY2hyb25vdXMgaW50ZXJmYWNlLCBlbnN1cmluZworLy8hIHRoYXQgYWxsIG1vZHVsZXMgY29ubmVjdGVkIHRvIHRoZSBBVVggYnVzIGFyZSBhY2Nlc3NpYmxlIGZyb20gdGhlIHN5c3RlbSBDUFUuCisvLyEgQWNjZXNzaW5nIHRoZSBhbmFsb2cgcGVyaXBoZXJhbHMgZnJvbSB0aGUgc3lzdGVtIENQVSBtdXN0IGJlIGRvbmUgYnkgdXNpbmcgVEktcHJvdmlkZWQKKy8vISBkcml2ZXJzIHRvIGVuc3VyZSBwcm9wZXIgY29udHJvbCBvZiBwb3dlciBtYW5hZ2VtZW50LgorLy8hCisvLyEgXG5vdGUgVG8gZWFzZSBkZXZlbG9wbWVudCBvZiBwcm9ncmFtIGNvZGUgcnVubmluZyBvbiB0aGUgc2Vuc29yIGNvbnRyb2xsZXIsIFRJIHByb3ZpZGVzIGEgdG9vbAorLy8hIGNoYWluIGZvciB3cml0aW5nIHNvZnR3YXJlIGZvciB0aGUgY29udHJvbGxlciwgU2Vuc29yIENvbnRyb2xsZXIgU3R1ZGlvIChTQ1MpLCB3aGljaCBpcyBhIGZ1bGx5CisvLyEgaW50ZWdyYXRlZCB0b29sIGNvbnNpc3Rpbmcgb2YgYW4gSURFLCBjb21waWxlciwgYXNzZW1ibGVyLCBhbmQgbGlua2VyLgorLy8hCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2kyYy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyMTg5NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2kyYy5jCkBAIC0wLDAgKzEsMjA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaTJjLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTExLTE2IDE5OjQxOjQ3ICswMTAwIChNb24sIDE2IE5vdiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ1MDk0CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgSTJDIG1vZHVsZQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9pMmMuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIEkyQ01hc3RlckluaXRFeHBDbGsKKyAgICAjZGVmaW5lIEkyQ01hc3RlckluaXRFeHBDbGsgICAgICAgICAgICAgTk9ST01fSTJDTWFzdGVySW5pdEV4cENsaworICAgICN1bmRlZiAgSTJDTWFzdGVyRXJyCisgICAgI2RlZmluZSBJMkNNYXN0ZXJFcnIgICAgICAgICAgICAgICAgICAgIE5PUk9NX0kyQ01hc3RlckVycgorICAgICN1bmRlZiAgSTJDSW50UmVnaXN0ZXIKKyAgICAjZGVmaW5lIEkyQ0ludFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgTk9ST01fSTJDSW50UmVnaXN0ZXIKKyAgICAjdW5kZWYgIEkyQ0ludFVucmVnaXN0ZXIKKyAgICAjZGVmaW5lIEkyQ0ludFVucmVnaXN0ZXIgICAgICAgICAgICAgICAgTk9ST01fSTJDSW50VW5yZWdpc3RlcgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgSW5pdGlhbGl6ZXMgdGhlIEkyQyBNYXN0ZXIgYmxvY2sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJMkNNYXN0ZXJJbml0RXhwQ2xrKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySTJDQ2xrLAorICAgICAgICAgICAgICAgICAgICBib29sIGJGYXN0KQoreworICAgIHVpbnQzMl90IHVpMzJTQ0xGcmVxOworICAgIHVpbnQzMl90IHVpMzJUUFI7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIE11c3QgZW5hYmxlIHRoZSBkZXZpY2UgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCisgICAgLy8KKyAgICBJMkNNYXN0ZXJFbmFibGUoSTJDMF9CQVNFKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBkZXNpcmVkIFNDTCBzcGVlZC4KKyAgICAvLworICAgIGlmKGJGYXN0ID09IHRydWUpCisgICAgeworICAgICAgICB1aTMyU0NMRnJlcSA9IDQwMDAwMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWkzMlNDTEZyZXEgPSAxMDAwMDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDb21wdXRlIHRoZSBjbG9jayBkaXZpZGVyIHRoYXQgYWNoaWV2ZXMgdGhlIGZhc3Rlc3Qgc3BlZWQgbGVzcyB0aGFuIG9yCisgICAgLy8gZXF1YWwgdG8gdGhlIGRlc2lyZWQgc3BlZWQuIFRoZSBudW1lcmF0b3IgaXMgYmlhc2VkIHRvIGZhdm9yIGEgbGFyZ2VyCisgICAgLy8gY2xvY2sgZGl2aWRlciBzbyB0aGF0IHRoZSByZXN1bHRpbmcgY2xvY2sgaXMgYWx3YXlzIGxlc3MgdGhhbiBvciBlcXVhbAorICAgIC8vIHRvIHRoZSBkZXNpcmVkIGNsb2NrLCBuZXZlciBncmVhdGVyLgorICAgIC8vCisgICAgdWkzMlRQUiA9ICgodWkzMkkyQ0NsayArICgyICogMTAgKiB1aTMyU0NMRnJlcSkgLSAxKSAvICgyICogMTAgKiB1aTMyU0NMRnJlcSkpIC0gMTsKKyAgICBIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19NVFBSKSA9IHVpMzJUUFI7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0cyB0aGUgZXJyb3Igc3RhdHVzIG9mIHRoZSBJMkMgTWFzdGVyIG1vZHVsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitJMkNNYXN0ZXJFcnIodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgdWludDMyX3QgdWkzMkVycjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByYXcgZXJyb3Igc3RhdGUuCisgICAgLy8KKyAgICB1aTMyRXJyID0gSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fTVNUQVQpOworCisgICAgLy8KKyAgICAvLyBJZiB0aGUgSTJDIG1hc3RlciBpcyBidXN5LCB0aGVuIGFsbCB0aGUgb3RoZXIgc3RhdHVzIGJpdHMgYXJlIGludmFsaWQsCisgICAgLy8gYW5kIHRoZXJlIGlzIG5vIGVycm9yIHRvIHJlcG9ydC4KKyAgICAvLworICAgIGlmKHVpMzJFcnIgJiBJMkNfTVNUQVRfQlVTWSkKKyAgICB7CisgICAgICAgIHJldHVybihJMkNfTUFTVEVSX0VSUl9OT05FKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENoZWNrIGZvciBlcnJvcnMuCisgICAgLy8KKyAgICBpZih1aTMyRXJyICYgKEkyQ19NU1RBVF9FUlIgfCBJMkNfTVNUQVRfQVJCTFNUKSkKKyAgICB7CisgICAgICAgIHJldHVybih1aTMyRXJyICYgKEkyQ19NU1RBVF9BUkJMU1QgfCBJMkNfTVNUQVRfREFUQUNLX04gfCBJMkNfTVNUQVRfQURSQUNLX04pKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuKEkyQ19NQVNURVJfRVJSX05PTkUpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBJMkMgbW9kdWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSTJDSW50UmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSkKK3sKKyAgICB1aW50MzJfdCB1aTMySW50OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGludGVycnVwdCBudW1iZXIuCisgICAgLy8KKyAgICB1aTMySW50ID0gSU5UX0kyQ19JUlE7CisKKyAgICAvLworICAgIC8vIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgcmV0dXJuaW5nIGFuIGVycm9yIGlmIGFuIGVycm9yIG9jY3Vycy4KKyAgICAvLworICAgIEludFJlZ2lzdGVyKHVpMzJJbnQsIHBmbkhhbmRsZXIpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIEkyQyBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBJbnRFbmFibGUodWkzMkludCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBJMkMgbW9kdWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSTJDSW50VW5yZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICB1aW50MzJfdCB1aTMySW50OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGludGVycnVwdCBudW1iZXIuCisgICAgLy8KKyAgICB1aTMySW50ID0gSU5UX0kyQ19JUlE7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIGludGVycnVwdC4KKyAgICAvLworICAgIEludERpc2FibGUodWkzMkludCk7CisKKyAgICAvLworICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50VW5yZWdpc3Rlcih1aTMySW50KTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2kyYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4YmQ1MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2kyYy5oCkBAIC0wLDAgKzEsMTA3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGkyYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wOS0yMSAxNToxOTozNiArMDIwMCAoTW9uLCAyMSBTZXAgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NDYyOQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBJMkMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHBlcmlwaGVyYWxfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGkyY19hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0kyQ19IX18KKyNkZWZpbmUgX19JMkNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaTJjLmg+CisjaW5jbHVkZSA8aW5jL2h3X3N5c2N0bC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvY3B1Lmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIEkyQ01hc3RlckluaXRFeHBDbGsgICAgICAgICAgICAgTk9ST01fSTJDTWFzdGVySW5pdEV4cENsaworICAgICNkZWZpbmUgSTJDTWFzdGVyRXJyICAgICAgICAgICAgICAgICAgICBOT1JPTV9JMkNNYXN0ZXJFcnIKKyAgICAjZGVmaW5lIEkyQ0ludFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgTk9ST01fSTJDSW50UmVnaXN0ZXIKKyAgICAjZGVmaW5lIEkyQ0ludFVucmVnaXN0ZXIgICAgICAgICAgICAgICAgTk9ST01fSTJDSW50VW5yZWdpc3RlcgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJMkMgTWFzdGVyIGNvbW1hbmRzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJMkNfTUFTVEVSX0NNRF9TSU5HTEVfU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEkyQ19NQVNURVJfQ01EX1NJTkdMRV9SRUNFSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSTJDX01BU1RFUl9DTURfQlVSU1RfU0VORF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBJMkNfTUFTVEVSX0NNRF9CVVJTVF9TRU5EX0NPTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfRklOSVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgSTJDX01BU1RFUl9DTURfQlVSU1RfU0VORF9FUlJPUl9TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMkNfTUFTVEVSX0NNRF9CVVJTVF9SRUNFSVZFX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBiCisjZGVmaW5lIEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfQ09OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSTJDX01BU1RFUl9DTURfQlVSU1RfUkVDRUlWRV9GSU5JU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBJMkNfTUFTVEVSX0NNRF9CVVJTVF9SRUNFSVZFX0VSUk9SX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJMkMgTWFzdGVyIGVycm9yIHN0YXR1cworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSTJDX01BU1RFUl9FUlJfTk9ORSAgICAgMAorI2RlZmluZSBJMkNfTUFTVEVSX0VSUl9BRERSX0FDSyAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19NQVNURVJfRVJSX0RBVEFfQUNLIDB4MDAwMDAwMDgKKyNkZWZpbmUgSTJDX01BU1RFUl9FUlJfQVJCX0xPU1QgMHgwMDAwMDAxMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSTJDIFNsYXZlIGFjdGlvbiByZXF1ZXN0cworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSTJDX1NMQVZFX0FDVF9OT05FICAgICAgMAorI2RlZmluZSBJMkNfU0xBVkVfQUNUX1JSRVEgICAgICAweDAwMDAwMDAxICAvLyBNYXN0ZXIgaGFzIHNlbnQgZGF0YQorI2RlZmluZSBJMkNfU0xBVkVfQUNUX1RSRVEgICAgICAweDAwMDAwMDAyICAvLyBNYXN0ZXIgaGFzIHJlcXVlc3RlZCBkYXRhCisjZGVmaW5lIEkyQ19TTEFWRV9BQ1RfUlJFUV9GQlIgIDB4MDAwMDAwMDUgIC8vIE1hc3RlciBoYXMgc2VudCBmaXJzdCBieXRlCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJMkMgU2xhdmUgaW50ZXJydXB0cworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSTJDX1NMQVZFX0lOVF9TVE9QICAgICAgMHgwMDAwMDAwNCAgLy8gU3RvcCBDb25kaXRpb24gSW50ZXJydXB0LgorI2RlZmluZSBJMkNfU0xBVkVfSU5UX1NUQVJUICAgICAweDAwMDAwMDAyICAvLyBTdGFydCBDb25kaXRpb24gSW50ZXJydXB0LgorI2RlZmluZSBJMkNfU0xBVkVfSU5UX0RBVEEgICAgICAweDAwMDAwMDAxICAvLyBEYXRhIEludGVycnVwdC4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZmRlZiBEUklWRVJMSUJfREVCVUcKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGludGVybmFsCisvLyEKKy8vISBcYnJpZWYgQ2hlY2tzIGFuIEkyQyBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSBJMkMgcG9ydCBiYXNlIGFkZHJlc3MgaXMgdmFsaWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGUgYmFzZSBhZGRyZXNzIGlzIHZhbGlkIGFuZCBcYyBmYWxzZQorLy8hIG90aGVyd2lzZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyBib29sCitJMkNCYXNlVmFsaWQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgcmV0dXJuKHVpMzJCYXNlID09IEkyQzBfQkFTRSk7Cit9CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIEkyQyBNYXN0ZXIgYmxvY2suCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIG9wZXJhdGlvbiBvZiB0aGUgSTJDIE1hc3RlciBibG9jay4gVXBvbgorLy8hIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIEkyQyBibG9jaywgdGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUgc2V0IHRoZQorLy8hIGJ1cyBzcGVlZCBmb3IgdGhlIG1hc3RlciwgYW5kIHdpbGwgaGF2ZSBlbmFibGVkIHRoZSBJMkMgTWFzdGVyIGJsb2NrLgorLy8hCisvLyEgSWYgdGhlIHBhcmFtZXRlciBcYyBiRmFzdCBpcyBcYyB0cnVlLCB0aGVuIHRoZSBtYXN0ZXIgYmxvY2sgd2lsbCBiZSBzZXQgdXAKKy8vISB0byB0cmFuc2ZlciBkYXRhIGF0IDQwMCBrYnBzOyBvdGhlcndpc2UsIGl0IHdpbGwgYmUgc2V0IHVwIHRvIHRyYW5zZmVyIGRhdGEKKy8vISBhdCAxMDAga2Jwcy4KKy8vIQorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJJMkNDbGsgaXMgdGhlIHJhdGUgb2YgdGhlIGNsb2NrIHN1cHBsaWVkIHRvIHRoZSBJMkMgbW9kdWxlLgorLy8hIFxwYXJhbSBiRmFzdCBzZXQgdXAgZm9yIGZhc3QgZGF0YSB0cmFuc2ZlcnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJMkNNYXN0ZXJJbml0RXhwQ2xrKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySTJDQ2xrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJGYXN0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29udHJvbHMgdGhlIHN0YXRlIG9mIHRoZSBJMkMgTWFzdGVyIG1vZHVsZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb250cm9sIHRoZSBzdGF0ZSBvZiB0aGUgTWFzdGVyIG1vZHVsZSBzZW5kIGFuZAorLy8hIHJlY2VpdmUgb3BlcmF0aW9ucy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyQ21kIGlzIHRoZSBjb21tYW5kIHRvIGJlIGlzc3VlZCBieSB0aGUgSTJDIE1hc3RlciBtb2R1bGUKKy8vISBUaGUgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIEkyQ19NQVNURVJfQ01EX1NJTkdMRV9TRU5ECisvLyEgLSBccmVmIEkyQ19NQVNURVJfQ01EX1NJTkdMRV9SRUNFSVZFCisvLyEgLSBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfU1RBUlQKKy8vISAtIFxyZWYgSTJDX01BU1RFUl9DTURfQlVSU1RfU0VORF9DT05UCisvLyEgLSBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfRklOSVNICisvLyEgLSBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfRVJST1JfU1RPUAorLy8hIC0gXHJlZiBJMkNfTUFTVEVSX0NNRF9CVVJTVF9SRUNFSVZFX1NUQVJUCisvLyEgLSBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfQ09OVAorLy8hIC0gXHJlZiBJMkNfTUFTVEVSX0NNRF9CVVJTVF9SRUNFSVZFX0ZJTklTSAorLy8hIC0gXHJlZiBJMkNfTUFTVEVSX0NNRF9CVVJTVF9SRUNFSVZFX0VSUk9SX1NUT1AKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMkNNYXN0ZXJDb250cm9sKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ21kKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKyAgICBBU1NFUlQoKHVpMzJDbWQgPT0gSTJDX01BU1RFUl9DTURfU0lOR0xFX1NFTkQpIHx8CisgICAgLy8gICAgICh1aTMyQ21kID09IEkyQ19NQVNURVJfQ01EX1NJTkdMRV9SRUNFSVZFKSB8fCAtPiBFcXVhbCB0byBTSU5HTEVfU0VORAorICAgICAgICAgICAodWkzMkNtZCA9PSBJMkNfTUFTVEVSX0NNRF9CVVJTVF9TRU5EX1NUQVJUKSB8fAorICAgICAgICAgICAodWkzMkNtZCA9PSBJMkNfTUFTVEVSX0NNRF9CVVJTVF9TRU5EX0NPTlQpIHx8CisgICAgICAgICAgICh1aTMyQ21kID09IEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfRklOSVNIKSB8fAorICAgICAgICAgICAodWkzMkNtZCA9PSBJMkNfTUFTVEVSX0NNRF9CVVJTVF9TRU5EX0VSUk9SX1NUT1ApIHx8CisgICAgICAgICAgICh1aTMyQ21kID09IEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfU1RBUlQpIHx8CisgICAgICAgICAgICh1aTMyQ21kID09IEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfQ09OVCkgfHwKKyAgICAgICAgICAgKHVpMzJDbWQgPT0gSTJDX01BU1RFUl9DTURfQlVSU1RfUkVDRUlWRV9GSU5JU0gpIHx8CisgICAgICAgICAgICh1aTMyQ21kID09IEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfRVJST1JfU1RPUCkpOworCisgICAgLy8KKyAgICAvLyBTZW5kIHRoZSBjb21tYW5kLgorICAgIC8vCisgICAgSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fTUNUUkwpID0gdWkzMkNtZDsKKworICAgIC8vCisgICAgLy8gRGVsYXkgbWluaW11bSBmb3VyIGN5Y2xlcyBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgSTJDX09fTVNUQVQKKyAgICAvLyByZWdpc3RlciBoYXMgYmVlbiBjb3JyZWN0bHkgdXBkYXRlZCBiZWZvcmUgZnVuY3Rpb24gZXhpdAorICAgIC8vCisgICAgQ1BVZGVsYXkoMik7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIGFkZHJlc3MgdGhhdCB0aGUgSTJDIE1hc3RlciB3aWxsIHBsYWNlIG9uIHRoZSBidXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBhZGRyZXNzIHRoYXQgdGhlIEkyQyBNYXN0ZXIgd2lsbCBwbGFjZSBvbiB0aGUKKy8vISBidXMgd2hlbiBpbml0aWF0aW5nIGEgdHJhbnNhY3Rpb24uIFdoZW4gdGhlIFxlIGJSZWNlaXZlIHBhcmFtZXRlciBpcyBzZXQKKy8vISB0byBcYiB0cnVlLCB0aGUgYWRkcmVzcyB3aWxsIGluZGljYXRlIHRoYXQgdGhlIEkyQyBNYXN0ZXIgaXMgaW5pdGlhdGluZyBhCisvLyEgcmVhZCBmcm9tIHRoZSBzbGF2ZTsgb3RoZXJ3aXNlIHRoZSBhZGRyZXNzIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgSTJDCisvLyEgTWFzdGVyIGlzIGluaXRpYXRpbmcgYSB3cml0ZSB0byB0aGUgc2xhdmUuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIG1vZHVsZS4KKy8vISBccGFyYW0gdWk4U2xhdmVBZGRyIGlzIGEgNy1iaXQgc2xhdmUgYWRkcmVzcworLy8hIFxwYXJhbSBiUmVjZWl2ZSBmbGFnIGluZGljYXRlcyB0aGUgdHlwZSBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHNsYXZlLgorLy8hIC0gXGMgdHJ1ZSAgOiBJMkMgTWFzdGVyIGlzIGluaXRpYXRpbmcgYSByZWFkIGZyb20gdGhlIHNsYXZlLgorLy8hIC0gXGMgZmFsc2UgOiBJMkMgTWFzdGVyIGlzIGluaXRpYXRpbmcgYSB3cml0ZSB0byB0aGUgc2xhdmUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJDTWFzdGVyU2xhdmVBZGRyU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50OF90IHVpOFNsYXZlQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICBib29sIGJSZWNlaXZlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKyAgICBBU1NFUlQoISh1aThTbGF2ZUFkZHIgJiAweDgwKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgYWRkcmVzcyBvZiB0aGUgc2xhdmUgd2l0aCB3aGljaCB0aGUgbWFzdGVyIHdpbGwgY29tbXVuaWNhdGUuCisgICAgLy8KKyAgICBIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19NU0EpID0gKHVpOFNsYXZlQWRkciA8PCAxKSB8IGJSZWNlaXZlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSBJMkMgTWFzdGVyIGJsb2NrLgorLy8hCisvLyEgVGhpcyB3aWxsIGVuYWJsZSBvcGVyYXRpb24gb2YgdGhlIEkyQyBNYXN0ZXIgYmxvY2suCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMkNNYXN0ZXJFbmFibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLyBFbmFibGUgdGhlIGNsb2NrIGZvciB0aGUgbWFzdGVyLgorICAgIEhXUkVHQklUVyhJMkMwX0JBU0UgKyBJMkNfT19NQ1IsIEkyQ19NQ1JfTUZFX0JJVE4pID0gMTsKKworICAgIC8vIEVuYWJsZSB0aGUgbWFzdGVyIGJsb2NrLgorICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01DVFJMKSA9IEkyQ19NQ1RSTF9SVU47Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSBJMkMgbWFzdGVyIGJsb2NrLgorLy8hCisvLyEgVGhpcyB3aWxsIGRpc2FibGUgb3BlcmF0aW9uIG9mIHRoZSBJMkMgbWFzdGVyIGJsb2NrLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJDTWFzdGVyRGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vIERpc2FibGUgdGhlIG1hc3RlciBibG9jay4KKyAgICBIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19NQ1RSTCkgPSAwOworCisgICAgLy8gRGlzYWJsZSB0aGUgY2xvY2sgZm9yIHRoZSBtYXN0ZXIuCisgICAgSFdSRUdCSVRXKEkyQzBfQkFTRSArIEkyQ19PX01DUiwgSTJDX01DUl9NRkVfQklUTikgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIEkyQyBNYXN0ZXIgaXMgYnVzeS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBJMkMgTWFzdGVyIGlzCisvLyEgYnVzeSB0cmFuc21pdHRpbmcgb3IgcmVjZWl2aW5nIGRhdGEuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgSTJDIE1hc3RlcjoKKy8vISAtIFxjIHRydWUgIDogSTJDIE1hc3RlciBpcyBidXN5LgorLy8hIC0gXGMgZmFsc2UgOiBJMkMgTWFzdGVyIGlzIG5vdCBidXN5LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitJMkNNYXN0ZXJCdXN5KHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBidXN5IHN0YXR1cy4KKyAgICAvLworICAgIGlmKEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01TVEFUKSAmIEkyQ19NU1RBVF9CVVNZKQorICAgIHsKKyAgICAgICAgcmV0dXJuKHRydWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oZmFsc2UpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJMkMgYnVzIGlzIGJ1c3kuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gaW5kaWNhdGlvbiBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgSTJDIGJ1cyBpcyBidXN5LgorLy8hIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaW4gYSBtdWx0aS1tYXN0ZXIgZW52aXJvbm1lbnQgdG8gZGV0ZXJtaW5lIGlmCisvLyEgYW5vdGhlciBtYXN0ZXIgaXMgY3VycmVudGx5IHVzaW5nIHRoZSBidXMuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgdGhlIEkyQyBidXM6CisvLyEgLSBcYyB0cnVlICA6IEkyQyBidXMgaXMgYnVzeS4KKy8vISAtIFxjIGZhbHNlIDogSTJDIGJ1cyBpcyBub3QgYnVzeS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorSTJDTWFzdGVyQnVzQnVzeSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgYnVzIGJ1c3kgc3RhdHVzLgorICAgIC8vCisgICAgaWYoSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fTVNUQVQpICYgSTJDX01TVEFUX0JVU0JTWSkKKyAgICB7CisgICAgICAgIHJldHVybih0cnVlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuKGZhbHNlKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlY2VpdmVzIGEgYnl0ZSB0aGF0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIEkyQyBNYXN0ZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJlYWRzIGEgYnl0ZSBvZiBkYXRhIGZyb20gdGhlIEkyQyBNYXN0ZXIgRGF0YSBSZWdpc3Rlci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgbW9kdWxlLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBieXRlIHJlY2VpdmVkIGZyb20gYnkgdGhlIEkyQyBNYXN0ZXIsIGNhc3QgYXMgYW4KKy8vISB1aW50MzJfdC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0kyQ01hc3RlckRhdGFHZXQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBSZWFkIGEgYnl0ZS4KKyAgICAvLworICAgIHJldHVybihIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19NRFIpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVHJhbnNtaXRzIGEgYnl0ZSBmcm9tIHRoZSBJMkMgTWFzdGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHBsYWNlIHRoZSBzdXBwbGllZCBkYXRhIGludG8gSTJDIE1hc3RlciBEYXRhIFJlZ2lzdGVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBtb2R1bGUuCisvLyEgXHBhcmFtIHVpOERhdGEgaXMgdGhlIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgYnkgdGhlIEkyQyBNYXN0ZXIKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMkNNYXN0ZXJEYXRhUHV0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50OF90IHVpOERhdGEpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgYnl0ZS4KKyAgICAvLworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01EUikgPSB1aThEYXRhOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBlcnJvciBzdGF0dXMgb2YgdGhlIEkyQyBNYXN0ZXIgbW9kdWxlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG9idGFpbiB0aGUgZXJyb3Igc3RhdHVzIG9mIHRoZSBNYXN0ZXIgbW9kdWxlIHNlbmQKKy8vISBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGVycm9yIHN0YXR1cyBvZiB0aGUgTWFzdGVyIG1vZHVsZToKKy8vISAtIFxyZWYgSTJDX01BU1RFUl9FUlJfTk9ORQorLy8hIC0gXHJlZiBJMkNfTUFTVEVSX0VSUl9BRERSX0FDSworLy8hIC0gXHJlZiBJMkNfTUFTVEVSX0VSUl9EQVRBX0FDSworLy8hIC0gXHJlZiBJMkNfTUFTVEVSX0VSUl9BUkJfTE9TVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBJMkNNYXN0ZXJFcnIodWludDMyX3QgdWkzMkJhc2UpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSBJMkMgTWFzdGVyIGludGVycnVwdC4KKy8vIQorLy8hIEVuYWJsZXMgdGhlIEkyQyBNYXN0ZXIgaW50ZXJydXB0IHNvdXJjZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgbW9kdWxlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyQ01hc3RlckludEVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgbWFzdGVyIGludGVycnVwdC4KKyAgICAvLworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01JTVIpID0gSTJDX01JTVJfSU07Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSBJMkMgTWFzdGVyIGludGVycnVwdC4KKy8vIQorLy8hIERpc2FibGVzIHRoZSBJMkMgTWFzdGVyIGludGVycnVwdCBzb3VyY2UuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMkNNYXN0ZXJJbnREaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgbWFzdGVyIGludGVycnVwdC4KKyAgICAvLworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01JTVIpID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIEkyQyBNYXN0ZXIgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGUgSTJDIE1hc3RlciBpbnRlcnJ1cHQgc291cmNlIGlzIGNsZWFyZWQsIHNvIHRoYXQgaXQgbm8gbG9uZ2VyIGFzc2VydHMuCisvLyEgVGhpcyBtdXN0IGJlIGRvbmUgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGtlZXAgaXQgZnJvbSBiZWluZyBjYWxsZWQKKy8vISBhZ2FpbiBpbW1lZGlhdGVseSB1cG9uIGV4aXQuCisvLyEKKy8vISBcbm90ZSBEdWUgdG8gd3JpdGUgYnVmZmVycyBhbmQgc3luY2hyb25pemVycyBpbiB0aGUgc3lzdGVtIGl0IG1heSB0YWtlIHNldmVyYWwKKy8vISBjbG9jayBjeWNsZXMgZnJvbSBhIHJlZ2lzdGVyIHdyaXRlIGNsZWFyaW5nIGFuIGV2ZW50IGluIGEgbW9kdWxlIGFuZCB1bnRpbCB0aGUKKy8vISBldmVudCBpcyBhY3R1YWxseSBjbGVhcmVkIGluIHRoZSBOVklDIG9mIHRoZSBzeXN0ZW0gQ1BVLiBJdCBpcyByZWNvbW1lbmRlZCB0bworLy8hIGNsZWFyIHRoZSBldmVudCBzb3VyY2UgZWFybHkgaW4gdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKElTUikgdG8gYWxsb3cKKy8vISB0aGUgZXZlbnQgY2xlYXIgdG8gcHJvcGFnYXRlIHRvIHRoZSBOVklDIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSLgorLy8hIEF0IHRoZSBzYW1lIHRpbWUsIGFuIGVhcmx5IGV2ZW50IGNsZWFyIGFsbG93cyBuZXcgZXZlbnRzIG9mIHRoZSBzYW1lIHR5cGUgdG8gYmUKKy8vISBwZW5kZWQgaW5zdGVhZCBvZiBpZ25vcmVkIGlmIHRoZSBldmVudCBpcyBjbGVhcmVkIGxhdGVyIGluIHRoZSBJU1IuCisvLyEgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwcm9ncmFtbWVyIHRvIG1ha2Ugc3VyZSB0aGF0IGVub3VnaCB0aW1lIGhhcyBwYXNzZWQKKy8vISBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUiB0byBhdm9pZCBmYWxzZSByZS10cmlnZ2VyaW5nIG9mIHRoZSBjbGVhcmVkIGV2ZW50LgorLy8hIEEgc2ltcGxlLCBhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgb3B0aW1hbCwgd2F5IG9mIGNsZWFyaW5nIGFuIGV2ZW50IGJlZm9yZQorLy8hIHJldHVybmluZyBmcm9tIHRoZSBJU1IgaXM6CisvLyEgLSMgV3JpdGUgdG8gY2xlYXIgZXZlbnQgKGludGVycnVwdCBzb3VyY2UpLiAoYnVmZmVyZWQgd3JpdGUpCisvLyEgLSMgRHVtbXkgcmVhZCBmcm9tIHRoZSBldmVudCBzb3VyY2UgbW9kdWxlLiAobWFraW5nIHN1cmUgdGhlIHdyaXRlIGhhcyBwcm9wYWdhdGVkKQorLy8hIC0jIFdhaXQgdHdvIHN5c3RlbSBDUFUgY2xvY2sgY3ljbGVzICh1c2VyIGNvZGUgb3IgdHdvIE5PUHMpLiAoYWxsb3dpbmcgY2xlYXJlZCBldmVudCB0byBwcm9wYWdhdGUgdGhyb3VnaCBhbnkgc3luY2hyb25pemVycykKKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgbW9kdWxlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyQ01hc3RlckludENsZWFyKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIEkyQyBtYXN0ZXIgaW50ZXJydXB0IHNvdXJjZS4KKyAgICAvLworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01JQ1IpID0gSTJDX01JQ1JfSUM7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgSTJDIE1hc3RlciBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hCisvLyEgVGhpcyByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZvciB0aGUgSTJDIE1hc3RlciBtb2R1bGUuIEVpdGhlciB0aGUKKy8vISByYXcgaW50ZXJydXB0IHN0YXR1cyBvciB0aGUgc3RhdHVzIG9mIGludGVycnVwdHMgdGhhdCBhcmUgYWxsb3dlZCB0bworLy8hIHJlZmxlY3QgdG8gdGhlIHByb2Nlc3NvciBjYW4gYmUgcmV0dXJuZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIE1hc3RlciBtb2R1bGUuCisvLyEgXHBhcmFtIGJNYXNrZWQgc2VsZWN0cyBlaXRoZXIgcmF3IG9yIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hIC0gXGMgZmFsc2UgOiBSYXcgaW50ZXJydXB0IHN0YXR1cyBpcyByZXF1ZXN0ZWQuCisvLyEgLSBcYyB0cnVlICA6IE1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzIGlzIHJlcXVlc3RlZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hIC0gXGMgdHJ1ZSAgOiBBY3RpdmUuCisvLyEgLSBcYyBmYWxzZSA6IE5vdCBhY3RpdmUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0kyQ01hc3RlckludFN0YXR1cyh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiTWFza2VkKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIGVpdGhlciB0aGUgaW50ZXJydXB0IHN0YXR1cyBvciB0aGUgcmF3IGludGVycnVwdCBzdGF0dXMgYXMKKyAgICAvLyByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZihiTWFza2VkKQorICAgIHsKKyAgICAgICAgcmV0dXJuKChIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19NTUlTKSkgPyB0cnVlIDogZmFsc2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oKEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01SSVMpKSA/IHRydWUgOiBmYWxzZSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSBJMkMgU2xhdmUgYmxvY2suCisvLyEKKy8vISBUaGlzIHdpbGwgZW5hYmxlIG9wZXJhdGlvbiBvZiB0aGUgSTJDIFNsYXZlIGJsb2NrLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBTbGF2ZSBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJDU2xhdmVFbmFibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLyBFbmFibGUgdGhlIGNsb2NrIHRvIHRoZSBzbGF2ZSBibG9jay4KKyAgICBIV1JFR0JJVFcoSTJDMF9CQVNFICsgSTJDX09fTUNSLCBJMkNfTUNSX1NGRV9CSVROKSA9IDE7CisKKyAgICAvLyBFbmFibGUgdGhlIHNsYXZlLgorICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX1NDVEwpID0gSTJDX1NDVExfREE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEluaXRpYWxpemVzIHRoZSBJMkMgU2xhdmUgYmxvY2suCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIG9wZXJhdGlvbiBvZiB0aGUgSTJDIFNsYXZlIGJsb2NrLiBVcG9uCisvLyEgc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbiBvZiB0aGUgSTJDIGJsb2NrcywgdGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUgc2V0CisvLyEgdGhlIHNsYXZlIGFkZHJlc3MgYW5kIGhhdmUgZW5hYmxlZCB0aGUgSTJDIFNsYXZlIGJsb2NrLgorLy8hCisvLyEgVGhlIHBhcmFtZXRlciBcYyB1aThTbGF2ZUFkZHIgaXMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBjb21wYXJlZCBhZ2FpbnN0IHRoZQorLy8hIHNsYXZlIGFkZHJlc3Mgc2VudCBieSBhbiBJMkMgbWFzdGVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBTbGF2ZSBtb2R1bGUuCisvLyEgXHBhcmFtIHVpOFNsYXZlQWRkciBpcyB0aGUgNy1iaXQgc2xhdmUgYWRkcmVzcy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMkNTbGF2ZUluaXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQ4X3QgdWk4U2xhdmVBZGRyKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKyAgICBBU1NFUlQoISh1aThTbGF2ZUFkZHIgJiAweDgwKSk7CisKKyAgICAvLworICAgIC8vIE11c3QgZW5hYmxlIHRoZSBkZXZpY2UgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCisgICAgLy8KKyAgICBJMkNTbGF2ZUVuYWJsZShJMkMwX0JBU0UpOworCisgICAgLy8KKyAgICAvLyBTZXQgdXAgdGhlIHNsYXZlIGFkZHJlc3MuCisgICAgLy8KKyAgICBIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19TT0FSKSA9IHVpOFNsYXZlQWRkcjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgSTJDIHNsYXZlIGFkZHJlc3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgc3BlY2lmaWVkIHNsYXZlIGFkZHJlc3MuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIFNsYXZlIG1vZHVsZS4KKy8vISBccGFyYW0gdWk4U2xhdmVBZGRyIGlzIHRoZSA3LWJpdCBzbGF2ZSBhZGRyZXNzCisvLyEKKy8vISBccmV0dXJuIE5vbmUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyQ1NsYXZlQWRkcmVzc1NldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDhfdCB1aThTbGF2ZUFkZHIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworICAgIEFTU0VSVCghKHVpOFNsYXZlQWRkciAmIDB4ODApKTsKKworICAgIC8vCisgICAgLy8gU2V0IHVwIHRoZSBwcmltYXJ5IHNsYXZlIGFkZHJlc3MuCisgICAgLy8KKyAgICBIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19TT0FSKSA9IHVpOFNsYXZlQWRkcjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgdGhlIEkyQyBzbGF2ZSBibG9jay4KKy8vIQorLy8hIFRoaXMgd2lsbCBkaXNhYmxlIG9wZXJhdGlvbiBvZiB0aGUgSTJDIHNsYXZlIGJsb2NrLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBTbGF2ZSBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJDU2xhdmVEaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8gRGlzYWJsZSB0aGUgc2xhdmUuCisgICAgSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fU0NUTCkgPSAweDA7CisKKyAgICAvLyBEaXNhYmxlIHRoZSBjbG9jayB0byB0aGUgc2xhdmUgYmxvY2suCisgICAgSFdSRUdCSVRXKEkyQzBfQkFTRSArIEkyQ19PX01DUiwgSTJDX01DUl9TRkVfQklUTikgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBJMkMgU2xhdmUgbW9kdWxlIHN0YXR1cy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGFjdGlvbiByZXF1ZXN0ZWQgZnJvbSBhIG1hc3RlciwgaWYgYW55LgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBTbGF2ZSBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgSTJDIFNsYXZlIG1vZHVsZToKKy8vISAtIFxyZWYgSTJDX1NMQVZFX0FDVF9OT05FIDogTm8gYWN0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZCBvZiB0aGUgSTJDIFNsYXZlIG1vZHVsZS4KKy8vISAtIFxyZWYgSTJDX1NMQVZFX0FDVF9SUkVRIDogQW4gSTJDIG1hc3RlciBoYXMgc2VudCBkYXRhIHRvIHRoZSBJMkMgU2xhdmUgbW9kdWxlLgorLy8hIC0gXHJlZiBJMkNfU0xBVkVfQUNUX1RSRVEgOiBBbiBJMkMgbWFzdGVyIGhhcyByZXF1ZXN0ZWQgdGhhdCB0aGUgSTJDIFNsYXZlIG1vZHVsZSBzZW5kIGRhdGEuCisvLyEgLSBccmVmIEkyQ19TTEFWRV9BQ1RfUlJFUV9GQlIgOiBBbiBJMkMgbWFzdGVyIGhhcyBzZW50IGRhdGEgdG8gdGhlIEkyQyBzbGF2ZQorLy8hIGFuZCB0aGUgZmlyc3QgYnl0ZSBmb2xsb3dpbmcgdGhlIHNsYXZlJ3Mgb3duIGFkZHJlc3MgaGFzIGJlZW4gcmVjZWl2ZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitJMkNTbGF2ZVN0YXR1cyh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgc2xhdmUgc3RhdHVzLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX1NTVEFUKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlY2VpdmVzIGEgYnl0ZSB0aGF0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIEkyQyBTbGF2ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmVhZHMgYSBieXRlIG9mIGRhdGEgZnJvbSB0aGUgSTJDIFNsYXZlIERhdGEgUmVnaXN0ZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIFNsYXZlIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgYnl0ZSByZWNlaXZlZCBmcm9tIGJ5IHRoZSBJMkMgU2xhdmUsIGNhc3QgYXMgYW4KKy8vISB1aW50MzJfdC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0kyQ1NsYXZlRGF0YUdldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIFJlYWQgYSBieXRlLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX1NEUikpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUcmFuc21pdHMgYSBieXRlIGZyb20gdGhlIEkyQyBTbGF2ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBwbGFjZSB0aGUgc3VwcGxpZWQgZGF0YSBpbnRvIEkyQyBTbGF2ZSBEYXRhIFJlZ2lzdGVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBTbGF2ZSBtb2R1bGUuCisvLyEgXHBhcmFtIHVpOERhdGEgZGF0YSB0byBiZSB0cmFuc21pdHRlZCBmcm9tIHRoZSBJMkMgU2xhdmUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJDU2xhdmVEYXRhUHV0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50OF90IHVpOERhdGEpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgYnl0ZS4KKyAgICAvLworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX1NEUikgPSB1aThEYXRhOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIGluZGl2aWR1YWwgSTJDIFNsYXZlIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgRW5hYmxlcyB0aGUgaW5kaWNhdGVkIEkyQyBTbGF2ZSBpbnRlcnJ1cHQgc291cmNlcy4gT25seSB0aGUgc291cmNlcyB0aGF0CisvLyEgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdDsgZGlzYWJsZWQgc291cmNlcworLy8hIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXQgbWFzayBvZiB0aGUgc2xhdmUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZC4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBJMkNfU0xBVkVfSU5UX1NUT1AKKy8vISAtIFxyZWYgSTJDX1NMQVZFX0lOVF9TVEFSVAorLy8hIC0gXHJlZiBJMkNfU0xBVkVfSU5UX0RBVEEKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMkNTbGF2ZUludEVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIHVpbnQzMl90IHVpMzJWYWw7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisgICAgQVNTRVJUKHVpMzJJbnRGbGFncyAmIChJMkNfU0xBVkVfSU5UX1NUT1AgfCBJMkNfU0xBVkVfSU5UX1NUQVJUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19TTEFWRV9JTlRfREFUQSkpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIHNsYXZlIGludGVycnVwdC4KKyAgICAvLworICAgIHVpMzJWYWwgPSBIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19TSU1SKTsKKyAgICB1aTMyVmFsIHw9IHVpMzJJbnRGbGFnczsKKyAgICBIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19TSU1SKSA9IHVpMzJWYWw7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIGluZGl2aWR1YWwgSTJDIFNsYXZlIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgRGlzYWJsZXMgdGhlIGluZGljYXRlZCBJMkMgU2xhdmUgaW50ZXJydXB0IHNvdXJjZXMuIE9ubHkgdGhlIHNvdXJjZXMgdGhhdAorLy8hIGFyZSBlbmFibGVkIGNhbiBiZSByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQ7IGRpc2FibGVkIHNvdXJjZXMKKy8vISBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBTbGF2ZSBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyB0aGUgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGRpc2FibGVkLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEkyQ19TTEFWRV9JTlRfU1RPUAorLy8hIC0gXHJlZiBJMkNfU0xBVkVfSU5UX1NUQVJUCisvLyEgLSBccmVmIEkyQ19TTEFWRV9JTlRfREFUQQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyQ1NsYXZlSW50RGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIHVpbnQzMl90IHVpMzJWYWw7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisgICAgQVNTRVJUKHVpMzJJbnRGbGFncyAmIChJMkNfU0xBVkVfSU5UX1NUT1AgfCBJMkNfU0xBVkVfSU5UX1NUQVJUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19TTEFWRV9JTlRfREFUQSkpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBzbGF2ZSBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICB1aTMyVmFsID0gSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fU0lNUik7CisgICAgdWkzMlZhbCAmPSB+dWkzMkludEZsYWdzOworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX1NJTVIpID0gdWkzMlZhbDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIEkyQyBTbGF2ZSBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoZSBzcGVjaWZpZWQgSTJDIFNsYXZlIGludGVycnVwdCBzb3VyY2VzIGFyZSBjbGVhcmVkLCBzbyB0aGF0IHRoZXkgbm8KKy8vISBsb25nZXIgYXNzZXJ0LiBUaGlzIG11c3QgYmUgZG9uZSBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8ga2VlcCBpdCBmcm9tCisvLyEgYmVpbmcgY2FsbGVkIGFnYWluIGltbWVkaWF0ZWx5IHVwb24gZXhpdC4KKy8vIQorLy8hIFxub3RlIER1ZSB0byB3cml0ZSBidWZmZXJzIGFuZCBzeW5jaHJvbml6ZXJzIGluIHRoZSBzeXN0ZW0gaXQgbWF5IHRha2Ugc2V2ZXJhbAorLy8hIGNsb2NrIGN5Y2xlcyBmcm9tIGEgcmVnaXN0ZXIgd3JpdGUgY2xlYXJpbmcgYW4gZXZlbnQgaW4gYSBtb2R1bGUgYW5kIHVudGlsIHRoZQorLy8hIGV2ZW50IGlzIGFjdHVhbGx5IGNsZWFyZWQgaW4gdGhlIE5WSUMgb2YgdGhlIHN5c3RlbSBDUFUuIEl0IGlzIHJlY29tbWVuZGVkIHRvCisvLyEgY2xlYXIgdGhlIGV2ZW50IHNvdXJjZSBlYXJseSBpbiB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAoSVNSKSB0byBhbGxvdworLy8hIHRoZSBldmVudCBjbGVhciB0byBwcm9wYWdhdGUgdG8gdGhlIE5WSUMgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IuCisvLyEgQXQgdGhlIHNhbWUgdGltZSwgYW4gZWFybHkgZXZlbnQgY2xlYXIgYWxsb3dzIG5ldyBldmVudHMgb2YgdGhlIHNhbWUgdHlwZSB0byBiZQorLy8hIHBlbmRlZCBpbnN0ZWFkIG9mIGlnbm9yZWQgaWYgdGhlIGV2ZW50IGlzIGNsZWFyZWQgbGF0ZXIgaW4gdGhlIElTUi4KKy8vISBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHByb2dyYW1tZXIgdG8gbWFrZSBzdXJlIHRoYXQgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZAorLy8hIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIHRvIGF2b2lkIGZhbHNlIHJlLXRyaWdnZXJpbmcgb2YgdGhlIGNsZWFyZWQgZXZlbnQuCisvLyEgQSBzaW1wbGUsIGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSBvcHRpbWFsLCB3YXkgb2YgY2xlYXJpbmcgYW4gZXZlbnQgYmVmb3JlCisvLyEgcmV0dXJuaW5nIGZyb20gdGhlIElTUiBpczoKKy8vISAtIyBXcml0ZSB0byBjbGVhciBldmVudCAoaW50ZXJydXB0IHNvdXJjZSkuIChidWZmZXJlZCB3cml0ZSkKKy8vISAtIyBEdW1teSByZWFkIGZyb20gdGhlIGV2ZW50IHNvdXJjZSBtb2R1bGUuIChtYWtpbmcgc3VyZSB0aGUgd3JpdGUgaGFzIHByb3BhZ2F0ZWQpCisvLyEgLSMgV2FpdCB0d28gc3lzdGVtIENQVSBjbG9jayBjeWNsZXMgKHVzZXIgY29kZSBvciB0d28gTk9QcykuIChhbGxvd2luZyBjbGVhcmVkIGV2ZW50IHRvIHByb3BhZ2F0ZSB0aHJvdWdoIGFueSBzeW5jaHJvbml6ZXJzKQorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyBhIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBjbGVhcmVkLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEkyQ19TTEFWRV9JTlRfU1RPUAorLy8hIC0gXHJlZiBJMkNfU0xBVkVfSU5UX1NUQVJUCisvLyEgLSBccmVmIEkyQ19TTEFWRV9JTlRfREFUQQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyQ1NsYXZlSW50Q2xlYXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSBJMkMgc2xhdmUgaW50ZXJydXB0IHNvdXJjZS4KKyAgICAvLworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX1NJQ1IpID0gdWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBjdXJyZW50IEkyQyBTbGF2ZSBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hCisvLyEgVGhpcyByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZvciB0aGUgSTJDIFNsYXZlIG1vZHVsZS4gRWl0aGVyIHRoZSByYXcKKy8vISBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSBzdGF0dXMgb2YgaW50ZXJydXB0cyB0aGF0IGFyZSBhbGxvd2VkIHRvIHJlZmxlY3QgdG8KKy8vISB0aGUgcHJvY2Vzc29yIGNhbiBiZSByZXR1cm5lZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgU2xhdmUgbW9kdWxlLgorLy8hIFxwYXJhbSBiTWFza2VkIHNlbGVjdHMgZWl0aGVyIHJhdyBvciBtYXNrZWQgaW50ZXJydXB0IHN0YXR1cy4KKy8vISAtIFxjIGZhbHNlIDogUmF3IGludGVycnVwdCBzdGF0dXMgaXMgcmVxdWVzdGVkLgorLy8hIC0gXGMgdHJ1ZSAgOiBNYXNrZWQgaW50ZXJydXB0IHN0YXR1cyBpcyByZXF1ZXN0ZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cyBhcyBhbiBPUidlZCBjb21iaW5hdGlvbiBvZjoKKy8vISAtIFxyZWYgSTJDX1NMQVZFX0lOVF9TVE9QCisvLyEgLSBccmVmIEkyQ19TTEFWRV9JTlRfU1RBUlQKKy8vISAtIFxyZWYgSTJDX1NMQVZFX0lOVF9EQVRBCisKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0kyQ1NsYXZlSW50U3RhdHVzKHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJNYXNrZWQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZWl0aGVyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBhcworICAgIC8vIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKGJNYXNrZWQpCisgICAgeworICAgICAgICByZXR1cm4oSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fU01JUykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fU1JJUykpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgSTJDIG1vZHVsZS4KKy8vIQorLy8hIFRoaXMgc2V0cyB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhbiBJMkMgaW50ZXJydXB0IG9jY3Vycy4gVGhpcyB3aWxsCisvLyEgZW5hYmxlIHRoZSBnbG9iYWwgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcjsgc3BlY2lmaWMgSTJDCisvLyEgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgdmlhIFxyZWYgSTJDTWFzdGVySW50RW5hYmxlKCkgYW5kCisvLyEgXHJlZiBJMkNTbGF2ZUludEVuYWJsZSgpLiBJZiBuZWNlc3NhcnksIGl0IGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcidzCisvLyEgcmVzcG9uc2liaWxpdHkgdG8gY2xlYXIgdGhlIGludGVycnVwdCBzb3VyY2UgdmlhIFxyZWYgSTJDTWFzdGVySW50Q2xlYXIoKSBhbmQKKy8vISBccmVmIEkyQ1NsYXZlSW50Q2xlYXIoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgTWFzdGVyIG1vZHVsZS4KKy8vISBccGFyYW0gcGZuSGFuZGxlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZQorLy8hIEkyQyBpbnRlcnJ1cHQgb2NjdXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSTJDSW50UmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgSTJDIG1vZHVsZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhbiBJMkMgaW50ZXJydXB0CisvLyEgb2NjdXJzLiBUaGlzIHdpbGwgYWxzbyBtYXNrIG9mZiB0aGUgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorLy8hIHNvIHRoYXQgdGhlIGludGVycnVwdCBoYW5kbGVyIG5vIGxvbmdlciBpcyBjYWxsZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIE1hc3RlciBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBcYnJpZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEkyQ0ludFVucmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9JMkNNYXN0ZXJJbml0RXhwQ2xrCisgICAgICAgICN1bmRlZiAgSTJDTWFzdGVySW5pdEV4cENsaworICAgICAgICAjZGVmaW5lIEkyQ01hc3RlckluaXRFeHBDbGsgICAgICAgICAgICAgUk9NX0kyQ01hc3RlckluaXRFeHBDbGsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0kyQ01hc3RlckVycgorICAgICAgICAjdW5kZWYgIEkyQ01hc3RlckVycgorICAgICAgICAjZGVmaW5lIEkyQ01hc3RlckVyciAgICAgICAgICAgICAgICAgICAgUk9NX0kyQ01hc3RlckVycgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSTJDSW50UmVnaXN0ZXIKKyAgICAgICAgI3VuZGVmICBJMkNJbnRSZWdpc3RlcgorICAgICAgICAjZGVmaW5lIEkyQ0ludFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgUk9NX0kyQ0ludFJlZ2lzdGVyCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JMkNJbnRVbnJlZ2lzdGVyCisgICAgICAgICN1bmRlZiAgSTJDSW50VW5yZWdpc3RlcgorICAgICAgICAjZGVmaW5lIEkyQ0ludFVucmVnaXN0ZXIgICAgICAgICAgICAgICAgUk9NX0kyQ0ludFVucmVnaXN0ZXIKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fSTJDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pMmNfZG9jLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pMmNfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA3ZjViNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2kyY19kb2MuaApAQCAtMCwwICsxLDE2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGkyY19kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgaTJjX2FwaQorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX2kyYyBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSBJbnRlci1JbnRlZ3JhdGVkIENpcmN1aXQgKFxpMmMpIEFQSSBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgZm9yIHVzaW5nCisvLyEgdGhlIFx0aV9kZXZpY2UgXGkyYyBtYXN0ZXIgYW5kIHNsYXZlIG1vZHVsZS4gRnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBwZXJmb3JtCisvLyEgdGhlIGZvbGxvd2luZyBhY3Rpb25zOgorLy8hIC0gSW5pdGlhbGl6ZSB0aGUgXGkyYyBtb2R1bGUuCisvLyEgLSBTZW5kIGFuZCByZWNlaXZlIGRhdGEuCisvLyEgLSBPYnRhaW4gc3RhdHVzLgorLy8hIC0gTWFuYWdlIGludGVycnVwdHMgZm9yIHRoZSBcaTJjIG1vZHVsZS4KKy8vIQorLy8hIFRoZSBcaTJjIG1hc3RlciBhbmQgc2xhdmUgbW9kdWxlIHByb3ZpZGUgdGhlIGFiaWxpdHkgdG8gY29tbXVuaWNhdGUgdG8gb3RoZXIgSUMKKy8vISBkZXZpY2VzIG92ZXIgYW4gXGkyYyBidXMuIFRoZSBcaTJjIGJ1cyBpcyBzcGVjaWZpZWQgdG8gc3VwcG9ydCBkZXZpY2VzIHRoYXQgY2FuCisvLyEgYm90aCB0cmFuc21pdCBhbmQgcmVjZWl2ZSAod3JpdGUgYW5kIHJlYWQpIGRhdGEuIEFsc28sIGRldmljZXMgb24gdGhlIFxpMmMgYnVzCisvLyEgY2FuIGJlIGRlc2lnbmF0ZWQgYXMgZWl0aGVyIGEgbWFzdGVyIG9yIGEgc2xhdmUuIFRoZSBcdGlfZGV2aWNlIFxpMmMgbW9kdWxlCisvLyEgc3VwcG9ydHMgYm90aCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgZGF0YSBhcyBlaXRoZXIgYSBtYXN0ZXIgb3IgYSBzbGF2ZSwgYW5kIGFsc28KKy8vISBzdXBwb3J0IHRoZSBzaW11bHRhbmVvdXMgb3BlcmF0aW9uIGFzIGJvdGggYSBtYXN0ZXIgYW5kIGEgc2xhdmUuIEZpbmFsbHksIHRoZQorLy8hIFx0aV9kZXZpY2UgXGkyYyBtb2R1bGUgY2FuIG9wZXJhdGUgYXQgdHdvIHNwZWVkczogc3RhbmRhcmQgKDEwMCBrYi9zKSBhbmQgZmFzdAorLy8hICg0MDAga2IvcykuCisvLyEKKy8vISBUaGUgbWFzdGVyIGFuZCBzbGF2ZSBcaTJjIG1vZHVsZSBjYW4gZ2VuZXJhdGUgaW50ZXJydXB0cy4gVGhlIFxpMmMgbWFzdGVyCisvLyEgbW9kdWxlIGdlbmVyYXRlcyBpbnRlcnJ1cHRzIHdoZW4gYSB0cmFuc21pdCBvciByZWNlaXZlIG9wZXJhdGlvbgorLy8hIGNvbXBsZXRlcyAob3IgYWJvcnRzIGR1ZSB0byBhbiBlcnJvcikuCisvLyEgVGhlIFxpMmMgc2xhdmUgbW9kdWxlIGNhbiBnZW5lcmF0ZSBpbnRlcnJ1cHRzIHdoZW4gZGF0YSBpcworLy8hIHNlbnQgb3IgcmVxdWVzdGVkIGJ5IGEgbWFzdGVyIGFuZCB3aGVuIGEgU1RBUlQgb3IgU1RPUCBjb25kaXRpb24gaXMgcHJlc2VudC4KKy8vIQorLy8hIFxzZWN0aW9uIHNlY19pMmNfbWFzdGVyIE1hc3RlciBPcGVyYXRpb25zCisvLyEKKy8vISBXaGVuIHVzaW5nIHRoaXMgQVBJIHRvIGRyaXZlIHRoZSBcaTJjIG1hc3RlciBtb2R1bGUsIHRoZSB1c2VyIG11c3QgZmlyc3QKKy8vISBpbml0aWFsaXplIHRoZSBcaTJjIG1hc3RlciBtb2R1bGUgd2l0aCBhIGNhbGwgdG8gXHJlZiBJMkNNYXN0ZXJJbml0RXhwQ2xrKCkuIFRoaXMKKy8vISBmdW5jdGlvbiBzZXRzIHRoZSBidXMgc3BlZWQgYW5kIGVuYWJsZXMgdGhlIG1hc3RlciBtb2R1bGUuCisvLyEKKy8vISBUaGUgdXNlciBtYXkgdHJhbnNtaXQgb3IgcmVjZWl2ZSBkYXRhIGFmdGVyIHRoZSBzdWNjZXNzZnVsIGluaXRpYWxpemF0aW9uIG9mCisvLyEgdGhlIFxpMmMgbWFzdGVyIG1vZHVsZS4gRGF0YSBpcyB0cmFuc2ZlcnJlZCBieSBmaXJzdCBzZXR0aW5nIHRoZSBzbGF2ZSBhZGRyZXNzCisvLyEgdXNpbmcgXHJlZiBJMkNNYXN0ZXJTbGF2ZUFkZHJTZXQoKS4gVGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgdG8gZGVmaW5lIHdoZXRoZXIKKy8vISB0aGUgdHJhbnNmZXIgaXMgYSBzZW5kIChhIHdyaXRlIHRvIHRoZSBzbGF2ZSBmcm9tIHRoZSBtYXN0ZXIpIG9yIGEgcmVjZWl2ZSAoYQorLy8hIHJlYWQgZnJvbSB0aGUgc2xhdmUgYnkgdGhlIG1hc3RlcikuIFRoZW4sIGlmIGNvbm5lY3RlZCB0byBhbiBcaTJjIGJ1cyB0aGF0IGhhcworLy8hIG11bHRpcGxlIG1hc3RlcnMsIHRoZSBcdGlfZGV2aWNlIFxpMmMgbWFzdGVyIG11c3QgZmlyc3QgY2FsbCBccmVmIEkyQ01hc3RlckJ1c0J1c3koKQorLy8hIGJlZm9yZSB0cnlpbmcgdG8gaW5pdGlhdGUgdGhlIGRlc2lyZWQgdHJhbnNhY3Rpb24uIEFmdGVyIGRldGVybWluaW5nIHRoYXQKKy8vISB0aGUgYnVzIGlzIG5vdCBidXN5LCBpZiB0cnlpbmcgdG8gc2VuZCBkYXRhLCB0aGUgdXNlciBtdXN0IGNhbGwgdGhlCisvLyEgXHJlZiBJMkNNYXN0ZXJEYXRhUHV0KCkgZnVuY3Rpb24uIFRoZSB0cmFuc2FjdGlvbiBjYW4gdGhlbiBiZSBpbml0aWF0ZWQgb24gdGhlIGJ1cworLy8hIGJ5IGNhbGxpbmcgdGhlIFxyZWYgSTJDTWFzdGVyQ29udHJvbCgpIGZ1bmN0aW9uIHdpdGggYW55IG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisvLyEgIC0gXHJlZiBJMkNfTUFTVEVSX0NNRF9TSU5HTEVfU0VORAorLy8hICAtIFxyZWYgSTJDX01BU1RFUl9DTURfU0lOR0xFX1JFQ0VJVkUKKy8vISAgLSBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfU1RBUlQKKy8vISAgLSBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfU1RBUlQKKy8vIQorLy8hIEFueSBvZiB0aGVzZSBjb21tYW5kcyByZXN1bHQgaW4gdGhlIG1hc3RlciBhcmJpdHJhdGluZyBmb3IgdGhlIGJ1cywKKy8vISBkcml2aW5nIHRoZSBzdGFydCBzZXF1ZW5jZSBvbnRvIHRoZSBidXMsIGFuZCBzZW5kaW5nIHRoZSBzbGF2ZSBhZGRyZXNzIGFuZAorLy8hIGRpcmVjdGlvbiBiaXQgYWNyb3NzIHRoZSBidXMuIFRoZSByZW1haW5kZXIgb2YgdGhlIHRyYW5zYWN0aW9uIGNhbiB0aGVuIGJlCisvLyEgZHJpdmVuIHVzaW5nIGVpdGhlciBhIHBvbGxpbmcgb3IgaW50ZXJydXB0LWRyaXZlbiBtZXRob2QuCisvLyEKKy8vISBGb3IgdGhlIHNpbmdsZSBzZW5kIGFuZCByZWNlaXZlIGNhc2VzLCB0aGUgcG9sbGluZyBtZXRob2QgaW52b2x2ZXMgbG9vcGluZworLy8hIG9uIHRoZSByZXR1cm4gZnJvbSBccmVmIEkyQ01hc3RlckJ1c3koKS4gT25jZSB0aGUgZnVuY3Rpb24gaW5kaWNhdGVzIHRoYXQgdGhlIFxpMmMKKy8vISBtYXN0ZXIgaXMgbm8gbG9uZ2VyIGJ1c3ksIHRoZSBidXMgdHJhbnNhY3Rpb24gaXMgY29tcGxldGUgYW5kIGNhbiBiZQorLy8hIGNoZWNrZWQgZm9yIGVycm9ycyB1c2luZyBccmVmIEkyQ01hc3RlckVycigpLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCB0aGVuIHRoZSBkYXRhCisvLyEgaGFzIGJlZW4gc2VudCBvciBpcyByZWFkeSB0byBiZSByZWFkIHVzaW5nIFxyZWYgSTJDTWFzdGVyRGF0YUdldCgpLiBGb3IgdGhlIGJ1cnN0CisvLyEgc2VuZCBhbmQgcmVjZWl2ZSBjYXNlcywgdGhlIHBvbGxpbmcgbWV0aG9kIGFsc28gaW52b2x2ZXMgY2FsbGluZyB0aGUKKy8vISBccmVmIEkyQ01hc3RlckNvbnRyb2woKSBmdW5jdGlvbiBmb3IgZWFjaCBieXRlIHRyYW5zbWl0dGVkIG9yIHJlY2VpdmVkCisvLyEgKHVzaW5nIGVpdGhlciB0aGUgXHJlZiBJMkNfTUFTVEVSX0NNRF9CVVJTVF9TRU5EX0NPTlQgb3IgXHJlZiBJMkNfTUFTVEVSX0NNRF9CVVJTVF9SRUNFSVZFX0NPTlQKKy8vISBjb21tYW5kcyksIGFuZCBmb3IgdGhlIGxhc3QgYnl0ZSBzZW50IG9yIHJlY2VpdmVkICh1c2luZyBlaXRoZXIgdGhlCisvLyEgXHJlZiBJMkNfTUFTVEVSX0NNRF9CVVJTVF9TRU5EX0ZJTklTSCBvciBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfRklOSVNICisvLyEgY29tbWFuZHMpLgorLy8hCisvLyEgSWYgYW55IGVycm9yIGlzIGRldGVjdGVkIGR1cmluZyB0aGUgYnVyc3QgdHJhbnNmZXIsCisvLyEgdGhlIGFwcHJvcHJpYXRlIHN0b3AgY29tbWFuZCAoXHJlZiBJMkNfTUFTVEVSX0NNRF9CVVJTVF9TRU5EX0VSUk9SX1NUT1Agb3IKKy8vISBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfRVJST1JfU1RPUCkgc2hvdWxkIGJlIHVzZWQgdG8gY2FsbCB0aGUKKy8vISBccmVmIEkyQ01hc3RlckNvbnRyb2woKSBmdW5jdGlvbi4KKy8vIQorLy8hIEZvciB0aGUgaW50ZXJydXB0LWRyaXZlbiB0cmFuc2FjdGlvbiwgdGhlIHVzZXIgbXVzdCByZWdpc3RlciBhbiBpbnRlcnJ1cHQKKy8vISBoYW5kbGVyIGZvciB0aGUgXGkyYyBkZXZpY2VzIGFuZCBlbmFibGUgdGhlIFxpMmMgbWFzdGVyIGludGVycnVwdDsgdGhlIGludGVycnVwdAorLy8hIG9jY3VycyB3aGVuIHRoZSBtYXN0ZXIgaXMgbm8gbG9uZ2VyIGJ1c3kuCisvLyEKKy8vISBcc2VjdGlvbiBzZWNfaTJjX3NsYXZlIFNsYXZlIE9wZXJhdGlvbnMKKy8vIQorLy8hIFdoZW4gdXNpbmcgdGhpcyBBUEkgdG8gZHJpdmUgdGhlIFxpMmMgc2xhdmUgbW9kdWxlLCB0aGUgdXNlciBtdXN0IGZpcnN0CisvLyEgaW5pdGlhbGl6ZSB0aGUgXGkyYyBzbGF2ZSBtb2R1bGUgd2l0aCBhIGNhbGwgdG8gXHJlZiBJMkNTbGF2ZUluaXQoKS4gVGhpcyBmdW5jdGlvbgorLy8hIGVuYWJsZXMgdGhlIFxpMmMgc2xhdmUgbW9kdWxlIGFuZCBpbml0aWFsaXplcyB0aGUgYWRkcmVzcyBvZiB0aGUgc2xhdmUuIEFmdGVyIHRoZQorLy8hIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlcywgdGhlIHVzZXIgbWF5IHBvbGwgdGhlIHNsYXZlIHN0YXR1cyB1c2luZworLy8hIFxyZWYgSTJDU2xhdmVTdGF0dXMoKSB0byBkZXRlcm1pbmUgaWYgYSBtYXN0ZXIgcmVxdWVzdGVkIGEgc2VuZCBvciByZWNlaXZlCisvLyEgb3BlcmF0aW9uLiBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2Ygb3BlcmF0aW9uIHJlcXVlc3RlZCwgdGhlIHVzZXIgY2FuIGNhbGwKKy8vISBccmVmIEkyQ1NsYXZlRGF0YVB1dCgpIG9yIFxyZWYgSTJDU2xhdmVEYXRhR2V0KCkgdG8gY29tcGxldGUgdGhlIHRyYW5zYWN0aW9uLgorLy8hIEFsdGVybmF0aXZlbHksIHRoZSBcaTJjIHNsYXZlIGNhbiBoYW5kbGUgdHJhbnNhY3Rpb25zIHVzaW5nIGFuIGludGVycnVwdCBoYW5kbGVyCisvLyEgcmVnaXN0ZXJlZCB3aXRoIFxyZWYgSTJDSW50UmVnaXN0ZXIoKSwgYW5kIGJ5IGVuYWJsaW5nIHRoZSBcaTJjIHNsYXZlIGludGVycnVwdC4KKy8vIQorLy8hIFxzZWN0aW9uIHNlY19pMmNfYXBpIEFQSQorLy8hCisvLyEgVGhlIFxpMmMgQVBJIGlzIGJyb2tlbiBpbnRvIHRocmVlIGdyb3VwcyBvZiBmdW5jdGlvbnM6CisvLyEgdGhvc2UgdGhhdCBoYW5kbGUgc3RhdHVzIGFuZCBpbml0aWFsaXphdGlvbiwgdGhvc2UgdGhhdAorLy8hIGRlYWwgd2l0aCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgZGF0YSwgYW5kIHRob3NlIHRoYXQgZGVhbCB3aXRoCisvLyEgaW50ZXJydXB0cy4KKy8vIQorLy8hIFN0YXR1cyBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGZvciB0aGUgXGkyYyBtb2R1bGUgYXJlOgorLy8hIC0gXHJlZiBJMkNNYXN0ZXJJbml0RXhwQ2xrKCkKKy8vISAtIFxyZWYgSTJDTWFzdGVyRW5hYmxlKCkKKy8vISAtIFxyZWYgSTJDTWFzdGVyRGlzYWJsZSgpCisvLyEgLSBccmVmIEkyQ01hc3RlckJ1c0J1c3koKQorLy8hIC0gXHJlZiBJMkNNYXN0ZXJCdXN5KCkKKy8vISAtIFxyZWYgSTJDTWFzdGVyRXJyKCkKKy8vISAtIFxyZWYgSTJDU2xhdmVJbml0KCkKKy8vISAtIFxyZWYgSTJDU2xhdmVFbmFibGUoKQorLy8hIC0gXHJlZiBJMkNTbGF2ZURpc2FibGUoKQorLy8hIC0gXHJlZiBJMkNTbGF2ZVN0YXR1cygpCisvLyEKKy8vISBTZW5kaW5nIGFuZCByZWNlaXZpbmcgZGF0YSBmcm9tIHRoZSBcaTJjIG1vZHVsZSBpcyBoYW5kbGVkIGJ5IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorLy8hIC0gXHJlZiBJMkNNYXN0ZXJTbGF2ZUFkZHJTZXQoKQorLy8hIC0gXHJlZiBJMkNTbGF2ZUFkZHJlc3NTZXQoKQorLy8hIC0gXHJlZiBJMkNNYXN0ZXJDb250cm9sKCkKKy8vISAtIFxyZWYgSTJDTWFzdGVyRGF0YUdldCgpCisvLyEgLSBccmVmIEkyQ01hc3RlckRhdGFQdXQoKQorLy8hIC0gXHJlZiBJMkNTbGF2ZURhdGFHZXQoKQorLy8hIC0gXHJlZiBJMkNTbGF2ZURhdGFQdXQoKQorLy8hCisvLyEgVGhlIFxpMmMgbWFzdGVyIGFuZCBzbGF2ZSBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGJ5IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorLy8hIC0gXHJlZiBJMkNJbnRSZWdpc3RlcigpCisvLyEgLSBccmVmIEkyQ0ludFVucmVnaXN0ZXIoKQorLy8hIC0gXHJlZiBJMkNNYXN0ZXJJbnRFbmFibGUoKQorLy8hIC0gXHJlZiBJMkNNYXN0ZXJJbnREaXNhYmxlKCkKKy8vISAtIFxyZWYgSTJDTWFzdGVySW50Q2xlYXIoKQorLy8hIC0gXHJlZiBJMkNNYXN0ZXJJbnRTdGF0dXMoKQorLy8hIC0gXHJlZiBJMkNTbGF2ZUludEVuYWJsZSgpCisvLyEgLSBccmVmIEkyQ1NsYXZlSW50RGlzYWJsZSgpCisvLyEgLSBccmVmIEkyQ1NsYXZlSW50Q2xlYXIoKQorLy8hIC0gXHJlZiBJMkNTbGF2ZUludFN0YXR1cygpCisvLyEKKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaTJzLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pMnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWE2MWJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaTJzLmMKQEAgLTAsMCArMSw0NDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBpMnMuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDUtMTEgMTM6NTY6MDEgKzAyMDAgKE1vbiwgMTEgTWF5IDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDM0NzYKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBJMlMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2kycy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgSTJTRW5hYmxlCisgICAgI2RlZmluZSBJMlNFbmFibGUgICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0kyU0VuYWJsZQorICAgICN1bmRlZiAgSTJTQXVkaW9Gb3JtYXRDb25maWd1cmUKKyAgICAjZGVmaW5lIEkyU0F1ZGlvRm9ybWF0Q29uZmlndXJlICAgICAgICAgTk9ST01fSTJTQXVkaW9Gb3JtYXRDb25maWd1cmUKKyAgICAjdW5kZWYgIEkyU0NoYW5uZWxDb25maWd1cmUKKyAgICAjZGVmaW5lIEkyU0NoYW5uZWxDb25maWd1cmUgICAgICAgICAgICAgTk9ST01fSTJTQ2hhbm5lbENvbmZpZ3VyZQorICAgICN1bmRlZiAgSTJTQnVmZmVyQ29uZmlnCisgICAgI2RlZmluZSBJMlNCdWZmZXJDb25maWcgICAgICAgICAgICAgICAgIE5PUk9NX0kyU0J1ZmZlckNvbmZpZworICAgICN1bmRlZiAgSTJTUG9pbnRlclVwZGF0ZQorICAgICNkZWZpbmUgSTJTUG9pbnRlclVwZGF0ZSAgICAgICAgICAgICAgICBOT1JPTV9JMlNQb2ludGVyVXBkYXRlCisgICAgI3VuZGVmICBJMlNQb2ludGVyU2V0CisgICAgI2RlZmluZSBJMlNQb2ludGVyU2V0ICAgICAgICAgICAgICAgICAgIE5PUk9NX0kyU1BvaW50ZXJTZXQKKyAgICAjdW5kZWYgIEkyU1NhbXBsZVN0YW1wQ29uZmlndXJlCisgICAgI2RlZmluZSBJMlNTYW1wbGVTdGFtcENvbmZpZ3VyZSAgICAgICAgIE5PUk9NX0kyU1NhbXBsZVN0YW1wQ29uZmlndXJlCisgICAgI3VuZGVmICBJMlNTYW1wbGVTdGFtcEdldAorICAgICNkZWZpbmUgSTJTU2FtcGxlU3RhbXBHZXQgICAgICAgICAgICAgICBOT1JPTV9JMlNTYW1wbGVTdGFtcEdldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBHbG9iYWwgcG9pbnRlciB0byB0aGUgY3VycmVudCBJMlMgZGF0YSBzdHJ1Y3R1cmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitJMlNDb250cm9sVGFibGUgKmdfcENvbnRyb2xUYWJsZTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBFbmFibGVzIHRoZSBJMlMgbW9kdWxlIGZvciBvcGVyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJMlNFbmFibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRyb2wgdGFibGUgcG9pbnRlciBpcyBzZXR1cCB0byBhIG1lbW9yeSBsb2NhdGlvbi4KKyAgICAvLworICAgIGlmKCEoZ19wQ29udHJvbFRhYmxlKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBhZGRyZXNzIHRvIHRoZSBmaXJzdCBpbnB1dC9vdXRwdXQgYnVmZmVyLgorICAgIC8vCisgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fQUlGSU5QVFJORVhUKSA9IGdfcENvbnRyb2xUYWJsZS0+dWkzMkluQmFzZTsKKyAgICBnX3BDb250cm9sVGFibGUtPnVpMzJJbk9mZnNldCA9IDA7CisgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fQUlGT1VUUFRSTkVYVCkgPSBnX3BDb250cm9sVGFibGUtPnVpMzJPdXRCYXNlOworICAgIGdfcENvbnRyb2xUYWJsZS0+dWkzMk91dE9mZnNldCA9IDA7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgSTJTIG1vZHVsZS4KKyAgICAvLworICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0FJRkRNQUNGRykgPSAodWludDMyX3QpZ19wQ29udHJvbFRhYmxlLT51aTE2RE1BQnVmU2l6ZSAtIDE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29uZmlndXJlcyB0aGUgSTJTIG1vZHVsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0kyU0F1ZGlvRm9ybWF0Q29uZmlndXJlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRm10Q2ZnLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkJpdENsa0RlbGF5KQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMlNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKyAgICBBU1NFUlQodWkzMkJpdENsa0RlbGF5IDw9IDI1NSk7CisKKyAgICAvLworICAgIC8vIFNhdmUgdGhlIGxlbmd0aCBvZiB0aGUgYXVkaW8gd29yZHMgc3RvcmVkIGluIG1lbW9yeS4KKyAgICAvLworICAgIGdfcENvbnRyb2xUYWJsZS0+dWkxNk1lbUxlbiA9ICh1aTMyRm10Q2ZnICYgSTJTX01FTV9MRU5HVEhfMjQpID8gMjQgOiAxNjsKKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24uCisgICAgLy8KKyAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19BSUZGTVRDRkcpID0gdWkzMkZtdENmZyB8ICh1aTMyQml0Q2xrRGVsYXkgPDwgSTJTX0FJRkZNVENGR19EQVRBX0RFTEFZX1MpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2V0dXAgdGhlIGF1ZGlvIGNoYW5uZWwgY29uZmlndXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSTJTQ2hhbm5lbENvbmZpZ3VyZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW4wQ2ZnLAorICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2hhbjFDZmcsIHVpbnQzMl90IHVpMzJDaGFuMkNmZykKK3sKKyAgICB1aW50MzJfdCB1aTMySW5DaGFuOworICAgIHVpbnQzMl90IHVpMzJPdXRDaGFuOworICAgIHVpbnQzMl90IHVpMzJDaGFuTWFzazsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMlNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKyAgICBBU1NFUlQodWkzMkNoYW4wQ2ZnICYgKEkyU19DSEFOX0NGR19NQVNLIHwgSTJTX0xJTkVfTUFTSykpCisgICAgQVNTRVJUKHVpMzJDaGFuMUNmZyAmIChJMlNfQ0hBTl9DRkdfTUFTSyB8IEkyU19MSU5FX01BU0spKQorICAgIEFTU0VSVCh1aTMyQ2hhbjJDZmcgJiAoSTJTX0NIQU5fQ0ZHX01BU0sgfCBJMlNfTElORV9NQVNLKSkKKworICAgIHVpMzJJbkNoYW4gPSAwOworICAgIHVpMzJPdXRDaGFuID0gMDsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIGlucHV0L291dHB1dCBjaGFubmVscy4KKyAgICAvLworICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0FJRkRJUkNGRykgPSAoKHVpMzJDaGFuMENmZyA8PCBJMlNfQUlGRElSQ0ZHX0FEMF9TKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEkyU19BSUZESVJDRkdfQUQwX00pIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpMzJDaGFuMUNmZyA8PCBJMlNfQUlGRElSQ0ZHX0FEMV9TKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEkyU19BSUZESVJDRkdfQUQxX00pIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpMzJDaGFuMkNmZyA8PCBJMlNfQUlGRElSQ0ZHX0FEMl9TKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEkyU19BSUZESVJDRkdfQUQyX00pOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIHZhbGlkIGNoYW5uZWwgbWFzay4KKyAgICAvLworICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0FJRldNQVNLMCkgPSAodWkzMkNoYW4wQ2ZnID4+IDgpICYgSTJTX0FJRldNQVNLMF9NQVNLX007CisgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fQUlGV01BU0sxKSA9ICh1aTMyQ2hhbjFDZmcgPj4gOCkgJiBJMlNfQUlGV01BU0sxX01BU0tfTTsKKyAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19BSUZXTUFTSzIpID0gKHVpMzJDaGFuMkNmZyA+PiA4KSAmIEkyU19BSUZXTUFTSzJfTUFTS19NOworCisgICAgLy8KKyAgICAvLyBSZXNvbHZlIGFuZCBzYXZlIHRoZSBudW1iZXIgb2YgaW5wdXQgYW5kIG91dHB1dCBjaGFubmVscy4KKyAgICAvLworICAgIHVpMzJDaGFuTWFzayA9ICh1aTMyQ2hhbjBDZmcgJiBJMlNfQ0hBTl9DRkdfTUFTSykgPj4gODsKKyAgICBpZih1aTMyQ2hhbjBDZmcgJiBJMlNfTElORV9JTlBVVCkKKyAgICB7CisgICAgICAgIHdoaWxlKHVpMzJDaGFuTWFzaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYodWkzMkNoYW5NYXNrICYgMHgxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVpMzJJbkNoYW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBTaGlmdCBkb3duIGNoYW5uZWwgbWFzaworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHVpMzJDaGFuTWFzayA+Pj0gMTsKKyAgICAgICAgfQorCisgICAgfQorICAgIGVsc2UgaWYodWkzMkNoYW4wQ2ZnICYgSTJTX0xJTkVfT1VUUFVUKQorICAgIHsKKyAgICAgICAgd2hpbGUodWkzMkNoYW5NYXNrKQorICAgICAgICB7CisgICAgICAgICAgICBpZih1aTMyQ2hhbk1hc2sgJiAweDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWkzMk91dENoYW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBTaGlmdCBkb3duIGNoYW5uZWwgbWFzaworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHVpMzJDaGFuTWFzayA+Pj0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVpMzJDaGFuTWFzayA9ICh1aTMyQ2hhbjFDZmcgJiBJMlNfQ0hBTl9DRkdfTUFTSykgPj4gODsKKyAgICBpZih1aTMyQ2hhbjFDZmcgJiBJMlNfTElORV9JTlBVVCkKKyAgICB7CisgICAgICAgIHdoaWxlKHVpMzJDaGFuTWFzaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYodWkzMkNoYW5NYXNrICYgMHgxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVpMzJJbkNoYW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBTaGlmdCBkb3duIGNoYW5uZWwgbWFzaworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHVpMzJDaGFuTWFzayA+Pj0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKHVpMzJDaGFuMUNmZyAmIEkyU19MSU5FX09VVFBVVCkKKyAgICB7CisgICAgICAgIHdoaWxlKHVpMzJDaGFuTWFzaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYodWkzMkNoYW5NYXNrICYgMHgxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVpMzJPdXRDaGFuKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2hpZnQgZG93biBjaGFubmVsIG1hc2sKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICB1aTMyQ2hhbk1hc2sgPj49IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1aTMyQ2hhbk1hc2sgPSAodWkzMkNoYW4yQ2ZnICYgSTJTX0NIQU5fQ0ZHX01BU0spID4+IDg7CisgICAgaWYodWkzMkNoYW4yQ2ZnICYgSTJTX0xJTkVfSU5QVVQpCisgICAgeworICAgICAgICB3aGlsZSh1aTMyQ2hhbk1hc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHVpMzJDaGFuTWFzayAmIDB4MSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aTMySW5DaGFuKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2hpZnQgZG93biBjaGFubmVsIG1hc2sKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICB1aTMyQ2hhbk1hc2sgPj49IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZih1aTMyQ2hhbjJDZmcgJiBJMlNfTElORV9PVVRQVVQpCisgICAgeworICAgICAgICB3aGlsZSh1aTMyQ2hhbk1hc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHVpMzJDaGFuTWFzayAmIDB4MSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aTMyT3V0Q2hhbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNoaWZ0IGRvd24gY2hhbm5lbCBtYXNrCisgICAgICAgICAgICAvLworICAgICAgICAgICAgdWkzMkNoYW5NYXNrID4+PSAxOworICAgICAgICB9CisgICAgfQorCisgICAgZ19wQ29udHJvbFRhYmxlLT51aThJbkNoYW4gPSAodWludDhfdCl1aTMySW5DaGFuOworICAgIGdfcENvbnRyb2xUYWJsZS0+dWk4T3V0Q2hhbiA9ICh1aW50OF90KXVpMzJPdXRDaGFuOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2V0IHRoZSBpbnB1dCBidWZmZXIgcG9pbnRlcnMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0kyU0J1ZmZlckNvbmZpZyh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkluQnVmQmFzZSwKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyT3V0QnVmQmFzZSwgdWludDE2X3QgdWkxNkRNQUJ1ZlNpemUsCisgICAgICAgICAgICAgICAgdWludDE2X3QgdWkxNkNoYW5CdWZTaXplKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMlNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKyAgICBBU1NFUlQodWkxNkRNQUJ1ZlNpemUgPiAwKTsKKworICAgIC8vCisgICAgLy8gU2V0dXAgdGhlIGlucHV0IGRhdGEgcG9pbnRlciBhbmQgYnVmZmVyIHNpemVzLgorICAgIC8vCisgICAgZ19wQ29udHJvbFRhYmxlLT51aTE2RE1BQnVmU2l6ZSA9IHVpMTZETUFCdWZTaXplOworICAgIGdfcENvbnRyb2xUYWJsZS0+dWkxNkNoQnVmU2l6ZSA9IHVpMTZDaGFuQnVmU2l6ZTsKKyAgICBnX3BDb250cm9sVGFibGUtPnVpMzJJbkJhc2UgPSB1aTMySW5CdWZCYXNlOworICAgIGdfcENvbnRyb2xUYWJsZS0+dWkzMk91dEJhc2UgPSB1aTMyT3V0QnVmQmFzZTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFNldCB0aGUgYnVmZmVyIHBvaW50ZXJzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJMlNQb2ludGVyU2V0KHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJJbnB1dCwgdm9pZCAqIHBOZXh0UG9pbnRlcikKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJTQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIFVwZGF0ZSB0aGUgbmV4dCBpbnB1dC9vdXRwdXQgcG9pbnRlciB3aXRoIHRoZSBjb3JyZWN0IGFkZHJlc3MuCisgICAgLy8KKyAgICBpZihiSW5wdXQgPT0gdHJ1ZSkKKyAgICB7CisgICAgICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0FJRklOUFRSTkVYVCkgPSAodWludDMyX3QpcE5leHRQb2ludGVyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19BSUZPVVRQVFJORVhUKSA9ICh1aW50MzJfdClwTmV4dFBvaW50ZXI7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVXBkYXRlIHRoZSBidWZmZXIgcG9pbnRlcnMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0kyU1BvaW50ZXJVcGRhdGUodWludDMyX3QgdWkzMkJhc2UsIGJvb2wgYklucHV0KQoreworICAgIHVpbnQzMl90IHVpMzJOZXh0UHRyOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBVcGRhdGUgdGhlIG5leHQgaW5wdXQvb3V0cHV0IHBvaW50ZXIgd2l0aCB0aGUgY29ycmVjdCBhZGRyZXNzLgorICAgIC8vCisgICAgaWYoYklucHV0ID09IHRydWUpCisgICAgeworICAgICAgICB1aTMyTmV4dFB0ciA9IChnX3BDb250cm9sVGFibGUtPnVpOEluQ2hhbiAqCisgICAgICAgICAgICAgICAgICAgICAgIChnX3BDb250cm9sVGFibGUtPnVpMTZNZW1MZW4gPj4gMykpICoKKyAgICAgICAgICAgICAgICAgICAgICBnX3BDb250cm9sVGFibGUtPnVpMTZETUFCdWZTaXplOworICAgICAgICBnX3BDb250cm9sVGFibGUtPnVpMzJJbk9mZnNldCA9ICgoZ19wQ29udHJvbFRhYmxlLT51aTMySW5PZmZzZXQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aTMyTmV4dFB0cikgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BDb250cm9sVGFibGUtPnVpMTZDaEJ1ZlNpemUpOworICAgICAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19BSUZJTlBUUk5FWFQpID0gZ19wQ29udHJvbFRhYmxlLT51aTMySW5PZmZzZXQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BDb250cm9sVGFibGUtPnVpMzJJbkJhc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpMzJOZXh0UHRyID0gKGdfcENvbnRyb2xUYWJsZS0+dWk4T3V0Q2hhbiAqCisgICAgICAgICAgICAgICAgICAgICAgIChnX3BDb250cm9sVGFibGUtPnVpMTZNZW1MZW4gPj4gMykpICoKKyAgICAgICAgICAgICAgICAgICAgICBnX3BDb250cm9sVGFibGUtPnVpMTZETUFCdWZTaXplOworICAgICAgICBnX3BDb250cm9sVGFibGUtPnVpMzJPdXRPZmZzZXQgPSAoKGdfcENvbnRyb2xUYWJsZS0+dWkzMk91dE9mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpMzJOZXh0UHRyKSAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcENvbnRyb2xUYWJsZS0+dWkxNkNoQnVmU2l6ZSk7CisgICAgICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0FJRk9VVFBUUk5FWFQpID0KKyAgICAgICAgICAgICAgICAgICAgICAgICBnX3BDb250cm9sVGFibGUtPnVpMzJPdXRPZmZzZXQgKworICAgICAgICAgICAgICAgICAgICAgICAgIGdfcENvbnRyb2xUYWJsZS0+dWkzMk91dEJhc2U7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENvbmZpZ3VyZSB0aGUgc2FtcGxlIHN0YW1wIGdlbmVyYXRvcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0kyU1NhbXBsZVN0YW1wQ29uZmlndXJlKHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJJbnB1dCwgYm9vbCBiT3V0cHV0KQoreworICAgIHVpbnQzMl90IHVpMzJUcmlnZ2VyOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgdWkzMlRyaWdnZXIgPSBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19TVE1QV0NOVCk7CisgICAgdWkzMlRyaWdnZXIgPSAodWkzMlRyaWdnZXIgKyAyKSAlIGdfcENvbnRyb2xUYWJsZS0+dWkxNkNoQnVmU2l6ZTsKKworICAgIC8vCisgICAgLy8gU2V0dXAgdGhlIHNhbXBsZSBzdGFtcCB0cmlnZ2VyIGZvciBpbnB1dCBzdHJlYW1zLgorICAgIC8vCisgICAgaWYoYklucHV0KQorICAgIHsKKyAgICAgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fU1RNUElOVFJJRykgPSB1aTMyVHJpZ2dlcjsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNldHVwIHRoZSBzYW1wbGUgc3RhbXAgdHJpZ2dlciBmb3Igb3V0cHV0IHN0cmVhbXMuCisgICAgLy8KKyAgICBpZihiT3V0cHV0KQorICAgIHsKKyAgICAgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fU1RNUE9VVFRSSUcpID0gdWkzMlRyaWdnZXI7CisgICAgfQorCit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgc2FtcGxlIHN0YW1wIGNvdW50ZXIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorSTJTU2FtcGxlU3RhbXBHZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsKQoreworICAgIHVpbnQzMl90IHVpMzJGcmFtZUNsa0NudDsKKyAgICB1aW50MzJfdCB1aTMyU3lzQ2xrQ250OworICAgIHVpbnQzMl90IHVpMzJQZXJpb2RTeXNDbGtDbnQ7CisgICAgdWludDMyX3QgdWkzMlNhbXBsZVN0YW1wOworICAgICh2b2lkKXVpMzJCYXNlOworICAgICh2b2lkKXVpMzJDaGFubmVsOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBGcmFtZSBjbG9jayBjb3VudHMgc2luY2UgbGFzdCBzdGFtcC4KKyAgICAvLworICAgIHVpMzJGcmFtZUNsa0NudCA9IEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX1NUTVBXQ05UQ0FQVDApOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBzeXN0ZW0gY2xvY2sgdGlja3Mgc2luY2UgbGFzdCBmcmFtZSBjbG9jayBlZGdlLgorICAgIC8vCisgICAgdWkzMlN5c0Nsa0NudCA9IEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX1NUTVBYQ05UQ0FQVDApOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIG51bWJlciBzeXN0ZW0gY2xvY2sgdGlja3MgaW4gdGhlIGxhc3QgZnJhbWUgY2xvY2sgcGVyaW9kLgorICAgIC8vCisgICAgdWkzMlBlcmlvZFN5c0Nsa0NudCA9IEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX1NUTVBYUEVSKTsKKworICAgIC8vCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzYW1wbGUgc3RhbXAuCisgICAgLy8KKyAgICB1aTMyU2FtcGxlU3RhbXAgPSAodWkzMlN5c0Nsa0NudCA8PCAxNikgLyB1aTMyUGVyaW9kU3lzQ2xrQ250OworICAgIHVpMzJTYW1wbGVTdGFtcCA9ICh1aTMyU2FtcGxlU3RhbXAgPiBJMlNfU1RNUF9TQVRVUkFUSU9OKSA/CisgICAgICAgICAgICAgICAgICAgICAgSTJTX1NUTVBfU0FUVVJBVElPTiA6IHVpMzJTYW1wbGVTdGFtcDsKKyAgICB1aTMyU2FtcGxlU3RhbXAgfD0gKHVpMzJGcmFtZUNsa0NudCA8PCAxNik7CisKKyAgICByZXR1cm4gKHVpMzJTYW1wbGVTdGFtcCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pMnMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2kycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNTEyMDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pMnMuaApAQCAtMCwwICsxLDg5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGkycy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMS0xNiAxOTo0MTo0NyArMDEwMCAoTW9uLCAxNiBOb3YgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTA5NAorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBJMlMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcGVyaXBoZXJhbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgaTJzX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19JMlNfSF9fCisjZGVmaW5lIF9fSTJTX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2kycy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgSTJTRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9JMlNFbmFibGUKKyAgICAjZGVmaW5lIEkyU0F1ZGlvRm9ybWF0Q29uZmlndXJlICAgICAgICAgTk9ST01fSTJTQXVkaW9Gb3JtYXRDb25maWd1cmUKKyAgICAjZGVmaW5lIEkyU0NoYW5uZWxDb25maWd1cmUgICAgICAgICAgICAgTk9ST01fSTJTQ2hhbm5lbENvbmZpZ3VyZQorICAgICNkZWZpbmUgSTJTQnVmZmVyQ29uZmlnICAgICAgICAgICAgICAgICBOT1JPTV9JMlNCdWZmZXJDb25maWcKKyAgICAjZGVmaW5lIEkyU1BvaW50ZXJVcGRhdGUgICAgICAgICAgICAgICAgTk9ST01fSTJTUG9pbnRlclVwZGF0ZQorICAgICNkZWZpbmUgSTJTUG9pbnRlclNldCAgICAgICAgICAgICAgICAgICBOT1JPTV9JMlNQb2ludGVyU2V0CisgICAgI2RlZmluZSBJMlNTYW1wbGVTdGFtcENvbmZpZ3VyZSAgICAgICAgIE5PUk9NX0kyU1NhbXBsZVN0YW1wQ29uZmlndXJlCisgICAgI2RlZmluZSBJMlNTYW1wbGVTdGFtcEdldCAgICAgICAgICAgICAgIE5PUk9NX0kyU1NhbXBsZVN0YW1wR2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIGFuIGF1ZGlvIGNvbnRyb2wgdGFibGUuIE5vdGU6IE1lbW9yeSBmb3IgdGhpcworLy8hIHN0cnVjdHVyZSBcYiBtdXN0IGJlIGluaXRpYWxpemVkIGJ5IHVzZXIgYXBwbGljYXRpb24uIFNlZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiEKKy8vIQorLy8hIFRoZXNlIGZpZWxkcyBhcmUgdXNlZCBieSB0aGUgSTJTIGFuZCBub3JtYWxseSBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvcgorLy8hIHNvZnR3YXJlIHRvIGRpcmVjdGx5IHJlYWQgb3Igd3JpdGUgZmllbGRzIGluIHRoZSB0YWJsZS4KKy8vIQorLy8hIFxub3RlIFRoZSBjb250cm9sIHRhYmxlIG11c3QgYmUgZGVmaW5lZCBieSB0aGUgdXNlciBhcyBhIGdsb2JhbCB2YXJpYWJsZSBhbmQKKy8vISB0aGUgZ2xvYmFsIHBvaW50ZXIgbXVzdCB0aGVuIGJlIGFzc2lnbmVkIHRoZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sIHRhYmxlCisvLyEgaW5zaWRlIGEgdXNlciBmdW5jdGlvbiAoYnV0IGJlZm9yZSBjYWxsaW5nIGFueSBJMlMtZnVuY3Rpb24pLgorLy8hCisvKiEKK1x2ZXJiYXRpbQorIEkyU0NvbnRyb2xUYWJsZSBnX2NvbnRyb2xUYWJsZTsgICAgLy8gRGVmaW5lIGdsb2JhbAorIGdfcENvbnRyb2xUYWJsZSA9ICZnX2NvbnRyb2xUYWJsZTsgLy8gQXNzaWduIHBvaW50ZXIgKGluc2lkZSBhIGZ1bmN0aW9uKQorXGVuZHZlcmJhdGltCisqLworLy8hCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MTZfdCB1aTE2RE1BQnVmU2l6ZTsgICAgICAgIC8vITwgU2l6ZSBvZiBETUEgYnVmZmVyIGluIG51bWJlciBvZiBzYW1wbGVzLgorICAgIHVpbnQxNl90IHVpMTZDaEJ1ZlNpemU7ICAgICAgICAgLy8hPCBTaXplIG9mIENoYW5uZWwgYnVmZmVyLgorICAgIHVpbnQ4X3QgdWk4SW5DaGFuOyAgICAgICAgICAgICAgLy8hPCBJbnB1dCBDaGFubmVsLgorICAgIHVpbnQ4X3QgdWk4T3V0Q2hhbjsgICAgICAgICAgICAgLy8hPCBPdXRwdXQgQ2hhbm5lbC4KKyAgICB1aW50MTZfdCB1aTE2TWVtTGVuOyAgICAgICAgICAgIC8vITwgTGVuZ3RoIG9mIHRoZSBhdWRpbyB3b3JkcyBzdG9yZWQgaW4gbWVtb3J5LgorICAgIHVpbnQzMl90IHVpMzJJbkJhc2U7ICAgICAgICAgICAgLy8hPCBCYXNlIGFkZHJlc3Mgb2YgdGhlIGlucHV0IGJ1ZmZlci4KKyAgICB1aW50MzJfdCB1aTMySW5PZmZzZXQ7ICAgICAgICAgIC8vITwgVmFsdWUgb2YgdGhlIGN1cnJlbnQgaW5wdXQgcG9pbnRlciBvZmZzZXQuCisgICAgdWludDMyX3QgdWkzMk91dEJhc2U7ICAgICAgICAgICAvLyE8IEJhc2UgYWRkcmVzcyBvZiB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAgICB1aW50MzJfdCB1aTMyT3V0T2Zmc2V0OyAgICAgICAgIC8vITwgVmFsdWUgb2YgdGhlIGN1cnJlbnQgb3V0cHV0IHBvaW50ZXIgb2Zmc2V0LgorfSBJMlNDb250cm9sVGFibGU7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWNsYXJlIGdsb2JhbCBwb2ludGVyIHRvIHRoZSBJMlMgZGF0YSBzdHJ1Y3R1cmUuCisvLworLy8gVGhlIGNvbnRyb2wgdGFibGUgbXVzdCBiZSBkZWZpbmVkIGJ5IHRoZSB1c2VyIGFzIGEgZ2xvYmFsIHZhcmlhYmxlIGFuZCB0aGUKKy8vIGdsb2JhbCBwb2ludGVyIG11c3QgdGhlbiBiZSBhc3NpZ25lZCB0aGUgYWRkcmVzcyBvZiB0aGUgY29udHJvbCB0YWJsZToKKy8vCisvLyBJMlNDb250cm9sVGFibGUgZ19jb250cm9sVGFibGU7CisvLyBnX3BDb250cm9sVGFibGUgPSAmZ19jb250cm9sVGFibGU7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIEkyU0NvbnRyb2xUYWJsZSAqZ19wQ29udHJvbFRhYmxlOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIEkyUyBETUEgYnVmZmVyIHNpemVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJMlNfRE1BX0JVRl9TSVpFXzY0ICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEkyU19ETUFfQlVGX1NJWkVfMTI4ICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSTJTX0RNQV9CVUZfU0laRV8yNTYgICAgMHgwMDAwMDEwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIEkyUyBhdWRpbyBjbG9jayBjb25maWd1cmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJMlNfRVhUX1dDTEsgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyU19JTlRfV0NMSyAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJTX0lOVkVSVF9XQ0xLICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfTk9STUFMX1dDTEsgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgYXVkaW8gZGF0YSBsaW5lIGlucHV0L291dHB1dCBjb25maWd1cmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJMlNfTElORV9VTlVTRUQgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEkyU19MSU5FX0lOUFVUICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX0xJTkVfT1VUUFVUICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMlNfTElORV9NQVNLICAgICAgICAgICAweDAwMDAwMDAzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciBhY3RpdmF0aW5nIGFuIGF1ZGlvIGNoYW5uZWwuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJMlNfQ0hBTjBfQUNUICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEkyU19DSEFOMV9BQ1QgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSTJTX0NIQU4yX0FDVCAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJMlNfQ0hBTjNfQUNUICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEkyU19DSEFONF9BQ1QgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSTJTX0NIQU41X0FDVCAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBJMlNfQ0hBTjZfQUNUICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEkyU19DSEFON19BQ1QgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgSTJTX01PTk9fTU9ERSAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJMlNfU1RFUkVPX01PREUgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEkyU19DSEFOX0NGR19NQVNLICAgICAgIDB4MDAwMEZGMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBhdWRpbyBmb3JtYXQgY29uZmlndXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSTJTX01FTV9MRU5HVEhfMTYgICAgICAgMHgwMDAwMDAwMCAgLy8gMTYgYml0IHNpemUgb2Ygd29yZCBpbiBtZW1vcnkKKyNkZWZpbmUgSTJTX01FTV9MRU5HVEhfMjQgICAgICAgMHgwMDAwMDA4MCAgLy8gMjQgYml0IHNpemUgb2Ygd29yZCBpbiBtZW1vcnkKKyNkZWZpbmUgSTJTX1BPU19FREdFICAgICAgICAgICAgMHgwMDAwMDA0MCAgLy8gU2FtcGxlIG9uIHBvc2l0aXZlIGVkZ2UKKyNkZWZpbmUgSTJTX05FR19FREdFICAgICAgICAgICAgMHgwMDAwMDAwMCAgLy8gU2FtcGxlIG9uIG5lZ2F0aXZlIGVkZ2UKKyNkZWZpbmUgSTJTX0RVQUxfUEhBU0VfRk1UICAgICAgMHgwMDAwMDAyMCAgLy8gRHVhbCBQaGFzZWQgYXVkaW8gZm9ybWF0CisjZGVmaW5lIEkyU19TSU5HTEVfUEhBU0VfRk1UICAgIDB4MDAwMDAwMDAgIC8vIFNpbmdsZSBQaGFzZWQgYXVkaW8gZm9ybWF0CisjZGVmaW5lIEkyU19XT1JEX0xFTkdUSF84ICAgICAgIDB4MDAwMDAwMDggIC8vIFdvcmQgbGVuZ3RoIGlzIDggYml0cworI2RlZmluZSBJMlNfV09SRF9MRU5HVEhfMTYgICAgICAweDAwMDAwMDEwICAvLyBXb3JkIGxlbmd0aCBpcyAxNiBiaXRzCisjZGVmaW5lIEkyU19XT1JEX0xFTkdUSF8yNCAgICAgIDB4MDAwMDAwMTggIC8vIFdvcmQgbGVuZ3RoIGlzIDI0IGJpdHMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBzYW1wbGUgc3RhbXAgY291bnRlcnMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEkyU19TVE1QMCAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIFNhbXBsZSBzdGFtcCBjb3VudGVyIGNoYW5uZWwgMAorI2RlZmluZSBJMlNfU1RNUDEgICAgICAgICAgICAgICAweDAwMDAwMDAyICAvLyBTYW1wbGUgc3RhbXAgY291bnRlciBjaGFubmVsIDEKKyNkZWZpbmUgSTJTX1NUTVBfU0FUVVJBVElPTiAgICAgMHgwMDAwRkZGRiAgLy8gVGhlIHNhdHVyYXRpb24gdmFsdWUgdXNlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBzYW1wbGUgc3RhbXAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEkyU19JTlRfRE1BX0lOICAgICAgICAgIDB4MDAwMDAwMjAgIC8vIERNQSBvdXRwdXQgYnVmZmVyIGZ1bGwgaW50ZXJydXB0CisjZGVmaW5lIEkyU19JTlRfRE1BX09VVCAgICAgICAgIDB4MDAwMDAwMTAgIC8vIERNQSBpbnB1dCBidWZmZXIgZW1wdHkgaW50ZXJydXB0CisjZGVmaW5lIEkyU19JTlRfVElNRU9VVCAgICAgICAgIDB4MDAwMDAwMDggIC8vIFdvcmQgQ2xvY2sgVGltZW91dAorI2RlZmluZSBJMlNfSU5UX0JVU19FUlIgICAgICAgICAweDAwMDAwMDA0ICAvLyBETUEgQnVzIGVycm9yCisjZGVmaW5lIEkyU19JTlRfV0NMS19FUlIgICAgICAgIDB4MDAwMDAwMDIgIC8vIFdvcmQgQ2xvY2sgZXJyb3IKKyNkZWZpbmUgSTJTX0lOVF9QVFJfRVJSICAgICAgICAgMHgwMDAwMDAwMSAgLy8gRGF0YSBwb2ludGVyIGVycm9yIChETUEgZGF0YSB3YXMgbm90IHVwZGF0ZWQgaW4gdGltZSkuCisjZGVmaW5lIEkyU19JTlRfQUxMICAgICAgICAgICAgIDB4MDAwMDAwM0YgIC8vIEFsbCBpbnRlcnJ1cHRzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZkZWYgRFJJVkVSTElCX0RFQlVHCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxpbnRlcm5hbAorLy8hCisvLyEgXGJyaWVmIENoZWNrcyBhbiBJMlMgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGFuIEkyUyBwb3J0IGJhc2UgYWRkcmVzcyBpcyB2YWxpZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMlMgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIHRoZSBiYXNlIGFkZHJlc3MgaXMgdmFsaWQgYW5kIFxjIGZhbHNlCisvLyEgb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyBib29sCitJMlNCYXNlVmFsaWQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgcmV0dXJuKHVpMzJCYXNlID09IEkyUzBfQkFTRSk7Cit9CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyB0aGUgSTJTIG1vZHVsZSBmb3Igb3BlcmF0aW9uLgorLy8hCisvLyEgXG5vdGUgVGhlIG1vZHVsZSBzaG91bGQgb25seSBiZSBlbmFibGVkIGFmdGVyIGNvbmZpZ3VyYXRpb24uIFdoZW4gdGhlCisvLyEgbW9kdWxlIGlzIGRpc2FibGVkLCBubyBkYXRhIG9yIGNsb2NrcyB3aWxsIGJlIGdlbmVyYXRlZCBvbiB0aGUgSTJTIHNpZ25hbHMuCisvLyEKKy8vISBcbm90ZSBJbW1lZGlhdGVseSBhZnRlciBlbmFibGluZyB0aGUgbW9kdWxlIHRoZSBwcm9ncmFtbWVyIHNob3VsZCB1cGRhdGUKKy8vISB0aGUgRE1BIGRhdGEgcG9pbnRlciByZWdpc3RlcnMgdXNpbmcgXHJlZiBJMlNQb2ludGVyVXBkYXRlKCkgdG8gZW5zdXJlIGEgbmV3CisvLyEgcG9pbnRlciBpcyB3cml0dGVuIGJlZm9yZSB0aGUgRE1BIHRyYW5zZmVyIGNvbXBsZXRlcy4gRmFpbHVyZSB0byB1cGRhdGUKKy8vISB0aGUgcG9pbnRlciBpbiB0aW1lIHdpbGwgcmVzdWx0IGluIGFuIFxyZWYgSTJTX0lOVF9QVFJfRVJSLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBJMlMgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEkyU0VuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSBJMlMgbW9kdWxlIGZvciBvcGVyYXRpb24uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgaW1tZWRpYXRlbHkgZGlzYWJsZSB0aGUgSTJTIG1vZHVsZS4gVG8gZW5zdXJlIHRoYXQKKy8vISBhbGwgYnVmZmVyIG9wZXJhdGlvbnMgYXJlIGNvbXBsZXRlZCBiZWZvcmUgc2h1dHRpbmcgZG93biwgdGhlIGNvcnJlY3QKKy8vISBwcm9jZWR1cmUgaXM6CisvLyEgMS4gRG8gbm90IHVwZGF0ZSB0aGUgZGF0YSBwb2ludGVycyB1c2luZyBccmVmIEkyU1BvaW50ZXJVcGRhdGUoKS4KKy8vISAyLiBBd2FpdCBuZXh0IGludGVycnVwdCByZXN1bHRpbmcgaW4gXHJlZiBJMlNfSU5UX1BUUl9FUlIuCisvLyEgMy4gRGlzYWJsZSB0aGUgSTJTIHVzaW5nIFxyZWYgSTJTRGlzYWJsZSgpIGFuZCBjbGVhciB0aGUgcG9pbnRlciBlcnJvciB1c2luZworLy8hICAgIFxyZWYgSTJTSW50Q2xlYXIoKS4KKy8vISA0LiBEaXNhYmxlIGJpdCBjbG9jayBzb3VyY2UgKGRvbmUgZXh0ZXJuYWxseSkuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIEkyUyBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyU0Rpc2FibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBJMlMgbW9kdWxlLgorICAgIC8vCisgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fQUlGRE1BQ0ZHKSA9IDB4MDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlcyB0aGUgSTJTIG1vZHVsZS4KKy8vIQorLy8hIFRoZSB3b3JkIGxlbmd0aCBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSB3b3JkIHRyYW5zbWl0dGVkIG9uIHRoZSBkYXRhCisvLyEgbGluZXMuIEZvciBzaW5nbGUgcGhhc2VkIGZvcm1hdHMgXGMgSTJTX1dPUkRfTEVOR1RIX3ggaXMgdGhlIGV4YWN0IG51bWJlcgorLy8hIG9mIGJpdHMgcGVyIHdvcmQuIEluIGR1YWwgcGhhc2VkIGZvcm1hdCB0aGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiaXRzCisvLyEgcGVyIHdvcmQuIFRoZSBzaXplIGlzIHNldCB1c2luZyBccmVmIEkyU19XT1JEX0xFTkdUSF84LAorLy8hIFxyZWYgSTJTX1dPUkRfTEVOR1RIXzE2IG9yIFxyZWYgSTJTX1dPUkRfTEVOR1RIXzI0LgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBJMlMgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMkZtdENmZyBpcyB0aGUgYml0d2lzZSBPUiBvZiBzZXZlcmFsIG9wdGlvbnM6CisvLyEgLSBTYW1wbGUgc2l6ZToKKy8vISAgIC0gXHJlZiBJMlNfTUVNX0xFTkdUSF8xNgorLy8hICAgLSBccmVmIEkyU19NRU1fTEVOR1RIXzI0CisvLyEgLSBDbG9jayBlZGdlIHNhbXBsaW5nOgorLy8hICAgLSBccmVmIEkyU19QT1NfRURHRQorLy8hICAgLSBccmVmIEkyU19ORUdfRURHRQorLy8hIC0gUGhhc2U6CisvLyEgICAtIFxyZWYgSTJTX0RVQUxfUEhBU0VfRk1UCisvLyEgICAtIFxyZWYgSTJTX1NJTkdMRV9QSEFTRV9GTVQKKy8vISAtIFdvcmQgbGVuZ3RoOgorLy8hICAgLSBccmVmIEkyU19XT1JEX0xFTkdUSF84CisvLyEgICAtIFxyZWYgSTJTX1dPUkRfTEVOR1RIXzE2CisvLyEgICAtIFxyZWYgSTJTX1dPUkRfTEVOR1RIXzI0CisvLyEgXHBhcmFtIHVpMzJCaXRDbGtEZWxheSBkZWZpbmVzIHRoZSBiaXQgY2xvY2sgZGVsYXkgYnkgc2V0dGluZyB0aGUgbnVtYmVyIG9mIGJpdCBjbG9jayBwZXJpb2RzIGJldHdlZW4gdGhlCisvLyEgcG9zaXRpdmUgd29yZCBjbG9jayBlZGdlIGFuZCB0aGUgTVNCIG9mIHRoZSBmaXJzdCB3b3JkIGluIGEgcGhhc2UuIFRoZSBiaXQKKy8vISBjbG9jayBkZWxheSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSByYXRpbyBiZXR3ZWVuIHRoZSBiaXQgY2xvY2sgYW5kIHRoZSBmcmFtZQorLy8hIGNsb2NrIGFuZCB0aGUgY2hvc2VuIGF1ZGlvIGZvcm1hdC4gVGhlIGJpdCBjbG9jayBkZWxheSBcYiBtdXN0IGJlIGNvbmZpZ3VyZWQKKy8vISBkZXBlbmRpbmcgb24gdGhlIGNob3NlbiBhdWRpbyBmb3JtYXQ6CisvLyEgLSAwICAgICA6IExlZnQgSnVzdGlmaWVkIEZvcm1hdCAoTEpGKS4KKy8vISAtIDEgICAgIDogSTJTIGFuZCBEU1AgZm9ybWF0LgorLy8hIC0gMi0yNTUgOiBSaWdodCBKdXN0aWZpZWQgZm9ybWF0IChSSkYpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJMlNDaGFubmVsQ29uZmlndXJlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJMlNBdWRpb0Zvcm1hdENvbmZpZ3VyZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkZtdENmZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJCaXRDbGtEZWxheSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0dXAgdGhlIGF1ZGlvIGNoYW5uZWwgY29uZmlndXJhdGlvbi4KKy8vIQorLy8hIFRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gaXMgYSBiaXR3aXNlIE9SIG9mIHRoZSBpbnB1dC9vdXRwdXQgbW9kZSBvZiBlYWNoCisvLyEgZGF0YSBsaW5lIGFuZCB0aGUgYWN0aXZlIGF1ZGlvIGNoYW5uZWxzIHdpdGhpbiBhIHNwZWNpZmljIGF1ZGlvIGZyYW1lLgorLy8hCisvLyEgU2V0dGluZyB1cCB0aGUgaW5wdXQvb3V0cHV0IG1vZGUgdXNlIG9uZSBvZjoKKy8vISAtIFxyZWYgSTJTX0xJTkVfVU5VU0VECisvLyEgLSBccmVmIEkyU19MSU5FX0lOUFVUCisvLyEgLSBccmVmIEkyU19MSU5FX09VVFBVVAorLy8hCisvLyEgRm9yIGR1YWwgcGhhc2VkIGF1ZGlvIChMSkYsUkpGLEkyUykgb25seSBtb25vIGFuZCBzdGVyZW8gbW9kZXMgYXJlIGFsbG93ZWQuCisvLyEgRm9yIHNpbmdsZSBwaGFzZWQgYXVkaW8gZm9ybWF0IChEU1ApIHVwIHRvIDggYWN0aXZlIGNoYW5uZWxzIGFyZSBhbGxvd2VkCisvLyEgb24gYSBzaW5nbGUgZGF0YSBsaW5lLiBGb3Igc2V0dGluZyB1cCB0aGUgYWN0aXZlIGNoYW5uZWxzIGluIGEgZnJhbWUgdXNlOgorLy8hIC0gU2luZ2xlIHBoYXNlZCwgdXNlIGEgYml0d2lzZSBPUidlZCBjb21iaW5hdGlvbiBvZjoKKy8vISAgIC0gXHJlZiBJMlNfQ0hBTjBfQUNUCisvLyEgICAtIFxyZWYgSTJTX0NIQU4xX0FDVAorLy8hICAgLSBccmVmIEkyU19DSEFOMl9BQ1QKKy8vISAgIC0gXHJlZiBJMlNfQ0hBTjNfQUNUCisvLyEgICAtIFxyZWYgSTJTX0NIQU40X0FDVAorLy8hICAgLSBccmVmIEkyU19DSEFONV9BQ1QKKy8vISAgIC0gXHJlZiBJMlNfQ0hBTjZfQUNUCisvLyEgICAtIFxyZWYgSTJTX0NIQU43X0FDVAorLy8hIC0gRHVhbCBwaGFzZWQsIHVzZSBvbmUgb2Y6CisvLyEgICAtIFxyZWYgSTJTX01PTk9fTU9ERSAoc2FtZSBhcyBccmVmIEkyU19DSEFOMF9BQ1QpCisvLyEgICAtIFxyZWYgSTJTX1NURVJFT19NT0RFIChzYW1lIGFzIFxyZWYgSTJTX0NIQU4wX0FDVCB8IFxyZWYgSTJTX0NIQU4xX0FDVCkKKy8vIQorLy8hIFxub3RlIFRoZSBhdWRpbyBmb3JtYXQgYW5kIHRoZSBjbG9jayBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBzZXQgdXNpbmcKKy8vISBccmVmIEkyU0F1ZGlvRm9ybWF0Q29uZmlndXJlKCkKKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJDaGFuMENmZyBkZWZpbmVzIHRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gZm9yIGRhdGEgbGluZSAwLgorLy8hIFxwYXJhbSB1aTMyQ2hhbjFDZmcgZGVmaW5lcyB0aGUgY2hhbm5lbCBjb25maWd1cmF0aW9uIGZvciBkYXRhIGxpbmUgMS4KKy8vISBccGFyYW0gdWkzMkNoYW4yQ2ZnIGRlZmluZXMgdGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiBmb3IgZGF0YSBsaW5lIDIuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEkyU0F1ZGlvRm9ybWF0Q29uZmlndXJlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEkyU0NoYW5uZWxDb25maWd1cmUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFuMENmZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNoYW4xQ2ZnLCB1aW50MzJfdCB1aTMyQ2hhbjJDZmcpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgSTJTIGZyYW1lIGNsb2NrLgorLy8hCisvLyEgQ29uZmlndXJlIEkyUyBjbG9jayB0byBiZSBlaXRoZXIgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgYW5kIGVpdGhlciBub3JtYWwKKy8vISBvciBpbnZlcnRlZC4KKy8vIQorLy8hIFxub3RlIFRoZSBiaXQgY2xvY2sgY29uZmlndXJhdGlvbiBpcyBkb25lIGV4dGVybmFsbHksIGJ1dCB0aGUgaW50ZXJuYWwvCisvLyEgZXh0ZXJuYWwgc2V0dGluZyBtdXN0IG1hdGNoIHdoYXQgaXMgY2hvc2VuIGludGVybmFsbHkgaW4gdGhlIEkyUyBtb2R1bGUKKy8vISBmb3IgdGhlIGZyYW1lIGNsb2NrLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJDbGtDb25maWcgaXMgdGhlIGNsb2NrIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBCaXR3aXNlIE9SJ2VkCisvLyEgY29tYmluYXRpb24gb2YgY2xvY2sgc291cmNlIGFuZCBjbG9jayBwb2xhcml0eToKKy8vISAtIENsb2NrIHNvdXJjZToKKy8vISAgIC0gXHJlZiBJMlNfRVhUX1dDTEsgOiBFeHRlcm5hbCBjbG9jay4KKy8vISAgIC0gXHJlZiBJMlNfSU5UX1dDTEsgOiBJbnRlcm5hbCBjbG9jay4KKy8vISAtIENsb2NrIHBvbGFyaXR5OgorLy8hICAgLSBccmVmIEkyU19OT1JNQUxfV0NMSyA6IE5vcm1hbCBjbG9jay4KKy8vISAgIC0gXHJlZiBJMlNfSU5WRVJUX1dDTEsgOiBJbnZlcnRlZCBjbG9jay4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyU0Nsb2NrQ29uZmlndXJlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2xrQ29uZmlnKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMlNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gU2V0dXAgcmVnaXN0ZXIgV0NMSyBTb3VyY2UuCisgICAgLy8KKyAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19BSUZXQ0xLU1JDKSA9IHVpMzJDbGtDb25maWcgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSTJTX0FJRldDTEtTUkNfV0NMS19JTlZfTSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMlNfQUlGV0NMS1NSQ19XQ0xLX1NSQ19NKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgdGhlIGlucHV0IGJ1ZmZlciBwb2ludGVycy4KKy8vIQorLy8hIFRoZSBuZXh0IHBvaW50ZXIgc2hvdWxkIGFsd2F5cyBiZSB3cml0dGVuIHdoaWxlIHRoZSBETUEgaXMgdXNpbmcgdGhlCisvLyEgcHJldmlvdXMgd3JpdHRlbiBwb2ludGVyLiBJZiBub3Qgd3JpdHRlbiBpbiB0aW1lIGFuIFxyZWYgSTJTX0lOVF9QVFJfRVJSIHdpbGwKKy8vISBvY2N1ciBhbmQgYWxsIG91dHB1dHMgd2lsbCBiZSBkaXNhYmxlZC4KKy8vIQorLy8hIFxub3RlIEF0IHN0YXJ0dXAgdGhlIG5leHQgZGF0YSBwb2ludGVyIHNob3VsZCBiZQorLy8hIHdyaXR0ZW4ganVzdCBiZWZvcmUgYW5kIGp1c3QgYWZ0ZXIgY2FsbGluZyB0aGUgXHJlZiBJMlNFbmFibGUoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMlMgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMySW5CdWZCYXNlIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBpbnB1dCBidWZmZXIuCisvLyEgXHBhcmFtIHVpMzJPdXRCdWZCYXNlIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBvdXRwdXQgIGJ1ZmZlci4KKy8vISBccGFyYW0gdWkxNkRNQUJ1ZlNpemUgaXMgdGhlIHNpemUgb2YgdGhlIERNQSBidWZmZXJzLiBNdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIQorLy8hIFxwYXJhbSB1aTE2Q2hhbkJ1ZlNpemUgaXMgdGhlIHNpemUgb2YgdGhlIGNoYW5uZWwgYnVmZmVycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSTJTQnVmZmVyQ29uZmlnKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW5CdWZCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJPdXRCdWZCYXNlLCB1aW50MTZfdCB1aTE2RE1BQnVmU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCB1aTE2Q2hhbkJ1ZlNpemUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVwZGF0ZSB0aGUgYnVmZmVyIHBvaW50ZXJzLgorLy8hCisvLyEgVGhlIG5leHQgcG9pbnRlciBzaG91bGQgYWx3YXlzIGJlIHdyaXR0ZW4gd2hpbGUgdGhlIERNQSBpcyB1c2luZyB0aGUKKy8vISBwcmV2aW91cyB3cml0dGVuIHBvaW50ZXIuIElmIG5vdCB3cml0dGVuIGluIHRpbWUgYW4gXHJlZiBJMlNfSU5UX1BUUl9FUlIgd2lsbCBvY2N1cgorLy8hIGFuZCBhbGwgb3V0cHV0cyB3aWxsIGJlIGRpc2FibGVkLiBOb3RoaW5nIGlzIHByZXZlbnRpbmcgdGhlIHBvaW50ZXJzIGZyb20KKy8vISBiZWluZyBpZGVudGljYWwsIGJ1dCB0aGlzIGZ1bmN0aW9uIHJlbGllcyBvbiBib3RoIHBvaW50ZXJzIChpbnB1dCBvcgorLy8hIG91dHB1dCBwb2ludGVycykgYXJlIHBvaW50aW5nIHRvIGEgdmFsaWQgYWRkcmVzcy4KKy8vIQorLy8hIFxub3RlIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHBvaW50ZXIgdXBkYXRlIGlzIGRvbmUgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQKKy8vISB0byBlbnN1cmUgdGhhdCB0aGUgdXBkYXRlIGlzIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGJ1ZmZlciBpcyBmdWxsLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBtb2R1bGUuCisvLyEgXHBhcmFtIGJJbnB1dCBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXBkYXRlIGlucHV0IG9yIG91dHB1dCBwb2ludGVyLgorLy8hIC0gXGMgdHJ1ZSAgOiBVcGRhdGUgaW5wdXQgcG9pbnRlci4KKy8vISAtIFxjIGZhbHNlIDogVXBkYXRlIG91dHB1dCBwb2ludGVyCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEkyU1BvaW50ZXJTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSTJTUG9pbnRlclVwZGF0ZSh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiSW5wdXQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBhIGJ1ZmZlciBwb2ludGVyIChpbnB1dCBvciBvdXRwdXQpIGRpcmVjdGx5LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBhbGxvd3MgYnlwYXNzaW5nIG9mIHRoZSBwb2ludGVycyBpbiB0aGUgZ2xvYmFsIGNvbnRyb2wgdGFibGUuCisvLyEKKy8vISBUaGUgbmV4dCBwb2ludGVyIHNob3VsZCBhbHdheXMgYmUgd3JpdHRlbiB3aGlsZSB0aGUgRE1BIGlzIHVzaW5nIHRoZQorLy8hIHByZXZpb3VzIHdyaXR0ZW4gcG9pbnRlci4gSWYgbm90IHdyaXR0ZW4gaW4gdGltZSBhbiBccmVmIEkyU19JTlRfUFRSX0VSUiB3aWxsIG9jY3VyCisvLyEgYW5kIGFsbCBvdXRwdXRzIHdpbGwgYmUgZGlzYWJsZWQuIE5vdGhpbmcgaXMgcHJldmVudGluZyB0aGUgcG9pbnRlcnMgZnJvbQorLy8hIGJlaW5nIGlkZW50aWNhbCwgYnV0IHRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIGJvdGggcG9pbnRlcnMgKGlucHV0IG9yCisvLyEgb3V0cHV0IHBvaW50ZXJzKSBhcmUgcG9pbnRpbmcgdG8gYSB2YWxpZCBhZGRyZXNzLgorLy8hCisvLyEgXG5vdGUgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgcG9pbnRlciB1cGRhdGUgaXMgZG9uZSBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dAorLy8hIHRvIGVuc3VyZSB0aGF0IHRoZSB1cGRhdGUgaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGUgYnVmZmVyIGlzIGZ1bGwuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJTIG1vZHVsZS4KKy8vISBccGFyYW0gYklucHV0IGRldGVybWluZXMgd2hldGhlciB0byB1cGRhdGUgaW5wdXQgb3Igb3V0cHV0IHBvaW50ZXIuCisvLyEgLSBcYyB0cnVlICA6IFVwZGF0ZSBpbnB1dCBwb2ludGVyLgorLy8hIC0gXGMgZmFsc2UgOiBVcGRhdGUgb3V0cHV0IHBvaW50ZXIKKy8vISBccGFyYW0gcE5leHRQb2ludGVyIGlzIGEgdm9pZCBwb2ludGVyIHRvIHVzZXIgZGVmaW5lZCBidWZmZXIuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEkyU1BvaW50ZXJVcGRhdGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSTJTUG9pbnRlclNldCh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiSW5wdXQsIHZvaWQgKiBwTmV4dFBvaW50ZXIpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGFuIEkyUyBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFjdHVhbCByZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFRoaXMKKy8vISBmdW5jdGlvbiBlbmFibGVzIHRoZSBnbG9iYWwgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcjsgc3BlY2lmaWMKKy8vISBJMlMgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgdmlhIFxyZWYgSTJTSW50RW5hYmxlKCkuIEl0IGlzIHRoZSBpbnRlcnJ1cHQKKy8vISBoYW5kbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gY2xlYXIgdGhlIGludGVycnVwdCBzb3VyY2UuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJTIHBvcnQuCisvLyEgXHBhcmFtIHBmbkhhbmRsZXIgaXMgYSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUKKy8vISBJMlMgaW50ZXJydXB0IG9jY3Vycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMlNJbnRSZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSwgdm9pZCAoKnBmbkhhbmRsZXIpKHZvaWQpKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMlNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50UmVnaXN0ZXIoSU5UX0kyU19JUlEsIHBmbkhhbmRsZXIpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIEkyUyBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBJbnRFbmFibGUoSU5UX0kyU19JUlEpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBVbnJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYSBJMlMgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhY3R1YWwgdW5yZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIEl0CisvLyEgY2xlYXJzIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGFuIEkyUyBpbnRlcnJ1cHQgb2NjdXJzLiAgVGhpcworLy8hIGZ1bmN0aW9uIGFsc28gbWFza3Mgb2ZmIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIHNvIHRoYXQKKy8vISB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbm8gbG9uZ2VyIGlzIGNhbGxlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMlMgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMlNJbnRVbnJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMlNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICAgIC8vCisgICAgSW50RGlzYWJsZShJTlRfSTJTX0lSUSk7CisKKyAgICAvLworICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50VW5yZWdpc3RlcihJTlRfSTJTX0lSUSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgaW5kaXZpZHVhbCBJMlMgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGluZGljYXRlZCBJMlMgaW50ZXJydXB0IHNvdXJjZXMuIE9ubHkgdGhlCisvLyEgc291cmNlcyB0aGF0IGFyZSBlbmFibGVkIGNhbiBiZSByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQ7CisvLyEgZGlzYWJsZWQgc291cmNlcyBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBwb3J0LgorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgdGhlIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEkyU19JTlRfRE1BX0lOCisvLyEgLSBccmVmIEkyU19JTlRfRE1BX09VVAorLy8hIC0gXHJlZiBJMlNfSU5UX1RJTUVPVVQKKy8vISAtIFxyZWYgSTJTX0lOVF9CVVNfRVJSCisvLyEgLSBccmVmIEkyU19JTlRfV0NMS19FUlIKKy8vISAtIFxyZWYgSTJTX0lOVF9QVFJfRVJSCisvLyEgLSBccmVmIEkyU19JTlRfQUxMIChjb3ZlcnMgYWxsIHRoZSBhYm92ZSkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJTSW50RW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fSVJRTUFTSykgfD0gdWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBpbmRpdmlkdWFsIEkyUyBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGluZGljYXRlZCBJMlMgaW50ZXJydXB0IHNvdXJjZXMuIE9ubHkgdGhlCisvLyEgc291cmNlcyB0aGF0IGFyZSBlbmFibGVkIGNhbiBiZSByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQ7CisvLyEgZGlzYWJsZWQgc291cmNlcyBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBwb3J0LgorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgdGhlIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBkaXNhYmxlZC4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBJMlNfSU5UX0RNQV9JTgorLy8hIC0gXHJlZiBJMlNfSU5UX0RNQV9PVVQKKy8vISAtIFxyZWYgSTJTX0lOVF9USU1FT1VUCisvLyEgLSBccmVmIEkyU19JTlRfQlVTX0VSUgorLy8hIC0gXHJlZiBJMlNfSU5UX1dDTEtfRVJSCisvLyEgLSBccmVmIEkyU19JTlRfUFRSX0VSUgorLy8hIC0gXHJlZiBJMlNfSU5UX0FMTCAoY292ZXJzIGFsbCB0aGUgYWJvdmUpCisvLyEKKy8vISBccmV0dXJuIE5vbmUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyU0ludERpc2FibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJTQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fSVJRTUFTSykgJj0gfnVpMzJJbnRGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZvciB0aGUgc3BlY2lmaWVkIEkyUy4gRWl0aGVyCisvLyEgdGhlIHJhdyBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSBzdGF0dXMgb2YgaW50ZXJydXB0cyB0aGF0IGFyZSBhbGxvd2VkIHRvCisvLyEgcmVmbGVjdCB0byB0aGUgcHJvY2Vzc29yIGNhbiBiZSByZXR1cm5lZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMlMgcG9ydAorLy8hIFxwYXJhbSBiTWFza2VkIHNlbGVjdHMgYmV0d2VlbiByYXcgYW5kIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzOgorLy8hIC0gXGMgZmFsc2UgOiBSYXcgaW50ZXJydXB0IHN0YXR1cyBpcyByZXF1aXJlZC4KKy8vISAtIFxjIHRydWUgIDogTWFza2VkIGludGVycnVwdCBzdGF0dXMgaXMgcmVxdWlyZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cyBhcyBhIHZlY3RvciBvZjoKKy8vISAtIFxyZWYgSTJTX0lOVF9ETUFfSU4KKy8vISAtIFxyZWYgSTJTX0lOVF9ETUFfT1VUCisvLyEgLSBccmVmIEkyU19JTlRfVElNRU9VVAorLy8hIC0gXHJlZiBJMlNfSU5UX0JVU19FUlIKKy8vISAtIFxyZWYgSTJTX0lOVF9XQ0xLX0VSUgorLy8hIC0gXHJlZiBJMlNfSU5UX1BUUl9FUlIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0kyU0ludFN0YXR1cyh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiTWFza2VkKQoreworICAgIHVpbnQzMl90IHVpMzJNYXNrOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZWl0aGVyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBhcworICAgIC8vIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKGJNYXNrZWQpCisgICAgeworICAgICAgICB1aTMyTWFzayA9IEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0lSUUZMQUdTKTsKKyAgICAgICAgcmV0dXJuKHVpMzJNYXNrICYgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fSVJRTUFTSykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fSVJRRkxBR1MpKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyBJMlMgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIEkyUyBpbnRlcnJ1cHQgc291cmNlcyBhcmUgY2xlYXJlZCwgc28gdGhhdCB0aGV5IG5vIGxvbmdlcgorLy8hIGFzc2VydC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8ga2VlcCB0aGUKKy8vISBpbnRlcnJ1cHQgZnJvbSBiZWluZyByZWNvZ25pemVkIGFnYWluIGltbWVkaWF0ZWx5IHVwb24gZXhpdC4KKy8vIQorLy8hIFxub3RlIER1ZSB0byB3cml0ZSBidWZmZXJzIGFuZCBzeW5jaHJvbml6ZXJzIGluIHRoZSBzeXN0ZW0gaXQgbWF5IHRha2Ugc2V2ZXJhbAorLy8hIGNsb2NrIGN5Y2xlcyBmcm9tIGEgcmVnaXN0ZXIgd3JpdGUgY2xlYXJpbmcgYW4gZXZlbnQgaW4gYSBtb2R1bGUgYW5kIHVudGlsIHRoZQorLy8hIGV2ZW50IGlzIGFjdHVhbGx5IGNsZWFyZWQgaW4gdGhlIE5WSUMgb2YgdGhlIHN5c3RlbSBDUFUuIEl0IGlzIHJlY29tbWVuZGVkIHRvCisvLyEgY2xlYXIgdGhlIGV2ZW50IHNvdXJjZSBlYXJseSBpbiB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAoSVNSKSB0byBhbGxvdworLy8hIHRoZSBldmVudCBjbGVhciB0byBwcm9wYWdhdGUgdG8gdGhlIE5WSUMgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IuCisvLyEgQXQgdGhlIHNhbWUgdGltZSwgYW4gZWFybHkgZXZlbnQgY2xlYXIgYWxsb3dzIG5ldyBldmVudHMgb2YgdGhlIHNhbWUgdHlwZSB0byBiZQorLy8hIHBlbmRlZCBpbnN0ZWFkIG9mIGlnbm9yZWQgaWYgdGhlIGV2ZW50IGlzIGNsZWFyZWQgbGF0ZXIgaW4gdGhlIElTUi4KKy8vISBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHByb2dyYW1tZXIgdG8gbWFrZSBzdXJlIHRoYXQgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZAorLy8hIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIHRvIGF2b2lkIGZhbHNlIHJlLXRyaWdnZXJpbmcgb2YgdGhlIGNsZWFyZWQgZXZlbnQuCisvLyEgQSBzaW1wbGUsIGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSBvcHRpbWFsLCB3YXkgb2YgY2xlYXJpbmcgYW4gZXZlbnQgYmVmb3JlCisvLyEgcmV0dXJuaW5nIGZyb20gdGhlIElTUiBpczoKKy8vISAtIyBXcml0ZSB0byBjbGVhciBldmVudCAoaW50ZXJydXB0IHNvdXJjZSkuIChidWZmZXJlZCB3cml0ZSkKKy8vISAtIyBEdW1teSByZWFkIGZyb20gdGhlIGV2ZW50IHNvdXJjZSBtb2R1bGUuIChtYWtpbmcgc3VyZSB0aGUgd3JpdGUgaGFzIHByb3BhZ2F0ZWQpCisvLyEgLSMgV2FpdCB0d28gc3lzdGVtIENQVSBjbG9jayBjeWNsZXMgKHVzZXIgY29kZSBvciB0d28gTk9QcykuIChhbGxvd2luZyBjbGVhcmVkIGV2ZW50IHRvIHByb3BhZ2F0ZSB0aHJvdWdoIGFueSBzeW5jaHJvbml6ZXJzKQorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBwb3J0LgorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgYSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgY2xlYXJlZC4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBJMlNfSU5UX0RNQV9JTgorLy8hIC0gXHJlZiBJMlNfSU5UX0RNQV9PVVQKKy8vISAtIFxyZWYgSTJTX0lOVF9USU1FT1VUCisvLyEgLSBccmVmIEkyU19JTlRfQlVTX0VSUgorLy8hIC0gXHJlZiBJMlNfSU5UX1dDTEtfRVJSCisvLyEgLSBccmVmIEkyU19JTlRfUFRSX0VSUgorLy8hIC0gXHJlZiBJMlNfSU5UX0FMTCAoY292ZXJzIGFsbCB0aGUgYWJvdmUpCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJTSW50Q2xlYXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJTQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSByZXF1ZXN0ZWQgaW50ZXJydXB0IHNvdXJjZXMuCisgICAgLy8KKyAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19JUlFDTFIpID0gdWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgdGhlIFNhbXBsZSBTdGFtcCBnZW5lcmF0b3IuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBlbmFibGUgdGhlIHNhbXBsZSBzdGFtcCBnZW5lcmF0b3JzLgorLy8hCisvLyEgXG5vdGUgSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUgc2FtcGxlIHN0YW1wCisvLyEgZ2VuZXJhdG9yIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgYmVmb3JlIGl0IGlzIGVuYWJsZWQuIEl0IGlzIHRoZSBzZXR0aW5nCisvLyEgb2YgdGhlIElucHV0IGFuZCBPdXRwdXQgdHJpZ2dlcnMgY29uZmlndXJlZCB1c2luZyBccmVmIEkyU1NhbXBsZVN0YW1wQ29uZmlndXJlKCkKKy8vISB0aGF0IHRyaWdnZXJzIHRoZSBzdGFydCBwb2ludCBvZiB0aGUgYXVkaW8gc3RyZWFtcy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMlNTYW1wbGVTdGFtcEVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIFNldCB0aGUgZW5hYmxlIGJpdC4KKyAgICAvLworICAgICh2b2lkKXVpMzJCYXNlOworICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX1NUTVBDVEwpID0gSTJTX1NUTVBDVExfU1RNUF9FTjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSB0aGUgU2FtcGxlIFN0YW1wIGdlbmVyYXRvci4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRpc2FibGUgdGhlIHNhbXBsZSBzdGFtcCBnZW5lcmF0b3JzLiBXaGVuIHRoZSBzYW1wbGUKKy8vISBzdGFtcCBnZW5lcmF0b3IgaXMgZGlzYWJsZWQsIHRoZSBjbG9jayBjb3VudGVycyBhcmUgYXV0b21hdGljYWxseSBjbGVhcmVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyU1NhbXBsZVN0YW1wRGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSBlbmFibGUgYml0LgorICAgIC8vCisgICAgKHZvaWQpdWkzMkJhc2U7CisgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fU1RNUENUTCkgPSAwOworCit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgc2FtcGxlIHN0YW1wIGdlbmVyYXRvci4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbmZpZ3VyZSB0aGUgc2FtcGxlIHN0YW1wIGdlbmVyYXRvci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMlMgbW9kdWxlLgorLy8hIFxwYXJhbSBiSW5wdXQgZW5hYmxlcyB0cmlnZ2VyaW5nIG9mIHRoZSBzYW1wbGUgc3RhbXAgZ2VuZXJhdG9yIG9uIGlucHV0LgorLy8hIFxwYXJhbSBiT3V0cHV0IGVuYWJsZXMgdHJpZ2dlcmluZyBvZiB0aGUgc2FtcGxlIHN0YW1wIGdlbmVyYXRvciBvbiBvdXRwdXQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJMlNTYW1wbGVTdGFtcENvbmZpZ3VyZSh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiSW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJPdXRwdXQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBzYW1wbGUgc3RhbXAgY291bnRlci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMlMgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbCBpcyB0aGUgc2FtcGxlIHN0YW1wIGNvdW50ZXIgdG8gc2FtcGxlCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIHNhbXBsZSBzdGFtcCBjaGFubmVsLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBJMlNTYW1wbGVTdGFtcEdldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWwpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9JMlNFbmFibGUKKyAgICAgICAgI3VuZGVmICBJMlNFbmFibGUKKyAgICAgICAgI2RlZmluZSBJMlNFbmFibGUgICAgICAgICAgICAgICAgICAgICAgIFJPTV9JMlNFbmFibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0kyU0F1ZGlvRm9ybWF0Q29uZmlndXJlCisgICAgICAgICN1bmRlZiAgSTJTQXVkaW9Gb3JtYXRDb25maWd1cmUKKyAgICAgICAgI2RlZmluZSBJMlNBdWRpb0Zvcm1hdENvbmZpZ3VyZSAgICAgICAgIFJPTV9JMlNBdWRpb0Zvcm1hdENvbmZpZ3VyZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSTJTQ2hhbm5lbENvbmZpZ3VyZQorICAgICAgICAjdW5kZWYgIEkyU0NoYW5uZWxDb25maWd1cmUKKyAgICAgICAgI2RlZmluZSBJMlNDaGFubmVsQ29uZmlndXJlICAgICAgICAgICAgIFJPTV9JMlNDaGFubmVsQ29uZmlndXJlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JMlNCdWZmZXJDb25maWcKKyAgICAgICAgI3VuZGVmICBJMlNCdWZmZXJDb25maWcKKyAgICAgICAgI2RlZmluZSBJMlNCdWZmZXJDb25maWcgICAgICAgICAgICAgICAgIFJPTV9JMlNCdWZmZXJDb25maWcKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0kyU1BvaW50ZXJVcGRhdGUKKyAgICAgICAgI3VuZGVmICBJMlNQb2ludGVyVXBkYXRlCisgICAgICAgICNkZWZpbmUgSTJTUG9pbnRlclVwZGF0ZSAgICAgICAgICAgICAgICBST01fSTJTUG9pbnRlclVwZGF0ZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSTJTUG9pbnRlclNldAorICAgICAgICAjdW5kZWYgIEkyU1BvaW50ZXJTZXQKKyAgICAgICAgI2RlZmluZSBJMlNQb2ludGVyU2V0ICAgICAgICAgICAgICAgICAgIFJPTV9JMlNQb2ludGVyU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JMlNTYW1wbGVTdGFtcENvbmZpZ3VyZQorICAgICAgICAjdW5kZWYgIEkyU1NhbXBsZVN0YW1wQ29uZmlndXJlCisgICAgICAgICNkZWZpbmUgSTJTU2FtcGxlU3RhbXBDb25maWd1cmUgICAgICAgICBST01fSTJTU2FtcGxlU3RhbXBDb25maWd1cmUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0kyU1NhbXBsZVN0YW1wR2V0CisgICAgICAgICN1bmRlZiAgSTJTU2FtcGxlU3RhbXBHZXQKKyAgICAgICAgI2RlZmluZSBJMlNTYW1wbGVTdGFtcEdldCAgICAgICAgICAgICAgIFJPTV9JMlNTYW1wbGVTdGFtcEdldAorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gIF9fSTJTX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaW50ZXJydXB0LmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pbnRlcnJ1cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTA0YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaW50ZXJydXB0LmMKQEAgLTAsMCArMSw1NzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBpbnRlcnJ1cHQuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMzAgMTI6NDg6MTcgKzAyMDAgKE1vbiwgMzAgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDY1NTIKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBOVklDIEludGVycnVwdCBDb250cm9sbGVyLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIEludFJlZ2lzdGVyCisgICAgI2RlZmluZSBJbnRSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFJlZ2lzdGVyCisgICAgI3VuZGVmICBJbnRVbnJlZ2lzdGVyCisgICAgI2RlZmluZSBJbnRVbnJlZ2lzdGVyICAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFVucmVnaXN0ZXIKKyAgICAjdW5kZWYgIEludFByaW9yaXR5R3JvdXBpbmdTZXQKKyAgICAjZGVmaW5lIEludFByaW9yaXR5R3JvdXBpbmdTZXQgICAgICAgICAgTk9ST01fSW50UHJpb3JpdHlHcm91cGluZ1NldAorICAgICN1bmRlZiAgSW50UHJpb3JpdHlHcm91cGluZ0dldAorICAgICNkZWZpbmUgSW50UHJpb3JpdHlHcm91cGluZ0dldCAgICAgICAgICBOT1JPTV9JbnRQcmlvcml0eUdyb3VwaW5nR2V0CisgICAgI3VuZGVmICBJbnRQcmlvcml0eVNldAorICAgICNkZWZpbmUgSW50UHJpb3JpdHlTZXQgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRQcmlvcml0eVNldAorICAgICN1bmRlZiAgSW50UHJpb3JpdHlHZXQKKyAgICAjZGVmaW5lIEludFByaW9yaXR5R2V0ICAgICAgICAgICAgICAgICAgTk9ST01fSW50UHJpb3JpdHlHZXQKKyAgICAjdW5kZWYgIEludEVuYWJsZQorICAgICNkZWZpbmUgSW50RW5hYmxlICAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRFbmFibGUKKyAgICAjdW5kZWYgIEludERpc2FibGUKKyAgICAjZGVmaW5lIEludERpc2FibGUgICAgICAgICAgICAgICAgICAgICAgTk9ST01fSW50RGlzYWJsZQorICAgICN1bmRlZiAgSW50UGVuZFNldAorICAgICNkZWZpbmUgSW50UGVuZFNldCAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRQZW5kU2V0CisgICAgI3VuZGVmICBJbnRQZW5kR2V0CisgICAgI2RlZmluZSBJbnRQZW5kR2V0ICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFBlbmRHZXQKKyAgICAjdW5kZWYgIEludFBlbmRDbGVhcgorICAgICNkZWZpbmUgSW50UGVuZENsZWFyICAgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRQZW5kQ2xlYXIKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgYSBtYXBwaW5nIGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgZW5jb2RpbmdzIGFuZCB0aGUgbnVtYmVyIG9mCisvLyEgcHJlZW1wdGlvbiBwcmlvcml0eSBiaXRzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBnX3B1aTMyUHJpb3JpdHlbXSA9Cit7CisgICAgTlZJQ19BUElOVF9QUklHUk9VUF8wXzgsIE5WSUNfQVBJTlRfUFJJR1JPVVBfMV83LCBOVklDX0FQSU5UX1BSSUdST1VQXzJfNiwKKyAgICBOVklDX0FQSU5UX1BSSUdST1VQXzNfNSwgTlZJQ19BUElOVF9QUklHUk9VUF80XzQsIE5WSUNfQVBJTlRfUFJJR1JPVVBfNV8zLAorICAgIE5WSUNfQVBJTlRfUFJJR1JPVVBfNl8yLCBOVklDX0FQSU5UX1BSSUdST1VQXzdfMQorfTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGlzIGlzIGEgbWFwcGluZyBiZXR3ZWVuIGludGVycnVwdCBudW1iZXIgYW5kIHRoZSByZWdpc3RlciB0aGF0IGNvbnRhaW5zCisvLyEgdGhlIHByaW9yaXR5IGVuY29kaW5nIGZvciB0aGF0IGludGVycnVwdC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgY29uc3QgdWludDMyX3QgZ19wdWkzMlJlZ3NbXSA9Cit7CisgICAgMCwgTlZJQ19TWVNfUFJJMSwgTlZJQ19TWVNfUFJJMiwgTlZJQ19TWVNfUFJJMywgTlZJQ19QUkkwLCBOVklDX1BSSTEsCisgICAgTlZJQ19QUkkyLCBOVklDX1BSSTMsIE5WSUNfUFJJNCwgTlZJQ19QUkk1LCBOVklDX1BSSTYsIE5WSUNfUFJJNywKKyAgICBOVklDX1BSSTgsIE5WSUNfUFJJOSwgTlZJQ19QUkkxMCwgTlZJQ19QUkkxMSwgTlZJQ19QUkkxMiwgTlZJQ19QUkkxMworfTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVGhlIGRlZmF1bHQgaW50ZXJydXB0IGhhbmRsZXIuCisvLyEKKy8vISBUaGlzIGlzIHRoZSBkZWZhdWx0IGludGVycnVwdCBoYW5kbGVyIGZvciBhbGwgaW50ZXJydXB0cy4gSXQgc2ltcGx5IGxvb3BzCisvLyEgZm9yZXZlciBzbyB0aGF0IHRoZSBzeXN0ZW0gc3RhdGUgaXMgcHJlc2VydmVkIGZvciBvYnNlcnZhdGlvbiBieSBhCisvLyEgZGVidWdnZXIuIFNpbmNlIGludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1bnJlZ2lzdGVyaW5nIHRoZQorLy8hIGNvcnJlc3BvbmRpbmcgaGFuZGxlciwgdGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHZvaWQKK0ludERlZmF1bHRIYW5kbGVyKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBHbyBpbnRvIGFuIGluZmluaXRlIGxvb3AuCisgICAgLy8KKyAgICB3aGlsZSgxKQorICAgIHsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgcHJvY2Vzc29yIHZlY3RvciB0YWJsZS4KKy8vCisvLyBUaGlzIGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgaGFuZGxlcnMgZm9yIHRoZSB2YXJpb3VzIGludGVycnVwdCBzb3VyY2VzIGluCisvLyB0aGUgc3lzdGVtLiBUaGUgbGF5b3V0IG9mIHRoaXMgbGlzdCBpcyBkZWZpbmVkIGJ5IHRoZSBoYXJkd2FyZTsgYXNzZXJ0aW9uCisvLyBvZiBhbiBpbnRlcnJ1cHQgY2F1c2VzIHRoZSBwcm9jZXNzb3IgdG8gc3RhcnQgZXhlY3V0aW5nIGRpcmVjdGx5IGF0IHRoZQorLy8gYWRkcmVzcyBnaXZlbiBpbiB0aGUgY29ycmVzcG9uZGluZyBsb2NhdGlvbiBpbiB0aGlzIGxpc3QuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKKyNwcmFnbWEgZGF0YV9hbGlnbm1lbnQ9MjU2CitzdGF0aWMgX19ub19pbml0IHZvaWQgKCpnX3BmblJBTVZlY3RvcnNbTlVNX0lOVEVSUlVQVFNdKSh2b2lkKSBAICIudnRhYmxlX3JhbSI7CisjZWxpZiBkZWZpbmVkKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fKSB8fCBkZWZpbmVkKERPWFlHRU4pCisjcHJhZ21hIERBVEFfQUxJR04oZ19wZm5SQU1WZWN0b3JzLCAyNTYpCisjcHJhZ21hIERBVEFfU0VDVElPTihnX3BmblJBTVZlY3RvcnMsICIudnRhYmxlX3JhbSIpCit2b2lkICgqZ19wZm5SQU1WZWN0b3JzW05VTV9JTlRFUlJVUFRTXSkodm9pZCk7CisjZWxpZiBkZWZpbmVkIChfX0NDX0FSTSkKK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJ2dGFibGVfcmFtIikpKQordm9pZCAoKmdfcGZuUkFNVmVjdG9yc1tOVU1fSU5URVJSVVBUU10pKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpOworI2Vsc2UKK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJ2dGFibGVfcmFtIikpKQordm9pZCAoKmdfcGZuUkFNVmVjdG9yc1tOVU1fSU5URVJSVVBUU10pKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpOworI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgUmVnaXN0ZXJzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gaW50ZXJydXB0IG9jY3Vycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJbnRSZWdpc3Rlcih1aW50MzJfdCB1aTMySW50ZXJydXB0LCB2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpCit7CisgICAgdWludDMyX3QgdWkzMklkeCwgdWkzMlZhbHVlOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJbnRlcnJ1cHQgPCBOVU1fSU5URVJSVVBUUyk7CisKKyAgICAvLworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBSQU0gdmVjdG9yIHRhYmxlIGlzIGNvcnJlY3RseSBhbGlnbmVkLgorICAgIC8vCisgICAgQVNTRVJUKCgodWludDMyX3QpZ19wZm5SQU1WZWN0b3JzICYgMHgwMDAwMDBmZikgPT0gMCk7CisKKyAgICAvLworICAgIC8vIFNlZSBpZiB0aGUgUkFNIHZlY3RvciB0YWJsZSBoYXMgYmVlbiBpbml0aWFsaXplZC4KKyAgICAvLworICAgIGlmKEhXUkVHKE5WSUNfVlRBQkxFKSAhPSAodWludDMyX3QpZ19wZm5SQU1WZWN0b3JzKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29weSB0aGUgdmVjdG9yIHRhYmxlIGZyb20gdGhlIGJlZ2lubmluZyBvZiBGTEFTSCB0byB0aGUgUkFNIHZlY3RvcgorICAgICAgICAvLyB0YWJsZS4KKyAgICAgICAgLy8KKyAgICAgICAgdWkzMlZhbHVlID0gSFdSRUcoTlZJQ19WVEFCTEUpOworICAgICAgICBmb3IodWkzMklkeCA9IDA7IHVpMzJJZHggPCBOVU1fSU5URVJSVVBUUzsgdWkzMklkeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBnX3BmblJBTVZlY3RvcnNbdWkzMklkeF0gPSAodm9pZCAoKikodm9pZCkpSFdSRUcoKHVpMzJJZHggKiA0KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aTMyVmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUG9pbnQgTlZJQyBhdCB0aGUgUkFNIHZlY3RvciB0YWJsZS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19WVEFCTEUpID0gKHVpbnQzMl90KWdfcGZuUkFNVmVjdG9yczsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNhdmUgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgZ19wZm5SQU1WZWN0b3JzW3VpMzJJbnRlcnJ1cHRdID0gcGZuSGFuZGxlcjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBVbnJlZ2lzdGVycyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gaW50ZXJydXB0IG9jY3Vycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJbnRVbnJlZ2lzdGVyKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJbnRlcnJ1cHQgPCBOVU1fSU5URVJSVVBUUyk7CisKKyAgICAvLworICAgIC8vIFJlc2V0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIGdfcGZuUkFNVmVjdG9yc1t1aTMySW50ZXJydXB0XSA9IEludERlZmF1bHRIYW5kbGVyOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFNldHMgdGhlIHByaW9yaXR5IGdyb3VwaW5nIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJbnRQcmlvcml0eUdyb3VwaW5nU2V0KHVpbnQzMl90IHVpMzJCaXRzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMyQml0cyA8IE5VTV9QUklPUklUWSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcuCisgICAgLy8KKyAgICBIV1JFRyhOVklDX0FQSU5UKSA9IE5WSUNfQVBJTlRfVkVDVEtFWSB8IGdfcHVpMzJQcmlvcml0eVt1aTMyQml0c107Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0cyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0ludFByaW9yaXR5R3JvdXBpbmdHZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyTG9vcCwgdWkzMlZhbHVlOworCisgICAgLy8KKyAgICAvLyBSZWFkIHRoZSBwcmlvcml0eSBncm91cGluZy4KKyAgICAvLworICAgIHVpMzJWYWx1ZSA9IEhXUkVHKE5WSUNfQVBJTlQpICYgTlZJQ19BUElOVF9QUklHUk9VUF9NOworCisgICAgLy8KKyAgICAvLyBMb29wIHRocm91Z2ggdGhlIHByaW9yaXR5IGdyb3VwaW5nIHZhbHVlcy4KKyAgICAvLworICAgIGZvcih1aTMyTG9vcCA9IDA7IHVpMzJMb29wIDwgTlVNX1BSSU9SSVRZOyB1aTMyTG9vcCsrKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RvcCBsb29waW5nIGlmIHRoaXMgdmFsdWUgbWF0Y2hlcy4KKyAgICAgICAgLy8KKyAgICAgICAgaWYodWkzMlZhbHVlID09IGdfcHVpMzJQcmlvcml0eVt1aTMyTG9vcF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBwcmlvcml0eSBiaXRzLgorICAgIC8vCisgICAgcmV0dXJuKHVpMzJMb29wKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTZXRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJbnRQcmlvcml0eVNldCh1aW50MzJfdCB1aTMySW50ZXJydXB0LCB1aW50OF90IHVpOFByaW9yaXR5KQoreworICAgIHVpbnQzMl90IHVpMzJUZW1wOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMySW50ZXJydXB0ID49IDQpICYmICh1aTMySW50ZXJydXB0IDwgTlVNX0lOVEVSUlVQVFMpKTsKKyAgICBBU1NFUlQodWk4UHJpb3JpdHkgPD0gSU5UX1BSSV9MRVZFTDcpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGludGVycnVwdCBwcmlvcml0eS4KKyAgICAvLworICAgIHVpMzJUZW1wID0gSFdSRUcoZ19wdWkzMlJlZ3NbdWkzMkludGVycnVwdCA+PiAyXSk7CisgICAgdWkzMlRlbXAgJj0gfigweEZGIDw8ICg4ICogKHVpMzJJbnRlcnJ1cHQgJiAzKSkpOworICAgIHVpMzJUZW1wIHw9IHVpOFByaW9yaXR5IDw8ICg4ICogKHVpMzJJbnRlcnJ1cHQgJiAzKSk7CisgICAgSFdSRUcoZ19wdWkzMlJlZ3NbdWkzMkludGVycnVwdCA+PiAyXSkgPSB1aTMyVGVtcDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitpbnQzMl90CitJbnRQcmlvcml0eUdldCh1aW50MzJfdCB1aTMySW50ZXJydXB0KQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkludGVycnVwdCA+PSA0KSAmJiAodWkzMkludGVycnVwdCA8IE5VTV9JTlRFUlJVUFRTKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgaW50ZXJydXB0IHByaW9yaXR5LgorICAgIC8vCisgICAgcmV0dXJuKChIV1JFRyhnX3B1aTMyUmVnc1t1aTMySW50ZXJydXB0ID4+IDJdKSA+PiAoOCAqICh1aTMySW50ZXJydXB0ICYgMykpKSAmCisgICAgICAgICAgIDB4RkYpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEVuYWJsZXMgYW4gaW50ZXJydXB0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSW50RW5hYmxlKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJbnRlcnJ1cHQgPCBOVU1fSU5URVJSVVBUUyk7CisKKyAgICAvLworICAgIC8vIERldGVybWluZSB0aGUgaW50ZXJydXB0IHRvIGVuYWJsZS4KKyAgICAvLworICAgIGlmKHVpMzJJbnRlcnJ1cHQgPT0gSU5UX01FTU1BTkFHRV9GQVVMVCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEVuYWJsZSB0aGUgTWVtTWFuYWdlIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19TWVNfSE5EX0NUUkwpIHw9IE5WSUNfU1lTX0hORF9DVFJMX01FTTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMySW50ZXJydXB0ID09IElOVF9CVVNfRkFVTFQpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBFbmFibGUgdGhlIGJ1cyBmYXVsdCBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKE5WSUNfU1lTX0hORF9DVFJMKSB8PSBOVklDX1NZU19ITkRfQ1RSTF9CVVM7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkludGVycnVwdCA9PSBJTlRfVVNBR0VfRkFVTFQpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBFbmFibGUgdGhlIHVzYWdlIGZhdWx0IGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19TWVNfSE5EX0NUUkwpIHw9IE5WSUNfU1lTX0hORF9DVFJMX1VTQUdFOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJJbnRlcnJ1cHQgPT0gSU5UX1NZU1RJQ0spCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBFbmFibGUgdGhlIFN5c3RlbSBUaWNrIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19TVF9DVFJMKSB8PSBOVklDX1NUX0NUUkxfSU5URU47CisgICAgfQorICAgIGVsc2UgaWYoKHVpMzJJbnRlcnJ1cHQgPj0gMTYpICYmICh1aTMySW50ZXJydXB0IDw9IDQ3KSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEVuYWJsZSB0aGUgZ2VuZXJhbCBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKE5WSUNfRU4wKSA9IDEgPDwgKHVpMzJJbnRlcnJ1cHQgLSAxNik7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkludGVycnVwdCA+PSA0OCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEVuYWJsZSB0aGUgZ2VuZXJhbCBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKE5WSUNfRU4xKSA9IDEgPDwgKHVpMzJJbnRlcnJ1cHQgLSA0OCk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIERpc2FibGVzIGFuIGludGVycnVwdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0ludERpc2FibGUodWludDMyX3QgdWkzMkludGVycnVwdCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMkludGVycnVwdCA8IE5VTV9JTlRFUlJVUFRTKTsKKworICAgIC8vCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbnRlcnJ1cHQgdG8gZGlzYWJsZS4KKyAgICAvLworICAgIGlmKHVpMzJJbnRlcnJ1cHQgPT0gSU5UX01FTU1BTkFHRV9GQVVMVCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIERpc2FibGUgdGhlIE1lbU1hbmFnZSBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKE5WSUNfU1lTX0hORF9DVFJMKSAmPSB+KE5WSUNfU1lTX0hORF9DVFJMX01FTSk7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkludGVycnVwdCA9PSBJTlRfQlVTX0ZBVUxUKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGlzYWJsZSB0aGUgYnVzIGZhdWx0IGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19TWVNfSE5EX0NUUkwpICY9IH4oTlZJQ19TWVNfSE5EX0NUUkxfQlVTKTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMySW50ZXJydXB0ID09IElOVF9VU0FHRV9GQVVMVCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIERpc2FibGUgdGhlIHVzYWdlIGZhdWx0IGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19TWVNfSE5EX0NUUkwpICY9IH4oTlZJQ19TWVNfSE5EX0NUUkxfVVNBR0UpOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJJbnRlcnJ1cHQgPT0gSU5UX1NZU1RJQ0spCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBEaXNhYmxlIHRoZSBTeXN0ZW0gVGljayBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKE5WSUNfU1RfQ1RSTCkgJj0gfihOVklDX1NUX0NUUkxfSU5URU4pOworICAgIH0KKyAgICBlbHNlIGlmKCh1aTMySW50ZXJydXB0ID49IDE2KSAmJiAodWkzMkludGVycnVwdCA8PSA0NykpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBEaXNhYmxlIHRoZSBnZW5lcmFsIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19ESVMwKSA9IDEgPDwgKHVpMzJJbnRlcnJ1cHQgLSAxNik7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkludGVycnVwdCA+PSA0OCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIERpc2FibGUgdGhlIGdlbmVyYWwgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX0RJUzEpID0gMSA8PCAodWkzMkludGVycnVwdCAtIDQ4KTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgUGVuZHMgYW4gaW50ZXJydXB0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSW50UGVuZFNldCh1aW50MzJfdCB1aTMySW50ZXJydXB0KQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySW50ZXJydXB0IDwgTlVNX0lOVEVSUlVQVFMpOworCisgICAgLy8KKyAgICAvLyBEZXRlcm1pbmUgdGhlIGludGVycnVwdCB0byBwZW5kLgorICAgIC8vCisgICAgaWYodWkzMkludGVycnVwdCA9PSBJTlRfTk1JX0ZBVUxUKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUGVuZCB0aGUgTk1JIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19JTlRfQ1RSTCkgfD0gTlZJQ19JTlRfQ1RSTF9OTUlfU0VUOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJJbnRlcnJ1cHQgPT0gSU5UX1BFTkRTVikKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFBlbmQgdGhlIFBlbmRTViBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKE5WSUNfSU5UX0NUUkwpIHw9IE5WSUNfSU5UX0NUUkxfUEVORF9TVjsKKyAgICB9CisgICAgZWxzZSBpZih1aTMySW50ZXJydXB0ID09IElOVF9TWVNUSUNLKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUGVuZCB0aGUgU3lzVGljayBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKE5WSUNfSU5UX0NUUkwpIHw9IE5WSUNfSU5UX0NUUkxfUEVORFNUU0VUOworICAgIH0KKyAgICBlbHNlIGlmKCh1aTMySW50ZXJydXB0ID49IDE2KSAmJiAodWkzMkludGVycnVwdCA8PSA0NykpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBQZW5kIHRoZSBnZW5lcmFsIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19QRU5EMCkgPSAxIDw8ICh1aTMySW50ZXJydXB0IC0gMTYpOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJJbnRlcnJ1cHQgPj0gNDgpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBQZW5kIHRoZSBnZW5lcmFsIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19QRU5EMSkgPSAxIDw8ICh1aTMySW50ZXJydXB0IC0gNDgpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBRdWVyeSB3aGV0aGVyIGFuIGludGVycnVwdCBpcyBwZW5kaW5nCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorYm9vbAorSW50UGVuZEdldCh1aW50MzJfdCB1aTMySW50ZXJydXB0KQoreworICAgIHVpbnQzMl90IHVpMzJJbnRQZW5kaW5nOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJbnRlcnJ1cHQgPCBOVU1fSU5URVJSVVBUUyk7CisKKyAgICAvLworICAgIC8vIEFzc3VtZSBubyBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nLgorICAgIC8vCisgICAgdWkzMkludFBlbmRpbmcgPSAwOworCisgICAgLy8KKyAgICAvLyBUaGUgbG93ZXIgMTYgSVJRIHZlY3RvcnMgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAgICAvLworICAgIGlmICh1aTMySW50ZXJydXB0IDwgMTYpCisgICAgeworCisgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTdWJ0cmFjdCBsb3dlciAxNiBpcnEgdmVjdG9ycworICAgIC8vCisgICAgdWkzMkludGVycnVwdCAtPSAxNjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgdGhlIGludGVycnVwdCBpcyBwZW5kaW5nCisgICAgLy8KKyAgICB1aTMySW50UGVuZGluZyA9IEhXUkVHKE5WSUNfUEVORDAgKyAodWkzMkludGVycnVwdCAvIDMyKSk7CisgICAgdWkzMkludFBlbmRpbmcgJj0gKDEgPDwgKHVpMzJJbnRlcnJ1cHQgJiAzMSkpOworCisgICAgcmV0dXJuIHVpMzJJbnRQZW5kaW5nID8gdHJ1ZSA6IGZhbHNlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFVucGVuZHMgYW4gaW50ZXJydXB0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSW50UGVuZENsZWFyKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJbnRlcnJ1cHQgPCBOVU1fSU5URVJSVVBUUyk7CisKKyAgICAvLworICAgIC8vIERldGVybWluZSB0aGUgaW50ZXJydXB0IHRvIHVucGVuZC4KKyAgICAvLworICAgIGlmKHVpMzJJbnRlcnJ1cHQgPT0gSU5UX1BFTkRTVikKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFVucGVuZCB0aGUgUGVuZFNWIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19JTlRfQ1RSTCkgfD0gTlZJQ19JTlRfQ1RSTF9VTlBFTkRfU1Y7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkludGVycnVwdCA9PSBJTlRfU1lTVElDSykKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFVucGVuZCB0aGUgU3lzVGljayBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKE5WSUNfSU5UX0NUUkwpIHw9IE5WSUNfSU5UX0NUUkxfUEVORFNUQ0xSOworICAgIH0KKyAgICBlbHNlIGlmKCh1aTMySW50ZXJydXB0ID49IDE2KSAmJiAodWkzMkludGVycnVwdCA8PSA0NykpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBVbnBlbmQgdGhlIGdlbmVyYWwgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX1VOUEVORDApID0gMSA8PCAodWkzMkludGVycnVwdCAtIDE2KTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMySW50ZXJydXB0ID49IDQ4KQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVW5wZW5kIHRoZSBnZW5lcmFsIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19VTlBFTkQxKSA9IDEgPDwgKHVpMzJJbnRlcnJ1cHQgLSA0OCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaW50ZXJydXB0LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pbnRlcnJ1cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDg3MjRlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaW50ZXJydXB0LmgKQEAgLTAsMCArMSw1MTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBpbnRlcnJ1cHQuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDctMjQgMTU6MDA6NTUgKzAyMDAgKEZyaSwgMjQgSnVsIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQyMDMKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgTlZJQyBJbnRlcnJ1cHQgQ29udHJvbGxlcgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBzeXN0ZW1fY3B1X2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBpbnRlcnJ1cHRfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19JTlRFUlJVUFRfSF9fCisjZGVmaW5lIF9fSU5URVJSVVBUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbnZpYy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9jcHUuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgSW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRSZWdpc3RlcgorICAgICNkZWZpbmUgSW50VW5yZWdpc3RlciAgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRVbnJlZ2lzdGVyCisgICAgI2RlZmluZSBJbnRQcmlvcml0eUdyb3VwaW5nU2V0ICAgICAgICAgIE5PUk9NX0ludFByaW9yaXR5R3JvdXBpbmdTZXQKKyAgICAjZGVmaW5lIEludFByaW9yaXR5R3JvdXBpbmdHZXQgICAgICAgICAgTk9ST01fSW50UHJpb3JpdHlHcm91cGluZ0dldAorICAgICNkZWZpbmUgSW50UHJpb3JpdHlTZXQgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRQcmlvcml0eVNldAorICAgICNkZWZpbmUgSW50UHJpb3JpdHlHZXQgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRQcmlvcml0eUdldAorICAgICNkZWZpbmUgSW50RW5hYmxlICAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRFbmFibGUKKyAgICAjZGVmaW5lIEludERpc2FibGUgICAgICAgICAgICAgICAgICAgICAgTk9ST01fSW50RGlzYWJsZQorICAgICNkZWZpbmUgSW50UGVuZFNldCAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRQZW5kU2V0CisgICAgI2RlZmluZSBJbnRQZW5kR2V0ICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFBlbmRHZXQKKyAgICAjZGVmaW5lIEludFBlbmRDbGVhciAgICAgICAgICAgICAgICAgICAgTk9ST01fSW50UGVuZENsZWFyCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hY3JvIHRvIGdlbmVyYXRlIGFuIGludGVycnVwdCBwcmlvcml0eSBtYXNrIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgYml0cworLy8gb2YgcHJpb3JpdHkgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4gRm9yIENDMjZ4eCB0aGUgbnVtYmVyIG9mIHByaW9yaXR5CisvLyBiaXQgaXMgMyBhcyBkZWZpbmVkIGluIDx0dD5od190eXBlcy5oPC90dD4uIFRoZSBwcmlvcml0eSBtYXNrIGlzCisvLyBkZWZpbmVkIGFzCisvLworLy8gSU5UX1BSSU9SSVRZX01BU0sgPSAoKDB4RkYgPDwgKDggLSBOVU1fUFJJT1JJVFlfQklUUykpICYgMHhGRikKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIElOVF9QUklPUklUWV9NQVNLICAgICAgIDB4MDAwMDAwRTAKKyNkZWZpbmUgSU5UX1BSSV9MRVZFTDAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBJTlRfUFJJX0xFVkVMMSAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElOVF9QUklfTEVWRUwyICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSU5UX1BSSV9MRVZFTDMgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBJTlRfUFJJX0xFVkVMNCAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIElOVF9QUklfTEVWRUw1ICAgICAgICAgIDB4MDAwMDAwQTAKKyNkZWZpbmUgSU5UX1BSSV9MRVZFTDYgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBJTlRfUFJJX0xFVkVMNyAgICAgICAgICAweDAwMDAwMEUwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0LgorLy8hCisvLyEgQWxsb3dzIHRoZSBwcm9jZXNzb3IgdG8gcmVzcG9uZCB0byBpbnRlcnJ1cHRzLiBUaGlzIGRvZXMgbm90IGFmZmVjdCB0aGUKKy8vISBzZXQgb2YgaW50ZXJydXB0cyBlbmFibGVkIGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcjsgaXQganVzdCBnYXRlcyB0aGUKKy8vISBzaW5nbGUgaW50ZXJydXB0IGZyb20gdGhlIGNvbnRyb2xsZXIgdG8gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJuczoKKy8vISAtIFxjIHRydWUgIDogSW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkIGFuZCBhcmUgbm93IGVuYWJsZWQuCisvLyEgLSBcYyBmYWxzZSA6IEludGVycnVwdHMgd2VyZSBhbHJlYWR5IGVuYWJsZWQgd2hlbiB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorSW50TWFzdGVyRW5hYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBFbmFibGUgcHJvY2Vzc29yIGludGVycnVwdHMuCisgICAgLy8KKyAgICByZXR1cm4oQ1BVY3BzaWUoKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0LgorLy8hCisvLyEgUHJldmVudHMgdGhlIHByb2Nlc3NvciBmcm9tIHJlY2VpdmluZyBpbnRlcnJ1cHRzLiBUaGlzIGRvZXMgbm90IGFmZmVjdCB0aGUKKy8vISBzZXQgb2YgaW50ZXJydXB0cyBlbmFibGVkIGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcjsgaXQganVzdCBnYXRlcyB0aGUKKy8vISBzaW5nbGUgaW50ZXJydXB0IGZyb20gdGhlIGNvbnRyb2xsZXIgdG8gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJuczoKKy8vISAtIFxjIHRydWUgIDogSW50ZXJydXB0cyB3ZXJlIGFscmVhZHkgZGlzYWJsZWQgd2hlbiB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZC4KKy8vISAtIFxjIGZhbHNlIDogSW50ZXJydXB0cyB3ZXJlIGVuYWJsZWQgYW5kIGFyZSBub3cgZGlzYWJsZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0ludE1hc3RlckRpc2FibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIERpc2FibGUgcHJvY2Vzc29yIGludGVycnVwdHMuCisgICAgLy8KKyAgICByZXR1cm4oQ1BVY3BzaWQoKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGFuIGludGVycnVwdCBvY2N1cnMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUKKy8vISBnaXZlbiBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgdG8gdGhlIHByb2Nlc3Nvci4gV2hlbiB0aGUgaW50ZXJydXB0IG9jY3VycywKKy8vISBpZiBpdCBpcyBlbmFibGVkICh2aWEgXHJlZiBJbnRFbmFibGUoKSksIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluCisvLyEgaW50ZXJydXB0IGNvbnRleHQuIFNpbmNlIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIGNhbiBwcmVlbXB0IG90aGVyIGNvZGUsIGNhcmUKKy8vISBtdXN0IGJlIHRha2VuIHRvIHByb3RlY3QgbWVtb3J5IG9yIHBlcmlwaGVyYWxzIHRoYXQgYXJlIGFjY2Vzc2VkIGJ5IHRoZQorLy8hIGhhbmRsZXIgYW5kIG90aGVyIG5vbi1oYW5kbGVyIGNvZGUuCisvLyEKKy8vISBcbm90ZSBUaGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24gKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdmlhIGEgcGVyaXBoZXJhbAorLy8hIGRyaXZlciBpbnRlcnJ1cHQgcmVnaXN0ZXIgZnVuY3Rpb24pIG1vdmVzIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIHRhYmxlIGZyb20KKy8vISBmbGFzaCB0byBTUkFNLiBUaGVyZWZvcmUsIGNhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIGxpbmtpbmcgdGhlIGFwcGxpY2F0aW9uCisvLyEgdG8gZW5zdXJlIHRoYXQgdGhlIFNSQU0gdmVjdG9yIHRhYmxlIGlzIGxvY2F0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBTUkFNOworLy8hIG90aGVyd2lzZSBOVklDIHdpbGwgbm90IGxvb2sgaW4gdGhlIGNvcnJlY3QgcG9ydGlvbiBvZiBtZW1vcnkgZm9yIHRoZQorLy8hIHZlY3RvciB0YWJsZSAoaXQgcmVxdWlyZXMgdGhlIHZlY3RvciB0YWJsZSBiZSBvbiBhIDEga0IgbWVtb3J5IGFsaWdubWVudCkuCisvLyEgTm9ybWFsbHksIHRoZSBTUkFNIHZlY3RvciB0YWJsZSBpcyBzbyBwbGFjZWQgdmlhIHRoZSB1c2Ugb2YgbGlua2VyIHNjcmlwdHMuCisvLyEKKy8vISBccGFyYW0gdWkzMkludGVycnVwdCBzcGVjaWZpZXMgdGhlIGludGVycnVwdCBpbiBxdWVzdGlvbi4KKy8vISBccGFyYW0gcGZuSGFuZGxlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJbnRSZWdpc3Rlcih1aW50MzJfdCB1aTMySW50ZXJydXB0LCB2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBVbnJlZ2lzdGVycyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gaW50ZXJydXB0IG9jY3Vycy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IG5vIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZQorLy8hIGdpdmVuIGludGVycnVwdCBpcyBhc3NlcnRlZCB0byB0aGUgcHJvY2Vzc29yLiBUaGUgaW50ZXJydXB0IHNvdXJjZSB3aWxsIGJlCisvLyEgYXV0b21hdGljYWxseSBkaXNhYmxlZCAodmlhIFxyZWYgSW50RGlzYWJsZSgpKSBpZiBuZWNlc3NhcnkuCisvLyEKKy8vISBccGFyYW0gdWkzMkludGVycnVwdCBzcGVjaWZpZXMgdGhlIGludGVycnVwdCBpbiBxdWVzdGlvbi4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZS4KKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJbnRVbnJlZ2lzdGVyKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHRoZSBwcmlvcml0eSBncm91cGluZyBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNwZWNpZmllcyB0aGUgc3BsaXQgYmV0d2VlbiBwcmVlbXB0YWJsZSBwcmlvcml0eSBsZXZlbHMgYW5kCisvLyEgc3VicHJpb3JpdHkgbGV2ZWxzIGluIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgc3BlY2lmaWNhdGlvbi4gVGhlIHJhbmdlIG9mCisvLyEgdGhlIGdyb3VwaW5nIHZhbHVlcyBhcmUgZGVwZW5kZW50IHVwb24gdGhlIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uOyBvbgorLy8hIHRoZSBDQzI2eHggZmFtaWx5LCB0aHJlZSBiaXRzIGFyZSBhdmFpbGFibGUgZm9yIGhhcmR3YXJlIGludGVycnVwdAorLy8hIHByaW9yaXRpemF0aW9uIGFuZCB0aGVyZWZvcmUgcHJpb3JpdHkgZ3JvdXBpbmcgdmFsdWVzIG9mIHRocmVlIHRocm91Z2gKKy8vISBzZXZlbiBoYXZlIHRoZSBzYW1lIGVmZmVjdC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQml0cyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBiaXRzIG9mIHByZWVtcHRhYmxlIHByaW9yaXR5LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSW50UHJpb3JpdHlHcm91cGluZ1NldCh1aW50MzJfdCB1aTMyQml0cyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIHByaW9yaXR5IGdyb3VwaW5nIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3BsaXQgYmV0d2VlbiBwcmVlbXB0YWJsZSBwcmlvcml0eSBsZXZlbHMgYW5kCisvLyEgc3VicHJpb3JpdHkgbGV2ZWxzIGluIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgc3BlY2lmaWNhdGlvbi4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgb2YgcHJlZW1wdGFibGUgcHJpb3JpdHkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEludFByaW9yaXR5R3JvdXBpbmdHZXQodm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4gV2hlbiBtdWx0aXBsZQorLy8hIGludGVycnVwdHMgYXJlIGFzc2VydGVkIHNpbXVsdGFuZW91c2x5LCB0aGUgb25lcyB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5CisvLyEgYXJlIHByb2Nlc3NlZCBiZWZvcmUgdGhlIGxvd2VyIHByaW9yaXR5IGludGVycnVwdHMuIFNtYWxsZXIgbnVtYmVycworLy8hIGNvcnJlc3BvbmQgdG8gaGlnaGVyIGludGVycnVwdCBwcmlvcml0aWVzOyBwcmlvcml0eSAwIGlzIHRoZSBoaWdoZXN0CisvLyEgaW50ZXJydXB0IHByaW9yaXR5LgorLy8hCisvLyEgVGhlIGhhcmR3YXJlIHByaW9yaXR5IG1lY2hhbmlzbSB3aWxsIG9ubHkgbG9vayBhdCB0aGUgdXBwZXIgTiBiaXRzIG9mIHRoZQorLy8hIHByaW9yaXR5IGxldmVsICh3aGVyZSBOIGlzIDMgZm9yIGNjMjZ4eCksIHNvIGFueSBwcmlvcml0aXphdGlvbiBtdXN0IGJlCisvLyEgcGVyZm9ybWVkIGluIHRob3NlIGJpdHMuIFRoZSByZW1haW5pbmcgYml0cyBjYW4gYmUgdXNlZCB0byBzdWItcHJpb3JpdGl6ZQorLy8hIHRoZSBpbnRlcnJ1cHQgc291cmNlcywgYW5kIG1heSBiZSB1c2VkIGJ5IHRoZSBoYXJkd2FyZSBwcmlvcml0eSBtZWNoYW5pc20KKy8vISBvbiBhIGZ1dHVyZSBwYXJ0LiBUaGlzIGFycmFuZ2VtZW50IGFsbG93cyBwcmlvcml0aWVzIHRvIG1pZ3JhdGUgdG8KKy8vISBkaWZmZXJlbnQgTlZJQyBpbXBsZW1lbnRhdGlvbnMgd2l0aG91dCBjaGFuZ2luZyB0aGUgZ3Jvc3MgcHJpb3JpdGl6YXRpb24KKy8vISBvZiB0aGUgaW50ZXJydXB0cy4KKy8vIQorLy8hIFxwYXJhbSB1aTMySW50ZXJydXB0IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IGluIHF1ZXN0aW9uLgorLy8hIFxwYXJhbSB1aThQcmlvcml0eSBzcGVjaWZpZXMgdGhlIHByaW9yaXR5IG9mIHRoZSBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIElOVF9QUklfTEVWRUwwIDogSGlnaGVzdCBwcmlvcml0eS4KKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDEKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDIKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDMKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDQKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDUKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDYKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDcgOiBMb3dlc3QgcHJpb3JpdHkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJbnRQcmlvcml0eVNldCh1aW50MzJfdCB1aTMySW50ZXJydXB0LCB1aW50OF90IHVpOFByaW9yaXR5KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisvLyEKKy8vISBccGFyYW0gdWkzMkludGVycnVwdCBzcGVjaWZpZXMgdGhlIGludGVycnVwdCBpbiBxdWVzdGlvbi4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgaW50ZXJydXB0IHByaW9yaXR5OgorLy8hIC0gKC0xKSAgICAgICAgICAgICAgICA6IEludmFsaWQgaW50ZXJydXB0IHNwZWNpZmllZCBhcyBwYXJhbWV0ZXIhCisvLyEgLSBccmVmIElOVF9QUklfTEVWRUwwIDogSGlnaGVzdCBwcmlvcml0eS4KKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDEKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDIKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDMKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDQKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDUKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDYKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDcgOiBMb3dlc3QgcHJpb3JpdHkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGludDMyX3QgSW50UHJpb3JpdHlHZXQodWludDMyX3QgdWkzMkludGVycnVwdCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgYW4gaW50ZXJydXB0LgorLy8hCisvLyEgVGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgaXMgZW5hYmxlZCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIE90aGVyCisvLyEgZW5hYmxlcyBmb3IgdGhlIGludGVycnVwdCAoc3VjaCBhcyBhdCB0aGUgcGVyaXBoZXJhbCBsZXZlbCkgYXJlIHVuYWZmZWN0ZWQKKy8vISBieSB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJbnRlcnJ1cHQgc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEludEVuYWJsZSh1aW50MzJfdCB1aTMySW50ZXJydXB0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgYW4gaW50ZXJydXB0LgorLy8hCisvLyEgVGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyLiBPdGhlcgorLy8hIGVuYWJsZXMgZm9yIHRoZSBpbnRlcnJ1cHQgKHN1Y2ggYXMgYXQgdGhlIHBlcmlwaGVyYWwgbGV2ZWwpIGFyZSB1bmFmZmVjdGVkCisvLyEgYnkgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMySW50ZXJydXB0IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSW50RGlzYWJsZSh1aW50MzJfdCB1aTMySW50ZXJydXB0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUGVuZHMgYW4gaW50ZXJydXB0LgorLy8hCisvLyEgVGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgaXMgcGVuZGVkIGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gVGhpcyB3aWxsCisvLyEgY2F1c2UgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHRvIGV4ZWN1dGUgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlciBhdCB0aGUgbmV4dCBhdmFpbGFibGUgdGltZSwgYmFzZWQgb24gdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXRlCisvLyEgcHJpb3JpdGllcy4gRm9yIGV4YW1wbGUsIGlmIGNhbGxlZCBieSBhIGhpZ2hlciBwcmlvcml0eSBpbnRlcnJ1cHQgaGFuZGxlciwKKy8vISB0aGUgc3BlY2lmaWVkIGludGVycnVwdCBoYW5kbGVyIHdpbGwgbm90IGJlIGNhbGxlZCB1bnRpbCBhZnRlciB0aGUgY3VycmVudAorLy8hIGludGVycnVwdCBoYW5kbGVyIGhhcyBjb21wbGV0ZWQgZXhlY3V0aW9uLiBUaGUgaW50ZXJydXB0IG11c3QgaGF2ZSBiZWVuCisvLyEgZW5hYmxlZCBmb3IgaXQgdG8gYmUgY2FsbGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJbnRlcnJ1cHQgc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgdG8gYmUgcGVuZGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSW50UGVuZFNldCh1aW50MzJfdCB1aTMySW50ZXJydXB0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUXVlcnkgd2hldGhlciBhbiBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IGlzIHBlbmRpbmcgaW4gdGhlCisvLyEgaW50ZXJydXB0IGNvbnRyb2xsZXIuIFRoZSBpbnRlcnJ1cHQgbXVzdCBoYXZlIGJlZW4gZW5hYmxlZCBmb3IgaXQgdG8gYmUKKy8vISBjYWxsZWQsIHNvIGFuIGludGVycnVwdCBjYW4gdmVyeSB3ZWxsIGJlIHBlbmRpbmcgd2FpdGluZyB0byBiZSBlbmFibGVkIG9yCisvLyEgd2FpdGluZyBmb3IgYW4gaW50ZXJydXB0IG9mIGhpZ2hlciBwcmlvcml0eSB0byBiZSBkb25lIGV4ZWN1dGluZy4KKy8vIQorLy8hIFxub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgbG93ZXIgMTYgSVJRIHZlY3RvcnMgd2hpY2ggYXJlCisvLyEgaGFyZHdhcmUgZGVmaW5lZCBmb3IgdGhlIFN5c3RlbSBDUFUuCisvLyEKKy8vISBccGFyYW0gdWkzMkludGVycnVwdCBzcGVjaWZpZXMgdGhlIGludGVycnVwdCB0byBiZSBxdWVyaWVkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zOgorLy8hIC0gXGMgdHJ1ZSAgOiBTcGVjaWZpZWQgaW50ZXJydXB0IGlzIHBlbmRpbmcuCisvLyEgLSBcYyBmYWxzZSA6IFNwZWNpZmllZCBpbnRlcnJ1cHQgaXMgbm90IHBlbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGJvb2wgSW50UGVuZEdldCh1aW50MzJfdCB1aTMySW50ZXJydXB0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVW5wZW5kcyBhbiBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIGludGVycnVwdCBpcyB1bnBlbmRlZCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIFRoaXMgd2lsbAorLy8hIGNhdXNlIGFueSBwcmV2aW91c2x5IGdlbmVyYXRlZCBpbnRlcnJ1cHRzIHRoYXQgaGF2ZSBub3QgYmVlbiBoYW5kbGVkIHlldAorLy8hIChkdWUgdG8gaGlnaGVyIHByaW9yaXR5IGludGVycnVwdHMgb3IgdGhlIGludGVycnVwdCBubyBoYXZpbmcgYmVlbiBlbmFibGVkCisvLyEgeWV0KSB0byBiZSBkaXNjYXJkZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkludGVycnVwdCBzcGVjaWZpZXMgdGhlIGludGVycnVwdCB0byBiZSB1bnBlbmRlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEludFBlbmRDbGVhcih1aW50MzJfdCB1aTMySW50ZXJydXB0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgcHJpb3JpdHkgbWFza2luZyBsZXZlbC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgaW50ZXJydXB0IHByaW9yaXR5IG1hc2tpbmcgbGV2ZWwgc28gdGhhdCBhbGwKKy8vISBpbnRlcnJ1cHRzIGF0IHRoZSBzcGVjaWZpZWQgb3IgbGVzc2VyIHByaW9yaXR5IGxldmVsIGFyZSBtYXNrZWQuIFRoaXMKKy8vISBjYW4gYmUgdXNlZCB0byBnbG9iYWxseSBkaXNhYmxlIGEgc2V0IG9mIGludGVycnVwdHMgd2l0aCBwcmlvcml0eSBiZWxvdworLy8hIGEgcHJlZGV0ZXJtaW5lZCB0aHJlc2hvbGQuIEEgdmFsdWUgb2YgMCBkaXNhYmxlcyBwcmlvcml0eQorLy8hIG1hc2tpbmcuCisvLyEKKy8vISBTbWFsbGVyIG51bWJlcnMgY29ycmVzcG9uZCB0byBoaWdoZXIgaW50ZXJydXB0IHByaW9yaXRpZXMuIFNvIGZvciBleGFtcGxlCisvLyEgYSBwcmlvcml0eSBsZXZlbCBtYXNrIG9mIDQgd2lsbCBhbGxvdyBpbnRlcnJ1cHRzIG9mIHByaW9yaXR5IGxldmVsIDAtMywKKy8vISBhbmQgaW50ZXJydXB0cyB3aXRoIGEgbnVtZXJpY2FsIHByaW9yaXR5IG9mIDQgYW5kIGdyZWF0ZXIgd2lsbCBiZSBibG9ja2VkLgorLy8hCisvLyEgVGhlIGhhcmR3YXJlIHByaW9yaXR5IG1lY2hhbmlzbSB3aWxsIG9ubHkgbG9vayBhdCB0aGUgdXBwZXIgTiBiaXRzIG9mIHRoZQorLy8hIHByaW9yaXR5IGxldmVsICh3aGVyZSBOIGlzIDMgZm9yIHRoZSBDQzI2eHggZmFtaWx5KSwgc28gYW55CisvLyEgcHJpb3JpdGl6YXRpb24gbXVzdCBiZSBwZXJmb3JtZWQgaW4gdGhvc2UgYml0cy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyUHJpb3JpdHlNYXNrIGlzIHRoZSBwcmlvcml0eSBsZXZlbCB0aGF0IHdpbGwgYmUgbWFza2VkLgorLy8hCisvLyEgXHJldHVybiBOb25lLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJbnRQcmlvcml0eU1hc2tTZXQodWludDMyX3QgdWkzMlByaW9yaXR5TWFzaykKK3sKKyAgICBDUFViYXNlcHJpU2V0KHVpMzJQcmlvcml0eU1hc2spOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBwcmlvcml0eSBtYXNraW5nIGxldmVsLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBjdXJyZW50IHNldHRpbmcgb2YgdGhlIGludGVycnVwdCBwcmlvcml0eSBtYXNraW5nCisvLyEgbGV2ZWwuIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgcHJpb3JpdHkgbGV2ZWwgc3VjaCB0aGF0IGFsbCBpbnRlcnJ1cHRzCisvLyEgb2YgdGhhdCBhbmQgbGVzc2VyIHByaW9yaXR5IGFyZSBtYXNrZWQuIEEgdmFsdWUgb2YgMCBtZWFucyB0aGF0IHByaW9yaXR5CisvLyEgbWFza2luZyBpcyBkaXNhYmxlZC4KKy8vIQorLy8hIFNtYWxsZXIgbnVtYmVycyBjb3JyZXNwb25kIHRvIGhpZ2hlciBpbnRlcnJ1cHQgcHJpb3JpdGllcy4gU28gZm9yIGV4YW1wbGUKKy8vISBhIHByaW9yaXR5IGxldmVsIG1hc2sgb2YgNCB3aWxsIGFsbG93IGludGVycnVwdHMgb2YgcHJpb3JpdHkgbGV2ZWwgMC0zLAorLy8hIGFuZCBpbnRlcnJ1cHRzIHdpdGggYSBudW1lcmljYWwgcHJpb3JpdHkgb2YgNCBhbmQgZ3JlYXRlciB3aWxsIGJlIGJsb2NrZWQuCisvLyEKKy8vISBUaGUgaGFyZHdhcmUgcHJpb3JpdHkgbWVjaGFuaXNtIHdpbGwgb25seSBsb29rIGF0IHRoZSB1cHBlciBOIGJpdHMgb2YgdGhlCisvLyEgcHJpb3JpdHkgbGV2ZWwgKHdoZXJlIE4gaXMgMyBmb3IgdGhlIENDMjZ4eCBmYW1pbHkpLCBzbyBhbnkKKy8vISBwcmlvcml0aXphdGlvbiBtdXN0IGJlIHBlcmZvcm1lZCBpbiB0aG9zZSBiaXRzLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgaW50ZXJydXB0IHByaW9yaXR5IGxldmVsIG1hc2suCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitJbnRQcmlvcml0eU1hc2tHZXQodm9pZCkKK3sKKyAgICByZXR1cm4oQ1BVYmFzZXByaUdldCgpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fSW50UmVnaXN0ZXIKKyAgICAgICAgI3VuZGVmICBJbnRSZWdpc3RlcgorICAgICAgICAjZGVmaW5lIEludFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgUk9NX0ludFJlZ2lzdGVyCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JbnRVbnJlZ2lzdGVyCisgICAgICAgICN1bmRlZiAgSW50VW5yZWdpc3RlcgorICAgICAgICAjZGVmaW5lIEludFVucmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgUk9NX0ludFVucmVnaXN0ZXIKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ludFByaW9yaXR5R3JvdXBpbmdTZXQKKyAgICAgICAgI3VuZGVmICBJbnRQcmlvcml0eUdyb3VwaW5nU2V0CisgICAgICAgICNkZWZpbmUgSW50UHJpb3JpdHlHcm91cGluZ1NldCAgICAgICAgICBST01fSW50UHJpb3JpdHlHcm91cGluZ1NldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSW50UHJpb3JpdHlHcm91cGluZ0dldAorICAgICAgICAjdW5kZWYgIEludFByaW9yaXR5R3JvdXBpbmdHZXQKKyAgICAgICAgI2RlZmluZSBJbnRQcmlvcml0eUdyb3VwaW5nR2V0ICAgICAgICAgIFJPTV9JbnRQcmlvcml0eUdyb3VwaW5nR2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JbnRQcmlvcml0eVNldAorICAgICAgICAjdW5kZWYgIEludFByaW9yaXR5U2V0CisgICAgICAgICNkZWZpbmUgSW50UHJpb3JpdHlTZXQgICAgICAgICAgICAgICAgICBST01fSW50UHJpb3JpdHlTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ludFByaW9yaXR5R2V0CisgICAgICAgICN1bmRlZiAgSW50UHJpb3JpdHlHZXQKKyAgICAgICAgI2RlZmluZSBJbnRQcmlvcml0eUdldCAgICAgICAgICAgICAgICAgIFJPTV9JbnRQcmlvcml0eUdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSW50RW5hYmxlCisgICAgICAgICN1bmRlZiAgSW50RW5hYmxlCisgICAgICAgICNkZWZpbmUgSW50RW5hYmxlICAgICAgICAgICAgICAgICAgICAgICBST01fSW50RW5hYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JbnREaXNhYmxlCisgICAgICAgICN1bmRlZiAgSW50RGlzYWJsZQorICAgICAgICAjZGVmaW5lIEludERpc2FibGUgICAgICAgICAgICAgICAgICAgICAgUk9NX0ludERpc2FibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ludFBlbmRTZXQKKyAgICAgICAgI3VuZGVmICBJbnRQZW5kU2V0CisgICAgICAgICNkZWZpbmUgSW50UGVuZFNldCAgICAgICAgICAgICAgICAgICAgICBST01fSW50UGVuZFNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSW50UGVuZEdldAorICAgICAgICAjdW5kZWYgIEludFBlbmRHZXQKKyAgICAgICAgI2RlZmluZSBJbnRQZW5kR2V0ICAgICAgICAgICAgICAgICAgICAgIFJPTV9JbnRQZW5kR2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JbnRQZW5kQ2xlYXIKKyAgICAgICAgI3VuZGVmICBJbnRQZW5kQ2xlYXIKKyAgICAgICAgI2RlZmluZSBJbnRQZW5kQ2xlYXIgICAgICAgICAgICAgICAgICAgIFJPTV9JbnRQZW5kQ2xlYXIKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fSU5URVJSVVBUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pbnRlcnJ1cHRfZG9jLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pbnRlcnJ1cHRfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2OWM0YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2ludGVycnVwdF9kb2MuaApAQCAtMCwwICsxLDE0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGludGVycnVwdF9kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgaW50ZXJydXB0X2FwaQorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX2ludGVycnVwdCBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBBUEkgcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGggdGhlCisvLyEgbmVzdGVkIHZlY3RvcmVkIGludGVycnVwdCBjb250cm9sbGVyIChOVklDKS4gRnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBlbmFibGUKKy8vISBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzLCByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlcnMsIGFuZCBzZXQgdGhlIHByaW9yaXR5IG9mCisvLyEgaW50ZXJydXB0cy4KKy8vIQorLy8hIFRoZSBldmVudCBzb3VyY2VzIHRoYXQgdHJpZ2dlciB0aGUgaW50ZXJydXB0IGxpbmVzIGluIHRoZSBOVklDIGFyZSBjb250cm9sbGVkIGJ5CisvLyEgdGhlIE1DVSBldmVudCBmYWJyaWMuIEFsbCBldmVudCBzb3VyY2VzIGFyZSBzdGF0aWNhbGx5IGNvbm5lY3RlZCB0byB0aGUgTlZJQyBpbnRlcnJ1cHQgbGluZXMKKy8vISBleGNlcHQgb25lIHdoaWNoIGlzIHByb2dyYW1tYWJsZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1DVSBldmVudCBmYWJyaWMsIHNlZSB0aGUKKy8vISBbTUNVIGV2ZW50IGZhYnJpYyBBUEldKFxyZWYgZXZlbnRfYXBpKS4KKy8vIQorLy8hIFRoZSBOVklDIHByb3ZpZGVzIGdsb2JhbCBpbnRlcnJ1cHQgbWFza2luZywgcHJpb3JpdGl6YXRpb24sIGFuZCBoYW5kbGVyCisvLyEgZGlzcGF0Y2hpbmcuIERldmljZXMgd2l0aGluIHRoZSBcdGlfZGV2aWNlIGZhbWlseSBzdXBwb3J0IDM0CisvLyEgaW50ZXJydXB0IGxpbmVzIGFuZCA4IHByaW9yaXR5IGxldmVscyBmcm9tIDAgdG8gNyB3aXRoIDAgYmVpbmcgdGhlIGhpZ2hlc3QgcHJpb3JpdHkuCisvLyEgSW5kaXZpZHVhbCBpbnRlcnJ1cHQgc291cmNlcyBjYW4KKy8vISBiZSBtYXNrZWQsIGFuZCB0aGUgcHJvY2Vzc29yIGludGVycnVwdCBjYW4gYmUgZ2xvYmFsbHkgbWFza2VkIGFzIHdlbGwgKHdpdGhvdXQKKy8vISBhZmZlY3RpbmcgdGhlIGluZGl2aWR1YWwgc291cmNlIG1hc2tzKS4KKy8vIQorLy8hIFRoZSBOVklDIGlzIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBTeXN0ZW0gQ1BVLiBXaGVuIHRoZQorLy8hIHByb2Nlc3NvciByZXNwb25kcyB0byBhbiBpbnRlcnJ1cHQsIHRoZSBOVklDIHN1cHBsaWVzIHRoZSBhZGRyZXNzIG9mIHRoZQorLy8hIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgaW50ZXJydXB0IGRpcmVjdGx5IHRvIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBFYWNoIGludGVycnVwdCBzb3VyY2UgY2FuIGJlIGluZGl2aWR1YWxseSBlbmFibGVkIGFuZCBkaXNhYmxlZCB0aHJvdWdoOgorLy8hIC0gXHJlZiBJbnRFbmFibGUoKQorLy8hIC0gXHJlZiBJbnREaXNhYmxlKCkKKy8vIQorLy8hIFRoZSBnbG9iYWwgcHJvY2Vzc29yIGludGVycnVwdCBjYW4gYmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKy8vISAtIFxyZWYgSW50TWFzdGVyRW5hYmxlKCkKKy8vISAtIFxyZWYgSW50TWFzdGVyRGlzYWJsZSgpCisvLyEKKy8vISBUaGlzIGRvZXMgbm90IGFmZmVjdCB0aGUgaW5kaXZpZHVhbAorLy8hIGludGVycnVwdCBlbmFibGUgc3RhdGVzLiBNYXNraW5nIG9mIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0IGNhbiBiZSB1c2VkIGFzCisvLyEgYSBzaW1wbGUgY3JpdGljYWwgc2VjdGlvbiAob25seSBhbiBOTUkgY2FuIGludGVycnVwdCB0aGUgcHJvY2Vzc29yIHdoaWxlIHRoZQorLy8hIHByb2Nlc3NvciBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQpLCBhbHRob3VnaCBtYXNraW5nIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0IGNhbgorLy8hIGhhdmUgYWR2ZXJzZSBlZmZlY3RzIG9uIHRoZSBpbnRlcnJ1cHQgcmVzcG9uc2UgdGltZS4KKy8vIQorLy8hIEl0IGlzIHBvc3NpYmxlIHRvIGFjY2VzcyB0aGUgTlZJQyB0byBzZWUgaWYgYW55IGludGVycnVwdHMgYXJlIHBlbmRpbmcgYW5kIG1hbnVhbGx5CisvLyEgY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzIHdoaWNoIGhhdmUgbm90IHlldCBiZWVuIHNlcnZpY2VkIG9yIHNldCBhIHNwZWNpZmljIGludGVycnVwdCBhcworLy8hIHBlbmRpbmcgdG8gYmUgaGFuZGxlZCBiYXNlZCBvbiBpdHMgcHJpb3JpdHkuIFBlbmRpbmcgaW50ZXJydXB0cyBhcmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5CisvLyEgd2hlbiB0aGUgaW50ZXJydXB0IGlzIGFjY2VwdGVkIGFuZCBiZWNvbWVzIGFjdGl2ZSAoYmVpbmcgZXhlY3V0ZWQpLiBUaGUgZnVuY3Rpb25zIHRvIHJlYWQsCisvLyEgY2xlYXIsIGFuZCBzZXQgcGVuZGluZyBpbnRlcnJ1cHRzIGFyZToKKy8vISAtIFxyZWYgSW50UGVuZEdldCgpCisvLyEgLSBccmVmIEludFBlbmRDbGVhcigpCisvLyEgLSBccmVmIEludFBlbmRTZXQoKQorLy8hCisvLyEgVGhlIGludGVycnVwdCBwcmlvcml0aXphdGlvbiBpbiB0aGUgTlZJQyBhbGxvd3MgaGFuZGxpbmcgb2YgaGlnaGVyIHByaW9yaXR5IGludGVycnVwdHMKKy8vISBiZWZvcmUgbG93ZXIgcHJpb3JpdHkgaW50ZXJydXB0cywgYXMgd2VsbCBhcyBhbGxvd2luZyBwcmVlbXB0aW9uIG9mCisvLyEgbG93ZXIgcHJpb3JpdHkgaW50ZXJydXB0IGhhbmRsZXJzIGJ5IGhpZ2hlciBwcmlvcml0eSBpbnRlcnJ1cHRzLgorLy8hIFRoZSBwcmlvcml0eSBvZiBlYWNoIGludGVycnVwdCBzb3VyY2UgY2FuIGJlIHNldCBhbmQgZXhhbWluZWQgdXNpbmc6CisvLyEgLSBccmVmIEludFByaW9yaXR5U2V0KCkKKy8vISAtIFxyZWYgSW50UHJpb3JpdHlHZXQoKQorLy8hCisvLyEgSW50ZXJydXB0cyBjYW4gYmUgbWFza2VkIGJhc2VkIG9uIHRoZWlyIHByaW9yaXR5IHN1Y2ggdGhhdCBpbnRlcnJ1cHRzIHdpdGggdGhlIHNhbWUgb3IgbG93ZXIKKy8vISBwcmlvcml0eSB0aGFuIHRoZSBtYXNrIGFyZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4gVGhpcyBjYW4gYmUgY29uZmlndXJlZCB3aXRoOgorLy8hIC0gXHJlZiBJbnRQcmlvcml0eU1hc2tTZXQoKQorLy8hIC0gXHJlZiBJbnRQcmlvcml0eU1hc2tHZXQoKQorLy8hCisvLyEgU3VicHJpb3JpdGl6YXRpb24gaXMgYWxzbyBwb3NzaWJsZTsgaW5zdGVhZCBvZiBoYXZpbmcgMyBiaXRzIG9mIHByZWVtcHRhYmxlCisvLyEgcHJpb3JpdGl6YXRpb24gKDggbGV2ZWxzKSwgdGhlIE5WSUMgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIDMgLSBNIGJpdHMgb2YKKy8vISBwcmVlbXB0YWJsZSBwcmlvcml0aXphdGlvbiBhbmQgTSBiaXRzIG9mIHN1YnByaW9yaXR5LiBJbiB0aGlzIHNjaGVtZSwgdHdvCisvLyEgaW50ZXJydXB0cyB3aXRoIHRoZSBzYW1lIHByZWVtcHRhYmxlIHByaW9yaXRpemF0aW9uIGJ1dCBkaWZmZXJlbnQgc3VicHJpb3JpdGllcworLy8hIGRvIG5vdCBjYXVzZSBhIHByZWVtcHRpb247IGluc3RlYWQgdGFpbCBjaGFpbmluZyBpcyB1c2VkIHRvIHByb2Nlc3MKKy8vISB0aGUgdHdvIGludGVycnVwdHMgYmFjay10by1iYWNrLgorLy8hIElmIHR3byBpbnRlcnJ1cHRzIHdpdGggdGhlIHNhbWUgcHJpb3JpdHkgKGFuZCBzdWJwcmlvcml0eSBpZiBzbyBjb25maWd1cmVkKSBhcmUKKy8vISBhc3NlcnRlZCBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgb25lIHdpdGggdGhlIGxvd2VyIGludGVycnVwdCBudW1iZXIgaXMKKy8vISBwcm9jZXNzZWQgZmlyc3QuIFN1YnByaW9yaXRpemF0aW9uIGlzIGhhbmRsZWQgYnk6CisvLyEgLSBccmVmIEludFByaW9yaXR5R3JvdXBpbmdTZXQoKQorLy8hIC0gXHJlZiBJbnRQcmlvcml0eUdyb3VwaW5nR2V0KCkKKy8vIQorLy8hIEludGVycnVwdCBoYW5kbGVycyBjYW4gYmUgY29uZmlndXJlZCBpbiBvbmUgb2YgdHdvIHdheXM7IHN0YXRpY2FsbHkgYXQgY29tcGlsZQorLy8hIHRpbWUgb3IgZHluYW1pY2FsbHkgYXQgcnVuIHRpbWUuIFN0YXRpYyBjb25maWd1cmF0aW9uIG9mIGludGVycnVwdCBoYW5kbGVycyBpcworLy8hIGFjY29tcGxpc2hlZCBieSBlZGl0aW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0YWJsZSBpbiB0aGUgc3RhcnR1cCBjb2RlIG9mIHRoZSBhcHBsaWNhdGlvbi4KKy8vISBXaGVuIHN0YXRpY2FsbHkgY29uZmlndXJlZCwgdGhlIGludGVycnVwdHMgbXVzdCBiZSBleHBsaWNpdGx5CisvLyEgZW5hYmxlZCBpbiB0aGUgTlZJQyB0aHJvdWdoIFxyZWYgSW50RW5hYmxlKCkgYmVmb3JlIHRoZSBwcm9jZXNzb3IgY2FuIHJlc3BvbmQgdG8gdGhlCisvLyEgaW50ZXJydXB0IChpbiBhZGRpdGlvbiB0byBhbnkgaW50ZXJydXB0IGVuYWJsaW5nIHJlcXVpcmVkIHdpdGhpbiB0aGUgcGVyaXBoZXJhbCkuCisvLyEgU3RhdGljYWxseSBjb25maWd1cmluZyB0aGUgaW50ZXJydXB0IHRhYmxlIHByb3ZpZGVzIHRoZSBmYXN0ZXN0CisvLyEgaW50ZXJydXB0IHJlc3BvbnNlIHRpbWUgYmVjYXVzZSB0aGUgc3RhY2tpbmcgb3BlcmF0aW9uIChhIHdyaXRlIHRvIFNSQU0pIGNhbiBiZQorLy8hIHBlcmZvcm1lZCBpbiBwYXJhbGxlbCB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0YWJsZSBmZXRjaCAoYSByZWFkIGZyb20KKy8vISBGbGFzaCksIGFzIHdlbGwgYXMgdGhlIHByZWZldGNoIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAoYXNzdW1pbmcgaXQgaXMKKy8vISBhbHNvIGluIEZsYXNoKS4KKy8vIQorLy8hIEFsdGVybmF0aXZlbHksIGludGVycnVwdHMgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgcnVudGltZSB1c2luZyAob3IgdGhlIGNvcnJlc3BvbmRpbmcgaW4gZWFjaCBpbmRpdmlkdWFsIG1vZHVsZSBBUEkpOgorLy8hIC0gXHJlZiBJbnRSZWdpc3RlcigpCisvLyEgLSBccmVmIEludFVucmVnaXN0ZXIoKQorLy8hCisvLyEgUmVnaXN0ZXJpbmcgYW4gaW50ZXJydXB0IGhhbmRsZXIgaXMgYSBzaW1wbGUgbWF0dGVyIG9mIGluc2VydGluZyB0aGUgaGFuZGxlciBhZGRyZXNzIGludG8gdGhlCisvLyEgdGFibGUuIEJ5IGRlZmF1bHQsIHRoZSB0YWJsZSBpcyBmaWxsZWQgd2l0aCBwb2ludGVycyB0byBhbiBpbnRlcm5hbCBoYW5kbGVyCisvLyEgdGhhdCBsb29wcyBmb3JldmVyOyBpdCBpcyBhbiBlcnJvciBmb3IgYW4gaW50ZXJydXB0IHRvIG9jY3VyIHdoZW4gdGhlcmUgaXMgbm8KKy8vISBpbnRlcnJ1cHQgaGFuZGxlciByZWdpc3RlcmVkIHRvIHByb2Nlc3MgaXQuIFRoZXJlZm9yZSwgaW50ZXJydXB0IHNvdXJjZXMKKy8vISBzaG91bGQgbm90IGJlIGVuYWJsZWQgYmVmb3JlIGEgaGFuZGxlciBoYXMgYmVlbiByZWdpc3RlcmVkLCBhbmQgaW50ZXJydXB0CisvLyEgc291cmNlcyBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIGEgaGFuZGxlciBpcyB1bnJlZ2lzdGVyZWQuCisvLyEgV2hlbiB1c2luZyBccmVmIEludFJlZ2lzdGVyKCksIHRoZSBpbnRlcnJ1cHQKKy8vISBtdXN0IGFsc28gYmUgZW5hYmxlZCBhcyBiZWZvcmU7IHdoZW4gdXNpbmcgdGhlIGZ1bmN0aW9uIGluIGVhY2ggaW5kaXZpZHVhbAorLy8hIGZ1bmN0aW9uIEFQSSwgXHJlZiBJbnRFbmFibGUoKSBpcyBjYWxsZWQgYnkgdGhlIGRyaXZlciBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBjYWxsZWQgYnkKKy8vISB0aGUgYXBwbGljYXRpb24uCisvLyEgUnVuLXRpbWUgY29uZmlndXJhdGlvbiBvZiBpbnRlcnJ1cHRzIGFkZHMgYSBzbWFsbCBsYXRlbmN5IHRvIHRoZSBpbnRlcnJ1cHQKKy8vISByZXNwb25zZSB0aW1lIGJlY2F1c2UgdGhlIHN0YWNraW5nIG9wZXJhdGlvbiAoYSB3cml0ZSB0byBTUkFNKSBhbmQgdGhlCisvLyEgaW50ZXJydXB0IGhhbmRsZXIgdGFibGUgZmV0Y2ggKGEgcmVhZCBmcm9tIFNSQU0pIG11c3QgYmUgcGVyZm9ybWVkCisvLyEgc2VxdWVudGlhbGx5LgorLy8hCisvLyEgUnVuLXRpbWUgY29uZmlndXJhdGlvbiBvZiBpbnRlcnJ1cHQgaGFuZGxlcnMgcmVxdWlyZXMgdGhhdCB0aGUgaW50ZXJydXB0CisvLyEgaGFuZGxlciB0YWJsZSBpcyBwbGFjZWQgb24gYSAxLWtCIGJvdW5kYXJ5IGluIFNSQU0gKHR5cGljYWxseSwgdGhpcyBpcworLy8hIGF0IHRoZSBiZWdpbm5pbmcgb2YgU1JBTSkuIEZhaWx1cmUgdG8gZG8gc28gcmVzdWx0cyBpbiBhbiBpbmNvcnJlY3QgdmVjdG9yCisvLyEgYWRkcmVzcyBiZWluZyBmZXRjaGVkIGluIHJlc3BvbnNlIHRvIGFuIGludGVycnVwdC4gVGhlIHZlY3RvciB0YWJsZSBpcyBpbiBhCisvLyEgc2VjdGlvbiBjYWxsZWQgXHRpX2NvZGV7dnRhYmxlfSBhbmQgc2hvdWxkIGJlIHBsYWNlZCBhcHByb3ByaWF0ZWx5IHdpdGggYSBsaW5rZXIKKy8vISBzY3JpcHQuCisvLyEKKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaW9jLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGY4OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaW9jLmMKQEAgLTAsMCArMSw3NTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBpb2MuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMTEtMTkgMTI6MTg6MTUgKzAxMDAgKFRodSwgMTkgTm92IDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDUxNDcKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBJT0MuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2lvYy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgSU9DUG9ydENvbmZpZ3VyZVNldAorICAgICNkZWZpbmUgSU9DUG9ydENvbmZpZ3VyZVNldCAgICAgICAgICAgICBOT1JPTV9JT0NQb3J0Q29uZmlndXJlU2V0CisgICAgI3VuZGVmICBJT0NQb3J0Q29uZmlndXJlR2V0CisgICAgI2RlZmluZSBJT0NQb3J0Q29uZmlndXJlR2V0ICAgICAgICAgICAgIE5PUk9NX0lPQ1BvcnRDb25maWd1cmVHZXQKKyAgICAjdW5kZWYgIElPQ0lPU2h1dGRvd25TZXQKKyAgICAjZGVmaW5lIElPQ0lPU2h1dGRvd25TZXQgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9TaHV0ZG93blNldAorICAgICN1bmRlZiAgSU9DSU9Nb2RlU2V0CisgICAgI2RlZmluZSBJT0NJT01vZGVTZXQgICAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ0lPTW9kZVNldAorICAgICN1bmRlZiAgSU9DSU9JbnRTZXQKKyAgICAjZGVmaW5lIElPQ0lPSW50U2V0ICAgICAgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9JbnRTZXQKKyAgICAjdW5kZWYgIElPQ0lPUG9ydFB1bGxTZXQKKyAgICAjZGVmaW5lIElPQ0lPUG9ydFB1bGxTZXQgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9Qb3J0UHVsbFNldAorICAgICN1bmRlZiAgSU9DSU9IeXN0U2V0CisgICAgI2RlZmluZSBJT0NJT0h5c3RTZXQgICAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ0lPSHlzdFNldAorICAgICN1bmRlZiAgSU9DSU9JbnB1dFNldAorICAgICNkZWZpbmUgSU9DSU9JbnB1dFNldCAgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT0lucHV0U2V0CisgICAgI3VuZGVmICBJT0NJT1NsZXdDdHJsU2V0CisgICAgI2RlZmluZSBJT0NJT1NsZXdDdHJsU2V0ICAgICAgICAgICAgICAgIE5PUk9NX0lPQ0lPU2xld0N0cmxTZXQKKyAgICAjdW5kZWYgIElPQ0lPRHJ2U3RyZW5ndGhTZXQKKyAgICAjZGVmaW5lIElPQ0lPRHJ2U3RyZW5ndGhTZXQgICAgICAgICAgICAgTk9ST01fSU9DSU9EcnZTdHJlbmd0aFNldAorICAgICN1bmRlZiAgSU9DSU9Qb3J0SWRTZXQKKyAgICAjZGVmaW5lIElPQ0lPUG9ydElkU2V0ICAgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9Qb3J0SWRTZXQKKyAgICAjdW5kZWYgIElPQ0ludEVuYWJsZQorICAgICNkZWZpbmUgSU9DSW50RW5hYmxlICAgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NJbnRFbmFibGUKKyAgICAjdW5kZWYgIElPQ0ludERpc2FibGUKKyAgICAjZGVmaW5lIElPQ0ludERpc2FibGUgICAgICAgICAgICAgICAgICAgTk9ST01fSU9DSW50RGlzYWJsZQorICAgICN1bmRlZiAgSU9DUGluVHlwZUdwaW9JbnB1dAorICAgICNkZWZpbmUgSU9DUGluVHlwZUdwaW9JbnB1dCAgICAgICAgICAgICBOT1JPTV9JT0NQaW5UeXBlR3Bpb0lucHV0CisgICAgI3VuZGVmICBJT0NQaW5UeXBlR3Bpb091dHB1dAorICAgICNkZWZpbmUgSU9DUGluVHlwZUdwaW9PdXRwdXQgICAgICAgICAgICBOT1JPTV9JT0NQaW5UeXBlR3Bpb091dHB1dAorICAgICN1bmRlZiAgSU9DUGluVHlwZVVhcnQKKyAgICAjZGVmaW5lIElPQ1BpblR5cGVVYXJ0ICAgICAgICAgICAgICAgICAgTk9ST01fSU9DUGluVHlwZVVhcnQKKyAgICAjdW5kZWYgIElPQ1BpblR5cGVTc2lNYXN0ZXIKKyAgICAjZGVmaW5lIElPQ1BpblR5cGVTc2lNYXN0ZXIgICAgICAgICAgICAgTk9ST01fSU9DUGluVHlwZVNzaU1hc3RlcgorICAgICN1bmRlZiAgSU9DUGluVHlwZVNzaVNsYXZlCisgICAgI2RlZmluZSBJT0NQaW5UeXBlU3NpU2xhdmUgICAgICAgICAgICAgIE5PUk9NX0lPQ1BpblR5cGVTc2lTbGF2ZQorICAgICN1bmRlZiAgSU9DUGluVHlwZUkyYworICAgICNkZWZpbmUgSU9DUGluVHlwZUkyYyAgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NQaW5UeXBlSTJjCisgICAgI3VuZGVmICBJT0NQaW5UeXBlQXV4CisgICAgI2RlZmluZSBJT0NQaW5UeXBlQXV4ICAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ1BpblR5cGVBdXgKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU2V0IHRoZSBjb25maWd1cmF0aW9uIG9mIGFuIElPIHBvcnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NQb3J0Q29uZmlndXJlU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMyUG9ydElkLAorICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMySU9Db25maWcpCit7CisgICAgdWludDMyX3QgdWkzMlJlZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKyAgICBBU1NFUlQodWkzMlBvcnRJZCA8PSBJT0NfUE9SVF9SRkNfR1BJMSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKyAgICAvLworICAgIHVpMzJSZWcgPSBJT0NfQkFTRSArICggdWkzMklPSWQgPDwgMiApOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIHBvcnQuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyUmVnKSA9IHVpMzJJT0NvbmZpZyB8IHVpMzJQb3J0SWQ7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBHZXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYW4gSU8gcG9ydAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitJT0NQb3J0Q29uZmlndXJlR2V0KHVpbnQzMl90IHVpMzJJT0lkKQoreworICAgIHVpbnQzMl90IHVpMzJSZWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMklPSWQgPD0gSU9JRF8zMSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKyAgICAvLworICAgIHVpMzJSZWcgPSBJT0NfQkFTRSArICggdWkzMklPSWQgPDwgMiApOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIElPIGNvbmZpZ3VyYXRpb24uCisgICAgLy8KKyAgICByZXR1cm4gSFdSRUcodWkzMlJlZyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTZXQgd2FrZS11cCBvbiBhbiBJTyBwb3J0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DSU9TaHV0ZG93blNldCh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMklPU2h1dGRvd24pCit7CisgICAgdWludDMyX3QgdWkzMlJlZzsKKyAgICB1aW50MzJfdCB1aTMyQ29uZmlnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJT0lkIDw9IElPSURfMzEpOworICAgIEFTU0VSVCgodWkzMklPU2h1dGRvd24gPT0gSU9DX05PX1dBS0VfVVApIHx8CisgICAgICAgICAgICh1aTMySU9TaHV0ZG93biA9PSBJT0NfV0FLRV9PTl9MT1cpIHx8CisgICAgICAgICAgICh1aTMySU9TaHV0ZG93biA9PSBJT0NfV0FLRV9PTl9ISUdIKSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKyAgICAvLworICAgIHVpMzJSZWcgPSBJT0NfQkFTRSArICggdWkzMklPSWQgPDwgMiApOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIElPLgorICAgIC8vCisgICAgdWkzMkNvbmZpZyA9IEhXUkVHKHVpMzJSZWcpOworICAgIHVpMzJDb25maWcgJj0gfklPQ19JT0NGRzBfV1VfQ0ZHX007CisgICAgSFdSRUcodWkzMlJlZykgPSB1aTMyQ29uZmlnIHwgdWkzMklPU2h1dGRvd247Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFNldCB0aGUgSU8gTW9kZSBvZiBhbiBJTyBQb3J0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DSU9Nb2RlU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySU9Nb2RlKQoreworICAgIHVpbnQzMl90IHVpMzJSZWc7CisgICAgdWludDMyX3QgdWkzMkNvbmZpZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKyAgICBBU1NFUlQoKHVpMzJJT01vZGUgPT0gSU9DX0lPTU9ERV9OT1JNQUwpIHx8CisgICAgICAgICAgICh1aTMySU9Nb2RlID09IElPQ19JT01PREVfSU5WKSB8fAorICAgICAgICAgICAodWkzMklPTW9kZSA9PSBJT0NfSU9NT0RFX09QRU5fRFJBSU5fTk9STUFMKSB8fAorICAgICAgICAgICAodWkzMklPTW9kZSA9PSBJT0NfSU9NT0RFX09QRU5fRFJBSU5fSU5WKSB8fAorICAgICAgICAgICAodWkzMklPTW9kZSA9PSBJT0NfSU9NT0RFX09QRU5fU1JDX05PUk1BTCkgfHwKKyAgICAgICAgICAgKHVpMzJJT01vZGUgPT0gSU9DX0lPTU9ERV9PUEVOX1NSQ19JTlYpKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMlJlZyA9IElPQ19CQVNFICsgKCB1aTMySU9JZCA8PCAyICk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgSU8uCisgICAgLy8KKyAgICB1aTMyQ29uZmlnID0gSFdSRUcodWkzMlJlZyk7CisgICAgdWkzMkNvbmZpZyAmPSB+SU9DX0lPQ0ZHMF9JT01PREVfTTsKKyAgICBIV1JFRyh1aTMyUmVnKSA9IHVpMzJDb25maWcgfCB1aTMySU9Nb2RlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU2V0dXAgaW50ZXJydXB0IGRldGVjdGlvbiBvbiBhbiBJTyBQb3J0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DSU9JbnRTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJJbnQsIHVpbnQzMl90IHVpMzJFZGdlRGV0KQoreworICAgIHVpbnQzMl90IHVpMzJJT1JlZzsKKyAgICB1aW50MzJfdCB1aTMyQ29uZmlnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJT0lkIDw9IElPSURfMzEpOworICAgIEFTU0VSVCgodWkzMkludCA9PSBJT0NfSU5UX0VOQUJMRSkgfHwKKyAgICAgICAgICAgKHVpMzJJbnQgPT0gSU9DX0lOVF9ESVNBQkxFKSk7CisgICAgQVNTRVJUKCh1aTMyRWRnZURldCA9PSBJT0NfTk9fRURHRSkgfHwKKyAgICAgICAgICAgKHVpMzJFZGdlRGV0ID09IElPQ19GQUxMSU5HX0VER0UpIHx8CisgICAgICAgICAgICh1aTMyRWRnZURldCA9PSBJT0NfUklTSU5HX0VER0UpIHx8CisgICAgICAgICAgICh1aTMyRWRnZURldCA9PSBJT0NfQk9USF9FREdFUykpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIHJlZ2lzdGVyIGFkZHJlc3MuCisgICAgLy8KKyAgICB1aTMySU9SZWcgPSBJT0NfQkFTRSArICggdWkzMklPSWQgPDwgMiApOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIElPLgorICAgIC8vCisgICAgdWkzMkNvbmZpZyA9IEhXUkVHKHVpMzJJT1JlZyk7CisgICAgdWkzMkNvbmZpZyAmPSAgfihJT0NfSU9DRkcwX0VER0VfSVJRX0VOIHwgSU9DX0lPQ0ZHMF9FREdFX0RFVF9NKTsKKyAgICBIV1JFRyh1aTMySU9SZWcpID0gdWkzMkNvbmZpZyB8ICgodWkzMkludCA/IElPQ19JT0NGRzBfRURHRV9JUlFfRU4gOiAwKSB8IHVpMzJFZGdlRGV0KTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFNldCB0aGUgcHVsbCBvbiBhbiBJTyBwb3J0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DSU9Qb3J0UHVsbFNldCh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMlB1bGwpCit7CisgICAgdWludDMyX3QgdWkzMklPUmVnOworICAgIHVpbnQzMl90IHVpMzJDb25maWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudC4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKyAgICBBU1NFUlQoKHVpMzJQdWxsID09IElPQ19OT19JT1BVTEwpIHx8CisgICAgICAgICAgICh1aTMyUHVsbCA9PSBJT0NfSU9QVUxMX1VQKSB8fAorICAgICAgICAgICAodWkzMlB1bGwgPT0gSU9DX0lPUFVMTF9ET1dOKSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKyAgICAvLworICAgIHVpMzJJT1JlZyA9IElPQ19CQVNFICsgKCB1aTMySU9JZCA8PCAyICk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgSU8uCisgICAgLy8KKyAgICB1aTMyQ29uZmlnID0gSFdSRUcodWkzMklPUmVnKTsKKyAgICB1aTMyQ29uZmlnICY9IH5JT0NfSU9DRkcwX1BVTExfQ1RMX007CisgICAgSFdSRUcodWkzMklPUmVnKSA9IHVpMzJDb25maWcgfCB1aTMyUHVsbDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENvbmZpZ3VyZSBoeXN0ZXJlc2lzIG9uIGFuZCBJTyBwb3J0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DSU9IeXN0U2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySHlzdGVyZXNpcykKK3sKKyAgICB1aW50MzJfdCB1aTMySU9SZWc7CisgICAgdWludDMyX3QgdWkzMkNvbmZpZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKyAgICBBU1NFUlQoKHVpMzJIeXN0ZXJlc2lzID09IElPQ19IWVNUX0VOQUJMRSkgfHwKKyAgICAgICAgICAgKHVpMzJIeXN0ZXJlc2lzID09IElPQ19IWVNUX0RJU0FCTEUpKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMklPUmVnID0gSU9DX0JBU0UgKyAoIHVpMzJJT0lkIDw8IDIgKTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBJTy4KKyAgICAvLworICAgIHVpMzJDb25maWcgPSBIV1JFRyh1aTMySU9SZWcpOworICAgIHVpMzJDb25maWcgJj0gfklPQ19JT0NGRzBfSFlTVF9FTjsKKyAgICBIV1JFRyh1aTMySU9SZWcpID0gdWkzMkNvbmZpZyB8IHVpMzJIeXN0ZXJlc2lzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRW5hYmxlL2Rpc2FibGUgSU8gcG9ydCBhcyBpbnB1dAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0lPQ0lPSW5wdXRTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJJbnB1dCkKK3sKKyAgICB1aW50MzJfdCB1aTMySU9SZWc7CisgICAgdWludDMyX3QgdWkzMkNvbmZpZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKyAgICBBU1NFUlQoKHVpMzJJbnB1dCA9PSBJT0NfSU5QVVRfRU5BQkxFKSB8fAorICAgICAgICAgICAodWkzMklucHV0ID09IElPQ19JTlBVVF9ESVNBQkxFKSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKyAgICAvLworICAgIHVpMzJJT1JlZyA9IElPQ19CQVNFICsgKCB1aTMySU9JZCA8PCAyICk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgSU8uCisgICAgLy8KKyAgICB1aTMyQ29uZmlnID0gSFdSRUcodWkzMklPUmVnKTsKKyAgICB1aTMyQ29uZmlnICY9IH5JT0NfSU9DRkcwX0lFOworICAgIEhXUkVHKHVpMzJJT1JlZykgPSB1aTMyQ29uZmlnIHwgdWkzMklucHV0OworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRW5hYmxlL2Rpc2FibGUgdGhlIHNsZXcgY29udHJvbCBvbiBhbiBJTyBwb3J0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DSU9TbGV3Q3RybFNldCh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMlNsZXdFbmFibGUpCit7CisgICAgdWludDMyX3QgdWkzMklPUmVnOworICAgIHVpbnQzMl90IHVpMzJDb25maWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMklPSWQgPD0gSU9JRF8zMSk7CisgICAgQVNTRVJUKCh1aTMyU2xld0VuYWJsZSA9PSBJT0NfU0xFV19FTkFCTEUpIHx8CisgICAgICAgICAgICh1aTMyU2xld0VuYWJsZSA9PSBJT0NfU0xFV19ESVNBQkxFKSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKyAgICAvLworICAgIHVpMzJJT1JlZyA9IElPQ19CQVNFICsgKCB1aTMySU9JZCA8PCAyICk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgSU8uCisgICAgLy8KKyAgICB1aTMyQ29uZmlnID0gSFdSRUcodWkzMklPUmVnKTsKKyAgICB1aTMyQ29uZmlnICY9IH5JT0NfSU9DRkcwX1NMRVdfUkVEOworICAgIEhXUkVHKHVpMzJJT1JlZykgPSB1aTMyQ29uZmlnIHwgdWkzMlNsZXdFbmFibGU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDb25maWd1cmUgdGhlIGRyaXZlIHN0cmVuZ3RoIGFuZCBtYXhpbXVtIGN1cnJlbnQgb2YgYW4gSU8gcG9ydAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0lPQ0lPRHJ2U3RyZW5ndGhTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJJT0N1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJEcnZTdHJlbmd0aCkKK3sKKyAgICB1aW50MzJfdCB1aTMySU9SZWc7CisgICAgdWludDMyX3QgdWkzMkNvbmZpZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKyAgICBBU1NFUlQoKHVpMzJJT0N1cnJlbnQgPT0gSU9DX0NVUlJFTlRfMk1BKSB8fAorICAgICAgICAgICAodWkzMklPQ3VycmVudCA9PSBJT0NfQ1VSUkVOVF80TUEpIHx8CisgICAgICAgICAgICh1aTMySU9DdXJyZW50ID09IElPQ19DVVJSRU5UXzhNQSkpOworICAgIEFTU0VSVCgodWkzMkRydlN0cmVuZ3RoID09IElPQ19TVFJFTkdUSF9NSU4pIHx8CisgICAgICAgICAgICh1aTMyRHJ2U3RyZW5ndGggPT0gSU9DX1NUUkVOR1RIX01BWCkgfHwKKyAgICAgICAgICAgKHVpMzJEcnZTdHJlbmd0aCA9PSBJT0NfU1RSRU5HVEhfTUVEKSB8fAorICAgICAgICAgICAodWkzMkRydlN0cmVuZ3RoID09IElPQ19TVFJFTkdUSF9BVVRPKSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKyAgICAvLworICAgIHVpMzJJT1JlZyA9IElPQ19CQVNFICsgKCB1aTMySU9JZCA8PCAyICk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgSU8uCisgICAgLy8KKyAgICB1aTMyQ29uZmlnID0gSFdSRUcodWkzMklPUmVnKTsKKyAgICB1aTMyQ29uZmlnICY9IH4oSU9DX0lPQ0ZHMF9JT0NVUlJfTSB8IElPQ19JT0NGRzBfSU9TVFJfTSk7CisgICAgSFdSRUcodWkzMklPUmVnKSA9IHVpMzJDb25maWcgfCAodWkzMklPQ3VycmVudCB8IHVpMzJEcnZTdHJlbmd0aCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTZXR1cCB0aGUgUG9ydCBJRCBmb3IgdGhpcyBJTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0lPQ0lPUG9ydElkU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMyUG9ydElkKQoreworICAgIHVpbnQzMl90IHVpMzJJT1JlZzsKKyAgICB1aW50MzJfdCB1aTMyQ29uZmlnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJT0lkIDw9IElPSURfMzEpOworICAgIEFTU0VSVCh1aTMyUG9ydElkIDw9IElPQ19QT1JUX1JGQ19HUEkxKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMklPUmVnID0gSU9DX0JBU0UgKyAoIHVpMzJJT0lkIDw8IDIgKTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBJTy4KKyAgICAvLworICAgIHVpMzJDb25maWcgPSBIV1JFRyh1aTMySU9SZWcpOworICAgIHVpMzJDb25maWcgJj0gfklPQ19JT0NGRzBfUE9SVF9JRF9NOworICAgIEhXUkVHKHVpMzJJT1JlZykgPSB1aTMyQ29uZmlnIHwgdWkzMlBvcnRJZDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEVuYWJsZXMgaW5kaXZpZHVhbCBJTyBlZGdlIGRldGVjdCBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NJbnRFbmFibGUodWludDMyX3QgdWkzMklPSWQpCit7CisgICAgdWludDMyX3QgdWkzMklPUmVnOworICAgIHVpbnQzMl90IHVpMzJDb25maWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMklPSWQgPD0gSU9JRF8zMSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKyAgICAvLworICAgIHVpMzJJT1JlZyA9IElPQ19CQVNFICsgKCB1aTMySU9JZCA8PCAyICk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdC4KKyAgICAvLworICAgIHVpMzJDb25maWcgPSBIV1JFRyh1aTMySU9SZWcpOworICAgIHVpMzJDb25maWcgfD0gSU9DX0lPQ0ZHMF9FREdFX0lSUV9FTjsKKyAgICBIV1JFRyh1aTMySU9SZWcpID0gdWkzMkNvbmZpZzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERpc2FibGVzIGluZGl2aWR1YWwgSU8gZWRnZSBpbnRlcnJ1cHQgc291cmNlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0lPQ0ludERpc2FibGUodWludDMyX3QgdWkzMklPSWQpCit7CisgICAgdWludDMyX3QgdWkzMklPUmVnOworICAgIHVpbnQzMl90IHVpMzJDb25maWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMklPSWQgPD0gSU9JRF8zMSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKyAgICAvLworICAgIHVpMzJJT1JlZyA9IElPQ19CQVNFICsgKCB1aTMySU9JZCA8PCAyICk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICB1aTMyQ29uZmlnID0gSFdSRUcodWkzMklPUmVnKTsKKyAgICB1aTMyQ29uZmlnICY9IH5JT0NfSU9DRkcwX0VER0VfSVJRX0VOOworICAgIEhXUkVHKHVpMzJJT1JlZykgPSB1aTMyQ29uZmlnOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU2V0dXAgYW4gSU8gZm9yIHN0YW5kYXJkIEdQSU8gaW5wdXQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NQaW5UeXBlR3Bpb0lucHV0KHVpbnQzMl90IHVpMzJJT0lkKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKworICAgIC8vCisgICAgLy8gU2V0dXAgdGhlIElPIGZvciBzdGFuZGFyZCBpbnB1dC4KKyAgICAvLworICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMklPSWQsIElPQ19QT1JUX0dQSU8sIElPQ19TVERfSU5QVVQpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgaW5wdXQgbW9kZSBpbiB0aGUgR1BJTyBtb2R1bGUuCisgICAgLy8KKyAgICBHUElPX3NldE91dHB1dEVuYWJsZURpbyh1aTMySU9JZCwgR1BJT19PVVRQVVRfRElTQUJMRSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTZXR1cCBhbiBJTyBmb3Igc3RhbmRhcmQgR1BJTyBvdXRwdXQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NQaW5UeXBlR3Bpb091dHB1dCh1aW50MzJfdCB1aTMySU9JZCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMklPSWQgPD0gSU9JRF8zMSk7CisKKyAgICAvLworICAgIC8vIFNldHVwIHRoZSBJTyBmb3Igc3RhbmRhcmQgaW5wdXQuCisgICAgLy8KKyAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJJT0lkLCBJT0NfUE9SVF9HUElPLCBJT0NfU1REX09VVFBVVCk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBvdXRwdXQgbW9kZSBpbiB0aGUgR1BJTyBtb2R1bGUuCisgICAgLy8KKyAgICBHUElPX3NldE91dHB1dEVuYWJsZURpbyh1aTMySU9JZCwgR1BJT19PVVRQVVRfRU5BQkxFKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENvbmZpZ3VyZSBhIHNldCBvZiBJT3MgZm9yIHN0YW5kYXJkIFVBUlQgcGVyaXBoZXJhbCBjb250cm9sCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DUGluVHlwZVVhcnQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSeCwgdWludDMyX3QgdWkzMlR4LAorICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkN0cywgdWludDMyX3QgdWkzMlJ0cykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMkJhc2UgPT0gVUFSVDBfQkFTRSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisgICAgQVNTRVJUKCh1aTMyUnggPD0gSU9JRF8zMSkgfHwgKHVpMzJSeCA9PSBJT0lEX1VOVVNFRCkpOworICAgIEFTU0VSVCgodWkzMlR4IDw9IElPSURfMzEpIHx8ICh1aTMyVHggPT0gSU9JRF9VTlVTRUQpKTsKKyAgICBBU1NFUlQoKHVpMzJDdHMgPD0gSU9JRF8zMSkgfHwgKHVpMzJDdHMgPT0gSU9JRF9VTlVTRUQpKTsKKyAgICBBU1NFUlQoKHVpMzJSdHMgPD0gSU9JRF8zMSkgfHwgKHVpMzJSdHMgPT0gSU9JRF9VTlVTRUQpKTsKKworICAgIC8vCisgICAgLy8gU2V0dXAgdGhlIElPcyBpbiB0aGUgZGVzaXJlZCBjb25maWd1cmF0aW9uLgorICAgIC8vCisgICAgaWYodWkzMlJ4ICE9IElPSURfVU5VU0VEKQorICAgIHsKKyAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyUngsIElPQ19QT1JUX01DVV9VQVJUMF9SWCwgSU9DX1NURF9JTlBVVCk7CisgICAgfQorICAgIGlmKHVpMzJUeCAhPSBJT0lEX1VOVVNFRCkKKyAgICB7CisgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMlR4LCBJT0NfUE9SVF9NQ1VfVUFSVDBfVFgsIElPQ19TVERfT1VUUFVUKTsKKyAgICB9CisgICAgaWYodWkzMkN0cyAhPSBJT0lEX1VOVVNFRCkKKyAgICB7CisgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMkN0cywgSU9DX1BPUlRfTUNVX1VBUlQwX0NUUywgSU9DX1NURF9JTlBVVCk7CisgICAgfQorICAgIGlmKHVpMzJSdHMgIT0gSU9JRF9VTlVTRUQpCisgICAgeworICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJSdHMsIElPQ19QT1JUX01DVV9VQVJUMF9SVFMsIElPQ19TVERfT1VUUFVUKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDb25maWd1cmUgYSBzZXQgb2YgSU9zIGZvciBzdGFuZGFyZCBTU0kgcGVyaXBoZXJhbCBtYXN0ZXIgY29udHJvbAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0lPQ1BpblR5cGVTc2lNYXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSeCwKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlR4LCB1aW50MzJfdCB1aTMyRnNzLAorICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2xrKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkJhc2UgPT0gU1NJMF9CQVNFKSB8fCAodWkzMkJhc2UgPT0gU1NJMV9CQVNFKSk7CisgICAgQVNTRVJUKCh1aTMyUnggPD0gSU9JRF8zMSkgfHwgKHVpMzJSeCA9PSBJT0lEX1VOVVNFRCkpOworICAgIEFTU0VSVCgodWkzMlR4IDw9IElPSURfMzEpIHx8ICh1aTMyVHggPT0gSU9JRF9VTlVTRUQpKTsKKyAgICBBU1NFUlQoKHVpMzJGc3MgPD0gSU9JRF8zMSkgfHwgKHVpMzJGc3MgPT0gSU9JRF9VTlVTRUQpKTsKKyAgICBBU1NFUlQoKHVpMzJDbGsgPD0gSU9JRF8zMSkgfHwgKHVpMzJDbGsgPT0gSU9JRF9VTlVTRUQpKTsKKworICAgIC8vCisgICAgLy8gU2V0dXAgdGhlIElPcyBpbiB0aGUgZGVzaXJlZCBjb25maWd1cmF0aW9uLgorICAgIC8vCisgICAgaWYodWkzMkJhc2UgPT0gU1NJMF9CQVNFKQorICAgIHsKKyAgICAgICAgaWYodWkzMlJ4ICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJSeCwgSU9DX1BPUlRfTUNVX1NTSTBfUlgsIElPQ19TVERfSU5QVVQpOworICAgICAgICB9CisgICAgICAgIGlmKHVpMzJUeCAhPSBJT0lEX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyVHgsIElPQ19QT1JUX01DVV9TU0kwX1RYLCBJT0NfU1REX09VVFBVVCk7CisgICAgICAgIH0KKyAgICAgICAgaWYodWkzMkZzcyAhPSBJT0lEX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyRnNzLCBJT0NfUE9SVF9NQ1VfU1NJMF9GU1MsIElPQ19TVERfT1VUUFVUKTsKKyAgICAgICAgfQorICAgICAgICBpZih1aTMyQ2xrICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJDbGssIElPQ19QT1JUX01DVV9TU0kwX0NMSywgSU9DX1NURF9PVVRQVVQpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKHVpMzJSeCAhPSBJT0lEX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyUngsIElPQ19QT1JUX01DVV9TU0kxX1JYLCBJT0NfU1REX0lOUFVUKTsKKyAgICAgICAgfQorICAgICAgICBpZih1aTMyVHggIT0gSU9JRF9VTlVTRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMlR4LCBJT0NfUE9SVF9NQ1VfU1NJMV9UWCwgSU9DX1NURF9PVVRQVVQpOworICAgICAgICB9CisgICAgICAgIGlmKHVpMzJGc3MgIT0gSU9JRF9VTlVTRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMkZzcywgSU9DX1BPUlRfTUNVX1NTSTFfRlNTLCBJT0NfU1REX09VVFBVVCk7CisgICAgICAgIH0KKyAgICAgICAgaWYodWkzMkNsayAhPSBJT0lEX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyQ2xrLCBJT0NfUE9SVF9NQ1VfU1NJMV9DTEssIElPQ19TVERfT1VUUFVUKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENvbmZpZ3VyZSBhIHNldCBvZiBJT3MgZm9yIHN0YW5kYXJkIFNTSSBwZXJpcGhlcmFsIHNsYXZlIGNvbnRyb2wKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NQaW5UeXBlU3NpU2xhdmUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSeCwKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyVHgsIHVpbnQzMl90IHVpMzJGc3MsCisgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNsaykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJCYXNlID09IFNTSTBfQkFTRSkgfHwgKHVpMzJCYXNlID09IFNTSTFfQkFTRSkpOworICAgIEFTU0VSVCgodWkzMlJ4IDw9IElPSURfMzEpIHx8ICh1aTMyUnggPT0gSU9JRF9VTlVTRUQpKTsKKyAgICBBU1NFUlQoKHVpMzJUeCA8PSBJT0lEXzMxKSB8fCAodWkzMlR4ID09IElPSURfVU5VU0VEKSk7CisgICAgQVNTRVJUKCh1aTMyRnNzIDw9IElPSURfMzEpIHx8ICh1aTMyRnNzID09IElPSURfVU5VU0VEKSk7CisgICAgQVNTRVJUKCh1aTMyQ2xrIDw9IElPSURfMzEpIHx8ICh1aTMyQ2xrID09IElPSURfVU5VU0VEKSk7CisKKyAgICAvLworICAgIC8vIFNldHVwIHRoZSBJT3MgaW4gdGhlIGRlc2lyZWQgY29uZmlndXJhdGlvbi4KKyAgICAvLworICAgIGlmKHVpMzJCYXNlID09IFNTSTBfQkFTRSkKKyAgICB7CisgICAgICAgIGlmKHVpMzJSeCAhPSBJT0lEX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyUngsIElPQ19QT1JUX01DVV9TU0kwX1JYLCAgSU9DX1NURF9JTlBVVCk7CisgICAgICAgIH0KKyAgICAgICAgaWYodWkzMlR4ICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJUeCwgSU9DX1BPUlRfTUNVX1NTSTBfVFgsIElPQ19TVERfT1VUUFVUKTsKKyAgICAgICAgfQorICAgICAgICBpZih1aTMyRnNzICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJGc3MsIElPQ19QT1JUX01DVV9TU0kwX0ZTUywgSU9DX1NURF9JTlBVVCk7CisgICAgICAgIH0KKyAgICAgICAgaWYodWkzMkNsayAhPSBJT0lEX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyQ2xrLCBJT0NfUE9SVF9NQ1VfU1NJMF9DTEssIElPQ19TVERfSU5QVVQpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKHVpMzJSeCAhPSBJT0lEX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyUngsIElPQ19QT1JUX01DVV9TU0kxX1JYLCBJT0NfU1REX0lOUFVUKTsKKyAgICAgICAgfQorICAgICAgICBpZih1aTMyVHggIT0gSU9JRF9VTlVTRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMlR4LCBJT0NfUE9SVF9NQ1VfU1NJMV9UWCwgSU9DX1NURF9PVVRQVVQpOworICAgICAgICB9CisgICAgICAgIGlmKHVpMzJGc3MgIT0gSU9JRF9VTlVTRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMkZzcywgSU9DX1BPUlRfTUNVX1NTSTFfRlNTLCBJT0NfU1REX0lOUFVUKTsKKyAgICAgICAgfQorICAgICAgICBpZih1aTMyQ2xrICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJDbGssIElPQ19QT1JUX01DVV9TU0kxX0NMSywgSU9DX1NURF9JTlBVVCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDb25maWd1cmUgYSBzZXQgb2YgSU9zIGZvciBzdGFuZGFyZCBJMkMgcGVyaXBoZXJhbCBjb250cm9sCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DUGluVHlwZUkyYyh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkRhdGEsIHVpbnQzMl90IHVpMzJDbGspCit7CisgICAgdWludDMyX3QgdWkzMklPQ29uZmlnOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyRGF0YSA8PSBJT0lEXzMxKSB8fCAodWkzMkRhdGEgPT0gSU9JRF9VTlVTRUQpKTsKKyAgICBBU1NFUlQoKHVpMzJDbGsgPD0gSU9JRF8zMSkgfHwgKHVpMzJDbGsgPT0gSU9JRF9VTlVTRUQpKTsKKworICAgIC8vCisgICAgLy8gRGVmaW5lIHRoZSBJTyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisgICAgLy8KKyAgICB1aTMySU9Db25maWcgPSBJT0NfQ1VSUkVOVF8yTUEgfCBJT0NfU1RSRU5HVEhfQVVUTyB8IElPQ19JT1BVTExfVVAgfAorICAgICAgICAgICAgICAgICAgIElPQ19TTEVXX0RJU0FCTEUgfCBJT0NfSFlTVF9ESVNBQkxFIHwgSU9DX05PX0VER0UgfAorICAgICAgICAgICAgICAgICAgIElPQ19JTlRfRElTQUJMRSB8IElPQ19JT01PREVfT1BFTl9EUkFJTl9OT1JNQUwgfAorICAgICAgICAgICAgICAgICAgIElPQ19OT19XQUtFX1VQIHwgSU9DX0lOUFVUX0VOQUJMRTsKKworICAgIC8vCisgICAgLy8gU2V0dXAgdGhlIElPcyBpbiB0aGUgZGVzaXJlZCBjb25maWd1cmF0aW9uLgorICAgIC8vCisgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyRGF0YSwgSU9DX1BPUlRfTUNVX0kyQ19NU1NEQSwgdWkzMklPQ29uZmlnKTsKKyAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJDbGssIElPQ19QT1JUX01DVV9JMkNfTVNTQ0wsIHVpMzJJT0NvbmZpZyk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENvbmZpZ3VyZSBhbiBJTyBmb3IgQVVYIGNvbnRyb2wKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NQaW5UeXBlQXV4KHVpbnQzMl90IHVpMzJJT0lkKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMklPSWQgPD0gSU9JRF8zMSkgfHwgKHVpMzJJT0lkID09IElPSURfVU5VU0VEKSk7CisKKyAgICAvLworICAgIC8vIFNldHVwIHRoZSBJTy4KKyAgICAvLworICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMklPSWQsIElPQ19QT1JUX0FVWF9JTywgSU9DX1NURF9JTlBVVCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2lvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MDVhNjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pb2MuaApAQCAtMCwwICsxLDExNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBpb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMTEtMTcgMTQ6MTQ6MzQgKzAxMDAgKFR1ZSwgMTcgTm92IDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDUxMTUKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgSU8gQ29udHJvbGxlci4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcGVyaXBoZXJhbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgaW9jX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fSU9DX0hfXworI2RlZmluZSBfX0lPQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW9jLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2dwaW8uaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgSU9DUG9ydENvbmZpZ3VyZVNldCAgICAgICAgICAgICBOT1JPTV9JT0NQb3J0Q29uZmlndXJlU2V0CisgICAgI2RlZmluZSBJT0NQb3J0Q29uZmlndXJlR2V0ICAgICAgICAgICAgIE5PUk9NX0lPQ1BvcnRDb25maWd1cmVHZXQKKyAgICAjZGVmaW5lIElPQ0lPU2h1dGRvd25TZXQgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9TaHV0ZG93blNldAorICAgICNkZWZpbmUgSU9DSU9Nb2RlU2V0ICAgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT01vZGVTZXQKKyAgICAjZGVmaW5lIElPQ0lPSW50U2V0ICAgICAgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9JbnRTZXQKKyAgICAjZGVmaW5lIElPQ0lPUG9ydFB1bGxTZXQgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9Qb3J0UHVsbFNldAorICAgICNkZWZpbmUgSU9DSU9IeXN0U2V0ICAgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT0h5c3RTZXQKKyAgICAjZGVmaW5lIElPQ0lPSW5wdXRTZXQgICAgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9JbnB1dFNldAorICAgICNkZWZpbmUgSU9DSU9TbGV3Q3RybFNldCAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT1NsZXdDdHJsU2V0CisgICAgI2RlZmluZSBJT0NJT0RydlN0cmVuZ3RoU2V0ICAgICAgICAgICAgIE5PUk9NX0lPQ0lPRHJ2U3RyZW5ndGhTZXQKKyAgICAjZGVmaW5lIElPQ0lPUG9ydElkU2V0ICAgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9Qb3J0SWRTZXQKKyAgICAjZGVmaW5lIElPQ0ludEVuYWJsZSAgICAgICAgICAgICAgICAgICAgTk9ST01fSU9DSW50RW5hYmxlCisgICAgI2RlZmluZSBJT0NJbnREaXNhYmxlICAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ0ludERpc2FibGUKKyAgICAjZGVmaW5lIElPQ1BpblR5cGVHcGlvSW5wdXQgICAgICAgICAgICAgTk9ST01fSU9DUGluVHlwZUdwaW9JbnB1dAorICAgICNkZWZpbmUgSU9DUGluVHlwZUdwaW9PdXRwdXQgICAgICAgICAgICBOT1JPTV9JT0NQaW5UeXBlR3Bpb091dHB1dAorICAgICNkZWZpbmUgSU9DUGluVHlwZVVhcnQgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NQaW5UeXBlVWFydAorICAgICNkZWZpbmUgSU9DUGluVHlwZVNzaU1hc3RlciAgICAgICAgICAgICBOT1JPTV9JT0NQaW5UeXBlU3NpTWFzdGVyCisgICAgI2RlZmluZSBJT0NQaW5UeXBlU3NpU2xhdmUgICAgICAgICAgICAgIE5PUk9NX0lPQ1BpblR5cGVTc2lTbGF2ZQorICAgICNkZWZpbmUgSU9DUGluVHlwZUkyYyAgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NQaW5UeXBlSTJjCisgICAgI2RlZmluZSBJT0NQaW5UeXBlQXV4ICAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ1BpblR5cGVBdXgKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTnVtYmVyIG9mIElPcyAobWF4LiB0b3RhbCBvZiAzMikKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5VTV9JT19NQVggMzIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBJTyBJZCBmb3IgdGhlIElPQyBtb2R1bGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIElPSURfMCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIElPIElkIDAKKyNkZWZpbmUgSU9JRF8xICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgLy8gSU8gSWQgMQorI2RlZmluZSBJT0lEXzIgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyICAvLyBJTyBJZCAyCisjZGVmaW5lIElPSURfMyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMgIC8vIElPIElkIDMKKyNkZWZpbmUgSU9JRF80ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLy8gSU8gSWQgNAorI2RlZmluZSBJT0lEXzUgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1ICAvLyBJTyBJZCA1CisjZGVmaW5lIElPSURfNiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYgIC8vIElPIElkIDYKKyNkZWZpbmUgSU9JRF83ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNyAgLy8gSU8gSWQgNworI2RlZmluZSBJT0lEXzggICAgICAgICAgICAgICAgICAweDAwMDAwMDA4ICAvLyBJTyBJZCA4CisjZGVmaW5lIElPSURfOSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkgIC8vIElPIElkIDkKKyNkZWZpbmUgSU9JRF8xMCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQSAgLy8gSU8gSWQgMTAKKyNkZWZpbmUgSU9JRF8xMSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQiAgLy8gSU8gSWQgMTEKKyNkZWZpbmUgSU9JRF8xMiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQyAgLy8gSU8gSWQgMTIKKyNkZWZpbmUgSU9JRF8xMyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRCAgLy8gSU8gSWQgMTMKKyNkZWZpbmUgSU9JRF8xNCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRSAgLy8gSU8gSWQgMTQKKyNkZWZpbmUgSU9JRF8xNSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRiAgLy8gSU8gSWQgMTUKKyNkZWZpbmUgSU9JRF8xNiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMCAgLy8gSU8gSWQgMTYKKyNkZWZpbmUgSU9JRF8xNyAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMSAgLy8gSU8gSWQgMTcKKyNkZWZpbmUgSU9JRF8xOCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMiAgLy8gSU8gSWQgMTgKKyNkZWZpbmUgSU9JRF8xOSAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMyAgLy8gSU8gSWQgMTkKKyNkZWZpbmUgSU9JRF8yMCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNCAgLy8gSU8gSWQgMjAKKyNkZWZpbmUgSU9JRF8yMSAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNSAgLy8gSU8gSWQgMjEKKyNkZWZpbmUgSU9JRF8yMiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNiAgLy8gSU8gSWQgMjIKKyNkZWZpbmUgSU9JRF8yMyAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNyAgLy8gSU8gSWQgMjMKKyNkZWZpbmUgSU9JRF8yNCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOCAgLy8gSU8gSWQgMjQKKyNkZWZpbmUgSU9JRF8yNSAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOSAgLy8gSU8gSWQgMjUKKyNkZWZpbmUgSU9JRF8yNiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQSAgLy8gSU8gSWQgMjYKKyNkZWZpbmUgSU9JRF8yNyAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQiAgLy8gSU8gSWQgMjcKKyNkZWZpbmUgSU9JRF8yOCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQyAgLy8gSU8gSWQgMjgKKyNkZWZpbmUgSU9JRF8yOSAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRCAgLy8gSU8gSWQgMjkKKyNkZWZpbmUgSU9JRF8zMCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRSAgLy8gSU8gSWQgMzAKKyNkZWZpbmUgSU9JRF8zMSAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRiAgLy8gSU8gSWQgMzEKKyNkZWZpbmUgSU9JRF9VTlVTRUQgICAgICAgICAgICAgMHhGRkZGRkZGRiAgLy8gVW51c2VkIElPIElkCisKKyNkZWZpbmUgSU9DX0lPSURfTUFTSyAgICAgICAgICAgMHgwMDAwMDBGRiAgLy8gSU9DIElPIElkIGJpdCBtYXNrCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBOdW1iZXIgb2YgSU8gcG9ydHMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5VTV9JT19QT1JUUyA1NgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSU9DIFBlcmlwaGVyYWwgUG9ydCBNYXBwaW5nCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJT0NfUE9SVF9HUElPICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIERlZmF1bHQgZ2VuZXJhbCBwdXJwb3NlIElPIHVzYWdlCisjZGVmaW5lIElPQ19QT1JUX0FPTl9DTEszMksgICAgICAgMHgwMDAwMDAwNyAgLy8gQU9OIEV4dGVybmFsIDMya0h6IGNsb2NrCisjZGVmaW5lIElPQ19QT1JUX0FVWF9JTyAgICAgICAgICAgMHgwMDAwMDAwOCAgLy8gQVVYIElPIFBpbgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfU1NJMF9SWCAgICAgIDB4MDAwMDAwMDkgIC8vIE1DVSBTU0kwIFJlY2VpdmUgUGluCisjZGVmaW5lIElPQ19QT1JUX01DVV9TU0kwX1RYICAgICAgMHgwMDAwMDAwQSAgLy8gTUNVIFNTSTAgVHJhbnNtaXQgUGluCisjZGVmaW5lIElPQ19QT1JUX01DVV9TU0kwX0ZTUyAgICAgMHgwMDAwMDAwQiAgLy8gTUNVIFNTSTAgRlNTIFBpbgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfU1NJMF9DTEsgICAgIDB4MDAwMDAwMEMgIC8vIE1DVSBTU0kwIENsb2NrIFBpbgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfSTJDX01TU0RBICAgIDB4MDAwMDAwMEQgIC8vIE1DVSBJMkMgRGF0YSBQaW4KKyNkZWZpbmUgSU9DX1BPUlRfTUNVX0kyQ19NU1NDTCAgICAweDAwMDAwMDBFICAvLyBNQ1UgSTJDIENsb2NrIFBpbgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfVUFSVDBfUlggICAgIDB4MDAwMDAwMEYgIC8vIE1DVSBVQVJUMCBSZWNlaXZlIFBpbgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfVUFSVDBfVFggICAgIDB4MDAwMDAwMTAgIC8vIE1DVSBVQVJUMCBUcmFuc21pdCBQaW4KKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1VBUlQwX0NUUyAgICAweDAwMDAwMDExICAvLyBNQ1UgVUFSVDAgQ2xlYXIgVG8gU2VuZCBQaW4KKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1VBUlQwX1JUUyAgICAweDAwMDAwMDEyICAvLyBNQ1UgVUFSVDAgUmVxdWVzdCBUbyBTZW5kIFBpbgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDAgIDB4MDAwMDAwMTcgIC8vIE1DVSBQT1JUIEVWRU5UIDAKKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQxICAweDAwMDAwMDE4ICAvLyBNQ1UgUE9SVCBFVkVOVCAxCisjZGVmaW5lIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UMiAgMHgwMDAwMDAxOSAgLy8gTUNVIFBPUlQgRVZFTlQgMgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDMgIDB4MDAwMDAwMUEgIC8vIE1DVSBQT1JUIEVWRU5UIDMKKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQ0ICAweDAwMDAwMDFCICAvLyBNQ1UgUE9SVCBFVkVOVCA0CisjZGVmaW5lIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UNSAgMHgwMDAwMDAxQyAgLy8gTUNVIFBPUlQgRVZFTlQgNQorI2RlZmluZSBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDYgIDB4MDAwMDAwMUQgIC8vIE1DVSBQT1JUIEVWRU5UIDYKKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQ3ICAweDAwMDAwMDFFICAvLyBNQ1UgUE9SVCBFVkVOVCA3CisjZGVmaW5lIElPQ19QT1JUX01DVV9TV1YgICAgICAgICAgMHgwMDAwMDAyMCAgLy8gU2VyaWFsIFdpcmUgVmlld2VyCisjZGVmaW5lIElPQ19QT1JUX01DVV9TU0kxX1JYICAgICAgMHgwMDAwMDAyMSAgLy8gTUNVIFNTSTEgUmVjZWl2ZSBQaW4KKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1NTSTFfVFggICAgICAweDAwMDAwMDIyICAvLyBNQ1UgU1NJMSBUcmFuc21pdCBQaW4KKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1NTSTFfRlNTICAgICAweDAwMDAwMDIzICAvLyBNQ1UgU1NJMSBGU1MgUGluCisjZGVmaW5lIElPQ19QT1JUX01DVV9TU0kxX0NMSyAgICAgMHgwMDAwMDAyNCAgLy8gTUNVIFNTSTEgQ2xvY2sgUGluCisjZGVmaW5lIElPQ19QT1JUX01DVV9JMlNfQUQwICAgICAgMHgwMDAwMDAyNSAgLy8gTUNVIEkyUyBEYXRhIFBpbiAwCisjZGVmaW5lIElPQ19QT1JUX01DVV9JMlNfQUQxICAgICAgMHgwMDAwMDAyNiAgLy8gTUNVIEkyUyBEYXRhIFBpbiAxCisjZGVmaW5lIElPQ19QT1JUX01DVV9JMlNfV0NMSyAgICAgMHgwMDAwMDAyNyAgLy8gTUNVIEkyUyBGcmFtZS9Xb3JkIENsb2NrCisjZGVmaW5lIElPQ19QT1JUX01DVV9JMlNfQkNMSyAgICAgMHgwMDAwMDAyOCAgLy8gTUNVIEkyUyBCaXQgQ2xvY2sKKyNkZWZpbmUgSU9DX1BPUlRfTUNVX0kyU19NQ0xLICAgICAweDAwMDAwMDI5ICAvLyBNQ1UgSTJTIE1hc3RlciBjbG9jayAyCisjZGVmaW5lIElPQ19QT1JUX1JGQ19UUkMgICAgICAgICAgMHgwMDAwMDAyRSAgLy8gUkYgQ29yZSBUcmFjZXIKKyNkZWZpbmUgSU9DX1BPUlRfUkZDX0dQTzAgICAgICAgICAweDAwMDAwMDJGICAvLyBSQyBDb3JlIERhdGEgT3V0IFBpbiAwCisjZGVmaW5lIElPQ19QT1JUX1JGQ19HUE8xICAgICAgICAgMHgwMDAwMDAzMCAgLy8gUkMgQ29yZSBEYXRhIE91dCBQaW4gMQorI2RlZmluZSBJT0NfUE9SVF9SRkNfR1BPMiAgICAgICAgIDB4MDAwMDAwMzEgIC8vIFJDIENvcmUgRGF0YSBPdXQgUGluIDIKKyNkZWZpbmUgSU9DX1BPUlRfUkZDX0dQTzMgICAgICAgICAweDAwMDAwMDMyICAvLyBSQyBDb3JlIERhdGEgT3V0IFBpbiAzCisjZGVmaW5lIElPQ19QT1JUX1JGQ19HUEkwICAgICAgICAgMHgwMDAwMDAzMyAgLy8gUkMgQ29yZSBEYXRhIEluIFBpbiAwCisjZGVmaW5lIElPQ19QT1JUX1JGQ19HUEkxICAgICAgICAgMHgwMDAwMDAzNCAgLy8gUkMgQ29yZSBEYXRhIEluIFBpbiAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciBlbmFibGluZy9kaXNhYmxpbmcgYW4gSU8KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIElPQ19TTEVXX0VOQUJMRSAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX1NMRVdfRElTQUJMRSAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBJT0NfSU5QVVRfRU5BQkxFICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JTlBVVF9ESVNBQkxFICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSU9DX0hZU1RfRU5BQkxFICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSFlTVF9ESVNBQkxFICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHNodXRkb3duIG1vZGUgb2YgYW4gSU8KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIElPQ19OT19XQUtFX1VQICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSU9DX1dBS0VfT05fTE9XICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBJT0NfV0FLRV9PTl9ISUdIICAgICAgICAweDE4MDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIElPIE1vZGUgb2YgYW4gSU8KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIElPQ19JT01PREVfTk9STUFMICAgICAgIDB4MDAwMDAwMDAgIC8vIE5vcm1hbCBJbnB1dC9PdXRwdXQKKyNkZWZpbmUgSU9DX0lPTU9ERV9JTlYgICAgICAgICAgMHgwMTAwMDAwMCAgLy8gSW52ZXJ0ZWQgSW5wdXQvT3V0cHV0CisjZGVmaW5lIElPQ19JT01PREVfT1BFTl9EUkFJTl9OT1JNQUwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwICAvLyBPcGVuIERyYWluLCBOb3JtYWwgSW5wdXQvT3V0cHV0CisjZGVmaW5lIElPQ19JT01PREVfT1BFTl9EUkFJTl9JTlYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwICAvLyBPcGVuIERyYWluLCBJbnZlcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnB1dC9PdXRwdXQKKyNkZWZpbmUgSU9DX0lPTU9ERV9PUEVOX1NSQ19OT1JNQUwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwICAvLyBPcGVuIFNvdXJjZSwgTm9ybWFsIElucHV0L091dHB1dAorI2RlZmluZSBJT0NfSU9NT0RFX09QRU5fU1JDX0lOViBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAgIC8vIE9wZW4gU291cmNlLCBJbnZlcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnB1dC9PdXRwdXQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZWRnZSBkZXRlY3Rpb24gb24gYW4gSU8KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIElPQ19OT19FREdFICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19GQUxMSU5HX0VER0UgICAgICAgIDB4MDAwMTAwMDAgIC8vIEVkZ2UgZGV0ZWN0aW9uIG9uIGZhbGxpbmcgZWRnZQorI2RlZmluZSBJT0NfUklTSU5HX0VER0UgICAgICAgICAweDAwMDIwMDAwICAvLyBFZGdlIGRldGVjdGlvbiBvbiByaXNpbmcgZWRnZQorI2RlZmluZSBJT0NfQk9USF9FREdFUyAgICAgICAgICAweDAwMDMwMDAwICAvLyBFZGdlIGRldGVjdGlvbiBvbiBib3RoIGVkZ2VzCisjZGVmaW5lIElPQ19JTlRfRU5BQkxFICAgICAgICAgIDB4MDAwNDAwMDAgIC8vIEVuYWJsZSBpbnRlcnJ1cHQgb24gZWRnZSBkZXRlY3QKKyNkZWZpbmUgSU9DX0lOVF9ESVNBQkxFICAgICAgICAgMHgwMDAwMDAwMCAgLy8gRGlzYWJsZSBpbnRlcnJ1cHQgb24gZWRnZSBkZXRlY3QKKyNkZWZpbmUgSU9DX0lOVF9NICAgICAgICAgICAgICAgMHgwMDA3MDAwMCAgLy8gSW50IGNvbmZpZyBtYXNrCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBiZSB1c2VkIHRvIHNldCBwdWxsIG9uIGFuIElPCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJT0NfTk9fSU9QVUxMICAgICAgICAgICAweDAwMDA2MDAwICAvLyBObyBJTyBwdWxsCisjZGVmaW5lIElPQ19JT1BVTExfVVAgICAgICAgICAgIDB4MDAwMDQwMDAgIC8vIFB1bGwgdXAKKyNkZWZpbmUgSU9DX0lPUFVMTF9ET1dOICAgICAgICAgMHgwMDAwMjAwMCAgLy8gUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT1BVTExfTSAgICAgICAgICAgIDB4MDAwMDYwMDAgIC8vIFB1bGwgY29uZmlnIG1hc2sKKyNkZWZpbmUgSU9DX0lPUFVMTF9NICAgICAgICAgICAgMHgwMDAwNjAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBkcml2ZSBzdHJlbmd0aCBvZiBhbiBJTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSU9DX0NVUlJFTlRfMk1BICAgICAgICAgMHgwMDAwMDAwMCAgLy8gMm1BIGRyaXZlIHN0cmVuZ3RoCisjZGVmaW5lIElPQ19DVVJSRU5UXzRNQSAgICAgICAgIDB4MDAwMDA0MDAgIC8vIDRtQSBkcml2ZSBzdHJlbmd0aAorI2RlZmluZSBJT0NfQ1VSUkVOVF84TUEgICAgICAgICAweDAwMDAwODAwICAvLyA0IG9yIDhtQSBkcml2ZSBzdHJlbmd0aAorCisjZGVmaW5lIElPQ19TVFJFTkdUSF9BVVRPICAgICAgIDB4MDAwMDAwMDAgIC8vIEF1dG9tYXRpYyBEcml2ZSBTdHJlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoMi80LzggbUEgQCBWVkRTKQorI2RlZmluZSBJT0NfU1RSRU5HVEhfTUFYICAgICAgICAweDAwMDAwMzAwICAvLyBNYXhpbXVtIERyaXZlIFN0cmVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICgyLzQvOCBtQSBAIDEuOFYpCisjZGVmaW5lIElPQ19TVFJFTkdUSF9NRUQgICAgICAgIDB4MDAwMDAyMDAgIC8vIE1lZGl1bSBEcml2ZSBTdHJlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoMi80LzggbUEgQCAyLjVWKQorI2RlZmluZSBJT0NfU1RSRU5HVEhfTUlOICAgICAgICAweDAwMDAwMTAwICAvLyBNaW5pbXVtIERyaXZlIFN0cmVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICgyLzQvOCBtQSBAIDMuM1YpCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3Igc3RhbmRhcmQgSU8gc2V0dXAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIElPQ19TVERfSU5QVVQgICAgICAgICAgIChJT0NfQ1VSUkVOVF8yTUEgfCBJT0NfU1RSRU5HVEhfQVVUTyB8ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DX05PX0lPUFVMTCB8IElPQ19TTEVXX0RJU0FCTEUgfCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ19IWVNUX0RJU0FCTEUgfCBJT0NfTk9fRURHRSB8ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0NfSU5UX0RJU0FCTEUgfCBJT0NfSU9NT0RFX05PUk1BTCB8ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DX05PX1dBS0VfVVAgfCBJT0NfSU5QVVRfRU5BQkxFICkKKyNkZWZpbmUgSU9DX1NURF9PVVRQVVQgICAgICAgICAgKElPQ19DVVJSRU5UXzJNQSB8IElPQ19TVFJFTkdUSF9BVVRPIHwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0NfTk9fSU9QVUxMIHwgSU9DX1NMRVdfRElTQUJMRSB8ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DX0hZU1RfRElTQUJMRSB8IElPQ19OT19FREdFIHwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ19JTlRfRElTQUJMRSB8IElPQ19JT01PREVfTk9STUFMIHwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0NfTk9fV0FLRV9VUCB8IElPQ19JTlBVVF9ESVNBQkxFICkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCB0aGUgY29uZmlndXJhdGlvbiBvZiBhbiBJTyBwb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBJTy4KKy8vIQorLy8hIFRoZSBcYyB1aTMySU9JZCBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIElPIHRvIGNvbmZpZ3VyZS4KKy8vIQorLy8hIFRoZSBcYyB1aTMyUG9ydElkIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggZnVuY3Rpb25hbCBwZXJpcGhlcmFsIHRvIGhvb2sKKy8vISB1cCB0byB0aGlzIElPLgorLy8hCisvLyEgVGhlIFxjIHVpMzJJT0NvbmZpZyBwYXJhbWV0ZXIgY29uc2lzdHMgb2YgYSBiaXR3aXNlIE9SJ2VkIHZhbHVlIG9mIGFsbAorLy8hIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBtb2RlcworLy8hCisvLyEgXG5vdGUgQWxsIElPIFBvcnRzIGFyZSB0aWVkIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBpbiBhIHN1YiBtb2R1bGUKKy8vISBleGNlcHQgZm9yIHRoZSBccmVmIElPQ19QT1JUX0FVWF9JTy4gRWFjaCBvZiB0aGUgSU9zIGluIHRoZSBBVVggZG9tYWluIGFyZQorLy8hIGhhcmRjb2RlZCB0byBhIHNwZWNpZmljIElPLiBXaGVuIGVuYWJsaW5nIG9uZSBvciBtb3JlIHBpbnMgZm9yIHRoZSBBVVgKKy8vISBkb21haW4sIHRoZXkgc2hvdWxkIGFsbCBiZSBjb25maWd1cmVkIHRvIHVzaW5nIFxyZWYgSU9DX1BPUlRfQVVYX0lPLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJT0lkIGRlZmluZXMgdGhlIElPIHRvIGNvbmZpZ3VyZSBhbmQgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIFxwYXJhbSB1aTMyUG9ydElkIHNlbGVjdHMgdGhlIGZ1bmN0aW9uYWwgSU8gcG9ydCB0byBjb25uZWN0LgorLy8hIFRoZSBhdmFpbGFibGUgSU8gcG9ydHMgYXJlOgorLy8hIC0gXHJlZiBJT0NfUE9SVF9HUElPCisvLyEgLSBccmVmIElPQ19QT1JUX0FPTl9DTEszMksKKy8vISAtIFxyZWYgSU9DX1BPUlRfQVVYX0lPCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kwX1JYCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kwX1RYCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kwX0ZTUworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1NJMF9DTEsKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX0kyQ19NU1NEQQorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfSTJDX01TU0NMCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9VQVJUMF9SWAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfVUFSVDBfVFgKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1VBUlQwX0NUUworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfVUFSVDBfUlRTCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UMAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDEKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQyCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UMworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDQKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQ1CisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UNgorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDcKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1NXVgorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1NJMV9SWAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1NJMV9UWAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1NJMV9GU1MKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1NTSTFfQ0xLCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9JMlNfQUQwCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9JMlNfQUQxCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9JMlNfV0NMSworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfSTJTX0JDTEsKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX0kyU19NQ0xLCisvLyEgLSBccmVmIElPQ19QT1JUX1JGQ19UUkMKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQTzAKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQTzEKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQTzIKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQTzMKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQSTAKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQSTEKKy8vISBccGFyYW0gdWkzMklPQ29uZmlnIGlzIHRoZSBJTyBjb25maWd1cmF0aW9uIGNvbnNpc3Rpbmcgb2YKKy8vISB0aGUgYml0d2lzZSBPUiBvZiBhbGwgY29uZmlndXJhdGlvbiBtb2RlczoKKy8vISAtIElucHV0L291dHB1dCBtb2RlOgorLy8hICAgLSBccmVmIElPQ19JT01PREVfTk9STUFMCisvLyEgICAtIFxyZWYgSU9DX0lPTU9ERV9JTlYKKy8vISAgIC0gXHJlZiBJT0NfSU9NT0RFX09QRU5fRFJBSU5fTk9STUFMCisvLyEgICAtIFxyZWYgSU9DX0lPTU9ERV9PUEVOX0RSQUlOX0lOVgorLy8hICAgLSBccmVmIElPQ19JT01PREVfT1BFTl9TUkNfTk9STUFMCisvLyEgICAtIFxyZWYgSU9DX0lPTU9ERV9PUEVOX1NSQ19JTlYKKy8vISAtIFdha2UgdXAgbW9kZToKKy8vISAgIC0gXHJlZiBJT0NfTk9fV0FLRV9VUAorLy8hICAgLSBccmVmIElPQ19XQUtFX09OX0xPVworLy8hICAgLSBccmVmIElPQ19XQUtFX09OX0hJR0gKKy8vISAtIEVkZ2UgZGV0ZWN0aW9uIG1vZGU6CisvLyEgICAtIFxyZWYgSU9DX05PX0VER0UKKy8vISAgIC0gXHJlZiBJT0NfRkFMTElOR19FREdFCisvLyEgICAtIFxyZWYgSU9DX1JJU0lOR19FREdFCisvLyEgICAtIFxyZWYgSU9DX0JPVEhfRURHRVMKKy8vISAtIEludGVycnVwdCBtb2RlIG9uIGVkZ2UgZGV0ZWN0aW9uOgorLy8hICAgLSBccmVmIElPQ19JTlRfRU5BQkxFCisvLyEgICAtIFxyZWYgSU9DX0lOVF9ESVNBQkxFCisvLyEgLSBQdWxsIG1vZGU6CisvLyEgICAtIFxyZWYgSU9DX05PX0lPUFVMTAorLy8hICAgLSBccmVmIElPQ19JT1BVTExfVVAKKy8vISAgIC0gXHJlZiBJT0NfSU9QVUxMX0RPV04KKy8vISAtIElucHV0IG1vZGU6CisvLyEgICAtIFxyZWYgSU9DX0lOUFVUX0VOQUJMRQorLy8hICAgLSBccmVmIElPQ19JTlBVVF9ESVNBQkxFCisvLyEgLSBIeXN0ZXJlc2lzIG1vZGU6CisvLyEgICAtIFxyZWYgSU9DX0hZU1RfRU5BQkxFCisvLyEgICAtIFxyZWYgSU9DX0hZU1RfRElTQUJMRQorLy8hIC0gU2xldyBjb250cm9sIG1vZGU6CisvLyEgICAtIFxyZWYgSU9DX1NMRVdfRU5BQkxFCisvLyEgICAtIFxyZWYgSU9DX1NMRVdfRElTQUJMRQorLy8hIC0gTWF4aW11bSBjdXJyZW50IG1vZGU6CisvLyEgICAtIFxyZWYgSU9DX0NVUlJFTlRfMk1BCisvLyEgICAtIFxyZWYgSU9DX0NVUlJFTlRfNE1BCisvLyEgICAtIFxyZWYgSU9DX0NVUlJFTlRfOE1BCisvLyEgLSBEcml2ZSBzdHJlbmd0aCBtb2RlOgorLy8hICAgLSBccmVmIElPQ19TVFJFTkdUSF9BVVRPCisvLyEgICAtIFxyZWYgSU9DX1NUUkVOR1RIX01BWAorLy8hICAgLSBccmVmIElPQ19TVFJFTkdUSF9NRUQKKy8vISAgIC0gXHJlZiBJT0NfU1RSRU5HVEhfTUlOCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJT0NQb3J0Q29uZmlndXJlU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMyUG9ydElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMySU9Db25maWcpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYW4gSU8gcG9ydC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgZ2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbiBJTy4KKy8vIQorLy8hIEVhY2ggSU8gcG9ydCBoYXMgYSBkZWRpY2F0ZWQgcmVnaXN0ZXIgZm9yIHNldHRpbmcgdXAgdGhlIElPLiBUaGlzIGZ1bmN0aW9uCisvLyEgcmV0dXJucyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2l2ZW4gSU8uCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgc2VsZWN0cyB0aGUgSU8gdG8gcmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIGZvci4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBJTyBQb3J0IGNvbmZpZ3VyYXRpb24uCisvLyEgU2VlIFxyZWYgSU9DUG9ydENvbmZpZ3VyZVNldCgpIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IElPQ1BvcnRDb25maWd1cmVHZXQodWludDMyX3QgdWkzMklPSWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgd2FrZS11cCBvbiBhbiBJTyBwb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgd2FrZS11cCBtb2RlIG9mIGFuIElPLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJT0lkIGRlZmluZXMgdGhlIElPIHRvIGNvbmZpZ3VyZS4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIFxwYXJhbSB1aTMySU9TaHV0ZG93biBlbmFibGVzIHdha2UtdXAgb24gTE9XL0hJR0ggYnkgdGhpcyBJTyBwb3J0LgorLy8hIC0gXHJlZiBJT0NfTk9fV0FLRV9VUAorLy8hIC0gXHJlZiBJT0NfV0FLRV9PTl9MT1cKKy8vISAtIFxyZWYgSU9DX1dBS0VfT05fSElHSAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DSU9TaHV0ZG93blNldCh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMklPU2h1dGRvd24pOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCB0aGUgSU8gTW9kZSBvZiBhbiBJTyBQb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgaW5wdXQvb3V0cHV0IG1vZGUgb2YgYW4gSU8uCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgZGVmaW5lcyB0aGUgSU8gdG8gY29uZmlndXJlLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgXHBhcmFtIHVpMzJJT01vZGUgc2V0cyB0aGUgcG9ydCBJTyBNb2RlLgorLy8hIC0gXHJlZiBJT0NfSU9NT0RFX05PUk1BTAorLy8hIC0gXHJlZiBJT0NfSU9NT0RFX0lOVgorLy8hIC0gXHJlZiBJT0NfSU9NT0RFX09QRU5fRFJBSU5fTk9STUFMCisvLyEgLSBccmVmIElPQ19JT01PREVfT1BFTl9EUkFJTl9JTlYKKy8vISAtIFxyZWYgSU9DX0lPTU9ERV9PUEVOX1NSQ19OT1JNQUwKKy8vISAtIFxyZWYgSU9DX0lPTU9ERV9PUEVOX1NSQ19JTlYKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ0lPTW9kZVNldCh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMklPTW9kZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHVwIGludGVycnVwdCBkZXRlY3Rpb24gb24gYW4gSU8gUG9ydC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXR1cCB0aGUgaW50ZXJydXB0IGRldGVjdGlvbiBvbiBhbiBJTy4KKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBkZWZpbmVzIHRoZSBJTyB0byBjb25maWd1cmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISBccGFyYW0gdWkzMkludCBlbmFibGVzL2Rpc2FibGVzIGludGVycnVwdCBnZW5lcmF0aW9uIG9uIHRoaXMgSU8gcG9ydC4KKy8vISAtIFxyZWYgSU9DX0lOVF9FTkFCTEUKKy8vISAtIFxyZWYgSU9DX0lOVF9ESVNBQkxFCisvLyEgXHBhcmFtIHVpMzJFZGdlRGV0IGVuYWJsZXMvZGlzYWJsZXMgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8gcG9ydC4KKy8vISAtIFxyZWYgSU9DX05PX0VER0UKKy8vISAtIFxyZWYgSU9DX0ZBTExJTkdfRURHRQorLy8hIC0gXHJlZiBJT0NfUklTSU5HX0VER0UKKy8vISAtIFxyZWYgSU9DX0JPVEhfRURHRVMKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ0lPSW50U2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySW50LAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkVkZ2VEZXQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgdGhlIHB1bGwgb24gYW4gSU8gcG9ydC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIHB1bGwgb24gYW4gSU8uCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgZGVmaW5lcyB0aGUgSU8gdG8gY29uZmlndXJlLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgXHBhcmFtIHVpMzJQdWxsIGVuYWJsZXMvZGlzYWJsZXMgcHVsbCBvbiB0aGlzIElPIHBvcnQuCisvLyEgLSBccmVmIElPQ19OT19JT1BVTEwKKy8vISAtIFxyZWYgSU9DX0lPUFVMTF9VUAorLy8hIC0gXHJlZiBJT0NfSU9QVUxMX0RPV04KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ0lPUG9ydFB1bGxTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJQdWxsKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIGh5c3RlcmVzaXMgb24gYW5kIElPIHBvcnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgaHlzdGVyZXNpcyBvbiBhbiBJTy4KKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBkZWZpbmVzIHRoZSBJTyB0byBjb25maWd1cmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISBccGFyYW0gdWkzMkh5c3RlcmVzaXMgZW5hYmxlL2Rpc2FibGUgaW5wdXQgaHlzdGVyZXNpcyBvbiBJTy4KKy8vISAtIFxyZWYgSU9DX0hZU1RfRU5BQkxFCisvLyEgLSBccmVmIElPQ19IWVNUX0RJU0FCTEUKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ0lPSHlzdFNldCh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMkh5c3RlcmVzaXMpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUvZGlzYWJsZSBJTyBwb3J0IGFzIGlucHV0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIGlucHV0IG9uIGFuIElPLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJT0lkIGRlZmluZXMgdGhlIElPIHRvIGNvbmZpZ3VyZS4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIFxwYXJhbSB1aTMySW5wdXQgZW5hYmxlL2Rpc2FibGUgaW5wdXQgb24gSU8uCisvLyEgLSBccmVmIElPQ19JTlBVVF9FTkFCTEUKKy8vISAtIFxyZWYgSU9DX0lOUFVUX0RJU0FCTEUKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ0lPSW5wdXRTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJJbnB1dCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZS9kaXNhYmxlIHRoZSBzbGV3IGNvbnRyb2wgb24gYW4gSU8gcG9ydC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSBzbGV3IGNvbnRyb2wgb24gYW4gSU8uCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgZGVmaW5lcyB0aGUgSU8gdG8gY29uZmlndXJlLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgXHBhcmFtIHVpMzJTbGV3RW5hYmxlIGVuYWJsZXMvZGlzYWJsZXMgdGhlIHNsZXcgY29udHJvbCBvbiBhbiBvdXRwdXQuCisvLyEgLSBccmVmIElPQ19TTEVXX0VOQUJMRQorLy8hIC0gXHJlZiBJT0NfU0xFV19ESVNBQkxFCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJT0NJT1NsZXdDdHJsU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMyU2xld0VuYWJsZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgZHJpdmUgc3RyZW5ndGggc291cmNlIGFuZCBjdXJyZW50IG1vZGUgb2YgYW4gSU8gcG9ydC4KKy8vIQorLy8hIFRoZSBkcml2ZSBzdHJlbmd0aCBvZiBhbiBJTyBpcyBjb25maWd1cmVkIGJ5IGEgY29tYmluYXRpb24gb2YgbXVsdGlwbGUgc2V0dGluZ3MKKy8vISBpbiBzZXZlcmFsIG1vZHVsZXMuIFRoZSBkcml2ZSBzdHJlbmd0aCBzb3VyY2UgXHRpX2NvZGV7dWkzMkRydlN0cmVuZ3RofSBpcyB1c2VkIGZvciBjb250cm9sbGluZworLy8hIGRyaXZlIHN0cmVuZ3RoIGF0IGRpZmZlcmVudCBzdXBwbHkgbGV2ZWxzLiBXaGVuIHNldCB0byBBVVRPIHRoZSBiYXR0ZXJ5IG1vbml0b3IKKy8vISAoQkFUTU9OKSBhZGp1c3RzIHRoZSBkcml2ZSBzdHJlbmd0aCB0byBjb21wZW5zYXRlIGZvciBjaGFuZ2VzIGluIHN1cHBseSB2b2x0YWdlCisvLyEgaW4gb3JkZXIgdG8ga2VlcCBJTyBjdXJyZW50IGNvbnN0YW50LiBBbHRlcm5hdGl2ZWx5LCBkcml2ZSBzdHJlbmd0aCBzb3VyY2UgY2FuCisvLyEgYmUgY29udHJvbGxlZCBtYW51YWxseSBieSBzZWxlY3Rpbmcgb25lIG9mIHRocmVlIG9wdGlvbnMgZWFjaCBvZiB3aGljaCBpcyBjb25maWd1cmFibGUKKy8vISBpbiB0aGUgQU9OIElPQyBieSBccmVmIEFPTklPQ0RyaXZlU3RyZW5ndGhTZXQoKS4KKy8vIQorLy8hIEVhY2ggZHJpdmUgc3RyZW5ndGggc291cmNlIGhhcyB0aHJlZSBjdXJyZW50IG1vZGVzOiBMb3ctQ3VycmVudCAoTEMpLCBIaWdoLUN1cnJlbnQgKEhDKSwgYW5kCisvLyEgRXh0ZW5kZWQtQ3VycmVudCAoRUMpLCBhbmQgdHlwaWNhbGx5IGRyaXZlIHN0cmVuZ3RoIGRvdWJsZXMgd2hlbiBzZWxlY3RpbmcgYSBoaWdoZXIgbW9kZS4KKy8vISBJLmUuIEVDID0gMiB4IEhDID0gNCB4IExDLgorLy8hCisvLyEgXG5vdGUgTm90IGFsbCBJT3Mgc3VwcG9ydCBFeHRlbmRlZC1DdXJyZW50IG1vZGUuIFNlZSBkYXRhc2hlZXQgZm9yIG1vcmUgaW5mb3JtYXRpb24KKy8vISBvbiB0aGUgc3BlY2lmaWMgZGV2aWNlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJT0lkIGRlZmluZXMgdGhlIElPIHRvIGNvbmZpZ3VyZS4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIFxwYXJhbSB1aTMySU9DdXJyZW50IHNlbGVjdHMgdGhlIElPIGN1cnJlbnQgbW9kZS4KKy8vISAtIFxyZWYgSU9DX0NVUlJFTlRfMk1BIDogTG93LUN1cnJlbnQgbW9kZS4gTWluIDIgbUEgd2hlbiBcdGlfY29kZXt1aTMyRHJ2U3RyZW5ndGh9IGlzIHNldCB0byBBVVRPLgorLy8hIC0gXHJlZiBJT0NfQ1VSUkVOVF80TUEgOiBIaWdoLUN1cnJlbnQgbW9kZS4gTWluIDQgbUEgd2hlbiBcdGlfY29kZXt1aTMyRHJ2U3RyZW5ndGh9IGlzIHNldCB0byBBVVRPLgorLy8hIC0gXHJlZiBJT0NfQ1VSUkVOVF84TUEgOiBFeHRlbmRlZC1DdXJyZW50IG1vZGUuIE1pbiA4IG1BIGZvciBkb3VibGUgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykgd2hlbiBcdGlfY29kZXt1aTMyRHJ2U3RyZW5ndGh9IGlzIHNldCB0byBBVVRPLgorLy8hIFxwYXJhbSB1aTMyRHJ2U3RyZW5ndGggc2V0cyB0aGUgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoZSBJTyBwb3J0LgorLy8hIC0gXHJlZiBJT0NfU1RSRU5HVEhfQVVUTyA6IEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZSAoZGVmYXVsdCkuCisvLyEgLSBccmVmIElPQ19TVFJFTkdUSF9NQVggOiBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCB1c2VkIGZvciBsb3cgc3VwcGx5IGxldmVscy4gQ29udHJvbGxlZCBieSBBT04gSU9DIChzZWUgXHJlZiBBT05JT0NEcml2ZVN0cmVuZ3RoU2V0KCkpLgorLy8hIC0gXHJlZiBJT0NfU1RSRU5HVEhfTUVEIDogTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCB1c2VkIGZvciBtZWRpdW0gc3VwcGx5IGxldmVscy4gQ29udHJvbGxlZCBieSBBT04gSU9DIChzZWUgXHJlZiBBT05JT0NEcml2ZVN0cmVuZ3RoU2V0KCkpLgorLy8hIC0gXHJlZiBJT0NfU1RSRU5HVEhfTUlOIDogTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgdXNlZCBmb3IgaGlnaCBzdXBwbHkgbGV2ZWxzLiBDb250cm9sbGVkIGJ5IEFPTiBJT0MgKHNlZSBccmVmIEFPTklPQ0RyaXZlU3RyZW5ndGhTZXQoKSkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJT0NJT0RydlN0cmVuZ3RoU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySU9DdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyRHJ2U3RyZW5ndGgpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXR1cCB0aGUgUG9ydCBJRCBmb3IgdGhpcyBJTy4KKy8vIQorLy8hIFRoZSBcYyB1aTMyUG9ydElkIHNwZWNpZmllcyB3aGljaCBmdW5jdGlvbmFsIHBlcmlwaGVyYWwgdG8gaG9vayB1cCB0byB0aGlzCisvLyEgSU8uCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgZGVmaW5lcyB0aGUgSU8gdG8gY29uZmlndXJlLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgXHBhcmFtIHVpMzJQb3J0SWQgc2VsZWN0cyB0aGUgcG9ydCB0byBtYXAgdG8gdGhlIElPLgorLy8hIC0gXHJlZiBJT0NfUE9SVF9HUElPCisvLyEgLSBccmVmIElPQ19QT1JUX0FPTl9DTEszMksKKy8vISAtIFxyZWYgSU9DX1BPUlRfQVVYX0lPCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kwX1JYCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kwX1RYCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kwX0ZTUworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1NJMF9DTEsKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX0kyQ19NU1NEQQorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfSTJDX01TU0NMCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9VQVJUMF9SWAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfVUFSVDBfVFgKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1VBUlQwX0NUUworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfVUFSVDBfUlRTCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UMAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDEKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQyCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UMworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDQKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQ1CisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UNgorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDcKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1NXVgorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1NJMV9SWAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1NJMV9UWAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1NJMV9GU1MKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1NTSTFfQ0xLCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9JMlNfQUQwCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9JMlNfQUQxCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9JMlNfV0NMSworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfSTJTX0JDTEsKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX0kyU19NQ0xLCisvLyEgLSBccmVmIElPQ19QT1JUX1JGQ19UUkMKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQTzAKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQTzEKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQTzIKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQTzMKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQSTAKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX0dQSTEKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ0lPUG9ydElkU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMyUG9ydElkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVnaXN0ZXIgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGFuIElPIGVkZ2UgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhY3R1YWwgcmVnaXN0ZXJpbmcgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLiBUaGlzCisvLyEgZnVuY3Rpb24gZW5hYmxlcyB0aGUgZ2xvYmFsIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXI7IHNwZWNpZmljCisvLyEgSU8gaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgdmlhIFxyZWYgSU9DSW50RW5hYmxlKCkuIEl0IGlzIHRoZSBpbnRlcnJ1cHQKKy8vISBoYW5kbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gY2xlYXIgdGhlIGludGVycnVwdCBzb3VyY2UuCisvLyEKKy8vISBccGFyYW0gcGZuSGFuZGxlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZQorLy8hIElPQyBpbnRlcnJ1cHQgb2NjdXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0lPQ0ludFJlZ2lzdGVyKHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSkKK3sKKyAgICAvLworICAgIC8vIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFJlZ2lzdGVyKElOVF9BT05fR1BJT19FREdFLCBwZm5IYW5kbGVyKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBJTyBlZGdlIGludGVycnVwdC4KKyAgICAvLworICAgIEludEVuYWJsZShJTlRfQU9OX0dQSU9fRURHRSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciBhIElPIGVkZ2UgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhY3R1YWwgdW5yZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICBJdAorLy8hIGNsZWFycyB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhbiBJTyBlZGdlIGludGVycnVwdCBvY2N1cnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSU9DSW50VW5yZWdpc3Rlcih2b2lkKQoreworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEludERpc2FibGUoSU5UX0FPTl9HUElPX0VER0UpOworCisgICAgLy8KKyAgICAvLyBVbnJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFVucmVnaXN0ZXIoSU5UX0FPTl9HUElPX0VER0UpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIGluZGl2aWR1YWwgSU8gZWRnZSBkZXRlY3QgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBpbmRpY2F0ZWQgSU8gZWRnZSBpbnRlcnJ1cHQgc291cmNlcy4gT25seSB0aGUKKy8vISBzb3VyY2VzIHRoYXQgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdDsKKy8vISBkaXNhYmxlZCBzb3VyY2VzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgaXMgdGhlIElPIHRvIGVuYWJsZSBlZGdlIGRldGVjdCBpbnRlcnJ1cHQgZm9yLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DSW50RW5hYmxlKHVpbnQzMl90IHVpMzJJT0lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgaW5kaXZpZHVhbCBJTyBlZGdlIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgaW5kaWNhdGVkIElPIGVkZ2UgaW50ZXJydXB0IHNvdXJjZS4gT25seSB0aGUKKy8vISBzb3VyY2VzIHRoYXQgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdDsKKy8vISBkaXNhYmxlZCBzb3VyY2VzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgaXMgdGhlIElPIGVkZ2UgaW50ZXJydXB0IHNvdXJjZSB0byBiZSBkaXNhYmxlZC4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DSW50RGlzYWJsZSh1aW50MzJfdCB1aTMySU9JZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyB0aGUgSU8gZWRnZSBpbnRlcnJ1cHQgc291cmNlLgorLy8hCisvLyEgVGhlIHNwZWNpZmllZCBJTyBlZGdlIGludGVycnVwdCBzb3VyY2UgaXMgY2xlYXJlZCwgc28gdGhhdCBpdCBubyBsb25nZXIKKy8vISBhc3NlcnRzLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBrZWVwIHRoZQorLy8hIGludGVycnVwdCBmcm9tIGJlaW5nIHJlY29nbml6ZWQgYWdhaW4gaW1tZWRpYXRlbHkgdXBvbiBleGl0LgorLy8hCisvLyEgXG5vdGUgRHVlIHRvIHdyaXRlIGJ1ZmZlcnMgYW5kIHN5bmNocm9uaXplcnMgaW4gdGhlIHN5c3RlbSBpdCBtYXkgdGFrZSBzZXZlcmFsCisvLyEgY2xvY2sgY3ljbGVzIGZyb20gYSByZWdpc3RlciB3cml0ZSBjbGVhcmluZyBhbiBldmVudCBpbiBhIG1vZHVsZSBhbmQgdW50aWwgdGhlCisvLyEgZXZlbnQgaXMgYWN0dWFsbHkgY2xlYXJlZCBpbiB0aGUgTlZJQyBvZiB0aGUgc3lzdGVtIENQVS4gSXQgaXMgcmVjb21tZW5kZWQgdG8KKy8vISBjbGVhciB0aGUgZXZlbnQgc291cmNlIGVhcmx5IGluIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpIHRvIGFsbG93CisvLyEgdGhlIGV2ZW50IGNsZWFyIHRvIHByb3BhZ2F0ZSB0byB0aGUgTlZJQyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUi4KKy8vISBBdCB0aGUgc2FtZSB0aW1lLCBhbiBlYXJseSBldmVudCBjbGVhciBhbGxvd3MgbmV3IGV2ZW50cyBvZiB0aGUgc2FtZSB0eXBlIHRvIGJlCisvLyEgcGVuZGVkIGluc3RlYWQgb2YgaWdub3JlZCBpZiB0aGUgZXZlbnQgaXMgY2xlYXJlZCBsYXRlciBpbiB0aGUgSVNSLgorLy8hIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcHJvZ3JhbW1lciB0byBtYWtlIHN1cmUgdGhhdCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkCisvLyEgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IgdG8gYXZvaWQgZmFsc2UgcmUtdHJpZ2dlcmluZyBvZiB0aGUgY2xlYXJlZCBldmVudC4KKy8vISBBIHNpbXBsZSwgYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IG9wdGltYWwsIHdheSBvZiBjbGVhcmluZyBhbiBldmVudCBiZWZvcmUKKy8vISByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIGlzOgorLy8hIC0jIFdyaXRlIHRvIGNsZWFyIGV2ZW50IChpbnRlcnJ1cHQgc291cmNlKS4gKGJ1ZmZlcmVkIHdyaXRlKQorLy8hIC0jIER1bW15IHJlYWQgZnJvbSB0aGUgZXZlbnQgc291cmNlIG1vZHVsZS4gKG1ha2luZyBzdXJlIHRoZSB3cml0ZSBoYXMgcHJvcGFnYXRlZCkKKy8vISAtIyBXYWl0IHR3byBzeXN0ZW0gQ1BVIGNsb2NrIGN5Y2xlcyAodXNlciBjb2RlIG9yIHR3byBOT1BzKS4gKGFsbG93aW5nIGNsZWFyZWQgZXZlbnQgdG8gcHJvcGFnYXRlIHRocm91Z2ggYW55IHN5bmNocm9uaXplcnMpCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgaXMgdGhlIElPIGNhdXNpbmcgdGhlIGludGVycnVwdC4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0lPQ0ludENsZWFyKHVpbnQzMl90IHVpMzJJT0lkKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHJlcXVlc3RlZCBpbnRlcnJ1cHQgc291cmNlIGJ5IGNsZWFyaW5nIHRoZSBldmVudC4KKyAgICAvLworICAgIEdQSU9fY2xlYXJFdmVudERpbyh1aTMySU9JZCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgSU8gaW50ZXJydXB0cy4KKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBpcyB0aGUgSU8gdG8gZ2V0IHRoZSBzdGF0dXMgZm9yLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0lPQ0ludFN0YXR1cyh1aW50MzJfdCB1aTMySU9JZCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMklPSWQgPD0gSU9JRF8zMSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgZXZlbnQgc3RhdHVzLgorICAgIC8vCisgICAgcmV0dXJuIChHUElPX2dldEV2ZW50RGlvKHVpMzJJT0lkKSk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0dXAgYW4gSU8gZm9yIHN0YW5kYXJkIEdQSU8gaW5wdXQuCisvLyEKKy8vISBTZXR1cCBhbiBJTyBmb3Igc3RhbmRhcmQgR1BJTyBpbnB1dCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbjoKKy8vISAtIFBvcnQgSUQ6CisvLyEgICAtIFxyZWYgSU9DX1BPUlRfR1BJTworLy8hIC0gQ29uZmlndXJhdGlvbjoKKy8vISAgIC0gXHJlZiBJT0NfQ1VSUkVOVF8yTUEKKy8vISAgIC0gXHJlZiBJT0NfU1RSRU5HVEhfQVVUTworLy8hICAgLSBccmVmIElPQ19OT19JT1BVTEwKKy8vISAgIC0gXHJlZiBJT0NfU0xFV19ESVNBQkxFCisvLyEgICAtIFxyZWYgSU9DX0hZU1RfRElTQUJMRQorLy8hICAgLSBccmVmIElPQ19OT19FREdFCisvLyEgICAtIFxyZWYgSU9DX0lOVF9ESVNBQkxFCisvLyEgICAtIFxyZWYgSU9DX0lPTU9ERV9OT1JNQUwKKy8vISAgIC0gXHJlZiBJT0NfTk9fV0FLRV9VUAorLy8hICAgLSBccmVmIElPQ19JTlBVVF9FTkFCTEUKKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBpcyB0aGUgSU8gdG8gc2V0dXAgZm9yIEdQSU8gaW5wdXQKKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DUGluVHlwZUdwaW9JbnB1dCh1aW50MzJfdCB1aTMySU9JZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHVwIGFuIElPIGZvciBzdGFuZGFyZCBHUElPIG91dHB1dC4KKy8vIQorLy8hIFNldHVwIGFuIElPIGZvciBzdGFuZGFyZCBHUElPIG91dHB1dCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbjoKKy8vISAtIFBvcnQgSUQ6CisvLyEgICAtIFxyZWYgSU9DX1BPUlRfR1BJTworLy8hIC0gQ29uZmlndXJhdGlvbjoKKy8vISAgIC0gXHJlZiBJT0NfQ1VSUkVOVF8yTUEKKy8vISAgIC0gXHJlZiBJT0NfU1RSRU5HVEhfQVVUTworLy8hICAgLSBccmVmIElPQ19OT19JT1BVTEwKKy8vISAgIC0gXHJlZiBJT0NfU0xFV19ESVNBQkxFCisvLyEgICAtIFxyZWYgSU9DX0hZU1RfRElTQUJMRQorLy8hICAgLSBccmVmIElPQ19OT19FREdFCisvLyEgICAtIFxyZWYgSU9DX0lOVF9ESVNBQkxFCisvLyEgICAtIFxyZWYgSU9DX0lPTU9ERV9OT1JNQUwKKy8vISAgIC0gXHJlZiBJT0NfTk9fV0FLRV9VUAorLy8hICAgLSBccmVmIElPQ19JTlBVVF9ESVNBQkxFCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgaXMgdGhlIElPIHRvIHNldHVwIGZvciBHUElPIG91dHB1dAorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJT0NQaW5UeXBlR3Bpb091dHB1dCh1aW50MzJfdCB1aTMySU9JZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSBhIHNldCBvZiBJT3MgZm9yIHN0YW5kYXJkIFVBUlQgcGVyaXBoZXJhbCBjb250cm9sLgorLy8hCisvLyEgVGhlIFVBUlQgcGlucyBtdXN0IGJlIHByb3Blcmx5IGNvbmZpZ3VyZWQgZm9yIHRoZSBVQVJUIHBlcmlwaGVyYWwgdG8KKy8vISBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24gZm9yCisvLyEgdGhvc2UgcGluKHMpLiBPdGhlciBjb25maWd1cmF0aW9ucyBtYXkgd29yayBhcyB3ZWxsIGRlcGVuZGluZyB1cG9uIHRoZQorLy8hIGJvYXJkIHNldHVwIChmb3IgZXhhbXBsZSwgdXNpbmcgdGhlIG9uLWNoaXAgcHVsbC11cHMpLgorLy8hCisvLyEgXG5vdGUgSWYgYSBVQVJUIHBpbiBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCwgdGhlbiB0aGUgcGFyYW1ldGVyIGluIHRoZQorLy8hIGZ1bmN0aW9uIHNob3VsZCBiZSBccmVmIElPSURfVU5VU0VELgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyUnggaXMgdGhlIElPIElkIG9mIHRoZSBJTyB0byB1c2UgYXMgVUFSVCBSZWNlaXZlLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgLSBccmVmIElPSURfVU5VU0VECisvLyEgXHBhcmFtIHVpMzJUeCBpcyB0aGUgSU8gSWQgb2YgdGhlIElPIHRvIHVzZSBhcyBVQVJUIFRyYW5zbWl0LgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgLSBccmVmIElPSURfVU5VU0VECisvLyEgXHBhcmFtIHVpMzJDdHMgaXMgdGhlIElPIElkIG9mIHRoZSBJTyB0byB1c2UgZm9yIFVBUlQgQ2xlYXIgdG8gc2VuZC4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIC0gXHJlZiBJT0lEX1VOVVNFRAorLy8hIFxwYXJhbSB1aTMyUnRzIGlzIHRoZSBJTyBJZCBvZiB0aGUgSU8gdG8gdXNlIGZvciBVQVJUIFJlcXVlc3QgdG8gc2VuZC4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIC0gXHJlZiBJT0lEX1VOVVNFRAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DUGluVHlwZVVhcnQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJUeCwgdWludDMyX3QgdWkzMkN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJSdHMpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgYSBzZXQgb2YgSU9zIGZvciBzdGFuZGFyZCBTU0kgcGVyaXBoZXJhbCBtYXN0ZXIgY29udHJvbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBTU0kgbW9kdWxlIHRvIGNvbm5lY3QgdG8gdGhlIElPcworLy8hIFxwYXJhbSB1aTMyUnggaXMgdGhlIElPIHRvIGNvbm5lY3QgdG8gdGhlIFNTSSBNSVNPIGxpbmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISAtIFxyZWYgSU9JRF9VTlVTRUQKKy8vISBccGFyYW0gdWkzMlR4IGlzIHRoZSBJTyB0byBjb25uZWN0IHRvIHRoZSBTU0kgTU9TSSBsaW5lLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgLSBccmVmIElPSURfVU5VU0VECisvLyEgXHBhcmFtIHVpMzJGc3MgaXMgdGhlIElPIHRvIGNvbm5lY3QgdG8gdGhlIFNTSSBGU1MgbGluZS4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIC0gXHJlZiBJT0lEX1VOVVNFRAorLy8hIFxwYXJhbSB1aTMyQ2xrIGlzIHRoZSBJTyB0byBjb25uZWN0IHRvIHRoZSBTU0kgQ2xvY2sgb3V0cHV0IGxpbmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISAtIFxyZWYgSU9JRF9VTlVTRUQKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ1BpblR5cGVTc2lNYXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlR4LCB1aW50MzJfdCB1aTMyRnNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2xrKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIGEgc2V0IG9mIElPcyBmb3Igc3RhbmRhcmQgU1NJIHBlcmlwaGVyYWwgc2xhdmUgY29udHJvbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBTU0kgbW9kdWxlIHRvIGNvbm5lY3QgdG8gdGhlIElPcworLy8hIFxwYXJhbSB1aTMyUnggaXMgdGhlIElPIHRvIGNvbm5lY3QgdG8gdGhlIFNTSSBNT1NJIGxpbmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISAtIFxyZWYgSU9JRF9VTlVTRUQKKy8vISBccGFyYW0gdWkzMlR4IGlzIHRoZSBJTyB0byBjb25uZWN0IHRvIHRoZSBTU0kgTUlTTyBsaW5lLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgLSBccmVmIElPSURfVU5VU0VECisvLyEgXHBhcmFtIHVpMzJGc3MgaXMgdGhlIElPIHRvIGNvbm5lY3QgdG8gdGhlIFNTSSBGU1MgbGluZS4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIC0gXHJlZiBJT0lEX1VOVVNFRAorLy8hIFxwYXJhbSB1aTMyQ2xrIGlzIHRoZSBJTyB0byBjb25uZWN0IHRvIHRoZSBTU0kgQ2xvY2sgaW5wdXQgbGluZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ1BpblR5cGVTc2lTbGF2ZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJ4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJUeCwgdWludDMyX3QgdWkzMkZzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2xrKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIGEgc2V0IG9mIElPcyBmb3Igc3RhbmRhcmQgSTJDIHBlcmlwaGVyYWwgY29udHJvbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgbW9kdWxlIHRvIGNvbm5lY3QgdG8gdGhlIElPcworLy8hIFxwYXJhbSB1aTMyRGF0YSBpcyB0aGUgSTJDIGRhdGEgbGluZQorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgLSBccmVmIElPSURfVU5VU0VECisvLyEgXHBhcmFtIHVpMzJDbGsgaXMgdGhlIEkyQyBpbnB1dCBjbG9jaworLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgLSBccmVmIElPSURfVU5VU0VECisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJT0NQaW5UeXBlSTJjKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNsayk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIGFuIElPIGZvciBBVVggY29udHJvbC4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSBBVVggdG8gY29udHJvbCBhIHNwZWNpZmljIElPLiBQbGVhc2Ugbm90ZSwgdGhhdAorLy8hIHdoZW4gdXNpbmcgQVVYIHRvIGNvbnRyb2wgdGhlIElPLCB0aGUgaW5wdXQvb3V0cHV0IGNvbnRyb2wgaW4gdGhlIElPQyBpcworLy8hIGJ5cGFzc2VkIGFuZCBjb21wbGV0ZWx5IGNvbnRyb2xsZWQgYnkgQVVYLCBzbyBlbmFibGluZyBvciBkaXNhYmxpbmcgaW5wdXQKKy8vISBpbiB0aGUgSU9DIGhhcyBubyBlZmZlY3QuCisvLyEKKy8vISBcbm90ZSBUaGUgSU9zIGF2YWlsYWJsZSBmb3IgQVVYIGNvbnRyb2wgY2FuIHZhcnkgZnJvbSBkZXZpY2UgdG8gZGV2aWNlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJT0lkIGlzIHRoZSBJTyB0byBzZXR1cCBmb3IgQVVYIHVzYWdlLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgLSBccmVmIElPSURfVU5VU0VECisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJT0NQaW5UeXBlQXV4KHVpbnQzMl90IHVpMzJJT0lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fSU9DUG9ydENvbmZpZ3VyZVNldAorICAgICAgICAjdW5kZWYgIElPQ1BvcnRDb25maWd1cmVTZXQKKyAgICAgICAgI2RlZmluZSBJT0NQb3J0Q29uZmlndXJlU2V0ICAgICAgICAgICAgIFJPTV9JT0NQb3J0Q29uZmlndXJlU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NQb3J0Q29uZmlndXJlR2V0CisgICAgICAgICN1bmRlZiAgSU9DUG9ydENvbmZpZ3VyZUdldAorICAgICAgICAjZGVmaW5lIElPQ1BvcnRDb25maWd1cmVHZXQgICAgICAgICAgICAgUk9NX0lPQ1BvcnRDb25maWd1cmVHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ0lPU2h1dGRvd25TZXQKKyAgICAgICAgI3VuZGVmICBJT0NJT1NodXRkb3duU2V0CisgICAgICAgICNkZWZpbmUgSU9DSU9TaHV0ZG93blNldCAgICAgICAgICAgICAgICBST01fSU9DSU9TaHV0ZG93blNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DSU9Nb2RlU2V0CisgICAgICAgICN1bmRlZiAgSU9DSU9Nb2RlU2V0CisgICAgICAgICNkZWZpbmUgSU9DSU9Nb2RlU2V0ICAgICAgICAgICAgICAgICAgICBST01fSU9DSU9Nb2RlU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NJT0ludFNldAorICAgICAgICAjdW5kZWYgIElPQ0lPSW50U2V0CisgICAgICAgICNkZWZpbmUgSU9DSU9JbnRTZXQgICAgICAgICAgICAgICAgICAgICBST01fSU9DSU9JbnRTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ0lPUG9ydFB1bGxTZXQKKyAgICAgICAgI3VuZGVmICBJT0NJT1BvcnRQdWxsU2V0CisgICAgICAgICNkZWZpbmUgSU9DSU9Qb3J0UHVsbFNldCAgICAgICAgICAgICAgICBST01fSU9DSU9Qb3J0UHVsbFNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DSU9IeXN0U2V0CisgICAgICAgICN1bmRlZiAgSU9DSU9IeXN0U2V0CisgICAgICAgICNkZWZpbmUgSU9DSU9IeXN0U2V0ICAgICAgICAgICAgICAgICAgICBST01fSU9DSU9IeXN0U2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NJT0lucHV0U2V0CisgICAgICAgICN1bmRlZiAgSU9DSU9JbnB1dFNldAorICAgICAgICAjZGVmaW5lIElPQ0lPSW5wdXRTZXQgICAgICAgICAgICAgICAgICAgUk9NX0lPQ0lPSW5wdXRTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ0lPU2xld0N0cmxTZXQKKyAgICAgICAgI3VuZGVmICBJT0NJT1NsZXdDdHJsU2V0CisgICAgICAgICNkZWZpbmUgSU9DSU9TbGV3Q3RybFNldCAgICAgICAgICAgICAgICBST01fSU9DSU9TbGV3Q3RybFNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DSU9EcnZTdHJlbmd0aFNldAorICAgICAgICAjdW5kZWYgIElPQ0lPRHJ2U3RyZW5ndGhTZXQKKyAgICAgICAgI2RlZmluZSBJT0NJT0RydlN0cmVuZ3RoU2V0ICAgICAgICAgICAgIFJPTV9JT0NJT0RydlN0cmVuZ3RoU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NJT1BvcnRJZFNldAorICAgICAgICAjdW5kZWYgIElPQ0lPUG9ydElkU2V0CisgICAgICAgICNkZWZpbmUgSU9DSU9Qb3J0SWRTZXQgICAgICAgICAgICAgICAgICBST01fSU9DSU9Qb3J0SWRTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ0ludEVuYWJsZQorICAgICAgICAjdW5kZWYgIElPQ0ludEVuYWJsZQorICAgICAgICAjZGVmaW5lIElPQ0ludEVuYWJsZSAgICAgICAgICAgICAgICAgICAgUk9NX0lPQ0ludEVuYWJsZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DSW50RGlzYWJsZQorICAgICAgICAjdW5kZWYgIElPQ0ludERpc2FibGUKKyAgICAgICAgI2RlZmluZSBJT0NJbnREaXNhYmxlICAgICAgICAgICAgICAgICAgIFJPTV9JT0NJbnREaXNhYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NQaW5UeXBlR3Bpb0lucHV0CisgICAgICAgICN1bmRlZiAgSU9DUGluVHlwZUdwaW9JbnB1dAorICAgICAgICAjZGVmaW5lIElPQ1BpblR5cGVHcGlvSW5wdXQgICAgICAgICAgICAgUk9NX0lPQ1BpblR5cGVHcGlvSW5wdXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ1BpblR5cGVHcGlvT3V0cHV0CisgICAgICAgICN1bmRlZiAgSU9DUGluVHlwZUdwaW9PdXRwdXQKKyAgICAgICAgI2RlZmluZSBJT0NQaW5UeXBlR3Bpb091dHB1dCAgICAgICAgICAgIFJPTV9JT0NQaW5UeXBlR3Bpb091dHB1dAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DUGluVHlwZVVhcnQKKyAgICAgICAgI3VuZGVmICBJT0NQaW5UeXBlVWFydAorICAgICAgICAjZGVmaW5lIElPQ1BpblR5cGVVYXJ0ICAgICAgICAgICAgICAgICAgUk9NX0lPQ1BpblR5cGVVYXJ0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NQaW5UeXBlU3NpTWFzdGVyCisgICAgICAgICN1bmRlZiAgSU9DUGluVHlwZVNzaU1hc3RlcgorICAgICAgICAjZGVmaW5lIElPQ1BpblR5cGVTc2lNYXN0ZXIgICAgICAgICAgICAgUk9NX0lPQ1BpblR5cGVTc2lNYXN0ZXIKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ1BpblR5cGVTc2lTbGF2ZQorICAgICAgICAjdW5kZWYgIElPQ1BpblR5cGVTc2lTbGF2ZQorICAgICAgICAjZGVmaW5lIElPQ1BpblR5cGVTc2lTbGF2ZSAgICAgICAgICAgICAgUk9NX0lPQ1BpblR5cGVTc2lTbGF2ZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DUGluVHlwZUkyYworICAgICAgICAjdW5kZWYgIElPQ1BpblR5cGVJMmMKKyAgICAgICAgI2RlZmluZSBJT0NQaW5UeXBlSTJjICAgICAgICAgICAgICAgICAgIFJPTV9JT0NQaW5UeXBlSTJjCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NQaW5UeXBlQXV4CisgICAgICAgICN1bmRlZiAgSU9DUGluVHlwZUF1eAorICAgICAgICAjZGVmaW5lIElPQ1BpblR5cGVBdXggICAgICAgICAgICAgICAgICAgUk9NX0lPQ1BpblR5cGVBdXgKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fSU9DX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pb2NfZG9jLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pb2NfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ1OGM0MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2lvY19kb2MuaApAQCAtMCwwICsxLDkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaW9jX2RvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0zMCAxMzowMzo1OSArMDIwMCAoV2VkLCAzMCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk3MQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vISBcYWRkdG9ncm91cCBpb2NfYXBpCisvLyEgQHsKKy8vISBcc2VjdGlvbiBzZWNfaW9jIEludHJvZHVjdGlvbgorLy8hCisvLyEgVGhlIElucHV0L091dHB1dCBDb250cm9sbGVyIChJT0MpIGNvbnRyb2xzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBwaW5zIChjYWxsZWQgRElPKS4KKy8vISBUaGUgSU9DIGNvbnNpc3RzIG9mIHR3byBBUElzOgorLy8hIC0gTUNVIElPQyBBUEkgc2VsZWN0cyB3aGljaCBwZXJpcGhlcmFsIG1vZHVsZSBpcyBjb25uZWN0ZWQgdG8gdGhlIGluZGl2aWR1YWwgRElPIGFuZCB0aHVzIGFsbG93ZWQgdG8gY29udHJvbCBpdC4KKy8vISAgIEl0IGFsc28gY29udHJvbHMgaW5kaXZpZHVhbCBkcml2ZSBzdHJlbmd0aCwgc2xldyByYXRlLCBwdWxsLXVwL3B1bGwtZG93biwgZWRnZSBkZXRlY3Rpb24sIGV0Yy4KKy8vISAtIEFPTiBJT0MgQVBJIGNvbnRyb2xzIHRoZSBnZW5lcmFsIGRyaXZlIHN0cmVuZ3RoIGRlZmluaXRpb25zLCBJTyBsYXRjaGVzLCBhbmQgaWYgdGhlIExGIGNsb2NrIGlzCisvLyEgICByb3V0ZWQgdG8gYSBESU8gZm9yIGV4dGVybmFsIHVzZS4KKy8vIQorLy8hIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBT04gSU9DIHNlZSB0aGUgW0FPTiBJT0MgQVBJXShccmVmIGFvbmlvY19hcGkpLgorLy8hCisvLyEgXG5vdGUgVGhlIG91dHB1dCBkcml2ZXIgb2YgYSBESU8gaXMgbm90IGNvbmZpZ3VyZWQgYnkgdGhlIElPQyBBUEkgKGV4Y2VwdCBmb3IgZHJpdmUgc3RyZW5ndGgpOyBpbnN0ZWFkLCBpdCBpcyBjb250cm9sbGVkIGJ5IHRoZQorLy8hIHBlcmlwaGVyYWwgbW9kdWxlIHdoaWNoIGlzIHNlbGVjdGVkIHRvIGNvbnRyb2wgdGhlIERJTy4KKy8vIQorLy8hIEEgRElPIGlzIGNvbnNpZGVyZWQgInNvZnR3YXJlIGNvbnRyb2xsZWQiIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIEdQSU8gY29udHJvbCB3aGljaCBhbGxvd3MgdGhlCisvLyEgU3lzdGVtIENQVSB0byBzZXQgdGhlIHZhbHVlIG9mIHRoZSBESU8gdmlhIHRoZSBbR1BJTyBBUEldKFxyZWYgZ3Bpb19hcGkpLiBBbHRlcm5hdGl2ZWx5LCBhIERJTworLy8hIGNhbiBiZSAiaGFyZHdhcmUgY29udHJvbGxlZCIgaWYgaXQgaXMgY29udHJvbGxlZCBieSBvdGhlciBtb2R1bGVzIHRoYW4gR1BJTy4KKy8vIQorLy8hIFxzZWN0aW9uIHNlY19pb2NfYXBpIEFQSQorLy8hCisvLyEgVGhlIEFQSSBmdW5jdGlvbnMgY2FuIGJlIGdyb3VwZWQgbGlrZSB0aGlzOgorLy8hCisvLyEgQ29uZmlndXJlIGFsbCBzZXR0aW5ncyBhdCB0aGUgc2FtZSB0aW1lOgorLy8hIC0gXHJlZiBJT0NQb3J0Q29uZmlndXJlU2V0KCkKKy8vISAtIFxyZWYgSU9DUG9ydENvbmZpZ3VyZUdldCgpCisvLyEKKy8vISBDb25maWd1cmUgaW5kaXZpZHVhbCBzZXR0aW5nczoKKy8vISAtIFxyZWYgSU9DSU9EcnZTdHJlbmd0aFNldCgpCisvLyEgLSBccmVmIElPQ0lPSHlzdFNldCgpCisvLyEgLSBccmVmIElPQ0lPSW5wdXRTZXQoKQorLy8hIC0gXHJlZiBJT0NJT0ludFNldCgpCisvLyEgLSBccmVmIElPQ0lPTW9kZVNldCgpCisvLyEgLSBccmVmIElPQ0lPUG9ydElkU2V0KCkKKy8vISAtIFxyZWYgSU9DSU9Qb3J0UHVsbFNldCgpCisvLyEgLSBccmVmIElPQ0lPU2h1dGRvd25TZXQoKQorLy8hIC0gXHJlZiBJT0NJT1NsZXdDdHJsU2V0KCkKKy8vIQorLy8hIEhhbmRsZSBlZGdlIGRldGVjdGlvbiBldmVudHM6CisvLyEgLSBccmVmIElPQ0ludEVuYWJsZSgpCisvLyEgLSBccmVmIElPQ0ludERpc2FibGUoKQorLy8hIC0gXHJlZiBJT0NJbnRDbGVhcigpCisvLyEgLSBccmVmIElPQ0ludFN0YXR1cygpCisvLyEgLSBccmVmIElPQ0ludFJlZ2lzdGVyKCkKKy8vISAtIFxyZWYgSU9DSW50VW5yZWdpc3RlcigpCisvLyEKKy8vISBDb25maWd1cmUgSU9DcyBmb3IgdHlwaWNhbCB1c2UgY2FzZXMgKGNhbiBhbHNvIGJlIHVzZWQgYXMgZXhhbXBsZSBjb2RlKToKKy8vISAtIFxyZWYgSU9DUGluVHlwZUF1eCgpCisvLyEgLSBccmVmIElPQ1BpblR5cGVHcGlvSW5wdXQoKQorLy8hIC0gXHJlZiBJT0NQaW5UeXBlR3Bpb091dHB1dCgpCisvLyEgLSBccmVmIElPQ1BpblR5cGVJMmMoKQorLy8hIC0gXHJlZiBJT0NQaW5UeXBlU3NpTWFzdGVyKCkKKy8vISAtIFxyZWYgSU9DUGluVHlwZVNzaVNsYXZlKCkKKy8vISAtIFxyZWYgSU9DUGluVHlwZVVhcnQoKQorLy8hCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL29zYy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvb3NjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2NWM3MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL29zYy5jCkBAIC0wLDAgKzEsNDUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgb3NjLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTI3IDEwOjA2OjEwICswMjAwIChGcmksIDI3IE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2NTIxCisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciBzZXR0aW5nIHVwIHRoZSBzeXN0ZW0gT3NjaWxsYXRvcnMKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfY2NmZy5oPgorI2luY2x1ZGUgPGluYy9od19mY2ZnMS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9hb25fYmF0bW9uLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl9ydGMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvb3NjLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBPU0NDbG9ja1NvdXJjZVNldAorICAgICNkZWZpbmUgT1NDQ2xvY2tTb3VyY2VTZXQgICAgICAgICAgICAgICBOT1JPTV9PU0NDbG9ja1NvdXJjZVNldAorICAgICN1bmRlZiAgT1NDQ2xvY2tTb3VyY2VHZXQKKyAgICAjZGVmaW5lIE9TQ0Nsb2NrU291cmNlR2V0ICAgICAgICAgICAgICAgTk9ST01fT1NDQ2xvY2tTb3VyY2VHZXQKKyAgICAjdW5kZWYgIE9TQ0hGX0dldFN0YXJ0dXBUaW1lCisgICAgI2RlZmluZSBPU0NIRl9HZXRTdGFydHVwVGltZSAgICAgICAgICAgIE5PUk9NX09TQ0hGX0dldFN0YXJ0dXBUaW1lCisgICAgI3VuZGVmICBPU0NIRl9UdXJuT25Yb3NjCisgICAgI2RlZmluZSBPU0NIRl9UdXJuT25Yb3NjICAgICAgICAgICAgICAgIE5PUk9NX09TQ0hGX1R1cm5Pblhvc2MKKyAgICAjdW5kZWYgIE9TQ0hGX0F0dGVtcHRUb1N3aXRjaFRvWG9zYworICAgICNkZWZpbmUgT1NDSEZfQXR0ZW1wdFRvU3dpdGNoVG9Yb3NjICAgICBOT1JPTV9PU0NIRl9BdHRlbXB0VG9Td2l0Y2hUb1hvc2MKKyAgICAjdW5kZWYgIE9TQ0hGX1N3aXRjaFRvUmNPc2NUdXJuT2ZmWG9zYworICAgICNkZWZpbmUgT1NDSEZfU3dpdGNoVG9SY09zY1R1cm5PZmZYb3NjICBOT1JPTV9PU0NIRl9Td2l0Y2hUb1JjT3NjVHVybk9mZlhvc2MKKyAgICAjdW5kZWYgIE9TQ0hGX0RlYnVnR2V0Q3J5c3RhbEFtcGxpdHVkZQorICAgICNkZWZpbmUgT1NDSEZfRGVidWdHZXRDcnlzdGFsQW1wbGl0dWRlICBOT1JPTV9PU0NIRl9EZWJ1Z0dldENyeXN0YWxBbXBsaXR1ZGUKKyAgICAjdW5kZWYgIE9TQ0hGX0RlYnVnR2V0RXhwZWN0ZWRBdmVyYWdlQ3J5c3RhbEFtcGxpdHVkZQorICAgICNkZWZpbmUgT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlIE5PUk9NX09TQ0hGX0RlYnVnR2V0RXhwZWN0ZWRBdmVyYWdlQ3J5c3RhbEFtcGxpdHVkZQorICAgICN1bmRlZiAgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRHZXQKKyAgICAjZGVmaW5lIE9TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0R2V0IE5PUk9NX09TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0R2V0CisgICAgI3VuZGVmICBPU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldFRvUkZDb3JlRm9ybWF0Q29udmVydAorICAgICNkZWZpbmUgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRUb1JGQ29yZUZvcm1hdENvbnZlcnQgTk9ST01fT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRUb1JGQ29yZUZvcm1hdENvbnZlcnQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gT1NDSEYgc3dpdGNoIHRpbWUgY2FsY3VsYXRvciBkZWZpbmVzIGFuZCBnbG9iYWxzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lIFJUQ19DVl9UT19NUyh4KSAoKCAgICAxMDAwICogKCB4ICkpID4+IDE2ICkKKyNkZWZpbmUgUlRDX0NWX1RPX1VTKHgpICgoIDEwMDAwMDAgKiAoIHggKSkgPj4gMTYgKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICB1aW50MzJfdCAgICBwcmV2aW91c1N0YXJ0dXBUaW1lSW5VcyA7CisgICB1aW50MzJfdCAgICB0aW1lWG9zY09mZl9DViAgICAgICAgICA7CisgICB1aW50MzJfdCAgICB0aW1lWG9zY09uX0NWICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICB0aW1lWG9zY1N0YWJsZV9DViAgICAgICA7CisgICBpbnQzMl90ICAgICB0ZW1wWG9zY09mZiAgICAgICAgICAgICA7Cit9IE9zY0hmR2xvYmFsc190OworCitzdGF0aWMgT3NjSGZHbG9iYWxzX3Qgb3NjSGZHbG9iYWxzOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyAgQ29uZmlndXJlIHRoZSBvc2NpbGxhdG9yIGlucHV0IHRvIHRoZSBhIHNvdXJjZSBjbG9jay4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitPU0NDbG9ja1NvdXJjZVNldCh1aW50MzJfdCB1aTMyU3JjQ2xrLCB1aW50MzJfdCB1aTMyT3NjKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlNyY0NsayAmIE9TQ19TUkNfQ0xLX0xGKSB8fAorICAgICAgICAgICAodWkzMlNyY0NsayAmIE9TQ19TUkNfQ0xLX01GKSB8fAorICAgICAgICAgICAodWkzMlNyY0NsayAmIE9TQ19TUkNfQ0xLX0hGKSk7CisgICAgQVNTRVJUKCh1aTMyT3NjID09IE9TQ19SQ09TQ19IRikgfHwKKyAgICAgICAgICAgKHVpMzJPc2MgPT0gT1NDX1JDT1NDX0xGKSB8fAorICAgICAgICAgICAodWkzMk9zYyA9PSBPU0NfWE9TQ19IRikgfHwKKyAgICAgICAgICAgKHVpMzJPc2MgPT0gT1NDX1hPU0NfTEYpKTsKKworICAgIC8vCisgICAgLy8gUmVxdWVzdCB0aGUgaGlnaCBmcmVxdWVuY3kgc291cmNlIGNsb2NrICh1c2luZyAyNCBNSHogWFRBTCkKKyAgICAvLworICAgIGlmKHVpMzJTcmNDbGsgJiBPU0NfU1JDX0NMS19IRikKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEVuYWJsZSB0aGUgSEYgWFRBTCBhcyBIRiBjbG9jayBzb3VyY2UKKyAgICAgICAgLy8KKyAgICAgICAgRERJMTZCaXRmaWVsZFdyaXRlKEFVWF9EREkwX09TQ19CQVNFLCBERElfMF9PU0NfT19DVEwwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0NUTDBfU0NMS19IRl9TUkNfU0VMX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQ1RMMF9TQ0xLX0hGX1NSQ19TRUxfUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpMzJPc2MpOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBtZWRpdW0gZnJlcXVlbmN5IHNvdXJjZSBjbG9jaworICAgIC8vCisgICAgaWYodWkzMlNyY0NsayAmIE9TQ19TUkNfQ0xLX01GKQorICAgIHsKKyAgICAgICAgRERJMTZCaXRmaWVsZFdyaXRlKEFVWF9EREkwX09TQ19CQVNFLCBERElfMF9PU0NfT19DVEwwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0NUTDBfU0NMS19NRl9TUkNfU0VMX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQ1RMMF9TQ0xLX01GX1NSQ19TRUxfUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpMzJPc2MpOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBsb3cgZnJlcXVlbmN5IHNvdXJjZSBjbG9jay4KKyAgICAvLworICAgIGlmKHVpMzJTcmNDbGsgJiBPU0NfU1JDX0NMS19MRikKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIENoYW5nZSB0aGUgY2xvY2sgc291cmNlLgorICAgICAgICAvLworICAgICAgICBEREkxNkJpdGZpZWxkV3JpdGUoQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX0NUTDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQ1RMMF9TQ0xLX0xGX1NSQ19TRUxfTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19DVEwwX1NDTEtfTEZfU1JDX1NFTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkzMk9zYyk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gIEdldCB0aGUgc291cmNlIGNsb2NrIHNldHRpbmdzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK09TQ0Nsb2NrU291cmNlR2V0KHVpbnQzMl90IHVpMzJTcmNDbGspCit7CisgICAgdWludDMyX3QgdWkzMkNsb2NrU291cmNlOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyU3JjQ2xrICYgT1NDX1NSQ19DTEtfTEYpIHx8CisgICAgICAgICAgICh1aTMyU3JjQ2xrICYgT1NDX1NSQ19DTEtfSEYpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBzb3VyY2UgZm9yIHRoZSBzZWxlY3RlZCBjbG9jay4KKyAgICAvLworICAgIGlmKHVpMzJTcmNDbGsgPT0gT1NDX1NSQ19DTEtfTEYpCisgICAgeworICAgICAgICB1aTMyQ2xvY2tTb3VyY2UgPSBEREkxNkJpdGZpZWxkUmVhZChBVVhfRERJMF9PU0NfQkFTRSwgRERJXzBfT1NDX09fU1RBVDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19TVEFUMF9TQ0xLX0xGX1NSQ19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfU1RBVDBfU0NMS19MRl9TUkNfUyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpMzJDbG9ja1NvdXJjZSA9IERESTE2Qml0ZmllbGRSZWFkKEFVWF9EREkwX09TQ19CQVNFLCBERElfMF9PU0NfT19TVEFUMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX1NUQVQwX1NDTEtfSEZfU1JDX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19TVEFUMF9TQ0xLX0hGX1NSQ19TKTsKKyAgICB9CisgICAgcmV0dXJuICh1aTMyQ2xvY2tTb3VyY2UpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmV0dXJucyBtYXhpbXVtIHN0YXJ0dXAgdGltZSAoaW4gbWljcm9zZWNvbmRzKSBvZiBYT1NDX0hGCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK09TQ0hGX0dldFN0YXJ0dXBUaW1lKCB1aW50MzJfdCB0aW1lVW50aWxXYWtldXBJbk1zICkKK3sKKyAgIHVpbnQzMl90IGRlbHRhVGltZVNpbmNlWG9zY09uSW5NcyAgIDsKKyAgIGludDMyX3QgIGRlbHRhVGVtcFNpbmNlWG9zY09uICAgICAgIDsKKyAgIHVpbnQzMl90IG5ld1N0YXJ0dXBUaW1lSW5VcyAgICAgICAgIDsKKworICAgZGVsdGFUaW1lU2luY2VYb3NjT25Jbk1zID0gUlRDX0NWX1RPX01TKCBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KCkgLSBvc2NIZkdsb2JhbHMudGltZVhvc2NPbl9DViApOworICAgZGVsdGFUZW1wU2luY2VYb3NjT24gICAgID0gQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDKCkgLSBvc2NIZkdsb2JhbHMudGVtcFhvc2NPZmY7CisKKyAgIGlmICggZGVsdGFUZW1wU2luY2VYb3NjT24gPCAwICkgeworICAgICAgZGVsdGFUZW1wU2luY2VYb3NjT24gPSAtZGVsdGFUZW1wU2luY2VYb3NjT247CisgICB9CisKKyAgIGlmICggICgoIHRpbWVVbnRpbFdha2V1cEluTXMgKyBkZWx0YVRpbWVTaW5jZVhvc2NPbkluTXMgKSAgICAgPiAzMDAwICkgfHwKKyAgICAgICAgICggZGVsdGFUZW1wU2luY2VYb3NjT24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAgICA1ICkgfHwKKyAgICAgICAgICggb3NjSGZHbG9iYWxzLnRpbWVYb3NjU3RhYmxlX0NWIDwgb3NjSGZHbG9iYWxzLnRpbWVYb3NjT25fQ1YgICkgfHwKKyAgICAgICAgICggb3NjSGZHbG9iYWxzLnByZXZpb3VzU3RhcnR1cFRpbWVJblVzICAgICAgICAgICAgICAgICAgPT0gICAwICkgICAgKQorICAgeworICAgICAgbmV3U3RhcnR1cFRpbWVJblVzID0gMjAwMDsKKyAgICAgIGlmICgoIEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fU0laRV9BTkRfRElTX0ZMQUdTICkgJiBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfWE9TQ19PVlJfTSApID09IDAgKSB7CisgICAgICAgICBuZXdTdGFydHVwVGltZUluVXMgPSAoKCBIV1JFRyggQ0NGR19CQVNFICsgQ0NGR19PX01PREVfQ09ORl8xICkgJgorICAgICAgICAgICAgQ0NGR19NT0RFX0NPTkZfMV9YT1NDX01BWF9TVEFSVF9NICkgPj4KKyAgICAgICAgICAgIENDRkdfTU9ERV9DT05GXzFfWE9TQ19NQVhfU1RBUlRfUyApICogMTI1OworICAgICAgICAgICAgLy8gTm90ZTogQ0NGRyBzdGFydHVwIHRpbWUgaXMgImluIHVuaXRzIG9mIDEwMHVzIiBhZGRpbmcgMjUlIG1hcmdpbiByZXN1bHRzIGluICoxMjUKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBuZXdTdGFydHVwVGltZUluVXMgPSBSVENfQ1ZfVE9fVVMoIG9zY0hmR2xvYmFscy50aW1lWG9zY1N0YWJsZV9DViAtIG9zY0hmR2xvYmFscy50aW1lWG9zY09uX0NWICk7CisgICAgICBuZXdTdGFydHVwVGltZUluVXMgKz0gKCBuZXdTdGFydHVwVGltZUluVXMgPj4gMiApOyAvLyBBZGQgMjUgcGVyY2VudCBtYXJnaW4KKyAgICAgIGlmICggbmV3U3RhcnR1cFRpbWVJblVzIDwgb3NjSGZHbG9iYWxzLnByZXZpb3VzU3RhcnR1cFRpbWVJblVzICkgeworICAgICAgICAgbmV3U3RhcnR1cFRpbWVJblVzID0gb3NjSGZHbG9iYWxzLnByZXZpb3VzU3RhcnR1cFRpbWVJblVzOworICAgICAgfQorICAgfQorCisgICBpZiAoIG5ld1N0YXJ0dXBUaW1lSW5VcyA8IDIwMCApIHsKKyAgICAgIG5ld1N0YXJ0dXBUaW1lSW5VcyA9IDIwMDsKKyAgIH0KKyAgIGlmICggbmV3U3RhcnR1cFRpbWVJblVzID4gNDAwMCApIHsKKyAgICAgIG5ld1N0YXJ0dXBUaW1lSW5VcyA9IDQwMDA7CisgICB9CisgICByZXR1cm4gKCBuZXdTdGFydHVwVGltZUluVXMgKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVHVybnMgb24gWE9TQ19IRiAoYnV0IHdpdGhvdXQgc3dpdGNoaW5nIHRvIFhPU0NfSEYpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorT1NDSEZfVHVybk9uWG9zYyggdm9pZCApCit7CisgICBPU0NDbG9ja1NvdXJjZVNldCggT1NDX1NSQ19DTEtfSEYgfCBPU0NfU1JDX0NMS19NRiwgT1NDX1hPU0NfSEYgKTsKKyAgIG9zY0hmR2xvYmFscy50aW1lWG9zY09uX0NWICA9IEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3dpdGNoIHRvIFhPU0NfSEYgaWYgWE9TQ19IRiBpcyByZWFkeS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitib29sCitPU0NIRl9BdHRlbXB0VG9Td2l0Y2hUb1hvc2MoIHZvaWQgKQoreworICAgdWludDMyX3Qgc3RhcnR1cFRpbWVJblVzOworICAgdWludDMyX3QgcHJldkxpbW1pdDI1SW5VczsKKworICAgaWYgKCBPU0NDbG9ja1NvdXJjZUdldCggT1NDX1NSQ19DTEtfSEYgKSA9PSBPU0NfWE9TQ19IRiApIHsKKyAgICAgIC8vIEFscmVhZHkgb24gWE9TQyAtIG5vdGhpbmcgdG8gZG8KKyAgICAgIHJldHVybiAoIDEgKTsKKyAgIH0KKyAgIGlmICggT1NDSGZTb3VyY2VSZWFkeSgpKSB7CisgICAgICBPU0NIZlNvdXJjZVN3aXRjaCgpOworCisgICAgICAvLworICAgICAgLy8gU3RvcmUgc3RhcnR1cCB0aW1lLCBidXQgbGltaXQgdG8gMjUgcGVyY2VudCByZWR1Y3Rpb24gZWFjaCB0aW1lLgorICAgICAgLy8KKyAgICAgIG9zY0hmR2xvYmFscy50aW1lWG9zY1N0YWJsZV9DViAgPSBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KCk7CisgICAgICBzdGFydHVwVGltZUluVXMgICA9IFJUQ19DVl9UT19VUyggb3NjSGZHbG9iYWxzLnRpbWVYb3NjU3RhYmxlX0NWIC0gb3NjSGZHbG9iYWxzLnRpbWVYb3NjT25fQ1YgKTsKKyAgICAgIHByZXZMaW1taXQyNUluVXMgID0gb3NjSGZHbG9iYWxzLnByZXZpb3VzU3RhcnR1cFRpbWVJblVzOworICAgICAgcHJldkxpbW1pdDI1SW5VcyAtPSAoIHByZXZMaW1taXQyNUluVXMgPj4gMiApOyAvLyAyNSBwZXJjZW50IG1hcmdpbgorICAgICAgb3NjSGZHbG9iYWxzLnByZXZpb3VzU3RhcnR1cFRpbWVJblVzID0gc3RhcnR1cFRpbWVJblVzOworICAgICAgaWYgKCBwcmV2TGltbWl0MjVJblVzID4gc3RhcnR1cFRpbWVJblVzICkgeworICAgICAgICAgb3NjSGZHbG9iYWxzLnByZXZpb3VzU3RhcnR1cFRpbWVJblVzID0gcHJldkxpbW1pdDI1SW5VczsKKyAgICAgIH0KKyAgICAgIHJldHVybiAoIDEgKTsKKyAgIH0KKyAgIHJldHVybiAoIDAgKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3dpdGNoIHRvIFJDT1NDX0hGIGFuZCB0dXJuIG9mZiBYT1NDX0hGCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorT1NDSEZfU3dpdGNoVG9SY09zY1R1cm5PZmZYb3NjKCB2b2lkICkKK3sKKyAgIC8vCisgICAvLyBTZXQgU0NMS19IRiBhbmQgU0NMS19NRiB0byBSQ09TQ19IRiB3aXRob3V0IGNoZWNraW5nCisgICAvLyBEb2luZyB0aGlzIGFueXdheSB0byBrZWVwIEhGIGFuZCBNRiBpbiBzeW5jCisgICAvLworICAgT1NDQ2xvY2tTb3VyY2VTZXQoIE9TQ19TUkNfQ0xLX0hGIHwgT1NDX1NSQ19DTEtfTUYsIE9TQ19SQ09TQ19IRiApOworCisgICAvLworICAgLy8gRG8gdGhlIHN3aXRjaGluZyBpZiBub3QgYWxyZWFkeSBydW5uaW5nIG9uIFJDT1NDX0hGCisgICAvLworICAgaWYgKCBPU0NDbG9ja1NvdXJjZUdldCggT1NDX1NSQ19DTEtfSEYgKSAhPSBPU0NfUkNPU0NfSEYgKSB7CisgICAgICBPU0NIZlNvdXJjZVN3aXRjaCgpOworICAgfQorCisgICBvc2NIZkdsb2JhbHMudGltZVhvc2NPZmZfQ1YgID0gQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldCgpOworICAgb3NjSGZHbG9iYWxzLnRlbXBYb3NjT2ZmICAgICA9IEFPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQygpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ2FsY3VsYXRlIHRoZSB0ZW1wZXJhdHVyZSBkZXBlbmRlbnQgcmVsYXRpdmUgZnJlcXVlbmN5IG9mZnNldCBvZiBIUE9TQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDMyX3QKK09TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0R2V0KCBpbnQzMl90IHRlbXBEZWdDICkKK3sKKyAgIC8vIEVzdGltYXRlIEhQT1NDIGZyZXF1ZW5jeSwgdXNpbmcgdGVtcGVyYXR1cmUgYW5kIGN1cnZlIGZpdHRpbmcgcGFyYW1ldGVycworICAgdWludDMyX3QgZml0UGFyYW1zID0gSFdSRUcoRkNGRzFfQkFTRSArIEZDRkcxX09fRlJFUV9PRkZTRVQpOworICAgLy8gRXh0cmFjdCB0aGUgUDAsUDEsUDIgcGFyYW1zLCBhbmQgc2lnbiBleHRlbmQgdGhlbSB2aWEgc2hpZnRpbmcgdXAvZG93bgorICAgaW50MzJfdCBwYXJhbVAwID0gKCgoKGludDMyX3QpIGZpdFBhcmFtcykgPDwgKDMyIC0gRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMF9XIC0gRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMF9TKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICgzMiAtIEZDRkcxX0ZSRVFfT0ZGU0VUX0hQT1NDX0NPTVBfUDBfVykpOworICAgaW50MzJfdCBwYXJhbVAxID0gKCgoKGludDMyX3QpIGZpdFBhcmFtcykgPDwgKDMyIC0gRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMV9XIC0gRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMV9TKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICgzMiAtIEZDRkcxX0ZSRVFfT0ZGU0VUX0hQT1NDX0NPTVBfUDFfVykpOworICAgaW50MzJfdCBwYXJhbVAyID0gKCgoKGludDMyX3QpIGZpdFBhcmFtcykgPDwgKDMyIC0gRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMl9XIC0gRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMl9TKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICgzMiAtIEZDRkcxX0ZSRVFfT0ZGU0VUX0hQT1NDX0NPTVBfUDJfVykpOworICAgaW50MzJfdCBwYXJhbVAzID0gKCgoKGludDMyX3QpIEhXUkVHKEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX01JU0NfQ09ORl8yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICgzMiAtIEZDRkcxX01JU0NfQ09ORl8yX0hQT1NDX0NPTVBfUDNfVyAtIEZDRkcxX01JU0NfQ09ORl8yX0hQT1NDX0NPTVBfUDNfUykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAoMzIgLSBGQ0ZHMV9NSVNDX0NPTkZfMl9IUE9TQ19DT01QX1AzX1cpKTsKKworICAgLy8gTm93IHdlIGNhbiBmaW5kIHRoZSBIUE9TQyBmcmVxIG9mZnNldCwgZ2l2ZW4gYXMgYSBzaWduZWQgdmFyaWFibGUgZCwgZXhwcmVzc2VkIGJ5OgorICAgLy8KKyAgIC8vICAgIEZfSFBPU0MgPSBGX25vbSAqICgxICsgZC8oMl4yMikpICAgICwgd2hlcmU6IEZfSFBPU0MgPSBIUE9TQyBmcmVxdWVuY3kKKyAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZfbm9tID0gbm9taW5hbCBjbG9jayBzb3VyY2UgZnJlcXVlbmN5IChlLmcuIDQ4LjAwMCBNSHopCisgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gZGVzY3JpYmVzIHJlbGF0aXZlIGZyZXEgb2Zmc2V0CisKKyAgIC8vIFdlIGNhbiBlc3RpbWF0ZSB0aGUgZCB2YXJpYWJsZSwgdXNpbmcgdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIHBhcmFtZXRlcnM6CisgICAvLworICAgLy8gICAgZCA9IFAwICsgUDEqKHQgLSBUMCkgKyBQMioodCAtIFQwKV4yICsgUDMqKHQgLSBUMCleMywgd2hlcmU6IFAwLFAxLFAyLFAzIGFyZSBjdXJ2ZSBmaXR0aW5nIHBhcmFtZXRlcnMgZnJvbSBGQ0ZHMQorICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGN1cnJlbnQgdGVtcGVyYXR1cmUgKGZyb20gdGVtcCBzZW5zb3IpIGluIGRlZyBDCisgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUMCA9IDI3IGRlZyBDIChmaXhlZCB0ZW1wZXJhdHVyZSBjb25zdGFudCkKKyAgIGludDMyX3QgdGVtcERlbHRhID0gKHRlbXBEZWdDIC0gMjcpOworICAgaW50MzJfdCB0ZW1wRGVsdGFYMiA9IHRlbXBEZWx0YSAqIHRlbXBEZWx0YTsKKyAgIGludDMyX3QgZCA9IHBhcmFtUDAgKyAoKHRlbXBEZWx0YSpwYXJhbVAxKT4+MykgKyAoKHRlbXBEZWx0YVgyKnBhcmFtUDIpPj4xMCkgKyAoKHRlbXBEZWx0YVgyKnRlbXBEZWx0YSpwYXJhbVAzKT4+MTgpOworCisgICByZXR1cm4gKCBkICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDb252ZXJ0cyB0aGUgcmVsYXRpdmUgZnJlcXVlbmN5IG9mZnNldCBvZiBIUE9TQyB0byB0aGUgUkYgQ29yZSBwYXJhbWV0ZXIgZm9ybWF0LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDE2X3QKK09TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0VG9SRkNvcmVGb3JtYXRDb252ZXJ0KCBpbnQzMl90IEhQT1NDX1JlbEZyZXFPZmZzZXQgKQoreworICAgLy8gVGhlIGlucHV0IGFyZ3VtZW50LCBoZXJlYnkgcmVmZXJyZWQgdG8gc2ltcGx5IGFzICJkIiwgZGVzY3JpYmVzIHRoZSBmcmVxdWVuY3kgb2Zmc2V0CisgICAvLyBvZiB0aGUgSFBPU0MgcmVsYXRpdmUgdG8gdGhlIG5vbWluYWwgZnJlcXVlbmN5IGluIHRoaXMgd2F5OgorICAgLy8KKyAgIC8vICAgIEZfSFBPU0MgPSBGX25vbSAqICgxICsgZC8oMl4yMikpCisgICAvLworICAgLy8gQnV0IGZvciB1c2UgYnkgdGhlIHJhZGlvLCB0byBjb21wZW5zYXRlIHRoZSBmcmVxdWVuY3kgZXJyb3IsIHdlIG5lZWQgdG8gZmluZCB0aGUKKyAgIC8vIGZyZXF1ZW5jeSBvZmZzZXQgInJmY0ZyZXFPZmZzZXQiIGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgICAvLworICAgLy8gICAgRl9ub20gPSBGX0hQT1NDICogKDEgKyByZkNvcmVGcmVxT2Zmc2V0LygyXjIyKSkKKyAgIC8vCisgICAvLyBUbyBkZXJpdmUgInJmQ29yZUZyZXFPZmZzZXQiIGZyb20gImQiIHdlIGNvbWJpbmUgdGhlIHR3byBhYm92ZSBlcXVhdGlvbnMgYW5kIGdldDoKKyAgIC8vCisgICAvLyAgICAoMSArIHJmQ29yZUZyZXFPZmZzZXQvKDJeMjIpKSA9ICgxICsgZC8oMl4yMikpXi0xCisgICAvLworICAgLy8gV2hpY2ggY2FuIGJlIHJld3JpdHRlbiBpbnRvOgorICAgLy8KKyAgIC8vICAgIHJmQ29yZUZyZXFPZmZzZXQgPSAtZCooMl4yMikgLyAoKDJeMjIpICsgZCkKKyAgIC8vCisgICAvLyAgICAgICAgICAgICAgID0gLWQgKiBbIDEgLyAoMSArIGQvKDJeMjIpKSBdCisgICAvLworICAgLy8gVG8gYXZvaWQgZG9pbmcgYSA2NC1iaXQgZGl2aXNpb24gZHVlIHRvIHRoZSAoMSArIGQvKDJeMjIpKV4tMSBleHByZXNzaW9uLAorICAgLy8gd2UgY2FuIHVzZSBUYXlsb3Igc2VyaWVzIChNYWNsYXVyaW4gc2VyaWVzKSB0byBhcHByb3hpbWF0ZSBpdDoKKyAgIC8vCisgICAvLyAgICAgICAxIC8gKDEgLSB4KSB+PSAxICsgeCArIHheMiArIHheMyArIHheNCArIC4uLiBldGMgICAgICAoTWFjbGF1cmluIHNlcmllcykKKyAgIC8vCisgICAvLyBJbiBvdXIgY2FzZSwgd2UgaGF2ZSB4ID0gLSBkLygyXjIyKSwgYW5kIHdlIG9ubHkgaW5jbHVkZSB1cCB0byB0aGUgZmlyc3QKKyAgIC8vIG9yZGVyIHRlcm0gb2YgdGhlIHNlcmllcywgYXMgdGhlIHNlY29uZCBvcmRlciB0ZXJtICgoZF4yKS8oMl40NCkpIGlzIHZlcnkgc21hbGw6CisgICAvLworICAgLy8gICAgICAgZnJlcUVycm9yIH49IC1kICsgZF4yLygyXjIyKSAgICgrIHNtYWxsIGFwcHJveGltYXRpb24gZXJyb3IpCisgICAvLworICAgLy8gVGhlIGFwcHJveGltYXRpb24gZXJyb3IgaXMgbmVnbGlnaWJsZSBmb3Igb3VyIHVzZS4KKworICAgaW50MzJfdCByZkNvcmVGcmVxT2Zmc2V0ID0gLUhQT1NDX1JlbEZyZXFPZmZzZXQgKyAoKCBIUE9TQ19SZWxGcmVxT2Zmc2V0ICogSFBPU0NfUmVsRnJlcU9mZnNldCApID4+IDIyICk7CisKKyAgIHJldHVybiAoIHJmQ29yZUZyZXFPZmZzZXQgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEdldCBjcnlzdGFsIGFtcGxpdHVkZSAoYXNzdW1pbmcgY3J5c3RhbCBpcyBydW5uaW5nKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorT1NDSEZfRGVidWdHZXRDcnlzdGFsQW1wbGl0dWRlKCB2b2lkICkKK3sKKyAgIHVpbnQzMl90IG9zY0NmZ1JlZ0NvcHkgIDsKKyAgIHVpbnQzMl90IHN0YXJ0VGltZSAgICAgIDsKKyAgIHVpbnQzMl90IGRlbHRhVGltZSAgICAgIDsKKyAgIHVpbnQzMl90IGFtcFZhbHVlICAgICAgIDsKKworICAgLy8KKyAgIC8vIFRoZSBzcGVjaWZpZWQgbWV0aG9kIGlzIGFzIGZvbGxvd3M6CisgICAvLyAxLiBTZXQgbWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIG9zY2lsbGF0b3IgYW1wbGl0dWRlIGNhbGlicmF0aW9ucy4KKyAgIC8vICAgIChEb25lIGJ5IHNldHRpbmcgUEVSX009MCBhbmQgUEVSX0U9MSkKKyAgIC8vIDIuIFdhaXQgYXBwcm94aW1hdGVseSA0IG1pbGxpc2Vjb25kcyBpbiBvcmRlciB0byBtZWFzdXJlIG92ZXIgYQorICAgLy8gICAgbW9kZXJhdGVseSBsYXJnZSBudW1iZXIgb2YgY2FsaWJyYXRpb25zLgorICAgLy8gMy4gUmVhZCBvdXQgdGhlIGNyeXN0YWwgYW1wbGl0dWRlIHZhbHVlIGZyb20gdGhlIHBlZWsgZGV0ZWN0b3IuCisgICAvLyA0LiBSZXN0b3JlIG9yaWdpbmFsIG9zY2lsbGF0b3IgYW1wbGl0dWRlIGNhbGlicmF0aW9ucyBpbnRlcnZhbC4KKyAgIC8vIDUuIFJldHVybiBjcnlzdGFsIGFtcGxpdHVkZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gbWlsbGl2b2x0LgorICAgLy8KKyAgIG9zY0NmZ1JlZ0NvcHkgPSBIV1JFRyggQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX09TQ0NGRyApOworICAgSFdSRUcoIEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19PU0NDRkcgKSA9ICggMSA8PCBBT05fV1VDX09TQ0NGR19QRVJfRV9TICk7CisgICBzdGFydFRpbWUgPSBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KCk7CisgICBkbyB7CisgICAgICBkZWx0YVRpbWUgPSBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KCkgLSBzdGFydFRpbWU7CisgICB9IHdoaWxlICggZGVsdGFUaW1lIDwgKCh1aW50MzJfdCkoIDAuMDA0ICogRkFDVE9SX1NFQ19UT19DT01QX1ZBTF9GT1JNQVQgKSkpOworICAgYW1wVmFsdWUgPSAoIEhXUkVHKCBBVVhfRERJMF9PU0NfQkFTRSArIERESV8wX09TQ19PX1NUQVQxICkgJgorICAgICAgRERJXzBfT1NDX1NUQVQxX0hQTV9VUERBVEVfQU1QX00gKSA+PgorICAgICAgRERJXzBfT1NDX1NUQVQxX0hQTV9VUERBVEVfQU1QX1MgOworICAgSFdSRUcoIEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19PU0NDRkcgKSA9IG9zY0NmZ1JlZ0NvcHk7CisKKyAgIHJldHVybiAoIGFtcFZhbHVlICogMTUgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEdldCB0aGUgZXhwZWN0ZWQgYXZlcmFnZSBjcnlzdGFsIGFtcGxpdHVkZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlKCB2b2lkICkKK3sKKyAgIHVpbnQzMl90IGFtcENvbXBUaDEgICAgOworICAgdWludDMyX3QgaGlnaFRocmVzaG9sZCA7CisgICB1aW50MzJfdCBsb3dUaHJlc2hvbGQgIDsKKworICAgYW1wQ29tcFRoMSA9IEhXUkVHKCBBVVhfRERJMF9PU0NfQkFTRSArIERESV8wX09TQ19PX0FNUENPTVBUSDEgKTsKKyAgIGhpZ2hUaHJlc2hvbGQgPSAoIGFtcENvbXBUaDEgJiBERElfMF9PU0NfQU1QQ09NUFRIMV9IUE1SQU1QM19IVEhfTSApID4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0FNUENPTVBUSDFfSFBNUkFNUDNfSFRIX1MgOworICAgbG93VGhyZXNob2xkICA9ICggYW1wQ29tcFRoMSAmIERESV8wX09TQ19BTVBDT01QVEgxX0hQTVJBTVAzX0xUSF9NICkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUFRIMV9IUE1SQU1QM19MVEhfUyA7CisKKyAgIHJldHVybiAoKCggaGlnaFRocmVzaG9sZCArIGxvd1RocmVzaG9sZCApICogMTUgKSA+PiAxICk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9vc2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL29zYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NjljNzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9vc2MuaApAQCAtMCwwICsxLDU5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIG9zYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0yNSAxMjoyODo1NyArMDIwMCAoV2VkLCAyNSBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjQ4NAorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBzeXN0ZW0gb3NjaWxsYXRvciBjb250cm9sLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBzeXN0ZW1fY29udHJvbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgb3NjX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fT1NDX0hfXworI2RlZmluZSBfX09TQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od19hb25fd3VjLmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19kZGkuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZGRpXzBfb3NjLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZGkuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgT1NDQ2xvY2tTb3VyY2VTZXQgICAgICAgICAgICAgICBOT1JPTV9PU0NDbG9ja1NvdXJjZVNldAorICAgICNkZWZpbmUgT1NDQ2xvY2tTb3VyY2VHZXQgICAgICAgICAgICAgICBOT1JPTV9PU0NDbG9ja1NvdXJjZUdldAorICAgICNkZWZpbmUgT1NDSEZfR2V0U3RhcnR1cFRpbWUgICAgICAgICAgICBOT1JPTV9PU0NIRl9HZXRTdGFydHVwVGltZQorICAgICNkZWZpbmUgT1NDSEZfVHVybk9uWG9zYyAgICAgICAgICAgICAgICBOT1JPTV9PU0NIRl9UdXJuT25Yb3NjCisgICAgI2RlZmluZSBPU0NIRl9BdHRlbXB0VG9Td2l0Y2hUb1hvc2MgICAgIE5PUk9NX09TQ0hGX0F0dGVtcHRUb1N3aXRjaFRvWG9zYworICAgICNkZWZpbmUgT1NDSEZfU3dpdGNoVG9SY09zY1R1cm5PZmZYb3NjICBOT1JPTV9PU0NIRl9Td2l0Y2hUb1JjT3NjVHVybk9mZlhvc2MKKyAgICAjZGVmaW5lIE9TQ0hGX0RlYnVnR2V0Q3J5c3RhbEFtcGxpdHVkZSAgTk9ST01fT1NDSEZfRGVidWdHZXRDcnlzdGFsQW1wbGl0dWRlCisgICAgI2RlZmluZSBPU0NIRl9EZWJ1Z0dldEV4cGVjdGVkQXZlcmFnZUNyeXN0YWxBbXBsaXR1ZGUgTk9ST01fT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlCisgICAgI2RlZmluZSBPU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldEdldCBOT1JPTV9PU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldEdldAorICAgICNkZWZpbmUgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRUb1JGQ29yZUZvcm1hdENvbnZlcnQgTk9ST01fT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRUb1JGQ29yZUZvcm1hdENvbnZlcnQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIEhpZ2ggRnJlcXVlbmN5IFhUQUwgUG93ZXIgbW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTE9XX1BPV0VSX1hPU0MgICAgICAgICAgMQorI2RlZmluZSBISUdIX1BPV0VSX1hPU0MgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgSGlnaCBGcmVxdWVuY3kgWFRBTCBQb3dlciBtb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBPU0NfU1JDX0NMS19IRiAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE9TQ19TUkNfQ0xLX01GICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgT1NDX1NSQ19DTEtfTEYgICAgICAgICAgMHgwMDAwMDAwNAorCisjZGVmaW5lIE9TQ19SQ09TQ19IRiAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgT1NDX1hPU0NfSEYgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBPU0NfUkNPU0NfTEYgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE9TQ19YT1NDX0xGICAgICAgICAgICAgIDB4MDAwMDAwMDMKKworI2RlZmluZSBTQ0xLX0hGX1JDT1NDX0hGICAgICAgICAwCisjZGVmaW5lIFNDTEtfSEZfWE9TQ19IRiAgICAgICAgIDEKKworI2RlZmluZSBTQ0xLX01GX1JDT1NDX0hGICAgICAgICAwCisjZGVmaW5lIFNDTEtfTUZfWE9TQ19IRiAgICAgICAgIDEKKworI2RlZmluZSBTQ0xLX0xGX0ZST01fUkNPU0NfSEYgICAwCisjZGVmaW5lIFNDTEtfTEZfRlJPTV9YT1NDX0hGICAgIDEKKyNkZWZpbmUgU0NMS19MRl9GUk9NX1JDT1NDX0xGICAgMgorI2RlZmluZSBTQ0xLX0xGX0ZST01fWE9TQ19MRiAgICAzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgUG93ZXIgTW9kZSBmb3IgSGlnaCBGcmVxdWVuY3kgWFRBTCBPc2NpbGxhdG9yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJNb2RlIGlzIHRoZSBwb3dlciBtb2RlIGZvciB0aGUgSEYgWFRBTC4KKy8vISAtIFxyZWYgTE9XX1BPV0VSX1hPU0MKKy8vISAtIFxyZWYgSElHSF9QT1dFUl9YT1NDCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorT1NDWEhmUG93ZXJNb2RlU2V0KHVpbnQzMl90IHVpMzJNb2RlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMk1vZGUgPT0gTE9XX1BPV0VSX1hPU0MpIHx8CisgICAgICAgICAgICh1aTMyTW9kZSA9PSBISUdIX1BPV0VSX1hPU0MpKTsKKworICAgIC8vCisgICAgLy8gQ2hhbmdlIHRoZSBwb3dlciBtb2RlLgorICAgIC8vCisgICAgRERJMTZCaXRXcml0ZShBVVhfRERJMF9PU0NfQkFTRSwgRERJXzBfT1NDX09fQ1RMMCwgRERJXzBfT1NDX0NUTDBfWE9TQ19IRl9QT1dFUl9NT0RFLAorICAgICAgICAgICAgICAgICAgdWkzMk1vZGUpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIE9TQyBjbG9jayBsb3NzIGV2ZW50IGRldGVjdGlvbi4KKy8vIQorLy8hIEVuYWJsZXMgdGhlIGNsb2NrIGxvc3MgZXZlbnQgZmxhZyB0byBiZSByYWlzZWQgaWYgYSBjbG9jayBsb3NzIGlzIGRldGVjdGVkLgorLy8hCisvLyEgXG5vdGUgT1NDIGNsb2NrIGxvc3MgZXZlbnQgbXVzdCBiZSBkaXNhYmxlZCBiZWZvcmUgU0NMS19MRiBjbG9jayBzb3VyY2UgaXMKKy8vISBjaGFuZ2VkIChieSBjYWxsaW5nIFxyZWYgT1NDQ2xvY2tTb3VyY2VTZXQoKSkgYW5kIHJlbWFpbiBkaXNhYmxlZCB1bnRpbCB0aGUKKy8vISBjaGFuZ2UgaXMgY29uZmlybWVkIChieSBjYWxsaW5nIFxyZWYgT1NDQ2xvY2tTb3VyY2VHZXQoKSkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIE9TQ0Nsb2NrTG9zc0V2ZW50RGlzYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK09TQ0Nsb2NrTG9zc0V2ZW50RW5hYmxlKCB2b2lkICkKK3sKKyAgICBEREkxNkJpdGZpZWxkV3JpdGUoIEFVWF9EREkwX09TQ19CQVNFLCBERElfMF9PU0NfT19DVEwwLAorICAgICAgICBERElfMF9PU0NfQ1RMMF9DTEtfTE9TU19FTl9NLAorICAgICAgICBERElfMF9PU0NfQ1RMMF9DTEtfTE9TU19FTl9TLCAxICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIE9TQyBjbG9jayBsb3NzIGV2ZW50IGRldGVjdGlvbi4KKy8vIQorLy8hIERpc2FibGluZyB0aGUgT1NDIGNsb2NrIGxvc3MgZXZlbnQgZG9lcyBhbHNvIGNsZWFyIHRoZSBjbG9jayBsb3NzIGV2ZW50IGZsYWcuCisvLyEKKy8vISBcbm90ZSBPU0MgY2xvY2sgbG9zcyBldmVudCBtdXN0IGJlIGRpc2FibGVkIGJlZm9yZSBTQ0xLX0xGIGNsb2NrIHNvdXJjZSBpcworLy8hIGNoYW5nZWQgKGJ5IGNhbGxpbmcgXHJlZiBPU0NDbG9ja1NvdXJjZVNldCgpKSBhbmQgcmVtYWluIGRpc2FibGVkIHVudGlsIHRoZQorLy8hIGNoYW5nZSBpcyBjb25maXJtZWQgKGJ5IGNhbGxpbmcgXHJlZiBPU0NDbG9ja1NvdXJjZUdldCgpKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgT1NDQ2xvY2tMb3NzRXZlbnRFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitPU0NDbG9ja0xvc3NFdmVudERpc2FibGUoIHZvaWQgKQoreworICAgIERESTE2Qml0ZmllbGRXcml0ZSggQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX0NUTDAsCisgICAgICAgIERESV8wX09TQ19DVEwwX0NMS19MT1NTX0VOX00sCisgICAgICAgIERESV8wX09TQ19DVEwwX0NMS19MT1NTX0VOX1MsIDAgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSBvc2NpbGxhdG9yIGlucHV0IHRvIHRoZSBhIHNvdXJjZSBjbG9jay4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNldCB0aGUgb3NjaWxsYXRvciBzb3VyY2UgZm9yIG9uZSBvciBtb3JlIG9mIHRoZQorLy8hIHN5c3RlbSBzb3VyY2UgY2xvY2tzLgorLy8hCisvLyEgV2hlbiBzZWxlY3RpbmcgdGhlIGhpZ2ggZnJlcXVlbmN5IGNsb2NrIHNvdXJjZSwgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBkbworLy8hIHRoZSBhY3R1YWwgc3dpdGNoLiBFbmFibGluZyB0aGUgaGlnaCBmcmVxdWVuY3kgWFRBTCBjYW4gdGFrZSBzZXZlcmFsIGh1bmRyZWQKKy8vISBtaWNybyBzZWNvbmRzLCBzbyB0aGUgYWN0dWFsIHN3aXRjaCBpcyBzcGxpdCBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24sCisvLyEgbGVhdmluZyBTeXN0ZW0gQ1BVIGZyZWUgdG8gcGVyZm9ybSBvdGhlciB0YXNrcyBhcyB0aGUgWFRBTCBzdGFydHMgdXAuCisvLyEKKy8vISBcbm90ZSBUaGUgSGlnaCBGcmVxdWVuY3kgKFxyZWYgT1NDX1NSQ19DTEtfSEYpIGFuZCBNZWRpdW0gRnJlcXVlbmN5CisvLyEgKFxyZWYgT1NDX1NSQ19DTEtfTUYpIGNhbiBvbmx5IGJlIGRlcml2ZWQgZnJvbSB0aGUgaGlnaCBmcmVxdWVuY3kKKy8vISBvc2NpbGxhdG9yLiBUaGUgTG93IEZyZXF1ZW5jeSBzb3VyY2UgY2xvY2sgKFxyZWYgT1NDX1NSQ19DTEtfTEYpIGNhbiBiZQorLy8hIGRlcml2ZWQgZnJvbSBhbGwgNCBvc2NpbGxhdG9ycy4KKy8vIQorLy8hIFxub3RlIElmIGVuYWJsaW5nIFxyZWYgT1NDX1hPU0NfTEYgaXQgaXMgbm90IHNhZmUgdG8gZ28gdG8gcG93ZXJkb3duL3NodXRkb3duCisvLyEgdW50aWwgdGhlIExGIGNsb2NrIGlzIHJ1bm5pbmcgd2hpY2ggY2FuIGJlIGNoZWNrZWQgdXNpbmcgXHJlZiBPU0NDbG9ja1NvdXJjZUdldCgpLgorLy8hCisvLyEgXG5vdGUgQ2xvY2sgbG9zcyByZXNldCBnZW5lcmF0aW9uIG11c3QgYmUgZGlzYWJsZWQgYmVmb3JlIFNDTEtfTEYgKFxyZWYgT1NDX1NSQ19DTEtfTEYpCisvLyEgY2xvY2sgc291cmNlIGlzIGNoYW5nZWQgYW5kIHJlbWFpbiBkaXNhYmxlZCB1bnRpbCB0aGUgY2hhbmdlIGlzIGNvbmZpcm1lZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyU3JjQ2xrIGlzIHRoZSBzb3VyY2UgY2xvY2tzIHRvIGNvbmZpZ3VyZS4KKy8vISAtIFxyZWYgT1NDX1NSQ19DTEtfSEYKKy8vISAtIFxyZWYgT1NDX1NSQ19DTEtfTUYKKy8vISAtIFxyZWYgT1NDX1NSQ19DTEtfTEYKKy8vISBccGFyYW0gdWkzMk9zYyBpcyB0aGUgb3NjaWxsYXRvciB0aGF0IGRyaXZlcyB0aGUgc291cmNlIGNsb2NrLgorLy8hIC0gXHJlZiBPU0NfUkNPU0NfSEYKKy8vISAtIFxyZWYgT1NDX1hPU0NfSEYKKy8vISAtIFxyZWYgT1NDX1JDT1NDX0xGIChvbmx5IHdoZW4gdWkzMlNyY0NsayBpcyBccmVmIE9TQ19TUkNfQ0xLX0xGKQorLy8hIC0gXHJlZiBPU0NfWE9TQ19MRiAob25seSB3aGVuIHVpMzJTcmNDbGsgaXMgXHJlZiBPU0NfU1JDX0NMS19MRikKKy8vIQorLy8hIFxzYSBPU0NDbG9ja1NvdXJjZUdldCgpCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBPU0NDbG9ja1NvdXJjZVNldCh1aW50MzJfdCB1aTMyU3JjQ2xrLCB1aW50MzJfdCB1aTMyT3NjKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBzb3VyY2UgY2xvY2sgc2V0dGluZ3MuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIG9zY2lsbGF0b3Igc291cmNlIGZvciBvbmUgb2YgdGhlIHN5c3RlbSBzb3VyY2UKKy8vISBjbG9ja3MuCisvLyEKKy8vISBccGFyYW0gdWkzMlNyY0NsayBpcyB0aGUgc291cmNlIGNsb2NrIHRvIGNoZWNrLgorLy8hIC0gXHJlZiBPU0NfU1JDX0NMS19IRgorLy8hIC0gXHJlZiBPU0NfU1JDX0NMS19NRgorLy8hIC0gXHJlZiBPU0NfU1JDX0NMS19MRgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSB0eXBlIG9mIG9zY2lsbGF0b3IgdGhhdCBkcml2ZXMgdGhlIGNsb2NrIHNvdXJjZS4KKy8vISAtIFxyZWYgT1NDX1JDT1NDX0hGCisvLyEgLSBccmVmIE9TQ19YT1NDX0hGCisvLyEgLSBccmVmIE9TQ19SQ09TQ19MRgorLy8hIC0gXHJlZiBPU0NfWE9TQ19MRgorLy8hCisvLyEgXHNhIFxyZWYgT1NDQ2xvY2tTb3VyY2VTZXQoKSwgXHJlZiBPU0NIZlNvdXJjZVN3aXRjaCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IE9TQ0Nsb2NrU291cmNlR2V0KHVpbnQzMl90IHVpMzJTcmNDbGspOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVjayBpZiB0aGUgSEYgY2xvY2sgc291cmNlIGlzIHJlYWR5IHRvIGJlIHN3aXRjaGVkLgorLy8hCisvLyEgSWYgYSByZXF1ZXN0IHRvIHN3aXRjaCB0aGUgSEYgY2xvY2sgc291cmNlIGhhcyBiZWVuIG1hZGUsIHRoaXMgZnVuY3Rpb24KKy8vISBjYW4gYmUgdXNlZCB0byBjaGVjayBpZiB0aGUgY2xvY2sgc291cmNlIGlzIHJlYWR5IHRvIGJlIHN3aXRjaGVkLgorLy8hCisvLyEgT25jZSB0aGUgSEYgY2xvY2sgc291cmNlIGlzIHJlYWR5IHRoZSBzd2l0Y2ggY2FuIGJlIHBlcmZvcm1lZCBieSBjYWxsaW5nCisvLyEgdGhlIFxyZWYgT1NDSGZTb3VyY2VTd2l0Y2goKQorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiBIRiBjbG9jayBzb3VyY2U6CisvLyEgLSBcYyB0cnVlICA6IEhGIGNsb2NrIHNvdXJjZSBpcyByZWFkeS4KKy8vISAtIFxjIGZhbHNlIDogSEYgY2xvY2sgc291cmNlIGlzIFxiIG5vdCByZWFkeS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorT1NDSGZTb3VyY2VSZWFkeSh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSByZWFkaW5lc3Mgb2YgdGhlIEhGIGNsb2NrIHNvdXJjZQorICAgIC8vCisgICAgcmV0dXJuIChEREkxNkJpdGZpZWxkUmVhZChBVVhfRERJMF9PU0NfQkFTRSwgRERJXzBfT1NDX09fU1RBVDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfU1RBVDBfUEVORElOR1NDTEtIRlNXSVRDSElOR19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX1NUQVQwX1BFTkRJTkdTQ0xLSEZTV0lUQ0hJTkdfUykpID8KKyAgICAgICAgdHJ1ZSA6IGZhbHNlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTd2l0Y2ggdGhlIGhpZ2ggZnJlcXVlbmN5IGNsb2NrLgorLy8hCisvLyEgV2hlbiBzd2l0Y2hpbmcgdGhlIEhGIGNsb2NrIHNvdXJjZSB0aGUgY2xvY2sgcGVyaW9kIG1pZ2h0IGJlIHByb2xvbmdlZAorLy8hIGxlYXZpbmcgdGhlIGNsb2NrICdzdHVjay1hdCcgaGlnaCBvciBsb3cgZm9yIGEgZmV3IGN5Y2xlcy4gVG8gZW5zdXJlIHRoYXQKKy8vISB0aGlzIGRvZXMgbm90IGNvaW5jaWRlIHdpdGggYSByZWFkIGFjY2VzcyB0byB0aGUgRmxhc2ggcG90ZW50aWFsbHkKKy8vISBmcmVlemluZyB0aGUgZGV2aWNlLCB0aGUgSEYgY2xvY2sgc291cmNlIHN3aXRjaCBtdXN0IGJlIGV4ZWN1dGVkIGZyb20gUk9NLgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCByZXR1cm4gdW50aWwgdGhlIGNsb2NrIHNvdXJjZSBoYXMgYmVlbgorLy8hIHN3aXRjaGVkLiBJdCBpcyBsZWZ0IHRvIHRoZSBwcm9ncmFtbWVyIHRvIGVuc3VyZSwgdGhhdCB0aGVyZSBpcyBhIHBlbmRpbmcKKy8vISByZXF1ZXN0IGZvciBhIEhGIGNsb2NrIHNvdXJjZSBzd2l0Y2ggYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBPU0NDbG9ja1NvdXJjZVNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK09TQ0hmU291cmNlU3dpdGNoKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBTd2l0Y2ggdGhlIEhGIGNsb2NrIHNvdXJjZQorICAgIC8vCisgICAgSGFwaUhGU291cmNlU2FmZVN3aXRjaCgpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEZXByZWNhdGVkOiBFbXB0eSBmdW5jdGlvbiAtIG9yaWdpbmFsIGZ1bmN0aW9uYWxpdHkgaXMgcmVtb3ZlZC4KKy8vIQorLy8hIFxkZXByZWNhdGVkIEZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIHN0YXJ0dXAgY29kZS4gVGhlIGR1bW15IGZ1bmN0aW9uCisvLyEgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgQ0MyNnh4V2FyZS9DQzEzeHhXYXJlLgorLy8hCisvLyEgVGhlIG9yaWdpbmFsIGZ1bmN0aW9uYWxpdHkgd2FzIGRlc2NyaWJlZCBhcyBmb2xsb3dzOgorLy8hIEVuYWJsZSBTeXN0ZW0gQ1BVIGFjY2VzcyB0byB0aGUgT1NDX0RJRyBtb2R1bGUuCisvLyEgRm9yY2UgcG93ZXIgb24gQVVYIGFuZCBlbmFibGUgY2xvY2tzIHRvIGFsbG93IFN5c3RlbSBDUFUgYWNjZXNzIG9uCisvLyEgdGhlIE9TQ19ESUcgaW50ZXJmYWNlLgorLy8hCisvLyEgXG5vdGUgQWNjZXNzIHRvIHRoZSBPU0NfRElHIGludGVyZmFjZSBpcyBhIHNoYXJlZCByZXNvdXJjZSBiZXR3ZWVuIHRoZQorLy8hIFNlbnNvciBDb250cm9sbGVyIGFuZCB0aGUgQ1BVLCBzbyBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBpbnRlcmZhY2UgbXVzdAorLy8hIGJlIGRvbmUgd2l0aCBjb25zaWRlcmF0aW9uLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK09TQ0ludGVyZmFjZUVuYWJsZSh2b2lkKQoreworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEZXByZWNhdGVkOiBFbXB0eSBmdW5jdGlvbiAtIG9yaWdpbmFsIGZ1bmN0aW9uYWxpdHkgaXMgcmVtb3ZlZC4KKy8vIQorLy8hIFxkZXByZWNhdGVkIEZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIHN0YXJ0dXAgY29kZS4gVGhlIGR1bW15IGZ1bmN0aW9uCisvLyEgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgQ0MyNnh4V2FyZS9DQzEzeHhXYXJlLgorLy8hCisvLyEgVGhlIG9yaWdpbmFsIGZ1bmN0aW9uYWxpdHkgd2FzIGRlc2NyaWJlZCBhcyBmb2xsb3dzOgorLy8hIERpc2FibGUgU3lzdGVtIENQVSBhY2Nlc3MgdG8gdGhlIE9TQ19ESUcgbW9kdWxlLgorLy8hIFJlbGVhc2UgdGhlICJmb3JjZSBwb3dlciBvbiIgb2YgQVVYIGFuZCBkaXNhYmxlIGNsb2NrIHRvIEFVWC4KKy8vIQorLy8hIFxub3RlIEFjY2VzcyB0byB0aGUgT1NDX0RJRyBpbnRlcmZhY2UgaXMgYSBzaGFyZWQgcmVzb3VyY2UgYmV0d2VlbiB0aGUKKy8vISBTZW5zb3IgQ29udHJvbGxlciBhbmQgdGhlIENQVSwgc28gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgaW50ZXJmYWNlIG11c3QKKy8vISBiZSBkb25lIHdpdGggY29uc2lkZXJhdGlvbi4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitPU0NJbnRlcmZhY2VEaXNhYmxlKHZvaWQpCit7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgbWF4aW11bSBzdGFydHVwIHRpbWUgKGluIG1pY3Jvc2Vjb25kcykgb2YgWE9TQ19IRi4KKy8vIQorLy8hIFRoZSBzdGFydHVwIHRpbWUgZGVwZW5kcyBvbiBzZXZlcmFsIGZhY3RvcnMuIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUKKy8vISBtYXhpbXVtIHN0YXJ0dXAgdGltZSBiYXNlZCBvbiBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB0aW1lVW50aWxXYWtldXBJbk1zIGluZGljYXRlcyBob3cgbG9uZyB0aW1lIChtaWxsaXNlY29uZHMpIHRvIHRoZQorLy8hIHN0YXJ0dXAgd2lsbCBvY2N1ci4KKy8vIQorLy8hIFxyZXR1cm4gVGltZSBtYXJnaW4gdG8gdXNlIGluIG1pY3Jvc2Vjb25kcy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgT1NDSEZfR2V0U3RhcnR1cFRpbWUoIHVpbnQzMl90IHRpbWVVbnRpbFdha2V1cEluTXMgKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUdXJucyBvbiBYT1NDX0hGIChidXQgd2l0aG91dCBzd2l0Y2hpbmcgdG8gWE9TQ19IRikuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNpbXBseSBpbmRpY2F0ZXMgdGhlIG5lZWQgZm9yIFhPU0NfSEYgdG8gdGhlIGhhcmR3YXJlIHdoaWNoCisvLyEgaW5pdGlhdGVzIHRoZSBYT1NDX0hGIHN0YXJ0dXAuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBPU0NIRl9UdXJuT25Yb3NjKCB2b2lkICk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU3dpdGNoIHRvIFhPU0NfSEYgaWYgWE9TQ19IRiBpcyByZWFkeS4KKy8vIQorLy8hIFRoaXMgaXMgYSBub24tYmxvY2tpbmcgZnVuY3Rpb24gY2hlY2tpbmcgaWYgdGhlIFhPU0NfSEYgaXMgcmVhZHkgYW5kCisvLyEgcGVyZm9ybXMgdGhlIHN3aXRjaGluZyBpZiByZWFkeS4gVGhlIGZ1bmN0aW9uIGlzIHNvbWV3aGF0IGJsb2NraW5nIGluIHRoZQorLy8hIGNhc2Ugd2hlcmUgc3dpdGNoaW5nIGlzIHBlcmZvcm1lZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgdGhlIFhPU0NfSEYgc3dpdGNoaW5nOgorLy8hIC0gXGMgdHJ1ZSAgOiBTd2l0Y2hpbmcgdG8gWE9TQ19IRiBoYXMgb2NjdXJyZWQuCisvLyEgLSBcYyBmYWxzZSA6IFN3aXRjaGluZyBoYXMgbm90IG9jY3VycmVkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBib29sIE9TQ0hGX0F0dGVtcHRUb1N3aXRjaFRvWG9zYyggdm9pZCApOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFN3aXRjaCB0byBSQ09TQ19IRiBhbmQgdHVybiBvZmYgWE9TQ19IRi4KKy8vIQorLy8hIFRoaXMgb3BlcmF0aW9uIHRha2VzIGFwcHJveGltYXRlbHkgNTAgbWljcm9zZWNvbmRzIChjYW4gYmUgc2hvcnRlciBpZgorLy8hIFJDT1NDX0hGIGFscmVhZHkgd2FzIHJ1bm5pbmcpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgT1NDSEZfU3dpdGNoVG9SY09zY1R1cm5PZmZYb3NjKCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBjcnlzdGFsIGFtcGxpdHVkZSAoYXNzdW1pbmcgY3J5c3RhbCBpcyBydW5uaW5nKS4KKy8vIQorLy8hIFxub3RlIFRoaXMgaXMgYSBkZWJ1ZyBmdW5jdGlvbiBvbmx5LgorLy8hIEl0IGlzIGhlbmNlIG5vdCByZWNvbW1lbmRlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gbm9ybWFsIG9wZXJhdGlvbi4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gdXNlcyBhbiBvbi1jaGlwIEFEQyBhbmQgcGVhayBkZXRlY3RvciBmb3IgcmVhZGluZyB0aGUgY3J5c3RhbAorLy8hIGFtcGxpdHVkZS4gVGhlIG1lYXN1cmVtZW50IHRpbWUgaXMgc2V0IHRvIDQgbWlsbGlzZWNvbmRzIGFuZCB0aGlzIGZ1bmN0aW9uCisvLyEgZG9lcyBub3QgcmV0dXJuIGJlZm9yZSB0aGUgbWVhc3VyZW1lbnQgaXMgZG9uZS4KKy8vIQorLy8hIEV4cGVjdGVkIHZhbHVlIGlzIFxyZWYgT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlICsvLSA1MCBtaWxsaXZvbHQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgY3J5c3RhbCBhbXBsaXR1ZGUgaW4gbWlsbGl2b2x0LgorLy8hCisvLyEgXHNhIE9TQ0hGX0RlYnVnR2V0RXhwZWN0ZWRBdmVyYWdlQ3J5c3RhbEFtcGxpdHVkZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IE9TQ0hGX0RlYnVnR2V0Q3J5c3RhbEFtcGxpdHVkZSggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIGV4cGVjdGVkIGF2ZXJhZ2UgY3J5c3RhbCBhbXBsaXR1ZGUuCisvLyEKKy8vISBcbm90ZSBUaGlzIGlzIGEgZGVidWcgZnVuY3Rpb24gb25seS4KKy8vISBJdCBpcyBoZW5jZSBub3QgcmVjb21tZW5kZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGluIG5vcm1hbCBvcGVyYXRpb24uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJlYWQgdGhlIGNvbmZpZ3VyZWQgaGlnaCBhbmQgbG93IHRocmVzaG9sZHMgYW5kIHJldHVybnMKKy8vISB0aGUgbWVhbiB2YWx1ZSBjb252ZXJ0ZWQgdG8gbWlsbGl2b2x0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGV4cGVjdGVkIGF2ZXJhZ2UgY3J5c3RhbCBhbXBsaXR1ZGUgaW4gbWlsbGl2b2x0LgorLy8hCisvLyEgXHNhIE9TQ0hGX0RlYnVnR2V0Q3J5c3RhbEFtcGxpdHVkZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IE9TQ0hGX0RlYnVnR2V0RXhwZWN0ZWRBdmVyYWdlQ3J5c3RhbEFtcGxpdHVkZSggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDYWxjdWxhdGUgdGhlIHRlbXBlcmF0dXJlIGRlcGVuZGVudCByZWxhdGl2ZSBmcmVxdWVuY3kgb2Zmc2V0IG9mIEhQT1NDCisvLyEKKy8vISBUaGUgSFBPU0MgKEhpZ2ggUHJlY2lzaW9uIE9zY2lsbGF0b3IpIGZyZXF1ZW5jeSB3aWxsIHZhcnkgc2xpZ2h0bHkgd2l0aCBjaGlwIHRlbXBlcmF0dXJlLgorLy8hIFRoZSBmcmVxdWVuY3kgb2Zmc2V0IGZyb20gdGhlIG5vbWluYWwgdmFsdWUgY2FuIGJlIHByZWRpY3RlZCBiYXNlZCBvbgorLy8hIHNlY29uZCBvcmRlciBsaW5lYXIgaW50ZXJwb2xhdGlvbiB1c2luZyBjb2VmZmljaWVudHMgbWVhc3VyZWQgaW4gY2hpcAorLy8hIHByb2R1Y3Rpb24gYW5kIHN0b3JlZCBhcyBmYWN0b3J5IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgcmVsYXRpdmUgZnJlcXVlbmN5IG9mZnNldCwgZGVmaW5lZCBhczoKKy8vISA8cHJlPgorLy8hICAgICBGX0hQT1NDID0gRl9ub20gKiAoMSArIGQvKDJeMjIpKQorLy8hIDwvcHJlPgorLy8hIHdoZXJlCisvLyEgLSAgIEZfSFBPU0MgaXMgdGhlIGN1cnJlbnQgSFBPU0MgZnJlcXVlbmN5LgorLy8hIC0gICBGX25vbSBpcyB0aGUgbm9taW5hbCBvc2NpbGxhdG9yIGZyZXF1ZW5jeSwgYXNzdW1lZCB0byBiZSA0OC4wMDAgTUh6LgorLy8hIC0gICBkIGlzIHRoZSByZWxhdGl2ZSBmcmVxdWVuY3kgb2Zmc2V0ICh0aGUgdmFsdWUgcmV0dXJuZWQpLgorLy8hCisvLyEgQnkga25vd2luZyB0aGUgcmVsYXRpdmUgZnJlcXVlbmN5IG9mZnNldCBpdCBpcyB0aGVuIHBvc3NpYmxlIHRvIGNvbXBlbnNhdGUKKy8vISBhbnkgdGltaW5nIHJlbGF0ZWQgdmFsdWVzIGFjY29yZGluZ2x5LgorLy8hCisvLyEgXHBhcmFtIHRlbXBEZWdDIGlzIHRoZSBjaGlwIHRlbXBlcmF0dXJlIGluIGRlZ3JlZXMgQ2Vsc2l1cy4gVXNlIHRoZQorLy8hIGZ1bmN0aW9uIFxyZWYgQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDKCkgdG8gZ2V0IGN1cnJlbnQgY2hpcCB0ZW1wZXJhdHVyZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgcmVsYXRpdmUgZnJlcXVlbmN5IG9mZnNldCBwYXJhbWV0ZXIgZC4KKy8vIQorLy8hIFxzYSBPU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldFRvUkZDb3JlRm9ybWF0Q29udmVydCgpLCBBT05CYXRNb25UZW1wZXJhdHVyZUdldERlZ0MoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQzMl90IE9TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0R2V0KCBpbnQzMl90IHRlbXBEZWdDICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbnZlcnRzIHRoZSByZWxhdGl2ZSBmcmVxdWVuY3kgb2Zmc2V0IG9mIEhQT1NDIHRvIHRoZSBSRiBDb3JlIHBhcmFtZXRlciBmb3JtYXQuCisvLyEKKy8vISBUaGUgSFBPU0MgKEhpZ2ggUHJlY2lzaW9uIE9zY2lsbGF0b3IpIGNsb2NrIGlzIHVzZWQgYnkgdGhlIFJGIENvcmUuCisvLyEgVG8gY29tcGVuc2F0ZSBmb3IgYSBmcmVxdWVuY3kgb2Zmc2V0IGluIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGNsb2NrIHNvdXJjZSwKKy8vISBhIGZyZXF1ZW5jeSBvZmZzZXQgcGFyYW1ldGVyIGNhbiBiZSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSByYWRpbyBjb25maWd1cmF0aW9uCisvLyEgb3ZlcnJpZGUgc2V0dGluZyBsaXN0IHRvIGVuYWJsZSBjb21wZW5zYXRpb24gb2YgdGhlIFJGIHN5bnRoZXNpemVyIGZyZXF1ZW5jeSwKKy8vISBzeW1ib2wgdGltaW5nLCBhbmQgcmFkaW8gdGltZXIgdG8gc3RpbGwgYWNoaWV2ZSBjb3JyZWN0IGZyZXF1ZW5jaWVzLgorLy8hCisvLyEgVGhlIFJGIENvcmUgdGFrZXMgYSByZWxhdGl2ZSBmcmVxdWVuY3kgb2Zmc2V0IHBhcmFtZXRlciBkZWZpbmVkIGRpZmZlcmVudGx5CisvLyEgY29tcGFyZWQgdG8gdGhlIHJlbGF0aXZlIGZyZXF1ZW5jeSBvZmZzZXQgcGFyYW1ldGVyIHJldHVybmVkIGZyb20gZnVuY3Rpb24KKy8vISBccmVmIE9TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0R2V0KCkgYW5kIHRodXMgbmVlZHMgdG8gYmUgY29udmVydGVkOgorLy8hIDxwcmU+CisvLyEgICAgIEZfbm9tID0gRl9IUE9TQyAqICgxICsgUmZDb3JlUmVsRnJlcU9mZnNldC8oMl4yMikpCisvLyEgPC9wcmU+CisvLyEgd2hlcmUKKy8vISAtICAgRl9ub20gaXMgdGhlIG5vbWluYWwgb3NjaWxsYXRvciBmcmVxdWVuY3ksIGFzc3VtZWQgdG8gYmUgNDguMDAwIE1Iei4KKy8vISAtICAgRl9IUE9TQyBpcyB0aGUgY3VycmVudCBIUE9TQyBmcmVxdWVuY3kuCisvLyEgLSAgIFJmQ29yZVJlbEZyZXFPZmZzZXQgaXMgdGhlIHJlbGF0aXZlIGZyZXF1ZW5jeSBvZmZzZXQgaW4gdGhlICJSRiBDb3JlIiBmb3JtYXQgKHRoZSB2YWx1ZSByZXR1cm5lZCkuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHJlbGF0aXZlIGZyZXF1ZW5jeSBvZmZzZXQgaW4gUkYgQ29yZSBmb3JtYXQuCisvLyEKKy8vISBcc2EgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQxNl90IE9TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0VG9SRkNvcmVGb3JtYXRDb252ZXJ0KCBpbnQzMl90IEhQT1NDX1JlbEZyZXFPZmZzZXQgKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9PU0NDbG9ja1NvdXJjZVNldAorICAgICAgICAjdW5kZWYgIE9TQ0Nsb2NrU291cmNlU2V0CisgICAgICAgICNkZWZpbmUgT1NDQ2xvY2tTb3VyY2VTZXQgICAgICAgICAgICAgICBST01fT1NDQ2xvY2tTb3VyY2VTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX09TQ0Nsb2NrU291cmNlR2V0CisgICAgICAgICN1bmRlZiAgT1NDQ2xvY2tTb3VyY2VHZXQKKyAgICAgICAgI2RlZmluZSBPU0NDbG9ja1NvdXJjZUdldCAgICAgICAgICAgICAgIFJPTV9PU0NDbG9ja1NvdXJjZUdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fT1NDSEZfR2V0U3RhcnR1cFRpbWUKKyAgICAgICAgI3VuZGVmICBPU0NIRl9HZXRTdGFydHVwVGltZQorICAgICAgICAjZGVmaW5lIE9TQ0hGX0dldFN0YXJ0dXBUaW1lICAgICAgICAgICAgUk9NX09TQ0hGX0dldFN0YXJ0dXBUaW1lCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9PU0NIRl9UdXJuT25Yb3NjCisgICAgICAgICN1bmRlZiAgT1NDSEZfVHVybk9uWG9zYworICAgICAgICAjZGVmaW5lIE9TQ0hGX1R1cm5Pblhvc2MgICAgICAgICAgICAgICAgUk9NX09TQ0hGX1R1cm5Pblhvc2MKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX09TQ0hGX0F0dGVtcHRUb1N3aXRjaFRvWG9zYworICAgICAgICAjdW5kZWYgIE9TQ0hGX0F0dGVtcHRUb1N3aXRjaFRvWG9zYworICAgICAgICAjZGVmaW5lIE9TQ0hGX0F0dGVtcHRUb1N3aXRjaFRvWG9zYyAgICAgUk9NX09TQ0hGX0F0dGVtcHRUb1N3aXRjaFRvWG9zYworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fT1NDSEZfU3dpdGNoVG9SY09zY1R1cm5PZmZYb3NjCisgICAgICAgICN1bmRlZiAgT1NDSEZfU3dpdGNoVG9SY09zY1R1cm5PZmZYb3NjCisgICAgICAgICNkZWZpbmUgT1NDSEZfU3dpdGNoVG9SY09zY1R1cm5PZmZYb3NjICBST01fT1NDSEZfU3dpdGNoVG9SY09zY1R1cm5PZmZYb3NjCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9PU0NIRl9EZWJ1Z0dldENyeXN0YWxBbXBsaXR1ZGUKKyAgICAgICAgI3VuZGVmICBPU0NIRl9EZWJ1Z0dldENyeXN0YWxBbXBsaXR1ZGUKKyAgICAgICAgI2RlZmluZSBPU0NIRl9EZWJ1Z0dldENyeXN0YWxBbXBsaXR1ZGUgIFJPTV9PU0NIRl9EZWJ1Z0dldENyeXN0YWxBbXBsaXR1ZGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX09TQ0hGX0RlYnVnR2V0RXhwZWN0ZWRBdmVyYWdlQ3J5c3RhbEFtcGxpdHVkZQorICAgICAgICAjdW5kZWYgIE9TQ0hGX0RlYnVnR2V0RXhwZWN0ZWRBdmVyYWdlQ3J5c3RhbEFtcGxpdHVkZQorICAgICAgICAjZGVmaW5lIE9TQ0hGX0RlYnVnR2V0RXhwZWN0ZWRBdmVyYWdlQ3J5c3RhbEFtcGxpdHVkZSBST01fT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9PU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldEdldAorICAgICAgICAjdW5kZWYgIE9TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0R2V0CisgICAgICAgICNkZWZpbmUgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRHZXQgUk9NX09TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0R2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9PU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldFRvUkZDb3JlRm9ybWF0Q29udmVydAorICAgICAgICAjdW5kZWYgIE9TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0VG9SRkNvcmVGb3JtYXRDb252ZXJ0CisgICAgICAgICNkZWZpbmUgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRUb1JGQ29yZUZvcm1hdENvbnZlcnQgUk9NX09TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0VG9SRkNvcmVGb3JtYXRDb252ZXJ0CisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8vIF9fT1NDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9wcmNtLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9wcmNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2YjIxNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3ByY20uYwpAQCAtMCwwICsxLDY3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHByY20uYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMDQgMTY6NDk6MzggKzAxMDAgKEZyaSwgMDQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU4NzQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBQUkNNLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9wcmNtLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBQUkNNSW5mQ2xvY2tDb25maWd1cmVTZXQKKyAgICAjZGVmaW5lIFBSQ01JbmZDbG9ja0NvbmZpZ3VyZVNldCAgICAgICAgTk9ST01fUFJDTUluZkNsb2NrQ29uZmlndXJlU2V0CisgICAgI3VuZGVmICBQUkNNSW5mQ2xvY2tDb25maWd1cmVHZXQKKyAgICAjZGVmaW5lIFBSQ01JbmZDbG9ja0NvbmZpZ3VyZUdldCAgICAgICAgTk9ST01fUFJDTUluZkNsb2NrQ29uZmlndXJlR2V0CisgICAgI3VuZGVmICBQUkNNQXVkaW9DbG9ja0NvbmZpZ1NldAorICAgICNkZWZpbmUgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXQgICAgICAgICBOT1JPTV9QUkNNQXVkaW9DbG9ja0NvbmZpZ1NldAorICAgICN1bmRlZiAgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXRPdmVycmlkZQorICAgICNkZWZpbmUgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXRPdmVycmlkZSBOT1JPTV9QUkNNQXVkaW9DbG9ja0NvbmZpZ1NldE92ZXJyaWRlCisgICAgI3VuZGVmICBQUkNNUG93ZXJEb21haW5PbgorICAgICNkZWZpbmUgUFJDTVBvd2VyRG9tYWluT24gICAgICAgICAgICAgICBOT1JPTV9QUkNNUG93ZXJEb21haW5PbgorICAgICN1bmRlZiAgUFJDTVBvd2VyRG9tYWluT2ZmCisgICAgI2RlZmluZSBQUkNNUG93ZXJEb21haW5PZmYgICAgICAgICAgICAgIE5PUk9NX1BSQ01Qb3dlckRvbWFpbk9mZgorICAgICN1bmRlZiAgUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUKKyAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlICAgICAgICAgTk9ST01fUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUKKyAgICAjdW5kZWYgIFBSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZQorICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxSdW5EaXNhYmxlICAgICAgICBOT1JPTV9QUkNNUGVyaXBoZXJhbFJ1bkRpc2FibGUKKyAgICAjdW5kZWYgIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUKKyAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUgICAgICAgTk9ST01fUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZQorICAgICN1bmRlZiAgUFJDTVBlcmlwaGVyYWxTbGVlcERpc2FibGUKKyAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsU2xlZXBEaXNhYmxlICAgICAgTk9ST01fUFJDTVBlcmlwaGVyYWxTbGVlcERpc2FibGUKKyAgICAjdW5kZWYgIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlCisgICAgI2RlZmluZSBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcEVuYWJsZSAgIE5PUk9NX1BSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlCisgICAgI3VuZGVmICBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcERpc2FibGUKKyAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRGlzYWJsZSAgTk9ST01fUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBEaXNhYmxlCisgICAgI3VuZGVmICBQUkNNUG93ZXJEb21haW5TdGF0dXMKKyAgICAjZGVmaW5lIFBSQ01Qb3dlckRvbWFpblN0YXR1cyAgICAgICAgICAgTk9ST01fUFJDTVBvd2VyRG9tYWluU3RhdHVzCisgICAgI3VuZGVmICBQUkNNRGVlcFNsZWVwCisgICAgI2RlZmluZSBQUkNNRGVlcFNsZWVwICAgICAgICAgICAgICAgICAgIE5PUk9NX1BSQ01EZWVwU2xlZXAKKyNlbmRpZgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBcnJheXMgdGhhdCBtYXBzIHRoZSAicGVyaXBoZXJhbCBzZXQiIG51bWJlciAod2hpY2ggaXMgc3RvcmVkIGluIHRoZQorLy8gdGhpcmQgbmliYmxlIG9mIHRoZSBQUkNNX1BFUklQSF8qIGRlZmluZXMpIHRvIHRoZSBQUkNNIHJlZ2lzdGVyIHRoYXQKKy8vIGNvbnRhaW5zIHRoZSByZWxldmFudCBiaXQgZm9yIHRoYXQgcGVyaXBoZXJhbC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vIFJ1biBtb2RlIHJlZ2lzdGVycworc3RhdGljIGNvbnN0IHVpbnQzMl90IGdfcHVpMzJSQ0dDUmVnc1tdID0KK3sKKyAgICBQUkNNX09fR1BUQ0xLR1IsCisgICAgUFJDTV9PX1NTSUNMS0dSLAorICAgIFBSQ01fT19VQVJUQ0xLR1IsCisgICAgUFJDTV9PX0kyQ0NMS0dSLAorICAgIFBSQ01fT19TRUNETUFDTEtHUiwKKyAgICBQUkNNX09fR1BJT0NMS0dSLAorICAgIFBSQ01fT19JMlNDTEtHUgorfTsKKworLy8gU2xlZXAgbW9kZSByZWdpc3RlcnMKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBnX3B1aTMyU0NHQ1JlZ3NbXSA9Cit7CisgICAgUFJDTV9PX0dQVENMS0dTLAorICAgIFBSQ01fT19TU0lDTEtHUywKKyAgICBQUkNNX09fVUFSVENMS0dTLAorICAgIFBSQ01fT19JMkNDTEtHUywKKyAgICBQUkNNX09fU0VDRE1BQ0xLR1MsCisgICAgUFJDTV9PX0dQSU9DTEtHUywKKyAgICBQUkNNX09fSTJTQ0xLR1MKK307CisKKy8vIERlZXAgc2xlZXAgbW9kZSByZWdpc3RlcnMKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBnX3B1aTMyRENHQ1JlZ3NbXSA9Cit7CisgICAgUFJDTV9PX0dQVENMS0dEUywKKyAgICBQUkNNX09fU1NJQ0xLR0RTLAorICAgIFBSQ01fT19VQVJUQ0xLR0RTLAorICAgIFBSQ01fT19JMkNDTEtHRFMsCisgICAgUFJDTV9PX1NFQ0RNQUNMS0dEUywKKyAgICBQUkNNX09fR1BJT0NMS0dEUywKKyAgICBQUkNNX09fSTJTQ0xLR0RTCit9OworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBtYWNybyBleHRyYWN0cyB0aGUgYXJyYXkgaW5kZXggb3V0IG9mIHRoZSBwZXJpcGhlcmFsIG51bWJlcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUFJDTV9QRVJJUEhfSU5ERVgoYSkgICgoKGEpID4+IDgpICYgMHhmKQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBtYWNybyBleHRyYWN0cyB0aGUgcGVyaXBoZXJhbCBpbnN0YW5jZSBudW1iZXIgYW5kIGdlbmVyYXRlcyBiaXQgbWFzaworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUFJDTV9QRVJJUEhfTUFTS0JJVChhKSAoMHgwMDAwMDAwMSA8PCAoKGEpICYgMHhmKSkKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENvbmZpZ3VyZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgY2xvY2suCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorUFJDTUluZkNsb2NrQ29uZmlndXJlU2V0KHVpbnQzMl90IHVpMzJDbGtEaXYsIHVpbnQzMl90IHVpMzJQb3dlck1vZGUpCit7CisgICAgdWludDMyX3QgdWkzMkRpdmlzb3I7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJDbGtEaXYgPT0gUFJDTV9DTE9DS19ESVZfMSkgfHwKKyAgICAgICAgICAgKHVpMzJDbGtEaXYgPT0gUFJDTV9DTE9DS19ESVZfMikgfHwKKyAgICAgICAgICAgKHVpMzJDbGtEaXYgPT0gUFJDTV9DTE9DS19ESVZfOCkgfHwKKyAgICAgICAgICAgKHVpMzJDbGtEaXYgPT0gUFJDTV9DTE9DS19ESVZfMzIpKTsKKyAgICBBU1NFUlQoKHVpMzJQb3dlck1vZGUgPT0gUFJDTV9SVU5fTU9ERSkgfHwKKyAgICAgICAgICAgKHVpMzJQb3dlck1vZGUgPT0gUFJDTV9TTEVFUF9NT0RFKSB8fAorICAgICAgICAgICAodWkzMlBvd2VyTW9kZSA9PSBQUkNNX0RFRVBfU0xFRVBfTU9ERSkpOworCisgICAgdWkzMkRpdmlzb3IgPSAwOworCisgICAgLy8KKyAgICAvLyBGaW5kIHRoZSBjb3JyZWN0IGRpdmlzaW9uIGZhY3Rvci4KKyAgICAvLworICAgIGlmKHVpMzJDbGtEaXYgPT0gUFJDTV9DTE9DS19ESVZfMSkKKyAgICB7CisgICAgICAgIHVpMzJEaXZpc29yID0gMHgwOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJDbGtEaXYgPT0gUFJDTV9DTE9DS19ESVZfMikKKyAgICB7CisgICAgICAgIHVpMzJEaXZpc29yID0gMHgxOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJDbGtEaXYgPT0gUFJDTV9DTE9DS19ESVZfOCkKKyAgICB7CisgICAgICAgIHVpMzJEaXZpc29yID0gMHgyOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJDbGtEaXYgPT0gUFJDTV9DTE9DS19ESVZfMzIpCisgICAgeworICAgICAgICB1aTMyRGl2aXNvciA9IDB4MzsKKyAgICB9CisKKyAgICAvLworICAgIC8vIERldGVybWluZSB0aGUgY29ycmVjdCBwb3dlciBtb2RlIHNldCB0aGUgZGl2aXNpb24gZmFjdG9yIGFjY29yZGluZ2x5LgorICAgIC8vCisgICAgaWYodWkzMlBvd2VyTW9kZSA9PSBQUkNNX1JVTl9NT0RFKQorICAgIHsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0lORlJDTEtESVZSKSA9IHVpMzJEaXZpc29yOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJQb3dlck1vZGUgPT0gUFJDTV9TTEVFUF9NT0RFKQorICAgIHsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0lORlJDTEtESVZTKSA9IHVpMzJEaXZpc29yOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJQb3dlck1vZGUgPT0gUFJDTV9ERUVQX1NMRUVQX01PREUpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fSU5GUkNMS0RJVkRTKSA9IHVpMzJEaXZpc29yOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIGluZnJhc3RydWN0dXJlIGNsb2NrIGNvbmZpZ3VyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorUFJDTUluZkNsb2NrQ29uZmlndXJlR2V0KHVpbnQzMl90IHVpMzJQb3dlck1vZGUpCit7CisgICAgdWludDMyX3QgdWkzMkNsa0RpdjsKKyAgICB1aW50MzJfdCB1aTMyRGl2aXNvcjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlBvd2VyTW9kZSA9PSBQUkNNX1JVTl9NT0RFKSB8fAorICAgICAgICAgICAodWkzMlBvd2VyTW9kZSA9PSBQUkNNX1NMRUVQX01PREUpIHx8CisgICAgICAgICAgICh1aTMyUG93ZXJNb2RlID09IFBSQ01fREVFUF9TTEVFUF9NT0RFKSk7CisKKyAgICB1aTMyQ2xrRGl2ID0gMDsKKyAgICB1aTMyRGl2aXNvciA9IDA7CisKKyAgICAvLworICAgIC8vIERldGVybWluZSB0aGUgY29ycmVjdCBwb3dlciBtb2RlLgorICAgIC8vCisgICAgaWYodWkzMlBvd2VyTW9kZSA9PSBQUkNNX1JVTl9NT0RFKQorICAgIHsKKyAgICAgICAgdWkzMkNsa0RpdiA9IEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19JTkZSQ0xLRElWUik7CisgICAgfQorICAgIGVsc2UgaWYodWkzMlBvd2VyTW9kZSA9PSBQUkNNX1NMRUVQX01PREUpCisgICAgeworICAgICAgICB1aTMyQ2xrRGl2ID0gSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0lORlJDTEtESVZTKTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyUG93ZXJNb2RlID09IFBSQ01fREVFUF9TTEVFUF9NT0RFKQorICAgIHsKKyAgICAgICAgdWkzMkNsa0RpdiA9IEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19JTkZSQ0xLRElWRFMpOworICAgIH0KKworICAgIC8vCisgICAgLy8gRmluZCB0aGUgY29ycmVjdCBkaXZpc2lvbiBmYWN0b3IuCisgICAgLy8KKyAgICBpZih1aTMyQ2xrRGl2ID09IDB4MCkKKyAgICB7CisgICAgICAgIHVpMzJEaXZpc29yID0gUFJDTV9DTE9DS19ESVZfMTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyQ2xrRGl2ID09IDB4MSkKKyAgICB7CisgICAgICAgIHVpMzJEaXZpc29yID0gUFJDTV9DTE9DS19ESVZfMjsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyQ2xrRGl2ID09IDB4MikKKyAgICB7CisgICAgICAgIHVpMzJEaXZpc29yID0gUFJDTV9DTE9DS19ESVZfODsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyQ2xrRGl2ID09IDB4MykKKyAgICB7CisgICAgICAgIHVpMzJEaXZpc29yID0gUFJDTV9DTE9DS19ESVZfMzI7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGNsb2NrIGRpdmlzaW9uIGZhY3Rvci4KKyAgICAvLworICAgIHJldHVybiB1aTMyRGl2aXNvcjsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENvbmZpZ3VyZSB0aGUgYXVkaW8gY2xvY2sgZ2VuZXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1BSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0KHVpbnQzMl90IHVpMzJDbGtDb25maWcsIHVpbnQzMl90IHVpMzJTYW1wbGVSYXRlKQoreworICAgIHVpbnQzMl90IHVpMzJSZWc7CisgICAgdWludDMyX3QgdWkzMk1zdERpdjsKKyAgICB1aW50MzJfdCB1aTMyQml0RGl2OworICAgIHVpbnQzMl90IHVpMzJXb3JkRGl2OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCEodWkzMkNsa0NvbmZpZyAmIChQUkNNX0kyU0NMS0NUTF9XQ0xLX1BIQVNFX00gfCBQUkNNX0kyU0NMS0NUTF9TTVBMX09OX1BPU0VER0VfTSkpKTsKKyAgICBBU1NFUlQoKHVpMzJTYW1wbGVSYXRlID09IEkyU19TQU1QTEVfUkFURV8xNkspIHx8CisgICAgICAgICAgICh1aTMyU2FtcGxlUmF0ZSA9PSBJMlNfU0FNUExFX1JBVEVfMjRLKSB8fAorICAgICAgICAgICAodWkzMlNhbXBsZVJhdGUgPT0gSTJTX1NBTVBMRV9SQVRFXzMySykgfHwKKyAgICAgICAgICAgKHVpMzJTYW1wbGVSYXRlID09IEkyU19TQU1QTEVfUkFURV80OEspKTsKKworICAgIHVpMzJNc3REaXYgPSAwOworICAgIHVpMzJCaXREaXYgPSAwOworICAgIHVpMzJXb3JkRGl2ID0gMDsKKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHRoZSBhdWRpbyBjbG9jayBnZW5lcmF0aW9uIGlzIGRpc2FibGVkIGJlZm9yZSByZWNvbmZpZ3VyaW5nLgorICAgIC8vCisgICAgUFJDTUF1ZGlvQ2xvY2tEaXNhYmxlKCk7CisKKyAgICAvLworICAgIC8vIERlZmluZSB0aGUgY2xvY2sgZGl2aXNpb24gZmFjdG9ycyBmb3IgdGhlIGF1ZGlvIGludGVyZmFjZS4KKyAgICAvLworICAgIHN3aXRjaCh1aTMyU2FtcGxlUmF0ZSkKKyAgICB7CisgICAgY2FzZSBJMlNfU0FNUExFX1JBVEVfMTZLIDoKKyAgICAgICAgdWkzMk1zdERpdiA9IDY7CisgICAgICAgIHVpMzJCaXREaXYgPSA2MDsKKyAgICAgICAgdWkzMldvcmREaXYgPSAyNTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJMlNfU0FNUExFX1JBVEVfMjRLIDoKKyAgICAgICAgdWkzMk1zdERpdiA9IDQ7CisgICAgICAgIHVpMzJCaXREaXYgPSA0MDsKKyAgICAgICAgdWkzMldvcmREaXYgPSAyNTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJMlNfU0FNUExFX1JBVEVfMzJLIDoKKyAgICAgICAgdWkzMk1zdERpdiA9IDM7CisgICAgICAgIHVpMzJCaXREaXYgPSAzMDsKKyAgICAgICAgdWkzMldvcmREaXYgPSAyNTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJMlNfU0FNUExFX1JBVEVfNDhLIDoKKyAgICAgICAgdWkzMk1zdERpdiA9IDI7CisgICAgICAgIHVpMzJCaXREaXYgPSAyMDsKKyAgICAgICAgdWkzMldvcmREaXYgPSAyNTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBNYWtlIHN1cmUgdG8gY29tcGVuc2F0ZSB0aGUgRnJhbWUgY2xvY2sgZGl2aXNpb24gZmFjdG9yIGlmIHVzaW5nIHNpbmdsZQorICAgIC8vIHBoYXNlIGZvcm1hdC4KKyAgICAvLworICAgIGlmKCh1aTMyQ2xrQ29uZmlnICYgUFJDTV9JMlNDTEtDVExfV0NMS19QSEFTRV9NKSA9PSBQUkNNX1dDTEtfU0lOR0xFX1BIQVNFKQorICAgIHsKKyAgICAgICAgdWkzMldvcmREaXYgLT0gMTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBjbG9jayBkaXZpc2lvbiBmYWN0b3JzLgorICAgIC8vCisgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0kyU01DTEtESVYpID0gdWkzMk1zdERpdjsKKyAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fSTJTQkNMS0RJVikgPSB1aTMyQml0RGl2OworICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19JMlNXQ0xLRElWKSA9IHVpMzJXb3JkRGl2OworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIFdvcmQgY2xvY2sgZm9ybWF0IGFuZCBwb2xhcml0eS4KKyAgICAvLworICAgIHVpMzJSZWcgPSBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fSTJTQ0xLQ1RMKSAmIH4oUFJDTV9JMlNDTEtDVExfV0NMS19QSEFTRV9NIHwKKyAgICAgICAgICAgICAgUFJDTV9JMlNDTEtDVExfU01QTF9PTl9QT1NFREdFX00pOworICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19JMlNDTEtDVEwpID0gdWkzMlJlZyB8IHVpMzJDbGtDb25maWc7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29uZmlndXJlIHRoZSBhdWRpbyBjbG9jayBnZW5lcmF0aW9uIHdpdGggbWFudWFsIHNldHRpbmcgb2YgY2xvY2sgZGl2aWRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitQUkNNQXVkaW9DbG9ja0NvbmZpZ1NldE92ZXJyaWRlKHVpbnQzMl90IHVpMzJDbGtDb25maWcsIHVpbnQzMl90IHVpMzJNc3REaXYsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQml0RGl2LCB1aW50MzJfdCB1aTMyV29yZERpdikKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCEodWkzMkNsa0NvbmZpZyAmIChQUkNNX0kyU0NMS0NUTF9XQ0xLX1BIQVNFX00gfCBQUkNNX0kyU0NMS0NUTF9TTVBMX09OX1BPU0VER0VfTSkpKTsKKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHRoZSBhdWRpbyBjbG9jayBnZW5lcmF0aW9uIGlzIGRpc2FibGVkIGJlZm9yZSByZWNvbmZpZ3VyaW5nLgorICAgIC8vCisgICAgUFJDTUF1ZGlvQ2xvY2tEaXNhYmxlKCk7CisKKyAgICAvLworICAgIC8vIE1ha2Ugc3VyZSB0byBjb21wZW5zYXRlIHRoZSBGcmFtZSBjbG9jayBkaXZpc2lvbiBmYWN0b3IgaWYgdXNpbmcgc2luZ2xlCisgICAgLy8gcGhhc2UgZm9ybWF0LgorICAgIC8vCisgICAgaWYoKHVpMzJDbGtDb25maWcgJiBQUkNNX0kyU0NMS0NUTF9XQ0xLX1BIQVNFX00pID09IFBSQ01fV0NMS19TSU5HTEVfUEhBU0UpCisgICAgeworICAgICAgICB1aTMyV29yZERpdiAtPSAxOworICAgIH0KKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGNsb2NrIGRpdmlzaW9uIGZhY3RvcnMuCisgICAgLy8KKyAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fSTJTTUNMS0RJVikgPSB1aTMyTXN0RGl2OworICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19JMlNCQ0xLRElWKSA9IHVpMzJCaXREaXY7CisgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0kyU1dDTEtESVYpID0gdWkzMldvcmREaXY7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgV29yZCBjbG9jayBmb3JtYXQgYW5kIHBvbGFyaXR5LgorICAgIC8vCisgICAgdWkzMlJlZyA9IEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19JMlNDTEtDVEwpICYgfihQUkNNX0kyU0NMS0NUTF9XQ0xLX1BIQVNFX00gfAorICAgICAgICAgICAgICBQUkNNX0kyU0NMS0NUTF9TTVBMX09OX1BPU0VER0VfTSk7CisgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0kyU0NMS0NUTCkgPSB1aTMyUmVnIHwgdWkzMkNsa0NvbmZpZzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUdXJuIHBvd2VyIG9uIGluIHBvd2VyIGRvbWFpbnMgaW4gdGhlIE1DVSBkb21haW4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitQUkNNUG93ZXJEb21haW5Pbih1aW50MzJfdCB1aTMyRG9tYWlucykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fUkZDT1JFKSB8fAorICAgICAgICAgICAodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9TRVJJQUwpIHx8CisgICAgICAgICAgICh1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1BFUklQSCkgfHwKKyAgICAgICAgICAgKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fQ1BVKSB8fAorICAgICAgICAgICAodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9WSU1TKSk7CisKKyAgICAvLworICAgIC8vIEFzc2VydCB0aGUgcmVxdWVzdCB0byBwb3dlciBvbiB0aGUgcmlnaHQgZG9tYWlucy4KKyAgICAvLworICAgIGlmKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fUkZDT1JFKQorICAgIHsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsKKyAgICAgICAgICAgICAgUFJDTV9PX1BEQ1RMMFJGQykgfD0gUFJDTV9QRENUTDBSRkNfT047CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19QRENUTDFSRkMpIHw9IFBSQ01fUERDVEwxUkZDX09OOworICAgIH0KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1NFUklBTCkKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArCisgICAgICAgICAgICAgIFBSQ01fT19QRENUTDBTRVJJQUwpIHw9IFBSQ01fUERDVEwwU0VSSUFMX09OOworICAgIH0KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1BFUklQSCkKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArCisgICAgICAgICAgICAgIFBSQ01fT19QRENUTDBQRVJJUEgpIHw9IFBSQ01fUERDVEwwUEVSSVBIX09OOworICAgIH0KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1ZJTVMpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fUERDVEwxVklNUykgfD0KKyAgICAgICAgICAgIFBSQ01fUERDVEwxVklNU19PTjsKKyAgICB9CisgICAgaWYodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9DUFUpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fUERDVEwxQ1BVKSB8PSBQUkNNX1BEQ1RMMUNQVV9PTjsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVHVybiBvZmYgYSBzcGVjaWZpYyBwb3dlciBkb21haW4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitQUkNNUG93ZXJEb21haW5PZmYodWludDMyX3QgdWkzMkRvbWFpbnMpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1JGQ09SRSkgfHwKKyAgICAgICAgICAgKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fU0VSSUFMKSB8fAorICAgICAgICAgICAodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9QRVJJUEgpIHx8CisgICAgICAgICAgICh1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX0NQVSkgfHwKKyAgICAgICAgICAgKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fVklNUykpOworCisgICAgLy8KKyAgICAvLyBBc3NlcnQgdGhlIHJlcXVlc3QgdG8gcG93ZXIgb2ZmIHRoZSByaWdodCBkb21haW5zLgorICAgIC8vCisgICAgaWYodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9SRkNPUkUpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKworICAgICAgICAgICAgICBQUkNNX09fUERDVEwwUkZDKSAmPSB+UFJDTV9QRENUTDBSRkNfT047CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19QRENUTDFSRkMpICY9IH5QUkNNX1BEQ1RMMVJGQ19PTjsKKyAgICB9CisgICAgaWYodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9TRVJJQUwpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKworICAgICAgICAgICAgICBQUkNNX09fUERDVEwwU0VSSUFMKSAmPSB+UFJDTV9QRENUTDBTRVJJQUxfT047CisgICAgfQorICAgIGlmKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fUEVSSVBIKQorICAgIHsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsKKyAgICAgICAgICAgICAgUFJDTV9PX1BEQ1RMMFBFUklQSCkgJj0gflBSQ01fUERDVEwwUEVSSVBIX09OOworICAgIH0KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1ZJTVMpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fUERDVEwxVklNUykgJj0KKyAgICAgICAgICAgIH5QUkNNX1BEQ1RMMVZJTVNfT047CisgICAgfQorICAgIGlmKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fQ1BVKQorICAgIHsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX1BEQ1RMMUNQVSkgJj0gflBSQ01fUERDVEwxQ1BVX09OOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBFbmFibGVzIGEgcGVyaXBoZXJhbCBpbiBSdW4gbW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1BSQ01QZXJpcGhlcmFsUnVuRW5hYmxlKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChQUkNNUGVyaXBoZXJhbFZhbGlkKHVpMzJQZXJpcGhlcmFsKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBtb2R1bGUgaW4gUnVuIE1vZGUuCisgICAgLy8KKyAgICBIV1JFRyhQUkNNX0JBU0UgKyBnX3B1aTMyUkNHQ1JlZ3NbUFJDTV9QRVJJUEhfSU5ERVgodWkzMlBlcmlwaGVyYWwpXSkgfD0KKyAgICAgICAgUFJDTV9QRVJJUEhfTUFTS0JJVCh1aTMyUGVyaXBoZXJhbCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRGlzYWJsZXMgYSBwZXJpcGhlcmFsIGluIFJ1biBtb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorUFJDTVBlcmlwaGVyYWxSdW5EaXNhYmxlKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChQUkNNUGVyaXBoZXJhbFZhbGlkKHVpMzJQZXJpcGhlcmFsKSk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgbW9kdWxlIGluIFJ1biBNb2RlLgorICAgIC8vCisgICAgSFdSRUcoUFJDTV9CQVNFICsgZ19wdWkzMlJDR0NSZWdzW1BSQ01fUEVSSVBIX0lOREVYKHVpMzJQZXJpcGhlcmFsKV0pICY9CisgICAgICAgIH5QUkNNX1BFUklQSF9NQVNLQklUKHVpMzJQZXJpcGhlcmFsKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBFbmFibGVzIGEgcGVyaXBoZXJhbCBpbiBzbGVlcCBtb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoUFJDTVBlcmlwaGVyYWxWYWxpZCh1aTMyUGVyaXBoZXJhbCkpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhpcyBwZXJpcGhlcmFsIGluIHNsZWVwIG1vZGUuCisgICAgLy8KKyAgICBIV1JFRyhQUkNNX0JBU0UgKyBnX3B1aTMyU0NHQ1JlZ3NbUFJDTV9QRVJJUEhfSU5ERVgodWkzMlBlcmlwaGVyYWwpXSkgfD0KKyAgICAgICAgUFJDTV9QRVJJUEhfTUFTS0JJVCh1aTMyUGVyaXBoZXJhbCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRGlzYWJsZXMgYSBwZXJpcGhlcmFsIGluIHNsZWVwIG1vZGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitQUkNNUGVyaXBoZXJhbFNsZWVwRGlzYWJsZSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoUFJDTVBlcmlwaGVyYWxWYWxpZCh1aTMyUGVyaXBoZXJhbCkpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoaXMgcGVyaXBoZXJhbCBpbiBzbGVlcCBtb2RlCisgICAgLy8KKyAgICBIV1JFRyhQUkNNX0JBU0UgKyBnX3B1aTMyU0NHQ1JlZ3NbUFJDTV9QRVJJUEhfSU5ERVgodWkzMlBlcmlwaGVyYWwpXSkgJj0KKyAgICAgICAgflBSQ01fUEVSSVBIX01BU0tCSVQodWkzMlBlcmlwaGVyYWwpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEVuYWJsZXMgYSBwZXJpcGhlcmFsIGluIGRlZXAtc2xlZXAgbW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1BSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChQUkNNUGVyaXBoZXJhbFZhbGlkKHVpMzJQZXJpcGhlcmFsKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGlzIHBlcmlwaGVyYWwgaW4gZGVlcC1zbGVlcCBtb2RlLgorICAgIC8vCisgICAgSFdSRUcoUFJDTV9CQVNFICsgZ19wdWkzMkRDR0NSZWdzW1BSQ01fUEVSSVBIX0lOREVYKHVpMzJQZXJpcGhlcmFsKV0pIHw9CisgICAgICAgIFBSQ01fUEVSSVBIX01BU0tCSVQodWkzMlBlcmlwaGVyYWwpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIERpc2FibGVzIGEgcGVyaXBoZXJhbCBpbiBkZWVwLXNsZWVwIG1vZGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitQUkNNUGVyaXBoZXJhbERlZXBTbGVlcERpc2FibGUodWludDMyX3QgdWkzMlBlcmlwaGVyYWwpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFBSQ01QZXJpcGhlcmFsVmFsaWQodWkzMlBlcmlwaGVyYWwpKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGlzIHBlcmlwaGVyYWwgaW4gRGVlcCBTbGVlcCBtb2RlLgorICAgIC8vCisgICAgSFdSRUcoUFJDTV9CQVNFICsgZ19wdWkzMkRDR0NSZWdzW1BSQ01fUEVSSVBIX0lOREVYKHVpMzJQZXJpcGhlcmFsKV0pICY9CisgICAgICAgIH5QUkNNX1BFUklQSF9NQVNLQklUKHVpMzJQZXJpcGhlcmFsKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgdGhlIHN0YXR1cyBmb3IgYSBzcGVjaWZpYyBwb3dlciBkb21haW4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorUFJDTVBvd2VyRG9tYWluU3RhdHVzKHVpbnQzMl90IHVpMzJEb21haW5zKQoreworICAgIGJvb2wgYlN0YXR1czsKKyAgICB1aW50MzJfdCB1aTMyU3RhdHVzUmVnaXN0ZXIwOworICAgIHVpbnQzMl90IHVpMzJTdGF0dXNSZWdpc3RlcjE7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJEb21haW5zICYgKFBSQ01fRE9NQUlOX1JGQ09SRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkNNX0RPTUFJTl9TRVJJQUwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJDTV9ET01BSU5fUEVSSVBIKSkpOworCisgICAgYlN0YXR1cyA9IHRydWU7CisgICAgdWkzMlN0YXR1c1JlZ2lzdGVyMCA9IEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19QRFNUQVQwKTsKKyAgICB1aTMyU3RhdHVzUmVnaXN0ZXIxID0gSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX1BEU1RBVDEpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGNvcnJlY3QgcG93ZXIgc3RhdHVzLgorICAgIC8vCisgICAgaWYodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9SRkNPUkUpCisgICAgeworICAgICAgIGJTdGF0dXMgPSBiU3RhdHVzICYmCisgICAgICAgICAgICAgICAgICgodWkzMlN0YXR1c1JlZ2lzdGVyMCAmIFBSQ01fUERTVEFUMF9SRkNfT04pIHx8CisgICAgICAgICAgICAgICAgICAodWkzMlN0YXR1c1JlZ2lzdGVyMSAmIFBSQ01fUERTVEFUMV9SRkNfT04pKTsKKyAgICB9CisgICAgaWYodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9TRVJJQUwpCisgICAgeworICAgICAgICBiU3RhdHVzID0gYlN0YXR1cyAmJiAodWkzMlN0YXR1c1JlZ2lzdGVyMCAmIFBSQ01fUERTVEFUMF9TRVJJQUxfT04pOworICAgIH0KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1BFUklQSCkKKyAgICB7CisgICAgICAgIGJTdGF0dXMgPSBiU3RhdHVzICYmICh1aTMyU3RhdHVzUmVnaXN0ZXIwICYgUFJDTV9QRFNUQVQwX1BFUklQSF9PTik7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHN0YXR1cy4KKyAgICAvLworICAgIHJldHVybiAoYlN0YXR1cyA/IFBSQ01fRE9NQUlOX1BPV0VSX09OIDogUFJDTV9ET01BSU5fUE9XRVJfT0ZGKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBQdXQgdGhlIHByb2Nlc3NvciBpbnRvIGRlZXAtc2xlZXAgbW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1BSQ01EZWVwU2xlZXAodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEVuYWJsZSBkZWVwLXNsZWVwLgorICAgIC8vCisgICAgSFdSRUcoTlZJQ19TWVNfQ1RSTCkgfD0gTlZJQ19TWVNfQ1RSTF9TTEVFUERFRVA7CisKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIGFuIGludGVycnVwdC4KKyAgICAvLworICAgIENQVXdmaSgpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIGRlZXAtc2xlZXAgc28gdGhhdCBhIGZ1dHVyZSBzbGVlcCB3aWxsIHdvcmsgY29ycmVjdGx5LgorICAgIC8vCisgICAgSFdSRUcoTlZJQ19TWVNfQ1RSTCkgJj0gfihOVklDX1NZU19DVFJMX1NMRUVQREVFUCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9wcmNtLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9wcmNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5OTQzOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3ByY20uaApAQCAtMCwwICsxLDEyMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBwcmNtLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTIzIDE0OjU2OjQ3ICswMjAwIChNb24sIDIzIE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2NDM5CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIFBSQ00KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgc3lzdGVtX2NvbnRyb2xfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIHByY21fYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19QUkNNX0hfXworI2RlZmluZSBfX1BSQ01fSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfcHJjbS5oPgorI2luY2x1ZGUgPGluYy9od19udmljLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9ydGMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NwdS5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBQUkNNSW5mQ2xvY2tDb25maWd1cmVTZXQgICAgICAgIE5PUk9NX1BSQ01JbmZDbG9ja0NvbmZpZ3VyZVNldAorICAgICNkZWZpbmUgUFJDTUluZkNsb2NrQ29uZmlndXJlR2V0ICAgICAgICBOT1JPTV9QUkNNSW5mQ2xvY2tDb25maWd1cmVHZXQKKyAgICAjZGVmaW5lIFBSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0ICAgICAgICAgTk9ST01fUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXQKKyAgICAjZGVmaW5lIFBSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0T3ZlcnJpZGUgTk9ST01fUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXRPdmVycmlkZQorICAgICNkZWZpbmUgUFJDTVBvd2VyRG9tYWluT24gICAgICAgICAgICAgICBOT1JPTV9QUkNNUG93ZXJEb21haW5PbgorICAgICNkZWZpbmUgUFJDTVBvd2VyRG9tYWluT2ZmICAgICAgICAgICAgICBOT1JPTV9QUkNNUG93ZXJEb21haW5PZmYKKyAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlICAgICAgICAgTk9ST01fUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUKKyAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZSAgICAgICAgTk9ST01fUFJDTVBlcmlwaGVyYWxSdW5EaXNhYmxlCisgICAgI2RlZmluZSBQUkNNUGVyaXBoZXJhbFNsZWVwRW5hYmxlICAgICAgIE5PUk9NX1BSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUKKyAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsU2xlZXBEaXNhYmxlICAgICAgTk9ST01fUFJDTVBlcmlwaGVyYWxTbGVlcERpc2FibGUKKyAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlICAgTk9ST01fUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUKKyAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRGlzYWJsZSAgTk9ST01fUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBEaXNhYmxlCisgICAgI2RlZmluZSBQUkNNUG93ZXJEb21haW5TdGF0dXMgICAgICAgICAgIE5PUk9NX1BSQ01Qb3dlckRvbWFpblN0YXR1cworICAgICNkZWZpbmUgUFJDTURlZXBTbGVlcCAgICAgICAgICAgICAgICAgICBOT1JPTV9QUkNNRGVlcFNsZWVwCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBkaWZmZXJlbnQgU3lzdGVtIENQVSBwb3dlciBtb2Rlcy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFBSQ01fUlVOX01PREUgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9TTEVFUF9NT0RFICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX0RFRVBfU0xFRVBfTU9ERSAgICAweDAwMDAwMDA0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIHVzZWQgZm9yIHNldHRpbmcgdGhlIGNsb2NrIGRpdmlzaW9uIGZhY3RvcnMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFBSQ01fQ0xPQ0tfRElWXzEgICAgICAgIFBSQ01fR1BUQ0xLRElWX1JBVElPX0RJVjEKKyNkZWZpbmUgUFJDTV9DTE9DS19ESVZfMiAgICAgICAgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWMgorI2RlZmluZSBQUkNNX0NMT0NLX0RJVl80ICAgICAgICBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVY0CisjZGVmaW5lIFBSQ01fQ0xPQ0tfRElWXzggICAgICAgIFBSQ01fR1BUQ0xLRElWX1JBVElPX0RJVjgKKyNkZWZpbmUgUFJDTV9DTE9DS19ESVZfMTYgICAgICAgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWMTYKKyNkZWZpbmUgUFJDTV9DTE9DS19ESVZfMzIgICAgICAgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWMzIKKyNkZWZpbmUgUFJDTV9DTE9DS19ESVZfNjQgICAgICAgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWNjQKKyNkZWZpbmUgUFJDTV9DTE9DS19ESVZfMTI4ICAgICAgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWMTI4CisjZGVmaW5lIFBSQ01fQ0xPQ0tfRElWXzI1NiAgICAgIFBSQ01fR1BUQ0xLRElWX1JBVElPX0RJVjI1NgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyB1c2VkIGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIGRvbWFpbnMgYW5kIG1lbW9yaWVzIGluIHRoZSBNQ1UKKy8vIGRvbWFpbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUFJDTV9ET01BSU5fUkZDT1JFICAgICAgMHgwMDAwMDAwMSAgLy8gUkYgQ29yZSBkb21haW4gSUQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2NrL3Bvd2VyIGNvbnRyb2wuCisjZGVmaW5lIFBSQ01fRE9NQUlOX1NFUklBTCAgICAgIDB4MDAwMDAwMDIgIC8vIFNlcmlhbCBkb21haW4gSUQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2NrL3Bvd2VyIGNvbnRyb2wuCisjZGVmaW5lIFBSQ01fRE9NQUlOX1BFUklQSCAgICAgIDB4MDAwMDAwMDQgIC8vIFBlcmlwaGVyYWwgZG9tYWluIElEIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9jay9wb3dlciBjb250cm9sLgorI2RlZmluZSBQUkNNX0RPTUFJTl9TWVNCVVMgICAgICAweDAwMDAwMDA4ICAvLyBCdXMgZG9tYWluIElEIGZvciBjbG9jay9wb3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sLgorI2RlZmluZSBQUkNNX0RPTUFJTl9WSU1TICAgICAgICAweDAwMDAwMDEwICAvLyBWSU1TIGRvbWFpbiBJRCBmb3IgY2xvY2svcG93ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbC4KKyNkZWZpbmUgUFJDTV9ET01BSU5fQ1BVICAgICAgICAgMHgwMDAwMDAyMCAgLy8gQ1BVIGRvbWFpbiBJRCBmb3IgY2xvY2svcG93ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbC4KKyNkZWZpbmUgUFJDTV9ET01BSU5fVElNRVIgICAgICAgMHgwMDAwMDA0MCAgLy8gR1BUIGRvbWFpbiBJRCBmb3IgY2xvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbC4KKyNkZWZpbmUgUFJDTV9ET01BSU5fQ0xLQ1RSTCAgICAgMHgwMDAwMDA4MCAgLy8gQ2xvY2sgQ29udHJvbCBkb21haW4gSUQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2NrL3Bvd2VyIGNvbnRyb2wuCisjZGVmaW5lIFBSQ01fRE9NQUlOX01DVSAgICAgICAgIDB4MDAwMDAxMDAgIC8vIFJlc2V0IGNvbnRyb2wgZm9yIGVudGlyZSBNQ1UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9tYWluLgorI2RlZmluZSBQUkNNX0RPTUFJTl9QT1dFUl9PRkYgICAweDAwMDAwMDAyICAvLyBUaGUgZG9tYWluIGlzIHBvd2VyZWQgb2ZmCisjZGVmaW5lIFBSQ01fRE9NQUlOX1BPV0VSX09OICAgIDB4MDAwMDAwMDEgIC8vIFRoZSBkb21haW4gaXMgcG93ZXJlZCBvbgorI2RlZmluZSBQUkNNX0RPTUFJTl9QT1dFUl9ET1dOX1JFQURZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwICAvLyBUaGUgZG9tYWluIGlzIHJlYWR5IHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvd2VyZWQgZG93bi4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHNldHRpbmcgdXAgdGhlIGF1ZGlvIGludGVyZmFjZSBpbiB0aGUgSTJTIG1vZHVsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFBSQ01fV0NMS19ORUdfRURHRSAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUFJDTV9XQ0xLX1BPU19FREdFICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBQUkNNX1dDTEtfU0lOR0xFX1BIQVNFICAweDAwMDAwMDAwCisjZGVmaW5lIFBSQ01fV0NMS19EVUFMX1BIQVNFICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9XQ0xLX1VTRVJfREVGICAgICAgMHgwMDAwMDAwNAorCisjZGVmaW5lIEkyU19TQU1QTEVfUkFURV8xNksgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX1NBTVBMRV9SQVRFXzI0SyAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMlNfU0FNUExFX1JBVEVfMzJLICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyU19TQU1QTEVfUkFURV80OEsgICAgIDB4MDAwMDAwMDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgdXNlZCBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBwZXJpcGhlcmFsIG1vZHVsZXMgaW4gdGhlIE1DVQorLy8gZG9tYWluCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBQUkNNX1BFUklQSF9USU1FUjAgICAgICAweDAwMDAwMDAwICAvLyBQZXJpcGhlcmFsIElEIGZvciBHUFQgbW9kdWxlIDAKKyNkZWZpbmUgUFJDTV9QRVJJUEhfVElNRVIxICAgICAgMHgwMDAwMDAwMSAgLy8gUGVyaXBoZXJhbCBJRCBmb3IgR1BUIG1vZHVsZSAxCisjZGVmaW5lIFBSQ01fUEVSSVBIX1RJTUVSMiAgICAgIDB4MDAwMDAwMDIgIC8vIFBlcmlwaGVyYWwgSUQgZm9yIEdQVCBtb2R1bGUgMgorI2RlZmluZSBQUkNNX1BFUklQSF9USU1FUjMgICAgICAweDAwMDAwMDAzICAvLyBQZXJpcGhlcmFsIElEIGZvciBHUFQgbW9kdWxlIDMKKyNkZWZpbmUgUFJDTV9QRVJJUEhfU1NJMCAgICAgICAgMHgwMDAwMDEwMCAgLy8gUGVyaXBoZXJhbCBJRCBmb3IgU1NJIG1vZHVsZSAwCisjZGVmaW5lIFBSQ01fUEVSSVBIX1NTSTEgICAgICAgIDB4MDAwMDAxMDEgIC8vIFBlcmlwaGVyYWwgSUQgZm9yIFNTSSBtb2R1bGUgMQorI2RlZmluZSBQUkNNX1BFUklQSF9VQVJUMCAgICAgICAweDAwMDAwMjAwICAvLyBQZXJpcGhlcmFsIElEIGZvciBVQVJUIG1vZHVsZSAwCisjZGVmaW5lIFBSQ01fUEVSSVBIX1VBUlQxICAgICAgIDB4MDAwMDAyMDEgIC8vIFBlcmlwaGVyYWwgSUQgZm9yIFVBUlQgbW9kdWxlIDEKKyNkZWZpbmUgUFJDTV9QRVJJUEhfSTJDMCAgICAgICAgMHgwMDAwMDMwMCAgLy8gUGVyaXBoZXJhbCBJRCBmb3IgSTJDIG1vZHVsZSAwCisjZGVmaW5lIFBSQ01fUEVSSVBIX0kyQzEgICAgICAgIDB4MDAwMDAzMDEgIC8vIFBlcmlwaGVyYWwgSUQgZm9yIEkyQyBtb2R1bGUgMQorI2RlZmluZSBQUkNNX1BFUklQSF9DUllQVE8gICAgICAweDAwMDAwNDAwICAvLyBQZXJpcGhlcmFsIElEIGZvciBDUllQVE8gbW9kdWxlCisjZGVmaW5lIFBSQ01fUEVSSVBIX1RSTkcgICAgICAgIDB4MDAwMDA0MDEgIC8vIFBlcmlwaGVyYWwgSUQgZm9yIFRSTkcgbW9kdWxlCisjZGVmaW5lIFBSQ01fUEVSSVBIX1VETUEgICAgICAgIDB4MDAwMDA0MDggIC8vIFBlcmlwaGVyYWwgSUQgZm9yIFVETUEgbW9kdWxlCisjZGVmaW5lIFBSQ01fUEVSSVBIX0dQSU8gICAgICAgIDB4MDAwMDA1MDAgIC8vIFBlcmlwaGVyYWwgSUQgZm9yIEdQSU8gbW9kdWxlCisjZGVmaW5lIFBSQ01fUEVSSVBIX0kyUyAgICAgICAgIDB4MDAwMDA2MDAgIC8vIFBlcmlwaGVyYWwgSUQgZm9yIEkyUyBtb2R1bGUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZmRlZiBEUklWRVJMSUJfREVCVUcKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENoZWNrcyBhIHBlcmlwaGVyYWwgaWRlbnRpZmllci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhIHBlcmlwaGVyYWwgaWRlbnRpZmllciBpcyB2YWxpZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyUGVyaXBoZXJhbCBpcyB0aGUgcGVyaXBoZXJhbCBpZGVudGlmaWVyLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiBwZXJpcGhlcmFsIGlkZW50aWZpZXI6CisvLyEgLSBcYiB0cnVlICA6IFBlcmlwaGVyYWwgaWRlbnRpZmllciBpcyB2YWxpZC4KKy8vISAtIFxiIGZhbHNlIDogUGVyaXBoZXJhbCBpZGVudGlmaWVyIGlzIGludmFsaWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIGJvb2wKK1BSQ01QZXJpcGhlcmFsVmFsaWQodWludDMyX3QgdWkzMlBlcmlwaGVyYWwpCit7CisgICAgcmV0dXJuKCh1aTMyUGVyaXBoZXJhbCA9PSBQUkNNX1BFUklQSF9USU1FUjApICAgfHwKKyAgICAgICAgICAgKHVpMzJQZXJpcGhlcmFsID09IFBSQ01fUEVSSVBIX1RJTUVSMSkgICB8fAorICAgICAgICAgICAodWkzMlBlcmlwaGVyYWwgPT0gUFJDTV9QRVJJUEhfVElNRVIyKSAgIHx8CisgICAgICAgICAgICh1aTMyUGVyaXBoZXJhbCA9PSBQUkNNX1BFUklQSF9USU1FUjMpICAgfHwKKyAgICAgICAgICAgKHVpMzJQZXJpcGhlcmFsID09IFBSQ01fUEVSSVBIX1NTSTApICAgICB8fAorICAgICAgICAgICAodWkzMlBlcmlwaGVyYWwgPT0gUFJDTV9QRVJJUEhfU1NJMSkgICAgIHx8CisgICAgICAgICAgICh1aTMyUGVyaXBoZXJhbCA9PSBQUkNNX1BFUklQSF9VQVJUMCkgICAgfHwKKyAgICAgICAgICAgKHVpMzJQZXJpcGhlcmFsID09IFBSQ01fUEVSSVBIX1VBUlQxKSAgICB8fAorICAgICAgICAgICAodWkzMlBlcmlwaGVyYWwgPT0gUFJDTV9QRVJJUEhfSTJDMCkgICAgIHx8CisgICAgICAgICAgICh1aTMyUGVyaXBoZXJhbCA9PSBQUkNNX1BFUklQSF9JMkMxKSAgICAgfHwKKyAgICAgICAgICAgKHVpMzJQZXJpcGhlcmFsID09IFBSQ01fUEVSSVBIX1VETUEpICAgICB8fAorICAgICAgICAgICAodWkzMlBlcmlwaGVyYWwgPT0gUFJDTV9QRVJJUEhfVFJORykgICAgIHx8CisgICAgICAgICAgICh1aTMyUGVyaXBoZXJhbCA9PSBQUkNNX1BFUklQSF9DUllQVE8pICAgfHwKKyAgICAgICAgICAgKHVpMzJQZXJpcGhlcmFsID09IFBSQ01fUEVSSVBIX0dQSU8pICAgICB8fAorICAgICAgICAgICAodWkzMlBlcmlwaGVyYWwgPT0gUFJDTV9QRVJJUEhfSTJTKSk7Cit9CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSBpbmZyYXN0cnVjdHVyZSBjbG9jay4KKy8vIQorLy8hIEVhY2ggU3lzdGVtIENQVSBwb3dlciBtb2RlIGhhcyBpdHMgb3duIGluZnJhc3RydWN0dXJlIGNsb2NrIGRpdmlzaW9uIGZhY3Rvci4gVGhpcworLy8hIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGZvciBzZXR0aW5nIHVwIHRoZSBkaXZpc2lvbiBmYWN0b3IgZm9yIHRoZQorLy8hIGluZnJhc3RydWN0dXJlIGNsb2NrIGluIHRoZSBhdmFpbGFibGUgcG93ZXIgbW9kZXMgZm9yIHRoZSBTeXN0ZW0gQ1BVLiBUaGUKKy8vISBpbmZyYXN0cnVjdHVyZSBjbG9jayBpcyB1c2VkIGZvciBhbGwgaW50ZXJuYWwgbG9naWMgaW4gdGhlIFBSQ00sIGFuZCBpcworLy8hIGFsd2F5cyBydW5uaW5nIGFzIGxvbmcgYXMgcG93ZXIgaXMgb24gaW4gdGhlIE1DVSB2b2x0YWdlIGRvbWFpbi4KKy8vISBUaGlzIGNhbiBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZCBmcm9tIHRoZSBBT04gV2FrZSBVcCBDb250cm9sbGVyLgorLy8hCisvLyEgXG5vdGUgSWYgc291cmNlIGNsb2NrIGlzIDQ4IE1IeiwgbWluaW11bSBjbG9jayBkaXZpZGVyIGlzIFxyZWYgUFJDTV9DTE9DS19ESVZfMi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2xrRGl2IGRldGVybWluZXMgdGhlIGRpdmlzaW9uIHJhdGlvIGZvciB0aGUgaW5mcmFzdHJ1Y3R1cmUKKy8vISBjbG9jayB3aGVuIHRoZSBkZXZpY2UgaXMgaW4gdGhlIHNwZWNpZmllZCBtb2RlLgorLy8hIEFsbG93ZWQgZGl2aXNpb24gZmFjdG9ycyBmb3IgYWxsIHRocmVlIFN5c3RlbSBDUFUgcG93ZXIgbW9kZXMgYXJlOgorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl8xCisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzIKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfOAorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl8zMgorLy8hIFxwYXJhbSB1aTMyUG93ZXJNb2RlIGRldGVybWluZXMgdGhlIFN5c3RlbSBDUFUgb3BlcmF0aW9uIG1vZGUgZm9yIHdoaWNoIHRvCisvLyEgbW9kaWZ5IHRoZSBjbG9jayBkaXZpc2lvbiBmYWN0b3IuCisvLyEgVGhlIHRocmVlIGFsbG93ZWQgcG93ZXIgbW9kZXMgYXJlOgorLy8hIC0gXHJlZiBQUkNNX1JVTl9NT0RFCisvLyEgLSBccmVmIFBSQ01fU0xFRVBfTU9ERQorLy8hIC0gXHJlZiBQUkNNX0RFRVBfU0xFRVBfTU9ERQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgUFJDTUluZkNsb2NrQ29uZmlndXJlU2V0KHVpbnQzMl90IHVpMzJDbGtEaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlBvd2VyTW9kZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgaW5mcmFzdHJ1Y3R1cmUgY2xvY2sgY29uZmlndXJhdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyUG93ZXJNb2RlIGRldGVybWluZXMgd2hpY2ggU3lzdGVtIENQVSBwb3dlciBtb2RlIHRvIHJldHVybiB0aGUKKy8vISBpbmZyYXN0cnVjdHVyZSBjbG9jayBkaXZpc2lvbiByYXRpbyBmb3IuCisvLyEgVGhlIHRocmVlIGFsbG93ZWQgcG93ZXIgbW9kZXMgYXJlOgorLy8hIC0gXHJlZiBQUkNNX1JVTl9NT0RFCisvLyEgLSBccmVmIFBSQ01fU0xFRVBfTU9ERQorLy8hIC0gXHJlZiBQUkNNX0RFRVBfU0xFRVBfTU9ERQorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBpbmZyYXN0cnVjdHVyZSBjbG9jayBkaXZpc2lvbiBmYWN0b3IgZm9yIHRoZSBzcGVjaWZpZWQKKy8vISBwb3dlciBtb2RlLgorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl8xCisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzIKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfOAorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl8zMgorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUluZkNsb2NrQ29uZmlndXJlU2V0KCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFBSQ01JbmZDbG9ja0NvbmZpZ3VyZUdldCh1aW50MzJfdCB1aTMyUG93ZXJNb2RlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVxdWVzdCBhIHBvd2VyIG9mZiBvZiB0aGUgTUNVIHZvbHRhZ2UgZG9tYWluLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmVxdWVzdCBhIHBvd2VyIG9mZiBvZiB0aGUgZW50aXJlIE1DVSB2b2x0YWdlIGRvbWFpbi4KKy8vISBUaGlzIHJlcXVlc3Qgd2lsbCBoYXZlIG5vIGFmZmVjdCB1bnRpbCBkZWVwc2xlZXAgbW9kZSBpcyByZXF1ZXN0ZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFBSQ01EZWVwU2xlZXAoKSwgXHJlZiBQUkNNTWN1UG93ZXJPZmZDYW5jZWwoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitQUkNNTWN1UG93ZXJPZmYodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEFzc2VydCB0aGUgcG93ZXIgb2ZmIHJlcXVlc3Qgc2lnbmFsLgorICAgIC8vCisgICAgSFdSRUdCSVRXKFBSQ01fQkFTRSArIFBSQ01fT19WRENUTCwgUFJDTV9WRENUTF9NQ1VfVkRfQklUTikgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDYW5jZWwgYSByZXF1ZXN0IGZvciBhIHBvd2VyIG9mZiBvZiB0aGUgTUNVIHZvbHRhZ2UgZG9tYWluLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gY2FuY2VsIGEgcmVxdWVzdCBmb3IgcG93ZXIgb2ZmIG9mIHRoZSBlbnRpcmUgTUNVCisvLyEgdm9sdGFnZSBkb21haW4uIFRoaXMgY291bGQgYmUgcmVsZXZhbnQgaWYgYSB0cmFuc2l0aW9uIHRvIHBvd2VyIGRvd24gaXMKKy8vISByZWdyZXR0ZWQgYW5kIGFuIGFwcGxpY2F0aW9uIG11c3QgYmFja3RyYWNrLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBQUkNNRGVlcFNsZWVwKCksIFxyZWYgUFJDTU1jdVBvd2VyT2ZmKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUFJDTU1jdVBvd2VyT2ZmQ2FuY2VsKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBBc3NlcnQgdGhlIHBvd2VyIG9mZiByZXF1ZXN0IHNpZ25hbC4KKyAgICAvLworICAgIEhXUkVHQklUVyhQUkNNX0JBU0UgKyBQUkNNX09fVkRDVEwsIFBSQ01fVkRDVExfTUNVX1ZEX0JJVE4pID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQXNzZXJ0IG9yIGRlLWFzc2VydCBhIHJlcXVlc3QgZm9yIHRoZSB1TERPLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmVxdWVzdCB0byBzd2l0Y2ggdG8gdGhlIG1pY3JvIExvdyBWb2x0YWdlIERyb3BvdXQKKy8vISByZWd1bGF0b3IgKHVMRE8pLiBUaGUgdUxETyBoYXMgYSBtdWNoIGxvd2VyIGNhcGFjaXR5IGZvciBzdXBwbHlpbmcgcG93ZXIKKy8vISB0byB0aGUgc3lzdGVtLiBJdCBpcyB0aGVyZWZvcmUgaW1wZXJhdGl2ZSBhbmQgc29sZWx5IHRoZSBwcm9ncmFtbWVycworLy8hIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGEgc3VmZmljaWVudCBhbW91bnQgb2YgcGVyaXBoZXJhbCBtb2R1bGVzCisvLyEgaGF2ZSBiZWVuIHR1cm5lZCBvZiBiZWZvcmUgcmVxdWVzdGluZyBhIHN3aXRjaCB0byB0aGUgdUxETy4KKy8vIQorLy8hIFxub3RlIEFzc2VydGluZyB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0IHVudGlsOgorLy8hIDEuIEZMQVNIIGhhcyBhY2NlcHRlZCB0byBiZSBwb3dlcmVkIGRvd24KKy8vISAyLiBEZWVwc2xlZXAgbXVzdCBiZSBhc3NlcnRlZAorLy8hCisvLyEgXHBhcmFtIHVpMzJFbmFibGUKKy8vISAtIDAgOiBEaXNhYmxlIHVMRE8gcmVxdWVzdAorLy8hIC0gMSA6IEVuYWJsZSB1TERPIHJlcXVlc3QKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTURlZXBTbGVlcCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1BSQ01NY3VVbGRvQ29uZmlndXJlKHVpbnQzMl90IHVpMzJFbmFibGUpCit7CisgICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVMRE8gcmVxdWVzdCBzaWduYWwuCisgICAgSFdSRUdCSVRXKFBSQ01fQkFTRSArIFBSQ01fT19WRENUTCwgUFJDTV9WRENUTF9VTERPX0JJVE4pID0gdWkzMkVuYWJsZTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0dXAgdGhlIGNsb2NrIGRpdmlzaW9uIGZhY3RvciBmb3IgdGhlIEdQLVRpbWVyIGRvbWFpbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNldCB1cCB0aGUgY2xvY2sgZGl2aXNpb24gZmFjdG9yIG9uIHRoZSBHUC1UaW1lci4KKy8vIQorLy8hIFRoZSBkaXZpc2lvbiByYXRlIHdpbGwgYmUgY29uc3RhbnQgYW5kIHVuZ2F0ZWQgZm9yIFJ1biAvIFNsZWVwIC8gRGVlcFNsZWVwIG1vZGUgd2hlbgorLy8hIGl0IGlzIHNsb3dlciB0aGFuIFBSQ01fR1BUQ0xLRElWX1JBVElPIHNldHRpbmcuCisvLyEgV2hlbiBzZXQgZmFzdGVyIHRoYW4gUFJDTV9HUFRDTEtESVZfUkFUSU8gc2V0dGluZyBQUkNNX0dQVENMS0RJVl9SQVRJTyB3aWxsIGJlIHVzZWQuCisvLyEgTm90ZSB0aGF0IHRoZSByZWdpc3RlciB3aWxsIGNvbnRhaW4gdGhlIHdyaXR0ZW4gY29udGVudCBldmVuIHRob3VnaCB0aGUgc2V0dGluZyBpcworLy8hIGZhc3RlciB0aGFuIFBSQ01fR1BUQ0xLRElWX1JBVElPIHNldHRpbmcuCisvLyEKKy8vISBcbm90ZSBGb3IgY2hhbmdlIHRvIHRha2UgZWZmZWN0LCBccmVmIFBSQ01Mb2FkU2V0KCkgbmVlZHMgdG8gYmUgY2FsbGVkCisvLyEKKy8vISBccGFyYW0gY2xrRGl2IGlzIHRoZSBkaXZpc2lvbiBmYWN0b3IgdG8gc2V0LgorLy8hIFRoZSBhcmd1bWVudCBtdXN0IGJlIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl8xCisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzIKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfNAorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl84CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzE2CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzMyCisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzY0CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzEyOAorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl8yNTYKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUdQVGltZXJDbG9ja0RpdmlzaW9uR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUFJDTUdQVGltZXJDbG9ja0RpdmlzaW9uU2V0KCB1aW50MzJfdCBjbGtEaXYgKQoreworICAgIEFTU0VSVCggY2xrRGl2IDw9IFBSQ01fR1BUQ0xLRElWX1JBVElPX0RJVjI1NiApOworCisgICAgSFdSRUcoIFBSQ01fQkFTRSArIFBSQ01fT19HUFRDTEtESVYgKSA9IGNsa0RpdjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBjbG9jayBkaXZpc2lvbiBmYWN0b3IgZm9yIHRoZSBHUC1UaW1lciBkb21haW4uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIGNsb2NrIGRpdmlzaW9uIGZhY3RvciBzZXQgZm9yIHRoZSBHUC1UaW1lci4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzEKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMgorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl80CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzgKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMTYKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMzIKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfNjQKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMTI4CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzI1NgorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUdQVGltZXJDbG9ja0RpdmlzaW9uU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1BSQ01HUFRpbWVyQ2xvY2tEaXZpc2lvbkdldCggdm9pZCApCit7CisgICAgcmV0dXJuICggSFdSRUcoIFBSQ01fQkFTRSArIFBSQ01fT19HUFRDTEtESVYgKSk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIHRoZSBhdWRpbyBjbG9jayBnZW5lcmF0aW9uLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlIHRoZSBhdWRpbyBjbG9jayBnZW5lcmF0aW9uLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1BSQ01BdWRpb0Nsb2NrRW5hYmxlKHZvaWQpCit7CisgICAgLy8gRW5hYmxlIHRoZSBhdWRpbyBjbG9jayBnZW5lcmF0aW9uLgorICAgIEhXUkVHQklUVyhQUkNNX0JBU0UgKyBQUkNNX09fSTJTQ0xLQ1RMLCBQUkNNX0kyU0NMS0NUTF9FTl9CSVROKSA9IDE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGUgdGhlIGF1ZGlvIGNsb2NrIGdlbmVyYXRpb24uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBkaXNhYmxlIHRoZSBhdWRpbyBjbG9jayBnZW5lcmF0aW9uLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1BSQ01BdWRpb0Nsb2NrRGlzYWJsZSh2b2lkKQoreworICAgIC8vIERpc2FibGUgdGhlIGF1ZGlvIGNsb2NrIGdlbmVyYXRpb24KKyAgICBIV1JFR0JJVFcoUFJDTV9CQVNFICsgUFJDTV9PX0kyU0NMS0NUTCwgUFJDTV9JMlNDTEtDVExfRU5fQklUTikgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgdGhlIGF1ZGlvIGNsb2NrIGdlbmVyYXRpb24uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBzZXQgdGhlIHNhbXBsZSByYXRlIHdoZW4gdXNpbmcgaW50ZXJuYWwgYXVkaW8gY2xvY2sKKy8vISBnZW5lcmF0aW9uIGZvciB0aGUgSTJTIG1vZHVsZS4KKy8vIQorLy8hIFxub3RlIFdoaWxlIG90aGVyIGNsb2NrcyBhcmUgcG9zc2libGUsIHRoZSBzdGFiaWxpdHkgb2YgdGhlIGZvdXIgc2FtcGxlCisvLyEgcmF0ZXMgZGVmaW5lZCBoZXJlIGFyZSBvbmx5IGd1YXJhbnRlZWQgaWYgdGhlIGNsb2NrIGlucHV0IHRvIHRoZSBJMlMgbW9kdWxlCisvLyEgaXMgNDhNSHouCisvLyEKKy8vISBccGFyYW0gdWkzMkNsa0NvbmZpZyBpcyB0aGUgYXVkaW8gY2xvY2sgY29uZmlndXJhdGlvbi4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIGEgYml0d2lzZSBPUidlZCB2YWx1ZSBjb25zaXN0aW5nIG9mOgorLy8hIC0gUGhhc2UKKy8vISAgIC0gXHJlZiBQUkNNX1dDTEtfU0lOR0xFX1BIQVNFCisvLyEgICAtIFxyZWYgUFJDTV9XQ0xLX0RVQUxfUEhBU0UKKy8vISAtIENsb2NrIHBvbGFyaXR5CisvLyEgICAtIFxyZWYgUFJDTV9XQ0xLX05FR19FREdFCisvLyEgICAtIFxyZWYgUFJDTV9XQ0xLX1BPU19FREdFCisvLyEgXHBhcmFtIHVpMzJTYW1wbGVSYXRlIGlzIHRoZSBkZXNpcmVkIGF1ZGlvIGNsb2NrIHNhbXBsZSByYXRlLgorLy8hIFRoZSBzdXBwb3J0ZWQgc2FtcGxlIHJhdGUgY29uZmlndXJhdGlvbnMgYXJlOgorLy8hIC0gXHJlZiBJMlNfU0FNUExFX1JBVEVfMTZLCisvLyEgLSBccmVmIEkyU19TQU1QTEVfUkFURV8yNEsKKy8vISAtIFxyZWYgSTJTX1NBTVBMRV9SQVRFXzMySworLy8hIC0gXHJlZiBJMlNfU0FNUExFX1JBVEVfNDhLCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFBSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0T3ZlcnJpZGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFBSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0KHVpbnQzMl90IHVpMzJDbGtDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyU2FtcGxlUmF0ZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgYXVkaW8gY2xvY2sgZ2VuZXJhdGlvbiB3aXRoIG1hbnVhbCBzZXR0aW5nIG9mIGNsb2NrIGRpdmlkZXIuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBzZXQgdGhlIGF1ZGlvIGNsb2NrIGRpdmlkZXIgdmFsdWVzIG1hbnVhbGx5LgorLy8hCisvLyEgXG5vdGUgU2VlIGhhcmR3YXJlIGRvY3VtZW50YXRpb24gYmVmb3JlIHNldHRpbmcgYXVkaW8gY2xvY2sgZGl2aWRlcnMgbWFudWFsbHkuCisvLyEKKy8vISBccGFyYW0gdWkzMkNsa0NvbmZpZyBpcyB0aGUgYXVkaW8gY2xvY2sgY29uZmlndXJhdGlvbi4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIGEgYml0d2lzZSBPUidlZCB2YWx1ZSBjb25zaXN0aW5nIG9mOgorLy8hIC0gUGhhc2UKKy8vISAgIC0gXHJlZiBQUkNNX1dDTEtfU0lOR0xFX1BIQVNFCisvLyEgICAtIFxyZWYgUFJDTV9XQ0xLX0RVQUxfUEhBU0UKKy8vISAtIENsb2NrIHBvbGFyaXR5CisvLyEgICAtIFxyZWYgUFJDTV9XQ0xLX05FR19FREdFCisvLyEgICAtIFxyZWYgUFJDTV9XQ0xLX1BPU19FREdFCisvLyEgXHBhcmFtIHVpMzJNc3REaXYgaXMgdGhlIGRlc2lyZWQgbWFzdGVyIGNsb2NrIGRpdmlkZXIuCisvLyEgXHBhcmFtIHVpMzJXb3JkRGl2IGlzIHRoZSBkZXNpcmVkIHdvcmQgY2xvY2sgZGl2aWRlci4KKy8vISBccGFyYW0gdWkzMkJpdERpdiBpcyB0aGUgZGVzaXJlZCBiaXQgY2xvY2sgZGl2aWRlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFBSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0T3ZlcnJpZGUodWludDMyX3QgdWkzMkNsa0NvbmZpZywgdWludDMyX3QgdWkzMk1zdERpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJCaXREaXYsIHVpbnQzMl90IHVpMzJXb3JkRGl2KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVXNlIHRoaXMgZnVuY3Rpb24gdG8gc3luY2hyb25pemUgdGhlIGxvYWQgc2V0dGluZ3MuCisvLyEKKy8vISBNb3N0IG9mIHRoZSBjbG9jayBzZXR0aW5ncyBpbiB0aGUgUFJDTSBtb2R1bGUgc2hvdWxkIGJlIHVwZGF0ZWQKKy8vISBzeW5jaHJvbm91c2x5LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgbG9hZCByZWdpc3RlcnMKKy8vISB0aGF0LCB3aGVuIHdyaXR0ZW4gdG8sIHdpbGwgbGV0IHRoZSBwcmV2aW91cyB3cml0dGVuIHVwZGF0ZSB2YWx1ZXMgZm9yIGFsbAorLy8hIHRoZSByZWxldmFudCByZWdpc3RlcnMgcHJvcGFnYXRlIHRocm91Z2ggdG8gaGFyZHdhcmUuCisvLyEKKy8vISBUaGUgZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBhIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgY2xvY2sgc2V0dGluZ3MgYXJlOgorLy8hIC0gXHJlZiBQUkNNQXVkaW9DbG9ja0NvbmZpZ1NldCgpCisvLyEgLSBccmVmIFBSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0T3ZlcnJpZGUoKQorLy8hIC0gXHJlZiBQUkNNQXVkaW9DbG9ja0Rpc2FibGUoKQorLy8hIC0gXHJlZiBQUkNNRG9tYWluRW5hYmxlKCkKKy8vISAtIFxyZWYgUFJDTURvbWFpbkRpc2FibGUoKQorLy8hIC0gXHJlZiBQUkNNUGVyaXBoZXJhbFJ1bkVuYWJsZSgpCisvLyEgLSBccmVmIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlKCkKKy8vISAtIFxyZWYgUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZSgpCisvLyEgLSBccmVmIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUoKQorLy8hIC0gXHJlZiBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcEVuYWJsZSgpCisvLyEgLSBccmVmIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlKCkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUxvYWRHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitQUkNNTG9hZFNldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSB1cGRhdGUgb2YgYWxsIGxvYWQgcmVsYXRlZCByZWdpc3RlcnMuCisgICAgLy8KKyAgICBIV1JFRyhQUkNNX05PTkJVRl9CQVNFICsgUFJDTV9PX0NMS0xPQURDVEwpID0gUFJDTV9DTEtMT0FEQ1RMX0xPQUQ7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENoZWNrIGlmIGFueSBvZiB0aGUgbG9hZCBzZW5zaXRpdmUgcmVnaXN0ZXIgaGFzIGJlZW4gdXBkYXRlZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgdGhlIGxvYWQgc2Vuc2l0aXZlIHJlZ2lzdGVyOgorLy8hIC0gXGMgdHJ1ZSAgOiBObyByZWdpc3RlcnMgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGxvYWQuCisvLyEgLSBcYyBmYWxzZSA6IEFueSByZWdpc3RlciBoYXMgY2hhbmdlZC4KKy8vIQorLy8hIFxzYSBccmVmIFBSQ01Mb2FkU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorUFJDTUxvYWRHZXQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgbG9hZCBzdGF0dXMuCisgICAgLy8KKyAgICByZXR1cm4gKChIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fQ0xLTE9BRENUTCkgJiBQUkNNX0NMS0xPQURDVExfTE9BRF9ET05FKSA/CisgICAgICAgICAgICB0cnVlIDogZmFsc2UpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgY2xvY2sgZG9tYWlucyBpbiB0aGUgTUNVIHZvbHRhZ2UgZG9tYWluLgorLy8hCisvLyEgXG5vdGUgQSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IHNldHVwIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGluIHRoZQorLy8hIE1DVSBkb21haW4gZm9yIHRoZSBQUkNNIG1vZHVsZS4gRm9yIHRoZSBjaGFuZ2VzIHRvIHByb3BhZ2F0ZSB0byB0aGUgc3lzdGVtCisvLyEgY29udHJvbGxlciBpbiB0aGUgQU9OIGRvbWFpbiBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIGJlCisvLyEgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIFxyZWYgUFJDTUxvYWRTZXQoKS4KKy8vIQorLy8hIFxub3RlIENsb2NrcyB3aWxsIG9ubHkgYmUgcnVubmluZyBpZiB0aGUgZG9tYWluIGlzIHBvd2VyZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkRvbWFpbnMgaXMgYSBiaXQgbWFzayBjb250YWluaW5nIHRoZSBjbG9jayBkb21haW5zIHRvIGVuYWJsZS4KKy8vISBUaGUgaW5kZXBlbmRlbnQgY2xvY2sgZG9tYWlucyBpbnNpZGUgdGhlIE1DVSB2b2x0YWdlIGRvbWFpbiB3aGljaCBjYW4gYmUKKy8vISBjb25maWd1cmVkIGFyZToKKy8vISAtIFxyZWYgUFJDTV9ET01BSU5fUkZDT1JFCisvLyEgLSBccmVmIFBSQ01fRE9NQUlOX1ZJTVMKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitQUkNNRG9tYWluRW5hYmxlKHVpbnQzMl90IHVpMzJEb21haW5zKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9SRkNPUkUpIHx8CisgICAgICAgICAgICh1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1ZJTVMpKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBjbG9jayBkb21haW4ocykuCisgICAgLy8KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1JGQ09SRSkKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19SRkNDTEtHKSA9IFBSQ01fUkZDQ0xLR19DTEtfRU47CisgICAgfQorICAgIGlmKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fVklNUykKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19WSU1TQ0xLRykgPSBQUkNNX1ZJTVNDTEtHX0NMS19FTl9NOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSBjbG9jayBkb21haW5zIGluIHRoZSBNQ1Ugdm9sdGFnZSBkb21haW4uCisvLyEKKy8vISBcbm90ZSBBIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc2V0dXAgdGhlIHNoYWRvdyByZWdpc3RlcnMgaW4gdGhlCisvLyEgTUNVIGRvbWFpbiBmb3IgdGhlIFBSQ00gbW9kdWxlLiBGb3IgdGhlIGNoYW5nZXMgdG8gcHJvcGFnYXRlIHRvIHRoZSBzeXN0ZW0KKy8vISBjb250cm9sbGVyIGluIHRoZSBBT04gZG9tYWluIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmUKKy8vISBmb2xsb3dlZCBieSBhIGNhbGwgdG8gXHJlZiBQUkNNTG9hZFNldCgpLgorLy8hCisvLyEgXG5vdGUgQ2xvY2tzIHdpbGwgb25seSBiZSBydW5uaW5nIGlmIHRoZSBkb21haW4gaXMgcG93ZXJlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyRG9tYWlucyBpcyBhIGJpdCBtYXNrIGNvbnRhaW5pbmcgdGhlIGNsb2NrIGRvbWFpbnMgdG8gZGlzYWJsZS4KKy8vISBUaGUgaW5kZXBlbmRlbnQgY2xvY2sgZG9tYWlucyBpbnNpZGUgdGhlIE1DVSB2b2x0YWdlIGRvbWFpbiBhcmU6CisvLyEgLSBccmVmIFBSQ01fRE9NQUlOX1JGQ09SRQorLy8hIC0gXHJlZiBQUkNNX0RPTUFJTl9WSU1TCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBQUkNNRG9tYWluRW5hYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUFJDTURvbWFpbkRpc2FibGUodWludDMyX3QgdWkzMkRvbWFpbnMpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1JGQ09SRSkgfHwKKyAgICAgICAgICAgKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fVklNUykpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBwb3dlciBkb21haW5zLgorICAgIC8vCisgICAgaWYodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9SRkNPUkUpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fUkZDQ0xLRykgPSAweDA7CisgICAgfQorICAgIGlmKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fVklNUykKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19WSU1TQ0xLRykgPSAweDA7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUdXJuIHBvd2VyIG9uIGluIHBvd2VyIGRvbWFpbnMgaW4gdGhlIE1DVSBkb21haW4uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byB0dXJuIG9uIHBvd2VyIGRvbWFpbnMgaW5zaWRlIHRoZSBNQ1Ugdm9sdGFnZQorLy8hIGRvbWFpbi4KKy8vIQorLy8hIFBvd2VyIG9uIGFuZCBwb3dlciBvZmYgcmVxdWVzdCBoYXMgZGlmZmVyZW50IGltcGxpY2F0aW9ucyBmb3IgdGhlCisvLyEgZGlmZmVyZW50IHBvd2VyIGRvbWFpbnMuCisvLyEgLSBSRiBDb3JlIHBvd2VyIGRvbWFpbjoKKy8vISAgIC0gUG93ZXIgT24gOiBEb21haW4gaXMgb24gb3IgaW4gdGhlIHByb2Nlc3Mgb2YgdHVybmluZyBvbi4KKy8vISAgIC0gUG93ZXIgT2ZmOiBEb21haW4gaXMgcG93ZXJlZCBkb3duIHdoZW4gU3lzdGVtIENQVSBpcyBpbiBkZWVwIHNsZWVwLiBUaGUgdGhpcmQKKy8vISAgICAgICAgICAgICAgICBvcHRpb24gZm9yIHRoZSBSRiBDb3JlIGlzIHRvIHBvd2VyIGRvd24gd2hlbiB0aGUgaXQgaXMgaWRsZS4KKy8vISAgICAgICAgICAgICAgICBUaGlzIGNhbiBiZSBzZXQgdXNpbmcgXGIgUFJDTVJmUG93ZXJEb3duV2hlbklkbGUoKQorLy8hIC0gU0VSSUFMIHBvd2VyIGRvbWFpbjoKKy8vISAgIC0gUG93ZXIgb24gOiBEb21haW4gaXMgcG93ZXJlZCBvbi4KKy8vISAgIC0gUG93ZXIgb2ZmIDogRG9tYWluIGlzIHBvd2VyZWQgb2ZmLgorLy8hIC0gUEVSSVBIRVJJQUwgcG93ZXIgZG9tYWluOgorLy8hICAgLSBQb3dlciBvbiA6IERvbWFpbiBpcyBwb3dlcmVkIG9uLgorLy8hICAgLSBQb3dlciBvZmYgOiBEb21haW4gaXMgcG93ZXJlZCBvZmYuCisvLyEgLSBWSU1TIHBvd2VyIGRvbWFpbjoKKy8vISAgIC0gUG93ZXIgT246IERvbWFpbiBpcyBwb3dlcmVkIGlmIEJ1cyBkb21haW4gaXMgcG93ZXJlZC4KKy8vISAgIC0gUG93ZXIgT2ZmOiBEb21haW4gaXMgb25seSBwb3dlcmVkIHdoZW4gQ1BVIGRvbWFpbiBpcyBvbi4KKy8vISAtIEJVUyBwb3dlciBkb21haW46CisvLyEgICAtIFBvd2VyIE9uOiBEb21haW4gaXMgb24uCisvLyEgICAtIFBvd2VyIE9mZjogRG9tYWluIGlzIG9uIGlmIHJlcXVlc3RlZCBieSBSRiBDb3JlIG9yIGlmIENQVSBkb21haW4gaXMgb24uCisvLyEgLSBDUFUgcG93ZXIgZG9tYWluOgorLy8hICAgLSBQb3dlciBPbjogRG9tYWluIGlzIG9uLgorLy8hICAgLSBQb3dlciBPZmY6IERvbWFpbiBpcyBwb3dlcmluZyBkb3duIGlmIFN5c3RlbSBDUFUgaXMgaWRsZS4gVGhpcyB3aWxsIGFsc28KKy8vISAgICAgICAgICAgICAgICBpbml0aWF0ZSBhIHBvd2VyIGRvd24gb2YgdGhlIFNSQU0gYW5kIEJVUyBwb3dlciBkb21haW5zLCB1bmxlc3MKKy8vISAgICAgICAgICAgICAgICBSRiBDb3JlIGlzIHJlcXVlc3RpbmcgdGhlbSB0byBiZSBvbi4KKy8vIQorLy8hIFxub3RlIEFmdGVyIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHRoZSBzdGF0dXMgb2YgdGhlIHBvd2VyIGRvbWFpbiBzaG91bGQKKy8vISBiZSBjaGVja2VkIHVzaW5nIGVpdGhlciBccmVmIFBSQ01Qb3dlckRvbWFpblN0YXR1cygpLgorLy8hIEFueSB3cml0ZSBvcGVyYXRpb24gdG8gYSBwb3dlciBkb21haW4gd2hpY2ggaXMgc3RpbGwgbm90IG9wZXJhdGlvbmFsIGNhbgorLy8hIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW9yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJEb21haW5zIGRldGVybWluZXMgd2hpY2ggcG93ZXIgZG9tYWlucyB0byB0dXJuIG9uLgorLy8hIFRoZSBkb21haW5zIHRoYXQgY2FuIGJlIHR1cm5lZCBvbi9vZmYgYXJlOgorLy8hIC0gXGIgUFJDTV9ET01BSU5fUkZDT1JFIDogUkYgQ29yZQorLy8hIC0gXGIgUFJDTV9ET01BSU5fU0VSSUFMIDogU1NJMCwgVUFSVDAsIEkyQzAKKy8vISAtIFxiIFBSQ01fRE9NQUlOX1BFUklQSCA6IEdQVDAsIEdQVDEsIEdQVDIsIEdQVDMsIEdQSU8sIFNTSTEsIEkyUywKKy8vISAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQSwgVUFSVDEsIEkyQzEKKy8vISAtIFxiIFBSQ01fRE9NQUlOX1ZJTVMgICA6IFNSQU0sIEZMQVNILCBST00KKy8vISAtIFxiIFBSQ01fRE9NQUlOX1NZU0JVUworLy8hIC0gXGIgUFJDTV9ET01BSU5fQ1BVCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBQUkNNUG93ZXJEb21haW5Pbih1aW50MzJfdCB1aTMyRG9tYWlucyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFR1cm4gb2ZmIGEgc3BlY2lmaWMgcG93ZXIgZG9tYWluLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gcG93ZXIgZG93biBkb21haW5zIGluc2lkZSB0aGUgTUNVIHZvbHRhZ2UKKy8vISBkb21haW4uCisvLyEKKy8vISBcbm90ZSBGb3Igc3BlY2lmaWNzIHJlZ2FyZGluZyBvbi9vZmYgY29uZmlndXJhdGlvbiBwbGVhc2Ugc2VlCisvLyEgXHJlZiBQUkNNUG93ZXJEb21haW5PbigpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJEb21haW5zIGRldGVybWluZXMgd2hpY2ggZG9tYWluIHRvIHJlcXVlc3QgYSBwb3dlciBkb3duIGZvci4KKy8vISBUaGUgZG9tYWlucyB0aGF0IGNhbiBiZSB0dXJuZWQgb24vb2ZmIGFyZToKKy8vISAtIFxiIFBSQ01fRE9NQUlOX1JGQ09SRSA6IFJGIENvcmUKKy8vISAtIFxiIFBSQ01fRE9NQUlOX1NFUklBTCA6IFNTSTAsIFVBUlQwLCBJMkMwCisvLyEgLSBcYiBQUkNNX0RPTUFJTl9QRVJJUEggOiBHUFQwLCBHUFQxLCBHUFQyLCBHUFQzLCBHUElPLCBTU0kxLCBJMlMsCisvLyEgICAgICAgICAgICAgICAgICAgICAgICAgICBETUEsIFVBUlQxLCBJMkMxCisvLyEgLSBcYiBQUkNNX0RPTUFJTl9WSU1TICAgOiBTUkFNLCBGTEFTSCwgUk9NCisvLyEgLSBcYiBQUkNNX0RPTUFJTl9TWVNCVVMKKy8vISAtIFxiIFBSQ01fRE9NQUlOX0NQVQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgUFJDTVBvd2VyRG9tYWluT2ZmKHVpbnQzMl90IHVpMzJEb21haW5zKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIFJGIGNvcmUgdG8gcG93ZXIgZG93biB3aGVuIGlkbGUuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBjb25maWd1cmUgdGhlIFJGIGNvcmUgdG8gcG93ZXIgZG93biB3aGVuIElkbGUuIFRoaXMKKy8vISBpcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgaW4gaGFyZHdhcmUgaWYgdGhlIFJGIENvcmUgcmVwb3J0cyB0aGF0IGl0IGlzCisvLyEgaWRsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitQUkNNUmZQb3dlckRvd25XaGVuSWRsZSh2b2lkKQoreworICAgIC8vIENvbmZpZ3VyZSB0aGUgUkYgcG93ZXIgZG9tYWluLgorICAgIEhXUkVHQklUVyhQUkNNX0JBU0UgKyBQUkNNX09fUERDVEwwUkZDLCBQUkNNX1BEQ1RMMFJGQ19PTl9CSVROKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgYSBwZXJpcGhlcmFsIGluIFJ1biBtb2RlLgorLy8hCisvLyEgUGVyaXBoZXJhbHMgYXJlIGVuYWJsZWQgd2l0aCB0aGlzIGZ1bmN0aW9uLiAgQXQgcG93ZXItdXAsIHNvbWUgcGVyaXBoZXJhbHMKKy8vISBhcmUgZGlzYWJsZWQ7IHRoZXkgbXVzdCBiZSBlbmFibGVkIGluIG9yZGVyIHRvIG9wZXJhdGUgb3IgcmVzcG9uZCB0bworLy8hIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcy4KKy8vIQorLy8hIFxub3RlIFRoZSBhY3R1YWwgZW5hYmxpbmcgb2YgdGhlIHBlcmlwaGVyYWwgbWF5IGJlIGRlbGF5ZWQgdW50aWwgc29tZQorLy8hIHRpbWUgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLiBDYXJlIHNob3VsZCBiZSB0YWtlbiB0byBlbnN1cmUgdGhhdCB0aGUKKy8vISBwZXJpcGhlcmFsIGlzIG5vdCBhY2Nlc3NlZCB1bnRpbCBpdCBpcyBlbmFibGVkLgorLy8hIFdoZW4gZW5hYmxpbmcgVGltZXJzIGFsd2F5cyBtYWtlIHN1cmUgdGhhdCB0aGUgZGl2aXNpb24gZmFjdG9yIGZvciB0aGUKKy8vISBcYiBQRVJCVVNDUFVDTEsgaXMgc2V0LiBUaGlzIHdpbGwgZ3VhcmFudGVlIHRoYXQgdGhlIHRpbWVycyBydW4gYXQgYQorLy8hIGNvbnRpbnVvdXMgcmF0ZSBldmVuIGlmIHRoZSBcYiBTWVNCVVNDTEsgaXMgZ2F0ZWQuCisvLyEKKy8vISBcbm90ZSBBIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc2V0dXAgdGhlIHNoYWRvdyByZWdpc3RlcnMgaW4gdGhlCisvLyEgTUNVIGRvbWFpbiBmb3IgdGhlIFBSQ00gbW9kdWxlLiBGb3IgdGhlIGNoYW5nZXMgdG8gcHJvcGFnYXRlIHRvIHRoZSBzeXN0ZW0KKy8vISBjb250cm9sbGVyIGluIHRoZSBBT04gZG9tYWluIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmUKKy8vISBmb2xsb3dlZCBieSBhIGNhbGwgdG8gXHJlZiBQUkNNTG9hZFNldCgpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQZXJpcGhlcmFsIGlzIHRoZSBwZXJpcGhlcmFsIHRvIGVuYWJsZS4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIyCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9TU0kwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1NTSTEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJDMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMkMxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0NSWVBUTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9UUk5HCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VETUEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfR1BJTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMlMKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUxvYWRTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBEaXNhYmxlcyBhIHBlcmlwaGVyYWwgaW4gUnVuIG1vZGUKKy8vIQorLy8hIFBlcmlwaGVyYWxzIGFyZSBkaXNhYmxlZCB3aXRoIHRoaXMgZnVuY3Rpb24uIE9uY2UgZGlzYWJsZWQsIHRoZXkgd2lsbCBub3QKKy8vISBvcGVyYXRlIG9yIHJlc3BvbmQgdG8gcmVnaXN0ZXIgcmVhZHMvd3JpdGVzLgorLy8hCisvLyEgXG5vdGUgQSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IHNldHVwIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGluIHRoZQorLy8hIE1DVSBkb21haW4gZm9yIHRoZSBQUkNNIG1vZHVsZS4gRm9yIHRoZSBjaGFuZ2VzIHRvIHByb3BhZ2F0ZSB0byB0aGUgc3lzdGVtCisvLyEgY29udHJvbGxlciBpbiB0aGUgQU9OIGRvbWFpbiBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIGJlCisvLyEgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIFxyZWYgUFJDTUxvYWRTZXQoKS4KKy8vIQorLy8hIFxub3RlIFRoZSBhY3R1YWwgZGlzYWJsaW5nIG9mIHRoZSBwZXJpcGhlcmFsIG1heSBiZSBkZWxheWVkIHVudGlsIHNvbWUKKy8vISB0aW1lIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4gQ2FyZSBzaG91bGQgYmUgdGFrZW4gYnkgdGhlIHVzZXIgdG8KKy8vISBlbnN1cmUgdGhhdCB0aGUgcGVyaXBoZXJhbCBpcyBub3QgYWNjZXNzZWQgaW4gdGhpcyBpbnRlcnZhbCBhcyB0aGlzIG1pZ2h0CisvLyEgY2F1c2UgdGhlIHN5c3RlbSB0byBoYW5nLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQZXJpcGhlcmFsIGlzIHRoZSBwZXJpcGhlcmFsIHRvIGRpc2FibGUuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMgorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjMKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfU1NJMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9TU0kxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VBUlQwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VBUlQxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0kyQzAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJDMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9DUllQVE8KKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVFJORworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9VRE1BCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0dQSU8KKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJTCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFBSQ01Mb2FkU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBQUkNNUGVyaXBoZXJhbFJ1bkRpc2FibGUodWludDMyX3QgdWkzMlBlcmlwaGVyYWwpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIGEgcGVyaXBoZXJhbCBpbiBzbGVlcCBtb2RlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBwZXJpcGhlcmFsIHRvIGNvbnRpbnVlIG9wZXJhdGluZyB3aGVuIHRoZSBwcm9jZXNzb3IKKy8vISBnb2VzIGludG8gc2xlZXAgbW9kZS4gU2luY2UgdGhlIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZSBkb2VzCisvLyEgbm90IGNoYW5nZSwgYW55IHBlcmlwaGVyYWwgY2FuIHNhZmVseSBjb250aW51ZSBvcGVyYXRpbmcgd2hpbGUgdGhlCisvLyEgcHJvY2Vzc29yIGlzIGluIHNsZWVwIG1vZGUsIGFuZCBjYW4gdGhlcmVmb3JlIHdha2UgdGhlIHByb2Nlc3NvciBmcm9tIHNsZWVwCisvLyEgbW9kZS4KKy8vIQorLy8hIFxub3RlIEEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBzZXR1cCB0aGUgc2hhZG93IHJlZ2lzdGVycyBpbiB0aGUKKy8vISBNQ1UgZG9tYWluIGZvciB0aGUgUFJDTSBtb2R1bGUuIEZvciB0aGUgY2hhbmdlcyB0byBwcm9wYWdhdGUgdG8gdGhlIHN5c3RlbQorLy8hIGNvbnRyb2xsZXIgaW4gdGhlIEFPTiBkb21haW4gYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZQorLy8hIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byBccmVmIFBSQ01Mb2FkU2V0KCkuCisvLyEKKy8vISBccGFyYW0gdWkzMlBlcmlwaGVyYWwgaXMgdGhlIHBlcmlwaGVyYWwgdG8gZW5hYmxlIGluIHNsZWVwIG1vZGUuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMgorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjMKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfU1NJMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9TU0kxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VBUlQwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VBUlQxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0kyQzAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJDMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9DUllQVE8KKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVFJORworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9VRE1BCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0dQSU8KKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJTCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFBSQ01Mb2FkU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBQUkNNUGVyaXBoZXJhbFNsZWVwRW5hYmxlKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgYSBwZXJpcGhlcmFsIGluIHNsZWVwIG1vZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNhdXNlcyBhIHBlcmlwaGVyYWwgdG8gc3RvcCBvcGVyYXRpbmcgd2hlbiB0aGUgcHJvY2Vzc29yIGdvZXMKKy8vISBpbnRvIHNsZWVwIG1vZGUuIERpc2FibGluZyBwZXJpcGhlcmFscyB3aGlsZSBpbiBzbGVlcCBtb2RlIGhlbHBzIHRvIGxvd2VyCisvLyEgdGhlIGN1cnJlbnQgZHJhdyBvZiB0aGUgZGV2aWNlLiBJZiBlbmFibGVkICh2aWEgXHJlZiBQUkNNUGVyaXBoZXJhbFJ1bkVuYWJsZSgpKSwKKy8vISB0aGUgcGVyaXBoZXJhbCB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzdW1lIG9wZXJhdGlvbiB3aGVuIHRoZSBwcm9jZXNzb3IKKy8vISBsZWF2ZXMgc2xlZXAgbW9kZSwgbWFpbnRhaW5pbmcgaXRzIGVudGlyZSBzdGF0ZSBmcm9tIGJlZm9yZSBzbGVlcCBtb2RlIHdhcworLy8hIGVudGVyZWQuCisvLyEKKy8vISBcbm90ZSBBIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc2V0dXAgdGhlIHNoYWRvdyByZWdpc3RlcnMgaW4gdGhlCisvLyEgTUNVIGRvbWFpbiBmb3IgdGhlIFBSQ00gbW9kdWxlLiBGb3IgdGhlIGNoYW5nZXMgdG8gcHJvcGFnYXRlIHRvIHRoZSBzeXN0ZW0KKy8vISBjb250cm9sbGVyIGluIHRoZSBBT04gZG9tYWluIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmUKKy8vISBmb2xsb3dlZCBieSBhIGNhbGwgdG8gXHJlZiBQUkNNTG9hZFNldCgpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQZXJpcGhlcmFsIGlzIHRoZSBwZXJpcGhlcmFsIHRvIGRpc2FibGUgaW4gc2xlZXAgbW9kZS4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIyCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9TU0kwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1NTSTEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJDMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMkMxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0NSWVBUTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9UUk5HCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VETUEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfR1BJTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMlMKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUxvYWRTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFBSQ01QZXJpcGhlcmFsU2xlZXBEaXNhYmxlKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBhIHBlcmlwaGVyYWwgaW4gZGVlcC1zbGVlcCBtb2RlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBwZXJpcGhlcmFsIHRvIGNvbnRpbnVlIG9wZXJhdGluZyB3aGVuIHRoZSBwcm9jZXNzb3IKKy8vISBnb2VzIGludG8gZGVlcC1zbGVlcCBtb2RlLiAgU2luY2UgdGhlIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZQorLy8hIG1heSBjaGFuZ2UsIG5vdCBhbGwgcGVyaXBoZXJhbHMgY2FuIHNhZmVseSBjb250aW51ZSBvcGVyYXRpbmcgd2hpbGUgdGhlCisvLyEgcHJvY2Vzc29yIGlzIGluIHNsZWVwIG1vZGUuIFRoaXMgaW4gdHVybiBkZXBlbmRzIG9uIHRoZSBjaG9zZW4gcG93ZXIgbW9kZS4KKy8vISBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBtYWtlIHNlbnNpYmxlIGNob2ljZXMuCisvLyEKKy8vISBcbm90ZSBBIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc2V0dXAgdGhlIHNoYWRvdyByZWdpc3RlcnMgaW4gdGhlCisvLyEgTUNVIGRvbWFpbiBmb3IgdGhlIFBSQ00gbW9kdWxlLiBGb3IgdGhlIGNoYW5nZXMgdG8gcHJvcGFnYXRlIHRvIHRoZSBzeXN0ZW0KKy8vISBjb250cm9sbGVyIGluIHRoZSBBT04gZG9tYWluIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmUKKy8vISBmb2xsb3dlZCBieSBhIGNhbGwgdG8gXHJlZiBQUkNNTG9hZFNldCgpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQZXJpcGhlcmFsIGlzIHRoZSBwZXJpcGhlcmFsIHRvIGVuYWJsZSBpbiBkZWVwLXNsZWVwIG1vZGUuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMgorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjMKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfU1NJMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9TU0kxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VBUlQwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VBUlQxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0kyQzAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJDMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9DUllQVE8KKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVFJORworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9VRE1BCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0dQSU8KKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJTCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFBSQ01Mb2FkU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcEVuYWJsZSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIGEgcGVyaXBoZXJhbCBpbiBkZWVwLXNsZWVwIG1vZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNhdXNlcyBhIHBlcmlwaGVyYWwgdG8gc3RvcCBvcGVyYXRpbmcgd2hlbiB0aGUgcHJvY2Vzc29yIGdvZXMKKy8vISBpbnRvIGRlZXAtc2xlZXAgbW9kZS4gIERpc2FibGluZyBwZXJpcGhlcmFscyB3aGlsZSBpbiBkZWVwLXNsZWVwIG1vZGUgaGVscHMKKy8vISB0byBsb3dlciB0aGUgY3VycmVudCBkcmF3IG9mIHRoZSBkZXZpY2UsIGFuZCBjYW4ga2VlcCBwZXJpcGhlcmFscyB0aGF0CisvLyEgcmVxdWlyZSBhIHBhcnRpY3VsYXIgY2xvY2sgZnJlcXVlbmN5IGZyb20gb3BlcmF0aW5nIHdoZW4gdGhlIGNsb2NrIGNoYW5nZXMKKy8vISBhcyBhIHJlc3VsdCBvZiBlbnRlcmluZyBkZWVwLXNsZWVwIG1vZGUuICBJZiBlbmFibGVkICh2aWEKKy8vISBccmVmIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlKCkpLCB0aGUgcGVyaXBoZXJhbCB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzdW1lCisvLyEgb3BlcmF0aW9uIHdoZW4gdGhlIHByb2Nlc3NvciBsZWF2ZXMgZGVlcC1zbGVlcCBtb2RlLCBtYWludGFpbmluZyBpdHMgZW50aXJlCisvLyEgc3RhdGUgZnJvbSBiZWZvcmUgZGVlcC1zbGVlcCBtb2RlIHdhcyBlbnRlcmVkLgorLy8hCisvLyEgXG5vdGUgQSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IHNldHVwIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGluIHRoZQorLy8hIE1DVSBkb21haW4gZm9yIHRoZSBQUkNNIG1vZHVsZS4gRm9yIHRoZSBjaGFuZ2VzIHRvIHByb3BhZ2F0ZSB0byB0aGUgc3lzdGVtCisvLyEgY29udHJvbGxlciBpbiB0aGUgQU9OIGRvbWFpbiBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIGJlCisvLyEgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIFxyZWYgUFJDTUxvYWRTZXQoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyUGVyaXBoZXJhbCBpcyB0aGUgcGVyaXBoZXJhbCB0byBkaXNhYmxlIGluIGRlZXAtc2xlZXAgbW9kZS4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIyCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9TU0kwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1NTSTEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJDMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMkMxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0NSWVBUTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9UUk5HCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VETUEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfR1BJTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMlMKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUxvYWRTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRGlzYWJsZSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgc3RhdHVzIGZvciBhIHNwZWNpZmljIHBvd2VyIGRvbWFpbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IHBvd2VyIHN0YXR1cyBvZiBvbmUgb3IgbW9yZQorLy8hIHBvd2VyIGRvbWFpbnMuCisvLyEKKy8vISBccGFyYW0gdWkzMkRvbWFpbnMgZGV0ZXJtaW5lcyB3aGljaCBkb21haW4gdG8gZ2V0IHRoZSBwb3dlciBzdGF0dXMgZm9yLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBPUidlZCBjb21iaW5hdGlvbiBvZiBvbmUgb3Igc2V2ZXJhbCBvZjoKKy8vISAtIFxyZWYgUFJDTV9ET01BSU5fUkZDT1JFIDogUkYgQ29yZS4KKy8vISAtIFxyZWYgUFJDTV9ET01BSU5fU0VSSUFMIDogU1NJMCwgVUFSVDAsIEkyQzAKKy8vISAtIFxyZWYgUFJDTV9ET01BSU5fUEVSSVBIIDogR1BUMCwgR1BUMSwgR1BUMiwgR1BUMywgR1BJTywgU1NJMSwgSTJTLCBETUEsIFVBUlQxLCBJMkMxCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIHRoZSByZXF1ZXN0ZWQgZG9tYWluczoKKy8vISAtIFxyZWYgUFJDTV9ET01BSU5fUE9XRVJfT04gIDogVGhlIHNwZWNpZmllZCBkb21haW5zIGFyZSBcYiBhbGwgcG93ZXJlZCB1cC4KKy8vISBUaGlzIHN0YXR1cyBpcyB1bmNvbmRpdGlvbmFsIGFuZCB0aGUgcG93ZXJlZCB1cCBzdGF0dXMgaXMgZ3VhcmFudGVlZC4KKy8vISAtIFxyZWYgUFJDTV9ET01BSU5fUE9XRVJfT0ZGIDogQW55IG9mIHRoZSBkb21haW5zIGFyZSBwb3dlcmVkIGRvd24uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFBSQ01Qb3dlckRvbWFpblN0YXR1cyh1aW50MzJfdCB1aTMyRG9tYWlucyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybiB0aGUgYWNjZXNzIHN0YXR1cyBvZiB0aGUgUkYgQ29yZS4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBSRiBDb3JlIGlzIG9uIGFuZCByZWFkeSB0byBiZSBhY2Nlc3NlZC4KKy8vISBBY2Nlc3NpbmcgcmVnaXN0ZXIgb3IgbWVtb3JpZXMgdGhhdCBhcmUgbm90IHBvd2VyZWQgYW5kIGNsb2NrZWQgd2lsbAorLy8hIGNhdXNlIGEgYnVzIGZhdWx0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGFjY2VzcyBzdGF0dXMgb2YgdGhlIFJGIENvcmUuCisvLyEgLSBcYyB0cnVlICA6IFJGIENvcmUgY2FuIGJlIGFjY2Vzc2VkLgorLy8hIC0gXGMgZmFsc2UgOiBSRiBDb3JlIGRvbWFpbiBpcyBub3QgcmVhZHkgZm9yIGFjY2Vzcy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorUFJDTVJmUmVhZHkodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgcmVhZHkgc3RhdHVzIG9mIHRoZSBSRiBDb3JlLgorICAgIC8vCisgICAgcmV0dXJuICgoSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX1BEU1RBVDFSRkMpICYKKyAgICAgICAgICAgICBQUkNNX1BEU1RBVDFSRkNfT04pID8gdHJ1ZSA6IGZhbHNlKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBQdXQgdGhlIHByb2Nlc3NvciBpbnRvIHNsZWVwIG1vZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHBsYWNlcyB0aGUgcHJvY2Vzc29yIGludG8gc2xlZXAgbW9kZTsgaXQgZG9lcyBub3QgcmV0dXJuCisvLyEgdW50aWwgdGhlIHByb2Nlc3NvciByZXR1cm5zIHRvIHJ1biBtb2RlLiAgVGhlIHBlcmlwaGVyYWxzIHRoYXQgYXJlIGVuYWJsZWQKKy8vISB2aWEgXGJyaWVmIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUoKSBjb250aW51ZSB0byBvcGVyYXRlIGFuZCBjYW4gd2FrZSB1cCB0aGUKKy8vISBwcm9jZXNzb3IuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitQUkNNU2xlZXAodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIGFuIGludGVycnVwdC4KKyAgICAvLworICAgIENQVXdmaSgpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBQdXQgdGhlIHByb2Nlc3NvciBpbnRvIGRlZXAtc2xlZXAgbW9kZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcGxhY2VzIHRoZSBwcm9jZXNzb3IgaW50byBkZWVwLXNsZWVwIG1vZGU7IGl0IGRvZXMgbm90IHJldHVybgorLy8hIHVudGlsIHRoZSBwcm9jZXNzb3IgcmV0dXJucyB0byBydW4gbW9kZS4gIFRoZSBwZXJpcGhlcmFscyB0aGF0IGFyZSBlbmFibGVkCisvLyEgdmlhIFxyZWYgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUoKSBjb250aW51ZSB0byBvcGVyYXRlIGFuZCBjYW4gd2FrZSB1cAorLy8hIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBQUkNNRGVlcFNsZWVwKHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgQ0FDSEUgUkFNIHJldGVudGlvbgorLy8hCisvLyEgRW5hYmxlcyBDQUNIRSBSQU0gcmV0ZW50aW9uIG9uIGJvdGggVklNU19UUkFNIGFuZCBWSU1TX0NSQU0KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitQUkNNQ2FjaGVSZXRlbnRpb25FbmFibGUoIHZvaWQgKQoreworICAgSFdSRUcoIFBSQ01fQkFTRSArIFBSQ01fT19SQU1SRVRFTiApIHw9IFBSQ01fUkFNUkVURU5fVklNU19NOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIENBQ0hFIFJBTSByZXRlbnRpb24KKy8vIQorLy8hIERpc2FibGVzIENBQ0hFIFJBTSByZXRlbnRpb24gb24gYm90aCBWSU1TX1RSQU0gYW5kIFZJTVNfQ1JBTQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1BSQ01DYWNoZVJldGVudGlvbkRpc2FibGUoIHZvaWQgKQoreworICAgSFdSRUcoIFBSQ01fQkFTRSArIFBSQ01fT19SQU1SRVRFTiApICY9IH5QUkNNX1JBTVJFVEVOX1ZJTVNfTTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9QUkNNSW5mQ2xvY2tDb25maWd1cmVTZXQKKyAgICAgICAgI3VuZGVmICBQUkNNSW5mQ2xvY2tDb25maWd1cmVTZXQKKyAgICAgICAgI2RlZmluZSBQUkNNSW5mQ2xvY2tDb25maWd1cmVTZXQgICAgICAgIFJPTV9QUkNNSW5mQ2xvY2tDb25maWd1cmVTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1BSQ01JbmZDbG9ja0NvbmZpZ3VyZUdldAorICAgICAgICAjdW5kZWYgIFBSQ01JbmZDbG9ja0NvbmZpZ3VyZUdldAorICAgICAgICAjZGVmaW5lIFBSQ01JbmZDbG9ja0NvbmZpZ3VyZUdldCAgICAgICAgUk9NX1BSQ01JbmZDbG9ja0NvbmZpZ3VyZUdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXQKKyAgICAgICAgI3VuZGVmICBQUkNNQXVkaW9DbG9ja0NvbmZpZ1NldAorICAgICAgICAjZGVmaW5lIFBSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0ICAgICAgICAgUk9NX1BSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9QUkNNQXVkaW9DbG9ja0NvbmZpZ1NldE92ZXJyaWRlCisgICAgICAgICN1bmRlZiAgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXRPdmVycmlkZQorICAgICAgICAjZGVmaW5lIFBSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0T3ZlcnJpZGUgUk9NX1BSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0T3ZlcnJpZGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1BSQ01Qb3dlckRvbWFpbk9uCisgICAgICAgICN1bmRlZiAgUFJDTVBvd2VyRG9tYWluT24KKyAgICAgICAgI2RlZmluZSBQUkNNUG93ZXJEb21haW5PbiAgICAgICAgICAgICAgIFJPTV9QUkNNUG93ZXJEb21haW5PbgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUFJDTVBvd2VyRG9tYWluT2ZmCisgICAgICAgICN1bmRlZiAgUFJDTVBvd2VyRG9tYWluT2ZmCisgICAgICAgICNkZWZpbmUgUFJDTVBvd2VyRG9tYWluT2ZmICAgICAgICAgICAgICBST01fUFJDTVBvd2VyRG9tYWluT2ZmCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9QUkNNUGVyaXBoZXJhbFJ1bkVuYWJsZQorICAgICAgICAjdW5kZWYgIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlCisgICAgICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUgICAgICAgICBST01fUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1BSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZQorICAgICAgICAjdW5kZWYgIFBSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZQorICAgICAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZSAgICAgICAgUk9NX1BSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZQorICAgICAgICAjdW5kZWYgIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUKKyAgICAgICAgI2RlZmluZSBQUkNNUGVyaXBoZXJhbFNsZWVwRW5hYmxlICAgICAgIFJPTV9QUkNNUGVyaXBoZXJhbFNsZWVwRW5hYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9QUkNNUGVyaXBoZXJhbFNsZWVwRGlzYWJsZQorICAgICAgICAjdW5kZWYgIFBSQ01QZXJpcGhlcmFsU2xlZXBEaXNhYmxlCisgICAgICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxTbGVlcERpc2FibGUgICAgICBST01fUFJDTVBlcmlwaGVyYWxTbGVlcERpc2FibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1BSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlCisgICAgICAgICN1bmRlZiAgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUKKyAgICAgICAgI2RlZmluZSBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcEVuYWJsZSAgIFJPTV9QUkNNUGVyaXBoZXJhbERlZXBTbGVlcEVuYWJsZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBEaXNhYmxlCisgICAgICAgICN1bmRlZiAgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBEaXNhYmxlCisgICAgICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBEaXNhYmxlICBST01fUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBEaXNhYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9QUkNNUG93ZXJEb21haW5TdGF0dXMKKyAgICAgICAgI3VuZGVmICBQUkNNUG93ZXJEb21haW5TdGF0dXMKKyAgICAgICAgI2RlZmluZSBQUkNNUG93ZXJEb21haW5TdGF0dXMgICAgICAgICAgIFJPTV9QUkNNUG93ZXJEb21haW5TdGF0dXMKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1BSQ01EZWVwU2xlZXAKKyAgICAgICAgI3VuZGVmICBQUkNNRGVlcFNsZWVwCisgICAgICAgICNkZWZpbmUgUFJDTURlZXBTbGVlcCAgICAgICAgICAgICAgICAgICBST01fUFJDTURlZXBTbGVlcAorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19QUkNNX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9wd3JfY3RybC5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcHdyX2N0cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2E3ODg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcHdyX2N0cmwuYwpAQCAtMCwwICsxLDg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgcHdyX2N0cmwuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDQtMDUgMTU6Mjk6MDEgKzAyMDAgKFR1ZSwgMDUgQXByIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5OTkKKyoKKyogIERlc2NyaXB0aW9uOiAgICBQb3dlciBDb250cm9sIGRyaXZlci4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvcHdyX2N0cmwuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIFBvd2VyQ3RybFNvdXJjZVNldAorICAgICNkZWZpbmUgUG93ZXJDdHJsU291cmNlU2V0ICAgICAgICAgICAgICBOT1JPTV9Qb3dlckN0cmxTb3VyY2VTZXQKKyNlbmRpZgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2V0IChSZXF1ZXN0KSB0aGUgbWFpbiBwb3dlciBzb3VyY2UKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitQb3dlckN0cmxTb3VyY2VTZXQodWludDMyX3QgdWkzMlBvd2VyQ29uZmlnKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlBvd2VyQ29uZmlnID09IFBXUkNUUkxfUFdSU1JDX0RDREMpIHx8CisgICAgICAgICAgICh1aTMyUG93ZXJDb25maWcgPT0gUFdSQ1RSTF9QV1JTUkNfR0xETykgfHwKKyAgICAgICAgICAgKHVpMzJQb3dlckNvbmZpZyA9PSBQV1JDVFJMX1BXUlNSQ19VTERPKSk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgcG93ZXIuCisgICAgLy8KKyAgICBpZih1aTMyUG93ZXJDb25maWcgPT0gUFdSQ1RSTF9QV1JTUkNfRENEQykgeworICAgICAgICBIV1JFRyhBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUFdSQ1RMKSB8PQorICAgICAgICAgICAgKEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfRU4gfCBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0FDVElWRSk7CisgICAgfQorICAgIGVsc2UgaWYgKHVpMzJQb3dlckNvbmZpZyA9PSBQV1JDVFJMX1BXUlNSQ19HTERPKQorICAgIHsKKyAgICAgICAgSFdSRUcoQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1BXUkNUTCkgJj0KKyAgICAgICAgICAgIH4oQU9OX1NZU0NUTF9QV1JDVExfRENEQ19FTiB8IEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfQUNUSVZFKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgUFJDTU1jdVVsZG9Db25maWd1cmUodHJ1ZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcHdyX2N0cmwuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3B3cl9jdHJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4OGY5OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3B3cl9jdHJsLmgKQEAgLTAsMCArMSwzMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBwd3JfY3RybC5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNC0wNSAxNToyOTowMSArMDIwMCAoVHVlLCAwNSBBcHIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk5OQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBTeXN0ZW0gUG93ZXIgQ29udHJvbC4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgc3lzdGVtX2NvbnRyb2xfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIHB3cmN0cmxfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19QV1JfQ1RSTF9IX18KKyNkZWZpbmUgX19QV1JfQ1RSTF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od19hb25fd3VjLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9zeXNjdGwuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX3J0Yy5oPgorI2luY2x1ZGUgPGluYy9od19hZGlfMl9yZWZzeXMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL29zYy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9jcHUuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcHJjbS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9hb25faW9jLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2FkaS5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBQb3dlckN0cmxTb3VyY2VTZXQgICAgICAgICAgICAgIE5PUk9NX1Bvd2VyQ3RybFNvdXJjZVNldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgc3lzdGVtIHBvd2VyIHN0YXRlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUFdSQ1RSTF9BQ1RJVkUgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQV1JDVFJMX1NUQU5EQlkgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBXUkNUUkxfUE9XRVJfRE9XTiAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFdSQ1RSTF9TSFVURE9XTiAgICAgICAgMHgwMDAwMDAwOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIHBvd2VyIGNvbmZpZ3VyYXRpb24gaW4gdGhlIEFPTiBTeXN0ZW0gQ29udHJvbCAxLjIgVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUFdSQ1RSTF9JT1NFRzNfRU5BQkxFICAgMHgwMDAwMDgwMAorI2RlZmluZSBQV1JDVFJMX0lPU0VHMl9FTkFCTEUgICAweDAwMDAwNDAwCisjZGVmaW5lIFBXUkNUUkxfSU9TRUczX0RJU0FCTEUgIDB4MDAwMDAyMDAKKyNkZWZpbmUgUFdSQ1RSTF9JT1NFRzJfRElTQUJMRSAgMHgwMDAwMDEwMAorI2RlZmluZSBQV1JDVFJMX1BXUlNSQ19EQ0RDICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBXUkNUUkxfUFdSU1JDX0dMRE8gICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUFdSQ1RSTF9QV1JTUkNfVUxETyAgICAgMHgwMDAwMDAwMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIHZhcmlvdXMgcmVzZXQgc291cmNlIGZvciB0aGUgZGV2aWNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUFdSQ1RSTF9SU1RfUE9XRVJfT04gICAgMHgwMDAwMDAwMCAgLy8gUmVzZXQgYnkgcG93ZXIgb24KKyNkZWZpbmUgUFdSQ1RSTF9SU1RfUElOICAgICAgICAgMHgwMDAwMDAwMSAgLy8gUGluIHJlc2V0CisjZGVmaW5lIFBXUkNUUkxfUlNUX1ZERFNfQk9EICAgIDB4MDAwMDAwMDIgIC8vIFZERFMgQnJvd24gT3V0IERldGVjdAorI2RlZmluZSBQV1JDVFJMX1JTVF9WRERfQk9EICAgICAweDAwMDAwMDAzICAvLyBWREQgQnJvd24gT3V0IERldGVjdAorI2RlZmluZSBQV1JDVFJMX1JTVF9WRERSX0JPRCAgICAweDAwMDAwMDA0ICAvLyBWRERSIEJyb3duIE91dCBEZXRlY3QKKyNkZWZpbmUgUFdSQ1RSTF9SU1RfQ0xLX0xPU1MgICAgMHgwMDAwMDAwNSAgLy8gQ2xvY2sgbG9zcyBSZXNldAorI2RlZmluZSBQV1JDVFJMX1JTVF9TV19QSU4gICAgICAweDAwMDAwMDA2ICAvLyBTWVNSRVNFVCBvciBwaW4gcmVzZXQKKyNkZWZpbmUgUFdSQ1RSTF9SU1RfV0FSTSAgICAgICAgMHgwMDAwMDAwNyAgLy8gUmVzZXQgdmlhIFBSQ00gd2FybSByZXNldCByZXF1ZXN0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgKFJlcXVlc3QpIHRoZSBtYWluIHBvd2VyIHNvdXJjZS4KKy8vIQorLy8hIFxub3RlIFRoZSBzeXN0ZW0gd2lsbCBuZXZlciBhbGxvdyBhIHN3aXRjaCB0byB0aGUgXHJlZiBQV1JDVFJMX1BXUlNSQ19VTERPCisvLyEgd2hlbiBpbiBhY3RpdmUgbW9kZS4gVGhpcyBpcyBvbmx5IGFsbG93ZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGluIGxvd2VyIHBvd2VyCisvLyEgbW9kZSB3aGVyZSBubyBjb2RlIGlzIGV4ZWN1dGluZyBhbmQgbm8gcGVyaXBoZXJhbHMgYXJlIGFjdGl2ZS4KKy8vISBBc3N1bWluZyB0aGF0IHRoZXJlIGlzIGFuIGV4dGVybmFsIGNhcGFjaXRvciBhdmFpbGFibGUgZm9yIHRoZQorLy8hIFxyZWYgUFdSQ1RSTF9QV1JTUkNfRENEQyB0aGUgc3lzdGVtIGNhbiBkeW5hbWljYWxseSBzd2l0Y2ggYmFjayBhbmQgZm9ydGgKKy8vISBiZXR3ZWVuIHRoZSB0d28gd2hlbiBpbiBhY3RpdmUgbW9kZS4KKy8vIQorLy8hIFxub3RlIFRoZSBzeXN0ZW0gd2lsbCBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0byB0aGUgR0xETyAvIERDREMgd2hlbiB3YWtpbmcKKy8vISB1cCBmcm9tIGEgbG93IHBvd2VyIG1vZGUuCisvLyEKKy8vISBccGFyYW0gdWkzMlBvd2VyQ29uZmlnIGlzIGEgYml0bWFzayBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgcG93ZXIgc291cmNlLgorLy8hIC0gXHJlZiBQV1JDVFJMX1BXUlNSQ19EQ0RDCisvLyEgLSBccmVmIFBXUkNUUkxfUFdSU1JDX0dMRE8KKy8vISAtIFxyZWYgUFdSQ1RSTF9QV1JTUkNfVUxETworLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgUG93ZXJDdHJsU291cmNlU2V0KHVpbnQzMl90IHVpMzJQb3dlckNvbmZpZyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgbWFpbiBwb3dlciBzb3VyY2UuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY3VycmVudCBhY3RpdmUgcG93ZXIgc291cmNlLgorLy8hCisvLyEgV2hlbiB0aGUgU3lzdGVtIENQVSBpcyBhY3RpdmUgaXQgY2FuIG5ldmVyIGJlIHBvd2VyZWQgYnkgdUxETyBhcyB0aGlzCisvLyEgaXMgdG9vIHdlYWsgYSBwb3dlciBzb3VyY2UuCisvLyEKKy8vISBcbm90ZSBVc2luZyB0aGUgRENEQyBwb3dlciBzdXBwbHkgcmVxdWlyZXMgYW4gZXh0ZXJuYWwgaW5kdWN0b3IuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIG1haW4gcG93ZXIgc291cmNlLgorLy8hIC0gXHJlZiBQV1JDVFJMX1BXUlNSQ19EQ0RDCisvLyEgLSBccmVmIFBXUkNUUkxfUFdSU1JDX0dMRE8KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1Bvd2VyQ3RybFNvdXJjZUdldCh2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJQb3dlckNvbmZpZzsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHBvd2VyIHNvdXJjZQorICAgIC8vCisgICAgdWkzMlBvd2VyQ29uZmlnID0gSFdSRUcoQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1BXUkNUTCk7CisgICAgaWYodWkzMlBvd2VyQ29uZmlnICYgQU9OX1NZU0NUTF9QV1JDVExfRENEQ19BQ1RJVkUpCisgICAgeworICAgICAgICByZXR1cm4gKFBXUkNUUkxfUFdSU1JDX0RDREMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gKFBXUkNUUkxfUFdSU1JDX0dMRE8pOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgT0JTT0xFVEU6IEdldCB0aGUgbGFzdCBrbm93biByZXNldCBzb3VyY2Ugb2YgdGhlIHN5c3RlbS4KKy8vIQorLy8hIFJlY29tbWVuZCB1c2luZyBmdW5jdGlvbiBccmVmIFN5c0N0cmxSZXNldFNvdXJjZUdldCgpIGluc3RlYWQgb2YgdGhpcyBvbmUuCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHJlc2V0IHNvdXJjZSBidXQgZG9lcyBub3QgY292ZXIgaWYgd2FraW5nIHVwIGZyb20gc2h1dGRvd24uCisvLyEgVGhpcyBmdW5jdGlvbiBjYW4gYmUgc2VlbiBhcyBhIHN1YnNldCBvZiBmdW5jdGlvbiBccmVmIFN5c0N0cmxSZXNldFNvdXJjZUdldCgpCisvLyEgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIG9uZSBvZiB0aGUga25vd24gcmVzZXQgdmFsdWVzLgorLy8hIFRoZSBwb3NzaWJsZSByZXNldCBzb3VyY2VzIGFyZToKKy8vISAtIFxyZWYgUFdSQ1RSTF9SU1RfUE9XRVJfT04KKy8vISAtIFxyZWYgUFdSQ1RSTF9SU1RfUElOCisvLyEgLSBccmVmIFBXUkNUUkxfUlNUX1ZERFNfQk9ECisvLyEgLSBccmVmIFBXUkNUUkxfUlNUX1ZERF9CT0QKKy8vISAtIFxyZWYgUFdSQ1RSTF9SU1RfVkREUl9CT0QKKy8vISAtIFxyZWYgUFdSQ1RSTF9SU1RfQ0xLX0xPU1MKKy8vISAtIFxyZWYgUFdSQ1RSTF9SU1RfU1dfUElOCisvLyEgLSBccmVmIFBXUkNUUkxfUlNUX1dBUk0KKy8vIQorLy8hIFxzYSBccmVmIFN5c0N0cmxSZXNldFNvdXJjZUdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitQb3dlckN0cmxSZXNldFNvdXJjZUdldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gIEdldCB0aGUgcmVzZXQgc291cmNlLgorICAgIC8vCisgICAgcmV0dXJuICgoIEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUkVTRVRDVEwgKSAmCisgICAgICAgIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX00gKSA+PgorICAgICAgICBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19TICkgOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbG9zZSB0aGUgbGF0Y2hlcyBpbiB0aGUgQU9OIElPQyBpbnRlcmZhY2UgYW5kIGluIHBhZHJpbmcuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byB1bmZyZWV6ZSB0aGUgY3VycmVudCB2YWx1ZSByZXRhaW5lZCBvbiB0aGUgSU9zIGRyaXZlbgorLy8hIGJ5IHRoZSBkZXZpY2UuIFRoaXMgaXMgcmVxdWlyZWQgaWYgaXQgaXMgZGVzaXJlZCB0byBtYWludGFpbiB0aGUgbGV2ZWwgb2YKKy8vISBhbnkgSU8gZHJpdmVuIHdoZW4gZ29pbmcgdGhyb3VnaCBhIHNodXRkb3duL3Bvd2VyZG93biBjeWNsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUG93ZXJDdHJsSU9GcmVlemVEaXNhYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUG93ZXJDdHJsSU9GcmVlemVFbmFibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIENsb3NlIHRoZSBJTyBsYXRjaGVzIGF0IEFPTl9JT0MgbGV2ZWwgYW5kIGluIHRoZSBwYWRyaW5nLgorICAgIC8vCisgICAgQU9OSU9DRnJlZXplRW5hYmxlKCk7CisgICAgSFdSRUcoQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1NMRUVQQ1RMKSA9IDA7CisgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NZTkMpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIE9wZW4gdGhlIGxhdGNoZXMgaW4gdGhlIEFPTiBJT0MgaW50ZXJmYWNlIGFuZCBpbiBwYWRyaW5nLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gdW5mcmVlemUgdGhlIGxhdGNoZXMgdGhhdCByZXRhaW5lZCBvbiB0aGUgSU9zIGRyaXZlbgorLy8hIGJ5IHRoZSBkZXZpY2UuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBhcHBsaWNhdGlvbgorLy8hIGhhcyByZWluaXRpYWxpemVkIHRoZSBJTyBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBkcml2ZSB0aGUgSU9zIHRvIHRoZQorLy8hIGRlc2lyZWQgbGV2ZWwuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFBvd2VyQ3RybElPRnJlZXplRW5hYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUG93ZXJDdHJsSU9GcmVlemVEaXNhYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBPcGVuIHRoZSBJTyBsYXRjaGVzIGF0IEFPTl9JT0MgbGV2ZWwgYW5kIGluIHRoZSBwYWRyaW5nCisgICAgLy8KKyAgICBBT05JT0NGcmVlemVEaXNhYmxlKCk7CisgICAgSFdSRUcoQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1NMRUVQQ1RMKSA9IDE7CisgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NZTkMpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9Qb3dlckN0cmxTb3VyY2VTZXQKKyAgICAgICAgI3VuZGVmICBQb3dlckN0cmxTb3VyY2VTZXQKKyAgICAgICAgI2RlZmluZSBQb3dlckN0cmxTb3VyY2VTZXQgICAgICAgICAgICAgIFJPTV9Qb3dlckN0cmxTb3VyY2VTZXQKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fUFdSX0NUUkxfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX2JsZV9jbWQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX2JsZV9jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDZjYTAyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfYmxlX2NtZC5oCkBAIC0wLDAgKzEsMTExMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJmX2JsZV9jbWQuaAorKiAgUmV2aXNlZDogICAgICAgICQgJAorKiAgUmV2aXNpb246ICAgICAgICQgJAorKgorKiAgRGVzY3JpcHRpb246ICAgIENDMjZ4eC9DQzEzeHggQVBJIGZvciBCbHVldG9vdGggTG93IEVuZXJneSBjb21tYW5kcworKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0JMRV9DTURfSAorI2RlZmluZSBfX0JMRV9DTURfSAorCisjaWZuZGVmIF9fUkZDX1NUUlVDVAorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9fUkZDX1NUUlVDVCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKQorI2Vsc2UKKyNkZWZpbmUgX19SRkNfU1RSVUNUCisjZW5kaWYKKyNlbmRpZgorCisvLyEgXGFkZHRvZ3JvdXAgcmZjCisvLyEgQHsKKworLy8hIFxhZGR0b2dyb3VwIGJsZV9jbWQKKy8vISBAeworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3JmX21haWxib3guaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZfY29tbW9uX2NtZC5oPgorCit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZVJhZGlvT3BfcyByZmNfYmxlUmFkaW9PcF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX1NMQVZFX3MgcmZjX0NNRF9CTEVfU0xBVkVfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9NQVNURVJfcyByZmNfQ01EX0JMRV9NQVNURVJfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9BRFZfcyByZmNfQ01EX0JMRV9BRFZfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9BRFZfRElSX3MgcmZjX0NNRF9CTEVfQURWX0RJUl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX0FEVl9OQ19zIHJmY19DTURfQkxFX0FEVl9OQ190OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX0FEVl9TQ0FOX3MgcmZjX0NNRF9CTEVfQURWX1NDQU5fdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9TQ0FOTkVSX3MgcmZjX0NNRF9CTEVfU0NBTk5FUl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX0lOSVRJQVRPUl9zIHJmY19DTURfQkxFX0lOSVRJQVRPUl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX0dFTkVSSUNfUlhfcyByZmNfQ01EX0JMRV9HRU5FUklDX1JYX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfVFhfVEVTVF9zIHJmY19DTURfQkxFX1RYX1RFU1RfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9BRFZfUEFZTE9BRF9zIHJmY19DTURfQkxFX0FEVl9QQVlMT0FEX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZU1hc3RlclNsYXZlUGFyX3MgcmZjX2JsZU1hc3RlclNsYXZlUGFyX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZU1hc3RlclBhcl9zIHJmY19ibGVNYXN0ZXJQYXJfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlU2xhdmVQYXJfcyByZmNfYmxlU2xhdmVQYXJfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlQWR2UGFyX3MgcmZjX2JsZUFkdlBhcl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVTY2FubmVyUGFyX3MgcmZjX2JsZVNjYW5uZXJQYXJfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlSW5pdGlhdG9yUGFyX3MgcmZjX2JsZUluaXRpYXRvclBhcl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVHZW5lcmljUnhQYXJfcyByZmNfYmxlR2VuZXJpY1J4UGFyX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZVR4VGVzdFBhcl9zIHJmY19ibGVUeFRlc3RQYXJfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlTWFzdGVyU2xhdmVPdXRwdXRfcyByZmNfYmxlTWFzdGVyU2xhdmVPdXRwdXRfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlQWR2T3V0cHV0X3MgcmZjX2JsZUFkdk91dHB1dF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVTY2FubmVyT3V0cHV0X3MgcmZjX2JsZVNjYW5uZXJPdXRwdXRfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlSW5pdGlhdG9yT3V0cHV0X3MgcmZjX2JsZUluaXRpYXRvck91dHB1dF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVHZW5lcmljUnhPdXRwdXRfcyByZmNfYmxlR2VuZXJpY1J4T3V0cHV0X3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZVR4VGVzdE91dHB1dF9zIHJmY19ibGVUeFRlc3RPdXRwdXRfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlV2hpdGVMaXN0RW50cnlfcyByZmNfYmxlV2hpdGVMaXN0RW50cnlfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlUnhTdGF0dXNfcyByZmNfYmxlUnhTdGF0dXNfdDsKKworLy8hIFxhZGR0b2dyb3VwIGJsZVJhZGlvT3AKKy8vISBAeworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlUmFkaW9PcF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENoYW5uZWwgdG8gdXNlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDAmbmRhc2g7Mzk6IEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWwgbnVtYmVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDYwJm5kYXNoOzIwNzogQ3VzdG9tIGZyZXF1ZW5jeTsgKDIzMDAgKyA8Y29kZT5jaGFubmVsPC9jb2RlPikgTUh6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI1NTogVXNlIGV4aXN0aW5nIGZyZXF1ZW5jeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgaW5pdDo3OyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiA8Y29kZT5iT3ZlcnJpZGU8L2NvZGU+ID0gMSBvciBjdXN0b20gZnJlcXVlbmN5IGlzIHVzZWQ6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IERvIG5vdCB1c2Ugd2hpdGVuaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyIHZhbHVlOiBJbml0aWFsaXphdGlvbiBmb3IgNy1iaXQgTEZTUiB3aGl0ZW5lcgorICAgICAgdWludDhfdCBiT3ZlcnJpZGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFVzZSBkZWZhdWx0IHdoaXRlbmluZyBmb3IgQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbHM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT3ZlcnJpZGUgd2hpdGVuaW5nIGluaXRpYWxpemF0aW9uIHdpdGggdmFsdWUgb2YgaW5pdAorICAgfSB3aGl0ZW5pbmc7CisgICB1aW50OF90KiBwUGFyYW1zOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIHBhcmFtZXRlciBzdHJ1Y3R1cmUKKyAgIHVpbnQ4X3QqIHBPdXRwdXQ7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgb3V0cHV0IHN0cnVjdHVyZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQkxFX1NMQVZFCisvLyEgQHsKKyNkZWZpbmUgQ01EX0JMRV9TTEFWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDEKKy8vISBCTEUgU2xhdmUgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9TTEFWRV9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgxODAxCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQ4X3QgY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBDaGFubmVsIHRvIHVzZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwJm5kYXNoOzM5OiBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsIG51bWJlcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA2MCZuZGFzaDsyMDc6IEN1c3RvbSBmcmVxdWVuY3k7ICgyMzAwICsgPGNvZGU+Y2hhbm5lbDwvY29kZT4pIE1Iejxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyNTU6IFVzZSBleGlzdGluZyBmcmVxdWVuY3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGluaXQ6NzsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSWYgPGNvZGU+Yk92ZXJyaWRlPC9jb2RlPiA9IDEgb3IgY3VzdG9tIGZyZXF1ZW5jeSBpcyB1c2VkOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBEbyBub3QgdXNlIHdoaXRlbmluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlciB2YWx1ZTogSW5pdGlhbGl6YXRpb24gZm9yIDctYml0IExGU1Igd2hpdGVuZXIKKyAgICAgIHVpbnQ4X3QgYk92ZXJyaWRlOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBVc2UgZGVmYXVsdCB3aGl0ZW5pbmcgZm9yIEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWxzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE92ZXJyaWRlIHdoaXRlbmluZyBpbml0aWFsaXphdGlvbiB3aXRoIHZhbHVlIG9mIGluaXQKKyAgIH0gd2hpdGVuaW5nOworICAgcmZjX2JsZVNsYXZlUGFyX3QgKnBQYXJhbXM7ICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBwYXJhbWV0ZXIgc3RydWN0dXJlCisgICByZmNfYmxlTWFzdGVyU2xhdmVPdXRwdXRfdCAqcE91dHB1dDsgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIG91dHB1dCBzdHJ1Y3R1cmUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0JMRV9NQVNURVIKKy8vISBAeworI2RlZmluZSBDTURfQkxFX01BU1RFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMgorLy8hIEJMRSBNYXN0ZXIgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9NQVNURVJfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MTgwMgorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICB1aW50OF90IGNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQ2hhbm5lbCB0byB1c2U8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMCZuZGFzaDszOTogQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbCBudW1iZXI8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgNjAmbmRhc2g7MjA3OiBDdXN0b20gZnJlcXVlbmN5OyAoMjMwMCArIDxjb2RlPmNoYW5uZWw8L2NvZGU+KSBNSHo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjU1OiBVc2UgZXhpc3RpbmcgZnJlcXVlbmN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBpbml0Ojc7ICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIElmIDxjb2RlPmJPdmVycmlkZTwvY29kZT4gPSAxIG9yIGN1c3RvbSBmcmVxdWVuY3kgaXMgdXNlZDo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogRG8gbm90IHVzZSB3aGl0ZW5pbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXIgdmFsdWU6IEluaXRpYWxpemF0aW9uIGZvciA3LWJpdCBMRlNSIHdoaXRlbmVyCisgICAgICB1aW50OF90IGJPdmVycmlkZToxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogVXNlIGRlZmF1bHQgd2hpdGVuaW5nIGZvciBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBPdmVycmlkZSB3aGl0ZW5pbmcgaW5pdGlhbGl6YXRpb24gd2l0aCB2YWx1ZSBvZiBpbml0CisgICB9IHdoaXRlbmluZzsKKyAgIHJmY19ibGVNYXN0ZXJQYXJfdCAqcFBhcmFtczsgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgcGFyYW1ldGVyIHN0cnVjdHVyZQorICAgcmZjX2JsZU1hc3RlclNsYXZlT3V0cHV0X3QgKnBPdXRwdXQ7IC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBvdXRwdXQgc3RydWN0dXJlCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9CTEVfQURWCisvLyEgQHsKKyNkZWZpbmUgQ01EX0JMRV9BRFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDMKKy8vISBCTEUgQ29ubmVjdGFibGUgVW5kaXJlY3RlZCBBZHZlcnRpc2VyIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfQURWX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDE4MDMKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENoYW5uZWwgdG8gdXNlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDAmbmRhc2g7Mzk6IEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWwgbnVtYmVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDYwJm5kYXNoOzIwNzogQ3VzdG9tIGZyZXF1ZW5jeTsgKDIzMDAgKyA8Y29kZT5jaGFubmVsPC9jb2RlPikgTUh6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI1NTogVXNlIGV4aXN0aW5nIGZyZXF1ZW5jeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgaW5pdDo3OyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiA8Y29kZT5iT3ZlcnJpZGU8L2NvZGU+ID0gMSBvciBjdXN0b20gZnJlcXVlbmN5IGlzIHVzZWQ6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IERvIG5vdCB1c2Ugd2hpdGVuaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyIHZhbHVlOiBJbml0aWFsaXphdGlvbiBmb3IgNy1iaXQgTEZTUiB3aGl0ZW5lcgorICAgICAgdWludDhfdCBiT3ZlcnJpZGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFVzZSBkZWZhdWx0IHdoaXRlbmluZyBmb3IgQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbHM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT3ZlcnJpZGUgd2hpdGVuaW5nIGluaXRpYWxpemF0aW9uIHdpdGggdmFsdWUgb2YgaW5pdAorICAgfSB3aGl0ZW5pbmc7CisgICByZmNfYmxlQWR2UGFyX3QgKnBQYXJhbXM7ICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIHBhcmFtZXRlciBzdHJ1Y3R1cmUKKyAgIHJmY19ibGVBZHZPdXRwdXRfdCAqcE91dHB1dDsgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgb3V0cHV0IHN0cnVjdHVyZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQkxFX0FEVl9ESVIKKy8vISBAeworI2RlZmluZSBDTURfQkxFX0FEVl9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwNAorLy8hIEJMRSBDb25uZWN0YWJsZSBEaXJlY3RlZCBBZHZlcnRpc2VyIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfQURWX0RJUl9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgxODA0CisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQ4X3QgY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBDaGFubmVsIHRvIHVzZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwJm5kYXNoOzM5OiBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsIG51bWJlcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA2MCZuZGFzaDsyMDc6IEN1c3RvbSBmcmVxdWVuY3k7ICgyMzAwICsgPGNvZGU+Y2hhbm5lbDwvY29kZT4pIE1Iejxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyNTU6IFVzZSBleGlzdGluZyBmcmVxdWVuY3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGluaXQ6NzsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSWYgPGNvZGU+Yk92ZXJyaWRlPC9jb2RlPiA9IDEgb3IgY3VzdG9tIGZyZXF1ZW5jeSBpcyB1c2VkOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBEbyBub3QgdXNlIHdoaXRlbmluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlciB2YWx1ZTogSW5pdGlhbGl6YXRpb24gZm9yIDctYml0IExGU1Igd2hpdGVuZXIKKyAgICAgIHVpbnQ4X3QgYk92ZXJyaWRlOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBVc2UgZGVmYXVsdCB3aGl0ZW5pbmcgZm9yIEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWxzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE92ZXJyaWRlIHdoaXRlbmluZyBpbml0aWFsaXphdGlvbiB3aXRoIHZhbHVlIG9mIGluaXQKKyAgIH0gd2hpdGVuaW5nOworICAgcmZjX2JsZUFkdlBhcl90ICpwUGFyYW1zOyAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBwYXJhbWV0ZXIgc3RydWN0dXJlCisgICByZmNfYmxlQWR2T3V0cHV0X3QgKnBPdXRwdXQ7ICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIG91dHB1dCBzdHJ1Y3R1cmUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0JMRV9BRFZfTkMKKy8vISBAeworI2RlZmluZSBDTURfQkxFX0FEVl9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwNQorLy8hIEJMRSBOb24tQ29ubmVjdGFibGUgQWR2ZXJ0aXNlciBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX0FEVl9OQ19zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgxODA1CisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQ4X3QgY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBDaGFubmVsIHRvIHVzZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwJm5kYXNoOzM5OiBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsIG51bWJlcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA2MCZuZGFzaDsyMDc6IEN1c3RvbSBmcmVxdWVuY3k7ICgyMzAwICsgPGNvZGU+Y2hhbm5lbDwvY29kZT4pIE1Iejxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyNTU6IFVzZSBleGlzdGluZyBmcmVxdWVuY3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGluaXQ6NzsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSWYgPGNvZGU+Yk92ZXJyaWRlPC9jb2RlPiA9IDEgb3IgY3VzdG9tIGZyZXF1ZW5jeSBpcyB1c2VkOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBEbyBub3QgdXNlIHdoaXRlbmluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlciB2YWx1ZTogSW5pdGlhbGl6YXRpb24gZm9yIDctYml0IExGU1Igd2hpdGVuZXIKKyAgICAgIHVpbnQ4X3QgYk92ZXJyaWRlOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBVc2UgZGVmYXVsdCB3aGl0ZW5pbmcgZm9yIEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWxzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE92ZXJyaWRlIHdoaXRlbmluZyBpbml0aWFsaXphdGlvbiB3aXRoIHZhbHVlIG9mIGluaXQKKyAgIH0gd2hpdGVuaW5nOworICAgcmZjX2JsZUFkdlBhcl90ICpwUGFyYW1zOyAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBwYXJhbWV0ZXIgc3RydWN0dXJlCisgICByZmNfYmxlQWR2T3V0cHV0X3QgKnBPdXRwdXQ7ICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIG91dHB1dCBzdHJ1Y3R1cmUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0JMRV9BRFZfU0NBTgorLy8hIEB7CisjZGVmaW5lIENNRF9CTEVfQURWX1NDQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODA2CisvLyEgQkxFIFNjYW5uYWJsZSBVbmRpcmVjdGVkIEFkdmVydGlzZXIgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9BRFZfU0NBTl9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgxODA2CisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQ4X3QgY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBDaGFubmVsIHRvIHVzZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwJm5kYXNoOzM5OiBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsIG51bWJlcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA2MCZuZGFzaDsyMDc6IEN1c3RvbSBmcmVxdWVuY3k7ICgyMzAwICsgPGNvZGU+Y2hhbm5lbDwvY29kZT4pIE1Iejxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyNTU6IFVzZSBleGlzdGluZyBmcmVxdWVuY3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGluaXQ6NzsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSWYgPGNvZGU+Yk92ZXJyaWRlPC9jb2RlPiA9IDEgb3IgY3VzdG9tIGZyZXF1ZW5jeSBpcyB1c2VkOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBEbyBub3QgdXNlIHdoaXRlbmluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlciB2YWx1ZTogSW5pdGlhbGl6YXRpb24gZm9yIDctYml0IExGU1Igd2hpdGVuZXIKKyAgICAgIHVpbnQ4X3QgYk92ZXJyaWRlOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBVc2UgZGVmYXVsdCB3aGl0ZW5pbmcgZm9yIEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWxzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE92ZXJyaWRlIHdoaXRlbmluZyBpbml0aWFsaXphdGlvbiB3aXRoIHZhbHVlIG9mIGluaXQKKyAgIH0gd2hpdGVuaW5nOworICAgcmZjX2JsZUFkdlBhcl90ICpwUGFyYW1zOyAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBwYXJhbWV0ZXIgc3RydWN0dXJlCisgICByZmNfYmxlQWR2T3V0cHV0X3QgKnBPdXRwdXQ7ICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIG91dHB1dCBzdHJ1Y3R1cmUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0JMRV9TQ0FOTkVSCisvLyEgQHsKKyNkZWZpbmUgQ01EX0JMRV9TQ0FOTkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDcKKy8vISBCTEUgU2Nhbm5lciBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX1NDQU5ORVJfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MTgwNworICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICB1aW50OF90IGNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQ2hhbm5lbCB0byB1c2U8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMCZuZGFzaDszOTogQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbCBudW1iZXI8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgNjAmbmRhc2g7MjA3OiBDdXN0b20gZnJlcXVlbmN5OyAoMjMwMCArIDxjb2RlPmNoYW5uZWw8L2NvZGU+KSBNSHo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjU1OiBVc2UgZXhpc3RpbmcgZnJlcXVlbmN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBpbml0Ojc7ICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIElmIDxjb2RlPmJPdmVycmlkZTwvY29kZT4gPSAxIG9yIGN1c3RvbSBmcmVxdWVuY3kgaXMgdXNlZDo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogRG8gbm90IHVzZSB3aGl0ZW5pbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXIgdmFsdWU6IEluaXRpYWxpemF0aW9uIGZvciA3LWJpdCBMRlNSIHdoaXRlbmVyCisgICAgICB1aW50OF90IGJPdmVycmlkZToxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogVXNlIGRlZmF1bHQgd2hpdGVuaW5nIGZvciBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBPdmVycmlkZSB3aGl0ZW5pbmcgaW5pdGlhbGl6YXRpb24gd2l0aCB2YWx1ZSBvZiBpbml0CisgICB9IHdoaXRlbmluZzsKKyAgIHJmY19ibGVTY2FubmVyUGFyX3QgKnBQYXJhbXM7ICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgcGFyYW1ldGVyIHN0cnVjdHVyZQorICAgcmZjX2JsZVNjYW5uZXJPdXRwdXRfdCAqcE91dHB1dDsgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBvdXRwdXQgc3RydWN0dXJlCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9CTEVfSU5JVElBVE9SCisvLyEgQHsKKyNkZWZpbmUgQ01EX0JMRV9JTklUSUFUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDgKKy8vISBCTEUgSW5pdGlhdG9yIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfSU5JVElBVE9SX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDE4MDgKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENoYW5uZWwgdG8gdXNlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDAmbmRhc2g7Mzk6IEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWwgbnVtYmVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDYwJm5kYXNoOzIwNzogQ3VzdG9tIGZyZXF1ZW5jeTsgKDIzMDAgKyA8Y29kZT5jaGFubmVsPC9jb2RlPikgTUh6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI1NTogVXNlIGV4aXN0aW5nIGZyZXF1ZW5jeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgaW5pdDo3OyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiA8Y29kZT5iT3ZlcnJpZGU8L2NvZGU+ID0gMSBvciBjdXN0b20gZnJlcXVlbmN5IGlzIHVzZWQ6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IERvIG5vdCB1c2Ugd2hpdGVuaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyIHZhbHVlOiBJbml0aWFsaXphdGlvbiBmb3IgNy1iaXQgTEZTUiB3aGl0ZW5lcgorICAgICAgdWludDhfdCBiT3ZlcnJpZGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFVzZSBkZWZhdWx0IHdoaXRlbmluZyBmb3IgQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbHM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT3ZlcnJpZGUgd2hpdGVuaW5nIGluaXRpYWxpemF0aW9uIHdpdGggdmFsdWUgb2YgaW5pdAorICAgfSB3aGl0ZW5pbmc7CisgICByZmNfYmxlSW5pdGlhdG9yUGFyX3QgKnBQYXJhbXM7ICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIHBhcmFtZXRlciBzdHJ1Y3R1cmUKKyAgIHJmY19ibGVJbml0aWF0b3JPdXRwdXRfdCAqcE91dHB1dDsgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgb3V0cHV0IHN0cnVjdHVyZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQkxFX0dFTkVSSUNfUlgKKy8vISBAeworI2RlZmluZSBDTURfQkxFX0dFTkVSSUNfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwOQorLy8hIEJMRSBHZW5lcmljIFJlY2VpdmVyIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfR0VORVJJQ19SWF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgxODA5CisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQ4X3QgY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBDaGFubmVsIHRvIHVzZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwJm5kYXNoOzM5OiBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsIG51bWJlcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA2MCZuZGFzaDsyMDc6IEN1c3RvbSBmcmVxdWVuY3k7ICgyMzAwICsgPGNvZGU+Y2hhbm5lbDwvY29kZT4pIE1Iejxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyNTU6IFVzZSBleGlzdGluZyBmcmVxdWVuY3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGluaXQ6NzsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSWYgPGNvZGU+Yk92ZXJyaWRlPC9jb2RlPiA9IDEgb3IgY3VzdG9tIGZyZXF1ZW5jeSBpcyB1c2VkOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBEbyBub3QgdXNlIHdoaXRlbmluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlciB2YWx1ZTogSW5pdGlhbGl6YXRpb24gZm9yIDctYml0IExGU1Igd2hpdGVuZXIKKyAgICAgIHVpbnQ4X3QgYk92ZXJyaWRlOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBVc2UgZGVmYXVsdCB3aGl0ZW5pbmcgZm9yIEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWxzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE92ZXJyaWRlIHdoaXRlbmluZyBpbml0aWFsaXphdGlvbiB3aXRoIHZhbHVlIG9mIGluaXQKKyAgIH0gd2hpdGVuaW5nOworICAgcmZjX2JsZUdlbmVyaWNSeFBhcl90ICpwUGFyYW1zOyAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBwYXJhbWV0ZXIgc3RydWN0dXJlCisgICByZmNfYmxlR2VuZXJpY1J4T3V0cHV0X3QgKnBPdXRwdXQ7ICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIG91dHB1dCBzdHJ1Y3R1cmUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0JMRV9UWF9URVNUCisvLyEgQHsKKyNkZWZpbmUgQ01EX0JMRV9UWF9URVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MEEKKy8vISBCTEUgUEhZIFRlc3QgVHJhbnNtaXR0ZXIgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9UWF9URVNUX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDE4MEEKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENoYW5uZWwgdG8gdXNlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDAmbmRhc2g7Mzk6IEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWwgbnVtYmVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDYwJm5kYXNoOzIwNzogQ3VzdG9tIGZyZXF1ZW5jeTsgKDIzMDAgKyA8Y29kZT5jaGFubmVsPC9jb2RlPikgTUh6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI1NTogVXNlIGV4aXN0aW5nIGZyZXF1ZW5jeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgaW5pdDo3OyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiA8Y29kZT5iT3ZlcnJpZGU8L2NvZGU+ID0gMSBvciBjdXN0b20gZnJlcXVlbmN5IGlzIHVzZWQ6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IERvIG5vdCB1c2Ugd2hpdGVuaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyIHZhbHVlOiBJbml0aWFsaXphdGlvbiBmb3IgNy1iaXQgTEZTUiB3aGl0ZW5lcgorICAgICAgdWludDhfdCBiT3ZlcnJpZGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFVzZSBkZWZhdWx0IHdoaXRlbmluZyBmb3IgQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbHM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT3ZlcnJpZGUgd2hpdGVuaW5nIGluaXRpYWxpemF0aW9uIHdpdGggdmFsdWUgb2YgaW5pdAorICAgfSB3aGl0ZW5pbmc7CisgICByZmNfYmxlVHhUZXN0UGFyX3QgKnBQYXJhbXM7ICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIHBhcmFtZXRlciBzdHJ1Y3R1cmUKKyAgIHJmY19ibGVUeFRlc3RPdXRwdXRfdCAqcE91dHB1dDsgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgb3V0cHV0IHN0cnVjdHVyZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQkxFX0FEVl9QQVlMT0FECisvLyEgQHsKKyNkZWZpbmUgQ01EX0JMRV9BRFZfUEFZTE9BRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDEKKy8vISBCTEUgVXBkYXRlIEFkdmVydGlzaW5nIFBheWxvYWQgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9BRFZfUEFZTE9BRF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgxMDAxCisgICB1aW50OF90IHBheWxvYWRUeXBlOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQWR2ZXJ0aXNpbmcgZGF0YTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBTY2FuIHJlc3BvbnNlIGRhdGEKKyAgIHVpbnQ4X3QgbmV3TGVuOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBMZW5ndGggb2YgdGhlIG5ldyBwYXlsb2FkCisgICB1aW50OF90KiBwTmV3RGF0YTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG5ldyBkYXRhCisgICByZmNfYmxlQWR2UGFyX3QgKnBQYXJhbXM7ICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSB0byB1cGRhdGUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgYmxlTWFzdGVyU2xhdmVQYXIKKy8vISBAeworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlTWFzdGVyU2xhdmVQYXJfcyB7CisgICBkYXRhUXVldWVfdCogcFJ4UTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byByZWNlaXZlIHF1ZXVlCisgICBkYXRhUXVldWVfdCogcFR4UTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0cmFuc21pdCBxdWV1ZQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaElnbm9yZWQ6MTsgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBpZ25vcmVkIHBhY2tldHMgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXV0b0ZsdXNoQ3JjRXJyOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBhY2tldHMgd2l0aCBDUkMgZXJyb3IgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXV0b0ZsdXNoRW1wdHk6MTsgICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGVtcHR5IHBhY2tldHMgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiSW5jbHVkZUxlbkJ5dGU6MTsgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIGxlbmd0aCBieXRlIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiSW5jbHVkZUNyYzoxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIENSQyBmaWVsZCBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFJzc2k6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYW4gUlNTSSBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRTdGF0dXM6MTsgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgc3RhdHVzIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFRpbWVzdGFtcDoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSB0aW1lc3RhbXAgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgIH0gcnhDb25maWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25maWd1cmF0aW9uIGJpdHMgZm9yIHRoZSByZWNlaXZlIHF1ZXVlIGVudHJpZXMKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGxhc3RSeFNuOjE7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIFNOIGJpdCBvZiB0aGUgaGVhZGVyIG9mIHRoZSBsYXN0IHBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBPSworICAgICAgdWludDhfdCBsYXN0VHhTbjoxOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBTTiBiaXQgb2YgdGhlIGhlYWRlciBvZiB0aGUgbGFzdCB0cmFuc21pdHRlZCBwYWNrZXQKKyAgICAgIHVpbnQ4X3QgbmV4dFR4U246MTsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgU04gYml0IG9mIHRoZSBoZWFkZXIgb2YgdGhlIG5leHQgcGFja2V0IHRvIHRyYW5zbWl0CisgICAgICB1aW50OF90IGJGaXJzdFBrdDoxOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgRm9yIHNsYXZlOiAwIGlmIGEgcGFja2V0IGhhcyBiZWVuIHRyYW5zbWl0dGVkIG9uIHRoZSBjb25uZWN0aW9uLCAxIG90aGVyd2lzZQorICAgICAgdWludDhfdCBiQXV0b0VtcHR5OjE7ICAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGxhc3QgdHJhbnNtaXR0ZWQgcGFja2V0IHdhcyBhbiBhdXRvLWVtcHR5IHBhY2tldAorICAgICAgdWludDhfdCBiTGxDdHJsVHg6MTsgICAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGxhc3QgdHJhbnNtaXR0ZWQgcGFja2V0IHdhcyBhbiBMTCBjb250cm9sIHBhY2tldCAoTExJRCA9IDExKQorICAgICAgdWludDhfdCBiTGxDdHJsQWNrUng6MTsgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0IHdhcyB0aGUgQUNLIG9mIGFuIExMIGNvbnRyb2wgcGFja2V0CisgICAgICB1aW50OF90IGJMbEN0cmxBY2tQZW5kaW5nOjE7ICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgcGFja2V0IHdhcyBhbiBMTCBjb250cm9sIHBhY2tldCB3aGljaCBoYXMgbm90IHlldCBiZWVuIEFDSydlZAorICAgfSBzZXFTdGF0OworICAgdWludDhfdCBtYXhOYWNrOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIE5BQ0tzIHJlY2VpdmVkIGJlZm9yZSBvcGVyYXRpb24gZW5kcy4gMDogTm8gbGltaXQKKyAgIHVpbnQ4X3QgbWF4UGt0OyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRyYW5zbWl0dGVkIGluIHRoZSBvcGVyYXRpb24gYmVmb3JlIGl0IGVuZHMuIDA6IE5vIGxpbWl0CisgICB1aW50MzJfdCBhY2Nlc3NBZGRyZXNzOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWNjZXNzIGFkZHJlc3MgdXNlZCBvbiB0aGUgY29ubmVjdGlvbgorICAgdWludDhfdCBjcmNJbml0MDsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENSQyBpbml0aWFsaXphdGlvbiB2YWx1ZSB1c2VkIG9uIHRoZSBjb25uZWN0aW9uICZuZGFzaDsgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZQorICAgdWludDhfdCBjcmNJbml0MTsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENSQyBpbml0aWFsaXphdGlvbiB2YWx1ZSB1c2VkIG9uIHRoZSBjb25uZWN0aW9uICZuZGFzaDsgbWlkZGxlIGJ5dGUKKyAgIHVpbnQ4X3QgY3JjSW5pdDI7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDUkMgaW5pdGlhbGl6YXRpb24gdmFsdWUgdXNlZCBvbiB0aGUgY29ubmVjdGlvbiAmbmRhc2g7IG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVNYXN0ZXJQYXIKKy8vISBAeworLy8hIFBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIG1hc3RlciAoQ01EX0JMRV9NQVNURVIpCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZU1hc3RlclBhcl9zIHsKKyAgIGRhdGFRdWV1ZV90KiBwUnhROyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHJlY2VpdmUgcXVldWUKKyAgIGRhdGFRdWV1ZV90KiBwVHhROyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRyYW5zbWl0IHF1ZXVlCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiQXV0b0ZsdXNoSWdub3JlZDoxOyAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGlnbm9yZWQgcGFja2V0cyBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hDcmNFcnI6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgcGFja2V0cyB3aXRoIENSQyBlcnJvciBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hFbXB0eToxOyAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgZW1wdHkgcGFja2V0cyBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJJbmNsdWRlTGVuQnl0ZToxOyAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgbGVuZ3RoIGJ5dGUgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJJbmNsdWRlQ3JjOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgQ1JDIGZpZWxkIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiQXBwZW5kUnNzaToxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhbiBSU1NJIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFN0YXR1czoxOyAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSBzdGF0dXMgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kVGltZXN0YW1wOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHRpbWVzdGFtcCB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgfSByeENvbmZpZzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmZpZ3VyYXRpb24gYml0cyBmb3IgdGhlIHJlY2VpdmUgcXVldWUgZW50cmllcworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgbGFzdFJ4U246MTsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgU04gYml0IG9mIHRoZSBoZWFkZXIgb2YgdGhlIGxhc3QgcGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIE9LCisgICAgICB1aW50OF90IGxhc3RUeFNuOjE7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIFNOIGJpdCBvZiB0aGUgaGVhZGVyIG9mIHRoZSBsYXN0IHRyYW5zbWl0dGVkIHBhY2tldAorICAgICAgdWludDhfdCBuZXh0VHhTbjoxOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBTTiBiaXQgb2YgdGhlIGhlYWRlciBvZiB0aGUgbmV4dCBwYWNrZXQgdG8gdHJhbnNtaXQKKyAgICAgIHVpbnQ4X3QgYkZpcnN0UGt0OjE7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBGb3Igc2xhdmU6IDAgaWYgYSBwYWNrZXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQgb24gdGhlIGNvbm5lY3Rpb24sIDEgb3RoZXJ3aXNlCisgICAgICB1aW50OF90IGJBdXRvRW1wdHk6MTsgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCB0cmFuc21pdHRlZCBwYWNrZXQgd2FzIGFuIGF1dG8tZW1wdHkgcGFja2V0CisgICAgICB1aW50OF90IGJMbEN0cmxUeDoxOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCB0cmFuc21pdHRlZCBwYWNrZXQgd2FzIGFuIExMIGNvbnRyb2wgcGFja2V0IChMTElEID0gMTEpCisgICAgICB1aW50OF90IGJMbEN0cmxBY2tSeDoxOyAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCByZWNlaXZlZCBwYWNrZXQgd2FzIHRoZSBBQ0sgb2YgYW4gTEwgY29udHJvbCBwYWNrZXQKKyAgICAgIHVpbnQ4X3QgYkxsQ3RybEFja1BlbmRpbmc6MTsgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBwYWNrZXQgd2FzIGFuIExMIGNvbnRyb2wgcGFja2V0IHdoaWNoIGhhcyBub3QgeWV0IGJlZW4gQUNLJ2VkCisgICB9IHNlcVN0YXQ7CisgICB1aW50OF90IG1heE5hY2s7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgTkFDS3MgcmVjZWl2ZWQgYmVmb3JlIG9wZXJhdGlvbiBlbmRzLiAwOiBObyBsaW1pdAorICAgdWludDhfdCBtYXhQa3Q7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQgaW4gdGhlIG9wZXJhdGlvbiBiZWZvcmUgaXQgZW5kcy4gMDogTm8gbGltaXQKKyAgIHVpbnQzMl90IGFjY2Vzc0FkZHJlc3M7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBBY2Nlc3MgYWRkcmVzcyB1c2VkIG9uIHRoZSBjb25uZWN0aW9uCisgICB1aW50OF90IGNyY0luaXQwOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1JDIGluaXRpYWxpemF0aW9uIHZhbHVlIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24gJm5kYXNoOyBsZWFzdCBzaWduaWZpY2FudCBieXRlCisgICB1aW50OF90IGNyY0luaXQxOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1JDIGluaXRpYWxpemF0aW9uIHZhbHVlIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24gJm5kYXNoOyBtaWRkbGUgYnl0ZQorICAgdWludDhfdCBjcmNJbml0MjsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENSQyBpbml0aWFsaXphdGlvbiB2YWx1ZSB1c2VkIG9uIHRoZSBjb25uZWN0aW9uICZuZGFzaDsgbW9zdCBzaWduaWZpY2FudCBieXRlCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBlbmRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlIGNvbm5lY3Rpb24gZXZlbnQgYXMgc29vbiBhcyBhbGxvd2VkCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+ZW5kVHJpZ2dlcjwvY29kZT4gdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgY29ubmVjdGlvbiBldmVudCBhcyBzb29uIGFzIGFsbG93ZWQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgYmxlU2xhdmVQYXIKKy8vISBAeworLy8hIFBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIHNsYXZlIChDTURfQkxFX1NMQVZFKQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVTbGF2ZVBhcl9zIHsKKyAgIGRhdGFRdWV1ZV90KiBwUnhROyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHJlY2VpdmUgcXVldWUKKyAgIGRhdGFRdWV1ZV90KiBwVHhROyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRyYW5zbWl0IHF1ZXVlCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiQXV0b0ZsdXNoSWdub3JlZDoxOyAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGlnbm9yZWQgcGFja2V0cyBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hDcmNFcnI6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgcGFja2V0cyB3aXRoIENSQyBlcnJvciBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hFbXB0eToxOyAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgZW1wdHkgcGFja2V0cyBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJJbmNsdWRlTGVuQnl0ZToxOyAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgbGVuZ3RoIGJ5dGUgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJJbmNsdWRlQ3JjOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgQ1JDIGZpZWxkIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiQXBwZW5kUnNzaToxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhbiBSU1NJIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFN0YXR1czoxOyAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSBzdGF0dXMgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kVGltZXN0YW1wOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHRpbWVzdGFtcCB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgfSByeENvbmZpZzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmZpZ3VyYXRpb24gYml0cyBmb3IgdGhlIHJlY2VpdmUgcXVldWUgZW50cmllcworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgbGFzdFJ4U246MTsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgU04gYml0IG9mIHRoZSBoZWFkZXIgb2YgdGhlIGxhc3QgcGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIE9LCisgICAgICB1aW50OF90IGxhc3RUeFNuOjE7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIFNOIGJpdCBvZiB0aGUgaGVhZGVyIG9mIHRoZSBsYXN0IHRyYW5zbWl0dGVkIHBhY2tldAorICAgICAgdWludDhfdCBuZXh0VHhTbjoxOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBTTiBiaXQgb2YgdGhlIGhlYWRlciBvZiB0aGUgbmV4dCBwYWNrZXQgdG8gdHJhbnNtaXQKKyAgICAgIHVpbnQ4X3QgYkZpcnN0UGt0OjE7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBGb3Igc2xhdmU6IDAgaWYgYSBwYWNrZXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQgb24gdGhlIGNvbm5lY3Rpb24sIDEgb3RoZXJ3aXNlCisgICAgICB1aW50OF90IGJBdXRvRW1wdHk6MTsgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCB0cmFuc21pdHRlZCBwYWNrZXQgd2FzIGFuIGF1dG8tZW1wdHkgcGFja2V0CisgICAgICB1aW50OF90IGJMbEN0cmxUeDoxOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCB0cmFuc21pdHRlZCBwYWNrZXQgd2FzIGFuIExMIGNvbnRyb2wgcGFja2V0IChMTElEID0gMTEpCisgICAgICB1aW50OF90IGJMbEN0cmxBY2tSeDoxOyAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCByZWNlaXZlZCBwYWNrZXQgd2FzIHRoZSBBQ0sgb2YgYW4gTEwgY29udHJvbCBwYWNrZXQKKyAgICAgIHVpbnQ4X3QgYkxsQ3RybEFja1BlbmRpbmc6MTsgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBwYWNrZXQgd2FzIGFuIExMIGNvbnRyb2wgcGFja2V0IHdoaWNoIGhhcyBub3QgeWV0IGJlZW4gQUNLJ2VkCisgICB9IHNlcVN0YXQ7CisgICB1aW50OF90IG1heE5hY2s7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgTkFDS3MgcmVjZWl2ZWQgYmVmb3JlIG9wZXJhdGlvbiBlbmRzLiAwOiBObyBsaW1pdAorICAgdWludDhfdCBtYXhQa3Q7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQgaW4gdGhlIG9wZXJhdGlvbiBiZWZvcmUgaXQgZW5kcy4gMDogTm8gbGltaXQKKyAgIHVpbnQzMl90IGFjY2Vzc0FkZHJlc3M7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBBY2Nlc3MgYWRkcmVzcyB1c2VkIG9uIHRoZSBjb25uZWN0aW9uCisgICB1aW50OF90IGNyY0luaXQwOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1JDIGluaXRpYWxpemF0aW9uIHZhbHVlIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24gJm5kYXNoOyBsZWFzdCBzaWduaWZpY2FudCBieXRlCisgICB1aW50OF90IGNyY0luaXQxOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1JDIGluaXRpYWxpemF0aW9uIHZhbHVlIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24gJm5kYXNoOyBtaWRkbGUgYnl0ZQorICAgdWludDhfdCBjcmNJbml0MjsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENSQyBpbml0aWFsaXphdGlvbiB2YWx1ZSB1c2VkIG9uIHRoZSBjb25uZWN0aW9uICZuZGFzaDsgbW9zdCBzaWduaWZpY2FudCBieXRlCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSB0aW1lb3V0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgdGhhdCBkZWZpbmVzIHRpbWVvdXQgb2YgdGhlIGZpcnN0IHJlY2VpdmUgb3BlcmF0aW9uCisgICByYXRtcl90IHRpbWVvdXRUaW1lOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+dGltZW91dFRyaWdnZXI8L2NvZGU+IHRoYXQgZGVmaW5lcyB0aW1lb3V0IG9mIHRoZSBmaXJzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHJlY2VpdmUgb3BlcmF0aW9uCisgICB1aW50MTZfdCBfX2R1bW15MDsKKyAgIHVpbnQ4X3QgX19kdW1teTE7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBlbmRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlIGNvbm5lY3Rpb24gZXZlbnQgYXMgc29vbiBhcyBhbGxvd2VkCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+ZW5kVHJpZ2dlcjwvY29kZT4gdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgY29ubmVjdGlvbiBldmVudCBhcyBzb29uIGFzIGFsbG93ZWQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgYmxlQWR2UGFyCisvLyEgQHsKKy8vISBQYXJhbWV0ZXIgc3RydWN0dXJlIGZvciBhZHZlcnRpc2VyIChDTURfQkxFX0FEViopCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZUFkdlBhcl9zIHsKKyAgIGRhdGFRdWV1ZV90KiBwUnhROyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHJlY2VpdmUgcXVldWUKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJBdXRvRmx1c2hJZ25vcmVkOjE7ICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgaWdub3JlZCBwYWNrZXRzIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaENyY0VycjoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBwYWNrZXRzIHdpdGggQ1JDIGVycm9yIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaEVtcHR5OjE7ICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBlbXB0eSBwYWNrZXRzIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVMZW5CeXRlOjE7ICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBsZW5ndGggYnl0ZSBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVDcmM6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBDUkMgZmllbGQgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJBcHBlbmRSc3NpOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGFuIFJTU0kgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kU3RhdHVzOjE7ICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHN0YXR1cyBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRUaW1lc3RhbXA6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgdGltZXN0YW1wIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICB9IHJ4Q29uZmlnOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZmlndXJhdGlvbiBiaXRzIGZvciB0aGUgcmVjZWl2ZSBxdWV1ZSBlbnRyaWVzCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBhZHZGaWx0ZXJQb2xpY3k6MjsgICAgICAgIC8vITwgXGJyaWVmIEFkdmVydGlzZXIgZmlsdGVyIHBvbGljeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBQcm9jZXNzIHNjYW4gYW5kIGNvbm5lY3QgcmVxdWVzdHMgZnJvbSBhbGwgZGV2aWNlczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBQcm9jZXNzIGNvbm5lY3QgcmVxdWVzdHMgZnJvbSBhbGwgZGV2aWNlcyBhbmQgb25seSBzY2FuIHJlcXVlc3RzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBkZXZpY2VzIHRoYXQgYXJlIGluIHRoZSB3aGl0ZSBsaXN0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFByb2Nlc3Mgc2NhbiByZXF1ZXN0cyBmcm9tIGFsbCBkZXZpY2VzIGFuZCBvbmx5IGNvbm5lY3QgcmVxdWVzdHMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGRldmljZXMgdGhhdCBhcmUgaW4gdGhlIHdoaXRlIGxpc3Q8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogUHJvY2VzcyBzY2FuIGFuZCBjb25uZWN0IHJlcXVlc3RzIG9ubHkgZnJvbSBkZXZpY2VzIGluIHRoZSB3aGl0ZSBsaXN0CisgICAgICB1aW50OF90IGRldmljZUFkZHJUeXBlOjE7ICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdGhlIGRldmljZSBhZGRyZXNzICZuZGFzaDsgcHVibGljICgwKSBvciByYW5kb20gKDEpCisgICAgICB1aW50OF90IHBlZXJBZGRyVHlwZToxOyAgICAgICAgICAgLy8hPCAgICAgICAgRGlyZWN0ZWQgYWR2ZXJ0aXNlcjogVGhlIHR5cGUgb2YgdGhlIHBlZXIgYWRkcmVzcyAmbmRhc2g7IHB1YmxpYyAoMCkgb3IgcmFuZG9tICgxKQorICAgICAgdWludDhfdCBiU3RyaWN0TGVuRmlsdGVyOjE7ICAgICAgIC8vITwgXGJyaWVmIDA6IEFjY2VwdCBhbnkgcGFja2V0IHdpdGggYSB2YWxpZCBhZHZlcnRpc2luZyBwYWNrZXQgbGVuZ3RoPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IERpc2NhcmQgbWVzc2FnZXMgd2l0aCBpbGxlZ2FsIGxlbmd0aCBmb3IgdGhlIGdpdmVuIHBhY2tldCB0eXBlCisgICAgICB1aW50OF90IDoyOworICAgICAgdWludDhfdCBycGFNb2RlOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFJlc29sdmFibGUgcHJpdmF0ZSBhZGRyZXNzIG1vZGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogTm9ybWFsIG9wZXJhdGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBVc2Ugd2hpdGUgbGlzdCBmb3IgYSByZWNlaXZlZCBSUEEgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgcG9saWN5CisgICB9IGFkdkNvbmZpZzsKKyAgIHVpbnQ4X3QgYWR2TGVuOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBTaXplIG9mIGFkdmVydGlzZXIgZGF0YQorICAgdWludDhfdCBzY2FuUnNwTGVuOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFNpemUgb2Ygc2NhbiByZXNwb25zZSBkYXRhCisgICB1aW50OF90KiBwQWR2RGF0YTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBidWZmZXIgY29udGFpbmluZyBBRFYqX0lORCBkYXRhCisgICB1aW50OF90KiBwU2NhblJzcERhdGE7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBidWZmZXIgY29udGFpbmluZyBTQ0FOX1JTUCBkYXRhCisgICB1aW50MTZfdCogcERldmljZUFkZHJlc3M7ICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBkZXZpY2UgYWRkcmVzcyB1c2VkIGZvciB0aGlzIGRldmljZQorICAgcmZjX2JsZVdoaXRlTGlzdEVudHJ5X3QgKnBXaGl0ZUxpc3Q7IC8vITwgICAgICAgIFBvaW50ZXIgdG8gd2hpdGUgbGlzdCBvciBwZWVyIGFkZHJlc3MgKGRpcmVjdGVkIGFkdmVydGlzZXIpCisgICB1aW50MTZfdCBfX2R1bW15MDsKKyAgIHVpbnQ4X3QgX19kdW1teTE7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBlbmRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlIGFkdmVydGlzZXIgZXZlbnQgYXMgc29vbiBhcyBhbGxvd2VkCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+ZW5kVHJpZ2dlcjwvY29kZT4gdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgYWR2ZXJ0aXNlciBldmVudCBhcyBzb29uIGFzIGFsbG93ZWQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgYmxlU2Nhbm5lclBhcgorLy8hIEB7CisvLyEgUGFyYW1ldGVyIHN0cnVjdHVyZSBmb3Igc2Nhbm5lciAoQ01EX0JMRV9TQ0FOTkVSKQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVTY2FubmVyUGFyX3MgeworICAgZGF0YVF1ZXVlX3QqIHBSeFE7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gcmVjZWl2ZSBxdWV1ZQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaElnbm9yZWQ6MTsgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBpZ25vcmVkIHBhY2tldHMgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXV0b0ZsdXNoQ3JjRXJyOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBhY2tldHMgd2l0aCBDUkMgZXJyb3IgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXV0b0ZsdXNoRW1wdHk6MTsgICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGVtcHR5IHBhY2tldHMgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiSW5jbHVkZUxlbkJ5dGU6MTsgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIGxlbmd0aCBieXRlIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiSW5jbHVkZUNyYzoxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIENSQyBmaWVsZCBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFJzc2k6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYW4gUlNTSSBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRTdGF0dXM6MTsgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgc3RhdHVzIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFRpbWVzdGFtcDoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSB0aW1lc3RhbXAgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgIH0gcnhDb25maWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25maWd1cmF0aW9uIGJpdHMgZm9yIHRoZSByZWNlaXZlIHF1ZXVlIGVudHJpZXMKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHNjYW5GaWx0ZXJQb2xpY3k6MTsgICAgICAgLy8hPCBcYnJpZWYgU2Nhbm5pbmcgZmlsdGVyIHBvbGljeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBBY2NlcHQgYWxsIGFkdmVydGlzZW1lbnQgcGFja2V0czxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQgb25seSBhZHZlcnRpc2VtZW50IHBhY2tldHMgZnJvbSBkZXZpY2VzIHdoZXJlIHRoZSBhZHZlcnRpc2VyJ3MgYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGlzIGluIHRoZSBXaGl0ZSBsaXN0LgorICAgICAgdWludDhfdCBiQWN0aXZlU2NhbjoxOyAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFBhc3NpdmUgc2Nhbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY3RpdmUgc2NhbgorICAgICAgdWludDhfdCBkZXZpY2VBZGRyVHlwZToxOyAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRoZSBkZXZpY2UgYWRkcmVzcyAmbmRhc2g7IHB1YmxpYyAoMCkgb3IgcmFuZG9tICgxKQorICAgICAgdWludDhfdCA6MTsKKyAgICAgIHVpbnQ4X3QgYlN0cmljdExlbkZpbHRlcjoxOyAgICAgICAvLyE8IFxicmllZiAwOiBBY2NlcHQgYW55IHBhY2tldCB3aXRoIGEgdmFsaWQgYWR2ZXJ0aXNpbmcgcGFja2V0IGxlbmd0aDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBEaXNjYXJkIG1lc3NhZ2VzIHdpdGggaWxsZWdhbCBsZW5ndGggZm9yIHRoZSBnaXZlbiBwYWNrZXQgdHlwZQorICAgICAgdWludDhfdCBiQXV0b1dsSWdub3JlOjE7ICAgICAgICAgIC8vITwgICAgICAgIDE6IEF1dG9tYXRpY2FsbHkgc2V0IGlnbm9yZSBiaXQgaW4gd2hpdGUgbGlzdAorICAgICAgdWludDhfdCBiRW5kT25ScHQ6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IENvbnRpbnVlIHNjYW5uZXIgb3BlcmF0aW9uIGFmdGVyIGVhY2ggcmVwb3J0aW5nIEFEVipfSU5EIG9yIHNlbmRpbmcgU0NBTl9SU1A8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRW5kIHNjYW5uZXIgb3BlcmF0aW9uIGFmdGVyIGVhY2ggcmVwb3J0ZWQgQURWKl9JTkQgYW5kIHBvdGVudGlhbGx5IFNDQU5fUlNQCisgICAgICB1aW50OF90IHJwYU1vZGU6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgUmVzb2x2YWJsZSBwcml2YXRlIGFkZHJlc3MgbW9kZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBOb3JtYWwgb3BlcmF0aW9uPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFVzZSB3aGl0ZSBsaXN0IGZvciBhIHJlY2VpdmVkIFJQQSByZWdhcmRsZXNzIG9mIGZpbHRlciBwb2xpY3kKKyAgIH0gc2NhbkNvbmZpZzsKKyAgIHVpbnQxNl90IHJhbmRvbVN0YXRlOyAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBTdGF0ZSBmb3IgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiB1c2VkIGluIGJhY2tvZmYgcHJvY2VkdXJlCisgICB1aW50MTZfdCBiYWNrb2ZmQ291bnQ7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUGFyYW1ldGVyIDxpPmJhY2tvZmZDb3VudDwvaT4gdXNlZCBpbiBiYWNrb2ZmIHByb2NlZHVyZSwgY2YuIEJsdWV0b290aCA0LjAgc3BlYworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgbG9nVXBwZXJMaW1pdDo0OyAgICAgICAgICAvLyE8ICAgICAgICBCaW5hcnkgbG9nYXJpdGhtIG9mIHBhcmFtZXRlciB1cHBlckxpbWl0IHVzZWQgaW4gc2Nhbm5lciBiYWNrb2ZmIHByb2NlZHVyZQorICAgICAgdWludDhfdCBiTGFzdFN1Y2NlZWRlZDoxOyAgICAgICAgIC8vITwgXGJyaWVmIDEgaWYgdGhlIGxhc3QgU0NBTl9SU1Agd2FzIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhbmQgPGNvZGU+dXBwZXJMaW1pdDwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBub3QgY2hhbmdlZAorICAgICAgdWludDhfdCBiTGFzdEZhaWxlZDoxOyAgICAgICAgICAgIC8vITwgXGJyaWVmIDEgaWYgcmVjZXB0aW9uIG9mIHRoZSBsYXN0IFNDQU5fUlNQIGZhaWxlZCBhbmQgPGNvZGU+dXBwZXJMaW1pdDwvY29kZT4gd2FzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGNoYW5nZWQKKyAgIH0gYmFja29mZlBhcjsKKyAgIHVpbnQ4X3Qgc2NhblJlcUxlbjsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBTaXplIG9mIHNjYW4gcmVxdWVzdCBkYXRhCisgICB1aW50OF90KiBwU2NhblJlcURhdGE7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBidWZmZXIgY29udGFpbmluZyBTQ0FOX1JFUSBkYXRhCisgICB1aW50MTZfdCogcERldmljZUFkZHJlc3M7ICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBkZXZpY2UgYWRkcmVzcyB1c2VkIGZvciB0aGlzIGRldmljZQorICAgcmZjX2JsZVdoaXRlTGlzdEVudHJ5X3QgKnBXaGl0ZUxpc3Q7IC8vITwgICAgICAgIFBvaW50ZXIgdG8gd2hpdGUgbGlzdAorICAgdWludDE2X3QgX19kdW1teTA7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSB0aW1lb3V0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBzdG9wIHJlY2VpdmluZyBhcyBzb29uIGFzIGFsbG93ZWQKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IGVuZFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIHN0b3AgcmVjZWl2aW5nIGFzIHNvb24gYXMgYWxsb3dlZAorICAgcmF0bXJfdCB0aW1lb3V0VGltZTsgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRpbWUgdXNlZCB0b2dldGhlciB3aXRoIDxjb2RlPnRpbWVvdXRUcmlnZ2VyPC9jb2RlPiB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICByZWNlaXZpbmcgYXMgc29vbiBhcyBhbGxvd2VkLCBlbmRpbmcgd2l0aCBCTEVfRE9ORV9SWFRJTUVPVVQKKyAgIHJhdG1yX3QgZW5kVGltZTsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaW1lIHVzZWQgdG9nZXRoZXIgd2l0aCA8Y29kZT5lbmRUcmlnZ2VyPC9jb2RlPiB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICByZWNlaXZpbmcgYXMgc29vbiBhcyBhbGxvd2VkLCBlbmRpbmcgd2l0aCBCTEVfRE9ORV9FTkRFRAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVJbml0aWF0b3JQYXIKKy8vISBAeworLy8hIFBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIGluaXRpYXRvciAoQ01EX0JMRV9JTklUSUFUT1IpCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZUluaXRpYXRvclBhcl9zIHsKKyAgIGRhdGFRdWV1ZV90KiBwUnhROyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHJlY2VpdmUgcXVldWUKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJBdXRvRmx1c2hJZ25vcmVkOjE7ICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgaWdub3JlZCBwYWNrZXRzIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaENyY0VycjoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBwYWNrZXRzIHdpdGggQ1JDIGVycm9yIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaEVtcHR5OjE7ICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBlbXB0eSBwYWNrZXRzIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVMZW5CeXRlOjE7ICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBsZW5ndGggYnl0ZSBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVDcmM6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBDUkMgZmllbGQgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJBcHBlbmRSc3NpOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGFuIFJTU0kgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kU3RhdHVzOjE7ICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHN0YXR1cyBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRUaW1lc3RhbXA6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgdGltZXN0YW1wIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICB9IHJ4Q29uZmlnOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZmlndXJhdGlvbiBiaXRzIGZvciB0aGUgcmVjZWl2ZSBxdWV1ZSBlbnRyaWVzCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiVXNlV2hpdGVMaXN0OjE7ICAgICAgICAgIC8vITwgXGJyaWVmIEluaXRpYXRvciBmaWx0ZXIgcG9saWN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFVzZSBzcGVjaWZpYyBwZWVyIGFkZHJlc3M8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVXNlIHdoaXRlIGxpc3QKKyAgICAgIHVpbnQ4X3QgYkR5bmFtaWNXaW5PZmZzZXQ6MTsgICAgICAvLyE8IFxicmllZiAwOiBObyBkeW5hbWljIFdpbk9mZnNldCBpbnNlcnRpb248YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVXNlIGR5bmFtaWMgV2luT2Zmc2V0IGluc2VydGlvbgorICAgICAgdWludDhfdCBkZXZpY2VBZGRyVHlwZToxOyAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRoZSBkZXZpY2UgYWRkcmVzcyAmbmRhc2g7IHB1YmxpYyAoMCkgb3IgcmFuZG9tICgxKQorICAgICAgdWludDhfdCBwZWVyQWRkclR5cGU6MTsgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRoZSBwZWVyIGFkZHJlc3MgJm5kYXNoOyBwdWJsaWMgKDApIG9yIHJhbmRvbSAoMSkKKyAgICAgIHVpbnQ4X3QgYlN0cmljdExlbkZpbHRlcjoxOyAgICAgICAvLyE8IFxicmllZiAwOiBBY2NlcHQgYW55IHBhY2tldCB3aXRoIGEgdmFsaWQgYWR2ZXJ0aXNpbmcgcGFja2V0IGxlbmd0aDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBEaXNjYXJkIG1lc3NhZ2VzIHdpdGggaWxsZWdhbCBsZW5ndGggZm9yIHRoZSBnaXZlbiBwYWNrZXQgdHlwZQorICAgfSBpbml0Q29uZmlnOworICAgdWludDhfdCBfX2R1bW15MDsKKyAgIHVpbnQ4X3QgY29ubmVjdFJlcUxlbjsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBTaXplIG9mIGNvbm5lY3QgcmVxdWVzdCBkYXRhCisgICB1aW50OF90KiBwQ29ubmVjdFJlcURhdGE7ICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBidWZmZXIgY29udGFpbmluZyBMTERhdGEgdG8gZ28gaW4gdGhlIENPTk5FQ1RfUkVRCisgICB1aW50MTZfdCogcERldmljZUFkZHJlc3M7ICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBkZXZpY2UgYWRkcmVzcyB1c2VkIGZvciB0aGlzIGRldmljZQorICAgcmZjX2JsZVdoaXRlTGlzdEVudHJ5X3QgKnBXaGl0ZUxpc3Q7IC8vITwgICAgICAgIFBvaW50ZXIgdG8gd2hpdGUgbGlzdCBvciBwZWVyIGFkZHJlc3MKKyAgIHJhdG1yX3QgY29ubmVjdFRpbWU7ICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBJbmRpY2F0aW9uIG9mIHRpbWVyIHZhbHVlIG9mIHRoZSBmaXJzdCBwb3NzaWJsZSBzdGFydCB0aW1lIG9mIHRoZSBmaXJzdCBjb25uZWN0aW9uIGV2ZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFNldCB0byB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBpZiBhIGNvbm5lY3Rpb24gaXMgbWFkZSBhbmQgdG8gdGhlIG5leHQgcG9zc2libGUgY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHRpbWUgaWYgbm90LgorICAgdWludDE2X3QgX19kdW1teTE7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSB0aW1lb3V0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBzdG9wIHJlY2VpdmluZyBhcyBzb29uIGFzIGFsbG93ZWQKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IGVuZFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIHN0b3AgcmVjZWl2aW5nIGFzIHNvb24gYXMgYWxsb3dlZAorICAgcmF0bXJfdCB0aW1lb3V0VGltZTsgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRpbWUgdXNlZCB0b2dldGhlciB3aXRoIDxjb2RlPnRpbWVvdXRUcmlnZ2VyPC9jb2RlPiB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICByZWNlaXZpbmcgYXMgc29vbiBhcyBhbGxvd2VkLCBlbmRpbmcgd2l0aCBCTEVfRE9ORV9SWFRJTUVPVVQKKyAgIHJhdG1yX3QgZW5kVGltZTsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaW1lIHVzZWQgdG9nZXRoZXIgd2l0aCA8Y29kZT5lbmRUcmlnZ2VyPC9jb2RlPiB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICByZWNlaXZpbmcgYXMgc29vbiBhcyBhbGxvd2VkLCBlbmRpbmcgd2l0aCBCTEVfRE9ORV9FTkRFRAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVHZW5lcmljUnhQYXIKKy8vISBAeworLy8hIFBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIGdlbmVyaWMgUnggKENNRF9CTEVfR0VORVJJQ19SWCkKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlR2VuZXJpY1J4UGFyX3MgeworICAgZGF0YVF1ZXVlX3QqIHBSeFE7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gcmVjZWl2ZSBxdWV1ZS4gTWF5IGJlIE5VTEw7IGlmIHNvLCByZWNlaXZlZCBwYWNrZXRzIGFyZSBub3Qgc3RvcmVkCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiQXV0b0ZsdXNoSWdub3JlZDoxOyAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGlnbm9yZWQgcGFja2V0cyBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hDcmNFcnI6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgcGFja2V0cyB3aXRoIENSQyBlcnJvciBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hFbXB0eToxOyAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgZW1wdHkgcGFja2V0cyBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJJbmNsdWRlTGVuQnl0ZToxOyAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgbGVuZ3RoIGJ5dGUgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJJbmNsdWRlQ3JjOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgQ1JDIGZpZWxkIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiQXBwZW5kUnNzaToxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhbiBSU1NJIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFN0YXR1czoxOyAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSBzdGF0dXMgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kVGltZXN0YW1wOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHRpbWVzdGFtcCB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgfSByeENvbmZpZzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmZpZ3VyYXRpb24gYml0cyBmb3IgdGhlIHJlY2VpdmUgcXVldWUgZW50cmllcworICAgdWludDhfdCBiUmVwZWF0OyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEVuZCBvcGVyYXRpb24gYWZ0ZXIgcmVjZWl2aW5nIGEgcGFja2V0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFJlc3RhcnQgcmVjZWl2ZXIgYWZ0ZXIgcmVjZWl2aW5nIGEgcGFja2V0CisgICB1aW50MTZfdCBfX2R1bW15MDsKKyAgIHVpbnQzMl90IGFjY2Vzc0FkZHJlc3M7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBBY2Nlc3MgYWRkcmVzcyB1c2VkIG9uIHRoZSBjb25uZWN0aW9uCisgICB1aW50OF90IGNyY0luaXQwOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1JDIGluaXRpYWxpemF0aW9uIHZhbHVlIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24gJm5kYXNoOyBsZWFzdCBzaWduaWZpY2FudCBieXRlCisgICB1aW50OF90IGNyY0luaXQxOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1JDIGluaXRpYWxpemF0aW9uIHZhbHVlIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24gJm5kYXNoOyBtaWRkbGUgYnl0ZQorICAgdWludDhfdCBjcmNJbml0MjsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENSQyBpbml0aWFsaXphdGlvbiB2YWx1ZSB1c2VkIG9uIHRoZSBjb25uZWN0aW9uICZuZGFzaDsgbW9zdCBzaWduaWZpY2FudCBieXRlCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBlbmRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlIFJ4IG9wZXJhdGlvbgorICAgcmF0bXJfdCBlbmRUaW1lOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRpbWUgdXNlZCB0b2dldGhlciB3aXRoIDxjb2RlPmVuZFRyaWdnZXI8L2NvZGU+IHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gZW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFJ4IG9wZXJhdGlvbgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVUeFRlc3RQYXIKKy8vISBAeworLy8hIFBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIFR4IHRlc3QgKENNRF9CTEVfVFhfVEVTVCkKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlVHhUZXN0UGFyX3MgeworICAgdWludDE2X3QgbnVtUGFja2V0czsgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIE51bWJlciBvZiBwYWNrZXRzIHRvIHRyYW5zbWl0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFRyYW5zbWl0IHVubGltaXRlZCBudW1iZXIgb2YgcGFja2V0cworICAgdWludDhfdCBwYXlsb2FkTGVuZ3RoOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBudW1iZXIgb2YgcGF5bG9hZCBieXRlcyBpbiBlYWNoIHBhY2tldC4KKyAgIHVpbnQ4X3QgcGFja2V0VHlwZTsgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaGUgcGFja2V0IHR5cGUgdG8gYmUgdXNlZCwgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIEJsdWV0b290aCA0LjAgc3BlYywgVm9sdW1lIDIsIFBhcnQgRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBTZWN0aW9uIDcuOC4yOQorICAgcmF0bXJfdCBwZXJpb2Q7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiByYWRpbyB0aW1lciBjeWNsZXMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCBwYWNrZXQKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJPdmVycmlkZURlZmF1bHQ6MTsgICAgICAgLy8hPCBcYnJpZWYgMDogVXNlIGRlZmF1bHQgcGFja2V0IGVuY29kaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE92ZXJyaWRlIHBhY2tldCBjb250ZW50cworICAgICAgdWludDhfdCBiVXNlUHJiczk6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIElmIDxjb2RlPmJPdmVycmlkZTwvY29kZT4gaXMgMTo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVXNlIFBSQlM5IGVuY29kaW5nIG9mIHBhY2tldAorICAgICAgdWludDhfdCBiVXNlUHJiczE1OjE7ICAgICAgICAgICAgIC8vITwgXGJyaWVmIElmIDxjb2RlPmJPdmVycmlkZTwvY29kZT4gaXMgMTo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVXNlIFBSQlMxNSBlbmNvZGluZyBvZiBwYWNrZXQKKyAgIH0gY29uZmlnOworICAgdWludDhfdCBieXRlVmFsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElmIDxjb2RlPmNvbmZpZy5iT3ZlcnJpZGU8L2NvZGU+IGlzIDEsIHZhbHVlIG9mIGVhY2ggYnl0ZSB0byBiZSBzZW50CisgICB1aW50OF90IF9fZHVtbXkwOworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gZW5kVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUcmlnZ2VyIHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gZW5kIHRoZSBUZXN0IFR4IG9wZXJhdGlvbgorICAgcmF0bXJfdCBlbmRUaW1lOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRpbWUgdXNlZCB0b2dldGhlciB3aXRoIDxjb2RlPmVuZFRyaWdnZXI8L2NvZGU+IHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gZW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRlc3QgVHggb3BlcmF0aW9uCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZU1hc3RlclNsYXZlT3V0cHV0CisvLyEgQHsKKy8vISBPdXRwdXQgc3RydWN0dXJlIGZvciBtYXN0ZXIgYW5kIHNsYXZlIChDTURfQkxFX01BU1RFUiBhbmQgQ01EX0JMRV9TTEFWRSkKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlTWFzdGVyU2xhdmVPdXRwdXRfcyB7CisgICB1aW50OF90IG5UeDsgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVG90YWwgbnVtYmVyIG9mIHBhY2tldHMgKGluY2x1ZGluZyBhdXRvLWVtcHR5IGFuZCByZXRyYW5zbWlzc2lvbnMpIHRoYXQgaGF2ZSBiZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdHJhbnNtaXR0ZWQKKyAgIHVpbnQ4X3QgblR4QWNrOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUb3RhbCBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgcGFja2V0cyAoaW5jbHVkaW5nIGF1dG8tZW1wdHkpIHRoYXQgaGF2ZSBiZWVuIEFDSydlZAorICAgdWludDhfdCBuVHhDdHJsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiB1bmlxdWUgTEwgY29udHJvbCBwYWNrZXRzIGZyb20gdGhlIFR4IHF1ZXVlIHRoYXQgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkCisgICB1aW50OF90IG5UeEN0cmxBY2s7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIExMIGNvbnRyb2wgcGFja2V0cyBmcm9tIHRoZSBUeCBxdWV1ZSB0aGF0IGhhdmUgYmVlbiBmaW5pc2hlZCAoQUNLJ2VkKQorICAgdWludDhfdCBuVHhDdHJsQWNrQWNrOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIE51bWJlciBvZiBMTCBjb250cm9sIHBhY2tldHMgdGhhdCBoYXZlIGJlZW4gQUNLJ2VkIGFuZCB3aGVyZSBhbiBBQ0sgaGFzIGJlZW4gc2VudCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHJlc3BvbnNlCisgICB1aW50OF90IG5UeFJldHJhbnM7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucyB0aGF0IGhhcyBiZWVuIGRvbmUKKyAgIHVpbnQ4X3QgblR4RW50cnlEb25lOyAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyBmcm9tIHRoZSBUeCBxdWV1ZSB0aGF0IGhhdmUgYmVlbiBmaW5pc2hlZCAoQUNLJ2VkKQorICAgdWludDhfdCBuUnhPazsgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIHdpdGggcGF5bG9hZCwgQ1JDIE9LIGFuZCBub3QgaWdub3JlZAorICAgdWludDhfdCBuUnhDdHJsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBMTCBjb250cm9sIHBhY2tldHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBDUkMgT0sgYW5kIG5vdCBpZ25vcmVkCisgICB1aW50OF90IG5SeEN0cmxBY2s7ICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgTnVtYmVyIG9mIExMIGNvbnRyb2wgcGFja2V0cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCB3aXRoIENSQyBPSyBhbmQgbm90IGlnbm9yZWQsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHRoZW4gQUNLJ2VkCisgICB1aW50OF90IG5SeE5vazsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IKKyAgIHVpbnQ4X3QgblJ4SWdub3JlZDsgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBOdW1iZXIgb2YgcGFja2V0cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCB3aXRoIENSQyBPSyBhbmQgaWdub3JlZCBkdWUgdG8gcmVwZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzZXF1ZW5jZSBudW1iZXIKKyAgIHVpbnQ4X3QgblJ4RW1wdHk7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCB3aXRoIENSQyBPSyBhbmQgbm8gcGF5bG9hZAorICAgdWludDhfdCBuUnhCdWZGdWxsOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGFuZCBkaXNjYXJkZWQgZHVlIHRvIGxhY2sgb2YgYnVmZmVyIHNwYWNlCisgICBpbnQ4X3QgbGFzdFJzc2k7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUlNTSSBvZiBsYXN0IHJlY2VpdmVkIHBhY2tldAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYlRpbWVTdGFtcFZhbGlkOjE7ICAgICAgICAvLyE8ICAgICAgICAxIGlmIGEgdmFsaWQgdGltZSBzdGFtcCBoYXMgYmVlbiB3cml0dGVuIHRvIHRpbWVTdGFtcDsgMCBvdGhlcndpc2UKKyAgICAgIHVpbnQ4X3QgYkxhc3RDcmNFcnI6MTsgICAgICAgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldCBoYWQgQ1JDIGVycm9yOyAwIG90aGVyd2lzZQorICAgICAgdWludDhfdCBiTGFzdElnbm9yZWQ6MTsgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0IHdpdGggQ1JDIE9LIHdhcyBpZ25vcmVkOyAwIG90aGVyd2lzZQorICAgICAgdWludDhfdCBiTGFzdEVtcHR5OjE7ICAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0IHdpdGggQ1JDIE9LIHdhcyBlbXB0eTsgMCBvdGhlcndpc2UKKyAgICAgIHVpbnQ4X3QgYkxhc3RDdHJsOjE7ICAgICAgICAgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldCB3aXRoIENSQyBPSyB3YXMgZW1wdHk7IDAgb3RoZXJ3aXNlCisgICAgICB1aW50OF90IGJMYXN0TWQ6MTsgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCByZWNlaXZlZCBwYWNrZXQgd2l0aCBDUkMgT0sgaGFkIE1EID0gMTsgMCBvdGhlcndpc2UKKyAgICAgIHVpbnQ4X3QgYkxhc3RBY2s6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAxIGlmIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldCB3aXRoIENSQyBPSyB3YXMgYW4gQUNLIG9mIGEgdHJhbnNtaXR0ZWQgcGFja2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDAgb3RoZXJ3aXNlCisgICB9IHBrdFN0YXR1czsKKyAgIHJhdG1yX3QgdGltZVN0YW1wOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBTbGF2ZSBvcGVyYXRpb246IFRpbWUgc3RhbXAgb2YgZmlyc3QgcmVjZWl2ZWQgcGFja2V0Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZUFkdk91dHB1dAorLy8hIEB7CisvLyEgT3V0cHV0IHN0cnVjdHVyZSBmb3IgYWR2ZXJ0aXNlciAoQ01EX0JMRV9BRFYqKQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVBZHZPdXRwdXRfcyB7CisgICB1aW50MTZfdCBuVHhBZHZJbmQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIEFEVipfSU5EIHBhY2tldHMgY29tcGxldGVseSB0cmFuc21pdHRlZAorICAgdWludDhfdCBuVHhTY2FuUnNwOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiAgU0NBTl9SU1AgcGFja2V0cyB0cmFuc21pdHRlZAorICAgdWludDhfdCBuUnhTY2FuUmVxOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBTQ0FOX1JFUSBwYWNrZXRzIHJlY2VpdmVkIE9LIGFuZCBub3QgaWdub3JlZAorICAgdWludDhfdCBuUnhDb25uZWN0UmVxOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBDT05ORUNUX1JFUSBwYWNrZXRzIHJlY2VpdmVkIE9LIGFuZCBub3QgaWdub3JlZAorICAgdWludDhfdCBfX2R1bW15MDsKKyAgIHVpbnQxNl90IG5SeE5vazsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCB3aXRoIENSQyBlcnJvcgorICAgdWludDE2X3QgblJ4SWdub3JlZDsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHdpdGggQ1JDIE9LLCBidXQgaWdub3JlZAorICAgdWludDhfdCBuUnhCdWZGdWxsOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgZGlkIG5vdCBmaXQgaW4gUnggcXVldWUKKyAgIGludDhfdCBsYXN0UnNzaTsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgUlNTSSBvZiB0aGUgbGFzdCByZWNlaXZlZCBwYWNrZXQKKyAgIHJhdG1yX3QgdGltZVN0YW1wOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaW1lIHN0YW1wIG9mIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVTY2FubmVyT3V0cHV0CisvLyEgQHsKKy8vISBPdXRwdXQgc3RydWN0dXJlIGZvciBzY2FubmVyIChDTURfQkxFX1NDQU5ORVIpCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZVNjYW5uZXJPdXRwdXRfcyB7CisgICB1aW50MTZfdCBuVHhTY2FuUmVxOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHRyYW5zbWl0dGVkIFNDQU5fUkVRIHBhY2tldHMKKyAgIHVpbnQxNl90IG5CYWNrZWRPZmZTY2FuUmVxOyAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgU0NBTl9SRVEgcGFja2V0cyBub3Qgc2VudCBkdWUgdG8gYmFja29mZiBwcm9jZWR1cmUKKyAgIHVpbnQxNl90IG5SeEFkdk9rOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgQURWKl9JTkQgcGFja2V0cyByZWNlaXZlZCB3aXRoIENSQyBPSyBhbmQgbm90IGlnbm9yZWQKKyAgIHVpbnQxNl90IG5SeEFkdklnbm9yZWQ7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgQURWKl9JTkQgcGFja2V0cyByZWNlaXZlZCB3aXRoIENSQyBPSywgYnV0IGlnbm9yZWQKKyAgIHVpbnQxNl90IG5SeEFkdk5vazsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgQURWKl9JTkQgcGFja2V0cyByZWNlaXZlZCB3aXRoIENSQyBlcnJvcgorICAgdWludDE2X3QgblJ4U2NhblJzcE9rOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBTQ0FOX1JTUCBwYWNrZXRzIHJlY2VpdmVkIHdpdGggQ1JDIE9LIGFuZCBub3QgaWdub3JlZAorICAgdWludDE2X3QgblJ4U2NhblJzcElnbm9yZWQ7ICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBTQ0FOX1JTUCBwYWNrZXRzIHJlY2VpdmVkIHdpdGggQ1JDIE9LLCBidXQgaWdub3JlZAorICAgdWludDE2X3QgblJ4U2NhblJzcE5vazsgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBTQ0FOX1JTUCBwYWNrZXRzIHJlY2VpdmVkIHdpdGggQ1JDIGVycm9yCisgICB1aW50OF90IG5SeEFkdkJ1ZkZ1bGw7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIEFEVipfSU5EIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCBkaWQgbm90IGZpdCBpbiBSeCBxdWV1ZQorICAgdWludDhfdCBuUnhTY2FuUnNwQnVmRnVsbDsgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBTQ0FOX1JTUCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgZGlkIG5vdCBmaXQgaW4gUnggcXVldWUKKyAgIGludDhfdCBsYXN0UnNzaTsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgUlNTSSBvZiB0aGUgbGFzdCByZWNlaXZlZCBwYWNrZXQKKyAgIHVpbnQ4X3QgX19kdW1teTA7CisgICByYXRtcl90IHRpbWVTdGFtcDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGltZSBzdGFtcCBvZiB0aGUgbGFzdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgQURWKl9JTkQgcGFja2V0IHRoYXQgd2FzIG5vdCBpZ25vcmVkCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZUluaXRpYXRvck91dHB1dAorLy8hIEB7CisvLyEgT3V0cHV0IHN0cnVjdHVyZSBmb3IgaW5pdGlhdG9yIChDTURfQkxFX0lOSVRJQVRPUikKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlSW5pdGlhdG9yT3V0cHV0X3MgeworICAgdWludDhfdCBuVHhDb25uZWN0UmVxOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiB0cmFuc21pdHRlZCBDT05ORUNUX1JFUSBwYWNrZXRzCisgICB1aW50OF90IG5SeEFkdk9rOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIEFEVipfSU5EIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBDUkMgT0sgYW5kIG5vdCBpZ25vcmVkCisgICB1aW50MTZfdCBuUnhBZHZJZ25vcmVkOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIEFEVipfSU5EIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBDUkMgT0ssIGJ1dCBpZ25vcmVkCisgICB1aW50MTZfdCBuUnhBZHZOb2s7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIEFEVipfSU5EIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IKKyAgIHVpbnQ4X3QgblJ4QWR2QnVmRnVsbDsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgQURWKl9JTkQgcGFja2V0cyByZWNlaXZlZCB0aGF0IGRpZCBub3QgZml0IGluIFJ4IHF1ZXVlCisgICBpbnQ4X3QgbGFzdFJzc2k7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIFJTU0kgb2YgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0CisgICByYXRtcl90IHRpbWVTdGFtcDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGltZSBzdGFtcCBvZiB0aGUgcmVjZWl2ZWQgQURWKl9JTkQgcGFja2V0IHRoYXQgY2F1c2VkIHRyYW5zbWlzc2lvbiBvZiBDT05ORUNUX1JFUQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVHZW5lcmljUnhPdXRwdXQKKy8vISBAeworLy8hIE91dHB1dCBzdHJ1Y3R1cmUgZm9yIGdlbmVyaWMgUnggKENNRF9CTEVfR0VORVJJQ19SWCkKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlR2VuZXJpY1J4T3V0cHV0X3MgeworICAgdWludDE2X3QgblJ4T2s7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHdpdGggQ1JDIE9LCisgICB1aW50MTZfdCBuUnhOb2s7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IKKyAgIHVpbnQxNl90IG5SeEJ1ZkZ1bGw7ICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCBhbmQgZGlzY2FyZGVkIGR1ZSB0byBsYWNrIG9mIGJ1ZmZlciBzcGFjZQorICAgaW50OF90IGxhc3RSc3NpOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBSU1NJIG9mIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldAorICAgdWludDhfdCBfX2R1bW15MDsKKyAgIHJhdG1yX3QgdGltZVN0YW1wOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaW1lIHN0YW1wIG9mIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVUeFRlc3RPdXRwdXQKKy8vISBAeworLy8hIE91dHB1dCBzdHJ1Y3R1cmUgZm9yIFR4IHRlc3QgKENNRF9CTEVfVFhfVEVTVCkKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlVHhUZXN0T3V0cHV0X3MgeworICAgdWludDE2X3QgblR4OyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIHRyYW5zbWl0dGVkCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZVdoaXRlTGlzdEVudHJ5CisvLyEgQHsKKy8vISBXaGl0ZSBsaXN0IGVudHJ5IHN0cnVjdHVyZQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVXaGl0ZUxpc3RFbnRyeV9zIHsKKyAgIHVpbnQ4X3Qgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygd2hpbGUgbGlzdCBlbnRyaWVzLiBVc2VkIGluIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgbGlzdCBvbmx5CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiRW5hYmxlOjE7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGVudHJ5IGlzIGluIHVzZSwgMCBpZiB0aGUgZW50cnkgaXMgbm90IGluIHVzZQorICAgICAgdWludDhfdCBhZGRyVHlwZToxOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIGFkZHJlc3MgaW4gdGhlIGVudHJ5ICZuZGFzaDsgcHVibGljICgwKSBvciByYW5kb20gKDEpCisgICAgICB1aW50OF90IGJXbElnbjoxOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMSBpZiB0aGUgZW50cnkgaXMgdG8gYmUgaWdub3JlZCBieSBhIHNjYW5uZXIsIDAgb3RoZXJ3aXNlLiBVc2VkIHRvIG1hc2sgb3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgZW50cmllcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHNjYW5uZWQgYW5kIHJlcG9ydGVkLgorICAgICAgdWludDhfdCA6MTsKKyAgICAgIHVpbnQ4X3QgYklya1ZhbGlkOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAxIGlmIGEgdmFsaWQgSVJLIGV4aXN0cywgc28gdGhhdCB0aGUgZW50cnkgaXMgdG8gYmUgaWdub3JlZCBieSBhbiBpbml0aWF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMCBvdGhlcndpc2UKKyAgIH0gY29uZjsKKyAgIHVpbnQxNl90IGFkZHJlc3M7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBMZWFzdCBzaWduaWZpY2FudCAxNiBiaXRzIG9mIHRoZSBhZGRyZXNzIGNvbnRhaW5lZCBpbiB0aGUgZW50cnkKKyAgIHVpbnQzMl90IGFkZHJlc3NIaTsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBNb3N0IHNpZ25pZmljYW50IDMyIGJpdHMgb2YgdGhlIGFkZHJlc3MgY29udGFpbmVkIGluIHRoZSBlbnRyeQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVSeFN0YXR1cworLy8hIEB7CisvLyEgUmVjZWl2ZSBzdGF0dXMgYnl0ZSB0aGF0IG1heSBiZSBhcHBlbmRlZCB0byBtZXNzYWdlIGluIHJlY2VpdmUgYnVmZmVyCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZVJ4U3RhdHVzX3MgeworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgY2hhbm5lbDo2OyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaGUgY2hhbm5lbCBvbiB3aGljaCB0aGUgcGFja2V0IHdhcyByZWNlaXZlZCwgcHJvdmlkZWQgY2hhbm5lbCBpcyBpbiB0aGUgcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwJm5kYXNoOzM5OyBvdGhlcndpc2UgMHgzRgorICAgICAgdWludDhfdCBiSWdub3JlOjE7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIHBhY2tldCBpcyBtYXJrZWQgYXMgaWdub3JlZCwgMCBvdGhlcndpc2UKKyAgICAgIHVpbnQ4X3QgYkNyY0VycjoxOyAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBwYWNrZXQgd2FzIHJlY2VpdmVkIHdpdGggQ1JDIGVycm9yLCAwIG90aGVyd2lzZQorICAgfSBzdGF0dXM7Cit9OworCisvLyEgQH0KKworLy8hIEB9CisvLyEgQH0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfYmxlX21haWxib3guaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX2JsZV9tYWlsYm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyMzc0NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX2JsZV9tYWlsYm94LmgKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJmX2JsZV9tYWlsYm94LmgKKyogIFJldmlzZWQ6ICAgICAgICAkICQKKyogIFJldmlzaW9uOiAgICAgICAkICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbml0aW9ucyBmb3IgQkxFIGludGVyZmFjZQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfQkxFX01BSUxCT1hfSAorI2RlZmluZSBfQkxFX01BSUxCT1hfSAorCisvLy8gXG5hbWUgUmFkaW8gb3BlcmF0aW9uIHN0YXR1cworLy8vQHsKKy8vLyBcbmFtZSBPcGVyYXRpb24gZmluaXNoZWQgbm9ybWFsbHkKKy8vL0B7CisjZGVmaW5lIEJMRV9ET05FX09LICAgICAgICAgICAgIDB4MTQwMCAgLy8vPCBPcGVyYXRpb24gZW5kZWQgbm9ybWFsbHkKKyNkZWZpbmUgQkxFX0RPTkVfUlhUSU1FT1VUICAgICAgMHgxNDAxICAvLy88IFRpbWVvdXQgb2YgZmlyc3QgUnggb2Ygc2xhdmUgb3BlcmF0aW9uIG9yIGVuZCBvZiBzY2FuIHdpbmRvdworI2RlZmluZSBCTEVfRE9ORV9OT1NZTkMgICAgICAgICAweDE0MDIgIC8vLzwgVGltZW91dCBvZiBzdWJzZXF1ZW50IFJ4CisjZGVmaW5lIEJMRV9ET05FX1JYRVJSICAgICAgICAgIDB4MTQwMyAgLy8vPCBPcGVyYXRpb24gZW5kZWQgYmVjYXVzZSBvZiByZWNlaXZlIGVycm9yIChDUkMgb3Igb3RoZXIpCisjZGVmaW5lIEJMRV9ET05FX0NPTk5FQ1QgICAgICAgIDB4MTQwNCAgLy8vPCBDT05ORUNUX1JFUSByZWNlaXZlZCBvciB0cmFuc21pdHRlZAorI2RlZmluZSBCTEVfRE9ORV9NQVhOQUNLICAgICAgICAweDE0MDUgIC8vLzwgTWF4aW11bSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zIGV4Y2VlZGVkCisjZGVmaW5lIEJMRV9ET05FX0VOREVEICAgICAgICAgIDB4MTQwNiAgLy8vPCBPcGVyYXRpb24gc3RvcHBlZCBhZnRlciBlbmQgdHJpZ2dlcgorI2RlZmluZSBCTEVfRE9ORV9BQk9SVCAgICAgICAgICAweDE0MDcgIC8vLzwgT3BlcmF0aW9uIGFib3J0ZWQgYnkgY29tbWFuZAorI2RlZmluZSBCTEVfRE9ORV9TVE9QUEVEICAgICAgICAweDE0MDggIC8vLzwgT3BlcmF0aW9uIHN0b3BwZWQgYWZ0ZXIgc3RvcCBjb21tYW5kCisvLy9AfQorLy8vIFxuYW1lIE9wZXJhdGlvbiBmaW5pc2hlZCB3aXRoIGVycm9yCisvLy9AeworI2RlZmluZSBCTEVfRVJST1JfUEFSICAgICAgICAgICAweDE4MDAgIC8vLzwgSWxsZWdhbCBwYXJhbWV0ZXIKKyNkZWZpbmUgQkxFX0VSUk9SX1JYQlVGICAgICAgICAgMHgxODAxICAvLy88IE5vIGF2YWlsYWJsZSBSeCBidWZmZXIgKEFkdmVydGlzZXIsIFNjYW5uZXIsIEluaXRpYXRvcikKKyNkZWZpbmUgQkxFX0VSUk9SX05PX1NFVFVQICAgICAgMHgxODAyICAvLy88IE9wZXJhdGlvbiB1c2luZyBSeCBvciBUeCBhdHRlbXRlZCB3aGVuIG5vdCBpbiBCTEUgbW9kZQorI2RlZmluZSBCTEVfRVJST1JfTk9fRlMgICAgICAgICAweDE4MDMgIC8vLzwgT3BlcmF0aW9uIHVzaW5nIFJ4IG9yIFR4IGF0dGVtdGVkIHdpdGhvdXQgZnJlcXVlbmN5IHN5bnRoIGNvbmZpZ3VyZWQKKyNkZWZpbmUgQkxFX0VSUk9SX1NZTlRIX1BST0cgICAgMHgxODA0ICAvLy88IFN5bnRoZXNpemVyIHByb2dyYW1taW5nIGZhaWxlZCB0byBjb21wbGV0ZSBvbiB0aW1lCisjZGVmaW5lIEJMRV9FUlJPUl9SWE9WRiAgICAgICAgIDB4MTgwNSAgLy8vPCBSZWNlaXZlciBvdmVyZmxvd2VkIGR1cmluZyBvcGVyYXRpb24KKyNkZWZpbmUgQkxFX0VSUk9SX1RYVU5GICAgICAgICAgMHgxODA2ICAvLy88IFRyYW5zbWl0dGVyIHVuZGVyZmxvd2VkIGR1cmluZyBvcGVyYXRpb24KKy8vL0B9CisvLy9AfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX2NvbW1vbl9jbWQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX2NvbW1vbl9jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzk3YjM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfY29tbW9uX2NtZC5oCkBAIC0wLDAgKzEsOTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgcmZfY29tbW9uX2NtZC5oCisqICBSZXZpc2VkOiAgICAgICAgJCAkCisqICBSZXZpc2lvbjogICAgICAgJCAkCisqCisqICBEZXNjcmlwdGlvbjogICAgQ0MyNnh4IEFQSSBmb3IgY29tbW9uL2dlbmVyaWMgY29tbWFuZHMKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19DT01NT05fQ01EX0gKKyNkZWZpbmUgX19DT01NT05fQ01EX0gKKworI2lmbmRlZiBfX1JGQ19TVFJVQ1QKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBfX1JGQ19TVFJVQ1QgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSkKKyNlbHNlCisjZGVmaW5lIF9fUkZDX1NUUlVDVAorI2VuZGlmCisjZW5kaWYKKworLy8hIFxhZGR0b2dyb3VwIHJmYworLy8hIEB7CisKKy8vISBcYWRkdG9ncm91cCBjb21tb25fY21kCisvLyEgQHsKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9tYWlsYm94Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfY29tbWFuZF9zIHJmY19jb21tYW5kX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX3JhZGlvT3BfcyByZmNfcmFkaW9PcF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfTk9QX3MgcmZjX0NNRF9OT1BfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1JBRElPX1NFVFVQX3MgcmZjX0NNRF9SQURJT19TRVRVUF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfRlNfcyByZmNfQ01EX0ZTX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9GU19PRkZfcyByZmNfQ01EX0ZTX09GRl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUlhfVEVTVF9zIHJmY19DTURfUlhfVEVTVF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfVFhfVEVTVF9zIHJmY19DTURfVFhfVEVTVF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU1lOQ19TVE9QX1JBVF9zIHJmY19DTURfU1lOQ19TVE9QX1JBVF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU1lOQ19TVEFSVF9SQVRfcyByZmNfQ01EX1NZTkNfU1RBUlRfUkFUX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9DT1VOVF9zIHJmY19DTURfQ09VTlRfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0ZTX1BPV0VSVVBfcyByZmNfQ01EX0ZTX1BPV0VSVVBfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0ZTX1BPV0VSRE9XTl9zIHJmY19DTURfRlNfUE9XRVJET1dOX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TQ0hfSU1NX3MgcmZjX0NNRF9TQ0hfSU1NX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9DT1VOVF9CUkFOQ0hfcyByZmNfQ01EX0NPVU5UX0JSQU5DSF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUEFUVEVSTl9DSEVDS19zIHJmY19DTURfUEFUVEVSTl9DSEVDS190OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQUJPUlRfcyByZmNfQ01EX0FCT1JUX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TVE9QX3MgcmZjX0NNRF9TVE9QX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9HRVRfUlNTSV9zIHJmY19DTURfR0VUX1JTU0lfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1VQREFURV9SQURJT19TRVRVUF9zIHJmY19DTURfVVBEQVRFX1JBRElPX1NFVFVQX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9UUklHR0VSX3MgcmZjX0NNRF9UUklHR0VSX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9HRVRfRldfSU5GT19zIHJmY19DTURfR0VUX0ZXX0lORk9fdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1NUQVJUX1JBVF9zIHJmY19DTURfU1RBUlRfUkFUX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9QSU5HX3MgcmZjX0NNRF9QSU5HX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9SRUFEX1JGUkVHX3MgcmZjX0NNRF9SRUFEX1JGUkVHX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9BRERfREFUQV9FTlRSWV9zIHJmY19DTURfQUREX0RBVEFfRU5UUllfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1JFTU9WRV9EQVRBX0VOVFJZX3MgcmZjX0NNRF9SRU1PVkVfREFUQV9FTlRSWV90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfRkxVU0hfUVVFVUVfcyByZmNfQ01EX0ZMVVNIX1FVRVVFX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9DTEVBUl9SWF9zIHJmY19DTURfQ0xFQVJfUlhfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1JFTU9WRV9QRU5ESU5HX0VOVFJJRVNfcyByZmNfQ01EX1JFTU9WRV9QRU5ESU5HX0VOVFJJRVNfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1NFVF9SQVRfQ01QX3MgcmZjX0NNRF9TRVRfUkFUX0NNUF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU0VUX1JBVF9DUFRfcyByZmNfQ01EX1NFVF9SQVRfQ1BUX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9ESVNBQkxFX1JBVF9DSF9zIHJmY19DTURfRElTQUJMRV9SQVRfQ0hfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1NFVF9SQVRfT1VUUFVUX3MgcmZjX0NNRF9TRVRfUkFUX09VVFBVVF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQVJNX1JBVF9DSF9zIHJmY19DTURfQVJNX1JBVF9DSF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfRElTQVJNX1JBVF9DSF9zIHJmY19DTURfRElTQVJNX1JBVF9DSF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU0VUX1RYX1BPV0VSX3MgcmZjX0NNRF9TRVRfVFhfUE9XRVJfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1VQREFURV9GU19zIHJmY19DTURfVVBEQVRFX0ZTX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CVVNfUkVRVUVTVF9zIHJmY19DTURfQlVTX1JFUVVFU1RfdDsKKworLy8hIFxhZGR0b2dyb3VwIGNvbW1hbmQKKy8vISBAeworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfY29tbWFuZF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgcmFkaW9PcAorLy8hIEB7CisvLyEgQ29tbW9uIGRlZmluaXRpb24gZm9yIHJhZGlvIG9wZXJhdGlvbiBjb21tYW5kcworCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19yYWRpb09wX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlcgorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9OT1AKKy8vISBAeworI2RlZmluZSBDTURfTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMQorLy8hIE5vIE9wZXJhdGlvbiBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfTk9QX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA4MDEKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfUkFESU9fU0VUVVAKKy8vISBAeworI2RlZmluZSBDTURfUkFESU9fU0VUVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMgorLy8hIFJhZGlvIFNldHVwIENvbW1hbmQgZm9yIFByZS1EZWZpbmVkIFNjaGVtZXMKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9SQURJT19TRVRVUF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwODAyCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQ4X3QgbW9kZTsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaGUgbWFpbiBtb2RlIHRvIHVzZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDAwOiBCTEU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMHgwMTogSUVFRSA4MDIuMTUuNDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDAyOiAyIE1icHMgR0ZTSzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDA1OiA1IE1icHMgY29kZWQgOC1GU0s8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMHhGRjogS2VlcCBleGlzdGluZyBtb2RlOyB1cGRhdGUgb3ZlcnJpZGVzIG9ubHk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgIHVpbnQ4X3QgX19kdW1teTA7CisgICBzdHJ1Y3QgeworICAgICAgdWludDE2X3QgZnJvbnRFbmRNb2RlOjM7ICAgICAgICAgIC8vITwgXGJyaWVmIDB4MDA6IERpZmZlcmVudGlhbCBtb2RlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDB4MDE6IFNpbmdsZS1lbmRlZCBtb2RlIFJGUDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDAyOiBTaW5nbGUtZW5kZWQgbW9kZSBSRk48YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMHgwNSBTaW5nbGUtZW5kZWQgbW9kZSBSRlAgd2l0aCBleHRlcm5hbCBmcm9udGVuZCBjb250cm9sIG9uIFJGIHBpbnMgKFJGTiBhbmQgUlhUWCk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMHgwNiBTaW5nbGUtZW5kZWQgbW9kZSBSRk4gd2l0aCBleHRlcm5hbCBmcm9udGVuZCBjb250cm9sIG9uIFJGIHBpbnMgKFJGUCBhbmQgUlhUWCk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgICAgIHVpbnQxNl90IGJpYXNNb2RlOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBJbnRlcm5hbCBiaWFzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEV4dGVybmFsIGJpYXMKKyAgICAgIHVpbnQxNl90IGFuYWxvZ0NmZ01vZGU6NjsgICAgICAgICAvLyE8IFxicmllZiAweDAwOiBXcml0ZSBhbmFsb2cgY29uZmlndXJhdGlvbi48YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUmVxdWlyZWQgZmlyc3QgdGltZSBhZnRlciBib290IGFuZCB3aGVuIGNoYW5naW5nIGZyZXF1ZW5jeSBiYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgb3IgZnJvbnQtZW5kIGNvbmZpZ3VyYXRpb248YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMHgyRDogS2VlcCBhbmFsb2cgY29uZmlndXJhdGlvbi48YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTWF5IGJlIHVzZWQgYWZ0ZXIgc3RhbmRieSBvciB3aGVuIGNoYW5naW5nIG1vZGUgd2l0aCB0aGUgc2FtZSBmcmVxdWVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBiYW5kIGFuZCBmcm9udC1lbmQgY29uZmlndXJhdGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgICAgdWludDE2X3QgYk5vRnNQb3dlclVwOjE7ICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFBvd2VyIHVwIGZyZXF1ZW5jeSBzeW50aDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBEbyBub3QgcG93ZXIgdXAgZnJlcXVlbmN5IHN5bnRoCisgICB9IGNvbmZpZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZmlndXJhdGlvbiBvcHRpb25zCisgICB1aW50MTZfdCB0eFBvd2VyOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJhbnNtaXQgcG93ZXIKKyAgIHVpbnQzMl90KiBwUmVnT3ZlcnJpZGU7ICAgICAgICAgICAgICAvLyE8IFxicmllZiBQb2ludGVyIHRvIGEgbGlzdCBvZiBoYXJkd2FyZSBhbmQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgdG8gb3ZlcnJpZGUuIElmIE5VTEwsIG5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgb3ZlcnJpZGUgaXMgdXNlZC4KK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0ZTCisvLyEgQHsKKyNkZWZpbmUgQ01EX0ZTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDMKKy8vISBGcmVxdWVuY3kgU3ludGhlc2l6ZXIgUHJvZ3JhbW1pbmcgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0ZTX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA4MDMKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDE2X3QgZnJlcXVlbmN5OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBmcmVxdWVuY3kgaW4gTUh6IHRvIHR1bmUgdG8KKyAgIHVpbnQxNl90IGZyYWN0RnJlcTsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBGcmFjdGlvbmFsIHBhcnQgb2YgdGhlIGZyZXF1ZW5jeSB0byB0dW5lIHRvCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiVHhNb2RlOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFN0YXJ0IHN5bnRoIGluIFJYIG1vZGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogU3RhcnQgc3ludGggaW4gVFggbW9kZQorICAgICAgdWludDhfdCByZWZGcmVxOjY7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDxpPlJlc2VydmVkPC9pPgorICAgfSBzeW50aENvbmY7CisgICB1aW50OF90IF9fZHVtbXkwOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgPGk+UmVzZXJ2ZWQ8L2k+LCBhbHdheXMgd3JpdGUgMAorICAgdWludDhfdCBfX2R1bW15MTsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDxpPlJlc2VydmVkPC9pPgorICAgdWludDhfdCBfX2R1bW15MjsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDxpPlJlc2VydmVkPC9pPgorICAgdWludDE2X3QgX19kdW1teTM7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDxpPlJlc2VydmVkPC9pPgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfRlNfT0ZGCisvLyEgQHsKKyNkZWZpbmUgQ01EX0ZTX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDQKKy8vISBDb21tYW5kIGZvciBUdXJuaW5nIG9mZiBGcmVxdWVuY3kgU3ludGhlc2l6ZXIKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9GU19PRkZfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDgwNAorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9SWF9URVNUCisvLyEgQHsKKyNkZWZpbmUgQ01EX1JYX1RFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDcKKy8vISBSZWNlaXZlciBUZXN0IENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9SWF9URVNUX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA4MDcKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYkVuYUZpZm86MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBEbyBub3QgZW5hYmxlIEZJRk8gaW4gbW9kZW0sIHNvIHRoYXQgcmVjZWl2ZWQgZGF0YSBpcyBub3QgYXZhaWxhYmxlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEVuYWJsZSBGSUZPIGluIG1vZGVtICZuZGFzaDsgdGhlIGRhdGEgbXVzdCBiZSByZWFkIG91dCBieSB0aGUgYXBwbGljYXRpb24KKyAgICAgIHVpbnQ4X3QgYkZzT2ZmOjE7ICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBLZWVwIGZyZXF1ZW5jeSBzeW50aCBvbiBhZnRlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFR1cm4gZnJlcXVlbmN5IHN5bnRoIG9mZiBhZnRlciBjb21tYW5kCisgICAgICB1aW50OF90IGJOb1N5bmM6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogUnVuIHN5bmMgc2VhcmNoIGFzIG5vcm1hbCBmb3IgdGhlIGNvbmZpZ3VyZWQgbW9kZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBXcml0ZSBjb3JyZWxhdGlvbiB0aHJlc2hvbGRzIHRvIHRoZSBtYXhpbXVtIHZhbHVlIHRvIGF2b2lkIGdldHRpbmcgc3luYworICAgfSBjb25maWc7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBlbmRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgY2xhc3NpZmllciBmb3IgZW5kaW5nIHRoZSBvcGVyYXRpb24KKyAgIHVpbnQzMl90IHN5bmNXb3JkOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBTeW5jIHdvcmQgdG8gdXNlIGZvciByZWNlaXZlcgorICAgcmF0bXJfdCBlbmRUaW1lOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRpbWUgdG8gZW5kIHRoZSBvcGVyYXRpb24KK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1RYX1RFU1QKKy8vISBAeworI2RlZmluZSBDTURfVFhfVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwOAorLy8hIFRyYW5zbWl0dGVyIFRlc3QgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1RYX1RFU1RfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDgwOAorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiVXNlQ3c6MTsgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFNlbmQgbW9kdWxhdGVkIHNpZ25hbDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBTZW5kIGNvbnRpbnVvdXMgd2F2ZQorICAgICAgdWludDhfdCBiRnNPZmY6MTsgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEtlZXAgZnJlcXVlbmN5IHN5bnRoIG9uIGFmdGVyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVHVybiBmcmVxdWVuY3kgc3ludGggb2ZmIGFmdGVyIGNvbW1hbmQKKyAgICAgIHVpbnQ4X3Qgd2hpdGVuTW9kZToyOyAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyB3aGl0ZW5pbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRGVmYXVsdCB3aGl0ZW5pbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogUFJCUy0xNTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiBQUkJTLTMyCisgICB9IGNvbmZpZzsKKyAgIHVpbnQ4X3QgX19kdW1teTA7CisgICB1aW50MTZfdCB0eFdvcmQ7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVmFsdWUgdG8gc2VuZCB0byB0aGUgbW9kZW0gYmVmb3JlIHdoaXRlbmluZworICAgdWludDhfdCBfX2R1bW15MTsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IGVuZFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciBjbGFzc2lmaWVyIGZvciBlbmRpbmcgdGhlIG9wZXJhdGlvbgorICAgdWludDMyX3Qgc3luY1dvcmQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFN5bmMgd29yZCB0byB1c2UgZm9yIHRyYW5zbWl0dGVyCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGltZSB0byBlbmQgdGhlIG9wZXJhdGlvbgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfU1lOQ19TVE9QX1JBVAorLy8hIEB7CisjZGVmaW5lIENNRF9TWU5DX1NUT1BfUkFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODA5CisvLyEgU3luY2hyb25pemUgYW5kIFN0b3AgUmFkaW8gVGltZXIgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1NZTkNfU1RPUF9SQVRfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDgwOQorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICB1aW50MTZfdCBfX2R1bW15MDsKKyAgIHJhdG1yX3QgcmF0MDsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaGUgcmV0dXJuZWQgUkFUIHRpbWVyIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIHRoZSBSQVQgd291bGQgaGF2ZSBoYWQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBSVEMgd2FzIHplcm8KK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1NZTkNfU1RBUlRfUkFUCisvLyEgQHsKKyNkZWZpbmUgQ01EX1NZTkNfU1RBUlRfUkFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MEEKKy8vISBTeW5jaHJvdXNseSBTdGFydCBSYWRpbyBUaW1lciBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU1lOQ19TVEFSVF9SQVRfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDgwQQorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICB1aW50MTZfdCBfX2R1bW15MDsKKyAgIHJhdG1yX3QgcmF0MDsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaGUgZGVzaXJlZCBSQVQgdGltZXIgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgdGhlIFJBVCB3b3VsZCBoYXZlIGhhZCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFJUQyB3YXMgemVyby4gVGhpcyBwYXJhbWV0ZXIgaXMgcmV0dXJuZWQgYnkgQ01EX1NZTkNfU1RPUF9SQVQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0NPVU5UCisvLyEgQHsKKyNkZWZpbmUgQ01EX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MEIKKy8vISBDb3VudGVyIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9DT1VOVF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwODBCCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQxNl90IGNvdW50ZXI7ICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBDb3VudGVyLiBPbiBzdGFydCwgdGhlIHJhZGlvIENQVSBkZWNyZW1lbnRzIHRoZSB2YWx1ZSwgYW5kIHRoZSBlbmQgc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBkaWZmZXJzIGlmIHRoZSByZXN1bHQgaXMgemVybworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfRlNfUE9XRVJVUAorLy8hIEB7CisjZGVmaW5lIENNRF9GU19QT1dFUlVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODBDCisvLyEgUG93ZXIgdXAgRnJlcXVlbmN5IFN5bnRoZXN6aWVyIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9GU19QT1dFUlVQX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA4MEMKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDE2X3QgX19kdW1teTA7CisgICB1aW50MzJfdCogcFJlZ092ZXJyaWRlOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBhIGxpc3Qgb2YgaGFyZHdhcmUgYW5kIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIHRvIG92ZXJyaWRlLiBJZiBOVUxMLCBubyBvdmVycmlkZSBpcyB1c2VkLgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfRlNfUE9XRVJET1dOCisvLyEgQHsKKyNkZWZpbmUgQ01EX0ZTX1BPV0VSRE9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MEQKKy8vISBQb3dlciBkb3duIEZyZXF1ZW5jeSBTeW50aGVzemllciBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfRlNfUE9XRVJET1dOX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA4MEQKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfU0NIX0lNTQorLy8hIEB7CisjZGVmaW5lIENNRF9TQ0hfSU1NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODEwCisvLyEgUnVuIEltbWlkaWF0ZSBDb21tYW5kIGFzIFJhZGlvIE9wZXJhdGlvbiBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU0NIX0lNTV9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwODEwCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQxNl90IF9fZHVtbXkwOworICAgdWludDMyX3QgY21kclZhbDsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFZhbHVlIGFzIHdvdWxkIGJlIHdyaXR0ZW4gdG8gQ01EUgorICAgdWludDMyX3QgY21kc3RhVmFsOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFZhbHVlIGFzIHdvdWxkIGJlIHJldHVybmVkIGluIENNRFNUQQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQ09VTlRfQlJBTkNICisvLyEgQHsKKyNkZWZpbmUgQ01EX0NPVU5UX0JSQU5DSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MTIKKy8vISBDb3VudGVyIENvbW1hbmQgd2l0aCBCcmFuY2ggb2YgQ29tbWFuZCBDaGFpbgorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0NPVU5UX0JSQU5DSF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwODEyCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQxNl90IGNvdW50ZXI7ICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBDb3VudGVyLiBPbiBzdGFydCwgdGhlIHJhZGlvIENQVSBkZWNyZW1lbnRzIHRoZSB2YWx1ZSwgYW5kIHRoZSBlbmQgc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBkaWZmZXJzIGlmIHRoZSByZXN1bHQgaXMgemVybworICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcElmT2s7ICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gbmV4dCBvcGVyYXRpb24gaWYgY291bnRlciBkaWQgbm90IGV4cGlyZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfUEFUVEVSTl9DSEVDSworLy8hIEB7CisjZGVmaW5lIENNRF9QQVRURVJOX0NIRUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODEzCisvLyEgQ29tbWFuZCBmb3IgQ2hlY2tpbmcgYSBWYWx1ZSBpbiBNZW1vcnkgYWdpbnN0IGEgUGF0dGVybgorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BBVFRFUk5fQ0hFQ0tfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDgxMworICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICBzdHJ1Y3QgeworICAgICAgdWludDE2X3Qgb3BlcmF0aW9uOjI7ICAgICAgICAgICAgIC8vITwgXGJyaWVmIE9wZXJhdGlvbiB0byBwZXJmb3JtPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFRydWUgaWYgdmFsdWUgPT0gPGNvZGU+Y29tcGFyZVZhbDwvY29kZT48YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVHJ1ZSBpZiB2YWx1ZSA8IDxjb2RlPmNvbXBhcmVWYWw8L2NvZGU+PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFRydWUgaWYgdmFsdWUgPiA8Y29kZT5jb21wYXJlVmFsPC9jb2RlPjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiA8aT5SZXNlcnZlZDwvaT4KKyAgICAgIHVpbnQxNl90IGJCeXRlUmV2OjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiAxLCBpbnRlcmNoYW5nZSB0aGUgZm91ciBieXRlcyBvZiB0aGUgdmFsdWUsIHNvIHRoYXQgdGhleSBhcmUgcmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIG1vc3Qtc2lnbmlmaWNhbnQtYnl0ZS1maXJzdC4KKyAgICAgIHVpbnQxNl90IGJCaXRSZXY6MTsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBwZXJmb3JtIGJpdCByZXZlcnNhbCBvZiB0aGUgdmFsdWUKKyAgICAgIHVpbnQxNl90IHNpZ25FeHRlbmQ6NTsgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBUcmVhdCB2YWx1ZSBhbmQgPGNvZGU+Y29tcGFyZVZhbDwvY29kZT4gYXMgdW5zaWduZWQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMSZuZGFzaDszMTogVHJlYXQgdmFsdWUgYW5kIDxjb2RlPmNvbXBhcmVWYWw8L2NvZGU+IGFzIHNpZ25lZCwgd2hlcmUgdGhlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgZ2l2ZXMgdGhlIG51bWJlciBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIHNpZ25lZCBudW1iZXIuCisgICAgICB1aW50MTZfdCBiUnhWYWw6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogVXNlIDxjb2RlPnBWYWx1ZTwvY29kZT4gYXMgYSBwb2ludGVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFVzZSA8Y29kZT5wVmFsdWU8L2NvZGU+IGFzIGEgc2lnbmVkIG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBjb21taXR0ZWQgUlggZW50cnkgZWxlbWVudAorICAgfSBwYXR0ZXJuT3B0OyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE9wdGlvbnMgZm9yIGNvbXBhcmlzb24KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3BJZk9rOyAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIG5leHQgb3BlcmF0aW9uIGlmIGNvbXBhcmlzb24gcmVzdWx0IHdhcyB0cnVlCisgICB1aW50OF90KiBwVmFsdWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byByZWFkIGZyb20sIG9yIG9mZnNldCBmcm9tIGxhc3QgUlggZW50cnkgaWYgPGNvZGU+cGF0dGVybk9wdC5iUnhWYWw8L2NvZGU+ID09IDEKKyAgIHVpbnQzMl90IG1hc2s7ICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBCaXQgbWFzayB0byBhcHBseSBiZWZvcmUgY29tcGFyaXNvbgorICAgdWludDMyX3QgY29tcGFyZVZhbDsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFZhbHVlIHRvIGNvbXBhcmUgdG8KK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0FCT1JUCisvLyEgQHsKKyNkZWZpbmUgQ01EX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDEKKy8vISBBYm9ydCBSdW5uaW5nIFJhZGlvIE9wZXJhdGlvbiBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQUJPUlRfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDQwMQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfU1RPUAorLy8hIEB7CisjZGVmaW5lIENNRF9TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAyCisvLyEgU3RvcCBSdW5uaW5nIFJhZGlvIE9wZXJhdGlvbiBDb21tYW5kIEdyYWNlZnVsbHkKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TVE9QX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA0MDIKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0dFVF9SU1NJCisvLyEgQHsKKyNkZWZpbmUgQ01EX0dFVF9SU1NJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDMKKy8vISBSZWFkIFJTU0kgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0dFVF9SU1NJX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA0MDMKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1VQREFURV9SQURJT19TRVRVUAorLy8hIEB7CisjZGVmaW5lIENNRF9VUERBVEVfUkFESU9fU0VUVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisvLyEgVXBkYXRlIFJhZGlvIFNldHRpbmdzIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9VUERBVEVfUkFESU9fU0VUVVBfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDAwMQorICAgdWludDE2X3QgX19kdW1teTA7CisgICB1aW50MzJfdCogcFJlZ092ZXJyaWRlOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBhIGxpc3Qgb2YgaGFyZHdhcmUgYW5kIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIHRvIG92ZXJyaWRlCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9UUklHR0VSCisvLyEgQHsKKyNkZWZpbmUgQ01EX1RSSUdHRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDQKKy8vISBHZW5lcmF0ZSBDb21tYW5kIFRyaWdnZXIKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9UUklHR0VSX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA0MDQKKyAgIHVpbnQ4X3QgdHJpZ2dlck5vOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb21tYW5kIHRyaWdnZXIgbnVtYmVyCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9HRVRfRldfSU5GTworLy8hIEB7CisjZGVmaW5lIENNRF9HRVRfRldfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisvLyEgUmVxdWVzdCBJbmZvcm1hdGlvbiBvbiB0aGUgUkYgQ29yZSBST00gRmlybXdhcmUKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9HRVRfRldfSU5GT19zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwMDAyCisgICB1aW50MTZfdCB2ZXJzaW9uTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgRmlybXdhcmUgdmVyc2lvbiBudW1iZXIKKyAgIHVpbnQxNl90IHN0YXJ0T2Zmc2V0OyAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgc3RhcnQgb2YgZnJlZSBSQU0KKyAgIHVpbnQxNl90IGZyZWVSYW1TejsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgc2l6ZSBvZiBmcmVlIFJBTQorICAgdWludDE2X3QgYXZhaWxSYXRDaDsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEJpdG1hcCBvZiBhdmFpbGFibGUgUkFUIGNoYW5uZWxzCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9TVEFSVF9SQVQKKy8vISBAeworI2RlZmluZSBDTURfU1RBUlRfUkFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNQorLy8hIEFzeW5jaHJvbm91c2x5IFN0YXJ0IFJhZGlvIFRpbWVyIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TVEFSVF9SQVRfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDQwNQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfUElORworLy8hIEB7CisjZGVmaW5lIENNRF9QSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDA2CisvLyEgUmVzcG9uZCB3aXRoIENvbW1hbmQgQUNLIE9ubHkKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9QSU5HX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA0MDYKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1JFQURfUkZSRUcKKy8vISBAeworI2RlZmluZSBDTURfUkVBRF9SRlJFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMQorLy8hIFJlYWQgUkYgQ29yZSBIYXJkd2FyZSBSZWdpc3Rlcgorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1JFQURfUkZSRUdfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDYwMQorICAgdWludDE2X3QgYWRkcmVzczsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIFJGIGNvcmUgSFcgcmVnaXN0ZXIgYmFuayAoMHg0MDA0MDAwMCkKKyAgIHVpbnQzMl90IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBSZXR1cm5lZCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0FERF9EQVRBX0VOVFJZCisvLyEgQHsKKyNkZWZpbmUgQ01EX0FERF9EQVRBX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDUKKy8vISBBZGQgRGF0YSBFbnRyeSB0byBRdWV1ZQorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0FERF9EQVRBX0VOVFJZX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDAwMDUKKyAgIHVpbnQxNl90IF9fZHVtbXkwOworICAgZGF0YVF1ZXVlX3QqIHBRdWV1ZTsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIHF1ZXVlIHN0cnVjdHVyZSB0byB3aGljaCB0aGUgZW50cnkgd2lsbCBiZSBhZGRlZAorICAgdWludDhfdCogcEVudHJ5OyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIGVudHJ5Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9SRU1PVkVfREFUQV9FTlRSWQorLy8hIEB7CisjZGVmaW5lIENNRF9SRU1PVkVfREFUQV9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2CisvLyEgUmVtb3ZlIEZpcnN0IERhdGEgRW50cnkgZnJvbSBRdWV1ZQorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1JFTU9WRV9EQVRBX0VOVFJZX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDAwMDYKKyAgIHVpbnQxNl90IF9fZHVtbXkwOworICAgZGF0YVF1ZXVlX3QqIHBRdWV1ZTsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIHF1ZXVlIHN0cnVjdHVyZSBmcm9tIHdoaWNoIHRoZSBlbnRyeSB3aWxsIGJlIHJlbW92ZWQKKyAgIHVpbnQ4X3QqIHBFbnRyeTsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBlbnRyeSB0aGF0IHdhcyByZW1vdmVkCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9GTFVTSF9RVUVVRQorLy8hIEB7CisjZGVmaW5lIENNRF9GTFVTSF9RVUVVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3CisvLyEgRmx1c2ggRGF0YSBRdWV1ZQorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0ZMVVNIX1FVRVVFX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDAwMDcKKyAgIHVpbnQxNl90IF9fZHVtbXkwOworICAgZGF0YVF1ZXVlX3QqIHBRdWV1ZTsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIHF1ZXVlIHN0cnVjdHVyZSB0byBiZSBmbHVzaGVkCisgICB1aW50OF90KiBwRmlyc3RFbnRyeTsgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgZmlyc3QgZW50cnkgdGhhdCB3YXMgcmVtb3ZlZAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQ0xFQVJfUlgKKy8vISBAeworI2RlZmluZSBDTURfQ0xFQVJfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorLy8hIENsZWFyIGFsbCBSWCBRdWV1ZSBFbnRyaWVzCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQ0xFQVJfUlhfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDAwOAorICAgdWludDE2X3QgX19kdW1teTA7CisgICBkYXRhUXVldWVfdCogcFF1ZXVlOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgcXVldWUgc3RydWN0dXJlIHRvIGJlIGNsZWFyZWQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1JFTU9WRV9QRU5ESU5HX0VOVFJJRVMKKy8vISBAeworI2RlZmluZSBDTURfUkVNT1ZFX1BFTkRJTkdfRU5UUklFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOQorLy8hIFJlbW92ZSBQZW5kaW5nIEVudHJpZXMgZnJvbSBRdWV1ZQorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1JFTU9WRV9QRU5ESU5HX0VOVFJJRVNfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDAwOQorICAgdWludDE2X3QgX19kdW1teTA7CisgICBkYXRhUXVldWVfdCogcFF1ZXVlOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgcXVldWUgc3RydWN0dXJlIHRvIGJlIGZsdXNoZWQKKyAgIHVpbnQ4X3QqIHBGaXJzdEVudHJ5OyAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBmaXJzdCBlbnRyeSB0aGF0IHdhcyByZW1vdmVkCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9TRVRfUkFUX0NNUAorLy8hIEB7CisjZGVmaW5lIENNRF9TRVRfUkFUX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBBCisvLyEgU2V0IFJhZGlvIFRpbWVyIENoYW5uZWwgaW4gQ29tcGFyZSBNb2RlCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU0VUX1JBVF9DTVBfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDAwQQorICAgdWludDhfdCByYXRDaDsgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSByYWRpbyB0aW1lciBjaGFubmVsIG51bWJlcgorICAgdWludDhfdCBfX2R1bW15MDsKKyAgIHJhdG1yX3QgY29tcGFyZVRpbWU7ICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdGltZSBhdCB3aGljaCB0aGUgY29tcGFyZSBvY2N1cnMKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1NFVF9SQVRfQ1BUCisvLyEgQHsKKyNkZWZpbmUgQ01EX1NFVF9SQVRfQ1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDMKKy8vISBTZXQgUmFkaW8gVGltZXIgQ2hhbm5lbCBpbiBDYXB0dXJlIE1vZGUKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TRVRfUkFUX0NQVF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwNjAzCisgICBzdHJ1Y3QgeworICAgICAgdWludDE2X3QgOjM7CisgICAgICB1aW50MTZfdCBpbnB1dFNyYzo1OyAgICAgICAgICAgICAgLy8hPCAgICAgICAgSW5wdXQgc291cmNlIGluZGljYXRvcgorICAgICAgdWludDE2X3QgcmF0Q2g6NDsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSByYWRpbyB0aW1lciBjaGFubmVsIG51bWJlcgorICAgICAgdWludDE2X3QgYlJlcGVhdGVkOjE7ICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFNpbmdsZSBjYXB0dXJlIG1vZGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogUmVwZWF0ZWQgY2FwdHVyZSBtb2RlCisgICAgICB1aW50MTZfdCBpbnB1dE1vZGU6MjsgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSW5wdXQgbW9kZTo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogQ2FwdHVyZSBvbiByaXNpbmcgZWRnZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDYXB0dXJlIG9uIGZhbGxpbmcgZWRnZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBDYXB0dXJlIG9uIGJvdGggZWRnZXM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogPGk+UmVzZXJ2ZWQ8L2k+CisgICB9IGNvbmZpZzsKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0RJU0FCTEVfUkFUX0NICisvLyEgQHsKKyNkZWZpbmUgQ01EX0RJU0FCTEVfUkFUX0NIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDgKKy8vISBEaXNhYmxlIFJhZGlvIFRpbWVyIENoYW5uZWwKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9ESVNBQkxFX1JBVF9DSF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwNDA4CisgICB1aW50OF90IHJhdENoOyAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHJhZGlvIHRpbWVyIGNoYW5uZWwgbnVtYmVyCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9TRVRfUkFUX09VVFBVVAorLy8hIEB7CisjZGVmaW5lIENNRF9TRVRfUkFUX09VVFBVVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjA0CisvLyEgU2V0IFJhZGlvIFRpbWVyIE91dHB1dCB0byBhIFNwZWNpZmllZCBNb2RlCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU0VUX1JBVF9PVVRQVVRfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDYwNAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQxNl90IDoyOworICAgICAgdWludDE2X3Qgb3V0cHV0U2VsOjM7ICAgICAgICAgICAgIC8vITwgICAgICAgIE91dHB1dCBldmVudCBpbmRpY2F0b3IKKyAgICAgIHVpbnQxNl90IG91dHB1dE1vZGU6MzsgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBTZXQgb3V0cHV0IGxpbmUgbG93IGFzIGRlZmF1bHQ7IGFuZCBwdWxzZSBvbiBldmVudC4gRHVyYXRpb24gb2YgcHVsc2UgaXMgb25lIFJGIENvcmUgY2xvY2sgcGVyaW9kIChjYS4gNDEuNjcgbnMpLjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBTZXQgb3V0cHV0IGxpbmUgaGlnaCBvbiBldmVudDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBTZXQgb3V0cHV0IGxpbmUgbG93IG9uIGV2ZW50PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IFRvZ2dsZSAoaW52ZXJ0KSBvdXRwdXQgbGluZSBzdGF0ZSBvbiBldmVudDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA0OiBJbW1lZGlhdGVseSBzZXQgb3V0cHV0IGxpbmUgdG8gbG93IChkb2VzIG5vdCBjaGFuZ2UgdXBvbiBldmVudCk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgNTogSW1tZWRpYXRlbHkgc2V0IG91dHB1dCBsaW5lIHRvIGhpZ2ggKGRvZXMgbm90IGNoYW5nZSB1cG9uIGV2ZW50KTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgICAgdWludDE2X3QgcmF0Q2g6NDsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSByYWRpbyB0aW1lciBjaGFubmVsIG51bWJlcgorICAgfSBjb25maWc7Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9BUk1fUkFUX0NICisvLyEgQHsKKyNkZWZpbmUgQ01EX0FSTV9SQVRfQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDkKKy8vISBBcm0gUmFkaW8gVGltZXIgQ2hhbm5lbAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0FSTV9SQVRfQ0hfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDQwOQorICAgdWludDhfdCByYXRDaDsgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSByYWRpbyB0aW1lciBjaGFubmVsIG51bWJlcgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfRElTQVJNX1JBVF9DSAorLy8hIEB7CisjZGVmaW5lIENNRF9ESVNBUk1fUkFUX0NIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDBBCisvLyEgRGlzYXJtIFJhZGlvIFRpbWVyIENoYW5uZWwKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9ESVNBUk1fUkFUX0NIX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA0MEEKKyAgIHVpbnQ4X3QgcmF0Q2g7ICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgcmFkaW8gdGltZXIgY2hhbm5lbCBudW1iZXIKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1NFVF9UWF9QT1dFUgorLy8hIEB7CisjZGVmaW5lIENNRF9TRVRfVFhfUE9XRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisvLyEgU2V0IFRyYW5zbWl0IFBvd2VyCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU0VUX1RYX1BPV0VSX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDAwMTAKKyAgIHVpbnQxNl90IHR4UG93ZXI7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOZXcgVFggcG93ZXIgc2V0dGluZworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfVVBEQVRFX0ZTCisvLyEgQHsKKyNkZWZpbmUgQ01EX1VQREFURV9GUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTEKKy8vISBTZXQgTmV3IFN5bnRoZXNpemVyIEZyZXF1ZW5jeSB3aXRob3V0IFJlY2FsaWJyYXRpb24KK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9VUERBVEVfRlNfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDAxMQorICAgdWludDE2X3QgX19kdW1teTA7CisgICB1aW50MzJfdCBfX2R1bW15MTsKKyAgIHVpbnQzMl90IF9fZHVtbXkyOworICAgdWludDE2X3QgX19kdW1teTM7CisgICB1aW50MTZfdCBmcmVxdWVuY3k7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGZyZXF1ZW5jeSBpbiBNSHogdG8gdHVuZSB0bworICAgdWludDE2X3QgZnJhY3RGcmVxOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEZyYWN0aW9uYWwgcGFydCBvZiB0aGUgZnJlcXVlbmN5IHRvIHR1bmUgdG8KK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0JVU19SRVFVRVNUCisvLyEgQHsKKyNkZWZpbmUgQ01EX0JVU19SRVFVRVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MEUKKy8vISBSZXF1ZXN0IFN5c3RlbSBCdXMgdG8gYmUgQXZhaWxiYWxlCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQlVTX1JFUVVFU1RfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDQwRQorICAgdWludDhfdCBiU3lzQnVzTmVlZGVkOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFN5c3RlbSBidXMgbWF5IHNsZWVwPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFN5c3RlbSBidXMgYWNjZXNzIG5lZWRlZAorfTsKKworLy8hIEB9CisKKy8vISBAfQorLy8hIEB9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX2RhdGFfZW50cnkuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX2RhdGFfZW50cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWYyZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfZGF0YV9lbnRyeS5oCkBAIC0wLDAgKzEsMjEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgcmZfZGF0YV9lbnRyeS5oCisqICBSZXZpc2VkOiAgICAgICAgJCAkCisqICBSZXZpc2lvbjogICAgICAgJCAkCisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5pdGlvbiBvZiBBUEkgZm9yIGRhdGEgZXhjaGFuZ2UKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19EQVRBX0VOVFJZX0gKKyNkZWZpbmUgX19EQVRBX0VOVFJZX0gKKworI2lmbmRlZiBfX1JGQ19TVFJVQ1QKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBfX1JGQ19TVFJVQ1QgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSkKKyNlbHNlCisjZGVmaW5lIF9fUkZDX1NUUlVDVAorI2VuZGlmCisjZW5kaWYKKworLy8hIFxhZGR0b2dyb3VwIHJmYworLy8hIEB7CisKKy8vISBcYWRkdG9ncm91cCBkYXRhX2VudHJ5CisvLyEgQHsKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9tYWlsYm94Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfZGF0YUVudHJ5X3MgcmZjX2RhdGFFbnRyeV90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19kYXRhRW50cnlHZW5lcmFsX3MgcmZjX2RhdGFFbnRyeUdlbmVyYWxfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfZGF0YUVudHJ5TXVsdGlfcyByZmNfZGF0YUVudHJ5TXVsdGlfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfZGF0YUVudHJ5UG9pbnRlcl9zIHJmY19kYXRhRW50cnlQb2ludGVyX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2RhdGFFbnRyeVBhcnRpYWxfcyByZmNfZGF0YUVudHJ5UGFydGlhbF90OworCisvLyEgXGFkZHRvZ3JvdXAgZGF0YUVudHJ5CisvLyEgQHsKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2RhdGFFbnRyeV9zIHsKKyAgIHVpbnQ4X3QqIHBOZXh0RW50cnk7ICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIG5leHQgZW50cnkgaW4gdGhlIHF1ZXVlLCBOVUxMIGlmIHRoaXMgaXMgdGhlIGxhc3QgZW50cnkKKyAgIHVpbnQ4X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJbmRpY2F0ZXMgc3RhdHVzIG9mIGVudHJ5LCBpbmNsdWRpbmcgd2hldGhlciBpdCBpcyBmcmVlIGZvciB0aGUgc3lzdGVtIENQVSB0byB3cml0ZSB0bworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHlwZToyOyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUeXBlIG9mIGRhdGEgZW50cnkgc3RydWN0dXJlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IEdlbmVyYWwgZGF0YSBlbnRyeSA8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogTXVsdGktZWxlbWVudCBSeCBlbnRyeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBQb2ludGVyIGVudHJ5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IFBhcnRpYWwgcmVhZCBSeCBlbnRyeQorICAgICAgdWludDhfdCBsZW5TejoyOyAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFNpemUgb2YgbGVuZ3RoIHdvcmQgaW4gc3RhcnQgb2YgZWFjaCBSeCBlbnRyeSBlbGVtZW50PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IE5vIGxlbmd0aCBpbmRpY2F0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT25lIGJ5dGUgbGVuZ3RoIGluZGljYXRvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBUd28gYnl0ZXMgbGVuZ3RoIGluZGljYXRvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiA8aT5SZXNlcnZlZDwvaT4KKyAgICAgIHVpbnQ4X3QgaXJxSW50djo0OyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBGb3IgcGFydGlhbCByZWFkIFJ4IGVudHJ5IG9ubHk6IFRoZSBudW1iZXIgb2YgYnl0ZXMgYmV0d2VlbiBpbnRlcnJ1cHQgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgYnkgdGhlIHJhZGlvIENQVSAoMDogMTYgYnl0ZXMpCisgICB9IGNvbmZpZzsKKyAgIHVpbnQxNl90IGxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBGb3IgcG9pbnRlciBlbnRyaWVzOiBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRhdGEgYnVmZmVyIHBvaW50ZWQgdG88YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgRm9yIG90aGVyIGVudHJpZXM6IE51bWJlciBvZiBieXRlcyBmb2xsb3dpbmcgdGhpcyBsZW5ndGggZmllbGQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgZGF0YUVudHJ5R2VuZXJhbAorLy8hIEB7CisvLyEgR2VuZXJhbCBkYXRhIGVudHJ5IHN0cnVjdHVyZSAodHlwZSA9IDApCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2RhdGFFbnRyeUdlbmVyYWxfcyB7CisgICB1aW50OF90KiBwTmV4dEVudHJ5OyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBuZXh0IGVudHJ5IGluIHRoZSBxdWV1ZSwgTlVMTCBpZiB0aGlzIGlzIHRoZSBsYXN0IGVudHJ5CisgICB1aW50OF90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSW5kaWNhdGVzIHN0YXR1cyBvZiBlbnRyeSwgaW5jbHVkaW5nIHdoZXRoZXIgaXQgaXMgZnJlZSBmb3IgdGhlIHN5c3RlbSBDUFUgdG8gd3JpdGUgdG8KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHR5cGU6MjsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVHlwZSBvZiBkYXRhIGVudHJ5IHN0cnVjdHVyZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBHZW5lcmFsIGRhdGEgZW50cnkgPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE11bHRpLWVsZW1lbnQgUnggZW50cnk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogUG9pbnRlciBlbnRyeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiBQYXJ0aWFsIHJlYWQgUnggZW50cnkKKyAgICAgIHVpbnQ4X3QgbGVuU3o6MjsgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBTaXplIG9mIGxlbmd0aCB3b3JkIGluIHN0YXJ0IG9mIGVhY2ggUnggZW50cnkgZWxlbWVudDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBObyBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE9uZSBieXRlIGxlbmd0aCBpbmRpY2F0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogVHdvIGJ5dGVzIGxlbmd0aCBpbmRpY2F0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50OF90IGlycUludHY6NDsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgRm9yIHBhcnRpYWwgcmVhZCBSeCBlbnRyeSBvbmx5OiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGJldHdlZW4gaW50ZXJydXB0IGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGJ5IHRoZSByYWRpbyBDUFUgKDA6IDE2IGJ5dGVzKQorICAgfSBjb25maWc7CisgICB1aW50MTZfdCBsZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgRm9yIHBvaW50ZXIgZW50cmllczogTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkYXRhIGJ1ZmZlciBwb2ludGVkIHRvPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEZvciBvdGhlciBlbnRyaWVzOiBOdW1iZXIgb2YgYnl0ZXMgZm9sbG93aW5nIHRoaXMgbGVuZ3RoIGZpZWxkCisgICB1aW50OF90IGRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgRmlyc3QgYnl0ZSBvZiB0aGUgZGF0YSBhcnJheSB0byBiZSByZWNlaXZlZCBvciB0cmFuc21pdHRlZAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBkYXRhRW50cnlNdWx0aQorLy8hIEB7CisvLyEgTXVsdGktZWxlbWVudCBkYXRhIGVudHJ5IHN0cnVjdHVyZSAodHlwZSA9IDEpCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2RhdGFFbnRyeU11bHRpX3MgeworICAgdWludDhfdCogcE5leHRFbnRyeTsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gbmV4dCBlbnRyeSBpbiB0aGUgcXVldWUsIE5VTEwgaWYgdGhpcyBpcyB0aGUgbGFzdCBlbnRyeQorICAgdWludDhfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEluZGljYXRlcyBzdGF0dXMgb2YgZW50cnksIGluY2x1ZGluZyB3aGV0aGVyIGl0IGlzIGZyZWUgZm9yIHRoZSBzeXN0ZW0gQ1BVIHRvIHdyaXRlIHRvCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0eXBlOjI7ICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFR5cGUgb2YgZGF0YSBlbnRyeSBzdHJ1Y3R1cmU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogR2VuZXJhbCBkYXRhIGVudHJ5IDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBNdWx0aS1lbGVtZW50IFJ4IGVudHJ5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFBvaW50ZXIgZW50cnk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogUGFydGlhbCByZWFkIFJ4IGVudHJ5CisgICAgICB1aW50OF90IGxlblN6OjI7ICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgU2l6ZSBvZiBsZW5ndGggd29yZCBpbiBzdGFydCBvZiBlYWNoIFJ4IGVudHJ5IGVsZW1lbnQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogTm8gbGVuZ3RoIGluZGljYXRvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBPbmUgYnl0ZSBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFR3byBieXRlcyBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IDxpPlJlc2VydmVkPC9pPgorICAgICAgdWludDhfdCBpcnFJbnR2OjQ7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEZvciBwYXJ0aWFsIHJlYWQgUnggZW50cnkgb25seTogVGhlIG51bWJlciBvZiBieXRlcyBiZXR3ZWVuIGludGVycnVwdCBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBieSB0aGUgcmFkaW8gQ1BVICgwOiAxNiBieXRlcykKKyAgIH0gY29uZmlnOworICAgdWludDE2X3QgbGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEZvciBwb2ludGVyIGVudHJpZXM6IE51bWJlciBvZiBieXRlcyBpbiB0aGUgZGF0YSBidWZmZXIgcG9pbnRlZCB0bzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBGb3Igb3RoZXIgZW50cmllczogTnVtYmVyIG9mIGJ5dGVzIGZvbGxvd2luZyB0aGlzIGxlbmd0aCBmaWVsZAorICAgdWludDE2X3QgbnVtRWxlbWVudHM7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBlbnRyeSBlbGVtZW50cyBjb21taXR0ZWQgaW4gdGhlIGVudHJ5CisgICB1aW50MTZfdCBuZXh0SW5kZXg7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSW5kZXggdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIGxhc3QgYnl0ZSBvZiB0aGUgbGFzdCBlbnRyeSBlbGVtZW50IGNvbW1pdHRlZCBieSB0aGUgcmFkaW8gQ1BVCisgICB1aW50OF90IHJ4RGF0YTsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgRmlyc3QgYnl0ZSBvZiB0aGUgZGF0YSBhcnJheSBvZiByZWNlaXZlZCBkYXRhIGVudHJ5IGVsZW1lbnRzCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGRhdGFFbnRyeVBvaW50ZXIKKy8vISBAeworLy8hIFBvaW50ZXIgZGF0YSBlbnRyeSBzdHJ1Y3R1cmUgKHR5cGUgPSAyKQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19kYXRhRW50cnlQb2ludGVyX3MgeworICAgdWludDhfdCogcE5leHRFbnRyeTsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gbmV4dCBlbnRyeSBpbiB0aGUgcXVldWUsIE5VTEwgaWYgdGhpcyBpcyB0aGUgbGFzdCBlbnRyeQorICAgdWludDhfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEluZGljYXRlcyBzdGF0dXMgb2YgZW50cnksIGluY2x1ZGluZyB3aGV0aGVyIGl0IGlzIGZyZWUgZm9yIHRoZSBzeXN0ZW0gQ1BVIHRvIHdyaXRlIHRvCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0eXBlOjI7ICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFR5cGUgb2YgZGF0YSBlbnRyeSBzdHJ1Y3R1cmU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogR2VuZXJhbCBkYXRhIGVudHJ5IDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBNdWx0aS1lbGVtZW50IFJ4IGVudHJ5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFBvaW50ZXIgZW50cnk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogUGFydGlhbCByZWFkIFJ4IGVudHJ5CisgICAgICB1aW50OF90IGxlblN6OjI7ICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgU2l6ZSBvZiBsZW5ndGggd29yZCBpbiBzdGFydCBvZiBlYWNoIFJ4IGVudHJ5IGVsZW1lbnQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogTm8gbGVuZ3RoIGluZGljYXRvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBPbmUgYnl0ZSBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFR3byBieXRlcyBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IDxpPlJlc2VydmVkPC9pPgorICAgICAgdWludDhfdCBpcnFJbnR2OjQ7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEZvciBwYXJ0aWFsIHJlYWQgUnggZW50cnkgb25seTogVGhlIG51bWJlciBvZiBieXRlcyBiZXR3ZWVuIGludGVycnVwdCBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBieSB0aGUgcmFkaW8gQ1BVICgwOiAxNiBieXRlcykKKyAgIH0gY29uZmlnOworICAgdWludDE2X3QgbGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEZvciBwb2ludGVyIGVudHJpZXM6IE51bWJlciBvZiBieXRlcyBpbiB0aGUgZGF0YSBidWZmZXIgcG9pbnRlZCB0bzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBGb3Igb3RoZXIgZW50cmllczogTnVtYmVyIG9mIGJ5dGVzIGZvbGxvd2luZyB0aGlzIGxlbmd0aCBmaWVsZAorICAgdWludDhfdCogcERhdGE7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgb2YgZGF0YSB0byBiZSByZWNlaXZlZCBybyB0cmFuc21pdHRlZAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBkYXRhRW50cnlQYXJ0aWFsCisvLyEgQHsKKy8vISBQYXJ0aWFsIHJlYWQgZGF0YSBlbnRyeSBzdHJ1Y3R1cmUgKHR5cGUgPSAzKQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19kYXRhRW50cnlQYXJ0aWFsX3MgeworICAgdWludDhfdCogcE5leHRFbnRyeTsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gbmV4dCBlbnRyeSBpbiB0aGUgcXVldWUsIE5VTEwgaWYgdGhpcyBpcyB0aGUgbGFzdCBlbnRyeQorICAgdWludDhfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEluZGljYXRlcyBzdGF0dXMgb2YgZW50cnksIGluY2x1ZGluZyB3aGV0aGVyIGl0IGlzIGZyZWUgZm9yIHRoZSBzeXN0ZW0gQ1BVIHRvIHdyaXRlIHRvCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0eXBlOjI7ICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFR5cGUgb2YgZGF0YSBlbnRyeSBzdHJ1Y3R1cmU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogR2VuZXJhbCBkYXRhIGVudHJ5IDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBNdWx0aS1lbGVtZW50IFJ4IGVudHJ5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFBvaW50ZXIgZW50cnk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogUGFydGlhbCByZWFkIFJ4IGVudHJ5CisgICAgICB1aW50OF90IGxlblN6OjI7ICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgU2l6ZSBvZiBsZW5ndGggd29yZCBpbiBzdGFydCBvZiBlYWNoIFJ4IGVudHJ5IGVsZW1lbnQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogTm8gbGVuZ3RoIGluZGljYXRvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBPbmUgYnl0ZSBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFR3byBieXRlcyBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IDxpPlJlc2VydmVkPC9pPgorICAgICAgdWludDhfdCBpcnFJbnR2OjQ7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEZvciBwYXJ0aWFsIHJlYWQgUnggZW50cnkgb25seTogVGhlIG51bWJlciBvZiBieXRlcyBiZXR3ZWVuIGludGVycnVwdCBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBieSB0aGUgcmFkaW8gQ1BVICgwOiAxNiBieXRlcykKKyAgIH0gY29uZmlnOworICAgdWludDE2X3QgbGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEZvciBwb2ludGVyIGVudHJpZXM6IE51bWJlciBvZiBieXRlcyBpbiB0aGUgZGF0YSBidWZmZXIgcG9pbnRlZCB0bzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBGb3Igb3RoZXIgZW50cmllczogTnVtYmVyIG9mIGJ5dGVzIGZvbGxvd2luZyB0aGlzIGxlbmd0aCBmaWVsZAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQxNl90IG51bUVsZW1lbnRzOjEzOyAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgZW50cnkgZWxlbWVudHMgY29tbWl0dGVkIGluIHRoZSBlbnRyeQorICAgICAgdWludDE2X3QgYkVudHJ5T3BlbjoxOyAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGVudHJ5IGNvbnRhaW5zIGFuIGVsZW1lbnQgdGhhdCBpcyBzdGlsbCBvcGVuIGZvciBhcHBlbmRpbmcgZGF0YQorICAgICAgdWludDE2X3QgYkZpcnN0Q29udDoxOyAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBjb250aW51YXRpb24gb2YgdGhlIGxhc3QgcGFja2V0IGZyb20gdGhlIHByZXZpb3VzIGVudHJ5CisgICAgICB1aW50MTZfdCBiTGFzdENvbnQ6MTsgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgcGFja2V0IGluIHRoZSBsYXN0IGVsZW1lbnQgY29udGludWVzIGluIHRoZSBuZXh0IGVudHJ5CisgICB9IHBrdFN0YXR1czsKKyAgIHVpbnQxNl90IG5leHRJbmRleDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJbmRleCB0byB0aGUgYnl0ZSBhZnRlciB0aGUgbGFzdCBieXRlIG9mIHRoZSBsYXN0IGVudHJ5IGVsZW1lbnQgY29tbWl0dGVkIGJ5IHRoZSByYWRpbyBDUFUKKyAgIHVpbnQ4X3QgcnhEYXRhOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBGaXJzdCBieXRlIG9mIHRoZSBkYXRhIGFycmF5IG9mIHJlY2VpdmVkIGRhdGEgZW50cnkgZWxlbWVudHMKK307CisKKy8vISBAfQorCisvLyEgQH0KKy8vISBAfQorI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9pZWVlX2NtZC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfaWVlZV9jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmE2NWZmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfaWVlZV9jbWQuaApAQCAtMCwwICsxLDYxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJmX2llZWVfY21kLmgKKyogIFJldmlzZWQ6ICAgICAgICAkICQKKyogIFJldmlzaW9uOiAgICAgICAkICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBDQzI2eHgvQ0MxM3h4IEFQSSBmb3IgSUVFRSA4MDIuMTUuNCBjb21tYW5kcworKgorKiAgQ29weXJpZ2h0IChDKSAyMDE1IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0lFRUVfQ01EX0gKKyNkZWZpbmUgX19JRUVFX0NNRF9ICisKKyNpZm5kZWYgX19SRkNfU1RSVUNUCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgX19SRkNfU1RSVUNUIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpCisjZWxzZQorI2RlZmluZSBfX1JGQ19TVFJVQ1QKKyNlbmRpZgorI2VuZGlmCisKKy8vISBcYWRkdG9ncm91cCByZmMKKy8vISBAeworCisvLyEgXGFkZHRvZ3JvdXAgaWVlZV9jbWQKKy8vISBAeworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3JmX21haWxib3guaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZfY29tbW9uX2NtZC5oPgorCit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX1JYX3MgcmZjX0NNRF9JRUVFX1JYX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX0VEX1NDQU5fcyByZmNfQ01EX0lFRUVfRURfU0NBTl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9UWF9zIHJmY19DTURfSUVFRV9UWF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9DU01BX3MgcmZjX0NNRF9JRUVFX0NTTUFfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfUlhfQUNLX3MgcmZjX0NNRF9JRUVFX1JYX0FDS190OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9BQk9SVF9CR19zIHJmY19DTURfSUVFRV9BQk9SVF9CR190OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9NT0RfQ0NBX3MgcmZjX0NNRF9JRUVFX01PRF9DQ0FfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfTU9EX0ZJTFRfcyByZmNfQ01EX0lFRUVfTU9EX0ZJTFRfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfTU9EX1NSQ19NQVRDSF9zIHJmY19DTURfSUVFRV9NT0RfU1JDX01BVENIX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX0FCT1JUX0ZHX3MgcmZjX0NNRF9JRUVFX0FCT1JUX0ZHX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX1NUT1BfRkdfcyByZmNfQ01EX0lFRUVfU1RPUF9GR190OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9DQ0FfUkVRX3MgcmZjX0NNRF9JRUVFX0NDQV9SRVFfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfaWVlZVJ4T3V0cHV0X3MgcmZjX2llZWVSeE91dHB1dF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19zaG9ydEFkZHJFbnRyeV9zIHJmY19zaG9ydEFkZHJFbnRyeV90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19pZWVlUnhDb3JyQ3JjX3MgcmZjX2llZWVSeENvcnJDcmNfdDsKKworLy8hIFxhZGR0b2dyb3VwIENNRF9JRUVFX1JYCisvLyEgQHsKKyNkZWZpbmUgQ01EX0lFRUVfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDEKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX1JYX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDI4MDEKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQ4X3QgY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBDaGFubmVsIHRvIHR1bmUgdG8gaW4gdGhlIHN0YXJ0IG9mIHRoZSBvcGVyYXRpb248YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogVXNlIGV4aXN0aW5nIGNoYW5uZWw8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTEmbmRhc2g7MjY6IFVzZSBhcyBJRUVFIDgwMi4xNS40IGNoYW5uZWwsIGkuZS4gZnJlcXVlbmN5IGlzICgyNDA1ICsgNSAmdGltZXM7IChjaGFubmVsIC0gMTEpKSBNSHo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgNjAmbmRhc2g7MjA3OiBGcmVxdWVuY3kgaXMgICgyMzAwICsgY2hhbm5lbCkgTUh6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiQXV0b0ZsdXNoQ3JjOjE7ICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBhY2tldHMgd2l0aCBDUkMgZXJyb3IgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXV0b0ZsdXNoSWduOjE7ICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBhY2tldHMgdGhhdCBjYW4gYmUgaWdub3JlZCBhY2NvcmRpbmcgdG8gZnJhbWUgZmlsdGVyaW5nIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVQaHlIZHI6MTsgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBQSFkgaGVhZGVyIGZpZWxkIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiSW5jbHVkZUNyYzoxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIENSQyBmaWVsZCBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFJzc2k6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYW4gUlNTSSBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRDb3JyQ3JjOjE7ICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgY29ycmVsYXRpb24gdmFsdWUgYW5kIENSQyByZXN1bHQgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kU3JjSW5kOjE7ICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhbiBpbmRleCBmcm9tIHRoZSBzb3VyY2UgbWF0Y2hpbmcgYWxnb3JpdGhtCisgICAgICB1aW50OF90IGJBcHBlbmRUaW1lc3RhbXA6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgdGltZXN0YW1wIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICB9IHJ4Q29uZmlnOworICAgZGF0YVF1ZXVlX3QqIHBSeFE7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gcmVjZWl2ZSBxdWV1ZQorICAgcmZjX2llZWVSeE91dHB1dF90ICpwT3V0cHV0OyAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gb3V0cHV0IHN0cnVjdHVyZSAoTlVMTDogRG8gbm90IHN0b3JlIHJlc3VsdHMpCisgICBzdHJ1Y3QgeworICAgICAgdWludDE2X3QgZnJhbWVGaWx0RW46MTsgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IERpc2FibGUgZnJhbWUgZmlsdGVyaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEVuYWJsZSBmcmFtZSBmaWx0ZXJpbmcKKyAgICAgIHVpbnQxNl90IGZyYW1lRmlsdFN0b3A6MTsgICAgICAgICAvLyE8IFxicmllZiAwOiBSZWNlaXZlIGFsbCBwYWNrZXRzIHRvIHRoZSBlbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogU3RvcCByZWNlaXZpbmcgZnJhbWUgb25jZSBmcmFtZSBmaWx0ZXJpbmcgaGFzIGNhdXNlZCB0aGUgZnJhbWUgdG8gYmUgcmVqZWN0ZWQuCisgICAgICB1aW50MTZfdCBhdXRvQWNrRW46MTsgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRGlzYWJsZSBhdXRvIEFDSzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBFbmFibGUgYXV0byBBQ0suCisgICAgICB1aW50MTZfdCBzbG90dGVkQWNrRW46MTsgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm9uLXNsb3R0ZWQgQUNLPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFNsb3R0ZWQgQUNLLgorICAgICAgdWludDE2X3QgYXV0b1BlbmRFbjoxOyAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEF1dG8tcGVuZCBkaXNhYmxlZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBdXRvLXBlbmQgZW5hYmxlZAorICAgICAgdWludDE2X3QgZGVmYXVsdFBlbmQ6MTsgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgcGVuZGluZyBkYXRhIGJpdCBpbiBhdXRvIEFDSyBwYWNrZXRzIHRoYXQgYXJlIG5vdCBzdWJqZWN0IHRvIGF1dG8tcGVuZAorICAgICAgdWludDE2X3QgYlBlbmREYXRhUmVxT25seToxOyAgICAgIC8vITwgXGJyaWVmIDA6IFVzZSBhdXRvLXBlbmQgZm9yIGFueSBwYWNrZXQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVXNlIGF1dG8tcGVuZCBmb3IgZGF0YSByZXF1ZXN0IHBhY2tldHMgb25seQorICAgICAgdWludDE2X3QgYlBhbkNvb3JkOjE7ICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IERldmljZSBpcyBub3QgUEFOIGNvb3JkaW5hdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IERldmljZSBpcyBQQU4gY29vcmRpbmF0b3IKKyAgICAgIHVpbnQxNl90IG1heEZyYW1lVmVyc2lvbjoyOyAgICAgICAvLyE8ICAgICAgICBSZWplY3QgZnJhbWVzIHdoZXJlIHRoZSBmcmFtZSB2ZXJzaW9uIGZpZWxkIGluIHRoZSBGQ0YgaXMgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWUKKyAgICAgIHVpbnQxNl90IGZjZlJlc2VydmVkTWFzazozOyAgICAgICAvLyE8ICAgICAgICBWYWx1ZSB0byBiZSBBTkQtZWQgd2l0aCB0aGUgcmVzZXJ2ZWQgcGFydCBvZiB0aGUgRkNGOyBmcmFtZSByZWplY3RlZCBpZiByZXN1bHQgaXMgbm9uLXplcm8KKyAgICAgIHVpbnQxNl90IG1vZGlmeUZ0RmlsdGVyOjI7ICAgICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgTVNCIG9mIGZyYW1lIHR5cGUgZmllbGQgYmVmb3JlIGZyYW1lLXR5cGUgZmlsdGVyaW5nOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBObyBtb2RpZmljYXRpb248YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogSW52ZXJ0IE1TQjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBTZXQgTVNCIHRvIDA8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogU2V0IE1TQiB0byAxCisgICAgICB1aW50MTZfdCBiU3RyaWN0TGVuRmlsdGVyOjE7ICAgICAgLy8hPCBcYnJpZWYgMDogQWNjZXB0IGFja25vd2xlZGdlbWVudCBmcmFtZXMgb2YgYW55IGxlbmd0aCA+PSA1PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFjY2VwdCBvbmx5IGFja25vd2xlZGdlbWVudCBmcmFtZXMgb2YgbGVuZ3RoIDUKKyAgIH0gZnJhbWVGaWx0T3B0OyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBGcmFtZSBmaWx0ZXJpbmcgb3B0aW9ucworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0MEJlYWNvbjoxOyAgICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAwMDAgKGJlYWNvbik6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0MURhdGE6MTsgICAgICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAwMDEgKGRhdGEpOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZWplY3Q8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWNjZXB0CisgICAgICB1aW50OF90IGJBY2NlcHRGdDJBY2s6MTsgICAgICAgICAgLy8hPCBcYnJpZWYgVHJlYXRtZW50IG9mIGZyYW1lcyB3aXRoIGZyYW1lIHR5cGUgMDEwIChBQ0spOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZWplY3QsIHVubGVzcyBydW5uaW5nIEFDSyByZWNlaXZlIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWx3YXlzIGFjY2VwdAorICAgICAgdWludDhfdCBiQWNjZXB0RnQzTWFjQ21kOjE7ICAgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBmcmFtZXMgd2l0aCBmcmFtZSB0eXBlIDAxMSAoTUFDIGNvbW1hbmQpOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZWplY3Q8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWNjZXB0CisgICAgICB1aW50OF90IGJBY2NlcHRGdDRSZXNlcnZlZDoxOyAgICAgLy8hPCBcYnJpZWYgVHJlYXRtZW50IG9mIGZyYW1lcyB3aXRoIGZyYW1lIHR5cGUgMTAwIChyZXNlcnZlZCk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0NVJlc2VydmVkOjE7ICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAxMDEgKHJlc2VydmVkKTo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmVqZWN0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFjY2VwdAorICAgICAgdWludDhfdCBiQWNjZXB0RnQ2UmVzZXJ2ZWQ6MTsgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBmcmFtZXMgd2l0aCBmcmFtZSB0eXBlIDExMCAocmVzZXJ2ZWQpOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZWplY3Q8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWNjZXB0CisgICAgICB1aW50OF90IGJBY2NlcHRGdDdSZXNlcnZlZDoxOyAgICAgLy8hPCBcYnJpZWYgVHJlYXRtZW50IG9mIGZyYW1lcyB3aXRoIGZyYW1lIHR5cGUgMTExIChyZXNlcnZlZCk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgIH0gZnJhbWVUeXBlczsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBGcmFtZSB0eXBlcyB0byByZWNlaXZlIGluIGZyYW1lIGZpbHRlcmluZworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgY2NhRW5FbmVyZ3k6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBFbmFibGUgZW5lcmd5IHNjYW4gYXMgQ0NBIHNvdXJjZQorICAgICAgdWludDhfdCBjY2FFbkNvcnI6MTsgICAgICAgICAgICAgIC8vITwgICAgICAgIEVuYWJsZSBjb3JyZWxhdG9yIGJhc2VkIGNhcnJpZXIgc2Vuc2UgYXMgQ0NBIHNvdXJjZQorICAgICAgdWludDhfdCBjY2FFblN5bmM6MTsgICAgICAgICAgICAgIC8vITwgICAgICAgIEVuYWJsZSBzeW5jIGZvdW5kIGJhc2VkIGNhcnJpZXIgc2Vuc2UgYXMgQ0NBIHNvdXJjZQorICAgICAgdWludDhfdCBjY2FDb3JyT3A6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIE9wZXJhdG9yIHRvIHVzZSBiZXR3ZWVuIGVuZXJneSBiYXNlZCBhbmQgY29ycmVsYXRvciBiYXNlZCBDQ0E8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmVwb3J0IGJ1c3kgY2hhbm5lbCBpZiBlaXRoZXIgY2NhRW5lcmd5IG9yIGNjYUNvcnIgYXJlIGJ1c3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogUmVwb3J0IGJ1c3kgY2hhbm5lbCBpZiBib3RoIGNjYUVuZXJneSBhbmQgY2NhQ29yciBhcmUgYnVzeQorICAgICAgdWludDhfdCBjY2FTeW5jT3A6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIE9wZXJhdG9yIHRvIHVzZSBiZXR3ZWVuIHN5bmMgZm91bmQgYmFzZWQgQ0NBIGFuZCB0aGUgb3RoZXJzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IEFsd2F5cyByZXBvcnQgYnVzeSBjaGFubmVsIGlmIGNjYVN5bmMgaXMgYnVzeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBbHdheXMgcmVwb3J0IGlkbGUgY2hhbm5lbCBpZiBjY2FTeW5jIGlzIGlkbGUKKyAgICAgIHVpbnQ4X3QgY2NhQ29yclRocjoyOyAgICAgICAgICAgICAvLyE8ICAgICAgICBUaHJlc2hvbGQgZm9yIG51bWJlciBvZiBjb3JyZWxhdGlvbiBwZWFrcyBpbiBjb3JyZWxhdG9yIGJhc2VkIGNhcnJpZXIgc2Vuc2UKKyAgIH0gY2NhT3B0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDQ0Egb3B0aW9ucworICAgaW50OF90IGNjYVJzc2lUaHI7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFJTU0kgdGhyZXNob2xkIGZvciBDQ0EKKyAgIHVpbnQ4X3QgX19kdW1teTA7CisgICB1aW50OF90IG51bUV4dEVudHJpZXM7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIGV4dGVuZGVkIGFkZHJlc3MgZW50cmllcworICAgdWludDhfdCBudW1TaG9ydEVudHJpZXM7ICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBzaG9ydCBhZGRyZXNzIGVudHJpZXMKKyAgIHVpbnQzMl90KiBwRXh0RW50cnlMaXN0OyAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGxpc3Qgb2YgZXh0ZW5kZWQgYWRkcmVzcyBlbnRyaWVzCisgICB1aW50MzJfdCogcFNob3J0RW50cnlMaXN0OyAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBsaXN0IG9mIHNob3J0IGFkZHJlc3MgZW50cmllcworICAgdWludDY0X3QgbG9jYWxFeHRBZGRyOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBleHRlbmRlZCBhZGRyZXNzIG9mIHRoZSBsb2NhbCBkZXZpY2UKKyAgIHVpbnQxNl90IGxvY2FsU2hvcnRBZGRyOyAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgc2hvcnQgYWRkcmVzcyBvZiB0aGUgbG9jYWwgZGV2aWNlCisgICB1aW50MTZfdCBsb2NhbFBhbklEOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIFBBTiBJRCBvZiB0aGUgbG9jYWwgZGV2aWNlCisgICB1aW50MTZfdCBfX2R1bW15MTsKKyAgIHVpbnQ4X3QgX19kdW1teTI7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBlbmRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlIFJ4IG9wZXJhdGlvbgorICAgcmF0bXJfdCBlbmRUaW1lOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRpbWUgdXNlZCB0b2dldGhlciB3aXRoIDxjb2RlPmVuZFRyaWdnZXI8L2NvZGU+IHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gZW5kIHRoZSBSeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIG9wZXJhdGlvbgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfSUVFRV9FRF9TQ0FOCisvLyEgQHsKKyNkZWZpbmUgQ01EX0lFRUVfRURfU0NBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDIKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX0VEX1NDQU5fcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MjgwMgorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcKKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENoYW5uZWwgdG8gdHVuZSB0byBpbiB0aGUgc3RhcnQgb2YgdGhlIG9wZXJhdGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBVc2UgZXhpc3RpbmcgY2hhbm5lbDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxMSZuZGFzaDsyNjogVXNlIGFzIElFRUUgODAyLjE1LjQgY2hhbm5lbCwgaS5lLiBmcmVxdWVuY3kgaXMgKDI0MDUgKyA1ICZ0aW1lczsgKGNoYW5uZWwgLSAxMSkpIE1Iejxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA2MCZuZGFzaDsyMDc6IEZyZXF1ZW5jeSBpcyAgKDIzMDAgKyBjaGFubmVsKSBNSHo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGNjYUVuRW5lcmd5OjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgRW5hYmxlIGVuZXJneSBzY2FuIGFzIENDQSBzb3VyY2UKKyAgICAgIHVpbnQ4X3QgY2NhRW5Db3JyOjE7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBFbmFibGUgY29ycmVsYXRvciBiYXNlZCBjYXJyaWVyIHNlbnNlIGFzIENDQSBzb3VyY2UKKyAgICAgIHVpbnQ4X3QgY2NhRW5TeW5jOjE7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBFbmFibGUgc3luYyBmb3VuZCBiYXNlZCBjYXJyaWVyIHNlbnNlIGFzIENDQSBzb3VyY2UKKyAgICAgIHVpbnQ4X3QgY2NhQ29yck9wOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiBPcGVyYXRvciB0byB1c2UgYmV0d2VlbiBlbmVyZ3kgYmFzZWQgYW5kIGNvcnJlbGF0b3IgYmFzZWQgQ0NBPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlcG9ydCBidXN5IGNoYW5uZWwgaWYgZWl0aGVyIGNjYUVuZXJneSBvciBjY2FDb3JyIGFyZSBidXN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFJlcG9ydCBidXN5IGNoYW5uZWwgaWYgYm90aCBjY2FFbmVyZ3kgYW5kIGNjYUNvcnIgYXJlIGJ1c3kKKyAgICAgIHVpbnQ4X3QgY2NhU3luY09wOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiBPcGVyYXRvciB0byB1c2UgYmV0d2VlbiBzeW5jIGZvdW5kIGJhc2VkIENDQSBhbmQgdGhlIG90aGVyczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBBbHdheXMgcmVwb3J0IGJ1c3kgY2hhbm5lbCBpZiBjY2FTeW5jIGlzIGJ1c3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWx3YXlzIHJlcG9ydCBpZGxlIGNoYW5uZWwgaWYgY2NhU3luYyBpcyBpZGxlCisgICAgICB1aW50OF90IGNjYUNvcnJUaHI6MjsgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhyZXNob2xkIGZvciBudW1iZXIgb2YgY29ycmVsYXRpb24gcGVha3MgaW4gY29ycmVsYXRvciBiYXNlZCBjYXJyaWVyIHNlbnNlCisgICB9IGNjYU9wdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ0NBIG9wdGlvbnMKKyAgIGludDhfdCBjY2FSc3NpVGhyOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBSU1NJIHRocmVzaG9sZCBmb3IgQ0NBCisgICB1aW50OF90IF9fZHVtbXkwOworICAgaW50OF90IG1heFJzc2k7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBtYXhpbXVtIFJTU0kgcmVjb3JkZWQgZHVyaW5nIHRoZSBFRCBzY2FuCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBlbmRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlIFJ4IG9wZXJhdGlvbgorICAgcmF0bXJfdCBlbmRUaW1lOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRpbWUgdXNlZCB0b2dldGhlciB3aXRoIDxjb2RlPmVuZFRyaWdnZXI8L2NvZGU+IHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gZW5kIHRoZSBSeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIG9wZXJhdGlvbgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfSUVFRV9UWAorLy8hIEB7CisjZGVmaW5lIENNRF9JRUVFX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQzAxCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9UWF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgyQzAxCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZworICAgfSBjb25kaXRpb247CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiSW5jbHVkZVBoeUhkcjoxOyAgICAgICAgIC8vITwgXGJyaWVmIDA6IEZpbmQgUEhZIGhlYWRlciBhdXRvbWF0aWNhbGx5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEluc2VydCBQSFkgaGVhZGVyIGZyb20gdGhlIGJ1ZmZlcgorICAgICAgdWludDhfdCBiSW5jbHVkZUNyYzoxOyAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEFwcGVuZCBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQgQ1JDPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEluc2VydCBGQ1MgKENSQykgZnJvbSB0aGUgYnVmZmVyCisgICAgICB1aW50OF90IDoxOworICAgICAgdWludDhfdCBwYXlsb2FkTGVuTXNiOjU7ICAgICAgICAgIC8vITwgXGJyaWVmIE1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBwYXlsb2FkIGxlbmd0aC4gU2hvdWxkIG9ubHkgYmUgbm9uLXplcm8gdG8gY3JlYXRlIGxvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBub24tc3RhbmRhcmQgcGFja2V0cyBmb3IgdGVzdCBwdXJwb3NlcworICAgfSB0eE9wdDsKKyAgIHVpbnQ4X3QgcGF5bG9hZExlbjsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHBheWxvYWQKKyAgIHVpbnQ4X3QqIHBQYXlsb2FkOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHBheWxvYWQgYnVmZmVyIG9mIHNpemUgPGNvZGU+cGF5bG9hZExlbjwvY29kZT4KKyAgIHJhdG1yX3QgdGltZVN0YW1wOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaW1lIHN0YW1wIG9mIHRyYW5zbWl0dGVkIGZyYW1lCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9JRUVFX0NTTUEKKy8vISBAeworI2RlZmluZSBDTURfSUVFRV9DU01BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkMwMgorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfQ1NNQV9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgyQzAyCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZworICAgfSBjb25kaXRpb247CisgICB1aW50MTZfdCByYW5kb21TdGF0ZTsgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHN0YXRlIG9mIHRoZSBwc2V1ZG8tcmFuZG9tIGdlbmVyYXRvcgorICAgdWludDhfdCBtYWNNYXhCRTsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBJRUVFIDgwMi4xNS40IE1BQyBwYXJhbWV0ZXIgPGk+bWFjTWF4QkU8L2k+CisgICB1aW50OF90IG1hY01heENTTUFCYWNrb2ZmczsgICAgICAgICAgLy8hPCAgICAgICAgVGhlIElFRUUgODAyLjE1LjQgTUFDIHBhcmFtZXRlciA8aT5tYWNNYXhDU01BQmFja29mZnM8L2k+CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBpbml0Q1c6NTsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiB2YWx1ZSBmb3IgdGhlIENXIHBhcmFtZXRlcgorICAgICAgdWludDhfdCBiU2xvdHRlZDoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6ICBub24tc2xvdHRlZCBDU01BPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IHNsb3R0ZWQgQ1NNQQorICAgICAgdWludDhfdCByeE9mZk1vZGU6MjsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFJYIHN0YXlzIG9uIGR1cmluZyBDU01BIGJhY2tvZmZzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFRoZSBDU01BLUNBIGFsZ29yaXRobSB3aWxsIHN1c3BlbmQgdGhlIHJlY2VpdmVyIGlmIG5vIGZyYW1lIGlzIGJlaW5nIHJlY2VpdmVkPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFRoZSBDU01BLUNBIGFsZ29yaXRobSB3aWxsIHN1c3BlbmQgdGhlIHJlY2VpdmVyIGlmIG5vIGZyYW1lIGlzIGJlaW5nIHJlY2VpdmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIG9yIGFmdGVyIGZpbmlzaGluZyBpdCAoaW5jbHVkaW5nIGF1dG8gQUNLKSBvdGhlcndpc2U8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogVGhlIENTTUEtQ0EgYWxnb3JpdGhtIHdpbGwgc3VzcGVuZCB0aGUgcmVjZWl2ZXIgaW1tZWRpYXRlbHkgZHVyaW5nIGJhY2stb2ZmcworICAgfSBjc21hQ29uZmlnOworICAgdWludDhfdCBOQjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBOQiBwYXJhbWV0ZXIgZnJvbSB0aGUgSUVFRSA4MDIuMTUuNCBDU01BLUNBIGFsZ29yaXRobQorICAgdWludDhfdCBCRTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBCRSBwYXJhbWV0ZXIgZnJvbSB0aGUgSUVFRSA4MDIuMTUuNCBDU01BLUNBIGFsZ29yaXRobQorICAgdWludDhfdCByZW1haW5pbmdQZXJpb2RzOyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHBlcmlvZHMgZnJvbSBhIHBhdXNlZCBiYWNrb2ZmIGNvdW50ZG93bgorICAgaW50OF90IGxhc3RSc3NpOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFJTU0kgbWVhc3VyZWQgYXQgdGhlIGxhc3QgQ0NBIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gZW5kVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUcmlnZ2VyIHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gZW5kIHRoZSBDU01BLUNBIG9wZXJhdGlvbgorICAgcmF0bXJfdCBsYXN0VGltZVN0YW1wOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRpbWUgb2YgdGhlIGxhc3QgQ0NBIG9wZXJhdGlvbgorICAgcmF0bXJfdCBlbmRUaW1lOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRpbWUgdXNlZCB0b2dldGhlciB3aXRoIDxjb2RlPmVuZFRyaWdnZXI8L2NvZGU+IHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gZW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENTTUEtQ0Egb3BlcmF0aW9uCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9JRUVFX1JYX0FDSworLy8hIEB7CisjZGVmaW5lIENNRF9JRUVFX1JYX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQzAzCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9SWF9BQ0tfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MkMwMworICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcKKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBzZXFObzsgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFNlcXVlbmNlIG51bWJlciB0byBleHBlY3QKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IGVuZFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIGdpdmUgdXAgYWNrbm93bGVkZ2VtZW50IHJlY2VwdGlvbgorICAgcmF0bXJfdCBlbmRUaW1lOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRpbWUgdXNlZCB0b2dldGhlciB3aXRoIDxjb2RlPmVuZFRyaWdnZXI8L2NvZGU+IHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gZ2l2ZSB1cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGFja25vd2xlZGdlbWVudCByZWNlcHRpb24KK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0lFRUVfQUJPUlRfQkcKKy8vISBAeworI2RlZmluZSBDTURfSUVFRV9BQk9SVF9CRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkMwNAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfQUJPUlRfQkdfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MkMwNAorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcKKyAgIH0gY29uZGl0aW9uOworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfSUVFRV9NT0RfQ0NBCisvLyEgQHsKKyNkZWZpbmUgQ01EX0lFRUVfTU9EX0NDQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDEKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX01PRF9DQ0FfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MjAwMQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgY2NhRW5FbmVyZ3k6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBFbmFibGUgZW5lcmd5IHNjYW4gYXMgQ0NBIHNvdXJjZQorICAgICAgdWludDhfdCBjY2FFbkNvcnI6MTsgICAgICAgICAgICAgIC8vITwgICAgICAgIEVuYWJsZSBjb3JyZWxhdG9yIGJhc2VkIGNhcnJpZXIgc2Vuc2UgYXMgQ0NBIHNvdXJjZQorICAgICAgdWludDhfdCBjY2FFblN5bmM6MTsgICAgICAgICAgICAgIC8vITwgICAgICAgIEVuYWJsZSBzeW5jIGZvdW5kIGJhc2VkIGNhcnJpZXIgc2Vuc2UgYXMgQ0NBIHNvdXJjZQorICAgICAgdWludDhfdCBjY2FDb3JyT3A6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIE9wZXJhdG9yIHRvIHVzZSBiZXR3ZWVuIGVuZXJneSBiYXNlZCBhbmQgY29ycmVsYXRvciBiYXNlZCBDQ0E8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmVwb3J0IGJ1c3kgY2hhbm5lbCBpZiBlaXRoZXIgY2NhRW5lcmd5IG9yIGNjYUNvcnIgYXJlIGJ1c3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogUmVwb3J0IGJ1c3kgY2hhbm5lbCBpZiBib3RoIGNjYUVuZXJneSBhbmQgY2NhQ29yciBhcmUgYnVzeQorICAgICAgdWludDhfdCBjY2FTeW5jT3A6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIE9wZXJhdG9yIHRvIHVzZSBiZXR3ZWVuIHN5bmMgZm91bmQgYmFzZWQgQ0NBIGFuZCB0aGUgb3RoZXJzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IEFsd2F5cyByZXBvcnQgYnVzeSBjaGFubmVsIGlmIGNjYVN5bmMgaXMgYnVzeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBbHdheXMgcmVwb3J0IGlkbGUgY2hhbm5lbCBpZiBjY2FTeW5jIGlzIGlkbGUKKyAgICAgIHVpbnQ4X3QgY2NhQ29yclRocjoyOyAgICAgICAgICAgICAvLyE8ICAgICAgICBUaHJlc2hvbGQgZm9yIG51bWJlciBvZiBjb3JyZWxhdGlvbiBwZWFrcyBpbiBjb3JyZWxhdG9yIGJhc2VkIGNhcnJpZXIgc2Vuc2UKKyAgIH0gbmV3Q2NhT3B0OyAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOZXcgdmFsdWUgb2YgPGNvZGU+Y2NhT3B0PC9jb2RlPiBmb3IgdGhlIHJ1bm5pbmcgYmFja2dyb3VuZCBsZXZlbCBvcGVyYXRpb24KKyAgIGludDhfdCBuZXdDY2FSc3NpVGhyOyAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOZXcgdmFsdWUgb2YgPGNvZGU+Y2NhUnNzaVRocjwvY29kZT4gZm9yIHRoZSBydW5uaW5nIGJhY2tncm91bmQgbGV2ZWwgb3BlcmF0aW9uCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9JRUVFX01PRF9GSUxUCisvLyEgQHsKKyNkZWZpbmUgQ01EX0lFRUVfTU9EX0ZJTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDIKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX01PRF9GSUxUX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDIwMDIKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MTZfdCBmcmFtZUZpbHRFbjoxOyAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRGlzYWJsZSBmcmFtZSBmaWx0ZXJpbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRW5hYmxlIGZyYW1lIGZpbHRlcmluZworICAgICAgdWludDE2X3QgZnJhbWVGaWx0U3RvcDoxOyAgICAgICAgIC8vITwgXGJyaWVmIDA6IFJlY2VpdmUgYWxsIHBhY2tldHMgdG8gdGhlIGVuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBTdG9wIHJlY2VpdmluZyBmcmFtZSBvbmNlIGZyYW1lIGZpbHRlcmluZyBoYXMgY2F1c2VkIHRoZSBmcmFtZSB0byBiZSByZWplY3RlZC4KKyAgICAgIHVpbnQxNl90IGF1dG9BY2tFbjoxOyAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBEaXNhYmxlIGF1dG8gQUNLPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEVuYWJsZSBhdXRvIEFDSy4KKyAgICAgIHVpbnQxNl90IHNsb3R0ZWRBY2tFbjoxOyAgICAgICAgICAvLyE8IFxicmllZiAwOiBOb24tc2xvdHRlZCBBQ0s8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogU2xvdHRlZCBBQ0suCisgICAgICB1aW50MTZfdCBhdXRvUGVuZEVuOjE7ICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQXV0by1wZW5kIGRpc2FibGVkPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEF1dG8tcGVuZCBlbmFibGVkCisgICAgICB1aW50MTZfdCBkZWZhdWx0UGVuZDoxOyAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHZhbHVlIG9mIHRoZSBwZW5kaW5nIGRhdGEgYml0IGluIGF1dG8gQUNLIHBhY2tldHMgdGhhdCBhcmUgbm90IHN1YmplY3QgdG8gYXV0by1wZW5kCisgICAgICB1aW50MTZfdCBiUGVuZERhdGFSZXFPbmx5OjE7ICAgICAgLy8hPCBcYnJpZWYgMDogVXNlIGF1dG8tcGVuZCBmb3IgYW55IHBhY2tldDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBVc2UgYXV0by1wZW5kIGZvciBkYXRhIHJlcXVlc3QgcGFja2V0cyBvbmx5CisgICAgICB1aW50MTZfdCBiUGFuQ29vcmQ6MTsgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRGV2aWNlIGlzIG5vdCBQQU4gY29vcmRpbmF0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRGV2aWNlIGlzIFBBTiBjb29yZGluYXRvcgorICAgICAgdWludDE2X3QgbWF4RnJhbWVWZXJzaW9uOjI7ICAgICAgIC8vITwgICAgICAgIFJlamVjdCBmcmFtZXMgd2hlcmUgdGhlIGZyYW1lIHZlcnNpb24gZmllbGQgaW4gdGhlIEZDRiBpcyBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZQorICAgICAgdWludDE2X3QgZmNmUmVzZXJ2ZWRNYXNrOjM7ICAgICAgIC8vITwgICAgICAgIFZhbHVlIHRvIGJlIEFORC1lZCB3aXRoIHRoZSByZXNlcnZlZCBwYXJ0IG9mIHRoZSBGQ0Y7IGZyYW1lIHJlamVjdGVkIGlmIHJlc3VsdCBpcyBub24temVybworICAgICAgdWludDE2X3QgbW9kaWZ5RnRGaWx0ZXI6MjsgICAgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBNU0Igb2YgZnJhbWUgdHlwZSBmaWVsZCBiZWZvcmUgZnJhbWUtdHlwZSBmaWx0ZXJpbmc6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IE5vIG1vZGlmaWNhdGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBJbnZlcnQgTVNCPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFNldCBNU0IgdG8gMDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiBTZXQgTVNCIHRvIDEKKyAgICAgIHVpbnQxNl90IGJTdHJpY3RMZW5GaWx0ZXI6MTsgICAgICAvLyE8IFxicmllZiAwOiBBY2NlcHQgYWNrbm93bGVkZ2VtZW50IGZyYW1lcyBvZiBhbnkgbGVuZ3RoID49IDU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWNjZXB0IG9ubHkgYWNrbm93bGVkZ2VtZW50IGZyYW1lcyBvZiBsZW5ndGggNQorICAgfSBuZXdGcmFtZUZpbHRPcHQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE5ldyB2YWx1ZSBvZiA8Y29kZT5mcmFtZUZpbHRPcHQ8L2NvZGU+IGZvciB0aGUgcnVubmluZyBiYWNrZ3JvdW5kIGxldmVsIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0MEJlYWNvbjoxOyAgICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAwMDAgKGJlYWNvbik6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0MURhdGE6MTsgICAgICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAwMDEgKGRhdGEpOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZWplY3Q8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWNjZXB0CisgICAgICB1aW50OF90IGJBY2NlcHRGdDJBY2s6MTsgICAgICAgICAgLy8hPCBcYnJpZWYgVHJlYXRtZW50IG9mIGZyYW1lcyB3aXRoIGZyYW1lIHR5cGUgMDEwIChBQ0spOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZWplY3QsIHVubGVzcyBydW5uaW5nIEFDSyByZWNlaXZlIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWx3YXlzIGFjY2VwdAorICAgICAgdWludDhfdCBiQWNjZXB0RnQzTWFjQ21kOjE7ICAgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBmcmFtZXMgd2l0aCBmcmFtZSB0eXBlIDAxMSAoTUFDIGNvbW1hbmQpOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZWplY3Q8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWNjZXB0CisgICAgICB1aW50OF90IGJBY2NlcHRGdDRSZXNlcnZlZDoxOyAgICAgLy8hPCBcYnJpZWYgVHJlYXRtZW50IG9mIGZyYW1lcyB3aXRoIGZyYW1lIHR5cGUgMTAwIChyZXNlcnZlZCk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0NVJlc2VydmVkOjE7ICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAxMDEgKHJlc2VydmVkKTo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmVqZWN0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFjY2VwdAorICAgICAgdWludDhfdCBiQWNjZXB0RnQ2UmVzZXJ2ZWQ6MTsgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBmcmFtZXMgd2l0aCBmcmFtZSB0eXBlIDExMCAocmVzZXJ2ZWQpOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZWplY3Q8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWNjZXB0CisgICAgICB1aW50OF90IGJBY2NlcHRGdDdSZXNlcnZlZDoxOyAgICAgLy8hPCBcYnJpZWYgVHJlYXRtZW50IG9mIGZyYW1lcyB3aXRoIGZyYW1lIHR5cGUgMTExIChyZXNlcnZlZCk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgIH0gbmV3RnJhbWVUeXBlczsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOZXcgdmFsdWUgb2YgPGNvZGU+ZnJhbWVUeXBlczwvY29kZT4gZm9yIHRoZSBydW5uaW5nIGJhY2tncm91bmQgbGV2ZWwgb3BlcmF0aW9uCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9JRUVFX01PRF9TUkNfTUFUQ0gKKy8vISBAeworI2RlZmluZSBDTURfSUVFRV9NT0RfU1JDX01BVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfTU9EX1NSQ19NQVRDSF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgyMDAzCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiRW5hYmxlOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IERpc2FibGUgZW50cnk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRW5hYmxlIGVudHJ5CisgICAgICB1aW50OF90IHNyY1BlbmQ6MTsgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTmV3IHZhbHVlIG9mIHRoZSBwZW5kaW5nIGJpdCBmb3IgdGhlIGVudHJ5CisgICAgICB1aW50OF90IGVudHJ5VHlwZToxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRXh0ZW5kZWQgYWRkcmVzczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBTaG9ydCBhZGRyZXNzCisgICB9IG9wdGlvbnM7CisgICB1aW50OF90IGVudHJ5Tm87ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSW5kZXggb2YgZW50cnkgdG8gZW5hYmxlIG9yIGRpc2FibGUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0lFRUVfQUJPUlRfRkcKKy8vISBAeworI2RlZmluZSBDTURfSUVFRV9BQk9SVF9GRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQwMQorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfQUJPUlRfRkdfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MjQwMQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfSUVFRV9TVE9QX0ZHCisvLyEgQHsKKyNkZWZpbmUgQ01EX0lFRUVfU1RPUF9GRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI0MDIKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX1NUT1BfRkdfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MjQwMgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfSUVFRV9DQ0FfUkVRCisvLyEgQHsKKyNkZWZpbmUgQ01EX0lFRUVfQ0NBX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI0MDMKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX0NDQV9SRVFfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MjQwMworICAgaW50OF90IGN1cnJlbnRSc3NpOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBSU1NJIGN1cnJlbnRseSBvYnNlcnZlZCBvbiB0aGUgY2hhbm5lbAorICAgaW50OF90IG1heFJzc2k7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBtYXhpbXVtIFJTU0kgb2JzZXJ2ZWQgb24gdGhlIGNoYW5uZWwgc2luY2UgUnggd2FzIHN0YXJ0ZWQKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGNjYVN0YXRlOjI7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVmFsdWUgb2YgdGhlIGN1cnJlbnQgQ0NBIHN0YXRlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IElkbGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQnVzeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBJbnZhbGlkCisgICAgICB1aW50OF90IGNjYUVuZXJneToyOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVmFsdWUgb2YgdGhlIGN1cnJlbnQgZW5lcmd5IGRldGVjdCBDQ0Egc3RhdGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogSWRsZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBCdXN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IEludmFsaWQKKyAgICAgIHVpbnQ4X3QgY2NhQ29ycjoyOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBWYWx1ZSBvZiB0aGUgY3VycmVudCBjb3JyZWxhdG9yIGJhc2VkIGNhcnJpZXIgc2Vuc2UgQ0NBIHN0YXRlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IElkbGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQnVzeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBJbnZhbGlkCisgICAgICB1aW50OF90IGNjYVN5bmM6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVmFsdWUgb2YgdGhlIGN1cnJlbnQgc3luYyBmb3VuZCBiYXNlZCBjYXJyaWVyIHNlbnNlIENDQSBzdGF0ZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBJZGxlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEJ1c3kKKyAgIH0gY2NhSW5mbzsKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgaWVlZVJ4T3V0cHV0CisvLyEgQHsKKy8vISBPdXRwdXQgc3RydWN0dXJlIGZvciBDTURfSUVFRV9SWAorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19pZWVlUnhPdXRwdXRfcyB7CisgICB1aW50OF90IG5UeEFjazsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVG90YWwgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIEFDSyBmcmFtZXMKKyAgIHVpbnQ4X3QgblJ4QmVhY29uOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcmVjZWl2ZWQgYmVhY29uIGZyYW1lcworICAgdWludDhfdCBuUnhEYXRhOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiByZWNlaXZlZCBkYXRhIGZyYW1lcworICAgdWludDhfdCBuUnhBY2s7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiByZWNlaXZlZCBhY2tub3dsZWRnZW1lbnQgZnJhbWVzCisgICB1aW50OF90IG5SeE1hY0NtZDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHJlY2VpdmVkIE1BQyBjb21tYW5kIGZyYW1lcworICAgdWludDhfdCBuUnhSZXNlcnZlZDsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiByZWNlaXZlZCBmcmFtZXMgd2l0aCByZXNlcnZlZCBmcmFtZSB0eXBlCisgICB1aW50OF90IG5SeE5vazsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHJlY2VpdmVkIGZyYW1lcyB3aXRoIENSQyBlcnJvcgorICAgdWludDhfdCBuUnhJZ25vcmVkOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBmcmFtZXMgcmVjZWl2ZWQgdGhhdCBhcmUgdG8gYmUgaWdub3JlZAorICAgdWludDhfdCBuUnhCdWZGdWxsOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiByZWNlaXZlZCBmcmFtZXMgZGlzY2FyZGVkIGJlY2F1c2UgdGhlIFJ4IGJ1ZmZlciB3YXMgZnVsbAorICAgaW50OF90IGxhc3RSc3NpOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFJTU0kgb2YgbGFzdCByZWNlaXZlZCBmcmFtZQorICAgaW50OF90IG1heFJzc2k7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEhpZ2hlc3QgUlNTSSBvYnNlcnZlZCBpbiB0aGUgb3BlcmF0aW9uCisgICB1aW50OF90IF9fZHVtbXkwOworICAgcmF0bXJfdCBiZWFjb25UaW1lU3RhbXA7ICAgICAgICAgICAgIC8vITwgICAgICAgIFRpbWUgc3RhbXAgb2YgbGFzdCByZWNlaXZlZCBiZWFjb24gZnJhbWUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgc2hvcnRBZGRyRW50cnkKKy8vISBAeworLy8hIFN0cnVjdHVyZSBmb3Igc2hvcnQgYWRkcmVzcyBlbnRyaWVzCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX3Nob3J0QWRkckVudHJ5X3MgeworICAgdWludDE2X3Qgc2hvcnRBZGRyOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFNob3J0IGFkZHJlc3MKKyAgIHVpbnQxNl90IHBhbklkOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQQU4gSUQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgaWVlZVJ4Q29yckNyYworLy8hIEB7CisvLyEgUmVjZWl2ZSBzdGF0dXMgYnl0ZSB0aGF0IG1heSBiZSBhcHBlbmRlZCB0byBtZXNzYWdlIGluIHJlY2VpdmUgYnVmZmVyCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2llZWVSeENvcnJDcmNfcyB7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBjb3JyOjY7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb3JyZWxhdGlvbiB2YWx1ZQorICAgICAgdWludDhfdCBiSWdub3JlOjE7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIHBhY2tldCBzaG91bGQgYmUgcmVqZWN0ZWQgYnkgZnJhbWUgZmlsdGVyaW5nLCAwIG90aGVyd2lzZQorICAgICAgdWludDhfdCBiQ3JjRXJyOjE7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIHBhY2tldCB3YXMgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IsIDAgb3RoZXJ3aXNlCisgICB9IHN0YXR1czsKK307CisKKy8vISBAfQorCisvLyEgQH0KKy8vISBAfQorI2VuZGlmIC8qIF9fSUVFRV9DTURfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfaWVlZV9tYWlsYm94LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9pZWVlX21haWxib3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTMyNzczCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfaWVlZV9tYWlsYm94LmgKQEAgLTAsMCArMSw3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGllZWVfbWFpbGJveC5oCisqICBSZXZpc2VkOiAgICAgICAgJCAkCisqICBSZXZpc2lvbjogICAgICAgJCAkCisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5pdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgaW50ZXJmYWNlCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JRUVFX01BSUxCT1hfSAorI2RlZmluZSBfSUVFRV9NQUlMQk9YX0gKKworLy8vIFxuYW1lIFJhZGlvIG9wZXJhdGlvbiBzdGF0dXMKKy8vL0B7CisvLy8gXG5hbWUgT3BlcmF0aW9uIG5vdCBmaW5pc2hlZAorLy8vQHsKKyNkZWZpbmUgSUVFRV9TVVNQRU5ERUQgICAgICAgICAgMHgyMDAxICAvLy88IE9wZXJhdGlvbiBzdXNwZW5kZWQKKy8vL0B9CisvLy8gXG5hbWUgT3BlcmF0aW9uIGZpbmlzaGVkIG5vcm1hbGx5CisvLy9AeworI2RlZmluZSBJRUVFX0RPTkVfT0sgICAgICAgICAgICAweDI0MDAgIC8vLzwgT3BlcmF0aW9uIGVuZGVkIG5vcm1hbGx5CisjZGVmaW5lIElFRUVfRE9ORV9CVVNZICAgICAgICAgIDB4MjQwMSAgLy8vPCBDU01BLUNBIG9wZXJhdGlvbiBlbmRlZCB3aXRoIGZhaWx1cmUKKyNkZWZpbmUgSUVFRV9ET05FX1NUT1BQRUQgICAgICAgMHgyNDAyICAvLy88IE9wZXJhdGlvbiBzdG9wcGVkIGFmdGVyIHN0b3AgY29tbWFuZAorI2RlZmluZSBJRUVFX0RPTkVfQUNLICAgICAgICAgICAweDI0MDMgIC8vLzwgQUNLIHBhY2tldCByZWNlaXZlZCB3aXRoIHBlbmRpbmcgZGF0YSBiaXQgY2xlYXJlZAorI2RlZmluZSBJRUVFX0RPTkVfQUNLUEVORCAgICAgICAweDI0MDQgIC8vLzwgQUNLIHBhY2tldCByZWNlaXZlZCB3aXRoIHBlbmRpbmcgZGF0YSBiaXQgc2V0CisjZGVmaW5lIElFRUVfRE9ORV9USU1FT1VUICAgICAgIDB4MjQwNSAgLy8vPCBPcGVyYXRpb24gZW5kZWQgZHVlIHRvIHRpbWVvdXQKKyNkZWZpbmUgSUVFRV9ET05FX0JHRU5EICAgICAgICAgMHgyNDA2ICAvLy88IEZHIG9wZXJhdGlvbiBlbmRlZCBiZWNhdXNlIG5lY2Vzc2FyeSBiYWNrZ3JvdW5kIGxldmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBvcGVyYXRpb24gZW5kZWQKKyNkZWZpbmUgSUVFRV9ET05FX0FCT1JUICAgICAgICAgMHgyNDA3ICAvLy88IE9wZXJhdGlvbiBhYm9ydGVkIGJ5IGNvbW1hbmQKKy8vL0B9CisvLy8gXG5hbWUgT3BlcmF0aW9uIGZpbmlzaGVkIHdpdGggZXJyb3IKKy8vL0B7CisjZGVmaW5lIElFRUVfRVJST1JfUEFSICAgICAgICAgIDB4MjgwMCAgLy8vPCBJbGxlZ2FsIHBhcmFtZXRlcgorI2RlZmluZSBJRUVFX0VSUk9SX05PX1NFVFVQICAgICAweDI4MDEgIC8vLzwgT3BlcmF0aW9uIHVzaW5nIFJ4IG9yIFR4IGF0dGVtdGVkIHdoZW4gbm90IGluIDE1LjQgbW9kZQorI2RlZmluZSBJRUVFX0VSUk9SX05PX0ZTICAgICAgICAweDI4MDIgIC8vLzwgT3BlcmF0aW9uIHVzaW5nIFJ4IG9yIFR4IGF0dGVtdGVkIHdpdGhvdXQgZnJlcXVlbmN5IHN5bnRoIGNvbmZpZ3VyZWQKKyNkZWZpbmUgSUVFRV9FUlJPUl9TWU5USF9QUk9HICAgMHgyODAzICAvLy88IFN5bnRoZXNpemVyIHByb2dyYW1taW5nIGZhaWxlZCB0byBjb21wbGV0ZSBvbiB0aW1lCisjZGVmaW5lIElFRUVfRVJST1JfUlhPVkYgICAgICAgIDB4MjgwNCAgLy8vPCBSZWNlaXZlciBvdmVyZmxvd2VkIGR1cmluZyBvcGVyYXRpb24KKyNkZWZpbmUgSUVFRV9FUlJPUl9UWFVORiAgICAgICAgMHgyODA1ICAvLy88IFRyYW5zbWl0dGVyIHVuZGVyZmxvd2VkIGR1cmluZyBvcGVyYXRpb24KKy8vL0B9CisvLy9AfQorCisjZW5kaWYgLyogX0lFRUVfTUFJTEJPWF9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9tYWlsYm94LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9tYWlsYm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkYzc0MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX21haWxib3guaApAQCAtMCwwICsxLDM0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJmX21haWxib3guaAorKiAgUmV2aXNlZDogICAgICAgICQgJAorKiAgUmV2aXNpb246ICAgICAgICQgJAorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluaXRpb25zIGZvciBpbnRlcmZhY2UgYmV0d2VlbiBzeXN0ZW0gYW5kIHJhZGlvIENQVQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTUFJTEJPWF9ICisjZGVmaW5lIF9NQUlMQk9YX0gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisKKy8vLyBcbmFtZSBSRiBtb2RlIHZhbHVlcworLy8vIERlZmluZXMgdXNlZCB0byBpbmRpY2F0ZSBtb2RlIG9mIG9wZXJhdGlvbiB0byByYWRpbyBjb3JlLgorLy8vQHsKKyNkZWZpbmUgUkZfTU9ERV9CTEUgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUkZfTU9ERV9JRUVFXzE1XzQgICAgICAgIDB4MDIKKyNkZWZpbmUgUkZfTU9ERV9QUk9QUklFVEFSWV8yXzQgIDB4MDMKKyNkZWZpbmUgUkZfTU9ERV9QUk9QUklFVEFSWSAgICAgIFJGX01PREVfUFJPUFJJRVRBUllfMl80CisjZGVmaW5lIFJGX01PREVfTVVMVElQTEUgICAgICAgICAweDA1CisvLy9AfQorCisKKy8vLyBUeXBlIGRlZmluaXRpb24gZm9yIFJBVAordHlwZWRlZiB1aW50MzJfdCByYXRtcl90OworCisKKworLy8vIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBkYXRhIHF1ZXVlCit0eXBlZGVmIHN0cnVjdCB7CisgICB1aW50OF90ICpwQ3VyckVudHJ5OyAgIC8vLzwgUG9pbnRlciB0byB0aGUgZGF0YSBxdWV1ZSBlbnRyeSB0byBiZSB1c2VkLCBOVUxMIGZvciBhbiBlbXB0eSBxdWV1ZQorICAgdWludDhfdCAqcExhc3RFbnRyeTsgICAvLy88IFBvaW50ZXIgdG8gdGhlIGxhc3QgZW50cnkgaW4gdGhlIHF1ZXVlLCBOVUxMIGZvciBhIGNpcmN1bGFyIHF1ZXVlCit9IGRhdGFRdWV1ZV90OworCisKKworLy8vIFxuYW1lIENQRSBpbnRlcnJ1cHQgZGVmaW5pdGlvbnMKKy8vLyBJbnRlcnJ1cHQgbWFza3MgZm9yIHRoZSBDUEUgaW50ZXJydXB0IGluIFJEQkVMTC4KKy8vL0B7CisjZGVmaW5lIElSUU5fQ09NTUFORF9ET05FICAgICAgICAgICAwICAgICAgICAgICAvLy88IFJhZGlvIG9wZXJhdGlvbiBjb21tYW5kIGZpbmlzaGVkCisjZGVmaW5lIElSUU5fTEFTVF9DT01NQU5EX0RPTkUgICAgICAxICAgICAgICAgICAvLy88IExhc3QgcmFkaW8gb3BlcmF0aW9uIGNvbW1hbmQgaW4gYSBjaGFpbiBmaW5pc2hlZAorI2RlZmluZSBJUlFOX0ZHX0NPTU1BTkRfRE9ORSAgICAgICAgMiAgICAgICAgICAgLy8vPCBGRyBsZXZlbCBSYWRpbyBvcGVyYXRpb24gY29tbWFuZCBmaW5pc2hlZAorI2RlZmluZSBJUlFOX0xBU1RfRkdfQ09NTUFORF9ET05FICAgMyAgICAgICAgICAgLy8vPCBMYXN0IEZHIGxldmVsIHJhZGlvIG9wZXJhdGlvbiBjb21tYW5kIGluIGEgY2hhaW4gZmluaXNoZWQKKyNkZWZpbmUgSVJRTl9UWF9ET05FICAgICAgICAgICAgICAgIDQgICAgICAgICAgIC8vLzwgUGFja2V0IHRyYW5zbWl0dGVkCisjZGVmaW5lIElSUU5fVFhfQUNLICAgICAgICAgICAgICAgICA1ICAgICAgICAgICAvLy88IEFDSyBwYWNrZXQgdHJhbnNtaXR0ZWQKKyNkZWZpbmUgSVJRTl9UWF9DVFJMICAgICAgICAgICAgICAgIDYgICAgICAgICAgIC8vLzwgQ29udHJvbCBwYWNrZXQgdHJhbnNtaXR0ZWQKKyNkZWZpbmUgSVJRTl9UWF9DVFJMX0FDSyAgICAgICAgICAgIDcgICAgICAgICAgIC8vLzwgQWNrbm93bGVkZ2VtZW50IHJlY2VpdmVkIG9uIGEgdHJhbnNtaXR0ZWQgY29udHJvbCBwYWNrZXQKKyNkZWZpbmUgSVJRTl9UWF9DVFJMX0FDS19BQ0sgICAgICAgIDggICAgICAgICAgIC8vLzwgQWNrbm93bGVkZ2VtZW50IHJlY2VpdmVkIG9uIGEgdHJhbnNtaXR0ZWQgY29udHJvbCBwYWNrZXQsIGFuZCBhY2tub3dsZWRnZW1lbnQgdHJhbnNtaXR0ZWQgZm9yIHRoYXQgcGFja2V0CisjZGVmaW5lIElSUU5fVFhfUkVUUkFOUyAgICAgICAgICAgICA5ICAgICAgICAgICAvLy88IFBhY2tldCByZXRyYW5zbWl0dGVkCisjZGVmaW5lIElSUU5fVFhfRU5UUllfRE9ORSAgICAgICAgICAxMCAgICAgICAgICAvLy88IFR4IHF1ZXVlIGRhdGEgZW50cnkgc3RhdGUgY2hhbmdlZCB0byBGaW5pc2hlZAorI2RlZmluZSBJUlFOX1RYX0JVRkZFUl9DSEFOR0VEICAgICAgMTEgICAgICAgICAgLy8vPCBBIGJ1ZmZlciBjaGFuZ2UgaXMgY29tcGxldGUKKyNkZWZpbmUgSVJRTl9SWF9PSyAgICAgICAgICAgICAgICAgIDE2ICAgICAgICAgIC8vLzwgUGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIE9LLCBwYXlsb2FkLCBhbmQgbm90IHRvIGJlIGlnbm9yZWQKKyNkZWZpbmUgSVJRTl9SWF9OT0sgICAgICAgICAgICAgICAgIDE3ICAgICAgICAgIC8vLzwgUGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIGVycm9yCisjZGVmaW5lIElSUU5fUlhfSUdOT1JFRCAgICAgICAgICAgICAxOCAgICAgICAgICAvLy88IFBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBPSywgYnV0IHRvIGJlIGlnbm9yZWQKKyNkZWZpbmUgSVJRTl9SWF9FTVBUWSAgICAgICAgICAgICAgIDE5ICAgICAgICAgIC8vLzwgUGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIE9LLCBub3QgdG8gYmUgaWdub3JlZCwgbm8gcGF5bG9hZAorI2RlZmluZSBJUlFOX1JYX0NUUkwgICAgICAgICAgICAgICAgMjAgICAgICAgICAgLy8vPCBDb250cm9sIHBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBPSywgbm90IHRvIGJlIGlnbm9yZWQKKyNkZWZpbmUgSVJRTl9SWF9DVFJMX0FDSyAgICAgICAgICAgIDIxICAgICAgICAgIC8vLzwgQ29udHJvbCBwYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgT0ssIG5vdCB0byBiZSBpZ25vcmVkLCB0aGVuIEFDSyBzZW50CisjZGVmaW5lIElSUU5fUlhfQlVGX0ZVTEwgICAgICAgICAgICAyMiAgICAgICAgICAvLy88IFBhY2tldCByZWNlaXZlZCB0aGF0IGRpZCBub3QgZml0IGluIHRoZSBSeCBxdWV1ZQorI2RlZmluZSBJUlFOX1JYX0VOVFJZX0RPTkUgICAgICAgICAgMjMgICAgICAgICAgLy8vPCBSeCBxdWV1ZSBkYXRhIGVudHJ5IGNoYW5naW5nIHN0YXRlIHRvIEZpbmlzaGVkCisjZGVmaW5lIElSUU5fUlhfREFUQV9XUklUVEVOICAgICAgICAyNCAgICAgICAgICAvLy88IERhdGEgd3JpdHRlbiB0byBwYXJ0aWFsIHJlYWQgUnggYnVmZmVyCisjZGVmaW5lIElSUU5fUlhfTl9EQVRBX1dSSVRURU4gICAgICAyNSAgICAgICAgICAvLy88IFNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBwYXJ0aWFsIHJlYWQgUnggYnVmZmVyCisjZGVmaW5lIElSUU5fUlhfQUJPUlRFRCAgICAgICAgICAgICAyNiAgICAgICAgICAvLy88IFBhY2tldCByZWNlcHRpb24gc3RvcHBlZCBiZWZvcmUgcGFja2V0IHdhcyBkb25lCisjZGVmaW5lIElSUU5fUlhfQ09MTElTSU9OX0RFVEVDVEVEICAyNyAgICAgICAgICAvLy88IEEgY29sbGlzaW9uIHdhcyBpbmRpY2F0ZWQgZHVyaW5nIHBhY2tldCByZWNlcHRpb24KKyNkZWZpbmUgSVJRTl9TWU5USF9OT19MT0NLICAgICAgICAgIDI4ICAgICAgICAgIC8vLzwgVGhlIHN5bnRoIGhhcyBnb25lIG91dCBvZiBsb2NrIGFmdGVyIGNhbGlicmF0aW9uCisjZGVmaW5lIElSUU5fTU9EVUxFU19VTkxPQ0tFRCAgICAgICAyOSAgICAgICAgICAvLy88IEFzIHBhcnQgb2YgdGhlIGJvb3QgcHJvY2VzcywgdGhlIENNMCBoYXMgb3BlbmVkIGFjY2VzcyB0byBSRiBjb3JlIG1vZHVsZXMgYW5kIG1lbW9yaWVzCisjZGVmaW5lIElSUU5fQk9PVF9ET05FICAgICAgICAgICAgICAzMCAgICAgICAgICAvLy88IFRoZSBSRiBjb3JlIENQVSBib290IGlzIGZpbmlzaGVkCisKKyNkZWZpbmUgSVJRTl9JTlRFUk5BTF9FUlJPUiAgICAgICAgIDMxICAgICAgICAgIC8vLzwgSW50ZXJuYWwgZXJyb3Igb2JzZXJ2ZWQKKworI2RlZmluZSBJUlFfQ09NTUFORF9ET05FICAgICAgICAgICAgKDFVIDw8IElSUU5fQ09NTUFORF9ET05FKQorI2RlZmluZSBJUlFfTEFTVF9DT01NQU5EX0RPTkUgICAgICAgKDFVIDw8IElSUU5fTEFTVF9DT01NQU5EX0RPTkUpCisjZGVmaW5lIElSUV9GR19DT01NQU5EX0RPTkUgICAgICAgICAoMVUgPDwgSVJRTl9GR19DT01NQU5EX0RPTkUpCisjZGVmaW5lIElSUV9MQVNUX0ZHX0NPTU1BTkRfRE9ORSAgICAoMVUgPDwgSVJRTl9MQVNUX0ZHX0NPTU1BTkRfRE9ORSkKKworI2RlZmluZSBJUlFfVFhfRE9ORSAgICAgICAgICAgICAgICAgKDFVIDw8IElSUU5fVFhfRE9ORSkKKyNkZWZpbmUgSVJRX1RYX0FDSyAgICAgICAgICAgICAgICAgICgxVSA8PCBJUlFOX1RYX0FDSykKKyNkZWZpbmUgSVJRX1RYX0NUUkwgICAgICAgICAgICAgICAgICgxVSA8PCBJUlFOX1RYX0NUUkwpCisjZGVmaW5lIElSUV9UWF9DVFJMX0FDSyAgICAgICAgICAgICAoMVUgPDwgSVJRTl9UWF9DVFJMX0FDSykKKyNkZWZpbmUgSVJRX1RYX0NUUkxfQUNLX0FDSyAgICAgICAgICgxVSA8PCBJUlFOX1RYX0NUUkxfQUNLX0FDSykKKyNkZWZpbmUgSVJRX1RYX1JFVFJBTlMgICAgICAgICAgICAgICgxVSA8PCBJUlFOX1RYX1JFVFJBTlMpCisKKyNkZWZpbmUgSVJRX1RYX0VOVFJZX0RPTkUgICAgICAgICAgICgxVSA8PCBJUlFOX1RYX0VOVFJZX0RPTkUpCisjZGVmaW5lIElSUV9UWF9CVUZGRVJfQ0hBTkdFRCAgICAgICAoMVUgPDwgSVJRTl9UWF9CVUZGRVJfQ0hBTkdFRCkKKworI2RlZmluZSBJUlFfUlhfT0sgICAgICAgICAgICAgICAgICAgKDFVIDw8IElSUU5fUlhfT0spCisjZGVmaW5lIElSUV9SWF9OT0sgICAgICAgICAgICAgICAgICAoMVUgPDwgSVJRTl9SWF9OT0spCisjZGVmaW5lIElSUV9SWF9JR05PUkVEICAgICAgICAgICAgICAoMVUgPDwgSVJRTl9SWF9JR05PUkVEKQorI2RlZmluZSBJUlFfUlhfRU1QVFkgICAgICAgICAgICAgICAgKDFVIDw8IElSUU5fUlhfRU1QVFkpCisjZGVmaW5lIElSUV9SWF9DVFJMICAgICAgICAgICAgICAgICAoMVUgPDwgSVJRTl9SWF9DVFJMKQorI2RlZmluZSBJUlFfUlhfQ1RSTF9BQ0sgICAgICAgICAgICAgKDFVIDw8IElSUU5fUlhfQ1RSTF9BQ0spCisjZGVmaW5lIElSUV9SWF9CVUZfRlVMTCAgICAgICAgICAgICAoMVUgPDwgSVJRTl9SWF9CVUZfRlVMTCkKKyNkZWZpbmUgSVJRX1JYX0VOVFJZX0RPTkUgICAgICAgICAgICgxVSA8PCBJUlFOX1JYX0VOVFJZX0RPTkUpCisjZGVmaW5lIElSUV9SWF9EQVRBX1dSSVRURU4gICAgICAgICAoMVUgPDwgSVJRTl9SWF9EQVRBX1dSSVRURU4pCisjZGVmaW5lIElSUV9SWF9OX0RBVEFfV1JJVFRFTiAgICAgICAoMVUgPDwgSVJRTl9SWF9OX0RBVEFfV1JJVFRFTikKKyNkZWZpbmUgSVJRX1JYX0FCT1JURUQgICAgICAgICAgICAgICgxVSA8PCBJUlFOX1JYX0FCT1JURUQpCisjZGVmaW5lIElSUV9SWF9DT0xMSVNJT05fREVURUNURUQgICAoMVUgPDwgSVJRTl9SWF9DT0xMSVNJT05fREVURUNURUQpCisjZGVmaW5lIElSUV9TWU5USF9OT19MT0NLICAgICAgICAgICAoMVUgPDwgSVJRTl9TWU5USF9OT19MT0NLKQorI2RlZmluZSBJUlFfTU9EVUxFU19VTkxPQ0tFRCAgICAgICAgKDFVIDw8IElSUU5fTU9EVUxFU19VTkxPQ0tFRCkKKyNkZWZpbmUgSVJRX0JPT1RfRE9ORSAgICAgICAgICAgICAgICgxVSA8PCBJUlFOX0JPT1RfRE9ORSkKKyNkZWZpbmUgSVJRX0lOVEVSTkFMX0VSUk9SICAgICAgICAgICgxVSA8PCBJUlFOX0lOVEVSTkFMX0VSUk9SKQorLy8vQH0KKworCisKKy8vLyBcbmFtZSBDTURTVEEgdmFsdWVzCisvLy8gVmFsdWVzIHJldHVybmVkIGluIHJlc3VsdCBieXRlIG9mIENNRFNUQQorLy8vQHsKKyNkZWZpbmUgQ01EU1RBX1BlbmRpbmcgMHgwMCAgICAgICAgICAgICAgLy8vPCBUaGUgY29tbWFuZCBoYXMgbm90IHlldCBiZWVuIHBhcnNlZAorI2RlZmluZSBDTURTVEFfRG9uZSAweDAxICAgICAgICAgICAgICAgICAvLy88IENvbW1hbmQgc3VjY2Vzc2Z1bGx5IHBhcnNlZAorCisjZGVmaW5lIENNRFNUQV9JbGxlZ2FsUG9pbnRlciAweDgxICAgICAgIC8vLzwgVGhlIHBvaW50ZXIgc2lnbmFsZWQgaW4gQ01EUiBpcyBub3QgdmFsaWQKKyNkZWZpbmUgQ01EU1RBX1Vua25vd25Db21tYW5kIDB4ODIgICAgICAgLy8vPCBUaGUgY29tbWFuZCBudW1iZXIgaW4gdGhlIGNvbW1hbmQgc3RydWN0dXJlIGlzIHVua25vd24KKyNkZWZpbmUgQ01EU1RBX1Vua25vd25EaXJDb21tYW5kIDB4ODMgICAgLy8vPCBUaGUgY29tbWFuZCBudW1iZXIgZm9yIGEgZGlyZWN0IGNvbW1hbmQgaXMgdW5rbm93biwgb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgY29tbWFuZCBpcyBub3QgYSBkaXJlY3QgY29tbWFuZAorI2RlZmluZSBDTURTVEFfQ29udGV4dEVycm9yIDB4ODUgICAgICAgICAvLy88IEFuIGltbWVkaWF0ZSBvciBkaXJlY3QgY29tbWFuZCB3YXMgaXNzdWVkIGluIGEgY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IHdoZXJlIGl0IGlzIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgQ01EU1RBX1NjaGVkdWxpbmdFcnJvciAweDg2ICAgICAgLy8vPCBBIHJhZGlvIG9wZXJhdGlvbiBjb21tYW5kIHdhcyBhdHRlbXB0ZWQgdG8gYmUgc2NoZWR1bGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgd2hpbGUgYW5vdGhlciBvcGVyYXRpb24gd2FzIGFscmVhZHkgcnVubmluZyBpbiB0aGUgUkYgY29yZQorI2RlZmluZSBDTURTVEFfUGFyRXJyb3IgMHg4NyAgICAgICAgICAgICAvLy88IFRoZXJlIHdlcmUgZXJyb3JzIGluIHRoZSBjb21tYW5kIHBhcmFtZXRlcnMgdGhhdCBhcmUgcGFyc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgb24gc3VibWlzc2lvbi4KKyNkZWZpbmUgQ01EU1RBX1F1ZXVlRXJyb3IgMHg4OCAgICAgICAgICAgLy8vPCBBbiBvcGVyYXRpb24gb24gYSBkYXRhIGVudHJ5IHF1ZXVlIHdhcyBhdHRlbXB0ZWQgdGhhdCB3YXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBxdWV1ZSBpbiBpdHMgY3VycmVudCBzdGF0ZQorI2RlZmluZSBDTURTVEFfUXVldWVCdXN5IDB4ODkgICAgICAgICAgICAvLy88IEFuIG9wZXJhdGlvbiBvbiBhIGRhdGEgZW50cnkgd2FzIGF0dGVtcHRlZCB3aGlsZSB0aGF0IGVudHJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgd2FzIGJ1c3kKKy8vL0B9CisKKworCisvLy8gXG5hbWUgTWFjcm9zIGZvciBzZW5kaW5nIGRpcmVjdCBjb21tYW5kcworLy8vQHsKKy8vLyBEaXJlY3QgY29tbWFuZCB3aXRoIG5vIHBhcmFtZXRlcgorI2RlZmluZSBDTURSX0RJUl9DTUQoY21kSWQpICgoKGNtZElkKSA8PCAxNikgfCAxKQorCisvLy8gRGlyZWN0IGNvbW1hbmQgd2l0aCAxLWJ5dGUgcGFyYW1ldGVyCisjZGVmaW5lIENNRFJfRElSX0NNRF8xQllURShjbWRJZCwgcGFyKSAoKChjbWRJZCkgPDwgMTYpIHwgKChwYXIpIDw8IDgpIHwgMSkKKworLy8vIERpcmVjdCBjb21tYW5kIHdpdGggMi1ieXRlIHBhcmFtZXRlcgorI2RlZmluZSBDTURSX0RJUl9DTURfMkJZVEUoY21kSWQsIHBhcikgKCgoY21kSWQpIDw8IDE2KSB8ICgocGFyKSAmIDB4RkZGQykgfCAxKQorCisvLy9AfQorCisKKworLy8vIFxuYW1lIERlZmluaXRpb25zIGZvciB0cmlnZ2VyIHR5cGVzCisvLy9AeworI2RlZmluZSBUUklHX05PVyAwICAgICAgICAgICAgLy8vPCBUcmlnZ2VycyBpbW1lZGlhdGVseQorI2RlZmluZSBUUklHX05FVkVSIDEgICAgICAgICAgLy8vPCBOZXZlciB0cmlncworI2RlZmluZSBUUklHX0FCU1RJTUUgMiAgICAgICAgLy8vPCBUcmlncyBhdCBhbiBhYnNvbHV0ZSB0aW1lCisjZGVmaW5lIFRSSUdfUkVMX1NVQk1JVCAzICAgICAvLy88IFRyaWdzIGF0IGEgdGltZSByZWxhdGl2ZSB0byB0aGUgY29tbWFuZCB3YXMgc3VibWl0dGVkCisjZGVmaW5lIFRSSUdfUkVMX1NUQVJUIDQgICAgICAvLy88IFRyaWdzIGF0IGEgdGltZSByZWxhdGl2ZSB0byB0aGUgY29tbWFuZCBzdGFydGVkCisjZGVmaW5lIFRSSUdfUkVMX1BSRVZTVEFSVCA1ICAvLy88IFRyaWdzIGF0IGEgdGltZSByZWxhdGl2ZSB0byB0aGUgcHJldmlvdXMgY29tbWFuZCBpbiB0aGUgY2hhaW4gc3RhcnRlZAorI2RlZmluZSBUUklHX1JFTF9GSVJTVFNUQVJUIDYgLy8vPCBUcmlncyBhdCBhIHRpbWUgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIGNoYWluIHN0YXJ0ZWQKKyNkZWZpbmUgVFJJR19SRUxfUFJFVkVORCA3ICAgIC8vLzwgVHJpZ3MgYXQgYSB0aW1lIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyBjb21tYW5kIGluIHRoZSBjaGFpbiBlbmRlZAorI2RlZmluZSBUUklHX1JFTF9FVlQxIDggICAgICAgLy8vPCBUcmlncyBhdCBhIHRpbWUgcmVsYXRpdmUgdG8gdGhlIGNvbnRleHQgZGVmaW5lZCAiRXZlbnQgMSIKKyNkZWZpbmUgVFJJR19SRUxfRVZUMiA5ICAgICAgIC8vLzwgVHJpZ3MgYXQgYSB0aW1lIHJlbGF0aXZlIHRvIHRoZSBjb250ZXh0IGRlZmluZWQgIkV2ZW50IDIiCisjZGVmaW5lIFRSSUdfRVhURVJOQUwgMTAgICAgICAvLy88IFRyaWdzIGF0IGFuIGV4dGVybmFsIGV2ZW50IHRvIHRoZSByYWRpbyB0aW1lcgorI2RlZmluZSBUUklHX1BBU1RfQk0gMHg4MCAgICAgLy8vPCBCaXRtYXNrIGZvciBzZXR0aW5nIHBhc3RUcmlnIGJpdCBpbiBvcmRlciB0byB0cmlnIGltbWVkaWF0ZWx5IGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IHRyaWdnZXIgaGFwcGVuZWQgaW4gdGhlIHBhc3QKKy8vL0B9CisKKworLy8vIFxuYW1lIERlZmluaXRpb25zIGZvciBjb25kaXRpb25hbCBleGVjdXRpb24KKy8vL0B7CisjZGVmaW5lIENPTkRfQUxXQVlTIDAgICAgICAgICAvLy88IEFsd2F5cyBydW4gbmV4dCBjb21tYW5kIChleGNlcHQgaW4gY2FzZSBvZiBBYm9ydCkKKyNkZWZpbmUgQ09ORF9ORVZFUiAxICAgICAgICAgIC8vLzwgTmV2ZXIgcnVuIG5leHQgY29tbWFuZAorI2RlZmluZSBDT05EX1NUT1BfT05fRkFMU0UgMiAgLy8vPCBSdW4gbmV4dCBjb21tYW5kIGlmIHRoaXMgY29tbWFuZCByZXR1cm5lZCBUcnVlLCBzdG9wIGlmIGl0IHJldHVybmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEZhbHNlCisjZGVmaW5lIENPTkRfU1RPUF9PTl9UUlVFIDMgICAvLy88IFN0b3AgaWYgdGhpcyBjb21tYW5kIHJldHVybmVkIFRydWUsIHJ1biBuZXh0IGNvbW1hbmQgaWYgaXQgcmV0dXJuZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRmFsc2UKKyNkZWZpbmUgQ09ORF9TS0lQX09OX0ZBTFNFIDQgIC8vLzwgUnVuIG5leHQgY29tbWFuZCBpZiB0aGlzIGNvbW1hbmQgcmV0dXJuZWQgVHJ1ZSwgc2tpcCBhIG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBjb21tYW5kcyBpZiBpdCByZXR1cm5lZCBGYWxzZQorI2RlZmluZSBDT05EX1NLSVBfT05fVFJVRSA1ICAgLy8vPCBTa2lwIGEgbnVtYmVyIG9mIGNvbW1hbmRzIGlmIHRoaXMgY29tbWFuZCByZXR1cm5lZCBUcnVlLCBydW4gbmV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBjb21tYW5kIGlmIGl0IHJldHVybmVkIEZhbHNlCisvLy9AfQorCisKKworLy8vIFxuYW1lIFJhZGlvIG9wZXJhdGlvbiBzdGF0dXMKKy8vL0B7CisvLy8gXG5hbWUgT3BlcmF0aW9uIG5vdCBmaW5pc2hlZAorLy8vQHsKKyNkZWZpbmUgSURMRSAgICAgICAgICAgICAweDAwMDAgICAvLy88IE9wZXJhdGlvbiBub3Qgc3RhcnRlZAorI2RlZmluZSBQRU5ESU5HICAgICAgICAgIDB4MDAwMSAgIC8vLzwgU3RhcnQgb2YgY29tbWFuZCBpcyBwZW5kaW5nCisjZGVmaW5lIEFDVElWRSAgICAgICAgICAgMHgwMDAyICAgLy8vPCBSdW5uaW5nCisjZGVmaW5lIFNLSVBQRUQgICAgICAgICAgMHgwMDAzICAgLy8vPCBPcGVyYXRpb24gc2tpcHBlZCBkdWUgdG8gY29uZGl0aW9uIGluIGFub3RoZXIgY29tbWFuZAorLy8vQH0KKy8vLyBcbmFtZSBPcGVyYXRpb24gZmluaXNoZWQgbm9ybWFsbHkKKy8vL0B7CisjZGVmaW5lIERPTkVfT0sgICAgICAgICAgMHgwNDAwICAgLy8vPCBPcGVyYXRpb24gZW5kZWQgbm9ybWFsbHkKKyNkZWZpbmUgRE9ORV9DT1VOVERPV04gICAweDA0MDEgICAvLy88IENvdW50ZXIgcmVhY2hlZCB6ZXJvCisjZGVmaW5lIERPTkVfUlhFUlIgICAgICAgMHgwNDAyICAgLy8vPCBPcGVyYXRpb24gZW5kZWQgd2l0aCBDUkMgZXJyb3IKKyNkZWZpbmUgRE9ORV9USU1FT1VUICAgICAweDA0MDMgICAvLy88IE9wZXJhdGlvbiBlbmRlZCB3aXRoIHRpbWVvdXQKKyNkZWZpbmUgRE9ORV9TVE9QUEVEICAgICAweDA0MDQgICAvLy88IE9wZXJhdGlvbiBzdG9wcGVkIGFmdGVyIENNRF9TVE9QIGNvbW1hbmQKKyNkZWZpbmUgRE9ORV9BQk9SVCAgICAgICAweDA0MDUgICAvLy88IE9wZXJhdGlvbiBhYm9ydGVkIGJ5IENNRF9BQk9SVCBjb21tYW5kCisjZGVmaW5lIERPTkVfRkFJTEVEICAgICAgMHgwNDA2ICAgLy8vPCBTY2hlZHVsZWQgaW1tZWRpYXRlIGNvbW1hbmQgZmFpbGVkCisvLy9AfQorLy8vIFxuYW1lIE9wZXJhdGlvbiBmaW5pc2hlZCB3aXRoIGVycm9yCisvLy9AeworI2RlZmluZSBFUlJPUl9QQVNUX1NUQVJUIDB4MDgwMCAgIC8vLzwgVGhlIHN0YXJ0IHRyaWdnZXIgb2NjdXJyZWQgaW4gdGhlIHBhc3QKKyNkZWZpbmUgRVJST1JfU1RBUlRfVFJJRyAweDA4MDEgICAvLy88IElsbGVnYWwgc3RhcnQgdHJpZ2dlciBwYXJhbWV0ZXIKKyNkZWZpbmUgRVJST1JfQ09ORElUSU9OICAweDA4MDIgICAvLy88IElsbGVnYWwgY29uZGl0aW9uIGZvciBuZXh0IG9wZXJhdGlvbgorI2RlZmluZSBFUlJPUl9QQVIgICAgICAgIDB4MDgwMyAgIC8vLzwgRXJyb3IgaW4gYSBjb21tYW5kIHNwZWNpZmljIHBhcmFtZXRlcgorI2RlZmluZSBFUlJPUl9QT0lOVEVSICAgIDB4MDgwNCAgIC8vLzwgSW52YWxpZCBwb2ludGVyIHRvIG5leHQgb3BlcmF0aW9uCisjZGVmaW5lIEVSUk9SX0NNRElEICAgICAgMHgwODA1ICAgLy8vPCBOZXh0IG9wZXJhdGlvbiBoYXMgYSBjb21tYW5kIElEIHRoYXQgaXMgdW5kZWZpbmVkIG9yIG5vdCBhIHJhZGlvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBvcGVyYXRpb24gY29tbWFuZAorI2RlZmluZSBFUlJPUl9XUk9OR19CRyAgIDB4MDgwNiAgIC8vLzwgRkcgbGV2ZWwgY29tbWFuZCBub3QgY29tcGF0aWJsZSB3aXRoIHJ1bm5pbmcgQkcgbGV2ZWwgY29tbWFuZAorI2RlZmluZSBFUlJPUl9OT19TRVRVUCAgIDB4MDgwNyAgIC8vLzwgT3BlcmF0aW9uIHVzaW5nIFJ4IG9yIFR4IGF0dGVtdGVkIHdpdGhvdXQgQ01EX1JBRElPX1NFVFVQCisjZGVmaW5lIEVSUk9SX05PX0ZTICAgICAgMHgwODA4ICAgLy8vPCBPcGVyYXRpb24gdXNpbmcgUnggb3IgVHggYXR0ZW10ZWQgd2l0aG91dCBmcmVxdWVuY3kgc3ludGggY29uZmlndXJlZAorI2RlZmluZSBFUlJPUl9TWU5USF9QUk9HIDB4MDgwOSAgIC8vLzwgU3ludGhlc2l6ZXIgY2FsaWJyYXRpb24gZmFpbGVkCisjZGVmaW5lIEVSUk9SX1RYVU5GICAgICAgMHgwODBBICAgLy8vPCBUeCB1bmRlcmZsb3cgb2JzZXJ2ZWQKKyNkZWZpbmUgRVJST1JfUlhPVkYgICAgICAweDA4MEIgICAvLy88IFJ4IG92ZXJmbG93IG9ic2VydmVkCisjZGVmaW5lIEVSUk9SX05PX1JYICAgICAgMHgwODBDICAgLy8vPCBBdHRlbXB0ZWQgdG8gYWNjZXNzIGRhdGEgZnJvbSBSeCB3aGVuIG5vIHN1Y2ggZGF0YSB3YXMgeWV0IHJlY2VpdmVkCisjZGVmaW5lIEVSUk9SX1BFTkRJTkcgICAgMHgwODBEICAgLy8vPCBDb21tYW5kIHN1Ym1pdHRlZCBpbiB0aGUgZnV0dXJlIHdpdGggYW5vdGhlciBjb21tYW5kIGF0IGRpZmZlcmVudCBsZXZlbCBwZW5kaW5nCisvLy9AfQorLy8vQH0KKworCisvLy8gXG5hbWUgRGF0YSBlbnRyeSB0eXBlcworLy8vQHsKKyNkZWZpbmUgREFUQV9FTlRSWV9UWVBFX0dFTiAwICAgICAvLy88IEdlbmVyYWwgdHlwZTogVHggZW50cnkgb3Igc2luZ2xlIGVsZW1lbnQgUnggZW50cnkKKyNkZWZpbmUgREFUQV9FTlRSWV9UWVBFX01VTFRJIDEgICAvLy88IE11bHRpLWVsZW1lbnQgUnggZW50cnkgdHlwZQorI2RlZmluZSBEQVRBX0VOVFJZX1RZUEVfUFRSIDIgICAgIC8vLzwgUG9pbnRlciBlbnRyeSB0eXBlCisjZGVmaW5lIERBVEFfRU5UUllfVFlQRV9QQVJUSUFMIDMgLy8vPCBQYXJ0aWFsIHJlYWQgZW50cnkgdHlwZQorLy8vQAorCisKKy8vLyBcbmFtZSBEYXRhIGVudHJ5IHN0YXR1c2VzCisvLy9AeworI2RlZmluZSBEQVRBX0VOVFJZX1BFTkRJTkcgMCAgICAgIC8vLzwgRW50cnkgbm90IHlldCB1c2VkCisjZGVmaW5lIERBVEFfRU5UUllfQUNUSVZFIDEgICAgICAgLy8vPCBFbnRyeSBpbiB1c2UgYnkgcmFkaW8gQ1BVCisjZGVmaW5lIERBVEFfRU5UUllfQlVTWSAyICAgICAgICAgLy8vPCBFbnRyeSBiZWluZyB1cGRhdGVkCisjZGVmaW5lIERBVEFfRU5UUllfRklOSVNIRUQgMyAgICAgLy8vPCBSYWRpbyBDUFUgaXMgZmluaXNoZWQgYWNjZXNzaW5nIHRoZSBlbnRyeQorI2RlZmluZSBEQVRBX0VOVFJZX1VORklOSVNIRUQgNCAgIC8vLzwgUmFkaW8gQ1BVIGlzIGZpbmlzaGVkIGFjY2Vzc2luZyB0aGUgZW50cnksIGJ1dCBwYWNrZXQgY291bGQgbm90IGJlIGZpbmlzaGVkCisvLy9AfQorCisKKworLy8vIFxuYW1lIE1hY3JvcyBmb3IgUkYgcmVnaXN0ZXIgb3ZlcnJpZGUKKy8vL0B7CisvLy8gTWFjcm8gZm9yIEFESSBoYWxmLXNpemUgdmFsdWUtbWFzayBjb21iaW5hdGlvbgorI2RlZmluZSBBRElfVkFMX01BU0soYWRkciwgbWFzaywgdmFsdWUpIFwKKygoKGFkZHIpICYgMSkgPyAoKChtYXNrKSAmIDB4MEYpIHwgKCgodmFsdWUpICYgMHgwRikgPDwgNCkpIDogXAorICgoKChtYXNrKSAmIDB4MEYpIDw8IDQpIHwgKCh2YWx1ZSkgJiAweDBGKSkpCisvLy8gMzItYml0IHdyaXRlIG9mIDE2LWJpdCB2YWx1ZQorI2RlZmluZSBIV19SRUdfT1ZFUlJJREUoYWRkciwgdmFsKSAoKCgodWludHB0cl90KSAoYWRkcikpICYgMHhGRkZDKSB8ICgodWludDMyX3QpKHZhbCkgPDwgMTYpKQorLy8vIEFESSByZWdpc3RlciwgZnVsbC1zaXplIHdyaXRlCisjZGVmaW5lIEFESV9SRUdfT1ZFUlJJREUoYWRpTm8sIGFkZHIsIHZhbCkgKDIgfCAoKHVpbnQzMl90KSh2YWwpIDw8IDE2KSB8IFwKKygoKGFkZHIpICYgMHgzRikgPDwgMjQpIHwgKCgoYWRpTm8pID8gMVUgOiAwKSA8PCAzMSkpCisvLy8gMiBBREkgcmVnaXN0ZXJzLCBmdWxsLXNpemUgd3JpdGUKKyNkZWZpbmUgQURJXzJSRUdfT1ZFUlJJREUoYWRpTm8sIGFkZHIsIHZhbCwgYWRkcjIsIHZhbDIpIFwKKygyIHwgKCh1aW50MzJfdCkodmFsMikgPDwgMikgfCAoKChhZGRyMikgJiAweDNGKSA8PCAxMCkgfCAoKHVpbnQzMl90KSh2YWwpIDw8IDE2KSB8IFwKKygoKGFkZHIpICYgMHgzRikgPDwgMjQpIHwgKCgoYWRpTm8pID8gMVUgOiAwKSA8PCAzMSkpCisvLy8gQURJIHJlZ2lzdGVyLCBoYWxmLXNpemUgcmVhZC1tb2RpZnktd3JpdGUKKyNkZWZpbmUgQURJX0hBTEZSRUdfT1ZFUlJJREUoYWRpTm8sIGFkZHIsIG1hc2ssIHZhbCkgKDIgfCAoQURJX1ZBTF9NQVNLKGFkZHIsIG1hc2ssIHZhbCkgPDwgMTYpIHwgXAorKCgoYWRkcikgJiAweDNGKSA8PCAyNCkgfCAoMVUgPDwgMzApIHwgKCgoYWRpTm8pID8gMVUgOiAwKSA8PCAzMSkpCisvLy8gMiBBREkgcmVnaXN0ZXJzLCBoYWxmLXNpemUgcmVhZC1tb2RpZnktd3JpdGUKKyNkZWZpbmUgQURJXzJIQUxGUkVHX09WRVJSSURFKGFkaU5vLCBhZGRyLCBtYXNrLCB2YWwsIGFkZHIyLCBtYXNrMiwgdmFsMikgXAorKDIgfCAoQURJX1ZBTF9NQVNLKGFkZHIyLCBtYXNrMiwgdmFsMikgPDwgMikgfCAoKChhZGRyMikgJiAweDNGKSA8PCAxMCkgfCBcCisoQURJX1ZBTF9NQVNLKGFkZHIsIG1hc2ssIHZhbCkgPDwgMTYpIHwgKCgoYWRkcikgJiAweDNGKSA8PCAyNCkgfCAoMVUgPDwgMzApIHwgKCgoYWRpTm8pID8gMVUgOiAwKSA8PCAzMSkpCisKKy8vLyAxNi1iaXQgU1cgcmVnaXN0ZXIgYXMgZGVmaW5lZCBpbiByYWRpb19wYXJfZGVmLnR4dAorI2RlZmluZSBTV19SRUdfT1ZFUlJJREUoY21kLCBmaWVsZCwgdmFsKSAoMyB8ICgoX1BPU0lUSU9OXyMjY21kIyNfIyNmaWVsZCkgPDwgNCkgfCAoKHVpbnQzMl90KSh2YWwpIDw8IDE2KSkKKy8vLyBTVyByZWdpc3RlciBhcyBkZWZpbmVkIGluIHJhZGlvX3Bhcl9kZWYudHh0IHdpdGggYWRkZWQgaW5kZXggKGZvciB1c2Ugd2l0aCByZWdpc3RlcnMgPiAxNiBiaXRzKS4KKyNkZWZpbmUgU1dfUkVHX0lORF9PVkVSUklERShjbWQsIGZpZWxkLCBvZmZzZXQsIHZhbCkgKDMgfCBcCisoKChfUE9TSVRJT05fIyNjbWQjI18jI2ZpZWxkKSArICgob2Zmc2V0KSA8PCAxKSkgPDwgNCkgfCAoKHVpbnQzMl90KSh2YWwpIDw8IDE2KSkKKy8vLyA4LWJpdCBTVyByZWdpc3RlciBhcyBkZWZpbmVkIGluIHJhZGlvX3Bhcl9kZWYudHh0CisjZGVmaW5lIFNXX1JFR19CWVRFX09WRVJSSURFKGNtZCwgZmllbGQsIHZhbCkgKDB4ODAwMyB8ICgoX1BPU0lUSU9OXyMjY21kIyNfIyNmaWVsZCkgPDwgNCkgfCBcCisoKHVpbnQzMl90KSh2YWwpIDw8IDE2KSkKKy8vLyBUd28gOC1iaXQgU1cgcmVnaXN0ZXJzIGFzIGRlZmluZWQgaW4gcmFkaW9fcGFyX2RlZi50eHQ7IHRoZSBvbmUgZ2l2ZW4gYnkgZmllbGQgYW5kIHRoZSBuZXh0IGJ5dGUuCisjZGVmaW5lIFNXX1JFR18yQllURV9PVkVSUklERShjbWQsIGZpZWxkLCB2YWwwLCB2YWwxKSAoMyB8ICgoKF9QT1NJVElPTl8jI2NtZCMjXyMjZmllbGQpICYgMHhGRkZFKSA8PCA0KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkodmFsMCkgPDwgMTYpICYgMHgwMEZGMDAwMCkgfCAoKHVpbnQzMl90KSh2YWwxKSA8PCAyNCkpCisjZGVmaW5lIEhXMTZfQVJSQVlfT1ZFUlJJREUoYWRkciwgbGVuZ3RoKSAoMSB8ICgoKHVpbnRwdHJfdCkgKGFkZHIpKSAmIDB4RkZGQykgfCAoKHVpbnQzMl90KShsZW5ndGgpIDw8IDE2KSkKKyNkZWZpbmUgSFczMl9BUlJBWV9PVkVSUklERShhZGRyLCBsZW5ndGgpICgxIHwgKCgodWludHB0cl90KSAoYWRkcikpICYgMHhGRkZDKSB8IFwKKygodWludDMyX3QpKGxlbmd0aCkgPDwgMTYpIHwgKDFVIDw8IDMwKSkKKyNkZWZpbmUgQURJX0FSUkFZX09WRVJSSURFKGFkaU5vLCBhZGRyLCBiSGFsZlNpemUsIGxlbmd0aCkgKDEgfCAoKCgoYWRkcikgJiAweDNGKSA8PCAyKSkgfCBcCisoKCEhKGJIYWxmU2l6ZSkpIDw8IDgpIHwgKCghIShhZGlObykpIDw8IDkpIHwgKCh1aW50MzJfdCkobGVuZ3RoKSA8PCAxNikgfCAoMlUgPDwgMzApKQorI2RlZmluZSBTV19BUlJBWV9PVkVSUklERShjbWQsIGZpcnN0ZmllbGQsIGxlbmd0aCkgKDEgfCAoKChfUE9TSVRJT05fIyNjbWQjI18jI2ZpcnN0ZmllbGQpKSA8PCAyKSB8IFwKKygodWludDMyX3QpKGxlbmd0aCkgPDwgMTYpIHwgKDNVIDw8IDMwKSkKKyNkZWZpbmUgTUNFX1JGRV9PVkVSUklERShiTWNlUmFtLCBtY2VSb21CYW5rLCBtY2VNb2RlLCBiUmZlUmFtLCByZmVSb21CYW5rLCByZmVNb2RlKSBcCisgICAoNyB8ICgoISEoYk1jZVJhbSkpIDw8IDgpIHwgKCgobWNlUm9tQmFuaykgJiAweDA3KSA8PCA5KSB8ICgoISEoYlJmZVJhbSkpIDw8IDEyKSB8ICgoKHJmZVJvbUJhbmspICYgMHgwNykgPDwgMTMpIHwgXAorICAgICgoKG1jZU1vZGUpICYgMHgwMEZGKSA8PCAxNikgfCAoKChyZmVNb2RlKSAmIDB4MDBGRikgPDwgMjQpKQorI2RlZmluZSBORVdfT1ZFUlJJREVfU0VHTUVOVChhZGRyZXNzKSAoKCgoKHVpbnRwdHJfdCkoYWRkcmVzcykpICYgMHgwM0ZGRkZGQykgPDwgNikgfCAweDAwMEYgfCBcCisgICAoKCgoKHVpbnRwdHJfdCkoYWRkcmVzcykgPj4gMjQpID09IDB4MjApID8gMHgwMSA6IFwKKyAgICAgKCgodWludHB0cl90KShhZGRyZXNzKSA+PiAyNCkgPT0gMHgyMSkgPyAweDAyIDogXAorICAgICAoKCh1aW50cHRyX3QpKGFkZHJlc3MpID4+IDI0KSA9PSAweEEwKSA/IDB4MDMgOiBcCisgICAgICgoKHVpbnRwdHJfdCkoYWRkcmVzcykgPj4gMjQpID09IDB4MDApID8gMHgwNCA6IFwKKyAgICAgKCgodWludHB0cl90KShhZGRyZXNzKSA+PiAyNCkgPT0gMHgxMCkgPyAweDA1IDogXAorICAgICAoKCh1aW50cHRyX3QpKGFkZHJlc3MpID4+IDI0KSA9PSAweDExKSA/IDB4MDYgOiBcCisgICAgICgoKHVpbnRwdHJfdCkoYWRkcmVzcykgPj4gMjQpID09IDB4NDApID8gMHgwNyA6IFwKKyAgICAgKCgodWludHB0cl90KShhZGRyZXNzKSA+PiAyNCkgPT0gMHg1MCkgPyAweDA4IDogXAorICAgICAweDA5KSA8PCA0KSkgLy8gVXNlIGlsbGVnYWwgdmFsdWUgZm9yIGlsbGVnYWwgYWRkcmVzcyByYW5nZQorLy8vIEVuZCBvZiBzdHJpbmcgZm9yIG92ZXJyaWRlIHJlZ2lzdGVyCisjZGVmaW5lIEVORF9PVkVSUklERSAweEZGRkZGRkZGCisKKworLy8vIEFESSBhZGRyZXNzLXZhbHVlIHBhaXIKKyNkZWZpbmUgQURJX0FERFJfVkFMKGFkZHIsIHZhbHVlKSAoKCgoYWRkcikgJiAweDdGKSA8PCA4KSB8ICgodmFsdWUpICYgMHhGRikpCisjZGVmaW5lIEFESV9BRERSX1ZBTF9NQVNLKGFkZHIsIG1hc2ssIHZhbHVlKSAoKCgoYWRkcikgJiAweDdGKSA8PCA4KSB8IEFESV9WQUxfTUFTSyhhZGRyLCBtYXNrLCB2YWx1ZSkpCisKKy8vLyBMb3cgaGFsZi13b3JkCisjZGVmaW5lIExPV09SRCh2YWx1ZSkgKCh2YWx1ZSkgJiAweEZGRkYpCisvLy8gSGlnaCBoYWxmLXdvcmQKKyNkZWZpbmUgSElXT1JEKHZhbHVlKSAoKHZhbHVlKSA+PiAxNikKKy8vL0B9CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9wcm9wX2NtZC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfcHJvcF9jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjI4NTU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfcHJvcF9jbWQuaApAQCAtMCwwICsxLDQ3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJmX3Byb3BfY21kLmgKKyogIFJldmlzZWQ6ICAgICAgICAkICQKKyogIFJldmlzaW9uOiAgICAgICAkICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBDQzI2eHggQVBJIGZvciBQcm9wcmlldGFyeSBtb2RlIGNvbW1hbmRzCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUFJPUF9DTURfSAorI2RlZmluZSBfX1BST1BfQ01EX0gKKworI2lmbmRlZiBfX1JGQ19TVFJVQ1QKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBfX1JGQ19TVFJVQ1QgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSkKKyNlbHNlCisjZGVmaW5lIF9fUkZDX1NUUlVDVAorI2VuZGlmCisjZW5kaWYKKworLy8hIFxhZGR0b2dyb3VwIHJmYworLy8hIEB7CisKKy8vISBcYWRkdG9ncm91cCBwcm9wX2NtZAorLy8hIEB7CisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZfbWFpbGJveC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9jb21tb25fY21kLmg+CisKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BST1BfVFhfcyByZmNfQ01EX1BST1BfVFhfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BST1BfUlhfcyByZmNfQ01EX1BST1BfUlhfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BST1BfVFhfQURWX3MgcmZjX0NNRF9QUk9QX1RYX0FEVl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUFJPUF9SWF9BRFZfcyByZmNfQ01EX1BST1BfUlhfQURWX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9QUk9QX1JBRElPX1NFVFVQX3MgcmZjX0NNRF9QUk9QX1JBRElPX1NFVFVQX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9QUk9QX1NFVF9MRU5fcyByZmNfQ01EX1BST1BfU0VUX0xFTl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUFJPUF9SRVNUQVJUX1JYX3MgcmZjX0NNRF9QUk9QX1JFU1RBUlRfUlhfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfcHJvcFJ4T3V0cHV0X3MgcmZjX3Byb3BSeE91dHB1dF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19wcm9wUnhTdGF0dXNfcyByZmNfcHJvcFJ4U3RhdHVzX3Q7CisKKy8vISBcYWRkdG9ncm91cCBDTURfUFJPUF9UWAorLy8hIEB7CisjZGVmaW5lIENNRF9QUk9QX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzODAxCisvLyEgUHJvcHJpZXRhcnkgTW9kZSBUcmFuc21pdCBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUFJPUF9UWF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgzODAxCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJGc09mZjoxOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogS2VlcCBmcmVxdWVuY3kgc3ludGggb24gYWZ0ZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBUdXJuIGZyZXF1ZW5jeSBzeW50aCBvZmYgYWZ0ZXIgY29tbWFuZAorICAgICAgdWludDhfdCA6MjsKKyAgICAgIHVpbnQ4X3QgYlVzZUNyYzoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBEbyBub3QgYXBwZW5kIENSQzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBcHBlbmQgQ1JDCisgICAgICB1aW50OF90IGJWYXJMZW46MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRml4ZWQgbGVuZ3RoPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFRyYW5zbWl0IGxlbmd0aCBhcyBmaXJzdCBieXRlCisgICB9IHBrdENvbmY7CisgICB1aW50OF90IHBrdExlbjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUGFja2V0IGxlbmd0aAorICAgdWludDMyX3Qgc3luY1dvcmQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFN5bmMgd29yZCB0byB0cmFuc21pdAorICAgdWludDhfdCogcFBrdDsgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gcGFja2V0Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9QUk9QX1JYCisvLyEgQHsKKyNkZWZpbmUgQ01EX1BST1BfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM4MDIKKy8vISBQcm9wcmlldGFyeSBNb2RlIFJlY2VpdmUgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BST1BfUlhfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MzgwMgorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiRnNPZmY6MTsgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEtlZXAgZnJlcXVlbmN5IHN5bnRoIG9uIGFmdGVyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVHVybiBmcmVxdWVuY3kgc3ludGggb2ZmIGFmdGVyIGNvbW1hbmQKKyAgICAgIHVpbnQ4X3QgYlJlcGVhdE9rOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBFbmQgb3BlcmF0aW9uIGFmdGVyIHJlY2VpdmluZyBhIHBhY2tldCBjb3JyZWN0bHk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogR28gYmFjayB0byBzeW5jIHNlYXJjaCBhZnRlciByZWNlaXZpbmcgYSBwYWNrZXQgY29ycmVjdGx5CisgICAgICB1aW50OF90IGJSZXBlYXROb2s6MTsgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRW5kIG9wZXJhdGlvbiBhZnRlciByZWNlaXZpbmcgYSBwYWNrZXQgd2l0aCBDUkMgZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogR28gYmFjayB0byBzeW5jIHNlYXJjaCBhZnRlciByZWNlaXZpbmcgYSBwYWNrZXQgd2l0aCBDUkMgZXJyb3IKKyAgICAgIHVpbnQ4X3QgYlVzZUNyYzoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBEbyBub3QgY2hlY2sgQ1JDPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENoZWNrIENSQworICAgICAgdWludDhfdCBiVmFyTGVuOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEZpeGVkIGxlbmd0aDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBSZWNlaXZlIGxlbmd0aCBhcyBmaXJzdCBieXRlCisgICAgICB1aW50OF90IGJDaGtBZGRyZXNzOjE7ICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWRkcmVzcyBjaGVjazxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDaGVjayBhZGRyZXNzCisgICAgICB1aW50OF90IGVuZFR5cGU6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogUGFja2V0IGlzIHJlY2VpdmVkIHRvIHRoZSBlbmQgaWYgZW5kIHRyaWdnZXIgaGFwcGVucyBhZnRlciBzeW5jIGlzIG9idGFpbmVkPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFBhY2tldCByZWNlcHRpb24gaXMgc3RvcHBlZCBpZiBlbmQgdHJpZ2dlciBoYXBwZW5zCisgICAgICB1aW50OF90IGZpbHRlck9wOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogU3RvcCByZWNlaXZlciBhbmQgcmVzdGFydCBzeW5jIHNlYXJjaCBvbiBhZGRyZXNzIG1pc21hdGNoPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFJlY2VpdmUgcGFja2V0IGFuZCBtYXJrIGl0IGFzIGlnbm9yZWQgb24gYWRkcmVzcyBtaXNtYXRjaAorICAgfSBwa3RDb25mOworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaElnbm9yZWQ6MTsgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IGRpc2NhcmQgaWdub3JlZCBwYWNrZXRzIGZyb20gUlggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaENyY0VycjoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IGRpc2NhcmQgcGFja2V0cyB3aXRoIENSQyBlcnJvciBmcm9tIFJYIHF1ZXVlCisgICAgICB1aW50OF90IDoxOworICAgICAgdWludDhfdCBiSW5jbHVkZUhkcjoxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIGhlYWRlciBvciBsZW5ndGggYnl0ZSBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVDcmM6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBDUkMgZmllbGQgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJBcHBlbmRSc3NpOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGFuIFJTU0kgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSWCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kVGltZXN0YW1wOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHRpbWVzdGFtcCB0byB0aGUgcGFja2V0IGluIHRoZSBSWCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kU3RhdHVzOjE7ICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHN0YXR1cyBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJYIHF1ZXVlCisgICB9IHJ4Q29uZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUlggY29uZmlndXJhdGlvbgorICAgdWludDMyX3Qgc3luY1dvcmQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFN5bmMgd29yZCB0byBsaXN0ZW4gZm9yCisgICB1aW50OF90IG1heFBrdExlbjsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgUGFja2V0IGxlbmd0aCBmb3IgZml4ZWQgbGVuZ3RoLCBtYXhpbXVtIHBhY2tldCBsZW5ndGggZm9yIHZhcmlhYmxlIGxlbmd0aDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBVbmxpbWl0ZWQgb3IgdW5rbm93biBsZW5ndGgKKyAgIHVpbnQ4X3QgYWRkcmVzczA7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBZGRyZXNzCisgICB1aW50OF90IGFkZHJlc3MxOyAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQWRkcmVzcyAoc2V0IGVxdWFsIHRvIDxjb2RlPmFkZHJlc3MwPC9jb2RlPiB0byBhY2NlcHQgb25seSBvbmUgYWRkcmVzcy4gSWYgMHhGRiwgYWNjZXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMHgwMCBhcyB3ZWxsKQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gZW5kVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUcmlnZ2VyIGNsYXNzaWZpZXIgZm9yIGVuZGluZyB0aGUgb3BlcmF0aW9uCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+ZW5kVHJpZ2dlcjwvY29kZT4gZm9yIGVuZGluZyB0aGUgb3BlcmF0aW9uCisgICBkYXRhUXVldWVfdCogcFF1ZXVlOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byByZWNlaXZlIHF1ZXVlCisgICB1aW50OF90KiBwT3V0cHV0OyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBvdXRwdXQgc3RydWN0dXJlCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9QUk9QX1RYX0FEVgorLy8hIEB7CisjZGVmaW5lIENNRF9QUk9QX1RYX0FEViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzODAzCisvLyEgUHJvcHJpZXRhcnkgTW9kZSBBZHZhbmNlZCBUcmFuc21pdCBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUFJPUF9UWF9BRFZfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MzgwMworICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiRnNPZmY6MTsgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEtlZXAgZnJlcXVlbmN5IHN5bnRoIG9uIGFmdGVyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVHVybiBmcmVxdWVuY3kgc3ludGggb2ZmIGFmdGVyIGNvbW1hbmQKKyAgICAgIHVpbnQ4X3QgOjI7CisgICAgICB1aW50OF90IGJVc2VDcmM6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRG8gbm90IGFwcGVuZCBDUkM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQXBwZW5kIENSQworICAgICAgdWludDhfdCBiQ3JjSW5jU3c6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6RG8gbm90IGluY2x1ZGUgc3luYyB3b3JkIGluIENSQyBjYWxjdWxhdGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBJbmNsdWRlIHN5bmMgd29yZCBpbiBDUkMgY2FsY3VsYXRpb24KKyAgICAgIHVpbnQ4X3QgYkNyY0luY0hkcjoxOyAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBEbyBub3QgaW5jbHVkZSBoZWFkZXIgaW4gQ1JDIGNhbGN1bGF0aW9uPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEluY2x1ZGUgaGVhZGVyIGluIENSQyBjYWxjdWxhdGlvbgorICAgfSBwa3RDb25mOworICAgdWludDhfdCBudW1IZHJCaXRzOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBiaXRzIGluIGhlYWRlciAoMCZuZGFzaDszMikKKyAgIHVpbnQxNl90IHBrdExlbjsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQYWNrZXQgbGVuZ3RoLiAwOiBVbmxpbWl0ZWQKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJFeHRUeFRyaWc6MTsgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogU3RhcnQgcGFja2V0IG9uIGEgZml4ZWQgdGltZSBmcm9tIHRoZSBjb21tYW5kIHN0YXJ0IHRyaWdnZXI8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogU3RhcnQgcGFja2V0IG9uIGFuIGV4dGVybmFsIHRyaWdnZXIgKGlucHV0IGV2ZW50IHRvIFJBVCkKKyAgICAgIHVpbnQ4X3QgaW5wdXRNb2RlOjI7ICAgICAgICAgICAgICAvLyE8IFxicmllZiBJbnB1dCBtb2RlIGlmIGV4dGVybmFsIHRyaWdnZXIgaXMgdXNlZCBmb3IgVFggc3RhcnQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmlzaW5nIGVkZ2U8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRmFsbGluZyBlZGdlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IEJvdGggZWRnZXM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50OF90IHNvdXJjZTo1OyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUkFUIGlucHV0IGV2ZW50IG51bWJlciB1c2VkIGZvciBjYXB0dXJlIGlmIGV4dGVybmFsIHRyaWdnZXIgaXMgdXNlZCBmb3IgVFggc3RhcnQKKyAgIH0gc3RhcnRDb25mOworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gcHJlVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUcmlnZ2VyIGZvciB0cmFuc2l0aW9uIGZyb20gcHJlYW1ibGUgdG8gc3luYyB3b3JkCisgICByYXRtcl90IHByZVRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+cHJlVHJpZ2dlcjwvY29kZT4gZm9yIHRyYW5zaXRpb24gZnJvbSBwcmVhbWJsZSB0byBzeW5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgd29yZC4gSWYgPGNvZGU+cHJlVHJpZ2dlci50cmlnZ2VyVHlwZTwvY29kZT4gaXMgc2V0IHRvICJub3ciLCBvbmUgcHJlYW1ibGUgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBjb25maWd1cmVkIGluIHRoZSBzZXR1cCB3aWxsIGJlIHNlbnQuIE90aGVyd2lzZSwgdGhlIHByZWFtYmxlIHdpbGwgYmUgcmVwZWF0ZWQgdW50aWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB0aGlzIHRyaWdnZXIgaXMgb2JzZXJ2ZWQuCisgICB1aW50MzJfdCBzeW5jV29yZDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgU3luYyB3b3JkIHRvIHRyYW5zbWl0CisgICB1aW50OF90KiBwUGt0OyAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBwYWNrZXQsIG9yIFRYIHF1ZXVlIGZvciB1bmxpbWl0ZWQgbGVuZ3RoCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9QUk9QX1JYX0FEVgorLy8hIEB7CisjZGVmaW5lIENNRF9QUk9QX1JYX0FEViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzODA0CisvLyEgUHJvcHJpZXRhcnkgTW9kZSBBZHZhbmNlZCBSZWNlaXZlIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9QUk9QX1JYX0FEVl9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgzODA0CisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJGc09mZjoxOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogS2VlcCBmcmVxdWVuY3kgc3ludGggb24gYWZ0ZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBUdXJuIGZyZXF1ZW5jeSBzeW50aCBvZmYgYWZ0ZXIgY29tbWFuZAorICAgICAgdWludDhfdCBiUmVwZWF0T2s6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEVuZCBvcGVyYXRpb24gYWZ0ZXIgcmVjZWl2aW5nIGEgcGFja2V0IGNvcnJlY3RseTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBHbyBiYWNrIHRvIHN5bmMgc2VhcmNoIGFmdGVyIHJlY2VpdmluZyBhIHBhY2tldCBjb3JyZWN0bHkKKyAgICAgIHVpbnQ4X3QgYlJlcGVhdE5vazoxOyAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBFbmQgb3BlcmF0aW9uIGFmdGVyIHJlY2VpdmluZyBhIHBhY2tldCB3aXRoIENSQyBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBHbyBiYWNrIHRvIHN5bmMgc2VhcmNoIGFmdGVyIHJlY2VpdmluZyBhIHBhY2tldCB3aXRoIENSQyBlcnJvcgorICAgICAgdWludDhfdCBiVXNlQ3JjOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IERvIG5vdCBjaGVjayBDUkM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ2hlY2sgQ1JDCisgICAgICB1aW50OF90IGJDcmNJbmNTdzoxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRG8gbm90IGluY2x1ZGUgc3luYyB3b3JkIGluIENSQyBjYWxjdWxhdGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBJbmNsdWRlIHN5bmMgd29yZCBpbiBDUkMgY2FsY3VsYXRpb24KKyAgICAgIHVpbnQ4X3QgYkNyY0luY0hkcjoxOyAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBEbyBub3QgaW5jbHVkZSBoZWFkZXIgaW4gQ1JDIGNhbGN1bGF0aW9uIDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBJbmNsdWRlIGhlYWRlciBpbiBDUkMgY2FsY3VsYXRpb24KKyAgICAgIHVpbnQ4X3QgZW5kVHlwZToxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBQYWNrZXQgaXMgcmVjZWl2ZWQgdG8gdGhlIGVuZCBpZiBlbmQgdHJpZ2dlciBoYXBwZW5zIGFmdGVyIHN5bmMgaXMgb2J0YWluZWQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogUGFja2V0IHJlY2VwdGlvbiBpcyBzdG9wcGVkIGlmIGVuZCB0cmlnZ2VyIGhhcHBlbnMKKyAgICAgIHVpbnQ4X3QgZmlsdGVyT3A6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBTdG9wIHJlY2VpdmVyIGFuZCByZXN0YXJ0IHN5bmMgc2VhcmNoIG9uIGFkZHJlc3MgbWlzbWF0Y2g8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogUmVjZWl2ZSBwYWNrZXQgYW5kIG1hcmsgaXQgYXMgaWdub3JlZCBvbiBhZGRyZXNzIG1pc21hdGNoCisgICB9IHBrdENvbmY7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiQXV0b0ZsdXNoSWdub3JlZDoxOyAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgZGlzY2FyZCBpZ25vcmVkIHBhY2tldHMgZnJvbSBSWCBxdWV1ZQorICAgICAgdWludDhfdCBiQXV0b0ZsdXNoQ3JjRXJyOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgZGlzY2FyZCBwYWNrZXRzIHdpdGggQ1JDIGVycm9yIGZyb20gUlggcXVldWUKKyAgICAgIHVpbnQ4X3QgOjE7CisgICAgICB1aW50OF90IGJJbmNsdWRlSGRyOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgaGVhZGVyIG9yIGxlbmd0aCBieXRlIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiSW5jbHVkZUNyYzoxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIENSQyBmaWVsZCBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFJzc2k6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYW4gUlNTSSBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJYIHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRUaW1lc3RhbXA6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgdGltZXN0YW1wIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJYIHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRTdGF0dXM6MTsgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgc3RhdHVzIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUlggcXVldWUKKyAgIH0gcnhDb25mOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBSWCBjb25maWd1cmF0aW9uCisgICB1aW50MzJfdCBzeW5jV29yZDA7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgU3luYyB3b3JkIHRvIGxpc3RlbiBmb3IKKyAgIHVpbnQzMl90IHN5bmNXb3JkMTsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBbHRlcm5hdGl2ZSBzeW5jIHdvcmQgaWYgbm9uLXplcm8KKyAgIHVpbnQxNl90IG1heFBrdExlbjsgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBQYWNrZXQgbGVuZ3RoIGZvciBmaXhlZCBsZW5ndGgsIG1heGltdW0gcGFja2V0IGxlbmd0aCBmb3IgdmFyaWFibGUgbGVuZ3RoPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFVubGltaXRlZCBvciB1bmtub3duIGxlbmd0aAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQxNl90IG51bUhkckJpdHM6NjsgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgYml0cyBpbiBoZWFkZXIgKDAmbmRhc2g7MzIpCisgICAgICB1aW50MTZfdCBsZW5Qb3M6NTsgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9zaXRpb24gb2YgbGVuZ3RoIGZpZWxkIGluIGhlYWRlciAoMCZuZGFzaDszMSkKKyAgICAgIHVpbnQxNl90IG51bUxlbkJpdHM6NTsgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgYml0cyBpbiBsZW5ndGggZmllbGQgKDAmbmRhc2g7MTYpCisgICB9IGhkckNvbmY7CisgICBzdHJ1Y3QgeworICAgICAgdWludDE2X3QgYWRkclR5cGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEFkZHJlc3MgYWZ0ZXIgaGVhZGVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFkZHJlc3MgaW4gaGVhZGVyCisgICAgICB1aW50MTZfdCBhZGRyU2l6ZTo1OyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSWYgPGNvZGU+YWRkclR5cGU8L2NvZGU+ID0gMDogQWRkcmVzcyBzaXplIGluIGJ5dGVzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElmIDxjb2RlPmFkZHJUeXBlPC9jb2RlPiA9IDE6IEFkZHJlc3Mgc2l6ZSBpbiBiaXRzCisgICAgICB1aW50MTZfdCBhZGRyUG9zOjU7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSWYgPGNvZGU+YWRkclR5cGU8L2NvZGU+ID0gMTogQml0IHBvc2l0aW9uIG9mIGFkZHJlc3MgaW4gaGVhZGVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElmIDxjb2RlPmFkZHJUeXBlPC9jb2RlPiA9IDA6IE5vbi16ZXJvIHRvIGV4dGVuZCBhZGRyZXNzIHdpdGggc3luYyB3b3JkIGlkZW50aWZpZXIKKyAgICAgIHVpbnQxNl90IG51bUFkZHI6NTsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgYWRkcmVzc2VzIGluIGFkZHJlc3MgbGlzdAorICAgfSBhZGRyQ29uZjsKKyAgIGludDhfdCBsZW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBTaWduZWQgdmFsdWUgdG8gYWRkIHRvIGxlbmd0aCBmaWVsZAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gZW5kVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUcmlnZ2VyIGNsYXNzaWZpZXIgZm9yIGVuZGluZyB0aGUgb3BlcmF0aW9uCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+ZW5kVHJpZ2dlcjwvY29kZT4gZm9yIGVuZGluZyB0aGUgb3BlcmF0aW9uCisgICB1aW50OF90KiBwQWRkcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBhZGRyZXNzIGxpc3QKKyAgIGRhdGFRdWV1ZV90KiBwUXVldWU7ICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHJlY2VpdmUgcXVldWUKKyAgIHVpbnQ4X3QqIHBPdXRwdXQ7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIG91dHB1dCBzdHJ1Y3R1cmUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1BST1BfUkFESU9fU0VUVVAKKy8vISBAeworI2RlZmluZSBDTURfUFJPUF9SQURJT19TRVRVUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzgwNgorLy8hIFByb3ByaWV0YXJ5IE1vZGUgUmFkaW8gU2V0dXAgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BST1BfUkFESU9fU0VUVVBfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MzgwNgorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICBzdHJ1Y3QgeworICAgICAgdWludDE2X3QgbW9kVHlwZTozOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEZTSzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBHRlNLPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50MTZfdCBkZXZpYXRpb246MTM7ICAgICAgICAgICAgLy8hPCAgICAgICAgRGV2aWF0aW9uICgyNTAgSHogc3RlcHMpCisgICB9IG1vZHVsYXRpb247CisgICBzdHJ1Y3QgeworICAgICAgdWludDMyX3QgcHJlU2NhbGU6NDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFByZXNjYWxlciB2YWx1ZQorICAgICAgdWludDMyX3QgOjQ7CisgICAgICB1aW50MzJfdCByYXRlV29yZDoyMTsgICAgICAgICAgICAgLy8hPCAgICAgICAgUmF0ZSB3b3JkCisgICB9IHN5bWJvbFJhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgU3ltYm9sIHJhdGUgc2V0dGluZworICAgdWludDhfdCByeEJ3OyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFJlY2VpdmVyIGJhbmR3aWR0aAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgblByZWFtQnl0ZXM6NjsgICAgICAgICAgICAvLyE8IFxicmllZiAwJm5kYXNoOzMwOiBOdW1iZXIgb2YgcHJlYW1ibGUgYnl0ZXM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzE6IDQgcHJlYW1ibGUgYml0cworICAgICAgdWludDhfdCBwcmVhbU1vZGU6MjsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFNlbmQgMCBhcyB0aGUgZmlyc3QgcHJlYW1ibGUgYml0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFNlbmQgMSBhcyB0aGUgZmlyc3QgcHJlYW1ibGUgYml0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFNlbmQgc2FtZSBmaXJzdCBiaXQgaW4gcHJlYW1ibGUgYW5kIHN5bmMgd29yZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiBTZW5kIGRpZmZlcmVudCBmaXJzdCBiaXQgaW4gcHJlYW1ibGUgYW5kIHN5bmMgd29yZAorICAgfSBwcmVhbUNvbmY7CisgICBzdHJ1Y3QgeworICAgICAgdWludDE2X3QgblN3Qml0czo2OyAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBzeW5jIHdvcmQgYml0cyAodXAgdG8gMzIpCisgICAgICB1aW50MTZfdCBiQml0UmV2ZXJzYWw6MTsgICAgICAgICAgLy8hPCBcYnJpZWYgMDogVXNlIHBvc2l0aXZlIGRldmlhdGlvbiBmb3IgMTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBVc2UgcG9zaXRpdmUgZGV2aWF0aW9uIGZvciAwCisgICAgICB1aW50MTZfdCBiTXNiRmlyc3Q6MTsgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTGVhc3Qgc2lnbmlmaWNhbnQgYml0IHRyYW5zbWl0dGVkIGZpcnN0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE1vc3Qgc2lnbmlmaWNhbnQgYml0IHRyYW5zbWl0dGVkIGZpcnN0CisgICAgICB1aW50MTZfdCBmZWNNb2RlOjQ7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgU2VsZWN0IGNvZGluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBVbmNvZGVkIGJpbmFyeSBtb2R1bGF0aW9uPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50MTZfdCBiT3V0ZXJDb2RlOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50MTZfdCB3aGl0ZW5Nb2RlOjI7ICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gd2hpdGVuaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENDMTEwMS9DQzI1MDAgY29tcGF0aWJsZSB3aGl0ZW5pbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogUE45IHdoaXRlbmluZyB3aXRob3V0IGJ5dGUgcmV2ZXJzYWw8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50MTZfdCBiQWdjRGlzYWJsZToxOyAgICAgICAgICAgLy8hPCAgICAgICAgPGk+UmVzZXJ2ZWQ8L2k+CisgICB9IGZvcm1hdENvbmY7CisgICBzdHJ1Y3QgeworICAgICAgdWludDE2X3QgZnJvbnRFbmRNb2RlOjM7ICAgICAgICAgIC8vITwgXGJyaWVmIDB4MDA6IERpZmZlcmVudGlhbCBtb2RlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDB4MDE6IFNpbmdsZS1lbmRlZCBtb2RlIFJGUDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDAyOiBTaW5nbGUtZW5kZWQgbW9kZSBSRk48YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMHgwNSBTaW5nbGUtZW5kZWQgbW9kZSBSRlAgd2l0aCBleHRlcm5hbCBmcm9udGVuZCBjb250cm9sIG9uIFJGIHBpbnMgKFJGTiBhbmQgUlhUWCk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMHgwNiBTaW5nbGUtZW5kZWQgbW9kZSBSRk4gd2l0aCBleHRlcm5hbCBmcm9udGVuZCBjb250cm9sIG9uIFJGIHBpbnMgKFJGUCBhbmQgUlhUWCk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgICAgIHVpbnQxNl90IGJpYXNNb2RlOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBJbnRlcm5hbCBiaWFzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEV4dGVybmFsIGJpYXMKKyAgICAgIHVpbnQxNl90IGFuYWxvZ0NmZ01vZGU6NjsgICAgICAgICAvLyE8IFxicmllZiAweDAwOiBXcml0ZSBhbmFsb2cgY29uZmlndXJhdGlvbi48YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUmVxdWlyZWQgZmlyc3QgdGltZSBhZnRlciBib290IGFuZCB3aGVuIGNoYW5naW5nIGZyZXF1ZW5jeSBiYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgb3IgZnJvbnQtZW5kIGNvbmZpZ3VyYXRpb248YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMHgyRDogS2VlcCBhbmFsb2cgY29uZmlndXJhdGlvbi48YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTWF5IGJlIHVzZWQgYWZ0ZXIgc3RhbmRieSBvciB3aGVuIGNoYW5naW5nIG1vZGUgd2l0aCB0aGUgc2FtZSBmcmVxdWVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBiYW5kIGFuZCBmcm9udC1lbmQgY29uZmlndXJhdGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgICAgdWludDE2X3QgYk5vRnNQb3dlclVwOjE7ICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFBvd2VyIHVwIGZyZXF1ZW5jeSBzeW50aDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBEbyBub3QgcG93ZXIgdXAgZnJlcXVlbmN5IHN5bnRoCisgICB9IGNvbmZpZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZmlndXJhdGlvbiBvcHRpb25zCisgICB1aW50MTZfdCB0eFBvd2VyOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJhbnNtaXQgcG93ZXIKKyAgIHVpbnQzMl90KiBwUmVnT3ZlcnJpZGU7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGEgbGlzdCBvZiBoYXJkd2FyZSBhbmQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgdG8gb3ZlcnJpZGUuIElmIE5VTEwsIG5vIG92ZXJyaWRlIGlzIHVzZWQuCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9QUk9QX1NFVF9MRU4KKy8vISBAeworI2RlZmluZSBDTURfUFJPUF9TRVRfTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzQwMQorLy8hIFNldCBQYWNrZXQgTGVuZ3RoIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9QUk9QX1NFVF9MRU5fcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MzQwMQorICAgdWludDE2X3QgcnhMZW47ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBheWxvYWQgbGVuZ3RoIHRvIHVzZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfUFJPUF9SRVNUQVJUX1JYCisvLyEgQHsKKyNkZWZpbmUgQ01EX1BST1BfUkVTVEFSVF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM0MDIKKy8vISBSZXN0YXJ0IFBhY2tldCAgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BST1BfUkVTVEFSVF9SWF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgzNDAyCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIHByb3BSeE91dHB1dAorLy8hIEB7CisvLyEgT3V0cHV0IHN0cnVjdHVyZSBmb3IgUlggb3BlcmF0aW9ucworCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19wcm9wUnhPdXRwdXRfcyB7CisgICB1aW50MTZfdCBuUnhPazsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBwYXlsb2FkLCBDUkMgT0sgYW5kIG5vdCBpZ25vcmVkCisgICB1aW50MTZfdCBuUnhOb2s7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IKKyAgIHVpbnQ4X3QgblJ4SWdub3JlZDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCB3aXRoIENSQyBPSyBhbmQgaWdub3JlZCBkdWUgdG8gYWRkcmVzcyBtaXNtYXRjaAorICAgdWludDhfdCBuUnhTdG9wcGVkOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIG5vdCByZWNlaXZlZCBkdWUgdG8gaWxsZWdhbCBsZW5ndGggb3IgYWRkcmVzcyBtaXNtYXRjaCB3aXRoIHBrdENvbmYuZmlsdGVyT3AgPSAxCisgICB1aW50OF90IG5SeEJ1ZkZ1bGw7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYW5kIGRpc2NhcmRlZCBkdWUgdG8gbGFjayBvZiBidWZmZXIgc3BhY2UKKyAgIGludDhfdCBsYXN0UnNzaTsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBSU1NJIG9mIGxhc3QgcmVjZWl2ZWQgcGFja2V0CisgICByYXRtcl90IHRpbWVTdGFtcDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGltZSBzdGFtcCBvZiBsYXN0IHJlY2VpdmVkIHBhY2tldAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBwcm9wUnhTdGF0dXMKKy8vISBAeworLy8hIFJlY2VpdmUgc3RhdHVzIGJ5dGUgdGhhdCBtYXkgYmUgYXBwZW5kZWQgdG8gbWVzc2FnZSBpbiByZWNlaXZlIGJ1ZmZlcgorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19wcm9wUnhTdGF0dXNfcyB7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBhZGRyZXNzSW5kOjU7ICAgICAgICAgICAgIC8vITwgICAgICAgIEluZGV4IG9mIGFkZHJlc3MgZm91bmQgKDAgaWYgbm90IGFwcGxpY2FibGUpCisgICAgICB1aW50OF90IHN5bmNXb3JkSWQ6MTsgICAgICAgICAgICAgLy8hPCAgICAgICAgMCBmb3IgcHJpbWFyeSBzeW5jIHdvcmQsIDEgZm9yIGFsdGVybmF0ZSBzeW5jIHdvcmQKKyAgICAgIHVpbnQ4X3QgcmVzdWx0OjI7ICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBQYWNrZXQgcmVjZWl2ZWQgY29ycmVjdGx5LCBub3QgaWdub3JlZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBQYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogUGFja2V0IHJlY2VpdmVkIGNvcnJlY3RseSwgYnV0IGNhbiBiZSBpZ25vcmVkPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IFBhY2tldCByZWNlcHRpb24gd2FzIGFib3J0ZWQKKyAgIH0gc3RhdHVzOworfTsKKworLy8hIEB9CisKKy8vISBAfQorLy8hIEB9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX3Byb3BfbWFpbGJveC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfcHJvcF9tYWlsYm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5MDRhMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX3Byb3BfbWFpbGJveC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICByZl9wcm9wX21haWxib3guaAorKiAgUmV2aXNlZDogICAgICAgICQgJAorKiAgUmV2aXNpb246ICAgICAgICQgJAorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluaXRpb25zIGZvciBwcm9icmlldGFyeSBtb2RlIHJhZGlvIGludGVyZmFjZQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUFJPUF9NQUlMQk9YX0gKKyNkZWZpbmUgX1BST1BfTUFJTEJPWF9ICisKKy8vLyBcbmFtZSBSYWRpbyBvcGVyYXRpb24gc3RhdHVzCisvLy9AeworLy8vIFxuYW1lIE9wZXJhdGlvbiBmaW5pc2hlZCBub3JtYWxseQorLy8vQHsKKyNkZWZpbmUgUFJPUF9ET05FX09LICAgICAgICAgICAgMHgzNDAwICAvLy88IE9wZXJhdGlvbiBlbmRlZCBub3JtYWxseQorI2RlZmluZSBQUk9QX0RPTkVfUlhUSU1FT1VUICAgICAweDM0MDEgIC8vLzwgT3BlcmF0aW9uIHN0b3BwZWQgYWZ0ZXIgZW5kIHRyaWdnZXIgd2hpbGUgd2FpdGluZyBmb3Igc3luYworI2RlZmluZSBQUk9QX0RPTkVfQlJFQUsgICAgICAgICAweDM0MDIgIC8vLzwgUnggc3RvcHBlZCBkdWUgdG8gdGltZW91dCBpbiB0aGUgbWlkZGxlIG9mIGEgcGFja2V0CisjZGVmaW5lIFBST1BfRE9ORV9FTkRFRCAgICAgICAgIDB4MzQwMyAgLy8vPCBPcGVyYXRpb24gc3RvcHBlZCBhZnRlciBlbmQgdHJpZ2dlciBkdXJpbmcgcmVjZXB0aW9uCisjZGVmaW5lIFBST1BfRE9ORV9TVE9QUEVEICAgICAgIDB4MzQwNCAgLy8vPCBPcGVyYXRpb24gc3RvcHBlZCBhZnRlciBzdG9wIGNvbW1hbmQKKyNkZWZpbmUgUFJPUF9ET05FX0FCT1JUICAgICAgICAgMHgzNDA1ICAvLy88IE9wZXJhdGlvbiBhYm9ydGVkIGJ5IGFib3J0IGNvbW1hbmQKKyNkZWZpbmUgUFJPUF9ET05FX1JYRVJSICAgICAgICAgMHgzNDA2ICAvLy88IE9wZXJhdGlvbiBlbmRlZCBhZnRlciByZWNlaXZpbmcgcGFja2V0IHdpdGggQ1JDIGVycm9yCisjZGVmaW5lIFBST1BfRE9ORV9JRExFICAgICAgICAgIDB4MzQwNyAgLy8vPCBDYXJyaWVyIHNlbnNlIG9wZXJhdGlvbiBlbmRlZCBiZWNhdXNlIG9mIGlkbGUgY2hhbm5lbAorI2RlZmluZSBQUk9QX0RPTkVfQlVTWSAgICAgICAgICAweDM0MDggIC8vLzwgQ2FycmllciBzZW5zZSBvcGVyYXRpb24gZW5kZWQgYmVjYXVzZSBvZiBidXN5IGNoYW5uZWwKKyNkZWZpbmUgUFJPUF9ET05FX0lETEVUSU1FT1VUICAgMHgzNDA5ICAvLy88IENhcnJpZXIgc2Vuc2Ugb3BlcmF0aW9uIGVuZGVkIGJlY2F1c2Ugb2YgdGltZW91dCB3aXRoIGNzQ29uZi50aW1lb3V0UmVzID0gMQorI2RlZmluZSBQUk9QX0RPTkVfQlVTWVRJTUVPVVQgICAweDM0MEEgIC8vLzwgQ2FycmllciBzZW5zZSBvcGVyYXRpb24gZW5kZWQgYmVjYXVzZSBvZiB0aW1lb3V0IHdpdGggY3NDb25mLnRpbWVvdXRSZXMgPSAwCisKKy8vL0B9CisvLy8gXG5hbWUgT3BlcmF0aW9uIGZpbmlzaGVkIHdpdGggZXJyb3IKKy8vL0B7CisjZGVmaW5lIFBST1BfRVJST1JfUEFSICAgICAgICAgIDB4MzgwMCAgLy8vPCBJbGxlZ2FsIHBhcmFtZXRlcgorI2RlZmluZSBQUk9QX0VSUk9SX1JYQlVGICAgICAgICAweDM4MDEgIC8vLzwgTm8gYXZhaWxhYmxlIFJ4IGJ1ZmZlciBhdCB0aGUgc3RhcnQgb2YgYSBwYWNrZXQKKyNkZWZpbmUgUFJPUF9FUlJPUl9SWEZVTEwgICAgICAgMHgzODAyICAvLy88IE91dCBvZiBSeCBidWZmZXIgZHVyaW5nIHJlY2VwdGlvbiBpbiBhIHBhcnRpYWwgcmVhZCBidWZmZXIKKyNkZWZpbmUgUFJPUF9FUlJPUl9OT19TRVRVUCAgICAgMHgzODAzICAvLy88IFJhZGlvIHdhcyBub3Qgc2V0IHVwIGluIHByb3ByaWV0YXJ5IG1vZGUKKyNkZWZpbmUgUFJPUF9FUlJPUl9OT19GUyAgICAgICAgMHgzODA0ICAvLy88IFN5bnRoIHdhcyBub3QgcHJvZ3JhbW1lZCB3aGVuIHJ1bm5pbmcgUnggb3IgVHgKKyNkZWZpbmUgUFJPUF9FUlJPUl9SWE9WRiAgICAgICAgMHgzODA1ICAvLy88IFJ4IG92ZXJmbG93IG9ic2VydmVkIGR1cmluZyBvcGVyYXRpb24KKyNkZWZpbmUgUFJPUF9FUlJPUl9UWFVORiAgICAgICAgMHgzODA2ICAvLy88IFR4IHVuZGVyZmxvdyBvYnNlcnZlZCBkdXJpbmcgb3BlcmF0aW9uCisvLy9AfQorLy8vQH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZmMuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZTM5MTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZmMuYwpAQCAtMCwwICsxLDI1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJmYy5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0yNyAwODoyNzo0NiArMDIwMCAoRnJpLCAyNyBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjUxNworKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIFJGIENvcmUuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL3JmYy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgUkZDQ3BlSW50R2V0QW5kQ2xlYXIKKyAgICAjZGVmaW5lIFJGQ0NwZUludEdldEFuZENsZWFyICAgICAgICAgICAgTk9ST01fUkZDQ3BlSW50R2V0QW5kQ2xlYXIKKyAgICAjdW5kZWYgIFJGQ0Rvb3JiZWxsU2VuZFRvCisgICAgI2RlZmluZSBSRkNEb29yYmVsbFNlbmRUbyAgICAgICAgICAgICAgIE5PUk9NX1JGQ0Rvb3JiZWxsU2VuZFRvCisgICAgI3VuZGVmICBSRkNTeW50aFBvd2VyRG93bgorICAgICNkZWZpbmUgUkZDU3ludGhQb3dlckRvd24gICAgICAgICAgICAgICBOT1JPTV9SRkNTeW50aFBvd2VyRG93bgorICAgICN1bmRlZiAgUkZDUmZUcmltUmVhZAorICAgICNkZWZpbmUgUkZDUmZUcmltUmVhZCAgICAgICAgICAgICAgICAgICBOT1JPTV9SRkNSZlRyaW1SZWFkCisgICAgI3VuZGVmICBSRkNSZlRyaW1TZXQKKyAgICAjZGVmaW5lIFJGQ1JmVHJpbVNldCAgICAgICAgICAgICAgICAgICAgTk9ST01fUkZDUmZUcmltU2V0CisgICAgI3VuZGVmICBSRkNSVHJpbQorICAgICNkZWZpbmUgUkZDUlRyaW0gICAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9SRkNSVHJpbQorICAgICN1bmRlZiAgUkZDQ1BFUGF0Y2hSZXNldAorICAgICNkZWZpbmUgUkZDQ1BFUGF0Y2hSZXNldCAgICAgICAgICAgICAgICBOT1JPTV9SRkNDUEVQYXRjaFJlc2V0CisgICAgI3VuZGVmICBSRkNBZGkzVmNvTGRvVm9sdGFnZU1vZGUKKyAgICAjZGVmaW5lIFJGQ0FkaTNWY29MZG9Wb2x0YWdlTW9kZSAgICAgICAgTk9ST01fUkZDQWRpM1Zjb0xkb1ZvbHRhZ2VNb2RlCisjZW5kaWYKKworI2RlZmluZSBSRkNfUkVTRVJWRUQwICAgICAgICAgICAgICAgMHg0MDA0NDEwOAorI2RlZmluZSBSRkNfUkVTRVJWRUQxICAgICAgICAgICAgICAgMHg0MDA0NDExNAorI2RlZmluZSBSRkNfUkVTRVJWRUQyICAgICAgICAgICAgICAgMHg0MDA0NDEwQworI2RlZmluZSBSRkNfUkVTRVJWRUQzICAgICAgICAgICAgICAgMHg0MDA0NDEwMAorCisvLyBQb3NpdGlvbiBvZiBkaXZpZGVyIHZhbHVlCisjZGVmaW5lIENPTkZJR19NSVNDX0FEQ19ESVZJREVSICAgICAgICAgICAgIDI3CisjZGVmaW5lIENPTkZJR19NSVNDX0FEQ19ESVZJREVSX0JNICAweEY4MDAwMDAwVQorCisjZGVmaW5lIF9DUEVSQU1fU1RBUlQgMHgyMTAwMDAwMAorI2RlZmluZSBfUEFSU0VSX1BBVENIX1RBQl9PRkZTRVQgMHgwMzM0CisjZGVmaW5lIF9QQVRDSF9UQUJfT0ZGU0VUIDB4MDMzQworI2RlZmluZSBfSVJRUEFUQ0hfT0ZGU0VUIDB4MDNBQworI2RlZmluZSBfUEFUQ0hfVkVDX09GRlNFVCAweDA0MDQKKworc3RhdGljIGNvbnN0IHVpbnQxNl90IHJmY19kZWZhdWx0SXJxQWRkcltdID0KK3sKKyAgIDB4Mzk4YiwKKyAgIDB4MzgwNSwKKyAgIDB4MzgyNSwKKyAgIDB4MzgzOSwKKyAgIDB4MGFjZiwKKyAgIDB4Mzg1NywKKyAgIDB4MzhkNywKKyAgIDB4MDlkZCwKKyAgIDB4NTgxOSwKKyAgIDB4MGFiMywKKyAgIDB4MzhmNywKK307CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBHZXQgYW5kIGNsZWFyIENQRSBpbnRlcnJ1cHQgZmxhZ3MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorUkZDQ3BlSW50R2V0QW5kQ2xlYXIodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMySWZnID0gSFdSRUcoUkZDX0RCRUxMX0JBU0UrUkZDX0RCRUxMX09fUkZDUEVJRkcpOworCisgICAgZG8geworICAgICAgICBIV1JFRyhSRkNfREJFTExfQkFTRStSRkNfREJFTExfT19SRkNQRUlGRykgPSB+dWkzMklmZzsKKyAgICB9IHdoaWxlIChIV1JFRyhSRkNfREJFTExfQkFTRStSRkNfREJFTExfT19SRkNQRUlGRykgJiB1aTMySWZnKTsKKworICAgIHJldHVybiAodWkzMklmZyk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFNlbmQgY29tbWFuZCB0byBkb29yYmVsbCBhbmQgd2FpdCBmb3IgYWNrCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1JGQ0Rvb3JiZWxsU2VuZFRvKHVpbnQzMl90IHBPcCkKK3sKKyAgICB3aGlsZShIV1JFRyhSRkNfREJFTExfQkFTRSArIFJGQ19EQkVMTF9PX0NNRFIpICE9IDApOworCisgICAgUkZDQWNrSW50Q2xlYXIoKTsKKworICAgIEhXUkVHKFJGQ19EQkVMTF9CQVNFK1JGQ19EQkVMTF9PX0NNRFIpID0gcE9wOworCisgICAgd2hpbGUoIUhXUkVHKFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fUkZBQ0tJRkcpKTsKKyAgICBSRkNBY2tJbnRDbGVhcigpOworCisgICAgcmV0dXJuKEhXUkVHKFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fQ01EU1RBKSk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFR1cm4gb2ZmIHN5bnRoLCBOT1RFOiBSYWRpbyB3aWxsIG5vIGxvbmdlciByZXNwb25kIHRvIGNvbW1hbmRzIQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1JGQ1N5bnRoUG93ZXJEb3duKCkKK3sKKyAgLy8gRGlzYWJsZSBDUEUgY2xvY2ssIGVuYWJsZSBGU0NBIGNsb2NrLiBOT1RFOiBSYWRpbyB3aWxsIG5vIGxvbmdlciByZXNwb25kIHRvIGNvbW1hbmRzIQorICBIV1JFRyhSRkNfUFdSX05PTkJVRl9CQVNFICsgUkZDX1BXUl9PX1BXTUNMS0VOKSA9IChIV1JFRyhSRkNfUFdSX05PTkJVRl9CQVNFICsgUkZDX1BXUl9PX1BXTUNMS0VOKSAmIH5SRkNfUFdSX1BXTUNMS0VOX0NQRV9NKSB8IFJGQ19QV1JfUFdNQ0xLRU5fRlNDQV9NOworCisgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFJGQ19SRVNFUlZFRDApKSkgPSAzOworICAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShSRkNfUkVTRVJWRUQxKSkpID0gMHgxMDMwOworICAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShSRkNfUkVTRVJWRUQyKSkpID0gMTsKKyAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoUkZDX1JFU0VSVkVEMSkpKSA9IDB4NTA7CisgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFJGQ19SRVNFUlZFRDIpKSkgPSAxOworICAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShSRkNfUkVTRVJWRUQxKSkpID0gMHg2NTA7CisgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFJGQ19SRVNFUlZFRDIpKSkgPSAxOworICAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShSRkNfUkVTRVJWRUQzKSkpID0gMTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVhZCBSRiBUcmltIGZyb20gZmxhc2ggdXNpbmcgdGhlIENNMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQgUkZDUmZUcmltUmVhZChyZmNfcmFkaW9PcF90ICpwT3BTZXR1cCwgcmZUcmltX3QqIHBSZlRyaW0pCit7CisgICAgKHZvaWQpcE9wU2V0dXA7CisgICAgLy8gUmVhZCB0cmltIGZyb20gRkNGRzEKKyAgICBwUmZUcmltLT5jb25maWdJZkFkYyA9IEhXUkVHKEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX0NPTkZJR19JRl9BREMpOworICAgIHBSZlRyaW0tPmNvbmZpZ1JmRnJvbnRlbmQgPSBIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19DT05GSUdfUkZfRlJPTlRFTkQpOworICAgIHBSZlRyaW0tPmNvbmZpZ1N5bnRoID0gSFdSRUcoRkNGRzFfQkFTRSArIEZDRkcxX09fQ09ORklHX1NZTlRIKTsKKyAgICAvLyBNYWtlIHN1cmUgY29uZmlnTWlzY0FkYyBpcyBub3QgMCBieSBzZXR0aW5nIGFuIHVudXNlZCBiaXQgdG8gMQorICAgIHBSZlRyaW0tPmNvbmZpZ01pc2NBZGMgPSAoSFdSRUcoRkNGRzFfQkFTRSArIEZDRkcxX09fQ09ORklHX01JU0NfQURDKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgfkNPTkZJR19NSVNDX0FEQ19ESVZJREVSX0JNKSB8ICgyVSA8PCBDT05GSUdfTUlTQ19BRENfRElWSURFUik7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENoZWNrIE92ZXJyaWRlIFJUcmltIHZzIEZDRkcgUlRyaW0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkIFJGQ1JUcmltKHJmY19yYWRpb09wX3QgKnBPcFNldHVwKQoreworICAgICh2b2lkKXBPcFNldHVwOworICAgIC8vIEZ1bmN0aW9uIGlzIGxlZnQgYmxhbmsgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDQzEzeHguCit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFdyaXRlIHByZWxvYWRlZCBSRiB0cmltIHZhbHVlcyB0byBDTTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkIFJGQ1JmVHJpbVNldChyZlRyaW1fdCogcFJmVHJpbSkKK3sKKyAgICBtZW1jcHkoKHZvaWQqKSZIV1JFRygweDIxMDAwMDE4KSwgKHZvaWQqKXBSZlRyaW0sIHNpemVvZihyZlRyaW1fdCkpOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZXNldCBwcmV2aW91c2x5IHBhdGNoZWQgQ1BFIFJBTSB0byBhIHN0YXRlIHdoZXJlIGl0IGNhbiBiZSBwYXRjaGVkIGFnYWluCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZCBSRkNDUEVQYXRjaFJlc2V0KHZvaWQpCit7CisgICAgdWludDhfdCAqcFBhdGNoVGFiID0gKHVpbnQ4X3QgKikgKF9DUEVSQU1fU1RBUlQgKyBfUEFSU0VSX1BBVENIX1RBQl9PRkZTRVQpOworICAgIHVpbnQzMl90ICpwSXJxUGF0Y2ggPSAodWludDMyX3QgKikgKF9DUEVSQU1fU1RBUlQgKyBfSVJRUEFUQ0hfT0ZGU0VUKTsKKworICAgIG1lbXNldChwUGF0Y2hUYWIsIDB4RkYsIF9JUlFQQVRDSF9PRkZTRVQgLSBfUEFSU0VSX1BBVENIX1RBQl9PRkZTRVQpOworCisJdW5zaWduZWQgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihyZmNfZGVmYXVsdElycUFkZHIpL3NpemVvZihyZmNfZGVmYXVsdElycUFkZHJbMF0pOyBpKyspCisgICAgeworICAgICAgICBwSXJxUGF0Y2hbaSAqIDIgKyAxXSA9IHJmY19kZWZhdWx0SXJxQWRkcltpXTsKKyAgICB9Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEZ1bmN0aW9uIHRvIHNldCBWQ09MRE8gcmVmZXJlbmNlIHRvIHZvbHRhZ2UgbW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQgUkZDQWRpM1Zjb0xkb1ZvbHRhZ2VNb2RlKGJvb2wgYkVuYWJsZSkKK3sKKyAgICAodm9pZCliRW5hYmxlOworICAgIC8vIEZ1bmN0aW9uIGlzIGxlZnQgYmxhbmsgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDQzEzeHguCit9CisKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgUkZDQ3BlSW50R2V0QW5kQ2xlYXIKKyAgICAjZGVmaW5lIFJGQ0NwZUludEdldEFuZENsZWFyICAgICAgICAgICAgTk9ST01fUkZDQ3BlSW50R2V0QW5kQ2xlYXIKKyAgICAjdW5kZWYgIFJGQ0Rvb3JiZWxsU2VuZFRvCisgICAgI2RlZmluZSBSRkNEb29yYmVsbFNlbmRUbyAgICAgICAgICAgICAgIE5PUk9NX1JGQ0Rvb3JiZWxsU2VuZFRvCisgICAgI3VuZGVmICBSRkNTeW50aFBvd2VyRG93bgorICAgICNkZWZpbmUgUkZDU3ludGhQb3dlckRvd24gICAgICAgICAgICAgICBOT1JPTV9SRkNTeW50aFBvd2VyRG93bgorICAgICN1bmRlZiAgUkZDUmZUcmltUmVhZAorICAgICNkZWZpbmUgUkZDUmZUcmltUmVhZCAgICAgICAgICAgICAgICAgICBOT1JPTV9SRkNSZlRyaW1SZWFkCisgICAgI3VuZGVmICBSRkNSZlRyaW1TZXQKKyAgICAjZGVmaW5lIFJGQ1JmVHJpbVNldCAgICAgICAgICAgICAgICAgICAgTk9ST01fUkZDUmZUcmltU2V0CisgICAgI3VuZGVmICBSRkNSVHJpbQorICAgICNkZWZpbmUgUkZDUlRyaW0gICAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9SRkNSVHJpbQorICAgICN1bmRlZiAgUkZDQ1BFUGF0Y2hSZXNldAorICAgICNkZWZpbmUgUkZDQ1BFUGF0Y2hSZXNldCAgICAgICAgICAgICAgICBOT1JPTV9SRkNDUEVQYXRjaFJlc2V0CisgICAgI3VuZGVmICBSRkNBZGkzVmNvTGRvVm9sdGFnZU1vZGUKKyAgICAjZGVmaW5lIFJGQ0FkaTNWY29MZG9Wb2x0YWdlTW9kZSAgICAgICAgTk9ST01fUkZDQWRpM1Zjb0xkb1ZvbHRhZ2VNb2RlCisjZW5kaWYKKworLy8gU2VlIHJmYy5oIGZvciBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZjLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmUyNzQzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZjLmgKQEAgLTAsMCArMSw0NDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICByZmMuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMDIgMTQ6NDQ6MjMgKzAyMDAgKE1vbiwgMDIgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDYyMzEKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgUkYgQ29yZS4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcmZjX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fUkZDX0hfXworI2RlZmluZSBfX1JGQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfcmZjX3B3ci5oPgorI2luY2x1ZGUgPGluYy9od19yZmNfZGJlbGwuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZfY29tbW9uX2NtZC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9wcm9wX2NtZC5oPgorI2luY2x1ZGUgPGluYy9od19mY2ZnMS5oPgorI2luY2x1ZGUgPGluYy9od19hZGlfM19yZWZzeXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYWRpLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIHVpbnQzMl90IGNvbmZpZ0lmQWRjOworICAgdWludDMyX3QgY29uZmlnUmZGcm9udGVuZDsKKyAgIHVpbnQzMl90IGNvbmZpZ1N5bnRoOworICAgdWludDMyX3QgY29uZmlnTWlzY0FkYzsKK30gcmZUcmltX3Q7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIFJGQ0NwZUludEdldEFuZENsZWFyICAgICAgICAgICAgTk9ST01fUkZDQ3BlSW50R2V0QW5kQ2xlYXIKKyAgICAjZGVmaW5lIFJGQ0Rvb3JiZWxsU2VuZFRvICAgICAgICAgICAgICAgTk9ST01fUkZDRG9vcmJlbGxTZW5kVG8KKyAgICAjZGVmaW5lIFJGQ1N5bnRoUG93ZXJEb3duICAgICAgICAgICAgICAgTk9ST01fUkZDU3ludGhQb3dlckRvd24KKyAgICAjZGVmaW5lIFJGQ1JmVHJpbVJlYWQgICAgICAgICAgICAgICAgICAgTk9ST01fUkZDUmZUcmltUmVhZAorICAgICNkZWZpbmUgUkZDUmZUcmltU2V0ICAgICAgICAgICAgICAgICAgICBOT1JPTV9SRkNSZlRyaW1TZXQKKyAgICAjZGVmaW5lIFJGQ1JUcmltICAgICAgICAgICAgICAgICAgICAgICAgTk9ST01fUkZDUlRyaW0KKyAgICAjZGVmaW5lIFJGQ0NQRVBhdGNoUmVzZXQgICAgICAgICAgICAgICAgTk9ST01fUkZDQ1BFUGF0Y2hSZXNldAorICAgICNkZWZpbmUgUkZDQWRpM1Zjb0xkb1ZvbHRhZ2VNb2RlICAgICAgICBOT1JPTV9SRkNBZGkzVmNvTGRvVm9sdGFnZU1vZGUKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIHRoZSBSRiBjb3JlIGNsb2Nrcy4KKy8vIQorLy8hIEFzIHNvb24gYXMgdGhlIFJGIGNvcmUgaXMgc3RhcnRlZCBpdCB3aWxsIGhhbmRsZSBjbG9jayBjb250cm9sCisvLyEgYXV0b25vbW91c2x5LiBObyBjaGVjayBzaG91bGQgYmUgcGVyZm9ybWVkIHRvIGNoZWNrIHRoZSBjbG9ja3MuIEluc3RlYWQKKy8vISB0aGUgcmFkaW8gY2FuIGJlIHBpbmcnZWQgdGhyb3VnaCB0aGUgY29tbWFuZCBpbnRlcmZhY2UuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUkZDQ2xvY2tFbmFibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEVuYWJsZSBhbGwgY2xvY2tzCisgICAgLy8KKyAgICBIV1JFRyhSRkNfUFdSX05PTkJVRl9CQVNFICsgUkZDX1BXUl9PX1BXTUNMS0VOKSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX1JGQ1RSQyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX0ZTQ0EgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX1BXUl9QV01DTEtFTl9QSEEgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX1BXUl9QV01DTEtFTl9SQVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX1BXUl9QV01DTEtFTl9SRkVSQU0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX1BXUl9QV01DTEtFTl9SRkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX1BXUl9QV01DTEtFTl9NRE1SQU0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX1BXUl9QV01DTEtFTl9NRE0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX1BXUl9QV01DTEtFTl9DUEVSQU0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX1BXUl9QV01DTEtFTl9DUEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX1BXUl9QV01DTEtFTl9SRkM7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGUgdGhlIFJGIGNvcmUgY2xvY2tzLgorLy8hCisvLyEgQXMgc29vbiBhcyB0aGUgUkYgY29yZSBpcyBzdGFydGVkIGl0IHdpbGwgaGFuZGxlIGNsb2NrIGNvbnRyb2wKKy8vISBhdXRvbm9tb3VzbHkuIE5vIGNoZWNrIHNob3VsZCBiZSBwZXJmb3JtZWQgdG8gY2hlY2sgdGhlIGNsb2Nrcy4gSW5zdGVhZAorLy8hIHRoZSByYWRpbyBjYW4gYmUgcGluZydlZCB0aHJvdWdoIHRoZSBjb21tYW5kIGludGVyZmFjZS4KKy8vIQorLy8hIFdoZW4gZGlzYWJsaW5nIGNsb2NrcyBpdCBpcyB0aGUgcHJvZ3JhbW1lcnMgcmVzcG9uc2liaWxpdHkgdGhhdCB0aGUKKy8vISBSRiBjb3JlIGNsb2NrcyBjYW4gYmUgc2FmZWx5IGdhdGVkLiBJLmUuIHRoZSBSRiBjb3JlIHNob3VsZCBiZSBzYWZlbHkKKy8vISAncGFya2VkJy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitSRkNDbG9ja0Rpc2FibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIERpc2FibGUgYWxsIGNsb2NrcworICAgIC8vCisgICAgSFdSRUcoUkZDX1BXUl9OT05CVUZfQkFTRSArIFJGQ19QV1JfT19QV01DTEtFTikgPSAweDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRW5hYmxlIENQRTAgaW50ZXJydXB0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1JGQ0NwZTBJbnRFbmFibGUodWludDMyX3QgdWkzMk1hc2spCit7CisgIC8vCisgIC8vIE11bHRpcGxleCBSRiBDb3JlIGludGVycnVwdHMgdG8gQ1BFMCBJUlEuCisgIC8vCisgIEhXUkVHKFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJU0wpICY9IH51aTMyTWFzazsKKworICBkbworICB7CisgICAgLy8KKyAgICAvLyBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcoUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgPSAweDA7CisgIH13aGlsZShIV1JFRyhSRkNfREJFTExfQkFTRSArIFJGQ19EQkVMTF9PX1JGQ1BFSUZHKSAhPSAweDApOworCisgIC8vCisgIC8vICBFbmFibGUgdGhlIG1hc2tlZCBpbnRlcnJ1cHRzCisgIC8vCisgIEhXUkVHKFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJRU4pIHw9IHVpMzJNYXNrOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRW5hYmxlIENQRTEgaW50ZXJydXB0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1JGQ0NwZTFJbnRFbmFibGUodWludDMyX3QgdWkzMk1hc2spCit7CisgIC8vCisgIC8vIE11bHRpcGxleCBSRiBDb3JlIGludGVycnVwdHMgdG8gQ1BFMSBJUlEuCisgIC8vCisgIEhXUkVHKCBSRkNfREJFTExfQkFTRSArIFJGQ19EQkVMTF9PX1JGQ1BFSVNMKSB8PSB1aTMyTWFzazsKKworICBkbworICB7CisgICAgLy8KKyAgICAvLyBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcoUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgPSAweDA7CisgIH13aGlsZShIV1JFRyhSRkNfREJFTExfQkFTRSArIFJGQ19EQkVMTF9PX1JGQ1BFSUZHKSAhPSAweDApOworCisgIC8vCisgIC8vICBFbmFibGUgdGhlIG1hc2tlZCBpbnRlcnJ1cHRzCisgIC8vCisgIEhXUkVHKFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJRU4pIHw9IHVpMzJNYXNrOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hcCBvbmx5IEhXIGludGVycnVwdHMsIGFuZAorLy8hIGNsZWFycy91bm1hc2tzIHRoZW0uIFRoZXNlIGludGVycnVwdHMgYXJlIHRoZW4gZW5hYmxlZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUkZDSHdJbnRFbmFibGUodWludDMyX3QgdWkzMk1hc2spCit7CisgIC8vCisgIC8vIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMuCisgIC8vCisgIEhXUkVHKFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fUkZIV0lGRykgPSAweDA7CisKKyAgLy8KKyAgLy8gIEVuYWJsZSB0aGUgbWFza2VkIGludGVycnVwdHMKKyAgLy8KKyAgSFdSRUcoUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19SRkhXSUVOKSB8PSB1aTMyTWFzazsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIERpc2FibGUgQ1BFIGludGVycnVwdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitSRkNDcGVJbnREaXNhYmxlKHVpbnQzMl90IHVpMzJNYXNrKQoreworICAvLworICAvLyAgRGlzYWJsZSB0aGUgbWFza2VkIGludGVycnVwdHMKKyAgLy8KKyAgSFdSRUcoIFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJRU4gKSAmPSB+dWkzMk1hc2s7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBEaXNhYmxlIEhXIGludGVycnVwdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitSRkNId0ludERpc2FibGUodWludDMyX3QgdWkzMk1hc2spCit7CisgIC8vCisgIC8vICBEaXNhYmxlIHRoZSBtYXNrZWQgaW50ZXJydXB0cworICAvLworICBIV1JFRyhSRkNfREJFTExfQkFTRSArIFJGQ19EQkVMTF9PX1JGSFdJRU4pICY9IH51aTMyTWFzazsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldCBhbmQgY2xlYXIgQ1BFIGludGVycnVwdCBmbGFncworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBSRkNDcGVJbnRHZXRBbmRDbGVhcih2b2lkKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsZWFyIGludGVycnVwdCBmbGFncworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitSRkNDcGVJbnRDbGVhcih1aW50MzJfdCB1aTMyTWFzaykKK3sKKyAgZG8KKyAgeworICAgIC8vCisgICAgLy8gQ2xlYXIgaW50ZXJydXB0cyB0aGF0IG1heSBub3cgYmUgcGVuZGluZworICAgIC8vCisgICAgSFdSRUcoUkZDX0RCRUxMX0JBU0UrUkZDX0RCRUxMX09fUkZDUEVJRkcpID0gfnVpMzJNYXNrOworICB9d2hpbGUgKEhXUkVHKFJGQ19EQkVMTF9CQVNFK1JGQ19EQkVMTF9PX1JGQ1BFSUZHKSAmIHVpMzJNYXNrKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsZWFyIGludGVycnVwdCBmbGFncworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitSRkNId0ludENsZWFyKHVpbnQzMl90IHVpMzJNYXNrKQoreworICAvLworICAvLyBDbGVhciBwZW5kaW5nIGludGVycnVwdHMuCisgIC8vCisgIEhXUkVHKFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fUkZIV0lGRykgPSB+dWkzMk1hc2s7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbGVhciBpbnRlcnJ1cHQgZmxhZ3MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUkZDQWNrSW50Q2xlYXIodm9pZCkKK3sKKyAgLy8KKyAgLy8gQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4KKyAgLy8KKyAgSFdSRUcoUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19SRkFDS0lGRykgPSAweDA7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTZW5kIGNvbW1hbmQgdG8gZG9vcmJlbGwgYW5kIHdhaXQgZm9yIGFjaworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBSRkNEb29yYmVsbFNlbmRUbyh1aW50MzJfdCBwT3ApOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVHVybiBvZmYgc3ludGgsIE5PVEU6IFJhZGlvIHdpbGwgbm8gbG9uZ2VyIHJlc3BvbmQgdG8gY29tbWFuZHMhCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgUkZDU3ludGhQb3dlckRvd24odm9pZCk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBSZWFkIFJGIHRyaW0gZnJvbSBmbGFzaCB1c2luZyBDTTMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBSRkNSZlRyaW1SZWFkKHJmY19yYWRpb09wX3QgKnBPcFNldHVwLCByZlRyaW1fdCogcmZUcmltKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFdyaXRlIHByZWxvYWRlZCBSRiB0cmltIHZhbHVlcyB0byBDTTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBSRkNSZlRyaW1TZXQocmZUcmltX3QqIHJmVHJpbSk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDaGVjayBPdmVycmlkZSBSVHJpbSB2cyBGQ0ZHIFJUcmltCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgUkZDUlRyaW0ocmZjX3JhZGlvT3BfdCAqcE9wU2V0dXApOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgUmVzZXQgcHJldmlvdXNseSBwYXRjaGVkIENQRSBSQU0gdG8gYSBzdGF0ZSB3aGVyZSBpdCBjYW4gYmUgcGF0Y2hlZCBhZ2FpbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFJGQ0NQRVBhdGNoUmVzZXQodm9pZCk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBGdW5jdGlvbiB0byBzZXQgVkNPTERPIHJlZmVyZW5jZSB0byB2b2x0YWdlIG1vZGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBSRkNBZGkzVmNvTGRvVm9sdGFnZU1vZGUoYm9vbCBiRW5hYmxlKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9SRkNDcGVJbnRHZXRBbmRDbGVhcgorICAgICAgICAjdW5kZWYgIFJGQ0NwZUludEdldEFuZENsZWFyCisgICAgICAgICNkZWZpbmUgUkZDQ3BlSW50R2V0QW5kQ2xlYXIgICAgICAgICAgICBST01fUkZDQ3BlSW50R2V0QW5kQ2xlYXIKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1JGQ0Rvb3JiZWxsU2VuZFRvCisgICAgICAgICN1bmRlZiAgUkZDRG9vcmJlbGxTZW5kVG8KKyAgICAgICAgI2RlZmluZSBSRkNEb29yYmVsbFNlbmRUbyAgICAgICAgICAgICAgIFJPTV9SRkNEb29yYmVsbFNlbmRUbworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUkZDU3ludGhQb3dlckRvd24KKyAgICAgICAgI3VuZGVmICBSRkNTeW50aFBvd2VyRG93bgorICAgICAgICAjZGVmaW5lIFJGQ1N5bnRoUG93ZXJEb3duICAgICAgICAgICAgICAgUk9NX1JGQ1N5bnRoUG93ZXJEb3duCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9SRkNSZlRyaW1SZWFkCisgICAgICAgICN1bmRlZiAgUkZDUmZUcmltUmVhZAorICAgICAgICAjZGVmaW5lIFJGQ1JmVHJpbVJlYWQgICAgICAgICAgICAgICAgICAgUk9NX1JGQ1JmVHJpbVJlYWQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1JGQ1JmVHJpbVNldAorICAgICAgICAjdW5kZWYgIFJGQ1JmVHJpbVNldAorICAgICAgICAjZGVmaW5lIFJGQ1JmVHJpbVNldCAgICAgICAgICAgICAgICAgICAgUk9NX1JGQ1JmVHJpbVNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUkZDUlRyaW0KKyAgICAgICAgI3VuZGVmICBSRkNSVHJpbQorICAgICAgICAjZGVmaW5lIFJGQ1JUcmltICAgICAgICAgICAgICAgICAgICAgICAgUk9NX1JGQ1JUcmltCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9SRkNDUEVQYXRjaFJlc2V0CisgICAgICAgICN1bmRlZiAgUkZDQ1BFUGF0Y2hSZXNldAorICAgICAgICAjZGVmaW5lIFJGQ0NQRVBhdGNoUmVzZXQgICAgICAgICAgICAgICAgUk9NX1JGQ0NQRVBhdGNoUmVzZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1JGQ0FkaTNWY29MZG9Wb2x0YWdlTW9kZQorICAgICAgICAjdW5kZWYgIFJGQ0FkaTNWY29MZG9Wb2x0YWdlTW9kZQorICAgICAgICAjZGVmaW5lIFJGQ0FkaTNWY29MZG9Wb2x0YWdlTW9kZSAgICAgICAgUk9NX1JGQ0FkaTNWY29MZG9Wb2x0YWdlTW9kZQorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gIF9fUkZDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcm9tLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWI4NTA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcm9tLmgKQEAgLTAsMCArMSw2NzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICByb20uaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTggMTE6MDk6MDcgKzAxMDAgKEZyaSwgMTggTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NDcKKyoKKyogIERlc2NyaXB0aW9uOiAgICBQcm90b3R5cGVzIGZvciB0aGUgUk9NIHV0aWxpdHkgZnVuY3Rpb25zLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JPTV9IX18KKyNkZWZpbmUgX19ST01fSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorCisjaWZuZGVmIF9fSEFQSV9IX18KKyNkZWZpbmUgX19IQVBJX0hfXworCisvLworLy8gU3RhcnQgYWRkcmVzcyBvZiB0aGUgUk9NIGhhcmQgQVBJIGFjY2VzcyB0YWJsZSAobG9jYXRlZCBhZnRlciB0aGUgUk9NIEZXIHJldiBmaWVsZCkKKy8vCisjZGVmaW5lIFJPTV9IQVBJX1RBQkxFX0FERFIgMHgxMDAwMDA0OAorCisvLworLy8gUk9NIEhhcmQtQVBJIGZ1bmN0aW9uIGludGVyZmFjZSB0eXBlcworLy8KK3R5cGVkZWYgdWludDMyX3QgICAgICgqIEZQVFJfQ1JDMzJfVCkgICAgICAgICAgICAgICggdWludDhfdCogICAgIC8qIHB1aThEYXRhICAgICAgICAqLyxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAvKiB1aTMyQnl0ZUNvdW50ICAgKi8sXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgLyogdWkzMlJlcGVhdENvdW50ICovKTsKKwordHlwZWRlZiB1aW50MzJfdCAgICAgKCogRlBUUl9HRVRGTFNJWkVfVCkgICAgICAgICAgKCB2b2lkICk7CisKK3R5cGVkZWYgdWludDMyX3QgICAgICgqIEZQVFJfR0VUQ0hJUElEX1QpICAgICAgICAgICggdm9pZCApOworCit0eXBlZGVmIHVpbnQzMl90ICAgICAoKiBGUFRSX1JFU0VSVkVEMV9UKSAgICAgICAgICAoIHVpbnQzMl90ICk7CisKK3R5cGVkZWYgdWludDMyX3QgICAgICgqIEZQVFJfUkVTRVJWRUQyX1QpICAgICAgICAgICggdm9pZCApOworCit0eXBlZGVmIHVpbnQzMl90ICAgICAoKiBGUFRSX1JFU0VSVkVEM19UKSAgICAgICAgICAoIHVpbnQ4X3QqICAgICAgICAgICAgICAgICAgICAgICAgICAsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cit0eXBlZGVmIHZvaWQgICAgICAgICAoKiBGUFRSX1JFU0VUREVWX1QpICAgICAgICAgICAoIHZvaWQgKTsKKwordHlwZWRlZiB1aW50MzJfdCAgICAgKCogRlBUUl9GTEVUQ0hFUjMyX1QpICAgICAgICAgKCB1aW50MTZfdCogICAgLyogcHVpMTZEYXRhICAgICAgICovLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgICAgIC8qIHVpMTZXb3JkQ291bnQgICAqLyxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICAgICAvKiB1aTE2UmVwZWF0Q291bnQgKi8pOworCit0eXBlZGVmIHVpbnQzMl90ICAgICAoKiBGUFRSX01JTlZBTF9UKSAgICAgICAgICAgICAoIHVpbnQzMl90KiAgICAvKiB1bHBEYXRhQnVmZmVyICAgKi8sXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgLyogdWkzMkRhdGFDb3VudCAgICovKTsKKwordHlwZWRlZiB1aW50MzJfdCAgICAgKCogRlBUUl9NQVhWQUxfVCkgICAgICAgICAgICAgKCB1aW50MzJfdCogICAgLyogcHVpMzJEYXRhQnVmZmVyICovLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgIC8qIHVpMzJEYXRhQ291bnQgICAqLyk7CisKK3R5cGVkZWYgdWludDMyX3QgICAgICgqIEZQVFJfTUVBTlZBTF9UKSAgICAgICAgICAgICggdWludDMyX3QqICAgIC8qIHB1aTMyRGF0YUJ1ZmZlciAqLyxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAvKiB1aTMyRGF0YUNvdW50ICAgKi8pOworCit0eXBlZGVmIHVpbnQzMl90ICAgICAoKiBGUFRSX1NURERWQUxfVCkgICAgICAgICAgICAoIHVpbnQzMl90KiAgICAvKiBwdWkzMkRhdGFCdWZmZXIgKi8sXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgLyogdWkzMkRhdGFDb3VudCAgICovKTsKKwordHlwZWRlZiB2b2lkICAgICAgICAgKCogRlBUUl9IRlNPVVJDRVNBRkVTV0lUQ0hfVCkgKCB2b2lkICk7CisKK3R5cGVkZWYgdm9pZCAgICAgICAgICgqIEZQVFJfUkVTRVJWRUQ0X1QpICAgICAgICAgICggdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKK3R5cGVkZWYgdm9pZCAgICAgICAgICgqIEZQVFJfUkVTRVJWRUQ1X1QpICAgICAgICAgICggdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKK3R5cGVkZWYgdm9pZCAgICAgICAgICgqIEZQVFJfQ09NUEFJTl9UKSAgICAgICAgICAgICggdWludDhfdCAgICAgIC8qIHV0OFNpZ25hbCAgICAgICAqLyk7CisKK3R5cGVkZWYgdm9pZCAgICAgICAgICgqIEZQVFJfQ09NUEFSRUZfVCkgICAgICAgICAgICggdWludDhfdCAgICAgIC8qIHV0OFNpZ25hbCAgICAgICAqLyk7CisKK3R5cGVkZWYgdm9pZCAgICAgICAgICgqIEZQVFJfQURDQ09NUEJJTl9UKSAgICAgICAgICggdWludDhfdCAgICAgIC8qIHV0OFNpZ25hbCAgICAgICAqLyk7CisKK3R5cGVkZWYgdm9pZCAgICAgICAgICgqIEZQVFJfQ09NUEJSRUZfVCkgICAgICAgICAgICggdWludDhfdCAgICAgIC8qIHV0OFNpZ25hbCAgICAgICAqLyk7CisKK2V4dGVybiB1aW50MzJfdCBNZW1CdXNXcmtBcm91bmRIYXBpUHJvZ3JhbUZsYXNoKHVpbnQ4X3QgKnB1aThEYXRhQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ291bnQpOworCitleHRlcm4gdWludDMyX3QgTWVtQnVzV3JrQXJvdW5kSGFwaUVyYXNlU2VjdG9yKHVpbnQzMl90IHVpMzJBZGRyZXNzKTsKKworLy8KKy8vIFJPTSBIYXJkLUFQSSBhY2Nlc3MgdGFibGUgdHlwZQorLy8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlBUUl9DUkMzMl9UICAgICAgICAgICAgICAgICAgICBDcmMzMjsKKyAgICBGUFRSX0dFVEZMU0laRV9UICAgICAgICAgICAgICAgIEZsYXNoR2V0U2l6ZTsKKyAgICBGUFRSX0dFVENISVBJRF9UICAgICAgICAgICAgICAgIEdldENoaXBJZDsKKyAgICBGUFRSX1JFU0VSVkVEMV9UICAgICAgICAgICAgICAgIFJlc2VydmVkTG9jYXRpb24xOworICAgIEZQVFJfUkVTRVJWRUQyX1QgICAgICAgICAgICAgICAgUmVzZXJ2ZWRMb2NhdGlvbjI7CisgICAgRlBUUl9SRVNFUlZFRDNfVCAgICAgICAgICAgICAgICBSZXNlcnZlZExvY2F0aW9uMzsKKyAgICBGUFRSX1JFU0VUREVWX1QgICAgICAgICAgICAgICAgIFJlc2V0RGV2aWNlOworICAgIEZQVFJfRkxFVENIRVIzMl9UICAgICAgICAgICAgICAgRmxldGNoZXIzMjsKKyAgICBGUFRSX01JTlZBTF9UICAgICAgICAgICAgICAgICAgIE1pblZhbHVlOworICAgIEZQVFJfTUFYVkFMX1QgICAgICAgICAgICAgICAgICAgTWF4VmFsdWU7CisgICAgRlBUUl9NRUFOVkFMX1QgICAgICAgICAgICAgICAgICBNZWFuVmFsdWU7CisgICAgRlBUUl9TVEREVkFMX1QgICAgICAgICAgICAgICAgICBTdGFuZERldmlhdGlvblZhbHVlOworICAgIEZQVFJfUkVTRVJWRUQ0X1QgICAgICAgICAgICAgICAgUmVzZXJ2ZWRMb2NhdGlvbjQ7CisgICAgRlBUUl9SRVNFUlZFRDVfVCAgICAgICAgICAgICAgICBSZXNlcnZlZExvY2F0aW9uNTsKKyAgICBGUFRSX0hGU09VUkNFU0FGRVNXSVRDSF9UICAgICAgIEhGU291cmNlU2FmZVN3aXRjaDsKKyAgICBGUFRSX0NPTVBBSU5fVCAgICAgICAgICAgICAgICAgIFNlbGVjdENvbXBBSW5wdXQ7CisgICAgRlBUUl9DT01QQVJFRl9UICAgICAgICAgICAgICAgICBTZWxlY3RDb21wQVJlZjsKKyAgICBGUFRSX0FEQ0NPTVBCSU5fVCAgICAgICAgICAgICAgIFNlbGVjdEFEQ0NvbXBCSW5wdXQ7CisgICAgRlBUUl9DT01QQlJFRl9UICAgICAgICAgICAgICAgICBTZWxlY3RDb21wQlJlZjsKK30gSEFSRF9BUElfVDsKKworLy8KKy8vIFBvaW50ZXIgdG8gdGhlIFJPTSBIQVBJIHRhYmxlCisvLworI2RlZmluZSBQX0hBUkRfQVBJICAgICAgICAgICAgICAgICAgICgoSEFSRF9BUElfVCopIFJPTV9IQVBJX1RBQkxFX0FERFIpCisKKy8vCisvLyBBZGQgd3JhcHBlciBhcm91bmQgdGhlIEhhcGkgZnVuY3Rpb25zIG5lZWRpbmcgdGhlICJidXMgYXJiaXRyYXRpb24gaXNzdWUiIHdvcmthcm91bmQKKy8vCitleHRlcm4gdm9pZCBTYWZlSGFwaVZvaWQoIEZQVFJfVk9JRF9WT0lEX1QgZlB0ciApOworZXh0ZXJuIHZvaWQgU2FmZUhhcGlBdXhBZGlTZWxlY3QoIEZQVFJfVk9JRF9VSU5UOF9UIGZQdHIsIHVpbnQ4X3QgdXQ4U2lnbmFsICk7CisKKyNkZWZpbmUgSGFwaUNyYzMyKGEsYixjKSAgICAgICAgICAgICBQX0hBUkRfQVBJLT5DcmMzMihhLGIsYykKKyNkZWZpbmUgSGFwaUdldEZsYXNoU2l6ZSgpICAgICAgICAgICBQX0hBUkRfQVBJLT5GbGFzaEdldFNpemUoKQorI2RlZmluZSBIYXBpR2V0Q2hpcElkKCkgICAgICAgICAgICAgIFBfSEFSRF9BUEktPkdldENoaXBJZCgpCisjZGVmaW5lIEhhcGlTZWN0b3JFcmFzZShhKSAgICAgICAgICAgTWVtQnVzV3JrQXJvdW5kSGFwaUVyYXNlU2VjdG9yKGEpCisjZGVmaW5lIEhhcGlQcm9ncmFtRmxhc2goYSxiLGMpICAgICAgTWVtQnVzV3JrQXJvdW5kSGFwaVByb2dyYW1GbGFzaChhLGIsYykKKyNkZWZpbmUgSGFwaVJlc2V0RGV2aWNlKCkgICAgICAgICAgICBQX0hBUkRfQVBJLT5SZXNldERldmljZSgpCisjZGVmaW5lIEhhcGlGbGV0Y2hlcjMyKGEsYixjKSAgICAgICAgUF9IQVJEX0FQSS0+RmxldGNoZXIzMihhLGIsYykKKyNkZWZpbmUgSGFwaU1pblZhbHVlKGEsYikgICAgICAgICAgICBQX0hBUkRfQVBJLT5NaW5WYWx1ZShhLGIpCisjZGVmaW5lIEhhcGlNYXhWYWx1ZShhLGIpICAgICAgICAgICAgUF9IQVJEX0FQSS0+TWF4VmFsdWUoYSxiKQorI2RlZmluZSBIYXBpTWVhblZhbHVlKGEsYikgICAgICAgICAgIFBfSEFSRF9BUEktPk1lYW5WYWx1ZShhLGIpCisjZGVmaW5lIEhhcGlTdGFuZERldmlhdGlvblZhbHVlKGEsYikgUF9IQVJEX0FQSS0+U3RhbmREZXZpYXRpb25WYWx1ZShhLGIpCisjZGVmaW5lIEhhcGlIRlNvdXJjZVNhZmVTd2l0Y2goKSAgICAgU2FmZUhhcGlWb2lkKCBQX0hBUkRfQVBJLT5IRlNvdXJjZVNhZmVTd2l0Y2ggKQorI2RlZmluZSBIYXBpU2VsZWN0Q29tcEFJbnB1dChhKSAgICAgIFNhZmVIYXBpQXV4QWRpU2VsZWN0KCBQX0hBUkRfQVBJLT5TZWxlY3RDb21wQUlucHV0ICAgLCBhICkKKyNkZWZpbmUgSGFwaVNlbGVjdENvbXBBUmVmKGEpICAgICAgICBTYWZlSGFwaUF1eEFkaVNlbGVjdCggUF9IQVJEX0FQSS0+U2VsZWN0Q29tcEFSZWYgICAgICwgYSApCisjZGVmaW5lIEhhcGlTZWxlY3RBRENDb21wQklucHV0KGEpICAgU2FmZUhhcGlBdXhBZGlTZWxlY3QoIFBfSEFSRF9BUEktPlNlbGVjdEFEQ0NvbXBCSW5wdXQsIGEgKQorI2RlZmluZSBIYXBpU2VsZWN0Q29tcEJSZWYoYSkgICAgICAgIFNhZmVIYXBpQXV4QWRpU2VsZWN0KCBQX0hBUkRfQVBJLT5TZWxlY3RDb21wQlJlZiAgICAgLCBhICkKKworLy8KKy8vIERlZmluZXMgZm9yIGlucHV0IHBhcmFtZXRlciB0byB0aGUgSGFwaVNlbGVjdENvbXBBSW5wdXQgZnVuY3Rpb24uCisvLyBUaGUgZGVmaW5lIHZhbHVlcyBjYW4gbm90IGJlIGNoYW5nZWQhCisvLworI2RlZmluZSBDT01QQV9JTl9OQyAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ09NUEFfSU5fQVVYSU83ICAgICAgICAweDA5CisjZGVmaW5lIENPTVBBX0lOX0FVWElPNiAgICAgICAgMHgwQQorI2RlZmluZSBDT01QQV9JTl9BVVhJTzUgICAgICAgIDB4MEIKKyNkZWZpbmUgQ09NUEFfSU5fQVVYSU80ICAgICAgICAweDBDCisjZGVmaW5lIENPTVBBX0lOX0FVWElPMyAgICAgICAgMHgwRAorI2RlZmluZSBDT01QQV9JTl9BVVhJTzIgICAgICAgIDB4MEUKKyNkZWZpbmUgQ09NUEFfSU5fQVVYSU8xICAgICAgICAweDBGCisjZGVmaW5lIENPTVBBX0lOX0FVWElPMCAgICAgICAgMHgxMAorCisvLworLy8gRGVmaW5lcyBmb3IgaW5wdXQgcGFyYW1ldGVyIHRvIHRoZSBIYXBpU2VsZWN0Q29tcEFSZWYgZnVuY3Rpb24uCisvLyBUaGUgZGVmaW5lIHZhbHVlcyBjYW4gbm90IGJlIGNoYW5nZWQhCisvLworI2RlZmluZSBDT01QQV9SRUZfTkMgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ09NUEFfUkVGX0RDT1VQTCAgICAgICAweDAxCisjZGVmaW5lIENPTVBBX1JFRl9WU1MgICAgICAgICAgMHgwMgorI2RlZmluZSBDT01QQV9SRUZfVkREUyAgICAgICAgIDB4MDMKKyNkZWZpbmUgQ09NUEFfUkVGX0FEQ1ZSRUZQICAgICAweDA0CisjZGVmaW5lIENPTVBBX1JFRl9BVVhJTzcgICAgICAgMHgwOQorI2RlZmluZSBDT01QQV9SRUZfQVVYSU82ICAgICAgIDB4MEEKKyNkZWZpbmUgQ09NUEFfUkVGX0FVWElPNSAgICAgICAweDBCCisjZGVmaW5lIENPTVBBX1JFRl9BVVhJTzQgICAgICAgMHgwQworI2RlZmluZSBDT01QQV9SRUZfQVVYSU8zICAgICAgIDB4MEQKKyNkZWZpbmUgQ09NUEFfUkVGX0FVWElPMiAgICAgICAweDBFCisjZGVmaW5lIENPTVBBX1JFRl9BVVhJTzEgICAgICAgMHgwRgorI2RlZmluZSBDT01QQV9SRUZfQVVYSU8wICAgICAgIDB4MTAKKworLy8KKy8vIERlZmluZXMgZm9yIGlucHV0IHBhcmFtZXRlciB0byB0aGUgSGFwaVNlbGVjdEFEQ0NvbXBCSW5wdXQgZnVuY3Rpb24uCisvLyBUaGUgZGVmaW5lIHZhbHVlcyBjYW4gbm90IGJlIGNoYW5nZWQhCisvLworI2RlZmluZSBBRENfQ09NUEJfSU5fTkMgICAgICAgIDB4MDAKKyNkZWZpbmUgQURDX0NPTVBCX0lOX0RDT1VQTCAgICAweDAzCisjZGVmaW5lIEFEQ19DT01QQl9JTl9WU1MgICAgICAgMHgwNAorI2RlZmluZSBBRENfQ09NUEJfSU5fVkREUyAgICAgIDB4MDUKKyNkZWZpbmUgQURDX0NPTVBCX0lOX0FVWElPNyAgICAweDA5CisjZGVmaW5lIEFEQ19DT01QQl9JTl9BVVhJTzYgICAgMHgwQQorI2RlZmluZSBBRENfQ09NUEJfSU5fQVVYSU81ICAgIDB4MEIKKyNkZWZpbmUgQURDX0NPTVBCX0lOX0FVWElPNCAgICAweDBDCisjZGVmaW5lIEFEQ19DT01QQl9JTl9BVVhJTzMgICAgMHgwRAorI2RlZmluZSBBRENfQ09NUEJfSU5fQVVYSU8yICAgIDB4MEUKKyNkZWZpbmUgQURDX0NPTVBCX0lOX0FVWElPMSAgICAweDBGCisjZGVmaW5lIEFEQ19DT01QQl9JTl9BVVhJTzAgICAgMHgxMAorCisvLworLy8gRGVmaW5lcyBmb3IgaW5wdXQgcGFyYW1ldGVyIHRvIHRoZSBIYXBpU2VsZWN0Q29tcEJSZWYgZnVuY3Rpb24uCisvLyBUaGUgZGVmaW5lIHZhbHVlcyBjYW4gbm90IGJlIGNoYW5nZWQhCisvLworI2RlZmluZSBDT01QQl9SRUZfTkMgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ09NUEJfUkVGX0RDT1VQTCAgICAgICAweDAxCisjZGVmaW5lIENPTVBCX1JFRl9WU1MgICAgICAgICAgMHgwMgorI2RlZmluZSBDT01QQl9SRUZfVkREUyAgICAgICAgIDB4MDMKKworI2VuZGlmIC8vIF9fSEFQSV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFBvaW50ZXJzIHRvIHRoZSBtYWluIEFQSSB0YWJsZXMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBST01fQVBJX1RBQkxFICAgICAgICAgICAoKHVpbnQzMl90ICopIDB4MTAwMDAxODApCisjZGVmaW5lIFJPTV9WRVJTSU9OICAgICAgICAgICAgIChST01fQVBJX1RBQkxFWzBdKQorCisKKyNkZWZpbmUgUk9NX0FQSV9BT05fRVZFTlRfVEFCTEUgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzFdKSkKKyNkZWZpbmUgUk9NX0FQSV9BT05fSU9DX1RBQkxFICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzJdKSkKKyNkZWZpbmUgUk9NX0FQSV9BT05fUlRDX1RBQkxFICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzNdKSkKKyNkZWZpbmUgUk9NX0FQSV9BT05fV1VDX1RBQkxFICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzRdKSkKKyNkZWZpbmUgUk9NX0FQSV9BVVhfQ1RSTF9UQUJMRSAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzVdKSkKKyNkZWZpbmUgUk9NX0FQSV9BVVhfVERDX1RBQkxFICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzZdKSkKKyNkZWZpbmUgUk9NX0FQSV9BVVhfVElNRVJfVEFCTEUgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzddKSkKKyNkZWZpbmUgUk9NX0FQSV9BVVhfV1VDX1RBQkxFICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzhdKSkKKyNkZWZpbmUgUk9NX0FQSV9ERElfVEFCTEUgICAgICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzldKSkKKyNkZWZpbmUgUk9NX0FQSV9GTEFTSF9UQUJMRSAgICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzEwXSkpCisjZGVmaW5lIFJPTV9BUElfSTJDX1RBQkxFICAgICAgICgodWludDMyX3QqKSAoUk9NX0FQSV9UQUJMRVsxMV0pKQorI2RlZmluZSBST01fQVBJX0lOVEVSUlVQVF9UQUJMRSAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbMTJdKSkKKyNkZWZpbmUgUk9NX0FQSV9JT0NfVEFCTEUgICAgICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzEzXSkpCisjZGVmaW5lIFJPTV9BUElfUFJDTV9UQUJMRSAgICAgICgodWludDMyX3QqKSAoUk9NX0FQSV9UQUJMRVsxNF0pKQorI2RlZmluZSBST01fQVBJX1NNUEhfVEFCTEUgICAgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbMTVdKSkKKyNkZWZpbmUgUk9NX0FQSV9TU0lfVEFCTEUgICAgICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzE3XSkpCisjZGVmaW5lIFJPTV9BUElfVElNRVJfVEFCTEUgICAgICgodWludDMyX3QqKSAoUk9NX0FQSV9UQUJMRVsxOF0pKQorI2RlZmluZSBST01fQVBJX1RSTkdfVEFCTEUgICAgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbMTldKSkKKyNkZWZpbmUgUk9NX0FQSV9VQVJUX1RBQkxFICAgICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzIwXSkpCisjZGVmaW5lIFJPTV9BUElfVURNQV9UQUJMRSAgICAgICgodWludDMyX3QqKSAoUk9NX0FQSV9UQUJMRVsyMV0pKQorI2RlZmluZSBST01fQVBJX1ZJTVNfVEFCTEUgICAgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbMjJdKSkKKworLy8gQU9OX0VWRU5UIEZVTkNUSU9OUworI2RlZmluZSBST01fQU9ORXZlbnRNY3VXYWtlVXBTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMk1DVVdVRXZlbnQsIHVpbnQzMl90IHVpMzJFdmVudFNyYykpIFwKKyAgICBST01fQVBJX0FPTl9FVkVOVF9UQUJMRVswXSkKKworI2RlZmluZSBST01fQU9ORXZlbnRNY3VXYWtlVXBHZXQgXAorICAgICgodWludDMyX3QgKCopKHVpbnQzMl90IHVpMzJNQ1VXVUV2ZW50KSkgXAorICAgIFJPTV9BUElfQU9OX0VWRU5UX1RBQkxFWzFdKQorCisjZGVmaW5lIFJPTV9BT05FdmVudEF1eFdha2VVcFNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQVVYV1VFdmVudCwgdWludDMyX3QgdWkzMkV2ZW50U3JjKSkgXAorICAgIFJPTV9BUElfQU9OX0VWRU5UX1RBQkxFWzJdKQorCisjZGVmaW5lIFJPTV9BT05FdmVudEF1eFdha2VVcEdldCBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMkFVWFdVRXZlbnQpKSBcCisgICAgUk9NX0FQSV9BT05fRVZFTlRfVEFCTEVbM10pCisKKyNkZWZpbmUgUk9NX0FPTkV2ZW50TWN1U2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJNQ1VFdmVudCwgdWludDMyX3QgdWkzMkV2ZW50U3JjKSkgXAorICAgIFJPTV9BUElfQU9OX0VWRU5UX1RBQkxFWzRdKQorCisjZGVmaW5lIFJPTV9BT05FdmVudE1jdUdldCBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMk1DVUV2ZW50KSkgXAorICAgIFJPTV9BUElfQU9OX0VWRU5UX1RBQkxFWzVdKQorCisKKy8vIEFPTl9XVUMgRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9BT05XVUNBdXhSZXNldCBcCisgICAgKCh2b2lkICgqKSh2b2lkKSkgXAorICAgIFJPTV9BUElfQU9OX1dVQ19UQUJMRVszXSkKKworI2RlZmluZSBST01fQU9OV1VDUmVjaGFyZ2VDdHJsQ29uZmlnU2V0IFwKKyAgICAoKHZvaWQgKCopKGJvb2wgYkFkYXB0RW5hYmxlLCB1aW50MzJfdCB1aTMyQWRhcHRSYXRlLCB1aW50MzJfdCB1aTMyUGVyaW9kLCB1aW50MzJfdCB1aTMyTWF4UGVyaW9kKSkgXAorICAgIFJPTV9BUElfQU9OX1dVQ19UQUJMRVs0XSkKKworI2RlZmluZSBST01fQU9OV1VDT3NjQ29uZmlnIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJQZXJpb2QpKSBcCisgICAgUk9NX0FQSV9BT05fV1VDX1RBQkxFWzVdKQorCisKKy8vIEFVWF9UREMgRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9BVVhURENDb25maWdTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJTdGFydENvbmRpdGlvbiwgdWludDMyX3QgdWkzMlN0b3BDb25kaXRpb24pKSBcCisgICAgUk9NX0FQSV9BVVhfVERDX1RBQkxFWzBdKQorCisjZGVmaW5lIFJPTV9BVVhURENNZWFzdXJlbWVudERvbmUgXAorICAgICgodWludDMyX3QgKCopKHVpbnQzMl90IHVpMzJCYXNlKSkgXAorICAgIFJPTV9BUElfQVVYX1REQ19UQUJMRVsxXSkKKworCisvLyBBVVhfV1VDIEZVTkNUSU9OUworI2RlZmluZSBST01fQVVYV1VDQ2xvY2tFbmFibGUgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkNsb2NrcykpIFwKKyAgICBST01fQVBJX0FVWF9XVUNfVEFCTEVbMF0pCisKKyNkZWZpbmUgUk9NX0FVWFdVQ0Nsb2NrRGlzYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQ2xvY2tzKSkgXAorICAgIFJPTV9BUElfQVVYX1dVQ19UQUJMRVsxXSkKKworI2RlZmluZSBST01fQVVYV1VDQ2xvY2tTdGF0dXMgXAorICAgICgodWludDMyX3QgKCopKHVpbnQzMl90IHVpMzJDbG9ja3MpKSBcCisgICAgUk9NX0FQSV9BVVhfV1VDX1RBQkxFWzJdKQorCisjZGVmaW5lIFJPTV9BVVhXVUNQb3dlckN0cmwgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMlBvd2VyTW9kZSkpIFwKKyAgICBST01fQVBJX0FVWF9XVUNfVEFCTEVbM10pCisKKworLy8gRkxBU0ggRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9GbGFzaFBvd2VyTW9kZUdldCBcCisgICAgKCh1aW50MzJfdCAoKikodm9pZCkpIFwKKyAgICBST01fQVBJX0ZMQVNIX1RBQkxFWzFdKQorCisjZGVmaW5lIFJPTV9GbGFzaFByb3RlY3Rpb25TZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMlNlY3RvckFkZHJlc3MsIHVpbnQzMl90IHVpMzJQcm90ZWN0TW9kZSkpIFwKKyAgICBST01fQVBJX0ZMQVNIX1RBQkxFWzJdKQorCisjZGVmaW5lIFJPTV9GbGFzaFByb3RlY3Rpb25HZXQgXAorICAgICgodWludDMyX3QgKCopKHVpbnQzMl90IHVpMzJTZWN0b3JBZGRyZXNzKSkgXAorICAgIFJPTV9BUElfRkxBU0hfVEFCTEVbM10pCisKKyNkZWZpbmUgUk9NX0ZsYXNoUHJvdGVjdGlvblNhdmUgXAorICAgICgodWludDMyX3QgKCopKHVpbnQzMl90IHVpMzJTZWN0b3JBZGRyZXNzKSkgXAorICAgIFJPTV9BUElfRkxBU0hfVEFCTEVbNF0pCisKKyNkZWZpbmUgUk9NX0ZsYXNoRWZ1c2VSZWFkUm93IFwKKyAgICAoKGJvb2wgKCopKHVpbnQzMl90ICpwdWkzMkVmdXNlRGF0YSwgdWludDMyX3QgdWkzMlJvd0FkZHJlc3MpKSBcCisgICAgUk9NX0FQSV9GTEFTSF9UQUJMRVs4XSkKKworI2RlZmluZSBST01fRmxhc2hEaXNhYmxlU2VjdG9yc0ZvcldyaXRlIFwKKyAgICAoKHZvaWQgKCopKHZvaWQpKSBcCisgICAgUk9NX0FQSV9GTEFTSF9UQUJMRVs5XSkKKworCisvLyBJMkMgRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9JMkNNYXN0ZXJJbml0RXhwQ2xrIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySTJDQ2xrLCBib29sIGJGYXN0KSkgXAorICAgIFJPTV9BUElfSTJDX1RBQkxFWzBdKQorCisjZGVmaW5lIFJPTV9JMkNNYXN0ZXJFcnIgXAorICAgICgodWludDMyX3QgKCopKHVpbnQzMl90IHVpMzJCYXNlKSkgXAorICAgIFJPTV9BUElfSTJDX1RBQkxFWzFdKQorCisKKy8vIElOVEVSUlVQVCBGVU5DVElPTlMKKyNkZWZpbmUgUk9NX0ludFByaW9yaXR5R3JvdXBpbmdTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJpdHMpKSBcCisgICAgUk9NX0FQSV9JTlRFUlJVUFRfVEFCTEVbMF0pCisKKyNkZWZpbmUgUk9NX0ludFByaW9yaXR5R3JvdXBpbmdHZXQgXAorICAgICgodWludDMyX3QgKCopKHZvaWQpKSBcCisgICAgUk9NX0FQSV9JTlRFUlJVUFRfVEFCTEVbMV0pCisKKyNkZWZpbmUgUk9NX0ludFByaW9yaXR5U2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQsIHVpbnQ4X3QgdWk4UHJpb3JpdHkpKSBcCisgICAgUk9NX0FQSV9JTlRFUlJVUFRfVEFCTEVbMl0pCisKKyNkZWZpbmUgUk9NX0ludFByaW9yaXR5R2V0IFwKKyAgICAoKGludDMyX3QgKCopKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpKSBcCisgICAgUk9NX0FQSV9JTlRFUlJVUFRfVEFCTEVbM10pCisKKyNkZWZpbmUgUk9NX0ludEVuYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySW50ZXJydXB0KSkgXAorICAgIFJPTV9BUElfSU5URVJSVVBUX1RBQkxFWzRdKQorCisjZGVmaW5lIFJPTV9JbnREaXNhYmxlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpKSBcCisgICAgUk9NX0FQSV9JTlRFUlJVUFRfVEFCTEVbNV0pCisKKyNkZWZpbmUgUk9NX0ludFBlbmRTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkludGVycnVwdCkpIFwKKyAgICBST01fQVBJX0lOVEVSUlVQVF9UQUJMRVs2XSkKKworI2RlZmluZSBST01fSW50UGVuZEdldCBcCisgICAgKChib29sICgqKSh1aW50MzJfdCB1aTMySW50ZXJydXB0KSkgXAorICAgIFJPTV9BUElfSU5URVJSVVBUX1RBQkxFWzddKQorCisjZGVmaW5lIFJPTV9JbnRQZW5kQ2xlYXIgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkludGVycnVwdCkpIFwKKyAgICBST01fQVBJX0lOVEVSUlVQVF9UQUJMRVs4XSkKKworCisvLyBJT0MgRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9JT0NQb3J0Q29uZmlndXJlU2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMyUG9ydElkLCB1aW50MzJfdCB1aTMySU9Db25maWcpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbMF0pCisKKyNkZWZpbmUgUk9NX0lPQ1BvcnRDb25maWd1cmVHZXQgXAorICAgICgodWludDMyX3QgKCopKHVpbnQzMl90IHVpMzJJT0lkKSkgXAorICAgIFJPTV9BUElfSU9DX1RBQkxFWzFdKQorCisjZGVmaW5lIFJPTV9JT0NJT1NodXRkb3duU2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySU9TaHV0ZG93bikpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVsyXSkKKworI2RlZmluZSBST01fSU9DSU9Nb2RlU2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySU9Nb2RlKSkgXAorICAgIFJPTV9BUElfSU9DX1RBQkxFWzRdKQorCisjZGVmaW5lIFJPTV9JT0NJT0ludFNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMkludCwgdWludDMyX3QgdWkzMkVkZ2VEZXQpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbNV0pCisKKyNkZWZpbmUgUk9NX0lPQ0lPUG9ydFB1bGxTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJQdWxsKSkgXAorICAgIFJPTV9BUElfSU9DX1RBQkxFWzZdKQorCisjZGVmaW5lIFJPTV9JT0NJT0h5c3RTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJIeXN0ZXJlc2lzKSkgXAorICAgIFJPTV9BUElfSU9DX1RBQkxFWzddKQorCisjZGVmaW5lIFJPTV9JT0NJT0lucHV0U2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySW5wdXQpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbOF0pCisKKyNkZWZpbmUgUk9NX0lPQ0lPU2xld0N0cmxTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJTbGV3RW5hYmxlKSkgXAorICAgIFJPTV9BUElfSU9DX1RBQkxFWzldKQorCisjZGVmaW5lIFJPTV9JT0NJT0RydlN0cmVuZ3RoU2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySU9DdXJyZW50LCB1aW50MzJfdCB1aTMyRHJ2U3RyZW5ndGgpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbMTBdKQorCisjZGVmaW5lIFJPTV9JT0NJT1BvcnRJZFNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMlBvcnRJZCkpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVsxMV0pCisKKyNkZWZpbmUgUk9NX0lPQ0ludEVuYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySU9JZCkpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVsxMl0pCisKKyNkZWZpbmUgUk9NX0lPQ0ludERpc2FibGUgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbMTNdKQorCisjZGVmaW5lIFJPTV9JT0NQaW5UeXBlR3Bpb0lucHV0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJT0lkKSkgXAorICAgIFJPTV9BUElfSU9DX1RBQkxFWzE0XSkKKworI2RlZmluZSBST01fSU9DUGluVHlwZUdwaW9PdXRwdXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbMTVdKQorCisjZGVmaW5lIFJPTV9JT0NQaW5UeXBlVWFydCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJ4LCB1aW50MzJfdCB1aTMyVHgsIHVpbnQzMl90IHVpMzJDdHMsIHVpbnQzMl90IHVpMzJSdHMpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbMTZdKQorCisjZGVmaW5lIFJPTV9JT0NQaW5UeXBlU3NpTWFzdGVyIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUngsIHVpbnQzMl90IHVpMzJUeCwgdWludDMyX3QgdWkzMkZzcywgdWludDMyX3QgdWkzMkNsaykpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVsxN10pCisKKyNkZWZpbmUgUk9NX0lPQ1BpblR5cGVTc2lTbGF2ZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJ4LCB1aW50MzJfdCB1aTMyVHgsIHVpbnQzMl90IHVpMzJGc3MsIHVpbnQzMl90IHVpMzJDbGspKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbMThdKQorCisjZGVmaW5lIFJPTV9JT0NQaW5UeXBlSTJjIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRGF0YSwgdWludDMyX3QgdWkzMkNsaykpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVsxOV0pCisKKyNkZWZpbmUgUk9NX0lPQ1BpblR5cGVBdXggXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbMjFdKQorCisKKy8vIFBSQ00gRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9QUkNNSW5mQ2xvY2tDb25maWd1cmVTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkNsa0RpdiwgdWludDMyX3QgdWkzMlBvd2VyTW9kZSkpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbMF0pCisKKyNkZWZpbmUgUk9NX1BSQ01JbmZDbG9ja0NvbmZpZ3VyZUdldCBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMlBvd2VyTW9kZSkpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbMV0pCisKKyNkZWZpbmUgUk9NX1BSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJDbGtDb25maWcsIHVpbnQzMl90IHVpMzJTYW1wbGVSYXRlKSkgXAorICAgIFJPTV9BUElfUFJDTV9UQUJMRVs0XSkKKworI2RlZmluZSBST01fUFJDTVBvd2VyRG9tYWluT24gXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkRvbWFpbnMpKSBcCisgICAgUk9NX0FQSV9QUkNNX1RBQkxFWzVdKQorCisjZGVmaW5lIFJPTV9QUkNNUG93ZXJEb21haW5PZmYgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkRvbWFpbnMpKSBcCisgICAgUk9NX0FQSV9QUkNNX1RBQkxFWzZdKQorCisjZGVmaW5lIFJPTV9QUkNNUGVyaXBoZXJhbFJ1bkVuYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCkpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbN10pCisKKyNkZWZpbmUgUk9NX1BSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCkpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbOF0pCisKKyNkZWZpbmUgUk9NX1BSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMlBlcmlwaGVyYWwpKSBcCisgICAgUk9NX0FQSV9QUkNNX1RBQkxFWzldKQorCisjZGVmaW5lIFJPTV9QUkNNUGVyaXBoZXJhbFNsZWVwRGlzYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCkpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbMTBdKQorCisjZGVmaW5lIFJPTV9QUkNNUGVyaXBoZXJhbERlZXBTbGVlcEVuYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCkpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbMTFdKQorCisjZGVmaW5lIFJPTV9QUkNNUGVyaXBoZXJhbERlZXBTbGVlcERpc2FibGUgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMlBlcmlwaGVyYWwpKSBcCisgICAgUk9NX0FQSV9QUkNNX1RBQkxFWzEyXSkKKworI2RlZmluZSBST01fUFJDTVBvd2VyRG9tYWluU3RhdHVzIFwKKyAgICAoKHVpbnQzMl90ICgqKSh1aW50MzJfdCB1aTMyRG9tYWlucykpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbMTNdKQorCisjZGVmaW5lIFJPTV9QUkNNRGVlcFNsZWVwIFwKKyAgICAoKHZvaWQgKCopKHZvaWQpKSBcCisgICAgUk9NX0FQSV9QUkNNX1RBQkxFWzE0XSkKKworCisvLyBTTVBIIEZVTkNUSU9OUworI2RlZmluZSBST01fU01QSEFjcXVpcmUgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMlNlbWFwaG9yZSkpIFwKKyAgICBST01fQVBJX1NNUEhfVEFCTEVbMF0pCisKKworLy8gU1NJIEZVTkNUSU9OUworI2RlZmluZSBST01fU1NJQ29uZmlnU2V0RXhwQ2xrIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyU1NJQ2xrLCB1aW50MzJfdCB1aTMyUHJvdG9jb2wsIHVpbnQzMl90IHVpMzJNb2RlLCB1aW50MzJfdCB1aTMyQml0UmF0ZSwgdWludDMyX3QgdWkzMkRhdGFXaWR0aCkpIFwKKyAgICBST01fQVBJX1NTSV9UQUJMRVswXSkKKworI2RlZmluZSBST01fU1NJRGF0YVB1dCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkRhdGEpKSBcCisgICAgUk9NX0FQSV9TU0lfVEFCTEVbMV0pCisKKyNkZWZpbmUgUk9NX1NTSURhdGFQdXROb25CbG9ja2luZyBcCisgICAgKChpbnQzMl90ICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkRhdGEpKSBcCisgICAgUk9NX0FQSV9TU0lfVEFCTEVbMl0pCisKKyNkZWZpbmUgUk9NX1NTSURhdGFHZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90ICpwdWkzMkRhdGEpKSBcCisgICAgUk9NX0FQSV9TU0lfVEFCTEVbM10pCisKKyNkZWZpbmUgUk9NX1NTSURhdGFHZXROb25CbG9ja2luZyBcCisgICAgKChpbnQzMl90ICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgKnB1aTMyRGF0YSkpIFwKKyAgICBST01fQVBJX1NTSV9UQUJMRVs0XSkKKworCisvLyBUSU1FUiBGVU5DVElPTlMKKyNkZWZpbmUgUk9NX1RpbWVyQ29uZmlndXJlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ29uZmlnKSkgXAorICAgIFJPTV9BUElfVElNRVJfVEFCTEVbMF0pCisKKyNkZWZpbmUgUk9NX1RpbWVyTGV2ZWxDb250cm9sIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIGJvb2wgYkludmVydCkpIFwKKyAgICBST01fQVBJX1RJTUVSX1RBQkxFWzFdKQorCisjZGVmaW5lIFJPTV9UaW1lclN0YWxsQ29udHJvbCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyLCBib29sIGJTdGFsbCkpIFwKKyAgICBST01fQVBJX1RJTUVSX1RBQkxFWzNdKQorCisjZGVmaW5lIFJPTV9UaW1lcldhaXRPblRyaWdnZXJDb250cm9sIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIGJvb2wgYldhaXQpKSBcCisgICAgUk9NX0FQSV9USU1FUl9UQUJMRVs0XSkKKworCisvLyBUUk5HIEZVTkNUSU9OUworI2RlZmluZSBST01fVFJOR051bWJlckdldCBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMldvcmQpKSBcCisgICAgUk9NX0FQSV9UUk5HX1RBQkxFWzFdKQorCisKKy8vIFVBUlQgRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9VQVJURklGT0xldmVsR2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCAqcHVpMzJUeExldmVsLCB1aW50MzJfdCAqcHVpMzJSeExldmVsKSkgXAorICAgIFJPTV9BUElfVUFSVF9UQUJMRVswXSkKKworI2RlZmluZSBST01fVUFSVENvbmZpZ1NldEV4cENsayBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlVBUlRDbGssIHVpbnQzMl90IHVpMzJCYXVkLCB1aW50MzJfdCB1aTMyQ29uZmlnKSkgXAorICAgIFJPTV9BUElfVUFSVF9UQUJMRVsxXSkKKworI2RlZmluZSBST01fVUFSVENvbmZpZ0dldEV4cENsayBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlVBUlRDbGssIHVpbnQzMl90ICpwdWkzMkJhdWQsIHVpbnQzMl90ICpwdWkzMkNvbmZpZykpIFwKKyAgICBST01fQVBJX1VBUlRfVEFCTEVbMl0pCisKKyNkZWZpbmUgUk9NX1VBUlREaXNhYmxlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlKSkgXAorICAgIFJPTV9BUElfVUFSVF9UQUJMRVszXSkKKworI2RlZmluZSBST01fVUFSVENoYXJHZXROb25CbG9ja2luZyBcCisgICAgKChpbnQzMl90ICgqKSh1aW50MzJfdCB1aTMyQmFzZSkpIFwKKyAgICBST01fQVBJX1VBUlRfVEFCTEVbNF0pCisKKyNkZWZpbmUgUk9NX1VBUlRDaGFyR2V0IFwKKyAgICAoKGludDMyX3QgKCopKHVpbnQzMl90IHVpMzJCYXNlKSkgXAorICAgIFJPTV9BUElfVUFSVF9UQUJMRVs1XSkKKworI2RlZmluZSBST01fVUFSVENoYXJQdXROb25CbG9ja2luZyBcCisgICAgKChib29sICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDhfdCB1aThEYXRhKSkgXAorICAgIFJPTV9BUElfVUFSVF9UQUJMRVs2XSkKKworI2RlZmluZSBST01fVUFSVENoYXJQdXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQ4X3QgdWk4RGF0YSkpIFwKKyAgICBST01fQVBJX1VBUlRfVEFCTEVbN10pCisKKworLy8gVURNQSBGVU5DVElPTlMKKyNkZWZpbmUgUk9NX3VETUFDaGFubmVsQXR0cmlidXRlRW5hYmxlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdWkzMkF0dHIpKSBcCisgICAgUk9NX0FQSV9VRE1BX1RBQkxFWzBdKQorCisjZGVmaW5lIFJPTV91RE1BQ2hhbm5lbEF0dHJpYnV0ZURpc2FibGUgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtLCB1aW50MzJfdCB1aTMyQXR0cikpIFwKKyAgICBST01fQVBJX1VETUFfVEFCTEVbMV0pCisKKyNkZWZpbmUgUk9NX3VETUFDaGFubmVsQXR0cmlidXRlR2V0IFwKKyAgICAoKHVpbnQzMl90ICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0pKSBcCisgICAgUk9NX0FQSV9VRE1BX1RBQkxFWzJdKQorCisjZGVmaW5lIFJPTV91RE1BQ2hhbm5lbENvbnRyb2xTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsU3RydWN0SW5kZXgsIHVpbnQzMl90IHVpMzJDb250cm9sKSkgXAorICAgIFJPTV9BUElfVURNQV9UQUJMRVszXSkKKworI2RlZmluZSBST01fdURNQUNoYW5uZWxTY2F0dGVyR2F0aGVyU2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdWkzMlRhc2tDb3VudCwgdm9pZCAqcHZUYXNrTGlzdCwgdWludDMyX3QgdWkzMklzUGVyaXBoU0cpKSBcCisgICAgUk9NX0FQSV9VRE1BX1RBQkxFWzVdKQorCisjZGVmaW5lIFJPTV91RE1BQ2hhbm5lbFNpemVHZXQgXAorICAgICgodWludDMyX3QgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbFN0cnVjdEluZGV4KSkgXAorICAgIFJPTV9BUElfVURNQV9UQUJMRVs2XSkKKworI2RlZmluZSBST01fdURNQUNoYW5uZWxNb2RlR2V0IFwKKyAgICAoKHVpbnQzMl90ICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCkpIFwKKyAgICBST01fQVBJX1VETUFfVEFCTEVbN10pCisKKworLy8gVklNUyBGVU5DVElPTlMKKyNkZWZpbmUgUk9NX1ZJTVNDb25maWd1cmUgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIGJvb2wgYlJvdW5kUm9iaW4sIGJvb2wgYlByZWZldGNoKSkgXAorICAgIFJPTV9BUElfVklNU19UQUJMRVswXSkKKworI2RlZmluZSBST01fVklNU01vZGVTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJNb2RlKSkgXAorICAgIFJPTV9BUElfVklNU19UQUJMRVsxXSkKKworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19ST01fSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yb21fY3J5cHRvLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yb21fY3J5cHRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUyNDIyYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JvbV9jcnlwdG8uYwpAQCAtMCwwICsxLDMwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICByb21fY3J5cHRvLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA5LTA5IDExOjU1OjU5ICswMjAwIChXZWQsIDA5IFNlcCAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0NTM2CisqCisqICBEZXNjcmlwdGlvbjogICAgVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBBUEkgdG8gdGhlIEFFUywgRUNDIGFuZAorKiAgICAgICAgICAgICAgICAgIFNIQTI1NiBmdW5jdGlvbnMgYnVpbHQgaW50byBST00gb24gdGhlIENDMjZ4eC4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3JvbV9jcnlwdG8uaD4KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8qIEFFUy0xMjggKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyogQUVTIC0gRUNCICovCit0eXBlZGVmIHZvaWQoKmFlc19lY2JfZW5jcnlwdF90KSh1aW50OF90ICosIHVpbnQxNl90LCB1aW50OF90ICopOworYWVzX2VjYl9lbmNyeXB0X3QgYWVzX2VjYl9lbmNyeXB0ID0gKGFlc19lY2JfZW5jcnlwdF90KSgweDEwMDE4YTk5KTsKKwordHlwZWRlZiB2b2lkKCphZXNfZWNiX2RlY3J5cHRfdCkodWludDhfdCAqLCB1aW50MTZfdCwgdWludDhfdCAqKTsKK2Flc19lY2JfZGVjcnlwdF90IGFlc19lY2JfZGVjcnlwdD0gKGFlc19lY2JfZGVjcnlwdF90KSgweDEwMDE4YWM1KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQUVTX0VDQl9FbmNyeXB0RGF0YQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQUVTX0VDQl9FbmNyeXB0RGF0YSh1aW50OF90ICp0ZXh0LCB1aW50MTZfdCB0ZXh0TGVuLCB1aW50OF90ICphZXNLZXkpCit7CisgIGFlc19lY2JfZW5jcnlwdCh0ZXh0LCB0ZXh0TGVuLCBhZXNLZXkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBBRVNfRUNCX0RlY3J5cHREYXRhCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBRVNfRUNCX0RlY3J5cHREYXRhKHVpbnQ4X3QgKnRleHQsIHVpbnQxNl90IHRleHRMZW4sIHVpbnQ4X3QgKmFlc0tleSkKK3sKKyAgYWVzX2VjYl9kZWNyeXB0KHRleHQsIHRleHRMZW4sIGFlc0tleSk7Cit9CisKKy8qIEFFUyAtIENDTSAqLwordHlwZWRlZiBpbnQ4X3QoKmFlc19jY21fZW5jcnlwdF90KSh1aW50OF90LCB1aW50OF90LCB1aW50OF90ICosIHVpbnQ4X3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QsIHVpbnQ4X3QgKiwgdWludDE2X3QsIHVpbnQ4X3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqLCB1aW50OF90KTsKK2Flc19jY21fZW5jcnlwdF90IGFlc19jY21fZW5jcnlwdCA9IChhZXNfY2NtX2VuY3J5cHRfdCkoMHgxMDAxOGExOSk7CisKK3R5cGVkZWYgaW50OF90KCphZXNfY2NtX2RlY3J5cHRfdCkodWludDhfdCwgdWludDhfdCwgdWludDhfdCAqLCB1aW50OF90ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90LCB1aW50OF90ICosIHVpbnQxNl90LCB1aW50OF90ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKiwgdWludDhfdCk7CithZXNfY2NtX2RlY3J5cHRfdCBhZXNfY2NtX2RlY3J5cHQ9IChhZXNfY2NtX2RlY3J5cHRfdCkoMHgxMDAxOGEzNSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEFFU19DQ01fRW5jcnlwdERhdGEKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDhfdAorQUVTX0NDTV9FbmNyeXB0RGF0YSh1aW50OF90IGVuY3J5cHRGbGFnLCB1aW50OF90IE1BQ0xlbiwgdWludDhfdCAqbm9uY2UsCisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWluVGV4dCwgdWludDE2X3QgdGV4dExlbiwKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYWRkRGF0YUJ1ZiwgdWludDE2X3QgYWRkQnVmTGVuLAorICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphZXNLZXksIHVpbnQ4X3QgKk1BQywgdWludDhfdCBjY21MVmFsKQoreworICByZXR1cm4gYWVzX2NjbV9lbmNyeXB0KGVuY3J5cHRGbGFnLCBNQUNMZW4sIG5vbmNlLCBwbGFpblRleHQsIHRleHRMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRGF0YUJ1ZiwgYWRkQnVmTGVuLCBhZXNLZXksIE1BQywgY2NtTFZhbCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEFFU19DQ01fRGVjcnlwdERhdGEKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDhfdAorQUVTX0NDTV9EZWNyeXB0RGF0YSh1aW50OF90IGRlY3J5cHRGbGFnLCB1aW50OF90IE1BQ0xlbiwgdWludDhfdCAqbm9uY2UsCisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlclRleHQsIHVpbnQxNl90IHRleHRMZW4sCisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFkZERhdGFCdWYsIHVpbnQxNl90IGFkZEJ1ZkxlbiwKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYWVzS2V5LCB1aW50OF90ICpNQUMsIHVpbnQ4X3QgY2NtTFZhbCkKK3sKKyAgcmV0dXJuIGFlc19jY21fZGVjcnlwdChkZWNyeXB0RmxhZywgTUFDTGVuLCBub25jZSwgY2lwaGVyVGV4dCwgdGV4dExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGREYXRhQnVmLCBhZGRCdWZMZW4sIGFlc0tleSwgTUFDLCBjY21MVmFsKTsKKworfQorCisvKiBBRVMgLSBDVFIgKi8KK3R5cGVkZWYgdWludDhfdCgqYWVzX2N0cl9lbmNyeXB0X3QpKHVpbnQ4X3QgKiwgdWludDE2X3QsIHVpbnQ4X3QgKiwgdWludDhfdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqKTsKK2Flc19jdHJfZW5jcnlwdF90IGFlc19jdHJfZW5jcnlwdCA9IChhZXNfY3RyX2VuY3J5cHRfdCkoMHgxMDAxNzVlZCk7CisKK3R5cGVkZWYgdWludDhfdCgqYWVzX2N0cl9kZWNyeXB0X3QpKHVpbnQ4X3QgKiwgdWludDE2X3QsIHVpbnQ4X3QgKiwgdWludDhfdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqKTsKK2Flc19jdHJfZGVjcnlwdF90IGFlc19jdHJfZGVjcnlwdD0gKGFlc19jdHJfZGVjcnlwdF90KSgweDEwMDE3NzcxKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQUVTX0NUUl9FbmNyeXB0RGF0YQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDhfdAorQUVTX0NUUl9FbmNyeXB0RGF0YSh1aW50OF90ICpwbGFpblRleHQsIHVpbnQxNl90IHRleHRMZW4sCisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFlc0tleSwgdWludDhfdCAqbm9uY2UsCisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmluaXRWZWN0b3IpCit7CisgIHJldHVybiBhZXNfY3RyX2VuY3J5cHQocGxhaW5UZXh0LCB0ZXh0TGVuLCBhZXNLZXksIG5vbmNlLCBpbml0VmVjdG9yKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQUVTX0NUUl9EZWNyeXB0RGF0YQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDhfdAorQUVTX0NUUl9EZWNyeXB0RGF0YSh1aW50OF90ICpjaXBoZXJUZXh0LCB1aW50MTZfdCB0ZXh0TGVuLAorICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphZXNLZXksIHVpbnQ4X3QgKm5vbmNlLAorICAgICAgICAgICAgICAgICAgICB1aW50OF90ICppbml0VmVjdG9yKQoreworICByZXR1cm4gYWVzX2N0cl9kZWNyeXB0KGNpcGhlclRleHQsIHRleHRMZW4sIGFlc0tleSwgbm9uY2UsIGluaXRWZWN0b3IpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8qIEVDQyAqLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjaWZkZWYgRUNDX1BSSU1FX05JU1QyNTZfQ1VSVkUKKy8vI2RlZmluZSBURVNUX05JU1QyNTYKKy8vI2RlZmluZSBQQVJBTV9QIE5JU1QyNTZfcDsKKyNkZWZpbmUgUEFSQU1fUCAweDEwMDE4YjBjOworCisvLyNkZWZpbmUgUEFSQU1fUiBOSVNUMjU2X3I7CisjZGVmaW5lIFBBUkFNX1IgMHgxMDAxOGIzMDsKKworLy8jZGVmaW5lIFBBUkFNX0EgTklTVDI1Nl9hOworI2RlZmluZSBQQVJBTV9BIDB4MTAwMThiNTQ7CisKKy8vI2RlZmluZSBQQVJBTV9CIE5JU1QyNTZfYjsKKyNkZWZpbmUgUEFSQU1fQiAweDEwMDE4Yjc4OworCisvLyNkZWZpbmUgUEFSQU1fR1ggTklTVDI1Nl9HeDsKKyNkZWZpbmUgUEFSQU1fR1ggMHgxMDAxOGI5YzsKKworLy8jZGVmaW5lIFBBUkFNX0dZIE5JU1QyNTZfR3k7CisjZGVmaW5lIFBBUkFNX0dZIDB4MTAwMThiYzA7CisKKyNlbmRpZgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEVDQ19pbml0aWFsaXplCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitFQ0NfaW5pdGlhbGl6ZSh1aW50MzJfdCAqcFdvcmt6b25lKQoreworICAvLyBJbml0aWFsaXplIGN1cnZlIHBhcmFtZXRlcnMKKyAgLy9kYXRhX3AgID0gKHVpbnQzMl90ICopUEFSQU1fUDsKKyAgKigodWludDMyX3QgKiopMHgyMDAwNGY0OCkgPSAodWludDMyX3QgKilQQVJBTV9QOworCisgIC8vZGF0YV9yICA9ICh1aW50MzJfdCAqKVBBUkFNX1I7CisgICooKHVpbnQzMl90ICoqKTB4MjAwMDRmNGMpID0gKHVpbnQzMl90ICopUEFSQU1fUjsKKworICAvL2RhdGFfYSAgPSAodWludDMyX3QgKilQQVJBTV9BOworICAqKCh1aW50MzJfdCAqKikweDIwMDA0ZjUwKSA9ICh1aW50MzJfdCAqKVBBUkFNX0E7CisKKyAgLy9kYXRhX2IgID0gKHVpbnQzMl90ICopUEFSQU1fQjsKKyAgKigodWludDMyX3QgKiopMHgyMDAwNGZhOCkgPSAodWludDMyX3QgKilQQVJBTV9COworCisgIC8vZGF0YV9HeCA9ICh1aW50MzJfdCAqKVBBUkFNX0dYOworICAqKCh1aW50MzJfdCAqKikweDIwMDA0ZmEwKSA9ICh1aW50MzJfdCAqKVBBUkFNX0dYOworCisgIC8vZGF0YV9HeSA9ICh1aW50MzJfdCAqKVBBUkFNX0dZOworICAqKCh1aW50MzJfdCAqKikweDIwMDA0ZmE0KSA9ICh1aW50MzJfdCAqKVBBUkFNX0dZOworCisgIC8vIEluaXRpYWxpemUgd2luZG93IHNpemUKKyAgLy93aW4gPSAodWludDhfdCkgRUNDX1dJTkRPV19TSVpFOworICAqKCh1aW50OF90ICopMHgyMDAwNGY0MCkgPSAodWludDhfdCkgRUNDX1dJTkRPV19TSVpFOworCisgIC8vIEluaXRpYWxpemUgd29yayB6b25lCisgIC8vd29ya3pvbmUgPSAodWludDMyX3QgKikgcFdvcmt6b25lOworICAqKCh1aW50MzJfdCAqKikweDIwMDA0ZjQ0KSA9ICh1aW50MzJfdCAqKSBwV29ya3pvbmU7Cit9CisKK3R5cGVkZWYgdWludDhfdCgqZWNjX2tleWdlbl90KSh1aW50MzJfdCAqLCB1aW50MzJfdCAqLHVpbnQzMl90ICosIHVpbnQzMl90ICopOworZWNjX2tleWdlbl90IGVjY19nZW5lcmF0ZWtleSA9IChlY2Nfa2V5Z2VuX3QpKDB4MTAwMTdkYmQpOworCit0eXBlZGVmIHVpbnQ4X3QoKmVjZHNhX3NpZ25fdCkodWludDMyX3QgKiwgdWludDMyX3QgKix1aW50MzJfdCAqLCB1aW50MzJfdCAqLCB1aW50MzJfdCAqKTsKK2VjZHNhX3NpZ25fdCBlY2NfZWNkc2Ffc2lnbiA9IChlY2RzYV9zaWduX3QpKDB4MTAwMTc5NjkpOworCit0eXBlZGVmIHVpbnQ4X3QoKmVjZHNhX3ZlcmlmeV90KSh1aW50MzJfdCAqLCB1aW50MzJfdCAqLHVpbnQzMl90ICosIHVpbnQzMl90ICosIHVpbnQzMl90ICopOworZWNkc2FfdmVyaWZ5X3QgZWNjX2VjZHNhX3ZlcmlmeSA9IChlY2RzYV92ZXJpZnlfdCkoMHgxMDAxN2IwMSk7CisKK3R5cGVkZWYgdWludDhfdCgqZWNkaF9jb21wdXRlU2hhcmVkU2VjcmV0X3QpKHVpbnQzMl90ICosIHVpbnQzMl90ICosdWludDMyX3QgKiwgdWludDMyX3QgKiwgdWludDMyX3QgKik7CitlY2RoX2NvbXB1dGVTaGFyZWRTZWNyZXRfdCBlY2RoX2NvbXB1dGVTaGFyZWRTZWNyZXQgPSAoZWNkaF9jb21wdXRlU2hhcmVkU2VjcmV0X3QpKDB4MTAwMTdkZWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBFQ0NfZ2VuZXJhdGVLZXkKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQ4X3QKK0VDQ19nZW5lcmF0ZUtleSh1aW50MzJfdCAqcmFuZFN0cmluZywgdWludDMyX3QgKnByaXZhdGVLZXksCisgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1YmxpY0tleV94LCB1aW50MzJfdCAqcHVibGljS2V5X3kpCit7CisgIHJldHVybiAodWludDhfdCllY2NfZ2VuZXJhdGVrZXkoKHVpbnQzMl90KilyYW5kU3RyaW5nLCAodWludDMyX3QqKXByaXZhdGVLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KilwdWJsaWNLZXlfeCwgKHVpbnQzMl90KilwdWJsaWNLZXlfeSk7CisKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRUNDX0VDRFNBX3NpZ24KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQ4X3QKK0VDQ19FQ0RTQV9zaWduKHVpbnQzMl90ICpzZWNyZXRLZXksIHVpbnQzMl90ICp0ZXh0LCB1aW50MzJfdCAqcmFuZFN0cmluZywKKyAgICAgICAgICAgICAgIHVpbnQzMl90ICpzaWduMSwgdWludDMyX3QgKnNpZ24yKQoreworICByZXR1cm4gKHVpbnQ4X3QpZWNjX2VjZHNhX3NpZ24oKHVpbnQzMl90KilzZWNyZXRLZXksICh1aW50MzJfdCopdGV4dCwgKHVpbnQzMl90KilyYW5kU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QqKXNpZ24xLCAodWludDMyX3QqKXNpZ24yKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRUNDX0VDRFNBX3ZlcmlmeQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDhfdAorRUNDX0VDRFNBX3ZlcmlmeSh1aW50MzJfdCAqcHVibGljS2V5X3gsIHVpbnQzMl90ICpwdWJsaWNLZXlfeSwKKyAgICAgICAgICAgICAgICAgdWludDMyX3QgKnRleHQsIHVpbnQzMl90ICpzaWduMSwgdWludDMyX3QgKnNpZ24yKQoreworICByZXR1cm4gKHVpbnQ4X3QpZWNjX2VjZHNhX3ZlcmlmeSgodWludDMyX3QqKXB1YmxpY0tleV94LCAodWludDMyX3QqKXB1YmxpY0tleV95LCAodWludDMyX3QqKXRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QqKXNpZ24xLCAodWludDMyX3QqKXNpZ24yKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRUNDX0VDREhfY29tcHV0ZVNoYXJlZFNlY3JldAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDhfdAorRUNDX0VDREhfY29tcHV0ZVNoYXJlZFNlY3JldCh1aW50MzJfdCAqcHJpdmF0ZUtleSwgdWludDMyX3QgKnB1YmxpY0tleV94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVibGljS2V5X3ksIHVpbnQzMl90ICpzaGFyZWRTZWNyZXRfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnNoYXJlZFNlY3JldF95KQoreworICByZXR1cm4gKHVpbnQ4X3QpZWNkaF9jb21wdXRlU2hhcmVkU2VjcmV0KCh1aW50MzJfdCopcHJpdmF0ZUtleSwgKHVpbnQzMl90KilwdWJsaWNLZXlfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCopcHVibGljS2V5X3ksICh1aW50MzJfdCopc2hhcmVkU2VjcmV0X3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QqKXNoYXJlZFNlY3JldF95KTsKK30KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vKiBTSEEtMjU2ICovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit0eXBlZGVmIHVpbnQ4X3QoKnNoYTI1Nl9mdWxsX3QpKFNIQTI1Nl9tZW1vcnlfdCAqLCB1aW50OF90ICosIHVpbnQ4X3QgKiwgdWludDMyX3QpOworc2hhMjU2X2Z1bGxfdCBzaGEyNTZfcnVuZnVsbGFsZyA9IChzaGEyNTZfZnVsbF90KSgweDEwMDE4MTI5KTsKKwordHlwZWRlZiB1aW50OF90KCpzaGEyNTZfaW5pdF90KShTSEEyNTZfbWVtb3J5X3QgKik7CitzaGEyNTZfaW5pdF90IHNoYTI1Nl9pbml0aWFsaXplID0gKHNoYTI1Nl9pbml0X3QpKDB4MTAwMTdmZmQpOworCit0eXBlZGVmIHVpbnQ4X3QoKnNoYTI1Nl9wcm9jZXNzX3QpKFNIQTI1Nl9tZW1vcnlfdCAqLCB1aW50OF90ICosIHVpbnQzMl90KTsKK3NoYTI1Nl9wcm9jZXNzX3Qgc2hhMjU2X2V4ZWN1dGUgPSAoc2hhMjU2X3Byb2Nlc3NfdCkoMHgxMDAxODAxOSk7CisKK3R5cGVkZWYgdWludDhfdCgqc2hhMjU2X2ZpbmFsX3QpKFNIQTI1Nl9tZW1vcnlfdCAqLCB1aW50OF90ICopOworc2hhMjU2X2ZpbmFsX3Qgc2hhMjU2X291dHB1dCA9IChzaGEyNTZfZmluYWxfdCkoMHgxMDAxODA4OSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFNIQTI1Nl9ydW5GdWxsQWxnb3JpdGhtCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50OF90CitTSEEyNTZfcnVuRnVsbEFsZ29yaXRobShTSEEyNTZfbWVtb3J5X3QgKm1lbW9yeSwgdWludDhfdCAqcEJ1ZkluLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYnVmTGVuLCB1aW50OF90ICpwQnVmT3V0KQoreworICByZXR1cm4gKHVpbnQ4X3Qpc2hhMjU2X3J1bmZ1bGxhbGcobWVtb3J5LCBwQnVmT3V0LCBwQnVmSW4sIGJ1Zkxlbik7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFNIQTI1Nl9pbml0aWFsaXplCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50OF90CitTSEEyNTZfaW5pdGlhbGl6ZShTSEEyNTZfbWVtb3J5X3QgKm1lbW9yeSkKK3sKKyAgcmV0dXJuICh1aW50OF90KXNoYTI1Nl9pbml0aWFsaXplKG1lbW9yeSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFNIQTI1Nl9leGVjdXRlCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50OF90CitTSEEyNTZfZXhlY3V0ZShTSEEyNTZfbWVtb3J5X3QgKm1lbW9yeSwgdWludDhfdCAqcEJ1ZkluLCB1aW50MzJfdCBidWZMZW4pCit7CisgIHJldHVybiAodWludDhfdClzaGEyNTZfZXhlY3V0ZShtZW1vcnkscEJ1ZkluLCBidWZMZW4pOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBTSEEyNTZfb3V0cHV0CisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50OF90CitTSEEyNTZfb3V0cHV0KFNIQTI1Nl9tZW1vcnlfdCAqbWVtb3J5LCB1aW50OF90ICpwQnVmT3V0KQoreworICByZXR1cm4gKHVpbnQ4X3Qpc2hhMjU2X291dHB1dChtZW1vcnksIHBCdWZPdXQpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcm9tX2NyeXB0by5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcm9tX2NyeXB0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MzdjMzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yb21fY3J5cHRvLmgKQEAgLTAsMCArMSwzOTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICByb21fY3J5cHRvLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA3LTE2IDEyOjEyOjA0ICswMjAwIChUaHUsIDE2IEp1bCAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0MTUxCisqCisqICBEZXNjcmlwdGlvbjogICAgVGhpcyBoZWFkZXIgZmlsZSBpcyB0aGUgQVBJIHRvIHRoZSBBRVMsIEVDQyBhbmQgU0hBMjU2CisqICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zIGJ1aWx0IGludG8gUk9NIG9uIHRoZSBDQzI2eHguCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBwZXJpcGhlcmFsX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCByb21fY3J5cHRvX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIFJPTV9DUllQVE9fSAorI2RlZmluZSBST01fQ1JZUFRPX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8qIEFFUy0xMjggKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgVXNlIGEgcmFuZG9tIDEyOCBiaXQga2V5IHRvIGVuY3J5cHQgZGF0YSB3aXRoIHRoZSBBRVMuCisgKgorICogXHBhcmFtIHRleHQgICAgUG9pbnRlciB0byBkYXRhIHRvIGVuY3J5cHQuCisgKiBccGFyYW0gdGV4dExlbiBMZW5ndGggb2YgdGV4dC4KKyAqIFxwYXJhbSBhZXNLZXkgIFBvaW50ZXIgdG8gMTI4IGJpdCBrZXkgdXNlZCB0byBlbmNyeXB0IHRleHQuCisgKgorICogXHJldHVybiBOb25lCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFFU19FQ0JfRW5jcnlwdERhdGEodWludDhfdCAqdGV4dCwgdWludDE2X3QgdGV4dExlbiwgdWludDhfdCAqYWVzS2V5KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgVXNlIGEgcmFuZG9tIDEyOCBiaXQga2V5IHRvIGRlY3J5cHQgZGF0YSB3aXRoIHRoZSBBRVMuCisgKgorICogXHBhcmFtIHRleHQgICAgUG9pbnRlciB0byBkYXRhIHRvIGRlY3J5cHQuCisgKiBccGFyYW0gdGV4dExlbiBMZW5ndGggb2YgdGV4dC4KKyAqIFxwYXJhbSBhZXNLZXkgIFBvaW50ZXIgdG8gMTI4IGJpdCBrZXkgdXNlZCB0byBkZWNyeXB0LiBUaGlzIGlzIHRoZSBzYW1lIGtleQorICogICAgICAgICAgICAgICAgdGhhdCB3YXMgdXNlZCB0byBvcmlnaW5hbGx5IGVuY3J5cHQgdGhpcyBkYXRhLgorICoKKyAqIFxyZXR1cm4gTm9uZQorICovCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBRVNfRUNCX0RlY3J5cHREYXRhKHVpbnQ4X3QgKnRleHQsIHVpbnQxNl90IHRleHRMZW4sIHVpbnQ4X3QgKmFlc0tleSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qIQorICogXGJyaWVmIEF1dGhlbnRpY2F0ZSBhbmQgb3B0aW9uYWxseSBlbmNyeXB0IG1lc3NhZ2UgcGxhaW5UZXh0LgorICoKKyAqIFxwYXJhbSBlbmNyeXB0RmxhZyAgRW5jcnlwdGlvbiBmbGFnLgorICogLSBzZXQgdG8gXGMgdHJ1ZSBmb3IgYXV0aGVudGljYXRpb24gd2l0aCBlbmNyeXB0aW9uLgorICogLSBzZXQgdG8gXGMgZmFsc2UgZm9yIGF1dGhlbnRpY2F0aW9uIG9ubHkuCisgKiBccGFyYW0gTUFDTGVuICAgICAgIExlbmd0aCBvZiBNQUMgaW4gYnl0ZXMuCisgKiBccGFyYW0gbm9uY2UgICAgICAgIFBvaW50ZXIgdG8gcmFuZG9tIG5vbmNlLiBOb25jZSBsZW5ndGggPSAxNSAtIGNjbUxWYWwuCisgKiBccGFyYW0gcGxhaW5UZXh0ICAgIFBvaW50ZXIgdG8gdGV4dCB0byBlbmNyeXB0LCBpbnB1dCBhbmQgb3V0cHV0LgorICogXHBhcmFtIHRleHRMZW4gICAgICBMZW5ndGggb2YgdGV4dCB0byBlbmNyeXB0LgorICogXHBhcmFtIGFkZERhdGFCdWYgICBQb2ludGVyIHRvIGFkZGl0aW9uYWwgZGF0YSBmb3IgYXV0aGVudGljYXRpb24KKyAqIFxwYXJhbSBhZGRCdWZMZW4gICAgQWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBidWZmZXIgbGVuZ3RoLgorICogXHBhcmFtIGFlc0tleSAgICAgICBQb2ludGVyIHRvIHRoZSBBRVMga2V5IG9yIGtleSBleHBhbnNpb24gYnVmZmVyLgorICogXHBhcmFtIE1BQyAgICAgICAgICBQb2ludGVyIHRvIDE2IGJ5dGUgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIG91dHB1dCBidWZmZXIuCisgKiBccGFyYW0gY2NtTFZhbCAgICAgIENDTSBMIHZhbHVlIHRvIGJlIHVzZWQuIFZhbHVlcyB7MiwzfS4KKyAqCisgKiBccmV0dXJuIFplcm8gd2hlbiBzdWNjZXNzZnVsLgorICovCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gaW50OF90IEFFU19DQ01fRW5jcnlwdERhdGEodWludDhfdCBlbmNyeXB0RmxhZywgdWludDhfdCBNQUNMZW4sIHVpbnQ4X3QgKm5vbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWluVGV4dCwgdWludDE2X3QgdGV4dExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphZGREYXRhQnVmLCB1aW50MTZfdCBhZGRCdWZMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYWVzS2V5LCB1aW50OF90ICpNQUMsIHVpbnQ4X3QgY2NtTFZhbCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qIQorICogXGJyaWVmIEF1dGhlbnRpY2F0ZSBhbmQgb3B0aW9uYWxseSBkZWNyeXB0IG1lc3NhZ2UgY2lwaGVyVGV4dC4KKyAqCisgKiBccGFyYW0gZGVjcnlwdEZsYWcgRGVjcnlwdGlvbiBmbGFnLgorICogLSBcYyB0cnVlIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIGRlY3J5cHRpb24uCisgKiAtIFxjIGZhbHNlIGZvciBhdXRoZW50aWNhdGlvbiBvbmx5LgorICogXHBhcmFtIE1BQ0xlbiAgICAgIExlbmd0aCBvZiBNQUMgaW4gYnl0ZXMuCisgKiBccGFyYW0gbm9uY2UgICAgICAgUG9pbnRlciB0byByYW5kb20gbm9uY2UuIE5vbmNlIGxlbmd0aCA9IDE1IC0gY2NtTFZhbC4KKyAqIFxwYXJhbSBjaXBoZXJUZXh0ICBQb2ludGVyIHRvIHRleHQgdG8gZGVjcnlwdCwgaW5wdXQgYW5kIG91dHB1dC4KKyAqIFxwYXJhbSB0ZXh0TGVuICAgICBMZW5ndGggb2YgdGV4dCB0byBkZWNyeXB0LgorICogXHBhcmFtIGFkZERhdGFCdWYgIFBvaW50ZXIgdG8gYWRkaXRpb25hbCBkYXRhIGZvciBhdXRoZW50aWNhdGlvbgorICogXHBhcmFtIGFkZEJ1ZkxlbiAgIEFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gYnVmZmVyIGxlbmd0aC4KKyAqIFxwYXJhbSBhZXNLZXkgICAgICBQb2ludGVyIHRvIHRoZSBBRVMga2V5IG9yIGtleSBleHBhbnNpb24gYnVmZmVyLgorICogXHBhcmFtIE1BQyAgICAgICAgIFBvaW50ZXIgdG8gMTYgYnl0ZSBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGUgb3V0cHV0IGJ1ZmZlci4KKyAqIFxwYXJhbSBjY21MVmFsICAgICBDQ00gTCB2YWx1ZSB0byBiZSB1c2VkLiBWYWx1ZXMgezIsM30uCisgKgorICogXHJldHVybiBaZXJvIHdoZW4gU3VjY2Vzc2Z1bC4KKyAqLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGludDhfdCBBRVNfQ0NNX0RlY3J5cHREYXRhKHVpbnQ4X3QgZGVjcnlwdEZsYWcsIHVpbnQ4X3QgTUFDTGVuLCB1aW50OF90ICpub25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJUZXh0LCB1aW50MTZfdCB0ZXh0TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFkZERhdGFCdWYsIHVpbnQxNl90IGFkZEJ1ZkxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphZXNLZXksIHVpbnQ4X3QgKk1BQywgdWludDhfdCBjY21MVmFsKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgRW5jcnlwdCBwbGFpbnRleHQgdXNpbmcgdGhlIEFFUyBrZXksIG5vbmNlIGFuZCBpbml0aWFsaXphdGlvbiB2ZWN0b3IuCisgKgorICogXHBhcmFtIHBsYWluVGV4dCAgUG9pbnRlciB0byB0ZXh0IHRvIGVuY3J5cHQuCisgKiBccGFyYW0gdGV4dExlbiAgICBMZW5ndGggb2YgdGV4dC4KKyAqIFxwYXJhbSBhZXNLZXkgICAgIFBvaW50ZXIgdG8gMTI4IGJpdCBrZXkgdXNlZCB0byBlbmNyeXB0IHRleHQuCisgKiBccGFyYW0gbm9uY2UgICAgICBQb2ludGVyIHRvIDQgYnl0ZSBub25jZS4KKyAqIFxwYXJhbSBpbml0VmVjdG9yIFBvaW50ZXIgdG8gOCBieXRlIHJhbmRvbSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuCisgKgorICogXHJldHVybiBOb25lCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50OF90IEFFU19DVFJfRW5jcnlwdERhdGEodWludDhfdCAqcGxhaW5UZXh0LCB1aW50MTZfdCB0ZXh0TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphZXNLZXksIHVpbnQ4X3QgKm5vbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICppbml0VmVjdG9yKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgRGVjcnlwdCBjaXBoZXJ0ZXh0IHVzaW5nIHRoZSBBRVMga2V5LCBub25jZSBhbmQgaW5pdGlhbGl6YXRpb24gdmVjdG9yLgorICoKKyAqIFxwYXJhbSBjaXBoZXJUZXh0IFBvaW50ZXIgdG8gdGV4dCB0byBkZWNyeXB0CisgKiBccGFyYW0gdGV4dExlbiAgICBMZW5ndGggb2YgdGV4dC4KKyAqIFxwYXJhbSBhZXNLZXkgICAgIFBvaW50ZXIgdG8gMTI4IGJpdCBrZXkgdXNlZCB0byBlbmNyeXB0IHRleHQuCisgKiBccGFyYW0gbm9uY2UgICAgICBQb2ludGVyIHRvIDQgYnl0ZSBub25jZS4KKyAqIFxwYXJhbSBpbml0VmVjdG9yIFBvaW50ZXIgdG8gOCBieXRlIHJhbmRvbSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuCisgKgorICogXHJldHVybiBOb25lCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50OF90IEFFU19DVFJfRGVjcnlwdERhdGEodWludDhfdCAqY2lwaGVyVGV4dCwgdWludDE2X3QgdGV4dExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYWVzS2V5LCB1aW50OF90ICpub25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqaW5pdFZlY3Rvcik7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyogRUNDICovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8qIFdpbmRvdyBzaXplLCB2YWxpZCB2YWx1ZXMgYXJlIDIsMyw0LDUuCisgKiBIaWdoZXIgdGhlIHZhbHVlLCBmYXN0ZXIgdGhlIGNvbXB1dGF0aW9uIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZS4KKyAqCisgKiBSZWNvbW1lbmRlZCB3b3Jrem9uZSBzaXplIChpbiA0LWJ5dGUgd29yZHMpCisgKiBXaW5kb3cgc2l6ZTogMywgV29ya3pvbmUgc2l6ZTogMjc1CisgKgorICovCisjZGVmaW5lIEVDQ19XSU5ET1dfU0laRSAzCisKKy8qCisgKiBFQ0MgU3VwcG9ydGVkIEN1cnZlcywgZGVmaW5lIG9uZToKKyAqIEVDQ19QUklNRV9OSVNUMjU2X0NVUlZFCisgKi8KKyNkZWZpbmUgRUNDX1BSSU1FX05JU1QyNTZfQ1VSVkUKKworLyoKKyAqIEVDQyBSZXR1cm4gU3RhdHVzIEZsYWdzLgorICovCisvLyBTY2FsYXIgbXVsdGlwbGljYXRpb24gc3RhdHVzCisjZGVmaW5lIEVDQ19NT0RVTFVTX0VWRU4gICAgICAgICAgICAgICAgICAgMHhEQworI2RlZmluZSBFQ0NfTU9EVUxVU19MQVJHRVJfVEhBTl8yNTVfV09SRFMgIDB4RDIKKyNkZWZpbmUgRUNDX01PRFVMVVNfTEVOR1RIX1pFUk8gICAgICAgICAgICAweDA4CisjZGVmaW5lIEVDQ19NT0RVTFVTX01TV19JU19aRVJPICAgICAgICAgICAgMHgzMAorI2RlZmluZSBFQ0NfU0NBTEFSX1RPT19MT05HICAgICAgICAgICAgICAgIDB4MzUKKyNkZWZpbmUgRUNDX1NDQUxBUl9MRU5HVEhfWkVSTyAgICAgICAgICAgICAweDUzCisjZGVmaW5lIEVDQ19PUkRFUl9UT09fTE9ORyAgICAgICAgICAgICAgICAgMHhDNgorI2RlZmluZSBFQ0NfT1JERVJfTEVOR1RIX1pFUk8gICAgICAgICAgICAgIDB4NkMKKyNkZWZpbmUgRUNDX1hfQ09PUkRfVE9PX0xPTkcgICAgICAgICAgICAgICAweDNDCisjZGVmaW5lIEVDQ19YX0NPT1JEX0xFTkdUSF9aRVJPICAgICAgICAgICAgMHhDMworI2RlZmluZSBFQ0NfWV9DT09SRF9UT09fTE9ORyAgICAgICAgICAgICAgIDB4NjUKKyNkZWZpbmUgRUNDX1lfQ09PUkRfTEVOR1RIX1pFUk8gICAgICAgICAgICAweDU2CisjZGVmaW5lIEVDQ19BX0NPRUZfVE9PX0xPTkcgICAgICAgICAgICAgICAgMHg1QworI2RlZmluZSBFQ0NfQV9DT0VGX0xFTkdUSF9aRVJPICAgICAgICAgICAgIDB4QzUKKyNkZWZpbmUgRUNDX0JBRF9XSU5ET1dfU0laRSAgICAgICAgICAgICAgICAweDY2CisjZGVmaW5lIEVDQ19TQ0FMQVJfTVVMX09LICAgICAgICAgICAgICAgICAgMHg5OQorCisvLyBFQ0RTQSBhbmQgRUNESCBzdGF0dXMKKyNkZWZpbmUgRUNDX09SREVSX0xBUkdFUl9USEFOXzI1NV9XT1JEUyAgICAweDI4CisjZGVmaW5lIEVDQ19PUkRFUl9FVkVOICAgICAgICAgICAgICAgICAgICAgMHg4MgorI2RlZmluZSBFQ0NfT1JERVJfTVNXX0lTX1pFUk8gICAgICAgICAgICAgIDB4MjMKKyNkZWZpbmUgRUNDX0VDQ19LRVlfVE9PX0xPTkcgICAgICAgICAgICAgICAweDI1CisjZGVmaW5lIEVDQ19FQ0NfS0VZX0xFTkdUSF9aRVJPICAgICAgICAgICAgMHg1MgorI2RlZmluZSBFQ0NfRElHRVNUX1RPT19MT05HICAgICAgICAgICAgICAgIDB4MjcKKyNkZWZpbmUgRUNDX0RJR0VTVF9MRU5HVEhfWkVSTyAgICAgICAgICAgICAweDcyCisjZGVmaW5lIEVDQ19FQ0RTQV9TSUdOX09LICAgICAgICAgICAgICAgICAgMHgzMgorI2RlZmluZSBFQ0NfRUNEU0FfSU5WQUxJRF9TSUdOQVRVUkUgICAgICAgIDB4NUEKKyNkZWZpbmUgRUNDX0VDRFNBX1ZBTElEX1NJR05BVFVSRSAgICAgICAgICAweEE1CisjZGVmaW5lIEVDQ19TSUdfUDFfVE9PX0xPTkcgICAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBFQ0NfU0lHX1AxX0xFTkdUSF9aRVJPICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgRUNDX1NJR19QMl9UT09fTE9ORyAgICAgICAgICAgICAgICAweDIyCisjZGVmaW5lIEVDQ19TSUdfUDJfTEVOR1RIX1pFUk8gICAgICAgICAgICAgMHgyMQorCisjZGVmaW5lIEVDQ19FQ0RTQV9LRVlHRU5fT0sgICAgICAgICAgICAgICAgRUNDX1NDQUxBUl9NVUxfT0sKKyNkZWZpbmUgRUNDX0VDREhfS0VZR0VOX09LICAgICAgICAgICAgICAgICBFQ0NfU0NBTEFSX01VTF9PSworI2RlZmluZSBFQ0NfRUNESF9DT01NT05fS0VZX09LICAgICAgICAgICAgIEVDQ19TQ0FMQVJfTVVMX09LCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qIQorICogXGJyaWVmIFBhc3MgcG9pbnRlciB0byBFQ0MgbWVtb3J5IGFsbG9jYXRpb24gdG8gRUNDIGVuZ2luZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYWdhaW4gdG8gcG9pbnQgdGhlIEVDQyB3b3Jrem9uZSBhdAorICogYSBkaWZmZXJlbnQgbWVtb3J5IGJ1ZmZlci4KKyAqCisgKiBccGFyYW0gcFdvcmt6b25lIFBvaW50ZXIgdG8gbWVtb3J5IGFsbG9jYXRlZCBmb3IgY29tcHV0YXRpb25zLCBpbnB1dC4KKyAqICAgICAgICAgICAgICAgICAgU2VlIGRlc2NyaXB0aW9uIGF0IGJlZ2lubmluZyBvZiBFQ0Mgc2VjdGlvbiBmb3IKKyAqICAgICAgICAgICAgICAgICAgbWVtb3J5IHJlcXVpcmVtZW50cy4KKyAqCisgKiBccmV0dXJuIE5vbmUKKyAqLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIGV4dGVybiB2b2lkIEVDQ19pbml0aWFsaXplKHVpbnQzMl90ICpwV29ya3pvbmUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgLyohCisgKiBcYnJpZWYgR2VuZXJhdGUgYSBrZXkuCisgKgorICogVGhpcyBpcyB1c2VkIGZvciBib3RoIEVDREggYW5kIEVDRFNBLgorICoKKyAqIFxwYXJhbSByYW5kU3RyaW5nICBQb2ludGVyIHRvIHJhbmRvbSBzdHJpbmcsIGlucHV0LgorICogXHBhcmFtIHByaXZhdGVLZXkgIFBvaW50ZXIgdG8gdGhlIHByaXZhdGUga2V5LCBvdXRwdXQuCisgKiBccGFyYW0gcHVibGljS2V5X3ggUG9pbnRlciB0byBwdWJsaWMga2V5IFgtY29vcmRpbmF0ZSwgb3V0cHV0LgorICogXHBhcmFtIHB1YmxpY0tleV95IFBvaW50ZXIgdG8gcHVibGljIGtleSBZLWNvb3JkaW5hdGUsIG91dHB1dC4KKyAqCisgKiBccmV0dXJuIFN0YXR1cworICovCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDhfdCBFQ0NfZ2VuZXJhdGVLZXkodWludDMyX3QgKnJhbmRTdHJpbmcsIHVpbnQzMl90ICpwcml2YXRlS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWJsaWNLZXlfeCwgdWludDMyX3QgKnB1YmxpY0tleV95KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgU2lnbiBkYXRhLgorICoKKyAqIFxwYXJhbSBzZWNyZXRLZXkgIFBvaW50ZXIgdG8gdGhlIHNlY3JldCBrZXksIGlucHV0LgorICogXHBhcmFtIHRleHQgICAgICAgUG9pbnRlciB0byB0aGUgbWVzc2FnZSwgaW5wdXQuCisgKiBccGFyYW0gcmFuZFN0cmluZyBQb2ludGVyIHRvIHJhbmRvbSBzdHJpbmcsIGlucHV0LgorICogXHBhcmFtIHNpZ24xICAgICAgUG9pbnRlciB0byBzaWduYXR1cmUgcGFydCAxLCBvdXRwdXQuCisgKiBccGFyYW0gc2lnbjIgICAgICBQb2ludGVyIHRvIHNpZ25hdHVyZSBwYXJ0IDIsIG91dHB1dC4KKyAqCisgKiBccmV0dXJuIFN0YXR1cworICovCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDhfdCBFQ0NfRUNEU0Ffc2lnbih1aW50MzJfdCAqc2VjcmV0S2V5LCB1aW50MzJfdCAqdGV4dCwgdWludDMyX3QgKnJhbmRTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqc2lnbjEsIHVpbnQzMl90ICpzaWduMik7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qIQorICogXGJyaWVmIFZlcmlmeSBzaWduYXR1cmUuCisgKgorICogXHBhcmFtIHB1YmxpY0tleV94IFBvaW50ZXIgdG8gcHVibGljIGtleSBYLWNvb3JkaW5hdGUsIGlucHV0LgorICogXHBhcmFtIHB1YmxpY0tleV95IFBvaW50ZXIgdG8gcHVibGljIGtleSBZLWNvb3JkaW5hdGUsIGlucHV0LgorICogXHBhcmFtIHRleHQgICAgICAgIFBvaW50ZXIgdG8gbWVzc2FnZSBkYXRhLCBpbnB1dC4KKyAqIFxwYXJhbSBzaWduMSAgICAgICBQb2ludGVyIHRvIHNpZ25hdHVyZSBwYXJ0IDEsIGlucHV0LgorICogXHBhcmFtIHNpZ24yICAgICAgIFBvaW50ZXIgdG8gc2lnbmF0dXJlIHBhcnQgMiwgaW5wdXQuCisgKgorICogXHJldHVybiBTdGF0dXMKKyAqLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQ4X3QgRUNDX0VDRFNBX3ZlcmlmeSh1aW50MzJfdCAqcHVibGljS2V5X3gsIHVpbnQzMl90ICpwdWJsaWNLZXlfeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnRleHQsIHVpbnQzMl90ICpzaWduMSwgdWludDMyX3QgKnNpZ24yKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgQ29tcHV0ZSB0aGUgc2hhcmVkIHNlY3JldC4KKyAqCisgKiBccGFyYW0gcHJpdmF0ZUtleSAgICAgUG9pbnRlciB0byBwcml2YXRlIGtleSwgaW5wdXQuCisgKiBccGFyYW0gcHVibGljS2V5X3ggICAgUG9pbnRlciB0byBwdWJsaWMga2V5IFgtY29vcmRpbmF0ZSwgaW5wdXQuCisgKiBccGFyYW0gcHVibGljS2V5X3kgICAgUG9pbnRlciB0byBwdWJsaWMga2V5IFktY29vcmRpbmF0ZSwgaW5wdXQuCisgKiBccGFyYW0gc2hhcmVkU2VjcmV0X3ggUG9pbnRlciB0byBzaGFyZWQgc2VjcmV0IFgtY29vcmRpbmF0ZSwgb3V0cHV0LgorICogXHBhcmFtIHNoYXJlZFNlY3JldF95IFBvaW50ZXIgdG8gc2hhcmVkIHNlY3JldCBZLWNvb3JkaW5hdGUsIG91dHB1dC4KKyAqCisgKiBccmV0dXJuIFN0YXR1cworICovCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDhfdCBFQ0NfRUNESF9jb21wdXRlU2hhcmVkU2VjcmV0KHVpbnQzMl90ICpwcml2YXRlS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVibGljS2V5X3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWJsaWNLZXlfeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnNoYXJlZFNlY3JldF94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqc2hhcmVkU2VjcmV0X3kpOworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vKiBTSEEtMjU2ICovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vISBcYnJpZWYgQSBTSEEyNTZfbWVtb3J5X3QgdmFyaWFibGUgb2YgdGhpcyB0eXBlIG11c3QgYmUgYWxsb2NhdGVkIGJlZm9yZSBydW5uaW5nIGFueQorLy8hICAgICAgICBTSEEyNTYgZnVuY3Rpb25zLgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdWludDMyX3Qgc3RhdGVbOF07CisgIHVpbnQzMl90IHRleHRMZW5bMl07CisgIHVpbnQzMl90IFdbMTZdOworfSBTSEEyNTZfbWVtb3J5X3Q7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qIQorICogXGJyaWVmIFBlcmZvcm0gU0hBMjU2IG9uIHRoZSB0aGUgaW5wdXQgZGF0YS4KKyAqCisgKiBUaGUgaW5wdXQgYW5kIG91dHB1dCBidWZmZXIgY2FuIHBvaW50IHRvIHRoZSBzYW1lIG1lbW9yeS4KKyAqIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgY2FsbGluZyBccmVmIFNIQTI1Nl9pbml0aWFsaXplKCksCisgKiBccmVmIFNIQTI1Nl9leGVjdXRlKCkgYW5kIFxyZWYgU0hBMjU2X291dHB1dCgpIHNlcXVlbnRpYWxseS4KKyAqCisgKiBccGFyYW0gbWVtb3J5ICBQb2ludGVyIHRvIG1lbW9yeSBmb3Igb3BlcmF0aW9ucywgaW5wdXQuCisgKiBccGFyYW0gcEJ1ZkluICBQb2ludGVyIHRvIGlucHV0IGJ1ZmZlciwgaW5wdXQuCisgKiBccGFyYW0gYnVmTGVuICBMZW5ndGggb2YgaW5wdXQuCisgKiBccGFyYW0gcEJ1Zk91dCBQb2ludGVyIHRvIG91dHB1dCBidWZmZXIsIG91dHB1dC4KKyAqCisgKiBccmV0dXJuIFN0YXR1cworICovCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDhfdCBTSEEyNTZfcnVuRnVsbEFsZ29yaXRobShTSEEyNTZfbWVtb3J5X3QgKm1lbW9yeSwgdWludDhfdCAqcEJ1ZkluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYnVmTGVuLCB1aW50OF90ICpwQnVmT3V0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgSW50aWFsaXplcyB0aGUgU0hBMjU2IGVuZ2luZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIG9uY2UgYmVmb3JlIGFsbCBvdGhlciBTSEEyNTYgZnVuY3Rpb25zIG90aGVyIHRoYW4KKyAqIFxyZWYgU0hBMjU2X3J1bkZ1bGxBbGdvcml0aG0oKS4KKyAqCisgKiBccGFyYW0gd29ya1pvbmUgUG9pbnRlciB0byBtZW1vcnkgZm9yIG9wZXJhdGlvbnMsIGlucHV0LgorICoKKyAqIFxyZXR1cm4gU3RhdHVzCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50OF90IFNIQTI1Nl9pbml0aWFsaXplKFNIQTI1Nl9tZW1vcnlfdCAqd29ya1pvbmUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiEKKyAqIFxicmllZiBQZXJmb3JtIFNIQTI1Ni4KKyAqCisgKiBNdXN0IGNhbGwgXHJlZiBTSEEyNTZfb3V0cHV0KCkgdG8gcmVjZWl2ZSBvdXRwdXQgZnJvbSB0aGlzIG9wZXJhdGlvbi4KKyAqCisgKiBccGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gbWVtb3J5IGZvciBvcGVyYXRpb25zLCBpbnB1dC4KKyAqIFxwYXJhbSBwQnVmSW4gUG9pbnRlciB0byBpbnB1dCB0ZXh0LCBpbnB1dC4KKyAqIFxwYXJhbSBidWZMZW4gTGVuZ3RoIG9mIGlucHV0LCBpbnB1dC4KKyAqCisgKiBccmV0dXJuIFN0YXR1cworICovCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDhfdCBTSEEyNTZfZXhlY3V0ZShTSEEyNTZfbWVtb3J5X3QgKmNvbmZpZywgdWludDhfdCAqcEJ1ZkluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYnVmTGVuKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgQ29tcGxldGUgdGhlIHByb2Nlc3MgYnkgcGFzc2luZyB0aGUgbW9kaWZpZWQgZGF0YSBiYWNrLgorICoKKyAqIFxwYXJhbSBtZW1vcnkgIFBvaW50ZXIgdG8gbWVtb3J5IGZvciBvcGVyYXRpb25zLCBpbnB1dC4KKyAqIFxwYXJhbSBwQnVmT3V0IFBvaW50ZXIgdG8gb3V0cHV0IGJ1ZmZlciwgb3V0cHV0LiBCdWZmZXIgbXVzdCBiZSBhdCBsZWFzdCAzMiBieXRlcyBsb25nLgorICoKKyAqIFxyZXR1cm4gU3RhdHVzCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50OF90IFNIQTI1Nl9vdXRwdXQoU0hBMjU2X21lbW9yeV90ICptZW1vcnksIHVpbnQ4X3QgKnBCdWZPdXQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogUk9NX0NSWVBUT19IICovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NldHVwLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYjZiYmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zZXR1cC5jCkBAIC0wLDAgKzEsMTI4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHNldHVwLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA2LTAzIDE0OjIzOjI2ICswMjAwIChGcmksIDAzIEp1biAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2NTkzCisqCisqICBEZXNjcmlwdGlvbjogICAgU2V0dXAgZmlsZSBmb3IgQ0MxM3h4L0NDMjZ4eCBkZXZpY2VzLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gSGFyZHdhcmUgaGVhZGVycworI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zZXR1cC5oPgorLy8gIyMjIyMgSU5DTFVERSBJTiBST00gQkVHSU4gIyMjIyMKKy8vIFdlIG5lZWQgaW50cmluc2ljIGZ1bmN0aW9ucyBmb3IgSUFSIChpZiB1c2VkIGluIHNvdXJjZSBjb2RlKQorI2lmZGVmIF9fSUFSX1NZU1RFTVNfSUNDX18KKyNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+CisjZW5kaWYKKy8vICMjIyMjIElOQ0xVREUgSU4gUk9NIEVORCAjIyMjIworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgU2V0dXBUcmltRGV2aWNlCisgICAgI2RlZmluZSBTZXR1cFRyaW1EZXZpY2UgICAgICAgICAgICAgICAgIE5PUk9NX1NldHVwVHJpbURldmljZQorICAgICN1bmRlZiAgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzEKKyAgICAjZGVmaW5lIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcxIE5PUk9NX1NldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcxCisgICAgI3VuZGVmICBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMgorICAgICNkZWZpbmUgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzIgTk9ST01fU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzIKKyAgICAjdW5kZWYgIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmczCisgICAgI2RlZmluZSBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMyBOT1JPTV9TZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMworICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yQWRjU2hNb2RlRW4KKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFkY1NoTW9kZUVuICAgICAgTk9ST01fU2V0dXBHZXRUcmltRm9yQWRjU2hNb2RlRW4KKyAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvckFkY1NoVmJ1ZkVuCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JBZGNTaFZidWZFbiAgICAgIE5PUk9NX1NldHVwR2V0VHJpbUZvckFkY1NoVmJ1ZkVuCisgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JBbXBjb21wQ3RybAorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQW1wY29tcEN0cmwgICAgICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JBbXBjb21wQ3RybAorICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMQorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMSAgICAgICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgxCisgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgyCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgyICAgICAgIE5PUk9NX1NldHVwR2V0VHJpbUZvckFtcGNvbXBUaDIKKyAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvckFuYWJ5cGFzc1ZhbHVlMQorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQW5hYnlwYXNzVmFsdWUxICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JBbmFieXBhc3NWYWx1ZTEKKyAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvckRibHJMb29wRmlsdGVyUmVzZXRWb2x0YWdlCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JEYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZSBOT1JPTV9TZXR1cEdldFRyaW1Gb3JEYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZQorICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yUmFkY0V4dENmZworICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yUmFkY0V4dENmZyAgICAgICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JSYWRjRXh0Q2ZnCisgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JSY09zY0xmSUJpYXNUcmltCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JSY09zY0xmSUJpYXNUcmltIE5PUk9NX1NldHVwR2V0VHJpbUZvclJjT3NjTGZJQmlhc1RyaW0KKyAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvclJjT3NjTGZSdHVuZUN0dW5lVHJpbQorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yUmNPc2NMZlJ0dW5lQ3R1bmVUcmltIE5PUk9NX1NldHVwR2V0VHJpbUZvclJjT3NjTGZSdHVuZUN0dW5lVHJpbQorICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yWG9zY0hmQ3RsCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JYb3NjSGZDdGwgICAgICAgIE5PUk9NX1NldHVwR2V0VHJpbUZvclhvc2NIZkN0bAorICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yWG9zY0hmRmFzdFN0YXJ0CisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JYb3NjSGZGYXN0U3RhcnQgIE5PUk9NX1NldHVwR2V0VHJpbUZvclhvc2NIZkZhc3RTdGFydAorICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yWG9zY0hmSWJpYXN0aGVybQorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yWG9zY0hmSWJpYXN0aGVybSBOT1JPTV9TZXR1cEdldFRyaW1Gb3JYb3NjSGZJYmlhc3RoZXJtCisgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JYb3NjTGZSZWd1bGF0b3JBbmRDbWlycndyUmF0aW8KKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclhvc2NMZlJlZ3VsYXRvckFuZENtaXJyd3JSYXRpbyBOT1JPTV9TZXR1cEdldFRyaW1Gb3JYb3NjTGZSZWd1bGF0b3JBbmRDbWlycndyUmF0aW8KKyAgICAjdW5kZWYgIFNldHVwU2lnbkV4dGVuZFZkZHJUcmltVmFsdWUKKyAgICAjZGVmaW5lIFNldHVwU2lnbkV4dGVuZFZkZHJUcmltVmFsdWUgICAgTk9ST01fU2V0dXBTaWduRXh0ZW5kVmRkclRyaW1WYWx1ZQorICAgICN1bmRlZiAgU2V0dXBTZXRDYWNoZU1vZGVBY2NvcmRpbmdUb0NjZmdTZXR0aW5nCisgICAgI2RlZmluZSBTZXR1cFNldENhY2hlTW9kZUFjY29yZGluZ1RvQ2NmZ1NldHRpbmcgTk9ST01fU2V0dXBTZXRDYWNoZU1vZGVBY2NvcmRpbmdUb0NjZmdTZXR0aW5nCisgICAgI3VuZGVmICBTZXR1cFNldEFvblJ0Y1N1YlNlY0luYworICAgICNkZWZpbmUgU2V0dXBTZXRBb25SdGNTdWJTZWNJbmMgICAgICAgICBOT1JPTV9TZXR1cFNldEFvblJ0Y1N1YlNlY0luYworI2VuZGlmCisKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIERlZmluZWQgdGltZSBkZWxheSBhc3N1bWluZyA0OCBNSHogY2xvY2sgYW5kIHJlc29sdXRpb24gb2YgMyBjeWNsZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIERFTEFZXzIwX1VTRUMgICAgICAgICAgIDB4MTQwCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZWQgQ1BVIGRlbGF5IG1hY3JvIHdpdGggbWljcm9zZWNvbmRzIGFzIGlucHV0CisvLyBRdWljayBjaGVjayBzaG93czogKFRvIGJlIGZ1cnRoZXIgaW52ZXN0aWdhdGVkKQorLy8gQXQgNDggTUh6IFJDT1NDIGFuZCBWSU1TLkNPTlRST0wuUFJFRkVUQ0ggPSAwLCB0aGVyZSBpcyA1IGN5Y2xlcworLy8gQXQgNDggTUh6IFJDT1NDIGFuZCBWSU1TLkNPTlRST0wuUFJFRkVUQ0ggPSAxLCB0aGVyZSBpcyA0IGN5Y2xlcworLy8gQXQgMjQgTUh6IFJDT1NDIGFuZCBWSU1TLkNPTlRST0wuUFJFRkVUQ0ggPSAwLCB0aGVyZSBpcyAzIGN5Y2xlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQ1BVX0RFTEFZX01JQ1JPX1NFQ09ORFMoIHggKSBcCisgICBDUFVkZWxheSgoKHVpbnQzMl90KSgoKCB4ICkgKiA0OC4wICkgLyA1LjAgKSkgLSAxICkKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRnVuY3Rpb24gZGVjbGFyYXRpb25zCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHZvaWQgICAgIFRyaW1BZnRlckNvbGRSZXNldCggdm9pZCApOworc3RhdGljIHZvaWQgICAgIFRyaW1BZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93biggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKTsKK3N0YXRpYyB2b2lkICAgICBUcmltQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25XYWtldXBGcm9tUG93ZXJEb3duKCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBQZXJmb3JtIHRoZSBuZWNlc3NhcnkgdHJpbSBvZiB0aGUgZGV2aWNlIHdoaWNoIGlzIG5vdCBkb25lIGluIGJvb3QgY29kZQorLy8KKy8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgZXhlY3V0ZSBjb21pbmcgZnJvbSBST00gYm9vdC4gVGhlIGN1cnJlbnQKKy8vIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHRha2Ugc29mdCByZXNldCBpbnRvIGFjY291bnQuIEhvd2V2ZXIsIGl0IGRvZXMgbm8KKy8vIGRhbWFnZSB0byBleGVjdXRlIGl0IGFnYWluLiBJdCBvbmx5IGNvbnN1bWVzIHRpbWUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorU2V0dXBUcmltRGV2aWNlKHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb247CisgICAgdWludDMyX3QgdWkzMkFvblN5c1Jlc2V0Y3RsOworCisgICAgLy8KKyAgICAvLyBHZXQgbGF5b3V0IHJldmlzaW9uIG9mIHRoZSBmYWN0b3J5IGNvbmZpZ3VyYXRpb24gYXJlYQorICAgIC8vIChIYW5kbGUgdW5kZWZpbmVkIHJldmlzaW9uIGFzIHJldmlzaW9uID0gMCkKKyAgICAvLworICAgIHVpMzJGY2ZnMVJldmlzaW9uID0gSFdSRUcoRkNGRzFfQkFTRSArIEZDRkcxX09fRkNGRzFfUkVWSVNJT04pOworICAgIGlmICggdWkzMkZjZmcxUmV2aXNpb24gPT0gMHhGRkZGRkZGRiApIHsKKyAgICAgICAgdWkzMkZjZmcxUmV2aXNpb24gPSAwOworICAgIH0KKworICAgIC8vCisgICAgLy8gVGhpcyBkcml2ZXJsaWIgdmVyc2lvbiBhbmQgc2V0dXAgZmlsZSBpcyBmb3IgQ0MyNnh4IFBHMi4yIGFuZCBsYXRlcgorICAgIC8vIEhhbHQgaWYgdmlvbGF0ZWQKKyAgICAvLworICAgIFRoaXNDb2RlSXNCdWlsdEZvckNDMjZ4eEh3UmV2MjJBbmRMYXRlcl9IYWx0SWZWaW9sYXRlZCgpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgc3RhbmRieSBpbiBmbGFzaCBiYW5rCisgICAgLy8KKyAgICBIV1JFR0JJVFcoIEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRywgRkxBU0hfQ0ZHX0RJU19TVEFOREJZX0JJVE4gKSA9IDA7CisKKyAgICAvLworICAgIC8vIENsb2NrIG11c3QgYWx3YXlzIGJlIGVuYWJsZWQgZm9yIHRoZSBzZW1hcGhvcmUgbW9kdWxlIChkdWUgdG8gQURJL0RESSBIVyB3b3JrYXJvdW5kKQorICAgIC8vCisgICAgSFdSRUcoIEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19NT0RDTEtFTjEgKSA9IEFVWF9XVUNfTU9EQ0xLRU4xX1NNUEg7CisKKyAgICAvLworICAgIC8vIFdhcm0gcmVzZXRzIG9uIENDMjZYWCBjb21wbGljYXRlcyBzb2Z0d2FyZSBkZXNpZ24gYXMgbXVjaCBvZiBvdXIgc29mdHdhcmUKKyAgICAvLyBleHBlY3QgdGhhdCBpbml0aWFsaXphdGlvbiBpcyBkb25lIGZyb20gYSBmdWxsIHN5c3RlbSByZXNldC4KKyAgICAvLyBUaGlzIGluY2x1ZGVzIFJUQyBzZXR1cCwgb3NjaWxsYXRvciBjb25maWd1cmF0aW9uIGFuZCBBVVggc2V0dXAuCisgICAgLy8gVG8gZW5zdXJlIGEgZnVsbCByZXNldCBvZiB0aGUgZGV2aWNlIGlzIGRvbmUgd2hlbiBjdXN0b21lcnMgZ2V0IGUuZy4gYSBXYXRjaGRvZworICAgIC8vIHJlc2V0LCB0aGUgZm9sbG93aW5nIGlzIHNldCBoZXJlOgorICAgIC8vCisgICAgSFdSRUdCSVRXKCBQUkNNX0JBU0UgKyBQUkNNX09fV0FSTVJFU0VULCBQUkNNX1dBUk1SRVNFVF9XUl9UT19QSU5SRVNFVF9CSVROICkgPSAxOworCisgICAgLy8KKyAgICAvLyBTZWxlY3QgY29ycmVjdCBDQUNIRSBtb2RlIGFuZCBzZXQgY29ycmVjdCBDQUNIRSBjb25maWd1cmF0aW9uCisgICAgLy8KKyAgICBTZXR1cFNldENhY2hlTW9kZUFjY29yZGluZ1RvQ2NmZ1NldHRpbmcoKTsKKworICAgIC8vIDEuIENoZWNrIGZvciBwb3dlcmRvd24KKyAgICAvLyAyLiBDaGVjayBmb3Igc2h1dGRvd24KKyAgICAvLyAzLiBBc3N1bWUgY29sZCByZXNldCBpZiBub25lIG9mIHRoZSBhYm92ZS4KKyAgICAvLworICAgIC8vIEl0IGlzIGFsd2F5cyBhc3N1bWVkIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdpbGwgZnJlZXplIHRoZSBsYXRjaGVzIGluCisgICAgLy8gQU9OX0lPQyB3aGVuIGdvaW5nIHRvIHBvd2VyZG93biBpbiBvcmRlciB0byByZXRhaW4gdGhlIHZhbHVlcyBvbiB0aGUgSU9zLgorICAgIC8vCisgICAgLy8gTkIuIElmIHRoaXMgYml0IGlzIG5vdCBjbGVhcmVkIGJlZm9yZSBwcm9jZWVkaW5nIHRvIHBvd2VyZG93biwgdGhlIElPcworICAgIC8vICAgICB3aWxsIGFsbCBkZWZhdWx0IHRvIHRoZSByZXNldCBjb25maWd1cmF0aW9uIHdoZW4gcmVzdGFydGluZy4KKyAgICBpZiggISAoIEhXUkVHQklUVyggQU9OX0lPQ19CQVNFICsgQU9OX0lPQ19PX0lPQ0xBVENILCBBT05fSU9DX0lPQ0xBVENIX0VOX0JJVE4gKSkpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBOQi4gVGhpcyBzaG91bGQgYmUgY2FsbGluZyBhIFJPTSBpbXBsZW1lbnRhdGlvbiBvZiByZXF1aXJlZCB0cmltIGFuZAorICAgICAgICAvLyBjb21wZW5zYXRpb24KKyAgICAgICAgLy8gZS5nLiBUcmltQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25XYWtldXBGcm9tUG93ZXJEb3duKCkKKyAgICAgICAgVHJpbUFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duV2FrZXVwRnJvbVBvd2VyRG93bigpOworICAgIH0KKyAgICAvLyBDaGVjayBmb3Igc2h1dGRvd24KKyAgICAvLworICAgIC8vIFdoZW4gZGV2aWNlIGlzIGdvaW5nIHRvIHNodXRkb3duIHRoZSBoYXJkd2FyZSB3aWxsIGF1dG9tYXRpY2FsbHkgY2xlYXIKKyAgICAvLyB0aGUgU0xFRVBESVMgYml0IGluIHRoZSBTTEVFUCByZWdpc3RlciBpbiB0aGUgQU9OX1NZU0NUUkwxMiBtb2R1bGUuCisgICAgLy8gSXQgaXMgbGVmdCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGFzc2VydCB0aGlzIGJpdCB3aGVuIHdha2luZyBiYWNrIHVwLAorICAgIC8vIGJ1dCBub3QgYmVmb3JlIHRoZSBkZXNpcmVkIElPIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gcmUtZXN0YWJsaXNoZWQuCisgICAgZWxzZSBpZiggISAoIEhXUkVHQklUVyggQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1NMRUVQQ1RMLCBBT05fU1lTQ1RMX1NMRUVQQ1RMX0lPX1BBRF9TTEVFUF9ESVNfQklUTiApKSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIE5CLiBUaGlzIHNob3VsZCBiZSBjYWxsaW5nIGEgUk9NIGltcGxlbWVudGF0aW9uIG9mIHJlcXVpcmVkIHRyaW0gYW5kCisgICAgICAgIC8vIGNvbXBlbnNhdGlvbgorICAgICAgICAvLyBlLmcuIFRyaW1BZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bigpICAgIC0tPgorICAgICAgICAvLyAgICAgIFRyaW1BZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bldha2V1cEZyb21Qb3dlckRvd24oKTsKKyAgICAgICAgVHJpbUFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duKHVpMzJGY2ZnMVJldmlzaW9uKTsKKyAgICAgICAgVHJpbUFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duV2FrZXVwRnJvbVBvd2VyRG93bigpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBDb25zaWRlciBhZGRpbmcgYSBjaGVjayBmb3Igc29mdCByZXNldCB0byBhbGxvdyBkZWJ1Z2dpbmcgdG8gc2tpcAorICAgICAgICAvLyB0aGlzIHNlY3Rpb24hISEKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTkIuIFRoaXMgc2hvdWxkIGJlIGNhbGxpbmcgYSBST00gaW1wbGVtZW50YXRpb24gb2YgcmVxdWlyZWQgdHJpbSBhbmQKKyAgICAgICAgLy8gY29tcGVuc2F0aW9uCisgICAgICAgIC8vIGUuZy4gVHJpbUFmdGVyQ29sZFJlc2V0KCkgICAtLT4KKyAgICAgICAgLy8gICAgICBUcmltQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd24oKSAgICAtLT4KKyAgICAgICAgLy8gICAgICBUcmltQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25XYWtldXBGcm9tUG93ZXJEb3duKCkKKyAgICAgICAgVHJpbUFmdGVyQ29sZFJlc2V0KCk7CisgICAgICAgIFRyaW1BZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bih1aTMyRmNmZzFSZXZpc2lvbik7CisgICAgICAgIFRyaW1BZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bldha2V1cEZyb21Qb3dlckRvd24oKTsKKworICAgIH0KKworICAgIC8vCisgICAgLy8gU2V0IFZJTVMgcG93ZXIgZG9tYWluIGNvbnRyb2wuCisgICAgLy8gUERDVEwxVklNUyA9IDAgPT0+IFZJTVMgcG93ZXIgZG9tYWluIGlzIG9ubHkgcG93ZXJlZCB3aGVuIENQVSBwb3dlciBkb21haW4gaXMgcG93ZXJlZAorICAgIC8vCisgICAgSFdSRUcoIFBSQ01fQkFTRSArIFBSQ01fT19QRENUTDFWSU1TICkgPSAwOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgb3B0aW1hbCB3YWl0IHRpbWUgZm9yIGZsYXNoIEZTTSBpbiBjYXNlcyB3aGVyZSBmbGFzaCBwdW1wCisgICAgLy8gd2FrZXMgdXAgZnJvbSBzbGVlcAorICAgIC8vCisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlBBQzEpID0gKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZQQUMxKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5GTEFTSF9GUEFDMV9QU0xFRVBURElTX00pIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMzk8PEZMQVNIX0ZQQUMxX1BTTEVFUFRESVNfUyk7CisKKyAgICAvLworICAgIC8vIEFuZCBmaW5hbGx5IGF0IHRoZSBlbmQgb2YgdGhlIGZsYXNoIGJvb3QgcHJvY2VzczoKKyAgICAvLyBTRVQgQk9PVF9ERVQgYml0cyBpbiBBT05fU1lTQ1RMIHRvIDMgaWYgYWxyZWFkeSBmb3VuZCB0byBiZSAxCisgICAgLy8gTm90ZTogVGhlIEJPT1RfREVUX3hfQ0xSL1NFVCBiaXRzIG11c3QgYmUgbWFudWFsbHkgY2xlYXJlZAorICAgIC8vCisgICAgaWYgKCgoIEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUkVTRVRDVEwgKSAmCisgICAgICAgICggQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8xX00gfCBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzBfTSApKSA+PgorICAgICAgICBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzBfUyApID09IDEgKQorICAgIHsKKyAgICAgICAgdWkzMkFvblN5c1Jlc2V0Y3RsID0gKCBIV1JFRyggQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1JFU0VUQ1RMICkgJgorICAgICAgICB+KCBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzFfQ0xSX00gfCBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzBfQ0xSX00gfAorICAgICAgICAgICBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzFfU0VUX00gfCBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzBfU0VUX00gKSk7CisgICAgICAgIEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUkVTRVRDVEwgKSA9IHVpMzJBb25TeXNSZXNldGN0bCB8IEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMV9TRVRfTTsKKyAgICAgICAgSFdSRUcoIEFPTl9TWVNDVExfQkFTRSArIEFPTl9TWVNDVExfT19SRVNFVENUTCApID0gdWkzMkFvblN5c1Jlc2V0Y3RsOworICAgIH0KKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvbmdvaW5nIFZJTVMgbW9kZSBjaGFuZ2Ugd2hlbiBsZWF2aW5nIFNldHVwVHJpbURldmljZSgpCisgICAgLy8gKFRoZXJlIHNob3VsZCB0eXBpY2FsbHkgYmUgbm8gd2FpdCB0aW1lIGhlcmUsIGJ1dCBuZWVkIHRvIGJlIHN1cmUpCisgICAgLy8KKyAgICB3aGlsZSAoIEhXUkVHQklUVyggVklNU19CQVNFICsgVklNU19PX1NUQVQsIFZJTVNfU1RBVF9NT0RFX0NIQU5HSU5HX0JJVE4gKSkgeworICAgICAgICAvLyBEbyBub3RoaW5nIC0gd2FpdCBmb3IgYW4gZXZlbnR1YWwgb25nb2luZyBtb2RlIGNoYW5nZSB0byBjb21wbGV0ZS4KKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFRyaW1zIHRvIGJlIGFwcGxpZWQgd2hlbiBjb21pbmcgZnJvbSBQT1dFUl9ET1dOIChhbHNvIGNhbGxlZCB3aGVuCisvLyEgY29taW5nIGZyb20gU0hVVERPV04gYW5kIFBJTl9SRVNFVCkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZAorVHJpbUFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duV2FrZXVwRnJvbVBvd2VyRG93biggdm9pZCApCit7CisgICAgLy8KKyAgICAvLyBDdXJyZW50bHkgbm8gc3BlY2lmaWMgdHJpbSBmb3IgUG93ZXJkb3duCisgICAgLy8KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVHJpbXMgdG8gYmUgYXBwbGllZCB3aGVuIGNvbWluZyBmcm9tIFNIVVRET1dOIChhbHNvIGNhbGxlZCB3aGVuCisvLyEgY29taW5nIGZyb20gUElOX1JFU0VUKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyB2b2lkCitUcmltQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd24odWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24pCit7CisgICAgdWludDMyX3QgICBjY2ZnX01vZGVDb25mUmVnICA7CisgICAgdWludDMyX3QgICBtcDFyZXYgICAgICAgICAgICA7CisKKyAgICAvLworICAgIC8vIEZvcmNlIEFVWCBvbiBhbmQgZW5hYmxlIGNsb2NrcworICAgIC8vCisgICAgLy8gTm8gbmVlZCB0byBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcG93ZXIvY2xvY2sgcmVnaXN0ZXJzLgorICAgIC8vIEF0IHRoaXMgcG9pbnQgYm90aCBBVVggYW5kIEFPTiBzaG91bGQgaGF2ZSBiZWVuIHJlc2V0IHRvIDB4MC4KKyAgICAvLworICAgIEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19BVVhDVEwpID0gQU9OX1dVQ19BVVhDVExfQVVYX0ZPUkNFX09OOworCisgICAgLy8KKyAgICAvLyBXYWl0IGZvciBwb3dlciBvbiBvbiB0aGUgQVVYIGRvbWFpbgorICAgIC8vCisgICAgd2hpbGUoICEgKCBIV1JFR0JJVFcoIEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19QV1JTVEFULCBBT05fV1VDX1BXUlNUQVRfQVVYX1BEX09OX0JJVE4gKSkpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIGNsb2NrcyBmb3IgQVVYX0RESTBfT1NDIGFuZCBBVVhfQURJNAorICAgIC8vCisgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX01PRENMS0VOMCkgPSBBVVhfV1VDX01PRENMS0VOMF9BVVhfRERJMF9PU0MgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19NT0RDTEtFTjBfQVVYX0FESTQ7CisKKyAgICAvLworICAgIC8vIEl0J3MgZm91bmQgdG8gYmUgb3B0aW1hbCB0byBvdmVycmlkZSB0aGUgRkNGRzEuLkRDRENfSVBFQUsgc2V0dGluZyBhcyBmb2xsb3dzOgorICAgIC8vIGlmICggYWx0ZXJuYXRpdmUgRENEQyBzZXR0aW5nIGluIENDRkcgaXMgZW5hYmxlZCApICBBREkzLi5JUEVBSyA9IENDRkcuLkRDRENfSVBFQUsKKyAgICAvLyBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURJMy4uSVBFQUsgPSAyCisgICAgLy8KKyAgICBpZiAoKCBIV1JFRyggQ0NGR19CQVNFICsgQ0NGR19PX1NJWkVfQU5EX0RJU19GTEFHUyApICYgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0FMVF9EQ0RDX1NFVFRJTkcgKSA9PSAwICkgeworICAgICAgICAvLworICAgICAgICAvLyBBRElfM19SRUZTWVM6RENEQ0NUTDVbM10gICg9RElUSEVSX0VOKSA9IENDRkdfTU9ERV9DT05GXzFbMTldICAgKD1BTFRfRENEQ19ESVRIRVJfRU4pCisgICAgICAgIC8vIEFESV8zX1JFRlNZUzpEQ0RDQ1RMNVsyOjBdKD1JUEVBSyAgICApID0gQ0NGR19NT0RFX0NPTkZfMVsxODoxNl0oPUFMVF9EQ0RDX0lQRUFLICAgICkKKyAgICAgICAgLy8gVXNpbmcgYSBzaW5nbGUgNC1iaXQgbWFza2VkIHdyaXRlIHNpbmNlIGxheW91dCBpcyBlcXVhbCBmb3IgYm90aCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHQiggQURJM19CQVNFICsgQURJX09fTUFTSzRCICsgKCBBRElfM19SRUZTWVNfT19EQ0RDQ1RMNSAqIDIgKSkgPSAoIDB4RjAgfAorICAgICAgICAgICAgKCBIV1JFRyggQ0NGR19CQVNFICsgQ0NGR19PX01PREVfQ09ORl8xICkgPj4gQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19JUEVBS19TICkpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgSFdSRUdCKCBBREkzX0JBU0UgKyBBRElfT19NQVNLNEIgKyAoIEFESV8zX1JFRlNZU19PX0RDRENDVEw1ICogMiApKSA9IDB4NzI7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBFbmFibGUgZm9yIEpUQUcgdG8gYmUgcG93ZXJlZCBkb3duICh3aWxsIHN0aWxsIGJlIHBvd2VyZWQgb24gaWYgZGVidWdnZXIgaXMgY29ubmVjdGVkKQorICAgIC8vCisgICAgQU9OV1VDSnRhZ1Bvd2VyT2ZmKCk7CisKKyAgICAvLworICAgIC8vIHJlYWQgdGhlIE1PREVfQ09ORiByZWdpc3RlciBpbiBDQ0ZHCisgICAgLy8KKyAgICBjY2ZnX01vZGVDb25mUmVnID0gSFdSRUcoIENDRkdfQkFTRSArIENDRkdfT19NT0RFX0NPTkYgKTsKKworICAgIC8vCisgICAgLy8gRmlyc3QgcGFydCBvZiB0cmltIGRvbmUgYWZ0ZXIgY29sZCByZXNldCBhbmQgd2FrZXVwIGZyb20gc2h1dGRvd246CisgICAgLy8gLUFkanVzdCB0aGUgVkREUl9UUklNX1NMRUVQIHZhbHVlLgorICAgIC8vIC1Db25maWd1cmUgRENEQy4KKyAgICAvLworICAgIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcxKCBjY2ZnX01vZGVDb25mUmVnICk7CisKKyAgICAvLworICAgIC8vIFNlY29uZCBwYXJ0IG9mIHRyaW0gZG9uZSBhZnRlciBjb2xkIHJlc2V0IGFuZCB3YWtldXAgZnJvbSBzaHV0ZG93bjoKKyAgICAvLyAtQ29uZmlndXJlIFhPU0MuCisgICAgLy8KKyAgICBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMiggdWkzMkZjZmcxUmV2aXNpb24sIGNjZmdfTW9kZUNvbmZSZWcgKTsKKworICAgIC8vCisgICAgLy8gSW5jcmVhc2VkIG1hcmdpbiBiZXR3ZWVuIGRpZ2l0YWwgc3VwcGx5IHZvbHRhZ2UgYW5kIFZERCBCT0QgZHVyaW5nIHN0YW5kYnkuCisgICAgLy8gVlRSSU1fVURJRzogc2lnbmVkIDQgYml0cyB2YWx1ZSB0byBiZSBpbmNyZW1lbnRlZCBieSAyIChtYXggPSA3KQorICAgIC8vIFZUUklNX0JPRDogdW5zaWduZWQgNCBiaXRzIHZhbHVlIHRvIGJlIGRlY3JlbWVudGVkIGJ5IDEgKG1pbiA9IDApCisgICAgLy8gVGhpcyBhcHBsaWVzIHRvIGNoaXBzIHdpdGggbXAxcmV2IDwgNTQyIGZvciBjYzEzeHggYW5kIGZvciBtcDFyZXYgPCA1MjcgZm9yIGNjMjZ4eAorICAgIC8vCisgICAgbXAxcmV2ID0gKCBIV1JFRyggRkNGRzFfQkFTRSArIDB4MDAwMDAzMTQgKSAmIDB4MDAwMEZGRkYgKTsKKyAgICBpZiAoIG1wMXJldiA8IDUyNyApIHsKKyAgICAgICAgdWludDMyX3QgdnRyaW1fYm9kICA9ICgoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgMHgwMDAwMDJCQyApID4+IDI0ICkgJiAweEYgKTsgLy8gYml0WzI3OjI0XSB1bnNpZ25lZAorICAgICAgICB1aW50MzJfdCB2dHJpbV91ZGlnID0gKCggSFdSRUcoIEZDRkcxX0JBU0UgKyAweDAwMDAwMkJDICkgPj4gMTYgKSAmIDB4RiApOyAvLyBiaXRbMTk6MTZdIHNpZ25lZAorICAgICAgICBpZiAoIHZ0cmltX2JvZCA+IDAgKSB7CisgICAgICAgICAgICB2dHJpbV9ib2QgLT0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHZ0cmltX3VkaWcgIT0gNyApIHsKKyAgICAgICAgICAgIGlmICggdnRyaW1fdWRpZyA9PSA2ICkgeworICAgICAgICAgICAgICAgIHZ0cmltX3VkaWcgPSA3OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2dHJpbV91ZGlnID0gKCggdnRyaW1fdWRpZyArIDIgKSAmIDB4RiApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEhXUkVHQiggQURJMl9CQVNFICsgQURJXzJfUkVGU1lTX09fU09DTERPQ1RMMCApID0KKyAgICAgICAgICAgICggdnRyaW1fdWRpZyA8PCBBRElfMl9SRUZTWVNfU09DTERPQ1RMMF9WVFJJTV9VRElHX1MgKSB8CisgICAgICAgICAgICAoIHZ0cmltX2JvZCAgPDwgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDBfVlRSSU1fQk9EX1MgICkgOworICAgIH0KKworICAgIC8vCisgICAgLy8gVGhpcmQgcGFydCBvZiB0cmltIGRvbmUgYWZ0ZXIgY29sZCByZXNldCBhbmQgd2FrZXVwIGZyb20gc2h1dGRvd246CisgICAgLy8gLUNvbmZpZ3VyZSBIUE9TQy4KKyAgICAvLyAtU2V0dXAgdGhlIExGIGNsb2NrLgorICAgIC8vCisgICAgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzMoIGNjZmdfTW9kZUNvbmZSZWcgKTsKKworICAgIC8vCisgICAgLy8gQWxsb3cgQVVYIHRvIHBvd2VyIGRvd24KKyAgICAvLworICAgIEFVWFdVQ1Bvd2VyQ3RybCggQVVYX1dVQ19QT1dFUl9ET1dOICk7CisKKyAgICAvLworICAgIC8vIExlYXZpbmcgb24gQVVYIGFuZCBjbG9jayBmb3IgQVVYX0RESTBfT1NDIG9uIGJ1dCB0dXJuIG9mZiBjbG9jayBmb3IgQVVYX0FESTQKKyAgICAvLworICAgIEhXUkVHKCBBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fTU9EQ0xLRU4wICkgPSBBVVhfV1VDX01PRENMS0VOMF9BVVhfRERJMF9PU0M7CisKKyAgICAvLyBEaXNhYmxlIEVGVVNFIGNsb2NrCisgICAgSFdSRUdCSVRXKCBGTEFTSF9CQVNFICsgRkxBU0hfT19DRkcsIEZMQVNIX0NGR19ESVNfRUZVU0VDTEtfQklUTiApID0gMTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUcmltcyB0byBiZSBhcHBsaWVkIHdoZW4gY29taW5nIGZyb20gUElOX1JFU0VULgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHZvaWQKK1RyaW1BZnRlckNvbGRSZXNldCggdm9pZCApCit7CisgICAgLy8KKyAgICAvLyBDdXJyZW50bHkgbm8gc3BlY2lmaWMgdHJpbSBmb3IgQ29sZCBSZXNldAorICAgIC8vCit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEZpcnN0IHBhcnQgb2YgY29uZmlndXJhdGlvbiByZXF1aXJlZCB3aGVuIHdha2luZyB1cCBmcm9tIHNodXRkb3duLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1NldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcxKCB1aW50MzJfdCBjY2ZnX01vZGVDb25mUmVnICkKK3sKKyAgICBpbnQzMl90ICAgIGkzMlZkZHJTbGVlcFRyaW07CisgICAgaW50MzJfdCAgICBpMzJWZGRyU2xlZXBEZWx0YTsKKworICAgIHsKKyAgICAgICAgaTMyVmRkclNsZWVwVHJpbSA9IFNldHVwU2lnbkV4dGVuZFZkZHJUcmltVmFsdWUoKAorICAgICAgICAgICAgSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX0xET19UUklNICkgJgorICAgICAgICAgICAgRkNGRzFfTERPX1RSSU1fVkREUl9UUklNX1NMRUVQX00gKSA+PgorICAgICAgICAgICAgRkNGRzFfTERPX1RSSU1fVkREUl9UUklNX1NMRUVQX1MgKSA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBZGp1c3QgdGhlIFZERFJfVFJJTV9TTEVFUCB2YWx1ZSB3aXRoIHZhbHVlIGFkanVzdGFibGUgYnkgY3VzdG9tZXIgKENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9ERUxUQSkKKyAgICAvLyBSZWFkIGFuZCBzaWduIGV4dGVuZCBWZGRyU2xlZXBEZWx0YSAoaW4gcmFuZ2UgLTggdG8gKzcpCisgICAgLy8KKyAgICBpMzJWZGRyU2xlZXBEZWx0YSA9ICgoKChpbnQzMl90KWNjZmdfTW9kZUNvbmZSZWcgKQorICAgICAgICA8PCAoIDMyIC0gQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX0RFTFRBX1cgLSBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfREVMVEFfUyApKQorICAgICAgICA+PiAoIDMyIC0gQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX0RFTFRBX1cgKSk7CisgICAgLy8gQ2FsY3VsYXRlIG5ldyBWRERSIHNsZWVwIHRyaW0KKyAgICBpMzJWZGRyU2xlZXBUcmltID0gKCBpMzJWZGRyU2xlZXBUcmltICsgaTMyVmRkclNsZWVwRGVsdGEgKyAxICk7CisgICAgaWYgKCBpMzJWZGRyU2xlZXBUcmltID4gIDIxICkgaTMyVmRkclNsZWVwVHJpbSA9ICAyMTsKKyAgICBpZiAoIGkzMlZkZHJTbGVlcFRyaW0gPCAtMTAgKSBpMzJWZGRyU2xlZXBUcmltID0gLTEwOworICAgIC8vIFdyaXRlIGFkanVzdGVkIHZhbHVlIHVzaW5nIE1BU0tFRCB3cml0ZSAoTUFTSzgpCisgICAgSFdSRUdIKCBBREkzX0JBU0UgKyBBRElfT19NQVNLOEIgKyAoIEFESV8zX1JFRlNZU19PX0RDRENDVEwxICogMiApKSA9ICgoIEFESV8zX1JFRlNZU19EQ0RDQ1RMMV9WRERSX1RSSU1fU0xFRVBfTSA8PCA4ICkgfAorICAgICAgICAoKCBpMzJWZGRyU2xlZXBUcmltIDw8IEFESV8zX1JFRlNZU19EQ0RDQ1RMMV9WRERSX1RSSU1fU0xFRVBfUyApICYgQURJXzNfUkVGU1lTX0RDRENDVEwxX1ZERFJfVFJJTV9TTEVFUF9NICkpOworCisgICAgLy8KKyAgICAvLyAxLgorICAgIC8vIERvIG5vdCBhbGxvdyBEQ0RDIHRvIGJlIGVuYWJsZWQgaWYgaW4gZXh0ZXJuYWwgcmVndWxhdG9yIG1vZGUuCisgICAgLy8gUHJldmVudGluZyB0aGlzIGJ5IHNldHRpbmcgYm90aCB0aGUgUkVDSEFSR0UgYW5kIHRoZSBBQ1RJVkUgYml0cyBiaXQgaW4gdGhlIENDRkdfTU9ERV9DT05GIGNvcHkgcmVnaXN0ZXIgKGNjZmdfTW9kZUNvbmZSZWcpLgorICAgIC8vCisgICAgLy8gMi4KKyAgICAvLyBBZGp1c3RlZCBiYXR0ZXJ5IG1vbml0b3IgbG93IGxpbWl0IGluIGludGVybmFsIHJlZ3VsYXRvciBtb2RlLgorICAgIC8vIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfTE9XTElNPTAgaW4gaW50ZXJuYWwgcmVndWxhdG9yIG1vZGUuCisgICAgLy8KKyAgICBpZiAoIEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUFdSQ1RMICkgJiBBT05fU1lTQ1RMX1BXUkNUTF9FWFRfUkVHX01PREUgKSB7CisgICAgICAgIGNjZmdfTW9kZUNvbmZSZWcgfD0gKCBDQ0ZHX01PREVfQ09ORl9EQ0RDX1JFQ0hBUkdFX00gfCBDQ0ZHX01PREVfQ09ORl9EQ0RDX0FDVElWRV9NICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSFdSRUdCSVRXKCBBT05fQkFUTU9OX0JBU0UgKyBBT05fQkFUTU9OX09fRkxBU0hQVU1QUDAsIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfTE9XTElNX0JJVE4gKSA9IDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBzZXQgdGhlIFJFQ0hBUkdFIHNvdXJjZSBiYXNlZCB1cG9uIENDRkc6TU9ERV9DT05GOkRDRENfUkVDSEFSR0UKKyAgICAvLyBOb3RlOiBJbnZlcnNlIHBvbGFyaXR5CisgICAgLy8KKyAgICBIV1JFR0JJVFcoIEFPTl9TWVNDVExfQkFTRSArIEFPTl9TWVNDVExfT19QV1JDVEwsIEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfRU5fQklUTiApID0KKyAgICAgICAgKCgoIGNjZmdfTW9kZUNvbmZSZWcgPj4gQ0NGR19NT0RFX0NPTkZfRENEQ19SRUNIQVJHRV9TICkgJiAxICkgXiAxICk7CisKKyAgICAvLworICAgIC8vIHNldCB0aGUgQUNUSVZFIHNvdXJjZSBiYXNlZCB1cG9uIENDRkc6TU9ERV9DT05GOkRDRENfQUNUSVZFCisgICAgLy8gTm90ZTogSW52ZXJzZSBwb2xhcml0eQorICAgIC8vCisgICAgSFdSRUdCSVRXKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUFdSQ1RMLCBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0FDVElWRV9CSVROICkgPQorICAgICAgICAoKCggY2NmZ19Nb2RlQ29uZlJlZyA+PiBDQ0ZHX01PREVfQ09ORl9EQ0RDX0FDVElWRV9TICkgJiAxICkgXiAxICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNlY29uZCBwYXJ0IG9mIGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQgd2hlbiB3YWtpbmcgdXAgZnJvbSBzaHV0ZG93bi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMiggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24sIHVpbnQzMl90IGNjZmdfTW9kZUNvbmZSZWcgKQoreworICAgIHVpbnQzMl90ICAgdWkzMlRyaW07CisKKyAgICAvLworICAgIC8vIEZvbGxvd2luZyBzZXF1ZW5jZSBpcyByZXF1aXJlZCBmb3IgdXNpbmcgWE9TQ0hGLCBpZiBub3QgaW5jbHVkZWQKKyAgICAvLyBkZXZpY2VzIGNyYXNoZXMgd2hlbiB0cnlpbmcgdG8gc3dpdGNoIHRvIFhPU0NIRi4KKyAgICAvLworICAgIC8vIFRyaW0gQ0FQIHNldHRpbmdzLiBHZXQgYW5kIHNldCB0cmltIHZhbHVlIGZvciB0aGUgQU5BQllQQVNTX1ZBTFVFMQorICAgIC8vIHJlZ2lzdGVyCisgICAgdWkzMlRyaW0gPSBTZXR1cEdldFRyaW1Gb3JBbmFieXBhc3NWYWx1ZTEoIGNjZmdfTW9kZUNvbmZSZWcgKTsKKyAgICBEREkzMlJlZ1dyaXRlKEFVWF9EREkwX09TQ19CQVNFLCBERElfMF9PU0NfT19BTkFCWVBBU1NWQUwxLCB1aTMyVHJpbSk7CisKKyAgICAvLyBUcmltIFJDT1NDX0xGLiBHZXQgYW5kIHNldCB0cmltIHZhbHVlcyBmb3IgdGhlIFJDT1NDTEZfUlRVTkVfVFJJTSBhbmQKKyAgICAvLyBSQ09TQ0xGX0NUVU5FX1RSSU0gZmllbGRzIGluIHRoZSBYT1NDTEZfUkNPU0NMRl9DVFJMIHJlZ2lzdGVyLgorICAgIHVpMzJUcmltID0gU2V0dXBHZXRUcmltRm9yUmNPc2NMZlJ0dW5lQ3R1bmVUcmltKCk7CisgICAgRERJMTZCaXRmaWVsZFdyaXRlKEFVWF9EREkwX09TQ19CQVNFLCBERElfMF9PU0NfT19MRk9TQ0NUTCwKKyAgICAgICAgICAgICAgICAgICAgICAgKERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX0NUVU5FX1RSSU1fTSB8CisgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfTEZPU0NDVExfUkNPU0NMRl9SVFVORV9UUklNX00pLAorICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfTEZPU0NDVExfUkNPU0NMRl9DVFVORV9UUklNX1MsCisgICAgICAgICAgICAgICAgICAgICAgIHVpMzJUcmltKTsKKworICAgIC8vIFRyaW0gWE9TQ0hGIElCSUFTIFRIRVJNLiBHZXQgYW5kIHNldCB0cmltIHZhbHVlIGZvciB0aGUKKyAgICAvLyBYT1NDSEYgSUJJQVMgVEhFUk0gYml0IGZpZWxkIGluIHRoZSBBTkFCWVBBU1NfVkFMVUUyIHJlZ2lzdGVyLiBPdGhlcgorICAgIC8vIHJlZ2lzdGVyIGJpdCBmaWVsZHMgYXJlIHNldCB0byAwLgorICAgIHVpMzJUcmltID0gU2V0dXBHZXRUcmltRm9yWG9zY0hmSWJpYXN0aGVybSgpOworICAgIERESTMyUmVnV3JpdGUoQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX0FOQUJZUEFTU1ZBTDIsCisgICAgICAgICAgICAgICAgICB1aTMyVHJpbTw8RERJXzBfT1NDX0FOQUJZUEFTU1ZBTDJfWE9TQ19IRl9JQklBU1RIRVJNX1MpOworCisgICAgLy8gVHJpbSBBTVBDT01QIHNldHRpbmdzIHJlcXVpcmVkIGJlZm9yZSBzd2l0Y2ggdG8gWE9TQ0hGCisgICAgdWkzMlRyaW0gPSBTZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgyKCk7CisgICAgRERJMzJSZWdXcml0ZShBVVhfRERJMF9PU0NfQkFTRSwgRERJXzBfT1NDX09fQU1QQ09NUFRIMiwgdWkzMlRyaW0pOworICAgIHVpMzJUcmltID0gU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMSgpOworICAgIERESTMyUmVnV3JpdGUoQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX0FNUENPTVBUSDEsIHVpMzJUcmltKTsKKyAgICB1aTMyVHJpbSA9IFNldHVwR2V0VHJpbUZvckFtcGNvbXBDdHJsKCB1aTMyRmNmZzFSZXZpc2lvbiApOworICAgIERESTMyUmVnV3JpdGUoQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX0FNUENPTVBDVEwsIHVpMzJUcmltKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRyaW0gZm9yIERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9BRENfU0hfTU9ERV9FTiBpbiBhY2NvcmRhbmNlIHRvIEZDRkcxIHNldHRpbmcKKyAgICAvLyBUaGlzIGlzIGJpdFs1XSBpbiB0aGUgRERJXzBfT1NDX09fQURDRE9VQkxFUk5BTk9BTVBDVEwgcmVnaXN0ZXIKKyAgICAvLyBVc2luZyBNQVNLNCB3cml0ZSArIDEgPT4gd3JpdGluZyB0byBiaXRzWzc6NF0KKyAgICAvLworICAgIHVpMzJUcmltID0gU2V0dXBHZXRUcmltRm9yQWRjU2hNb2RlRW4oIHVpMzJGY2ZnMVJldmlzaW9uICk7CisgICAgSFdSRUdCKCBBVVhfRERJMF9PU0NfQkFTRSArIERESV9PX01BU0s0QiArICggRERJXzBfT1NDX09fQURDRE9VQkxFUk5BTk9BTVBDVEwgKiAyICkgKyAxICkgPQorICAgICAgKCAweDIwIHwgKCB1aTMyVHJpbSA8PCAxICkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdHJpbSBmb3IgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX0FEQ19TSF9WQlVGX0VOIGluIGFjY29yZGFuY2UgdG8gRkNGRzEgc2V0dGluZworICAgIC8vIFRoaXMgaXMgYml0WzRdIGluIHRoZSBERElfMF9PU0NfT19BRENET1VCTEVSTkFOT0FNUENUTCByZWdpc3RlcgorICAgIC8vIFVzaW5nIE1BU0s0IHdyaXRlICsgMSA9PiB3cml0aW5nIHRvIGJpdHNbNzo0XQorICAgIC8vCisgICAgdWkzMlRyaW0gPSBTZXR1cEdldFRyaW1Gb3JBZGNTaFZidWZFbiggdWkzMkZjZmcxUmV2aXNpb24gKTsKKyAgICBIV1JFR0IoIEFVWF9EREkwX09TQ19CQVNFICsgRERJX09fTUFTSzRCICsgKCBERElfMF9PU0NfT19BRENET1VCTEVSTkFOT0FNUENUTCAqIDIgKSArIDEgKSA9CisgICAgICAoIDB4MTAgfCAoIHVpMzJUcmltICkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdHJpbSBmb3IgdGhlIFBFQUtfREVUX0lUUklNLCBIUF9CVUZfSVRSSU0gYW5kIExQX0JVRl9JVFJJTSBiaXQgZmllbGRzCisgICAgLy8gaW4gdGhlIERESTBfT1NDX09fWE9TQ0hGQ1RMIHJlZ2lzdGVyIGluIGFjY29yZGFuY2UgdG8gRkNGRzEgc2V0dGluZy4KKyAgICAvLyBSZW1haW5pbmcgcmVnaXN0ZXIgYml0IGZpZWxkcyBhcmUgc2V0IHRvIHRoZWlyIHJlc2V0IHZhbHVlcyBvZiAwLgorICAgIC8vCisgICAgdWkzMlRyaW0gPSBTZXR1cEdldFRyaW1Gb3JYb3NjSGZDdGwodWkzMkZjZmcxUmV2aXNpb24pOworICAgIERESTMyUmVnV3JpdGUoQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX1hPU0NIRkNUTCwgdWkzMlRyaW0pOworCisgICAgLy8KKyAgICAvLyBTZXQgdHJpbSBmb3IgREJMUl9MT09QX0ZJTFRFUl9SRVNFVF9WT0xUQUdFIGluIGFjY29yZGFuY2UgdG8gRkNGRzEgc2V0dGluZworICAgIC8vIChUaGlzIGlzIGJpdHMgWzE4OjE3XSBpbiBERElfMF9PU0NfT19BRENET1VCTEVSTkFOT0FNUENUTCkKKyAgICAvLyAoVXNpbmcgTUFTSzQgd3JpdGUgKyA0ID0+IHdyaXRpbmcgdG8gYml0c1sxOToxNl0gPT4gKDQqNCkpCisgICAgLy8gKEFzc3VtaW5nOiBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfREJMUl9MT09QX0ZJTFRFUl9SRVNFVF9WT0xUQUdFX1MgPSAxNyBhbmQKKyAgICAvLyAgdGhhdCBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfREJMUl9MT09QX0ZJTFRFUl9SRVNFVF9WT0xUQUdFX00gPSAweDAwMDYwMDAwKQorICAgIC8vCisgICAgdWkzMlRyaW0gPSBTZXR1cEdldFRyaW1Gb3JEYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZSggdWkzMkZjZmcxUmV2aXNpb24gKTsKKyAgICBIV1JFR0IoIEFVWF9EREkwX09TQ19CQVNFICsgRERJX09fTUFTSzRCICsgKCBERElfMF9PU0NfT19BRENET1VCTEVSTkFOT0FNUENUTCAqIDIgKSArIDQgKSA9CisgICAgICAoIDB4NjAgfCAoIHVpMzJUcmltIDw8IDEgKSk7CisKKyAgICAvLworICAgIC8vIFVwZGF0ZSBERElfMF9PU0NfQVRFU1RDVExfQVRFU1RMRl9SQ09TQ0xGX0lCSUFTX1RSSU0gd2l0aCBkYXRhIGZyb20KKyAgICAvLyBGQ0ZHMV9PU0NfQ09ORl9BVEVTVExGX1JDT1NDTEZfSUJJQVNfVFJJTQorICAgIC8vIFRoaXMgaXMgRERJXzBfT1NDX09fQVRFU1RDVEwgYml0WzddCisgICAgLy8gKCBERElfMF9PU0NfT19BVEVTVENUTCBpcyBjdXJyZW50bHkgaGlkZGVuIChidXQ9MHgwMDAwMDAyMCkpCisgICAgLy8gVXNpbmcgTUFTSzQgd3JpdGUgKyAxID0+IHdyaXRpbmcgdG8gYml0c1s3OjRdCisgICAgLy8KKyAgICB1aTMyVHJpbSA9IFNldHVwR2V0VHJpbUZvclJjT3NjTGZJQmlhc1RyaW0oIHVpMzJGY2ZnMVJldmlzaW9uICk7CisgICAgSFdSRUdCKCBBVVhfRERJMF9PU0NfQkFTRSArIERESV9PX01BU0s0QiArICggMHgwMDAwMDAyMCAqIDIgKSArIDEgKSA9CisgICAgICAoIDB4ODAgfCAoIHVpMzJUcmltIDw8IDMgKSk7CisKKyAgICAvLworICAgIC8vIFVwZGF0ZSBERElfMF9PU0NfTEZPU0NDVExfWE9TQ0xGX1JFR1VMQVRPUl9UUklNIGFuZAorICAgIC8vICAgICAgICBERElfMF9PU0NfTEZPU0NDVExfWE9TQ0xGX0NNSVJSV1JfUkFUSU8gaW4gb25lIHdyaXRlCisgICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCBzaW5jZSB0aGUgcmVnaXN0ZXJzIGFyZSBwYWNrZWQgdG9nZXRoZXIgaW4gdGhlIHNhbWUKKyAgICAvLyBvcmRlciBib3RoIGluIEZDRkcxIGFuZCBpbiB0aGUgSFcgcmVnaXN0ZXIuCisgICAgLy8gVGhpcyBzcGFucyBERElfMF9PU0NfT19MRk9TQ0NUTCBiaXRzWzIzOjE4XQorICAgIC8vIFVzaW5nIE1BU0s4IHdyaXRlICsgNCA9PiB3cml0aW5nIHRvIGJpdHNbMjM6MTZdCisgICAgLy8KKyAgICB1aTMyVHJpbSA9IFNldHVwR2V0VHJpbUZvclhvc2NMZlJlZ3VsYXRvckFuZENtaXJyd3JSYXRpbyggdWkzMkZjZmcxUmV2aXNpb24gKTsKKyAgICBIV1JFR0goIEFVWF9EREkwX09TQ19CQVNFICsgRERJX09fTUFTSzhCICsgKCBERElfMF9PU0NfT19MRk9TQ0NUTCAqIDIgKSArIDQgKSA9CisgICAgICAoIDB4RkMwMCB8ICggdWkzMlRyaW0gPDwgMiApKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRyaW0gdGhlIEhQTV9JQklBU19XQUlUX0NOVCwgTFBNX0lCSUFTX1dBSVRfQ05UIGFuZCBJREFDX1NURVAgYml0CisgICAgLy8gZmllbGRzIGluIHRoZSBEREkwX09TQ19PX1JBRENFWFRDRkcgcmVnaXN0ZXIgaW4gYWNjb3JkYW5jZSB0byBGQ0ZHMSBzZXR0aW5nLgorICAgIC8vIFJlbWFpbmluZyByZWdpc3RlciBiaXQgZmllbGRzIGFyZSBzZXQgdG8gdGhlaXIgcmVzZXQgdmFsdWVzIG9mIDAuCisgICAgLy8KKyAgICB1aTMyVHJpbSA9IFNldHVwR2V0VHJpbUZvclJhZGNFeHRDZmcodWkzMkZjZmcxUmV2aXNpb24pOworICAgIERESTMyUmVnV3JpdGUoQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX1JBRENFWFRDRkcsIHVpMzJUcmltKTsKKworICAgIC8vIFNldHRpbmcgRk9SQ0VfS0lDS1NUQVJUX0VOIChyZWYuIENDMjZfVjFfQlVHMDAyNjEpLiBTaG91bGQgYWxzbyBiZSBkb25lIGZvciBQRzIKKyAgICAvLyAoVGhpcyBpcyBiaXQgMjIgaW4gRERJXzBfT1NDX09fQ1RMMCkKKyAgICBIV1JFRyggQVVYX0RESTBfT1NDX0JBU0UgKyBERElfT19TRVQgKyBERElfMF9PU0NfT19DVEwwICkgPSBERElfMF9PU0NfQ1RMMF9GT1JDRV9LSUNLU1RBUlRfRU47Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFRoaXJkIHBhcnQgb2YgY29uZmlndXJhdGlvbiByZXF1aXJlZCB3aGVuIHdha2luZyB1cCBmcm9tIHNodXRkb3duLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1NldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmczKCB1aW50MzJfdCBjY2ZnX01vZGVDb25mUmVnICkKK3sKKyAgICB1aW50MzJfdCAgIGZjZmcxT3NjQ29uZjsKKyAgICB1aW50MzJfdCAgIHVpMzJUcmltOworICAgIHVpbnQzMl90ICAgY3VycmVudEhmQ2xvY2s7CisgICAgdWludDMyX3QgICBjY2ZnRXh0TGZDbGs7CisKKyAgICAvLworICAgIC8vIEV4YW1pbiB0aGUgWE9TQ19GUkVRIGZpZWxkIHRvIHNlbGVjdCAweDE9SFBPU0MsIDB4Mj00OE1IeiBYT1NDLCAweDM9MjRNSHogWE9TQworICAgIC8vCisgICAgc3dpdGNoICgoIGNjZmdfTW9kZUNvbmZSZWcgJiBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfTSApID4+IENDRkdfTU9ERV9DT05GX1hPU0NfRlJFUV9TICkgeworICAgIGNhc2UgMiA6CisgICAgICAgIC8vIFhPU0Mgc291cmNlIGlzIGEgNDggTUh6IHh0YWwKKyAgICAgICAgLy8gRG8gbm90aGluZyAoc2luY2UgdGhpcyBpcyB0aGUgcmVzZXQgc2V0dGluZykKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxIDoKKyAgICAgICAgLy8gWE9TQyBzb3VyY2UgaXMgSFBPU0MgKHRyaW0gdGhlIEhQT1NDIGlmIHRoaXMgaXMgYSBjaGlwIHdpdGggSFBPU0MsIG90aGVyd2lzZSBza2lwIHRyaW1taW5nIGFuZCBkZWZhdWx0IHRvIDI0IE1IeiBYT1NDKQorCisgICAgICAgIGZjZmcxT3NjQ29uZiA9IEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19PU0NfQ09ORiApOworCisgICAgICAgIGlmICgoIGZjZmcxT3NjQ29uZiAmIEZDRkcxX09TQ19DT05GX0hQT1NDX09QVElPTiApID09IDAgKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgSFBPU0MgY2hpcCwgYXBwbHkgSFBPU0Mgc2V0dGluZ3MKKyAgICAgICAgICAgIC8vIFNldCBiaXQgRERJXzBfT1NDX0NUTDBfSFBPU0NfTU9ERV9FTiAodGhpcyBpcyBiaXQgMTQgaW4gRERJXzBfT1NDX09fQ1RMMCkKKyAgICAgICAgICAgIEhXUkVHKCBBVVhfRERJMF9PU0NfQkFTRSArIERESV9PX1NFVCArIERESV8wX09TQ19PX0NUTDAgKSA9IERESV8wX09TQ19DVEwwX0hQT1NDX01PREVfRU47CisKKyAgICAgICAgICAgIC8vIEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfQklBU19IT0xEX01PREVfRU4gPSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX0hPTERfTU9ERV9FTiAgICgxIGJpdCkKKyAgICAgICAgICAgIC8vIEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfQ1VSUk1JUlJfUkFUSU8gICAgPSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19DVVJSTUlSUl9SQVRJTyAgICAgICg0IGJpdHMpCisgICAgICAgICAgICAvLyBBRElfMl9SRUZTWVNfSFBPU0NDVEwxX0JJQVNfUkVTX1NFVCAgICAgID0gRkNGRzFfT1NDX0NPTkZfSFBPU0NfQklBU19SRVNfU0VUICAgICAgICAoNCBiaXRzKQorICAgICAgICAgICAgLy8gQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9GSUxURVJfRU4gICAgICAgICA9IEZDRkcxX09TQ19DT05GX0hQT1NDX0ZJTFRFUl9FTiAgICAgICAgICAgKDEgYml0KQorICAgICAgICAgICAgLy8gQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9CSUFTX1JFQ0hBUkdFX0RMWSA9IEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfUkVDSEFSR0VfREVMQVkgKDIgYml0cykKKyAgICAgICAgICAgIC8vIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfU0VSSUVTX0NBUCAgICAgICAgPSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19TRVJJRVNfQ0FQICAgICAgICAgICgyIGJpdHMpCisgICAgICAgICAgICAvLyBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0RJVjNfQllQQVNTICAgICAgID0gRkNGRzFfT1NDX0NPTkZfSFBPU0NfRElWM19CWVBBU1MgICAgICAgICAoMSBiaXQpCisKKyAgICAgICAgICAgIEhXUkVHKCBBREkyX0JBU0UgKyBBRElfMl9SRUZTWVNfT19IUE9TQ0NUTDIgKSA9ICgoIEhXUkVHKCBBREkyX0JBU0UgKyBBRElfMl9SRUZTWVNfT19IUE9TQ0NUTDIgKSAmCisgICAgICAgICAgICAgICAgICB+KCBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX0JJQVNfSE9MRF9NT0RFX0VOX00gfCBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX0NVUlJNSVJSX1JBVElPX00gICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfAorICAgICAgICAgICAgICAgICAgICgoKCBmY2ZnMU9zY0NvbmYgJiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX0hPTERfTU9ERV9FTl9NICAgKSA+PiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX0hPTERfTU9ERV9FTl9TICAgKSA8PCBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX0JJQVNfSE9MRF9NT0RFX0VOX1MgICApIHwKKyAgICAgICAgICAgICAgICAgICAoKCggZmNmZzFPc2NDb25mICYgRkNGRzFfT1NDX0NPTkZfSFBPU0NfQ1VSUk1JUlJfUkFUSU9fTSAgICAgICkgPj4gRkNGRzFfT1NDX0NPTkZfSFBPU0NfQ1VSUk1JUlJfUkFUSU9fUyAgICAgICkgPDwgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMl9DVVJSTUlSUl9SQVRJT19TICAgICAgKSAgICk7CisgICAgICAgICAgICBIV1JFRyggQURJMl9CQVNFICsgQURJXzJfUkVGU1lTX09fSFBPU0NDVEwxICkgPSAoKCBIV1JFRyggQURJMl9CQVNFICsgQURJXzJfUkVGU1lTX09fSFBPU0NDVEwxICkgJiB+KCBBRElfMl9SRUZTWVNfSFBPU0NDVEwxX0JJQVNfUkVTX1NFVF9NICkgICAgICAgICAgICAgICAgICAgICAgICAgICkgfAorICAgICAgICAgICAgICAgICAgICgoKCBmY2ZnMU9zY0NvbmYgJiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX1JFU19TRVRfTSAgICAgICAgKSA+PiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX1JFU19TRVRfUyAgICAgICAgKSA8PCBBRElfMl9SRUZTWVNfSFBPU0NDVEwxX0JJQVNfUkVTX1NFVF9TICAgICAgICApICAgKTsKKyAgICAgICAgICAgIEhXUkVHKCBBREkyX0JBU0UgKyBBRElfMl9SRUZTWVNfT19IUE9TQ0NUTDAgKSA9ICgoIEhXUkVHKCBBREkyX0JBU0UgKyBBRElfMl9SRUZTWVNfT19IUE9TQ0NUTDAgKSAmCisgICAgICAgICAgICAgICAgICB+KCBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0ZJTFRFUl9FTl9NIHwgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9CSUFTX1JFQ0hBUkdFX0RMWV9NIHwgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9TRVJJRVNfQ0FQX00gfCBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0RJVjNfQllQQVNTX00gKSkgfAorICAgICAgICAgICAgICAgICAgICgoKCBmY2ZnMU9zY0NvbmYgJiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19GSUxURVJfRU5fTSAgICAgICAgICAgKSA+PiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19GSUxURVJfRU5fUyAgICAgICAgICAgKSA8PCBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0ZJTFRFUl9FTl9TICAgICAgICAgICApIHwKKyAgICAgICAgICAgICAgICAgICAoKCggZmNmZzFPc2NDb25mICYgRkNGRzFfT1NDX0NPTkZfSFBPU0NfQklBU19SRUNIQVJHRV9ERUxBWV9NICkgPj4gRkNGRzFfT1NDX0NPTkZfSFBPU0NfQklBU19SRUNIQVJHRV9ERUxBWV9TICkgPDwgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9CSUFTX1JFQ0hBUkdFX0RMWV9TICAgKSB8CisgICAgICAgICAgICAgICAgICAgKCgoIGZjZmcxT3NjQ29uZiAmIEZDRkcxX09TQ19DT05GX0hQT1NDX1NFUklFU19DQVBfTSAgICAgICAgICApID4+IEZDRkcxX09TQ19DT05GX0hQT1NDX1NFUklFU19DQVBfUyAgICAgICAgICApIDw8IEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfU0VSSUVTX0NBUF9TICAgICAgICAgICkgfAorICAgICAgICAgICAgICAgICAgICgoKCBmY2ZnMU9zY0NvbmYgJiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19ESVYzX0JZUEFTU19NICAgICAgICAgKSA+PiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19ESVYzX0JZUEFTU19TICAgICAgICAgKSA8PCBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0RJVjNfQllQQVNTX1MgICAgICAgICApICAgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8vIE5vdCBhIEhQT1NDIGNoaXAgLSBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdAorICAgIGRlZmF1bHQgOgorICAgICAgICAvLyBYT1NDIHNvdXJjZSBpcyBhIDI0IE1IeiB4dGFsIChkZWZhdWx0KQorICAgICAgICAvLyBTZXQgYml0IERESV8wX09TQ19DVEwwX1hUQUxfSVNfMjRNICh0aGlzIGlzIGJpdCAzMSBpbiBERElfMF9PU0NfT19DVEwwKQorICAgICAgICBIV1JFRyggQVVYX0RESTBfT1NDX0JBU0UgKyBERElfT19TRVQgKyBERElfMF9PU0NfT19DVEwwICkgPSBERElfMF9PU0NfQ1RMMF9YVEFMX0lTXzI0TTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZXQgWE9TQ19IRiBpbiBieXBhc3MgbW9kZSBpZiBDQ0ZHIGlzIGNvbmZpZ3VyZWQgZm9yIGV4dGVybmFsIFRDWE8KKyAgICAvLyBQbGVhc2Ugbm90ZSB0aGF0IGl0IGlzIHVwIHRvIHRoZSBjdXN0b21tZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGV4dGVybmFsIGNsb2NrIHNvdXJjZSBpcyB1cCBhbmQgcnVubmluZyBiZWZvcmUgWE9TQ19IRiBjYW4gYmUgdXNlZC4KKyAgICAvLworICAgIGlmICgoIEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fU0laRV9BTkRfRElTX0ZMQUdTICkgJiBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfVENYTyApID09IDAgKSB7CisgICAgICAgIEhXUkVHKCBBVVhfRERJMF9PU0NfQkFTRSArIERESV9PX1NFVCArIERESV8wX09TQ19PX1hPU0NIRkNUTCApID0gRERJXzBfT1NDX1hPU0NIRkNUTF9CWVBBU1M7CisgICAgfQorCisgICAgLy8gQ2xlYXIgRERJXzBfT1NDX0NUTDBfQ0xLX0xPU1NfRU4gKENsb2NrTG9zc0V2ZW50RW5hYmxlKCkpLiBUaGlzIGlzIGJpdCA5IGluIERESV8wX09TQ19PX0NUTDAuCisgICAgLy8gVGhpcyBpcyB0eXBpY2FsbHkgYWxyZWFkeSAwIGV4Y2VwdCBvbiBMaXphcmQgd2hlcmUgaXQgaXMgc2V0IGluIFJPTS1ib290CisgICAgSFdSRUcoIEFVWF9EREkwX09TQ19CQVNFICsgRERJX09fQ0xSICsgRERJXzBfT1NDX09fQ1RMMCApID0gRERJXzBfT1NDX0NUTDBfQ0xLX0xPU1NfRU47CisKKyAgICAvLyBTZXR0aW5nIERESV8wX09TQ19DVEwxX1hPU0NfSEZfRkFTVF9TVEFSVCBhY2NvcmRpbmcgdG8gdmFsdWUgZm91bmQgaW4gRkNGRzEKKyAgICB1aTMyVHJpbSA9IFNldHVwR2V0VHJpbUZvclhvc2NIZkZhc3RTdGFydCgpOworICAgIEhXUkVHQiggQVVYX0RESTBfT1NDX0JBU0UgKyBERElfT19NQVNLNEIgKyAoIERESV8wX09TQ19PX0NUTDEgKiAyICkpID0gKCAweDMwIHwgdWkzMlRyaW0gKTsKKworICAgIC8vCisgICAgLy8gc2V0dXAgdGhlIExGIGNsb2NrIGJhc2VkIHVwb24gQ0NGRzpNT0RFX0NPTkY6U0NMS19MRl9PUFRJT04KKyAgICAvLworICAgIHN3aXRjaCAoKCBjY2ZnX01vZGVDb25mUmVnICYgQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fTSApID4+IENDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OX1MgKSB7CisgICAgY2FzZSAwIDogLy8gWE9TQ19IRl9ETEYgKFhPU0NIRi8xNTM2KSAtPiBTQ0xLX0xGICg9MzEyNTBIeikKKyAgICAgICAgT1NDQ2xvY2tTb3VyY2VTZXQoIE9TQ19TUkNfQ0xLX0xGLCBPU0NfWE9TQ19IRiApOworICAgICAgICBTZXR1cFNldEFvblJ0Y1N1YlNlY0luYyggMHg4NjM3QkQgKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxIDogLy8gRVhURVJOQUwgc2lnbmFsIC0+IFNDTEtfTEYgKGZyZXF1ZW5jeT0yXjM4L0NDRkdfRVhUX0xGX0NMS19SVENfSU5DUkVNRU5UKQorICAgICAgICAvLyBTZXQgU0NMS19MRiB0byB1c2UgdGhlIHNhbWUgc291cmNlIGFzIFNDTEtfSEYKKyAgICAgICAgLy8gQ2FuIGJlIHNpbXBsaWZpZWQgYSBiaXQgc2luY2UgcG9zc2libGUgcmV0dXJuIHZhbHVlcyBmb3IgSEYgbWF0Y2hlcyBMRiBzZXR0aW5ncworICAgICAgICBjdXJyZW50SGZDbG9jayA9IE9TQ0Nsb2NrU291cmNlR2V0KCBPU0NfU1JDX0NMS19IRiApOworICAgICAgICBPU0NDbG9ja1NvdXJjZVNldCggT1NDX1NSQ19DTEtfTEYsIGN1cnJlbnRIZkNsb2NrICk7CisgICAgICAgIHdoaWxlKCBPU0NDbG9ja1NvdXJjZUdldCggT1NDX1NSQ19DTEtfTEYgKSAhPSBjdXJyZW50SGZDbG9jayApIHsKKyAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgc3dpdGNoZWQKKyAgICAgICAgfQorICAgICAgICBjY2ZnRXh0TGZDbGsgPSBIV1JFRyggQ0NGR19CQVNFICsgQ0NGR19PX0VYVF9MRl9DTEsgKTsKKyAgICAgICAgU2V0dXBTZXRBb25SdGNTdWJTZWNJbmMoKCBjY2ZnRXh0TGZDbGsgJiBDQ0ZHX0VYVF9MRl9DTEtfUlRDX0lOQ1JFTUVOVF9NICkgPj4gQ0NGR19FWFRfTEZfQ0xLX1JUQ19JTkNSRU1FTlRfUyApOworICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KCggY2NmZ0V4dExmQ2xrICYgQ0NGR19FWFRfTEZfQ0xLX0RJT19NICkgPj4gQ0NGR19FWFRfTEZfQ0xLX0RJT19TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DX1BPUlRfQU9OX0NMSzMySywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ19TVERfSU5QVVQgfCBJT0NfSFlTVF9FTkFCTEUgKTsgICAvLyBSb3V0ZSBleHRlcm5hbCBjbG9jayB0byBBT04gSU9DIHcvaHlzdGVyZXNpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBYT1NDX0xGIGluIGJ5cGFzcyBtb2RlIHRvIGFsbG93IGV4dGVybmFsIDMyayBjbG9jaworICAgICAgICBIV1JFRyggQVVYX0RESTBfT1NDX0JBU0UgKyBERElfT19TRVQgKyBERElfMF9PU0NfT19DVEwwICkgPSBERElfMF9PU0NfQ1RMMF9YT1NDX0xGX0RJR19CWVBBU1M7CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBzZXQgWE9TQ19MRiBhcyBTQ0xLX0xGIHNvdXJjZQorICAgIGNhc2UgMiA6IC8vIFhPU0NfTEYgLT4gU0xDS19MRiAoMzI3NjggSHopCisgICAgICAgIE9TQ0Nsb2NrU291cmNlU2V0KCBPU0NfU1JDX0NMS19MRiwgT1NDX1hPU0NfTEYgKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdCA6IC8vICg9MykgUkNPU0NfTEYKKyAgICAgICAgT1NDQ2xvY2tTb3VyY2VTZXQoIE9TQ19TUkNfQ0xLX0xGLCBPU0NfUkNPU0NfTEYgKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBVcGRhdGUgQURJXzRfQVVYX0FEQ1JFRjFfVlRSSU0gd2l0aCB2YWx1ZSBmcm9tIEZDRkcxCisgICAgLy8KKyAgICBIV1JFR0IoIEFVWF9BREk0X0JBU0UgKyBBRElfNF9BVVhfT19BRENSRUYxICkgPQorICAgICAgKCgoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19TT0NfQURDX1JFRl9UUklNX0FORF9PRkZTRVRfRVhUICkgPj4KKyAgICAgIEZDRkcxX1NPQ19BRENfUkVGX1RSSU1fQU5EX09GRlNFVF9FWFRfU09DX0FEQ19SRUZfVk9MVEFHRV9UUklNX1RFTVAxX1MgKSA8PAorICAgICAgQURJXzRfQVVYX0FEQ1JFRjFfVlRSSU1fUyApICYKKyAgICAgIEFESV80X0FVWF9BRENSRUYxX1ZUUklNX00gKTsKKworICAgIC8vCisgICAgLy8gU2V0IEFESV80X0FVWDpBREMwLlNNUExfQ1lDTEVfRVhQIHRvIGl0J3MgZGVmYXVsdCBtaW5pbXVtIHZhbHVlICg9MykKKyAgICAvLyAoTm90ZTogVXNpbmcgTUFTSzhCIHJlcXVpcmVzIHRoYXQgdGhlIGJpdHMgdG8gYmUgbW9kaWZpZWQgbXVzdCBiZSB3aXRoaW4gdGhlIHNhbWUKKyAgICAvLyAgICAgICAgYnl0ZSBib3VuZGFyeSB3aGljaCBpcyB0aGUgY2FzZSBmb3IgdGhlIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQIGZpZWxkKQorICAgIC8vCisgICAgSFdSRUdIKCBBVVhfQURJNF9CQVNFICsgQURJX09fTUFTSzhCICsgKCBBRElfNF9BVVhfT19BREMwICogMiApKSA9CisgICAgICAoIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQX00gPDwgOCApIHwgKCAzIDw8IEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQX1MgKTsKKworICAgIC8vCisgICAgLy8gU3luYyB3aXRoIEFPTgorICAgIC8vCisgICAgU3lzQ3RybEFvblN5bmMoKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgQU5BQllQQVNTX1ZBTFVFMSByZWdpc3RlciBpbiBPU0NfRElHLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitTZXR1cEdldFRyaW1Gb3JBbmFieXBhc3NWYWx1ZTEoIHVpbnQzMl90IGNjZmdfTW9kZUNvbmZSZWcgKQoreworICAgIHVpbnQzMl90IHVpMzJGY2ZnMVZhbHVlICAgICAgICAgICAgOworICAgIHVpbnQzMl90IHVpMzJYb3NjSGZSb3cgICAgICAgICAgICAgOworICAgIHVpbnQzMl90IHVpMzJYb3NjSGZDb2wgICAgICAgICAgICAgOworICAgIGludDMyX3QgIGkzMkN1c3RvbWVyRGVsdGFBZGp1c3QgICAgOworICAgIHVpbnQzMl90IHVpMzJUcmltVmFsdWUgICAgICAgICAgICAgOworCisgICAgLy8gVXNlIGRldmljZSBzcGVjaWZpYyB0cmltIHZhbHVlcyBsb2NhdGVkIGluIGZhY3RvcnkgY29uZmlndXJhdGlvbgorICAgIC8vIGFyZWEgZm9yIHRoZSBYT1NDX0hGX0NPTFVNTl9RMTIgYW5kIFhPU0NfSEZfUk9XX1ExMiBiaXQgZmllbGRzIGluCisgICAgLy8gdGhlIEFOQUJZUEFTU19WQUxVRTEgcmVnaXN0ZXIuIFZhbHVlIGZvciB0aGUgb3RoZXIgYml0IGZpZWxkcworICAgIC8vIGFyZSBzZXQgdG8gMC4KKworICAgIHVpMzJGY2ZnMVZhbHVlID0gSFdSRUcoRkNGRzFfQkFTRSArIEZDRkcxX09fQ09ORklHX09TQ19UT1ApOworICAgIHVpMzJYb3NjSGZSb3cgPSAoKCB1aTMyRmNmZzFWYWx1ZSAmCisgICAgICAgIEZDRkcxX0NPTkZJR19PU0NfVE9QX1hPU0NfSEZfUk9XX1ExMl9NICkgPj4KKyAgICAgICAgRkNGRzFfQ09ORklHX09TQ19UT1BfWE9TQ19IRl9ST1dfUTEyX1MgKTsKKyAgICB1aTMyWG9zY0hmQ29sID0gKCggdWkzMkZjZmcxVmFsdWUgJgorICAgICAgICBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9YT1NDX0hGX0NPTFVNTl9RMTJfTSApID4+CisgICAgICAgIEZDRkcxX0NPTkZJR19PU0NfVE9QX1hPU0NfSEZfQ09MVU1OX1ExMl9TICk7CisKKyAgICBpMzJDdXN0b21lckRlbHRhQWRqdXN0ID0gMDsKKyAgICBpZiAoKCBjY2ZnX01vZGVDb25mUmVnICYgQ0NGR19NT0RFX0NPTkZfWE9TQ19DQVBfTU9EICkgPT0gMCApIHsKKyAgICAgICAgLy8gWE9TQ19DQVBfTU9EID0gMCBtZWFuczogQ0FQX0FSUkFZX0RFTFRBIGlzIGluIHVzZSAtPiBBcHBseSBjb21wZW5zYXRpb24KKyAgICAgICAgLy8gWE9TQ19DQVBBUlJBWV9ERUxUQSBpcyBsb2NhdGVkIGluIGJpdFsxNTo4XSBvZiBjY2ZnX01vZGVDb25mUmVnCisgICAgICAgIC8vIE5vdGU6IEhXX1JFVl9ERVBFTkRFTlRfSU1QTEVNRU5UQVRJT04uIEZpZWxkIHdpZHRoIGlzIG5vdCBnaXZlbiBieQorICAgICAgICAvLyBhIGRlZmluZSBhbmQgc2lnbiBleHRlbnNpb24gbXVzdCB0aGVyZWZvcmUgYmUgaGFyZGNvZGVkLgorICAgICAgICAvLyAoIEEgc21hbGwgdGVzdCBwcm9ncmFtIGlzIGNyZWF0ZWQgdmVyaWZ5aW5nIHRoZSBjb2RlIGxpbmVzIGJlbG93OgorICAgICAgICAvLyAgIFJlZi46IC4uXHRlc3Rcc21hbGxfc3RhbmRhbG9uZV90ZXN0X3Byb2dyYW1zXENhcEFycmF5RGVsdGFBZGp1c3RfdGVzdC5jKQorICAgICAgICBpMzJDdXN0b21lckRlbHRhQWRqdXN0ID0gKChpbnQzMl90KWNjZmdfTW9kZUNvbmZSZWcgPDwgMTYgKSA+PiAyNDsKKworICAgICAgICB3aGlsZSAoIGkzMkN1c3RvbWVyRGVsdGFBZGp1c3QgPCAwICkgeworICAgICAgICAgICAgdWkzMlhvc2NIZkNvbCA+Pj0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDT0wgMSBzdGVwIGRvd24KKyAgICAgICAgICAgIGlmICggdWkzMlhvc2NIZkNvbCA9PSAwICkgeyAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgQ09MIGJlbG93IG1pbmltdW0KKyAgICAgICAgICAgICAgICB1aTMyWG9zY0hmQ29sID0gMHhGRkZGOyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBTZXQgQ09MIHRvIG1heGltdW0KKyAgICAgICAgICAgICAgICB1aTMyWG9zY0hmUm93ID4+PSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBST1cgMSBzdGVwIGRvd24KKyAgICAgICAgICAgICAgICBpZiAoIHVpMzJYb3NjSGZSb3cgPT0gMCApIHsgICAgICAgICAgICAgICAgICAgLy8gaWYgUk9XIGJlbG93IG1pbmltdW0KKyAgICAgICAgICAgICAgICAgICB1aTMyWG9zY0hmUm93ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBTZXQgYm90aCBST1cgYW5kIENPTAorICAgICAgICAgICAgICAgICAgIHVpMzJYb3NjSGZDb2wgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHRvIG1pbmltdW0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpMzJDdXN0b21lckRlbHRhQWRqdXN0Kys7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKCBpMzJDdXN0b21lckRlbHRhQWRqdXN0ID4gMCApIHsKKyAgICAgICAgICAgIHVpMzJYb3NjSGZDb2wgPSAoIHVpMzJYb3NjSGZDb2wgPDwgMSApIHwgMTsgICAgICAgLy8gQ09MIDEgc3RlcCB1cAorICAgICAgICAgICAgaWYgKCB1aTMyWG9zY0hmQ29sID4gMHhGRkZGICkgeyAgICAgICAgICAgICAgICAgICAvLyBpZiBDT0wgYWJvdmUgbWF4aW11bQorICAgICAgICAgICAgICAgIHVpMzJYb3NjSGZDb2wgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIFNldCBDT0wgdG8gbWluaW11bQorICAgICAgICAgICAgICAgIHVpMzJYb3NjSGZSb3cgPSAoIHVpMzJYb3NjSGZSb3cgPDwgMSApIHwgMTsgICAvLyAgIFJPVyAxIHN0ZXAgdXAKKyAgICAgICAgICAgICAgICBpZiAoIHVpMzJYb3NjSGZSb3cgPiAweEYgKSB7ICAgICAgICAgICAgICAgICAgLy8gaWYgUk9XIGFib3ZlIG1heGltdW0KKyAgICAgICAgICAgICAgICAgICB1aTMyWG9zY0hmUm93ID0gMHhGOyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBTZXQgYm90aCBST1cgYW5kIENPTAorICAgICAgICAgICAgICAgICAgIHVpMzJYb3NjSGZDb2wgPSAweEZGRkY7ICAgICAgICAgICAgICAgICAgICAvLyAgIHRvIG1heGltdW0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpMzJDdXN0b21lckRlbHRhQWRqdXN0LS07CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1aTMyVHJpbVZhbHVlID0gKCggdWkzMlhvc2NIZlJvdyA8PCBERElfMF9PU0NfQU5BQllQQVNTVkFMMV9YT1NDX0hGX1JPV19RMTJfUyAgICApIHwKKyAgICAgICAgICAgICAgICAgICAgICggdWkzMlhvc2NIZkNvbCA8PCBERElfMF9PU0NfQU5BQllQQVNTVkFMMV9YT1NDX0hGX0NPTFVNTl9RMTJfUyApICAgKTsKKworICAgIHJldHVybiAodWkzMlRyaW1WYWx1ZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIFJDT1NDTEZfUlRVTkVfVFJJTSBhbmQgdGhlCisvLyEgUkNPU0NMRl9DVFVORV9UUklNIGJpdCBmaWVsZHMgaW4gdGhlIFhPU0NMRl9SQ09TQ0xGX0NUUkwgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorU2V0dXBHZXRUcmltRm9yUmNPc2NMZlJ0dW5lQ3R1bmVUcmltKCB2b2lkICkKK3sKKyAgICB1aW50MzJfdCB1aTMyVHJpbVZhbHVlOworCisgICAgLy8gVXNlIGRldmljZSBzcGVjaWZpYyB0cmltIHZhbHVlcyBsb2NhdGVkIGluIGZhY3RvcnkgY29uZmlndXJhdGlvbgorICAgIC8vIGFyZWEKKyAgICB1aTMyVHJpbVZhbHVlID0KKyAgICAgICAgKChIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19DT05GSUdfT1NDX1RPUCkgJgorICAgICAgICAgIEZDRkcxX0NPTkZJR19PU0NfVE9QX1JDT1NDTEZfQ1RVTkVfVFJJTV9NKT4+CisgICAgICAgICAgRkNGRzFfQ09ORklHX09TQ19UT1BfUkNPU0NMRl9DVFVORV9UUklNX1MpPDwKKyAgICAgICAgICAgIERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX0NUVU5FX1RSSU1fUzsKKworICAgIHVpMzJUcmltVmFsdWUgfD0KKyAgICAgICAgKChIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19DT05GSUdfT1NDX1RPUCkgJgorICAgICAgICAgIEZDRkcxX0NPTkZJR19PU0NfVE9QX1JDT1NDTEZfUlRVTkVfVFJJTV9NKT4+CisgICAgICAgICAgRkNGRzFfQ09ORklHX09TQ19UT1BfUkNPU0NMRl9SVFVORV9UUklNX1MpPDwKKyAgICAgICAgICAgIERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX1JUVU5FX1RSSU1fUzsKKworICAgIHJldHVybih1aTMyVHJpbVZhbHVlKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgWE9TQ19IRl9JQklBU1RIRVJNIGJpdCBmaWVsZCBpbgorLy8hIHRoZSBBTkFCWVBBU1NfVkFMVUUyIHJlZ2lzdGVyIGluIE9TQ19ESUcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1NldHVwR2V0VHJpbUZvclhvc2NIZkliaWFzdGhlcm0oIHZvaWQgKQoreworICAgIHVpbnQzMl90IHVpMzJUcmltVmFsdWU7CisKKyAgICAvLyBVc2UgZGV2aWNlIHNwZWNpZmljIHRyaW0gdmFsdWUgbG9jYXRlZCBpbiBmYWN0b3J5IGNvbmZpZ3VyYXRpb24KKyAgICAvLyBhcmVhCisgICAgdWkzMlRyaW1WYWx1ZSA9CisgICAgICAgIChIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19BTkFCWVBBU1NfVkFMVUUyKSAmCisgICAgICAgICBGQ0ZHMV9BTkFCWVBBU1NfVkFMVUUyX1hPU0NfSEZfSUJJQVNUSEVSTV9NKT4+CisgICAgICAgICBGQ0ZHMV9BTkFCWVBBU1NfVkFMVUUyX1hPU0NfSEZfSUJJQVNUSEVSTV9TOworCisgICAgcmV0dXJuKHVpMzJUcmltVmFsdWUpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBBTVBDT01QX1RIMiByZWdpc3RlciBpbiBPU0NfRElHLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitTZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgyKCB2b2lkICkKK3sKKyAgICB1aW50MzJfdCB1aTMyVHJpbVZhbHVlOworICAgIHVpbnQzMl90IHVpMzJGY2ZnMVZhbHVlOworCisgICAgLy8gVXNlIGRldmljZSBzcGVjaWZpYyB0cmltIHZhbHVlIGxvY2F0ZWQgaW4gZmFjdG9yeSBjb25maWd1cmF0aW9uCisgICAgLy8gYXJlYS4gQWxsIGRlZmluZWQgcmVnaXN0ZXIgYml0IGZpZWxkcyBoYXZlIGNvcnJlc3BvbmRpbmcgdHJpbQorICAgIC8vIHZhbHVlIGluIHRoZSBmYWN0b3J5IGNvbmZpZ3VyYXRpb24gYXJlYQorICAgIHVpMzJGY2ZnMVZhbHVlID0gSFdSRUcoRkNGRzFfQkFTRSArIEZDRkcxX09fQU1QQ09NUF9USDIpOworICAgIHVpMzJUcmltVmFsdWUgPSAoKHVpMzJGY2ZnMVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX1RIMl9MUE1VUERBVEVfTFRIX00pPj4KKyAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX1RIMl9MUE1VUERBVEVfTFRIX1MpPDwKKyAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUFRIMl9MUE1VUERBVEVfTFRIX1M7CisgICAgdWkzMlRyaW1WYWx1ZSB8PSAoKCh1aTMyRmNmZzFWYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX1RIMl9MUE1VUERBVEVfSFRNX00pPj4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgyX0xQTVVQREFURV9IVE1fUyk8PAorICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0FNUENPTVBUSDJfTFBNVVBEQVRFX0hUSF9TKTsKKyAgICB1aTMyVHJpbVZhbHVlIHw9ICgoKHVpMzJGY2ZnMVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgyX0FEQ19DT01QX0FNUFRIX0xQTV9NKT4+CisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX1RIMl9BRENfQ09NUF9BTVBUSF9MUE1fUyk8PAorICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0FNUENPTVBUSDJfQURDX0NPTVBfQU1QVEhfTFBNX1MpOworICAgIHVpMzJUcmltVmFsdWUgfD0gKCgodWkzMkZjZmcxVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9USDJfQURDX0NPTVBfQU1QVEhfSFBNX00pPj4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgyX0FEQ19DT01QX0FNUFRIX0hQTV9TKTw8CisgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUFRIMl9BRENfQ09NUF9BTVBUSF9IUE1fUyk7CisKKyAgICByZXR1cm4odWkzMlRyaW1WYWx1ZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIEFNUENPTVBfVEgxIHJlZ2lzdGVyIGluIE9TQ19ESUcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1NldHVwR2V0VHJpbUZvckFtcGNvbXBUaDEoIHZvaWQgKQoreworICAgIHVpbnQzMl90IHVpMzJUcmltVmFsdWU7CisgICAgdWludDMyX3QgdWkzMkZjZmcxVmFsdWU7CisKKyAgICAvLyBVc2UgZGV2aWNlIHNwZWNpZmljIHRyaW0gdmFsdWVzIGxvY2F0ZWQgaW4gZmFjdG9yeSBjb25maWd1cmF0aW9uCisgICAgLy8gYXJlYS4gQWxsIGRlZmluZWQgcmVnaXN0ZXIgYml0IGZpZWxkcyBoYXZlIGEgY29ycmVzcG9uZGluZyB0cmltCisgICAgLy8gdmFsdWUgaW4gdGhlIGZhY3RvcnkgY29uZmlndXJhdGlvbiBhcmVhCisgICAgdWkzMkZjZmcxVmFsdWUgPSBIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19BTVBDT01QX1RIMSk7CisgICAgdWkzMlRyaW1WYWx1ZSA9ICgoKHVpMzJGY2ZnMVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgxX0hQTVJBTVAzX0xUSF9NKT4+CisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX1RIMV9IUE1SQU1QM19MVEhfUyk8PAorICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0FNUENPTVBUSDFfSFBNUkFNUDNfTFRIX1MpOworICAgIHVpMzJUcmltVmFsdWUgfD0gKCgodWkzMkZjZmcxVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9USDFfSFBNUkFNUDNfSFRIX00pPj4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgxX0hQTVJBTVAzX0hUSF9TKTw8CisgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUFRIMV9IUE1SQU1QM19IVEhfUyk7CisgICAgdWkzMlRyaW1WYWx1ZSB8PSAoKCh1aTMyRmNmZzFWYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX1RIMV9JQklBU0NBUF9MUFRPSFBfT0xfQ05UX00pPj4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgxX0lCSUFTQ0FQX0xQVE9IUF9PTF9DTlRfUyk8PAorICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0FNUENPTVBUSDFfSUJJQVNDQVBfTFBUT0hQX09MX0NOVF9TKTsKKyAgICB1aTMyVHJpbVZhbHVlIHw9ICgoKHVpMzJGY2ZnMVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgxX0hQTVJBTVAxX1RIX00pPj4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgxX0hQTVJBTVAxX1RIX1MpPDwKKyAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19BTVBDT01QVEgxX0hQTVJBTVAxX1RIX1MpOworCisgICAgcmV0dXJuKHVpMzJUcmltVmFsdWUpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBBTVBDT01QX0NUUkwgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorU2V0dXBHZXRUcmltRm9yQW1wY29tcEN0cmwoIHVpbnQzMl90IHVpMzJGY2ZnMVJldmlzaW9uICkKK3sKKyAgICB1aW50MzJfdCB1aTMyVHJpbVZhbHVlICAgIDsKKyAgICB1aW50MzJfdCB1aTMyRmNmZzFWYWx1ZSAgIDsKKyAgICB1aW50MzJfdCBpYmlhc09mZnNldCAgICAgIDsKKyAgICB1aW50MzJfdCBpYmlhc0luaXQgICAgICAgIDsKKyAgICB1aW50MzJfdCBtb2RlQ29uZjEgICAgICAgIDsKKyAgICBpbnQzMl90ICBkZWx0YUFkanVzdCAgICAgIDsKKworICAgIC8vIFVzZSBkZXZpY2Ugc3BlY2lmaWMgdHJpbSB2YWx1ZXMgbG9jYXRlZCBpbiBmYWN0b3J5IGNvbmZpZ3VyYXRpb24KKyAgICAvLyBhcmVhLiBSZWdpc3RlciBiaXQgZmllbGRzIHdpdGhvdXQgdHJpbSB2YWx1ZXMgaW4gdGhlIGZhY3RvcnkKKyAgICAvLyBjb25maWd1cmF0aW9uIGFyZWEgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIG9mIDAuCisgICAgdWkzMkZjZmcxVmFsdWUgPSBIV1JFRyggRkNGRzFfQkFTRSArIEZDRkcxX09fQU1QQ09NUF9DVFJMMSApOworCisgICAgaWJpYXNPZmZzZXQgICAgPSAoIHVpMzJGY2ZnMVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9DVFJMMV9JQklBU19PRkZTRVRfTSApID4+CisgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfQ1RSTDFfSUJJQVNfT0ZGU0VUX1MgOworICAgIGliaWFzSW5pdCAgICAgID0gKCB1aTMyRmNmZzFWYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfQ1RSTDFfSUJJQVNfSU5JVF9NICkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9DVFJMMV9JQklBU19JTklUX1MgOworCisgICAgaWYgKCggSFdSRUcoIENDRkdfQkFTRSArIENDRkdfT19TSVpFX0FORF9ESVNfRkxBR1MgKSAmIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19YT1NDX09WUl9NICkgPT0gMCApIHsKKyAgICAgICAgLy8gQWRqdXN0IHdpdGggREVMVEFfSUJJQVNfT0ZGU0VUIGFuZCBERUxUQV9JQklBU19JTklUIGZyb20gQ0NGRworICAgICAgICBtb2RlQ29uZjEgICA9IEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fTU9ERV9DT05GXzEgKTsKKworICAgICAgICAvLyBCb3RoIGZpZWxkcyBhcmUgc2lnbmVkIDQtYml0IHZhbHVlcy4gVGhpcyBpcyBhbiBhc3N1bXB0aW9uIHdoZW4gZG9pbmcgdGhlIHNpZ24gZXh0ZW5zaW9uLgorICAgICAgICBkZWx0YUFkanVzdCA9ICgoaW50MzJfdCltb2RlQ29uZjEgPDwgKCAzMiAtIENDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfT0ZGU0VUX1MgLSA0ICkpID4+IDI4OworICAgICAgICBkZWx0YUFkanVzdCArPSAoaW50MzJfdClpYmlhc09mZnNldDsKKyAgICAgICAgaWYgKCBkZWx0YUFkanVzdCA8IDAgKSB7CisgICAgICAgICAgIGRlbHRhQWRqdXN0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGRlbHRhQWRqdXN0ID4gKCBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU19PRkZTRVRfTSA+PiBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU19PRkZTRVRfUyApKSB7CisgICAgICAgICAgICBkZWx0YUFkanVzdCAgPSAoIERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTX09GRlNFVF9NID4+IERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTX09GRlNFVF9TICk7CisgICAgICAgIH0KKyAgICAgICAgaWJpYXNPZmZzZXQgPSAodWludDMyX3QpZGVsdGFBZGp1c3Q7CisKKyAgICAgICAgZGVsdGFBZGp1c3QgPSAoKGludDMyX3QpbW9kZUNvbmYxIDw8ICggMzIgLSBDQ0ZHX01PREVfQ09ORl8xX0RFTFRBX0lCSUFTX0lOSVRfUyAtIDQgKSkgPj4gMjg7CisgICAgICAgIGRlbHRhQWRqdXN0ICs9IChpbnQzMl90KWliaWFzSW5pdDsKKyAgICAgICAgaWYgKCBkZWx0YUFkanVzdCA8IDAgKSB7CisgICAgICAgICAgIGRlbHRhQWRqdXN0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGRlbHRhQWRqdXN0ID4gKCBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU19JTklUX00gPj4gRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNfSU5JVF9TICkpIHsKKyAgICAgICAgICAgIGRlbHRhQWRqdXN0ICA9ICggRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNfSU5JVF9NID4+IERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTX0lOSVRfUyApOworICAgICAgICB9CisgICAgICAgIGliaWFzSW5pdCA9ICh1aW50MzJfdClkZWx0YUFkanVzdDsKKyAgICB9CisgICAgdWkzMlRyaW1WYWx1ZSA9ICggaWJpYXNPZmZzZXQgPDwgRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNfT0ZGU0VUX1MgKSB8CisgICAgICAgICAgICAgICAgICAgICggaWJpYXNJbml0ICAgPDwgRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNfSU5JVF9TICAgKSA7CisKKyAgICB1aTMyVHJpbVZhbHVlIHw9ICgoKHVpMzJGY2ZnMVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfQ1RSTDFfTFBNX0lCSUFTX1dBSVRfQ05UX0ZJTkFMX00pPj4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfQ1RSTDFfTFBNX0lCSUFTX1dBSVRfQ05UX0ZJTkFMX1MpPDwKKyAgICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0FNUENPTVBDVExfTFBNX0lCSUFTX1dBSVRfQ05UX0ZJTkFMX1MpOworICAgIHVpMzJUcmltVmFsdWUgfD0gKCgodWkzMkZjZmcxVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9DVFJMMV9DQVBfU1RFUF9NKT4+CisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX0NUUkwxX0NBUF9TVEVQX1MpPDwKKyAgICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0FNUENPTVBDVExfQ0FQX1NURVBfUyk7CisgICAgdWkzMlRyaW1WYWx1ZSB8PSAoKCh1aTMyRmNmZzFWYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX0NUUkwxX0lCSUFTQ0FQX0hQVE9MUF9PTF9DTlRfTSk+PgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9DVFJMMV9JQklBU0NBUF9IUFRPTFBfT0xfQ05UX1MpPDwKKyAgICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNDQVBfSFBUT0xQX09MX0NOVF9TKTsKKworICAgIGlmICggdWkzMkZjZmcxUmV2aXNpb24gPj0gMHgwMDAwMDAyMiApIHsKKyAgICAgICAgdWkzMlRyaW1WYWx1ZSB8PSAoKCggdWkzMkZjZmcxVmFsdWUgJgorICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9DVFJMMV9BTVBDT01QX1JFUV9NT0RFX00gKSA+PgorICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9DVFJMMV9BTVBDT01QX1JFUV9NT0RFX1MgKSA8PAorICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX1JFUV9NT0RFX1MgKTsKKyAgICB9CisKKyAgICByZXR1cm4odWkzMlRyaW1WYWx1ZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgZnJvbSBGQ0ZHMSB0byBiZSB1c2VkIGFzIERCTFJfTE9PUF9GSUxURVJfUkVTRVRfVk9MVEFHRSBzZXR0aW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitTZXR1cEdldFRyaW1Gb3JEYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZSggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKQoreworICAgdWludDMyX3QgZGJsckxvb3BGaWx0ZXJSZXNldFZvbHRhZ2VWYWx1ZSA9IDA7IC8vIFJlc2V0IHZhbHVlCisKKyAgIGlmICggdWkzMkZjZmcxUmV2aXNpb24gPj0gMHgwMDAwMDAyMCApIHsKKyAgICAgIGRibHJMb29wRmlsdGVyUmVzZXRWb2x0YWdlVmFsdWUgPSAoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19NSVNDX09UUF9EQVRBXzEgKSAmCisgICAgICAgICBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfREJMUl9MT09QX0ZJTFRFUl9SRVNFVF9WT0xUQUdFX00gKSA+PgorICAgICAgICAgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0RCTFJfTE9PUF9GSUxURVJfUkVTRVRfVk9MVEFHRV9TOworICAgfQorCisgICByZXR1cm4gKCBkYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZVZhbHVlICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgZnJvbSBGQ0ZHMSB0byBiZSB1c2VkIGFzIEFEQ19TSF9NT0RFX0VOIHNldHRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1NldHVwR2V0VHJpbUZvckFkY1NoTW9kZUVuKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiApCit7CisgICB1aW50MzJfdCBnZXRUcmltRm9yQWRjU2hNb2RlRW5WYWx1ZSA9IDE7IC8vIFJlY29tbWVuZGVkIGRlZmF1bHQgc2V0dGluZworCisgICBpZiAoIHVpMzJGY2ZnMVJldmlzaW9uID49IDB4MDAwMDAwMjIgKSB7CisgICAgICBnZXRUcmltRm9yQWRjU2hNb2RlRW5WYWx1ZSA9ICggSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX09TQ19DT05GICkgJgorICAgICAgICAgRkNGRzFfT1NDX0NPTkZfQURDX1NIX01PREVfRU5fTSApID4+CisgICAgICAgICBGQ0ZHMV9PU0NfQ09ORl9BRENfU0hfTU9ERV9FTl9TOworICAgfQorCisgICByZXR1cm4gKCBnZXRUcmltRm9yQWRjU2hNb2RlRW5WYWx1ZSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIGZyb20gRkNGRzEgdG8gYmUgdXNlZCBhcyBBRENfU0hfVkJVRl9FTiBzZXR0aW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitTZXR1cEdldFRyaW1Gb3JBZGNTaFZidWZFbiggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKQoreworICAgdWludDMyX3QgZ2V0VHJpbUZvckFkY1NoVmJ1ZkVuVmFsdWUgPSAxOyAvLyBSZWNvbW1lbmRlZCBkZWZhdWx0IHNldHRpbmcKKworICAgaWYgKCB1aTMyRmNmZzFSZXZpc2lvbiA+PSAweDAwMDAwMDIyICkgeworICAgICAgZ2V0VHJpbUZvckFkY1NoVmJ1ZkVuVmFsdWUgPSAoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19PU0NfQ09ORiApICYKKyAgICAgICAgIEZDRkcxX09TQ19DT05GX0FEQ19TSF9WQlVGX0VOX00gKSA+PgorICAgICAgICAgRkNGRzFfT1NDX0NPTkZfQURDX1NIX1ZCVUZfRU5fUzsKKyAgIH0KKworICAgcmV0dXJuICggZ2V0VHJpbUZvckFkY1NoVmJ1ZkVuVmFsdWUgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgWE9TQ0hGQ1RMIHJlZ2lzdGVyIGluIE9TQ19ESUcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1NldHVwR2V0VHJpbUZvclhvc2NIZkN0bCggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKQoreworICAgdWludDMyX3QgZ2V0VHJpbUZvclhvc2NoZkN0bFZhbHVlID0gMDsgLy8gUmVjb21tZW5kZWQgZGVmYXVsdCBzZXR0aW5nCisgICB1aW50MzJfdCBmY2ZnMURhdGE7CisKKyAgIGlmICggdWkzMkZjZmcxUmV2aXNpb24gPj0gMHgwMDAwMDAyMCApIHsKKyAgICAgIGZjZmcxRGF0YSA9IEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19NSVNDX09UUF9EQVRBXzEgKTsKKyAgICAgIGdldFRyaW1Gb3JYb3NjaGZDdGxWYWx1ZSA9CisgICAgICAgICAoICggKCBmY2ZnMURhdGEgJiBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfUEVBS19ERVRfSVRSSU1fTSApID4+CisgICAgICAgICAgICAgRkNGRzFfTUlTQ19PVFBfREFUQV8xX1BFQUtfREVUX0lUUklNX1MgKSA8PAorICAgICAgICAgICBERElfMF9PU0NfWE9TQ0hGQ1RMX1BFQUtfREVUX0lUUklNX1MpOworCisgICAgICBnZXRUcmltRm9yWG9zY2hmQ3RsVmFsdWUgfD0KKyAgICAgICAgICggKCAoIGZjZmcxRGF0YSAmIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9IUF9CVUZfSVRSSU1fTSApID4+CisgICAgICAgICAgICAgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0hQX0JVRl9JVFJJTV9TICkgPDwKKyAgICAgICAgICAgRERJXzBfT1NDX1hPU0NIRkNUTF9IUF9CVUZfSVRSSU1fUyk7CisKKyAgICAgIGdldFRyaW1Gb3JYb3NjaGZDdGxWYWx1ZSB8PQorICAgICAgICAgKCAoICggZmNmZzFEYXRhICYgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0xQX0JVRl9JVFJJTV9NICkgPj4KKyAgICAgICAgICAgICBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfTFBfQlVGX0lUUklNX1MgKSA8PAorICAgICAgICAgICBERElfMF9PU0NfWE9TQ0hGQ1RMX0xQX0JVRl9JVFJJTV9TKTsKKyAgIH0KKworICAgcmV0dXJuICggZ2V0VHJpbUZvclhvc2NoZkN0bFZhbHVlICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBhcyBPU0NfRElHOkNUTDEuWE9TQ19IRl9GQVNUX1NUQVJULgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitTZXR1cEdldFRyaW1Gb3JYb3NjSGZGYXN0U3RhcnQoIHZvaWQgKQoreworICAgdWludDMyX3QgdWkzMlhvc2NIZkZhc3RTdGFydFZhbHVlICAgOworCisgICAvLyBHZXQgdmFsdWUgZnJvbSBGQ0ZHMQorICAgdWkzMlhvc2NIZkZhc3RTdGFydFZhbHVlID0gKCBIV1JFRyggRkNGRzFfQkFTRSArIEZDRkcxX09fT1NDX0NPTkYgKSAmCisgICAgICBGQ0ZHMV9PU0NfQ09ORl9YT1NDX0hGX0ZBU1RfU1RBUlRfTSApID4+CisgICAgICBGQ0ZHMV9PU0NfQ09ORl9YT1NDX0hGX0ZBU1RfU1RBUlRfUzsKKworICAgcmV0dXJuICggdWkzMlhvc2NIZkZhc3RTdGFydFZhbHVlICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIFJBRENFWFRDRkcgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorU2V0dXBHZXRUcmltRm9yUmFkY0V4dENmZyggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKQoreworICAgdWludDMyX3QgZ2V0VHJpbUZvclJhZGNFeHRDZmdWYWx1ZSA9IDB4NDAzRjgwMDA7IC8vIFJlY29tbWVuZGVkIGRlZmF1bHQgc2V0dGluZworICAgdWludDMyX3QgZmNmZzFEYXRhOworCisgICBpZiAoIHVpMzJGY2ZnMVJldmlzaW9uID49IDB4MDAwMDAwMjAgKSB7CisgICAgICBmY2ZnMURhdGEgPSBIV1JFRyggRkNGRzFfQkFTRSArIEZDRkcxX09fTUlTQ19PVFBfREFUQV8xICk7CisgICAgICBnZXRUcmltRm9yUmFkY0V4dENmZ1ZhbHVlID0KKyAgICAgICAgICggKCAoIGZjZmcxRGF0YSAmIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9IUE1fSUJJQVNfV0FJVF9DTlRfTSApID4+CisgICAgICAgICAgICAgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0hQTV9JQklBU19XQUlUX0NOVF9TICkgPDwKKyAgICAgICAgICAgRERJXzBfT1NDX1JBRENFWFRDRkdfSFBNX0lCSUFTX1dBSVRfQ05UX1MpOworCisgICAgICBnZXRUcmltRm9yUmFkY0V4dENmZ1ZhbHVlIHw9CisgICAgICAgICAoICggKCBmY2ZnMURhdGEgJiBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfTFBNX0lCSUFTX1dBSVRfQ05UX00gKSA+PgorICAgICAgICAgICAgIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9MUE1fSUJJQVNfV0FJVF9DTlRfUyApIDw8CisgICAgICAgICAgIERESV8wX09TQ19SQURDRVhUQ0ZHX0xQTV9JQklBU19XQUlUX0NOVF9TKTsKKworICAgICAgZ2V0VHJpbUZvclJhZGNFeHRDZmdWYWx1ZSB8PQorICAgICAgICAgKCAoICggZmNmZzFEYXRhICYgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0lEQUNfU1RFUF9NICkgPj4KKyAgICAgICAgICAgICBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfSURBQ19TVEVQX1MgKSA8PAorICAgICAgICAgICBERElfMF9PU0NfUkFEQ0VYVENGR19JREFDX1NURVBfUyk7CisgICB9CisKKyAgIHJldHVybiAoIGdldFRyaW1Gb3JSYWRjRXh0Q2ZnVmFsdWUgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgRkNGRzEgT1NDX0NPTkZfQVRFU1RMRl9SQ09TQ0xGX0lCSUFTX1RSSU0uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1NldHVwR2V0VHJpbUZvclJjT3NjTGZJQmlhc1RyaW0oIHVpbnQzMl90IHVpMzJGY2ZnMVJldmlzaW9uICkKK3sKKyAgIHVpbnQzMl90IHRyaW1Gb3JSY09zY0xmSUJpYXNUcmltVmFsdWUgPSAwOyAvLyBEZWZhdWx0IHZhbHVlCisKKyAgIGlmICggdWkzMkZjZmcxUmV2aXNpb24gPj0gMHgwMDAwMDAyMiApIHsKKyAgICAgIHRyaW1Gb3JSY09zY0xmSUJpYXNUcmltVmFsdWUgPSAoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19PU0NfQ09ORiApICYKKyAgICAgICAgIEZDRkcxX09TQ19DT05GX0FURVNUTEZfUkNPU0NMRl9JQklBU19UUklNX00gKSA+PgorICAgICAgICAgRkNGRzFfT1NDX0NPTkZfQVRFU1RMRl9SQ09TQ0xGX0lCSUFTX1RSSU1fUyA7CisgICB9CisKKyAgIHJldHVybiAoIHRyaW1Gb3JSY09zY0xmSUJpYXNUcmltVmFsdWUgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyBYT1NDTEZfUkVHVUxBVE9SX1RSSU0gYW5kIFhPU0NMRl9DTUlSUldSX1JBVElPIGFzIG9uZSBwYWNrZXQKKy8vISBzcGFubmluZyBiaXRzIFs1OjBdIGluIHRoZSByZXR1cm5lZCB2YWx1ZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorU2V0dXBHZXRUcmltRm9yWG9zY0xmUmVndWxhdG9yQW5kQ21pcnJ3clJhdGlvKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiApCit7CisgICB1aW50MzJfdCB0cmltRm9yWG9zY0xmUmVndWxhdG9yQW5kQ21pcnJ3clJhdGlvVmFsdWUgPSAwOyAvLyBEZWZhdWx0IHZhbHVlIGZvciBib3RoIGZpZWxkcworCisgICBpZiAoIHVpMzJGY2ZnMVJldmlzaW9uID49IDB4MDAwMDAwMjIgKSB7CisgICAgICB0cmltRm9yWG9zY0xmUmVndWxhdG9yQW5kQ21pcnJ3clJhdGlvVmFsdWUgPSAoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19PU0NfQ09ORiApICYKKyAgICAgICAgICggRkNGRzFfT1NDX0NPTkZfWE9TQ0xGX1JFR1VMQVRPUl9UUklNX00gfAorICAgICAgICAgICBGQ0ZHMV9PU0NfQ09ORl9YT1NDTEZfQ01JUlJXUl9SQVRJT19NICApKSA+PgorICAgICAgICAgICBGQ0ZHMV9PU0NfQ09ORl9YT1NDTEZfQ01JUlJXUl9SQVRJT19TICA7CisgICB9CisKKyAgIHJldHVybiAoIHRyaW1Gb3JYb3NjTGZSZWd1bGF0b3JBbmRDbWlycndyUmF0aW9WYWx1ZSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTaWduIGV4dGVuZCB0aGUgVkREUl9UUklNIHNldHRpbmcgKHNwZWNpYWwgZm9ybWF0IHJhbmdpbmcgZnJvbSAtMTAgdG8gKzIxKQorLy8hCisvLyEgXHJldHVybgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDMyX3QKK1NldHVwU2lnbkV4dGVuZFZkZHJUcmltVmFsdWUoIHVpbnQzMl90IHVpMzJWZGRyVHJpbVZhbCApCit7CisgICAgLy8KKyAgICAvLyBUaGUgVkREUiB0cmltIHZhbHVlIGlzIDUgYml0cyByZXByZXNlbnRpbmcgdGhlIHJhbmdlIGZyb20gLTEwIHRvICsyMQorICAgIC8vICh3aGVyZSAtMTA9MHgxNiwgLTE9MHgxRiwgMD0weDAwLCAxPTB4MDEgYW5kICsyMT0weDE1KQorICAgIC8vCisgICAgaW50MzJfdCBpMzJTaWduZWRWZGRyVmFsID0gdWkzMlZkZHJUcmltVmFsOworICAgIGlmICggaTMyU2lnbmVkVmRkclZhbCA+IDB4MTUgKSB7CisgICAgICAgIGkzMlNpZ25lZFZkZHJWYWwgLT0gMHgyMDsKKyAgICB9CisgICAgcmV0dXJuICggaTMyU2lnbmVkVmRkclZhbCApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgY29ycmVjdCBWSU1TX01PREUgYWNjb3JkaW5nIHRvIENDRkcgc2V0dGluZyAoQ0FDSEUgb3IgR1BSQU0pCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitTZXR1cFNldENhY2hlTW9kZUFjY29yZGluZ1RvQ2NmZ1NldHRpbmcoIHZvaWQgKQoreworICAgIC8vCisgICAgLy8gLSBNYWtlIHN1cmUgdG8gZW5hYmxlIGFnZ3Jlc3NpdmUgVklNUyBjbG9jayBnYXRpbmcgZm9yIHBvd2VyIG9wdGltaXphdGlvbgorICAgIC8vICAgT25seSBmb3IgUEcyIGRldmljZXMuCisgICAgLy8gLSBFbmFibGUgY2FjaGUgcHJlZmV0Y2ggZW5hYmxlIGFzIGRlZmF1bHQgc2V0dGluZworICAgIC8vICAgKFNsaWdodGx5IGhpZ2hlciBwb3dlciBjb25zdW1wdGlvbiwgYnV0IGhpZ2hlciBDUFUgcGVyZm9ybWFuY2UpCisgICAgLy8gLSBJRiAoIENDRkdfLi4uX0RJU19HUFJBTSA9PSAxICkKKyAgICAvLyAgIHRoZW46IEVuYWJsZSBjYWNoZSAoc2V0IGNhY2hlIG1vZGUgPSAxKSwgZXZlbiBpZiBzZXQgYnkgUk9NIGJvb3QgY29kZQorICAgIC8vICAgICAgICAgKFRoaXMgaXMgZG9uZSBiZWNhdXNlIGl0J3Mgbm90IHNldCBieSBib290IGNvZGUgd2hlbiBydW5uaW5nIGluc2lkZQorICAgIC8vICAgICAgICAgYSBkZWJ1Z2dlciBzdXBwb3J0aW5nIHRoZSBIYWx0IEluIEJvb3QgKEhJQikgZnVuY3Rpb25hbGl0eSkuCisgICAgLy8gICBlbHNlOiBTZXQgTU9ERV9HUFJBTSBpZiBub3QgYWxyZWFkeSBzZXQgKHNlZSBpbmxpbmUgY29tbWVudHMgYXMgd2VsbCkKKyAgICAvLworICAgIHVpbnQzMl90IHZpbXNDdGxNb2RlMCA7CisKKyAgICB3aGlsZSAoIEhXUkVHQklUVyggVklNU19CQVNFICsgVklNU19PX1NUQVQsIFZJTVNfU1RBVF9NT0RFX0NIQU5HSU5HX0JJVE4gKSkgeworICAgICAgICAvLyBEbyBub3RoaW5nIC0gd2FpdCBmb3IgYW4gZXZlbnR1YWwgb25nb2luZyBtb2RlIGNoYW5nZSB0byBjb21wbGV0ZS4KKyAgICAgICAgLy8gKFRoZXJlIHNob3VsZCB0eXBpY2FsbHkgYmUgbm8gd2FpdCB0aW1lIGhlcmUsIGJ1dCBuZWVkIHRvIGJlIHN1cmUpCisgICAgfQorCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgTW9kZT0wIGlzIGVxdWFsIHRvIE1PREVfR1BSQU0KKyAgICAvLworICAgIHZpbXNDdGxNb2RlMCA9ICgoIEhXUkVHKCBWSU1TX0JBU0UgKyBWSU1TX09fQ1RMICkgJiB+VklNU19DVExfTU9ERV9NICkgfCBWSU1TX0NUTF9EWU5fQ0dfRU5fTSB8IFZJTVNfQ1RMX1BSRUZfRU5fTSApOworCisKKyAgICBpZiAoIEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fU0laRV9BTkRfRElTX0ZMQUdTICkgJiBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU0gKSB7CisgICAgICAgIC8vIEVuYWJsZSBjYWNoZSAoYW5kIGhlbmNlIGRpc2FibGUgR1BSQU0pCisgICAgICAgIEhXUkVHKCBWSU1TX0JBU0UgKyBWSU1TX09fQ1RMICkgPSAoIHZpbXNDdGxNb2RlMCB8IFZJTVNfQ1RMX01PREVfQ0FDSEUgKTsKKyAgICB9IGVsc2UgaWYgKCggSFdSRUcoIFZJTVNfQkFTRSArIFZJTVNfT19TVEFUICkgJiBWSU1TX1NUQVRfTU9ERV9NICkgIT0gVklNU19TVEFUX01PREVfR1BSQU0gKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEdQUkFNIGlzIGVuYWJsZWQgaW4gQ0NGRyBidXQgbm90IHNlbGVjdGVkCisgICAgICAgIC8vIE5vdGU6IEl0IGlzIHJlY29tbWVuZGVkIHRvIGdvIHZpYSBNT0RFX09GRiB3aGVuIHN3aXRjaGluZyB0byBNT0RFX0dQUkFNCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKCBWSU1TX0JBU0UgKyBWSU1TX09fQ1RMICkgPSAoIHZpbXNDdGxNb2RlMCB8IFZJTVNfQ1RMX01PREVfT0ZGICk7CisgICAgICAgIHdoaWxlICgoIEhXUkVHKCBWSU1TX0JBU0UgKyBWSU1TX09fU1RBVCApICYgVklNU19TVEFUX01PREVfTSApICE9IFZJTVNfU1RBVF9NT0RFX09GRiApIHsKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgLSB3YWl0IGZvciBhbiBldmVudHVhbCBtb2RlIGNoYW5nZSB0byBjb21wbGV0ZSAoVGhpcyBnb2VzIGZhc3QpLgorICAgICAgICB9CisgICAgICAgIEhXUkVHKCBWSU1TX0JBU0UgKyBWSU1TX09fQ1RMICkgPSB2aW1zQ3RsTW9kZTA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ29ycmVjdCBtb2RlLCBidXQgbWFrZSBzdXJlIFBSRUZfRU4gYW5kIERZTl9DR19FTiBhbHdheXMgYXJlIHNldAorICAgICAgICBIV1JFRyggVklNU19CQVNFICsgVklNU19PX0NUTCApID0gdmltc0N0bE1vZGUwOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRG9pbmcgdGhlIHRyaWNreSBzdHVmZiBuZWVkZWQgdG8gZW50ZXIgbmV3IFJUQ1NVQlNFQ0lOQyB2YWx1ZQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorU2V0dXBTZXRBb25SdGNTdWJTZWNJbmMoIHVpbnQzMl90IHN1YlNlY0luYyApCit7CisgICAvLworICAgLy8gTG9hZGluZyBhIG5ldyBSVENTVUJTRUNJTkMgdmFsdWUgaXMgZG9uZSBpbiA1IHN0ZXBzOgorICAgLy8gMS4gV3JpdGUgYml0WzE1OjBdIG9mIG5ldyBTVUJTRUNJTkMgdmFsdWUgdG8gQVVYX1dVQ19PX1JUQ1NVQlNFQ0lOQzAKKyAgIC8vIDIuIFdyaXRlIGJpdFsyMzoxNl0gb2YgbmV3IFNVQlNFQ0lOQyB2YWx1ZSB0byBBVVhfV1VDX09fUlRDU1VCU0VDSU5DMQorICAgLy8gMy4gU2V0IEFVWF9XVUNfUlRDU1VCU0VDSU5DQ1RMX1VQRF9SRVEKKyAgIC8vIDQuIFdhaXQgZm9yIEFVWF9XVUNfUlRDU1VCU0VDSU5DQ1RMX1VQRF9BQ0sKKyAgIC8vIDUuIENsZWFyIEFVWF9XVUNfUlRDU1VCU0VDSU5DQ1RMX1VQRF9SRVEKKyAgIC8vCisgICBIV1JFRyggQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX1JUQ1NVQlNFQ0lOQzAgKSA9ICgoIHN1YlNlY0luYyAgICAgICApICYgQVVYX1dVQ19SVENTVUJTRUNJTkMwX0lOQzE1XzBfTSAgKTsKKyAgIEhXUkVHKCBBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fUlRDU1VCU0VDSU5DMSApID0gKCggc3ViU2VjSW5jID4+IDE2ICkgJiBBVVhfV1VDX1JUQ1NVQlNFQ0lOQzFfSU5DMjNfMTZfTSApOworCisgICBIV1JFRyggQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX1JUQ1NVQlNFQ0lOQ0NUTCApID0gQVVYX1dVQ19SVENTVUJTRUNJTkNDVExfVVBEX1JFUTsKKyAgIHdoaWxlKCAhICggSFdSRUdCSVRXKCBBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fUlRDU1VCU0VDSU5DQ1RMLCBBVVhfV1VDX1JUQ1NVQlNFQ0lOQ0NUTF9VUERfQUNLX0JJVE4gKSkpOworICAgSFdSRUcoIEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19SVENTVUJTRUNJTkNDVEwgKSA9IDA7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zZXR1cC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzAxNDQwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc2V0dXAuaApAQCAtMCwwICsxLDQxNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHNldHVwLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTE4IDEyOjUxOjIyICswMjAwIChXZWQsIDE4IE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2Mzk4CisqCisqICBEZXNjcmlwdGlvbjogICAgUHJvdG90eXBlcyBhbmQgZGVmaW5lcyBmb3IgdGhlIHNldHVwIEFQSS4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgc3lzdGVtX2NvbnRyb2xfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIHNldHVwX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fU0VUVVBfSF9fCisjZGVmaW5lIF9fU0VUVVBfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworLy8gSGFyZHdhcmUgaGVhZGVycworI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYWRpLmg+CisjaW5jbHVkZSA8aW5jL2h3X2FkaV8wX3JmLmg+CisjaW5jbHVkZSA8aW5jL2h3X2FkaV8xX3N5bnRoLmg+CisjaW5jbHVkZSA8aW5jL2h3X2FkaV8yX3JlZnN5cy5oPgorI2luY2x1ZGUgPGluYy9od19hZGlfM19yZWZzeXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYWRpXzRfYXV4Lmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9pb2MuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX3N5c2N0bC5oPgorI2luY2x1ZGUgPGluYy9od19hb25fd3VjLmg+CisjaW5jbHVkZSA8aW5jL2h3X2F1eF93dWMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfY2NmZy5oPgorI2luY2x1ZGUgPGluYy9od19jaGlwX2RlZi5oPgorI2luY2x1ZGUgPGluYy9od19kZGkuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZmxhc2guaD4KKyNpbmNsdWRlIDxpbmMvaHdfZmNmZzEuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZGRpXzBfb3NjLmg+CisjaW5jbHVkZSA8aW5jL2h3X3ByY20uaD4KKyNpbmNsdWRlIDxpbmMvaHdfdmltcy5oPgorI2luY2x1ZGUgPGluYy9od19hb25fYmF0bW9uLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9ydGMuaD4KKy8vIERyaXZlcmxpYiBoZWFkZXJzCisjaW5jbHVkZSA8ZHJpdmVybGliL2FkaS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9hb25fYmF0bW9uLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NwdS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9jaGlwaW5mby5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZGkuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW9jLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3ByY20uaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvc2V0dXAuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvc3lzX2N0cmwuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgU2V0dXBUcmltRGV2aWNlICAgICAgICAgICAgICAgICBOT1JPTV9TZXR1cFRyaW1EZXZpY2UKKyAgICAjZGVmaW5lIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcxIE5PUk9NX1NldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcxCisgICAgI2RlZmluZSBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMiBOT1JPTV9TZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMgorICAgICNkZWZpbmUgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzMgTk9ST01fU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzMKKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFkY1NoTW9kZUVuICAgICAgTk9ST01fU2V0dXBHZXRUcmltRm9yQWRjU2hNb2RlRW4KKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFkY1NoVmJ1ZkVuICAgICAgTk9ST01fU2V0dXBHZXRUcmltRm9yQWRjU2hWYnVmRW4KKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFtcGNvbXBDdHJsICAgICAgTk9ST01fU2V0dXBHZXRUcmltRm9yQW1wY29tcEN0cmwKKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFtcGNvbXBUaDEgICAgICAgTk9ST01fU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMQorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMiAgICAgICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgyCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JBbmFieXBhc3NWYWx1ZTEgIE5PUk9NX1NldHVwR2V0VHJpbUZvckFuYWJ5cGFzc1ZhbHVlMQorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yRGJsckxvb3BGaWx0ZXJSZXNldFZvbHRhZ2UgTk9ST01fU2V0dXBHZXRUcmltRm9yRGJsckxvb3BGaWx0ZXJSZXNldFZvbHRhZ2UKKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclJhZGNFeHRDZmcgICAgICAgTk9ST01fU2V0dXBHZXRUcmltRm9yUmFkY0V4dENmZworICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yUmNPc2NMZklCaWFzVHJpbSBOT1JPTV9TZXR1cEdldFRyaW1Gb3JSY09zY0xmSUJpYXNUcmltCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JSY09zY0xmUnR1bmVDdHVuZVRyaW0gTk9ST01fU2V0dXBHZXRUcmltRm9yUmNPc2NMZlJ0dW5lQ3R1bmVUcmltCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JYb3NjSGZDdGwgICAgICAgIE5PUk9NX1NldHVwR2V0VHJpbUZvclhvc2NIZkN0bAorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yWG9zY0hmRmFzdFN0YXJ0ICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JYb3NjSGZGYXN0U3RhcnQKKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclhvc2NIZkliaWFzdGhlcm0gTk9ST01fU2V0dXBHZXRUcmltRm9yWG9zY0hmSWJpYXN0aGVybQorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yWG9zY0xmUmVndWxhdG9yQW5kQ21pcnJ3clJhdGlvIE5PUk9NX1NldHVwR2V0VHJpbUZvclhvc2NMZlJlZ3VsYXRvckFuZENtaXJyd3JSYXRpbworICAgICNkZWZpbmUgU2V0dXBTaWduRXh0ZW5kVmRkclRyaW1WYWx1ZSAgICBOT1JPTV9TZXR1cFNpZ25FeHRlbmRWZGRyVHJpbVZhbHVlCisgICAgI2RlZmluZSBTZXR1cFNldENhY2hlTW9kZUFjY29yZGluZ1RvQ2NmZ1NldHRpbmcgTk9ST01fU2V0dXBTZXRDYWNoZU1vZGVBY2NvcmRpbmdUb0NjZmdTZXR0aW5nCisgICAgI2RlZmluZSBTZXR1cFNldEFvblJ0Y1N1YlNlY0luYyAgICAgICAgIE5PUk9NX1NldHVwU2V0QW9uUnRjU3ViU2VjSW5jCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUGVyZm9ybXMgdGhlIG5lY2Vzc2FyeSB0cmltIG9mIHRoZSBkZXZpY2Ugd2hpY2ggaXMgbm90IGRvbmUgaW4gYm9vdCBjb2RlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBleGVjdXRlIGNvbWluZyBmcm9tIFJPTSBib290LiBUaGUgY3VycmVudAorLy8hIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHRha2Ugc29mdCByZXNldCBpbnRvIGFjY291bnQuIEhvd2V2ZXIsIGl0IGRvZXMgbm8KKy8vISBkYW1hZ2UgdG8gZXhlY3V0ZSBpdCBhZ2Fpbi4gSXQgb25seSBjb25zdW1lcyB0aW1lLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgU2V0dXBUcmltRGV2aWNlKCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEZpcnN0IHBhcnQgb2YgY29uZmlndXJhdGlvbiByZXF1aXJlZCB3aGVuIHdha2luZyB1cCBmcm9tIHNodXRkb3duLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcxKCB1aW50MzJfdCBjY2ZnX01vZGVDb25mUmVnICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNlY29uZCBwYXJ0IG9mIGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQgd2hlbiB3YWtpbmcgdXAgZnJvbSBzaHV0ZG93bi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMiggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24sIHVpbnQzMl90IGNjZmdfTW9kZUNvbmZSZWcgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVGhpcmQgcGFydCBvZiBjb25maWd1cmF0aW9uIHJlcXVpcmVkIHdoZW4gd2FraW5nIHVwIGZyb20gc2h1dGRvd24uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzMoIHVpbnQzMl90IGNjZmdfTW9kZUNvbmZSZWcgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSBmcm9tIEZDRkcxIHRvIGJlIHVzZWQgYXMgQURDX1NIX01PREVfRU4gc2V0dGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yQWRjU2hNb2RlRW4oIHVpbnQzMl90IHVpMzJGY2ZnMVJldmlzaW9uICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgZnJvbSBGQ0ZHMSB0byBiZSB1c2VkIGFzIEFEQ19TSF9WQlVGX0VOIHNldHRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFNldHVwR2V0VHJpbUZvckFkY1NoVmJ1ZkVuKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBBTVBDT01QX0NUUkwgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yQW1wY29tcEN0cmwoIHVpbnQzMl90IHVpMzJGY2ZnMVJldmlzaW9uICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIEFNUENPTVBfVEgxIHJlZ2lzdGVyIGluIE9TQ19ESUcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFNldHVwR2V0VHJpbUZvckFtcGNvbXBUaDEoIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgQU1QQ09NUF9USDIgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMiggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBBTkFCWVBBU1NfVkFMVUUxIHJlZ2lzdGVyIGluIE9TQ19ESUcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFNldHVwR2V0VHJpbUZvckFuYWJ5cGFzc1ZhbHVlMSggdWludDMyX3QgY2NmZ19Nb2RlQ29uZlJlZyApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIGZyb20gRkNGRzEgdG8gYmUgdXNlZCBhcyBEQkxSX0xPT1BfRklMVEVSX1JFU0VUX1ZPTFRBR0Ugc2V0dGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yRGJsckxvb3BGaWx0ZXJSZXNldFZvbHRhZ2UoIHVpbnQzMl90IHVpMzJGY2ZnMVJldmlzaW9uICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIFJBRENFWFRDRkcgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yUmFkY0V4dENmZyggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgRkNGRzEgT1NDX0NPTkZfQVRFU1RMRl9SQ09TQ0xGX0lCSUFTX1RSSU0uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFNldHVwR2V0VHJpbUZvclJjT3NjTGZJQmlhc1RyaW0oIHVpbnQzMl90IHVpMzJGY2ZnMVJldmlzaW9uICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIFJDT1NDTEZfUlRVTkVfVFJJTSBhbmQgdGhlCisvLyEgUkNPU0NMRl9DVFVORV9UUklNIGJpdCBmaWVsZHMgaW4gdGhlIFhPU0NMRl9SQ09TQ0xGX0NUUkwgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yUmNPc2NMZlJ0dW5lQ3R1bmVUcmltKCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIFhPU0NIRkNUTCByZWdpc3RlciBpbiBPU0NfRElHLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBTZXR1cEdldFRyaW1Gb3JYb3NjSGZDdGwoIHVpbnQzMl90IHVpMzJGY2ZnMVJldmlzaW9uICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBhcyBPU0NfRElHOkNUTDEuWE9TQ19IRl9GQVNUX1NUQVJULgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBTZXR1cEdldFRyaW1Gb3JYb3NjSGZGYXN0U3RhcnQoIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgWE9TQ19IRl9JQklBU1RIRVJNIGJpdCBmaWVsZCBpbgorLy8hIHRoZSBBTkFCWVBBU1NfVkFMVUUyIHJlZ2lzdGVyIGluIE9TQ19ESUcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFNldHVwR2V0VHJpbUZvclhvc2NIZkliaWFzdGhlcm0oIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyBYT1NDTEZfUkVHVUxBVE9SX1RSSU0gYW5kIFhPU0NMRl9DTUlSUldSX1JBVElPIGFzIG9uZSBwYWNrZXQKKy8vISBzcGFubmluZyBiaXRzIFs1OjBdIGluIHRoZSByZXR1cm5lZCB2YWx1ZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yWG9zY0xmUmVndWxhdG9yQW5kQ21pcnJ3clJhdGlvKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTaWduIGV4dGVuZCB0aGUgVkREUl9UUklNIHNldHRpbmcgKHNwZWNpYWwgZm9ybWF0IHJhbmdpbmcgZnJvbSAtMTAgdG8gKzIxKQorLy8hCisvLyEgXHJldHVybgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQzMl90IFNldHVwU2lnbkV4dGVuZFZkZHJUcmltVmFsdWUoIHVpbnQzMl90IHVpMzJWZGRyVHJpbVZhbCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgY29ycmVjdCBWSU1TX01PREUgYWNjb3JkaW5nIHRvIENDRkcgc2V0dGluZyAoQ0FDSEUgb3IgR1BSQU0pCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTZXR1cFNldENhY2hlTW9kZUFjY29yZGluZ1RvQ2NmZ1NldHRpbmcoIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRG9pbmcgdGhlIHRyaWNreSBzdHVmZiBuZWVkZWQgdG8gZW50ZXIgbmV3IFJUQ1NVQlNFQ0lOQyB2YWx1ZQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgU2V0dXBTZXRBb25SdGNTdWJTZWNJbmMoIHVpbnQzMl90IHN1YlNlY0luYyApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgVkREUiBib29zdCBtb2RlCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX1NldHVwVHJpbURldmljZQorICAgICAgICAjdW5kZWYgIFNldHVwVHJpbURldmljZQorICAgICAgICAjZGVmaW5lIFNldHVwVHJpbURldmljZSAgICAgICAgICAgICAgICAgUk9NX1NldHVwVHJpbURldmljZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzEKKyAgICAgICAgI3VuZGVmICBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMQorICAgICAgICAjZGVmaW5lIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcxIFJPTV9TZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzIKKyAgICAgICAgI3VuZGVmICBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMgorICAgICAgICAjZGVmaW5lIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcyIFJPTV9TZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzMKKyAgICAgICAgI3VuZGVmICBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMworICAgICAgICAjZGVmaW5lIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmczIFJPTV9TZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBHZXRUcmltRm9yQWRjU2hNb2RlRW4KKyAgICAgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JBZGNTaE1vZGVFbgorICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFkY1NoTW9kZUVuICAgICAgUk9NX1NldHVwR2V0VHJpbUZvckFkY1NoTW9kZUVuCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEdldFRyaW1Gb3JBZGNTaFZidWZFbgorICAgICAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvckFkY1NoVmJ1ZkVuCisgICAgICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQWRjU2hWYnVmRW4gICAgICBST01fU2V0dXBHZXRUcmltRm9yQWRjU2hWYnVmRW4KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NldHVwR2V0VHJpbUZvckFtcGNvbXBDdHJsCisgICAgICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yQW1wY29tcEN0cmwKKyAgICAgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JBbXBjb21wQ3RybCAgICAgIFJPTV9TZXR1cEdldFRyaW1Gb3JBbXBjb21wQ3RybAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMQorICAgICAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvckFtcGNvbXBUaDEKKyAgICAgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgxICAgICAgIFJPTV9TZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgxCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgyCisgICAgICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMgorICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFtcGNvbXBUaDIgICAgICAgUk9NX1NldHVwR2V0VHJpbUZvckFtcGNvbXBUaDIKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NldHVwR2V0VHJpbUZvckFuYWJ5cGFzc1ZhbHVlMQorICAgICAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvckFuYWJ5cGFzc1ZhbHVlMQorICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFuYWJ5cGFzc1ZhbHVlMSAgUk9NX1NldHVwR2V0VHJpbUZvckFuYWJ5cGFzc1ZhbHVlMQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBHZXRUcmltRm9yRGJsckxvb3BGaWx0ZXJSZXNldFZvbHRhZ2UKKyAgICAgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JEYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZQorICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckRibHJMb29wRmlsdGVyUmVzZXRWb2x0YWdlIFJPTV9TZXR1cEdldFRyaW1Gb3JEYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBHZXRUcmltRm9yUmFkY0V4dENmZworICAgICAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvclJhZGNFeHRDZmcKKyAgICAgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JSYWRjRXh0Q2ZnICAgICAgIFJPTV9TZXR1cEdldFRyaW1Gb3JSYWRjRXh0Q2ZnCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEdldFRyaW1Gb3JSY09zY0xmSUJpYXNUcmltCisgICAgICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yUmNPc2NMZklCaWFzVHJpbQorICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclJjT3NjTGZJQmlhc1RyaW0gUk9NX1NldHVwR2V0VHJpbUZvclJjT3NjTGZJQmlhc1RyaW0KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NldHVwR2V0VHJpbUZvclJjT3NjTGZSdHVuZUN0dW5lVHJpbQorICAgICAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvclJjT3NjTGZSdHVuZUN0dW5lVHJpbQorICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclJjT3NjTGZSdHVuZUN0dW5lVHJpbSBST01fU2V0dXBHZXRUcmltRm9yUmNPc2NMZlJ0dW5lQ3R1bmVUcmltCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEdldFRyaW1Gb3JYb3NjSGZDdGwKKyAgICAgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JYb3NjSGZDdGwKKyAgICAgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JYb3NjSGZDdGwgICAgICAgIFJPTV9TZXR1cEdldFRyaW1Gb3JYb3NjSGZDdGwKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NldHVwR2V0VHJpbUZvclhvc2NIZkZhc3RTdGFydAorICAgICAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvclhvc2NIZkZhc3RTdGFydAorICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclhvc2NIZkZhc3RTdGFydCAgUk9NX1NldHVwR2V0VHJpbUZvclhvc2NIZkZhc3RTdGFydAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBHZXRUcmltRm9yWG9zY0hmSWJpYXN0aGVybQorICAgICAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvclhvc2NIZkliaWFzdGhlcm0KKyAgICAgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JYb3NjSGZJYmlhc3RoZXJtIFJPTV9TZXR1cEdldFRyaW1Gb3JYb3NjSGZJYmlhc3RoZXJtCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEdldFRyaW1Gb3JYb3NjTGZSZWd1bGF0b3JBbmRDbWlycndyUmF0aW8KKyAgICAgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JYb3NjTGZSZWd1bGF0b3JBbmRDbWlycndyUmF0aW8KKyAgICAgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JYb3NjTGZSZWd1bGF0b3JBbmRDbWlycndyUmF0aW8gUk9NX1NldHVwR2V0VHJpbUZvclhvc2NMZlJlZ3VsYXRvckFuZENtaXJyd3JSYXRpbworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBTaWduRXh0ZW5kVmRkclRyaW1WYWx1ZQorICAgICAgICAjdW5kZWYgIFNldHVwU2lnbkV4dGVuZFZkZHJUcmltVmFsdWUKKyAgICAgICAgI2RlZmluZSBTZXR1cFNpZ25FeHRlbmRWZGRyVHJpbVZhbHVlICAgIFJPTV9TZXR1cFNpZ25FeHRlbmRWZGRyVHJpbVZhbHVlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cFNldENhY2hlTW9kZUFjY29yZGluZ1RvQ2NmZ1NldHRpbmcKKyAgICAgICAgI3VuZGVmICBTZXR1cFNldENhY2hlTW9kZUFjY29yZGluZ1RvQ2NmZ1NldHRpbmcKKyAgICAgICAgI2RlZmluZSBTZXR1cFNldENhY2hlTW9kZUFjY29yZGluZ1RvQ2NmZ1NldHRpbmcgUk9NX1NldHVwU2V0Q2FjaGVNb2RlQWNjb3JkaW5nVG9DY2ZnU2V0dGluZworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBTZXRBb25SdGNTdWJTZWNJbmMKKyAgICAgICAgI3VuZGVmICBTZXR1cFNldEFvblJ0Y1N1YlNlY0luYworICAgICAgICAjZGVmaW5lIFNldHVwU2V0QW9uUnRjU3ViU2VjSW5jICAgICAgICAgUk9NX1NldHVwU2V0QW9uUnRjU3ViU2VjSW5jCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19TRVRVUF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc21waC5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc21waC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYTA4MzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zbXBoLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBzbXBoLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTAxLTEzIDE2OjU5OjU1ICswMTAwIChUdWUsIDEzIEphbiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQyMzY1CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgTUNVIFNlbWFwaG9yZS4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvc21waC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgU01QSEFjcXVpcmUKKyAgICAjZGVmaW5lIFNNUEhBY3F1aXJlICAgICAgICAgICAgICAgICAgICAgTk9ST01fU01QSEFjcXVpcmUKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEFjcXVpcmUgYSBzZW1hcGhvcmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitTTVBIQWNxdWlyZSh1aW50MzJfdCB1aTMyU2VtYXBob3JlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzMpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfNCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF81KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzYpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfNykgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF84KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzkpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTEpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTIpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTMpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTQpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTUpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTYpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTcpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTgpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTkpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjEpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjIpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjMpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjQpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjUpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjYpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjcpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjgpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjkpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMzApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMzEpKTsKKworICAgIC8vCisgICAgLy8gV2FpdCBmb3Igc2VtYXBob3JlIHRvIGJlIHJlbGVhc2Ugc3VjaCB0aGF0IGl0IGNhbiBiZSBjbGFpbWVkCisgICAgLy8gU2VtYXBob3JlIHJlZ2lzdGVyIHJlYWRzIDEgd2hlbiBsb2NrIHdhcyBhY3F1aXJlZCBvdGhlcndpc2UgMAorICAgIC8vIChpLmUuIFNNUEhfQ0xBSU1FRCkuCisgICAgLy8KKyAgICB3aGlsZShIV1JFRyhTTVBIX0JBU0UgKyBTTVBIX09fU01QSDAgKyA0ICogdWkzMlNlbWFwaG9yZSkgPT0KKyAgICAgICAgICAgIFNNUEhfQ0xBSU1FRCkKKyAgICB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc21waC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc21waC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYzQ2NzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zbXBoLmgKQEAgLTAsMCArMSwzMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBzbXBoLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA3LTE2IDEyOjEyOjA0ICswMjAwIChUaHUsIDE2IEp1bCAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0MTUxCisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIE1DVSBTZW1hcGhvcmUuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHBlcmlwaGVyYWxfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIG1jdXNlbWFwaG9yZV9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX1NNUEhfSF9fCisjZGVmaW5lIF9fU01QSF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19zbXBoLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBTTVBIQWNxdWlyZSAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1NNUEhBY3F1aXJlCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEdlbmVyYWwgY29uc3RhbnRzIGFuZCBkZWZpbmVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBTTVBIX0ZSRUUgICAgIDB4MDAwMDAwMDEgLy8gTUNVIFNlbWFwaG9yZSBoYXMgbm90IGJlZW4gY2xhaW1lZAorI2RlZmluZSBTTVBIX0NMQUlNRUQgIDB4MDAwMDAwMDAgLy8gTUNVIFNlbWFwaG9yZSBoYXMgYmVlbiBjbGFpbWVkCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFNNUEhBY3F1aXJlLCBTTVBIVHJ5QWNxdWlyZSBhbmQgU01QSFJlbGVhc2UKKy8vIGFzIHRoZSB1aTMyU2VtYXBob3JlIHBhcmFtZXRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFNNUEhfMCAgICAwIC8vIE1DVSBTZW1hcGhvcmUgIDAKKyNkZWZpbmUgU01QSF8xICAgIDEgLy8gTUNVIFNlbWFwaG9yZSAgMQorI2RlZmluZSBTTVBIXzIgICAgMiAvLyBNQ1UgU2VtYXBob3JlICAyCisjZGVmaW5lIFNNUEhfMyAgICAzIC8vIE1DVSBTZW1hcGhvcmUgIDMKKyNkZWZpbmUgU01QSF80ICAgIDQgLy8gTUNVIFNlbWFwaG9yZSAgNAorI2RlZmluZSBTTVBIXzUgICAgNSAvLyBNQ1UgU2VtYXBob3JlICA1CisjZGVmaW5lIFNNUEhfNiAgICA2IC8vIE1DVSBTZW1hcGhvcmUgIDYKKyNkZWZpbmUgU01QSF83ICAgIDcgLy8gTUNVIFNlbWFwaG9yZSAgNworI2RlZmluZSBTTVBIXzggICAgOCAvLyBNQ1UgU2VtYXBob3JlICA4CisjZGVmaW5lIFNNUEhfOSAgICA5IC8vIE1DVSBTZW1hcGhvcmUgIDkKKyNkZWZpbmUgU01QSF8xMCAgMTAgLy8gTUNVIFNlbWFwaG9yZSAxMAorI2RlZmluZSBTTVBIXzExICAxMSAvLyBNQ1UgU2VtYXBob3JlIDExCisjZGVmaW5lIFNNUEhfMTIgIDEyIC8vIE1DVSBTZW1hcGhvcmUgMTIKKyNkZWZpbmUgU01QSF8xMyAgMTMgLy8gTUNVIFNlbWFwaG9yZSAxMworI2RlZmluZSBTTVBIXzE0ICAxNCAvLyBNQ1UgU2VtYXBob3JlIDE0CisjZGVmaW5lIFNNUEhfMTUgIDE1IC8vIE1DVSBTZW1hcGhvcmUgMTUKKyNkZWZpbmUgU01QSF8xNiAgMTYgLy8gTUNVIFNlbWFwaG9yZSAxNgorI2RlZmluZSBTTVBIXzE3ICAxNyAvLyBNQ1UgU2VtYXBob3JlIDE3CisjZGVmaW5lIFNNUEhfMTggIDE4IC8vIE1DVSBTZW1hcGhvcmUgMTgKKyNkZWZpbmUgU01QSF8xOSAgMTkgLy8gTUNVIFNlbWFwaG9yZSAxOQorI2RlZmluZSBTTVBIXzIwICAyMCAvLyBNQ1UgU2VtYXBob3JlIDIwCisjZGVmaW5lIFNNUEhfMjEgIDIxIC8vIE1DVSBTZW1hcGhvcmUgMjEKKyNkZWZpbmUgU01QSF8yMiAgMjIgLy8gTUNVIFNlbWFwaG9yZSAyMgorI2RlZmluZSBTTVBIXzIzICAyMyAvLyBNQ1UgU2VtYXBob3JlIDIzCisjZGVmaW5lIFNNUEhfMjQgIDI0IC8vIE1DVSBTZW1hcGhvcmUgMjQKKyNkZWZpbmUgU01QSF8yNSAgMjUgLy8gTUNVIFNlbWFwaG9yZSAyNQorI2RlZmluZSBTTVBIXzI2ICAyNiAvLyBNQ1UgU2VtYXBob3JlIDI2CisjZGVmaW5lIFNNUEhfMjcgIDI3IC8vIE1DVSBTZW1hcGhvcmUgMjcKKyNkZWZpbmUgU01QSF8yOCAgMjggLy8gTUNVIFNlbWFwaG9yZSAyOAorI2RlZmluZSBTTVBIXzI5ICAyOSAvLyBNQ1UgU2VtYXBob3JlIDI5CisjZGVmaW5lIFNNUEhfMzAgIDMwIC8vIE1DVSBTZW1hcGhvcmUgMzAKKyNkZWZpbmUgU01QSF8zMSAgMzEgLy8gTUNVIFNlbWFwaG9yZSAzMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQWNxdWlyZSBhIHNlbWFwaG9yZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gYWNxdWlyZXMgdGhlIGdpdmVuIHNlbWFwaG9yZSwgYmxvY2tpbmcgdGhlIGNhbGwgdW50aWwKKy8vISB0aGUgc2VtYXBob3JlIGlzIGF2YWlsYWJsZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyU2VtYXBob3JlIGlzIHRoZSBzZW1hcGhvcmUgbnVtYmVyLgorLy8hIC0gXHJlZiBTTVBIXzAKKy8vISAtIFxyZWYgU01QSF8xCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgU01QSF8zMQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgU01QSEFjcXVpcmUodWludDMyX3QgdWkzMlNlbWFwaG9yZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFRyeSB0byBBY3F1aXJlIGEgc2VtYXBob3JlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB0cmllcyB0byBhY3F1aXJlIHRoZSBnaXZlbiBzZW1hcGhvcmUsIGlmIHRoZSBzZW1hcGhvcmUKKy8vISBjb3VsZCBub3QgYmUgY2xhaW1lZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyU2VtYXBob3JlIGlzIHRoZSBzZW1hcGhvcmUgbnVtYmVyLgorLy8hIC0gXHJlZiBTTVBIXzAKKy8vISAtIFxyZWYgU01QSF8xCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgU01QSF8zMQorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGlmIGEgc2VtYXBob3JlIHdhcyBhY3F1aXJlZAorLy8hIC0gXGMgdHJ1ZSAgOiBTZW1hcGhvcmUgYWNxdWlyZWQuCisvLyEgLSBcYyBmYWxzZSA6IFNlbWFwaG9yZSBcYiBub3QgYWNxdWlyZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK1NNUEhUcnlBY3F1aXJlKHVpbnQzMl90IHVpMzJTZW1hcGhvcmUpCit7CisgICAgdWludDMyX3QgdWkzMlNlbWFSZWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8wKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzEpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMikgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8zKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzQpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfNSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF82KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzcpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfOCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF85KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzEwKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzExKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzEyKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzEzKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE0KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE1KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE2KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE3KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE4KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE5KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzIwKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzIxKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzIyKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzIzKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI0KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI1KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI2KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI3KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI4KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI5KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzMwKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzMxKSk7CisKKyAgICAvLworICAgIC8vIFNlbWFwaG9yZSByZWdpc3RlciByZWFkcyAxIGlmIGxvY2sgd2FzIGFjcXVpcmVkCisgICAgLy8gKGkuZS4gU01QSF9GUkVFKS4KKyAgICAvLworICAgIHVpMzJTZW1hUmVnID0gSFdSRUcoU01QSF9CQVNFICsgU01QSF9PX1NNUEgwICsgNCAqIHVpMzJTZW1hcGhvcmUpOworCisgICAgcmV0dXJuICh1aTMyU2VtYVJlZyA9PSBTTVBIX0ZSRUUpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWxlYXNlIGEgc2VtYXBob3JlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZWxlYXNlcyB0aGUgZ2l2ZW4gc2VtYXBob3JlLgorLy8hCisvLyEgXG5vdGUgSXQgaXMgdXAgdG8gdGhlIGFwcGxpY2F0aW9uIHRvIHByb3ZpZGUgdGhlIGNvbnZlbnRpb24gZm9yIGNsZWFyaW5nCisvLyEgc2VtYXBob3JlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJTZW1hcGhvcmUgaXMgdGhlIHNlbWFwaG9yZSBudW1iZXIuCisvLyEgLSBccmVmIFNNUEhfMAorLy8hIC0gXHJlZiBTTVBIXzEKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBTTVBIXzMxCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU01QSFJlbGVhc2UodWludDMyX3QgdWkzMlNlbWFwaG9yZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8wKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzEpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMikgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8zKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzQpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfNSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF82KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzcpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfOCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF85KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzEwKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzExKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzEyKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzEzKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE0KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE1KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE2KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE3KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE4KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzE5KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzIwKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzIxKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzIyKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzIzKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI0KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI1KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI2KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI3KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI4KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzI5KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzMwKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzMxKSk7CisKKyAgICAvLworICAgIC8vIE5vIGNoZWNrIGJlZm9yZSByZWxlYXNlLCBpdCBpcyB1cCB0byB0aGUgYXBwbGljYXRpb24gdG8gcHJvdmlkZSB0aGUKKyAgICAvLyBjb252ZW50aW9ucyBmb3Igd2hvIGFuZCB3aGVuIGEgc2VtYXBob3JlIGNhbiBiZSByZWxlYXNlZC4KKyAgICAvLworICAgIEhXUkVHKFNNUEhfQkFTRSArIFNNUEhfT19TTVBIMCArIDQgKiB1aTMyU2VtYXBob3JlKSA9IFNNUEhfRlJFRTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fU01QSEFjcXVpcmUKKyAgICAgICAgI3VuZGVmICBTTVBIQWNxdWlyZQorICAgICAgICAjZGVmaW5lIFNNUEhBY3F1aXJlICAgICAgICAgICAgICAgICAgICAgUk9NX1NNUEhBY3F1aXJlCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19TTVBIX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zbXBoX2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc21waF9kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjc5NWE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc21waF9kb2MuaApAQCAtMCwwICsxLDU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc21waF9kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgbWN1c2VtYXBob3JlX2FwaQorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX21jdXNlbWFwaG9yZSBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSBNQ1UgU2VtYXBob3JlIG9mZmVycyAzMiBzZW1hcGhvcmVzIHRoYXQgZWFjaCBjYW4gYmUgY2xhaW1lZCBhbmQgcmVsZWFzZWQgaW4gYW4gYXRvbWljIG9wZXJhdGlvbi4KKy8vISBPbmUgYW5kIG9ubHkgb25lIHNlbWFwaG9yZSBjYW4gYmUgaGFuZGxlZCBkdXJpbmcgYSB0cmFuc2FjdGlvbi4KKy8vIQorLy8hIENsYWltaW5nIGEgc2VtYXBob3JlIGNhdXNlcyBzdWJzZXF1ZW50IGNsYWltcy9yZWFkcyB0byByZXR1cm4gJzAnIChpLmUuICJub3QgYXZhaWxhYmxlIikuCisvLyEgSG93IHRoZSBzZW1hcGhvcmVzIGFyZSB1c2VkIGFuZCByZXNwZWN0ZWQgaXMgZGVjaWRlZCBieSBzb2Z0d2FyZS4KKy8vIQorLy8hIFxzZWN0aW9uIHNlY19tY3VzZW1hcGhvcmVfYXBpIEFQSQorLy8hCisvLyEgVGhlIEFQSSBmdW5jdGlvbnMgY2FuIGJlIGdyb3VwZWQgbGlrZSB0aGlzOgorLy8hCisvLyEgU2VtYXBob3JlIGFjcXVpcmU6CisvLyEgLSBccmVmIFNNUEhBY3F1aXJlKCkKKy8vISAtIFxyZWYgU01QSFRyeUFjcXVpcmUoKQorLy8hCisvLyEgU2VtYXBob3JlIHJlbGVhc2U6CisvLyEgLSBccmVmIFNNUEhSZWxlYXNlKCkKKy8vIQorLy8hIEB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zc2kuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMGY0MzMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zc2kuYwpAQCAtMCwwICsxLDM0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHNzaS5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMS0xNiAxOTo0MTo0NyArMDEwMCAoTW9uLCAxNiBOb3YgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTA5NAorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgU3luY2hyb25vdXMgU2VyaWFsIEludGVyZmFjZQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9zc2kuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIFNTSUNvbmZpZ1NldEV4cENsaworICAgICNkZWZpbmUgU1NJQ29uZmlnU2V0RXhwQ2xrICAgICAgICAgICAgICBOT1JPTV9TU0lDb25maWdTZXRFeHBDbGsKKyAgICAjdW5kZWYgIFNTSURhdGFQdXQKKyAgICAjZGVmaW5lIFNTSURhdGFQdXQgICAgICAgICAgICAgICAgICAgICAgTk9ST01fU1NJRGF0YVB1dAorICAgICN1bmRlZiAgU1NJRGF0YVB1dE5vbkJsb2NraW5nCisgICAgI2RlZmluZSBTU0lEYXRhUHV0Tm9uQmxvY2tpbmcgICAgICAgICAgIE5PUk9NX1NTSURhdGFQdXROb25CbG9ja2luZworICAgICN1bmRlZiAgU1NJRGF0YUdldAorICAgICNkZWZpbmUgU1NJRGF0YUdldCAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9TU0lEYXRhR2V0CisgICAgI3VuZGVmICBTU0lEYXRhR2V0Tm9uQmxvY2tpbmcKKyAgICAjZGVmaW5lIFNTSURhdGFHZXROb25CbG9ja2luZyAgICAgICAgICAgTk9ST01fU1NJRGF0YUdldE5vbkJsb2NraW5nCisgICAgI3VuZGVmICBTU0lJbnRSZWdpc3RlcgorICAgICNkZWZpbmUgU1NJSW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgICBOT1JPTV9TU0lJbnRSZWdpc3RlcgorICAgICN1bmRlZiAgU1NJSW50VW5yZWdpc3RlcgorICAgICNkZWZpbmUgU1NJSW50VW5yZWdpc3RlciAgICAgICAgICAgICAgICBOT1JPTV9TU0lJbnRVbnJlZ2lzdGVyCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb25maWd1cmVzIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1NTSUNvbmZpZ1NldEV4cENsayh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlNTSUNsaywKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyUHJvdG9jb2wsIHVpbnQzMl90IHVpMzJNb2RlLAorICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJCaXRSYXRlLCB1aW50MzJfdCB1aTMyRGF0YVdpZHRoKQoreworICAgIHVpbnQzMl90IHVpMzJNYXhCaXRSYXRlOworICAgIHVpbnQzMl90IHVpMzJSZWdWYWw7CisgICAgdWludDMyX3QgdWkzMlByZURpdjsKKyAgICB1aW50MzJfdCB1aTMyU0NSOworICAgIHVpbnQzMl90IHVpMzJTUEhfU1BPOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlByb3RvY29sID09IFNTSV9GUkZfTU9UT19NT0RFXzApIHx8CisgICAgICAgICAgICh1aTMyUHJvdG9jb2wgPT0gU1NJX0ZSRl9NT1RPX01PREVfMSkgfHwKKyAgICAgICAgICAgKHVpMzJQcm90b2NvbCA9PSBTU0lfRlJGX01PVE9fTU9ERV8yKSB8fAorICAgICAgICAgICAodWkzMlByb3RvY29sID09IFNTSV9GUkZfTU9UT19NT0RFXzMpIHx8CisgICAgICAgICAgICh1aTMyUHJvdG9jb2wgPT0gU1NJX0ZSRl9USSkgfHwKKyAgICAgICAgICAgKHVpMzJQcm90b2NvbCA9PSBTU0lfRlJGX05NVykpOworICAgIEFTU0VSVCgodWkzMk1vZGUgPT0gU1NJX01PREVfTUFTVEVSKSB8fAorICAgICAgICAgICAodWkzMk1vZGUgPT0gU1NJX01PREVfU0xBVkUpIHx8CisgICAgICAgICAgICh1aTMyTW9kZSA9PSBTU0lfTU9ERV9TTEFWRV9PRCkpOworICAgIEFTU0VSVCgoKHVpMzJNb2RlID09IFNTSV9NT0RFX01BU1RFUikgJiYgKHVpMzJCaXRSYXRlIDw9ICh1aTMyU1NJQ2xrIC8gMikpKSB8fAorICAgICAgICAgICAoKHVpMzJNb2RlICE9IFNTSV9NT0RFX01BU1RFUikgJiYgKHVpMzJCaXRSYXRlIDw9ICh1aTMyU1NJQ2xrIC8gMTIpKSkpOworICAgIEFTU0VSVCgodWkzMlNTSUNsayAvIHVpMzJCaXRSYXRlKSA8PSAoMjU0ICogMjU2KSk7CisgICAgQVNTRVJUKCh1aTMyRGF0YVdpZHRoID49IDQpICYmICh1aTMyRGF0YVdpZHRoIDw9IDE2KSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgbW9kZS4KKyAgICAvLworICAgIHVpMzJSZWdWYWwgPSAodWkzMk1vZGUgPT0gU1NJX01PREVfU0xBVkVfT0QpID8gU1NJX0NSMV9TT0QgOiAwOworICAgIHVpMzJSZWdWYWwgfD0gKHVpMzJNb2RlID09IFNTSV9NT0RFX01BU1RFUikgPyAwIDogU1NJX0NSMV9NUzsKKyAgICBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0NSMSkgPSB1aTMyUmVnVmFsOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGNsb2NrIHByZWRpdmlkZXIuCisgICAgLy8KKyAgICB1aTMyTWF4Qml0UmF0ZSA9IHVpMzJTU0lDbGsgLyB1aTMyQml0UmF0ZTsKKyAgICB1aTMyUHJlRGl2ID0gMDsKKyAgICBkbworICAgIHsKKyAgICAgICAgdWkzMlByZURpdiArPSAyOworICAgICAgICB1aTMyU0NSID0gKHVpMzJNYXhCaXRSYXRlIC8gdWkzMlByZURpdikgLSAxOworICAgIH0KKyAgICB3aGlsZSh1aTMyU0NSID4gMjU1KTsKKyAgICBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0NQU1IpID0gdWkzMlByZURpdjsKKworICAgIC8vCisgICAgLy8gU2V0IHByb3RvY29sIGFuZCBjbG9jayByYXRlLgorICAgIC8vCisgICAgdWkzMlNQSF9TUE8gPSAodWkzMlByb3RvY29sICYgMykgPDwgNjsKKyAgICB1aTMyUHJvdG9jb2wgJj0gU1NJX0NSMF9GUkZfTTsKKyAgICB1aTMyUmVnVmFsID0gKHVpMzJTQ1IgPDwgOCkgfCB1aTMyU1BIX1NQTyB8IHVpMzJQcm90b2NvbCB8ICh1aTMyRGF0YVdpZHRoIC0gMSk7CisgICAgSFdSRUcodWkzMkJhc2UgKyBTU0lfT19DUjApID0gdWkzMlJlZ1ZhbDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBQdXRzIGEgZGF0YSBlbGVtZW50IGludG8gdGhlIFNTSSB0cmFuc21pdCBGSUZPCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MzJfdAorU1NJRGF0YVB1dE5vbkJsb2NraW5nKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRGF0YSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoU1NJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyRGF0YSAmICgweGZmZmZmZmZlIDw8IChIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0NSMCkgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NJX0NSMF9EU1NfTSkpKSA9PSAwKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgZm9yIHNwYWNlIHRvIHdyaXRlLgorICAgIC8vCisgICAgaWYoSFdSRUcodWkzMkJhc2UgKyBTU0lfT19TUikgJiBTU0lfU1JfVE5GKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBTU0lfT19EUikgPSB1aTMyRGF0YTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgUHV0cyBhIGRhdGEgZWxlbWVudCBpbnRvIHRoZSBTU0kgdHJhbnNtaXQgRklGTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1NTSURhdGFQdXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJEYXRhKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJEYXRhICYgKDB4ZmZmZmZmZmUgPDwgKEhXUkVHKHVpMzJCYXNlICsgU1NJX09fQ1IwKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0lfQ1IwX0RTU19NKSkpID09IDApOworCisgICAgLy8KKyAgICAvLyBXYWl0IHVudGlsIHRoZXJlIGlzIHNwYWNlLgorICAgIC8vCisgICAgd2hpbGUoIShIV1JFRyh1aTMyQmFzZSArIFNTSV9PX1NSKSAmIFNTSV9TUl9UTkYpKQorICAgIHsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBTU0kuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0RSKSA9IHVpMzJEYXRhOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldHMgYSBkYXRhIGVsZW1lbnQgZnJvbSB0aGUgU1NJIHJlY2VpdmUgRklGTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1NTSURhdGFHZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90ICpwdWkzMkRhdGEpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBXYWl0IHVudGlsIHRoZXJlIGlzIGRhdGEgdG8gYmUgcmVhZC4KKyAgICAvLworICAgIHdoaWxlKCEoSFdSRUcodWkzMkJhc2UgKyBTU0lfT19TUikgJiBTU0lfU1JfUk5FKSkKKyAgICB7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZWFkIGRhdGEgZnJvbSBTU0kuCisgICAgLy8KKyAgICAqcHVpMzJEYXRhID0gSFdSRUcodWkzMkJhc2UgKyBTU0lfT19EUik7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0cyBhIGRhdGEgZWxlbWVudCBmcm9tIHRoZSBTU0kgcmVjZWl2ZSBGSUZPCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gcHVpMzJEYXRhIGlzIGEgcG9pbnRlciB0byBhIHN0b3JhZ2UgbG9jYXRpb24gZm9yIGRhdGEgdGhhdCB3YXMKKy8vISByZWNlaXZlZCBvdmVyIHRoZSBTU0kgaW50ZXJmYWNlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBnZXRzIHJlY2VpdmVkIGRhdGEgZnJvbSB0aGUgcmVjZWl2ZSBGSUZPIG9mIHRoZSBzcGVjaWZpZWQgU1NJCisvLyEgbW9kdWxlIGFuZCBwbGFjZXMgdGhhdCBkYXRhIGludG8gdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSB0aGUgXGUgdWkzMkRhdGEKKy8vISBwYXJhbWV0ZXIuIElmIHRoZXJlIGlzIG5vIGRhdGEgaW4gdGhlIEZJRk8sIHRoZW4gdGhpcyBmdW5jdGlvbiAgcmV0dXJucyBhCisvLyEgemVyby4KKy8vIQorLy8hIFxub3RlIE9ubHkgdGhlIGxvd2VyIE4gYml0cyBvZiB0aGUgdmFsdWUgd3JpdHRlbiB0byBcZSBwdWkzMkRhdGEgY29udGFpbgorLy8hIHZhbGlkIGRhdGEsIHdoZXJlIE4gaXMgdGhlIGRhdGEgd2lkdGggYXMgY29uZmlndXJlZCBieSBcc2EKKy8vISBTU0lDb25maWdTZXRFeHBDbGsoKS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBpbnRlcmZhY2UgaXMgY29uZmlndXJlZCBmb3IKKy8vISA4LWJpdCBkYXRhIHdpZHRoLCBvbmx5IHRoZSBsb3dlciA4IGJpdHMgb2YgdGhlIHZhbHVlIHdyaXR0ZW4gdG8gXGUgcHVpMzJEYXRhCisvLyEgY29udGFpbiB2YWxpZCBkYXRhLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcmVhZCBmcm9tIHRoZSBTU0kgcmVjZWl2ZSBGSUZPLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDMyX3QKK1NTSURhdGFHZXROb25CbG9ja2luZyh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgKnB1aTMyRGF0YSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoU1NJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIENoZWNrIGZvciBkYXRhIHRvIHJlYWQuCisgICAgLy8KKyAgICBpZihIV1JFRyh1aTMyQmFzZSArIFNTSV9PX1NSKSAmIFNTSV9TUl9STkUpCisgICAgeworICAgICAgICAqcHVpMzJEYXRhID0gSFdSRUcodWkzMkJhc2UgKyBTU0lfT19EUik7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydAorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIHNwZWNpZmllcyB0aGUgU1NJIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHBmbkhhbmRsZXIgaXMgYSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUKKy8vISBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydCBpbnRlcnJ1cHQgb2NjdXJzLgorLy8hCisvLyEgVGhpcyBzZXRzIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGFuIFNTSSBpbnRlcnJ1cHQKKy8vISBvY2N1cnMuIFRoaXMgd2lsbCBlbmFibGUgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyOworLy8hIHNwZWNpZmljIFNTSSBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCB2aWEgU1NJSW50RW5hYmxlKCkuIElmIG5lY2Vzc2FyeSwKKy8vISBpdCBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZQorLy8hIHZpYSBTU0lJbnRDbGVhcigpLgorLy8hCisvLyEgXHNhIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1NTSUludFJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlLCB2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpCit7CisgICAgdWludDMyX3QgdWkzMkludDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGJhc2VkIG9uIHRoZSBTU0kgcG9ydC4KKyAgICAvLworICAgIHVpMzJJbnQgPSAodWkzMkJhc2UgPT0gU1NJMF9CQVNFKSA/IElOVF9TU0kwX0NPTUIgOiBJTlRfU1NJMV9DT01COworCisgICAgLy8KKyAgICAvLyBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRSZWdpc3Rlcih1aTMySW50LCBwZm5IYW5kbGVyKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydCBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBJbnRFbmFibGUodWkzMkludCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydAorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIHNwZWNpZmllcyB0aGUgU1NJIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gYSBTU0kKKy8vISBpbnRlcnJ1cHQgb2NjdXJzLiBUaGlzIHdpbGwgYWxzbyBtYXNrIG9mZiB0aGUgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQKKy8vISBjb250cm9sbGVyIHNvIHRoYXQgdGhlIGludGVycnVwdCBoYW5kbGVyIG5vIGxvbmdlciBpcyBjYWxsZWQuCisvLyEKKy8vISBcc2EgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorU1NJSW50VW5yZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICB1aW50MzJfdCB1aTMySW50OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBEZXRlcm1pbmUgdGhlIGludGVycnVwdCBudW1iZXIgYmFzZWQgb24gdGhlIFNTSSBwb3J0LgorICAgIC8vCisgICAgdWkzMkludCA9ICh1aTMyQmFzZSA9PSBTU0kwX0JBU0UpID8gSU5UX1NTSTBfQ09NQiA6IElOVF9TU0kxX0NPTUI7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIGludGVycnVwdC4KKyAgICAvLworICAgIEludERpc2FibGUodWkzMkludCk7CisKKyAgICAvLworICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50VW5yZWdpc3Rlcih1aTMySW50KTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NzaS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4NjA1MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NzaS5oCkBAIC0wLDAgKzEsNzM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc3NpLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA5LTIxIDE1OjE5OjM2ICswMjAwIChNb24sIDIxIFNlcCAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0NjI5CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgbWFjcm9zIGZvciB0aGUgU1NJLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBwZXJpcGhlcmFsX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBzc2lfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19TU0lfSF9fCisjZGVmaW5lIF9fU1NJX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X3NzaS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgU1NJQ29uZmlnU2V0RXhwQ2xrICAgICAgICAgICAgICBOT1JPTV9TU0lDb25maWdTZXRFeHBDbGsKKyAgICAjZGVmaW5lIFNTSURhdGFQdXQgICAgICAgICAgICAgICAgICAgICAgTk9ST01fU1NJRGF0YVB1dAorICAgICNkZWZpbmUgU1NJRGF0YVB1dE5vbkJsb2NraW5nICAgICAgICAgICBOT1JPTV9TU0lEYXRhUHV0Tm9uQmxvY2tpbmcKKyAgICAjZGVmaW5lIFNTSURhdGFHZXQgICAgICAgICAgICAgICAgICAgICAgTk9ST01fU1NJRGF0YUdldAorICAgICNkZWZpbmUgU1NJRGF0YUdldE5vbkJsb2NraW5nICAgICAgICAgICBOT1JPTV9TU0lEYXRhR2V0Tm9uQmxvY2tpbmcKKyAgICAjZGVmaW5lIFNTSUludFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgTk9ST01fU1NJSW50UmVnaXN0ZXIKKyAgICAjZGVmaW5lIFNTSUludFVucmVnaXN0ZXIgICAgICAgICAgICAgICAgTk9ST01fU1NJSW50VW5yZWdpc3RlcgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFNTSUludEVuYWJsZSwgU1NJSW50RGlzYWJsZSwgYW5kIFNTSUludENsZWFyCisvLyBhcyB0aGUgdWkzMkludEZsYWdzIHBhcmFtZXRlciwgYW5kIHJldHVybmVkIGJ5IFNTSUludFN0YXR1cy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFNTSV9UWEZGICAgICAgICAgICAgICAgIDB4MDAwMDAwMDggIC8vIFRYIEZJRk8gaGFsZiBmdWxsIG9yIGxlc3MKKyNkZWZpbmUgU1NJX1JYRkYgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLy8gUlggRklGTyBoYWxmIGZ1bGwgb3IgbW9yZQorI2RlZmluZSBTU0lfUlhUTyAgICAgICAgICAgICAgICAweDAwMDAwMDAyICAvLyBSWCB0aW1lb3V0CisjZGVmaW5lIFNTSV9SWE9SICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIFJYIG92ZXJydW4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGFyZSByZXR1cm5lZCBmcm9tIFNTSVN0YXR1cworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgU1NJX1JYX0ZVTEwgICAgICAgICAgICAgMHgwMDAwMDAwOCAgLy8gUmVjZWl2ZSBGSUZPIGZ1bGwKKyNkZWZpbmUgU1NJX1JYX05PVF9FTVBUWSAgICAgICAgMHgwMDAwMDAwNCAgLy8gUmVjZWl2ZSBGSUZPIG5vdCBlbXB0eQorI2RlZmluZSBTU0lfVFhfTk9UX0ZVTEwgICAgICAgICAweDAwMDAwMDAyICAvLyBUcmFuc21pdCBGSUZPIG5vdCBmdWxsCisjZGVmaW5lIFNTSV9UWF9FTVBUWSAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIFRyYW5zbWl0IEZJRk8gZW1wdHkKKyNkZWZpbmUgU1NJX1NUQVRVU19NQVNLICAgICAgICAgMHgwMDAwMDAwRgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBTU0lDb25maWdTZXRFeHBDbGsuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBTU0lfRlJGX01PVE9fTU9ERV8wICAgICAweDAwMDAwMDAwICAvLyBNb3RvIGZtdCwgcG9sYXJpdHkgMCwgcGhhc2UgMAorI2RlZmluZSBTU0lfRlJGX01PVE9fTU9ERV8xICAgICAweDAwMDAwMDAyICAvLyBNb3RvIGZtdCwgcG9sYXJpdHkgMCwgcGhhc2UgMQorI2RlZmluZSBTU0lfRlJGX01PVE9fTU9ERV8yICAgICAweDAwMDAwMDAxICAvLyBNb3RvIGZtdCwgcG9sYXJpdHkgMSwgcGhhc2UgMAorI2RlZmluZSBTU0lfRlJGX01PVE9fTU9ERV8zICAgICAweDAwMDAwMDAzICAvLyBNb3RvIGZtdCwgcG9sYXJpdHkgMSwgcGhhc2UgMQorI2RlZmluZSBTU0lfRlJGX1RJICAgICAgICAgICAgICAweDAwMDAwMDEwICAvLyBUSSBmcmFtZSBmb3JtYXQKKyNkZWZpbmUgU1NJX0ZSRl9OTVcgICAgICAgICAgICAgMHgwMDAwMDAyMCAgLy8gTmF0aW9uYWwgTWljcm9XaXJlIGZyYW1lIGZvcm1hdAorCisjZGVmaW5lIFNTSV9NT0RFX01BU1RFUiAgICAgICAgIDB4MDAwMDAwMDAgIC8vIFNTSSBtYXN0ZXIKKyNkZWZpbmUgU1NJX01PREVfU0xBVkUgICAgICAgICAgMHgwMDAwMDAwMSAgLy8gU1NJIHNsYXZlCisjZGVmaW5lIFNTSV9NT0RFX1NMQVZFX09EICAgICAgIDB4MDAwMDAwMDIgIC8vIFNTSSBzbGF2ZSB3aXRoIG91dHB1dCBkaXNhYmxlZAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBTU0lETUFFbmFibGUoKSBhbmQgU1NJRE1BRGlzYWJsZSgpLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgU1NJX0RNQV9UWCAgICAgICAgICAgICAgMHgwMDAwMDAwMiAgLy8gRW5hYmxlIERNQSBmb3IgdHJhbnNtaXQKKyNkZWZpbmUgU1NJX0RNQV9SWCAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgLy8gRW5hYmxlIERNQSBmb3IgcmVjZWl2ZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmZGVmIERSSVZFUkxJQl9ERUJVRworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcaW50ZXJuYWwKKy8vIQorLy8hIFxicmllZiBDaGVja3MgYW4gU1NJIGJhc2UgYWRkcmVzcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhbiBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcyBpcyB2YWxpZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIFxjIHRydWUgaWYgdGhlIGJhc2UgYWRkcmVzcyBpcyB2YWxpZCBhbmQgXGMgZmFsc2UKKy8vISBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIGJvb2wKK1NTSUJhc2VWYWxpZCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICByZXR1cm4odWkzMkJhc2UgPT0gU1NJMF9CQVNFIHx8IHVpMzJCYXNlID09IFNTSTFfQkFTRSk7Cit9CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlcyB0aGUgc3luY2hyb25vdXMgc2VyaWFsIHBvcnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0LiAgSXQgc2V0cworLy8hIHRoZSBTU0kgcHJvdG9jb2wsIG1vZGUgb2Ygb3BlcmF0aW9uLCBiaXQgcmF0ZSwgYW5kIGRhdGEgd2lkdGguCisvLyEKKy8vISBUaGUgXGMgdWkzMlByb3RvY29sIHBhcmFtZXRlciBkZWZpbmVzIHRoZSBkYXRhIGZyYW1lIGZvcm1hdC4gVGhlIE1vdG9yb2xhCisvLyEgZnJhbWUgZm9ybWF0cyBpbXBseSB0aGUgZm9sbG93aW5nIHBvbGFyaXR5IGFuZCBwaGFzZSBjb25maWd1cmF0aW9uczoKKy8vIQorLy8hIDxwcmU+CisvLyEgUG9sYXJpdHkgUGhhc2UgICAgICAgTW9kZQorLy8hICAgMCAgICAgICAwICAgU1NJX0ZSRl9NT1RPX01PREVfMAorLy8hICAgMCAgICAgICAxICAgU1NJX0ZSRl9NT1RPX01PREVfMQorLy8hICAgMSAgICAgICAwICAgU1NJX0ZSRl9NT1RPX01PREVfMgorLy8hICAgMSAgICAgICAxICAgU1NJX0ZSRl9NT1RPX01PREVfMworLy8hIDwvcHJlPgorLy8hCisvLyEgVGhlIFxjIHVpMzJNb2RlIHBhcmFtZXRlciBkZWZpbmVzIHRoZSBvcGVyYXRpbmcgbW9kZSBvZiB0aGUgU1NJIG1vZHVsZS4KKy8vISBUaGUgU1NJIG1vZHVsZSBjYW4gb3BlcmF0ZSBhcyBhIG1hc3RlciBvciBzbGF2ZTsgaWYgYSBzbGF2ZSwgdGhlIFNTSSBjYW4gYmUKKy8vISBjb25maWd1cmVkIHRvIGRpc2FibGUgb3V0cHV0IG9uIGl0cyBzZXJpYWwgb3V0cHV0IGxpbmUuCisvLyEKKy8vISBUaGUgXGMgdWkzMkJpdFJhdGUgcGFyYW1ldGVyIGRlZmluZXMgdGhlIGJpdCByYXRlIGZvciB0aGUgU1NJLiBUaGlzIGJpdAorLy8hIHJhdGUgbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY2xvY2sgcmF0aW8gY3JpdGVyaWE6CisvLyEgLSBNYXN0ZXIgbW9kZSA6IEZTU0kgPj0gMiAqIGJpdCByYXRlCisvLyEgLSBTbGF2ZSBtb2RlICA6IEZTU0kgPj0gMTIgKiBiaXQgcmF0ZQorLy8hCisvLyEgd2hlcmUgRlNTSSBpcyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBjbG9jayBzdXBwbGllZCB0byB0aGUgU1NJIG1vZHVsZS4KKy8vIQorLy8hIFRoZSBcYyB1aTMyRGF0YVdpZHRoIHBhcmFtZXRlciBkZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgZGF0YSB0cmFuc2ZlcnMsIGFuZAorLy8hIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gNCBhbmQgMTYsIGluY2x1c2l2ZS4KKy8vIQorLy8hIFxub3RlIFRoZSBwZXJpcGhlcmFsIGNsb2NrIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgcHJvY2Vzc29yIGNsb2NrLgorLy8hIFRoZSBmcmVxdWVuY3kgb2YgdGhlIHBlcmlwaGVyYWwgY2xvY2sgaXMgc2V0IGJ5IHRoZSBzeXN0ZW0gY29udHJvbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyU1NJQ2xrIGlzIHRoZSByYXRlIG9mIHRoZSBjbG9jayBzdXBwbGllZCB0byB0aGUgU1NJIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlByb3RvY29sIHNwZWNpZmllcyB0aGUgZGF0YSB0cmFuc2ZlciBwcm90b2NvbC4KKy8vISBUaGUgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIFNTSV9GUkZfTU9UT19NT0RFXzAKKy8vISAtIFxyZWYgU1NJX0ZSRl9NT1RPX01PREVfMQorLy8hIC0gXHJlZiBTU0lfRlJGX01PVE9fTU9ERV8yCisvLyEgLSBccmVmIFNTSV9GUkZfTU9UT19NT0RFXzMKKy8vISAtIFxyZWYgU1NJX0ZSRl9USQorLy8hIC0gXHJlZiBTU0lfRlJGX05NVy4KKy8vISBccGFyYW0gdWkzMk1vZGUgc3BlY2lmaWVzIHRoZSBtb2RlIG9mIG9wZXJhdGlvbi4KKy8vISBUaGUgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIFNTSV9NT0RFX01BU1RFUgorLy8hIC0gXHJlZiBTU0lfTU9ERV9TTEFWRQorLy8hIC0gXHJlZiBTU0lfTU9ERV9TTEFWRV9PRAorLy8hIFxwYXJhbSB1aTMyQml0UmF0ZSBzcGVjaWZpZXMgdGhlIGNsb2NrIHJhdGUuCisvLyEgXHBhcmFtIHVpMzJEYXRhV2lkdGggc3BlY2lmaWVzIG51bWJlciBvZiBiaXRzIHRyYW5zZmVycmVkIHBlciBmcmFtZS4KKy8vISBNdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiA0IGFuZCAxNiwgYm90aCBpbmNsdWRlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFNTSUNvbmZpZ1NldEV4cENsayh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlNTSUNsaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyUHJvdG9jb2wsIHVpbnQzMl90IHVpMzJNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJCaXRSYXRlLCB1aW50MzJfdCB1aTMyRGF0YVdpZHRoKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyB0aGUgc3luY2hyb25vdXMgc2VyaWFsIHBvcnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3BlcmF0aW9uIG9mIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydC4gIFRoZQorLy8hIHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IG11c3QgYmUgY29uZmlndXJlZCBiZWZvcmUgaXQgaXMgZW5hYmxlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1NTSUVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoU1NJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFJlYWQtbW9kaWZ5LXdyaXRlIHRoZSBlbmFibGUgYml0LgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBTU0lfT19DUjEpIHw9IFNTSV9DUjFfU1NFOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyB0aGUgc3luY2hyb25vdXMgc2VyaWFsIHBvcnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIG9wZXJhdGlvbiBvZiB0aGUgc3luY2hyb25vdXMgc2VyaWFsIHBvcnQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTU0lEaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmVhZC1tb2RpZnktd3JpdGUgdGhlIGVuYWJsZSBiaXQuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0NSMSkgJj0gfihTU0lfQ1IxX1NTRSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFB1dHMgYSBkYXRhIGVsZW1lbnQgaW50byB0aGUgU1NJIHRyYW5zbWl0IEZJRk8uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHBsYWNlcyB0aGUgc3VwcGxpZWQgZGF0YSBpbnRvIHRoZSB0cmFuc21pdCBGSUZPIG9mIHRoZQorLy8hIHNwZWNpZmllZCBTU0kgbW9kdWxlLgorLy8hCisvLyEgXG5vdGUgVGhlIHVwcGVyIDMyIC0gTiBiaXRzIG9mIHRoZSBcYyB1aTMyRGF0YSBhcmUgZGlzY2FyZGVkIGJ5IHRoZQorLy8hIGhhcmR3YXJlLCB3aGVyZSBOIGlzIHRoZSBkYXRhIHdpZHRoIGFzIGNvbmZpZ3VyZWQgYnkgXHJlZiBTU0lDb25maWdTZXRFeHBDbGsoKS4KKy8vISBGb3IgZXhhbXBsZSwgaWYgdGhlIGludGVyZmFjZSBpcyBjb25maWd1cmVkIGZvciA4LWJpdCBkYXRhIHdpZHRoLCB0aGUgdXBwZXIKKy8vISAyNCBiaXRzIG9mIFxjIHVpMzJEYXRhIGFyZSBkaXNjYXJkZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMkRhdGEgaXMgdGhlIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgb3ZlciB0aGUgU1NJIGludGVyZmFjZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFNTSURhdGFQdXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJEYXRhKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUHV0cyBhIGRhdGEgZWxlbWVudCBpbnRvIHRoZSBTU0kgdHJhbnNtaXQgRklGTy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcGxhY2VzIHRoZSBzdXBwbGllZCBkYXRhIGludG8gdGhlIHRyYW5zbWl0IEZJRk8gb2YgdGhlCisvLyEgc3BlY2lmaWVkIFNTSSBtb2R1bGUuIElmIHRoZXJlIGlzIG5vIHNwYWNlIGluIHRoZSBGSUZPLCB0aGVuIHRoaXMgZnVuY3Rpb24KKy8vISByZXR1cm5zIGEgemVyby4KKy8vIQorLy8hIFxub3RlIFRoZSB1cHBlciAzMiAtIE4gYml0cyBvZiB0aGUgXGMgdWkzMkRhdGEgYXJlIGRpc2NhcmRlZCBieSB0aGUgaGFyZHdhcmUsCisvLyEgd2hlcmUgTiBpcyB0aGUgZGF0YSB3aWR0aCBhcyBjb25maWd1cmVkIGJ5IFxyZWYgU1NJQ29uZmlnU2V0RXhwQ2xrKCkuIEZvcgorLy8hIGV4YW1wbGUsIGlmIHRoZSBpbnRlcmZhY2UgaXMgY29uZmlndXJlZCBmb3IgOC1iaXQgZGF0YSB3aWR0aCwgdGhlIHVwcGVyIDI0CisvLyEgYml0cyBvZiBcYyB1aTMyRGF0YSBhcmUgZGlzY2FyZGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIHNwZWNpZmllcyB0aGUgU1NJIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJEYXRhIGlzIHRoZSBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkIG92ZXIgdGhlIFNTSSBpbnRlcmZhY2UuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB3cml0dGVuIHRvIHRoZSBTU0kgdHJhbnNtaXQgRklGTy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gaW50MzJfdCBTU0lEYXRhUHV0Tm9uQmxvY2tpbmcodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJEYXRhKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyBhIGRhdGEgZWxlbWVudCBmcm9tIHRoZSBTU0kgcmVjZWl2ZSBGSUZPLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBnZXRzIHJlY2VpdmVkIGRhdGEgZnJvbSB0aGUgcmVjZWl2ZSBGSUZPIG9mIHRoZSBzcGVjaWZpZWQKKy8vISBTU0kgbW9kdWxlIGFuZCBwbGFjZXMgdGhhdCBkYXRhIGludG8gdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSB0aGUKKy8vISBcYyBwdWkzMkRhdGEgcGFyYW1ldGVyLgorLy8hCisvLyEgXG5vdGUgT25seSB0aGUgbG93ZXIgTiBiaXRzIG9mIHRoZSB2YWx1ZSB3cml0dGVuIHRvIFxjIHB1aTMyRGF0YSBjb250YWluCisvLyEgdmFsaWQgZGF0YSwgd2hlcmUgTiBpcyB0aGUgZGF0YSB3aWR0aCBhcyBjb25maWd1cmVkIGJ5CisvLyEgXHJlZiBTU0lDb25maWdTZXRFeHBDbGsoKS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBpbnRlcmZhY2UgaXMgY29uZmlndXJlZCBmb3IKKy8vISA4LWJpdCBkYXRhIHdpZHRoLCBvbmx5IHRoZSBsb3dlciA4IGJpdHMgb2YgdGhlIHZhbHVlIHdyaXR0ZW4gdG8KKy8vISBcYyBwdWkzMkRhdGEgY29udGFpbiB2YWxpZCBkYXRhLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIHNwZWNpZmllcyB0aGUgU1NJIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHB1aTMyRGF0YSBpcyBhIHBvaW50ZXIgdG8gYSBzdG9yYWdlIGxvY2F0aW9uIGZvciBkYXRhIHRoYXQgd2FzCisvLyEgcmVjZWl2ZWQgb3ZlciB0aGUgU1NJIGludGVyZmFjZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFNTSURhdGFHZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90ICpwdWkzMkRhdGEpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIGEgZGF0YSBlbGVtZW50IGZyb20gdGhlIFNTSSByZWNlaXZlIEZJRk8uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSByZWNlaXZlIEZJRk8gb2YgdGhlIHNwZWNpZmllZCBTU0kKKy8vISBtb2R1bGUgYW5kIHBsYWNlcyB0aGF0IGRhdGEgaW50byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IHRoZSBcYyB1aTMyRGF0YQorLy8hIHBhcmFtZXRlci4gSWYgdGhlcmUgaXMgbm8gZGF0YSBpbiB0aGUgRklGTywgdGhlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYQorLy8hIHplcm8uCisvLyEKKy8vISBcbm90ZSBPbmx5IHRoZSBsb3dlciBOIGJpdHMgb2YgdGhlIHZhbHVlIHdyaXR0ZW4gdG8gXGMgcHVpMzJEYXRhIGNvbnRhaW4KKy8vISB2YWxpZCBkYXRhLCB3aGVyZSBOIGlzIHRoZSBkYXRhIHdpZHRoIGFzIGNvbmZpZ3VyZWQgYnkKKy8vISBccmVmIFNTSUNvbmZpZ1NldEV4cENsaygpLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGludGVyZmFjZSBpcyBjb25maWd1cmVkIGZvcgorLy8hIDgtYml0IGRhdGEgd2lkdGgsIG9ubHkgdGhlIGxvd2VyIDggYml0cyBvZiB0aGUgdmFsdWUgd3JpdHRlbiB0byBcYyBwdWkzMkRhdGEKKy8vISBjb250YWluIHZhbGlkIGRhdGEuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gcHVpMzJEYXRhIGlzIGEgcG9pbnRlciB0byBhIHN0b3JhZ2UgbG9jYXRpb24gZm9yIGRhdGEgdGhhdCB3YXMKKy8vISByZWNlaXZlZCBvdmVyIHRoZSBTU0kgaW50ZXJmYWNlLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcmVhZCBmcm9tIHRoZSBTU0kgcmVjZWl2ZSBGSUZPLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQzMl90IFNTSURhdGFHZXROb25CbG9ja2luZyh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgKnB1aTMyRGF0YSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERldGVybWluZXMgd2hldGhlciB0aGUgU1NJIHRyYW5zbWl0dGVyIGlzIGJ1c3kgb3Igbm90LgorLy8hCisvLyEgQWxsb3dzIHRoZSBjYWxsZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYWxsIHRyYW5zbWl0dGVkIGJ5dGVzIGhhdmUgY2xlYXJlZAorLy8hIHRoZSB0cmFuc21pdHRlciBoYXJkd2FyZS4gSWYgXGMgZmFsc2UgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIHRyYW5zbWl0IEZJRk8KKy8vISBpcyBlbXB0eSBhbmQgYWxsIGJpdHMgb2YgdGhlIGxhc3QgdHJhbnNtaXR0ZWQgd29yZCBoYXZlIGxlZnQgdGhlIGhhcmR3YXJlCisvLyEgc2hpZnQgcmVnaXN0ZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgU1NJIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIHRoZSBTU0kgdHJhbnNtaXQgYnVmZmVyLgorLy8hIC0gXGMgdHJ1ZSAgOiBTU0kgaXMgdHJhbnNtaXR0aW5nLgorLy8hIC0gXGMgZmFsc2UgOiBTU0kgdHJhbnNtaXNzaW9ucyBhcmUgY29tcGxldGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK1NTSUJ1c3kodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIFNTSSBpcyBidXN5LgorICAgIC8vCisgICAgcmV0dXJuKChIV1JFRyh1aTMyQmFzZSArIFNTSV9PX1NSKSAmIFNTSV9TUl9CU1kpID8gdHJ1ZSA6IGZhbHNlKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBzdGF0dXMgb2YgdGhlIFNTSSBkYXRhIGJ1ZmZlcnMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcG9sbCB0aGUgc3RhdHVzIG9mIHRoZSBpbnRlcm5hbCBGSUZPcyBpbiB0aGUgU1NJCisvLyEgbW9kdWxlLiBUaGUgc3RhdHVzIG9mIGJvdGggVFggYW5kIFJYIEZJRk8gaXMgcmV0dXJuZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGludGVybmFsIFNTSSBkYXRhIGJ1ZmZlcnMuCisvLyEgVGhlIHN0YXR1cyBpcyBhIGJpdHdpc2UgT1InZWQgY29tYmluYXRpb24gb2Y6CisvLyEgLSBccmVmIFNTSV9SWF9GVUxMICAgICAgICA6IFJlY2VpdmUgRklGTyBmdWxsLgorLy8hIC0gXHJlZiBTU0lfUlhfTk9UX0VNUFRZICAgOiBSZWNlaXZlIEZJRk8gbm90IGVtcHR5LgorLy8hIC0gXHJlZiBTU0lfVFhfTk9UX0ZVTEwgICAgOiBUcmFuc21pdCBGSUZPIG5vdCBmdWxsLgorLy8hIC0gXHJlZiBTU0lfVFhfRU1QVFkgICAgICAgOiBUcmFuc21pdCBGSUZPIGVtcHR5LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorU1NJU3RhdHVzKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBzdGF0dXMKKyAgICAvLworICAgIHJldHVybiAoSFdSRUcodWkzMkJhc2UgKyBTU0lfT19TUikgJiBTU0lfU1RBVFVTX01BU0spOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydC4KKy8vIQorLy8hIFRoaXMgc2V0cyB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhbiBTU0kgaW50ZXJydXB0CisvLyEgb2NjdXJzLiBUaGlzIHdpbGwgZW5hYmxlIHRoZSBnbG9iYWwgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcjsKKy8vISBzcGVjaWZpYyBTU0kgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgdmlhIFxyZWYgU1NJSW50RW5hYmxlKCkuIElmIG5lY2Vzc2FyeSwKKy8vISBpdCBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZQorLy8hIHZpYSBccmVmIFNTSUludENsZWFyKCkuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gcGZuSGFuZGxlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZQorLy8hIHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IGludGVycnVwdCBvY2N1cnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTU0lJbnRSZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSwgdm9pZCAoKnBmbkhhbmRsZXIpKHZvaWQpKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhIFNTSQorLy8hIGludGVycnVwdCBvY2N1cnMuIFRoaXMgd2lsbCBhbHNvIG1hc2sgb2ZmIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdAorLy8hIGNvbnRyb2xsZXIgc28gdGhhdCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbm8gbG9uZ2VyIGlzIGNhbGxlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgU1NJSW50VW5yZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgaW5kaXZpZHVhbCBTU0kgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBFbmFibGVzIHRoZSBpbmRpY2F0ZWQgU1NJIGludGVycnVwdCBzb3VyY2VzLiBPbmx5IHRoZSBzb3VyY2VzIHRoYXQgYXJlCisvLyEgZW5hYmxlZCBjYW4gYmUgcmVmbGVjdGVkIHRvIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0OyBkaXNhYmxlZCBzb3VyY2VzIGhhdmUKKy8vISBubyBlZmZlY3Qgb24gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgYSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZC4KKy8vISAtIFxyZWYgU1NJX1RYRkYKKy8vISAtIFxyZWYgU1NJX1JYRkYKKy8vISAtIFxyZWYgU1NJX1JYVE8KKy8vISAtIFxyZWYgU1NJX1JYT1IKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTU0lJbnRFbmFibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoU1NJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0lNU0MpIHw9IHVpMzJJbnRGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgaW5kaXZpZHVhbCBTU0kgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBEaXNhYmxlcyB0aGUgaW5kaWNhdGVkIFNTSSBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgYSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZGlzYWJsZWQuCisvLyEgLSBccmVmIFNTSV9UWEZGCisvLyEgLSBccmVmIFNTSV9SWEZGCisvLyEgLSBccmVmIFNTSV9SWFRPCisvLyEgLSBccmVmIFNTSV9SWE9SCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU1NJSW50RGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0lNU0MpICY9IH4odWkzMkludEZsYWdzKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIFNTSSBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoZSBzcGVjaWZpZWQgU1NJIGludGVycnVwdCBzb3VyY2VzIGFyZSBjbGVhcmVkIHNvIHRoYXQgdGhleSBubyBsb25nZXIKKy8vISBhc3NlcnQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGtlZXAgdGhlCisvLyEgaW50ZXJydXB0cyBmcm9tIGJlaW5nIHJlY29nbml6ZWQgYWdhaW4gaW1tZWRpYXRlbHkgdXBvbiBleGl0LgorLy8hCisvLyEgXG5vdGUgRHVlIHRvIHdyaXRlIGJ1ZmZlcnMgYW5kIHN5bmNocm9uaXplcnMgaW4gdGhlIHN5c3RlbSBpdCBtYXkgdGFrZSBzZXZlcmFsCisvLyEgY2xvY2sgY3ljbGVzIGZyb20gYSByZWdpc3RlciB3cml0ZSBjbGVhcmluZyBhbiBldmVudCBpbiBhIG1vZHVsZSBhbmQgdW50aWwgdGhlCisvLyEgZXZlbnQgaXMgYWN0dWFsbHkgY2xlYXJlZCBpbiB0aGUgTlZJQyBvZiB0aGUgc3lzdGVtIENQVS4gSXQgaXMgcmVjb21tZW5kZWQgdG8KKy8vISBjbGVhciB0aGUgZXZlbnQgc291cmNlIGVhcmx5IGluIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpIHRvIGFsbG93CisvLyEgdGhlIGV2ZW50IGNsZWFyIHRvIHByb3BhZ2F0ZSB0byB0aGUgTlZJQyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUi4KKy8vISBBdCB0aGUgc2FtZSB0aW1lLCBhbiBlYXJseSBldmVudCBjbGVhciBhbGxvd3MgbmV3IGV2ZW50cyBvZiB0aGUgc2FtZSB0eXBlIHRvIGJlCisvLyEgcGVuZGVkIGluc3RlYWQgb2YgaWdub3JlZCBpZiB0aGUgZXZlbnQgaXMgY2xlYXJlZCBsYXRlciBpbiB0aGUgSVNSLgorLy8hIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcHJvZ3JhbW1lciB0byBtYWtlIHN1cmUgdGhhdCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkCisvLyEgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IgdG8gYXZvaWQgZmFsc2UgcmUtdHJpZ2dlcmluZyBvZiB0aGUgY2xlYXJlZCBldmVudC4KKy8vISBBIHNpbXBsZSwgYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IG9wdGltYWwsIHdheSBvZiBjbGVhcmluZyBhbiBldmVudCBiZWZvcmUKKy8vISByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIGlzOgorLy8hIC0jIFdyaXRlIHRvIGNsZWFyIGV2ZW50IChpbnRlcnJ1cHQgc291cmNlKS4gKGJ1ZmZlcmVkIHdyaXRlKQorLy8hIC0jIER1bW15IHJlYWQgZnJvbSB0aGUgZXZlbnQgc291cmNlIG1vZHVsZS4gKG1ha2luZyBzdXJlIHRoZSB3cml0ZSBoYXMgcHJvcGFnYXRlZCkKKy8vISAtIyBXYWl0IHR3byBzeXN0ZW0gQ1BVIGNsb2NrIGN5Y2xlcyAodXNlciBjb2RlIG9yIHR3byBOT1BzKS4gKGFsbG93aW5nIGNsZWFyZWQgZXZlbnQgdG8gcHJvcGFnYXRlIHRocm91Z2ggYW55IHN5bmNocm9uaXplcnMpCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIGEgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGNsZWFyZWQuCisvLyEgVGhlIHBhcmFtZXRlciBjYW4gY29uc2lzdCBvZiBlaXRoZXIgb3IgYm90aCBvZjoKKy8vISAtIFxyZWYgU1NJX1JYVE8gOiBUaW1lb3V0IGludGVycnVwdC4KKy8vISAtIFxyZWYgU1NJX1JYT1IgOiBPdmVycnVuIGludGVycnVwdC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTU0lJbnRDbGVhcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHJlcXVlc3RlZCBpbnRlcnJ1cHQgc291cmNlcy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgU1NJX09fSUNSKSA9IHVpMzJJbnRGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZvciB0aGUgU1NJIG1vZHVsZS4gIEVpdGhlciB0aGUKKy8vISByYXcgaW50ZXJydXB0IHN0YXR1cyBvciB0aGUgc3RhdHVzIG9mIGludGVycnVwdHMgdGhhdCBhcmUgYWxsb3dlZCB0bworLy8hIHJlZmxlY3QgdG8gdGhlIHByb2Nlc3NvciBjYW4gYmUgcmV0dXJuZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gYk1hc2tlZCBzZWxlY3RzIGVpdGhlciByYXcgb3IgbWFza2VkIGludGVycnVwdC4KKy8vISBcYyBmYWxzZSA6IFJhdyBpbnRlcnJ1cHQgc3RhdHVzIGlzIHJlcXVpcmVkLgorLy8hIFxjIHRydWUgIDogTWFza2VkIGludGVycnVwdCBzdGF0dXMgaXMgcmVxdWlyZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cyBhcyBhbiBPUidlZCBjb21iaW5hdGlvbiBvZjoKKy8vISAtIFxyZWYgU1NJX1RYRkYKKy8vISAtIFxyZWYgU1NJX1JYRkYKKy8vISAtIFxyZWYgU1NJX1JYVE8KKy8vISAtIFxyZWYgU1NJX1JYT1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1NTSUludFN0YXR1cyh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiTWFza2VkKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIGVpdGhlciB0aGUgaW50ZXJydXB0IHN0YXR1cyBvciB0aGUgcmF3IGludGVycnVwdCBzdGF0dXMgYXMKKyAgICAvLyByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZihiTWFza2VkKQorICAgIHsKKyAgICAgICAgcmV0dXJuKEhXUkVHKHVpMzJCYXNlICsgU1NJX09fTUlTKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybihIV1JFRyh1aTMyQmFzZSArIFNTSV9PX1JJUykpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIFNTSSBETUEgb3BlcmF0aW9uLgorLy8hCisvLyEgVGhlIHNwZWNpZmllZCBTU0kgRE1BIGZlYXR1cmVzIGFyZSBlbmFibGVkLiBUaGUgU1NJIGNhbiBiZQorLy8hIGNvbmZpZ3VyZWQgdG8gdXNlIERNQSBmb3IgdHJhbnNtaXQgYW5kL29yIHJlY2VpdmUgZGF0YSB0cmFuc2ZlcnMuCisvLyEKKy8vISBcbm90ZSBUaGUgdURNQSBjb250cm9sbGVyIG11c3QgYWxzbyBiZSBzZXQgdXAgYmVmb3JlIERNQSBjYW4gYmUgdXNlZAorLy8hIHdpdGggdGhlIFNTSS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBTU0kgcG9ydC4KKy8vISBccGFyYW0gdWkzMkRNQUZsYWdzIGlzIGEgYml0IG1hc2sgb2YgdGhlIERNQSBmZWF0dXJlcyB0byBlbmFibGUuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIFNTSV9ETUFfUlggOiBFbmFibGUgRE1BIGZvciByZWNlaXZlLgorLy8hIC0gXHJlZiBTU0lfRE1BX1RYIDogRW5hYmxlIERNQSBmb3IgdHJhbnNtaXQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU1NJRE1BRW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRE1BRmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHJlcXVlc3RlZCBiaXRzIGluIHRoZSBTU0kgRE1BIGNvbnRyb2wgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0RNQUNSKSB8PSB1aTMyRE1BRmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGUgU1NJIERNQSBvcGVyYXRpb24uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBTU0kgRE1BIGZlYXR1cmVzIHRoYXQgd2VyZSBlbmFibGVkCisvLyEgYnkgXHJlZiBTU0lETUFFbmFibGUoKS4gVGhlIHNwZWNpZmllZCBTU0kgRE1BIGZlYXR1cmVzIGFyZSBkaXNhYmxlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBTU0kgcG9ydC4KKy8vISBccGFyYW0gdWkzMkRNQUZsYWdzIGlzIGEgYml0IG1hc2sgb2YgdGhlIERNQSBmZWF0dXJlcyB0byBkaXNhYmxlLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLy8hIC0gXHJlZiBTU0lfRE1BX1JYIDogRGlzYWJsZSBETUEgZm9yIHJlY2VpdmUuCisvLyEgLSBccmVmIFNTSV9ETUFfVFggOiBEaXNhYmxlIERNQSBmb3IgdHJhbnNtaXQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU1NJRE1BRGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkRNQUZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHJlcXVlc3RlZCBiaXRzIGluIHRoZSBTU0kgRE1BIGNvbnRyb2wgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0RNQUNSKSAmPSB+dWkzMkRNQUZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9TU0lDb25maWdTZXRFeHBDbGsKKyAgICAgICAgI3VuZGVmICBTU0lDb25maWdTZXRFeHBDbGsKKyAgICAgICAgI2RlZmluZSBTU0lDb25maWdTZXRFeHBDbGsgICAgICAgICAgICAgIFJPTV9TU0lDb25maWdTZXRFeHBDbGsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NTSURhdGFQdXQKKyAgICAgICAgI3VuZGVmICBTU0lEYXRhUHV0CisgICAgICAgICNkZWZpbmUgU1NJRGF0YVB1dCAgICAgICAgICAgICAgICAgICAgICBST01fU1NJRGF0YVB1dAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU1NJRGF0YVB1dE5vbkJsb2NraW5nCisgICAgICAgICN1bmRlZiAgU1NJRGF0YVB1dE5vbkJsb2NraW5nCisgICAgICAgICNkZWZpbmUgU1NJRGF0YVB1dE5vbkJsb2NraW5nICAgICAgICAgICBST01fU1NJRGF0YVB1dE5vbkJsb2NraW5nCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TU0lEYXRhR2V0CisgICAgICAgICN1bmRlZiAgU1NJRGF0YUdldAorICAgICAgICAjZGVmaW5lIFNTSURhdGFHZXQgICAgICAgICAgICAgICAgICAgICAgUk9NX1NTSURhdGFHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NTSURhdGFHZXROb25CbG9ja2luZworICAgICAgICAjdW5kZWYgIFNTSURhdGFHZXROb25CbG9ja2luZworICAgICAgICAjZGVmaW5lIFNTSURhdGFHZXROb25CbG9ja2luZyAgICAgICAgICAgUk9NX1NTSURhdGFHZXROb25CbG9ja2luZworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU1NJSW50UmVnaXN0ZXIKKyAgICAgICAgI3VuZGVmICBTU0lJbnRSZWdpc3RlcgorICAgICAgICAjZGVmaW5lIFNTSUludFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgUk9NX1NTSUludFJlZ2lzdGVyCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TU0lJbnRVbnJlZ2lzdGVyCisgICAgICAgICN1bmRlZiAgU1NJSW50VW5yZWdpc3RlcgorICAgICAgICAjZGVmaW5lIFNTSUludFVucmVnaXN0ZXIgICAgICAgICAgICAgICAgUk9NX1NTSUludFVucmVnaXN0ZXIKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fU1NJX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zeXNfY3RybC5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzX2N0cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDc0NzI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzX2N0cmwuYwpAQCAtMCwwICsxLDU0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHN5c19jdHJsLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTI1IDE0OjQ1OjI2ICswMjAwIChXZWQsIDI1IE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2NDkyCisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgU3lzdGVtIENvbnRyb2wuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBIYXJkd2FyZSBoZWFkZXJzCisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2NjZmcuaD4KKy8vIERyaXZlcmxpYiBoZWFkZXJzCisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl9iYXRtb24uaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvc3lzX2N0cmwuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvc2V0dXAuaD4KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgU3lzQ3RybFBvd2VyRXZlcnl0aGluZworICAgICNkZWZpbmUgU3lzQ3RybFBvd2VyRXZlcnl0aGluZyAgICAgICAgICBOT1JPTV9TeXNDdHJsUG93ZXJFdmVyeXRoaW5nCisgICAgI3VuZGVmICBTeXNDdHJsU2V0UmVjaGFyZ2VCZWZvcmVQb3dlckRvd24KKyAgICAjZGVmaW5lIFN5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93biBOT1JPTV9TeXNDdHJsU2V0UmVjaGFyZ2VCZWZvcmVQb3dlckRvd24KKyAgICAjdW5kZWYgIFN5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duCisgICAgI2RlZmluZSBTeXNDdHJsQWRqdXN0UmVjaGFyZ2VBZnRlclBvd2VyRG93biBOT1JPTV9TeXNDdHJsQWRqdXN0UmVjaGFyZ2VBZnRlclBvd2VyRG93bgorICAgICN1bmRlZiAgU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2wKKyAgICAjZGVmaW5lIFN5c0N0cmxfRENEQ19Wb2x0YWdlQ29uZGl0aW9uYWxDb250cm9sIE5PUk9NX1N5c0N0cmxfRENEQ19Wb2x0YWdlQ29uZGl0aW9uYWxDb250cm9sCisgICAgI3VuZGVmICBTeXNDdHJsUmVzZXRTb3VyY2VHZXQKKyAgICAjZGVmaW5lIFN5c0N0cmxSZXNldFNvdXJjZUdldCAgICAgICAgICAgTk9ST01fU3lzQ3RybFJlc2V0U291cmNlR2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlY2hhcmdlIGNhbGN1bGF0b3IgZGVmaW5lcyBhbmQgZ2xvYmFscworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSAgUERfU1RBVEVfQ0FDSEVfUkVUICAgICAgMQorI2RlZmluZSAgUERfU1RBVEVfUkZNRU1fUkVUICAgICAgMgorI2RlZmluZSAgUERfU1RBVEVfWE9TQ19MUE0gICAgICAgNAorI2RlZmluZSAgUERfU1RBVEVfRVhUX1JFR19NT0RFICAgOAorCit0eXBlZGVmIHN0cnVjdCB7CisgICB1aW50MzJfdCAgICBwZFRpbWUgICAgICAgICAgICAgICA7CisgICB1aW50MTZfdCAgICBwZFJlY2hhcmdlUGVyaW9kICAgICA7CisgICB1aW50OF90ICAgICBwZFN0YXRlICAgICAgICAgICAgICA7CisgICBpbnQ4X3QgICAgICBwZFRlbXAgICAgICAgICAgICAgICA7Cit9IFBvd2VyUXVhbEdsb2JhbHNfdDsKKworc3RhdGljIFBvd2VyUXVhbEdsb2JhbHNfdCBwb3dlclF1YWxHbG9iYWxzOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBcnJheXMgdGhhdCBtYXBzIHRoZSAicGVyaXBoZXJhbCBzZXQiIG51bWJlciAod2hpY2ggaXMgc3RvcmVkIGluIHRoZQorLy8gdGhpcmQgbmliYmxlIG9mIHRoZSBQUkNNX1BFUklQSF8qIGRlZmluZXMpIHRvIHRoZSBQUkNNIHJlZ2lzdGVyIHRoYXQKKy8vIGNvbnRhaW5zIHRoZSByZWxldmFudCBiaXQgZm9yIHRoYXQgcGVyaXBoZXJhbC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vIFJ1biBtb2RlIHJlZ2lzdGVycworc3RhdGljIGNvbnN0IHVpbnQzMl90IGdfcHVpMzJNb2R1bGVDR1tdID0KK3sKKyAgICBQUkNNX1BFUklQSF9USU1FUjAsCisgICAgUFJDTV9QRVJJUEhfVElNRVIxLAorICAgIFBSQ01fUEVSSVBIX1RJTUVSMiwKKyAgICBQUkNNX1BFUklQSF9USU1FUjMsCisgICAgUFJDTV9QRVJJUEhfU1NJMCwKKyAgICBQUkNNX1BFUklQSF9TU0kxLAorICAgIFBSQ01fUEVSSVBIX1VBUlQwLAorICAgIFBSQ01fUEVSSVBIX0kyQzAsCisgICAgUFJDTV9QRVJJUEhfVURNQSwKKyAgICBQUkNNX1BFUklQSF9UUk5HLAorICAgIFBSQ01fUEVSSVBIX0NSWVBUTywKKyAgICBQUkNNX1BFUklQSF9HUElPLAorICAgIFBSQ01fUEVSSVBIX0kyUworfTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUG93ZXIgdXAgZXZlcnl0aGluZworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1N5c0N0cmxQb3dlckV2ZXJ5dGhpbmcodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMySWR4OworICAgIHVpbnQzMl90IHVpMzJBdXhDbG9ja3M7CisKKyAgICAvLworICAgIC8vIEZvcmNlIHBvd2VyIG9uIEFVWAorICAgIC8vCisgICAgQU9OV1VDQXV4V2FrZXVwRXZlbnQoQU9OV1VDX0FVWF9XQUtFVVApOworICAgIHdoaWxlKCEoQU9OV1VDUG93ZXJTdGF0dXNHZXQoKSAmIEFPTldVQ19BVVhfUE9XRVJfT04pKQorICAgIHsgfQorCisgICAgLy8KKyAgICAvLyBFbmFibGUgYWxsIHRoZSBBVVggZG9tYWluIGNsb2NrcyBhbmQgd2FpdCBmb3IgdGhlbSB0byBiZSByZWFkeQorICAgIC8vCisgICAgdWkzMkF1eENsb2NrcyA9IEFVWF9XVUNfQURJX0NMT0NLIHwgQVVYX1dVQ19PU0NDVFJMX0NMT0NLIHwKKyAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19URENJRl9DTE9DSyB8IEFVWF9XVUNfQU5BSUZfQ0xPQ0sgfAorICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX1RJTUVSX0NMT0NLIHwgQVVYX1dVQ19BSU9ESU8wX0NMT0NLIHwKKyAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19BSU9ESU8xX0NMT0NLIHwgQVVYX1dVQ19TTVBIX0NMT0NLIHwKKyAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19URENfQ0xPQ0sgfCBBVVhfV1VDX0FEQ19DTE9DSyB8CisgICAgICAgICAgICAgICAgICAgIEFVWF9XVUNfUkVGX0NMT0NLOworICAgIEFVWFdVQ0Nsb2NrRW5hYmxlKHVpMzJBdXhDbG9ja3MpOworICAgIHdoaWxlKEFVWFdVQ0Nsb2NrU3RhdHVzKHVpMzJBdXhDbG9ja3MpICE9IEFVWF9XVUNfQ0xPQ0tfUkVBRFkpCisgICAgeyB9CisKKyAgICAvLworICAgIC8vIFJlcXVlc3QgdG8gc3dpdGNoIHRvIHRoZSBjcnlzdGFsIHRvIGVuYWJsZSByYWRpbyBvcGVyYXRpb24uCisgICAgLy8gSXQgdGFrZXMgYSB3aGlsZSBmb3IgdGhlIFhUQUwgdG8gYmUgcmVhZHkgc28gaXQgaXMgcG9zc2libGUgdG8KKyAgICAvLyBwZXJmb3JtIG90aGVyIHRhc2tzIHdoaWxlIHdhaXRpbmcuCisgICAgT1NDQ2xvY2tTb3VyY2VTZXQoT1NDX1NSQ19DTEtfTUYgfCBPU0NfU1JDX0NMS19IRiwgT1NDX1hPU0NfSEYpOworICAgIE9TQ0Nsb2NrU291cmNlU2V0KE9TQ19TUkNfQ0xLX0xGLCBPU0NfWE9TQ19MRik7CisKKyAgICAvLworICAgIC8vIFN3aXRjaCB0aGUgSEYgc291cmNlIHRvIFhUQUwgLSBtdXN0IGJlIHBlcmZvcm1lZCBzYWZlbHkgb3V0IG9mIFJPTSB0bworICAgIC8vIGF2b2lkIGZsYXNoIGlzc3VlcyB3aGVuIHN3aXRjaGluZyB0aGUgY2xvY2suCisgICAgLy8KKyAgICAvLyBOQi4gSWYgYWxyZWFkeSBydW5uaW5nIFhUQUwgb24gSEYgY2xvY2sgc291cmNlIHRoZSBST00gd2lsbCB3YWl0IGZvcmV2ZXIKKyAgICAvLyBvbiBhIGZsYWcgdGhhdCB3aWxsIG5ldmVyIGJlIHNldCAtIG5lZWQgdG8gY2hlY2suCisgICAgLy8KKyAgICBpZihPU0NDbG9ja1NvdXJjZUdldChPU0NfU1JDX0NMS19IRikgIT0gT1NDX1hPU0NfSEYpIHsKKyAgICAgICAgT1NDSGZTb3VyY2VTd2l0Y2goKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFR1cm4gb24gYWxsIHRoZSBNQ1UgcG93ZXIgZG9tYWlucworICAgIC8vIElmIHRoZSBDUFUgaXMgcnVubmluZyBhbmQgZXhlY3V0aW5nIGNvZGUgdGhlIFNZU0JVUywgVklNUyBhbmQgQ1BVIGFyZQorICAgIC8vIGF1dG9tYXRpY2FsbHkgb24gYXMgd2VsbC4KKyAgICAvLworICAgIFBSQ01Qb3dlckRvbWFpbk9uKFBSQ01fRE9NQUlOX1JGQ09SRSB8IFBSQ01fRE9NQUlOX1NFUklBTCB8CisgICAgICAgICAgICAgICAgICAgICAgUFJDTV9ET01BSU5fUEVSSVBIKTsKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIHBvd2VyIHRvIGJlIG9uCisgICAgLy8KKyAgICB3aGlsZShQUkNNUG93ZXJEb21haW5TdGF0dXMoUFJDTV9ET01BSU5fUkZDT1JFIHwgUFJDTV9ET01BSU5fU0VSSUFMIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJDTV9ET01BSU5fUEVSSVBIKSAhPSBQUkNNX0RPTUFJTl9QT1dFUl9PTik7CisKKyAgICBQUkNNTG9hZFNldCgpOworICAgIHdoaWxlKCFQUkNNTG9hZEdldCgpKTsKKworICAgIC8vCisgICAgLy8gRW5zdXJlIHRoZSBkb21haW4gY2xvY2tzIGFyZSBydW5uaW5nIGFuZCB3YWl0IGZvciB0aGUgY2xvY2sgc2V0dGluZ3MgdG8KKyAgICAvLyB0YWtlIGVmZmVjdAorICAgIC8vCisgICAgUFJDTURvbWFpbkVuYWJsZShQUkNNX0RPTUFJTl9SRkNPUkUgfCBQUkNNX0RPTUFJTl9WSU1TKTsKKyAgICBQUkNNTG9hZFNldCgpOworICAgIHdoaWxlKCFQUkNNTG9hZEdldCgpKQorICAgIHsgfQorCisgICAgLy8KKyAgICAvLyBFbmFibGUgYWxsIHRoZSBSRiBDb3JlIGNsb2NrcworICAgIC8vCisgICAgLy8gRG8gbm90IHJlYWQgYmFjayB0byBjaGVjaywgZm9yIHR3byByZWFzb25zOgorICAgIC8vIDEuIENQRSB3aWxsIHVwZGF0ZSB0aGUgUFdNQ0xLRU5BQkxFIHJlZ2lzdGVyIHJpZ2h0IGFmdGVyIGJvb3QKKyAgICAvLyAyLiBUaGUgUFdNQ0xLRU5BQkxFIHJlZ2lzdGVyIGFsd2F5cyByZWFkcyBiYWNrIHdoYXQgaXMgd3JpdHRlbgorICAgIEhXUkVHKFJGQ19QV1JfTk9OQlVGX0JBU0UgKyBSRkNfUFdSX09fUFdNQ0xLRU4pID0gMHg3RkY7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBhbGwgcGVyaXBoZXJhbCBjbG9ja3MgaW4gU3lzdGVtIENQVSBydW4vc2xlZXAvZGVlcC1zbGVlcCBtb2RlLgorICAgIC8vCisgICAgZm9yKHVpMzJJZHggPSAwOyB1aTMySWR4IDwgc2l6ZW9mKGdfcHVpMzJNb2R1bGVDRykgLyBzaXplb2YodWludDMyX3QpOworICAgICAgICB1aTMySWR4KyspCisgICAgeworICAgICAgICBQUkNNUGVyaXBoZXJhbFJ1bkVuYWJsZShnX3B1aTMyTW9kdWxlQ0dbdWkzMklkeF0pOworICAgICAgICBQUkNNUGVyaXBoZXJhbFNsZWVwRW5hYmxlKGdfcHVpMzJNb2R1bGVDR1t1aTMySWR4XSk7CisgICAgICAgIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlKGdfcHVpMzJNb2R1bGVDR1t1aTMySWR4XSk7CisgICAgfQorICAgIFBSQ01Mb2FkU2V0KCk7CisgICAgd2hpbGUoIVBSQ01Mb2FkR2V0KCkpCisgICAgeyB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTeXNDdHJsU2V0UmVjaGFyZ2VCZWZvcmVQb3dlckRvd24oIHhvc2NQb3dlck1vZGUgKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1N5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93biggdWludDMyX3QgeG9zY1Bvd2VyTW9kZSApCit7CisgICBpbnQzMl90ICAgICAgICAgICBjdXJUZW1wICAgICAgICAgICAgICAgICA7CisgICBpbnQzMl90ICAgICAgICAgICBzaGlmdGVkVGVtcCAgICAgICAgICAgICA7CisgICBpbnQzMl90ICAgICAgICAgICBkZWx0YVZkZHJTbGVlcFRyaW0gICAgICA7CisgICBpbnQzMl90ICAgICAgICAgICB2ZGRyVHJpbVNsZWVwICAgICAgICAgICA7CisgICBpbnQzMl90ICAgICAgICAgICB2ZGRyVHJpbUFjdHZlICAgICAgICAgICA7CisgICBpbnQzMl90ICAgICAgICAgICBkaWZmVmRkckFjdGl2ZVNsZWVwICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBjY2ZnX01vZGVDb25mUmVnICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBjdXJTdGF0ZSAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBwcmNtUmFtUmV0ZW50aW9uICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBkaSAgICAgICAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBkaWkgICAgICAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICB0aSAgICAgICAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBjZCAgICAgICAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBjbCAgICAgICAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBsb2FkICAgICAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBrICAgICAgICAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICB2ZGRyQ2FwICAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBuZXdSZWNoYXJnZVBlcmlvZCAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBwZXJFICAgICAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICAgICBwZXJNICAgICAgICAgICAgICAgICAgICA7CisgICBjb25zdCB1aW50MzJfdCAgKiBwTG9va3VwVGFibGUgICAgICAgICAgICA7CisKKyAgIC8vCisgICAvLyBJZiBleHRlcm5hbCByZWd1bGF0b3IgbW9kZSB3ZSBzaGFsbDoKKyAgIC8vIC0gRGlzYWJsZSBhZGFwdGl2ZSByZWNoYXJnZSAoYml0WzMxXT0wKSBpbiBBT05fV1VDX09fUkVDSEFSR0VDRkcKKyAgIC8vIC0gU2V0IHJlY2hhcmdlIHBlcmlvZCB0byBhcHByb3hpbWF0ZWx5IDUwMCBtUyAocGVyTT0zMSwgcGVyRT01ID0+IDB4RkQpCisgICAvLyAtIE1ha2Ugc3VyZSB5b3UgZ2V0IGEgcmVjYWxjdWxhdGlvbiBpZiBsZWF2aW5nIGV4dGVybmFsIHJlZ3VsYXRvciBtb2RlIGJ5IHNldHRpbmcgcG93ZXJRdWFsR2xvYmFscy5wZFN0YXRlIGFjY29yZGluZ2x5CisgICAvLworICAgaWYgKCBIV1JFRyggQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1BXUkNUTCApICYgQU9OX1NZU0NUTF9QV1JDVExfRVhUX1JFR19NT0RFICkgeworICAgICAgcG93ZXJRdWFsR2xvYmFscy5wZFN0YXRlID0gUERfU1RBVEVfRVhUX1JFR19NT0RFOworICAgICAgSFdSRUcoIEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19SRUNIQVJHRUNGRyAgKSA9IDB4MDBBNEZERkQ7CisgICAgICByZXR1cm47CisgICB9CisKKyAgIC8vLS0tIFNwZWMuIHBvaW50IDEgLS0tCisgICBjdXJUZW1wICA9IEFPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQygpOworICAgY3VyU3RhdGUgPSAwOworCisgICAvLyByZWFkIHRoZSBNT0RFX0NPTkYgcmVnaXN0ZXIgaW4gQ0NGRworICAgY2NmZ19Nb2RlQ29uZlJlZyA9IEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fTU9ERV9DT05GICk7CisgICAvLyBHZXQgVkREUl9UUklNX1NMRUVQX0RFTFRBICsgMSAoc2lnbiBleHRlbmRlZCkKKyAgIGRlbHRhVmRkclNsZWVwVHJpbSA9ICgoKChpbnQzMl90KSBjY2ZnX01vZGVDb25mUmVnICkKKyAgICAgIDw8ICggMzIgLSBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfREVMVEFfVyAtIENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9ERUxUQV9TICkpCisgICAgICA+PiAoIDMyIC0gQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX0RFTFRBX1cgKSkgKyAxOworICAgLy8gRG8gdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIGlmIGVuYWJsZWQKKyAgIGlmICgoIGNjZmdfTW9kZUNvbmZSZWcgJiBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfVEMgKSA9PSAwICkgeworICAgICAgaW50MzJfdCB0Y0RlbHRhID0gKCA2MiAtIGN1clRlbXAgKSA+PiAzOworICAgICAgaWYgKCB0Y0RlbHRhID4gOCApIHRjRGVsdGEgPSA4OworICAgICAgaWYgKCB0Y0RlbHRhID4gZGVsdGFWZGRyU2xlZXBUcmltICkgZGVsdGFWZGRyU2xlZXBUcmltID0gdGNEZWx0YTsKKyAgIH0KKyAgIHsKKyAgICAgIHZkZHJUcmltU2xlZXAgPSBTZXR1cFNpZ25FeHRlbmRWZGRyVHJpbVZhbHVlKCgKKyAgICAgICAgIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19MRE9fVFJJTSApICYKKyAgICAgICAgIEZDRkcxX0xET19UUklNX1ZERFJfVFJJTV9TTEVFUF9NICkgPj4KKyAgICAgICAgIEZDRkcxX0xET19UUklNX1ZERFJfVFJJTV9TTEVFUF9TICkgOworICAgICAgdmRkclRyaW1BY3R2ZSA9IFNldHVwU2lnbkV4dGVuZFZkZHJUcmltVmFsdWUoKAorICAgICAgICAgSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX1NIRFdfQU5BX1RSSU0gKSAmCisgICAgICAgICBGQ0ZHMV9TSERXX0FOQV9UUklNX1ZERFJfVFJJTV9NICkgPj4KKyAgICAgICAgIEZDRkcxX1NIRFdfQU5BX1RSSU1fVkREUl9UUklNX1MgKSA7CisgICB9CisgICB2ZGRyVHJpbVNsZWVwICs9IGRlbHRhVmRkclNsZWVwVHJpbTsKKyAgIGlmICggdmRkclRyaW1TbGVlcCA+ICAyMSApIHZkZHJUcmltU2xlZXAgPSAgMjE7CisgICBpZiAoIHZkZHJUcmltU2xlZXAgPCAtMTAgKSB2ZGRyVHJpbVNsZWVwID0gLTEwOworICAgLy8gV3JpdGUgYWRqdXN0ZWQgdmFsdWUgdXNpbmcgTUFTS0VEIHdyaXRlIChNQVNLOCkKKyAgIEhXUkVHSCggQURJM19CQVNFICsgQURJX09fTUFTSzhCICsgKCBBRElfM19SRUZTWVNfT19EQ0RDQ1RMMSAqIDIgKSkgPSAoKCBBRElfM19SRUZTWVNfRENEQ0NUTDFfVkREUl9UUklNX1NMRUVQX00gPDwgOCApIHwKKyAgICAgICgoIHZkZHJUcmltU2xlZXAgPDwgQURJXzNfUkVGU1lTX0RDRENDVEwxX1ZERFJfVFJJTV9TTEVFUF9TICkgJiBBRElfM19SRUZTWVNfRENEQ0NUTDFfVkREUl9UUklNX1NMRUVQX00gKSk7CisKKyAgIHByY21SYW1SZXRlbnRpb24gPSBIV1JFRyggUFJDTV9CQVNFICsgUFJDTV9PX1JBTVJFVEVOICk7CisgICBpZiAoIHByY21SYW1SZXRlbnRpb24gJiBQUkNNX1JBTVJFVEVOX1ZJTVNfTSApIHsKKyAgICAgIGN1clN0YXRlIHw9IFBEX1NUQVRFX0NBQ0hFX1JFVDsKKyAgIH0KKyAgIGlmICggcHJjbVJhbVJldGVudGlvbiAmIFBSQ01fUkFNUkVURU5fUkZDICkgeworICAgICAgY3VyU3RhdGUgfD0gUERfU1RBVEVfUkZNRU1fUkVUOworICAgfQorICAgaWYgKCB4b3NjUG93ZXJNb2RlICE9IFhPU0NfSU5fSElHSF9QT1dFUl9NT0RFICkgeworICAgICAgY3VyU3RhdGUgfD0gUERfU1RBVEVfWE9TQ19MUE07CisgICB9CisKKyAgIC8vLS0tIFNwZWMuIHBvaW50IDIgLS0tCisgICBpZiAoKCggY3VyVGVtcCAtIHBvd2VyUXVhbEdsb2JhbHMucGRUZW1wICkgPj0gNSApIHx8ICggY3VyU3RhdGUgIT0gcG93ZXJRdWFsR2xvYmFscy5wZFN0YXRlICkpIHsKKyAgICAgIC8vLS0tIFNwZWMuIHBvaW50IDMgLS0tCisgICAgICBzaGlmdGVkVGVtcCA9IGN1clRlbXAgLSAxNTsKKworICAgICAgLy8tLS0gU3BlYyBwb2ludCA0IC0tLQorICAgICAgLy80LiBDaGVjayBmb3IgZXh0ZXJuYWwgVkREUiBsb2FkIG9wdGlvbiAobWF5IG5vdCBiZSBzdXBwb3J0ZWQpOiBleHRfbG9hZCA9IChWRERSX0VYVF9MT0FEPTAgaW4gQ0NGRykKKyAgICAgIC8vIEN1cnJlbnRseSBub3QgaW1wbGVtZW50aW5nIGV4dGVybmFsIGxvYWQgaGFuZGxpbmcKKyAgICAgIC8vIGlmICggX19jY2ZnLnVsTW9kZUNvbmZpZyAmIE1PREVfQ09ORl9WRERSX0VYVF9MT0FEICkgeworICAgICAgLy8gfQorCisgICAgICBwTG9va3VwVGFibGUgPSAodWludDMyX3QgKikoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX1BXRF9DVVJSXzIwQyApOworCisgICAgICAvLy0tLSBTcGVjIHBvaW50IDUgLS0tCisgICAgICBkaSAgICA9IDA7CisgICAgICB0aSAgICA9IDA7CisgICAgICBpZiAoIHNoaWZ0ZWRUZW1wID49IDAgKSB7CisgICAgICAgICAvLy0tLSBTcGVjIHBvaW50IDUuYSAtLS0KKyAgICAgICAgIHNoaWZ0ZWRUZW1wICs9ICggc2hpZnRlZFRlbXAgPDwgNCApOworCisgICAgICAgICAvLy0tLSBTcGVjIHBvaW50IDUuYiAtLS0KKyAgICAgICAgIHRpID0gKCBzaGlmdGVkVGVtcCA+PiA4ICk7CisgICAgICAgICBpZiAoIHRpID4gNyApIHsKKyAgICAgICAgICAgIHRpID0gNzsKKyAgICAgICAgIH0KKyAgICAgICAgIGRpaSA9IHRpOworICAgICAgICAgaWYgKCBkaWkgPiA2ICkgeworICAgICAgICAgICAgZGlpID0gNjsKKyAgICAgICAgIH0KKworICAgICAgICAgLy8tLS0gU3BlYyBwb2ludCA1LmMgLS0tCisgICAgICAgICBjZCA9IHBMb29rdXBUYWJsZVsgZGlpICsgMSBdIC0gcExvb2t1cFRhYmxlWyBkaWkgXTsKKworICAgICAgICAgLy8tLS0gU3BlYyBwb2ludCA1LmQgLS0tCisgICAgICAgICBkaSA9IGNkICYgMHhGRjsKKworICAgICAgICAgLy8tLS0gU3BlYyBwb2ludCA1LmUgLS0tCisgICAgICAgICBpZiAoIGN1clN0YXRlICYgUERfU1RBVEVfWE9TQ19MUE0gKSB7CisgICAgICAgICAgICBkaSArPSAoKCBjZCA+PiA4ICkgJiAweEZGICk7CisgICAgICAgICB9CisgICAgICAgICBpZiAoIGN1clN0YXRlICYgUERfU1RBVEVfUkZNRU1fUkVUICkgeworICAgICAgICAgICAgZGkgKz0gKCggY2QgPj4gMTYgKSAmIDB4RkYgKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICggY3VyU3RhdGUgJiBQRF9TVEFURV9DQUNIRV9SRVQgKSB7CisgICAgICAgICAgICBkaSArPSAoKCBjZCA+PiAyNCApICYgMHhGRiApOworICAgICAgICAgfQorCisgICAgICAgICAvLy0tLSBTcGVjIHBvaW50IDUuZiAtLS0KKyAgICAgICAgIC8vIEN1cnJlbnRseSBub3QgaW1wbGVtZW50aW5nIGV4dGVybmFsIGxvYWQgaGFuZGxpbmcKKyAgICAgIH0KKworICAgICAgLy8tLS0gU3BlYy4gcG9pbnQgNiAtLS0KKyAgICAgIGNsID0gcExvb2t1cFRhYmxlWyB0aSBdOworCisgICAgICAvLy0tLSBTcGVjLiBwb2ludCA3IC0tLQorICAgICAgbG9hZCA9IGNsICYgMHhGRjsKKworICAgICAgLy8tLS0gU3BlYy4gcG9pbnQgOCAtLS0KKyAgICAgIGlmICggY3VyU3RhdGUgJiBQRF9TVEFURV9YT1NDX0xQTSApIHsKKyAgICAgICAgIGxvYWQgKz0gKCggY2wgPj4gOCApICYgMHhGRiApOworICAgICAgfQorICAgICAgaWYgKCBjdXJTdGF0ZSAmIFBEX1NUQVRFX1JGTUVNX1JFVCApIHsKKyAgICAgICAgIGxvYWQgKz0gKCggY2wgPj4gMTYgKSAmIDB4RkYgKTsKKyAgICAgIH0KKyAgICAgIGlmICggY3VyU3RhdGUgJiBQRF9TVEFURV9DQUNIRV9SRVQgKSB7CisgICAgICAgICBsb2FkICs9ICgoIGNsID4+IDI0ICkgJiAweEZGICk7CisgICAgICB9CisKKyAgICAgIC8vLS0tIFNwZWMuIHBvaW50IDkgLS0tCisgICAgICBsb2FkICs9ICgoKCBkaSAqICggc2hpZnRlZFRlbXAgLSAoIHRpIDw8IDggKSkpICsgMTI4ICkgPj4gOCApOworCisgICAgICAvLyBDdXJyZW50bHkgbm90IGltcGxlbWVudGluZyBleHRlcm5hbCBsb2FkIGhhbmRsaW5nCisgICAgICAvLyBpZiAoIF9fY2NmZy51bE1vZGVDb25maWcgJiBNT0RFX0NPTkZfVkREUl9FWFRfTE9BRCApIHsKKyAgICAgICAgIC8vLS0tIFNwZWMuIHBvaW50IDEwIC0tLQorICAgICAgLy8gfSBlbHNlIHsKKyAgICAgICAgIC8vLS0tIFNwZWMuIHBvaW50IDExIC0tLQorICAgICAgICAgZGlmZlZkZHJBY3RpdmVTbGVlcCA9ICggdmRkclRyaW1BY3R2ZSAtIHZkZHJUcmltU2xlZXAgKTsKKyAgICAgICAgIGlmICggZGlmZlZkZHJBY3RpdmVTbGVlcCA8IDEgKSBkaWZmVmRkckFjdGl2ZVNsZWVwID0gMTsKKyAgICAgICAgIGsgPSAoIGRpZmZWZGRyQWN0aXZlU2xlZXAgKiA1MiApOworICAgICAgLy8gfQorCisgICAgICAvLy0tLSBTcGVjLiBwb2ludCAxMiAtLS0KKworICAgICAgdmRkckNhcCA9ICggY2NmZ19Nb2RlQ29uZlJlZyAmIENDRkdfTU9ERV9DT05GX1ZERFJfQ0FQX00gKSA+PiBDQ0ZHX01PREVfQ09ORl9WRERSX0NBUF9TOworICAgICAgbmV3UmVjaGFyZ2VQZXJpb2QgPSAoIHZkZHJDYXAgKiBrICkgLyBsb2FkOworICAgICAgaWYgKCBuZXdSZWNoYXJnZVBlcmlvZCA+IDB4RkZGRiApIHsKKyAgICAgICAgIG5ld1JlY2hhcmdlUGVyaW9kID0gMHhGRkZGOworICAgICAgfQorICAgICAgcG93ZXJRdWFsR2xvYmFscy5wZFJlY2hhcmdlUGVyaW9kID0gbmV3UmVjaGFyZ2VQZXJpb2Q7CisKKyAgICAgIC8vLS0tIFNwZWMuIHBvaW50IDEzIC0tLQorICAgICAgaWYgKCBjdXJUZW1wID4gIDEyNyApIGN1clRlbXAgPSAgMTI3OworICAgICAgaWYgKCBjdXJUZW1wIDwgLTEyOCApIGN1clRlbXAgPSAtMTI4OworICAgICAgcG93ZXJRdWFsR2xvYmFscy5wZFRlbXAgICAgPSBjdXJUZW1wOworICAgICAgcG93ZXJRdWFsR2xvYmFscy5wZFN0YXRlICAgPSBjdXJTdGF0ZTsKKyAgIH0KKworICAgcG93ZXJRdWFsR2xvYmFscy5wZFRpbWUgICAgPSBIV1JFRyggQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NFQyApOworCisgICAvLyBDYWxjdWxhdGUgUEVSX0UgYW5kIFBFUl9NIChiYXNlZCBvbiBwb3dlclF1YWxHbG9iYWxzLnBkUmVjaGFyZ2VQZXJpb2QpCisgICAvLyBSb3VuZCBkb3dud2FyZHMgYnV0IG1ha2Ugc3VyZSBQRVJfRT0wIGFuZCBQRVJfTT0xIGlzIHRoZSBtaW5pbXVtIHBvc3NpYmxlIHNldHRpbmcuCisgICAvLyAoYXNzdW1pbmcgdGhhdCBwb3dlclF1YWxHbG9iYWxzLnBkUmVjaGFyZ2VQZXJpb2QgYWx3YXlzIGFyZSA8PSAweEZGRkYpCisgICBwZXJFID0gMDsKKyAgIHBlck0gPSBwb3dlclF1YWxHbG9iYWxzLnBkUmVjaGFyZ2VQZXJpb2Q7CisgICBpZiAoIHBlck0gPCAzMSApIHsKKyAgICAgIHBlck0gPSAzMTsKKyAgICAgIHBvd2VyUXVhbEdsb2JhbHMucGRSZWNoYXJnZVBlcmlvZCA9IDMxOworICAgfQorICAgd2hpbGUgKCBwZXJNID4gNTExICkgeworICAgICAgcGVyTSA+Pj0gMTsKKyAgICAgIHBlckUgICs9IDE7CisgICB9CisgICBwZXJNID0gKCBwZXJNIC0gMTUgKSA+PiA0OworCisgICBIV1JFRyggQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX1JFQ0hBUkdFQ0ZHICkgPQorICAgICAgKCAweDgwQTRFNzAwICAgICAgICAgICAgICAgICAgICAgICAgICApIHwKKyAgICAgICggcGVyTSA8PCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX1BFUl9NX1MgKSB8CisgICAgICAoIHBlckUgPDwgQU9OX1dVQ19SRUNIQVJHRUNGR19QRVJfRV9TICkgOworICAgSFdSRUcoIEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19SRUNIQVJHRVNUQVQgKSA9IDA7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitTeXNDdHJsQWRqdXN0UmVjaGFyZ2VBZnRlclBvd2VyRG93biggdm9pZCApCit7CisgICBpbnQzMl90ICAgICBjdXJUZW1wICAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICBsb25nZXN0UmVjaGFyZ2VQZXJpb2QgICA7CisgICB1aW50MzJfdCAgICBkZWx0YVRpbWUgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICBuZXdSZWNoYXJnZVBlcmlvZCAgICAgICA7CisKKyAgIC8vLS0tIFNwZWMuIHBvaW50IDIgLS0tCisgICBsb25nZXN0UmVjaGFyZ2VQZXJpb2QgPSAoIEhXUkVHKCBBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fUkVDSEFSR0VTVEFUICkgJgorICAgICAgQU9OX1dVQ19SRUNIQVJHRVNUQVRfTUFYX1VTRURfUEVSX00gKSA+PgorICAgICAgQU9OX1dVQ19SRUNIQVJHRVNUQVRfTUFYX1VTRURfUEVSX1MgOworCisgICBpZiAoIGxvbmdlc3RSZWNoYXJnZVBlcmlvZCAhPSAwICkgeworICAgICAgLy8tLS0gU3BlYy4gY2hhbmdlZCAob3JpZ2luYWx5IHBvaW50IDEpIC0tLQorICAgICAgY3VyVGVtcCA9IEFPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQygpOworICAgICAgaWYgKCBjdXJUZW1wIDwgcG93ZXJRdWFsR2xvYmFscy5wZFRlbXAgKSB7CisgICAgICAgICBpZiAoIGN1clRlbXAgPCAtMTI4ICkgeworICAgICAgICAgICAgY3VyVGVtcCA9IC0xMjg7CisgICAgICAgICB9CisgICAgICAgICBwb3dlclF1YWxHbG9iYWxzLnBkVGVtcCA9IGN1clRlbXA7CisgICAgICB9CisKKyAgICAgIC8vLS0tIFNwZWMuIHBvaW50IDQgLS0tCisgICAgICBpZiAoIGxvbmdlc3RSZWNoYXJnZVBlcmlvZCA8IHBvd2VyUXVhbEdsb2JhbHMucGRSZWNoYXJnZVBlcmlvZCApIHsKKyAgICAgICAgIHBvd2VyUXVhbEdsb2JhbHMucGRSZWNoYXJnZVBlcmlvZCA9IGxvbmdlc3RSZWNoYXJnZVBlcmlvZDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAvLy0tLSBTcGVjLiBwb2ludCA1IC0tLQorICAgICAgICAgZGVsdGFUaW1lID0gSFdSRUcoIEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19TRUMgKSAtIHBvd2VyUXVhbEdsb2JhbHMucGRUaW1lICsgMjsKKyAgICAgICAgIGlmICggZGVsdGFUaW1lID4gMzEgKSB7CisgICAgICAgICAgICBkZWx0YVRpbWUgPSAzMTsKKyAgICAgICAgIH0KKyAgICAgICAgIG5ld1JlY2hhcmdlUGVyaW9kID0gcG93ZXJRdWFsR2xvYmFscy5wZFJlY2hhcmdlUGVyaW9kICsgKCggbG9uZ2VzdFJlY2hhcmdlUGVyaW9kIC0gcG93ZXJRdWFsR2xvYmFscy5wZFJlY2hhcmdlUGVyaW9kICkgPj4gKGRlbHRhVGltZT4+MSkpOworICAgICAgICAgaWYgKCBuZXdSZWNoYXJnZVBlcmlvZCA+IDB4RkZGRiApIHsKKyAgICAgICAgICAgIG5ld1JlY2hhcmdlUGVyaW9kID0gMHhGRkZGOworICAgICAgICAgfQorICAgICAgICAgcG93ZXJRdWFsR2xvYmFscy5wZFJlY2hhcmdlUGVyaW9kID0gbmV3UmVjaGFyZ2VQZXJpb2Q7CisgICAgICB9CisgICB9Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN5c0N0cmxfRENEQ19Wb2x0YWdlQ29uZGl0aW9uYWxDb250cm9sKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitTeXNDdHJsX0RDRENfVm9sdGFnZUNvbmRpdGlvbmFsQ29udHJvbCggdm9pZCApCit7CisgICB1aW50MzJfdCBiYXRUaHJlc2hvbGQgICAgIDsgIC8vIEZyYWN0aW9uYWwgZm9ybWF0IHdpdGggOCBmcmFjdGlvbmFsIGJpdHMuCisgICB1aW50MzJfdCBhb25CYXRtb25CYXQgICAgIDsgIC8vIEZyYWN0aW9uYWwgZm9ybWF0IHdpdGggOCBmcmFjdGlvbmFsIGJpdHMuCisgICB1aW50MzJfdCBjY2ZnX01vZGVDb25mUmVnIDsgIC8vIEhvbGRzIGEgY29weSBvZiB0aGUgQ0NGR19PX01PREVfQ09ORiByZWdpc3Rlci4KKyAgIHVpbnQzMl90IGFvblN5c2N0bFB3cmN0bCAgOyAgLy8gUmVmbGVjdCB3aGF0cyByZWFkL3dyaXR0ZW4gdG8gdGhlIEFPTl9TWVNDVExfT19QV1JDVEwgcmVnaXN0ZXIuCisKKyAgIC8vCisgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGFueSBiYXR0ZXJ5IHZvbHRhZ2UgbWVhc3VyZW1lbnQKKyAgIC8vIGlzIG1hZGUvYXZhaWxhYmxlLiBJbiB0aGF0IGNhc2Ugd2UgbXVzdCBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgdHVybiBvZmYgdGhlIERDREMuCisgICAvLyBUaGlzIGNhbiBiZSBkb25lIGJ5IGRvaW5nIG5vdGhpbmcgYXMgbG9uZyBhcyB0aGUgYmF0dGVyeSB2b2x0YWdlIGlzIDAgKFNpbmNlIHRoZQorICAgLy8gcmVzZXQgdmFsdWUgb2YgdGhlIGJhdHRlcnkgdm9sdGFnZSByZWdpc3RlciBpcyAwKS4KKyAgIC8vCisgICBhb25CYXRtb25CYXQgPSBIV1JFRyggQU9OX0JBVE1PTl9CQVNFICsgQU9OX0JBVE1PTl9PX0JBVCApOworICAgaWYgKCBhb25CYXRtb25CYXQgIT0gMCApIHsKKyAgICAgIC8vCisgICAgICAvLyBDaGVjayBpZiBWb2x0YWdlIENvbmRpdGlvbmFsIENvbnRyb2wgaXMgZW5hYmxlZAorICAgICAgLy8gSXQgaXMgZW5hYmxlZCBpZiBhbGwgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgICAgIC8vIC0gRENEQyBpbiB1c2UgKGVpdGhlciBpbiBhY3RpdmUgb3IgcmVjaGFyZ2UgbW9kZSksIChpbiB1c2UgaWYgb25lIG9mIHRoZSBjb3JyZXNwb25kaW5nIENDRkcgYml0cyBhcmUgemVybykuCisgICAgICAvLyAtIEFsdGVybmF0aXZlIERDREMgc2V0dGluZ3MgYXJlIGVuYWJsZWQgKCBESVNfQUxUX0RDRENfU0VUVElORyA9PSAwICkKKyAgICAgIC8vIC0gTm90IGluIGV4dGVybmFsIHJlZ3VsYXRvciBtb2RlICggRVhUX1JFR19NT0RFID09IDAgKQorICAgICAgLy8KKyAgICAgIGNjZmdfTW9kZUNvbmZSZWcgPSBIV1JFRyggQ0NGR19CQVNFICsgQ0NGR19PX01PREVfQ09ORiApOworCisgICAgICBpZiAoKCgoIGNjZmdfTW9kZUNvbmZSZWcgJiBDQ0ZHX01PREVfQ09ORl9EQ0RDX1JFQ0hBUkdFX00gKSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHx8CisgICAgICAgICAgICgoIGNjZmdfTW9kZUNvbmZSZWcgJiBDQ0ZHX01PREVfQ09ORl9EQ0RDX0FDVElWRV9NICAgKSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgICkgJiYKKyAgICAgICAgICAoKCBIV1JFRyggQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1BXUkNUTCApICYgQU9OX1NZU0NUTF9QV1JDVExfRVhUX1JFR19NT0RFICkgICAgICAgICAgICAgICA9PSAwICAgICAgKSAmJgorICAgICAgICAgICgoIEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fU0laRV9BTkRfRElTX0ZMQUdTICkgJiBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfQUxUX0RDRENfU0VUVElORyApID09IDAgICAgICApICAgICkKKyAgICAgIHsKKyAgICAgICAgIGFvblN5c2N0bFB3cmN0bCA9IEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUFdSQ1RMICk7CisgICAgICAgICBiYXRUaHJlc2hvbGQgICAgPSAoKCgoIEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fTU9ERV9DT05GXzEgKSAmCisgICAgICAgICAgICBDQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX1ZNSU5fTSApID4+CisgICAgICAgICAgICBDQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX1ZNSU5fUyApICsgMjggKSA8PCA0ICk7CisKKyAgICAgICAgIGlmICggYW9uU3lzY3RsUHdyY3RsICYgKCBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0VOX00gfCBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0FDVElWRV9NICkpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBEQ0RDIGlzIE9OLCBjaGVjayBpZiBpdCBzaG91bGQgYmUgc3dpdGNoZWQgb2ZmCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKCBhb25CYXRtb25CYXQgPCBiYXRUaHJlc2hvbGQgKSB7CisgICAgICAgICAgICAgICBhb25TeXNjdGxQd3JjdGwgJj0gfiggQU9OX1NZU0NUTF9QV1JDVExfRENEQ19FTl9NIHwgQU9OX1NZU0NUTF9QV1JDVExfRENEQ19BQ1RJVkVfTSApOworCisgICAgICAgICAgICAgICBIV1JFRyggQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1BXUkNUTCApID0gYW9uU3lzY3RsUHdyY3RsOworICAgICAgICAgICAgfQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBEQ0RDIGlzIE9GRiwgY2hlY2sgaWYgaXQgc2hvdWxkIGJlIHN3aXRjaGVkIG9uCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKCBhb25CYXRtb25CYXQgPiBiYXRUaHJlc2hvbGQgKSB7CisgICAgICAgICAgICAgICBpZiAoKCBjY2ZnX01vZGVDb25mUmVnICYgQ0NGR19NT0RFX0NPTkZfRENEQ19SRUNIQVJHRV9NICkgPT0gMCApIGFvblN5c2N0bFB3cmN0bCB8PSBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0VOX00gICAgIDsKKyAgICAgICAgICAgICAgIGlmICgoIGNjZmdfTW9kZUNvbmZSZWcgJiBDQ0ZHX01PREVfQ09ORl9EQ0RDX0FDVElWRV9NICAgKSA9PSAwICkgYW9uU3lzY3RsUHdyY3RsIHw9IEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfQUNUSVZFX00gOworCisgICAgICAgICAgICAgICBIV1JFRyggQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1BXUkNUTCApID0gYW9uU3lzY3RsUHdyY3RsOworICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgfQorICAgfQorfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTeXNDdHJsUmVzZXRTb3VyY2VHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitTeXNDdHJsUmVzZXRTb3VyY2VHZXQoIHZvaWQgKQoreworICAgaWYgKCBIV1JFRyggQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1JFU0VUQ1RMICkgJiBBT05fU1lTQ1RMX1JFU0VUQ1RMX1dVX0ZST01fU0RfTSApIHsKKyAgICAgIHJldHVybiAoIFJTVFNSQ19XQUtFVVBfRlJPTV9TSFVURE9XTiApOworICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiAoKCBIV1JFRyggQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1JFU0VUQ1RMICkgJgorICAgICAgICAgICAgICAgIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX00gKSA+PgorICAgICAgICAgICAgICAgIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1MgKSA7CisgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zeXNfY3RybC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzX2N0cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTA4ZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzX2N0cmwuaApAQCAtMCwwICsxLDQzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHN5c19jdHJsLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTE4IDExOjA5OjEwICswMjAwIChXZWQsIDE4IE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2Mzk2CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIFN5c3RlbSBDb250cm9sbGVyLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBzeXN0ZW1fY29udHJvbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgc3lzY3RybF9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX1NZU0NUUkxfSF9fCisjZGVmaW5lIF9fU1lTQ1RSTF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od19zeXNjdGwuaD4KKyNpbmNsdWRlIDxpbmMvaHdfcHJjbS5oPgorI2luY2x1ZGUgPGluYy9od19udmljLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl93dWMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYXV4X3d1Yy5oPgorI2luY2x1ZGUgPGluYy9od19hb25faW9jLmg+CisjaW5jbHVkZSA8aW5jL2h3X2RkaV8wX29zYy5oPgorI2luY2x1ZGUgPGluYy9od19yZmNfcHdyLmg+CisjaW5jbHVkZSA8aW5jL2h3X3ByY20uaD4KKyNpbmNsdWRlIDxpbmMvaHdfYWRpXzNfcmVmc3lzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9zeXNjdGwuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX3J0Yy5oPgorI2luY2x1ZGUgPGluYy9od19mY2ZnMS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcHdyX2N0cmwuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvb3NjLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3ByY20uaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvYXV4X3d1Yy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9hb25fd3VjLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2FkaS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZGkuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvY3B1Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3ZpbXMuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgU3lzQ3RybFBvd2VyRXZlcnl0aGluZyAgICAgICAgICBOT1JPTV9TeXNDdHJsUG93ZXJFdmVyeXRoaW5nCisgICAgI2RlZmluZSBTeXNDdHJsU2V0UmVjaGFyZ2VCZWZvcmVQb3dlckRvd24gTk9ST01fU3lzQ3RybFNldFJlY2hhcmdlQmVmb3JlUG93ZXJEb3duCisgICAgI2RlZmluZSBTeXNDdHJsQWRqdXN0UmVjaGFyZ2VBZnRlclBvd2VyRG93biBOT1JPTV9TeXNDdHJsQWRqdXN0UmVjaGFyZ2VBZnRlclBvd2VyRG93bgorICAgICNkZWZpbmUgU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2wgTk9ST01fU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2wKKyAgICAjZGVmaW5lIFN5c0N0cmxSZXNldFNvdXJjZUdldCAgICAgICAgICAgTk9ST01fU3lzQ3RybFJlc2V0U291cmNlR2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBzZXR0aW5ncyBvZiB0aGUgbWFpbiBYT1NDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBTWVNDVFJMX1NZU0JVU19PTiAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNZU0NUUkxfU1lTQlVTX09GRiAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBkaWZmZXJlbnQgcG93ZXIgbW9kZXMgb2YgdGhlIFN5c3RlbSBDUFUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIENQVV9SVU4gICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NMRUVQICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfREVFUF9TTEVFUCAgICAgICAgICAweDAwMDAwMDAyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciBTeXNDdHJsU2V0UmVjaGFyZ2VCZWZvcmVQb3dlckRvd24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFhPU0NfSU5fSElHSF9QT1dFUl9NT0RFIDAgLy8gV2hlbiB4b3NjX2hmIGlzIGluIEhJR0hfUE9XRVJfWE9TQworI2RlZmluZSBYT1NDX0lOX0xPV19QT1dFUl9NT0RFICAxIC8vIFdoZW4geG9zY19oZiBpcyBpbiBMT1dfUE9XRVJfWE9TQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUG93ZXIgdXAgZXZlcnl0aGluZy4KKy8vIQorLy8hIFxub3RlIFRoZSBzZXF1ZW5jaW5nIGluIHRoaXMgZnVuY3Rpb24gaXMgbm90IG5lY2Vzc2FyaWx5IGhvdyB5b3Ugd291bGQKKy8vISB3YW50IHRvIHNlcXVlbmNlIGFjdGl2ZSBtb2RlIGluIGEgcmVhbCBhcHBsaWNhdGlvbi4gVGhlcmUgbWlnaHQgYmUKKy8vISBhcHBsaWNhdGlvbiBzcGVjaWZpYyBwcmVyZXF1aXNpdGVzIG9yIGhhcmR3YXJlIHJlc3RyaWN0aW9ucyB5b3Ugd291bGQgd2FudAorLy8hIHRvIGNvbnNpZGVyIHdoaWNoIGRldmlhdGUgZnJvbSB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiBtaWdodCBiZSBkZXByZWNhdGVkIGluIGZ1dHVyZSByZWxlYXNlcworLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgU3lzQ3RybFBvd2VyRXZlcnl0aGluZyh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBDUFUgY29yZSBjbG9jayBmcmVxdWVuY3kuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIGN1cnJlbnQgY2xvY2sgZnJlcXVlbmN5IGZvciB0aGUgQ1BVLgorLy8hCisvLyEgVGhlIENQVSBjYW4gcnVuIGZyb20gNDggTUh6IGFuZCBkb3duIHRvIDc1MGtIei4gVGhlIGZyZXF1ZW5jeSBpcyBkZWZpbmVkCisvLyEgYnkgdGhlIGNvbWJpbmVkIGRpdmlzaW9uIGZhY3RvciBvZiB0aGUgU1lTQlVTIGFuZCB0aGUgQ1BVIGNsb2NrIGRpdmlkZXIuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgQ1BVIGNvcmUgY2xvY2sgZnJlcXVlbmN5LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorU3lzQ3RybENsb2NrR2V0KCB2b2lkICkKK3sKKyAgICAvLworICAgIC8vIFJldHVybiBmaXhlZCBjbG9jayBzcGVlZAorICAgIC8vCisgICAgcmV0dXJuKCBHRVRfTUNVX0NMT0NLICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFN5bmMgYWxsIGFjY2Vzc2VzIHRvIHRoZSBBT04gcmVnaXN0ZXIgaW50ZXJmYWNlLgorLy8hCisvLyEgV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIGFsbCB3cml0ZXMgdG8gdGhlIEFPTiByZWdpc3RlciBpbnRlcmZhY2UgYXJlCisvLyEgZ3VhcmFudGVlZCB0byBoYXZlIHByb3BhZ2F0ZWQgdG8gaGFyZHdhcmUuIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybgorLy8hIGltbWVkaWF0ZWx5IGlmIG5vIEFPTiB3cml0ZXMgYXJlIHBlbmRpbmc7IG90aGVyd2lzZSwgaXQgd2lsbCB3YWl0IGZvciB0aGUgbmV4dAorLy8hIEFPTiBjbG9jayBiZWZvcmUgcmV0dXJuaW5nLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBTeXNDdHJsQW9uVXBkYXRlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU3lzQ3RybEFvblN5bmModm9pZCkKK3sKKyAgICAvLworICAgIC8vIFN5bmMgdGhlIEFPTiBpbnRlcmZhY2UKKyAgICAvLworICAgIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19TWU5DKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVXBkYXRlIGFsbCBpbnRlcmZhY2VzIHRvIEFPTi4KKy8vIQorLy8hIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBhdCBsZWFzdCAxIGNsb2NrIGN5Y2xlIGhhcyBwcm9ncmVzc2VkIG9uIHRoZQorLy8hIEFPTiBkb21haW4sIHNvIHRoYXQgYW55IG91dHN0YW5kaW5nIHVwZGF0ZXMgdG8gYW5kIGZyb20gdGhlIEFPTiBpbnRlcmZhY2UKKy8vISBpcyBndWFyYW50ZWVkIHRvIGJlIGluIHN5bmMuCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIHNob3VsZCBwcmltYXJpbHkgYmUgdXNlZCBhZnRlciB3YWtldXAgZnJvbSBzbGVlcCBtb2RlcywKKy8vISBhcyBpdCB3aWxsIGd1YXJhbnRlZSB0aGF0IGFsbCBzaGFkb3cgcmVnaXN0ZXJzIG9uIHRoZSBBT04gaW50ZXJmYWNlIGFyZSB1cGRhdGVkCisvLyEgYmVmb3JlIHJlYWRpbmcgYW55IEFPTiByZWdpc3RlcnMgZnJvbSB0aGUgTUNVIGRvbWFpbi4gSWYgYSB3cml0ZSBoYXMgYmVlbgorLy8hIGRvbmUgdG8gdGhlIEFPTiBpbnRlcmZhY2UgaXQgaXMgc3VmZmljaWVudCB0byBjYWxsIHRoZSBccmVmIFN5c0N0cmxBb25TeW5jKCkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFN5c0N0cmxBb25TeW5jKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU3lzQ3RybEFvblVwZGF0ZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gRm9yY2UgYSBjbG9jayBjeWNsZSBvbiB0aGUgQU9OIGludGVyZmFjZSB0byBndWFyYW50ZWUgYWxsIHJlZ2lzdGVycyBhcmUKKyAgICAvLyBpbiBzeW5jLgorICAgIC8vCisgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NZTkMpID0gMTsKKyAgICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fU1lOQyk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IFJlY2hhcmdlIHZhbHVlcyBiZWZvcmUgZW50ZXJpbmcgUG93ZXIgRG93bi4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2hhbGwgYmUgY2FsbGVkIGp1c3QgYmVmb3JlIGVudGVyaW5nIFBvd2VyIERvd24uCisvLyEgSXQgY2FsY3VsYXRlcyBhbiBvcHRpbWFsIGFuZCBzYWZlIHJlY2hhcmdlIHNldHRpbmcgb2YgdGhlIGFkYXB0aXZlIHJlY2hhcmdlCisvLyEgY29udHJvbGxlci4gVGhlIHJlc3VsdHMgb2YgcHJldmlvdXMgc2V0dGluZyBhcmUgYWxzbyB0YWtlbiBpbnRvIGFjY291bnQuCisvLyEKKy8vISBcbm90ZSBJbiBvcmRlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVnaXN0ZXIgd3JpdGVzIGFyZSBjb21wbGV0ZWQsIFxyZWYgU3lzQ3RybEFvblN5bmMoKQorLy8hIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBlbnRlcmluZyBzdGFuZGJ5L3Bvd2VyIGRvd24uIFRoaXMgaXMgbm90IGRvbmUgaW50ZXJuYWxseQorLy8hIGluIHRoaXMgZnVuY3Rpb24gZHVlIHRvIHR3byByZWFzb25zOgorLy8hIC0gMSkgVGhlcmUgbWlnaHQgYmUgb3RoZXIgcmVnaXN0ZXIgd3JpdGVzIHRoYXQgbXVzdCBiZSBzeW5jaHJvbml6ZWQgYXMgd2VsbC4KKy8vISAtIDIpIEl0IGlzIHBvc3NpYmxlIHRvIHNhdmUgc29tZSB0aW1lIGJ5IGRvaW5nIG90aGVyIHRoaW5ncyBiZWZvcmUgY2FsbGluZworLy8hIFxyZWYgU3lzQ3RybEFvblN5bmMoKSBzaW5jZSB0aGlzIGNhbGwgd2lsbCBub3QgcmV0dXJuIGJlZm9yZSB0aGVyZSBhcmUgbm8KKy8vISBvdXRzdGFuZGluZyB3cml0ZSByZXF1ZXN0cyBiZXR3ZWVuIE1DVSBhbmQgQU9OLgorLy8hCisvLyEgXHBhcmFtIHhvc2NQb3dlck1vZGUgKHR5cGljYWxseSBydW5uaW5nIGluIFhPU0NfSU5fSElHSF9QT1dFUl9NT0RFIGFsbCB0aGUgdGltZSkuCisvLyEgLSBccmVmIFhPU0NfSU5fSElHSF9QT1dFUl9NT0RFIDogV2hlbiB4b3NjX2hmIGlzIGluIEhJR0hfUE9XRVJfWE9TQy4KKy8vISAtIFxyZWYgWE9TQ19JTl9MT1dfUE9XRVJfTU9ERSAgOiBXaGVuIHhvc2NfaGYgaXMgaW4gTE9XX1BPV0VSX1hPU0MuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTeXNDdHJsU2V0UmVjaGFyZ2VCZWZvcmVQb3dlckRvd24oIHVpbnQzMl90IHhvc2NQb3dlck1vZGUgKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBBZGp1c3QgUmVjaGFyZ2UgY2FsY3VsYXRpb25zIHRvIGJlIHVzZWQgbmV4dC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2hhbGwgYmUgY2FsbGVkIGp1c3QgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gUG93ZXIgRG93bi4KKy8vIQorLy8hIFJlYWRzIHRoZSByZXN1bHRzIGZyb20gdGhlIGFkYXB0aXZlIHJlY2hhcmdlIGNvbnRyb2xsZXIgYW5kIGN1cnJlbnQgY2hpcAorLy8hIHRlbXBlcmF0dXJlLiBUaGlzIGlzIHVzZWQgYXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB3aGVuIGNhbGN1bGF0aW5nCisvLyEgb3B0aW1hbCByZWNoYXJnZSBjb250cm9sbGVyIHNldHRpbmdzIG5leHQgdGltZSAoV2hlbgorLy8hIFxyZWYgU3lzQ3RybFNldFJlY2hhcmdlQmVmb3JlUG93ZXJEb3duKCkgaXMgY2FsbGVkIG5leHQgdGltZSkuCisvLyEKKy8vISBcbm90ZQorLy8hIFNwZWNpYWwgY2FyZSBtdXN0IGJlIHRha2VuIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBBT04gcmVnaXN0ZXJzIHJlYWQgYXJlCisvLyEgdXBkYXRlZCBhZnRlciB0aGUgd2FrZXVwLiBXcml0aW5nIHRvIGFuIEFPTiByZWdpc3RlciBhbmQgdGhlbiBjYWxsaW5nCisvLyEgXHJlZiBTeXNDdHJsQW9uU3luYygpIHdpbGwgaGFuZGxlIHRoaXMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTeXNDdHJsQWRqdXN0UmVjaGFyZ2VBZnRlclBvd2VyRG93biggdm9pZCApOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFR1cm5zIERDREMgb24gb3Igb2ZmIGRlcGVuZGluZyBvZiB3aGF0IGlzIGNvbnNpZGVyZWQgdG8gYmUgb3B0aW1hbCB1c2FnZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY29udHJvbHMgdGhlIERDREMgb25seSBpZiBib3RoIHRoZSBmb2xsb3dpbmcgQ0NGRyBzZXR0aW5ncyBhcmUgXGMgdHJ1ZToKKy8vISAtIERDREMgaXMgY29uZmlndXJlZCB0byBiZSB1c2VkLgorLy8hIC0gQWx0ZXJuYXRpdmUgRENEQyBzZXR0aW5ncyBhcmUgZGVmaW5lZCBhbmQgZW5hYmxlZC4KKy8vIQorLy8hIFRoZSBEQ0RDIGlzIGNvbmZpZ3VyZWQgaW4gYWNjb3JkYW5jZSB0byB0aGUgQ0NGRyBzZXR0aW5ncyB3aGVuIHR1cm5lZCBvbi4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTeXNDdHJsX0RDRENfVm9sdGFnZUNvbmRpdGlvbmFsQ29udHJvbCggdm9pZCApOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFxuYW1lIFJldHVybiB2YWx1ZXMgZnJvbSBjYWxsaW5nIFN5c0N0cmxSZXNldFNvdXJjZUdldCgpCisvL0B7CisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFJTVFNSQ19QV1JfT04gICAgICAgICAgICAgICAoKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19QV1JfT04gICAgKSA+PiAoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1MgKSkKKyNkZWZpbmUgUlNUU1JDX1BJTl9SRVNFVCAgICAgICAgICAgICgoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1BJTl9SRVNFVCApID4+ICggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfUyApKQorI2RlZmluZSBSU1RTUkNfVkREU19MT1NTICAgICAgICAgICAgKCggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfVkREU19MT1NTICkgPj4gKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19TICkpCisjZGVmaW5lIFJTVFNSQ19WRERfTE9TUyAgICAgICAgICAgICAoKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19WRERfTE9TUyAgKSA+PiAoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1MgKSkKKyNkZWZpbmUgUlNUU1JDX1ZERFJfTE9TUyAgICAgICAgICAgICgoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1ZERFJfTE9TUyApID4+ICggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfUyApKQorI2RlZmluZSBSU1RTUkNfQ0xLX0xPU1MgICAgICAgICAgICAgKCggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfQ0xLX0xPU1MgICkgPj4gKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19TICkpCisjZGVmaW5lIFJTVFNSQ19TWVNSRVNFVCAgICAgICAgICAgICAoKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19TWVNSRVNFVCAgKSA+PiAoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1MgKSkKKyNkZWZpbmUgUlNUU1JDX1dBUk1SRVNFVCAgICAgICAgICAgICgoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1dBUk1SRVNFVCApID4+ICggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfUyApKQorI2RlZmluZSBSU1RTUkNfV0FLRVVQX0ZST01fU0hVVERPV04gKCgoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX00gICAgICAgICkgPj4gKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19TICkpICsgMSApCisvL0B9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgbGFzdCByZXNldCBzb3VyY2UgKGluY2x1ZGluZyAid2FrZXVwIGZyb20gc2h1dGRvd24iKS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBvbmUgb2YgdGhlIFJTVFNSQ18gZGVmaW5lcy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU3lzQ3RybFJlc2V0U291cmNlR2V0KCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFBlcmZvcm0gYSBmdWxsIHN5c3RlbSByZXNldC4KKy8vIQorLy8hIFxyZXR1cm4gVGhlIGNoaXAgd2lsbCByZXNldCBhbmQgaGVuY2UgbmV2ZXIgcmV0dXJuIGZyb20gdGhpcyBjYWxsLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTeXNDdHJsU3lzdGVtUmVzZXQoIHZvaWQgKQoreworICAgLy8gRGlzYWJsZSBDUFUgaW50ZXJydXB0cworICAgQ1BVY3BzaWQoKTsKKyAgIC8vIFdyaXRlIHJlc2V0IHJlZ2lzdGVyCisgICBIV1JFR0JJVFcoIEFPTl9TWVNDVExfQkFTRSArIEFPTl9TWVNDVExfT19SRVNFVENUTCwgQU9OX1NZU0NUTF9SRVNFVENUTF9TWVNSRVNFVF9CSVROICkgPSAxOworICAgLy8gRmluYWxseSwgd2FpdCB1bnRpbCB0aGUgYWJvdmUgd3JpdGUgcHJvcGFnYXRlcworICAgd2hpbGUgKCAxICkgeworICAgICAgLy8gRG8gbm90aGluZywganVzdCB3YWl0IGZvciB0aGUgcmVzZXQgKGFuZCBuZXZlciByZXR1cm4gZnJvbSBoZXJlKQorICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHJlc2V0IGlmIE9TQyBjbG9jayBsb3NzIGV2ZW50IGlzIGFzc2VydGVkLgorLy8hCisvLyEgQ2xvY2sgbG9zcyBjaXJjdWl0IGluIGFuYWxvZyBkb21haW4gbXVzdCBiZSBlbmFibGVkIGFzIHdlbGwgaW4gb3JkZXIgdG8KKy8vISBhY3R1YWxseSBlbmFibGUgZm9yIGEgY2xvY2sgbG9zcyByZXNldCB0byBvY2N1cgorLy8hIFxyZWYgT1NDQ2xvY2tMb3NzRXZlbnRFbmFibGUoKS4KKy8vIQorLy8hIFxub3RlIFRoaXMgZnVuY3Rpb24gc2hhbGwgdHlwaWNhbGx5IG5vdCBiZSBjYWxsZWQgYmVjYXVzZSB0aGUgY2xvY2sgbG9zcworLy8hIHJlc2V0IGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBieSB0aGUgYm9vdCBjb2RlIChhIGZhY3RvcnkgY29uZmlndXJhdGlvbgorLy8hIGRlZmluZXMgd2hldGhlciBpdCBpcyBzZXQgb3Igbm90KS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgU3lzQ3RybENsb2NrTG9zc1Jlc2V0RGlzYWJsZSgpLCBccmVmIE9TQ0Nsb2NrTG9zc0V2ZW50RW5hYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU3lzQ3RybENsb2NrTG9zc1Jlc2V0RW5hYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBTZXQgY2xvY2sgbG9zcyBlbmFibGUgYml0IGluIEFPTl9TWVNDVFJMIHVzaW5nIGJpdCBiYW5kaW5nCisgICAgLy8KKyAgICBIV1JFR0JJVFcoQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1JFU0VUQ1RMLCBBT05fU1lTQ1RMX1JFU0VUQ1RMX0NMS19MT1NTX0VOX0JJVE4pID0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgcmVzZXQgZHVlIHRvIE9TQyBjbG9jayBsb3NzIGV2ZW50LgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiBzaGFsbCB0eXBpY2FsbHkgbm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoZSBjbG9jayBsb3NzCisvLyEgcmVzZXQgZnVuY3Rpb25hbGl0eSBpcyBjb250cm9sbGVkIGJ5IHRoZSBib290IGNvZGUgKGEgZmFjdG9yeSBjb25maWd1cmF0aW9uCisvLyEgZGVmaW5lcyB3aGV0aGVyIGl0IGlzIHNldCBvciBub3QpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBTeXNDdHJsQ2xvY2tMb3NzUmVzZXRFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTeXNDdHJsQ2xvY2tMb3NzUmVzZXREaXNhYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBDbGVhciBjbG9jayBsb3NzIGVuYWJsZSBiaXQgaW4gQU9OX1NZU0NUUkwgdXNpbmcgYml0IGJhbmRpbmcKKyAgICAvLworICAgIEhXUkVHQklUVyhBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUkVTRVRDVEwsIEFPTl9TWVNDVExfUkVTRVRDVExfQ0xLX0xPU1NfRU5fQklUTikgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9TeXNDdHJsUG93ZXJFdmVyeXRoaW5nCisgICAgICAgICN1bmRlZiAgU3lzQ3RybFBvd2VyRXZlcnl0aGluZworICAgICAgICAjZGVmaW5lIFN5c0N0cmxQb3dlckV2ZXJ5dGhpbmcgICAgICAgICAgUk9NX1N5c0N0cmxQb3dlckV2ZXJ5dGhpbmcKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1N5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93bgorICAgICAgICAjdW5kZWYgIFN5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93bgorICAgICAgICAjZGVmaW5lIFN5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93biBST01fU3lzQ3RybFNldFJlY2hhcmdlQmVmb3JlUG93ZXJEb3duCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TeXNDdHJsQWRqdXN0UmVjaGFyZ2VBZnRlclBvd2VyRG93bgorICAgICAgICAjdW5kZWYgIFN5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duCisgICAgICAgICNkZWZpbmUgU3lzQ3RybEFkanVzdFJlY2hhcmdlQWZ0ZXJQb3dlckRvd24gUk9NX1N5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TeXNDdHJsX0RDRENfVm9sdGFnZUNvbmRpdGlvbmFsQ29udHJvbAorICAgICAgICAjdW5kZWYgIFN5c0N0cmxfRENEQ19Wb2x0YWdlQ29uZGl0aW9uYWxDb250cm9sCisgICAgICAgICNkZWZpbmUgU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2wgUk9NX1N5c0N0cmxfRENEQ19Wb2x0YWdlQ29uZGl0aW9uYWxDb250cm9sCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TeXNDdHJsUmVzZXRTb3VyY2VHZXQKKyAgICAgICAgI3VuZGVmICBTeXNDdHJsUmVzZXRTb3VyY2VHZXQKKyAgICAgICAgI2RlZmluZSBTeXNDdHJsUmVzZXRTb3VyY2VHZXQgICAgICAgICAgIFJPTV9TeXNDdHJsUmVzZXRTb3VyY2VHZXQKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vICBfX1NZU0NUUkxfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3N5c3RpY2suYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3N5c3RpY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzEwYjIxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzdGljay5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBzeXN0aWNrLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTAxLTEzIDE2OjU5OjU1ICswMTAwIChUdWUsIDEzIEphbiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQyMzY1CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgU3lzVGljayB0aW1lciBpbiBOVklDCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL3N5c3RpY2suaD4KKworLy8gU2VlIHN5c3RpY2suaCBmb3IgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3N5c3RpY2suaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3N5c3RpY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGFiMmVmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzdGljay5oCkBAIC0wLDAgKzEsMzA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc3lzdGljay5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMS0xNiAxOTo0MTo0NyArMDEwMCAoTW9uLCAxNiBOb3YgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTA5NAorKgorKiAgRGVzY3JpcHRpb246ICAgIFByb3RvdHlwZXMgZm9yIHRoZSBTeXNUaWNrIGRyaXZlci4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgc3lzdGVtX2NwdV9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgc3lzdGlja19hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX1NZU1RJQ0tfSF9fCisjZGVmaW5lIF9fU1lTVElDS19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8aW5jL2h3X252aWMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW50ZXJydXB0Lmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBQcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSBTeXNUaWNrIGNvdW50ZXIuCisvLyEKKy8vISBUaGlzIHdpbGwgc3RhcnQgdGhlIFN5c1RpY2sgY291bnRlci4gSWYgYW4gaW50ZXJydXB0IGhhbmRsZXIgaGFzIGJlZW4KKy8vISByZWdpc3RlcmVkLCBpdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBTeXNUaWNrIGNvdW50ZXIgcm9sbHMgb3Zlci4KKy8vIQorLy8hIFxub3RlIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlIHRoZSBTeXNUaWNrIGNvdW50ZXIgdG8gKHJlKWNvbW1lbmNlCisvLyEgY291bnRpbmcgZnJvbSBpdHMgY3VycmVudCB2YWx1ZS4gVGhlIGNvdW50ZXIgaXMgbm90IGF1dG9tYXRpY2FsbHkgcmVsb2FkZWQKKy8vISB3aXRoIHRoZSBwZXJpb2QgYXMgc3BlY2lmaWVkIGluIGEgcHJldmlvdXMgY2FsbCB0byBccmVmIFN5c1RpY2tQZXJpb2RTZXQoKS4gSWYKKy8vISBhbiBpbW1lZGlhdGUgcmVsb2FkIGlzIHJlcXVpcmVkLCB0aGUgTlZJQ19TVF9DVVJSRU5UIHJlZ2lzdGVyIG11c3QgYmUKKy8vISB3cml0dGVuIHRvIGZvcmNlIHRoaXMuIEFueSB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyIGNsZWFycyB0aGUgU3lzVGljaworLy8hIGNvdW50ZXIgdG8gMCBhbmQgd2lsbCBjYXVzZSBhIHJlbG9hZCB3aXRoIHRoZSBzdXBwbGllZCBwZXJpb2Qgb24gdGhlIG5leHQKKy8vISBjbG9jay4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTeXNUaWNrRW5hYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBFbmFibGUgU3lzVGljay4KKyAgICAvLworICAgIEhXUkVHKE5WSUNfU1RfQ1RSTCkgfD0gTlZJQ19TVF9DVFJMX0NMS19TUkMgfCBOVklDX1NUX0NUUkxfRU5BQkxFOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyB0aGUgU3lzVGljayBjb3VudGVyLgorLy8hCisvLyEgVGhpcyB3aWxsIHN0b3AgdGhlIFN5c1RpY2sgY291bnRlci4gSWYgYW4gaW50ZXJydXB0IGhhbmRsZXIgaGFzIGJlZW4KKy8vISByZWdpc3RlcmVkLCBpdCB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQgdW50aWwgU3lzVGljayBpcyByZXN0YXJ0ZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU3lzVGlja0Rpc2FibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIERpc2FibGUgU3lzVGljay4KKyAgICAvLworICAgIEhXUkVHKE5WSUNfU1RfQ1RSTCkgJj0gfihOVklDX1NUX0NUUkxfRU5BQkxFKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgU3lzVGljayBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIHNldHMgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gYSBTeXNUaWNrIGludGVycnVwdCBvY2N1cnMuCisvLyEKKy8vISBccGFyYW0gcGZuSGFuZGxlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZQorLy8hIFN5c1RpY2sgaW50ZXJydXB0IG9jY3Vycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTeXNUaWNrSW50UmVnaXN0ZXIodm9pZCAoKnBmbkhhbmRsZXIpKHZvaWQpKQoreworICAgIC8vCisgICAgLy8gUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLCByZXR1cm5pbmcgYW4gZXJyb3IgaWYgYW4gZXJyb3Igb2NjdXJzLgorICAgIC8vCisgICAgSW50UmVnaXN0ZXIoSU5UX1NZU1RJQ0ssIHBmbkhhbmRsZXIpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIFN5c1RpY2sgaW50ZXJydXB0LgorICAgIC8vCisgICAgSFdSRUcoTlZJQ19TVF9DVFJMKSB8PSBOVklDX1NUX0NUUkxfSU5URU47Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIFN5c1RpY2sgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGEgU3lzVGljayBpbnRlcnJ1cHQKKy8vISBvY2N1cnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU3lzVGlja0ludFVucmVnaXN0ZXIodm9pZCkKK3sKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIFN5c1RpY2sgaW50ZXJydXB0LgorICAgIC8vCisgICAgSFdSRUcoTlZJQ19TVF9DVFJMKSAmPSB+KE5WSUNfU1RfQ1RSTF9JTlRFTik7CisKKyAgICAvLworICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50VW5yZWdpc3RlcihJTlRfU1lTVElDSyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdGhlIFN5c1RpY2sgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSB0aGUgU3lzVGljayBpbnRlcnJ1cHQsIGFsbG93aW5nIGl0IHRvIGJlCisvLyEgcmVmbGVjdGVkIHRvIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBcbm90ZSBUaGUgU3lzVGljayBpbnRlcnJ1cHQgaGFuZGxlciBkb2VzIG5vdCBuZWVkIHRvIGNsZWFyIHRoZSBTeXNUaWNrCisvLyEgaW50ZXJydXB0IHNvdXJjZSBhcyB0aGlzIGlzIGRvbmUgYXV0b21hdGljYWxseSBieSBOVklDIHdoZW4gdGhlIGludGVycnVwdAorLy8hIGhhbmRsZXIgaXMgY2FsbGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1N5c1RpY2tJbnRFbmFibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgU3lzVGljayBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBIV1JFRyhOVklDX1NUX0NUUkwpIHw9IE5WSUNfU1RfQ1RSTF9JTlRFTjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgdGhlIFN5c1RpY2sgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGRpc2FibGUgdGhlIFN5c1RpY2sgaW50ZXJydXB0LCBwcmV2ZW50aW5nIGl0IGZyb20gYmVpbmcKKy8vISByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTeXNUaWNrSW50RGlzYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgU3lzVGljayBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBIV1JFRyhOVklDX1NUX0NUUkwpICY9IH4oTlZJQ19TVF9DVFJMX0lOVEVOKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgcGVyaW9kIG9mIHRoZSBTeXNUaWNrIGNvdW50ZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIFN5c1RpY2sgY291bnRlciB3cmFwczsgdGhpcworLy8hIGVxdWFscyB0byB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvciBjbG9ja3MgYmV0d2VlbiBpbnRlcnJ1cHRzLgorLy8hCisvLyEgXG5vdGUgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNhdXNlIHRoZSBTeXNUaWNrIGNvdW50ZXIgdG8gcmVsb2FkCisvLyEgaW1tZWRpYXRlbHkuIElmIGFuIGltbWVkaWF0ZSByZWxvYWQgaXMgcmVxdWlyZWQsIHRoZSBOVklDX1NUX0NVUlJFTlQKKy8vISByZWdpc3RlciBtdXN0IGJlIHdyaXR0ZW4uIEFueSB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyIGNsZWFycyB0aGUgU3lzVGljaworLy8hIGNvdW50ZXIgdG8gMCBhbmQgd2lsbCBjYXVzZSBhIHJlbG9hZCB3aXRoIHRoZSBcYyB1aTMyUGVyaW9kIHN1cHBsaWVkIGhlcmUKKy8vISBvbiB0aGUgbmV4dCBjbG9jayBhZnRlciB0aGUgU3lzVGljayBpcyBlbmFibGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQZXJpb2QgaXMgdGhlIG51bWJlciBvZiBjbG9jayB0aWNrcyBpbiBlYWNoIHBlcmlvZCBvZiB0aGUKKy8vISBTeXNUaWNrIGNvdW50ZXI7IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxNiw3NzcsMjE2ICgweDEwMDAwMDApLCBib3RoIGluY2x1ZGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1N5c1RpY2tQZXJpb2RTZXQodWludDMyX3QgdWkzMlBlcmlvZCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJQZXJpb2QgPiAwKSAmJiAodWkzMlBlcmlvZCA8PSAxNjc3NzIxNikpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHBlcmlvZCBvZiB0aGUgU3lzVGljayBjb3VudGVyLgorICAgIC8vCisgICAgSFdSRUcoTlZJQ19TVF9SRUxPQUQpID0gdWkzMlBlcmlvZCAtIDE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIHBlcmlvZCBvZiB0aGUgU3lzVGljayBjb3VudGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByYXRlIGF0IHdoaWNoIHRoZSBTeXNUaWNrIGNvdW50ZXIgd3JhcHM7IHRoaXMKKy8vISBlcXVhbHMgdG8gdGhlIG51bWJlciBvZiBwcm9jZXNzb3IgY2xvY2tzIGJldHdlZW4gaW50ZXJydXB0cy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgcGVyaW9kIG9mIHRoZSBTeXNUaWNrIGNvdW50ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitTeXNUaWNrUGVyaW9kR2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHBlcmlvZCBvZiB0aGUgU3lzVGljayBjb3VudGVyLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKE5WSUNfU1RfUkVMT0FEKSArIDEpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBTeXNUaWNrIGNvdW50ZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFN5c1RpY2sgY291bnRlcjsgdGhpcyB3aWxsCisvLyEgYmUgYSB2YWx1ZSBiZXR3ZWVuIHRoZSAocGVyaW9kIC0gMSkgYW5kIHplcm8sIGJvdGggaW5jbHVkZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFN5c1RpY2sgY291bnRlcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorU3lzVGlja1ZhbHVlR2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFN5c1RpY2sgY291bnRlci4KKyAgICAvLworICAgIHJldHVybihIV1JFRyhOVklDX1NUX0NVUlJFTlQpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX1NZU1RJQ0tfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAKKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzdGlja19kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3N5c3RpY2tfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhNTA5YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3N5c3RpY2tfZG9jLmgKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHN5c3RpY2tfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIHN5c3RpY2tfYXBpCisvLyEgQHsKKy8vISBcc2VjdGlvbiBzZWNfc3lzdGljayBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSBzeXN0ZW0gQ1BVIGluY2x1ZGVzIGEgc3lzdGVtIHRpbWVyLCBTeXNUaWNrLCBpbnRlZ3JhdGVkIGluIHRoZSBOVklDIHdoaWNoIHByb3ZpZGVzIGEgc2ltcGxlLCAyNC1iaXQsCisvLyEgY2xlYXItb24td3JpdGUsIGRlY3JlbWVudGluZywgd3JhcC1vbi16ZXJvIGNvdW50ZXIgd2l0aCBhIGZsZXhpYmxlIGNvbnRyb2wgbWVjaGFuaXNtLgorLy8hIFdoZW4gZW5hYmxlZCwgdGhlIHRpbWVyIGNvdW50cyBkb3duIG9uIGVhY2ggY2xvY2sgZnJvbSB0aGUgcmVsb2FkIHZhbHVlIHRvIDAsIHJlbG9hZHMgKHdyYXBzKSBvbgorLy8hIHRoZSBuZXh0IGNsb2NrIGVkZ2UsIHRoZW4gZGVjcmVtZW50cyBvbiBzdWJzZXF1ZW50IGNsb2Nrcy4KKy8vIQorLy8hIFRoZSBTeXNUaWNrIGNvdW50ZXIgcnVucyBvbiB0aGUgc3lzdGVtIGNsb2NrLiBJZiB0aGlzIGNsb2NrIHNpZ25hbCBpcyBzdG9wcGVkIGZvciBsb3ctcG93ZXIgbW9kZSwgdGhlCisvLyEgU3lzVGljayBjb3VudGVyIHN0b3BzLgorLy8hCisvLyEgV2hlbiB0aGUgcHJvY2Vzc29yIGlzIGhhbHRlZCBmb3IgZGVidWdnaW5nLCB0aGUgY291bnRlciBkb2VzIG5vdCBkZWNyZW1lbnQuCisvLyEKKy8vISBcc2VjdGlvbiBzZWNfc3lzdGlja19hcGkgQVBJCisvLyEKKy8vISBUaGUgQVBJIGZ1bmN0aW9ucyBjYW4gYmUgZ3JvdXBlZCBsaWtlIHRoaXM6CisvLyEKKy8vISBDb25maWd1cmF0aW9uIGFuZCBzdGF0dXM6CisvLyEgLSBccmVmIFN5c1RpY2tQZXJpb2RTZXQoKQorLy8hIC0gXHJlZiBTeXNUaWNrUGVyaW9kR2V0KCkKKy8vISAtIFxyZWYgU3lzVGlja1ZhbHVlR2V0KCkKKy8vIQorLy8hIEVuYWJsZSBhbmQgZGlzYWJsZToKKy8vISAtIFxyZWYgU3lzVGlja0VuYWJsZSgpCisvLyEgLSBccmVmIFN5c1RpY2tEaXNhYmxlKCkKKy8vIQorLy8hIEludGVycnVwdCBjb25maWd1cmF0aW9uOgorLy8hIC0gXHJlZiBTeXNUaWNrSW50UmVnaXN0ZXIoKQorLy8hIC0gXHJlZiBTeXNUaWNrSW50VW5yZWdpc3RlcigpCisvLyEgLSBccmVmIFN5c1RpY2tJbnRFbmFibGUoKQorLy8hIC0gXHJlZiBTeXNUaWNrSW50RGlzYWJsZSgpCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3RpbWVyLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjNjZGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi90aW1lci5jCkBAIC0wLDAgKzEsNDUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgdGltZXIuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMzAgMTI6NDg6MTcgKzAyMDAgKE1vbiwgMzAgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDY1NTIKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvdGltZXIuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIFRpbWVyQ29uZmlndXJlCisgICAgI2RlZmluZSBUaW1lckNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgIE5PUk9NX1RpbWVyQ29uZmlndXJlCisgICAgI3VuZGVmICBUaW1lckxldmVsQ29udHJvbAorICAgICNkZWZpbmUgVGltZXJMZXZlbENvbnRyb2wgICAgICAgICAgICAgICBOT1JPTV9UaW1lckxldmVsQ29udHJvbAorICAgICN1bmRlZiAgVGltZXJTdGFsbENvbnRyb2wKKyAgICAjZGVmaW5lIFRpbWVyU3RhbGxDb250cm9sICAgICAgICAgICAgICAgTk9ST01fVGltZXJTdGFsbENvbnRyb2wKKyAgICAjdW5kZWYgIFRpbWVyV2FpdE9uVHJpZ2dlckNvbnRyb2wKKyAgICAjZGVmaW5lIFRpbWVyV2FpdE9uVHJpZ2dlckNvbnRyb2wgICAgICAgTk9ST01fVGltZXJXYWl0T25UcmlnZ2VyQ29udHJvbAorICAgICN1bmRlZiAgVGltZXJJbnRSZWdpc3RlcgorICAgICNkZWZpbmUgVGltZXJJbnRSZWdpc3RlciAgICAgICAgICAgICAgICBOT1JPTV9UaW1lckludFJlZ2lzdGVyCisgICAgI3VuZGVmICBUaW1lckludFVucmVnaXN0ZXIKKyAgICAjZGVmaW5lIFRpbWVySW50VW5yZWdpc3RlciAgICAgICAgICAgICAgTk9ST01fVGltZXJJbnRVbnJlZ2lzdGVyCisgICAgI3VuZGVmICBUaW1lck1hdGNoVXBkYXRlTW9kZQorICAgICNkZWZpbmUgVGltZXJNYXRjaFVwZGF0ZU1vZGUgICAgICAgICAgICBOT1JPTV9UaW1lck1hdGNoVXBkYXRlTW9kZQorICAgICN1bmRlZiAgVGltZXJJbnRlcnZhbExvYWRNb2RlCisgICAgI2RlZmluZSBUaW1lckludGVydmFsTG9hZE1vZGUgICAgICAgICAgIE5PUk9NX1RpbWVySW50ZXJ2YWxMb2FkTW9kZQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIHRpbWVyIGludGVycnVwdCBudW1iZXIuCisvLyEKKy8vISBHaXZlbiBhIHRpbWVyIGJhc2UgYWRkcmVzcywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nCisvLyEgaW50ZXJydXB0IG51bWJlci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgYSB0aW1lciBpbnRlcnJ1cHQgbnVtYmVyLCBvciAtMSBpZiBcYyB1aTMyQmFzZSBpcyBpbnZhbGlkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyB1aW50MzJfdAorVGltZXJJbnROdW1iZXJHZXQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgdWludDMyX3QgdWkzMkludDsKKworICAgIC8vCisgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSB0YWJsZSB0aGF0IG1hcHMgdGltZXIgYmFzZSBhZGRyZXNzZXMgdG8gaW50ZXJydXB0CisgICAgLy8gbnVtYmVycy4KKyAgICAvLworICAgIHN3aXRjaCh1aTMyQmFzZSkKKyAgICB7CisgICAgY2FzZSBHUFQwX0JBU0UgOgorICAgICAgICB1aTMySW50ID0gSU5UX0dQVDBBOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdQVDFfQkFTRSA6CisgICAgICAgIHVpMzJJbnQgPSBJTlRfR1BUMUE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1BUMl9CQVNFIDoKKyAgICAgICAgdWkzMkludCA9IElOVF9HUFQyQTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHUFQzX0JBU0UgOgorICAgICAgICB1aTMySW50ID0gSU5UX0dQVDNBOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0IDoKKyAgICAgICAgdWkzMkludCA9IDB4MDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgaW50ZXJydXB0IG51bWJlciBvciAoLTEpIGlmIG5vdCBiYXNlIGFkZHJlc3MgaXMgbm90IG1hdGNoZWQuCisgICAgLy8KKyAgICByZXR1cm4gKHVpMzJJbnQpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENvbmZpZ3VyZXMgdGhlIHRpbWVyKHMpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVGltZXJDb25maWd1cmUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDb25maWcpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyQ29uZmlnID09IFRJTUVSX0NGR19PTkVfU0hPVCkgfHwKKyAgICAgICAgICAgKHVpMzJDb25maWcgPT0gVElNRVJfQ0ZHX09ORV9TSE9UX1VQKSB8fAorICAgICAgICAgICAodWkzMkNvbmZpZyA9PSBUSU1FUl9DRkdfUEVSSU9ESUMpIHx8CisgICAgICAgICAgICh1aTMyQ29uZmlnID09IFRJTUVSX0NGR19QRVJJT0RJQ19VUCkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHhGRjAwMDAwMCkgPT0gVElNRVJfQ0ZHX1NQTElUX1BBSVIpKTsKKyAgICBBU1NFUlQoKCh1aTMyQ29uZmlnICYgMHhGRjAwMDAwMCkgIT0gVElNRVJfQ0ZHX1NQTElUX1BBSVIpIHx8CisgICAgICAgICAgICgoKCh1aTMyQ29uZmlnICYgMHgwMDAwMDBGRikgPT0gVElNRVJfQ0ZHX0FfT05FX1NIT1QpIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMDBGRikgPT0gVElNRVJfQ0ZHX0FfT05FX1NIT1RfVVApIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMDBGRikgPT0gVElNRVJfQ0ZHX0FfUEVSSU9ESUMpIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMDBGRikgPT0gVElNRVJfQ0ZHX0FfUEVSSU9ESUNfVVApIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMDBGRikgPT0gVElNRVJfQ0ZHX0FfQ0FQX0NPVU5UKSB8fAorICAgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDAwRkYpID09IFRJTUVSX0NGR19BX0NBUF9DT1VOVF9VUCkgfHwKKyAgICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwMEZGKSA9PSBUSU1FUl9DRkdfQV9DQVBfVElNRSkgfHwKKyAgICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwMEZGKSA9PSBUSU1FUl9DRkdfQV9DQVBfVElNRV9VUCkgfHwKKyAgICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwMEZGKSA9PSBUSU1FUl9DRkdfQV9QV00pKSAmJgorICAgICAgICAgICAgKCgodWkzMkNvbmZpZyAmIDB4MDAwMEZGMDApID09IFRJTUVSX0NGR19CX09ORV9TSE9UKSB8fAorICAgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMEZGMDApID09IFRJTUVSX0NGR19CX09ORV9TSE9UX1VQKSB8fAorICAgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMEZGMDApID09IFRJTUVSX0NGR19CX1BFUklPRElDKSB8fAorICAgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMEZGMDApID09IFRJTUVSX0NGR19CX1BFUklPRElDX1VQKSB8fAorICAgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMEZGMDApID09IFRJTUVSX0NGR19CX0NBUF9DT1VOVCkgfHwKKyAgICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDBGRjAwKSA9PSBUSU1FUl9DRkdfQl9DQVBfQ09VTlRfVVApIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwRkYwMCkgPT0gVElNRVJfQ0ZHX0JfQ0FQX1RJTUUpIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwRkYwMCkgPT0gVElNRVJfQ0ZHX0JfQ0FQX1RJTUVfVVApIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwRkYwMCkgPT0gVElNRVJfQ0ZHX0JfUFdNKSkpKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgdGltZXJzLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19DVEwpICY9IH4oR1BUX0NUTF9UQUVOIHwgR1BUX0NUTF9UQkVOKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBnbG9iYWwgdGltZXIgY29uZmlndXJhdGlvbi4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fQ0ZHKSA9IHVpMzJDb25maWcgPj4gMjQ7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgQSBhbmQgQiB0aW1lcnMuIE5vdGUgdGhhdCB0aGUgQiB0aW1lcgorICAgIC8vIGNvbmZpZ3VyYXRpb24gaXMgaWdub3JlZCBieSB0aGUgaGFyZHdhcmUgaW4gMzItYml0IG1vZGVzLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQU1SKSA9ICh1aTMyQ29uZmlnICYgMHhGRikgfCBHUFRfVEFNUl9UQVBXTUlFOworICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEJNUikgPQorICAgICAgICAoKHVpMzJDb25maWcgPj4gOCkgJiAweEZGKSB8IEdQVF9UQk1SX1RCUFdNSUU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29udHJvbHMgdGhlIG91dHB1dCBsZXZlbAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1RpbWVyTGV2ZWxDb250cm9sKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIGJvb2wgYkludmVydCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBUSU1FUl9BKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0IpIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gVElNRVJfQk9USCkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIG91dHB1dCBsZXZlbHMgYXMgcmVxdWVzdGVkLgorICAgIC8vCisgICAgdWkzMlRpbWVyICY9IEdQVF9DVExfVEFQV01MIHwgR1BUX0NUTF9UQlBXTUw7CisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19DVEwpID0gKGJJbnZlcnQgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSFdSRUcodWkzMkJhc2UgKyBHUFRfT19DVEwpIHwgdWkzMlRpbWVyKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0NUTCkgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+KHVpMzJUaW1lcikpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb250cm9scyB0aGUgc3RhbGwgaGFuZGxpbmcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitUaW1lclN0YWxsQ29udHJvbCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyLCBib29sIGJTdGFsbCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBUSU1FUl9BKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0IpIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gVElNRVJfQk9USCkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHN0YWxsIG1vZGUuCisgICAgLy8KKyAgICB1aTMyVGltZXIgJj0gR1BUX0NUTF9UQVNUQUxMIHwgR1BUX0NUTF9UQlNUQUxMOworICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fQ1RMKSA9IChiU3RhbGwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSFdSRUcodWkzMkJhc2UgKyBHUFRfT19DVEwpIHwgdWkzMlRpbWVyKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0NUTCkgJiB+KHVpMzJUaW1lcikpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb250cm9scyB0aGUgd2FpdCBvbiB0cmlnZ2VyIGhhbmRsaW5nCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVGltZXJXYWl0T25UcmlnZ2VyQ29udHJvbCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyLCBib29sIGJXYWl0KQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBUSU1FUl9CT1RIKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgd2FpdCBvbiB0cmlnZ2VyIG1vZGUgZm9yIHRpbWVyIEEuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9BKQorICAgIHsKKyAgICAgICAgaWYoYldhaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEFNUikgfD0gR1BUX1RBTVJfVEFXT1Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RBTVIpICY9IH4oR1BUX1RBTVJfVEFXT1QpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHdhaXQgb24gdHJpZ2dlciBtb2RlIGZvciB0aW1lciBCLgorICAgIC8vCisgICAgaWYodWkzMlRpbWVyICYgVElNRVJfQikKKyAgICB7CisgICAgICAgIGlmKGJXYWl0KQorICAgICAgICB7CisgICAgICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RCTVIpIHw9IEdQVF9UQk1SX1RCV09UOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQk1SKSAmPSB+KEdQVF9UQk1SX1RCV09UKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSB0aW1lciBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitUaW1lckludFJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSkKK3sKKyAgICB1aW50MzJfdCB1aTMySW50OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGZvciB0aGlzIHRpbWVyIG1vZHVsZS4KKyAgICAvLworICAgIHVpMzJJbnQgPSBUaW1lckludE51bWJlckdldCh1aTMyQmFzZSk7CisKKyAgICAvLworICAgIC8vIFJlZ2lzdGVyIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aW1lciBBIGlmIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0EpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgICAgIC8vCisgICAgICAgIEludFJlZ2lzdGVyKHVpMzJJbnQsIHBmbkhhbmRsZXIpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIEVuYWJsZSB0aGUgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBJbnRFbmFibGUodWkzMkludCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZWdpc3RlciBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGltZXIgQiBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9CKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgICAgICAvLworICAgICAgICBJbnRSZWdpc3Rlcih1aTMySW50ICsgMSwgcGZuSGFuZGxlcik7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRW5hYmxlIHRoZSBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEludEVuYWJsZSh1aTMySW50ICsgMSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFVucmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgdGltZXIgaW50ZXJydXB0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVGltZXJJbnRVbnJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIpCit7CisgICAgdWludDMyX3QgdWkzMkludDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBUSU1FUl9CT1RIKSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgaW50ZXJydXB0IG51bWJlciBmb3IgdGhpcyB0aW1lciBtb2R1bGUuCisgICAgLy8KKyAgICB1aTMySW50ID0gVGltZXJJbnROdW1iZXJHZXQodWkzMkJhc2UpOworCisgICAgLy8KKyAgICAvLyBVbnJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGltZXIgQSBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9BKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBJbnREaXNhYmxlKHVpMzJJbnQpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgICAgICAvLworICAgICAgICBJbnRVbnJlZ2lzdGVyKHVpMzJJbnQpOworICAgIH0KKworICAgIC8vCisgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRpbWVyIEIgaWYgcmVxdWVzdGVkLgorICAgIC8vCisgICAgaWYodWkzMlRpbWVyICYgVElNRVJfQikKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIERpc2FibGUgdGhlIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSW50RGlzYWJsZSh1aTMySW50ICsgMSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgICAgIC8vCisgICAgICAgIEludFVucmVnaXN0ZXIodWkzMkludCArIDEpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFNldHMgdGhlIE1hdGNoIFJlZ2lzdGVyIFVwZGF0ZSBtb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVGltZXJNYXRjaFVwZGF0ZU1vZGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwgdWludDMyX3QgdWkzMk1vZGUpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CT1RIKSk7CisgICAgQVNTRVJUKCh1aTMyTW9kZSA9PSBUSU1FUl9NQVRDSFVQREFURV9ORVhUQ1lDTEUpIHx8ICh1aTMyTW9kZSA9PSBUSU1FUl9NQVRDSFVQREFURV9USU1FT1VUKSk7CisKKyAgICAvLyBTZXQgbW9kZSBmb3IgdGltZXIgQQorICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0EpCisgICAgeworICAgICAgICBpZih1aTMyTW9kZSA9PSBUSU1FUl9NQVRDSFVQREFURV9ORVhUQ1lDTEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEFNUikgJj0gfihHUFRfVEFNUl9UQU1SU1UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQU1SKSB8PSBHUFRfVEFNUl9UQU1SU1U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgbW9kZSBmb3IgdGltZXIgQgorICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0IpCisgICAgeworICAgICAgICBpZih1aTMyTW9kZSA9PSBUSU1FUl9NQVRDSFVQREFURV9ORVhUQ1lDTEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEJNUikgJj0gfihHUFRfVEJNUl9UQk1SU1UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQk1SKSB8PSBHUFRfVEJNUl9UQk1SU1U7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTZXRzIHRoZSBJbnRlcnZhbCBMb2FkIG1vZGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitUaW1lckludGVydmFsTG9hZE1vZGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwgdWludDMyX3QgdWkzMk1vZGUpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CT1RIKSk7CisgICAgQVNTRVJUKCh1aTMyTW9kZSA9PSBUSU1FUl9JTlRFUlZBTExPQURfTkVYVENZQ0xFKSB8fCAodWkzMk1vZGUgPT0gVElNRVJfSU5URVJWQUxMT0FEX1RJTUVPVVQpKTsKKworICAgIC8vIFNldCBtb2RlIGZvciB0aW1lciBBCisgICAgaWYodWkzMlRpbWVyICYgVElNRVJfQSkKKyAgICB7CisgICAgICAgIGlmKHVpMzJNb2RlID09IFRJTUVSX0lOVEVSVkFMTE9BRF9ORVhUQ1lDTEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEFNUikgJj0gfihHUFRfVEFNUl9UQUlMRCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RBTVIpIHw9IEdQVF9UQU1SX1RBSUxEOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2V0IG1vZGUgZm9yIHRpbWVyIEIKKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9CKQorICAgIHsKKyAgICAgICAgaWYodWkzMk1vZGUgPT0gVElNRVJfSU5URVJWQUxMT0FEX05FWFRDWUNMRSkKKyAgICAgICAgeworICAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQk1SKSAmPSB+KEdQVF9UQk1SX1RCSUxEKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEJNUikgfD0gR1BUX1RCTVJfVEJJTEQ7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi90aW1lci5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWE3Yjk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdGltZXIuaApAQCAtMCwwICsxLDEyNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICB0aW1lci5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMS0wMyAwOTo1NDo0NyArMDEwMCAoVHVlLCAwMyBOb3YgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NDkzMworKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHBlcmlwaGVyYWxfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIHRpbWVyX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19HUFRfSF9fCisjZGVmaW5lIF9fR1BUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2dwdC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgVGltZXJDb25maWd1cmUgICAgICAgICAgICAgICAgICBOT1JPTV9UaW1lckNvbmZpZ3VyZQorICAgICNkZWZpbmUgVGltZXJMZXZlbENvbnRyb2wgICAgICAgICAgICAgICBOT1JPTV9UaW1lckxldmVsQ29udHJvbAorICAgICNkZWZpbmUgVGltZXJTdGFsbENvbnRyb2wgICAgICAgICAgICAgICBOT1JPTV9UaW1lclN0YWxsQ29udHJvbAorICAgICNkZWZpbmUgVGltZXJXYWl0T25UcmlnZ2VyQ29udHJvbCAgICAgICBOT1JPTV9UaW1lcldhaXRPblRyaWdnZXJDb250cm9sCisgICAgI2RlZmluZSBUaW1lckludFJlZ2lzdGVyICAgICAgICAgICAgICAgIE5PUk9NX1RpbWVySW50UmVnaXN0ZXIKKyAgICAjZGVmaW5lIFRpbWVySW50VW5yZWdpc3RlciAgICAgICAgICAgICAgTk9ST01fVGltZXJJbnRVbnJlZ2lzdGVyCisgICAgI2RlZmluZSBUaW1lck1hdGNoVXBkYXRlTW9kZSAgICAgICAgICAgIE5PUk9NX1RpbWVyTWF0Y2hVcGRhdGVNb2RlCisgICAgI2RlZmluZSBUaW1lckludGVydmFsTG9hZE1vZGUgICAgICAgICAgIE5PUk9NX1RpbWVySW50ZXJ2YWxMb2FkTW9kZQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFRpbWVyQ29uZmlndXJlIGFzIHRoZSB1aTMyQ29uZmlnIHBhcmFtZXRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFRJTUVSX0NGR19PTkVfU0hPVCAgICAgICAgMHgwMDAwMDAyMSAgLy8gRnVsbC13aWR0aCBvbmUtc2hvdCB0aW1lcgorI2RlZmluZSBUSU1FUl9DRkdfT05FX1NIT1RfVVAgICAgIDB4MDAwMDAwMzEgIC8vIEZ1bGwtd2lkdGggb25lLXNob3QgdXAtY291bnQgdGltZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX1BFUklPRElDICAgICAgICAweDAwMDAwMDIyICAvLyBGdWxsLXdpZHRoIHBlcmlvZGljIHRpbWVyCisjZGVmaW5lIFRJTUVSX0NGR19QRVJJT0RJQ19VUCAgICAgMHgwMDAwMDAzMiAgLy8gRnVsbC13aWR0aCBwZXJpb2RpYyB1cC1jb3VudCB0aW1lcgorI2RlZmluZSBUSU1FUl9DRkdfU1BMSVRfUEFJUiAgICAgIDB4MDQwMDAwMDAgIC8vIFR3byBoYWxmLXdpZHRoIHRpbWVycworI2RlZmluZSBUSU1FUl9DRkdfQV9PTkVfU0hPVCAgICAgIDB4MDAwMDAwMjEgIC8vIFRpbWVyIEEgb25lLXNob3QgdGltZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0FfT05FX1NIT1RfVVAgICAweDAwMDAwMDMxICAvLyBUaW1lciBBIG9uZS1zaG90IHVwLWNvdW50IHRpbWVyCisjZGVmaW5lIFRJTUVSX0NGR19BX1BFUklPRElDICAgICAgMHgwMDAwMDAyMiAgLy8gVGltZXIgQSBwZXJpb2RpYyB0aW1lcgorI2RlZmluZSBUSU1FUl9DRkdfQV9QRVJJT0RJQ19VUCAgIDB4MDAwMDAwMzIgIC8vIFRpbWVyIEEgcGVyaW9kaWMgdXAtY291bnQgdGltZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0FfQ0FQX0NPVU5UICAgICAweDAwMDAwMDAzICAvLyBUaW1lciBBIGV2ZW50IGNvdW50ZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0FfQ0FQX0NPVU5UX1VQICAweDAwMDAwMDEzICAvLyBUaW1lciBBIGV2ZW50IHVwLWNvdW50ZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0FfQ0FQX1RJTUUgICAgICAweDAwMDAwMDA3ICAvLyBUaW1lciBBIGV2ZW50IHRpbWVyCisjZGVmaW5lIFRJTUVSX0NGR19BX0NBUF9USU1FX1VQICAgMHgwMDAwMDAxNyAgLy8gVGltZXIgQSBldmVudCB1cC1jb3VudCB0aW1lcgorI2RlZmluZSBUSU1FUl9DRkdfQV9QV00gICAgICAgICAgIDB4MDAwMDAwMEEgIC8vIFRpbWVyIEEgUFdNIG91dHB1dAorI2RlZmluZSBUSU1FUl9DRkdfQl9PTkVfU0hPVCAgICAgIDB4MDAwMDIxMDAgIC8vIFRpbWVyIEIgb25lLXNob3QgdGltZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0JfT05FX1NIT1RfVVAgICAweDAwMDAzMTAwICAvLyBUaW1lciBCIG9uZS1zaG90IHVwLWNvdW50IHRpbWVyCisjZGVmaW5lIFRJTUVSX0NGR19CX1BFUklPRElDICAgICAgMHgwMDAwMjIwMCAgLy8gVGltZXIgQiBwZXJpb2RpYyB0aW1lcgorI2RlZmluZSBUSU1FUl9DRkdfQl9QRVJJT0RJQ19VUCAgIDB4MDAwMDMyMDAgIC8vIFRpbWVyIEIgcGVyaW9kaWMgdXAtY291bnQgdGltZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0JfQ0FQX0NPVU5UICAgICAweDAwMDAwMzAwICAvLyBUaW1lciBCIGV2ZW50IGNvdW50ZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0JfQ0FQX0NPVU5UX1VQICAweDAwMDAxMzAwICAvLyBUaW1lciBCIGV2ZW50IHVwLWNvdW50ZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0JfQ0FQX1RJTUUgICAgICAweDAwMDAwNzAwICAvLyBUaW1lciBCIGV2ZW50IHRpbWVyCisjZGVmaW5lIFRJTUVSX0NGR19CX0NBUF9USU1FX1VQICAgMHgwMDAwMTcwMCAgLy8gVGltZXIgQiBldmVudCB1cC1jb3VudCB0aW1lcgorI2RlZmluZSBUSU1FUl9DRkdfQl9QV00gICAgICAgICAgIDB4MDAwMDBBMDAgIC8vIFRpbWVyIEIgUFdNIG91dHB1dAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBUaW1lckludEVuYWJsZSwgVGltZXJJbnREaXNhYmxlLCBhbmQKKy8vIFRpbWVySW50Q2xlYXIgYXMgdGhlIHVpMzJJbnRGbGFncyBwYXJhbWV0ZXIsIGFuZCByZXR1cm5lZCBmcm9tCisvLyBUaW1lckludFN0YXR1cy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFRJTUVSX1RJTUJfRE1BICAgICAgICAgICAgMHgwMDAwMjAwMCAgLy8gVGltZXJCIERNQSBEb25lIGludGVycnVwdAorI2RlZmluZSBUSU1FUl9USU1CX01BVENIICAgICAgICAgIDB4MDAwMDA4MDAgIC8vIFRpbWVyQiBtYXRjaCBpbnRlcnJ1cHQKKyNkZWZpbmUgVElNRVJfQ0FQQl9FVkVOVCAgICAgICAgICAweDAwMDAwNDAwICAvLyBDYXB0dXJlQiBldmVudCBpbnRlcnJ1cHQKKyNkZWZpbmUgVElNRVJfQ0FQQl9NQVRDSCAgICAgICAgICAweDAwMDAwMjAwICAvLyBDYXB0dXJlQiBtYXRjaCBpbnRlcnJ1cHQKKyNkZWZpbmUgVElNRVJfVElNQl9USU1FT1VUICAgICAgICAweDAwMDAwMTAwICAvLyBUaW1lckIgdGltZSBvdXQgaW50ZXJydXB0CisjZGVmaW5lIFRJTUVSX1RJTUFfRE1BICAgICAgICAgICAgMHgwMDAwMDAyMCAgLy8gVGltZXJBIERNQSBEb25lIGludGVycnVwdAorI2RlZmluZSBUSU1FUl9USU1BX01BVENIICAgICAgICAgIDB4MDAwMDAwMTAgIC8vIFRpbWVyQSBtYXRjaCBpbnRlcnJ1cHQKKyNkZWZpbmUgVElNRVJfQ0FQQV9FVkVOVCAgICAgICAgICAweDAwMDAwMDA0ICAvLyBDYXB0dXJlQSBldmVudCBpbnRlcnJ1cHQKKyNkZWZpbmUgVElNRVJfQ0FQQV9NQVRDSCAgICAgICAgICAweDAwMDAwMDAyICAvLyBDYXB0dXJlQSBtYXRjaCBpbnRlcnJ1cHQKKyNkZWZpbmUgVElNRVJfVElNQV9USU1FT1VUICAgICAgICAweDAwMDAwMDAxICAvLyBUaW1lckEgdGltZSBvdXQgaW50ZXJydXB0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFRpbWVyQ29udHJvbEV2ZW50IGFzIHRoZSB1aTMyRXZlbnQgcGFyYW1ldGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVElNRVJfRVZFTlRfUE9TX0VER0UgICAgICAweDAwMDAwMDAwICAvLyBDb3VudCBwb3NpdGl2ZSBlZGdlcworI2RlZmluZSBUSU1FUl9FVkVOVF9ORUdfRURHRSAgICAgIDB4MDAwMDA0MDQgIC8vIENvdW50IG5lZ2F0aXZlIGVkZ2VzCisjZGVmaW5lIFRJTUVSX0VWRU5UX0JPVEhfRURHRVMgICAgMHgwMDAwMEMwQyAgLy8gQ291bnQgYm90aCBlZGdlcworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBtb3N0IG9mIHRoZSB0aW1lciBBUElzIGFzIHRoZSB1aTMyVGltZXIKKy8vIHBhcmFtZXRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFRJTUVSX0EgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRiAgLy8gVGltZXIgQQorI2RlZmluZSBUSU1FUl9CICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAgIC8vIFRpbWVyIEIKKyNkZWZpbmUgVElNRVJfQk9USCAgICAgICAgICAgICAgICAweDAwMDBGRkZGICAvLyBUaW1lciBCb3RoCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIEdQVFN5bmNocm9uaXplIGFzIHRoZSB1aTMyVGltZXJzIHBhcmFtZXRlcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVElNRVJfMEFfU1lOQyAgICAgICAgICAgICAweDAwMDAwMDAxICAvLyBTeW5jaHJvbml6ZSBUaW1lciAwQQorI2RlZmluZSBUSU1FUl8wQl9TWU5DICAgICAgICAgICAgIDB4MDAwMDAwMDIgIC8vIFN5bmNocm9uaXplIFRpbWVyIDBCCisjZGVmaW5lIFRJTUVSXzFBX1NZTkMgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLy8gU3luY2hyb25pemUgVGltZXIgMUEKKyNkZWZpbmUgVElNRVJfMUJfU1lOQyAgICAgICAgICAgICAweDAwMDAwMDA4ICAvLyBTeW5jaHJvbml6ZSBUaW1lciAxQgorI2RlZmluZSBUSU1FUl8yQV9TWU5DICAgICAgICAgICAgIDB4MDAwMDAwMTAgIC8vIFN5bmNocm9uaXplIFRpbWVyIDJBCisjZGVmaW5lIFRJTUVSXzJCX1NZTkMgICAgICAgICAgICAgMHgwMDAwMDAyMCAgLy8gU3luY2hyb25pemUgVGltZXIgMkIKKyNkZWZpbmUgVElNRVJfM0FfU1lOQyAgICAgICAgICAgICAweDAwMDAwMDQwICAvLyBTeW5jaHJvbml6ZSBUaW1lciAzQQorI2RlZmluZSBUSU1FUl8zQl9TWU5DICAgICAgICAgICAgIDB4MDAwMDAwODAgIC8vIFN5bmNocm9uaXplIFRpbWVyIDNCCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFRpbWVyTWF0Y2hVcGRhdGVNb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBUSU1FUl9NQVRDSFVQREFURV9ORVhUQ1lDTEUgIDB4MDAwMDAwMDAgLy8gQXBwbHkgbWF0Y2ggcmVnaXN0ZXIgb24gbmV4dCBjeWNsZQorI2RlZmluZSBUSU1FUl9NQVRDSFVQREFURV9USU1FT1VUICAgIDB4MDAwMDAwMDEgLy8gQXBwbHkgbWF0Y2ggcmVnaXN0ZXIgb24gbmV4dCB0aW1lb3V0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFRpbWVySW50ZXJ2YWxMb2FkCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBUSU1FUl9JTlRFUlZBTExPQURfTkVYVENZQ0xFICAweDAwMDAwMDAwIC8vIExvYWQgVHhSIHJlZ2lzdGVyIHdpdGggdGhlIHZhbHVlIGluIHRoZSBUeElMUiByZWdpc3RlciBvbiB0aGUgbmV4dCBjbG9jayBjeWNsZQorI2RlZmluZSBUSU1FUl9JTlRFUlZBTExPQURfVElNRU9VVCAgICAweDAwMDAwMDAxIC8vIExvYWQgVHhSIHJlZ2lzdGVyIHdpdGggdGhlIHZhbHVlIGluIHRoZSBUeElMUiByZWdpc3RlciBvbiBuZXh0IHRpbWVvdXQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZmRlZiBEUklWRVJMSUJfREVCVUcKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGludGVybmFsCisvLyEKKy8vISBcYnJpZWYgQ2hlY2tzIGEgdGltZXIgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGEgdGltZXIgbW9kdWxlIGJhc2UgYWRkcmVzcyBpcyB2YWxpZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGUgYmFzZSBhZGRyZXNzIGlzIHZhbGlkIGFuZCBcYyBmYWxzZQorLy8hIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgYm9vbAorVGltZXJCYXNlVmFsaWQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgcmV0dXJuKCh1aTMyQmFzZSA9PSBHUFQwX0JBU0UpIHx8ICh1aTMyQmFzZSA9PSBHUFQxX0JBU0UpIHx8CisgICAgICAgICAgICh1aTMyQmFzZSA9PSBHUFQyX0JBU0UpIHx8ICh1aTMyQmFzZSA9PSBHUFQzX0JBU0UpKTsKK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSB0aW1lcihzKS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBvcGVyYXRpb24gb2YgdGhlIHRpbWVyIG1vZHVsZS4gVGhlIHRpbWVyIG11c3QgYmUKKy8vISBjb25maWd1cmVkIGJlZm9yZSBpdCBpcyBlbmFibGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXIocykgdG8gZW5hYmxlLiBNdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEgLSBccmVmIFRJTUVSX0JPVEgKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUaW1lckVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBUSU1FUl9CT1RIKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgdGltZXIocykgbW9kdWxlLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19DVEwpIHw9IHVpMzJUaW1lciAmIChHUFRfQ1RMX1RBRU4gfCBHUFRfQ1RMX1RCRU4pOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyB0aGUgdGltZXIocykuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIG9wZXJhdGlvbiBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXIocykgdG8gZGlzYWJsZS4gTXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hIC0gXHJlZiBUSU1FUl9CT1RICisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVGltZXJEaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgdGltZXIgbW9kdWxlLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19DVEwpICY9IH4odWkzMlRpbWVyICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BUX0NUTF9UQUVOIHwgR1BUX0NUTF9UQkVOKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZXMgdGhlIHRpbWVyKHMpLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBvcGVyYXRpbmcgbW9kZSBvZiB0aGUgdGltZXIocykuIFRoZSB0aW1lcgorLy8hIG1vZHVsZSBpcyBkaXNhYmxlZCBiZWZvcmUgYmVpbmcgY29uZmlndXJlZCBhbmQgaXMgbGVmdCBpbiB0aGUgZGlzYWJsZWQKKy8vISBzdGF0ZS4KKy8vIQorLy8hIFRoZSB0aW1lcnMgYXJlIGNvbXByaXNlZCBvZiB0d28gMTYtYml0IHRpbWVycyB0aGF0IGNhbgorLy8hIG9wZXJhdGUgaW5kZXBlbmRlbnRseSBvciBiZSBjb25jYXRlbmF0ZWQgdG8gZm9ybSBhIDMyLWJpdCB0aW1lci4KKy8vIQorLy8hIFxub3RlIElmIHRoZSB0aW1lcnMgYXJlIHVzZWQgaW5kZXBlbmRlbnRseSB0aGUgbGVuZ3RoIG9mIHRpbWVyIGNhbiBiZQorLy8hIGV4dGVuZGVkIHRvIDI0IGJpdCBieSB1c2Ugb2YgYW4gOCBiaXQgcHJlc2NhbGUgcmVnaXN0ZXIgc2V0IHVzaW5nCisvLyEgXHJlZiBUaW1lclByZXNjYWxlU2V0KCkuCisvLyEKKy8vISBXaGVuIGNvbmZpZ3VyaW5nIGZvciBmdWxsLXdpZHRoIHRpbWVyIFxjIHVpMzJDb25maWcgaXMgc2V0CisvLyEgYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLy8hIC0gXHJlZiBUSU1FUl9DRkdfT05FX1NIT1QgICAgOiBGdWxsLXdpZHRoIG9uZS1zaG90IHRpbWVyLgorLy8hIC0gXHJlZiBUSU1FUl9DRkdfT05FX1NIT1RfVVAgOiBGdWxsLXdpZHRoIG9uZS1zaG90IHRpbWVyIHRoYXQgY291bnRzIHVwCisvLyEgICBpbnN0ZWFkIG9mIGRvd24uCisvLyEgLSBccmVmIFRJTUVSX0NGR19QRVJJT0RJQyAgICA6IEZ1bGwtd2lkdGggcGVyaW9kaWMgdGltZXIuCisvLyEgLSBccmVmIFRJTUVSX0NGR19QRVJJT0RJQ19VUCA6IEZ1bGwtd2lkdGggcGVyaW9kaWMgdGltZXIgdGhhdCBjb3VudHMgdXAKKy8vISAgIGluc3RlYWQgb2YgZG93bi4KKy8vIQorLy8hIFdoZW4gY29uZmlndXJpbmcgZm9yIGEgcGFpciBvZiBoYWxmLXdpZHRoIHRpbWVycywgZWFjaCB0aW1lciBpcyBzZXBhcmF0ZWx5CisvLyEgY29uZmlndXJlZC4gVGhlIHRpbWVycyBhcmUgY29uZmlndXJlZCBieSBzZXR0aW5nIFxjIHVpMzJDb25maWcgdG8KKy8vISB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb2YgZWFjaCBvZiB0aGUgZm9sbG93aW5nIHRocmVlOgorLy8hIC0gVXNlIGhhbGYtd2lkdGggdGltZXJzOgorLy8hICAgLSBccmVmIFRJTUVSX0NGR19TUExJVF9QQUlSCisvLyEgLSBUaW1lciBBOgorLy8hICAgLSBccmVmIFRJTUVSX0NGR19BX09ORV9TSE9UICAgICA6IEhhbGYtd2lkdGggb25lLXNob3QgdGltZXIKKy8vISAgIC0gXHJlZiBUSU1FUl9DRkdfQV9PTkVfU0hPVF9VUCAgOiBIYWxmLXdpZHRoIG9uZS1zaG90IHRpbWVyIHRoYXQgY291bnRzIHVwCisvLyEgICAgIGluc3RlYWQgb2YgZG93bi4KKy8vISAgIC0gXHJlZiBUSU1FUl9DRkdfQV9QRVJJT0RJQyAgICAgOiBIYWxmLXdpZHRoIHBlcmlvZGljIHRpbWVyCisvLyEgICAtIFxyZWYgVElNRVJfQ0ZHX0FfUEVSSU9ESUNfVVAgIDogSGFsZi13aWR0aCBwZXJpb2RpYyB0aW1lciB0aGF0IGNvdW50cyB1cAorLy8hICAgICBpbnN0ZWFkIG9mIGRvd24uCisvLyEgICAtIFxyZWYgVElNRVJfQ0ZHX0FfQ0FQX0NPVU5UICAgIDogSGFsZi13aWR0aCBlZGdlIGNvdW50IGNhcHR1cmUKKy8vISAgIC0gXHJlZiBUSU1FUl9DRkdfQV9DQVBfQ09VTlRfVVAgOiBIYWxmLXdpZHRoIGVkZ2UgY291bnQgY2FwdHVyZSB0aGF0IGNvdW50cworLy8hICAgICB1cCBpbnN0ZWFkIG9mIGRvd24uCisvLyEgICAtIFxyZWYgVElNRVJfQ0ZHX0FfQ0FQX1RJTUUgICAgIDogSGFsZi13aWR0aCBlZGdlIHRpbWUgY2FwdHVyZQorLy8hICAgLSBccmVmIFRJTUVSX0NGR19BX0NBUF9USU1FX1VQICA6IEhhbGYtd2lkdGggZWRnZSB0aW1lIGNhcHR1cmUgdGhhdCBjb3VudHMgdXAKKy8vISAgICAgaW5zdGVhZCBvZiBkb3duLgorLy8hICAgLSBccmVmIFRJTUVSX0NGR19BX1BXTSAgICAgICAgICA6IEhhbGYtd2lkdGggUFdNIG91dHB1dAorLy8hIC0gVGltZXIgQjoKKy8vISAgIC0gU2FtZSBhcyBUaW1lciBBIGJ1dCB1c2luZyBUSU1FUl9DRkdfQl8qIGluc3RlYWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyQ29uZmlnIGlzIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdGltZXIuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBUaW1lckNvbmZpZ3VyZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNvbmZpZyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbnRyb2xzIHRoZSBvdXRwdXQgbGV2ZWwuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIFBXTSBvdXRwdXQgbGV2ZWwgZm9yIHRoZSBzcGVjaWZpZWQgdGltZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcihzKSB0byBhZGp1c3QuIE11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vISAtIFxyZWYgVElNRVJfQk9USAorLy8hIFxwYXJhbSBiSW52ZXJ0IHNwZWNpZmllcyB0aGUgb3V0cHV0IGxldmVsLgorLy8hIC0gXGMgdHJ1ZSAgOiBUaW1lcidzIG91dHB1dCBpcyBhY3RpdmUgbG93LgorLy8hIC0gXGMgZmFsc2UgOiBUaW1lcidzIG91dHB1dCBpcyBhY3RpdmUgaGlnaC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFRpbWVyTGV2ZWxDb250cm9sKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJJbnZlcnQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb250cm9scyB0aGUgZXZlbnQgdHlwZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgc2lnbmFsIGVkZ2UocykgdGhhdCB0cmlnZ2VycyB0aGUgdGltZXIgd2hlbgorLy8hIGluIGNhcHR1cmUgbW9kZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyKHMpIHRvIGJlIGFkanVzdGVkOyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEgLSBccmVmIFRJTUVSX0JPVEgKKy8vISBccGFyYW0gdWkzMkV2ZW50IHNwZWNpZmllcyB0aGUgdHlwZSBvZiBldmVudDsgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0VWRU5UX1BPU19FREdFCisvLyEgLSBccmVmIFRJTUVSX0VWRU5UX05FR19FREdFCisvLyEgLSBccmVmIFRJTUVSX0VWRU5UX0JPVEhfRURHRVMKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUaW1lckV2ZW50Q29udHJvbCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyLCB1aW50MzJfdCB1aTMyRXZlbnQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBldmVudCB0eXBlLgorICAgIC8vCisgICAgdWkzMlRpbWVyICY9IEdQVF9DVExfVEFFVkVOVF9NIHwgR1BUX0NUTF9UQkVWRU5UX007CisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19DVEwpID0gKChIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0NUTCkgJiB+dWkzMlRpbWVyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aTMyRXZlbnQgJiB1aTMyVGltZXIpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29udHJvbHMgdGhlIHN0YWxsIGhhbmRsaW5nLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb250cm9scyB0aGUgc3RhbGwgcmVzcG9uc2UgZm9yIHRoZSBzcGVjaWZpZWQgdGltZXIuIElmIHRoZQorLy8hIFxlIGJTdGFsbCBwYXJhbWV0ZXIgaXMgXGIgdHJ1ZSwgdGhlbiB0aGUgdGltZXIgc3RvcHMgY291bnRpbmcgaWYgdGhlCisvLyEgcHJvY2Vzc29yIGVudGVycyBkZWJ1ZyBtb2RlOyBvdGhlcndpc2UgdGhlIHRpbWVyIGtlZXBzIHJ1bm5pbmcgd2hpbGUgaW4KKy8vISBkZWJ1ZyBtb2RlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXIocykgdG8gYmUgYWRqdXN0ZWQ7IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vISAtIFxyZWYgVElNRVJfQk9USAorLy8hIFxwYXJhbSBiU3RhbGwgc3BlY2lmaWVzIHRoZSByZXNwb25zZSB0byBhIHN0YWxsIHNpZ25hbC4KKy8vISAtIFxjIHRydWUgIDogVGltZXIgc3RvcHMgY291bnRpbmcgaWYgdGhlIHByb2Nlc3NvciBlbnRlcnMgZGVidWcgbW9kZS4KKy8vISAtIFxjIGZhbHNlIDogVGltZXIga2VlcHMgcnVubmluZyBpZiB0aGUgcHJvY2Vzc29yIGVudGVycyBkZWJ1ZyBtb2RlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVGltZXJTdGFsbENvbnRyb2wodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYlN0YWxsKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29udHJvbHMgdGhlIHdhaXQgb24gdHJpZ2dlciBoYW5kbGluZy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY29udHJvbHMgd2hldGhlciBvciBub3QgYSB0aW1lciB3YWl0cyBmb3IgYSB0cmlnZ2VyIGlucHV0IHRvCisvLyEgc3RhcnQgY291bnRpbmcuIFdoZW4gZW5hYmxlZCwgdGhlIHByZXZpb3VzIHRpbWVyIGluIHRoZSB0cmlnZ2VyIGNoYWluIG11c3QKKy8vISBjb3VudCB0byBpdHMgdGltZW91dCBpbiBvcmRlciBmb3IgdGhpcyB0aW1lciB0byBzdGFydCBjb3VudGluZy4gUmVmZXIgdG8KKy8vISB0aGUgcGFydCdzIGRhdGEgc2hlZXQgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRyaWdnZXIgY2hhaW4uCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgVGltZXIgMEEgb3IgV2lkZSBUaW1lciAwQS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyKHMpIHRvIGJlIGFkanVzdGVkOyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEgLSBccmVmIFRJTUVSX0JPVEgKKy8vISBccGFyYW0gYldhaXQgc3BlY2lmaWVzIGlmIHRoZSB0aW1lciBzaG91bGQgd2FpdCBmb3IgYSB0cmlnZ2VyIGlucHV0LgorLy8hIC0gXGMgdHJ1ZSAgOiBXYWl0IGZvciB0cmlnZ2VyLgorLy8hIC0gXGMgZmFsc2UgOiBEbyBub3Qgd2FpdCBmb3IgdHJpZ2dlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFRpbWVyV2FpdE9uVHJpZ2dlckNvbnRyb2wodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBiV2FpdCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCB0aGUgdGltZXIgcHJlc2NhbGUgdmFsdWUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHZhbHVlIG9mIHRoZSB0aW1lciBjbG9jayBwcmVzY2FsZXIuIFRoZQorLy8hIHByZXNjYWxlciBpcyBvbmx5IG9wZXJhdGlvbmFsIHdoZW4gaW4gaGFsZi13aWR0aCBtb2RlIGFuZCBpcyB1c2VkIHRvIGV4dGVuZAorLy8hIHRoZSByYW5nZSBvZiB0aGUgaGFsZi13aWR0aCB0aW1lciBtb2Rlcy4KKy8vIQorLy8hIFdoZW4gaW4gb25lLXNob3Qgb3IgcGVyaW9kaWMgZG93biBjb3VudCBtb2RlcywgXGIgdWkzMlZhbHVlIGRlZmluZXMgdGhlCisvLyEgcHJlc2NhbGVyIGZvciB0aGUgdGltZXIgY291bnRlci4gV2hlbiBhY3RpbmcgYXMgYSB0cnVlIHByZXNjYWxlciwgdGhlCisvLyEgcHJlc2NhbGVyIGNvdW50cyBkb3duIHRvIDAgYmVmb3JlIHRoZSB2YWx1ZSBpbiB0aW1lciByZWdpc3RlcnMgYXJlIGluY3JlbWVudGVkLgorLy8hCisvLyEgSW4gYWxsIG90aGVyIGluZGl2aWR1YWwvc3BsaXQgbW9kZXMsIFxiIHVpMzJWYWx1ZSBpcyBhIGxpbmVhciBleHRlbnNpb24gb2YKKy8vISB0aGUgdXBwZXIgcmFuZ2Ugb2YgdGhlIHRpbWVyIGNvdW50ZXIsIGhvbGRpbmcgYml0cyAyMzoxNiBpbiB0aGUgMTYtYml0IG1vZGVzCisvLyEgb2YgdGhlIDE2LzMyLWJpdCB0aW1lci4KKy8vIQorLy8hIFxub3RlIEJlY2F1c2UgdGhlIHByZXNjYWxlciBjb3VudHMgZG93biB0byAwIHRoZSB0aW1lciBkaXZpc2lvbiByYXRpbyBlcXVhbHMKKy8vISBcYiB1aTMyVmFsdWUgKyAxLiBFLmcuIGEgcHJlc2NhbGUgdmFsdWUgb2YgMTUgZGl2aWRlcyB0aGUgdGltZXIgcmF0ZSBieSAxNi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyKHMpIHRvIGFkanVzdDsgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hIC0gXHJlZiBUSU1FUl9CT1RICisvLyEgXHBhcmFtIHVpMzJWYWx1ZSBpcyB0aGUgdGltZXIgcHJlc2NhbGUgdmFsdWUgd2hpY2ggbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NQorLy8hIChib3RoIGluY2x1ZGVkKS4KKy8vISAtIDAgICA6IFRpbWVyIGRpdmlzaW9uIHJhdGlvID0gMSAoZGlzYWJsZSBwcmVzY2FsaW5nKS4KKy8vISAtIDEgICA6IFRpbWVyIGRpdmlzaW9uIHJhdGlvID0gMi4KKy8vISAtIC4uLgorLy8hIC0gMjU1IDogVGltZXIgZGl2aXNpb24gcmF0aW8gPSAyNTYuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVGltZXJQcmVzY2FsZVNldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyLCB1aW50MzJfdCB1aTMyVmFsdWUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKyAgICBBU1NFUlQodWkzMlZhbHVlIDwgMjU2KTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSB0aW1lciBBIHByZXNjYWxlciBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9BKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQVBSKSA9IHVpMzJWYWx1ZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgdGltZXIgQiBwcmVzY2FsZXIgaWYgcmVxdWVzdGVkLgorICAgIC8vCisgICAgaWYodWkzMlRpbWVyICYgVElNRVJfQikKKyAgICB7CisgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEJQUikgPSB1aTMyVmFsdWU7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIHRpbWVyIHByZXNjYWxlIHZhbHVlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdGltZXIgY2xvY2sgcHJlc2NhbGVyLiBUaGUKKy8vISBwcmVzY2FsZXIgaXMgb25seSBvcGVyYXRpb25hbCB3aGVuIGluIGhhbGYtd2lkdGggbW9kZSBhbmQgaXMgdXNlZCB0byBleHRlbmQKKy8vISB0aGUgcmFuZ2Ugb2YgdGhlIGhhbGYtd2lkdGggdGltZXIgbW9kZXMuCisvLyEKKy8vISBXaGVuIGluIG9uZS1zaG90IG9yIHBlcmlvZGljIGRvd24gY291bnQgbW9kZXMsIFxiIHVpMzJWYWx1ZSBkZWZpbmVzIHRoZQorLy8hIHByZXNjYWxlciBmb3IgdGhlIHRpbWVyIGNvdW50ZXIuIFdoZW4gYWN0aW5nIGFzIGEgdHJ1ZSBwcmVzY2FsZXIsIHRoZQorLy8hIHByZXNjYWxlciBjb3VudHMgZG93biB0byAwIGJlZm9yZSB0aGUgdmFsdWUgaW4gdGltZXIgcmVnaXN0ZXJzIGFyZSBpbmNyZW1lbnRlZC4KKy8vIQorLy8hIEluIGFsbCBvdGhlciBpbmRpdmlkdWFsL3NwbGl0IG1vZGVzLCBcYiB1aTMyVmFsdWUgaXMgYSBsaW5lYXIgZXh0ZW5zaW9uIG9mCisvLyEgdGhlIHVwcGVyIHJhbmdlIG9mIHRoZSB0aW1lciBjb3VudGVyLCBob2xkaW5nIGJpdHMgMjM6MTYgaW4gdGhlIDE2LWJpdCBtb2RlcworLy8hIG9mIHRoZSAxNi8zMi1iaXQgdGltZXIuCisvLyEKKy8vISBcbm90ZSBCZWNhdXNlIHRoZSBwcmVzY2FsZXIgY291bnRzIGRvd24gdG8gMCB0aGUgdGltZXIgZGl2aXNpb24gcmF0aW8gZXF1YWxzCisvLyEgXGIgdWkzMlZhbHVlICsgMS4gRS5nLiBhIHByZXNjYWxlIHZhbHVlIG9mIDE1IGRpdmlkZXMgdGhlIHRpbWVyIHJhdGUgYnkgMTYuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcjsgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgdGltZXIgcHJlc2NhbGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorVGltZXJQcmVzY2FsZUdldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBUSU1FUl9CT1RIKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgcHJlc2NhbGUgdmFsdWUuCisgICAgLy8KKyAgICByZXR1cm4oKHVpMzJUaW1lciA9PSBUSU1FUl9BKSA/IEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEFQUikgOgorICAgICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RCUFIpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHRoZSB0aW1lciBwcmVzY2FsZSBtYXRjaCB2YWx1ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IGNsb2NrIHByZXNjYWxlciBtYXRjaAorLy8hIHZhbHVlLiBXaGVuIGluIGEgaGFsZi13aWR0aCBtb2RlIHRoYXQgdXNlcyB0aGUgY291bnRlciBtYXRjaCBhbmQgdGhlCisvLyEgcHJlc2NhbGVyLCB0aGUgcHJlc2NhbGUgbWF0Y2ggZWZmZWN0aXZlbHkgZXh0ZW5kcyB0aGUgcmFuZ2Ugb2YgdGhlIG1hdGNoLgorLy8hIFRoZSBwcmVzY2FsZXIgcHJvdmlkZXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgd2hlbiBjb3VudGluZyBkb3duIGluCisvLyEgcGVyaW9kaWMgYW5kIG9uZS1zaG90IG1vZGVzOyBpbiBhbGwgb3RoZXIgbW9kZXMsIHRoZSBwcmVzY2FsZXIgcHJvdmlkZXMgdGhlCisvLyEgbW9zdCBzaWduaWZpY2FudCBiaXRzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXIocykgdG8gYWRqdXN0OyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEgLSBccmVmIFRJTUVSX0JPVEgKKy8vISBccGFyYW0gdWkzMlZhbHVlIGlzIHRoZSB0aW1lciBwcmVzY2FsZSBtYXRjaCB2YWx1ZSB3aGljaCBtdXN0IGJlIGJldHdlZW4gMAorLy8hIGFuZCAyNTUgKGJvdGggaW5jbHVkZWQpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1RpbWVyUHJlc2NhbGVNYXRjaFNldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyLCB1aW50MzJfdCB1aTMyVmFsdWUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKyAgICBBU1NFUlQodWkzMlZhbHVlIDwgMjU2KTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSB0aW1lciBBIHByZXNjYWxlIG1hdGNoIGlmIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0EpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RBUE1SKSA9IHVpMzJWYWx1ZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgdGltZXIgQiBwcmVzY2FsZSBtYXRjaCBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9CKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQlBNUikgPSB1aTMyVmFsdWU7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIHRpbWVyIHByZXNjYWxlIG1hdGNoIHZhbHVlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgY2xvY2sgcHJlc2NhbGVyIG1hdGNoIHZhbHVlLgorLy8hIFdoZW4gaW4gYSBoYWxmLXdpZHRoIG1vZGUgdGhhdCB1c2VzIHRoZSBjb3VudGVyIG1hdGNoIGFuZCBwcmVzY2FsZXIsIHRoZQorLy8hIHByZXNjYWxlIG1hdGNoIGVmZmVjdGl2ZWx5IGV4dGVuZHMgdGhlIHJhbmdlIG9mIHRoZSBtYXRjaC4gVGhlIHByZXNjYWxlcgorLy8hIHByb3ZpZGVzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIHdoZW4gY291bnRpbmcgZG93biBpbiBwZXJpb2RpYyBhbmQKKy8vISBvbmUtc2hvdCBtb2RlczsgaW4gYWxsIG90aGVyIG1vZGVzLCB0aGUgcHJlc2NhbGVyIHByb3ZpZGVzIHRoZSBtb3N0CisvLyEgc2lnbmlmaWNhbnQgYml0cy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyOyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSB0aW1lciBwcmVzY2FsZSBtYXRjaC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1RpbWVyUHJlc2NhbGVNYXRjaEdldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHByZXNjYWxlIG1hdGNoIHZhbHVlLgorICAgIC8vCisgICAgcmV0dXJuKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgPyBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RBUE1SKSA6CisgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEJQTVIpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgdGltZXIgbG9hZCB2YWx1ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgdGltZXIgbG9hZCB2YWx1ZTsgaWYgdGhlIHRpbWVyIGlzIHJ1bm5pbmcgdGhlbgorLy8hIHRoZSB2YWx1ZSBpcyBpbW1lZGlhdGVseSBsb2FkZWQgaW50byB0aGUgdGltZXIuCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGZvciBib3RoIGZ1bGwtIGFuZCBoYWxmLXdpZHRoIG1vZGVzIG9mCisvLyEgMTYvMzItYml0IHRpbWVycy4KKy8vIQorLy8hIFxub3RlIE9ubHkgXHJlZiBUSU1FUl9BIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIHRpbWVyIGlzIGNvbmZpZ3VyZWQgZm9yCisvLyEgZnVsbC13aWR0aCBvcGVyYXRpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcihzKSB0byBhZGp1c3Q7IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vISAtIFxyZWYgVElNRVJfQk9USAorLy8hIFxwYXJhbSB1aTMyVmFsdWUgaXMgdGhlIGxvYWQgdmFsdWUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVGltZXJMb2FkU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIHVpbnQzMl90IHVpMzJWYWx1ZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBUSU1FUl9BKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0IpIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gVElNRVJfQk9USCkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHRpbWVyIEEgbG9hZCB2YWx1ZSBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9BKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQUlMUikgPSB1aTMyVmFsdWU7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHRpbWVyIEIgbG9hZCB2YWx1ZSBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9CKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQklMUikgPSB1aTMyVmFsdWU7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSB0aW1lciBsb2FkIHZhbHVlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBjdXJyZW50bHkgcHJvZ3JhbW1lZCBpbnRlcnZhbCBsb2FkIHZhbHVlIGZvciB0aGUKKy8vISBzcGVjaWZpZWQgdGltZXIuCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGZvciBib3RoIGZ1bGwtIGFuZCBoYWxmLXdpZHRoIG1vZGVzIG9mCisvLyEgMTYvMzItYml0IHRpbWVycy4KKy8vIQorLy8hIFxub3RlIE9ubHkgXHJlZiBUSU1FUl9BIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIHRpbWVyIGlzIGNvbmZpZ3VyZWQgZm9yCisvLyEgZnVsbC13aWR0aCBvcGVyYXRpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcjsgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBsb2FkIHZhbHVlIGZvciB0aGUgdGltZXIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1RpbWVyTG9hZEdldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIGxvYWQgdmFsdWUuCisgICAgLy8KKyAgICByZXR1cm4oKHVpMzJUaW1lciA9PSBUSU1FUl9BKSA/IEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEFJTFIpIDoKKyAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQklMUikpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBjdXJyZW50IHRpbWVyIHZhbHVlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHRpbWVyLgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBmb3IgYm90aCBmdWxsLSBhbmQgaGFsZi13aWR0aCBtb2RlcyBvZgorLy8hIDE2LzMyLWJpdCB0aW1lcnMuCisvLyEKKy8vISBcbm90ZSBPbmx5IFxyZWYgVElNRVJfQSBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSB0aW1lciBpcyBjb25maWd1cmVkIGZvcgorLy8hIGZ1bGwtd2lkdGggb3BlcmF0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXI7IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgdGltZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitUaW1lclZhbHVlR2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGltZXIgdmFsdWUuCisgICAgLy8KKyAgICByZXR1cm4oKHVpMzJUaW1lciA9PSBUSU1FUl9BKSA/IEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEFSKSA6CisgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEJSKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIHRpbWVyIG1hdGNoIHZhbHVlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBtYXRjaCB2YWx1ZSBmb3IgYSB0aW1lci4gVGhpcyB2YWx1ZSBpcyB1c2VkCisvLyEgaW4gY2FwdHVyZSBjb3VudCBtb2RlIHRvIGRldGVybWluZSB3aGVuIHRvIGludGVycnVwdCB0aGUgcHJvY2Vzc29yIGFuZCBpbgorLy8hIFBXTSBtb2RlIHRvIGRldGVybWluZSB0aGUgZHV0eSBjeWNsZSBvZiB0aGUgb3V0cHV0IHNpZ25hbC4gTWF0Y2ggaW50ZXJydXB0cworLy8hIGNhbiBhbHNvIGJlIGdlbmVyYXRlZCBpbiBwZXJpb2RpYyBhbmQgb25lLXNob3QgbW9kZXMgd2hlbiB0aGUgdmFsdWUgb2YgdGhlCisvLyEgY291bnRlciBtYXRjaGVzIHRoaXMgcmVnaXN0ZXIuCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGZvciBib3RoIGZ1bGwtIGFuZCBoYWxmLXdpZHRoIG1vZGVzIG9mCisvLyEgMTYvMzItYml0IHRpbWVycy4KKy8vIQorLy8hIFxub3RlIE9ubHkgXHJlZiBUSU1FUl9BIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIHRpbWVyIGlzIGNvbmZpZ3VyZWQgZm9yCisvLyEgZnVsbC13aWR0aCBvcGVyYXRpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcihzKSB0byBhZGp1c3Q7IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vISAtIFxyZWYgVElNRVJfQk9USAorLy8hIFxwYXJhbSB1aTMyVmFsdWUgaXMgdGhlIG1hdGNoIHZhbHVlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1RpbWVyTWF0Y2hTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwgdWludDMyX3QgdWkzMlZhbHVlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBUSU1FUl9CT1RIKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgdGltZXIgQSBtYXRjaCB2YWx1ZSBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9BKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQU1BVENIUikgPSB1aTMyVmFsdWU7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHRpbWVyIEIgbWF0Y2ggdmFsdWUgaWYgcmVxdWVzdGVkLgorICAgIC8vCisgICAgaWYodWkzMlRpbWVyICYgVElNRVJfQikKKyAgICB7CisgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEJNQVRDSFIpID0gdWkzMlZhbHVlOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgdGltZXIgbWF0Y2ggdmFsdWUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIG1hdGNoIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHRpbWVyLgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBmb3IgYm90aCBmdWxsLSBhbmQgaGFsZi13aWR0aCBtb2RlcyBvZgorLy8hIDE2LzMyLWJpdCB0aW1lcnMuCisvLyEKKy8vISBcbm90ZSBPbmx5IFxyZWYgVElNRVJfQSBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSB0aW1lciBpcyBjb25maWd1cmVkIGZvcgorLy8hIGZ1bGwtd2lkdGggb3BlcmF0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXI7IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vISAtIFxyZWYgVElNRVJfQk9USAorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBtYXRjaCB2YWx1ZSBmb3IgdGhlIHRpbWVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitUaW1lck1hdGNoR2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgbWF0Y2ggdmFsdWUuCisgICAgLy8KKyAgICByZXR1cm4oKHVpMzJUaW1lciA9PSBUSU1FUl9BKSA/IEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEFNQVRDSFIpIDoKKyAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQk1BVENIUikpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSB0aW1lciBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhIHRpbWVyIGludGVycnVwdAorLy8hIG9jY3Vycy4gSW4gYWRkaXRpb24sIHRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgZ2xvYmFsIGludGVycnVwdCBpbiB0aGUKKy8vISBpbnRlcnJ1cHQgY29udHJvbGxlcjsgc3BlY2lmaWMgdGltZXIgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgdmlhCisvLyEgXHJlZiBUaW1lckludEVuYWJsZSgpLiBJdCBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbGVhcgorLy8hIHRoZSBpbnRlcnJ1cHQgc291cmNlIHZpYSBccmVmIFRpbWVySW50Q2xlYXIoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyKHMpOyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEgLSBccmVmIFRJTUVSX0JPVEgKKy8vISBccGFyYW0gcGZuSGFuZGxlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB0aW1lcgorLy8hIGludGVycnVwdCBvY2N1cnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBUaW1lckludFJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgdGltZXIgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhIHRpbWVyIGludGVycnVwdAorLy8hIG9jY3Vycy4gVGhpcyBmdW5jdGlvbiBhbHNvIG1hc2tzIG9mZiB0aGUgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQKKy8vISBjb250cm9sbGVyIHNvIHRoYXQgdGhlIGludGVycnVwdCBoYW5kbGVyIGlzIG5vIGxvbmdlciBjYWxsZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcihzKTsgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hIC0gXHJlZiBUSU1FUl9CT1RICisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBUaW1lckludFVucmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lcik7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgaW5kaXZpZHVhbCB0aW1lciBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgaW5kaWNhdGVkIHRpbWVyIGludGVycnVwdCBzb3VyY2VzLiBPbmx5IHRoZQorLy8hIHNvdXJjZXMgdGhhdCBhcmUgZW5hYmxlZCBjYW4gYmUgcmVmbGVjdGVkIHRvIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0OworLy8hIGRpc2FibGVkIHNvdXJjZXMgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyB0aGUgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBjb21iaW5hdGlvbiBvZgorLy8hIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFRJTUVSX0NBUEJfRVZFTlQgICAgOiBDYXB0dXJlIEIgZXZlbnQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9DQVBCX01BVENIICAgIDogQ2FwdHVyZSBCIG1hdGNoIGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfVElNQl9USU1FT1VUICA6IFRpbWVyIEIgdGltZW91dCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX0NBUEFfRVZFTlQgICAgOiBDYXB0dXJlIEEgZXZlbnQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9DQVBBX01BVENIICAgIDogQ2FwdHVyZSBBIG1hdGNoIGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfVElNQV9USU1FT1VUICA6IFRpbWVyIEEgdGltZW91dCBpbnRlcnJ1cHQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVGltZXJJbnRFbmFibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fSU1SKSB8PSB1aTMySW50RmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIGluZGl2aWR1YWwgdGltZXIgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBpbmRpY2F0ZWQgdGltZXIgaW50ZXJydXB0IHNvdXJjZXMuIE9ubHkgdGhlCisvLyEgc291cmNlcyB0aGF0IGFyZSBlbmFibGVkIGNhbiBiZSByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQ7CisvLyEgZGlzYWJsZWQgc291cmNlcyBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZGlzYWJsZWQuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBjb21iaW5hdGlvbiBvZgorLy8hIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFRJTUVSX0NBUEJfRVZFTlQgICAgOiBDYXB0dXJlIEIgZXZlbnQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9DQVBCX01BVENIICAgIDogQ2FwdHVyZSBCIG1hdGNoIGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfVElNQl9USU1FT1VUICA6IFRpbWVyIEIgdGltZW91dCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX0NBUEFfRVZFTlQgICAgOiBDYXB0dXJlIEEgZXZlbnQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9DQVBBX01BVENIICAgIDogQ2FwdHVyZSBBIG1hdGNoIGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfVElNQV9USU1FT1VUICA6IFRpbWVyIEEgdGltZW91dCBpbnRlcnJ1cHQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVGltZXJJbnREaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19JTVIpICY9IH4odWkzMkludEZsYWdzKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZvciB0aGUgdGltZXIgbW9kdWxlLiBFaXRoZXIKKy8vISB0aGUgcmF3IGludGVycnVwdCBzdGF0dXMgb3IgdGhlIHN0YXR1cyBvZiBpbnRlcnJ1cHRzIHRoYXQgYXJlIGFsbG93ZWQgdG8KKy8vISByZWZsZWN0IHRvIHRoZSBwcm9jZXNzb3IgY2FuIGJlIHJldHVybmVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gYk1hc2tlZCBzZWxlY3RzIGVpdGhlciByYXcgb3IgbWFza2VkIGludGVycnVwdCBzdGF0dXM6CisvLyEgLSBcYyB0cnVlICA6IE1hc2tlZCBpbnRlcnJ1cHQuCisvLyEgLSBcYyBmYWxzZSA6IFJhdyBpbnRlcnJ1cHQuCisvLyEKKy8vISBccmV0dXJuIFRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMsIGVudW1lcmF0ZWQgYXMgYSBiaXQgZmllbGQgb2YgdmFsdWVzOgorLy8hIC0gXHJlZiBUSU1FUl9DQVBCX0VWRU5UICAgIDogQ2FwdHVyZSBCIGV2ZW50IGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfQ0FQQl9NQVRDSCAgICA6IENhcHR1cmUgQiBtYXRjaCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX1RJTUJfVElNRU9VVCAgOiBUaW1lciBCIHRpbWVvdXQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9DQVBBX0VWRU5UICAgIDogQ2FwdHVyZSBBIGV2ZW50IGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfQ0FQQV9NQVRDSCAgICA6IENhcHR1cmUgQSBtYXRjaCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX1RJTUFfVElNRU9VVCAgOiBUaW1lciBBIHRpbWVvdXQgaW50ZXJydXB0LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorVGltZXJJbnRTdGF0dXModWludDMyX3QgdWkzMkJhc2UsIGJvb2wgYk1hc2tlZCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIGVpdGhlciB0aGUgaW50ZXJydXB0IHN0YXR1cyBvciB0aGUgcmF3IGludGVycnVwdCBzdGF0dXMgYXMKKyAgICAvLyByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICByZXR1cm4oYk1hc2tlZCA/IEhXUkVHKHVpMzJCYXNlICsgR1BUX09fTUlTKSA6CisgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fUklTKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyB0aW1lciBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoZSBzcGVjaWZpZWQgdGltZXIgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGNsZWFyZWQsIHNvIHRoYXQgdGhleSBubyBsb25nZXIKKy8vISBhc3NlcnQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGtlZXAgdGhlCisvLyEgaW50ZXJydXB0IGZyb20gYmVpbmcgdHJpZ2dlcmVkIGFnYWluIGltbWVkaWF0ZWx5IHVwb24gZXhpdC4KKy8vIQorLy8hIFxub3RlIER1ZSB0byB3cml0ZSBidWZmZXJzIGFuZCBzeW5jaHJvbml6ZXJzIGluIHRoZSBzeXN0ZW0gaXQgbWF5IHRha2Ugc2V2ZXJhbAorLy8hIGNsb2NrIGN5Y2xlcyBmcm9tIGEgcmVnaXN0ZXIgd3JpdGUgY2xlYXJpbmcgYW4gZXZlbnQgaW4gYSBtb2R1bGUgYW5kIHVudGlsIHRoZQorLy8hIGV2ZW50IGlzIGFjdHVhbGx5IGNsZWFyZWQgaW4gdGhlIE5WSUMgb2YgdGhlIHN5c3RlbSBDUFUuIEl0IGlzIHJlY29tbWVuZGVkIHRvCisvLyEgY2xlYXIgdGhlIGV2ZW50IHNvdXJjZSBlYXJseSBpbiB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAoSVNSKSB0byBhbGxvdworLy8hIHRoZSBldmVudCBjbGVhciB0byBwcm9wYWdhdGUgdG8gdGhlIE5WSUMgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IuCisvLyEgQXQgdGhlIHNhbWUgdGltZSwgYW4gZWFybHkgZXZlbnQgY2xlYXIgYWxsb3dzIG5ldyBldmVudHMgb2YgdGhlIHNhbWUgdHlwZSB0byBiZQorLy8hIHBlbmRlZCBpbnN0ZWFkIG9mIGlnbm9yZWQgaWYgdGhlIGV2ZW50IGlzIGNsZWFyZWQgbGF0ZXIgaW4gdGhlIElTUi4KKy8vISBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHByb2dyYW1tZXIgdG8gbWFrZSBzdXJlIHRoYXQgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZAorLy8hIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIHRvIGF2b2lkIGZhbHNlIHJlLXRyaWdnZXJpbmcgb2YgdGhlIGNsZWFyZWQgZXZlbnQuCisvLyEgQSBzaW1wbGUsIGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSBvcHRpbWFsLCB3YXkgb2YgY2xlYXJpbmcgYW4gZXZlbnQgYmVmb3JlCisvLyEgcmV0dXJuaW5nIGZyb20gdGhlIElTUiBpczoKKy8vISAtIyBXcml0ZSB0byBjbGVhciBldmVudCAoaW50ZXJydXB0IHNvdXJjZSkuIChidWZmZXJlZCB3cml0ZSkKKy8vISAtIyBEdW1teSByZWFkIGZyb20gdGhlIGV2ZW50IHNvdXJjZSBtb2R1bGUuIChtYWtpbmcgc3VyZSB0aGUgd3JpdGUgaGFzIHByb3BhZ2F0ZWQpCisvLyEgLSMgV2FpdCB0d28gc3lzdGVtIENQVSBjbG9jayBjeWNsZXMgKHVzZXIgY29kZSBvciB0d28gTk9QcykuIChhbGxvd2luZyBjbGVhcmVkIGV2ZW50IHRvIHByb3BhZ2F0ZSB0aHJvdWdoIGFueSBzeW5jaHJvbml6ZXJzKQorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIGEgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGNsZWFyZWQuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBjb21iaW5hdGlvbiBvZgorLy8hIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFRJTUVSX0NBUEJfRVZFTlQgICAgOiBDYXB0dXJlIEIgZXZlbnQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9DQVBCX01BVENIICAgIDogQ2FwdHVyZSBCIG1hdGNoIGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfVElNQl9USU1FT1VUICA6IFRpbWVyIEIgdGltZW91dCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX0NBUEFfRVZFTlQgICAgOiBDYXB0dXJlIEEgZXZlbnQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9DQVBBX01BVENIICAgIDogQ2FwdHVyZSBBIG1hdGNoIGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfVElNQV9USU1FT1VUICA6IFRpbWVyIEEgdGltZW91dCBpbnRlcnJ1cHQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVGltZXJJbnRDbGVhcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgcmVxdWVzdGVkIGludGVycnVwdCBzb3VyY2VzLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19JQ0xSKSA9IHVpMzJJbnRGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU3luY2hyb25pemVzIHRoZSBjb3VudGVycyBpbiBhIHNldCBvZiB0aW1lcnMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHN5bmNocm9uaXplcyB0aGUgY291bnRlcnMgaW4gYSBzcGVjaWZpZWQgc2V0IG9mIHRpbWVycy4KKy8vISBXaGVuIGEgdGltZXIgaXMgcnVubmluZyBpbiBoYWxmLXdpZHRoIG1vZGUsIGVhY2ggaGFsZiBjYW4gYmUgaW5jbHVkZWQgb3IKKy8vISBleGNsdWRlZCBpbiB0aGUgc3luY2hyb25pemF0aW9uIGV2ZW50LiBXaGVuIGEgdGltZXIgaXMgcnVubmluZyBpbgorLy8hIGZ1bGwtd2lkdGggbW9kZSwgb25seSB0aGUgQSB0aW1lciBjYW4gYmUgc3luY2hyb25pemVkIChzcGVjaWZ5aW5nIHRoZSBCCisvLyEgdGltZXIgaGFzIG5vIGVmZmVjdCkuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLiBUaGlzIHBhcmFtZXRlciBtdXN0CisvLyEgYmUgdGhlIGJhc2UgYWRkcmVzcyBvZiBUaW1lcjAgKGluIG90aGVyIHdvcmRzLCBcYiBHUFQwX0JBU0UpLgorLy8hIFxwYXJhbSB1aTMyVGltZXJzIGlzIHRoZSBzZXQgb2YgdGltZXJzIHRvIHN5bmNocm9uaXplLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFRJTUVSXzBBX1NZTkMKKy8vISAtIFxyZWYgVElNRVJfMEJfU1lOQworLy8hIC0gXHJlZiBUSU1FUl8xQV9TWU5DCisvLyEgLSBccmVmIFRJTUVSXzFCX1NZTkMKKy8vISAtIFxyZWYgVElNRVJfMkFfU1lOQworLy8hIC0gXHJlZiBUSU1FUl8yQl9TWU5DCisvLyEgLSBccmVmIFRJTUVSXzNBX1NZTkMKKy8vISAtIFxyZWYgVElNRVJfM0JfU1lOQworLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1RpbWVyU3luY2hyb25pemUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lcnMpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJCYXNlID09IEdQVDBfQkFTRSk7CisKKyAgICAvLworICAgIC8vIFN5bmNocm9uaXplIHRoZSBzcGVjaWZpZWQgdGltZXJzLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19TWU5DKSA9IHVpMzJUaW1lcnM7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgQU5EJ2luZyBvZiB0aGUgQ0NQIG91dHB1dHMgZnJvbSBUaW1lciBBIGFuZCBUaW1lciBCLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUaW1lckNjcENvbWJpbmVFbmFibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8gU2V0IHRoZSBiaXQKKyAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0FORENDUCkgfD0gR1BUX0FORENDUF9DQ1BfQU5EX0VOOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBBTkQnaW5nIG9mIHRoZSBDQ1Agb3V0cHV0cyBmcm9tIFRpbWVyIEEgYW5kIFRpbWVyIEIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1RpbWVyQ2NwQ29tYmluZURpc2FibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8gQ2xlYXIgdGhlIGJpdAorICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fQU5EQ0NQKSAmPSB+KEdQVF9BTkRDQ1BfQ0NQX0FORF9FTik7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIE1hdGNoIFJlZ2lzdGVyIFVwZGF0ZSBtb2RlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb250cm9scyB3aGVuIHRoZSBNYXRjaCBSZWdpc3RlciB2YWx1ZSBhbmQgUHJlc2NhbGUgUmVnaXN0ZXIgdmFsdWUKKy8vISBhcmUgYXBwbGllZCBhZnRlciB3cml0aW5nIHRoZXNlIHJlZ2lzdGVycyB3aGlsZSBhIHRpbWVyIGlzIGVuYWJsZWQuCisvLyEKKy8vISBcbm90ZSBJZiB0aGUgdGltZXIgaXMgZGlzYWJsZWQgd2hlbiBzZXR0aW5nIHRoZSB1cGRhdGUgbW9kZSB0aGUgTWF0Y2ggUmVnaXN0ZXIKKy8vISBhbmQgUHJlc2NhbGUgUmVnaXN0ZXIgdmFsdWVzIGFyZSBhcHBsaWVkIGltbWVkaWF0ZWx5IHdoZW4gZW5hYmxpbmcgdGhlIHRpbWVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXIocykgdG8gY29uZmlndXJlOyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEgLSBccmVmIFRJTUVSX0JPVEgKKy8vISBccGFyYW0gdWkzMk1vZGUgc2V0cyB0aGUgbW9kZToKKy8vISAtIFxyZWYgVElNRVJfTUFUQ0hVUERBVEVfTkVYVENZQ0xFIDogQXBwbHkgTWF0Y2ggUmVnaXN0ZXIgYW5kIFByZXNjYWxlIFJlZ2lzdGVyIG9uIG5leHQgY2xvY2sKKy8vISAgICAgICAgY3ljbGUgYWZ0ZXIgd3JpdGluZyBhbnkgb2YgdGhlc2UgcmVnaXN0ZXJzLgorLy8hIC0gXHJlZiBUSU1FUl9NQVRDSFVQREFURV9USU1FT1VUICAgOiBBcHBseSBNYXRjaCBSZWdpc3RlciBhbmQgUHJlc2NhbGUgUmVnaXN0ZXIgb24gbmV4dCB0aW1lb3V0CisvLyEgICAgICAgIGFmdGVyIHdyaXRpbmcgYW55IG9mIHRoZXNlIHJlZ2lzdGVycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFRpbWVyTWF0Y2hVcGRhdGVNb2RlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIHVpbnQzMl90IHVpMzJNb2RlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgSW50ZXJ2YWwgTG9hZCBtb2RlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb250cm9scyB3aGVuIHRoZSBUaW1lciBSZWdpc3RlciBhbmQgUHJlc2NhbGUgU25hcC1zaG90IChpZiB1c2VkKQorLy8hIGFyZSB1cGRhdGVkLgorLy8hCisvLyEgVGltZXIgUmVnaXN0ZXIgKFRBUi9UQlIpIGlzIHVwZGF0ZWQgd2hlbiBJbnRlcnZhbCBMb2FkIFJlZ2lzdGVyIChUQUlMUi9UQklMUikgaXMgd3JpdHRlbgorLy8hIGFuZCB0aGUgUHJlc2NhbGUgU25hcC1zaG90IChUQVBTL1RCUFMpIGlzIHVwZGF0ZWQgd2hlbiBQcmVzY2FsZSBSZWdpc3RlciAoVEFQUi9UQlBSKSBpcworLy8hIHdyaXR0ZW4gZGVwZW5kaW5nIG9uIHRoZSBtb2RlIG9mIG9wZXJhdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyKHMpIHRvIGNvbmZpZ3VyZTsgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hIC0gXHJlZiBUSU1FUl9CT1RICisvLyEgXHBhcmFtIHVpMzJNb2RlIHNldHMgdGhlIG1vZGU6CisvLyEgLSBccmVmIFRJTUVSX0lOVEVSVkFMTE9BRF9ORVhUQ1lDTEUgOiBVcGRhdGUgVGltZXIgUmVnaXN0ZXIgYW5kIFByZXNjYWxlIFNuYXAtc2hvdCBvbiBuZXh0IGNsb2NrCisvLyEgICAgICAgIGN5Y2xlIGFmdGVyIHdyaXRpbmcgSW50ZXJ2YWwgTG9hZCBSZWdpc3RlciBvciBQcmVzY2FsZSBSZWdpc3RlciwgcmVzcGVjdGl2ZWx5LgorLy8hIC0gXHJlZiBUSU1FUl9JTlRFUlZBTExPQURfVElNRU9VVCAgIDogVXBkYXRlIFRpbWVyIFJlZ2lzdGVyIGFuZCBQcmVzY2FsZSBTbmFwLXNob3Qgb24gbmV4dCB0aW1lb3V0CisvLyEgICAgICAgIGFmdGVyIHdyaXRpbmcgSW50ZXJ2YWwgTG9hZCBSZWdpc3RlciBvciBQcmVzY2FsZSBSZWdpc3RlciwgcmVzcGVjdGl2ZWx5LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVGltZXJJbnRlcnZhbExvYWRNb2RlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIHVpbnQzMl90IHVpMzJNb2RlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fVGltZXJDb25maWd1cmUKKyAgICAgICAgI3VuZGVmICBUaW1lckNvbmZpZ3VyZQorICAgICAgICAjZGVmaW5lIFRpbWVyQ29uZmlndXJlICAgICAgICAgICAgICAgICAgUk9NX1RpbWVyQ29uZmlndXJlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9UaW1lckxldmVsQ29udHJvbAorICAgICAgICAjdW5kZWYgIFRpbWVyTGV2ZWxDb250cm9sCisgICAgICAgICNkZWZpbmUgVGltZXJMZXZlbENvbnRyb2wgICAgICAgICAgICAgICBST01fVGltZXJMZXZlbENvbnRyb2wKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1RpbWVyU3RhbGxDb250cm9sCisgICAgICAgICN1bmRlZiAgVGltZXJTdGFsbENvbnRyb2wKKyAgICAgICAgI2RlZmluZSBUaW1lclN0YWxsQ29udHJvbCAgICAgICAgICAgICAgIFJPTV9UaW1lclN0YWxsQ29udHJvbAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVGltZXJXYWl0T25UcmlnZ2VyQ29udHJvbAorICAgICAgICAjdW5kZWYgIFRpbWVyV2FpdE9uVHJpZ2dlckNvbnRyb2wKKyAgICAgICAgI2RlZmluZSBUaW1lcldhaXRPblRyaWdnZXJDb250cm9sICAgICAgIFJPTV9UaW1lcldhaXRPblRyaWdnZXJDb250cm9sCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9UaW1lckludFJlZ2lzdGVyCisgICAgICAgICN1bmRlZiAgVGltZXJJbnRSZWdpc3RlcgorICAgICAgICAjZGVmaW5lIFRpbWVySW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgUk9NX1RpbWVySW50UmVnaXN0ZXIKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1RpbWVySW50VW5yZWdpc3RlcgorICAgICAgICAjdW5kZWYgIFRpbWVySW50VW5yZWdpc3RlcgorICAgICAgICAjZGVmaW5lIFRpbWVySW50VW5yZWdpc3RlciAgICAgICAgICAgICAgUk9NX1RpbWVySW50VW5yZWdpc3RlcgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVGltZXJNYXRjaFVwZGF0ZU1vZGUKKyAgICAgICAgI3VuZGVmICBUaW1lck1hdGNoVXBkYXRlTW9kZQorICAgICAgICAjZGVmaW5lIFRpbWVyTWF0Y2hVcGRhdGVNb2RlICAgICAgICAgICAgUk9NX1RpbWVyTWF0Y2hVcGRhdGVNb2RlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9UaW1lckludGVydmFsTG9hZE1vZGUKKyAgICAgICAgI3VuZGVmICBUaW1lckludGVydmFsTG9hZE1vZGUKKyAgICAgICAgI2RlZmluZSBUaW1lckludGVydmFsTG9hZE1vZGUgICAgICAgICAgIFJPTV9UaW1lckludGVydmFsTG9hZE1vZGUKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fR1BUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi90aW1lcl9kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3RpbWVyX2RvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzEyZDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi90aW1lcl9kb2MuaApAQCAtMCwwICsxLDEyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHRpbWVyX2RvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0zMCAxMzowMzo1OSArMDIwMCAoV2VkLCAzMCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk3MQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vISBcYWRkdG9ncm91cCB0aW1lcl9hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY190aW1lciBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSB0aW1lciBBUEkgcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGZvciB1c2luZyB0aGUgZ2VuZXJhbC1wdXJwb3NlIHRpbWVyIG1vZHVsZS4KKy8vIQorLy8hIFRoZSB0aW1lciBtb2R1bGUgY29udGFpbnMgZm91ciB0aW1lciBibG9ja3Mgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgb3B0aW9uczoKKy8vISAtIE9wZXJhdGluZyBtb2RlczoKKy8vISAgIC0gMTYtYml0IHdpdGggOC1iaXQgcHJlc2NhbGVyIG9yIDMyLWJpdCBwcm9ncmFtbWFibGUgb25lLXNob3QgdGltZXIuCisvLyEgICAtIDE2LWJpdCB3aXRoIDgtYml0IHByZXNjYWxlciBvciAzMi1iaXQgcHJvZ3JhbW1hYmxlIHBlcmlvZGljIHRpbWVyLgorLy8hICAgLSBUd28gY2FwdHVyZSBjb21wYXJlIFBXTSBwaW5zIChDQ1ApIGZvciBlYWNoIDMyLWJpdCB0aW1lci4KKy8vISAgIC0gMjQtYml0IGlucHV0LWVkZ2UgY291bnQgb3IgMjQtYml0IHRpbWUtY2FwdHVyZSBtb2Rlcy4KKy8vISAgIC0gMjQtYml0IFBXTSBtb2RlIHdpdGggc29mdHdhcmUtcHJvZ3JhbW1hYmxlIG91dHB1dCBpbnZlcnNpb24gb2YgdGhlIFBXTSBzaWduYWwuCisvLyEgICAtIENvdW50IHVwIG9yIGRvd24uCisvLyEgLSBEYWlzeSBjaGFpbmluZyBvZiB0aW1lciBtb2R1bGVzIGFsbG93cyBhIHNpbmdsZSB0aW1lciB0byBpbml0aWF0ZSBtdWx0aXBsZSB0aW1pbmcgZXZlbnRzLgorLy8hIC0gVGltZXIgc3luY2hyb25pemF0aW9uIGFsbG93cyBzZWxlY3RlZCB0aW1lcnMgdG8gc3RhcnQgY291bnRpbmcgb24gdGhlIHNhbWUgY2xvY2sgY3ljbGUuCisvLyEgLSBVc2VyLWVuYWJsZWQgc3RhbGxpbmcgd2hlbiB0aGUgU3lzdGVtIENQVSBhc3NlcnRzIGEgQ1BVIEhhbHQgZmxhZyBkdXJpbmcgZGVidWcuCisvLyEgLSBBYmlsaXR5IHRvIGRldGVybWluZSB0aGUgZWxhcHNlZCB0aW1lIGJldHdlZW4gdGhlIGFzc2VydGlvbiBvZiB0aGUgdGltZXIgaW50ZXJydXB0IGFuZAorLy8hICAgZW50cnkgaW50byB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KKy8vIQorLy8hIEVhY2ggdGltZXIgYmxvY2sgcHJvdmlkZXMgdHdvIGhhbGYtd2lkdGggdGltZXJzL2NvdW50ZXJzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQKKy8vISB0byBvcGVyYXRlIGluZGVwZW5kZW50bHkgYXMgdGltZXJzIG9yIGV2ZW50IGNvdW50ZXJzIG9yIHRvIG9wZXJhdGUgYXMgYSBjb21iaW5lZAorLy8hIGZ1bGwtd2lkdGggdGltZXIuCisvLyEgVGhlIHRpbWVycyBwcm92aWRlIDE2LWJpdCBoYWxmLXdpZHRoIHRpbWVycyBhbmQgYSAzMi1iaXQgZnVsbC13aWR0aCB0aW1lci4KKy8vISBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQVBJLCB0aGUgdHdvCisvLyEgaGFsZi13aWR0aCB0aW1lcnMgcHJvdmlkZWQgYnkgYSB0aW1lciBibG9jayBhcmUgcmVmZXJyZWQgdG8gYXMgVGltZXJBIGFuZAorLy8hIFRpbWVyQiwgYW5kIHRoZSBmdWxsLXdpZHRoIHRpbWVyIGlzIHJlZmVycmVkIHRvIGFzIFRpbWVyQS4KKy8vIQorLy8hIFdoZW4gaW4gaGFsZi13aWR0aCBtb2RlLCB0aGUgdGltZXIgY2FuIGFsc28gYmUgY29uZmlndXJlZCBmb3IgZXZlbnQgY2FwdHVyZSBvcgorLy8hIGFzIGEgcHVsc2Ugd2lkdGggbW9kdWxhdGlvbiAoUFdNKSBnZW5lcmF0b3IuIFdoZW4gY29uZmlndXJlZCBmb3IgZXZlbnQKKy8vISBjYXB0dXJlLCB0aGUgdGltZXIgYWN0cyBhcyBhIGNvdW50ZXIuIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGNvdW50IGVpdGhlciB0aGUKKy8vISB0aW1lIGJldHdlZW4gZXZlbnRzIG9yIHRoZSBldmVudHMgdGhlbXNlbHZlcy4gVGhlIHR5cGUgb2YgZXZlbnQKKy8vISBiZWluZyBjb3VudGVkIGNhbiBiZSBjb25maWd1cmVkIGFzIGEgcG9zaXRpdmUgZWRnZSwgYSBuZWdhdGl2ZSBlZGdlLCBvciBib3RoCisvLyEgZWRnZXMuIFdoZW4gYSB0aW1lciBpcyBjb25maWd1cmVkIGFzIGEgUFdNIGdlbmVyYXRvciwgdGhlIGlucHV0IHNpZ25hbCB1c2VkIHRvCisvLyEgY2FwdHVyZSBldmVudHMgYmVjb21lcyBhbiBvdXRwdXQgc2lnbmFsLCBhbmQgdGhlIHRpbWVyIGRyaXZlcyBhbgorLy8hIGVkZ2UtYWxpZ25lZCBwdWxzZSBvbnRvIHRoYXQgc2lnbmFsLgorLy8hCisvLyEgQ29udHJvbCBpcyBhbHNvIHByb3ZpZGVkIG92ZXIgaW50ZXJydXB0IHNvdXJjZXMgYW5kIGV2ZW50cy4gSW50ZXJydXB0cyBjYW4gYmUKKy8vISBnZW5lcmF0ZWQgdG8gaW5kaWNhdGUgdGhhdCBhbiBldmVudCBoYXMgYmVlbiBjYXB0dXJlZCwgb3IgdGhhdCBhIGNlcnRhaW4gbnVtYmVyCisvLyEgb2YgZXZlbnRzIGhhdmUgYmVlbiBjYXB0dXJlZC4gSW50ZXJydXB0cyBjYW4gYWxzbyBiZSBnZW5lcmF0ZWQgd2hlbiB0aGUgdGltZXIKKy8vISBoYXMgY291bnRlZCBkb3duIHRvIDAgb3Igd2hlbiB0aGUgdGltZXIgbWF0Y2hlcyBhIGNlcnRhaW4gdmFsdWUuCisvLyEKKy8vISBUaW1lciBjb25maWd1cmF0aW9uIGlzIGhhbmRsZWQgYnkgXHJlZiBUaW1lckNvbmZpZ3VyZSgpLCB3aGljaCBwZXJmb3JtcyB0aGUgaGlnaAorLy8hIGxldmVsIHNldHVwIG9mIHRoZSB0aW1lciBtb2R1bGU7IHRoYXQgaXMsIGl0IGlzIHVzZWQgdG8gc2V0IHVwIGZ1bGwtIG9yCisvLyEgaGFsZi13aWR0aCBtb2RlcywgYW5kIHRvIHNlbGVjdCBiZXR3ZWVuIFBXTSwgY2FwdHVyZSwgYW5kIHRpbWVyIG9wZXJhdGlvbnMuCisvLyEKKy8vISBcc2VjdGlvbiBzZWNfdGltZXJfYXBpIEFQSQorLy8hCisvLyEgVGhlIEFQSSBmdW5jdGlvbnMgY2FuIGJlIGdyb3VwZWQgbGlrZSB0aGlzOgorLy8hCisvLyEgRnVuY3Rpb25zIHRvIHBlcmZvcm0gdGltZXIgY29udHJvbDoKKy8vISAtIFxyZWYgVGltZXJDb25maWd1cmUoKQorLy8hIC0gXHJlZiBUaW1lckVuYWJsZSgpCisvLyEgLSBccmVmIFRpbWVyRGlzYWJsZSgpCisvLyEgLSBccmVmIFRpbWVyTGV2ZWxDb250cm9sKCkKKy8vISAtIFxyZWYgVGltZXJXYWl0T25UcmlnZ2VyQ29udHJvbCgpCisvLyEgLSBccmVmIFRpbWVyRXZlbnRDb250cm9sKCkKKy8vISAtIFxyZWYgVGltZXJTdGFsbENvbnRyb2woKQorLy8hIC0gXHJlZiBUaW1lckludGVydmFsTG9hZE1vZGUoKQorLy8hIC0gXHJlZiBUaW1lck1hdGNoVXBkYXRlTW9kZSgpCisvLyEgLSBccmVmIFRpbWVyQ2NwQ29tYmluZURpc2FibGUoKQorLy8hIC0gXHJlZiBUaW1lckNjcENvbWJpbmVFbmFibGUoKQorLy8hCisvLyEgRnVuY3Rpb25zIHRvIG1hbmFnZSB0aW1lciBjb250ZW50OgorLy8hIC0gXHJlZiBUaW1lckxvYWRTZXQoKQorLy8hIC0gXHJlZiBUaW1lckxvYWRHZXQoKQorLy8hIC0gXHJlZiBUaW1lclByZXNjYWxlU2V0KCkKKy8vISAtIFxyZWYgVGltZXJQcmVzY2FsZUdldCgpCisvLyEgLSBccmVmIFRpbWVyTWF0Y2hTZXQoKQorLy8hIC0gXHJlZiBUaW1lck1hdGNoR2V0KCkKKy8vISAtIFxyZWYgVGltZXJQcmVzY2FsZU1hdGNoU2V0KCkKKy8vISAtIFxyZWYgVGltZXJQcmVzY2FsZU1hdGNoR2V0KCkKKy8vISAtIFxyZWYgVGltZXJWYWx1ZUdldCgpCisvLyEgLSBccmVmIFRpbWVyU3luY2hyb25pemUoKQorLy8hCisvLyEgRnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSB0aW1lciBpbnRlcnJ1cHQ6CisvLyEgLSBccmVmIFRpbWVySW50UmVnaXN0ZXIoKQorLy8hIC0gXHJlZiBUaW1lckludFVucmVnaXN0ZXIoKQorLy8hCisvLyEgVGhlIGluZGl2aWR1YWwgaW50ZXJydXB0IHNvdXJjZXMgd2l0aGluIHRoZSB0aW1lciBtb2R1bGUgYXJlIG1hbmFnZWQgd2l0aDoKKy8vISAtIFxyZWYgVGltZXJJbnRFbmFibGUoKQorLy8hIC0gXHJlZiBUaW1lckludERpc2FibGUoKQorLy8hIC0gXHJlZiBUaW1lckludFN0YXR1cygpCisvLyEgLSBccmVmIFRpbWVySW50Q2xlYXIoKQorLy8hCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3RybmcuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3RybmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2M1YmVkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdHJuZy5jCkBAIC0wLDAgKzEsMTI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgdHJuZy5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wMi0xMCAyMjozMjoyOCArMDEwMCAoVHVlLCAxMCBGZWIgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0MjY0NQorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIFRSTkcgbW9kdWxlCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL3RybmcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIFRSTkdDb25maWd1cmUKKyAgICAjZGVmaW5lIFRSTkdDb25maWd1cmUgICAgICAgICAgICAgICAgICAgTk9ST01fVFJOR0NvbmZpZ3VyZQorICAgICN1bmRlZiAgVFJOR051bWJlckdldAorICAgICNkZWZpbmUgVFJOR051bWJlckdldCAgICAgICAgICAgICAgICAgICBOT1JPTV9UUk5HTnVtYmVyR2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb25maWd1cmUgdGhlIHRydWUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitUUk5HQ29uZmlndXJlKHVpbnQzMl90IHVpMzJNaW5TYW1wbGVzUGVyQ3ljbGUsCisgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJNYXhTYW1wbGVzUGVyQ3ljbGUsCisgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDbG9ja3NQZXJTYW1wbGUpCit7CisgICAgdWludDMyX3QgdWkzMlZhbDsKKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHRoZSBUUk5HIGlzIGRpc2FibGVkLgorICAgIC8vCisgICAgdWkzMlZhbCA9IEhXUkVHKFRSTkdfQkFTRSArIFRSTkdfT19DVEwpICYgflRSTkdfQ1RMX1RSTkdfRU47CisgICAgSFdSRUcoVFJOR19CQVNFICsgVFJOR19PX0NUTCkgPSB1aTMyVmFsOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIHN0YXJ0dXAgbnVtYmVyIG9mIHNhbXBsZXMuCisgICAgLy8KKyAgICB1aTMyVmFsICY9IH5UUk5HX0NUTF9TVEFSVFVQX0NZQ0xFU19NOworICAgIHVpMzJWYWwgfD0gKCgoIHVpMzJNYXhTYW1wbGVzUGVyQ3ljbGUgPj4gOCApIDw8IFRSTkdfQ1RMX1NUQVJUVVBfQ1lDTEVTX1MgKSAmIFRSTkdfQ1RMX1NUQVJUVVBfQ1lDTEVTX00gKTsKKyAgICBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fQ1RMKSA9IHVpMzJWYWw7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2Ygc2FtcGxlcyBwciBnZW5lcmF0ZWQgbnVtYmVyCisgICAgLy8gYW5kIHRoZSBudW1iZXIgb2YgY2xvY2tzIHBlciBzYW1wbGUuCisgICAgLy8KKyAgICBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fQ0ZHMCkgPSAoCisgICAgICAgICgoKCB1aTMyTWF4U2FtcGxlc1BlckN5Y2xlID4+IDggKSA8PCBUUk5HX0NGRzBfTUFYX1JFRklMTF9DWUNMRVNfUyApICYgVFJOR19DRkcwX01BWF9SRUZJTExfQ1lDTEVTX00gKSB8CisgICAgICAgICgoKCB1aTMyQ2xvY2tzUGVyU2FtcGxlICAgICAgICAgKSA8PCBUUk5HX0NGRzBfU01QTF9ESVZfUyAgICAgICAgICApICYgVFJOR19DRkcwX1NNUExfRElWX00gICAgICAgICAgKSB8CisgICAgICAgICgoKCB1aTMyTWluU2FtcGxlc1BlckN5Y2xlID4+IDYgKSA8PCBUUk5HX0NGRzBfTUlOX1JFRklMTF9DWUNMRVNfUyApICYgVFJOR19DRkcwX01JTl9SRUZJTExfQ1lDTEVTX00gKSAgICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IGEgcmFuZG9tIG51bWJlciBmcm9tIHRoZSBnZW5lcmF0b3IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorVFJOR051bWJlckdldCh1aW50MzJfdCB1aTMyV29yZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyUmFuZG9tTnVtYmVyOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyV29yZCA9PSBUUk5HX0hJX1dPUkQpIHx8CisgICAgICAgICAgICh1aTMyV29yZCA9PSBUUk5HX0xPV19XT1JEKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgcmlnaHQgcmVxdWVzdGVkIHBhcnQgb2YgdGhlIGdlbmVyYXRlZCBudW1iZXIuCisgICAgLy8KKyAgICBpZih1aTMyV29yZCA9PSBUUk5HX0hJX1dPUkQpCisgICAgeworICAgICAgICB1aTMyUmFuZG9tTnVtYmVyID0gSFdSRUcoVFJOR19CQVNFICsgVFJOR19PX09VVDEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aTMyUmFuZG9tTnVtYmVyID0gSFdSRUcoVFJOR19CQVNFICsgVFJOR19PX09VVDApOworICAgIH0KKworICAgIC8vCisgICAgLy8gSW5pdGlhdGUgZ2VuZXJhdGlvbiBvZiBuZXcgbnVtYmVyLgorICAgIC8vCisgICAgSFdSRUcoVFJOR19CQVNFICsgVFJOR19PX0lSUUZMQUdDTFIpID0gMHgxOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHJhbmRvbSBudW1iZXIuCisgICAgLy8KKyAgICByZXR1cm4gdWkzMlJhbmRvbU51bWJlcjsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3RybmcuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3RybmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjllMDc5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdHJuZy5oCkBAIC0wLDAgKzEsNDc0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgdHJuZy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMS0xNiAxOTo0MTo0NyArMDEwMCAoTW9uLCAxNiBOb3YgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTA5NAorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSB0cnVlIHJhbmRvbSBudW1iZXIgZ2VuLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBwZXJpcGhlcmFsX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCB0cm5nX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fVFJOR19IX18KKyNkZWZpbmUgX19UUk5HX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X3RybmcuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NwdS5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBUUk5HQ29uZmlndXJlICAgICAgICAgICAgICAgICAgIE5PUk9NX1RSTkdDb25maWd1cmUKKyAgICAjZGVmaW5lIFRSTkdOdW1iZXJHZXQgICAgICAgICAgICAgICAgICAgTk9ST01fVFJOR051bWJlckdldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVFJOR19OVU1CRVJfUkVBRFkgICAgICAgMHgwMDAwMDAwMSAgLy8KKyNkZWZpbmUgVFJOR19GUk9fU0hVVERPV04gICAgICAgMHgwMDAwMDAwMiAgLy8KKyNkZWZpbmUgVFJOR19ORUVEX0NMT0NLICAgICAgICAgMHg4MDAwMDAwMCAgLy8KKworI2RlZmluZSBUUk5HX0hJX1dPUkQgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFRSTkdfTE9XX1dPUkQgICAgICAgICAgIDB4MDAwMDAwMDIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbiBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSB0cnVlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2V0IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBzYW1wbGVzIHJlcXVpcmVkCisvLyEgaW4gZWFjaCBnZW5lcmF0aW9uIG9mIGEgbmV3IHJhbmRvbSBudW1iZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMk1pblNhbXBsZXNQZXJDeWNsZSBpcyB0aGUgbWluaW11bSBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgZWFjaAorLy8hIGdlbmVyYXRlZCByYW5kb20gbnVtYmVyLiBDb25zdHJhaW50czoKKy8vISAtIFZhbHVlIG11c3QgYmUgYmlnZ2VyIHRoYW4gb3IgZXF1YWwgdG8gMl42IGFuZCBsZXNzIHRoYW4gMl4xNC4KKy8vISAtIFRoZSA2IExTQnMgb2YgdGhlIGFyZ3VtZW50IGFyZSB0cnVuY2F0ZWQuCisvLyEgLSBJZiB0aGUgdmFsdWUgaXMgemVybywgdGhlIG51bWJlciBvZiBzYW1wbGVzIGlzIGZpeGVkIHRvIHRoZSB2YWx1ZSBkZXRlcm1pbmVkCisvLyEgICBieSB1aTMyTWF4U2FtcGxlc1BlckN5Y2xlLiBUbyBlbnN1cmUgc2FtZSBlbnRyb3B5IGluIGFsbCBnZW5lcmF0ZWQgcmFuZG9tCisvLyEgICBudW1iZXJzIHRoZSB2YWx1ZSAwIHNob3VsZCBiZSB1c2VkLgorLy8hIFxwYXJhbSB1aTMyTWF4U2FtcGxlc1BlckN5Y2xlIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzYW1wbGVzIHBlciBlYWNoCisvLyEgZ2VuZXJhdGVkIHJhbmRvbSBudW1iZXIuIENvbnN0cmFpbnRzOgorLy8hIC0gVmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDJeOCBhbmQgMl4yNCAoYm90aCBpbmNsdWRlZCkuCisvLyEgLSBUaGUgOCBMU0JzIG9mIHRoZSBhcmd1bWVudCBhcmUgdHJ1bmNhdGVkLgorLy8hIC0gVmFsdWUgMCBhbmQgMl4yNCBib3RoIGdpdmUgdGhlIGhpZ2hlc3QgcG9zc2libGUgdmFsdWUuCisvLyEgXHBhcmFtIHVpMzJDbG9ja3NQZXJTYW1wbGUgaXMgdGhlIG51bWJlciBvZiBjbG9jayBjeWNsZXMgZm9yIGVhY2ggdGltZQorLy8hIGEgbmV3IHNhbXBsZSBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgRlJPcy4KKy8vISAtIDAgIDogRXZlcnkgc2FtcGxlLgorLy8hIC0gMSAgOiBFdmVyeSBzZWNvbmQgc2FtcGxlLgorLy8hIC0gLi4uCisvLyEgLSAxNSA6IEV2ZXJ5IDE2LiBzYW1wbGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBUUk5HQ29uZmlndXJlKHVpbnQzMl90IHVpMzJNaW5TYW1wbGVzUGVyQ3ljbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJNYXhTYW1wbGVzUGVyQ3ljbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDbG9ja3NQZXJTYW1wbGUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgdGhlIFRSTkcuCisvLyEKKy8vISBFbmFibGUgdGhlIFRSTkcgdG8gc3RhcnQgcHJlcGFyaW5nIGEgcmFuZG9tIG51bWJlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUUk5HRW5hYmxlKHZvaWQpCit7CisgICAgLy8gRW5hYmxlIHRoZSBUUk5HLgorICAgIEhXUkVHQklUVyhUUk5HX0JBU0UgKyBUUk5HX09fQ1RMLCBUUk5HX0NUTF9UUk5HX0VOX0JJVE4pID0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSB0aGUgVFJORyBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVFJOR0Rpc2FibGUodm9pZCkKK3sKKyAgICAvLyBFbmFibGUgdGhlIFRSTkcKKyAgICBIV1JFR0JJVFcoVFJOR19CQVNFICsgVFJOR19PX0NUTCwgVFJOR19DVExfVFJOR19FTl9CSVROKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBhIHJhbmRvbSBudW1iZXIgZnJvbSB0aGUgZ2VuZXJhdG9yLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IGVpdGhlciB0aGUgaGlnaCBvciBsb3cgcGFydCBvZiB0aGUgNjQgYml0CisvLyEgZ2VuZXJhdGVkIG51bWJlci4KKy8vIQorLy8hIFxub3RlIERhdGEgZnJvbSB0aGlzIHJlZ2lzdGVyIGlzIG9ubHkgdmFsaWQgaWYgdGhlIFRSTkcgaGFzIHByb2R1Y2VkIGEKKy8vISBudW1iZXIuIFVzZSBccmVmIFRSTkdTdGF0dXNHZXQoKSB0byBwb2xsIHRoZSBmb3Igc3RhdHVzLiBBZnRlciBjYWxsaW5nIHRoaXMKKy8vISBmdW5jdGlvbiBhIG5ldyByYW5kb20gbnVtYmVyIHdpbGwgYmUgZ2VuZXJhdGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJXb3JkIGRldGVybWluZXMgaWYgd2hldGhlciB0byByZXR1cm4gdGhlIGhpZ2ggb3IgbG93IDMyIGJpdHMuCisvLyEgLSBccmVmIFRSTkdfSElfV09SRAorLy8hIC0gXHJlZiBUUk5HX0xPV19XT1JECisvLyEKKy8vISBccmV0dXJuIFJldHVybiBlaXRoZXIgdGhlIGhpZ2ggb3IgbG93IHBhcnQgb2YgdGhlIDY0IGJpdCBnZW5lcmF0ZWQgcmFuZG9tCisvLyEgbnVtYmVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBUUk5HTnVtYmVyR2V0KHVpbnQzMl90IHVpMzJXb3JkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBzdGF0dXMgb2YgdGhlIFRSTkcuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBUUk5HLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgVFJORyBtb2R1bGUuCisvLyEgVGhlIHJldHVybmVkIHN0YXR1cyBpcyBhIGJpdHdpc2UgT1InZWQgY29tYmluYXRpb24gb2Y6CisvLyEgLSBccmVmIFRSTkdfTlVNQkVSX1JFQURZCisvLyEgLSBccmVmIFRSTkdfRlJPX1NIVVRET1dOCisvLyEgLSBccmVmIFRSTkdfTkVFRF9DTE9DSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorVFJOR1N0YXR1c0dldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBzdGF0dXMuCisgICAgLy8KKyAgICByZXR1cm4gKEhXUkVHKFRSTkdfQkFTRSArIFRSTkdfT19JUlFGTEFHU1RBVCkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXNldCB0aGUgVFJORy4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJlc2V0IHRoZSBUUk5HIG1vZHVsZS4gUmVzZXQgd2lsbCBiZSBsb3cgZm9yCisvLyEgYXBwcm94aW1hdGVseSA1IGNsb2NrIGN5Y2xlcy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUUk5HUmVzZXQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJlc2V0IHRoZSBUUk5HLgorICAgIC8vCisgICAgSFdSRUcoVFJOR19CQVNFICsgVFJOR19PX1NXUkVTRVQpID0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBpbmRpdmlkdWFsIFRSTkcgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGluZGljYXRlZCBUUk5HIGludGVycnVwdCBzb3VyY2VzLiBPbmx5IHRoZQorLy8hIHNvdXJjZXMgdGhhdCBhcmUgZW5hYmxlZCBjYW4gYmUgcmVmbGVjdGVkIHRvIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0OworLy8hIGRpc2FibGVkIHNvdXJjZXMgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgdGhlIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFRSTkdfTlVNQkVSX1JFQURZCisvLyEgLSBccmVmIFRSTkdfRlJPX1NIVVRET1dOCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVFJOR0ludEVuYWJsZSh1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMySW50RmxhZ3MgJiBUUk5HX05VTUJFUl9SRUFEWSkgfHwKKyAgICAgICAgICAgKHVpMzJJbnRGbGFncyAmIFRSTkdfRlJPX1NIVVRET1dOKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fSVJRRkxBR01BU0spIHw9IHVpMzJJbnRGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgaW5kaXZpZHVhbCBUUk5HIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgaW5kaWNhdGVkIFRSTkcgaW50ZXJydXB0IHNvdXJjZXMuIE9ubHkgdGhlCisvLyEgc291cmNlcyB0aGF0IGFyZSBlbmFibGVkIGNhbiBiZSByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQ7CisvLyEgZGlzYWJsZWQgc291cmNlcyBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyB0aGUgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGRpc2FibGVkLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFRSTkdfTlVNQkVSX1JFQURZCisvLyEgLSBccmVmIFRSTkdfRlJPX1NIVVRET1dOCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVFJOR0ludERpc2FibGUodWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkludEZsYWdzICYgVFJOR19OVU1CRVJfUkVBRFkpIHx8CisgICAgICAgICAgICh1aTMySW50RmxhZ3MgJiBUUk5HX0ZST19TSFVURE9XTikpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKFRSTkdfQkFTRSArIFRSTkdfT19JUlFGTEFHTUFTSykgJj0gfnVpMzJJbnRGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzIG9mIHRoZSBUUk5HIG1vZHVsZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW50ZXJydXB0IHN0YXR1cyBmb3IgdGhlIHNwZWNpZmllZCBUUk5HLiBFaXRoZXIKKy8vISB0aGUgcmF3IGludGVycnVwdCBzdGF0dXMgb3IgdGhlIHN0YXR1cyBvZiBpbnRlcnJ1cHRzIHRoYXQgYXJlIGFsbG93ZWQgdG8KKy8vISByZWZsZWN0IHRvIHRoZSBwcm9jZXNzb3IgY2FuIGJlIHJldHVybmVkLgorLy8hCisvLyEgXHBhcmFtIGJNYXNrZWQgc2VsZWN0cyBlaXRoZXIgcmF3IG9yIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hIC0gXGMgdHJ1ZSAgOiBNYXNrZWQgaW50ZXJydXB0LgorLy8hIC0gXGMgZmFsc2UgOiBSYXcgaW50ZXJydXB0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMsIGVudW1lcmF0ZWQgYXM6CisvLyEgLSBccmVmIFRSTkdfTlVNQkVSX1JFQURZCisvLyEgLSBccmVmIFRSTkdfRlJPX1NIVVRET1dOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitUUk5HSW50U3RhdHVzKGJvb2wgYk1hc2tlZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyTWFzazsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIGVpdGhlciB0aGUgaW50ZXJydXB0IHN0YXR1cyBvciB0aGUgcmF3IGludGVycnVwdCBzdGF0dXMgYXMKKyAgICAvLyByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZihiTWFza2VkKQorICAgIHsKKyAgICAgICAgdWkzMk1hc2sgPSBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fSVJRRkxBR01BU0spOworICAgICAgICByZXR1cm4odWkzMk1hc2sgJiBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fSVJRRkxBR1NUQVQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuKEhXUkVHKFRSTkdfQkFTRSArIFRSTkdfT19JUlFGTEFHU1RBVCkgJiAweDAwMDAwMDAzKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyBUUk5HIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhlIHNwZWNpZmllZCBUUk5HIGludGVycnVwdCBzb3VyY2VzIGFyZSBjbGVhcmVkLCBzbyB0aGF0IHRoZXkgbm8gbG9uZ2VyCisvLyEgYXNzZXJ0LiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBrZWVwIHRoZQorLy8hIGludGVycnVwdCBmcm9tIGJlaW5nIHJlY29nbml6ZWQgYWdhaW4gaW1tZWRpYXRlbHkgdXBvbiBleGl0LgorLy8hCisvLyEgXG5vdGUgRHVlIHRvIHdyaXRlIGJ1ZmZlcnMgYW5kIHN5bmNocm9uaXplcnMgaW4gdGhlIHN5c3RlbSBpdCBtYXkgdGFrZSBzZXZlcmFsCisvLyEgY2xvY2sgY3ljbGVzIGZyb20gYSByZWdpc3RlciB3cml0ZSBjbGVhcmluZyBhbiBldmVudCBpbiBhIG1vZHVsZSBhbmQgdW50aWwgdGhlCisvLyEgZXZlbnQgaXMgYWN0dWFsbHkgY2xlYXJlZCBpbiB0aGUgTlZJQyBvZiB0aGUgc3lzdGVtIENQVS4gSXQgaXMgcmVjb21tZW5kZWQgdG8KKy8vISBjbGVhciB0aGUgZXZlbnQgc291cmNlIGVhcmx5IGluIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpIHRvIGFsbG93CisvLyEgdGhlIGV2ZW50IGNsZWFyIHRvIHByb3BhZ2F0ZSB0byB0aGUgTlZJQyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUi4KKy8vISBBdCB0aGUgc2FtZSB0aW1lLCBhbiBlYXJseSBldmVudCBjbGVhciBhbGxvd3MgbmV3IGV2ZW50cyBvZiB0aGUgc2FtZSB0eXBlIHRvIGJlCisvLyEgcGVuZGVkIGluc3RlYWQgb2YgaWdub3JlZCBpZiB0aGUgZXZlbnQgaXMgY2xlYXJlZCBsYXRlciBpbiB0aGUgSVNSLgorLy8hIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcHJvZ3JhbW1lciB0byBtYWtlIHN1cmUgdGhhdCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkCisvLyEgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IgdG8gYXZvaWQgZmFsc2UgcmUtdHJpZ2dlcmluZyBvZiB0aGUgY2xlYXJlZCBldmVudC4KKy8vISBBIHNpbXBsZSwgYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IG9wdGltYWwsIHdheSBvZiBjbGVhcmluZyBhbiBldmVudCBiZWZvcmUKKy8vISByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIGlzOgorLy8hIC0jIFdyaXRlIHRvIGNsZWFyIGV2ZW50IChpbnRlcnJ1cHQgc291cmNlKS4gKGJ1ZmZlcmVkIHdyaXRlKQorLy8hIC0jIER1bW15IHJlYWQgZnJvbSB0aGUgZXZlbnQgc291cmNlIG1vZHVsZS4gKG1ha2luZyBzdXJlIHRoZSB3cml0ZSBoYXMgcHJvcGFnYXRlZCkKKy8vISAtIyBXYWl0IHR3byBzeXN0ZW0gQ1BVIGNsb2NrIGN5Y2xlcyAodXNlciBjb2RlIG9yIHR3byBOT1BzKS4gKGFsbG93aW5nIGNsZWFyZWQgZXZlbnQgdG8gcHJvcGFnYXRlIHRocm91Z2ggYW55IHN5bmNocm9uaXplcnMpCisvLyEKKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIGEgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGNsZWFyZWQuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgVFJOR19OVU1CRVJfUkVBRFkKKy8vISAtIFxyZWYgVFJOR19GUk9fU0hVVERPV04KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUUk5HSW50Q2xlYXIodWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkludEZsYWdzICYgVFJOR19OVU1CRVJfUkVBRFkpIHx8CisgICAgICAgICAgICh1aTMySW50RmxhZ3MgJiBUUk5HX0ZST19TSFVURE9XTikpOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgcmVxdWVzdGVkIGludGVycnVwdCBzb3VyY2VzLgorICAgIC8vCisgICAgSFdSRUcoVFJOR19CQVNFICsgVFJOR19PX0lSUUZMQUdDTFIpID0gdWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGEgVFJORyBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFjdHVhbCByZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFRoaXMKKy8vISBmdW5jdGlvbiBlbmFibGVzIHRoZSBnbG9iYWwgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcjsgc3BlY2lmaWMKKy8vISBVQVJUIGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIHZpYSBccmVmIFRSTkdJbnRFbmFibGUoKS4gSXQgaXMgdGhlIGludGVycnVwdAorLy8hIGhhbmRsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZS4KKy8vIQorLy8hIFxwYXJhbSBwZm5IYW5kbGVyIGlzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlCisvLyEgVUFSVCBpbnRlcnJ1cHQgb2NjdXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1RSTkdJbnRSZWdpc3Rlcih2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpCit7CisgICAgLy8KKyAgICAvLyBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRSZWdpc3RlcihJTlRfVFJOR19JUlEsIHBmbkhhbmRsZXIpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIFRSTkcgaW50ZXJydXB0LgorICAgIC8vCisgICAgSW50RW5hYmxlKElOVF9UUk5HX0lSUSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciBhIFRSTkcgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhY3R1YWwgdW5yZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIEl0CisvLyEgY2xlYXJzIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGEgQ3J5cHRvIGludGVycnVwdCBvY2N1cnMuIFRoaXMKKy8vISBmdW5jdGlvbiBhbHNvIG1hc2tzIG9mZiB0aGUgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBzbyB0aGF0CisvLyEgdGhlIGludGVycnVwdCBoYW5kbGVyIG5vIGxvbmdlciBpcyBjYWxsZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVFJOR0ludFVucmVnaXN0ZXIodm9pZCkKK3sKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIGludGVycnVwdC4KKyAgICAvLworICAgIEludERpc2FibGUoSU5UX1RSTkdfSVJRKTsKKworICAgIC8vCisgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRVbnJlZ2lzdGVyKElOVF9UUk5HX0lSUSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX1RSTkdDb25maWd1cmUKKyAgICAgICAgI3VuZGVmICBUUk5HQ29uZmlndXJlCisgICAgICAgICNkZWZpbmUgVFJOR0NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICBST01fVFJOR0NvbmZpZ3VyZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVFJOR051bWJlckdldAorICAgICAgICAjdW5kZWYgIFRSTkdOdW1iZXJHZXQKKyAgICAgICAgI2RlZmluZSBUUk5HTnVtYmVyR2V0ICAgICAgICAgICAgICAgICAgIFJPTV9UUk5HTnVtYmVyR2V0CisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgLy8gX19UUk5HX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi91YXJ0LmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViNjJiNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3VhcnQuYwpAQCAtMCwwICsxLDM3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHVhcnQuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMTEtMTYgMTk6NDE6NDcgKzAxMDAgKE1vbiwgMTYgTm92IDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDUwOTQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBVQVJULgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi91YXJ0Lmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBVQVJURklGT0xldmVsR2V0CisgICAgI2RlZmluZSBVQVJURklGT0xldmVsR2V0ICAgICAgICAgICAgICAgIE5PUk9NX1VBUlRGSUZPTGV2ZWxHZXQKKyAgICAjdW5kZWYgIFVBUlRDb25maWdTZXRFeHBDbGsKKyAgICAjZGVmaW5lIFVBUlRDb25maWdTZXRFeHBDbGsgICAgICAgICAgICAgTk9ST01fVUFSVENvbmZpZ1NldEV4cENsaworICAgICN1bmRlZiAgVUFSVENvbmZpZ0dldEV4cENsaworICAgICNkZWZpbmUgVUFSVENvbmZpZ0dldEV4cENsayAgICAgICAgICAgICBOT1JPTV9VQVJUQ29uZmlnR2V0RXhwQ2xrCisgICAgI3VuZGVmICBVQVJURGlzYWJsZQorICAgICNkZWZpbmUgVUFSVERpc2FibGUgICAgICAgICAgICAgICAgICAgICBOT1JPTV9VQVJURGlzYWJsZQorICAgICN1bmRlZiAgVUFSVENoYXJHZXROb25CbG9ja2luZworICAgICNkZWZpbmUgVUFSVENoYXJHZXROb25CbG9ja2luZyAgICAgICAgICBOT1JPTV9VQVJUQ2hhckdldE5vbkJsb2NraW5nCisgICAgI3VuZGVmICBVQVJUQ2hhckdldAorICAgICNkZWZpbmUgVUFSVENoYXJHZXQgICAgICAgICAgICAgICAgICAgICBOT1JPTV9VQVJUQ2hhckdldAorICAgICN1bmRlZiAgVUFSVENoYXJQdXROb25CbG9ja2luZworICAgICNkZWZpbmUgVUFSVENoYXJQdXROb25CbG9ja2luZyAgICAgICAgICBOT1JPTV9VQVJUQ2hhclB1dE5vbkJsb2NraW5nCisgICAgI3VuZGVmICBVQVJUQ2hhclB1dAorICAgICNkZWZpbmUgVUFSVENoYXJQdXQgICAgICAgICAgICAgICAgICAgICBOT1JPTV9VQVJUQ2hhclB1dAorICAgICN1bmRlZiAgVUFSVEludFJlZ2lzdGVyCisgICAgI2RlZmluZSBVQVJUSW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgIE5PUk9NX1VBUlRJbnRSZWdpc3RlcgorICAgICN1bmRlZiAgVUFSVEludFVucmVnaXN0ZXIKKyAgICAjZGVmaW5lIFVBUlRJbnRVbnJlZ2lzdGVyICAgICAgICAgICAgICAgTk9ST01fVUFSVEludFVucmVnaXN0ZXIKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldHMgdGhlIEZJRk8gbGV2ZWwgYXQgd2hpY2ggaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVUFSVEZJRk9MZXZlbEdldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgKnB1aTMyVHhMZXZlbCwKKyAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyUnhMZXZlbCkKK3sKKyAgICB1aW50MzJfdCB1aTMyVGVtcDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFJlYWQgdGhlIEZJRk8gbGV2ZWwgcmVnaXN0ZXIuCisgICAgLy8KKyAgICB1aTMyVGVtcCA9IEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0lGTFMpOworCisgICAgLy8KKyAgICAvLyBFeHRyYWN0IHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBGSUZPIGxldmVscy4KKyAgICAvLworICAgICpwdWkzMlR4TGV2ZWwgPSB1aTMyVGVtcCAmIFVBUlRfSUZMU19UWFNFTF9NOworICAgICpwdWkzMlJ4TGV2ZWwgPSB1aTMyVGVtcCAmIFVBUlRfSUZMU19SWFNFTF9NOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFNldHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBVQVJUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVUFSVENvbmZpZ1NldEV4cENsayh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlVBUlRDbGssCisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJCYXVkLCB1aW50MzJfdCB1aTMyQ29uZmlnKQoreworICAgIHVpbnQzMl90IHVpMzJEaXY7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyQmF1ZCAhPSAwKTsKKworICAgIC8vCisgICAgLy8gU3RvcCB0aGUgVUFSVC4KKyAgICAvLworICAgIFVBUlREaXNhYmxlKHVpMzJCYXNlKTsKKworICAgIC8vCisgICAgLy8gQ29tcHV0ZSB0aGUgZnJhY3Rpb25hbCBiYXVkIHJhdGUgZGl2aWRlci4KKyAgICAvLworICAgIHVpMzJEaXYgPSAoKCh1aTMyVUFSVENsayAqIDgpIC8gdWkzMkJhdWQpICsgMSkgLyAyOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGJhdWQgcmF0ZS4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0lCUkQpID0gdWkzMkRpdiAvIDY0OworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0ZCUkQpID0gdWkzMkRpdiAlIDY0OworCisgICAgLy8KKyAgICAvLyBTZXQgcGFyaXR5LCBkYXRhIGxlbmd0aCwgYW5kIG51bWJlciBvZiBzdG9wIGJpdHMuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19MQ1JIKSA9IHVpMzJDb25maWc7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0cyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIGEgVUFSVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1VBUlRDb25maWdHZXRFeHBDbGsodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJVQVJUQ2xrLAorICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVpMzJCYXVkLCB1aW50MzJfdCAqcHVpMzJDb25maWcpCit7CisgICAgdWludDMyX3QgdWkzMkludCwgdWkzMkZyYWM7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBDb21wdXRlIHRoZSBiYXVkIHJhdGUuCisgICAgLy8KKyAgICB1aTMySW50ID0gSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fSUJSRCk7CisgICAgdWkzMkZyYWMgPSBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19GQlJEKTsKKyAgICAqcHVpMzJCYXVkID0gKHVpMzJVQVJUQ2xrICogNCkgLyAoKDY0ICogdWkzMkludCkgKyB1aTMyRnJhYyk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgcGFyaXR5LCBkYXRhIGxlbmd0aCwgYW5kIG51bWJlciBvZiBzdG9wIGJpdHMuCisgICAgLy8KKyAgICAqcHVpMzJDb25maWcgPSAoSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fTENSSCkgJgorICAgICAgICAgICAgICAgICAgICAoVUFSVF9MQ1JIX1NQUyB8IFVBUlRfTENSSF9XTEVOX00gfCBVQVJUX0xDUkhfU1RQMiB8CisgICAgICAgICAgICAgICAgICAgICBVQVJUX0xDUkhfRVBTIHwgVUFSVF9MQ1JIX1BFTikpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIERpc2FibGVzIHRyYW5zbWl0dGluZyBhbmQgcmVjZWl2aW5nCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVUFSVERpc2FibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBXYWl0IGZvciBlbmQgb2YgVFguCisgICAgLy8KKyAgICB3aGlsZShIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19GUikgJiBVQVJUX0ZSX0JVU1kpCisgICAgeworICAgIH0KKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgRklGTy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0xDUkgpICY9IH4oVUFSVF9MQ1JIX0ZFTik7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIFVBUlQuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19DVEwpICY9IH4oVUFSVF9DVExfVUFSVEVOIHwgVUFSVF9DVExfVFhFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVF9DVExfUlhFKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBSZWNlaXZlcyBhIGNoYXJhY3RlciBmcm9tIHRoZSBzcGVjaWZpZWQgcG9ydAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDMyX3QKK1VBUlRDaGFyR2V0Tm9uQmxvY2tpbmcodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gU2VlIGlmIHRoZXJlIGFyZSBhbnkgY2hhcmFjdGVycyBpbiB0aGUgcmVjZWl2ZSBGSUZPLgorICAgIC8vCisgICAgaWYoIShIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19GUikgJiBVQVJUX0ZSX1JYRkUpKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVhZCBhbmQgcmV0dXJuIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgLy8KKyAgICAgICAgcmV0dXJuKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0RSKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZXJlIGFyZSBubyBjaGFyYWN0ZXJzLCBzbyByZXR1cm4gYSBmYWlsdXJlLgorICAgICAgICAvLworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBXYWl0cyBmb3IgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgc3BlY2lmaWVkIHBvcnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitpbnQzMl90CitVQVJUQ2hhckdldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBXYWl0IHVudGlsIGEgY2hhciBpcyBhdmFpbGFibGUuCisgICAgLy8KKyAgICB3aGlsZShIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19GUikgJiBVQVJUX0ZSX1JYRkUpCisgICAgeworICAgIH0KKworICAgIC8vCisgICAgLy8gTm93IGdldCB0aGUgY2hhcmFjdGVyLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0RSKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2VuZHMgYSBjaGFyYWN0ZXIgdG8gdGhlIHNwZWNpZmllZCBwb3J0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorYm9vbAorVUFSVENoYXJQdXROb25CbG9ja2luZyh1aW50MzJfdCB1aTMyQmFzZSwgdWludDhfdCB1aThEYXRhKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgdHJhbnNtaXQgRklGTy4KKyAgICAvLworICAgIGlmKCEoSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fRlIpICYgVUFSVF9GUl9UWEZGKSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFdyaXRlIHRoaXMgY2hhcmFjdGVyIHRvIHRoZSB0cmFuc21pdCBGSUZPLgorICAgICAgICAvLworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19EUikgPSB1aThEYXRhOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFN1Y2Nlc3MuCisgICAgICAgIC8vCisgICAgICAgIHJldHVybih0cnVlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlcmUgaXMgbm8gc3BhY2UgaW4gdGhlIHRyYW5zbWl0IEZJRk8sIHNvIHJldHVybiBhIGZhaWx1cmUuCisgICAgICAgIC8vCisgICAgICAgIHJldHVybihmYWxzZSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFdhaXRzIHRvIHNlbmQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgc3BlY2lmaWVkIHBvcnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitVQVJUQ2hhclB1dCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDhfdCB1aThEYXRhKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFdhaXQgdW50aWwgc3BhY2UgaXMgYXZhaWxhYmxlLgorICAgIC8vCisgICAgd2hpbGUoSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fRlIpICYgVUFSVF9GUl9UWEZGKQorICAgIHsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNlbmQgdGhlIGNoYXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19EUikgPSB1aThEYXRhOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYSBVQVJUIGludGVycnVwdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1VBUlRJbnRSZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSwgdm9pZCAoKnBmbkhhbmRsZXIpKHZvaWQpKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFJlZ2lzdGVyKElOVF9VQVJUMF9DT01CLCBwZm5IYW5kbGVyKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBVQVJUIGludGVycnVwdC4KKyAgICAvLworICAgIEludEVuYWJsZShJTlRfVUFSVDBfQ09NQik7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGEgVUFSVCBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitVQVJUSW50VW5yZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBJbnREaXNhYmxlKElOVF9VQVJUMF9DT01CKTsKKworICAgIC8vCisgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRVbnJlZ2lzdGVyKElOVF9VQVJUMF9DT01CKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3VhcnQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWJmMzE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdWFydC5oCkBAIC0wLDAgKzEsMTE2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHVhcnQuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMTEtMjYgMTM6NDg6NTcgKzAxMDAgKFRodSwgMjYgTm92IDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDUyMTYKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgVUFSVC4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcGVyaXBoZXJhbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgdWFydF9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX1VBUlRfSF9fCisjZGVmaW5lIF9fVUFSVF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od191YXJ0Lmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBVQVJURklGT0xldmVsR2V0ICAgICAgICAgICAgICAgIE5PUk9NX1VBUlRGSUZPTGV2ZWxHZXQKKyAgICAjZGVmaW5lIFVBUlRDb25maWdTZXRFeHBDbGsgICAgICAgICAgICAgTk9ST01fVUFSVENvbmZpZ1NldEV4cENsaworICAgICNkZWZpbmUgVUFSVENvbmZpZ0dldEV4cENsayAgICAgICAgICAgICBOT1JPTV9VQVJUQ29uZmlnR2V0RXhwQ2xrCisgICAgI2RlZmluZSBVQVJURGlzYWJsZSAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1VBUlREaXNhYmxlCisgICAgI2RlZmluZSBVQVJUQ2hhckdldE5vbkJsb2NraW5nICAgICAgICAgIE5PUk9NX1VBUlRDaGFyR2V0Tm9uQmxvY2tpbmcKKyAgICAjZGVmaW5lIFVBUlRDaGFyR2V0ICAgICAgICAgICAgICAgICAgICAgTk9ST01fVUFSVENoYXJHZXQKKyAgICAjZGVmaW5lIFVBUlRDaGFyUHV0Tm9uQmxvY2tpbmcgICAgICAgICAgTk9ST01fVUFSVENoYXJQdXROb25CbG9ja2luZworICAgICNkZWZpbmUgVUFSVENoYXJQdXQgICAgICAgICAgICAgICAgICAgICBOT1JPTV9VQVJUQ2hhclB1dAorICAgICNkZWZpbmUgVUFSVEludFJlZ2lzdGVyICAgICAgICAgICAgICAgICBOT1JPTV9VQVJUSW50UmVnaXN0ZXIKKyAgICAjZGVmaW5lIFVBUlRJbnRVbnJlZ2lzdGVyICAgICAgICAgICAgICAgTk9ST01fVUFSVEludFVucmVnaXN0ZXIKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBVQVJUSW50RW5hYmxlLCBVQVJUSW50RGlzYWJsZSwgYW5kIFVBUlRJbnRDbGVhcgorLy8gYXMgdGhlIHVpMzJJbnRGbGFncyBwYXJhbWV0ZXIsIGFuZCByZXR1cm5lZCBmcm9tIFVBUlRJbnRTdGF0dXMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBVQVJUX0lOVF9PRSAgICAgICAgICAgICAweDQwMCAgICAgICAvLyBPdmVycnVuIEVycm9yIEludGVycnVwdCBNYXNrCisjZGVmaW5lIFVBUlRfSU5UX0JFICAgICAgICAgICAgIDB4MjAwICAgICAgIC8vIEJyZWFrIEVycm9yIEludGVycnVwdCBNYXNrCisjZGVmaW5lIFVBUlRfSU5UX1BFICAgICAgICAgICAgIDB4MTAwICAgICAgIC8vIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQgTWFzaworI2RlZmluZSBVQVJUX0lOVF9GRSAgICAgICAgICAgICAweDA4MCAgICAgICAvLyBGcmFtaW5nIEVycm9yIEludGVycnVwdCBNYXNrCisjZGVmaW5lIFVBUlRfSU5UX1JUICAgICAgICAgICAgIDB4MDQwICAgICAgIC8vIFJlY2VpdmUgVGltZW91dCBJbnRlcnJ1cHQgTWFzaworI2RlZmluZSBVQVJUX0lOVF9UWCAgICAgICAgICAgICAweDAyMCAgICAgICAvLyBUcmFuc21pdCBJbnRlcnJ1cHQgTWFzaworI2RlZmluZSBVQVJUX0lOVF9SWCAgICAgICAgICAgICAweDAxMCAgICAgICAvLyBSZWNlaXZlIEludGVycnVwdCBNYXNrCisjZGVmaW5lIFVBUlRfSU5UX0NUUyAgICAgICAgICAgIDB4MDAyICAgICAgIC8vIENUUyBNb2RlbSBJbnRlcnJ1cHQgTWFzaworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBVQVJUQ29uZmlnU2V0RXhwQ2xrIGFzIHRoZSB1aTMyQ29uZmlnIHBhcmFtZXRlcgorLy8gYW5kIHJldHVybmVkIGJ5IFVBUlRDb25maWdHZXRFeHBDbGsgaW4gdGhlIHB1aTMyQ29uZmlnIHBhcmFtZXRlci4KKy8vIEFkZGl0aW9uYWxseSwgdGhlIFVBUlRfQ09ORklHX1BBUl8qIHN1YnNldCBjYW4gYmUgcGFzc2VkIHRvCisvLyBVQVJUUGFyaXR5TW9kZVNldCBhcyB0aGUgdWkzMlBhcml0eSBwYXJhbWV0ZXIsIGFuZCBhcmUgcmV0dXJuZWQgYnkKKy8vIFVBUlRQYXJpdHlNb2RlR2V0LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVUFSVF9DT05GSUdfV0xFTl9NQVNLICAgMHgwMDAwMDA2MCAgLy8gTWFzayBmb3IgZXh0cmFjdGluZyB3b3JkIGxlbmd0aAorI2RlZmluZSBVQVJUX0NPTkZJR19XTEVOXzggICAgICAweDAwMDAwMDYwICAvLyA4IGJpdCBkYXRhCisjZGVmaW5lIFVBUlRfQ09ORklHX1dMRU5fNyAgICAgIDB4MDAwMDAwNDAgIC8vIDcgYml0IGRhdGEKKyNkZWZpbmUgVUFSVF9DT05GSUdfV0xFTl82ICAgICAgMHgwMDAwMDAyMCAgLy8gNiBiaXQgZGF0YQorI2RlZmluZSBVQVJUX0NPTkZJR19XTEVOXzUgICAgICAweDAwMDAwMDAwICAvLyA1IGJpdCBkYXRhCisjZGVmaW5lIFVBUlRfQ09ORklHX1NUT1BfTUFTSyAgIDB4MDAwMDAwMDggIC8vIE1hc2sgZm9yIGV4dHJhY3Rpbmcgc3RvcCBiaXRzCisjZGVmaW5lIFVBUlRfQ09ORklHX1NUT1BfT05FICAgIDB4MDAwMDAwMDAgIC8vIE9uZSBzdG9wIGJpdAorI2RlZmluZSBVQVJUX0NPTkZJR19TVE9QX1RXTyAgICAweDAwMDAwMDA4ICAvLyBUd28gc3RvcCBiaXRzCisjZGVmaW5lIFVBUlRfQ09ORklHX1BBUl9NQVNLICAgIDB4MDAwMDAwODYgIC8vIE1hc2sgZm9yIGV4dHJhY3RpbmcgcGFyaXR5CisjZGVmaW5lIFVBUlRfQ09ORklHX1BBUl9OT05FICAgIDB4MDAwMDAwMDAgIC8vIE5vIHBhcml0eQorI2RlZmluZSBVQVJUX0NPTkZJR19QQVJfRVZFTiAgICAweDAwMDAwMDA2ICAvLyBFdmVuIHBhcml0eQorI2RlZmluZSBVQVJUX0NPTkZJR19QQVJfT0REICAgICAweDAwMDAwMDAyICAvLyBPZGQgcGFyaXR5CisjZGVmaW5lIFVBUlRfQ09ORklHX1BBUl9PTkUgICAgIDB4MDAwMDAwODIgIC8vIFBhcml0eSBiaXQgaXMgb25lCisjZGVmaW5lIFVBUlRfQ09ORklHX1BBUl9aRVJPICAgIDB4MDAwMDAwODYgIC8vIFBhcml0eSBiaXQgaXMgemVybworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBVQVJURklGT0xldmVsU2V0IGFzIHRoZSB1aTMyVHhMZXZlbCBwYXJhbWV0ZXIKKy8vIGFuZCByZXR1cm5lZCBieSBVQVJURklGT0xldmVsR2V0IGluIHRoZSBwdWkzMlR4TGV2ZWwuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBVQVJUX0ZJRk9fVFgxXzggICAgICAgICAweDAwMDAwMDAwICAvLyBUcmFuc21pdCBpbnRlcnJ1cHQgYXQgMS84IEZ1bGwKKyNkZWZpbmUgVUFSVF9GSUZPX1RYMl84ICAgICAgICAgMHgwMDAwMDAwMSAgLy8gVHJhbnNtaXQgaW50ZXJydXB0IGF0IDEvNCBGdWxsCisjZGVmaW5lIFVBUlRfRklGT19UWDRfOCAgICAgICAgIDB4MDAwMDAwMDIgIC8vIFRyYW5zbWl0IGludGVycnVwdCBhdCAxLzIgRnVsbAorI2RlZmluZSBVQVJUX0ZJRk9fVFg2XzggICAgICAgICAweDAwMDAwMDAzICAvLyBUcmFuc21pdCBpbnRlcnJ1cHQgYXQgMy80IEZ1bGwKKyNkZWZpbmUgVUFSVF9GSUZPX1RYN184ICAgICAgICAgMHgwMDAwMDAwNCAgLy8gVHJhbnNtaXQgaW50ZXJydXB0IGF0IDcvOCBGdWxsCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFVBUlRGSUZPTGV2ZWxTZXQgYXMgdGhlIHVpMzJSeExldmVsIHBhcmFtZXRlcgorLy8gYW5kIHJldHVybmVkIGJ5IFVBUlRGSUZPTGV2ZWxHZXQgaW4gdGhlIHB1aTMyUnhMZXZlbC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFVBUlRfRklGT19SWDFfOCAgICAgICAgIDB4MDAwMDAwMDAgIC8vIFJlY2VpdmUgaW50ZXJydXB0IGF0IDEvOCBGdWxsCisjZGVmaW5lIFVBUlRfRklGT19SWDJfOCAgICAgICAgIDB4MDAwMDAwMDggIC8vIFJlY2VpdmUgaW50ZXJydXB0IGF0IDEvNCBGdWxsCisjZGVmaW5lIFVBUlRfRklGT19SWDRfOCAgICAgICAgIDB4MDAwMDAwMTAgIC8vIFJlY2VpdmUgaW50ZXJydXB0IGF0IDEvMiBGdWxsCisjZGVmaW5lIFVBUlRfRklGT19SWDZfOCAgICAgICAgIDB4MDAwMDAwMTggIC8vIFJlY2VpdmUgaW50ZXJydXB0IGF0IDMvNCBGdWxsCisjZGVmaW5lIFVBUlRfRklGT19SWDdfOCAgICAgICAgIDB4MDAwMDAwMjAgIC8vIFJlY2VpdmUgaW50ZXJydXB0IGF0IDcvOCBGdWxsCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFVBUlRETUFFbmFibGUoKSBhbmQgVUFSVERNQURpc2FibGUoKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFVBUlRfRE1BX0VSUl9SWFNUT1AgICAgIDB4MDAwMDAwMDQgIC8vIFN0b3AgRE1BIHJlY2VpdmUgaWYgVUFSVCBlcnJvcgorI2RlZmluZSBVQVJUX0RNQV9UWCAgICAgICAgICAgICAweDAwMDAwMDAyICAvLyBFbmFibGUgRE1BIGZvciB0cmFuc21pdAorI2RlZmluZSBVQVJUX0RNQV9SWCAgICAgICAgICAgICAweDAwMDAwMDAxICAvLyBFbmFibGUgRE1BIGZvciByZWNlaXZlCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgcmV0dXJuZWQgZnJvbSBVQVJUUnhFcnJvckdldCgpLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVUFSVF9SWEVSUk9SX09WRVJSVU4gICAgMHgwMDAwMDAwOAorI2RlZmluZSBVQVJUX1JYRVJST1JfQlJFQUsgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFVBUlRfUlhFUlJPUl9QQVJJVFkgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVUFSVF9SWEVSUk9SX0ZSQU1JTkcgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHJldHVybmVkIGZyb20gdGhlIFVBUlRCdXN5KCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBVQVJUX0JVU1kgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfSURMRSAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZmRlZiBEUklWRVJMSUJfREVCVUcKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGludGVybmFsCisvLyEKKy8vISBcYnJpZWYgQ2hlY2tzIGEgVUFSVCBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSBVQVJUIHBvcnQgYmFzZSBhZGRyZXNzIGlzIHZhbGlkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIHRoZSBiYXNlIGFkZHJlc3MgaXMgdmFsaWQgYW5kIFxjIGZhbHNlCisvLyEgb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyBib29sCitVQVJUQmFzZVZhbGlkKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIHJldHVybih1aTMyQmFzZSA9PSBVQVJUMF9CQVNFKTsKK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHRoZSB0eXBlIG9mIHBhcml0eS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdHlwZSBvZiBwYXJpdHkgdG8gdXNlIGZvciB0cmFuc21pdHRpbmcgYW5kIGV4cGVjdAorLy8hIHdoZW4gcmVjZWl2aW5nLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vISBccGFyYW0gdWkzMlBhcml0eSBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgcGFyaXR5IHRvIHVzZS4gVGhlIGxhc3QgdHdvIGFsbG93CisvLyEgZGlyZWN0IGNvbnRyb2wgb2YgdGhlIHBhcml0eSBiaXQ7IGl0IGlzIGFsd2F5cyBlaXRoZXIgb25lIG9yIHplcm8gYmFzZWQgb24KKy8vISB0aGUgbW9kZS4KKy8vISAtIFxyZWYgVUFSVF9DT05GSUdfUEFSX05PTkUKKy8vISAtIFxyZWYgVUFSVF9DT05GSUdfUEFSX0VWRU4KKy8vISAtIFxyZWYgVUFSVF9DT05GSUdfUEFSX09ERAorLy8hIC0gXHJlZiBVQVJUX0NPTkZJR19QQVJfT05FCisvLyEgLSBccmVmIFVBUlRfQ09ORklHX1BBUl9aRVJPCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVUFSVFBhcml0eU1vZGVTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJQYXJpdHkpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJQYXJpdHkgPT0gVUFSVF9DT05GSUdfUEFSX05PTkUpIHx8CisgICAgICAgICAgICh1aTMyUGFyaXR5ID09IFVBUlRfQ09ORklHX1BBUl9FVkVOKSB8fAorICAgICAgICAgICAodWkzMlBhcml0eSA9PSBVQVJUX0NPTkZJR19QQVJfT0REKSB8fAorICAgICAgICAgICAodWkzMlBhcml0eSA9PSBVQVJUX0NPTkZJR19QQVJfT05FKSB8fAorICAgICAgICAgICAodWkzMlBhcml0eSA9PSBVQVJUX0NPTkZJR19QQVJfWkVSTykpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHBhcml0eSBtb2RlLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fTENSSCkgPSAoKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0xDUkgpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfihVQVJUX0xDUkhfU1BTIHwgVUFSVF9MQ1JIX0VQUyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVF9MQ1JIX1BFTikpIHwgdWkzMlBhcml0eSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIHR5cGUgb2YgcGFyaXR5IGN1cnJlbnRseSBiZWluZyB1c2VkLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSB0eXBlIG9mIHBhcml0eSB1c2VkIGZvciB0cmFuc21pdHRpbmcgZGF0YSBhbmQKKy8vISBleHBlY3RlZCB3aGVuIHJlY2VpdmluZyBkYXRhLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBwYXJpdHkgc2V0dGluZ3MsIHNwZWNpZmllZCBhcyBvbmUgb2Y6CisvLyEgLSBccmVmIFVBUlRfQ09ORklHX1BBUl9OT05FCisvLyEgLSBccmVmIFVBUlRfQ09ORklHX1BBUl9FVkVOCisvLyEgLSBccmVmIFVBUlRfQ09ORklHX1BBUl9PREQKKy8vISAtIFxyZWYgVUFSVF9DT05GSUdfUEFSX09ORQorLy8hIC0gXHJlZiBVQVJUX0NPTkZJR19QQVJfWkVSTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorVUFSVFBhcml0eU1vZGVHZXQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHBhcml0eSBzZXR0aW5nCisgICAgLy8KKyAgICByZXR1cm4oSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fTENSSCkgJgorICAgICAgICAgICAoVUFSVF9MQ1JIX1NQUyB8IFVBUlRfTENSSF9FUFMgfCBVQVJUX0xDUkhfUEVOKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIEZJRk8gbGV2ZWwgYXQgd2hpY2ggaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBGSUZPIGxldmVsIGF0IHdoaWNoIHRyYW5zbWl0IGFuZCByZWNlaXZlIGludGVycnVwdHMKKy8vISBhcmUgZ2VuZXJhdGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vISBccGFyYW0gdWkzMlR4TGV2ZWwgaXMgdGhlIHRyYW5zbWl0IEZJRk8gaW50ZXJydXB0IGxldmVsLCBzcGVjaWZpZWQgYXMgb25lIG9mOgorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fVFgxXzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1RYMl84CisvLyEgLSBccmVmIFVBUlRfRklGT19UWDRfOAorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fVFg2XzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1RYN184CisvLyEgXHBhcmFtIHVpMzJSeExldmVsIGlzIHRoZSByZWNlaXZlIEZJRk8gaW50ZXJydXB0IGxldmVsLCBzcGVjaWZpZWQgYXMgb25lIG9mOgorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fUlgxXzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1JYMl84CisvLyEgLSBccmVmIFVBUlRfRklGT19SWDRfOAorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fUlg2XzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1JYN184CisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVUFSVEZJRk9MZXZlbFNldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlR4TGV2ZWwsCisgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJSeExldmVsKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVHhMZXZlbCA9PSBVQVJUX0ZJRk9fVFgxXzgpIHx8CisgICAgICAgICAgICh1aTMyVHhMZXZlbCA9PSBVQVJUX0ZJRk9fVFgyXzgpIHx8CisgICAgICAgICAgICh1aTMyVHhMZXZlbCA9PSBVQVJUX0ZJRk9fVFg0XzgpIHx8CisgICAgICAgICAgICh1aTMyVHhMZXZlbCA9PSBVQVJUX0ZJRk9fVFg2XzgpIHx8CisgICAgICAgICAgICh1aTMyVHhMZXZlbCA9PSBVQVJUX0ZJRk9fVFg3XzgpKTsKKyAgICBBU1NFUlQoKHVpMzJSeExldmVsID09IFVBUlRfRklGT19SWDFfOCkgfHwKKyAgICAgICAgICAgKHVpMzJSeExldmVsID09IFVBUlRfRklGT19SWDJfOCkgfHwKKyAgICAgICAgICAgKHVpMzJSeExldmVsID09IFVBUlRfRklGT19SWDRfOCkgfHwKKyAgICAgICAgICAgKHVpMzJSeExldmVsID09IFVBUlRfRklGT19SWDZfOCkgfHwKKyAgICAgICAgICAgKHVpMzJSeExldmVsID09IFVBUlRfRklGT19SWDdfOCkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIEZJRk8gaW50ZXJydXB0IGxldmVscy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0lGTFMpID0gdWkzMlR4TGV2ZWwgfCB1aTMyUnhMZXZlbDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgRklGTyBsZXZlbCBhdCB3aGljaCBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIEZJRk8gbGV2ZWwgYXQgd2hpY2ggdHJhbnNtaXQgYW5kIHJlY2VpdmUgaW50ZXJydXB0cworLy8hIGFyZSBnZW5lcmF0ZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSBwdWkzMlR4TGV2ZWwgaXMgYSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSB0cmFuc21pdCBGSUZPIGxldmVsLAorLy8hIHJldHVybmVkIGFzIG9uZSBvZjoKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1RYMV84CisvLyEgLSBccmVmIFVBUlRfRklGT19UWDJfOAorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fVFg0XzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1RYNl84CisvLyEgLSBccmVmIFVBUlRfRklGT19UWDdfOAorLy8hIFxwYXJhbSBwdWkzMlJ4TGV2ZWwgaXMgYSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZWNlaXZlIEZJRk8gbGV2ZWwsCisvLyEgcmV0dXJuZWQgYXMgb25lIG9mOgorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fUlgxXzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1JYMl84CisvLyEgLSBccmVmIFVBUlRfRklGT19SWDRfOAorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fUlg2XzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1JYN184CisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBVQVJURklGT0xldmVsR2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCAqcHVpMzJUeExldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVpMzJSeExldmVsKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFVBUlQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIFVBUlQgZm9yIG9wZXJhdGlvbiBpbiB0aGUgc3BlY2lmaWVkIGRhdGEKKy8vISBmb3JtYXQuCisvLyEKKy8vISBcbm90ZSBUaGUgcGVyaXBoZXJhbCBjbG9jayBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIHByb2Nlc3NvcgorLy8hIGNsb2NrLiBUaGUgZnJlcXVlbmN5IG9mIHRoZSBwZXJpcGhlcmFsIGNsb2NrIGlzIHNldCBieSB0aGUgc3lzdGVtIGNvbnRyb2wuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSB1aTMyVUFSVENsayBpcyB0aGUgcmF0ZSBvZiB0aGUgY2xvY2sgc3VwcGxpZWQgdG8gdGhlIFVBUlQgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyQmF1ZCBpcyB0aGUgZGVzaXJlZCBiYXVkIHJhdGUuCisvLyEgLSBNaW5pbXVtIGJhdWQgcmF0ZTogdWkzMkJhdWQgPj0gY2VpbCh1aTMyVUFSVENsayAvIDEsMDQ4LDU1OS44NzUpCisvLyEgLSBNYXhpbXVtIGJhdWQgcmF0ZTogdWkzMkJhdWQgPD0gZmxvb3IodWkzMlVBUlRDbGsgLyAxNS44NzUpCisvLyEgXHBhcmFtIHVpMzJDb25maWcgaXMgdGhlIGRhdGEgZm9ybWF0IGZvciB0aGUgcG9ydC4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIHRoZSBiaXR3aXNlIE9SIG9mIHRocmVlIHZhbHVlczoKKy8vISAtIE51bWJlciBvZiBkYXRhIGJpdHMKKy8vISAgIC0gXHJlZiBVQVJUX0NPTkZJR19XTEVOXzggOiA4IGRhdGEgYml0cyBwZXIgYnl0ZS4KKy8vISAgIC0gXHJlZiBVQVJUX0NPTkZJR19XTEVOXzcgOiA3IGRhdGEgYml0cyBwZXIgYnl0ZS4KKy8vISAgIC0gXHJlZiBVQVJUX0NPTkZJR19XTEVOXzYgOiA2IGRhdGEgYml0cyBwZXIgYnl0ZS4KKy8vISAgIC0gXHJlZiBVQVJUX0NPTkZJR19XTEVOXzUgOiA1IGRhdGEgYml0cyBwZXIgYnl0ZS4KKy8vISAtIE51bWJlciBvZiBzdG9wIGJpdHMKKy8vISAgIC0gXHJlZiBVQVJUX0NPTkZJR19TVE9QX09ORSA6IE9uZSBzdG9wIGJpdC4KKy8vISAgIC0gXHJlZiBVQVJUX0NPTkZJR19TVE9QX1RXTyA6IFR3byBzdG9wIGJpdHMuCisvLyEgLSBQYXJpdHkKKy8vISAgIC0gXHJlZiBVQVJUX0NPTkZJR19QQVJfTk9ORQorLy8hICAgLSBccmVmIFVBUlRfQ09ORklHX1BBUl9FVkVOCisvLyEgICAtIFxyZWYgVUFSVF9DT05GSUdfUEFSX09ERAorLy8hICAgLSBccmVmIFVBUlRfQ09ORklHX1BBUl9PTkUKKy8vISAgIC0gXHJlZiBVQVJUX0NPTkZJR19QQVJfWkVSTworLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVUFSVENvbmZpZ1NldEV4cENsayh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlVBUlRDbGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJCYXVkLCB1aW50MzJfdCB1aTMyQ29uZmlnKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIGEgVUFSVC4KKy8vIQorLy8hIFRoZSBiYXVkIHJhdGUgYW5kIGRhdGEgZm9ybWF0IGZvciB0aGUgVUFSVCBpcyBkZXRlcm1pbmVkLCBnaXZlbiBhbgorLy8hIGV4cGxpY2l0bHkgcHJvdmlkZWQgcGVyaXBoZXJhbCBjbG9jayAoaGVuY2UgdGhlIEV4cENsayBzdWZmaXgpLiBUaGUKKy8vISByZXR1cm5lZCBiYXVkIHJhdGUgaXMgdGhlIGFjdHVhbCBiYXVkIHJhdGU7IGl0IG1heSBub3QgYmUgdGhlIGV4YWN0IGJhdWQKKy8vISByYXRlIHJlcXVlc3RlZCBvciBhbiAib2ZmaWNpYWwiIGJhdWQgcmF0ZS4gVGhlIGRhdGEgZm9ybWF0IHJldHVybmVkIGluCisvLyEgXGMgcHVpMzJDb25maWcgaXMgZW51bWVyYXRlZCB0aGUgc2FtZSBhcyB0aGUgXGMgdWkzMkNvbmZpZyBwYXJhbWV0ZXIgb2YKKy8vISBccmVmIFVBUlRDb25maWdTZXRFeHBDbGsoKS4KKy8vIQorLy8hIFxub3RlIFRoZSBwZXJpcGhlcmFsIGNsb2NrIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgcHJvY2Vzc29yCisvLyEgY2xvY2suIFRoZSBmcmVxdWVuY3kgb2YgdGhlIHBlcmlwaGVyYWwgY2xvY2sgaXMgc2V0IGJ5IHRoZSBzeXN0ZW0gY29udHJvbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJVQVJUQ2xrIGlzIHRoZSByYXRlIG9mIHRoZSBjbG9jayBzdXBwbGllZCB0byB0aGUgVUFSVCBtb2R1bGUuCisvLyEgXHBhcmFtIHB1aTMyQmF1ZCBpcyBhIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIGJhdWQgcmF0ZS4KKy8vISBccGFyYW0gcHVpMzJDb25maWcgaXMgYSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSBkYXRhIGZvcm1hdC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFVBUlRDb25maWdHZXRFeHBDbGsodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJVQVJUQ2xrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVpMzJCYXVkLCB1aW50MzJfdCAqcHVpMzJDb25maWcpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRyYW5zbWl0dGluZyBhbmQgcmVjZWl2aW5nLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBVQVJURU4sIFRYRSwgYW5kIFJYRSBiaXRzLCBhbmQgZW5hYmxlcyB0aGUgdHJhbnNtaXQKKy8vISBhbmQgcmVjZWl2ZSBGSUZPcy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVUFSVEVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIEZJRk8uCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19MQ1JIKSB8PSBVQVJUX0xDUkhfRkVOOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgUlgsIFRYLCBhbmQgdGhlIFVBUlQuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19DVEwpIHw9IChVQVJUX0NUTF9VQVJURU4gfCBVQVJUX0NUTF9UWEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVBUlRfQ1RMX1JYRSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRyYW5zbWl0dGluZyBhbmQgcmVjZWl2aW5nLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIFVBUlRFTiwgVFhFLCBhbmQgUlhFIGJpdHMsIHdhaXRzIGZvciB0aGUgZW5kIG9mCisvLyEgdHJhbnNtaXNzaW9uIG9mIHRoZSBjdXJyZW50IGNoYXJhY3RlciwgYW5kIGZsdXNoZXMgdGhlIHRyYW5zbWl0IEZJRk8uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVUFSVERpc2FibGUodWludDMyX3QgdWkzMkJhc2UpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBGSUZPcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb25zIGVuYWJsZXMgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIEZJRk9zIGluIHRoZSBVQVJULgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitVQVJURklGT0VuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIEZJRk8uCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19MQ1JIKSB8PSBVQVJUX0xDUkhfRkVOOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgRklGT3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9ucyBkaXNhYmxlcyB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgRklGT3MgaW4gdGhlIFVBUlQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1VBUlRGSUZPRGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBGSUZPLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fTENSSCkgJj0gfihVQVJUX0xDUkhfRkVOKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGV0ZXJtaW5lcyBpZiB0aGVyZSBhcmUgYW55IGNoYXJhY3RlcnMgaW4gdGhlIHJlY2VpdmUgRklGTy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBkYXRhCisvLyEgYXZhaWxhYmxlIGluIHRoZSByZWNlaXZlIEZJRk8uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiB0aGUgcmVjZWl2ZSBGSUZPLgorLy8hIC0gXGMgdHJ1ZSAgOiBUaGVyZSBpcyBkYXRhIGluIHRoZSByZWNlaXZlIEZJRk8uCisvLyEgLSBcYyBmYWxzZSA6IFRoZXJlIGlzIG5vIGRhdGEgaW4gdGhlIHJlY2VpdmUgRklGTy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorVUFSVENoYXJzQXZhaWwodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBhdmFpbGFiaWxpdHkgb2YgY2hhcmFjdGVycy4KKyAgICAvLworICAgIHJldHVybigoSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fRlIpICYgVUFSVF9GUl9SWEZFKSA/IGZhbHNlIDogdHJ1ZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERldGVybWluZXMgaWYgdGhlcmUgaXMgYW55IHNwYWNlIGluIHRoZSB0cmFuc21pdCBGSUZPLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIHNwYWNlCisvLyEgYXZhaWxhYmxlIGluIHRoZSB0cmFuc21pdCBGSUZPLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgdGhlIHRyYW5zbWl0IEZJRk8uCisvLyEgLSBcYyB0cnVlICA6IFRoZXJlIGlzIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgdHJhbnNtaXQgRklGTy4KKy8vISAtIFxjIGZhbHNlIDogVGhlcmUgaXMgbm8gc3BhY2UgYXZhaWxhYmxlIGluIHRoZSB0cmFuc21pdCBGSUZPLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitVQVJUU3BhY2VBdmFpbCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGF2YWlsYWJpbGl0eSBvZiBzcGFjZS4KKyAgICAvLworICAgIHJldHVybigoSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fRlIpICYgVUFSVF9GUl9UWEZGKSA/IGZhbHNlIDogdHJ1ZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlY2VpdmVzIGEgY2hhcmFjdGVyIGZyb20gdGhlIHNwZWNpZmllZCBwb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBnZXRzIGEgY2hhcmFjdGVyIGZyb20gdGhlIHJlY2VpdmUgRklGTyBmb3IgdGhlIHNwZWNpZmllZAorLy8hIHBvcnQuCisvLyEKKy8vISBcbm90ZSBUaGUgXHJlZiBVQVJUQ2hhcnNBdmFpbCgpIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlCisvLyEgYXR0ZW1wdGluZyB0byBjYWxsIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjaGFyYWN0ZXIgcmVhZCBmcm9tIHRoZSBzcGVjaWZpZWQgcG9ydCwgY2FzdCBhcyBhbgorLy8hIFxjIGludDMyX3QuIEEgXGMgLTEgaXMgcmV0dXJuZWQgaWYgdGhlcmUgYXJlIG5vIGNoYXJhY3RlcnMgcHJlc2VudCBpbiB0aGUKKy8vISByZWNlaXZlIEZJRk8uCisvLyEKKy8vISBcc2EgXHJlZiBVQVJUQ2hhcnNBdmFpbCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGludDMyX3QgVUFSVENoYXJHZXROb25CbG9ja2luZyh1aW50MzJfdCB1aTMyQmFzZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdhaXRzIGZvciBhIGNoYXJhY3RlciBmcm9tIHRoZSBzcGVjaWZpZWQgcG9ydC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIGNoYXJhY3RlciBmcm9tIHRoZSByZWNlaXZlIEZJRk8gZm9yIHRoZSBzcGVjaWZpZWQKKy8vISBwb3J0LiBJZiB0aGVyZSBhcmUgbm8gY2hhcmFjdGVycyBhdmFpbGFibGUsIHRoaXMgZnVuY3Rpb24gd2FpdHMgdW50aWwgYQorLy8hIGNoYXJhY3RlciBpcyByZWNlaXZlZCBiZWZvcmUgcmV0dXJuaW5nLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY2hhcmFjdGVyIHJlYWQgZnJvbSB0aGUgc3BlY2lmaWVkIHBvcnQsIGNhc3QgYXMgYW4KKy8vISBcYyBpbnQzMl90LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQzMl90IFVBUlRDaGFyR2V0KHVpbnQzMl90IHVpMzJCYXNlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2VuZHMgYSBjaGFyYWN0ZXIgdG8gdGhlIHNwZWNpZmllZCBwb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIGNoYXJhY3RlciBcYyB1aThEYXRhIHRvIHRoZSB0cmFuc21pdCBGSUZPIGZvciB0aGUKKy8vISBzcGVjaWZpZWQgcG9ydC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBibG9jaywgc28gaWYgdGhlcmUgaXMgbm8gc3BhY2UKKy8vISBhdmFpbGFibGUsIHRoZW4gYSBcYyBmYWxzZSBpcyByZXR1cm5lZCwgYW5kIHRoZSBhcHBsaWNhdGlvbiBtdXN0IHJldHJ5IHRoZQorLy8hIGZ1bmN0aW9uIGxhdGVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vISBccGFyYW0gdWk4RGF0YSBpcyB0aGUgY2hhcmFjdGVyIHRvIGJlIHRyYW5zbWl0dGVkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiB0aGUgY2hhcmFjdGVyIHRyYW5zbWl0LgorLy8hIC0gXGMgdHJ1ZSAgOiBUaGUgY2hhcmFjdGVyIHdhcyBzdWNjZXNzZnVsbHkgcGxhY2VkIGluIHRoZSB0cmFuc21pdCBGSUZPLgorLy8hIC0gXGMgZmFsc2UgOiBUaGVyZSB3YXMgbm8gc3BhY2UgYXZhaWxhYmxlIGluIHRoZSB0cmFuc21pdCBGSUZPLiBUcnkgYWdhaW4gbGF0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGJvb2wgVUFSVENoYXJQdXROb25CbG9ja2luZyh1aW50MzJfdCB1aTMyQmFzZSwgdWludDhfdCB1aThEYXRhKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgV2FpdHMgdG8gc2VuZCBhIGNoYXJhY3RlciBmcm9tIHRoZSBzcGVjaWZpZWQgcG9ydC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIGNoYXJhY3RlciBcYyB1aThEYXRhIHRvIHRoZSB0cmFuc21pdCBGSUZPIGZvciB0aGUKKy8vISBzcGVjaWZpZWQgcG9ydC4gSWYgdGhlcmUgaXMgbm8gc3BhY2UgYXZhaWxhYmxlIGluIHRoZSB0cmFuc21pdCBGSUZPLCB0aGlzCisvLyEgZnVuY3Rpb24gd2FpdHMgdW50aWwgdGhlcmUgaXMgc3BhY2UgYXZhaWxhYmxlIGJlZm9yZSByZXR1cm5pbmcuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSB1aThEYXRhIGlzIHRoZSBjaGFyYWN0ZXIgdG8gYmUgdHJhbnNtaXR0ZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBVQVJUQ2hhclB1dCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDhfdCB1aThEYXRhKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBVQVJUIHRyYW5zbWl0dGVyIGlzIGJ1c3kgb3Igbm90LgorLy8hCisvLyEgQWxsb3dzIHRoZSBjYWxsZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYWxsIHRyYW5zbWl0dGVkIGJ5dGVzIGhhdmUgY2xlYXJlZAorLy8hIHRoZSB0cmFuc21pdHRlciBoYXJkd2FyZS4gSWYgXGMgZmFsc2UgaXMgcmV0dXJuZWQsIHRoZSB0cmFuc21pdCBGSUZPIGlzCisvLyEgZW1wdHkgYW5kIGFsbCBiaXRzIG9mIHRoZSBsYXN0IHRyYW5zbWl0dGVkIGNoYXJhY3RlciwgaW5jbHVkaW5nIGFsbCBzdG9wCisvLyEgYml0cywgaGF2ZSBsZWZ0IHRoZSBoYXJkd2FyZSBzaGlmdCByZWdpc3Rlci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIFVBUlQgdHJhbnNtaXR0ZXIuCisvLyEgLSBcYyB0cnVlICA6IFVBUlQgaXMgdHJhbnNtaXR0aW5nLgorLy8hIC0gXGMgZmFsc2UgOiBBbGwgdHJhbnNtaXNzaW9ucyBhcmUgY29tcGxldGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK1VBUlRCdXN5KHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50LgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBVQVJUIGlzIGJ1c3kuCisgICAgLy8KKyAgICByZXR1cm4oKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0ZSKSAmIFVBUlRfRlJfQlVTWSkgPworICAgICAgICAgICBVQVJUX0JVU1kgOiBVQVJUX0lETEUpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDYXVzZXMgYSBCUkVBSyB0byBiZSBzZW50LgorLy8hCisvLyEgXG5vdGUgRm9yIHByb3BlciB0cmFuc21pc3Npb24gb2YgYSBicmVhaworLy8hIGNvbW1hbmQsIHRoZSBicmVhayBtdXN0IGJlIGFzc2VydGVkIGZvciBhdCBsZWFzdCB0d28gY29tcGxldGUgZnJhbWVzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vISBccGFyYW0gYkJyZWFrU3RhdGUgY29udHJvbHMgdGhlIG91dHB1dCBsZXZlbC4KKy8vISAtIFxjIHRydWUgIDogQXNzZXJ0cyBhIGJyZWFrIGNvbmRpdGlvbiBvbiB0aGUgVUFSVC4KKy8vISAtIFxjIGZhbHNlIDogUmVtb3ZlcyB0aGUgYnJlYWsgY29uZGl0aW9uLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1VBUlRCcmVha0N0bCh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiQnJlYWtTdGF0ZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGJyZWFrIGNvbmRpdGlvbiBhcyByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19MQ1JIKSA9CisgICAgICAgICAoYkJyZWFrU3RhdGUgPworICAgICAgICAgKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0xDUkgpIHwgVUFSVF9MQ1JIX0JSSykgOgorICAgICAgICAgKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0xDUkgpICYgfihVQVJUX0xDUkhfQlJLKSkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGEgVUFSVCBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFjdHVhbCByZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICBUaGlzCisvLyEgZnVuY3Rpb24gZW5hYmxlcyB0aGUgZ2xvYmFsIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXI7IHNwZWNpZmljCisvLyEgVUFSVCBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCB2aWEgXHJlZiBVQVJUSW50RW5hYmxlKCkuIEl0IGlzIHRoZSBpbnRlcnJ1cHQKKy8vISBoYW5kbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gY2xlYXIgdGhlIGludGVycnVwdCBzb3VyY2UuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSBwZm5IYW5kbGVyIGlzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlCisvLyEgVUFSVCBpbnRlcnJ1cHQgb2NjdXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVUFSVEludFJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlLCB2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBVbnJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYSBVQVJUIGludGVycnVwdC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgYWN0dWFsIHVucmVnaXN0ZXJpbmcgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLiBJdAorLy8hIGNsZWFycyB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhIFVBUlQgaW50ZXJydXB0IG9jY3Vycy4gIFRoaXMKKy8vISBmdW5jdGlvbiBhbHNvIG1hc2tzIG9mZiB0aGUgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBzbyB0aGF0CisvLyEgdGhlIGludGVycnVwdCBoYW5kbGVyIG5vIGxvbmdlciBpcyBjYWxsZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVUFSVEludFVucmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIGluZGl2aWR1YWwgVUFSVCBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgaW5kaWNhdGVkIFVBUlQgaW50ZXJydXB0IHNvdXJjZXMuIE9ubHkgdGhlCisvLyEgc291cmNlcyB0aGF0IGFyZSBlbmFibGVkIGNhbiBiZSByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQ7CisvLyEgZGlzYWJsZWQgc291cmNlcyBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZC4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBVQVJUX0lOVF9PRSAgOiBPdmVycnVuIEVycm9yIGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfQkUgIDogQnJlYWsgRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9QRSAgOiBQYXJpdHkgRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9GRSAgOiBGcmFtaW5nIEVycm9yIGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfUlQgIDogUmVjZWl2ZSBUaW1lb3V0IGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfVFggIDogVHJhbnNtaXQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9SWCAgOiBSZWNlaXZlIGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfQ1RTIDogQ1RTIGludGVycnVwdC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitVQVJUSW50RW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0lNU0MpIHw9IHVpMzJJbnRGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgaW5kaXZpZHVhbCBVQVJUIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgaW5kaWNhdGVkIFVBUlQgaW50ZXJydXB0IHNvdXJjZXMuIE9ubHkgdGhlCisvLyEgc291cmNlcyB0aGF0IGFyZSBlbmFibGVkIGNhbiBiZSByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQ7CisvLyEgZGlzYWJsZWQgc291cmNlcyBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZGlzYWJsZWQuCisvLyEgLSBccmVmIFVBUlRfSU5UX09FICA6IE92ZXJydW4gRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9CRSAgOiBCcmVhayBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1BFICA6IFBhcml0eSBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX0ZFICA6IEZyYW1pbmcgRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9SVCAgOiBSZWNlaXZlIFRpbWVvdXQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9UWCAgOiBUcmFuc21pdCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1JYICA6IFJlY2VpdmUgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9DVFMgOiBDVFMgaW50ZXJydXB0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1VBUlRJbnREaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19JTVNDKSAmPSB+KHVpMzJJbnRGbGFncyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW50ZXJydXB0IHN0YXR1cyBmb3IgdGhlIHNwZWNpZmllZCBVQVJULiBFaXRoZXIKKy8vISB0aGUgcmF3IGludGVycnVwdCBzdGF0dXMgb3IgdGhlIHN0YXR1cyBvZiBpbnRlcnJ1cHRzIHRoYXQgYXJlIGFsbG93ZWQgdG8KKy8vISByZWZsZWN0IHRvIHRoZSBwcm9jZXNzb3IgY2FuIGJlIHJldHVybmVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vISBccGFyYW0gYk1hc2tlZCBzZWxlY3RzIGVpdGhlciByYXcgb3IgbWFza2VkIGludGVycnVwdC4KKy8vISAtIFxjIHRydWUgIDogTWFza2VkIGludGVycnVwdCBzdGF0dXMgaXMgcmVxdWlyZWQuCisvLyEgLSBcYyBmYWxzZSA6IFJhdyBpbnRlcnJ1cHQgc3RhdHVzIGlzIHJlcXVpcmVkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMsIGVudW1lcmF0ZWQgYXMgYSBiaXQgZmllbGQgb2Y6CisvLyEgLSBccmVmIFVBUlRfSU5UX09FICA6IE92ZXJydW4gRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9CRSAgOiBCcmVhayBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1BFICA6IFBhcml0eSBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX0ZFICA6IEZyYW1pbmcgRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9SVCAgOiBSZWNlaXZlIFRpbWVvdXQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9UWCAgOiBUcmFuc21pdCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1JYICA6IFJlY2VpdmUgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9DVFMgOiBDVFMgaW50ZXJydXB0LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorVUFSVEludFN0YXR1cyh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiTWFza2VkKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiBlaXRoZXIgdGhlIGludGVycnVwdCBzdGF0dXMgb3IgdGhlIHJhdyBpbnRlcnJ1cHQgc3RhdHVzIGFzCisgICAgLy8gcmVxdWVzdGVkLgorICAgIC8vCisgICAgaWYoYk1hc2tlZCkKKyAgICB7CisgICAgICAgIHJldHVybihIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19NSVMpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX1JJUykpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIFVBUlQgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIFVBUlQgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGNsZWFyZWQsIHNvIHRoYXQgdGhleSBubyBsb25nZXIKKy8vISBhc3NlcnQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGtlZXAgdGhlCisvLyEgaW50ZXJydXB0IGZyb20gYmVpbmcgcmVjb2duaXplZCBhZ2FpbiBpbW1lZGlhdGVseSB1cG9uIGV4aXQuCisvLyEKKy8vISBcbm90ZSBEdWUgdG8gd3JpdGUgYnVmZmVycyBhbmQgc3luY2hyb25pemVycyBpbiB0aGUgc3lzdGVtIGl0IG1heSB0YWtlIHNldmVyYWwKKy8vISBjbG9jayBjeWNsZXMgZnJvbSBhIHJlZ2lzdGVyIHdyaXRlIGNsZWFyaW5nIGFuIGV2ZW50IGluIGEgbW9kdWxlIGFuZCB1bnRpbCB0aGUKKy8vISBldmVudCBpcyBhY3R1YWxseSBjbGVhcmVkIGluIHRoZSBOVklDIG9mIHRoZSBzeXN0ZW0gQ1BVLiBJdCBpcyByZWNvbW1lbmRlZCB0bworLy8hIGNsZWFyIHRoZSBldmVudCBzb3VyY2UgZWFybHkgaW4gdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKElTUikgdG8gYWxsb3cKKy8vISB0aGUgZXZlbnQgY2xlYXIgdG8gcHJvcGFnYXRlIHRvIHRoZSBOVklDIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSLgorLy8hIEF0IHRoZSBzYW1lIHRpbWUsIGFuIGVhcmx5IGV2ZW50IGNsZWFyIGFsbG93cyBuZXcgZXZlbnRzIG9mIHRoZSBzYW1lIHR5cGUgdG8gYmUKKy8vISBwZW5kZWQgaW5zdGVhZCBvZiBpZ25vcmVkIGlmIHRoZSBldmVudCBpcyBjbGVhcmVkIGxhdGVyIGluIHRoZSBJU1IuCisvLyEgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwcm9ncmFtbWVyIHRvIG1ha2Ugc3VyZSB0aGF0IGVub3VnaCB0aW1lIGhhcyBwYXNzZWQKKy8vISBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUiB0byBhdm9pZCBmYWxzZSByZS10cmlnZ2VyaW5nIG9mIHRoZSBjbGVhcmVkIGV2ZW50LgorLy8hIEEgc2ltcGxlLCBhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgb3B0aW1hbCwgd2F5IG9mIGNsZWFyaW5nIGFuIGV2ZW50IGJlZm9yZQorLy8hIHJldHVybmluZyBmcm9tIHRoZSBJU1IgaXM6CisvLyEgLSMgV3JpdGUgdG8gY2xlYXIgZXZlbnQgKGludGVycnVwdCBzb3VyY2UpLiAoYnVmZmVyZWQgd3JpdGUpCisvLyEgLSMgRHVtbXkgcmVhZCBmcm9tIHRoZSBldmVudCBzb3VyY2UgbW9kdWxlLiAobWFraW5nIHN1cmUgdGhlIHdyaXRlIGhhcyBwcm9wYWdhdGVkKQorLy8hIC0jIFdhaXQgdHdvIHN5c3RlbSBDUFUgY2xvY2sgY3ljbGVzICh1c2VyIGNvZGUgb3IgdHdvIE5PUHMpLiAoYWxsb3dpbmcgY2xlYXJlZCBldmVudCB0byBwcm9wYWdhdGUgdGhyb3VnaCBhbnkgc3luY2hyb25pemVycykKKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyBhIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBjbGVhcmVkLgorLy8hIC0gXHJlZiBVQVJUX0lOVF9PRSAgOiBPdmVycnVuIEVycm9yIGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfQkUgIDogQnJlYWsgRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9QRSAgOiBQYXJpdHkgRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9GRSAgOiBGcmFtaW5nIEVycm9yIGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfUlQgIDogUmVjZWl2ZSBUaW1lb3V0IGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfVFggIDogVHJhbnNtaXQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9SWCAgOiBSZWNlaXZlIGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfQ1RTIDogQ1RTIGludGVycnVwdC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitVQVJUSW50Q2xlYXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMKKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSByZXF1ZXN0ZWQgaW50ZXJydXB0IHNvdXJjZXMKKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0lDUikgPSB1aTMySW50RmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSBVQVJUIERNQSBvcGVyYXRpb24uCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIFVBUlQgRE1BIGZlYXR1cmVzIGFyZSBlbmFibGVkLiBUaGUgVUFSVCBjYW4gYmUKKy8vISBjb25maWd1cmVkIHRvIHVzZSBETUEgZm9yIHRyYW5zbWl0IG9yIHJlY2VpdmUsIGFuZCB0byBkaXNhYmxlCisvLyEgcmVjZWl2ZSBpZiBhbiBlcnJvciBvY2N1cnMuCisvLyEKKy8vISBcbm90ZSBUaGUgdURNQSBjb250cm9sbGVyIG11c3QgYWxzbyBiZSBzZXQgdXAgYmVmb3JlIERNQSBjYW4gYmUgdXNlZAorLy8hIHdpdGggdGhlIFVBUlQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSB1aTMyRE1BRmxhZ3MgaXMgYSBiaXQgbWFzayBvZiB0aGUgRE1BIGZlYXR1cmVzIHRvIGVuYWJsZS4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFVBUlRfRE1BX1JYICAgICAgICAgOiBFbmFibGUgRE1BIGZvciByZWNlaXZlLgorLy8hIC0gVUFSVF9ETUFfVFggICAgICAgICA6IEVuYWJsZSBETUEgZm9yIHRyYW5zbWl0LgorLy8hIC0gVUFSVF9ETUFfRVJSX1JYU1RPUCA6IERpc2FibGUgRE1BIHJlY2VpdmUgb24gVUFSVCBlcnJvci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitVQVJURE1BRW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRE1BRmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSByZXF1ZXN0ZWQgYml0cyBpbiB0aGUgVUFSVCBETUEgY29udHJvbCByZWdpc3Rlci4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0RNQUNUTCkgfD0gdWkzMkRNQUZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIFVBUlQgRE1BIG9wZXJhdGlvbi4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIFVBUlQgRE1BIGZlYXR1cmVzIHRoYXQgd2VyZSBlbmFibGVkCisvLyEgYnkgXHJlZiBVQVJURE1BRW5hYmxlKCkuIFRoZSBzcGVjaWZpZWQgVUFSVCBETUEgZmVhdHVyZXMgYXJlIGRpc2FibGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vISBccGFyYW0gdWkzMkRNQUZsYWdzIGlzIGEgYml0IG1hc2sgb2YgdGhlIERNQSBmZWF0dXJlcyB0byBkaXNhYmxlLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLy8hIC0gVUFSVF9ETUFfUlggICAgICAgICA6IEVuYWJsZSBETUEgZm9yIHJlY2VpdmUuCisvLyEgLSBVQVJUX0RNQV9UWCAgICAgICAgIDogRW5hYmxlIERNQSBmb3IgdHJhbnNtaXQuCisvLyEgLSBVQVJUX0RNQV9FUlJfUlhTVE9QIDogRGlzYWJsZSBETUEgcmVjZWl2ZSBvbiBVQVJUIGVycm9yLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1VBUlRETUFEaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRE1BRmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHJlcXVlc3RlZCBiaXRzIGluIHRoZSBVQVJUIERNQSBjb250cm9sIHJlZ2lzdGVyLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fRE1BQ1RMKSAmPSB+dWkzMkRNQUZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIGN1cnJlbnQgcmVjZWl2ZXIgZXJyb3JzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIGVhY2ggb2YgdGhlIDQgcmVjZWl2ZXIgZXJyb3IKKy8vISBzb3VyY2VzLiBUaGUgcmV0dXJuZWQgZXJyb3JzIGFyZSBlcXVpdmFsZW50IHRvIHRoZSBmb3VyIGVycm9yIGJpdHMKKy8vISByZXR1cm5lZCB2aWEgdGhlIHByZXZpb3VzIGNhbGwgdG8gXHJlZiBVQVJUQ2hhckdldCgpIG9yIFxyZWYgVUFSVENoYXJHZXROb25CbG9ja2luZygpCisvLyEgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIG92ZXJydW4gZXJyb3IgaXMgc2V0IGltbWVkaWF0ZWx5IHRoZSBvdmVycnVuCisvLyEgb2NjdXJzIHJhdGhlciB0aGFuIHdoZW4gYSBjaGFyYWN0ZXIgaXMgbmV4dCByZWFkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBhIGJpdHdpc2UgT1IgY29tYmluYXRpb24gb2YgdGhlIHJlY2VpdmVyIGVycm9yIGZsYWdzOgorLy8hIC0gXHJlZiBVQVJUX1JYRVJST1JfRlJBTUlORworLy8hIC0gXHJlZiBVQVJUX1JYRVJST1JfUEFSSVRZCisvLyEgLSBccmVmIFVBUlRfUlhFUlJPUl9CUkVBSworLy8hIC0gXHJlZiBVQVJUX1JYRVJST1JfT1ZFUlJVTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorVUFSVFJ4RXJyb3JHZXQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSByZWNlaXZlIHN0YXR1cyByZWdpc3Rlci4KKyAgICAvLworICAgIHJldHVybihIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19SU1IpICYgMHgwMDAwMDAwRik7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyBhbGwgcmVwb3J0ZWQgcmVjZWl2ZXIgZXJyb3JzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIGFsbCByZWNlaXZlciBlcnJvciBjb25kaXRpb25zIHJlcG9ydGVkIHZpYQorLy8hIFxyZWYgVUFSVFJ4RXJyb3JHZXQoKS4gSWYgdXNpbmcgdGhlIG92ZXJydW4sIGZyYW1pbmcgZXJyb3IsIHBhcml0eSBlcnJvciBvcgorLy8hIGJyZWFrIGludGVycnVwdHMsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY2xlYXJpbmcgdGhlIGludGVycnVwdAorLy8hIHRvIGVuc3VyZSB0aGF0IGxhdGVyIGVycm9ycyBvZiB0aGUgc2FtZSB0eXBlIHRyaWdnZXIgYW5vdGhlciBpbnRlcnJ1cHQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1VBUlRSeEVycm9yQ2xlYXIodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQW55IHdyaXRlIHRvIHRoZSBFcnJvciBDbGVhciBSZWdpc3RlciB3aWxsIGNsZWFyIGFsbCBiaXRzIHdoaWNoIGFyZQorICAgIC8vIGN1cnJlbnRseSBzZXQuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19FQ1IpID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgZm9yIGJvdGggQ1RTIGFuZCBSVFMKKy8vIQorLy8hIEhhcmR3YXJlIGZsb3cgY29udHJvbCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitVQVJUSHdGbG93Q29udHJvbEVuYWJsZSggdWludDMyX3QgdWkzMkJhc2UgKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCggVUFSVEJhc2VWYWxpZCggdWkzMkJhc2UgKSk7CisKKyAgICBIV1JFRyggdWkzMkJhc2UgKyBVQVJUX09fQ1RMICkgfD0gKCBVQVJUX0NUTF9DVFNFTiB8IFVBUlRfQ1RMX1JUU0VOICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIGhhcmR3YXJlIGZsb3cgY29udHJvbCBmb3IgYm90aCBDVFMgYW5kIFJUUworLy8hCisvLyEgSGFyZHdhcmUgZmxvdyBjb250cm9sIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1VBUlRId0Zsb3dDb250cm9sRGlzYWJsZSggdWludDMyX3QgdWkzMkJhc2UgKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCggVUFSVEJhc2VWYWxpZCggdWkzMkJhc2UgKSk7CisKKyAgICBIV1JFRyggdWkzMkJhc2UgKyBVQVJUX09fQ1RMICkgJj0gfiggVUFSVF9DVExfQ1RTRU4gfCBVQVJUX0NUTF9SVFNFTiApOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX1VBUlRGSUZPTGV2ZWxHZXQKKyAgICAgICAgI3VuZGVmICBVQVJURklGT0xldmVsR2V0CisgICAgICAgICNkZWZpbmUgVUFSVEZJRk9MZXZlbEdldCAgICAgICAgICAgICAgICBST01fVUFSVEZJRk9MZXZlbEdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVUFSVENvbmZpZ1NldEV4cENsaworICAgICAgICAjdW5kZWYgIFVBUlRDb25maWdTZXRFeHBDbGsKKyAgICAgICAgI2RlZmluZSBVQVJUQ29uZmlnU2V0RXhwQ2xrICAgICAgICAgICAgIFJPTV9VQVJUQ29uZmlnU2V0RXhwQ2xrCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9VQVJUQ29uZmlnR2V0RXhwQ2xrCisgICAgICAgICN1bmRlZiAgVUFSVENvbmZpZ0dldEV4cENsaworICAgICAgICAjZGVmaW5lIFVBUlRDb25maWdHZXRFeHBDbGsgICAgICAgICAgICAgUk9NX1VBUlRDb25maWdHZXRFeHBDbGsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1VBUlREaXNhYmxlCisgICAgICAgICN1bmRlZiAgVUFSVERpc2FibGUKKyAgICAgICAgI2RlZmluZSBVQVJURGlzYWJsZSAgICAgICAgICAgICAgICAgICAgIFJPTV9VQVJURGlzYWJsZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVUFSVENoYXJHZXROb25CbG9ja2luZworICAgICAgICAjdW5kZWYgIFVBUlRDaGFyR2V0Tm9uQmxvY2tpbmcKKyAgICAgICAgI2RlZmluZSBVQVJUQ2hhckdldE5vbkJsb2NraW5nICAgICAgICAgIFJPTV9VQVJUQ2hhckdldE5vbkJsb2NraW5nCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9VQVJUQ2hhckdldAorICAgICAgICAjdW5kZWYgIFVBUlRDaGFyR2V0CisgICAgICAgICNkZWZpbmUgVUFSVENoYXJHZXQgICAgICAgICAgICAgICAgICAgICBST01fVUFSVENoYXJHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1VBUlRDaGFyUHV0Tm9uQmxvY2tpbmcKKyAgICAgICAgI3VuZGVmICBVQVJUQ2hhclB1dE5vbkJsb2NraW5nCisgICAgICAgICNkZWZpbmUgVUFSVENoYXJQdXROb25CbG9ja2luZyAgICAgICAgICBST01fVUFSVENoYXJQdXROb25CbG9ja2luZworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVUFSVENoYXJQdXQKKyAgICAgICAgI3VuZGVmICBVQVJUQ2hhclB1dAorICAgICAgICAjZGVmaW5lIFVBUlRDaGFyUHV0ICAgICAgICAgICAgICAgICAgICAgUk9NX1VBUlRDaGFyUHV0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9VQVJUSW50UmVnaXN0ZXIKKyAgICAgICAgI3VuZGVmICBVQVJUSW50UmVnaXN0ZXIKKyAgICAgICAgI2RlZmluZSBVQVJUSW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgIFJPTV9VQVJUSW50UmVnaXN0ZXIKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1VBUlRJbnRVbnJlZ2lzdGVyCisgICAgICAgICN1bmRlZiAgVUFSVEludFVucmVnaXN0ZXIKKyAgICAgICAgI2RlZmluZSBVQVJUSW50VW5yZWdpc3RlciAgICAgICAgICAgICAgIFJPTV9VQVJUSW50VW5yZWdpc3RlcgorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gIF9fVUFSVF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdWRtYS5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMmU4NjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi91ZG1hLmMKQEAgLTAsMCArMSw1NTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICB1ZG1hLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA0LTA3IDE0OjE2OjI4ICswMjAwIChUdWUsIDA3IEFwciAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQzMTYwCisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgdURNQSBjb250cm9sbGVyCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL3VkbWEuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIHVETUFDaGFubmVsQXR0cmlidXRlRW5hYmxlCisgICAgI2RlZmluZSB1RE1BQ2hhbm5lbEF0dHJpYnV0ZUVuYWJsZSAgICAgIE5PUk9NX3VETUFDaGFubmVsQXR0cmlidXRlRW5hYmxlCisgICAgI3VuZGVmICB1RE1BQ2hhbm5lbEF0dHJpYnV0ZURpc2FibGUKKyAgICAjZGVmaW5lIHVETUFDaGFubmVsQXR0cmlidXRlRGlzYWJsZSAgICAgTk9ST01fdURNQUNoYW5uZWxBdHRyaWJ1dGVEaXNhYmxlCisgICAgI3VuZGVmICB1RE1BQ2hhbm5lbEF0dHJpYnV0ZUdldAorICAgICNkZWZpbmUgdURNQUNoYW5uZWxBdHRyaWJ1dGVHZXQgICAgICAgICBOT1JPTV91RE1BQ2hhbm5lbEF0dHJpYnV0ZUdldAorICAgICN1bmRlZiAgdURNQUNoYW5uZWxDb250cm9sU2V0CisgICAgI2RlZmluZSB1RE1BQ2hhbm5lbENvbnRyb2xTZXQgICAgICAgICAgIE5PUk9NX3VETUFDaGFubmVsQ29udHJvbFNldAorICAgICN1bmRlZiAgdURNQUNoYW5uZWxUcmFuc2ZlclNldAorICAgICNkZWZpbmUgdURNQUNoYW5uZWxUcmFuc2ZlclNldCAgICAgICAgICBOT1JPTV91RE1BQ2hhbm5lbFRyYW5zZmVyU2V0CisgICAgI3VuZGVmICB1RE1BQ2hhbm5lbFNjYXR0ZXJHYXRoZXJTZXQKKyAgICAjZGVmaW5lIHVETUFDaGFubmVsU2NhdHRlckdhdGhlclNldCAgICAgTk9ST01fdURNQUNoYW5uZWxTY2F0dGVyR2F0aGVyU2V0CisgICAgI3VuZGVmICB1RE1BQ2hhbm5lbFNpemVHZXQKKyAgICAjZGVmaW5lIHVETUFDaGFubmVsU2l6ZUdldCAgICAgICAgICAgICAgTk9ST01fdURNQUNoYW5uZWxTaXplR2V0CisgICAgI3VuZGVmICB1RE1BQ2hhbm5lbE1vZGVHZXQKKyAgICAjZGVmaW5lIHVETUFDaGFubmVsTW9kZUdldCAgICAgICAgICAgICAgTk9ST01fdURNQUNoYW5uZWxNb2RlR2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBFbmFibGVzIGF0dHJpYnV0ZXMgb2YgYSB1RE1BIGNoYW5uZWwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCit1RE1BQ2hhbm5lbEF0dHJpYnV0ZUVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQXR0cikKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyQ2hhbm5lbE51bSA8IFVETUFfTlVNX0NIQU5ORUxTKTsKKyAgICBBU1NFUlQoKHVpMzJBdHRyICYgfihVRE1BX0FUVFJfVVNFQlVSU1QgfCBVRE1BX0FUVFJfQUxUU0VMRUNUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVRE1BX0FUVFJfSElHSF9QUklPUklUWSB8IFVETUFfQVRUUl9SRVFNQVNLKSkgPT0gMCk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgdXNlYnVyc3QgYml0IGZvciB0aGlzIGNoYW5uZWwgaWYgc2V0IGluIHVpMzJBdHRyLgorICAgIC8vCisgICAgaWYodWkzMkF0dHIgJiBVRE1BX0FUVFJfVVNFQlVSU1QpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19TRVRCVVJTVCkgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworICAgIH0KKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBhbHRlcm5hdGUgY29udHJvbCBzZWxlY3QgYml0IGZvciB0aGlzIGNoYW5uZWwsCisgICAgLy8gaWYgc2V0IGluIHVpMzJBdHRyLgorICAgIC8vCisgICAgaWYodWkzMkF0dHIgJiBVRE1BX0FUVFJfQUxUU0VMRUNUKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fU0VUQ0hOTFBSSUFMVCkgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworICAgIH0KKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBoaWdoIHByaW9yaXR5IGJpdCBmb3IgdGhpcyBjaGFubmVsLCBpZiBzZXQgaW4gdWkzMkF0dHIuCisgICAgLy8KKyAgICBpZih1aTMyQXR0ciAmIFVETUFfQVRUUl9ISUdIX1BSSU9SSVRZKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fU0VUQ0hOTFBSSU9SSVRZKSA9IDEgPDwgdWkzMkNoYW5uZWxOdW07CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHJlcXVlc3QgbWFzayBiaXQgZm9yIHRoaXMgY2hhbm5lbCwgaWYgc2V0IGluIHVpMzJBdHRyLgorICAgIC8vCisgICAgaWYodWkzMkF0dHIgJiBVRE1BX0FUVFJfUkVRTUFTSykKKyAgICB7CisgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX1NFVFJFUU1BU0spID0gMSA8PCB1aTMyQ2hhbm5lbE51bTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRGlzYWJsZXMgYXR0cmlidXRlcyBvZiBhbiB1RE1BIGNoYW5uZWwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCit1RE1BQ2hhbm5lbEF0dHJpYnV0ZURpc2FibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJBdHRyKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJDaGFubmVsTnVtIDwgVURNQV9OVU1fQ0hBTk5FTFMpOworICAgIEFTU0VSVCgodWkzMkF0dHIgJiB+KFVETUFfQVRUUl9VU0VCVVJTVCB8IFVETUFfQVRUUl9BTFRTRUxFQ1QgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFVETUFfQVRUUl9ISUdIX1BSSU9SSVRZIHwgVURNQV9BVFRSX1JFUU1BU0spKSA9PSAwKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHVzZWJ1cnN0IGJpdCBmb3IgdGhpcyBjaGFubmVsIGlmIHNldCBpbiB1aTMyQXR0ci4KKyAgICAvLworICAgIGlmKHVpMzJBdHRyICYgVURNQV9BVFRSX1VTRUJVUlNUKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ0xFQVJCVVJTVCkgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIGFsdGVybmF0ZSBjb250cm9sIHNlbGVjdCBiaXQgZm9yIHRoaXMgY2hhbm5lbCwgaWYgc2V0IGluCisgICAgLy8gdWx1bEF0dHIuCisgICAgLy8KKyAgICBpZih1aTMyQXR0ciAmIFVETUFfQVRUUl9BTFRTRUxFQ1QpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DTEVBUkNITkxQUklBTFQpID0gMSA8PCB1aTMyQ2hhbm5lbE51bTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSBoaWdoIHByaW9yaXR5IGJpdCBmb3IgdGhpcyBjaGFubmVsLCBpZiBzZXQgaW4gdWkzMkF0dHIuCisgICAgLy8KKyAgICBpZih1aTMyQXR0ciAmIFVETUFfQVRUUl9ISUdIX1BSSU9SSVRZKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ0xFQVJDSE5MUFJJT1JJVFkpID0gMSA8PCB1aTMyQ2hhbm5lbE51bTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSByZXF1ZXN0IG1hc2sgYml0IGZvciB0aGlzIGNoYW5uZWwsIGlmIHNldCBpbiB1aTMyQXR0ci4KKyAgICAvLworICAgIGlmKHVpMzJBdHRyICYgVURNQV9BVFRSX1JFUU1BU0spCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DTEVBUlJFUU1BU0spID0gMSA8PCB1aTMyQ2hhbm5lbE51bTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0cyB0aGUgZW5hYmxlZCBhdHRyaWJ1dGVzIG9mIGEgdURNQSBjaGFubmVsCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK3VETUFDaGFubmVsQXR0cmlidXRlR2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSkKK3sKKyAgICB1aW50MzJfdCB1aTMyQXR0ciA9IDA7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyQ2hhbm5lbE51bSA8IFVETUFfTlVNX0NIQU5ORUxTKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHVzZWJ1cnN0IGJpdCBpcyBzZXQgZm9yIHRoaXMgY2hhbm5lbC4KKyAgICAvLworICAgIGlmKEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX1NFVEJVUlNUKSAmICgxIDw8IHVpMzJDaGFubmVsTnVtKSkKKyAgICB7CisgICAgICAgIHVpMzJBdHRyIHw9IFVETUFfQVRUUl9VU0VCVVJTVDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgYWx0ZXJuYXRlIGNvbnRyb2wgYml0IGlzIHNldCBmb3IgdGhpcyBjaGFubmVsLgorICAgIC8vCisgICAgaWYoSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fU0VUQ0hOTFBSSUFMVCkgJiAoMSA8PCB1aTMyQ2hhbm5lbE51bSkpCisgICAgeworICAgICAgICB1aTMyQXR0ciB8PSBVRE1BX0FUVFJfQUxUU0VMRUNUOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBoaWdoIHByaW9yaXR5IGJpdCBpcyBzZXQgZm9yIHRoaXMgY2hhbm5lbC4KKyAgICAvLworICAgIGlmKEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX1NFVENITkxQUklPUklUWSkgJiAoMSA8PCB1aTMyQ2hhbm5lbE51bSkpCisgICAgeworICAgICAgICB1aTMyQXR0ciB8PSBVRE1BX0FUVFJfSElHSF9QUklPUklUWTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgcmVxdWVzdCBtYXNrIGJpdCBpcyBzZXQgZm9yIHRoaXMgY2hhbm5lbC4KKyAgICAvLworICAgIGlmKEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX1NFVFJFUU1BU0spICYgKDEgPDwgdWkzMkNoYW5uZWxOdW0pKQorICAgIHsKKyAgICAgICAgdWkzMkF0dHIgfD0gVURNQV9BVFRSX1JFUU1BU0s7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gZmxhZ3MuCisgICAgLy8KKyAgICByZXR1cm4odWkzMkF0dHIpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFNldHMgdGhlIGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgYSB1RE1BIGNoYW5uZWwgY29udHJvbCBzdHJ1Y3R1cmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCit1RE1BQ2hhbm5lbENvbnRyb2xTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsU3RydWN0SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNvbnRyb2wpCit7CisgICAgdERNQUNvbnRyb2xUYWJsZSAqcENvbnRyb2xUYWJsZTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJDaGFubmVsU3RydWN0SW5kZXggPCAoVURNQV9OVU1fQ0hBTk5FTFMgKiAyKSk7CisgICAgQVNTRVJUKEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NUUkwpICE9IDApOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29udHJvbCB0YWJsZS4KKyAgICAvLworICAgIHBDb250cm9sVGFibGUgPSAodERNQUNvbnRyb2xUYWJsZSAqKUhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NUUkwpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY29udHJvbCB3b3JkIHZhbHVlIGFuZCBtYXNrIG9mZiB0aGUgZmllbGRzIHRvIGJlCisgICAgLy8gY2hhbmdlZCwgdGhlbiBPUiBpbiB0aGUgbmV3IHNldHRpbmdzLgorICAgIC8vCisgICAgcENvbnRyb2xUYWJsZVt1aTMyQ2hhbm5lbFN0cnVjdEluZGV4XS51aTMyQ29udHJvbCA9CisgICAgICAgICgocENvbnRyb2xUYWJsZVt1aTMyQ2hhbm5lbFN0cnVjdEluZGV4XS51aTMyQ29udHJvbCAmCisgICAgICAgICAgfihVRE1BX0RTVF9JTkNfTSB8CisgICAgICAgICAgICBVRE1BX1NSQ19JTkNfTSB8CisgICAgICAgICAgICBVRE1BX1NJWkVfTSB8CisgICAgICAgICAgICBVRE1BX0FSQl9NIHwKKyAgICAgICAgICAgIFVETUFfTkVYVF9VU0VCVVJTVCkpIHwKKyAgICAgICAgIHVpMzJDb250cm9sKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTZXRzIHRoZSB0cmFuc2ZlciBwYXJhbWV0ZXJzIGZvciBhIHVETUEgY2hhbm5lbCBjb250cm9sIHN0cnVjdHVyZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK3VETUFDaGFubmVsVHJhbnNmZXJTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsU3RydWN0SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJNb2RlLCB2b2lkICpwdlNyY0FkZHIsIHZvaWQgKnB2RHN0QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlRyYW5zZmVyU2l6ZSkKK3sKKyAgICB0RE1BQ29udHJvbFRhYmxlICpwQ29udHJvbFRhYmxlOworICAgIHVpbnQzMl90IHVpMzJDb250cm9sOworICAgIHVpbnQzMl90IHVpMzJJbmM7CisgICAgdWludDMyX3QgdWkzMkJ1ZmZlckJ5dGVzOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCA8IChVRE1BX05VTV9DSEFOTkVMUyAqIDIpKTsKKyAgICBBU1NFUlQoSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ1RSTCkgIT0gMCk7CisgICAgQVNTRVJUKHVpMzJNb2RlIDw9IFVETUFfTU9ERV9QRVJfU0NBVFRFUl9HQVRIRVIpOworICAgIEFTU0VSVCgodWludDMyX3QpcHZTcmNBZGRyID49IFNSQU1fQkFTRSk7CisgICAgQVNTRVJUKCh1aW50MzJfdClwdkRzdEFkZHIgPj0gU1JBTV9CQVNFKTsKKyAgICBBU1NFUlQoKHVpMzJUcmFuc2ZlclNpemUgIT0gMCkgJiYgKHVpMzJUcmFuc2ZlclNpemUgPD0gVURNQV9YRkVSX1NJWkVfTUFYKSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sIHRhYmxlLgorICAgIC8vCisgICAgcENvbnRyb2xUYWJsZSA9ICh0RE1BQ29udHJvbFRhYmxlICopSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ1RSTCk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY3VycmVudCBjb250cm9sIHdvcmQgdmFsdWUgYW5kIG1hc2sgb2ZmIHRoZSBtb2RlIGFuZCBzaXplCisgICAgLy8gZmllbGRzLgorICAgIC8vCisgICAgdWkzMkNvbnRyb2wgPSAocENvbnRyb2xUYWJsZVt1aTMyQ2hhbm5lbFN0cnVjdEluZGV4XS51aTMyQ29udHJvbCAmCisgICAgICAgICAgICAgICAgICAgfihVRE1BX1hGRVJfU0laRV9NIHwgVURNQV9NT0RFX00pKTsKKworICAgIC8vCisgICAgLy8gQWRqdXN0IHRoZSBtb2RlIGlmIHRoZSBhbHQgY29udHJvbCBzdHJ1Y3R1cmUgaXMgc2VsZWN0ZWQuCisgICAgLy8KKyAgICBpZih1aTMyQ2hhbm5lbFN0cnVjdEluZGV4ICYgVURNQV9BTFRfU0VMRUNUKQorICAgIHsKKyAgICAgICAgaWYoKHVpMzJNb2RlID09IFVETUFfTU9ERV9NRU1fU0NBVFRFUl9HQVRIRVIpIHx8CisgICAgICAgICAgICh1aTMyTW9kZSA9PSBVRE1BX01PREVfUEVSX1NDQVRURVJfR0FUSEVSKSkKKyAgICAgICAgeworICAgICAgICAgICAgdWkzMk1vZGUgfD0gVURNQV9NT0RFX0FMVF9TRUxFQ1Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgdHJhbnNmZXIgc2l6ZSBhbmQgbW9kZSBpbiB0aGUgY29udHJvbCB3b3JkIChidXQgZG9uJ3Qgd3JpdGUgdGhlCisgICAgLy8gY29udHJvbCB3b3JkIHlldCBhcyBpdCBjb3VsZCBraWNrIG9mZiBhIHRyYW5zZmVyKS4KKyAgICAvLworICAgIHVpMzJDb250cm9sIHw9IHVpMzJNb2RlIHwgKCh1aTMyVHJhbnNmZXJTaXplIC0gMSkgPDwgVURNQV9YRkVSX1NJWkVfUyk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgYWRkcmVzcyBpbmNyZW1lbnQgdmFsdWUgZm9yIHRoZSBzb3VyY2UsIGZyb20gdGhlIGNvbnRyb2wgd29yZC4KKyAgICAvLworICAgIHVpMzJJbmMgPSAodWkzMkNvbnRyb2wgJiBVRE1BX1NSQ19JTkNfTSk7CisKKyAgICAvLworICAgIC8vIENvbXB1dGUgdGhlIGVuZGluZyBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgdHJhbnNmZXIuICBJZiB0aGUgc291cmNlCisgICAgLy8gaW5jcmVtZW50IGlzIHNldCB0byBub25lLCB0aGVuIHRoZSBlbmRpbmcgYWRkcmVzcyBpcyB0aGUgc2FtZSBhcyB0aGUKKyAgICAvLyBiZWdpbm5pbmcuCisgICAgLy8KKyAgICBpZih1aTMySW5jICE9IFVETUFfU1JDX0lOQ19OT05FKQorICAgIHsKKyAgICAgICAgdWkzMkluYyA9IHVpMzJJbmMgPj4gVURNQV9TUkNfSU5DX1M7CisgICAgICAgIHVpMzJCdWZmZXJCeXRlcyA9IHVpMzJUcmFuc2ZlclNpemUgPDwgdWkzMkluYzsKKyAgICAgICAgcHZTcmNBZGRyID0gKHZvaWQgKikoKHVpbnQzMl90KXB2U3JjQWRkciArIHVpMzJCdWZmZXJCeXRlcyAtICgxIDw8IHVpMzJJbmMpKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIExvYWQgdGhlIHNvdXJjZSBlbmRpbmcgYWRkcmVzcyBpbnRvIHRoZSBjb250cm9sIGJsb2NrLgorICAgIC8vCisgICAgcENvbnRyb2xUYWJsZVt1aTMyQ2hhbm5lbFN0cnVjdEluZGV4XS5wdlNyY0VuZEFkZHIgPSBwdlNyY0FkZHI7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgYWRkcmVzcyBpbmNyZW1lbnQgdmFsdWUgZm9yIHRoZSBkZXN0aW5hdGlvbiwgZnJvbSB0aGUgY29udHJvbAorICAgIC8vIHdvcmQuCisgICAgLy8KKyAgICB1aTMySW5jID0gdWkzMkNvbnRyb2wgJiBVRE1BX0RTVF9JTkNfTTsKKworICAgIC8vCisgICAgLy8gQ29tcHV0ZSB0aGUgZW5kaW5nIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIHRyYW5zZmVyLiAgSWYgdGhlCisgICAgLy8gZGVzdGluYXRpb24gaW5jcmVtZW50IGlzIHNldCB0byBub25lLCB0aGVuIHRoZSBlbmRpbmcgYWRkcmVzcyBpcyB0aGUKKyAgICAvLyBzYW1lIGFzIHRoZSBiZWdpbm5pbmcuCisgICAgLy8KKyAgICBpZih1aTMySW5jICE9IFVETUFfRFNUX0lOQ19OT05FKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgaWYgdGhpcyBpcyBzZXR0aW5nIHVwIGEgc2NhdHRlci1nYXRoZXIKKyAgICAgICAgLy8gdHJhbnNmZXIuICBUaGUgZGVzdGluYXRpb24gcG9pbnRlciBuZWVkcyB0byBwb2ludCB0byB0aGUgZW5kIG9mCisgICAgICAgIC8vIHRoZSBhbHRlcm5hdGUgc3RydWN0dXJlIGZvciB0aGlzIGNoYW5uZWwgaW5zdGVhZCBvZiBjYWxjdWxhdGluZworICAgICAgICAvLyB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaW4gdGhlIG5vcm1hbCB3YXkuCisgICAgICAgIC8vCisgICAgICAgIGlmKCh1aTMyTW9kZSA9PSBVRE1BX01PREVfTUVNX1NDQVRURVJfR0FUSEVSKSB8fAorICAgICAgICAgICAodWkzMk1vZGUgPT0gVURNQV9NT0RFX1BFUl9TQ0FUVEVSX0dBVEhFUikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB2RHN0QWRkciA9CisgICAgICAgICAgICAgICAgKHZvaWQgKikmcENvbnRyb2xUYWJsZVt1aTMyQ2hhbm5lbFN0cnVjdEluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVETUFfQUxUX1NFTEVDVF0udWkzMlNwYXJlOworICAgICAgICB9CisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdCBhIHNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVyLCBjYWxjdWxhdGUgZW5kIHBvaW50ZXIgbm9ybWFsbHkuCisgICAgICAgIC8vCisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdWkzMkluYyA9IHVpMzJJbmMgPj4gVURNQV9EU1RfSU5DX1M7CisgICAgICAgICAgICB1aTMyQnVmZmVyQnl0ZXMgPSB1aTMyVHJhbnNmZXJTaXplIDw8IHVpMzJJbmM7CisgICAgICAgICAgICBwdkRzdEFkZHIgPSAodm9pZCAqKSgodWludDMyX3QpcHZEc3RBZGRyICsgdWkzMkJ1ZmZlckJ5dGVzIC0gMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIExvYWQgdGhlIGRlc3RpbmF0aW9uIGVuZGluZyBhZGRyZXNzIGludG8gdGhlIGNvbnRyb2wgYmxvY2suCisgICAgLy8KKyAgICBwQ29udHJvbFRhYmxlW3VpMzJDaGFubmVsU3RydWN0SW5kZXhdLnB2RHN0RW5kQWRkciA9IHB2RHN0QWRkcjsKKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIG5ldyBjb250cm9sIHdvcmQgdmFsdWUuCisgICAgLy8KKyAgICBwQ29udHJvbFRhYmxlW3VpMzJDaGFubmVsU3RydWN0SW5kZXhdLnVpMzJDb250cm9sID0gdWkzMkNvbnRyb2w7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29uZmlndXJlcyBhIHVETUEgY2hhbm5lbCBmb3Igc2NhdHRlci1nYXRoZXIgbW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK3VETUFDaGFubmVsU2NhdHRlckdhdGhlclNldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlRhc2tDb3VudCwgdm9pZCAqcHZUYXNrTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMySXNQZXJpcGhTRykKK3sKKyAgICB0RE1BQ29udHJvbFRhYmxlICpwQ29udHJvbFRhYmxlOworICAgIHRETUFDb250cm9sVGFibGUgKnBUYXNrVGFibGU7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBwYXJhbWV0ZXJzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkNoYW5uZWxOdW0gPCBVRE1BX05VTV9DSEFOTkVMUyk7CisgICAgQVNTRVJUKEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NUUkwpICE9IDApOworICAgIEFTU0VSVChwdlRhc2tMaXN0ICE9IDApOworICAgIEFTU0VSVCh1aTMyVGFza0NvdW50IDw9IFVETUFfWEZFUl9TSVpFX01BWCk7CisgICAgQVNTRVJUKHVpMzJUYXNrQ291bnQgIT0gMCk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sIHRhYmxlLgorICAgIC8vCisgICAgcENvbnRyb2xUYWJsZSA9ICh0RE1BQ29udHJvbFRhYmxlICopSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ1RSTCk7CisKKyAgICAvLworICAgIC8vIEdldCBhIGhhbmR5IHBvaW50ZXIgdG8gdGhlIHRhc2sgbGlzdC4KKyAgICAvLworICAgIHBUYXNrVGFibGUgPSAodERNQUNvbnRyb2xUYWJsZSAqKXB2VGFza0xpc3Q7CisKKyAgICAvLworICAgIC8vIENvbXB1dGUgdGhlIGVuZGluZyBhZGRyZXNzIGZvciB0aGUgc291cmNlIHBvaW50ZXIuIFRoaXMgd2lsbCBiZSB0aGUKKyAgICAvLyBsYXN0IGVsZW1lbnQgb2YgdGhlIGxhc3QgdGFzayBpbiB0aGUgdGFzayB0YWJsZS4KKyAgICAvLworICAgIHBDb250cm9sVGFibGVbdWkzMkNoYW5uZWxOdW1dLnB2U3JjRW5kQWRkciA9CisgICAgICAgICZwVGFza1RhYmxlW3VpMzJUYXNrQ291bnQgLSAxXS51aTMyU3BhcmU7CisKKyAgICAvLworICAgIC8vIENvbXB1dGUgdGhlIGVuZGluZyBhZGRyZXNzIGZvciB0aGUgZGVzdGluYXRpb24gcG9pbnRlci4gVGhpcyB3aWxsIGJlCisgICAgLy8gdGhlIGVuZCBvZiB0aGUgYWx0ZXJuYXRlIHN0cnVjdHVyZSBmb3IgdGhpcyBjaGFubmVsLgorICAgIC8vCisgICAgcENvbnRyb2xUYWJsZVt1aTMyQ2hhbm5lbE51bV0ucHZEc3RFbmRBZGRyID0KKyAgICAgICAgJnBDb250cm9sVGFibGVbdWkzMkNoYW5uZWxOdW0gfCBVRE1BX0FMVF9TRUxFQ1RdLnVpMzJTcGFyZTsKKworICAgIC8vCisgICAgLy8gQ29tcHV0ZSB0aGUgY29udHJvbCB3b3JkLiAgTW9zdCBjb25maWd1cmFibGUgaXRlbXMgYXJlIGZpeGVkIGZvcgorICAgIC8vIHNjYXR0ZXItZ2F0aGVyLiBJdGVtIGFuZCBpbmNyZW1lbnQgc2l6ZXMgYXJlIGFsbCAzMi1iaXQgYW5kIGFyYgorICAgIC8vIHNpemUgbXVzdCBiZSA0LiBUaGUgY291bnQgaXMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGFzayBsaXN0CisgICAgLy8gdGltZXMgNCAoNCB3b3JkcyBwZXIgdGFzaykuCisgICAgLy8KKyAgICBwQ29udHJvbFRhYmxlW3VpMzJDaGFubmVsTnVtXS51aTMyQ29udHJvbCA9CisgICAgICAgIChVRE1BX0RTVF9JTkNfMzIgfCBVRE1BX1NSQ19JTkNfMzIgfAorICAgICAgICAgVURNQV9TSVpFXzMyIHwgVURNQV9BUkJfNCB8CisgICAgICAgICAoKCh1aTMyVGFza0NvdW50ICogNCkgLSAxKSA8PCBVRE1BX1hGRVJfU0laRV9TKSB8CisgICAgICAgICAodWkzMklzUGVyaXBoU0cgPyBVRE1BX01PREVfUEVSX1NDQVRURVJfR0FUSEVSIDoKKyAgICAgICAgICBVRE1BX01PREVfTUVNX1NDQVRURVJfR0FUSEVSKSk7CisKKyAgICAvLworICAgIC8vIFNjYXR0ZXItZ2F0aGVyIG9wZXJhdGlvbnMgY2FuIGxlYXZlIHRoZSBhbHQgYml0IHNldC4gIFNvIGlmIGRvaW5nCisgICAgLy8gYmFjayB0byBiYWNrIHNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVycywgdGhlIHNlY29uZCBhdHRlbXB0IG1heSBub3QKKyAgICAvLyB3b3JrIGNvcnJlY3RseSBiZWNhdXNlIHRoZSBhbHQgYml0IGlzIHNldC4gIFRoZXJlZm9yZSwgY2xlYXIgdGhlCisgICAgLy8gYWx0IGJpdCBoZXJlIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGFsd2F5cyBjbGVhcmVkIGJlZm9yZSBhIG5ldyBTRworICAgIC8vIHRyYW5zZmVyIGlzIHN0YXJ0ZWQuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DTEVBUkNITkxQUklBTFQpID0gMSA8PCB1aTMyQ2hhbm5lbE51bTsKKworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldHMgdGhlIGN1cnJlbnQgdHJhbnNmZXIgc2l6ZSBmb3IgYSB1RE1BIGNoYW5uZWwgY29udHJvbCBzdHJ1Y3R1cmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAordURNQUNoYW5uZWxTaXplR2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbFN0cnVjdEluZGV4KQoreworICAgIHRETUFDb250cm9sVGFibGUgKnBDb250cm9sVGFibGU7CisgICAgdWludDMyX3QgdWkzMkNvbnRyb2w7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyQ2hhbm5lbFN0cnVjdEluZGV4IDwgKFVETUFfTlVNX0NIQU5ORUxTICogMikpOworICAgIEFTU0VSVChIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DVFJMKSAhPSAwKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgdGFibGUuCisgICAgLy8KKyAgICBwQ29udHJvbFRhYmxlID0gKHRETUFDb250cm9sVGFibGUgKilIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DVFJMKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjdXJyZW50IGNvbnRyb2wgd29yZCB2YWx1ZSBhbmQgbWFzayBvZmYgYWxsIGJ1dCB0aGUgc2l6ZSBmaWVsZAorICAgIC8vIGFuZCB0aGUgbW9kZSBmaWVsZC4KKyAgICAvLworICAgIHVpMzJDb250cm9sID0gKHBDb250cm9sVGFibGVbdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleF0udWkzMkNvbnRyb2wgJgorICAgICAgICAgICAgICAgICAgIChVRE1BX1hGRVJfU0laRV9NIHwgVURNQV9NT0RFX00pKTsKKworICAgIC8vCisgICAgLy8gSWYgdGhlIHNpemUgZmllbGQgYW5kIG1vZGUgZmllbGQgYXJlIDAgdGhlbiB0aGUgdHJhbnNmZXIgaXMgZmluaXNoZWQKKyAgICAvLyBhbmQgdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMgdG8gdHJhbnNmZXIuCisgICAgLy8KKyAgICBpZih1aTMyQ29udHJvbCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIC8vCisgICAgLy8gT3RoZXJ3aXNlLCBpZiBlaXRoZXIgdGhlIHNpemUgZmllbGQgb3IgbW9yZSBmaWVsZCBpcyBub24temVybywgdGhlbgorICAgIC8vIG5vdCBhbGwgdGhlIGl0ZW1zIGhhdmUgYmVlbiB0cmFuc2ZlcnJlZC4KKyAgICAvLworICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFNoaWZ0IHRoZSBzaXplIGZpZWxkIGFuZCBhZGQgb25lLCB0aGVuIHJldHVybiB0byB1c2VyLgorICAgICAgICAvLworICAgICAgICByZXR1cm4oKHVpMzJDb250cm9sID4+IFVETUFfWEZFUl9TSVpFX1MpICsgMSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldHMgdGhlIHRyYW5zZmVyIG1vZGUgZm9yIGEgdURNQSBjaGFubmVsIGNvbnRyb2wgc3RydWN0dXJlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK3VETUFDaGFubmVsTW9kZUdldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCkKK3sKKyAgICB0RE1BQ29udHJvbFRhYmxlICpwQ29udHJvbFRhYmxlOworICAgIHVpbnQzMl90IHVpMzJDb250cm9sOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCA8IChVRE1BX05VTV9DSEFOTkVMUyAqIDIpKTsKKyAgICBBU1NFUlQoSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ1RSTCkgIT0gMCk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sIHRhYmxlLgorICAgIC8vCisgICAgcENvbnRyb2xUYWJsZSA9ICh0RE1BQ29udHJvbFRhYmxlICopSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ1RSTCk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY3VycmVudCBjb250cm9sIHdvcmQgdmFsdWUgYW5kIG1hc2sgb2ZmIGFsbCBidXQgdGhlIG1vZGUgZmllbGQuCisgICAgLy8KKyAgICB1aTMyQ29udHJvbCA9IChwQ29udHJvbFRhYmxlW3VpMzJDaGFubmVsU3RydWN0SW5kZXhdLnVpMzJDb250cm9sICYKKyAgICAgICAgICAgICAgICAgICBVRE1BX01PREVfTSk7CisKKyAgICAvLworICAgIC8vIENoZWNrIGlmIHNjYXR0ZXIvZ2F0aGVyIG1vZGUsIGFuZCBpZiBzbywgbWFzayBvZmYgdGhlIGFsdCBiaXQuCisgICAgLy8KKyAgICBpZigoKHVpMzJDb250cm9sICYgflVETUFfTU9ERV9BTFRfU0VMRUNUKSA9PSBVRE1BX01PREVfTUVNX1NDQVRURVJfR0FUSEVSKSB8fAorICAgICAgICgodWkzMkNvbnRyb2wgJiB+VURNQV9NT0RFX0FMVF9TRUxFQ1QpID09IFVETUFfTU9ERV9QRVJfU0NBVFRFUl9HQVRIRVIpKQorICAgIHsKKyAgICAgICAgdWkzMkNvbnRyb2wgJj0gflVETUFfTU9ERV9BTFRfU0VMRUNUOworICAgIH0KKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBtb2RlIHRvIHRoZSBjYWxsZXIuCisgICAgLy8KKyAgICByZXR1cm4odWkzMkNvbnRyb2wpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdWRtYS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdWRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0M2U1NzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi91ZG1hLmgKQEAgLTAsMCArMSwxMzI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgdWRtYS5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMS0xNyAwOTo1MDoxNCArMDEwMCAoVHVlLCAxNyBOb3YgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTEwMQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSB1RE1BIGNvbnRyb2xsZXIuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHBlcmlwaGVyYWxfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIHVkbWFfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19VRE1BX0hfXworI2RlZmluZSBfX1VETUFfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdWRtYS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgdURNQUNoYW5uZWxBdHRyaWJ1dGVFbmFibGUgICAgICBOT1JPTV91RE1BQ2hhbm5lbEF0dHJpYnV0ZUVuYWJsZQorICAgICNkZWZpbmUgdURNQUNoYW5uZWxBdHRyaWJ1dGVEaXNhYmxlICAgICBOT1JPTV91RE1BQ2hhbm5lbEF0dHJpYnV0ZURpc2FibGUKKyAgICAjZGVmaW5lIHVETUFDaGFubmVsQXR0cmlidXRlR2V0ICAgICAgICAgTk9ST01fdURNQUNoYW5uZWxBdHRyaWJ1dGVHZXQKKyAgICAjZGVmaW5lIHVETUFDaGFubmVsQ29udHJvbFNldCAgICAgICAgICAgTk9ST01fdURNQUNoYW5uZWxDb250cm9sU2V0CisgICAgI2RlZmluZSB1RE1BQ2hhbm5lbFRyYW5zZmVyU2V0ICAgICAgICAgIE5PUk9NX3VETUFDaGFubmVsVHJhbnNmZXJTZXQKKyAgICAjZGVmaW5lIHVETUFDaGFubmVsU2NhdHRlckdhdGhlclNldCAgICAgTk9ST01fdURNQUNoYW5uZWxTY2F0dGVyR2F0aGVyU2V0CisgICAgI2RlZmluZSB1RE1BQ2hhbm5lbFNpemVHZXQgICAgICAgICAgICAgIE5PUk9NX3VETUFDaGFubmVsU2l6ZUdldAorICAgICNkZWZpbmUgdURNQUNoYW5uZWxNb2RlR2V0ICAgICAgICAgICAgICBOT1JPTV91RE1BQ2hhbm5lbE1vZGVHZXQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBBIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgYW4gZW50cnkgaW4gdGhlIGNoYW5uZWwgY29udHJvbCB0YWJsZS4KKy8vIQorLy8hIFRoZXNlIGZpZWxkcyBhcmUgdXNlZCBieSB0aGUgdURNQSBjb250cm9sbGVyIGFuZCBub3JtYWxseSBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvcgorLy8hIHNvZnR3YXJlIHRvIGRpcmVjdGx5IHJlYWQgb3Igd3JpdGUgZmllbGRzIGluIHRoZSB0YWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit0eXBlZGVmIHN0cnVjdAoreworICAgIHZvbGF0aWxlIHZvaWQgKnB2U3JjRW5kQWRkcjsgICAvLyE8IFRoZSBlbmRpbmcgc291cmNlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgdHJhbnNmZXIuCisgICAgdm9sYXRpbGUgdm9pZCAqcHZEc3RFbmRBZGRyOyAgIC8vITwgVGhlIGVuZGluZyBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBkYXRhIHRyYW5zZmVyLgorICAgIHZvbGF0aWxlIHVpbnQzMl90IHVpMzJDb250cm9sOyAvLyE8IFRoZSBjaGFubmVsIGNvbnRyb2wgbW9kZS4KKyAgICB2b2xhdGlsZSB1aW50MzJfdCB1aTMyU3BhcmU7ICAgLy8hPCBBbiB1bnVzZWQgbG9jYXRpb24uCit9Cit0RE1BQ29udHJvbFRhYmxlOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBBIGhlbHBlciBtYWNybyBmb3IgYnVpbGRpbmcgc2NhdHRlci1nYXRoZXIgdGFzayB0YWJsZSBlbnRyaWVzLgorLy8hCisvLyEgVGhpcyBtYWNybyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGhlbHAgcG9wdWxhdGUgYSB0YWJsZSBvZiB1RE1BIHRhc2tzCisvLyEgZm9yIGEgc2NhdHRlci1nYXRoZXIgdHJhbnNmZXIuIFRoaXMgbWFjcm8gd2lsbCBjYWxjdWxhdGUgdGhlIHZhbHVlcyBmb3IKKy8vISB0aGUgZmllbGRzIG9mIGEgdGFzayBzdHJ1Y3R1cmUgZW50cnkgYmFzZWQgb24gdGhlIGlucHV0IHBhcmFtZXRlcnMuCisvLyEKKy8vISBUaGVyZSBhcmUgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGZvciB0aGUgdmFsdWVzIG9mIGVhY2ggcGFyYW1ldGVyLiAgTm8KKy8vISBjaGVja2luZyBpcyBkb25lIHNvIGl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gZW5zdXJlIHRoYXQgY29ycmVjdCB2YWx1ZXMKKy8vISBhcmUgdXNlZCBmb3IgdGhlIHBhcmFtZXRlcnMuCisvLyEKKy8vISBUaGlzIG1hY3JvIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBpbmRpdmlkdWFsIGVudHJpZXMgb2YKKy8vISBhIHN0cnVjdHVyZSBvZiB0RE1BQ29udHJvbFRhYmxlIHR5cGUsIGxpa2UgdGhpczoKKy8vIQorLyohCitcdmVyYmF0aW0KKyAgdERNQUNvbnRyb2xUYWJsZSBNeVRhc2tMaXN0W10gPQorICB7CisgICAgICB1RE1BVGFza1N0cnVjdEVudHJ5KFRhc2sxQ291bnQsIFVETUFfU0laRV84LAorICAgICAgICAgICAgICAgICAgICAgICAgICBVRE1BX1NSQ19JTkNfOCwgTXlTb3VyY2VCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVETUFfRFNUX0lOQ184LCBNeURlc3RCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVETUFfQVJCXzgsIFVETUFfTU9ERV9NRU1fU0NBVFRFUl9HQVRIRVIpLAorICAgICAgdURNQVRhc2tTdHJ1Y3RFbnRyeShUYXNrMkNvdW50LCAuLi4gKSwKKyAgfQorXGVuZHZlcmJhdGltCisqLworLy8hIFxwYXJhbSB1aTMyVHJhbnNmZXJDb3VudCBpcyB0aGUgY291bnQgb2YgaXRlbXMgdG8gdHJhbnNmZXIgZm9yIHRoaXMgdGFzay4KKy8vISBJdCBtdXN0IGJlIGluIHRoZSByYW5nZSAxLTEwMjQuCisvLyEgXHBhcmFtIHVpMzJJdGVtU2l6ZSBpcyB0aGUgYml0IHNpemUgb2YgdGhlIGl0ZW1zIHRvIHRyYW5zZmVyIGZvciB0aGlzIHRhc2suCisvLyEgSXQgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFVETUFfU0laRV84CisvLyEgLSBccmVmIFVETUFfU0laRV8xNgorLy8hIC0gXHJlZiBVRE1BX1NJWkVfMzIKKy8vISBccGFyYW0gdWkzMlNyY0luY3JlbWVudCBpcyB0aGUgYml0IHNpemUgaW5jcmVtZW50IGZvciBzb3VyY2UgZGF0YS4KKy8vISBJdCBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVURNQV9TUkNfSU5DXzgKKy8vISAtIFxyZWYgVURNQV9TUkNfSU5DXzE2CisvLyEgLSBccmVmIFVETUFfU1JDX0lOQ18zMgorLy8hIC0gXHJlZiBVRE1BX1NSQ19JTkNfTk9ORQorLy8hIFxwYXJhbSBwdlNyY0FkZHIgaXMgdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIGRhdGEgdG8gdHJhbnNmZXIuCisvLyEgXHBhcmFtIHVpMzJEc3RJbmNyZW1lbnQgaXMgdGhlIGJpdCBzaXplIGluY3JlbWVudCBmb3IgZGVzdGluYXRpb24gZGF0YS4KKy8vISBJdCBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVURNQV9EU1RfSU5DXzgKKy8vISAtIFxyZWYgVURNQV9EU1RfSU5DXzE2CisvLyEgLSBccmVmIFVETUFfRFNUX0lOQ18zMgorLy8hIC0gXHJlZiBVRE1BX0RTVF9JTkNfTk9ORQorLy8hIFxwYXJhbSBwdkRzdEFkZHIgaXMgdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIGRlc3RpbmF0aW9uIGRhdGEuCisvLyEgXHBhcmFtIHVpMzJBcmJTaXplIGlzIHRoZSBhcmJpdHJhdGlvbiBzaXplIHRvIHVzZSBmb3IgdGhlIHRyYW5zZmVyIHRhc2suCisvLyEgVGhpcyBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgYXJiaXRyYXRpb24gc2l6ZSBpbiBwb3dlcnMgb2YgMiwgZnJvbSAxIHRvIDEwMjQuCisvLyEgSXQgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFVETUFfQVJCXzEKKy8vISAtIFxyZWYgVURNQV9BUkJfMgorLy8hIC0gXHJlZiBVRE1BX0FSQl80CisvLyEgLSAuLi4KKy8vISAtIFxyZWYgVURNQV9BUkJfMTAyNAorLy8hIFxwYXJhbSB1aTMyTW9kZSBpcyB0aGUgdHJhbnNmZXIgbW9kZSBmb3IgdGhpcyB0YXNrLgorLy8hIE5vdGUgdGhhdCBub3JtYWxseSBhbGwgdGFza3Mgd2lsbCBiZSBvbmUgb2YgdGhlIHNjYXR0ZXItZ2F0aGVyIG1vZGVzIHdoaWxlIHRoZQorLy8hIGxhc3QgdGFzayBpcyBhIHRhc2sgbGlzdCB3aWxsIGJlIEFVVE8gb3IgQkFTSUMuCisvLyEgSXQgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFVETUFfTU9ERV9CQVNJQworLy8hIC0gXHJlZiBVRE1BX01PREVfQVVUTworLy8hIC0gXHJlZiBVRE1BX01PREVfTUVNX1NDQVRURVJfR0FUSEVSCisvLyEgLSBccmVmIFVETUFfTU9ERV9QRVJfU0NBVFRFUl9HQVRIRVIKKy8vIQorLy8hIFxyZXR1cm4gTm9uZSAodGhpcyBpcyBub3QgYSBmdW5jdGlvbikKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIHVETUFUYXNrU3RydWN0RW50cnkodWkzMlRyYW5zZmVyQ291bnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkzMkl0ZW1TaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkzMlNyY0luY3JlbWVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHZTcmNBZGRyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkzMkRzdEluY3JlbWVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHZEc3RBZGRyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkzMkFyYlNpemUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkzMk1vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgoKHVpMzJTcmNJbmNyZW1lbnQpID09IFVETUFfU1JDX0lOQ19OT05FKSA/IChwdlNyY0FkZHIpIDogICAgICAgICAgICBcCisgICAgICAgICAgICAoKHZvaWQgKikoJigodWludDhfdCAqKShwdlNyY0FkZHIpKVsoKHVpMzJUcmFuc2ZlckNvdW50KSA8PCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWkzMlNyY0luY3JlbWVudCkgPj4gMjYpKSAtIDFdKSkpLCBcCisgICAgICAgICgoKHVpMzJEc3RJbmNyZW1lbnQpID09IFVETUFfRFNUX0lOQ19OT05FKSA/IChwdkRzdEFkZHIpIDogICAgICAgICAgICBcCisgICAgICAgICAgICAoKHZvaWQgKikoJigodWludDhfdCAqKShwdkRzdEFkZHIpKVsoKHVpMzJUcmFuc2ZlckNvdW50KSA8PCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWkzMkRzdEluY3JlbWVudCkgPj4gMzApKSAtIDFdKSkpLCBcCisgICAgICAgICh1aTMyU3JjSW5jcmVtZW50KSB8ICh1aTMyRHN0SW5jcmVtZW50KSB8ICh1aTMySXRlbVNpemUpIHwgICAgICAgICAgICBcCisgICAgICAgICh1aTMyQXJiU2l6ZSkgfCAoKCh1aTMyVHJhbnNmZXJDb3VudCkgLSAxKSA8PCA0KSB8ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgoKCh1aTMyTW9kZSkgPT0gVURNQV9NT0RFX01FTV9TQ0FUVEVSX0dBVEhFUikgfHwgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCh1aTMyTW9kZSkgPT0gVURNQV9NT0RFX1BFUl9TQ0FUVEVSX0dBVEhFUikpID8gICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKHVpMzJNb2RlKSB8IFVETUFfTU9ERV9BTFRfU0VMRUNUIDogKHVpMzJNb2RlKSksIDAgICAgICAgICAgICBcCisgICAgfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGhhcmR3YXJlIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHVETUEgY2hhbm5lbHMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBVRE1BX05VTV9DSEFOTkVMUyAgICAgICAyMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGxldmVsIG9mIHByaW9yaXR5IGZvciB0aGUgdURNQSBjaGFubmVscworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVURNQV9QUklPUklUWV9MT1cgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBVRE1BX1BSSU9SSVRZX0hJR0ggICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBGbGFncyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdURNQUNoYW5uZWxBdHRyaWJ1dGVFbmFibGUoKSwKKy8vIHVETUFDaGFubmVsQXR0cmlidXRlRGlzYWJsZSgpLCBhbmQgcmV0dXJuZWQgZnJvbSB1RE1BQ2hhbm5lbEF0dHJpYnV0ZUdldCgpLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVURNQV9BVFRSX1VTRUJVUlNUICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVRE1BX0FUVFJfQUxUU0VMRUNUICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVETUFfQVRUUl9ISUdIX1BSSU9SSVRZIDB4MDAwMDAwMDQKKyNkZWZpbmUgVURNQV9BVFRSX1JFUU1BU0sgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBVRE1BX0FUVFJfQUxMICAgICAgICAgICAweDAwMDAwMDBGCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBETUEgY29udHJvbCBtb2RlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdURNQUNoYW5uZWxNb2RlU2V0KCkgYW5kIHJldHVybmVkCisvLyB1RE1BQ2hhbm5lbE1vZGVHZXQoKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFVETUFfTU9ERV9TVE9QICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVURNQV9NT0RFX0JBU0lDICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVRE1BX01PREVfQVVUTyAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVETUFfTU9ERV9QSU5HUE9ORyAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgVURNQV9NT0RFX01FTV9TQ0FUVEVSX0dBVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBVRE1BX01PREVfUEVSX1NDQVRURVJfR0FUSEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIFVETUFfTU9ERV9NICAgICAgICAgICAgIDB4MDAwMDAwMDcgIC8vIHVETUEgVHJhbnNmZXIgTW9kZQorI2RlZmluZSBVRE1BX01PREVfQUxUX1NFTEVDVCAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDaGFubmVsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB1RE1BQ29udHJvbFNldCgpLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVURNQV9EU1RfSU5DXzggICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBVRE1BX0RTVF9JTkNfMTYgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFVETUFfRFNUX0lOQ18zMiAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgVURNQV9EU1RfSU5DX05PTkUgICAgICAgMHhDMDAwMDAwMAorI2RlZmluZSBVRE1BX0RTVF9JTkNfTSAgICAgICAgICAweEMwMDAwMDAwICAvLyBEZXN0aW5hdGlvbiBBZGRyZXNzIEluY3JlbWVudAorI2RlZmluZSBVRE1BX0RTVF9JTkNfUyAgICAgICAgICAzMAorI2RlZmluZSBVRE1BX1NSQ19JTkNfOCAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFVETUFfU1JDX0lOQ18xNiAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgVURNQV9TUkNfSU5DXzMyICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBVRE1BX1NSQ19JTkNfTk9ORSAgICAgICAweDBjMDAwMDAwCisjZGVmaW5lIFVETUFfU1JDX0lOQ19NICAgICAgICAgIDB4MEMwMDAwMDAgIC8vIFNvdXJjZSBBZGRyZXNzIEluY3JlbWVudAorI2RlZmluZSBVRE1BX1NSQ19JTkNfUyAgICAgICAgICAyNgorI2RlZmluZSBVRE1BX1NJWkVfOCAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFVETUFfU0laRV8xNiAgICAgICAgICAgIDB4MTEwMDAwMDAKKyNkZWZpbmUgVURNQV9TSVpFXzMyICAgICAgICAgICAgMHgyMjAwMDAwMAorI2RlZmluZSBVRE1BX1NJWkVfTSAgICAgICAgICAgICAweDMzMDAwMDAwICAvLyBEYXRhIFNpemUKKyNkZWZpbmUgVURNQV9TSVpFX1MgICAgICAgICAgICAgMjQKKyNkZWZpbmUgVURNQV9BUkJfMSAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBVRE1BX0FSQl8yICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFVETUFfQVJCXzQgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgVURNQV9BUkJfOCAgICAgICAgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBVRE1BX0FSQl8xNiAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFVETUFfQVJCXzMyICAgICAgICAgICAgIDB4MDAwMTQwMDAKKyNkZWZpbmUgVURNQV9BUkJfNjQgICAgICAgICAgICAgMHgwMDAxODAwMAorI2RlZmluZSBVRE1BX0FSQl8xMjggICAgICAgICAgICAweDAwMDFjMDAwCisjZGVmaW5lIFVETUFfQVJCXzI1NiAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgVURNQV9BUkJfNTEyICAgICAgICAgICAgMHgwMDAyNDAwMAorI2RlZmluZSBVRE1BX0FSQl8xMDI0ICAgICAgICAgICAweDAwMDI4MDAwCisjZGVmaW5lIFVETUFfQVJCX00gICAgICAgICAgICAgIDB4MDAwM0MwMDAgIC8vIEFyYml0cmF0aW9uIFNpemUKKyNkZWZpbmUgVURNQV9BUkJfUyAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgVURNQV9ORVhUX1VTRUJVUlNUICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBVRE1BX1hGRVJfU0laRV9NQVggICAgICAxMDI0CisjZGVmaW5lIFVETUFfWEZFUl9TSVpFX00gICAgICAgIDB4MDAwMDNGRjAgIC8vIFRyYW5zZmVyIHNpemUKKyNkZWZpbmUgVURNQV9YRkVSX1NJWkVfUyAgICAgICAgNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ2hhbm5lbCBudW1iZXJzIHRvIGJlIHBhc3NlZCB0byBBUEkgZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBhIGNoYW5uZWwgbnVtYmVyCisvLyBJRC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFVETUFfQ0hBTl9TV19FVlQwICAgICAgIDAgICAvLyBTb2Z0d2FyZSBFdmVudCBDaGFubmVsIDAKKyNkZWZpbmUgVURNQV9DSEFOX1VBUlQwX1JYICAgICAgMSAgIC8vIFVBUlQwIFJYIERhdGEKKyNkZWZpbmUgVURNQV9DSEFOX1VBUlQwX1RYICAgICAgMiAgIC8vIFVBUlQwIFJYIERhdGEKKyNkZWZpbmUgVURNQV9DSEFOX1NTSTBfUlggICAgICAgMyAgIC8vIFNTSTAgUlggRGF0YQorI2RlZmluZSBVRE1BX0NIQU5fU1NJMF9UWCAgICAgICA0ICAgLy8gU1NJMCBSWCBEYXRhCisjZGVmaW5lIFVETUFfQ0hBTl9BVVhfQURDICAgICAgIDcgICAvLyBBVVggQURDIGV2ZW50CisjZGVmaW5lIFVETUFfQ0hBTl9BVVhfU1cgICAgICAgIDggICAvLyBBVVggU29mdHdhcmUgZXZlbnQKKyNkZWZpbmUgVURNQV9DSEFOX1RJTUVSMF9BICAgICAgOSAgIC8vIFRpbWVyMCBBIGV2ZW50CisjZGVmaW5lIFVETUFfQ0hBTl9USU1FUjBfQiAgICAgIDEwICAvLyBUaW1lcjAgQiBldmVudAorI2RlZmluZSBVRE1BX0NIQU5fVElNRVIxX0EgICAgICAxMQorI2RlZmluZSBVRE1BX0NIQU5fVElNRVIxX0IgICAgICAxMgorI2RlZmluZSBVRE1BX0NIQU5fQU9OX1BST0cyICAgICAxMworI2RlZmluZSBVRE1BX0NIQU5fRE1BX1BST0cgICAgICAxNAorI2RlZmluZSBVRE1BX0NIQU5fQU9OX1JUQyAgICAgICAxNQorI2RlZmluZSBVRE1BX0NIQU5fU1NJMV9SWCAgICAgICAxNgorI2RlZmluZSBVRE1BX0NIQU5fU1NJMV9UWCAgICAgICAxNworI2RlZmluZSBVRE1BX0NIQU5fU1dfRVZUMSAgICAgICAxOAorI2RlZmluZSBVRE1BX0NIQU5fU1dfRVZUMiAgICAgICAxOQorI2RlZmluZSBVRE1BX0NIQU5fU1dfRVZUMyAgICAgICAyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRmxhZ3MgdG8gYmUgT1InZCB3aXRoIHRoZSBjaGFubmVsIElEIHRvIGluZGljYXRlIGlmIHRoZSBwcmltYXJ5IG9yIGFsdGVybmF0ZQorLy8gY29udHJvbCBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHVzZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBVRE1BX1BSSV9TRUxFQ1QgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFVETUFfQUxUX1NFTEVDVCAgICAgICAgIDB4MDAwMDAwMjAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZmRlZiBEUklWRVJMSUJfREVCVUcKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGludGVybmFsCisvLyEKKy8vISBcYnJpZWYgQ2hlY2tzIGEgdURNQSBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSB1RE1BIG1vZHVsZSBiYXNlIGFkZHJlc3MgaXMgdmFsaWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSB1RE1BIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGUgYmFzZSBhZGRyZXNzIGlzIHZhbGlkIGFuZCBcYyBmYWxzZQorLy8hIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgYm9vbAordURNQUJhc2VWYWxpZCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICByZXR1cm4odWkzMkJhc2UgPT0gVURNQTBfQkFTRSk7Cit9CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyB0aGUgdURNQSBjb250cm9sbGVyIGZvciB1c2UuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHVETUEgY29udHJvbGxlci4gVGhlIHVETUEgY29udHJvbGxlciBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgaXQgY2FuIGJlIGNvbmZpZ3VyZWQgYW5kIHVzZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK3VETUFFbmFibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBtYXN0ZXIgZW5hYmxlIGJpdCBpbiB0aGUgY29uZmlnIHJlZ2lzdGVyLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ0ZHKSA9IFVETUFfQ0ZHX01BU1RFUkVOQUJMRTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgdGhlIHVETUEgY29udHJvbGxlciBmb3IgdXNlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgdURNQSBjb250cm9sbGVyLiAgT25jZSBkaXNhYmxlZCwgdGhlIHVETUEKKy8vISBjb250cm9sbGVyIHdpbGwgbm90IG9wZXJhdGUgdW50aWwgcmUtZW5hYmxlZCB3aXRoIFxyZWYgdURNQUVuYWJsZSgpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAordURNQURpc2FibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIG1hc3RlciBlbmFibGUgYml0IGluIHRoZSBjb25maWcgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DRkcpID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgdURNQSBlcnJvciBzdGF0dXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVETUEgZXJyb3Igc3RhdHVzLiBJdCBzaG91bGQgYmUgY2FsbGVkIGZyb20KKy8vISB3aXRoaW4gdGhlIHVETUEgZXJyb3IgaW50ZXJydXB0IGhhbmRsZXIgdG8gZGV0ZXJtaW5lIGlmIGEgdURNQSBlcnJvcgorLy8hIG9jY3VycmVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBub24temVybyBpZiBhIHVETUEgZXJyb3IgaXMgcGVuZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK3VETUFFcnJvclN0YXR1c0dldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHVETUEgZXJyb3Igc3RhdHVzLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0VSUk9SKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyB0aGUgdURNQSBlcnJvciBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNsZWFycyBhIHBlbmRpbmcgdURNQSBlcnJvciBpbnRlcnJ1cHQuIEl0IHNob3VsZCBiZSBjYWxsZWQKKy8vISBmcm9tIHdpdGhpbiB0aGUgdURNQSBlcnJvciBpbnRlcnJ1cHQgaGFuZGxlciB0byBjbGVhciB0aGUgaW50ZXJydXB0LgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCit1RE1BRXJyb3JTdGF0dXNDbGVhcih1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgdURNQSBlcnJvciBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19FUlJPUikgPSBVRE1BX0VSUk9SX1NUQVRVUzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBhIHVETUEgY2hhbm5lbCBmb3Igb3BlcmF0aW9uLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBlbmFibGVzIGEgc3BlY2lmaWMgdURNQSBjaGFubmVsIGZvciB1c2UuIFRoaXMgZnVuY3Rpb24gbXVzdAorLy8hIGJlIHVzZWQgdG8gZW5hYmxlIGEgY2hhbm5lbCBiZWZvcmUgaXQgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSBhIHVETUEKKy8vISB0cmFuc2Zlci4KKy8vIQorLy8hIFdoZW4gYSB1RE1BIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCwgdGhlIGNoYW5uZWwgd2lsbCBiZSBhdXRvbWF0aWNhbGx5CisvLyEgZGlzYWJsZWQgYnkgdGhlIHVETUEgY29udHJvbGxlci4gVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQKKy8vISBwcmlvciB0byBzdGFydGluZyB1cCBhbnkgbmV3IHRyYW5zZmVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkNoYW5uZWxOdW0gaXMgdGhlIGNoYW5uZWwgbnVtYmVyIHRvIGVuYWJsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCit1RE1BQ2hhbm5lbEVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0pCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkNoYW5uZWxOdW0gPCBVRE1BX05VTV9DSEFOTkVMUyk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgYml0IGZvciB0aGlzIGNoYW5uZWwgaW4gdGhlIGVuYWJsZSBzZXQgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19TRVRDSEFOTkVMRU4pID0gMSA8PCB1aTMyQ2hhbm5lbE51bTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgYSB1RE1BIGNoYW5uZWwgZm9yIG9wZXJhdGlvbi4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgYSBzcGVjaWZpYyB1RE1BIGNoYW5uZWwuIE9uY2UgZGlzYWJsZWQsIGEgY2hhbm5lbAorLy8hIHdpbGwgbm90IHJlc3BvbmQgdG8gdURNQSB0cmFuc2ZlciByZXF1ZXN0cyB1bnRpbCByZS1lbmFibGVkIHZpYQorLy8hIFxyZWYgdURNQUNoYW5uZWxFbmFibGUoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsTnVtIGlzIHRoZSBjaGFubmVsIG51bWJlciB0byBkaXNhYmxlLgorLy8hCisvLyEgXHJldHVybiBOb25lLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCit1RE1BQ2hhbm5lbERpc2FibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJDaGFubmVsTnVtIDwgVURNQV9OVU1fQ0hBTk5FTFMpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGJpdCBmb3IgdGhpcyBjaGFubmVsIGluIHRoZSBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DTEVBUkNIQU5ORUxFTikgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVja3MgaWYgYSB1RE1BIGNoYW5uZWwgaXMgZW5hYmxlZCBmb3Igb3BlcmF0aW9uLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2VlIGlmIGEgc3BlY2lmaWMgdURNQSBjaGFubmVsIGlzIGVuYWJsZWQuICBUaGlzCisvLyEgY2FuIGJlIHVzZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBhIHRyYW5zZmVyLCBzaW5jZSB0aGUgY2hhbm5lbCB3aWxsCisvLyEgYmUgYXV0b21hdGljYWxseSBkaXNhYmxlZCBhdCB0aGUgZW5kIG9mIGEgdHJhbnNmZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbE51bSBpcyB0aGUgY2hhbm5lbCBudW1iZXIgdG8gY2hlY2suCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIHVETUEgY2hhbm5lbC4KKy8vISAtIFxjIHRydWUgIDogQ2hhbm5lbCBpcyBlbmFibGVkLgorLy8hIC0gXGMgZmFsc2UgOiBEaXNhYmxlZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAordURNQUNoYW5uZWxJc0VuYWJsZWQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJDaGFubmVsTnVtIDwgVURNQV9OVU1fQ0hBTk5FTFMpOworCisgICAgLy8KKyAgICAvLyBBTkQgdGhlIHNwZWNpZmllZCBjaGFubmVsIGJpdCB3aXRoIHRoZSBlbmFibGUgcmVnaXN0ZXIsIGFuZCByZXR1cm4gdGhlCisgICAgLy8gcmVzdWx0LgorICAgIC8vCisgICAgcmV0dXJuKChIV1JFRyh1aTMyQmFzZSArIFVETUFfT19TRVRDSEFOTkVMRU4pICYgKDEgPDwgdWkzMkNoYW5uZWxOdW0pKSA/CisgICAgICAgICAgIHRydWUgOiBmYWxzZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlIGNoYW5uZWwgY29udHJvbCB0YWJsZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjaGFubmVsIGNvbnRyb2wgdGFibGUuIFRoaXMKKy8vISB0YWJsZSByZXNpZGVzIGluIHN5c3RlbSBtZW1vcnkgYW5kIGhvbGRzIGNvbnRyb2wgaW5mb3JtYXRpb24gZm9yIGVhY2ggdURNQQorLy8hIGNoYW5uZWwuICBUaGUgdGFibGUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMTAyNCBieXRlIGJvdW5kYXJ5LiBUaGUgYmFzZQorLy8hIGFkZHJlc3MgbXVzdCBiZSBzZXQgYmVmb3JlIGFueSBvZiB0aGUgY2hhbm5lbCBmdW5jdGlvbnMgY2FuIGJlIHVzZWQuCisvLyEgU2V0dGluZyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBwcmltYXJ5IGNvbnRyb2wgdGFibGUgd2lsbCBhdXRvbWF0aWNhbGx5CisvLyEgc2V0IHRoZSBhZGRyZXNzIGZvciB0aGUgYWx0ZXJuYXRlIGNvbnRyb2wgdGFibGUgYXMgdGhlIG5leHQgbWVtb3J5CisvLyEgbG9jYXRpb24gYWZ0ZXIgdGhlIHByaW1hcnkgY29udHJvbCB0YWJsZS4KKy8vIQorLy8hIFRoZSBzaXplIG9mIHRoZSBjaGFubmVsIGNvbnRyb2wgdGFibGUgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIHVETUEKKy8vISBjaGFubmVscywgYW5kIHdoaWNoIHRyYW5zZmVyIG1vZGVzIGFyZSB1c2VkLiAgUmVmZXIgdG8gdGhlIGludHJvZHVjdG9yeQorLy8hIHRleHQgYW5kIHRoZSBtaWNyb2NvbnRyb2xsZXIgZGF0YXNoZWV0IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorLy8hIGNoYW5uZWwgY29udHJvbCB0YWJsZS4KKy8vIQorLy8hIFxub3RlIFRoaXMgcmVnaXN0ZXIgY2Fubm90IGJlIHJlYWQgd2hlbiB0aGUgY29udHJvbGxlciBpcyBpbiB0aGUgcmVzZXQKKy8vISBzdGF0ZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHBDb250cm9sVGFibGUgaXMgYSBwb2ludGVyIHRvIHRoZSAxMDI0IGJ5dGUgYWxpZ25lZCBiYXNlIGFkZHJlc3MKKy8vISBvZiB0aGUgdURNQSBjaGFubmVsIGNvbnRyb2wgdGFibGUuIFRoZSBhZGRyZXNzIG11c3QgYmUgYW4gYWJzb2x1dGUgYWRkcmVzcworLy8hIGluIHN5c3RlbSBtZW1vcnkgc3BhY2UuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAordURNQUNvbnRyb2xCYXNlU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB2b2lkICpwQ29udHJvbFRhYmxlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCgodWludDMyX3QpcENvbnRyb2xUYWJsZSAmIH4weDNGRikgPT0KKyAgICAgICAgICAgKHVpbnQzMl90KXBDb250cm9sVGFibGUpOworICAgIEFTU0VSVCgodWludDMyX3QpcENvbnRyb2xUYWJsZSA+PSBTUkFNX0JBU0UpOworCisgICAgLy8KKyAgICAvLyBQcm9ncmFtIHRoZSBiYXNlIGFkZHJlc3MgaW50byB0aGUgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DVFJMKSA9ICh1aW50MzJfdClwQ29udHJvbFRhYmxlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoZSBjaGFubmVsIGNvbnRyb2wgdGFibGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2hhbm5lbCBjb250cm9sIHRhYmxlLiAgVGhpcworLy8hIHRhYmxlIHJlc2lkZXMgaW4gc3lzdGVtIG1lbW9yeSBhbmQgaG9sZHMgY29udHJvbCBpbmZvcm1hdGlvbiBmb3IgZWFjaCB1RE1BCisvLyEgY2hhbm5lbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNoYW5uZWwgY29udHJvbCB0YWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZCAqCit1RE1BQ29udHJvbEJhc2VHZXQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisKKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIC8vCisgICAgLy8gUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgY29udHJvbCBiYXNlIHJlZ2lzdGVyLCBhbmQgcmV0dXJuIGl0IHRvCisgICAgLy8gdGhlIGNhbGxlci4KKyAgICAvLworICAgIHJldHVybigodm9pZCAqKUhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NUUkwpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgYmFzZSBhZGRyZXNzIGZvciB0aGUgY2hhbm5lbCBjb250cm9sIHRhYmxlIGFsdGVybmF0ZSBzdHJ1Y3R1cmVzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBjaGFubmVsCisvLyEgY29udHJvbCB0YWJsZSB0aGF0IGhvbGRzIHRoZSBhbHRlcm5hdGUgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBlYWNoIGNoYW5uZWwuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUKKy8vISBjaGFubmVsIGNvbnRyb2wgdGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQgKgordURNQUNvbnRyb2xBbHRlcm5hdGVCYXNlR2V0KHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFJlYWQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGNvbnRyb2wgYmFzZSByZWdpc3RlciwgYW5kIHJldHVybiBpdCB0bworICAgIC8vIHRoZSBjYWxsZXIuCisgICAgLy8KKyAgICByZXR1cm4oKHZvaWQgKilIV1JFRyh1aTMyQmFzZSArIFVETUFfT19BTFRDVFJMKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlcXVlc3RzIGEgdURNQSBjaGFubmVsIHRvIHN0YXJ0IGEgdHJhbnNmZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGFsbG93cyBzb2Z0d2FyZSB0byByZXF1ZXN0IGEgdURNQSBjaGFubmVsIHRvIGJlZ2luIGEKKy8vISB0cmFuc2Zlci4gVGhpcyBjb3VsZCBiZSB1c2VkIGZvciBwZXJmb3JtaW5nIGEgbWVtb3J5IHRvIG1lbW9yeSB0cmFuc2ZlciwKKy8vISBvciBpZiBmb3Igc29tZSByZWFzb24gYSB0cmFuc2ZlciBuZWVkcyB0byBiZSBpbml0aWF0ZWQgYnkgc29mdHdhcmUgaW5zdGVhZAorLy8hIG9mIHRoZSBwZXJpcGhlcmFsIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGNoYW5uZWwuCisvLyEKKy8vISBcbm90ZSBJZiB0aGUgY2hhbm5lbCBpcyBhIHNvZnR3YXJlIGNoYW5uZWwgYW5kIGludGVycnVwdHMgYXJlIHVzZWQsIHRoZW4KKy8vISB0aGUgY29tcGxldGlvbiB3aWxsIGJlIHNpZ25hbGVkIG9uIHRoZSB1RE1BIGRlZGljYXRlZCBpbnRlcnJ1cHQuIElmIGEKKy8vISBwZXJpcGhlcmFsIGNoYW5uZWwgaXMgdXNlZCwgdGhlbiB0aGUgY29tcGxldGlvbiB3aWxsIGJlIHNpZ25hbGVkIG9uIHRoZQorLy8hIHBlcmlwaGVyYWwncyBpbnRlcnJ1cHQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbE51bSBpcyB0aGUgY2hhbm5lbCBudW1iZXIgb24gd2hpY2ggdG8gcmVxdWVzdCBhIHVETUEKKy8vISB0cmFuc2Zlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAordURNQUNoYW5uZWxSZXF1ZXN0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyQ2hhbm5lbE51bSA8IFVETUFfTlVNX0NIQU5ORUxTKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBiaXQgZm9yIHRoaXMgY2hhbm5lbCBpbiB0aGUgc29mdHdhcmUgdURNQSByZXF1ZXN0IHJlZ2lzdGVyLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fU09GVFJFUSkgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIGF0dHJpYnV0ZXMgb2YgYSB1RE1BIGNoYW5uZWwuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGF0dHJpYnV0ZXMgb2YgYSB1RE1BIGNoYW5uZWwuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbE51bSBpcyB0aGUgY2hhbm5lbCB0byBjb25maWd1cmUuCisvLyEgXHBhcmFtIHVpMzJBdHRyIGlzIGEgY29tYmluYXRpb24gb2YgYXR0cmlidXRlcyBmb3IgdGhlIGNoYW5uZWwuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgVURNQV9BVFRSX1VTRUJVUlNUIGlzIHVzZWQgdG8gcmVzdHJpY3QgdHJhbnNmZXJzIHRvIHVzZSBvbmx5IGEgYnVyc3QgbW9kZS4KKy8vISAtIFxyZWYgVURNQV9BVFRSX0FMVFNFTEVDVCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgYWx0ZXJuYXRlIGNvbnRyb2wgc3RydWN0dXJlCisvLyEgZm9yIHRoaXMgY2hhbm5lbCAoaXQgaXMgdmVyeSB1bmxpa2VseSB0aGF0IHRoaXMgZmxhZyBzaG91bGQgYmUgdXNlZCkuCisvLyEgLSBccmVmIFVETUFfQVRUUl9ISUdIX1BSSU9SSVRZIGlzIHVzZWQgdG8gc2V0IHRoaXMgY2hhbm5lbCB0byBoaWdoIHByaW9yaXR5LgorLy8hIC0gXHJlZiBVRE1BX0FUVFJfUkVRTUFTSyBpcyB1c2VkIHRvIG1hc2sgdGhlIGhhcmR3YXJlIHJlcXVlc3Qgc2lnbmFsIGZyb20gdGhlCisvLyEgcGVyaXBoZXJhbCBmb3IgdGhpcyBjaGFubmVsLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgdURNQUNoYW5uZWxBdHRyaWJ1dGVFbmFibGUodWludDMyX3QgdWkzMkJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJBdHRyKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgYXR0cmlidXRlcyBvZiBhbiB1RE1BIGNoYW5uZWwuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBhdHRyaWJ1dGVzIG9mIGEgdURNQSBjaGFubmVsLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkNoYW5uZWxOdW0gaXMgdGhlIGNoYW5uZWwgdG8gY29uZmlndXJlLgorLy8hIFxwYXJhbSB1aTMyQXR0ciBpcyBhIGNvbWJpbmF0aW9uIG9mIGF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFubmVsLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFVETUFfQVRUUl9VU0VCVVJTVCBpcyB1c2VkIHRvIHJlc3RyaWN0IHRyYW5zZmVycyB0byB1c2Ugb25seSBhIGJ1cnN0IG1vZGUuCisvLyEgLSBccmVmIFVETUFfQVRUUl9BTFRTRUxFQ1QgaXMgdXNlZCB0byBzZWxlY3QgdGhlIGFsdGVybmF0ZSBjb250cm9sIHN0cnVjdHVyZQorLy8hIGZvciB0aGlzIGNoYW5uZWwgKGl0IGlzIHZlcnkgdW5saWtlbHkgdGhhdCB0aGlzIGZsYWcgc2hvdWxkIGJlIHVzZWQpLgorLy8hIC0gXHJlZiBVRE1BX0FUVFJfSElHSF9QUklPUklUWSBpcyB1c2VkIHRvIHNldCB0aGlzIGNoYW5uZWwgdG8gaGlnaCBwcmlvcml0eS4KKy8vISAtIFxyZWYgVURNQV9BVFRSX1JFUU1BU0sgaXMgdXNlZCB0byBtYXNrIHRoZSBoYXJkd2FyZSByZXF1ZXN0IHNpZ25hbCBmcm9tIHRoZQorLy8hIHBlcmlwaGVyYWwgZm9yIHRoaXMgY2hhbm5lbC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIHVETUFDaGFubmVsQXR0cmlidXRlRGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQXR0cik7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGVuYWJsZWQgYXR0cmlidXRlcyBvZiBhIHVETUEgY2hhbm5lbC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNvbWJpbmF0aW9uIG9mIGZsYWdzIHJlcHJlc2VudGluZyB0aGUgYXR0cmlidXRlcyBvZgorLy8hIHRoZSB1RE1BIGNoYW5uZWwuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbE51bSBpcyB0aGUgY2hhbm5lbCB0byBjb25maWd1cmUuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGJpdHdpc2UgT1Igb2YgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHVETUEgY2hhbm5lbCwgd2hpY2gKKy8vISBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFVETUFfQVRUUl9VU0VCVVJTVCBpcyB1c2VkIHRvIHJlc3RyaWN0IHRyYW5zZmVycyB0byB1c2Ugb25seSBhIGJ1cnN0IG1vZGUuCisvLyEgLSBccmVmIFVETUFfQVRUUl9BTFRTRUxFQ1QgaXMgdXNlZCB0byBzZWxlY3QgdGhlIGFsdGVybmF0ZSBjb250cm9sIHN0cnVjdHVyZQorLy8hIGZvciB0aGlzIGNoYW5uZWwgKGl0IGlzIHZlcnkgdW5saWtlbHkgdGhhdCB0aGlzIGZsYWcgc2hvdWxkIGJlIHVzZWQpLgorLy8hIC0gXHJlZiBVRE1BX0FUVFJfSElHSF9QUklPUklUWSBpcyB1c2VkIHRvIHNldCB0aGlzIGNoYW5uZWwgdG8gaGlnaCBwcmlvcml0eS4KKy8vISAtIFxyZWYgVURNQV9BVFRSX1JFUU1BU0sgaXMgdXNlZCB0byBtYXNrIHRoZSBoYXJkd2FyZSByZXF1ZXN0IHNpZ25hbCBmcm9tIHRoZQorLy8hIHBlcmlwaGVyYWwgZm9yIHRoaXMgY2hhbm5lbC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgdURNQUNoYW5uZWxBdHRyaWJ1dGVHZXQodWludDMyX3QgdWkzMkJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0pOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHRoZSBjb250cm9sIHBhcmFtZXRlcnMgZm9yIGEgdURNQSBjaGFubmVsIGNvbnRyb2wgc3RydWN0dXJlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBjb250cm9sIHBhcmFtZXRlcnMgZm9yIGEgdURNQSB0cmFuc2Zlci4gIFRoZXNlCisvLyEgYXJlIHR5cGljYWxseSBwYXJhbWV0ZXJzIHRoYXQgYXJlIG5vdCBjaGFuZ2VkIG9mdGVuLgorLy8hCisvLyEgXG5vdGUgVGhlIGFkZHJlc3MgaW5jcmVtZW50IGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGRhdGEgc2l6ZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsU3RydWN0SW5kZXggaXMgdGhlIGJpdHdpc2UgT1Igb2YgdGhlIHVETUEgY2hhbm5lbCBudW1iZXIgYW5kOgorLy8hIC0gXHJlZiBVRE1BX1BSSV9TRUxFQ1QgOiBVc2UgcHJpbWFyeSBkYXRhIHN0cnVjdHVyZS4KKy8vISAtIFxyZWYgVURNQV9BTFRfU0VMRUNUIDogVXNlIGFsdGVybmF0ZSBkYXRhIHN0cnVjdHVyZS4KKy8vISBccGFyYW0gdWkzMkNvbnRyb2wgaXMgdGhlIGJpdHdpc2UgT1Igb2YgZml2ZSB2YWx1ZXM6CisvLyEgLSBEYXRhIHNpemUKKy8vISAgIC0gXHJlZiBVRE1BX1NJWkVfOCAgOiA4IGJpdHMuCisvLyEgICAtIFxyZWYgVURNQV9TSVpFXzE2IDogMTYgYml0cy4KKy8vISAgIC0gXHJlZiBVRE1BX1NJWkVfMzIgOiAzMiBiaXRzLgorLy8hIC0gU291cmNlIGFkZHJlc3MgaW5jcmVtZW50CisvLyEgICAtIFxyZWYgVURNQV9TUkNfSU5DXzggICAgOiA4IGJpdHMuCisvLyEgICAtIFxyZWYgVURNQV9TUkNfSU5DXzE2ICAgOiAxNiBiaXRzLgorLy8hICAgLSBccmVmIFVETUFfU1JDX0lOQ18zMiAgIDogMzIgYml0cy4KKy8vISAgIC0gXHJlZiBVRE1BX1NSQ19JTkNfTk9ORSA6IE5vbi1pbmNyZW1lbnRpbmcuCisvLyEgLSBEZXN0aW5hdGlvbiBhZGRyZXNzIGluY3JlbWVudAorLy8hICAgLSBccmVmIFVETUFfRFNUX0lOQ184ICAgIDogOCBiaXRzLgorLy8hICAgLSBccmVmIFVETUFfRFNUX0lOQ18xNiAgIDogMTYgYml0cy4KKy8vISAgIC0gXHJlZiBVRE1BX0RTVF9JTkNfMzIgICA6IDMyIGJpdHMuCisvLyEgICAtIFxyZWYgVURNQV9EU1RfSU5DX05PTkUgOiBOb24taW5jcmVtZW50aW5nLgorLy8hIC0gQXJiaXRyYXRpb24gc2l6ZS4gRGV0ZXJtaW5lcyBob3cgbWFueSBpdGVtcyBhcmUgdHJhbnNmZXJyZWQgYmVmb3JlCisvLyEgdGhlIHVETUEgY29udHJvbGxlciByZS1hcmJpdHJhdGVzIGZvciB0aGUgYnVzLiBJbiBwb3dlciBvZiAyLgorLy8hICAgLSBccmVmIFVETUFfQVJCXzEKKy8vISAgIC0gXHJlZiBVRE1BX0FSQl8yCisvLyEgICAtIFxyZWYgVURNQV9BUkJfNAorLy8hICAgLSBccmVmIFVETUFfQVJCXzgKKy8vISAgIC0gLi4uCisvLyEgICAtIFxyZWYgVURNQV9BUkJfMTAyNAorLy8hIC0gRm9yY2UgdGhlIGNoYW5uZWwgdG8gb25seSByZXNwb25kIHRvIGJ1cnN0IHJlcXVlc3RzIGF0IHRoZSB0YWlsIGVuZCBvZiBhIHNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVyLgorLy8hICAgLSBccmVmIFVETUFfTkVYVF9VU0VCVVJTVAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgdURNQUNoYW5uZWxDb250cm9sU2V0KHVpbnQzMl90IHVpMzJCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDaGFubmVsU3RydWN0SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNvbnRyb2wpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHRoZSB0cmFuc2ZlciBwYXJhbWV0ZXJzIGZvciBhIHVETUEgY2hhbm5lbCBjb250cm9sIHN0cnVjdHVyZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIHBhcmFtZXRlcnMgZm9yIGEgdURNQSB0cmFuc2Zlci4gIFRoZXNlIGFyZQorLy8hIHR5cGljYWxseSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGNoYW5nZWQgb2Z0ZW4uIFRoZSBmdW5jdGlvbgorLy8hIFxyZWYgdURNQUNoYW5uZWxDb250cm9sU2V0KCkgTVVTVCBiZSBjYWxsZWQgYXQgbGVhc3Qgb25jZSBmb3IgdGhpcyBjaGFubmVsIHByaW9yCisvLyEgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgVGhlIFxjIHB2U3JjQWRkciBhbmQgXGMgcHZEc3RBZGRyIHBhcmFtZXRlcnMgYXJlIHBvaW50ZXJzIHRvIHRoZSBmaXJzdAorLy8hIGxvY2F0aW9uIG9mIHRoZSBkYXRhIHRvIGJlIHRyYW5zZmVycmVkLiBUaGVzZSBhZGRyZXNzZXMgc2hvdWxkIGJlIGFsaWduZWQKKy8vISBhY2NvcmRpbmcgdG8gdGhlIGl0ZW0gc2l6ZS4gVGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHRoaXMgaWYgdGhlCisvLyEgcG9pbnRlcnMgYXJlIHBvaW50aW5nIHRvIHN0b3JhZ2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGRhdGEgdHlwZS4KKy8vIQorLy8hIFRoZSB0d28gc2NhdHRlci9nYXRoZXIgbW9kZXMsIE1FTU9SWSBhbmQgUEVSSVBIRVJBTCwgYXJlIGFjdHVhbGx5IGRpZmZlcmVudAorLy8hIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBwcmltYXJ5IG9yIGFsdGVybmF0ZSBjb250cm9sIHN0cnVjdHVyZSBpcworLy8hIHNlbGVjdGVkLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9vayBmb3IgdGhlIFxyZWYgVURNQV9QUklfU0VMRUNUIGFuZAorLy8hIFxyZWYgVURNQV9BTFRfU0VMRUNUIGZsYWcgYWxvbmcgd2l0aCB0aGUgY2hhbm5lbCBudW1iZXIgYW5kIHdpbGwgc2V0IHRoZQorLy8hIHNjYXR0ZXIvZ2F0aGVyIG1vZGUgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBwcmltYXJ5IG9yIGFsdGVybmF0ZSBjb250cm9sCisvLyEgc3RydWN0dXJlLgorLy8hCisvLyEgVGhlIGNoYW5uZWwgbXVzdCBhbHNvIGJlIGVuYWJsZWQgdXNpbmcgXHJlZiB1RE1BQ2hhbm5lbEVuYWJsZSgpIGFmdGVyIGNhbGxpbmcKKy8vISB0aGlzIGZ1bmN0aW9uLiBUaGUgdHJhbnNmZXIgd2lsbCBub3QgYmVnaW4gdW50aWwgdGhlIGNoYW5uZWwgaGFzIGJlZW4gc2V0CisvLyEgdXAgYW5kIGVuYWJsZWQuIE5vdGUgdGhhdCB0aGUgY2hhbm5lbCBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGFmdGVyIHRoZQorLy8hIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCwgbWVhbmluZyB0aGF0IFxyZWYgdURNQUNoYW5uZWxFbmFibGUoKSBtdXN0IGJlIGNhbGxlZAorLy8hIGFnYWluIGFmdGVyIHNldHRpbmcgdXAgdGhlIG5leHQgdHJhbnNmZXIuCisvLyEKKy8vISBcbm90ZSBHcmVhdCBjYXJlIG11c3QgYmUgdGFrZW4gdG8gbm90IG1vZGlmeSBhIGNoYW5uZWwgY29udHJvbCBzdHJ1Y3R1cmUKKy8vISB0aGF0IGlzIGluIHVzZSBvciBlbHNlIHRoZSByZXN1bHRzIHdpbGwgYmUgdW5wcmVkaWN0YWJsZSwgaW5jbHVkaW5nIHRoZQorLy8hIHBvc3NpYmlsaXR5IG9mIHVuZGVzaXJlZCBkYXRhIHRyYW5zZmVycyB0byBvciBmcm9tIG1lbW9yeSBvciBwZXJpcGhlcmFscy4KKy8vISBGb3IgQkFTSUMgYW5kIEFVVE8gbW9kZXMsIGl0IGlzIHNhZmUgdG8gbWFrZSBjaGFuZ2VzIHdoZW4gdGhlIGNoYW5uZWwgaXMKKy8vISBkaXNhYmxlZCwgb3IgdGhlIFxyZWYgdURNQUNoYW5uZWxNb2RlR2V0KCkgcmV0dXJucyBccmVmIFVETUFfTU9ERV9TVE9QLiBGb3IKKy8vISBQSU5HUE9ORyBvciBvbmUgb2YgdGhlIFNDQVRURVJfR0FUSEVSIG1vZGVzLCBpdCBpcyBzYWZlIHRvIG1vZGlmeSB0aGUKKy8vISBwcmltYXJ5IG9yIGFsdGVybmF0ZSBjb250cm9sIHN0cnVjdHVyZSBvbmx5IHdoZW4gdGhlIG90aGVyIGlzIGJlaW5nIHVzZWQuCisvLyEgVGhlIFxyZWYgdURNQUNoYW5uZWxNb2RlR2V0KCkgZnVuY3Rpb24gd2lsbCByZXR1cm4gXHJlZiBVRE1BX01PREVfU1RPUCB3aGVuIGEKKy8vISBjaGFubmVsIGNvbnRyb2wgc3RydWN0dXJlIGlzIGluYWN0aXZlIGFuZCBzYWZlIHRvIG1vZGlmeS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsU3RydWN0SW5kZXggaXMgdGhlIGJpdHdpc2UgT1Igb2YgdGhlIHVETUEgY2hhbm5lbCBudW1iZXIgYW5kOgorLy8hIC0gXHJlZiBVRE1BX1BSSV9TRUxFQ1QgOiBVc2UgcHJpbWFyeSBkYXRhIHN0cnVjdHVyZS4KKy8vISAtIFxyZWYgVURNQV9BTFRfU0VMRUNUIDogVXNlIGFsdGVybmF0ZSBkYXRhIHN0cnVjdHVyZS4KKy8vISBccGFyYW0gdWkzMk1vZGUgaXMgdGhlIHR5cGUgb2YgdURNQSB0cmFuc2Zlci4KKy8vISBUaGUgcGFyYW1ldGVyIHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIFVETUFfTU9ERV9TVE9QICAgICA6IFN0b3BzIHRoZSB1RE1BIHRyYW5zZmVyLiBUaGUgY29udHJvbGxlciBzZXRzIHRoZSBtb2RlCisvLyEgdG8gdGhpcyB2YWx1ZSBhdCB0aGUgZW5kIG9mIGEgdHJhbnNmZXIuCisvLyEgLSBccmVmIFVETUFfTU9ERV9CQVNJQyAgICA6IFBlcmZvcm0gYSBiYXNpYyB0cmFuc2ZlciBiYXNlZCBvbiByZXF1ZXN0LgorLy8hIC0gXHJlZiBVRE1BX01PREVfQVVUTyB0byBwZXJmb3JtIGEgdHJhbnNmZXIgdGhhdCB3aWxsIGFsd2F5cyBjb21wbGV0ZSBvbmNlCisvLyEgc3RhcnRlZCBldmVuIGlmIHJlcXVlc3QgaXMgcmVtb3ZlZC4KKy8vISAtIFxyZWYgVURNQV9NT0RFX1BJTkdQT05HIDogU2V0IHVwIGEgdHJhbnNmZXIgdGhhdCBzd2l0Y2hlcyBiZXR3ZWVuIHRoZQorLy8hIHByaW1hcnkgYW5kIGFsdGVybmF0ZSBjb250cm9sIHN0cnVjdHVyZXMgZm9yIHRoZSBjaGFubmVsLiBUaGlzIGFsbG93cworLy8hIHVzZSBvZiBwaW5nLXBvbmcgYnVmZmVyaW5nIGZvciB1RE1BIHRyYW5zZmVycy4KKy8vISAtIFxyZWYgVURNQV9NT0RFX01FTV9TQ0FUVEVSX0dBVEhFUiA6IFNldCB1cCBhIG1lbW9yeSBzY2F0dGVyLWdhdGhlciB0cmFuc2Zlci4KKy8vISAtIFxyZWYgVURNQV9NT0RFX1BFUl9TQ0FUVEVSX0dBVEhFUiA6IFNldCB1cCBhIHBlcmlwaGVyYWwgc2NhdHRlci1nYXRoZXIgdHJhbnNmZXIuCisvLyEgXHBhcmFtIHB2U3JjQWRkciBpcyB0aGUgc291cmNlIGFkZHJlc3MgZm9yIHRoZSB0cmFuc2Zlci4KKy8vISBccGFyYW0gcHZEc3RBZGRyIGlzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgdHJhbnNmZXIuCisvLyEgXHBhcmFtIHVpMzJUcmFuc2ZlclNpemUgaXMgdGhlIG51bWJlciBvZiBkYXRhIGl0ZW1zIHRvIHRyYW5zZmVyIChcYiBOT1QgYnl0ZXMpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgdURNQUNoYW5uZWxUcmFuc2ZlclNldCh1aW50MzJfdCB1aTMyQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk1vZGUsIHZvaWQgKnB2U3JjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHZEc3RBZGRyLCB1aW50MzJfdCB1aTMyVHJhbnNmZXJTaXplKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlcyBhIHVETUEgY2hhbm5lbCBmb3Igc2NhdHRlci1nYXRoZXIgbW9kZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgYSBjaGFubmVsIGZvciBzY2F0dGVyLWdhdGhlciBtb2RlLgorLy8hIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGFscmVhZHkgc2V0IHVwIGEgdGFzayBsaXN0LCBhbmQgcGFzcyBhIHBvaW50ZXIgdG8KKy8vISB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgbGlzdCBhcyB0aGUgXGMgcHZUYXNrTGlzdCBwYXJhbWV0ZXIuCisvLyEKKy8vISBUaGUgXGMgdWkzMlRhc2tDb3VudCBwYXJhbWV0ZXIgaXMgdGhlIGNvdW50IG9mIHRhc2tzIGluIHRoZSB0YXNrIGxpc3QsIG5vdCB0aGUKKy8vISBzaXplIG9mIHRoZSB0YXNrIGxpc3QuCisvLyEKKy8vISBUaGUgZmxhZyBcYyBiSXNQZXJpcGhTRyBzaG91bGQgYmUgdXNlZCB0byBpbmRpY2F0ZQorLy8hIGlmIHRoZSBzY2F0dGVyLWdhdGhlciBzaG91bGQgYmUgY29uZmlndXJlZCBmb3IgYSBwZXJpcGhlcmFsIG9yIG1lbW9yeQorLy8hIHNjYXR0ZXItZ2F0aGVyIG9wZXJhdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsTnVtIGlzIHRoZSB1RE1BIGNoYW5uZWwgbnVtYmVyLgorLy8hIFxwYXJhbSB1aTMyVGFza0NvdW50IGlzIHRoZSBudW1iZXIgb2Ygc2NhdHRlci1nYXRoZXIgdGFza3MgdG8gZXhlY3V0ZS4KKy8vISBccGFyYW0gcHZUYXNrTGlzdCBpcyBhIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2NhdHRlci1nYXRoZXIKKy8vISB0YXNrIGxpc3QuCisvLyEgXHBhcmFtIHVpMzJJc1BlcmlwaFNHIGlzIGEgZmxhZyB0byBpbmRpY2F0ZSBpdCBpcyBhIHBlcmlwaGVyYWwKKy8vISBzY2F0dGVyLWdhdGhlciB0cmFuc2ZlciAoZWxzZSBpdCB3aWxsIGJlIG1lbW9yeSBzY2F0dGVyLWdhdGhlciB0cmFuc2ZlcikKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgdURNQVRhc2tTdHJ1Y3RFbnRyeSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgdURNQUNoYW5uZWxTY2F0dGVyR2F0aGVyU2V0KHVpbnQzMl90IHVpMzJCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJUYXNrQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHZUYXNrTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMySXNQZXJpcGhTRyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgdHJhbnNmZXIgc2l6ZSBmb3IgYSB1RE1BIGNoYW5uZWwgY29udHJvbCBzdHJ1Y3R1cmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSB1RE1BIHRyYW5zZmVyIHNpemUgZm9yIGEgY2hhbm5lbC4gVGhlCisvLyEgdHJhbnNmZXIgc2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHRyYW5zZmVyLCB3aGVyZSB0aGUgc2l6ZSBvZiBhbiBpdGVtCisvLyEgbWlnaHQgYmUgOCwgMTYsIG9yIDMyIGJpdHMuIElmIGEgcGFydGlhbCB0cmFuc2ZlciBoYXMgYWxyZWFkeSBvY2N1cnJlZCwKKy8vISB0aGVuIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQuIElmIHRoZSB0cmFuc2ZlciBpcworLy8hIGNvbXBsZXRlLCB0aGVuIDAgd2lsbCBiZSByZXR1cm5lZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsU3RydWN0SW5kZXggaXMgdGhlIGJpdHdpc2UgT1Igb2YgdGhlIHVETUEgY2hhbm5lbCBudW1iZXIgYW5kOgorLy8hIC0gXHJlZiBVRE1BX1BSSV9TRUxFQ1QKKy8vISAtIFxyZWYgVURNQV9BTFRfU0VMRUNUCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyByZW1haW5pbmcgdG8gdHJhbnNmZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IHVETUFDaGFubmVsU2l6ZUdldCh1aW50MzJfdCB1aTMyQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIHRyYW5zZmVyIG1vZGUgZm9yIGEgdURNQSBjaGFubmVsIGNvbnRyb2wgc3RydWN0dXJlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgdHJhbnNmZXIgbW9kZSBmb3IgdGhlIHVETUEgY2hhbm5lbC4gSXQKKy8vISBjYW4gYmUgdXNlZCB0byBxdWVyeSB0aGUgc3RhdHVzIG9mIGEgdHJhbnNmZXIgb24gYSBjaGFubmVsLiBXaGVuIHRoZQorLy8hIHRyYW5zZmVyIGlzIGNvbXBsZXRlIHRoZSBtb2RlIHdpbGwgYmUgXHJlZiBVRE1BX01PREVfU1RPUC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsU3RydWN0SW5kZXggaXMgdGhlIGJpdHdpc2UgT1Igb2YgdGhlIHVETUEgY2hhbm5lbCBudW1iZXIgYW5kOgorLy8hIC0gXHJlZiBVRE1BX1BSSV9TRUxFQ1QKKy8vISAtIFxyZWYgVURNQV9BTFRfU0VMRUNUCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHRyYW5zZmVyIG1vZGUgb2YgdGhlIHNwZWNpZmllZCBjaGFubmVsIGFuZCBjb250cm9sCisvLyEgc3RydWN0dXJlLCB3aGljaCB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgVURNQV9NT0RFX1NUT1AKKy8vISAtIFxyZWYgVURNQV9NT0RFX0JBU0lDCisvLyEgLSBccmVmIFVETUFfTU9ERV9BVVRPCisvLyEgLSBccmVmIFVETUFfTU9ERV9QSU5HUE9ORworLy8hIC0gXHJlZiBVRE1BX01PREVfTUVNX1NDQVRURVJfR0FUSEVSCisvLyEgLSBccmVmIFVETUFfTU9ERV9QRVJfU0NBVFRFUl9HQVRIRVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgdURNQUNoYW5uZWxNb2RlR2V0KHVpbnQzMl90IHVpMzJCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2hhbm5lbFN0cnVjdEluZGV4KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgdURNQSBjb250cm9sbGVyLgorLy8hCisvLyEgVGhpcyBzZXRzIGFuZCBlbmFibGVzIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB1RE1BIGNvbnRyb2xsZXIKKy8vISBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0LgorLy8hCisvLyEgXG5vdGUgVGhlIGludGVycnVwdCBoYW5kbGVyIGZvciB1RE1BIGlzIGZvciB0cmFuc2ZlciBjb21wbGV0aW9uIHdoZW4gdGhlCisvLyEgc29mdHdhcmUgY2hhbm5lbCBpcyB1c2VkLCBhbmQgZm9yIGVycm9yIGludGVycnVwdHMuIFRoZQorLy8hIGludGVycnVwdHMgZm9yIGVhY2ggcGVyaXBoZXJhbCBjaGFubmVsIGFyZSBoYW5kbGVkIHRocm91Z2ggdGhlIGluZGl2aWR1YWwKKy8vISBwZXJpcGhlcmFsIGludGVycnVwdCBoYW5kbGVycy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJJbnRDaGFubmVsIGlkZW50aWZpZXMgd2hpY2ggdURNQSBpbnRlcnJ1cHQgaXMgdG8gYmUgcmVnaXN0ZXJlZC4KKy8vISAtIFxiIElOVF9ETUFfRE9ORV9DT01CIDogUmVnaXN0ZXIgYW4gaW50ZXJydXB0IGhhbmRsZXIgdG8gcHJvY2VzcyBpbnRlcnJ1cHRzCisvLyEgICBmcm9tIHRoZSB1RE1BIHNvZnR3YXJlIGNoYW5uZWwuCisvLyEgLSBcYiBJTlRfRE1BX0VSUiA6IFJlZ2lzdGVyIGFuIGludGVycnVwdCBoYW5kbGVyIHRvIHByb2Nlc3MgdURNQSBlcnJvcgorLy8hICAgaW50ZXJydXB0cy4KKy8vISBccGFyYW0gcGZuSGFuZGxlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZQorLy8hIGludGVycnVwdCBpcyBhY3RpdmF0ZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAordURNQUludFJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50Q2hhbm5lbCwKKyAgICAgICAgICAgICAgICB2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKyAgICBBU1NFUlQocGZuSGFuZGxlcik7CisgICAgQVNTRVJUKCh1aTMySW50Q2hhbm5lbCA9PSBJTlRfRE1BX0RPTkVfQ09NQikgfHwgKHVpMzJJbnRDaGFubmVsID09IElOVF9ETUFfRVJSKSk7CisKKyAgICAvLworICAgIC8vIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFJlZ2lzdGVyKHVpMzJJbnRDaGFubmVsLCBwZm5IYW5kbGVyKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBmYXVsdC4KKyAgICAvLworICAgIEludEVuYWJsZSh1aTMySW50Q2hhbm5lbCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgdURNQSBjb250cm9sbGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGRpc2FibGUgYW5kIGNsZWFyIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCBmb3IgdGhlCisvLyEgc3BlY2lmaWVkIHVETUEgaW50ZXJydXB0LgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkludENoYW5uZWwgaWRlbnRpZmllcyB3aGljaCB1RE1BIGludGVycnVwdCB0byB1bnJlZ2lzdGVyLgorLy8hIC0gXGIgSU5UX0RNQV9ET05FX0NPTUIgOiBSZWdpc3RlciBhbiBpbnRlcnJ1cHQgaGFuZGxlciB0byBwcm9jZXNzIGludGVycnVwdHMKKy8vISAgIGZyb20gdGhlIHVETUEgc29mdHdhcmUgY2hhbm5lbC4KKy8vISAtIFxiIElOVF9ETUFfRVJSIDogUmVnaXN0ZXIgYW4gaW50ZXJydXB0IGhhbmRsZXIgdG8gcHJvY2VzcyB1RE1BIGVycm9yCisvLyEgICBpbnRlcnJ1cHRzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK3VETUFJbnRVbnJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50Q2hhbm5lbCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworICAgIEFTU0VSVCgodWkzMkludENoYW5uZWwgPT0gSU5UX0RNQV9ET05FX0NPTUIpIHx8ICh1aTMySW50Q2hhbm5lbCA9PSBJTlRfRE1BX0VSUikpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBJbnREaXNhYmxlKHVpMzJJbnRDaGFubmVsKTsKKworICAgIC8vCisgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRVbnJlZ2lzdGVyKHVpMzJJbnRDaGFubmVsKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIHVETUEgaW50ZXJydXB0IGRvbmUgc3RhdHVzLgorLy8hCisvLyEgQ2xlYXJzIGJpdHMgaW4gdGhlIHVETUEgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBhY2NvcmRpbmcgdG8gd2hpY2ggYml0cworLy8hIGFyZSBzZXQgaW4gXGMgdWkzMkNoYW5NYXNrLiBUaGVyZSBpcyBvbmUgYml0IGZvciBlYWNoIGNoYW5uZWwuIElmIGEgYSBiaXQKKy8vISBpcyBzZXQgaW4gXGMgdWkzMkNoYW5NYXNrLCB0aGVuIHRoYXQgY29ycmVzcG9uZGluZyBjaGFubmVsJ3MgaW50ZXJydXB0CisvLyEgc3RhdHVzIHdpbGwgYmUgY2xlYXJlZCAoaWYgaXQgd2FzIHNldCkuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyQ2hhbk1hc2sgaXMgYSAzMi1iaXQgbWFzayB3aXRoIG9uZSBiaXQgZm9yIGVhY2ggdURNQSBjaGFubmVsLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK3VETUFJbnRDbGVhcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5NYXNrKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSByZXF1ZXN0ZWQgYml0cyBpbiB0aGUgdURNQSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fUkVRRE9ORSkgPSB1aTMyQ2hhbk1hc2s7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgdURNQSBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZvciB0aGUgc3BlY2lmaWVkIFVETUEuIFRoaXMKKy8vISBmdW5jdGlvbiBkb2VzIG5vdCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gc29mdHdhcmUgb3IgaGFyZHdhcmUgYWN0aXZhdGVkCisvLyEgaW50ZXJydXB0cy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK3VETUFJbnRTdGF0dXModWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSB1RE1BIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuCisgICAgLy8KKyAgICByZXR1cm4gKEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX1JFUURPTkUpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIGludGVycnVwdCBvbiBzb2Z0d2FyZSBldmVudCBkcml2ZW4gdURNQSB0cmFuc2ZlcnMuCisvLyEKKy8vISBcbm90ZSBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gcHJldmVudCBwcm9wYWdhdGlvbiBvZiB1RE1BCisvLyEgc3RhdHVzIHNpZ25hbHMgdG8gYSBwZXJpcGhlcmFsLCBpZiBhIHBlcmlwaGVyYWwgYW5kIGEgc29mdHdhcmUgZXZlbnQgaXMKKy8vISBzaGFyaW5nIHRoZSB1RE1BIGNoYW5uZWwuIElmIGl0IGlzIGRlc2lyZWQgdG8gaW5pdGlhdGUgYSB0cmFuc2ZlciBieQorLy8hIHdyaXRpbmcgdG8gYSByZWdpc3RlciBpbnNpZGUgdGhlIHVETUEgKHRoaXMgbWVhbnMgYSBzb2Z0d2FyZSBkcml2ZW4KKy8vISBjaGFubmVsKSwgdGhlbiB0aGUgdURNQSBzdGF0dXMgc2lnbmFscyBwcm9wYWdhdGlvbiBuZWVkIHRvIGJlIGJsb2NrZWQgdG8KKy8vISB0aGUgaGFyZHdhcmUgcGVyaXBoZXJhbHMuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hIFxwYXJhbSB1aTMySW50Q2hhbm5lbCBpZGVudGlmaWVzIHdoaWNoIHVETUEgaW50ZXJydXB0IHRvIGVuYWJsZSBzb2Z0d2FyZQorLy8hICAgICAgICBpbnRlcnJ1cHRzIGZvci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCit1RE1BSW50U3dFdmVudEVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludENoYW5uZWwpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkludENoYW5uZWwgPCBVRE1BX05VTV9DSEFOTkVMUyk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgY2hhbm5lbC4KKyAgICAvLworICAgIEhXUkVHQklUVyh1aTMyQmFzZSArIFVETUFfT19ET05FTUFTSywgdWkzMkludENoYW5uZWwpID0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSBpbnRlcnJ1cHQgb24gc29mdHdhcmUgZXZlbnQgZHJpdmVuIHVETUEgdHJhbnNmZXJzLgorLy8hCisvLyEgVGhpcyByZWdpc3RlciBkaXNhYmxlcyB0aGUgYmxvY2tpbmcgb2YgdGhlIHVETUEgc3RhdHVzIHNpZ25hbHMgcHJvcGFnYXRpb24KKy8vISB0byB0aGUgaGFyZHdhcmUgcGVyaXBoZXJhbCBjb25uZWN0ZWQgdG8gdGhlIHVETUEgb24gdGhlIFxjIHVpMzJJbnRDaGFubmVsLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkludENoYW5uZWwgaWRlbnRpZmllcyB3aGljaCB1RE1BIGludGVycnVwdCB0byBkaXNhYmxlIHNvZnR3YXJlCisvLyEgICAgICAgIGludGVycnVwdHMgZm9yLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiB1RE1BSW50U3dFdmVudEVuYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK3VETUFJbnRTd0V2ZW50RGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludENoYW5uZWwpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkludENoYW5uZWwgPCBVRE1BX05VTV9DSEFOTkVMUyk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIFNXIGNoYW5uZWwuCisgICAgLy8KKyAgICBIV1JFR0JJVFcodWkzMkJhc2UgKyBVRE1BX09fRE9ORU1BU0ssIHVpMzJJbnRDaGFubmVsKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSB1RE1BIG1vZHVsZS4KKy8vIQorLy8hIFxub3RlIFRoaXMgc3RhdHVzIHJlZ2lzdGVyIGNhbm5vdCBiZSByZWFkIHdoZW4gdGhlIGNvbnRyb2xsZXIgaXMgaW4gdGhlIHJlc2V0IHN0YXRlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gQ3VycmVudCBzdGF0dXMgb2YgdGhlIHVETUEgbW9kdWxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAordURNQUdldFN0YXR1cyh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZWFkIGFuZCByZXR1cm4gdGhlIHN0YXR1cyByZWdpc3Rlci4KKyAgICAvLworICAgIHJldHVybiBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19TVEFUVVMpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgdGhlIHByaW9yaXR5IG9mIGEgdURNQSBjaGFubmVsLgorLy8hCisvLyEgXG5vdGUgV3JpdGluZyAwIHRvIGEgYml0IGhhcyBubyBlZmZlY3Qgb24gdGhlIHByaW9yaXR5LiBUbyByZXNldCBhIGNoYW5uZWwKKy8vISBwcmlvcml0eSB0byB0aGUgZGVmYXVsdCB2YWx1ZSB1c2UgXHJlZiB1RE1BQ2hhbm5lbFByaW9yaXR5Q2xlYXIoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsTnVtIGlzIHVETUEgY2hhbm5lbCB0byBzZXQgdGhlIHByaW9yaXR5IGZvci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCit1RE1BQ2hhbm5lbFByaW9yaXR5U2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyQ2hhbm5lbE51bSA8IFVETUFfTlVNX0NIQU5ORUxTKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBjaGFubmVsIHByaW9yaXR5IHRvIGhpZ2guCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19TRVRDSE5MUFJJT1JJVFkpID0gMSA8PCB1aTMyQ2hhbm5lbE51bTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBwcmlvcml0eSBvZiBhIHVETUEgY2hhbm5lbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsTnVtIFRoZSB1RE1BIGNoYW5uZWwgdG8gZ2V0IHRoZSBwcmlvcml0eSBmb3IuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgb25lIG9mOgorLy8hIC0gXHJlZiBVRE1BX1BSSU9SSVRZX0hJR0gKKy8vISAtIFxyZWYgVURNQV9QUklPUklUWV9MT1cKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAordURNQUNoYW5uZWxQcmlvcml0eUdldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0pCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkNoYW5uZWxOdW0gPCBVRE1BX05VTV9DSEFOTkVMUyk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgY2hhbm5lbCBwcmlvcml0eS4KKyAgICAvLworICAgIHJldHVybihIV1JFRyh1aTMyQmFzZSArIFVETUFfT19TRVRDSE5MUFJJT1JJVFkpICYgKDEgPDwgdWkzMkNoYW5uZWxOdW0pID8KKyAgICAgICAgICAgVURNQV9QUklPUklUWV9ISUdIIDogVURNQV9QUklPUklUWV9MT1cpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhciB0aGUgcHJpb3JpdHkgb2YgYSB1RE1BIGNoYW5uZWwuCisvLyEKKy8vISBcbm90ZSBXcml0aW5nIDAgdG8gYSBiaXQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgcHJpb3JpdHkuIFRvIHNldCBhIGNoYW5uZWwKKy8vISBwcmlvcml0eSB0byBoaWdoIHVzZSBccmVmIHVETUFDaGFubmVsUHJpb3JpdHlTZXQoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsTnVtIFRoZSB1RE1BIGNoYW5uZWwgdG8gY2xlYXIgdGhlIHByaW9yaXR5IGZvci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCit1RE1BQ2hhbm5lbFByaW9yaXR5Q2xlYXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJDaGFubmVsTnVtIDwgVURNQV9OVU1fQ0hBTk5FTFMpOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgY2hhbm5lbCBwcmlvcml0eS4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NMRUFSQ0hOTFBSSU9SSVRZKSA9IDEgPDwgdWkzMkNoYW5uZWxOdW07Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX3VETUFDaGFubmVsQXR0cmlidXRlRW5hYmxlCisgICAgICAgICN1bmRlZiAgdURNQUNoYW5uZWxBdHRyaWJ1dGVFbmFibGUKKyAgICAgICAgI2RlZmluZSB1RE1BQ2hhbm5lbEF0dHJpYnV0ZUVuYWJsZSAgICAgIFJPTV91RE1BQ2hhbm5lbEF0dHJpYnV0ZUVuYWJsZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fdURNQUNoYW5uZWxBdHRyaWJ1dGVEaXNhYmxlCisgICAgICAgICN1bmRlZiAgdURNQUNoYW5uZWxBdHRyaWJ1dGVEaXNhYmxlCisgICAgICAgICNkZWZpbmUgdURNQUNoYW5uZWxBdHRyaWJ1dGVEaXNhYmxlICAgICBST01fdURNQUNoYW5uZWxBdHRyaWJ1dGVEaXNhYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV91RE1BQ2hhbm5lbEF0dHJpYnV0ZUdldAorICAgICAgICAjdW5kZWYgIHVETUFDaGFubmVsQXR0cmlidXRlR2V0CisgICAgICAgICNkZWZpbmUgdURNQUNoYW5uZWxBdHRyaWJ1dGVHZXQgICAgICAgICBST01fdURNQUNoYW5uZWxBdHRyaWJ1dGVHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX3VETUFDaGFubmVsQ29udHJvbFNldAorICAgICAgICAjdW5kZWYgIHVETUFDaGFubmVsQ29udHJvbFNldAorICAgICAgICAjZGVmaW5lIHVETUFDaGFubmVsQ29udHJvbFNldCAgICAgICAgICAgUk9NX3VETUFDaGFubmVsQ29udHJvbFNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fdURNQUNoYW5uZWxUcmFuc2ZlclNldAorICAgICAgICAjdW5kZWYgIHVETUFDaGFubmVsVHJhbnNmZXJTZXQKKyAgICAgICAgI2RlZmluZSB1RE1BQ2hhbm5lbFRyYW5zZmVyU2V0ICAgICAgICAgIFJPTV91RE1BQ2hhbm5lbFRyYW5zZmVyU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV91RE1BQ2hhbm5lbFNjYXR0ZXJHYXRoZXJTZXQKKyAgICAgICAgI3VuZGVmICB1RE1BQ2hhbm5lbFNjYXR0ZXJHYXRoZXJTZXQKKyAgICAgICAgI2RlZmluZSB1RE1BQ2hhbm5lbFNjYXR0ZXJHYXRoZXJTZXQgICAgIFJPTV91RE1BQ2hhbm5lbFNjYXR0ZXJHYXRoZXJTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX3VETUFDaGFubmVsU2l6ZUdldAorICAgICAgICAjdW5kZWYgIHVETUFDaGFubmVsU2l6ZUdldAorICAgICAgICAjZGVmaW5lIHVETUFDaGFubmVsU2l6ZUdldCAgICAgICAgICAgICAgUk9NX3VETUFDaGFubmVsU2l6ZUdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fdURNQUNoYW5uZWxNb2RlR2V0CisgICAgICAgICN1bmRlZiAgdURNQUNoYW5uZWxNb2RlR2V0CisgICAgICAgICNkZWZpbmUgdURNQUNoYW5uZWxNb2RlR2V0ICAgICAgICAgICAgICBST01fdURNQUNoYW5uZWxNb2RlR2V0CisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19VRE1BX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi92aW1zLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi92aW1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyNzc1MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3ZpbXMuYwpAQCAtMCwwICsxLDIxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHZpbXMuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDktMjEgMTU6NDY6MTEgKzAyMDAgKE1vbiwgMjEgU2VwIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQ2MzAKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBWSU1TLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi92aW1zLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBWSU1TQ29uZmlndXJlCisgICAgI2RlZmluZSBWSU1TQ29uZmlndXJlICAgICAgICAgICAgICAgICAgIE5PUk9NX1ZJTVNDb25maWd1cmUKKyAgICAjdW5kZWYgIFZJTVNNb2RlU2V0CisgICAgI2RlZmluZSBWSU1TTW9kZVNldCAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1ZJTVNNb2RlU2V0CisgICAgI3VuZGVmICBWSU1TTW9kZUdldAorICAgICNkZWZpbmUgVklNU01vZGVHZXQgICAgICAgICAgICAgICAgICAgICBOT1JPTV9WSU1TTW9kZUdldAorICAgICN1bmRlZiAgVklNU01vZGVTYWZlU2V0CisgICAgI2RlZmluZSBWSU1TTW9kZVNhZmVTZXQgICAgICAgICAgICAgICAgIE5PUk9NX1ZJTVNNb2RlU2FmZVNldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDb25maWd1cmVzIHRoZSBWSU1TLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1ZJTVNDb25maWd1cmUodWludDMyX3QgdWkzMkJhc2UsIGJvb2wgYlJvdW5kUm9iaW4sIGJvb2wgYlByZWZldGNoKQoreworICAgIHVpbnQzMl90IHVpMzJSZWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVklNU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgdWkzMlJlZyA9IEhXUkVHKHVpMzJCYXNlICsgVklNU19PX0NUTCk7CisgICAgdWkzMlJlZyAmPSB+KFZJTVNfQ1RMX1BSRUZfRU4gfCBWSU1TX0NUTF9BUkJfQ0ZHKTsKKyAgICBpZihiUm91bmRSb2JpbikKKyAgICB7CisgICAgICAgIHVpMzJSZWcgfD0gVklNU19DVExfQVJCX0NGRzsKKyAgICB9CisgICAgaWYoYlByZWZldGNoKQorICAgIHsKKyAgICAgICAgdWkzMlJlZyB8PSBWSU1TX0NUTF9QUkVGX0VOOworICAgIH0KKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBBcmJpdHJhdGlvbiBhbmQgcHJlZmV0Y2ggbW9kZS4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVklNU19PX0NUTCkgPSB1aTMyUmVnOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU2V0IHRoZSBvcGVyYXRpb25hbCBtb2RlIG9mIHRoZSBWSU1TCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVklNU01vZGVTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJNb2RlKQoreworICAgIHVpbnQzMl90IHVpMzJSZWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVklNU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgQVNTRVJUKCh1aTMyTW9kZSA9PSBWSU1TX01PREVfRElTQUJMRUQpICAgfHwKKyAgICAgICAgICAgKHVpMzJNb2RlID09IFZJTVNfTU9ERV9FTkFCTEVEKSAgICB8fAorICAgICAgICAgICAodWkzMk1vZGUgPT0gVklNU19NT0RFX09GRikpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIG1vZGUuCisgICAgLy8KKyAgICB1aTMyUmVnID0gSFdSRUcodWkzMkJhc2UgKyBWSU1TX09fQ1RMKTsKKyAgICB1aTMyUmVnICY9IH5WSU1TX0NUTF9NT0RFX007CisgICAgdWkzMlJlZyB8PSAodWkzMk1vZGUgJiBWSU1TX0NUTF9NT0RFX00pOworCisgICAgSFdSRUcodWkzMkJhc2UgKyBWSU1TX09fQ1RMKSA9IHVpMzJSZWc7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBHZXQgdGhlIGN1cnJlbnQgb3BlcmF0aW9uYWwgbW9kZSBvZiB0aGUgVklNUy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorVklNU01vZGVHZXQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgdWludDMyX3QgdWkzMlJlZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChWSU1TQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICB1aTMyUmVnID0gSFdSRUcodWkzMkJhc2UgKyBWSU1TX09fU1RBVCk7CisgICAgaWYodWkzMlJlZyAmIFZJTVNfU1RBVF9NT0RFX0NIQU5HSU5HKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChWSU1TX01PREVfQ0hBTkdJTkcpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gKHVpMzJSZWcgJiBWSU1TX1NUQVRfTU9ERV9NKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTYWZlIHNldHRpbmcgb2YgbmV3IFZJTVMgbW9kZQorLy8gLSBGdW5jdGlvbiBtaWdodCBiZSBibG9ja2luZworLy8gLSBDYW4gYmUgY2FsbGVkIGZvciBhbnkgbW9kZSBjaGFuZ2UgKGFsc28gaWYgYWN0dWFsbHkgbm90IGNoYW5naW5nIG1vZGUpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVklNU01vZGVTYWZlU2V0KCB1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMk5ld01vZGUsIGJvb2wgYmxvY2tpbmcgKQoreworICAgIHVpbnQzMl90IGN1cnJlbnRNb2RlOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFZJTVNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJOZXdNb2RlID09IFZJTVNfTU9ERV9ESVNBQkxFRCkgICB8fAorICAgICAgICAgICAodWkzMk5ld01vZGUgPT0gVklNU19NT0RFX0VOQUJMRUQpICAgIHx8CisgICAgICAgICAgICh1aTMyTmV3TW9kZSA9PSBWSU1TX01PREVfT0ZGKSk7CisKKyAgICAvLworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG9ubHkgdGhlIG1vZGUgYml0cyBhcmUgc2V0IGluIHRoZSBpbnB1dCBwYXJhbWV0ZXIKKyAgICAvLyAoZG9uZSBqdXN0IGZvciBzZWN1cml0eSBzaW5jZSBpdCBpcyBjcml0aWNhbCB0byB0aGUgY29kZSBmbG93KQorICAgIC8vCisgICAgdWkzMk5ld01vZGUgJj0gVklNU19DVExfTU9ERV9NOworCisgICAgLy8KKyAgICAvLyBXYWl0IGZvciBhbnkgcGVuZGluZyBjaGFuZ2UgdG8gY29tcGxldGUgYW5kIGdldCBjdXJyZW50IFZJTVMgbW9kZQorICAgIC8vIChUaGlzIGlzIGEgYmxvY2tpbmcgcG9pbnQgYnV0IHdpbGwgdHlwaWNhbGx5IG9ubHkgYmUgYSBibG9ja2luZyBwb2ludAorICAgIC8vIG9ubHkgaWYgbW9kZSBpcyBjaGFuZ2VkIG11bHRpcGxlIHRpbWVzIHdpdGggYmxvY2tpbmc9MCkKKyAgICAvLworICAgIGRvIHsKKyAgICAgICAgY3VycmVudE1vZGUgPSBWSU1TTW9kZUdldCggdWkzMkJhc2UgKTsKKyAgICB9IHdoaWxlICggY3VycmVudE1vZGUgPT0gVklNU19NT0RFX0NIQU5HSU5HICk7CisKKyAgICAvLworICAgIC8vIEZpcnN0IGNoZWNrIHRoYXQgaXQgYWN0dWFsbHkgaXMgYSBtb2RlIGNoYW5nZSByZXF1ZXN0CisgICAgLy8KKyAgICBpZiAoIHVpMzJOZXdNb2RlICE9IGN1cnJlbnRNb2RlICkgeworICAgICAgICAvLworICAgICAgICAvLyBEdWUgdG8gYSBody1wcm9ibGVtIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGdvIHZpYSBWSU1TX01PREVfT0ZGCisgICAgICAgIC8vIHdoZW4gbGVhdmluZyBWSU1TX01PREVfRU5BQkxFRCAoPVZJTVNfQ1RMX01PREVfQ0FDSEUpCisgICAgICAgIC8vIChBbmQgbm8gbmVlZCB0byBnbyB2aWEgT0ZGLCBpZiBPRkYgaXMgdGhlIGZpbmFsIHN0YXRlIGFuZCB3aWxsIGJlIHNldCBsYXRlcikKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCggY3VycmVudE1vZGUgPT0gVklNU19DVExfTU9ERV9DQUNIRSApICYmCisgICAgICAgICAgICAoIHVpMzJOZXdNb2RlICE9IFZJTVNfQ1RMX01PREVfT0ZGICAgKSAgICApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZJTVNNb2RlU2V0KCB1aTMyQmFzZSwgVklNU19NT0RFX09GRiApOworCisgICAgICAgICAgICB3aGlsZSAoIEhXUkVHQklUVyggVklNU19CQVNFICsgVklNU19PX1NUQVQsIFZJTVNfU1RBVF9NT0RFX0NIQU5HSU5HX0JJVE4gKSkgeworICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgLSB3YWl0IGZvciBjaGFuZ2UgdG8gY29tcGxldGUuCisgICAgICAgICAgICAgICAgLy8gKE5lZWRlZCBibG9ja2luZyBwb2ludCBidXQgaXQgdGFrZXMgb25seSBzb21lIGZldyBjeWNsZXMpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IG5ldyBtb2RlCisgICAgICAgIC8vCisgICAgICAgIFZJTVNNb2RlU2V0KCB1aTMyQmFzZSwgdWkzMk5ld01vZGUgKTsKKworICAgICAgICAvLworICAgICAgICAvLyBXYWl0IGZvciBmaW5hbCBtb2RlIGNoYW5nZSB0byBjb21wbGV0ZSAtIGlmIGJsb2NraW5nIGlzIHJlcXVlc3RlZAorICAgICAgICAvLworICAgICAgICBpZiAoIGJsb2NraW5nICkgeworICAgICAgICAgICAgd2hpbGUgKCBIV1JFR0JJVFcoIFZJTVNfQkFTRSArIFZJTVNfT19TVEFULCBWSU1TX1NUQVRfTU9ERV9DSEFOR0lOR19CSVROICkpIHsKKyAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nIC0gd2FpdCBmb3IgY2hhbmdlIHRvIGNvbXBsZXRlLgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdmltcy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdmltcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOGY3MGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi92aW1zLmgKQEAgLTAsMCArMSwzNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICB2aW1zLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA5LTAxIDEwOjQwOjMyICswMjAwIChUdWUsIDAxIFNlcCAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0NDg4CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIFZJTVMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHN5c3RlbV9jb250cm9sX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCB2aW1zX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fVklNU19IX18KKyNkZWZpbmUgX19WSU1TX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od192aW1zLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIFZJTVNDb25maWd1cmUgICAgICAgICAgICAgICAgICAgTk9ST01fVklNU0NvbmZpZ3VyZQorICAgICNkZWZpbmUgVklNU01vZGVTZXQgICAgICAgICAgICAgICAgICAgICBOT1JPTV9WSU1TTW9kZVNldAorICAgICNkZWZpbmUgVklNU01vZGVHZXQgICAgICAgICAgICAgICAgICAgICBOT1JPTV9WSU1TTW9kZUdldAorICAgICNkZWZpbmUgVklNU01vZGVTYWZlU2V0ICAgICAgICAgICAgICAgICBOT1JPTV9WSU1TTW9kZVNhZmVTZXQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBWSU1TTW9kZVNldCgpIGFzIHRoZSB1aTMySW50RmxhZ3MgcGFyYW1ldGVyLAorLy8gYW5kIHJldHVybmVkIGZyb20gVklNU01vZGVHZXQoKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFZJTVNfTU9ERV9DSEFOR0lORyAweDQgICAgICAgICAgICAgICAgICAgLy8gVklNUyBtb2RlIGlzIGNoYW5naW5nIG5vdyBhbmQgVklNU19NT0RFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIG5vdCBiZSBjaGFuZ2VkIGF0IG1vbWVudC4KKyNkZWZpbmUgVklNU19NT0RFX0RJU0FCTEVEIChWSU1TX0NUTF9NT0RFX0dQUkFNKSAvLyBEaXNhYmxlZCBtb2RlIChHUFJBTSBlbmFibGVkKS4KKyNkZWZpbmUgVklNU19NT0RFX0VOQUJMRUQgIChWSU1TX0NUTF9NT0RFX0NBQ0hFKSAvLyBFbmFibGVkIG1vZGUsIG9ubHkgVVNFUkNPREUgaXMgY2FjaGVkLgorI2RlZmluZSBWSU1TX01PREVfT0ZGICAgICAgKFZJTVNfQ1RMX01PREVfT0ZGKSAgIC8vIFZJTVMgQ2FjaGUgUkFNIGlzIG9mZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmZGVmIERSSVZFUkxJQl9ERUJVRworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2tzIGEgVklNUyBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgdGhlIFZJTVMgYmFzZSBhZGRyZXNzIGlzIHZhbGlkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFZJTVMuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGUgYmFzZSBhZGRyZXNzIGlzIHZhbGlkIGFuZCBcYyBmYWxzZQorLy8hIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgYm9vbAorVklNU0Jhc2VWYWxpZCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICByZXR1cm4odWkzMkJhc2UgPT0gVklNU19CQVNFKTsKK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmVzIHRoZSBWSU1TLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzZXRzIGdlbmVyYWwgY29udHJvbCBzZXR0aW5ncyBvZiB0aGUgVklNUyBzeXN0ZW0uCisvLyEKKy8vISBcbm90ZSBUaGUgVklNUyBtb2RlIG11c3QgYmUgc2V0IHVzaW5nIHRoZSBccmVmIFZJTVNNb2RlU2V0KCkgY2FsbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBWSU1TLgorLy8hIFxwYXJhbSBiUm91bmRSb2JpbiBzcGVjaWZpZXMgdGhlIGFyYml0cmF0aW9uIG1ldGhvZC4KKy8vISAtIFxjIHRydWUgIDogUm91bmQgUm9iaW4gYXJiaXRyYXRpb24gYmV0d2VlbiB0aGUgdHdvIGF2YWlsYWJsZSByZWFkL3dyaXRlIGludGVyZmFjZXMKKy8vISAoaS5lLiBJY29kZS9EY29kZSBhbmQgU3lzYnVzKSBpcyB0byBiZSB1c2VkLgorLy8hIC0gXGMgZmFsc2UgOiBTdHJpY3QgYXJiaXRyYXRpb24gd2lsbCBiZSB1c2VkLCB3aGVyZSBJY29kZS9EY29kZQorLy8hIGlzIHByZWZlcnJlZCBvdmVyIHRoZSBTeXNidXMuCisvLyEgXHBhcmFtIGJQcmVmZXRjaCBzcGVjaWZpZXMgaWYgcHJlZmV0Y2hpbmcgaXMgdG8gYmUgdXNlZC4KKy8vISAtIFxjIHRydWUgIDogQ2FjaGUgaXMgdG8gcHJlZmV0Y2ggdGFnIGRhdGEgZm9yIHRoZSBmb2xsb3dpbmcgYWRkcmVzcy4KKy8vISAtIFxjIGZhbHNlIDogTm8gcHJlZmV0Y2guCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFZJTVNNb2RlU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBWSU1TQ29uZmlndXJlKHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJSb3VuZFJvYmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJQcmVmZXRjaCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiB0aGUgVklNUy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiB0aGUgVklNUy4KKy8vIQorLy8hIFVwb24gcmVzZXQgdGhlIFZJTVMgd2lsbCBiZSBpbiBccmVmIFZJTVNfTU9ERV9DSEFOR0lORyBtb2RlLgorLy8hICAgSW4gdGhpcyBtb2RlIHRoZSBWSU1TIHdpbGwgaW5pdGlhbGl6ZSB0aGUgY2FjaGUgKEdQKSBSQU0gKHRvIGFsbCB6ZXJvcykuCisvLyEgICBUaGUgR1AgUkFNIHdpbGwgbm90IGJlIG9wZXJhdGlvbmFsIChyZWFkL3dyaXRlIHdpbGwgcmVzdWx0IGluIGJ1cyBmYXVsdCkuCisvLyEgICBUaGUgQ2FjaGUgd2lsbCBub3QgYmUgb3BlcmF0aW9uYWwuCisvLyEgICBSZWFkcyBhbmQgd3JpdGVzIHRvIGZsYXNoIHdpbGwgYmUgdW5jYWNoZWQuCisvLyEgICBBZnRlciBhIHNob3J0IGRlbGF5IChhcHByb3guIDEwMjkgY2xvY2sgY3ljbGVzKSB0aGUgVklNUyB3aWxsCisvLyEgICBhdXRvbWF0aWNhbGx5IHN3aXRjaCBtb2RlIHRvIFxyZWYgVklNU19NT0RFX0RJU0FCTEVEIChHUFJBTSBlbmFibGVkKS4KKy8vIQorLy8hIEluIFxyZWYgVklNU19NT0RFX0RJU0FCTEVEIG1vZGUsIHRoZSBjYWNoZSBpcyBkaXNhYmxlZCBidXQgdGhlIEdQIFJBTSBpcworLy8hIGFjY2Vzc2libGU6CisvLyEgICBUaGUgR1AgUkFNIHdpbGwgYmUgYWNjZXNzaWJsZS4KKy8vISAgIFRoZSBDYWNoZSB3aWxsIG5vdCBiZSBvcGVyYXRpb25hbC4KKy8vISAgIFJlYWRzIGZyb20gZmxhc2ggd2lsbCBiZSB1bmNhY2hlZC4KKy8vISAgIEZyb20gdGhpcyBtb2RlLCB0aGUgVklNUyBtYXkgYmUgcHV0IGluIFxyZWYgVklNU19NT0RFX0VOQUJMRUQgKENBQ0hFIG1vZGUpLgorLy8hCisvLyEgSW4gXHJlZiBWSU1TX01PREVfRU5BQkxFRCBtb2RlLCB0aGUgY2FjaGUgaXMgZW5hYmxlZCBmb3IgXGIgVVNFUkNPREUgc3BhY2UuCisvLyEgICBUaGUgR1AgUkFNIHdpbGwgbm90IGJlIG9wZXJhdGlvbmFsIChyZWFkL3dyaXRlIHdpbGwgcmVzdWx0IGluIGJ1cyBmYXVsdCkuCisvLyEgICBUaGUgQ2FjaGUgd2lsbCBiZSBvcGVyYXRpb25hbCBmb3IgU1lTQ09ERSBzcGFjZS4KKy8vISAgIFJlYWRzIGZyb20gZmxhc2ggaW4gVVNFUkNPREUgc3BhY2Ugd2lsbCBiZSB1bmNhY2hlZC4KKy8vIQorLy8hIEluIFxyZWYgVklNU19NT0RFX09GRiB0aGUgY2FjaGUgUkFNIGlzIG9mZiB0byBjb25zZXJ2ZSBwb3dlci4KKy8vIQorLy8hIFxub3RlIFRoZSBWSU1TIG11c3QgYmUgaW52YWxpZGF0ZWQgd2hlbiBzd2l0Y2hpbmcgbW9kZS4KKy8vISBUaGlzIGlzIGRvbmUgYnkgc2V0dGluZyBWSU1TX01PREVfT0ZGIGJlZm9yZSBzZXR0aW5nIGFueSBuZXcgbW9kZS4KKy8vISBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCBpbiBccmVmIFZJTVNNb2RlU2FmZVNldCgpCisvLyEKKy8vISBcbm90ZSBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB0aGUgVklNUyBpcyBwdXQgaW4gZGlzYWJsZWQgbW9kZSBiZWZvcmUKKy8vISBcYiB3cml0aW5nIHRvIGZsYXNoLCBzaW5jZSB0aGUgY2FjaGUgd2lsbCBub3QgYmUgdXBkYXRlZCBub3IgaW52YWxpZGF0ZWQKKy8vISBieSBmbGFzaCB3cml0ZXMuIFRoZSBsaW5lIGJ1ZmZlcnMgc2hvdWxkIGFsc28gYmUgZGlzYWJsZWQgd2hlbiB1cGRhdGluZyB0aGUKKy8vISBmbGFzaC4gT25jZSBccmVmIFZJTVNNb2RlU2V0KCkgaXMgdXNlZCB0byBzZXQgdGhlIFZJTVMgaW4KKy8vISBccmVmIFZJTVNfTU9ERV9DSEFOR0lORyBtb2RlLCB0aGUgdXNlciBzaG91bGQgY2hlY2sgdXNpbmcKKy8vISBccmVmIFZJTVNNb2RlR2V0KCkgd2hlbiB0aGUgbW9kZSBzd2l0Y2hlcyB0byBccmVmIFZJTVNfTU9ERV9ESVNBQkxFRC4gT25seSB3aGVuCisvLyEgdGhlIG1vZGUgaGFzIGNoYW5nZWQgdGhlIGNhY2hlIGhhcyBiZWVuIGNvbXBsZXRlbHkgaW52YWxpZGF0ZWQuCisvLyEKKy8vISBcbm90ZSBBY2Nlc3MgZnJvbSBTeXN0ZW0gQnVzIGlzIG5ldmVyIGNhY2hlZC4gT25seSBhY2Nlc3MgdGhyb3VnaCBJQ09ERQorLy8hIERDT0RFIGJ1cyBmcm9tIHRoZSBTeXN0ZW0gQ1BVIGlzIGNhY2hlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBWSU1TLgorLy8hIFxwYXJhbSB1aTMyTW9kZSBpcyB0aGUgb3BlcmF0aW9uYWwgbW9kZS4KKy8vISAtIFxyZWYgVklNU19NT0RFX0RJU0FCTEVEIChHUFJBTSBlbmFibGVkKQorLy8hIC0gXHJlZiBWSU1TX01PREVfRU5BQkxFRCAgKENBQ0hFIG1vZGUpCisvLyEgLSBccmVmIFZJTVNfTU9ERV9PRkYKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgVklNU01vZGVHZXQoKSBhbmQgXHJlZiBWSU1TTW9kZVNhZmVTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFZJTVNNb2RlU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyTW9kZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY3VycmVudCBvcGVyYXRpb25hbCBtb2RlIG9mIHRoZSBWSU1TLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBvcGVyYXRpb25hbCBtb2RlIG9mIHRoZSBWSU1TLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFZJTVMuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgb25lIG9mOgorLy8hIC0gXHJlZiBWSU1TX01PREVfQ0hBTkdJTkcKKy8vISAtIFxyZWYgVklNU19NT0RFX0RJU0FCTEVEIChHUFJBTSBlbmFibGVkKQorLy8hIC0gXHJlZiBWSU1TX01PREVfRU5BQkxFRCAgKENBQ0hFIG1vZGUpCisvLyEgLSBccmVmIFZJTVNfTU9ERV9PRkYKKy8vIQorLy8hIFxzYSBccmVmIFZJTVNNb2RlU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgVklNU01vZGVHZXQodWludDMyX3QgdWkzMkJhc2UpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgdGhlIG9wZXJhdGlvbmFsIG1vZGUgb2YgdGhlIFZJTVMgaW4gYSBzYWZlIHNlcXVlbmNlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBvcGVyYXRpb25hbCBtb2RlIG9mIHRoZSBWSU1TIGluIGEgc2FmZSBzZXF1ZW5jZQorLy8hCisvLyEgVXBvbiByZXNldCB0aGUgVklNUyB3aWxsIGJlIGluIFxyZWYgVklNU19NT0RFX0NIQU5HSU5HIG1vZGUuCisvLyEgICBJbiB0aGlzIG1vZGUgdGhlIFZJTVMgd2lsbCBpbml0aWFsaXplIHRoZSBjYWNoZSAoR1ApIFJBTSAodG8gYWxsIHplcm9zKS4KKy8vISAgIFRoZSBHUCBSQU0gd2lsbCBub3QgYmUgb3BlcmF0aW9uYWwgKHJlYWQvd3JpdGUgd2lsbCByZXN1bHQgaW4gYnVzIGZhdWx0KS4KKy8vISAgIFRoZSBDYWNoZSB3aWxsIG5vdCBiZSBvcGVyYXRpb25hbCAocmVhZC93cml0ZSB0byBmbGFzaCB3aWxsIGJlIHVuY2FjaGVkKS4KKy8vISAgIEFmdGVyIGEgc2hvcnQgZGVsYXkgKGFwcHJveC4gMTAyOSBjbG9jayBjeWNsZXMpIHRoZSBWSU1TIHdpbGwKKy8vISAgIGF1dG9tYXRpY2FsbHkgc3dpdGNoIG1vZGUgdG8gXHJlZiBWSU1TX01PREVfRElTQUJMRUQgKEdQUkFNIGVuYWJsZWQpLgorLy8hCisvLyEgSW4gXHJlZiBWSU1TX01PREVfRElTQUJMRUQgbW9kZSwgdGhlIGNhY2hlIGlzIGRpc2FibGVkIGJ1dCB0aGUgR1AgUkFNIGlzCisvLyEgYWNjZXNzaWJsZToKKy8vISAgIFRoZSBHUCBSQU0gd2lsbCBiZSBhY2Nlc3NpYmxlLgorLy8hICAgVGhlIENhY2hlIHdpbGwgbm90IGJlIG9wZXJhdGlvbmFsLgorLy8hICAgUmVhZHMgZnJvbSBmbGFzaCB3aWxsIGJlIHVuY2FjaGVkLgorLy8hICAgRnJvbSB0aGlzIG1vZGUsIHRoZSBWSU1TIG1heSBiZSBwdXQgaW4gXHJlZiBWSU1TX01PREVfRU5BQkxFRCAoQ0FDSEUgbW9kZSkuCisvLyEKKy8vISBJbiBccmVmIFZJTVNfTU9ERV9FTkFCTEVEIG1vZGUsIHRoZSBjYWNoZSBpcyBlbmFibGVkIGZvciBcYiBVU0VSQ09ERSBzcGFjZS4KKy8vISAgIFRoZSBHUCBSQU0gd2lsbCBub3QgYmUgb3BlcmF0aW9uYWwgKHJlYWQvd3JpdGUgd2lsbCByZXN1bHQgaW4gYnVzIGZhdWx0KS4KKy8vISAgIFRoZSBDYWNoZSB3aWxsIGJlIG9wZXJhdGlvbmFsIGZvciBTWVNDT0RFIHNwYWNlLgorLy8hICAgUmVhZHMgZnJvbSBmbGFzaCBpbiBVU0VSQ09ERSBzcGFjZSB3aWxsIGJlIHVuY2FjaGVkLgorLy8hCisvLyEgSW4gXHJlZiBWSU1TX01PREVfT0ZGIHRoZSBjYWNoZSBSQU0gaXMgb2ZmIHRvIGNvbnNlcnZlIHBvd2VyLgorLy8hCisvLyEgXG5vdGUgVGhlIFZJTVMgbXVzdCBiZSBpbnZhbGlkYXRlZCB3aGVuIHN3aXRjaGluZyBtb2RlLgorLy8hIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIFZJTVNfTU9ERV9PRkYgYmVmb3JlIHNldHRpbmcgYW55IG5ldyBtb2RlLgorLy8hIFRoaXMgaXMgYXV0b21hdGljYWxseSBoYW5kbGVkIGluIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBcbm90ZSBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB0aGUgVklNUyBpcyBwdXQgaW4gZGlzYWJsZWQgbW9kZSBiZWZvcmUKKy8vISBcYiB3cml0aW5nIHRvIGZsYXNoLCBzaW5jZSB0aGUgY2FjaGUgd2lsbCBub3QgYmUgdXBkYXRlZCBub3IgaW52YWxpZGF0ZWQKKy8vISBieSBmbGFzaCB3cml0ZXMuIFRoZSBsaW5lIGJ1ZmZlcnMgc2hvdWxkIGFsc28gYmUgZGlzYWJsZWQgd2hlbiB1cGRhdGluZyB0aGUKKy8vISBmbGFzaC4KKy8vIQorLy8hIFxub3RlIEFjY2VzcyBmcm9tIFN5c3RlbSBCdXMgaXMgbmV2ZXIgY2FjaGVkLiBPbmx5IGFjY2VzcyB0aHJvdWdoIElDT0RFCisvLyEgRENPREUgYnVzIGZyb20gdGhlIFN5c3RlbSBDUFUgaXMgY2FjaGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFZJTVMuCisvLyEgXHBhcmFtIHVpMzJOZXdNb2RlIGlzIHRoZSBuZXcgb3BlcmF0aW9uYWwgbW9kZToKKy8vISAtIFxyZWYgVklNU19NT0RFX0RJU0FCTEVEIChHUFJBTSBlbmFibGVkKQorLy8hIC0gXHJlZiBWSU1TX01PREVfRU5BQkxFRCAgKENBQ0hFIG1vZGUpCisvLyEgLSBccmVmIFZJTVNfTU9ERV9PRkYKKy8vISBccGFyYW0gYmxvY2tpbmcgc2hhbGwgYmUgc2V0IHRvIFRSVUUgaWYgZnVydGhlciBjb2RlIGV4ZWN1dGlvbiBzaGFsbCBiZQorLy8hIGJsb2NrZWQgKGRlbGF5ZWQpIHVudGlsIG1vZGUgY2hhbmdlIGlzIGNvbXBsZXRlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgVklNU01vZGVTZXQoKSBhbmQgXHJlZiBWSU1TTW9kZUdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVklNU01vZGVTYWZlU2V0KCB1aW50MzJfdCB1aTMyQmFzZSAgICAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJOZXdNb2RlICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAgICAgYmxvY2tpbmcgICAgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSBWSU1TIGxpbmVidWZmZXJzLgorLy8hCisvLyEgTGluZWJ1ZmZlcnMgc2hvdWxkIG9ubHkgYmUgZGlzYWJsZWQgd2hlbiBhdHRlbXB0aW5nIHRvIHVwZGF0ZSB0aGUgZmxhc2gsIHRvCisvLyEgZW5zdXJlIHRoYXQgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1ZmZlcnMgaXMgbm90IHN0YWxlLiBBcyBzb29uIGFzIGZsYXNoIGlzCisvLyEgdXBkYXRlZCB0aGUgbGluZWJ1ZmZlcnMgc2hvdWxkIGJlIHJlZW5hYmxlZC4gRmFpbGluZyB0byBlbmFibGUKKy8vISB3aWxsIGhhdmUgYSBwZXJmb3JtYW5jZSBpbXBhY3QuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVklNUy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVklNU0xpbmVCdWZEaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gRGlzYWJsZSBsaW5lIGJ1ZmZlcnMKKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVklNU19PX0NUTCkgfD0gVklNU19DVExfSURDT0RFX0xCX0RJU19NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSU1TX0NUTF9TWVNCVVNfTEJfRElTX007Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSBWSU1TIGxpbmVidWZmZXJzLgorLy8hCisvLyEgTGluZWJ1ZmZlcnMgc2hvdWxkIG9ubHkgYmUgZGlzYWJsZWQgd2hlbiBhdHRlbXB0aW5nIHRvIHVwZGF0ZSB0aGUgZmxhc2gsIHRvCisvLyEgZW5zdXJlIHRoYXQgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1ZmZlcnMgaXMgbm90IHN0YWxlLiBBcyBzb29uIGFzIGZsYXNoIGlzCisvLyEgdXBkYXRlZCB0aGUgbGluZWJ1ZmZlcnMgc2hvdWxkIGJlIHJlZW5hYmxlZC4gRmFpbGluZyB0byBlbmFibGUKKy8vISB3aWxsIGhhdmUgYSBwZXJmb3JtYW5jZSBpbXBhY3QuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVklNUy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVklNU0xpbmVCdWZFbmFibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBFbmFibGUgbGluZWJ1ZmZlcnMKKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVklNU19PX0NUTCkgJj0gfihWSU1TX0NUTF9JRENPREVfTEJfRElTX00gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklNU19DVExfU1lTQlVTX0xCX0RJU19NKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fVklNU0NvbmZpZ3VyZQorICAgICAgICAjdW5kZWYgIFZJTVNDb25maWd1cmUKKyAgICAgICAgI2RlZmluZSBWSU1TQ29uZmlndXJlICAgICAgICAgICAgICAgICAgIFJPTV9WSU1TQ29uZmlndXJlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9WSU1TTW9kZVNldAorICAgICAgICAjdW5kZWYgIFZJTVNNb2RlU2V0CisgICAgICAgICNkZWZpbmUgVklNU01vZGVTZXQgICAgICAgICAgICAgICAgICAgICBST01fVklNU01vZGVTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1ZJTVNNb2RlR2V0CisgICAgICAgICN1bmRlZiAgVklNU01vZGVHZXQKKyAgICAgICAgI2RlZmluZSBWSU1TTW9kZUdldCAgICAgICAgICAgICAgICAgICAgIFJPTV9WSU1TTW9kZUdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVklNU01vZGVTYWZlU2V0CisgICAgICAgICN1bmRlZiAgVklNU01vZGVTYWZlU2V0CisgICAgICAgICNkZWZpbmUgVklNU01vZGVTYWZlU2V0ICAgICAgICAgICAgICAgICBST01fVklNU01vZGVTYWZlU2V0CisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19WSU1TX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi93YXRjaGRvZy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvd2F0Y2hkb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODA3YjlhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvd2F0Y2hkb2cuYwpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgd2R0LmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTAxLTEzIDE2OjU5OjU1ICswMTAwIChUdWUsIDEzIEphbiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQyMzY1CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgV2F0Y2hkb2cgVGltZXIuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL3dhdGNoZG9nLmg+CisKKy8vIFNlZSB3YXRjaGRvZy5oIGZvciBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvd2F0Y2hkb2cuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3dhdGNoZG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4MjdmNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3dhdGNoZG9nLmgKQEAgLTAsMCArMSw1NDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICB3ZHQuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMTEtMTYgMTk6NDE6NDcgKzAxMDAgKE1vbiwgMTYgTm92IDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDUwOTQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgV2F0Y2hkb2cgVGltZXIuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHBlcmlwaGVyYWxfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIHdkdF9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX1dEVF9IX18KKyNkZWZpbmUgX19XRFRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfd2R0Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2ludGVycnVwdC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIFdEVF9PX0xPQ0sgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBXQVRDSERPR19MT0NLX1VOTE9DS0VEICAgICAgIDB4MDAwMDAwMDAgIC8vIFVubG9ja2VkCisjZGVmaW5lIFdBVENIRE9HX0xPQ0tfTE9DS0VEICAgICAgICAgMHgwMDAwMDAwMSAgLy8gTG9ja2VkCisjZGVmaW5lIFdBVENIRE9HX0xPQ0tfVU5MT0NLICAgICAgICAgMHgxQUNDRTU1MSAgLy8gVW5sb2NrcyB0aGUgV2F0Y2hkb2cgVGltZXIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBXRFRfSVNSLCBXRFRfUklTLCBhbmQKKy8vIFdEVF9NSVMgcmVnaXN0ZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgV0FUQ0hET0dfSU5UX1RJTUVPVVQgICAgICAgICAweDAwMDAwMDAxICAvLyBXYXRjaGRvZyB0aW1lciBleHBpcmVkCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgdHlwZSBvZiBpbnRlcnJ1cHQgdGhhdCBjYW4gYmUgZ2VuZXJhdGVkIGJ5IHRoZSB3YXRjaGRvZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFdBVENIRE9HX0lOVF9UWVBFX0lOVCAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgV0FUQ0hET0dfSU5UX1RZUEVfTk1JICAgMHgwMDAwMDAwNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGV0ZXJtaW5lcyBpZiB0aGUgd2F0Y2hkb2cgdGltZXIgaXMgZW5hYmxlZC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUgd2F0Y2hkb2cgdGltZXIgaXMgZW5hYmxlZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgV2F0Y2hkb2cgVGltZXI6CisvLyEgLSBcYyB0cnVlICA6IFdhdGNoZG9nIHRpbWVyIGlzIGVuYWJsZWQuCisvLyEgLSBcYyBmYWxzZSA6IFdhdGNoZG9nIHRpbWVyIGlzIGRpc2FibGVkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitXYXRjaGRvZ1J1bm5pbmcodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFNlZSBpZiB0aGUgd2F0Y2hkb2cgdGltZXIgbW9kdWxlIGlzIGVuYWJsZWQsIGFuZCByZXR1cm4uCisgICAgLy8KKyAgICByZXR1cm4oKEhXUkVHKFdEVF9CQVNFICsgV0RUX09fQ1RMKSAmIFdEVF9DVExfSU5URU4pID8gdHJ1ZSA6IGZhbHNlKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyB0aGUgd2F0Y2hkb2cgdGltZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHdhdGNoZG9nIHRpbWVyIGNvdW50ZXIgYW5kIGludGVycnVwdC4KKy8vIQorLy8hIE9uY2UgZW5hYmxlZCwgdGhlIHdhdGNoZG9nIGludGVycnVwdCBjYW4gb25seSBiZSBkaXNhYmxlZCBieSBhIGhhcmR3YXJlIHJlc2V0LgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiBoYXMgbm8gZWZmZWN0IGlmIHRoZSB3YXRjaGRvZyB0aW1lciBoYXMgYmVlbiBsb2NrZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFdhdGNoZG9nTG9jaygpLCBccmVmIFdhdGNoZG9nVW5sb2NrKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorV2F0Y2hkb2dFbmFibGUodm9pZCkKK3sKKyAgICAvLyBFbmFibGUgdGhlIHdhdGNoZG9nIHRpbWVyIG1vZHVsZS4KKyAgICBIV1JFR0JJVFcoV0RUX0JBU0UgKyBXRFRfT19DVEwsIFdEVF9DVExfSU5URU5fQklUTikgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSB3YXRjaGRvZyB0aW1lciByZXNldC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgd2F0Y2hkb2cgdGltZXIgdG8gaXNzdWUgYSByZXNldAorLy8hIHRvIHRoZSBwcm9jZXNzb3IgYWZ0ZXIgYSBzZWNvbmQgdGltZW91dCBjb25kaXRpb24uCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIGhhcyBubyBlZmZlY3QgaWYgdGhlIHdhdGNoZG9nIHRpbWVyIGhhcyBiZWVuIGxvY2tlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgV2F0Y2hkb2dMb2NrKCksIFxyZWYgV2F0Y2hkb2dVbmxvY2soKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitXYXRjaGRvZ1Jlc2V0RW5hYmxlKHZvaWQpCit7CisgICAgLy8gRW5hYmxlIHRoZSB3YXRjaGRvZyByZXNldC4KKyAgICBIV1JFR0JJVFcoV0RUX0JBU0UgKyBXRFRfT19DVEwsIFdEVF9DVExfUkVTRU5fQklUTikgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyB0aGUgd2F0Y2hkb2cgdGltZXIgcmVzZXQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBjYXBhYmlsaXR5IG9mIHRoZSB3YXRjaGRvZyB0aW1lciB0byBpc3N1ZSBhCisvLyEgcmVzZXQgdG8gdGhlIHByb2Nlc3NvciBhZnRlciBhIHNlY29uZCB0aW1lb3V0IGNvbmRpdGlvbi4KKy8vIQorLy8hIFxub3RlIFRoaXMgZnVuY3Rpb24gaGFzIG5vIGVmZmVjdCBpZiB0aGUgd2F0Y2hkb2cgdGltZXIgaGFzIGJlZW4gbG9ja2VkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBXYXRjaGRvZ0xvY2soKSwgXHJlZiBXYXRjaGRvZ1VubG9jaygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1dhdGNoZG9nUmVzZXREaXNhYmxlKHZvaWQpCit7CisgICAgLy8gRGlzYWJsZSB0aGUgd2F0Y2hkb2cgcmVzZXQuCisgICAgSFdSRUdCSVRXKFdEVF9CQVNFICsgV0RUX09fQ1RMLCBXRFRfQ1RMX1JFU0VOX0JJVE4pID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyB0aGUgd2F0Y2hkb2cgdGltZXIgbG9jayBtZWNoYW5pc20uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGxvY2tzIG91dCB3cml0ZSBhY2Nlc3MgdG8gdGhlIHdhdGNoZG9nIHRpbWVyIGNvbmZpZ3VyYXRpb24KKy8vISByZWdpc3RlcnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorV2F0Y2hkb2dMb2NrKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBMb2NrIG91dCB3YXRjaGRvZyByZWdpc3RlciB3cml0ZXMuIFdyaXRpbmcgYW55dGhpbmcgdG8gdGhlIFdEVF9PX0xPQ0sKKyAgICAvLyByZWdpc3RlciBjYXVzZXMgdGhlIGxvY2sgdG8gZ28gaW50byBlZmZlY3QuCisgICAgLy8KKyAgICBIV1JFRyhXRFRfQkFTRSArIFdEVF9PX0xPQ0spID0gV0FUQ0hET0dfTE9DS19MT0NLRUQ7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSB3YXRjaGRvZyB0aW1lciBsb2NrIG1lY2hhbmlzbS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB3cml0ZSBhY2Nlc3MgdG8gdGhlIHdhdGNoZG9nIHRpbWVyIGNvbmZpZ3VyYXRpb24KKy8vISByZWdpc3RlcnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorV2F0Y2hkb2dVbmxvY2sodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFVubG9jayB3YXRjaGRvZyByZWdpc3RlciB3cml0ZXMuCisgICAgLy8KKyAgICBIV1JFRyhXRFRfQkFTRSArIFdEVF9PX0xPQ0spID0gV0FUQ0hET0dfTE9DS19VTkxPQ0s7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIHN0YXRlIG9mIHRoZSB3YXRjaGRvZyB0aW1lciBsb2NrIG1lY2hhbmlzbS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbG9jayBzdGF0ZSBvZiB0aGUgd2F0Y2hkb2cgdGltZXIgcmVnaXN0ZXJzLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXRlIG9mIGxvY2sgbWVjaGFuaXNtLgorLy8hIC0gXGMgdHJ1ZSAgOiBXYXRjaGRvZyB0aW1lciByZWdpc3RlcnMgYXJlIGxvY2tlZC4KKy8vISAtIFxjIGZhbHNlIDogUmVnaXN0ZXJzIGFyZSBub3QgbG9ja2VkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitXYXRjaGRvZ0xvY2tTdGF0ZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gR2V0IHRoZSBsb2NrIHN0YXRlLgorICAgIC8vCisgICAgcmV0dXJuKChIV1JFRyhXRFRfQkFTRSArIFdEVF9PX0xPQ0spID09IFdBVENIRE9HX0xPQ0tfTE9DS0VEKSA/CisgICAgICAgICAgICAgICB0cnVlIDogZmFsc2UpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHRoZSB3YXRjaGRvZyB0aW1lciByZWxvYWQgdmFsdWUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHZhbHVlIHRvIGxvYWQgaW50byB0aGUgd2F0Y2hkb2cgdGltZXIgd2hlbiB0aGUKKy8vISBjb3VudCByZWFjaGVzIHplcm8gZm9yIHRoZSBmaXJzdCB0aW1lOyBpZiB0aGUgd2F0Y2hkb2cgdGltZXIgaXMgcnVubmluZworLy8hIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZW4gdGhlIHZhbHVlIGlzIGltbWVkaWF0ZWx5IGxvYWRlZCBpbnRvIHRoZQorLy8hIHdhdGNoZG9nIHRpbWVyIGNvdW50ZXIuICBJZiB0aGUgXGMgdWkzMkxvYWRWYWwgcGFyYW1ldGVyIGlzIDAsIHRoZW4gYW4KKy8vISBpbnRlcnJ1cHQgaXMgaW1tZWRpYXRlbHkgZ2VuZXJhdGVkLgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiBoYXMgbm8gZWZmZWN0IGlmIHRoZSB3YXRjaGRvZyB0aW1lciBoYXMgYmVlbiBsb2NrZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkxvYWRWYWwgaXMgdGhlIGxvYWQgdmFsdWUgZm9yIHRoZSB3YXRjaGRvZyB0aW1lci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgV2F0Y2hkb2dMb2NrKCksIFxyZWYgV2F0Y2hkb2dVbmxvY2soKSwgXHJlZiBXYXRjaGRvZ1JlbG9hZEdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1dhdGNoZG9nUmVsb2FkU2V0KHVpbnQzMl90IHVpMzJMb2FkVmFsKQoreworICAgIC8vCisgICAgLy8gU2V0IHRoZSBsb2FkIHJlZ2lzdGVyLgorICAgIC8vCisgICAgSFdSRUcoV0RUX0JBU0UgKyBXRFRfT19MT0FEKSA9IHVpMzJMb2FkVmFsOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSB3YXRjaGRvZyB0aW1lciByZWxvYWQgdmFsdWUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHZhbHVlIHRoYXQgaXMgbG9hZGVkIGludG8gdGhlIHdhdGNoZG9nIHRpbWVyIHdoZW4KKy8vISB0aGUgY291bnQgcmVhY2hlcyB6ZXJvIGZvciB0aGUgZmlyc3QgdGltZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgV2F0Y2hkb2dSZWxvYWRTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorV2F0Y2hkb2dSZWxvYWRHZXQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEdldCB0aGUgbG9hZCByZWdpc3Rlci4KKyAgICAvLworICAgIHJldHVybihIV1JFRyhXRFRfQkFTRSArIFdEVF9PX0xPQUQpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgY3VycmVudCB3YXRjaGRvZyB0aW1lciB2YWx1ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHdhdGNoZG9nIHRpbWVyLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB3YXRjaGRvZyB0aW1lci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1dhdGNoZG9nVmFsdWVHZXQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEdldCB0aGUgY3VycmVudCB3YXRjaGRvZyB0aW1lciByZWdpc3RlciB2YWx1ZS4KKyAgICAvLworICAgIHJldHVybihIV1JFRyhXRFRfQkFTRSArIFdEVF9PX1ZBTFVFKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgYWN0dWFsIHJlZ2lzdGVyaW5nIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gVGhpcworLy8hIGZ1bmN0aW9uIGFsc28gZW5hYmxlcyB0aGUgZ2xvYmFsIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXI7IHRoZQorLy8hIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdCBtdXN0IGJlIGVuYWJsZWQgdmlhIFxyZWYgV2F0Y2hkb2dJbnRFbmFibGUoKS4gSXQgaXMgdGhlCisvLyEgaW50ZXJydXB0IGhhbmRsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZSB2aWEKKy8vISBccmVmIFdhdGNoZG9nSW50Q2xlYXIoKS4KKy8vIQorLy8hIFxub3RlIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIHRoZSBzdGFuZGFyZCB3YXRjaGRvZyBpbnRlcnJ1cHQgaGFuZGxlci4gVG8KKy8vISByZWdpc3RlciB0aGUgTk1JIHdhdGNoZG9nIGhhbmRsZXIsIHVzZSBccmVmIEludFJlZ2lzdGVyKCkgdG8gcmVnaXN0ZXIgdGhlCisvLyEgaGFuZGxlciBmb3IgdGhlIFxiIElOVF9OTUlfRkFVTFQgaW50ZXJydXB0LgorLy8hCisvLyEgXHBhcmFtIHBmbkhhbmRsZXIgaXMgYSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUKKy8vISB3YXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQgb2NjdXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1dhdGNoZG9nSW50UmVnaXN0ZXIodm9pZCAoKnBmbkhhbmRsZXIpKHZvaWQpKQoreworICAgIC8vCisgICAgLy8gUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50UmVnaXN0ZXIoSU5UX1dEVF9JUlEsIHBmbkhhbmRsZXIpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdC4KKyAgICAvLworICAgIEludEVuYWJsZShJTlRfV0RUX0lSUSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgd2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhY3R1YWwgdW5yZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFRoaXMKKy8vISBmdW5jdGlvbiBjbGVhcnMgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gYSB3YXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQKKy8vISBvY2N1cnMuIFRoaXMgZnVuY3Rpb24gYWxzbyBtYXNrcyBvZmYgdGhlIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0CisvLyEgY29udHJvbGxlciBzbyB0aGF0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBubyBsb25nZXIgaXMgY2FsbGVkLgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgdGhlIHN0YW5kYXJkIHdhdGNoZG9nIGludGVycnVwdCBoYW5kbGVyLiBUbworLy8hIHJlZ2lzdGVyIHRoZSBOTUkgd2F0Y2hkb2cgaGFuZGxlciwgdXNlIFxyZWYgSW50UmVnaXN0ZXIoKSB0byByZWdpc3RlciB0aGUKKy8vISBoYW5kbGVyIGZvciB0aGUgXGIgSU5UX05NSV9GQVVMVCBpbnRlcnJ1cHQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorV2F0Y2hkb2dJbnRVbnJlZ2lzdGVyKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBJbnREaXNhYmxlKElOVF9XRFRfSVJRKTsKKworICAgIC8vCisgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRVbnJlZ2lzdGVyKElOVF9XRFRfSVJRKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyB0aGUgd2F0Y2hkb2cgdGltZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdCBieSBjYWxsaW5nIFxyZWYgV2F0Y2hkb2dFbmFibGUoKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgV2F0Y2hkb2dFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitXYXRjaGRvZ0ludEVuYWJsZSh2b2lkKQoreworICAgIC8vIEVuYWJsZSB0aGUgV2F0Y2hkb2cgaW50ZXJydXB0LgorICAgIFdhdGNoZG9nRW5hYmxlKCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgd2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0IHN0YXR1cy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW50ZXJydXB0IHN0YXR1cyBmb3IgdGhlIHdhdGNoZG9nIHRpbWVyIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgaW50ZXJydXB0IHN0YXR1cy4KKy8vISAtIDEgOiBXYXRjaGRvZyB0aW1lLW91dCBoYXMgb2NjdXJyZWQuCisvLyEgLSAwIDogV2F0Y2hkb2cgdGltZS1vdXQgaGFzIG5vdCBvY2N1cnJlZC4KKy8vIQorLy8hIFxzYSBccmVmIFdhdGNoZG9nSW50Q2xlYXIoKTsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1dhdGNoZG9nSW50U3RhdHVzKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZXR1cm4gZWl0aGVyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBhcworICAgIC8vIHJlcXVlc3RlZC4KKyAgICAvLworICAgIHJldHVybihIV1JFRyhXRFRfQkFTRSArIFdEVF9PX1JJUykpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhcnMgdGhlIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdC4KKy8vIQorLy8hIFRoZSB3YXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQgc291cmNlIGlzIGNsZWFyZWQsIHNvIHRoYXQgaXQgbm8gbG9uZ2VyCisvLyEgYXNzZXJ0cy4KKy8vIQorLy8hIFxub3RlIER1ZSB0byB3cml0ZSBidWZmZXJzIGFuZCBzeW5jaHJvbml6ZXJzIGluIHRoZSBzeXN0ZW0gaXQgbWF5IHRha2Ugc2V2ZXJhbAorLy8hIGNsb2NrIGN5Y2xlcyBmcm9tIGEgcmVnaXN0ZXIgd3JpdGUgY2xlYXJpbmcgYW4gZXZlbnQgaW4gYSBtb2R1bGUgYW5kIHVudGlsIHRoZQorLy8hIGV2ZW50IGlzIGFjdHVhbGx5IGNsZWFyZWQgaW4gdGhlIE5WSUMgb2YgdGhlIHN5c3RlbSBDUFUuIEl0IGlzIHJlY29tbWVuZGVkIHRvCisvLyEgY2xlYXIgdGhlIGV2ZW50IHNvdXJjZSBlYXJseSBpbiB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAoSVNSKSB0byBhbGxvdworLy8hIHRoZSBldmVudCBjbGVhciB0byBwcm9wYWdhdGUgdG8gdGhlIE5WSUMgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IuCisvLyEgQXQgdGhlIHNhbWUgdGltZSwgYW4gZWFybHkgZXZlbnQgY2xlYXIgYWxsb3dzIG5ldyBldmVudHMgb2YgdGhlIHNhbWUgdHlwZSB0byBiZQorLy8hIHBlbmRlZCBpbnN0ZWFkIG9mIGlnbm9yZWQgaWYgdGhlIGV2ZW50IGlzIGNsZWFyZWQgbGF0ZXIgaW4gdGhlIElTUi4KKy8vISBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHByb2dyYW1tZXIgdG8gbWFrZSBzdXJlIHRoYXQgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZAorLy8hIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIHRvIGF2b2lkIGZhbHNlIHJlLXRyaWdnZXJpbmcgb2YgdGhlIGNsZWFyZWQgZXZlbnQuCisvLyEgQSBzaW1wbGUsIGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSBvcHRpbWFsLCB3YXkgb2YgY2xlYXJpbmcgYW4gZXZlbnQgYmVmb3JlCisvLyEgcmV0dXJuaW5nIGZyb20gdGhlIElTUiBpczoKKy8vISAtIyBXcml0ZSB0byBjbGVhciBldmVudCAoaW50ZXJydXB0IHNvdXJjZSkuIChidWZmZXJlZCB3cml0ZSkKKy8vISAtIyBEdW1teSByZWFkIGZyb20gdGhlIGV2ZW50IHNvdXJjZSBtb2R1bGUuIChtYWtpbmcgc3VyZSB0aGUgd3JpdGUgaGFzIHByb3BhZ2F0ZWQpCisvLyEgLSMgV2FpdCB0d28gc3lzdGVtIENQVSBjbG9jayBjeWNsZXMgKHVzZXIgY29kZSBvciB0d28gTk9QcykuIChhbGxvd2luZyBjbGVhcmVkIGV2ZW50IHRvIHByb3BhZ2F0ZSB0aHJvdWdoIGFueSBzeW5jaHJvbml6ZXJzKQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1dhdGNoZG9nSW50Q2xlYXIodm9pZCkKK3sKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlLgorICAgIC8vCisgICAgSFdSRUcoV0RUX0JBU0UgKyBXRFRfT19JQ1IpID0gV0FUQ0hET0dfSU5UX1RJTUVPVVQ7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIHR5cGUgb2YgaW50ZXJydXB0IGdlbmVyYXRlZCBieSB0aGUgd2F0Y2hkb2cuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHR5cGUgb2YgaW50ZXJydXB0IHRoYXQgaXMgZ2VuZXJhdGVkIGlmIHRoZSB3YXRjaGRvZworLy8hIHRpbWVyIGV4cGlyZXMuCisvLyEKKy8vISBXaGVuIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgYW4gTk1JLCB0aGUgd2F0Y2hkb2cgaW50ZXJydXB0IG11c3Qgc3RpbGwgYmUKKy8vISBlbmFibGVkIHdpdGggXHJlZiBXYXRjaGRvZ0ludEVuYWJsZSgpLCBhbmQgaXQgbXVzdCBzdGlsbCBiZSBjbGVhcmVkIGluc2lkZSB0aGUKKy8vISBOTUkgaGFuZGxlciB3aXRoIFxyZWYgV2F0Y2hkb2dJbnRDbGVhcigpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJUeXBlIGlzIHRoZSB0eXBlIG9mIGludGVycnVwdCB0byBnZW5lcmF0ZS4KKy8vISAtIFxyZWYgV0FUQ0hET0dfSU5UX1RZUEVfSU5UIDogR2VuZXJhdGUgYSBzdGFuZGFyZCBpbnRlcnJ1cHQgKGRlZmF1bHQpLgorLy8hIC0gXHJlZiBXQVRDSERPR19JTlRfVFlQRV9OTUkgOiBHZW5lcmF0ZSBhIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgKE5NSSkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorV2F0Y2hkb2dJbnRUeXBlU2V0KHVpbnQzMl90IHVpMzJUeXBlKQoreworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgQVNTRVJUKCh1aTMyVHlwZSA9PSBXQVRDSERPR19JTlRfVFlQRV9JTlQpIHx8CisgICAgICAgICAgICh1aTMyVHlwZSA9PSBXQVRDSERPR19JTlRfVFlQRV9OTUkpKTsKKworICAgIC8vIFNldCB0aGUgaW50ZXJydXB0IHR5cGUuCisgICAgSFdSRUdCSVRXKFdEVF9CQVNFICsgV0RUX09fQ1RMLCBXRFRfQ1RMX0lOVFRZUEVfQklUTikgPSAodWkzMlR5cGUgPT0gV0FUQ0hET0dfSU5UX1RZUEVfSU5UKT8gMCA6IDE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgc3RhbGxpbmcgb2YgdGhlIHdhdGNoZG9nIHRpbWVyIGR1cmluZyBkZWJ1ZyBldmVudHMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgd2F0Y2hkb2cgdGltZXIgdG8gc3RvcCBjb3VudGluZyB3aGVuIHRoZSBwcm9jZXNzb3IKKy8vISBpcyBzdG9wcGVkIGJ5IHRoZSBkZWJ1Z2dlci4gQnkgZG9pbmcgc28sIHRoZSB3YXRjaGRvZyBpcyBwcmV2ZW50ZWQgZnJvbQorLy8hIGV4cGlyaW5nIGFuZCByZXNldHRpbmcgdGhlIHN5c3RlbSAoaWYgcmVzZXQgaXMgZW5hYmxlZCkuIFRoZSB3YXRjaGRvZyBpbnN0ZWFkIGV4cGlyZXMKKy8vISBhZnRlciB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIHByb2Nlc3NvciBjeWNsZXMgaGF2ZSBiZWVuIGV4ZWN1dGVkIHdoaWxlCisvLyEgZGVidWdnaW5nIChvciBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZSBhZnRlciB0aGUgcHJvY2Vzc29yIGhhcyBiZWVuCisvLyEgcmVzdGFydGVkKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitXYXRjaGRvZ1N0YWxsRW5hYmxlKHZvaWQpCit7CisgICAgLy8gRW5hYmxlIHRpbWVyIHN0YWxsaW5nLgorICAgIEhXUkVHQklUVyhXRFRfQkFTRSArIFdEVF9PX1RFU1QsIFdEVF9URVNUX1NUQUxMX0JJVE4pID0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgc3RhbGxpbmcgb2YgdGhlIHdhdGNoZG9nIHRpbWVyIGR1cmluZyBkZWJ1ZyBldmVudHMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBkZWJ1ZyBtb2RlIHN0YWxsIG9mIHRoZSB3YXRjaGRvZyB0aW1lci4gQnkKKy8vISBkb2luZyBzbywgdGhlIHdhdGNoZG9nIHRpbWVyIGNvbnRpbnVlcyB0byBjb3VudCByZWdhcmRsZXNzIG9mIHRoZSBwcm9jZXNzb3IKKy8vISBkZWJ1ZyBzdGF0ZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitXYXRjaGRvZ1N0YWxsRGlzYWJsZSh2b2lkKQoreworICAgIC8vIERpc2FibGUgdGltZXIgc3RhbGxpbmcuCisgICAgSFdSRUdCSVRXKFdEVF9CQVNFICsgV0RUX09fVEVTVCwgV0RUX1RFU1RfU1RBTExfQklUTikgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fV0RUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi93YXRjaGRvZ19kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3dhdGNoZG9nX2RvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzdlNzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi93YXRjaGRvZ19kb2MuaApAQCAtMCwwICsxLDk4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgd2F0Y2hkb2dfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIHdkdF9hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY193ZHQgSW50cm9kdWN0aW9uCisvLyEKKy8vISBUaGUgd2F0Y2hkb2cgdGltZXIgKFdEVCkgaXMgdXNlZCB0byByZWdhaW4gY29udHJvbCB3aGVuIHRoZSBzeXN0ZW0gaGFzIGZhaWxlZCBkdWUgdG8gdW5leHBlY3RlZAorLy8hIHNvZnR3YXJlIGJlaGF2aW9yLiBUaGUgV0RUIGNhbiBnZW5lcmF0ZSBhIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgKE5NSSksIGEgcmVndWxhciBpbnRlcnJ1cHQsIG9yIGEKKy8vISByZXNldCBpZiB0aGUgc29mdHdhcmUgZmFpbHMgdG8gcmVsb2FkIHRoZSB3YXRjaGRvZyBiZWZvcmUgaXQgdGltZXMgb3V0LgorLy8hCisvLyEgV0RUIGhhcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgorLy8hIC0gMzItYml0IGRvd24gY291bnRlciB3aXRoIGEgcHJvZ3JhbW1hYmxlIGxvYWQgcmVnaXN0ZXIuCisvLyEgLSBQcm9ncmFtbWFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gbG9naWMgd2l0aCBpbnRlcnJ1cHQgbWFza2luZyBhbmQgb3B0aW9uYWwgTk1JIGZ1bmN0aW9uLgorLy8hIC0gT3B0aW9uYWwgcmVzZXQgZ2VuZXJhdGlvbi4KKy8vISAtIFJlZ2lzdGVyIHByb3RlY3Rpb24gZnJvbSBydW5hd2F5IHNvZnR3YXJlIChsb2NrKS4KKy8vISAtIFVzZXItZW5hYmxlZCBzdGFsbGluZyB3aGVuIHRoZSBzeXN0ZW0gQ1BVIGFzc2VydHMgdGhlIENQVSBIYWx0IGZsYWcgZHVyaW5nIGRlYnVnLgorLy8hCisvLyEgQWZ0ZXIgdGhlIGZpcnN0IHRpbWUtb3V0IGV2ZW50LCB0aGUgMzItYml0IGNvdW50ZXIgaXMgcmUtbG9hZGVkIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBMb2FkIHJlZ2lzdGVyLAorLy8hIGFuZCB0aGUgdGltZXIgcmVzdW1lcyBjb3VudGluZyBkb3duIGZyb20gdGhhdCB2YWx1ZS4KKy8vISBJZiB0aGUgdGltZXIgY291bnRzIGRvd24gdG8gaXRzIHplcm8gc3RhdGUgYWdhaW4gYmVmb3JlIHRoZSBmaXJzdCB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgY2xlYXJlZCwKKy8vISBhbmQgdGhlIHJlc2V0IHNpZ25hbCBoYXMgYmVlbiBlbmFibGVkLCB0aGUgV0RUIGFzc2VydHMgaXRzIHJlc2V0IHNpZ25hbCB0byB0aGUgc3lzdGVtLiBJZiB0aGUgaW50ZXJydXB0CisvLyEgaXMgY2xlYXJlZCBiZWZvcmUgdGhlIDMyLWJpdCBjb3VudGVyIHJlYWNoZXMgaXRzIHNlY29uZCB0aW1lLW91dCwgdGhlIDMyLWJpdCBjb3VudGVyIGlzIGxvYWRlZCB3aXRoIHRoZQorLy8hIHZhbHVlIGluIHRoZSBMb2FkIHJlZ2lzdGVyLCBhbmQgY291bnRpbmcgcmVzdW1lcyBmcm9tIHRoYXQgdmFsdWUuCisvLyEKKy8vISBJZiBMb2FkIHJlZ2lzdGVyIGlzIHdyaXR0ZW4gd2l0aCBhIG5ldyB2YWx1ZSB3aGlsZSB0aGUgV0RUIGNvdW50ZXIgaXMgY291bnRpbmcsIHRoZW4gdGhlIGNvdW50ZXIgaXMKKy8vISBsb2FkZWQgd2l0aCB0aGUgbmV3IHZhbHVlIGFuZCBjb250aW51ZXMgY291bnRpbmcuCisvLyEgV3JpdGluZyB0byB0aGUgTG9hZCByZWdpc3RlciBkb2VzIG5vdCBjbGVhciBhbiBhY3RpdmUgaW50ZXJydXB0LiBBbiBpbnRlcnJ1cHQgbXVzdCBiZSBleHBsaWNpdGx5IGNsZWFyZWQKKy8vISBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0LgorLy8hCisvLyEgVGhlIFdEVCBjb3VudGVyIHJ1bnMgYXQgc3lzdGVtIEhGIGNsb2NrIGRpdmlkZWQgYnkgMzI7IGhvd2V2ZXIsIHdoZW4gaW4gcG93ZXJkb3duIGl0IHJ1bnMgYXQKKy8vISBMRiBjbG9jayAoMzIga0h6KSAtIGlmIHRoZSBMRiBjbG9jayB0byB0aGUgTUNVIGRvbWFpbiBoYXMgYmVlbiBlbmFibGVkLgorLy8hCisvLyEgXHNlY3Rpb24gc2VjX3dkdF9hcGkgQVBJCisvLyEKKy8vISBUaGUgQVBJIGZ1bmN0aW9ucyBjYW4gYmUgZ3JvdXBlZCBsaWtlIHRoaXM6CisvLyEKKy8vISBXYXRjaGRvZyBjb25maWd1cmF0aW9uOgorLy8hIC0gXHJlZiBXYXRjaGRvZ0ludFR5cGVTZXQoKQorLy8hIC0gXHJlZiBXYXRjaGRvZ1Jlc2V0RW5hYmxlKCkKKy8vISAtIFxyZWYgV2F0Y2hkb2dSZXNldERpc2FibGUoKQorLy8hIC0gXHJlZiBXYXRjaGRvZ1JlbG9hZFNldCgpCisvLyEgLSBccmVmIFdhdGNoZG9nRW5hYmxlKCkKKy8vIQorLy8hIFN0YXR1czoKKy8vISAtIFxyZWYgV2F0Y2hkb2dSdW5uaW5nKCkKKy8vISAtIFxyZWYgV2F0Y2hkb2dWYWx1ZUdldCgpCisvLyEgLSBccmVmIFdhdGNoZG9nUmVsb2FkR2V0KCkKKy8vISAtIFxyZWYgV2F0Y2hkb2dJbnRTdGF0dXMoKQorLy8hCisvLyEgSW50ZXJydXB0IGNvbmZpZ3VyYXRpb246CisvLyEgLSBccmVmIFdhdGNoZG9nSW50RW5hYmxlKCkKKy8vISAtIFxyZWYgV2F0Y2hkb2dJbnRDbGVhcigpCisvLyEgLSBccmVmIFdhdGNoZG9nSW50UmVnaXN0ZXIoKQorLy8hIC0gXHJlZiBXYXRjaGRvZ0ludFVucmVnaXN0ZXIoKQorLy8hCisvLyEgUmVnaXN0ZXIgcHJvdGVjdGlvbjoKKy8vISAtIFxyZWYgV2F0Y2hkb2dMb2NrKCkKKy8vISAtIFxyZWYgV2F0Y2hkb2dMb2NrU3RhdGUoKQorLy8hIC0gXHJlZiBXYXRjaGRvZ1VubG9jaygpCisvLyEKKy8vISBTdGFsbCBjb25maWd1cmF0aW9uIGZvciBkZWJ1Z2dpbmc6CisvLyEgLSBccmVmIFdhdGNoZG9nU3RhbGxEaXNhYmxlKCkKKy8vISAtIFxyZWYgV2F0Y2hkb2dTdGFsbEVuYWJsZSgpCisvLyEKKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvYXNtZGVmcy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvYXNtZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDE3OGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9hc21kZWZzLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhc21kZWZzLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA2LTA1IDE0OjM5OjEwICswMjAwIChGcmksIDA1IEp1biAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQzODAzCisqCisqICBEZXNjcmlwdGlvbjogICAgTWFjcm9zIHRvIGFsbG93IGFzc2VtYmx5IGNvZGUgYmUgcG9ydGFibGUgYW1vbmcgdG9vbCBjaGFpbnMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQVNNREVGU19IX18KKyNkZWZpbmUgX19BU01ERUZTX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGRlZmluZXMgcmVxdWlyZWQgZm9yIEVXLUFSTS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19JQVJfU1lTVEVNU19JQ0NfXworCisvLworLy8gU2VjdGlvbiBoZWFkZXJzLgorLy8KKyNkZWZpbmUgX19MSUJSQVJZX18gICAgICAgICAgICAgbW9kdWxlCisjZGVmaW5lIF9fVEVYVF9fICAgICAgICAgICAgICAgIHJzZWcgQ09ERTpDT0RFKDIpCisjZGVmaW5lIF9fREFUQV9fICAgICAgICAgICAgICAgIHJzZWcgREFUQTpEQVRBKDIpCisjZGVmaW5lIF9fQlNTX18gICAgICAgICAgICAgICAgIHJzZWcgREFUQTpEQVRBKDIpCisjZGVmaW5lIF9fVEVYVF9OT1JPT1RfXyAgICAgICAgIHJzZWcgQ09ERTpDT0RFOk5PUk9PVCgyKQorCisvLworLy8gQXNzZW1ibGVyIG1uZW1vbmljcy4KKy8vCisjZGVmaW5lIF9fQUxJR05fXyAgICAgICAgICAgICAgIGFsaWducm9tIDIKKyNkZWZpbmUgX19FTkRfXyAgICAgICAgICAgICAgICAgZW5kCisjZGVmaW5lIF9fRVhQT1JUX18gICAgICAgICAgICAgIGV4cG9ydAorI2RlZmluZSBfX0lNUE9SVF9fICAgICAgICAgICAgICBpbXBvcnQKKyNkZWZpbmUgX19MQUJFTF9fCisjZGVmaW5lIF9fU1RSX18gICAgICAgICAgICAgICAgIGRjYgorI2RlZmluZSBfX1RIVU1CX0xBQkVMX18gICAgICAgICB0aHVtYgorI2RlZmluZSBfX1dPUkRfXyAgICAgICAgICAgICAgICBkY2QKKyNkZWZpbmUgX19JTkxJTkVfREFUQV9fICAgICAgICAgZGF0YQorCisjZW5kaWYgLy8gX19JQVJfU1lTVEVNU19JQ0NfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGRlZmluZXMgcmVxdWlyZWQgZm9yIEdDQy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKworLy8KKy8vIFRoZSBhc3NlbWJseSBjb2RlIHByZWFtYmxlIHJlcXVpcmVkIHRvIHB1dCB0aGUgYXNzZW1ibGVyIGludG8gdGhlIGNvcnJlY3QKKy8vIGNvbmZpZ3VyYXRpb24uCisvLworICAgIC5zeW50YXggdW5pZmllZAorICAgIC50aHVtYgorCisvLworLy8gU2VjdGlvbiBoZWFkZXJzLgorLy8KKyNkZWZpbmUgX19MSUJSQVJZX18gICAgICAgICAgICAgQAorI2RlZmluZSBfX1RFWFRfXyAgICAgICAgICAgICAgICAudGV4dAorI2RlZmluZSBfX0RBVEFfXyAgICAgICAgICAgICAgICAuZGF0YQorI2RlZmluZSBfX0JTU19fICAgICAgICAgICAgICAgICAuYnNzCisjZGVmaW5lIF9fVEVYVF9OT1JPT1RfXyAgICAgICAgIC50ZXh0CisKKy8vCisvLyBBc3NlbWJsZXIgbW5lbW9uaWNzLgorLy8KKyNkZWZpbmUgX19BTElHTl9fICAgICAgICAgICAgICAgLmJhbGlnbiA0CisjZGVmaW5lIF9fRU5EX18gICAgICAgICAgICAgICAgIC5lbmQKKyNkZWZpbmUgX19FWFBPUlRfXyAgICAgICAgICAgICAgLmdsb2JsCisjZGVmaW5lIF9fSU1QT1JUX18gICAgICAgICAgICAgIC5leHRlcm4KKyNkZWZpbmUgX19MQUJFTF9fICAgICAgICAgICAgICAgOgorI2RlZmluZSBfX1NUUl9fICAgICAgICAgICAgICAgICAuYXNjaWkKKyNkZWZpbmUgX19USFVNQl9MQUJFTF9fICAgICAgICAgLnRodW1iX2Z1bmMKKyNkZWZpbmUgX19XT1JEX18gICAgICAgICAgICAgICAgLndvcmQKKyNkZWZpbmUgX19JTkxJTkVfREFUQV9fCisKKyNlbmRpZiAvLyBfX0dOVUNfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGRlZmluZXMgcmVxdWlyZWQgZm9yIFJWLU1ESy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKKworLy8KKy8vIFRoZSBhc3NlbWJseSBjb2RlIHByZWFtYmxlIHJlcXVpcmVkIHRvIHB1dCB0aGUgYXNzZW1ibGVyIGludG8gdGhlIGNvcnJlY3QKKy8vIGNvbmZpZ3VyYXRpb24uCisvLworICAgIHRodW1iCisgICAgcmVxdWlyZTgKKyAgICBwcmVzZXJ2ZTgKKworLy8KKy8vIFNlY3Rpb24gaGVhZGVycy4KKy8vCisjZGVmaW5lIF9fTElCUkFSWV9fICAgICAgICAgICAgIDsKKyNkZWZpbmUgX19URVhUX18gICAgICAgICAgICAgICAgYXJlYSB8fC50ZXh0fHwsIGNvZGUsIHJlYWRvbmx5LCBhbGlnbj0yCisjZGVmaW5lIF9fREFUQV9fICAgICAgICAgICAgICAgIGFyZWEgfHwuZGF0YXx8LCBkYXRhLCBhbGlnbj0yCisjZGVmaW5lIF9fQlNTX18gICAgICAgICAgICAgICAgIGFyZWEgfHwuYnNzfHwsIG5vaW5pdCwgYWxpZ249MgorI2RlZmluZSBfX1RFWFRfTk9ST09UX18gICAgICAgICBhcmVhIHx8LnRleHR8fCwgY29kZSwgcmVhZG9ubHksIGFsaWduPTIKKworLy8KKy8vIEFzc2VtYmxlciBtbmVtb25pY3MuCisvLworI2RlZmluZSBfX0FMSUdOX18gICAgICAgICAgICAgICBhbGlnbiA0CisjZGVmaW5lIF9fRU5EX18gICAgICAgICAgICAgICAgIGVuZAorI2RlZmluZSBfX0VYUE9SVF9fICAgICAgICAgICAgICBleHBvcnQKKyNkZWZpbmUgX19JTVBPUlRfXyAgICAgICAgICAgICAgaW1wb3J0CisjZGVmaW5lIF9fTEFCRUxfXworI2RlZmluZSBfX1NUUl9fICAgICAgICAgICAgICAgICBkY2IKKyNkZWZpbmUgX19USFVNQl9MQUJFTF9fCisjZGVmaW5lIF9fV09SRF9fICAgICAgICAgICAgICAgIGRjZAorI2RlZmluZSBfX0lOTElORV9EQVRBX18KKworI2VuZGlmIC8vIF9fQ0NfQVJNCisKKworI2VuZGlmIC8vIF9fQVNNREVGX0hfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmViNTMxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpLmgKQEAgLTAsMCArMSwxMTgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYWRpLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTAxLTEzIDE2OjU5OjU1ICswMTAwIChUdWUsIDEzIEphbiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQyMzY1CisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQURJX0hfXworI2RlZmluZSBfX0hXX0FESV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyBtYWNyb3MgZm9yIGNvbnRyb2xsaW5nIHRoZSBBREkgbWFzdGVyIGFuZAorLy8gYWNjZXNzaW5nIEFESSBzbGF2ZSByZWdpc3RlcnMgdmlhIHRoZSBBREkgTWFzdGVyLgorLy8gVGhlcmUgYXJlIDMgY2F0ZWdvcmllcyBvZiBtYWNyb3MgaW4gdGhpcyBmaWxlOgorLy8gICAgICAgICAgICAgICAgIC0gbWFjcm9zIHRoYXQgcHJvdmlkZSBhbiBvZmZzZXQgdG8gYSByZWdpc3RlcgorLy8gICAgICAgICAgICAgICAgICAgbG9jYXRlZCB3aXRoaW4gdGhlIERESSBNYXN0ZXIgaXRzZWxmLgorLy8gICAgICAgICAgICAgICAgIC0gbWFjcm9zIHRoYXQgZGVmaW5lIGJpdHMgb3IgYml0ZmllbGRzCisvLyAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIERESSBNYXN0ZXIgUmVnaXN0ZXJzLgorLy8gICAgICAgICAgICAgICAgIC0gbWFjcm9zIHRoYXQgcHJvdmlkZSBhbiAiaW5zdHJ1Y3Rpb24gb2Zmc2V0IgorLy8gICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgdXNlZCB3aGVuIGFjY2Vzc2luZyBhIEFESSBTbGF2ZS4KKy8vCisvLyBUaGUgbWFjcm9zIHRoYXQgdGhhdCBwcm92aWRlIEFESSBNYXN0ZXIgcmVnaXN0ZXIgb2Zmc2V0cyBhbmQKKy8vIGRlZmluZSBiaXRzIGFuZCBiaXRmaWVsZHMgZm9yIHRob3NlIHJlZ2lzdGVycyBhcmUgdGhlIHR5cGljYWwKKy8vIG1hY3JvcyB0aGF0IGFwcGVhciBpbiBtb3N0IGh3Xzxtb2R1bGU+LmggaGVhZGVyIGZpbGVzLiAgSW4KKy8vIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBBRElfT19TTEFWRUNPTkYgaXMgYSBtYWNybyBmb3IgYQorLy8gcmVnaXN0ZXIgb2Zmc2V0IGFuZCBBRElfU0xBVkVDT05GX1dBSVRGT1JBQ0sgaXMgYSBtYWNybyBmb3IKKy8vIGEgYml0IGluIHRoYXQgcmVnaXN0ZXIuIFRoaXMgZXhhbXBsZSBjb2RlIHdpbGwgc2V0IHRoZSBXQUlURk9SQUNLCisvLyBiaXQgaW4gcmVnaXN0ZXIgQURJX09fU0xBVkVDT05GIG9mIHRoZSBBREkgTWFzdGVyLiAoTm90ZTogdGhpcworLy8gYWNjZXNzIHRoZSBNYXN0ZXIgbm90IHRoZSBTbGF2ZSkuCisvLworLy8gICAgSFdSRUcoQURJM19CQVNFICsgQURJX09fU0xBVkVDT05GKSB8PSBBRElfU0xBVkVDT05GX1dBSVRGT1JBQ0s7CisvLworLy8gVGhlICJpbnN0cnVjdGlvbiBvZmZzZXQiIG1hY3JvcyBhcmUgdXNlZCB0byBwYXNzIGFuIGluc3RydWN0aW9uIHRvCisvLyB0aGUgQURJIE1hc3RlciB3aGVuIGFjY2Vzc2luZyBBREkgc2xhdmUgcmVnaXN0ZXJzLiBUaGVzZSBtYWNyb3MgYXJlCisvLyBvbmx5IHVzZWQgd2hlbiBhY2Nlc3NpbmcgQURJIFNsYXZlIFJlZ2lzdGVycy4gKFJlbWVtYmVyIEFESQorLy8gTWFzdGVyIFJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgbm9ybWFsbHkpLgorLy8KKy8vIFRoZSBpbnN0cnVjdGlvbnMgc3VwcG9ydGVkIHdoZW4gYWNjZXNzaW5nIGFuIEFESSBTbGF2ZSBSZWdpc3RlciBmb2xsb3c6CisvLyAgICAgICAgLSBEaXJlY3QgQWNjZXNzIHRvIGFuIEFESSBTbGF2ZSByZWdpc3Rlci4gSS5lLiByZWFkIG9yCisvLyAgICAgICAgICB3cml0ZSB0aGUgcmVnaXN0ZXIuCisvLyAgICAgICAgLSBTZXQgdGhlIHNwZWNpZmllZCBiaXRzIGluIGEgQURJIFNsYXZlIHJlZ2lzdGVyLgorLy8gICAgICAgIC0gQ2xlYXIgdGhlIHNwZWNpZmllZCBiaXRzIGluIGEgQURJIFNsYXZlIHJlZ2lzdGVyLgorLy8gICAgICAgIC0gTWFzayB3cml0ZSBvZiA0IGJpdHMgdG8gdGhlIGEgQURJIFNsYXZlIHJlZ2lzdGVyLgorLy8gICAgICAgIC0gTWFzayB3cml0ZSBvZiA4IGJpdHMgdG8gdGhlIGEgQURJIFNsYXZlIHJlZ2lzdGVyLgorLy8gICAgICAgIC0gTWFzayB3cml0ZSBvZiAxNiBiaXRzIHRvIHRoZSBhIEFESSBTbGF2ZSByZWdpc3Rlci4KKy8vCisvLyBOb3RlOiBvbmx5IHRoZSAiRGlyZWN0IEFjY2VzcyIgb2Zmc2V0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVhZGluZworLy8gYSBBREkgU2xhdmUgcmVnaXN0ZXIuIE9ubHkgNC1iaXQgcmVhZHMgYXJlIHN1cHBvcnRlZCBhbmQgOCBiaXRzIHdyaXRlIGFyZQorLy8gc3VwcG9ydGVkIG5hdGl2ZWx5LiBJZiBhY2Nlc3Npbmcgd2lkZXIgYml0ZmllbGRzLCB0aGUgcmVhZC93cml0ZSBvcGVyYXRpb24KKy8vIHdpbGwgYmUgc3ByZWFkIG91dCBvdmVyIGEgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucy4gVGhpcyBpcyBoaWRkZW4gZm9yIHRoZQorLy8gdXNlciwgYnV0IGNhbiBwb3RlbnRpYWxseSBiZSB2ZXJ5IHRpbWVjb25zdW1pbmcuIEVzcGVjaWFsbHkgb2YgcnVubmluZworLy8gb24gYSBzbG93IGNsb2NrLgorLy8KKy8vIFRoZSBnZW5lcmljIGZvcm1hdCBvZiB1c2luZyB0aGVzZSBtYWNyb3MgZm9yIGEgcmVhZCBmb2xsb3dzOgorLy8gICAgICAgLy8gUmVhZCBsb3cgOC1iaXRzIGluIEFESV9TTEFWRV9PRkYKKy8vICAgICAgIG15dXNob3J0dmFyID0gSFdSRUdCKEFESV9NQVNURVJfQkFTRSArIEFESV9TTEFWRV9PRkYgKyBBRElfT19ESVIpOworLy8KKy8vICAgICAgIC8vIFJlYWQgaGlnaCA4LWJpdHMgaW4gQURJX1NMQVZFX09GRiAoZGF0YVszMToxNl0pCisvLyAgICAgICBteXVzaG9ydHZhciA9IEhXUkVHQihBRElfTUFTVEVSX0JBU0UgKyBBRElfU0xBVkVfT0ZGICsgQURJX09fRElSKTsKKy8vCisvLyBOb3RlczogSW4gdGhlIGFib3ZlIGV4YW1wbGU6CisvLyAgICAgLSBBRElfTUFTVEVSX0JBU0UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgQURJIE1hc3RlciBkZWZpbmVkCisvLyAgICAgICBpbiB0aGUgaHdfbWVtbWFwLmggaGVhZGVyIGZpbGUuCisvLyAgICAgLSBBRElfU0xBVkVfT0ZGIGlzIHRoZSBBREkgU2xhdmUgb2Zmc2V0IGRlZmluZWQgaW4gdGhlCisvLyAgICAgICBod188YWRpX3NsYXZlPi5oIGhlYWRlciBmaWxlIChlLmcuIGh3X2FkaV8zX3JlZnN5c190b3AuaCBmb3IgdGhlIHJlZnN5cworLy8gICAgICAgbW9kdWxlKS4KKy8vICAgICAtIEFESV9PX0RJUiBpcyB0aGUgImluc3RydWN0aW9uIG9mZnNldCIgbWFjcm8gZGVmaW5lZCBpbiB0aGlzCisvLyAgICAgICBmaWxlIHRoYXQgc3BlY2lmaWVzIHRoZSBEaXJlY3QgQWNjZXNzIGluc3RydWN0aW9uLgorLy8KKy8vIFdyaXRlcyBjYW4gdXNlIGFueSBvZiB0aGUgImluc3RydWN0aW9uIG1hY3JvcyIuCisvLyBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGRvIGEgImRpcmVjdCB3cml0ZSIgdG8gYW4gQURJIFNsYXZlIHJlZ2lzdGVyCisvLyBBRElfU0xBVkVfT0ZGIHVzaW5nIGRpZmZlcmVudCBzaXplIG9wZXJhbmRzOgorLy8KKy8vICAgICAvLyAtLS0tLS0tLS0tIERJUkVDVCBXUklURVMgLS0tLS0tLS0tLQorLy8gICAgIC8vIFdyaXRlIDMyLWJpdHMgYWxpZ25lZAorLy8gICAgIEhXUkVHKEFESV9NQVNURVJfQkFTRSArIEFESV9TTEFWRV9PRkYgKyBBRElfT19ESVIpID0gMHgxMjM0NTY3ODsKKy8vCisvLyAgICAgLy8gV3JpdGUgMTYtYml0cyBhbGlnbmVkIHRvIGhpZ2ggMTYtYml0cyB0aGVuIGxvdyAxNi1iaXRzCisvLyAgICAgLy8gQWRkIDIgdG8gZ2V0IHRvIGhpZ2ggMTYtYml0cy4KKy8vICAgICBIV1JFR0goQURJX01BU1RFUl9CQVNFICsgQURJX1NMQVZFX09GRiArIEFESV9PX0RJUiArIDIpID0gMHhhYmNkOworLy8gICAgIEhXUkVHSChBRElfTUFTVEVSX0JBU0UgKyBBRElfU0xBVkVfT0ZGICsgQURJX09fRElSKSA9IDB4ZWYwMTsKKy8vCisvLyAgICAgLy8gV3JpdGUgZWFjaCBieXRlIGF0IEFESV9TTEFWRV9PRkYsIG9uZSBhdCBhIHRpbWUuCisvLyAgICAgLy8gQWRkIDEsMixvciAzIHRvIGdldCB0byBieXRlcyAxLDIsIG9yIDMuCisvLyAgICAgSFdSRUdCKEFESV9NQVNURVJfQkFTRSArIEFESV9TTEFWRV9PRkYgKyBBRElfT19ESVIpID0gMHgzMzsKKy8vICAgICBIV1JFR0IoQURJX01BU1RFUl9CQVNFICsgQURJX1NMQVZFX09GRiArIEFESV9PX0RJUiArIDEpID0gMHg0NDsKKy8vICAgICBIV1JFR0IoQURJX01BU1RFUl9CQVNFICsgQURJX1NMQVZFX09GRiArIEFESV9PX0RJUiArIDIpID0gMHg1NTsKKy8vICAgICBIV1JFR0IoQURJX01BU1RFUl9CQVNFICsgQURJX1NMQVZFX09GRiArIEFESV9PX0RJUiArIDMpID0gMHg2NjsKKy8vCisvLyAgICAgLy8gLS0tLS0tLS0tLSBTRVQvQ0xSIC0tLS0tLS0tLS0KKy8vICAgICBUaGUgc2V0IGFuZCBjbGVhciBmdW5jdGlvbnMgYmVoYXZlIHNpbWlsYXJseSB0byBlYWNob3RoZXIuIEVhY2gKKy8vICAgICBjYW4gYmUgcGVyZm9ybWVkIG9uIGFuIDgtLCAxNi0sIG9yIDMyLWJpdCBvcGVyYW5kLgorLy8gICAgIEV4YW1wbGVzIGZvbGxvdzoKKy8vICAgICAvLyBTZXQgYWxsIG9kZCBiaXRzIGluIGEgMzItYml0IHdvcmRzCisvLyAgICAgSFdSRUcoQURJX01BU1RFUl9CQVNFICsgQURJX1NMQVZFX09GRiArIEFESV9PX1NFVCkgPSAweGFhYWFhYWFhOworLy8KKy8vICAgICAvLyBDbGVhciBhbGwgYml0cyBpbiBieXRlIDIgKGRhdGFbMjM6MTZdKSB1c2luZyAzMi1iaXQgb3BlcmFuZAorLy8gICAgIEhXUkVHKERESV9NQVNURVJfQkFTRSArIEFESV9TTEFWRV9PRkYgKyBBRElfT19DTFIpID0gMHgwMGZmMDAwMDsKKy8vCisvLyAgICAgLy8gU2V0IGV2ZW4gYml0cyBpbiBieXRlIDIgKGRhdGFbMjM6MTZdKSB1c2luZyA4LWJpdCBvcGVyYW5kCisvLyAgICAgSFdSRUdCKEFESV9NQVNURVJfQkFTRSArIEFESV9TTEFWRV9PRkYgKyAyICsgQURJX09fQ0xSKSA9IDB4NTU7CisvLworLy8gICAgIC8vIC0tLS0tLS0tLS0gTUFTS0VEIFdSSVRFUyAtLS0tLS0tLS0tCisvLyAgICAgVGhlIG1hc2sgd3JpdGVzIGFyZSBhIGJpdCBkaWZmZXJlbnQuIFRoZXkgb3BlcmF0ZSBvbiBuaWJibGVzLAorLy8gICAgIGJ5dGVzLCBhbmQgMTYtYml0IGVsZW1lbnRzLiBUd28gb3BlcmFuZHMgYXJlIHJlcXVpcmVkOyBhICdtYXNrJworLy8gICAgIGFuZCAnZGF0YSc7IFRoZSBvcGVyYW5kcyBhcmUgY29uY2F0ZW5hdGVkIGFuZCB3cml0dGVuIHRvIHRoZSBtYXN0ZXIuCisvLyAgICAgZS5nLiB0aGUgbWFzayBhbmQgZGF0YSBhcmUgY29tYmluZWQgYXMgZm9sbG93cyBmb3IgYSAxNiBiaXQgbWFza2VkCisvLyAgICAgd3JpdGU6CisvLyAgICAgICAgICAgKG1hc2sgPDwgMTYpIHwgZGF0YTsKKy8vICAgICBFeGFtcGxlcyBmb2xsb3c6CisvLworLy8gICAgIC8vIERvIGFuIDQgYml0IG1hc2tlZCB3cml0ZSAoTmliYmxlKSBvZiA3IHRvIGRhdGFbMzowXSkuCisvLyAgICAgLy8gQnl0ZSB3cml0ZSBpcyBuZWVkZWQuCisvLyAgICAgSFdSRUdCKEFESV9NQVNURVJfQkFTRSArIEFESV9TTEFWRV9PRkYgKyBBRElfT19NQVNLNEIwMSkgPSAweGY3OworLy8KKy8vICAgICAvLyBEbyBhbiA0IGJpdCBtYXNrZWQgd3JpdGUgb2YgNCB0byBkYXRhWzc6NF0pLgorLy8gICAgIC8vIEFkZCAxIGZvciBuZXh0IG5pYmJsZQorLy8gICAgIEhXUkVHQihERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgQURJX09fTUFTSzRCMDEgKyAxKSA9IDB4ZjQ7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIEFESSBtYXN0ZXIgaW5zdHJ1Y3Rpb24gb2Zmc2V0cy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9PX0RJUiAgICAgICAgICAgICAweDAwMDAwMDAwICAvLyBPZmZzZXQgZm9yIHRoZSBkaXJlY3QgYWNjZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnN0cnVjdGlvbgorI2RlZmluZSBBRElfT19TRVQgICAgICAgICAgICAgMHgwMDAwMDAxMCAgLy8gT2Zmc2V0IGZvciAnU2V0JyBpbnN0cnVjdGlvbi4KKyNkZWZpbmUgQURJX09fQ0xSICAgICAgICAgICAgIDB4MDAwMDAwMjAgIC8vIE9mZnNldCBmb3IgJ0NsZWFyJyBpbnN0cnVjdGlvbi4KKyNkZWZpbmUgQURJX09fTUFTSzRCICAgICAgICAgIDB4MDAwMDAwNDAgIC8vIE9mZnNldCBmb3IgNC1iaXQgbWFza2VkIGFjY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgYml0W25dIGlzIHdyaXR0ZW4gaWYgbWFzaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0W25dIGlzIHNldCAoJzEnKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdHMgNzo0IGFyZSBtYXNrLiBCaXRzIDM6MCBhcmUgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcXVpcmVzICdieXRlJyB3cml0ZS4KKyNkZWZpbmUgQURJX09fTUFTSzhCICAgICAgICAgIDB4MDAwMDAwNjAgIC8vIE9mZnNldCBmb3IgOC1iaXQgbWFza2VkIGFjY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgYml0W25dIGlzIHdyaXR0ZW4gaWYgbWFzaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0W25dIGlzIHNldCAoJzEnKS4gQml0cyAxNTo4IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFzay4gQml0cyA3OjAgYXJlIGRhdGEuIFJlcXVpcmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2hvcnQnIHdyaXRlLgorI2RlZmluZSBBRElfT19NQVNLMTZCICAgICAgICAgMHgwMDAwMDA4MCAgLy8gT2Zmc2V0IGZvciAxNi1iaXQgbWFza2VkIGFjY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgYml0W25dIGlzIHdyaXR0ZW4gaWYgbWFzaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0W25dIGlzIHNldCAoJzEnKS4gQml0cyAzMToxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIG1hc2suIEJpdHMgMTU6MCBhcmUgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcXVpcmVzICdsb25nJyB3cml0ZS4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBBREkgcmVnaXN0ZXIgb2Zmc2V0cy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9PX1NMQVZFU1RBVCAgICAgICAgIDB4MDAwMDAwMzAgIC8vIEFESSBTbGF2ZSBzdGF0dXMgcmVnaXN0ZXIKKyNkZWZpbmUgQURJX09fU0xBVkVDT05GICAgICAgICAgMHgwMDAwMDAzOCAgLy8gQURJIE1hc3RlciBjb25maWd1cmF0aW9uCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX1NMQVZFU1RBVCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9TTEFWRVNUQVRfRElfUkVRICAgIDB4MDAwMDAwMDIgIC8vIFJlYWQgY3VycmVudCB2YWx1ZSBvZiBESV9SRVEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmFsLiBXcml0aW5nIDAgdG8gdGhpcyBiaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yY2VzIGEgc3luYyB3aXRoIHNsYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmluZyB0aGF0IHJlcSB3aWxsIGJlIDAuIEl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHJlY29tbWVuZGVkIHRvIHdyaXRlIDAgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyByZWdpc3RlciBiZWZvcmUgcG93ZXIgZG93bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgbWFzdGVyLgorI2RlZmluZSBBRElfU0xBVkVTVEFUX0RJX1JFUV9NICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV9TTEFWRVNUQVRfRElfUkVRX1MgIDEKKyNkZWZpbmUgQURJX1NMQVZFU1RBVF9ESV9BQ0sgICAgMHgwMDAwMDAwMSAgLy8gUmVhZCBjdXJyZW50IHZhbHVlIG9mIERJX0FDSworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaWduYWwKKyNkZWZpbmUgQURJX1NMQVZFU1RBVF9ESV9BQ0tfTSAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfU0xBVkVTVEFUX0RJX0FDS19TICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19TTEFWRUNPTkYgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfU0xBVkVDT05GX0NPTkZMT0NLICAweDAwMDAwMDgwICAvLyBUaGlzIHJlZ2lzdGVyIGlzIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3NpYmxlIHdoZW4gdGhpcyBiaXQgaXMgc2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAodW5sZXNzIHN0aWNreV9iaXRfb3ZlcndyaXRlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGVkIG9uIHRvcCBtb2R1bGUpCisjZGVmaW5lIEFESV9TTEFWRUNPTkZfQ09ORkxPQ0tfTSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJX1NMQVZFQ09ORl9DT05GTE9DS19TIDcKKyNkZWZpbmUgQURJX1NMQVZFQ09ORl9XQUlURk9SQUNLIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLy8gQSB0cmFuc2FjdGlvbiBvbiB0aGUgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVyZmFjZSBkb2VzIG5vdCBlbmQgdW50aWwgYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gdGhlIHNsYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhpcyBiaXQgaXMgc2V0LgorCisjZGVmaW5lIEFESV9TTEFWRUNPTkZfV0FJVEZPUkFDS19NIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfU0xBVkVDT05GX1dBSVRGT1JBQ0tfUyAyCisjZGVmaW5lIEFESV9TTEFWRUNPTkZfQURJQ0xLU1BFRURfTSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMgIC8vIFNldHMgdGhlIHBlcmlvZCBvZiBhbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb25zLiBBbGwgdHJhbnNhY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRha2VzIGFuIGV2ZW4gbnVtYmVyIG9mIGNsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN5Y2xlcywtIEFESSBjbG9jayByaXNpbmcgZWRnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvY2N1cnMgaW4gdGhlIG1pZGRsZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGVyaW9kLiBEYXRhIGFuZCBjdHJsIHRvIHNsYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHNldCB1cCBpbiBiZWdpbm5pbmcgb2YgY3ljbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBkYXRhIGZyb20gc2xhdmUgaXMgcmVhZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciB0aGUgdHJhbnNhY3Rpb24gMDA6IEFuIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbiB0YWtlcyAyIG1hc3RlciBjbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjeWNsa2VzIDAxOiBBbiBBREkgdHJhbnNhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFrZXMgNCBtYXN0ZXIgY2xvY2sgY3ljbGVzIDEwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmQgQURJIFRyYW5zYWN0aW9uIHRha2VzIDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFzdGVyIGNsb2NrIGN5Y2xlcyAxMTogQW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHRha2VzIDE2IG1hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9jayBjeWNsZXMKKworI2RlZmluZSBBRElfU0xBVkVDT05GX0FESUNMS1NQRUVEX1MgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBwc2V1ZG8tbWFnaWMgbnVtYmVycyB0aGF0IHNob3VsZCBnbyBhd2F5LgorLy8gTmV3IGNvZGUgc2hvdWxkIG5vdCB1c2UgdGhlc2UgcmVnaXN0ZXJzIGFuZCBvbGQgY29kZSBzaG91bGQgYmUgcG9ydGVkCisvLyB0byBub3QgdXNlIHRoZXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX09fRElSMDMgICAgICAgICAgICAgMHgwMDAwMDAwMCAgLy8gRGlyZWN0IGFjY2VzcyBmb3IgYWRpIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyAwIHRvIDMKKyNkZWZpbmUgQURJX09fRElSNDcgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLy8gRGlyZWN0IGFjY2VzcyBmb3IgYWRpIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyA0IHRvIDcKKyNkZWZpbmUgQURJX09fRElSODExICAgICAgICAgICAgMHgwMDAwMDAwOCAgLy8gRGlyZWN0IGFjY2VzcyBmb3IgYWRpIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyA4IHRvIDExCisjZGVmaW5lIEFESV9PX0RJUjEyMTUgICAgICAgICAgIDB4MDAwMDAwMEMgIC8vIERpcmVjdCBhY2Nlc3MgZm9yIGFkaSBieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgMTIgdG8gMTUKKyNkZWZpbmUgQURJX09fU0VUMDMgICAgICAgICAgICAgMHgwMDAwMDAxMCAgLy8gU2V0IHJlZ2lzdGVyIGZvciBBREkgYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDAgdG8gMworI2RlZmluZSBBRElfT19TRVQ0NyAgICAgICAgICAgICAweDAwMDAwMDE0ICAvLyBTZXQgcmVnaXN0ZXIgZm9yIEFESSBieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgNCB0byA3CisjZGVmaW5lIEFESV9PX1NFVDgxMSAgICAgICAgICAgIDB4MDAwMDAwMTggIC8vIFNldCByZWdpc3RlciBmb3IgQURJIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyA4IHRvIDExCisjZGVmaW5lIEFESV9PX1NFVDEyMTUgICAgICAgICAgIDB4MDAwMDAwMUMgIC8vIFNldCByZWdpc3RlciBmb3IgQURJIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyAxMiB0byAxNQorI2RlZmluZSBBRElfT19DTFIwMyAgICAgICAgICAgICAweDAwMDAwMDIwICAvLyBDbGVhciByZWdpc3RlciBmb3IgQURJIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyAwIHRvIDMKKyNkZWZpbmUgQURJX09fQ0xSNDcgICAgICAgICAgICAgMHgwMDAwMDAyNCAgLy8gQ2xlYXIgcmVnaXN0ZXIgZm9yIEFESSBieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgNCB0byA3CisjZGVmaW5lIEFESV9PX0NMUjgxMSAgICAgICAgICAgIDB4MDAwMDAwMjggIC8vIENsZWFyIHJlZ2lzdGVyIGZvciBBREkgYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDggdG8gMTEKKyNkZWZpbmUgQURJX09fQ0xSMTIxNSAgICAgICAgICAgMHgwMDAwMDAyQyAgLy8gQ2xlYXIgcmVnaXN0ZXIgZm9yIEFESSBieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgMTIgdG8gMTUKKyNkZWZpbmUgQURJX09fU0xBVkVTVEFUICAgICAgICAgMHgwMDAwMDAzMCAgLy8gQURJIFNsYXZlIHN0YXR1cyByZWdpc3RlcgorI2RlZmluZSBBRElfT19TTEFWRUNPTkYgICAgICAgICAweDAwMDAwMDM4ICAvLyBBREkgTWFzdGVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIKKyNkZWZpbmUgQURJX09fTUFTSzRCMDEgICAgICAgICAgMHgwMDAwMDA0MCAgLy8gTWFza2VkIGFjY2VzcyAoNG0vNGQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyAwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxCisjZGVmaW5lIEFESV9PX01BU0s0QjIzICAgICAgICAgIDB4MDAwMDAwNDQgIC8vIE1hc2tlZCBhY2Nlc3MgKDRtLzRkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgMiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMworI2RlZmluZSBBRElfT19NQVNLNEI0NSAgICAgICAgICAweDAwMDAwMDQ4ICAvLyBNYXNrZWQgYWNjZXNzICg0bS80ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDUKKyNkZWZpbmUgQURJX09fTUFTSzRCNjcgICAgICAgICAgMHgwMDAwMDA0QyAgLy8gTWFza2VkIGFjY2VzcyAoNG0vNGQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyA2IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA3CisjZGVmaW5lIEFESV9PX01BU0s0Qjg5ICAgICAgICAgIDB4MDAwMDAwNTAgIC8vIE1hc2tlZCBhY2Nlc3MgKDRtLzRkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgOCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gOQorI2RlZmluZSBBRElfT19NQVNLNEIxMDExICAgICAgICAweDAwMDAwMDU0ICAvLyBNYXNrZWQgYWNjZXNzICg0bS80ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDEwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMQorI2RlZmluZSBBRElfT19NQVNLNEIxMjEzICAgICAgICAweDAwMDAwMDU4ICAvLyBNYXNrZWQgYWNjZXNzICg0bS80ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDEyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMworI2RlZmluZSBBRElfT19NQVNLNEIxNDE1ICAgICAgICAweDAwMDAwMDVDICAvLyBNYXNrZWQgYWNjZXNzICg0bS80ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDE0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxNQorI2RlZmluZSBBRElfT19NQVNLOEIwMSAgICAgICAgICAweDAwMDAwMDYwICAvLyBNYXNrZWQgYWNjZXNzICg4bS84ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEKKyNkZWZpbmUgQURJX09fTUFTSzhCMjMgICAgICAgICAgMHgwMDAwMDA2NCAgLy8gTWFza2VkIGFjY2VzcyAoOG0vOGQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyAyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzCisjZGVmaW5lIEFESV9PX01BU0s4QjQ1ICAgICAgICAgIDB4MDAwMDAwNjggIC8vIE1hc2tlZCBhY2Nlc3MgKDhtLzhkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgNCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNQorI2RlZmluZSBBRElfT19NQVNLOEI2NyAgICAgICAgICAweDAwMDAwMDZDICAvLyBNYXNrZWQgYWNjZXNzICg4bS84ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDYgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDcKKyNkZWZpbmUgQURJX09fTUFTSzhCODkgICAgICAgICAgMHgwMDAwMDA3MCAgLy8gTWFza2VkIGFjY2VzcyAoOG0vOGQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyA4IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA5CisjZGVmaW5lIEFESV9PX01BU0s4QjEwMTEgICAgICAgIDB4MDAwMDAwNzQgIC8vIE1hc2tlZCBhY2Nlc3MgKDhtLzhkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgMTAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDExCisjZGVmaW5lIEFESV9PX01BU0s4QjEyMTMgICAgICAgIDB4MDAwMDAwNzggIC8vIE1hc2tlZCBhY2Nlc3MgKDhtLzhkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgMTIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEzCisjZGVmaW5lIEFESV9PX01BU0s4QjE0MTUgICAgICAgIDB4MDAwMDAwN0MgIC8vIE1hc2tlZCBhY2Nlc3MgKDhtLzhkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgMTQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE1CisjZGVmaW5lIEFESV9PX01BU0sxNkIwMSAgICAgICAgIDB4MDAwMDAwODAgIC8vIE1hc2tlZCBhY2Nlc3MgKDE2bS8xNmQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyAwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxCisjZGVmaW5lIEFESV9PX01BU0sxNkIyMyAgICAgICAgIDB4MDAwMDAwODQgIC8vIE1hc2tlZCBhY2Nlc3MgKDE2bS8xNmQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyAyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzCisjZGVmaW5lIEFESV9PX01BU0sxNkI0NSAgICAgICAgIDB4MDAwMDAwODggIC8vIE1hc2tlZCBhY2Nlc3MgKDE2bS8xNmQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyA0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA1CisjZGVmaW5lIEFESV9PX01BU0sxNkI2NyAgICAgICAgIDB4MDAwMDAwOEMgIC8vIE1hc2tlZCBhY2Nlc3MgKDE2bS8xNmQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyA2IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA3CisjZGVmaW5lIEFESV9PX01BU0sxNkI4OSAgICAgICAgIDB4MDAwMDAwOTAgIC8vIE1hc2tlZCBhY2Nlc3MgKDE2bS8xNmQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyA4IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA5CisjZGVmaW5lIEFESV9PX01BU0sxNkIxMDExICAgICAgIDB4MDAwMDAwOTQgIC8vIE1hc2tlZCBhY2Nlc3MgKDE2bS8xNmQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyAxMCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTEKKyNkZWZpbmUgQURJX09fTUFTSzE2QjEyMTMgICAgICAgMHgwMDAwMDA5OCAgLy8gTWFza2VkIGFjY2VzcyAoMTZtLzE2ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDEyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMworI2RlZmluZSBBRElfT19NQVNLMTZCMTQxNSAgICAgICAweDAwMDAwMDlDICAvLyBNYXNrZWQgYWNjZXNzICgxNm0vMTZkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgMTQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fRElSMDMgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfRElSMDNfQjNfTSAgICAgICAgICAweEZGMDAwMDAwICAvLyBEaXJlY3QgYWNjZXNzIHRvIEFESSByZWdpc3RlciAzCisjZGVmaW5lIEFESV9ESVIwM19CM19TICAgICAgICAgIDI0CisjZGVmaW5lIEFESV9ESVIwM19CMl9NICAgICAgICAgIDB4MDBGRjAwMDAgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyIDIKKyNkZWZpbmUgQURJX0RJUjAzX0IyX1MgICAgICAgICAgMTYKKyNkZWZpbmUgQURJX0RJUjAzX0IxX00gICAgICAgICAgMHgwMDAwRkYwMCAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIgMQorI2RlZmluZSBBRElfRElSMDNfQjFfUyAgICAgICAgICA4CisjZGVmaW5lIEFESV9ESVIwM19CMF9NICAgICAgICAgIDB4MDAwMDAwRkYgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyIDAKKyNkZWZpbmUgQURJX0RJUjAzX0IwX1MgICAgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19ESVI0NyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9ESVI0N19CM19NICAgICAgICAgIDB4RkYwMDAwMDAgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyIDcKKyNkZWZpbmUgQURJX0RJUjQ3X0IzX1MgICAgICAgICAgMjQKKyNkZWZpbmUgQURJX0RJUjQ3X0IyX00gICAgICAgICAgMHgwMEZGMDAwMCAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIgNgorI2RlZmluZSBBRElfRElSNDdfQjJfUyAgICAgICAgICAxNgorI2RlZmluZSBBRElfRElSNDdfQjFfTSAgICAgICAgICAweDAwMDBGRjAwICAvLyBEaXJlY3QgYWNjZXNzIHRvIEFESSByZWdpc3RlciA1CisjZGVmaW5lIEFESV9ESVI0N19CMV9TICAgICAgICAgIDgKKyNkZWZpbmUgQURJX0RJUjQ3X0IwX00gICAgICAgICAgMHgwMDAwMDBGRiAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIgNAorI2RlZmluZSBBRElfRElSNDdfQjBfUyAgICAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX0RJUjgxMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9ESVI4MTFfQjNfTSAgICAgICAgIDB4RkYwMDAwMDAgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDExCisjZGVmaW5lIEFESV9ESVI4MTFfQjNfUyAgICAgICAgIDI0CisjZGVmaW5lIEFESV9ESVI4MTFfQjJfTSAgICAgICAgIDB4MDBGRjAwMDAgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwCisjZGVmaW5lIEFESV9ESVI4MTFfQjJfUyAgICAgICAgIDE2CisjZGVmaW5lIEFESV9ESVI4MTFfQjFfTSAgICAgICAgIDB4MDAwMEZGMDAgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyIDkKKyNkZWZpbmUgQURJX0RJUjgxMV9CMV9TICAgICAgICAgOAorI2RlZmluZSBBRElfRElSODExX0IwX00gICAgICAgICAweDAwMDAwMEZGICAvLyBEaXJlY3QgYWNjZXNzIHRvIEFESSByZWdpc3RlciA4CisjZGVmaW5lIEFESV9ESVI4MTFfQjBfUyAgICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fRElSMTIxNSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9ESVIxMjE1X0IzX00gICAgICAgIDB4RkYwMDAwMDAgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE1CisjZGVmaW5lIEFESV9ESVIxMjE1X0IzX1MgICAgICAgIDI0CisjZGVmaW5lIEFESV9ESVIxMjE1X0IyX00gICAgICAgIDB4MDBGRjAwMDAgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE0CisjZGVmaW5lIEFESV9ESVIxMjE1X0IyX1MgICAgICAgIDE2CisjZGVmaW5lIEFESV9ESVIxMjE1X0IxX00gICAgICAgIDB4MDAwMEZGMDAgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEzCisjZGVmaW5lIEFESV9ESVIxMjE1X0IxX1MgICAgICAgIDgKKyNkZWZpbmUgQURJX0RJUjEyMTVfQjBfTSAgICAgICAgMHgwMDAwMDBGRiAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTIKKyNkZWZpbmUgQURJX0RJUjEyMTVfQjBfUyAgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19TRVQwMyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9TRVQwM19TM19NICAgICAgICAgIDB4RkYwMDAwMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAzLiBSZWFkIHJldHVybnMgMC4KKyNkZWZpbmUgQURJX1NFVDAzX1MzX1MgICAgICAgICAgMjQKKyNkZWZpbmUgQURJX1NFVDAzX1MyX00gICAgICAgICAgMHgwMEZGMDAwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDIuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUMDNfUzJfUyAgICAgICAgICAxNgorI2RlZmluZSBBRElfU0VUMDNfUzFfTSAgICAgICAgICAweDAwMDBGRjAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMS4gUmVhZCByZXR1cm5zIDAuCisjZGVmaW5lIEFESV9TRVQwM19TMV9TICAgICAgICAgIDgKKyNkZWZpbmUgQURJX1NFVDAzX1MwX00gICAgICAgICAgMHgwMDAwMDBGRiAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDAuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUMDNfUzBfUyAgICAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX1NFVDQ3IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX1NFVDQ3X1MzX00gICAgICAgICAgMHhGRjAwMDAwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDcuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUNDdfUzNfUyAgICAgICAgICAyNAorI2RlZmluZSBBRElfU0VUNDdfUzJfTSAgICAgICAgICAweDAwRkYwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNi4gUmVhZCByZXR1cm5zIDAuCisjZGVmaW5lIEFESV9TRVQ0N19TMl9TICAgICAgICAgIDE2CisjZGVmaW5lIEFESV9TRVQ0N19TMV9NICAgICAgICAgIDB4MDAwMEZGMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA1LiBSZWFkIHJldHVybnMgMC4KKyNkZWZpbmUgQURJX1NFVDQ3X1MxX1MgICAgICAgICAgOAorI2RlZmluZSBBRElfU0VUNDdfUzBfTSAgICAgICAgICAweDAwMDAwMEZGICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNC4gUmVhZCByZXR1cm5zIDAuCisjZGVmaW5lIEFESV9TRVQ0N19TMF9TICAgICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fU0VUODExIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX1NFVDgxMV9TM19NICAgICAgICAgMHhGRjAwMDAwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDExLiBSZWFkIHJldHVybnMgMC4KKyNkZWZpbmUgQURJX1NFVDgxMV9TM19TICAgICAgICAgMjQKKyNkZWZpbmUgQURJX1NFVDgxMV9TMl9NICAgICAgICAgMHgwMEZGMDAwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEwLiBSZWFkIHJldHVybnMgMC4KKyNkZWZpbmUgQURJX1NFVDgxMV9TMl9TICAgICAgICAgMTYKKyNkZWZpbmUgQURJX1NFVDgxMV9TMV9NICAgICAgICAgMHgwMDAwRkYwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDkuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUODExX1MxX1MgICAgICAgICA4CisjZGVmaW5lIEFESV9TRVQ4MTFfUzBfTSAgICAgICAgIDB4MDAwMDAwRkYgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA4LiBSZWFkIHJldHVybnMgMC4KKyNkZWZpbmUgQURJX1NFVDgxMV9TMF9TICAgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19TRVQxMjE1IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX1NFVDEyMTVfUzNfTSAgICAgICAgMHhGRjAwMDAwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDE1LiBSZWFkIHJldHVybnMgMC4KKyNkZWZpbmUgQURJX1NFVDEyMTVfUzNfUyAgICAgICAgMjQKKyNkZWZpbmUgQURJX1NFVDEyMTVfUzJfTSAgICAgICAgMHgwMEZGMDAwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDE0LiBSZWFkIHJldHVybnMgMC4KKyNkZWZpbmUgQURJX1NFVDEyMTVfUzJfUyAgICAgICAgMTYKKyNkZWZpbmUgQURJX1NFVDEyMTVfUzFfTSAgICAgICAgMHgwMDAwRkYwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEzLiBSZWFkIHJldHVybnMgMC4KKyNkZWZpbmUgQURJX1NFVDEyMTVfUzFfUyAgICAgICAgOAorI2RlZmluZSBBRElfU0VUMTIxNV9TMF9NICAgICAgICAweDAwMDAwMEZGICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTIuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUMTIxNV9TMF9TICAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX0NMUjAzIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX0NMUjAzX1MzX00gICAgICAgICAgMHhGRjAwMDAwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIGNsZWFyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMworI2RlZmluZSBBRElfQ0xSMDNfUzNfUyAgICAgICAgICAyNAorI2RlZmluZSBBRElfQ0xSMDNfUzJfTSAgICAgICAgICAweDAwRkYwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAyCisjZGVmaW5lIEFESV9DTFIwM19TMl9TICAgICAgICAgIDE2CisjZGVmaW5lIEFESV9DTFIwM19TMV9NICAgICAgICAgIDB4MDAwMEZGMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEKKyNkZWZpbmUgQURJX0NMUjAzX1MxX1MgICAgICAgICAgOAorI2RlZmluZSBBRElfQ0xSMDNfUzBfTSAgICAgICAgICAweDAwMDAwMEZGICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAwCisjZGVmaW5lIEFESV9DTFIwM19TMF9TICAgICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fQ0xSNDcgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfQ0xSNDdfUzNfTSAgICAgICAgICAweEZGMDAwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA3CisjZGVmaW5lIEFESV9DTFI0N19TM19TICAgICAgICAgIDI0CisjZGVmaW5lIEFESV9DTFI0N19TMl9NICAgICAgICAgIDB4MDBGRjAwMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDYKKyNkZWZpbmUgQURJX0NMUjQ3X1MyX1MgICAgICAgICAgMTYKKyNkZWZpbmUgQURJX0NMUjQ3X1MxX00gICAgICAgICAgMHgwMDAwRkYwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIGNsZWFyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNQorI2RlZmluZSBBRElfQ0xSNDdfUzFfUyAgICAgICAgICA4CisjZGVmaW5lIEFESV9DTFI0N19TMF9NICAgICAgICAgIDB4MDAwMDAwRkYgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDQKKyNkZWZpbmUgQURJX0NMUjQ3X1MwX1MgICAgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19DTFI4MTEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfQ0xSODExX1MzX00gICAgICAgICAweEZGMDAwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMQorI2RlZmluZSBBRElfQ0xSODExX1MzX1MgICAgICAgICAyNAorI2RlZmluZSBBRElfQ0xSODExX1MyX00gICAgICAgICAweDAwRkYwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMAorI2RlZmluZSBBRElfQ0xSODExX1MyX1MgICAgICAgICAxNgorI2RlZmluZSBBRElfQ0xSODExX1MxX00gICAgICAgICAweDAwMDBGRjAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA5CisjZGVmaW5lIEFESV9DTFI4MTFfUzFfUyAgICAgICAgIDgKKyNkZWZpbmUgQURJX0NMUjgxMV9TMF9NICAgICAgICAgMHgwMDAwMDBGRiAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIGNsZWFyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgOAorI2RlZmluZSBBRElfQ0xSODExX1MwX1MgICAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX0NMUjEyMTUgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfQ0xSMTIxNV9TM19NICAgICAgICAweEZGMDAwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxNQorI2RlZmluZSBBRElfQ0xSMTIxNV9TM19TICAgICAgICAyNAorI2RlZmluZSBBRElfQ0xSMTIxNV9TMl9NICAgICAgICAweDAwRkYwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxNAorI2RlZmluZSBBRElfQ0xSMTIxNV9TMl9TICAgICAgICAxNgorI2RlZmluZSBBRElfQ0xSMTIxNV9TMV9NICAgICAgICAweDAwMDBGRjAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMworI2RlZmluZSBBRElfQ0xSMTIxNV9TMV9TICAgICAgICA4CisjZGVmaW5lIEFESV9DTFIxMjE1X1MwX00gICAgICAgIDB4MDAwMDAwRkYgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEyCisjZGVmaW5lIEFESV9DTFIxMjE1X1MwX1MgICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX1NMQVZFU1RBVCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9TTEFWRVNUQVRfRElfUkVRICAgIDB4MDAwMDAwMDIgIC8vIFJlYWQgY3VycmVudCB2YWx1ZSBvZiBESV9SRVEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmFsLiBXcml0aW5nIDAgdG8gdGhpcyBiaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yY2VzIGEgc3luYyB3aXRoIHNsYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmluZyB0aGF0IHJlcSB3aWxsIGJlIDAuIEl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHJlY29tbWVuZGVkIHRvIHdyaXRlIDAgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyByZWdpc3RlciBiZWZvcmUgcG93ZXIgZG93bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgbWFzdGVyLgorI2RlZmluZSBBRElfU0xBVkVTVEFUX0RJX1JFUV9NICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV9TTEFWRVNUQVRfRElfUkVRX1MgIDEKKyNkZWZpbmUgQURJX1NMQVZFU1RBVF9ESV9BQ0sgICAgMHgwMDAwMDAwMSAgLy8gUmVhZCBjdXJyZW50IHZhbHVlIG9mIERJX0FDSworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaWduYWwKKyNkZWZpbmUgQURJX1NMQVZFU1RBVF9ESV9BQ0tfTSAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfU0xBVkVTVEFUX0RJX0FDS19TICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19TTEFWRUNPTkYgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfU0xBVkVDT05GX0NPTkZMT0NLICAweDAwMDAwMDgwICAvLyBUaGlzIHJlZ2lzdGVyIGlzIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3NpYmxlIHdoZW4gdGhpcyBiaXQgaXMgc2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAodW5sZXNzIHN0aWNreV9iaXRfb3ZlcndyaXRlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGVkIG9uIHRvcCBtb2R1bGUpCisjZGVmaW5lIEFESV9TTEFWRUNPTkZfQ09ORkxPQ0tfTSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJX1NMQVZFQ09ORl9DT05GTE9DS19TIDcKKyNkZWZpbmUgQURJX1NMQVZFQ09ORl9XQUlURk9SQUNLIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLy8gQSB0cmFuc2FjdGlvbiBvbiB0aGUgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVyZmFjZSBkb2VzIG5vdCBlbmQgdW50aWwgYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gdGhlIHNsYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhpcyBiaXQgaXMgc2V0LgorCisjZGVmaW5lIEFESV9TTEFWRUNPTkZfV0FJVEZPUkFDS19NIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfU0xBVkVDT05GX1dBSVRGT1JBQ0tfUyAyCisjZGVmaW5lIEFESV9TTEFWRUNPTkZfQURJQ0xLU1BFRURfTSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMgIC8vIFNldHMgdGhlIHBlcmlvZCBvZiBhbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb25zLiBBbGwgdHJhbnNhY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRha2VzIGFuIGV2ZW4gbnVtYmVyIG9mIGNsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN5Y2xlcywtIEFESSBjbG9jayByaXNpbmcgZWRnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvY2N1cnMgaW4gdGhlIG1pZGRsZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGVyaW9kLiBEYXRhIGFuZCBjdHJsIHRvIHNsYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHNldCB1cCBpbiBiZWdpbm5pbmcgb2YgY3ljbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBkYXRhIGZyb20gc2xhdmUgaXMgcmVhZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciB0aGUgdHJhbnNhY3Rpb24gMDA6IEFuIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbiB0YWtlcyAyIG1hc3RlciBjbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjeWNsa2VzIDAxOiBBbiBBREkgdHJhbnNhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFrZXMgNCBtYXN0ZXIgY2xvY2sgY3ljbGVzIDEwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmQgQURJIFRyYW5zYWN0aW9uIHRha2VzIDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFzdGVyIGNsb2NrIGN5Y2xlcyAxMTogQW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHRha2VzIDE2IG1hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9jayBjeWNsZXMKKworI2RlZmluZSBBRElfU0xBVkVDT05GX0FESUNMS1NQRUVEX1MgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19NQVNLNEIwMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9NQVNLNEIwMV9NMUhfTSAgICAgIDB4RjAwMDAwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEKKyNkZWZpbmUgQURJX01BU0s0QjAxX00xSF9TICAgICAgMjgKKyNkZWZpbmUgQURJX01BU0s0QjAxX0QxSF9NICAgICAgMHgwRjAwMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMSwgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMUggd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjAxX0QxSF9TICAgICAgMjQKKyNkZWZpbmUgQURJX01BU0s0QjAxX00xTF9NICAgICAgMHgwMEYwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMQorI2RlZmluZSBBRElfTUFTSzRCMDFfTTFMX1MgICAgICAyMAorI2RlZmluZSBBRElfTUFTSzRCMDFfRDFMX00gICAgICAweDAwMEYwMDAwICAvLyBEYXRhIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxLCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0xTCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMDFfRDFMX1MgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzRCMDFfTTBIX00gICAgICAweDAwMDBGMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAwCisjZGVmaW5lIEFESV9NQVNLNEIwMV9NMEhfUyAgICAgIDEyCisjZGVmaW5lIEFESV9NQVNLNEIwMV9EMEhfTSAgICAgIDB4MDAwMDBGMDAgIC8vIERhdGEgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDAsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTBIIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIwMV9EMEhfUyAgICAgIDgKKyNkZWZpbmUgQURJX01BU0s0QjAxX00wTF9NICAgICAgMHgwMDAwMDBGMCAgLy8gTWFzayBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMAorI2RlZmluZSBBRElfTUFTSzRCMDFfTTBMX1MgICAgICA0CisjZGVmaW5lIEFESV9NQVNLNEIwMV9EMExfTSAgICAgIDB4MDAwMDAwMEYgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDAsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTBMIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIwMV9EMExfUyAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fTUFTSzRCMjMgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzRCMjNfTTFIX00gICAgICAweEYwMDAwMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAzCisjZGVmaW5lIEFESV9NQVNLNEIyM19NMUhfUyAgICAgIDI4CisjZGVmaW5lIEFESV9NQVNLNEIyM19EMUhfTSAgICAgIDB4MEYwMDAwMDAgIC8vIERhdGEgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDMsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTFIIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIyM19EMUhfUyAgICAgIDI0CisjZGVmaW5lIEFESV9NQVNLNEIyM19NMUxfTSAgICAgIDB4MDBGMDAwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDMKKyNkZWZpbmUgQURJX01BU0s0QjIzX00xTF9TICAgICAgMjAKKyNkZWZpbmUgQURJX01BU0s0QjIzX0QxTF9NICAgICAgMHgwMDBGMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMywgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMUwgd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjIzX0QxTF9TICAgICAgMTYKKyNkZWZpbmUgQURJX01BU0s0QjIzX00wSF9NICAgICAgMHgwMDAwRjAwMCAgLy8gTWFzayBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMgorI2RlZmluZSBBRElfTUFTSzRCMjNfTTBIX1MgICAgICAxMgorI2RlZmluZSBBRElfTUFTSzRCMjNfRDBIX00gICAgICAweDAwMDAwRjAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAyLCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0wSCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMjNfRDBIX1MgICAgICA4CisjZGVmaW5lIEFESV9NQVNLNEIyM19NMExfTSAgICAgIDB4MDAwMDAwRjAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDIKKyNkZWZpbmUgQURJX01BU0s0QjIzX00wTF9TICAgICAgNAorI2RlZmluZSBBRElfTUFTSzRCMjNfRDBMX00gICAgICAweDAwMDAwMDBGICAvLyBEYXRhIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAyLCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0wTCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMjNfRDBMX1MgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX01BU0s0QjQ1IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s0QjQ1X00xSF9NICAgICAgMHhGMDAwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNQorI2RlZmluZSBBRElfTUFTSzRCNDVfTTFIX1MgICAgICAyOAorI2RlZmluZSBBRElfTUFTSzRCNDVfRDFIX00gICAgICAweDBGMDAwMDAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA1LCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0xSCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCNDVfRDFIX1MgICAgICAyNAorI2RlZmluZSBBRElfTUFTSzRCNDVfTTFMX00gICAgICAweDAwRjAwMDAwICAvLyBNYXNrIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA1CisjZGVmaW5lIEFESV9NQVNLNEI0NV9NMUxfUyAgICAgIDIwCisjZGVmaW5lIEFESV9NQVNLNEI0NV9EMUxfTSAgICAgIDB4MDAwRjAwMDAgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDUsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTFMIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEI0NV9EMUxfUyAgICAgIDE2CisjZGVmaW5lIEFESV9NQVNLNEI0NV9NMEhfTSAgICAgIDB4MDAwMEYwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDQKKyNkZWZpbmUgQURJX01BU0s0QjQ1X00wSF9TICAgICAgMTIKKyNkZWZpbmUgQURJX01BU0s0QjQ1X0QwSF9NICAgICAgMHgwMDAwMEYwMCAgLy8gRGF0YSBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNCwgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMEggd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjQ1X0QwSF9TICAgICAgOAorI2RlZmluZSBBRElfTUFTSzRCNDVfTTBMX00gICAgICAweDAwMDAwMEYwICAvLyBNYXNrIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA0CisjZGVmaW5lIEFESV9NQVNLNEI0NV9NMExfUyAgICAgIDQKKyNkZWZpbmUgQURJX01BU0s0QjQ1X0QwTF9NICAgICAgMHgwMDAwMDAwRiAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNCwgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMEwgd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjQ1X0QwTF9TICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19NQVNLNEI2NyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9NQVNLNEI2N19NMUhfTSAgICAgIDB4RjAwMDAwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDcKKyNkZWZpbmUgQURJX01BU0s0QjY3X00xSF9TICAgICAgMjgKKyNkZWZpbmUgQURJX01BU0s0QjY3X0QxSF9NICAgICAgMHgwRjAwMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNywgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMUggd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjY3X0QxSF9TICAgICAgMjQKKyNkZWZpbmUgQURJX01BU0s0QjY3X00xTF9NICAgICAgMHgwMEYwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNworI2RlZmluZSBBRElfTUFTSzRCNjdfTTFMX1MgICAgICAyMAorI2RlZmluZSBBRElfTUFTSzRCNjdfRDFMX00gICAgICAweDAwMEYwMDAwICAvLyBEYXRhIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA3LCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0xTCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCNjdfRDFMX1MgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzRCNjdfTTBIX00gICAgICAweDAwMDBGMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA2CisjZGVmaW5lIEFESV9NQVNLNEI2N19NMEhfUyAgICAgIDEyCisjZGVmaW5lIEFESV9NQVNLNEI2N19EMEhfTSAgICAgIDB4MDAwMDBGMDAgIC8vIERhdGEgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDYsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTBIIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEI2N19EMEhfUyAgICAgIDgKKyNkZWZpbmUgQURJX01BU0s0QjY3X00wTF9NICAgICAgMHgwMDAwMDBGMCAgLy8gTWFzayBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNgorI2RlZmluZSBBRElfTUFTSzRCNjdfTTBMX1MgICAgICA0CisjZGVmaW5lIEFESV9NQVNLNEI2N19EMExfTSAgICAgIDB4MDAwMDAwMEYgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDYsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTBMIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEI2N19EMExfUyAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fTUFTSzRCODkgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzRCODlfTTFIX00gICAgICAweEYwMDAwMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA5CisjZGVmaW5lIEFESV9NQVNLNEI4OV9NMUhfUyAgICAgIDI4CisjZGVmaW5lIEFESV9NQVNLNEI4OV9EMUhfTSAgICAgIDB4MEYwMDAwMDAgIC8vIERhdGEgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDksIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTFIIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEI4OV9EMUhfUyAgICAgIDI0CisjZGVmaW5lIEFESV9NQVNLNEI4OV9NMUxfTSAgICAgIDB4MDBGMDAwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDkKKyNkZWZpbmUgQURJX01BU0s0Qjg5X00xTF9TICAgICAgMjAKKyNkZWZpbmUgQURJX01BU0s0Qjg5X0QxTF9NICAgICAgMHgwMDBGMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgOSwgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMUwgd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0Qjg5X0QxTF9TICAgICAgMTYKKyNkZWZpbmUgQURJX01BU0s0Qjg5X00wSF9NICAgICAgMHgwMDAwRjAwMCAgLy8gTWFzayBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgOAorI2RlZmluZSBBRElfTUFTSzRCODlfTTBIX1MgICAgICAxMgorI2RlZmluZSBBRElfTUFTSzRCODlfRDBIX00gICAgICAweDAwMDAwRjAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA4LCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0wSCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCODlfRDBIX1MgICAgICA4CisjZGVmaW5lIEFESV9NQVNLNEI4OV9NMExfTSAgICAgIDB4MDAwMDAwRjAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDgKKyNkZWZpbmUgQURJX01BU0s0Qjg5X00wTF9TICAgICAgNAorI2RlZmluZSBBRElfTUFTSzRCODlfRDBMX00gICAgICAweDAwMDAwMDBGICAvLyBEYXRhIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA4LCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0wTCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCODlfRDBMX1MgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19NQVNLNEIxMDExIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s0QjEwMTFfTTFIX00gICAgMHhGMDAwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTEKKyNkZWZpbmUgQURJX01BU0s0QjEwMTFfTTFIX1MgICAgMjgKKyNkZWZpbmUgQURJX01BU0s0QjEwMTFfRDFIX00gICAgMHgwRjAwMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTEsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTTFIIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIxMDExX0QxSF9TICAgIDI0CisjZGVmaW5lIEFESV9NQVNLNEIxMDExX00xTF9NICAgIDB4MDBGMDAwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDExCisjZGVmaW5lIEFESV9NQVNLNEIxMDExX00xTF9TICAgIDIwCisjZGVmaW5lIEFESV9NQVNLNEIxMDExX0QxTF9NICAgIDB4MDAwRjAwMDAgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDExLCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0xTCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMTAxMV9EMUxfUyAgICAxNgorI2RlZmluZSBBRElfTUFTSzRCMTAxMV9NMEhfTSAgICAweDAwMDBGMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMAorI2RlZmluZSBBRElfTUFTSzRCMTAxMV9NMEhfUyAgICAxMgorI2RlZmluZSBBRElfTUFTSzRCMTAxMV9EMEhfTSAgICAweDAwMDAwRjAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMCwgLSBvbmx5IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgYnkgbWFzayBNMEggd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjEwMTFfRDBIX1MgICAgOAorI2RlZmluZSBBRElfTUFTSzRCMTAxMV9NMExfTSAgICAweDAwMDAwMEYwICAvLyBNYXNrIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMAorI2RlZmluZSBBRElfTUFTSzRCMTAxMV9NMExfUyAgICA0CisjZGVmaW5lIEFESV9NQVNLNEIxMDExX0QwTF9NICAgIDB4MDAwMDAwMEYgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEwLCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0wTCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMTAxMV9EMExfUyAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19NQVNLNEIxMjEzIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s0QjEyMTNfTTFIX00gICAgMHhGMDAwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTMKKyNkZWZpbmUgQURJX01BU0s0QjEyMTNfTTFIX1MgICAgMjgKKyNkZWZpbmUgQURJX01BU0s0QjEyMTNfRDFIX00gICAgMHgwRjAwMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTMsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTTFIIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX0QxSF9TICAgIDI0CisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX00xTF9NICAgIDB4MDBGMDAwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEzCisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX00xTF9TICAgIDIwCisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX0QxTF9NICAgIDB4MDAwRjAwMDAgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEzLCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0xTCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMTIxM19EMUxfUyAgICAxNgorI2RlZmluZSBBRElfTUFTSzRCMTIxM19NMEhfTSAgICAweDAwMDBGMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMgorI2RlZmluZSBBRElfTUFTSzRCMTIxM19NMEhfUyAgICAxMgorI2RlZmluZSBBRElfTUFTSzRCMTIxM19EMEhfTSAgICAweDAwMDAwRjAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMiwgLSBvbmx5IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgYnkgbWFzayBNMEggd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjEyMTNfRDBIX1MgICAgOAorI2RlZmluZSBBRElfTUFTSzRCMTIxM19NMExfTSAgICAweDAwMDAwMEYwICAvLyBNYXNrIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMgorI2RlZmluZSBBRElfTUFTSzRCMTIxM19NMExfUyAgICA0CisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX0QwTF9NICAgIDB4MDAwMDAwMEYgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEyLCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0wTCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMTIxM19EMExfUyAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19NQVNLNEIxNDE1IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s0QjE0MTVfTTFIX00gICAgMHhGMDAwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTUKKyNkZWZpbmUgQURJX01BU0s0QjE0MTVfTTFIX1MgICAgMjgKKyNkZWZpbmUgQURJX01BU0s0QjE0MTVfRDFIX00gICAgMHgwRjAwMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTUsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTTFIIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X0QxSF9TICAgIDI0CisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X00xTF9NICAgIDB4MDBGMDAwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDE1CisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X00xTF9TICAgIDIwCisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X0QxTF9NICAgIDB4MDAwRjAwMDAgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDE1LCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0xTCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMTQxNV9EMUxfUyAgICAxNgorI2RlZmluZSBBRElfTUFTSzRCMTQxNV9NMEhfTSAgICAweDAwMDBGMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxNAorI2RlZmluZSBBRElfTUFTSzRCMTQxNV9NMEhfUyAgICAxMgorI2RlZmluZSBBRElfTUFTSzRCMTQxNV9EMEhfTSAgICAweDAwMDAwRjAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxNCwgLSBvbmx5IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgYnkgbWFzayBNMEggd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjE0MTVfRDBIX1MgICAgOAorI2RlZmluZSBBRElfTUFTSzRCMTQxNV9NMExfTSAgICAweDAwMDAwMEYwICAvLyBNYXNrIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxNAorI2RlZmluZSBBRElfTUFTSzRCMTQxNV9NMExfUyAgICA0CisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X0QwTF9NICAgIDB4MDAwMDAwMEYgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDE0LCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0wTCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMTQxNV9EMExfUyAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX01BU0s4QjAxIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s4QjAxX00xX00gICAgICAgMHhGRjAwMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDEKKyNkZWZpbmUgQURJX01BU0s4QjAxX00xX1MgICAgICAgMjQKKyNkZWZpbmUgQURJX01BU0s4QjAxX0QxX00gICAgICAgMHgwMEZGMDAwMCAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIDEsIC0gb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRzIHNlbGVjdGVkIGJ5IG1hc2sgTTEgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s4QjAxX0QxX1MgICAgICAgMTYKKyNkZWZpbmUgQURJX01BU0s4QjAxX00wX00gICAgICAgMHgwMDAwRkYwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDAKKyNkZWZpbmUgQURJX01BU0s4QjAxX00wX1MgICAgICAgOAorI2RlZmluZSBBRElfTUFTSzhCMDFfRDBfTSAgICAgICAweDAwMDAwMEZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgMCwgLSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCMDFfRDBfUyAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX01BU0s4QjIzIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s4QjIzX00xX00gICAgICAgMHhGRjAwMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDMKKyNkZWZpbmUgQURJX01BU0s4QjIzX00xX1MgICAgICAgMjQKKyNkZWZpbmUgQURJX01BU0s4QjIzX0QxX00gICAgICAgMHgwMEZGMDAwMCAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIDMsIC0gb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRzIHNlbGVjdGVkIGJ5IG1hc2sgTTEgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s4QjIzX0QxX1MgICAgICAgMTYKKyNkZWZpbmUgQURJX01BU0s4QjIzX00wX00gICAgICAgMHgwMDAwRkYwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDIKKyNkZWZpbmUgQURJX01BU0s4QjIzX00wX1MgICAgICAgOAorI2RlZmluZSBBRElfTUFTSzhCMjNfRDBfTSAgICAgICAweDAwMDAwMEZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgMiwgLSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCMjNfRDBfUyAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX01BU0s4QjQ1IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s4QjQ1X00xX00gICAgICAgMHhGRjAwMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDUKKyNkZWZpbmUgQURJX01BU0s4QjQ1X00xX1MgICAgICAgMjQKKyNkZWZpbmUgQURJX01BU0s4QjQ1X0QxX00gICAgICAgMHgwMEZGMDAwMCAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIDUsIC0gb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRzIHNlbGVjdGVkIGJ5IG1hc2sgTTEgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s4QjQ1X0QxX1MgICAgICAgMTYKKyNkZWZpbmUgQURJX01BU0s4QjQ1X00wX00gICAgICAgMHgwMDAwRkYwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDQKKyNkZWZpbmUgQURJX01BU0s4QjQ1X00wX1MgICAgICAgOAorI2RlZmluZSBBRElfTUFTSzhCNDVfRDBfTSAgICAgICAweDAwMDAwMEZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgNCwgLSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCNDVfRDBfUyAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX01BU0s4QjY3IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s4QjY3X00xX00gICAgICAgMHhGRjAwMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDcKKyNkZWZpbmUgQURJX01BU0s4QjY3X00xX1MgICAgICAgMjQKKyNkZWZpbmUgQURJX01BU0s4QjY3X0QxX00gICAgICAgMHgwMEZGMDAwMCAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIDcsIC0gb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRzIHNlbGVjdGVkIGJ5IG1hc2sgTTEgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s4QjY3X0QxX1MgICAgICAgMTYKKyNkZWZpbmUgQURJX01BU0s4QjY3X00wX00gICAgICAgMHgwMDAwRkYwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDYKKyNkZWZpbmUgQURJX01BU0s4QjY3X00wX1MgICAgICAgOAorI2RlZmluZSBBRElfTUFTSzhCNjdfRDBfTSAgICAgICAweDAwMDAwMEZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgNiwgLSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCNjdfRDBfUyAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX01BU0s4Qjg5IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s4Qjg5X00xX00gICAgICAgMHhGRjAwMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDkKKyNkZWZpbmUgQURJX01BU0s4Qjg5X00xX1MgICAgICAgMjQKKyNkZWZpbmUgQURJX01BU0s4Qjg5X0QxX00gICAgICAgMHgwMEZGMDAwMCAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIDksIC0gb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRzIHNlbGVjdGVkIGJ5IG1hc2sgTTEgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s4Qjg5X0QxX1MgICAgICAgMTYKKyNkZWZpbmUgQURJX01BU0s4Qjg5X00wX00gICAgICAgMHgwMDAwRkYwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDgKKyNkZWZpbmUgQURJX01BU0s4Qjg5X00wX1MgICAgICAgOAorI2RlZmluZSBBRElfTUFTSzhCODlfRDBfTSAgICAgICAweDAwMDAwMEZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgOCwgLSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCODlfRDBfUyAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19NQVNLOEIxMDExIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s4QjEwMTFfTTFfTSAgICAgMHhGRjAwMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDExCisjZGVmaW5lIEFESV9NQVNLOEIxMDExX00xX1MgICAgIDI0CisjZGVmaW5lIEFESV9NQVNLOEIxMDExX0QxX00gICAgIDB4MDBGRjAwMDAgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciAxMSwgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCMTAxMV9EMV9TICAgICAxNgorI2RlZmluZSBBRElfTUFTSzhCMTAxMV9NMF9NICAgICAweDAwMDBGRjAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMTAKKyNkZWZpbmUgQURJX01BU0s4QjEwMTFfTTBfUyAgICAgOAorI2RlZmluZSBBRElfTUFTSzhCMTAxMV9EMF9NICAgICAweDAwMDAwMEZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgMTAsIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBiaXRzIHNlbGVjdGVkIGJ5IG1hc2sgTTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s4QjEwMTFfRDBfUyAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZQorLy8gQURJX09fTUFTSzhCMTIxMyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9NQVNLOEIxMjEzX00xX00gICAgIDB4RkYwMDAwMDAgIC8vIE1hc2sgZm9yIEFESSByZWdpc3RlciAxMworI2RlZmluZSBBRElfTUFTSzhCMTIxM19NMV9TICAgICAyNAorI2RlZmluZSBBRElfTUFTSzhCMTIxM19EMV9NICAgICAweDAwRkYwMDAwICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgMTMsIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBiaXRzIHNlbGVjdGVkIGJ5IG1hc2sgTTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s4QjEyMTNfRDFfUyAgICAgMTYKKyNkZWZpbmUgQURJX01BU0s4QjEyMTNfTTBfTSAgICAgMHgwMDAwRkYwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDEyCisjZGVmaW5lIEFESV9NQVNLOEIxMjEzX00wX1MgICAgIDgKKyNkZWZpbmUgQURJX01BU0s4QjEyMTNfRDBfTSAgICAgMHgwMDAwMDBGRiAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIDEyLCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgYml0cyBzZWxlY3RlZCBieSBtYXNrIE0wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLOEIxMjEzX0QwX1MgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX01BU0s4QjE0MTUgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzhCMTQxNV9NMV9NICAgICAweEZGMDAwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMTUKKyNkZWZpbmUgQURJX01BU0s4QjE0MTVfTTFfUyAgICAgMjQKKyNkZWZpbmUgQURJX01BU0s4QjE0MTVfRDFfTSAgICAgMHgwMEZGMDAwMCAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIDE1LCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgYml0cyBzZWxlY3RlZCBieSBtYXNrIE0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLOEIxNDE1X0QxX1MgICAgIDE2CisjZGVmaW5lIEFESV9NQVNLOEIxNDE1X00wX00gICAgIDB4MDAwMEZGMDAgIC8vIE1hc2sgZm9yIEFESSByZWdpc3RlciAxNAorI2RlZmluZSBBRElfTUFTSzhCMTQxNV9NMF9TICAgICA4CisjZGVmaW5lIEFESV9NQVNLOEIxNDE1X0QwX00gICAgIDB4MDAwMDAwRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciAxNCwgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCMTQxNV9EMF9TICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19NQVNLMTZCMDEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzE2QjAxX01fTSAgICAgICAweEZGRkYwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMCBhbmQgMQorI2RlZmluZSBBRElfTUFTSzE2QjAxX01fUyAgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzE2QjAxX0RfTSAgICAgICAweDAwMDBGRkZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyAwIGFuZCAxLCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0gd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0sxNkIwMV9EX1MgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZQorLy8gQURJX09fTUFTSzE2QjIzIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0sxNkIyM19NX00gICAgICAgMHhGRkZGMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDIgYW5kIDMKKyNkZWZpbmUgQURJX01BU0sxNkIyM19NX1MgICAgICAgMTYKKyNkZWZpbmUgQURJX01BU0sxNkIyM19EX00gICAgICAgMHgwMDAwRkZGRiAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgMiBhbmQgMywgLSBvbmx5IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgYnkgbWFzayBNIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLMTZCMjNfRF9TICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX01BU0sxNkI0NSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9NQVNLMTZCNDVfTV9NICAgICAgIDB4RkZGRjAwMDAgIC8vIE1hc2sgZm9yIEFESSByZWdpc3RlciA0IGFuZCA1CisjZGVmaW5lIEFESV9NQVNLMTZCNDVfTV9TICAgICAgIDE2CisjZGVmaW5lIEFESV9NQVNLMTZCNDVfRF9NICAgICAgIDB4MDAwMEZGRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDQgYW5kIDUsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzE2QjQ1X0RfUyAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19NQVNLMTZCNjcgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzE2QjY3X01fTSAgICAgICAweEZGRkYwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgNiBhbmQgNworI2RlZmluZSBBRElfTUFTSzE2QjY3X01fUyAgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzE2QjY3X0RfTSAgICAgICAweDAwMDBGRkZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyA2IGFuZCA3LCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0gd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0sxNkI2N19EX1MgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZQorLy8gQURJX09fTUFTSzE2Qjg5IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0sxNkI4OV9NX00gICAgICAgMHhGRkZGMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDggYW5kIDkKKyNkZWZpbmUgQURJX01BU0sxNkI4OV9NX1MgICAgICAgMTYKKyNkZWZpbmUgQURJX01BU0sxNkI4OV9EX00gICAgICAgMHgwMDAwRkZGRiAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgOCBhbmQgOSwgLSBvbmx5IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgYnkgbWFzayBNIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLMTZCODlfRF9TICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX01BU0sxNkIxMDExIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0sxNkIxMDExX01fTSAgICAgMHhGRkZGMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDEwIGFuZCAxMQorI2RlZmluZSBBRElfTUFTSzE2QjEwMTFfTV9TICAgICAxNgorI2RlZmluZSBBRElfTUFTSzE2QjEwMTFfRF9NICAgICAweDAwMDBGRkZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyAxMCBhbmQgMTEsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzE2QjEwMTFfRF9TICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19NQVNLMTZCMTIxMyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9NQVNLMTZCMTIxM19NX00gICAgIDB4RkZGRjAwMDAgIC8vIE1hc2sgZm9yIEFESSByZWdpc3RlciAxMiBhbmQgMTMKKyNkZWZpbmUgQURJX01BU0sxNkIxMjEzX01fUyAgICAgMTYKKyNkZWZpbmUgQURJX01BU0sxNkIxMjEzX0RfTSAgICAgMHgwMDAwRkZGRiAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgMTIgYW5kIDEzLCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0gd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0sxNkIxMjEzX0RfUyAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZQorLy8gQURJX09fTUFTSzE2QjE0MTUgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzE2QjE0MTVfTV9NICAgICAweEZGRkYwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMTQgYW5kIDE1CisjZGVmaW5lIEFESV9NQVNLMTZCMTQxNV9NX1MgICAgIDE2CisjZGVmaW5lIEFESV9NQVNLMTZCMTQxNV9EX00gICAgIDB4MDAwMEZGRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDE0IGFuZCAxNSwgLSBvbmx5IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgYnkgbWFzayBNIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLMTZCMTQxNV9EX1MgICAgIDAKKworI2VuZGlmIC8vIF9fSFdfQURJX0hfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpXzBfcmYuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV8wX3JmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzYTk3OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV8wX3JmLmgKQEAgLTAsMCArMSw5OTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hZGlfMF9yZl9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19BRElfMF9SRl9IX18KKyNkZWZpbmUgX19IV19BRElfMF9SRl9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBRElfMF9SRiBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0xOQUNUTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fTE5BQ1RMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19MTkFDVEwyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0lGQU1QQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZBTVBDVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19JRkFNUENUTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX1BBQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fUEFDVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19QQUNUTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX1JGTERPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fUkZMRE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19SRkxETzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0lGQURDQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZBRENMRkNGRzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19JRkFEQ0xGQ0ZHMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0lGQURDREFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZBRENRVUFOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19JRkFEQ0NUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0lGQURDQ1RMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZBTERPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19JRkFMRE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0lGQUxETzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZETERPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19JRkRMRE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0lGRExETzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZBTVBDVEwzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fTE5BQ1RMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjRdIE1JWF9BRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIE1JWF9TRV9SRk4gICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUlYX1NFX1JGUCAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNSVhfRElGRl9NT0RFICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9NSVhfQURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX01JWF9BRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfTUlYX0FEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9NSVhfQURfTUlYX1NFX1JGTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBBMAorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX01JWF9BRF9NSVhfU0VfUkZQICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfTUlYX0FEX01JWF9ESUZGX01PREUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzM6Ml0gTE5BX0FECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gTE5BX1NFX1JGTiAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBMTkFfU0VfUkZQICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIExOQV9ESUZGX01PREUgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX0xOQV9BRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfTE5BX0FEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9MTkFfQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX0xOQV9BRF9MTkFfU0VfUkZOICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfTE5BX0FEX0xOQV9TRV9SRlAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9MTkFfQURfTE5BX0RJRkZfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBCSUFTX0RJUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfQklBU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9CSUFTX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX0JJQVNfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19MTkFDVEwxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzU6NF0gREVWX0NUTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDFfREVWX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMV9ERVZfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwxX0RFVl9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIEdBSU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1BWF9NSU5VU18zICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUFYX01JTlVTXzYgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNQVhfTUlOVVNfOSAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1BWF9NSU5VU18xMiAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwxX0dBSU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDFfR0FJTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMV9HQUlOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwxX0dBSU5fTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDFfR0FJTl9NQVhfTUlOVVNfMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMV9HQUlOX01BWF9NSU5VU182ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBRElfMF9SRl9MTkFDVEwxX0dBSU5fTUFYX01JTlVTXzkgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDFfR0FJTl9NQVhfTUlOVVNfMTIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX0xOQUNUTDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo2XSBSWFRYX1BJTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDJfUlhUWF9QSU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMl9SWFRYX1BJTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwyX1JYVFhfUElOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzRdIEVYVF9CSUFTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMl9FWFRfQklBUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwyX0VYVF9CSUFTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDJfRVhUX0JJQVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwyX0lCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDJfSUJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMl9JQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZBTVBDVEwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6M10gVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwwX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGOAorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDBfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEJJQVNfRElTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwwX0JJQVNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDBfQklBU19ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMF9CSUFTX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gRU5fUQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMF9FTl9RICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwwX0VOX1FfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDBfRU5fUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMF9FTl9RX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwwX0VOX1FfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBFTl9JCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwwX0VOX0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDBfRU5fSV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMF9FTl9JX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwwX0VOX0lfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDBfRU5fSV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFNUENUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNTowXSBHQUlOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNQVhfTUlOVVNfMyAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1BWF9NSU5VU182ICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUFYX01JTlVTXzkgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNQVhfTUlOVVNfMTIgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1BWF9NSU5VU18xNSAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUFYX01JTlVTXzE4ICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMV9HQUlOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwxX0dBSU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDFfR0FJTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMV9HQUlOX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwxX0dBSU5fTUFYX01JTlVTXzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDFfR0FJTl9NQVhfTUlOVVNfNiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMV9HQUlOX01BWF9NSU5VU185ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwxX0dBSU5fTUFYX01JTlVTXzEyICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDFfR0FJTl9NQVhfTUlOVVNfMTUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMV9HQUlOX01BWF9NSU5VU18xOCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX0lGQU1QQ1RMMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsyOjBdIEFUVE4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBNSU5VU18yMSAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1JTlVTXzE4ICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUlOVVNfMTUgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNSU5VU18xMiAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1JTlVTXzkgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUlOVVNfNiAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNSU5VU18zICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDJfQVRUTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMl9BVFROX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwyX0FUVE5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDJfQVRUTl9NSU5VU18yMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMl9BVFROX01JTlVTXzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwyX0FUVE5fTUlOVVNfMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDJfQVRUTl9NSU5VU18xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMl9BVFROX01JTlVTXzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwyX0FUVE5fTUlOVVNfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDJfQVRUTl9NSU5VU18zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMl9BVFROX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX1BBQ1RMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjNdIFRSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9QQUNUTDBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMF9UUklNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjgKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwwX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBQRUFLREVUX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwwX1BFQUtERVRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMF9SRl9QQUNUTDBfUEVBS0RFVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMF9QRUFLREVUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwwX1BFQUtERVRfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMF9SRl9QQUNUTDBfUEVBS0RFVF9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIEJJQVNfRElTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwwX0JJQVNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9QQUNUTDBfQklBU19ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMF9CSUFTX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9QQUNUTDBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwwX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMF9SRl9QQUNUTDBfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMF9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX1BBQ1RMMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjZdIEdBSU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9QQUNUTDFfR0FJTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMV9HQUlOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwxX0dBSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBJQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMV9JQl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwxX0lCX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBRElfMF9SRl9QQUNUTDFfSUJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19QQUNUTDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo1XSBSWFRYCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwyX1JYVFhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMF9SRl9QQUNUTDJfUlhUWF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEUwCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMl9SWFRYX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzQ6M10gQ00KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9QQUNUTDJfQ01fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMl9DTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwyX0NNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICBbMjowXSBBRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMl9BRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwyX0FEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBRElfMF9SRl9QQUNUTDJfQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19SRkxETzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs1XSBBVEVTVF9JX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0FURVNUX0lfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfQVRFU1RfSV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9BVEVTVF9JX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQVRFU1RfVl9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9BVEVTVF9WX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0FURVNUX1ZfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfQVRFU1RfVl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIEJZUEFTU19SRUdfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfQllQQVNTX1JFR19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9CWVBBU1NfUkVHX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0JZUEFTU19SRUdfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBSRFlfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfUkRZX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9SRFlfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX1JEWV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfUkRZX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9SRFlfRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gQklBU19ESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfQklBU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9CSUFTX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0JJQVNfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfQklBU19ESVNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9CSUFTX0RJU19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX1JGTERPMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIFRSSU1fT1VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8xX1RSSU1fT1VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBRElfMF9SRl9SRkxETzFfVFJJTV9PVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMV9UUklNX09VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX1JGTERPMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjNdIENPTVBfUkVTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8yX0NPTVBfUkVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMF9SRl9SRkxETzJfQ09NUF9SRVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEFESV8wX1JGX1JGTERPMl9DT01QX1JFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgWzI6MF0gQ09NUF9DQVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9SRkxETzJfQ09NUF9DQVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMl9DT01QX0NBUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8yX0NPTVBfQ0FQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZBRENDVEwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NF0gSU5UMkFESgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMF9JTlQyQURKX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwwX0lOVDJBREpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDBfSU5UMkFESl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjJdIEFBRkNBUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMF9BQUZDQVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwwX0FBRkNBUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDBfQUFGQ0FQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEJJQVNfRElTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwwX0JJQVNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDBfQklBU19ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMF9CSUFTX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwwX0JJQVNfRElTX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDBfQklBU19ESVNfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFEQ0xGQ0ZHMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjRdIEZGMUFESgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDTEZDRkcwX0ZGMUFESl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENMRkNGRzBfRkYxQURKX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0xGQ0ZHMF9GRjFBREpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIElOVDNBREoKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0xGQ0ZHMF9JTlQzQURKX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV8wX1JGX0lGQURDTEZDRkcwX0lOVDNBREpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENMRkNGRzBfSU5UM0FESl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZBRENMRkNGRzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo0XSBGRjNBREoKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0xGQ0ZHMV9GRjNBREpfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV8wX1JGX0lGQURDTEZDRkcxX0ZGM0FESl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENMRkNGRzFfRkYzQURKX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBGRjJBREoKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0xGQ0ZHMV9GRjJBREpfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV8wX1JGX0lGQURDTEZDRkcxX0ZGMkFESl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENMRkNGRzFfRkYyQURKX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZBRENEQUMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBNT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gUlRaICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBOUlRaICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENEQUNfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0RBQ19NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDREFDX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENEQUNfTU9ERV9SVFogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0RBQ19NT0RFX05SVFogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs2OjFdIFRSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0RBQ19UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFESV8wX1JGX0lGQURDREFDX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0UKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENEQUNfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZBRENRVUFOVDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFszXSBBVVRPQ0FMX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENRVUFOVDBfQVVUT0NBTF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ1FVQU5UMF9BVVRPQ0FMX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX0lGQURDUVVBTlQwX0FVVE9DQUxfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgWzI6MF0gVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ1FVQU5UMF9USF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8wX1JGX0lGQURDUVVBTlQwX1RIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENRVUFOVDBfVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZBRENDVEwxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NV0gRElUSEVSVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9ESVRIRVJUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0RJVEhFUlRSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBFMAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfRElUSEVSVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIEFEQ0lFTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9BRENJRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0FEQ0lFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfQURDSUVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9BRENJRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0FEQ0lFTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFszXSBBRENRRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfQURDUUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9BRENRRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0FEQ1FFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfQURDUUVOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9BRENRRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzI6MV0gRElUSEVSRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTkcgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOU0QgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5TICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0RJVEhFUkVOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfRElUSEVSRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9ESVRIRVJFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0RJVEhFUkVOX0VORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfRElUSEVSRU5fRU5TRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9ESVRIRVJFTl9FTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0RJVEhFUkVOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZBRENDVEwyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gUkVTRVROCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX1JFU0VUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfUkVTRVROX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9SRVNFVE5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX1JFU0VUTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfUkVTRVROX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIENMS0dFTkVOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX0NMS0dFTkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfQ0xLR0VORU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9DTEtHRU5FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX0NMS0dFTkVOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfQ0xLR0VORU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIEFEQ0RJR0NMS0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX0FEQ0RJR0NMS0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfQURDRElHQ0xLRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9BRENESUdDTEtFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX0FEQ0RJR0NMS0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfQURDRElHQ0xLRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIElOVkNMS09VVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9JTlZDTEtPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX0lOVkNMS09VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfSU5WQ0xLT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9JTlZDTEtPVVRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX0lOVkNMS09VVF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZBTERPMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzRdIEVSUl9BTVBfWkVST19FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfRVJSX0FNUF9aRVJPX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9FUlJfQU1QX1pFUk9fRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0VSUl9BTVBfWkVST19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfRVJSX0FNUF9aRVJPX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9FUlJfQU1QX1pFUk9fRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFszXSBCWVBBU1NfUkVHX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9CWVBBU1NfUkVHX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0JZUEFTU19SRUdfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfQllQQVNTX1JFR19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gUkRZX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9SRFlfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX1JEWV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfUkRZX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9SRFlfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX1JEWV9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIEJJQVNfRElTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9CSUFTX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0JJQVNfRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfQklBU19ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9CSUFTX0RJU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0JJQVNfRElTX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFMRE8yCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NV0gQ09NUF9DQVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8yX0NPTVBfQ0FQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzJfQ09NUF9DQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRTAKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMl9DT01QX0NBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICBbNDowXSBUUklNX09VVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzJfVFJJTV9PVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMl9UUklNX09VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8yX1RSSU1fT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFMRE8zCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNF0gQVRFU1RfVl9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzNfQVRFU1RfVl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPM19BVEVTVF9WX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8zX0FURVNUX1ZfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIEFURVNUX0lfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8zX0FURVNUX0lfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzNfQVRFU1RfSV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPM19BVEVTVF9JX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICBbMjowXSBDT01QX1JFUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzNfQ09NUF9SRVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPM19DT01QX1JFU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBRElfMF9SRl9JRkFMRE8zX0NPTVBfUkVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkRMRE8xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gQllQQVNTX1JFR19FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfQllQQVNTX1JFR19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9CWVBBU1NfUkVHX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX0JZUEFTU19SRUdfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfQllQQVNTX1JFR19FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9CWVBBU1NfUkVHX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsyXSBSRFlfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX1JEWV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfUkRZX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9SRFlfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX1JEWV9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfUkRZX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gQklBU19ESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX0JJQVNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfQklBU19ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9CSUFTX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX0JJQVNfRElTX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfQklBU19ESVNfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX0lGRExETzIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo1XSBDT01QX0NBUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzJfQ09NUF9DQVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMl9DT01QX0NBUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBFMAorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8yX0NPTVBfQ0FQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgIFs0OjBdIFRSSU1fT1VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMl9UUklNX09VVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8yX1RSSU1fT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzJfVFJJTV9PVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX0lGRExETzMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs0XSBBVEVTVF9WX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZETERPM19BVEVTVF9WX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8zX0FURVNUX1ZfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzNfQVRFU1RfVl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPM19BVEVTVF9WX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8zX0FURVNUX1ZfRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzNdIEFURVNUX0lfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8zX0FURVNUX0lfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX0lGRExETzNfQVRFU1RfSV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPM19BVEVTVF9JX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMF9SRl9JRkRMRE8zX0FURVNUX0lfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX0lGRExETzNfQVRFU1RfSV9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzI6MF0gQ09NUF9SRVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8zX0NPTVBfUkVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzNfQ09NUF9SRVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPM19DT01QX1JFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZBTVBDVEwzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6NF0gQUFGX0NBUF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMM19BQUZfQ0FQX0VOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwzX0FBRl9DQVBfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDNfQUFGX0NBUF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIElCCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwzX0lCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDNfSUJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMM19JQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX1NUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzozXSBJRkFEQ19DQUxWQUxfT1VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfU1RBVF9JRkFEQ19DQUxWQUxfT1VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBRElfMF9SRl9TVEFUX0lGQURDX0NBTFZBTF9PVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEY4CisjZGVmaW5lIEFESV8wX1JGX1NUQVRfSUZBRENfQ0FMVkFMX09VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gSUZBRENfQ0FMRE9ORQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1NUQVRfSUZBRENfQ0FMRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfU1RBVF9JRkFEQ19DQUxET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMF9SRl9TVEFUX0lGQURDX0NBTERPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIElGTERPU19SRFkKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9TVEFUX0lGTERPU19SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX1NUQVRfSUZMRE9TX1JEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfU1RBVF9JRkxET1NfUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRl9MRE8KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9TVEFUX1JGX0xETyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX1NUQVRfUkZfTERPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfU1RBVF9SRl9MRE9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0FESV8wX1JGX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV8xX3N5bnRoLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hZGlfMV9zeW50aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZWVlMzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hZGlfMV9zeW50aC5oCkBAIC0wLDAgKzEsMzIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYWRpXzFfc3ludGhfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQURJXzFfU1lOVEhfSF9fCisjZGVmaW5lIF9fSFdfQURJXzFfU1lOVEhfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQURJXzFfU1lOVEggY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzFfU1lOVEhfT19WQ09MRE9DVEwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMV9TWU5USF9PX1ZDT0xET0NUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8xX1NZTlRIX09fVkNPTERPQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzFfU1lOVEhfT19TTERPQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMV9TWU5USF9PX1NMRE9DVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8xX1NZTlRIX09fU1lOVEhDVExJTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzFfU1lOVEhfT19BVEVTVENUTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMV9TWU5USF9PX0FURVNUQ1RMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8xX1NZTlRIX09fU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMV9TWU5USF9PX1ZDT0xET0NUTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs0XSBBVEVTVF9WX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMF9BVEVTVF9WX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwwX0FURVNUX1ZfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDBfQVRFU1RfVl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gQllQQVNTX1JFR19FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDBfQllQQVNTX1JFR19FTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMF9CWVBBU1NfUkVHX0VOX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwwX0JZUEFTU19SRUdfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFJEWV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDBfUkRZX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMF9SRFlfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwwX1JEWV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEJJQVNfRElTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMF9CSUFTX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwwX0JJQVNfRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDBfQklBU19ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwwX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDBfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8xX1NZTlRIX09fVkNPTERPQ1RMMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzZdIEFURVNUX0lfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwxX0FURVNUX0lfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDFfQVRFU1RfSV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMV9BVEVTVF9JX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBUUklNX09VVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDFfVFJJTV9PVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMV9UUklNX09VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwxX1RSSU1fT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzFfU1lOVEhfT19WQ09MRE9DRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs2XSBESVZfQklBU19ESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DRkdfRElWX0JJQVNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NGR19ESVZfQklBU19ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ0ZHX0RJVl9CSUFTX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTozXSBDT01QX1JFUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NGR19DT01QX1JFU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ0ZHX0NPTVBfUkVTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DRkdfQ09NUF9SRVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgIFsyOjBdIENPTVBfQ0FQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ0ZHX0NPTVBfQ0FQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DRkdfQ09NUF9DQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NGR19DT01QX0NBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMV9TWU5USF9PX1NMRE9DVEwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNl0gQ09NUF9DQVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9DT01QX0NBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX0NPTVBfQ0FQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfQ09NUF9DQVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBBVEVTVF9JX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfQVRFU1RfSV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9BVEVTVF9JX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX0FURVNUX0lfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQVRFU1RfVl9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX0FURVNUX1ZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfQVRFU1RfVl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9BVEVTVF9WX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzJdIFJEWV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX1JEWV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfUkRZX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9SRFlfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEJJQVNfRElTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfQklBU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9CSUFTX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX0JJQVNfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8xX1NZTlRIX09fU0xET0NUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNTowXSBUUklNX09VVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwxX1RSSU1fT1VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDFfVFJJTV9PVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMV9UUklNX09VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzFfU1lOVEhfT19TWU5USENUTElOSVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBDTEtfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9TWU5USENUTElOSVRfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8xX1NZTlRIX1NZTlRIQ1RMSU5JVF9DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzFfU1lOVEhfU1lOVEhDVExJTklUX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBERElfUkVTRVRfTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1NZTlRIQ1RMSU5JVF9ERElfUkVTRVRfTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzFfU1lOVEhfU1lOVEhDVExJTklUX0RESV9SRVNFVF9OX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMV9TWU5USF9TWU5USENUTElOSVRfRERJX1JFU0VUX05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzFfU1lOVEhfT19BVEVTVENUTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBURVNUU0VMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gUEVBS0RFVE5fQTEgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBSWE9VVFFOX0ExICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFJYT1VUSU5fQTEgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTERPVl9BMCAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBJRkFEQ1BfQTAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBFQUtERVRQX0EwICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUlhPVVRRUF9BMCAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBSWE9VVElQX0EwICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE5DICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDBfVEVTVFNFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMF9URVNUU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwwX1RFU1RTRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDBfVEVTVFNFTF9QRUFLREVUTl9BMSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMF9URVNUU0VMX1JYT1VUUU5fQTEgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwwX1RFU1RTRUxfUlhPVVRJTl9BMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDBfVEVTVFNFTF9MRE9WX0EwICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMF9URVNUU0VMX0lGQURDUF9BMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwwX1RFU1RTRUxfUEVBS0RFVFBfQTAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDBfVEVTVFNFTF9SWE9VVFFQX0EwICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMF9URVNUU0VMX1JYT1VUSVBfQTAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwwX1RFU1RTRUxfTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8xX1NZTlRIX09fQVRFU1RDVEwxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6Ml0gUkVTRVJFVkVEMgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMV9SRVNFUkVWRUQyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwxX1JFU0VSRVZFRDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGQworI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDFfUkVTRVJFVkVEMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgIFsxOjBdIFRFU1RTRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBMRE9JVEVTVF9BMSAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIElGQURDVEVTVE5fQTEgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTkMgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMV9URVNUU0VMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwxX1RFU1RTRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDFfVEVTVFNFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMV9URVNUU0VMX0xET0lURVNUX0ExICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwxX1RFU1RTRUxfSUZBRENURVNUTl9BMSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDFfVEVTVFNFTF9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzFfU1lOVEhfT19TVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gU1lOVEhfVFVORV9BQ0sKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9TVEFUX1NZTlRIX1RVTkVfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8xX1NZTlRIX1NUQVRfU1lOVEhfVFVORV9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzFfU1lOVEhfU1RBVF9TWU5USF9UVU5FX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBTTERPX1JEWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1NUQVRfU0xET19SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzFfU1lOVEhfU1RBVF9TTERPX1JEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMV9TWU5USF9TVEFUX1NMRE9fUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIExET1ZDT19SRFkKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9TVEFUX0xET1ZDT19SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8xX1NZTlRIX1NUQVRfTERPVkNPX1JEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzFfU1lOVEhfU1RBVF9MRE9WQ09fUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0FESV8xX1NZTlRIX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV8yX3JlZnN5cy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpXzJfcmVmc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4ODc0OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV8yX3JlZnN5cy5oCkBAIC0wLDAgKzEsMzYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYWRpXzJfcmVmc3lzX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FESV8yX1JFRlNZU19IX18KKyNkZWZpbmUgX19IV19BRElfMl9SRUZTWVNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQURJXzJfUkVGU1lTIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8yX1JFRlNZU19PX1JFRlNZU0NUTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzJfUkVGU1lTX09fU09DTERPQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMl9SRUZTWVNfT19TT0NMRE9DVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8yX1JFRlNZU19PX1NPQ0xET0NUTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzJfUkVGU1lTX09fU09DTERPQ1RMMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMl9SRUZTWVNfT19TT0NMRE9DVEw0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8yX1JFRlNZU19PX1NPQ0xET0NUTDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzJfUkVGU1lTX09fSFBPU0NDVEwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMl9SRUZTWVNfT19IUE9TQ0NUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8yX1JFRlNZU19PX0hQT1NDQ1RMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMl9SRUZTWVNfT19SRUZTWVNDVEwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzQ6MF0gVFJJTV9JUkVGCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1JFRlNZU0NUTDBfVFJJTV9JUkVGX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBRElfMl9SRUZTWVNfUkVGU1lTQ1RMMF9UUklNX0lSRUZfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFESV8yX1JFRlNZU19SRUZTWVNDVEwwX1RSSU1fSVJFRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMl9SRUZTWVNfT19TT0NMRE9DVEwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NF0gVlRSSU1fVURJRworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwwX1ZUUklNX1VESUdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDBfVlRSSU1fVURJR19NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMMF9WVFJJTV9VRElHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIFZUUklNX0JPRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwwX1ZUUklNX0JPRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDBfVlRSSU1fQk9EX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMMF9WVFJJTV9CT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzJfUkVGU1lTX09fU09DTERPQ1RMMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjRdIFZUUklNX0NPQVJTRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwxX1ZUUklNX0NPQVJTRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDFfVlRSSU1fQ09BUlNFX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMMV9WVFJJTV9DT0FSU0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIFZUUklNX0RJRworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwxX1ZUUklNX0RJR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDFfVlRSSU1fRElHX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMMV9WVFJJTV9ESUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzJfUkVGU1lTX09fU09DTERPQ1RMMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsyOjBdIFZUUklNX0RFTFRBCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDJfVlRSSU1fREVMVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMMl9WVFJJTV9ERUxUQV9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwyX1ZUUklNX0RFTFRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMl9SRUZTWVNfT19TT0NMRE9DVEwzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6Nl0gSVRSSU1fRElHTERPX0xPQUQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMM19JVFJJTV9ESUdMRE9fTE9BRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwzX0lUUklNX0RJR0xET19MT0FEX00gICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDNfSVRSSU1fRElHTERPX0xPQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTozXSBJVFJJTV9ESUdMRE8KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBCSUFTXzEyMFAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEJJQVNfMTAwUCAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQklBU184MFAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBCSUFTXzYwUCAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDNfSVRSSU1fRElHTERPX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMM19JVFJJTV9ESUdMRE9fTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwzX0lUUklNX0RJR0xET19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDNfSVRSSU1fRElHTERPX0JJQVNfMTIwUCAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMM19JVFJJTV9ESUdMRE9fQklBU18xMDBQICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwzX0lUUklNX0RJR0xET19CSUFTXzgwUCAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDNfSVRSSU1fRElHTERPX0JJQVNfNjBQICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMjowXSBJVFJJTV9VRElHTERPCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDNfSVRSSU1fVURJR0xET19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMM19JVFJJTV9VRElHTERPX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwzX0lUUklNX1VESUdMRE9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMl9SRUZTWVNfT19TT0NMRE9DVEw0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6NV0gVURJR19JVEVTVF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw0X1VESUdfSVRFU1RfRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDRfVURJR19JVEVTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNF9VRElHX0lURVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgIFs0OjJdIERJR19JVEVTVF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw0X0RJR19JVEVTVF9FTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDRfRElHX0lURVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNF9ESUdfSVRFU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEJJQVNfRElTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDRfQklBU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNF9CSUFTX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw0X0JJQVNfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gVURJR19MRE9fRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNF9VRElHX0xET19FTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw0X1VESUdfTERPX0VOX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDRfVURJR19MRE9fRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNF9VRElHX0xET19FTl9FTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw0X1VESUdfTERPX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMl9SRUZTWVNfT19TT0NMRE9DVEw1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gSU1PTl9JVEVTVF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw1X0lNT05fSVRFU1RfRU4gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDVfSU1PTl9JVEVTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNV9JTU9OX0lURVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgIFsyOjBdIFRFU1RTRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBWRERfQU9OICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFZSRUZfQU1QICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gSVRFU1QgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBOQyAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDVfVEVTVFNFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNV9URVNUU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw1X1RFU1RTRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDVfVEVTVFNFTF9WRERfQU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNV9URVNUU0VMX1ZSRUZfQU1QICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw1X1RFU1RTRUxfSVRFU1QgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDVfVEVTVFNFTF9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8yX1JFRlNZU19PX0hQT1NDQ1RMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzddIEZJTFRFUl9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfRklMVEVSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9GSUxURVJfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0ZJTFRFUl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgIFs2OjVdIEJJQVNfUkVDSEFSR0VfRExZCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gTUlOX0RMWV9YOCAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNSU5fRExZX1g0ICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1JTl9ETFlfWDIgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUlOX0RMWV9YMSAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfQklBU19SRUNIQVJHRV9ETFlfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9CSUFTX1JFQ0hBUkdFX0RMWV9NICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0JJQVNfUkVDSEFSR0VfRExZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfQklBU19SRUNIQVJHRV9ETFlfTUlOX0RMWV9YOCAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9CSUFTX1JFQ0hBUkdFX0RMWV9NSU5fRExZX1g0ICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0JJQVNfUkVDSEFSR0VfRExZX01JTl9ETFlfWDIgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfQklBU19SRUNIQVJHRV9ETFlfTUlOX0RMWV9YMSAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzQ6M10gVFVORV9DQVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBTSElGVF9NMTA4ICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFNISUZUX003MCAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gU0hJRlRfTTM1ICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBTSElGVF8wICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9UVU5FX0NBUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX1RVTkVfQ0FQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfVFVORV9DQVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9UVU5FX0NBUF9TSElGVF9NMTA4ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX1RVTkVfQ0FQX1NISUZUX003MCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfVFVORV9DQVBfU0hJRlRfTTM1ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9UVU5FX0NBUF9TSElGVF8wICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMjoxXSBTRVJJRVNfQ0FQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9TRVJJRVNfQ0FQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX1NFUklFU19DQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfU0VSSUVTX0NBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRElWM19CWVBBU1MKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBIUE9TQ18yNTIwTUhaICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEhQT1NDXzg0ME1IWiAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0RJVjNfQllQQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfRElWM19CWVBBU1NfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9ESVYzX0JZUEFTU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0RJVjNfQllQQVNTX0hQT1NDXzI1MjBNSFogICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfRElWM19CWVBBU1NfSFBPU0NfODQwTUhaICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMl9SRUZTWVNfT19IUE9TQ0NUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs1XSBCSUFTX0RJUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDFfQklBU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMV9CSUFTX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwxX0JJQVNfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFBXUkRFVF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDFfUFdSREVUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMV9QV1JERVRfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwxX1BXUkRFVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIEJJQVNfUkVTX1NFVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDFfQklBU19SRVNfU0VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMV9CSUFTX1JFU19TRVRfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwxX0JJQVNfUkVTX1NFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzJfUkVGU1lTX09fSFBPU0NDVEwyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gQklBU19IT0xEX01PREVfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX0JJQVNfSE9MRF9NT0RFX0VOICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfQklBU19IT0xEX01PREVfRU5fTSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMl9CSUFTX0hPTERfTU9ERV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBURVNUTVVYX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMl9URVNUTVVYX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX1RFU1RNVVhfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfVEVTVE1VWF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6NF0gQVRFU1RfU0VMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMl9BVEVTVF9TRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX0FURVNUX1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfQVRFU1RfU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gQ1VSUk1JUlJfUkFUSU8KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX0NVUlJNSVJSX1JBVElPX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfQ1VSUk1JUlJfUkFUSU9fTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMl9DVVJSTUlSUl9SQVRJT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0FESV8yX1JFRlNZU19fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hZGlfM19yZWZzeXMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV8zX3JlZnN5cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMmU5NTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hZGlfM19yZWZzeXMuaApAQCAtMCwwICsxLDQ4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2FkaV8zX3JlZnN5c19oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19BRElfM19SRUZTWVNfSF9fCisjZGVmaW5lIF9fSFdfQURJXzNfUkVGU1lTX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEFESV8zX1JFRlNZUyBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBBbmFsb2cgVGVzdCBDb250cm9sCisjZGVmaW5lIEFESV8zX1JFRlNZU19PX1NQQVJFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzNfUkVGU1lTX09fUkVGU1lTQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfM19SRUZTWVNfT19SRUZTWVNDVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8zX1JFRlNZU19PX1JFRlNZU0NUTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzNfUkVGU1lTX09fUkVGU1lTQ1RMMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorCisvLyBEQ0RDIENvbnRyb2wgMAorI2RlZmluZSBBRElfM19SRUZTWVNfT19EQ0RDQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisKKy8vIERDREMgQ29udHJvbCAxCisjZGVmaW5lIEFESV8zX1JFRlNZU19PX0RDRENDVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKworLy8gRENEQyBDb250cm9sIDIKKyNkZWZpbmUgQURJXzNfUkVGU1lTX09fRENEQ0NUTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBEQ0RDIENvbnRyb2wgMworI2RlZmluZSBBRElfM19SRUZTWVNfT19EQ0RDQ1RMMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8zX1JFRlNZU19PX0RDRENDVEw0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzNfUkVGU1lTX09fRENEQ0NUTDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8zX1JFRlNZU19PX1NQQVJFMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFNQQVJFMAorLy8KKy8vIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYSByZXNlcnZlZC4gV3JpdGluZyBhbnkgb3RoZXIgdmFsdWUKKy8vIHRoYW4gdGhlIHJlc2V0IHZhbHVlIG1heSByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBBRElfM19SRUZTWVNfU1BBUkUwX1NQQVJFMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFESV8zX1JFRlNZU19TUEFSRTBfU1BBUkUwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1NQQVJFMF9TUEFSRTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8zX1JFRlNZU19PX1JFRlNZU0NUTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBURVNUQ1RMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gQk1DT01QT1VUICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBWVEVNUCAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFZSRUYwUDhWICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gVkJHVU5CVUZGICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBWQkcgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIElSRUY0VSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gSVZSRUY0VSAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBJUFRBVDJVICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE5DICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMF9URVNUQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwwX1RFU1RDVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDBfVEVTVENUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMF9URVNUQ1RMX0JNQ09NUE9VVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwwX1RFU1RDVExfVlRFTVAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDBfVEVTVENUTF9WUkVGMFA4ViAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMF9URVNUQ1RMX1ZCR1VOQlVGRiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwwX1RFU1RDVExfVkJHICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDBfVEVTVENUTF9JUkVGNFUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMF9URVNUQ1RMX0lWUkVGNFUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwwX1RFU1RDVExfSVBUQVQyVSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDBfVEVTVENUTF9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8zX1JFRlNZU19PX1JFRlNZU0NUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzozXSBUUklNX1ZERFNfQk9ECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gUE9TXzI3ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMjYgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18yNSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzI0ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMzEgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18zMCAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzI5ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMjggICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18xOSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzE4ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMTcgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18xNiAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzIzICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMjIgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18yMSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzIwICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMTEgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18xMCAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzkgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfOCAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18xNSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzE0ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMTMgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18xMiAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzMgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMiAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18xICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfNyAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU182ICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzUgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfNCAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEY4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMjcgICAgICAgICAgICAgICAgMHgwMDAwMDBGOAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18yNiAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzI1ICAgICAgICAgICAgICAgIDB4MDAwMDAwRTgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMjQgICAgICAgICAgICAgICAgMHgwMDAwMDBFMAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18zMSAgICAgICAgICAgICAgICAweDAwMDAwMEQ4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzMwICAgICAgICAgICAgICAgIDB4MDAwMDAwRDAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMjkgICAgICAgICAgICAgICAgMHgwMDAwMDBDOAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18yOCAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzE5ICAgICAgICAgICAgICAgIDB4MDAwMDAwQjgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMTggICAgICAgICAgICAgICAgMHgwMDAwMDBCMAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18xNyAgICAgICAgICAgICAgICAweDAwMDAwMEE4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzE2ICAgICAgICAgICAgICAgIDB4MDAwMDAwQTAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMjMgICAgICAgICAgICAgICAgMHgwMDAwMDA5OAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18yMiAgICAgICAgICAgICAgICAweDAwMDAwMDkwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzIxICAgICAgICAgICAgICAgIDB4MDAwMDAwODgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMjAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18xMSAgICAgICAgICAgICAgICAweDAwMDAwMDc4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzEwICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfOSAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU184ICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzE1ICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMTQgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18xMyAgICAgICAgICAgICAgICAweDAwMDAwMDQ4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzEyICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMyAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18yICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzEgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMCAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU183ICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzYgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfNSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU180ICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzJdIEJBVE1PTl9DT01QX1RFU1RfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9CQVRNT05fQ09NUF9URVNUX0VOICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX0JBVE1PTl9DT01QX1RFU1RfRU5fTSAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfQkFUTU9OX0NPTVBfVEVTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9CQVRNT05fQ09NUF9URVNUX0VOX0VOICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX0JBVE1PTl9DT01QX1RFU1RfRU5fRElTICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzE6MF0gVEVTVENUTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIElQVEFUMVUgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQk1DT01QSU4gICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBOQyAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVEVTVENUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9URVNUQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RFU1RDVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVEVTVENUTF9JUFRBVDFVICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9URVNUQ1RMX0JNQ09NUElOICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RFU1RDVExfTkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfM19SRUZTWVNfT19SRUZTWVNDVEwyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NF0gVFJJTV9WUkVGCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDJfVFJJTV9WUkVGX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMl9UUklNX1ZSRUZfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwyX1RSSU1fVlJFRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzE6MF0gVFJJTV9UU0VOU0UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMl9UUklNX1RTRU5TRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwyX1RSSU1fVFNFTlNFX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDJfVFJJTV9UU0VOU0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8zX1JFRlNZU19PX1JFRlNZU0NUTDMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBCT0RfQkdfVFJJTV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwzX0JPRF9CR19UUklNX0VOICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDNfQk9EX0JHX1RSSU1fRU5fTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMM19CT0RfQkdfVFJJTV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFZURU1QX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDNfVlRFTVBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMM19WVEVNUF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwzX1ZURU1QX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDNfVlRFTVBfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMM19WVEVNUF9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFRSSU1fVkJHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDNfVFJJTV9WQkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMM19UUklNX1ZCR19NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwzX1RSSU1fVkJHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfM19SRUZTWVNfT19EQ0RDQ1RMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjVdIEdMRE9fSVNSQworLy8KKy8vIFNldCBjaGFyZ2UgYW5kIHJlLWNoYXJnZSBjdXJyZW50IGxldmVsLgorLy8gMidzIGNvbXBsZW1lbnQgZW5jb2RpbmcuCisvLworLy8gMHgwOiBEZWZhdWx0IDExbUEuCisvLyAweDM6IE1heCAxNW1BLgorLy8gMHg0OiBNYXggNW1BCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMF9HTERPX0lTUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwwX0dMRE9fSVNSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBFMAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDBfR0xET19JU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgIFs0OjBdIFZERFJfVFJJTQorLy8KKy8vIFNldCB0aGUgVkREUiB2b2x0YWdlLgorLy8gUHJvcHJpZXRhcnkgZW5jb2RpbmcuCisvLworLy8gSW5jcmVhc2Ugdm9sdGFnZSB0byBtYXg6IDB4MDAsIDB4MDEsIDB4MDIgLi4uIDB4MTUuCisvLyBEZWNyZWFzZSB2b2x0YWdlIHRvIG1pbjogMHgwMCwgMHgxRiwgMHgxRSwgMHgxRCAuLi4gMHgxNi4KKy8vIFN0ZXAgc2l6ZSA9IDE2bVYKKy8vCisvLyAweDAwOiBEZWZhdWx0LCBhYm91dCAxLjYzVi4KKy8vIDB4MDU6IFR5cGljYWwgdm9sdGFnZSBhZnRlciB0cmltIHZvbHRhZ2UgMS43MVYuCisvLyAweDE1OiBNYXggdm9sdGFnZSAxLjk2Vi4KKy8vIDB4MTY6IE1pbiB2b2x0YWdlIDEuNDdWLgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDBfVkREUl9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMF9WRERSX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwwX1ZERFJfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8zX1JFRlNZU19PX0RDRENDVEwxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6Nl0gSVBUQVRfVFJJTQorLy8KKy8vIFRyaW0gR0xETyBiaWFzIGN1cnJlbnQuCisvLyBQcm9wcmlldGFyeSBlbmNvZGluZy4KKy8vCisvLyAweDA6IERlZmF1bHQKKy8vIDB4MTogSW5jcmVhc2UgR0xETyBiaWFzIGJ5IDEuM3guCisvLyAweDI6IEluY3JlYXNlIEdMRE8gYmlhcyBieSAxLjZ4LgorLy8gMHgzOiBEZWNyZWFzZSBHTERPIGJpYXMgYnkgMC43eC4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwxX0lQVEFUX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDFfSVBUQVRfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMV9JUFRBVF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gVkREUl9PS19IWVNUCisvLworLy8gSW5jcmVhc2UgdGhlIGh5c3RlcmVzaXMgZm9yIHdoZW4gVkREUiBpcyBjb25zaWRlcmVkIG9rLgorLy8KKy8vIDA6IEh5c3RlcmVzaXMgPSA2MG1WCisvLyAxOiBIeXN0ZXJlc2lzID0gNzBtVgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDFfVkREUl9PS19IWVNUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMV9WRERSX09LX0hZU1RfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwxX1ZERFJfT0tfSFlTVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICBbNDowXSBWRERSX1RSSU1fU0xFRVAKKy8vCisvLyBTZXQgdGhlIG1pbiBWRERSIHZvbHRhZ2UgdGhyZXNob2xkIGR1cmluZyBzbGVlcCBtb2RlLgorLy8gUHJvcHJpZXRhcnkgZW5jb2RpbmcuCisvLworLy8gSW5jcmVhc2Ugdm9sdGFnZSB0byBtYXg6IDB4MDAsIDB4MDEsIDB4MDIgLi4uIDB4MTUuCisvLyBEZWNyZWFzZSB2b2x0YWdlIHRvIG1pbjogMHgwMCwgMHgxRiwgMHgxRSwgMHgxRCAuLi4gMHgxNi4KKy8vIFN0ZXAgc2l6ZSA9IDE2bVYKKy8vCisvLyAweDAwOiBEZWZhdWx0LCBhYm91dCAxLjYzVi4KKy8vIDB4MTk6IFR5cGljYWwgdm9sdGFnZSBhZnRlciB0cmltIHZvbHRhZ2UgMS41MlYuCisvLyAweDE1OiBNYXggdm9sdGFnZSAxLjk2Vi4KKy8vIDB4MTY6IE1pbiB2b2x0YWdlIDEuNDdWLgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDFfVkREUl9UUklNX1NMRUVQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMV9WRERSX1RSSU1fU0xFRVBfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwxX1ZERFJfVFJJTV9TTEVFUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8zX1JFRlNZU19PX0RDRENDVEwyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNl0gVFVSTk9OX0VBX1NXCisvLworLy8gVHVybiBvbiBlcnJvcmFtcCBzd2l0Y2gKKy8vCisvLyAwOiBFcnJvcmFtcCBPZmYgKERlZmF1bHQpCisvLyAxOiBFcnJvcmFtcCBPbi4gVHVybnMgb24gR0xETyBlcnJvciBhbXAgc3dpdGNoLgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDJfVFVSTk9OX0VBX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMl9UVVJOT05fRUFfU1dfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX1RVUk5PTl9FQV9TV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBURVNUX1ZERFIKKy8vCisvLyBDb25uZWN0IFZERFIgdG8gQVRFU1QgYnVzCisvLworLy8gMDogTm90IGNvbm5lY3RlZC4KKy8vIDE6IENvbm5lY3RlZAorLy8KKy8vIFNldCBURVNUU0VMID0gMHgwIGZpcnN0IGJlZm9yZSBzZXR0aW5nIHRoaXMgYml0LgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDJfVEVTVF9WRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMl9URVNUX1ZERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX1RFU1RfVkREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBCSUFTX0RJUworLy8KKy8vIERpc2FibGUgZHVtbXkgYmlhcyBjdXJyZW50LgorLy8KKy8vIDA6IER1bW15IGJpYXMgY3VycmVudCBvbiAoRGVmYXVsdCkKKy8vIDE6IER1bW15IGJpYXMgY3VycmVudCBvZmYKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX0JJQVNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDJfQklBU19ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMl9CSUFTX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gVEVTVFNFTAorLy8KKy8vIFNlbGVjdCBzaWduYWwgZm9yIHRlc3QgYnVzLCBvbmUgaG90LgorLy8gRU5VTXM6CisvLyBWRERST0sgICAgICAgICAgICAgICAgICAgVkREUl9PSyBjb25uZWN0ZWQgdG8gdGVzdCBidXMuCisvLyBJQjFVICAgICAgICAgICAgICAgICAgICAgMXVBIGJpYXMgY3VycmVudCBjb25uZWN0ZWQgdG8gdGVzdCBidXMuCisvLyBQQVNTR0FURSAgICAgICAgICAgICAgICAgUGFzcyB0cmFuc2lzdG9yIGdhdGUgdm9sdGFnZSBjb25uZWN0ZWQgdG8gdGVzdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4KKy8vIEVSUkFNUF9PVVQgICAgICAgICAgICAgICBFcnJvciBhbXAgb3V0cHV0IHZvbHRhZ2UgY29ubmVjdGVkIHRvIHRlc3QgYnVzLgorLy8gTkMgICAgICAgICAgICAgICAgICAgICAgIE5vIHNpZ25hbCBjb25uZWN0ZWQgdG8gdGVzdCBidXMuCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMl9URVNUU0VMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX1RFU1RTRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDJfVEVTVFNFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMl9URVNUU0VMX1ZERFJPSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX1RFU1RTRUxfSUIxVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDJfVEVTVFNFTF9QQVNTR0FURSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMl9URVNUU0VMX0VSUkFNUF9PVVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX1RFU1RTRUxfTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8zX1JFRlNZU19PX0RDRENDVEwzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfM19SRUZTWVNfT19EQ0RDQ1RMNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjZdIERFQURUSU1FX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDRfREVBRFRJTUVfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNF9ERUFEVElNRV9UUklNX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw0X0RFQURUSU1FX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTozXSBMT1dfRU5fU0VMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw0X0xPV19FTl9TRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDRfTE9XX0VOX1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNF9MT1dfRU5fU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgWzI6MF0gSElHSF9FTl9TRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDRfSElHSF9FTl9TRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNF9ISUdIX0VOX1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw0X0hJR0hfRU5fU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8zX1JFRlNZU19PX0RDRENDVEw1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNV0gVEVTVE4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDVfVEVTVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNV9URVNUTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw1X1RFU1ROX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBURVNUUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNV9URVNUUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw1X1RFU1RQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDVfVEVTVFBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIERJVEhFUl9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNV9ESVRIRVJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw1X0RJVEhFUl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDVfRElUSEVSX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNV9ESVRIRVJfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw1X0RJVEhFUl9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMjowXSBJUEVBSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNV9JUEVBS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw1X0lQRUFLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDVfSVBFQUtfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQURJXzNfUkVGU1lTX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV80X2F1eC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpXzRfYXV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4MDVhOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV80X2F1eC5oCkBAIC0wLDAgKzEsNTA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYWRpXzRfYXV4X2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FESV80X0FVWF9IX18KKyNkZWZpbmUgX19IV19BRElfNF9BVVhfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQURJXzRfQVVYIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV80X0FVWF9PX01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzRfQVVYX09fTVVYMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfNF9BVVhfT19NVVgyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV80X0FVWF9PX01VWDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKworLy8gQ3VycmVudCBTb3VyY2UKKyNkZWZpbmUgQURJXzRfQVVYX09fSVNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBDb21wYXJhdG9yCisjZGVmaW5lIEFESV80X0FVWF9PX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzRfQVVYX09fTVVYNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworCisvLyBBREMgQ29udHJvbCAwCisjZGVmaW5lIEFESV80X0FVWF9PX0FEQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gQURDIENvbnRyb2wgMQorI2RlZmluZSBBRElfNF9BVVhfT19BREMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisKKy8vIEFEQyBSZWZlcmVuY2UgMAorI2RlZmluZSBBRElfNF9BVVhfT19BRENSRUYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisKKy8vIEFEQyBSZWZlcmVuY2UgMQorI2RlZmluZSBBRElfNF9BVVhfT19BRENSRUYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzRfQVVYX09fTVVYMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjRdIENPTVBBX0lOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRkNBUDEgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBGQ0FQMCAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFURVNUMSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVRFU1QwICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBOQyAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzRfQVVYX01VWDBfQ09NUEFfSU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfNF9BVVhfTVVYMF9DT01QQV9JTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEFESV80X0FVWF9NVVgwX0NPTVBBX0lOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzRfQVVYX01VWDBfQ09NUEFfSU5fRkNBUDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfNF9BVVhfTVVYMF9DT01QQV9JTl9GQ0FQMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV80X0FVWF9NVVgwX0NPTVBBX0lOX0FURVNUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDBfQ09NUEFfSU5fQVRFU1QwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfNF9BVVhfTVVYMF9DT01QQV9JTl9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFszOjBdIENPTVBBX1JFRgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEFEQ1ZSRUZQICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gVkREUyAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBWU1MgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERDT1VQTCAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTkMgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV80X0FVWF9NVVgwX0NPTVBBX1JFRl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzRfQVVYX01VWDBfQ09NUEFfUkVGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBRElfNF9BVVhfTVVYMF9DT01QQV9SRUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV80X0FVWF9NVVgwX0NPTVBBX1JFRl9BRENWUkVGUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzRfQVVYX01VWDBfQ09NUEFfUkVGX1ZERFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfNF9BVVhfTVVYMF9DT01QQV9SRUZfVlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV80X0FVWF9NVVgwX0NPTVBBX1JFRl9EQ09VUEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzRfQVVYX01VWDBfQ09NUEFfUkVGX05DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV80X0FVWF9PX01VWDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBDT01QQV9JTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEFVWElPMCAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU8xICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzIgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPMyAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU80ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzUgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPNiAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU83ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBOQyAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzRfQVVYX01VWDFfQ09NUEFfSU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBRElfNF9BVVhfTVVYMV9DT01QQV9JTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFESV80X0FVWF9NVVgxX0NPTVBBX0lOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDFfQ09NUEFfSU5fQVVYSU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfNF9BVVhfTVVYMV9DT01QQV9JTl9BVVhJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV80X0FVWF9NVVgxX0NPTVBBX0lOX0FVWElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDFfQ09NUEFfSU5fQVVYSU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfNF9BVVhfTVVYMV9DT01QQV9JTl9BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV80X0FVWF9NVVgxX0NPTVBBX0lOX0FVWElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzRfQVVYX01VWDFfQ09NUEFfSU5fQVVYSU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfNF9BVVhfTVVYMV9DT01QQV9JTl9BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV80X0FVWF9NVVgxX0NPTVBBX0lOX05DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfNF9BVVhfT19NVVgyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6M10gQURDQ09NUEJfSU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBWRERTICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFZTUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRENPVVBMICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVEVTVDEgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFURVNUMCAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTkMgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV80X0FVWF9NVVgyX0FEQ0NPTVBCX0lOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQURJXzRfQVVYX01VWDJfQURDQ09NUEJfSU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGOAorI2RlZmluZSBBRElfNF9BVVhfTVVYMl9BRENDT01QQl9JTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV80X0FVWF9NVVgyX0FEQ0NPTVBCX0lOX1ZERFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDJfQURDQ09NUEJfSU5fVlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfNF9BVVhfTVVYMl9BRENDT01QQl9JTl9EQ09VUEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV80X0FVWF9NVVgyX0FEQ0NPTVBCX0lOX0FURVNUMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDJfQURDQ09NUEJfSU5fQVRFU1QwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfNF9BVVhfTVVYMl9BRENDT01QQl9JTl9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFsyOjBdIENPTVBCX1JFRgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIFZERFMgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gVlNTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBEQ09VUEwgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE5DICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfNF9BVVhfTVVYMl9DT01QQl9SRUZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV80X0FVWF9NVVgyX0NPTVBCX1JFRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzRfQVVYX01VWDJfQ09NUEJfUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfNF9BVVhfTVVYMl9DT01QQl9SRUZfVkREUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV80X0FVWF9NVVgyX0NPTVBCX1JFRl9WU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzRfQVVYX01VWDJfQ09NUEJfUkVGX0RDT1VQTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfNF9BVVhfTVVYMl9DT01QQl9SRUZfTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzRfQVVYX09fTVVYMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIEFEQ0NPTVBCX0lOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gQVVYSU8wICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzEgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPMiAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU8zICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzQgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPNSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU82ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzcgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE5DICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfNF9BVVhfTVVYM19BRENDT01QQl9JTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFESV80X0FVWF9NVVgzX0FEQ0NPTVBCX0lOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQURJXzRfQVVYX01VWDNfQURDQ09NUEJfSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfNF9BVVhfTVVYM19BRENDT01QQl9JTl9BVVhJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV80X0FVWF9NVVgzX0FEQ0NPTVBCX0lOX0FVWElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDNfQURDQ09NUEJfSU5fQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfNF9BVVhfTVVYM19BRENDT01QQl9JTl9BVVhJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV80X0FVWF9NVVgzX0FEQ0NPTVBCX0lOX0FVWElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzRfQVVYX01VWDNfQURDQ09NUEJfSU5fQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfNF9BVVhfTVVYM19BRENDT01QQl9JTl9BVVhJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV80X0FVWF9NVVgzX0FEQ0NPTVBCX0lOX0FVWElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzRfQVVYX01VWDNfQURDQ09NUEJfSU5fTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV80X0FVWF9PX0lTUkMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzoyXSBUUklNCisvLworLy8gQWRqdXN0IGN1cnJlbnQgZnJvbSBjdXJyZW50IHNvdXJjZS4KKy8vCisvLyBPdXRwdXQgY3VycmVudHMgbWF5IGJlIGNvbWJpbmVkIHRvIGdldCBkZXNpcmVkIHRvdGFsIGN1cnJlbnQuCisvLyBFTlVNczoKKy8vIDExUDc1VSAgICAgICAgICAgICAgICAgICAxMS43NSB1QQorLy8gNFA1VSAgICAgICAgICAgICAgICAgICAgIDQuNSB1QQorLy8gMlAwVSAgICAgICAgICAgICAgICAgICAgIDIuMCB1QQorLy8gMVAwVSAgICAgICAgICAgICAgICAgICAgIDEuMCB1QQorLy8gMFA1VSAgICAgICAgICAgICAgICAgICAgIDAuNSB1QQorLy8gMFAyNVUgICAgICAgICAgICAgICAgICAgIDAuMjUgdUEKKy8vIE5DICAgICAgICAgICAgICAgICAgICAgICBObyBjdXJyZW50IGNvbm5lY3RlZAorI2RlZmluZSBBRElfNF9BVVhfSVNSQ19UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFESV80X0FVWF9JU1JDX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkMKKyNkZWZpbmUgQURJXzRfQVVYX0lTUkNfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfNF9BVVhfSVNSQ19UUklNXzExUDc1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV80X0FVWF9JU1JDX1RSSU1fNFA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzRfQVVYX0lTUkNfVFJJTV8yUDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfNF9BVVhfSVNSQ19UUklNXzFQMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV80X0FVWF9JU1JDX1RSSU1fMFA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzRfQVVYX0lTUkNfVFJJTV8wUDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfNF9BVVhfSVNSQ19UUklNX05DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gQ3VycmVudCBzb3VyY2UgZW5hYmxlCisjZGVmaW5lIEFESV80X0FVWF9JU1JDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzRfQVVYX0lTUkNfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfNF9BVVhfSVNSQ19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzRfQVVYX09fQ09NUAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzddIENPTVBBX1JFRl9SRVNfRU4KKy8vCisvLyBFbmFibGVzIDQwMGtvaG0gcmVzaXN0YW5jZSBmcm9tIENPTVBBIHJlZmVyZW5jZSBub2RlIHRvIGdyb3VuZC4gVXNlZCB3aXRoCisvLyBDT01QQV9SRUZfQ1VSUl9FTiB0byBnZW5lcmF0ZSB2b2x0YWdlIHJlZmVyZW5jZSBmb3IgY2FwLXNlbnNlLgorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQV9SRUZfUkVTX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBBX1JFRl9SRVNfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEFfUkVGX1JFU19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBDT01QQV9SRUZfQ1VSUl9FTgorLy8KKy8vIEVuYWJsZXMgMnVBIElQVEFUIGN1cnJlbnQgZnJvbSBJU1JDIHRvIENPTVBBIHJlZmVyZW5jZSBub2RlLiBSZXF1aXJlcworLy8gSVNSQy5FTiA9IDEuIFVzZWQgd2l0aCBDT01QQV9SRUZfUkVTX0VOIHRvIGdlbmVyYXRlIHZvbHRhZ2UgcmVmZXJlbmNlIGZvcgorLy8gY2FwLXNlbnNlLgorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQV9SRUZfQ1VSUl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBBX1JFRl9DVVJSX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEFfUkVGX0NVUlJfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTozXSBDT01QQl9UUklNCisvLworLy8gQ09NUEIgdm9sdGFnZSByZWZlcmVuY2UgdHJpbSB0ZW1wZXJhdHVyZSBjb2RlZDoKKy8vIEVOVU1zOgorLy8gRElWNCAgICAgICAgICAgICAgICAgICAgIERpdmlkZSByZWZlcmVuY2UgYnkgNAorLy8gRElWMyAgICAgICAgICAgICAgICAgICAgIERpdmlkZSByZWZlcmVuY2UgYnkgMworLy8gRElWMiAgICAgICAgICAgICAgICAgICAgIERpdmlkZSByZWZlcmVuY2UgYnkgMgorLy8gRElWMSAgICAgICAgICAgICAgICAgICAgIE5vIHJlZmVyZW5jZSBkaXZpc2lvbgorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQl9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBCX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEJfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQl9UUklNX0RJVjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBCX1RSSU1fRElWMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEJfVFJJTV9ESVYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQl9UUklNX0RJVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzJdIENPTVBCX0VOCisvLworLy8gQ29tcGFyYXRvciBCIGVuYWJsZQorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBCX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEJfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFswXSBDT01QQV9FTgorLy8KKy8vIENPTVBBIGVuYWJsZQorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBBX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV80X0FVWF9PX01VWDQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBDT01QQV9SRUYKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBBVVhJTzAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPMSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU8yICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzMgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPNCAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU81ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzYgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPNyAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTkMgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV80X0FVWF9NVVg0X0NPTVBBX1JFRl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQURJXzRfQVVYX01VWDRfQ09NUEFfUkVGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBBRElfNF9BVVhfTVVYNF9DT01QQV9SRUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV80X0FVWF9NVVg0X0NPTVBBX1JFRl9BVVhJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDRfQ09NUEFfUkVGX0FVWElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfNF9BVVhfTVVYNF9DT01QQV9SRUZfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV80X0FVWF9NVVg0X0NPTVBBX1JFRl9BVVhJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDRfQ09NUEFfUkVGX0FVWElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfNF9BVVhfTVVYNF9DT01QQV9SRUZfQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV80X0FVWF9NVVg0X0NPTVBBX1JFRl9BVVhJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzRfQVVYX01VWDRfQ09NUEFfUkVGX0FVWElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfNF9BVVhfTVVYNF9DT01QQV9SRUZfTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzRfQVVYX09fQURDMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzddIFNNUExfTU9ERQorLy8KKy8vIEFEQyBTYW1wbGluZyBtb2RlOgorLy8KKy8vIDA6IFN5bmNocm9ub3VzIG1vZGUKKy8vIDE6IEFzeW5jaHJvbm91cyBtb2RlCisvLworLy8gVGhlIEFEQyBkb2VzIGEgc2FtcGxlLWFuZC1ob2xkIGJlZm9yZSBjb252ZXJzaW9uLiBJbiBzeW5jaHJvbm91cyBtb2RlIHRoZQorLy8gc2FtcGxpbmcgc3RhcnRzIHdoZW4gdGhlIEFEQyBjbG9jayBkZXRlY3RzIGEgcmlzaW5nIGVkZ2Ugb24gdGhlIHRyaWdnZXIKKy8vIHNpZ25hbC4gSml0dGVyL3VuY2VydGFpbnR5IHdpbGwgYmUgaW5mZXJyZWQgaW4gdGhlIGRldGVjdGlvbiBpZiB0aGUgdHJpZ2dlcgorLy8gc2lnbmFsIG9yaWdpbmF0ZXMgZnJvbSBhIGRvbWFpbiB0aGF0IGlzIGFzeW5jaHJvbm91cyB0byB0aGUgQURDIGNsb2NrLgorLy8gU01QTF9DWUNMRV9FWFAgIGRldGVybWluZXMgdGhlIHRoZSBkdXJhdGlvbiBvZiBzYW1wbGluZy4KKy8vIENvbnZlcnNpb24gc3RhcnRzIGltbWVkaWF0ZWx5IGFmdGVyIHNhbXBsaW5nIGVuZHMuCisvLworLy8gSW4gYXN5bmNocm9ub3VzIG1vZGUgdGhlIHNhbXBsaW5nIGlzIGNvbnRpbnVvdXMgd2hlbiBlbmFibGVkLiBTYW1wbGluZyBlbmRzCisvLyBhbmQgY29udmVyc2lvbiBzdGFydHMgaW1tZWRpYXRlbHkgd2l0aCB0aGUgcmlzaW5nIGVkZ2Ugb2YgdGhlIHRyaWdnZXIKKy8vIHNpZ25hbC4gU2FtcGxpbmcgcmVzdGFydHMgd2hlbiB0aGUgY29udmVyc2lvbiBoYXMgZmluaXNoZWQuCisvLyBBc3luY2hyb25vdXMgbW9kZSBpcyB1c2VmdWwgd2hlbiBpdCBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgaml0dGVyIGluIHRoZQorLy8gc2FtcGxpbmcgaW5zdGFudCBvZiBhbiBleHRlcm5hbGx5IGRyaXZlbiBzaWduYWwKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgWzY6M10gU01QTF9DWUNMRV9FWFAKKy8vCisvLyBDb250cm9scyB0aGUgc2FtcGxpbmcgZHVyYXRpb24gYmVmb3JlIGNvbnZlcnNpb24gd2hlbiB0aGUgQURDIGlzIG9wZXJhdGVkIGluCisvLyBzeW5jaHJvbm91cyBtb2RlIChTTVBMX01PREUgPSAwKS4gVGhlIHNldHRpbmcgaGFzIG5vIGVmZmVjdCBpbiBhc3luY2hyb25vdXMKKy8vIG1vZGUuIFRoZSBzYW1wbGluZyBkdXJhdGlvbiBpcyBnaXZlbiBhcyAyXihTTVBMX0NZQ0xFX0VYUCArIDEpIC8gNiB1cy4KKy8vIEVOVU1zOgorLy8gMTBQOV9NUyAgICAgICAgICAgICAgICAgIDY1NTM2eCA2IE1IeiBjbG9jayBwZXJpb2RzID0gMTAuOW1zCisvLyA1UDQ2X01TICAgICAgICAgICAgICAgICAgMzI3Njh4IDYgTUh6IGNsb2NrIHBlcmlvZHMgPSA1LjQ2bXMKKy8vIDJQNzNfTVMgICAgICAgICAgICAgICAgICAxNjM4NHggNiBNSHogY2xvY2sgcGVyaW9kcyA9IDIuNzNtcworLy8gMVAzN19NUyAgICAgICAgICAgICAgICAgIDgxOTJ4IDYgTUh6IGNsb2NrIHBlcmlvZHMgPSAxLjM3bXMKKy8vIDY4Ml9VUyAgICAgICAgICAgICAgICAgICA0MDk2eCA2IE1IeiBjbG9jayBwZXJpb2RzID0gNjgydXMKKy8vIDM0MV9VUyAgICAgICAgICAgICAgICAgICAyMDQ4eCA2IE1IeiBjbG9jayBwZXJpb2RzID0gMzQxdXMKKy8vIDE3MF9VUyAgICAgICAgICAgICAgICAgICAxMDI0eCA2IE1IeiBjbG9jayBwZXJpb2RzID0gMTcwdXMKKy8vIDg1UDNfVVMgICAgICAgICAgICAgICAgICA1MTJ4IDYgTUh6IGNsb2NrIHBlcmlvZHMgPSA4NS4zdXMKKy8vIDQyUDZfVVMgICAgICAgICAgICAgICAgICAyNTZ4IDYgTUh6IGNsb2NrIHBlcmlvZHMgPSA0Mi42dXMKKy8vIDIxUDNfVVMgICAgICAgICAgICAgICAgICAxMjh4IDYgTUh6IGNsb2NrIHBlcmlvZHMgPSAyMS4zdXMKKy8vIDEwUDZfVVMgICAgICAgICAgICAgICAgICA2NHggNiBNSHogY2xvY2sgcGVyaW9kcyA9IDEwLjZ1cworLy8gNVAzX1VTICAgICAgICAgICAgICAgICAgIDMyeCA2IE1IeiBjbG9jayBwZXJpb2RzID0gNS4zdXMKKy8vIDJQN19VUyAgICAgICAgICAgICAgICAgICAxNnggNiBNSHogY2xvY2sgcGVyaW9kcyA9IDIuN3VzCisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX0NZQ0xFX0VYUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQXzEwUDlfTVMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfNVA0Nl9NUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX0NZQ0xFX0VYUF8yUDczX01TICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY4CisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQXzFQMzdfTVMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfNjgyX1VTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX0NZQ0xFX0VYUF8zNDFfVVMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQXzE3MF9VUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfODVQM19VUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX0NZQ0xFX0VYUF80MlA2X1VTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQXzIxUDNfVVMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfMTBQNl9VUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX0NZQ0xFX0VYUF81UDNfVVMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQXzJQN19VUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gRmllbGQ6ICAgICBbMV0gUkVTRVRfTgorLy8KKy8vIFJlc2V0IEFEQyBkaWdpdGFsIHN1YmNoaXAsIGFjdGl2ZSBsb3cuIEFEQyBtdXN0IGJlIHJlc2V0IGV2ZXJ5IHRpbWUgaXQgaXMKKy8vIHJlY29uZmlndXJlZC4KKy8vCisvLyAwOiBSZXNldAorLy8gMTogTm9ybWFsIG9wZXJhdGlvbgorI2RlZmluZSBBRElfNF9BVVhfQURDMF9SRVNFVF9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV80X0FVWF9BREMwX1JFU0VUX05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfUkVTRVRfTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIEFEQyBFbmFibGUKKy8vCisvLyAwOiBEaXNhYmxlCisvLyAxOiBFbmFibGUKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfNF9BVVhfQURDMF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV80X0FVWF9BREMwX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfNF9BVVhfT19BREMxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU0NBTEVfRElTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzRfQVVYX0FEQzFfU0NBTEVfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfNF9BVVhfQURDMV9TQ0FMRV9ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV80X0FVWF9BREMxX1NDQUxFX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfNF9BVVhfT19BRENSRUYwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNl0gUkVGX09OX0lETEUKKy8vCisvLyBLZWVwIEFEQ1JFRiBwb3dlcmVkIHVwIGluIElETEUgc3RhdGUgd2hlbiBBREMwLlNNUExfTU9ERSA9IDAuCisvLworLy8gU2V0IHRvIDEgaWYgQURDMC5TTVBMX0NZQ0xFX0VYUCBpcyBsZXNzIHRoYW4gNiAoMjEuM3VzIHNhbXBsaW5nIHRpbWUpCisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYwX1JFRl9PTl9JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjBfUkVGX09OX0lETEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMF9SRUZfT05fSURMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIElPTVVYCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjBfSU9NVVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMF9JT01VWF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYwX0lPTVVYX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gRVhUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjBfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMF9FWFRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYwX0VYVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gU1JDCisvLworLy8gQURDIHJlZmVyZW5jZSBzb3VyY2U6CisvLworLy8gMDogRml4ZWQgcmVmZXJlbmNlID0gNC4zVgorLy8gMTogUmVsYXRpdmUgcmVmZXJlbmNlID0gVkREUworI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMF9TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYwX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjBfU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIEFEQyByZWZlcmVuY2UgbW9kdWxlIGVuYWJsZToKKy8vCisvLyAwOiBBREMgcmVmZXJlbmNlIG1vZHVsZSBwb3dlcmVkIGRvd24KKy8vIDE6IEFEQyByZWZlcmVuY2UgbW9kdWxlIGVuYWJsZWQKKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYwX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfNF9BVVhfT19BRENSRUYxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzU6MF0gVlRSSU0KKy8vCisvLyBUcmltIG91dHB1dCB2b2x0YWdlIG9mIEFEQyBmaXhlZCByZWZlcmVuY2UgKDY0IHN0ZXBzLCAyJ3MgY29tcGxlbWVudCkuCisvLyBBcHBsaWVzIG9ubHkgZm9yIEFEQ1JFRjAuU1JDID0gMC4KKy8vCisvLyBFeGFtcGxlczoKKy8vIDB4MDAgLSBub21pbmFsIHZvbHRhZ2UgMS40M1YKKy8vIDB4MDEgLSBub21pbmFsICsgMC40JSAxLjQzNVYKKy8vIDB4M0YgLSBub21pbmFsIC0gMC40JSAxLjQyNVYKKy8vIDB4MUYgLSBtYXhpbXVtIHZvbHRhZ2UgMS42VgorLy8gMHgyMCAtIG1pbmltdW0gdm9sdGFnZSAxLjNWCisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYxX1ZUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjFfVlRSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMV9WVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQURJXzRfQVVYX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl9iYXRtb24uaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl9iYXRtb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTE5MTJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX2JhdG1vbi5oCkBAIC0wLDAgKzEsMzQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYW9uX2JhdG1vbl9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19BT05fQkFUTU9OX0hfXworI2RlZmluZSBfX0hXX0FPTl9CQVRNT05fSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQU9OX0JBVE1PTiBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBJbnRlcm5hbAorI2RlZmluZSBBT05fQkFUTU9OX09fQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFPTl9CQVRNT05fT19NRUFTQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQU9OX0JBVE1PTl9PX1RFTVBQMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBBT05fQkFUTU9OX09fVEVNUFAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFPTl9CQVRNT05fT19URU1QUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQU9OX0JBVE1PTl9PX0JBVE1PTlAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBT05fQkFUTU9OX09fQkFUTU9OUDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFPTl9CQVRNT05fT19JT1NUUlAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQU9OX0JBVE1PTl9PX0ZMQVNIUFVNUFAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBMYXN0IE1lYXN1cmVkIEJhdHRlcnkgVm9sdGFnZQorI2RlZmluZSBBT05fQkFUTU9OX09fQkFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIEJhdHRlcnkgVXBkYXRlCisjZGVmaW5lIEFPTl9CQVRNT05fT19CQVRVUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8gVGVtcGVyYXR1cmUKKyNkZWZpbmUgQU9OX0JBVE1PTl9PX1RFTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorCisvLyBUZW1wZXJhdHVyZSBVcGRhdGUKKyNkZWZpbmUgQU9OX0JBVE1PTl9PX1RFTVBVUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9CQVRNT05fT19DVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBDQUxDX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0JBVE1PTl9DVExfQ0FMQ19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fQkFUTU9OX0NUTF9DQUxDX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFPTl9CQVRNT05fQ1RMX0NBTENfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OX0JBVE1PTl9DVExfQ0FMQ19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBNRUFTX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0JBVE1PTl9DVExfTUVBU19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fQkFUTU9OX0NUTF9NRUFTX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9CQVRNT05fQ1RMX01FQVNfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX0JBVE1PTl9DVExfTUVBU19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9CQVRNT05fT19NRUFTQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzE6MF0gUEVSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gMzJDWUMgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyAxNkNZQyAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIDhDWUMgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQ09OVCAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9CQVRNT05fTUVBU0NGR19QRVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQU9OX0JBVE1PTl9NRUFTQ0ZHX1BFUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBT05fQkFUTU9OX01FQVNDRkdfUEVSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9CQVRNT05fTUVBU0NGR19QRVJfMzJDWUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQU9OX0JBVE1PTl9NRUFTQ0ZHX1BFUl8xNkNZQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fQkFUTU9OX01FQVNDRkdfUEVSXzhDWUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9CQVRNT05fTUVBU0NGR19QRVJfQ09OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fQkFUTU9OX09fVEVNUFAwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gQ0ZHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0JBVE1PTl9URU1QUDBfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fQkFUTU9OX1RFTVBQMF9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFPTl9CQVRNT05fVEVNUFAwX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fQkFUTU9OX09fVEVNUFAxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzU6MF0gQ0ZHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0JBVE1PTl9URU1QUDFfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBT05fQkFUTU9OX1RFTVBQMV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFPTl9CQVRNT05fVEVNUFAxX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fQkFUTU9OX09fVEVNUFAyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzQ6MF0gQ0ZHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0JBVE1PTl9URU1QUDJfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBT05fQkFUTU9OX1RFTVBQMl9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFPTl9CQVRNT05fVEVNUFAyX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fQkFUTU9OX09fQkFUTU9OUDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNTowXSBDRkcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fQkFUTU9OX0JBVE1PTlAwX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFPTl9CQVRNT05fQkFUTU9OUDBfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVRNT05QMF9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9CQVRNT05fT19CQVRNT05QMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjBdIENGRworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9CQVRNT05fQkFUTU9OUDFfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVRNT05QMV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBT05fQkFUTU9OX0JBVE1PTlAxX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0JBVE1PTl9PX0lPU1RSUDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNTo0XSBDRkcyCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0JBVE1PTl9JT1NUUlAwX0NGRzJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBT05fQkFUTU9OX0lPU1RSUDBfQ0ZHMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEFPTl9CQVRNT05fSU9TVFJQMF9DRkcyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gQ0ZHMQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9CQVRNT05fSU9TVFJQMF9DRkcxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQU9OX0JBVE1PTl9JT1NUUlAwX0NGRzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBT05fQkFUTU9OX0lPU1RSUDBfQ0ZHMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0JBVE1PTl9PX0ZMQVNIUFVNUFAwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOF0gRkFMTEIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX0ZBTExCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfRkFMTEJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9GQUxMQl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX0ZBTExCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjZdIEhJR0hMSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX0hJR0hMSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfSElHSExJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAKKyNkZWZpbmUgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9ISUdITElNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBMT1dMSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX0xPV0xJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfTE9XTElNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9MT1dMSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX0xPV0xJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIE9WUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfT1ZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9PVlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX09WUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfT1ZSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gQ0ZHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fQkFUTU9OX09fQkFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTA6OF0gSU5UCisvLworLy8gSW50ZWdlciBwYXJ0OgorLy8KKy8vIDB4MDogMFYgKyBmcmFjdGlvbmFsIHBhcnQKKy8vIC4uLgorLy8gMHgzOiAzViArIGZyYWN0aW9uYWwgcGFydAorLy8gMHg0OiA0ViArIGZyYWN0aW9uYWwgcGFydAorI2RlZmluZSBBT05fQkFUTU9OX0JBVF9JTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFPTl9CQVRNT05fQkFUX0lOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVRfSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBGUkFDCisvLworLy8gRnJhY3Rpb25hbCBwYXJ0LCBzdGFuZGFyZCBiaW5hcnkgZnJhY3Rpb25hbCBlbmNvZGluZy4KKy8vCisvLyAweDAwOiAuMFYKKy8vIC4uLgorLy8gMHgyMDogMS84ID0gLjEyNVYKKy8vIDB4NDA6IDEvNCA9IC4yNVYKKy8vIDB4ODA6IDEvMiA9IC41VgorLy8gLi4uCisvLyAweEEwOiAxLzIgKyAxLzggPSAuNjI1VgorLy8gLi4uCisvLyAweEZGOiBNYXgKKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVRfRlJBQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fQkFUTU9OX0JBVF9GUkFDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFPTl9CQVRNT05fQkFUX0ZSQUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fQkFUTU9OX09fQkFUVVBECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vCisvLyAwOiBObyB1cGRhdGUgc2luY2UgbGFzdCBjbGVhcgorLy8gMTogTmV3IGJhdHRlcnkgdm9sdGFnZSBpcyBwcmVzZW50LgorLy8KKy8vIFdyaXRlIDEgdG8gY2xlYXIgdGhlIHN0YXR1cy4KKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVRVUERfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fQkFUTU9OX0JBVFVQRF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9CQVRNT05fQkFUVVBEX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVRVUERfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9CQVRNT05fT19URU1QCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTY6OF0gSU5UCisvLworLy8gSW50ZWdlciBwYXJ0IChzaWduZWQpIG9mIHRlbXBlcmF0dXJlIHZhbHVlLgorLy8gVG90YWwgdmFsdWUgPSBJTlRFR0VSICsgRlJBQ1RJT05BTAorLy8gMidzIGNvbXBsZW1lbnQgZW5jb2RpbmcKKy8vCisvLyAweDEwMDogTWluIHZhbHVlCisvLyAweDFEODogLTQwQworLy8gMHgxRkY6IC0xQworLy8gMHgwMDogMEMKKy8vIDB4MUI6IDI3QworLy8gMHg1NTogODVDCisvLyAweEZGOiBNYXggdmFsdWUKKyNkZWZpbmUgQU9OX0JBVE1PTl9URU1QX0lOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBBT05fQkFUTU9OX1RFTVBfSU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFGRjAwCisjZGVmaW5lIEFPTl9CQVRNT05fVEVNUF9JTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fQkFUTU9OX09fVEVNUFVQRAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLworLy8gMDogTm8gdXBkYXRlIHNpbmNlIGxhc3QgY2xlYXIKKy8vIDE6IE5ldyB0ZW1wZXJhdHVyZSBpcyBwcmVzZW50LgorLy8KKy8vIFdyaXRlIDEgdG8gY2xlYXIgdGhlIHN0YXR1cy4KKyNkZWZpbmUgQU9OX0JBVE1PTl9URU1QVVBEX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fQkFUTU9OX1RFTVBVUERfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9CQVRNT05fVEVNUFVQRF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX0JBVE1PTl9URU1QVVBEX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0FPTl9CQVRNT05fXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX2V2ZW50LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25fZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWQ3ZDIyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX2V2ZW50LmgKQEAgLTAsMCArMSwxNTMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYW9uX2V2ZW50X2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FPTl9FVkVOVF9IX18KKyNkZWZpbmUgX19IV19BT05fRVZFTlRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQU9OX0VWRU5UIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFdha2UtdXAgU2VsZWN0b3IgRm9yIE1DVQorI2RlZmluZSBBT05fRVZFTlRfT19NQ1VXVVNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIFdha2UtdXAgU2VsZWN0b3IgRm9yIEFVWAorI2RlZmluZSBBT05fRVZFTlRfT19BVVhXVVNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIEV2ZW50IFNlbGVjdG9yIEZvciBNQ1UgRXZlbnQgRmFicmljCisjZGVmaW5lIEFPTl9FVkVOVF9PX0VWVE9NQ1VTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gUlRDIENhcHR1cmUgRXZlbnQgU2VsZWN0b3IgRm9yIEFPTl9SVEMKKyNkZWZpbmUgQU9OX0VWRU5UX09fUlRDU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9FVkVOVF9PX01DVVdVU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyOToyNF0gV1UzX0VWCisvLworLy8gTUNVIFdha2V1cCBTb3VyY2UgIzMKKy8vCisvLyBBT04gRXZlbnQgU291cmNlIHNlbGVjdGluZyAxIG9mIDQgZXZlbnRzIHJvdXRlZCB0byBBT05fV1VDIGZvciB3YWtpbmcgdXAgdGhlCisvLyBNQ1UgZG9tYWluIGZyb20gUG93ZXIgT2ZmIG9yIFBvd2VyIERvd24uCisvLyBOb3RlOgorLy8gRU5VTXM6CisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIEFVWF9DT01QQl9BU1lOQ19OICAgICAgICBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gQVVYIENvbXBhcmF0b3IgQiAoaW52ZXJ0ZWQpIGFzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3NlZCB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYCisvLyBBVVhfQ09NUEJfQVNZTkMgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIgYXMgb3Bwb3NlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4gQVVYCisvLyBCQVRNT05fVk9MVCAgICAgICAgICAgICAgQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyBCQVRNT05fVEVNUCAgICAgICAgICAgICAgQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCBUaW1lciAxIEV2ZW50CisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDAgRXZlbnQKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkCisvLyBBVVhfU1dFVjIgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMi4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjIKKy8vIEFVWF9TV0VWMSAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMQorLy8gQVVYX1NXRVYwICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYwCisvLyBKVEFHICAgICAgICAgICAgICAgICAgICAgSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vIFJUQ19VUEQgICAgICAgICAgICAgICAgICBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vIFJUQ19DT01CX0RMWSAgICAgICAgICAgICBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8gUlRDX0NIMl9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gxX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDBfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMiAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgZXZlbnQKKy8vIFJUQ19DSDEgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIGV2ZW50CisvLyBSVENfQ0gwICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCBldmVudAorLy8gUEFEICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIGFueSBQQUQKKy8vIFBBRDMxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMQorLy8gUEFEMzAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMwCisvLyBQQUQyOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjkKKy8vIFBBRDI4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOAorLy8gUEFEMjcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI3CisvLyBQQUQyNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjYKKy8vIFBBRDI1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNQorLy8gUEFEMjQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI0CisvLyBQQUQyMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjMKKy8vIFBBRDIyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMgorLy8gUEFEMjEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIxCisvLyBQQUQyMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjAKKy8vIFBBRDE5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOQorLy8gUEFEMTggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE4CisvLyBQQUQxNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTcKKy8vIFBBRDE2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNgorLy8gUEFEMTUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE1CisvLyBQQUQxNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTQKKy8vIFBBRDEzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMworLy8gUEFEMTIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEyCisvLyBQQUQxMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTEKKy8vIFBBRDEwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMAorLy8gUEFEOSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDkKKy8vIFBBRDggICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ4CisvLyBQQUQ3ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENworLy8gUEFENiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDYKKy8vIFBBRDUgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ1CisvLyBQQUQ0ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENAorLy8gUEFEMyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMKKy8vIFBBRDIgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyCisvLyBQQUQxICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMQorLy8gUEFEMCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNGMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzRjAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX0FVWF9DT01QQl9BU1lOQ19OICAgICAgICAgICAgICAgICAweDM4MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfQVVYX0NPTVBCX0FTWU5DICAgICAgICAgICAgICAgICAgIDB4MzcwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9CQVRNT05fVk9MVCAgICAgICAgICAgICAgICAgICAgICAgMHgzNjAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX0JBVE1PTl9URU1QICAgICAgICAgICAgICAgICAgICAgICAweDM1MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgIDB4MzQwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgMHgzMzAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAweDMyMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgIDB4MzEwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAweDJGMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfQVVYX1NXRVYyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkUwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9BVVhfU1dFVjEgICAgICAgICAgICAgICAgICAgICAgICAgMHgyRDAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAweDJDMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfSlRBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkIwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQTAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1JUQ19DT01CX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDI5MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUlRDX0NIMl9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9SVENfQ0gxX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1JUQ19DSDBfRExZICAgICAgICAgICAgICAgICAgICAgICAweDI2MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9SVENfQ0gxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNDAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1JUQ19DSDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIzMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRjAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUQwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFCMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMzAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQTAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFENSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMjE6MTZdIFdVMl9FVgorLy8KKy8vIE1DVSBXYWtldXAgU291cmNlICMyCisvLworLy8gQU9OIEV2ZW50IFNvdXJjZSBzZWxlY3RpbmcgMSBvZiA0IGV2ZW50cyByb3V0ZWQgdG8gQU9OX1dVQyBmb3Igd2FraW5nIHVwIHRoZQorLy8gTUNVIGRvbWFpbiBmcm9tIFBvd2VyIE9mZiBvciBQb3dlciBEb3duLgorLy8gTm90ZToKKy8vIEVOVU1zOgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyBBVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIEFVWCBDb21wYXJhdG9yIEIgKGludmVydGVkKSBhcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9zZWQgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWAorLy8gQVVYX0NPTVBCX0FTWU5DICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCIGFzIG9wcG9zZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluIEFVWAorLy8gQkFUTU9OX1ZPTFQgICAgICAgICAgICAgIEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8gQkFUTU9OX1RFTVAgICAgICAgICAgICAgIEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggVGltZXIgMSBFdmVudAorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCBUaW1lciAwIEV2ZW50CisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBBIHRyaWdnZXJlZAorLy8gQVVYX1NXRVYyICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYyCisvLyBBVVhfU1dFVjEgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMS4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjEKKy8vIEFVWF9TV0VWMCAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMAorLy8gSlRBRyAgICAgICAgICAgICAgICAgICAgIEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyBSVENfVVBEICAgICAgICAgICAgICAgICAgUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyBSVENfQ09NQl9ETFkgICAgICAgICAgICAgUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDJfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMV9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gwX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDIgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIGV2ZW50CisvLyBSVENfQ0gxICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSBldmVudAorLy8gUlRDX0NIMCAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgZXZlbnQKKy8vIFBBRCAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBhbnkgUEFECisvLyBQQUQzMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzEKKy8vIFBBRDMwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMAorLy8gUEFEMjkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI5CisvLyBQQUQyOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjgKKy8vIFBBRDI3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNworLy8gUEFEMjYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI2CisvLyBQQUQyNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjUKKy8vIFBBRDI0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNAorLy8gUEFEMjMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIzCisvLyBQQUQyMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjIKKy8vIFBBRDIxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMQorLy8gUEFEMjAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIwCisvLyBQQUQxOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTkKKy8vIFBBRDE4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOAorLy8gUEFEMTcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE3CisvLyBQQUQxNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTYKKy8vIFBBRDE1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNQorLy8gUEFEMTQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE0CisvLyBQQUQxMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTMKKy8vIFBBRDEyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMgorLy8gUEFEMTEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDExCisvLyBQQUQxMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTAKKy8vIFBBRDkgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ5CisvLyBQQUQ4ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOAorLy8gUEFENyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDcKKy8vIFBBRDYgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ2CisvLyBQQUQ1ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENQorLy8gUEFENCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDQKKy8vIFBBRDMgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzCisvLyBQQUQyICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMgorLy8gUEFEMSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEKKy8vIFBBRDAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNGMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzRjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9BVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgICAgICAgICAgMHgwMDM4MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX0FVWF9DT01QQl9BU1lOQyAgICAgICAgICAgICAgICAgICAweDAwMzcwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfQkFUTU9OX1ZPTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzNjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9CQVRNT05fVEVNUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM1MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAweDAwMzQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgIDB4MDAzMzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDMyMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAweDAwMzEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJGMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX0FVWF9TV0VWMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMkUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfQVVYX1NXRVYxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyRDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9BVVhfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJDMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX0pUQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMkIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUlRDX1VQRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyQTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9SVENfQ09NQl9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDI5MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1JUQ19DSDJfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMjgwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUlRDX0NIMV9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyNzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9SVENfQ0gwX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDI2MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUlRDX0NIMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyNDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9SVENfQ0gwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIzMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxRjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFFMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxQzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFCMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxOTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE4MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTcwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE1MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEyMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA5MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFENyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFENCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogIFsxMzo4XSBXVTFfRVYKKy8vCisvLyBNQ1UgV2FrZXVwIFNvdXJjZSAjMQorLy8KKy8vIEFPTiBFdmVudCBTb3VyY2Ugc2VsZWN0aW5nIDEgb2YgNCBldmVudHMgcm91dGVkIHRvIEFPTl9XVUMgZm9yIHdha2luZyB1cCB0aGUKKy8vIE1DVSBkb21haW4gZnJvbSBQb3dlciBPZmYgb3IgUG93ZXIgRG93bi4KKy8vIE5vdGU6CisvLyBFTlVNczoKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBldmVudCwgYWx3YXlzIGxvdworLy8gQVVYX0NPTVBCX0FTWU5DX04gICAgICAgIENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSBBVVggQ29tcGFyYXRvciBCIChpbnZlcnRlZCkgYXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvcHBvc2VkIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVgKKy8vIEFVWF9DT01QQl9BU1lOQyAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQiBhcyBvcHBvc2VkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbiBBVVgKKy8vIEJBVE1PTl9WT0xUICAgICAgICAgICAgICBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vIEJBVE1PTl9URU1QICAgICAgICAgICAgICBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDEgRXZlbnQKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggVGltZXIgMCBFdmVudAorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZAorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQKKy8vIEFVWF9TV0VWMiAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMgorLy8gQVVYX1NXRVYxICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYxCisvLyBBVVhfU1dFVjAgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMC4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjAKKy8vIEpUQUcgICAgICAgICAgICAgICAgICAgICBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8gUlRDX1VQRCAgICAgICAgICAgICAgICAgIFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8gUlRDX0NPTUJfRExZICAgICAgICAgICAgIFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDFfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMF9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiBldmVudAorLy8gUlRDX0NIMSAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgZXZlbnQKKy8vIFJUQ19DSDAgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIGV2ZW50CisvLyBQQUQgICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gYW55IFBBRAorLy8gUEFEMzEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMxCisvLyBQQUQzMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzAKKy8vIFBBRDI5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOQorLy8gUEFEMjggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI4CisvLyBQQUQyNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjcKKy8vIFBBRDI2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNgorLy8gUEFEMjUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI1CisvLyBQQUQyNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjQKKy8vIFBBRDIzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMworLy8gUEFEMjIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIyCisvLyBQQUQyMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjEKKy8vIFBBRDIwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMAorLy8gUEFEMTkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE5CisvLyBQQUQxOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTgKKy8vIFBBRDE3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNworLy8gUEFEMTYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE2CisvLyBQQUQxNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTUKKy8vIFBBRDE0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNAorLy8gUEFEMTMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEzCisvLyBQQUQxMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTIKKy8vIFBBRDExICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMQorLy8gUEFEMTAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEwCisvLyBQQUQ5ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOQorLy8gUEFEOCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDgKKy8vIFBBRDcgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ3CisvLyBQQUQ2ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENgorLy8gUEFENSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDUKKy8vIFBBRDQgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ0CisvLyBQQUQzICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMworLy8gUEFEMiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIKKy8vIFBBRDEgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxCisvLyBQQUQwICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzRjAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfQVVYX0NPTVBCX0FTWU5DX04gICAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9BVVhfQ09NUEJfQVNZTkMgICAgICAgICAgICAgICAgICAgMHgwMDAwMzcwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX0JBVE1PTl9WT0xUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzNjAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfQkFUTU9OX1RFTVAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDM1MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzQwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMzAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMyMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzEwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDJGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9BVVhfU1dFVjIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMkUwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX0FVWF9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyRDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfQVVYX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDJDMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9KVEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMkIwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyQTAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUlRDX0NPTUJfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI5MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9SVENfQ0gyX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjgwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1JUQ19DSDFfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNzAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUlRDX0NIMF9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI2MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjUwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1JUQ19DSDEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUlRDX0NIMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIzMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFFMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUQwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQzAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFCMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUEwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxOTAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTcwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNjAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE1MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTQwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMzAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEyMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTEwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEUwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEIwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQTAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFENiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gV1UwX0VWCisvLworLy8gTUNVIFdha2V1cCBTb3VyY2UgIzAKKy8vCisvLyBBT04gRXZlbnQgU291cmNlIHNlbGVjdGluZyAxIG9mIDQgZXZlbnRzIHJvdXRlZCB0byBBT05fV1VDIGZvciB3YWtpbmcgdXAgdGhlCisvLyBNQ1UgZG9tYWluIGZyb20gUG93ZXIgT2ZmIG9yIFBvd2VyIERvd24uCisvLyBOb3RlOgorLy8gRU5VTXM6CisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIEFVWF9DT01QQl9BU1lOQ19OICAgICAgICBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gQVVYIENvbXBhcmF0b3IgQiAoaW52ZXJ0ZWQpIGFzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3NlZCB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYCisvLyBBVVhfQ09NUEJfQVNZTkMgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIgYXMgb3Bwb3NlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4gQVVYCisvLyBCQVRNT05fVk9MVCAgICAgICAgICAgICAgQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyBCQVRNT05fVEVNUCAgICAgICAgICAgICAgQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCBUaW1lciAxIEV2ZW50CisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDAgRXZlbnQKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkCisvLyBBVVhfU1dFVjIgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMi4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjIKKy8vIEFVWF9TV0VWMSAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMQorLy8gQVVYX1NXRVYwICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYwCisvLyBKVEFHICAgICAgICAgICAgICAgICAgICAgSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vIFJUQ19VUEQgICAgICAgICAgICAgICAgICBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vIFJUQ19DT01CX0RMWSAgICAgICAgICAgICBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8gUlRDX0NIMl9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gxX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDBfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMiAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgZXZlbnQKKy8vIFJUQ19DSDEgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIGV2ZW50CisvLyBSVENfQ0gwICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCBldmVudAorLy8gUEFEICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIGFueSBQQUQKKy8vIFBBRDMxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMQorLy8gUEFEMzAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMwCisvLyBQQUQyOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjkKKy8vIFBBRDI4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOAorLy8gUEFEMjcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI3CisvLyBQQUQyNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjYKKy8vIFBBRDI1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNQorLy8gUEFEMjQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI0CisvLyBQQUQyMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjMKKy8vIFBBRDIyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMgorLy8gUEFEMjEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIxCisvLyBQQUQyMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjAKKy8vIFBBRDE5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOQorLy8gUEFEMTggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE4CisvLyBQQUQxNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTcKKy8vIFBBRDE2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNgorLy8gUEFEMTUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE1CisvLyBQQUQxNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTQKKy8vIFBBRDEzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMworLy8gUEFEMTIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEyCisvLyBQQUQxMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTEKKy8vIFBBRDEwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMAorLy8gUEFEOSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDkKKy8vIFBBRDggICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ4CisvLyBQQUQ3ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENworLy8gUEFENiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDYKKy8vIFBBRDUgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ1CisvLyBQQUQ0ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENAorLy8gUEFEMyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMKKy8vIFBBRDIgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyCisvLyBQQUQxICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMQorLy8gUEFEMCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX0FVWF9DT01QQl9BU1lOQ19OICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfQVVYX0NPTVBCX0FTWU5DICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9CQVRNT05fVk9MVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX0JBVE1PTl9URU1QICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfQVVYX1NXRVYyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9BVVhfU1dFVjEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfSlRBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkIKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQQorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1JUQ19DT01CX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUlRDX0NIMl9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9SVENfQ0gxX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1JUQ19DSDBfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9SVENfQ0gxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1JUQ19DSDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFENSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0VWRU5UX09fQVVYV1VTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzIxOjE2XSBXVTJfRVYKKy8vCisvLyBBVVggV2FrZXVwIFNvdXJjZSAjMgorLy8KKy8vIEFPTiBFdmVudCBTb3VyY2Ugc2VsZWN0aW5nIDEgb2YgMyBldmVudHMgcm91dGVkIHRvIEFPTl9XVUMgZm9yIHdha2luZyB1cCB0aGUKKy8vIEFVWCBkb21haW4gZnJvbSBQb3dlciBPZmYgb3IgUG93ZXIgRG93bi4KKy8vIE5vdGU6CisvLyBFTlVNczoKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBldmVudCwgYWx3YXlzIGxvdworLy8gQVVYX0NPTVBCX0FTWU5DX04gICAgICAgIENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSBBVVggQ29tcGFyYXRvciBCIChpbnZlcnRlZCkgYXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvcHBvc2VkIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVgKKy8vIEFVWF9DT01QQl9BU1lOQyAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQiBhcyBvcHBvc2VkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbiBBVVgKKy8vIEJBVE1PTl9WT0xUICAgICAgICAgICAgICBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vIEJBVE1PTl9URU1QICAgICAgICAgICAgICBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDEgRXZlbnQKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggVGltZXIgMCBFdmVudAorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZAorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQKKy8vIEFVWF9TV0VWMiAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMgorLy8gQVVYX1NXRVYxICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYxCisvLyBBVVhfU1dFVjAgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMC4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjAKKy8vIEpUQUcgICAgICAgICAgICAgICAgICAgICBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8gUlRDX1VQRCAgICAgICAgICAgICAgICAgIFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8gUlRDX0NPTUJfRExZICAgICAgICAgICAgIFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDFfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMF9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiBldmVudAorLy8gUlRDX0NIMSAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgZXZlbnQKKy8vIFJUQ19DSDAgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIGV2ZW50CisvLyBQQUQgICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gYW55IFBBRAorLy8gUEFEMzEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMxCisvLyBQQUQzMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzAKKy8vIFBBRDI5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOQorLy8gUEFEMjggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI4CisvLyBQQUQyNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjcKKy8vIFBBRDI2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNgorLy8gUEFEMjUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI1CisvLyBQQUQyNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjQKKy8vIFBBRDIzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMworLy8gUEFEMjIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIyCisvLyBQQUQyMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjEKKy8vIFBBRDIwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMAorLy8gUEFEMTkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE5CisvLyBQQUQxOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTgKKy8vIFBBRDE3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNworLy8gUEFEMTYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE2CisvLyBQQUQxNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTUKKy8vIFBBRDE0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNAorLy8gUEFEMTMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEzCisvLyBQQUQxMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTIKKy8vIFBBRDExICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMQorLy8gUEFEMTAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEwCisvLyBQQUQ5ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOQorLy8gUEFEOCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDgKKy8vIFBBRDcgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ3CisvLyBQQUQ2ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENgorLy8gUEFENSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDUKKy8vIFBBRDQgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ0CisvLyBQQUQzICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMworLy8gUEFEMiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIKKy8vIFBBRDEgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxCisvLyBQQUQwICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzRjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM0YwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfQVVYX0NPTVBCX0FTWU5DX04gICAgICAgICAgICAgICAgIDB4MDAzODAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9BVVhfQ09NUEJfQVNZTkMgICAgICAgICAgICAgICAgICAgMHgwMDM3MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX0JBVE1PTl9WT0xUICAgICAgICAgICAgICAgICAgICAgICAweDAwMzYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfQkFUTU9OX1RFTVAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzNTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgMHgwMDM0MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAweDAwMzMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDMxMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyRjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9BVVhfU1dFVjIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJFMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX0FVWF9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMkQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfQVVYX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyQzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9KVEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJCMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMkEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUlRDX0NPTUJfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAyOTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9SVENfQ0gyX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDI4MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1JUQ19DSDFfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMjcwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUlRDX0NIMF9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyNjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDI1MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1JUQ19DSDEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUlRDX0NIMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxRTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFEMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxQjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFBMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTkwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxODAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE3MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE0MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDExMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBCMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDcwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFENiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICBbMTM6OF0gV1UxX0VWCisvLworLy8gQVVYIFdha2V1cCBTb3VyY2UgIzEKKy8vCisvLyBBT04gRXZlbnQgU291cmNlIHNlbGVjdGluZyAxIG9mIDMgZXZlbnRzIHJvdXRlZCB0byBBT05fV1VDIGZvciB3YWtpbmcgdXAgdGhlCisvLyBBVVggZG9tYWluIGZyb20gUG93ZXIgT2ZmIG9yIFBvd2VyIERvd24uCisvLyBOb3RlOgorLy8gRU5VTXM6CisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIEFVWF9DT01QQl9BU1lOQ19OICAgICAgICBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gQVVYIENvbXBhcmF0b3IgQiAoaW52ZXJ0ZWQpIGFzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3NlZCB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYCisvLyBBVVhfQ09NUEJfQVNZTkMgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIgYXMgb3Bwb3NlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4gQVVYCisvLyBCQVRNT05fVk9MVCAgICAgICAgICAgICAgQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyBCQVRNT05fVEVNUCAgICAgICAgICAgICAgQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCBUaW1lciAxIEV2ZW50CisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDAgRXZlbnQKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkCisvLyBBVVhfU1dFVjIgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMi4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjIKKy8vIEFVWF9TV0VWMSAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMQorLy8gQVVYX1NXRVYwICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYwCisvLyBKVEFHICAgICAgICAgICAgICAgICAgICAgSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vIFJUQ19VUEQgICAgICAgICAgICAgICAgICBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vIFJUQ19DT01CX0RMWSAgICAgICAgICAgICBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8gUlRDX0NIMl9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gxX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDBfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMiAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgZXZlbnQKKy8vIFJUQ19DSDEgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIGV2ZW50CisvLyBSVENfQ0gwICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCBldmVudAorLy8gUEFEICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIGFueSBQQUQKKy8vIFBBRDMxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMQorLy8gUEFEMzAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMwCisvLyBQQUQyOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjkKKy8vIFBBRDI4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOAorLy8gUEFEMjcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI3CisvLyBQQUQyNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjYKKy8vIFBBRDI1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNQorLy8gUEFEMjQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI0CisvLyBQQUQyMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjMKKy8vIFBBRDIyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMgorLy8gUEFEMjEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIxCisvLyBQQUQyMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjAKKy8vIFBBRDE5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOQorLy8gUEFEMTggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE4CisvLyBQQUQxNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTcKKy8vIFBBRDE2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNgorLy8gUEFEMTUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE1CisvLyBQQUQxNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTQKKy8vIFBBRDEzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMworLy8gUEFEMTIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEyCisvLyBQQUQxMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTEKKy8vIFBBRDEwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMAorLy8gUEFEOSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDkKKy8vIFBBRDggICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ4CisvLyBQQUQ3ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENworLy8gUEFENiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDYKKy8vIFBBRDUgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ1CisvLyBQQUQ0ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENAorLy8gUEFEMyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMKKy8vIFBBRDIgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyCisvLyBQQUQxICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMQorLy8gUEFEMCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzRjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM0YwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX0FVWF9DT01QQl9BU1lOQ19OICAgICAgICAgICAgICAgICAweDAwMDAzODAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfQVVYX0NPTVBCX0FTWU5DICAgICAgICAgICAgICAgICAgIDB4MDAwMDM3MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9CQVRNT05fVk9MVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzYwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX0JBVE1PTl9URU1QICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzNTAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDM0MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzMwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMxMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyRjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfQVVYX1NXRVYyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDJFMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9BVVhfU1dFVjEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMkQwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyQzAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfSlRBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDJCMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMkEwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1JUQ19DT01CX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyOTAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUlRDX0NIMl9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI4MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9SVENfQ0gxX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjcwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1JUQ19DSDBfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI1MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9SVENfQ0gxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjQwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1JUQ19DSDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMzAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUYwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRTAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFEMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUMwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFBMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTkwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxODAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE3MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTYwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNTAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE0MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTMwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDExMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBFMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBCMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEEwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwOTAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFENSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFdVMF9FVgorLy8KKy8vIEFVWCBXYWtldXAgU291cmNlICMwCisvLworLy8gQU9OIEV2ZW50IFNvdXJjZSBzZWxlY3RpbmcgMSBvZiAzIGV2ZW50cyByb3V0ZWQgdG8gQU9OX1dVQyBmb3Igd2FraW5nIHVwIHRoZQorLy8gQVVYIGRvbWFpbiBmcm9tIFBvd2VyIE9mZiBvciBQb3dlciBEb3duLgorLy8gTm90ZToKKy8vIEVOVU1zOgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyBBVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIEFVWCBDb21wYXJhdG9yIEIgKGludmVydGVkKSBhcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9zZWQgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWAorLy8gQVVYX0NPTVBCX0FTWU5DICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCIGFzIG9wcG9zZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluIEFVWAorLy8gQkFUTU9OX1ZPTFQgICAgICAgICAgICAgIEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8gQkFUTU9OX1RFTVAgICAgICAgICAgICAgIEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggVGltZXIgMSBFdmVudAorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCBUaW1lciAwIEV2ZW50CisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBBIHRyaWdnZXJlZAorLy8gQVVYX1NXRVYyICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYyCisvLyBBVVhfU1dFVjEgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMS4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjEKKy8vIEFVWF9TV0VWMCAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMAorLy8gSlRBRyAgICAgICAgICAgICAgICAgICAgIEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyBSVENfVVBEICAgICAgICAgICAgICAgICAgUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyBSVENfQ09NQl9ETFkgICAgICAgICAgICAgUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDJfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMV9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gwX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDIgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIGV2ZW50CisvLyBSVENfQ0gxICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSBldmVudAorLy8gUlRDX0NIMCAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgZXZlbnQKKy8vIFBBRCAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBhbnkgUEFECisvLyBQQUQzMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzEKKy8vIFBBRDMwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMAorLy8gUEFEMjkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI5CisvLyBQQUQyOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjgKKy8vIFBBRDI3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNworLy8gUEFEMjYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI2CisvLyBQQUQyNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjUKKy8vIFBBRDI0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNAorLy8gUEFEMjMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIzCisvLyBQQUQyMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjIKKy8vIFBBRDIxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMQorLy8gUEFEMjAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIwCisvLyBQQUQxOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTkKKy8vIFBBRDE4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOAorLy8gUEFEMTcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE3CisvLyBQQUQxNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTYKKy8vIFBBRDE1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNQorLy8gUEFEMTQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE0CisvLyBQQUQxMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTMKKy8vIFBBRDEyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMgorLy8gUEFEMTEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDExCisvLyBQQUQxMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTAKKy8vIFBBRDkgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ5CisvLyBQQUQ4ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOAorLy8gUEFENyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDcKKy8vIFBBRDYgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ2CisvLyBQQUQ1ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENQorLy8gUEFENCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDQKKy8vIFBBRDMgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzCisvLyBQQUQyICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMgorLy8gUEFEMSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEKKy8vIFBBRDAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9BVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX0FVWF9DT01QQl9BU1lOQyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfQkFUTU9OX1ZPTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9CQVRNT05fVEVNUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX0FVWF9TV0VWMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfQVVYX1NXRVYxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkQKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9BVVhfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX0pUQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJCCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUlRDX1VQRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkEKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9SVENfQ09NQl9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1JUQ19DSDJfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUlRDX0NIMV9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9SVENfQ0gwX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUlRDX0NIMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9SVENfQ0gwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTYKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFENyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFENCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9FVkVOVF9PX0VWVE9NQ1VTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzIxOjE2XSBBT05fUFJPRzJfRVYKKy8vCisvLyBFdmVudCBzZWxlY3RvciBmb3IgQU9OX1BST0cyIGV2ZW50LgorLy8KKy8vIEFPTiBFdmVudCBTb3VyY2UgaWQjIHNlbGVjdGluZyBldmVudCByb3V0ZWQgdG8gRVZFTlQgYXMgQU9OX1BST0cyIGV2ZW50LgorLy8gRU5VTXM6CisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIEFVWF9DT01QQl9BU1lOQ19OICAgICAgICBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gQVVYIENvbXBhcmF0b3IgQiAoaW52ZXJ0ZWQpIGFzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3NlZCB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYCisvLyBBVVhfQ09NUEJfQVNZTkMgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIgYXMgb3Bwb3NlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4gQVVYCisvLyBCQVRNT05fVk9MVCAgICAgICAgICAgICAgQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyBCQVRNT05fVEVNUCAgICAgICAgICAgICAgQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCBUaW1lciAxIEV2ZW50CisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDAgRXZlbnQKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkCisvLyBBVVhfU1dFVjIgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMi4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjIKKy8vIEFVWF9TV0VWMSAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMQorLy8gQVVYX1NXRVYwICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYwCisvLyBKVEFHICAgICAgICAgICAgICAgICAgICAgSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vIFJUQ19VUEQgICAgICAgICAgICAgICAgICBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vIFJUQ19DT01CX0RMWSAgICAgICAgICAgICBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8gUlRDX0NIMl9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gxX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDBfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMiAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgZXZlbnQKKy8vIFJUQ19DSDEgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIGV2ZW50CisvLyBSVENfQ0gwICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCBldmVudAorLy8gUEFEICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIGFueSBQQUQKKy8vIFBBRDMxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMQorLy8gUEFEMzAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMwCisvLyBQQUQyOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjkKKy8vIFBBRDI4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOAorLy8gUEFEMjcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI3CisvLyBQQUQyNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjYKKy8vIFBBRDI1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNQorLy8gUEFEMjQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI0CisvLyBQQUQyMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjMKKy8vIFBBRDIyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMgorLy8gUEFEMjEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIxCisvLyBQQUQyMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjAKKy8vIFBBRDE5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOQorLy8gUEFEMTggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE4CisvLyBQQUQxNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTcKKy8vIFBBRDE2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNgorLy8gUEFEMTUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE1CisvLyBQQUQxNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTQKKy8vIFBBRDEzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMworLy8gUEFEMTIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEyCisvLyBQQUQxMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTEKKy8vIFBBRDEwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMAorLy8gUEFEOSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDkKKy8vIFBBRDggICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ4CisvLyBQQUQ3ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENworLy8gUEFENiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDYKKy8vIFBBRDUgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ1CisvLyBQQUQ0ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENAorLy8gUEFEMyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMKKy8vIFBBRDIgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyCisvLyBQQUQxICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMQorLy8gUEFEMCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM0YwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDNGMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfQVVYX0NPTVBCX0FTWU5DX04gICAgICAgICAweDAwMzgwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9BVVhfQ09NUEJfQVNZTkMgICAgICAgICAgIDB4MDAzNzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX0JBVE1PTl9WT0xUICAgICAgICAgICAgICAgMHgwMDM2MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfQkFUTU9OX1RFTVAgICAgICAgICAgICAgICAweDAwMzUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgIDB4MDAzNDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgMHgwMDMzMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAweDAwMzIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgIDB4MDAzMTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgMHgwMDMwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAweDAwMkYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9BVVhfU1dFVjIgICAgICAgICAgICAgICAgIDB4MDAyRTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX0FVWF9TV0VWMSAgICAgICAgICAgICAgICAgMHgwMDJEMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfQVVYX1NXRVYwICAgICAgICAgICAgICAgICAweDAwMkMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9KVEFHICAgICAgICAgICAgICAgICAgICAgIDB4MDAyQjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgMHgwMDJBMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUlRDX0NPTUJfRExZICAgICAgICAgICAgICAweDAwMjkwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9SVENfQ0gyX0RMWSAgICAgICAgICAgICAgIDB4MDAyODAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1JUQ19DSDFfRExZICAgICAgICAgICAgICAgMHgwMDI3MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUlRDX0NIMF9ETFkgICAgICAgICAgICAgICAweDAwMjYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9SVENfQ0gyICAgICAgICAgICAgICAgICAgIDB4MDAyNTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1JUQ19DSDEgICAgICAgICAgICAgICAgICAgMHgwMDI0MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUlRDX0NIMCAgICAgICAgICAgICAgICAgICAweDAwMjMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDMxICAgICAgICAgICAgICAgICAgICAgMHgwMDFGMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMzAgICAgICAgICAgICAgICAgICAgICAweDAwMUUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQyOSAgICAgICAgICAgICAgICAgICAgIDB4MDAxRDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDI4ICAgICAgICAgICAgICAgICAgICAgMHgwMDFDMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMjcgICAgICAgICAgICAgICAgICAgICAweDAwMUIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQyNiAgICAgICAgICAgICAgICAgICAgIDB4MDAxQTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDI1ICAgICAgICAgICAgICAgICAgICAgMHgwMDE5MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMjQgICAgICAgICAgICAgICAgICAgICAweDAwMTgwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQyMyAgICAgICAgICAgICAgICAgICAgIDB4MDAxNzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDIyICAgICAgICAgICAgICAgICAgICAgMHgwMDE2MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMjEgICAgICAgICAgICAgICAgICAgICAweDAwMTUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQyMCAgICAgICAgICAgICAgICAgICAgIDB4MDAxNDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDE5ICAgICAgICAgICAgICAgICAgICAgMHgwMDEzMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMTggICAgICAgICAgICAgICAgICAgICAweDAwMTIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQxNyAgICAgICAgICAgICAgICAgICAgIDB4MDAxMTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDE2ICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMTUgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQxNCAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDEzICAgICAgICAgICAgICAgICAgICAgMHgwMDBEMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMTIgICAgICAgICAgICAgICAgICAgICAweDAwMEMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQxMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwQjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDEwICAgICAgICAgICAgICAgICAgICAgMHgwMDBBMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEOSAgICAgICAgICAgICAgICAgICAgICAweDAwMDkwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQ4ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDcgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFENiAgICAgICAgICAgICAgICAgICAgICAweDAwMDYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQ1ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMyAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgWzEzOjhdIEFPTl9QUk9HMV9FVgorLy8KKy8vIEV2ZW50IHNlbGVjdG9yIGZvciBBT05fUFJPRzEgZXZlbnQuCisvLworLy8gQU9OIEV2ZW50IFNvdXJjZSBpZCMgc2VsZWN0aW5nIGV2ZW50IHJvdXRlZCB0byBFVkVOVCBhcyBBT05fUFJPRzEgZXZlbnQuCisvLyBFTlVNczoKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBldmVudCwgYWx3YXlzIGxvdworLy8gQVVYX0NPTVBCX0FTWU5DX04gICAgICAgIENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSBBVVggQ29tcGFyYXRvciBCIChpbnZlcnRlZCkgYXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvcHBvc2VkIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVgKKy8vIEFVWF9DT01QQl9BU1lOQyAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQiBhcyBvcHBvc2VkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbiBBVVgKKy8vIEJBVE1PTl9WT0xUICAgICAgICAgICAgICBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vIEJBVE1PTl9URU1QICAgICAgICAgICAgICBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDEgRXZlbnQKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggVGltZXIgMCBFdmVudAorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZAorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQKKy8vIEFVWF9TV0VWMiAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMgorLy8gQVVYX1NXRVYxICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYxCisvLyBBVVhfU1dFVjAgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMC4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjAKKy8vIEpUQUcgICAgICAgICAgICAgICAgICAgICBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8gUlRDX1VQRCAgICAgICAgICAgICAgICAgIFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8gUlRDX0NPTUJfRExZICAgICAgICAgICAgIFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDFfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMF9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiBldmVudAorLy8gUlRDX0NIMSAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgZXZlbnQKKy8vIFJUQ19DSDAgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIGV2ZW50CisvLyBQQUQgICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gYW55IFBBRAorLy8gUEFEMzEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMxCisvLyBQQUQzMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzAKKy8vIFBBRDI5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOQorLy8gUEFEMjggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI4CisvLyBQQUQyNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjcKKy8vIFBBRDI2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNgorLy8gUEFEMjUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI1CisvLyBQQUQyNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjQKKy8vIFBBRDIzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMworLy8gUEFEMjIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIyCisvLyBQQUQyMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjEKKy8vIFBBRDIwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMAorLy8gUEFEMTkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE5CisvLyBQQUQxOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTgKKy8vIFBBRDE3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNworLy8gUEFEMTYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE2CisvLyBQQUQxNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTUKKy8vIFBBRDE0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNAorLy8gUEFEMTMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEzCisvLyBQQUQxMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTIKKy8vIFBBRDExICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMQorLy8gUEFEMTAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEwCisvLyBQQUQ5ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOQorLy8gUEFEOCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDgKKy8vIFBBRDcgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ3CisvLyBQQUQ2ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENgorLy8gUEFENSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDUKKy8vIFBBRDQgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ0CisvLyBQQUQzICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMworLy8gUEFEMiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIKKy8vIFBBRDEgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxCisvLyBQQUQwICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzRjAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9BVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgIDB4MDAwMDM4MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX0FVWF9DT01QQl9BU1lOQyAgICAgICAgICAgMHgwMDAwMzcwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfQkFUTU9OX1ZPTFQgICAgICAgICAgICAgICAweDAwMDAzNjAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9CQVRNT05fVEVNUCAgICAgICAgICAgICAgIDB4MDAwMDM1MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgMHgwMDAwMzQwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAweDAwMDAzMzAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgIDB4MDAwMDMyMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgMHgwMDAwMzEwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgIDB4MDAwMDJGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX0FVWF9TV0VWMiAgICAgICAgICAgICAgICAgMHgwMDAwMkUwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfQVVYX1NXRVYxICAgICAgICAgICAgICAgICAweDAwMDAyRDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9BVVhfU1dFVjAgICAgICAgICAgICAgICAgIDB4MDAwMDJDMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX0pUQUcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMkIwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUlRDX1VQRCAgICAgICAgICAgICAgICAgICAweDAwMDAyQTAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9SVENfQ09NQl9ETFkgICAgICAgICAgICAgIDB4MDAwMDI5MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1JUQ19DSDJfRExZICAgICAgICAgICAgICAgMHgwMDAwMjgwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUlRDX0NIMV9ETFkgICAgICAgICAgICAgICAweDAwMDAyNzAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9SVENfQ0gwX0RMWSAgICAgICAgICAgICAgIDB4MDAwMDI2MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgMHgwMDAwMjUwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUlRDX0NIMSAgICAgICAgICAgICAgICAgICAweDAwMDAyNDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9SVENfQ0gwICAgICAgICAgICAgICAgICAgIDB4MDAwMDIzMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMzEgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQzMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFFMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDI5ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUQwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMjggICAgICAgICAgICAgICAgICAgICAweDAwMDAxQzAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQyNyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFCMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDI2ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUEwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMjUgICAgICAgICAgICAgICAgICAgICAweDAwMDAxOTAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQyNCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDIzICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTcwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMjIgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNjAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQyMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE1MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDIwICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTQwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMTkgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMzAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQxOCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEyMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDE3ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTEwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMTYgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQxNSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDE0ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEUwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMTMgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQxMiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDExICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEIwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMTAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQTAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQ5ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDggICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFENyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQ2ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFENCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQzICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQwICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gQU9OX1BST0cwX0VWCisvLworLy8gRXZlbnQgc2VsZWN0b3IgZm9yIEFPTl9QUk9HMCBldmVudC4KKy8vCisvLyBBT04gRXZlbnQgU291cmNlIGlkIyBzZWxlY3RpbmcgZXZlbnQgcm91dGVkIHRvIEVWRU5UIGFzIEFPTl9QUk9HMCBldmVudC4KKy8vIEVOVU1zOgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyBBVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIEFVWCBDb21wYXJhdG9yIEIgKGludmVydGVkKSBhcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9zZWQgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWAorLy8gQVVYX0NPTVBCX0FTWU5DICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCIGFzIG9wcG9zZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluIEFVWAorLy8gQkFUTU9OX1ZPTFQgICAgICAgICAgICAgIEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8gQkFUTU9OX1RFTVAgICAgICAgICAgICAgIEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggVGltZXIgMSBFdmVudAorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCBUaW1lciAwIEV2ZW50CisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBBIHRyaWdnZXJlZAorLy8gQVVYX1NXRVYyICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYyCisvLyBBVVhfU1dFVjEgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMS4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjEKKy8vIEFVWF9TV0VWMCAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMAorLy8gSlRBRyAgICAgICAgICAgICAgICAgICAgIEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyBSVENfVVBEICAgICAgICAgICAgICAgICAgUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyBSVENfQ09NQl9ETFkgICAgICAgICAgICAgUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDJfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMV9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gwX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDIgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIGV2ZW50CisvLyBSVENfQ0gxICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSBldmVudAorLy8gUlRDX0NIMCAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgZXZlbnQKKy8vIFBBRCAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBhbnkgUEFECisvLyBQQUQzMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzEKKy8vIFBBRDMwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMAorLy8gUEFEMjkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI5CisvLyBQQUQyOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjgKKy8vIFBBRDI3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNworLy8gUEFEMjYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI2CisvLyBQQUQyNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjUKKy8vIFBBRDI0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNAorLy8gUEFEMjMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIzCisvLyBQQUQyMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjIKKy8vIFBBRDIxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMQorLy8gUEFEMjAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIwCisvLyBQQUQxOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTkKKy8vIFBBRDE4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOAorLy8gUEFEMTcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE3CisvLyBQQUQxNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTYKKy8vIFBBRDE1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNQorLy8gUEFEMTQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE0CisvLyBQQUQxMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTMKKy8vIFBBRDEyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMgorLy8gUEFEMTEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDExCisvLyBQQUQxMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTAKKy8vIFBBRDkgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ5CisvLyBQQUQ4ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOAorLy8gUEFENyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDcKKy8vIFBBRDYgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ2CisvLyBQQUQ1ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENQorLy8gUEFENCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDQKKy8vIFBBRDMgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzCisvLyBQQUQyICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMgorLy8gUEFEMSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEKKy8vIFBBRDAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX0FVWF9DT01QQl9BU1lOQ19OICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfQVVYX0NPTVBCX0FTWU5DICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9CQVRNT05fVk9MVCAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX0JBVE1PTl9URU1QICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfQVVYX1NXRVYyICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9BVVhfU1dFVjEgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkQKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfSlRBRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJCCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9SVENfVVBEICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkEKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1JUQ19DT01CX0RMWSAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUlRDX0NIMl9ETFkgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9SVENfQ0gxX0RMWSAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1JUQ19DSDBfRExZICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUlRDX0NIMiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9SVENfQ0gxICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1JUQ19DSDAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQzMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDMwICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMjkgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQyOCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDI3ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMjYgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQyNSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDI0ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMjMgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQyMiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTYKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDIxICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMjAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQxOSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDE4ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMTcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQxNiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDE1ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMTQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQxMyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDEyICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMTEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQxMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEOCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQ3ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFENSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQ0ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQxICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9FVkVOVF9PX1JUQ1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjBdIFJUQ19DSDFfQ0FQVF9FVgorLy8KKy8vIEFPTiBFdmVudCBTb3VyY2UgaWQjIGZvciBSVENTRUwgZXZlbnQgd2hpY2ggaXMgZmVkIHRvIEFPTl9SVEMuIFBsZWFzZSByZWZlcgorLy8gdG8gQU9OX1JUQzpDSDFDQVBUCisvLyBFTlVNczoKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBldmVudCwgYWx3YXlzIGxvdworLy8gQVVYX0NPTVBCX0FTWU5DX04gICAgICAgIENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSBBVVggQ29tcGFyYXRvciBCIChpbnZlcnRlZCkgYXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvcHBvc2VkIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVgKKy8vIEFVWF9DT01QQl9BU1lOQyAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQiBhcyBvcHBvc2VkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbiBBVVgKKy8vIEJBVE1PTl9WT0xUICAgICAgICAgICAgICBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vIEJBVE1PTl9URU1QICAgICAgICAgICAgICBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDEgRXZlbnQKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggVGltZXIgMCBFdmVudAorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZAorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQKKy8vIEFVWF9TV0VWMiAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMgorLy8gQVVYX1NXRVYxICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYxCisvLyBBVVhfU1dFVjAgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMC4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjAKKy8vIEpUQUcgICAgICAgICAgICAgICAgICAgICBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8gUlRDX1VQRCAgICAgICAgICAgICAgICAgIFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8gUlRDX0NPTUJfRExZICAgICAgICAgICAgIFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDFfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMF9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiBldmVudAorLy8gUlRDX0NIMSAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgZXZlbnQKKy8vIFJUQ19DSDAgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIGV2ZW50CisvLyBQQUQgICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gYW55IFBBRAorLy8gUEFEMzEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMxCisvLyBQQUQzMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzAKKy8vIFBBRDI5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOQorLy8gUEFEMjggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI4CisvLyBQQUQyNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjcKKy8vIFBBRDI2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNgorLy8gUEFEMjUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI1CisvLyBQQUQyNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjQKKy8vIFBBRDIzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMworLy8gUEFEMjIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIyCisvLyBQQUQyMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjEKKy8vIFBBRDIwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMAorLy8gUEFEMTkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE5CisvLyBQQUQxOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTgKKy8vIFBBRDE3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNworLy8gUEFEMTYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE2CisvLyBQQUQxNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTUKKy8vIFBBRDE0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNAorLy8gUEFEMTMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEzCisvLyBQQUQxMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTIKKy8vIFBBRDExICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMQorLy8gUEFEMTAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEwCisvLyBQQUQ5ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOQorLy8gUEFEOCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDgKKy8vIFBBRDcgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ3CisvLyBQQUQ2ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENgorLy8gUEFENSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDUKKy8vIFBBRDQgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ0CisvLyBQQUQzICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMworLy8gUEFEMiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIKKy8vIFBBRDEgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxCisvLyBQQUQwICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMAorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX0FVWF9DT01QQl9BU1lOQ19OICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfQVVYX0NPTVBCX0FTWU5DICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9CQVRNT05fVk9MVCAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX0JBVE1PTl9URU1QICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfQVVYX1NXRVYyICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9BVVhfU1dFVjEgICAgICAgICAgICAgICAgICAweDAwMDAwMDJECisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfSlRBRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQgorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJBCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1JUQ19DT01CX0RMWSAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUlRDX0NIMl9ETFkgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9SVENfQ0gxX0RMWSAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1JUQ19DSDBfRExZICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9SVENfQ0gxICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1JUQ19DSDAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQzMSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDMwICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMjkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQyOCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDI3ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMjYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQyNSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDI0ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMjMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQyMiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE2CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDIxICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMjAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQxOSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDE4ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMTcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQxNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDE1ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMTQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQxMyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDEyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMTEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQxMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQ3ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFENSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQ0ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQxICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworCisjZW5kaWYgLy8gX19BT05fRVZFTlRfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX2lvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX2lvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzY2I2OTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25faW9jLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hb25faW9jX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FPTl9JT0NfSF9fCisjZGVmaW5lIF9fSFdfQU9OX0lPQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBT05fSU9DIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEludGVybmFsCisjZGVmaW5lIEFPTl9JT0NfT19JT1NUUk1JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQU9OX0lPQ19PX0lPU1RSTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBT05fSU9DX09fSU9TVFJNQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIElPIExhdGNoIENvbnRyb2wKKyNkZWZpbmUgQU9OX0lPQ19PX0lPQ0xBVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBTQ0xLX0xGIEV4dGVybmFsIE91dHB1dCBDb250cm9sCisjZGVmaW5lIEFPTl9JT0NfT19DTEszMktDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fSU9DX09fSU9TVFJNSU4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMjowXSBHUkFZX0NPREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fSU9DX0lPU1RSTUlOX0dSQVlfQ09ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFPTl9JT0NfSU9TVFJNSU5fR1JBWV9DT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQU9OX0lPQ19JT1NUUk1JTl9HUkFZX0NPREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9JT0NfT19JT1NUUk1FRAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsyOjBdIEdSQVlfQ09ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9JT0NfSU9TVFJNRURfR1JBWV9DT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQU9OX0lPQ19JT1NUUk1FRF9HUkFZX0NPREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBT05fSU9DX0lPU1RSTUVEX0dSQVlfQ09ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0lPQ19PX0lPU1RSTUFYCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzI6MF0gR1JBWV9DT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0lPQ19JT1NUUk1BWF9HUkFZX0NPREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBT05fSU9DX0lPU1RSTUFYX0dSQVlfQ09ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFPTl9JT0NfSU9TVFJNQVhfR1JBWV9DT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fSU9DX09fSU9DTEFUQ0gKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIENvbnRyb2xzIGxhdGNoZXMgYmV0d2VlbiBNQ1UgSU9DIGFuZCBBT05fSU9DLgorLy8KKy8vIFRoZSBsYXRjaGVzIGFyZSB0cmFuc3BhcmVudCBieSBkZWZhdWx0LgorLy8KKy8vIFRoZXkgbXVzdCBiZSBjbG9zZWQgcHJpb3IgdG8gcG93ZXIgb2ZmIHRoZSBkb21haW4ocykgY29udHJvbGxpbmcgdGhlIElPcyBpbgorLy8gb3JkZXIgdG8gcHJlc2VydmUgSU8gdmFsdWVzIG9uIGV4dGVybmFsIHBpbnMuCisvLyBFTlVNczoKKy8vIFRSQU5TUCAgICAgICAgICAgICAgICAgICBMYXRjaGVzIGFyZSB0cmFuc3BhcmVudCwgbWVhbmluZyB0aGUgdmFsdWUgb2YgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU8gaXMgZGlyZWN0bHkgY29udHJvbGxlZCBieSB0aGUgR1BJTyBvcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlwaGVyYWwgdmFsdWUKKy8vIFNUQVRJQyAgICAgICAgICAgICAgICAgICBMYXRjaGVzIGFyZSBzdGF0aWMsIG1lYW5pbmcgdGhlIGN1cnJlbnQgdmFsdWUgb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgSU8gcGluIGlzIGZyb3plbiBieSBsYXRjaGVzIGFuZCBrZXB0IGV2ZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBHUElPIG1vZHVsZSBvciBhIHBlcmlwaGVyYWwgbW9kdWxlIGlzIHR1cm5lZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG9mZgorI2RlZmluZSBBT05fSU9DX0lPQ0xBVENIX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9JT0NfSU9DTEFUQ0hfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX0lPQ19JT0NMQVRDSF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fSU9DX0lPQ0xBVENIX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9JT0NfSU9DTEFUQ0hfRU5fVFJBTlNQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX0lPQ19JT0NMQVRDSF9FTl9TVEFUSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9JT0NfT19DTEszMktDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBPRV9OCisvLworLy8gMDogT3V0cHV0IGVuYWJsZSBhY3RpdmUuIFNDTEtfTEYgb3V0cHV0IG9uIElPIHBpbiB0aGF0IGhhcyBQT1JUX0lEIChlLmcuCisvLyBJT0M6SU9DRkcwLlBPUlRfSUQpIHNldCB0byBBT05fQ0xLMzJLLgorLy8gMTogT3V0cHV0IGVuYWJsZSBub3QgYWN0aXZlCisjZGVmaW5lIEFPTl9JT0NfQ0xLMzJLQ1RMX09FX04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX0lPQ19DTEszMktDVExfT0VfTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fSU9DX0NMSzMyS0NUTF9PRV9OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9JT0NfQ0xLMzJLQ1RMX09FX05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19BT05fSU9DX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl9ydGMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl9ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTQ0YjY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX3J0Yy5oCkBAIC0wLDAgKzEsNTA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYW9uX3J0Y19oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19BT05fUlRDX0hfXworI2RlZmluZSBfX0hXX0FPTl9SVENfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQU9OX1JUQyBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBDb250cm9sCisjZGVmaW5lIEFPTl9SVENfT19DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRXZlbnQgRmxhZ3MsIFJUQyBTdGF0dXMKKyNkZWZpbmUgQU9OX1JUQ19PX0VWRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBTZWNvbmQgQ291bnRlciBWYWx1ZSwgSW50ZWdlciBQYXJ0CisjZGVmaW5lIEFPTl9SVENfT19TRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gU2Vjb25kIENvdW50ZXIgVmFsdWUsIEZyYWN0aW9uYWwgUGFydAorI2RlZmluZSBBT05fUlRDX09fU1VCU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIFN1YnNlY29uZHMgSW5jcmVtZW50CisjZGVmaW5lIEFPTl9SVENfT19TVUJTRUNJTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gQ2hhbm5lbCBDb25maWd1cmF0aW9uCisjZGVmaW5lIEFPTl9SVENfT19DSENUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gQ2hhbm5lbCAwIENvbXBhcmUgVmFsdWUKKyNkZWZpbmUgQU9OX1JUQ19PX0NIMENNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBDaGFubmVsIDEgQ29tcGFyZSBWYWx1ZQorI2RlZmluZSBBT05fUlRDX09fQ0gxQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIENoYW5uZWwgMiBDb21wYXJlIFZhbHVlCisjZGVmaW5lIEFPTl9SVENfT19DSDJDTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworLy8gQ2hhbm5lbCAyIENvbXBhcmUgVmFsdWUgQXV0by1pbmNyZW1lbnQKKyNkZWZpbmUgQU9OX1JUQ19PX0NIMkNNUElOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBDaGFubmVsIDEgQ2FwdHVyZSBWYWx1ZQorI2RlZmluZSBBT05fUlRDX09fQ0gxQ0FQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIEFPTiBTeW5jaHJvbml6YXRpb24KKyNkZWZpbmUgQU9OX1JUQ19PX1NZTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9SVENfT19DVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE4OjE2XSBDT01CX0VWX01BU0sKKy8vCisvLyBFdmVudG1hc2sgc2VsZWN0aW5nIHdoaWNoIGRlbGF5ZWQgZXZlbnRzIHRoYXQgZm9ybSB0aGUgY29tYmluZWQgZXZlbnQuCisvLyBFTlVNczoKKy8vIENIMiAgICAgICAgICAgICAgICAgICAgICBVc2UgQ2hhbm5lbCAyIGRlbGF5ZWQgZXZlbnQgaW4gY29tYmluZWQgZXZlbnQKKy8vIENIMSAgICAgICAgICAgICAgICAgICAgICBVc2UgQ2hhbm5lbCAxIGRlbGF5ZWQgZXZlbnQgaW4gY29tYmluZWQgZXZlbnQKKy8vIENIMCAgICAgICAgICAgICAgICAgICAgICBVc2UgQ2hhbm5lbCAwIGRlbGF5ZWQgZXZlbnQgaW4gY29tYmluZWQgZXZlbnQKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBldmVudCBpcyBzZWxlY3RlZCBmb3IgY29tYmluZWQgZXZlbnQuCisjZGVmaW5lIEFPTl9SVENfQ1RMX0NPTUJfRVZfTUFTS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQU9OX1JUQ19DVExfQ09NQl9FVl9NQVNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3MDAwMAorI2RlZmluZSBBT05fUlRDX0NUTF9DT01CX0VWX01BU0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFPTl9SVENfQ1RMX0NPTUJfRVZfTUFTS19DSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfQ09NQl9FVl9NQVNLX0NIMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBT05fUlRDX0NUTF9DT01CX0VWX01BU0tfQ0gwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0NPTUJfRVZfTUFTS19OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICBbMTE6OF0gRVZfREVMQVkKKy8vCisvLyBOdW1iZXIgb2YgU0NMS19MRiBjbG9jayBjeWNsZXMgd2FpdGVkIGJlZm9yZSBnZW5lcmF0aW5nIGRlbGF5ZWQgZXZlbnRzLgorLy8gKENvbW1vbiBzZXR0aW5nIGZvciBhbGwgUlRDIGNhbm5lbHMpICB0aGUgZGVsYXllZCBldmVudCBpcyBkZWxheWVkCisvLyBFTlVNczoKKy8vIEQxNDQgICAgICAgICAgICAgICAgICAgICBEZWxheSBieSAxNDQgY2xvY2sgY3ljbGVzCisvLyBEMTI4ICAgICAgICAgICAgICAgICAgICAgRGVsYXkgYnkgMTI4IGNsb2NrIGN5Y2xlcworLy8gRDExMiAgICAgICAgICAgICAgICAgICAgIERlbGF5IGJ5IDExMiBjbG9jayBjeWNsZXMKKy8vIEQ5NiAgICAgICAgICAgICAgICAgICAgICBEZWxheSBieSA5NiBjbG9jayBjeWNsZXMKKy8vIEQ4MCAgICAgICAgICAgICAgICAgICAgICBEZWxheSBieSA4MCBjbG9jayBjeWNsZXMKKy8vIEQ2NCAgICAgICAgICAgICAgICAgICAgICBEZWxheSBieSA2NCBjbG9jayBjeWNsZXMKKy8vIEQ0OCAgICAgICAgICAgICAgICAgICAgICBEZWxheSBieSA0OCBjbG9jayBjeWNsZXMKKy8vIEQzMiAgICAgICAgICAgICAgICAgICAgICBEZWxheSBieSAzMiBjbG9jayBjeWNsZXMKKy8vIEQxNiAgICAgICAgICAgICAgICAgICAgICBEZWxheSBieSAxNiBjbG9jayBjeWNsZXMKKy8vIEQ4ICAgICAgICAgICAgICAgICAgICAgICBEZWxheSBieSA4IGNsb2NrIGN5Y2xlcworLy8gRDQgICAgICAgICAgICAgICAgICAgICAgIERlbGF5IGJ5IDQgY2xvY2sgY3ljbGVzCisvLyBEMiAgICAgICAgICAgICAgICAgICAgICAgRGVsYXkgYnkgMiBjbG9jayBjeWNsZXMKKy8vIEQxICAgICAgICAgICAgICAgICAgICAgICBEZWxheSBieSAxIGNsb2NrIGN5Y2xlcworLy8gRDAgICAgICAgICAgICAgICAgICAgICAgIE5vIGRlbGF5IG9uIGRlbGF5ZWQgZXZlbnQKKyNkZWZpbmUgQU9OX1JUQ19DVExfRVZfREVMQVlfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VWX0RFTEFZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQU9OX1JUQ19DVExfRVZfREVMQVlfRDE0NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQwMAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9EMTI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VWX0RFTEFZX0QxMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBCMDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfRVZfREVMQVlfRDk2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEEwMAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9EODAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwOTAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VWX0RFTEFZX0Q2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfRVZfREVMQVlfRDQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9EMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VWX0RFTEFZX0QxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfRVZfREVMQVlfRDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9ENCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VWX0RFTEFZX0QyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfRVZfREVMQVlfRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9EMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzddIFJFU0VUCisvLworLy8gUlRDIENvdW50ZXIgcmVzZXQuCisvLworLy8gV3JpdGluZyAxIHRvIHRoaXMgYml0IHdpbGwgcmVzZXQgdGhlIFJUQyBjb3VudGVyLgorLy8KKy8vIFRoaXMgYml0IGlzIGNsZWFyZWQgd2hlbiByZXNldCB0YWtlcyBlZmZlY3QKKyNkZWZpbmUgQU9OX1JUQ19DVExfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBT05fUlRDX0NUTF9SRVNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFPTl9SVENfQ1RMX1JFU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQU9OX1JUQ19DVExfUkVTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFsyXSBSVENfNEtIWl9FTgorLy8KKy8vIFJUQ180S0haIGlzIGEgNCBLSHogcmVmZXJlbmNlIG91dHB1dCwgdGFwcGVkIGZyb20gIFNVQlNFQy5WQUxVRSAgYml0IDE5CisvLyB3aGljaCBpcyB1c2VkIGJ5IEFVWCB0aW1lci4KKy8vCisvLyAwOiBSVENfNEtIWiBzaWduYWwgaXMgZm9yY2VkIHRvIDAKKy8vIDE6IFJUQ180S0haIGlzIGVuYWJsZWQgKCBwcm92aWVkIHRoYXQgUlRDIGlzIGVuYWJsZWQgRU4pCisjZGVmaW5lIEFPTl9SVENfQ1RMX1JUQ180S0haX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX1JUQ19DVExfUlRDXzRLSFpfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBT05fUlRDX0NUTF9SVENfNEtIWl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9SVENfQ1RMX1JUQ180S0haX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gUlRDX1VQRF9FTgorLy8KKy8vIFJUQ19VUEQgaXMgYSAxNiBLSHogc2lnbmFsIHVzZWQgdG8gc3luYyB1cCB0aGUgcmFkaW8gdGltZXIuIFRoZSAxNiBLaHogaXMKKy8vIFNDTEtfTEYgZGl2aWRlZCBieSAyCisvLworLy8gMDogUlRDX1VQRCBzaWduYWwgaXMgZm9yY2VkIHRvIDAKKy8vIDE6IFJUQ19VUEQgc2lnbmFsIGlzIHRvZ2dsaW5nIEAxNiBrSHoKKyNkZWZpbmUgQU9OX1JUQ19DVExfUlRDX1VQRF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fUlRDX0NUTF9SVENfVVBEX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFPTl9SVENfQ1RMX1JUQ19VUERfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OX1JUQ19DVExfUlRDX1VQRF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIEVuYWJsZSBSVEMgY291bnRlcgorLy8KKy8vIDA6IEhhbHRlZCAoZnJvemVuKQorLy8gMTogUnVubmluZworI2RlZmluZSBBT05fUlRDX0NUTF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fUlRDX0NUTF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1JUQ19PX0VWRkxBR1MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE2XSBDSDIKKy8vCisvLyBDaGFubmVsIDIgZXZlbnQgZmxhZywgc2V0IHdoZW4gQ0hDVEwuQ0gyX0VOID0gMSBhbmQgdGhlIFJUQyB2YWx1ZSBtYXRjaGVzIG9yCisvLyBwYXNzZXMgdGhlIENIMkNNUCB2YWx1ZS4KKy8vCisvLyBBbiBldmVudCB3aWxsIGJlIHNjaGVkdWxlZCB0byBvY2N1ciBhcyBzb29uIGFzIHBvc3NpYmxlIHdoZW4gd3JpdGluZyB0bworLy8gQ0gyQ01QIHByb3ZpZGVkIHRoYXQgdGhlIGNoYW5uZWwgaXMgZW5hYmxlZCBhbmQgdGhlIG5ldyB2YWx1ZSBtYXRjaGVzIGFueQorLy8gdGltZSBiZXR3ZWVuIG5leHQgIFJUQyB2YWx1ZSBhbmQgMSBzZWNvbmQgaW4gdGhlIHBhc3QKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIHRoaXMgZmxhZy4gTm90ZSB0aGF0IGEgbmV3IGV2ZW50IGNhbiBub3Qgb2NjdXIgb24gdGhpcworLy8gY2hhbm5lbCBpbiBmaXJzdCAyIFNDTEtfTEYgY3ljbGVzIGFmdGVyIGEgY2xlYXJhbmNlLgorLy8KKy8vIEFVWF9TQ0UgY2FuIHJlYWQgdGhlIGZsYWcgdGhyb3VnaCBBVVhfV1VDOldVRVZGTEFHUy5BT05fUlRDX0NIMiBhbmQgY2xlYXIgaXQKKy8vIHVzaW5nIEFVWF9XVUM6V1VFVkNMUi5BT05fUlRDX0NIMi4KKyNkZWZpbmUgQU9OX1JUQ19FVkZMQUdTX0NIMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBT05fUlRDX0VWRkxBR1NfQ0gyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFPTl9SVENfRVZGTEFHU19DSDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQU9OX1JUQ19FVkZMQUdTX0NIMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgIFs4XSBDSDEKKy8vCisvLyBDaGFubmVsIDEgZXZlbnQgZmxhZywgc2V0IHdoZW4gQ0hDVEwuQ0gxX0VOID0gMSBhbmQgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyAtIENIQ1RMLkNIMV9DQVBUX0VOID0gMCBhbmQgdGhlIFJUQyB2YWx1ZSBtYXRjaGVzIG9yIHBhc3NlcyB0aGUgQ0gxQ01QCisvLyB2YWx1ZS4KKy8vIC0gQ0hDVEwuQ0gxX0NBUFRfRU4gPSAxIGFuZCBjYXB0dXJlIG9jY3Vycy4KKy8vCisvLyBBbiBldmVudCB3aWxsIGJlIHNjaGVkdWxlZCB0byBvY2N1ciBhcyBzb29uIGFzIHBvc3NpYmxlIHdoZW4gd3JpdGluZyB0bworLy8gQ0gxQ01QIHByb3ZpZGVkIHRoYXQgdGhlIGNoYW5uZWwgaXMgZW5hYmxlZCwgaW4gY29tcGFyZSBtb2RlIGFuZCB0aGUgbmV3CisvLyB2YWx1ZSBtYXRjaGVzIGFueSB0aW1lIGJldHdlZW4gbmV4dCAgUlRDIHZhbHVlIGFuZCAxIHNlY29uZCBpbiB0aGUgcGFzdC4KKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIHRoaXMgZmxhZy4gTm90ZSB0aGF0IGEgbmV3IGV2ZW50IGNhbiBub3Qgb2NjdXIgb24gdGhpcworLy8gY2hhbm5lbCBpbiBmaXJzdCAyIFNDTEtfTEYgY3ljbGVzIGFmdGVyIGEgY2xlYXJhbmNlLgorI2RlZmluZSBBT05fUlRDX0VWRkxBR1NfQ0gxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9SVENfRVZGTEFHU19DSDFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQU9OX1JUQ19FVkZMQUdTX0NIMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBT05fUlRDX0VWRkxBR1NfQ0gxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzBdIENIMAorLy8KKy8vIENoYW5uZWwgMCBldmVudCBmbGFnLCBzZXQgd2hlbiBDSENUTC5DSDBfRU4gPSAxIGFuZCB0aGUgUlRDIHZhbHVlIG1hdGNoZXMgb3IKKy8vIHBhc3NlcyB0aGUgQ0gwQ01QIHZhbHVlLgorLy8KKy8vIEFuIGV2ZW50IHdpbGwgYmUgc2NoZWR1bGVkIHRvIG9jY3VyIGFzIHNvb24gYXMgcG9zc2libGUgd2hlbiB3cml0aW5nIHRvCisvLyBDSDBDTVAgcHJvdmlkZWQgdGhhdCB0aGUgY2hhbm5lbHMgaXMgZW5hYmxlZCBhbmQgdGhlIG5ldyB2YWx1ZSBtYXRjaGVzIGFueQorLy8gdGltZSBiZXR3ZWVuIG5leHQgIFJUQyB2YWx1ZSBhbmQgMSBzZWNvbmQgaW4gdGhlIHBhc3QuCisvLworLy8gV3JpdGluZyAxIGNsZWFycyB0aGlzIGZsYWcuIE5vdGUgdGhhdCBhIG5ldyBldmVudCBjYW4gbm90IG9jY3VyIG9uIHRoaXMKKy8vIGNoYW5uZWwgaW4gZmlyc3QgMiBTQ0xLX0xGIGN5Y2xlcyBhZnRlciBhIGNsZWFyYW5jZS4KKyNkZWZpbmUgQU9OX1JUQ19FVkZMQUdTX0NIMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fUlRDX0VWRkxBR1NfQ0gwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9SVENfRVZGTEFHU19DSDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1JUQ19FVkZMQUdTX0NIMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9SVENfT19TRUMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUxVRQorLy8KKy8vIFVuc2lnbmVkIGludGVnZXIgcmVwcmVzZW50aW5nIFJlYWwgVGltZSBDbG9jayBpbiBzZWNvbmRzLgorLy8KKy8vIFdoZW4gcmVhZGluZyB0aGlzIHJlZ2lzdGVyIHRoZSBjb250ZW50IG9mIFNVQlNFQy5WQUxVRSBpcyBzaW11bHRhbmVvdXNseQorLy8gbGF0Y2hlZC4gQSBjb25zaXN0ZW50IHJlYWRpbmcgb2YgdGhlIGNvbWJpbmVkIFJlYWwgVGltZSBDbG9jayBjYW4gYmUKKy8vIG9idGFpbmVkIGJ5IGZpcnN0IHJlYWRpbmcgdGhpcyByZWdpc3RlciwgdGhlbiByZWFkaW5nIFNVQlNFQyByZWdpc3Rlci4KKyNkZWZpbmUgQU9OX1JUQ19TRUNfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBBT05fUlRDX1NFQ19WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEFPTl9SVENfU0VDX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fUlRDX09fU1VCU0VDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkFMVUUKKy8vCisvLyBVbnNpZ25lZCBpbnRlZ2VyIHJlcHJlc2VudGluZyBSZWFsIFRpbWUgQ2xvY2sgaW4gZnJhY3Rpb25zIG9mIGEgc2Vjb25kCisvLyAoVkFMVUUvMl4zMiBzZWNvbmRzKSBhdCB0aGUgdGltZSB3aGVuIFNFQyByZWdpc3RlciB3YXMgcmVhZC4KKy8vCisvLyBFeGFtcGxlcyA6CisvLyAtIDB4MDAwMF8wMDAwID0gMC4wIHNlYworLy8gLSAweDQwMDBfMDAwMCA9IDAuMjUgc2VjCisvLyAtIDB4ODAwMF8wMDAwID0gMC41IHNlYworLy8gLSAweEMwMDBfMDAwMCA9IDAuNzUgc2VjCisjZGVmaW5lIEFPTl9SVENfU1VCU0VDX1ZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQU9OX1JUQ19TVUJTRUNfVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBBT05fUlRDX1NVQlNFQ19WQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1JUQ19PX1NVQlNFQ0lOQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzIzOjBdIFZBTFVFSU5DCisvLworLy8gVGhpcyB2YWx1ZSBjb21wZW5zYXRlcyBmb3IgYSBTQ0xLX0xGIGNsb2NrIHdoaWNoIGhhcyBhbiBvZmZzZXQgZnJvbSAzMjc2OAorLy8gSHouCisvLworLy8gVGhlIGNvbXBlbnNhdGlvbiB2YWx1ZSBjYW4gYmUgZm91bmQgYXMgMl4zOCAvIGZyZXEsIHdoZXJlIGZyZXEgaXMgU0NMS19MRgorLy8gY2xvY2sgZnJlcXVlbmN5IGluIEhlcnR6CisvLworLy8gVGhpcyB2YWx1ZSBpcyBhZGRlZCB0byBTVUJTRUMuVkFMVUUgb24gZXZlcnkgY3ljbGUsIGFuZCBjYXJyeSBvZiB0aGlzIGlzCisvLyBhZGRlZCB0byBTRUMuVkFMVUUuIFRvIHBlcmZvcm0gdGhlIGFkZGl0aW9uLCBiaXRzIFsyMzo2XSBhcmUgYWxpZ25lZCB3aXRoCisvLyBTVUJTRUMuVkFMVUUgYml0cyBbMTc6MF0uIFRoZSByZW1haW5pbmcgYml0cyBbNTowXSBhcmUgYWNjdW11bGF0ZWQgaW4gYQorLy8gaGlkZGVuIDYtYml0IHJlZ2lzdGVyIHRoYXQgZ2VuZXJhdGVzIGEgY2FycnkgaW50byB0aGUgYWJvdmUgbWVudGlvbmVkCisvLyBhZGRpdGlvbiBvbiBvdmVyZmxvdy4KKy8vIFRoZSBkZWZhdWx0IHZhbHVlIGNvcnJlc3BvbmRzIHRvIGluY3JlbWVudGluZyBieSBwcmVjaXNlbHkgMS8zMjc2OCBvZiBhCisvLyBzZWNvbmQuCisvLworLy8gTk9URTogVGhpcyByZWdpc3RlciBpcyByZWFkIG9ubHkuIE1vZGlmaWNhdGlvbiBvZiB0aGUgcmVnaXN0ZXIgdmFsdWUgbXVzdCBiZQorLy8gZG9uZSB1c2luZyByZWdpc3RlcnMgQVVYX1dVQzpSVENTVUJTRUNJTkMxICwgIEFVWF9XVUM6UlRDU1VCU0VDSU5DMCBhbmQKKy8vIEFVWF9XVUM6UlRDU1VCU0VDSU5DQ1RMCisjZGVmaW5lIEFPTl9SVENfU1VCU0VDSU5DX1ZBTFVFSU5DX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQU9OX1JUQ19TVUJTRUNJTkNfVkFMVUVJTkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBBT05fUlRDX1NVQlNFQ0lOQ19WQUxVRUlOQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1JUQ19PX0NIQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxOF0gQ0gyX0NPTlRfRU4KKy8vCisvLyBTZXQgdG8gZW5hYmxlIGNvbnRpbnVvdXMgb3BlcmF0aW9uIG9mIENoYW5uZWwgMgorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMl9DT05UX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gyX0NPTlRfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDJfQ09OVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMl9DT05UX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTZdIENIMl9FTgorLy8KKy8vIFJUQyBDaGFubmVsIDIgRW5hYmxlCisvLworLy8gMDogRGlzYWJsZSBSVEMgQ2hhbm5lbCAyCisvLyAxOiBFbmFibGUgUlRDIENoYW5uZWwgMgorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gyX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDJfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzldIENIMV9DQVBUX0VOCisvLworLy8gU2V0IENoYW5uZWwgMSBtb2RlCisvLworLy8gMDogQ29tcGFyZSBtb2RlIChkZWZhdWx0KQorLy8gMTogQ2FwdHVyZSBtb2RlCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gxX0NBUFRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDFfQ0FQVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMV9DQVBUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gxX0NBUFRfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gQ0gxX0VOCisvLworLy8gUlRDIENoYW5uZWwgMSBFbmFibGUKKy8vCisvLyAwOiBEaXNhYmxlIFJUQyBDaGFubmVsIDEKKy8vIDE6IEVuYWJsZSBSVEMgQ2hhbm5lbCAxCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gxX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gxX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbMF0gQ0gwX0VOCisvLworLy8gUlRDIENoYW5uZWwgMCBFbmFibGUKKy8vCisvLyAwOiBEaXNhYmxlIFJUQyBDaGFubmVsIDAKKy8vIDE6IEVuYWJsZSBSVEMgQ2hhbm5lbCAwCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gwX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDBfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gwX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fUlRDX09fQ0gwQ01QCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkFMVUUKKy8vCisvLyBSVEMgQ2hhbm5lbCAwIGNvbXBhcmUgdmFsdWUuCisvLworLy8gQml0IDMxIHRvIDE2IHJlcHJlc2VudHMgc2Vjb25kcyBhbmQgYml0cyAxNSB0byAwIHJlcHJlc2VudHMgc3Vic2Vjb25kcyBvZgorLy8gdGhlIGNvbXBhcmUgdmFsdWUuCisvLworLy8gVGhlIGNvbXBhcmUgdmFsdWUgaXMgY29tcGFyZWQgYWdhaW5zdCBTRUMuVkFMVUUgKDE1OjApIGFuZCBTVUJTRUMuVkFMVUUKKy8vICgzMToxNikgdmFsdWVzIG9mIHRoZSBSZWFsIFRpbWUgQ2xvY2sgcmVnaXN0ZXIuIEEgQ2FubmVsIDAgZXZlbnQgaXMKKy8vIGdlbmVyYXRlZCB3aGVuIHtTRUMuVkFMVUUoMTU6MCksU1VCU0VDLlZBTFVFICgzMToxNil9IGlzIHJlYWNoaW5nIG9yCisvLyBleGNpdGluZyB0aGUgY29tcGFyZSB2YWx1ZS4KKy8vCisvLyBXcml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIgY2FuIHRyaWdnZXIgYW4gaW1tZWRpYXRlKikgZXZlbnQgaW4gY2FzZSB0aGUgbmV3CisvLyBjb21wYXJlIHZhbHVlIG1hdGNoZXMgYSBSZWFsIFRpbWUgQ2xvY2sgIHZhbHVlIGZyb20gMSBzZWNvbmQgaW4gdGhlIHBhc3QgdXAKKy8vIHRpbGwgY3VycmVudCBSZWFsIFRpbWUgQ2xvY2sgdmFsdWUuCisvLworLy8gRXhhbXBsZToKKy8vIFRvIGdlbmVyYXRlIGEgY29tcGFyZSAgNS41IHNlY29uZHMgUlRDIHN0YXJ0LC0gc2V0IHRoaXMgdmFsdWUgPSAweDAwMDVfODAwMAorLy8KKy8vICopIEl0IGNhbiB0YWtlIHVwIHRvIDIgU0NMS19MRiBjbG9jayBjeWNsZXMgYmVmb3JlIGV2ZW50IG9jY3VycyBkdWUgdG8KKy8vIHN5bmNocm9uaXphdGlvbi4KKyNkZWZpbmUgQU9OX1JUQ19DSDBDTVBfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBBT05fUlRDX0NIMENNUF9WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEFPTl9SVENfQ0gwQ01QX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fUlRDX09fQ0gxQ01QCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkFMVUUKKy8vCisvLyBSVEMgQ2hhbm5lbCAxIGNvbXBhcmUgdmFsdWUuCisvLworLy8gQml0IDMxIHRvIDE2IHJlcHJlc2VudHMgc2Vjb25kcyBhbmQgYml0cyAxNSB0byAwIHJlcHJlc2VudHMgc3Vic2Vjb25kcyBvZgorLy8gdGhlIGNvbXBhcmUgdmFsdWUuCisvLworLy8gVGhlIGNvbXBhcmUgdmFsdWUgaXMgY29tcGFyZWQgYWdhaW5zdCBTRUMuVkFMVUUgKDE1OjApIGFuZCBTVUJTRUMuVkFMVUUKKy8vICgzMToxNikgdmFsdWVzIG9mIHRoZSBSZWFsIFRpbWUgQ2xvY2sgcmVnaXN0ZXIuIEEgQ2FubmVsIDAgZXZlbnQgaXMKKy8vIGdlbmVyYXRlZCB3aGVuIHtTRUMuVkFMVUUoMTU6MCksU1VCU0VDLlZBTFVFICgzMToxNil9IGlzIHJlYWNoaW5nIG9yCisvLyBleGNpdGluZyB0aGUgY29tcGFyZSB2YWx1ZS4KKy8vCisvLyBXcml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIgY2FuIHRyaWdnZXIgYW4gaW1tZWRpYXRlKikgZXZlbnQgaW4gY2FzZSB0aGUgbmV3CisvLyBjb21wYXJlIHZhbHVlIG1hdGNoZXMgYSBSZWFsIFRpbWUgQ2xvY2sgIHZhbHVlIGZyb20gMSBzZWNvbmQgaW4gdGhlIHBhc3QgdXAKKy8vIHRpbGwgY3VycmVudCBSZWFsIFRpbWUgQ2xvY2sgdmFsdWUuCisvLworLy8gRXhhbXBsZToKKy8vIFRvIGdlbmVyYXRlIGEgY29tcGFyZSAgNS41IHNlY29uZHMgUlRDIHN0YXJ0LC0gc2V0IHRoaXMgdmFsdWUgPSAweDAwMDVfODAwMAorLy8KKy8vICopIEl0IGNhbiB0YWtlIHVwIHRvIDIgU0NMS19MRiBjbG9jayBjeWNsZXMgYmVmb3JlIGV2ZW50IG9jY3VycyBkdWUgdG8KKy8vIHN5bmNocm9uaXphdGlvbi4KKyNkZWZpbmUgQU9OX1JUQ19DSDFDTVBfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBBT05fUlRDX0NIMUNNUF9WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEFPTl9SVENfQ0gxQ01QX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fUlRDX09fQ0gyQ01QCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkFMVUUKKy8vCisvLyBSVEMgQ2hhbm5lbCAyIGNvbXBhcmUgdmFsdWUuCisvLworLy8gQml0IDMxIHRvIDE2IHJlcHJlc2VudHMgc2Vjb25kcyBhbmQgYml0cyAxNSB0byAwIHJlcHJlc2VudHMgc3Vic2Vjb25kcyBvZgorLy8gdGhlIGNvbXBhcmUgdmFsdWUuCisvLworLy8gVGhlIGNvbXBhcmUgdmFsdWUgaXMgY29tcGFyZWQgYWdhaW5zdCBTRUMuVkFMVUUgKDE1OjApIGFuZCBTVUJTRUMuVkFMVUUKKy8vICgzMToxNikgdmFsdWVzIG9mIHRoZSBSZWFsIFRpbWUgQ2xvY2sgcmVnaXN0ZXIuIEEgQ2FubmVsIDAgZXZlbnQgaXMKKy8vIGdlbmVyYXRlZCB3aGVuIHtTRUMuVkFMVUUoMTU6MCksU1VCU0VDLlZBTFVFICgzMToxNil9IGlzIHJlYWNoaW5nIG9yCisvLyBleGNpdGluZyB0aGUgY29tcGFyZSB2YWx1ZS4KKy8vCisvLyBXcml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIgY2FuIHRyaWdnZXIgYW4gaW1tZWRpYXRlKikgZXZlbnQgaW4gY2FzZSB0aGUgbmV3CisvLyBjb21wYXJlIHZhbHVlIG1hdGNoZXMgYSBSZWFsIFRpbWUgQ2xvY2sgIHZhbHVlIGZyb20gMSBzZWNvbmQgaW4gdGhlIHBhc3QgdXAKKy8vIHRpbGwgY3VycmVudCBSZWFsIFRpbWUgQ2xvY2sgdmFsdWUuCisvLworLy8gRXhhbXBsZToKKy8vIFRvIGdlbmVyYXRlIGEgY29tcGFyZSAgNS41IHNlY29uZHMgUlRDIHN0YXJ0LC0gc2V0IHRoaXMgdmFsdWUgPSAweDAwMDVfODAwMAorLy8KKy8vICopIEl0IGNhbiB0YWtlIHVwIHRvIDIgU0NMS19MRiBjbG9jayBjeWNsZXMgYmVmb3JlIGV2ZW50IG9jY3VycyBkdWUgdG8KKy8vIHN5bmNocm9uaXphdGlvbi4KKyNkZWZpbmUgQU9OX1JUQ19DSDJDTVBfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBBT05fUlRDX0NIMkNNUF9WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEFPTl9SVENfQ0gyQ01QX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fUlRDX09fQ0gyQ01QSU5DCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkFMVUUKKy8vCisvLyBJZiBDSENUTC5DSDJfQ09OVF9FTiBpcyBzZXQsIHRoaXMgdmFsdWUgaXMgYWRkZWQgdG8gQ0gyQ01QLlZBTFVFIG9uIGV2ZXJ5CisvLyBjaGFubmVsIDIgY29tcGFyZSBldmVudC4KKyNkZWZpbmUgQU9OX1JUQ19DSDJDTVBJTkNfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBBT05fUlRDX0NIMkNNUElOQ19WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEFPTl9SVENfQ0gyQ01QSU5DX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fUlRDX09fQ0gxQ0FQVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTZdIFNFQworLy8KKy8vIFZhbHVlIG9mIFNFQy5WQUxVRSBiaXRzIDE1OjAgYXQgY2FwdHVyZSB0aW1lLgorI2RlZmluZSBBT05fUlRDX0NIMUNBUFRfU0VDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFPTl9SVENfQ0gxQ0FQVF9TRUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgQU9OX1JUQ19DSDFDQVBUX1NFQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTowXSBTVUJTRUMKKy8vCisvLyBWYWx1ZSBvZiBTVUJTRUMuVkFMVUUgYml0cyAzMToxNiBhdCBjYXB0dXJlIHRpbWUuCisjZGVmaW5lIEFPTl9SVENfQ0gxQ0FQVF9TVUJTRUNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQU9OX1JUQ19DSDFDQVBUX1NVQlNFQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBT05fUlRDX0NIMUNBUFRfU1VCU0VDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1JUQ19PX1NZTkMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBXQlVTWQorLy8KKy8vIFRoaXMgcmVnaXN0ZXIgd2lsbCBhbHdheXMgcmV0dXJuIDAsLSBob3dldmVyIGl0IHdpbGwgbm90IHJldHVybiB0aGUgdmFsdWUKKy8vIHVudGlsIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyB3cml0ZSByZXF1ZXN0cyBiZXR3ZWVuIE1DVSBhbmQgQU9OCisvLworLy8gTm90ZTogV3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyIHByaW9yIHRvIHJlYWRpbmcgd2lsbCBmb3JjZSBhIHdhaXQgdW50aWwgbmV4dAorLy8gU0NMS19MRiAgZWRnZS4gVGhpcyBpcyByZWNvbW1lbmRlZCBmb3Igc3luY2luZyByZWFkIHJlZ2lzdGVycyBmcm9tIEFPTiB3aGVuCisvLyB3YWtpbmcgdXAgZnJvbSBzbGVlcAorLy8gRmFpbHVyZSB0byBkbyBzbyBtYXkgcmVzdWx0IGluIHJlYWRpbmcgQU9OIHZhbHVlcyBmcm9tIHByaW9yIHRvIGdvaW5nIHRvCisvLyBzbGVlcAorI2RlZmluZSBBT05fUlRDX1NZTkNfV0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9SVENfU1lOQ19XQlVTWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX1JUQ19TWU5DX1dCVVNZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fUlRDX1NZTkNfV0JVU1lfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQU9OX1JUQ19fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25fc3lzY3RsLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25fc3lzY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmOGFkOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl9zeXNjdGwuaApAQCAtMCwwICsxLDM0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2Fvbl9zeXNjdGxfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQU9OX1NZU0NUTF9IX18KKyNkZWZpbmUgX19IV19BT05fU1lTQ1RMX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEFPTl9TWVNDVEwgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gUG93ZXIgTWFuYWdlbWVudAorI2RlZmluZSBBT05fU1lTQ1RMX09fUFdSQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIFJlc2V0IE1hbmFnZW1lbnQKKyNkZWZpbmUgQU9OX1NZU0NUTF9PX1JFU0VUQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBTbGVlcCBNb2RlCisjZGVmaW5lIEFPTl9TWVNDVExfT19TTEVFUENUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fU1lTQ1RMX09fUFdSQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gRENEQ19BQ1RJVkUKKy8vCisvLyBTZWxlY3QgdG8gdXNlIERDREMgcmVndWxhdG9yIGZvciBWRERSIGluIGFjdGl2ZSBtb2RlCisvLworLy8gMDogVXNlIEdMRE8gZm9yIHJlZ3VsYXRpb24gb2YgVkREUmluIGFjdGl2ZSBtb2RlLgorLy8gMTogVXNlIERDREMgZm9yIHJlZ3VsYXRpb24gb2YgVkREUmluIGFjdGl2ZSBtb2RlLgorI2RlZmluZSBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfQUNUSVZFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQU9OX1NZU0NUTF9QV1JDVExfRENEQ19BQ1RJVkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0FDVElWRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEVYVF9SRUdfTU9ERQorLy8KKy8vIFN0YXR1cyBvZiBzb3VyY2UgZm9yIFZERFJzdXBwbHk6CisvLworLy8gMDogRENEQy9HTERPIGFyZSBnZW5lcmF0aW5nIFZERFIKKy8vIDE6IERDREMvR0xETyBhcmUgYnlwYXNzZWQsIGV4dGVybmFsIHJlZ3VsYXRvciBzdXBwbGllcyBWRERSCisjZGVmaW5lIEFPTl9TWVNDVExfUFdSQ1RMX0VYVF9SRUdfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OX1NZU0NUTF9QV1JDVExfRVhUX1JFR19NT0RFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBT05fU1lTQ1RMX1BXUkNUTF9FWFRfUkVHX01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9TWVNDVExfUFdSQ1RMX0VYVF9SRUdfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRENEQ19FTgorLy8KKy8vIFNlbGVjdCB0byB1c2UgRENEQyByZWd1bGF0b3IgZHVyaW5nIHJlY2hhcmdlIG9mIFZERFIKKy8vCisvLyAwOiBVc2UgR0xETyBmb3IgcmVjaGFyZ2Ugb2YgVkREUgorLy8gMTogVXNlIERDREMgZm9yIHJlY2hhcmdlIG9mIFZERFIKKy8vCisvLyBOb3RlOiBUaGlzIGJpdGZpZWxkIHNob3VsZCBiZSBzZXQgdG8gdGhlIHNhbWUgYXMgRENEQ19BQ1RJVkUKKyNkZWZpbmUgQU9OX1NZU0NUTF9QV1JDVExfRENEQ19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1NZU0NUTF9QV1JDVExfRENEQ19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9TWVNDVExfT19SRVNFVENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIFNZU1JFU0VUCisvLworLy8gQ29sZCByZXNldCByZWdpc3Rlci4gV3JpdGluZyAxIHRvIHRoaXMgYml0ZmllbGQgd2lsbCByZXNldCB0aGUgZW50aXJlIGNoaXAKKy8vIGFuZCBjYXVzZSBib290IGNvZGUgdG8gcnVuIGFnYWluLgorLy8KKy8vIDA6IE5vIGVmZmVjdAorLy8gMTogR2VuZXJhdGUgc3lzdGVtIHJlc2V0LiBBcHBlYXJzIGFzIFNZU1JFU0VUIGluIFJFU0VUX1NSQy4KKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9TWVNSRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1NZU1JFU0VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfU1lTUkVTRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9TWVNSRVNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzI1XSBCT09UX0RFVF8xX0NMUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMV9DTFIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8xX0NMUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzFfQ0xSX00gICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMV9DTFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gQk9PVF9ERVRfMF9DTFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzBfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9DTFJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8wX0NMUl9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzBfQ0xSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMTddIEJPT1RfREVUXzFfU0VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8xX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzFfU0VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMV9TRVRfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8xX1NFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBCT09UX0RFVF8wX1NFVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8wX1NFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzBfU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9TRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gV1VfRlJPTV9TRAorLy8KKy8vIEEgV2FrZXVwIGZyb20gU0hVVERPV04gb24gYW4gSU8gZXZlbnQgaGFzIG9jY3VycmVkLCBvciBhIHdha2V1cCBmcm9tCisvLyBTSFVURE9XTiBoYXMgb2NjdXJyZWQgYXMgYSByZXN1bHQgb2YgdGhlIGRlYnVnZ2VyIGJlaW5nIGF0dGFjaGVkLi4gKFRDSyBwaW4KKy8vIGJlaW5nIGZvcmNlZCBsb3cpCisvLworLy8gUGxlYXNlIHJlZmVyIHRvIFtJT0M6SU9DRkduLC5XVV9DRkddIGZvciBjb25maWd1cmluZyB0aGUgSU8ncyBhcyB3YWtldXAKKy8vIHNvdXJjZXMuCisvLworLy8gMDogV2FrZXVwIG9jY3VycmVkIGZyb20gY29sZCByZXNldCBvciBicm93biBvdXQgYXMgc2VlbiBpbiBSRVNFVF9TUkMKKy8vIDE6IEEgd2FrZXVwIGhhcyBvY2N1cnJlZCBmcm9tIFNIVVRET1dOCisvLworLy8gTm90ZTogVGhpcyBmbGFnIGNhbiBub3QgYmUgY2xlYXJlZCBhbmQgd2lsbCB0aGVyZWZvciByZW1haW4gdmFsaWQgdW50aWxsCisvLyBwb3dlcm9mZi9yZXNldAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1dVX0ZST01fU0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfV1VfRlJPTV9TRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9XVV9GUk9NX1NEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1dVX0ZST01fU0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIEdQSU9fV1VfRlJPTV9TRAorLy8KKy8vIEEgd2FrZXVwIGZyb20gU0hVVERPV04gb24gYW4gSU8gZXZlbnQgaGFzIG9jY3VycmVkCisvLworLy8gUGxlYXNlIHJlZmVyIHRvIFtJT0M6SU9DRkduLC5XVV9DRkddIGZvciBjb25maWd1cmluZyB0aGUgSU8ncyBhcyB3YWtldXAKKy8vIHNvdXJjZXMuCisvLworLy8gMDogVGhlIHdha2V1cCBkaWQgbm90IG9jY3VyIGZyb20gU0hVVERPV04gb24gYW4gSU8gZXZlbnQKKy8vIDE6IEEgd2FrZXVwIGZyb20gU0hVVERPV04gb2NjdXJyZWQgZnJvbSBhbiBJTyBldmVudAorLy8KKy8vIFRoZSBjYXNlIHdoZXJlIFdVX0ZST01fU0QgaXMgYXNzZXJ0ZWQgYnV0IHRoaXMgYml0ZmllbGQgaXMgbm90IGFzc2VydGVkIHdpbGwKKy8vIG9ubHkgb2NjdXIgaW4gYSBkZWJ1ZyBzZXNzaW9uLiBUaGUgYm9vdCBjb2RlIHdpbGwgbm90IHByb2NlZWQgd2l0aCB3YWtldXAKKy8vIGZyb20gU0hVVERPV04gcHJvY2VkdXJlIHVudGlsIHRoaXMgYml0ZmllbGQgaXMgYXNzZXJ0ZWQgYXMgd2VsbC4KKy8vCisvLyBOb3RlOiBUaGlzIGZsYWcgY2FuIG5vdCBiZSBjbGVhcmVkIGFuZCB3aWxsIHRoZXJlZm9yIHJlbWFpbiB2YWxpZCB1bnRpbGwKKy8vIHBvd2Vyb2ZmL3Jlc2V0CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfR1BJT19XVV9GUk9NX1NEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9HUElPX1dVX0ZST01fU0RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0dQSU9fV1VfRlJPTV9TRF9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfR1BJT19XVV9GUk9NX1NEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gQk9PVF9ERVRfMQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8xX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gQk9PVF9ERVRfMAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8wX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gVkREU19MT1NTX0VOX09WUgorLy8KKy8vIE92ZXJyaWRlIG9mIFZERFNfTE9TU19FTgorLy8KKy8vIDA6IEJyb3duIG91dCBkZXRlY3Qgb2YgVkREUyBpcyBpZ25vcmVkLCB1bmxlc3MgVkREU19MT1NTX0VOPTEKKy8vIDE6IEJyb3duIG91dCBkZXRlY3Qgb2YgVkREUyBnZW5lcmF0ZXMgc3lzdGVtIHJlc2V0IChyZWdhcmRsZXNzIG9mCisvLyBWRERTX0xPU1NfRU4pCisvLworLy8gVGhpcyBiaXQgY2FuIGJlIGxvY2tlZAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFNfTE9TU19FTl9PVlIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREU19MT1NTX0VOX09WUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERTX0xPU1NfRU5fT1ZSX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFNfTE9TU19FTl9PVlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIFZERFJfTE9TU19FTl9PVlIKKy8vCisvLyBPdmVycmlkZSBvZiBWRERSX0xPU1NfRU4KKy8vCisvLyAwOiBCcm93biBvdXQgZGV0ZWN0IG9mIFZERFIgaXMgaWdub3JlZCwgdW5sZXNzIFZERFJfTE9TU19FTj0xCisvLyAxOiBCcm93biBvdXQgZGV0ZWN0IG9mIFZERFIgZ2VuZXJhdGVzIHN5c3RlbSByZXNldCAocmVnYXJkbGVzcyBvZgorLy8gVkREUl9MT1NTX0VOKQorLy8KKy8vIFRoaXMgYml0IGNhbiBiZSBsb2NrZWQKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERSX0xPU1NfRU5fT1ZSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFJfTE9TU19FTl9PVlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREUl9MT1NTX0VOX09WUl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERSX0xPU1NfRU5fT1ZSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBWRERfTE9TU19FTl9PVlIKKy8vCisvLyBPdmVycmlkZSBvZiBWRERfTE9TU19FTgorLy8KKy8vIDA6IEJyb3duIG91dCBkZXRlY3Qgb2YgVkREIGlzIGlnbm9yZWQsIHVubGVzcyBWRERfTE9TU19FTj0xCisvLyAxOiBCcm93biBvdXQgZGV0ZWN0IG9mIFZERCBnZW5lcmF0ZXMgc3lzdGVtIHJlc2V0IChyZWdhcmRsZXNzIG9mCisvLyBWRERfTE9TU19FTikKKy8vCisvLyBUaGlzIGJpdCBjYW4gYmUgbG9ja2VkCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREX0xPU1NfRU5fT1ZSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERfTE9TU19FTl9PVlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERF9MT1NTX0VOX09WUl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREX0xPU1NfRU5fT1ZSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbN10gVkREU19MT1NTX0VOCisvLworLy8gQ29udHJvbHMgcmVzZXQgZ2VuZXJhdGlvbiBpbiBjYXNlIFZERFMgaXMgbG9zdAorLy8KKy8vIDA6IEJyb3duIG91dCBkZXRlY3Qgb2YgVkREUyBpcyBpZ25vcmVkLCB1bmxlc3MgVkREU19MT1NTX0VOX09WUj0xCisvLyAxOiBCcm93biBvdXQgZGV0ZWN0IG9mIFZERFMgZ2VuZXJhdGVzIHN5c3RlbSByZXNldAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFNfTE9TU19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREU19MT1NTX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERTX0xPU1NfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFNfTE9TU19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFZERFJfTE9TU19FTgorLy8KKy8vIENvbnRyb2xzIHJlc2V0IGdlbmVyYXRpb24gaW4gY2FzZSBWRERSIGlzIGxvc3QKKy8vCisvLyAwOiBCcm93biBvdXQgZGV0ZWN0IG9mIFZERFIgaXMgaWdub3JlZCwgdW5sZXNzIFZERFJfTE9TU19FTl9PVlI9MQorLy8gMTogQnJvd24gb3V0IGRldGVjdCBvZiBWRERSIGdlbmVyYXRlcyBzeXN0ZW0gcmVzZXQKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERSX0xPU1NfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFJfTE9TU19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREUl9MT1NTX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERSX0xPU1NfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBWRERfTE9TU19FTgorLy8KKy8vIENvbnRyb2xzIHJlc2V0IGdlbmVyYXRpb24gaW4gY2FzZSBWREQgaXMgbG9zdAorLy8KKy8vIDA6IEJyb3duIG91dCBkZXRlY3Qgb2YgVkREIGlzIGlnbm9yZWQsIHVubGVzcyBWRERfTE9TU19FTl9PVlI9MQorLy8gMTogQnJvd24gb3V0IGRldGVjdCBvZiBWREQgZ2VuZXJhdGVzIHN5c3RlbSByZXNldAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERF9MT1NTX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREX0xPU1NfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERfTE9TU19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERF9MT1NTX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIENMS19MT1NTX0VOCisvLworLy8gQ29udHJvbHMgcmVzZXQgZ2VuZXJhdGlvbiBpbiBjYXNlIFNDTEtfTEYgaXMgbG9zdC4gIChwcm92aWRlZCB0aGF0IGNsb2NrCisvLyBsb3NzIGRldGVjdGlvbiBpcyBlbmFibGVkIGJ5IERESV8wX09TQzpDVEwwLkNMS19MT1NTX0VOKQorLy8KKy8vIE5vdGU6IENsb2NrIGxvc3MgcmVzZXQgZ2VuZXJhdGlvbiBtdXN0IGJlIGRpc2FibGVkIGJlZm9yZSBTQ0xLX0xGIGNsb2NrCisvLyBzb3VyY2UgaXMgY2hhbmdlZCBpbiAgRERJXzBfT1NDOkNUTDAuU0NMS19MRl9TUkNfU0VMIGFuZCByZW1haW4gZGlzYWJsZWQKKy8vIHVudGlsbCB0aGUgY2hhbmdlIGlzIGNvbmZpcm1lZCBpbiBERElfMF9PU0M6U1RBVDAuU0NMS19MRl9TUkMuIEZhaWx1cmUgdG8gZG8KKy8vIHNvIG1heSByZXN1bHQgaW4gYSBzcHVyaW91cyBzeXN0ZW0gcmVzZXQuIENsb2NrIGxvc3MgcmVzZXQgZ2VuZXJhdGlvbiBjYW4gYmUKKy8vIGRpc2FibGVkIHRocm91Z2ggdGhpcyBiaXRmaWVsZCBvciBieSBjbGVhcmluZyAgRERJXzBfT1NDOkNUTDAuQ0xLX0xPU1NfRU4KKy8vCisvLyAwOiBDbG9jayBsb3NzIGlzIGlnbm9yZWQKKy8vIDE6IENsb2NrIGxvc3MgZ2VuZXJhdGVzIHN5c3RlbSByZXNldAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0NMS19MT1NTX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQ0xLX0xPU1NfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9DTEtfTE9TU19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0NMS19MT1NTX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjFdIFJFU0VUX1NSQworLy8KKy8vIFNob3dzIHRoZSBzb3VyY2Ugb2YgdGhlIGxhc3Qgc3lzdGVtIHJlc2V0OgorLy8gT2NjdXJyZW5jZSBvZiBvbmUgb2YgdGhlIHJlc2V0IHNvdXJjZXMgbWF5IHRyaWdnZXIgc2V2ZXJhbCBvdGhlciByZXNldAorLy8gc291cmNlcyBhcyBlc3NlbnRpYWwgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgdW5kZXJnb2luZyByZXNldC4gVGhpcyBmaWVsZAorLy8gd2lsbCByZXBvcnQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIHJlc2V0IChub3QgdGhlIG90aGVyIHJlc2V0cyB0aGF0IGFyZQorLy8gY29uc2VxdWVuY2Ugb2YgdGhlIHN5c3RlbSByZXNldCkuCisvLyBUbyBzdXBwb3J0IHRoaXMgZmVhdHVyZSB0aGUgYWN0dWFsIHJlZ2lzdGVyIGlzIG5vdCBjYXB0dXJlZCBiZWZvcmUgdGhlIHJlc2V0CisvLyBzb3VyY2UgYmVpbmcgcmVsZWFzZWQuIElmIGEgbmV3IHJlc2V0IHNvdXJjZSBpcyB0cmlnZ2VyZWQsIGluIGEgd2luZG93IG9mCisvLyBmb3VyICAzMiBrSHogcGVyaW9kcyBhZnRlciB0aGUgcHJldmlvdXMgaGFzIGJlZW4gcmVsZWFzZWQsICB0aGlzIHJlZ2lzdGVyCisvLyBtYXkgaW5kaWNhdGUgUG93ZXIgb24gcmVzZXQgYXMgc291cmNlLgorLy8gRU5VTXM6CisvLyBXQVJNUkVTRVQgICAgICAgICAgICAgICAgU29mdHdhcmUgcmVzZXQgdmlhIFBSQ00gd2FybSByZXNldCByZXF1ZXN0CisvLyBTWVNSRVNFVCAgICAgICAgICAgICAgICAgU29mdHdhcmUgcmVzZXQgdmlhIFNZU1JFU0VUIHJlZ2lzdGVyCisvLyBDTEtfTE9TUyAgICAgICAgICAgICAgICAgQ2xvY2sgbG9zcyBkZXRlY3QKKy8vIFZERFJfTE9TUyAgICAgICAgICAgICAgICBCcm93biBvdXQgZGV0ZWN0IG9uIFZERFIKKy8vIFZERF9MT1NTICAgICAgICAgICAgICAgICBCcm93biBvdXQgZGV0ZWN0IG9uIFZERAorLy8gVkREU19MT1NTICAgICAgICAgICAgICAgIEJyb3duIG91dCBkZXRlY3Qgb24gVkREUworLy8gUElOX1JFU0VUICAgICAgICAgICAgICAgIFJlc2V0IHBpbgorLy8gUFdSX09OICAgICAgICAgICAgICAgICAgIFBvd2VyIG9uIHJlc2V0CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1dBUk1SRVNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfU1lTUkVTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19DTEtfTE9TUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1ZERFJfTE9TUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfVkREX0xPU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19WRERTX0xPU1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1BJTl9SRVNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfUFdSX09OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9TWVNDVExfT19TTEVFUENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIElPX1BBRF9TTEVFUF9ESVMKKy8vCisvLyBDb250cm9scyB0aGUgSS9PIHBhZCBzbGVlcCBtb2RlLiBUaGUgYm9vdCBjb2RlIHdpbGwgc2V0IHRoaXMgYml0ZmllbGQKKy8vIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHdha2luZyB1cCBmcm9tIGEgU0hVVERPV04gKCBSRVNFVENUTC5XVV9GUk9NX1NEIGlzIHNldAorLy8gKS4KKy8vCisvLyAwOiBJL08gcGFkIHNsZWVwIG1vZGUgaXMgZW5hYmxlZCwgaWUgYWxsIHBhZHMgYXJlIGxhdGNoZWQgYW5kIGNhbiBub3QKKy8vIHRvZ2dsZS4KKy8vIDE6IEkvTyBwYWQgc2xlZXAgbW9kZSBpcyBkaXNhYmxlZAorLy8KKy8vIEFwcGxpY2F0aW9uIHNvZnR3YXJlIG1heSB3YW50IHRvIHJlY29uZmlndXJlIHRoZSBzdGF0ZSBmb3IgYWxsIElPJ3MgYmVmb3JlCisvLyBzZXR0aW5nIHRoaXMgYml0ZmllbGQgdXBvbiB3YWtpbmcgdXAgZnJvbSBhIFNIVVRET1dOLgorI2RlZmluZSBBT05fU1lTQ1RMX1NMRUVQQ1RMX0lPX1BBRF9TTEVFUF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9TWVNDVExfU0xFRVBDVExfSU9fUEFEX1NMRUVQX0RJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9TTEVFUENUTF9JT19QQURfU0xFRVBfRElTX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fU1lTQ1RMX1NMRUVQQ1RMX0lPX1BBRF9TTEVFUF9ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQU9OX1NZU0NUTF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25fd3VjLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25fd3VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5OGQ1MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl93dWMuaApAQCAtMCwwICsxLDY3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2Fvbl93dWNfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQU9OX1dVQ19IX18KKyNkZWZpbmUgX19IV19BT05fV1VDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEFPTl9XVUMgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gTUNVIENsb2NrIE1hbmFnZW1lbnQKKyNkZWZpbmUgQU9OX1dVQ19PX01DVUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBBVVggQ2xvY2sgTWFuYWdlbWVudAorI2RlZmluZSBBT05fV1VDX09fQVVYQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIE1DVSBDb25maWd1cmF0aW9uCisjZGVmaW5lIEFPTl9XVUNfT19NQ1VDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gQVVYIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgQU9OX1dVQ19PX0FVWENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBBVVggQ29udHJvbAorI2RlZmluZSBBT05fV1VDX09fQVVYQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIFBvd2VyIFN0YXR1cworI2RlZmluZSBBT05fV1VDX09fUFdSU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIFNodXRkb3duIENvbnRyb2wKKyNkZWZpbmUgQU9OX1dVQ19PX1NIVVRET1dOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBDb250cm9sIDAKKyNkZWZpbmUgQU9OX1dVQ19PX0NUTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBDb250cm9sIDEKKyNkZWZpbmUgQU9OX1dVQ19PX0NUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBSZWNoYXJnZSBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgQU9OX1dVQ19PX1JFQ0hBUkdFQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorCisvLyBSZWNoYXJnZSBDb250cm9sbGVyIFN0YXR1cworI2RlZmluZSBBT05fV1VDX09fUkVDSEFSR0VTVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisKKy8vIE9zY2lsbGF0b3IgQ29uZmlndXJhdGlvbgorI2RlZmluZSBBT05fV1VDX09fT1NDQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisKKy8vIEpUQUcgQ29uZmlndXJhdGlvbgorI2RlZmluZSBBT05fV1VDX09fSlRBR0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisKKy8vIEpUQUcgVVNFUkNPREUKKyNkZWZpbmUgQU9OX1dVQ19PX0pUQUdVU0VSQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9XVUNfT19NQ1VDTEsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBSQ09TQ19IRl9DQUxfRE9ORQorLy8KKy8vIE1DVSBib290Y29kZSB3aWxsIHNldCB0aGlzIGJpdCB3aGVuIFJDT1NDX0hGIGlzIGNhbGlicmF0ZWQuICBUaGUgRkxBU0ggY2FuCisvLyBub3QgYmUgdXNlZCB1bnRpbCB0aGlzIGJpdCBpcyBzZXQuCisvLworLy8gMTogUkNPU0NfSEYgaXMgY2FsaWJyYXRlZCB0byA0OCBNSHosIGFsbG93aW5nIEZMQVNIIHRvIHBvd2VyIHVwLgorLy8gMDogUkNPU0NfSEYgaXMgbm90IHlldCBjYWxpYnJhdGVkLCBpZSBGTEFTSCBtdXN0IG5vdCBhc3N1bWUgdGhhdCB0aGUgU0NMS19IRgorLy8gaXMgc2FmZQorI2RlZmluZSBBT05fV1VDX01DVUNMS19SQ09TQ19IRl9DQUxfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9XVUNfTUNVQ0xLX1JDT1NDX0hGX0NBTF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDTEtfUkNPU0NfSEZfQ0FMX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBT05fV1VDX01DVUNMS19SQ09TQ19IRl9DQUxfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgIFsxOjBdIFBXUl9EV05fU1JDCisvLworLy8gQ29udHJvbHMgdGhlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIGVudGlyZSBNQ1UgZG9tYWluIHdoaWxlIE1DVSBpcyByZXF1ZXN0aW5nCisvLyBwb3dlcmRvd24uCisvLworLy8gV2hlbiBNQ1UgcmVxdWVzdHMgcG93ZXJkb3duIHdpdGggU0NMS19IRiBhcyBzb3VyY2UsIHRoZW4gV1VDIHdpbGwgc3dpdGNoCisvLyBvdmVyIHRvIHRoaXMgY2xvY2sgc291cmNlIGR1cmluZyBwb3dlcmRvd24sIGFuZCBhdXRvbWF0aWNhbGx5IHN3aXRjaCBiYWNrIHRvCisvLyBTQ0xLX0hGIHdoZW4gTUNVIGlzIG5vIGxvbmdlciByZXF1ZXN0aW5nIHBvd2VyZG93biBhbmQgc3lzdGVtIGlzIGJhY2sgaW4KKy8vIGFjdGl2ZSBtb2RlLgorLy8gRU5VTXM6CisvLyBTQ0xLX0xGICAgICAgICAgICAgICAgICAgVXNlIFNDTEtfTEYgaW4gUG93ZXJkb3duCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gY2xvY2sgaW4gUG93ZXJkb3duCisjZGVmaW5lIEFPTl9XVUNfTUNVQ0xLX1BXUl9EV05fU1JDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDTEtfUFdSX0RXTl9TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBT05fV1VDX01DVUNMS19QV1JfRFdOX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9XVUNfTUNVQ0xLX1BXUl9EV05fU1JDX1NDTEtfTEYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDTEtfUFdSX0RXTl9TUkNfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9XVUNfT19BVVhDTEsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzEyOjExXSBQV1JfRFdOX1NSQworLy8KKy8vIFdoZW4gQVVYIHJlcXVlc3RzIHBvd2VyZG93biB3aXRoIFNDTEtfSEYgYXMgc291cmNlLCB0aGVuIFdVQyB3aWxsIHN3aXRjaAorLy8gb3ZlciB0byB0aGlzIGNsb2NrIHNvdXJjZSBkdXJpbmcgcG93ZXJkb3duLCBhbmQgYXV0b21hdGljYWxseSBzd2l0Y2ggYmFjayB0bworLy8gU0NMS19IRiB3aGVuIEFVWCBzeXN0ZW0gaXMgYmFjayBpbiBhY3RpdmUgbW9kZQorLy8gRU5VTXM6CisvLyBTQ0xLX0xGICAgICAgICAgICAgICAgICAgVXNlIFNDTEtfTEYgaW4gUG93ZXJkb3duCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gY2xvY2sgaW4gUG93ZXJkb3duCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1BXUl9EV05fU1JDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfUFdSX0RXTl9TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwMAorI2RlZmluZSBBT05fV1VDX0FVWENMS19QV1JfRFdOX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1BXUl9EV05fU1JDX1NDTEtfTEYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfUFdSX0RXTl9TUkNfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogIFsxMDo4XSBTQ0xLX0hGX0RJVgorLy8KKy8vIFNlbGVjdCB0aGUgQVVYIGNsb2NrIGRpdmlkZXIgZm9yIFNDTEtfSEYKKy8vCisvLyBOQjogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBjaGFuZ2UgdGhlIEFVWCBjbG9jayBkaXZpZGVyIHdoaWxlIFNDTEtfSEYgaXMKKy8vIGFjdGl2ZSBzb3VyY2UgZm9yIEFVWAorLy8gRU5VTXM6CisvLyBESVYyNTYgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDI1NgorLy8gRElWMTI4ICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAxMjgKKy8vIERJVjY0ICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgNjQKKy8vIERJVjMyICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMzIKKy8vIERJVjE2ICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMTYKKy8vIERJVjggICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgOAorLy8gRElWNCAgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSA0CisvLyBESVYyICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDIKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfRElWMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9ESVYxMjggICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX0RJVjY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDAKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfRElWMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9ESVYxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX0RJVjggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfRElWNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9ESVYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFsyOjBdIFNSQworLy8KKy8vIFNlbGVjdHMgdGhlIGNsb2NrIHNvdXJjZSBmb3IgQVVYOgorLy8KKy8vIE5COiBTd2l0Y2hpbmcgdGhlIGNsb2NrIHNvdXJjZSBpcyBndWFyYW50ZWVkIHRvIGJlIGdsaXRjaGxlc3MKKy8vIEVOVU1zOgorLy8gU0NMS19MRiAgICAgICAgICAgICAgICAgIExGIENsb2NrIChTQ0xLX0xGKQorLy8gU0NMS19IRiAgICAgICAgICAgICAgICAgIEhGIENsb2NrIChTQ0xLX0hGKQorI2RlZmluZSBBT05fV1VDX0FVWENMS19TUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fV1VDX0FVWENMS19TUkNfU0NMS19MRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1NSQ19TQ0xLX0hGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fV1VDX09fTUNVQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxN10gVklSVF9PRkYKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fV1VDX01DVUNGR19WSVJUX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEFPTl9XVUNfTUNVQ0ZHX1ZJUlRfT0ZGX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDRkdfVklSVF9PRkZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBT05fV1VDX01DVUNGR19WSVJUX09GRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIEZJWEVEX1dVX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX1dVQ19NQ1VDRkdfRklYRURfV1VfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBT05fV1VDX01DVUNGR19GSVhFRF9XVV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFPTl9XVUNfTUNVQ0ZHX0ZJWEVEX1dVX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDRkdfRklYRURfV1VfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICBbMzowXSBTUkFNX1JFVF9FTgorLy8KKy8vIE1DVSBTUkFNIGlzIHBhcnRpdGlvbmVkIGludG8gNCBiYW5rcyAuIFRoaXMgcmVnaXN0ZXIgY29udHJvbHMgd2hpY2ggb2YgdGhlCisvLyBiYW5rcyB0aGF0IGhhcyByZXRlbnRpb24gZHVyaW5nIE1DVSBwb3dlciBvZmYKKy8vIEVOVU1zOgorLy8gUkVUX0ZVTEwgICAgICAgICAgICAgICAgIFJldGVudGlvbiBvbiBmb3IgYWxsIGJhbmtzIChTUkFNOkJBTkswLCBTUkFNOkJBTksxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgLFNSQU06QkFOSzIgYW5kIFNSQU06QkFOSzMpCisvLyBSRVRfTEVWRUwzICAgICAgICAgICAgICAgUmV0ZW50aW9uIG9uIGZvciBTUkFNOkJBTkswLCBTUkFNOkJBTksxIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNSQU06QkFOSzIKKy8vIFJFVF9MRVZFTDIgICAgICAgICAgICAgICBSZXRlbnRpb24gb24gZm9yIFNSQU06QkFOSzAgYW5kIFNSQU06QkFOSzEKKy8vIFJFVF9MRVZFTDEgICAgICAgICAgICAgICBSZXRlbnRpb24gb24gZm9yIFNSQU06QkFOSzAKKy8vIFJFVF9OT05FICAgICAgICAgICAgICAgICBSZXRlbnRpb24gaXMgZGlzYWJsZWQKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDRkdfU1JBTV9SRVRfRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBT05fV1VDX01DVUNGR19TUkFNX1JFVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFPTl9XVUNfTUNVQ0ZHX1NSQU1fUkVUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDRkdfU1JBTV9SRVRfRU5fUkVUX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBT05fV1VDX01DVUNGR19TUkFNX1JFVF9FTl9SRVRfTEVWRUwzICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFPTl9XVUNfTUNVQ0ZHX1NSQU1fUkVUX0VOX1JFVF9MRVZFTDIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDRkdfU1JBTV9SRVRfRU5fUkVUX0xFVkVMMSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fV1VDX01DVUNGR19TUkFNX1JFVF9FTl9SRVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1dVQ19PX0FVWENGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFJBTV9SRVRfRU4KKy8vCisvLyBUaGlzIGJpdCBjb250cm9scyByZXRlbnRpb24gbW9kZSBmb3IgdGhlIEFVWF9SQU06QkFOSzA6CisvLworLy8gMDogUmV0ZW50aW9uIGlzIGRpc2FibGVkCisvLyAxOiBSZXRlbnRpb24gaXMgZW5hYmxlZAorLy8KKy8vIE5COiBJZiByZXRlbnRpb24gaXMgZGlzYWJsZWQsIHRoZSBBVVhfUkFNIHdpbGwgYmUgcG93ZXJlZCBvZmYgd2hlbiBpdCB3b3VsZAorLy8gb3RoZXJ3aXNlIGJlIHB1dCBpbiByZXRlbnRpb24gbW9kZQorI2RlZmluZSBBT05fV1VDX0FVWENGR19SQU1fUkVUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0ZHX1JBTV9SRVRfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX1dVQ19BVVhDRkdfUkFNX1JFVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fV1VDX0FVWENGR19SQU1fUkVUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1dVQ19PX0FVWENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIFJFU0VUX1JFUQorLy8KKy8vIFJlc2V0IHJlcXVlc3QgZm9yIEFVWC4gV3JpdGluZyAxIHRvIHRoaXMgcmVnaXN0ZXIgd2lsbCBhc3NlcnQgcmVzZXQgdG8gQVVYLgorLy8gVGhlIHJlc2V0IHdpbGwgYmUgaGVsZCB1bnRpbCB0aGUgYml0IGlzIGNsZWFyZWQgYWdhaW4uCisvLworLy8gMDogQVVYIHJlc2V0IHBpbiB3aWxsIGJlIGRlYXNzZXJ0ZWQKKy8vIDE6IEFVWCByZXNldCBwaW4gd2lsbCBiZSBhc3NlcnRlZAorI2RlZmluZSBBT05fV1VDX0FVWENUTF9SRVNFVF9SRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEFPTl9XVUNfQVVYQ1RMX1JFU0VUX1JFUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQU9OX1dVQ19BVVhDVExfUkVTRVRfUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBBT05fV1VDX0FVWENUTF9SRVNFVF9SRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICAgWzJdIFNDRV9SVU5fRU4KKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgQVVYX1NDRSBleGVjdXRpb24uIEFVWF9TQ0UgZXhlY3V0aW9uIHdpbGwgYmVnaW4KKy8vIHdoZW4gQVVYIERvbWFpbiBpcyBwb3dlcmVkIGFuZCBlaXRoZXIgdGhpcyBvciBBVVhfU0NFOkNUTC5DTEtfRU4gaXMgc2V0LgorLy8KKy8vIFNldHRpbmcgdGhpcyBiaXQgd2lsbCBhc3N1cmUgdGhhdCBBVVhfU0NFIGV4ZWN1dGlvbiBzdGFydHMgYXMgc29vbiBhcyBBVVgKKy8vIHBvd2VyIGRvbWFpbiBpcyB3b2tlbiB1cC4gKCAgQVVYX1NDRTpDVEwuQ0xLX0VOIHdpbGwgYmUgcmVzZXQgdG8gMCBpZiBBVVgKKy8vIHBvd2VyIGRvbWFpbiBoYXMgYmVlbiBvZmYpCisvLworLy8gMDogQVVYX1NDRSBleGVjdXRpb24gd2lsbCBiZSBkaXNhYmxlZCBpZiBBVVhfU0NFOkNUTC5DTEtfRU4gaXMgMAorLy8gMTogQVVYX1NDRSBleGVjdXRpb24gaXMgZW5hYmxlZC4KKyNkZWZpbmUgQU9OX1dVQ19BVVhDVExfU0NFX1JVTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBT05fV1VDX0FVWENUTF9TQ0VfUlVOX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFPTl9XVUNfQVVYQ1RMX1NDRV9SVU5fRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX1dVQ19BVVhDVExfU0NFX1JVTl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBTV0VWCisvLworLy8gV3JpdGluZyAxIHNldHMgdGhlIHNvZnR3YXJlIGV2ZW50IHRvIHRoZSBBVVggZG9tYWluLCB3aGljaCBjYW4gYmUgcmVhZAorLy8gdGhyb3VnaCBBVVhfV1VDOldVRVZGTEFHUy5BT05fU1cuCisvLworLy8gVGhpcyBldmVudCBpcyBub3JtYWxseSBjbGVhcmVkIGJ5IEFVWF9TQ0UgdGhyb3VnaCB0aGUKKy8vIEFVWF9XVUM6V1VFVkNMUi5BT05fU1cuIEl0IGNhbiBhbHNvIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAwIHRvIHRoaXMKKy8vIHJlZ2lzdGVyLgorLy8KKy8vIFJlYWRpbmcgMCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIG91dHN0YW5kaW5nIHNvZnR3YXJlIGV2ZW50IGZvciBBVVguCisvLworLy8gTm90ZSB0aGF0IGl0IGNhbiB0YWtlIHVwIHRvIDEsNSBTQ0xLX0xGIGNsb2NrIGN5Y2xlcyB0byBjbGVhciB0aGUgZXZlbnQgZnJvbQorLy8gQVVYLgorI2RlZmluZSBBT05fV1VDX0FVWENUTF9TV0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9XVUNfQVVYQ1RMX1NXRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQU9OX1dVQ19BVVhDVExfU1dFVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fV1VDX0FVWENUTF9TV0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEFVWF9GT1JDRV9PTgorLy8KKy8vIEZvcmNlcyB0aGUgQVVYIGRvbWFpbiBpbnRvIGFjdGl2ZSBtb2RlLCBvdmVycmlkaW5nIHRoZSByZXF1ZXN0cyBmcm9tCisvLyBBVVhfV1VDOlBXUk9GRlJFUSwgQVVYX1dVQzpQV1JEV05SRVEgYW5kIEFVWF9XVUM6TUNVQlVTQ1RMLgorLy8gTm90ZSB0aGF0IGFuIG9uZ29pbmcgQVVYX1dVQzpQV1JPRkZSRVEgd2lsbCBjb21wbGV0ZSBiZWZvcmUgdGhpcyBiaXQgd2lsbAorLy8gc2V0IHRoZSBBVVggZG9tYWluIGludG8gYWN0aXZlIG1vZGUuCisvLworLy8gTUNVIG11c3Qgc2V0IHRoaXMgYml0IGluIG9yZGVyIHRvIGFjY2VzcyB0aGUgQVVYIHBlcmlwaGVyYWxzLgorLy8gVGhlIEFVWCBkb21haW4gc3RhdHVzIGNhbiBiZSByZWFkIGZyb20gUFdSU1RBVC5BVVhfUERfT04KKy8vCisvLyAwOiBBVVggaXMgYWxsb3dlZCB0byBQb3dlciBPZmYsIFBvd2VyIERvd24gb3IgRGlzY29ubmVjdC4KKy8vIDE6IEFVWCAgUG93ZXIgT0ZGLCBQb3dlciBEb3duIG9yIERpc2Nvbm5lY3QgcmVxdWVzdHMgd2lsbCBiZSBvdmVycnVsZWQKKyNkZWZpbmUgQU9OX1dVQ19BVVhDVExfQVVYX0ZPUkNFX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fV1VDX0FVWENUTF9BVVhfRk9SQ0VfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9XVUNfQVVYQ1RMX0FVWF9GT1JDRV9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1dVQ19BVVhDVExfQVVYX0ZPUkNFX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9XVUNfT19QV1JTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOV0gQVVYX1BXUl9EV04KKy8vCisvLyBJbmRpY2F0ZXMgdGhlIEFVWCBwb3dlcmRvd24gc3RhdGUgd2hlbiBBVVggZG9tYWluIGlzIHBvd2VyZWQgdXAuCisvLworLy8gMDogQWN0aXZlIG1vZGUKKy8vIDE6IEFVWCBQb3dlcmRvd24gcmVxdWVzdCBoYXMgYmVlbiBncmFudGVkCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfUFdSX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0FVWF9QV1JfRFdOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfQVVYX1BXUl9EV05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfUFdSX0RXTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbNl0gSlRBR19QRF9PTgorLy8KKy8vIEluZGljYXRlcyBKVEFHIHBvd2VyIHN0YXRlOgorLy8KKy8vIDA6IEpUQUcgaXMgcG93ZXJlZCBvZmYKKy8vIDE6IEpUQUcgaXMgcG93ZXJlZCBvbgorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfSlRBR19QRF9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9KVEFHX1BEX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0pUQUdfUERfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfSlRBR19QRF9PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIEFVWF9QRF9PTgorLy8KKy8vIEluZGljYXRlcyBBVVggcG93ZXIgc3RhdGU6CisvLworLy8gMDogQVVYIGlzIG5vdCByZWFkeSBmb3IgdXNlICggbWF5IGJlIHBvd2VyZWQgb2ZmIG9yIGluIHBvd2VyIHN0YXRlCisvLyB0cmFuc2l0aW9uICkKKy8vIDE6IEFVWCBpcyBwb3dlcmVkIG9uLCBjb25uZWN0ZWQgdG8gYnVzIGFuZCByZWFkeSBmb3IgdXNlLAorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfQVVYX1BEX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfUERfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0FVWF9QRF9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfQVVYX1BEX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIE1DVV9QRF9PTgorLy8KKy8vIEluZGljYXRlcyBNQ1UgcG93ZXIgc3RhdGU6CisvLworLy8gMDogTUNVIFBvd2VyIHNlcXVlbmNpbmcgaXMgbm90IHlldCBmaW5hbGl6ZWQgYW5kIE1DVV9BT05JRiByZWdpc3RlcnMgbWF5IG5vdAorLy8gYmUgcmVsaWFibGUKKy8vIDE6IE1DVSBQb3dlciBzZXF1ZW5jaW5nIGlzIGZpbmFsaXplZCBhbmQgYWxsIE1DVV9BT05JRiByZWdpc3RlcnMgYXJlCisvLyByZWxpYWJsZQorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfTUNVX1BEX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9NQ1VfUERfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX01DVV9QRF9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfTUNVX1BEX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzJdIEFVWF9CVVNfQ09OTkVDVEVECisvLworLy8gSW5kaWNhdGVzIHRoYXQgQVVYIEJ1cyBpcyBjb25uZWN0ZWQ6CisvLworLy8gMDogQVVYIGJ1cyBpcyBub3QgY29ubmVjdGVkCisvLyAxOiBBVVggYnVzIGlzIGNvbm5lY3RlZCAoIGlkbGVfYWNrID0gMCApCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfQlVTX0NPTk5FQ1RFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0FVWF9CVVNfQ09OTkVDVEVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfQVVYX0JVU19DT05ORUNURURfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfQlVTX0NPTk5FQ1RFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQVVYX1JFU0VUX0RPTkUKKy8vCisvLyBJbmRpY2F0ZXMgUmVzZXQgRG9uZSBmcm9tIEFVWDoKKy8vCisvLyAwOiBBVVggaXMgYmVpbmcgcmVzZXQKKy8vIDE6IEFVWCByZXNldCBpcyByZWxlYXNlZAorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfQVVYX1JFU0VUX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfUkVTRVRfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0FVWF9SRVNFVF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfQVVYX1JFU0VUX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1dVQ19PX1NIVVRET1dOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBXcml0aW5nIGEgMSB0byB0aGlzIGJpdCBmb3JjZXMgYSBzaHV0ZG93biByZXF1ZXN0IHRvIGJlIHJlZ2lzdGVyZWQgYW5kIGFsbAorLy8gSS9PIHZhbHVlcyB0byBiZSBsYXRjaGVkIC0gaW4gdGhlIFBBRCByaW5nLCBwb3NzaWJseSBlbmFibGluZyBJL08gd2FrZXVwLgorLy8gV3JpdGluZyAwIHdpbGwgY2FuY2VsIGEgcmVnaXN0ZXJlZCBzaHV0ZG93biByZXF1ZXN0IGFuZCBvcGVuIHRoIEkvTyBsYXRjaGVzCisvLyByZXNpZGluZyBpbiB0aGUgUEFEIHJpbmcuCisvLworLy8gQSByZWdpc3RlcmVkIHNodXRkb3duIHJlcXVlc3QgdGFrZXMgZWZmZWN0IHRoZSBuZXh0IHRpbWUgcG93ZXIgZG93bgorLy8gY29uZGl0aW9ucyBleGlzdHMuIEF0IHRoaXMgdGltZSwgdGhlIHdpbGwgbm90IGVudGVyIFBvd2VyZG93biBtb2RlLCBidXQKKy8vIGluc3RlYWQgaXQgd2lsbCB0dXJuIG9mZiBhbGwgaW50ZXJuYWwgcG93ZXJzdXBwbGllcywgZWZmZWN0aXZlbHkgcHV0dGluZyB0aGUKKy8vIGRldmljZSBpbnRvIFNodXRkb3duIG1vZGUuCisjZGVmaW5lIEFPTl9XVUNfU0hVVERPV05fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1dVQ19TSFVURE9XTl9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fV1VDX1NIVVRET1dOX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9XVUNfU0hVVERPV05fRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fV1VDX09fQ1RMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzhdIFBXUl9EV05fRElTCisvLworLy8gQ29udHJvbHMgd2hldGhlciBNQ1UgYW5kIEFVWCByZXF1ZXN0aW5nIHRvIGJlIHBvd2VyZWQgb2ZmIHdpbGwgZW5hYmxlIGEKKy8vIHRyYW5zaXRpb24gdG8gcG93ZXJkb3duOgorLy8KKy8vIDA6IEVuYWJsZWQKKy8vIDE6IERpc2FibGVkCisjZGVmaW5lIEFPTl9XVUNfQ1RMMF9QV1JfRFdOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQU9OX1dVQ19DVEwwX1BXUl9EV05fRElTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fV1VDX0NUTDBfUFdSX0RXTl9ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9XVUNfQ1RMMF9QV1JfRFdOX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbM10gQVVYX1NSQU1fRVJBU0UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fV1VDX0NUTDBfQVVYX1NSQU1fRVJBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFPTl9XVUNfQ1RMMF9BVVhfU1JBTV9FUkFTRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQU9OX1dVQ19DVEwwX0FVWF9TUkFNX0VSQVNFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBT05fV1VDX0NUTDBfQVVYX1NSQU1fRVJBU0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIE1DVV9TUkFNX0VSQVNFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX1dVQ19DVEwwX01DVV9TUkFNX0VSQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBT05fV1VDX0NUTDBfTUNVX1NSQU1fRVJBU0VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFPTl9XVUNfQ1RMMF9NQ1VfU1JBTV9FUkFTRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX1dVQ19DVEwwX01DVV9TUkFNX0VSQVNFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9XVUNfT19DVEwxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gTUNVX1JFU0VUX1NSQworLy8KKy8vIEluZGljYXRlcyBzb3VyY2Ugb2YgbGFzdCBNQ1UgVm9sdGFnZSBEb21haW4gd2FybSByZXNldCByZXF1ZXN0OgorLy8KKy8vIDA6IE1DVSBTVyByZXNldAorLy8gMTogSlRBRyByZXNldAorLy8KKy8vIFRoaXMgYml0IGNhbiBvbmx5IGJlIGNsZWFyZWQgYnkgd3JpdGluZyBhIDEgdG8gaXQKKyNkZWZpbmUgQU9OX1dVQ19DVEwxX01DVV9SRVNFVF9TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fV1VDX0NUTDFfTUNVX1JFU0VUX1NSQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFPTl9XVUNfQ1RMMV9NQ1VfUkVTRVRfU1JDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OX1dVQ19DVEwxX01DVV9SRVNFVF9TUkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBNQ1VfV0FSTV9SRVNFVAorLy8KKy8vIEluZGljYXRlcyB0eXBlIG9mIGxhc3QgTUNVIFZvbHRhZ2UgRG9tYWluIHJlc2V0OgorLy8KKy8vIDA6IExhc3QgTUNVIHJlc2V0IHdhcyBub3QgYSB3YXJtIHJlc2V0CisvLyAxOiBMYXN0IE1DVSByZXNldCB3YXMgYSB3YXJtIHJlc2V0IChyZXF1ZXN0ZWQgZnJvbSBNQ1Ugb3IgSlRBRyBhcyBpbmRpY2F0ZWQKKy8vIGluIE1DVV9SRVNFVF9TUkMpCisvLworLy8gVGhpcyBiaXQgY2FuIG9ubHkgYmUgY2xlYXJlZCBieSB3cml0aW5nIGEgMSB0byBpdAorI2RlZmluZSBBT05fV1VDX0NUTDFfTUNVX1dBUk1fUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9XVUNfQ1RMMV9NQ1VfV0FSTV9SRVNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX1dVQ19DVEwxX01DVV9XQVJNX1JFU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fV1VDX0NUTDFfTUNVX1dBUk1fUkVTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1dVQ19PX1JFQ0hBUkdFQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gQURBUFRJVkVfRU4KKy8vCisvLyBFbmFibGUgYWRhcHRpdmUgcmVjaGFyZ2UKKy8vCisvLyBOb3RlOiBSZWNoYXJnZSBjYW4gYmUgdHVybmVkIGNvbXBsZXRlbHkgb2YgYnkgc2V0dGluZyBNQVhfUEVSX0U9NyBhbmQKKy8vIE1BWF9QRVJfTT0zMSBhbmQgdGhpcyBiaXRmaWVsZCB0byAwCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfQURBUFRJVkVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19BREFQVElWRV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX0FEQVBUSVZFX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfQURBUFRJVkVfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6IFsyMzoyMF0gQzIKKy8vCisvLyBHYWluIGZhY3RvciBmb3IgYWRhcHRpdmUgcmVjaGFyZ2UgYWxnb3JpdGhtCisvLworLy8gcGVyaW9kX25ldz1wZXJpb2QgKiAoIDErLy0oMl4tQzErMl4tQzIpICkKKy8vIFZhbGlkIHZhbHVlcyBmb3IgQzIgaXMgMiB0byAxMAorLy8KKy8vIE5vdGU6IFJvdW5kaW5nIG1heSBjYXVzZSBhZGFwdGl2ZSByZWNoYXJnZSBub3QgdG8gc3RhcnQgZm9yIHZlcnkgc21hbGwKKy8vIHZhbHVlcyBvZiBib3RoIEdhaW4gYW5kIEluaXRpYWwgcGVyaW9kLiBDcml0ZXJpYSBmb3IgYWxnb3JpdGhtIHRvIHN0YXJ0IGlzCisvLyBNQVgoUEVSSU9EKjJeLUMxLFBFUklPRCoyXi1DMikgPj0gMQorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX0MyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfQzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19DMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogWzE5OjE2XSBDMQorLy8KKy8vIEdhaW4gZmFjdG9yIGZvciBhZGFwdGl2ZSByZWNoYXJnZSBhbGdvcml0aG0KKy8vCisvLyBwZXJpb2RfbmV3PXBlcmlvZCAqICggMSsvLSgyXi1DMSsyXi1DMikgKQorLy8gVmFsaWQgdmFsdWVzIGZvciBDMSBpcyAxIHRvIDEwCisvLworLy8gTm90ZTogUm91bmRpbmcgbWF5IGNhdXNlIGFkYXB0aXZlIHJlY2hhcmdlIG5vdCB0byBzdGFydCBmb3IgdmVyeSBzbWFsbAorLy8gdmFsdWVzIG9mIGJvdGggR2FpbiBhbmQgSW5pdGlhbCBwZXJpb2QuIENyaXRlcmlhIGZvciBhbGdvcml0aG0gdG8gc3RhcnQgaXMKKy8vIE1BWChQRVJJT0QqMl4tQzEsUEVSSU9EKjJeLUMyKSA+PSAxCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfQzFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19DMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX0MxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTU6MTFdIE1BWF9QRVJfTQorLy8KKy8vIFRoaXMgcmVnaXN0ZXIgZGVmaW5lcyB0aGUgbWF4aW11bSBwZXJpb2QgdGhhdCB0aGUgcmVjaGFyZ2UgYWxnb3JpdGhtIGNhbgorLy8gdGFrZSwgaS5lLiBpdCBkZWZpbmVzICB0aGUgbWF4aW11bSBudW1iZXIgb2YgY3ljbGVzIGJldHdlZW4gMiByZWNoYXJnZXMuCisvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgY3ljbGVzIGlzIHNwZWNpZmllZCB3aXRoIGEgNSBiaXQgbWFudGlzc2EgYW5kIDMgYml0CisvLyBleHBvbmVudDoKKy8vIE1BWENZQ0xFUz0oTUFYX1BFUl9NKjE2KzE1KSoyXk1BWF9QRVJfRQorLy8gVGhpcyBmaWVsZCBzZXRzIHRoZSBtYW50aXNzYSBvZiBNQVhDWUNMRVMKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19NQVhfUEVSX01fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGODAwCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfTUFYX1BFUl9NX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICBbMTA6OF0gTUFYX1BFUl9FCisvLworLy8gVGhpcyByZWdpc3RlciBkZWZpbmVzIHRoZSBtYXhpbXVtIHBlcmlvZCB0aGF0IHRoZSByZWNoYXJnZSBhbGdvcml0aG0gY2FuCisvLyB0YWtlLCBpLmUuIGl0IGRlZmluZXMgIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjeWNsZXMgYmV0d2VlbiAyIHJlY2hhcmdlcy4KKy8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjeWNsZXMgaXMgc3BlY2lmaWVkIHdpdGggYSA1IGJpdCBtYW50aXNzYSBhbmQgMyBiaXQKKy8vIGV4cG9uZW50OgorLy8gTUFYQ1lDTEVTPShNQVhfUEVSX00qMTYrMTUpKjJeTUFYX1BFUl9FCisvLyBUaGlzIGZpZWxkIHNldHMgdGhlIGV4cG9uZW50IE1BWENZQ0xFUworI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfTUFYX1BFUl9FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19NQVhfUEVSX0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzozXSBQRVJfTQorLy8KKy8vIE51bWJlciBvZiAzMiBLSHogY2xvY2tzIGJldHdlZW4gYWN0aXZhdGlvbiBvZiByZWNoYXJnZSBjb250cm9sbGVyCisvLyBGb3IgcmVjaGFyZ2UgYWxnb3JpdGhtLCBQRVJJT0QgaXMgdGhlIGluaXRpYWwgcGVyaW9kIHdoZW4gZW50ZXJpbmcgcG93ZXJkb3duCisvLyBtb2RlLiBUaGUgYWRhcHRpdmUgcmVjaGFyZ2UgYWxnb3JpdGhtIHdpbGwgbm90IGNoYW5nZSB0aGlzIHJlZ2lzdGVyCisvLyBQRVJJT0Qgd2lsbCBlZmZlY3RpdmVseSBiZSBhIDE2IGJpdCB2YWx1ZSBjb2RlZCBpbiBhIDUgYml0IG1hbnRpc3NhIGFuZCAzCisvLyBiaXQgZXhwb25lbnQ6CisvLyBUaGlzIGZpZWxkIHNldHMgdGhlIE1hbnRpc3NhIG9mIHRoZSBQZXJpb2QuCisvLyBQRVJJT0Q9KFBFUl9NKjE2KzE1KSoyXlBFUl9FCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfUEVSX01fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19QRVJfTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGOAorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX1BFUl9NX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgIFsyOjBdIFBFUl9FCisvLworLy8gTnVtYmVyIG9mIDMyIEtIeiBjbG9ja3MgYmV0d2VlbiBhY3RpdmF0aW9uIG9mIHJlY2hhcmdlIGNvbnRyb2xsZXIKKy8vIEZvciByZWNoYXJnZSBhbGdvcml0aG0sIFBFUklPRCBpcyB0aGUgaW5pdGlhbCBwZXJpb2Qgd2hlbiBlbnRlcmluZyBwb3dlcmRvd24KKy8vIG1vZGUuIFRoZSBhZGFwdGl2ZSByZWNoYXJnZSBhbGdvcml0aG0gd2lsbCBub3QgY2hhbmdlIHRoaXMgcmVnaXN0ZXIKKy8vIFBFUklPRCB3aWxsIGVmZmVjdGl2ZWx5IGJlIGEgMTYgYml0IHZhbHVlIGNvZGVkIGluIGEgNSBiaXQgbWFudGlzc2EgYW5kIDMKKy8vIGJpdCBleHBvbmVudDoKKy8vIFRoaXMgZmllbGQgc2V0cyB0aGUgRXhwb25lbnQgb2YgdGhlIFBlcmlvZC4KKy8vIFBFUklPRD0oUEVSX00qMTYrMTUpKjJeUEVSX0UKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19QRVJfRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX1BFUl9FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfUEVSX0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fV1VDX09fUkVDSEFSR0VTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsxOToxNl0gVkREUl9TTVBMUworLy8KKy8vIFRoZSBsYXN0IDQgVkREUiBzYW1wbGVzLCBiaXQgMCBiZWluZyB0aGUgbmV3ZXN0LgorLy8KKy8vIFRoZSByZWdpc3RlciBpcyBiZWluZyB1cGRhdGVkIGluIGV2ZXJ5IHJlY2hhcmdlIHBlcmlvZCB3aXRoIGEgc2hpZnQgbGVmdCwKKy8vIGFuZCBiaXQgMCBpcyB1cGRhdGVkIHdpdGggdGhlIGxhc3QgVkREUiBzYW1wbGUsIGllIGEgMSBpcyBzaGlmdGV0IGluIGluIGNhc2UKKy8vIFZERFIgPiBWRERSX3RocmVzaG9sZCBqdXN0IGJlZm9yZSByZWNoYXJnZSBzdGFydHMuIE90aGVyd2lzZSBhIDAgd2lsbCBiZQorLy8gc2hpZnRlZCBpbi4KKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRVNUQVRfVkREUl9TTVBMU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFU1RBVF9WRERSX1NNUExTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VTVEFUX1ZERFJfU01QTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6MF0gTUFYX1VTRURfUEVSCisvLworLy8gVGhlIG1heGltdW0gdmFsdWUgb2YgcmVjaGFyZ2UgcGVyaW9kIHNlZW4gd2l0aCBWRERSPnRocmVzaG9sZC4KKy8vCisvLyBUaGUgVkREUiB2b2x0YWdlIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIHRocmVzaG9sZCB2b2x0YWdlIGF0ICBqdXN0IGJlZm9yZQorLy8gZWFjaCByZWNoYXJnZS4gSWYgVkREUiBpcyBhYm92ZSB0aHJlc2hvbGQsIE1BWF9VU0VEX1BFUiBpcyB1cGRhdGVkIHdpdGggbWF4CisvLyAoIGN1cnJlbnQgcmVjaGFyZ2UgcGVyaWRlOyBNQVhfVVNFRF9QRVIgKSAgVGhpcyB3YXkgTUFYX1VTRURfUEVSIGNhbiB0cmFjaworLy8gdGhlIHJlY2hhcmdlIHBlcmlvZCB3aGVyZSBWRERSIGlzIGRlY2hhcmdlZCB0byB0aGUgdGhyZXNob2xkIHZhbHVlLiBXZSBjYW4KKy8vIHRoZXJlZm9yZSB1c2UgdGhlIHZhbHVlIGFzIGFuIGluZGljYXRpb24gb2YgdGhlIGxlYWthZ2UgY3VycmVudCBkdXJpbmcKKy8vIHJlY2hhcmdlLgorLy8KKy8vIFRoaXMgYml0ZmllbGQgaXMgY2xlYXJlZCB0byAwIHdoZW4gd3JpdGluZyB0aGlzIHJlZ2lzdGVyLgorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFU1RBVF9NQVhfVVNFRF9QRVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VTVEFUX01BWF9VU0VEX1BFUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRVNUQVRfTUFYX1VTRURfUEVSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9XVUNfT19PU0NDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzozXSBQRVJfTQorLy8KKy8vIE51bWJlciBvZiAzMiBLSHogY2xvY2tzIGJldHdlZW4gb3NjaWxsYXRvciBhbXBsaXR1ZGUgY2FsaWJyYXRpb25zLgorLy8gV2hlbiB0aGlzIGNvdW50ZXIgZXhwaXJlcywgYW4gb3NjaWxsYXRvciBhbXBsaXR1ZGUgY29tcGVuc2F0aW9uIGlzIHRyaWdnZXJlZAorLy8gaW1tZWRpYXRlbHkgaW4gQWN0aXZlIG1vZGUuIFdoZW4gdGhpcyBjb3VudGVyIGV4cGlyZXMgaW4gUG93ZXJkb3duIG1vZGUgYW4KKy8vIGludGVybmFsIGZsYWcgaXMgc2V0IHN1Y2ggdGhhdCB0aGUgYW1wbGl0dWRlIGNvbXBlbnNhdGlvbiBpcyBwb3N0cG9uZWQgdW50aWwKKy8vIHRoZSBuZXh0IHJlY2hhcmdlIG9jY3Vycy4KKy8vCisvLyBUaGUgUGVyaW9kIHdpbGwgZWZmZWN0aXZlbHkgYmUgYSAxNiBiaXQgdmFsdWUgY29kZWQgaW4gYSA1IGJpdCBtYW50aXNzYSBhbmQKKy8vIDMgYml0IGV4cG9uZW50CisvLyBQRVJJT0Q9KFBFUl9NKjE2KzE1KSoyXlBFUl9FCisvLyBUaGlzIGZpZWxkIHNldHMgdGhlIG1hbnRpc3NhCisvLyBOb3RlOiBPc2NpbGxhdG9yIGFtcGxpdHVkZSBjYWxpYnJhdGlvbiBpcyB0dXJuZWQgb2Ygd2hlbiBib3RoIHRoaXMgYml0ZmllbGQKKy8vIGFuZCBQRVJfRSBhcmUgc2V0IHRvIDAKKyNkZWZpbmUgQU9OX1dVQ19PU0NDRkdfUEVSX01fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBT05fV1VDX09TQ0NGR19QRVJfTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEY4CisjZGVmaW5lIEFPTl9XVUNfT1NDQ0ZHX1BFUl9NX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgWzI6MF0gUEVSX0UKKy8vCisvLyBOdW1iZXIgb2YgMzIgS0h6IGNsb2NrcyBiZXR3ZWVuIG9zY2lsbGF0b3IgYW1wbGl0dWRlIGNhbGlicmF0aW9ucy4KKy8vIFdoZW4gdGhpcyBjb3VudGVyIGV4cGlyZXMsIGFuIG9zY2lsbGF0b3IgYW1wbGl0dWRlIGNvbXBlbnNhdGlvbiBpcyB0cmlnZ2VyZWQKKy8vIGltbWVkaWF0ZWx5IGluIEFjdGl2ZSBtb2RlLiBXaGVuIHRoaXMgY291bnRlciBleHBpcmVzIGluIFBvd2VyZG93biBtb2RlIGFuCisvLyBpbnRlcm5hbCBmbGFnIGlzIHNldCBzdWNoIHRoYXQgdGhlIGFtcGxpdHVkZSBjb21wZW5zYXRpb24gaXMgcG9zdHBvbmVkIHVudGlsCisvLyB0aGUgbmV4dCByZWNoYXJnZSBvY2N1cnMuCisvLyBUaGUgUGVyaW9kIHdpbGwgZWZmZWN0aXZlbHkgYmUgYSAxNiBiaXQgdmFsdWUgY29kZWQgaW4gYSA1IGJpdCBtYW50aXNzYSBhbmQKKy8vIDMgYml0IGV4cG9uZW50CisvLyBQRVJJT0Q9KFBFUl9NKjE2KzE1KSoyXlBFUl9FCisvLyBUaGlzIGZpZWxkIHNldHMgdGhlIGV4cG9uZW50CisvLyBOb3RlOiBPc2NpbGxhdG9yIGFtcGxpdHVkZSBjYWxpYnJhdGlvbiBpcyB0dXJuZWQgb2Ygd2hlbiBib3RoICBQRVJfTSBhbmQKKy8vIHRoaXMgYml0ZmllbGQgYXJlIHNldCB0byAwCisjZGVmaW5lIEFPTl9XVUNfT1NDQ0ZHX1BFUl9FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQU9OX1dVQ19PU0NDRkdfUEVSX0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBT05fV1VDX09TQ0NGR19QRVJfRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1dVQ19PX0pUQUdDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs4XSBKVEFHX1BEX0ZPUkNFX09OCisvLworLy8gQ29udHJvbHMgSlRBRyBQb3dlckRvbWFpbiBwb3dlciBzdGF0ZToKKy8vCisvLyAwOiBDb250cm9sbGVkIGV4Y2x1c2l2ZWx5IGJ5IGRlYnVnIHN1YnN5c3RlbS4gKEpUQUcgUG93ZXJkb21haW4gd2lsbCBiZQorLy8gcG93ZXJlZCBvZmYgdW5sZXNzIGEgZGVidWdnZXIgaXMgYXR0YWNoZWQpCisvLyAxOiBKVEFHIFBvd2VyIERvbWFpbiBpcyBmb3JjZWQgb24sIGluZGVwZW5kZW50IG9mIGRlYnVnIHN1YnN5c3RlbS4KKy8vCisvLyBOQjogVGhlIHJlc2V0IHZhbHVlIGNhdXNlcyBKVEFHIFBvd2VyIERvbWFpbiB0byBiZSBwb3dlcmVkIG9uIGJ5IGRlZmF1bHQuCisvLyBTb2Z0d2FyZSBtdXN0IGNsZWFyIHRoaXMgYml0IHRvIHR1cm4gb2ZmIHRoZSBKVEFHIFBvd2VyIERvbWFpbgorI2RlZmluZSBBT05fV1VDX0pUQUdDRkdfSlRBR19QRF9GT1JDRV9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9XVUNfSlRBR0NGR19KVEFHX1BEX0ZPUkNFX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQU9OX1dVQ19KVEFHQ0ZHX0pUQUdfUERfRk9SQ0VfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBT05fV1VDX0pUQUdDRkdfSlRBR19QRF9GT1JDRV9PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1dVQ19PX0pUQUdVU0VSQ09ERQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFVTRVJfQ09ERQorLy8KKy8vIDMyLWJpdCBKVEFHIFVTRVJDT0RFIHJlZ2lzdGVyIGZlZWRpbmcgbWFpbiBKVEFHIFRBUAorLy8gTkI6IFRoaXMgZmllbGQgY2FuIGJlIGxvY2tlZAorI2RlZmluZSBBT05fV1VDX0pUQUdVU0VSQ09ERV9VU0VSX0NPREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEFPTl9XVUNfSlRBR1VTRVJDT0RFX1VTRVJfQ09ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQU9OX1dVQ19KVEFHVVNFUkNPREVfVVNFUl9DT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0FPTl9XVUNfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X2Fpb2Rpby5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X2Fpb2Rpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYTllM2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfYWlvZGlvLmgKQEAgLTAsMCArMSwzNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hdXhfYWlvZGlvX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FVWF9BSU9ESU9fSF9fCisjZGVmaW5lIF9fSFdfQVVYX0FJT0RJT19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBVVhfQUlPRElPIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEdlbmVyYWwgUHVycG9zZSBJbnB1dC9PdXRwdXQgRGF0YSBPdXQKKyNkZWZpbmUgQVVYX0FJT0RJT19PX0dQSU9ET1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBJbnB1dCBPdXRwdXQgTW9kZQorI2RlZmluZSBBVVhfQUlPRElPX09fSU9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIEdlbmVyYWwgUHVycG9zZSBJbnB1dCBPdXRwdXQgRGF0YSBJbgorI2RlZmluZSBBVVhfQUlPRElPX09fR1BJT0RJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIEdlbmVyYWwgUHVycG9zZSBJbnB1dCBPdXRwdXQgRGF0YSBPdXQgU2V0CisjZGVmaW5lIEFVWF9BSU9ESU9fT19HUElPRE9VVFNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gR2VuZXJhbCBQdXJwb3NlIElucHV0IE91dHB1dCBEYXRhIE91dCBDbGVhcgorI2RlZmluZSBBVVhfQUlPRElPX09fR1BJT0RPVVRDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIEdlbmVyYWwgUHVycG9zZSBJbnB1dCBPdXRwdXQgRGF0YSBPdXQgVG9nZ2xlCisjZGVmaW5lIEFVWF9BSU9ESU9fT19HUElPRE9VVFRHTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gR2VuZXJhbCBQdXJwb3NlIElucHV0IE91dHB1dCBJbnB1dCBFbmFibGUKKyNkZWZpbmUgQVVYX0FJT0RJT19PX0dQSU9ESUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9BSU9ESU9fT19HUElPRE9VVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIElPN18wCisvLworLy8gT3V0cHV0IHZhbHVlcyBmb3IgQVVYSU8wIHRocm91Z2ggQVVYSU83IChmb3IgQUlPRElPMCkgb3IgQVVYSU84IHRocm91Z2gKKy8vIEFVWElPMTUgKGZvciBBSU9ESU8xKS4KKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRE9VVF9JTzdfMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ET1VUX0lPN18wX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RPVVRfSU83XzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfQUlPRElPX09fSU9NT0RFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsxNToxNF0gSU83CisvLworLy8gU2VsZWN0cyBtb2RlIGZvciBBVVhJTzcgKGZvciBBSU9ESU8wKSBvciBBVVhJTzE1IChmb3IgQUlPRElPMSkuCisvLyBFTlVNczoKKy8vIE9QRU5fU09VUkNFICAgICAgICAgICAgICBPcGVuLXNvdXJjZTogVGhlIHBpbiBpcyBkcml2ZW4gaGlnaCB3aGVuIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgR1BJT0RPVVQgYml0IGlzIDEsIGFuZCBvdGhlcndpc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktc3RhdGVkIG9yIHB1bGxlZCBkZXBlbmRpbmcgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgY29uZmlndXJhdGlvbi4KKy8vIE9QRU5fRFJBSU4gICAgICAgICAgICAgICBPcGVuLWRyYWluOiBUaGUgcGluIGlzIGRyaXZlbiBsb3cgd2hlbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIEdQSU9ET1VUIGJpdCBpcyAwLCBhbmQgb3RoZXJ3aXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLXN0YXRlZCBvciBwdWxsZWQgZGVwZW5kaW5nIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgSU9DIGNvbmZpZ3VyYXRpb24uCisvLyBJTiAgICAgICAgICAgICAgICAgICAgICAgRGlnaXRhbCBpbnB1dCB3aXRoIEdQSU9ESUUgYml0IDcgPSAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbG9nIGlucHV0L291dHB1dCB3aXRoCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT0RJRSBiaXQgNyA9IDAKKy8vIE9VVCAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU83X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBDMDAwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU83X09QRU5fU09VUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwQzAwMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzdfT1BFTl9EUkFJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPN19JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU83X09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzEzOjEyXSBJTzYKKy8vCisvLyBTZWxlY3RzIG1vZGUgZm9yIEFVWElPNiAoZm9yIEFJT0RJTzApIG9yIEFVWElPMTQgKGZvciBBSU9ESU8xKS4KKy8vIEVOVU1zOgorLy8gT1BFTl9TT1VSQ0UgICAgICAgICAgICAgIE9wZW4tc291cmNlOiBUaGUgcGluIGlzIGRyaXZlbiBoaWdoIHdoZW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBHUElPRE9VVCBiaXQgaXMgMSwgYW5kIG90aGVyd2lzZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS1zdGF0ZWQgb3IgcHVsbGVkIGRlcGVuZGluZyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIElPQyBjb25maWd1cmF0aW9uLgorLy8gT1BFTl9EUkFJTiAgICAgICAgICAgICAgIE9wZW4tZHJhaW46IFRoZSBwaW4gaXMgZHJpdmVuIGxvdyB3aGVuIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgR1BJT0RPVVQgYml0IGlzIDAsIGFuZCBvdGhlcndpc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktc3RhdGVkIG9yIHB1bGxlZCBkZXBlbmRpbmcgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgY29uZmlndXJhdGlvbi4KKy8vIElOICAgICAgICAgICAgICAgICAgICAgICBEaWdpdGFsIGlucHV0IHdpdGggR1BJT0RJRSBiaXQgNiA9IDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBbmFsb2cgaW5wdXQvb3V0cHV0IHdpdGgKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPRElFIGJpdCA2ID0gMAorLy8gT1VUICAgICAgICAgICAgICAgICAgICAgIE91dHB1dAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU82X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzZfT1BFTl9TT1VSQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNl9PUEVOX0RSQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU82X0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzZfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPNQorLy8KKy8vIFNlbGVjdHMgbW9kZSBmb3IgQVVYSU81IChmb3IgQUlPRElPMCkgb3IgQVVYSU8xMyAoZm9yIEFJT0RJTzEpLgorLy8gRU5VTXM6CisvLyBPUEVOX1NPVVJDRSAgICAgICAgICAgICAgT3Blbi1zb3VyY2U6IFRoZSBwaW4gaXMgZHJpdmVuIGhpZ2ggd2hlbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIEdQSU9ET1VUIGJpdCBpcyAxLCBhbmQgb3RoZXJ3aXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLXN0YXRlZCBvciBwdWxsZWQgZGVwZW5kaW5nIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgSU9DIGNvbmZpZ3VyYXRpb24uCisvLyBPUEVOX0RSQUlOICAgICAgICAgICAgICAgT3Blbi1kcmFpbjogVGhlIHBpbiBpcyBkcml2ZW4gbG93IHdoZW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBHUElPRE9VVCBiaXQgaXMgMCwgYW5kIG90aGVyd2lzZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS1zdGF0ZWQgb3IgcHVsbGVkIGRlcGVuZGluZyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIElPQyBjb25maWd1cmF0aW9uLgorLy8gSU4gICAgICAgICAgICAgICAgICAgICAgIERpZ2l0YWwgaW5wdXQgd2l0aCBHUElPRElFIGJpdCA1ID0gMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWxvZyBpbnB1dC9vdXRwdXQgd2l0aAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9ESUUgYml0IDUgPSAwCisvLyBPVVQgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0CisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU81X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNV9PUEVOX1NPVVJDRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU81X09QRU5fRFJBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzVfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNV9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU80CisvLworLy8gU2VsZWN0cyBtb2RlIGZvciBBVVhJTzQgKGZvciBBSU9ESU8wKSBvciBBVVhJTzEyIChmb3IgQUlPRElPMSkuCisvLyBFTlVNczoKKy8vIE9QRU5fU09VUkNFICAgICAgICAgICAgICBPcGVuLXNvdXJjZTogVGhlIHBpbiBpcyBkcml2ZW4gaGlnaCB3aGVuIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgR1BJT0RPVVQgYml0IGlzIDEsIGFuZCBvdGhlcndpc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktc3RhdGVkIG9yIHB1bGxlZCBkZXBlbmRpbmcgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgY29uZmlndXJhdGlvbi4KKy8vIE9QRU5fRFJBSU4gICAgICAgICAgICAgICBPcGVuLWRyYWluOiBUaGUgcGluIGlzIGRyaXZlbiBsb3cgd2hlbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIEdQSU9ET1VUIGJpdCBpcyAwLCBhbmQgb3RoZXJ3aXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLXN0YXRlZCBvciBwdWxsZWQgZGVwZW5kaW5nIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgSU9DIGNvbmZpZ3VyYXRpb24uCisvLyBJTiAgICAgICAgICAgICAgICAgICAgICAgRGlnaXRhbCBpbnB1dCB3aXRoIEdQSU9ESUUgYml0IDQgPSAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbG9nIGlucHV0L291dHB1dCB3aXRoCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT0RJRSBiaXQgNCA9IDAKKy8vIE9VVCAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU80X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU80X09QRU5fU09VUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzRfT1BFTl9EUkFJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU80X09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNzo2XSBJTzMKKy8vCisvLyBTZWxlY3RzIG1vZGUgZm9yIEFVWElPMyAoZm9yIEFJT0RJTzApIG9yIEFVWElPMTEgKGZvciBBSU9ESU8xKS4KKy8vIEVOVU1zOgorLy8gT1BFTl9TT1VSQ0UgICAgICAgICAgICAgIE9wZW4tc291cmNlOiBUaGUgcGluIGlzIGRyaXZlbiBoaWdoIHdoZW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBHUElPRE9VVCBiaXQgaXMgMSwgYW5kIG90aGVyd2lzZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS1zdGF0ZWQgb3IgcHVsbGVkIGRlcGVuZGluZyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIElPQyBjb25maWd1cmF0aW9uLgorLy8gT1BFTl9EUkFJTiAgICAgICAgICAgICAgIE9wZW4tZHJhaW46IFRoZSBwaW4gaXMgZHJpdmVuIGxvdyB3aGVuIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgR1BJT0RPVVQgYml0IGlzIDAsIGFuZCBvdGhlcndpc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktc3RhdGVkIG9yIHB1bGxlZCBkZXBlbmRpbmcgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgY29uZmlndXJhdGlvbi4KKy8vIElOICAgICAgICAgICAgICAgICAgICAgICBEaWdpdGFsIGlucHV0IHdpdGggR1BJT0RJRSBiaXQgMyA9IDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBbmFsb2cgaW5wdXQvb3V0cHV0IHdpdGgKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPRElFIGJpdCAzID0gMAorLy8gT1VUICAgICAgICAgICAgICAgICAgICAgIE91dHB1dAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8zX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzNfT1BFTl9TT1VSQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPM19PUEVOX0RSQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8zX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzNfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjRdIElPMgorLy8KKy8vIFNlbGVjdHMgbW9kZSBmb3IgQVVYSU8yIChmb3IgQUlPRElPMCkgb3IgQVVYSU8xMCAoZm9yIEFJT0RJTzEpLgorLy8gRU5VTXM6CisvLyBPUEVOX1NPVVJDRSAgICAgICAgICAgICAgT3Blbi1zb3VyY2U6IFRoZSBwaW4gaXMgZHJpdmVuIGhpZ2ggd2hlbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIEdQSU9ET1VUIGJpdCBpcyAxLCBhbmQgb3RoZXJ3aXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLXN0YXRlZCBvciBwdWxsZWQgZGVwZW5kaW5nIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgSU9DIGNvbmZpZ3VyYXRpb24uCisvLyBPUEVOX0RSQUlOICAgICAgICAgICAgICAgT3Blbi1kcmFpbjogVGhlIHBpbiBpcyBkcml2ZW4gbG93IHdoZW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBHUElPRE9VVCBiaXQgaXMgMCwgYW5kIG90aGVyd2lzZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS1zdGF0ZWQgb3IgcHVsbGVkIGRlcGVuZGluZyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIElPQyBjb25maWd1cmF0aW9uLgorLy8gSU4gICAgICAgICAgICAgICAgICAgICAgIERpZ2l0YWwgaW5wdXQgd2l0aCBHUElPRElFIGJpdCAyID0gMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWxvZyBpbnB1dC9vdXRwdXQgd2l0aAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9ESUUgYml0IDIgPSAwCisvLyBPVVQgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0CisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8yX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMl9PUEVOX1NPVVJDRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8yX09QRU5fRFJBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzJfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMl9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzM6Ml0gSU8xCisvLworLy8gU2VsZWN0cyBtb2RlIGZvciBBVVhJTzEgKGZvciBBSU9ESU8wKSBvciBBVVhJTzkgKGZvciBBSU9ESU8xKS4KKy8vIEVOVU1zOgorLy8gT1BFTl9TT1VSQ0UgICAgICAgICAgICAgIE9wZW4tc291cmNlOiBUaGUgcGluIGlzIGRyaXZlbiBoaWdoIHdoZW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBHUElPRE9VVCBiaXQgaXMgMSwgYW5kIG90aGVyd2lzZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS1zdGF0ZWQgb3IgcHVsbGVkIGRlcGVuZGluZyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIElPQyBjb25maWd1cmF0aW9uLgorLy8gT1BFTl9EUkFJTiAgICAgICAgICAgICAgIE9wZW4tZHJhaW46IFRoZSBwaW4gaXMgZHJpdmVuIGxvdyB3aGVuIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgR1BJT0RPVVQgYml0IGlzIDAsIGFuZCBvdGhlcndpc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktc3RhdGVkIG9yIHB1bGxlZCBkZXBlbmRpbmcgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgY29uZmlndXJhdGlvbi4KKy8vIElOICAgICAgICAgICAgICAgICAgICAgICBEaWdpdGFsIGlucHV0IHdpdGggR1BJT0RJRSBiaXQgMSA9IDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBbmFsb2cgaW5wdXQvb3V0cHV0IHdpdGgKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPRElFIGJpdCAxID0gMAorLy8gT1VUICAgICAgICAgICAgICAgICAgICAgIE91dHB1dAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzFfT1BFTl9TT1VSQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMV9PUEVOX0RSQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8xX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzFfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFsxOjBdIElPMAorLy8KKy8vIFNlbGVjdHMgbW9kZSBmb3IgQVVYSU8wIChmb3IgQUlPRElPMCkgb3IgQVVYSU84IChmb3IgQUlPRElPMSkuCisvLyBFTlVNczoKKy8vIE9QRU5fU09VUkNFICAgICAgICAgICAgICBPcGVuLXNvdXJjZTogVGhlIHBpbiBpcyBkcml2ZW4gaGlnaCB3aGVuIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgR1BJT0RPVVQgYml0IGlzIDEsIGFuZCBvdGhlcndpc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktc3RhdGVkIG9yIHB1bGxlZCBkZXBlbmRpbmcgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgY29uZmlndXJhdGlvbi4KKy8vIE9QRU5fRFJBSU4gICAgICAgICAgICAgICBPcGVuLWRyYWluOiBUaGUgcGluIGlzIGRyaXZlbiBsb3cgd2hlbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIEdQSU9ET1VUIGJpdCBpcyAwLCBhbmQgb3RoZXJ3aXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLXN0YXRlZCBvciBwdWxsZWQgZGVwZW5kaW5nIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgSU9DIGNvbmZpZ3VyYXRpb24uCisvLyBJTiAgICAgICAgICAgICAgICAgICAgICAgRGlnaXRhbCBpbnB1dCB3aXRoIEdQSU9ESUUgYml0IDAgPSAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbG9nIGlucHV0L291dHB1dCB3aXRoCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT0RJRSBiaXQgMCA9IDAKKy8vIE9VVCAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8wX09QRU5fU09VUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzBfT1BFTl9EUkFJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8wX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9BSU9ESU9fT19HUElPRElOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gSU83XzAKKy8vCisvLyBJbnB1dCB2YWx1ZXMgZm9yIEFVWElPMCB0aHJvdWdoIEFVWElPNyAoZm9yIEFJT0RJTzApIG9yIEFVWElPOCB0aHJvdWdoCisvLyBBVVhJTzE1IChmb3IgQUlPRElPMSkuCisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RJTl9JTzdfMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRElOX0lPN18wX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ESU5fSU83XzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0FJT0RJT19PX0dQSU9ET1VUU0VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gSU83XzAKKy8vCisvLyBXcml0aW5nIDEocykgdG8gb25lIG9yIG1vcmUgYml0IHBvc2l0aW9ucyBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGJpdChzKSBpbgorLy8gR1BJT0RPVVQuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAweDAwLgorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ET1VUU0VUX0lPN18wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RPVVRTRVRfSU83XzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRE9VVFNFVF9JTzdfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9BSU9ESU9fT19HUElPRE9VVENMUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIElPN18wCisvLworLy8gV3JpdGluZyAxKHMpIHRvIG9uZSBvciBtb3JlIGJpdCBwb3NpdGlvbnMgY2xlYXJzIHRoZSBjb3JyZXNwb25kaW5nIGJpdChzKSBpbgorLy8gR1BJT0RPVVQuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAweDAwLgorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ET1VUQ0xSX0lPN18wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RPVVRDTFJfSU83XzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRE9VVENMUl9JTzdfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9BSU9ESU9fT19HUElPRE9VVFRHTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIElPN18wCisvLworLy8gV3JpdGluZyAxKHMpIHRvIG9uZSBvciBtb3JlIGJpdCBwb3NpdGlvbnMgdG9nZ2xlcyB0aGUgY29ycmVzcG9uZGluZyBiaXQocykKKy8vIGluIEdQSU9ET1VULgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMHgwMC4KKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRE9VVFRHTF9JTzdfMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ET1VUVEdMX0lPN18wX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RPVVRUR0xfSU83XzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfQUlPRElPX09fR1BJT0RJRQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIElPN18wCisvLworLy8gRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIGRpZ2l0YWwgaW5wdXQgYnVmZmVycyBmb3IgZWFjaCBBVVggSS9PIHBpbi4KKy8vCisvLyBJbnB1dCBidWZmZXJzIG11c3QgYmUgZW5hYmxlZCB0byBhbGxvdyByZWFkaW5nIHBpbiB2YWx1ZXMgdGhyb3VnaCBHUElPRElOLgorLy8KKy8vIElucHV0IGJ1ZmZlcnMgbXVzdCBiZSBkaXNhYmxlZCBmb3IgYW5hbG9nIGlucHV0IG9yIGZsb2F0aW5nIHBpbnMgdG8gYXZvaWQKKy8vIGN1cnJlbnQgbGVha2FnZS4KKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRElFX0lPN18wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ESUVfSU83XzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RJRV9JTzdfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19BVVhfQUlPRElPX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF9hbmFpZi5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X2FuYWlmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmM2VhNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF9hbmFpZi5oCkBAIC0wLDAgKzEsMjc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYXV4X2FuYWlmX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FVWF9BTkFJRl9IX18KKyNkZWZpbmUgX19IV19BVVhfQU5BSUZfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQVVYX0FOQUlGIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEFEQyBDb250cm9sCisjZGVmaW5lIEFVWF9BTkFJRl9PX0FEQ0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gQURDIEZJRk8gU3RhdHVzCisjZGVmaW5lIEFVWF9BTkFJRl9PX0FEQ0ZJRk9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gQURDIEZJRk8KKyNkZWZpbmUgQVVYX0FOQUlGX09fQURDRklGTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBBREMgVHJpZ2dlcgorI2RlZmluZSBBVVhfQU5BSUZfT19BRENUUklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIEN1cnJlbnQgU291cmNlIENvbnRyb2wKKyNkZWZpbmUgQVVYX0FOQUlGX09fSVNSQ0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9BTkFJRl9PX0FEQ0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTNdIFNUQVJUX1BPTAorLy8KKy8vIFNlbGVjdGVkIGFjdGl2ZSBlZGdlIGZvciBzdGFydCBldmVudCAvIFNlbGVjdGVkIHBvbGFyaXR5IGZvciBzdGFydCBldmVudAorLy8gRU5VTXM6CisvLyBGQUxMICAgICAgICAgICAgICAgICAgICAgU3RhcnQgb24gZmFsbGluZyBlZGdlIG9mIGV2ZW50CisvLyBSSVNFICAgICAgICAgICAgICAgICAgICAgU3RhcnQgb24gcmlzaW5nIGVkZ2Ugb2YgZXZlbnQKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1BPTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfUE9MX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9QT0xfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1BPTF9GQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfUE9MX1JJU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICBbMTI6OF0gU1RBUlRfU1JDCisvLworLy8gU2VsZWN0ZWQgc291cmNlIGZvciBBREMgY29udmVyc2lvbiBzdGFydCBldmVudC4gVGhlIHN0YXJ0IHNvdXJjZSBzZWxlY3RlZCBieQorLy8gdGhpcyBmaWVsZCBpcyBPUidlZCB3aXRoIGFueSB0cmlnZ2VyIGNvbWluZyBmcm9tIHdyaXRlcyB0byBBRENUUklHLlNUQVJULiBJZgorLy8gaXQgaXMgZGVzaXJlZCB0byBvbmx5IHRyaWdnZXIgQURDIGNvbnZlcnNpb25zIGJ5IHdyaXRlcyB0byBBRENUUklHLlNUQVJUIG9uZQorLy8gc2hvdWxkIHNlbGVjdCBOT19FVkVOVDxuPiBoZXJlCisvLyBFTlVNczoKKy8vIEFEQ19JUlEgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFEQ19JUlEgYXMgc3RhcnQgc2lnbmFsCisvLyBNQ1VfRVYgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBNQ1VfRVYgYXMgc3RhcnQgc2lnbmFsCisvLyBBQ0xLX1JFRiAgICAgICAgICAgICAgICAgU2VsZWN0cyBBQ0xLX1JFRiBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPMTUgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTUgYXMgc3RhcnQgc2lnbmFsCisvLyBBVVhJTzE0ICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzE0IGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU8xMyAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMyBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPMTIgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTIgYXMgc3RhcnQgc2lnbmFsCisvLyBBVVhJTzExICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzExIGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU8xMCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMCBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPOSAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPOSBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPOCAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPOCBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPNyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNyBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPNiAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNiBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPNSAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNSBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPNCAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNCBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPMyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMyBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPMiAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMiBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPMSAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMSBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPMCAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMCBhcyBzdGFydCBzaWduYWwKKy8vIEFPTl9QUk9HX1dVICAgICAgICAgICAgICBTZWxlY3RzIEFPTl9QUk9HX1dVIGFzIHN0YXJ0IHNpZ25hbAorLy8gQU9OX1NXICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQU9OX1NXIGFzIHN0YXJ0IHNpZ25hbAorLy8gTk9fRVZFTlQxICAgICAgICAgICAgICAgIE5vIGV2ZW50IHNlbGVjdGVkCisvLyBOT19FVkVOVDAgICAgICAgICAgICAgICAgTm8gZXZlbnQgc2VsZWN0ZWQKKy8vIFJFU0VSVkVEMSAgICAgICAgICAgICAgICBSZXNlcnZlZCBkbyBub3QgdXNlCisvLyBSRVNFUlZFRDAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQgZG8gbm90IHVzZQorLy8gU01QSF9BVVRPVEFLRV9ET05FICAgICAgIFNlbGVjdHMgU01QSF9BVVRPVEFLRV9ET05FIGFzIHN0YXJ0IHNpZ25hbAorLy8gVElNRVIxX0VWICAgICAgICAgICAgICAgIFNlbGVjdHMgVElNRVIxX0VWIGFzIHN0YXJ0IHNpZ25hbAorLy8gVElNRVIwX0VWICAgICAgICAgICAgICAgIFNlbGVjdHMgVElNRVIwX0VWIGFzIHN0YXJ0IHNpZ25hbAorLy8gVERDX0RPTkUgICAgICAgICAgICAgICAgIFNlbGVjdHMgVERDX0RPTkUgYXMgc3RhcnQgc2lnbmFsCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhfQ09NUEIgYXMgc3RhcnQgc2lnbmFsCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhfQ09NUEEgYXMgc3RhcnQgc2lnbmFsCisvLyBSVENfQ0gyX0VWICAgICAgICAgICAgICAgU2VsZWN0cyBSVENfQ0gyX0VWIGFzIHN0YXJ0IHNpZ25hbAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX01DVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFFMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQUNMS19SRUYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUQwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQzAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWElPMTQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFCMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQVVYSU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUEwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxOTAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWElPMTEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQVVYSU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTcwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhJTzkgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNjAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE1MDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQVVYSU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTQwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMzAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEyMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQVVYSU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTEwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQVVYSU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEUwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FPTl9QUk9HX1dVICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQU9OX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEIwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19OT19FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQTAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX05PX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5MDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfUkVTRVJWRUQxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19SRVNFUlZFRDAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX1JUQ19DSDJfRVYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzE6MF0gQ01ECisvLworLy8gQURDIGludGVyZmFjZSBjb250cm9sIGNvbW1hbmQKKy8vIEVOVU1zOgorLy8gRkxVU0ggICAgICAgICAgICAgICAgICAgIEFEQyBGSUZPIGZsdXNoLiBOb3RlIHRoYXQgQ01EIG5lZWRzIHRvIGJlIHNldCB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICdFTicgYWdhaW4gZm9yIEZJRk8gdG8gYmUgZnVuY3Rpb25hbCBhZnRlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2guIEEgZmx1c2ggdGFrZXMgdHdvIGNsb2NrIHBlcmlvZHMgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYIGNsb2NrIHRvIGZpbmlzaC4KKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBBREMgaW50ZXJmYWNlIGVuYWJsZWQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBBREMgaW50ZXJmYWNlIGRpc2FibGVkCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfQ01EX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9DTURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX0NNRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfQ01EX0ZMVVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9DTURfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX0NNRF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0FOQUlGX09fQURDRklGT1NUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs0XSBPVkVSRkxPVworLy8KKy8vIEZJRk8gb3ZlcmZsb3cgZmxhZy4KKy8vCisvLyAwOiBGSUZPIGhhcyBub3Qgb3ZlcmZsb3dlZC4KKy8vIDE6IEZJRk8gaGFzIG92ZXJmbG93ZWQsIHRoaXMgZmxhZyBpcyBzdGlja3kgdW50aWwgRklGTyBpcyBmbHVzaGVkLgorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9PVkVSRkxPV19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX09WRVJGTE9XX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfT1ZFUkZMT1dfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFVOREVSRkxPVworLy8KKy8vIEZJRk8gdW5kZXJmbG93IGZsYWcuCisvLworLy8gMDogRklGTyBoYXMgbm90IHVuZGVyZmxvd2VkCisvLyAxOiBGSUZPIGhhcyB1bmRlcmZsb3dlZCwgdGhpcyBmbGFnIGlzIHN0aWNreSB1bnRpbCB0aGUgRklGTyBpcyBmbHVzaGVkCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9VTkRFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX1VOREVSRkxPV19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfVU5ERVJGTE9XX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9VTkRFUkZMT1dfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gRlVMTAorLy8KKy8vIEZJRk8gZnVsbCBmbGFnLgorLy8KKy8vIDA6IEZJRk8gaXMgbm90IGZ1bGwsIGkuZS4gdGhlcmUgaXMgbGVzcyB0aGFuIDQgc2FtcGxlcyBpbiB0aGUgRklGTy4KKy8vIDE6IEZJRk8gaXMgZnVsbCwgaS5lLiB0aGVyZSBhcmUgNCBzYW1wbGVzIGluIHRoZSBGSUZPCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9GVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX0ZVTExfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfRlVMTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9GVUxMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQUxNT1NUX0ZVTEwKKy8vCisvLyBGSUZPIGFsbW9zdCBmdWxsIGZsYWcuCisvLworLy8gMDogVGhlcmUgaXMgbGVzcyB0aGFuIDMgc2FtcGxlcyBpbiB0aGUgRklGTywgb3IgdGhlIEZJRk8gaXMgZnVsbCBpbiB3aGljaAorLy8gY2FzZSB0aGUgRlVMTCBmbGFnIGlzIGFzc2VydGVkCisvLyAxOiBUaGVyZSBhcmUgMyBzYW1wbGVzIGluIHRoZSBGSUZPLCBpLmUuIHRoZXJlIGlzIHJvb20gZm9yIG9uZSBtb3JlIHNhbXBsZQorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfQUxNT1NUX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9BTE1PU1RfRlVMTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX0FMTU9TVF9GVUxMX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfQUxNT1NUX0ZVTExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEVNUFRZCisvLworLy8gRklGTyBlbXB0eSBmbGFnLgorLy8KKy8vIDA6IEZJRk8gY29udGFpbnMgb25lIG9yIG1vcmUgc2FtcGxlcworLy8gMTogRklGTyBpcyBlbXB0eQorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfRU1QVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9FTVBUWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX0VNUFRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfRU1QVFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0FOQUlGX09fQURDRklGTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzExOjBdIERBVEEKKy8vCisvLyBGSUZPIGlzIHBvcHBlZCB3aGVuIHJlYWQuIERhdGEgaXMgcHVzaGVkIGludG8gRklGTyB3aGVuIHdyaXR0ZW4uIFdyaXRpbmcgaXMKKy8vIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcvY29kZSBkZXZlbG9wbWVudCBwdXJwb3NlcworI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT19EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9fREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9BTkFJRl9PX0FEQ1RSSUcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFSVAorLy8KKy8vIFdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciB3aWxsIHRyaWdnZXIgYW4gQURDIGNvbnZlcnNpb24gZ2l2ZW4gdGhhdAorLy8gQURDQ1RMLlNUQVJUX1NSQyBpcyBzZXQgdG8gTk9fRVZFTlQwIG9yIE5PX0VWRU5UMS4gSWYgb3RoZXIgc2V0dGluZyBpcyB1c2VkCisvLyBpbiBBRENDVEwuU1RBUlRfU1JDIGJlaGF2aW9yIGNhbiBiZSB1bnByZWRpY3RhYmxlCisjZGVmaW5lIEFVWF9BTkFJRl9BRENUUklHX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ1RSSUdfU1RBUlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfQU5BSUZfQURDVFJJR19TVEFSVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9BTkFJRl9BRENUUklHX1NUQVJUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfQU5BSUZfT19JU1JDQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gUkVTRVRfTgorLy8KKy8vIEN1cnJlbnQgc291cmNlIGNvbnRyb2wKKy8vCisvLyAwOiBDdXJyZW50IHNvdXJjZSBpcyBjbGFtcGVkCisvLyAxOiBDdXJyZW50IHNvdXJjZSBpcyBhY3RpdmUvY2hhcmdpbmcKKyNkZWZpbmUgQVVYX0FOQUlGX0lTUkNDVExfUkVTRVRfTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfQU5BSUZfSVNSQ0NUTF9SRVNFVF9OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9BTkFJRl9JU1JDQ1RMX1JFU0VUX05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0FOQUlGX0lTUkNDVExfUkVTRVRfTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0FVWF9BTkFJRl9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfZXZjdGwuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF9ldmN0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NjMxMTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfZXZjdGwuaApAQCAtMCwwICsxLDE3NzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hdXhfZXZjdGxfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQVVYX0VWQ1RMX0hfXworI2RlZmluZSBfX0hXX0FVWF9FVkNUTF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBVVhfRVZDVEwgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gVmVjdG9yIENvbmZpZ3VyYXRpb24gMAorI2RlZmluZSBBVVhfRVZDVExfT19WRUNDRkcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIFZlY3RvciBDb25maWd1cmF0aW9uIDEKKyNkZWZpbmUgQVVYX0VWQ1RMX09fVkVDQ0ZHMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBTZW5zb3IgQ29udHJvbGxlciBFbmdpbmUgV2FpdCBFdmVudCBTZWxlY3Rpb24KKyNkZWZpbmUgQVVYX0VWQ1RMX09fU0NFV0VWU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBFdmVudHMgVG8gQU9OIERvbWFpbiBGbGFncworI2RlZmluZSBBVVhfRVZDVExfT19FVlRPQU9ORkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIEV2ZW50cyBUbyBBT04gRG9tYWluIFBvbGFyaXR5CisjZGVmaW5lIEFVWF9FVkNUTF9PX0VWVE9BT05QT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gRGlyZWN0IE1lbW9yeSBBY2Nlc3MgQ29udHJvbAorI2RlZmluZSBBVVhfRVZDVExfT19ETUFDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIFNvZnR3YXJlIEV2ZW50IFNldAorI2RlZmluZSBBVVhfRVZDVExfT19TV0VWU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIEV2ZW50IFN0YXR1cyAwCisjZGVmaW5lIEFVWF9FVkNUTF9PX0VWU1RBVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gRXZlbnQgU3RhdHVzIDEKKyNkZWZpbmUgQVVYX0VWQ1RMX09fRVZTVEFUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBFdmVudCBUbyBNQ1UgRG9tYWluIFBvbGFyaXR5CisjZGVmaW5lIEFVWF9FVkNUTF9PX0VWVE9NQ1VQT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8gRXZlbnRzIHRvIE1DVSBEb21haW4gRmxhZ3MKKyNkZWZpbmUgQVVYX0VWQ1RMX09fRVZUT01DVUZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorCisvLyBDb21iaW5lZCBFdmVudCBUbyBNQ1UgRG9tYWluIE1hc2sKKyNkZWZpbmUgQVVYX0VWQ1RMX09fQ09NQkVWVE9NQ1VNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBWZWN0b3IgRmxhZ3MKKyNkZWZpbmUgQVVYX0VWQ1RMX09fVkVDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorCisvLyBFdmVudHMgVG8gTUNVIERvbWFpbiBGbGFncyBDbGVhcgorI2RlZmluZSBBVVhfRVZDVExfT19FVlRPTUNVRkxBR1NDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisKKy8vIEV2ZW50cyBUbyBBT04gRG9tYWluIENsZWFyCisjZGVmaW5lIEFVWF9FVkNUTF9PX0VWVE9BT05GTEFHU0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8gVmVjdG9yIEZsYWdzIENsZWFyCisjZGVmaW5lIEFVWF9FVkNUTF9PX1ZFQ0ZMQUdTQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfRVZDVExfT19WRUNDRkcwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxNF0gVkVDMV9QT0wKKy8vCisvLyBTZWxlY3RzIHZlY3RvciAxIHRyaWdnZXIgZXZlbnQgcG9sYXJpdHkuCisvLworLy8gVG8gbWFudWFsbHkgdHJpZ2dlciB2ZWN0b3IgMSBleGVjdXRpb24sIHNldCBWRUMxX0VWIHRvIGEga25vd24gc3RhdGljIHZhbHVlLAorLy8gYW5kIHRvZ2dsZSBWRUMxX1BPTCB0d2ljZS4KKy8vIEVOVU1zOgorLy8gRkFMTCAgICAgICAgICAgICAgICAgICAgIEZhbGxpbmcgZWRnZSB0cmlnZ2VycyBleGVjdXRpb24uCisvLyBSSVNFICAgICAgICAgICAgICAgICAgICAgUmlzaW5nIGVkZ2UgdHJpZ2dlcnMgZXhlY3V0aW9uLgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfUE9MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9QT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX1BPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfUE9MX0ZBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9QT0xfUklTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzEzXSBWRUMxX0VOCisvLworLy8gRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIHRyaWdnZXJpbmcgb2YgdmVjdG9yIDEgZXhlY3V0aW9uLgorLy8KKy8vIFdoZW4gZW5hYmxlZCwgdGhlIGVkZ2Ugc2VsZWN0ZWQgYnkgVkVDMV9QT0wgb24gdGhlIGV2ZW50IHNlbGVjdGVkIGJ5IFZFQzFfRVYKKy8vIHdpbGwgc2V0IFZFQ0ZMQUdTLlZFQzEsIHdoaWNoIGluIHR1cm4gdHJpZ2dlcnMgdmVjdG9yIDEgZXhlY3V0aW9uLgorLy8KKy8vIE5vdGU6IExvd2VyIHZlY3RvcnMgKDApIGhhdmUgcHJpb3JpdHkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBBbiBldmVudCBzZWxlY3RlZCBieSBWRUMxX0VWIHdpdGggcG9sYXJpdHkgZnJvbQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFZFQzFfUE9MIHRyaWdnZXJzIGEganVtcCB0byB2ZWN0b3IgIyAxIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGlzIGluIHNsZWVwCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRXZlbnQgZGV0ZWN0aW9uIGlzIGRpc2FibGVkCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgWzEyOjhdIFZFQzFfRVYKKy8vCisvLyBTZWxlY3RzIHZlY3RvciAxIHRyaWdnZXIgc291cmNlIGV2ZW50LgorLy8gRU5VTXM6CisvLyBBRENfSVJRICAgICAgICAgICAgICAgICAgQURDX0lSUSBldmVudAorLy8gTUNVX0VWICAgICAgICAgICAgICAgICAgIE1DVV9FViBldmVudAorLy8gQUNMS19SRUYgICAgICAgICAgICAgICAgIEFDTEtfUkVGIGV2ZW50CisvLyBBVVhJTzE1ICAgICAgICAgICAgICAgICAgQVVYSU8xNSBpbnB1dCBkYXRhCisvLyBBVVhJTzE0ICAgICAgICAgICAgICAgICAgQVVYSU8xNCBpbnB1dCBkYXRhCisvLyBBVVhJTzEzICAgICAgICAgICAgICAgICAgQVVYSU8xMyBpbnB1dCBkYXRhCisvLyBBVVhJTzEyICAgICAgICAgICAgICAgICAgQVVYSU8xMiBpbnB1dCBkYXRhCisvLyBBVVhJTzExICAgICAgICAgICAgICAgICAgQVVYSU8xMSBpbnB1dCBkYXRhCisvLyBBVVhJTzEwICAgICAgICAgICAgICAgICAgQVVYSU8xMCBpbnB1dCBkYXRhCisvLyBBVVhJTzkgICAgICAgICAgICAgICAgICAgQVVYSU85IGlucHV0IGRhdGEKKy8vIEFVWElPOCAgICAgICAgICAgICAgICAgICBBVVhJTzggaW5wdXQgZGF0YQorLy8gQVVYSU83ICAgICAgICAgICAgICAgICAgIEFVWElPNyBpbnB1dCBkYXRhCisvLyBBVVhJTzYgICAgICAgICAgICAgICAgICAgQVVYSU82IGlucHV0IGRhdGEKKy8vIEFVWElPNSAgICAgICAgICAgICAgICAgICBBVVhJTzUgaW5wdXQgZGF0YQorLy8gQVVYSU80ICAgICAgICAgICAgICAgICAgIEFVWElPNCBpbnB1dCBkYXRhCisvLyBBVVhJTzMgICAgICAgICAgICAgICAgICAgQVVYSU8zIGlucHV0IGRhdGEKKy8vIEFVWElPMiAgICAgICAgICAgICAgICAgICBBVVhJTzIgaW5wdXQgZGF0YQorLy8gQVVYSU8xICAgICAgICAgICAgICAgICAgIEFVWElPMSBpbnB1dCBkYXRhCisvLyBBVVhJTzAgICAgICAgICAgICAgICAgICAgQVVYSU8wIGlucHV0IGRhdGEKKy8vIEFPTl9QUk9HX1dVICAgICAgICAgICAgICBBT05fUFJPR19XVSBldmVudAorLy8gQU9OX1NXICAgICAgICAgICAgICAgICAgIEFPTl9TVyBldmVudAorLy8gT0JTTVVYMSAgICAgICAgICAgICAgICAgIE9CU01VWDEgZXZlbnQKKy8vIE9CU01VWDAgICAgICAgICAgICAgICAgICBPQlNNVVgwIGV2ZW50CisvLyBBRENfRklGT19BTE1PU1RfRlVMTCAgICAgQURDX0ZJRk9fQUxNT1NUX0ZVTEwgZXZlbnQKKy8vIEFEQ19ET05FICAgICAgICAgICAgICAgICBBRENfRE9ORSBldmVudAorLy8gU01QSF9BVVRPVEFLRV9ET05FICAgICAgIFNNUEhfQVVUT1RBS0VfRE9ORSBldmVudAorLy8gVElNRVIxX0VWICAgICAgICAgICAgICAgIFRJTUVSMV9FViBldmVudAorLy8gVElNRVIwX0VWICAgICAgICAgICAgICAgIFRJTUVSMF9FViBldmVudAorLy8gVERDX0RPTkUgICAgICAgICAgICAgICAgIFREQ19ET05FIGV2ZW50CisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQVVYX0NPTVBCIGV2ZW50CisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYX0NPTVBBIGV2ZW50CisvLyBBT05fUlRDX0NIMiAgICAgICAgICAgICAgQU9OX1JUQ19DSDIgZXZlbnQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUYwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX01DVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQUNMS19SRUYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFEMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUMwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWElPMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQjAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQVVYSU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFBMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTkwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWElPMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxODAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQVVYSU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE3MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhJTzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTYwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQVVYSU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTMwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMjAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQVVYSU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDExMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQVVYSU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBFMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FPTl9QUk9HX1dVICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQU9OX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBCMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9PQlNNVVgxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEEwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwOTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FPTl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIFZFQzBfUE9MCisvLworLy8gU2VsZWN0cyB2ZWN0b3IgMCB0cmlnZ2VyIGV2ZW50IHBvbGFyaXR5LgorLy8KKy8vIFRvIG1hbnVhbGx5IHRyaWdnZXIgdmVjdG9yIDAgZXhlY3V0aW9uLCBzZXQgVkVDMF9FViB0byBhIGtub3duIHN0YXRpYyB2YWx1ZSwKKy8vIGFuZCB0b2dnbGUgVkVDMF9QT0wgdHdpY2UuCisvLyBFTlVNczoKKy8vIEZBTEwgICAgICAgICAgICAgICAgICAgICBGYWxsaW5nIGVkZ2UgdHJpZ2dlcnMgZXhlY3V0aW9uLgorLy8gUklTRSAgICAgICAgICAgICAgICAgICAgIFJpc2luZyBlZGdlIHRyaWdnZXJzIGV4ZWN1dGlvbi4KKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX1BPTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfUE9MX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9QT0xfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX1BPTF9GQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfUE9MX1JJU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNV0gVkVDMF9FTgorLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSB0cmlnZ2VyaW5nIG9mIHZlY3RvciAwIGV4ZWN1dGlvbi4KKy8vCisvLyBXaGVuIGVuYWJsZWQsIHRoZSBlZGdlIHNlbGVjdGVkIGJ5IFZFQzBfUE9MIG9uIHRoZSBldmVudCBzZWxlY3RlZCBieSBWRUMwX0VWCisvLyB3aWxsIHNldCBWRUNGTEFHUy5WRUMwLCB3aGljaCBpbiB0dXJuIHRyaWdnZXJzIHZlY3RvciAwIGV4ZWN1dGlvbi4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFuIGV2ZW50IHNlbGVjdGVkIGJ5IFZFQzBfRVYgd2l0aCBwb2xhcml0eSBmcm9tCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVkVDMF9QT0wgdHJpZ2dlcnMgYSBqdW1wIHRvIHZlY3RvciAjMCB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NDRSBpcyBpbiBzbGVlcAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEV2ZW50IGRldGVjdGlvbiBpcyBkaXNhYmxlZAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNDowXSBWRUMwX0VWCisvLworLy8gU2VsZWN0cyB2ZWN0b3IgMCB0cmlnZ2VyIHNvdXJjZSBldmVudC4KKy8vIEVOVU1zOgorLy8gQURDX0lSUSAgICAgICAgICAgICAgICAgIEFEQ19JUlEgZXZlbnQKKy8vIE1DVV9FViAgICAgICAgICAgICAgICAgICBNQ1VfRVYgZXZlbnQKKy8vIEFDTEtfUkVGICAgICAgICAgICAgICAgICBBQ0xLX1JFRiBldmVudAorLy8gQVVYSU8xNSAgICAgICAgICAgICAgICAgIEFVWElPMTUgaW5wdXQgZGF0YQorLy8gQVVYSU8xNCAgICAgICAgICAgICAgICAgIEFVWElPMTQgaW5wdXQgZGF0YQorLy8gQVVYSU8xMyAgICAgICAgICAgICAgICAgIEFVWElPMTMgaW5wdXQgZGF0YQorLy8gQVVYSU8xMiAgICAgICAgICAgICAgICAgIEFVWElPMTIgaW5wdXQgZGF0YQorLy8gQVVYSU8xMSAgICAgICAgICAgICAgICAgIEFVWElPMTEgaW5wdXQgZGF0YQorLy8gQVVYSU8xMCAgICAgICAgICAgICAgICAgIEFVWElPMTAgaW5wdXQgZGF0YQorLy8gQVVYSU85ICAgICAgICAgICAgICAgICAgIEFVWElPOSBpbnB1dCBkYXRhCisvLyBBVVhJTzggICAgICAgICAgICAgICAgICAgQVVYSU84IGlucHV0IGRhdGEKKy8vIEFVWElPNyAgICAgICAgICAgICAgICAgICBBVVhJTzcgaW5wdXQgZGF0YQorLy8gQVVYSU82ICAgICAgICAgICAgICAgICAgIEFVWElPNiBpbnB1dCBkYXRhCisvLyBBVVhJTzUgICAgICAgICAgICAgICAgICAgQVVYSU81IGlucHV0IGRhdGEKKy8vIEFVWElPNCAgICAgICAgICAgICAgICAgICBBVVhJTzQgaW5wdXQgZGF0YQorLy8gQVVYSU8zICAgICAgICAgICAgICAgICAgIEFVWElPMyBpbnB1dCBkYXRhCisvLyBBVVhJTzIgICAgICAgICAgICAgICAgICAgQVVYSU8yIGlucHV0IGRhdGEKKy8vIEFVWElPMSAgICAgICAgICAgICAgICAgICBBVVhJTzEgaW5wdXQgZGF0YQorLy8gQVVYSU8wICAgICAgICAgICAgICAgICAgIEFVWElPMCBpbnB1dCBkYXRhCisvLyBBT05fUFJPR19XVSAgICAgICAgICAgICAgQU9OX1BST0dfV1UgZXZlbnQKKy8vIEFPTl9TVyAgICAgICAgICAgICAgICAgICBBT05fU1cgZXZlbnQKKy8vIE9CU01VWDEgICAgICAgICAgICAgICAgICBPQlNNVVgxIGV2ZW50CisvLyBPQlNNVVgwICAgICAgICAgICAgICAgICAgT0JTTVVYMCBldmVudAorLy8gQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgIEFEQ19GSUZPX0FMTU9TVF9GVUxMIGV2ZW50CisvLyBBRENfRE9ORSAgICAgICAgICAgICAgICAgQURDX0RPTkUgZXZlbnQKKy8vIFNNUEhfQVVUT1RBS0VfRE9ORSAgICAgICBTTVBIX0FVVE9UQUtFX0RPTkUgZXZlbnQKKy8vIFRJTUVSMV9FViAgICAgICAgICAgICAgICBUSU1FUjFfRVYgZXZlbnQKKy8vIFRJTUVSMF9FViAgICAgICAgICAgICAgICBUSU1FUjBfRVYgZXZlbnQKKy8vIFREQ19ET05FICAgICAgICAgICAgICAgICBURENfRE9ORSBldmVudAorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIEFVWF9DT01QQiBldmVudAorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIEFVWF9DT01QQSBldmVudAorLy8gQU9OX1JUQ19DSDIgICAgICAgICAgICAgIEFPTl9SVENfQ0gyIGV2ZW50CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9NQ1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FDTEtfUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYSU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FVWElPMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYSU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FVWElPMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYSU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTYKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FVWElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYSU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FVWElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYSU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FVWElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYSU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BT05fUFJPR19XVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FPTl9TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfT0JTTVVYMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BT05fUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX1ZFQ0NGRzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE0XSBWRUMzX1BPTAorLy8KKy8vIFNlbGVjdHMgdmVjdG9yIDMgdHJpZ2dlciBldmVudCBwb2xhcml0eS4KKy8vCisvLyBUbyBtYW51YWxseSB0cmlnZ2VyIHZlY3RvciAzIGV4ZWN1dGlvbiwgc2V0IFZFQzNfRVYgdG8gYSBrbm93biBzdGF0aWMgdmFsdWUsCisvLyBhbmQgdG9nZ2xlIFZFQzNfUE9MIHR3aWNlLgorLy8gRU5VTXM6CisvLyBGQUxMICAgICAgICAgICAgICAgICAgICAgRmFsbGluZyBlZGdlIHRyaWdnZXJzIGV4ZWN1dGlvbi4KKy8vIFJJU0UgICAgICAgICAgICAgICAgICAgICBSaXNpbmcgZWRnZSB0cmlnZ2VycyBleGVjdXRpb24uCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19QT0xfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX1BPTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfUE9MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19QT0xfRkFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX1BPTF9SSVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTNdIFZFQzNfRU4KKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgdHJpZ2dlcmluZyBvZiB2ZWN0b3IgMyBleGVjdXRpb24uCisvLworLy8gV2hlbiBlbmFibGVkLCB0aGUgZWRnZSBzZWxlY3RlZCBieSBWRUMzX1BPTCBvbiB0aGUgZXZlbnQgc2VsZWN0ZWQgYnkgVkVDM19FVgorLy8gd2lsbCBzZXQgVkVDRkxBR1MuVkVDMywgd2hpY2ggaW4gdHVybiB0cmlnZ2VycyB2ZWN0b3IgMyBleGVjdXRpb24uCisvLworLy8gTm90ZTogTG93ZXIgdmVjdG9ycyAoMCwgMSBhbmQgMikgaGF2ZSBwcmlvcml0eS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFuIGV2ZW50IHNlbGVjdGVkIGJ5IFZFQzNfRVYgd2l0aCBwb2xhcml0eSBmcm9tCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVkVDM19QT0wgdHJpZ2dlcnMgYSBqdW1wIHRvIHZlY3RvciAjIDMgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaXMgaW4gc2xlZXAKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBFdmVudCBkZXRlY3Rpb24gaXMgZGlzYWJsZWQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICBbMTI6OF0gVkVDM19FVgorLy8KKy8vIFNlbGVjdHMgdmVjdG9yIDMgdHJpZ2dlciBzb3VyY2UgZXZlbnQuCisvLyBFTlVNczoKKy8vIEFEQ19JUlEgICAgICAgICAgICAgICAgICBBRENfSVJRIGV2ZW50CisvLyBNQ1VfRVYgICAgICAgICAgICAgICAgICAgTUNVX0VWIGV2ZW50CisvLyBBQ0xLX1JFRiAgICAgICAgICAgICAgICAgQUNMS19SRUYgZXZlbnQKKy8vIEFVWElPMTUgICAgICAgICAgICAgICAgICBBVVhJTzE1IGlucHV0IGRhdGEKKy8vIEFVWElPMTQgICAgICAgICAgICAgICAgICBBVVhJTzE0IGlucHV0IGRhdGEKKy8vIEFVWElPMTMgICAgICAgICAgICAgICAgICBBVVhJTzEzIGlucHV0IGRhdGEKKy8vIEFVWElPMTIgICAgICAgICAgICAgICAgICBBVVhJTzEyIGlucHV0IGRhdGEKKy8vIEFVWElPMTEgICAgICAgICAgICAgICAgICBBVVhJTzExIGlucHV0IGRhdGEKKy8vIEFVWElPMTAgICAgICAgICAgICAgICAgICBBVVhJTzEwIGlucHV0IGRhdGEKKy8vIEFVWElPOSAgICAgICAgICAgICAgICAgICBBVVhJTzkgaW5wdXQgZGF0YQorLy8gQVVYSU84ICAgICAgICAgICAgICAgICAgIEFVWElPOCBpbnB1dCBkYXRhCisvLyBBVVhJTzcgICAgICAgICAgICAgICAgICAgQVVYSU83IGlucHV0IGRhdGEKKy8vIEFVWElPNiAgICAgICAgICAgICAgICAgICBBVVhJTzYgaW5wdXQgZGF0YQorLy8gQVVYSU81ICAgICAgICAgICAgICAgICAgIEFVWElPNSBpbnB1dCBkYXRhCisvLyBBVVhJTzQgICAgICAgICAgICAgICAgICAgQVVYSU80IGlucHV0IGRhdGEKKy8vIEFVWElPMyAgICAgICAgICAgICAgICAgICBBVVhJTzMgaW5wdXQgZGF0YQorLy8gQVVYSU8yICAgICAgICAgICAgICAgICAgIEFVWElPMiBpbnB1dCBkYXRhCisvLyBBVVhJTzEgICAgICAgICAgICAgICAgICAgQVVYSU8xIGlucHV0IGRhdGEKKy8vIEFVWElPMCAgICAgICAgICAgICAgICAgICBBVVhJTzAgaW5wdXQgZGF0YQorLy8gQU9OX1BST0dfV1UgICAgICAgICAgICAgIEFPTl9QUk9HX1dVIGV2ZW50CisvLyBBT05fU1cgICAgICAgICAgICAgICAgICAgQU9OX1NXIGV2ZW50CisvLyBPQlNNVVgxICAgICAgICAgICAgICAgICAgT0JTTVVYMSBldmVudAorLy8gT0JTTVVYMCAgICAgICAgICAgICAgICAgIE9CU01VWDAgZXZlbnQKKy8vIEFEQ19GSUZPX0FMTU9TVF9GVUxMICAgICBBRENfRklGT19BTE1PU1RfRlVMTCBldmVudAorLy8gQURDX0RPTkUgICAgICAgICAgICAgICAgIEFEQ19ET05FIGV2ZW50CisvLyBTTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgU01QSF9BVVRPVEFLRV9ET05FIGV2ZW50CisvLyBUSU1FUjFfRVYgICAgICAgICAgICAgICAgVElNRVIxX0VWIGV2ZW50CisvLyBUSU1FUjBfRVYgICAgICAgICAgICAgICAgVElNRVIwX0VWIGV2ZW50CisvLyBURENfRE9ORSAgICAgICAgICAgICAgICAgVERDX0RPTkUgZXZlbnQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBBVVhfQ09NUEIgZXZlbnQKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBBVVhfQ09NUEEgZXZlbnQKKy8vIEFPTl9SVENfQ0gyICAgICAgICAgICAgICBBT05fUlRDX0NIMiBldmVudAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfTUNVX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFFMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BQ0xLX1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUQwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQzAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYSU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFCMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BVVhJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUEwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxOTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYSU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BVVhJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTcwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNjAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYSU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE1MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTQwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMzAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTEwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BVVhJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEUwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQU9OX1BST0dfV1UgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BT05fU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEIwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX09CU01VWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQU9OX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gVkVDMl9QT0wKKy8vCisvLyBTZWxlY3RzIHZlY3RvciAyIHRyaWdnZXIgZXZlbnQgcG9sYXJpdHkuCisvLworLy8gVG8gbWFudWFsbHkgdHJpZ2dlciB2ZWN0b3IgMiBleGVjdXRpb24sIHNldCBWRUMyX0VWIHRvIGEga25vd24gc3RhdGljIHZhbHVlLAorLy8gYW5kIHRvZ2dsZSBWRUMyX1BPTCB0d2ljZS4KKy8vIEVOVU1zOgorLy8gRkFMTCAgICAgICAgICAgICAgICAgICAgIEZhbGxpbmcgZWRnZSB0cmlnZ2VycyBleGVjdXRpb24uCisvLyBSSVNFICAgICAgICAgICAgICAgICAgICAgUmlzaW5nIGVkZ2UgdHJpZ2dlcnMgZXhlY3V0aW9uLgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfUE9MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9QT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX1BPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfUE9MX0ZBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9QT0xfUklTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs1XSBWRUMyX0VOCisvLworLy8gRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIHRyaWdnZXJpbmcgb2YgdmVjdG9yIDIgZXhlY3V0aW9uLgorLy8KKy8vIFdoZW4gZW5hYmxlZCwgdGhlIGVkZ2Ugc2VsZWN0ZWQgYnkgVkVDMl9QT0wgb24gdGhlIGV2ZW50IHNlbGVjdGVkIGJ5IFZFQzJfRVYKKy8vIHdpbGwgc2V0IFZFQ0ZMQUdTLlZFQzIsIHdoaWNoIGluIHR1cm4gdHJpZ2dlcnMgdmVjdG9yIDIgZXhlY3V0aW9uLgorLy8KKy8vIE5vdGU6IExvd2VyIHZlY3RvcnMgKDAgYW5kIDEpIGhhdmUgcHJpb3JpdHkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBBbiBldmVudCBzZWxlY3RlZCBieSBWRUMyX0VWIHdpdGggcG9sYXJpdHkgZnJvbQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFZFQzJfUE9MIHRyaWdnZXJzIGEganVtcCB0byB2ZWN0b3IgIyAyIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGlzIGluIHNsZWVwCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRXZlbnQgZGV0ZWN0aW9uIGlzIGRpc2FibGVkCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs0OjBdIFZFQzJfRVYKKy8vCisvLyBTZWxlY3RzIHZlY3RvciAyIHRyaWdnZXIgc291cmNlIGV2ZW50LgorLy8gRU5VTXM6CisvLyBBRENfSVJRICAgICAgICAgICAgICAgICAgQURDX0lSUSBldmVudAorLy8gTUNVX0VWICAgICAgICAgICAgICAgICAgIE1DVV9FViBldmVudAorLy8gQUNMS19SRUYgICAgICAgICAgICAgICAgIEFDTEtfUkVGIGV2ZW50CisvLyBBVVhJTzE1ICAgICAgICAgICAgICAgICAgQVVYSU8xNSBpbnB1dCBkYXRhCisvLyBBVVhJTzE0ICAgICAgICAgICAgICAgICAgQVVYSU8xNCBpbnB1dCBkYXRhCisvLyBBVVhJTzEzICAgICAgICAgICAgICAgICAgQVVYSU8xMyBpbnB1dCBkYXRhCisvLyBBVVhJTzEyICAgICAgICAgICAgICAgICAgQVVYSU8xMiBpbnB1dCBkYXRhCisvLyBBVVhJTzExICAgICAgICAgICAgICAgICAgQVVYSU8xMSBpbnB1dCBkYXRhCisvLyBBVVhJTzEwICAgICAgICAgICAgICAgICAgQVVYSU8xMCBpbnB1dCBkYXRhCisvLyBBVVhJTzkgICAgICAgICAgICAgICAgICAgQVVYSU85IGlucHV0IGRhdGEKKy8vIEFVWElPOCAgICAgICAgICAgICAgICAgICBBVVhJTzggaW5wdXQgZGF0YQorLy8gQVVYSU83ICAgICAgICAgICAgICAgICAgIEFVWElPNyBpbnB1dCBkYXRhCisvLyBBVVhJTzYgICAgICAgICAgICAgICAgICAgQVVYSU82IGlucHV0IGRhdGEKKy8vIEFVWElPNSAgICAgICAgICAgICAgICAgICBBVVhJTzUgaW5wdXQgZGF0YQorLy8gQVVYSU80ICAgICAgICAgICAgICAgICAgIEFVWElPNCBpbnB1dCBkYXRhCisvLyBBVVhJTzMgICAgICAgICAgICAgICAgICAgQVVYSU8zIGlucHV0IGRhdGEKKy8vIEFVWElPMiAgICAgICAgICAgICAgICAgICBBVVhJTzIgaW5wdXQgZGF0YQorLy8gQVVYSU8xICAgICAgICAgICAgICAgICAgIEFVWElPMSBpbnB1dCBkYXRhCisvLyBBVVhJTzAgICAgICAgICAgICAgICAgICAgQVVYSU8wIGlucHV0IGRhdGEKKy8vIEFPTl9QUk9HX1dVICAgICAgICAgICAgICBBT05fUFJPR19XVSBldmVudAorLy8gQU9OX1NXICAgICAgICAgICAgICAgICAgIEFPTl9TVyBldmVudAorLy8gT0JTTVVYMSAgICAgICAgICAgICAgICAgIE9CU01VWDEgZXZlbnQKKy8vIE9CU01VWDAgICAgICAgICAgICAgICAgICBPQlNNVVgwIGV2ZW50CisvLyBBRENfRklGT19BTE1PU1RfRlVMTCAgICAgQURDX0ZJRk9fQUxNT1NUX0ZVTEwgZXZlbnQKKy8vIEFEQ19ET05FICAgICAgICAgICAgICAgICBBRENfRE9ORSBldmVudAorLy8gU01QSF9BVVRPVEFLRV9ET05FICAgICAgIFNNUEhfQVVUT1RBS0VfRE9ORSBldmVudAorLy8gVElNRVIxX0VWICAgICAgICAgICAgICAgIFRJTUVSMV9FViBldmVudAorLy8gVElNRVIwX0VWICAgICAgICAgICAgICAgIFRJTUVSMF9FViBldmVudAorLy8gVERDX0RPTkUgICAgICAgICAgICAgICAgIFREQ19ET05FIGV2ZW50CisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQVVYX0NPTVBCIGV2ZW50CisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYX0NPTVBBIGV2ZW50CisvLyBBT05fUlRDX0NIMiAgICAgICAgICAgICAgQU9OX1JUQ19DSDIgZXZlbnQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX01DVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQUNMS19SRUYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWElPMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQVVYSU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWElPMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQVVYSU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhJTzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQVVYSU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQVVYSU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQVVYSU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FPTl9QUk9HX1dVICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQU9OX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9PQlNNVVgxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FPTl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0VWQ1RMX09fU0NFV0VWU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzQ6MF0gV0VWN19FVgorLy8KKy8vIFNlbGVjdHMgdGhlIGV2ZW50IHNvdXJjZSB0byBiZSBtYXBwZWQgdG8gQVVYX1NDRTpXVVNUQVQuRVZfU0lHTkFMUyBiaXQgNy4KKy8vIEVOVU1zOgorLy8gQURDX0lSUSAgICAgICAgICAgICAgICAgIEFEQ19JUlEgZXZlbnQKKy8vIE1DVV9FViAgICAgICAgICAgICAgICAgICBNQ1VfRVYgZXZlbnQKKy8vIEFDTEtfUkVGICAgICAgICAgICAgICAgICBBQ0xLX1JFRiBldmVudAorLy8gQVVYSU8xNSAgICAgICAgICAgICAgICAgIEFVWElPMTUgaW5wdXQgZGF0YQorLy8gQVVYSU8xNCAgICAgICAgICAgICAgICAgIEFVWElPMTQgaW5wdXQgZGF0YQorLy8gQVVYSU8xMyAgICAgICAgICAgICAgICAgIEFVWElPMTMgaW5wdXQgZGF0YQorLy8gQVVYSU8xMiAgICAgICAgICAgICAgICAgIEFVWElPMTIgaW5wdXQgZGF0YQorLy8gQVVYSU8xMSAgICAgICAgICAgICAgICAgIEFVWElPMTEgaW5wdXQgZGF0YQorLy8gQVVYSU8xMCAgICAgICAgICAgICAgICAgIEFVWElPMTAgaW5wdXQgZGF0YQorLy8gQVVYSU85ICAgICAgICAgICAgICAgICAgIEFVWElPOSBpbnB1dCBkYXRhCisvLyBBVVhJTzggICAgICAgICAgICAgICAgICAgQVVYSU84IGlucHV0IGRhdGEKKy8vIEFVWElPNyAgICAgICAgICAgICAgICAgICBBVVhJTzcgaW5wdXQgZGF0YQorLy8gQVVYSU82ICAgICAgICAgICAgICAgICAgIEFVWElPNiBpbnB1dCBkYXRhCisvLyBBVVhJTzUgICAgICAgICAgICAgICAgICAgQVVYSU81IGlucHV0IGRhdGEKKy8vIEFVWElPNCAgICAgICAgICAgICAgICAgICBBVVhJTzQgaW5wdXQgZGF0YQorLy8gQVVYSU8zICAgICAgICAgICAgICAgICAgIEFVWElPMyBpbnB1dCBkYXRhCisvLyBBVVhJTzIgICAgICAgICAgICAgICAgICAgQVVYSU8yIGlucHV0IGRhdGEKKy8vIEFVWElPMSAgICAgICAgICAgICAgICAgICBBVVhJTzEgaW5wdXQgZGF0YQorLy8gQVVYSU8wICAgICAgICAgICAgICAgICAgIEFVWElPMCBpbnB1dCBkYXRhCisvLyBBT05fUFJPR19XVSAgICAgICAgICAgICAgQU9OX1BST0dfV1UgZXZlbnQKKy8vIEFPTl9TVyAgICAgICAgICAgICAgICAgICBBT05fU1cgZXZlbnQKKy8vIE9CU01VWDEgICAgICAgICAgICAgICAgICBPQlNNVVgxIGV2ZW50CisvLyBPQlNNVVgwICAgICAgICAgICAgICAgICAgT0JTTVVYMCBldmVudAorLy8gQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgIEFEQ19GSUZPX0FMTU9TVF9GVUxMIGV2ZW50CisvLyBBRENfRE9ORSAgICAgICAgICAgICAgICAgQURDX0RPTkUgZXZlbnQKKy8vIFNNUEhfQVVUT1RBS0VfRE9ORSAgICAgICBTTVBIX0FVVE9UQUtFX0RPTkUgZXZlbnQKKy8vIFRJTUVSMV9FViAgICAgICAgICAgICAgICBUSU1FUjFfRVYgZXZlbnQKKy8vIFRJTUVSMF9FViAgICAgICAgICAgICAgICBUSU1FUjBfRVYgZXZlbnQKKy8vIFREQ19ET05FICAgICAgICAgICAgICAgICBURENfRE9ORSBldmVudAorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIEFVWF9DT01QQiBldmVudAorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIEFVWF9DT01QQSBldmVudAorLy8gQU9OX1JUQ19DSDIgICAgICAgICAgICAgIEFPTl9SVENfQ0gyIGV2ZW50CisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX01DVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQUNMS19SRUYgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWElPMTQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQVVYSU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhJTzEyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWElPMTEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQVVYSU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhJTzkgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTYKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQVVYSU83ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhJTzYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQVVYSU80ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhJTzMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQVVYSU8xICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhJTzAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FPTl9QUk9HX1dVICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQU9OX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9PQlNNVVgxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FPTl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX0VWVE9BT05GTEFHUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzhdIFRJTUVSMV9FVgorLy8KKy8vIFRJTUVSMV9FViBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfVElNRVIxX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19USU1FUjFfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1RJTUVSMV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIFRJTUVSMF9FVgorLy8KKy8vIFRJTUVSMF9FViBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfVElNRVIwX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19USU1FUjBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1RJTUVSMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFREQ19ET05FCisvLworLy8gVERDX0RPTkUgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1REQ19ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfVERDX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19URENfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBBRENfRE9ORQorLy8KKy8vIEFEQ19ET05FIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19BRENfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX0FEQ19ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfQURDX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQVVYX0NPTVBCCisvLworLy8gQVVYX0NPTVBCIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19BVVhfQ09NUEJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX0FVWF9DT01QQl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfQVVYX0NPTVBCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gQVVYX0NPTVBBCisvLworLy8gQVVYX0NPTVBBIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19BVVhfQ09NUEFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX0FVWF9DT01QQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfQVVYX0NPTVBBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gU1dFVjIKKy8vCisvLyBTV0VWMiBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1NXRVYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfU1dFVjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19TV0VWMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1NXRVYyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFNXRVYxCisvLworLy8gU1dFVjEgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1NXRVYxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfU1dFVjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19TV0VWMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBTV0VWMAorLy8KKy8vIFNXRVYwIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19TV0VWMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1NXRVYwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfU1dFVjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfRVZDVExfT19FVlRPQU9OUE9MCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOF0gVElNRVIxX0VWCisvLworLy8gU2VsZWN0cyB0aGUgZXZlbnQgc291cmNlIGxldmVsIHRoYXQgc2V0cyBFVlRPQU9ORkxBR1MuVElNRVIxX0VWLgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1RJTUVSMV9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVElNRVIxX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9USU1FUjFfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1RJTUVSMV9FVl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVElNRVIxX0VWX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs3XSBUSU1FUjBfRVYKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9BT05GTEFHUy5USU1FUjBfRVYuCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBMb3cgbGV2ZWwKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBIaWdoIGxldmVsCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVElNRVIwX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9USU1FUjBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1RJTUVSMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVElNRVIwX0VWX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9USU1FUjBfRVZfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIFREQ19ET05FCisvLworLy8gU2VsZWN0cyB0aGUgZXZlbnQgc291cmNlIGxldmVsIHRoYXQgc2V0cyBFVlRPQU9ORkxBR1MuVERDX0RPTkUuCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBMb3cgbGV2ZWwKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBIaWdoIGxldmVsCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVERDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9URENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1REQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVERDX0RPTkVfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9URENfRE9ORV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIEFEQ19ET05FCisvLworLy8gU2VsZWN0cyB0aGUgZXZlbnQgc291cmNlIGxldmVsIHRoYXQgc2V0cyBFVlRPQU9ORkxBR1MuQURDX0RPTkUuCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBMb3cgbGV2ZWwKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBIaWdoIGxldmVsCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQURDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BRENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FEQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQURDX0RPTkVfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BRENfRE9ORV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzRdIEFVWF9DT01QQgorLy8KKy8vIFNlbGVjdHMgdGhlIGV2ZW50IHNvdXJjZSBsZXZlbCB0aGF0IHNldHMgRVZUT0FPTkZMQUdTLkFVWF9DT01QQi4KKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIExvdyBsZXZlbAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIEhpZ2ggbGV2ZWwKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BVVhfQ09NUEJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FVWF9DT01QQl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQVVYX0NPTVBCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BVVhfQ09NUEJfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FVWF9DT01QQl9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gQVVYX0NPTVBBCisvLworLy8gU2VsZWN0cyB0aGUgZXZlbnQgc291cmNlIGxldmVsIHRoYXQgc2V0cyBFVlRPQU9ORkxBR1MuQVVYX0NPTVBBLgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FVWF9DT01QQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQVVYX0NPTVBBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BVVhfQ09NUEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FVWF9DT01QQV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQVVYX0NPTVBBX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX0RNQUNUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIFJFUV9NT0RFCisvLworLy8gRE1BIFJlcXVlc3QgbW9kZQorLy8gRU5VTXM6CisvLyBTSU5HTEUgICAgICAgICAgICAgICAgICAgU2luZ2xlIHJlcXVlc3RzIGFyZSBnZW5lcmF0ZWQgb24gRE1BIGNoYW5uZWwgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIGNvbmRpdGlvbiBjb25maWd1cmVkIGluIFNFTCBpcyBtZXQKKy8vIEJVUlNUICAgICAgICAgICAgICAgICAgICBCdXJzdCByZXF1ZXN0cyBhcmUgZ2VuZXJhdGVkIG9uIERNQSBjaGFubmVsIDcgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25kaXRpb24gY29uZmlndXJlZCBpbiBTRUwgaXMgbWV0CisjZGVmaW5lIEFVWF9FVkNUTF9ETUFDVExfUkVRX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0RNQUNUTF9SRVFfTU9ERV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfRVZDVExfRE1BQ1RMX1JFUV9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9ETUFDVExfUkVRX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0RNQUNUTF9SRVFfTU9ERV9TSU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfRE1BQ1RMX1JFUV9NT0RFX0JVUlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIEVOCisvLworLy8gMDogRE1BIGludGVyZmFjZSBpcyBkaXNhYmxlZAorLy8gMTogRE1BIGludGVyZmFjZSBpcyBlbmFibGVkCisjZGVmaW5lIEFVWF9FVkNUTF9ETUFDVExfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0RNQUNUTF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfRVZDVExfRE1BQ1RMX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9ETUFDVExfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gU0VMCisvLworLy8gU2VsZWN0aW9uIG9mIEZJRk8gd2F0ZXJtYXJrIGxldmVsIHJlcXVpcmVkIHRvIHRyaWdnZXIgYW4gQURDX0RNQSB0cmFuc2ZlcgorLy8gRU5VTXM6CisvLyBGSUZPX0FMTU9TVF9GVUxMICAgICAgICAgQURDX0RNQSBldmVudCB3aWxsIGJlIGdlbmVyYXRlZCB3aGVuIHRoZSBBREMgRklGTworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFsbW9zdCBmdWxsICgzLzQgZnVsbCkKKy8vIEZJRk9fTk9UX0VNUFRZICAgICAgICAgICBBRENfRE1BIGV2ZW50IHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gdGhlcmUgYXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgc2FtcGxlcyBpbiB0aGUgQURDIEZJRk8KKyNkZWZpbmUgQVVYX0VWQ1RMX0RNQUNUTF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfRE1BQ1RMX1NFTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9FVkNUTF9ETUFDVExfU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0RNQUNUTF9TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfRE1BQ1RMX1NFTF9GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9ETUFDVExfU0VMX0ZJRk9fTk9UX0VNUFRZICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfRVZDVExfT19TV0VWU0VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gU1dFVjIKKy8vCisvLyBXcml0aW5nIDEgc2V0cyBzb2Z0d2FyZSBldmVudCAyLgorLy8KKy8vIEZvciB0aGUgTUNVIGRvbWFpbiwgdGhlIGV2ZW50IGZsYWcgY2FuIGJlIHJlYWQgZnJvbSBFVlRPQU9ORkxBR1MuU1dFVjIgYW5kCisvLyBjbGVhcmVkIHVzaW5nIEVWVE9BT05GTEFHU0NMUi5TV0VWMi4KKyNkZWZpbmUgQVVYX0VWQ1RMX1NXRVZTRVRfU1dFVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfU1dFVlNFVF9TV0VWMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9FVkNUTF9TV0VWU0VUX1NXRVYyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX1NXRVZTRVRfU1dFVjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBTV0VWMQorLy8KKy8vIFdyaXRpbmcgMSBzZXRzIHNvZnR3YXJlIGV2ZW50IDEuCisvLworLy8gRm9yIHRoZSBNQ1UgZG9tYWluLCB0aGUgZXZlbnQgZmxhZyBjYW4gYmUgcmVhZCBmcm9tIEVWVE9BT05GTEFHUy5TV0VWMSBhbmQKKy8vIGNsZWFyZWQgdXNpbmcgRVZUT0FPTkZMQUdTQ0xSLlNXRVYxLgorI2RlZmluZSBBVVhfRVZDVExfU1dFVlNFVF9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9TV0VWU0VUX1NXRVYxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX0VWQ1RMX1NXRVZTRVRfU1dFVjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfU1dFVlNFVF9TV0VWMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFNXRVYwCisvLworLy8gV3JpdGluZyAxIHNldHMgc29mdHdhcmUgZXZlbnQgMC4KKy8vCisvLyBGb3IgdGhlIE1DVSBkb21haW4sIHRoZSBldmVudCBmbGFnIGNhbiBiZSByZWFkIGZyb20gRVZUT0FPTkZMQUdTLlNXRVYwIGFuZAorLy8gY2xlYXJlZCB1c2luZyBFVlRPQU9ORkxBR1NDTFIuU1dFVjAuCisjZGVmaW5lIEFVWF9FVkNUTF9TV0VWU0VUX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX1NXRVZTRVRfU1dFVjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfU1dFVlNFVF9TV0VWMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9TV0VWU0VUX1NXRVYwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfRVZDVExfT19FVlNUQVQwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxNV0gQVVYSU8yCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzIgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYSU8yX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhJTzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWElPMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gQVVYSU8xCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzEgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYSU8xX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhJTzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWElPMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gQVVYSU8wCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzAgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYSU8wX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhJTzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWElPMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gQU9OX1BST0dfV1UKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIE9CU01VWDMgZXZlbnQgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BT05fUFJPR19XVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FPTl9QUk9HX1dVX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQU9OX1BST0dfV1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BT05fUFJPR19XVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIEFPTl9TVworLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgT0JTTVVYMiBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FPTl9TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQU9OX1NXX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BT05fU1dfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FPTl9TV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gT0JTTVVYMQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgT0JTTVVYMSBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX09CU01VWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfT0JTTVVYMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9PQlNNVVgxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX09CU01VWDFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gT0JTTVVYMAorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgT0JTTVVYMCBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfT0JTTVVYMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9PQlNNVVgwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX09CU01VWDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIEFEQ19GSUZPX0FMTU9TVF9GVUxMIGV2ZW50IGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BRENfRklGT19BTE1PU1RfRlVMTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FEQ19GSUZPX0FMTU9TVF9GVUxMX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQURDX0ZJRk9fQUxNT1NUX0ZVTExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBBRENfRE9ORQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQURDX0RPTkUgZXZlbnQgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FEQ19ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQURDX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BRENfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFNNUEhfQVVUT1RBS0VfRE9ORQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgU01QSF9BVVRPVEFLRV9ET05FIGV2ZW50IGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9TTVBIX0FVVE9UQUtFX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX1NNUEhfQVVUT1RBS0VfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfU01QSF9BVVRPVEFLRV9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBUSU1FUjFfRVYKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIFRJTUVSMV9FViBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfVElNRVIxX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9USU1FUjFfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX1RJTUVSMV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gVElNRVIwX0VWCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBUSU1FUjBfRVYgZXZlbnQgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX1RJTUVSMF9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfVElNRVIwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9USU1FUjBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFREQ19ET05FCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBURENfRE9ORSBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfVERDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9URENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX1REQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQVVYX0NPTVBCCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhfQ09NUEIgZXZlbnQgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWF9DT01QQl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYX0NPTVBCX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhfQ09NUEJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEFVWF9DT01QQQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYX0NPTVBBIGV2ZW50IGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhfQ09NUEFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWF9DT01QQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYX0NPTVBBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBBT05fUlRDX0NIMgorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQU9OX1JUQ19DSDIgZXZlbnQgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BT05fUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FPTl9SVENfQ0gyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQU9OX1JUQ19DSDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BT05fUlRDX0NIMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0VWQ1RMX09fRVZTVEFUMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTVdIEFEQ19JUlEKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIEFEQ19JUlEgZXZlbnQgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FEQ19JUlFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQURDX0lSUV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BRENfSVJRX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIE1DVV9FVgorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgTUNVX0VWIGV2ZW50IGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfTUNVX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9NQ1VfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX01DVV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfTUNVX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBBQ0xLX1JFRgorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQUNMS19SRUYgZXZlbnQgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BQ0xLX1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FDTEtfUkVGX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQUNMS19SRUZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BQ0xLX1JFRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIEFVWElPMTUKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIEFVWElPMTUgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gQVVYSU8xNAorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYSU8xNCBpbnB1dCBkYXRhIGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBBVVhJTzEzCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzEzIGlucHV0IGRhdGEgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIEFVWElPMTIKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIEFVWElPMTIgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gQVVYSU8xMQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYSU8xMSBpbnB1dCBkYXRhIGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBBVVhJTzEwCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzEwIGlucHV0IGRhdGEgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIEFVWElPOQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYSU85IGlucHV0IGRhdGEgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU85X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIEFVWElPOAorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYSU84IGlucHV0IGRhdGEgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU84X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIEFVWElPNworLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYSU83IGlucHV0IGRhdGEgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU83X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIEFVWElPNgorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYSU82IGlucHV0IGRhdGEgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU82X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEFVWElPNQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYSU81IGlucHV0IGRhdGEgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU81X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEFVWElPNAorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYSU80IGlucHV0IGRhdGEgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU80X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEFVWElPMworLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYSU8zIGlucHV0IGRhdGEgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8zX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0VWQ1RMX09fRVZUT01DVVBPTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTBdIEFEQ19JUlEKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9NQ1VGTEFHUy5BRENfSVJRLgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19JUlFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0lSUV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfSVJRX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19JUlFfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0lSUV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs5XSBPQlNNVVgwCisvLworLy8gU2VsZWN0cyB0aGUgZXZlbnQgc291cmNlIGxldmVsIHRoYXQgc2V0cyBFVlRPTUNVRkxBR1MuT0JTTVVYMC4KKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIExvdyBsZXZlbAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIEhpZ2ggbGV2ZWwKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9PQlNNVVgwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX09CU01VWDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfT0JTTVVYMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9PQlNNVVgwX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX09CU01VWDBfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOF0gQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9NQ1VGTEFHUy5BRENfRklGT19BTE1PU1RfRlVMTC4KKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIExvdyBsZXZlbAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIEhpZ2ggbGV2ZWwKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfRklGT19BTE1PU1RfRlVMTF9CSVROICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19GSUZPX0FMTU9TVF9GVUxMX00gICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0ZJRk9fQUxNT1NUX0ZVTExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfRklGT19BTE1PU1RfRlVMTF9MT1cgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19GSUZPX0FMTU9TVF9GVUxMX0hJR0ggICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbN10gQURDX0RPTkUKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9NQ1VGTEFHUy5BRENfRE9ORS4KKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIExvdyBsZXZlbAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIEhpZ2ggbGV2ZWwKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfRE9ORV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19ET05FX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gU01QSF9BVVRPVEFLRV9ET05FCisvLworLy8gU2VsZWN0cyB0aGUgZXZlbnQgc291cmNlIGxldmVsIHRoYXQgc2V0cyBFVlRPTUNVRkxBR1MuU01QSF9BVVRPVEFLRV9ET05FLgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1NNUEhfQVVUT1RBS0VfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfU01QSF9BVVRPVEFLRV9ET05FX00gICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9TTVBIX0FVVE9UQUtFX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1NNUEhfQVVUT1RBS0VfRE9ORV9MT1cgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfU01QSF9BVVRPVEFLRV9ET05FX0hJR0ggICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs1XSBUSU1FUjFfRVYKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9NQ1VGTEFHUy5USU1FUjFfRVYuCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBMb3cgbGV2ZWwKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBIaWdoIGxldmVsCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVElNRVIxX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9USU1FUjFfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1RJTUVSMV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVElNRVIxX0VWX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9USU1FUjFfRVZfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzRdIFRJTUVSMF9FVgorLy8KKy8vIFNlbGVjdHMgdGhlIGV2ZW50IHNvdXJjZSBsZXZlbCB0aGF0IHNldHMgRVZUT01DVUZMQUdTLlRJTUVSMF9FVi4KKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIExvdyBsZXZlbAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIEhpZ2ggbGV2ZWwKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9USU1FUjBfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1RJTUVSMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVElNRVIwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9USU1FUjBfRVZfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1RJTUVSMF9FVl9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gVERDX0RPTkUKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9NQ1VGTEFHUy5URENfRE9ORS4KKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIExvdyBsZXZlbAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIEhpZ2ggbGV2ZWwKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9URENfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1REQ19ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVERDX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9URENfRE9ORV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1REQ19ET05FX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMl0gQVVYX0NPTVBCCisvLworLy8gU2VsZWN0cyB0aGUgZXZlbnQgc291cmNlIGxldmVsIHRoYXQgc2V0cyBFVlRPTUNVRkxBR1MuQVVYX0NPTVBCLgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FVWF9DT01QQl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQVVYX0NPTVBCX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BVVhfQ09NUEJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FVWF9DT01QQl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQVVYX0NPTVBCX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBBVVhfQ09NUEEKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9NQ1VGTEFHUy5BVVhfQ09NUEEuCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBMb3cgbGV2ZWwKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBIaWdoIGxldmVsCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQVVYX0NPTVBBX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BVVhfQ09NUEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FVWF9DT01QQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQVVYX0NPTVBBX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BVVhfQ09NUEFfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIEFPTl9XVV9FVgorLy8KKy8vIFNlbGVjdHMgdGhlIGV2ZW50IHNvdXJjZSBsZXZlbCB0aGF0IHNldHMgRVZUT01DVUZMQUdTLkFPTl9XVV9FVgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BT05fV1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FPTl9XVV9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQU9OX1dVX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BT05fV1VfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FPTl9XVV9FVl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQU9OX1dVX0VWX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX0VWVE9NQ1VGTEFHUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTBdIEFEQ19JUlEKKy8vCisvLyBBRENfSVJRIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BRENfSVJRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FEQ19JUlFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQURDX0lSUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gT0JTTVVYMAorLy8KKy8vIE9CU01VWDAgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX09CU01VWDBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfT0JTTVVYMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19PQlNNVVgwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBBRENfRklGT19BTE1PU1RfRlVMTAorLy8KKy8vIEFEQ19GSUZPX0FMTU9TVF9GVUxMIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BRENfRklGT19BTE1PU1RfRlVMTF9CSVROICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FEQ19GSUZPX0FMTU9TVF9GVUxMX00gICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQURDX0ZJRk9fQUxNT1NUX0ZVTExfUyAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gQURDX0RPTkUKKy8vCisvLyBBRENfRE9ORSBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQURDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BRENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FEQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFNNUEhfQVVUT1RBS0VfRE9ORQorLy8KKy8vIFNNUEhfQVVUT1RBS0VfRE9ORSBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfU01QSF9BVVRPVEFLRV9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19TTVBIX0FVVE9UQUtFX0RPTkVfTSAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1NNUEhfQVVUT1RBS0VfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFRJTUVSMV9FVgorLy8KKy8vIFRJTUVSMV9FViBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfVElNRVIxX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19USU1FUjFfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1RJTUVSMV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFRJTUVSMF9FVgorLy8KKy8vIFRJTUVSMF9FViBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfVElNRVIwX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19USU1FUjBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1RJTUVSMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFREQ19ET05FCisvLworLy8gVERDX0RPTkUgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1REQ19ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfVERDX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19URENfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBBVVhfQ09NUEIKKy8vCisvLyBBVVhfQ09NUEIgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FVWF9DT01QQl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQVVYX0NPTVBCX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BVVhfQ09NUEJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBBVVhfQ09NUEEKKy8vCisvLyBBVVhfQ09NUEEgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FVWF9DT01QQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQVVYX0NPTVBBX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BVVhfQ09NUEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBBT05fV1VfRVYKKy8vCisvLyBBT05fV1VfRVYgZXZlbnQgZmxhZy4KKy8vCisvLyBUaGlzIGlzIGFuIE9SIG9mIHRoZSBBT05fUlRDX0NIMiwgQU9OX1BST0dfV1UgYW5kIEFPTl9TVyBldmVudHMuIFRoZXNlIGV2ZW50CisvLyBzb3VyY2VzIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgY2xlYXJpbmcgQU9OX1dVX0VWLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FPTl9XVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQU9OX1dVX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BT05fV1VfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FPTl9XVV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0VWQ1RMX09fQ09NQkVWVE9NQ1VNQVNLCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxMF0gQURDX0lSUQorLy8KKy8vIEluY2x1ZGVzICgxKSBvciBleGNsdWRlcyAoMCkgRVZUT01DVUZMQUdTLkFEQ19JUlEgY29udHJpYnV0aW9uIHRvIHRoZQorLy8gQVVYX0NPTUIgZXZlbnQuCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BRENfSVJRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FEQ19JUlFfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQURDX0lSUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gT0JTTVVYMAorLy8KKy8vIEluY2x1ZGVzICgxKSBvciBleGNsdWRlcyAoMCkgRVZUT01DVUZMQUdTLk9CU01VWDAgY29udHJpYnV0aW9uIHRvIHRoZQorLy8gQVVYX0NPTUIgZXZlbnQuCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19PQlNNVVgwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX09CU01VWDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfT0JTTVVYMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vCisvLyBJbmNsdWRlcyAoMSkgb3IgZXhjbHVkZXMgKDApIEVWVE9NQ1VGTEFHUy5BRENfRklGT19BTE1PU1RfRlVMTCBjb250cmlidXRpb24KKy8vIHRvIHRoZSBBVVhfQ09NQiBldmVudC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FEQ19GSUZPX0FMTU9TVF9GVUxMX0JJVE4gICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQURDX0ZJRk9fQUxNT1NUX0ZVTExfTSAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BRENfRklGT19BTE1PU1RfRlVMTF9TICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBBRENfRE9ORQorLy8KKy8vIEluY2x1ZGVzICgxKSBvciBleGNsdWRlcyAoMCkgRVZUT01DVUZMQUdTLkFEQ19ET05FIGNvbnRyaWJ1dGlvbiB0byB0aGUKKy8vIEFVWF9DT01CIGV2ZW50LgorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQURDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BRENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FEQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFNNUEhfQVVUT1RBS0VfRE9ORQorLy8KKy8vIEluY2x1ZGVzICgxKSBvciBleGNsdWRlcyAoMCkgRVZUT01DVUZMQUdTLlNNUEhfQVVUT1RBS0VfRE9ORSBjb250cmlidXRpb24gdG8KKy8vIHRoZSBBVVhfQ09NQiBldmVudC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX1NNUEhfQVVUT1RBS0VfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfU01QSF9BVVRPVEFLRV9ET05FX00gICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19TTVBIX0FVVE9UQUtFX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBUSU1FUjFfRVYKKy8vCisvLyBJbmNsdWRlcyAoMSkgb3IgZXhjbHVkZXMgKDApIEVWVE9NQ1VGTEFHUy5USU1FUjFfRVYgY29udHJpYnV0aW9uIHRvIHRoZQorLy8gQVVYX0NPTUIgZXZlbnQuCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19USU1FUjFfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX1RJTUVSMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfVElNRVIxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gVElNRVIwX0VWCisvLworLy8gSW5jbHVkZXMgKDEpIG9yIGV4Y2x1ZGVzICgwKSBFVlRPTUNVRkxBR1MuVElNRVIwX0VWIGNvbnRyaWJ1dGlvbiB0byB0aGUKKy8vIEFVWF9DT01CIGV2ZW50LgorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfVElNRVIwX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19USU1FUjBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX1RJTUVSMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFREQ19ET05FCisvLworLy8gSW5jbHVkZXMgKDEpIG9yIGV4Y2x1ZGVzICgwKSBFVlRPTUNVRkxBR1MuVERDX0RPTkUgY29udHJpYnV0aW9uIHRvIHRoZQorLy8gQVVYX0NPTUIgZXZlbnQuCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19URENfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX1REQ19ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfVERDX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQVVYX0NPTVBCCisvLworLy8gSW5jbHVkZXMgKDEpIG9yIGV4Y2x1ZGVzICgwKSBFVlRPTUNVRkxBR1MuQVVYX0NPTVBCIGNvbnRyaWJ1dGlvbiB0byB0aGUKKy8vIEFVWF9DT01CIGV2ZW50LgorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQVVYX0NPTVBCX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BVVhfQ09NUEJfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FVWF9DT01QQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEFVWF9DT01QQQorLy8KKy8vIEluY2x1ZGVzICgxKSBvciBleGNsdWRlcyAoMCkgRVZUT01DVUZMQUdTLkFVWF9DT01QQSBjb250cmlidXRpb24gdG8gdGhlCisvLyBBVVhfQ09NQiBldmVudC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FVWF9DT01QQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQVVYX0NPTVBBX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BVVhfQ09NUEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBBT05fV1VfRVYKKy8vCisvLyBJbmNsdWRlcyAoMSkgb3IgZXhjbHVkZXMgKDApIEVWVE9NQ1VGTEFHUy5BT05fV1VfRVYgY29udHJpYnV0aW9uIHRvIHRoZQorLy8gQVVYX0NPTUIgZXZlbnQuCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQU9OX1dVX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BT05fV1VfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FPTl9XVV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQU9OX1dVX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfRVZDVExfT19WRUNGTEFHUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzNdIFZFQzMKKy8vCisvLyBUaGUgdmVjdG9yIGZsYWcgaXMgc2V0IGlmIHRoZSBlZGdlIHNlbGVjdGVkIFZFQ0NGRzEuVkVDM19QT0wgb2NjdXJzIG9uIHRoZQorLy8gZXZlbnQgc2VsZWN0ZWQgaW4gVkVDQ0ZHMS5WRUMzX0VWLgorLy8KKy8vIFRoZSBmbGFnIGlzIGNsZWFyZWQgYnkgd3JpdGluZyBhIDAgdG8gdGhpcyBiaXQsIG9yIChwcmVmZXJhYmx5KSBhIDEgdG8KKy8vIFZFQ0ZMQUdTQ0xSLlZFQzMuCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU19WRUMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTX1ZFQzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NfVkVDM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU19WRUMzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gVkVDMgorLy8KKy8vIFRoZSB2ZWN0b3IgZmxhZyBpcyBzZXQgaWYgdGhlIGVkZ2Ugc2VsZWN0ZWQgVkVDQ0ZHMS5WRUMyX1BPTCBvY2N1cnMgb24gdGhlCisvLyBldmVudCBzZWxlY3RlZCBpbiBWRUNDRkcxLlZFQzJfRVYuCisvLworLy8gVGhlIGZsYWcgaXMgY2xlYXJlZCBieSB3cml0aW5nIGEgMCB0byB0aGlzIGJpdCwgb3IgKHByZWZlcmFibHkpIGEgMSB0bworLy8gVkVDRkxBR1NDTFIuVkVDMi4KKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NfVkVDMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU19WRUMyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTX1ZFQzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBWRUMxCisvLworLy8gVGhlIHZlY3RvciBmbGFnIGlzIHNldCBpZiB0aGUgZWRnZSBzZWxlY3RlZCBWRUNDRkcwLlZFQzFfUE9MIG9jY3VycyBvbiB0aGUKKy8vIGV2ZW50IHNlbGVjdGVkIGluIFZFQ0NGRzAuVkVDMV9FVi4KKy8vCisvLyBUaGUgZmxhZyBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgYSAwIHRvIHRoaXMgYml0LCBvciAocHJlZmVyYWJseSkgYSAxIHRvCisvLyBWRUNGTEFHU0NMUi5WRUMxLgorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NfVkVDMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU19WRUMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTX1ZFQzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NfVkVDMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFZFQzAKKy8vCisvLyBUaGUgdmVjdG9yIGZsYWcgaXMgc2V0IGlmIHRoZSBlZGdlIHNlbGVjdGVkIFZFQ0NGRzAuVkVDMF9QT0wgb2NjdXJzIG9uIHRoZQorLy8gZXZlbnQgc2VsZWN0ZWQgaW4gVkVDQ0ZHMC5WRUMwX0VWLgorLy8KKy8vIFRoZSBmbGFnIGlzIGNsZWFyZWQgYnkgd3JpdGluZyBhIDAgdG8gdGhpcyBiaXQsIG9yIChwcmVmZXJhYmx5KSBhIDEgdG8KKy8vIFZFQ0ZMQUdTQ0xSLlZFQzAuCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU19WRUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTX1ZFQzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NfVkVDMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU19WRUMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfRVZDVExfT19FVlRPTUNVRkxBR1NDTFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzEwXSBBRENfSVJRCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPTUNVRkxBR1MuQURDX0lSUS4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BRENfSVJRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FEQ19JUlFfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQURDX0lSUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gT0JTTVVYMAorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT01DVUZMQUdTLk9CU01VWDAuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfT0JTTVVYMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9PQlNNVVgwX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX09CU01VWDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIEFEQ19GSUZPX0FMTU9TVF9GVUxMCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPTUNVRkxBR1MuQURDX0ZJRk9fQUxNT1NUX0ZVTEwuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQURDX0ZJRk9fQUxNT1NUX0ZVTExfQklUTiAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BRENfRklGT19BTE1PU1RfRlVMTF9NICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FEQ19GSUZPX0FMTU9TVF9GVUxMX1MgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIEFEQ19ET05FCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPTUNVRkxBR1MuQURDX0RPTkUuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQURDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BRENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FEQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFNNUEhfQVVUT1RBS0VfRE9ORQorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgW0VWVE9NQ1VGTEFHUy5TTVBIX0FVVE9UQUtFX0RPTkUuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfU01QSF9BVVRPVEFLRV9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9TTVBIX0FVVE9UQUtFX0RPTkVfTSAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX1NNUEhfQVVUT1RBS0VfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFRJTUVSMV9FVgorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT01DVUZMQUdTLlRJTUVSMV9FVi4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9USU1FUjFfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX1RJTUVSMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfVElNRVIxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gVElNRVIwX0VWCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPTUNVRkxBR1MuVElNRVIwX0VWLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX1RJTUVSMF9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfVElNRVIwX0VWX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9USU1FUjBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBURENfRE9ORQorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT01DVUZMQUdTLlREQ19ET05FLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX1REQ19ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfVERDX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9URENfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBBVVhfQ09NUEIKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIEVWVE9NQ1VGTEFHUy5BVVhfQ09NUEIuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQVVYX0NPTVBCX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BVVhfQ09NUEJfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FVWF9DT01QQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEFVWF9DT01QQQorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT01DVUZMQUdTLkFVWF9DT01QQS4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BVVhfQ09NUEFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FVWF9DT01QQV9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQVVYX0NPTVBBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQU9OX1dVX0VWCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPTUNVRkxBR1MuQU9OX1dVX0VWLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BT05fV1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FPTl9XVV9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQU9OX1dVX0VWX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BT05fV1VfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX0VWVE9BT05GTEFHU0NMUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzhdIFRJTUVSMV9FVgorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT0FPTkZMQUdTLlRJTUVSMV9FVi4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9USU1FUjFfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1RJTUVSMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfVElNRVIxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gVElNRVIwX0VWCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPQU9ORkxBR1MuVElNRVIwX0VWLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1RJTUVSMF9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfVElNRVIwX0VWX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9USU1FUjBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBURENfRE9ORQorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT0FPTkZMQUdTLlREQ19ET05FLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1REQ19ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfVERDX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9URENfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBBRENfRE9ORQorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT0FPTkZMQUdTLkFEQ19ET05FLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX0FEQ19ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfQURDX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9BRENfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBBVVhfQ09NUEIKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIEVWVE9BT05GTEFHUy5BVVhfQ09NUEIuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfQVVYX0NPTVBCX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9BVVhfQ09NUEJfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX0FVWF9DT01QQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIEFVWF9DT01QQQorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT0FPTkZMQUdTLkFVWF9DT01QQS4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9BVVhfQ09NUEFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX0FVWF9DT01QQV9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfQVVYX0NPTVBBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gU1dFVjIKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIEVWVE9BT05GTEFHUy5TV0VWMi4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfU1dFVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9TV0VWMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1NXRVYyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfU1dFVjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gU1dFVjEKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIEVWVE9BT05GTEFHUy5TV0VWMS4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfU1dFVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9TV0VWMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1NXRVYxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfU1dFVjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gU1dFVjAKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIEVWVE9BT05GTEFHUy5TV0VWMC4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9TV0VWMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1NXRVYwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfU1dFVjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfRVZDVExfT19WRUNGTEFHU0NMUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzNdIFZFQzMKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIFZFQ0ZMQUdTLlZFQzMuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTQ0xSX1ZFQzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFZFQzIKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIFZFQ0ZMQUdTLlZFQzIuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTQ0xSX1ZFQzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFZFQzEKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIFZFQ0ZMQUdTLlZFQzEuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTQ0xSX1ZFQzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFZFQzAKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIFZFQ0ZMQUdTLlZFQzAuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTQ0xSX1ZFQzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQVVYX0VWQ1RMX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF9zY2UuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF9zY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzU3OTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3NjZS5oCkBAIC0wLDAgKzEsMzgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYXV4X3NjZV9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19BVVhfU0NFX0hfXworI2RlZmluZSBfX0hXX0FVWF9TQ0VfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQVVYX1NDRSBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBJbnRlcm5hbAorI2RlZmluZSBBVVhfU0NFX09fQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFVWF9TQ0VfT19GRVRDSFNUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQVVYX1NDRV9PX0NQVVNUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBVVhfU0NFX09fV1VTVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFVWF9TQ0VfT19SRUcxXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQVVYX1NDRV9PX1JFRzNfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBVVhfU0NFX09fUkVHNV80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFVWF9TQ0VfT19SRUc3XzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQVVYX1NDRV9PX0xPT1BBRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBVVhfU0NFX09fTE9PUENOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NDRV9PX0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIEZPUkNFX0VWX0xPVworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0ZPUkNFX0VWX0xPV19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX1NDRV9DVExfRk9SQ0VfRVZfTE9XX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBBVVhfU0NFX0NUTF9GT1JDRV9FVl9MT1dfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIEZPUkNFX0VWX0hJR0gKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NUTF9GT1JDRV9FVl9ISUdIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0ZPUkNFX0VWX0hJR0hfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQVVYX1NDRV9DVExfRk9SQ0VfRVZfSElHSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxMTo4XSBSRVNFVF9WRUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NUTF9SRVNFVF9WRUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9TQ0VfQ1RMX1JFU0VUX1ZFQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQVVYX1NDRV9DVExfUkVTRVRfVkVDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs2XSBEQkdfRlJFRVpFX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9DVExfREJHX0ZSRUVaRV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfU0NFX0NUTF9EQkdfRlJFRVpFX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0RCR19GUkVFWkVfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX1NDRV9DVExfREJHX0ZSRUVaRV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBGT1JDRV9XVV9MT1cKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NUTF9GT1JDRV9XVV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0ZPUkNFX1dVX0xPV19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX1NDRV9DVExfRk9SQ0VfV1VfTE9XX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfU0NFX0NUTF9GT1JDRV9XVV9MT1dfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIEZPUkNFX1dVX0hJR0gKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NUTF9GT1JDRV9XVV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0ZPUkNFX1dVX0hJR0hfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX1NDRV9DVExfRk9SQ0VfV1VfSElHSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfU0NFX0NUTF9GT1JDRV9XVV9ISUdIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFJFU1RBUlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NUTF9SRVNUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9TQ0VfQ1RMX1JFU1RBUlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX1NDRV9DVExfUkVTVEFSVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfU0NFX0NUTF9SRVNUQVJUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFNJTkdMRV9TVEVQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9DVExfU0lOR0xFX1NURVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfU0NFX0NUTF9TSU5HTEVfU1RFUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX1NJTkdMRV9TVEVQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1NDRV9DVExfU0lOR0xFX1NURVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBTVVNQRU5ECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9DVExfU1VTUEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfU0NFX0NUTF9TVVNQRU5EX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX1NVU1BFTkRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1NDRV9DVExfU1VTUEVORF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBDTEtfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NUTF9DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1NDRV9DVExfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfU0NFX0NUTF9DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NDRV9PX0ZFVENIU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTZdIE9QQ09ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfRkVUQ0hTVEFUX09QQ09ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVVYX1NDRV9GRVRDSFNUQVRfT1BDT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBBVVhfU0NFX0ZFVENIU1RBVF9PUENPREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjBdIFBDCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9GRVRDSFNUQVRfUENfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfU0NFX0ZFVENIU1RBVF9QQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFVWF9TQ0VfRkVUQ0hTVEFUX1BDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU0NFX09fQ1BVU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTFdIEJVU19FUlJPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9CVVNfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX0JVU19FUlJPUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfQlVTX0VSUk9SX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9CVVNfRVJST1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gU0xFRVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9TTEVFUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1NMRUVQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfU0xFRVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFdFVgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9XRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1dFVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfV0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9XRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gU0VMRl9TVE9QCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1NFTEZfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfU0VMRl9TVE9QX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9TRUxGX1NUT1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1NFTEZfU1RPUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFszXSBWX0ZMQUcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfVl9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9WX0ZMQUdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1ZfRkxBR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfVl9GTEFHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIENfRkxBRworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9DX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX0NfRkxBR19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfQ19GTEFHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9DX0ZMQUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gTl9GTEFHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX05fRkxBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfTl9GTEFHX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9OX0ZMQUdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX05fRkxBR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBaX0ZMQUcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfWl9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9aX0ZMQUdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1pfRkxBR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfWl9GTEFHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NDRV9PX1dVU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTc6MTZdIEVYQ19WRUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX1dVU1RBVF9FWENfVkVDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9TQ0VfV1VTVEFUX0VYQ19WRUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgQVVYX1NDRV9XVVNUQVRfRVhDX1ZFQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgIFs4XSBXVV9TSUdOQUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX1dVU1RBVF9XVV9TSUdOQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9TQ0VfV1VTVEFUX1dVX1NJR05BTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX1NDRV9XVVNUQVRfV1VfU0lHTkFMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfU0NFX1dVU1RBVF9XVV9TSUdOQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEVWX1NJR05BTFMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX1dVU1RBVF9FVl9TSUdOQUxTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9TQ0VfV1VTVEFUX0VWX1NJR05BTFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQVVYX1NDRV9XVVNUQVRfRVZfU0lHTkFMU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9TQ0VfT19SRUcxXzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBSRUcxCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9SRUcxXzBfUkVHMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfU0NFX1JFRzFfMF9SRUcxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEFVWF9TQ0VfUkVHMV8wX1JFRzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6MF0gUkVHMAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfUkVHMV8wX1JFRzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVVYX1NDRV9SRUcxXzBfUkVHMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBVVhfU0NFX1JFRzFfMF9SRUcwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NDRV9PX1JFRzNfMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTZdIFJFRzMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX1JFRzNfMl9SRUczX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFVWF9TQ0VfUkVHM18yX1JFRzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgQVVYX1NDRV9SRUczXzJfUkVHM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTowXSBSRUcyCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9SRUczXzJfUkVHMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfU0NFX1JFRzNfMl9SRUcyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFVWF9TQ0VfUkVHM18yX1JFRzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU0NFX09fUkVHNV80CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gUkVHNQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfUkVHNV80X1JFRzVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVVYX1NDRV9SRUc1XzRfUkVHNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBBVVhfU0NFX1JFRzVfNF9SRUc1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjBdIFJFRzQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX1JFRzVfNF9SRUc0X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFVWF9TQ0VfUkVHNV80X1JFRzRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQVVYX1NDRV9SRUc1XzRfUkVHNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9TQ0VfT19SRUc3XzYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBSRUc3CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9SRUc3XzZfUkVHN19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfU0NFX1JFRzdfNl9SRUc3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEFVWF9TQ0VfUkVHN182X1JFRzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6MF0gUkVHNgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfUkVHN182X1JFRzZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVVYX1NDRV9SRUc3XzZfUkVHNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBVVhfU0NFX1JFRzdfNl9SRUc2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NDRV9PX0xPT1BBRERSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gU1RPUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfTE9PUEFERFJfU1RPUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVVYX1NDRV9MT09QQUREUl9TVE9QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBBVVhfU0NFX0xPT1BBRERSX1NUT1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjBdIFNUQVJUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9MT09QQUREUl9TVEFSVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfU0NFX0xPT1BBRERSX1NUQVJUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFVWF9TQ0VfTE9PUEFERFJfU1RBUlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU0NFX09fTE9PUENOVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIElURVJfTEVGVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfTE9PUENOVF9JVEVSX0xFRlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX1NDRV9MT09QQ05UX0lURVJfTEVGVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBBVVhfU0NFX0xPT1BDTlRfSVRFUl9MRUZUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQVVYX1NDRV9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfc21waC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3NtcGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjJkYmUwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3NtcGguaApAQCAtMCwwICsxLDI0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2F1eF9zbXBoX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FVWF9TTVBIX0hfXworI2RlZmluZSBfX0hXX0FVWF9TTVBIX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEFVWF9TTVBIIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFNlbWFwaG9yZSAwCisjZGVmaW5lIEFVWF9TTVBIX09fU01QSDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gU2VtYXBob3JlIDEKKyNkZWZpbmUgQVVYX1NNUEhfT19TTVBIMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBTZW1hcGhvcmUgMgorI2RlZmluZSBBVVhfU01QSF9PX1NNUEgyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIFNlbWFwaG9yZSAzCisjZGVmaW5lIEFVWF9TTVBIX09fU01QSDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gU2VtYXBob3JlIDQKKyNkZWZpbmUgQVVYX1NNUEhfT19TTVBINCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBTZW1hcGhvcmUgNQorI2RlZmluZSBBVVhfU01QSF9PX1NNUEg1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIFNlbWFwaG9yZSA2CisjZGVmaW5lIEFVWF9TTVBIX09fU01QSDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gU2VtYXBob3JlIDcKKyNkZWZpbmUgQVVYX1NNUEhfT19TTVBINyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBTdGlja3kgUmVxdWVzdCBGb3IgU2luZ2xlIFNlbWFwaG9yZQorI2RlZmluZSBBVVhfU01QSF9PX0FVVE9UQUtFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NNUEhfT19TTVBIMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSB3YXMgYWxyZWFkeSB0YWtlbgorLy8gMTogU2VtYXBob3JlIHdhcyBhdmFpbGFibGUgYW5kIGhlbmNlIHRha2VuIGJ5IHRoaXMgcmVhZCBhY2Nlc3MKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMQorI2RlZmluZSBBVVhfU01QSF9TTVBIMF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgwX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDBfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfU01QSF9TTVBIMF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NNUEhfT19TTVBIMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSB3YXMgYWxyZWFkeSB0YWtlbgorLy8gMTogU2VtYXBob3JlIHdhcyBhdmFpbGFibGUgYW5kIGhlbmNlIHRha2VuIGJ5IHRoaXMgcmVhZCBhY2Nlc3MKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMQorI2RlZmluZSBBVVhfU01QSF9TTVBIMV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgxX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDFfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfU01QSF9TTVBIMV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NNUEhfT19TTVBIMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSB3YXMgYWxyZWFkeSB0YWtlbgorLy8gMTogU2VtYXBob3JlIHdhcyBhdmFpbGFibGUgYW5kIGhlbmNlIHRha2VuIGJ5IHRoaXMgcmVhZCBhY2Nlc3MKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMQorI2RlZmluZSBBVVhfU01QSF9TTVBIMl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgyX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDJfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfU01QSF9TTVBIMl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NNUEhfT19TTVBIMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSB3YXMgYWxyZWFkeSB0YWtlbgorLy8gMTogU2VtYXBob3JlIHdhcyBhdmFpbGFibGUgYW5kIGhlbmNlIHRha2VuIGJ5IHRoaXMgcmVhZCBhY2Nlc3MKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMQorI2RlZmluZSBBVVhfU01QSF9TTVBIM19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgzX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDNfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfU01QSF9TTVBIM19TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NNUEhfT19TTVBINAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSB3YXMgYWxyZWFkeSB0YWtlbgorLy8gMTogU2VtYXBob3JlIHdhcyBhdmFpbGFibGUgYW5kIGhlbmNlIHRha2VuIGJ5IHRoaXMgcmVhZCBhY2Nlc3MKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMQorI2RlZmluZSBBVVhfU01QSF9TTVBINF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg0X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDRfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfU01QSF9TTVBINF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NNUEhfT19TTVBINQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSB3YXMgYWxyZWFkeSB0YWtlbgorLy8gMTogU2VtYXBob3JlIHdhcyBhdmFpbGFibGUgYW5kIGhlbmNlIHRha2VuIGJ5IHRoaXMgcmVhZCBhY2Nlc3MKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMQorI2RlZmluZSBBVVhfU01QSF9TTVBINV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg1X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDVfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfU01QSF9TTVBINV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NNUEhfT19TTVBINgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSB3YXMgYWxyZWFkeSB0YWtlbgorLy8gMTogU2VtYXBob3JlIHdhcyBhdmFpbGFibGUgYW5kIGhlbmNlIHRha2VuIGJ5IHRoaXMgcmVhZCBhY2Nlc3MKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMQorI2RlZmluZSBBVVhfU01QSF9TTVBINl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg2X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDZfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfU01QSF9TTVBINl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NNUEhfT19TTVBINworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSB3YXMgYWxyZWFkeSB0YWtlbgorLy8gMTogU2VtYXBob3JlIHdhcyBhdmFpbGFibGUgYW5kIGhlbmNlIHRha2VuIGJ5IHRoaXMgcmVhZCBhY2Nlc3MKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMQorI2RlZmluZSBBVVhfU01QSF9TTVBIN19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg3X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDdfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfU01QSF9TTVBIN19TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NNUEhfT19BVVRPVEFLRQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsyOjBdIFNNUEhfSUQKKy8vCisvLyBSZXF1ZXN0aW5nIGEgY2VydGFpbiBzZW1hcGhvcmUgaXMgZG9uZSBieSB3cml0aW5nIHRoZSBjb3JyZXNwb25kaW5nCisvLyBzZW1hcGhvcmUgSUQsIDB4MC0weDcsIHRvIFNNUEhfSUQuIFRoZSByZXF1ZXN0IGlzIHN0aWNreSBhbmQgb25jZSB0aGUKKy8vIHNlbWFwaG9yZSBiZWNvbWVzIGF2YWlsYWJsZSBpdCB3aWxsIGJlIHRha2VuLiBBdCB0aGUgc2FtZSB0aW1lLAorLy8gU01QSF9BVVRPVEFLRV9ET05FIGV2ZW50IGlzIGFzc2VydGVkLiBUaGlzIGV2ZW50IGlzIGRlYXNzZXJ0ZWQgd2hlbiBTVworLy8gcmVsZWFzZXMgdGhlIHNlbWFwaG9yZSBvciBhIG5ldyBJRCBpcyB3cml0dGVuIHRvIFNNUEhfSUQuCisvLworLy8gTm90ZTogU1cgbXVzdCB3YWl0IHVudGlsIFNNUEhfQVVUT1RBS0VfRE9ORSBldmVudCBpcyB0cmlnZ2VyZWQgYmVmb3JlCisvLyB3cml0aW5nIGEgbmV3IElEIHRvIFNNUEhfSUQgLiBGYWlsaW5nIHRvIGRvIHNvIG1pZ2h0IGxlYWQgdG8gcGVybWFuZW50bHkKKy8vIGxvc3Qgc2VtYXBob3JlcyBhcyB0aGUgb3duZXJzIG1heSBiZSB1bmtub3duCisjZGVmaW5lIEFVWF9TTVBIX0FVVE9UQUtFX1NNUEhfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX1NNUEhfQVVUT1RBS0VfU01QSF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBVVhfU01QSF9BVVRPVEFLRV9TTVBIX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQVVYX1NNUEhfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3RkYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3RkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxN2VlYTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfdGRjLmgKQEAgLTAsMCArMSw2MjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hdXhfdGRjX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FVWF9URENfSF9fCisjZGVmaW5lIF9fSFdfQVVYX1REQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBVVhfVERDIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIENvbnRyb2wKKyNkZWZpbmUgQVVYX1REQ19PX0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBTdGF0dXMKKyNkZWZpbmUgQVVYX1REQ19PX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBSZXN1bHQKKyNkZWZpbmUgQVVYX1REQ19PX1JFU1VMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBTYXR1cmF0aW9uIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgQVVYX1REQ19PX1NBVENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBUcmlnZ2VyIFNvdXJjZQorI2RlZmluZSBBVVhfVERDX09fVFJJR1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIFRyaWdnZXIgQ291bnRlcgorI2RlZmluZSBBVVhfVERDX09fVFJJR0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIFRyaWdnZXIgQ291bnRlciBMb2FkCisjZGVmaW5lIEFVWF9URENfT19UUklHQ05UTE9BRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gVHJpZ2dlciBDb3VudGVyIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgQVVYX1REQ19PX1RSSUdDTlRDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBQcmVzY2FsZXIgQ29udHJvbAorI2RlZmluZSBBVVhfVERDX09fUFJFQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIFByZXNjYWxlciBDb3VudGVyCisjZGVmaW5lIEFVWF9URENfT19QUkVDTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfVERDX09fQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzE6MF0gQ01ECisvLworLy8gVERDIGNvbW1hbmQgc3Ryb2JlcworLy8gRU5VTXM6CisvLyBBQk9SVCAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGZvcmNlcyB0aGUgVERDIGJhY2sgdG8gSURMRSBzdGF0ZQorLy8gUlVOICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBtYWtlcyB0aGUgVERDIEZTTSBzdGFydCAgYW5kIHN0b3AKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGluZyBhc3luY2hyb25vdXNseS4gVERDIG1lYXN1cmVtZW50IG1heQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGltbWVkaWF0ZWx5IGlmIHN0YXJ0IGlzIGhpZ2ggYW5kIGhlbmNlIGl0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5IG5vdCBnaXZlIHByZWNpc2UgZWRnZSB0byBlZGdlIG1lYXN1cmVtZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHJlY29tbWVuZGVkIHdoZW4gc3RhcnQgcHVsc2UgaXMgZ3VhcmFudGVlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFycml2ZSBhdCBsZWFzdCA3IGNsb2NrIHBlcmlvZHMgYWZ0ZXIgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZAorLy8gUlVOX1NZTkNfU1RBUlQgICAgICAgICAgIFRoaXMgY29tbWFuZCBtYWtlcyB0aGUgVERDIEZTTSBzdGFydCBjb3VudGluZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9ub3VzbHkgdG8gdGhlIGZpcnN0IHJpc2luZyBlZGdlIHRoYXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dzIGEgcmVxdWlyZWQgZmFsbGluZyBlZGdlIG9mIHRoZSBzdGFydAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LiBUaGlzIGd1YXJhbnRlZXMgYW4gZWRnZSB0cmlnZ2VyZWQgc3RhcnQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaXMgcmVjb21tZW5kZWQgZm9yIGZyZXF1ZW5jeSBtZWFzdXJlbWVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQSBmYWxsaW5nIGVkZ2Ugb2YgdGhlIHN0YXJ0IGV2ZW50IG1heSBiZSBtaXNzZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgY29tbWFuZCBpcyBpc3N1ZWQgY2xvc2UgdG8gaXQgaW4gdGltZSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgdGhlIFREQyB3aWxsIGNhdGNoIGxhdGVyIGZhbGxpbmcgZWRnZXMgYW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VhcmFudGVlIHRoYXQgYSBtZWFzdXJlbWVudCBzdGFydHMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbm91c2x5IHRvIHRoZSByaXNpbmcgZWRnZSBvZiB0aGUgc3RhcnQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudAorLy8gQ0xSX1JFU1VMVCAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBjbGVhcnMgU1RBVC5TQVQsIFNUQVQuRE9ORSBhbmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLiBOb3RlOiBUaGlzIGlzIG5vdCBuZWVkZWQgYXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVyZXF1aXNpdGUgZm9yIGEgbWVhc3VyZW1lbnQuIFJlbGlhYmxlIGNsZWFyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgb25seSBndWFyYW50ZWVkIGZyb20gSURMRSBzdGF0ZQorI2RlZmluZSBBVVhfVERDX0NUTF9DTURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9URENfQ1RMX0NNRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVVYX1REQ19DVExfQ01EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfVERDX0NUTF9DTURfQUJPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFVWF9URENfQ1RMX0NNRF9SVU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1REQ19DVExfQ01EX1JVTl9TWU5DX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVERDX0NUTF9DTURfQ0xSX1JFU1VMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1REQ19PX1NUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBTQVQKKy8vCisvLyBTYXR1cmF0aW9uIGZsYWcgZm9yIFREQyBtZWFzdXJlbWVudAorLy8KKy8vIDA6IENvbnZlcnNpb24gaGFzIG5vdCBzYXR1cmF0ZWQKKy8vIDE6IENvbnZlcnNpb24gc3RvcHBlZCBkdWUgdG8gc2F0dXJhdGlvbgorLy8KKy8vIFRoaXMgZmllbGQgaXMgY2xlYXJlZCB3aGVuIHN0YXJ0aW5nIG5ldyBtZWFzdXJlbWVudCBvciBzZXR0aW5nIENUTC5DTUQgdG8KKy8vIENMUl9SRVNVTFQKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfVERDX1NUQVRfU0FUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFVWF9URENfU1RBVF9TQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBET05FCisvLworLy8gTWVhc3VyZW1lbnQgY29tcGxldGUgZmxhZworLy8KKy8vIDA6IE1lYXN1cmVtZW50IG5vdCB5ZXQgY29tcGxldGUKKy8vIDE6IE1lYXN1cmVtZW50IGNvbXBsZXRlCisvLworLy8gVGhpcyBmaWVsZCBpcyBjbGVhcmVkIHdoZW4gc3RhcnRpbmcgbmV3IG1lYXN1cmVtZW50IG9yIHNldHRpbmcgQ1RMLkNNRCB0bworLy8gQ0xSX1JFU1VMVAorI2RlZmluZSBBVVhfVERDX1NUQVRfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9URENfU1RBVF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX1REQ19TVEFUX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfVERDX1NUQVRfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIFNUQVRFCisvLworLy8gVERDIGludGVybmFsIHN0YXRlIG1hY2hpbmUgc3RhdHVzCisvLyBFTlVNczoKKy8vIEZPUkNFX1NUT1AgICAgICAgICAgICAgICBDdXJyZW50IHN0YXRlIGlzIFREQ19GT1JDRVNUT1AKKy8vIFNUQVJUX0ZBTEwgICAgICAgICAgICAgICBDdXJyZW50IHN0YXRlIGlzIFREQ19XQUlUX1NUQVJURkFMTAorLy8gV0FJVF9DTFJfQ05UX0RPTkUgICAgICAgIEN1cnJlbnQgc3RhdGUgaXMgVERDX1NUQVRFX1dBSVRfQ0xSQ05UX0RPTkUKKy8vIFBPUiAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50IHN0YXRlIGlzIFREQ19TVEFURV9QT1IKKy8vIEdFVF9SRVNVTFQgICAgICAgICAgICAgICBDdXJyZW50IHN0YXRlIGlzIFREQ19TVEFURV9HRVRSRVNVTFRTCisvLyBXQUlUX1NUT1BfQ05URFdOICAgICAgICAgQ3VycmVudCBzdGF0ZSBpcyBURENfU1RBVEVfV0FJVF9TVE9QQ05URE9XTgorLy8gV0FJVF9TVE9QICAgICAgICAgICAgICAgIEN1cnJlbnQgc3RhdGUgaXMgVERDX1NUQVRFX1dBSVRfU1RPUAorLy8gQ0xSX0NOVCAgICAgICAgICAgICAgICAgIEN1cnJlbnQgc3RhdGUgaXMgVERDX1NUQVRFX0NMUkNOVAorLy8gSURMRSAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgc3RhdGUgaXMgVERDX1NUQVRFX0lETEUKKy8vIFdBSVRfU1RBUlRfU1RPUF9DTlRfRU4gICBDdXJyZW50IHN0YXRlIGlzIFREQ19TVEFURV9XQUlUX1NUQVJUU1RPUENOVEVOCisvLyBXQUlUX1NUQVJUICAgICAgICAgICAgICAgQ3VycmVudCBzdGF0ZSBpcyBURENfU1RBVEVfV0FJVF9TVEFSVAorI2RlZmluZSBBVVhfVERDX1NUQVRfU1RBVEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9URENfU1RBVF9TVEFURV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NUQVRFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfVERDX1NUQVRfU1RBVEVfRk9SQ0VfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIEFVWF9URENfU1RBVF9TVEFURV9TVEFSVF9GQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NUQVRFX1dBSVRfQ0xSX0NOVF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZSBBVVhfVERDX1NUQVRfU1RBVEVfUE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFVWF9URENfU1RBVF9TVEFURV9HRVRfUkVTVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NUQVRFX1dBSVRfU1RPUF9DTlREV04gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBVVhfVERDX1NUQVRfU1RBVEVfV0FJVF9TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9URENfU1RBVF9TVEFURV9DTFJfQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NUQVRFX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBBVVhfVERDX1NUQVRfU1RBVEVfV0FJVF9TVEFSVF9TVE9QX0NOVF9FTiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9URENfU1RBVF9TVEFURV9XQUlUX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfVERDX09fUkVTVUxUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMjQ6MF0gVkFMVUUKKy8vCisvLyBSZXN1bHQgb2YgdGhlIFREQyBjb252ZXJzaW9uLiBUaGUgcmVzdWx0IGlzIGluIGNsb2NrIGVkZ2VzIG9mIHRoZSBjbG9jaworLy8gc2VsZWN0ZWQgaW4gRERJXzBfT1NDOkNUTDAuQUNMS19URENfU1JDX1NFTC4gQm90aCByaXNpbmcgYW5kIGZhbGxpbmcgZWRnZXMKKy8vIGFyZSBjb3VudGVkLgorLy8KKy8vIFdoZW4gc2F0dXJhdGluZyB0aGUgcmVzdWx0IGlzIHNsaWdodGx5IGhpZ2hlciB0aGFuIHRoZSBzYXR1cmF0aW9uIGxpbWl0LAorLy8gc2luY2UgaXQgdGFrZXMgYSBub24temVybyB0aW1lIHRvIHN0b3AgdGhlIG1lYXN1cmVtZW50LiBUaGUgaGlnaGVzdAorLy8gc2F0dXJhdGlvbiBsaW1pdCBpcyAyNCBiaXRzIChzZWUgU0FUQ0ZHLkxJTUlUKSBzbyBtYXhpbXVtIHZhbHVlIG9mIFZBTFVFIGlzCisvLyBoZW5jZSBzbGlnaHRseSBhYm92ZSAyXjI0LgorI2RlZmluZSBBVVhfVERDX1JFU1VMVF9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIEFVWF9URENfUkVTVUxUX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFGRkZGRkYKKyNkZWZpbmUgQVVYX1REQ19SRVNVTFRfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9URENfT19TQVRDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMzowXSBMSU1JVAorLy8KKy8vIFNlbGVjdCB3aGVuIHRoZSBUREMgdGltZXMgb3V0LiBWYWx1ZXMgbm90IGVudW1lcmF0ZWQgYXJlIG5vdCBzdXBwb3J0ZWQKKy8vIEVOVU1zOgorLy8gUjI0ICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCBiaXQgMjQgOiBUREMgc2F0dXJhdGVzIGFuZCBzdG9wcyB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxULlZBTFVFWzI0XSBpcyBzZXQuIFRoZSBmbGFnIFNUQVQuU0FUIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gdGhlIHRpbWVyIHNhdHVyYXRlcy4KKy8vIFIyMyAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgYml0IDIzIDogVERDIHNhdHVyYXRlcyBhbmQgc3RvcHMgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVC5WQUxVRVsyM10gaXMgc2V0LiBUaGUgZmxhZyBTVEFULlNBVCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB3aGVuIHRoZSB0aW1lciBzYXR1cmF0ZXMuCisvLyBSMjIgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IGJpdCAyMiA6IFREQyBzYXR1cmF0ZXMgYW5kIHN0b3BzIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFQuVkFMVUVbMjJdIGlzIHNldC4gVGhlIGZsYWcgU1RBVC5TQVQgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiB0aGUgdGltZXIgc2F0dXJhdGVzLgorLy8gUjIxICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCBiaXQgMjEgOiBUREMgc2F0dXJhdGVzIGFuZCBzdG9wcyB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxULlZBTFVFWzIxXSBpcyBzZXQuIFRoZSBmbGFnIFNUQVQuU0FUIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gdGhlIHRpbWVyIHNhdHVyYXRlcy4KKy8vIFIyMCAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgYml0IDIwIDogVERDIHNhdHVyYXRlcyBhbmQgc3RvcHMgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVC5WQUxVRVsyMF0gaXMgc2V0LiBUaGUgZmxhZyBTVEFULlNBVCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB3aGVuIHRoZSB0aW1lciBzYXR1cmF0ZXMuCisvLyBSMTkgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IGJpdCAxOSA6IFREQyBzYXR1cmF0ZXMgYW5kIHN0b3BzIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFQuVkFMVUVbMTldIGlzIHNldC4gVGhlIGZsYWcgU1RBVC5TQVQgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiB0aGUgdGltZXIgc2F0dXJhdGVzLgorLy8gUjE4ICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCBiaXQgMTggOiBUREMgc2F0dXJhdGVzIGFuZCBzdG9wcyB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxULlZBTFVFWzE4XSBpcyBzZXQuIFRoZSBmbGFnIFNUQVQuU0FUIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gdGhlIHRpbWVyIHNhdHVyYXRlcy4KKy8vIFIxNyAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgYml0IDE3IDogVERDIHNhdHVyYXRlcyBhbmQgc3RvcHMgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVC5WQUxVRVsxN10gaXMgc2V0LiBUaGUgZmxhZyBTVEFULlNBVCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB3aGVuIHRoZSB0aW1lciBzYXR1cmF0ZXMuCisvLyBSMTYgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IGJpdCAxNiA6IFREQyBzYXR1cmF0ZXMgYW5kIHN0b3BzIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFQuVkFMVUVbMTZdIGlzIHNldC4gVGhlIGZsYWcgU1RBVC5TQVQgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiB0aGUgdGltZXIgc2F0dXJhdGVzLgorLy8gUjE1ICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCBiaXQgMTUgOiBUREMgc2F0dXJhdGVzIGFuZCBzdG9wcyB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxULlZBTFVFWzE1XSBpcyBzZXQuIFRoZSBmbGFnIFNUQVQuU0FUIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gdGhlIHRpbWVyIHNhdHVyYXRlcy4KKy8vIFIxNCAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgYml0IDE0IDogVERDIHNhdHVyYXRlcyBhbmQgc3RvcHMgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVC5WQUxVRVsxNF0gaXMgc2V0LiBUaGUgZmxhZyBTVEFULlNBVCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB3aGVuIHRoZSB0aW1lciBzYXR1cmF0ZXMuCisvLyBSMTMgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IGJpdCAxMyA6IFREQyBzYXR1cmF0ZXMgYW5kIHN0b3BzIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFQuVkFMVUVbMTNdIGlzIHNldC4gVGhlIGZsYWcgU1RBVC5TQVQgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiB0aGUgdGltZXIgc2F0dXJhdGVzLgorLy8gUjEyICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCBiaXQgMTIgOiBUREMgc2F0dXJhdGVzIGFuZCBzdG9wcyB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxULlZBTFVFWzEyXSBpcyBzZXQuIFRoZSBmbGFnIFNUQVQuU0FUIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gdGhlIHRpbWVyIHNhdHVyYXRlcy4KKyNkZWZpbmUgQVVYX1REQ19TQVRDRkdfTElNSVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfVERDX1NBVENGR19MSU1JVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFVWF9URENfU0FUQ0ZHX0xJTUlUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1REQ19TQVRDRkdfTElNSVRfUjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBVVhfVERDX1NBVENGR19MSU1JVF9SMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIEFVWF9URENfU0FUQ0ZHX0xJTUlUX1IyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgQVVYX1REQ19TQVRDRkdfTElNSVRfUjIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBVVhfVERDX1NBVENGR19MSU1JVF9SMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEFVWF9URENfU0FUQ0ZHX0xJTUlUX1IxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgQVVYX1REQ19TQVRDRkdfTElNSVRfUjE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBBVVhfVERDX1NBVENGR19MSU1JVF9SMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9URENfU0FUQ0ZHX0xJTUlUX1IxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQVVYX1REQ19TQVRDRkdfTElNSVRfUjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBBVVhfVERDX1NBVENGR19MSU1JVF9SMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIEFVWF9URENfU0FUQ0ZHX0xJTUlUX1IxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1REQ19TQVRDRkdfTElNSVRfUjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9URENfT19UUklHU1JDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxM10gU1RPUF9QT0wKKy8vCisvLyBQb2xhcml0eSBvZiBzdG9wIHNpZ25hbC4gICBOb3RlISBNdXN0IG5vdCBiZSBjaGFuZ2VkIGlmIFNUQVQuU1RBVEUgaXMgbm90CisvLyBJRExFCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBUREMgc3RvcHMgd2hlbiBsb3cgbGV2ZWwgaXMgZGV0ZWN0ZWQKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBUREMgc3RvcHMgd2hlbiBoaWdoIGxldmVsIGlzIGRldGVjdGVkCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfUE9MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9QT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1BPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfUE9MX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9QT0xfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgWzEyOjhdIFNUT1BfU1JDCisvLworLy8gU2VsZWN0cyB0aGUgYXN5bmNocm9ub3VzIHN0b3Agc2lnbmFsICBOb3RlISBNdXN0IG5vdCBiZSBjaGFuZ2VkIGlmCisvLyBTVEFULlNUQVRFIGlzIG5vdCBJRExFCisvLyBFTlVNczoKKy8vIFREQ19QUkUgICAgICAgICAgICAgICAgICBTZWxlY3RzIFREQ19QUkUKKy8vIE1DVV9FViAgICAgICAgICAgICAgICAgICBTZWxlY3RzIE1DVV9FVgorLy8gQUNMS19SRUYgICAgICAgICAgICAgICAgIFNlbGVjdHMgQUNMS19SRUYKKy8vIEFVWElPMTUgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTUKKy8vIEFVWElPMTQgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTQKKy8vIEFVWElPMTMgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTMKKy8vIEFVWElPMTIgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTIKKy8vIEFVWElPMTEgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTEKKy8vIEFVWElPMTAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTAKKy8vIEFVWElPOSAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPOQorLy8gQVVYSU84ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU84CisvLyBBVVhJTzcgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzcKKy8vIEFVWElPNiAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNgorLy8gQVVYSU81ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU81CisvLyBBVVhJTzQgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzQKKy8vIEFVWElPMyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMworLy8gQVVYSU8yICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8yCisvLyBBVVhJTzEgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzEKKy8vIEFVWElPMCAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMAorLy8gQU9OX1BST0dfV1UgICAgICAgICAgICAgIFNlbGVjdHMgQU9OX1BST0dfV1UKKy8vIEFPTl9TVyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFPTl9TVworLy8gT0JTTVVYMSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgT0JTTVVYMQorLy8gT0JTTVVYMCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgT0JTTVVYMAorLy8gQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgIFNlbGVjdHMgQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vIEFEQ19ET05FICAgICAgICAgICAgICAgICBTZWxlY3RzIEFEQ19ET05FCisvLyBTTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgU2VsZWN0cyBTTVBIX0FVVE9UQUtFX0RPTkUKKy8vIFRJTUVSMV9FViAgICAgICAgICAgICAgICBTZWxlY3RzIFRJTUVSMV9FVgorLy8gVElNRVIwX0VWICAgICAgICAgICAgICAgIFNlbGVjdHMgVElNRVIwX0VWCisvLyBJU1JDX1JFU0VUICAgICAgICAgICAgICAgU2VsZWN0cyBJU1JDX1JFU0VUCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhfQ09NUEIKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWF9DT01QQQorLy8gQU9OX1JUQ19DSDIgICAgICAgICAgICAgIFNlbGVjdHMgQU9OX1JUQ19DSDIKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX1REQ19QUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUYwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfTUNVX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRTAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BQ0xLX1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFEMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUMwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQjAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFBMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTkwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxODAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE3MDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTYwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNTAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE0MDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTMwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMjAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDExMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBFMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQU9OX1BST0dfV1UgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BT05fU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBCMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX09CU01VWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEEwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwOTAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfSVNSQ19SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQU9OX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIFNUQVJUX1BPTAorLy8KKy8vIFBvbGFyaXR5IG9mIHN0YXJ0IHNpZ25hbC4gICBOb3RlISBNdXN0IG5vdCBiZSBjaGFuZ2VkIGlmIFNUQVQuU1RBVEUgaXMgbm90CisvLyBJRExFCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBUREMgc3RhcnRzIHdoZW4gbG93IGxldmVsIGlzIGRldGVjdGVkCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgVERDIHN0YXJ0cyB3aGVuIGhpZ2ggbGV2ZWwgaXMgZGV0ZWN0ZWQKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfUE9MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9QT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1BPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfUE9MX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9QT0xfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzQ6MF0gU1RBUlRfU1JDCisvLworLy8gU2VsZWN0cyB0aGUgYXN5bmNocm9ub3VzIHN0YXJ0IHNpZ25hbCBOb3RlISBNdXN0IG5vdCBiZSBjaGFuZ2VkIGlmCisvLyBTVEFULlNUQVRFIGlzIG5vdCBJRExFCisvLyBFTlVNczoKKy8vIFREQ19QUkUgICAgICAgICAgICAgICAgICBTZWxlY3RzIFREQ19QUkUKKy8vIE1DVV9FViAgICAgICAgICAgICAgICAgICBTZWxlY3RzIE1DVV9FVgorLy8gQUNMS19SRUYgICAgICAgICAgICAgICAgIFNlbGVjdHMgQUNMS19SRUYKKy8vIEFVWElPMTUgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTUKKy8vIEFVWElPMTQgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTQKKy8vIEFVWElPMTMgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTMKKy8vIEFVWElPMTIgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTIKKy8vIEFVWElPMTEgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTEKKy8vIEFVWElPMTAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTAKKy8vIEFVWElPOSAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPOQorLy8gQVVYSU84ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU84CisvLyBBVVhJTzcgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzcKKy8vIEFVWElPNiAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNgorLy8gQVVYSU81ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU81CisvLyBBVVhJTzQgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzQKKy8vIEFVWElPMyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMworLy8gQVVYSU8yICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8yCisvLyBBVVhJTzEgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzEKKy8vIEFVWElPMCAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMAorLy8gQU9OX1BST0dfV1UgICAgICAgICAgICAgIFNlbGVjdHMgQU9OX1BST0dfV1UKKy8vIEFPTl9TVyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFPTl9TVworLy8gT0JTTVVYMSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgT0JTTVVYMQorLy8gT0JTTVVYMCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgT0JTTVVYMAorLy8gQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgIFNlbGVjdHMgQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vIEFEQ19ET05FICAgICAgICAgICAgICAgICBTZWxlY3RzIEFEQ19ET05FCisvLyBTTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgU2VsZWN0cyBTTVBIX0FVVE9UQUtFX0RPTkUKKy8vIFRJTUVSMV9FViAgICAgICAgICAgICAgICBTZWxlY3RzIFRJTUVSMV9FVgorLy8gVElNRVIwX0VWICAgICAgICAgICAgICAgIFNlbGVjdHMgVElNRVIwX0VWCisvLyBJU1JDX1JFU0VUICAgICAgICAgICAgICAgU2VsZWN0cyBJU1JDX1JFU0VUCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhfQ09NUEIKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWF9DT01QQQorLy8gQU9OX1JUQ19DSDIgICAgICAgICAgICAgIFNlbGVjdHMgQU9OX1JUQ19DSDIKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19URENfUFJFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX01DVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQUNMS19SRUYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FPTl9QUk9HX1dVICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQU9OX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19PQlNNVVgxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0lTUkNfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FPTl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1REQ19PX1RSSUdDTlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBDTlQKKy8vCisvLyBSZW1haW5pbmcgbnVtYmVyIG9mIHN0b3AgZXZlbnRzIHRoYXQgd2lsbCBiZSBpZ25vcmVkLiBXcml0aW5nIHRvIHRoaXMKKy8vIHJlZ2lzdGVyIHVwZGF0ZXMgdGhlICB2YWx1ZS4gVGhlIENOVCB3aWxsIGJlIGxvYWRlZCB3aXRoIHRoZSB2YWx1ZSBvZgorLy8gVFJJR0NOVExPQUQuQ05UIGF0IHRoZSBzdGFydCBvZiBldmVyeSBtZWFzdXJlbWVudC4KKy8vCisvLyBXaGVuIHRoZSBzdG9wIGNvdW50ZXIgaXMgZW5hYmxlZCB0aGUgZmlyc3QgQ05ULTEgc3RvcCBldmVudHMgaXMgaWdub3JlZAorLy8gYWZ0ZXIgd2hpY2ggdGhlIFREQyB3aWxsIHN0b3AgbWVhc3VyZW1lbnQgb24gZXZlbnQgbnVtYmVyIENOVAorLy8KKy8vIE5vdGUhIE11c3Qgbm90IGJlIGNoYW5nZWQgaWYgU1RBVC5TVEFURSBpcyBub3QgSURMRQorI2RlZmluZSBBVVhfVERDX1RSSUdDTlRfQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFVWF9URENfVFJJR0NOVF9DTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQVVYX1REQ19UUklHQ05UX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9URENfT19UUklHQ05UTE9BRAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIENOVAorLy8KKy8vIFNlbGVjdHMgdGhlIG51bWJlciBvZiBzdG9wIGV2ZW50cyB0aGF0IHdpbGwgYmUgaWdub3JlZCBieSB0aGUgVERDLiBUaGlzIGNhbgorLy8gYmUgdXNlZCB0byBtZWFzdXJlIG11bHRpcGxlIHBlcmlvZHMgb2YgYSBjbG9jayBzaWduYWwuIFRoZSB2YWx1ZSB3cml0dGVuIHRvCisvLyB0aGlzIGZpZWxkIGlzIGxvYWRlZCBpbnRvIHRoZSBzdG9wIGNvdW50ZXIgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggbWVhc3VyZW1lbnQuCisvLworLy8gTm90ZSEgQm90aCB2YWx1ZXMgMCBhbmQgMSB3aWxsIG1ha2UgdGhlIFREQyBzdG9wIG9uIHRoZSBmaXJzdCBldmVudCBhZnRlcgorLy8gdGhlIHN0YXJ0IGV2ZW50CisvLworLy8gTm90ZSEgTXVzdCBub3QgYmUgY2hhbmdlZCBpZiBTVEFULlNUQVRFIGlzIG5vdCBJRExFCisjZGVmaW5lIEFVWF9URENfVFJJR0NOVExPQURfQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVVYX1REQ19UUklHQ05UTE9BRF9DTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBVVhfVERDX1RSSUdDTlRMT0FEX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1REQ19PX1RSSUdDTlRDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIFN0b3AgY291bnRlciBlbmFibGUKKy8vCisvLyAwOiBTdG9wIGNvdW50ZXIgaXMgZGlzYWJsZWQKKy8vIDE6IFN0b3AgY291bnRlciBpcyBlbmFibGVkCisjZGVmaW5lIEFVWF9URENfVFJJR0NOVENGR19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1REQ19UUklHQ05UQ0ZHX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfVERDX1RSSUdDTlRDRkdfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9URENfVFJJR0NOVENGR19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfVERDX09fUFJFQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gUkVTRVRfTgorLy8KKy8vIFByZXNjYWxlciByZXNldCBjb250cm9sCisvLworLy8gMDogUHJlc2NhbGVyIGlzIGhlbGQgaW4gcmVzZXQKKy8vIDE6IFByZXNjYWxlciBpcyBub3QgaGVsZCBpbiByZXNldAorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9SRVNFVF9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1JFU0VUX05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfUkVTRVRfTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9SRVNFVF9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFJBVElPCisvLworLy8gUHJlc2NhbGVyIHJhdGlvLiBUaGlzIGNvbnRyb2xzIGhvdyBvZnRlbiBhbiBldmVudCBpcyBnZW5lcmF0ZWQgb24gdGhlCisvLyBURENfUFJFIGxpbmUuIEFmdGVyIHRoZSBwcmVzY2FsZXIgaXMgcmVzZXQgdGhlIGV2ZW50IG91dHB1dCBURENfUFJFIGlzIDAuCisvLyBFTlVNczoKKy8vIERJVjY0ICAgICAgICAgICAgICAgICAgICBQcmVzY2FsZXIgZGl2aWRlcyBieSA2NC4gQSByaXNpbmcgZWRnZSBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgaXMgZ2VuZXJhdGVkIGZvciBldmVyeSA2NCByaXNpbmcgZWRnZXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgaW5wdXQgKHRoZSBvdXRwdXQgdG9nZ2xlcyBvbiBldmVyeSAzMnRoCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmlzaW5nIGVkZ2Ugb2YgdGhlIGlucHV0KS4gLgorLy8gRElWMTYgICAgICAgICAgICAgICAgICAgIFByZXNjYWxlciBkaXZpZGVzIGJ5IDE2LiBBIHJpc2luZyBlZGdlIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBpcyBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IDE2IHJpc2luZyBlZGdlcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBpbnB1dCAodGhlIG91dHB1dCB0b2dnbGVzIG9uIGV2ZXJ5IDh0aAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJpc2luZyBlZGdlIG9mIHRoZSBpbnB1dCkuCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1JBVElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfUkFUSU9fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9SQVRJT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1JBVElPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfUkFUSU9fRElWNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9SQVRJT19ESVYxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs0OjBdIFNSQworLy8KKy8vIFNlbGVjdHMgZXZlbnQgZm9yIHByZXNjYWxlciB0byB1c2UgYXMgaW5wdXQKKy8vIE5vdGUhIE9ubHkgY2hhbmdlIHdoZW4gcHJlc2NhbGVyIGlzIGluIHJlc2V0CisvLyBFTlVNczoKKy8vIEFEQ19JUlEKKy8vIE1DVV9FVgorLy8gQUNMS19SRUYKKy8vIEFVWElPMTUKKy8vIEFVWElPMTQKKy8vIEFVWElPMTMKKy8vIEFVWElPMTIKKy8vIEFVWElPMTEKKy8vIEFVWElPMTAKKy8vIEFVWElPOQorLy8gQVVYSU84CisvLyBBVVhJTzcKKy8vIEFVWElPNgorLy8gQVVYSU81CisvLyBBVVhJTzQKKy8vIEFVWElPMworLy8gQVVYSU8yCisvLyBBVVhJTzEKKy8vIEFVWElPMAorLy8gQU9OX1BST0dfV1UKKy8vIEFPTl9TVworLy8gT0JTTVVYMQorLy8gT0JTTVVYMAorLy8gQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vIEFEQ19ET05FCisvLyBTTVBIX0FVVE9UQUtFX0RPTkUKKy8vIFRJTUVSMV9FVgorLy8gVElNRVIwX0VWCisvLyBJU1JDX1JFU0VUCisvLyBBVVhfQ09NUEIKKy8vIEFVWF9DT01QQQorLy8gQU9OX1JUQ19DSDIKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfTUNVX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BQ0xLX1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYSU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BVVhJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYSU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BVVhJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYSU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BVVhJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQU9OX1BST0dfV1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BT05fU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX09CU01VWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfSVNSQ19SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQU9OX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1REQ19PX1BSRUNOVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIENOVAorLy8KKy8vIFdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciB3aWxsIGxhdGNoIHRoZSBjb250ZW50cyBvZiB0aGUgMTYgYml0IHByZXNjYWxlcgorLy8gY291bnRlciAoVGhlIHZhbHVlIHdyaXR0ZW4gaXMgZG9uJ3QgY2FyZSkuCisvLworLy8gUmVhZGluZyB3aWxsIHJldHVybiB0aGUgbGF0Y2hlZCB2YWx1ZS4KKyNkZWZpbmUgQVVYX1REQ19QUkVDTlRfQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfVERDX1BSRUNOVF9DTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFVWF9URENfUFJFQ05UX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19BVVhfVERDX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF90aW1lci5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkMGZjMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF90aW1lci5oCkBAIC0wLDAgKzEsMzg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYXV4X3RpbWVyX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FVWF9USU1FUl9IX18KKyNkZWZpbmUgX19IV19BVVhfVElNRVJfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQVVYX1RJTUVSIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFRpbWVyIDAgQ29uZmlndXJhdGlvbgorI2RlZmluZSBBVVhfVElNRVJfT19UMENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIFRpbWVyIDEgQ29uZmlndXJhdGlvbgorI2RlZmluZSBBVVhfVElNRVJfT19UMUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIFRpbWVyIDAgQ29udHJvbAorI2RlZmluZSBBVVhfVElNRVJfT19UMENUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIFRpbWVyIDAgVGFyZ2V0CisjZGVmaW5lIEFVWF9USU1FUl9PX1QwVEFSR0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gVGltZXIgMSBUYXJnZXQKKyNkZWZpbmUgQVVYX1RJTUVSX09fVDFUQVJHRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBUaW1lciAxIENvbnRyb2wKKyNkZWZpbmUgQVVYX1RJTUVSX09fVDFDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9USU1FUl9PX1QwQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxM10gVElDS19TUkNfUE9MCisvLworLy8gU291cmNlIGNvdW50IHBvbGFyaXR5IGZvciB0aW1lciAwCisvLyBFTlVNczoKKy8vIEZBTEwgICAgICAgICAgICAgICAgICAgICBDb3VudCBvbiBmYWxsaW5nIGVkZ2VzIG9mIFRJQ0tfU1JDCisvLyBSSVNFICAgICAgICAgICAgICAgICAgICAgQ291bnQgb24gcmlzaW5nIGVkZ2VzIG9mIFRJQ0tfU1JDCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19QT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1BPTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfUE9MX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19QT0xfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1BPTF9GQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfUE9MX1JJU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgWzEyOjhdIFRJQ0tfU1JDCisvLworLy8gU2VsZWN0ZWQgdGljayBzb3VyY2UgZm9yIHRpbWVyIDAKKy8vIEVOVU1zOgorLy8gQURDX0lSUSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQURDX0lSUQorLy8gTUNVX0VWRU5UICAgICAgICAgICAgICAgIFNlbGVjdHMgTUNVX0VWCisvLyBBQ0xLX1JFRiAgICAgICAgICAgICAgICAgU2VsZWN0cyBBQ0xLX1JFRgorLy8gQVVYSU8xNSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xNQorLy8gQVVYSU8xNCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xNAorLy8gQVVYSU8xMyAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMworLy8gQVVYSU8xMiAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMgorLy8gQVVYSU8xMSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMQorLy8gQVVYSU8xMCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMAorLy8gQVVYSU85ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU85CisvLyBBVVhJTzggICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzgKKy8vIEFVWElPNyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNworLy8gQVVYSU82ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU82CisvLyBBVVhJTzUgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzUKKy8vIEFVWElPNCAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNAorLy8gQVVYSU8zICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8zCisvLyBBVVhJTzIgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzIKKy8vIEFVWElPMSAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMQorLy8gQVVYSU8wICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8wCisvLyBBT05fUFJPR19XVSAgICAgICAgICAgICAgU2VsZWN0cyBBT05fUFJPR19XVQorLy8gQU9OX1NXICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQU9OX1NXCisvLyBPQlNNVVgxICAgICAgICAgICAgICAgICAgU2VsZWN0cyBPQlNNVVgxCisvLyBPQlNNVVgwICAgICAgICAgICAgICAgICAgU2VsZWN0cyBPQlNNVVgwCisvLyBSVENfNEtIWiAgICAgICAgICAgICAgICAgU2VsZWN0cyBSVENfNEtIWgorLy8gQURDX0RPTkUgICAgICAgICAgICAgICAgIFNlbGVjdHMgQURDX0RPTkUKKy8vIFNNUEhfQVVUT1RBS0VfRE9ORSAgICAgICBTZWxlY3RzIFNNUEhfQVVUT1RBS0VfRE9ORQorLy8gVElNRVIxX0VWICAgICAgICAgICAgICAgIFNlbGVjdHMgVElNRVIxX0VWCisvLyBURENfRE9ORSAgICAgICAgICAgICAgICAgU2VsZWN0cyBURENfRE9ORQorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYX0NPTVBCCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhfQ09NUEEKKy8vIFJUQ19DSDJfRVYgICAgICAgICAgICAgICBTZWxlY3RzIFJUQ19DSDJfRVYKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUYwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfTUNVX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BQ0xLX1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFEMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUMwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFBMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTkwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxODAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE3MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTYwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE0MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTMwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDExMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBFMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQU9OX1BST0dfV1UgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BT05fU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBCMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX09CU01VWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEEwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwOTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19SVENfNEtIWiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1JUQ19DSDJfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNzo0XSBQUkUKKy8vCisvLyBQcmVzY2FsZXIgZGl2aXNpb24gcmF0aW8gaXMgMl5QUkUKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1BSRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfUFJFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19QUkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMV0gTU9ERQorLy8KKy8vIFRpbWVyIDAgbW9kZQorLy8gRU5VTXM6CisvLyBUSUNLICAgICAgICAgICAgICAgICAgICAgVGltZXIgMCBjb3VudGVyIGluY3JlbWVudHMgb25seSBvbiBlZGdlcyBvZiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCBzZXQgYnkgVElDS19TUkMuIFRoZSBldmVudHMgYXJlIGRpdmlkZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgUFJFIHNldHRpbmcuCisvLyBDTEsgICAgICAgICAgICAgICAgICAgICAgVGltZXIgMCBpbmNyZW1lbnRzIG9uIGV2ZXJ5IDJeUFJFIGVkZ2VzIG9mIEFVWAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX01PREVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX01PREVfVElDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfTU9ERV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIFJFTE9BRAorLy8KKy8vIFRpbWVyIDAgcmVsb2FkIHNldHRpbmcKKy8vIEVOVU1zOgorLy8gQ09OVCAgICAgICAgICAgICAgICAgICAgIFRpbWVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIHdoZW4gdGFyZ2V0IGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlZAorLy8gTUFOICAgICAgICAgICAgICAgICAgICAgIFRpbWVyIGhhcyB0byBiZSByZXN0YXJ0ZWQgbWFudWFsbHkKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1JFTE9BRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfUkVMT0FEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19SRUxPQURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1JFTE9BRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfUkVMT0FEX0NPTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19SRUxPQURfTUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfVElNRVJfT19UMUNGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTNdIFRJQ0tfU1JDX1BPTAorLy8KKy8vIFNvdXJjZSBjb3VudCBwb2xhcml0eSBmb3IgdGltZXIgMQorLy8gRU5VTXM6CisvLyBGQUxMICAgICAgICAgICAgICAgICAgICAgQ291bnQgb24gZmFsbGluZyBlZGdlcyBvZiBUSUNLX1NSQworLy8gUklTRSAgICAgICAgICAgICAgICAgICAgIENvdW50IG9uIHJpc2luZyBlZGdlcyBvZiBUSUNLX1NSQworI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19QT0xfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX1BPTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfUE9MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19QT0xfRkFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX1BPTF9SSVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogIFsxMjo4XSBUSUNLX1NSQworLy8KKy8vIFNlbGVjdGVkIHRpY2sgc291cmNlIGZvciB0aW1lciAxCisvLyBFTlVNczoKKy8vIEFEQ19JUlEgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFEQ19JUlEKKy8vIE1DVV9FVkVOVCAgICAgICAgICAgICAgICBTZWxlY3RzIE1DVV9FVgorLy8gQUNMS19SRUYgICAgICAgICAgICAgICAgIFNlbGVjdHMgQUNMS19SRUYKKy8vIEFVWElPMTUgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTUKKy8vIEFVWElPMTQgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTQKKy8vIEFVWElPMTMgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTMKKy8vIEFVWElPMTIgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTIKKy8vIEFVWElPMTEgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTEKKy8vIEFVWElPMTAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTAKKy8vIEFVWElPOSAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPOQorLy8gQVVYSU84ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU84CisvLyBBVVhJTzcgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzcKKy8vIEFVWElPNiAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNgorLy8gQVVYSU81ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU81CisvLyBBVVhJTzQgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzQKKy8vIEFVWElPMyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMworLy8gQVVYSU8yICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8yCisvLyBBVVhJTzEgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzEKKy8vIEFVWElPMCAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMAorLy8gQU9OX1BST0dfV1UgICAgICAgICAgICAgIFNlbGVjdHMgQU9OX1BST0dfV1UKKy8vIEFPTl9TVyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFPTl9TVworLy8gT0JTTVVYMSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgT0JTTVVYMQorLy8gT0JTTVVYMCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgT0JTTVVYMAorLy8gUlRDXzRLSFogICAgICAgICAgICAgICAgIFNlbGVjdHMgUlRDXzRLSFoKKy8vIEFEQ19ET05FICAgICAgICAgICAgICAgICBTZWxlY3RzIEFEQ19ET05FCisvLyBTTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgU2VsZWN0cyBTTVBIX0FVVE9UQUtFX0RPTkUKKy8vIFRJTUVSMF9FViAgICAgICAgICAgICAgICBTZWxlY3RzIFRJTUVSMF9FVgorLy8gVERDX0RPTkUgICAgICAgICAgICAgICAgIFNlbGVjdHMgVERDX0RPTkUKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWF9DT01QQgorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYX0NPTVBBCisvLyBSVENfQ0gyX0VWICAgICAgICAgICAgICAgU2VsZWN0cyBSVENfQ0gyX0VWCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUYwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX01DVV9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUUwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQUNMS19SRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRDAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFDMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWElPMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUIwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYSU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE5MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWElPMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYSU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNzAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhJTzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE2MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTUwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYSU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNDAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEzMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTIwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYSU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYSU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FPTl9QUk9HX1dVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQU9OX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19PQlNNVVgxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBBMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDkwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfUlRDXzRLSFogICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAgMHgwMDAwMDYwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19SVENfQ0gyX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzc6NF0gUFJFCisvLworLy8gUHJlc2NhbGVyIGRpdmlzaW9uIHJhdGlvIGlzIDJeUFJFCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19QUkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1BSRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfUFJFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzFdIE1PREUKKy8vCisvLyBUaW1lciAxIG1vZGUKKy8vIEVOVU1zOgorLy8gVElDSyAgICAgICAgICAgICAgICAgICAgIFRpbWVyIDEgY291bnRlciBpbmNyZW1lbnRzIG9ubHkgb24gZWRnZXMgb2YgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgc2V0IGJ5IFRJQ0tfU1JDLiBUaGUgZXZlbnRzIGFyZSBkaXZpZGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIFBSRSBzZXR0aW5nLgorLy8gQ0xLICAgICAgICAgICAgICAgICAgICAgIFRpbWVyIDEgaW5jcmVtZW50cyBvbiBldmVyeSAyXlBSRSBlZGdlcyBvZiBBVVgKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jaworI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19NT0RFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19NT0RFX1RJQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX01PREVfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBSRUxPQUQKKy8vCisvLyBUaW1lciAxIHJlbG9hZCBzZXR0aW5nCisvLyBFTlVNczoKKy8vIENPTlQgICAgICAgICAgICAgICAgICAgICBUaW1lciBpcyBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCB3aGVuIHRhcmdldCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWNoZWQKKy8vIE1BTiAgICAgICAgICAgICAgICAgICAgICBUaW1lciBoYXMgdG8gYmUgcmVzdGFydGVkIG1hbnVhbGx5CisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19SRUxPQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1JFTE9BRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfUkVMT0FEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19SRUxPQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1JFTE9BRF9DT05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfUkVMT0FEX01BTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1RJTUVSX09fVDBDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIFRpbWVyIDAgcnVuIGVuYWJsZSBjb250cm9sLiBUaGUgY291bnRlciByZXN0YXJ0cyB3aGVuIGVuYWJsaW5nIHRoZSB0aW1lci4gSWYKKy8vIFQwQ0ZHLlJFTE9BRCA9IDAsIHRoZSB0aW1lciBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIHdoZW4gcmVhY2hpbmcKKy8vIFQwVEFSR0VULlZBTFVFCisvLworLy8gMDogRGlzYWJsZSB0aW1lciAwCisvLyAxOiBFbmFibGUgdGltZXIgMAorI2RlZmluZSBBVVhfVElNRVJfVDBDVExfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9USU1FUl9UMENUTF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ1RMX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVElNRVJfVDBDVExfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1RJTUVSX09fVDBUQVJHRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBWQUxVRQorLy8KKy8vIFRpbWVyIDAgY291bnRzIGZyb20gMCB0byBWQUxVRS4gVGhlbiBnaXZlcyBhbiBldmVudCBhbmQgcmVzdGFydHMgaWYKKy8vIGNvbmZpZ3VyZWQgdG8gZG8gdG8gc28gaW4gdGhlIFQwQ0ZHLlJFTE9BRCBzZXR0aW5nLiBJZiBWQUxVRSBpcyBjaGFuZ2VkCisvLyB3aGlsZSB0aW1lciAwIGlzIHJ1bm5pbmcgc28gdGhhdCB0aGUgY291bnQgYmVjb21lcyBoaWdoZXIgdGhhbiBWQUxVRSB0aW1lciAwCisvLyB3aWxsIGFsc28gcmVzdGFydCBpZiBjb25maWd1cmVkIHRvIGRvIHNvLgorLy8KKy8vIElmIFQwQ0ZHLk1PREU9MCxubyBwcmVzY2FsZXIgaXMgdXNlZCwgYW5kIFZBTFVFIGVxdWFscyAxLCB0aGUgVElNRVIwX0VWCisvLyBldmVudCBsaW5lIHdpbGwgYmUgYWx3YXlzIHNldAorI2RlZmluZSBBVVhfVElNRVJfVDBUQVJHRVRfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFVWF9USU1FUl9UMFRBUkdFVF9WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQVVYX1RJTUVSX1QwVEFSR0VUX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9USU1FUl9PX1QxVEFSR0VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gVkFMVUUKKy8vCisvLyBUaW1lciAxIGNvdW50cyBmcm9tIDAgdG8gVkFMVUUuIFRoZW4gZ2l2ZXMgYW4gZXZlbnQgYW5kIHJlc3RhcnRzIGlmCisvLyBjb25maWd1cmVkIHRvIGRvIHRvIHNvIGluIHRoZSBUMUNGRy5SRUxPQUQgc2V0dGluZy4gSWYgVkFMVUUgaXMgY2hhbmdlZAorLy8gd2hpbGUgdGltZXIgMSBpcyBydW5uaW5nIHNvIHRoYXQgdGhlIGNvdW50IGJlY29tZXMgaGlnaGVyIHRoYW4gVkFMVUUgdGltZXIgMQorLy8gd2lsbCBhbHNvIHJlc3RhcnQgaWYgY29uZmlndXJlZCB0byBkbyBzby4KKy8vCisvLyBJZiBUMUNGRy5NT0RFPTAsbm8gcHJlc2NhbGVyIGlzIHVzZWQsIGFuZCBWQUxVRSBlcXVhbHMgMSwgdGhlIFRJTUVSMV9FVgorLy8gZXZlbnQgbGluZSB3aWxsIGJlIGFsd2F5cyBzZXQKKyNkZWZpbmUgQVVYX1RJTUVSX1QxVEFSR0VUX1ZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfVElNRVJfVDFUQVJHRVRfVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFVWF9USU1FUl9UMVRBUkdFVF9WQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfVElNRVJfT19UMUNUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gVGltZXIgMSBydW4gZW5hYmxlIGNvbnRyb2wuIFRoZSBjb3VudGVyIHJlc3RhcnRzIHdoZW4gZW5hYmxpbmcgdGhlIHRpbWVyLiBJZgorLy8gVDFDRkcuUkVMT0FEID0gMCwgdGhlIHRpbWVyIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbiByZWFjaGluZworLy8gVDFUQVJHRVQuVkFMVUUKKy8vCisvLyAwOiBEaXNhYmxlIHRpbWVyIDEKKy8vIDE6IEVuYWJsZSB0aW1lciAxCisjZGVmaW5lIEFVWF9USU1FUl9UMUNUTF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ1RMX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfVElNRVJfVDFDVExfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9USU1FUl9UMUNUTF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19BVVhfVElNRVJfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3d1Yy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3d1Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTIzMjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfd3VjLmgKQEAgLTAsMCArMSw3MDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hdXhfd3VjX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FVWF9XVUNfSF9fCisjZGVmaW5lIF9fSFdfQVVYX1dVQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBVVhfV1VDIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIE1vZHVsZSBDbG9jayBFbmFibGUKKyNkZWZpbmUgQVVYX1dVQ19PX01PRENMS0VOMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBQb3dlciBPZmYgUmVxdWVzdAorI2RlZmluZSBBVVhfV1VDX09fUFdST0ZGUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIFBvd2VyIERvd24gUmVxdWVzdAorI2RlZmluZSBBVVhfV1VDX09fUFdSRFdOUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIFBvd2VyIERvd24gQWNrbm93bGVkZ21lbnQKKyNkZWZpbmUgQVVYX1dVQ19PX1BXUkRXTkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBMb3cgRnJlcXVlbmN5IENsb2NrIFJlcXVlc3QKKyNkZWZpbmUgQVVYX1dVQ19PX0NMS0xGUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBMb3cgRnJlcXVlbmN5IENsb2NrIEFja25vd2xlZGdtZW50CisjZGVmaW5lIEFVWF9XVUNfT19DTEtMRkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gV2FrZS11cCBFdmVudCBGbGFncworI2RlZmluZSBBVVhfV1VDX09fV1VFVkZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIFdha2UtdXAgRXZlbnQgQ2xlYXIKKyNkZWZpbmUgQVVYX1dVQ19PX1dVRVZDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBBREMgQ2xvY2sgQ29udHJvbAorI2RlZmluZSBBVVhfV1VDX09fQURDQ0xLQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKy8vIFREQyBDbG9jayBDb250cm9sCisjZGVmaW5lIEFVWF9XVUNfT19URENDTEtDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKworLy8gUmVmZXJlbmNlIENsb2NrIENvbnRyb2wKKyNkZWZpbmUgQVVYX1dVQ19PX1JFRkNMS0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorCisvLyBSZWFsIFRpbWUgQ291bnRlciBTdWIgU2Vjb25kIEluY3JlbWVudCAwCisjZGVmaW5lIEFVWF9XVUNfT19SVENTVUJTRUNJTkMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8gUmVhbCBUaW1lIENvdW50ZXIgU3ViIFNlY29uZCBJbmNyZW1lbnQgMQorI2RlZmluZSBBVVhfV1VDX09fUlRDU1VCU0VDSU5DMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisKKy8vIFJlYWwgVGltZSBDb3VudGVyIFN1YiBTZWNvbmQgSW5jcmVtZW50IENvbnRyb2wKKyNkZWZpbmUgQVVYX1dVQ19PX1JUQ1NVQlNFQ0lOQ0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorCisvLyBNQ1UgQnVzIENvbnRyb2wKKyNkZWZpbmUgQVVYX1dVQ19PX01DVUJVU0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAorCisvLyBNQ1UgQnVzIFN0YXR1cworI2RlZmluZSBBVVhfV1VDX09fTUNVQlVTU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRDCisKKy8vIEFPTiBEb21haW4gQ29udHJvbCBTdGF0dXMKKyNkZWZpbmUgQVVYX1dVQ19PX0FPTkNUTFNUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorCisvLyBBVVggSW5wdXQgT3V0cHV0IExhdGNoCisjZGVmaW5lIEFVWF9XVUNfT19BVVhJT0xBVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKworLy8gTW9kdWxlIENsb2NrIEVuYWJsZSAxCisjZGVmaW5lIEFVWF9XVUNfT19NT0RDTEtFTjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fTU9EQ0xLRU4wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gQVVYX0FESTQKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9BREk0LgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIENQVSBoYXMgcmVxdWVzdGVkIGNsb2NrIGZvciBBVVhfQURJNAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSBDUFUgaGFzIG5vdCByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFVWF9BREk0CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9BREk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQVVYX0FESTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BVVhfQURJNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9BREk0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQVVYX0FESTRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BVVhfQURJNF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIEFVWF9EREkwX09TQworLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBjbG9jayBmb3IgQVVYX0RESTBfT1NDLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIENQVSBoYXMgcmVxdWVzdGVkIGNsb2NrIGZvciBBVVhfRERJMF9PU0MKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9EREkwX09TQworI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BVVhfRERJMF9PU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9EREkwX09TQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQVVYX0RESTBfT1NDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BVVhfRERJMF9PU0NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9EREkwX09TQ19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQVVYX0RESTBfT1NDX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs1XSBUREMKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9URENJRi4KKy8vCisvLyBOb3RlIHRoYXQgdGhlIFREQyBjb3VudGVyIGFuZCByZWZlcmVuY2UgY2xvY2sgc291cmNlcyBtdXN0IGJlIHJlcXVlc3RlZAorLy8gc2VwYXJhdGVseSB1c2luZyBURENDTEtDVEwgYW5kIFJFRkNMS0NUTCwgcmVzcGVjdGl2ZWx5LgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIENQVSBoYXMgcmVxdWVzdGVkIGNsb2NrIGZvciBUREMKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvciBUREMKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfVERDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9URENfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1REQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfVERDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9URENfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1REQ19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNF0gQU5BSUYKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9BTkFJRi4KKy8vCisvLyBOb3RlIHRoYXQgdGhlIEFEQyBpbnRlcm5hbCBjbG9jayBtdXN0IGJlIHJlcXVlc3RlZCBzZXBhcmF0ZWx5IHVzaW5nCisvLyBBRENDTEtDVEwuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFOQUlGCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIENQVSBoYXMgbm90IHJlcXVlc3RlZCBjbG9jayBmb3IgQU5BSUYKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQU5BSUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BTkFJRl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FOQUlGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQU5BSUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BTkFJRl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FOQUlGX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gVElNRVIKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9USU1FUi4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSBDUFUgaGFzIHJlcXVlc3RlZCBjbG9jayBmb3IgVElNRVIKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvciBUSU1FUgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1RJTUVSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfVElNRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9USU1FUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1RJTUVSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfVElNRVJfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsyXSBBSU9ESU8xCisvLworLy8gRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIGNsb2NrIGZvciBBVVhfQUlPRElPMS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSBDUFUgaGFzIHJlcXVlc3RlZCBjbG9jayBmb3IgQUlPRElPMQorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSBDUFUgaGFzIG5vdCByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFJT0RJTzEKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQUlPRElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8xX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FJT0RJTzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQUlPRElPMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8xX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FJT0RJTzFfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gQUlPRElPMAorLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBjbG9jayBmb3IgQVVYX0FJT0RJTzAuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFJT0RJTzAKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvciBBSU9ESU8wCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FJT0RJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQUlPRElPMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8wX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FJT0RJTzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQUlPRElPMF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8wX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIFNNUEgKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9TTVBILgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIENQVSBoYXMgcmVxdWVzdGVkIGNsb2NrIGZvciBTTVBICisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIENQVSBoYXMgbm90IHJlcXVlc3RlZCBjbG9jayBmb3IgU01QSAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9TTVBIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1NNUEhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfU01QSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9TTVBIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1NNUEhfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfU01QSF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19QV1JPRkZSRVEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBSRVEKKy8vCisvLyBQb3dlciBvZmYgcmVxdWVzdAorLy8KKy8vIDA6IE5vIGFjdGlvbgorLy8gMTogUmVxdWVzdCB0byBwb3dlciBkb3duIEFVWC4gT25jZSBzZXQsIHRoaXMgYml0IHNoYWxsIG5vdCBiZSBjbGVhcmVkLiBUaGUKKy8vIGJpdCB3aWxsIGJlIHJlc2V0IGFnYWluIHdoZW4gQVVYIGlzIHBvd2VyZWQgdXAgYWdhaW4uCisvLworLy8gVGhlIHJlcXVlc3Qgd2lsbCBvbmx5IGhhcHBlbiBpZiBBT05DVExTVEFULkFVWF9GT1JDRV9PTiA9IDAgYW5kCisvLyBNQ1VCVVNTVEFULkRJU0NPTk5FQ1RFRD0xLgorI2RlZmluZSBBVVhfV1VDX1BXUk9GRlJFUV9SRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfUFdST0ZGUkVRX1JFUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19QV1JPRkZSRVFfUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX1BXUk9GRlJFUV9SRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX1BXUkRXTlJFUQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFJFUQorLy8KKy8vIFBvd2VyIGRvd24gcmVxdWVzdAorLy8KKy8vIDA6IFJlcXVlc3QgZm9yIHN5c3RlbSB0byBiZSBpbiBhY3RpdmUgbW9kZQorLy8gMTogUmVxdWVzdCBmb3Igc3lzdGVtIHRvIGJlIGluIHBvd2VyIGRvd24gbW9kZQorLy8KKy8vIFdoZW4gUkVRIGlzIDEgb25lIHNoYWxsIGFzc3VtZSB0aGF0IHRoZSBzeXN0ZW0gaXMgaW4gcG93ZXIgZG93biwgYW5kIHRoYXQKKy8vIGN1cnJlbnQgc3VwcGx5IGlzIGxpbWl0ZWQuIFdoZW4gc2V0dGluZyBSRVEgPSAwLCBvbmUgc2hhbGwgYXNzdW1lIHRoYXQgdGhlCisvLyBzeXN0ZW0gaXMgaW4gcG93ZXIgZG93biB1bnRpbCAgUFdSRFdOQUNLLkFDSyA9IDAKKyNkZWZpbmUgQVVYX1dVQ19QV1JEV05SRVFfUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX1BXUkRXTlJFUV9SRVFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfUFdSRFdOUkVRX1JFUV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19QV1JEV05SRVFfUkVRX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19QV1JEV05BQ0sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBBQ0sKKy8vCisvLyBQb3dlciBkb3duIGFja25vd2xlZGdtZW50LiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcG93ZXIgZG93biByZXF1ZXN0IGdpdmVuIGJ5CisvLyBQV1JEV05SRVEuUkVRIGlzIGNhcHR1cmVkIGJ5IHRoZSBBT04gZG9tYWluIG9yIG5vdAorLy8KKy8vIDA6IEFVWCBjYW4gYXNzdW1lIHRoYXQgdGhlIHN5c3RlbSBpcyBpbiBhY3RpdmUgbW9kZQorLy8gMTogVGhlIHJlcXVlc3QgZm9yIHBvd2VyIGRvd24gaXMgYWNrbm93bGVkZ2VkIGFuZCB0aGUgQVVYIG11c3QgYWN0IGxpa2UgdGhlCisvLyBzeXN0ZW0gaXMgaW4gcG93ZXIgZG93biBtb2RlIGFuZCBwb3dlciBzdXBwbHkgaXMgbGltaXRlZAorLy8KKy8vIFRoZSBzeXN0ZW0gQ1BVIGNhbm5vdCB1c2UgdGhpcyBiaXQgc2luY2UgdGhlIGJ1cyBicmlkZ2UgYmV0d2VlbiBNQ1UgZG9tYWluCisvLyBhbmQgQVVYIGRvbWFpbiBpcyBhbHdheXMgZGlzY29ubmVjdGVkIHdoZW4gdGhpcyBiaXQgaXMgc2V0LiBGb3IgQVVYX1NDRSB1c2UKKy8vIG9ubHkKKyNkZWZpbmUgQVVYX1dVQ19QV1JEV05BQ0tfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX1BXUkRXTkFDS19BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfUFdSRFdOQUNLX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19QV1JEV05BQ0tfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19DTEtMRlJFUQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFJFUQorLy8KKy8vIExvdyBmcmVxdWVuY3kgcmVxdWVzdAorLy8KKy8vIDA6IFJlcXVlc3QgY2xvY2sgZnJlcXVlbmN5IHRvIGJlIGNvbnRyb2xsZWQgYnkgQU9OX1dVQzpBVVhDTEsgYW5kIHRoZSBzeXN0ZW0KKy8vIHN0YXRlCisvLyAxOiBSZXF1ZXN0IGxvdyBmcmVxdWVuY3kgY2xvY2sgU0NMS19MRiBhcyB0aGUgY2xvY2sgc291cmNlIGZvciBBVVgKKy8vCisvLyBUaGlzIGJpdCBtdXN0IG5vdCBiZSBtb2RpZmllZCB1bmxlc3MgQ0xLTEZBQ0suQUNLIG1hdGNoZXMgdGhlIGN1cnJlbnQgdmFsdWUKKyNkZWZpbmUgQVVYX1dVQ19DTEtMRlJFUV9SRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX0NMS0xGUkVRX1JFUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfQ0xLTEZSRVFfUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19DTEtMRlJFUV9SRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19DTEtMRkFDSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIEFDSworLy8KKy8vIEFja25vd2xlZGdtZW50IG9mIENMS0xGUkVRLlJFUQorLy8KKy8vIDA6IEFja25vd2xlZGdlbWVudCB0aGF0IGNsb2NrIGZyZXF1ZW5jeSBpcyBjb250cm9sbGVkIGJ5IEFPTl9XVUM6QVVYQ0xLIGFuZAorLy8gdGhlIHN5c3RlbSBzdGF0ZQorLy8gMTogQWNrbm93bGVkZ2VtZW50IHRoYXQgdGhlIGxvdyBmcmVxdWVuY3kgY2xvY2sgU0NMS19MRiBpcyB0aGUgY2xvY2sgc291cmNlCisvLyBmb3IgQVVYCisjZGVmaW5lIEFVWF9XVUNfQ0xLTEZBQ0tfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19DTEtMRkFDS19BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX0NMS0xGQUNLX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfQ0xLTEZBQ0tfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fV1VFVkZMQUdTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gQU9OX1JUQ19DSDIKKy8vCisvLyBJbmRpY2F0ZXMgcGVuZGluZyBldmVudCBmcm9tIEFPTl9SVENfQ0gyIGNvbXBhcmUuIE5vdGUgdGhhdCB0aGlzIGZsYWcgd2lsbAorLy8gYmUgc2V0IHdoZW5ldmVyIHRoZSBBT05fUlRDX0NIMiBldmVudCBoYXBwZW5zLCBidXQgdGhhdCBkb2VzIG5vdCBtZWFuIHRoYXQKKy8vIHRoaXMgZXZlbnQgaXMgYSB3YWtlLXVwIGV2ZW50LiBUbyBtYWtlIHRoZSBBT05fUlRDX0NIMiBhIHdha2UtdXAgZXZlbnQgZm9yCisvLyB0aGUgQVVYIGRvbWFpbiBjb25maWd1cmUgaXQgYXMgYSB3YWtlLXVwIGV2ZW50IGluIEFPTl9FVkVOVDpBVVhXVVNFTC5XVTBfRVYsCisvLyBBT05fRVZFTlQ6QVVYV1VTRUwuV1UxX0VWIG9yIEFPTl9FVkVOVDpBVVhXVVNFTC5XVTJfRVYuCisjZGVmaW5lIEFVWF9XVUNfV1VFVkZMQUdTX0FPTl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1dVQ19XVUVWRkxBR1NfQU9OX1JUQ19DSDJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfV1VDX1dVRVZGTEFHU19BT05fUlRDX0NIMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9XVUNfV1VFVkZMQUdTX0FPTl9SVENfQ0gyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQU9OX1NXCisvLworLy8gSW5kaWNhdGVzIHBlbmRpbmcgZXZlbnQgdHJpZ2dlcmVkIGJ5IHN5c3RlbSBDUFUgd3JpdGluZyBhIDEgdG8KKy8vIEFPTl9XVUM6QVVYQ1RMLlNXRVYuCisjZGVmaW5lIEFVWF9XVUNfV1VFVkZMQUdTX0FPTl9TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19XVUVWRkxBR1NfQU9OX1NXX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfV1VDX1dVRVZGTEFHU19BT05fU1dfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfV1VFVkZMQUdTX0FPTl9TV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQU9OX1BST0dfV1UKKy8vCisvLyBJbmRpY2F0ZXMgcGVuZGluZyBldmVudCB0cmlnZ2VyZWQgYnkgdGhlIHNvdXJjZXMgc2VsZWN0ZWQgaW4KKy8vIEFPTl9FVkVOVDpBVVhXVVNFTC5XVTBfRVYsIEFPTl9FVkVOVDpBVVhXVVNFTC5XVTFfRVYgYW5kCisvLyBBT05fRVZFTlQ6QVVYV1VTRUwuV1UyX0VWLgorI2RlZmluZSBBVVhfV1VDX1dVRVZGTEFHU19BT05fUFJPR19XVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfV1VFVkZMQUdTX0FPTl9QUk9HX1dVX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19XVUVWRkxBR1NfQU9OX1BST0dfV1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX1dVRVZGTEFHU19BT05fUFJPR19XVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX1dVRVZDTFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBBT05fUlRDX0NIMgorLy8KKy8vIFNldCB0byBjbGVhciB0aGUgV1VFVkZMQUdTLkFPTl9SVENfQ0gyIHdha2UtdXAgZXZlbnQuIE5vdGUgdGhhdCBpZiBSVEMKKy8vIGNoYW5uZWwgMiBpcyBhbHNvIHNldCBhcyBzb3VyY2UgZm9yIEFPTl9QUk9HX1dVIHRoaXMgZmllbGQgY2FuIGFsc28gY2xlYXIKKy8vIFdVRVZGTEFHUy5BT05fUFJPR19XVQorLy8KKy8vIFRoaXMgYml0IG11c3QgcmVtYWluIHNldCB1bnRpbCBXVUVWRkxBR1MuQU9OX1JUQ19DSDIgcmV0dXJucyB0byAwLgorI2RlZmluZSBBVVhfV1VDX1dVRVZDTFJfQU9OX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9XVUNfV1VFVkNMUl9BT05fUlRDX0NIMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX1dVQ19XVUVWQ0xSX0FPTl9SVENfQ0gyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfV1VDX1dVRVZDTFJfQU9OX1JUQ19DSDJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEFPTl9TVworLy8KKy8vIFNldCB0byBjbGVhciB0aGUgV1VFVkZMQUdTLkFPTl9TVyB3YWtlLXVwIGV2ZW50LgorLy8KKy8vIFRoaXMgYml0IG11c3QgcmVtYWluIHNldCB1bnRpbCBXVUVWRkxBR1MuQU9OX1NXIHJldHVybnMgdG8gMC4KKyNkZWZpbmUgQVVYX1dVQ19XVUVWQ0xSX0FPTl9TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX1dVRVZDTFJfQU9OX1NXX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9XVUNfV1VFVkNMUl9BT05fU1dfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19XVUVWQ0xSX0FPTl9TV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBBT05fUFJPR19XVQorLy8KKy8vIFNldCB0byBjbGVhciB0aGUgV1VFVkZMQUdTLkFPTl9QUk9HX1dVIHdha2UtdXAgZXZlbnQuIE5vdGUgb25seSBpZiBhbiBJTworLy8gZXZlbnQgaXMgc2VsZWN0ZWQgYXMgd2FrZS11cCBldmVudCwgaXMgaXQgcG9zc2libGUgdG8gdXNlIHRoaXMgZmllbGQgdG8KKy8vIGNsZWFyIHRoZSBzb3VyY2UuIE90aGVyIHNvdXJjZXMgY2Fubm90IGJlIGNsZWFyZWQgdXNpbmcgdGhpcyBmaWVsZC4KKy8vCisvLyBUaGUgSU8gcGluIG5lZWRzIHRvIGJlIGFzc2lnbmVkIHRvIEFVWCBpbiB0aGUgSU9DIGFuZCB0aGUgaW5wdXQgZW5hYmxlIGZvcgorLy8gdGhlIHBpbiBuZWVkcyB0byBiZSBzZXQgaW4gQUlPRElPMCBvciBBSU9ESU8xIGZvciB0aGlzIGNsZWFyaW5nIHRvIHRha2UKKy8vIGVmZmVjdC4KKy8vCisvLyBUaGlzIGJpdCBtdXN0IHJlbWFpbiBzZXQgdW50aWwgV1VFVkZMQUdTLkFPTl9QUk9HX1dVIHJldHVybnMgdG8gMC4KKyNkZWZpbmUgQVVYX1dVQ19XVUVWQ0xSX0FPTl9QUk9HX1dVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX1dVRVZDTFJfQU9OX1BST0dfV1VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfV1VFVkNMUl9BT05fUFJPR19XVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19XVUVWQ0xSX0FPTl9QUk9HX1dVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19BRENDTEtDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBBQ0sKKy8vCisvLyBBY2tub3dsZWRnZXMgdGhlIGxhc3QgdmFsdWUgd3JpdHRlbiB0byBSRVEuCisjZGVmaW5lIEFVWF9XVUNfQURDQ0xLQ1RMX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19BRENDTEtDVExfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfV1VDX0FEQ0NMS0NUTF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfQURDQ0xLQ1RMX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUkVRCisvLworLy8gRW5hYmxlcygxKSBvciBkaXNhYmxlcyAoMCkgdGhlIEFEQyBpbnRlcm5hbCBjbG9jay4KKy8vCisvLyBUaGlzIGJpdCBtdXN0IG5vdCBiZSBtb2RpZmllZCB1bmxlc3MgQUNLIG1hdGNoZXMgdGhlIGN1cnJlbnQgdmFsdWUuCisjZGVmaW5lIEFVWF9XVUNfQURDQ0xLQ1RMX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19BRENDTEtDVExfUkVRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX0FEQ0NMS0NUTF9SRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfQURDQ0xLQ1RMX1JFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fVERDQ0xLQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gQUNLCisvLworLy8gQWNrbm93bGVkZ2VzIHRoZSBsYXN0IHZhbHVlIHdyaXR0ZW4gdG8gUkVRLgorI2RlZmluZSBBVVhfV1VDX1REQ0NMS0NUTF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfVERDQ0xLQ1RMX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1dVQ19URENDTEtDVExfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX1REQ0NMS0NUTF9BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJFUQorLy8KKy8vIEVuYWJsZXMoMSkgb3IgZGlzYWJsZXMgKDApIHRoZSBUREMgY291bnRlciBjbG9jayBzb3VyY2UuCisvLworLy8gVGhpcyBiaXQgbXVzdCBub3QgYmUgbW9kaWZpZWQgdW5sZXNzIEFDSyBtYXRjaGVzIHRoZSBjdXJyZW50IHZhbHVlLgorI2RlZmluZSBBVVhfV1VDX1REQ0NMS0NUTF9SRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfVERDQ0xLQ1RMX1JFUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19URENDTEtDVExfUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX1REQ0NMS0NUTF9SRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX1JFRkNMS0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIEFDSworLy8KKy8vIEFja25vd2xlZGdlcyB0aGUgbGFzdCB2YWx1ZSB3cml0dGVuIHRvIFJFUS4KKyNkZWZpbmUgQVVYX1dVQ19SRUZDTEtDVExfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX1JFRkNMS0NUTF9BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9XVUNfUkVGQ0xLQ1RMX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19SRUZDTEtDVExfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRVEKKy8vCisvLyBFbmFibGVzKDEpIG9yIGRpc2FibGVzICgwKSB0aGUgVERDIHJlZmVyZW5jZSBjbG9jayBzb3VyY2UuCisvLworLy8gVGhpcyBiaXQgbXVzdCBub3QgYmUgbW9kaWZpZWQgdW5sZXNzIEFDSyBtYXRjaGVzIHRoZSBjdXJyZW50IHZhbHVlLgorI2RlZmluZSBBVVhfV1VDX1JFRkNMS0NUTF9SRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfUkVGQ0xLQ1RMX1JFUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19SRUZDTEtDVExfUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX1JFRkNMS0NUTF9SRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX1JUQ1NVQlNFQ0lOQzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBJTkMxNV8wCisvLworLy8gQml0cyAxNTowIG9mIHRoZSBSVEMgc3ViLXNlY29uZCBpbmNyZW1lbnQgdmFsdWUuCisjZGVmaW5lIEFVWF9XVUNfUlRDU1VCU0VDSU5DMF9JTkMxNV8wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVVYX1dVQ19SVENTVUJTRUNJTkMwX0lOQzE1XzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBVVhfV1VDX1JUQ1NVQlNFQ0lOQzBfSU5DMTVfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX1JUQ1NVQlNFQ0lOQzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBJTkMyM18xNgorLy8KKy8vIEJpdHMgMjM6MTYgb2YgdGhlIFJUQyBzdWItc2Vjb25kIGluY3JlbWVudCB2YWx1ZS4KKyNkZWZpbmUgQVVYX1dVQ19SVENTVUJTRUNJTkMxX0lOQzIzXzE2X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfV1VDX1JUQ1NVQlNFQ0lOQzFfSU5DMjNfMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFVWF9XVUNfUlRDU1VCU0VDSU5DMV9JTkMyM18xNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fUlRDU1VCU0VDSU5DQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gVVBEX0FDSworLy8KKy8vIEFja25vd2xlZGdtZW50IG9mIHRoZSBVUERfUkVRLgorI2RlZmluZSBBVVhfV1VDX1JUQ1NVQlNFQ0lOQ0NUTF9VUERfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfUlRDU1VCU0VDSU5DQ1RMX1VQRF9BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1dVQ19SVENTVUJTRUNJTkNDVExfVVBEX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX1JUQ1NVQlNFQ0lOQ0NUTF9VUERfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFVQRF9SRVEKKy8vCisvLyBTaWduYWwgdGhhdCBhIG5ldyByZWFsIHRpbWUgY291bnRlciBzdWIgc2Vjb25kIGluY3JlbWVudCB2YWx1ZSBpcyBhdmFpbGFibGUKKy8vCisvLyAwOiBOZXcgc3ViIHNlY29uZCBpbmNyZW1lbnQgaXMgbm90IGF2YWlsYWJsZQorLy8gMTogTmV3IHN1YiBzZWNvbmQgaW5jcmVtZW50IGlzIGF2YWlsYWJsZQorLy8KKy8vIFRoaXMgYml0IG11c3Qgbm90IGJlIG1vZGlmaWVkIHVubGVzcyBVUERfQUNLIG1hdGNoZXMgdGhlIGN1cnJlbnQgdmFsdWUuCisjZGVmaW5lIEFVWF9XVUNfUlRDU1VCU0VDSU5DQ1RMX1VQRF9SRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19SVENTVUJTRUNJTkNDVExfVVBEX1JFUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX1JUQ1NVQlNFQ0lOQ0NUTF9VUERfUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfUlRDU1VCU0VDSU5DQ1RMX1VQRF9SRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fTUNVQlVTQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gRElTQ09OTkVDVF9SRVEKKy8vCisvLyBSZXF1ZXN0cyB0aGUgQVVYIGRvbWFpbiBidXMgdG8gYmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIE1DVSBkb21haW4gYnVzLiBUaGUKKy8vIHJlcXVlc3QgaGFzIG5vIGVmZmVjdCB3aGVuIEFPTl9XVUM6QVVYX0NUTC5BVVhfRk9SQ0VfT04gaXMgc2V0LgorLy8KKy8vIFRoZSBkaXNjb25uZWN0aW9uIHN0YXR1cyBjYW4gYmUgbW9uaXRvcmVkIHRocm91Z2ggTUNVQlVTU1RBVC4gTm90ZSBob3dldmVyCisvLyB0aGF0IHRoaXMgcmVnaXN0ZXIgY2Fubm90IGJlIHJlYWQgYnkgdGhlIHN5c3RlbSBDUFUgd2hpbGUgZGlzY29ubmVjdGVkLgorLy8KKy8vIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiaXQgaXMgc2V0IGFuZCByZW1haW5zIHNldCBhZnRlciBpbml0aWFsCisvLyBwb3dlci11cCwgYW5kIHRoYXQgdGhlIHN5c3RlbSBDUFUgdXNlcyBBT05fV1VDOkFVWF9DVEwuQVVYX0ZPUkNFX09OIHRvCisvLyBjb25uZWN0L2Rpc2Nvbm5lY3QgdGhlIGJ1cy4KKyNkZWZpbmUgQVVYX1dVQ19NQ1VCVVNDVExfRElTQ09OTkVDVF9SRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX01DVUJVU0NUTF9ESVNDT05ORUNUX1JFUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfTUNVQlVTQ1RMX0RJU0NPTk5FQ1RfUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19NQ1VCVVNDVExfRElTQ09OTkVDVF9SRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19NQ1VCVVNTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gRElTQ09OTkVDVEVECisvLworLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIEFVWCBkb21haW4gYW5kIE1DVSBkb21haW4gYnVzZXMgYXJlIGN1cnJlbnRseQorLy8gZGlzY29ubmVjdGVkICgxKSBvciBjb25uZWN0ZWQgKDApLgorI2RlZmluZSBBVVhfV1VDX01DVUJVU1NUQVRfRElTQ09OTkVDVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfTUNVQlVTU1RBVF9ESVNDT05ORUNURURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1dVQ19NQ1VCVVNTVEFUX0RJU0NPTk5FQ1RFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX01DVUJVU1NUQVRfRElTQ09OTkVDVEVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIERJU0NPTk5FQ1RfQUNLCisvLworLy8gQWNrbm93bGVkZ2VzIHJlY2VwdGlvbiBvZiB0aGUgYnVzIGRpc2Nvbm5lY3Rpb24gcmVxdWVzdCwgYnkgbWF0Y2hpbmcgdGhlCisvLyB2YWx1ZSBvZiBNQ1VCVVNDVEwuRElTQ09OTkVDVF9SRVEuCisvLworLy8gTm90ZSB0aGF0IGlmIEFPTl9XVUM6QVVYQ1RMLkFVWF9GT1JDRV9PTiA9IDEgYSByZWNvbm5lY3QgdG8gdGhlIE1DVSBkb21haW4KKy8vIGJ1cyB3aWxsIGJlIG1hZGUgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdGUgb2YgTUNVQlVTQ1RMLkRJU0NPTk5FQ1RfUkVRCisjZGVmaW5lIEFVWF9XVUNfTUNVQlVTU1RBVF9ESVNDT05ORUNUX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19NQ1VCVVNTVEFUX0RJU0NPTk5FQ1RfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX01DVUJVU1NUQVRfRElTQ09OTkVDVF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfTUNVQlVTU1RBVF9ESVNDT05ORUNUX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fQU9OQ1RMU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIEFVWF9GT1JDRV9PTgorLy8KKy8vIFN0YXR1cyBvZiBBT05fV1VDOkFVWF9DVEwuQVVYX0ZPUkNFX09OLgorI2RlZmluZSBBVVhfV1VDX0FPTkNUTFNUQVRfQVVYX0ZPUkNFX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfQU9OQ1RMU1RBVF9BVVhfRk9SQ0VfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1dVQ19BT05DVExTVEFUX0FVWF9GT1JDRV9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX0FPTkNUTFNUQVRfQVVYX0ZPUkNFX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFNDRV9SVU5fRU4KKy8vCisvLyBTdGF0dXMgb2YgQU9OX1dVQzpBVVhfQ1RMLlNDRV9SVU5fRU4uCisjZGVmaW5lIEFVWF9XVUNfQU9OQ1RMU1RBVF9TQ0VfUlVOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19BT05DVExTVEFUX1NDRV9SVU5fRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX0FPTkNUTFNUQVRfU0NFX1JVTl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfQU9OQ1RMU1RBVF9TQ0VfUlVOX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fQVVYSU9MQVRDSAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gT3BlbnMgKDEpIG9yIGNsb3NlcyAoMCkgdGhlIEFVWF9BSU9ESU8wL0FVWF9BSU9ESU8xIHNpZ25hbCBsYXRjaGluZy4KKy8vCisvLyBBdCBzdGFydHVwLCBzZXQgRU4gPSBUUkFOU1AgYmVmb3JlIGNvbmZpZ3VyaW5nIEFVWF9BSU9ESU8wL0FVWF9BSU9ESU8xIGFuZAorLy8gc3Vic2VxdWVudGx5IHNlbGVjdGluZyBBVVggbW9kZSBpbiB0aGUgQU9OX0lPQy4KKy8vCisvLyBXaGVuIHBvd2VyaW5nIG9mZiB0aGUgQVVYIGRvbWFpbiAodXNpbmcgUFdST0ZGUkVRLlJFUSksIHNldCBFTiA9IFNUQVRJQyBpbgorLy8gYWR2YW5jZSBwcmVzZXJ2ZSB0aGUgY3VycmVudCBzdGF0ZSAobW9kZSBhbmQgb3V0cHV0IHZhbHVlKSBvZiB0aGUgSS9PIHBpbnMuCisvLyBFTlVNczoKKy8vIFRSQU5TUCAgICAgICAgICAgICAgICAgICBMYXRjaGVzIGFyZSB0cmFuc3BhcmVudCAoIG9wZW4gKQorLy8gU1RBVElDICAgICAgICAgICAgICAgICAgIExhdGNoZXMgYXJlIHN0YXRpYyAoIGNsb3NlZCApCisjZGVmaW5lIEFVWF9XVUNfQVVYSU9MQVRDSF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19BVVhJT0xBVENIX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX0FVWElPTEFUQ0hfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfQVVYSU9MQVRDSF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19BVVhJT0xBVENIX0VOX1RSQU5TUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX0FVWElPTEFUQ0hfRU5fU1RBVElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX01PRENMS0VOMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzddIEFVWF9BREk0CisvLworLy8gRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIGNsb2NrIGZvciBBVVhfQURJNC4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaGFzIHJlcXVlc3RlZCBjbG9jayBmb3IgQVVYX0FESTQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvciBBVVhfQURJNAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BVVhfQURJNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FVWF9BREk0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQVVYX0FESTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BVVhfQURJNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FVWF9BREk0X0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQVVYX0FESTRfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs2XSBBVVhfRERJMF9PU0MKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9EREkwX09TQy4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaGFzIHJlcXVlc3RlZCBjbG9jayBmb3IgQVVYX0RESTBfT1NDCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgQVVYX1NDRSBoYXMgbm90IHJlcXVlc3RlZCBjbG9jayBmb3IgQVVYX0RESTBfT1NDCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FVWF9EREkwX09TQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQVVYX0RESTBfT1NDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BVVhfRERJMF9PU0NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FVWF9EREkwX09TQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQVVYX0RESTBfT1NDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BVVhfRERJMF9PU0NfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzRdIEFOQUlGCisvLworLy8gRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIGNsb2NrIGZvciBBVVhfQU5BSUYuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGhhcyByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFOQUlGCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgQVVYX1NDRSBoYXMgbm90IHJlcXVlc3RlZCBjbG9jayBmb3IgQU5BSUYKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQU5BSUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BTkFJRl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FOQUlGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQU5BSUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BTkFJRl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FOQUlGX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gVElNRVIKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9USU1FUi4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaGFzIHJlcXVlc3RlZCBjbG9jayBmb3IgVElNRVIKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvciBUSU1FUgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX1RJTUVSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfVElNRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9USU1FUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX1RJTUVSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfVElNRVJfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsyXSBBSU9ESU8xCisvLworLy8gRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIGNsb2NrIGZvciBBVVhfQUlPRElPMS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaGFzIHJlcXVlc3RlZCBjbG9jayBmb3IgQUlPRElPMQorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaGFzIG5vdCByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFJT0RJTzEKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQUlPRElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BSU9ESU8xX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FJT0RJTzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQUlPRElPMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BSU9ESU8xX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FJT0RJTzFfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gQUlPRElPMAorLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBjbG9jayBmb3IgQVVYX0FJT0RJTzAuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGhhcyByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFJT0RJTzAKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvciBBSU9ESU8wCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FJT0RJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQUlPRElPMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BSU9ESU8wX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FJT0RJTzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQUlPRElPMF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BSU9ESU8wX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIFNNUEgKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9TTVBILgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NDRSBoYXMgcmVxdWVzdGVkIGNsb2NrIGZvciBTTVBICisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgQVVYX1NDRSBoYXMgbm90IHJlcXVlc3RlZCBjbG9jayBmb3IgU01QSAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9TTVBIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX1NNUEhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfU01QSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9TTVBIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX1NNUEhfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfU01QSF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisKKyNlbmRpZiAvLyBfX0FVWF9XVUNfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY2NmZy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY2NmZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MDg2NmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jY2ZnLmgKQEAgLTAsMCArMSwxOTEwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfY2NmZ19oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19DQ0ZHX0hfXworI2RlZmluZSBfX0hXX0NDRkdfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQ0NGRyBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBFeHRlcm4gTEYgY2xvY2sgY29uZmlndXJhdGlvbgorI2RlZmluZSBDQ0ZHX09fRVhUX0xGX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkE4CisKKy8vIE1vZGUgQ29uZmlndXJhdGlvbiAxCisjZGVmaW5lIENDRkdfT19NT0RFX0NPTkZfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQUMKKworLy8gQ0NGRyBTaXplIGFuZCBEaXNhYmxlIEZsYWdzCisjZGVmaW5lIENDRkdfT19TSVpFX0FORF9ESVNfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQjAKKworLy8gTW9kZSBDb25maWd1cmF0aW9uIDAKKyNkZWZpbmUgQ0NGR19PX01PREVfQ09ORiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZCNAorCisvLyBWb2x0YWdlIExvYWQgMAorI2RlZmluZSBDQ0ZHX09fVk9MVF9MT0FEXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkI4CisKKy8vIFZvbHRhZ2UgTG9hZCAxCisjZGVmaW5lIENDRkdfT19WT0xUX0xPQURfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQkMKKworLy8gUmVhbCBUaW1lIENsb2NrIE9mZnNldAorI2RlZmluZSBDQ0ZHX09fUlRDX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkMwCisKKy8vIEZyZXF1ZW5jeSBPZmZzZXQKKyNkZWZpbmUgQ0NGR19PX0ZSRVFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZDNAorCisvLyBJRUVFIE1BQyBBZGRyZXNzIDAKKyNkZWZpbmUgQ0NGR19PX0lFRUVfTUFDXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZDOAorCisvLyBJRUVFIE1BQyBBZGRyZXNzIDEKKyNkZWZpbmUgQ0NGR19PX0lFRUVfTUFDXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZDQworCisvLyBJRUVFIEJMRSBBZGRyZXNzIDAKKyNkZWZpbmUgQ0NGR19PX0lFRUVfQkxFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZEMAorCisvLyBJRUVFIEJMRSBBZGRyZXNzIDEKKyNkZWZpbmUgQ0NGR19PX0lFRUVfQkxFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZENAorCisvLyBCb290bG9hZGVyIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgQ0NGR19PX0JMX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZEOAorCisvLyBFcmFzZSBDb25maWd1cmF0aW9uCisjZGVmaW5lIENDRkdfT19FUkFTRV9DT05GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGREMKKworLy8gVEkgT3B0aW9ucworI2RlZmluZSBDQ0ZHX09fQ0NGR19USV9PUFRJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkUwCisKKy8vIFRlc3QgQWNjZXNzIFBvaW50cyBFbmFibGUgMAorI2RlZmluZSBDQ0ZHX09fQ0NGR19UQVBfREFQXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkU0CisKKy8vIFRlc3QgQWNjZXNzIFBvaW50cyBFbmFibGUgMQorI2RlZmluZSBDQ0ZHX09fQ0NGR19UQVBfREFQXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkU4CisKKy8vIEltYWdlIFZhbGlkCisjZGVmaW5lIENDRkdfT19JTUFHRV9WQUxJRF9DT05GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRUMKKworLy8gUHJvdGVjdCBTZWN0b3JzIDAtMzEKKyNkZWZpbmUgQ0NGR19PX0NDRkdfUFJPVF8zMV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGMAorCisvLyBQcm90ZWN0IFNlY3RvcnMgMzItNjMKKyNkZWZpbmUgQ0NGR19PX0NDRkdfUFJPVF82M18zMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGNAorCisvLyBQcm90ZWN0IFNlY3RvcnMgNjQtOTUKKyNkZWZpbmUgQ0NGR19PX0NDRkdfUFJPVF85NV82NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGOAorCisvLyBQcm90ZWN0IFNlY3RvcnMgOTYtMTI3CisjZGVmaW5lIENDRkdfT19DQ0ZHX1BST1RfMTI3Xzk2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRkMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fRVhUX0xGX0NMSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIERJTworLy8KKy8vIFVuc2lnbmVkIGludGVnZXIsIHNlbGVjdGluZyB0aGUgRElPIHRvIHN1cHBseSBleHRlcm5hbCAzMmtIeiBjbG9jayBhcworLy8gU0NMS19MRiB3aGVuIE1PREVfQ09ORi5TQ0xLX0xGX09QVElPTiBpcyBzZXQgdG8gRVhURVJOQUwuIFRoZSBzZWxlY3RlZCBESU8KKy8vIHdpbGwgYmUgbWFya2VkIGFzIHJlc2VydmVkIGJ5IHRoZSBwaW4gZHJpdmVyIChUSS1SVE9TIGVudmlyb25tZW50KSBhbmQgaGVuY2UKKy8vIG5vdCBzZWxlY3RhYmxlIGZvciBvdGhlciB1c2FnZS4KKyNkZWZpbmUgQ0NGR19FWFRfTEZfQ0xLX0RJT19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0VYVF9MRl9DTEtfRElPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIENDRkdfRVhUX0xGX0NMS19ESU9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICBbMjM6MF0gUlRDX0lOQ1JFTUVOVAorLy8KKy8vIFVuc2lnbmVkIGludGVnZXIsIGRlZmluaW5nIHRoZSBpbnB1dCBmcmVxdWVuY3kgb2YgdGhlIGV4dGVybmFsIGNsb2NrIGFuZCBpcworLy8gd3JpdHRlbiB0byBBT05fUlRDOlNVQlNFQ0lOQy5WQUxVRUlOQy4gRGVmaW5lZCBhcyBmb2xsb3dzOgorLy8gRVhUX0xGX0NMSy5SVENfSU5DUkVNRU5UID0gMl4zOC9JbnB1dENsb2NrRnJlcXVlbmN5IGluIEhlcnR6IChlLmcuOgorLy8gUlRDX0lOQ1JFTUVOVD0weDgwMDAwMCBmb3IgSW5wdXRDbG9ja0ZyZXF1ZW5jeT0zMjc2OCBIeikKKyNkZWZpbmUgQ0NGR19FWFRfTEZfQ0xLX1JUQ19JTkNSRU1FTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDQ0ZHX0VYVF9MRl9DTEtfUlRDX0lOQ1JFTUVOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIENDRkdfRVhUX0xGX0NMS19SVENfSU5DUkVNRU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fTU9ERV9DT05GXzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzIzOjIwXSBBTFRfRENEQ19WTUlOCisvLworLy8gTWluaW11bSB2b2x0YWdlIGZvciB3aGVuIERDL0RDIHNob3VsZCBiZSB1c2VkIGlmIGFsdGVybmF0ZSBEQy9EQyBzZXR0aW5nIGlzCisvLyBlbmFibGVkIChTSVpFX0FORF9ESVNfRkxBR1MuRElTX0FMVF9EQ0RDX1NFVFRJTkc9MCkuCisvLyBWb2x0YWdlID0gKDI4ICsgQUxUX0RDRENfVk1JTikgLyAxNi4KKy8vIDA6IDEuNzVWCisvLyAxOiAxLjgxMjVWCisvLyAuLi4KKy8vIDE0OiAyLjYyNVYKKy8vIDE1OiAyLjY4NzVWCisvLworLy8gTk9URSEgVGhlIERyaXZlckxpYiBmdW5jdGlvbiBTeXNDdHJsX0RDRENfVm9sdGFnZUNvbmRpdGlvbmFsQ29udHJvbCgpIG11c3QKKy8vIGJlIGNhbGxlZCByZWd1bGFybHkgdG8gYXBwbHkgdGhpcyBmaWVsZCAoaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGlmIHVzaW5nIFRJCisvLyBSVE9TISkuCisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfVk1JTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19WTUlOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX1ZNSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIEFMVF9EQ0RDX0RJVEhFUl9FTgorLy8KKy8vIEVuYWJsZSBEQy9EQyBkaXRoZXJpbmcgaWYgYWx0ZXJuYXRlIERDL0RDIHNldHRpbmcgaXMgZW5hYmxlZAorLy8gKFNJWkVfQU5EX0RJU19GTEFHUy5ESVNfQUxUX0RDRENfU0VUVElORz0wKS4KKy8vIDA6IERpdGhlciBkaXNhYmxlCisvLyAxOiBEaXRoZXIgZW5hYmxlCisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfRElUSEVSX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19ESVRIRVJfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX0RJVEhFUl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfRElUSEVSX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6IFsxODoxNl0gQUxUX0RDRENfSVBFQUsKKy8vCisvLyBJbmR1Y3RvciBwZWFrIGN1cnJlbnQgaWYgYWx0ZXJuYXRlIERDL0RDIHNldHRpbmcgaXMgZW5hYmxlZAorLy8gKFNJWkVfQU5EX0RJU19GTEFHUy5ESVNfQUxUX0RDRENfU0VUVElORz0wKS4gQXNzdW1pbmcgMTB1SCBleHRlcm5hbAorLy8gaW5kdWN0b3IhCisvLyBQZWFrIGN1cnJlbnQgPSAzMSArICggNCAqIEFMVF9EQ0RDX0lQRUFLICkgOgorLy8gMDogMzFtQSAobWluKQorLy8gLi4uCisvLyA0OiA0N21BCisvLyAuLi4KKy8vIDc6IDU5bUEgKG1heCkKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19JUEVBS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX0lQRUFLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDcwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfSVBFQUtfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6IFsxNToxMl0gREVMVEFfSUJJQVNfSU5JVAorLy8KKy8vIFNpZ25lZCBkZWx0YSB2YWx1ZSBmb3IgSUJJQVNfSU5JVC4gRGVsdGEgdmFsdWUgb25seSBhcHBsaWVzIGlmCisvLyBTSVpFX0FORF9ESVNfRkxBR1MuRElTX1hPU0NfT1ZSPTAuCisvLyBTZWUgRkNGRzE6QU1QQ09NUF9DVFJMMS5JQklBU19JTklUCisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfSU5JVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19JTklUX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX0RFTFRBX0lCSUFTX0lOSVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjhdIERFTFRBX0lCSUFTX09GRlNFVAorLy8KKy8vIFNpZ25lZCBkZWx0YSB2YWx1ZSBmb3IgSUJJQVNfT0ZGU0VULiBEZWx0YSB2YWx1ZSBvbmx5IGFwcGxpZXMgaWYKKy8vIFNJWkVfQU5EX0RJU19GTEFHUy5ESVNfWE9TQ19PVlI9MC4KKy8vIFNlZSBGQ0ZHMTpBTVBDT01QX0NUUkwxLklCSUFTX09GRlNFVAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX0RFTFRBX0lCSUFTX09GRlNFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfT0ZGU0VUX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19PRkZTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBYT1NDX01BWF9TVEFSVAorLy8KKy8vIFVuc2lnbmVkIHZhbHVlIG9mIG1heGltdW0gWE9TQyBzdGFydHVwIHRpbWUgKHdvcnN0IGNhc2UpIGluIHVuaXRzIG9mIDEwMHVzLgorLy8gVmFsdWUgb25seSBhcHBsaWVzIGlmIFNJWkVfQU5EX0RJU19GTEFHUy5ESVNfWE9TQ19PVlI9MC4KKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9YT1NDX01BWF9TVEFSVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX1hPU0NfTUFYX1NUQVJUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfWE9TQ19NQVhfU1RBUlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fU0laRV9BTkRfRElTX0ZMQUdTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gU0laRV9PRl9DQ0ZHCisvLworLy8gVG90YWwgc2l6ZSBvZiBDQ0ZHIGluIGJ5dGVzLgorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19TSVpFX09GX0NDRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX1NJWkVfT0ZfQ0NGR19NICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfU0laRV9PRl9DQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo0XSBESVNBQkxFX0ZMQUdTCisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNBQkxFX0ZMQUdTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU0FCTEVfRkxBR1NfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRjAKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTQUJMRV9GTEFHU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBESVNfVENYTworLy8KKy8vIERpc2FibGUgVENYTy4KKy8vIDA6IFRDWE8gZnVuY3Rpb25hbGl0eSBlbmFibGVkLgorLy8gMTogVENYTyBmdW5jdGlvbmFsaXR5IGRpc2FibGVkLgorLy8gTm90ZToKKy8vIEFuIGV4dGVybmFsIFRDWE8gaXMgcmVxdWlyZWQgaWYgRElTX1RDWE8gPSAwLgorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfVENYTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19UQ1hPX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1RDWE9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfVENYT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIERJU19HUFJBTQorLy8KKy8vIERpc2FibGUgR1BSQU0gKG9yIHVzZSB0aGUgOEsgVklNUyBSQU0gYXMgQ0FDSEUgUkFNKS4KKy8vIDA6IEdQUkFNIGlzIGVuYWJsZWQgYW5kIGhlbmNlIENBQ0hFIGRpc2FibGVkLgorLy8gMTogR1BSQU0gaXMgZGlzYWJsZWQgYW5kIGluc3RlYWQgQ0FDSEUgaXMgZW5hYmxlZCAoZGVmYXVsdCkuCisvLyBOb3RlczoKKy8vIC0gRGlzYWJsaW5nIENBQ0hFIHdpbGwgcmVkdWNlIENQVSBleGVjdXRpb24gc3BlZWQgKHVwIHRvIDYwJSkuCisvLyAtIEdQUkFNIGlzIDggSy1ieXRlcyBpbiBzaXplIGFuZCBsb2NhdGVkIGF0IDB4MTEwMDAwMDAtMHgxMTAwMUZGRiBpZgorLy8gZW5hYmxlZC4KKy8vIFNlZToKKy8vIFZJTVM6Q1RMLk1PREUKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19HUFJBTV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBESVNfQUxUX0RDRENfU0VUVElORworLy8KKy8vIERpc2FibGUgYWx0ZXJuYXRlIERDL0RDIHNldHRpbmdzLgorLy8gMDogRW5hYmxlIGFsdGVybmF0ZSBEQy9EQyBzZXR0aW5ncy4KKy8vIDE6IERpc2FibGUgYWx0ZXJuYXRlIERDL0RDIHNldHRpbmdzLgorLy8gU2VlOgorLy8gTU9ERV9DT05GXzEuQUxUX0RDRENfVk1JTgorLy8gTU9ERV9DT05GXzEuQUxUX0RDRENfRElUSEVSX0VOCisvLyBNT0RFX0NPTkZfMS5BTFRfRENEQ19JUEVBSworLy8KKy8vIE5PVEUhIFRoZSBEcml2ZXJMaWIgZnVuY3Rpb24gU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2woKSBtdXN0CisvLyBiZSBjYWxsZWQgcmVndWxhcmx5IHRvIGFwcGx5IHRoaXMgZmllbGQgKGhhbmRsZWQgYXV0b21hdGljYWxseSBpZiB1c2luZyBUSQorLy8gUlRPUyEpLgorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfQUxUX0RDRENfU0VUVElORyAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19BTFRfRENEQ19TRVRUSU5HX0JJVE4gICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0FMVF9EQ0RDX1NFVFRJTkdfTSAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfQUxUX0RDRENfU0VUVElOR19TICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIERJU19YT1NDX09WUgorLy8KKy8vIERpc2FibGUgWE9TQyBvdmVycmlkZSBmdW5jdGlvbmFsaXR5LgorLy8gMDogRW5hYmxlIFhPU0Mgb3ZlcnJpZGUgZnVuY3Rpb25hbGl0eS4KKy8vIDE6IERpc2FibGUgWE9TQyBvdmVycmlkZSBmdW5jdGlvbmFsaXR5LgorLy8gU2VlOgorLy8gTU9ERV9DT05GXzEuREVMVEFfSUJJQVNfSU5JVAorLy8gTU9ERV9DT05GXzEuREVMVEFfSUJJQVNfT0ZGU0VUCisvLyBNT0RFX0NPTkZfMS5YT1NDX01BWF9TVEFSVAorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfWE9TQ19PVlIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19YT1NDX09WUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1hPU0NfT1ZSX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfWE9TQ19PVlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX01PREVfQ09ORgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIFZERFJfVFJJTV9TTEVFUF9ERUxUQQorLy8KKy8vIFNpZ25lZCBkZWx0YSB2YWx1ZSB0byBhcHBseSB0byB0aGUKKy8vIFZERFJfVFJJTV9TTEVFUCB0YXJnZXQsIG1pbnVzIG9uZS4gU2VlIEZDRkcxOlZPTFRfVFJJTS5WRERSX1RSSU1fU0xFRVBfSC4KKy8vIDB4OCAoLTgpIDogRGVsdGEgPSAtNworLy8gLi4uCisvLyAweEYgKC0xKSA6IERlbHRhID0gMAorLy8gMHgwICgwKSA6IERlbHRhID0gKzEKKy8vIC4uLgorLy8gMHg3ICg3KSA6IERlbHRhID0gKzgKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX0RFTFRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfREVMVEFfTSAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9ERUxUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gRENEQ19SRUNIQVJHRQorLy8KKy8vIERDL0RDIGR1cmluZyByZWNoYXJnZSBpbiBwb3dlcmRvd24uCisvLyAwOiBVc2UgdGhlIERDL0RDIGR1cmluZyByZWNoYXJnZSBpbiBwb3dlcmRvd24uCisvLyAxOiBEbyBub3QgdXNlIHRoZSBEQy9EQyBkdXJpbmcgcmVjaGFyZ2UgaW4gcG93ZXJkb3duIChkZWZhdWx0KS4KKy8vCisvLyBOT1RFISBUaGUgRHJpdmVyTGliIGZ1bmN0aW9uIFN5c0N0cmxfRENEQ19Wb2x0YWdlQ29uZGl0aW9uYWxDb250cm9sKCkgbXVzdAorLy8gYmUgY2FsbGVkIHJlZ3VsYXJseSB0byBhcHBseSB0aGlzIGZpZWxkIChoYW5kbGVkIGF1dG9tYXRpY2FsbHkgaWYgdXNpbmcgVEkKKy8vIFJUT1MhKS4KKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfRENEQ19SRUNIQVJHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9EQ0RDX1JFQ0hBUkdFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENDRkdfTU9ERV9DT05GX0RDRENfUkVDSEFSR0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfRENEQ19SRUNIQVJHRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogICAgWzI2XSBEQ0RDX0FDVElWRQorLy8KKy8vIERDL0RDIGluIGFjdGl2ZSBtb2RlLgorLy8gMDogVXNlIHRoZSBEQy9EQyBkdXJpbmcgYWN0aXZlIG1vZGUuCisvLyAxOiBEbyBub3QgdXNlIHRoZSBEQy9EQyBkdXJpbmcgYWN0aXZlIG1vZGUgKGRlZmF1bHQpLgorLy8KKy8vIE5PVEUhIFRoZSBEcml2ZXJMaWIgZnVuY3Rpb24gU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2woKSBtdXN0CisvLyBiZSBjYWxsZWQgcmVndWxhcmx5IHRvIGFwcGx5IHRoaXMgZmllbGQgKGhhbmRsZWQgYXV0b21hdGljYWxseSBpZiB1c2luZyBUSQorLy8gUlRPUyEpLgorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9EQ0RDX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX0RDRENfQUNUSVZFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfRENEQ19BQ1RJVkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9EQ0RDX0FDVElWRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIFZERFJfRVhUX0xPQUQKKy8vCisvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhCisvLyByZXNlcnZlZC4gV3JpdGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgcmVzZXQvZGVmYXVsdCB2YWx1ZSBtYXkgcmVzdWx0IGluCisvLyB1bmRlZmluZWQgYmVoYXZpb3IuCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFJfRVhUX0xPQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREUl9FWFRfTE9BRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9WRERSX0VYVF9MT0FEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFJfRVhUX0xPQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gVkREU19CT0RfTEVWRUwKKy8vCisvLyBWRERTIEJPRCBsZXZlbC4KKy8vIDA6IFZERFMgQk9EIGxldmVsIGlzIDIuMFYgKG5lY2Vzc2FyeSBmb3IgZXh0ZXJuYWwgbG9hZCBtb2RlLCBvciBmb3IgbWF4aW11bQorLy8gUEEgb3V0cHV0IHBvd2VyIG9uIENDMTN4eCkuCisvLyAxOiBWRERTIEJPRCBsZXZlbCBpcyAxLjhWIChvciAxLjY1ViBmb3IgZXh0ZXJuYWwgcmVndWxhdG9yIG1vZGUpIChkZWZhdWx0KS4KKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREU19CT0RfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9WRERTX0JPRF9MRVZFTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFNfQk9EX0xFVkVMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREU19CT0RfTEVWRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjIyXSBTQ0xLX0xGX09QVElPTgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIFNDTEtfTEYuCisvLyBFTlVNczoKKy8vIFJDT1NDX0xGICAgICAgICAgICAgICAgICBMb3cgZnJlcXVlbmN5IFJDT1NDIChkZWZhdWx0KQorLy8gWE9TQ19MRiAgICAgICAgICAgICAgICAgIDMyLjc2OGtIeiBsb3cgZnJlcXVlbmN5IFhPU0MKKy8vIEVYVEVSTkFMX0xGICAgICAgICAgICAgICBFeHRlcm5hbCBsb3cgZnJlcXVlbmN5IGNsb2NrIG9uIERJTyBkZWZpbmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUX0xGX0NMSy5ESU8uIFRoZSBSVEMgdGljayBzcGVlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6U1VCU0VDSU5DIGlzIHVwZGF0ZWQgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRfTEZfQ0xLLlJUQ19JTkNSRU1FTlQgKGRvbmUgaW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpbURldmljZSgpIHh4V2FyZSBib290IGZ1bmN0aW9uKS4gRXh0ZXJuYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBtdXN0IGFsd2F5cyBiZSBydW5uaW5nIHdoZW4gdGhlIGNoaXAgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBzdGFuZGJ5IGZvciBWRERSIHJlY2hhcmdlIHRpbWluZy4KKy8vIFhPU0NfSEZfRExGICAgICAgICAgICAgICAzMS4yNWtIeiBjbG9jayBkZXJpdmVkIGZyb20gMjRNSHogWE9TQyAoZGl2aWRpbmcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBieSA3NjggaW4gSFcpLiBUaGUgUlRDIHRpY2sgc3BlZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBbQU9OX1JUQy5TVUJTRUNJTkMuKl0gaXMgdXBkYXRlZCB0byAweDg2MzdCRCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIGEgMzEuMjVrSHogY2xvY2sgKGRvbmUgaW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpbURldmljZSgpIHh4V2FyZSBib290IGZ1bmN0aW9uKS4gU3RhbmRieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHBvd2VyIG1vZGUgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIHRoaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBzb3VyY2UuCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEMwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OX1JDT1NDX0xGICAgICAgICAgICAgICAgICAgICAgIDB4MDBDMDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fWE9TQ19MRiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9FWFRFUk5BTF9MRiAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OX1hPU0NfSEZfRExGICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyMV0gVkREUl9UUklNX1NMRUVQX1RDCisvLworLy8gMHgxOiBWRERSX1RSSU1fU0xFRVBfREVMVEEgaXMgbm90IHRlbXBlcmF0dXJlIGNvbXBlbnNhdGVkCisvLyAweDA6IFJUT1MvZHJpdmVyIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGVzIFZERFJfVFJJTV9TTEVFUF9ERUxUQSBldmVyeSB0aW1lCisvLyBzdGFuZGJ5IG1vZGUgaXMgZW50ZXJlZC4gVGhpcyBpbXByb3ZlcyBsb3ctdGVtcGVyYXR1cmUgUkNPU0NfTEYgZnJlcXVlbmN5CisvLyBzdGFiaWxpdHkgaW4gc3RhbmRieSBtb2RlLgorLy8KKy8vIFdoZW4gdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIGlzIHBlcmZvcm1lZCwgdGhlIGRlbHRhIGlzIGNhbGN1bGF0ZXMgdGhpcworLy8gd2F5OgorLy8gRGVsdGEgPSBtYXggKGRlbHRhLCBtaW4oOCwgZmxvb3IoNjItdGVtcCkvOCkpCisvLyBIZXJlLCBkZWx0YSBpcyBnaXZlbiBieSBWRERSX1RSSU1fU0xFRVBfREVMVEEsIGFuZCB0ZW1wIGlzIHRoZSBjdXJyZW50CisvLyB0ZW1wZXJhdHVyZSBpbiBkZWdyZWVzIEMuCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9UQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX1RDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfVENfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9UQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gUlRDX0NPTVAKKy8vCisvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhCisvLyByZXNlcnZlZC4gV3JpdGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgcmVzZXQvZGVmYXVsdCB2YWx1ZSBtYXkgcmVzdWx0IGluCisvLyB1bmRlZmluZWQgYmVoYXZpb3IuCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1JUQ19DT01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfUlRDX0NPTVBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9SVENfQ09NUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1JUQ19DT01QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6IFsxOToxOF0gWE9TQ19GUkVRCisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyAyNE0gICAgICAgICAgICAgICAgICAgICAgMjQgTUh6IFhPU0NfSEYKKy8vIDQ4TSAgICAgICAgICAgICAgICAgICAgICA0OCBNSHogWE9TQ19IRgorLy8gSFBPU0MgICAgICAgICAgICAgICAgICAgIEhQT1NDCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1hPU0NfRlJFUV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1hPU0NfRlJFUV8yNE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQzAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRXzQ4TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfSFBPU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisKKy8vIEZpZWxkOiAgICBbMTddIFhPU0NfQ0FQX01PRAorLy8KKy8vIEVuYWJsZSBtb2RpZmljYXRpb24gKGRlbHRhKSB0byBYT1NDIGNhcC1hcnJheS4gVmFsdWUgc3BlY2lmaWVkIGluCisvLyBYT1NDX0NBUEFSUkFZX0RFTFRBLgorLy8gMDogQXBwbHkgY2FwLWFycmF5IGRlbHRhCisvLyAxOiBEbyBub3QgYXBwbHkgY2FwLWFycmF5IGRlbHRhIChkZWZhdWx0KQorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9YT1NDX0NBUF9NT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1hPU0NfQ0FQX01PRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfWE9TQ19DQVBfTU9EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9YT1NDX0NBUF9NT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIEhGX0NPTVAKKy8vCisvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhCisvLyByZXNlcnZlZC4gV3JpdGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgcmVzZXQvZGVmYXVsdCB2YWx1ZSBtYXkgcmVzdWx0IGluCisvLyB1bmRlZmluZWQgYmVoYXZpb3IuCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX0hGX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfSEZfQ09NUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9IRl9DT01QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX0hGX0NPTVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gWE9TQ19DQVBBUlJBWV9ERUxUQQorLy8KKy8vIFNpZ25lZCA4LWJpdCB2YWx1ZSwgZGlyZWN0bHkgbW9kaWZ5aW5nIHRyaW1tZWQgWE9TQyBjYXAtYXJyYXkgc3RlcCB2YWx1ZS4KKy8vIEVuYWJsZWQgYnkgWE9TQ19DQVBfTU9ELgorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9YT1NDX0NBUEFSUkFZX0RFTFRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1hPU0NfQ0FQQVJSQVlfREVMVEFfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfWE9TQ19DQVBBUlJBWV9ERUxUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBWRERSX0NBUAorLy8KKy8vIFVuc2lnbmVkIDgtYml0IGludGVnZXIsIHJlcHJlc2VudGluZyB0aGUgbWluaW11bSBkZWNvdXBsaW5nIGNhcGFjaXRhbmNlCisvLyAod29yc3QgY2FzZSkgb24gVkREUiwgaW4gdW5pdHMgb2YgMTAwbkYuIFRoaXMgc2hvdWxkIHRha2UgaW50byBhY2NvdW50CisvLyBjYXBhY2l0b3IgdG9sZXJhbmNlIGFuZCB2b2x0YWdlIGRlcGVuZGVudCBjYXBhY2l0YW5jZSB2YXJpYXRpb24uIFRoaXMgYml0CisvLyBhZmZlY3RzIHRoZSByZWNoYXJnZSBwZXJpb2QgY2FsY3VsYXRpb24gd2hlbiBnb2luZyBpbnRvIHBvd2VyZG93biBvcgorLy8gc3RhbmRieS4KKy8vCisvLyBOT1RFISBJZiB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0aGlzIGZpZWxkIG11c3QgYmUgY29uZmlndXJlZCAodXNlZAorLy8gYnkgVEkgUlRPUyk6CisvLyBTeXNDdHJsU2V0UmVjaGFyZ2VCZWZvcmVQb3dlckRvd24oKSBTeXNDdHJsQWRqdXN0UmVjaGFyZ2VBZnRlclBvd2VyRG93bigpCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFJfQ0FQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREUl9DQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9WRERSX0NBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX1ZPTFRfTE9BRF8wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gVkREUl9FWFRfVFA0NQorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDQ1X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQNDVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFA0NV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gVkREUl9FWFRfVFAyNQorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDI1X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFAyNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gVkREUl9FWFRfVFA1CisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFA1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBWRERSX0VYVF9UTTE1CisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RNMTVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVE0xNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UTTE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19WT0xUX0xPQURfMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFZERFJfRVhUX1RQMTI1CisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQMTI1X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFAxMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDEyNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBWRERSX0VYVF9UUDEwNQorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDEwNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQMTA1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFAxMDVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gVkREUl9FWFRfVFA4NQorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDg1X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQODVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFA4NV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gVkREUl9FWFRfVFA2NQorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDY1X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQNjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFA2NV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fUlRDX09GRlNFVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTZdIFJUQ19DT01QX1AwCisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgQ0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBSVENfQ09NUF9QMQorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gUlRDX0NPTVBfUDIKKy8vCisvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhCisvLyByZXNlcnZlZC4gV3JpdGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgcmVzZXQvZGVmYXVsdCB2YWx1ZSBtYXkgcmVzdWx0IGluCisvLyB1bmRlZmluZWQgYmVoYXZpb3IuCisjZGVmaW5lIENDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX0ZSRVFfT0ZGU0VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gSEZfQ09NUF9QMAorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIENDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gSEZfQ09NUF9QMQorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gSEZfQ09NUF9QMgorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fSUVFRV9NQUNfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEFERFIKKy8vCisvLyBCaXRzWzMxOjBdIG9mIHRoZSA2NC1iaXRzIGN1c3RvbSBJRUVFIE1BQyBhZGRyZXNzLgorLy8gSWYgZGlmZmVyZW50IGZyb20gMHhGRkZGRkZGRiB0aGVuIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGlzIGFwcGxpZWQ7CisvLyBvdGhlcndpc2UgdXNlIHZhbHVlIGZyb20gRkNGRy4KKyNkZWZpbmUgQ0NGR19JRUVFX01BQ18wX0FERFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDQ0ZHX0lFRUVfTUFDXzBfQUREUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENDRkdfSUVFRV9NQUNfMF9BRERSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fSUVFRV9NQUNfMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEFERFIKKy8vCisvLyBCaXRzWzYzOjMyXSBvZiB0aGUgNjQtYml0cyBjdXN0b20gSUVFRSBNQUMgYWRkcmVzcy4KKy8vIElmIGRpZmZlcmVudCBmcm9tIDB4RkZGRkZGRkYgdGhlbiB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBpcyBhcHBsaWVkOworLy8gb3RoZXJ3aXNlIHVzZSB2YWx1ZSBmcm9tIEZDRkcuCisjZGVmaW5lIENDRkdfSUVFRV9NQUNfMV9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ0NGR19JRUVFX01BQ18xX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDQ0ZHX0lFRUVfTUFDXzFfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX0lFRUVfQkxFXzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBBRERSCisvLworLy8gQml0c1szMTowXSBvZiB0aGUgNjQtYml0cyBjdXN0b20gSUVFRSBCTEUgYWRkcmVzcy4KKy8vIElmIGRpZmZlcmVudCBmcm9tIDB4RkZGRkZGRkYgdGhlbiB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBpcyBhcHBsaWVkOworLy8gb3RoZXJ3aXNlIHVzZSB2YWx1ZSBmcm9tIEZDRkcuCisjZGVmaW5lIENDRkdfSUVFRV9CTEVfMF9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ0NGR19JRUVFX0JMRV8wX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDQ0ZHX0lFRUVfQkxFXzBfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX0lFRUVfQkxFXzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBBRERSCisvLworLy8gQml0c1s2MzozMl0gb2YgdGhlIDY0LWJpdHMgY3VzdG9tIElFRUUgQkxFIGFkZHJlc3MuCisvLyBJZiBkaWZmZXJlbnQgZnJvbSAweEZGRkZGRkZGIHRoZW4gdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgaXMgYXBwbGllZDsKKy8vIG90aGVyd2lzZSB1c2UgdmFsdWUgZnJvbSBGQ0ZHLgorI2RlZmluZSBDQ0ZHX0lFRUVfQkxFXzFfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENDRkdfSUVFRV9CTEVfMV9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ0NGR19JRUVFX0JMRV8xX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19CTF9DT05GSUcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBCT09UTE9BREVSX0VOQUJMRQorLy8KKy8vIEJvb3Rsb2FkZXIgZW5hYmxlLiBCb290IGxvYWRlciBjYW4gYmUgYWNjZXNzZWQgaWYKKy8vIElNQUdFX1ZBTElEX0NPTkYuSU1BR0VfVkFMSUQgaXMgbm9uLXplcm8gb3IgQkxfRU5BQkxFIGlzIGVuYWJsZWQgKGFuZAorLy8gY29uZGl0aW9ucyBmb3IgYm9vdCBsb2FkZXIgYmFja2Rvb3IgYXJlIG1ldCkuCisvLyAweEM1OiBCb290IGxvYWRlciBpcyBlbmFibGVkLgorLy8gQW55IG90aGVyIHZhbHVlOiBCb290IGxvYWRlciBpcyBkaXNhYmxlZC4KKyNkZWZpbmUgQ0NGR19CTF9DT05GSUdfQk9PVExPQURFUl9FTkFCTEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0JMX0NPTkZJR19CT09UTE9BREVSX0VOQUJMRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIENDRkdfQkxfQ09ORklHX0JPT1RMT0FERVJfRU5BQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxNl0gQkxfTEVWRUwKKy8vCisvLyBTZXRzIHRoZSBhY3RpdmUgbGV2ZWwgb2YgdGhlIHNlbGVjdGVkIERJTyBudW1iZXIgQkxfUElOX05VTUJFUiBpZiBib290CisvLyBsb2FkZXIgYmFja2Rvb3IgaXMgZW5hYmxlZCBieSB0aGUgQkxfRU5BQkxFIGZpZWxkLgorLy8gMDogQWN0aXZlIGxvdy4KKy8vIDE6IEFjdGl2ZSBoaWdoLgorI2RlZmluZSBDQ0ZHX0JMX0NPTkZJR19CTF9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENDRkdfQkxfQ09ORklHX0JMX0xFVkVMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ0NGR19CTF9DT05GSUdfQkxfTEVWRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDQ0ZHX0JMX0NPTkZJR19CTF9MRVZFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIEJMX1BJTl9OVU1CRVIKKy8vCisvLyBESU8gbnVtYmVyIHRoYXQgaXMgbGV2ZWwgY2hlY2tlZCBpZiB0aGUgYm9vdCBsb2FkZXIgYmFja2Rvb3IgaXMgZW5hYmxlZCBieQorLy8gdGhlIEJMX0VOQUJMRSBmaWVsZC4KKyNkZWZpbmUgQ0NGR19CTF9DT05GSUdfQkxfUElOX05VTUJFUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0JMX0NPTkZJR19CTF9QSU5fTlVNQkVSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENDRkdfQkxfQ09ORklHX0JMX1BJTl9OVU1CRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gQkxfRU5BQkxFCisvLworLy8gRW5hYmxlcyB0aGUgYm9vdCBsb2FkZXIgYmFja2Rvb3IuCisvLyAweEM1OiBCb290IGxvYWRlciBiYWNrZG9vciBpcyBlbmFibGVkLgorLy8gQW55IG90aGVyIHZhbHVlOiBCb290IGxvYWRlciBiYWNrZG9vciBpcyBkaXNhYmxlZC4KKy8vCisvLyBOT1RFISBCb290IGxvYWRlciBtdXN0IGJlIGVuYWJsZWQgKHNlZSBCT09UTE9BREVSX0VOQUJMRSkgaWYgYm9vdCBsb2FkZXIKKy8vIGJhY2tkb29yIGlzIGVuYWJsZWQuCisjZGVmaW5lIENDRkdfQkxfQ09ORklHX0JMX0VOQUJMRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19CTF9DT05GSUdfQkxfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDQ0ZHX0JMX0NPTkZJR19CTF9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX0VSQVNFX0NPTkYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs4XSBDSElQX0VSQVNFX0RJU19OCisvLworLy8gQ2hpcCBlcmFzZS4KKy8vIFRoaXMgYml0IGNvbnRyb2xzIGlmIGEgY2hpcCBlcmFzZSByZXF1ZXN0ZWQgdGhyb3VnaCB0aGUgSlRBRyBXVUMgVEFQIHdpbGwgYmUKKy8vIGlnbm9yZWQgaW4gYSBmb2xsb3dpbmcgYm9vdCBjYXVzZWQgYnkgYSByZXNldCBvZiB0aGUgTUNVIFZELgorLy8gQSBzdWNjZXNzZnVsIGNoaXAgZXJhc2Ugb3BlcmF0aW9uIHdpbGwgZm9yY2UgdGhlIGNvbnRlbnQgb2YgdGhlIGZsYXNoIG1haW4KKy8vIGJhbmsgYmFjayB0byB0aGUgc3RhdGUgYXMgaXQgd2FzIHdoZW4gZGVsaXZlcmVkIGJ5IFRJLgorLy8gMDogRGlzYWJsZS4gQW55IGNoaXAgZXJhc2UgcmVxdWVzdCBkZXRlY3RlZCBkdXJpbmcgYm9vdCB3aWxsIGJlIGlnbm9yZWQuCisvLyAxOiBFbmFibGUuIEFueSBjaGlwIGVyYXNlIHJlcXVlc3QgZGV0ZWN0ZWQgZHVyaW5nIGJvb3Qgd2lsbCBiZSBwZXJmb3JtZWQgYnkKKy8vIHRoZSBib290IEZXLgorI2RlZmluZSBDQ0ZHX0VSQVNFX0NPTkZfQ0hJUF9FUkFTRV9ESVNfTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENDRkdfRVJBU0VfQ09ORl9DSElQX0VSQVNFX0RJU19OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19FUkFTRV9DT05GX0NISVBfRVJBU0VfRElTX05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDQ0ZHX0VSQVNFX0NPTkZfQ0hJUF9FUkFTRV9ESVNfTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzBdIEJBTktfRVJBU0VfRElTX04KKy8vCisvLyBCYW5rIGVyYXNlLgorLy8gVGhpcyBiaXQgY29udHJvbHMgaWYgdGhlIFJPTSBzZXJpYWwgYm9vdCBsb2FkZXIgd2lsbCBhY2NlcHQgYSByZWNlaXZlZCBCYW5rCisvLyBFcmFzZSBjb21tYW5kIChDT01NQU5EX0JBTktfRVJBU0UpLgorLy8gQSBzdWNjZXNzZnVsIEJhbmsgRXJhc2Ugb3BlcmF0aW9uIHdpbGwgZXJhc2UgYWxsIG1haW4gYmFuayBzZWN0b3JzIG5vdAorLy8gcHJvdGVjdGVkIGJ5IHdyaXRlIHByb3RlY3QgY29uZmlndXJhdGlvbiBiaXRzIGluIENDRkcuCisvLyAwOiBEaXNhYmxlIHRoZSBib290IGxvYWRlciBiYW5rIGVyYXNlIGZ1bmN0aW9uLgorLy8gMTogRW5hYmxlIHRoZSBib290IGxvYWRlciBiYW5rIGVyYXNlIGZ1bmN0aW9uLgorI2RlZmluZSBDQ0ZHX0VSQVNFX0NPTkZfQkFOS19FUkFTRV9ESVNfTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENDRkdfRVJBU0VfQ09ORl9CQU5LX0VSQVNFX0RJU19OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ0NGR19FUkFTRV9DT05GX0JBTktfRVJBU0VfRElTX05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDQ0ZHX0VSQVNFX0NPTkZfQkFOS19FUkFTRV9ESVNfTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX0NDRkdfVElfT1BUSU9OUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFRJX0ZBX0VOQUJMRQorLy8KKy8vIFRJIEZhaWx1cmUgQW5hbHlzaXMuCisvLyAweEM1OiBFbmFibGUgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdW5sb2NraW5nIHRoZSBUSSBGQSAoVEkgRmFpbHVyZSBBbmFseXNpcykKKy8vIG9wdGlvbiB3aXRoIHRoZSB1bmxvY2sgY29kZS4KKy8vIEFsbCBvdGhlciB2YWx1ZXM6IERpc2FibGUgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdW5sb2NraW5nIHRoZSBUSSBGQSBvcHRpb24KKy8vIHdpdGggdGhlIHVubG9jayBjb2RlLgorI2RlZmluZSBDQ0ZHX0NDRkdfVElfT1BUSU9OU19USV9GQV9FTkFCTEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfQ0NGR19USV9PUFRJT05TX1RJX0ZBX0VOQUJMRV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ0NGR19DQ0ZHX1RJX09QVElPTlNfVElfRkFfRU5BQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19DQ0ZHX1RBUF9EQVBfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjM6MTZdIENQVV9EQVBfRU5BQkxFCisvLworLy8gRW5hYmxlIENQVSBEQVAuCisvLyAweEM1OiBNYWluIENQVSBEQVAgYWNjZXNzIGlzIGVuYWJsZWQgZHVyaW5nIHBvd2VyLXVwL3N5c3RlbS1yZXNldCBieSBST00KKy8vIGJvb3QgRlcuCisvLyBBbnkgb3RoZXIgdmFsdWU6IE1haW4gQ1BVIERBUCBhY2Nlc3Mgd2lsbCByZW1haW4gZGlzYWJsZWQgb3V0IG9mCisvLyBwb3dlci11cC9zeXN0ZW0tcmVzZXQuCisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzBfQ1BVX0RBUF9FTkFCTEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMF9DUFVfREFQX0VOQUJMRV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8wX0NQVV9EQVBfRU5BQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFBSQ01fVEFQX0VOQUJMRQorLy8KKy8vIEVuYWJsZSBQUkNNIFRBUC4KKy8vIDB4QzU6IFBSQ00gVEFQIGFjY2VzcyBpcyBlbmFibGVkIGR1cmluZyBwb3dlci11cC9zeXN0ZW0tcmVzZXQgYnkgUk9NIGJvb3QgRlcKKy8vIGlmIGVuYWJsZWQgYnkgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIHZhbHVlIGluIEZDRkcxIGRlZmluZWQgYnkgVEkuCisvLyBBbnkgb3RoZXIgdmFsdWU6IFBSQ00gVEFQIGFjY2VzcyB3aWxsIHJlbWFpbiBkaXNhYmxlZCBvdXQgb2YKKy8vIHBvd2VyLXVwL3N5c3RlbS1yZXNldC4KKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMF9QUkNNX1RBUF9FTkFCTEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8wX1BSQ01fVEFQX0VOQUJMRV9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzBfUFJDTV9UQVBfRU5BQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gVEVTVF9UQVBfRU5BQkxFCisvLworLy8gRW5hYmxlIFRlc3QgVEFQLgorLy8gMHhDNTogVEVTVCBUQVAgYWNjZXNzIGlzIGVuYWJsZWQgZHVyaW5nIHBvd2VyLXVwL3N5c3RlbS1yZXNldCBieSBST00gYm9vdCBGVworLy8gaWYgZW5hYmxlZCBieSBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gdmFsdWUgaW4gRkNGRzEgZGVmaW5lZCBieSBUSS4KKy8vIEFueSBvdGhlciB2YWx1ZTogVEVTVCBUQVAgYWNjZXNzIHdpbGwgcmVtYWluIGRpc2FibGVkIG91dCBvZgorLy8gcG93ZXItdXAvc3lzdGVtLXJlc2V0LgorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8wX1RFU1RfVEFQX0VOQUJMRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzBfVEVTVF9UQVBfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMF9URVNUX1RBUF9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19DQ0ZHX1RBUF9EQVBfMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjM6MTZdIFBCSVNUMl9UQVBfRU5BQkxFCisvLworLy8gRW5hYmxlIFBCSVNUMiBUQVAuCisvLyAweEM1OiBQQklTVDIgVEFQIGFjY2VzcyBpcyBlbmFibGVkIGR1cmluZyBwb3dlci11cC9zeXN0ZW0tcmVzZXQgYnkgUk9NIGJvb3QKKy8vIEZXIGlmIGVuYWJsZWQgYnkgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIHZhbHVlIGluIEZDRkcxIGRlZmluZWQgYnkgVEkuCisvLyBBbnkgb3RoZXIgdmFsdWU6IFBCSVNUMiBUQVAgYWNjZXNzIHdpbGwgcmVtYWluIGRpc2FibGVkIG91dCBvZgorLy8gcG93ZXItdXAvc3lzdGVtLXJlc2V0LgorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMl9UQVBfRU5BQkxFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QyX1RBUF9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMV9QQklTVDJfVEFQX0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBQQklTVDFfVEFQX0VOQUJMRQorLy8KKy8vIEVuYWJsZSBQQklTVDEgVEFQLgorLy8gMHhDNTogUEJJU1QxIFRBUCBhY2Nlc3MgaXMgZW5hYmxlZCBkdXJpbmcgcG93ZXItdXAvc3lzdGVtLXJlc2V0IGJ5IFJPTSBib290CisvLyBGVyBpZiBlbmFibGVkIGJ5IGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YWx1ZSBpbiBGQ0ZHMSBkZWZpbmVkIGJ5IFRJLgorLy8gQW55IG90aGVyIHZhbHVlOiBQQklTVDEgVEFQIGFjY2VzcyB3aWxsIHJlbWFpbiBkaXNhYmxlZCBvdXQgb2YKKy8vIHBvd2VyLXVwL3N5c3RlbS1yZXNldC4KKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMV9QQklTVDFfVEFQX0VOQUJMRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMV9UQVBfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QxX1RBUF9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gV1VDX1RBUF9FTkFCTEUKKy8vCisvLyBFbmFibGUgV1VDIFRBUAorLy8gMHhDNTogV1VDIFRBUCBhY2Nlc3MgaXMgZW5hYmxlZCBkdXJpbmcgcG93ZXItdXAvc3lzdGVtLXJlc2V0IGJ5IFJPTSBib290IEZXCisvLyBpZiBlbmFibGVkIGJ5IGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YWx1ZSBpbiBGQ0ZHMSBkZWZpbmVkIGJ5IFRJLgorLy8gQW55IG90aGVyIHZhbHVlOiBXVUMgVEFQIGFjY2VzcyB3aWxsIHJlbWFpbiBkaXNhYmxlZCBvdXQgb2YKKy8vIHBvd2VyLXVwL3N5c3RlbS1yZXNldC4KKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMV9XVUNfVEFQX0VOQUJMRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8xX1dVQ19UQVBfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzFfV1VDX1RBUF9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fSU1BR0VfVkFMSURfQ09ORgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIElNQUdFX1ZBTElECisvLworLy8gVGhpcyBmaWVsZCBtdXN0IGhhdmUgYSB2YWx1ZSBvZiAweDAwMDAwMDAwIGluIG9yZGVyIGZvciBlbmFibGluZyB0aGUgYm9vdAorLy8gc2VxdWVuY2UgdG8gdHJhbnNmZXIgY29udHJvbCB0byBhIGZsYXNoIGltYWdlLgorLy8gQSBub24temVybyB2YWx1ZSBmb3JjZXMgdGhlIGJvb3Qgc2VxdWVuY2UgdG8gY2FsbCB0aGUgYm9vdCBsb2FkZXIuCisjZGVmaW5lIENDRkdfSU1BR0VfVkFMSURfQ09ORl9JTUFHRV9WQUxJRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ0NGR19JTUFHRV9WQUxJRF9DT05GX0lNQUdFX1ZBTElEX00gICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDQ0ZHX0lNQUdFX1ZBTElEX0NPTkZfSU1BR0VfVkFMSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX0NDRkdfUFJPVF8zMV8wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gV1JUX1BST1RfU0VDXzMxCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18zMSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMzFfTSAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18zMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIFdSVF9QUk9UX1NFQ18zMAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMzAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18zMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzMwX00gICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBXUlRfUFJPVF9TRUNfMjkKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI5ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yOV9NICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gV1JUX1BST1RfU0VDXzI4CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yOCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjhfTSAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIFdSVF9QUk9UX1NFQ18yNworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI3X00gICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogICAgWzI2XSBXUlRfUFJPVF9TRUNfMjYKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI2ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yNl9NICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gV1JUX1BST1RfU0VDXzI1CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yNSAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjVfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFdSVF9QUk9UX1NFQ18yNAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI0X00gICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIzXSBXUlRfUFJPVF9TRUNfMjMKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIzICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yM19NICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gV1JUX1BST1RfU0VDXzIyCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjJfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIFdSVF9QUk9UX1NFQ18yMQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIxX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBXUlRfUFJPVF9TRUNfMjAKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yMF9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gV1JUX1BST1RfU0VDXzE5CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xOSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTlfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIFdSVF9QUk9UX1NFQ18xOAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE4X00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBXUlRfUFJPVF9TRUNfMTcKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE3ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xN19NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gV1JUX1BST1RfU0VDXzE2CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xNiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTZfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIFdSVF9QUk9UX1NFQ18xNQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE1X00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBXUlRfUFJPVF9TRUNfMTQKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE0ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xNF9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gV1JUX1BST1RfU0VDXzEzCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTNfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIFdSVF9QUk9UX1NFQ18xMgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzEyX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBXUlRfUFJPVF9TRUNfMTEKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzExICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xMV9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gV1JUX1BST1RfU0VDXzEwCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTBfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFdSVF9QUk9UX1NFQ185CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ185ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfOV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ185X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFdSVF9QUk9UX1NFQ184CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ184ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfOF9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ184X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIFdSVF9QUk9UX1NFQ183CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ183ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfN19NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ183X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFdSVF9QUk9UX1NFQ182CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ182ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfNl9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ182X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFdSVF9QUk9UX1NFQ181CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ181ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfNV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ181X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFdSVF9QUk9UX1NFQ180CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ180ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfNF9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ180X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFdSVF9QUk9UX1NFQ18zCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18zICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfM19NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18zX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFdSVF9QUk9UX1NFQ18yCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMl9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFdSVF9QUk9UX1NFQ18xCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFdSVF9QUk9UX1NFQ18wCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18wICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMF9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX0NDRkdfUFJPVF82M18zMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIFdSVF9QUk9UX1NFQ182MworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzYzICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ182M19NICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzYzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBXUlRfUFJPVF9TRUNfNjIKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ182MiAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzYyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNjJfTSAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ182Ml9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gV1JUX1BST1RfU0VDXzYxCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNjEgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ182MV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzYxX00gICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIFdSVF9QUk9UX1NFQ182MAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzYwICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ182MF9NICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzYwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBXUlRfUFJPVF9TRUNfNTkKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181OSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTlfTSAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181OV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gV1JUX1BST1RfU0VDXzU4CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTggICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181OF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU4X00gICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIFdSVF9QUk9UX1NFQ181NworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU3ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181N19NICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBXUlRfUFJPVF9TRUNfNTYKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181NiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTZfTSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181Nl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gV1JUX1BST1RfU0VDXzU1CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTUgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181NV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU1X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIFdSVF9QUk9UX1NFQ181NAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU0ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181NF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBXUlRfUFJPVF9TRUNfNTMKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181MyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzUzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTNfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181M19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gV1JUX1BST1RfU0VDXzUyCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181Ml9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzUyX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIFdSVF9QUk9UX1NFQ181MQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzUxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181MV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzUxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBXUlRfUFJPVF9TRUNfNTAKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181MCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzUwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTBfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181MF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gV1JUX1BST1RfU0VDXzQ5CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180OV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ5X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIFdSVF9QUk9UX1NFQ180OAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ4ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180OF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBXUlRfUFJPVF9TRUNfNDcKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180NyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDdfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180N19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gV1JUX1BST1RfU0VDXzQ2CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDYgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180Nl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ2X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIFdSVF9QUk9UX1NFQ180NQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ1ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180NV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBXUlRfUFJPVF9TRUNfNDQKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180NCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDRfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180NF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gV1JUX1BST1RfU0VDXzQzCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180M19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQzX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIFdSVF9QUk9UX1NFQ180MgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQyICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180Ml9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBXUlRfUFJPVF9TRUNfNDEKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180MSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDFfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180MV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gV1JUX1BST1RfU0VDXzQwCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180MF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQwX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIFdSVF9QUk9UX1NFQ18zOQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM5ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zOV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBXUlRfUFJPVF9TRUNfMzgKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zOCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzhfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gV1JUX1BST1RfU0VDXzM3CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM3X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFdSVF9QUk9UX1NFQ18zNgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM2ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zNl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBXUlRfUFJPVF9TRUNfMzUKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zNSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzVfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gV1JUX1BST1RfU0VDXzM0CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM0X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFdSVF9QUk9UX1NFQ18zMworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzMzICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zM19NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzMzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBXUlRfUFJPVF9TRUNfMzIKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzMyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzJfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fQ0NGR19QUk9UXzk1XzY0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gV1JUX1BST1RfU0VDXzk1CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTUgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185NV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzk1X00gICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIFdSVF9QUk9UX1NFQ185NAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzk0ICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185NF9NICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzk0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBXUlRfUFJPVF9TRUNfOTMKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185MyAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzkzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTNfTSAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185M19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gV1JUX1BST1RfU0VDXzkyCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTIgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185Ml9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzkyX00gICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIFdSVF9QUk9UX1NFQ185MQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzkxICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185MV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzkxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogICAgWzI2XSBXUlRfUFJPVF9TRUNfOTAKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185MCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzkwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTBfTSAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185MF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gV1JUX1BST1RfU0VDXzg5CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODkgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184OV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg5X00gICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFdSVF9QUk9UX1NFQ184OAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg4ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184OF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIzXSBXUlRfUFJPVF9TRUNfODcKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184NyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODdfTSAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184N19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gV1JUX1BST1RfU0VDXzg2CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODYgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184Nl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg2X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIFdSVF9QUk9UX1NFQ184NQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg1ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184NV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBXUlRfUFJPVF9TRUNfODQKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184NCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODRfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184NF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gV1JUX1BST1RfU0VDXzgzCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184M19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzgzX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIFdSVF9QUk9UX1NFQ184MgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzgyICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184Ml9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzgyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBXUlRfUFJPVF9TRUNfODEKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184MSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzgxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODFfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184MV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gV1JUX1BST1RfU0VDXzgwCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184MF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzgwX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIFdSVF9QUk9UX1NFQ183OQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc5ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183OV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBXUlRfUFJPVF9TRUNfNzgKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183OCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzhfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183OF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gV1JUX1BST1RfU0VDXzc3CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183N19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc3X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIFdSVF9QUk9UX1NFQ183NgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc2ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183Nl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBXUlRfUFJPVF9TRUNfNzUKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183NSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzVfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183NV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gV1JUX1BST1RfU0VDXzc0CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183NF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc0X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFdSVF9QUk9UX1NFQ183MworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzczICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183M19NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzczX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBXUlRfUFJPVF9TRUNfNzIKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183MiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzcyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzJfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183Ml9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gV1JUX1BST1RfU0VDXzcxCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183MV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzcxX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFdSVF9QUk9UX1NFQ183MAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzcwICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183MF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzcwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBXUlRfUFJPVF9TRUNfNjkKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182OSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjlfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182OV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gV1JUX1BST1RfU0VDXzY4CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjggICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182OF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY4X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFdSVF9QUk9UX1NFQ182NworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY3ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182N19NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBXUlRfUFJPVF9TRUNfNjYKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182NiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjZfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182Nl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gV1JUX1BST1RfU0VDXzY1CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182NV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY1X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFdSVF9QUk9UX1NFQ182NAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY0ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182NF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19DQ0ZHX1BST1RfMTI3Xzk2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gV1JUX1BST1RfU0VDXzEyNworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjcgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTI3X00gICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBXUlRfUFJPVF9TRUNfMTI2CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyNiAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTI2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjZfTSAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIFdSVF9QUk9UX1NFQ18xMjUKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTI1ICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyNV9NICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gV1JUX1BST1RfU0VDXzEyNAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjQgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTI0X00gICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBXUlRfUFJPVF9TRUNfMTIzCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyMyAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjNfTSAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIFdSVF9QUk9UX1NFQ18xMjIKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTIyICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyMl9NICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gV1JUX1BST1RfU0VDXzEyMQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjEgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTIxX00gICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBXUlRfUFJPVF9TRUNfMTIwCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyMCAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjBfTSAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIFdSVF9QUk9UX1NFQ18xMTkKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE5ICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExOV9NICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gV1JUX1BST1RfU0VDXzExOAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTggICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE4X00gICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBXUlRfUFJPVF9TRUNfMTE3CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExNyAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTdfTSAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIFdSVF9QUk9UX1NFQ18xMTYKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE2ICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExNl9NICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gV1JUX1BST1RfU0VDXzExNQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTUgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE1X00gICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBXUlRfUFJPVF9TRUNfMTE0CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExNCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTRfTSAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIFdSVF9QUk9UX1NFQ18xMTMKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTEzICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExM19NICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gV1JUX1BST1RfU0VDXzExMgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTEyX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBXUlRfUFJPVF9TRUNfMTExCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExMSAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTFfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIFdSVF9QUk9UX1NFQ18xMTAKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTEwICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExMF9NICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gV1JUX1BST1RfU0VDXzEwOQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA5X00gICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBXUlRfUFJPVF9TRUNfMTA4CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwOCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDhfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIFdSVF9QUk9UX1NFQ18xMDcKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA3ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwN19NICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gV1JUX1BST1RfU0VDXzEwNgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA2X00gICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBXUlRfUFJPVF9TRUNfMTA1CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwNSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDVfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFdSVF9QUk9UX1NFQ18xMDQKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA0ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwNF9NICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gV1JUX1BST1RfU0VDXzEwMworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTAzX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBXUlRfUFJPVF9TRUNfMTAyCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwMiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTAyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDJfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFdSVF9QUk9UX1NFQ18xMDEKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTAxICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwMV9NICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTAxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gV1JUX1BST1RfU0VDXzEwMAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTAwX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBXUlRfUFJPVF9TRUNfOTkKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfOTkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ185OV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzk5X00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfOTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gV1JUX1BST1RfU0VDXzk4CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzk4ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfOThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ185OF9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzk4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFdSVF9QUk9UX1NFQ185NworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ185NyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzk3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfOTdfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ185N19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBXUlRfUFJPVF9TRUNfOTYKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfOTYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ185Nl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzk2X00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfOTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19DQ0ZHX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NjZmdfc2ltcGxlX3N0cnVjdC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY2NmZ19zaW1wbGVfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlMzk0OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NjZmdfc2ltcGxlX3N0cnVjdC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19jY2ZnX3NpbXBsZV9zdHJ1Y3RfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQ0NGR19TSU1QTEVfU1RSVUNUX0hfXworI2RlZmluZSBfX0hXX0NDRkdfU0lNUExFX1NUUlVDVF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEN1c3RvbWVyIGNvbmZpZ3VyYXRpb24gKGNjZmcpIHR5cGVkZWYuCisvLyBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBzdHJ1Y3QgaXMgcmVxdWlyZWQgYnkgZGV2aWNlIFJPTSBib290IGNvZGUKKy8vICBhbmQgbXVzdCBiZSBwbGFjZWQgYXQgdGhlIGVuZCBvZiBmbGFzaC4gRG8gbm90IG1vZGlmeSB0aGlzIHN0cnVjdCEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit0eXBlZGVmIHN0cnVjdAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgTWFwcGVkIHRvIGFkZHJlc3MKKyAgICB1aW50MzJfdCAgIENDRkdfRVhUX0xGX0NMSyAgICAgICAgICAgICAgIDsgLy8gMHg1MDAwM0ZBOAorICAgIHVpbnQzMl90ICAgQ0NGR19NT0RFX0NPTkZfMSAgICAgICAgICAgICAgOyAvLyAweDUwMDAzRkFDCisgICAgdWludDMyX3QgICBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHUyAgICAgICA7IC8vIDB4NTAwMDNGQjAKKyAgICB1aW50MzJfdCAgIENDRkdfTU9ERV9DT05GICAgICAgICAgICAgICAgIDsgLy8gMHg1MDAwM0ZCNAorICAgIHVpbnQzMl90ICAgQ0NGR19WT0xUX0xPQURfMCAgICAgICAgICAgICAgOyAvLyAweDUwMDAzRkI4CisgICAgdWludDMyX3QgICBDQ0ZHX1ZPTFRfTE9BRF8xICAgICAgICAgICAgICA7IC8vIDB4NTAwMDNGQkMKKyAgICB1aW50MzJfdCAgIENDRkdfUlRDX09GRlNFVCAgICAgICAgICAgICAgIDsgLy8gMHg1MDAwM0ZDMAorICAgIHVpbnQzMl90ICAgQ0NGR19GUkVRX09GRlNFVCAgICAgICAgICAgICAgOyAvLyAweDUwMDAzRkM0CisgICAgdWludDMyX3QgICBDQ0ZHX0lFRUVfTUFDXzAgICAgICAgICAgICAgICA7IC8vIDB4NTAwMDNGQzgKKyAgICB1aW50MzJfdCAgIENDRkdfSUVFRV9NQUNfMSAgICAgICAgICAgICAgIDsgLy8gMHg1MDAwM0ZDQworICAgIHVpbnQzMl90ICAgQ0NGR19JRUVFX0JMRV8wICAgICAgICAgICAgICAgOyAvLyAweDUwMDAzRkQwCisgICAgdWludDMyX3QgICBDQ0ZHX0lFRUVfQkxFXzEgICAgICAgICAgICAgICA7IC8vIDB4NTAwMDNGRDQKKyAgICB1aW50MzJfdCAgIENDRkdfQkxfQ09ORklHICAgICAgICAgICAgICAgIDsgLy8gMHg1MDAwM0ZEOAorICAgIHVpbnQzMl90ICAgQ0NGR19FUkFTRV9DT05GICAgICAgICAgICAgICAgOyAvLyAweDUwMDAzRkRDCisgICAgdWludDMyX3QgICBDQ0ZHX0NDRkdfVElfT1BUSU9OUyAgICAgICAgICA7IC8vIDB4NTAwMDNGRTAKKyAgICB1aW50MzJfdCAgIENDRkdfQ0NGR19UQVBfREFQXzAgICAgICAgICAgIDsgLy8gMHg1MDAwM0ZFNAorICAgIHVpbnQzMl90ICAgQ0NGR19DQ0ZHX1RBUF9EQVBfMSAgICAgICAgICAgOyAvLyAweDUwMDAzRkU4CisgICAgdWludDMyX3QgICBDQ0ZHX0lNQUdFX1ZBTElEX0NPTkYgICAgICAgICA7IC8vIDB4NTAwMDNGRUMKKyAgICB1aW50MzJfdCAgIENDRkdfQ0NGR19QUk9UXzMxXzAgICAgICAgICAgIDsgLy8gMHg1MDAwM0ZGMAorICAgIHVpbnQzMl90ICAgQ0NGR19DQ0ZHX1BST1RfNjNfMzIgICAgICAgICAgOyAvLyAweDUwMDAzRkY0CisgICAgdWludDMyX3QgICBDQ0ZHX0NDRkdfUFJPVF85NV82NCAgICAgICAgICA7IC8vIDB4NTAwMDNGRjgKKyAgICB1aW50MzJfdCAgIENDRkdfQ0NGR19QUk9UXzEyN185NiAgICAgICAgIDsgLy8gMHg1MDAwM0ZGQworfSBjY2ZnX3Q7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmUgdGhlIGV4dGVybiBjY2ZnIHN0cnVjdHVyZSAoX19jY2ZnKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBjb25zdCBjY2ZnX3QgX19jY2ZnOworCisKKyNlbmRpZiAvLyBfX0hXX0NDRkdfU0lNUExFX1NUUlVDVF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jaGlwX2RlZi5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY2hpcF9kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWE5ZGZmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY2hpcF9kZWYuaApAQCAtMCwwICsxLDE5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2NoaXBfZGVmLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA1LTEyIDE3OjQxOjE5ICswMjAwIChUdWUsIDEyIE1heSAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQzNDkxCisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBmb3IgZGV2aWNlIHByb3BlcnRpZXMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIGNvbmZpZ19hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0hXX0NISVBfREVGX0hfXworI2RlZmluZSBfX0hXX0NISVBfREVGX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmUgQ0NfQ0hJUF9JRCBjb2RlIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MgZGVmaW5lZCBhdCB0aGUgYm90dG9tOgorLy8gQ0NfR0VUX0NISVBfRkFNSUxZL0RFVklDRS9QQUNLQUdFL0hXUkVWCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogQ0MyNjIwRjEyOCAqLworI2lmICAgZGVmaW5lZChDQzI2MjBGMTI4UkdaX1IyMCkgfHwgZGVmaW5lZChDQzI2MjBGMTI4UkdaX1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjIwMDcyMAorI2VsaWYgZGVmaW5lZChDQzI2MjBGMTI4UkhCX1IyMCkgfHwgZGVmaW5lZChDQzI2MjBGMTI4UkhCX1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjIwMDUyMAorI2VsaWYgZGVmaW5lZChDQzI2MjBGMTI4UlNNX1IyMCkgfHwgZGVmaW5lZChDQzI2MjBGMTI4UlNNX1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjIwMDQyMAorI2VsaWYgZGVmaW5lZChDQzI2MjBGMTI4X1IyMCkgICAgfHwgZGVmaW5lZChDQzI2MjBGMTI4X1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjIwMDAyMAorI2VsaWYgZGVmaW5lZChDQzI2MjBGMTI4UkdaX1IyMikgfHwgZGVmaW5lZChDQzI2MjBGMTI4UkdaKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MjAwNzIyCisjZWxpZiBkZWZpbmVkKENDMjYyMEYxMjhSSEJfUjIyKSB8fCBkZWZpbmVkKENDMjYyMEYxMjhSSEIpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjYyMDA1MjIKKyNlbGlmIGRlZmluZWQoQ0MyNjIwRjEyOFJTTV9SMjIpIHx8IGRlZmluZWQoQ0MyNjIwRjEyOFJTTSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjIwMDQyMgorI2VsaWYgZGVmaW5lZChDQzI2MjBGMTI4X1IyMikgICAgfHwgZGVmaW5lZChDQzI2MjBGMTI4KQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MjAwMDIyCisvKiBDQzI2MzBGMTI4ICovCisjZWxpZiBkZWZpbmVkKENDMjYzMEYxMjhSR1pfUjIwKSB8fCBkZWZpbmVkKENDMjYzMEYxMjhSR1pfUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MzAwNzIwCisjZWxpZiBkZWZpbmVkKENDMjYzMEYxMjhSSEJfUjIwKSB8fCBkZWZpbmVkKENDMjYzMEYxMjhSSEJfUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MzAwNTIwCisjZWxpZiBkZWZpbmVkKENDMjYzMEYxMjhSU01fUjIwKSB8fCBkZWZpbmVkKENDMjYzMEYxMjhSU01fUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MzAwNDIwCisjZWxpZiBkZWZpbmVkKENDMjYzMEYxMjhfUjIwKSAgICB8fCBkZWZpbmVkKENDMjYzMEYxMjhfUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MzAwMDIwCisjZWxpZiBkZWZpbmVkKENDMjYzMEYxMjhSR1pfUjIyKSB8fCBkZWZpbmVkKENDMjYzMEYxMjhSR1opCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjYzMDA3MjIKKyNlbGlmIGRlZmluZWQoQ0MyNjMwRjEyOFJIQl9SMjIpIHx8IGRlZmluZWQoQ0MyNjMwRjEyOFJIQikKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjMwMDUyMgorI2VsaWYgZGVmaW5lZChDQzI2MzBGMTI4UlNNX1IyMikgfHwgZGVmaW5lZChDQzI2MzBGMTI4UlNNKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MzAwNDIyCisjZWxpZiBkZWZpbmVkKENDMjYzMEYxMjhfUjIyKSAgICB8fCBkZWZpbmVkKENDMjYzMEYxMjgpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjYzMDAwMjIKKy8qIENDMjY0MEYxMjggKi8KKyNlbGlmIGRlZmluZWQoQ0MyNjQwRjEyOFJHWl9SMjApIHx8IGRlZmluZWQoQ0MyNjQwRjEyOFJHWl9SMjEpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjY0MDA3MjAKKyNlbGlmIGRlZmluZWQoQ0MyNjQwRjEyOFJIQl9SMjApIHx8IGRlZmluZWQoQ0MyNjQwRjEyOFJIQl9SMjEpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjY0MDA1MjAKKyNlbGlmIGRlZmluZWQoQ0MyNjQwRjEyOFJTTV9SMjApIHx8IGRlZmluZWQoQ0MyNjQwRjEyOFJTTV9SMjEpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjY0MDA0MjAKKyNlbGlmIGRlZmluZWQoQ0MyNjQwRjEyOF9SMjApICAgIHx8IGRlZmluZWQoQ0MyNjQwRjEyOF9SMjEpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjY0MDAwMjAKKyNlbGlmIGRlZmluZWQoQ0MyNjQwRjEyOFJHWl9SMjIpIHx8IGRlZmluZWQoQ0MyNjQwRjEyOFJHWikKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjQwMDcyMgorI2VsaWYgZGVmaW5lZChDQzI2NDBGMTI4UkhCX1IyMikgfHwgZGVmaW5lZChDQzI2NDBGMTI4UkhCKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2NDAwNTIyCisjZWxpZiBkZWZpbmVkKENDMjY0MEYxMjhSU01fUjIyKSB8fCBkZWZpbmVkKENDMjY0MEYxMjhSU00pCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjY0MDA0MjIKKyNlbGlmIGRlZmluZWQoQ0MyNjQwRjEyOF9SMjIpICAgIHx8IGRlZmluZWQoQ0MyNjQwRjEyOCkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjQwMDAyMgorLyogQ0MyNjUwRjEyOCAqLworI2VsaWYgZGVmaW5lZChDQzI2NTBGMTI4UkdaX1IyMCkgfHwgZGVmaW5lZChDQzI2NTBGMTI4UkdaX1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjUwMDcyMAorI2VsaWYgZGVmaW5lZChDQzI2NTBGMTI4UkhCX1IyMCkgfHwgZGVmaW5lZChDQzI2NTBGMTI4UkhCX1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjUwMDUyMAorI2VsaWYgZGVmaW5lZChDQzI2NTBGMTI4UlNNX1IyMCkgfHwgZGVmaW5lZChDQzI2NTBGMTI4UlNNX1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjUwMDQyMAorI2VsaWYgZGVmaW5lZChDQzI2NTBGMTI4X1IyMCkgICAgfHwgZGVmaW5lZChDQzI2NTBGMTI4X1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjUwMDAyMAorI2VsaWYgZGVmaW5lZChDQzI2NTBGMTI4UkdaX1IyMikgfHwgZGVmaW5lZChDQzI2NTBGMTI4UkdaKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2NTAwNzIyCisjZWxpZiBkZWZpbmVkKENDMjY1MEYxMjhSSEJfUjIyKSB8fCBkZWZpbmVkKENDMjY1MEYxMjhSSEIpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjY1MDA1MjIKKyNlbGlmIGRlZmluZWQoQ0MyNjUwRjEyOFJTTV9SMjIpIHx8IGRlZmluZWQoQ0MyNjUwRjEyOFJTTSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjUwMDQyMgorI2VsaWYgZGVmaW5lZChDQzI2NTBGMTI4X1IyMikgICAgfHwgZGVmaW5lZChDQzI2NTBGMTI4KQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2NTAwMDIyCisvKiBDQzI2NTBMMTI4IChPVFApICovCisjZWxpZiBkZWZpbmVkKENDMjY1MEwxMjgpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjY1MDE3MTAKKy8qIENDMTMxMEYxMjggKi8KKyNlbGlmIGRlZmluZWQoQ0MxMzEwRjEyOFJHWl9SMjApIHx8IGRlZmluZWQoQ0MxMzEwRjEyOFJHWikKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgxMzEwMDcyMAorI2VsaWYgZGVmaW5lZChDQzEzMTBGMTI4UkhCX1IyMCkgfHwgZGVmaW5lZChDQzEzMTBGMTI4UkhCKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDEzMTAwNTIwCisjZWxpZiBkZWZpbmVkKENDMTMxMEYxMjhSU01fUjIwKSB8fCBkZWZpbmVkKENDMTMxMEYxMjhSU00pCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MTMxMDA0MjAKKyNlbGlmIGRlZmluZWQoQ0MxMzEwRjEyOF9SMjApICAgIHx8IGRlZmluZWQoQ0MxMzEwRjEyOCkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgxMzEwMDAyMAorLyogQ0MxMzUwRjEyOCAqLworI2VsaWYgZGVmaW5lZChDQzEzNTBGMTI4UkdaX1IyMCkgfHwgZGVmaW5lZChDQzEzNTBGMTI4UkdaKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDEzNTAwNzIwCisjZWxpZiBkZWZpbmVkKENDMTM1MEYxMjhSSEJfUjIwKSB8fCBkZWZpbmVkKENDMTM1MEYxMjhSSEIpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MTM1MDA1MjAKKyNlbGlmIGRlZmluZWQoQ0MxMzUwRjEyOFJTTV9SMjApIHx8IGRlZmluZWQoQ0MxMzUwRjEyOFJTTSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgxMzUwMDQyMAorI2VsaWYgZGVmaW5lZChDQzEzNTBGMTI4X1IyMCkgICAgfHwgZGVmaW5lZChDQzEzNTBGMTI4KQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDEzNTAwMDIwCisjZW5kaWYKKworI2RlZmluZSBDQ19HRVRfQ0hJUF9GQU1JTFkgMHgyNgorI2RlZmluZSBDQ19HRVRfQ0hJUF9PUFRJT04gMHgwCisjZGVmaW5lIENDX0dFVF9DSElQX0hXUkVWIDB4MjIKKworI2lmZGVmIENDX0NISVBfSUQKKyAgICAvKiBEZWZpbmUgY2hpcCBwYWNrYWdlIG9ubHkgaWYgc3BlY2lmaWVkICovCisgICAgI2lmIChDQ19DSElQX0lEICYgMHgwMDAwMEYwMCkgIT0gMAorICAgICAgICAjZGVmaW5lIENDX0dFVF9DSElQX1BBQ0tBR0UgKCgoQ0NfQ0hJUF9JRCkgJiAweDAwMDAwRjAwKSA+PiA4KQorICAgICNlbmRpZgorCisgICAgLyogRGVmaW5lIGNoaXAgZGV2aWNlICovCisgICAgI2RlZmluZSBDQ19HRVRfQ0hJUF9ERVZJQ0UgKCgoQ0NfQ0hJUF9JRCkgJiAweEZGRkYwMDAwKSA+PiAxNikKKworICAgIC8qIFRoZSBjaGlwIGZhbWlseSwgb3B0aW9uIGFuZCBwYWNrYWdlIHNoYWxsIG1hdGNoIHRoZSBEcml2ZXJMaWIgcmVsZWFzZSAqLworICAgICNpZiAoQ0NfR0VUX0NISVBfRkFNSUxZICE9ICgoQ0NfQ0hJUF9JRCAmIDB4RkYwMDAwMDApID4+IDI0KSkKKyAgICAgICAgI2Vycm9yICJTcGVjaWZpZWQgY2hpcCBmYW1pbHkgZG9lcyBub3QgbWF0Y2ggRHJpdmVyTGliIHJlbGVhc2UiCisgICAgI2VuZGlmCisgICAgI2lmIChDQ19HRVRfQ0hJUF9PUFRJT04gIT0gKChDQ19DSElQX0lEICYgMHgwMDAwRjAwMCkgPj4gMTIpKQorICAgICAgICAjZXJyb3IgIlNwZWNpZmllZCBjaGlwIG9wdGlvbiAoT1RQKSBkb2VzIG5vdCBtYXRjaCBEcml2ZXJMaWIgcmVsZWFzZSIKKyAgICAjZW5kaWYKKyAgICAjaWYgKENDX0dFVF9DSElQX0hXUkVWICAhPSAoKENDX0NISVBfSUQgJiAweDAwMDAwMEZGKSA+PiAwKSkKKyAgICAgICAgI2Vycm9yICJTcGVjaWZpZWQgY2hpcCBoYXJkd2FyZSByZXZpc2lvbiBkb2VzIG5vdCBtYXRjaCBEcml2ZXJMaWIgcmVsZWFzZSIKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fSFdfQ0hJUF9ERUZfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfZHd0LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfZHd0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczMzA1ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9kd3QuaApAQCAtMCwwICsxLDg1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2NwdV9kd3RfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQ1BVX0RXVF9IX18KKyNkZWZpbmUgX19IV19DUFVfRFdUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIENQVV9EV1QgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQ29udHJvbAorI2RlZmluZSBDUFVfRFdUX09fQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEN1cnJlbnQgUEMgU2FtcGxlciBDeWNsZSBDb3VudAorI2RlZmluZSBDUFVfRFdUX09fQ1lDQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIENQSSBDb3VudAorI2RlZmluZSBDUFVfRFdUX09fQ1BJQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIEV4Y2VwdGlvbiBPdmVyaGVhZCBDb3VudAorI2RlZmluZSBDUFVfRFdUX09fRVhDQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIFNsZWVwIENvdW50CisjZGVmaW5lIENQVV9EV1RfT19TTEVFUENOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gTFNVIENvdW50CisjZGVmaW5lIENQVV9EV1RfT19MU1VDTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gRm9sZCBDb3VudAorI2RlZmluZSBDUFVfRFdUX09fRk9MRENOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIFByb2dyYW0gQ291bnRlciBTYW1wbGUKKyNkZWZpbmUgQ1BVX0RXVF9PX1BDU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBDb21wYXJhdG9yIDAKKyNkZWZpbmUgQ1BVX0RXVF9PX0NPTVAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBNYXNrIDAKKyNkZWZpbmUgQ1BVX0RXVF9PX01BU0swICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBGdW5jdGlvbiAwCisjZGVmaW5lIENQVV9EV1RfT19GVU5DVElPTjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8gQ29tcGFyYXRvciAxCisjZGVmaW5lIENQVV9EV1RfT19DT01QMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKworLy8gTWFzayAxCisjZGVmaW5lIENQVV9EV1RfT19NQVNLMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKworLy8gRnVuY3Rpb24gMQorI2RlZmluZSBDUFVfRFdUX09fRlVOQ1RJT04xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisKKy8vIENvbXBhcmF0b3IgMgorI2RlZmluZSBDUFVfRFdUX09fQ09NUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisKKy8vIE1hc2sgMgorI2RlZmluZSBDUFVfRFdUX09fTUFTSzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisKKy8vIEZ1bmN0aW9uIDIKKyNkZWZpbmUgQ1BVX0RXVF9PX0ZVTkNUSU9OMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAorCisvLyBDb21wYXJhdG9yIDMKKyNkZWZpbmUgQ1BVX0RXVF9PX0NPTVAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorCisvLyBNYXNrIDMKKyNkZWZpbmUgQ1BVX0RXVF9PX01BU0szICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorCisvLyBGdW5jdGlvbiAzCisjZGVmaW5lIENQVV9EV1RfT19GVU5DVElPTjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fQ1RSTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjVdIE5PQ1lDQ05UCisvLworLy8gV2hlbiBzZXQsIENZQ0NOVCBpcyBub3Qgc3VwcG9ydGVkLgorI2RlZmluZSBDUFVfRFdUX0NUUkxfTk9DWUNDTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9OT0NZQ0NOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX05PQ1lDQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfTk9DWUNDTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIE5PUFJGQ05UCisvLworLy8gV2hlbiBzZXQsIEZPTERDTlQsIExTVUNOVCwgU0xFRVBDTlQsIEVYQ0NOVCwgYW5kIENQSUNOVCBhcmUgbm90IHN1cHBvcnRlZC4KKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX05PUFJGQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfTk9QUkZDTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9EV1RfQ1RSTF9OT1BSRkNOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX05PUFJGQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIyXSBDWUNFVlRFTkEKKy8vCisvLyBFbmFibGVzIEN5Y2xlIGNvdW50IGV2ZW50LiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBQT1NUQ05UIGNvdW50ZXIgdHJpZ2dlcnMKKy8vIGl0LiBTZWUgQ1lDVEFQIGFuZCBQT1NUUFJFU0VUIGZvciBkZXRhaWxzLiBUaGlzIGV2ZW50IGlzIG9ubHkgZW1pdHRlZCBpZgorLy8gUENTQU1QTEVFTkEgaXMgZGlzYWJsZWQuIFBDU0FNUExFRU5BIG92ZXJyaWRlcyB0aGUgc2V0dGluZyBvZiB0aGlzIGJpdC4KKy8vCisvLyAwOiBDeWNsZSBjb3VudCBldmVudHMgZGlzYWJsZWQKKy8vIDE6IEN5Y2xlIGNvdW50IGV2ZW50cyBlbmFibGVkCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DWUNFVlRFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NZQ0VWVEVOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBDUFVfRFdUX0NUUkxfQ1lDRVZURU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DWUNFVlRFTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gRk9MREVWVEVOQQorLy8KKy8vIEVuYWJsZXMgRm9sZGVkIGluc3RydWN0aW9uIGNvdW50IGV2ZW50LiBFbWl0cyBhbiBldmVudCB3aGVuIEZPTERDTlQKKy8vIG92ZXJmbG93cyAoZXZlcnkgMjU2IGN5Y2xlcyBvZiBmb2xkZWQgaW5zdHJ1Y3Rpb25zKS4gQSBmb2xkZWQgaW5zdHJ1Y3Rpb24gaXMKKy8vIG9uZSB0aGF0IGRvZXMgbm90IGluY3VyIGV2ZW4gb25lIGN5Y2xlIHRvIGV4ZWN1dGUuIEZvciBleGFtcGxlLCBhbiBJVAorLy8gaW5zdHJ1Y3Rpb24gaXMgZm9sZGVkIGF3YXkgYW5kIHNvIGRvZXMgbm90IHVzZSB1cCBvbmUgY3ljbGUuCisvLworLy8gMDogRm9sZGVkIGluc3RydWN0aW9uIGNvdW50IGV2ZW50cyBkaXNhYmxlZC4KKy8vIDE6IEZvbGRlZCBpbnN0cnVjdGlvbiBjb3VudCBldmVudHMgZW5hYmxlZC4KKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0ZPTERFVlRFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfRk9MREVWVEVOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9GT0xERVZURU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0ZPTERFVlRFTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBMU1VFVlRFTkEKKy8vCisvLyBFbmFibGVzIExTVSBjb3VudCBldmVudC4gRW1pdHMgYW4gZXZlbnQgd2hlbiBMU1VDTlQgb3ZlcmZsb3dzIChldmVyeSAyNTYKKy8vIGN5Y2xlcyBvZiBMU1Ugb3BlcmF0aW9uKS4gTFNVIGNvdW50cyBpbmNsdWRlIGFsbCBMU1UgY29zdHMgYWZ0ZXIgdGhlIGluaXRpYWwKKy8vIGN5Y2xlIGZvciB0aGUgaW5zdHJ1Y3Rpb24uCisvLworLy8gMDogTFNVIGNvdW50IGV2ZW50cyBkaXNhYmxlZC4KKy8vIDE6IExTVSBjb3VudCBldmVudHMgZW5hYmxlZC4KKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0xTVUVWVEVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfTFNVRVZURU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9MU1VFVlRFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0xTVUVWVEVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBTTEVFUEVWVEVOQQorLy8KKy8vIEVuYWJsZXMgU2xlZXAgY291bnQgZXZlbnQuIEVtaXRzIGFuIGV2ZW50IHdoZW4gU0xFRVBDTlQgb3ZlcmZsb3dzIChldmVyeSAyNTYKKy8vIGN5Y2xlcyB0aGF0IHRoZSBwcm9jZXNzb3IgaXMgc2xlZXBpbmcpLgorLy8KKy8vIDA6IFNsZWVwIGNvdW50IGV2ZW50cyBkaXNhYmxlZC4KKy8vIDE6IFNsZWVwIGNvdW50IGV2ZW50cyBlbmFibGVkLgorI2RlZmluZSBDUFVfRFdUX0NUUkxfU0xFRVBFVlRFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9TTEVFUEVWVEVOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1NMRUVQRVZURU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfU0xFRVBFVlRFTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIEVYQ0VWVEVOQQorLy8KKy8vIEVuYWJsZXMgSW50ZXJydXB0IG92ZXJoZWFkIGV2ZW50LiBFbWl0cyBhbiBldmVudCB3aGVuIEVYQ0NOVCBvdmVyZmxvd3MKKy8vIChldmVyeSAyNTYgY3ljbGVzIG9mIGludGVycnVwdCBvdmVyaGVhZCkuCisvLworLy8gMHgwOiBJbnRlcnJ1cHQgb3ZlcmhlYWQgZXZlbnQgZGlzYWJsZWQuCisvLyAweDE6IEludGVycnVwdCBvdmVyaGVhZCBldmVudCBlbmFibGVkLgorI2RlZmluZSBDUFVfRFdUX0NUUkxfRVhDRVZURU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9FWENFVlRFTkFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0VYQ0VWVEVOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfRVhDRVZURU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIENQSUVWVEVOQQorLy8KKy8vIEVuYWJsZXMgQ1BJIGNvdW50IGV2ZW50LiBFbWl0cyBhbiBldmVudCB3aGVuIENQSUNOVCBvdmVyZmxvd3MgKGV2ZXJ5IDI1NgorLy8gY3ljbGVzIG9mIG11bHRpLWN5Y2xlIGluc3RydWN0aW9ucykuCisvLworLy8gMDogQ1BJIGNvdW50ZXIgZXZlbnRzIGRpc2FibGVkLgorLy8gMTogQ1BJIGNvdW50ZXIgZXZlbnRzIGVuYWJsZWQuCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DUElFVlRFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NQSUVWVEVOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfRFdUX0NUUkxfQ1BJRVZURU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DUElFVlRFTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gRVhDVFJDRU5BCisvLworLy8gRW5hYmxlcyBJbnRlcnJ1cHQgZXZlbnQgdHJhY2luZy4KKy8vCisvLyAwOiBJbnRlcnJ1cHQgZXZlbnQgdHJhY2UgZGlzYWJsZWQuCisvLyAxOiBJbnRlcnJ1cHQgZXZlbnQgdHJhY2UgZW5hYmxlZC4KKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0VYQ1RSQ0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfRVhDVFJDRU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENQVV9EV1RfQ1RSTF9FWENUUkNFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0VYQ1RSQ0VOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzEyXSBQQ1NBTVBMRUVOQQorLy8KKy8vIEVuYWJsZXMgUEMgU2FtcGxpbmcgZXZlbnQuIEEgUEMgc2FtcGxlIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiB0aGUgUE9TVENOVAorLy8gY291bnRlciB0cmlnZ2VycyBpdC4gU2VlIENZQ1RBUCBhbmQgUE9TVFBSRVNFVCBmb3IgZGV0YWlscy4gRW5hYmxpbmcgdGhpcworLy8gYml0IG92ZXJyaWRlcyBDWUNFVlRFTkEuCisvLworLy8gMDogUEMgU2FtcGxpbmcgZXZlbnQgZGlzYWJsZWQuCisvLyAxOiBTYW1wbGluZyBldmVudCBlbmFibGVkLgorI2RlZmluZSBDUFVfRFdUX0NUUkxfUENTQU1QTEVFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9QQ1NBTVBMRUVOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1BDU0FNUExFRU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfUENTQU1QTEVFTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIFNZTkNUQVAKKy8vCisvLyBTZWxlY3RzIGEgc3luY2hyb25pemF0aW9uIHBhY2tldCByYXRlLiBDWUNDTlRFTkEgYW5kIENQVV9JVE06VENSLlNZTkNFTkEKKy8vIG11c3QgYWxzbyBiZSBlbmFibGVkIGZvciB0aGlzIGZlYXR1cmUuCisvLyBTeW5jaHJvbml6YXRpb24gcGFja2V0cyAoaWYgZW5hYmxlZCkgYXJlIGdlbmVyYXRlZCBvbiB0YXAgdHJhbnNpdGlvbnMgKDAgdG8xCisvLyBvciAxIHRvIDApLgorLy8gRU5VTXM6CisvLyBCSVQyOCAgICAgICAgICAgICAgICAgICAgVGFwIGF0IGJpdCAyOCBvZiBDWUNDTlQKKy8vIEJJVDI2ICAgICAgICAgICAgICAgICAgICBUYXAgYXQgYml0IDI2IG9mIENZQ0NOVAorLy8gQklUMjQgICAgICAgICAgICAgICAgICAgIFRhcCBhdCBiaXQgMjQgb2YgQ1lDQ05UCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZWQuIE5vIHN5bmNocm9uaXphdGlvbiBwYWNrZXRzCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9TWU5DVEFQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1NZTkNUQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfU1lOQ1RBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9TWU5DVEFQX0JJVDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1NZTkNUQVBfQklUMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfU1lOQ1RBUF9CSVQyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9TWU5DVEFQX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOV0gQ1lDVEFQCisvLworLy8gU2VsZWN0cyBhIHRhcCBvbiBDWUNDTlQuIFRoZXNlIGFyZSBzcGFjZWQgYXQgYml0cyBbNl0gYW5kIFsxMF0uIFdoZW4gdGhlCisvLyBzZWxlY3RlZCBiaXQgaW4gQ1lDQ05UIGNoYW5nZXMgZnJvbSAwIHRvIDEgb3IgMSB0byAwLCBpdCBlbWl0cyBpbnRvIHRoZQorLy8gUE9TVENOVCwgcG9zdC1zY2FsYXIgY291bnRlci4gVGhhdCBjb3VudGVyIHRoZW4gY291bnRzIGRvd24uIE9uIGEgYml0IGNoYW5nZQorLy8gd2hlbiBwb3N0LXNjYWxhciBpcyAwLCBpdCB0cmlnZ2VycyBhbiBldmVudCBmb3IgUEMgc2FtcGxpbmcgb3IgY3ljbGUgY291bnQKKy8vIGV2ZW50IChzZWUgZGV0YWlscyBpbiBDWUNFVlRFTkEpLgorLy8gRU5VTXM6CisvLyBCSVQxMCAgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBiaXQgWzEwXSB0byB0YXAKKy8vIEJJVDYgICAgICAgICAgICAgICAgICAgICBTZWxlY3RzIGJpdCBbNl0gdG8gdGFwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DWUNUQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NZQ1RBUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUFVfRFdUX0NUUkxfQ1lDVEFQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DWUNUQVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NZQ1RBUF9CSVQxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfQ1lDVEFQX0JJVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs4OjVdIFBPU1RDTlQKKy8vCisvLyBQb3N0LXNjYWxhciBjb3VudGVyIGZvciBDWUNUQVAuIFdoZW4gdGhlIHNlbGVjdGVkIHRhcHBlZCBiaXQgY2hhbmdlcyBmcm9tIDAKKy8vIHRvIDEgb3IgMSB0byAwLCB0aGUgcG9zdCBzY2FsYXIgY291bnRlciBpcyBkb3duLWNvdW50ZWQgd2hlbiBub3QgMC4gSWYgMCwgaXQKKy8vIHRyaWdnZXJzIGFuIGV2ZW50IGZvciBQQ1NBTVBMRUVOQSBvciBDWUNFVlRFTkEgdXNlLiBJdCBhbHNvIHJlbG9hZHMgd2l0aCB0aGUKKy8vIHZhbHVlIGZyb20gUE9TVFBSRVNFVC4KKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1BPU1RDTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRFdUX0NUUkxfUE9TVENOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMUUwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9QT1NUQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzQ6MV0gUE9TVFBSRVNFVAorLy8KKy8vIFJlbG9hZCB2YWx1ZSBmb3IgcG9zdC1zY2FsYXIgY291bnRlciBQT1NUQ05ULiBXaGVuIDAsIGV2ZW50cyBhcmUgdHJpZ2dlcmVkCisvLyBvbiBlYWNoIHRhcCBjaGFuZ2UgKGEgcG93ZXIgb2YgMikuIElmIHRoaXMgZmllbGQgaGFzIGEgbm9uLTAgdmFsdWUsIGl0IGZvcm1zCisvLyBhIGNvdW50LWRvd24gdmFsdWUsIHRvIGJlIHJlbG9hZGVkIGludG8gUE9TVENOVCBlYWNoIHRpbWUgaXQgcmVhY2hlcyAwLiBGb3IKKy8vIGV4YW1wbGUsIGEgdmFsdWUgMSBpbiB0aGlzIHJlZ2lzdGVyIG1lYW5zIGFuIGV2ZW50IGlzIGZvcm1lZCBldmVyeSBvdGhlciB0YXAKKy8vIGNoYW5nZS4KKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1BPU1RQUkVTRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRFdUX0NUUkxfUE9TVFBSRVNFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9QT1NUUFJFU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQ1lDQ05URU5BCisvLworLy8gRW5hYmxlIENZQ0NOVCwgYWxsb3dpbmcgaXQgdG8gaW5jcmVtZW50IGFuZCBnZW5lcmF0ZSBzeW5jaHJvbml6YXRpb24gYW5kCisvLyBjb3VudCBldmVudHMuIElmIE5PQ1lDQ05UID0gMSwgdGhpcyBiaXQgcmVhZHMgemVybyBhbmQgaWdub3JlIHdyaXRlcy4KKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NZQ0NOVEVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRFdUX0NUUkxfQ1lDQ05URU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DWUNDTlRFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NZQ0NOVEVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9EV1RfT19DWUNDTlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDWUNDTlQKKy8vCisvLyBDdXJyZW50IFBDIFNhbXBsZXIgQ3ljbGUgQ291bnRlciBjb3VudCB2YWx1ZS4gV2hlbiBlbmFibGVkLCB0aGlzIGNvdW50ZXIKKy8vIGNvdW50cyB0aGUgbnVtYmVyIG9mIGNvcmUgY3ljbGVzLCBleGNlcHQgd2hlbiB0aGUgY29yZSBpcyBoYWx0ZWQuIFRoZSBjeWNsZQorLy8gY291bnRlciBpcyBhIGZyZWUgcnVubmluZyBjb3VudGVyLCBjb3VudGluZyB1cHdhcmRzICh0aGlzIGNvdW50ZXIgd2lsbCBub3QKKy8vIGFkdmFuY2UgaW4gcG93ZXIgbW9kZXMgd2hlcmUgZnJlZS1ydW5uaW5nIGNsb2NrIHRvIENQVSBzdG9wcykuIEl0IHdyYXBzCisvLyBhcm91bmQgdG8gMCBvbiBvdmVyZmxvdy4gVGhlIGRlYnVnZ2VyIG11c3QgaW5pdGlhbGl6ZSB0aGlzIHRvIDAgd2hlbiBmaXJzdAorLy8gZW5hYmxpbmcuCisjZGVmaW5lIENQVV9EV1RfQ1lDQ05UX0NZQ0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0RXVF9DWUNDTlRfQ1lDQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfRFdUX0NZQ0NOVF9DWUNDTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX0NQSUNOVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIENQSUNOVAorLy8KKy8vIEN1cnJlbnQgQ1BJIGNvdW50ZXIgdmFsdWUuIEluY3JlbWVudHMgb24gdGhlIGFkZGl0aW9uYWwgY3ljbGVzICh0aGUgZmlyc3QKKy8vIGN5Y2xlIGlzIG5vdCBjb3VudGVkKSByZXF1aXJlZCB0byBleGVjdXRlIGFsbCBpbnN0cnVjdGlvbnMgZXhjZXB0IHRob3NlCisvLyByZWNvcmRlZCBieSBMU1VDTlQuIFRoaXMgY291bnRlciBhbHNvIGluY3JlbWVudHMgb24gYWxsIGluc3RydWN0aW9uIGZldGNoCisvLyBzdGFsbHMuIElmIENUUkwuQ1BJRVZURU5BIGlzIHNldCwgYW4gZXZlbnQgaXMgZW1pdHRlZCB3aGVuIHRoZSBjb3VudGVyCisvLyBvdmVyZmxvd3MuIFRoaXMgY291bnRlciBpbml0aWFsaXplcyB0byAwIHdoZW4gaXQgaXMgZW5hYmxlZCB1c2luZworLy8gQ1RSTC5DUElFVlRFTkEuCisjZGVmaW5lIENQVV9EV1RfQ1BJQ05UX0NQSUNOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX0RXVF9DUElDTlRfQ1BJQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfRFdUX0NQSUNOVF9DUElDTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX0VYQ0NOVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIEVYQ0NOVAorLy8KKy8vIEN1cnJlbnQgaW50ZXJydXB0IG92ZXJoZWFkIGNvdW50ZXIgdmFsdWUuIENvdW50cyB0aGUgdG90YWwgY3ljbGVzIHNwZW50IGluCisvLyBpbnRlcnJ1cHQgcHJvY2Vzc2luZyAoZm9yIGV4YW1wbGUgZW50cnkgc3RhY2tpbmcsIHJldHVybiB1bnN0YWNraW5nLAorLy8gcHJlLWVtcHRpb24pLiBBbiBldmVudCBpcyBlbWl0dGVkIG9uIGNvdW50ZXIgb3ZlcmZsb3cgKGV2ZXJ5IDI1NiBjeWNsZXMpLgorLy8gVGhpcyBjb3VudGVyIGluaXRpYWxpemVzIHRvIDAgd2hlbiBpdCBpcyBlbmFibGVkIHVzaW5nIENUUkwuRVhDRVZURU5BLgorI2RlZmluZSBDUFVfRFdUX0VYQ0NOVF9FWENDTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9EV1RfRVhDQ05UX0VYQ0NOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ1BVX0RXVF9FWENDTlRfRVhDQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9EV1RfT19TTEVFUENOVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFNMRUVQQ05UCisvLworLy8gU2xlZXAgY291bnRlci4gQ291bnRzIHRoZSBudW1iZXIgb2YgY3ljbGVzIGR1cmluZyB3aGljaCB0aGUgcHJvY2Vzc29yIGlzCisvLyBzbGVlcGluZy4gQW4gZXZlbnQgaXMgZW1pdHRlZCBvbiBjb3VudGVyIG92ZXJmbG93IChldmVyeSAyNTYgY3ljbGVzKS4gVGhpcworLy8gY291bnRlciBpbml0aWFsaXplcyB0byAwIHdoZW4gaXQgaXMgZW5hYmxlZCB1c2luZyBDVFJMLlNMRUVQRVZURU5BLiBOb3RlCisvLyB0aGF0IHRoZSBzbGVlcCBjb3VudGVyIGlzIGNsb2NrZWQgdXNpbmcgQ1BVJ3MgZnJlZS1ydW5uaW5nIGNsb2NrLiBJbiBzb21lCisvLyBwb3dlciBtb2RlcyB0aGUgZnJlZS1ydW5uaW5nIGNsb2NrIHRvIENQVSBpcyBnYXRlZCB0byBtaW5pbWl6ZSBwb3dlcgorLy8gY29uc3VtcHRpb24uIFRoaXMgbWVhbnMgdGhhdCB0aGUgc2xlZXAgY291bnRlciB3aWxsIGJlIGludmFsaWQgaW4gdGhlc2UKKy8vIHBvd2VyIG1vZGVzLgorI2RlZmluZSBDUFVfRFdUX1NMRUVQQ05UX1NMRUVQQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9EV1RfU0xFRVBDTlRfU0xFRVBDTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ1BVX0RXVF9TTEVFUENOVF9TTEVFUENOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9EV1RfT19MU1VDTlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBMU1VDTlQKKy8vCisvLyBMU1UgY291bnRlci4gVGhpcyBjb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiBjeWNsZXMgdGhhdCB0aGUgcHJvY2Vzc29yIGlzCisvLyBwcm9jZXNzaW5nIGFuIExTVSBvcGVyYXRpb24uIFRoZSBpbml0aWFsIGV4ZWN1dGlvbiBjb3N0IG9mIHRoZSBpbnN0cnVjdGlvbgorLy8gaXMgbm90IGNvdW50ZWQuIEZvciBleGFtcGxlLCBhbiBMRFIgdGhhdCB0YWtlcyB0d28gY3ljbGVzIHRvIGNvbXBsZXRlCisvLyBpbmNyZW1lbnRzIHRoaXMgY291bnRlciBvbmUgY3ljbGUuIEVxdWl2YWxlbnRseSwgYW4gTERSIHRoYXQgc3RhbGxzIGZvciB0d28KKy8vIGN5Y2xlcyAoaS5lLiB0YWtlcyBmb3VyIGN5Y2xlcyB0byBleGVjdXRlKSwgaW5jcmVtZW50cyB0aGlzIGNvdW50ZXIgdGhyZWUKKy8vIHRpbWVzLiBBbiBldmVudCBpcyBlbWl0dGVkIG9uIGNvdW50ZXIgb3ZlcmZsb3cgKGV2ZXJ5IDI1NiBjeWNsZXMpLiBUaGlzCisvLyBjb3VudGVyIGluaXRpYWxpemVzIHRvIDAgd2hlbiBpdCBpcyBlbmFibGVkIHVzaW5nIENUUkwuTFNVRVZURU5BLgorI2RlZmluZSBDUFVfRFdUX0xTVUNOVF9MU1VDTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9EV1RfTFNVQ05UX0xTVUNOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ1BVX0RXVF9MU1VDTlRfTFNVQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9EV1RfT19GT0xEQ05UCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gRk9MRENOVAorLy8KKy8vIFRoaXMgY291bnRzIHRoZSB0b3RhbCBudW1iZXIgZm9sZGVkIGluc3RydWN0aW9ucy4gVGhpcyBjb3VudGVyIGluaXRpYWxpemVzCisvLyB0byAwIHdoZW4gaXQgaXMgZW5hYmxlZCB1c2luZyBDVFJMLkZPTERFVlRFTkEuCisjZGVmaW5lIENQVV9EV1RfRk9MRENOVF9GT0xEQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX0RXVF9GT0xEQ05UX0ZPTERDTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfRFdUX0ZPTERDTlRfRk9MRENOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX1BDU1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBFSUFTQU1QTEUKKy8vCisvLyBFeGVjdXRpb24gaW5zdHJ1Y3Rpb24gYWRkcmVzcyBzYW1wbGUsIG9yIDB4RkZGRkZGRkYgaWYgdGhlIGNvcmUgaXMgaGFsdGVkLgorI2RlZmluZSBDUFVfRFdUX1BDU1JfRUlBU0FNUExFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9EV1RfUENTUl9FSUFTQU1QTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0RXVF9QQ1NSX0VJQVNBTVBMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9EV1RfT19DT01QMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENPTVAKKy8vCisvLyBSZWZlcmVuY2UgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0IFBDIG9yIHRoZSBkYXRhIGFkZHJlc3MgYXMgZ2l2ZW4gYnkKKy8vIEZVTkNUSU9OMC4gQ29tcGFyYXRvciAwIGNhbiBhbHNvIGNvbXBhcmUgYWdhaW5zdCB0aGUgdmFsdWUgb2YgdGhlIFBDIFNhbXBsZXIKKy8vIENvdW50ZXIgKENZQ0NOVCkuCisjZGVmaW5lIENQVV9EV1RfQ09NUDBfQ09NUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0RXVF9DT01QMF9DT01QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfRFdUX0NPTVAwX0NPTVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX01BU0swCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzM6MF0gTUFTSworLy8KKy8vIE1hc2sgb24gZGF0YSBhZGRyZXNzIHdoZW4gbWF0Y2hpbmcgYWdhaW5zdCBDT01QMC4gVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUKKy8vIGlnbm9yZSBtYXNrLiBUaGF0IGlzLCBEV1QgbWF0Y2hpbmcgaXMgcGVyZm9ybWVkIGFzOihBRERSIEFORGVkIHdpdGggKDB4RkZGRgorLy8gbGVmdCBiaXQtc2hpZnRlZCBieSBNQVNLKSkgPT0gQ09NUDAuIEhvd2V2ZXIsIHRoZSBhY3R1YWwgY29tcGFyaXNvbiBpcworLy8gc2xpZ2h0bHkgbW9yZSBjb21wbGV4IHRvIGVuYWJsZSBtYXRjaGluZyBhbiBhZGRyZXNzIHdoZXJldmVyIGl0IGFwcGVhcnMgb24gYQorLy8gYnVzLiBTbywgaWYgQ09NUDAgaXMgMywgdGhpcyBtYXRjaGVzIGEgd29yZCBhY2Nlc3Mgb2YgMCwgYmVjYXVzZSAzIHdvdWxkIGJlCisvLyB3aXRoaW4gdGhlIHdvcmQuCisjZGVmaW5lIENQVV9EV1RfTUFTSzBfTUFTS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX0RXVF9NQVNLMF9NQVNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBDUFVfRFdUX01BU0swX01BU0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX0ZVTkNUSU9OMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIE1BVENIRUQKKy8vCisvLyBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgY29tcGFyYXRvciBtYXRjaGVzLCBhbmQgaW5kaWNhdGVzIHRoYXQgdGhlCisvLyBvcGVyYXRpb24gZGVmaW5lZCBieSBGVU5DVElPTiBoYXMgb2NjdXJyZWQgc2luY2UgdGhpcyBiaXQgd2FzIGxhc3QgcmVhZC4KKy8vIFRoaXMgYml0IGlzIGNsZWFyZWQgb24gcmVhZC4KKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjBfTUFUQ0hFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMF9NQVRDSEVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04wX01BVENIRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjBfTUFUQ0hFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgIFs3XSBDWUNNQVRDSAorLy8KKy8vIFRoaXMgYml0IGlzIG9ubHkgYXZhaWxhYmxlIGluIGNvbXBhcmF0b3IgMC4gV2hlbiBzZXQsIENPTVAwIHdpbGwgY29tcGFyZQorLy8gYWdhaW5zdCB0aGUgY3ljbGUgY291bnRlciAoQ1lDQ05UKS4KKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjBfQ1lDTUFUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMF9DWUNNQVRDSF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04wX0NZQ01BVENIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjBfQ1lDTUFUQ0hfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs1XSBFTUlUUkFOR0UKKy8vCisvLyBFbWl0IHJhbmdlIGZpZWxkLiBUaGlzIGJpdCBwZXJtaXRzIGVtaXR0aW5nIG9mZnNldCB3aGVuIHJhbmdlIG1hdGNoIG9jY3Vycy4KKy8vIFBDIHNhbXBsaW5nIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiBlbWl0IHJhbmdlIGlzIGVuYWJsZWQuCisvLyBUaGlzIGZpZWxkIG9ubHkgYXBwbGllcyBmb3I6IEZVTkNUSU9OID0gMSwgMiwgMywgMTIsIDEzLCAxNCwgYW5kIDE1LgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMF9FTUlUUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04wX0VNSVRSQU5HRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjBfRU1JVFJBTkdFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMF9FTUlUUkFOR0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgIFszOjBdIEZVTkNUSU9OCisvLworLy8gRnVuY3Rpb24gc2V0dGluZ3MuCisvLworLy8gMHgwOiBEaXNhYmxlZAorLy8gMHgxOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgYW5kIGVtaXQgUEMgdGhyb3VnaCBJVE0uIEVNSVRSQU5HRSA9IDEsIGVtaXQKKy8vIGFkZHJlc3Mgb2Zmc2V0IHRocm91Z2ggSVRNCisvLyAweDI6IEVNSVRSQU5HRSA9IDAsIGVtaXQgZGF0YSB0aHJvdWdoIElUTSBvbiByZWFkIGFuZCB3cml0ZS4gRU1JVFJBTkdFID0gMSwKKy8vIGVtaXQgZGF0YSBhbmQgYWRkcmVzcyBvZmZzZXQgdGhyb3VnaCBJVE0gb24gcmVhZCBvciB3cml0ZS4KKy8vIDB4MzogRU1JVFJBTkdFID0gMCwgc2FtcGxlIFBDIGFuZCBkYXRhIHZhbHVlIHRocm91Z2ggSVRNIG9uIHJlYWQgb3Igd3JpdGUuCisvLyBFTUlUUkFOR0UgPSAxLCBlbWl0IGFkZHJlc3Mgb2Zmc2V0IGFuZCBkYXRhIHZhbHVlIHRocm91Z2ggSVRNIG9uIHJlYWQgb3IKKy8vIHdyaXRlLgorLy8gMHg0OiBXYXRjaHBvaW50IG9uIFBDIG1hdGNoLgorLy8gMHg1OiBXYXRjaHBvaW50IG9uIHJlYWQuCisvLyAweDY6IFdhdGNocG9pbnQgb24gd3JpdGUuCisvLyAweDc6IFdhdGNocG9pbnQgb24gcmVhZCBvciB3cml0ZS4KKy8vIDB4ODogRVRNIHRyaWdnZXIgb24gUEMgbWF0Y2gKKy8vIDB4OTogRVRNIHRyaWdnZXIgb24gcmVhZAorLy8gMHhBOiBFVE0gdHJpZ2dlciBvbiB3cml0ZQorLy8gMHhCOiBFVE0gdHJpZ2dlciBvbiByZWFkIG9yIHdyaXRlCisvLyAweEM6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBkYXRhIGZvciByZWFkIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwgc2FtcGxlCisvLyBEYWRkciAobG93ZXIgMTYgYml0cykgZm9yIHJlYWQgdHJhbnNmZXJzCisvLyAweEQ6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBkYXRhIGZvciB3cml0ZSB0cmFuc2ZlcnMuIEVNSVRSQU5HRSA9IDEsIHNhbXBsZQorLy8gRGFkZHIgKGxvd2VyIDE2IGJpdHMpIGZvciB3cml0ZSB0cmFuc2ZlcnMKKy8vIDB4RTogRU1JVFJBTkdFID0gMCwgc2FtcGxlIFBDICsgZGF0YSBmb3IgcmVhZCB0cmFuc2ZlcnMuIEVNSVRSQU5HRSA9IDEsCisvLyBzYW1wbGUgRGFkZHIgKGxvd2VyIDE2IGJpdHMpICsgZGF0YSBmb3IgcmVhZCB0cmFuc2ZlcnMKKy8vIDB4RjogRU1JVFJBTkdFID0gMCwgc2FtcGxlIFBDICsgZGF0YSBmb3Igd3JpdGUgdHJhbnNmZXJzLiBFTUlUUkFOR0UgPSAxLAorLy8gc2FtcGxlIERhZGRyIChsb3dlciAxNiBiaXRzKSArIGRhdGEgZm9yIHdyaXRlIHRyYW5zZmVycworLy8KKy8vIE5vdGUgMTogSWYgdGhlIEVUTSBpcyBub3QgZml0dGVkLCB0aGVuIEVUTSB0cmlnZ2VyIGlzIG5vdCBwb3NzaWJsZS4KKy8vIE5vdGUgMjogRGF0YSB2YWx1ZSBpcyBvbmx5IHNhbXBsZWQgZm9yIGFjY2Vzc2VzIHRoYXQgZG8gbm90IGZhdWx0IChNUFUgb3IKKy8vIGJ1cyBmYXVsdCkuIFRoZSBQQyBpcyBzYW1wbGVkIGlycmVzcGVjdGl2ZSBvZiBhbnkgZmF1bHRzLiBUaGUgUEMgaXMgb25seQorLy8gc2FtcGxlZCBmb3IgdGhlIGZpcnN0IGFkZHJlc3Mgb2YgYSBidXJzdC4KKy8vIE5vdGUgMzogUEMgbWF0Y2ggaXMgbm90IHJlY29tbWVuZGVkIGZvciB3YXRjaHBvaW50cyBiZWNhdXNlIGl0IHN0b3BzIGFmdGVyCisvLyB0aGUgaW5zdHJ1Y3Rpb24uIEl0IG1haW5seSBndWFyZHMgYW5kIHRyaWdnZXJzIHRoZSBFVE0uCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04wX0ZVTkNUSU9OX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjBfRlVOQ1RJT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMF9GVU5DVElPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX0NPTVAxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ09NUAorLy8KKy8vIFJlZmVyZW5jZSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QgUEMgb3IgdGhlIGRhdGEgYWRkcmVzcyBhcyBnaXZlbiBieQorLy8gRlVOQ1RJT04xLgorLy8gQ29tcGFyYXRvciAxIGNhbiBhbHNvIGNvbXBhcmUgZGF0YSB2YWx1ZXMuIFNvIHRoaXMgcmVnaXN0ZXIgY2FuIGNvbnRhaW4KKy8vIHJlZmVyZW5jZSB2YWx1ZXMgZm9yIGRhdGEgbWF0Y2hpbmcuCisjZGVmaW5lIENQVV9EV1RfQ09NUDFfQ09NUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0RXVF9DT01QMV9DT01QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfRFdUX0NPTVAxX0NPTVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX01BU0sxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzM6MF0gTUFTSworLy8KKy8vIE1hc2sgb24gZGF0YSBhZGRyZXNzIHdoZW4gbWF0Y2hpbmcgYWdhaW5zdCBDT01QMS4gVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUKKy8vIGlnbm9yZSBtYXNrLiBUaGF0IGlzLCBEV1QgbWF0Y2hpbmcgaXMgcGVyZm9ybWVkIGFzOihBRERSIEFORGVkIHdpdGggKDB4RkZGRgorLy8gbGVmdCBiaXQtc2hpZnRlZCBieSBNQVNLKSkgPT0gQ09NUDEuIEhvd2V2ZXIsIHRoZSBhY3R1YWwgY29tcGFyaXNvbiBpcworLy8gc2xpZ2h0bHkgbW9yZSBjb21wbGV4IHRvIGVuYWJsZSBtYXRjaGluZyBhbiBhZGRyZXNzIHdoZXJldmVyIGl0IGFwcGVhcnMgb24gYQorLy8gYnVzLiBTbywgaWYgQ09NUDEgaXMgMywgdGhpcyBtYXRjaGVzIGEgd29yZCBhY2Nlc3Mgb2YgMCwgYmVjYXVzZSAzIHdvdWxkIGJlCisvLyB3aXRoaW4gdGhlIHdvcmQuCisjZGVmaW5lIENQVV9EV1RfTUFTSzFfTUFTS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX0RXVF9NQVNLMV9NQVNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBDUFVfRFdUX01BU0sxX01BU0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX0ZVTkNUSU9OMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIE1BVENIRUQKKy8vCisvLyBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgY29tcGFyYXRvciBtYXRjaGVzLCBhbmQgaW5kaWNhdGVzIHRoYXQgdGhlCisvLyBvcGVyYXRpb24gZGVmaW5lZCBieSBGVU5DVElPTiBoYXMgb2NjdXJyZWQgc2luY2UgdGhpcyBiaXQgd2FzIGxhc3QgcmVhZC4KKy8vIFRoaXMgYml0IGlzIGNsZWFyZWQgb24gcmVhZC4KKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfTUFUQ0hFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9NQVRDSEVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX01BVENIRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfTUFUQ0hFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzE5OjE2XSBEQVRBVkFERFIxCisvLworLy8gSWRlbnRpdHkgb2YgYSBzZWNvbmQgbGlua2VkIGFkZHJlc3MgY29tcGFyYXRvciBmb3IgZGF0YSB2YWx1ZSBtYXRjaGluZyB3aGVuCisvLyBEQVRBVk1BVENIID09IDEgYW5kIExOSzFFTkEgPT0gMS4KKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfREFUQVZBRERSMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9EQVRBVkFERFIxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0RBVEFWQUREUjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6IFsxNToxMl0gREFUQVZBRERSMAorLy8KKy8vIElkZW50aXR5IG9mIGEgbGlua2VkIGFkZHJlc3MgY29tcGFyYXRvciBmb3IgZGF0YSB2YWx1ZSBtYXRjaGluZyB3aGVuCisvLyBEQVRBVk1BVENIID09IDEuCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0RBVEFWQUREUjBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfREFUQVZBRERSMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9EQVRBVkFERFIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIERBVEFWU0laRQorLy8KKy8vIERlZmluZXMgdGhlIHNpemUgb2YgdGhlIGRhdGEgaW4gdGhlIENPTVAxIHJlZ2lzdGVyIHRoYXQgaXMgdG8gYmUgbWF0Y2hlZDoKKy8vCisvLyAweDA6IEJ5dGUKKy8vIDB4MTogSGFsZndvcmQKKy8vIDB4MjogV29yZAorLy8gMHgzOiBVbnByZWRpY3RhYmxlLgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9EQVRBVlNJWkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0RBVEFWU0laRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfREFUQVZTSVpFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBMTksxRU5BCisvLworLy8gUmVhZCBvbmx5IGJpdC1maWVsZCBvbmx5IHN1cHBvcnRlZCBpbiBjb21wYXJhdG9yIDEuCisvLworLy8gMDogREFUQVZBRERSMSBub3Qgc3VwcG9ydGVkCisvLyAxOiBEQVRBVkFERFIxIHN1cHBvcnRlZCAoZW5hYmxlZCkKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfTE5LMUVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9MTksxRU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0xOSzFFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfTE5LMUVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBEQVRBVk1BVENICisvLworLy8gRGF0YSBtYXRjaCBmZWF0dXJlOgorLy8KKy8vIDA6IFBlcmZvcm0gYWRkcmVzcyBjb21wYXJpc29uCisvLyAxOiBQZXJmb3JtIGRhdGEgdmFsdWUgY29tcGFyZS4gVGhlIGNvbXBhcmF0b3JzIGdpdmVuIGJ5IERBVEFWQUREUjAgYW5kCisvLyBEQVRBVkFERFIxIHByb3ZpZGUgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIGNvbXBhcmlzb24uIFRoZSBGVU5DVElPTiBzZXR0aW5nCisvLyBmb3IgdGhlIGNvbXBhcmF0b3JzIGdpdmVuIGJ5IERBVEFWQUREUjAgYW5kIERBVEFWQUREUjEgYXJlIG92ZXJyaWRkZW4gYW5kCisvLyB0aG9zZSBjb21wYXJhdG9ycyBvbmx5IHByb3ZpZGUgdGhlIGFkZHJlc3MgbWF0Y2ggZm9yIHRoZSBkYXRhIGNvbXBhcmlzb24uCisvLworLy8gVGhpcyBiaXQgaXMgb25seSBhdmFpbGFibGUgaW4gY29tcGFyYXRvciAxLgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9EQVRBVk1BVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0RBVEFWTUFUQ0hfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfREFUQVZNQVRDSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9EQVRBVk1BVENIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzVdIEVNSVRSQU5HRQorLy8KKy8vIEVtaXQgcmFuZ2UgZmllbGQuIFRoaXMgYml0IHBlcm1pdHMgZW1pdHRpbmcgb2Zmc2V0IHdoZW4gcmFuZ2UgbWF0Y2ggb2NjdXJzLgorLy8gUEMgc2FtcGxpbmcgaXMgbm90IHN1cHBvcnRlZCB3aGVuIGVtaXQgcmFuZ2UgaXMgZW5hYmxlZC4KKy8vIFRoaXMgZmllbGQgb25seSBhcHBsaWVzIGZvcjogRlVOQ1RJT04gPSAxLCAyLCAzLCAxMiwgMTMsIDE0LCBhbmQgMTUuCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0VNSVRSQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfRU1JVFJBTkdFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9FTUlUUkFOR0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0VNSVRSQU5HRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzM6MF0gRlVOQ1RJT04KKy8vCisvLyBGdW5jdGlvbiBzZXR0aW5nczoKKy8vCisvLyAweDA6IERpc2FibGVkCisvLyAweDE6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBhbmQgZW1pdCBQQyB0aHJvdWdoIElUTS4gRU1JVFJBTkdFID0gMSwgZW1pdAorLy8gYWRkcmVzcyBvZmZzZXQgdGhyb3VnaCBJVE0KKy8vIDB4MjogRU1JVFJBTkdFID0gMCwgZW1pdCBkYXRhIHRocm91Z2ggSVRNIG9uIHJlYWQgYW5kIHdyaXRlLiBFTUlUUkFOR0UgPSAxLAorLy8gZW1pdCBkYXRhIGFuZCBhZGRyZXNzIG9mZnNldCB0aHJvdWdoIElUTSBvbiByZWFkIG9yIHdyaXRlLgorLy8gMHgzOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgYW5kIGRhdGEgdmFsdWUgdGhyb3VnaCBJVE0gb24gcmVhZCBvciB3cml0ZS4KKy8vIEVNSVRSQU5HRSA9IDEsIGVtaXQgYWRkcmVzcyBvZmZzZXQgYW5kIGRhdGEgdmFsdWUgdGhyb3VnaCBJVE0gb24gcmVhZCBvcgorLy8gd3JpdGUuCisvLyAweDQ6IFdhdGNocG9pbnQgb24gUEMgbWF0Y2guCisvLyAweDU6IFdhdGNocG9pbnQgb24gcmVhZC4KKy8vIDB4NjogV2F0Y2hwb2ludCBvbiB3cml0ZS4KKy8vIDB4NzogV2F0Y2hwb2ludCBvbiByZWFkIG9yIHdyaXRlLgorLy8gMHg4OiBFVE0gdHJpZ2dlciBvbiBQQyBtYXRjaAorLy8gMHg5OiBFVE0gdHJpZ2dlciBvbiByZWFkCisvLyAweEE6IEVUTSB0cmlnZ2VyIG9uIHdyaXRlCisvLyAweEI6IEVUTSB0cmlnZ2VyIG9uIHJlYWQgb3Igd3JpdGUKKy8vIDB4QzogRU1JVFJBTkdFID0gMCwgc2FtcGxlIGRhdGEgZm9yIHJlYWQgdHJhbnNmZXJzLiBFTUlUUkFOR0UgPSAxLCBzYW1wbGUKKy8vIERhZGRyIChsb3dlciAxNiBiaXRzKSBmb3IgcmVhZCB0cmFuc2ZlcnMKKy8vIDB4RDogRU1JVFJBTkdFID0gMCwgc2FtcGxlIGRhdGEgZm9yIHdyaXRlIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwgc2FtcGxlCisvLyBEYWRkciAobG93ZXIgMTYgYml0cykgZm9yIHdyaXRlIHRyYW5zZmVycworLy8gMHhFOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgKyBkYXRhIGZvciByZWFkIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwKKy8vIHNhbXBsZSBEYWRkciAobG93ZXIgMTYgYml0cykgKyBkYXRhIGZvciByZWFkIHRyYW5zZmVycworLy8gMHhGOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgKyBkYXRhIGZvciB3cml0ZSB0cmFuc2ZlcnMuIEVNSVRSQU5HRSA9IDEsCisvLyBzYW1wbGUgRGFkZHIgKGxvd2VyIDE2IGJpdHMpICsgZGF0YSBmb3Igd3JpdGUgdHJhbnNmZXJzCisvLworLy8gTm90ZSAxOiBJZiB0aGUgRVRNIGlzIG5vdCBmaXR0ZWQsIHRoZW4gRVRNIHRyaWdnZXIgaXMgbm90IHBvc3NpYmxlLgorLy8gTm90ZSAyOiBEYXRhIHZhbHVlIGlzIG9ubHkgc2FtcGxlZCBmb3IgYWNjZXNzZXMgdGhhdCBkbyBub3QgZmF1bHQgKE1QVSBvcgorLy8gYnVzIGZhdWx0KS4gVGhlIFBDIGlzIHNhbXBsZWQgaXJyZXNwZWN0aXZlIG9mIGFueSBmYXVsdHMuIFRoZSBQQyBpcyBvbmx5CisvLyBzYW1wbGVkIGZvciB0aGUgZmlyc3QgYWRkcmVzcyBvZiBhIGJ1cnN0LgorLy8gTm90ZSAzOiBGVU5DVElPTiBpcyBvdmVycmlkZGVuIGZvciBjb21wYXJhdG9ycyBnaXZlbiBieSBEQVRBVkFERFIwIGFuZAorLy8gREFUQVZBRERSMSBpZiBEQVRBVk1BVENIIGlzIGFsc28gc2V0LiBUaGUgY29tcGFyYXRvcnMgZ2l2ZW4gYnkgREFUQVZBRERSMAorLy8gYW5kIERBVEFWQUREUjEgY2FuIHRoZW4gb25seSBwZXJmb3JtIGFkZHJlc3MgY29tcGFyYXRvciBtYXRjaGVzIGZvcgorLy8gY29tcGFyYXRvciAxIGRhdGEgbWF0Y2hlcy4KKy8vIE5vdGUgNDogSWYgdGhlIGRhdGEgbWF0Y2hpbmcgZnVuY3Rpb25hbGl0eSBpcyBub3QgaW5jbHVkZWQgZHVyaW5nCisvLyBpbXBsZW1lbnRhdGlvbiBpdCBpcyBub3QgcG9zc2libGUgdG8gc2V0IERBVEFWQUREUjAsIERBVEFWQUREUjEsIG9yCisvLyBEQVRBVk1BVENILiBUaGlzIG1lYW5zIHRoYXQgdGhlIGRhdGEgbWF0Y2hpbmcgZnVuY3Rpb25hbGl0eSBpcyBub3QgYXZhaWxhYmxlCisvLyBpbiB0aGUgaW1wbGVtZW50YXRpb24uIFRlc3QgdGhlIGF2YWlsYWJpbGl0eSBvZiBkYXRhIG1hdGNoaW5nIGJ5IHdyaXRpbmcgYW5kCisvLyByZWFkaW5nIERBVEFWTUFUQ0guIElmIGl0IGlzIG5vdCBzZXR0YWJsZSB0aGVuIGRhdGEgbWF0Y2hpbmcgaXMgdW5hdmFpbGFibGUuCisvLyBOb3RlIDU6IFBDIG1hdGNoIGlzIG5vdCByZWNvbW1lbmRlZCBmb3Igd2F0Y2hwb2ludHMgYmVjYXVzZSBpdCBzdG9wcyBhZnRlcgorLy8gdGhlIGluc3RydWN0aW9uLiBJdCBtYWlubHkgZ3VhcmRzIGFuZCB0cmlnZ2VycyB0aGUgRVRNLgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9GVU5DVElPTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0ZVTkNUSU9OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfRlVOQ1RJT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9EV1RfT19DT01QMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENPTVAKKy8vCisvLyBSZWZlcmVuY2UgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0IFBDIG9yIHRoZSBkYXRhIGFkZHJlc3MgYXMgZ2l2ZW4gYnkKKy8vIEZVTkNUSU9OMi4KKyNkZWZpbmUgQ1BVX0RXVF9DT01QMl9DT01QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfRFdUX0NPTVAyX0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9EV1RfQ09NUDJfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fTUFTSzIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMzowXSBNQVNLCisvLworLy8gTWFzayBvbiBkYXRhIGFkZHJlc3Mgd2hlbiBtYXRjaGluZyBhZ2FpbnN0IENPTVAyLiBUaGlzIGlzIHRoZSBzaXplIG9mIHRoZQorLy8gaWdub3JlIG1hc2suIFRoYXQgaXMsIERXVCBtYXRjaGluZyBpcyBwZXJmb3JtZWQgYXM6KEFERFIgQU5EZWQgd2l0aCAoMHhGRkZGCisvLyBsZWZ0IGJpdC1zaGlmdGVkIGJ5IE1BU0spKSA9PSBDT01QMi4gSG93ZXZlciwgdGhlIGFjdHVhbCBjb21wYXJpc29uIGlzCisvLyBzbGlnaHRseSBtb3JlIGNvbXBsZXggdG8gZW5hYmxlIG1hdGNoaW5nIGFuIGFkZHJlc3Mgd2hlcmV2ZXIgaXQgYXBwZWFycyBvbiBhCisvLyBidXMuIFNvLCBpZiBDT01QMiBpcyAzLCB0aGlzIG1hdGNoZXMgYSB3b3JkIGFjY2VzcyBvZiAwLCBiZWNhdXNlIDMgd291bGQgYmUKKy8vIHdpdGhpbiB0aGUgd29yZC4KKyNkZWZpbmUgQ1BVX0RXVF9NQVNLMl9NQVNLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRFdUX01BU0syX01BU0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIENQVV9EV1RfTUFTSzJfTUFTS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fRlVOQ1RJT04yCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gTUFUQ0hFRAorLy8KKy8vIFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBjb21wYXJhdG9yIG1hdGNoZXMsIGFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUKKy8vIG9wZXJhdGlvbiBkZWZpbmVkIGJ5IEZVTkNUSU9OIGhhcyBvY2N1cnJlZCBzaW5jZSB0aGlzIGJpdCB3YXMgbGFzdCByZWFkLgorLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBvbiByZWFkLgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMl9NQVRDSEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04yX01BVENIRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjJfTUFUQ0hFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMl9NQVRDSEVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICAgWzVdIEVNSVRSQU5HRQorLy8KKy8vIEVtaXQgcmFuZ2UgZmllbGQuIFRoaXMgYml0IHBlcm1pdHMgZW1pdHRpbmcgb2Zmc2V0IHdoZW4gcmFuZ2UgbWF0Y2ggb2NjdXJzLgorLy8gUEMgc2FtcGxpbmcgaXMgbm90IHN1cHBvcnRlZCB3aGVuIGVtaXQgcmFuZ2UgaXMgZW5hYmxlZC4KKy8vIFRoaXMgZmllbGQgb25seSBhcHBsaWVzIGZvcjogRlVOQ1RJT04gPSAxLCAyLCAzLCAxMiwgMTMsIDE0LCBhbmQgMTUuCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04yX0VNSVRSQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjJfRU1JVFJBTkdFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMl9FTUlUUkFOR0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04yX0VNSVRSQU5HRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzM6MF0gRlVOQ1RJT04KKy8vCisvLyBGdW5jdGlvbiBzZXR0aW5ncy4KKy8vCisvLyAweDA6IERpc2FibGVkCisvLyAweDE6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBhbmQgZW1pdCBQQyB0aHJvdWdoIElUTS4gRU1JVFJBTkdFID0gMSwgZW1pdAorLy8gYWRkcmVzcyBvZmZzZXQgdGhyb3VnaCBJVE0KKy8vIDB4MjogRU1JVFJBTkdFID0gMCwgZW1pdCBkYXRhIHRocm91Z2ggSVRNIG9uIHJlYWQgYW5kIHdyaXRlLiBFTUlUUkFOR0UgPSAxLAorLy8gZW1pdCBkYXRhIGFuZCBhZGRyZXNzIG9mZnNldCB0aHJvdWdoIElUTSBvbiByZWFkIG9yIHdyaXRlLgorLy8gMHgzOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgYW5kIGRhdGEgdmFsdWUgdGhyb3VnaCBJVE0gb24gcmVhZCBvciB3cml0ZS4KKy8vIEVNSVRSQU5HRSA9IDEsIGVtaXQgYWRkcmVzcyBvZmZzZXQgYW5kIGRhdGEgdmFsdWUgdGhyb3VnaCBJVE0gb24gcmVhZCBvcgorLy8gd3JpdGUuCisvLyAweDQ6IFdhdGNocG9pbnQgb24gUEMgbWF0Y2guCisvLyAweDU6IFdhdGNocG9pbnQgb24gcmVhZC4KKy8vIDB4NjogV2F0Y2hwb2ludCBvbiB3cml0ZS4KKy8vIDB4NzogV2F0Y2hwb2ludCBvbiByZWFkIG9yIHdyaXRlLgorLy8gMHg4OiBFVE0gdHJpZ2dlciBvbiBQQyBtYXRjaAorLy8gMHg5OiBFVE0gdHJpZ2dlciBvbiByZWFkCisvLyAweEE6IEVUTSB0cmlnZ2VyIG9uIHdyaXRlCisvLyAweEI6IEVUTSB0cmlnZ2VyIG9uIHJlYWQgb3Igd3JpdGUKKy8vIDB4QzogRU1JVFJBTkdFID0gMCwgc2FtcGxlIGRhdGEgZm9yIHJlYWQgdHJhbnNmZXJzLiBFTUlUUkFOR0UgPSAxLCBzYW1wbGUKKy8vIERhZGRyIChsb3dlciAxNiBiaXRzKSBmb3IgcmVhZCB0cmFuc2ZlcnMKKy8vIDB4RDogRU1JVFJBTkdFID0gMCwgc2FtcGxlIGRhdGEgZm9yIHdyaXRlIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwgc2FtcGxlCisvLyBEYWRkciAobG93ZXIgMTYgYml0cykgZm9yIHdyaXRlIHRyYW5zZmVycworLy8gMHhFOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgKyBkYXRhIGZvciByZWFkIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwKKy8vIHNhbXBsZSBEYWRkciAobG93ZXIgMTYgYml0cykgKyBkYXRhIGZvciByZWFkIHRyYW5zZmVycworLy8gMHhGOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgKyBkYXRhIGZvciB3cml0ZSB0cmFuc2ZlcnMuIEVNSVRSQU5HRSA9IDEsCisvLyBzYW1wbGUgRGFkZHIgKGxvd2VyIDE2IGJpdHMpICsgZGF0YSBmb3Igd3JpdGUgdHJhbnNmZXJzCisvLworLy8gTm90ZSAxOiBJZiB0aGUgRVRNIGlzIG5vdCBmaXR0ZWQsIHRoZW4gRVRNIHRyaWdnZXIgaXMgbm90IHBvc3NpYmxlLgorLy8gTm90ZSAyOiBEYXRhIHZhbHVlIGlzIG9ubHkgc2FtcGxlZCBmb3IgYWNjZXNzZXMgdGhhdCBkbyBub3QgZmF1bHQgKE1QVSBvcgorLy8gYnVzIGZhdWx0KS4gVGhlIFBDIGlzIHNhbXBsZWQgaXJyZXNwZWN0aXZlIG9mIGFueSBmYXVsdHMuIFRoZSBQQyBpcyBvbmx5CisvLyBzYW1wbGVkIGZvciB0aGUgZmlyc3QgYWRkcmVzcyBvZiBhIGJ1cnN0LgorLy8gTm90ZSAzOiBQQyBtYXRjaCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHdhdGNocG9pbnRzIGJlY2F1c2UgaXQgc3RvcHMgYWZ0ZXIKKy8vIHRoZSBpbnN0cnVjdGlvbi4gSXQgbWFpbmx5IGd1YXJkcyBhbmQgdHJpZ2dlcnMgdGhlIEVUTS4KKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjJfRlVOQ1RJT05fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMl9GVU5DVElPTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04yX0ZVTkNUSU9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fQ09NUDMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDT01QCisvLworLy8gUmVmZXJlbmNlIHZhbHVlIHRvIGNvbXBhcmUgYWdhaW5zdCBQQyBvciB0aGUgZGF0YSBhZGRyZXNzIGFzIGdpdmVuIGJ5CisvLyBGVU5DVElPTjMuCisjZGVmaW5lIENQVV9EV1RfQ09NUDNfQ09NUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0RXVF9DT01QM19DT01QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfRFdUX0NPTVAzX0NPTVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX01BU0szCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzM6MF0gTUFTSworLy8KKy8vIE1hc2sgb24gZGF0YSBhZGRyZXNzIHdoZW4gbWF0Y2hpbmcgYWdhaW5zdCBDT01QMy4gVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUKKy8vIGlnbm9yZSBtYXNrLiBUaGF0IGlzLCBEV1QgbWF0Y2hpbmcgaXMgcGVyZm9ybWVkIGFzOihBRERSIEFORGVkIHdpdGggKDB4RkZGRgorLy8gbGVmdCBiaXQtc2hpZnRlZCBieSBNQVNLKSkgPT0gQ09NUDMuIEhvd2V2ZXIsIHRoZSBhY3R1YWwgY29tcGFyaXNvbiBpcworLy8gc2xpZ2h0bHkgbW9yZSBjb21wbGV4IHRvIGVuYWJsZSBtYXRjaGluZyBhbiBhZGRyZXNzIHdoZXJldmVyIGl0IGFwcGVhcnMgb24gYQorLy8gYnVzLiBTbywgaWYgQ09NUDMgaXMgMywgdGhpcyBtYXRjaGVzIGEgd29yZCBhY2Nlc3Mgb2YgMCwgYmVjYXVzZSAzIHdvdWxkIGJlCisvLyB3aXRoaW4gdGhlIHdvcmQuCisjZGVmaW5lIENQVV9EV1RfTUFTSzNfTUFTS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX0RXVF9NQVNLM19NQVNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBDUFVfRFdUX01BU0szX01BU0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX0ZVTkNUSU9OMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIE1BVENIRUQKKy8vCisvLyBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgY29tcGFyYXRvciBtYXRjaGVzLCBhbmQgaW5kaWNhdGVzIHRoYXQgdGhlCisvLyBvcGVyYXRpb24gZGVmaW5lZCBieSBGVU5DVElPTiBoYXMgb2NjdXJyZWQgc2luY2UgdGhpcyBiaXQgd2FzIGxhc3QgcmVhZC4KKy8vIFRoaXMgYml0IGlzIGNsZWFyZWQgb24gcmVhZC4KKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjNfTUFUQ0hFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OM19NQVRDSEVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04zX01BVENIRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjNfTUFUQ0hFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgIFs1XSBFTUlUUkFOR0UKKy8vCisvLyBFbWl0IHJhbmdlIGZpZWxkLiBUaGlzIGJpdCBwZXJtaXRzIGVtaXR0aW5nIG9mZnNldCB3aGVuIHJhbmdlIG1hdGNoIG9jY3Vycy4KKy8vIFBDIHNhbXBsaW5nIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiBlbWl0IHJhbmdlIGlzIGVuYWJsZWQuCisvLyBUaGlzIGZpZWxkIG9ubHkgYXBwbGllcyBmb3I6IEZVTkNUSU9OID0gMSwgMiwgMywgMTIsIDEzLCAxNCwgYW5kIDE1LgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OM19FTUlUUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04zX0VNSVRSQU5HRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjNfRU1JVFJBTkdFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OM19FTUlUUkFOR0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgIFszOjBdIEZVTkNUSU9OCisvLworLy8gRnVuY3Rpb24gc2V0dGluZ3MuCisvLworLy8gMHgwOiBEaXNhYmxlZAorLy8gMHgxOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgYW5kIGVtaXQgUEMgdGhyb3VnaCBJVE0uIEVNSVRSQU5HRSA9IDEsIGVtaXQKKy8vIGFkZHJlc3Mgb2Zmc2V0IHRocm91Z2ggSVRNCisvLyAweDI6IEVNSVRSQU5HRSA9IDAsIGVtaXQgZGF0YSB0aHJvdWdoIElUTSBvbiByZWFkIGFuZCB3cml0ZS4gRU1JVFJBTkdFID0gMSwKKy8vIGVtaXQgZGF0YSBhbmQgYWRkcmVzcyBvZmZzZXQgdGhyb3VnaCBJVE0gb24gcmVhZCBvciB3cml0ZS4KKy8vIDB4MzogRU1JVFJBTkdFID0gMCwgc2FtcGxlIFBDIGFuZCBkYXRhIHZhbHVlIHRocm91Z2ggSVRNIG9uIHJlYWQgb3Igd3JpdGUuCisvLyBFTUlUUkFOR0UgPSAxLCBlbWl0IGFkZHJlc3Mgb2Zmc2V0IGFuZCBkYXRhIHZhbHVlIHRocm91Z2ggSVRNIG9uIHJlYWQgb3IKKy8vIHdyaXRlLgorLy8gMHg0OiBXYXRjaHBvaW50IG9uIFBDIG1hdGNoLgorLy8gMHg1OiBXYXRjaHBvaW50IG9uIHJlYWQuCisvLyAweDY6IFdhdGNocG9pbnQgb24gd3JpdGUuCisvLyAweDc6IFdhdGNocG9pbnQgb24gcmVhZCBvciB3cml0ZS4KKy8vIDB4ODogRVRNIHRyaWdnZXIgb24gUEMgbWF0Y2gKKy8vIDB4OTogRVRNIHRyaWdnZXIgb24gcmVhZAorLy8gMHhBOiBFVE0gdHJpZ2dlciBvbiB3cml0ZQorLy8gMHhCOiBFVE0gdHJpZ2dlciBvbiByZWFkIG9yIHdyaXRlCisvLyAweEM6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBkYXRhIGZvciByZWFkIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwgc2FtcGxlCisvLyBEYWRkciAobG93ZXIgMTYgYml0cykgZm9yIHJlYWQgdHJhbnNmZXJzCisvLyAweEQ6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBkYXRhIGZvciB3cml0ZSB0cmFuc2ZlcnMuIEVNSVRSQU5HRSA9IDEsIHNhbXBsZQorLy8gRGFkZHIgKGxvd2VyIDE2IGJpdHMpIGZvciB3cml0ZSB0cmFuc2ZlcnMKKy8vIDB4RTogRU1JVFJBTkdFID0gMCwgc2FtcGxlIFBDICsgZGF0YSBmb3IgcmVhZCB0cmFuc2ZlcnMuIEVNSVRSQU5HRSA9IDEsCisvLyBzYW1wbGUgRGFkZHIgKGxvd2VyIDE2IGJpdHMpICsgZGF0YSBmb3IgcmVhZCB0cmFuc2ZlcnMKKy8vIDB4RjogRU1JVFJBTkdFID0gMCwgc2FtcGxlIFBDICsgZGF0YSBmb3Igd3JpdGUgdHJhbnNmZXJzLiBFTUlUUkFOR0UgPSAxLAorLy8gc2FtcGxlIERhZGRyIChsb3dlciAxNiBiaXRzKSArIGRhdGEgZm9yIHdyaXRlIHRyYW5zZmVycworLy8KKy8vIE5vdGUgMTogSWYgdGhlIEVUTSBpcyBub3QgZml0dGVkLCB0aGVuIEVUTSB0cmlnZ2VyIGlzIG5vdCBwb3NzaWJsZS4KKy8vIE5vdGUgMjogRGF0YSB2YWx1ZSBpcyBvbmx5IHNhbXBsZWQgZm9yIGFjY2Vzc2VzIHRoYXQgZG8gbm90IGZhdWx0IChNUFUgb3IKKy8vIGJ1cyBmYXVsdCkuIFRoZSBQQyBpcyBzYW1wbGVkIGlycmVzcGVjdGl2ZSBvZiBhbnkgZmF1bHRzLiBUaGUgUEMgaXMgb25seQorLy8gc2FtcGxlZCBmb3IgdGhlIGZpcnN0IGFkZHJlc3Mgb2YgYSBidXJzdC4KKy8vIE5vdGUgMzogUEMgbWF0Y2ggaXMgbm90IHJlY29tbWVuZGVkIGZvciB3YXRjaHBvaW50cyBiZWNhdXNlIGl0IHN0b3BzIGFmdGVyCisvLyB0aGUgaW5zdHJ1Y3Rpb24uIEl0IG1haW5seSBndWFyZHMgYW5kIHRyaWdnZXJzIHRoZSBFVE0uCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04zX0ZVTkNUSU9OX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjNfRlVOQ1RJT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OM19GVU5DVElPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQ1BVX0RXVF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfZnBiLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfZnBiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4ZGVmOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9mcGIuaApAQCAtMCwwICsxLDQ0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2NwdV9mcGJfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQ1BVX0ZQQl9IX18KKyNkZWZpbmUgX19IV19DUFVfRlBCX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIENQVV9GUEIgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQ29udHJvbAorI2RlZmluZSBDUFVfRlBCX09fQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIFJlbWFwCisjZGVmaW5lIENQVV9GUEJfT19SRU1BUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gQ29tcGFyYXRvciAwCisjZGVmaW5lIENQVV9GUEJfT19DT01QMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gQ29tcGFyYXRvciAxCisjZGVmaW5lIENQVV9GUEJfT19DT01QMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gQ29tcGFyYXRvciAyCisjZGVmaW5lIENQVV9GUEJfT19DT01QMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gQ29tcGFyYXRvciAzCisjZGVmaW5lIENQVV9GUEJfT19DT01QMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gQ29tcGFyYXRvciA0CisjZGVmaW5lIENQVV9GUEJfT19DT01QNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gQ29tcGFyYXRvciA1CisjZGVmaW5lIENQVV9GUEJfT19DT01QNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gQ29tcGFyYXRvciA2CisjZGVmaW5lIENQVV9GUEJfT19DT01QNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworLy8gQ29tcGFyYXRvciA3CisjZGVmaW5lIENQVV9GUEJfT19DT01QNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRlBCX09fQ1RSTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTM6MTJdIE5VTV9DT0RFMgorLy8KKy8vIE51bWJlciBvZiBmdWxsIGJhbmtzIG9mIGNvZGUgY29tcGFyYXRvcnMsIHNpeHRlZW4gY29tcGFyYXRvcnMgcGVyIGJhbmsuCisvLyBXaGVyZSBsZXNzIHRoYW4gc2l4dGVlbiBjb2RlIGNvbXBhcmF0b3JzIGFyZSBwcm92aWRlZCwgdGhlIGJhbmsgY291bnQgaXMKKy8vIHplcm8sIGFuZCB0aGUgbnVtYmVyIHByZXNlbnQgaW5kaWNhdGVkIGJ5IE5VTV9DT0RFMS4gVGhpcyByZWFkIG9ubHkgZmllbGQKKy8vIGNvbnRhaW5zIDMnYjAwMCB0byBpbmRpY2F0ZSAwIGJhbmtzIGZvciBDb3J0ZXgtTSBwcm9jZXNzb3IuCisjZGVmaW5lIENQVV9GUEJfQ1RSTF9OVU1fQ09ERTJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX0ZQQl9DVFJMX05VTV9DT0RFMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBDUFVfRlBCX0NUUkxfTlVNX0NPREUyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjhdIE5VTV9MSVQKKy8vCisvLyBOdW1iZXIgb2YgbGl0ZXJhbCBzbG90cyBmaWVsZC4KKy8vCisvLyAweDA6IE5vIGxpdGVyYWwgc2xvdHMKKy8vIDB4MjogVHdvIGxpdGVyYWwgc2xvdHMKKyNkZWZpbmUgQ1BVX0ZQQl9DVFJMX05VTV9MSVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRlBCX0NUUkxfTlVNX0xJVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIENQVV9GUEJfQ1RSTF9OVU1fTElUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6NF0gTlVNX0NPREUxCisvLworLy8gTnVtYmVyIG9mIGNvZGUgc2xvdHMgZmllbGQuCisvLworLy8gMHgwOiBObyBjb2RlIHNsb3RzCisvLyAweDI6IFR3byBjb2RlIHNsb3RzCisvLyAweDY6IFNpeCBjb2RlIHNsb3RzCisjZGVmaW5lIENQVV9GUEJfQ1RSTF9OVU1fQ09ERTFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX0ZQQl9DVFJMX05VTV9DT0RFMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBDUFVfRlBCX0NUUkxfTlVNX0NPREUxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzFdIEtFWQorLy8KKy8vIEtleSBmaWVsZC4gSW4gb3JkZXIgdG8gd3JpdGUgdG8gdGhpcyByZWdpc3RlciwgdGhpcyBiaXQtZmllbGQgbXVzdCBiZQorLy8gd3JpdHRlbiB0byAnMScuIFRoaXMgYml0IGFsd2F5cyByZWFkcyAwLgorI2RlZmluZSBDUFVfRlBCX0NUUkxfS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9GUEJfQ1RSTF9LRVlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX0ZQQl9DVFJMX0tFWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfRlBCX0NUUkxfS0VZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOQUJMRQorLy8KKy8vIEZsYXNoIHBhdGNoIHVuaXQgZW5hYmxlIGJpdAorLy8KKy8vIDB4MDogRmxhc2ggcGF0Y2ggdW5pdCBkaXNhYmxlZAorLy8gMHgxOiBGbGFzaCBwYXRjaCB1bml0IGVuYWJsZWQKKyNkZWZpbmUgQ1BVX0ZQQl9DVFJMX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NUUkxfRU5BQkxFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9GUEJfQ1RSTF9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0ZQQl9DVFJMX0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9GUEJfT19SRU1BUAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzI4OjVdIFJFTUFQCisvLworLy8gUmVtYXAgYmFzZSBhZGRyZXNzIGZpZWxkLgorI2RlZmluZSBDUFVfRlBCX1JFTUFQX1JFTUFQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9GUEJfUkVNQVBfUkVNQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUZGRkZGRTAKKyNkZWZpbmUgQ1BVX0ZQQl9SRU1BUF9SRU1BUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9GUEJfT19DT01QMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MzBdIFJFUExBQ0UKKy8vCisvLyBUaGlzIHNlbGVjdHMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIENPTVAgYWRkcmVzcyBpcyBtYXRjaGVkLiBBZGRyZXNzCisvLyByZW1hcHBpbmcgb25seSB0YWtlcyBwbGFjZSBmb3IgdGhlIDB4MCBzZXR0aW5nLgorLy8KKy8vIDB4MDogUmVtYXAgdG8gcmVtYXAgYWRkcmVzcy4gU2VlIFJFTUFQLlJFTUFQCisvLyAweDE6IFNldCBCS1BUIG9uIGxvd2VyIGhhbGZ3b3JkLCB1cHBlciBpcyB1bmFmZmVjdGVkCisvLyAweDI6IFNldCBCS1BUIG9uIHVwcGVyIGhhbGZ3b3JkLCBsb3dlciBpcyB1bmFmZmVjdGVkCisvLyAweDM6IFNldCBCS1BUIG9uIGJvdGggbG93ZXIgYW5kIHVwcGVyIGhhbGZ3b3Jkcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMF9SRVBMQUNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfRlBCX0NPTVAwX1JFUExBQ0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDBfUkVQTEFDRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICBbMjg6Ml0gQ09NUAorLy8KKy8vIENvbXBhcmlzb24gYWRkcmVzcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMF9DT01QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfRlBCX0NPTVAwX0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFGRkZGRkZDCisjZGVmaW5lIENQVV9GUEJfQ09NUDBfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMF0gRU5BQkxFCisvLworLy8gQ29tcGFyZSBhbmQgcmVtYXAgZW5hYmxlIGNvbXBhcmF0b3IgMC4gQ1RSTC5FTkFCTEUgbXVzdCBhbHNvIGJlIHNldCB0bworLy8gZW5hYmxlIGNvbXBhcmlzb25zLgorLy8KKy8vIDB4MDogQ29tcGFyZSBhbmQgcmVtYXAgZm9yIGNvbXBhcmF0b3IgMCBkaXNhYmxlZAorLy8gMHgxOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciAwIGVuYWJsZWQKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVAwX0VOQUJMRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDBfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMF9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9GUEJfT19DT01QMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MzBdIFJFUExBQ0UKKy8vCisvLyBUaGlzIHNlbGVjdHMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIENPTVAgYWRkcmVzcyBpcyBtYXRjaGVkLiBBZGRyZXNzCisvLyByZW1hcHBpbmcgb25seSB0YWtlcyBwbGFjZSBmb3IgdGhlIDB4MCBzZXR0aW5nLgorLy8KKy8vIDB4MDogUmVtYXAgdG8gcmVtYXAgYWRkcmVzcy4gU2VlIFJFTUFQLlJFTUFQCisvLyAweDE6IFNldCBCS1BUIG9uIGxvd2VyIGhhbGZ3b3JkLCB1cHBlciBpcyB1bmFmZmVjdGVkCisvLyAweDI6IFNldCBCS1BUIG9uIHVwcGVyIGhhbGZ3b3JkLCBsb3dlciBpcyB1bmFmZmVjdGVkCisvLyAweDM6IFNldCBCS1BUIG9uIGJvdGggbG93ZXIgYW5kIHVwcGVyIGhhbGZ3b3Jkcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMV9SRVBMQUNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfRlBCX0NPTVAxX1JFUExBQ0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDFfUkVQTEFDRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICBbMjg6Ml0gQ09NUAorLy8KKy8vIENvbXBhcmlzb24gYWRkcmVzcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMV9DT01QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfRlBCX0NPTVAxX0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFGRkZGRkZDCisjZGVmaW5lIENQVV9GUEJfQ09NUDFfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMF0gRU5BQkxFCisvLworLy8gQ29tcGFyZSBhbmQgcmVtYXAgZW5hYmxlIGNvbXBhcmF0b3IgMS4gQ1RSTC5FTkFCTEUgbXVzdCBhbHNvIGJlIHNldCB0bworLy8gZW5hYmxlIGNvbXBhcmlzb25zLgorLy8KKy8vIDB4MDogQ29tcGFyZSBhbmQgcmVtYXAgZm9yIGNvbXBhcmF0b3IgMSBkaXNhYmxlZAorLy8gMHgxOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciAxIGVuYWJsZWQKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVAxX0VOQUJMRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDFfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMV9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9GUEJfT19DT01QMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MzBdIFJFUExBQ0UKKy8vCisvLyBUaGlzIHNlbGVjdHMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIENPTVAgYWRkcmVzcyBpcyBtYXRjaGVkLiBBZGRyZXNzCisvLyByZW1hcHBpbmcgb25seSB0YWtlcyBwbGFjZSBmb3IgdGhlIDB4MCBzZXR0aW5nLgorLy8KKy8vIDB4MDogUmVtYXAgdG8gcmVtYXAgYWRkcmVzcy4gU2VlIFJFTUFQLlJFTUFQCisvLyAweDE6IFNldCBCS1BUIG9uIGxvd2VyIGhhbGZ3b3JkLCB1cHBlciBpcyB1bmFmZmVjdGVkCisvLyAweDI6IFNldCBCS1BUIG9uIHVwcGVyIGhhbGZ3b3JkLCBsb3dlciBpcyB1bmFmZmVjdGVkCisvLyAweDM6IFNldCBCS1BUIG9uIGJvdGggbG93ZXIgYW5kIHVwcGVyIGhhbGZ3b3Jkcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMl9SRVBMQUNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfRlBCX0NPTVAyX1JFUExBQ0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDJfUkVQTEFDRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICBbMjg6Ml0gQ09NUAorLy8KKy8vIENvbXBhcmlzb24gYWRkcmVzcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMl9DT01QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfRlBCX0NPTVAyX0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFGRkZGRkZDCisjZGVmaW5lIENQVV9GUEJfQ09NUDJfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMF0gRU5BQkxFCisvLworLy8gQ29tcGFyZSBhbmQgcmVtYXAgZW5hYmxlIGNvbXBhcmF0b3IgMi4gQ1RSTC5FTkFCTEUgbXVzdCBhbHNvIGJlIHNldCB0bworLy8gZW5hYmxlIGNvbXBhcmlzb25zLgorLy8KKy8vIDB4MDogQ29tcGFyZSBhbmQgcmVtYXAgZm9yIGNvbXBhcmF0b3IgMiBkaXNhYmxlZAorLy8gMHgxOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciAyIGVuYWJsZWQKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVAyX0VOQUJMRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDJfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMl9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9GUEJfT19DT01QMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MzBdIFJFUExBQ0UKKy8vCisvLyBUaGlzIHNlbGVjdHMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIENPTVAgYWRkcmVzcyBpcyBtYXRjaGVkLiBBZGRyZXNzCisvLyByZW1hcHBpbmcgb25seSB0YWtlcyBwbGFjZSBmb3IgdGhlIDB4MCBzZXR0aW5nLgorLy8KKy8vIDB4MDogUmVtYXAgdG8gcmVtYXAgYWRkcmVzcy4gU2VlIFJFTUFQLlJFTUFQCisvLyAweDE6IFNldCBCS1BUIG9uIGxvd2VyIGhhbGZ3b3JkLCB1cHBlciBpcyB1bmFmZmVjdGVkCisvLyAweDI6IFNldCBCS1BUIG9uIHVwcGVyIGhhbGZ3b3JkLCBsb3dlciBpcyB1bmFmZmVjdGVkCisvLyAweDM6IFNldCBCS1BUIG9uIGJvdGggbG93ZXIgYW5kIHVwcGVyIGhhbGZ3b3Jkcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QM19SRVBMQUNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfRlBCX0NPTVAzX1JFUExBQ0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDNfUkVQTEFDRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICBbMjg6Ml0gQ09NUAorLy8KKy8vIENvbXBhcmlzb24gYWRkcmVzcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QM19DT01QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfRlBCX0NPTVAzX0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFGRkZGRkZDCisjZGVmaW5lIENQVV9GUEJfQ09NUDNfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMF0gRU5BQkxFCisvLworLy8gQ29tcGFyZSBhbmQgcmVtYXAgZW5hYmxlIGNvbXBhcmF0b3IgMy4gQ1RSTC5FTkFCTEUgbXVzdCBhbHNvIGJlIHNldCB0bworLy8gZW5hYmxlIGNvbXBhcmlzb25zLgorLy8KKy8vIDB4MDogQ29tcGFyZSBhbmQgcmVtYXAgZm9yIGNvbXBhcmF0b3IgMyBkaXNhYmxlZAorLy8gMHgxOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciAzIGVuYWJsZWQKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QM19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVAzX0VOQUJMRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDNfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QM19FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9GUEJfT19DT01QNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MzBdIFJFUExBQ0UKKy8vCisvLyBUaGlzIHNlbGVjdHMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIENPTVAgYWRkcmVzcyBpcyBtYXRjaGVkLiBBZGRyZXNzCisvLyByZW1hcHBpbmcgb25seSB0YWtlcyBwbGFjZSBmb3IgdGhlIDB4MCBzZXR0aW5nLgorLy8KKy8vIDB4MDogUmVtYXAgdG8gcmVtYXAgYWRkcmVzcy4gU2VlIFJFTUFQLlJFTUFQCisvLyAweDE6IFNldCBCS1BUIG9uIGxvd2VyIGhhbGZ3b3JkLCB1cHBlciBpcyB1bmFmZmVjdGVkCisvLyAweDI6IFNldCBCS1BUIG9uIHVwcGVyIGhhbGZ3b3JkLCBsb3dlciBpcyB1bmFmZmVjdGVkCisvLyAweDM6IFNldCBCS1BUIG9uIGJvdGggbG93ZXIgYW5kIHVwcGVyIGhhbGZ3b3Jkcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNF9SRVBMQUNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfRlBCX0NPTVA0X1JFUExBQ0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDRfUkVQTEFDRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICBbMjg6Ml0gQ09NUAorLy8KKy8vIENvbXBhcmlzb24gYWRkcmVzcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNF9DT01QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfRlBCX0NPTVA0X0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFGRkZGRkZDCisjZGVmaW5lIENQVV9GUEJfQ09NUDRfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMF0gRU5BQkxFCisvLworLy8gQ29tcGFyZSBhbmQgcmVtYXAgZW5hYmxlIGNvbXBhcmF0b3IgNC4gQ1RSTC5FTkFCTEUgbXVzdCBhbHNvIGJlIHNldCB0bworLy8gZW5hYmxlIGNvbXBhcmlzb25zLgorLy8KKy8vIDB4MDogQ29tcGFyZSBhbmQgcmVtYXAgZm9yIGNvbXBhcmF0b3IgNCBkaXNhYmxlZAorLy8gMHgxOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciA0IGVuYWJsZWQKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVA0X0VOQUJMRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDRfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNF9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9GUEJfT19DT01QNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MzBdIFJFUExBQ0UKKy8vCisvLyBUaGlzIHNlbGVjdHMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIENPTVAgYWRkcmVzcyBpcyBtYXRjaGVkLiBBZGRyZXNzCisvLyByZW1hcHBpbmcgb25seSB0YWtlcyBwbGFjZSBmb3IgdGhlIDB4MCBzZXR0aW5nLgorLy8KKy8vIDB4MDogUmVtYXAgdG8gcmVtYXAgYWRkcmVzcy4gU2VlIFJFTUFQLlJFTUFQCisvLyAweDE6IFNldCBCS1BUIG9uIGxvd2VyIGhhbGZ3b3JkLCB1cHBlciBpcyB1bmFmZmVjdGVkCisvLyAweDI6IFNldCBCS1BUIG9uIHVwcGVyIGhhbGZ3b3JkLCBsb3dlciBpcyB1bmFmZmVjdGVkCisvLyAweDM6IFNldCBCS1BUIG9uIGJvdGggbG93ZXIgYW5kIHVwcGVyIGhhbGZ3b3Jkcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNV9SRVBMQUNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfRlBCX0NPTVA1X1JFUExBQ0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDVfUkVQTEFDRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICBbMjg6Ml0gQ09NUAorLy8KKy8vIENvbXBhcmlzb24gYWRkcmVzcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNV9DT01QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfRlBCX0NPTVA1X0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFGRkZGRkZDCisjZGVmaW5lIENQVV9GUEJfQ09NUDVfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMF0gRU5BQkxFCisvLworLy8gQ29tcGFyZSBhbmQgcmVtYXAgZW5hYmxlIGNvbXBhcmF0b3IgNS4gQ1RSTC5FTkFCTEUgbXVzdCBhbHNvIGJlIHNldCB0bworLy8gZW5hYmxlIGNvbXBhcmlzb25zLgorLy8KKy8vIDB4MDogQ29tcGFyZSBhbmQgcmVtYXAgZm9yIGNvbXBhcmF0b3IgNSBkaXNhYmxlZAorLy8gMHgxOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciA1IGVuYWJsZWQKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVA1X0VOQUJMRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDVfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNV9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9GUEJfT19DT01QNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MzBdIFJFUExBQ0UKKy8vCisvLyBUaGlzIHNlbGVjdHMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIENPTVAgYWRkcmVzcyBpcyBtYXRjaGVkLiBDb21wYXJhdG9yIDYgaXMKKy8vIGEgbGl0ZXJhbCBjb21wYXJhdG9yIGFuZCB0aGUgb25seSBzdXBwb3J0ZWQgc2V0dGluZyBpcyAweDAuIE90aGVyIHNldHRpbmdzCisvLyB3aWxsIGJlIGlnbm9yZWQuCisvLworLy8gMHgwOiBSZW1hcCB0byByZW1hcCBhZGRyZXNzLiBTZWUgUkVNQVAuUkVNQVAKKy8vIDB4MTogU2V0IEJLUFQgb24gbG93ZXIgaGFsZndvcmQsIHVwcGVyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MjogU2V0IEJLUFQgb24gdXBwZXIgaGFsZndvcmQsIGxvd2VyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MzogU2V0IEJLUFQgb24gYm90aCBsb3dlciBhbmQgdXBwZXIgaGFsZndvcmRzLgorI2RlZmluZSBDUFVfRlBCX0NPTVA2X1JFUExBQ0VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9GUEJfQ09NUDZfUkVQTEFDRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNl9SRVBMQUNFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogIFsyODoyXSBDT01QCisvLworLy8gQ29tcGFyaXNvbiBhZGRyZXNzLgorI2RlZmluZSBDUFVfRlBCX0NPTVA2X0NPTVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENQVV9GUEJfQ09NUDZfQ09NUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUZGRkZGRkMKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNl9DT01QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFswXSBFTkFCTEUKKy8vCisvLyBDb21wYXJlIGFuZCByZW1hcCBlbmFibGUgY29tcGFyYXRvciA2LiBDVFJMLkVOQUJMRSBtdXN0IGFsc28gYmUgc2V0IHRvCisvLyBlbmFibGUgY29tcGFyaXNvbnMuCisvLworLy8gMHgwOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciA2IGRpc2FibGVkCisvLyAweDE6IENvbXBhcmUgYW5kIHJlbWFwIGZvciBjb21wYXJhdG9yIDYgZW5hYmxlZAorI2RlZmluZSBDUFVfRlBCX0NPTVA2X0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9GUEJfQ09NUDZfRU5BQkxFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNl9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVA2X0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0ZQQl9PX0NPTVA3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMTozMF0gUkVQTEFDRQorLy8KKy8vIFRoaXMgc2VsZWN0cyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgQ09NUCBhZGRyZXNzIGlzIG1hdGNoZWQuIENvbXBhcmF0b3IgNyBpcworLy8gYSBsaXRlcmFsIGNvbXBhcmF0b3IgYW5kIHRoZSBvbmx5IHN1cHBvcnRlZCBzZXR0aW5nIGlzIDB4MC4gT3RoZXIgc2V0dGluZ3MKKy8vIHdpbGwgYmUgaWdub3JlZC4KKy8vCisvLyAweDA6IFJlbWFwIHRvIHJlbWFwIGFkZHJlc3MuIFNlZSBSRU1BUC5SRU1BUAorLy8gMHgxOiBTZXQgQktQVCBvbiBsb3dlciBoYWxmd29yZCwgdXBwZXIgaXMgdW5hZmZlY3RlZAorLy8gMHgyOiBTZXQgQktQVCBvbiB1cHBlciBoYWxmd29yZCwgbG93ZXIgaXMgdW5hZmZlY3RlZAorLy8gMHgzOiBTZXQgQktQVCBvbiBib3RoIGxvd2VyIGFuZCB1cHBlciBoYWxmd29yZHMuCisjZGVmaW5lIENQVV9GUEJfQ09NUDdfUkVQTEFDRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QN19SRVBMQUNFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDMDAwMDAwMAorI2RlZmluZSBDUFVfRlBCX0NPTVA3X1JFUExBQ0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgWzI4OjJdIENPTVAKKy8vCisvLyBDb21wYXJpc29uIGFkZHJlc3MuCisjZGVmaW5lIENQVV9GUEJfQ09NUDdfQ09NUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QN19DT01QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRkZGRkZGQworI2RlZmluZSBDUFVfRlBCX0NPTVA3X0NPTVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOQUJMRQorLy8KKy8vIENvbXBhcmUgYW5kIHJlbWFwIGVuYWJsZSBjb21wYXJhdG9yIDcuIENUUkwuRU5BQkxFIG11c3QgYWxzbyBiZSBzZXQgdG8KKy8vIGVuYWJsZSBjb21wYXJpc29ucy4KKy8vCisvLyAweDA6IENvbXBhcmUgYW5kIHJlbWFwIGZvciBjb21wYXJhdG9yIDcgZGlzYWJsZWQKKy8vIDB4MTogQ29tcGFyZSBhbmQgcmVtYXAgZm9yIGNvbXBhcmF0b3IgNyBlbmFibGVkCisjZGVmaW5lIENQVV9GUEJfQ09NUDdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QN19FTkFCTEVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfRlBCX0NPTVA3X0VOQUJMRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9GUEJfQ09NUDdfRU5BQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19DUFVfRlBCX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9pdG0uaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9pdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzY2ZTRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X2l0bS5oCkBAIC0wLDAgKzEsMTEyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2NwdV9pdG1faAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQ1BVX0lUTV9IX18KKyNkZWZpbmUgX19IV19DUFVfSVRNX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIENQVV9JVE0gY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gU3RpbXVsdXMgUG9ydCAwCisjZGVmaW5lIENQVV9JVE1fT19TVElNMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gU3RpbXVsdXMgUG9ydCAxCisjZGVmaW5lIENQVV9JVE1fT19TVElNMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gU3RpbXVsdXMgUG9ydCAyCisjZGVmaW5lIENQVV9JVE1fT19TVElNMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gU3RpbXVsdXMgUG9ydCAzCisjZGVmaW5lIENQVV9JVE1fT19TVElNMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gU3RpbXVsdXMgUG9ydCA0CisjZGVmaW5lIENQVV9JVE1fT19TVElNNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gU3RpbXVsdXMgUG9ydCA1CisjZGVmaW5lIENQVV9JVE1fT19TVElNNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gU3RpbXVsdXMgUG9ydCA2CisjZGVmaW5lIENQVV9JVE1fT19TVElNNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gU3RpbXVsdXMgUG9ydCA3CisjZGVmaW5lIENQVV9JVE1fT19TVElNNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gU3RpbXVsdXMgUG9ydCA4CisjZGVmaW5lIENQVV9JVE1fT19TVElNOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworLy8gU3RpbXVsdXMgUG9ydCA5CisjZGVmaW5lIENQVV9JVE1fT19TVElNOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8gU3RpbXVsdXMgUG9ydCAxMAorI2RlZmluZSBDUFVfSVRNX09fU1RJTTEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIFN0aW11bHVzIFBvcnQgMTEKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBTdGltdWx1cyBQb3J0IDEyCisjZGVmaW5lIENQVV9JVE1fT19TVElNMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKworLy8gU3RpbXVsdXMgUG9ydCAxMworI2RlZmluZSBDUFVfSVRNX09fU1RJTTEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisKKy8vIFN0aW11bHVzIFBvcnQgMTQKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorCisvLyBTdGltdWx1cyBQb3J0IDE1CisjZGVmaW5lIENQVV9JVE1fT19TVElNMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8gU3RpbXVsdXMgUG9ydCAxNgorI2RlZmluZSBDUFVfSVRNX09fU1RJTTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisKKy8vIFN0aW11bHVzIFBvcnQgMTcKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0xNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorCisvLyBTdGltdWx1cyBQb3J0IDE4CisjZGVmaW5lIENQVV9JVE1fT19TVElNMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKworLy8gU3RpbXVsdXMgUG9ydCAxOQorI2RlZmluZSBDUFVfSVRNX09fU1RJTTE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRDCisKKy8vIFN0aW11bHVzIFBvcnQgMjAKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0yMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorCisvLyBTdGltdWx1cyBQb3J0IDIxCisjZGVmaW5lIENQVV9JVE1fT19TVElNMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKworLy8gU3RpbXVsdXMgUG9ydCAyMgorI2RlZmluZSBDUFVfSVRNX09fU1RJTTIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4CisKKy8vIFN0aW11bHVzIFBvcnQgMjMKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QworCisvLyBTdGltdWx1cyBQb3J0IDI0CisjZGVmaW5lIENQVV9JVE1fT19TVElNMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKworLy8gU3RpbXVsdXMgUG9ydCAyNQorI2RlZmluZSBDUFVfSVRNX09fU1RJTTI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisKKy8vIFN0aW11bHVzIFBvcnQgMjYKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0yNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAorCisvLyBTdGltdWx1cyBQb3J0IDI3CisjZGVmaW5lIENQVV9JVE1fT19TVElNMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKworLy8gU3RpbXVsdXMgUG9ydCAyOAorI2RlZmluZSBDUFVfSVRNX09fU1RJTTI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisKKy8vIFN0aW11bHVzIFBvcnQgMjkKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0yOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NAorCisvLyBTdGltdWx1cyBQb3J0IDMwCisjZGVmaW5lIENQVV9JVE1fT19TVElNMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKKworLy8gU3RpbXVsdXMgUG9ydCAzMQorI2RlZmluZSBDUFVfSVRNX09fU1RJTTMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdDCisKKy8vIFRyYWNlIEVuYWJsZQorI2RlZmluZSBDUFVfSVRNX09fVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRTAwCisKKy8vIFRyYWNlIFByaXZpbGVnZQorI2RlZmluZSBDUFVfSVRNX09fVFBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRTQwCisKKy8vIFRyYWNlIENvbnRyb2wKKyNkZWZpbmUgQ1BVX0lUTV9PX1RDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEU4MAorCisvLyBMb2NrIEFjY2VzcworI2RlZmluZSBDUFVfSVRNX09fTEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkIwCisKKy8vIExvY2sgU3RhdHVzCisjZGVmaW5lIENQVV9JVE1fT19MU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMAorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMCBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0wX1NUSU0wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTBfU1RJTTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMF9TVElNMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0xCisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkExIGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTFfU1RJTTFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMV9TVElNMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0xX1NUSU0xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0yCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTIKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTIgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMl9TVElNMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0yX1NUSU0yX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTJfU1RJTTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMworLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMyBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0zX1NUSU0zX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTNfU1RJTTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNM19TVElNM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU00CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkE0IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTRfU1RJTTRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNNF9TVElNNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU00X1NUSU00X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU01CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTUKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTUgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNNV9TVElNNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU01X1NUSU01X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTVfU1RJTTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNNgorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BNiBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU02X1NUSU02X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTZfU1RJTTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNNl9TVElNNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU03CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkE3IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTdfU1RJTTdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNN19TVElNN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU03X1NUSU03X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU04CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTgKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTggaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNOF9TVElNOF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU04X1NUSU04X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTThfU1RJTThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNOQorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BOSBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU05X1NUSU05X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTlfU1RJTTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNOV9TVElNOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMTAKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTEwIGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTEwX1NUSU0xMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTBfU1RJTTEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0xMF9TVElNMTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0xMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0xMQorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMTEgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTFfU1RJTTExX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0xMV9TVElNMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTExX1NUSU0xMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTEyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTEyCisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkExMiBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0xMl9TVElNMTJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTEyX1NUSU0xMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTJfU1RJTTEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMTMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMTMKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTEzIGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTEzX1NUSU0xM19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTNfU1RJTTEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0xM19TVElNMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0xNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0xNAorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMTQgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTRfU1RJTTE0X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0xNF9TVElNMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTE0X1NUSU0xNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTE1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTE1CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkExNSBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0xNV9TVElNMTVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTE1X1NUSU0xNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTVfU1RJTTE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMTYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMTYKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTE2IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTE2X1NUSU0xNl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTZfU1RJTTE2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0xNl9TVElNMTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0xNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0xNworLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMTcgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTdfU1RJTTE3X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0xN19TVElNMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTE3X1NUSU0xN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTE4CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTE4CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkExOCBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0xOF9TVElNMThfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTE4X1NUSU0xOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMThfU1RJTTE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMTkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMTkKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTE5IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTE5X1NUSU0xOV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTlfU1RJTTE5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0xOV9TVElNMTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0yMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0yMAorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMjAgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjBfU1RJTTIwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0yMF9TVElNMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTIwX1NUSU0yMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTIxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTIxCisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkEyMSBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0yMV9TVElNMjFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTIxX1NUSU0yMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjFfU1RJTTIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMjIKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTIyIGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTIyX1NUSU0yMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjJfU1RJTTIyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0yMl9TVElNMjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0yMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0yMworLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMjMgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjNfU1RJTTIzX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0yM19TVElNMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTIzX1NUSU0yM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTI0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTI0CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkEyNCBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0yNF9TVElNMjRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTI0X1NUSU0yNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjRfU1RJTTI0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMjUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMjUKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTI1IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTI1X1NUSU0yNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjVfU1RJTTI1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0yNV9TVElNMjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0yNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0yNgorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMjYgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjZfU1RJTTI2X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0yNl9TVElNMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTI2X1NUSU0yNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTI3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTI3CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkEyNyBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0yN19TVElNMjdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTI3X1NUSU0yN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjdfU1RJTTI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMjgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMjgKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTI4IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTI4X1NUSU0yOF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjhfU1RJTTI4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0yOF9TVElNMjhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0yOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0yOQorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMjkgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjlfU1RJTTI5X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0yOV9TVElNMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTI5X1NUSU0yOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTMwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTMwCisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkEzMCBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0zMF9TVElNMzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTMwX1NUSU0zMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMzBfU1RJTTMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMzEKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTMxIGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTMxX1NUSU0zMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMzFfU1RJTTMxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0zMV9TVElNMzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1RFUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIFNUSU1FTkEzMQorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDMxLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEzMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTMxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIFNUSU1FTkEzMAorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDMwLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEzMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIFNUSU1FTkEyOQorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDI5LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIFNUSU1FTkEyOAorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDI4LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIFNUSU1FTkEyNworLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDI3LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIFNUSU1FTkEyNgorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDI2LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIFNUSU1FTkEyNQorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDI1LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFNUSU1FTkEyNAorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDI0LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIFNUSU1FTkEyMworLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDIzLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTIzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIFNUSU1FTkEyMgorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDIyLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTIyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIFNUSU1FTkEyMQorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDIxLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTIxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIFNUSU1FTkEyMAorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDIwLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTIwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIFNUSU1FTkExOQorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDE5LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIFNUSU1FTkExOAorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDE4LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIFNUSU1FTkExNworLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDE3LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIFNUSU1FTkExNgorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDE2LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIFNUSU1FTkExNQorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDE1LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIFNUSU1FTkExNAorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDE0LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIFNUSU1FTkExMworLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDEzLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIFNUSU1FTkExMgorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDEyLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIFNUSU1FTkExMQorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDExLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIFNUSU1FTkExMAorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDEwLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFNUSU1FTkE5CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgOS4KKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBTVElNRU5BOAorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDguCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gU1RJTUVOQTcKKy8vCisvLyBCaXQgbWFzayB0byBlbmFibGUgdHJhY2luZyBvbiBJVE0gc3RpbXVsdXMgcG9ydCA3LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFNUSU1FTkE2CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgNi4KKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBTVElNRU5BNQorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDUuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gU1RJTUVOQTQKKy8vCisvLyBCaXQgbWFzayB0byBlbmFibGUgdHJhY2luZyBvbiBJVE0gc3RpbXVsdXMgcG9ydCA0LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFNUSU1FTkEzCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMy4KKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBTVElNRU5BMgorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDIuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gU1RJTUVOQTEKKy8vCisvLyBCaXQgbWFzayB0byBlbmFibGUgdHJhY2luZyBvbiBJVE0gc3RpbXVsdXMgcG9ydCAxLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFNUSU1FTkEwCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMC4KKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19UUFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMzowXSBQUklWTUFTSworLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB1bnByaXZpbGVnZWQgKFVzZXIpIGFjY2VzcyB0byBJVE0gc3RpbXVsdXMgcG9ydHM6CisvLworLy8gQml0IFswXSBlbmFibGVzIHN0aW11bHVzIHBvcnRzIDAsIDEsIC4uLiwgYW5kIDcuCisvLyBCaXQgWzFdIGVuYWJsZXMgc3RpbXVsdXMgcG9ydHMgOCwgOSwgLi4uLCBhbmQgMTUuCisvLyBCaXQgWzJdIGVuYWJsZXMgc3RpbXVsdXMgcG9ydHMgMTYsIDE3LCAuLi4sIGFuZCAyMy4KKy8vIEJpdCBbM10gZW5hYmxlcyBzdGltdWx1cyBwb3J0cyAyNCwgMjUsIC4uLiwgYW5kIDMxLgorLy8KKy8vIDA6IFVzZXIgYWNjZXNzIGFsbG93ZWQgdG8gc3RpbXVsdXMgcG9ydHMKKy8vIDE6IFByaXZpbGVnZWQgYWNjZXNzIG9ubHkgdG8gc3RpbXVsdXMgcG9ydHMKKyNkZWZpbmUgQ1BVX0lUTV9UUFJfUFJJVk1BU0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfSVRNX1RQUl9QUklWTUFTS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIENQVV9JVE1fVFBSX1BSSVZNQVNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fVENSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyM10gQlVTWQorLy8KKy8vIFNldCB3aGVuIElUTSBldmVudHMgcHJlc2VudCBhbmQgYmVpbmcgZHJhaW5lZC4KKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RDUl9CVVNZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIENQVV9JVE1fVENSX0JVU1lfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfQlVTWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogWzIyOjE2XSBBVEJJRAorLy8KKy8vIFRyYWNlIEJ1cyBJRCBmb3IgQ29yZVNpZ2h0IHN5c3RlbS4gT3B0aW9uYWwgaWRlbnRpZmllciBmb3IgbXVsdGktc291cmNlCisvLyB0cmFjZSBzdHJlYW0gZm9ybWF0dGluZy4gSWYgbXVsdGktc291cmNlIHRyYWNlIGlzIGluIHVzZSwgdGhpcyBmaWVsZCBtdXN0IGJlCisvLyB3cml0dGVuIHdpdGggYSBub24temVybyB2YWx1ZS4KKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfQVRCSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUFVfSVRNX1RDUl9BVEJJRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwN0YwMDAwCisjZGVmaW5lIENQVV9JVE1fVENSX0FUQklEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgWzk6OF0gVFNQUkVTQ0FMRQorLy8KKy8vIFRpbWVzdGFtcCBwcmVzY2FsZXIKKy8vIEVOVU1zOgorLy8gRElWNjQgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSA2NAorLy8gRElWMTYgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAxNgorLy8gRElWNCAgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSA0CisvLyBOT1BSRVNDQUxJTkcgICAgICAgICAgICAgTm8gcHJlc2NhbGluZworI2RlZmluZSBDUFVfSVRNX1RDUl9UU1BSRVNDQUxFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9JVE1fVENSX1RTUFJFU0NBTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfVFNQUkVTQ0FMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfSVRNX1RDUl9UU1BSRVNDQUxFX0RJVjY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIENQVV9JVE1fVENSX1RTUFJFU0NBTEVfRElWMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfVFNQUkVTQ0FMRV9ESVY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfSVRNX1RDUl9UU1BSRVNDQUxFX05PUFJFU0NBTElORyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzRdIFNXT0VOQQorLy8KKy8vIEVuYWJsZXMgYXN5bmNocm9ub3VzIGNsb2NraW5nIG9mIHRoZSB0aW1lc3RhbXAgY291bnRlciAod2hlbiBUU0VOQSA9IDEpLiBJZgorLy8gVFNFTkEgPSAwLCB3cml0aW5nIHRoaXMgYml0IHRvIDEgZG9lcyBub3QgZW5hYmxlIGFzeW5jaHJvbm91cyBjbG9ja2luZyBvZgorLy8gdGhlIHRpbWVzdGFtcCBjb3VudGVyLgorLy8KKy8vIDB4MDogTW9kZSBkaXNhYmxlZC4gVGltZXN0YW1wIGNvdW50ZXIgdXNlcyBzeXN0ZW0gY2xvY2sgZnJvbSB0aGUgY29yZSBhbmQKKy8vIGNvdW50cyBjb250aW51b3VzbHkuCisvLyAweDE6IFRpbWVzdGFtcCBjb3VudGVyIHVzZXMgbGluZW91dCAoZGF0YSByZWxhdGVkKSBjbG9jayBmcm9tIFRQSVUKKy8vIGludGVyZmFjZS4gVGhlIHRpbWVzdGFtcCBjb3VudGVyIGlzIGhlbGQgaW4gcmVzZXQgd2hpbGUgdGhlIG91dHB1dCBsaW5lIGlzCisvLyBpZGxlLgorI2RlZmluZSBDUFVfSVRNX1RDUl9TV09FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9JVE1fVENSX1NXT0VOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfU1dPRU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfSVRNX1RDUl9TV09FTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIERXVEVOQQorLy8KKy8vIEVuYWJsZXMgdGhlIERXVCBzdGltdWx1cyAoaGFyZHdhcmUgZXZlbnQgcGFja2V0IGVtaXNzaW9uIHRvIHRoZSBUUElVIGZyb20KKy8vIHRoZSBEV1QpCisjZGVmaW5lIENQVV9JVE1fVENSX0RXVEVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfRFdURU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfSVRNX1RDUl9EV1RFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9JVE1fVENSX0RXVEVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gU1lOQ0VOQQorLy8KKy8vIEVuYWJsZXMgc3luY2hyb25pemF0aW9uIHBhY2tldCB0cmFuc21pc3Npb24gZm9yIGEgc3luY2hyb25vdXMgVFBJVS4KKy8vIENQVV9EV1Q6Q1RSTC5TWU5DVEFQIG11c3QgYmUgY29uZmlndXJlZCBmb3IgdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uCisvLyBzcGVlZC4KKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfU1lOQ0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfSVRNX1RDUl9TWU5DRU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9JVE1fVENSX1NZTkNFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfU1lOQ0VOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBUU0VOQQorLy8KKy8vIEVuYWJsZXMgZGlmZmVyZW50aWFsIHRpbWVzdGFtcHMuIERpZmZlcmVudGlhbCB0aW1lc3RhbXBzIGFyZSBlbWl0dGVkIHdoZW4gYQorLy8gcGFja2V0IGlzIHdyaXR0ZW4gdG8gdGhlIEZJRk8gd2l0aCBhIG5vbi16ZXJvIHRpbWVzdGFtcCBjb3VudGVyLCBhbmQgd2hlbgorLy8gdGhlIHRpbWVzdGFtcCBjb3VudGVyIG92ZXJmbG93cy4gVGltZXN0YW1wcyBhcmUgZW1pdHRlZCBkdXJpbmcgaWRsZSB0aW1lcworLy8gYWZ0ZXIgYSBmaXhlZCBudW1iZXIgb2YgdHdvIG1pbGxpb24gY3ljbGVzLiBUaGlzIHByb3ZpZGVzIGEgdGltZSByZWZlcmVuY2UKKy8vIGZvciBwYWNrZXRzIGFuZCBpbnRlci1wYWNrZXQgZ2Fwcy4gSWYgU1dPRU5BIChiaXQgWzRdKSBpcyBzZXQsIHRpbWVzdGFtcHMKKy8vIGFyZSB0cmlnZ2VyZWQgYnkgYWN0aXZpdHkgb24gdGhlIGludGVybmFsIHRyYWNlIGJ1cyBvbmx5LiBJbiB0aGlzIGNhc2UgdGhlcmUKKy8vIGlzIG5vIHJlZ3VsYXIgdGltZXN0YW1wIG91dHB1dCB3aGVuIHRoZSBJVE0gaXMgaWRsZS4KKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfVFNFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfSVRNX1RDUl9UU0VOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9JVE1fVENSX1RTRU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfVFNFTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBJVE1FTkEKKy8vCisvLyBFbmFibGVzIElUTS4gVGhpcyBpcyB0aGUgbWFzdGVyIGVuYWJsZSwgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSBJVE0gU3RpbXVsdXMKKy8vIGFuZCBUcmFjZSBFbmFibGUgcmVnaXN0ZXJzIGNhbiBiZSB3cml0dGVuLgorI2RlZmluZSBDUFVfSVRNX1RDUl9JVE1FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9JVE1fVENSX0lUTUVOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfSVRNRU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfSVRNX1RDUl9JVE1FTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX0xBUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIExPQ0tfQUNDRVNTCisvLworLy8gQSBwcml2aWxlZ2VkIHdyaXRlIG9mIDB4QzVBQ0NFNTUgZW5hYmxlcyBtb3JlIHdyaXRlIGFjY2VzcyB0byBDb250cm9sCisvLyBSZWdpc3RlcnMgVEVSLCBUUFIgYW5kIFRDUi4gQW4gaW52YWxpZCB3cml0ZSByZW1vdmVzIHdyaXRlIGFjY2Vzcy4KKyNkZWZpbmUgQ1BVX0lUTV9MQVJfTE9DS19BQ0NFU1NfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX0xBUl9MT0NLX0FDQ0VTU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fTEFSX0xPQ0tfQUNDRVNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fTFNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gQllURUFDQworLy8KKy8vIFJlYWRzIDAgd2hpY2ggbWVhbnMgOC1iaXQgbG9jayBhY2Nlc3MgaXMgbm90IGJlIGltcGxlbWVudGVkLgorI2RlZmluZSBDUFVfSVRNX0xTUl9CWVRFQUNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9JVE1fTFNSX0JZVEVBQ0NfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX0lUTV9MU1JfQllURUFDQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfSVRNX0xTUl9CWVRFQUNDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEFDQ0VTUworLy8KKy8vIFdyaXRlIGFjY2VzcyB0byBjb21wb25lbnQgaXMgYmxvY2tlZC4gQWxsIHdyaXRlcyBhcmUgaWdub3JlZCwgcmVhZHMgYXJlCisvLyBwZXJtaXR0ZWQuCisjZGVmaW5lIENQVV9JVE1fTFNSX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX0lUTV9MU1JfQUNDRVNTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfSVRNX0xTUl9BQ0NFU1NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9JVE1fTFNSX0FDQ0VTU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUFJFU0VOVAorLy8KKy8vIEluZGljYXRlcyB0aGF0IGEgbG9jayBtZWNoYW5pc20gZXhpc3RzIGZvciB0aGlzIGNvbXBvbmVudC4KKyNkZWZpbmUgQ1BVX0lUTV9MU1JfUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfSVRNX0xTUl9QUkVTRU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9JVE1fTFNSX1BSRVNFTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0lUTV9MU1JfUFJFU0VOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0NQVV9JVE1fXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X3JvbV90YWJsZS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X3JvbV90YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjgxZjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfcm9tX3RhYmxlLmgKQEAgLTAsMCArMSwyMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19jcHVfcm9tX3RhYmxlX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0NQVV9ST01fVEFCTEVfSF9fCisjZGVmaW5lIF9fSFdfQ1BVX1JPTV9UQUJMRV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBDUFVfUk9NX1RBQkxFIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFN5c3RlbSBDb250cm9sIFNwYWNlIENvbXBvbmVudAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX09fU0NTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgQ29tcG9uZW50CisjZGVmaW5lIENQVV9ST01fVEFCTEVfT19EV1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gRmxhc2ggUGF0Y2ggYW5kIEJyZWFrcG9pbnQgQ29tcG9uZW50CisjZGVmaW5lIENQVV9ST01fVEFCTEVfT19GUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gSW5zdHJ1bWVudGF0aW9uIFRyYWNlIENvbXBvbmVudAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX09fSVRNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIFRyYWNlIFBvcnQgSW50ZXJmYWNlIENvbXBvbmVudAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX09fVFBJVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIEVuaGFuY2VkIFRyYWNlIENvbXBvbmVudAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX09fRVRNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIEVuZCBNYXJrZXIKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9PX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBTeXN0ZW0gTWVtb3J5IE1hcCBBY2Nlc3MgZm9yIERBUAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX09fU1lTVEVNX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkNDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1JPTV9UQUJMRV9PX1NDUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNDUworLy8KKy8vIFBvaW50cyB0byB0aGUgU0NTIGF0IDB4RTAwMEUwMDAuCisvLyAoU0NTICsgQmFzZSBhZGRyZXNzIGZvciBST01fVEFCTEUpICYgMHgwRkZGRkZGRjAgPSAweEUwMDBFMDAwLgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX1NDU19TQ1NfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9ST01fVEFCTEVfU0NTX1NDU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9TQ1NfU0NTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9ST01fVEFCTEVfT19EV1QKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMToxXSBEV1QKKy8vCisvLyBQb2ludHMgdG8gdGhlIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgYmxvY2sgYXQgMHhFMDAwMTAwMC4KKy8vICgyKkRXVCArIEJhc2UgYWRkcmVzcyBmb3IgUk9NX1RBQkxFKSAmIDB4MEZGRkZGRkYwID0gMHhFMDAwMTAwMC4KKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9EV1RfRFdUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0RXVF9EV1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRFdUX0RXVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRFdUX1BSRVNFTlQKKy8vCisvLyAwOiBEV1QgaXMgbm90IHByZXNlbnQKKy8vIDE6IERXVCBpcyBwcmVzZW50LgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0RXVF9EV1RfUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRFdUX0RXVF9QUkVTRU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9EV1RfRFdUX1BSRVNFTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0RXVF9EV1RfUFJFU0VOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1JPTV9UQUJMRV9PX0ZQQgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjFdIEZQQgorLy8KKy8vIFBvaW50cyB0byB0aGUgRmxhc2ggUGF0Y2ggYW5kIEJyZWFrcG9pbnQgYmxvY2sgYXQgMHhFMDAwMjAwMC4KKy8vICgyKkZQQiArIEJhc2UgYWRkcmVzcyBmb3IgUk9NX1RBQkxFKSAmIDB4MEZGRkZGRkYwID0gMHhFMDAwMjAwMC4KKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9GUEJfRlBCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0ZQQl9GUEJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRlBCX0ZQQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRlBCX1BSRVNFTlQKKy8vCisvLyAwOiBGUEIgaXMgbm90IHByZXNlbnQKKy8vIDE6IEZQQiBpcyBwcmVzZW50LgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0ZQQl9GUEJfUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRlBCX0ZQQl9QUkVTRU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9GUEJfRlBCX1BSRVNFTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0ZQQl9GUEJfUFJFU0VOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1JPTV9UQUJMRV9PX0lUTQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjFdIElUTQorLy8KKy8vIFBvaW50cyB0byB0aGUgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIGJsb2NrIGF0IDB4RTAwMDAwMDAuCisvLyAoMipJVE0gKyBCYXNlIGFkZHJlc3MgZm9yIFJPTV9UQUJMRSkgJiAweDBGRkZGRkZGMCA9IDB4RTAwMDAwMDAuCisjZGVmaW5lIENQVV9ST01fVEFCTEVfSVRNX0lUTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9JVE1fSVRNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0lUTV9JVE1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIElUTV9QUkVTRU5UCisvLworLy8gMDogSVRNIGlzIG5vdCBwcmVzZW50CisvLyAxOiBJVE0gaXMgcHJlc2VudC4KKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9JVE1fSVRNX1BSRVNFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0lUTV9JVE1fUFJFU0VOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9ST01fVEFCTEVfSVRNX0lUTV9QUkVTRU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9JVE1fSVRNX1BSRVNFTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9ST01fVEFCTEVfT19UUElVCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MV0gVFBJVQorLy8KKy8vIFBvaW50cyB0byB0aGUgVFBJVS4gVFBJVSBpcyBhdCAweEUwMDQwMDAwLgorLy8gKDIqVFBJVSArIEJhc2UgYWRkcmVzcyBmb3IgUk9NX1RBQkxFKSAmIDB4MEZGRkZGRkYwID0gMHhFMDA0MDAwMC4KKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9UUElVX1RQSVVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX1RQSVVfVFBJVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIENQVV9ST01fVEFCTEVfVFBJVV9UUElVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gVFBJVV9QUkVTRU5UCisvLworLy8gMDogVFBJVSBpcyBub3QgcHJlc2VudAorLy8gMTogVFBJVSBpcyBwcmVzZW50LgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX1RQSVVfVFBJVV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfVFBJVV9UUElVX1BSRVNFTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9UUElVX1RQSVVfUFJFU0VOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX1RQSVVfVFBJVV9QUkVTRU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1JPTV9UQUJMRV9PX0VUTQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjFdIEVUTQorLy8KKy8vIFBvaW50cyB0byB0aGUgRVRNLiBFVE0gaXMgYXQgMHhFMDA0MTAwMC4KKy8vICgyKkVUTSArIEJhc2UgYWRkcmVzcyBmb3IgUk9NX1RBQkxFKSAmIDB4MEZGRkZGRkYwID0gMHhFMDA0MTAwMC4KKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9FVE1fRVRNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0VUTV9FVE1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRVRNX0VUTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRVRNX1BSRVNFTlQKKy8vCisvLyAwOiBFVE0gaXMgbm90IHByZXNlbnQKKy8vIDE6IEVUTSBpcyBwcmVzZW50LgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0VUTV9FVE1fUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRVRNX0VUTV9QUkVTRU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9FVE1fRVRNX1BSRVNFTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0VUTV9FVE1fUFJFU0VOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1JPTV9UQUJMRV9PX0VORAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEVORAorLy8KKy8vIEVuZCBvZiB0aGUgUk9NIHRhYmxlCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRU5EX0VORF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9FTkRfRU5EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0VORF9FTkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1JPTV9UQUJMRV9PX1NZU1RFTV9BQ0NFU1MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTWVNURU1fQUNDRVNTCisvLworLy8gMTogVGhlIHN5c3RlbSBtZW1vcnkgbWFwIGlzIGFjY2Vzc2libGUgdXNpbmcgdGhlIERBUAorLy8gMDogT25seSBkZWJ1ZyByZXNvdXJjZXMgYXJlIGFjY2Vzc2libGUgdXNpbmcgdGhlIERBUAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX1NZU1RFTV9BQ0NFU1NfU1lTVEVNX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfU1lTVEVNX0FDQ0VTU19TWVNURU1fQUNDRVNTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9TWVNURU1fQUNDRVNTX1NZU1RFTV9BQ0NFU1NfTSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX1NZU1RFTV9BQ0NFU1NfU1lTVEVNX0FDQ0VTU19TICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQ1BVX1JPTV9UQUJMRV9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfc2NzLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfc2NzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzODM0NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9zY3MuaApAQCAtMCwwICsxLDM4ODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19jcHVfc2NzX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0NQVV9TQ1NfSF9fCisjZGVmaW5lIF9fSFdfQ1BVX1NDU19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBDUFVfU0NTIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEludGVycnVwdCBDb250cm9sIFR5cGUKKyNkZWZpbmUgQ1BVX1NDU19PX0lDVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBBdXhpbGlhcnkgQ29udHJvbAorI2RlZmluZSBDUFVfU0NTX09fQUNUTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIFN5c1RpY2sgQ29udHJvbCBhbmQgU3RhdHVzCisjZGVmaW5lIENQVV9TQ1NfT19TVENTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gU3lzVGljayBSZWxvYWQgVmFsdWUKKyNkZWZpbmUgQ1BVX1NDU19PX1NUUlZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBTeXNUaWNrIEN1cnJlbnQgVmFsdWUKKyNkZWZpbmUgQ1BVX1NDU19PX1NUQ1ZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBTeXNUaWNrIENhbGlicmF0aW9uIFZhbHVlCisjZGVmaW5lIENQVV9TQ1NfT19TVENSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gSXJxIDAgdG8gMzEgU2V0IEVuYWJsZQorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JU0VSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisKKy8vIElycSAzMiB0byA2MyBTZXQgRW5hYmxlCisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lTRVIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDQKKworLy8gSXJxIDAgdG8gMzEgQ2xlYXIgRW5hYmxlCisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lDRVIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxODAKKworLy8gSXJxIDMyIHRvIDYzIENsZWFyIEVuYWJsZQorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JQ0VSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTg0CisKKy8vIElycSAwIHRvIDMxIFNldCBQZW5kaW5nCisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lTUFIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKworLy8gSXJxIDMyIHRvIDYzIFNldCBQZW5kaW5nCisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lTUFIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDQKKworLy8gSXJxIDAgdG8gMzEgQ2xlYXIgUGVuZGluZworI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JQ1BSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjgwCisKKy8vIElycSAzMiB0byA2MyBDbGVhciBQZW5kaW5nCisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lDUFIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyODQKKworLy8gSXJxIDAgdG8gMzEgQWN0aXZlIEJpdAorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JQUJSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisKKy8vIElycSAzMiB0byA2MyBBY3RpdmUgQml0CisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lBQlIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDQKKworLy8gSXJxIDAgdG8gMyBQcmlvcml0eQorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JUFIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisKKy8vIElycSA0IHRvIDcgUHJpb3JpdHkKKyNkZWZpbmUgQ1BVX1NDU19PX05WSUNfSVBSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwNAorCisvLyBJcnEgOCB0byAxMSBQcmlvcml0eQorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JUFIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDA4CisKKy8vIElycSAxMiB0byAxNSBQcmlvcml0eQorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JUFIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDBDCisKKy8vIElycSAxNiB0byAxOSBQcmlvcml0eQorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JUFI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDEwCisKKy8vIElycSAyMCB0byAyMyBQcmlvcml0eQorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JUFI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDE0CisKKy8vIElycSAyNCB0byAyNyBQcmlvcml0eQorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JUFI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDE4CisKKy8vIElycSAyOCB0byAzMSBQcmlvcml0eQorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JUFI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDFDCisKKy8vIElycSAzMiB0byAzNSBQcmlvcml0eQorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JUFI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDIwCisKKy8vIENQVUlEIEJhc2UKKyNkZWZpbmUgQ1BVX1NDU19PX0NQVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQwMAorCisvLyBJbnRlcnJ1cHQgQ29udHJvbCBTdGF0ZQorI2RlZmluZSBDUFVfU0NTX09fSUNTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDA0CisKKy8vIFZlY3RvciBUYWJsZSBPZmZzZXQKKyNkZWZpbmUgQ1BVX1NDU19PX1ZUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQwOAorCisvLyBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQvUmVzZXQgQ29udHJvbAorI2RlZmluZSBDUFVfU0NTX09fQUlSQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDBDCisKKy8vIFN5c3RlbSBDb250cm9sCisjZGVmaW5lIENQVV9TQ1NfT19TQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMTAKKworLy8gQ29uZmlndXJhdGlvbiBDb250cm9sCisjZGVmaW5lIENQVV9TQ1NfT19DQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMTQKKworLy8gU3lzdGVtIEhhbmRsZXJzIDQtNyBQcmlvcml0eQorI2RlZmluZSBDUFVfU0NTX09fU0hQUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDE4CisKKy8vIFN5c3RlbSBIYW5kbGVycyA4LTExIFByaW9yaXR5CisjZGVmaW5lIENQVV9TQ1NfT19TSFBSMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMUMKKworLy8gU3lzdGVtIEhhbmRsZXJzIDEyLTE1IFByaW9yaXR5CisjZGVmaW5lIENQVV9TQ1NfT19TSFBSMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMjAKKworLy8gU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUKKyNkZWZpbmUgQ1BVX1NDU19PX1NIQ1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQyNAorCisvLyBDb25maWd1cmFibGUgRmF1bHQgU3RhdHVzCisjZGVmaW5lIENQVV9TQ1NfT19DRlNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMjgKKworLy8gSGFyZCBGYXVsdCBTdGF0dXMKKyNkZWZpbmUgQ1BVX1NDU19PX0hGU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQyQworCisvLyBEZWJ1ZyBGYXVsdCBTdGF0dXMKKyNkZWZpbmUgQ1BVX1NDU19PX0RGU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQzMAorCisvLyBNZW0gTWFuYWdlIEZhdWx0IEFkZHJlc3MKKyNkZWZpbmUgQ1BVX1NDU19PX01NRkFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQzNAorCisvLyBCdXMgRmF1bHQgQWRkcmVzcworI2RlZmluZSBDUFVfU0NTX09fQkZBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDM4CisKKy8vIEF1eGlsaWFyeSBGYXVsdCBTdGF0dXMKKyNkZWZpbmUgQ1BVX1NDU19PX0FGU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQzQworCisvLyBQcm9jZXNzb3IgRmVhdHVyZSAwCisjZGVmaW5lIENQVV9TQ1NfT19JRF9QRlIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBENDAKKworLy8gUHJvY2Vzc29yIEZlYXR1cmUgMQorI2RlZmluZSBDUFVfU0NTX09fSURfUEZSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDQ0CisKKy8vIERlYnVnIEZlYXR1cmUgMAorI2RlZmluZSBDUFVfU0NTX09fSURfREZSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDQ4CisKKy8vIEF1eGlsaWFyeSBGZWF0dXJlIDAKKyNkZWZpbmUgQ1BVX1NDU19PX0lEX0FGUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQ0QworCisvLyBNZW1vcnkgTW9kZWwgRmVhdHVyZSAwCisjZGVmaW5lIENQVV9TQ1NfT19JRF9NTUZSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBENTAKKworLy8gTWVtb3J5IE1vZGVsIEZlYXR1cmUgMQorI2RlZmluZSBDUFVfU0NTX09fSURfTU1GUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDU0CisKKy8vIE1lbW9yeSBNb2RlbCBGZWF0dXJlIDIKKyNkZWZpbmUgQ1BVX1NDU19PX0lEX01NRlIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQ1OAorCisvLyBNZW1vcnkgTW9kZWwgRmVhdHVyZSAzCisjZGVmaW5lIENQVV9TQ1NfT19JRF9NTUZSMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBENUMKKworLy8gSVNBIEZlYXR1cmUgMAorI2RlZmluZSBDUFVfU0NTX09fSURfSVNBUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDYwCisKKy8vIElTQSBGZWF0dXJlIDEKKyNkZWZpbmUgQ1BVX1NDU19PX0lEX0lTQVIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQ2NAorCisvLyBJU0EgRmVhdHVyZSAyCisjZGVmaW5lIENQVV9TQ1NfT19JRF9JU0FSMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBENjgKKworLy8gSVNBIEZlYXR1cmUgMworI2RlZmluZSBDUFVfU0NTX09fSURfSVNBUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDZDCisKKy8vIElTQSBGZWF0dXJlIDQKKyNkZWZpbmUgQ1BVX1NDU19PX0lEX0lTQVI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQ3MAorCisvLyBDb3Byb2Nlc3NvciBBY2Nlc3MgQ29udHJvbAorI2RlZmluZSBDUFVfU0NTX09fQ1BBQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDg4CisKKy8vIERlYnVnIEhhbHRpbmcgQ29udHJvbCBhbmQgU3RhdHVzCisjZGVmaW5lIENQVV9TQ1NfT19ESENTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBERjAKKworLy8gRGV1YmcgQ29yZSBSZWdpc3RlciBTZWxlY3RvcgorI2RlZmluZSBDUFVfU0NTX09fRENSU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwREY0CisKKy8vIERlYnVnIENvcmUgUmVnaXN0ZXIgRGF0YQorI2RlZmluZSBDUFVfU0NTX09fRENSRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwREY4CisKKy8vIERlYnVnIEV4Y2VwdGlvbiBhbmQgTW9uaXRvciBDb250cm9sCisjZGVmaW5lIENQVV9TQ1NfT19ERU1DUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBERkMKKworLy8gU29mdHdhcmUgVHJpZ2dlciBJbnRlcnJ1cHQKKyNkZWZpbmUgQ1BVX1NDU19PX1NUSVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JQ1RSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzI6MF0gSU5UTElORVNOVU0KKy8vCisvLyBUb3RhbCBudW1iZXIgb2YgaW50ZXJydXB0IGxpbmVzIGluIGdyb3VwcyBvZiAzMi4KKy8vCisvLyAwOiAwLi4uMzIKKy8vIDE6IDMzLi4uNjQKKy8vIDI6IDY1Li4uOTYKKy8vIDM6IDk3Li4uMTI4CisvLyA0OiAxMjkuLi4xNjAKKy8vIDU6IDE2MS4uLjE5MgorLy8gNjogMTkzLi4uMjI0CisvLyA3OiAyMjUuLi4yNTYKKyNkZWZpbmUgQ1BVX1NDU19JQ1RSX0lOVExJTkVTTlVNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfU0NTX0lDVFJfSU5UTElORVNOVU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIENQVV9TQ1NfSUNUUl9JTlRMSU5FU05VTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fQUNUTFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBESVNGT0xECisvLworLy8gRGlzYWJsZXMgZm9sZGluZyBvZiBJVCBpbnN0cnVjdGlvbi4KKyNkZWZpbmUgQ1BVX1NDU19BQ1RMUl9ESVNGT0xEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX0FDVExSX0RJU0ZPTERfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9TQ1NfQUNUTFJfRElTRk9MRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19BQ1RMUl9ESVNGT0xEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBESVNERUZXQlVGCisvLworLy8gRGlzYWJsZXMgd3JpdGUgYnVmZmVyIHVzZSBkdXJpbmcgZGVmYXVsdCBtZW1vcnkgbWFwIGFjY2Vzc2VzLiBUaGlzIGNhdXNlcworLy8gYWxsIGJ1cyBmYXVsdHMgdG8gYmUgcHJlY2lzZSBidXMgZmF1bHRzIGJ1dCBkZWNyZWFzZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZQorLy8gcHJvY2Vzc29yIGJlY2F1c2UgdGhlIHN0b3JlcyB0byBtZW1vcnkgaGF2ZSB0byBjb21wbGV0ZSBiZWZvcmUgdGhlIG5leHQKKy8vIGluc3RydWN0aW9uIGNhbiBiZSBleGVjdXRlZC4KKyNkZWZpbmUgQ1BVX1NDU19BQ1RMUl9ESVNERUZXQlVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX0FDVExSX0RJU0RFRldCVUZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfQUNUTFJfRElTREVGV0JVRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19BQ1RMUl9ESVNERUZXQlVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBESVNNQ1lDSU5UCisvLworLy8gRGlzYWJsZXMgaW50ZXJydXB0aW9uIG9mIG11bHRpLWN5Y2xlIGluc3RydWN0aW9ucy4gVGhpcyBpbmNyZWFzZXMgdGhlCisvLyBpbnRlcnJ1cHQgbGF0ZW5jeSBvZiB0aGUgcHJvY2Vzc29yIGJlY3Vhc2UgTERNL1NUTSBjb21wbGV0ZXMgYmVmb3JlCisvLyBpbnRlcnJ1cHQgc3RhY2tpbmcgb2NjdXJzLgorI2RlZmluZSBDUFVfU0NTX0FDVExSX0RJU01DWUNJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfQUNUTFJfRElTTUNZQ0lOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1NDU19BQ1RMUl9ESVNNQ1lDSU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX0FDVExSX0RJU01DWUNJTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX1NUQ1NSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxNl0gQ09VTlRGTEFHCisvLworLy8gUmV0dXJucyAxIGlmIHRpbWVyIGNvdW50ZWQgdG8gMCBzaW5jZSBsYXN0IHRpbWUgdGhpcyB3YXMgcmVhZC4gQ2xlYXJzIG9uCisvLyByZWFkIGJ5IGFwcGxpY2F0aW9uIG9mIGFueSBwYXJ0IG9mIHRoZSBTeXNUaWNrIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlci4KKy8vIElmIHJlYWQgYnkgdGhlIGRlYnVnZ2VyIHVzaW5nIHRoZSBEQVAsIHRoaXMgYml0IGlzIGNsZWFyZWQgb24gcmVhZC1vbmx5IGlmCisvLyB0aGUgTWFzdGVyVHlwZSBiaXQgaW4gdGhlICoqQUhCLUFQKiogQ29udHJvbCBSZWdpc3RlciBpcyBzZXQgdG8gMC4KKy8vIE90aGVyd2lzZSwgQ09VTlRGTEFHIGlzIG5vdCBjaGFuZ2VkIGJ5IHRoZSBkZWJ1Z2dlciByZWFkLgorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX0NPVU5URkxBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfU1RDU1JfQ09VTlRGTEFHX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19TVENTUl9DT1VOVEZMQUdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX0NPVU5URkxBR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzJdIENMS1NPVVJDRQorLy8KKy8vIENsb2NrIHNvdXJjZToKKy8vCisvLyAwOiBFeHRlcm5hbCByZWZlcmVuY2UgY2xvY2suCisvLyAxOiBDb3JlIGNsb2NrCisvLworLy8gRXh0ZXJuYWwgY2xvY2sgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGRldmljZS4gV3JpdGVzIHRvIHRoaXMgZmllbGQgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgQ1BVX1NDU19TVENTUl9DTEtTT1VSQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX0NMS1NPVVJDRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9TQ1NfU1RDU1JfQ0xLU09VUkNFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19TVENTUl9DTEtTT1VSQ0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBUSUNLSU5UCisvLworLy8gMDogQ291bnRpbmcgZG93biB0byB6ZXJvIGRvZXMgbm90IHBlbmQgdGhlIFN5c1RpY2sgaGFuZGxlci4gU29mdHdhcmUgY2FuIHVzZQorLy8gQ09VTlRGTEFHIHRvIGRldGVybWluZSBpZiB0aGUgU3lzVGljayBoYW5kbGVyIGhhcyBldmVyIGNvdW50ZWQgdG8gemVyby4KKy8vIDE6IENvdW50aW5nIGRvd24gdG8gemVybyBwZW5kcyB0aGUgU3lzVGljayBoYW5kbGVyLgorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX1RJQ0tJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfU1RDU1JfVElDS0lOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19TVENTUl9USUNLSU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX1RJQ0tJTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOQUJMRQorLy8KKy8vIEVuYWJsZSBTeXNUaWNrIGNvdW50ZXIKKy8vCisvLyAwOiBDb3VudGVyIGRpc2FibGVkCisvLyAxOiBDb3VudGVyIG9wZXJhdGVzIGluIGEgbXVsdGktc2hvdCB3YXkuIFRoYXQgaXMsIGNvdW50ZXIgbG9hZHMgd2l0aCB0aGUKKy8vIFJlbG9hZCB2YWx1ZSBTVFJWUi5SRUxPQUQgYW5kIHRoZW4gYmVnaW5zIGNvdW50aW5nIGRvd24uIE9uIHJlYWNoaW5nIDAsIGl0CisvLyBzZXRzIENPVU5URkxBRyB0byAxIGFuZCBvcHRpb25hbGx5IHBlbmRzIHRoZSBTeXNUaWNrIGhhbmRsZXIsIGJhc2VkIG9uCisvLyBUSUNLSU5ULiBJdCB0aGVuIGxvYWRzIFNUUlZSLlJFTE9BRCBhZ2FpbiwgYW5kIGJlZ2lucyBjb3VudGluZy4KKyNkZWZpbmUgQ1BVX1NDU19TVENTUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX0VOQUJMRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfU1RDU1JfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19TVENTUl9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19TVFJWUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzIzOjBdIFJFTE9BRAorLy8KKy8vIFZhbHVlIHRvIGxvYWQgaW50byB0aGUgU3lzVGljayBDdXJyZW50IFZhbHVlIFJlZ2lzdGVyIFNUQ1ZSLkNVUlJFTlQgd2hlbiB0aGUKKy8vIGNvdW50ZXIgcmVhY2hlcyAwLgorI2RlZmluZSBDUFVfU0NTX1NUUlZSX1JFTE9BRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9TQ1NfU1RSVlJfUkVMT0FEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgQ1BVX1NDU19TVFJWUl9SRUxPQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19TVENWUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzIzOjBdIENVUlJFTlQKKy8vCisvLyBDdXJyZW50IHZhbHVlIGF0IHRoZSB0aW1lIHRoZSByZWdpc3RlciBpcyBhY2Nlc3NlZC4gTm8gcmVhZC1tb2RpZnktd3JpdGUKKy8vIHByb3RlY3Rpb24gaXMgcHJvdmlkZWQsIHNvIGNoYW5nZSB3aXRoIGNhcmUuIFdyaXRpbmcgdG8gaXQgd2l0aCBhbnkgdmFsdWUKKy8vIGNsZWFycyB0aGUgcmVnaXN0ZXIgdG8gMC4gQ2xlYXJpbmcgdGhpcyByZWdpc3RlciBhbHNvIGNsZWFycworLy8gU1RDU1IuQ09VTlRGTEFHLgorI2RlZmluZSBDUFVfU0NTX1NUQ1ZSX0NVUlJFTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9TQ1NfU1RDVlJfQ1VSUkVOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgQ1BVX1NDU19TVENWUl9DVVJSRU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19TVENSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gTk9SRUYKKy8vCisvLyBSZWFkcyBhcyBvbmUuIEluZGljYXRlcyB0aGF0IG5vIHNlcGFyYXRlIHJlZmVyZW5jZSBjbG9jayBpcyBwcm92aWRlZC4KKyNkZWZpbmUgQ1BVX1NDU19TVENSX05PUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX1NUQ1JfTk9SRUZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENQVV9TQ1NfU1RDUl9OT1JFRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TVENSX05PUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBTS0VXCisvLworLy8gUmVhZHMgYXMgb25lLiBUaGUgY2FsaWJyYXRpb24gdmFsdWUgaXMgbm90IGV4YWN0bHkgMTBtcyBiZWNhdXNlIG9mIGNsb2NrCisvLyBmcmVxdWVuY3kuIFRoaXMgY291bGQgYWZmZWN0IGl0cyBzdWl0YWJpbGl0eSBhcyBhIHNvZnR3YXJlIHJlYWwgdGltZSBjbG9jay4KKyNkZWZpbmUgQ1BVX1NDU19TVENSX1NLRVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX1NUQ1JfU0tFV19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIENQVV9TQ1NfU1RDUl9TS0VXX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TVENSX1NLRVdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogIFsyMzowXSBURU5NUworLy8KKy8vIEFuIG9wdGlvbmFsIFJlbG9hZCB2YWx1ZSB0byBiZSB1c2VkIGZvciAxMG1zICgxMDBIeikgdGltaW5nLCBzdWJqZWN0IHRvCisvLyBzeXN0ZW0gY2xvY2sgc2tldyBlcnJvcnMuIFRoZSB2YWx1ZSByZWFkIGlzIHZhbGlkIG9ubHkgd2hlbiBjb3JlIGNsb2NrIGlzIGF0CisvLyA0OE1Iei4KKyNkZWZpbmUgQ1BVX1NDU19TVENSX1RFTk1TX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDUFVfU0NTX1NUQ1JfVEVOTVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIENQVV9TQ1NfU1RDUl9URU5NU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JU0VSMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIFNFVEVOQTMxCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAzMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDMxLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEzMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBTRVRFTkEzMAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMzAgKFNlZSBFVkVOVDpDUFVJUlFTRUwzMC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEzMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gU0VURU5BMjkKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDI5IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjkuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIFNFVEVOQTI4CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDI4LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBTRVRFTkEyNworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjcgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gU0VURU5BMjYKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDI2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjYuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIFNFVEVOQTI1CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyNSAoU2VlIEVWRU5UOkNQVUlSUVNFTDI1LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBTRVRFTkEyNAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjQgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gU0VURU5BMjMKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDIzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjMuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTIzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIFNFVEVOQTIyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDIyLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBTRVRFTkEyMQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjEgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTIxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gU0VURU5BMjAKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDIwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjAuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTIwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIFNFVEVOQTE5CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxOSAoU2VlIEVWRU5UOkNQVUlSUVNFTDE5LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBTRVRFTkExOAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTggKFNlZSBFVkVOVDpDUFVJUlFTRUwxOC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gU0VURU5BMTcKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDE3IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTcuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIFNFVEVOQTE2CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxNiAoU2VlIEVWRU5UOkNQVUlSUVNFTDE2LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBTRVRFTkExNQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTUgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gU0VURU5BMTQKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDE0IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTQuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIFNFVEVOQTEzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxMyAoU2VlIEVWRU5UOkNQVUlSUVNFTDEzLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBTRVRFTkExMgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTIgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gU0VURU5BMTEKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDExIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTEuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIFNFVEVOQTEwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxMCAoU2VlIEVWRU5UOkNQVUlSUVNFTDEwLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBTRVRFTkE5CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciA5IChTZWUgRVZFTlQ6Q1BVSVJRU0VMOS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gU0VURU5BOAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDguRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIFNFVEVOQTcKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDcgKFNlZSBFVkVOVDpDUFVJUlFTRUw3LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBTRVRFTkE2CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciA2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMNi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gU0VURU5BNQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgNSAoU2VlIEVWRU5UOkNQVUlSUVNFTDUuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFNFVEVOQTQKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDQgKFNlZSBFVkVOVDpDUFVJUlFTRUw0LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBTRVRFTkEzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gU0VURU5BMgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDIuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFNFVEVOQTEKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDEgKFNlZSBFVkVOVDpDUFVJUlFTRUwxLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBTRVRFTkEwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JU0VSMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIFNFVEVOQTMzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAzMyAoU2VlIEVWRU5UOkNQVUlSUVNFTDMzLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIxX1NFVEVOQTMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjFfU0VURU5BMzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMV9TRVRFTkEzM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIxX1NFVEVOQTMzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBTRVRFTkEzMgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMzIgKFNlZSBFVkVOVDpDUFVJUlFTRUwzMi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMV9TRVRFTkEzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIxX1NFVEVOQTMyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjFfU0VURU5BMzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMV9TRVRFTkEzMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JQ0VSMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIENMUkVOQTMxCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDMxIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzEuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEzMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTMxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIENMUkVOQTMwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDMwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzAuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEzMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIENMUkVOQTI5CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDI5IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjkuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIENMUkVOQTI4CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDI4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjguRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIENMUkVOQTI3CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDI3IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjcuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIENMUkVOQTI2CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDI2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjYuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIENMUkVOQTI1CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDI1IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjUuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIENMUkVOQTI0CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDI0IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjQuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIENMUkVOQTIzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDIzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjMuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTIzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIENMUkVOQTIyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDIyIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjIuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTIyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIENMUkVOQTIxCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDIxIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjEuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTIxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIENMUkVOQTIwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDIwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjAuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTIwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIENMUkVOQTE5CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDE5IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTkuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIENMUkVOQTE4CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDE4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTguRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIENMUkVOQTE3CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDE3IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTcuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIENMUkVOQTE2CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDE2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTYuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIENMUkVOQTE1CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDE1IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTUuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIENMUkVOQTE0CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDE0IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTQuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIENMUkVOQTEzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDEzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTMuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIENMUkVOQTEyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDEyIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTIuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIENMUkVOQTExCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDExIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTEuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIENMUkVOQTEwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDEwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTAuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIENMUkVOQTkKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgOSAoU2VlIEVWRU5UOkNQVUlSUVNFTDkuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIENMUkVOQTgKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDguRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIENMUkVOQTcKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgNyAoU2VlIEVWRU5UOkNQVUlSUVNFTDcuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIENMUkVOQTYKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgNiAoU2VlIEVWRU5UOkNQVUlSUVNFTDYuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIENMUkVOQTUKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgNSAoU2VlIEVWRU5UOkNQVUlSUVNFTDUuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIENMUkVOQTQKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgNCAoU2VlIEVWRU5UOkNQVUlSUVNFTDQuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIENMUkVOQTMKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMyAoU2VlIEVWRU5UOkNQVUlSUVNFTDMuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIENMUkVOQTIKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDIuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIENMUkVOQTEKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDEuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENMUkVOQTAKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMCAoU2VlIEVWRU5UOkNQVUlSUVNFTDAuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX05WSUNfSUNFUjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBDTFJFTkEzMworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICAzMyAoU2VlIEVWRU5UOkNQVUlSUVNFTDMzLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIxX0NMUkVOQTMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjFfQ0xSRU5BMzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMV9DTFJFTkEzM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIxX0NMUkVOQTMzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBDTFJFTkEzMgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICAzMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDMyLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIxX0NMUkVOQTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjFfQ0xSRU5BMzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMV9DTFJFTkEzMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIxX0NMUkVOQTMyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lTUFIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gU0VUUEVORDMxCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMzEgKFNlZSBFVkVOVDpDUFVJUlFTRUwzMS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQzMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBTRVRQRU5EMzAKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAzMCAoU2VlIEVWRU5UOkNQVUlSUVNFTDMwLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQzMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIFNFVFBFTkQyOQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDI5IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjkuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gU0VUUEVORDI4CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjggKFNlZSBFVkVOVDpDUFVJUlFTRUwyOC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBTRVRQRU5EMjcKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyNyAoU2VlIEVWRU5UOkNQVUlSUVNFTDI3LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIFNFVFBFTkQyNgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDI2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjYuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gU0VUUEVORDI1CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjUgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBTRVRQRU5EMjQKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyNCAoU2VlIEVWRU5UOkNQVUlSUVNFTDI0LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIFNFVFBFTkQyMworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDIzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjMuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDIzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gU0VUUEVORDIyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjIgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDIyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBTRVRQRU5EMjEKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDIxLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIFNFVFBFTkQyMAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDIwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjAuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDIwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gU0VUUEVORDE5CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTkgKFNlZSBFVkVOVDpDUFVJUlFTRUwxOS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBTRVRQRU5EMTgKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDE4LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIFNFVFBFTkQxNworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDE3IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTcuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gU0VUUEVORDE2CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTYgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBTRVRQRU5EMTUKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxNSAoU2VlIEVWRU5UOkNQVUlSUVNFTDE1LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIFNFVFBFTkQxNAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDE0IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTQuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gU0VUUEVORDEzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTMgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBTRVRQRU5EMTIKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDEyLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIFNFVFBFTkQxMQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDExIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTEuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gU0VUUEVORDEwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTAgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBTRVRQRU5EOQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDkgKFNlZSBFVkVOVDpDUFVJUlFTRUw5LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFNFVFBFTkQ4CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDguRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gU0VUUEVORDcKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciA3IChTZWUgRVZFTlQ6Q1BVSVJRU0VMNy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBTRVRQRU5ENgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDYgKFNlZSBFVkVOVDpDUFVJUlFTRUw2LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5ENl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFNFVFBFTkQ1CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgNSAoU2VlIEVWRU5UOkNQVUlSUVNFTDUuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5ENSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5ENV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gU0VUUEVORDQKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciA0IChTZWUgRVZFTlQ6Q1BVSVJRU0VMNC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5ENF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBTRVRQRU5EMworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDMgKFNlZSBFVkVOVDpDUFVJUlFTRUwzLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFNFVFBFTkQyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDIuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gU0VUUEVORDEKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBTRVRQRU5EMAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDAgKFNlZSBFVkVOVDpDUFVJUlFTRUwwLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX05WSUNfSVNQUjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBTRVRQRU5EMzMKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAzMyAoU2VlIEVWRU5UOkNQVUlSUVNFTDMzLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjFfU0VUUEVORDMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMV9TRVRQRU5EMzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIxX1NFVFBFTkQzM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjFfU0VUUEVORDMzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFNFVFBFTkQzMgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDMyIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzIuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMV9TRVRQRU5EMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIxX1NFVFBFTkQzMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjFfU0VUUEVORDMyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMV9TRVRQRU5EMzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JQ1BSMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIENMUlBFTkQzMQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAzMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDMxLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQzMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIENMUlBFTkQzMAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAzMCAoU2VlIEVWRU5UOkNQVUlSUVNFTDMwLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQzMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIENMUlBFTkQyOQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAyOSAoU2VlIEVWRU5UOkNQVUlSUVNFTDI5LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIENMUlBFTkQyOAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAyOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDI4LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIENMUlBFTkQyNworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAyNyAoU2VlIEVWRU5UOkNQVUlSUVNFTDI3LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIENMUlBFTkQyNgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAyNiAoU2VlIEVWRU5UOkNQVUlSUVNFTDI2LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIENMUlBFTkQyNQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAyNSAoU2VlIEVWRU5UOkNQVUlSUVNFTDI1LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIENMUlBFTkQyNAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAyNCAoU2VlIEVWRU5UOkNQVUlSUVNFTDI0LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIENMUlBFTkQyMworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAyMyAoU2VlIEVWRU5UOkNQVUlSUVNFTDIzLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIENMUlBFTkQyMgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAyMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDIyLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIENMUlBFTkQyMQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAyMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDIxLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIENMUlBFTkQyMAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAyMCAoU2VlIEVWRU5UOkNQVUlSUVNFTDIwLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIENMUlBFTkQxOQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAxOSAoU2VlIEVWRU5UOkNQVUlSUVNFTDE5LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIENMUlBFTkQxOAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAxOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDE4LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIENMUlBFTkQxNworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAxNyAoU2VlIEVWRU5UOkNQVUlSUVNFTDE3LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIENMUlBFTkQxNgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAxNiAoU2VlIEVWRU5UOkNQVUlSUVNFTDE2LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIENMUlBFTkQxNQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAxNSAoU2VlIEVWRU5UOkNQVUlSUVNFTDE1LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIENMUlBFTkQxNAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAxNCAoU2VlIEVWRU5UOkNQVUlSUVNFTDE0LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIENMUlBFTkQxMworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAxMyAoU2VlIEVWRU5UOkNQVUlSUVNFTDEzLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIENMUlBFTkQxMgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAxMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDEyLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIENMUlBFTkQxMQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAxMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDExLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIENMUlBFTkQxMAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAxMCAoU2VlIEVWRU5UOkNQVUlSUVNFTDEwLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIENMUlBFTkQ5CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDkgKFNlZSBFVkVOVDpDUFVJUlFTRUw5LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIENMUlBFTkQ4CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDggKFNlZSBFVkVOVDpDUFVJUlFTRUw4LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIENMUlBFTkQ3CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDcgKFNlZSBFVkVOVDpDUFVJUlFTRUw3LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIENMUlBFTkQ2CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDYgKFNlZSBFVkVOVDpDUFVJUlFTRUw2LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5ENl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIENMUlBFTkQ1CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDUgKFNlZSBFVkVOVDpDUFVJUlFTRUw1LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5ENV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIENMUlBFTkQ0CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDQgKFNlZSBFVkVOVDpDUFVJUlFTRUw0LkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5ENF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIENMUlBFTkQzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDMgKFNlZSBFVkVOVDpDUFVJUlFTRUwzLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIENMUlBFTkQyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDIgKFNlZSBFVkVOVDpDUFVJUlFTRUwyLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIENMUlBFTkQxCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDEgKFNlZSBFVkVOVDpDUFVJUlFTRUwxLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENMUlBFTkQwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDAgKFNlZSBFVkVOVDpDUFVJUlFTRUwwLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX05WSUNfSUNQUjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBDTFJQRU5EMzMKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgMzMgKFNlZSBFVkVOVDpDUFVJUlFTRUwzMy5FViBmb3IgZGV0YWlscykuCisvLyBSZWFkaW5nIHRoZSBiaXQgcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIxX0NMUlBFTkQzMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjFfQ0xSUEVORDMzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMV9DTFJQRU5EMzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIxX0NMUlBFTkQzM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBDTFJQRU5EMzIKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgMzIgKFNlZSBFVkVOVDpDUFVJUlFTRUwzMi5FViBmb3IgZGV0YWlscykuCisvLyBSZWFkaW5nIHRoZSBiaXQgcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIxX0NMUlBFTkQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjFfQ0xSUEVORDMyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMV9DTFJQRU5EMzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIxX0NMUlBFTkQzMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lBQlIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gQUNUSVZFMzEKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMzEgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMzEgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDMxLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUzMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBBQ1RJVkUzMAorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAzMCBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAzMCBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMzAuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUzMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIEFDVElWRTI5CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDI5IGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDI5IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwyOS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gQUNUSVZFMjgKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMjggaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMjggaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDI4LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBBQ1RJVkUyNworLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAyNyBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAyNyBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMjcuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIEFDVElWRTI2CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDI2IGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDI2IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwyNi5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gQUNUSVZFMjUKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMjUgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMjUgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDI1LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBBQ1RJVkUyNAorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAyNCBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAyNCBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMjQuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIEFDVElWRTIzCisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDIzIGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDIzIGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwyMy5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gQUNUSVZFMjIKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMjIgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMjIgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDIyLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBBQ1RJVkUyMQorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAyMSBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAyMSBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMjEuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTIxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIEFDVElWRTIwCisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDIwIGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDIwIGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwyMC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gQUNUSVZFMTkKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMTkgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMTkgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDE5LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBBQ1RJVkUxOAorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAxOCBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAxOCBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMTguRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIEFDVElWRTE3CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDE3IGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDE3IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwxNy5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gQUNUSVZFMTYKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMTYgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMTYgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDE2LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBBQ1RJVkUxNQorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAxNSBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAxNSBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMTUuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIEFDVElWRTE0CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDE0IGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDE0IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwxNC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gQUNUSVZFMTMKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMTMgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMTMgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDEzLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBBQ1RJVkUxMgorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAxMiBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAxMiBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMTIuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIEFDVElWRTExCisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDExIGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDExIGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwxMS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gQUNUSVZFMTAKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMTAgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMTAgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDEwLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBBQ1RJVkU5CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDkgaXMgbm90IGFjdGl2ZS4gUmVhZGluZworLy8gMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgOSBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMOS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gQUNUSVZFOAorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSA4IGlzIG5vdCBhY3RpdmUuIFJlYWRpbmcKKy8vIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDggaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDguRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIEFDVElWRTcKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgNyBpcyBub3QgYWN0aXZlLiBSZWFkaW5nCisvLyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSA3IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUw3LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBBQ1RJVkU2CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDYgaXMgbm90IGFjdGl2ZS4gUmVhZGluZworLy8gMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgNiBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMNi5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gQUNUSVZFNQorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSA1IGlzIG5vdCBhY3RpdmUuIFJlYWRpbmcKKy8vIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDUgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDUuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIEFDVElWRTQKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgNCBpcyBub3QgYWN0aXZlLiBSZWFkaW5nCisvLyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSA0IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUw0LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBBQ1RJVkUzCisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDMgaXMgbm90IGFjdGl2ZS4gUmVhZGluZworLy8gMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMyBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMy5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQUNUSVZFMgorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAyIGlzIG5vdCBhY3RpdmUuIFJlYWRpbmcKKy8vIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDIgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDIuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEFDVElWRTEKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMSBpcyBub3QgYWN0aXZlLiBSZWFkaW5nCisvLyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAxIGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwxLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBBQ1RJVkUwCisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDAgaXMgbm90IGFjdGl2ZS4gUmVhZGluZworLy8gMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMCBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JQUJSMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIEFDVElWRTMzCisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDMzIGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDMzIGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwzMy5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMV9BQ1RJVkUzMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIxX0FDVElWRTMzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjFfQUNUSVZFMzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMV9BQ1RJVkUzM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQUNUSVZFMzIKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMzIgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMzIgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDMyLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIxX0FDVElWRTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjFfQUNUSVZFMzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMV9BQ1RJVkUzMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIxX0FDVElWRTMyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lQUjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBQUklfMworLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMy5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIwX1BSSV8zX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjBfUFJJXzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMF9QUklfM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIFBSSV8yCisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDIgKFNlZSBFVkVOVDpDUFVJUlFTRUwyLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjBfUFJJXzJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMF9QUklfMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIwX1BSSV8yX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gUFJJXzEKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDEuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMF9QUklfMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIwX1BSSV8xX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjBfUFJJXzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBQUklfMAorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIwX1BSSV8wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjBfUFJJXzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMF9QUklfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX05WSUNfSVBSMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFBSSV83CisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDcgKFNlZSBFVkVOVDpDUFVJUlFTRUw3LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjFfUFJJXzdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMV9QUklfN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIxX1BSSV83X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gUFJJXzYKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgNiAoU2VlIEVWRU5UOkNQVUlSUVNFTDYuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMV9QUklfNl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIxX1BSSV82X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjFfUFJJXzZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBQUklfNQorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCA1IChTZWUgRVZFTlQ6Q1BVSVJRU0VMNS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIxX1BSSV81X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjFfUFJJXzVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMV9QUklfNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFBSSV80CisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDQgKFNlZSBFVkVOVDpDUFVJUlFTRUw0LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjFfUFJJXzRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMV9QUklfNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIxX1BSSV80X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JUFIyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gUFJJXzExCisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDExIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTEuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMl9QUklfMTFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIyX1BSSV8xMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjJfUFJJXzExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBQUklfMTAKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMTAgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIyX1BSSV8xMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjJfUFJJXzEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMl9QUklfMTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFBSSV85CisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDkgKFNlZSBFVkVOVDpDUFVJUlFTRUw5LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjJfUFJJXzlfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMl9QUklfOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIyX1BSSV85X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gUFJJXzgKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDguRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMl9QUklfOF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIyX1BSSV84X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjJfUFJJXzhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lQUjMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBQUklfMTUKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMTUgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIzX1BSSV8xNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjNfUFJJXzE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSM19QUklfMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIFBSSV8xNAorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAxNCAoU2VlIEVWRU5UOkNQVUlSUVNFTDE0LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjNfUFJJXzE0X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSM19QUklfMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIzX1BSSV8xNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gUFJJXzEzCisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDEzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTMuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSM19QUklfMTNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIzX1BSSV8xM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjNfUFJJXzEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBQUklfMTIKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMTIgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMi5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIzX1BSSV8xMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjNfUFJJXzEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSM19QUklfMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX05WSUNfSVBSNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFBSSV8xOQorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAxOSAoU2VlIEVWRU5UOkNQVUlSUVNFTDE5LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjRfUFJJXzE5X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNF9QUklfMTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI0X1BSSV8xOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gUFJJXzE4CisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDE4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTguRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNF9QUklfMThfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI0X1BSSV8xOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjRfUFJJXzE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBQUklfMTcKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMTcgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNy5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI0X1BSSV8xN19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjRfUFJJXzE3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNF9QUklfMTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFBSSV8xNgorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAxNiAoU2VlIEVWRU5UOkNQVUlSUVNFTDE2LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjRfUFJJXzE2X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNF9QUklfMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI0X1BSSV8xNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JUFI1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gUFJJXzIzCisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDIzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjMuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNV9QUklfMjNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI1X1BSSV8yM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjVfUFJJXzIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBQUklfMjIKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMjIgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMi5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI1X1BSSV8yMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjVfUFJJXzIyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNV9QUklfMjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFBSSV8yMQorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAyMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDIxLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjVfUFJJXzIxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNV9QUklfMjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI1X1BSSV8yMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gUFJJXzIwCisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDIwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjAuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNV9QUklfMjBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI1X1BSSV8yMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjVfUFJJXzIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lQUjYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBQUklfMjcKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMjcgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNy5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI2X1BSSV8yN19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjZfUFJJXzI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNl9QUklfMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIFBSSV8yNgorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAyNiAoU2VlIEVWRU5UOkNQVUlSUVNFTDI2LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjZfUFJJXzI2X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNl9QUklfMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI2X1BSSV8yNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gUFJJXzI1CisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDI1IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjUuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNl9QUklfMjVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI2X1BSSV8yNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjZfUFJJXzI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBQUklfMjQKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMjQgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI2X1BSSV8yNF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjZfUFJJXzI0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNl9QUklfMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX05WSUNfSVBSNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFBSSV8zMQorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAzMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDMxLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjdfUFJJXzMxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSN19QUklfMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI3X1BSSV8zMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gUFJJXzMwCisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDMwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzAuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSN19QUklfMzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI3X1BSSV8zMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjdfUFJJXzMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBQUklfMjkKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMjkgKFNlZSBFVkVOVDpDUFVJUlFTRUwyOS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI3X1BSSV8yOV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjdfUFJJXzI5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSN19QUklfMjlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFBSSV8yOAorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAyOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDI4LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjdfUFJJXzI4X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSN19QUklfMjhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI3X1BSSV8yOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JUFI4CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6OF0gUFJJXzMzCisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDMzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzMuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSOF9QUklfMzNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI4X1BSSV8zM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjhfUFJJXzMzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBQUklfMzIKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMzIgKFNlZSBFVkVOVDpDUFVJUlFTRUwzMi5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI4X1BSSV8zMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjhfUFJJXzMyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSOF9QUklfMzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0NQVUlECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gSU1QTEVNRU5URVIKKy8vCisvLyBJbXBsZW1lbnRvciBjb2RlLgorI2RlZmluZSBDUFVfU0NTX0NQVUlEX0lNUExFTUVOVEVSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfQ1BVSURfSU1QTEVNRU5URVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19DUFVJRF9JTVBMRU1FTlRFUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjIwXSBWQVJJQU5UCisvLworLy8gSW1wbGVtZW50YXRpb24gZGVmaW5lZCB2YXJpYW50IG51bWJlci4KKyNkZWZpbmUgQ1BVX1NDU19DUFVJRF9WQVJJQU5UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfU0NTX0NQVUlEX1ZBUklBTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAwMDAwCisjZGVmaW5lIENQVV9TQ1NfQ1BVSURfVkFSSUFOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6IFsxOToxNl0gQ09OU1RBTlQKKy8vCisvLyBSZWFkcyBhcyAweEYKKyNkZWZpbmUgQ1BVX1NDU19DUFVJRF9DT05TVEFOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfU0NTX0NQVUlEX0NPTlNUQU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIENQVV9TQ1NfQ1BVSURfQ09OU1RBTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6NF0gUEFSVE5PCisvLworLy8gTnVtYmVyIG9mIHByb2Nlc3NvciB3aXRoaW4gZmFtaWx5LgorI2RlZmluZSBDUFVfU0NTX0NQVUlEX1BBUlROT19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIENQVV9TQ1NfQ1BVSURfUEFSVE5PX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRjAKKyNkZWZpbmUgQ1BVX1NDU19DUFVJRF9QQVJUTk9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBSRVZJU0lPTgorLy8KKy8vIEltcGxlbWVudGF0aW9uIGRlZmluZWQgcmV2aXNpb24gbnVtYmVyLgorI2RlZmluZSBDUFVfU0NTX0NQVUlEX1JFVklTSU9OX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfQ1BVSURfUkVWSVNJT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQ1BVX1NDU19DUFVJRF9SRVZJU0lPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JQ1NSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gTk1JUEVORFNFVAorLy8KKy8vIFNldCBwZW5kaW5nIE5NSSBiaXQuIFNldHRpbmcgdGhpcyBiaXQgcGVuZHMgYW5kIGFjdGl2YXRlcyBhbiBOTUkuIEJlY2F1c2UKKy8vIE5NSSBpcyB0aGUgaGlnaGVzdC1wcmlvcml0eSBpbnRlcnJ1cHQsIGl0IHRha2VzIGVmZmVjdCBhcyBzb29uIGFzIGl0CisvLyByZWdpc3RlcnMuCisvLworLy8gMDogTm8gYWN0aW9uCisvLyAxOiBTZXQgcGVuZGluZyBOTUkKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX05NSVBFTkRTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0lDU1JfTk1JUEVORFNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9OTUlQRU5EU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX05NSVBFTkRTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzI4XSBQRU5EU1ZTRVQKKy8vCisvLyBTZXQgcGVuZGluZyBwZW5kU1YgYml0LgorLy8KKy8vIDA6IE5vIGFjdGlvbgorLy8gMTogU2V0IHBlbmRpbmcgUGVuZFNWCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1ZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1BFTkRTVlNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBDUFVfU0NTX0lDU1JfUEVORFNWU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1ZTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gUEVORFNWQ0xSCisvLworLy8gQ2xlYXIgcGVuZGluZyBwZW5kU1YgYml0CisvLworLy8gMDogTm8gYWN0aW9uCisvLyAxOiBDbGVhciBwZW5kaW5nIHBlbmRTVgorI2RlZmluZSBDUFVfU0NTX0lDU1JfUEVORFNWQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1ZDTFJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1BFTkRTVkNMUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0lDU1JfUEVORFNWQ0xSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIFBFTkRTVFNFVAorLy8KKy8vIFNldCBhIHBlbmRpbmcgU3lzVGljayBiaXQuCisvLworLy8gMDogTm8gYWN0aW9uCisvLyAxOiBTZXQgcGVuZGluZyBTeXNUaWNrCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1RTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1BFTkRTVFNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDUFVfU0NTX0lDU1JfUEVORFNUU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1RTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gUEVORFNUQ0xSCisvLworLy8gQ2xlYXIgcGVuZGluZyBTeXNUaWNrIGJpdAorLy8KKy8vIDA6IE5vIGFjdGlvbgorLy8gMTogQ2xlYXIgcGVuZGluZyBTeXNUaWNrCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1RDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1BFTkRTVENMUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBDUFVfU0NTX0lDU1JfUEVORFNUQ0xSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1RDTFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyM10gSVNSUFJFRU1QVAorLy8KKy8vIFRoaXMgZmllbGQgY2FuIG9ubHkgYmUgdXNlZCBhdCBkZWJ1ZyB0aW1lLiBJdCBpbmRpY2F0ZXMgdGhhdCBhIHBlbmRpbmcKKy8vIGludGVycnVwdCBpcyB0byBiZSB0YWtlbiBpbiB0aGUgbmV4dCBydW5uaW5nIGN5Y2xlLiBJZiBESENTUi5DX01BU0tJTlRTPSAwLAorLy8gdGhlIGludGVycnVwdCBpcyBzZXJ2aWNlZC4KKy8vCisvLyAwOiBBIHBlbmRpbmcgZXhjZXB0aW9uIGlzIG5vdCBzZXJ2aWNlZC4KKy8vIDE6IEEgcGVuZGluZyBleGNlcHRpb24gaXMgc2VydmljZWQgb24gZXhpdCBmcm9tIHRoZSBkZWJ1ZyBoYWx0IHN0YXRlCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9JU1JQUkVFTVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX0lTUlBSRUVNUFRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDUFVfU0NTX0lDU1JfSVNSUFJFRU1QVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9JU1JQUkVFTVBUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gSVNSUEVORElORworLy8KKy8vIEludGVycnVwdCBwZW5kaW5nIGZsYWcuIEV4Y2x1ZGVzIE5NSSBhbmQgZmF1bHRzLgorLy8KKy8vIDB4MDogSW50ZXJydXB0IG5vdCBwZW5kaW5nCisvLyAweDE6IEludGVycnVwdCBwZW5kaW5nCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9JU1JQRU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX0lTUlBFTkRJTkdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBDUFVfU0NTX0lDU1JfSVNSUEVORElOR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9JU1JQRU5ESU5HX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6IFsxNzoxMl0gVkVDVFBFTkRJTkcKKy8vCisvLyBQZW5kaW5nIElTUiBudW1iZXIgZmllbGQuIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIGludGVycnVwdCBudW1iZXIgb2YgdGhlCisvLyBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgSVNSLgorI2RlZmluZSBDUFVfU0NTX0lDU1JfVkVDVFBFTkRJTkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIENQVV9TQ1NfSUNTUl9WRUNUUEVORElOR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0YwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1ZFQ1RQRU5ESU5HX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBSRVRUT0JBU0UKKy8vCisvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGVyZSBhcmUgcHJlZW1wdGVkIGFjdGl2ZSBleGNlcHRpb25zOgorLy8KKy8vIDA6IFRoZXJlIGFyZSBwcmVlbXB0ZWQgYWN0aXZlIGV4Y2VwdGlvbnMgdG8gZXhlY3V0ZQorLy8gMTogVGhlcmUgYXJlIG5vIGFjdGl2ZSBleGNlcHRpb25zLCBvciB0aGUgY3VycmVudGx5LWV4ZWN1dGluZyBleGNlcHRpb24gaXMKKy8vIHRoZSBvbmx5IGFjdGl2ZSBleGNlcHRpb24uCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9SRVRUT0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1JFVFRPQkFTRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDUFVfU0NTX0lDU1JfUkVUVE9CQVNFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9SRVRUT0JBU0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgWzg6MF0gVkVDVEFDVElWRQorLy8KKy8vIEFjdGl2ZSBJU1IgbnVtYmVyIGZpZWxkLiBSZXNldCBjbGVhcnMgdGhpcyBmaWVsZC4KKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1ZFQ1RBQ1RJVkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUFVfU0NTX0lDU1JfVkVDVEFDVElWRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMUZGCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9WRUNUQUNUSVZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fVlRPUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzI5OjddIFRCTE9GRgorLy8KKy8vIEJpdHMgMjkgZG93biB0byA3IG9mIHRoZSB2ZWN0b3IgdGFibGUgYmFzZSBvZmZzZXQuCisjZGVmaW5lIENQVV9TQ1NfVlRPUl9UQkxPRkZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgQ1BVX1NDU19WVE9SX1RCTE9GRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzRkZGRkY4MAorI2RlZmluZSBDUFVfU0NTX1ZUT1JfVEJMT0ZGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0FJUkNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gVkVDVEtFWQorLy8KKy8vIFJlZ2lzdGVyIGtleS4gV3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyIChBSVJDUikgcmVxdWlyZXMgMHgwNUZBIGluIFZFQ1RLRVkuCisvLyBPdGhlcndpc2UgdGhlIHdyaXRlIHZhbHVlIGlzIGlnbm9yZWQuIFJlYWQgYWx3YXlzIHJldHVybnMgMHhGQTA1LgorI2RlZmluZSBDUFVfU0NTX0FJUkNSX1ZFQ1RLRVlfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfVkVDVEtFWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9WRUNUS0VZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBFTkRJQU5FU1MKKy8vCisvLyBEYXRhIGVuZGlhbm5lc3MgYml0CisvLyBFTlVNczoKKy8vIEJJRyAgICAgICAgICAgICAgICAgICAgICBCaWcgZW5kaWFuCisvLyBMSVRUTEUgICAgICAgICAgICAgICAgICAgTGl0dGxlIGVuZGlhbgorI2RlZmluZSBDUFVfU0NTX0FJUkNSX0VORElBTkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfRU5ESUFORVNTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9FTkRJQU5FU1NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUFVfU0NTX0FJUkNSX0VORElBTkVTU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfRU5ESUFORVNTX0JJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9FTkRJQU5FU1NfTElUVExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogIFsxMDo4XSBQUklHUk9VUAorLy8KKy8vIEludGVycnVwdCBwcmlvcml0eSBncm91cGluZyBmaWVsZC4gVGhpcyBmaWVsZCBpcyBhIGJpbmFyeSBwb2ludCBwb3NpdGlvbgorLy8gaW5kaWNhdG9yIGZvciBjcmVhdGluZyBzdWJwcmlvcml0aWVzIGZvciBleGNlcHRpb25zIHRoYXQgc2hhcmUgdGhlIHNhbWUKKy8vIHByZS1lbXB0aW9uIGxldmVsLiBJdCBkaXZpZGVzIHRoZSBQUklfbiBmaWVsZCBpbiB0aGUgSW50ZXJydXB0IFByaW9yaXR5CisvLyBSZWdpc3RlcnMgKE5WSUNfSVBSMCwgTlZJQ19JUFIxLC4uLiwgYW5kICBOVklDX0lQUjgpIGludG8gYSBwcmUtZW1wdGlvbgorLy8gbGV2ZWwgYW5kIGEgc3VicHJpb3JpdHkgbGV2ZWwuIFRoZSBiaW5hcnkgcG9pbnQgaXMgYSBsZWZ0LW9mIHZhbHVlLiBUaGlzCisvLyBtZWFucyB0aGF0IHRoZSBQUklHUk9VUCB2YWx1ZSByZXByZXNlbnRzIGEgcG9pbnQgc3RhcnRpbmcgYXQgdGhlIGxlZnQgb2YgdGhlCisvLyBMZWFzdCBTaWduaWZpY2FudCBCaXQgKExTQikuIFRoZSBsb3dlc3QgdmFsdWUgbWlnaHQgbm90IGJlIDAgZGVwZW5kaW5nIG9uCisvLyB0aGUgbnVtYmVyIG9mIGJpdHMgYWxsb2NhdGVkIGZvciBwcmlvcml0aWVzLCBhbmQgaW1wbGVtZW50YXRpb24gY2hvaWNlcy4KKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9QUklHUk9VUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfU0NTX0FJUkNSX1BSSUdST1VQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfUFJJR1JPVVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbMl0gU1lTUkVTRVRSRVEKKy8vCisvLyBSZXF1ZXN0cyBhIHdhcm0gcmVzZXQuIFNldHRpbmcgdGhpcyBiaXQgZG9lcyBub3QgcHJldmVudCBIYWx0aW5nIERlYnVnIGZyb20KKy8vIHJ1bm5pbmcuCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfU1lTUkVTRVRSRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9TWVNSRVNFVFJFUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfU0NTX0FJUkNSX1NZU1JFU0VUUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfU1lTUkVTRVRSRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gVkVDVENMUkFDVElWRQorLy8KKy8vIENsZWFycyBhbGwgYWN0aXZlIHN0YXRlIGluZm9ybWF0aW9uIGZvciBhY3RpdmUgTk1JLCBmYXVsdCwgYW5kIGludGVycnVwdHMuCisvLyBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHJlaW5pdGlhbGl6ZSB0aGUgc3RhY2suIFRoaXMKKy8vIGJpdCBpcyBmb3IgcmV0dXJuaW5nIHRvIGEga25vd24gc3RhdGUgZHVyaW5nIGRlYnVnLiBUaGUgYml0IHNlbGYtY2xlYXJzLgorLy8gSVBTUiBpcyBub3QgY2xlYXJlZCBieSB0aGlzIG9wZXJhdGlvbi4gU28sIGlmIHVzZWQgYnkgYW4gYXBwbGljYXRpb24sIGl0CisvLyBtdXN0IG9ubHkgYmUgdXNlZCBhdCB0aGUgYmFzZSBsZXZlbCBvZiBhY3RpdmF0aW9uLCBvciB3aXRoaW4gYSBzeXN0ZW0KKy8vIGhhbmRsZXIgd2hvc2UgYWN0aXZlIGJpdCBjYW4gYmUgc2V0LgorI2RlZmluZSBDUFVfU0NTX0FJUkNSX1ZFQ1RDTFJBQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfVkVDVENMUkFDVElWRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9WRUNUQ0xSQUNUSVZFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFZFQ1RSRVNFVAorLy8KKy8vIFN5c3RlbSBSZXNldCBiaXQuIFJlc2V0cyB0aGUgc3lzdGVtLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgZGVidWcgY29tcG9uZW50cy4KKy8vIFRoaXMgYml0IGlzIHJlc2VydmVkIGZvciBkZWJ1ZyB1c2UgYW5kIGNhbiBiZSB3cml0dGVuIHRvIDEgb25seSB3aGVuIHRoZQorLy8gY29yZSBpcyBoYWx0ZWQuIFRoZSBiaXQgc2VsZi1jbGVhcnMuIFdyaXRpbmcgdGhpcyBiaXQgdG8gMSB3aGlsZSBjb3JlIGlzIG5vdAorLy8gaGFsdGVkIG1heSByZXN1bHQgaW4gdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4KKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9WRUNUUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX0FJUkNSX1ZFQ1RSRVNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfVkVDVFJFU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9WRUNUUkVTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19TQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs0XSBTRVZPTlBFTkQKKy8vCisvLyBTZW5kIEV2ZW50IG9uIFBlbmRpbmcgYml0OgorLy8KKy8vIDA6IE9ubHkgZW5hYmxlZCBpbnRlcnJ1cHRzIG9yIGV2ZW50cyBjYW4gd2FrZXVwIHRoZSBwcm9jZXNzb3IsIGRpc2FibGVkCisvLyBpbnRlcnJ1cHRzIGFyZSBleGNsdWRlZAorLy8gMTogRW5hYmxlZCBldmVudHMgYW5kIGFsbCBpbnRlcnJ1cHRzLCBpbmNsdWRpbmcgZGlzYWJsZWQgaW50ZXJydXB0cywgY2FuCisvLyB3YWtldXAgdGhlIHByb2Nlc3Nvci4KKy8vCisvLyBXaGVuIGFuIGV2ZW50IG9yIGludGVycnVwdCBlbnRlcnMgcGVuZGluZyBzdGF0ZSwgdGhlIGV2ZW50IHNpZ25hbCB3YWtlcyB1cAorLy8gdGhlIHByb2Nlc3NvciBmcm9tIFdGRS4gSWYKKy8vIHRoZSBwcm9jZXNzb3IgaXMgbm90IHdhaXRpbmcgZm9yIGFuIGV2ZW50LCB0aGUgZXZlbnQgaXMgcmVnaXN0ZXJlZCBhbmQKKy8vIGFmZmVjdHMgdGhlIG5leHQgV0ZFLgorLy8gVGhlIHByb2Nlc3NvciBhbHNvIHdha2VzIHVwIG9uIGV4ZWN1dGlvbiBvZiBhbiBTRVYgaW5zdHJ1Y3Rpb24uCisjZGVmaW5lIENQVV9TQ1NfU0NSX1NFVk9OUEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX1NDU19TQ1JfU0VWT05QRU5EX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfU0NTX1NDUl9TRVZPTlBFTkRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfU0NSX1NFVk9OUEVORF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMl0gU0xFRVBERUVQCisvLworLy8gQ29udHJvbHMgd2hldGhlciB0aGUgcHJvY2Vzc29yIHVzZXMgc2xlZXAgb3IgZGVlcCBzbGVlcCBhcyBpdHMgbG93IHBvd2VyCisvLyBtb2RlCisvLyBFTlVNczoKKy8vIERFRVBTTEVFUCAgICAgICAgICAgICAgICBEZWVwIHNsZWVwCisvLyBTTEVFUCAgICAgICAgICAgICAgICAgICAgU2xlZXAKKyNkZWZpbmUgQ1BVX1NDU19TQ1JfU0xFRVBERUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX1NDUl9TTEVFUERFRVBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9TQ1NfU0NSX1NMRUVQREVFUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19TQ1JfU0xFRVBERUVQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfU0NTX1NDUl9TTEVFUERFRVBfREVFUFNMRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfU0NSX1NMRUVQREVFUF9TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gU0xFRVBPTkVYSVQKKy8vCisvLyBTbGVlcCBvbiBleGl0IHdoZW4gcmV0dXJuaW5nIGZyb20gSGFuZGxlciBtb2RlIHRvIFRocmVhZCBtb2RlLiBFbmFibGVzCisvLyBpbnRlcnJ1cHQgZHJpdmVuIGFwcGxpY2F0aW9ucyB0byBhdm9pZCByZXR1cm5pbmcgdG8gZW1wdHkgbWFpbiBhcHBsaWNhdGlvbi4KKy8vCisvLyAwOiBEbyBub3Qgc2xlZXAgd2hlbiByZXR1cm5pbmcgdG8gdGhyZWFkIG1vZGUKKy8vIDE6IFNsZWVwIG9uIElTUiBleGl0CisjZGVmaW5lIENQVV9TQ1NfU0NSX1NMRUVQT05FWElUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19TQ1JfU0xFRVBPTkVYSVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfU0NTX1NDUl9TTEVFUE9ORVhJVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfU0NSX1NMRUVQT05FWElUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fQ0NSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOV0gU1RLQUxJR04KKy8vCisvLyBTdGFjayBhbGlnbm1lbnQgYml0LgorLy8KKy8vIDA6IE9ubHkgNC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGZvciB0aGUgU1AgdXNlZCBwcmlvciB0byB0aGUKKy8vIGV4Y2VwdGlvbiBvbiBleGNlcHRpb24gZW50cnkuCisvLyAxOiBPbiBleGNlcHRpb24gZW50cnksIHRoZSBTUCB1c2VkIHByaW9yIHRvIHRoZSBleGNlcHRpb24gaXMgYWRqdXN0ZWQgdG8gYmUKKy8vIDgtYnl0ZSBhbGlnbmVkIGFuZCB0aGUgY29udGV4dCB0byByZXN0b3JlIGl0IGlzIHNhdmVkLiBUaGUgU1AgaXMgcmVzdG9yZWQgb24KKy8vIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiByZXR1cm4uCisjZGVmaW5lIENQVV9TQ1NfQ0NSX1NUS0FMSUdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfU1RLQUxJR05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUFVfU0NTX0NDUl9TVEtBTElHTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfQ0NSX1NUS0FMSUdOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gQkZIRk5NSUdOCisvLworLy8gRW5hYmxlcyBoYW5kbGVycyB3aXRoIHByaW9yaXR5IC0xIG9yIC0yIHRvIGlnbm9yZSBkYXRhIEJ1c0ZhdWx0cyBjYXVzZWQgYnkKKy8vIGxvYWQgYW5kIHN0b3JlIGluc3RydWN0aW9ucy4gVGhpcyBhcHBsaWVzIHRvIHRoZSBIYXJkRmF1bHQsIE5NSSwgYW5kCisvLyBGQVVMVE1BU0sgZXNjYWxhdGVkIGhhbmRsZXJzOgorLy8KKy8vIDA6IERhdGEgQnVzRmF1bHRzIGNhdXNlZCBieSBsb2FkIGFuZCBzdG9yZSBpbnN0cnVjdGlvbnMgY2F1c2UgYSBsb2NrLXVwCisvLyAxOiBEYXRhIEJ1c0ZhdWx0cyBjYXVzZWQgYnkgbG9hZCBhbmQgc3RvcmUgaW5zdHJ1Y3Rpb25zIGFyZSBpZ25vcmVkLgorLy8KKy8vIFNldCB0aGlzIGJpdCB0byAxIG9ubHkgd2hlbiB0aGUgaGFuZGxlciBhbmQgaXRzIGRhdGEgYXJlIGluIGFic29sdXRlbHkgc2FmZQorLy8gbWVtb3J5LiBUaGUgbm9ybWFsIHVzZQorLy8gb2YgdGhpcyBiaXQgaXMgdG8gcHJvYmUgc3lzdGVtIGRldmljZXMgYW5kIGJyaWRnZXMgdG8gZGV0ZWN0IHByb2JsZW1zLgorI2RlZmluZSBDUFVfU0NTX0NDUl9CRkhGTk1JR04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfQ0NSX0JGSEZOTUlHTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfQkZIRk5NSUdOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfU0NTX0NDUl9CRkhGTk1JR05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzRdIERJVl8wX1RSUAorLy8KKy8vIEVuYWJsZXMgZmF1bHRpbmcgb3IgaGFsdGluZyB3aGVuIHRoZSBwcm9jZXNzb3IgZXhlY3V0ZXMgYW4gU0RJViBvciBVRElWCisvLyBpbnN0cnVjdGlvbiB3aXRoIGEgZGl2aXNvciBvZiAwOgorLy8KKy8vIDA6IERvIG5vdCB0cmFwIGRpdmlkZSBieSAwLiBJbiB0aGlzIG1vZGUsIGEgZGl2aWRlIGJ5IHplcm8gcmV0dXJucyBhCisvLyBxdW90aWVudCBvZiAwLgorLy8gMTogVHJhcCBkaXZpZGUgYnkgMC4gVGhlIHJlbGV2YW50IFVzYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBiaXQgaXMKKy8vIENGU1IuRElWQllaRVJPLgorI2RlZmluZSBDUFVfU0NTX0NDUl9ESVZfMF9UUlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfQ0NSX0RJVl8wX1RSUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfRElWXzBfVFJQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX0NDUl9ESVZfMF9UUlBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFVOQUxJR05fVFJQCisvLworLy8gRW5hYmxlcyB1bmFsaWduZWQgYWNjZXNzIHRyYXBzOgorLy8KKy8vIDA6IERvIG5vdCB0cmFwIHVuYWxpZ25lZCBoYWxmd29yZCBhbmQgd29yZCBhY2Nlc3NlcworLy8gMTogVHJhcCB1bmFsaWduZWQgaGFsZndvcmQgYW5kIHdvcmQgYWNjZXNzZXMuIFRoZSByZWxldmFudCBVc2FnZSBGYXVsdAorLy8gU3RhdHVzIFJlZ2lzdGVyIGJpdCBpcyBDRlNSLlVOQUxJR05FRC4KKy8vCisvLyBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgYW4gdW5hbGlnbmVkIGFjY2VzcyBnZW5lcmF0ZXMgYSBVc2FnZUZhdWx0LgorLy8gVW5hbGlnbmVkIExETSwgU1RNLCBMRFJELCBhbmQgU1RSRCBpbnN0cnVjdGlvbnMgYWx3YXlzIGZhdWx0IHJlZ2FyZGxlc3Mgb2YKKy8vIHRoZSB2YWx1ZSBpbiBVTkFMSUdOX1RSUC4KKyNkZWZpbmUgQ1BVX1NDU19DQ1JfVU5BTElHTl9UUlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX0NDUl9VTkFMSUdOX1RSUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9TQ1NfQ0NSX1VOQUxJR05fVFJQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfVU5BTElHTl9UUlBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsxXSBVU0VSU0VUTVBFTkQKKy8vCisvLyBFbmFibGVzIHVucHJpdmlsZWdlZCBzb2Z0d2FyZSBhY2Nlc3MgdG8gU1RJUjoKKy8vCisvLyAwOiBVc2VyIGNvZGUgaXMgbm90IGFsbG93ZWQgdG8gd3JpdGUgdG8gdGhlIFNvZnR3YXJlIFRyaWdnZXIgSW50ZXJydXB0CisvLyByZWdpc3RlciAoU1RJUikuCisvLyAxOiBVc2VyIGNvZGUgY2FuIHdyaXRlIHRoZSBTb2Z0d2FyZSBUcmlnZ2VyIEludGVycnVwdCByZWdpc3RlciAoU1RJUikgdG8KKy8vIHRyaWdnZXIgKHBlbmQpIGEgTWFpbiBleGNlcHRpb24sIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgTWFpbiBzdGFjaworLy8gcG9pbnRlci4KKyNkZWZpbmUgQ1BVX1NDU19DQ1JfVVNFUlNFVE1QRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX0NDUl9VU0VSU0VUTVBFTkRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfQ0NSX1VTRVJTRVRNUEVORF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfVVNFUlNFVE1QRU5EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBOT05CQVNFVEhSRURFTkEKKy8vCisvLyBJbmRpY2F0ZXMgaG93IHRoZSBwcm9jZXNzb3IgZW50ZXJzIFRocmVhZCBtb2RlOgorLy8KKy8vIDA6IFByb2Nlc3NvciBjYW4gZW50ZXIgVGhyZWFkIG1vZGUgb25seSB3aGVuIG5vIGV4Y2VwdGlvbiBpcyBhY3RpdmUuCisvLyAxOiBQcm9jZXNzb3IgY2FuIGVudGVyIFRocmVhZCBtb2RlIGZyb20gYW55IGxldmVsIHVzaW5nIHRoZSBhcHByb3ByaWF0ZQorLy8gcmV0dXJuIHZhbHVlIChFWENfUkVUVVJOKS4KKy8vCisvLyBFeGNlcHRpb24gcmV0dXJucyBvY2N1ciB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBsb2FkcyBhIHZhbHVlCisvLyBvZiAweEZYWFhYWFhYIGludG8gdGhlIFBDIHdoaWxlIGluIEhhbmRsZXIgbW9kZToKKy8vIC0gUE9QL0xETSB3aGljaCBpbmNsdWRlcyBsb2FkaW5nIHRoZSBQQy4KKy8vIC0gTERSIHdpdGggUEMgYXMgYSBkZXN0aW5hdGlvbi4KKy8vIC0gQlggd2l0aCBhbnkgcmVnaXN0ZXIuCisvLyBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUEMgaXMgaW50ZXJjZXB0ZWQgYW5kIGlzIHJlZmVycmVkIHRvIGFzIHRoZQorLy8gRVhDX1JFVFVSTiB2YWx1ZS4KKyNkZWZpbmUgQ1BVX1NDU19DQ1JfTk9OQkFTRVRIUkVERU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX0NDUl9OT05CQVNFVEhSRURFTkFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfQ0NSX05PTkJBU0VUSFJFREVOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfTk9OQkFTRVRIUkVERU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19TSFBSMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjM6MTZdIFBSSV82CisvLworLy8gUHJpb3JpdHkgb2Ygc3lzdGVtIGhhbmRsZXIgNi4gVXNhZ2VGYXVsdAorI2RlZmluZSBDUFVfU0NTX1NIUFIxX1BSSV82X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfU0hQUjFfUFJJXzZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSFBSMV9QUklfNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBQUklfNQorLy8KKy8vIFByaW9yaXR5IG9mIHN5c3RlbSBoYW5kbGVyIDU6IEJ1c0ZhdWx0CisjZGVmaW5lIENQVV9TQ1NfU0hQUjFfUFJJXzVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19TSFBSMV9QUklfNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBDUFVfU0NTX1NIUFIxX1BSSV81X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFBSSV80CisvLworLy8gUHJpb3JpdHkgb2Ygc3lzdGVtIGhhbmRsZXIgNDogTWVtTWFuYWdlCisjZGVmaW5lIENQVV9TQ1NfU0hQUjFfUFJJXzRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19TSFBSMV9QUklfNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfU0NTX1NIUFIxX1BSSV80X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX1NIUFIyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gUFJJXzExCisvLworLy8gUHJpb3JpdHkgb2Ygc3lzdGVtIGhhbmRsZXIgMTEuIFNWQ2FsbAorI2RlZmluZSBDUFVfU0NTX1NIUFIyX1BSSV8xMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfU0hQUjJfUFJJXzExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSFBSMl9QUklfMTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19TSFBSMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFBSSV8xNQorLy8KKy8vIFByaW9yaXR5IG9mIHN5c3RlbSBoYW5kbGVyIDE1LiBTeXNUaWNrIGV4Y2VwdGlvbgorI2RlZmluZSBDUFVfU0NTX1NIUFIzX1BSSV8xNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfU0hQUjNfUFJJXzE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSFBSM19QUklfMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBQUklfMTQKKy8vCisvLyBQcmlvcml0eSBvZiBzeXN0ZW0gaGFuZGxlciAxNC4gUGVuZCBTVgorI2RlZmluZSBDUFVfU0NTX1NIUFIzX1BSSV8xNF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfU0hQUjNfUFJJXzE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSFBSM19QUklfMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICBbNzowXSBQUklfMTIKKy8vCisvLyBQcmlvcml0eSBvZiBzeXN0ZW0gaGFuZGxlciAxMi4gRGVidWcgTW9uaXRvcgorI2RlZmluZSBDUFVfU0NTX1NIUFIzX1BSSV8xMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfU0hQUjNfUFJJXzEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ1BVX1NDU19TSFBSM19QUklfMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19TSENTUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMThdIFVTR0ZBVUxURU5BCisvLworLy8gVXNhZ2UgZmF1bHQgc3lzdGVtIGhhbmRsZXIgZW5hYmxlCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gZW5hYmxlZAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBkaXNhYmxlZAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxURU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRFTkFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVEVOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxURU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRFTkFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVEVOQV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE3XSBCVVNGQVVMVEVOQQorLy8KKy8vIEJ1cyBmYXVsdCBzeXN0ZW0gaGFuZGxlciBlbmFibGUKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBlbmFibGVkCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGRpc2FibGVkCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVEVOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxURU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRFTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVEVOQV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxURU5BX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTZdIE1FTUZBVUxURU5BCisvLworLy8gTWVtTWFuYWdlIGZhdWx0IHN5c3RlbSBoYW5kbGVyIGVuYWJsZQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGVuYWJsZWQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gZGlzYWJsZWQKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVEVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxURU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVEVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxURU5BX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRFTkFfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxNV0gU1ZDQUxMUEVOREVECisvLworLy8gU1ZDYWxsIHBlbmRpbmcKKy8vIEVOVU1zOgorLy8gUEVORElORyAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBpcyBwZW5kaW5nLgorLy8gTk9UUEVORElORyAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBpcyBub3QgYWN0aXZlCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1ZDQUxMUEVOREVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TVkNBTExQRU5ERURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NWQ0FMTFBFTkRFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1ZDQUxMUEVOREVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TVkNBTExQRU5ERURfUEVORElORyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NWQ0FMTFBFTkRFRF9OT1RQRU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTRdIEJVU0ZBVUxUUEVOREVECisvLworLy8gQnVzRmF1bHQgcGVuZGluZworLy8gRU5VTXM6CisvLyBQRU5ESU5HICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIHBlbmRpbmcuCisvLyBOT1RQRU5ESU5HICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIG5vdCBhY3RpdmUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVFBFTkRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRQRU5ERURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVFBFTkRFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRQRU5ERURfTk9UUEVORElORyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxM10gTUVNRkFVTFRQRU5ERUQKKy8vCisvLyBNZW1NYW5hZ2UgZXhjZXB0aW9uIHBlbmRpbmcKKy8vIEVOVU1zOgorLy8gUEVORElORyAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBpcyBwZW5kaW5nLgorLy8gTk9UUEVORElORyAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBpcyBub3QgYWN0aXZlCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRQRU5ERUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVFBFTkRFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxUUEVOREVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRQRU5ERURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVFBFTkRFRF9QRU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxUUEVOREVEX05PVFBFTkRJTkcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFVTR0ZBVUxUUEVOREVECisvLworLy8gVXNhZ2UgZmF1bHQgcGVuZGluZworLy8gRU5VTXM6CisvLyBQRU5ESU5HICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIHBlbmRpbmcuCisvLyBOT1RQRU5ESU5HICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIG5vdCBhY3RpdmUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVFBFTkRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxUUEVOREVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRQRU5ERURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVFBFTkRFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxUUEVOREVEX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRQRU5ERURfTk9UUEVORElORyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxMV0gU1lTVElDS0FDVAorLy8KKy8vIFN5c1RpY2sgYWN0aXZlIGZsYWcuCisvLworLy8gMHgwOiBOb3QgYWN0aXZlCisvLyAweDE6IEFjdGl2ZQorLy8gRU5VTXM6CisvLyBBQ1RJVkUgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIGFjdGl2ZQorLy8gTk9UQUNUSVZFICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBpcyBub3QgYWN0aXZlCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1lTVElDS0FDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TWVNUSUNLQUNUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NZU1RJQ0tBQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1lTVElDS0FDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TWVNUSUNLQUNUX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NZU1RJQ0tBQ1RfTk9UQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTBdIFBFTkRTVkFDVAorLy8KKy8vIFBlbmRTViBhY3RpdmUKKy8vCisvLyAweDA6IE5vdCBhY3RpdmUKKy8vIDB4MTogQWN0aXZlCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfUEVORFNWQUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9QRU5EU1ZBQ1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1BFTkRTVkFDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfUEVORFNWQUNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOF0gTU9OSVRPUkFDVAorLy8KKy8vIERlYnVnIG1vbml0b3IgYWN0aXZlCisvLyBFTlVNczoKKy8vIEFDVElWRSAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgYWN0aXZlCisvLyBOT1RBQ1RJVkUgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIG5vdCBhY3RpdmUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NT05JVE9SQUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01PTklUT1JBQ1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTU9OSVRPUkFDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NT05JVE9SQUNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01PTklUT1JBQ1RfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTU9OSVRPUkFDVF9OT1RBQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbN10gU1ZDQUxMQUNUCisvLworLy8gU1ZDYWxsIGFjdGl2ZQorLy8gRU5VTXM6CisvLyBBQ1RJVkUgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIGFjdGl2ZQorLy8gTk9UQUNUSVZFICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBpcyBub3QgYWN0aXZlCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1ZDQUxMQUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TVkNBTExBQ1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NWQ0FMTEFDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1ZDQUxMQUNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TVkNBTExBQ1RfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NWQ0FMTEFDVF9OT1RBQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzNdIFVTR0ZBVUxUQUNUCisvLworLy8gVXNhZ2VGYXVsdCBleGNlcHRpb24gYWN0aXZlCisvLyBFTlVNczoKKy8vIEFDVElWRSAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgYWN0aXZlCisvLyBOT1RBQ1RJVkUgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIG5vdCBhY3RpdmUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVEFDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxUQUNUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRBQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVEFDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxUQUNUX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRBQ1RfTk9UQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gQlVTRkFVTFRBQ1QKKy8vCisvLyBCdXNGYXVsdCBleGNlcHRpb24gYWN0aXZlCisvLyBFTlVNczoKKy8vIEFDVElWRSAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgYWN0aXZlCisvLyBOT1RBQ1RJVkUgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIG5vdCBhY3RpdmUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVEFDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxUQUNUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRBQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVEFDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxUQUNUX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRBQ1RfTk9UQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gTUVNRkFVTFRBQ1QKKy8vCisvLyBNZW1NYW5hZ2UgZXhjZXB0aW9uIGFjdGl2ZQorLy8gRU5VTXM6CisvLyBBQ1RJVkUgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIGFjdGl2ZQorLy8gTk9UQUNUSVZFICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBpcyBub3QgYWN0aXZlCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRBQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVEFDVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxUQUNUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRBQ1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVEFDVF9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxUQUNUX05PVEFDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0NGU1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI1XSBESVZCWVpFUk8KKy8vCisvLyBXaGVuIENDUi5ESVZfMF9UUlAgKHNlZSBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgb24gcGFnZSA4LTI2KSBpcworLy8gZW5hYmxlZCBhbmQgYW4gU0RJViBvciBVRElWIGluc3RydWN0aW9uIGlzIHVzZWQgd2l0aCBhIGRpdmlzb3Igb2YgMCwgdGhpcworLy8gZmF1bHQgb2NjdXJzIFRoZSBpbnN0cnVjdGlvbiBpcyBleGVjdXRlZCBhbmQgdGhlIHJldHVybiBQQyBwb2ludHMgdG8gaXQuIElmCisvLyBDQ1IuRElWXzBfVFJQIGlzIG5vdCBzZXQsIHRoZW4gdGhlIGRpdmlkZSByZXR1cm5zIGEgcXVvdGllbnQgb2YgMC4KKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0RJVkJZWkVSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfRElWQllaRVJPX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9ESVZCWVpFUk9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0RJVkJZWkVST19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBVTkFMSUdORUQKKy8vCisvLyBXaGVuIENDUi5VTkFMSUdOX1RSUCBpcyBlbmFibGVkLCBhbmQgdGhlcmUgaXMgYW4gYXR0ZW1wdCB0byBtYWtlIGFuCisvLyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcywgdGhlbiB0aGlzIGZhdWx0IG9jY3Vycy4gVW5hbGlnbmVkIExETS9TVE0vTERSRC9TVFJECisvLyBpbnN0cnVjdGlvbnMgYWx3YXlzIGZhdWx0IGlycmVzcGVjdGl2ZSBvZiB0aGUgc2V0dGluZyBvZiBDQ1IuVU5BTElHTl9UUlAuCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9VTkFMSUdORUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1VOQUxJR05FRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDUFVfU0NTX0NGU1JfVU5BTElHTkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9VTkFMSUdORURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxOV0gTk9DUAorLy8KKy8vIEF0dGVtcHQgdG8gdXNlIGEgY29wcm9jZXNzb3IgaW5zdHJ1Y3Rpb24uIFRoZSBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydAorLy8gY29wcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLgorI2RlZmluZSBDUFVfU0NTX0NGU1JfTk9DUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9OT0NQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX05PQ1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfTk9DUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIElOVlBDCisvLworLy8gQXR0ZW1wdCB0byBsb2FkIEVYQ19SRVRVUk4gaW50byBQQyBpbGxlZ2FsbHkuIEludmFsaWQgaW5zdHJ1Y3Rpb24sIGludmFsaWQKKy8vIGNvbnRleHQsIGludmFsaWQgdmFsdWUuIFRoZSByZXR1cm4gUEMgcG9pbnRzIHRvIHRoZSBpbnN0cnVjdGlvbiB0aGF0IHRyaWVkCisvLyB0byBzZXQgdGhlIFBDLgorI2RlZmluZSBDUFVfU0NTX0NGU1JfSU5WUEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JTlZQQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lOVlBDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfSU5WUENfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIElOVlNUQVRFCisvLworLy8gSW5kaWNhdGVzIGFuIGF0dGVtcHQgdG8gZXhlY3V0ZSBpbiBhbiBpbnZhbGlkIEVQU1Igc3RhdGUgKGUuZy4gYWZ0ZXIgYSBCWAorLy8gdHlwZSBpbnN0cnVjdGlvbiBoYXMgY2hhbmdlZCBzdGF0ZSkuIFRoaXMgaW5jbHVkZXMgc3RhdGUgY2hhbmdlIGFmdGVyIGVudHJ5CisvLyB0byBvciByZXR1cm4gZnJvbSBleGNlcHRpb24sIGFzIHdlbGwgYXMgZnJvbSBpbnRlci13b3JraW5nIGluc3RydWN0aW9ucy4KKy8vIFJldHVybiBQQyBwb2ludHMgdG8gZmF1bHRpbmcgaW5zdHJ1Y3Rpb24sIHdpdGggdGhlIGludmFsaWQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JTlZTVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lOVlNUQVRFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfU0NTX0NGU1JfSU5WU1RBVEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JTlZTVEFURV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gVU5ERUZJTlNUUgorLy8KKy8vIFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBwcm9jZXNzb3IgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBhbiB1bmRlZmluZWQKKy8vIGluc3RydWN0aW9uLiBUaGlzIGlzIGFuIGluc3RydWN0aW9uIHRoYXQgdGhlIHByb2Nlc3NvciBjYW5ub3QgZGVjb2RlLiBUaGUKKy8vIHJldHVybiBQQyBwb2ludHMgdG8gdGhlIHVuZGVmaW5lZCBpbnN0cnVjdGlvbi4KKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1VOREVGSU5TVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfVU5ERUZJTlNUUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9VTkRFRklOU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1VOREVGSU5TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBCRkFSVkFMSUQKKy8vCisvLyBUaGlzIGJpdCBpcyBzZXQgaWYgdGhlIEJ1cyBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyIChCRkFSKSBjb250YWlucyBhIHZhbGlkCisvLyBhZGRyZXNzLiBUaGlzIGlzIHRydWUgYWZ0ZXIgYSBidXMgZmF1bHQgd2hlcmUgdGhlIGFkZHJlc3MgaXMga25vd24uIE90aGVyCisvLyBmYXVsdHMgY2FuIGNsZWFyIHRoaXMgYml0LCBzdWNoIGFzIGEgTWVtIE1hbmFnZSBmYXVsdCBvY2N1cnJpbmcgbGF0ZXIuIElmIGEKKy8vIEJ1cyBmYXVsdCBvY2N1cnMgdGhhdCBpcyBlc2NhbGF0ZWQgdG8gYSBIYXJkIEZhdWx0IGJlY2F1c2Ugb2YgcHJpb3JpdHksIHRoZQorLy8gSGFyZCBGYXVsdCBoYW5kbGVyIG11c3QgY2xlYXIgdGhpcyBiaXQuIFRoaXMgcHJldmVudHMgcHJvYmxlbXMgaWYgcmV0dXJuaW5nCisvLyB0byBhIHN0YWNrZWQgYWN0aXZlIEJ1cyBmYXVsdCBoYW5kbGVyIHdob3NlIEJGQVIgdmFsdWUgaGFzIGJlZW4gb3ZlcndyaXR0ZW4uCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9CRkFSVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0JGQVJWQUxJRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDUFVfU0NTX0NGU1JfQkZBUlZBTElEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9CRkFSVkFMSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxMl0gU1RLRVJSCisvLworLy8gU3RhY2tpbmcgZnJvbSBleGNlcHRpb24gaGFzIGNhdXNlZCBvbmUgb3IgbW9yZSBidXMgZmF1bHRzLiBUaGUgU1AgaXMgc3RpbGwKKy8vIGFkanVzdGVkIGFuZCB0aGUgdmFsdWVzIGluIHRoZSBjb250ZXh0IGFyZWEgb24gdGhlIHN0YWNrIG1pZ2h0IGJlIGluY29ycmVjdC4KKy8vIEJGQVIgaXMgbm90IHdyaXR0ZW4uCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9TVEtFUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1NUS0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDUFVfU0NTX0NGU1JfU1RLRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9TVEtFUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gVU5TVEtFUlIKKy8vCisvLyBVbnN0YWNrIGZyb20gZXhjZXB0aW9uIHJldHVybiBoYXMgY2F1c2VkIG9uZSBvciBtb3JlIGJ1cyBmYXVsdHMuIFRoaXMgaXMKKy8vIGNoYWluZWQgdG8gdGhlIGhhbmRsZXIsIHNvIHRoYXQgdGhlIG9yaWdpbmFsIHJldHVybiBzdGFjayBpcyBzdGlsbCBwcmVzZW50LgorLy8gU1AgaXMgbm90IGFkanVzdGVkIGZyb20gZmFpbGluZyByZXR1cm4gYW5kIG5ldyBzYXZlIGlzIG5vdCBwZXJmb3JtZWQuIEJGQVIKKy8vIGlzIG5vdCB3cml0dGVuLgorI2RlZmluZSBDUFVfU0NTX0NGU1JfVU5TVEtFUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9VTlNUS0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1VOU1RLRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfVU5TVEtFUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIElNUFJFQ0lTRVJSCisvLworLy8gSW1wcmVjaXNlIGRhdGEgYnVzIGVycm9yLiBJdCBpcyBhIEJ1c0ZhdWx0LCBidXQgdGhlIFJldHVybiBQQyBpcyBub3QgcmVsYXRlZAorLy8gdG8gdGhlIGNhdXNpbmcgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgbm90IGEgc3luY2hyb25vdXMgZmF1bHQuIFNvLCBpZiBkZXRlY3RlZAorLy8gd2hlbiB0aGUgcHJpb3JpdHkgb2YgdGhlIGN1cnJlbnQgYWN0aXZhdGlvbiBpcyBoaWdoZXIgdGhhbiB0aGUgQnVzIEZhdWx0LCBpdAorLy8gb25seSBwZW5kcy4gQnVzIGZhdWx0IGFjdGl2YXRlcyB3aGVuIHJldHVybmluZyB0byBhIGxvd2VyIHByaW9yaXR5CisvLyBhY3RpdmF0aW9uLiBJZiBhIHByZWNpc2UgZmF1bHQgb2NjdXJzIGJlZm9yZSByZXR1cm5pbmcgdG8gYSBsb3dlciBwcmlvcml0eQorLy8gZXhjZXB0aW9uLCB0aGUgaGFuZGxlciBkZXRlY3RzIGJvdGggSU1QUkVDSVNFUlIgc2V0IGFuZCBvbmUgb2YgdGhlIHByZWNpc2UKKy8vIGZhdWx0IHN0YXR1cyBiaXRzIHNldCBhdCB0aGUgc2FtZSB0aW1lLiBCRkFSIGlzIG5vdCB3cml0dGVuLgorI2RlZmluZSBDUFVfU0NTX0NGU1JfSU1QUkVDSVNFUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JTVBSRUNJU0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lNUFJFQ0lTRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfSU1QUkVDSVNFUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFBSRUNJU0VSUgorLy8KKy8vIFByZWNpc2UgZGF0YSBidXMgZXJyb3IgcmV0dXJuLgorI2RlZmluZSBDUFVfU0NTX0NGU1JfUFJFQ0lTRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9QUkVDSVNFUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1BSRUNJU0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfUFJFQ0lTRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIElCVVNFUlIKKy8vCisvLyBJbnN0cnVjdGlvbiBidXMgZXJyb3IgZmxhZy4gVGhpcyBmbGFnIGlzIHNldCBieSBhIHByZWZldGNoIGVycm9yLiBUaGUgZmF1bHQKKy8vIHN0b3BzIG9uIHRoZSBpbnN0cnVjdGlvbiwgc28gaWYgdGhlIGVycm9yIG9jY3VycyB1bmRlciBhIGJyYW5jaCBzaGFkb3csIG5vCisvLyBmYXVsdCBvY2N1cnMuIEJGQVIgaXMgbm90IHdyaXR0ZW4uCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JQlVTRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lCVVNFUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX0NGU1JfSUJVU0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JQlVTRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gTU1BUlZBTElECisvLworLy8gTWVtb3J5IE1hbmFnZSBBZGRyZXNzIFJlZ2lzdGVyIChNTUZBUikgYWRkcmVzcyB2YWxpZCBmbGFnLiBBIGxhdGVyLWFycml2aW5nCisvLyBmYXVsdCwgc3VjaCBhcyBhIGJ1cyBmYXVsdCwgY2FuIGNsZWFyIGEgbWVtb3J5IG1hbmFnZSBmYXVsdC4uIElmIGEgTWVtTWFuYWdlCisvLyBmYXVsdCBvY2N1cnMgdGhhdCBpcyBlc2NhbGF0ZWQgdG8gYSBIYXJkIEZhdWx0IGJlY2F1c2Ugb2YgcHJpb3JpdHksIHRoZSBIYXJkCisvLyBGYXVsdCBoYW5kbGVyIG11c3QgY2xlYXIgdGhpcyBiaXQuIFRoaXMgcHJldmVudHMgcHJvYmxlbXMgb24gcmV0dXJuIHRvIGEKKy8vIHN0YWNrZWQgYWN0aXZlIE1lbU1hbmFnZSBoYW5kbGVyIHdob3NlIE1NRkFSIHZhbHVlIGhhcyBiZWVuIG92ZXJ3cml0dGVuLgorI2RlZmluZSBDUFVfU0NTX0NGU1JfTU1BUlZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9NTUFSVkFMSURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX01NQVJWQUxJRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX0NGU1JfTU1BUlZBTElEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzRdIE1TVEtFUlIKKy8vCisvLyBTdGFja2luZyBmcm9tIGV4Y2VwdGlvbiBoYXMgY2F1c2VkIG9uZSBvciBtb3JlIGFjY2VzcyB2aW9sYXRpb25zLiBUaGUgU1AgaXMKKy8vIHN0aWxsIGFkanVzdGVkIGFuZCB0aGUgdmFsdWVzIGluIHRoZSBjb250ZXh0IGFyZWEgb24gdGhlIHN0YWNrIG1pZ2h0IGJlCisvLyBpbmNvcnJlY3QuIE1NRkFSIGlzIG5vdCB3cml0dGVuLgorI2RlZmluZSBDUFVfU0NTX0NGU1JfTVNUS0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9NU1RLRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX01TVEtFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfTVNUS0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIE1VTlNUS0VSUgorLy8KKy8vIFVuc3RhY2sgZnJvbSBleGNlcHRpb24gcmV0dXJuIGhhcyBjYXVzZWQgb25lIG9yIG1vcmUgYWNjZXNzIHZpb2xhdGlvbnMuIFRoaXMKKy8vIGlzIGNoYWluZWQgdG8gdGhlIGhhbmRsZXIsIHNvIHRoYXQgdGhlIG9yaWdpbmFsIHJldHVybiBzdGFjayBpcyBzdGlsbAorLy8gcHJlc2VudC4gU1AgaXMgbm90IGFkanVzdGVkIGZyb20gZmFpbGluZyByZXR1cm4gYW5kIG5ldyBzYXZlIGlzIG5vdAorLy8gcGVyZm9ybWVkLiBNTUZBUiBpcyBub3Qgd3JpdHRlbi4KKyNkZWZpbmUgQ1BVX1NDU19DRlNSX01VTlNUS0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX0NGU1JfTVVOU1RLRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9NVU5TVEtFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX01VTlNUS0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsxXSBEQUNDVklPTAorLy8KKy8vIERhdGEgYWNjZXNzIHZpb2xhdGlvbiBmbGFnLiBBdHRlbXB0aW5nIHRvIGxvYWQgb3Igc3RvcmUgYXQgYSBsb2NhdGlvbiB0aGF0CisvLyBkb2VzIG5vdCBwZXJtaXQgdGhlIG9wZXJhdGlvbiBzZXRzIHRoaXMgZmxhZy4gVGhlIHJldHVybiBQQyBwb2ludHMgdG8gdGhlCisvLyBmYXVsdGluZyBpbnN0cnVjdGlvbi4gVGhpcyBlcnJvciBsb2FkcyBNTUZBUiB3aXRoIHRoZSBhZGRyZXNzIG9mIHRoZQorLy8gYXR0ZW1wdGVkIGFjY2Vzcy4KKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0RBQ0NWSU9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX0NGU1JfREFDQ1ZJT0xfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9EQUNDVklPTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0RBQ0NWSU9MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBJQUNDVklPTAorLy8KKy8vIEluc3RydWN0aW9uIGFjY2VzcyB2aW9sYXRpb24gZmxhZy4gQXR0ZW1wdGluZyB0byBmZXRjaCBhbiBpbnN0cnVjdGlvbiBmcm9tIGEKKy8vIGxvY2F0aW9uIHRoYXQgZG9lcyBub3QgcGVybWl0IGV4ZWN1dGlvbiBzZXRzIHRoaXMgZmxhZy4gVGhpcyBvY2N1cnMgb24gYW55CisvLyBhY2Nlc3MgdG8gYW4gWE4gcmVnaW9uLCBldmVuIHdoZW4gdGhlIE1QVSBpcyBkaXNhYmxlZCBvciBub3QgcHJlc2VudC4gVGhlCisvLyByZXR1cm4gUEMgcG9pbnRzIHRvIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbi4gTU1GQVIgaXMgbm90IHdyaXR0ZW4uCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JQUNDVklPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lBQ0NWSU9MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfSUFDQ1ZJT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JQUNDVklPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fSEZTUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIERFQlVHRVZUCisvLworLy8gVGhpcyBiaXQgaXMgc2V0IGlmIHRoZXJlIGlzIGEgZmF1bHQgcmVsYXRlZCB0byBkZWJ1Zy4gVGhpcyBpcyBvbmx5IHBvc3NpYmxlCisvLyB3aGVuIGhhbHRpbmcgZGVidWcgaXMgbm90IGVuYWJsZWQuIEZvciBtb25pdG9yIGVuYWJsZWQgZGVidWcsIGl0IG9ubHkKKy8vIGhhcHBlbnMgZm9yIEJLUFQgd2hlbiB0aGUgY3VycmVudCBwcmlvcml0eSBpcyBoaWdoZXIgdGhhbiB0aGUgbW9uaXRvci4gV2hlbgorLy8gYm90aCBoYWx0aW5nIGFuZCBtb25pdG9yIGRlYnVnIGFyZSBkaXNhYmxlZCwgaXQgb25seSBoYXBwZW5zIGZvciBkZWJ1ZworLy8gZXZlbnRzIHRoYXQgYXJlIG5vdCBpZ25vcmVkIChtaW5pbWFsbHksIEJLUFQpLiBUaGUgRGVidWcgRmF1bHQgU3RhdHVzCisvLyBSZWdpc3RlciBpcyB1cGRhdGVkLgorI2RlZmluZSBDUFVfU0NTX0hGU1JfREVCVUdFVlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSEZTUl9ERUJVR0VWVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1BVX1NDU19IRlNSX0RFQlVHRVZUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0hGU1JfREVCVUdFVlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIEZPUkNFRAorLy8KKy8vIEhhcmQgRmF1bHQgYWN0aXZhdGVkIGJlY2F1c2UgYSBDb25maWd1cmFibGUgRmF1bHQgd2FzIHJlY2VpdmVkIGFuZCBjYW5ub3QKKy8vIGFjdGl2YXRlIGJlY2F1c2Ugb2YgcHJpb3JpdHkgb3IgYmVjYXVzZSB0aGUgQ29uZmlndXJhYmxlIEZhdWx0IGlzIGRpc2FibGVkLgorLy8gVGhlIEhhcmQgRmF1bHQgaGFuZGxlciB0aGVuIGhhcyB0byByZWFkIHRoZSBvdGhlciBmYXVsdCBzdGF0dXMgcmVnaXN0ZXJzIHRvCisvLyBkZXRlcm1pbmUgY2F1c2UuCisjZGVmaW5lIENQVV9TQ1NfSEZTUl9GT1JDRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19IRlNSX0ZPUkNFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBDUFVfU0NTX0hGU1JfRk9SQ0VEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSEZTUl9GT1JDRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgICBbMV0gVkVDVFRCTAorLy8KKy8vIFRoaXMgYml0IGlzIHNldCBpZiB0aGVyZSBpcyBhIGZhdWx0IGJlY2F1c2Ugb2YgdmVjdG9yIHRhYmxlIHJlYWQgb24KKy8vIGV4Y2VwdGlvbiBwcm9jZXNzaW5nIChCdXMgRmF1bHQpLiBUaGlzIGNhc2UgaXMgYWx3YXlzIGEgSGFyZCBGYXVsdC4gVGhlCisvLyByZXR1cm4gUEMgcG9pbnRzIHRvIHRoZSBwcmUtZW1wdGVkIGluc3RydWN0aW9uLgorI2RlZmluZSBDUFVfU0NTX0hGU1JfVkVDVFRCTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfSEZTUl9WRUNUVEJMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19IRlNSX1ZFQ1RUQkxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX0hGU1JfVkVDVFRCTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0RGU1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs0XSBFWFRFUk5BTAorLy8KKy8vIEV4dGVybmFsIGRlYnVnIHJlcXVlc3QgZmxhZy4gVGhlIHByb2Nlc3NvciBzdG9wcyBvbiBuZXh0IGluc3RydWN0aW9uCisvLyBib3VuZGFyeS4KKy8vCisvLyAweDA6IEV4dGVybmFsIGRlYnVnIHJlcXVlc3Qgc2lnbmFsIG5vdCBhc3NlcnRlZAorLy8gMHgxOiBFeHRlcm5hbCBkZWJ1ZyByZXF1ZXN0IHNpZ25hbCBhc3NlcnRlZAorI2RlZmluZSBDUFVfU0NTX0RGU1JfRVhURVJOQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfREZTUl9FWFRFUk5BTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19ERlNSX0VYVEVSTkFMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX0RGU1JfRVhURVJOQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFZDQVRDSAorLy8KKy8vIFZlY3RvciBjYXRjaCBmbGFnLiBXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIGEgZmxhZyBpbiBvbmUgb2YgdGhlIGxvY2FsIGZhdWx0CisvLyBzdGF0dXMgcmVnaXN0ZXJzIGlzIGFsc28gc2V0IHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGZhdWx0LgorLy8KKy8vIDB4MDogTm8gdmVjdG9yIGNhdGNoIG9jY3VycmVkCisvLyAweDE6IFZlY3RvciBjYXRjaCBvY2N1cnJlZAorI2RlZmluZSBDUFVfU0NTX0RGU1JfVkNBVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfREZTUl9WQ0FUQ0hfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BVX1NDU19ERlNSX1ZDQVRDSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX0RGU1JfVkNBVENIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIERXVFRSQVAKKy8vCisvLyBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIChEV1QpIGZsYWcuIFRoZSBwcm9jZXNzb3Igc3RvcHMgYXQgdGhlIGN1cnJlbnQKKy8vIGluc3RydWN0aW9uIG9yIGF0IHRoZSBuZXh0IGluc3RydWN0aW9uLgorLy8KKy8vIDB4MDogTm8gRFdUIG1hdGNoCisvLyAweDE6IERXVCBtYXRjaAorI2RlZmluZSBDUFVfU0NTX0RGU1JfRFdUVFJBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfREZTUl9EV1RUUkFQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX1NDU19ERlNSX0RXVFRSQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX0RGU1JfRFdUVFJBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEJLUFQKKy8vCisvLyBCS1BUIGZsYWcuIFRoZSBCS1BUIGZsYWcgaXMgc2V0IGJ5IGEgQktQVCBpbnN0cnVjdGlvbiBpbiBmbGFzaCBwYXRjaCBjb2RlLAorLy8gYW5kIGFsc28gYnkgbm9ybWFsIGNvZGUuIFJldHVybiBQQyBwb2ludHMgdG8gYnJlYWtwb2ludCBjb250YWluaW5nCisvLyBpbnN0cnVjdGlvbi4KKy8vCisvLyAweDA6IE5vIEJLUFQgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uCisvLyAweDE6IEJLUFQgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uCisjZGVmaW5lIENQVV9TQ1NfREZTUl9CS1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19ERlNSX0JLUFRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfU0NTX0RGU1JfQktQVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfREZTUl9CS1BUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gSEFMVEVECisvLworLy8gSGFsdCByZXF1ZXN0IGZsYWcuIFRoZSBwcm9jZXNzb3IgaXMgaGFsdGVkIG9uIHRoZSBuZXh0IGluc3RydWN0aW9uLgorLy8KKy8vIDB4MDogTm8gaGFsdCByZXF1ZXN0CisvLyAweDE6IEhhbHQgcmVxdWVzdGVkIGJ5IE5WSUMsIGluY2x1ZGluZyBzdGVwCisjZGVmaW5lIENQVV9TQ1NfREZTUl9IQUxURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19ERlNSX0hBTFRFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX0RGU1JfSEFMVEVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfREZTUl9IQUxURURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTU1GQVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBBRERSRVNTCisvLworLy8gTWVtIE1hbmFnZSBmYXVsdCBhZGRyZXNzIGZpZWxkLgorLy8gVGhpcyBmaWVsZCBpcyB0aGUgZGF0YSBhZGRyZXNzIG9mIGEgZmF1bHRlZCBsb2FkIG9yIHN0b3JlIGF0dGVtcHQuIFdoZW4gYW4KKy8vIHVuYWxpZ25lZCBhY2Nlc3MgZmF1bHRzLCB0aGUgYWRkcmVzcyBpcyB0aGUgYWN0dWFsIGFkZHJlc3MgdGhhdCBmYXVsdGVkLgorLy8gQmVjYXVzZSBhbiBhY2Nlc3MgY2FuIGJlIHNwbGl0IGludG8gbXVsdGlwbGUgcGFydHMsIGVhY2ggYWxpZ25lZCwgdGhpcworLy8gYWRkcmVzcyBjYW4gYmUgYW55IG9mZnNldCBpbiB0aGUgcmFuZ2Ugb2YgdGhlIHJlcXVlc3RlZCBzaXplLiBGbGFncworLy8gQ0ZTUi5JQUNDVklPTCwgQ0ZTUi5EQUNDVklPTCAsQ0ZTUi5NVU5TVEtFUlIgYW5kIENGU1IuTVNUS0VSUiBpbiBjb21iaW5hdGlvbgorLy8gd2l0aCBDRlNSLk1NQVJWQUxJRGluZGljYXRlIHRoZSBjYXVzZSBvZiB0aGUgZmF1bHQuCisjZGVmaW5lIENQVV9TQ1NfTU1GQVJfQUREUkVTU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX1NDU19NTUZBUl9BRERSRVNTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfU0NTX01NRkFSX0FERFJFU1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0JGQVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBBRERSRVNTCisvLworLy8gQnVzIGZhdWx0IGFkZHJlc3MgZmllbGQuIFRoaXMgZmllbGQgaXMgdGhlIGRhdGEgYWRkcmVzcyBvZiBhIGZhdWx0ZWQgbG9hZCBvcgorLy8gc3RvcmUgYXR0ZW1wdC4gV2hlbiBhbiB1bmFsaWduZWQgYWNjZXNzIGZhdWx0cywgdGhlIGFkZHJlc3MgaXMgdGhlIGFkZHJlc3MKKy8vIHJlcXVlc3RlZCBieSB0aGUgaW5zdHJ1Y3Rpb24sIGV2ZW4gaWYgdGhhdCBpcyBub3QgdGhlIGFkZHJlc3MgdGhhdCBmYXVsdGVkLgorLy8gRmxhZ3MgQ0ZTUi5JQlVTRVJSLCBDRlNSLlBSRUNJU0VSUiwgQ0ZTUi5JTVBSRUNJU0VSUiwgQ0ZTUi5VTlNUS0VSUiBhbmQKKy8vIENGU1IuU1RLRVJSIGluIGNvbWJpbmF0aW9uIHdpdGggQ0ZTUi5CRkFSVkFMSUQgaW5kaWNhdGUgdGhlIGNhdXNlIG9mIHRoZQorLy8gZmF1bHQuCisjZGVmaW5lIENQVV9TQ1NfQkZBUl9BRERSRVNTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX1NDU19CRkFSX0FERFJFU1NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfU0NTX0JGQVJfQUREUkVTU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0FGU1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBJTVBERUYKKy8vCisvLyBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiBUaGUgYml0cyBtYXAgZGlyZWN0bHkgb250byB0aGUgc2lnbmFsIGFzc2lnbm1lbnQgdG8KKy8vIHRoZSBhdXhpbGlhcnkgZmF1bHQgaW5wdXRzLiBUaWVkIHRvIDAKKyNkZWZpbmUgQ1BVX1NDU19BRlNSX0lNUERFRl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfU0NTX0FGU1JfSU1QREVGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9TQ1NfQUZTUl9JTVBERUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fSURfUEZSMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjRdIFNUQVRFMQorLy8KKy8vIFN0YXRlMSAoVC1iaXQgPT0gMSkKKy8vCisvLyAweDA6IE4vQQorLy8gMHgxOiBOL0EKKy8vIDB4MjogVGh1bWItMiBlbmNvZGluZyB3aXRoIHRoZSAxNi1iaXQgYmFzaWMgaW5zdHJ1Y3Rpb25zIHBsdXMgMzItYml0CisvLyBCdW5jb25kL0JMIGJ1dCBubyBvdGhlciAzMi1iaXQgYmFzaWMgaW5zdHJ1Y3Rpb25zIChOb3RlIG5vbi1iYXNpYyAzMi1iaXQKKy8vIGluc3RydWN0aW9ucyBjYW4gYmUgYWRkZWQgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGluc3RydWN0aW9uIGF0dHJpYnV0ZSwgYnV0CisvLyBvdGhlciAzMi1iaXQgYmFzaWMgaW5zdHJ1Y3Rpb25zIGNhbm5vdC4pCisvLyAweDM6IFRodW1iLTIgZW5jb2Rpbmcgd2l0aCBhbGwgVGh1bWItMiBiYXNpYyBpbnN0cnVjdGlvbnMKKyNkZWZpbmUgQ1BVX1NDU19JRF9QRlIwX1NUQVRFMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfU0NTX0lEX1BGUjBfU1RBVEUxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIENQVV9TQ1NfSURfUEZSMF9TVEFURTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gU1RBVEUwCisvLworLy8gU3RhdGUwIChULWJpdCA9PSAwKQorLy8KKy8vIDB4MDogTm8gQVJNIGVuY29kaW5nCisvLyAweDE6IE4vQQorI2RlZmluZSBDUFVfU0NTX0lEX1BGUjBfU1RBVEUwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfSURfUEZSMF9TVEFURTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQ1BVX1NDU19JRF9QRlIwX1NUQVRFMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JRF9QRlIxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTE6OF0gTUlDUk9DT05UUk9MTEVSX1BST0dSQU1NRVJTX01PREVMCisvLworLy8gTWljcm9jb250cm9sbGVyIHByb2dyYW1tZXIncyBtb2RlbAorLy8KKy8vIDB4MDogTm90IHN1cHBvcnRlZAorLy8gMHgyOiBUd28tc3RhY2sgc3VwcG9ydAorI2RlZmluZSBDUFVfU0NTX0lEX1BGUjFfTUlDUk9DT05UUk9MTEVSX1BST0dSQU1NRVJTX01PREVMX1cgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfSURfUEZSMV9NSUNST0NPTlRST0xMRVJfUFJPR1JBTU1FUlNfTU9ERUxfTSAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQ1BVX1NDU19JRF9QRlIxX01JQ1JPQ09OVFJPTExFUl9QUk9HUkFNTUVSU19NT0RFTF9TICAgICAgICAgICAgICAgICAgOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JRF9ERlIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyMzoyMF0gTUlDUk9DT05UUk9MTEVSX0RFQlVHX01PREVMCisvLworLy8gTWljcm9jb250cm9sbGVyIERlYnVnIE1vZGVsIC0gbWVtb3J5IG1hcHBlZAorLy8KKy8vIDB4MDogTm90IHN1cHBvcnRlZAorLy8gMHgxOiBNaWNyb2NvbnRyb2xsZXIgZGVidWcgdjEgKElUTXYxIGFuZCBEV1R2MSkKKyNkZWZpbmUgQ1BVX1NDU19JRF9ERlIwX01JQ1JPQ09OVFJPTExFUl9ERUJVR19NT0RFTF9XICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfU0NTX0lEX0RGUjBfTUlDUk9DT05UUk9MTEVSX0RFQlVHX01PREVMX00gICAgICAgICAgICAgICAweDAwRjAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSURfREZSMF9NSUNST0NPTlRST0xMRVJfREVCVUdfTU9ERUxfUyAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fSURfQUZSMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0lEX01NRlIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fSURfTU1GUjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JRF9NTUZSMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIFdBSVRfRk9SX0lOVEVSUlVQVF9TVEFMTElORworLy8KKy8vIHdhaXQgZm9yIGludGVycnVwdCBzdGFsbGluZworLy8KKy8vIDB4MDogTm90IHN1cHBvcnRlZAorLy8gMHgxOiBXYWl0IGZvciBpbnRlcnJ1cHQgc3VwcG9ydGVkCisjZGVmaW5lIENQVV9TQ1NfSURfTU1GUjJfV0FJVF9GT1JfSU5URVJSVVBUX1NUQUxMSU5HICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JRF9NTUZSMl9XQUlUX0ZPUl9JTlRFUlJVUFRfU1RBTExJTkdfQklUTiAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDUFVfU0NTX0lEX01NRlIyX1dBSVRfRk9SX0lOVEVSUlVQVF9TVEFMTElOR19NICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSURfTU1GUjJfV0FJVF9GT1JfSU5URVJSVVBUX1NUQUxMSU5HX1MgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fSURfTU1GUjMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JRF9JU0FSMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0lEX0lTQVIxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fSURfSVNBUjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JRF9JU0FSMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0lEX0lTQVI0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fQ1BBQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19ESENTUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjVdIFNfUkVTRVRfU1QKKy8vCisvLyBJbmRpY2F0ZXMgdGhhdCB0aGUgY29yZSBoYXMgYmVlbiByZXNldCwgb3IgaXMgbm93IGJlaW5nIHJlc2V0LCBzaW5jZSB0aGUKKy8vIGxhc3QgdGltZSB0aGlzIGJpdCB3YXMgcmVhZC4gVGhpcyBhIHN0aWNreSBiaXQgdGhhdCBjbGVhcnMgb24gcmVhZC4gU28sCisvLyByZWFkaW5nIHR3aWNlIGFuZCBnZXR0aW5nIDEgdGhlbiAwIG1lYW5zIGl0IHdhcyByZXNldCBpbiB0aGUgcGFzdC4gUmVhZGluZworLy8gdHdpY2UgYW5kIGdldHRpbmcgMSBib3RoIHRpbWVzIG1lYW5zIHRoYXQgaXQgaXMgYmVpbmcgcmVzZXQgbm93IChoZWxkIGluCisvLyByZXNldCBzdGlsbCkuCisvLyBXaGVuIHdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciwgMCBtdXN0IGJlIHdyaXR0ZW4gdGhpcyBiaXQtZmllbGQsIG90aGVyd2lzZQorLy8gdGhlIHdyaXRlIG9wZXJhdGlvbiBpcyBpZ25vcmVkIGFuZCBubyBiaXRzIGFyZSB3cml0dGVuIGludG8gdGhlIHJlZ2lzdGVyLgorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfUkVTRVRfU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19SRVNFVF9TVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX1JFU0VUX1NUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfUkVTRVRfU1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFNfUkVUSVJFX1NUCisvLworLy8gSW5kaWNhdGVzIHRoYXQgYW4gaW5zdHJ1Y3Rpb24gaGFzIGNvbXBsZXRlZCBzaW5jZSBsYXN0IHJlYWQuIFRoaXMgaXMgYQorLy8gc3RpY2t5IGJpdCB0aGF0IGNsZWFycyBvbiByZWFkLiBUaGlzIGRldGVybWluZXMgaWYgdGhlIGNvcmUgaXMgc3RhbGxlZCBvbiBhCisvLyBsb2FkL3N0b3JlIG9yIGZldGNoLgorLy8gV2hlbiB3cml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIsIDAgbXVzdCBiZSB3cml0dGVuIHRoaXMgYml0LWZpZWxkLCBvdGhlcndpc2UKKy8vIHRoZSB3cml0ZSBvcGVyYXRpb24gaXMgaWdub3JlZCBhbmQgbm8gYml0cyBhcmUgd3JpdHRlbiBpbnRvIHRoZSByZWdpc3Rlci4KKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX1JFVElSRV9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfUkVUSVJFX1NUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19SRVRJUkVfU1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX1JFVElSRV9TVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzE5XSBTX0xPQ0tVUAorLy8KKy8vIFJlYWRzIGFzIG9uZSBpZiB0aGUgY29yZSBpcyBydW5uaW5nIChub3QgaGFsdGVkKSBhbmQgYSBsb2NrdXAgY29uZGl0aW9uIGlzCisvLyBwcmVzZW50LgorLy8gV2hlbiB3cml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIsIDEgbXVzdCBiZSB3cml0dGVuIHRoaXMgYml0LWZpZWxkLCBvdGhlcndpc2UKKy8vIHRoZSB3cml0ZSBvcGVyYXRpb24gaXMgaWdub3JlZCBhbmQgbm8gYml0cyBhcmUgd3JpdHRlbiBpbnRvIHRoZSByZWdpc3Rlci4KKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX0xPQ0tVUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfTE9DS1VQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19MT0NLVVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX0xPQ0tVUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBTX1NMRUVQCisvLworLy8gSW5kaWNhdGVzIHRoYXQgdGhlIGNvcmUgaXMgc2xlZXBpbmcgKFdGSSwgV0ZFLCBvciAqKlNMRUVQLU9OLUVYSVQqKikuIE11c3QKKy8vIHVzZSBDX0hBTFQgdG8gZ2FpbiBjb250cm9sIG9yIHdhaXQgZm9yIGludGVycnVwdCB0byB3YWtlLXVwLgorLy8gV2hlbiB3cml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIsIDEgbXVzdCBiZSB3cml0dGVuIHRoaXMgYml0LWZpZWxkLCBvdGhlcndpc2UKKy8vIHRoZSB3cml0ZSBvcGVyYXRpb24gaXMgaWdub3JlZCBhbmQgbm8gYml0cyBhcmUgd3JpdHRlbiBpbnRvIHRoZSByZWdpc3Rlci4KKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfU0xFRVBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19TTEVFUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX1NMRUVQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBTX0hBTFQKKy8vCisvLyBUaGUgY29yZSBpcyBpbiBkZWJ1ZyBzdGF0ZSB3aGVuIHRoaXMgYml0IGlzIHNldC4KKy8vIFdoZW4gd3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyLCAxIG11c3QgYmUgd3JpdHRlbiB0aGlzIGJpdC1maWVsZCwgb3RoZXJ3aXNlCisvLyB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIGlnbm9yZWQgYW5kIG5vIGJpdHMgYXJlIHdyaXR0ZW4gaW50byB0aGUgcmVnaXN0ZXIuCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX0hBTFRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfSEFMVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19IQUxUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gU19SRUdSRFkKKy8vCisvLyBSZWdpc3RlciBSZWFkL1dyaXRlIG9uIHRoZSBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIFNlbGVjdG9yIHJlZ2lzdGVyIGlzCisvLyBhdmFpbGFibGUuIExhc3QgdHJhbnNmZXIgaXMgY29tcGxldGUuCisvLyBXaGVuIHdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciwgMSBtdXN0IGJlIHdyaXR0ZW4gdGhpcyBiaXQtZmllbGQsIG90aGVyd2lzZQorLy8gdGhlIHdyaXRlIG9wZXJhdGlvbiBpcyBpZ25vcmVkIGFuZCBubyBiaXRzIGFyZSB3cml0dGVuIGludG8gdGhlIHJlZ2lzdGVyLgorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfUkVHUkRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19SRUdSRFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX1JFR1JEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfUkVHUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzVdIENfU05BUFNUQUxMCisvLworLy8gSWYgdGhlIGNvcmUgaXMgc3RhbGxlZCBvbiBhIGxvYWQvc3RvcmUgb3BlcmF0aW9uIHRoZSBzdGFsbCBjZWFzZXMgYW5kIHRoZQorLy8gaW5zdHJ1Y3Rpb24gaXMgZm9yY2VkIHRvIGNvbXBsZXRlLiBUaGlzIGVuYWJsZXMgSGFsdGluZyBkZWJ1ZyB0byBnYWluCisvLyBjb250cm9sIG9mIHRoZSBjb3JlLiBJdCBjYW4gb25seSBiZSBzZXQgaWY6IENfREVCVUdFTiA9IDEgYW5kIENfSEFMVCA9IDEuCisvLyBUaGUgY29yZSByZWFkcyBTX1JFVElSRV9TVCBhcyAwLiBUaGlzIGluZGljYXRlcyB0aGF0IG5vIGluc3RydWN0aW9uIGhhcworLy8gYWR2YW5jZWQuIFRoaXMgcHJldmVudHMgbWlzdXNlLiBUaGUgYnVzIHN0YXRlIGlzIFVucHJlZGljdGFibGUgd2hlbiB0aGlzIGlzCisvLyB1c2VkLiBTX1JFVElSRV9TVCBjYW4gZGV0ZWN0IGNvcmUgc3RhbGxzIG9uIGxvYWQvc3RvcmUgb3BlcmF0aW9ucy4KKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX1NOQVBTVEFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfU05BUFNUQUxMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19TTkFQU1RBTExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX1NOQVBTVEFMTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFszXSBDX01BU0tJTlRTCisvLworLy8gTWFzayBpbnRlcnJ1cHRzIHdoZW4gc3RlcHBpbmcgb3IgcnVubmluZyBpbiBoYWx0ZWQgZGVidWcuIFRoaXMgbWFza2luZyBkb2VzCisvLyBub3QgYWZmZWN0IE5NSSwgZmF1bHQgZXhjZXB0aW9ucyBhbmQgU1ZDIGNhdXNlZCBieSBleGVjdXRpb24gb2YgdGhlCisvLyBpbnN0cnVjdGlvbnMuIFRoaXMgYml0IG11c3Qgb25seSBiZSBtb2RpZmllZCB3aGVuIHRoZSBwcm9jZXNzb3IgaXMgaGFsdGVkCisvLyAoU19IQUxUID09IDEpLiAgQ19NQVNLSU5UUyBtdXN0IGJlIHNldCBvciBjbGVhcmVkIGJlZm9yZSBoYWx0IGlzIHJlbGVhc2VkCisvLyAoaS5lLiwgdGhlIHdyaXRlcyB0byBzZXQgb3IgY2xlYXIgQ19NQVNLSU5UUyBhbmQgdG8gc2V0IG9yIGNsZWFyIENfSEFMVCBtdXN0CisvLyBiZSBzZXBhcmF0ZSkuIE1vZGlmeWluZyBDX01BU0tJTlRTIHdoaWxlIHRoZSBzeXN0ZW0gaXMgcnVubmluZyB3aXRoIGhhbHRpbmcKKy8vIGRlYnVnIHN1cHBvcnQgZW5hYmxlZCAoQ19ERUJVR0VOID0gMSwgU19IQUxUID0gMCkgbWF5IGNhdXNlIHVucHJlZGljdGFibGUKKy8vIGJlaGF2aW9yLgorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfTUFTS0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19NQVNLSU5UU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX01BU0tJTlRTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfTUFTS0lOVFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIENfU1RFUAorLy8KKy8vIFN0ZXBzIHRoZSBjb3JlIGluIGhhbHRlZCBkZWJ1Zy4gV2hlbiBDX0RFQlVHRU4gPSAwLCB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LgorLy8gTXVzdCBvbmx5IGJlIG1vZGlmaWVkIHdoZW4gdGhlIHByb2Nlc3NvciBpcyBoYWx0ZWQgKFNfSEFMVCA9PSAxKS4KKy8vIE1vZGlmeWluZyBDX1NURVAgd2hpbGUgdGhlIHN5c3RlbSBpcyBydW5uaW5nIHdpdGggaGFsdGluZyBkZWJ1ZyBzdXBwb3J0CisvLyBlbmFibGVkIChDX0RFQlVHRU4gPSAxLCBTX0hBTFQgPSAwKSBtYXkgY2F1c2UgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4KKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX1NURVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfU1RFUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19TVEVQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX1NURVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBDX0hBTFQKKy8vCisvLyBIYWx0cyB0aGUgY29yZS4gVGhpcyBiaXQgaXMgc2V0IGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY29yZSBIYWx0cy4gRm9yCisvLyBleGFtcGxlIEJyZWFrcG9pbnQuIFRoaXMgYml0IGNsZWFycyBvbiBjb3JlIHJlc2V0LgorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfSEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19IQUxUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX0hBTFRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfSEFMVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENfREVCVUdFTgorLy8KKy8vIEVuYWJsZXMgZGVidWcuIFRoaXMgY2FuIG9ubHkgYmUgd3JpdHRlbiBieSBBSEItQVAgYW5kIG5vdCBieSB0aGUgY29yZS4gSXQgaXMKKy8vIGlnbm9yZWQgd2hlbiB3cml0dGVuIGJ5IHRoZSBjb3JlLCB3aGljaCBjYW5ub3Qgc2V0IG9yIGNsZWFyIGl0LiBUaGUgY29yZQorLy8gbXVzdCB3cml0ZSBhIDEgdG8gaXQgd2hlbiB3cml0aW5nIENfSEFMVCB0byBoYWx0IGl0c2VsZi4KKy8vIFRoZSB2YWx1ZXMgb2YgQ19IQUxULCBDX1NURVAgYW5kIENfTUFTS0lOVFMgYXJlIGlnbm9yZWQgYnkgaGFyZHdhcmUgd2hlbgorLy8gQ19ERUJVR0VOID0gMC4gVGhlIHJlYWQgdmFsdWVzIGZvciBDX0hBTFQsIENfU1RFUCBhbmQgQ19NQVNLSU5UUyBmaWVsZHMgd2lsbAorLy8gYmUgdW5rbm93biB0byBzb2Z0d2FyZSB3aGVuIENfREVCVUdFTiA9IDAuCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19ERUJVR0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX0RFQlVHRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfREVCVUdFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19ERUJVR0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fRENSU1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE2XSBSRUdXTlIKKy8vCisvLyAxOiBXcml0ZQorLy8gMDogUmVhZAorI2RlZmluZSBDUFVfU0NTX0RDUlNSX1JFR1dOUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfRENSU1JfUkVHV05SX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19EQ1JTUl9SRUdXTlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX0RDUlNSX1JFR1dOUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgIFs0OjBdIFJFR1NFTAorLy8KKy8vIFJlZ2lzdGVyIHNlbGVjdAorLy8KKy8vIDB4MDA6IFIwCisvLyAweDAxOiBSMQorLy8gMHgwMjogUjIKKy8vIDB4MDM6IFIzCisvLyAweDA0OiBSNAorLy8gMHgwNTogUjUKKy8vIDB4MDY6IFI2CisvLyAweDA3OiBSNworLy8gMHgwODogUjgKKy8vIDB4MDk6IFI5CisvLyAweDBBOiBSMTAKKy8vIDB4MEI6IFIxMQorLy8gMHgwQzogUjEyCisvLyAweDBEOiBDdXJyZW50IFNQCisvLyAweDBFOiBMUgorLy8gMHgwRjogRGVidWdSZXR1cm5BZGRyZXNzCisvLyAweDEwOiBYUFNSL2ZsYWdzLCBleGVjdXRpb24gc3RhdGUgaW5mb3JtYXRpb24sIGFuZCBleGNlcHRpb24gbnVtYmVyCisvLyAweDExOiBNU1AgKE1haW4gU1ApCisvLyAweDEyOiBQU1AgKFByb2Nlc3MgU1ApCisvLyAweDE0OiBDT05UUk9MPDwyNCB8IEZBVUxUTUFTSzw8MTYgfCBCQVNFUFJJPDw4IHwgUFJJTUFTSworI2RlZmluZSBDUFVfU0NTX0RDUlNSX1JFR1NFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENQVV9TQ1NfRENSU1JfUkVHU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQ1BVX1NDU19EQ1JTUl9SRUdTRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19EQ1JEUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIERDUkRSCisvLworLy8gVGhpcyByZWdpc3RlciBob2xkcyBkYXRhIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHJlZ2lzdGVycyB0byBhbmQgZnJvbSB0aGUKKy8vIHByb2Nlc3Nvci4gVGhpcyBpcyB0aGUgZGF0YSB2YWx1ZSB3cml0dGVuIHRvIHRoZSByZWdpc3RlciBzZWxlY3RlZCBieSBEQ1JTUi4KKy8vIFdoZW4gdGhlIHByb2Nlc3NvciByZWNlaXZlcyBhIHJlcXVlc3QgZnJvbSBEQ1JTUiwgdGhpcyByZWdpc3RlciBpcyByZWFkIG9yCisvLyB3cml0dGVuIGJ5IHRoZSBwcm9jZXNzb3IgdXNpbmcgYSBub3JtYWwgbG9hZC1zdG9yZSB1bml0IG9wZXJhdGlvbi4gSWYgY29yZQorLy8gcmVnaXN0ZXIgdHJhbnNmZXJzIGFyZSBub3QgYmVpbmcgcGVyZm9ybWVkLCBzb2Z0d2FyZS1iYXNlZCBkZWJ1ZyBtb25pdG9ycworLy8gY2FuIHVzZSB0aGlzIHJlZ2lzdGVyIGZvciBjb21tdW5pY2F0aW9uIGluIG5vbi1oYWx0aW5nIGRlYnVnLiBUaGlzIGVuYWJsZXMKKy8vIGZsYWdzIGFuZCBiaXRzIHRvIGFja25vd2xlZGdlIHN0YXRlIGFuZCBpbmRpY2F0ZSBpZiBjb21tYW5kcyBoYXZlIGJlZW4KKy8vIGFjY2VwdGVkIHRvLCByZXBsaWVkIHRvLCBvciBhY2NlcHRlZCBhbmQgcmVwbGllZCB0by4KKyNkZWZpbmUgQ1BVX1NDU19EQ1JEUl9EQ1JEUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfU0NTX0RDUkRSX0RDUkRSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9TQ1NfRENSRFJfRENSRFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fREVNQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI0XSBUUkNFTkEKKy8vCisvLyBUaGlzIGJpdCBtdXN0IGJlIHNldCB0byAxIHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHRyYWNlIGFuZCBkZWJ1ZyBibG9ja3M6IERXVCwKKy8vIElUTSwgRVRNIGFuZCBUUElVLiBUaGlzIGVuYWJsZXMgY29udHJvbCBvZiBwb3dlciB1c2FnZSB1bmxlc3MgdHJhY2luZyBpcworLy8gcmVxdWlyZWQuIFRoZSBhcHBsaWNhdGlvbiBjYW4gZW5hYmxlIHRoaXMsIGZvciBJVE0gdXNlLCBvciB1c2UgYnkgYQorLy8gZGVidWdnZXIuCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVFJDRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9UUkNFTkFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1RSQ0VOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVFJDRU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxOV0gTU9OX1JFUQorLy8KKy8vIFRoaXMgZW5hYmxlcyB0aGUgbW9uaXRvciB0byBpZGVudGlmeSBob3cgaXQgd2FrZXMgdXAuIFRoaXMgYml0IGNsZWFycyBvbiBhCisvLyBDb3JlIFJlc2V0LgorLy8KKy8vIDB4MDogV29rZW4gdXAgYnkgZGVidWcgZXhjZXB0aW9uLgorLy8gMHgxOiBXb2tlbiB1cCBieSBNT05fUEVORAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX01PTl9SRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfTU9OX1JFUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9NT05fUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX01PTl9SRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIE1PTl9TVEVQCisvLworLy8gV2hlbiBNT05fRU4gPSAxLCB0aGlzIHN0ZXBzIHRoZSBjb3JlLiBXaGVuIE1PTl9FTiA9IDAsIHRoaXMgYml0IGlzIGlnbm9yZWQuCisvLyBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IHRvIERIQ1NSLkNfU1RFUC4gSW50ZXJydXB0cyBhcmUgb25seSBzdGVwcGVkCisvLyBhY2NvcmRpbmcgdG8gdGhlIHByaW9yaXR5IG9mIHRoZSBtb25pdG9yIGFuZCBzZXR0aW5ncyBvZiBQUklNQVNLLCBGQVVMVE1BU0ssCisvLyBvciBCQVNFUFJJLgorI2RlZmluZSBDUFVfU0NTX0RFTUNSX01PTl9TVEVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfTU9OX1NURVBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9NT05fU1RFUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX01PTl9TVEVQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIE1PTl9QRU5ECisvLworLy8gUGVuZCB0aGUgbW9uaXRvciB0byBhY3RpdmF0ZSB3aGVuIHByaW9yaXR5IHBlcm1pdHMuIFRoaXMgY2FuIHdha2UgdXAgdGhlCisvLyBtb25pdG9yIHRocm91Z2ggdGhlIEFIQi1BUCBwb3J0LiBJdCBpcyB0aGUgZXF1aXZhbGVudCB0byBESENTUi5DX0hBTFQgZm9yCisvLyBNb25pdG9yIGRlYnVnLiBUaGlzIHJlZ2lzdGVyIGRvZXMgbm90IHJlc2V0IG9uIGEgc3lzdGVtIHJlc2V0LiBJdCBpcyBvbmx5CisvLyByZXNldCBieSBhIHBvd2VyLW9uIHJlc2V0LiBTb2Z0d2FyZSBpbiB0aGUgcmVzZXQgaGFuZGxlciBvciBsYXRlciwgb3IgYnkgdGhlCisvLyBEQVAgbXVzdCBlbmFibGUgdGhlIGRlYnVnIG1vbml0b3IuCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfTU9OX1BFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9NT05fUEVORF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfU0NTX0RFTUNSX01PTl9QRU5EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfTU9OX1BFTkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gTU9OX0VOCisvLworLy8gRW5hYmxlIHRoZSBkZWJ1ZyBtb25pdG9yLgorLy8gV2hlbiBlbmFibGVkLCB0aGUgU3lzdGVtIGhhbmRsZXIgcHJpb3JpdHkgcmVnaXN0ZXIgY29udHJvbHMgaXRzIHByaW9yaXR5CisvLyBsZXZlbC4gSWYgZGlzYWJsZWQsIHRoZW4gYWxsIGRlYnVnIGV2ZW50cyBnbyB0byBIYXJkIGZhdWx0LiBESENTUi5DX0RFQlVHRU4KKy8vIG92ZXJyaWRlcyB0aGlzIGJpdC4gVmVjdG9yIGNhdGNoaW5nIGlzIHNlbWktc3luY2hyb25vdXMuIFdoZW4gYSBtYXRjaGluZworLy8gZXZlbnQgaXMgc2VlbiwgYSBIYWx0IGlzIHJlcXVlc3RlZC4gQmVjYXVzZSB0aGUgcHJvY2Vzc29yIGNhbiBvbmx5IGhhbHQgb24KKy8vIGFuIGluc3RydWN0aW9uIGJvdW5kYXJ5LCBpdCBtdXN0IHdhaXQgdW50aWwgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gYm91bmRhcnkuCisvLyBBcyBhIHJlc3VsdCwgaXQgc3RvcHMgb24gdGhlIGZpcnN0IGluc3RydWN0aW9uIG9mIHRoZSBleGNlcHRpb24gaGFuZGxlci4KKy8vIEhvd2V2ZXIsIHR3byBzcGVjaWFsIGNhc2VzIGV4aXN0IHdoZW4gYSB2ZWN0b3IgY2F0Y2ggaGFzIHRyaWdnZXJlZDogMS4gSWYgYQorLy8gZmF1bHQgaXMgdGFrZW4gZHVyaW5nIHZlY3RvcmluZywgdmVjdG9yIHJlYWQgb3Igc3RhY2sgcHVzaCBlcnJvciwgdGhlIGhhbHQKKy8vIG9jY3VycyBvbiB0aGUgY29ycmVzcG9uZGluZyBmYXVsdCBoYW5kbGVyLCBmb3IgdGhlIHZlY3RvciBlcnJvciBvciBzdGFjaworLy8gcHVzaC4gMi4gSWYgYSBsYXRlIGFycml2aW5nIGludGVycnVwdCBjb21lcyBpbiBkdXJpbmcgdmVjdG9yaW5nLCBpdCBpcyBub3QKKy8vIHRha2VuLiBUaGF0IGlzLCBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzIHRoZSBsYXRlIGFycml2YWwKKy8vIG9wdGltaXphdGlvbiBtdXN0IHN1cHByZXNzIGl0IGluIHRoaXMgY2FzZS4KKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9NT05fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX01PTl9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfTU9OX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9NT05fRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzEwXSBWQ19IQVJERVJSCisvLworLy8gRGVidWcgdHJhcCBvbiBIYXJkIEZhdWx0LiBJZ25vcmVkIHdoZW4gREhDU1IuQ19ERUJVR0VOIGlzIGNsZWFyZWQuCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfSEFSREVSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19IQVJERVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0hBUkRFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfSEFSREVSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gVkNfSU5URVJSCisvLworLy8gRGVidWcgdHJhcCBvbiBhIGZhdWx0IG9jY3VycmluZyBkdXJpbmcgYW4gZXhjZXB0aW9uIGVudHJ5IG9yIHJldHVybgorLy8gc2VxdWVuY2UuIElnbm9yZWQgd2hlbiBESENTUi5DX0RFQlVHRU4gaXMgY2xlYXJlZC4KKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19JTlRFUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0lOVEVSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfSU5URVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19JTlRFUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBWQ19CVVNFUlIKKy8vCisvLyBEZWJ1ZyBUcmFwIG9uIG5vcm1hbCBCdXMgZXJyb3IuIElnbm9yZWQgd2hlbiBESENTUi5DX0RFQlVHRU4gaXMgY2xlYXJlZC4KKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19CVVNFUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0JVU0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfQlVTRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19CVVNFUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBWQ19TVEFURVJSCisvLworLy8gRGVidWcgdHJhcCBvbiBVc2FnZSBGYXVsdCBzdGF0ZSBlcnJvcnMuIElnbm9yZWQgd2hlbiBESENTUi5DX0RFQlVHRU4gaXMKKy8vIGNsZWFyZWQuCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfU1RBVEVSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19TVEFURVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX1NUQVRFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfU1RBVEVSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gVkNfQ0hLRVJSCisvLworLy8gRGVidWcgdHJhcCBvbiBVc2FnZSBGYXVsdCBlbmFibGVkIGNoZWNraW5nIGVycm9ycy4gSWdub3JlZCB3aGVuCisvLyBESENTUi5DX0RFQlVHRU4gaXMgY2xlYXJlZC4KKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19DSEtFUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0NIS0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfQ0hLRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19DSEtFUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBWQ19OT0NQRVJSCisvLworLy8gRGVidWcgdHJhcCBvbiBhIFVzYWdlRmF1bHQgYWNjZXNzIHRvIGEgQ29wcm9jZXNzb3IuIElnbm9yZWQgd2hlbgorLy8gREhDU1IuQ19ERUJVR0VOIGlzIGNsZWFyZWQuCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfTk9DUEVSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19OT0NQRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX05PQ1BFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfTk9DUEVSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gVkNfTU1FUlIKKy8vCisvLyBEZWJ1ZyB0cmFwIG9uIE1lbW9yeSBNYW5hZ2VtZW50IGZhdWx0cy4gSWdub3JlZCB3aGVuIERIQ1NSLkNfREVCVUdFTiBpcworLy8gY2xlYXJlZC4KKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19NTUVSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX01NRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfTU1FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19NTUVSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFswXSBWQ19DT1JFUkVTRVQKKy8vCisvLyBSZXNldCBWZWN0b3IgQ2F0Y2guIEhhbHQgcnVubmluZyBzeXN0ZW0gaWYgQ29yZSByZXNldCBvY2N1cnMuIElnbm9yZWQgd2hlbgorLy8gREhDU1IuQ19ERUJVR0VOIGlzIGNsZWFyZWQuCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfQ09SRVJFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19DT1JFUkVTRVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0NPUkVSRVNFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfQ09SRVJFU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fU1RJUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs4OjBdIElOVElECisvLworLy8gSW50ZXJydXB0IElEIGZpZWxkLiBXcml0aW5nIGEgdmFsdWUgdG8gdGhpcyBiaXQtZmllbGQgaXMgdGhlIHNhbWUgYXMKKy8vIG1hbnVhbGx5IHBlbmRpbmcgYW4gaW50ZXJydXB0IGJ5IHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IGJpdCBpbgorLy8gYW4gSW50ZXJydXB0IFNldCBQZW5kaW5nIFJlZ2lzdGVyIGluIE5WSUNfSVNQUjAgb3IgTlZJQ19JU1BSMS4KKyNkZWZpbmUgQ1BVX1NDU19TVElSX0lOVElEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUFVfU0NTX1NUSVJfSU5USURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMUZGCisjZGVmaW5lIENQVV9TQ1NfU1RJUl9JTlRJRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19DUFVfU0NTX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV90aXByb3AuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV90aXByb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzcyNmM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X3RpcHJvcC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19jcHVfdGlwcm9wX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0NQVV9USVBST1BfSF9fCisjZGVmaW5lIF9fSFdfQ1BVX1RJUFJPUF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBDUFVfVElQUk9QIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEludGVybmFsCisjZGVmaW5lIENQVV9USVBST1BfT19UUkFDRUNMS01VWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRjgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQ1BVX1RJUFJPUF9PX0RZTl9DRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9USVBST1BfT19UUkFDRUNMS01VWAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFRSQUNFQ0xLX05fU1dWCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gVFJBQ0VDTEsgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBTV1YgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQ1BVX1RJUFJPUF9UUkFDRUNMS01VWF9UUkFDRUNMS19OX1NXViAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfVElQUk9QX1RSQUNFQ0xLTVVYX1RSQUNFQ0xLX05fU1dWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9USVBST1BfVFJBQ0VDTEtNVVhfVFJBQ0VDTEtfTl9TV1ZfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1RJUFJPUF9UUkFDRUNMS01VWF9UUkFDRUNMS19OX1NXVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfVElQUk9QX1RSQUNFQ0xLTVVYX1RSQUNFQ0xLX05fU1dWX1RSQUNFQ0xLICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9USVBST1BfVFJBQ0VDTEtNVVhfVFJBQ0VDTEtfTl9TV1ZfU1dWICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfVElQUk9QX09fRFlOX0NHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzE6MF0gRFlOX0NHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQ1BVX1RJUFJPUF9EWU5fQ0dfRFlOX0NHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfVElQUk9QX0RZTl9DR19EWU5fQ0dfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIENQVV9USVBST1BfRFlOX0NHX0RZTl9DR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19DUFVfVElQUk9QX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV90cGl1LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfdHBpdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMGJmNzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfdHBpdS5oCkBAIC0wLDAgKzEsMzQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfY3B1X3RwaXVfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQ1BVX1RQSVVfSF9fCisjZGVmaW5lIF9fSFdfQ1BVX1RQSVVfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQ1BVX1RQSVUgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gU3VwcG9ydGVkIFN5bmMgUG9ydCBTaXplcworI2RlZmluZSBDUFVfVFBJVV9PX1NTUFNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEN1cnJlbnQgU3luYyBQb3J0IFNpemUKKyNkZWZpbmUgQ1BVX1RQSVVfT19DU1BTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBBc3luYyBDbG9jayBQcmVzY2FsZXIKKyNkZWZpbmUgQ1BVX1RQSVVfT19BQ1BSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBTZWxlY3RlZCBQaW4gUHJvdG9jb2wKKyNkZWZpbmUgQ1BVX1RQSVVfT19TUFBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorCisvLyBGb3JtYXR0ZXIgYW5kIEZsdXNoIFN0YXR1cworI2RlZmluZSBDUFVfVFBJVV9PX0ZGU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisKKy8vIEZvcm1hdHRlciBhbmQgRmx1c2ggQ29udHJvbAorI2RlZmluZSBDUFVfVFBJVV9PX0ZGQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzA0CisKKy8vIEZvcm1hdHRlciBTeW5jaHJvbml6YXRpb24gQ291bnRlcgorI2RlZmluZSBDUFVfVFBJVV9PX0ZTQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzA4CisKKy8vIENsYWltIFRhZyBNYXNrCisjZGVmaW5lIENQVV9UUElVX09fQ0xBSU1NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQTAKKworLy8gQ2xhaW0gVGFnIFNldAorI2RlZmluZSBDUFVfVFBJVV9PX0NMQUlNU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkEwCisKKy8vIEN1cnJlbnQgQ2xhaW0gVGFnCisjZGVmaW5lIENQVV9UUElVX09fQ0xBSU1UQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQTQKKworLy8gQ2xhaW0gVGFnIENsZWFyCisjZGVmaW5lIENQVV9UUElVX09fQ0xBSU1DTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQTQKKworLy8gRGV2aWNlIElECisjZGVmaW5lIENQVV9UUElVX09fREVWSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQzgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfVFBJVV9PX1NTUFNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gRk9VUgorLy8KKy8vIDQtYml0IHBvcnQgc2l6ZSBzdXBwb3J0CisvLworLy8gMHgwOiBOb3Qgc3VwcG9ydGVkCisvLyAweDE6IFN1cHBvcnRlZAorI2RlZmluZSBDUFVfVFBJVV9TU1BTUl9GT1VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9UUElVX1NTUFNSX0ZPVVJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BVX1RQSVVfU1NQU1JfRk9VUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfVFBJVV9TU1BTUl9GT1VSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFRIUkVFCisvLworLy8gMy1iaXQgcG9ydCBzaXplIHN1cHBvcnQKKy8vCisvLyAweDA6IE5vdCBzdXBwb3J0ZWQKKy8vIDB4MTogU3VwcG9ydGVkCisjZGVmaW5lIENQVV9UUElVX1NTUFNSX1RIUkVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1RQSVVfU1NQU1JfVEhSRUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfVFBJVV9TU1BTUl9USFJFRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9UUElVX1NTUFNSX1RIUkVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gVFdPCisvLworLy8gMi1iaXQgcG9ydCBzaXplIHN1cHBvcnQKKy8vCisvLyAweDA6IE5vdCBzdXBwb3J0ZWQKKy8vIDB4MTogU3VwcG9ydGVkCisjZGVmaW5lIENQVV9UUElVX1NTUFNSX1RXTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1RQSVVfU1NQU1JfVFdPX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfVFBJVV9TU1BTUl9UV09fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9UUElVX1NTUFNSX1RXT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gT05FCisvLworLy8gMS1iaXQgcG9ydCBzaXplIHN1cHBvcnQKKy8vCisvLyAweDA6IE5vdCBzdXBwb3J0ZWQKKy8vIDB4MTogU3VwcG9ydGVkCisjZGVmaW5lIENQVV9UUElVX1NTUFNSX09ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1RQSVVfU1NQU1JfT05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfVFBJVV9TU1BTUl9PTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9UUElVX1NTUFNSX09ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfVFBJVV9PX0NTUFNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gRk9VUgorLy8KKy8vIDQtYml0IHBvcnQgZW5hYmxlCisvLyBXcml0aW5nIHZhbHVlcyB3aXRoIG1vcmUgdGhhbiBvbmUgYml0IHNldCBpbiBDU1BTUiwgb3Igc2V0dGluZyBhIGJpdCB0aGF0IGlzCisvLyBub3QgaW5kaWNhdGVkIGFzIHN1cHBvcnRlZCBpbiBTU1BTUiBjYW4gY2F1c2UgVW5wcmVkaWN0YWJsZSBiZWhhdmlvci4KKyNkZWZpbmUgQ1BVX1RQSVVfQ1NQU1JfRk9VUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfVFBJVV9DU1BTUl9GT1VSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9UUElVX0NTUFNSX0ZPVVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1RQSVVfQ1NQU1JfRk9VUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBUSFJFRQorLy8KKy8vIDMtYml0IHBvcnQgZW5hYmxlCisvLyBXcml0aW5nIHZhbHVlcyB3aXRoIG1vcmUgdGhhbiBvbmUgYml0IHNldCBpbiBDU1BTUiwgb3Igc2V0dGluZyBhIGJpdCB0aGF0IGlzCisvLyBub3QgaW5kaWNhdGVkIGFzIHN1cHBvcnRlZCBpbiBTU1BTUiBjYW4gY2F1c2UgVW5wcmVkaWN0YWJsZSBiZWhhdmlvci4KKyNkZWZpbmUgQ1BVX1RQSVVfQ1NQU1JfVEhSRUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfVFBJVV9DU1BTUl9USFJFRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9UUElVX0NTUFNSX1RIUkVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1RQSVVfQ1NQU1JfVEhSRUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBUV08KKy8vCisvLyAyLWJpdCBwb3J0IGVuYWJsZQorLy8gV3JpdGluZyB2YWx1ZXMgd2l0aCBtb3JlIHRoYW4gb25lIGJpdCBzZXQgaW4gQ1NQU1IsIG9yIHNldHRpbmcgYSBiaXQgdGhhdCBpcworLy8gbm90IGluZGljYXRlZCBhcyBzdXBwb3J0ZWQgaW4gU1NQU1IgY2FuIGNhdXNlIFVucHJlZGljdGFibGUgYmVoYXZpb3IuCisjZGVmaW5lIENQVV9UUElVX0NTUFNSX1RXTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1RQSVVfQ1NQU1JfVFdPX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfVFBJVV9DU1BTUl9UV09fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9UUElVX0NTUFNSX1RXT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gT05FCisvLworLy8gMS1iaXQgcG9ydCBlbmFibGUKKy8vIFdyaXRpbmcgdmFsdWVzIHdpdGggbW9yZSB0aGFuIG9uZSBiaXQgc2V0IGluIENTUFNSLCBvciBzZXR0aW5nIGEgYml0IHRoYXQgaXMKKy8vIG5vdCBpbmRpY2F0ZWQgYXMgc3VwcG9ydGVkIGluIFNTUFNSIGNhbiBjYXVzZSBVbnByZWRpY3RhYmxlIGJlaGF2aW9yLgorI2RlZmluZSBDUFVfVFBJVV9DU1BTUl9PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9UUElVX0NTUFNSX09ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1RQSVVfQ1NQU1JfT05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfVFBJVV9DU1BTUl9PTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1RQSVVfT19BQ1BSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTI6MF0gUFJFU0NBTEVSCisvLworLy8gRGl2aXNvciBmb3IgaW5wdXQgdHJhY2UgY2xvY2sgaXMgKFBSRVNDQUxFUiArIDEpLgorI2RlZmluZSBDUFVfVFBJVV9BQ1BSX1BSRVNDQUxFUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIENQVV9UUElVX0FDUFJfUFJFU0NBTEVSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGRkYKKyNkZWZpbmUgQ1BVX1RQSVVfQUNQUl9QUkVTQ0FMRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9UUElVX09fU1BQUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsxOjBdIFBST1RPQ09MCisvLworLy8gVHJhY2Ugb3V0cHV0IHByb3RvY29sCisvLyBFTlVNczoKKy8vIFNXT19OUlogICAgICAgICAgICAgICAgICBTZXJpYWxXaXJlIE91dHB1dCAoTlJaKQorLy8gU1dPX01BTkNIRVNURVIgICAgICAgICAgIFNlcmlhbFdpcmUgT3V0cHV0IChNYW5jaGVzdGVyKS4gVGhpcyBpcyB0aGUgcmVzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4KKy8vIFRSQUNFUE9SVCAgICAgICAgICAgICAgICBUcmFjZVBvcnQgbW9kZQorI2RlZmluZSBDUFVfVFBJVV9TUFBSX1BST1RPQ09MX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9UUElVX1NQUFJfUFJPVE9DT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQ1BVX1RQSVVfU1BQUl9QUk9UT0NPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfVFBJVV9TUFBSX1BST1RPQ09MX1NXT19OUlogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9UUElVX1NQUFJfUFJPVE9DT0xfU1dPX01BTkNIRVNURVIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1RQSVVfU1BQUl9QUk9UT0NPTF9UUkFDRVBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9UUElVX09fRkZTUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzNdIEZUTk9OU1RPUAorLy8KKy8vIDA6IEZvcm1hdHRlciBjYW4gYmUgc3RvcHBlZAorLy8gMTogRm9ybWF0dGVyIGNhbm5vdCBiZSBzdG9wcGVkCisjZGVmaW5lIENQVV9UUElVX0ZGU1JfRlROT05TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1RQSVVfRkZTUl9GVE5PTlNUT1BfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfVFBJVV9GRlNSX0ZUTk9OU1RPUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9UUElVX0ZGU1JfRlROT05TVE9QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfVFBJVV9PX0ZGQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs4XSBUUklHSU4KKy8vCisvLyBJbmRpY2F0ZXMgdGhhdCB0cmlnZ2VycyBhcmUgaW5zZXJ0ZWQgd2hlbiBhIHRyaWdnZXIgcGluIGlzIGFzc2VydGVkLgorI2RlZmluZSBDUFVfVFBJVV9GRkNSX1RSSUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9UUElVX0ZGQ1JfVFJJR0lOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1RQSVVfRkZDUl9UUklHSU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfVFBJVV9GRkNSX1RSSUdJTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzFdIEVORkNPTlQKKy8vCisvLyBFbmFibGUgY29udGludW91cyBmb3JtYXR0aW5nOgorLy8KKy8vIDA6IENvbnRpbnVvdXMgZm9ybWF0dGluZyBkaXNhYmxlZAorLy8gMTogQ29udGludW91cyBmb3JtYXR0aW5nIGVuYWJsZWQKKyNkZWZpbmUgQ1BVX1RQSVVfRkZDUl9FTkZDT05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfVFBJVV9GRkNSX0VORkNPTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9UUElVX0ZGQ1JfRU5GQ09OVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1RQSVVfRkZDUl9FTkZDT05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9UUElVX09fRlNDUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZTQ1IKKy8vCisvLyBUaGUgZ2xvYmFsIHN5bmNocm9uaXphdGlvbiB0cmlnZ2VyIGlzIGdlbmVyYXRlZCBieSB0aGUgUHJvZ3JhbSBDb3VudGVyIChQQykKKy8vIFNhbXBsZXIgYmxvY2suIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBubyBzeW5jaHJvbml6YXRpb24gY291bnRlciBpbiB0aGUKKy8vIFRQSVUuCisjZGVmaW5lIENQVV9UUElVX0ZTQ1JfRlNDUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX1RQSVVfRlNDUl9GU0NSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfVFBJVV9GU0NSX0ZTQ1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1RQSVVfT19DTEFJTU1BU0sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDTEFJTU1BU0sKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIGZvcm1zIG9uZSBoYWxmIG9mIHRoZSBDbGFpbSBUYWcgdmFsdWUuIFdoZW4gcmVhZGluZyB0aGlzCisvLyByZWdpc3RlciByZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyB0aGF0IGNhbiBiZSBzZXQgKGVhY2ggYml0IGlzIGNvbnNpZGVyZWQKKy8vIHNlcGFyYXRlbHkpOgorLy8KKy8vIDA6IFRoaXMgY2xhaW0gdGFnIGJpdCBpcyBub3QgaW1wbGVtZW50ZWQKKy8vIDE6IFRoaXMgY2xhaW0gdGFnIGJpdCBpcyBub3QgaW1wbGVtZW50ZWQKKy8vCisvLyBUaGUgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIgaXMgZGVzY3JpYmVkIGluIENMQUlNU0VULgorI2RlZmluZSBDUFVfVFBJVV9DTEFJTU1BU0tfQ0xBSU1NQVNLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9UUElVX0NMQUlNTUFTS19DTEFJTU1BU0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX1RQSVVfQ0xBSU1NQVNLX0NMQUlNTUFTS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9UUElVX09fQ0xBSU1TRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDTEFJTVNFVAorLy8KKy8vIFRoaXMgcmVnaXN0ZXIgZm9ybXMgb25lIGhhbGYgb2YgdGhlIENsYWltIFRhZyB2YWx1ZS4gV3JpdGluZyB0byB0aGlzCisvLyBsb2NhdGlvbiBhbGxvd3MgaW5kaXZpZHVhbCBiaXRzIHRvIGJlIHNldCAoZWFjaCBiaXQgaXMgY29uc2lkZXJlZAorLy8gc2VwYXJhdGVseSk6CisvLworLy8gMDogTm8gZWZmZWN0CisvLyAxOiBTZXQgdGhpcyBiaXQgaW4gdGhlIGNsYWltIHRhZworLy8KKy8vIFRoZSBiZWhhdmlvciB3aGVuIHJlYWRpbmcgZnJvbSB0aGlzIGxvY2F0aW9uIGlzIGRlc2NyaWJlZCBpbiBDTEFJTU1BU0suCisjZGVmaW5lIENQVV9UUElVX0NMQUlNU0VUX0NMQUlNU0VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX1RQSVVfQ0xBSU1TRVRfQ0xBSU1TRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfVFBJVV9DTEFJTVNFVF9DTEFJTVNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1RQSVVfT19DTEFJTVRBRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENMQUlNVEFHCisvLworLy8gVGhpcyByZWdpc3RlciBmb3JtcyBvbmUgaGFsZiBvZiB0aGUgQ2xhaW0gVGFnIHZhbHVlLiBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIKKy8vIHJldHVybnMgdGhlIGN1cnJlbnQgQ2xhaW0gVGFnIHZhbHVlLgorLy8gUmVhZGluZyBDTEFJTU1BU0sgZGV0ZXJtaW5lcyBob3cgbWFueSBiaXRzIGZyb20gdGhpcyByZWdpc3RlciBtdXN0IGJlIHVzZWQuCisvLworLy8gVGhlIGJlaGF2aW9yIHdoZW4gd3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyIGlzIGRlc2NyaWJlZCBpbiBDTEFJTUNMUi4KKyNkZWZpbmUgQ1BVX1RQSVVfQ0xBSU1UQUdfQ0xBSU1UQUdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfVFBJVV9DTEFJTVRBR19DTEFJTVRBR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9UUElVX0NMQUlNVEFHX0NMQUlNVEFHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfVFBJVV9PX0NMQUlNQ0xSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0xBSU1DTFIKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIGZvcm1zIG9uZSBoYWxmIG9mIHRoZSBDbGFpbSBUYWcgdmFsdWUuIFdyaXRpbmcgdG8gdGhpcworLy8gbG9jYXRpb24gZW5hYmxlcyBpbmRpdmlkdWFsIGJpdHMgdG8gYmUgY2xlYXJlZCAoZWFjaCBiaXQgaXMgY29uc2lkZXJlZAorLy8gc2VwYXJhdGVseSk6CisvLworLy8gMDogTm8gZWZmZWN0CisvLyAxOiBDbGVhciB0aGlzIGJpdCBpbiB0aGUgY2xhaW0gdGFnLgorLy8KKy8vIFRoZSBiZWhhdmlvciB3aGVuIHJlYWRpbmcgZnJvbSB0aGlzIGxvY2F0aW9uIGlzIGRlc2NyaWJlZCBpbiBDTEFJTVRBRy4KKyNkZWZpbmUgQ1BVX1RQSVVfQ0xBSU1DTFJfQ0xBSU1DTFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfVFBJVV9DTEFJTUNMUl9DTEFJTUNMUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9UUElVX0NMQUlNQ0xSX0NMQUlNQ0xSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfVFBJVV9PX0RFVklECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gREVWSUQKKy8vCisvLyBUaGlzIGZpZWxkIHJldHVybnM6IDB4Q0ExIGlmIHRoZXJlIGlzIGFuIEVUTSBwcmVzZW50LiAweENBMCBpZiB0aGVyZSBpcyBubworLy8gRVRNIHByZXNlbnQuCisjZGVmaW5lIENQVV9UUElVX0RFVklEX0RFVklEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX1RQSVVfREVWSURfREVWSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfVFBJVV9ERVZJRF9ERVZJRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQ1BVX1RQSVVfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3J5cHRvLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcnlwdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjNiNTdiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3J5cHRvLmgKQEAgLTAsMCArMSwxOTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfY3J5cHRvX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0NSWVBUT19IX18KKyNkZWZpbmUgX19IV19DUllQVE9fSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQ1JZUFRPIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIERNQSBDaGFubmVsIDAgQ29udHJvbAorI2RlZmluZSBDUllQVE9fT19ETUFDSDBDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIERNQSBDaGFubmVsIDAgRXh0ZXJuYWwgQWRkcmVzcworI2RlZmluZSBDUllQVE9fT19ETUFDSDBFWFRBRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIERNQSBDaGFubmVsIDAgTGVuZ3RoCisjZGVmaW5lIENSWVBUT19PX0RNQUNIMExFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gRE1BIENvbnRyb2xsZXIgU3RhdHVzCisjZGVmaW5lIENSWVBUT19PX0RNQVNUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gRE1BIENvbnRyb2xsZXIgU29mdHdhcmUgUmVzZXQKKyNkZWZpbmUgQ1JZUFRPX09fRE1BU1dSRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBETUEgQ2hhbm5lbCAxIENvbnRyb2wKKyNkZWZpbmUgQ1JZUFRPX09fRE1BQ0gxQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBETUEgQ2hhbm5lbCAxIEV4dGVybmFsIEFkZHJlc3MKKyNkZWZpbmUgQ1JZUFRPX09fRE1BQ0gxRVhUQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBETUEgQ2hhbm5lbCAxIExlbmd0aAorI2RlZmluZSBDUllQVE9fT19ETUFDSDFMRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisKKy8vIERNQSBDb250cm9sbGVyIE1hc3RlciBDb25maWd1cmF0aW9uCisjZGVmaW5lIENSWVBUT19PX0RNQUJVU0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKKworLy8gRE1BIENvbnRyb2xsZXIgUG9ydCBFcnJvcgorI2RlZmluZSBDUllQVE9fT19ETUFQT1JURVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdDCisKKy8vIERNQSBDb250cm9sbGVyIFZlcnNpb24KKyNkZWZpbmUgQ1JZUFRPX09fRE1BSFdWRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGQworCisvLyBLZXkgV3JpdGUgQXJlYQorI2RlZmluZSBDUllQVE9fT19LRVlXUklURUFSRUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisKKy8vIEtleSBXcml0dGVuIEFyZWEgU3RhdHVzCisjZGVmaW5lIENSWVBUT19PX0tFWVdSSVRURU5BUkVBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDQKKworLy8gS2V5IFNpemUKKyNkZWZpbmUgQ1JZUFRPX09fS0VZU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwOAorCisvLyBLZXkgUmVhZCBBcmVhCisjZGVmaW5lIENSWVBUT19PX0tFWVJFQURBUkVBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MEMKKworLy8gQ2xlYXIgQUVTX0tFWTIvR0hBU0ggS2V5CisjZGVmaW5lIENSWVBUT19PX0FFU0tFWTIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDAKKworLy8gQ2xlYXIgQUVTX0tFWTIvR0hBU0ggS2V5CisjZGVmaW5lIENSWVBUT19PX0FFU0tFWTIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDQKKworLy8gQ2xlYXIgQUVTX0tFWTIvR0hBU0ggS2V5CisjZGVmaW5lIENSWVBUT19PX0FFU0tFWTIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDgKKworLy8gQ2xlYXIgQUVTX0tFWTIvR0hBU0ggS2V5CisjZGVmaW5lIENSWVBUT19PX0FFU0tFWTIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MEMKKworLy8gQ2xlYXIgQUVTX0tFWTMKKyNkZWZpbmUgQ1JZUFRPX09fQUVTS0VZMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUxMAorCisvLyBDbGVhciBBRVNfS0VZMworI2RlZmluZSBDUllQVE9fT19BRVNLRVkzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTE0CisKKy8vIENsZWFyIEFFU19LRVkzCisjZGVmaW5lIENSWVBUT19PX0FFU0tFWTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MTgKKworLy8gQ2xlYXIgQUVTX0tFWTMKKyNkZWZpbmUgQ1JZUFRPX09fQUVTS0VZMzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUxQworCisvLyBBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yCisjZGVmaW5lIENSWVBUT19PX0FFU0lWMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NDAKKworLy8gQUVTIEluaXRpYWxpemF0aW9uIFZlY3RvcgorI2RlZmluZSBDUllQVE9fT19BRVNJVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTQ0CisKKy8vIEFFUyBJbml0aWFsaXphdGlvbiBWZWN0b3IKKyNkZWZpbmUgQ1JZUFRPX09fQUVTSVYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU0OAorCisvLyBBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yCisjZGVmaW5lIENSWVBUT19PX0FFU0lWMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NEMKKworLy8gQUVTIElucHV0L091dHB1dCBCdWZmZXIgQ29udHJvbAorI2RlZmluZSBDUllQVE9fT19BRVNDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTUwCisKKy8vIENyeXB0byBEYXRhIExlbmd0aCBMU1cKKyNkZWZpbmUgQ1JZUFRPX09fQUVTREFUQUxFTjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU1NAorCisvLyBDcnlwdG8gRGF0YSBMZW5ndGggTVNXCisjZGVmaW5lIENSWVBUT19PX0FFU0RBVEFMRU4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NTgKKworLy8gQUVTIEF1dGhlbnRpY2F0aW9uIExlbmd0aAorI2RlZmluZSBDUllQVE9fT19BRVNBVVRITEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTVDCisKKy8vIERhdGEgSW5wdXQvT3V0cHV0CisjZGVmaW5lIENSWVBUT19PX0FFU0RBVEFPVVQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NjAKKworLy8gQUVTIERhdGEgSW5wdXQvT3V0cHV0IDAKKyNkZWZpbmUgQ1JZUFRPX09fQUVTREFUQUlOMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU2MAorCisvLyBBRVMgRGF0YSBJbnB1dC9PdXRwdXQgMworI2RlZmluZSBDUllQVE9fT19BRVNEQVRBT1VUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTY0CisKKy8vIEFFUyBEYXRhIElucHV0L091dHB1dCAxCisjZGVmaW5lIENSWVBUT19PX0FFU0RBVEFJTjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NjQKKworLy8gQUVTIERhdGEgSW5wdXQvT3V0cHV0IDIKKyNkZWZpbmUgQ1JZUFRPX09fQUVTREFUQU9VVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU2OAorCisvLyBBRVMgRGF0YSBJbnB1dC9PdXRwdXQgMgorI2RlZmluZSBDUllQVE9fT19BRVNEQVRBSU4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTY4CisKKy8vIEFFUyBEYXRhIElucHV0L091dHB1dCAzCisjZGVmaW5lIENSWVBUT19PX0FFU0RBVEFPVVQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NkMKKworLy8gRGF0YSBJbnB1dC9PdXRwdXQKKyNkZWZpbmUgQ1JZUFRPX09fQUVTREFUQUlOMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU2QworCisvLyBBRVMgVGFnIE91dHB1dAorI2RlZmluZSBDUllQVE9fT19BRVNUQUdPVVQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTcwCisKKy8vIEFFUyBUYWcgT3V0cHV0CisjZGVmaW5lIENSWVBUT19PX0FFU1RBR09VVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NzQKKworLy8gQUVTIFRhZyBPdXRwdXQKKyNkZWZpbmUgQ1JZUFRPX09fQUVTVEFHT1VUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU3OAorCisvLyBBRVMgVGFnIE91dHB1dAorI2RlZmluZSBDUllQVE9fT19BRVNUQUdPVVQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTdDCisKKy8vIE1hc3RlciBBbGdvcml0aG0gU2VsZWN0CisjZGVmaW5lIENSWVBUT19PX0FMR1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKworLy8gTWFzdGVyIFByb3RlY3Rpb24gQ29udHJvbAorI2RlZmluZSBDUllQVE9fT19ETUFQUk9UQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzA0CisKKy8vIFNvZnR3YXJlIFJlc2V0CisjZGVmaW5lIENSWVBUT19PX1NXUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3NDAKKworLy8gSW50ZXJydXB0IENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgQ1JZUFRPX09fSVJRVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDc4MAorCisvLyBJbnRlcnJ1cHQgRW5hYmxlCisjZGVmaW5lIENSWVBUT19PX0lSUUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3ODQKKworLy8gSW50ZXJydXB0IENsZWFyCisjZGVmaW5lIENSWVBUT19PX0lSUUNMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3ODgKKworLy8gSW50ZXJydXB0IFNldAorI2RlZmluZSBDUllQVE9fT19JUlFTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzhDCisKKy8vIEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgQ1JZUFRPX09fSVJRU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDc5MAorCisvLyBDVFJMIE1vZHVsZSBWZXJzaW9uCisjZGVmaW5lIENSWVBUT19PX0hXVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3RkMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19ETUFDSDBDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBQUklPCisvLworLy8gQ2hhbm5lbCBwcmlvcml0eToKKy8vCisvLyBBIGNoYW5uZWwgd2l0aCBoaWdoIHByaW9yaXR5IHdpbGwgYmUgc2VydmVkIGJlZm9yZSBhIGNoYW5uZWwgd2l0aCBsb3cKKy8vIHByaW9yaXR5IGluIGNhc2VzIHdpdGggc2ltdWx0YW5lb3VzIGFjY2VzcyByZXF1ZXN0cy4gSWYgYm90aCBjaGFubmVscyBoYXZlCisvLyB0aGUgc2FtZSBwcmlvcml0eSBhY2Nlc3Mgb2YgdGhlIGNoYW5uZWxzIHRvIHRoZSBleHRlcm5hbCBwb3J0IGlzIGFyYml0cmF0ZWQKKy8vIHVzaW5nIGEgUm91bmQgUm9iaW4gc2NoZW1lLgorLy8gRU5VTXM6CisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgaGlnaAorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5IGxvdworI2RlZmluZSBDUllQVE9fRE1BQ0gwQ1RMX1BSSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19ETUFDSDBDVExfUFJJT19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMENUTF9QUklPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fRE1BQ0gwQ1RMX1BSSU9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENSWVBUT19ETUFDSDBDVExfUFJJT19ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMENUTF9QUklPX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIERNQSBDaGFubmVsIDAgQ29udHJvbAorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbCBlbmFibGVkCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbCBkaXNhYmxlZAorI2RlZmluZSBDUllQVE9fRE1BQ0gwQ1RMX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19ETUFDSDBDVExfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMENUTF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fRE1BQ0gwQ1RMX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19ETUFDSDBDVExfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMENUTF9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0RNQUNIMEVYVEFERFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBBRERSCisvLworLy8gQ2hhbm5lbCBleHRlcm5hbCBhZGRyZXNzIHZhbHVlLgorLy8gSG9sZHMgdGhlIGxhc3QgdXBkYXRlZCBleHRlcm5hbCBhZGRyZXNzIGFmdGVyIGJlaW5nIHNlbnQgdG8gdGhlIG1hc3RlcgorLy8gaW50ZXJmYWNlLgorI2RlZmluZSBDUllQVE9fRE1BQ0gwRVhUQUREUl9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19ETUFDSDBFWFRBRERSX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMEVYVEFERFJfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0RNQUNIMExFTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIExFTgorLy8KKy8vIERNQSB0cmFuc2ZlciBsZW5ndGggaW4gYnl0ZXMuCisvLyBEdXJpbmcgY29uZmlndXJhdGlvbiwgdGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgRE1BIHRyYW5zZmVyIGxlbmd0aCBpbgorLy8gYnl0ZXMuIER1cmluZyBvcGVyYXRpb24sIGl0IGNvbnRhaW5zIHRoZSBsYXN0IHVwZGF0ZWQgdmFsdWUgb2YgdGhlIERNQQorLy8gdHJhbnNmZXIgbGVuZ3RoIGFmdGVyIGJlaW5nIHNlbnQgdG8gdGhlIG1hc3RlciBpbnRlcmZhY2UuCisvLyBOb3RlOiBXcml0aW5nIGEgbm9uLXplcm8gdmFsdWUgdG8gdGhpcyByZWdpc3RlciBmaWVsZCBzdGFydHMgdGhlIHRyYW5zZmVyIGlmCisvLyB0aGUgY2hhbm5lbCBpcyBlbmFibGVkIGJ5IHNldHRpbmcgRE1BQ0gwQ1RMLkVOLgorI2RlZmluZSBDUllQVE9fRE1BQ0gwTEVOX0xFTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENSWVBUT19ETUFDSDBMRU5fTEVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMExFTl9MRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0RNQVNUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE3XSBQT1JUX0VSUgorLy8KKy8vIFJlZmxlY3RzIHBvc3NpYmxlIHRyYW5zZmVyIGVycm9ycyBvbiB0aGUgQUhCIHBvcnQuCisjZGVmaW5lIENSWVBUT19ETUFTVEFUX1BPUlRfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQVNUQVRfUE9SVF9FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUllQVE9fRE1BU1RBVF9QT1JUX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENSWVBUT19ETUFTVEFUX1BPUlRfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgICBbMV0gQ0gxX0FDVElWRQorLy8KKy8vIFRoaXMgcmVnaXN0ZXIgZmllbGQgaW5kaWNhdGVzIGlmIERNQSBjaGFubmVsIDEgaXMgYWN0aXZlIG9yIG5vdC4KKy8vIDA6IE5vdCBhY3RpdmUKKy8vIDE6IEFjdGl2ZQorI2RlZmluZSBDUllQVE9fRE1BU1RBVF9DSDFfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19ETUFTVEFUX0NIMV9BQ1RJVkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1JZUFRPX0RNQVNUQVRfQ0gxX0FDVElWRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fRE1BU1RBVF9DSDFfQUNUSVZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENIMF9BQ1RJVkUKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIGZpZWxkIGluZGljYXRlcyBpZiBETUEgY2hhbm5lbCAwIGlzIGFjdGl2ZSBvciBub3QuCisvLyAwOiBOb3QgYWN0aXZlCisvLyAxOiBBY3RpdmUKKyNkZWZpbmUgQ1JZUFRPX0RNQVNUQVRfQ0gwX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fRE1BU1RBVF9DSDBfQUNUSVZFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19ETUFTVEFUX0NIMF9BQ1RJVkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0RNQVNUQVRfQ0gwX0FDVElWRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0RNQVNXUkVTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBSRVNFVAorLy8KKy8vIFNvZnR3YXJlIHJlc2V0IGVuYWJsZQorLy8KKy8vIDA6ICBEaXNhYmxlCisvLyAxOiAgRW5hYmxlIChzZWxmLWNsZWFyZWQgdG8gemVybykuCisvLworLy8gTm90ZTogQ29tcGxldGlvbiBvZiB0aGUgc29mdHdhcmUgcmVzZXQgbXVzdCBiZSBjaGVja2VkIGluIERNQVNUQVQuQ0gwX0FDVElWRQorLy8gYW5kIERNQVNUQVQuQ0gxX0FDVElWRS4KKyNkZWZpbmUgQ1JZUFRPX0RNQVNXUkVTRVRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fRE1BU1dSRVNFVF9SRVNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19ETUFTV1JFU0VUX1JFU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0RNQVNXUkVTRVRfUkVTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0RNQUNIMUNUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIFBSSU8KKy8vCisvLyBDaGFubmVsIHByaW9yaXR5OgorLy8KKy8vIEEgY2hhbm5lbCB3aXRoIGhpZ2ggcHJpb3JpdHkgd2lsbCBiZSBzZXJ2ZWQgYmVmb3JlIGEgY2hhbm5lbCB3aXRoIGxvdworLy8gcHJpb3JpdHkgaW4gY2FzZXMgd2l0aCBzaW11bHRhbmVvdXMgYWNjZXNzIHJlcXVlc3RzLiBJZiBib3RoIGNoYW5uZWxzIGhhdmUKKy8vIHRoZSBzYW1lIHByaW9yaXR5IGFjY2VzcyBvZiB0aGUgY2hhbm5lbHMgdG8gdGhlIGV4dGVybmFsIHBvcnQgaXMgYXJiaXRyYXRlZAorLy8gdXNpbmcgYSBSb3VuZCBSb2JpbiBzY2hlbWUuCisvLyBFTlVNczoKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSBoaWdoCisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgbG93CisjZGVmaW5lIENSWVBUT19ETUFDSDFDVExfUFJJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUNUTF9QUklPX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fRE1BQ0gxQ1RMX1BSSU9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19ETUFDSDFDVExfUFJJT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUNUTF9QUklPX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fRE1BQ0gxQ1RMX1BSSU9fTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gQ2hhbm5lbCBlbmFibGU6CisvLworLy8gTm90ZTogRGlzYWJsaW5nIGFuIGFjdGl2ZSBjaGFubmVsIHdpbGwgaW50ZXJydXB0IHRoZSBETUEgb3BlcmF0aW9uLiBUaGUKKy8vIG9uZ29pbmcgYmxvY2sgdHJhbnNmZXIgd2lsbCBiZSBjb21wbGV0ZWQsIGJ1dCBubyBuZXcgdHJhbnNmZXJzIHdpbGwgYmUKKy8vIHJlcXVlc3RlZC4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwgZW5hYmxlZAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwgZGlzYWJsZWQKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUNUTF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fRE1BQ0gxQ1RMX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19ETUFDSDFDVExfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUNUTF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fRE1BQ0gxQ1RMX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19ETUFDSDFDVExfRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19ETUFDSDFFWFRBRERSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQUREUgorLy8KKy8vIENoYW5uZWwgZXh0ZXJuYWwgYWRkcmVzcyB2YWx1ZS4KKy8vIEhvbGRzIHRoZSBsYXN0IHVwZGF0ZWQgZXh0ZXJuYWwgYWRkcmVzcyBhZnRlciBiZWluZyBzZW50IHRvIHRoZSBtYXN0ZXIKKy8vIGludGVyZmFjZS4KKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUVYVEFERFJfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUllQVE9fRE1BQ0gxRVhUQUREUl9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENSWVBUT19ETUFDSDFFWFRBRERSX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19ETUFDSDFMRU4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBMRU4KKy8vCisvLyBETUEgdHJhbnNmZXIgbGVuZ3RoIGluIGJ5dGVzLgorLy8gRHVyaW5nIGNvbmZpZ3VyYXRpb24sIHRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIERNQSB0cmFuc2ZlciBsZW5ndGggaW4KKy8vIGJ5dGVzLiBEdXJpbmcgb3BlcmF0aW9uLCBpdCBjb250YWlucyB0aGUgbGFzdCB1cGRhdGVkIHZhbHVlIG9mIHRoZSBETUEKKy8vIHRyYW5zZmVyIGxlbmd0aCBhZnRlciBiZWluZyBzZW50IHRvIHRoZSBtYXN0ZXIgaW50ZXJmYWNlLgorLy8gTm90ZTogV3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlIHRvIHRoaXMgcmVnaXN0ZXIgZmllbGQgc3RhcnRzIHRoZSB0cmFuc2ZlciBpZgorLy8gdGhlIGNoYW5uZWwgaXMgZW5hYmxlZCBieSBzZXR0aW5nIERNQUNIMUNUTC5FTi4KKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUxFTl9MRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDUllQVE9fRE1BQ0gxTEVOX0xFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIENSWVBUT19ETUFDSDFMRU5fTEVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19ETUFCVVNDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE1OjEyXSBBSEJfTVNUMV9CVVJTVF9TSVpFCisvLworLy8gTWF4aW11bSBidXJzdCBzaXplIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBvbiB0aGUgQUhCIGJ1cworLy8gRU5VTXM6CisvLyA2NF9CWVRFICAgICAgICAgICAgICAgICAgNjQgYnl0ZXMKKy8vIDMyX0JZVEUgICAgICAgICAgICAgICAgICAzMiBieXRlcworLy8gMTZfQllURSAgICAgICAgICAgICAgICAgIDE2IGJ5dGVzCisvLyA4X0JZVEUgICAgICAgICAgICAgICAgICAgOCBieXRlcworLy8gNF9CWVRFICAgICAgICAgICAgICAgICAgIDQgYnl0ZXMKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9CVVJTVF9TSVpFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0JVUlNUX1NJWkVfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfQlVSU1RfU0laRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9CVVJTVF9TSVpFXzY0X0JZVEUgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0JVUlNUX1NJWkVfMzJfQllURSAgICAgICAgICAgICAgICAweDAwMDA1MDAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfQlVSU1RfU0laRV8xNl9CWVRFICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9CVVJTVF9TSVpFXzhfQllURSAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0JVUlNUX1NJWkVfNF9CWVRFICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTFdIEFIQl9NU1QxX0lETEVfRU4KKy8vCisvLyBJZGxlIHRyYW5zZmVyIGluc2VydGlvbiBiZXR3ZWVuIGNvbnNlY3V0aXZlIGJ1cnN0IHRyYW5zZmVycyBvbiBBSEIKKy8vIEVOVU1zOgorLy8gSURMRSAgICAgICAgICAgICAgICAgICAgIElkbGUgdHJhbnNmZXIgaW5zZXJ0aW9uIGVuYWJsZWQKKy8vIE5PX0lETEUgICAgICAgICAgICAgICAgICBEbyBub3QgaW5zZXJ0IGlkbGUgdHJhbnNmZXJzLgorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0lETEVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfSURMRV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9JRExFX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0lETEVfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfSURMRV9FTl9JRExFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9JRExFX0VOX05PX0lETEUgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzEwXSBBSEJfTVNUMV9JTkNSX0VOCisvLworLy8gQnVyc3QgbGVuZ3RoIHR5cGUgb2YgQUhCIHRyYW5zZmVyCisvLyBFTlVNczoKKy8vIFNQRUNJRklFRCAgICAgICAgICAgICAgICBGaXhlZCBsZW5ndGggYnVyc3RzIG9yIHNpbmdsZSB0cmFuc2ZlcnMKKy8vIFVOU1BFQ0lGSUVEICAgICAgICAgICAgICBVbnNwZWNpZmllZCBsZW5ndGggYnVyc3QgdHJhbnNmZXJzCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfSU5DUl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9JTkNSX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0lOQ1JfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfSU5DUl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9JTkNSX0VOX1NQRUNJRklFRCAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0lOQ1JfRU5fVU5TUEVDSUZJRUQgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzldIEFIQl9NU1QxX0xPQ0tfRU4KKy8vCisvLyBMb2NrZWQgdHJhbnNmb3JtIG9uIEFIQgorLy8gRU5VTXM6CisvLyBMT0NLRUQgICAgICAgICAgICAgICAgICAgVHJhbnNmZXJzIGFyZSBsb2NrZWQKKy8vIE5PVF9MT0NLRUQgICAgICAgICAgICAgICBUcmFuc2ZlcnMgYXJlIG5vdCBsb2NrZWQKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9MT0NLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0xPQ0tfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfTE9DS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9MT0NLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0xPQ0tfRU5fTE9DS0VEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfTE9DS19FTl9OT1RfTE9DS0VEICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOF0gQUhCX01TVDFfQklHRU5ECisvLworLy8gRW5kaWFuZXNzIGZvciB0aGUgQUhCIG1hc3RlcgorLy8gRU5VTXM6CisvLyBCSUdfRU5ESUFOICAgICAgICAgICAgICAgQmlnIEVuZGlhbgorLy8gTElUVExFX0VORElBTiAgICAgICAgICAgIExpdHRsZSBFbmRpYW4KKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9CSUdFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0JJR0VORF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfQklHRU5EX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9CSUdFTkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0JJR0VORF9CSUdfRU5ESUFOICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfQklHRU5EX0xJVFRMRV9FTkRJQU4gICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19ETUFQT1JURVJSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxMl0gQUhCX0VSUgorLy8KKy8vIEEgMSBpbmRpY2F0ZXMgdGhhdCB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwgaGFzIGRldGVjdGVkIGFuIEFIQiBidXMgZXJyb3IKKyNkZWZpbmUgQ1JZUFRPX0RNQVBPUlRFUlJfQUhCX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUllQVE9fRE1BUE9SVEVSUl9BSEJfRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIENSWVBUT19ETUFQT1JURVJSX0FIQl9FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQVBPUlRFUlJfQUhCX0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgIFs5XSBMQVNUX0NICisvLworLy8gSW5kaWNhdGVzIHdoaWNoIGNoYW5uZWwgd2FzIHNlcnZpY2VkIGxhc3QgKGNoYW5uZWwgMCBvciBjaGFubmVsIDEpIGJ5IHRoZQorLy8gQUhCIG1hc3RlciBwb3J0LgorI2RlZmluZSBDUllQVE9fRE1BUE9SVEVSUl9MQVNUX0NIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENSWVBUT19ETUFQT1JURVJSX0xBU1RfQ0hfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ1JZUFRPX0RNQVBPUlRFUlJfTEFTVF9DSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUllQVE9fRE1BUE9SVEVSUl9MQVNUX0NIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fRE1BSFdWRVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI3OjI0XSBIV19NQUpPUl9WRVIKKy8vCisvLyBNYWpvciB2ZXJzaW9uIG51bWJlcgorI2RlZmluZSBDUllQVE9fRE1BSFdWRVJfSFdfTUFKT1JfVkVSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENSWVBUT19ETUFIV1ZFUl9IV19NQUpPUl9WRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUhXVkVSX0hXX01BSk9SX1ZFUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjIwXSBIV19NSU5PUl9WRVIKKy8vCisvLyBNaW5vciB2ZXJzaW9uIG51bWJlcgorI2RlZmluZSBDUllQVE9fRE1BSFdWRVJfSFdfTUlOT1JfVkVSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENSWVBUT19ETUFIV1ZFUl9IV19NSU5PUl9WRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUhXVkVSX0hXX01JTk9SX1ZFUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogWzE5OjE2XSBIV19QQVRDSF9MVkwKKy8vCisvLyBQYXRjaCBsZXZlbC4KKyNkZWZpbmUgQ1JZUFRPX0RNQUhXVkVSX0hXX1BBVENIX0xWTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUllQVE9fRE1BSFdWRVJfSFdfUEFUQ0hfTFZMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIENSWVBUT19ETUFIV1ZFUl9IV19QQVRDSF9MVkxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gVkVSX05VTV9DT01QTAorLy8KKy8vIEJpdC1ieS1iaXQgY29tcGxlbWVudCBvZiB0aGUgVkVSX05VTSBmaWVsZCBiaXRzLgorI2RlZmluZSBDUllQVE9fRE1BSFdWRVJfVkVSX05VTV9DT01QTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENSWVBUT19ETUFIV1ZFUl9WRVJfTlVNX0NPTVBMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUhXVkVSX1ZFUl9OVU1fQ09NUExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBWRVJfTlVNCisvLworLy8gVmVyc2lvbiBudW1iZXIgb2YgdGhlIERNQSBDb250cm9sbGVyICgyMDkpCisjZGVmaW5lIENSWVBUT19ETUFIV1ZFUl9WRVJfTlVNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1JZUFRPX0RNQUhXVkVSX1ZFUl9OVU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUllQVE9fRE1BSFdWRVJfVkVSX05VTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fS0VZV1JJVEVBUkVBCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gUkFNX0FSRUE3CisvLworLy8gUmVwcmVzZW50cyBhbiBhcmVhIG9mIDEyOCBiaXRzLgorLy8gU2VsZWN0IHRoZSBrZXkgc3RvcmUgUkFNIGFyZWEocykgd2hlcmUgdGhlIGtleShzKSBuZWVkcyB0byBiZSB3cml0dGVuLgorLy8KKy8vIFdyaXRpbmcgdG8gbXVsdGlwbGUgUkFNIGxvY2F0aW9ucyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlIHNlbGVjdGVkIFJBTQorLy8gYXJlYXMgYXJlIHNlcXVlbnRpYWwuCisvLyBFTlVNczoKKy8vIFNFTCAgICAgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIHNlbGVjdGVkIHRvIGJlIHdyaXR0ZW4KKy8vIE5PVF9TRUwgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCBzZWxlY3RlZCB0byBiZSB3cml0dGVuCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTdfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBN19OT1RfU0VMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIFJBTV9BUkVBNgorLy8KKy8vIFJlcHJlc2VudHMgYW4gYXJlYSBvZiAxMjggYml0cy4KKy8vIFNlbGVjdCB0aGUga2V5IHN0b3JlIFJBTSBhcmVhKHMpIHdoZXJlIHRoZSBrZXkocykgbmVlZHMgdG8gYmUgd3JpdHRlbi4KKy8vCisvLyBXcml0aW5nIHRvIG11bHRpcGxlIFJBTSBsb2NhdGlvbnMgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZSBzZWxlY3RlZCBSQU0KKy8vIGFyZWFzIGFyZSBzZXF1ZW50aWFsLgorLy8gRU5VTXM6CisvLyBTRUwgICAgICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBzZWxlY3RlZCB0byBiZSB3cml0dGVuCisvLyBOT1RfU0VMICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBub3Qgc2VsZWN0ZWQgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE2X1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTZfTk9UX1NFTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs1XSBSQU1fQVJFQTUKKy8vCisvLyBSZXByZXNlbnRzIGFuIGFyZWEgb2YgMTI4IGJpdHMuCisvLyBTZWxlY3QgdGhlIGtleSBzdG9yZSBSQU0gYXJlYShzKSB3aGVyZSB0aGUga2V5KHMpIG5lZWRzIHRvIGJlIHdyaXR0ZW4uCisvLworLy8gV3JpdGluZyB0byBtdWx0aXBsZSBSQU0gbG9jYXRpb25zIGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgc2VsZWN0ZWQgUkFNCisvLyBhcmVhcyBhcmUgc2VxdWVudGlhbC4KKy8vIEVOVU1zOgorLy8gU0VMICAgICAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgc2VsZWN0ZWQgdG8gYmUgd3JpdHRlbgorLy8gTk9UX1NFTCAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgbm90IHNlbGVjdGVkIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNV9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE1X05PVF9TRUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNF0gUkFNX0FSRUE0CisvLworLy8gUmVwcmVzZW50cyBhbiBhcmVhIG9mIDEyOCBiaXRzLgorLy8gU2VsZWN0IHRoZSBrZXkgc3RvcmUgUkFNIGFyZWEocykgd2hlcmUgdGhlIGtleShzKSBuZWVkcyB0byBiZSB3cml0dGVuLgorLy8KKy8vIFdyaXRpbmcgdG8gbXVsdGlwbGUgUkFNIGxvY2F0aW9ucyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlIHNlbGVjdGVkIFJBTQorLy8gYXJlYXMgYXJlIHNlcXVlbnRpYWwuCisvLyBFTlVNczoKKy8vIFNFTCAgICAgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIHNlbGVjdGVkIHRvIGJlIHdyaXR0ZW4KKy8vIE5PVF9TRUwgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCBzZWxlY3RlZCB0byBiZSB3cml0dGVuCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTRfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNF9OT1RfU0VMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzNdIFJBTV9BUkVBMworLy8KKy8vIFJlcHJlc2VudHMgYW4gYXJlYSBvZiAxMjggYml0cy4KKy8vIFNlbGVjdCB0aGUga2V5IHN0b3JlIFJBTSBhcmVhKHMpIHdoZXJlIHRoZSBrZXkocykgbmVlZHMgdG8gYmUgd3JpdHRlbi4KKy8vCisvLyBXcml0aW5nIHRvIG11bHRpcGxlIFJBTSBsb2NhdGlvbnMgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZSBzZWxlY3RlZCBSQU0KKy8vIGFyZWFzIGFyZSBzZXF1ZW50aWFsLgorLy8gRU5VTXM6CisvLyBTRUwgICAgICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBzZWxlY3RlZCB0byBiZSB3cml0dGVuCisvLyBOT1RfU0VMICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBub3Qgc2VsZWN0ZWQgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEzX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTNfTk9UX1NFTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsyXSBSQU1fQVJFQTIKKy8vCisvLyBSZXByZXNlbnRzIGFuIGFyZWEgb2YgMTI4IGJpdHMuCisvLyBTZWxlY3QgdGhlIGtleSBzdG9yZSBSQU0gYXJlYShzKSB3aGVyZSB0aGUga2V5KHMpIG5lZWRzIHRvIGJlIHdyaXR0ZW4uCisvLworLy8gV3JpdGluZyB0byBtdWx0aXBsZSBSQU0gbG9jYXRpb25zIGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgc2VsZWN0ZWQgUkFNCisvLyBhcmVhcyBhcmUgc2VxdWVudGlhbC4KKy8vIEVOVU1zOgorLy8gU0VMICAgICAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgc2VsZWN0ZWQgdG8gYmUgd3JpdHRlbgorLy8gTk9UX1NFTCAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgbm90IHNlbGVjdGVkIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMl9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEyX05PVF9TRUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gUkFNX0FSRUExCisvLworLy8gUmVwcmVzZW50cyBhbiBhcmVhIG9mIDEyOCBiaXRzLgorLy8gU2VsZWN0IHRoZSBrZXkgc3RvcmUgUkFNIGFyZWEocykgd2hlcmUgdGhlIGtleShzKSBuZWVkcyB0byBiZSB3cml0dGVuLgorLy8KKy8vIFdyaXRpbmcgdG8gbXVsdGlwbGUgUkFNIGxvY2F0aW9ucyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlIHNlbGVjdGVkIFJBTQorLy8gYXJlYXMgYXJlIHNlcXVlbnRpYWwuCisvLyBFTlVNczoKKy8vIFNFTCAgICAgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIHNlbGVjdGVkIHRvIGJlIHdyaXR0ZW4KKy8vIE5PVF9TRUwgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCBzZWxlY3RlZCB0byBiZSB3cml0dGVuCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTFfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMV9OT1RfU0VMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIFJBTV9BUkVBMAorLy8KKy8vIFJlcHJlc2VudHMgYW4gYXJlYSBvZiAxMjggYml0cy4KKy8vIFNlbGVjdCB0aGUga2V5IHN0b3JlIFJBTSBhcmVhKHMpIHdoZXJlIHRoZSBrZXkocykgbmVlZHMgdG8gYmUgd3JpdHRlbi4KKy8vCisvLyBXcml0aW5nIHRvIG11bHRpcGxlIFJBTSBsb2NhdGlvbnMgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZSBzZWxlY3RlZCBSQU0KKy8vIGFyZWFzIGFyZSBzZXF1ZW50aWFsLgorLy8gRU5VTXM6CisvLyBTRUwgICAgICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBzZWxlY3RlZCB0byBiZSB3cml0dGVuCisvLyBOT1RfU0VMICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBub3Qgc2VsZWN0ZWQgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEwX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTBfTk9UX1NFTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0tFWVdSSVRURU5BUkVBCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gUkFNX0FSRUFfV1JJVFRFTjcKKy8vCisvLyBPbiByZWFkIHRoaXMgYml0IHJldHVybnMgdGhlIGtleSBhcmVhIHdyaXR0ZW4gc3RhdHVzLgorLy8KKy8vIFRoaXMgYml0IGNhbiBiZSByZXNldCBieSB3cml0aW5nIGEgMS4KKy8vCisvLyBOb3RlOiBUaGlzIHJlZ2lzdGVyIHdpbGwgYmUgcmVzZXQgb24gYSBzb2Z0IHJlc2V0IGluaXRpYXRlZCBieSB3cml0aW5nIHRvCisvLyBETUFTV1JFU0VULlJFU0VULiBBZnRlciBhIHNvZnQgcmVzZXQsIGFsbCBrZXlzIG11c3QgYmUgcmV3cml0dGVuIHRvIHRoZSBrZXkKKy8vIHN0b3JlIG1lbW9yeS4KKy8vIEVOVU1zOgorLy8gV1JJVFRFTiAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgd3JpdHRlbiB3aXRoIHZhbGlkIGtleQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisvLyBOT1RfV1JJVFRFTiAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBub3Qgd3JpdHRlbiB3aXRoIHZhbGlkIGtleQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU43X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjdfTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVON19TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU43X1dSSVRURU4gICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjdfTk9UX1dSSVRURU4gICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIFJBTV9BUkVBX1dSSVRURU42CisvLworLy8gT24gcmVhZCB0aGlzIGJpdCByZXR1cm5zIHRoZSBrZXkgYXJlYSB3cml0dGVuIHN0YXR1cy4KKy8vCisvLyBUaGlzIGJpdCBjYW4gYmUgcmVzZXQgYnkgd3JpdGluZyBhIDEuCisvLworLy8gTm90ZTogVGhpcyByZWdpc3RlciB3aWxsIGJlIHJlc2V0IG9uIGEgc29mdCByZXNldCBpbml0aWF0ZWQgYnkgd3JpdGluZyB0bworLy8gRE1BU1dSRVNFVC5SRVNFVC4gQWZ0ZXIgYSBzb2Z0IHJlc2V0LCBhbGwga2V5cyBtdXN0IGJlIHJld3JpdHRlbiB0byB0aGUga2V5CisvLyBzdG9yZSBtZW1vcnkuCisvLyBFTlVNczoKKy8vIFdSSVRURU4gICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIHdyaXR0ZW4gd2l0aCB2YWxpZCBrZXkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbgorLy8gTk9UX1dSSVRURU4gICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgbm90IHdyaXR0ZW4gd2l0aCB2YWxpZCBrZXkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbgorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjYgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU42X00gICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONl9XUklUVEVOICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU42X05PVF9XUklUVEVOICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs1XSBSQU1fQVJFQV9XUklUVEVONQorLy8KKy8vIE9uIHJlYWQgdGhpcyBiaXQgcmV0dXJucyB0aGUga2V5IGFyZWEgd3JpdHRlbiBzdGF0dXMuCisvLworLy8gVGhpcyBiaXQgY2FuIGJlIHJlc2V0IGJ5IHdyaXRpbmcgYSAxLgorLy8KKy8vIE5vdGU6IFRoaXMgcmVnaXN0ZXIgd2lsbCBiZSByZXNldCBvbiBhIHNvZnQgcmVzZXQgaW5pdGlhdGVkIGJ5IHdyaXRpbmcgdG8KKy8vIERNQVNXUkVTRVQuUkVTRVQuIEFmdGVyIGEgc29mdCByZXNldCwgYWxsIGtleXMgbXVzdCBiZSByZXdyaXR0ZW4gdG8gdGhlIGtleQorLy8gc3RvcmUgbWVtb3J5LgorLy8gRU5VTXM6CisvLyBXUklUVEVOICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKy8vIE5PVF9XUklUVEVOICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU41ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONV9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU41X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjVfV1JJVFRFTiAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONV9OT1RfV1JJVFRFTiAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNF0gUkFNX0FSRUFfV1JJVFRFTjQKKy8vCisvLyBPbiByZWFkIHRoaXMgYml0IHJldHVybnMgdGhlIGtleSBhcmVhIHdyaXR0ZW4gc3RhdHVzLgorLy8KKy8vIFRoaXMgYml0IGNhbiBiZSByZXNldCBieSB3cml0aW5nIGEgMS4KKy8vCisvLyBOb3RlOiBUaGlzIHJlZ2lzdGVyIHdpbGwgYmUgcmVzZXQgb24gYSBzb2Z0IHJlc2V0IGluaXRpYXRlZCBieSB3cml0aW5nIHRvCisvLyBETUFTV1JFU0VULlJFU0VULiBBZnRlciBhIHNvZnQgcmVzZXQsIGFsbCBrZXlzIG11c3QgYmUgcmV3cml0dGVuIHRvIHRoZSBrZXkKKy8vIHN0b3JlIG1lbW9yeS4KKy8vIEVOVU1zOgorLy8gV1JJVFRFTiAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgd3JpdHRlbiB3aXRoIHZhbGlkIGtleQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisvLyBOT1RfV1JJVFRFTiAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBub3Qgd3JpdHRlbiB3aXRoIHZhbGlkIGtleQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU40X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjRfTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU40X1dSSVRURU4gICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjRfTk9UX1dSSVRURU4gICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzNdIFJBTV9BUkVBX1dSSVRURU4zCisvLworLy8gT24gcmVhZCB0aGlzIGJpdCByZXR1cm5zIHRoZSBrZXkgYXJlYSB3cml0dGVuIHN0YXR1cy4KKy8vCisvLyBUaGlzIGJpdCBjYW4gYmUgcmVzZXQgYnkgd3JpdGluZyBhIDEuCisvLworLy8gTm90ZTogVGhpcyByZWdpc3RlciB3aWxsIGJlIHJlc2V0IG9uIGEgc29mdCByZXNldCBpbml0aWF0ZWQgYnkgd3JpdGluZyB0bworLy8gRE1BU1dSRVNFVC5SRVNFVC4gQWZ0ZXIgYSBzb2Z0IHJlc2V0LCBhbGwga2V5cyBtdXN0IGJlIHJld3JpdHRlbiB0byB0aGUga2V5CisvLyBzdG9yZSBtZW1vcnkuCisvLyBFTlVNczoKKy8vIFdSSVRURU4gICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIHdyaXR0ZW4gd2l0aCB2YWxpZCBrZXkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbgorLy8gTk9UX1dSSVRURU4gICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgbm90IHdyaXR0ZW4gd2l0aCB2YWxpZCBrZXkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbgorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjMgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4zX00gICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOM19XUklUVEVOICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4zX05PVF9XUklUVEVOICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsyXSBSQU1fQVJFQV9XUklUVEVOMgorLy8KKy8vIE9uIHJlYWQgdGhpcyBiaXQgcmV0dXJucyB0aGUga2V5IGFyZWEgd3JpdHRlbiBzdGF0dXMuCisvLworLy8gVGhpcyBiaXQgY2FuIGJlIHJlc2V0IGJ5IHdyaXRpbmcgYSAxLgorLy8KKy8vIE5vdGU6IFRoaXMgcmVnaXN0ZXIgd2lsbCBiZSByZXNldCBvbiBhIHNvZnQgcmVzZXQgaW5pdGlhdGVkIGJ5IHdyaXRpbmcgdG8KKy8vIERNQVNXUkVTRVQuUkVTRVQuIEFmdGVyIGEgc29mdCByZXNldCwgYWxsIGtleXMgbXVzdCBiZSByZXdyaXR0ZW4gdG8gdGhlIGtleQorLy8gc3RvcmUgbWVtb3J5LgorLy8gRU5VTXM6CisvLyBXUklUVEVOICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKy8vIE5PVF9XUklUVEVOICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4yICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMl9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4yX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjJfV1JJVFRFTiAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMl9OT1RfV1JJVFRFTiAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gUkFNX0FSRUFfV1JJVFRFTjEKKy8vCisvLyBPbiByZWFkIHRoaXMgYml0IHJldHVybnMgdGhlIGtleSBhcmVhIHdyaXR0ZW4gc3RhdHVzLgorLy8KKy8vIFRoaXMgYml0IGNhbiBiZSByZXNldCBieSB3cml0aW5nIGEgMS4KKy8vCisvLyBOb3RlOiBUaGlzIHJlZ2lzdGVyIHdpbGwgYmUgcmVzZXQgb24gYSBzb2Z0IHJlc2V0IGluaXRpYXRlZCBieSB3cml0aW5nIHRvCisvLyBETUFTV1JFU0VULlJFU0VULiBBZnRlciBhIHNvZnQgcmVzZXQsIGFsbCBrZXlzIG11c3QgYmUgcmV3cml0dGVuIHRvIHRoZSBrZXkKKy8vIHN0b3JlIG1lbW9yeS4KKy8vIEVOVU1zOgorLy8gV1JJVFRFTiAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgd3JpdHRlbiB3aXRoIHZhbGlkIGtleQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisvLyBOT1RfV1JJVFRFTiAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBub3Qgd3JpdHRlbiB3aXRoIHZhbGlkIGtleQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4xX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjFfTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4xX1dSSVRURU4gICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjFfTk9UX1dSSVRURU4gICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIFJBTV9BUkVBX1dSSVRURU4wCisvLworLy8gT24gcmVhZCB0aGlzIGJpdCByZXR1cm5zIHRoZSBrZXkgYXJlYSB3cml0dGVuIHN0YXR1cy4KKy8vCisvLworLy8gVGhpcyBiaXQgY2FuIGJlIHJlc2V0IGJ5IHdyaXRpbmcgYSAxLgorLy8KKy8vIE5vdGU6IFRoaXMgcmVnaXN0ZXIgd2lsbCBiZSByZXNldCBvbiBhIHNvZnQgcmVzZXQgaW5pdGlhdGVkIGJ5IHdyaXRpbmcgdG8KKy8vIERNQVNXUkVTRVQuUkVTRVQuIEFmdGVyIGEgc29mdCByZXNldCwgYWxsIGtleXMgbXVzdCBiZSByZXdyaXR0ZW4gdG8gdGhlIGtleQorLy8gc3RvcmUgbWVtb3J5LgorLy8gRU5VTXM6CisvLyBXUklUVEVOICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKy8vIE5PVF9XUklUVEVOICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4wICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMF9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjBfV1JJVFRFTiAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMF9OT1RfV1JJVFRFTiAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19LRVlTSVpFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzE6MF0gU0laRQorLy8KKy8vIEtleSBzaXplCisvLworLy8gV2hlbiB3cml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIsIEtFWVdSSVRURU5BUkVBIHdpbGwgYmUgcmVzZXQuCisvLworLy8gTm90ZTogRm9yIHRoZSBDcnlwdG8gcGVyaXBoZXJhbCB0aGlzIGZpZWxkIGlzIGZpeGVkIHRvIDEyOCBiaXRzLiBGb3IKKy8vIHNvZnR3YXJlIGNvbXBhdGliaWxpdHkgS0VZV1JJVFRFTkFSRUEgd2lsbCAgYmUgcmVzZXQgd2hlbiB3cml0aW5nIHRvIHRoaXMKKy8vIHJlZ2lzdGVyLgorLy8gRU5VTXM6CisvLyAyNTZfQklUICAgICAgICAgICAgICAgICAgTm90IHN1cHBvcnRlZAorLy8gMTkyX0JJVCAgICAgICAgICAgICAgICAgIE5vdCBzdXBwb3J0ZWQKKy8vIDEyOF9CSVQgICAgICAgICAgICAgICAgICAxMjggYml0cworI2RlZmluZSBDUllQVE9fS0VZU0laRV9TSVpFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENSWVBUT19LRVlTSVpFX1NJWkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQ1JZUFRPX0tFWVNJWkVfU0laRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fS0VZU0laRV9TSVpFXzI1Nl9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIENSWVBUT19LRVlTSVpFX1NJWkVfMTkyX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0tFWVNJWkVfU0laRV8xMjhfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0tFWVJFQURBUkVBCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gQlVTWQorLy8KKy8vIEtleSBzdG9yZSBvcGVyYXRpb24gYnVzeSBzdGF0dXMgZmxhZyAocmVhZCBvbmx5KQorLy8KKy8vIDA6IG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuCisvLyAxOiBvcGVyYXRpb24gaXMgbm90IGNvbXBsZXRlZCBhbmQgdGhlIGtleSBzdG9yZSBpcyBidXN5LgorI2RlZmluZSBDUllQVE9fS0VZUkVBREFSRUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENSWVBUT19LRVlSRUFEQVJFQV9CVVNZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1JZUFRPX0tFWVJFQURBUkVBX0JVU1lfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUllQVE9fS0VZUkVBREFSRUFfQlVTWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgIFszOjBdIFJBTV9BUkVBCisvLworLy8gU2VsZWN0cyB0aGUgYXJlYSBvZiB0aGUga2V5IHN0b3JlIFJBTSBmcm9tIHdoZXJlIHRoZSBrZXkgbmVlZHMgdG8gYmUgcmVhZAorLy8gdGhhdCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIEFFUyBlbmdpbmUuCisvLworLy8gT25seSBSQU0gYXJlYXMgdGhhdCBjb250YWluIHZhbGlkIHdyaXR0ZW4ga2V5cyBjYW4gYmUgc2VsZWN0ZWQuCisvLyBFTlVNczoKKy8vIE5PX1JBTSAgICAgICAgICAgICAgICAgICBObyBSQU0KKy8vIFJBTV9BUkVBNyAgICAgICAgICAgICAgICBSQU0gQXJlYSA3CisvLyBSQU1fQVJFQTYgICAgICAgICAgICAgICAgUkFNIEFyZWEgNgorLy8gUkFNX0FSRUE1ICAgICAgICAgICAgICAgIFJBTSBBcmVhIDUKKy8vIFJBTV9BUkVBNCAgICAgICAgICAgICAgICBSQU0gQXJlYSA0CisvLyBSQU1fQVJFQTMgICAgICAgICAgICAgICAgUkFNIEFyZWEgMworLy8gUkFNX0FSRUEyICAgICAgICAgICAgICAgIFJBTSBBcmVhIDIKKy8vIFJBTV9BUkVBMSAgICAgICAgICAgICAgICBSQU0gQXJlYSAxCisvLyBSQU1fQVJFQTAgICAgICAgICAgICAgICAgUkFNIEFyZWEgMAorI2RlZmluZSBDUllQVE9fS0VZUkVBREFSRUFfUkFNX0FSRUFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENSWVBUT19LRVlSRUFEQVJFQV9SQU1fQVJFQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQ1JZUFRPX0tFWVJFQURBUkVBX1JBTV9BUkVBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fS0VZUkVBREFSRUFfUkFNX0FSRUFfTk9fUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENSWVBUT19LRVlSRUFEQVJFQV9SQU1fQVJFQV9SQU1fQVJFQTcgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQ1JZUFRPX0tFWVJFQURBUkVBX1JBTV9BUkVBX1JBTV9BUkVBNiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBDUllQVE9fS0VZUkVBREFSRUFfUkFNX0FSRUFfUkFNX0FSRUE1ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIENSWVBUT19LRVlSRUFEQVJFQV9SQU1fQVJFQV9SQU1fQVJFQTQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1JZUFRPX0tFWVJFQURBUkVBX1JBTV9BUkVBX1JBTV9BUkVBMyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBDUllQVE9fS0VZUkVBREFSRUFfUkFNX0FSRUFfUkFNX0FSRUEyICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19LRVlSRUFEQVJFQV9SQU1fQVJFQV9SQU1fQVJFQTEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0tFWVJFQURBUkVBX1JBTV9BUkVBX1JBTV9BUkVBMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0tFWTIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gS0VZMgorLy8KKy8vIEFFU0tFWTIuKiBiaXRzIDMxK3g6MCt4IG9yIEFFU19HSEFTSF9ILiogYml0cyAzMSt4OjAreCwgd2hlcmUgeCA9IDAsIDMyLCA2NCwKKy8vIDk2IG9yZGVyZWQgZnJvbSB0aGUgTFNXIGVudHJ5IG9mIHRoaXMgNC1kZWVwIHJlZ2lzdGVyIGFycmF5LgorLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTS0VZMjBfS0VZMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNLRVkyMF9LRVkyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTIwX0tFWTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0tFWTIxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gS0VZMgorLy8KKy8vIEFFU0tFWTIuKiBiaXRzIDMxK3g6MCt4IG9yIEFFU19HSEFTSF9ILiogYml0cyAzMSt4OjAreCwgd2hlcmUgeCA9IDAsIDMyLCA2NCwKKy8vIDk2IG9yZGVyZWQgZnJvbSB0aGUgTFNXIGVudHJ5IG9mIHRoaXMgNC1kZWVwIHJlZ2lzdGVyIGFycmF5LgorLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTS0VZMjFfS0VZMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNLRVkyMV9LRVkyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTIxX0tFWTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0tFWTIyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gS0VZMgorLy8KKy8vIEFFU0tFWTIuKiBiaXRzIDMxK3g6MCt4IG9yIEFFU19HSEFTSF9ILiogYml0cyAzMSt4OjAreCwgd2hlcmUgeCA9IDAsIDMyLCA2NCwKKy8vIDk2IG9yZGVyZWQgZnJvbSB0aGUgTFNXIGVudHJ5IG9mIHRoaXMgNC1kZWVwIHJlZ2lzdGVyIGFycmF5LgorLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTS0VZMjJfS0VZMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNLRVkyMl9LRVkyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTIyX0tFWTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0tFWTIzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gS0VZMgorLy8KKy8vIEFFU0tFWTIuKiBiaXRzIDMxK3g6MCt4IG9yIEFFU19HSEFTSF9ILiogYml0cyAzMSt4OjAreCwgd2hlcmUgeCA9IDAsIDMyLCA2NCwKKy8vIDk2IG9yZGVyZWQgZnJvbSB0aGUgTFNXIGVudHJ5IG9mIHRoaXMgNC1kZWVwIHJlZ2lzdGVyIGFycmF5LgorLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTS0VZMjNfS0VZMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNLRVkyM19LRVkyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTIzX0tFWTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0tFWTMwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gS0VZMworLy8KKy8vIEFFU0tFWTMuKiBiaXRzIDMxK3g6MCt4IG9yIEFFU0tFWTIuKiBiaXRzIDE1OSt4OjEyOCt4LCB3aGVyZSB4ID0gMCwgMzIsIDY0LAorLy8gOTYgb3JkZXJlZCBmcm9tIHRoZSBMU1cgZW50cnkgb2YgdGhpcyA0LWRlZXAgcmVnaXN0ZXIgYXJyYXJ5LgorLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTS0VZMzBfS0VZM19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNLRVkzMF9LRVkzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTMwX0tFWTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0tFWTMxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gS0VZMworLy8KKy8vIEFFU0tFWTMuKiBiaXRzIDMxK3g6MCt4IG9yIEFFU0tFWTIuKiBiaXRzIDE1OSt4OjEyOCt4LCB3aGVyZSB4ID0gMCwgMzIsIDY0LAorLy8gOTYgb3JkZXJlZCBmcm9tIHRoZSBMU1cgZW50cnkgb2YgdGhpcyA0LWRlZXAgcmVnaXN0ZXIgYXJyYXJ5LgorLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTS0VZMzFfS0VZM19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNLRVkzMV9LRVkzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTMxX0tFWTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0tFWTMyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gS0VZMworLy8KKy8vIEFFU0tFWTMuKiBiaXRzIDMxK3g6MCt4IG9yIEFFU0tFWTIuKiBiaXRzIDE1OSt4OjEyOCt4LCB3aGVyZSB4ID0gMCwgMzIsIDY0LAorLy8gOTYgb3JkZXJlZCBmcm9tIHRoZSBMU1cgZW50cnkgb2YgdGhpcyA0LWRlZXAgcmVnaXN0ZXIgYXJyYXJ5LgorLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTS0VZMzJfS0VZM19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNLRVkzMl9LRVkzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTMyX0tFWTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0tFWTMzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gS0VZMworLy8KKy8vIEFFU0tFWTMuKiBiaXRzIDMxK3g6MCt4IG9yIEFFU0tFWTIuKiBiaXRzIDE1OSt4OjEyOCt4LCB3aGVyZSB4ID0gMCwgMzIsIDY0LAorLy8gOTYgb3JkZXJlZCBmcm9tIHRoZSBMU1cgZW50cnkgb2YgdGhpcyA0LWRlZXAgcmVnaXN0ZXIgYXJyYXJ5LgorLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTS0VZMzNfS0VZM19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNLRVkzM19LRVkzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTMzX0tFWTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0lWMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIElWCisvLworLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTSVYwX0lWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNJVjBfSVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0lWMF9JVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0lWMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIElWCisvLworLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTSVYxX0lWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNJVjFfSVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0lWMV9JVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0lWMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIElWCisvLworLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTSVYyX0lWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNJVjJfSVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0lWMl9JVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0lWMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIElWCisvLworLy8gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvIG9wZXJhdGlvbiBtb2RlLgorI2RlZmluZSBDUllQVE9fQUVTSVYzX0lWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNJVjNfSVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0lWM19JVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIENPTlRFWFRfUkRZCisvLworLy8gSWYgMSwgdGhpcyBzdGF0dXMgYml0IGluZGljYXRlcyB0aGF0IHRoZSBjb250ZXh0IGRhdGEgcmVnaXN0ZXJzIGNhbiBiZQorLy8gb3ZlcndyaXR0ZW4gYW5kIHRoZSBIb3N0IGlzIHBlcm1pdHRlZCB0byB3cml0ZSB0aGUgbmV4dCBjb250ZXh0LiAgV3JpdGluZyBhCisvLyBjb250ZXh0IG1lYW5zIHdyaXRpbmcgZWl0aGVyIGEgbW9kZSwgdGhlIGNyeXB0byBsZW5ndGggb3IKKy8vIEFFU0RBVEFMRU4xLkxFTl9NU1csIEFFU0RBVEFMRU4wLkxFTl9MU1cgbGVuZ3RoIHJlZ2lzdGVycworI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NPTlRFWFRfUkRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ09OVEVYVF9SRFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DT05URVhUX1JEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NPTlRFWFRfUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIFNBVkVEX0NPTlRFWFRfUkRZCisvLworLy8gSWYgcmVhZCBhcyAxLCB0aGlzIHN0YXR1cyBiaXQgaW5kaWNhdGVzIHRoYXQgYW4gQUVTIGF1dGhlbnRpY2F0aW9uIFRBRworLy8gYW5kL29yIElWIGJsb2NrKHMpIGlzL2FyZSBhdmFpbGFibGUgZm9yIHRoZSBIb3N0IHRvIHJldHJpZXZlLiBUaGlzIGJpdCBpcworLy8gb25seSBhc3NlcnRlZCBpZiBTQVZFX0NPTlRFWFQgaXMgc2V0IHRvIDEuIFRoZSBiaXQgaXMgbXV0dWFsbHkgZXhjbHVzaXZlCisvLyB3aXRoIENPTlRFWFRfUkRZLgorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgdGhlIGJpdCB0byB6ZXJvLCBpbmRpY2F0aW5nIHRoZSBDcnlwdG8gcGVyaXBoZXJhbCBjYW4gc3RhcnQKKy8vIGl0cyBuZXh0IG9wZXJhdGlvbi4gVGhpcyBiaXQgaXMgYWxzbyBjbGVhcmVkIHdoZW4gdGhlIDR0aCB3b3JkIG9mIHRoZSBvdXRwdXQKKy8vIFRBRyBhbmQvb3IgSVYgaXMgcmVhZC4KKy8vCisvLyBOb3RlOiBBbGwgb3RoZXIgbW9kZSBiaXQgd3JpdGVzIHdpbGwgYmUgaWdub3JlZCB3aGVuIHRoaXMgbW9kZSBiaXQgaXMKKy8vIHdyaXR0ZW4gd2l0aCAxLgorLy8KKy8vIE5vdGU6IFRoaXMgYml0IGlzIGNvbnRyb2xsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwgZm9yIFRBRworLy8gcmVhZCBETUEgb3BlcmF0aW9ucy4KKy8vCisvLyBGb3IgdHlwaWNhbCB1c2UsIHRoaXMgYml0IGRvZXMgTk9UIG5lZWQgdG8gYmUgd3JpdHRlbiwgYnV0IGlzIHVzZWQgZm9yCisvLyBzdGF0dXMgcmVhZGluZyBvbmx5LiBJbiB0aGlzIGNhc2UsIHRoaXMgc3RhdHVzIGJpdCBpcyBhdXRvbWF0aWNhbGx5CisvLyBtYWludGFpbmVkIGJ5IHRoZSBDcnlwdG8gcGVyaXBoZXJhbC4KKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9TQVZFRF9DT05URVhUX1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX1NBVkVEX0NPTlRFWFRfUkRZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIENSWVBUT19BRVNDVExfU0FWRURfQ09OVEVYVF9SRFlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9TQVZFRF9DT05URVhUX1JEWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBTQVZFX0NPTlRFWFQKKy8vCisvLyBJViBtdXN0IGJlIHJlYWQgYmVmb3JlIHRoZSBBRVMgZW5naW5lIGNhbiBzdGFydCBhIG5ldyBvcGVyYXRpb24uCisjZGVmaW5lIENSWVBUT19BRVNDVExfU0FWRV9DT05URVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9TQVZFX0NPTlRFWFRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDUllQVE9fQUVTQ1RMX1NBVkVfQ09OVEVYVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENSWVBUT19BRVNDVExfU0FWRV9DT05URVhUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyNDoyMl0gQ0NNX00KKy8vCisvLyBEZWZpbmVzIE0gdGhhdCBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgYXV0aGVudGljYXRpb24gZmllbGQgZm9yIENDTQorLy8gb3BlcmF0aW9uczsgdGhlIGF1dGhlbnRpY2F0aW9uIGZpZWxkIGxlbmd0aCBlcXVhbHMgdHdvIHRpbWVzIHRoZSB2YWx1ZSBvZgorLy8gQ0NNX00gcGx1cyBvbmUuCisvLyBOb3RlOiBUaGUgQ3J5cHRvIHBlcmlwaGVyYWwgYWx3YXlzIHJldHVybnMgYSAxMjgtYml0IGF1dGhlbnRpY2F0aW9uIGZpZWxkLAorLy8gb2Ygd2hpY2ggdGhlIE0gbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZXMgYXJlIHZhbGlkLiBBbGwgdmFsdWVzIGFyZSBzdXBwb3J0ZWQuCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0NNX01fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DQ01fTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUMwMDAwMAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NDTV9NX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiBbMjE6MTldIENDTV9MCisvLworLy8gRGVmaW5lcyBMIHRoYXQgaW5kaWNhdGVzIHRoZSB3aWR0aCBvZiB0aGUgbGVuZ3RoIGZpZWxkIGZvciBDQ00gb3BlcmF0aW9uczsKKy8vIHRoZSBsZW5ndGggZmllbGQgaW4gYnl0ZXMgZXF1YWxzIHRoZSB2YWx1ZSBvZiBDTU1fTCBwbHVzIG9uZS4gQWxsIHZhbHVlcyBhcmUKKy8vIHN1cHBvcnRlZC4KKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DQ01fTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NDTV9MX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzgwMDAwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0NNX0xfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gQ0NNCisvLworLy8gQUVTLUNDTSBtb2RlIGVuYWJsZS4KKy8vIEFFUy1DQ00gaXMgYSBjb21iaW5lZCBtb2RlLCB1c2luZyBBRVMgZm9yIGJvdGggYXV0aGVudGljYXRpb24gYW5kCisvLyBlbmNyeXB0aW9uLgorLy8gTm90ZTogU2VsZWN0aW5nIEFFUy1DQ00gbW9kZSByZXF1aXJlcyB3cml0aW5nIG9mIEFFU0RBVEFMRU4xLkxFTl9NU1cgYW5kCisvLyBBRVNEQVRBTEVOMC5MRU5fTFNXICBhZnRlciBhbGwgb3RoZXIgcmVnaXN0ZXJzLgorLy8gTm90ZTogVGhlIENUUiBtb2RlIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIG11c3QgYWxzbyBiZSBzZXQgdG8gMSB0byBlbmFibGUKKy8vIEFFUy1DVFI7IHNlbGVjdGluZyBvdGhlciBBRVMgbW9kZXMgdGhhbiBDVFIgbW9kZSBpcyBpbnZhbGlkLgorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NDTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0NNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DQ01fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NDTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTVdIENCQ19NQUMKKy8vCisvLyBNQUMgbW9kZSBlbmFibGUuCisvLyBUaGUgRElSIGJpdCBtdXN0IGJlIHNldCB0byAxIGZvciB0aGlzIG1vZGUuCisvLyBTZWxlY3RpbmcgdGhpcyBtb2RlIHJlcXVpcmVzIHdyaXRpbmcgdGhlIEFFU0RBVEFMRU4xLkxFTl9NU1cgYW5kCisvLyBBRVNEQVRBTEVOMC5MRU5fTFNXIHJlZ2lzdGVycyBhZnRlciBhbGwgb3RoZXIgcmVnaXN0ZXJzLgorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NCQ19NQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0JDX01BQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DQkNfTUFDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NCQ19NQUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgIFs4OjddIENUUl9XSURUSAorLy8KKy8vIFNwZWNpZmllcyB0aGUgY291bnRlciB3aWR0aCBmb3IgQUVTLUNUUiBtb2RlCisvLyBFTlVNczoKKy8vIDEyOF9CSVQgICAgICAgICAgICAgICAgICAxMjggYml0cworLy8gOTZfQklUICAgICAgICAgICAgICAgICAgIDk2IGJpdHMKKy8vIDY0X0JJVCAgICAgICAgICAgICAgICAgICA2NCBiaXRzCisvLyAzMl9CSVQgICAgICAgICAgICAgICAgICAgMzIgYml0cworI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NUUl9XSURUSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ1RSX1dJRFRIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxODAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DVFJfV0lEVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NUUl9XSURUSF8xMjhfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTgwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ1RSX1dJRFRIXzk2X0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DVFJfV0lEVEhfNjRfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NUUl9XSURUSF8zMl9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIENUUgorLy8KKy8vIEFFUy1DVFIgbW9kZSBlbmFibGUKKy8vIFRoaXMgYml0IG11c3QgYWxzbyBiZSBzZXQgZm9yIENDTSwgd2hlbiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gaXMgcmVxdWlyZWQuCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ1RSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DVFJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gQ0JDCisvLworLy8gQ0JDIG1vZGUgZW5hYmxlCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DQkNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NCQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzQ6M10gS0VZX1NJWkUKKy8vCisvLyBUaGlzIGZpZWxkIHNwZWNpZmllcyB0aGUga2V5IHNpemUuCisvLyBUaGUga2V5IHNpemUgaXMgYXV0b21hdGljYWxseSBjb25maWd1cmVkIHdoZW4gYSBuZXcga2V5IGlzIGxvYWRlZCB2aWEgdGhlCisvLyBrZXkgc3RvcmUgbW9kdWxlLgorLy8gMDAgPSBOL0EgLSByZXNlcnZlZAorLy8gMDEgPSAxMjggYml0cworLy8gMTAgPSBOL0EgLSByZXNlcnZlZAorLy8gMTEgPSBOL0EgLSByZXNlcnZlZAorLy8gRm9yIHRoZSBDcnlwdG8gcGVyaXBoZXJhbCB0aGlzIGZpZWxkIGlzIGZpeGVkIHRvIDEyOCBiaXRzLgorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0tFWV9TSVpFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENSWVBUT19BRVNDVExfS0VZX1NJWkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9LRVlfU0laRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBESVIKKy8vCisvLyBEaXJlY3Rpb24uCisvLyAwIDogRGVjcnlwdCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkLgorLy8gMSA6IEVuY3J5cHQgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4KKy8vCisvLyBUaGlzIGJpdCBtdXN0IGJlIHdyaXR0ZW4gd2l0aCBhIDEgd2hlbiBDQkMtTUFDIGlzIHNlbGVjdGVkLgorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENSWVBUT19BRVNDVExfRElSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9ESVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0RJUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIElOUFVUX1JEWQorLy8KKy8vIElmIHJlYWQgYXMgMSwgdGhpcyBzdGF0dXMgYml0IGluZGljYXRlcyB0aGF0IHRoZSAxNi1ieXRlIEFFUyBpbnB1dCBidWZmZXIgaXMKKy8vIGVtcHR5LiBUaGUgSG9zdCBpcyBwZXJtaXR0ZWQgdG8gd3JpdGUgdGhlIG5leHQgYmxvY2sgb2YgZGF0YS4KKy8vCisvLyBXcml0aW5nIGEgMCBjbGVhcnMgdGhlIGJpdCB0byB6ZXJvIGFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUgQUVTIGVuZ2luZSBjYW4gdXNlCisvLyB0aGUgcHJvdmlkZWQgaW5wdXQgZGF0YSBibG9jay4KKy8vCisvLyBXcml0aW5nIGEgMSB0byB0aGlzIGJpdCB3aWxsIGJlIGlnbm9yZWQuCisvLworLy8gTm90ZTogRm9yIERNQSBvcGVyYXRpb25zLCB0aGlzIGJpdCBpcyBhdXRvbWF0aWNhbGx5IGNvbnRyb2xsZWQgYnkgdGhlIENyeXB0bworLy8gcGVyaXBoZXJhbC4KKy8vIEFmdGVyIHJlc2V0LCB0aGlzIGJpdCBpcyAwLiBBZnRlciB3cml0aW5nIGEgY29udGV4dCAobm90ZSAxKSwgdGhpcyBiaXQgd2lsbAorLy8gYmVjb21lIDEuCisvLworLy8gRm9yIHR5cGljYWwgdXNlLCB0aGlzIGJpdCBkb2VzIE5PVCBuZWVkIHRvIGJlIHdyaXR0ZW4sIGJ1dCBpcyB1c2VkIGZvcgorLy8gc3RhdHVzIHJlYWRpbmcgb25seS4gSW4gdGhpcyBjYXNlLCB0aGlzIHN0YXR1cyBiaXQgaXMgYXV0b21hdGljYWxseQorLy8gbWFpbnRhaW5lZCBieSB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwuCisjZGVmaW5lIENSWVBUT19BRVNDVExfSU5QVVRfUkRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9JTlBVVF9SRFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0lOUFVUX1JEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19BRVNDVExfSU5QVVRfUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gT1VUUFVUX1JEWQorLy8KKy8vIElmIHJlYWQgYXMgMSwgdGhpcyBzdGF0dXMgYml0IGluZGljYXRlcyB0aGF0IGFuIEFFUyBvdXRwdXQgYmxvY2sgaXMKKy8vIGF2YWlsYWJsZSB0byBiZSByZXRyaWV2ZWQgYnkgdGhlIEhvc3QuCisvLworLy8gV3JpdGluZyBhIDAgY2xlYXJzIHRoZSBiaXQgdG8gemVybyBhbmQgaW5kaWNhdGVzIHRoYXQgb3V0cHV0IGRhdGEgaXMgcmVhZCBieQorLy8gdGhlIEhvc3QuIFRoZSBBRVMgZW5naW5lIGNhbiBwcm92aWRlIGEgbmV4dCBvdXRwdXQgZGF0YSBibG9jay4KKy8vCisvLyBXcml0aW5nIGEgMSB0byB0aGlzIGJpdCB3aWxsIGJlIGlnbm9yZWQuCisvLworLy8gTm90ZTogRm9yIERNQSBvcGVyYXRpb25zLCB0aGlzIGJpdCBpcyBhdXRvbWF0aWNhbGx5IGNvbnRyb2xsZWQgYnkgdGhlIENyeXB0bworLy8gcGVyaXBoZXJhbC4KKy8vCisvLyBGb3IgdHlwaWNhbCB1c2UsIHRoaXMgYml0IGRvZXMgTk9UIG5lZWQgdG8gYmUgd3JpdHRlbiwgYnV0IGlzIHVzZWQgZm9yCisvLyBzdGF0dXMgcmVhZGluZyBvbmx5LiBJbiB0aGlzIGNhc2UsIHRoaXMgc3RhdHVzIGJpdCBpcyBhdXRvbWF0aWNhbGx5CisvLyBtYWludGFpbmVkIGJ5IHRoZSBDcnlwdG8gcGVyaXBoZXJhbC4KKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9PVVRQVVRfUkRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fQUVTQ1RMX09VVFBVVF9SRFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19BRVNDVExfT1VUUFVUX1JEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9PVVRQVVRfUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0RBVEFMRU4wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gTEVOX0xTVworLy8KKy8vIFVzZWQgdG8gd3JpdGUgdGhlIExlbmd0aCB2YWx1ZXMgdG8gdGhlIENyeXB0byBwZXJpcGhlcmFsLgorLy8KKy8vIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgYml0cyBbMzE6MF0gb2YgdGhlIGNvbWJpbmVkIGRhdGEgbGVuZ3RoLgorI2RlZmluZSBDUllQVE9fQUVTREFUQUxFTjBfTEVOX0xTV19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNEQVRBTEVOMF9MRU5fTFNXX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFMRU4wX0xFTl9MU1dfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0RBVEFMRU4xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMjg6MF0gTEVOX01TVworLy8KKy8vIEJpdHMgWzYwOjMyXSBvZiB0aGUgY29tYmluZWQgZGF0YSBsZW5ndGguCisvLworLy8gQml0cyBbNjA6MF0gb2YgdGhlIGNyeXB0byBsZW5ndGggcmVnaXN0ZXJzIEFFU0RBVEFMRU4xIGFuZCBBRVNEQVRBTEVOMCBzdG9yZQorLy8gdGhlIGNyeXB0b2dyYXBoaWMgZGF0YSBsZW5ndGggaW4gYnl0ZXMgZm9yIGFsbCBtb2Rlcy4gT25jZSBwcm9jZXNzaW5nIHdpdGgKKy8vIHRoaXMgY29udGV4dCBpcyBzdGFydGVkLCB0aGlzIGxlbmd0aCBkZWNyZW1lbnRzIHRvIHplcm8uIERhdGEgbGVuZ3RocyB1cCB0bworLy8gKDJeNjEgLSAxKSBieXRlcyBhcmUgYWxsb3dlZC4KKy8vIEZvciBHQ00sIGFueSB2YWx1ZSB1cCB0byAyXjM2IC0gMzIgYnl0ZXMgY2FuIGJlIHVzZWQuIFRoaXMgaXMgYmVjYXVzZSBhCisvLyAzMi1iaXQgY291bnRlciBtb2RlIGlzIHVzZWQ7IHRoZSBtYXhpbXVtIG51bWJlciBvZiAxMjgtYml0IGJsb2NrcyBpcyAyXjMyIC0KKy8vIDIsIHJlc3VsdGluZyBpbiBhIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9mIDJeMzYgLSAzMi4KKy8vIFdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciB0cmlnZ2VycyB0aGUgZW5naW5lIHRvIHN0YXJ0IHVzaW5nIHRoaXMgY29udGV4dC4KKy8vIFRoaXMgaXMgdmFsaWQgZm9yIGFsbCBtb2RlcyBleGNlcHQgR0NNIGFuZCBDQ00uCisvLyBOb3RlOiBGb3IgdGhlIGNvbWJpbmVkIG1vZGVzIChHQ00gYW5kIENDTSksIHRoaXMgbGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUgdGhlCisvLyBhdXRoZW50aWNhdGlvbiBvbmx5IGRhdGE7IHRoZSBhdXRoZW50aWNhdGlvbiBsZW5ndGggaXMgc3BlY2lmaWVkIGluIHRoZQorLy8gQUVTQVVUSExFTi5MRU4uCisvLyBBbGwgbW9kZXMgbXVzdCBoYXZlIGEgbGVuZ3RoID4gMC4gRm9yIHRoZSBjb21iaW5lZCBtb2RlcywgaXQgaXMgYWxsb3dlZCB0bworLy8gaGF2ZSBvbmUgb2YgdGhlIGxlbmd0aHMgZXF1YWwgdG8gemVyby4KKy8vIEZvciB0aGUgYmFzaWMgZW5jcnlwdGlvbiBtb2RlcyAoRUNCL0NCQy9DVFIpIGl0IGlzIGFsbG93ZWQgdG8gcHJvZ3JhbSB6ZXJvCisvLyB0byB0aGUgbGVuZ3RoIGZpZWxkOyBpbiB0aGF0IGNhc2UgdGhlIGxlbmd0aCBpcyBhc3N1bWVkIGluZmluaXRlLgorLy8gQWxsIGRhdGEgbXVzdCBiZSBieXRlICg4LWJpdCkgYWxpZ25lZCBmb3Igc3RyZWFtIGNpcGhlciBtb2RlczsgYml0IGFsaWduZWQKKy8vIGRhdGEgc3RyZWFtcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwuIEZvciBibG9jayBjaXBoZXIKKy8vIG1vZGVzLCB0aGUgZGF0YSBsZW5ndGggbXVzdCBiZSBwcm9ncmFtbWVkIGluIG11bHRpcGxlcyBvZiB0aGUgYmxvY2sgY2lwaGVyCisvLyBzaXplLCAxNiBieXRlcy4KKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFMRU4xX0xFTl9NU1dfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDUllQVE9fQUVTREFUQUxFTjFfTEVOX01TV19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFGRkZGRkZGCisjZGVmaW5lIENSWVBUT19BRVNEQVRBTEVOMV9MRU5fTVNXX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19BRVNBVVRITEVOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gTEVOCisvLworLy8gQXV0aGVudGljYXRpb24gZGF0YSBsZW5ndGggaW4gYnl0ZXMgZm9yIGNvbWJpbmVkIG1vZGUsIENDTSBvbmx5LgorLy8gU3VwcG9ydGVkIEFBRC1sZW5ndGhzIGZvciBDQ00gYXJlIGZyb20gMCB0byAoMjE2IC0gMjgpIGJ5dGVzLiBPbmNlCisvLyBwcm9jZXNzaW5nIHdpdGggdGhpcyBjb250ZXh0IGlzIHN0YXJ0ZWQsIHRoaXMgbGVuZ3RoIGRlY3JlbWVudHMgdG8gemVyby4KKy8vIFdyaXRpbmcgdGhpcyByZWdpc3RlciB0cmlnZ2VycyB0aGUgZW5naW5lIHRvIHN0YXJ0IHVzaW5nIHRoaXMgY29udGV4dCBmb3IKKy8vIENDTS4KKyNkZWZpbmUgQ1JZUFRPX0FFU0FVVEhMRU5fTEVOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUllQVE9fQUVTQVVUSExFTl9MRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENSWVBUT19BRVNBVVRITEVOX0xFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19BRVNEQVRBT1VUMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIERBVEEKKy8vCisvLyBEYXRhIHJlZ2lzdGVyIDAgZm9yIG91dHB1dCBibG9jayBkYXRhIGZyb20gdGhlIENyeXB0byBwZXJpcGhlcmFsLgorLy8gVGhlc2UgYml0cyA9IEFFUyBPdXRwdXQgRGF0YVszMTowXSBvZiB7MTI3OjBdCisvLworLy8gRm9yIG5vcm1hbCBvcGVyYXRpb25zLCB0aGlzIHJlZ2lzdGVyIGlzIG5vdCB1c2VkLCBzaW5jZSBkYXRhIGlucHV0IGFuZAorLy8gb3V0cHV0IGlzIHRyYW5zZmVycmVkIGZyb20gYW5kIHRvIHRoZSBBRVMgZW5naW5lIHZpYSBETUEuCisvLworLy8gRm9yIGEgSG9zdCByZWFkIG9wZXJhdGlvbiwgdGhlc2UgcmVnaXN0ZXJzIGNvbnRhaW4gdGhlIDEyOC1iaXQgb3V0cHV0IGJsb2NrCisvLyBmcm9tIHRoZSBsYXRlc3QgQUVTIG9wZXJhdGlvbi4gUmVhZGluZyBmcm9tIGEgd29yZC1hbGlnbmVkIG9mZnNldCB3aXRoaW4KKy8vIHRoaXMgYWRkcmVzcyByYW5nZSB3aWxsIHJlYWQgb25lIHdvcmQgKDQgYnl0ZXMpIG9mIGRhdGEgb3V0IHRoZSA0LXdvcmQgZGVlcAorLy8gKDE2IGJ5dGVzID0gMTI4LWJpdHMgQUVTIGJsb2NrKSBkYXRhIG91dHB1dCBidWZmZXIuIFRoZSB3b3JkcyAoNCB3b3Jkcywgb25lCisvLyBmdWxsIGJsb2NrKSBzaG91bGQgYmUgcmVhZCBiZWZvcmUgdGhlIGNvcmUgd2lsbCBtb3ZlIHRoZSBuZXh0IGJsb2NrIHRvIHRoZQorLy8gZGF0YSBvdXRwdXQgYnVmZmVyLiBUbyBlbXB0eSB0aGUgZGF0YSBvdXRwdXQgYnVmZmVyLCBBRVNDVEwuT1VUUFVUX1JEWSBtdXN0CisvLyBiZSB3cml0dGVuLgorLy8gRm9yIHRoZSBtb2RlcyB3aXRoIGF1dGhlbnRpY2F0aW9uIChDQkMtTUFDLCBHQ00gYW5kIENDTSksIHRoZSBpbnZhbGlkCisvLyAobWVzc2FnZSkgYnl0ZXMvd29yZHMgY2FuIGJlIHdyaXR0ZW4gd2l0aCBhbnkgZGF0YS4KKy8vCisvLyBOb3RlOiBUaGUgQUFEIC8gYXV0aGVudGljYXRpb24gb25seSBkYXRhIGlzIG5vdCBjb3BpZWQgdG8gdGhlIG91dHB1dCBidWZmZXIKKy8vIGJ1dCBvbmx5IHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLgorI2RlZmluZSBDUllQVE9fQUVTREFUQU9VVDBfREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNEQVRBT1VUMF9EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFPVVQwX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0RBVEFJTjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBEQVRBCisvLworLy8gRGF0YSByZWdpc3RlcnMgZm9yIGlucHV0IGJsb2NrIGRhdGEgdG8gdGhlIENyeXB0byBwZXJpcGhlcmFsLgorLy8gVGhlc2UgYml0cyA9IEFFUyBJbnB1dCBEYXRhWzMxOjBdICBvZiBbMTI3OjBdCisvLworLy8gRm9yIG5vcm1hbCBvcGVyYXRpb25zLCB0aGlzIHJlZ2lzdGVyIGlzIG5vdCB1c2VkLCBzaW5jZSBkYXRhIGlucHV0IGFuZAorLy8gb3V0cHV0IGlzIHRyYW5zZmVycmVkIGZyb20gYW5kIHRvIHRoZSBBRVMgZW5naW5lIHZpYSBETUEuCisvLworLy8gRm9yIGEgSG9zdCB3cml0ZSBvcGVyYXRpb24sIHRoZXNlIHJlZ2lzdGVycyBtdXN0IGJlIHdyaXR0ZW4gd2l0aCB0aGUgMTI4LWJpdAorLy8gaW5wdXQgYmxvY2sgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uIFdyaXRpbmcgYXQgYSB3b3JkLWFsaWduZWQgb2Zmc2V0CisvLyB3aXRoaW4gdGhpcyBhZGRyZXNzIHJhbmdlIHdpbGwgc3RvcmUgdGhlIHdvcmQgKDQgYnl0ZXMpIG9mIGRhdGEgaW50byB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcG9zaXRpb24gb2YgNC13b3JkIGRlZXAgKDE2IGJ5dGVzID0gMTI4LWJpdCBBRVMgYmxvY2spIGRhdGEKKy8vIGlucHV0IGJ1ZmZlci4gVGhpcyBidWZmZXIgaXMgdXNlZCBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4gSWYgdGhlIGxhc3QKKy8vIGRhdGEgYmxvY2sgaXMgbm90IGNvbXBsZXRlbHkgZmlsbGVkIHdpdGggdmFsaWQgZGF0YSAoc2VlIG5vdGVzIGJlbG93KSwgaXQgaXMKKy8vIGFsbG93ZWQgdG8gd3JpdGUgb25seSB0aGUgd29yZHMgd2l0aCB2YWxpZCBkYXRhLiBOZXh0IEFFUyBvcGVyYXRpb24gaXMKKy8vIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIEFFU0NUTC5JTlBVVF9SRFkuCisvLworLy8gTm90ZTogQUVTIHR5cGljYWxseSBvcGVyYXRlcyBvbiAxMjggYml0cyBibG9jayBtdWx0aXBsZSBpbnB1dCBkYXRhLiBUaGUgQ1RSLAorLy8gR0NNIGFuZCBDQ00gbW9kZXMgZm9ybSBhbiBleGNlcHRpb24uIFRoZSBsYXN0IGJsb2NrIG9mIGEgQ1RSLW1vZGUgbWVzc2FnZQorLy8gbWF5IGNvbnRhaW4gbGVzcyB0aGFuIDEyOCBiaXRzIChyZWZlciB0byBbTklTVCA4MDAtMzhBXSk6IDAgPCBuIDw9IDEyOCBiaXRzLgorLy8gRm9yIEdDTS9DQ00sIHRoZSBsYXN0IGJsb2NrIG9mIGJvdGggQUFEIGFuZCBtZXNzYWdlIGRhdGEgbWF5IGNvbnRhaW4gbGVzcworLy8gdGhhbiAxMjggYml0cyAocmVmZXIgdG8gW05JU1QgODAwLTM4RF0pLiBUaGUgQ3J5cHRvIHBlcmlwaGVyYWwgYXV0b21hdGljYWxseQorLy8gcGFkcyBvciBtYXNrcyBtaXNhbGlnbmVkIGVuZGluZyBkYXRhIGJsb2NrcyB3aXRoIHplcm9lcyBmb3IgR0NNLCBDQ00gYW5kCisvLyBDQkMtTUFDLiBGb3IgQ1RSIG1vZGUsIHRoZSByZW1haW5pbmcgZGF0YSBpbiBhbiB1bmFsaWduZWQgZGF0YSBibG9jayBpcworLy8gaWdub3JlZC4KKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFJTjBfREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUllQVE9fQUVTREFUQUlOMF9EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENSWVBUT19BRVNEQVRBSU4wX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19BRVNEQVRBT1VUMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIERBVEEKKy8vCisvLyBEYXRhIHJlZ2lzdGVycyBmb3Igb3V0cHV0IGJsb2NrIGRhdGEgZnJvbSB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwuCisvLyBUaGVzZSBiaXRzID0gQUVTIE91dHB1dCBEYXRhWzYzOjMyXSBvZiBbMTI3OjBdCisvLworLy8gRm9yIG5vcm1hbCBvcGVyYXRpb25zLCB0aGlzIHJlZ2lzdGVyIGlzIG5vdCB1c2VkLCBzaW5jZSBkYXRhIGlucHV0IGFuZAorLy8gb3V0cHV0IGlzIHRyYW5zZmVycmVkIGZyb20gYW5kIHRvIHRoZSBBRVMgZW5naW5lIHZpYSBETUEuCisvLworLy8gRm9yIGEgSG9zdCByZWFkIG9wZXJhdGlvbiwgdGhlc2UgcmVnaXN0ZXJzIGNvbnRhaW4gdGhlIDEyOC1iaXQgb3V0cHV0IGJsb2NrCisvLyBmcm9tIHRoZSBsYXRlc3QgQUVTIG9wZXJhdGlvbi4gUmVhZGluZyBmcm9tIGEgd29yZC1hbGlnbmVkIG9mZnNldCB3aXRoaW4KKy8vIHRoaXMgYWRkcmVzcyByYW5nZSB3aWxsIHJlYWQgb25lIHdvcmQgKDQgYnl0ZXMpIG9mIGRhdGEgb3V0IHRoZSA0LXdvcmQgZGVlcAorLy8gKDE2IGJ5dGVzID0gMTI4LWJpdHMgQUVTIGJsb2NrKSBkYXRhIG91dHB1dCBidWZmZXIuIFRoZSB3b3JkcyAoNCB3b3Jkcywgb25lCisvLyBmdWxsIGJsb2NrKSBzaG91bGQgYmUgcmVhZCBiZWZvcmUgdGhlIGNvcmUgd2lsbCBtb3ZlIHRoZSBuZXh0IGJsb2NrIHRvIHRoZQorLy8gZGF0YSBvdXRwdXQgYnVmZmVyLiBUbyBlbXB0eSB0aGUgZGF0YSBvdXRwdXQgYnVmZmVyLCBBRVNDVEwuT1VUUFVUX1JEWSBtdXN0CisvLyBiZSB3cml0dGVuLgorLy8gRm9yIHRoZSBtb2RlcyB3aXRoIGF1dGhlbnRpY2F0aW9uIChDQkMtTUFDLCBHQ00gYW5kIENDTSksIHRoZSBpbnZhbGlkCisvLyAobWVzc2FnZSkgYnl0ZXMvd29yZHMgY2FuIGJlIHdyaXR0ZW4gd2l0aCBhbnkgZGF0YS4KKy8vCisvLyBOb3RlOiBUaGUgQUFEIC8gYXV0aGVudGljYXRpb24gb25seSBkYXRhIGlzIG5vdCBjb3BpZWQgdG8gdGhlIG91dHB1dCBidWZmZXIKKy8vIGJ1dCBvbmx5IHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLgorI2RlZmluZSBDUllQVE9fQUVTREFUQU9VVDFfREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNEQVRBT1VUMV9EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFPVVQxX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0RBVEFJTjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBEQVRBCisvLworLy8gRGF0YSByZWdpc3RlcnMgZm9yIGlucHV0IGJsb2NrIGRhdGEgdG8gdGhlIENyeXB0byBwZXJpcGhlcmFsLgorLy8gVGhlc2UgYml0cyA9IEFFUyBJbnB1dCBEYXRhWzYzOjMyXSAgb2YgWzEyNzowXQorLy8KKy8vIEZvciBub3JtYWwgb3BlcmF0aW9ucywgdGhpcyByZWdpc3RlciBpcyBub3QgdXNlZCwgc2luY2UgZGF0YSBpbnB1dCBhbmQKKy8vIG91dHB1dCBpcyB0cmFuc2ZlcnJlZCBmcm9tIGFuZCB0byB0aGUgQUVTIGVuZ2luZSB2aWEgRE1BLgorLy8KKy8vIEZvciBhIEhvc3Qgd3JpdGUgb3BlcmF0aW9uLCB0aGVzZSByZWdpc3RlcnMgbXVzdCBiZSB3cml0dGVuIHdpdGggdGhlIDEyOC1iaXQKKy8vIGlucHV0IGJsb2NrIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLiBXcml0aW5nIGF0IGEgd29yZC1hbGlnbmVkIG9mZnNldAorLy8gd2l0aGluIHRoaXMgYWRkcmVzcyByYW5nZSB3aWxsIHN0b3JlIHRoZSB3b3JkICg0IGJ5dGVzKSBvZiBkYXRhIGludG8gdGhlCisvLyBjb3JyZXNwb25kaW5nIHBvc2l0aW9uIG9mIDQtd29yZCBkZWVwICgxNiBieXRlcyA9IDEyOC1iaXQgQUVTIGJsb2NrKSBkYXRhCisvLyBpbnB1dCBidWZmZXIuIFRoaXMgYnVmZmVyIGlzIHVzZWQgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uIElmIHRoZSBsYXN0CisvLyBkYXRhIGJsb2NrIGlzIG5vdCBjb21wbGV0ZWx5IGZpbGxlZCB3aXRoIHZhbGlkIGRhdGEgKHNlZSBub3RlcyBiZWxvdyksIGl0IGlzCisvLyBhbGxvd2VkIHRvIHdyaXRlIG9ubHkgdGhlIHdvcmRzIHdpdGggdmFsaWQgZGF0YS4gTmV4dCBBRVMgb3BlcmF0aW9uIGlzCisvLyB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byBBRVNDVEwuSU5QVVRfUkRZLgorLy8KKy8vIE5vdGU6IEFFUyB0eXBpY2FsbHkgb3BlcmF0ZXMgb24gMTI4IGJpdHMgYmxvY2sgbXVsdGlwbGUgaW5wdXQgZGF0YS4gVGhlIENUUiwKKy8vIEdDTSBhbmQgQ0NNIG1vZGVzIGZvcm0gYW4gZXhjZXB0aW9uLiBUaGUgbGFzdCBibG9jayBvZiBhIENUUi1tb2RlIG1lc3NhZ2UKKy8vIG1heSBjb250YWluIGxlc3MgdGhhbiAxMjggYml0cyAocmVmZXIgdG8gW05JU1QgODAwLTM4QV0pOiAwIDwgbiA8PSAxMjggYml0cy4KKy8vIEZvciBHQ00vQ0NNLCB0aGUgbGFzdCBibG9jayBvZiBib3RoIEFBRCBhbmQgbWVzc2FnZSBkYXRhIG1heSBjb250YWluIGxlc3MKKy8vIHRoYW4gMTI4IGJpdHMgKHJlZmVyIHRvIFtOSVNUIDgwMC0zOERdKS4gVGhlIENyeXB0byBwZXJpcGhlcmFsIGF1dG9tYXRpY2FsbHkKKy8vIHBhZHMgb3IgbWFza3MgbWlzYWxpZ25lZCBlbmRpbmcgZGF0YSBibG9ja3Mgd2l0aCB6ZXJvZXMgZm9yIEdDTSwgQ0NNIGFuZAorLy8gQ0JDLU1BQy4gRm9yIENUUiBtb2RlLCB0aGUgcmVtYWluaW5nIGRhdGEgaW4gYW4gdW5hbGlnbmVkIGRhdGEgYmxvY2sgaXMKKy8vIGlnbm9yZWQuCisjZGVmaW5lIENSWVBUT19BRVNEQVRBSU4xX0RBVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFJTjFfREFUQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTREFUQUlOMV9EQVRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTREFUQU9VVDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBEQVRBCisvLworLy8gRGF0YSByZWdpc3RlcnMgZm9yIG91dHB1dCBibG9jayBkYXRhIGZyb20gdGhlIENyeXB0byBwZXJpcGhlcmFsLgorLy8gVGhlc2UgYml0cyA9IEFFUyBPdXRwdXQgRGF0YVs5NTo2NF0gb2YgWzEyNzowXQorLy8KKy8vIEZvciBub3JtYWwgb3BlcmF0aW9ucywgdGhpcyByZWdpc3RlciBpcyBub3QgdXNlZCwgc2luY2UgZGF0YSBpbnB1dCBhbmQKKy8vIG91dHB1dCBpcyB0cmFuc2ZlcnJlZCBmcm9tIGFuZCB0byB0aGUgQUVTIGVuZ2luZSB2aWEgRE1BLgorLy8KKy8vIEZvciBhIEhvc3QgcmVhZCBvcGVyYXRpb24sIHRoZXNlIHJlZ2lzdGVycyBjb250YWluIHRoZSAxMjgtYml0IG91dHB1dCBibG9jaworLy8gZnJvbSB0aGUgbGF0ZXN0IEFFUyBvcGVyYXRpb24uIFJlYWRpbmcgZnJvbSBhIHdvcmQtYWxpZ25lZCBvZmZzZXQgd2l0aGluCisvLyB0aGlzIGFkZHJlc3MgcmFuZ2Ugd2lsbCByZWFkIG9uZSB3b3JkICg0IGJ5dGVzKSBvZiBkYXRhIG91dCB0aGUgNC13b3JkIGRlZXAKKy8vICgxNiBieXRlcyA9IDEyOC1iaXRzIEFFUyBibG9jaykgZGF0YSBvdXRwdXQgYnVmZmVyLiBUaGUgd29yZHMgKDQgd29yZHMsIG9uZQorLy8gZnVsbCBibG9jaykgc2hvdWxkIGJlIHJlYWQgYmVmb3JlIHRoZSBjb3JlIHdpbGwgbW92ZSB0aGUgbmV4dCBibG9jayB0byB0aGUKKy8vIGRhdGEgb3V0cHV0IGJ1ZmZlci4gVG8gZW1wdHkgdGhlIGRhdGEgb3V0cHV0IGJ1ZmZlciwgQUVTQ1RMLk9VVFBVVF9SRFkgbXVzdAorLy8gYmUgd3JpdHRlbi4KKy8vIEZvciB0aGUgbW9kZXMgd2l0aCBhdXRoZW50aWNhdGlvbiAoQ0JDLU1BQywgR0NNIGFuZCBDQ00pLCB0aGUgaW52YWxpZAorLy8gKG1lc3NhZ2UpIGJ5dGVzL3dvcmRzIGNhbiBiZSB3cml0dGVuIHdpdGggYW55IGRhdGEuCisvLworLy8gTm90ZTogVGhlIEFBRCAvIGF1dGhlbnRpY2F0aW9uIG9ubHkgZGF0YSBpcyBub3QgY29waWVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyCisvLyBidXQgb25seSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbi4KKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFPVVQyX0RBVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUllQVE9fQUVTREFUQU9VVDJfREFUQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENSWVBUT19BRVNEQVRBT1VUMl9EQVRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19BRVNEQVRBSU4yCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gREFUQQorLy8KKy8vIERhdGEgcmVnaXN0ZXJzIGZvciBpbnB1dCBibG9jayBkYXRhIHRvIHRoZSBDcnlwdG8gcGVyaXBoZXJhbC4KKy8vIFRoZXNlIGJpdHMgPSBBRVMgSW5wdXQgRGF0YVs5NTo2NF0gIG9mIFsxMjc6MF0KKy8vCisvLyBGb3Igbm9ybWFsIG9wZXJhdGlvbnMsIHRoaXMgcmVnaXN0ZXIgaXMgbm90IHVzZWQsIHNpbmNlIGRhdGEgaW5wdXQgYW5kCisvLyBvdXRwdXQgaXMgdHJhbnNmZXJyZWQgZnJvbSBhbmQgdG8gdGhlIEFFUyBlbmdpbmUgdmlhIERNQS4KKy8vCisvLyBGb3IgYSBIb3N0IHdyaXRlIG9wZXJhdGlvbiwgdGhlc2UgcmVnaXN0ZXJzIG11c3QgYmUgd3JpdHRlbiB3aXRoIHRoZSAxMjgtYml0CisvLyBpbnB1dCBibG9jayBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4gV3JpdGluZyBhdCBhIHdvcmQtYWxpZ25lZCBvZmZzZXQKKy8vIHdpdGhpbiB0aGlzIGFkZHJlc3MgcmFuZ2Ugd2lsbCBzdG9yZSB0aGUgd29yZCAoNCBieXRlcykgb2YgZGF0YSBpbnRvIHRoZQorLy8gY29ycmVzcG9uZGluZyBwb3NpdGlvbiBvZiA0LXdvcmQgZGVlcCAoMTYgYnl0ZXMgPSAxMjgtYml0IEFFUyBibG9jaykgZGF0YQorLy8gaW5wdXQgYnVmZmVyLiBUaGlzIGJ1ZmZlciBpcyB1c2VkIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLiBJZiB0aGUgbGFzdAorLy8gZGF0YSBibG9jayBpcyBub3QgY29tcGxldGVseSBmaWxsZWQgd2l0aCB2YWxpZCBkYXRhIChzZWUgbm90ZXMgYmVsb3cpLCBpdCBpcworLy8gYWxsb3dlZCB0byB3cml0ZSBvbmx5IHRoZSB3b3JkcyB3aXRoIHZhbGlkIGRhdGEuIE5leHQgQUVTIG9wZXJhdGlvbiBpcworLy8gdHJpZ2dlcmVkIGJ5IHdyaXRpbmcgdG8gQUVTQ1RMLklOUFVUX1JEWS4KKy8vCisvLyBOb3RlOiBBRVMgdHlwaWNhbGx5IG9wZXJhdGVzIG9uIDEyOCBiaXRzIGJsb2NrIG11bHRpcGxlIGlucHV0IGRhdGEuIFRoZSBDVFIsCisvLyBHQ00gYW5kIENDTSBtb2RlcyBmb3JtIGFuIGV4Y2VwdGlvbi4gVGhlIGxhc3QgYmxvY2sgb2YgYSBDVFItbW9kZSBtZXNzYWdlCisvLyBtYXkgY29udGFpbiBsZXNzIHRoYW4gMTI4IGJpdHMgKHJlZmVyIHRvIFtOSVNUIDgwMC0zOEFdKTogMCA8IG4gPD0gMTI4IGJpdHMuCisvLyBGb3IgR0NNL0NDTSwgdGhlIGxhc3QgYmxvY2sgb2YgYm90aCBBQUQgYW5kIG1lc3NhZ2UgZGF0YSBtYXkgY29udGFpbiBsZXNzCisvLyB0aGFuIDEyOCBiaXRzIChyZWZlciB0byBbTklTVCA4MDAtMzhEXSkuIFRoZSBDcnlwdG8gcGVyaXBoZXJhbCBhdXRvbWF0aWNhbGx5CisvLyBwYWRzIG9yIG1hc2tzIG1pc2FsaWduZWQgZW5kaW5nIGRhdGEgYmxvY2tzIHdpdGggemVyb2VzIGZvciBHQ00sIENDTSBhbmQKKy8vIENCQy1NQUMuIEZvciBDVFIgbW9kZSwgdGhlIHJlbWFpbmluZyBkYXRhIGluIGFuIHVuYWxpZ25lZCBkYXRhIGJsb2NrIGlzCisvLyBpZ25vcmVkLgorI2RlZmluZSBDUllQVE9fQUVTREFUQUlOMl9EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNEQVRBSU4yX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFJTjJfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0RBVEFPVVQzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gREFUQQorLy8KKy8vIERhdGEgcmVnaXN0ZXJzIGZvciBvdXRwdXQgYmxvY2sgZGF0YSBmcm9tIHRoZSBDcnlwdG8gcGVyaXBoZXJhbC4KKy8vIFRoZXNlIGJpdHMgPSBBRVMgT3V0cHV0IERhdGFbMTI3Ojk2XSBvZiBbMTI3OjBdCisvLworLy8gRm9yIG5vcm1hbCBvcGVyYXRpb25zLCB0aGlzIHJlZ2lzdGVyIGlzIG5vdCB1c2VkLCBzaW5jZSBkYXRhIGlucHV0IGFuZAorLy8gb3V0cHV0IGlzIHRyYW5zZmVycmVkIGZyb20gYW5kIHRvIHRoZSBBRVMgZW5naW5lIHZpYSBETUEuCisvLworLy8gRm9yIGEgSG9zdCByZWFkIG9wZXJhdGlvbiwgdGhlc2UgcmVnaXN0ZXJzIGNvbnRhaW4gdGhlIDEyOC1iaXQgb3V0cHV0IGJsb2NrCisvLyBmcm9tIHRoZSBsYXRlc3QgQUVTIG9wZXJhdGlvbi4gUmVhZGluZyBmcm9tIGEgd29yZC1hbGlnbmVkIG9mZnNldCB3aXRoaW4KKy8vIHRoaXMgYWRkcmVzcyByYW5nZSB3aWxsIHJlYWQgb25lIHdvcmQgKDQgYnl0ZXMpIG9mIGRhdGEgb3V0IHRoZSA0LXdvcmQgZGVlcAorLy8gKDE2IGJ5dGVzID0gMTI4LWJpdHMgQUVTIGJsb2NrKSBkYXRhIG91dHB1dCBidWZmZXIuIFRoZSB3b3JkcyAoNCB3b3Jkcywgb25lCisvLyBmdWxsIGJsb2NrKSBzaG91bGQgYmUgcmVhZCBiZWZvcmUgdGhlIGNvcmUgd2lsbCBtb3ZlIHRoZSBuZXh0IGJsb2NrIHRvIHRoZQorLy8gZGF0YSBvdXRwdXQgYnVmZmVyLiBUbyBlbXB0eSB0aGUgZGF0YSBvdXRwdXQgYnVmZmVyLCBBRVNDVEwuT1VUUFVUX1JEWSBtdXN0CisvLyBiZSB3cml0dGVuLgorLy8gRm9yIHRoZSBtb2RlcyB3aXRoIGF1dGhlbnRpY2F0aW9uIChDQkMtTUFDLCBHQ00gYW5kIENDTSksIHRoZSBpbnZhbGlkCisvLyAobWVzc2FnZSkgYnl0ZXMvd29yZHMgY2FuIGJlIHdyaXR0ZW4gd2l0aCBhbnkgZGF0YS4KKy8vCisvLyBOb3RlOiBUaGUgQUFEIC8gYXV0aGVudGljYXRpb24gb25seSBkYXRhIGlzIG5vdCBjb3BpZWQgdG8gdGhlIG91dHB1dCBidWZmZXIKKy8vIGJ1dCBvbmx5IHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLgorI2RlZmluZSBDUllQVE9fQUVTREFUQU9VVDNfREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNEQVRBT1VUM19EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFPVVQzX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0RBVEFJTjMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBEQVRBCisvLworLy8gRGF0YSByZWdpc3RlcnMgZm9yIGlucHV0IGJsb2NrIGRhdGEgdG8gdGhlIENyeXB0byBwZXJpcGhlcmFsLgorLy8gVGhlc2UgYml0cyA9IEFFUyBJbnB1dCBEYXRhWzEyNzo5Nl0gb2YgWzEyNzowXQorLy8KKy8vIEZvciBub3JtYWwgb3BlcmF0aW9ucywgdGhpcyByZWdpc3RlciBpcyBub3QgdXNlZCwgc2luY2UgZGF0YSBpbnB1dCBhbmQKKy8vIG91dHB1dCBpcyB0cmFuc2ZlcnJlZCBmcm9tIGFuZCB0byB0aGUgQUVTIGVuZ2luZSB2aWEgRE1BLgorLy8KKy8vIEZvciBhIEhvc3Qgd3JpdGUgb3BlcmF0aW9uLCB0aGVzZSByZWdpc3RlcnMgbXVzdCBiZSB3cml0dGVuIHdpdGggdGhlIDEyOC1iaXQKKy8vIGlucHV0IGJsb2NrIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLiBXcml0aW5nIGF0IGEgd29yZC1hbGlnbmVkIG9mZnNldAorLy8gd2l0aGluIHRoaXMgYWRkcmVzcyByYW5nZSB3aWxsIHN0b3JlIHRoZSB3b3JkICg0IGJ5dGVzKSBvZiBkYXRhIGludG8gdGhlCisvLyBjb3JyZXNwb25kaW5nIHBvc2l0aW9uIG9mIDQtd29yZCBkZWVwICgxNiBieXRlcyA9IDEyOC1iaXQgQUVTIGJsb2NrKSBkYXRhCisvLyBpbnB1dCBidWZmZXIuIFRoaXMgYnVmZmVyIGlzIHVzZWQgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uIElmIHRoZSBsYXN0CisvLyBkYXRhIGJsb2NrIGlzIG5vdCBjb21wbGV0ZWx5IGZpbGxlZCB3aXRoIHZhbGlkIGRhdGEgKHNlZSBub3RlcyBiZWxvdyksIGl0IGlzCisvLyBhbGxvd2VkIHRvIHdyaXRlIG9ubHkgdGhlIHdvcmRzIHdpdGggdmFsaWQgZGF0YS4gTmV4dCBBRVMgb3BlcmF0aW9uIGlzCisvLyB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byBBRVNDVEwuSU5QVVRfUkRZLgorLy8KKy8vIE5vdGU6IEFFUyB0eXBpY2FsbHkgb3BlcmF0ZXMgb24gMTI4IGJpdHMgYmxvY2sgbXVsdGlwbGUgaW5wdXQgZGF0YS4gVGhlIENUUiwKKy8vIEdDTSBhbmQgQ0NNIG1vZGVzIGZvcm0gYW4gZXhjZXB0aW9uLiBUaGUgbGFzdCBibG9jayBvZiBhIENUUi1tb2RlIG1lc3NhZ2UKKy8vIG1heSBjb250YWluIGxlc3MgdGhhbiAxMjggYml0cyAocmVmZXIgdG8gW05JU1QgODAwLTM4QV0pOiAwIDwgbiA8PSAxMjggYml0cy4KKy8vIEZvciBHQ00vQ0NNLCB0aGUgbGFzdCBibG9jayBvZiBib3RoIEFBRCBhbmQgbWVzc2FnZSBkYXRhIG1heSBjb250YWluIGxlc3MKKy8vIHRoYW4gMTI4IGJpdHMgKHJlZmVyIHRvIFtOSVNUIDgwMC0zOERdKS4gVGhlIENyeXB0byBwZXJpcGhlcmFsIGF1dG9tYXRpY2FsbHkKKy8vIHBhZHMgb3IgbWFza3MgbWlzYWxpZ25lZCBlbmRpbmcgZGF0YSBibG9ja3Mgd2l0aCB6ZXJvZXMgZm9yIEdDTSwgQ0NNIGFuZAorLy8gQ0JDLU1BQy4gRm9yIENUUiBtb2RlLCB0aGUgcmVtYWluaW5nIGRhdGEgaW4gYW4gdW5hbGlnbmVkIGRhdGEgYmxvY2sgaXMKKy8vIGlnbm9yZWQuCisjZGVmaW5lIENSWVBUT19BRVNEQVRBSU4zX0RBVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFJTjNfREFUQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTREFUQUlOM19EQVRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTVEFHT1VUMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFRBRworLy8KKy8vIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIFRBRyBmb3IgdGhlIGNvbWJpbmVkIGFuZAorLy8gYXV0aGVudGljYXRpb24tb25seSBtb2Rlcy4KKyNkZWZpbmUgQ1JZUFRPX0FFU1RBR09VVDBfVEFHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUllQVE9fQUVTVEFHT1VUMF9UQUdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENSWVBUT19BRVNUQUdPVVQwX1RBR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19BRVNUQUdPVVQxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVEFHCisvLworLy8gVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gVEFHIGZvciB0aGUgY29tYmluZWQgYW5kCisvLyBhdXRoZW50aWNhdGlvbi1vbmx5IG1vZGVzLgorI2RlZmluZSBDUllQVE9fQUVTVEFHT1VUMV9UQUdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNUQUdPVVQxX1RBR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU1RBR09VVDFfVEFHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU1RBR09VVDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBUQUcKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBhdXRoZW50aWNhdGlvbiBUQUcgZm9yIHRoZSBjb21iaW5lZCBhbmQKKy8vIGF1dGhlbnRpY2F0aW9uLW9ubHkgbW9kZXMuCisjZGVmaW5lIENSWVBUT19BRVNUQUdPVVQyX1RBR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU1RBR09VVDJfVEFHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTVEFHT1VUMl9UQUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTVEFHT1VUMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFRBRworLy8KKy8vIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIFRBRyBmb3IgdGhlIGNvbWJpbmVkIGFuZAorLy8gYXV0aGVudGljYXRpb24tb25seSBtb2Rlcy4KKyNkZWZpbmUgQ1JZUFRPX0FFU1RBR09VVDNfVEFHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUllQVE9fQUVTVEFHT1VUM19UQUdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENSWVBUT19BRVNUQUdPVVQzX1RBR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19BTEdTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBUQUcKKy8vCisvLyBJZiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIDAsIHRoZSBETUEgb3BlcmF0aW9uIGludm9sdmVzIG9ubHkgZGF0YS4KKy8vIElmIHRoaXMgYml0IGlzIHNldCwgdGhlIERNQSBvcGVyYXRpb24gaW5jbHVkZXMgYSBUQUcgKEF1dGhlbnRpY2F0aW9uIFJlc3VsdAorLy8gLyBEaWdlc3QpLgorI2RlZmluZSBDUllQVE9fQUxHU0VMX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENSWVBUT19BTEdTRUxfVEFHX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1JZUFRPX0FMR1NFTF9UQUdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUllQVE9fQUxHU0VMX1RBR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICAgWzFdIEFFUworLy8KKy8vIElmIHNldCB0byAxLCAgdGhlIEFFUyBkYXRhIGlzIGxvYWRlZCB2aWEgRE1BCisvLyBCb3RoIFJlYWQgYW5kIFdyaXRlIG1heGltdW0gdHJhbnNmZXIgc2l6ZSB0byBETUEgZW5naW5lIGlzIHNldCB0byAxNiBieXRlcworI2RlZmluZSBDUllQVE9fQUxHU0VMX0FFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19BTEdTRUxfQUVTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1JZUFRPX0FMR1NFTF9BRVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fQUxHU0VMX0FFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEtFWV9TVE9SRQorLy8KKy8vIElmIHNldCB0byAxLCBzZWxlY3RzIHRoZSBLZXkgU3RvcmUgdG8gYmUgbG9hZGVkIHZpYSBETUEuCisvLyBUaGUgbWF4aW11bSB0cmFuc2ZlciBzaXplIHRvIERNQSBlbmdpbmUgaXMgc2V0IHRvIDMyIGJ5dGVzIChob3dldmVyCisvLyB0cmFuc2ZlcnMgb2YgMTYsIDI0IGFuZCAzMiBieXRlcyBhcmUgYWxsb3dlZCkKKyNkZWZpbmUgQ1JZUFRPX0FMR1NFTF9LRVlfU1RPUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fQUxHU0VMX0tFWV9TVE9SRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19BTEdTRUxfS0VZX1NUT1JFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0FMR1NFTF9LRVlfU1RPUkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0RNQVBST1RDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIFNlbGVjdCBBSEIgdHJhbnNmZXIgcHJvdGVjdGlvbiBjb250cm9sIGZvciBETUEgdHJhbnNmZXJzIHVzaW5nIHRoZSBrZXkgc3RvcmUKKy8vIGFyZWEgYXMgZGVzdGluYXRpb24uCisvLyAwIDogdHJhbnNmZXJzIHVzZSAnVVNFUicgdHlwZSBhY2Nlc3MuCisvLyAxIDogdHJhbnNmZXJzIHVzZSAnUFJJVklMRUdFRCcgdHlwZSBhY2Nlc3MuCisjZGVmaW5lIENSWVBUT19ETUFQUk9UQ1RMX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0RNQVBST1RDVExfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fRE1BUFJPVENUTF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19ETUFQUk9UQ1RMX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19TV1JFU0VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gUkVTRVQKKy8vCisvLyBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgdGhlIGZvbGxvd2luZyBtb2R1bGVzIGFyZSByZXNldDoKKy8vIC0gTWFzdGVyIGNvbnRyb2wgaW50ZXJuYWwgc3RhdGUgaXMgcmVzZXQuIFRoYXQgaW5jbHVkZXMgaW50ZXJydXB0LCBlcnJvcgorLy8gc3RhdHVzIHJlZ2lzdGVyIGFuZCByZXN1bHQgYXZhaWxhYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIEZTTS4KKy8vIC0gS2V5IHN0b3JlIG1vZHVsZSBzdGF0ZSBpcyByZXNldC4gVGhhdCBpbmNsdWRlcyBjbGVhcmluZyB0aGUgV3JpdHRlbiBBcmVhCisvLyBmbGFnczsgdGhlcmVmb3JlIHRoZSBrZXlzIG11c3QgYmUgcmVsb2FkZWQgdG8gdGhlIGtleSBzdG9yZSBtb2R1bGUuCisvLyBXcml0aW5nIDAgaGFzIG5vIGVmZmVjdC4KKy8vIFRoZSBiaXQgaXMgc2VsZiBjbGVhcmVkIGFmdGVyIGV4ZWN1dGluZyB0aGUgcmVzZXQuCisjZGVmaW5lIENSWVBUT19TV1JFU0VUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX1NXUkVTRVRfUkVTRVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fU1dSRVNFVF9SRVNFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19TV1JFU0VUX1JFU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19JUlFUWVBFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gSUVOCisvLworLy8gSW50ZXJydXB0IGVuYWJsZS4gVGhpcyBiaXQgbXVzdCBiZSBzZXQgdG8gMSB0byBlbmFibGUgaW50ZXJydXB0cyBmcm9tIHRoZQorLy8gQ3J5cHRvIHBlcmlwaGVyYWwuCisvLyAwIDogQWxsIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGVuYWJsZWQuCisvLyAxIDogQWxsIGludGVycnVwdHMgYXJlIGVuYWJsZWQuCisjZGVmaW5lIENSWVBUT19JUlFUWVBFX0lFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0lSUVRZUEVfSUVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fSVJRVFlQRV9JRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19JUlFUWVBFX0lFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19JUlFFTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIERNQV9JTl9ET05FCisvLworLy8gVGhpcyBiaXQgZW5hYmxlcyBJUlFTVEFULkRNQV9JTl9ET05FIGFzIHNvdXJjZSBmb3IgSVJRLgorI2RlZmluZSBDUllQVE9fSVJRRU5fRE1BX0lOX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19JUlFFTl9ETUFfSU5fRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1JZUFRPX0lSUUVOX0RNQV9JTl9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fSVJRRU5fRE1BX0lOX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJFU1VMVF9BVkFJTAorLy8KKy8vIFRoaXMgYml0IGVuYWJsZXMgSVJRU1RBVC5SRVNVTFRfQVZBSUwgYXMgc291cmNlIGZvciBJUlEuCisjZGVmaW5lIENSWVBUT19JUlFFTl9SRVNVTFRfQVZBSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0lSUUVOX1JFU1VMVF9BVkFJTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fSVJRRU5fUkVTVUxUX0FWQUlMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19JUlFFTl9SRVNVTFRfQVZBSUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19JUlFDTFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBETUFfQlVTX0VSUgorLy8KKy8vIElmIDEgaXMgd3JpdHRlbiB0byB0aGlzIGJpdCwgSVJRU1RBVC5ETUFfQlVTX0VSUiBpcyBjbGVhcmVkLgorI2RlZmluZSBDUllQVE9fSVJRQ0xSX0RNQV9CVVNfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENSWVBUT19JUlFDTFJfRE1BX0JVU19FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1JZUFRPX0lSUUNMUl9ETUFfQlVTX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUllQVE9fSVJRQ0xSX0RNQV9CVVNfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIEtFWV9TVF9XUl9FUlIKKy8vCisvLyBJZiAxIGlzIHdyaXR0ZW4gdG8gdGhpcyBiaXQsIElSUVNUQVQuS0VZX1NUX1dSX0VSUiBpcyBjbGVhcmVkLgorI2RlZmluZSBDUllQVE9fSVJRQ0xSX0tFWV9TVF9XUl9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENSWVBUT19JUlFDTFJfS0VZX1NUX1dSX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ1JZUFRPX0lSUUNMUl9LRVlfU1RfV1JfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUllQVE9fSVJRQ0xSX0tFWV9TVF9XUl9FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIEtFWV9TVF9SRF9FUlIKKy8vCisvLyBJZiAxIGlzIHdyaXR0ZW4gdG8gdGhpcyBiaXQsIElSUVNUQVQuS0VZX1NUX1JEX0VSUiBpcyBjbGVhcmVkLgorI2RlZmluZSBDUllQVE9fSVJRQ0xSX0tFWV9TVF9SRF9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENSWVBUT19JUlFDTFJfS0VZX1NUX1JEX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgQ1JZUFRPX0lSUUNMUl9LRVlfU1RfUkRfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDUllQVE9fSVJRQ0xSX0tFWV9TVF9SRF9FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICAgWzFdIERNQV9JTl9ET05FCisvLworLy8gSWYgMSBpcyB3cml0dGVuIHRvIHRoaXMgYml0LCBJUlFTVEFULkRNQV9JTl9ET05FIGlzIGNsZWFyZWQuCisjZGVmaW5lIENSWVBUT19JUlFDTFJfRE1BX0lOX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0lSUUNMUl9ETUFfSU5fRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fSVJRQ0xSX0RNQV9JTl9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19JUlFDTFJfRE1BX0lOX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUkVTVUxUX0FWQUlMCisvLworLy8gSWYgMSBpcyB3cml0dGVuIHRvIHRoaXMgYml0LCBJUlFTVEFULlJFU1VMVF9BVkFJTCBpcyBjbGVhcmVkLgorI2RlZmluZSBDUllQVE9fSVJRQ0xSX1JFU1VMVF9BVkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19JUlFDTFJfUkVTVUxUX0FWQUlMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0lSUUNMUl9SRVNVTFRfQVZBSUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fSVJRQ0xSX1JFU1VMVF9BVkFJTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fSVJRU0VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gRE1BX0lOX0RPTkUKKy8vCisvLyBJZiAxIGlzIHdyaXR0ZW4gdG8gdGhpcyBiaXQsIElSUVNUQVQuRE1BX0lOX0RPTkUgaXMgc2V0LgorLy8gV3JpdGluZyAwIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIENSWVBUT19JUlFTRVRfRE1BX0lOX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0lSUVNFVF9ETUFfSU5fRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fSVJRU0VUX0RNQV9JTl9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19JUlFTRVRfRE1BX0lOX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUkVTVUxUX0FWQUlMCisvLworLy8gSWYgMSBpcyB3cml0dGVuIHRvIHRoaXMgYml0LCBJUlFTVEFULlJFU1VMVF9BVkFJTCBpcyBzZXQuCisvLyBXcml0aW5nIDAgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgQ1JZUFRPX0lSUVNFVF9SRVNVTFRfQVZBSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fSVJRU0VUX1JFU1VMVF9BVkFJTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19JUlFTRVRfUkVTVUxUX0FWQUlMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0lSUVNFVF9SRVNVTFRfQVZBSUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0lSUVNUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBETUFfQlVTX0VSUgorLy8KKy8vIFRoaXMgYml0IGlzIHNldCB3aGVuIGEgRE1BIGJ1cyBlcnJvciBpcyBkZXRlY3RlZCBkdXJpbmcgYSBETUEgb3BlcmF0aW9uLiBUaGUKKy8vIHZhbHVlIG9mIHRoaXMgcmVnaXN0ZXIgaXMgaGVsZCB1bnRpbCBpdCBpcyBjbGVhcmVkIHZpYSBJUlFDTFIuRE1BX0JVU19FUlIKKy8vIE5vdGU6IFRoaXMgZXJyb3IgaXMgYXNzZXJ0ZWQgaWYgYW4gZXJyb3IgaXMgZGV0ZWN0ZWQgb24gdGhlIEFIQiBtYXN0ZXIKKy8vIGludGVyZmFjZSBkdXJpbmcgYSBETUEgb3BlcmF0aW9uLgorLy8gTm90ZTogVGhpcyBpcyBub3QgYW4gaW50ZXJydXB0IHNvdXJjZS4KKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfRE1BX0JVU19FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9ETUFfQlVTX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX0RNQV9CVVNfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfRE1BX0JVU19FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBLRVlfU1RfV1JfRVJSCisvLworLy8gVGhpcyBiaXQgaXMgc2V0IHdoZW4gYSB3cml0ZSBlcnJvciBpcyBkZXRlY3RlZCBkdXJpbmcgdGhlIERNQSB3cml0ZQorLy8gb3BlcmF0aW9uIHRvIHRoZSBrZXkgc3RvcmUgbWVtb3J5LiBUaGUgdmFsdWUgb2YgdGhpcyByZWdpc3RlciBpcyBoZWxkIHVudGlsCisvLyBpdCBpcyBjbGVhcmVkIHZpYSBJUlFDTFIuS0VZX1NUX1dSX0VSUgorLy8gTm90ZTogVGhpcyBlcnJvciBpcyBhc3NlcnRlZCBpZiBhIERNQSBvcGVyYXRpb24gZG9lcyBub3QgY292ZXIgYSBmdWxsIGtleQorLy8gYXJlYSBvciBtb3JlIGFyZWFzIGFyZSB3cml0dGVuIHRoYW4gZXhwZWN0ZWQuCisvLyBOb3RlOiBUaGlzIGlzIG5vdCBhbiBpbnRlcnJ1cHQgc291cmNlLgorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9LRVlfU1RfV1JfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX0tFWV9TVF9XUl9FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfS0VZX1NUX1dSX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9LRVlfU1RfV1JfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIEtFWV9TVF9SRF9FUlIKKy8vCisvLyBUaGlzIGJpdCB3aWxsIGJlIHNldCB3aGVuIGEgcmVhZCBlcnJvciBpcyBkZXRlY3RlZCBkdXJpbmcgdGhlIHJlYWQgb2YgYSBrZXkKKy8vIGZyb20gdGhlIGtleSBzdG9yZSwgd2hpbGUgY29weWluZyBpdCB0byB0aGUgQUVTIGVuZ2luZS4gVGhlIHZhbHVlIG9mIHRoaXMKKy8vIHJlZ2lzdGVyIGlzIGhlbGQgdW50aWwgaXQgaXMgY2xlYXJlZCB2aWEgSVJRQ0xSLktFWV9TVF9SRF9FUlIuCisvLyBOb3RlOiBUaGlzIGVycm9yIGlzIGFzc2VydGVkIGlmIGEga2V5IGxvY2F0aW9uIGlzIHNlbGVjdGVkIGluIHRoZSBrZXkgc3RvcmUKKy8vIHRoYXQgaXMgbm90IGF2YWlsYWJsZS4KKy8vIE5vdGU6IFRoaXMgaXMgbm90IGFuIGludGVycnVwdCBzb3VyY2UuCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX0tFWV9TVF9SRF9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfS0VZX1NUX1JEX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9LRVlfU1RfUkRfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX0tFWV9TVF9SRF9FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgICBbMV0gRE1BX0lOX0RPTkUKKy8vCisvLyBUaGlzIGJpdCByZXR1cm5zIHRoZSBzdGF0dXMgb2YgRE1BIGRhdGEgaW4gZG9uZSBpbnRlcnJ1cHQuCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX0RNQV9JTl9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfRE1BX0lOX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9ETUFfSU5fRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX0RNQV9JTl9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUkVTVUxUX0FWQUlMCisvLworLy8gVGhpcyBiaXQgaXMgc2V0IGhpZ2ggd2hlbiB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwgaGFzIGEgcmVzdWx0IGF2YWlsYWJsZS4KKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfUkVTVUxUX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9SRVNVTFRfQVZBSUxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX1JFU1VMVF9BVkFJTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfUkVTVUxUX0FWQUlMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0hXVkVSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoyNF0gSFdfTUFKT1JfVkVSCisvLworLy8gTWFqb3IgdmVyc2lvbiBudW1iZXIKKyNkZWZpbmUgQ1JZUFRPX0hXVkVSX0hXX01BSk9SX1ZFUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUllQVE9fSFdWRVJfSFdfTUFKT1JfVkVSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIENSWVBUT19IV1ZFUl9IV19NQUpPUl9WRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoyMF0gSFdfTUlOT1JfVkVSCisvLworLy8gTWlub3IgdmVyc2lvbiBudW1iZXIKKyNkZWZpbmUgQ1JZUFRPX0hXVkVSX0hXX01JTk9SX1ZFUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUllQVE9fSFdWRVJfSFdfTUlOT1JfVkVSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAwMDAwCisjZGVmaW5lIENSWVBUT19IV1ZFUl9IV19NSU5PUl9WRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6IFsxOToxNl0gSFdfUEFUQ0hfTFZMCisvLworLy8gUGF0Y2ggbGV2ZWwsIHN0YXJ0cyBhdCAwIGF0IGZpcnN0IGRlbGl2ZXJ5IG9mIHRoaXMgdmVyc2lvbi4KKyNkZWZpbmUgQ1JZUFRPX0hXVkVSX0hXX1BBVENIX0xWTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUllQVE9fSFdWRVJfSFdfUEFUQ0hfTFZMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIENSWVBUT19IV1ZFUl9IV19QQVRDSF9MVkxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gVkVSX05VTV9DT01QTAorLy8KKy8vIFRoZXNlIGJpdHMgc2ltcGx5IGNvbnRhaW4gdGhlIGNvbXBsZW1lbnQgb2YgVkVSX05VTSAoMHg4NyksIHVzZWQgYnkgYSBkcml2ZXIKKy8vIHRvIGFzY2VydGFpbiB0aGF0IHRoZSBDcnlwdG8gcGVyaXBoZXJhbCByZWdpc3RlciBpcyBpbmRlZWQgcmVhZC4KKyNkZWZpbmUgQ1JZUFRPX0hXVkVSX1ZFUl9OVU1fQ09NUExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUllQVE9fSFdWRVJfVkVSX05VTV9DT01QTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENSWVBUT19IV1ZFUl9WRVJfTlVNX0NPTVBMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gVkVSX05VTQorLy8KKy8vIFRoZSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIENyeXB0byBwZXJpcGhlcmFsLCB0aGlzIGZpZWxkIGNvbnRhaW5zIHRoZSB2YWx1ZQorLy8gMTIwIChkZWNpbWFsKSBvciAweDc4LgorI2RlZmluZSBDUllQVE9fSFdWRVJfVkVSX05VTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENSWVBUT19IV1ZFUl9WRVJfTlVNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ1JZUFRPX0hXVkVSX1ZFUl9OVU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0NSWVBUT19fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19kZGkuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2RkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNTk4MWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19kZGkuaApAQCAtMCwwICsxLDE5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2RkaS5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNC0yMSAxMjoxNTo1NiArMDIwMCAoVGh1LCAyMSBBcHIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjExNgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0RESV9IX18KKyNkZWZpbmUgX19IV19ERElfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgbWFjcm9zIGZvciBjb250cm9sbGluZyB0aGUgRERJIG1hc3RlciBhbmQKKy8vIGFjY2Vzc2luZyBEREkgU2xhdmUgcmVnaXN0ZXJzIHZpYSB0aGUgRERJIE1hc3Rlci4KKy8vIFRoZXJlIGFyZSAzIGNhdGVnb3JpZXMgb2YgbWFjcm9zIGluIHRoaXMgZmlsZToKKy8vICAgICAgICAgICAgICAgICAtIG1hY3JvcyB0aGF0IHByb3ZpZGUgYW4gb2Zmc2V0IHRvIGEgcmVnaXN0ZXIKKy8vICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgd2l0aGluIHRoZSBEREkgTWFzdGVyIGl0c2VsZi4KKy8vICAgICAgICAgICAgICAgICAtIG1hY3JvcyB0aGF0IGRlZmluZSBiaXRzIG9yIGJpdGZpZWxkcworLy8gICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBEREkgTWFzdGVyIFJlZ2lzdGVycy4KKy8vICAgICAgICAgICAgICAgICAtIG1hY3JvcyB0aGF0IHByb3ZpZGUgYW4gImluc3RydWN0aW9uIG9mZnNldCIKKy8vICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIHVzZWQgd2hlbiBhY2Nlc3NpbmcgYSBEREkgU2xhdmUuCisvLworLy8gVGhlIG1hY3JvcyB0aGF0IHRoYXQgcHJvdmlkZSBEREkgTWFzdGVyIHJlZ2lzdGVyIG9mZnNldHMgYW5kCisvLyBkZWZpbmUgYml0cyBhbmQgYml0ZmllbGRzIGZvciB0aG9zZSByZWdpc3RlcnMgYXJlIHRoZSB0eXBpY2FsCisvLyBtYWNyb3MgdGhhdCBhcHBlYXIgaW4gbW9zdCBod188bW9kdWxlPi5oIGhlYWRlciBmaWxlcy4gIEluCisvLyB0aGUgZm9sbG93aW5nIGV4YW1wbGUgRERJX09fQ0ZHIGlzIGEgbWFjcm8gZm9yIGEKKy8vIHJlZ2lzdGVyIG9mZnNldCBhbmQgRERJX0NGR19XQUlURk9SQUNLIGlzIGEgbWFjcm8gZm9yCisvLyBhIGJpdCBpbiB0aGF0IHJlZ2lzdGVyLiBUaGlzIGV4YW1wbGUgY29kZSB3aWxsIHNldCB0aGUgV0FJVEZPUkFDSworLy8gYml0IGluIHJlZ2lzdGVyIERESV9PX0NGRyBvZiB0aGUgRERJIE1hc3Rlci4gKE5vdGU6IHRoaXMKKy8vIGFjY2VzcyB0aGUgTWFzdGVyIG5vdCB0aGUgU2xhdmUpLgorLy8KKy8vICAgIEhXUkVHKEFVWF9PU0NERElfQkFTRSArIERESV9PX0NGRykgfD0gRERJX0NGR19XQUlURk9SQUNLOworLy8KKy8vCisvLyBUaGUgImluc3RydWN0aW9uIG9mZnNldCIgbWFjcm9zIGFyZSB1c2VkIHRvIHBhc3MgYW4gaW5zdHJ1Y3Rpb24gdG8KKy8vIHRoZSBEREkgTWFzdGVyIHdoZW4gYWNjZXNzaW5nIERESSBzbGF2ZSByZWdpc3RlcnMuIFRoZXNlIG1hY3JvcyBhcmUKKy8vIG9ubHkgdXNlZCB3aGVuIGFjY2Vzc2luZyBEREkgU2xhdmUgUmVnaXN0ZXJzLiAoUmVtZW1iZXIgRERJCisvLyBNYXN0ZXIgUmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBub3JtYWxseSkuCisvLworLy8gVGhlIGluc3RydWN0aW9ucyBzdXBwb3J0ZWQgd2hlbiBhY2Nlc3NpbmcgYSBEREkgU2xhdmUgUmVnc2l0ZXIgZm9sbG93OgorLy8gICAgICAgIC0gRGlyZWN0IEFjY2VzcyB0byBhIERESSBTbGF2ZSByZWdpc3Rlci4gSS5lLiByZWFkIG9yCisvLyAgICAgICAgICB3cml0ZSB0aGUgcmVnaXN0ZXIuCisvLyAgICAgICAgLSBTZXQgdGhlIHNwZWNpZmllZCBiaXRzIGluIGEgRERJIFNsYXZlIHJlZ2lzdGVyLgorLy8gICAgICAgIC0gQ2xlYXIgdGhlIHNwZWNpZmllZCBiaXRzIGluIGEgRERJIFNsYXZlIHJlZ2lzdGVyLgorLy8gICAgICAgIC0gTWFzayB3cml0ZSBvZiA0IGJpdHMgdG8gdGhlIGEgRERJIFNsYXZlIHJlZ2lzdGVyLgorLy8gICAgICAgIC0gTWFzayB3cml0ZSBvZiA4IGJpdHMgdG8gdGhlIGEgRERJIFNsYXZlIHJlZ2lzdGVyLgorLy8gICAgICAgIC0gTWFzayB3cml0ZSBvZiAxNiBiaXRzIHRvIHRoZSBhIERESSBTbGF2ZSByZWdpc3Rlci4KKy8vCisvLyBOb3RlOiBvbmx5IHRoZSAiRGlyZWN0IEFjY2VzcyIgb2Zmc2V0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVhZGluZworLy8gYSBEREkgU2xhdmUgcmVnaXN0ZXIuIE9ubHkgOC0gYW5kIDE2LWJpdCByZWFkcyBhcmUgc3VwcG9ydGVkLgorLy8KKy8vIFRoZSBnZW5lcmljIGZvcm1hdCBvZiB1c2luZyB0aGlzIG1hcmNvcyBmb3IgYSByZWFkIGZvbGxvd3M6CisvLyAgICAgICAvLyByZWFkIGxvdyAxNi1iaXRzIGluIERESV9TTEFWRV9PRkYKKy8vICAgICAgIG15dXNob3J0dmFyID0gSFdSRUdIKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19ESVIpOworLy8KKy8vICAgICAgIC8vIHJlYWQgaGlnaCAxNi1iaXRzIGluIERESV9TTEFWRV9PRkYKKy8vICAgICAgIC8vIGFkZCAyIGZvciBkYXRhWzMxOjE2XQorLy8gICAgICAgbXl1c2hvcnR2YXIgPSBIV1JFR0goRERJX01BU1RFUl9CQVNFICsgRERJX1NMQVZFX09GRiArIDIgKyBERElfT19ESVIpOworCisvLyAgICAgICAvLyByZWFkIGRhdGFbMzE6MjRdIGJ5dGUgaW4gRERJX1NMQVZFX09GRgorLy8gICAgICAgLy8gYWRkIDMgZm9yIGRhdGFbMzE6MjRdCisvLyAgICAgICBteXVjaGFyID0gSFdSRUdCKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyAzICsgRERJX09fRElSKTsKKy8vCisvLyBOb3RlczogSW4gdGhlIGFib3ZlIGV4YW1wbGU6CisvLyAgICAgLSBERElfTUFTVEVSX0JBU0UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgRERJIE1hc3RlciBkZWZpbmVkCisvLyAgICAgICBpbiB0aGUgaHdfbWVtbWFwLmggaGVhZGVyIGZpbGUuCisvLyAgICAgLSBERElfU0xBVkVfT0ZGIGlzIHRoZSBEREkgU2xhdmUgb2Zmc2V0IGRlZmluZWQgaW4gdGhlCisvLyAgICAgICBod188ZGRpX3NsYXZlPi5oIGhlYWRlciBmaWxlIChlLmcuIGh3X29zY190b3AuaCBmb3IgdGhlIG9zY3NjCisvLyAgICAgICBvc2NpbGxhdG9yIG1vZHVsZXMuCisvLyAgICAgLSBERElfT19ESVIgaXMgdGhlICJpbnN0cnVjdGlvbiBvZmZzZXQiIG1hY3JvIGRlZmluZWQgaW4gdGhpcworLy8gICAgICAgZmlsZSB0aGF0IHNwZWNpZmllcyB0aGUgRGlyZWN0IEFjY2VzcyBpbnN0cnVjdGlvbi4KKy8vCisvLyBXcml0ZXMgY2FuIHVzZSBhbnkgb2YgdGhlICJpbnN0cnVjdGlvbiBtYWNyb3MiLgorLy8gVGhlIGZvbGxvd2luZyBleGFtcGxlcyBkbyBhICJkaXJlY3Qgd3JpdGUiIHRvIERESSBTbGF2ZSByZWdpc3RlcgorLy8gRERJX1NMQVZFX09GRiB1c2luZyBkaWZmZXJlbnQgc2l6ZSBvcGVyYW5kczoKKy8vCisvLyAgICAgLy8gLS0tLS0tLS0tLSBESVJFQ1QgV1JJVEVTIC0tLS0tLS0tLS0KKy8vICAgICAvLyBXcml0ZSAzMi1iaXRzIGFsaWduZWQKKy8vICAgICBIV1JFRyhERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fRElSKSA9IDB4MTIzNDU2Nzg7CisKKy8vICAgICAvLyBXcml0ZSAxNi1iaXRzIGFsaWduZWQgdG8gaGlnaCAxNi1iaXRzIHRoZW4gbG93IDE2LWJpdHMKKy8vICAgICAvLyBBZGQgMiB0byBnZXQgdG8gaGlnaCAxNi1iaXRzLgorLy8gICAgIEhXUkVHSChERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fRElSICsgMikgPSAweGFiY2Q7CisvLyAgICAgSFdSRUdIKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19ESVIpID0gMHhlZjAxOworLy8KKy8vICAgICAvLyBXcml0ZSBlYWNoIGJ5dGUgYXQgRERJX1NMQVZFX09GRiwgb25lIGF0IGEgdGltZS4KKy8vICAgICAvLyBBZGQgMSwyLG9yIDMgdG8gZ2V0IHRvIGJ5dGVzIDEsMiwgb3IgMy4KKy8vICAgICBIV1JFR0IoRERJX01BU1RFUl9CQVNFICsgRERJX1NMQVZFX09GRiArIERESV9PX0RJUikgPSAweDMzOworLy8gICAgIEhXUkVHQihERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fRElSICsgMSkgPSAweDQ0OworLy8gICAgIEhXUkVHQihERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fRElSICsgMikgPSAweDU1OworLy8gICAgIEhXUkVHQihERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fRElSICsgMykgPSAweDY2OworLy8KKy8vICAgICAvLyAtLS0tLS0tLS0tIFNFVC9DTFIgLS0tLS0tLS0tLQorLy8gICAgIFRoZSBzZXQgYW5kIGNsZWFyIGZ1bmN0aW9ucyBiZWhhdmUgc2ltaWxhcmx5IHRvIGVhY2hvdGhlci4gRWFjaAorLy8gICAgIGNhbiBiZSBwZXJmb3JtZWQgb24gYW4gOC0sIDE2LSwgb3IgMzItYml0IG9wZXJhbmQuCisvLyAgICAgRXhhbXBsZXMgZm9sbG93OgorLy8gICAgIC8vIFNldCBhbGwgb2RkIGJpdHMgaW4gYSAzMi1iaXQgd29yZHMKKy8vICAgICBIV1JFRyhERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fU0VUKSA9IDB4YWFhYWFhYWE7CisvLworLy8gICAgIC8vIENsZWFyIGFsbCBiaXRzIGluIGJ5dGUgMiAoZGF0YVsyMzoxNl0pIHVzaW5nIDMyLWJpdCBvcGVyYW5kCisvLyAgICAgSFdSRUcoRERJX01BU1RFUl9CQVNFICsgRERJX1NMQVZFX09GRiArIERESV9PX0NMUikgPSAweDAwZmYwMDAwOworLy8KKy8vICAgICAvLyBTZXQgZXZlbiBiaXRzIGluIGJ5dGUgMiAoZGF0YVsyMzoxNl0pIHVzaW5nIDgtYml0IG9wZXJhbmQKKy8vICAgICBIV1JFR0IoRERJX01BU1RFUl9CQVNFICsgRERJX1NMQVZFX09GRiAgKyAyICsgRERJX09fQ0xSKSA9IDB4NTU7CisvLworLy8gICAgIC8vIC0tLS0tLS0tLS0gTUFTS0VEIFdSSVRFUyAtLS0tLS0tLS0tCisvLyAgICAgVGhlIG1hc2sgd3JpdGVzIGFyZSBhIGJpdCBkaWZmZXJlbnQuIFRoZXkgb3BlcmF0ZSBvbiBuaWJibGVzLAorLy8gICAgIGJ5dGVzLCBhbmQgMTYtYml0IGVsZW1lbnRzLiBUd28gb3BlcmFuZHMgYXJlIHJlcXVpcmVkOyBhICdtYXNrJworLy8gICAgIGFuZCAnZGF0YSc7IFRoZSBvcGVyYW5kcyBhcmUgY29uY2F0ZW5hdGVkIGFuZCB3cml0dGVuIHRvIHRoZSBtYXN0ZXIuCisvLyAgICAgZS5nLiB0aGUgbWFzayBhbmQgZGF0YSBhcmUgY29tYmluZWQgYXMgZm9sbG93cyBmb3IgYSAxNiBiaXQgbWFza2VkCisvLyAgICAgd3JpdGU6CisvLyAgICAgICAgICAgKG1hc2sgPDwgMTYpIHwgZGF0YTsKKy8vICAgICBFeGFtcGxlcyBmb2xsb3c6CisvLworLy8gICAgIC8vIFdyaXRlIDU1NTUgdG8gbG93IDE2LWJpdHMgb2YgRERJX1NMQVZFX09GRiByZWdpc3RlcgorLy8gICAgIC8vIGEgbG9uZyB3cml0ZSBpcyBuZWVkZWQgKDMyLWJpdHMpLgorLy8gICAgIEhXUkVHKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19NQVNLMTZCKSA9IDB4ZmZmZjU1NTU7CisKKy8vICAgICAvLyBXcml0ZSAxQUEgdG8gZGF0YSBiaXRzIDI0OjE2IGluIGhpZ2ggMTYtYml0cyBvZiBERElfU0xBVkVfT0ZGIHJlZ2lzdGVyCisvLyAgICAgLy8gTm90ZSBhZGQgNCBmb3IgaGlnaCAxNi1iaXRzIGF0IERESV9TTEFWRV9PRkY7IG1hc2sgaXMgMWZmIQorLy8gICAgIEhXUkVHKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19NQVNLMTZCICsgNCkgPSAweDAxZmYwMWFhOworLy8KKy8vICAgICAvLyBEbyBhbiA4IGJpdCBtYXNrZWQgd3JpdGUgb2YgMDAgdG8gbG93IGJ5dGUgb2YgcmVnaXN0ZXIgKGRhdGFbNzowXSkuCisvLyAgICAgLy8gYSBzaG9ydCB3cml0ZSBpcyBuZWVkZWQgKDE2LWJpdHMpLgorLy8gICAgIEhXUkVHSChERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fTUFTSzE2QikgPSAweGZmMDA7CisvLworLy8gICAgIC8vIERvIGFuIDggYml0IG1hc2tlZCB3cml0ZSBvZiAxMSB0byBieXRlIDEgb2YgcmVnaXN0ZXIgKGRhdGFbMTU6OF0pLgorLy8gICAgIC8vIGFkZCAyIHRvIGdldCB0byBieXRlIDEuCisvLyAgICAgSFdSRUdIKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19NQVNLMTZCICsgMikgPSAweGZmMTE7CisvLworLy8gICAgIC8vIERvIGFuIDggYml0IG1hc2tlZCB3cml0ZSBvZiAzMyB0byBoaWdoIGJ5dGUgb2YgcmVnaXN0ZXIgKGRhdGFbMzE6MjRdKS4KKy8vICAgICAvLyBhZGQgNiB0byBnZXQgdG8gYnl0ZSAzLgorLy8gICAgIEhXUkVHSChERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fTUFTSzE2QiArIDYpID0gMHhmZjMzOworLy8KKy8vICAgICAvLyBEbyBhbiA0IGJpdCBtYXNrZWQgd3JpdGUgKE5pYmJsZSkgb2YgNyB0byBkYXRhWzM6MF0pLgorLy8gICAgIC8vIEJ5dGUgd3JpdGUgaXMgbmVlZGVkLgorLy8gICAgIEhXUkVHQihERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fTUFTSzE2QikgPSAweGY3OworLy8KKy8vICAgICAvLyBEbyBhbiA0IGJpdCBtYXNrZWQgd3JpdGUgb2YgNCB0byBkYXRhWzc6NF0pLgorLy8gICAgIC8vIEFkZCAxIGZvciBuZXh0IG5pYmJsZQorLy8gICAgIEhXUkVHQihERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fTUFTSzE2QiArIDEpID0gMHhmNDsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgRERJIG1hc3RlciBpbnN0cnVjdGlvbiBvZmZzZXRzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgRERJX09fRElSICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIE9mZnNldCBmb3IgdGhlIGRpcmVjdCBhY2Nlc3MgaW5zdHJ1Y3Rpb24KKyNkZWZpbmUgRERJX09fU0VUICAgICAgICAgICAgIDB4MDAwMDAwNDAgIC8vIE9mZnNldCBmb3IgJ1NldCcgaW5zdHJ1Y3Rpb24uCisjZGVmaW5lIERESV9PX0NMUiAgICAgICAgICAgICAweDAwMDAwMDgwICAvLyBPZmZzZXQgZm9yICdDbGVhcicgaW5zdHJ1Y3Rpb24uCisjZGVmaW5lIERESV9PX01BU0s0QiAgICAgICAgICAweDAwMDAwMTAwICAvLyBPZmZzZXQgZm9yIDQtYml0IG1hc2tlZCBhY2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIGJpdFtuXSBpcyB3cml0dGVuIGlmIG1hc2sgYml0W25dIGlzIHNldCAoJzEnKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdHMgNzo0IGFyZSBtYXNrLiBCaXRzIDM6MCBhcmUgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcXVpcmVzICdieXRlJyB3cml0ZS4KKyNkZWZpbmUgRERJX09fTUFTSzhCICAgICAgICAgIDB4MDAwMDAxODAgIC8vIE9mZnNldCBmb3IgOC1iaXQgbWFza2VkIGFjY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgYml0W25dIGlzIHdyaXR0ZW4gaWYgbWFzayBiaXRbbl0gaXMgc2V0ICgnMScpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0cyAxNTo4IGFyZSBtYXNrLiBCaXRzIDc6MCBhcmUgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcXVpcmVzICdzaG9ydCcgd3JpdGUuCisjZGVmaW5lIERESV9PX01BU0sxNkIgICAgICAgICAweDAwMDAwMjAwICAvLyBPZmZzZXQgZm9yIDE2LWJpdCBtYXNrZWQgYWNjZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBiaXRbbl0gaXMgd3JpdHRlbiBpZiBtYXNrIGJpdFtuXSBpcyBzZXQgKCcxJykuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXRzIDMxOjE2IGFyZSBtYXNrLiBCaXRzIDE1OjAgYXJlIGRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXF1aXJlcyAnbG9uZycgd3JpdGUuCisKKworCisjZW5kaWYgLy8gX19IV19ERElfSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19kZGlfMF9vc2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2RkaV8wX29zYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YWRkYzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19kZGlfMF9vc2MuaApAQCAtMCwwICsxLDEwNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19kZGlfMF9vc2NfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMDMgMDk6NTE6NTMgKzAyMDAgKFR1ZSwgMDMgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDYyMzkKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfRERJXzBfT1NDX0hfXworI2RlZmluZSBfX0hXX0RESV8wX09TQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBERElfMF9PU0MgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQ29udHJvbCAwCisjZGVmaW5lIERESV8wX09TQ19PX0NUTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gQ29udHJvbCAxCisjZGVmaW5lIERESV8wX09TQ19PX0NUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gUkFEQyBFeHRlcm5hbCBDb25maWd1cmF0aW9uCisjZGVmaW5lIERESV8wX09TQ19PX1JBRENFWFRDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gQW1wbGl0dWRlIENvbXBlbnNhdGlvbiBDb250cm9sCisjZGVmaW5lIERESV8wX09TQ19PX0FNUENPTVBDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gQW1wbGl0dWRlIENvbXBlbnNhdGlvbiBUaHJlYXNob2xkIDEKKyNkZWZpbmUgRERJXzBfT1NDX09fQU1QQ09NUFRIMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBBbXBsaXR1ZGUgQ29tcGVuc2F0aW9uIFRocmVhc2hvbGQgMgorI2RlZmluZSBERElfMF9PU0NfT19BTVBDT01QVEgyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIEFuYWxvZyBCeXBhc3MgVmFsdWVzIDEKKyNkZWZpbmUgRERJXzBfT1NDX09fQU5BQllQQVNTVkFMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBERElfMF9PU0NfT19BTkFCWVBBU1NWQUwyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIEFuYWxvZyBUZXN0IENvbnRyb2wKKyNkZWZpbmUgRERJXzBfT1NDX09fQVRFU1RDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBBREMgRG91YmxlciBOYW5vYW1wIENvbnRyb2wKKyNkZWZpbmUgRERJXzBfT1NDX09fQURDRE9VQkxFUk5BTk9BTVBDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBYT1NDSEYgQ29udHJvbAorI2RlZmluZSBERElfMF9PU0NfT19YT1NDSEZDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIExvdyBGcmVxdWVuY3kgT3NjaWxsYXRvciBDb250cm9sCisjZGVmaW5lIERESV8wX09TQ19PX0xGT1NDQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8gUkNPU0NIRiBDb250cm9sCisjZGVmaW5lIERESV8wX09TQ19PX1JDT1NDSEZDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKworLy8gU3RhdHVzIDAKKyNkZWZpbmUgRERJXzBfT1NDX09fU1RBVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorCisvLyBTdGF0dXMgMQorI2RlZmluZSBERElfMF9PU0NfT19TVEFUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisKKy8vIFN0YXR1cyAyCisjZGVmaW5lIERESV8wX09TQ19PX1NUQVQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19DVEwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gWFRBTF9JU18yNE0KKy8vCisvLyBTZXQgYmFzZWQgb24gdGhlIGFjY3VyYXRlIGhpZ2ggZnJlcXVlbmN5IFhUQUwuCisvLyBFTlVNczoKKy8vIDI0TSAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gNDhNICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1hUQUxfSVNfMjRNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfWFRBTF9JU18yNE1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9YVEFMX0lTXzI0TV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1hUQUxfSVNfMjRNXzI0TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfWFRBTF9JU18yNE1fNDhNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzI5XSBCWVBBU1NfWE9TQ19MRl9DTEtfUVVBTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0JZUEFTU19YT1NDX0xGX0NMS19RVUFMICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQllQQVNTX1hPU0NfTEZfQ0xLX1FVQUxfTSAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9CWVBBU1NfWE9TQ19MRl9DTEtfUVVBTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIEJZUEFTU19SQ09TQ19MRl9DTEtfUVVBTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0JZUEFTU19SQ09TQ19MRl9DTEtfUVVBTCAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQllQQVNTX1JDT1NDX0xGX0NMS19RVUFMX00gICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9CWVBBU1NfUkNPU0NfTEZfQ0xLX1FVQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjZdIERPVUJMRVJfU1RBUlRfRFVSQVRJT04KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9ET1VCTEVSX1NUQVJUX0RVUkFUSU9OX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0RPVUJMRVJfU1RBUlRfRFVSQVRJT05fTSAgICAgICAgICAgICAgICAgICAgIDB4MEMwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfRE9VQkxFUl9TVEFSVF9EVVJBVElPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBET1VCTEVSX1JFU0VUX0RVUkFUSU9OCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfRE9VQkxFUl9SRVNFVF9EVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9ET1VCTEVSX1JFU0VUX0RVUkFUSU9OX00gICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0RPVUJMRVJfUkVTRVRfRFVSQVRJT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyMl0gRk9SQ0VfS0lDS1NUQVJUX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfRk9SQ0VfS0lDS1NUQVJUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9GT1JDRV9LSUNLU1RBUlRfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0ZPUkNFX0tJQ0tTVEFSVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsxNl0gQUxMT1dfU0NMS19IRl9TV0lUQ0hJTkcKKy8vCisvLyAwOiBEZWZhdWx0IC0gU3dpdGNoaW5nIG9mIEhGIGNsb2NrIHNvdXJjZSBpcyBkaXNhYmxlZCAuCisvLyAxOiBBbGxvd3Mgc3d0aWNoaW5nIG9mIHNjbGtfaGYgc291cmNlLgorLy8KKy8vIFByb3ZpZGVkIHRvIHByZXZlbnQgc3dpdGNoaW5nIG9mIHRoZSBTQ0xLX0hGIHNvdXJjZSB3aGVuIHJ1bm5pbmcgZnJvbSBmbGFzaAorLy8gKGEgbG9uZyBwZXJpb2QgZHVyaW5nIHN3aXRjaGluZyBjb3VsZCBjb3JydXB0IGZsYXNoKS4gV2hlbiBzY2xrX2hmCisvLyBzd2l0Y2hpbmcgaXMgZGlzYWJsZWQsIGEgbmV3IHNvdXJjZSBjYW4gYmUgc3RhcnRlZCB3aGVuIFNDTEtfSEZfU1JDX1NFTCBpcworLy8gY2hhbmdlZCwgYnV0IHRoZSBzd2l0Y2ggd2lsbCBub3Qgb2NjdXIgdW50aWwgdGhpcyBiaXQgaXMgc2V0LiAgVGhpcyBiaXQKKy8vIHNob3VsZCBiZSBzZXQgdG8gZW5hYmxlIGNsb2NrIHN3aXRjaGluZyBhZnRlciBTVEFUMC5QRU5ESU5HU0NMS0hGU1dJVENISU5HCisvLyBpbmRpY2F0ZXMgIHRoZSBuZXcgSEYgY2xvY2sgaXMgcmVhZHkuIFdoZW4gc3dpdGNoaW5nIGNvbXBsZXRlcyAoYWxzbworLy8gaW5kaWNhdGVkIGJ5IFNUQVQwLlBFTkRJTkdTQ0xLSEZTV0lUQ0hJTkcpICBzY2xrX2hmIHN3aXRjaGluZyBzaG91bGQgYmUKKy8vIGRpc2FibGVkIHRvIHByZXZlbnQgZmxhc2ggY29ycnVwdGlvbi4gIFN3aXRjaGluZyBzaG91bGQgbm90IGJlIGVuYWJsZWQgd2hlbgorLy8gcnVubmluZyBmcm9tIGZsYXNoLgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9BTExPV19TQ0xLX0hGX1NXSVRDSElORyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0FMTE9XX1NDTEtfSEZfU1dJVENISU5HX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQUxMT1dfU0NMS19IRl9TV0lUQ0hJTkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE0XSBIUE9TQ19NT0RFX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfSFBPU0NfTU9ERV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9IUE9TQ19NT0RFX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0hQT1NDX01PREVfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxMl0gUkNPU0NfTEZfVFJJTU1FRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1JDT1NDX0xGX1RSSU1NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfUkNPU0NfTEZfVFJJTU1FRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9SQ09TQ19MRl9UUklNTUVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIFhPU0NfSEZfUE9XRVJfTU9ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1hPU0NfSEZfUE9XRVJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfWE9TQ19IRl9QT1dFUl9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9YT1NDX0hGX1BPV0VSX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIFhPU0NfTEZfRElHX0JZUEFTUworLy8KKy8vIEJ5cGFzcyBYT1NDX0xGIGFuZCB1c2UgdGhlIGRpZ2l0YWwgaW5wdXQgY2xvY2sgZnJvbSBBT04gZm9yIHRoZSB4b3NjX2xmCisvLyBjbG9jay4uCisvLworLy8gMDogVXNlIDMya0h6IFhPU0MgYXMgeG9zY19sZiBjbG9jayBzb3VyY2UKKy8vIDE6IFVzZSBkaWdpdGFsIGlucHV0IChmcm9tIEFPTikgYXMgeG9zY19sZiBjbG9jayBzb3VyY2UuCisvLworLy8gVGhpcyBiaXQgd2lsbCBvbmx5IGhhdmUgZWZmZWN0IHdoZW4gU0NMS19MRl9TUkNfU0VMIGlzIHNlbGVjdGluZyB0aGUgeG9zY19sZgorLy8gYXMgdGhlIHNjbGtfbGYgc291cmNlLiBUaGUgbXV4aW5nIHBlcmZvcm1lZCBieSB0aGlzIGJpdCBpcyBub3QgZ2xpdGNoIGZyZWUuCisvLyBUaGUgZm9sbG93aW5nIHByb2NlZHVyZSBzaG91bGQgYmUgZm9sbG93ZWQgd2hlbiBjaGFuZ2luZyB0aGlzIGZpZWxkIHRvIGF2b2lkCisvLyBnbGl0Y2hlcyBvbiBzY2xrX2xmLi4KKy8vCisvLyAxKSBTZXQgU0NMS19MRl9TUkNfU0VMIHRvIHNlbGVjdCBhbnkgc291cmNlIG90aGVyIHRoYW4gdGhlIHhvc2NfbGYgY2xvY2sKKy8vIHNvdXJjZS4KKy8vIDIpIFNldCBvciBjbGVhciB0aGlzIGJpdCB0byBieXBhc3Mgb3Igbm90IGJ5cGFzcyB0aGUgeG9zY19sZi4KKy8vIDMpIFNldCBTQ0xLX0xGX1NSQ19TRUwgdG8gdXNlIHhvc2NfbGYuCisvLworLy8gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBlaXRoZXIgdGhlIHJjb3NjX2hmIG9yIHhvc2NfaGYgKHdoaWNoZXZlciBpcworLy8gY3VycmVudGx5IGFjdGl2ZSkgYmUgc2VsZWN0ZWQgYXMgdGhlIHNvdXJjZSBpbiBzdGVwIDEgYWJvdmUuIFRoaXMgcHJvdmlkZXMgYQorLy8gZmFzdGVyIGNsb2NrIGNoYW5nZS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfWE9TQ19MRl9ESUdfQllQQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9YT1NDX0xGX0RJR19CWVBBU1NfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1hPU0NfTEZfRElHX0JZUEFTU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gQ0xLX0xPU1NfRU4KKy8vCisvLyBFbmFibGUgY2xvY2sgbG9zcyBjaXJjdWl0IGFuZCBoZW5jZSB0aGUgaW5kaWNhdG9ycyB0byBzeXN0ZW0gY29udHJvbGxlci4KKy8vIENoZWNrcyBib3RoIFNDTEtfSEYgYW5kIFNDTEtfTEYgY2xvY2sgbG9zcyBpbmRpY2F0b3JzLgorLy8KKy8vIDA6IERpc2FibGUKKy8vIDE6IEVuYWJsZQorLy8KKy8vIENsb2NrIGxvc3MgZGV0ZWN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIGNoYW5naW5nIHRoZSBzY2xrX2xmIHNvdXJjZS4KKy8vIFNUQVQwLlNDTEtfTEZfU1JDIGNhbiBiZSBwb2xsZWQgdG8gZGV0ZXJtaW5lIHdoZW4gYSBjaGFuZ2UgdG8gYSBuZXcgc2Nsa19sZgorLy8gc291cmNlIGhhcyBjb21wbGV0ZWQuCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0NMS19MT1NTX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQ0xLX0xPU1NfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9DTEtfTE9TU19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgIFs4OjddIEFDTEtfVERDX1NSQ19TRUwKKy8vCisvLyBTb3VyY2Ugc2VsZWN0IGZvciBhY2xrX3RkYy4KKy8vCisvLyAwMDogUkNPU0NfSEYgKDQ4TUh6KQorLy8gMDE6IFJDT1NDX0hGICgyNE1IeikKKy8vIDEwOiBYT1NDX0hGICgyNE1IeikKKy8vIDExOiBOb3QgdXNlZAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9BQ0xLX1REQ19TUkNfU0VMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0FDTEtfVERDX1NSQ19TRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxODAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQUNMS19URENfU1JDX1NFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICBbNjo1XSBBQ0xLX1JFRl9TUkNfU0VMCisvLworLy8gU291cmNlIHNlbGVjdCBmb3IgYWNsa19yZWYKKy8vCisvLyAwMDogUkNPU0NfSEYgZGVzaXJ2ZWQgKDMxLjI1a0h6KQorLy8gMDE6IFhPU0NfSEYgZGVyaXZlZCAoMzEuMjVrSHopCisvLyAxMDogUkNPU0NfTEYgKDMya0h6KQorLy8gMTE6IFhPU0NfTEYgKDMyLjc2OGtIeikKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQUNMS19SRUZfU1JDX1NFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9BQ0xLX1JFRl9TUkNfU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0FDTEtfUkVGX1NSQ19TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzM6Ml0gU0NMS19MRl9TUkNfU0VMCisvLworLy8gU291cmNlIHNlbGVjdCBmb3Igc2Nsa19sZgorLy8gRU5VTXM6CisvLyBYT1NDTEYgICAgICAgICAgICAgICAgICAgTG93IGZyZXF1ZW5jeSBYT1NDCisvLyBSQ09TQ0xGICAgICAgICAgICAgICAgICAgTG93IGZyZXF1ZW5jeSBSQ09TQworLy8gWE9TQ0hGRExGICAgICAgICAgICAgICAgIExvdyBmcmVxdWVuY3kgY2xvY2sgZGVyaXZlZCBmcm9tIEhpZ2ggRnJlcXVlbmN5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgWE9TQworLy8gUkNPU0NIRkRMRiAgICAgICAgICAgICAgIExvdyBmcmVxdWVuY3kgY2xvY2sgZGVyaXZlZCBmcm9tIEhpZ2ggRnJlcXVlbmN5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkNPU0MKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19MRl9TUkNfU0VMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9TQ0xLX0xGX1NSQ19TRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1NDTEtfTEZfU1JDX1NFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19MRl9TUkNfU0VMX1hPU0NMRiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBERElfMF9PU0NfQ1RMMF9TQ0xLX0xGX1NSQ19TRUxfUkNPU0NMRiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERESV8wX09TQ19DVEwwX1NDTEtfTEZfU1JDX1NFTF9YT1NDSEZETEYgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19MRl9TUkNfU0VMX1JDT1NDSEZETEYgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBTQ0xLX01GX1NSQ19TRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBYQ09TQ0hGRE1GICAgICAgICAgICAgICAgTWVkaXVtIGZyZXF1ZW5jeSBjbG9jayBkZXJpdmVkIGZyb20gaGlnaCBmcmVxdWVuY3kKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBYT1NDLgorLy8gUkNPU0NIRkRNRiAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1NDTEtfTUZfU1JDX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19NRl9TUkNfU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9TQ0xLX01GX1NSQ19TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1NDTEtfTUZfU1JDX1NFTF9YQ09TQ0hGRE1GICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19NRl9TUkNfU0VMX1JDT1NDSEZETUYgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBTQ0xLX0hGX1NSQ19TRUwKKy8vCisvLyBTb3VyY2Ugc2VsZWN0IGZvciBzY2xrX2hmCisvLyBFTlVNczoKKy8vIFhPU0MgICAgICAgICAgICAgICAgICAgICBIaWdoIGZyZXF1ZW5jeSBYT1NDIGNsaworLy8gUkNPU0MgICAgICAgICAgICAgICAgICAgIEhpZ2ggZnJlcXVlbmN5IFJDT1NDIGNsaworI2RlZmluZSBERElfMF9PU0NfQ1RMMF9TQ0xLX0hGX1NSQ19TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1NDTEtfSEZfU1JDX1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19IRl9TUkNfU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9TQ0xLX0hGX1NSQ19TRUxfWE9TQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1NDTEtfSEZfU1JDX1NFTF9SQ09TQyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19DVEwxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyMjoxOF0gUkNPU0NIRkNUUklNRlJBQ1QKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQ1RMMV9SQ09TQ0hGQ1RSSU1GUkFDVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIERESV8wX09TQ19DVEwxX1JDT1NDSEZDVFJJTUZSQUNUX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3QzAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDFfUkNPU0NIRkNUUklNRlJBQ1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBSQ09TQ0hGQ1RSSU1GUkFDVF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19DVEwxX1JDT1NDSEZDVFJJTUZSQUNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDFfUkNPU0NIRkNUUklNRlJBQ1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMV9SQ09TQ0hGQ1RSSU1GUkFDVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgIFsxOjBdIFhPU0NfSEZfRkFTVF9TVEFSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19DVEwxX1hPU0NfSEZfRkFTVF9TVEFSVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDFfWE9TQ19IRl9GQVNUX1NUQVJUX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBERElfMF9PU0NfQ1RMMV9YT1NDX0hGX0ZBU1RfU1RBUlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRERJXzBfT1NDX09fUkFEQ0VYVENGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjJdIEhQTV9JQklBU19XQUlUX0NOVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19SQURDRVhUQ0ZHX0hQTV9JQklBU19XQUlUX0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgRERJXzBfT1NDX1JBRENFWFRDRkdfSFBNX0lCSUFTX1dBSVRfQ05UX00gICAgICAgICAgICAgICAgICAgMHhGRkMwMDAwMAorI2RlZmluZSBERElfMF9PU0NfUkFEQ0VYVENGR19IUE1fSUJJQVNfV0FJVF9DTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiBbMjE6MTZdIExQTV9JQklBU19XQUlUX0NOVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19SQURDRVhUQ0ZHX0xQTV9JQklBU19XQUlUX0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRERJXzBfT1NDX1JBRENFWFRDRkdfTFBNX0lCSUFTX1dBSVRfQ05UX00gICAgICAgICAgICAgICAgICAgMHgwMDNGMDAwMAorI2RlZmluZSBERElfMF9PU0NfUkFEQ0VYVENGR19MUE1fSUJJQVNfV0FJVF9DTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTU6MTJdIElEQUNfU1RFUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19SQURDRVhUQ0ZHX0lEQUNfU1RFUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRERJXzBfT1NDX1JBRENFWFRDRkdfSURBQ19TVEVQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBERElfMF9PU0NfUkFEQ0VYVENGR19JREFDX1NURVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjZdIFJBRENfREFDX1RICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX1JBRENFWFRDRkdfUkFEQ19EQUNfVEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBERElfMF9PU0NfUkFEQ0VYVENGR19SQURDX0RBQ19USF9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkMwCisjZGVmaW5lIERESV8wX09TQ19SQURDRVhUQ0ZHX1JBRENfREFDX1RIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gUkFEQ19NT0RFX0lTX1NBUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19SQURDRVhUQ0ZHX1JBRENfTU9ERV9JU19TQVIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRERJXzBfT1NDX1JBRENFWFRDRkdfUkFEQ19NT0RFX0lTX1NBUl9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBERElfMF9PU0NfUkFEQ0VYVENGR19SQURDX01PREVfSVNfU0FSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRERJXzBfT1NDX09fQU1QQ09NUENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEFNUENPTVBfUkVRX01PREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX1JFUV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfUkVRX01PREVfTSAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQU1QQ09NUF9SRVFfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogWzI5OjI4XSBBTVBDT01QX0ZTTV9VUERBVEVfUkFURQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIDI1MEtIWiAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gNTAwS0haICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyAxTUhaICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIDJNSFogICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX0ZTTV9VUERBVEVfUkFURV9XICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfRlNNX1VQREFURV9SQVRFX00gICAgICAgICAgICAgIDB4MzAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQU1QQ09NUF9GU01fVVBEQVRFX1JBVEVfUyAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX0ZTTV9VUERBVEVfUkFURV8yNTBLSFogICAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfRlNNX1VQREFURV9SQVRFXzUwMEtIWiAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQU1QQ09NUF9GU01fVVBEQVRFX1JBVEVfMU1IWiAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX0ZTTV9VUERBVEVfUkFURV8yTUhaICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMjddIEFNUENPTVBfU1dfQ1RSTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfU1dfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQU1QQ09NUF9TV19DVFJMX00gICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX1NXX0NUUkxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIEFNUENPTVBfU1dfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX1NXX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfU1dfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQU1QQ09NUF9TV19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogWzIzOjIwXSBJQklBU19PRkZTRVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU19PRkZTRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTX09GRlNFVF9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNfT0ZGU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogWzE5OjE2XSBJQklBU19JTklUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNfSU5JVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU19JTklUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTX0lOSVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gTFBNX0lCSUFTX1dBSVRfQ05UX0ZJTkFMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfTFBNX0lCSUFTX1dBSVRfQ05UX0ZJTkFMX1cgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9MUE1fSUJJQVNfV0FJVF9DTlRfRklOQUxfTSAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0xQTV9JQklBU19XQUlUX0NOVF9GSU5BTF9TICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6NF0gQ0FQX1NURVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9DQVBfU1RFUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0NBUF9TVEVQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQ0FQX1NURVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBJQklBU0NBUF9IUFRPTFBfT0xfQ05UCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNDQVBfSFBUT0xQX09MX0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU0NBUF9IUFRPTFBfT0xfQ05UX00gICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTQ0FQX0hQVE9MUF9PTF9DTlRfUyAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19BTVBDT01QVEgxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyMzoxOF0gSFBNUkFNUDNfTFRICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDFfSFBNUkFNUDNfTFRIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMV9IUE1SQU1QM19MVEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkMwMDAwCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgxX0hQTVJBTVAzX0xUSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNToxMF0gSFBNUkFNUDNfSFRICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDFfSFBNUkFNUDNfSFRIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMV9IUE1SQU1QM19IVEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGQzAwCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgxX0hQTVJBTVAzX0hUSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgWzk6Nl0gSUJJQVNDQVBfTFBUT0hQX09MX0NOVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgxX0lCSUFTQ0FQX0xQVE9IUF9PTF9DTlRfVyAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDFfSUJJQVNDQVBfTFBUT0hQX09MX0NOVF9NICAgICAgICAgICAgICAgMHgwMDAwMDNDMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMV9JQklBU0NBUF9MUFRPSFBfT0xfQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIEhQTVJBTVAxX1RICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDFfSFBNUkFNUDFfVEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMV9IUE1SQU1QMV9USF9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgxX0hQTVJBTVAxX1RIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19BTVBDT01QVEgyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNl0gTFBNVVBEQVRFX0xUSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgyX0xQTVVQREFURV9MVEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDJfTFBNVVBEQVRFX0xUSF9NICAgICAgICAgICAgICAgICAgICAgICAgMHhGQzAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMl9MUE1VUERBVEVfTFRIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiBbMjM6MThdIExQTVVQREFURV9IVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMl9MUE1VUERBVEVfSFRIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgyX0xQTVVQREFURV9IVEhfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGQzAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDJfTFBNVVBEQVRFX0hUSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE1OjEwXSBBRENfQ09NUF9BTVBUSF9MUE0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMl9BRENfQ09NUF9BTVBUSF9MUE1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgyX0FEQ19DT01QX0FNUFRIX0xQTV9NICAgICAgICAgICAgICAgICAgIDB4MDAwMEZDMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDJfQURDX0NPTVBfQU1QVEhfTFBNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICBbNzoyXSBBRENfQ09NUF9BTVBUSF9IUE0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMl9BRENfQ09NUF9BTVBUSF9IUE1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgyX0FEQ19DT01QX0FNUFRIX0hQTV9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkMKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDJfQURDX0NPTVBfQU1QVEhfSFBNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX0FOQUJZUEFTU1ZBTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE5OjE2XSBYT1NDX0hGX1JPV19RMTIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU5BQllQQVNTVkFMMV9YT1NDX0hGX1JPV19RMTJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIERESV8wX09TQ19BTkFCWVBBU1NWQUwxX1hPU0NfSEZfUk9XX1ExMl9NICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FOQUJZUEFTU1ZBTDFfWE9TQ19IRl9ST1dfUTEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTowXSBYT1NDX0hGX0NPTFVNTl9RMTIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU5BQllQQVNTVkFMMV9YT1NDX0hGX0NPTFVNTl9RMTJfVyAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIERESV8wX09TQ19BTkFCWVBBU1NWQUwxX1hPU0NfSEZfQ09MVU1OX1ExMl9NICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRERJXzBfT1NDX0FOQUJZUEFTU1ZBTDFfWE9TQ19IRl9DT0xVTU5fUTEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX0FOQUJZUEFTU1ZBTDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxMzowXSBYT1NDX0hGX0lCSUFTVEhFUk0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU5BQllQQVNTVkFMMl9YT1NDX0hGX0lCSUFTVEhFUk1fVyAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIERESV8wX09TQ19BTkFCWVBBU1NWQUwyX1hPU0NfSEZfSUJJQVNUSEVSTV9NICAgICAgICAgICAgICAgIDB4MDAwMDNGRkYKKyNkZWZpbmUgRERJXzBfT1NDX0FOQUJZUEFTU1ZBTDJfWE9TQ19IRl9JQklBU1RIRVJNX1MgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX0FURVNUQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyOV0gU0NMS19MRl9BVVhfRU4KKy8vCisvLyBFbmFibGUgMzIga0h6IGNsb2NrIHRvIEFVWF9DT01QQi4KKyNkZWZpbmUgRERJXzBfT1NDX0FURVNUQ1RMX1NDTEtfTEZfQVVYX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQVRFU1RDVExfU0NMS19MRl9BVVhfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19BVEVTVENUTF9TQ0xLX0xGX0FVWF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19BRENET1VCTEVSTkFOT0FNUENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIE5BTk9BTVBfQklBU19FTkFCTEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfTkFOT0FNUF9CSUFTX0VOQUJMRSAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9OQU5PQU1QX0JJQVNfRU5BQkxFX00gICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX05BTk9BTVBfQklBU19FTkFCTEVfUyAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIzXSBTUEFSRTIzCisvLworLy8gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZQorLy8gdGhhbiB0aGUgcmVzZXQgdmFsdWUgbWF5IHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3IKKyNkZWZpbmUgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX1NQQVJFMjMgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfU1BBUkUyM19NICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9TUEFSRTIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgICBbNV0gQURDX1NIX01PREVfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfQURDX1NIX01PREVfRU4gICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9BRENfU0hfTU9ERV9FTl9NICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX0FEQ19TSF9NT0RFX0VOX1MgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBBRENfU0hfVkJVRl9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9BRENfU0hfVkJVRl9FTiAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX0FEQ19TSF9WQlVGX0VOX00gICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfQURDX1NIX1ZCVUZfRU5fUyAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFsxOjBdIEFEQ19JUkVGX0NUUkwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfQURDX0lSRUZfQ1RSTF9XICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9BRENfSVJFRl9DVFJMX00gICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX0FEQ19JUkVGX0NUUkxfUyAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX1hPU0NIRkNUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs5OjhdIFBFQUtfREVUX0lUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX1hPU0NIRkNUTF9QRUFLX0RFVF9JVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBERElfMF9PU0NfWE9TQ0hGQ1RMX1BFQUtfREVUX0lUUklNX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIERESV8wX09TQ19YT1NDSEZDVExfUEVBS19ERVRfSVRSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbNl0gQllQQVNTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX1hPU0NIRkNUTF9CWVBBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBERElfMF9PU0NfWE9TQ0hGQ1RMX0JZUEFTU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIERESV8wX09TQ19YT1NDSEZDVExfQllQQVNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzQ6Ml0gSFBfQlVGX0lUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX1hPU0NIRkNUTF9IUF9CVUZfSVRSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBERElfMF9PU0NfWE9TQ0hGQ1RMX0hQX0JVRl9JVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIERESV8wX09TQ19YT1NDSEZDVExfSFBfQlVGX0lUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgWzE6MF0gTFBfQlVGX0lUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX1hPU0NIRkNUTF9MUF9CVUZfSVRSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBERElfMF9PU0NfWE9TQ0hGQ1RMX0xQX0JVRl9JVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIERESV8wX09TQ19YT1NDSEZDVExfTFBfQlVGX0lUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19MRk9TQ0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjM6MjJdIFhPU0NMRl9SRUdVTEFUT1JfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19MRk9TQ0NUTF9YT1NDTEZfUkVHVUxBVE9SX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRERJXzBfT1NDX0xGT1NDQ1RMX1hPU0NMRl9SRUdVTEFUT1JfVFJJTV9NICAgICAgICAgICAgICAgICAgMHgwMEMwMDAwMAorI2RlZmluZSBERElfMF9PU0NfTEZPU0NDVExfWE9TQ0xGX1JFR1VMQVRPUl9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiBbMjE6MThdIFhPU0NMRl9DTUlSUldSX1JBVElPCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0xGT1NDQ1RMX1hPU0NMRl9DTUlSUldSX1JBVElPX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBERElfMF9PU0NfTEZPU0NDVExfWE9TQ0xGX0NNSVJSV1JfUkFUSU9fTSAgICAgICAgICAgICAgICAgICAweDAwM0MwMDAwCisjZGVmaW5lIERESV8wX09TQ19MRk9TQ0NUTF9YT1NDTEZfQ01JUlJXUl9SQVRJT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgWzk6OF0gUkNPU0NMRl9SVFVORV9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gNlAwTUVHICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyA2UDVNRUcgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIDdQME1FRyAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gN1A1TUVHICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX1JUVU5FX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRERJXzBfT1NDX0xGT1NDQ1RMX1JDT1NDTEZfUlRVTkVfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBERElfMF9PU0NfTEZPU0NDVExfUkNPU0NMRl9SVFVORV9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX1JUVU5FX1RSSU1fNlAwTUVHICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgRERJXzBfT1NDX0xGT1NDQ1RMX1JDT1NDTEZfUlRVTkVfVFJJTV82UDVNRUcgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBERElfMF9PU0NfTEZPU0NDVExfUkNPU0NMRl9SVFVORV9UUklNXzdQME1FRyAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX1JUVU5FX1RSSU1fN1A1TUVHICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzc6MF0gUkNPU0NMRl9DVFVORV9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0xGT1NDQ1RMX1JDT1NDTEZfQ1RVTkVfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBERElfMF9PU0NfTEZPU0NDVExfUkNPU0NMRl9DVFVORV9UUklNX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX0NUVU5FX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19SQ09TQ0hGQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6OF0gUkNPU0NIRl9DVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19SQ09TQ0hGQ1RMX1JDT1NDSEZfQ1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRERJXzBfT1NDX1JDT1NDSEZDVExfUkNPU0NIRl9DVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBERElfMF9PU0NfUkNPU0NIRkNUTF9SQ09TQ0hGX0NUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRERJXzBfT1NDX09fU1RBVDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMwOjI5XSBTQ0xLX0xGX1NSQworLy8KKy8vIEluZGljYXRlcyBzb3VyY2UgZm9yIHRoZSBzY2xrX2xmCisvLyBFTlVNczoKKy8vIFhPU0NMRiAgICAgICAgICAgICAgICAgICBMb3cgZnJlcXVlbmN5IFhPU0MKKy8vIFJDT1NDTEYgICAgICAgICAgICAgICAgICBMb3cgZnJlcXVlbmN5IFJDT1NDCisvLyBYT1NDSEZETEYgICAgICAgICAgICAgICAgTG93IGZyZXF1ZW5jeSBjbG9jayBkZXJpdmVkIGZyb20gSGlnaCBGcmVxdWVuY3kKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBYT1NDCisvLyBSQ09TQ0hGRExGICAgICAgICAgICAgICAgTG93IGZyZXF1ZW5jeSBjbG9jayBkZXJpdmVkIGZyb20gSGlnaCBGcmVxdWVuY3kKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSQ09TQworI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19MRl9TUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0xGX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1NDTEtfTEZfU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19MRl9TUkNfWE9TQ0xGICAgICAgICAgICAgICAgICAgICAgICAgICAweDYwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0xGX1NSQ19SQ09TQ0xGICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1NDTEtfTEZfU1JDX1hPU0NIRkRMRiAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19MRl9TUkNfUkNPU0NIRkRMRiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMjhdIFNDTEtfSEZfU1JDCisvLworLy8gSW5kaWNhdGVzIHNvdXJjZSBmb3IgdGhlIHNjbGtfaGYKKy8vIEVOVU1zOgorLy8gWE9TQyAgICAgICAgICAgICAgICAgICAgIEhpZ2ggZnJlcXVlbmN5IFhPU0MKKy8vIFJDT1NDICAgICAgICAgICAgICAgICAgICBIaWdoIGZyZXF1ZW5jeSBSQ09TQyBjbGsKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1NDTEtfSEZfU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19IRl9TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0hGX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1NDTEtfSEZfU1JDX1hPU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19IRl9TUkNfUkNPU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMjJdIFJDT1NDX0hGX0VOCisvLworLy8gUkNPU0NfSEZfRU4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1JDT1NDX0hGX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfUkNPU0NfSEZfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9SQ09TQ19IRl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gUkNPU0NfTEZfRU4KKy8vCisvLyBSQ09TQ19MRl9FTgorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfUkNPU0NfTEZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9SQ09TQ19MRl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1JDT1NDX0xGX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBYT1NDX0xGX0VOCisvLworLy8gWE9TQ19MRl9FTgorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfWE9TQ19MRl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9YT1NDX0xGX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1hPU0NfTEZfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBDTEtfRENEQ19SRFkKKy8vCisvLyBDTEtfRENEQ19SRFkKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX0NMS19EQ0RDX1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfQ0xLX0RDRENfUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9DTEtfRENEQ19SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gQ0xLX0RDRENfUkRZX0FDSworLy8KKy8vIENMS19EQ0RDX1JEWV9BQ0sKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX0NMS19EQ0RDX1JEWV9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfQ0xLX0RDRENfUkRZX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9DTEtfRENEQ19SRFlfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gU0NMS19IRl9MT1NTCisvLworLy8gSW5kaWNhdGVzIHNjbGtfaGYgaXMgbG9zdAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19IRl9MT1NTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0hGX0xPU1NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1NDTEtfSEZfTE9TU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBTQ0xLX0xGX0xPU1MKKy8vCisvLyBJbmRpY2F0ZXMgc2Nsa19sZiBpcyBsb3N0CisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0xGX0xPU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1NDTEtfTEZfTE9TU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19MRl9MT1NTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIFhPU0NfSEZfRU4KKy8vCisvLyBJbmRpY2F0ZXMgdGhhdCBYT1NDX0hGIGlzIGVuYWJsZWQuCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9YT1NDX0hGX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1hPU0NfSEZfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfWE9TQ19IRl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTNdIFhCXzQ4TV9DTEtfRU4KKy8vCisvLyBJbmRpY2F0ZXMgdGhhdCB0aGUgNDhNSHogY2xvY2sgZnJvbSB0aGUgIERPVUJMRVIgaXMgZW5hYmxlZC4KKy8vCisvLyBJdCB3aWxsIGJlIGVuYWJsZWQgaWYgMjQgb3IgNDggTUh6IGNocnlzdGFsIGlzIHVzZWQgKGVuYWJsZWQgaW4gZG91bGJsZXIKKy8vIGJ5cGFzcyBmb3IgdGhlIDQ4TUh6IGNocnlzdGFsKS4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1hCXzQ4TV9DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfWEJfNDhNX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9YQl80OE1fQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMV0gWE9TQ19IRl9MUF9CVUZfRU4KKy8vCisvLyBYT1NDX0hGX0xQX0JVRl9FTgorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfWE9TQ19IRl9MUF9CVUZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9YT1NDX0hGX0xQX0JVRl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1hPU0NfSEZfTFBfQlVGX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBYT1NDX0hGX0hQX0JVRl9FTgorLy8KKy8vIFhPU0NfSEZfSFBfQlVGX0VOCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9YT1NDX0hGX0hQX0JVRl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1hPU0NfSEZfSFBfQlVGX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfWE9TQ19IRl9IUF9CVUZfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzhdIEFEQ19USE1FVAorLy8KKy8vIEFEQ19USE1FVAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfQURDX1RITUVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9BRENfVEhNRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX0FEQ19USE1FVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBBRENfREFUQV9SRUFEWQorLy8KKy8vIGluZGljYXRlcyB3aGVuIGFkY19kYXRhIGlzIHJlYWR5LgorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfQURDX0RBVEFfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9BRENfREFUQV9SRUFEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX0FEQ19EQVRBX1JFQURZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICBbNjoxXSBBRENfREFUQQorLy8KKy8vIGFkY19kYXRhCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9BRENfREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX0FEQ19EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RQorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfQURDX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFBFTkRJTkdTQ0xLSEZTV0lUQ0hJTkcKKy8vCisvLyBJbmRpY2F0ZXMgd2hlbiBzY2xrX2hmIGlzIHJlYWR5IHRvIGJlIHN3dGljaGVkCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9QRU5ESU5HU0NMS0hGU1dJVENISU5HICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1BFTkRJTkdTQ0xLSEZTV0lUQ0hJTkdfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfUEVORElOR1NDTEtIRlNXSVRDSElOR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRERJXzBfT1NDX09fU1RBVDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBSQU1QU1RBVEUKKy8vCisvLyBBTVBDT01QIEZTTSBTdGF0ZQorLy8gRU5VTXM6CisvLyBGQVNUX1NUQVJUX1NFVFRMRSAgICAgICAgRkFTVF9TVEFSVF9TRVRUTEUKKy8vIEZBU1RfU1RBUlQgICAgICAgICAgICAgICBGQVNUX1NUQVJUCisvLyBEVU1NWV9UT19JTklUXzEgICAgICAgICAgRFVNTVlfVE9fSU5JVF8xCisvLyBJREFDX0RFQ19XX01FQVNVUkUgICAgICAgSURBQ19ERUNSRU1FTlRfV0lUSF9NRUFTVVJFCisvLyBJQklBU19JTkMgICAgICAgICAgICAgICAgSUJJQVNfSU5DUkVNRU5UCisvLyBMUE1fVVBEQVRFICAgICAgICAgICAgICAgTFBNX1VQREFURQorLy8gSUJJQVNfREVDX1dfTUVBU1VSRSAgICAgIElCSUFTX0RFQ1JFTUVOVF9XSVRIX01FQVNVUkUKKy8vIElCSUFTX0NBUF9VUERBVEUgICAgICAgICBJQklBU19DQVBfVVBEQVRFCisvLyBJREFDX0lOQ1JFTUVOVCAgICAgICAgICAgSURBQ19JTkNSRU1FTlQKKy8vIEhQTV9VUERBVEUgICAgICAgICAgICAgICBIUE1fVVBEQVRFCisvLyBIUE1fUkFNUDMgICAgICAgICAgICAgICAgSFBNX1JBTVAzCisvLyBIUE1fUkFNUDIgICAgICAgICAgICAgICAgSFBNX1JBTVAyCisvLyBIUE1fUkFNUDEgICAgICAgICAgICAgICAgSFBNX1JBTVAxCisvLyBJTklUSUFMSVpBVElPTiAgICAgICAgICAgSU5JVElBTElaQVRJT04KKy8vIFJFU0VUICAgICAgICAgICAgICAgICAgICBSRVNFVAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX0ZBU1RfU1RBUlRfU0VUVExFICAgICAgICAgICAgICAgICAweEUwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfRkFTVF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgIDB4RDAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9EVU1NWV9UT19JTklUXzEgICAgICAgICAgICAgICAgICAgMHhDMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX0lEQUNfREVDX1dfTUVBU1VSRSAgICAgICAgICAgICAgICAweEIwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfSUJJQVNfSU5DICAgICAgICAgICAgICAgICAgICAgICAgIDB4QTAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9MUE1fVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgMHg5MDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX0lCSUFTX0RFQ19XX01FQVNVUkUgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfSUJJQVNfQ0FQX1VQREFURSAgICAgICAgICAgICAgICAgIDB4NzAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9JREFDX0lOQ1JFTUVOVCAgICAgICAgICAgICAgICAgICAgMHg2MDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX0hQTV9VUERBVEUgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfSFBNX1JBTVAzICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9IUE1fUkFNUDIgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX0hQTV9SQU1QMSAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfSU5JVElBTElaQVRJT04gICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzI3OjIyXSBIUE1fVVBEQVRFX0FNUAorLy8KKy8vIE9TQyBhbXBsaXR1ZGUgZHVyaW5nIEhQTV9VUERBVEUgc3RhdGUuCisvLyBXaGVuIGFtcGxpdHVkZSBjb21wZW5zYXRpb24gb2YgWE9TQ19IRiBpcyBlbmFibGVkIGluIGhpZ2ggcGVyZm9ybWFuY2UgbW9kZSwKKy8vIHRoaXMgdmFsdWUgaXMgdGhlIGFtcGxpdHVkZSBvZiB0aGUgY3J5c3RhbCBvc2NpbGxhdGlvbnMgbWVhc3VyZWQgYnkgdGhlCisvLyBvbi1jaGlwIG9zY2lsbGF0b3IgQURDLCBkaXZpZGVkIGJ5IDE1IG1WLiAgRm9yIGV4YW1wbGUsIGEgdmFsdWUgb2YgMHgyMAorLy8gd291bGQgaW5kaWNhdGUgdGhhdCB0aGUgY3J5c3RhbCdzIGFtcGxpdHVkZSBpcyBhcHByb3hpbWF0ZWx5IDQ4MCBtVi4gIFRvCisvLyBlbmFibGUgYW1wbGl0dWRlIGNvbXBlbnNhdGlvbiwgQU9OX1dVQyBPU0NDRkcgbXVzdCBiZSBzZXQgdG8gYSBub24temVybworLy8gdmFsdWUuCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9IUE1fVVBEQVRFX0FNUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0hQTV9VUERBVEVfQU1QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkMwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfSFBNX1VQREFURV9BTVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiBbMjE6MTZdIExQTV9VUERBVEVfQU1QCisvLworLy8gT1NDIGFtcGxpdHVkZSBkdXJpbmcgTFBNX1VQREFURSBzdGF0ZQorLy8gV2hlbiBhbXBsaXR1ZGUgY29tcGVuc2F0aW9uIG9mIFhPU0NfSEYgaXMgZW5hYmxlZCBpbiBsb3cgcG93ZXIgIG1vZGUsIHRoaXMKKy8vIHZhbHVlIGlzIHRoZSBhbXBsaXR1ZGUgb2YgdGhlIGNyeXN0YWwgb3NjaWxsYXRpb25zIG1lYXN1cmVkIGJ5IHRoZSBvbi1jaGlwCisvLyBvc2NpbGxhdG9yIEFEQywgZGl2aWRlZCBieSAxNSBtVi4gIEZvciBleGFtcGxlLCBhIHZhbHVlIG9mIDB4MjAgd291bGQKKy8vIGluZGljYXRlIHRoYXQgdGhlIGNyeXN0YWwncyBhbXBsaXR1ZGUgaXMgYXBwcm94aW1hdGVseSA0ODAgbVYuICBUbyBlbmFibGUKKy8vIGFtcGxpdHVkZSBjb21wZW5zYXRpb24sIEFPTl9XVUMgT1NDQ0ZHIG11c3QgYmUgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUuCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9MUE1fVVBEQVRFX0FNUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0xQTV9VUERBVEVfQU1QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNGMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfTFBNX1VQREFURV9BTVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIEZPUkNFX1JDT1NDX0hGCisvLworLy8gZm9yY2VfcmNvc2NfaGYKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0ZPUkNFX1JDT1NDX0hGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfRk9SQ0VfUkNPU0NfSEZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9GT1JDRV9SQ09TQ19IRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gU0NMS19IRl9FTgorLy8KKy8vIFNDTEtfSEZfRU4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1NDTEtfSEZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfU0NMS19IRl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9TQ0xLX0hGX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gU0NMS19NRl9FTgorLy8KKy8vIFNDTEtfTUZfRU4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1NDTEtfTUZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfU0NMS19NRl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9TQ0xLX01GX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gQUNMS19BRENfRU4KKy8vCisvLyBBQ0xLX0FEQ19FTgorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19BRENfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX0FEQ19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfQURDX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBBQ0xLX1REQ19FTgorLy8KKy8vIEFDTEtfVERDX0VOCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX1REQ19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfVERDX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19URENfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIEFDTEtfUkVGX0VOCisvLworLy8gQUNMS19SRUZfRU4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfUkVGX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19SRUZfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX1JFRl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gQ0xLX0NIUF9FTgorLy8KKy8vIENMS19DSFBfRU4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0NMS19DSFBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQ0xLX0NIUF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9DTEtfQ0hQX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gQ0xLX0RDRENfRU4KKy8vCisvLyBDTEtfRENEQ19FTgorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQ0xLX0RDRENfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9DTEtfRENEQ19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0NMS19EQ0RDX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBTQ0xLX0hGX0dPT0QKKy8vCisvLyBTQ0xLX0hGX0dPT0QKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1NDTEtfSEZfR09PRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfU0NMS19IRl9HT09EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9TQ0xLX0hGX0dPT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gU0NMS19NRl9HT09ECisvLworLy8gU0NMS19NRl9HT09ECisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9TQ0xLX01GX0dPT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1NDTEtfTUZfR09PRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfU0NMS19NRl9HT09EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFNDTEtfTEZfR09PRAorLy8KKy8vIFNDTEtfTEZfR09PRAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfU0NMS19MRl9HT09EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9TQ0xLX0xGX0dPT0RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1NDTEtfTEZfR09PRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBBQ0xLX0FEQ19HT09ECisvLworLy8gQUNMS19BRENfR09PRAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19BRENfR09PRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX0FEQ19HT09EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfQURDX0dPT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBBQ0xLX1REQ19HT09ECisvLworLy8gQUNMS19URENfR09PRAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19URENfR09PRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX1REQ19HT09EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfVERDX0dPT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBBQ0xLX1JFRl9HT09ECisvLworLy8gQUNMS19SRUZfR09PRAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19SRUZfR09PRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX1JFRl9HT09EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfUkVGX0dPT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBDTEtfQ0hQX0dPT0QKKy8vCisvLyBDTEtfQ0hQX0dPT0QKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0NMS19DSFBfR09PRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQ0xLX0NIUF9HT09EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9DTEtfQ0hQX0dPT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQ0xLX0RDRENfR09PRAorLy8KKy8vIENMS19EQ0RDX0dPT0QKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0NMS19EQ0RDX0dPT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQ0xLX0RDRENfR09PRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9DTEtfRENEQ19HT09EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19TVEFUMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjZdIEFEQ19EQ0JJQVMKKy8vCisvLyBEQyBCaWFzIHJlYWQgYnkgUkFEQyBkdXJpbmcgU0FSIG1vZGUKKy8vIFRoZSB2YXVlIGlzIGFuIHVuc2lnbmVkIGludGVyZ2VyLiBJdCBpcyB1c2VkIGZvciBkZWJ1ZyBvbmx5LgorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfQURDX0RDQklBU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9BRENfRENCSUFTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkMwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX0FEQ19EQ0JJQVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBIUE1fUkFNUDFfVEhNRVQKKy8vCisvLyBJbmRpY2F0aW9uIG9mIHRocmVzaGhvbGQgaXMgbWV0IGZvciBocG1fcmFtcDEKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX0hQTV9SQU1QMV9USE1FVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfSFBNX1JBTVAxX1RITUVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9IUE1fUkFNUDFfVEhNRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gSFBNX1JBTVAyX1RITUVUCisvLworLy8gSW5kaWNhdGlvbiBvZiB0aHJlc2hob2xkIGlzIG1ldCBmb3IgaHBtX3JhbXAyCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9IUE1fUkFNUDJfVEhNRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX0hQTV9SQU1QMl9USE1FVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfSFBNX1JBTVAyX1RITUVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIEhQTV9SQU1QM19USE1FVAorLy8KKy8vIEluZGljYXRpb24gb2YgdGhyZXNoaG9sZCBpcyBtZXQgZm9yIGhwbV9yYW1wMworI2RlZmluZSBERElfMF9PU0NfU1RBVDJfSFBNX1JBTVAzX1RITUVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9IUE1fUkFNUDNfVEhNRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX0hQTV9SQU1QM19USE1FVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogWzE1OjEyXSBSQU1QU1RBVEUKKy8vCisvLyB4b3NjX2hmIGFtcGxpdHVkZSBjb21wZW5zYXRpb24gRlNNCisvLworLy8gVGhpcyBpcyBpZGVudGljYWwgdG8gU1RBVDEuUkFNUFNUQVRFLiBTZWUgdGhhdCBkZXNjcmlwdGlvbiBmb3IgZW5jb2RpbmcuCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9SQU1QU1RBVEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX1JBTVBTVEFURV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfUkFNUFNUQVRFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICAgWzNdIEFNUENPTVBfUkVRCisvLworLy8gYW1wY29tcF9yZXEKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX0FNUENPTVBfUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfQU1QQ09NUF9SRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9BTVBDT01QX1JFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gWE9TQ19IRl9BTVBHT09ECisvLworLy8gYW1wbGl0dWRlIG9mIHhvc2NfaGYgaXMgd2l0aGluIHRoZSByZXF1aXJlZCB0aHJlc2hvbGQgKHNldCBieSBEREkpLiBOb3QgdXNlZAorLy8gZm9yIGFueXRoaW5nIGp1c3QgZm9yIGRlYnVnL3N0YXR1cworI2RlZmluZSBERElfMF9PU0NfU1RBVDJfWE9TQ19IRl9BTVBHT09EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9YT1NDX0hGX0FNUEdPT0RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX1hPU0NfSEZfQU1QR09PRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBYT1NDX0hGX0ZSRVFHT09ECisvLworLy8gZnJlcXVlbmN5IG9mIHhvc2NfaGYgaXMgZ29vZCB0byB1c2UgZm9yIHRoZSBkaWdpdGFsIGNsb2NrcworI2RlZmluZSBERElfMF9PU0NfU1RBVDJfWE9TQ19IRl9GUkVRR09PRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9YT1NDX0hGX0ZSRVFHT09EX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX1hPU0NfSEZfRlJFUUdPT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBYT1NDX0hGX1JGX0ZSRVFHT09ECisvLworLy8gZnJlcXVlbmN5IG9mIHhvc2NfaGYgaXMgd2l0aGluICsvLSAyMCBwcG0gYW5kIHhvc2NfaGYgaXMgZ29vZCBmb3IgcmFkaW8KKy8vIG9wZXJhdGlvbnMuIFVzZWQgZm9yIFNXIHRvIHN0YXJ0IHN5bnRoZXNpemVyLgorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfWE9TQ19IRl9SRl9GUkVRR09PRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9YT1NDX0hGX1JGX0ZSRVFHT09EX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX1hPU0NfSEZfUkZfRlJFUUdPT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0RESV8wX09TQ19fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19kZXZpY2UuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYWUyODkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19kZXZpY2UuaApAQCAtMCwwICsxLDE2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2RldmljZS5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wOS0yMyAxMzozNToyOCArMDIwMCAoV2VkLCAyMyBTZXAgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NDY0NAorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0RFVklDRV9IX18KKyNkZWZpbmUgX19IV19ERVZJQ0VfSF9fCisKKyNpbmNsdWRlIDxpbmMvaHdfY2hpcF9kZWYuaD4KKworI2lmZGVmIENDX0dFVF9DSElQX1BBQ0tBR0UKKworI2lmICggQ0NfR0VUX0NISVBfUEFDS0FHRSA9PSAweDcgKQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIGVkZ2UgZGV0ZWN0aW9uIG9uIHdha2UgdXAgZXZlbnRzIGZvciB0aGUKKy8vIENDMjZ4eCA3eDcgcGFja2FnZWQgZGV2aWNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzAgICAgICAgICAxOAorI2RlZmluZSBBT05fRVZFTlRfRElPMSAgICAgICAgIDE3CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yICAgICAgICAgMTYKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzMgICAgICAgICAxNQorI2RlZmluZSBBT05fRVZFTlRfRElPNCAgICAgICAgIDE0CisjZGVmaW5lIEFPTl9FVkVOVF9ESU81ICAgICAgICAgMTMKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzYgICAgICAgICAxMgorI2RlZmluZSBBT05fRVZFTlRfRElPNyAgICAgICAgIDExCisjZGVmaW5lIEFPTl9FVkVOVF9ESU84ICAgICAgICAgMTAKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzkgICAgICAgICA5CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xMCAgICAgICAgOAorI2RlZmluZSBBT05fRVZFTlRfRElPMTEgICAgICAgIDcKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzEyICAgICAgICA2CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xMyAgICAgICAgNQorI2RlZmluZSBBT05fRVZFTlRfRElPMTQgICAgICAgIDQKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzE1ICAgICAgICAzCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xNiAgICAgICAgMgorI2RlZmluZSBBT05fRVZFTlRfRElPMTcgICAgICAgIDEKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzE4ICAgICAgICAzMQorI2RlZmluZSBBT05fRVZFTlRfRElPMTkgICAgICAgIDMwCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yMCAgICAgICAgMjkKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIxICAgICAgICAyOAorI2RlZmluZSBBT05fRVZFTlRfRElPMjIgICAgICAgIDI3CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yMyAgICAgICAgMjYKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI0ICAgICAgICAyNQorI2RlZmluZSBBT05fRVZFTlRfRElPMjUgICAgICAgIDI0CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yNiAgICAgICAgMjMKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI3ICAgICAgICAyMgorI2RlZmluZSBBT05fRVZFTlRfRElPMjggICAgICAgIDIxCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yOSAgICAgICAgMjAKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzMwICAgICAgICAxOQorI2RlZmluZSBBT05fRVZFTlRfRElPMzEgICAgICAgIDB4M0YKKyNlbmRpZiAvLyAoIENDX0dFVF9DSElQX1BBQ0tBR0UgPT0gMHg3ICkKKworI2lmICggQ0NfR0VUX0NISVBfUEFDS0FHRSA9PSAweDUgKQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIGVkZ2UgZGV0ZWN0aW9uIG9uIHdha2UgdXAgZXZlbnRzIGZvciB0aGUKKy8vIENDMjZ4eCA1eDUgcGFja2FnZWQgZGV2aWNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzAgICAgICAgICAxNQorI2RlZmluZSBBT05fRVZFTlRfRElPMSAgICAgICAgIDE0CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yICAgICAgICAgMTMKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzMgICAgICAgICAxMgorI2RlZmluZSBBT05fRVZFTlRfRElPNCAgICAgICAgIDExCisjZGVmaW5lIEFPTl9FVkVOVF9ESU81ICAgICAgICAgMgorI2RlZmluZSBBT05fRVZFTlRfRElPNiAgICAgICAgIDEKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzcgICAgICAgICAyNgorI2RlZmluZSBBT05fRVZFTlRfRElPOCAgICAgICAgIDI1CisjZGVmaW5lIEFPTl9FVkVOVF9ESU85ICAgICAgICAgMjMKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzEwICAgICAgICAyNAorI2RlZmluZSBBT05fRVZFTlRfRElPMTEgICAgICAgIDIyCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xMiAgICAgICAgMjEKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzEzICAgICAgICAyMAorI2RlZmluZSBBT05fRVZFTlRfRElPMTQgICAgICAgIDE5CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xNSAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMTYgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzE3ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xOCAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMTkgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIwICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yMSAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjIgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIzICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yNCAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjUgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI2ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yNyAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjggICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI5ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8zMCAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMzEgICAgICAgIDB4M0YKKyNlbmRpZiAvLyAoIENDX0dFVF9DSElQX1BBQ0tBR0UgPT0gMHg1ICkKKworI2lmICggQ0NfR0VUX0NISVBfUEFDS0FHRSA9PSAweDQgKQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIGVkZ2UgZGV0ZWN0aW9uIG9uIHdha2UgdXAgZXZlbnRzIGZvciB0aGUKKy8vIENDMjZ4eCA0eDQgcGFja2FnZWQgZGV2aWNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzAgICAgICAgICAxMworI2RlZmluZSBBT05fRVZFTlRfRElPMSAgICAgICAgIDEyCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yICAgICAgICAgMTEKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzMgICAgICAgICAyCisjZGVmaW5lIEFPTl9FVkVOVF9ESU80ICAgICAgICAgMQorI2RlZmluZSBBT05fRVZFTlRfRElPNSAgICAgICAgIDI2CisjZGVmaW5lIEFPTl9FVkVOVF9ESU82ICAgICAgICAgMjUKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzcgICAgICAgICAyNAorI2RlZmluZSBBT05fRVZFTlRfRElPOCAgICAgICAgIDIzCisjZGVmaW5lIEFPTl9FVkVOVF9ESU85ICAgICAgICAgMjIKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzEwICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xMSAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMTIgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzEzICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xNCAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMTUgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzE2ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xNyAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMTggICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzE5ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yMCAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjEgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIyICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yMyAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjQgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI1ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yNiAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjcgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI4ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yOSAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMzAgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzMxICAgICAgICAweDNGCisjZW5kaWYgLy8gKCBDQ19HRVRfQ0hJUF9QQUNLQUdFID09IDB4NCApCisKKyNlbmRpZiAvLyBkZWZpbmVkKCBDQ19HRVRfQ0hJUF9QQUNLQUdFICkKKyNlbmRpZiAvLyBfX0hXX0RFVklDRV9IX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2V2ZW50LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNDBkZDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19ldmVudC5oCkBAIC0wLDAgKzEsMzI4NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2V2ZW50X2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0VWRU5UX0hfXworI2RlZmluZSBfX0hXX0VWRU5UX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEVWRU5UIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMAorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMQorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMgorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMworI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgNAorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgNQorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgNgorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgNworI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgOAorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgOQorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMTAKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDExCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAxMgorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMTMKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDE0CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAxNQorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMTYKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDE3CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAxOAorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMTkKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0QworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDIwCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAyMQorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMjIKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDIzCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUMKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAyNAorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMjUKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDI2CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAyNworI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMjgKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDI5CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAzMAorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMzEKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3QworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDMyCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAzMworI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDg0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIFJGQyBFdmVudCAwCisjZGVmaW5lIEVWRU5UX09fUkZDU0VMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgUkZDIEV2ZW50IDEKKyNkZWZpbmUgRVZFTlRfT19SRkNTRUwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwNAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBSRkMgRXZlbnQgMgorI2RlZmluZSBFVkVOVF9PX1JGQ1NFTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTA4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIFJGQyBFdmVudCAzCisjZGVmaW5lIEVWRU5UX09fUkZDU0VMMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMEMKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgUkZDIEV2ZW50IDQKKyNkZWZpbmUgRVZFTlRfT19SRkNTRUw0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExMAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBSRkMgRXZlbnQgNQorI2RlZmluZSBFVkVOVF9PX1JGQ1NFTDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTE0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIFJGQyBFdmVudCA2CisjZGVmaW5lIEVWRU5UX09fUkZDU0VMNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgUkZDIEV2ZW50IDcKKyNkZWZpbmUgRVZFTlRfT19SRkNTRUw3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExQworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBSRkMgRXZlbnQgOAorI2RlZmluZSBFVkVOVF9PX1JGQ1NFTDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTIwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIFJGQyBFdmVudCA5CisjZGVmaW5lIEVWRU5UX09fUkZDU0VMOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMjQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgR1BUMCAwCisjZGVmaW5lIEVWRU5UX09fR1BUMEFDQVBUU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgR1BUMCAxCisjZGVmaW5lIEVWRU5UX09fR1BUMEJDQVBUU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgR1BUMSAwCisjZGVmaW5lIEVWRU5UX09fR1BUMUFDQVBUU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgR1BUMSAxCisjZGVmaW5lIEVWRU5UX09fR1BUMUJDQVBUU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgR1BUMiAwCisjZGVmaW5lIEVWRU5UX09fR1BUMkFDQVBUU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgR1BUMiAxCisjZGVmaW5lIEVWRU5UX09fR1BUMkJDQVBUU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMSBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMVNTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMSBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gxQlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwQworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAyIFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gyU1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUxMAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAyIFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDJCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTE0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDMgU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDNTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTE4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDMgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIM0JTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MUMKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgNCBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNINFNTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MjAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgNCBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0g0QlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUyNAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCA1IFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0g1U1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUyOAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCA1IFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDVCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTJDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDYgU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDZTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTMwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDYgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNINkJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MzQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgNyBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIN1NTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MzgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgNyBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0g3QlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUzQworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCA4IFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0g4U1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU0MAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCA4IFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDhCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTQ0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDkgU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDlTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTQ4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDkgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIOUJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NEMKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMTAgU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDEwU1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTUwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDEwIFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDEwQlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTU0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDExIFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gxMVNTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU1OAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAxMSBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gxMUJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU1QworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAxMiBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMTJTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NjAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMTIgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMTJCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NjQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMTMgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMTNCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NkMKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMTQgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMTRCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NzQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMTUgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMTVCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1N0MKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMTYgU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDE2U1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTgwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDE2IFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDE2QlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTg0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDE3IFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gxN1NTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU4OAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAxNyBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gxN0JTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU4QworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAyMSBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMjFTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1QTgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMjEgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMjFCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1QUMKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMjIgU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDIyU1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNUIwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDIyIFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDIyQlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNUI0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDIzIFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gyM1NTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDVCOAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAyMyBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gyM0JTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDVCQworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAyNCBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMjRTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1QzAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMjQgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMjRCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1QzQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgR1BUMyAwCisjZGVmaW5lIEVWRU5UX09fR1BUM0FDQVBUU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgR1BUMyAxCisjZGVmaW5lIEVWRU5UX09fR1BUM0JDQVBUU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQVVYIFN1YnNjcmliZXIgMAorI2RlZmluZSBFVkVOVF9PX0FVWFNFTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIE5NSSBTdWJzY3JpYmVyIDAKKyNkZWZpbmUgRVZFTlRfT19DTTNOTUlTRUwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBJMlMgU3Vic2NyaWJlciAwCisjZGVmaW5lIEVWRU5UX09fSTJTU1RNUFNFTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5MDAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRlJaIFN1YnNjcmliZXIgMAorI2RlZmluZSBFVkVOVF9PX0ZSWlNFTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQTAwCisKKy8vIFNldCBvciBDbGVhciBTb2Z0d2FyZSBFdmVudHMKKyNkZWZpbmUgRVZFTlRfT19TV0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBT05fR1BJT19FREdFICAgICAgICAgICAgRWRnZSBkZXRlY3QgZXZlbnQgZnJvbSBJT0MuIENvbmZpZ3VyZWRlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLkVER0VfSVJRX0VOIGFuZCAgSU9DOklPQ0ZHbi5FREdFX0RFVAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDBfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDBfRVZfQU9OX0dQSU9fRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gSTJDX0lSUSAgICAgICAgICAgICAgICAgIEludGVycnVwdCBldmVudCBmcm9tIEkyQworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDFfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxX0VWX0kyQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFJGQ19DUEVfMSAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMSBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMSBldmVudAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDJfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMl9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyX0VWX1JGQ19DUEVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQU9OX1JUQ19DT01CICAgICAgICAgICAgIEV2ZW50IGZyb20gQU9OX1JUQywgY29udHJvbGxlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5DT01CX0VWX01BU0sgc2V0dGluZworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw0X0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDRfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMNF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw0X0VWX0FPTl9SVENfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUw1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFVBUlQwX0NPTUIgICAgICAgICAgICAgICBVQVJUMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBoZXJlIFVBUlQwOk1JUworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw1X0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDVfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMNV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw1X0VWX1VBUlQwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUw2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFVWF9TV0VWMCAgICAgICAgICAgICAgICBBVVggc29mdHdhcmUgZXZlbnQgMCwgdHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjAsIGFsc28gYXZhaWxhYmxlIGFzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWRU5UMCBBT04gd2FrZSB1cCBldmVudC4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBNQ1UgZG9tYWluIHdha2V1cCBjb250cm9sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UOk1DVVdVU0VMCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYIGRvbWFpbiB3YWtldXAgY29udHJvbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVDpBVVhXVVNFTAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw2X0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDZfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMNl9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw2X0VWX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUw3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNTSTBfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMDpNSVMKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMN19FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw3X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDdfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMN19FVl9TU0kwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTU0kxX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTE6TUlTCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDhfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMOF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw4X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDhfRVZfU1NJMV9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gUkZDX0NQRV8wICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUwIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8wIGV2ZW50CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDlfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMOV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw5X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDlfRVZfUkZDX0NQRV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDEwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFJGQ19IV19DT01CICAgICAgICAgICAgICBDb21iaW5lZCBSQ0YgaGFyZHdhcmUgaW50ZXJydXB0LCBjb3JyZXNwb25kaW5nCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBpcyBoZXJlIFJGQ19EQkVMTDpSRkhXSUZHCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDEwX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDEwX0VWX1JGQ19IV19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDExCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFJGQ19DTURfQUNLICAgICAgICAgICAgICBSRkMgRG9vcmJlbGwgQ29tbWFuZCBBY2tub3dsZWRnZW1lbnQgSW50ZXJydXB0LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGVxdXZpYWxlbnQgdG8gUkZDX0RCRUxMOlJGQUNLSUZHLkFDS0ZMQUcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTFfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDExX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTFfRVZfUkZDX0NNRF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMTIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gSTJTX0lSUSAgICAgICAgICAgICAgICAgIEludGVycnVwdCBldmVudCBmcm9tIEkyUworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxMl9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDEyX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTJfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxMl9FVl9JMlNfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwxMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBVVhfU1dFVjEgICAgICAgICAgICAgICAgQVVYIHNvZnR3YXJlIGV2ZW50IDEsIHRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYxLCBhbHNvIGF2YWlsYWJsZSBhcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkVOVDIgQU9OIHdha2UgdXAgZXZlbnQuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTUNVIGRvbWFpbiB3YWtldXAgY29udHJvbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVDpNQ1VXVVNFTAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWCBkb21haW4gd2FrZXVwIGNvbnRyb2wKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQ6QVVYV1VTRUwKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTNfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxM19FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDEzX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTNfRVZfQVVYX1NXRVYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMTQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gV0RUX0lSUSAgICAgICAgICAgICAgICAgIFdhdGNoZG9nIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFdEVDpDVEwuSU5URU4KKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTRfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxNF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE0X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTRfRVZfV0RUX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMTUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMEEgICAgICAgICAgICAgICAgICAgIEdQVDBBIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQwOlRBTVIKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTVfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxNV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE1X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTVfRVZfR1BUMEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMTYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMEIgICAgICAgICAgICAgICAgICAgIEdQVDBCIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQwOlRCTVIKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTZfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxNl9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE2X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTZfRVZfR1BUMEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMTcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMUEgICAgICAgICAgICAgICAgICAgIEdQVDFBIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQxOlRBTVIKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTdfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxN19FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE3X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTdfRVZfR1BUMUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMTgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMUIgICAgICAgICAgICAgICAgICAgIEdQVDFCIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQxOlRCTVIKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMThfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxOF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE4X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMThfRVZfR1BUMUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMTkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMkEgICAgICAgICAgICAgICAgICAgIEdQVDJBIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQyOlRBTVIKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTlfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxOV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE5X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTlfRVZfR1BUMkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMkIgICAgICAgICAgICAgICAgICAgIEdQVDJCIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQyOlRCTVIKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjBfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDIwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjBfRVZfR1BUMkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUM0EgICAgICAgICAgICAgICAgICAgIEdQVDNBIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQzOlRBTVIKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjFfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDIxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjFfRVZfR1BUM0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUM0IgICAgICAgICAgICAgICAgICAgIEdQVDNCIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQzOlRCTVIKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjJfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyMl9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDIyX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjJfRVZfR1BUM0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMjMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEgIENSWVBUTyByZXN1bHQgYXZhaWxhYmxlIGludGVydXB0IGV2ZW50LCB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIGZsYWcgaXMgZm91bmQgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUTzpJUlFTVEFULlJFU1VMVF9BVkFJTC4gQ29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUTzpJUlFTVEFULlJFU1VMVF9BVkFJTAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyM19FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDIzX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjNfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyM19FVl9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSAgICAgICAgICAgICAgICAweDAwMDAwMDVECisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwyNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBETUFfRE9ORV9DT01CICAgICAgICAgICAgQ29tYmluZWQgRE1BIGRvbmUsIGNvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBVRE1BMDpSRVFET05FCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI0X0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjRfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyNF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI0X0VWX0RNQV9ET05FX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDI1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIERNQV9FUlIgICAgICAgICAgICAgICAgICBETUEgYnVzIGVycm9yLCBjb3JyZXNwb25kcyB0byBVRE1BMDpFUlJPUi5TVEFUVVMKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjVfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyNV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI1X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjVfRVZfRE1BX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMjYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gRkxBU0ggICAgICAgICAgICAgICAgICAgIEZMQVNIIGNvbnRyb2xsZXIgZXJyb3IgZXZlbnQsICB0aGUgc3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIEZMQVNIOkZFREFDU1RBVC5GU01fRE9ORSBhbmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSDpGRURBQ1NUQVQuUlZGX0lOVAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyNl9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI2X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjZfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyNl9FVl9GTEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwyNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTV0VWMCAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZXZlbnQgMCwgdHJpZ2dlcmVkIGJ5IFNXRVYuU1dFVjAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjdfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyN19FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI3X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjdfRVZfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMjgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQVVYX0NPTUIgICAgICAgICAgICAgICAgIEFVWCBjb21iaW5lZCBldmVudCwgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGlzIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyOF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI4X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjhfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyOF9FVl9BVVhfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwyOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBT05fUFJPRzAgICAgICAgICAgICAgICAgQU9OIHByb2dyYW1tYWJsZSBldmVudCAwLiBFdmVudCBzZWxlY3RlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVCAgTUNVIGV2ZW50IHNlbGVjdG9yLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVDpFVlRPTUNVU0VMLkFPTl9QUk9HMF9FVgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyOV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI5X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjlfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyOV9FVl9BT05fUFJPRzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwzMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gQU9OX1JUQ19VUEQgICAgICAgICAgICAgIFJUQyBwZXJpb2RpYyBldmVudCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuUlRDX1VQRF9FTgorLy8gQVVYX09CU01VWDAgICAgICAgICAgICAgIExvb3BiYWNrIG9mIE9CU01VWDAgdGhyb3VnaCBBVVgsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5PQlNNVVgwCisvLyBBVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgQVVYIEFEQyBGSUZPIHdhdGVybWFyayBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19GSUZPX0FMTU9TVF9GVUxMCisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQVVYIEFEQyBkb25lLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0RPTkUKKy8vIEFVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICBBdXRvdGFrZSBldmVudCBmcm9tIEFVWCBzZW1hcGhvcmUsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfU01QSDpBVVRPVEFLRQorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCB0aW1lciAxIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIxX0VWCisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDAgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjBfRVYKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBBVVggVERDIG1lYXN1cmVtZW50IGRvbmUgZXZlbnQsIGNvcnJlc3BvbmRzIHRvIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5URENfRE9ORSBhbmQgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1REQyBzdGF0dXMgQVVYX1REQzpTVEFULkRPTkUKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBCIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBCCisvLyBBVVhfQU9OX1dVX0VWICAgICAgICAgICAgQU9OIHdha2V1cCBldmVudCwgY29ycmVzcG9uZHMgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFPTl9XVV9FVgorLy8gUkZDX0lOX0VWNSAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNSwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ1CisvLyBSRkNfSU5fRVY0ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA0LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDQKKy8vIENSWVBUT19ETUFfRE9ORV9JUlEgICAgICBDUllQVE8gRE1BIGlucHV0IGRvbmUgZXZlbnQsIHRoZSBjb3JyZXNwb25kaW5nZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgaXMgQ1JZUFRPOklSUVNUQVQuRE1BX0lOX0RPTkUuIENvbnRyb2xsZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBieSBDUllQVE86SVJRRU4uRE1BX0lOX0RPTkUKKy8vIERNQV9DSDE4X0RPTkUgICAgICAgICAgICBETUEgZG9uZSBmb3Igc29mdHdhcmUgdGlnZ2VyZWQgVURNQSBjaGFubmVsIDE4LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBVRE1BMDpTT0ZUUkVRCisvLyBETUFfQ0gwX0RPTkUgICAgICAgICAgICAgRE1BIGRvbmUgZm9yIHNvZnR3YXJlIHRpZ2dlcmVkIFVETUEgY2hhbm5lbCAwLCBzZWUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBVRE1BMDpTT0ZUUkVRCisvLyBBT05fQVVYX1NXRVYwICAgICAgICAgICAgQVVYIFNvZnR3YXJlIGV2ZW50IDAsIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYwCisvLyBJMlNfSVJRICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGV2ZW50IGZyb20gSTJTCisvLyBBT05fUFJPRzIgICAgICAgICAgICAgICAgQU9OIHByb2dyYW1tYWJsZSBldmVudCAyLiBFdmVudCBzZWxlY3RlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVCBNQ1UgZXZlbnQgc2VsZWN0b3IsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UOkVWVE9NQ1VTRUwuQU9OX1BST0cyX0VWCisvLyBBT05fUFJPRzEgICAgICAgICAgICAgICAgQU9OIHByb2dyYW1tYWJsZSBldmVudCAxLiBFdmVudCBzZWxlY3RlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVCBNQ1UgZXZlbnQgc2VsZWN0b3IsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UOkVWVE9NQ1VTRUwuQU9OX1BST0cxX0VWCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQU9OX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9BVVhfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcyCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0FVWF9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgIDB4MDAwMDAwNzEKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9BVVhfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgICAweDAwMDAwMDZGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkUKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkIKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQVVYX0FPTl9XVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OQorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9SRkNfSU5fRVY1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX1JGQ19JTl9FVjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUYKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQ1JZUFRPX0RNQV9ET05FX0lSUSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1RQorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9ETUFfQ0gxOF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE2CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0RNQV9DSDBfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQU9OX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9JMlNfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0FPTl9QUk9HMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQU9OX1BST0cxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwzMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQQorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMxX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzFfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMV9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZBCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwzMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBVVhfQURDX0lSUSAgICAgICAgICAgICAgQVVYIEFEQyBpbnRlcnJ1cHQgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfSVJRLiBTdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZm91bmQgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMyX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzJfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMl9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMyX0VWX0FVWF9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDMzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFRSTkdfSVJRICAgICAgICAgICAgICAgICBUUk5HIEludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBUUk5HOklSUUVOLkVOCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMzX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzNfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzM19FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMzX0VWX1RSTkdfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1JGQ1NFTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMEFfQ01QICAgICAgICAgICAgICAgIEdQVDBBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQU1SLlRDQUNUCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDBfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfUkZDU0VMMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9SRkNTRUwwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDBfRVZfR1BUMEFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0QKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1JGQ1NFTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMEJfQ01QICAgICAgICAgICAgICAgIEdQVDBCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQk1SLlRDQUNUCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDFfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfUkZDU0VMMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9SRkNTRUwxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDFfRVZfR1BUMEJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0UKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1JGQ1NFTDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMUFfQ01QICAgICAgICAgICAgICAgIEdQVDFBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQU1SLlRDQUNUCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDJfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfUkZDU0VMMl9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9SRkNTRUwyX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDJfRVZfR1BUMUFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1JGQ1NFTDMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMUJfQ01QICAgICAgICAgICAgICAgIEdQVDFCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQk1SLlRDQUNUCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDNfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfUkZDU0VMM19FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9SRkNTRUwzX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDNfRVZfR1BUMUJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1JGQ1NFTDQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMkFfQ01QICAgICAgICAgICAgICAgIEdQVDJBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQU1SLlRDQUNUCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDRfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfUkZDU0VMNF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9SRkNTRUw0X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDRfRVZfR1BUMkFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1JGQ1NFTDUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUMkJfQ01QICAgICAgICAgICAgICAgIEdQVDJCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQk1SLlRDQUNUCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDVfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfUkZDU0VMNV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9SRkNTRUw1X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDVfRVZfR1BUMkJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1JGQ1NFTDYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUM0FfQ01QICAgICAgICAgICAgICAgIEdQVDNBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQU1SLlRDQUNUCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDZfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfUkZDU0VMNl9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9SRkNTRUw2X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDZfRVZfR1BUM0FfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1JGQ1NFTDcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gR1BUM0JfQ01QICAgICAgICAgICAgICAgIEdQVDNCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQk1SLlRDQUNUCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDdfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfUkZDU0VMN19FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9SRkNTRUw3X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDdfRVZfR1BUM0JfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1JGQ1NFTDgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQU9OX1JUQ19VUEQgICAgICAgICAgICAgIFJUQyBwZXJpb2RpYyBldmVudCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuUlRDX1VQRF9FTgorI2RlZmluZSBFVkVOVF9SRkNTRUw4X0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1JGQ1NFTDhfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9SRkNTRUw4X0VWX0FPTl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19SRkNTRUw5CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBBVVhfQURDX0lSUSAgICAgICAgICAgICAgQVVYIEFEQyBpbnRlcnJ1cHQgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfSVJRLiBTdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZm91bmQgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBBVVhfT0JTTVVYMCAgICAgICAgICAgICAgTG9vcGJhY2sgb2YgT0JTTVVYMCB0aHJvdWdoIEFVWCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLk9CU01VWDAKKy8vIEFVWF9BRENfRklGT19BTE1PU1RfRlVMTCBBVVggQURDIEZJRk8gd2F0ZXJtYXJrIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBVVggQURDIGRvbmUsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRE9ORQorLy8gQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgIEF1dG90YWtlIGV2ZW50IGZyb20gQVVYIHNlbWFwaG9yZSwgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9TTVBIOkFVVE9UQUtFCisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjFfRVYKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggdGltZXIgMCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMF9FVgorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIEFVWCBUREMgbWVhc3VyZW1lbnQgZG9uZSBldmVudCwgY29ycmVzcG9uZHMgdG8gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlREQ19ET05FIGFuZCB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfVERDIHN0YXR1cyBBVVhfVERDOlNUQVQuRE9ORQorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEIgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEIKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBBIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBBCisvLyBBVVhfQU9OX1dVX0VWICAgICAgICAgICAgQU9OIHdha2V1cCBldmVudCwgY29ycmVzcG9uZHMgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFPTl9XVV9FVgorLy8gU1dFVjEgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGV2ZW50IDEsIHRyaWdnZXJlZCBieSBTV0VWLlNXRVYxCisvLyBTV0VWMCAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZXZlbnQgMCwgdHJpZ2dlcmVkIGJ5IFNXRVYuU1dFVjAKKy8vIENSWVBUT19SRVNVTFRfQVZBSUxfSVJRICBDUllQVE8gcmVzdWx0IGF2YWlsYWJsZSBpbnRlcnVwdCBldmVudCwgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBmbGFnIGlzIGZvdW5kIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE86SVJRU1RBVC5SRVNVTFRfQVZBSUwuIENvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE86SVJRU1RBVC5SRVNVTFRfQVZBSUwKKy8vIERNQV9ET05FX0NPTUIgICAgICAgICAgICBDb21iaW5lZCBETUEgZG9uZSwgY29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFVETUEwOlJFUURPTkUKKy8vIFVBUlQwX0NPTUIgICAgICAgICAgICAgICBVQVJUMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBoZXJlIFVBUlQwOk1JUworLy8gU1NJMV9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kxOk1JUworLy8gU1NJMF9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kwOk1JUworLy8gV0RUX0lSUSAgICAgICAgICAgICAgICAgIFdhdGNoZG9nIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFdEVDpDVEwuSU5URU4KKy8vIEFPTl9BVVhfU1dFVjAgICAgICAgICAgICBBVVggU29mdHdhcmUgZXZlbnQgMCwgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjAKKy8vIEkyU19JUlEgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgZXZlbnQgZnJvbSBJMlMKKy8vIEFPTl9QUk9HMSAgICAgICAgICAgICAgICBBT04gcHJvZ3JhbW1hYmxlIGV2ZW50IDEuIEV2ZW50IHNlbGVjdGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UIE1DVSBldmVudCBzZWxlY3RvciwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQ6RVZUT01DVVNFTC5BT05fUFJPRzFfRVYKKy8vIEFPTl9QUk9HMCAgICAgICAgICAgICAgICBBT04gcHJvZ3JhbW1hYmxlIGV2ZW50IDAuIEV2ZW50IHNlbGVjdGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UICBNQ1UgZXZlbnQgc2VsZWN0b3IsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UOkVWVE9NQ1VTRUwuQU9OX1BST0cwX0VWCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9BVVhfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MworI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0FVWF9PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcyCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzEKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0FVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZGCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkUKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RAorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkIKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QQorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0FVWF9BT05fV1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY5CisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfU1dFVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjUKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVECisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfRE1BX0RPTkVfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9VQVJUMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX1NTSTFfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfU1NJMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9XRFRfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0FPTl9BVVhfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfSTJTX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9BT05fUFJPRzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0FPTl9QUk9HMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0dQVDBBQ0FQVFNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gQU9OX1JUQ19VUEQgICAgICAgICAgICAgIFJUQyBwZXJpb2RpYyBldmVudCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuUlRDX1VQRF9FTgorLy8gQVVYX0FEQ19JUlEgICAgICAgICAgICAgIEFVWCBBREMgaW50ZXJydXB0IGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0lSUS4gU3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGZvdW5kIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gQVVYX09CU01VWDAgICAgICAgICAgICAgIExvb3BiYWNrIG9mIE9CU01VWDAgdGhyb3VnaCBBVVgsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5PQlNNVVgwCisvLyBBVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgQVVYIEFEQyBGSUZPIHdhdGVybWFyayBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19GSUZPX0FMTU9TVF9GVUxMCisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQVVYIEFEQyBkb25lLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0RPTkUKKy8vIEFVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICBBdXRvdGFrZSBldmVudCBmcm9tIEFVWCBzZW1hcGhvcmUsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfU01QSDpBVVRPVEFLRQorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCB0aW1lciAxIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIxX0VWCisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDAgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjBfRVYKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBBVVggVERDIG1lYXN1cmVtZW50IGRvbmUgZXZlbnQsIGNvcnJlc3BvbmRzIHRvIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5URENfRE9ORSBhbmQgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1REQyBzdGF0dXMgQVVYX1REQzpTVEFULkRPTkUKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBCIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBCCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQQorLy8gQVVYX0FPTl9XVV9FViAgICAgICAgICAgIEFPTiB3YWtldXAgZXZlbnQsIGNvcnJlc3BvbmRzIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BT05fV1VfRVYKKy8vIFJGQ19JTl9FVjUgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDUsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNQorLy8gUkZDX0lOX0VWNCAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNCwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ0CisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UMSB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UMCB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBHUFQzQl9DTVAgICAgICAgICAgICAgICAgR1BUM0IgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRCTVIuVENBQ1QKKy8vIEdQVDNBX0NNUCAgICAgICAgICAgICAgICBHUFQzQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEFNUi5UQ0FDVAorLy8gR1BUMkJfQ01QICAgICAgICAgICAgICAgIEdQVDJCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQk1SLlRDQUNUCisvLyBHUFQyQV9DTVAgICAgICAgICAgICAgICAgR1BUMkEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRBTVIuVENBQ1QKKy8vIEdQVDFCX0NNUCAgICAgICAgICAgICAgICBHUFQxQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEJNUi5UQ0FDVAorLy8gR1BUMUFfQ01QICAgICAgICAgICAgICAgIEdQVDFBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQU1SLlRDQUNUCisvLyBHUFQwQl9DTVAgICAgICAgICAgICAgICAgR1BUMEIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRCTVIuVENBQ1QKKy8vIEdQVDBBX0NNUCAgICAgICAgICAgICAgICBHUFQwQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEFNUi5UQ0FDVAorLy8gVUFSVDBfQ09NQiAgICAgICAgICAgICAgIFVBUlQwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGhlcmUgVUFSVDA6TUlTCisvLyBTU0kxX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTE6TUlTCisvLyBTU0kwX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTA6TUlTCisvLyBSRkNfQ1BFXzEgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTEgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzEgZXZlbnQKKy8vIFJGQ19DUEVfMCAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMCBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMCBldmVudAorLy8gUkZDX0hXX0NPTUIgICAgICAgICAgICAgIENvbWJpbmVkIFJDRiBoYXJkd2FyZSBpbnRlcnJ1cHQsIGNvcnJlc3BvbmRpbmcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIGhlcmUgUkZDX0RCRUxMOlJGSFdJRkcKKy8vIFJGQ19DTURfQUNLICAgICAgICAgICAgICBSRkMgRG9vcmJlbGwgQ29tbWFuZCBBY2tub3dsZWRnZW1lbnQgSW50ZXJydXB0LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGVxdXZpYWxlbnQgdG8gUkZDX0RCRUxMOlJGQUNLSUZHLkFDS0ZMQUcKKy8vIEZMQVNIICAgICAgICAgICAgICAgICAgICBGTEFTSCBjb250cm9sbGVyIGVycm9yIGV2ZW50LCAgdGhlIHN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBGTEFTSDpGRURBQ1NUQVQuRlNNX0RPTkUgYW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0g6RkVEQUNTVEFULlJWRl9JTlQKKy8vIEFVWF9DT01CICAgICAgICAgICAgICAgICBBVVggY29tYmluZWQgZXZlbnQsIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpcyBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEkyQ19JUlEgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgZXZlbnQgZnJvbSBJMkMKKy8vIEFPTl9SVENfQ09NQiAgICAgICAgICAgICBFdmVudCBmcm9tIEFPTl9SVEMsIGNvbnRyb2xsZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuQ09NQl9FVl9NQVNLIHNldHRpbmcKKy8vIEFPTl9HUElPX0VER0UgICAgICAgICAgICBFZGdlIGRldGVjdCBldmVudCBmcm9tIElPQy4gQ29uZmlndXJlZGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uRURHRV9JUlFfRU4gYW5kICBJT0M6SU9DRkduLkVER0VfREVUCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQU9OX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc3CisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9BVVhfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzMKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FVWF9PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MgorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAweDAwMDAwMDcxCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgMHgwMDAwMDA2RgorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZFCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkQKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QworI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZCCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkEKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FVWF9BT05fV1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OQorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfUkZDX0lOX0VWNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9SRkNfSU5fRVY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUYKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NgorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU1CisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9HUFQzQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0dQVDNBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MworI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfR1BUMkJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQyCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9HUFQyQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDEKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0dQVDFCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfR1BUMUFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9HUFQwQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0UKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0dQVDBBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRAorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfVUFSVDBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9TU0kxX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX1NTSTBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfUkZDX0NQRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9SRkNfQ1BFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX1JGQ19IV19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfUkZDX0NNRF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9GTEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FVWF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfSTJDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9BT05fUlRDX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FPTl9HUElPX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19HUFQwQkNBUFRTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIEFPTl9SVENfVVBEICAgICAgICAgICAgICBSVEMgcGVyaW9kaWMgZXZlbnQgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLlJUQ19VUERfRU4KKy8vIEFVWF9BRENfSVJRICAgICAgICAgICAgICBBVVggQURDIGludGVycnVwdCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19JUlEuIFN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBmb3VuZCBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEFVWF9PQlNNVVgwICAgICAgICAgICAgICBMb29wYmFjayBvZiBPQlNNVVgwIHRocm91Z2ggQVVYLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuT0JTTVVYMAorLy8gQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMIEFVWCBBREMgRklGTyB3YXRlcm1hcmsgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRklGT19BTE1PU1RfRlVMTAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFVWCBBREMgZG9uZSwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19ET05FCisvLyBBVVhfU01QSF9BVVRPVEFLRV9ET05FICAgQXV0b3Rha2UgZXZlbnQgZnJvbSBBVVggc2VtYXBob3JlLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NNUEg6QVVUT1RBS0UKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggdGltZXIgMSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMV9FVgorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCB0aW1lciAwIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIwX0VWCisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgQVVYIFREQyBtZWFzdXJlbWVudCBkb25lIGV2ZW50LCBjb3JyZXNwb25kcyB0byB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVERDX0RPTkUgYW5kIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9UREMgc3RhdHVzIEFVWF9UREM6U1RBVC5ET05FCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQiBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQgorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEEKKy8vIEFVWF9BT05fV1VfRVYgICAgICAgICAgICBBT04gd2FrZXVwIGV2ZW50LCBjb3JyZXNwb25kcyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQU9OX1dVX0VWCisvLyBSRkNfSU5fRVY1ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA1LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDUKKy8vIFJGQ19JTl9FVjQgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDQsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNAorLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDEgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDAgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gR1BUM0JfQ01QICAgICAgICAgICAgICAgIEdQVDNCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQk1SLlRDQUNUCisvLyBHUFQzQV9DTVAgICAgICAgICAgICAgICAgR1BUM0EgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRBTVIuVENBQ1QKKy8vIEdQVDJCX0NNUCAgICAgICAgICAgICAgICBHUFQyQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6VEJNUi5UQ0FDVAorLy8gR1BUMkFfQ01QICAgICAgICAgICAgICAgIEdQVDJBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQU1SLlRDQUNUCisvLyBHUFQxQl9DTVAgICAgICAgICAgICAgICAgR1BUMUIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRCTVIuVENBQ1QKKy8vIEdQVDFBX0NNUCAgICAgICAgICAgICAgICBHUFQxQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEFNUi5UQ0FDVAorLy8gR1BUMEJfQ01QICAgICAgICAgICAgICAgIEdQVDBCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQk1SLlRDQUNUCisvLyBHUFQwQV9DTVAgICAgICAgICAgICAgICAgR1BUMEEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRBTVIuVENBQ1QKKy8vIFVBUlQwX0NPTUIgICAgICAgICAgICAgICBVQVJUMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBoZXJlIFVBUlQwOk1JUworLy8gU1NJMV9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kxOk1JUworLy8gU1NJMF9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kwOk1JUworLy8gUkZDX0NQRV8xICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUxIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8xIGV2ZW50CisvLyBSRkNfQ1BFXzAgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTAgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzAgZXZlbnQKKy8vIFJGQ19IV19DT01CICAgICAgICAgICAgICBDb21iaW5lZCBSQ0YgaGFyZHdhcmUgaW50ZXJydXB0LCBjb3JyZXNwb25kaW5nCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBpcyBoZXJlIFJGQ19EQkVMTDpSRkhXSUZHCisvLyBSRkNfQ01EX0FDSyAgICAgICAgICAgICAgUkZDIERvb3JiZWxsIENvbW1hbmQgQWNrbm93bGVkZ2VtZW50IEludGVycnVwdCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBlcXV2aWFsZW50IHRvIFJGQ19EQkVMTDpSRkFDS0lGRy5BQ0tGTEFHCisvLyBGTEFTSCAgICAgICAgICAgICAgICAgICAgRkxBU0ggY29udHJvbGxlciBlcnJvciBldmVudCwgIHRoZSBzdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgRkxBU0g6RkVEQUNTVEFULkZTTV9ET05FIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIOkZFREFDU1RBVC5SVkZfSU5UCisvLyBBVVhfQ09NQiAgICAgICAgICAgICAgICAgQVVYIGNvbWJpbmVkIGV2ZW50LCB0aGUgY29ycmVzcG9uZGluZyBmbGFnCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaXMgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBJMkNfSVJRICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGV2ZW50IGZyb20gSTJDCisvLyBBT05fUlRDX0NPTUIgICAgICAgICAgICAgRXZlbnQgZnJvbSBBT05fUlRDLCBjb250cm9sbGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLkNPTUJfRVZfTUFTSyBzZXR0aW5nCisvLyBBT05fR1BJT19FREdFICAgICAgICAgICAgRWRnZSBkZXRlY3QgZXZlbnQgZnJvbSBJT0MuIENvbmZpZ3VyZWRlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLkVER0VfSVJRX0VOIGFuZCAgSU9DOklPQ0ZHbi5FREdFX0RFVAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0FPTl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NworI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfQVVYX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDczCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BVVhfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzIKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0FVWF9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgMHgwMDAwMDA3MQorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BVVhfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDAwNkYKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RQorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZECisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QgorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZBCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BVVhfQU9OX1dVX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjkKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX1JGQ19JTl9FVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfUkZDX0lOX0VWNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVGCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTYKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NQorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfR1BUM0JfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9HUFQzQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDMKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0dQVDJCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MgorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfR1BUMkFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQxCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9HUFQxQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0dQVDFBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfR1BUMEJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNFCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9HUFQwQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0QKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX1VBUlQwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfU1NJMV9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9TU0kwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX1JGQ19DUEVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfUkZDX0NQRV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9SRkNfSFdfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX1JGQ19DTURfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfRkxBU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BVVhfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0kyQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfQU9OX1JUQ19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BT05fR1BJT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fR1BUMUFDQVBUU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBBT05fUlRDX1VQRCAgICAgICAgICAgICAgUlRDIHBlcmlvZGljIGV2ZW50IGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5SVENfVVBEX0VOCisvLyBBVVhfQURDX0lSUSAgICAgICAgICAgICAgQVVYIEFEQyBpbnRlcnJ1cHQgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfSVJRLiBTdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZm91bmQgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBBVVhfT0JTTVVYMCAgICAgICAgICAgICAgTG9vcGJhY2sgb2YgT0JTTVVYMCB0aHJvdWdoIEFVWCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLk9CU01VWDAKKy8vIEFVWF9BRENfRklGT19BTE1PU1RfRlVMTCBBVVggQURDIEZJRk8gd2F0ZXJtYXJrIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBVVggQURDIGRvbmUsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRE9ORQorLy8gQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgIEF1dG90YWtlIGV2ZW50IGZyb20gQVVYIHNlbWFwaG9yZSwgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9TTVBIOkFVVE9UQUtFCisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjFfRVYKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggdGltZXIgMCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMF9FVgorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIEFVWCBUREMgbWVhc3VyZW1lbnQgZG9uZSBldmVudCwgY29ycmVzcG9uZHMgdG8gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlREQ19ET05FIGFuZCB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfVERDIHN0YXR1cyBBVVhfVERDOlNUQVQuRE9ORQorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEIgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEIKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBBIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBBCisvLyBBVVhfQU9OX1dVX0VWICAgICAgICAgICAgQU9OIHdha2V1cCBldmVudCwgY29ycmVzcG9uZHMgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFPTl9XVV9FVgorLy8gUkZDX0lOX0VWNSAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNSwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ1CisvLyBSRkNfSU5fRVY0ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA0LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDQKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQzIHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQyIHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIEdQVDNCX0NNUCAgICAgICAgICAgICAgICBHUFQzQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEJNUi5UQ0FDVAorLy8gR1BUM0FfQ01QICAgICAgICAgICAgICAgIEdQVDNBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQU1SLlRDQUNUCisvLyBHUFQyQl9DTVAgICAgICAgICAgICAgICAgR1BUMkIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRCTVIuVENBQ1QKKy8vIEdQVDJBX0NNUCAgICAgICAgICAgICAgICBHUFQyQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6VEFNUi5UQ0FDVAorLy8gR1BUMUJfQ01QICAgICAgICAgICAgICAgIEdQVDFCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQk1SLlRDQUNUCisvLyBHUFQxQV9DTVAgICAgICAgICAgICAgICAgR1BUMUEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRBTVIuVENBQ1QKKy8vIEdQVDBCX0NNUCAgICAgICAgICAgICAgICBHUFQwQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEJNUi5UQ0FDVAorLy8gR1BUMEFfQ01QICAgICAgICAgICAgICAgIEdQVDBBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQU1SLlRDQUNUCisvLyBVQVJUMF9DT01CICAgICAgICAgICAgICAgVUFSVDAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaGVyZSBVQVJUMDpNSVMKKy8vIFNTSTFfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMTpNSVMKKy8vIFNTSTBfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMDpNSVMKKy8vIFJGQ19DUEVfMSAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMSBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMSBldmVudAorLy8gUkZDX0NQRV8wICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUwIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8wIGV2ZW50CisvLyBSRkNfSFdfQ09NQiAgICAgICAgICAgICAgQ29tYmluZWQgUkNGIGhhcmR3YXJlIGludGVycnVwdCwgY29ycmVzcG9uZGluZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgaXMgaGVyZSBSRkNfREJFTEw6UkZIV0lGRworLy8gUkZDX0NNRF9BQ0sgICAgICAgICAgICAgIFJGQyBEb29yYmVsbCBDb21tYW5kIEFja25vd2xlZGdlbWVudCBJbnRlcnJ1cHQsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1dmlhbGVudCB0byBSRkNfREJFTEw6UkZBQ0tJRkcuQUNLRkxBRworLy8gRkxBU0ggICAgICAgICAgICAgICAgICAgIEZMQVNIIGNvbnRyb2xsZXIgZXJyb3IgZXZlbnQsICB0aGUgc3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIEZMQVNIOkZFREFDU1RBVC5GU01fRE9ORSBhbmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSDpGRURBQ1NUQVQuUlZGX0lOVAorLy8gQVVYX0NPTUIgICAgICAgICAgICAgICAgIEFVWCBjb21iaW5lZCBldmVudCwgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGlzIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gSTJDX0lSUSAgICAgICAgICAgICAgICAgIEludGVycnVwdCBldmVudCBmcm9tIEkyQworLy8gQU9OX1JUQ19DT01CICAgICAgICAgICAgIEV2ZW50IGZyb20gQU9OX1JUQywgY29udHJvbGxlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5DT01CX0VWX01BU0sgc2V0dGluZworLy8gQU9OX0dQSU9fRURHRSAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IGV2ZW50IGZyb20gSU9DLiBDb25maWd1cmVkZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5FREdFX0lSUV9FTiBhbmQgIElPQzpJT0NGR24uRURHRV9ERVQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncworLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9BT05fUlRDX1VQRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzcKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0FVWF9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MworI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQVVYX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcyCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9BVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgIDB4MDAwMDAwNzEKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDZGCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkUKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RAorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkIKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QQorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQVVYX0FPTl9XVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY5CisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9SRkNfSU5fRVY1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX1JGQ19JTl9FVjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1RgorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4CisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTcKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0dQVDNCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfR1BUM0FfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQzCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9HUFQyQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDIKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0dQVDJBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MQorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfR1BUMUJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9HUFQxQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0dQVDBCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRQorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfR1BUMEFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNECisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9VQVJUMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX1NTSTFfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfU1NJMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9SRkNfQ1BFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX1JGQ19DUEVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfUkZDX0hXX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9SRkNfQ01EX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0ZMQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQVVYX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9JMkNfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0FPTl9SVENfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQU9OX0dQSU9fRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0dQVDFCQ0FQVFNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gQU9OX1JUQ19VUEQgICAgICAgICAgICAgIFJUQyBwZXJpb2RpYyBldmVudCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuUlRDX1VQRF9FTgorLy8gQVVYX0FEQ19JUlEgICAgICAgICAgICAgIEFVWCBBREMgaW50ZXJydXB0IGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0lSUS4gU3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGZvdW5kIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gQVVYX09CU01VWDAgICAgICAgICAgICAgIExvb3BiYWNrIG9mIE9CU01VWDAgdGhyb3VnaCBBVVgsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5PQlNNVVgwCisvLyBBVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgQVVYIEFEQyBGSUZPIHdhdGVybWFyayBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19GSUZPX0FMTU9TVF9GVUxMCisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQVVYIEFEQyBkb25lLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0RPTkUKKy8vIEFVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICBBdXRvdGFrZSBldmVudCBmcm9tIEFVWCBzZW1hcGhvcmUsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfU01QSDpBVVRPVEFLRQorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCB0aW1lciAxIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIxX0VWCisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDAgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjBfRVYKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBBVVggVERDIG1lYXN1cmVtZW50IGRvbmUgZXZlbnQsIGNvcnJlc3BvbmRzIHRvIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5URENfRE9ORSBhbmQgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1REQyBzdGF0dXMgQVVYX1REQzpTVEFULkRPTkUKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBCIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBCCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQQorLy8gQVVYX0FPTl9XVV9FViAgICAgICAgICAgIEFPTiB3YWtldXAgZXZlbnQsIGNvcnJlc3BvbmRzIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BT05fV1VfRVYKKy8vIFJGQ19JTl9FVjUgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDUsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNQorLy8gUkZDX0lOX0VWNCAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNCwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ0CisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UMyB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UMiB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBHUFQzQl9DTVAgICAgICAgICAgICAgICAgR1BUM0IgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRCTVIuVENBQ1QKKy8vIEdQVDNBX0NNUCAgICAgICAgICAgICAgICBHUFQzQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEFNUi5UQ0FDVAorLy8gR1BUMkJfQ01QICAgICAgICAgICAgICAgIEdQVDJCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQk1SLlRDQUNUCisvLyBHUFQyQV9DTVAgICAgICAgICAgICAgICAgR1BUMkEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRBTVIuVENBQ1QKKy8vIEdQVDFCX0NNUCAgICAgICAgICAgICAgICBHUFQxQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEJNUi5UQ0FDVAorLy8gR1BUMUFfQ01QICAgICAgICAgICAgICAgIEdQVDFBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQU1SLlRDQUNUCisvLyBHUFQwQl9DTVAgICAgICAgICAgICAgICAgR1BUMEIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRCTVIuVENBQ1QKKy8vIEdQVDBBX0NNUCAgICAgICAgICAgICAgICBHUFQwQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEFNUi5UQ0FDVAorLy8gVUFSVDBfQ09NQiAgICAgICAgICAgICAgIFVBUlQwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGhlcmUgVUFSVDA6TUlTCisvLyBTU0kxX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTE6TUlTCisvLyBTU0kwX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTA6TUlTCisvLyBSRkNfQ1BFXzEgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTEgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzEgZXZlbnQKKy8vIFJGQ19DUEVfMCAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMCBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMCBldmVudAorLy8gUkZDX0hXX0NPTUIgICAgICAgICAgICAgIENvbWJpbmVkIFJDRiBoYXJkd2FyZSBpbnRlcnJ1cHQsIGNvcnJlc3BvbmRpbmcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIGhlcmUgUkZDX0RCRUxMOlJGSFdJRkcKKy8vIFJGQ19DTURfQUNLICAgICAgICAgICAgICBSRkMgRG9vcmJlbGwgQ29tbWFuZCBBY2tub3dsZWRnZW1lbnQgSW50ZXJydXB0LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGVxdXZpYWxlbnQgdG8gUkZDX0RCRUxMOlJGQUNLSUZHLkFDS0ZMQUcKKy8vIEZMQVNIICAgICAgICAgICAgICAgICAgICBGTEFTSCBjb250cm9sbGVyIGVycm9yIGV2ZW50LCAgdGhlIHN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBGTEFTSDpGRURBQ1NUQVQuRlNNX0RPTkUgYW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0g6RkVEQUNTVEFULlJWRl9JTlQKKy8vIEFVWF9DT01CICAgICAgICAgICAgICAgICBBVVggY29tYmluZWQgZXZlbnQsIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpcyBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEkyQ19JUlEgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgZXZlbnQgZnJvbSBJMkMKKy8vIEFPTl9SVENfQ09NQiAgICAgICAgICAgICBFdmVudCBmcm9tIEFPTl9SVEMsIGNvbnRyb2xsZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuQ09NQl9FVl9NQVNLIHNldHRpbmcKKy8vIEFPTl9HUElPX0VER0UgICAgICAgICAgICBFZGdlIGRldGVjdCBldmVudCBmcm9tIElPQy4gQ29uZmlndXJlZGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uRURHRV9JUlFfRU4gYW5kICBJT0M6SU9DRkduLkVER0VfREVUCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfQU9OX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc3CisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9BVVhfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzMKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FVWF9PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MgorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAweDAwMDAwMDcxCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgMHgwMDAwMDA2RgorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZFCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkQKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QworI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZCCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkEKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FVWF9BT05fV1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OQorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfUkZDX0lOX0VWNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9SRkNfSU5fRVY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUYKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU3CisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9HUFQzQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0dQVDNBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MworI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfR1BUMkJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQyCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9HUFQyQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDEKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0dQVDFCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfR1BUMUFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9HUFQwQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0UKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0dQVDBBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRAorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfVUFSVDBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9TU0kxX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX1NTSTBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfUkZDX0NQRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9SRkNfQ1BFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX1JGQ19IV19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfUkZDX0NNRF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9GTEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FVWF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfSTJDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9BT05fUlRDX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FPTl9HUElPX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19HUFQyQUNBUFRTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIEFPTl9SVENfVVBEICAgICAgICAgICAgICBSVEMgcGVyaW9kaWMgZXZlbnQgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLlJUQ19VUERfRU4KKy8vIEFVWF9BRENfSVJRICAgICAgICAgICAgICBBVVggQURDIGludGVycnVwdCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19JUlEuIFN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBmb3VuZCBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEFVWF9PQlNNVVgwICAgICAgICAgICAgICBMb29wYmFjayBvZiBPQlNNVVgwIHRocm91Z2ggQVVYLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuT0JTTVVYMAorLy8gQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMIEFVWCBBREMgRklGTyB3YXRlcm1hcmsgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRklGT19BTE1PU1RfRlVMTAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFVWCBBREMgZG9uZSwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19ET05FCisvLyBBVVhfU01QSF9BVVRPVEFLRV9ET05FICAgQXV0b3Rha2UgZXZlbnQgZnJvbSBBVVggc2VtYXBob3JlLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NNUEg6QVVUT1RBS0UKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggdGltZXIgMSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMV9FVgorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCB0aW1lciAwIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIwX0VWCisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgQVVYIFREQyBtZWFzdXJlbWVudCBkb25lIGV2ZW50LCBjb3JyZXNwb25kcyB0byB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVERDX0RPTkUgYW5kIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9UREMgc3RhdHVzIEFVWF9UREM6U1RBVC5ET05FCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQiBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQgorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEEKKy8vIEFVWF9BT05fV1VfRVYgICAgICAgICAgICBBT04gd2FrZXVwIGV2ZW50LCBjb3JyZXNwb25kcyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQU9OX1dVX0VWCisvLyBSRkNfSU5fRVY3ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA3LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDcKKy8vIFJGQ19JTl9FVjYgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDYsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNgorLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDQgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDQgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gR1BUM0JfQ01QICAgICAgICAgICAgICAgIEdQVDNCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQk1SLlRDQUNUCisvLyBHUFQzQV9DTVAgICAgICAgICAgICAgICAgR1BUM0EgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRBTVIuVENBQ1QKKy8vIEdQVDJCX0NNUCAgICAgICAgICAgICAgICBHUFQyQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6VEJNUi5UQ0FDVAorLy8gR1BUMkFfQ01QICAgICAgICAgICAgICAgIEdQVDJBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQU1SLlRDQUNUCisvLyBHUFQxQl9DTVAgICAgICAgICAgICAgICAgR1BUMUIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRCTVIuVENBQ1QKKy8vIEdQVDFBX0NNUCAgICAgICAgICAgICAgICBHUFQxQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEFNUi5UQ0FDVAorLy8gR1BUMEJfQ01QICAgICAgICAgICAgICAgIEdQVDBCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQk1SLlRDQUNUCisvLyBHUFQwQV9DTVAgICAgICAgICAgICAgICAgR1BUMEEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRBTVIuVENBQ1QKKy8vIFVBUlQwX0NPTUIgICAgICAgICAgICAgICBVQVJUMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBoZXJlIFVBUlQwOk1JUworLy8gU1NJMV9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kxOk1JUworLy8gU1NJMF9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kwOk1JUworLy8gUkZDX0NQRV8xICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUxIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8xIGV2ZW50CisvLyBSRkNfQ1BFXzAgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTAgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzAgZXZlbnQKKy8vIFJGQ19IV19DT01CICAgICAgICAgICAgICBDb21iaW5lZCBSQ0YgaGFyZHdhcmUgaW50ZXJydXB0LCBjb3JyZXNwb25kaW5nCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBpcyBoZXJlIFJGQ19EQkVMTDpSRkhXSUZHCisvLyBSRkNfQ01EX0FDSyAgICAgICAgICAgICAgUkZDIERvb3JiZWxsIENvbW1hbmQgQWNrbm93bGVkZ2VtZW50IEludGVycnVwdCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBlcXV2aWFsZW50IHRvIFJGQ19EQkVMTDpSRkFDS0lGRy5BQ0tGTEFHCisvLyBGTEFTSCAgICAgICAgICAgICAgICAgICAgRkxBU0ggY29udHJvbGxlciBlcnJvciBldmVudCwgIHRoZSBzdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgRkxBU0g6RkVEQUNTVEFULkZTTV9ET05FIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIOkZFREFDU1RBVC5SVkZfSU5UCisvLyBBVVhfQ09NQiAgICAgICAgICAgICAgICAgQVVYIGNvbWJpbmVkIGV2ZW50LCB0aGUgY29ycmVzcG9uZGluZyBmbGFnCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaXMgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBJMkNfSVJRICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGV2ZW50IGZyb20gSTJDCisvLyBBT05fUlRDX0NPTUIgICAgICAgICAgICAgRXZlbnQgZnJvbSBBT05fUlRDLCBjb250cm9sbGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLkNPTUJfRVZfTUFTSyBzZXR0aW5nCisvLyBBT05fR1BJT19FREdFICAgICAgICAgICAgRWRnZSBkZXRlY3QgZXZlbnQgZnJvbSBJT0MuIENvbmZpZ3VyZWRlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLkVER0VfSVJRX0VOIGFuZCAgSU9DOklPQ0ZHbi5FREdFX0RFVAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0FPTl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NworI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfQVVYX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDczCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BVVhfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzIKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0FVWF9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgMHgwMDAwMDA3MQorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BVVhfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDAwNkYKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RQorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZECisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QgorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZBCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BVVhfQU9OX1dVX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjkKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX1JGQ19JTl9FVjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MgorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfUkZDX0lOX0VWNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYxCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUEKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OQorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfR1BUM0JfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9HUFQzQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDMKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0dQVDJCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MgorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfR1BUMkFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQxCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9HUFQxQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0dQVDFBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfR1BUMEJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNFCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9HUFQwQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0QKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX1VBUlQwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfU1NJMV9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9TU0kwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX1JGQ19DUEVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfUkZDX0NQRV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9SRkNfSFdfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX1JGQ19DTURfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfRkxBU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BVVhfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0kyQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfQU9OX1JUQ19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BT05fR1BJT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fR1BUMkJDQVBUU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBBT05fUlRDX1VQRCAgICAgICAgICAgICAgUlRDIHBlcmlvZGljIGV2ZW50IGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5SVENfVVBEX0VOCisvLyBBVVhfQURDX0lSUSAgICAgICAgICAgICAgQVVYIEFEQyBpbnRlcnJ1cHQgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfSVJRLiBTdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZm91bmQgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBBVVhfT0JTTVVYMCAgICAgICAgICAgICAgTG9vcGJhY2sgb2YgT0JTTVVYMCB0aHJvdWdoIEFVWCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLk9CU01VWDAKKy8vIEFVWF9BRENfRklGT19BTE1PU1RfRlVMTCBBVVggQURDIEZJRk8gd2F0ZXJtYXJrIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBVVggQURDIGRvbmUsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRE9ORQorLy8gQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgIEF1dG90YWtlIGV2ZW50IGZyb20gQVVYIHNlbWFwaG9yZSwgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9TTVBIOkFVVE9UQUtFCisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjFfRVYKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggdGltZXIgMCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMF9FVgorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIEFVWCBUREMgbWVhc3VyZW1lbnQgZG9uZSBldmVudCwgY29ycmVzcG9uZHMgdG8gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlREQ19ET05FIGFuZCB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfVERDIHN0YXR1cyBBVVhfVERDOlNUQVQuRE9ORQorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEIgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEIKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBBIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBBCisvLyBBVVhfQU9OX1dVX0VWICAgICAgICAgICAgQU9OIHdha2V1cCBldmVudCwgY29ycmVzcG9uZHMgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFPTl9XVV9FVgorLy8gUkZDX0lOX0VWNyAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNywgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ3CisvLyBSRkNfSU5fRVY2ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA2LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDYKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQ0IHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQ0IHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIEdQVDNCX0NNUCAgICAgICAgICAgICAgICBHUFQzQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEJNUi5UQ0FDVAorLy8gR1BUM0FfQ01QICAgICAgICAgICAgICAgIEdQVDNBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQU1SLlRDQUNUCisvLyBHUFQyQl9DTVAgICAgICAgICAgICAgICAgR1BUMkIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRCTVIuVENBQ1QKKy8vIEdQVDJBX0NNUCAgICAgICAgICAgICAgICBHUFQyQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6VEFNUi5UQ0FDVAorLy8gR1BUMUJfQ01QICAgICAgICAgICAgICAgIEdQVDFCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQk1SLlRDQUNUCisvLyBHUFQxQV9DTVAgICAgICAgICAgICAgICAgR1BUMUEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRBTVIuVENBQ1QKKy8vIEdQVDBCX0NNUCAgICAgICAgICAgICAgICBHUFQwQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEJNUi5UQ0FDVAorLy8gR1BUMEFfQ01QICAgICAgICAgICAgICAgIEdQVDBBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQU1SLlRDQUNUCisvLyBVQVJUMF9DT01CICAgICAgICAgICAgICAgVUFSVDAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaGVyZSBVQVJUMDpNSVMKKy8vIFNTSTFfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMTpNSVMKKy8vIFNTSTBfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMDpNSVMKKy8vIFJGQ19DUEVfMSAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMSBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMSBldmVudAorLy8gUkZDX0NQRV8wICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUwIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8wIGV2ZW50CisvLyBSRkNfSFdfQ09NQiAgICAgICAgICAgICAgQ29tYmluZWQgUkNGIGhhcmR3YXJlIGludGVycnVwdCwgY29ycmVzcG9uZGluZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgaXMgaGVyZSBSRkNfREJFTEw6UkZIV0lGRworLy8gUkZDX0NNRF9BQ0sgICAgICAgICAgICAgIFJGQyBEb29yYmVsbCBDb21tYW5kIEFja25vd2xlZGdlbWVudCBJbnRlcnJ1cHQsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1dmlhbGVudCB0byBSRkNfREJFTEw6UkZBQ0tJRkcuQUNLRkxBRworLy8gRkxBU0ggICAgICAgICAgICAgICAgICAgIEZMQVNIIGNvbnRyb2xsZXIgZXJyb3IgZXZlbnQsICB0aGUgc3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIEZMQVNIOkZFREFDU1RBVC5GU01fRE9ORSBhbmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSDpGRURBQ1NUQVQuUlZGX0lOVAorLy8gQVVYX0NPTUIgICAgICAgICAgICAgICAgIEFVWCBjb21iaW5lZCBldmVudCwgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGlzIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gSTJDX0lSUSAgICAgICAgICAgICAgICAgIEludGVycnVwdCBldmVudCBmcm9tIEkyQworLy8gQU9OX1JUQ19DT01CICAgICAgICAgICAgIEV2ZW50IGZyb20gQU9OX1JUQywgY29udHJvbGxlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5DT01CX0VWX01BU0sgc2V0dGluZworLy8gQU9OX0dQSU9fRURHRSAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IGV2ZW50IGZyb20gSU9DLiBDb25maWd1cmVkZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5FREdFX0lSUV9FTiBhbmQgIElPQzpJT0NGR24uRURHRV9ERVQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncworLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9BT05fUlRDX1VQRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzcKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0FVWF9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MworI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQVVYX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcyCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9BVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgIDB4MDAwMDAwNzEKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDZGCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkUKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RAorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkIKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQVVYX0FPTl9XVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY5CisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9SRkNfSU5fRVY3ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjIKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX1JGQ19JTl9FVjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVBCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTkKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0dQVDNCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfR1BUM0FfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQzCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9HUFQyQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDIKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0dQVDJBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfR1BUMUJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9HUFQxQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0dQVDBCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfR1BUMEFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNECisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9VQVJUMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX1NTSTFfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfU1NJMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9SRkNfQ1BFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX1JGQ19DUEVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfUkZDX0hXX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9SRkNfQ01EX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0ZMQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQVVYX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9JMkNfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0FPTl9SVENfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQU9OX0dQSU9fRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDFTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFVBUlQwX1JYX0RNQVNSRVEgICAgICAgICBVQVJUMCBSWCBETUEgc2luZ2xlIHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMDpETUFDVEwuUlhETUFFCisjZGVmaW5lIEVWRU5UX1VETUFDSDFTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMVNTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxU1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDFTU0VMX0VWX1VBUlQwX1JYX0RNQVNSRVEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDFCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFVBUlQwX1JYX0RNQUJSRVEgICAgICAgICBVQVJUMCBSWCBETUEgYnVyc3QgcmVxdWVzdCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQwOkRNQUNUTC5SWERNQUUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMUJTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxQlNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDFCU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMUJTRUxfRVZfVUFSVDBfUlhfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMlNTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gVUFSVDBfVFhfRE1BU1JFUSAgICAgICAgIFVBUlQwIFRYIERNQSBzaW5nbGUgcmVxdWVzdCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQwOkRNQUNUTC5UWERNQUUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMlNTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gyU1NFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDJTU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMlNTRUxfRVZfVUFSVDBfVFhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMkJTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gVUFSVDBfVFhfRE1BQlJFUSAgICAgICAgIFVBUlQwIFRYIERNQSBidXJzdCByZXF1ZXN0LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDA6RE1BQ1RMLlRYRE1BRQorI2RlZmluZSBFVkVOVF9VRE1BQ0gyQlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDJCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMkJTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gyQlNFTF9FVl9VQVJUMF9UWF9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gzU1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTU0kwX1JYX0RNQVNSRVEgICAgICAgICAgU1NJMCBSWCBETUEgc2luZ2xlIHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBTU0kwOkRNQUNSLlJYRE1BRQorI2RlZmluZSBFVkVOVF9VRE1BQ0gzU1NFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDNTU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIM1NTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gzU1NFTF9FVl9TU0kwX1JYX0RNQVNSRVEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gzQlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTU0kwX1JYX0RNQUJSRVEgICAgICAgICAgU1NJMCBSWCBETUEgYnVyc3QgcmVxdWVzdCAsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBTU0kwOkRNQUNSLlJYRE1BRQorI2RlZmluZSBFVkVOVF9VRE1BQ0gzQlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDNCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIM0JTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gzQlNFTF9FVl9TU0kwX1JYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0g0U1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTU0kwX1RYX0RNQVNSRVEgICAgICAgICAgU1NJMCBUWCBETUEgc2luZ2xlIHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBTU0kwOkRNQUNSLlRYRE1BRQorI2RlZmluZSBFVkVOVF9VRE1BQ0g0U1NFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDRTU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNINFNTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0g0U1NFTF9FVl9TU0kwX1RYX0RNQVNSRVEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJCCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0g0QlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTU0kwX1RYX0RNQUJSRVEgICAgICAgICAgU1NJMCBUWCBETUEgYnVyc3QgcmVxdWVzdCAsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBTU0kwOkRNQUNSLlRYRE1BRQorI2RlZmluZSBFVkVOVF9VRE1BQ0g0QlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDRCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNINEJTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0g0QlNFTF9FVl9TU0kwX1RYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJBCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0g1U1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0g1QlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0g2U1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0g2QlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0g3U1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBVVhfRE1BU1JFUSAgICAgICAgICAgICAgRE1BIHNpbmdsZSByZXF1ZXN0IGV2ZW50IGZyb20gQVVYLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkRNQUNUTAorI2RlZmluZSBFVkVOVF9VRE1BQ0g3U1NFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDdTU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIN1NTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0g3U1NFTF9FVl9BVVhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0g3QlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBVVhfRE1BQlJFUSAgICAgICAgICAgICAgRE1BIGJ1cnN0IHJlcXVlc3QgZXZlbnQgZnJvbSBBVVgsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RE1BQ1RMCisjZGVmaW5lIEVWRU5UX1VETUFDSDdCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIN0JTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0g3QlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDdCU0VMX0VWX0FVWF9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDhTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFVWF9TV19ETUFCUkVRICAgICAgICAgICBBVVggb2JzZXJ2YXRpb24gbG9vcGJhY2sKKyNkZWZpbmUgRVZFTlRfVURNQUNIOFNTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0g4U1NFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDhTU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIOFNTRUxfRVZfQVVYX1NXX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIOEJTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQVVYX1NXX0RNQUJSRVEgICAgICAgICAgIEFVWCBvYnNlcnZhdGlvbiBsb29wYmFjaworI2RlZmluZSBFVkVOVF9VRE1BQ0g4QlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDhCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIOEJTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0g4QlNFTF9FVl9BVVhfU1dfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0g5U1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gR1BUM0JfRE1BQlJFUSAgICAgICAgICAgIEdQVDNCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDNBX0RNQUJSRVEgICAgICAgICAgICBHUFQzQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQyQl9ETUFCUkVRICAgICAgICAgICAgR1BUMkIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMkFfRE1BQlJFUSAgICAgICAgICAgIEdQVDJBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDFCX0RNQUJSRVEgICAgICAgICAgICBHUFQxQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQxQV9ETUFCUkVRICAgICAgICAgICAgR1BUMUEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMEJfRE1BQlJFUSAgICAgICAgICAgIEdQVDBCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIEdQVDBBX0RNQUJSRVEgICAgICAgICAgICBHUFQwQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBUSUVfTE9XICAgICAgICAgICAgICAgICAgTm90IHVzZWQgdGllZCB0byAwCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX1VETUFDSDlTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIOVNTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0g5U1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDlTU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfVURNQUNIOVNTRUxfRVZfR1BUM0JfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorI2RlZmluZSBFVkVOVF9VRE1BQ0g5U1NFTF9FVl9HUFQzQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUzCisjZGVmaW5lIEVWRU5UX1VETUFDSDlTU0VMX0VWX0dQVDJCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTIKKyNkZWZpbmUgRVZFTlRfVURNQUNIOVNTRUxfRVZfR1BUMkFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MQorI2RlZmluZSBFVkVOVF9VRE1BQ0g5U1NFTF9FVl9HUFQxQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIEVWRU5UX1VETUFDSDlTU0VMX0VWX0dQVDFBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEYKKyNkZWZpbmUgRVZFTlRfVURNQUNIOVNTRUxfRVZfR1BUMEJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RQorI2RlZmluZSBFVkVOVF9VRE1BQ0g5U1NFTF9FVl9HUFQwQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRECisjZGVmaW5lIEVWRU5UX1VETUFDSDlTU0VMX0VWX1RJRV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDUKKyNkZWZpbmUgRVZFTlRfVURNQUNIOVNTRUxfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIOUJTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIEdQVDNCX0RNQUJSRVEgICAgICAgICAgICBHUFQzQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQzQV9ETUFCUkVRICAgICAgICAgICAgR1BUM0EgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpETUFFVgorLy8gR1BUMkJfRE1BQlJFUSAgICAgICAgICAgIEdQVDJCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDJBX0RNQUJSRVEgICAgICAgICAgICBHUFQyQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOkRNQUVWCisvLyBHUFQxQl9ETUFCUkVRICAgICAgICAgICAgR1BUMUIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMUFfRE1BQlJFUSAgICAgICAgICAgIEdQVDFBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6RE1BRVYKKy8vIEdQVDBCX0RNQUJSRVEgICAgICAgICAgICBHUFQwQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBHUFQwQV9ETUFCUkVRICAgICAgICAgICAgR1BUMEEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpETUFFVgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9VRE1BQ0g5QlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDlCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIOUJTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0g5QlNFTF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX1VETUFDSDlCU0VMX0VWX0dQVDNCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKyNkZWZpbmUgRVZFTlRfVURNQUNIOUJTRUxfRVZfR1BUM0FfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MworI2RlZmluZSBFVkVOVF9VRE1BQ0g5QlNFTF9FVl9HUFQyQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUyCisjZGVmaW5lIEVWRU5UX1VETUFDSDlCU0VMX0VWX0dQVDJBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTEKKyNkZWZpbmUgRVZFTlRfVURNQUNIOUJTRUxfRVZfR1BUMUJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorI2RlZmluZSBFVkVOVF9VRE1BQ0g5QlNFTF9FVl9HUFQxQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRGCisjZGVmaW5lIEVWRU5UX1VETUFDSDlCU0VMX0VWX0dQVDBCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEUKKyNkZWZpbmUgRVZFTlRfVURNQUNIOUJTRUxfRVZfR1BUMEFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RAorI2RlZmluZSBFVkVOVF9VRE1BQ0g5QlNFTF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gxMFNTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIEdQVDNCX0RNQUJSRVEgICAgICAgICAgICBHUFQzQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQzQV9ETUFCUkVRICAgICAgICAgICAgR1BUM0EgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpETUFFVgorLy8gR1BUMkJfRE1BQlJFUSAgICAgICAgICAgIEdQVDJCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDJBX0RNQUJSRVEgICAgICAgICAgICBHUFQyQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOkRNQUVWCisvLyBHUFQxQl9ETUFCUkVRICAgICAgICAgICAgR1BUMUIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMUFfRE1BQlJFUSAgICAgICAgICAgIEdQVDFBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6RE1BRVYKKy8vIEdQVDBCX0RNQUJSRVEgICAgICAgICAgICBHUFQwQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBHUFQwQV9ETUFCUkVRICAgICAgICAgICAgR1BUMEEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpETUFFVgorLy8gVElFX0xPVyAgICAgICAgICAgICAgICAgIE5vdCB1c2VkIHRpZWQgdG8gMAorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMFNTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDEwU1NFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBTU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMFNTRUxfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX1VETUFDSDEwU1NFTF9FVl9HUFQzQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBTU0VMX0VWX0dQVDNBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MworI2RlZmluZSBFVkVOVF9VRE1BQ0gxMFNTRUxfRVZfR1BUMkJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUyCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwU1NFTF9FVl9HUFQyQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBTU0VMX0VWX0dQVDFCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMFNTRUxfRVZfR1BUMUFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRGCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwU1NFTF9FVl9HUFQwQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBTU0VMX0VWX0dQVDBBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMFNTRUxfRVZfVElFX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ2CisjZGVmaW5lIEVWRU5UX1VETUFDSDEwU1NFTF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDEwQlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gR1BUM0JfRE1BQlJFUSAgICAgICAgICAgIEdQVDNCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDNBX0RNQUJSRVEgICAgICAgICAgICBHUFQzQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQyQl9ETUFCUkVRICAgICAgICAgICAgR1BUMkIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMkFfRE1BQlJFUSAgICAgICAgICAgIEdQVDJBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDFCX0RNQUJSRVEgICAgICAgICAgICBHUFQxQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQxQV9ETUFCUkVRICAgICAgICAgICAgR1BUMUEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMEJfRE1BQlJFUSAgICAgICAgICAgIEdQVDBCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIEdQVDBBX0RNQUJSRVEgICAgICAgICAgICBHUFQwQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwQlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMEJTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwQlNFTF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBCU0VMX0VWX0dQVDNCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMEJTRUxfRVZfR1BUM0FfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUzCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwQlNFTF9FVl9HUFQyQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBCU0VMX0VWX0dQVDJBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMEJTRUxfRVZfR1BUMUJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwQlNFTF9FVl9HUFQxQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEYKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBCU0VMX0VWX0dQVDBCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMEJTRUxfRVZfR1BUMEFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRECisjZGVmaW5lIEVWRU5UX1VETUFDSDEwQlNFTF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDExU1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gR1BUM0JfRE1BQlJFUSAgICAgICAgICAgIEdQVDNCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDNBX0RNQUJSRVEgICAgICAgICAgICBHUFQzQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQyQl9ETUFCUkVRICAgICAgICAgICAgR1BUMkIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMkFfRE1BQlJFUSAgICAgICAgICAgIEdQVDJBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDFCX0RNQUJSRVEgICAgICAgICAgICBHUFQxQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQxQV9ETUFCUkVRICAgICAgICAgICAgR1BUMUEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMEJfRE1BQlJFUSAgICAgICAgICAgIEdQVDBCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIEdQVDBBX0RNQUJSRVEgICAgICAgICAgICBHUFQwQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBUSUVfTE9XICAgICAgICAgICAgICAgICAgTm90IHVzZWQgdGllZCB0byAwCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX1VETUFDSDExU1NFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFTU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMVNTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDExU1NFTF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFTU0VMX0VWX0dQVDNCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMVNTRUxfRVZfR1BUM0FfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUzCisjZGVmaW5lIEVWRU5UX1VETUFDSDExU1NFTF9FVl9HUFQyQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFTU0VMX0VWX0dQVDJBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMVNTRUxfRVZfR1BUMUJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIEVWRU5UX1VETUFDSDExU1NFTF9FVl9HUFQxQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEYKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFTU0VMX0VWX0dQVDBCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMVNTRUxfRVZfR1BUMEFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRECisjZGVmaW5lIEVWRU5UX1VETUFDSDExU1NFTF9FVl9USUVfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFTU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMTFCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBHUFQzQl9ETUFCUkVRICAgICAgICAgICAgR1BUM0IgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpETUFFVgorLy8gR1BUM0FfRE1BQlJFUSAgICAgICAgICAgIEdQVDNBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDJCX0RNQUJSRVEgICAgICAgICAgICBHUFQyQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOkRNQUVWCisvLyBHUFQyQV9ETUFCUkVRICAgICAgICAgICAgR1BUMkEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMUJfRE1BQlJFUSAgICAgICAgICAgIEdQVDFCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6RE1BRVYKKy8vIEdQVDFBX0RNQUJSRVEgICAgICAgICAgICBHUFQxQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQwQl9ETUFCUkVRICAgICAgICAgICAgR1BUMEIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpETUFFVgorLy8gR1BUMEFfRE1BQlJFUSAgICAgICAgICAgIEdQVDBBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxMUJTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDExQlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFCU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMUJTRUxfRVZfR1BUM0JfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisjZGVmaW5lIEVWRU5UX1VETUFDSDExQlNFTF9FVl9HUFQzQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFCU0VMX0VWX0dQVDJCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMUJTRUxfRVZfR1BUMkFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUxCisjZGVmaW5lIEVWRU5UX1VETUFDSDExQlNFTF9FVl9HUFQxQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFCU0VMX0VWX0dQVDFBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMUJTRUxfRVZfR1BUMEJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRFCisjZGVmaW5lIEVWRU5UX1VETUFDSDExQlNFTF9FVl9HUFQwQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFCU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMTJTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBHUFQzQl9ETUFCUkVRICAgICAgICAgICAgR1BUM0IgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpETUFFVgorLy8gR1BUM0FfRE1BQlJFUSAgICAgICAgICAgIEdQVDNBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDJCX0RNQUJSRVEgICAgICAgICAgICBHUFQyQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOkRNQUVWCisvLyBHUFQyQV9ETUFCUkVRICAgICAgICAgICAgR1BUMkEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMUJfRE1BQlJFUSAgICAgICAgICAgIEdQVDFCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6RE1BRVYKKy8vIEdQVDFBX0RNQUJSRVEgICAgICAgICAgICBHUFQxQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQwQl9ETUFCUkVRICAgICAgICAgICAgR1BUMEIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpETUFFVgorLy8gR1BUMEFfRE1BQlJFUSAgICAgICAgICAgIEdQVDBBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIFRJRV9MT1cgICAgICAgICAgICAgICAgICBOb3QgdXNlZCB0aWVkIHRvIDAKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxMlNTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDEyU1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJTU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMlNTRUxfRVZfR1BUM0JfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisjZGVmaW5lIEVWRU5UX1VETUFDSDEyU1NFTF9FVl9HUFQzQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJTU0VMX0VWX0dQVDJCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMlNTRUxfRVZfR1BUMkFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUxCisjZGVmaW5lIEVWRU5UX1VETUFDSDEyU1NFTF9FVl9HUFQxQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJTU0VMX0VWX0dQVDFBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMlNTRUxfRVZfR1BUMEJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRFCisjZGVmaW5lIEVWRU5UX1VETUFDSDEyU1NFTF9FVl9HUFQwQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJTU0VMX0VWX1RJRV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMlNTRUxfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gxMkJTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIEdQVDNCX0RNQUJSRVEgICAgICAgICAgICBHUFQzQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQzQV9ETUFCUkVRICAgICAgICAgICAgR1BUM0EgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpETUFFVgorLy8gR1BUMkJfRE1BQlJFUSAgICAgICAgICAgIEdQVDJCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDJBX0RNQUJSRVEgICAgICAgICAgICBHUFQyQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOkRNQUVWCisvLyBHUFQxQl9ETUFCUkVRICAgICAgICAgICAgR1BUMUIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMUFfRE1BQlJFUSAgICAgICAgICAgIEdQVDFBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6RE1BRVYKKy8vIEdQVDBCX0RNQUJSRVEgICAgICAgICAgICBHUFQwQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBHUFQwQV9ETUFCUkVRICAgICAgICAgICAgR1BUMEEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpETUFFVgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMkJTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDEyQlNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJCU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMkJTRUxfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX1VETUFDSDEyQlNFTF9FVl9HUFQzQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJCU0VMX0VWX0dQVDNBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MworI2RlZmluZSBFVkVOVF9VRE1BQ0gxMkJTRUxfRVZfR1BUMkJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUyCisjZGVmaW5lIEVWRU5UX1VETUFDSDEyQlNFTF9FVl9HUFQyQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJCU0VMX0VWX0dQVDFCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMkJTRUxfRVZfR1BUMUFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRGCisjZGVmaW5lIEVWRU5UX1VETUFDSDEyQlNFTF9FVl9HUFQwQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJCU0VMX0VWX0dQVDBBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMkJTRUxfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gxM0JTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQU9OX1BST0cyICAgICAgICAgICAgICAgIEFPTiBwcm9ncmFtbWFibGUgZXZlbnQgMi4gRXZlbnQgc2VsZWN0ZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQgTUNVIGV2ZW50IHNlbGVjdG9yLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVDpFVlRPTUNVU0VMLkFPTl9QUk9HMl9FVgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxM0JTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDEzQlNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTNCU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxM0JTRUxfRVZfQU9OX1BST0cyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gxNEJTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIENQVV9IQUxURUQgICAgICAgICAgICAgICBDUFUgaGFsdGVkCisvLyBBT05fUlRDX1VQRCAgICAgICAgICAgICAgUlRDIHBlcmlvZGljIGV2ZW50IGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5SVENfVVBEX0VOCisvLyBBVVhfRE1BQlJFUSAgICAgICAgICAgICAgRE1BIGJ1cnN0IHJlcXVlc3QgZXZlbnQgZnJvbSBBVVgsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RE1BQ1RMCisvLyBBVVhfRE1BU1JFUSAgICAgICAgICAgICAgRE1BIHNpbmdsZSByZXF1ZXN0IGV2ZW50IGZyb20gQVVYLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkRNQUNUTAorLy8gQVVYX1NXX0RNQUJSRVEgICAgICAgICAgIEFVWCBvYnNlcnZhdGlvbiBsb29wYmFjaworLy8gQVVYX0FEQ19JUlEgICAgICAgICAgICAgIEFVWCBBREMgaW50ZXJydXB0IGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0lSUS4gU3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGZvdW5kIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gQVVYX09CU01VWDAgICAgICAgICAgICAgIExvb3BiYWNrIG9mIE9CU01VWDAgdGhyb3VnaCBBVVgsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5PQlNNVVgwCisvLyBBVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgQVVYIEFEQyBGSUZPIHdhdGVybWFyayBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19GSUZPX0FMTU9TVF9GVUxMCisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQVVYIEFEQyBkb25lLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0RPTkUKKy8vIEFVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICBBdXRvdGFrZSBldmVudCBmcm9tIEFVWCBzZW1hcGhvcmUsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfU01QSDpBVVRPVEFLRQorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCB0aW1lciAxIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIxX0VWCisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDAgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjBfRVYKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBBVVggVERDIG1lYXN1cmVtZW50IGRvbmUgZXZlbnQsIGNvcnJlc3BvbmRzIHRvIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5URENfRE9ORSBhbmQgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1REQyBzdGF0dXMgQVVYX1REQzpTVEFULkRPTkUKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBCIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBCCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQQorLy8gQVVYX0FPTl9XVV9FViAgICAgICAgICAgIEFPTiB3YWtldXAgZXZlbnQsIGNvcnJlc3BvbmRzIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BT05fV1VfRVYKKy8vIFRSTkdfSVJRICAgICAgICAgICAgICAgICBUUk5HIEludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBUUk5HOklSUUVOLkVOCisvLyBTV0VWMyAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZXZlbnQgMywgdHJpZ2dlcmVkIGJ5IFNXRVYuU1dFVjMKKy8vIFNXRVYyICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBldmVudCAyLCB0cmlnZ2VyZWQgYnkgU1dFVi5TV0VWMgorLy8gU1dFVjEgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGV2ZW50IDEsIHRyaWdnZXJlZCBieSBTV0VWLlNXRVYxCisvLyBTV0VWMCAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZXZlbnQgMCwgdHJpZ2dlcmVkIGJ5IFNXRVYuU1dFVjAKKy8vIFdEVF9OTUkgICAgICAgICAgICAgICAgICBXYXRjaGRvZyBub24gbWFza2FibGUgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgV0RUOkNUTC5JTlRUWVBFCisvLyBSRkNfSU5fRVY3ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA3LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDcKKy8vIFJGQ19JTl9FVjYgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDYsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNgorLy8gUkZDX0lOX0VWNSAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNSwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ1CisvLyBSRkNfSU5fRVY0ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA0LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDQKKy8vIENSWVBUT19ETUFfRE9ORV9JUlEgICAgICBDUllQVE8gRE1BIGlucHV0IGRvbmUgZXZlbnQsIHRoZSBjb3JyZXNwb25kaW5nZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgaXMgQ1JZUFRPOklSUVNUQVQuRE1BX0lOX0RPTkUuIENvbnRyb2xsZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBieSBDUllQVE86SVJRRU4uRE1BX0lOX0RPTkUKKy8vIENSWVBUT19SRVNVTFRfQVZBSUxfSVJRICBDUllQVE8gcmVzdWx0IGF2YWlsYWJsZSBpbnRlcnVwdCBldmVudCwgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBmbGFnIGlzIGZvdW5kIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE86SVJRU1RBVC5SRVNVTFRfQVZBSUwuIENvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE86SVJRU1RBVC5SRVNVTFRfQVZBSUwKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQ3IHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQ2IHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQ0IHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQ0IHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQzIHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQyIHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQxIHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQwIHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIEdQVDNCX0RNQUJSRVEgICAgICAgICAgICBHUFQzQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQzQV9ETUFCUkVRICAgICAgICAgICAgR1BUM0EgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpETUFFVgorLy8gR1BUMkJfRE1BQlJFUSAgICAgICAgICAgIEdQVDJCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDJBX0RNQUJSRVEgICAgICAgICAgICBHUFQyQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOkRNQUVWCisvLyBHUFQxQl9ETUFCUkVRICAgICAgICAgICAgR1BUMUIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMUFfRE1BQlJFUSAgICAgICAgICAgIEdQVDFBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6RE1BRVYKKy8vIEdQVDBCX0RNQUJSRVEgICAgICAgICAgICBHUFQwQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBHUFQwQV9ETUFCUkVRICAgICAgICAgICAgR1BUMEEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpETUFFVgorLy8gR1BUM0JfQ01QICAgICAgICAgICAgICAgIEdQVDNCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQk1SLlRDQUNUCisvLyBHUFQzQV9DTVAgICAgICAgICAgICAgICAgR1BUM0EgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRBTVIuVENBQ1QKKy8vIEdQVDJCX0NNUCAgICAgICAgICAgICAgICBHUFQyQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6VEJNUi5UQ0FDVAorLy8gR1BUMkFfQ01QICAgICAgICAgICAgICAgIEdQVDJBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQU1SLlRDQUNUCisvLyBHUFQxQl9DTVAgICAgICAgICAgICAgICAgR1BUMUIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRCTVIuVENBQ1QKKy8vIEdQVDFBX0NNUCAgICAgICAgICAgICAgICBHUFQxQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEFNUi5UQ0FDVAorLy8gR1BUMEJfQ01QICAgICAgICAgICAgICAgIEdQVDBCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQk1SLlRDQUNUCisvLyBHUFQwQV9DTVAgICAgICAgICAgICAgICAgR1BUMEEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRBTVIuVENBQ1QKKy8vIFVBUlQwX1RYX0RNQVNSRVEgICAgICAgICBVQVJUMCBUWCBETUEgc2luZ2xlIHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMDpETUFDVEwuVFhETUFFCisvLyBVQVJUMF9UWF9ETUFCUkVRICAgICAgICAgVUFSVDAgVFggRE1BIGJ1cnN0IHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMDpETUFDVEwuVFhETUFFCisvLyBVQVJUMF9SWF9ETUFTUkVRICAgICAgICAgVUFSVDAgUlggRE1BIHNpbmdsZSByZXF1ZXN0LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDA6RE1BQ1RMLlJYRE1BRQorLy8gVUFSVDBfUlhfRE1BQlJFUSAgICAgICAgIFVBUlQwIFJYIERNQSBidXJzdCByZXF1ZXN0LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDA6RE1BQ1RMLlJYRE1BRQorLy8gU1NJMV9UWF9ETUFTUkVRICAgICAgICAgIFNTSTEgVFggRE1BIHNpbmdsZSByZXF1ZXN0LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgU1NJMDpETUFDUi5UWERNQUUKKy8vIFNTSTFfVFhfRE1BQlJFUSAgICAgICAgICBTU0kxIFRYIERNQSBidXJzdCByZXF1ZXN0ICwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuVFhETUFFCisvLyBTU0kxX1JYX0RNQVNSRVEgICAgICAgICAgU1NJMSBSWCBETUEgc2luZ2xlIHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBTU0kwOkRNQUNSLlJYRE1BRQorLy8gU1NJMV9SWF9ETUFCUkVRICAgICAgICAgIFNTSTEgUlggRE1BIGJ1cnN0IHJlcXVlc3QgLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgU1NJMDpETUFDUi5SWERNQUUKKy8vIFNTSTBfVFhfRE1BU1JFUSAgICAgICAgICBTU0kwIFRYIERNQSBzaW5nbGUgcmVxdWVzdCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuVFhETUFFCisvLyBTU0kwX1RYX0RNQUJSRVEgICAgICAgICAgU1NJMCBUWCBETUEgYnVyc3QgcmVxdWVzdCAsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBTU0kwOkRNQUNSLlRYRE1BRQorLy8gU1NJMF9SWF9ETUFTUkVRICAgICAgICAgIFNTSTAgUlggRE1BIHNpbmdsZSByZXF1ZXN0LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgU1NJMDpETUFDUi5SWERNQUUKKy8vIFNTSTBfUlhfRE1BQlJFUSAgICAgICAgICBTU0kwIFJYIERNQSBidXJzdCByZXF1ZXN0ICwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuUlhETUFFCisvLyBETUFfRE9ORV9DT01CICAgICAgICAgICAgQ29tYmluZWQgRE1BIGRvbmUsIGNvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBVRE1BMDpSRVFET05FCisvLyBETUFfRVJSICAgICAgICAgICAgICAgICAgRE1BIGJ1cyBlcnJvciwgY29ycmVzcG9uZHMgdG8gVURNQTA6RVJST1IuU1RBVFVTCisvLyBVQVJUMF9DT01CICAgICAgICAgICAgICAgVUFSVDAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaGVyZSBVQVJUMDpNSVMKKy8vIFNTSTFfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMTpNSVMKKy8vIFNTSTBfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMDpNSVMKKy8vIFJGQ19DUEVfMSAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMSBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMSBldmVudAorLy8gQVVYX1NXRVYxICAgICAgICAgICAgICAgIEFVWCBzb2Z0d2FyZSBldmVudCAxLCB0cmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMSwgYWxzbyBhdmFpbGFibGUgYXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZFTlQyIEFPTiB3YWtlIHVwIGV2ZW50LgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE1DVSBkb21haW4gd2FrZXVwIGNvbnRyb2wKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQ6TUNVV1VTRUwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVggZG9tYWluIHdha2V1cCBjb250cm9sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UOkFVWFdVU0VMCisvLyBSRkNfQ1BFXzAgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTAgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzAgZXZlbnQKKy8vIFJGQ19IV19DT01CICAgICAgICAgICAgICBDb21iaW5lZCBSQ0YgaGFyZHdhcmUgaW50ZXJydXB0LCBjb3JyZXNwb25kaW5nCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBpcyBoZXJlIFJGQ19EQkVMTDpSRkhXSUZHCisvLyBSRkNfQ01EX0FDSyAgICAgICAgICAgICAgUkZDIERvb3JiZWxsIENvbW1hbmQgQWNrbm93bGVkZ2VtZW50IEludGVycnVwdCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBlcXV2aWFsZW50IHRvIFJGQ19EQkVMTDpSRkFDS0lGRy5BQ0tGTEFHCisvLyBXRFRfSVJRICAgICAgICAgICAgICAgICAgV2F0Y2hkb2cgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUOkNUTC5JTlRFTgorLy8gRE1BX0NIMThfRE9ORSAgICAgICAgICAgIERNQSBkb25lIGZvciBzb2Z0d2FyZSB0aWdnZXJlZCBVRE1BIGNoYW5uZWwgMTgsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIFVETUEwOlNPRlRSRVEKKy8vIEZMQVNIICAgICAgICAgICAgICAgICAgICBGTEFTSCBjb250cm9sbGVyIGVycm9yIGV2ZW50LCAgdGhlIHN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBGTEFTSDpGRURBQ1NUQVQuRlNNX0RPTkUgYW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0g6RkVEQUNTVEFULlJWRl9JTlQKKy8vIERNQV9DSDBfRE9ORSAgICAgICAgICAgICBETUEgZG9uZSBmb3Igc29mdHdhcmUgdGlnZ2VyZWQgVURNQSBjaGFubmVsIDAsIHNlZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFVETUEwOlNPRlRSRVEKKy8vIEdQVDFCICAgICAgICAgICAgICAgICAgICBHUFQxQiBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkgR1BUMTpUQk1SCisvLyBHUFQxQSAgICAgICAgICAgICAgICAgICAgR1BUMUEgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDE6VEFNUgorLy8gR1BUMEIgICAgICAgICAgICAgICAgICAgIEdQVDBCIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQwOlRCTVIKKy8vIEdQVDBBICAgICAgICAgICAgICAgICAgICBHUFQwQSBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkgR1BUMDpUQU1SCisvLyBHUFQzQiAgICAgICAgICAgICAgICAgICAgR1BUM0IgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDM6VEJNUgorLy8gR1BUM0EgICAgICAgICAgICAgICAgICAgIEdQVDNBIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQzOlRBTVIKKy8vIEdQVDJCICAgICAgICAgICAgICAgICAgICBHUFQyQiBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkgR1BUMjpUQk1SCisvLyBHUFQyQSAgICAgICAgICAgICAgICAgICAgR1BUMkEgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDI6VEFNUgorLy8gQVVYX0NPTUIgICAgICAgICAgICAgICAgIEFVWCBjb21iaW5lZCBldmVudCwgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGlzIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gQU9OX0FVWF9TV0VWMCAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSBldmVudCAwLCBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMAorLy8gSTJDX0lSUSAgICAgICAgICAgICAgICAgIEludGVycnVwdCBldmVudCBmcm9tIEkyQworLy8gSTJTX0lSUSAgICAgICAgICAgICAgICAgIEludGVycnVwdCBldmVudCBmcm9tIEkyUworLy8gQU9OX1JUQ19DT01CICAgICAgICAgICAgIEV2ZW50IGZyb20gQU9OX1JUQywgY29udHJvbGxlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5DT01CX0VWX01BU0sgc2V0dGluZworLy8gQU9OX0dQSU9fRURHRSAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IGV2ZW50IGZyb20gSU9DLiBDb25maWd1cmVkZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5FREdFX0lSUV9FTiBhbmQgIElPQzpJT0NGR24uRURHRV9ERVQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncworLy8gQU9OX1BST0cyICAgICAgICAgICAgICAgIEFPTiBwcm9ncmFtbWFibGUgZXZlbnQgMi4gRXZlbnQgc2VsZWN0ZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQgTUNVIGV2ZW50IHNlbGVjdG9yLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVDpFVlRPTUNVU0VMLkFPTl9QUk9HMl9FVgorLy8gQU9OX1BST0cxICAgICAgICAgICAgICAgIEFPTiBwcm9ncmFtbWFibGUgZXZlbnQgMS4gRXZlbnQgc2VsZWN0ZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQgTUNVIGV2ZW50IHNlbGVjdG9yLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVDpFVlRPTUNVU0VMLkFPTl9QUk9HMV9FVgorLy8gQU9OX1BST0cwICAgICAgICAgICAgICAgIEFPTiBwcm9ncmFtbWFibGUgZXZlbnQgMC4gRXZlbnQgc2VsZWN0ZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQgIE1DVSBldmVudCBzZWxlY3RvciwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQ6RVZUT01DVVNFTC5BT05fUFJPRzBfRVYKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQ1BVX0hBTFRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc4CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BT05fUlRDX1VQRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FVWF9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQVVYX0RNQVNSRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc1CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BVVhfU1dfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FVWF9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQVVYX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcyCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgIDB4MDAwMDAwNzEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDZGCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQVVYX0FPTl9XVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY5CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9UUk5HX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1NXRVYzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfU1dFVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY2CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfV0RUX05NSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYzCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9SRkNfSU5fRVY3ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1JGQ19JTl9FVjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfUkZDX0lOX0VWNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9SRkNfSU5fRVY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUYKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0NSWVBUT19ETUFfRE9ORV9JUlEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1RQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEgICAgICAgICAgICAgICAweDAwMDAwMDVECisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVBCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTkKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU3CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTYKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUM0JfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQzQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDJCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMkFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUxCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQxQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDFBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMEJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRFCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQwQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDNCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUM0FfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQzCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQyQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDJBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMUJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQxQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDBCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMEFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNECisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9VQVJUMF9UWF9ETUFTUkVRICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1VBUlQwX1RYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfVUFSVDBfUlhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9VQVJUMF9SWF9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1NTSTFfVFhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfU1NJMV9UWF9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9TU0kxX1JYX0RNQVNSRVEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1NTSTFfUlhfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfU1NJMF9UWF9ETUFTUkVRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJCCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9TU0kwX1RYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1NTSTBfUlhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfU1NJMF9SWF9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9ETUFfRE9ORV9DT01CICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0RNQV9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfVUFSVDBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9TU0kxX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1NTSTBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfUkZDX0NQRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BVVhfU1dFVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1JGQ19DUEVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfUkZDX0hXX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9SRkNfQ01EX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1dEVF9JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfRE1BX0NIMThfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE2CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9GTEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0RNQV9DSDBfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQxQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQzQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDNBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQyQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FVWF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQU9OX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9JMkNfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0kyU19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQU9OX1JUQ19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BT05fR1BJT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FPTl9QUk9HMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQU9OX1BST0cxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BT05fUFJPRzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMTVCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFPTl9SVENfQ09NQiAgICAgICAgICAgICBFdmVudCBmcm9tIEFPTl9SVEMsIGNvbnRyb2xsZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuQ09NQl9FVl9NQVNLIHNldHRpbmcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTVCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNUJTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDE1QlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTVCU0VMX0VWX0FPTl9SVENfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMTZTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNTSTFfUlhfRE1BU1JFUSAgICAgICAgICBTU0kxIFJYIERNQSBzaW5nbGUgcmVxdWVzdCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuUlhETUFFCisjZGVmaW5lIEVWRU5UX1VETUFDSDE2U1NFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTZTU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNlNTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDE2U1NFTF9FVl9TU0kxX1JYX0RNQVNSRVEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDE2QlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTU0kxX1JYX0RNQUJSRVEgICAgICAgICAgU1NJMSBSWCBETUEgYnVyc3QgcmVxdWVzdCAsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBTU0kwOkRNQUNSLlJYRE1BRQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNkJTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDE2QlNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTZCU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNkJTRUxfRVZfU1NJMV9SWF9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gxN1NTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gU1NJMV9UWF9ETUFTUkVRICAgICAgICAgIFNTSTEgVFggRE1BIHNpbmdsZSByZXF1ZXN0LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgU1NJMDpETUFDUi5UWERNQUUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTdTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxN1NTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDE3U1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTdTU0VMX0VWX1NTSTFfVFhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMTdCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNTSTFfVFhfRE1BQlJFUSAgICAgICAgICBTU0kxIFRYIERNQSBidXJzdCByZXF1ZXN0ICwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuVFhETUFFCisjZGVmaW5lIEVWRU5UX1VETUFDSDE3QlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTdCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxN0JTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDE3QlNFTF9FVl9TU0kxX1RYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDIxU1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTV0VWMCAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZXZlbnQgMCwgdHJpZ2dlcmVkIGJ5IFNXRVYuU1dFVjAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjFTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gyMVNTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDIxU1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjFTU0VMX0VWX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMjFCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNXRVYwICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBldmVudCAwLCB0cmlnZ2VyZWQgYnkgU1dFVi5TV0VWMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gyMUJTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDIxQlNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjFCU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gyMUJTRUxfRVZfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gyMlNTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gU1dFVjEgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGV2ZW50IDEsIHRyaWdnZXJlZCBieSBTV0VWLlNXRVYxCisjZGVmaW5lIEVWRU5UX1VETUFDSDIyU1NFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjJTU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gyMlNTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDIyU1NFTF9FVl9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDIyQlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTV0VWMSAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZXZlbnQgMSwgdHJpZ2dlcmVkIGJ5IFNXRVYuU1dFVjEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjJCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gyMkJTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDIyQlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjJCU0VMX0VWX1NXRVYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMjNTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNXRVYyICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBldmVudCAyLCB0cmlnZ2VyZWQgYnkgU1dFVi5TV0VWMgorI2RlZmluZSBFVkVOVF9VRE1BQ0gyM1NTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDIzU1NFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjNTU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gyM1NTRUxfRVZfU1dFVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gyM0JTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gU1dFVjIgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGV2ZW50IDIsIHRyaWdnZXJlZCBieSBTV0VWLlNXRVYyCisjZGVmaW5lIEVWRU5UX1VETUFDSDIzQlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjNCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gyM0JTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDIzQlNFTF9FVl9TV0VWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDI0U1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTV0VWMyAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZXZlbnQgMywgdHJpZ2dlcmVkIGJ5IFNXRVYuU1dFVjMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjRTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gyNFNTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDI0U1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjRTU0VMX0VWX1NXRVYzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMjRCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNXRVYzICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBldmVudCAzLCB0cmlnZ2VyZWQgYnkgU1dFVi5TV0VWMworI2RlZmluZSBFVkVOVF9VRE1BQ0gyNEJTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDI0QlNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjRCU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gyNEJTRUxfRVZfU1dFVjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19HUFQzQUNBUFRTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIEFPTl9SVENfVVBEICAgICAgICAgICAgICBSVEMgcGVyaW9kaWMgZXZlbnQgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLlJUQ19VUERfRU4KKy8vIEFVWF9BRENfSVJRICAgICAgICAgICAgICBBVVggQURDIGludGVycnVwdCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19JUlEuIFN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBmb3VuZCBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEFVWF9PQlNNVVgwICAgICAgICAgICAgICBMb29wYmFjayBvZiBPQlNNVVgwIHRocm91Z2ggQVVYLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuT0JTTVVYMAorLy8gQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMIEFVWCBBREMgRklGTyB3YXRlcm1hcmsgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRklGT19BTE1PU1RfRlVMTAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFVWCBBREMgZG9uZSwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19ET05FCisvLyBBVVhfU01QSF9BVVRPVEFLRV9ET05FICAgQXV0b3Rha2UgZXZlbnQgZnJvbSBBVVggc2VtYXBob3JlLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NNUEg6QVVUT1RBS0UKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggdGltZXIgMSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMV9FVgorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCB0aW1lciAwIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIwX0VWCisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgQVVYIFREQyBtZWFzdXJlbWVudCBkb25lIGV2ZW50LCBjb3JyZXNwb25kcyB0byB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVERDX0RPTkUgYW5kIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9UREMgc3RhdHVzIEFVWF9UREM6U1RBVC5ET05FCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQiBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQgorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEEKKy8vIEFVWF9BT05fV1VfRVYgICAgICAgICAgICBBT04gd2FrZXVwIGV2ZW50LCBjb3JyZXNwb25kcyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQU9OX1dVX0VWCisvLyBSRkNfSU5fRVY3ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA3LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDcKKy8vIFJGQ19JTl9FVjYgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDYsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDcgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDYgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gR1BUM0JfQ01QICAgICAgICAgICAgICAgIEdQVDNCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQk1SLlRDQUNUCisvLyBHUFQzQV9DTVAgICAgICAgICAgICAgICAgR1BUM0EgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRBTVIuVENBQ1QKKy8vIEdQVDJCX0NNUCAgICAgICAgICAgICAgICBHUFQyQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6VEJNUi5UQ0FDVAorLy8gR1BUMkFfQ01QICAgICAgICAgICAgICAgIEdQVDJBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQU1SLlRDQUNUCisvLyBHUFQxQl9DTVAgICAgICAgICAgICAgICAgR1BUMUIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRCTVIuVENBQ1QKKy8vIEdQVDFBX0NNUCAgICAgICAgICAgICAgICBHUFQxQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEFNUi5UQ0FDVAorLy8gR1BUMEJfQ01QICAgICAgICAgICAgICAgIEdQVDBCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQk1SLlRDQUNUCisvLyBHUFQwQV9DTVAgICAgICAgICAgICAgICAgR1BUMEEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRBTVIuVENBQ1QKKy8vIFVBUlQwX0NPTUIgICAgICAgICAgICAgICBVQVJUMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBoZXJlIFVBUlQwOk1JUworLy8gU1NJMV9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kxOk1JUworLy8gU1NJMF9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kwOk1JUworLy8gUkZDX0NQRV8xICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUxIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8xIGV2ZW50CisvLyBSRkNfQ1BFXzAgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTAgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzAgZXZlbnQKKy8vIFJGQ19IV19DT01CICAgICAgICAgICAgICBDb21iaW5lZCBSQ0YgaGFyZHdhcmUgaW50ZXJydXB0LCBjb3JyZXNwb25kaW5nCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBpcyBoZXJlIFJGQ19EQkVMTDpSRkhXSUZHCisvLyBSRkNfQ01EX0FDSyAgICAgICAgICAgICAgUkZDIERvb3JiZWxsIENvbW1hbmQgQWNrbm93bGVkZ2VtZW50IEludGVycnVwdCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBlcXV2aWFsZW50IHRvIFJGQ19EQkVMTDpSRkFDS0lGRy5BQ0tGTEFHCisvLyBGTEFTSCAgICAgICAgICAgICAgICAgICAgRkxBU0ggY29udHJvbGxlciBlcnJvciBldmVudCwgIHRoZSBzdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgRkxBU0g6RkVEQUNTVEFULkZTTV9ET05FIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIOkZFREFDU1RBVC5SVkZfSU5UCisvLyBBVVhfQ09NQiAgICAgICAgICAgICAgICAgQVVYIGNvbWJpbmVkIGV2ZW50LCB0aGUgY29ycmVzcG9uZGluZyBmbGFnCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaXMgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBBT05fUlRDX0NPTUIgICAgICAgICAgICAgRXZlbnQgZnJvbSBBT05fUlRDLCBjb250cm9sbGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLkNPTUJfRVZfTUFTSyBzZXR0aW5nCisvLyBBT05fR1BJT19FREdFICAgICAgICAgICAgRWRnZSBkZXRlY3QgZXZlbnQgZnJvbSBJT0MuIENvbmZpZ3VyZWRlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLkVER0VfSVJRX0VOIGFuZCAgSU9DOklPQ0ZHbi5FREdFX0RFVAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0FPTl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NworI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfQVVYX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDczCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9BVVhfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzIKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0FVWF9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgMHgwMDAwMDA3MQorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9BVVhfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDAwNkYKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RQorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZECisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QgorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZBCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9BVVhfQU9OX1dVX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjkKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX1JGQ19JTl9FVjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MgorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfUkZDX0lOX0VWNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYxCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUMKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QgorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfR1BUM0JfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9HUFQzQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDMKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0dQVDJCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MgorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfR1BUMkFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQxCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9HUFQxQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0dQVDFBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfR1BUMEJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNFCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9HUFQwQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0QKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX1VBUlQwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfU1NJMV9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9TU0kwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX1JGQ19DUEVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfUkZDX0NQRV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9SRkNfSFdfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX1JGQ19DTURfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfRkxBU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9BVVhfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0FPTl9SVENfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfQU9OX0dQSU9fRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0dQVDNCQ0FQVFNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gQU9OX1JUQ19VUEQgICAgICAgICAgICAgIFJUQyBwZXJpb2RpYyBldmVudCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuUlRDX1VQRF9FTgorLy8gQVVYX0FEQ19JUlEgICAgICAgICAgICAgIEFVWCBBREMgaW50ZXJydXB0IGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0lSUS4gU3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGZvdW5kIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gQVVYX09CU01VWDAgICAgICAgICAgICAgIExvb3BiYWNrIG9mIE9CU01VWDAgdGhyb3VnaCBBVVgsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5PQlNNVVgwCisvLyBBVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgQVVYIEFEQyBGSUZPIHdhdGVybWFyayBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19GSUZPX0FMTU9TVF9GVUxMCisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQVVYIEFEQyBkb25lLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0RPTkUKKy8vIEFVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICBBdXRvdGFrZSBldmVudCBmcm9tIEFVWCBzZW1hcGhvcmUsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfU01QSDpBVVRPVEFLRQorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCB0aW1lciAxIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIxX0VWCisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDAgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjBfRVYKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBBVVggVERDIG1lYXN1cmVtZW50IGRvbmUgZXZlbnQsIGNvcnJlc3BvbmRzIHRvIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5URENfRE9ORSBhbmQgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1REQyBzdGF0dXMgQVVYX1REQzpTVEFULkRPTkUKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBCIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBCCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQQorLy8gQVVYX0FPTl9XVV9FViAgICAgICAgICAgIEFPTiB3YWtldXAgZXZlbnQsIGNvcnJlc3BvbmRzIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BT05fV1VfRVYKKy8vIFJGQ19JTl9FVjcgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDcsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNworLy8gUkZDX0lOX0VWNiAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNiwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ2CisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UNyB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UNiB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBHUFQzQl9DTVAgICAgICAgICAgICAgICAgR1BUM0IgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRCTVIuVENBQ1QKKy8vIEdQVDNBX0NNUCAgICAgICAgICAgICAgICBHUFQzQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEFNUi5UQ0FDVAorLy8gR1BUMkJfQ01QICAgICAgICAgICAgICAgIEdQVDJCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQk1SLlRDQUNUCisvLyBHUFQyQV9DTVAgICAgICAgICAgICAgICAgR1BUMkEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRBTVIuVENBQ1QKKy8vIEdQVDFCX0NNUCAgICAgICAgICAgICAgICBHUFQxQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEJNUi5UQ0FDVAorLy8gR1BUMUFfQ01QICAgICAgICAgICAgICAgIEdQVDFBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQU1SLlRDQUNUCisvLyBHUFQwQl9DTVAgICAgICAgICAgICAgICAgR1BUMEIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRCTVIuVENBQ1QKKy8vIEdQVDBBX0NNUCAgICAgICAgICAgICAgICBHUFQwQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEFNUi5UQ0FDVAorLy8gVUFSVDBfQ09NQiAgICAgICAgICAgICAgIFVBUlQwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGhlcmUgVUFSVDA6TUlTCisvLyBTU0kxX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTE6TUlTCisvLyBTU0kwX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTA6TUlTCisvLyBSRkNfQ1BFXzEgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTEgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzEgZXZlbnQKKy8vIFJGQ19DUEVfMCAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMCBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMCBldmVudAorLy8gUkZDX0hXX0NPTUIgICAgICAgICAgICAgIENvbWJpbmVkIFJDRiBoYXJkd2FyZSBpbnRlcnJ1cHQsIGNvcnJlc3BvbmRpbmcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIGhlcmUgUkZDX0RCRUxMOlJGSFdJRkcKKy8vIFJGQ19DTURfQUNLICAgICAgICAgICAgICBSRkMgRG9vcmJlbGwgQ29tbWFuZCBBY2tub3dsZWRnZW1lbnQgSW50ZXJydXB0LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGVxdXZpYWxlbnQgdG8gUkZDX0RCRUxMOlJGQUNLSUZHLkFDS0ZMQUcKKy8vIEZMQVNIICAgICAgICAgICAgICAgICAgICBGTEFTSCBjb250cm9sbGVyIGVycm9yIGV2ZW50LCAgdGhlIHN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBGTEFTSDpGRURBQ1NUQVQuRlNNX0RPTkUgYW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0g6RkVEQUNTVEFULlJWRl9JTlQKKy8vIEFVWF9DT01CICAgICAgICAgICAgICAgICBBVVggY29tYmluZWQgZXZlbnQsIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpcyBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEFPTl9SVENfQ09NQiAgICAgICAgICAgICBFdmVudCBmcm9tIEFPTl9SVEMsIGNvbnRyb2xsZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuQ09NQl9FVl9NQVNLIHNldHRpbmcKKy8vIEFPTl9HUElPX0VER0UgICAgICAgICAgICBFZGdlIGRldGVjdCBldmVudCBmcm9tIElPQy4gQ29uZmlndXJlZGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uRURHRV9JUlFfRU4gYW5kICBJT0M6SU9DRkduLkVER0VfREVUCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfQU9OX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc3CisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9BVVhfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzMKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0FVWF9PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MgorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAweDAwMDAwMDcxCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0FVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgMHgwMDAwMDA2RgorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZFCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkQKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QworI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZCCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkEKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0FVWF9BT05fV1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OQorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfUkZDX0lOX0VWNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYyCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9SRkNfSU5fRVY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjEKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QworI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVCCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9HUFQzQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0dQVDNBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MworI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfR1BUMkJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQyCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9HUFQyQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDEKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0dQVDFCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfR1BUMUFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9HUFQwQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0UKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0dQVDBBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRAorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfVUFSVDBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9TU0kxX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX1NTSTBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfUkZDX0NQRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9SRkNfQ1BFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX1JGQ19IV19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfUkZDX0NNRF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9GTEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0FVWF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfQU9OX1JUQ19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9BT05fR1BJT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQVVYU0VMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gR1BUMUIgICAgICAgICAgICAgICAgICAgIEdQVDFCIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQxOlRCTVIKKy8vIEdQVDFBICAgICAgICAgICAgICAgICAgICBHUFQxQSBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkgR1BUMTpUQU1SCisvLyBHUFQwQiAgICAgICAgICAgICAgICAgICAgR1BUMEIgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDA6VEJNUgorLy8gR1BUMEEgICAgICAgICAgICAgICAgICAgIEdQVDBBIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQwOlRBTVIKKy8vIEdQVDNCICAgICAgICAgICAgICAgICAgICBHUFQzQiBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkgR1BUMzpUQk1SCisvLyBHUFQzQSAgICAgICAgICAgICAgICAgICAgR1BUM0EgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDM6VEFNUgorLy8gR1BUMkIgICAgICAgICAgICAgICAgICAgIEdQVDJCIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQyOlRCTVIKKy8vIEdQVDJBICAgICAgICAgICAgICAgICAgICBHUFQyQSBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkgR1BUMjpUQU1SCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX0FVWFNFTDBfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQVVYU0VMMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9BVVhTRUwwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0FVWFNFTDBfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfQVVYU0VMMF9FVl9HUFQxQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworI2RlZmluZSBFVkVOVF9BVVhTRUwwX0VWX0dQVDFBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIEVWRU5UX0FVWFNFTDBfRVZfR1BUMEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgRVZFTlRfQVVYU0VMMF9FVl9HUFQwQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBFVkVOVF9BVVhTRUwwX0VWX0dQVDNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEVWRU5UX0FVWFNFTDBfRVZfR1BUM0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgRVZFTlRfQVVYU0VMMF9FVl9HUFQyQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBFVkVOVF9BVVhTRUwwX0VWX0dQVDJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEVWRU5UX0FVWFNFTDBfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NNM05NSVNFTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gV0RUX05NSSAgICAgICAgICAgICAgICAgIFdhdGNoZG9nIG5vbiBtYXNrYWJsZSBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBieSBXRFQ6Q1RMLklOVFRZUEUKKyNkZWZpbmUgRVZFTlRfQ00zTk1JU0VMMF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DTTNOTUlTRUwwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NNM05NSVNFTDBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ00zTk1JU0VMMF9FVl9XRFRfTk1JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fSTJTU1RNUFNFTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIFJGQ19JTl9FVjcgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDcsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNworLy8gUkZDX0lOX0VWNiAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNiwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ2CisvLyBSRkNfSU5fRVY1ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA1LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDUKKy8vIFJGQ19JTl9FVjQgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDQsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNAorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9JMlNTVE1QU0VMMF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0kyU1NUTVBTRUwwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfSTJTU1RNUFNFTDBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9JMlNTVE1QU0VMMF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX0kyU1NUTVBTRUwwX0VWX1JGQ19JTl9FVjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjIKKyNkZWZpbmUgRVZFTlRfSTJTU1RNUFNFTDBfRVZfUkZDX0lOX0VWNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MQorI2RlZmluZSBFVkVOVF9JMlNTVE1QU0VMMF9FVl9SRkNfSU5fRVY1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIEVWRU5UX0kyU1NUTVBTRUwwX0VWX1JGQ19JTl9FVjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUYKKyNkZWZpbmUgRVZFTlRfSTJTU1RNUFNFTDBfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fRlJaU0VMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gQ1BVX0hBTFRFRCAgICAgICAgICAgICAgIENQVSBoYWx0ZWQKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfRlJaU0VMMF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9GUlpTRUwwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0ZSWlNFTDBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfRlJaU0VMMF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9GUlpTRUwwX0VWX0NQVV9IQUxURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc4CisjZGVmaW5lIEVWRU5UX0ZSWlNFTDBfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1NXRVYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI0XSBTV0VWMworLy8KKy8vIFdyaXRpbmcgIjEiIHRvIHRoaXMgYml0IHdoZW4gdGhlIHZhbHVlIGlzICIwIiB0cmlnZ2VycyB0aGUgU29mdHdhcmUgMyBldmVudC4KKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEVWRU5UX1NXRVZfU1dFVjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzE2XSBTV0VWMgorLy8KKy8vIFdyaXRpbmcgIjEiIHRvIHRoaXMgYml0IHdoZW4gdGhlIHZhbHVlIGlzICIwIiB0cmlnZ2VycyB0aGUgU29mdHdhcmUgMiBldmVudC4KKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEVWRU5UX1NXRVZfU1dFVjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgIFs4XSBTV0VWMQorLy8KKy8vIFdyaXRpbmcgIjEiIHRvIHRoaXMgYml0IHdoZW4gdGhlIHZhbHVlIGlzICIwIiB0cmlnZ2VycyB0aGUgU29mdHdhcmUgMSBldmVudC4KKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEVWRU5UX1NXRVZfU1dFVjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFswXSBTV0VWMAorLy8KKy8vIFdyaXRpbmcgIjEiIHRvIHRoaXMgYml0IHdoZW4gdGhlIHZhbHVlIGlzICIwIiB0cmlnZ2VycyB0aGUgU29mdHdhcmUgMCBldmVudC4KKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1NXRVZfU1dFVjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0VWRU5UX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2ZjZmcxLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19mY2ZnMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDczODgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19mY2ZnMS5oCkBAIC0wLDAgKzEsMjg1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2ZjZmcxX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0ZDRkcxX0hfXworI2RlZmluZSBfX0hXX0ZDRkcxX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEZDRkcxIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIE1pc2MgY29uZmlndXJhdGlvbnMKKyNkZWZpbmUgRkNGRzFfT19NSVNDX0NPTkZfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBBMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX01JU0NfQ09ORl8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEE0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX1JGX0ZST05URU5EX0RJVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQzQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfUkZfRlJPTlRFTkRfRElWNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMENDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX1JGX0ZST05URU5EX0RJVjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfUkZfRlJPTlRFTkRfRElWMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBENAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19SRl9GUk9OVEVORF9ESVYzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEQ4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX1NZTlRIX0RJVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwREMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfU1lOVEhfRElWNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBFMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19TWU5USF9ESVYxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEU0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX1NZTlRIX0RJVjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRTgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfU1lOVEhfRElWMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBFQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19TWU5USF9ESVYzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX01JU0NfQURDX0RJVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfTUlTQ19BRENfRElWNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19NSVNDX0FEQ19ESVYxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX01JU0NfQURDX0RJVjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfTUlTQ19BRENfRElWMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19NSVNDX0FEQ19ESVYzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTA4CisKKy8vIFNoYWRvdyBvZiBFRlVTRTpESUVfSURfMAorI2RlZmluZSBGQ0ZHMV9PX1NIRFdfRElFX0lEXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTE4CisKKy8vIFNoYWRvdyBvZiBFRlVTRTpESUVfSURfMQorI2RlZmluZSBGQ0ZHMV9PX1NIRFdfRElFX0lEXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTFDCisKKy8vIFNoYWRvdyBvZiBFRlVTRTpESUVfSURfMgorI2RlZmluZSBGQ0ZHMV9PX1NIRFdfRElFX0lEXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTIwCisKKy8vIFNoYWRvdyBvZiBFRlVTRTpESUVfSURfMworI2RlZmluZSBGQ0ZHMV9PX1NIRFdfRElFX0lEXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTI0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fU0hEV19PU0NfQklBU19MRE9fVFJJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMzgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19TSERXX0FOQV9UUklNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEzQworCisjZGVmaW5lIEZDRkcxX09fRkxBU0hfTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxNjQKKworI2RlZmluZSBGQ0ZHMV9PX0ZMQVNIX0NPT1JESU5BVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTZDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fRkxBU0hfRV9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxNzAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19GTEFTSF9DX0VfUF9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE3NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0ZMQVNIX1BfUl9QViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTc4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fRkxBU0hfRUhfU0VRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxN0MKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19GTEFTSF9WSFZfRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0ZMQVNIX1BQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTg0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fRkxBU0hfUFJPR19FUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxODgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19GTEFTSF9FUkFfUFcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0ZMQVNIX1ZIViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTkwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fRkxBU0hfVkhWX1BWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxOTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19GTEFTSF9WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE5OAorCisvLyBVc2VyIElkZW50aWZpY2F0aW9uLgorI2RlZmluZSBGQ0ZHMV9PX1VTRVJfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjk0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fRkxBU0hfT1RQX0RBVEEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyQjAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19BTkEyX1RSSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJCNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0xET19UUklNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMkI4CisKKy8vIE1BQyBCTEUgQWRkcmVzcyAwCisjZGVmaW5lIEZDRkcxX09fTUFDX0JMRV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyRTgKKworLy8gTUFDIEJMRSBBZGRyZXNzIDEKKyNkZWZpbmUgRkNGRzFfT19NQUNfQkxFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJFQworCisvLyBNQUMgSUVFRSA4MDIuMTUuNCBBZGRyZXNzIDAKKyNkZWZpbmUgRkNGRzFfT19NQUNfMTVfNF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJGMAorCisvLyBNQUMgSUVFRSA4MDIuMTUuNCBBZGRyZXNzIDEKKyNkZWZpbmUgRkNGRzFfT19NQUNfMTVfNF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJGNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0ZMQVNIX09UUF9EQVRBNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzA4CisKKy8vIE1pc2NlbGxhbmVvdXMgVHJpbSAgUGFyYW1ldGVycworI2RlZmluZSBGQ0ZHMV9PX01JU0NfVFJJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzBDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fUkNPU0NfSEZfVEVNUENPTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMTAKKworLy8gSWNlUGljayBEZXZpY2UgSWRlbnRpZmljYXRpb24KKyNkZWZpbmUgRkNGRzFfT19JQ0VQSUNLX0RFVklDRV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMxOAorCisvLyBGYWN0b3J5IENvbmZpZ3VyYXRpb24gKEZDRkcxKSBSZXZpc2lvbgorI2RlZmluZSBGQ0ZHMV9PX0ZDRkcxX1JFVklTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzFDCisKKy8vIE1pc2MgT1RQIERhdGEKKyNkZWZpbmUgRkNGRzFfT19NSVNDX09UUF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMyMAorCisvLyBJTyBDb25maWd1cmF0aW9uCisjZGVmaW5lIEZDRkcxX09fSU9DT05GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzNDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfSUZfQURDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM0QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19PU0NfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzUwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX1JGX0ZST05URU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzNTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfU1lOVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM1OAorCisvLyBBVVhfQURDIEdhaW4gaW4gQWJzb2x1dGUgUmVmZXJlbmNlIE1vZGUKKyNkZWZpbmUgRkNGRzFfT19TT0NfQURDX0FCU19HQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM1QworCisvLyBBVVhfQURDIEdhaW4gaW4gUmVsYXRpdmUgUmVmZXJlbmNlIE1vZGUKKyNkZWZpbmUgRkNGRzFfT19TT0NfQURDX1JFTF9HQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM2MAorCisvLyBBVVhfQURDIFRlbXBlcmF0dXJlIE9mZnNldHMgaW4gQWJzb2x1dGUgUmVmZXJlbmNlIE1vZGUKKyNkZWZpbmUgRkNGRzFfT19TT0NfQURDX09GRlNFVF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM2OAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX1NPQ19BRENfUkVGX1RSSU1fQU5EX09GRlNFVF9FWFQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzZDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQU1QQ09NUF9USDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzNzAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19BTVBDT01QX1RIMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM3NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0FNUENPTVBfQ1RSTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzc4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQU5BQllQQVNTX1ZBTFVFMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzN0MKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfTUlTQ19BREMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM4MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX1ZPTFRfVFJJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzg4CisKKy8vIE9TQyBDb25maWd1cmF0aW9uCisjZGVmaW5lIEZDRkcxX09fT1NDX0NPTkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzOEMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19GUkVRX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM5MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NBUF9UUklNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzk0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fTUlTQ19PVFBfREFUQV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzOTgKKworLy8gUG93ZXIgRG93biBDdXJyZW50IENvbnRyb2wgMjBDCisjZGVmaW5lIEZDRkcxX09fUFdEX0NVUlJfMjBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzOUMKKworLy8gUG93ZXIgRG93biBDdXJyZW50IENvbnRyb2wgMzVDCisjZGVmaW5lIEZDRkcxX09fUFdEX0NVUlJfMzVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzQTAKKworLy8gUG93ZXIgRG93biBDdXJyZW50IENvbnRyb2wgNTBDCisjZGVmaW5lIEZDRkcxX09fUFdEX0NVUlJfNTBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzQTQKKworLy8gUG93ZXIgRG93biBDdXJyZW50IENvbnRyb2wgNjVDCisjZGVmaW5lIEZDRkcxX09fUFdEX0NVUlJfNjVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzQTgKKworLy8gUG93ZXIgRG93biBDdXJyZW50IENvbnRyb2wgODBDCisjZGVmaW5lIEZDRkcxX09fUFdEX0NVUlJfODBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzQUMKKworLy8gUG93ZXIgRG93biBDdXJyZW50IENvbnRyb2wgOTVDCisjZGVmaW5lIEZDRkcxX09fUFdEX0NVUlJfOTVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzQjAKKworLy8gUG93ZXIgRG93biBDdXJyZW50IENvbnRyb2wgMTEwQworI2RlZmluZSBGQ0ZHMV9PX1BXRF9DVVJSXzExMEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM0I0CisKKy8vIFBvd2VyIERvd24gQ3VycmVudCBDb250cm9sIDEyNUMKKyNkZWZpbmUgRkNGRzFfT19QV0RfQ1VSUl8xMjVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNCOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fTUlTQ19DT05GXzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBERVZJQ0VfTUlOT1JfUkVWCisvLworLy8gSFcgbWlub3IgcmV2aXNpb24gbnVtYmVyIChhIHZhbHVlIG9mIDB4RkYgc2hhbGwgYmUgdHJlYXRlZCBlcXVhbGx5IHRvIDB4MDApLgorLy8gQW55IHRlc3Qgb2YgdGhpcyBmaWVsZCBieSBTVyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYXMgYSAnZ3JlYXRlciBvciBlcXVhbCcKKy8vIGNvbXBhcmlzb24gYXMgc2lnbmVkIGludGVnZXIuCisvLyBWYWx1ZSBtYXkgY2hhbmdlIHdpdGhvdXQgd2FybmluZy4KKyNkZWZpbmUgRkNGRzFfTUlTQ19DT05GXzFfREVWSUNFX01JTk9SX1JFVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9NSVNDX0NPTkZfMV9ERVZJQ0VfTUlOT1JfUkVWX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX01JU0NfQ09ORl8xX0RFVklDRV9NSU5PUl9SRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX01JU0NfQ09ORl8yCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gSFBPU0NfQ09NUF9QMworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfQ09ORl8yX0hQT1NDX0NPTVBfUDNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfTUlTQ19DT05GXzJfSFBPU0NfQ09NUF9QM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGQ0ZHMV9NSVNDX0NPTkZfMl9IUE9TQ19DT01QX1AzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfUkZfRlJPTlRFTkRfRElWNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIElGQU1QX0lCCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjVfSUZBTVBfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNV9JRkFNUF9JQl9NICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY1X0lGQU1QX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoyNF0gTE5BX0lCCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjVfTE5BX0lCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNV9MTkFfSUJfTSAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY1X0xOQV9JQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxOV0gSUZBTVBfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY1X0lGQU1QX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjVfSUZBTVBfVFJJTV9NICAgICAgICAgICAgICAgICAgMHgwMEY4MDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNV9JRkFNUF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiBbMTg6MTRdIENUTF9QQTBfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY1X0NUTF9QQTBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjVfQ1RMX1BBMF9UUklNX00gICAgICAgICAgICAgICAgMHgwMDA3QzAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNV9DVExfUEEwX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgIFs2OjBdIFJGTERPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjVfUkZMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNV9SRkxET19UUklNX09VVFBVVF9NICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY1X1JGTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gSUZBTVBfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNl9JRkFNUF9JQl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2X0lGQU1QX0lCX00gICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjZfSUZBTVBfSUJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBMTkFfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNl9MTkFfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2X0xOQV9JQl9NICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjZfTE5BX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE5XSBJRkFNUF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjZfSUZBTVBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNl9JRkFNUF9UUklNX00gICAgICAgICAgICAgICAgICAweDAwRjgwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2X0lGQU1QX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6IFsxODoxNF0gQ1RMX1BBMF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjZfQ1RMX1BBMF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNl9DVExfUEEwX1RSSU1fTSAgICAgICAgICAgICAgICAweDAwMDdDMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2X0NUTF9QQTBfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgWzY6MF0gUkZMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNl9SRkxET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2X1JGTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjZfUkZMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1JGX0ZST05URU5EX0RJVjEwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gSUZBTVBfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTBfSUZBTVBfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMF9JRkFNUF9JQl9NICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEwX0lGQU1QX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBMTkFfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTBfTE5BX0lCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMF9MTkFfSUJfTSAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEwX0xOQV9JQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE5XSBJRkFNUF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEwX0lGQU1QX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTBfSUZBTVBfVFJJTV9NICAgICAgICAgICAgICAgICAweDAwRjgwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMF9JRkFNUF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6IFsxODoxNF0gQ1RMX1BBMF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEwX0NUTF9QQTBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTBfQ1RMX1BBMF9UUklNX00gICAgICAgICAgICAgICAweDAwMDdDMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMF9DVExfUEEwX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgWzY6MF0gUkZMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTBfUkZMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMF9SRkxET19UUklNX09VVFBVVF9NICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEwX1JGTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1JGX0ZST05URU5EX0RJVjEyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gSUZBTVBfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTJfSUZBTVBfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMl9JRkFNUF9JQl9NICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEyX0lGQU1QX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBMTkFfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTJfTE5BX0lCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMl9MTkFfSUJfTSAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEyX0xOQV9JQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE5XSBJRkFNUF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEyX0lGQU1QX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTJfSUZBTVBfVFJJTV9NICAgICAgICAgICAgICAgICAweDAwRjgwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMl9JRkFNUF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6IFsxODoxNF0gQ1RMX1BBMF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEyX0NUTF9QQTBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTJfQ1RMX1BBMF9UUklNX00gICAgICAgICAgICAgICAweDAwMDdDMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMl9DVExfUEEwX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgWzY6MF0gUkZMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTJfUkZMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMl9SRkxET19UUklNX09VVFBVVF9NICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEyX1JGTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1JGX0ZST05URU5EX0RJVjE1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gSUZBTVBfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTVfSUZBTVBfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxNV9JRkFNUF9JQl9NICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjE1X0lGQU1QX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBMTkFfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTVfTE5BX0lCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxNV9MTkFfSUJfTSAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjE1X0xOQV9JQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE5XSBJRkFNUF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjE1X0lGQU1QX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTVfSUZBTVBfVFJJTV9NICAgICAgICAgICAgICAgICAweDAwRjgwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxNV9JRkFNUF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6IFsxODoxNF0gQ1RMX1BBMF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjE1X0NUTF9QQTBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTVfQ1RMX1BBMF9UUklNX00gICAgICAgICAgICAgICAweDAwMDdDMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxNV9DVExfUEEwX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgWzY6MF0gUkZMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTVfUkZMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxNV9SRkxET19UUklNX09VVFBVVF9NICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjE1X1JGTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1JGX0ZST05URU5EX0RJVjMwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gSUZBTVBfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMzBfSUZBTVBfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYzMF9JRkFNUF9JQl9NICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjMwX0lGQU1QX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBMTkFfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMzBfTE5BX0lCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYzMF9MTkFfSUJfTSAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjMwX0xOQV9JQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE5XSBJRkFNUF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjMwX0lGQU1QX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMzBfSUZBTVBfVFJJTV9NICAgICAgICAgICAgICAgICAweDAwRjgwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYzMF9JRkFNUF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6IFsxODoxNF0gQ1RMX1BBMF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjMwX0NUTF9QQTBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMzBfQ1RMX1BBMF9UUklNX00gICAgICAgICAgICAgICAweDAwMDdDMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYzMF9DVExfUEEwX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgWzY6MF0gUkZMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMzBfUkZMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYzMF9SRkxET19UUklNX09VVFBVVF9NICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjMwX1JGTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1NZTlRIX0RJVjUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI3OjEyXSBSRkNfTURNX0RFTUlRTUMwCisvLworLy8gVHJpbSB2YWx1ZSBmb3IgUkYgQ29yZS4KKy8vIFZhbHVlIGlzIHJlYWQgYnkgUkYgQ29yZSBST00gRlcgZHVyaW5nIFJGIENvcmUgaW5pdGlhbGl6YXRpb24uCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY1X1JGQ19NRE1fREVNSVFNQzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjVfUkZDX01ETV9ERU1JUU1DMF9NICAgICAgICAgICAgICAgICAgMHgwRkZGRjAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNV9SRkNfTURNX0RFTUlRTUMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjZdIExET1ZDT19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY1X0xET1ZDT19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjVfTERPVkNPX1RSSU1fT1VUUFVUX00gICAgICAgICAgICAgICAgMHgwMDAwMEZDMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNV9MRE9WQ09fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIFNMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNV9TTERPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY1X1NMRE9fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjVfU0xET19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1NZTlRIX0RJVjYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI3OjEyXSBSRkNfTURNX0RFTUlRTUMwCisvLworLy8gVHJpbSB2YWx1ZSBmb3IgUkYgQ29yZS4KKy8vIFZhbHVlIGlzIHJlYWQgYnkgUkYgQ29yZSBST00gRlcgZHVyaW5nIFJGIENvcmUgaW5pdGlhbGl6YXRpb24uCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY2X1JGQ19NRE1fREVNSVFNQzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjZfUkZDX01ETV9ERU1JUU1DMF9NICAgICAgICAgICAgICAgICAgMHgwRkZGRjAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNl9SRkNfTURNX0RFTUlRTUMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjZdIExET1ZDT19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY2X0xET1ZDT19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjZfTERPVkNPX1RSSU1fT1VUUFVUX00gICAgICAgICAgICAgICAgMHgwMDAwMEZDMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNl9MRE9WQ09fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIFNMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNl9TTERPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY2X1NMRE9fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjZfU0xET19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1NZTlRIX0RJVjEwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoxMl0gUkZDX01ETV9ERU1JUU1DMAorLy8KKy8vIFRyaW0gdmFsdWUgZm9yIFJGIENvcmUuCisvLyBWYWx1ZSBpcyByZWFkIGJ5IFJGIENvcmUgUk9NIEZXIGR1cmluZyBSRiBDb3JlIGluaXRpYWxpemF0aW9uLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTBfUkZDX01ETV9ERU1JUU1DMF9XICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMF9SRkNfTURNX0RFTUlRTUMwX00gICAgICAgICAgICAgICAgIDB4MEZGRkYwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEwX1JGQ19NRE1fREVNSVFNQzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogIFsxMTo2XSBMRE9WQ09fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTBfTERPVkNPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMF9MRE9WQ09fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgIDB4MDAwMDBGQzAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEwX0xET1ZDT19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBTTERPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEwX1NMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTBfU0xET19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMF9TTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19TWU5USF9ESVYxMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjc6MTJdIFJGQ19NRE1fREVNSVFNQzAKKy8vCisvLyBUcmltIHZhbHVlIGZvciBSRiBDb3JlLgorLy8gVmFsdWUgaXMgcmVhZCBieSBSRiBDb3JlIFJPTSBGVyBkdXJpbmcgUkYgQ29yZSBpbml0aWFsaXphdGlvbi4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEyX1JGQ19NRE1fREVNSVFNQzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTJfUkZDX01ETV9ERU1JUU1DMF9NICAgICAgICAgICAgICAgICAweDBGRkZGMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMl9SRkNfTURNX0RFTUlRTUMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6Nl0gTERPVkNPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEyX0xET1ZDT19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTJfTERPVkNPX1RSSU1fT1VUUFVUX00gICAgICAgICAgICAgICAweDAwMDAwRkMwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMl9MRE9WQ09fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gU0xET19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMl9TTERPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEyX1NMRE9fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTJfU0xET19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfU1lOVEhfRElWMTUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI3OjEyXSBSRkNfTURNX0RFTUlRTUMwCisvLworLy8gVHJpbSB2YWx1ZSBmb3IgUkYgQ29yZS4KKy8vIFZhbHVlIGlzIHJlYWQgYnkgUkYgQ29yZSBST00gRlcgZHVyaW5nIFJGIENvcmUgaW5pdGlhbGl6YXRpb24uCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxNV9SRkNfTURNX0RFTUlRTUMwX1cgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjE1X1JGQ19NRE1fREVNSVFNQzBfTSAgICAgICAgICAgICAgICAgMHgwRkZGRjAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTVfUkZDX01ETV9ERU1JUU1DMF9TICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjZdIExET1ZDT19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxNV9MRE9WQ09fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjE1X0xET1ZDT19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgMHgwMDAwMEZDMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTVfTERPVkNPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIFNMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTVfU0xET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxNV9TTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjE1X1NMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1NZTlRIX0RJVjMwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoxMl0gUkZDX01ETV9ERU1JUU1DMAorLy8KKy8vIFRyaW0gdmFsdWUgZm9yIFJGIENvcmUuCisvLyBWYWx1ZSBpcyByZWFkIGJ5IFJGIENvcmUgUk9NIEZXIGR1cmluZyBSRiBDb3JlIGluaXRpYWxpemF0aW9uLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMzBfUkZDX01ETV9ERU1JUU1DMF9XICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYzMF9SRkNfTURNX0RFTUlRTUMwX00gICAgICAgICAgICAgICAgIDB4MEZGRkYwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjMwX1JGQ19NRE1fREVNSVFNQzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogIFsxMTo2XSBMRE9WQ09fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMzBfTERPVkNPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYzMF9MRE9WQ09fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgIDB4MDAwMDBGQzAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjMwX0xET1ZDT19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBTTERPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjMwX1NMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMzBfU0xET19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYzMF9TTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19NSVNDX0FEQ19ESVY1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTY6OV0gUlNTSV9PRkZTRVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNV9SU1NJX09GRlNFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY1X1JTU0lfT0ZGU0VUX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMUZFMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjVfUlNTSV9PRkZTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICBbODo2XSBRVUFOVENUTFRIUkVTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjVfUVVBTlRDVExUSFJFU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNV9RVUFOVENUTFRIUkVTX00gICAgICAgICAgICAgICAgICAweDAwMDAwMUMwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY1X1FVQU5UQ1RMVEhSRVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gREFDVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY1X0RBQ1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjVfREFDVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNV9EQUNUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfTUlTQ19BRENfRElWNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE2OjldIFJTU0lfT0ZGU0VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjZfUlNTSV9PRkZTRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNl9SU1NJX09GRlNFVF9NICAgICAgICAgICAgICAgICAgICAweDAwMDFGRTAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY2X1JTU0lfT0ZGU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgWzg6Nl0gUVVBTlRDVExUSFJFUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY2X1FVQU5UQ1RMVEhSRVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjZfUVVBTlRDVExUSFJFU19NICAgICAgICAgICAgICAgICAgMHgwMDAwMDFDMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNl9RVUFOVENUTFRIUkVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIERBQ1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNl9EQUNUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY2X0RBQ1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjZfREFDVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX01JU0NfQURDX0RJVjEwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTY6OV0gUlNTSV9PRkZTRVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTBfUlNTSV9PRkZTRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMF9SU1NJX09GRlNFVF9NICAgICAgICAgICAgICAgICAgIDB4MDAwMUZFMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEwX1JTU0lfT0ZGU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICBbODo2XSBRVUFOVENUTFRIUkVTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEwX1FVQU5UQ1RMVEhSRVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTBfUVVBTlRDVExUSFJFU19NICAgICAgICAgICAgICAgICAweDAwMDAwMUMwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMF9RVUFOVENUTFRIUkVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gREFDVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMF9EQUNUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEwX0RBQ1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTBfREFDVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfTUlTQ19BRENfRElWMTIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNjo5XSBSU1NJX09GRlNFVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMl9SU1NJX09GRlNFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEyX1JTU0lfT0ZGU0VUX00gICAgICAgICAgICAgICAgICAgMHgwMDAxRkUwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTJfUlNTSV9PRkZTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgIFs4OjZdIFFVQU5UQ1RMVEhSRVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTJfUVVBTlRDVExUSFJFU19XICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMl9RVUFOVENUTFRIUkVTX00gICAgICAgICAgICAgICAgIDB4MDAwMDAxQzAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEyX1FVQU5UQ1RMVEhSRVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBEQUNUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEyX0RBQ1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTJfREFDVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMl9EQUNUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19NSVNDX0FEQ19ESVYxNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE2OjldIFJTU0lfT0ZGU0VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjE1X1JTU0lfT0ZGU0VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTVfUlNTSV9PRkZTRVRfTSAgICAgICAgICAgICAgICAgICAweDAwMDFGRTAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxNV9SU1NJX09GRlNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgWzg6Nl0gUVVBTlRDVExUSFJFUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxNV9RVUFOVENUTFRIUkVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjE1X1FVQU5UQ1RMVEhSRVNfTSAgICAgICAgICAgICAgICAgMHgwMDAwMDFDMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTVfUVVBTlRDVExUSFJFU19TICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIERBQ1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTVfREFDVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxNV9EQUNUUklNX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjE1X0RBQ1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX01JU0NfQURDX0RJVjMwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTY6OV0gUlNTSV9PRkZTRVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMzBfUlNTSV9PRkZTRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYzMF9SU1NJX09GRlNFVF9NICAgICAgICAgICAgICAgICAgIDB4MDAwMUZFMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjMwX1JTU0lfT0ZGU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICBbODo2XSBRVUFOVENUTFRIUkVTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjMwX1FVQU5UQ1RMVEhSRVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMzBfUVVBTlRDVExUSFJFU19NICAgICAgICAgICAgICAgICAweDAwMDAwMUMwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYzMF9RVUFOVENUTFRIUkVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gREFDVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYzMF9EQUNUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjMwX0RBQ1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMzBfREFDVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19TSERXX0RJRV9JRF8wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gSURfMzFfMAorLy8KKy8vIFNoYWRvdyBvZiBESUVfSURfMCByZWdpc3RlciBpbiBlRnVzZSByb3cgbnVtYmVyIDMKKyNkZWZpbmUgRkNGRzFfU0hEV19ESUVfSURfMF9JRF8zMV8wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGQ0ZHMV9TSERXX0RJRV9JRF8wX0lEXzMxXzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZDRkcxX1NIRFdfRElFX0lEXzBfSURfMzFfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1NIRFdfRElFX0lEXzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBJRF82M18zMgorLy8KKy8vIFNoYWRvdyBvZiBESUVfSURfMSByZWdpc3RlciBpbiBlRnVzZSByb3cgbnVtYmVyIDQKKyNkZWZpbmUgRkNGRzFfU0hEV19ESUVfSURfMV9JRF82M18zMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGQ0ZHMV9TSERXX0RJRV9JRF8xX0lEXzYzXzMyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZDRkcxX1NIRFdfRElFX0lEXzFfSURfNjNfMzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1NIRFdfRElFX0lEXzIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBJRF85NV82NAorLy8KKy8vIFNoYWRvdyBvZiBESUVfSURfMiByZWdpc3RlciBpbiBlRnVzZSByb3cgbnVtYmVyIDUKKyNkZWZpbmUgRkNGRzFfU0hEV19ESUVfSURfMl9JRF85NV82NF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGQ0ZHMV9TSERXX0RJRV9JRF8yX0lEXzk1XzY0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZDRkcxX1NIRFdfRElFX0lEXzJfSURfOTVfNjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1NIRFdfRElFX0lEXzMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBJRF8xMjdfOTYKKy8vCisvLyBTaGFkb3cgb2YgRElFX0lEXzMgcmVnaXN0ZXIgaW4gZUZ1c2Ugcm93IG51bWJlciA2CisjZGVmaW5lIEZDRkcxX1NIRFdfRElFX0lEXzNfSURfMTI3Xzk2X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkNGRzFfU0hEV19ESUVfSURfM19JRF8xMjdfOTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGQ0ZHMV9TSERXX0RJRV9JRF8zX0lEXzEyN185Nl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19TSERXX09TQ19CSUFTX0xET19UUklNCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyODoyN10gU0VUX1JDT1NDX0hGX0NPQVJTRV9SRVNJU1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fU0VUX1JDT1NDX0hGX0NPQVJTRV9SRVNJU1RPUl9XICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9TRVRfUkNPU0NfSEZfQ09BUlNFX1JFU0lTVE9SX00gIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1NFVF9SQ09TQ19IRl9DT0FSU0VfUkVTSVNUT1JfUyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjNdIFRSSU1NQUcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1RSSU1NQUdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fVFJJTU1BR19NICAgICAgICAgICAgICAgICAgICAgIDB4MDc4MDAwMDAKKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9UUklNTUFHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogWzIyOjE4XSBUUklNSVJFRgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fVFJJTUlSRUZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9UUklNSVJFRl9NICAgICAgICAgICAgICAgICAgICAgMHgwMDdDMDAwMAorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1RSSU1JUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIElUUklNX0RJR19MRE8KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX0lUUklNX0RJR19MRE9fVyAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fSVRSSU1fRElHX0xET19NICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9JVFJJTV9ESUdfTERPX1MgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjEyXSBWVFJJTV9ESUcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1ZUUklNX0RJR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fVlRSSU1fRElHX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9WVFJJTV9ESUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogIFsxMTo4XSBWVFJJTV9DT0FSU0UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1ZUUklNX0NPQVJTRV9XICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fVlRSSU1fQ09BUlNFX00gICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9WVFJJTV9DT0FSU0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBSQ09TQ0hGX0NUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9SQ09TQ0hGX0NUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1JDT1NDSEZfQ1RSSU1fTSAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fUkNPU0NIRl9DVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1NIRFdfQU5BX1RSSU0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI2OjI1XSBCT0RfQkFOREdBUF9UUklNX0NORgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fQk9EX0JBTkRHQVBfVFJJTV9DTkZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9CT0RfQkFOREdBUF9UUklNX0NORl9NICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX0JPRF9CQU5ER0FQX1RSSU1fQ05GX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFZERFJfRU5BQkxFX1BHMQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVkREUl9FTkFCTEVfUEcxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9WRERSX0VOQUJMRV9QRzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1ZERFJfRU5BQkxFX1BHMV9NICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVkREUl9FTkFCTEVfUEcxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gVkREUl9PS19IWVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1ZERFJfT0tfSFlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVkREUl9PS19IWVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9WRERSX09LX0hZU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1ZERFJfT0tfSFlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiBbMjI6MjFdIElQVEFUX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX0lQVEFUX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fSVBUQVRfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MDAwMDAKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9JUFRBVF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogWzIwOjE2XSBWRERSX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1ZERFJfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVkREUl9UUklNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxRjAwMDAKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9WRERSX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjExXSBUUklNQk9EX0lOVE1PREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1RSSU1CT0RfSU5UTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVFJJTUJPRF9JTlRNT0RFX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEY4MDAKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9UUklNQk9EX0lOVE1PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogIFsxMDo2XSBUUklNQk9EX0VYVE1PREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1RSSU1CT0RfRVhUTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVFJJTUJPRF9FWFRNT0RFX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3QzAKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9UUklNQk9EX0VYVE1PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBUUklNVEVNUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVFJJTVRFTVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9UUklNVEVNUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1RSSU1URU1QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19GTEFTSF9OVU1CRVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBMT1RfTlVNQkVSCisvLworLy8gTnVtYmVyIG9mIHRoZSBtYW51ZmFjdHVyaW5nIGxvdCB0aGF0IHByb2R1Y2VkIHRoaXMgdW5pdC4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfTlVNQkVSX0xPVF9OVU1CRVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9OVU1CRVJfTE9UX05VTUJFUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZDRkcxX0ZMQVNIX05VTUJFUl9MT1RfTlVNQkVSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0ZMQVNIX0NPT1JESU5BVEUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBYQ09PUkRJTkFURQorLy8KKy8vIFggY29vcmRpbmF0ZSBvZiB0aGlzIHVuaXQgb24gdGhlIHdhZmVyLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DT09SRElOQVRFX1hDT09SRElOQVRFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NPT1JESU5BVEVfWENPT1JESU5BVEVfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ09PUkRJTkFURV9YQ09PUkRJTkFURV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTowXSBZQ09PUkRJTkFURQorLy8KKy8vIFkgY29vcmRpbmF0ZSBvZiB0aGlzIHVuaXQgb24gdGhlIHdhZmVyLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DT09SRElOQVRFX1lDT09SRElOQVRFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NPT1JESU5BVEVfWUNPT1JESU5BVEVfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ09PUkRJTkFURV9ZQ09PUkRJTkFURV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfRV9QCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gUFNVCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfRV9QX1BTVV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FX1BfUFNVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VfUF9QU1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gRVNVCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfRV9QX0VTVV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FX1BfRVNVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VfUF9FU1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gUFZTVQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VfUF9QVlNVX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRV9QX1BWU1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FX1BfUFZTVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEVWU1UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FX1BfRVZTVV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VfUF9FVlNVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRV9QX0VWU1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfQ19FX1BfUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFJWU1UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DX0VfUF9SX1JWU1VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NfRV9QX1JfUlZTVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ19FX1BfUl9SVlNVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBQVl9BQ0NFU1MKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DX0VfUF9SX1BWX0FDQ0VTU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NfRV9QX1JfUFZfQUNDRVNTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ19FX1BfUl9QVl9BQ0NFU1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjEyXSBBX0VYRVpfU0VUVVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DX0VfUF9SX0FfRVhFWl9TRVRVUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NfRV9QX1JfQV9FWEVaX1NFVFVQX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ19FX1BfUl9BX0VYRVpfU0VUVVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogIFsxMTowXSBDVlNVCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ19FX1BfUl9DVlNVX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DX0VfUF9SX0NWU1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkZGCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NfRV9QX1JfQ1ZTVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0ZMQVNIX1BfUl9QVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFBICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfUF9SX1BWX1BIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QX1JfUFZfUEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BfUl9QVl9QSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gUkgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QX1JfUFZfUkhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BfUl9QVl9SSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfUF9SX1BWX1JIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBQVkgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QX1JfUFZfUFZIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BfUl9QVl9QVkhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfUF9SX1BWX1BWSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBQVkgyCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfUF9SX1BWX1BWSDJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QX1JfUFZfUFZIMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BfUl9QVl9QVkgyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0ZMQVNIX0VIX1NFUQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIEVICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfRUhfU0VRX0VIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FSF9TRVFfRUhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VIX1NFUV9FSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gU0VRCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfRUhfU0VRX1NFUV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FSF9TRVFfU0VRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VIX1NFUV9TRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6IFsxNToxMl0gVlNUQVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FSF9TRVFfVlNUQVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VIX1NFUV9WU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRUhfU0VRX1ZTVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogIFsxMTowXSBTTV9GUkVRVUVOQ1kKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FSF9TRVFfU01fRlJFUVVFTkNZX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VIX1NFUV9TTV9GUkVRVUVOQ1lfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRUhfU0VRX1NNX0ZSRVFVRU5DWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfVkhWX0UKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBWSFZfRV9TVEFSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9FX1ZIVl9FX1NUQVJUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX0VfVkhWX0VfU1RBUlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfRV9WSFZfRV9TVEFSVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjBdIFZIVl9FX1NURVBfSElHSFQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfRV9WSFZfRV9TVEVQX0hJR0hUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9FX1ZIVl9FX1NURVBfSElHSFRfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX0VfVkhWX0VfU1RFUF9ISUdIVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfUFAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBQVU1QX1NVCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfUFBfUFVNUF9TVV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QUF9QVU1QX1NVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BQX1BVTVBfU1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICBbMTU6MF0gTUFYX1BQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfUFBfTUFYX1BQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QUF9NQVhfUFBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BQX01BWF9QUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0ZMQVNIX1BST0dfRVAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBNQVhfRVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QUk9HX0VQX01BWF9FUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BST0dfRVBfTUFYX0VQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfUFJPR19FUF9NQVhfRVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTowXSBQUk9HUkFNX1BXCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfUFJPR19FUF9QUk9HUkFNX1BXX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QUk9HX0VQX1BST0dSQU1fUFdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BST0dfRVBfUFJPR1JBTV9QV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0ZMQVNIX0VSQV9QVworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEVSQVNFX1BXCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfRVJBX1BXX0VSQVNFX1BXX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FUkFfUFdfRVJBU0VfUFdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VSQV9QV19FUkFTRV9QV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0ZMQVNIX1ZIVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjc6MjRdIFRSSU0xM19QCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1RSSU0xM19QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfVFJJTTEzX1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9UUklNMTNfUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsxOToxNl0gVkhWX1AKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfVkhWX1BfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9WSFZfUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1ZIVl9QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxMTo4XSBUUklNMTNfRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9UUklNMTNfRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1RSSU0xM19FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfVFJJTTEzX0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFszOjBdIFZIVl9FCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1ZIVl9FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfVkhWX0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9WSFZfRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0ZMQVNIX1ZIVl9QVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjc6MjRdIFRSSU0xM19QVgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9QVl9UUklNMTNfUFZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1BWX1RSSU0xM19QVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfUFZfVFJJTTEzX1BWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMTk6MTZdIFZIVl9QVgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9QVl9WSFZfUFZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1BWX1ZIVl9QVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfUFZfVkhWX1BWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFZDRzJQNQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9QVl9WQ0cyUDVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1BWX1ZDRzJQNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfUFZfVkNHMlA1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFZJTkgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfUFZfVklOSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9QVl9WSU5IX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1BWX1ZJTkhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFZTTF9QCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfVl9WU0xfUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WX1ZTTF9QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZfVlNMX1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gVldMX1AKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WX1ZXTF9QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZfVldMX1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVl9WV0xfUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBWX1JFQUQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WX1ZfUkVBRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZfVl9SRUFEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVl9WX1JFQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fVVNFUl9JRAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIFBHX1JFVgorLy8KKy8vIEZpZWxkIHVzZWQgdG8gZGlzdGluZ3Vpc2ggcmV2aXNpb25zIG9mIHRoZSBkZXZpY2UuCisjZGVmaW5lIEZDRkcxX1VTRVJfSURfUEdfUkVWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfVVNFUl9JRF9QR19SRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9VU0VSX0lEX1BHX1JFVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjZdIFZFUgorLy8KKy8vIFZlcnNpb24gbnVtYmVyLgorLy8KKy8vIDB4MDogQml0cyBbMjU6MTJdIG9mIHRoaXMgcmVnaXN0ZXIgaGFzIHRoZSBzdGF0ZWQgbWVhbmluZy4KKy8vCisvLyBBbnkgb3RoZXIgc2V0dGluZyBpbmRpY2F0ZSBhIGRpZmZlcmVudCBlbmNvZGluZyBvZiB0aGVzZSBiaXRzLgorI2RlZmluZSBGQ0ZHMV9VU0VSX0lEX1ZFUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX1VTRVJfSURfVkVSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMDAwMDAKKyNkZWZpbmUgRkNGRzFfVVNFUl9JRF9WRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogWzIyOjE5XSBTRVFVRU5DRQorLy8KKy8vIFNlcXVlbmNlLgorLy8KKy8vIFVzZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG1hcmtldGluZy9vcmRlcmFibGUgcHJvZHVjdCB3aGVyZSBvdGhlciBmaWVsZHMKKy8vIG9mIFVTRVJfSUQgaXMgdGhlIHNhbWUgKHRlbXAgcmFuZ2UsIGZsYXNoIHNpemUsIHZvbHRhZ2UgcmFuZ2UgZXRjKQorI2RlZmluZSBGQ0ZHMV9VU0VSX0lEX1NFUVVFTkNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX1VTRVJfSURfU0VRVUVOQ0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3ODAwMDAKKyNkZWZpbmUgRkNGRzFfVVNFUl9JRF9TRVFVRU5DRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogWzE4OjE2XSBQS0cKKy8vCisvLyBQYWNrYWdlIHR5cGUuCisvLworLy8gMHgwOiA0eDRtbQorLy8gMHgxOiA1eDVtbQorLy8gMHgyOiA3eDdtbQorLy8KKy8vIE90aGVycyB2YWx1ZXMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgorI2RlZmluZSBGQ0ZHMV9VU0VSX0lEX1BLR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX1VTRVJfSURfUEtHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgRkNGRzFfVVNFUl9JRF9QS0dfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjEyXSBQUk9UT0NPTAorLy8KKy8vIFByb3RvY29scyBzdXBwb3J0ZWQuCisvLworLy8gMHgxOiBCTEUKKy8vIDB4MjogUkY0Q0UKKy8vIDB4NDogWmlnYmVlLzZsb3dwYW4KKy8vIDB4ODogUHJvcHJpZXRhcnkKKy8vCisvLyBNb3JlIHRoYW4gb25lIHByb3RvY29sIGNhbiBiZSBzdXBwb3J0ZWQgb24gc2FtZSBkZXZpY2UgLSB2YWx1ZXMgYWJvdmUgYXJlCisvLyB0aGVuIGNvbWJpbmVkLgorI2RlZmluZSBGQ0ZHMV9VU0VSX0lEX1BST1RPQ09MX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX1VTRVJfSURfUFJPVE9DT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgRkNGRzFfVVNFUl9JRF9QUk9UT0NPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfT1RQX0RBVEEzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyM10gRUNfU1RFUF9TSVpFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX0VDX1NURVBfU0laRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfRUNfU1RFUF9TSVpFX00gICAgICAgICAgICAgICAgICAgICAgICAweEZGODAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19FQ19TVEVQX1NJWkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gRE9fUFJFQ09ORAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19ET19QUkVDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX0RPX1BSRUNPTkRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfRE9fUFJFQ09ORF9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19ET19QUkVDT05EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6IFsyMToxOF0gTUFYX0VDX0xFVkVMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX01BWF9FQ19MRVZFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfTUFYX0VDX0xFVkVMX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwM0MwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19NQVhfRUNfTEVWRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gVFJJTV8xUDcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfVFJJTV8xUDdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19UUklNXzFQN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX1RSSU1fMVA3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBGTEFTSF9TSVpFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX0ZMQVNIX1NJWkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfRkxBU0hfU0laRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19GTEFTSF9TSVpFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gV0FJVF9TWVNDT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX1dBSVRfU1lTQ09ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfV0FJVF9TWVNDT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19XQUlUX1NZU0NPREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0FOQTJfVFJJTQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIFJDT1NDSEZDVFJJTUZSQUNUX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX1JDT1NDSEZDVFJJTUZSQUNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fUkNPU0NIRkNUUklNRlJBQ1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9SQ09TQ0hGQ1RSSU1GUkFDVF9FTl9NICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX1JDT1NDSEZDVFJJTUZSQUNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogWzMwOjI2XSBSQ09TQ0hGQ1RSSU1GUkFDVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9SQ09TQ0hGQ1RSSU1GUkFDVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX1JDT1NDSEZDVFJJTUZSQUNUX00gICAgICAgICAgICAgICAgICAgICAgICAgMHg3QzAwMDAwMAorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fUkNPU0NIRkNUUklNRlJBQ1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiBbMjQ6MjNdIFNFVF9SQ09TQ19IRl9GSU5FX1JFU0lTVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX1NFVF9SQ09TQ19IRl9GSU5FX1JFU0lTVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fU0VUX1JDT1NDX0hGX0ZJTkVfUkVTSVNUT1JfTSAgICAgICAgICAgICAgICAweDAxODAwMDAwCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9TRVRfUkNPU0NfSEZfRklORV9SRVNJU1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gQVRFU1RMRl9VRElHTERPX0lCSUFTX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fQVRFU1RMRl9VRElHTERPX0lCSUFTX1RSSU0gICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9BVEVTVExGX1VESUdMRE9fSUJJQVNfVFJJTV9CSVROICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0FURVNUTEZfVURJR0xET19JQklBU19UUklNX00gICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fQVRFU1RMRl9VRElHTERPX0lCSUFTX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiBbMjE6MTZdIE5BTk9BTVBfUkVTX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fTkFOT0FNUF9SRVNfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9OQU5PQU1QX1JFU19UUklNX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzRjAwMDAKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX05BTk9BTVBfUkVTX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzExXSBESVRIRVJfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fRElUSEVSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9ESVRIRVJfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0RJVEhFUl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fRElUSEVSX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgWzEwOjhdIERDRENfSVBFQUsKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fRENEQ19JUEVBS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9EQ0RDX0lQRUFLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0RDRENfSVBFQUtfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzo2XSBERUFEX1RJTUVfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9ERUFEX1RJTUVfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0RFQURfVElNRV9UUklNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fREVBRF9USU1FX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjNdIERDRENfTE9XX0VOX1NFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9EQ0RDX0xPV19FTl9TRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0RDRENfTE9XX0VOX1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fRENEQ19MT1dfRU5fU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgIFsyOjBdIERDRENfSElHSF9FTl9TRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fRENEQ19ISUdIX0VOX1NFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9EQ0RDX0hJR0hfRU5fU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0RDRENfSElHSF9FTl9TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fTERPX1RSSU0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI4OjI0XSBWRERSX1RSSU1fU0xFRVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9MRE9fVFJJTV9WRERSX1RSSU1fU0xFRVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0xET19UUklNX1ZERFJfVFJJTV9TTEVFUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfTERPX1RSSU1fVkREUl9UUklNX1NMRUVQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzE4OjE2XSBHTERPX0NVUlNSQworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0xET19UUklNX0dMRE9fQ1VSU1JDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfTERPX1RSSU1fR0xET19DVVJTUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3MDAwMAorI2RlZmluZSBGQ0ZHMV9MRE9fVFJJTV9HTERPX0NVUlNSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTI6MTFdIElUUklNX0RJR0xET19MT0FECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfTERPX1RSSU1fSVRSSU1fRElHTERPX0xPQURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9MRE9fVFJJTV9JVFJJTV9ESUdMRE9fTE9BRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxODAwCisjZGVmaW5lIEZDRkcxX0xET19UUklNX0lUUklNX0RJR0xET19MT0FEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICBbMTA6OF0gSVRSSU1fVURJR0xETworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0xET19UUklNX0lUUklNX1VESUdMRE9fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfTERPX1RSSU1fSVRSSU1fVURJR0xET19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBGQ0ZHMV9MRE9fVFJJTV9JVFJJTV9VRElHTERPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFsyOjBdIFZUUklNX0RFTFRBCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfTERPX1RSSU1fVlRSSU1fREVMVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9MRE9fVFJJTV9WVFJJTV9ERUxUQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEZDRkcxX0xET19UUklNX1ZUUklNX0RFTFRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX01BQ19CTEVfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEFERFJfMF8zMQorLy8KKy8vIFRoZSBmaXJzdCAzMi1iaXRzIG9mIHRoZSA2NC1iaXQgTUFDIEJMRSBhZGRyZXNzCisjZGVmaW5lIEZDRkcxX01BQ19CTEVfMF9BRERSXzBfMzFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkNGRzFfTUFDX0JMRV8wX0FERFJfMF8zMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGQ0ZHMV9NQUNfQkxFXzBfQUREUl8wXzMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19NQUNfQkxFXzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBBRERSXzMyXzYzCisvLworLy8gVGhlIGxhc3QgMzItYml0cyBvZiB0aGUgNjQtYml0IE1BQyBCTEUgYWRkcmVzcworI2RlZmluZSBGQ0ZHMV9NQUNfQkxFXzFfQUREUl8zMl82M19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZDRkcxX01BQ19CTEVfMV9BRERSXzMyXzYzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkNGRzFfTUFDX0JMRV8xX0FERFJfMzJfNjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fTUFDXzE1XzRfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEFERFJfMF8zMQorLy8KKy8vIFRoZSBmaXJzdCAzMi1iaXRzIG9mIHRoZSA2NC1iaXQgTUFDIDE1LjQgYWRkcmVzcworI2RlZmluZSBGQ0ZHMV9NQUNfMTVfNF8wX0FERFJfMF8zMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZDRkcxX01BQ18xNV80XzBfQUREUl8wXzMxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkNGRzFfTUFDXzE1XzRfMF9BRERSXzBfMzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fTUFDXzE1XzRfMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEFERFJfMzJfNjMKKy8vCisvLyBUaGUgbGFzdCAzMi1iaXRzIG9mIHRoZSA2NC1iaXQgTUFDIDE1LjQgYWRkcmVzcworI2RlZmluZSBGQ0ZHMV9NQUNfMTVfNF8xX0FERFJfMzJfNjNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZDRkcxX01BQ18xNV80XzFfQUREUl8zMl82M19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkNGRzFfTUFDXzE1XzRfMV9BRERSXzMyXzYzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfT1RQX0RBVEE0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gU1RBTkRCWV9NT0RFX1NFTF9JTlRfV1JUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfSU5UX1dSVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9NT0RFX1NFTF9JTlRfV1JUX0JJVE4gICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0lOVF9XUlRfTSAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfSU5UX1dSVF9TICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogWzMwOjI5XSBTVEFOREJZX1BXX1NFTF9JTlRfV1JUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfUFdfU0VMX0lOVF9XUlRfVyAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9QV19TRUxfSU5UX1dSVF9NICAgICAgICAgICAgICAweDYwMDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9JTlRfV1JUX1MgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gRElTX1NUQU5EQllfSU5UX1dSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9JTlRfV1JUICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19TVEFOREJZX0lOVF9XUlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfSU5UX1dSVF9NICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9JTlRfV1JUX1MgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gRElTX0lETEVfSU5UX1dSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9JTlRfV1JUICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0lOVF9XUlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfSU5UX1dSVF9NICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9JTlRfV1JUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gVklOX0FUX1hfSU5UX1dSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9WSU5fQVRfWF9JTlRfV1JUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1ZJTl9BVF9YX0lOVF9XUlRfTSAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfVklOX0FUX1hfSU5UX1dSVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIFNUQU5EQllfTU9ERV9TRUxfRVhUX1dSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0VYVF9XUlQgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfRVhUX1dSVF9CSVROICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9NT0RFX1NFTF9FWFRfV1JUX00gICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0VYVF9XUlRfUyAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6IFsyMjoyMV0gU1RBTkRCWV9QV19TRUxfRVhUX1dSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9FWFRfV1JUX1cgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfUFdfU0VMX0VYVF9XUlRfTSAgICAgICAgICAgICAgMHgwMDYwMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9QV19TRUxfRVhUX1dSVF9TICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIERJU19TVEFOREJZX0VYVF9XUlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfRVhUX1dSVCAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9FWFRfV1JUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19TVEFOREJZX0VYVF9XUlRfTSAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfRVhUX1dSVF9TICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIERJU19JRExFX0VYVF9XUlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfRVhUX1dSVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9FWFRfV1JUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0VYVF9XUlRfTSAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfRVhUX1dSVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiBbMTg6MTZdIFZJTl9BVF9YX0VYVF9XUlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfVklOX0FUX1hfRVhUX1dSVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9WSU5fQVRfWF9FWFRfV1JUX00gICAgICAgICAgICAgICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1ZJTl9BVF9YX0VYVF9XUlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBTVEFOREJZX01PREVfU0VMX0lOVF9SRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0lOVF9SRCAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfSU5UX1JEX0JJVE4gICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9NT0RFX1NFTF9JTlRfUkRfTSAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0lOVF9SRF9TICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6IFsxNDoxM10gU1RBTkRCWV9QV19TRUxfSU5UX1JECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfUFdfU0VMX0lOVF9SRF9XICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9QV19TRUxfSU5UX1JEX00gICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9JTlRfUkRfUyAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gRElTX1NUQU5EQllfSU5UX1JECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19TVEFOREJZX0lOVF9SRCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfSU5UX1JEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9JTlRfUkRfTSAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19TVEFOREJZX0lOVF9SRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBESVNfSURMRV9JTlRfUkQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfSU5UX1JEICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9JTlRfUkRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0lOVF9SRF9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfSU5UX1JEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgWzEwOjhdIFZJTl9BVF9YX0lOVF9SRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9WSU5fQVRfWF9JTlRfUkRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1ZJTl9BVF9YX0lOVF9SRF9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfVklOX0FUX1hfSU5UX1JEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIFNUQU5EQllfTU9ERV9TRUxfRVhUX1JECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfRVhUX1JEICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9NT0RFX1NFTF9FWFRfUkRfQklUTiAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0VYVF9SRF9NICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfRVhUX1JEX1MgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICBbNjo1XSBTVEFOREJZX1BXX1NFTF9FWFRfUkQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9QV19TRUxfRVhUX1JEX1cgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9FWFRfUkRfTSAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfUFdfU0VMX0VYVF9SRF9TICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBESVNfU1RBTkRCWV9FWFRfUkQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfRVhUX1JEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9FWFRfUkRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19TVEFOREJZX0VYVF9SRF9NICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfRVhUX1JEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIERJU19JRExFX0VYVF9SRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9FWFRfUkQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0VYVF9SRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfRVhUX1JEX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9FWFRfUkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgWzI6MF0gVklOX0FUX1hfRVhUX1JECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1ZJTl9BVF9YX0VYVF9SRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfVklOX0FUX1hfRVhUX1JEX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9WSU5fQVRfWF9FWFRfUkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX01JU0NfVFJJTQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFRFTVBWU0xPUEUKKy8vCisvLyBTaWduZWQgYnl0ZSB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIFRFTVAgc2xvcGUgd2l0aCBiYXR0ZXJ5IHZvbHRhZ2UsIGluCisvLyBkZWdyZWVzIEMgLyBWLCB3aXRoIGZvdXIgZnJhY3Rpb25hbCBiaXRzLgorI2RlZmluZSBGQ0ZHMV9NSVNDX1RSSU1fVEVNUFZTTE9QRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX01JU0NfVFJJTV9URU1QVlNMT1BFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfTUlTQ19UUklNX1RFTVBWU0xPUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fUkNPU0NfSEZfVEVNUENPTVAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBGSU5FX1JFU0lTVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfUkNPU0NfSEZfVEVNUENPTVBfRklORV9SRVNJU1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9SQ09TQ19IRl9URU1QQ09NUF9GSU5FX1JFU0lTVE9SX00gICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX1JDT1NDX0hGX1RFTVBDT01QX0ZJTkVfUkVTSVNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gQ1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9SQ09TQ19IRl9URU1QQ09NUF9DVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1JDT1NDX0hGX1RFTVBDT01QX0NUUklNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfUkNPU0NfSEZfVEVNUENPTVBfQ1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBDVFJJTUZSQUNUX1FVQUQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9SQ09TQ19IRl9URU1QQ09NUF9DVFJJTUZSQUNUX1FVQURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1JDT1NDX0hGX1RFTVBDT01QX0NUUklNRlJBQ1RfUVVBRF9NICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkNGRzFfUkNPU0NfSEZfVEVNUENPTVBfQ1RSSU1GUkFDVF9RVUFEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBDVFJJTUZSQUNUX1NMT1BFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfUkNPU0NfSEZfVEVNUENPTVBfQ1RSSU1GUkFDVF9TTE9QRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9SQ09TQ19IRl9URU1QQ09NUF9DVFJJTUZSQUNUX1NMT1BFX00gICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX1JDT1NDX0hGX1RFTVBDT01QX0NUUklNRlJBQ1RfU0xPUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0lDRVBJQ0tfREVWSUNFX0lECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gUEdfUkVWCisvLworLy8gRmllbGQgdXNlZCB0byBkaXN0aW5ndWlzaCByZXZpc2lvbnMgb2YgdGhlIGRldmljZS4KKyNkZWZpbmUgRkNGRzFfSUNFUElDS19ERVZJQ0VfSURfUEdfUkVWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9JQ0VQSUNLX0RFVklDRV9JRF9QR19SRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIEZDRkcxX0lDRVBJQ0tfREVWSUNFX0lEX1BHX1JFVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoxMl0gV0FGRVJfSUQKKy8vCisvLyBGaWVsZCB1c2VkIHRvIGlkZW50aWZ5IHNpbGljb24gZGllLgorI2RlZmluZSBGQ0ZHMV9JQ0VQSUNLX0RFVklDRV9JRF9XQUZFUl9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0lDRVBJQ0tfREVWSUNFX0lEX1dBRkVSX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkYwMDAKKyNkZWZpbmUgRkNGRzFfSUNFUElDS19ERVZJQ0VfSURfV0FGRVJfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogIFsxMTowXSBNQU5VRkFDVFVSRVJfSUQKKy8vCisvLyBNYW51ZmFjdHVyZXIgY29kZS4KKy8vCisvLyAweDAyRjogVGV4YXMgSW5zdHJ1bWVudHMKKyNkZWZpbmUgRkNGRzFfSUNFUElDS19ERVZJQ0VfSURfTUFOVUZBQ1RVUkVSX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGQ0ZHMV9JQ0VQSUNLX0RFVklDRV9JRF9NQU5VRkFDVFVSRVJfSURfTSAgICAgICAgICAgICAgICAgICAweDAwMDAwRkZGCisjZGVmaW5lIEZDRkcxX0lDRVBJQ0tfREVWSUNFX0lEX01BTlVGQUNUVVJFUl9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0ZDRkcxX1JFVklTSU9OCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gUkVWCisvLworLy8gVGhlIHJldmlzaW9uIG51bWJlciBvZiB0aGUgRkNGRzEgbGF5b3V0LiBUaGlzIHZhbHVlIHdpbGwgYmUgcmVhZCBieQorLy8gYXBwbGljYXRpb24gU1cgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIEZDRkcxIHBhcmFtZXRlcnMgdGhhdCBoYXZlIHZhbGlkCisvLyB2YWx1ZXMuIFRoaXMgcmV2aXNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVtZW50ZWQgYnkgMSBiZWZvcmUgYW55IGRldmljZXMgYXJlCisvLyB0byBiZSBwcm9kdWNlZCBpZiB0aGUgRkNGRzEgbGF5b3V0IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBwcm9kdWN0aW9uCisvLyBvZiBkZXZpY2VzLgorLy8gVmFsdWUgbWlndGggY2hhbmdlIHdpdGhvdXQgd2FybmluZy4KKyNkZWZpbmUgRkNGRzFfRkNGRzFfUkVWSVNJT05fUkVWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGQ0ZHMV9GQ0ZHMV9SRVZJU0lPTl9SRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZDRkcxX0ZDRkcxX1JFVklTSU9OX1JFVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX01JU0NfT1RQX0RBVEEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBSQ09TQ19IRl9JVFVORQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfUkNPU0NfSEZfSVRVTkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9SQ09TQ19IRl9JVFVORV9NICAgICAgICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1JDT1NDX0hGX0lUVU5FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjBdIFJDT1NDX0hGX0NSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1JDT1NDX0hGX0NSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfUkNPU0NfSEZfQ1JJTV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEZGMDAwMDAKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9SQ09TQ19IRl9DUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogWzE5OjE1XSBQRVJfTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfUEVSX01fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9QRVJfTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGODAwMAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1BFUl9NX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiBbMTQ6MTJdIFBFUl9FCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9QRVJfRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1BFUl9FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3MDAwCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfUEVSX0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6OF0gUE9fVEFJTF9SRVNfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfUE9fVEFJTF9SRVNfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9QT19UQUlMX1JFU19UUklNX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1BPX1RBSUxfUkVTX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFRFU1RfUFJPR1JBTV9SRVYKKy8vCisvLyBUaGUgcmV2aXNpb24gb2YgdGhlIHRlc3QgcHJvZ3JhbSB1c2VkIGluIHRoZSBwcm9kdWN0aW9uIHByb2Nlc3Mgd2hlbiBGQ0ZHMQorLy8gd2FzIHByb2dyYW1tZWQuCisvLyBWYWx1ZSBtaWd0aCBjaGFuZ2Ugd2l0aG91dCB3YXJuaW5nLgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1RFU1RfUFJPR1JBTV9SRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfVEVTVF9QUk9HUkFNX1JFVl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9URVNUX1BST0dSQU1fUkVWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fSU9DT05GCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gR1BJT19DTlQKKy8vCisvLyBOdW1iZXIgb2YgYXZhaWxhYmxlIERJT3MuCisjZGVmaW5lIEZDRkcxX0lPQ09ORl9HUElPX0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkNGRzFfSU9DT05GX0dQSU9fQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBGQ0ZHMV9JT0NPTkZfR1BJT19DTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfSUZfQURDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gRkYyQURKCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19GRjJBREpfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0ZGMkFESl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfRkYyQURKX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoyNF0gRkYzQURKCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19GRjNBREpfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0ZGM0FESl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfRkYzQURKX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoyMF0gSU5UM0FESgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfSU5UM0FESl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19JTlQzQURKX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0lOVDNBREpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTZdIEZGMUFESgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfRkYxQURKX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19GRjFBREpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0ZGMUFESl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTU6MTRdIEFBRkNBUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfQUFGQ0FQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19BQUZDQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwQzAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0FBRkNBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiBbMTM6MTBdIElOVDJBREoKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0lOVDJBREpfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfSU5UMkFESl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNDMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19JTlQyQURKX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICBbOTo1XSBJRkRJR0xET19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfSUZESUdMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19JRkRJR0xET19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgICAgMHgwMDAwMDNFMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0lGRElHTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgIFs0OjBdIElGQU5BTERPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19JRkFOQUxET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0lGQU5BTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfSUZBTkFMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19PU0NfVE9QCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyOToyNl0gWE9TQ19IRl9ST1dfUTEyCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX09TQ19UT1BfWE9TQ19IRl9ST1dfUTEyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9YT1NDX0hGX1JPV19RMTJfTSAgICAgICAgICAgICAgICAgICAgICAweDNDMDAwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19PU0NfVE9QX1hPU0NfSEZfUk9XX1ExMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6IFsyNToxMF0gWE9TQ19IRl9DT0xVTU5fUTEyCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX09TQ19UT1BfWE9TQ19IRl9DT0xVTU5fUTEyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9YT1NDX0hGX0NPTFVNTl9RMTJfTSAgICAgICAgICAgICAgICAgICAweDAzRkZGQzAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19PU0NfVE9QX1hPU0NfSEZfQ09MVU1OX1ExMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgWzk6Ml0gUkNPU0NMRl9DVFVORV9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX09TQ19UT1BfUkNPU0NMRl9DVFVORV9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9SQ09TQ0xGX0NUVU5FX1RSSU1fTSAgICAgICAgICAgICAgICAgICAweDAwMDAwM0ZDCisjZGVmaW5lIEZDRkcxX0NPTkZJR19PU0NfVE9QX1JDT1NDTEZfQ1RVTkVfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgWzE6MF0gUkNPU0NMRl9SVFVORV9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX09TQ19UT1BfUkNPU0NMRl9SVFVORV9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9SQ09TQ0xGX1JUVU5FX1RSSU1fTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEZDRkcxX0NPTkZJR19PU0NfVE9QX1JDT1NDTEZfUlRVTkVfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19SRl9GUk9OVEVORAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIElGQU1QX0lCCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0lGQU1QX0lCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfSUZBTVBfSUJfTSAgICAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9JRkFNUF9JQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoyNF0gTE5BX0lCCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0xOQV9JQl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfTE5BX0lCX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9MTkFfSUJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxOV0gSUZBTVBfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9JRkFNUF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0lGQU1QX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMEY4MDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfSUZBTVBfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiBbMTg6MTRdIENUTF9QQTBfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9DVExfUEEwX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0NUTF9QQTBfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgMHgwMDA3QzAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfQ1RMX1BBMF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIFBBVFJJTUNPTVBMRVRFX04KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfUEFUUklNQ09NUExFVEVfTiAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9QQVRSSU1DT01QTEVURV9OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX1BBVFJJTUNPTVBMRVRFX05fTSAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfUEFUUklNQ09NUExFVEVfTl9TICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgIFs2OjBdIFJGTERPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX1JGTERPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfUkZMRE9fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9SRkxET19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19TWU5USAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjc6MTJdIFJGQ19NRE1fREVNSVFNQzAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfUkZDX01ETV9ERU1JUU1DMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9SRkNfTURNX0RFTUlRTUMwX00gICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkYwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX1JGQ19NRE1fREVNSVFNQzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogIFsxMTo2XSBMRE9WQ09fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfTERPVkNPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9MRE9WQ09fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQzAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0xET1ZDT19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBTTERPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX1NMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfU0xET19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9TTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1NPQ19BRENfQUJTX0dBSU4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBTT0NfQURDX0FCU19HQUlOX1RFTVAxCisvLworLy8gU09DX0FEQyBnYWluIGluIGFic29sdXRlIHJlZmVyZW5jZSBtb2RlIGF0IHRlbXBlcmF0dXJlIDEgKDMwQykuIENhbGN1bGF0ZWQKKy8vIGluIHByb2R1Y3Rpb24gdGVzdC4uCisjZGVmaW5lIEZDRkcxX1NPQ19BRENfQUJTX0dBSU5fU09DX0FEQ19BQlNfR0FJTl9URU1QMV9XICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfU09DX0FEQ19BQlNfR0FJTl9TT0NfQURDX0FCU19HQUlOX1RFTVAxX00gICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBGQ0ZHMV9TT0NfQURDX0FCU19HQUlOX1NPQ19BRENfQUJTX0dBSU5fVEVNUDFfUyAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19TT0NfQURDX1JFTF9HQUlOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gU09DX0FEQ19SRUxfR0FJTl9URU1QMQorLy8KKy8vIFNPQ19BREMgZ2FpbiBpbiByZWxhdGl2ZSByZWZlcmVuY2UgbW9kZSBhdCB0ZW1wZXJhdHVyZSAxICgzMEMpLiBDYWxjdWxhdGVkCisvLyBpbiBwcm9kdWN0aW9uIHRlc3QuLgorI2RlZmluZSBGQ0ZHMV9TT0NfQURDX1JFTF9HQUlOX1NPQ19BRENfUkVMX0dBSU5fVEVNUDFfVyAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX1NPQ19BRENfUkVMX0dBSU5fU09DX0FEQ19SRUxfR0FJTl9URU1QMV9NICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRkNGRzFfU09DX0FEQ19SRUxfR0FJTl9TT0NfQURDX1JFTF9HQUlOX1RFTVAxX1MgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fU09DX0FEQ19PRkZTRVRfSU5UCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyMzoxNl0gU09DX0FEQ19SRUxfT0ZGU0VUX1RFTVAxCisvLworLy8gU09DX0FEQyBvZmZzZXQgaW4gcmVsYXRpdmUgcmVmZXJlbmNlIG1vZGUgYXQgdGVtcGVyYXR1cmUgMSAoMzBDKS4gU2lnbmVkCisvLyA4LWJpdCBudW1iZXIuIENhbGN1bGF0ZWQgaW4gcHJvZHVjdGlvbiB0ZXN0Li4KKyNkZWZpbmUgRkNGRzFfU09DX0FEQ19PRkZTRVRfSU5UX1NPQ19BRENfUkVMX09GRlNFVF9URU1QMV9XICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9TT0NfQURDX09GRlNFVF9JTlRfU09DX0FEQ19SRUxfT0ZGU0VUX1RFTVAxX00gICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIEZDRkcxX1NPQ19BRENfT0ZGU0VUX0lOVF9TT0NfQURDX1JFTF9PRkZTRVRfVEVNUDFfUyAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgWzc6MF0gU09DX0FEQ19BQlNfT0ZGU0VUX1RFTVAxCisvLworLy8gU09DX0FEQyBvZmZzZXQgaW4gYWJzb2x1dGUgcmVmZXJlbmNlIG1vZGUgYXQgdGVtcGVyYXR1cmUgMSAoMzBDKS4gU2lnbmVkCisvLyA4LWJpdCBudW1iZXIuIENhbGN1bGF0ZWQgaW4gcHJvZHVjdGlvbiB0ZXN0Li4KKyNkZWZpbmUgRkNGRzFfU09DX0FEQ19PRkZTRVRfSU5UX1NPQ19BRENfQUJTX09GRlNFVF9URU1QMV9XICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9TT0NfQURDX09GRlNFVF9JTlRfU09DX0FEQ19BQlNfT0ZGU0VUX1RFTVAxX00gICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX1NPQ19BRENfT0ZGU0VUX0lOVF9TT0NfQURDX0FCU19PRkZTRVRfVEVNUDFfUyAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1NPQ19BRENfUkVGX1RSSU1fQU5EX09GRlNFVF9FWFQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNTowXSBTT0NfQURDX1JFRl9WT0xUQUdFX1RSSU1fVEVNUDEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9TT0NfQURDX1JFRl9UUklNX0FORF9PRkZTRVRfRVhUX1NPQ19BRENfUkVGX1ZPTFRBR0VfVFJJTV9URU1QMV9XIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9TT0NfQURDX1JFRl9UUklNX0FORF9PRkZTRVRfRVhUX1NPQ19BRENfUkVGX1ZPTFRBR0VfVFJJTV9URU1QMV9NIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9TT0NfQURDX1JFRl9UUklNX0FORF9PRkZTRVRfRVhUX1NPQ19BRENfUkVGX1ZPTFRBR0VfVFJJTV9URU1QMV9TIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQU1QQ09NUF9USDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzIzOjE4XSBIUE1SQU1QM19MVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMV9IUE1SQU1QM19MVEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgxX0hQTVJBTVAzX0xUSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGQzAwMDAKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDFfSFBNUkFNUDNfTFRIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE1OjEwXSBIUE1SQU1QM19IVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMV9IUE1SQU1QM19IVEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgxX0hQTVJBTVAzX0hUSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZDMDAKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDFfSFBNUkFNUDNfSFRIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICBbOTo2XSBJQklBU0NBUF9MUFRPSFBfT0xfQ05UCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDFfSUJJQVNDQVBfTFBUT0hQX09MX0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMV9JQklBU0NBUF9MUFRPSFBfT0xfQ05UX00gICAgICAgICAgICAgICAgICAweDAwMDAwM0MwCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgxX0lCSUFTQ0FQX0xQVE9IUF9PTF9DTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gSFBNUkFNUDFfVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMV9IUE1SQU1QMV9USF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgxX0hQTVJBTVAxX1RIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDFfSFBNUkFNUDFfVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQU1QQ09NUF9USDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI2XSBMUE1VUERBVEVfTFRICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDJfTFBNVVBEQVRFX0xUSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMl9MUE1VUERBVEVfTFRIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweEZDMDAwMDAwCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgyX0xQTVVQREFURV9MVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6IFsyMzoxOF0gTFBNVVBEQVRFX0hUTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgyX0xQTVVQREFURV9IVE1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDJfTFBNVVBEQVRFX0hUTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZDMDAwMAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMl9MUE1VUERBVEVfSFRNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTU6MTBdIEFEQ19DT01QX0FNUFRIX0xQTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgyX0FEQ19DT01QX0FNUFRIX0xQTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDJfQURDX0NPTVBfQU1QVEhfTFBNX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkMwMAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMl9BRENfQ09NUF9BTVBUSF9MUE1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgIFs3OjJdIEFEQ19DT01QX0FNUFRIX0hQTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgyX0FEQ19DT01QX0FNUFRIX0hQTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDJfQURDX0NPTVBfQU1QVEhfSFBNX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGQworI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMl9BRENfQ09NUF9BTVBUSF9IUE1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19BTVBDT01QX0NUUkwxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gQU1QQ09NUF9SRVFfTU9ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfQU1QQ09NUF9SRVFfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9BTVBDT01QX1JFUV9NT0RFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0FNUENPTVBfUkVRX01PREVfTSAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfQU1QQ09NUF9SRVFfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6IFsyMzoyMF0gSUJJQVNfT0ZGU0VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9JQklBU19PRkZTRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0lCSUFTX09GRlNFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAwMDAwCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfSUJJQVNfT0ZGU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6IFsxOToxNl0gSUJJQVNfSU5JVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfSUJJQVNfSU5JVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9JQklBU19JTklUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0lCSUFTX0lOSVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIExQTV9JQklBU19XQUlUX0NOVF9GSU5BTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfTFBNX0lCSUFTX1dBSVRfQ05UX0ZJTkFMX1cgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9MUE1fSUJJQVNfV0FJVF9DTlRfRklOQUxfTSAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0xQTV9JQklBU19XQUlUX0NOVF9GSU5BTF9TICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjRdIENBUF9TVEVQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9DQVBfU1RFUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0NBUF9TVEVQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfQ0FQX1NURVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gSUJJQVNDQVBfSFBUT0xQX09MX0NOVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfSUJJQVNDQVBfSFBUT0xQX09MX0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9JQklBU0NBUF9IUFRPTFBfT0xfQ05UX00gICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0lCSUFTQ0FQX0hQVE9MUF9PTF9DTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19BTkFCWVBBU1NfVkFMVUUyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTM6MF0gWE9TQ19IRl9JQklBU1RIRVJNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU5BQllQQVNTX1ZBTFVFMl9YT1NDX0hGX0lCSUFTVEhFUk1fVyAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBGQ0ZHMV9BTkFCWVBBU1NfVkFMVUUyX1hPU0NfSEZfSUJJQVNUSEVSTV9NICAgICAgICAgICAgICAgICAweDAwMDAzRkZGCisjZGVmaW5lIEZDRkcxX0FOQUJZUEFTU19WQUxVRTJfWE9TQ19IRl9JQklBU1RIRVJNX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19NSVNDX0FEQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTddIFJTU0lUUklNQ09NUExFVEVfTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19SU1NJVFJJTUNPTVBMRVRFX04gICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX1JTU0lUUklNQ09NUExFVEVfTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfUlNTSVRSSU1DT01QTEVURV9OX00gICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19SU1NJVFJJTUNPTVBMRVRFX05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICBbMTY6OV0gUlNTSV9PRkZTRVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfUlNTSV9PRkZTRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19SU1NJX09GRlNFVF9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMUZFMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX1JTU0lfT0ZGU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICBbODo2XSBRVUFOVENUTFRIUkVTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX1FVQU5UQ1RMVEhSRVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfUVVBTlRDVExUSFJFU19NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMUMwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19RVUFOVENUTFRIUkVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gREFDVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19EQUNUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RBQ1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfREFDVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19WT0xUX1RSSU0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI4OjI0XSBWRERSX1RSSU1fSEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9WT0xUX1RSSU1fVkREUl9UUklNX0hIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX1ZPTFRfVFJJTV9WRERSX1RSSU1fSEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfVk9MVF9UUklNX1ZERFJfVFJJTV9ISF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIwOjE2XSBWRERSX1RSSU1fSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1ZPTFRfVFJJTV9WRERSX1RSSU1fSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfVk9MVF9UUklNX1ZERFJfVFJJTV9IX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFGMDAwMAorI2RlZmluZSBGQ0ZHMV9WT0xUX1RSSU1fVkREUl9UUklNX0hfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzEyOjhdIFZERFJfVFJJTV9TTEVFUF9ICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfVk9MVF9UUklNX1ZERFJfVFJJTV9TTEVFUF9IX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9WT0xUX1RSSU1fVkREUl9UUklNX1NMRUVQX0hfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEZDRkcxX1ZPTFRfVFJJTV9WRERSX1RSSU1fU0xFRVBfSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzQ6MF0gVFJJTUJPRF9ICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfVk9MVF9UUklNX1RSSU1CT0RfSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9WT0xUX1RSSU1fVFJJTUJPRF9IX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEZDRkcxX1ZPTFRfVFJJTV9UUklNQk9EX0hfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX09TQ19DT05GCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyOV0gQURDX1NIX1ZCVUZfRU4KKy8vCisvLyBUcmltIHZhbHVlIGZvciBERElfMF9PU0M6QURDRE9VQkxFUk5BTk9BTVBDVEwuQURDX1NIX1ZCVUZfRU4uCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0FEQ19TSF9WQlVGX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfQURDX1NIX1ZCVUZfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9BRENfU0hfVkJVRl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0FEQ19TSF9WQlVGX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gQURDX1NIX01PREVfRU4KKy8vCisvLyBUcmltIHZhbHVlIGZvciBERElfMF9PU0M6QURDRE9VQkxFUk5BTk9BTVBDVEwuQURDX1NIX01PREVfRU4uCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0FEQ19TSF9NT0RFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfQURDX1NIX01PREVfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9BRENfU0hfTU9ERV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0FEQ19TSF9NT0RFX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gQVRFU1RMRl9SQ09TQ0xGX0lCSUFTX1RSSU0KKy8vCisvLyBUcmltIHZhbHVlIGZvciBERElfMF9PU0M6QVRFU1RDVEwuQVRFU1RMRl9SQ09TQ0xGX0lCSUFTX1RSSU0uCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0FURVNUTEZfUkNPU0NMRl9JQklBU19UUklNICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfQVRFU1RMRl9SQ09TQ0xGX0lCSUFTX1RSSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9BVEVTVExGX1JDT1NDTEZfSUJJQVNfVFJJTV9NICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0FURVNUTEZfUkNPU0NMRl9JQklBU19UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNV0gWE9TQ0xGX1JFR1VMQVRPUl9UUklNCisvLworLy8gVHJpbSB2YWx1ZSBmb3IgRERJXzBfT1NDOkxGT1NDQ1RMLlhPU0NMRl9SRUdVTEFUT1JfVFJJTS4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfWE9TQ0xGX1JFR1VMQVRPUl9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9YT1NDTEZfUkVHVUxBVE9SX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX1hPU0NMRl9SRUdVTEFUT1JfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6IFsyNDoyMV0gWE9TQ0xGX0NNSVJSV1JfUkFUSU8KKy8vCisvLyBUcmltIHZhbHVlIGZvciBERElfMF9PU0M6TEZPU0NDVEwuWE9TQ0xGX0NNSVJSV1JfUkFUSU8uCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX1hPU0NMRl9DTUlSUldSX1JBVElPX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfWE9TQ0xGX0NNSVJSV1JfUkFUSU9fTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMUUwMDAwMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9YT1NDTEZfQ01JUlJXUl9SQVRJT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiBbMjA6MTldIFhPU0NfSEZfRkFTVF9TVEFSVAorLy8KKy8vIFRyaW0gdmFsdWUgZm9yIERESV8wX09TQzpDVEwxLlhPU0NfSEZfRkFTVF9TVEFSVC4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfWE9TQ19IRl9GQVNUX1NUQVJUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9YT1NDX0hGX0ZBU1RfU1RBUlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTgwMDAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX1hPU0NfSEZfRkFTVF9TVEFSVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gWE9TQ19PUFRJT04KKy8vCisvLyAwOiBYT1NDX0hGIHVuYXZhaWxhYmxlIChtYXkgbm90IGJlIGJvbmRlZCBvdXQpCisvLyAxOiBYT1NDX0hGIGF2YWlsYWJsZSAoZGVmYXVsdCkKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfWE9TQ19PUFRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9YT1NDX09QVElPTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEZDRkcxX09TQ19DT05GX1hPU0NfT1BUSU9OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfWE9TQ19PUFRJT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBIUE9TQ19PUFRJT04KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19PUFRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX09QVElPTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfT1BUSU9OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19PUFRJT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIEhQT1NDX0JJQVNfSE9MRF9NT0RFX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfQklBU19IT0xEX01PREVfRU4gICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX0hPTERfTU9ERV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfSE9MRF9NT0RFX0VOX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfQklBU19IT0xEX01PREVfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjEyXSBIUE9TQ19DVVJSTUlSUl9SQVRJTworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0NVUlJNSVJSX1JBVElPX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfQ1VSUk1JUlJfUkFUSU9fTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19DVVJSTUlSUl9SQVRJT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjhdIEhQT1NDX0JJQVNfUkVTX1NFVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfUkVTX1NFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfQklBU19SRVNfU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX1JFU19TRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIEhQT1NDX0ZJTFRFUl9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0ZJTFRFUl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfRklMVEVSX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19GSUxURVJfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0ZJTFRFUl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgWzY6NV0gSFBPU0NfQklBU19SRUNIQVJHRV9ERUxBWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfUkVDSEFSR0VfREVMQVlfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfQklBU19SRUNIQVJHRV9ERUxBWV9NICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX1JFQ0hBUkdFX0RFTEFZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgIFsyOjFdIEhQT1NDX1NFUklFU19DQVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19TRVJJRVNfQ0FQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX1NFUklFU19DQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfU0VSSUVTX0NBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBIUE9TQ19ESVYzX0JZUEFTUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0RJVjNfQllQQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfRElWM19CWVBBU1NfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19ESVYzX0JZUEFTU19NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0RJVjNfQllQQVNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0ZSRVFfT0ZGU0VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gSFBPU0NfQ09NUF9QMAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZSRVFfT0ZGU0VUX0hQT1NDX0NPTVBfUDBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIEhQT1NDX0NPTVBfUDEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZSRVFfT0ZGU0VUX0hQT1NDX0NPTVBfUDFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBIUE9TQ19DT01QX1AyCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX0ZSRVFfT0ZGU0VUX0hQT1NDX0NPTVBfUDJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NBUF9UUklNCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gRkxVWF9DQVBfMFAyOF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ0FQX1RSSU1fRkxVWF9DQVBfMFAyOF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGQ0ZHMV9DQVBfVFJJTV9GTFVYX0NBUF8wUDI4X1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEZDRkcxX0NBUF9UUklNX0ZMVVhfQ0FQXzBQMjhfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6MF0gRkxVWF9DQVBfMFA0X1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DQVBfVFJJTV9GTFVYX0NBUF8wUDRfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0NBUF9UUklNX0ZMVVhfQ0FQXzBQNF9UUklNX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRkNGRzFfQ0FQX1RSSU1fRkxVWF9DQVBfMFA0X1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fTUlTQ19PVFBfREFUQV8xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyODoyN10gUEVBS19ERVRfSVRSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfUEVBS19ERVRfSVRSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9QRUFLX0RFVF9JVFJJTV9NICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX1BFQUtfREVUX0lUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBIUF9CVUZfSVRSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfSFBfQlVGX0lUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9IUF9CVUZfSVRSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0hQX0JVRl9JVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjIyXSBMUF9CVUZfSVRSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfTFBfQlVGX0lUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9MUF9CVUZfSVRSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBDMDAwMDAKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0xQX0JVRl9JVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogWzIxOjIwXSBEQkxSX0xPT1BfRklMVEVSX1JFU0VUX1ZPTFRBR0UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfREJMUl9MT09QX0ZJTFRFUl9SRVNFVF9WT0xUQUdFX1cgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9EQkxSX0xPT1BfRklMVEVSX1JFU0VUX1ZPTFRBR0VfTSAgICAgIDB4MDAzMDAwMDAKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0RCTFJfTE9PUF9GSUxURVJfUkVTRVRfVk9MVEFHRV9TICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogWzE5OjEwXSBIUE1fSUJJQVNfV0FJVF9DTlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfSFBNX0lCSUFTX1dBSVRfQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9IUE1fSUJJQVNfV0FJVF9DTlRfTSAgICAgICAgICAgICAgICAgIDB4MDAwRkZDMDAKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0hQTV9JQklBU19XQUlUX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICBbOTo0XSBMUE1fSUJJQVNfV0FJVF9DTlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfTFBNX0lCSUFTX1dBSVRfQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9MUE1fSUJJQVNfV0FJVF9DTlRfTSAgICAgICAgICAgICAgICAgIDB4MDAwMDAzRjAKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0xQTV9JQklBU19XQUlUX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBJREFDX1NURVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfSURBQ19TVEVQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9JREFDX1NURVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0lEQUNfU1RFUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fUFdEX0NVUlJfMjBDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gREVMVEFfQ0FDSEVfUkVGCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBjYWNoZSByZXRlbnRpb24KKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMjBDX0RFTFRBX0NBQ0hFX1JFRl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8yMENfREVMVEFfQ0FDSEVfUkVGX00gICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzIwQ19ERUxUQV9DQUNIRV9SRUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gREVMVEFfUkZNRU1fUkVUCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIDF1QSB1bml0cywgd2l0aCBSRiBtZW1vcnkgcmV0ZW50aW9uCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzIwQ19ERUxUQV9SRk1FTV9SRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMjBDX0RFTFRBX1JGTUVNX1JFVF9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8yMENfREVMVEFfUkZNRU1fUkVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIERFTFRBX1hPU0NfTFBNCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBYT1NDX0hGIG9uIGluIGxvdy1wb3dlcgorLy8gbW9kZQorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8yMENfREVMVEFfWE9TQ19MUE1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzIwQ19ERUxUQV9YT1NDX0xQTV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMjBDX0RFTFRBX1hPU0NfTFBNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBCQVNFTElORQorLy8KKy8vIFdvcnN0LWNhc2UgYmFzZWxpbmUgbWF4aW11bSBwb3dlcmRvd24gY3VycmVudCwgaW4gdW5pdHMgb2YgMC41dUEKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMjBDX0JBU0VMSU5FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8yMENfQkFTRUxJTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzIwQ19CQVNFTElORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1BXRF9DVVJSXzM1QworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIERFTFRBX0NBQ0hFX1JFRgorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiB1bml0cyBvZiAxdUEsIHdpdGggY2FjaGUgcmV0ZW50aW9uCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzM1Q19ERUxUQV9DQUNIRV9SRUZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMzVDX0RFTFRBX0NBQ0hFX1JFRl9NICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8zNUNfREVMVEFfQ0FDSEVfUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIERFTFRBX1JGTUVNX1JFVAorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiAxdUEgdW5pdHMsIHdpdGggUkYgbWVtb3J5IHJldGVudGlvbgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8zNUNfREVMVEFfUkZNRU1fUkVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzM1Q19ERUxUQV9SRk1FTV9SRVRfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMzVDX0RFTFRBX1JGTUVNX1JFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBERUxUQV9YT1NDX0xQTQorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiB1bml0cyBvZiAxdUEsIHdpdGggWE9TQ19IRiBvbiBpbiBsb3ctcG93ZXIKKy8vIG1vZGUKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMzVDX0RFTFRBX1hPU0NfTFBNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8zNUNfREVMVEFfWE9TQ19MUE1fTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzM1Q19ERUxUQV9YT1NDX0xQTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gQkFTRUxJTkUKKy8vCisvLyBXb3JzdC1jYXNlIGJhc2VsaW5lIG1heGltdW0gcG93ZXJkb3duIGN1cnJlbnQsIGluIHVuaXRzIG9mIDAuNXVBCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzM1Q19CQVNFTElORV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMzVDX0JBU0VMSU5FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8zNUNfQkFTRUxJTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19QV0RfQ1VSUl81MEMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBERUxUQV9DQUNIRV9SRUYKKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gdW5pdHMgb2YgMXVBLCB3aXRoIGNhY2hlIHJldGVudGlvbgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl81MENfREVMVEFfQ0FDSEVfUkVGX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzUwQ19ERUxUQV9DQUNIRV9SRUZfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNTBDX0RFTFRBX0NBQ0hFX1JFRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBERUxUQV9SRk1FTV9SRVQKKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gMXVBIHVuaXRzLCB3aXRoIFJGIG1lbW9yeSByZXRlbnRpb24KKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNTBDX0RFTFRBX1JGTUVNX1JFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl81MENfREVMVEFfUkZNRU1fUkVUX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzUwQ19ERUxUQV9SRk1FTV9SRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gREVMVEFfWE9TQ19MUE0KKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gdW5pdHMgb2YgMXVBLCB3aXRoIFhPU0NfSEYgb24gaW4gbG93LXBvd2VyCisvLyBtb2RlCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzUwQ19ERUxUQV9YT1NDX0xQTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNTBDX0RFTFRBX1hPU0NfTFBNX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl81MENfREVMVEFfWE9TQ19MUE1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEJBU0VMSU5FCisvLworLy8gV29yc3QtY2FzZSBiYXNlbGluZSBtYXhpbXVtIHBvd2VyZG93biBjdXJyZW50LCBpbiB1bml0cyBvZiAwLjV1QQorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl81MENfQkFTRUxJTkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzUwQ19CQVNFTElORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNTBDX0JBU0VMSU5FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fUFdEX0NVUlJfNjVDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gREVMVEFfQ0FDSEVfUkVGCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBjYWNoZSByZXRlbnRpb24KKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNjVDX0RFTFRBX0NBQ0hFX1JFRl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl82NUNfREVMVEFfQ0FDSEVfUkVGX00gICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzY1Q19ERUxUQV9DQUNIRV9SRUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gREVMVEFfUkZNRU1fUkVUCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIDF1QSB1bml0cywgd2l0aCBSRiBtZW1vcnkgcmV0ZW50aW9uCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzY1Q19ERUxUQV9SRk1FTV9SRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNjVDX0RFTFRBX1JGTUVNX1JFVF9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl82NUNfREVMVEFfUkZNRU1fUkVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIERFTFRBX1hPU0NfTFBNCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBYT1NDX0hGIG9uIGluIGxvdy1wb3dlcgorLy8gbW9kZQorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl82NUNfREVMVEFfWE9TQ19MUE1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzY1Q19ERUxUQV9YT1NDX0xQTV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNjVDX0RFTFRBX1hPU0NfTFBNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBCQVNFTElORQorLy8KKy8vIFdvcnN0LWNhc2UgYmFzZWxpbmUgbWF4aW11bSBwb3dlcmRvd24gY3VycmVudCwgaW4gdW5pdHMgb2YgMC41dUEKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNjVDX0JBU0VMSU5FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl82NUNfQkFTRUxJTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzY1Q19CQVNFTElORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1BXRF9DVVJSXzgwQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIERFTFRBX0NBQ0hFX1JFRgorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiB1bml0cyBvZiAxdUEsIHdpdGggY2FjaGUgcmV0ZW50aW9uCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzgwQ19ERUxUQV9DQUNIRV9SRUZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfODBDX0RFTFRBX0NBQ0hFX1JFRl9NICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl84MENfREVMVEFfQ0FDSEVfUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIERFTFRBX1JGTUVNX1JFVAorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiAxdUEgdW5pdHMsIHdpdGggUkYgbWVtb3J5IHJldGVudGlvbgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl84MENfREVMVEFfUkZNRU1fUkVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzgwQ19ERUxUQV9SRk1FTV9SRVRfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfODBDX0RFTFRBX1JGTUVNX1JFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBERUxUQV9YT1NDX0xQTQorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiB1bml0cyBvZiAxdUEsIHdpdGggWE9TQ19IRiBvbiBpbiBsb3ctcG93ZXIKKy8vIG1vZGUKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfODBDX0RFTFRBX1hPU0NfTFBNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl84MENfREVMVEFfWE9TQ19MUE1fTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzgwQ19ERUxUQV9YT1NDX0xQTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gQkFTRUxJTkUKKy8vCisvLyBXb3JzdC1jYXNlIGJhc2VsaW5lIG1heGltdW0gcG93ZXJkb3duIGN1cnJlbnQsIGluIHVuaXRzIG9mIDAuNXVBCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzgwQ19CQVNFTElORV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfODBDX0JBU0VMSU5FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl84MENfQkFTRUxJTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19QV0RfQ1VSUl85NUMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBERUxUQV9DQUNIRV9SRUYKKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gdW5pdHMgb2YgMXVBLCB3aXRoIGNhY2hlIHJldGVudGlvbgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl85NUNfREVMVEFfQ0FDSEVfUkVGX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzk1Q19ERUxUQV9DQUNIRV9SRUZfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfOTVDX0RFTFRBX0NBQ0hFX1JFRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBERUxUQV9SRk1FTV9SRVQKKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gMXVBIHVuaXRzLCB3aXRoIFJGIG1lbW9yeSByZXRlbnRpb24KKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfOTVDX0RFTFRBX1JGTUVNX1JFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl85NUNfREVMVEFfUkZNRU1fUkVUX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzk1Q19ERUxUQV9SRk1FTV9SRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gREVMVEFfWE9TQ19MUE0KKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gdW5pdHMgb2YgMXVBLCB3aXRoIFhPU0NfSEYgb24gaW4gbG93LXBvd2VyCisvLyBtb2RlCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzk1Q19ERUxUQV9YT1NDX0xQTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfOTVDX0RFTFRBX1hPU0NfTFBNX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl85NUNfREVMVEFfWE9TQ19MUE1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEJBU0VMSU5FCisvLworLy8gV29yc3QtY2FzZSBiYXNlbGluZSBtYXhpbXVtIHBvd2VyZG93biBjdXJyZW50LCBpbiB1bml0cyBvZiAwLjV1QQorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl85NUNfQkFTRUxJTkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzk1Q19CQVNFTElORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfOTVDX0JBU0VMSU5FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fUFdEX0NVUlJfMTEwQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIERFTFRBX0NBQ0hFX1JFRgorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiB1bml0cyBvZiAxdUEsIHdpdGggY2FjaGUgcmV0ZW50aW9uCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzExMENfREVMVEFfQ0FDSEVfUkVGX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTEwQ19ERUxUQV9DQUNIRV9SRUZfTSAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMTBDX0RFTFRBX0NBQ0hFX1JFRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIERFTFRBX1JGTUVNX1JFVAorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiAxdUEgdW5pdHMsIHdpdGggUkYgbWVtb3J5IHJldGVudGlvbgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMTBDX0RFTFRBX1JGTUVNX1JFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzExMENfREVMVEFfUkZNRU1fUkVUX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTEwQ19ERUxUQV9SRk1FTV9SRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBERUxUQV9YT1NDX0xQTQorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiB1bml0cyBvZiAxdUEsIHdpdGggWE9TQ19IRiBvbiBpbiBsb3ctcG93ZXIKKy8vIG1vZGUKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTEwQ19ERUxUQV9YT1NDX0xQTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMTBDX0RFTFRBX1hPU0NfTFBNX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzExMENfREVMVEFfWE9TQ19MUE1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gQkFTRUxJTkUKKy8vCisvLyBXb3JzdC1jYXNlIGJhc2VsaW5lIG1heGltdW0gcG93ZXJkb3duIGN1cnJlbnQsIGluIHVuaXRzIG9mIDAuNXVBCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzExMENfQkFTRUxJTkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTEwQ19CQVNFTElORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMTBDX0JBU0VMSU5FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19QV0RfQ1VSUl8xMjVDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gREVMVEFfQ0FDSEVfUkVGCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBjYWNoZSByZXRlbnRpb24KKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTI1Q19ERUxUQV9DQUNIRV9SRUZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMjVDX0RFTFRBX0NBQ0hFX1JFRl9NICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzEyNUNfREVMVEFfQ0FDSEVfUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gREVMVEFfUkZNRU1fUkVUCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIDF1QSB1bml0cywgd2l0aCBSRiBtZW1vcnkgcmV0ZW50aW9uCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzEyNUNfREVMVEFfUkZNRU1fUkVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTI1Q19ERUxUQV9SRk1FTV9SRVRfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMjVDX0RFTFRBX1JGTUVNX1JFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIERFTFRBX1hPU0NfTFBNCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBYT1NDX0hGIG9uIGluIGxvdy1wb3dlcgorLy8gbW9kZQorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMjVDX0RFTFRBX1hPU0NfTFBNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzEyNUNfREVMVEFfWE9TQ19MUE1fTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTI1Q19ERUxUQV9YT1NDX0xQTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBCQVNFTElORQorLy8KKy8vIFdvcnN0LWNhc2UgYmFzZWxpbmUgbWF4aW11bSBwb3dlcmRvd24gY3VycmVudCwgaW4gdW5pdHMgb2YgMC41dUEKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTI1Q19CQVNFTElORV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMjVDX0JBU0VMSU5FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzEyNUNfQkFTRUxJTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19GQ0ZHMV9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19mbGFzaC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfZmxhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWQ3OWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfZmxhc2guaApAQCAtMCwwICsxLDM0NzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19mbGFzaF9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19GTEFTSF9IX18KKyNkZWZpbmUgX19IV19GTEFTSF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBGTEFTSCBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGTUMgYW5kIEVmdXNlIFN0YXR1cworI2RlZmluZSBGTEFTSF9PX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19TWVNDT0RFX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZMQVNIX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRldMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GV0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0VGVVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRUZVU0VBRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19EQVRBVVBQRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0RBVEFMT1dFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDBDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRUZVU0VDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMTAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19FRlVTRVNUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAxNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0FDQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDE4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fQk9VTkRBUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMUMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19FRlVTRUZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAyMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0VGVVNFS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDI0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRUZVU0VSRUxFQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMjgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19FRlVTRVBJTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAyQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0VGVVNFQ1JBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDMwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRUZVU0VSRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMzQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19FRlVTRVBST0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAzOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0VGVVNFRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDNDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fU0lOR0xFQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwNDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19UV09CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTA0NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX1NFTEZURVNUQ1lDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDQ4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fU0VMRlRFU1RTSUdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwNEMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GUkRDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTUFJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDA0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkVEQUNDVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GRURBQ1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAxQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZCUFJPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDMwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkJTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMzQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQkJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAzOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZCQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDNDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkJGQUxMQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwNDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQlBSRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjA0NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZQQUMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDQ4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlBBQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwNEMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjA1MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZNU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDU0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkxPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwNjQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GVlJFQURDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjA4MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZWSFZDVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDg0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlZIVkNUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwODgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GVkhWQ1QzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjA4QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZWTlZDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDkwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlZTTFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwOTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GVldMQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjA5OAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZFRlVTRUNUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDlDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkVGVVNFU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwQTAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GRUZVU0VEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjBBNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTRVFQTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMEE4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkJTVFJPQkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIxMDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GUFNUUk9CRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjEwNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZCTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTA4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlRDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIxMEMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjExMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZUQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTFDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRldQV1JJVEUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIxMjAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GV1BXUklURTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjEyNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZXUFdSSVRFMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTI4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRldQV1JJVEUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIxMkMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GV1BXUklURTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjEzMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZXUFdSSVRFNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTM0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRldQV1JJVEU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIxMzgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GV1BXUklURTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjEzQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZXUFdSSVRFX0VDQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTQwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNXU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIxNDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fR0xCQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjIwMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjA0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyMDgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fQ01EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjIwQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9QRV9PU1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjEwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1ZTVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyMTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fUEVfVlNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjIxOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9DTVBfVlNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjFDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX0VYX1ZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyMjAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fUkRfSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjIyNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9QX09IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjI4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX0VSQV9PSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyMkMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fU0FWX1BQVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjIzMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9QRV9WSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjM0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1BSR19QVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyNDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fRVJBX1BXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI0NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9TQVZfRVJBX1BVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjU0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyNTgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI1QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9QR00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjYwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX0VSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyNjQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fUFJHX1BVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI2OAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9FUkFfUFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjZDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1NURVBfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyNzAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fUFVMX0NOVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI3NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9FQ19TVEVQX0hFSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjc4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1NUX01BQ0hJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyN0MKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fRkxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI4MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9XUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjg4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX0FDQ19QUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyOEMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fQUNDX0VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI5MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMkEwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1NFQ1RPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyQTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GTUNfUkVWX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjJBOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9FUlJfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMkFDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1BHTV9NQVhQVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyQjAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fRVhFQ1VURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjJCNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9TRUNUT1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMkMwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1NFQ1RPUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyQzQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fQlNMRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjJFMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9CU0xFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMkU0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX0JTTFAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyRjAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fQlNMUDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjJGNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZDRkdfQkFOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDAwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkNGR19XUkFQUEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI0MDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQ0ZHX0JOS19UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjQwOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZDRkdfQjBfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDEwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkNGR19CMV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI0MTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQ0ZHX0IyX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjQxOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZDRkdfQjNfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDFDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkNGR19CNF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI0MjAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQ0ZHX0I1X1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjQyNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZDRkdfQjZfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDI4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkNGR19CN19TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI0MkMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQ0ZHX0IwX1NTSVpFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjQzMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTVdIEVGVVNFX0JMQU5LCisvLworLy8gRWZ1c2Ugc2Nhbm5pbmcgZGV0ZWN0ZWQgaWYgZnVzZSBST00gaXMgYmxhbms6CisvLyAwIDogTm90IGJsYW5rCisvLyAxIDogQmxhbmsKKyNkZWZpbmUgRkxBU0hfU1RBVF9FRlVTRV9CTEFOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBGTEFTSF9TVEFUX0VGVVNFX0JMQU5LX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEZMQVNIX1NUQVRfRUZVU0VfQkxBTktfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRkxBU0hfU1RBVF9FRlVTRV9CTEFOS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBFRlVTRV9USU1FT1VUCisvLworLy8gRWZ1c2Ugc2Nhbm5pbmcgcmVzdWx0ZWQgaW4gdGltZW91dCBlcnJvci4KKy8vIDAgOiBObyBUaW1lb3V0IGVycm9yCisvLyAxIDogVGltZW91dCBFcnJvcgorI2RlZmluZSBGTEFTSF9TVEFUX0VGVVNFX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEZMQVNIX1NUQVRfRUZVU0VfVElNRU9VVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgRkxBU0hfU1RBVF9FRlVTRV9USU1FT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBGTEFTSF9TVEFUX0VGVVNFX1RJTUVPVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIEVGVVNFX0NSQ19FUlJPUgorLy8KKy8vIEVmdXNlIHNjYW5uaW5nIHJlc3VsdGVkIGluIHNjYW4gY2hhaW4gQ1JDIGVycm9yLgorLy8gMCA6IE5vIENSQyBlcnJvcgorLy8gMSA6IENSQyBFcnJvcgorI2RlZmluZSBGTEFTSF9TVEFUX0VGVVNFX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEZMQVNIX1NUQVRfRUZVU0VfQ1JDX0VSUk9SX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgRkxBU0hfU1RBVF9FRlVTRV9DUkNfRVJST1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBGTEFTSF9TVEFUX0VGVVNFX0NSQ19FUlJPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgWzEyOjhdIEVGVVNFX0VSUkNPREUKKy8vCisvLyBTYW1lIGFzIEVGVVNFRVJST1IuQ09ERQorI2RlZmluZSBGTEFTSF9TVEFUX0VGVVNFX0VSUkNPREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZMQVNIX1NUQVRfRUZVU0VfRVJSQ09ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgRkxBU0hfU1RBVF9FRlVTRV9FUlJDT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFsyXSBTQU1IT0xEX0RJUworLy8KKy8vIFN0YXR1cyBpbmRpY2F0b3Igb2YgZmxhc2ggc2FtcGxlIGFuZCBob2xkIHNlcXVlbmNpbmcgbG9naWMuIFRoaXMgYml0IHdpbGwgZ28KKy8vIHRvIDEgc29tZSBkZWxheSBhZnRlciBDRkcuRElTX0lETEUgaXMgc2V0IHRvIDEuCisvLyAwOiBOb3QgZGlzYWJsZWQKKy8vIDE6IFNhbXBsZSBhbmQgaG9sZCBkaXNhYmxlZCBhbmQgc3RhYmxlCisjZGVmaW5lIEZMQVNIX1NUQVRfU0FNSE9MRF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRkxBU0hfU1RBVF9TQU1IT0xEX0RJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9TVEFUX1NBTUhPTERfRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZMQVNIX1NUQVRfU0FNSE9MRF9ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQlVTWQorLy8KKy8vIEZhc3QgdmVyc2lvbiBvZiB0aGUgRk1DIEZNU1RBVC5CVVNZIGJpdC4KKy8vIFRoaXMgZmxhZyBpcyB2YWxpZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgb3BlcmF0aW9uIHNldHRpbmcgaXQgKEZNU1RBVC5CVVNZCisvLyBpcyBkZWxheWVkIHNvbWUgY3ljbGVzKQorLy8gMCA6IE5vdCBidXN5CisvLyAxIDogQnVzeQorI2RlZmluZSBGTEFTSF9TVEFUX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX1NUQVRfQlVTWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRkxBU0hfU1RBVF9CVVNZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGTEFTSF9TVEFUX0JVU1lfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFBPV0VSX01PREUKKy8vCisvLyBQb3dlciBzdGF0ZSBvZiB0aGUgZmxhc2ggc3ViLXN5c3RlbS4KKy8vIDAgOiBBY3RpdmUKKy8vIDEgOiBMb3cgcG93ZXIKKyNkZWZpbmUgRkxBU0hfU1RBVF9QT1dFUl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9TVEFUX1BPV0VSX01PREVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX1NUQVRfUE9XRVJfTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfU1RBVF9QT1dFUl9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOF0gU1RBTkRCWV9NT0RFX1NFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0NGR19TVEFOREJZX01PREVfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfQ0ZHX1NUQU5EQllfTU9ERV9TRUxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9DRkdfU1RBTkRCWV9NT0RFX1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0NGR19TVEFOREJZX01PREVfU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6Nl0gU1RBTkRCWV9QV19TRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9DRkdfU1RBTkRCWV9QV19TRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0NGR19TVEFOREJZX1BXX1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAKKyNkZWZpbmUgRkxBU0hfQ0ZHX1NUQU5EQllfUFdfU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBESVNfRUZVU0VDTEsKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9DRkdfRElTX0VGVVNFQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEZMQVNIX0NGR19ESVNfRUZVU0VDTEtfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfQ0ZHX0RJU19FRlVTRUNMS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBGTEFTSF9DRkdfRElTX0VGVVNFQ0xLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIERJU19SRUFEQUNDRVNTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQ0ZHX0RJU19SRUFEQUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBGTEFTSF9DRkdfRElTX1JFQURBQ0NFU1NfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0NGR19ESVNfUkVBREFDQ0VTU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRkxBU0hfQ0ZHX0RJU19SRUFEQUNDRVNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBFTkFCTEVfU1dJTlRGCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQ0ZHX0VOQUJMRV9TV0lOVEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBGTEFTSF9DRkdfRU5BQkxFX1NXSU5URl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0NGR19FTkFCTEVfU1dJTlRGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRkxBU0hfQ0ZHX0VOQUJMRV9TV0lOVEZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsxXSBESVNfU1RBTkRCWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0NGR19ESVNfU1RBTkRCWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfQ0ZHX0RJU19TVEFOREJZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBGTEFTSF9DRkdfRElTX1NUQU5EQllfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX0NGR19ESVNfU1RBTkRCWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRElTX0lETEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9DRkdfRElTX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0NGR19ESVNfSURMRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfQ0ZHX0RJU19JRExFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9DRkdfRElTX0lETEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19TWVNDT0RFX1NUQVJUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzQ6MF0gU1lTQ09ERV9TVEFSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX1NZU0NPREVfU1RBUlRfU1lTQ09ERV9TVEFSVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfU1lTQ09ERV9TVEFSVF9TWVNDT0RFX1NUQVJUX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBGTEFTSF9TWVNDT0RFX1NUQVJUX1NZU0NPREVfU1RBUlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GTEFTSF9TSVpFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gU0VDVE9SUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZMQVNIX1NJWkVfU0VDVE9SU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRkxBU0hfU0laRV9TRUNUT1JTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGTEFTSF9GTEFTSF9TSVpFX1NFQ1RPUlNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GV0xPQ0sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMjowXSBGV0xPQ0sKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GV0xPQ0tfRldMT0NLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZXTE9DS19GV0xPQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRkxBU0hfRldMT0NLX0ZXTE9DS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRldGTEFHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzI6MF0gRldGTEFHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRldGTEFHX0ZXRkxBR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GV0ZMQUdfRldGTEFHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEZMQVNIX0ZXRkxBR19GV0ZMQUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0VGVVNFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyODoyNF0gSU5TVFJVQ1RJT04KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRV9JTlNUUlVDVElPTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZMQVNIX0VGVVNFX0lOU1RSVUNUSU9OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VfSU5TVFJVQ1RJT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogIFsxNTowXSBEVU1QV09SRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFX0RVTVBXT1JEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkxBU0hfRUZVU0VfRFVNUFdPUkRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBGTEFTSF9FRlVTRV9EVU1QV09SRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19FRlVTRUFERFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE1OjExXSBCTE9DSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFQUREUl9CTE9DS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfRUZVU0VBRERSX0JMT0NLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjgwMAorI2RlZmluZSBGTEFTSF9FRlVTRUFERFJfQkxPQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgWzEwOjBdIFJPVworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFQUREUl9ST1dfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgRkxBU0hfRUZVU0VBRERSX1JPV19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDdGRgorI2RlZmluZSBGTEFTSF9FRlVTRUFERFJfUk9XX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19EQVRBVVBQRVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzozXSBTUEFSRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0RBVEFVUFBFUl9TUEFSRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfREFUQVVQUEVSX1NQQVJFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGOAorI2RlZmluZSBGTEFTSF9EQVRBVVBQRVJfU1BBUkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9EQVRBVVBQRVJfUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZMQVNIX0RBVEFVUFBFUl9QX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfREFUQVVQUEVSX1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBGTEFTSF9EQVRBVVBQRVJfUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9EQVRBVVBQRVJfUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX0RBVEFVUFBFUl9SX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRkxBU0hfREFUQVVQUEVSX1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGTEFTSF9EQVRBVVBQRVJfUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEVFTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0RBVEFVUFBFUl9FRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfREFUQVVQUEVSX0VFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGTEFTSF9EQVRBVVBQRVJfRUVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0RBVEFVUFBFUl9FRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0RBVEFMT1dFUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIERBVEEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9EQVRBTE9XRVJfREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0RBVEFMT1dFUl9EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfREFUQUxPV0VSX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRUZVU0VDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs4XSBJRExFR0FUSU5HCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VDRkdfSURMRUdBVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9FRlVTRUNGR19JRExFR0FUSU5HX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0VGVVNFQ0ZHX0lETEVHQVRJTkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VDRkdfSURMRUdBVElOR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNDozXSBTTEFWRVBPV0VSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VDRkdfU0xBVkVQT1dFUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9FRlVTRUNGR19TTEFWRVBPV0VSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEZMQVNIX0VGVVNFQ0ZHX1NMQVZFUE9XRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMF0gR0FUSU5HCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VDRkdfR0FUSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9FRlVTRUNGR19HQVRJTkdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0VGVVNFQ0ZHX0dBVElOR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRUZVU0VDRkdfR0FUSU5HX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRUZVU0VTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gUkVTRVRET05FCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VTVEFUX1JFU0VURE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9FRlVTRVNUQVRfUkVTRVRET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0VGVVNFU1RBVF9SRVNFVERPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRUZVU0VTVEFUX1JFU0VURE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fQUNDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMjM6MF0gQUNDVU1VTEFUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9BQ0NfQUNDVU1VTEFUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZMQVNIX0FDQ19BQ0NVTVVMQVRPUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgRkxBU0hfQUNDX0FDQ1VNVUxBVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fQk9VTkRBUlkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzIzXSBESVNST1cwCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRElTUk9XMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9ESVNST1cwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0RJU1JPVzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRElTUk9XMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBTUEFSRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NQQVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1BBUkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TUEFSRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NQQVJFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gRUZDX1NFTEZfVEVTVF9FUlJPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19TRUxGX1RFU1RfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX1NFTEZfVEVTVF9FUlJPUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfU0VMRl9URVNUX0VSUk9SX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19TRUxGX1RFU1RfRVJST1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gRUZDX0lOU1RSVUNUSU9OX0lORk8KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfSU5TVFJVQ1RJT05fSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19JTlNUUlVDVElPTl9JTkZPX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX0lOU1RSVUNUSU9OX0lORk9fTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfSU5TVFJVQ1RJT05fSU5GT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIEVGQ19JTlNUUlVDVElPTl9FUlJPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19JTlNUUlVDVElPTl9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX0lOU1RSVUNUSU9OX0VSUk9SX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfSU5TVFJVQ1RJT05fRVJST1JfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19JTlNUUlVDVElPTl9FUlJPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gRUZDX0FVVE9MT0FEX0VSUk9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX0FVVE9MT0FEX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfQVVUT0xPQURfRVJST1JfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19BVVRPTE9BRF9FUlJPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX0FVVE9MT0FEX0VSUk9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE0XSBPVVRQVVRFTkFCTEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9PVVRQVVRFTkFCTEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX09VVFBVVEVOQUJMRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0MwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfT1VUUFVURU5BQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBTWVNfRUNDX1NFTEZfVEVTVF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19FQ0NfU0VMRl9URVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX0VDQ19TRUxGX1RFU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TWVNfRUNDX1NFTEZfVEVTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19FQ0NfU0VMRl9URVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gU1lTX0VDQ19PVkVSUklERV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19FQ0NfT1ZFUlJJREVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX0VDQ19PVkVSUklERV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TWVNfRUNDX09WRVJSSURFX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19FQ0NfT1ZFUlJJREVfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gRUZDX0ZESQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19GREkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX0ZESV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfRkRJX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19GRElfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gU1lTX0RJRUlEX0FVVE9MT0FEX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX0RJRUlEX0FVVE9MT0FEX0VOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TWVNfRElFSURfQVVUT0xPQURfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19ESUVJRF9BVVRPTE9BRF9FTl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX0RJRUlEX0FVVE9MT0FEX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICBbOTo4XSBTWVNfUkVQQUlSX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX1JFUEFJUl9FTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TWVNfUkVQQUlSX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19SRVBBSVJfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6NF0gU1lTX1dTX1JFQURfU1RBVEVTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX1dTX1JFQURfU1RBVEVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TWVNfV1NfUkVBRF9TVEFURVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19XU19SRUFEX1NUQVRFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gSU5QVVRFTkFCTEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9JTlBVVEVOQUJMRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0lOUFVURU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfSU5QVVRFTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRUZVU0VGTEFHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gS0VZCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VGTEFHX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9FRlVTRUZMQUdfS0VZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0VGVVNFRkxBR19LRVlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRUZVU0VGTEFHX0tFWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRUZVU0VLRVkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VLRVlfQ09ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9FRlVTRUtFWV9DT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0VGVVNFS0VZX0NPREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0VGVVNFUkVMRUFTRQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjVdIE9EUFlFQVIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfT0RQWUVBUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9PRFBZRUFSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkUwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX09EUFlFQVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogWzI0OjIxXSBPRFBNT05USAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9PRFBNT05USF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX09EUE1PTlRIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUUwMDAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfT0RQTU9OVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiBbMjA6MTZdIE9EUERBWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9PRFBEQVlfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX09EUERBWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFGMDAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfT0RQREFZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjldIEVGVVNFWUVBUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9FRlVTRVlFQVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX0VGVVNFWUVBUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkUwMAorI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfRUZVU0VZRUFSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgIFs4OjVdIEVGVVNFTU9OVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfRUZVU0VNT05USF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9FRlVTRU1PTlRIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxRTAKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX0VGVVNFTU9OVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICBbNDowXSBFRlVTRURBWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9FRlVTRURBWV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX0VGVVNFREFZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfRUZVU0VEQVlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19FRlVTRVBJTlMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE1XSBFRkNfU0VMRl9URVNUX0RPTkUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX1NFTEZfVEVTVF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfU0VMRl9URVNUX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19TRUxGX1RFU1RfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX1NFTEZfVEVTVF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIEVGQ19TRUxGX1RFU1RfRVJST1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX1NFTEZfVEVTVF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfU0VMRl9URVNUX0VSUk9SX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19TRUxGX1RFU1RfRVJST1JfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX1NFTEZfVEVTVF9FUlJPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIFNZU19FQ0NfU0VMRl9URVNUX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX1NZU19FQ0NfU0VMRl9URVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX0VDQ19TRUxGX1RFU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfRUNDX1NFTEZfVEVTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX1NZU19FQ0NfU0VMRl9URVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBFRkNfSU5TVFJVQ1RJT05fSU5GTworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfSU5TVFJVQ1RJT05fSU5GTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19JTlNUUlVDVElPTl9JTkZPX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX0lOU1RSVUNUSU9OX0lORk9fTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfSU5TVFJVQ1RJT05fSU5GT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gRUZDX0lOU1RSVUNUSU9OX0VSUk9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19JTlNUUlVDVElPTl9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX0lOU1RSVUNUSU9OX0VSUk9SX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfSU5TVFJVQ1RJT05fRVJST1JfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19JTlNUUlVDVElPTl9FUlJPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBFRkNfQVVUT0xPQURfRVJST1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX0FVVE9MT0FEX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfQVVUT0xPQURfRVJST1JfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19BVVRPTE9BRF9FUlJPUl9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX0FVVE9MT0FEX0VSUk9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFNZU19FQ0NfT1ZFUlJJREVfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX0VDQ19PVkVSUklERV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfRUNDX09WRVJSSURFX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX1NZU19FQ0NfT1ZFUlJJREVfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX0VDQ19PVkVSUklERV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIEVGQ19SRUFEWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19SRUFEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX1JFQURZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfUkVBRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gRUZDX0ZDTFJaCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19GQ0xSWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX0ZDTFJaX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfRkNMUlpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19GQ0xSWl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBTWVNfRElFSURfQVVUT0xPQURfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX0RJRUlEX0FVVE9MT0FEX0VOICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfRElFSURfQVVUT0xPQURfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX1NZU19ESUVJRF9BVVRPTE9BRF9FTl9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX0RJRUlEX0FVVE9MT0FEX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjRdIFNZU19SRVBBSVJfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX1JFUEFJUl9FTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfUkVQQUlSX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX1NZU19SRVBBSVJfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBTWVNfV1NfUkVBRF9TVEFURVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX1dTX1JFQURfU1RBVEVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfV1NfUkVBRF9TVEFURVNfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX1NZU19XU19SRUFEX1NUQVRFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRUZVU0VDUkEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNTowXSBEQVRBCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VDUkFfREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGTEFTSF9FRlVTRUNSQV9EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZMQVNIX0VGVVNFQ1JBX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0VGVVNFUkVBRAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs5OjhdIERBVEFCSVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVJFQURfREFUQUJJVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9EQVRBQklUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUFEX0RBVEFCSVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzo0XSBSRUFEQ0xPQ0sKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVJFQURfUkVBRENMT0NLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9SRUFEQ0xPQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUFEX1JFQURDTE9DS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBERUJVRworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUFEX0RFQlVHX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9FRlVTRVJFQURfREVCVUdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9ERUJVR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gU1BBUkUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVJFQURfU1BBUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9TUEFSRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUFEX1NQQVJFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBGTEFTSF9FRlVTRVJFQURfU1BBUkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgIFsxOjBdIE1BUkdJTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9NQVJHSU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUFEX01BUkdJTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBGTEFTSF9FRlVTRVJFQURfTUFSR0lOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19FRlVTRVBST0dSQU0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBDT01QQVJFRElTQUJMRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUFJPR1JBTV9DT01QQVJFRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX0NPTVBBUkVESVNBQkxFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBGTEFTSF9FRlVTRVBST0dSQU1fQ09NUEFSRURJU0FCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUFJPR1JBTV9DT01QQVJFRElTQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6IFsyOToxNF0gQ0xPQ0tTVEFMTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUFJPR1JBTV9DTE9DS1NUQUxMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX0NMT0NLU1RBTExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzRkZGQzAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBST0dSQU1fQ0xPQ0tTVEFMTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIFZQUFRPVkRECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX1ZQUFRPVkREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBST0dSQU1fVlBQVE9WRERfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEZMQVNIX0VGVVNFUFJPR1JBTV9WUFBUT1ZERF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX1ZQUFRPVkREX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogIFsxMjo5XSBJVEVSQVRJT05TCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX0lURVJBVElPTlNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9FRlVTRVBST0dSQU1fSVRFUkFUSU9OU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRTAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUFJPR1JBTV9JVEVSQVRJT05TX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgWzg6MF0gV1JJVEVDTE9DSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUFJPR1JBTV9XUklURUNMT0NLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX1dSSVRFQ0xPQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFGRgorI2RlZmluZSBGTEFTSF9FRlVTRVBST0dSQU1fV1JJVEVDTE9DS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19FRlVTRUVSUk9SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNV0gRE9ORQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFRVJST1JfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRkxBU0hfRUZVU0VFUlJPUl9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9FRlVTRUVSUk9SX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEZMQVNIX0VGVVNFRVJST1JfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzQ6MF0gQ09ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFRVJST1JfQ09ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfRUZVU0VFUlJPUl9DT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBGTEFTSF9FRlVTRUVSUk9SX0NPREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19TSU5HTEVCSVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMToxXSBGUk9NTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX1NJTkdMRUJJVF9GUk9NTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgRkxBU0hfU0lOR0xFQklUX0ZST01OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSBGTEFTSF9TSU5HTEVCSVRfRlJPTU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEZST00wCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfU0lOR0xFQklUX0ZST00wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9TSU5HTEVCSVRfRlJPTTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX1NJTkdMRUJJVF9GUk9NMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfU0lOR0xFQklUX0ZST00wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fVFdPQklUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MV0gRlJPTU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9UV09CSVRfRlJPTU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEZMQVNIX1RXT0JJVF9GUk9NTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgRkxBU0hfVFdPQklUX0ZST01OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBGUk9NMAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX1RXT0JJVF9GUk9NMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfVFdPQklUX0ZST00wX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGTEFTSF9UV09CSVRfRlJPTTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX1RXT0JJVF9GUk9NMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX1NFTEZURVNUQ1lDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ1lDTEVTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfU0VMRlRFU1RDWUNfQ1lDTEVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9TRUxGVEVTVENZQ19DWUNMRVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX1NFTEZURVNUQ1lDX0NZQ0xFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX1NFTEZURVNUU0lHTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNJR05BVFVSRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX1NFTEZURVNUU0lHTl9TSUdOQVRVUkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfU0VMRlRFU1RTSUdOX1NJR05BVFVSRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9TRUxGVEVTVFNJR05fU0lHTkFUVVJFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GUkRDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxMTo4XSBSV0FJVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZSRENUTF9SV0FJVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlJEQ1RMX1JXQUlUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBGTEFTSF9GUkRDVExfUldBSVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU1BSRAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjhdIFJNQlNFTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTUFJEX1JNQlNFTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlNQUkRfUk1CU0VNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGTEFTSF9GU1BSRF9STUJTRU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzFdIFJNMQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTUFJEX1JNMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfRlNQUkRfUk0xX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBGTEFTSF9GU1BSRF9STTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX0ZTUFJEX1JNMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUk0wCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNQUkRfUk0wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GU1BSRF9STTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0ZTUFJEX1JNMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRlNQUkRfUk0wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkVEQUNDVEwxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gU1VTUF9JR05SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkVEQUNDVEwxX1NVU1BfSUdOUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBGTEFTSF9GRURBQ0NUTDFfU1VTUF9JR05SX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZMQVNIX0ZFREFDQ1RMMV9TVVNQX0lHTlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkVEQUNDVEwxX1NVU1BfSUdOUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkVEQUNTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNV0gUlZGX0lOVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZFREFDU1RBVF9SVkZfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkVEQUNTVEFUX1JWRl9JTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBGTEFTSF9GRURBQ1NUQVRfUlZGX0lOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZFREFDU1RBVF9SVkZfSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gRlNNX0RPTkUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GRURBQ1NUQVRfRlNNX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZFREFDU1RBVF9GU01fRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRkxBU0hfRkVEQUNTVEFUX0ZTTV9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBGTEFTSF9GRURBQ1NUQVRfRlNNX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQlBST1QKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBQUk9UTDFESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQlBST1RfUFJPVEwxRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZCUFJPVF9QUk9UTDFESVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfRkJQUk9UX1BST1RMMURJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GQlBST1RfUFJPVEwxRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQlNFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gQlNFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJTRV9CU0VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GQlNFX0JTRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEZMQVNIX0ZCU0VfQlNFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZCQlVTWQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIEJVU1kKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQkJVU1lfQlVTWV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZCQlVTWV9CVVNZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkxBU0hfRkJCVVNZX0JVU1lfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkJBQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTZdIE9UUFBST1RESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQkFDX09UUFBST1RESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZMQVNIX0ZCQUNfT1RQUFJPVERJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkxBU0hfRkJBQ19PVFBQUk9URElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBGTEFTSF9GQkFDX09UUFBST1RESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIEJBR1AKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQkFDX0JBR1BfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZCQUNfQkFHUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkxBU0hfRkJBQ19CQUdQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBWUkVBRFMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQkFDX1ZSRUFEU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZCQUNfVlJFQURTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkxBU0hfRkJBQ19WUkVBRFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkJGQUxMQkFDSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjc6MjRdIEZTTV9QV1JTQVYKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0ZTTV9QV1JTQVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfRlNNX1BXUlNBVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19GU01fUFdSU0FWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzE5OjE2XSBSRUdfUFdSU0FWCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19SRUdfUFdSU0FWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX1JFR19QV1JTQVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfUkVHX1BXUlNBVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6IFsxNToxNF0gQkFOS1BXUjcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1I3X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEMwMDAKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogWzEzOjEyXSBCQU5LUFdSNgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1I2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIEJBTktQV1I1CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1I1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgWzk6OF0gQkFOS1BXUjQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1I0X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzo2XSBCQU5LUFdSMworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1IzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjRdIEJBTktQV1IyCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1IyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6Ml0gQkFOS1BXUjEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1IxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICBbMTowXSBCQU5LUFdSMAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1IwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQlBSRFkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE2XSBCQU5LQlVTWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCUFJEWV9CQU5LQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRkxBU0hfRkJQUkRZX0JBTktCVVNZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GQlBSRFlfQkFOS0JVU1lfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZMQVNIX0ZCUFJEWV9CQU5LQlVTWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gUFVNUFJEWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCUFJEWV9QVU1QUkRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRkxBU0hfRkJQUkRZX1BVTVBSRFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBGTEFTSF9GQlBSRFlfUFVNUFJEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEZMQVNIX0ZCUFJEWV9QVU1QUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgICBbMF0gQkFOS1JEWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCUFJEWV9CQU5LUkRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRkJQUkRZX0JBTktSRFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGTEFTSF9GQlBSRFlfQkFOS1JEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZCUFJEWV9CQU5LUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZQQUMxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoxNl0gUFNMRUVQVERJUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZQQUMxX1BTTEVFUFRESVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfRlBBQzFfUFNMRUVQVERJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGMDAwMAorI2RlZmluZSBGTEFTSF9GUEFDMV9QU0xFRVBURElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjRdIFBVTVBSRVNFVF9QVworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZQQUMxX1BVTVBSRVNFVF9QV19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfRlBBQzFfUFVNUFJFU0VUX1BXX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGMAorI2RlZmluZSBGTEFTSF9GUEFDMV9QVU1QUkVTRVRfUFdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFsxOjBdIFBVTVBQV1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GUEFDMV9QVU1QUFdSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZQQUMxX1BVTVBQV1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgRkxBU0hfRlBBQzFfUFVNUFBXUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlBBQzIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBQQUdQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlBBQzJfUEFHUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GUEFDMl9QQUdQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEZMQVNIX0ZQQUMyX1BBR1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZNQUMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMjowXSBCQU5LCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1BQ19CQU5LX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GTUFDX0JBTktfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEZMQVNIX0ZNQUNfQkFOS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZNU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTddIFJWU1VTUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9SVlNVU1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1JWU1VTUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBGTEFTSF9GTVNUQVRfUlZTVVNQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9SVlNVU1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gUkRWRVIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfUkRWRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9SRFZFUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1JEVkVSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfUkRWRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIFJWRgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9SVkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1JWRl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBGTEFTSF9GTVNUQVRfUlZGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9SVkZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gSUxBCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0lMQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfSUxBX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9JTEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0lMQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBEQkYKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfREJGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9EQkZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0RCRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfREJGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIFBHVgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9QR1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1BHVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGTEFTSF9GTVNUQVRfUEdWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9QR1ZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gUENWCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1BDViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfUENWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9QQ1ZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1BDVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBFVgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gQ1YKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfQ1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9DVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0NWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfQ1ZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIEJVU1kKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9CVVNZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0JVU1lfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfQlVTWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIEVSUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0VSU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBGTEFTSF9GTVNUQVRfRVJTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9FUlNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gUEdNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1BHTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBGTEFTSF9GTVNUQVRfUEdNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9QR01fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1BHTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBJTlZEQVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfSU5WREFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9JTlZEQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0lOVkRBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfSU5WREFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIENTVEFUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0NTVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfQ1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9DU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0NTVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBWT0xTVEFUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1ZPTFNUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBGTEFTSF9GTVNUQVRfVk9MU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9WT0xTVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1ZPTFNUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBFU1VTUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9FU1VTUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0VTVVNQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GTVNUQVRfRVNVU1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9FU1VTUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gUFNVU1AKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfUFNVU1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9QU1VTUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1BTVVNQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGTEFTSF9GTVNUQVRfUFNVU1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFNMT0NLCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1NMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GTVNUQVRfU0xPQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9TTE9DS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1NMT0NLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkxPQ0sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBFTkNPTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZMT0NLX0VOQ09NX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkxBU0hfRkxPQ0tfRU5DT01fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBGTEFTSF9GTE9DS19FTkNPTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GVlJFQURDVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFszOjBdIFZSRUFEQ1QKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GVlJFQURDVF9WUkVBRENUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZWUkVBRENUX1ZSRUFEQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfRlZSRUFEQ1RfVlJFQURDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlZIVkNUMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjM6MjBdIFRSSU0xM19FCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlZIVkNUMV9UUklNMTNfRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GVkhWQ1QxX1RSSU0xM19FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAwMDAwCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDFfVFJJTTEzX0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6IFsxOToxNl0gVkhWQ1RfRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDFfVkhWQ1RfRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlZIVkNUMV9WSFZDVF9FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGTEFTSF9GVkhWQ1QxX1ZIVkNUX0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgIFs3OjRdIFRSSU0xM19QVgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDFfVFJJTTEzX1BWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlZIVkNUMV9UUklNMTNfUFZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBGTEFTSF9GVkhWQ1QxX1RSSU0xM19QVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIFZIVkNUX1BWCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlZIVkNUMV9WSFZDVF9QVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GVkhWQ1QxX1ZIVkNUX1BWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDFfVkhWQ1RfUFZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZWSFZDVDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzIzOjIwXSBUUklNMTNfUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDJfVFJJTTEzX1BfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlZIVkNUMl9UUklNMTNfUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBGTEFTSF9GVkhWQ1QyX1RSSU0xM19QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTZdIFZIVkNUX1AKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GVkhWQ1QyX1ZIVkNUX1BfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZWSFZDVDJfVkhWQ1RfUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRkxBU0hfRlZIVkNUMl9WSFZDVF9QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlZIVkNUMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTk6MTZdIFdDVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDNfV0NUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlZIVkNUM19XQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGTEFTSF9GVkhWQ1QzX1dDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgIFszOjBdIFZIVkNUX1JFQUQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GVkhWQ1QzX1ZIVkNUX1JFQURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZWSFZDVDNfVkhWQ1RfUkVBRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfRlZIVkNUM19WSFZDVF9SRUFEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlZOVkNUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTI6OF0gVkNHMlA1Q1QKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GVk5WQ1RfVkNHMlA1Q1RfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZMQVNIX0ZWTlZDVF9WQ0cyUDVDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgRkxBU0hfRlZOVkNUX1ZDRzJQNUNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNDowXSBWSU5fQ1QKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GVk5WQ1RfVklOX0NUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZMQVNIX0ZWTlZDVF9WSU5fQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgRkxBU0hfRlZOVkNUX1ZJTl9DVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlZTTFAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE1OjEyXSBWU0xfUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZWU0xQX1ZTTF9QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlZTTFBfVlNMX1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBGTEFTSF9GVlNMUF9WU0xfUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GVldMQ1QKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNDowXSBWV0xDVF9QCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlZXTENUX1ZXTENUX1BfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9GVldMQ1RfVldMQ1RfUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEZMQVNIX0ZWV0xDVF9WV0xDVF9QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZFRlVTRUNUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjY6MjRdIENIQUlOX1NFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9DSEFJTl9TRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX0NIQUlOX1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfQ0hBSU5fU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMTddIFdSSVRFX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX1dSSVRFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfV1JJVEVfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9XUklURV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX1dSSVRFX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBCUF9TRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfQlBfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9CUF9TRUxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX0JQX1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfQlBfU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzhdIEVGX0NMUloKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfRUZfQ0xSWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9FRl9DTFJaX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX0VGX0NMUlpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfRUZfQ0xSWl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzRdIEVGX1RFU1QKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfRUZfVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9FRl9URVNUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX0VGX1RFU1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfRUZfVEVTVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIEVGVVNFX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX0VGVVNFX0VOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfRUZVU0VfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9FRlVTRV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZFRlVTRVNUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTSElGVF9ET05FCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkVGVVNFU1RBVF9TSElGVF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GRUZVU0VTVEFUX1NISUZUX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0ZFRlVTRVNUQVRfU0hJRlRfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRkVGVVNFU1RBVF9TSElGVF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkVGVVNFREFUQQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZFRlVTRURBVEEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GRUZVU0VEQVRBX0ZFRlVTRURBVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZFRlVTRURBVEFfRkVGVVNFREFUQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRkVGVVNFREFUQV9GRUZVU0VEQVRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNFUVBNUAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjc6MjRdIFRSSU1fM1A0CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNFUVBNUF9UUklNXzNQNF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GU0VRUE1QX1RSSU1fM1A0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZTRVFQTVBfVFJJTV8zUDRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMToyMF0gVFJJTV8xUDcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU0VRUE1QX1RSSU1fMVA3X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZTRVFQTVBfVFJJTV8xUDdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMDAwMDAKKyNkZWZpbmUgRkxBU0hfRlNFUVBNUF9UUklNXzFQN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogWzE5OjE2XSBUUklNXzBQOAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTRVFQTVBfVFJJTV8wUDhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlNFUVBNUF9UUklNXzBQOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGTEFTSF9GU0VRUE1QX1RSSU1fMFA4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTQ6MTJdIFZJTl9BVF9YCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNFUVBNUF9WSU5fQVRfWF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GU0VRUE1QX1ZJTl9BVF9YX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3MDAwCisjZGVmaW5lIEZMQVNIX0ZTRVFQTVBfVklOX0FUX1hfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgICBbOF0gVklOX0JZX1BBU1MKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU0VRUE1QX1ZJTl9CWV9QQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0ZTRVFQTVBfVklOX0JZX1BBU1NfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlNFUVBNUF9WSU5fQllfUEFTU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9GU0VRUE1QX1ZJTl9CWV9QQVNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQlNUUk9CRVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI0XSBFQ0JJVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19FQ0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX0VDQklUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfRUNCSVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19FQ0JJVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxOF0gUldBSVQyX0ZMQ0xLCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1JXQUlUMl9GTENMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfUldBSVQyX0ZMQ0xLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19SV0FJVDJfRkxDTEtfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1JXQUlUMl9GTENMS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBSV0FJVF9GTENMSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19SV0FJVF9GTENMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1JXQUlUX0ZMQ0xLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfUldBSVRfRkxDTEtfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19SV0FJVF9GTENMS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gRkxDTEtFTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19GTENMS0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX0ZMQ0xLRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfRkxDTEtFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19GTENMS0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgICBbOF0gQ1RSTEVOWgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19DVFJMRU5aICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX0NUUkxFTlpfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfQ1RSTEVOWl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19DVFJMRU5aX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbNl0gTk9DT0xSRUQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfTk9DT0xSRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19OT0NPTFJFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX05PQ09MUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfTk9DT0xSRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFBSRUNPTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19QUkVDT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1BSRUNPTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfUFJFQ09MX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19QUkVDT0xfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gVElfT1RQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1RJX09UUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfVElfT1RQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19USV9PVFBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1RJX09UUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBPVFAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfT1RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19PVFBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX09UUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfT1RQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFRFWgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19URVogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1RFWl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfVEVaX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19URVpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZQU1RST0JFUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzhdIEVYRUNVVEVaCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlBTVFJPQkVTX0VYRUNVVEVaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9GUFNUUk9CRVNfRVhFQ1VURVpfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZQU1RST0JFU19FWEVDVVRFWl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRlBTVFJPQkVTX0VYRUNVVEVaX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFsxXSBWM1BXUkROWgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZQU1RST0JFU19WM1BXUkROWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfRlBTVFJPQkVTX1YzUFdSRE5aX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBGTEFTSF9GUFNUUk9CRVNfVjNQV1JETlpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX0ZQU1RST0JFU19WM1BXUkROWl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gVjVQV1JETloKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GUFNUUk9CRVNfVjVQV1JETlogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZQU1RST0JFU19WNVBXUkROWl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfRlBTVFJPQkVTX1Y1UFdSRE5aX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GUFNUUk9CRVNfVjVQV1JETlpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQk1PREUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMjowXSBNT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJNT0RFX01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GQk1PREVfTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEZMQVNIX0ZCTU9ERV9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZUQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBUQ1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GVENSX1RDUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZMQVNIX0ZUQ1JfVENSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRkxBU0hfRlRDUl9UQ1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkFERFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGQUREUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZBRERSX0ZBRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRkFERFJfRkFERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GQUREUl9GQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GVENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTZdIFdEQVRBX0JMS19DTFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GVENUTF9XREFUQV9CTEtfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZMQVNIX0ZUQ1RMX1dEQVRBX0JMS19DTFJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkxBU0hfRlRDVExfV0RBVEFfQkxLX0NMUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBGTEFTSF9GVENUTF9XREFUQV9CTEtfQ0xSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzFdIFRFU1RfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GVENUTF9URVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX0ZUQ1RMX1RFU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRkxBU0hfRlRDVExfVEVTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGTEFTSF9GVENUTF9URVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GV1BXUklURTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGV1BXUklURTAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GV1BXUklURTBfRldQV1JJVEUwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFMF9GV1BXUklURTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEUwX0ZXUFdSSVRFMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRldQV1JJVEUxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRldQV1JJVEUxCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRldQV1JJVEUxX0ZXUFdSSVRFMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GV1BXUklURTFfRldQV1JJVEUxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFMV9GV1BXUklURTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZXUFdSSVRFMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZXUFdSSVRFMgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFMl9GV1BXUklURTJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEUyX0ZXUFdSSVRFMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GV1BXUklURTJfRldQV1JJVEUyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GV1BXUklURTMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGV1BXUklURTMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GV1BXUklURTNfRldQV1JJVEUzX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFM19GV1BXUklURTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEUzX0ZXUFdSSVRFM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRldQV1JJVEU0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRldQV1JJVEU0CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRldQV1JJVEU0X0ZXUFdSSVRFNF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GV1BXUklURTRfRldQV1JJVEU0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFNF9GV1BXUklURTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZXUFdSSVRFNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZXUFdSSVRFNQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFNV9GV1BXUklURTVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEU1X0ZXUFdSSVRFNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GV1BXUklURTVfRldQV1JJVEU1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GV1BXUklURTYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGV1BXUklURTYKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GV1BXUklURTZfRldQV1JJVEU2X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFNl9GV1BXUklURTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEU2X0ZXUFdSSVRFNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRldQV1JJVEU3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRldQV1JJVEU3CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRldQV1JJVEU3X0ZXUFdSSVRFN19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GV1BXUklURTdfRldQV1JJVEU3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFN19GV1BXUklURTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZXUFdSSVRFX0VDQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIEVDQ0JZVEVTMDdfMDAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GV1BXUklURV9FQ0NfRUNDQllURVMwN18wMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFX0VDQ19FQ0NCWVRFUzA3XzAwX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEVfRUNDX0VDQ0JZVEVTMDdfMDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBFQ0NCWVRFUzE1XzA4CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRldQV1JJVEVfRUNDX0VDQ0JZVEVTMTVfMDhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GV1BXUklURV9FQ0NfRUNDQllURVMxNV8wOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFX0VDQ19FQ0NCWVRFUzE1XzA4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gRUNDQllURVMyM18xNgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFX0VDQ19FQ0NCWVRFUzIzXzE2X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEVfRUNDX0VDQ0JZVEVTMjNfMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGTEFTSF9GV1BXUklURV9FQ0NfRUNDQllURVMyM18xNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEVDQ0JZVEVTMzFfMjQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GV1BXUklURV9FQ0NfRUNDQllURVMzMV8yNF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFX0VDQ19FQ0NCWVRFUzMxXzI0X00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEVfRUNDX0VDQ0JZVEVTMzFfMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNXU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNBRkVMVgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTV1NUQVRfU0FGRUxWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRlNXU1RBVF9TQUZFTFZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGTEFTSF9GU1dTVEFUX1NBRkVMVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZTV1NUQVRfU0FGRUxWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9HTEJDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDTEtTRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fR0xCQ1RMX0NMS1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZTTV9HTEJDVExfQ0xLU0VMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfRlNNX0dMQkNUTF9DTEtTRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GU01fR0xCQ1RMX0NMS1NFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fU1RBVEUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzExXSBDVFJMRU5aCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX0NUUkxFTlogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfQ1RSTEVOWl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9DVFJMRU5aX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX0NUUkxFTlpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBFWEVDVVRFWgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9FWEVDVVRFWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX0VYRUNVVEVaX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfRVhFQ1VURVpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9FWEVDVVRFWl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOF0gRlNNX0FDVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9GU01fQUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX0ZTTV9BQ1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfRlNNX0FDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9GU01fQUNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gVElPVFBfQUNUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX1RJT1RQX0FDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfVElPVFBfQUNUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9USU9UUF9BQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX1RJT1RQX0FDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBPVFBfQUNUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX09UUF9BQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfT1RQX0FDVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9PVFBfQUNUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX09UUF9BQ1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1NUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBOT05fT1AKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RBVF9OT05fT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFUX05PTl9PUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRfTk9OX09QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBGTEFTSF9GU01fU1RBVF9OT05fT1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIE9WUl9QVUxfQ05UCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRfT1ZSX1BVTF9DTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGTEFTSF9GU01fU1RBVF9PVlJfUFVMX0NOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFUX09WUl9QVUxfQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRfT1ZSX1BVTF9DTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBJTlZfREFUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRfSU5WX0RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GU01fU1RBVF9JTlZfREFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFUX0lOVl9EQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRfSU5WX0RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0NNRAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjBdIEZTTUNNRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9DTURfRlNNQ01EX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkxBU0hfRlNNX0NNRF9GU01DTURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGTEFTSF9GU01fQ01EX0ZTTUNNRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fUEVfT1NVCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6OF0gUEdNX09TVQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9QRV9PU1VfUEdNX09TVV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlNNX1BFX09TVV9QR01fT1NVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGTEFTSF9GU01fUEVfT1NVX1BHTV9PU1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEVSQV9PU1UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fUEVfT1NVX0VSQV9PU1VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZTTV9QRV9PU1VfRVJBX09TVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkxBU0hfRlNNX1BFX09TVV9FUkFfT1NVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1ZTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsxNToxMl0gVlNUQVRfQ05UCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1ZTVEFUX1ZTVEFUX0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GU01fVlNUQVRfVlNUQVRfQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9WU1RBVF9WU1RBVF9DTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9QRV9WU1UKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTo4XSBQR01fVlNVCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1BFX1ZTVV9QR01fVlNVX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GU01fUEVfVlNVX1BHTV9WU1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZMQVNIX0ZTTV9QRV9WU1VfUEdNX1ZTVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gRVJBX1ZTVQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9QRV9WU1VfRVJBX1ZTVV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlNNX1BFX1ZTVV9FUkFfVlNVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGTEFTSF9GU01fUEVfVlNVX0VSQV9WU1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fQ01QX1ZTVQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTU6MTJdIEFERF9FWFoKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fQ01QX1ZTVV9BRERfRVhaX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTTV9DTVBfVlNVX0FERF9FWFpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX0NNUF9WU1VfQUREX0VYWl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0VYX1ZBTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjhdIFJFUF9WU1UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fRVhfVkFMX1JFUF9WU1VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZTTV9FWF9WQUxfUkVQX1ZTVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkxBU0hfRlNNX0VYX1ZBTF9SRVBfVlNVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBFWEVfVkFMRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9FWF9WQUxfRVhFX1ZBTERfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlNNX0VYX1ZBTF9FWEVfVkFMRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGTEFTSF9GU01fRVhfVkFMX0VYRV9WQUxEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fUkRfSAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFJEX0gKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fUkRfSF9SRF9IX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZTTV9SRF9IX1JEX0hfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkxBU0hfRlNNX1JEX0hfUkRfSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1BfT0gKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTo4XSBQR01fT0gKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fUF9PSF9QR01fT0hfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZTTV9QX09IX1BHTV9PSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1BfT0hfUEdNX09IX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0VSQV9PSAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIEVSQV9PSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfT0hfRVJBX09IX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9PSF9FUkFfT0hfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBGTEFTSF9GU01fRVJBX09IX0VSQV9PSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fU0FWX1BQVUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxMTowXSBTQVZfUF9QVUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU0FWX1BQVUxfU0FWX1BfUFVMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZMQVNIX0ZTTV9TQVZfUFBVTF9TQVZfUF9QVUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX1NBVl9QUFVMX1NBVl9QX1BVTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1BFX1ZICisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6OF0gUEdNX1ZICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1BFX1ZIX1BHTV9WSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GU01fUEVfVkhfUEdNX1ZIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZMQVNIX0ZTTV9QRV9WSF9QR01fVkhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9QUkdfUFcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBQUk9HX1BVTF9XSURUSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9QUkdfUFdfUFJPR19QVUxfV0lEVEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkxBU0hfRlNNX1BSR19QV19QUk9HX1BVTF9XSURUSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBGTEFTSF9GU01fUFJHX1BXX1BST0dfUFVMX1dJRFRIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fRVJBX1BXCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRlNNX0VSQV9QVworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfUFdfRlNNX0VSQV9QV19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9QV19GU01fRVJBX1BXX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GU01fRVJBX1BXX0ZTTV9FUkFfUFdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fU0FWX0VSQV9QVUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxMTowXSBTQVZfRVJBX1BVTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TQVZfRVJBX1BVTF9TQVZfRVJBX1BVTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfRlNNX1NBVl9FUkFfUFVMX1NBVl9FUkFfUFVMX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGRgorI2RlZmluZSBGTEFTSF9GU01fU0FWX0VSQV9QVUxfU0FWX0VSQV9QVUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fVElNRVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGU01fVElNRVIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fVElNRVJfRlNNX1RJTUVSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZTTV9USU1FUl9GU01fVElNRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX1RJTUVSX0ZTTV9USU1FUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX01PREUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE5OjE4XSBSRFZfU1VCTU9ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX1JEVl9TVUJNT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfUkRWX1NVQk1PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDMDAwMAorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9SRFZfU1VCTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIFBHTV9TVUJNT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfUEdNX1NVQk1PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9QR01fU1VCTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX1BHTV9TVUJNT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6IFsxNToxNF0gRVJBX1NVQk1PREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9FUkFfU1VCTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX0VSQV9TVUJNT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEMwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfRVJBX1NVQk1PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogWzEzOjEyXSBTVUJNT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfU1VCTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9TVUJNT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX1NVQk1PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6OV0gU0FWX1BHTV9DTUQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9TQVZfUEdNX0NNRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX1NBVl9QR01fQ01EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBFMDAKKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfU0FWX1BHTV9DTURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICBbODo2XSBTQVZfRVJBX01PREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9TQVZfRVJBX01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX1NBVl9FUkFfTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxQzAKKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfU0FWX0VSQV9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTozXSBNT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GU01fTU9ERV9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgWzI6MF0gQ01ECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfQ01EX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GU01fTU9ERV9DTURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX0NNRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9QR00KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI1OjIzXSBQR01fQkFOSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9QR01fUEdNX0JBTktfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkxBU0hfRlNNX1BHTV9QR01fQkFOS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAorI2RlZmluZSBGTEFTSF9GU01fUEdNX1BHTV9CQU5LX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgWzIyOjBdIFBHTV9BRERSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1BHTV9QR01fQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBGTEFTSF9GU01fUEdNX1BHTV9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwN0ZGRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9QR01fUEdNX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9FUkEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI1OjIzXSBFUkFfQkFOSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfRVJBX0JBTktfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9FUkFfQkFOS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAorI2RlZmluZSBGTEFTSF9GU01fRVJBX0VSQV9CQU5LX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgWzIyOjBdIEVSQV9BRERSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9FUkFfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBGTEFTSF9GU01fRVJBX0VSQV9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwN0ZGRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfRVJBX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9QUkdfUFVMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsxOToxNl0gQkVHX0VDX0xFVkVMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1BSR19QVUxfQkVHX0VDX0xFVkVMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GU01fUFJHX1BVTF9CRUdfRUNfTEVWRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9QUkdfUFVMX0JFR19FQ19MRVZFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTE6MF0gTUFYX1BSR19QVUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fUFJHX1BVTF9NQVhfUFJHX1BVTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZMQVNIX0ZTTV9QUkdfUFVMX01BWF9QUkdfUFVMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX1BSR19QVUxfTUFYX1BSR19QVUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0VSQV9QVUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE5OjE2XSBNQVhfRUNfTEVWRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fRVJBX1BVTF9NQVhfRUNfTEVWRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfUFVMX01BWF9FQ19MRVZFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9QVUxfTUFYX0VDX0xFVkVMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxMTowXSBNQVhfRVJBX1BVTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfUFVMX01BWF9FUkFfUFVMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9QVUxfTUFYX0VSQV9QVUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGRgorI2RlZmluZSBGTEFTSF9GU01fRVJBX1BVTF9NQVhfRVJBX1BVTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fU1RFUF9TSVpFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNDoxNl0gRUNfU1RFUF9TSVpFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NURVBfU0laRV9FQ19TVEVQX1NJWkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBGTEFTSF9GU01fU1RFUF9TSVpFX0VDX1NURVBfU0laRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRkYwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEVQX1NJWkVfRUNfU1RFUF9TSVpFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9QVUxfQ05UUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjQ6MTZdIENVUl9FQ19MRVZFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9QVUxfQ05UUl9DVVJfRUNfTEVWRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRkxBU0hfRlNNX1BVTF9DTlRSX0NVUl9FQ19MRVZFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUZGMDAwMAorI2RlZmluZSBGTEFTSF9GU01fUFVMX0NOVFJfQ1VSX0VDX0xFVkVMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzExOjBdIFBVTF9DTlRSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1BVTF9DTlRSX1BVTF9DTlRSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGTEFTSF9GU01fUFVMX0NOVFJfUFVMX0NOVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9QVUxfQ05UUl9QVUxfQ05UUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9FQ19TVEVQX0hFSUdIVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFszOjBdIEVDX1NURVBfSEVJR0hUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0VDX1NURVBfSEVJR0hUX0VDX1NURVBfSEVJR0hUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GU01fRUNfU1RFUF9IRUlHSFRfRUNfU1RFUF9IRUlHSFRfTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEZMQVNIX0ZTTV9FQ19TVEVQX0hFSUdIVF9FQ19TVEVQX0hFSUdIVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9TVF9NQUNISU5FCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyM10gRE9fUFJFQ09ORAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0RPX1BSRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfRE9fUFJFQ09ORF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9ET19QUkVDT05EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0RPX1BSRUNPTkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gRlNNX0lOVF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0ZTTV9JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfRlNNX0lOVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9GU01fSU5UX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0ZTTV9JTlRfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gQUxMX0JBTktTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfQUxMX0JBTktTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9BTExfQkFOS1NfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0FMTF9CQU5LU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfQUxMX0JBTktTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBDTVBWX0FMTE9XRUQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9DTVBWX0FMTE9XRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0NNUFZfQUxMT1dFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfQ01QVl9BTExPV0VEX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9DTVBWX0FMTE9XRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIFJBTkRPTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1JBTkRPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUkFORE9NX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9SQU5ET01fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1JBTkRPTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gUlZfU0VDX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUlZfU0VDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9SVl9TRUNfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1JWX1NFQ19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUlZfU0VDX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBSVl9SRVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9SVl9SRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1JWX1JFU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUlZfUkVTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9SVl9SRVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIFJWX0lOVF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1JWX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUlZfSU5UX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9SVl9JTlRfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1JWX0lOVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNF0gT05FX1RJTUVfR09PRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX09ORV9USU1FX0dPT0QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfT05FX1RJTUVfR09PRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9PTkVfVElNRV9HT09EX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX09ORV9USU1FX0dPT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxMV0gRE9fUkVEVV9DT0wKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9ET19SRURVX0NPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0RPX1JFRFVfQ09MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfRE9fUkVEVV9DT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9ET19SRURVX0NPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgWzEwOjddIERCR19TSE9SVF9ST1cKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9EQkdfU0hPUlRfUk9XX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0RCR19TSE9SVF9ST1dfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3ODAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfREJHX1NIT1JUX1JPV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs1XSBQR01fU0VDX0NPRl9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1BHTV9TRUNfQ09GX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUEdNX1NFQ19DT0ZfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9QR01fU0VDX0NPRl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1BHTV9TRUNfQ09GX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gUFJFQ19TVE9QX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUFJFQ19TVE9QX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9QUkVDX1NUT1BfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1BSRUNfU1RPUF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUFJFQ19TVE9QX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBESVNfVFNUX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfRElTX1RTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9ESVNfVFNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0RJU19UU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfRElTX1RTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBDTURfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9DTURfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0NNRF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfQ01EX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9DTURfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIElOVl9EQVRBCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfSU5WX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9JTlZfREFUQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0lOVl9EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfSU5WX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBPVkVSUklERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX09WRVJSSURFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfT1ZFUlJJREVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9PVkVSUklERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX09WRVJSSURFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9GTEVTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTE6OF0gQkxLX1RJT1RQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0ZMRVNfQkxLX1RJT1RQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GU01fRkxFU19CTEtfVElPVFBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEZMQVNIX0ZTTV9GTEVTX0JMS19USU9UUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gQkxLX09UUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9GTEVTX0JMS19PVFBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlNNX0ZMRVNfQkxLX09UUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGTEFTSF9GU01fRkxFU19CTEtfT1RQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fV1JfRU5BCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzI6MF0gV1JfRU5BCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1dSX0VOQV9XUl9FTkFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GU01fV1JfRU5BX1dSX0VOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEZMQVNIX0ZTTV9XUl9FTkFfV1JfRU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9BQ0NfUFAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGU01fQUNDX1BQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0FDQ19QUF9GU01fQUNDX1BQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GU01fQUNDX1BQX0ZTTV9BQ0NfUFBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9BQ0NfUFBfRlNNX0FDQ19QUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9BQ0NfRVAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBBQ0NfRVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fQUNDX0VQX0FDQ19FUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZMQVNIX0ZTTV9BQ0NfRVBfQUNDX0VQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX0FDQ19FUF9BQ0NfRVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0FERFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMwOjI4XSBCQU5LCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0FERFJfQkFOS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GU01fQUREUl9CQU5LX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9BRERSX0JBTktfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICBbMjc6MF0gQ1VSX0FERFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fQUREUl9DVVJfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEZMQVNIX0ZTTV9BRERSX0NVUl9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX0FERFJfQ1VSX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1NFQ1RPUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTZdIFNFQ1RfRVJBU0VECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUl9TRUNUX0VSQVNFRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SX1NFQ1RfRVJBU0VEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1JfU0VDVF9FUkFTRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gRlNNX1NFQ1RPUl9FWFRFTlNJT04KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SX0ZTTV9TRUNUT1JfRVhURU5TSU9OX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1JfRlNNX1NFQ1RPUl9FWFRFTlNJT05fTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUl9GU01fU0VDVE9SX0VYVEVOU0lPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzo0XSBTRUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SX1NFQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1JfU0VDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUl9TRUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBTRUNfT1VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUl9TRUNfT1VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SX1NFQ19PVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1JfU0VDX09VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZNQ19SRVZfSUQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjEyXSBNT0RfVkVSU0lPTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNQ19SRVZfSURfTU9EX1ZFUlNJT05fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgRkxBU0hfRk1DX1JFVl9JRF9NT0RfVkVSU0lPTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjAwMAorI2RlZmluZSBGTEFTSF9GTUNfUkVWX0lEX01PRF9WRVJTSU9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjBdIENPTkZJR19DUkMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTUNfUkVWX0lEX0NPTkZJR19DUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZMQVNIX0ZNQ19SRVZfSURfQ09ORklHX0NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgRkxBU0hfRk1DX1JFVl9JRF9DT05GSUdfQ1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0VSUl9BRERSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6OF0gRlNNX0VSUl9BRERSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0VSUl9BRERSX0ZTTV9FUlJfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBGTEFTSF9GU01fRVJSX0FERFJfRlNNX0VSUl9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjAwCisjZGVmaW5lIEZMQVNIX0ZTTV9FUlJfQUREUl9GU01fRVJSX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzM6MF0gRlNNX0VSUl9CQU5LCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0VSUl9BRERSX0ZTTV9FUlJfQkFOS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GU01fRVJSX0FERFJfRlNNX0VSUl9CQU5LX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEZMQVNIX0ZTTV9FUlJfQUREUl9GU01fRVJSX0JBTktfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9QR01fTUFYUFVMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTE6MF0gRlNNX1BHTV9NQVhQVUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fUEdNX01BWFBVTF9GU01fUEdNX01BWFBVTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZMQVNIX0ZTTV9QR01fTUFYUFVMX0ZTTV9QR01fTUFYUFVMX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX1BHTV9NQVhQVUxfRlNNX1BHTV9NQVhQVUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0VYRUNVVEUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE5OjE2XSBTVVNQRU5EX05PVworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9FWEVDVVRFX1NVU1BFTkRfTk9XX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlNNX0VYRUNVVEVfU1VTUEVORF9OT1dfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGTEFTSF9GU01fRVhFQ1VURV9TVVNQRU5EX05PV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgIFs0OjBdIEZTTUVYRUNVVEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fRVhFQ1VURV9GU01FWEVDVVRFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZMQVNIX0ZTTV9FWEVDVVRFX0ZTTUVYRUNVVEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgRkxBU0hfRlNNX0VYRUNVVEVfRlNNRVhFQ1VURV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1NFQ1RPUjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGU01fU0VDVE9SMQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1IxX0ZTTV9TRUNUT1IxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUjFfRlNNX1NFQ1RPUjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SMV9GU01fU0VDVE9SMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fU0VDVE9SMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZTTV9TRUNUT1IyCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUjJfRlNNX1NFQ1RPUjJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SMl9GU01fU0VDVE9SMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1IyX0ZTTV9TRUNUT1IyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9CU0xFMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZTTV9CU0xFMAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9CU0xFMF9GU01fQlNMRTBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRlNNX0JTTEUwX0ZTTV9CU0xFMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GU01fQlNMRTBfRlNNX0JTTEUwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fQlNMRTEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGU01fQlNMMQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9CU0xFMV9GU01fQlNMMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRlNNX0JTTEUxX0ZTTV9CU0wxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GU01fQlNMRTFfRlNNX0JTTDFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fQlNMUDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGU01fQlNMUDAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fQlNMUDBfRlNNX0JTTFAwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZTTV9CU0xQMF9GU01fQlNMUDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX0JTTFAwX0ZTTV9CU0xQMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0JTTFAxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRlNNX0JTTDEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fQlNMUDFfRlNNX0JTTDFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZTTV9CU0xQMV9GU01fQlNMMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX0JTTFAxX0ZTTV9CU0wxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkNGR19CQU5LCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyMF0gRUVfQkFOS19XSURUSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQkFOS19FRV9CQU5LX1dJRFRIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfRkNGR19CQU5LX0VFX0JBTktfV0lEVEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkYwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JBTktfRUVfQkFOS19XSURUSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTZdIEVFX05VTV9CQU5LCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CQU5LX0VFX05VTV9CQU5LX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JBTktfRUVfTlVNX0JBTktfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQkFOS19FRV9OVU1fQkFOS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6NF0gTUFJTl9CQU5LX1dJRFRICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CQU5LX01BSU5fQkFOS19XSURUSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGTEFTSF9GQ0ZHX0JBTktfTUFJTl9CQU5LX1dJRFRIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkYwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQkFOS19NQUlOX0JBTktfV0lEVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gTUFJTl9OVU1fQkFOSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQkFOS19NQUlOX05VTV9CQU5LX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CQU5LX01BSU5fTlVNX0JBTktfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBGTEFTSF9GQ0ZHX0JBTktfTUFJTl9OVU1fQkFOS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQ0ZHX1dSQVBQRVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBGQU1JTFlfVFlQRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9GQU1JTFlfVFlQRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0ZBTUlMWV9UWVBFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfRkFNSUxZX1RZUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjBdIE1FTV9NQVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfTUVNX01BUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9NRU1fTUFQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX01FTV9NQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfTUVNX01BUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTZdIENQVTIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfQ1BVMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9DUFUyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0NQVTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjEyXSBFRV9JTl9NQUlOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0VFX0lOX01BSU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfRUVfSU5fTUFJTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9FRV9JTl9NQUlOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gUk9NCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX1JPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfUk9NX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9ST01fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX1JPTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBJRkxVU0gKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfSUZMVVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9JRkxVU0hfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0lGTFVTSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfSUZMVVNIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFNJTDMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfU0lMMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9TSUwzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX1NJTDNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfU0lMM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIEVDQ0EKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfRUNDQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9FQ0NBX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0VDQ0FfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfRUNDQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjZdIEFVVE9fU1VTUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9BVVRPX1NVU1BfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0FVVE9fU1VTUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfQVVUT19TVVNQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjRdIFVFUlIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfVUVSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9VRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX1VFUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBDUFVfVFlQRTEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfQ1BVX1RZUEUxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9DUFVfVFlQRTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0NQVV9UWVBFMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkNGR19CTktfVFlQRQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIEI3X1RZUEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0I3X1RZUEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjdfVFlQRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CN19UWVBFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBCNl9UWVBFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CNl9UWVBFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0I2X1RZUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjZfVFlQRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoyMF0gQjVfVFlQRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjVfVFlQRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CNV9UWVBFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0I1X1RZUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTZdIEI0X1RZUEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0I0X1RZUEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjRfVFlQRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CNF9UWVBFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjEyXSBCM19UWVBFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CM19UWVBFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0IzX1RZUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjNfVFlQRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6OF0gQjJfVFlQRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjJfVFlQRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CMl9UWVBFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0IyX1RZUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjRdIEIxX1RZUEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0IxX1RZUEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjFfVFlQRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CMV9UWVBFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBCMF9UWVBFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CMF9UWVBFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0IwX1RZUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjBfVFlQRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZDRkdfQjBfU1RBUlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBCMF9NQVhfU0VDVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CMF9TVEFSVF9CMF9NQVhfU0VDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IwX1NUQVJUX0IwX01BWF9TRUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjBfU1RBUlRfQjBfTUFYX1NFQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoyNF0gQjBfTVVYX0ZBQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjBfU1RBUlRfQjBfTVVYX0ZBQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CMF9TVEFSVF9CMF9NVVhfRkFDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IwX1NUQVJUX0IwX01VWF9GQUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgWzIzOjBdIEIwX1NUQVJUX0FERFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IwX1NUQVJUX0IwX1NUQVJUX0FERFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjBfU1RBUlRfQjBfU1RBUlRfQUREUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRkNGR19CMF9TVEFSVF9CMF9TVEFSVF9BRERSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkNGR19CMV9TVEFSVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIEIxX01BWF9TRUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IxX1NUQVJUX0IxX01BWF9TRUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjFfU1RBUlRfQjFfTUFYX1NFQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CMV9TVEFSVF9CMV9NQVhfU0VDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBCMV9NVVhfRkFDVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CMV9TVEFSVF9CMV9NVVhfRkFDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IxX1NUQVJUX0IxX01VWF9GQUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjFfU1RBUlRfQjFfTVVYX0ZBQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICBbMjM6MF0gQjFfU1RBUlRfQUREUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjFfU1RBUlRfQjFfU1RBUlRfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRkxBU0hfRkNGR19CMV9TVEFSVF9CMV9TVEFSVF9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IxX1NUQVJUX0IxX1NUQVJUX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQ0ZHX0IyX1NUQVJUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gQjJfTUFYX1NFQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjJfU1RBUlRfQjJfTUFYX1NFQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CMl9TVEFSVF9CMl9NQVhfU0VDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IyX1NUQVJUX0IyX01BWF9TRUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjRdIEIyX01VWF9GQUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IyX1NUQVJUX0IyX01VWF9GQUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjJfU1RBUlRfQjJfTVVYX0ZBQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CMl9TVEFSVF9CMl9NVVhfRkFDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogIFsyMzowXSBCMl9TVEFSVF9BRERSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CMl9TVEFSVF9CMl9TVEFSVF9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IyX1NUQVJUX0IyX1NUQVJUX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjJfU1RBUlRfQjJfU1RBUlRfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZDRkdfQjNfU1RBUlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBCM19NQVhfU0VDVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CM19TVEFSVF9CM19NQVhfU0VDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IzX1NUQVJUX0IzX01BWF9TRUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjNfU1RBUlRfQjNfTUFYX1NFQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoyNF0gQjNfTVVYX0ZBQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjNfU1RBUlRfQjNfTVVYX0ZBQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CM19TVEFSVF9CM19NVVhfRkFDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IzX1NUQVJUX0IzX01VWF9GQUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgWzIzOjBdIEIzX1NUQVJUX0FERFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IzX1NUQVJUX0IzX1NUQVJUX0FERFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjNfU1RBUlRfQjNfU1RBUlRfQUREUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRkNGR19CM19TVEFSVF9CM19TVEFSVF9BRERSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkNGR19CNF9TVEFSVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIEI0X01BWF9TRUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0I0X1NUQVJUX0I0X01BWF9TRUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjRfU1RBUlRfQjRfTUFYX1NFQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CNF9TVEFSVF9CNF9NQVhfU0VDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBCNF9NVVhfRkFDVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CNF9TVEFSVF9CNF9NVVhfRkFDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I0X1NUQVJUX0I0X01VWF9GQUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjRfU1RBUlRfQjRfTVVYX0ZBQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICBbMjM6MF0gQjRfU1RBUlRfQUREUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjRfU1RBUlRfQjRfU1RBUlRfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRkxBU0hfRkNGR19CNF9TVEFSVF9CNF9TVEFSVF9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBGTEFTSF9GQ0ZHX0I0X1NUQVJUX0I0X1NUQVJUX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQ0ZHX0I1X1NUQVJUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gQjVfTUFYX1NFQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjVfU1RBUlRfQjVfTUFYX1NFQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CNV9TVEFSVF9CNV9NQVhfU0VDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I1X1NUQVJUX0I1X01BWF9TRUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjRdIEI1X01VWF9GQUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0I1X1NUQVJUX0I1X01VWF9GQUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjVfU1RBUlRfQjVfTVVYX0ZBQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CNV9TVEFSVF9CNV9NVVhfRkFDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogIFsyMzowXSBCNV9TVEFSVF9BRERSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CNV9TVEFSVF9CNV9TVEFSVF9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I1X1NUQVJUX0I1X1NUQVJUX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjVfU1RBUlRfQjVfU1RBUlRfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZDRkdfQjZfU1RBUlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBCNl9NQVhfU0VDVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CNl9TVEFSVF9CNl9NQVhfU0VDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I2X1NUQVJUX0I2X01BWF9TRUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjZfU1RBUlRfQjZfTUFYX1NFQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoyNF0gQjZfTVVYX0ZBQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjZfU1RBUlRfQjZfTVVYX0ZBQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CNl9TVEFSVF9CNl9NVVhfRkFDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I2X1NUQVJUX0I2X01VWF9GQUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgWzIzOjBdIEI2X1NUQVJUX0FERFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0I2X1NUQVJUX0I2X1NUQVJUX0FERFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjZfU1RBUlRfQjZfU1RBUlRfQUREUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRkNGR19CNl9TVEFSVF9CNl9TVEFSVF9BRERSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkNGR19CN19TVEFSVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIEI3X01BWF9TRUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0I3X1NUQVJUX0I3X01BWF9TRUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjdfU1RBUlRfQjdfTUFYX1NFQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CN19TVEFSVF9CN19NQVhfU0VDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBCN19NVVhfRkFDVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CN19TVEFSVF9CN19NVVhfRkFDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I3X1NUQVJUX0I3X01VWF9GQUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjdfU1RBUlRfQjdfTVVYX0ZBQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICBbMjM6MF0gQjdfU1RBUlRfQUREUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjdfU1RBUlRfQjdfU1RBUlRfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRkxBU0hfRkNGR19CN19TVEFSVF9CN19TVEFSVF9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBGTEFTSF9GQ0ZHX0I3X1NUQVJUX0I3X1NUQVJUX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQ0ZHX0IwX1NTSVpFMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjc6MTZdIEIwX05VTV9TRUNUT1JTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CMF9TU0laRTBfQjBfTlVNX1NFQ1RPUlNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IwX1NTSVpFMF9CMF9OVU1fU0VDVE9SU19NICAgICAgICAgICAgICAgICAgICAgICAweDBGRkYwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjBfU1NJWkUwX0IwX05VTV9TRUNUT1JTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgWzM6MF0gQjBfU0VDVF9TSVpFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CMF9TU0laRTBfQjBfU0VDVF9TSVpFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IwX1NTSVpFMF9CMF9TRUNUX1NJWkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjBfU1NJWkUwX0IwX1NFQ1RfU0laRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19GTEFTSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19ncGlvLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzNzQ4NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2dwaW8uaApAQCAtMCwwICsxLDIyNDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19ncGlvX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0dQSU9fSF9fCisjZGVmaW5lIF9fSFdfR1BJT19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBHUElPIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIERhdGEgT3V0IDAgdG8gMworI2RlZmluZSBHUElPX09fRE9VVDNfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIERhdGEgT3V0IDQgdG8gNworI2RlZmluZSBHUElPX09fRE9VVDdfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIERhdGEgT3V0IDggdG8gMTEKKyNkZWZpbmUgR1BJT19PX0RPVVQxMV84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBEYXRhIE91dCAxMiB0byAxNQorI2RlZmluZSBHUElPX09fRE9VVDE1XzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIERhdGEgT3V0IDE2IHRvIDE5CisjZGVmaW5lIEdQSU9fT19ET1VUMTlfMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gRGF0YSBPdXQgMjAgdG8gMjMKKyNkZWZpbmUgR1BJT19PX0RPVVQyM18yMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBEYXRhIE91dCAyNCB0byAyNworI2RlZmluZSBHUElPX09fRE9VVDI3XzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIERhdGEgT3V0IDI4IHRvIDMxCisjZGVmaW5lIEdQSU9fT19ET1VUMzFfMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gRGF0YSBPdXRwdXQgZm9yIERJTyAwIHRvIDMxCisjZGVmaW5lIEdQSU9fT19ET1VUMzFfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKworLy8gRGF0YSBPdXQgU2V0CisjZGVmaW5lIEdQSU9fT19ET1VUU0VUMzFfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOTAKKworLy8gRGF0YSBPdXQgQ2xlYXIKKyNkZWZpbmUgR1BJT19PX0RPVVRDTFIzMV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBBMAorCisvLyBEYXRhIE91dCBUb2dnbGUKKyNkZWZpbmUgR1BJT19PX0RPVVRUR0wzMV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBCMAorCisvLyBEYXRhIElucHV0IGZyb20gRElPIDAgdG8gMzEKKyNkZWZpbmUgR1BJT19PX0RJTjMxXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorCisvLyBEYXRhIE91dHB1dCBFbmFibGUgZm9yIERJTyAwIHRvIDMxCisjZGVmaW5lIEdQSU9fT19ET0UzMV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRDAKKworLy8gRXZlbnQgUmVnaXN0ZXIgZm9yIERJTyAwIHRvIDMxCisjZGVmaW5lIEdQSU9fT19FVkZMQUdTMzFfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUElPX09fRE9VVDNfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIERJTzMKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMywgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8zX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgR1BJT19ET1VUM18wX0RJTzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMTZdIERJTzIKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMiwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8yX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR1BJT19ET1VUM18wX0RJTzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzhdIERJTzEKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMSwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8xX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET1VUM18wX0RJTzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzBdIERJTzAKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMCwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8wX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BJT19ET1VUM18wX0RJTzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BJT19PX0RPVVQ3XzQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI0XSBESU83CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzcsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEdQSU9fRE9VVDdfNF9ESU83X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzE2XSBESU82CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzYsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRE9VVDdfNF9ESU82X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgIFs4XSBESU81CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzUsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQSU9fRE9VVDdfNF9ESU81X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFswXSBESU80CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzQsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fRE9VVDdfNF9ESU80X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQSU9fT19ET1VUMTFfOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIERJTzExCisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzExLCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDExXzhfRElPMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU8xMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBHUElPX0RPVVQxMV84X0RJTzExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDExXzhfRElPMTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxNl0gRElPMTAKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMTAsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQxMV84X0RJTzEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRE9VVDExXzhfRElPMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU8xMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgIFs4XSBESU85CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzksIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQxMV84X0RJTzlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQSU9fRE9VVDExXzhfRElPOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU85X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFswXSBESU84CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzgsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQxMV84X0RJTzhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fRE9VVDExXzhfRElPOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU84X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQSU9fT19ET1VUMTVfMTIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI0XSBESU8xNQorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMxNSwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQxNV8xMl9ESU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDE1XzEyX0RJTzE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgR1BJT19ET1VUMTVfMTJfRElPMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQxNV8xMl9ESU8xNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMTZdIERJTzE0CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzE0LCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDE1XzEyX0RJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMTVfMTJfRElPMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBHUElPX0RPVVQxNV8xMl9ESU8xNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDE1XzEyX0RJTzE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgICBbOF0gRElPMTMKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMTMsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMTVfMTJfRElPMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQxNV8xMl9ESU8xM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQSU9fRE9VVDE1XzEyX0RJTzEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUMTVfMTJfRElPMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFswXSBESU8xMgorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMxMiwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQxNV8xMl9ESU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDE1XzEyX0RJTzEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BJT19ET1VUMTVfMTJfRElPMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQxNV8xMl9ESU8xMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BJT19PX0RPVVQxOV8xNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIERJTzE5CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzE5LCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDE5XzE2X0RJTzE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMTlfMTZfRElPMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBHUElPX0RPVVQxOV8xNl9ESU8xOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDE5XzE2X0RJTzE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxNl0gRElPMTgKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMTgsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMTlfMTZfRElPMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQxOV8xNl9ESU8xOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRE9VVDE5XzE2X0RJTzE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMTlfMTZfRElPMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgIFs4XSBESU8xNworLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMxNywgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQxOV8xNl9ESU8xNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDE5XzE2X0RJTzE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET1VUMTlfMTZfRElPMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQxOV8xNl9ESU8xN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzBdIERJTzE2CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzE2LCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDE5XzE2X0RJTzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUMTlfMTZfRElPMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUElPX0RPVVQxOV8xNl9ESU8xNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDE5XzE2X0RJTzE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUElPX09fRE9VVDIzXzIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gRElPMjMKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMjMsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMjNfMjBfRElPMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQyM18yMF9ESU8yM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEdQSU9fRE9VVDIzXzIwX0RJTzIzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMjNfMjBfRElPMjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzE2XSBESU8yMgorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMyMiwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQyM18yMF9ESU8yMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDIzXzIwX0RJTzIyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR1BJT19ET1VUMjNfMjBfRElPMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQyM18yMF9ESU8yMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzhdIERJTzIxCisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzIxLCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDIzXzIwX0RJTzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUMjNfMjBfRElPMjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUElPX0RPVVQyM18yMF9ESU8yMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDIzXzIwX0RJTzIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbMF0gRElPMjAKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMjAsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMjNfMjBfRElPMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQyM18yMF9ESU8yMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fRE9VVDIzXzIwX0RJTzIwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUMjNfMjBfRElPMjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQSU9fT19ET1VUMjdfMjQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI0XSBESU8yNworLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMyNywgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQyN18yNF9ESU8yNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDI3XzI0X0RJTzI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgR1BJT19ET1VUMjdfMjRfRElPMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQyN18yNF9ESU8yN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMTZdIERJTzI2CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzI2LCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDI3XzI0X0RJTzI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMjdfMjRfRElPMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBHUElPX0RPVVQyN18yNF9ESU8yNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDI3XzI0X0RJTzI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgICBbOF0gRElPMjUKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMjUsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMjdfMjRfRElPMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQyN18yNF9ESU8yNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQSU9fRE9VVDI3XzI0X0RJTzI1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUMjdfMjRfRElPMjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFswXSBESU8yNAorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMyNCwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQyN18yNF9ESU8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDI3XzI0X0RJTzI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BJT19ET1VUMjdfMjRfRElPMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQyN18yNF9ESU8yNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BJT19PX0RPVVQzMV8yOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIERJTzMxCisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzMxLCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDMxXzI4X0RJTzMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMjhfRElPMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBHUElPX0RPVVQzMV8yOF9ESU8zMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzI4X0RJTzMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxNl0gRElPMzAKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMzAsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMzFfMjhfRElPMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8yOF9ESU8zMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRE9VVDMxXzI4X0RJTzMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMjhfRElPMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgIFs4XSBESU8yOQorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMyOSwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQzMV8yOF9ESU8yOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzI4X0RJTzI5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET1VUMzFfMjhfRElPMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQzMV8yOF9ESU8yOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzBdIERJTzI4CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzI4LCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDMxXzI4X0RJTzI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMjhfRElPMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUElPX0RPVVQzMV8yOF9ESU8yOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDMxXzI4X0RJTzI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUElPX09fRE9VVDMxXzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBESU8zMQorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMzEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8zMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8zMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBESU8zMAorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMzAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8zMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8zMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBESU8yOQorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMjkKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBESU8yOAorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMjgKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBESU8yNworLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMjcKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogICAgWzI2XSBESU8yNgorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMjYKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBESU8yNQorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMjUKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBESU8yNAorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMjQKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIzXSBESU8yMworLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMjMKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBESU8yMgorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMjIKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBESU8yMQorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMjEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBESU8yMAorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMjAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBESU8xOQorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMTkKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBESU8xOAorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMTgKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBESU8xNworLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMTcKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBESU8xNgorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMTYKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBESU8xNQorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMTUKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBESU8xNAorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMTQKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBESU8xMworLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMTMKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBESU8xMgorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMTIKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBESU8xMQorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMTEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBESU8xMAorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMTAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBESU85CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyA5CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU85X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gRElPOAorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gOAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU84X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIERJTzcKKy8vCisvLyBEYXRhIG91dHB1dCBmb3IgRElPIDcKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU83X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBESU82CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyA2CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU82X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gRElPNQorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gNQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU81X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIERJTzQKKy8vCisvLyBEYXRhIG91dHB1dCBmb3IgRElPIDQKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU80X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBESU8zCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAzCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8zX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gRElPMgorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMgorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIERJTzEKKy8vCisvLyBEYXRhIG91dHB1dCBmb3IgRElPIDEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBESU8wCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8wX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUElPX09fRE9VVFNFVDMxXzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBESU8zMQorLy8KKy8vIFNldCBiaXQgMzEKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8zMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8zMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBESU8zMAorLy8KKy8vIFNldCBiaXQgMzAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8zMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8zMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBESU8yOQorLy8KKy8vIFNldCBiaXQgMjkKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBESU8yOAorLy8KKy8vIFNldCBiaXQgMjgKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBESU8yNworLy8KKy8vIFNldCBiaXQgMjcKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogICAgWzI2XSBESU8yNgorLy8KKy8vIFNldCBiaXQgMjYKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBESU8yNQorLy8KKy8vIFNldCBiaXQgMjUKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBESU8yNAorLy8KKy8vIFNldCBiaXQgMjQKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIzXSBESU8yMworLy8KKy8vIFNldCBiaXQgMjMKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBESU8yMgorLy8KKy8vIFNldCBiaXQgMjIKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBESU8yMQorLy8KKy8vIFNldCBiaXQgMjEKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBESU8yMAorLy8KKy8vIFNldCBiaXQgMjAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBESU8xOQorLy8KKy8vIFNldCBiaXQgMTkKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBESU8xOAorLy8KKy8vIFNldCBiaXQgMTgKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBESU8xNworLy8KKy8vIFNldCBiaXQgMTcKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBESU8xNgorLy8KKy8vIFNldCBiaXQgMTYKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBESU8xNQorLy8KKy8vIFNldCBiaXQgMTUKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBESU8xNAorLy8KKy8vIFNldCBiaXQgMTQKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBESU8xMworLy8KKy8vIFNldCBiaXQgMTMKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBESU8xMgorLy8KKy8vIFNldCBiaXQgMTIKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBESU8xMQorLy8KKy8vIFNldCBiaXQgMTEKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBESU8xMAorLy8KKy8vIFNldCBiaXQgMTAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBESU85CisvLworLy8gU2V0IGJpdCA5CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU85X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gRElPOAorLy8KKy8vIFNldCBiaXQgOAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU84X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIERJTzcKKy8vCisvLyBTZXQgYml0IDcKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU83X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBESU82CisvLworLy8gU2V0IGJpdCA2CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU82X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gRElPNQorLy8KKy8vIFNldCBiaXQgNQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU81X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIERJTzQKKy8vCisvLyBTZXQgYml0IDQKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU80X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBESU8zCisvLworLy8gU2V0IGJpdCAzCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8zX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gRElPMgorLy8KKy8vIFNldCBiaXQgMgorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIERJTzEKKy8vCisvLyBTZXQgYml0IDEKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBESU8wCisvLworLy8gU2V0IGJpdCAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8wX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUElPX09fRE9VVENMUjMxXzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBESU8zMQorLy8KKy8vIENsZWFycyBiaXQgMzEKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8zMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8zMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBESU8zMAorLy8KKy8vIENsZWFycyBiaXQgMzAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8zMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8zMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBESU8yOQorLy8KKy8vIENsZWFycyBiaXQgMjkKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBESU8yOAorLy8KKy8vIENsZWFycyBiaXQgMjgKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBESU8yNworLy8KKy8vIENsZWFycyBiaXQgMjcKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogICAgWzI2XSBESU8yNgorLy8KKy8vIENsZWFycyBiaXQgMjYKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBESU8yNQorLy8KKy8vIENsZWFycyBiaXQgMjUKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBESU8yNAorLy8KKy8vIENsZWFycyBiaXQgMjQKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIzXSBESU8yMworLy8KKy8vIENsZWFycyBiaXQgMjMKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBESU8yMgorLy8KKy8vIENsZWFycyBiaXQgMjIKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBESU8yMQorLy8KKy8vIENsZWFycyBiaXQgMjEKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBESU8yMAorLy8KKy8vIENsZWFycyBiaXQgMjAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBESU8xOQorLy8KKy8vIENsZWFycyBiaXQgMTkKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBESU8xOAorLy8KKy8vIENsZWFycyBiaXQgMTgKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBESU8xNworLy8KKy8vIENsZWFycyBiaXQgMTcKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBESU8xNgorLy8KKy8vIENsZWFycyBiaXQgMTYKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBESU8xNQorLy8KKy8vIENsZWFycyBiaXQgMTUKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBESU8xNAorLy8KKy8vIENsZWFycyBiaXQgMTQKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBESU8xMworLy8KKy8vIENsZWFycyBiaXQgMTMKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBESU8xMgorLy8KKy8vIENsZWFycyBiaXQgMTIKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBESU8xMQorLy8KKy8vIENsZWFycyBiaXQgMTEKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBESU8xMAorLy8KKy8vIENsZWFycyBiaXQgMTAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBESU85CisvLworLy8gQ2xlYXJzIGJpdCA5CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU85X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gRElPOAorLy8KKy8vIENsZWFycyBiaXQgOAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU84X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIERJTzcKKy8vCisvLyBDbGVhcnMgYml0IDcKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU83X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBESU82CisvLworLy8gQ2xlYXJzIGJpdCA2CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU82X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gRElPNQorLy8KKy8vIENsZWFycyBiaXQgNQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU81X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIERJTzQKKy8vCisvLyBDbGVhcnMgYml0IDQKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU80X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBESU8zCisvLworLy8gQ2xlYXJzIGJpdCAzCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8zX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gRElPMgorLy8KKy8vIENsZWFycyBiaXQgMgorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIERJTzEKKy8vCisvLyBDbGVhcnMgYml0IDEKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBESU8wCisvLworLy8gQ2xlYXJzIGJpdCAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8wX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUElPX09fRE9VVFRHTDMxXzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBESU8zMQorLy8KKy8vIFRvZ2dsZXMgYml0IDMxCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8zMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzMxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gRElPMzAKKy8vCisvLyBUb2dnbGVzIGJpdCAzMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8zMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIERJTzI5CisvLworLy8gVG9nZ2xlcyBiaXQgMjkKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBESU8yOAorLy8KKy8vIFRvZ2dsZXMgYml0IDI4CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gRElPMjcKKy8vCisvLyBUb2dnbGVzIGJpdCAyNworI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIERJTzI2CisvLworLy8gVG9nZ2xlcyBiaXQgMjYKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBESU8yNQorLy8KKy8vIFRvZ2dsZXMgYml0IDI1CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gRElPMjQKKy8vCisvLyBUb2dnbGVzIGJpdCAyNAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIERJTzIzCisvLworLy8gVG9nZ2xlcyBiaXQgMjMKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBESU8yMgorLy8KKy8vIFRvZ2dsZXMgYml0IDIyCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gRElPMjEKKy8vCisvLyBUb2dnbGVzIGJpdCAyMQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIERJTzIwCisvLworLy8gVG9nZ2xlcyBiaXQgMjAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBESU8xOQorLy8KKy8vIFRvZ2dsZXMgYml0IDE5CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gRElPMTgKKy8vCisvLyBUb2dnbGVzIGJpdCAxOAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIERJTzE3CisvLworLy8gVG9nZ2xlcyBiaXQgMTcKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBESU8xNgorLy8KKy8vIFRvZ2dsZXMgYml0IDE2CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gRElPMTUKKy8vCisvLyBUb2dnbGVzIGJpdCAxNQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIERJTzE0CisvLworLy8gVG9nZ2xlcyBiaXQgMTQKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBESU8xMworLy8KKy8vIFRvZ2dsZXMgYml0IDEzCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gRElPMTIKKy8vCisvLyBUb2dnbGVzIGJpdCAxMgorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIERJTzExCisvLworLy8gVG9nZ2xlcyBiaXQgMTEKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBESU8xMAorLy8KKy8vIFRvZ2dsZXMgYml0IDEwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gRElPOQorLy8KKy8vIFRvZ2dsZXMgYml0IDkKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU85X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBESU84CisvLworLy8gVG9nZ2xlcyBiaXQgOAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU84X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIERJTzcKKy8vCisvLyBUb2dnbGVzIGJpdCA3CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU83X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gRElPNgorLy8KKy8vIFRvZ2dsZXMgYml0IDYKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU82X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBESU81CisvLworLy8gVG9nZ2xlcyBiaXQgNQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU81X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIERJTzQKKy8vCisvLyBUb2dnbGVzIGJpdCA0CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU80X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gRElPMworLy8KKy8vIFRvZ2dsZXMgYml0IDMKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8zX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBESU8yCisvLworLy8gVG9nZ2xlcyBiaXQgMgorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIERJTzEKKy8vCisvLyBUb2dnbGVzIGJpdCAxCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRElPMAorLy8KKy8vIFRvZ2dsZXMgYml0IDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQSU9fT19ESU4zMV8wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gRElPMzEKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDMxCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8zMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8zMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gRElPMzAKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDMwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8zMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8zMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gRElPMjkKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDI5CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gRElPMjgKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDI4CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gRElPMjcKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDI3CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gRElPMjYKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDI2CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gRElPMjUKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDI1CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gRElPMjQKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDI0CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gRElPMjMKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDIzCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gRElPMjIKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDIyCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gRElPMjEKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDIxCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gRElPMjAKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDIwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gRElPMTkKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDE5CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gRElPMTgKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDE4CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gRElPMTcKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDE3CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gRElPMTYKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDE2CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gRElPMTUKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDE1CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gRElPMTQKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDE0CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gRElPMTMKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDEzCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gRElPMTIKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDEyCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gRElPMTEKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDExCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gRElPMTAKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDEwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gRElPOQorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gOQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU85X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIERJTzgKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDgKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU84X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBESU83CisvLworLy8gRGF0YSBpbnB1dCBmcm9tIERJTyA3CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBHUElPX0RJTjMxXzBfRElPN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU83X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gRElPNgorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gNgorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU82X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIERJTzUKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDUKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU81X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBESU80CisvLworLy8gRGF0YSBpbnB1dCBmcm9tIERJTyA0CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU80X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gRElPMworLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMworI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8zX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIERJTzIKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDIKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBESU8xCisvLworLy8gRGF0YSBpbnB1dCBmcm9tIERJTyAxCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRElPMAorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8wX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BJT19PX0RPRTMxXzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBESU8zMQorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDMxCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8zMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8zMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gRElPMzAKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAzMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8zMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIERJTzI5CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMjkKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBESU8yOAorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDI4CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gRElPMjcKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAyNworI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIERJTzI2CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMjYKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBESU8yNQorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDI1CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gRElPMjQKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAyNAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIERJTzIzCisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMjMKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBESU8yMgorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDIyCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzIyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gRElPMjEKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAyMQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzIxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIERJTzIwCisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMjAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBESU8xOQorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDE5CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gRElPMTgKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAxOAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIERJTzE3CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMTcKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBESU8xNgorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDE2CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gRElPMTUKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAxNQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIERJTzE0CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMTQKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBESU8xMworLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDEzCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gRElPMTIKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAxMgorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIERJTzExCisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMTEKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBESU8xMAorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDEwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gRElPOQorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDkKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU85X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBESU84CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gOAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU84X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIERJTzcKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyA3CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBHUElPX0RPRTMxXzBfRElPN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU83X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gRElPNgorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDYKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU82X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBESU81CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gNQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU81X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIERJTzQKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyA0CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU80X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gRElPMworLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDMKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8zX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBESU8yCisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMgorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIERJTzEKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAxCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRElPMAorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8wX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQSU9fT19FVkZMQUdTMzFfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIERJTzMxCisvLworLy8gRXZlbnQgZm9yIERJTyAzMQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8zMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIERJTzMwCisvLworLy8gRXZlbnQgZm9yIERJTyAzMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8zMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIERJTzI5CisvLworLy8gRXZlbnQgZm9yIERJTyAyOQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIERJTzI4CisvLworLy8gRXZlbnQgZm9yIERJTyAyOAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIERJTzI3CisvLworLy8gRXZlbnQgZm9yIERJTyAyNworI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIERJTzI2CisvLworLy8gRXZlbnQgZm9yIERJTyAyNgorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIERJTzI1CisvLworLy8gRXZlbnQgZm9yIERJTyAyNQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIERJTzI0CisvLworLy8gRXZlbnQgZm9yIERJTyAyNAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIERJTzIzCisvLworLy8gRXZlbnQgZm9yIERJTyAyMworI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIERJTzIyCisvLworLy8gRXZlbnQgZm9yIERJTyAyMgorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIERJTzIxCisvLworLy8gRXZlbnQgZm9yIERJTyAyMQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIERJTzIwCisvLworLy8gRXZlbnQgZm9yIERJTyAyMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIERJTzE5CisvLworLy8gRXZlbnQgZm9yIERJTyAxOQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIERJTzE4CisvLworLy8gRXZlbnQgZm9yIERJTyAxOAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIERJTzE3CisvLworLy8gRXZlbnQgZm9yIERJTyAxNworI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIERJTzE2CisvLworLy8gRXZlbnQgZm9yIERJTyAxNgorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIERJTzE1CisvLworLy8gRXZlbnQgZm9yIERJTyAxNQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIERJTzE0CisvLworLy8gRXZlbnQgZm9yIERJTyAxNAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIERJTzEzCisvLworLy8gRXZlbnQgZm9yIERJTyAxMworI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIERJTzEyCisvLworLy8gRXZlbnQgZm9yIERJTyAxMgorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIERJTzExCisvLworLy8gRXZlbnQgZm9yIERJTyAxMQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIERJTzEwCisvLworLy8gRXZlbnQgZm9yIERJTyAxMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIERJTzkKKy8vCisvLyBFdmVudCBmb3IgRElPIDkKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU85X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBESU84CisvLworLy8gRXZlbnQgZm9yIERJTyA4CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU84X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gRElPNworLy8KKy8vIEV2ZW50IGZvciBESU8gNworI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU83X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIERJTzYKKy8vCisvLyBFdmVudCBmb3IgRElPIDYKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU82X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBESU81CisvLworLy8gRXZlbnQgZm9yIERJTyA1CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU81X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gRElPNAorLy8KKy8vIEV2ZW50IGZvciBESU8gNAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU80X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIERJTzMKKy8vCisvLyBFdmVudCBmb3IgRElPIDMKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8zX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBESU8yCisvLworLy8gRXZlbnQgZm9yIERJTyAyCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gRElPMQorLy8KKy8vIEV2ZW50IGZvciBESU8gMQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIERJTzAKKy8vCisvLyBFdmVudCBmb3IgRElPIDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0dQSU9fXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfZ3B0LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19ncHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjgyYmExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfZ3B0LmgKQEAgLTAsMCArMSwxNjg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfZ3B0X2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0dQVF9IX18KKyNkZWZpbmUgX19IV19HUFRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gR1BUIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgR1BUX09fQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBUaW1lciBBIE1vZGUKKyNkZWZpbmUgR1BUX09fVEFNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBUaW1lciBCIE1vZGUKKyNkZWZpbmUgR1BUX09fVEJNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBDb250cm9sCisjZGVmaW5lIEdQVF9PX0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gU3luY2ggUmVnaXN0ZXIKKyNkZWZpbmUgR1BUX09fU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBJbnRlcnJ1cHQgTWFzaworI2RlZmluZSBHUFRfT19JTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIFJhdyBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIEdQVF9PX1JJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gTWFza2VkIEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgR1BUX09fTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBJbnRlcnJ1cHQgQ2xlYXIKKyNkZWZpbmUgR1BUX09fSUNMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBUaW1lciBBIEludGVydmFsIExvYWQgIFJlZ2lzdGVyCisjZGVmaW5lIEdQVF9PX1RBSUxSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8gVGltZXIgQiBJbnRlcnZhbCBMb2FkICBSZWdpc3RlcgorI2RlZmluZSBHUFRfT19UQklMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisKKy8vIFRpbWVyIEEgTWF0Y2ggUmVnaXN0ZXIKKyNkZWZpbmUgR1BUX09fVEFNQVRDSFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorCisvLyBUaW1lciBCIE1hdGNoIFJlZ2lzdGVyCisjZGVmaW5lIEdQVF9PX1RCTUFUQ0hSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKworLy8gVGltZXIgQSBQcmUtc2NhbGUKKyNkZWZpbmUgR1BUX09fVEFQUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorCisvLyBUaW1lciBCIFByZS1zY2FsZQorI2RlZmluZSBHUFRfT19UQlBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNDCisKKy8vIFRpbWVyIEEgUHJlLXNjYWxlIE1hdGNoCisjZGVmaW5lIEdQVF9PX1RBUE1SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKworLy8gVGltZXIgQiBQcmUtc2NhbGUgTWF0Y2gKKyNkZWZpbmUgR1BUX09fVEJQTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorCisvLyBUaW1lciBBIFJlZ2lzdGVyCisjZGVmaW5lIEdQVF9PX1RBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKworLy8gVGltZXIgQiBSZWdpc3RlcgorI2RlZmluZSBHUFRfT19UQlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRDCisKKy8vIFRpbWVyIEEgVmFsdWUKKyNkZWZpbmUgR1BUX09fVEFWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorCisvLyBUaW1lciBCIFZhbHVlCisjZGVmaW5lIEdQVF9PX1RCViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKworLy8gVGltZXIgQSBQcmUtc2NhbGUgU25hcC1zaG90CisjZGVmaW5lIEdQVF9PX1RBUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUMKKworLy8gVGltZXIgQiBQcmUtc2NhbGUgU25hcC1zaG90CisjZGVmaW5lIEdQVF9PX1RCUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKworLy8gVGltZXIgQSBQcmUtc2NhbGUgVmFsdWUKKyNkZWZpbmUgR1BUX09fVEFQViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAorCisvLyBUaW1lciBCIFByZS1zY2FsZSBWYWx1ZQorI2RlZmluZSBHUFRfT19UQlBWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY4CisKKy8vIERNQSBFdmVudAorI2RlZmluZSBHUFRfT19ETUFFViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisKKy8vIFBlcmlwaGVyYWwgVmVyc2lvbgorI2RlZmluZSBHUFRfT19WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkIwCisKKy8vIENvbWJpbmVkIENDUCBPdXRwdXQKKyNkZWZpbmUgR1BUX09fQU5EQ0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZCNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX0NGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsyOjBdIENGRworLy8KKy8vIEdQVCBDb25maWd1cmF0aW9uCisvLyAweDItIDB4MyAtIFJlc2VydmVkCisvLyAweDUtIDB4NyAtIFJlc2VydmVkCisvLyBFTlVNczoKKy8vIDE2QklUX1RJTUVSICAgICAgICAgICAgICAxNi1iaXQgdGltZXIgY29uZmlndXJhdGlvbi4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmUgZm9yIHR3byAxNi1iaXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcnMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQWxzbyBzZWUgVEFNUi5UQU1SIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFRCTVIuVEJNUi4KKy8vIDMyQklUX1RJTUVSICAgICAgICAgICAgICAzMi1iaXQgdGltZXIgY29uZmlndXJhdGlvbgorI2RlZmluZSBHUFRfQ0ZHX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdQVF9DRkdfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgR1BUX0NGR19DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfQ0ZHX0NGR18xNkJJVF9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9DRkdfQ0ZHXzMyQklUX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQU1SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsxNToxM10gVENBQ1QKKy8vCisvLyBUaW1lciBDb21wYXJlIEFjdGlvbiBTZWxlY3QKKy8vIEVOVU1zOgorLy8gQ0xSU0VUX09OX1RPICAgICAgICAgICAgIENsZWFyIENDUCBvdXRwdXQgcGluIGltbWVkaWF0ZWx5IGFuZCBzZXQgb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lLU91dAorLy8gU0VUQ0xSX09OX1RPICAgICAgICAgICAgIFNldCBDQ1Agb3V0cHV0IHBpbiBpbW1lZGlhdGVseSBhbmQgY2xlYXIgb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lLU91dAorLy8gQ0xSVE9HX09OX1RPICAgICAgICAgICAgIENsZWFyIENDUCBvdXRwdXQgcGluIGltbWVkaWF0ZWx5IGFuZCB0b2dnbGUgb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lLU91dAorLy8gU0VUVE9HX09OX1RPICAgICAgICAgICAgIFNldCBDQ1Agb3V0cHV0IHBpbiBpbW1lZGlhdGVseSBhbmQgdG9nZ2xlIG9uCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZS1PdXQKKy8vIFNFVF9PTl9UTyAgICAgICAgICAgICAgICBTZXQgQ0NQIG91dHB1dCBwaW4gb24gVGltZS1PdXQKKy8vIENMUl9PTl9UTyAgICAgICAgICAgICAgICBDbGVhciBDQ1Agb3V0cHV0IHBpbiBvbiBUaW1lLU91dAorLy8gVE9HX09OX1RPICAgICAgICAgICAgICAgIFRvZ2dsZSBTdGF0ZSBvbiBUaW1lLU91dAorLy8gRElTX0NNUCAgICAgICAgICAgICAgICAgIERpc2FibGUgY29tcGFyZSBvcGVyYXRpb25zCisjZGVmaW5lIEdQVF9UQU1SX1RDQUNUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgR1BUX1RBTVJfVENBQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRTAwMAorI2RlZmluZSBHUFRfVEFNUl9UQ0FDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQVF9UQU1SX1RDQUNUX0NMUlNFVF9PTl9UTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEUwMDAKKyNkZWZpbmUgR1BUX1RBTVJfVENBQ1RfU0VUQ0xSX09OX1RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwQzAwMAorI2RlZmluZSBHUFRfVEFNUl9UQ0FDVF9DTFJUT0dfT05fVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBBMDAwCisjZGVmaW5lIEdQVF9UQU1SX1RDQUNUX1NFVFRPR19PTl9UTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR1BUX1RBTVJfVENBQ1RfU0VUX09OX1RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBHUFRfVEFNUl9UQ0FDVF9DTFJfT05fVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQVF9UQU1SX1RDQUNUX1RPR19PTl9UTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BUX1RBTVJfVENBQ1RfRElTX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzEyXSBUQUNJTlRECisvLworLy8gT25lLVNob3QvUGVyaW9kaWMgSW50ZXJydXB0IERpc2FibGUKKy8vIEVOVU1zOgorLy8gRElTX1RPX0lOVFIgICAgICAgICAgICAgIFRpbWUtb3V0IGludGVycnVwdCBhcmUgZGlzYWJsZWQKKy8vIEVOX1RPX0lOVFIgICAgICAgICAgICAgICBUaW1lLW91dCBpbnRlcnJ1cHQgZnVuY3Rpb24gYXMgbm9ybWFsCisjZGVmaW5lIEdQVF9UQU1SX1RBQ0lOVEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFDSU5URF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHUFRfVEFNUl9UQUNJTlREX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQVF9UQU1SX1RBQ0lOVERfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR1BUX1RBTVJfVEFDSU5URF9ESVNfVE9fSU5UUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUFRfVEFNUl9UQUNJTlREX0VOX1RPX0lOVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTFdIFRBUExPCisvLworLy8gR1BUTSBUaW1lciBBIFBXTSBMZWdhY3kgT3BlcmF0aW9uCisvLworLy8gMCAgTGVnYWN5IG9wZXJhdGlvbiB3aXRoIENDUCBwaW4gZHJpdmVuIExvdyB3aGVuIHRoZSBUQUlMUgorLy8gcmVnaXN0ZXIgaXMgcmVsb2FkZWQgYWZ0ZXIgdGhlIHRpbWVyIHJlYWNoZXMgMC4KKy8vCisvLyAxIENDUCBpcyBkcml2ZW4gSGlnaCB3aGVuIHRoZSBUQUlMUiAgcmVnaXN0ZXIgaXMgcmVsb2FkZWQgYWZ0ZXIgdGhlIHRpbWVyCisvLyByZWFjaGVzIDAuCisvLworLy8gVGhpcyBiaXQgaXMgb25seSB2YWxpZCBpbiBQV00gbW9kZS4KKy8vIEVOVU1zOgorLy8gQ0NQX09OX1RPICAgICAgICAgICAgICAgIENDUCBvdXRwdXQgcGluIGlzIHNldCB0byAxIG9uIHRpbWUtb3V0CisvLyBMRUdBQ1kgICAgICAgICAgICAgICAgICAgTGVnYWN5IG9wZXJhdGlvbgorI2RlZmluZSBHUFRfVEFNUl9UQVBMTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9UQU1SX1RBUExPX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BUX1RBTVJfVEFQTE9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUFRfVEFNUl9UQVBMT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdQVF9UQU1SX1RBUExPX0NDUF9PTl9UTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFQTE9fTEVHQUNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzEwXSBUQU1SU1UKKy8vCisvLyBUaW1lciBBIE1hdGNoIFJlZ2lzdGVyIFVwZGF0ZSBtb2RlCisvLworLy8gVGhpcyBiaXQgZGVmaW5lcyB3aGVuIHRoZSBUQU1BVENIUiBhbmQgVEFQUiByZWdpc3RlcnMgYXJlIHVwZGF0ZWQuCisvLworLy8gSWYgdGhlIHRpbWVyIGlzIGRpc2FibGVkIChDVEwuVEFFTiA9IDApIHdoZW4gdGhpcyBiaXQgaXMgc2V0LCBUQU1BVENIUiBhbmQKKy8vIFRBUFIgYXJlIHVwZGF0ZWQgd2hlbiB0aGUgdGltZXIgaXMgZW5hYmxlZC4KKy8vIElmIHRoZSB0aW1lciBpcyBzdGFsbGVkIChDVEwuVEFTVEFMTCA9IDEpIHdoZW4gdGhpcyBiaXQgaXMgc2V0LCBUQU1BVENIUiBhbmQKKy8vIFRBUFIgYXJlIHVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgYml0LgorLy8gRU5VTXM6CisvLyBUT1VQREFURSAgICAgICAgICAgICAgICAgVXBkYXRlIFRBTUFUQ0hSIGFuZCBUQVBSLCBpZiB1c2VkLCBvbiB0aGUgbmV4dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUtb3V0LgorLy8gQ1lDTEVVUERBVEUgICAgICAgICAgICAgIFVwZGF0ZSBUQU1BVENIUiBhbmQgVEFQUiwgaWYgdXNlZCwgb24gdGhlIG5leHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZS4KKyNkZWZpbmUgR1BUX1RBTVJfVEFNUlNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfVEFNUl9UQU1SU1VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQVF9UQU1SX1RBTVJTVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFNUlNVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBHUFRfVEFNUl9UQU1SU1VfVE9VUERBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQVF9UQU1SX1RBTVJTVV9DWUNMRVVQREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOV0gVEFQV01JRQorLy8KKy8vIEdQVE0gVGltZXIgQSBQV00gSW50ZXJydXB0IEVuYWJsZQorLy8gVGhpcyBiaXQgZW5hYmxlcyBpbnRlcnJ1cHRzIGluIFBXTSBtb2RlIG9uIHJpc2luZywgZmFsbGluZywgb3IgYm90aCBlZGdlcyBvZgorLy8gdGhlIENDUCBvdXRwdXQsIGFzIGRlZmluZWQgYnkgdGhlIENUTC5UQUVWRU5UCisvLyBJbiBhZGRpdGlvbiwgd2hlbiB0aGlzIGJpdCBpcyBzZXQgYW5kIGEgY2FwdHVyZSBldmVudCBvY2N1cnMsIFRpbWVyIEEKKy8vIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIHRyaWdnZXJzIHRvIHRoZSBETUEgaWYgdGhlIHRyaWdnZXIgY2FwYWJpbGl0eSBpcworLy8gZW5hYmxlZCBieSBzZXR0aW5nIHRoZSBDVEwuVEFPVEUgYml0IGFuZCB0aGUgRE1BRVYuQ0FFRE1BRU4gYml0CisvLyByZXNwZWN0aXZlbHkuCisvLworLy8gMCBDYXB0dXJlIGV2ZW50IGludGVycnVwdCBpcyBkaXNhYmxlZC4KKy8vIDEgQ2FwdHVyZSBldmVudCBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKy8vIFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgaW4gUFdNIG1vZGUuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgaXMgZW5hYmxlZC4gIFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBQV00gbW9kZS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisjZGVmaW5lIEdQVF9UQU1SX1RBUFdNSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFQV01JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUFRfVEFNUl9UQVBXTUlFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9UQU1SX1RBUFdNSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgR1BUX1RBTVJfVEFQV01JRV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfVEFNUl9UQVBXTUlFX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzhdIFRBSUxECisvLworLy8gR1BUIFRpbWVyIEEgUFdNIEludGVydmFsIExvYWQgV3JpdGUKKy8vIEVOVU1zOgorLy8gVE9VUERBVEUgICAgICAgICAgICAgICAgIFVwZGF0ZSB0aGUgVEFSIHJlZ2lzdGVyIHdpdGggdGhlIHZhbHVlIGluIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFRBSUxSIHJlZ2lzdGVyIG9uIHRoZSBuZXh0IHRpbWVvdXQuIElmIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNjYWxlciBpcyB1c2VkLCB1cGRhdGUgdGhlIFRBUFMgcmVnaXN0ZXIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSB2YWx1ZSBpbiB0aGUgVEFQUiByZWdpc3RlciBvbiB0aGUgbmV4dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQuCisvLyBDWUNMRVVQREFURSAgICAgICAgICAgICAgVXBkYXRlIHRoZSBUQVIgcmVnaXN0ZXIgd2l0aCB0aGUgdmFsdWUgaW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVEFJTFIgcmVnaXN0ZXIgb24gdGhlIG5leHQgY2xvY2sgY3ljbGUuIElmIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHByZS1zY2FsZXIgaXMgdXNlZCwgdXBkYXRlIHRoZSBUQVBTIHJlZ2lzdGVyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgdmFsdWUgaW4gdGhlIFRBUFIgcmVnaXN0ZXIgb24gdGhlIG5leHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBjeWNsZS4KKyNkZWZpbmUgR1BUX1RBTVJfVEFJTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfVEFNUl9UQUlMRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9UQU1SX1RBSUxEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFJTERfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfVEFNUl9UQUlMRF9UT1VQREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9UQU1SX1RBSUxEX0NZQ0xFVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbN10gVEFTTkFQUworLy8KKy8vIEdQVCBUaW1lciBBIFNuYXAtU2hvdCBNb2RlCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJZiBUaW1lciBBIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIHBlcmlvZGljIG1vZGUsIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCBmcmVlLXJ1bm5pbmcgdmFsdWUgb2YgVGltZXIgQSBpcyBsb2FkZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgdGltZS1vdXQgZXZlbnQgaW50byB0aGUgR1BUIFRpbWVyIEEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAoVEFSKSByZWdpc3Rlci4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBTbmFwLXNob3QgbW9kZSBpcyBkaXNhYmxlZC4KKyNkZWZpbmUgR1BUX1RBTVJfVEFTTkFQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUFRfVEFNUl9UQVNOQVBTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEdQVF9UQU1SX1RBU05BUFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BUX1RBTVJfVEFTTkFQU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBHUFRfVEFNUl9UQVNOQVBTX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQVF9UQU1SX1RBU05BUFNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gVEFXT1QKKy8vCisvLyBHUFQgVGltZXIgQSBXYWl0LU9uLVRyaWdnZXIKKy8vIEVOVU1zOgorLy8gV0FJVCAgICAgICAgICAgICAgICAgICAgIElmIFRpbWVyIEEgaXMgZW5hYmxlZCAoQ1RMLlRBRU4gPSAxKSwgVGltZXIgQSBkb2VzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGJlZ2luIGNvdW50aW5nIHVudGlsIGl0IHJlY2VpdmVzIGEgdHJpZ2dlcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHRpbWVyIGluIHRoZSBwcmV2aW91cyBwb3NpdGlvbiBpbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkYWlzeSBjaGFpbi4gVGhpcyBiaXQgbXVzdCBiZSBjbGVhciBmb3IgR1BUCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlIDAsIFRpbWVyIEEuIFRoaXMgZnVuY3Rpb24gaXMgdmFsaWQgZm9yCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb25lLXNob3QsIHBlcmlvZGljLCBhbmQgUFdNIG1vZGVzCisvLyBOT1dBSVQgICAgICAgICAgICAgICAgICAgVGltZXIgQSBiZWdpbnMgY291bnRpbmcgYXMgc29vbiBhcyBpdCBpcyBlbmFibGVkLgorI2RlZmluZSBHUFRfVEFNUl9UQVdPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQVF9UQU1SX1RBV09UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgR1BUX1RBTVJfVEFXT1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUFRfVEFNUl9UQVdPVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEdQVF9UQU1SX1RBV09UX1dBSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFXT1RfTk9XQUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs1XSBUQU1JRQorLy8KKy8vIEdQVCBUaW1lciBBIE1hdGNoIEludGVycnVwdCBFbmFibGUKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgd2hlbiB0aGUgbWF0Y2ggdmFsdWUgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBUQU1BVENIUiBpcyByZWFjaGVkIGluIHRoZSBvbmUtc2hvdCBhbmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJpb2RpYyBtb2Rlcy4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBUaGUgbWF0Y2ggaW50ZXJydXB0IGlzIGRpc2FibGVkIGZvciBtYXRjaCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBvdXRwdXQgdHJpZ2dlcnMgb24gbWF0Y2ggZXZlbnRzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHByZXZlbnRlZC4KKyNkZWZpbmUgR1BUX1RBTVJfVEFNSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUFRfVEFNUl9UQU1JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEdQVF9UQU1SX1RBTUlFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BUX1RBTVJfVEFNSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBHUFRfVEFNUl9UQU1JRV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQVF9UQU1SX1RBTUlFX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNF0gVEFDRElSCisvLworLy8gR1BUIFRpbWVyIEEgQ291bnQgRGlyZWN0aW9uCisvLyBFTlVNczoKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGltZXIgY291bnRzIHVwLiBXaGVuIGNvdW50aW5nIHVwLCB0aGUgdGltZXIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHMgZnJvbSBhIHZhbHVlIG9mIDB4MC4KKy8vIERPV04gICAgICAgICAgICAgICAgICAgICBUaGUgdGltZXIgY291bnRzIGRvd24uCisjZGVmaW5lIEdQVF9UQU1SX1RBQ0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX1RBTVJfVEFDRElSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUFRfVEFNUl9UQUNESVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9UQU1SX1RBQ0RJUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR1BUX1RBTVJfVEFDRElSX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfVEFNUl9UQUNESVJfRE9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzNdIFRBQU1TCisvLworLy8gR1BUIFRpbWVyIEEgQWx0ZXJuYXRlIE1vZGUKKy8vCisvLyBOb3RlOiBUbyBlbmFibGUgUFdNIG1vZGUsIHlvdSBtdXN0IGFsc28gY2xlYXIgVEFDTSBhbmQgdGhlbiBjb25maWd1cmUgVEFNUgorLy8gZmllbGQgdG8gMHgyLgorLy8gRU5VTXM6CisvLyBQV00gICAgICAgICAgICAgICAgICAgICAgUFdNIG1vZGUgaXMgZW5hYmxlZAorLy8gQ0FQX0NPTVAgICAgICAgICAgICAgICAgIENhcHR1cmUvQ29tcGFyZSBtb2RlIGlzIGVuYWJsZWQuCisjZGVmaW5lIEdQVF9UQU1SX1RBQU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BUX1RBTVJfVEFBTVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBHUFRfVEFNUl9UQUFNU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQVF9UQU1SX1RBQU1TX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgR1BUX1RBTVJfVEFBTVNfUFdNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUFRfVEFNUl9UQUFNU19DQVBfQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzJdIFRBQ00KKy8vCisvLyBHUFQgVGltZXIgQSBDYXB0dXJlIE1vZGUKKy8vIEVOVU1zOgorLy8gRURHVElNRSAgICAgICAgICAgICAgICAgIEVkZ2UtVGltZSBtb2RlCisvLyBFREdDTlQgICAgICAgICAgICAgICAgICAgRWRnZS1Db3VudCBtb2RlCisjZGVmaW5lIEdQVF9UQU1SX1RBQ00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX1RBTVJfVEFDTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfVEFNUl9UQUNNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9UQU1SX1RBQ01fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX1RBTVJfVEFDTV9FREdUSU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUFRfVEFNUl9UQUNNX0VER0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFsxOjBdIFRBTVIKKy8vCisvLyBHUFQgVGltZXIgQSBNb2RlCisvLworLy8gMHgwIFJlc2VydmVkCisvLyAweDEgT25lLVNob3QgVGltZXIgbW9kZQorLy8gMHgyIFBlcmlvZGljIFRpbWVyIG1vZGUKKy8vIDB4MyBDYXB0dXJlIG1vZGUKKy8vIFRoZSBUaW1lciBtb2RlIGlzIGJhc2VkIG9uIHRoZSB0aW1lciBjb25maWd1cmF0aW9uIGRlZmluZWQgYnkgYml0cyAyOjAgaW4KKy8vIHRoZSBDRkcgcmVnaXN0ZXIKKy8vIEVOVU1zOgorLy8gQ0FQVFVSRSAgICAgICAgICAgICAgICAgIENhcHR1cmUgbW9kZQorLy8gUEVSSU9ESUMgICAgICAgICAgICAgICAgIFBlcmlvZGljIFRpbWVyIG1vZGUKKy8vIE9ORV9TSE9UICAgICAgICAgICAgICAgICBPbmUtU2hvdCBUaW1lciBtb2RlCisjZGVmaW5lIEdQVF9UQU1SX1RBTVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX1RBTVJfVEFNUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBHUFRfVEFNUl9UQU1SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQVF9UQU1SX1RBTVJfQ0FQVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgR1BUX1RBTVJfVEFNUl9QRVJJT0RJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfVEFNUl9UQU1SX09ORV9TSE9UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEJNUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTU6MTNdIFRDQUNUCisvLworLy8gVGltZXIgQ29tcGFyZSBBY3Rpb24gU2VsZWN0CisvLyBFTlVNczoKKy8vIENMUlNFVF9PTl9UTyAgICAgICAgICAgICBDbGVhciBDQ1Agb3V0cHV0IHBpbiBpbW1lZGlhdGVseSBhbmQgc2V0IG9uCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZS1PdXQKKy8vIFNFVENMUl9PTl9UTyAgICAgICAgICAgICBTZXQgQ0NQIG91dHB1dCBwaW4gaW1tZWRpYXRlbHkgYW5kIGNsZWFyIG9uCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZS1PdXQKKy8vIENMUlRPR19PTl9UTyAgICAgICAgICAgICBDbGVhciBDQ1Agb3V0cHV0IHBpbiBpbW1lZGlhdGVseSBhbmQgdG9nZ2xlIG9uCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZS1PdXQKKy8vIFNFVFRPR19PTl9UTyAgICAgICAgICAgICBTZXQgQ0NQIG91dHB1dCBwaW4gaW1tZWRpYXRlbHkgYW5kIHRvZ2dsZSBvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWUtT3V0CisvLyBTRVRfT05fVE8gICAgICAgICAgICAgICAgU2V0IENDUCBvdXRwdXQgcGluIG9uIFRpbWUtT3V0CisvLyBDTFJfT05fVE8gICAgICAgICAgICAgICAgQ2xlYXIgQ0NQIG91dHB1dCBwaW4gb24gVGltZS1PdXQKKy8vIFRPR19PTl9UTyAgICAgICAgICAgICAgICBUb2dnbGUgU3RhdGUgb24gVGltZS1PdXQKKy8vIERJU19DTVAgICAgICAgICAgICAgICAgICBEaXNhYmxlIGNvbXBhcmUgb3BlcmF0aW9ucworI2RlZmluZSBHUFRfVEJNUl9UQ0FDVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdQVF9UQk1SX1RDQUNUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEUwMDAKKyNkZWZpbmUgR1BUX1RCTVJfVENBQ1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBHUFRfVEJNUl9UQ0FDVF9DTFJTRVRfT05fVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBFMDAwCisjZGVmaW5lIEdQVF9UQk1SX1RDQUNUX1NFVENMUl9PTl9UTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEMwMDAKKyNkZWZpbmUgR1BUX1RCTVJfVENBQ1RfQ0xSVE9HX09OX1RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwQTAwMAorI2RlZmluZSBHUFRfVEJNUl9UQ0FDVF9TRVRUT0dfT05fVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdQVF9UQk1SX1RDQUNUX1NFVF9PTl9UTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgR1BUX1RCTVJfVENBQ1RfQ0xSX09OX1RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUFRfVEJNUl9UQ0FDVF9UT0dfT05fVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQVF9UQk1SX1RDQUNUX0RJU19DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gVEJDSU5URAorLy8KKy8vIE9uZS1TaG90L1BlcmlvZGljIEludGVycnVwdCBNb2RlCisvLyBFTlVNczoKKy8vIERJU19UT19JTlRSICAgICAgICAgICAgICBNYXNrIFRpbWUtT3V0IEludGVycnVwdAorLy8gRU5fVE9fSU5UUiAgICAgICAgICAgICAgIE5vcm1hbCBUaW1lLU91dCBJbnRlcnJ1cHQKKyNkZWZpbmUgR1BUX1RCTVJfVEJDSU5URCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUFRfVEJNUl9UQkNJTlREX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdQVF9UQk1SX1RCQ0lOVERfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJDSU5URF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHUFRfVEJNUl9UQkNJTlREX0RJU19UT19JTlRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQVF9UQk1SX1RCQ0lOVERfRU5fVE9fSU5UUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxMV0gVEJQTE8KKy8vCisvLyBHUFRNIFRpbWVyIEIgUFdNIExlZ2FjeSBPcGVyYXRpb24KKy8vCisvLyAwICBMZWdhY3kgb3BlcmF0aW9uIHdpdGggQ0NQIHBpbiBkcml2ZW4gTG93IHdoZW4gdGhlIFRCSUxSCisvLyByZWdpc3RlciBpcyByZWxvYWRlZCBhZnRlciB0aGUgdGltZXIgcmVhY2hlcyAwLgorLy8KKy8vIDEgQ0NQIGlzIGRyaXZlbiBIaWdoIHdoZW4gdGhlIFRCSUxSICByZWdpc3RlciBpcyByZWxvYWRlZCBhZnRlciB0aGUgdGltZXIKKy8vIHJlYWNoZXMgMC4KKy8vCisvLyBUaGlzIGJpdCBpcyBvbmx5IHZhbGlkIGluIFBXTSBtb2RlLgorLy8gRU5VTXM6CisvLyBDQ1BfT05fVE8gICAgICAgICAgICAgICAgQ0NQIG91dHB1dCBwaW4gaXMgc2V0IHRvIDEgb24gdGltZS1vdXQKKy8vIExFR0FDWSAgICAgICAgICAgICAgICAgICBMZWdhY3kgb3BlcmF0aW9uCisjZGVmaW5lIEdQVF9UQk1SX1RCUExPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJQTE9fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBHUFRfVEJNUl9UQlBMT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9UQk1SX1RCUExPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BUX1RCTVJfVEJQTE9fQ0NQX09OX1RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUFRfVEJNUl9UQlBMT19MRUdBQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTBdIFRCTVJTVQorLy8KKy8vIFRpbWVyIEIgTWF0Y2ggUmVnaXN0ZXIgVXBkYXRlIG1vZGUKKy8vCisvLyBUaGlzIGJpdCBkZWZpbmVzIHdoZW4gdGhlIFRCTUFUQ0hSIGFuZCBUQlBSIHJlZ2lzdGVycyBhcmUgdXBkYXRlZAorLy8KKy8vIElmIHRoZSB0aW1lciBpcyBkaXNhYmxlZCAoQ1RMLlRCRU4gaXMgY2xlYXIpIHdoZW4gdGhpcyBiaXQgaXMgc2V0LCBUQk1BVENIUgorLy8gYW5kIFRCUFIgYXJlIHVwZGF0ZWQgd2hlbiB0aGUgdGltZXIgaXMgZW5hYmxlZC4KKy8vIElmIHRoZSB0aW1lciBpcyBzdGFsbGVkIChDVEwuVEJTVEFMTCBpcyBzZXQpIHdoZW4gdGhpcyBiaXQgaXMgc2V0LCBUQk1BVENIUgorLy8gYW5kIFRCUFIgYXJlIHVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgYml0LgorLy8gRU5VTXM6CisvLyBUT1VQREFURSAgICAgICAgICAgICAgICAgVXBkYXRlIHRoZSBUQk1BVENIUiBhbmQgdGhlIFRCUFIsIGlmIHVzZWQgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCB0aW1lLW91dC4KKy8vIENZQ0xFVVBEQVRFICAgICAgICAgICAgICBVcGRhdGUgVEJNQVRDSFIgYW5kIFRCUFIsIGlmIHVzZWQgb24gdGhlIG5leHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZS4KKyNkZWZpbmUgR1BUX1RCTVJfVEJNUlNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfVEJNUl9UQk1SU1VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQVF9UQk1SX1RCTVJTVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJNUlNVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBHUFRfVEJNUl9UQk1SU1VfVE9VUERBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQVF9UQk1SX1RCTVJTVV9DWUNMRVVQREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOV0gVEJQV01JRQorLy8KKy8vIEdQVE0gVGltZXIgQiBQV00gSW50ZXJydXB0IEVuYWJsZQorLy8gVGhpcyBiaXQgZW5hYmxlcyBpbnRlcnJ1cHRzIGluIFBXTSBtb2RlIG9uIHJpc2luZywgZmFsbGluZywgb3IgYm90aCBlZGdlcyBvZgorLy8gdGhlIENDUCBvdXRwdXQsIGFzIGRlZmluZWQgYnkgdGhlIENUTC5UQkVWRU5UCisvLyBJbiBhZGRpdGlvbiwgd2hlbiB0aGlzIGJpdCBpcyBzZXQgYW5kIGEgY2FwdHVyZSBldmVudCBvY2N1cnMsIFRpbWVyIEEKKy8vIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIHRyaWdnZXJzIHRvIHRoZSBETUEgaWYgdGhlIHRyaWdnZXIgY2FwYWJpbGl0eSBpcworLy8gZW5hYmxlZCBieSBzZXR0aW5nIHRoZSBDVEwuVEJPVEUgYml0IGFuZCB0aGUgRE1BRVYuQ0JFRE1BRU4gYml0CisvLyByZXNwZWN0aXZlbHkuCisvLworLy8gMCBDYXB0dXJlIGV2ZW50IGludGVycnVwdCBpcyBkaXNhYmxlZC4KKy8vIDEgQ2FwdHVyZSBldmVudCBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKy8vIFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgaW4gUFdNIG1vZGUuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgaXMgZW5hYmxlZC4gIFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBQV00gbW9kZS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisjZGVmaW5lIEdQVF9UQk1SX1RCUFdNSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJQV01JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUFRfVEJNUl9UQlBXTUlFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9UQk1SX1RCUFdNSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgR1BUX1RCTVJfVEJQV01JRV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfVEJNUl9UQlBXTUlFX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzhdIFRCSUxECisvLworLy8gR1BUIFRpbWVyIEIgUFdNIEludGVydmFsIExvYWQgV3JpdGUKKy8vIEVOVU1zOgorLy8gVE9VUERBVEUgICAgICAgICAgICAgICAgIFVwZGF0ZSB0aGUgVEJSIHJlZ2lzdGVyIHdpdGggdGhlIHZhbHVlIGluIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFRCSUxSIHJlZ2lzdGVyIG9uIHRoZSBuZXh0IHRpbWVvdXQuIElmIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNjYWxlciBpcyB1c2VkLCB1cGRhdGUgdGhlIFRCUFMgcmVnaXN0ZXIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSB2YWx1ZSBpbiB0aGUgVEJQUiByZWdpc3RlciBvbiB0aGUgbmV4dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQuCisvLyBDWUNMRVVQREFURSAgICAgICAgICAgICAgVXBkYXRlIHRoZSBUQlIgcmVnaXN0ZXIgd2l0aCB0aGUgdmFsdWUgaW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVEJJTFIgcmVnaXN0ZXIgb24gdGhlIG5leHQgY2xvY2sgY3ljbGUuIElmIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNjYWxlciBpcyB1c2VkLCB1cGRhdGUgdGhlIFRCUFMgcmVnaXN0ZXIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSB2YWx1ZSBpbiB0aGUgVEJQUiByZWdpc3RlciBvbiB0aGUgbmV4dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQuCisjZGVmaW5lIEdQVF9UQk1SX1RCSUxEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJJTERfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfVEJNUl9UQklMRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9UQk1SX1RCSUxEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX1RCTVJfVEJJTERfVE9VUERBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfVEJNUl9UQklMRF9DWUNMRVVQREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzddIFRCU05BUFMKKy8vCisvLyBHUFQgVGltZXIgQiBTbmFwLVNob3QgTW9kZQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSWYgVGltZXIgQiBpcyBjb25maWd1cmVkIGluIHRoZSBwZXJpb2RpYyBtb2RlCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgU25hcC1zaG90IG1vZGUgaXMgZGlzYWJsZWQuCisjZGVmaW5lIEdQVF9UQk1SX1RCU05BUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BUX1RCTVJfVEJTTkFQU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBHUFRfVEJNUl9UQlNOQVBTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQVF9UQk1SX1RCU05BUFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgR1BUX1RCTVJfVEJTTkFQU19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUFRfVEJNUl9UQlNOQVBTX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIFRCV09UCisvLworLy8gR1BUIFRpbWVyIEIgV2FpdC1Pbi1UcmlnZ2VyCisvLyBFTlVNczoKKy8vIFdBSVQgICAgICAgICAgICAgICAgICAgICBJZiBUaW1lciBCIGlzIGVuYWJsZWQgKENUTC5UQkVOIGlzIHNldCksIFRpbWVyIEIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBiZWdpbiBjb3VudGluZyB1bnRpbCBpdCByZWNlaXZlcyBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciBmcm9tIHRoZSB0aW1lciBpbiB0aGUgcHJldmlvdXMgcG9zaXRpb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZGFpc3kgY2hhaW4uIFRoaXMgZnVuY3Rpb24gaXMgdmFsaWQgZm9yCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb25lLXNob3QsIHBlcmlvZGljLCBhbmQgUFdNIG1vZGVzCisvLyBOT1dBSVQgICAgICAgICAgICAgICAgICAgVGltZXIgQiBiZWdpbnMgY291bnRpbmcgYXMgc29vbiBhcyBpdCBpcyBlbmFibGVkLgorI2RlZmluZSBHUFRfVEJNUl9UQldPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQVF9UQk1SX1RCV09UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgR1BUX1RCTVJfVEJXT1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUFRfVEJNUl9UQldPVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEdQVF9UQk1SX1RCV09UX1dBSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJXT1RfTk9XQUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs1XSBUQk1JRQorLy8KKy8vIEdQVCBUaW1lciBCIE1hdGNoIEludGVycnVwdCBFbmFibGUuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBBbiBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIG1hdGNoIHZhbHVlIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFRCTUFUQ0hSIHJlZ2lzdGVyIGlzIHJlYWNoZWQgaW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb25lLXNob3QgYW5kIHBlcmlvZGljIG1vZGVzLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRjaCBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgZm9yIG1hdGNoIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIG91dHB1dCB0cmlnZ2VycyBvbiBtYXRjaCBldmVudHMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgcHJldmVudGVkLgorI2RlZmluZSBHUFRfVEJNUl9UQk1JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQVF9UQk1SX1RCTUlFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BUX1RCTVJfVEJNSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUFRfVEJNUl9UQk1JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEdQVF9UQk1SX1RCTUlFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BUX1RCTVJfVEJNSUVfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs0XSBUQkNESVIKKy8vCisvLyBncmVwCisvLyBFTlVNczoKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGltZXIgY291bnRzIHVwLiBXaGVuIGNvdW50aW5nIHVwLCB0aGUgdGltZXIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHMgZnJvbSBhIHZhbHVlIG9mIDB4MC4KKy8vIERPV04gICAgICAgICAgICAgICAgICAgICBUaGUgdGltZXIgY291bnRzIGRvd24uCisjZGVmaW5lIEdQVF9UQk1SX1RCQ0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX1RCTVJfVEJDRElSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUFRfVEJNUl9UQkNESVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9UQk1SX1RCQ0RJUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR1BUX1RCTVJfVEJDRElSX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfVEJNUl9UQkNESVJfRE9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzNdIFRCQU1TCisvLworLy8gR1BUIFRpbWVyIEIgQWx0ZXJuYXRlIE1vZGUKKy8vCisvLyBOb3RlOiBUbyBlbmFibGUgUFdNIG1vZGUsIHlvdSBtdXN0IGFsc28gY2xlYXIgVEJDTSBiaXQgYW5kIGNvbmZpZ3VyZSBUQk1SCisvLyBmaWVsZCB0byAweDIuCisvLyBFTlVNczoKKy8vIFBXTSAgICAgICAgICAgICAgICAgICAgICBQV00gbW9kZSBpcyBlbmFibGVkCisvLyBDQVBfQ09NUCAgICAgICAgICAgICAgICAgQ2FwdHVyZS9Db21wYXJlIG1vZGUgaXMgZW5hYmxlZC4KKyNkZWZpbmUgR1BUX1RCTVJfVEJBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUFRfVEJNUl9UQkFNU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdQVF9UQk1SX1RCQU1TX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BUX1RCTVJfVEJBTVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBHUFRfVEJNUl9UQkFNU19QV00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQVF9UQk1SX1RCQU1TX0NBUF9DT01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMl0gVEJDTQorLy8KKy8vIEdQVCBUaW1lciBCIENhcHR1cmUgTW9kZQorLy8gRU5VTXM6CisvLyBFREdUSU1FICAgICAgICAgICAgICAgICAgRWRnZS1UaW1lIG1vZGUKKy8vIEVER0NOVCAgICAgICAgICAgICAgICAgICBFZGdlLUNvdW50IG1vZGUKKyNkZWZpbmUgR1BUX1RCTVJfVEJDTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUFRfVEJNUl9UQkNNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9UQk1SX1RCQ01fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX1RCTVJfVEJDTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfVEJNUl9UQkNNX0VER1RJTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9UQk1SX1RCQ01fRURHQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzE6MF0gVEJNUgorLy8KKy8vIEdQVCBUaW1lciBCIE1vZGUKKy8vCisvLyAweDAgUmVzZXJ2ZWQKKy8vIDB4MSBPbmUtU2hvdCBUaW1lciBtb2RlCisvLyAweDIgUGVyaW9kaWMgVGltZXIgbW9kZQorLy8gMHgzIENhcHR1cmUgbW9kZQorLy8gVGhlIFRpbWVyIG1vZGUgaXMgYmFzZWQgb24gdGhlIHRpbWVyIGNvbmZpZ3VyYXRpb24gZGVmaW5lZCBieSBiaXRzIDI6MCBpbgorLy8gdGhlIENGRyByZWdpc3RlcgorLy8gRU5VTXM6CisvLyBDQVBUVVJFICAgICAgICAgICAgICAgICAgQ2FwdHVyZSBtb2RlCisvLyBQRVJJT0RJQyAgICAgICAgICAgICAgICAgUGVyaW9kaWMgVGltZXIgbW9kZQorLy8gT05FX1NIT1QgICAgICAgICAgICAgICAgIE9uZS1TaG90IFRpbWVyIG1vZGUKKyNkZWZpbmUgR1BUX1RCTVJfVEJNUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfVEJNUl9UQk1SX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEdQVF9UQk1SX1RCTVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJNUl9DQVBUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBHUFRfVEJNUl9UQk1SX1BFUklPRElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9UQk1SX1RCTVJfT05FX1NIT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19DVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE0XSBUQlBXTUwKKy8vCisvLyBHUFQgVGltZXIgQiBQV00gT3V0cHV0IExldmVsCisvLworLy8gMDogT3V0cHV0IGlzIHVuYWZmZWN0ZWQuCisvLyAxOiBPdXRwdXQgaXMgaW52ZXJ0ZWQuCisvLyBFTlVNczoKKy8vIElOVkVSVEVEICAgICAgICAgICAgICAgICBJbnZlcnRlZAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vdCBpbnZlcnRlZAorI2RlZmluZSBHUFRfQ1RMX1RCUFdNTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQVF9DVExfVEJQV01MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR1BUX0NUTF9UQlBXTUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUFRfQ1RMX1RCUFdNTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEdQVF9DVExfVEJQV01MX0lOVkVSVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR1BUX0NUTF9UQlBXTUxfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzExOjEwXSBUQkVWRU5UCisvLworLy8gR1BUIFRpbWVyIEIgRXZlbnQgTW9kZQorLy8KKy8vIFRoZSB2YWx1ZXMgaW4gdGhpcyByZWdpc3RlciBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOgorLy8gVmFsdWUgRGVzY3JpcHRpb24KKy8vIDB4MCBQb3NpdGl2ZSBlZGdlCisvLyAweDEgTmVnYXRpdmUgZWRnZQorLy8gMHgyIFJlc2VydmVkCisvLyAweDMgQm90aCBlZGdlcworLy8gTm90ZTogSWYgUFdNIG91dHB1dCBpbnZlcnNpb24gaXMgZW5hYmxlZCwgZWRnZSBkZXRlY3Rpb24gaW50ZXJydXB0CisvLyBiZWhhdmlvciBpcyByZXZlcnNlZC4gVGh1cywgaWYgYSBwb3NpdGl2ZS1lZGdlIGludGVycnVwdCB0cmlnZ2VyCisvLyBoYXMgYmVlbiBzZXQgYW5kIHRoZSBQV00gaW52ZXJzaW9uIGdlbmVyYXRlcyBhIHBvc3RpdmUKKy8vIGVkZ2UsIG5vIGV2ZW50LXRyaWdnZXIgaW50ZXJydXB0IGFzc2VydHMuIEluc3RlYWQsIHRoZSBpbnRlcnJ1cHQKKy8vIGlzIGdlbmVyYXRlZCBvbiB0aGUgbmVnYXRpdmUgZWRnZSBvZiB0aGUgUFdNIHNpZ25hbC4KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIEJvdGggZWRnZXMKKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZQorI2RlZmluZSBHUFRfQ1RMX1RCRVZFTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9DVExfVEJFVkVOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgR1BUX0NUTF9UQkVWRU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBHUFRfQ1RMX1RCRVZFTlRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIEdQVF9DVExfVEJFVkVOVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BUX0NUTF9UQkVWRU5UX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs5XSBUQlNUQUxMCisvLworLy8gR1BUIFRpbWVyIEIgU3RhbGwgRW5hYmxlCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBUaW1lciBCIGZyZWV6ZXMgY291bnRpbmcgd2hpbGUgdGhlIHByb2Nlc3NvciBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbHRlZCBieSB0aGUgZGVidWdnZXIuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgVGltZXIgQiBjb250aW51ZXMgY291bnRpbmcgd2hpbGUgdGhlIHByb2Nlc3NvciBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbHRlZCBieSB0aGUgZGVidWdnZXIuCisjZGVmaW5lIEdQVF9DVExfVEJTVEFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX0NUTF9UQlNUQUxMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUFRfQ1RMX1RCU1RBTExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9DVExfVEJTVEFMTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgR1BUX0NUTF9UQlNUQUxMX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfQ1RMX1RCU1RBTExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzhdIFRCRU4KKy8vCisvLyBHUFQgVGltZXIgQiBFbmFibGUKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFRpbWVyIEIgaXMgZW5hYmxlZCBhbmQgYmVnaW5zIGNvdW50aW5nIG9yIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmUgbG9naWMgaXMgZW5hYmxlZCBiYXNlZCBvbiBDRkcgcmVnaXN0ZXIuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgVGltZXIgQiBpcyBkaXNhYmxlZC4KKyNkZWZpbmUgR1BUX0NUTF9UQkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfQ1RMX1RCRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9DVExfVEJFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX0NUTF9UQkVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfQ1RMX1RCRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9DVExfVEJFTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gVEFQV01MCisvLworLy8gR1BUIFRpbWVyIEEgUFdNIE91dHB1dCBMZXZlbAorLy8gRU5VTXM6CisvLyBJTlZFUlRFRCAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3QgaW52ZXJ0ZWQKKyNkZWZpbmUgR1BUX0NUTF9UQVBXTUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUFRfQ1RMX1RBUFdNTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEdQVF9DVExfVEFQV01MX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BUX0NUTF9UQVBXTUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBHUFRfQ1RMX1RBUFdNTF9JTlZFUlRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQVF9DVExfVEFQV01MX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzM6Ml0gVEFFVkVOVAorLy8KKy8vIEdQVCBUaW1lciBBIEV2ZW50IE1vZGUKKy8vCisvLyBUaGUgdmFsdWVzIGluIHRoaXMgcmVnaXN0ZXIgYXJlIGRlZmluZWQgYXMgZm9sbG93czoKKy8vIFZhbHVlIERlc2NyaXB0aW9uCisvLyAweDAgUG9zaXRpdmUgZWRnZQorLy8gMHgxIE5lZ2F0aXZlIGVkZ2UKKy8vIDB4MiBSZXNlcnZlZAorLy8gMHgzIEJvdGggZWRnZXMKKy8vIE5vdGU6IElmIFBXTSBvdXRwdXQgaW52ZXJzaW9uIGlzIGVuYWJsZWQsIGVkZ2UgZGV0ZWN0aW9uIGludGVycnVwdAorLy8gYmVoYXZpb3IgaXMgcmV2ZXJzZWQuIFRodXMsIGlmIGEgcG9zaXRpdmUtZWRnZSBpbnRlcnJ1cHQgdHJpZ2dlcgorLy8gaGFzIGJlZW4gc2V0IGFuZCB0aGUgUFdNIGludmVyc2lvbiBnZW5lcmF0ZXMgYSBwb3N0aXZlCisvLyBlZGdlLCBubyBldmVudC10cmlnZ2VyIGludGVycnVwdCBhc3NlcnRzLiBJbnN0ZWFkLCB0aGUgaW50ZXJydXB0CisvLyBpcyBnZW5lcmF0ZWQgb24gdGhlIG5lZ2F0aXZlIGVkZ2Ugb2YgdGhlIFBXTSBzaWduYWwuCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBCb3RoIGVkZ2VzCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZQorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UKKyNkZWZpbmUgR1BUX0NUTF9UQUVWRU5UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfQ1RMX1RBRVZFTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEdQVF9DVExfVEFFVkVOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX0NUTF9UQUVWRU5UX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBHUFRfQ1RMX1RBRVZFTlRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9DVExfVEFFVkVOVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gVEFTVEFMTAorLy8KKy8vIEdQVCBUaW1lciBBIFN0YWxsIEVuYWJsZQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgVGltZXIgQSBmcmVlemVzIGNvdW50aW5nIHdoaWxlIHRoZSBwcm9jZXNzb3IgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoYWx0ZWQgYnkgdGhlIGRlYnVnZ2VyLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFRpbWVyIEEgY29udGludWVzIGNvdW50aW5nIHdoaWxlIHRoZSBwcm9jZXNzb3IgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoYWx0ZWQgYnkgdGhlIGRlYnVnZ2VyLgorI2RlZmluZSBHUFRfQ1RMX1RBU1RBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9DVExfVEFTVEFMTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BUX0NUTF9UQVNUQUxMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfQ1RMX1RBU1RBTExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQVF9DVExfVEFTVEFMTF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BUX0NUTF9UQVNUQUxMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBUQUVOCisvLworLy8gR1BUIFRpbWVyIEEgRW5hYmxlCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBUaW1lciBBIGlzIGVuYWJsZWQgYW5kIGJlZ2lucyBjb3VudGluZyBvciB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlIGxvZ2ljIGlzIGVuYWJsZWQgYmFzZWQgb24gdGhlIENGRworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFRpbWVyIEEgaXMgZGlzYWJsZWQuCisjZGVmaW5lIEdQVF9DVExfVEFFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX0NUTF9UQUVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfQ1RMX1RBRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9DVExfVEFFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BUX0NUTF9UQUVOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUFRfQ1RMX1RBRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fU1lOQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjZdIFNZTkMzCisvLworLy8gU3luY2hyb25pemUgR1BUIFRpbWVyIDMuCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBBIHRpbWVvdXQgZXZlbnQgZm9yIGJvdGggVGltZXIgQSBhbmQgVGltZXIgQiBvZgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdQVDMgaXMgdHJpZ2dlcmVkCisvLyBUSU1FUkIgICAgICAgICAgICAgICAgICAgQSB0aW1lb3V0IGV2ZW50IGZvciBUaW1lciBCIG9mIEdQVDMgaXMgdHJpZ2dlcmVkCisvLyBUSU1FUkEgICAgICAgICAgICAgICAgICAgQSB0aW1lb3V0IGV2ZW50IGZvciBUaW1lciBBIG9mIEdQVDMgaXMgdHJpZ2dlcmVkCisvLyBOT1NZTkMgICAgICAgICAgICAgICAgICAgTm8gU3luYy4gR1BUMyBpcyBub3QgYWZmZWN0ZWQuCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMzX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBHUFRfU1lOQ19TWU5DM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEdQVF9TWU5DX1NZTkMzX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzNfVElNRVJCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUFRfU1lOQ19TWU5DM19USU1FUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMzX05PU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6NF0gU1lOQzIKKy8vCisvLyBTeW5jaHJvbml6ZSBHUFQgVGltZXIgMi4KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIEEgdGltZW91dCBldmVudCBmb3IgYm90aCBUaW1lciBBIGFuZCBUaW1lciBCIG9mCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR1BUMiBpcyB0cmlnZ2VyZWQKKy8vIFRJTUVSQiAgICAgICAgICAgICAgICAgICBBIHRpbWVvdXQgZXZlbnQgZm9yIFRpbWVyIEIgb2YgR1BUMiBpcyB0cmlnZ2VyZWQKKy8vIFRJTUVSQSAgICAgICAgICAgICAgICAgICBBIHRpbWVvdXQgZXZlbnQgZm9yIFRpbWVyIEEgb2YgR1BUMiBpcyB0cmlnZ2VyZWQKKy8vIE5PU1lOQyAgICAgICAgICAgICAgICAgICBObyBTeW5jLiBHUFQyIGlzIG5vdCBhZmZlY3RlZC4KKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfU1lOQ19TWU5DMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzJfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBHUFRfU1lOQ19TWU5DMl9USU1FUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMyX1RJTUVSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzJfTk9TWU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMzoyXSBTWU5DMQorLy8KKy8vIFN5bmNocm9uaXplIEdQVCBUaW1lciAxCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBBIHRpbWVvdXQgZXZlbnQgZm9yIGJvdGggVGltZXIgQSBhbmQgVGltZXIgQiBvZgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdQVDEgaXMgdHJpZ2dlcmVkCisvLyBUSU1FUkIgICAgICAgICAgICAgICAgICAgQSB0aW1lb3V0IGV2ZW50IGZvciBUaW1lciBCIG9mIEdQVDEgaXMgdHJpZ2dlcmVkCisvLyBUSU1FUkEgICAgICAgICAgICAgICAgICAgQSB0aW1lb3V0IGV2ZW50IGZvciBUaW1lciBBIG9mIEdQVDEgaXMgdHJpZ2dlcmVkCisvLyBOT1NZTkMgICAgICAgICAgICAgICAgICAgTm8gU3luYy4gR1BUMSBpcyBub3QgYWZmZWN0ZWQuCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBHUFRfU1lOQ19TWU5DMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMxX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzFfVElNRVJCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUFRfU1lOQ19TWU5DMV9USU1FUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9TWU5DX1NZTkMxX05PU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzE6MF0gU1lOQzAKKy8vCisvLyBTeW5jaHJvbml6ZSBHUFQgVGltZXIgMAorLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgQSB0aW1lb3V0IGV2ZW50IGZvciBib3RoIFRpbWVyIEEgYW5kIFRpbWVyIEIgb2YKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHUFQwIGlzIHRyaWdnZXJlZAorLy8gVElNRVJCICAgICAgICAgICAgICAgICAgIEEgdGltZW91dCBldmVudCBmb3IgVGltZXIgQiBvZiBHUFQwIGlzIHRyaWdnZXJlZAorLy8gVElNRVJBICAgICAgICAgICAgICAgICAgIEEgdGltZW91dCBldmVudCBmb3IgVGltZXIgQSBvZiBHUFQwIGlzIHRyaWdnZXJlZAorLy8gTk9TWU5DICAgICAgICAgICAgICAgICAgIE5vIFN5bmMuIEdQVDAgaXMgbm90IGFmZmVjdGVkLgorI2RlZmluZSBHUFRfU1lOQ19TWU5DMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfU1lOQ19TWU5DMF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMwX1RJTUVSQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzBfVElNRVJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUFRfU1lOQ19TWU5DMF9OT1NZTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fSU1SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxM10gRE1BQklNCisvLworLy8gRW5hYmxpbmcgdGhpcyBiaXQgd2lsbCBtYWtlIHRoZSBSSVMuRE1BQlJJUyBpbnRlcnJ1cHQgcHJvcGFnYXRlIHRvCisvLyBNSVMuRE1BQk1JUworLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEludGVycnVwdAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgSW50ZXJydXB0CisjZGVmaW5lIEdQVF9JTVJfRE1BQklNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BUX0lNUl9ETUFCSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBHUFRfSU1SX0RNQUJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQVF9JTVJfRE1BQklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR1BUX0lNUl9ETUFCSU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUFRfSU1SX0RNQUJJTV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTFdIFRCTUlNCisvLworLy8gRW5hYmxpbmcgdGhpcyBiaXQgd2lsbCBtYWtlIHRoZSBSSVMuVEJNUklTIGludGVycnVwdCBwcm9wYWdhdGUgdG8gTUlTLlRCTU1JUworLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEludGVycnVwdAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgSW50ZXJydXB0CisjZGVmaW5lIEdQVF9JTVJfVEJNSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BUX0lNUl9UQk1JTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBHUFRfSU1SX1RCTUlNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9JTVJfVEJNSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BUX0lNUl9UQk1JTV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUFRfSU1SX1RCTUlNX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTBdIENCRUlNCisvLworLy8gRW5hYmxpbmcgdGhpcyBiaXQgd2lsbCBtYWtlIHRoZSBSSVMuQ0JFUklTIGludGVycnVwdCBwcm9wYWdhdGUgdG8gTUlTLkNCRU1JUworLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEludGVycnVwdAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgSW50ZXJydXB0CisjZGVmaW5lIEdQVF9JTVJfQ0JFSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BUX0lNUl9DQkVJTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBHUFRfSU1SX0NCRUlNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQVF9JTVJfQ0JFSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BUX0lNUl9DQkVJTV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfSU1SX0NCRUlNX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzldIENCTUlNCisvLworLy8gRW5hYmxpbmcgdGhpcyBiaXQgd2lsbCBtYWtlIHRoZSBSSVMuQ0JNUklTIGludGVycnVwdCBwcm9wYWdhdGUgdG8gTUlTLkNCTU1JUworLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEludGVycnVwdAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgSW50ZXJydXB0CisjZGVmaW5lIEdQVF9JTVJfQ0JNSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX0lNUl9DQk1JTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUFRfSU1SX0NCTUlNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9JTVJfQ0JNSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgR1BUX0lNUl9DQk1JTV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfSU1SX0NCTUlNX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzhdIFRCVE9JTQorLy8KKy8vIEVuYWJsaW5nIHRoaXMgYml0IHdpbGwgbWFrZSB0aGUgUklTLlRCVE9SSVMgaW50ZXJydXB0IHByb3BhZ2F0ZSB0bworLy8gTUlTLlRCVE9NSVMKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBJbnRlcnJ1cHQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIEludGVycnVwdAorI2RlZmluZSBHUFRfSU1SX1RCVE9JTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9JTVJfVEJUT0lNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX0lNUl9UQlRPSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfSU1SX1RCVE9JTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9JTVJfVEJUT0lNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX0lNUl9UQlRPSU1fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs1XSBETUFBSU0KKy8vCisvLyBFbmFibGluZyB0aGlzIGJpdCB3aWxsIG1ha2UgdGhlIFJJUy5ETUFBUklTIGludGVycnVwdCBwcm9wYWdhdGUgdG8KKy8vIE1JUy5ETUFBTUlTCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgR1BUX0lNUl9ETUFBSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUFRfSU1SX0RNQUFJTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEdQVF9JTVJfRE1BQUlNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BUX0lNUl9ETUFBSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBHUFRfSU1SX0RNQUFJTV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQVF9JTVJfRE1BQUlNX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNF0gVEFNSU0KKy8vCisvLyBFbmFibGluZyB0aGlzIGJpdCB3aWxsIG1ha2UgdGhlIFJJUy5UQU1SSVMgaW50ZXJydXB0IHByb3BhZ2F0ZSB0byBNSVMuVEFNTUlTCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgR1BUX0lNUl9UQU1JTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfSU1SX1RBTUlNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQVF9JTVJfVEFNSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX0lNUl9UQU1JTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUFRfSU1SX1RBTUlNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9JTVJfVEFNSU1fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMl0gQ0FFSU0KKy8vCisvLyBFbmFibGluZyB0aGlzIGJpdCB3aWxsIG1ha2UgdGhlIFJJUy5DQUVSSVMgaW50ZXJydXB0IHByb3BhZ2F0ZSB0byBNSVMuQ0FFTUlTCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgR1BUX0lNUl9DQUVJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUFRfSU1SX0NBRUlNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9JTVJfQ0FFSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX0lNUl9DQUVJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfSU1SX0NBRUlNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9JTVJfQ0FFSU1fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gQ0FNSU0KKy8vCisvLyBFbmFibGluZyB0aGlzIGJpdCB3aWxsIG1ha2UgdGhlIFJJUy5DQU1SSVMgaW50ZXJydXB0IHByb3BhZ2F0ZSB0byBNSVMuQ0FNTUlTCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgR1BUX0lNUl9DQU1JTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfSU1SX0NBTUlNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQVF9JTVJfQ0FNSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BUX0lNUl9DQU1JTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHUFRfSU1SX0NBTUlNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9JTVJfQ0FNSU1fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gVEFUT0lNCisvLworLy8gRW5hYmxpbmcgdGhpcyBiaXQgd2lsbCBtYWtlIHRoZSBSSVMuVEFUT1JJUyBpbnRlcnJ1cHQgcHJvcGFnYXRlIHRvCisvLyBNSVMuVEFUT01JUworLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEludGVycnVwdAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgSW50ZXJydXB0CisjZGVmaW5lIEdQVF9JTVJfVEFUT0lNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX0lNUl9UQVRPSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfSU1SX1RBVE9JTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9JTVJfVEFUT0lNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BUX0lNUl9UQVRPSU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUFRfSU1SX1RBVE9JTV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fUklTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxM10gRE1BQlJJUworLy8KKy8vIEdQVCBUaW1lciBCIERNQSBEb25lIFJhdyBJbnRlcnJ1cHQgU3RhdHVzCisvLworLy8gMDogVHJhbnNmZXIgaGFzIG5vdCBjb21wbGV0ZWQKKy8vIDE6IFRyYW5zZmVyIGhhcyBjb21wbGV0ZWQKKyNkZWZpbmUgR1BUX1JJU19ETUFCUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUFRfUklTX0RNQUJSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQVF9SSVNfRE1BQlJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BUX1JJU19ETUFCUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzExXSBUQk1SSVMKKy8vCisvLyBHUFQgVGltZXIgQiBNYXRjaCBSYXcgIEludGVycnVwdAorLy8KKy8vIDA6ICBUaGUgbWF0Y2ggdmFsdWUgaGFzIG5vdCBiZWVuIHJlYWNoZWQKKy8vIDE6ICBUaGUgbWF0Y2ggdmFsdWUgaXMgcmVhY2hlZC4KKy8vCisvLyBUQk1SLlRCTUlFIGlzIHNldCwgYW5kIHRoZSBtYXRjaCB2YWx1ZXMgaW4gVEJNQVRDSFIgYW5kIG9wdGlvbmFsbHkgVEJQTVIKKy8vIGhhdmUgYmVlbiByZWFjaGVkIHdoZW4gY29uZmlndXJlZCBpbiBvbmUtc2hvdCBvciBwZXJpb2RpYyBtb2RlLgorI2RlZmluZSBHUFRfUklTX1RCTVJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9SSVNfVEJNUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BUX1JJU19UQk1SSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUFRfUklTX1RCTVJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIENCRVJJUworLy8KKy8vIEdQVCBUaW1lciBCIENhcHR1cmUgTW9kZSBFdmVudCBSYXcgSW50ZXJydXB0CisvLworLy8gMDogIFRoZSBldmVudCBoYXMgbm90IG9jY3VyZWQuCisvLyAxOiAgVGhlIGV2ZW50IGhhcyBvY2N1cmVkLgorLy8KKy8vIFRoaXMgaW50ZXJydXB0IGFzc2VydHMgd2hlbiB0aGUgc3VidGltZXIgaXMgY29uZmlndXJlZCBpbiBJbnB1dCBFZGdlLVRpbWUKKy8vIG1vZGUKKyNkZWZpbmUgR1BUX1JJU19DQkVSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfUklTX0NCRVJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQVF9SSVNfQ0JFUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BUX1JJU19DQkVSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBDQk1SSVMKKy8vCisvLyBHUFQgVGltZXIgQiBDYXB0dXJlIE1vZGUgTWF0Y2ggUmF3IEludGVycnVwdAorLy8KKy8vIDA6ICBUaGUgY2FwdHVyZSBtb2RlIG1hdGNoIGZvciBUaW1lciBCIGhhcyBub3Qgb2NjdXJyZWQuCisvLyAxOiAgQSBjYXB0dXJlIG1vZGUgbWF0Y2ggaGFzIG9jY3VycmVkIGZvciBUaW1lciBCLiBUaGlzIGludGVycnVwdAorLy8gYXNzZXJ0cyB3aGVuIHRoZSB2YWx1ZXMgaW4gdGhlIFRCUiBhbmQgVEJQUgorLy8gbWF0Y2ggdGhlIHZhbHVlcyBpbiB0aGUgVEJNQVRDSFIgYW5kIFRCUE1SCisvLyB3aGVuIGNvbmZpZ3VyZWQgaW4gSW5wdXQgRWRnZS1UaW1lIG1vZGUuCisvLworLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIGEgMSB0byB0aGUgSUNMUi5DQk1DSU5UIGJpdC4KKyNkZWZpbmUgR1BUX1JJU19DQk1SSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfUklTX0NCTVJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQVF9SSVNfQ0JNUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX1JJU19DQk1SSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBUQlRPUklTCisvLworLy8gR1BUIFRpbWVyIEIgVGltZS1vdXQgUmF3IEludGVycnVwdAorLy8KKy8vIDA6ICBUaW1lciBCIGhhcyBub3QgdGltZWQgb3V0CisvLyAxOiAgVGltZXIgQiBoYXMgdGltZWQgb3V0LgorLy8KKy8vIFRoaXMgaW50ZXJydXB0IGlzIGFzc2VydGVkIHdoZW4gYSBvbmUtc2hvdCBvciBwZXJpb2RpYyBtb2RlIHRpbWVyIHJlYWNoZXMKKy8vIGl0cyBjb3VudCBsaW1pdC4gVGhlIGNvdW50IGxpbWl0IGlzIDAgb3IgdGhlIHZhbHVlIGxvYWRlZCBpbnRvIFRCSUxSLAorLy8gZGVwZW5kaW5nIG9uIHRoZSBjb3VudCBkaXJlY3Rpb24uCisjZGVmaW5lIEdQVF9SSVNfVEJUT1JJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX1JJU19UQlRPUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfUklTX1RCVE9SSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9SSVNfVEJUT1JJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbNV0gRE1BQVJJUworLy8KKy8vIEdQVCBUaW1lciBBIERNQSBEb25lIFJhdyBJbnRlcnJ1cHQgU3RhdHVzCisvLworLy8gMDogVHJhbnNmZXIgaGFzIG5vdCBjb21wbGV0ZWQKKy8vIDE6IFRyYW5zZmVyIGhhcyBjb21wbGV0ZWQKKyNkZWZpbmUgR1BUX1JJU19ETUFBUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUFRfUklTX0RNQUFSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEdQVF9SSVNfRE1BQVJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BUX1JJU19ETUFBUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBUQU1SSVMKKy8vCisvLyBHUFQgVGltZXIgQSBNYXRjaCBSYXcgIEludGVycnVwdAorLy8KKy8vIDA6ICBUaGUgbWF0Y2ggdmFsdWUgaGFzIG5vdCBiZWVuIHJlYWNoZWQKKy8vIDE6ICBUaGUgbWF0Y2ggdmFsdWUgaXMgcmVhY2hlZC4KKy8vCisvLyBUQU1SLlRBTUlFIGlzIHNldCwgYW5kIHRoZSBtYXRjaCB2YWx1ZXMgaW4gVEFNQVRDSFIgYW5kIG9wdGlvbmFsbHkgVEFQTVIKKy8vIGhhdmUgYmVlbiByZWFjaGVkIHdoZW4gY29uZmlndXJlZCBpbiBvbmUtc2hvdCBvciBwZXJpb2RpYyBtb2RlLgorI2RlZmluZSBHUFRfUklTX1RBTVJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9SSVNfVEFNUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR1BUX1JJU19UQU1SSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfUklTX1RBTVJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzJdIENBRVJJUworLy8KKy8vIEdQVCBUaW1lciBBIENhcHR1cmUgTW9kZSBFdmVudCBSYXcgSW50ZXJydXB0CisvLworLy8gMDogIFRoZSBldmVudCBoYXMgbm90IG9jY3VyZWQuCisvLyAxOiAgVGhlIGV2ZW50IGhhcyBvY2N1cmVkLgorLy8KKy8vIFRoaXMgaW50ZXJydXB0IGFzc2VydHMgd2hlbiB0aGUgc3VidGltZXIgaXMgY29uZmlndXJlZCBpbiBJbnB1dCBFZGdlLVRpbWUKKy8vIG1vZGUKKyNkZWZpbmUgR1BUX1JJU19DQUVSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUFRfUklTX0NBRVJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9SSVNfQ0FFUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX1JJU19DQUVSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBDQU1SSVMKKy8vCisvLyBHUFQgVGltZXIgQSBDYXB0dXJlIE1vZGUgTWF0Y2ggUmF3IEludGVycnVwdAorLy8KKy8vIDA6ICBUaGUgY2FwdHVyZSBtb2RlIG1hdGNoIGZvciBUaW1lciBBIGhhcyBub3Qgb2NjdXJyZWQuCisvLyAxOiAgQSBjYXB0dXJlIG1vZGUgbWF0Y2ggaGFzIG9jY3VycmVkIGZvciBUaW1lciBBLiBUaGlzIGludGVycnVwdAorLy8gYXNzZXJ0cyB3aGVuIHRoZSB2YWx1ZXMgaW4gdGhlIFRBUiBhbmQgVEFQUgorLy8gbWF0Y2ggdGhlIHZhbHVlcyBpbiB0aGUgVEFNQVRDSFIgYW5kIFRBUE1SCisvLyB3aGVuIGNvbmZpZ3VyZWQgaW4gSW5wdXQgRWRnZS1UaW1lIG1vZGUuCisvLworLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIGEgMSB0byB0aGUgSUNMUi5DQU1DSU5UIGJpdC4KKyNkZWZpbmUgR1BUX1JJU19DQU1SSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfUklTX0NBTVJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQVF9SSVNfQ0FNUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BUX1JJU19DQU1SSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBUQVRPUklTCisvLworLy8gR1BUIFRpbWVyIEEgVGltZS1vdXQgUmF3IEludGVycnVwdAorLy8KKy8vIDA6ICBUaW1lciBBIGhhcyBub3QgdGltZWQgb3V0CisvLyAxOiAgVGltZXIgQSBoYXMgdGltZWQgb3V0LgorLy8KKy8vIFRoaXMgaW50ZXJydXB0IGlzIGFzc2VydGVkIHdoZW4gYSBvbmUtc2hvdCBvciBwZXJpb2RpYyBtb2RlIHRpbWVyIHJlYWNoZXMKKy8vIGl0cyBjb3VudCBsaW1pdC4gVGhlIGNvdW50IGxpbWl0IGlzIDAgb3IgdGhlIHZhbHVlIGxvYWRlZCBpbnRvIFRBSUxSLAorLy8gZGVwZW5kaW5nIG9uIHRoZSBjb3VudCBkaXJlY3Rpb24uCisjZGVmaW5lIEdQVF9SSVNfVEFUT1JJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX1JJU19UQVRPUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfUklTX1RBVE9SSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9SSVNfVEFUT1JJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19NSVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzEzXSBETUFCTUlTCisvLworLy8gMDogTm8gaW50ZXJydXB0IG9yIGludGVycnVwdCBub3QgZW5hYmxlZAorLy8gMTogUklTLkRNQUJSSVMgPSAxICYmIElNUi5ETUFCSU0gPSAxCisjZGVmaW5lIEdQVF9NSVNfRE1BQk1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BUX01JU19ETUFCTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBHUFRfTUlTX0RNQUJNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQVF9NSVNfRE1BQk1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMV0gVEJNTUlTCisvLworLy8gMDogTm8gaW50ZXJydXB0IG9yIGludGVycnVwdCBub3QgZW5hYmxlZAorLy8gMTogUklTLlRCTVJJUyA9IDEgJiYgSU1SLlRCTUlNID0gMQorI2RlZmluZSBHUFRfTUlTX1RCTU1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9NSVNfVEJNTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BUX01JU19UQk1NSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUFRfTUlTX1RCTU1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIENCRU1JUworLy8KKy8vIDA6IE5vIGludGVycnVwdCBvciBpbnRlcnJ1cHQgbm90IGVuYWJsZWQKKy8vIDE6IFJJUy5DQkVSSVMgPSAxICYmIElNUi5DQkVJTSA9IDEKKyNkZWZpbmUgR1BUX01JU19DQkVNSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfTUlTX0NCRU1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQVF9NSVNfQ0JFTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BUX01JU19DQkVNSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBDQk1NSVMKKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgb3IgaW50ZXJydXB0IG5vdCBlbmFibGVkCisvLyAxOiBSSVMuQ0JNUklTID0gMSAmJiBJTVIuQ0JNSU0gPSAxCisjZGVmaW5lIEdQVF9NSVNfQ0JNTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX01JU19DQk1NSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUFRfTUlTX0NCTU1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9NSVNfQ0JNTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gVEJUT01JUworLy8KKy8vIDA6IE5vIGludGVycnVwdCBvciBpbnRlcnJ1cHQgbm90IGVuYWJsZWQKKy8vIDE6IFJJUy5UQlRPUklTID0gMSAmJiBJTVIuVEJUT0lNID0gMQorI2RlZmluZSBHUFRfTUlTX1RCVE9NSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9NSVNfVEJUT01JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX01JU19UQlRPTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfTUlTX1RCVE9NSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzVdIERNQUFNSVMKKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgb3IgaW50ZXJydXB0IG5vdCBlbmFibGVkCisvLyAxOiBSSVMuRE1BQVJJUyA9IDEgJiYgSU1SLkRNQUFJTSA9IDEKKyNkZWZpbmUgR1BUX01JU19ETUFBTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUFRfTUlTX0RNQUFNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEdQVF9NSVNfRE1BQU1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BUX01JU19ETUFBTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBUQU1NSVMKKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgb3IgaW50ZXJydXB0IG5vdCBlbmFibGVkCisvLyAxOiBSSVMuVEFNUklTID0gMSAmJiBJTVIuVEFNSU0gPSAxCisjZGVmaW5lIEdQVF9NSVNfVEFNTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX01JU19UQU1NSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUFRfTUlTX1RBTU1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9NSVNfVEFNTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMl0gQ0FFTUlTCisvLworLy8gMDogTm8gaW50ZXJydXB0IG9yIGludGVycnVwdCBub3QgZW5hYmxlZAorLy8gMTogUklTLkNBRVJJUyA9IDEgJiYgSU1SLkNBRUlNID0gMQorI2RlZmluZSBHUFRfTUlTX0NBRU1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9NSVNfQ0FFTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX01JU19DQUVNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUFRfTUlTX0NBRU1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIENBTU1JUworLy8KKy8vIDA6IE5vIGludGVycnVwdCBvciBpbnRlcnJ1cHQgbm90IGVuYWJsZWQKKy8vIDE6IFJJUy5DQU1SSVMgPSAxICYmIElNUi5DQU1JTSA9IDEKKyNkZWZpbmUgR1BUX01JU19DQU1NSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfTUlTX0NBTU1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQVF9NSVNfQ0FNTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BUX01JU19DQU1NSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBUQVRPTUlTCisvLworLy8gMDogTm8gaW50ZXJydXB0IG9yIGludGVycnVwdCBub3QgZW5hYmxlZAorLy8gMTogUklTLlRBVE9SSVMgPSAxICYmIElNUi5UQVRPSU0gPSAxCisjZGVmaW5lIEdQVF9NSVNfVEFUT01JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX01JU19UQVRPTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfTUlTX1RBVE9NSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9NSVNfVEFUT01JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19JQ0xSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxM10gRE1BQklOVAorLy8KKy8vIDA6IERvIG5vdGhpbmcuCisvLyAxOiBDbGVhciBSSVMuRE1BQlJJUyBhbmQgTUlTLkRNQUJNSVMKKyNkZWZpbmUgR1BUX0lDTFJfRE1BQklOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUFRfSUNMUl9ETUFCSU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQVF9JQ0xSX0RNQUJJTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BUX0lDTFJfRE1BQklOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzExXSBUQk1DSU5UCisvLworLy8gMDogRG8gbm90aGluZy4KKy8vIDE6IENsZWFyIFJJUy5UQk1SSVMgYW5kIE1JUy5UQk1NSVMKKyNkZWZpbmUgR1BUX0lDTFJfVEJNQ0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUFRfSUNMUl9UQk1DSU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdQVF9JQ0xSX1RCTUNJTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BUX0lDTFJfVEJNQ0lOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBDQkVDSU5UCisvLworLy8gMDogRG8gbm90aGluZy4KKy8vIDE6IENsZWFyIFJJUy5DQkVSSVMgYW5kIE1JUy5DQkVNSVMKKyNkZWZpbmUgR1BUX0lDTFJfQ0JFQ0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfSUNMUl9DQkVDSU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQVF9JQ0xSX0NCRUNJTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BUX0lDTFJfQ0JFQ0lOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBDQk1DSU5UCisvLworLy8gMDogRG8gbm90aGluZy4KKy8vIDE6IENsZWFyIFJJUy5DQk1SSVMgYW5kIE1JUy5DQk1NSVMKKyNkZWZpbmUgR1BUX0lDTFJfQ0JNQ0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfSUNMUl9DQk1DSU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQVF9JQ0xSX0NCTUNJTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX0lDTFJfQ0JNQ0lOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBUQlRPQ0lOVAorLy8KKy8vIDA6IERvIG5vdGhpbmcuCisvLyAxOiBDbGVhciBSSVMuVEJUT1JJUyBhbmQgTUlTLlRCVE9NSVMKKyNkZWZpbmUgR1BUX0lDTFJfVEJUT0NJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfSUNMUl9UQlRPQ0lOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9JQ0xSX1RCVE9DSU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX0lDTFJfVEJUT0NJTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs1XSBETUFBSU5UCisvLworLy8gMDogRG8gbm90aGluZy4KKy8vIDE6IENsZWFyIFJJUy5ETUFBUklTIGFuZCBNSVMuRE1BQU1JUworI2RlZmluZSBHUFRfSUNMUl9ETUFBSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQVF9JQ0xSX0RNQUFJTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BUX0lDTFJfRE1BQUlOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUFRfSUNMUl9ETUFBSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFRBTUNJTlQKKy8vCisvLyAwOiBEbyBub3RoaW5nLgorLy8gMTogQ2xlYXIgUklTLlRBTVJJUyBhbmQgTUlTLlRBTU1JUworI2RlZmluZSBHUFRfSUNMUl9UQU1DSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9JQ0xSX1RBTUNJTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR1BUX0lDTFJfVEFNQ0lOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfSUNMUl9UQU1DSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzJdIENBRUNJTlQKKy8vCisvLyAwOiBEbyBub3RoaW5nLgorLy8gMTogQ2xlYXIgUklTLkNBRVJJUyBhbmQgTUlTLkNBRU1JUworI2RlZmluZSBHUFRfSUNMUl9DQUVDSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9JQ0xSX0NBRUNJTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX0lDTFJfQ0FFQ0lOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUFRfSUNMUl9DQUVDSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIENBTUNJTlQKKy8vCisvLyAwOiBEbyBub3RoaW5nLgorLy8gMTogQ2xlYXIgUklTLkNBTVJJUyBhbmQgTUlTLkNBTU1JUworI2RlZmluZSBHUFRfSUNMUl9DQU1DSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9JQ0xSX0NBTUNJTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BUX0lDTFJfQ0FNQ0lOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfSUNMUl9DQU1DSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFRBVE9DSU5UCisvLworLy8gMDogRG8gbm90aGluZy4KKy8vIDE6IENsZWFyIFJJUy5UQVRPUklTIGFuZCBNSVMuVEFUT01JUworI2RlZmluZSBHUFRfSUNMUl9UQVRPQ0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9JQ0xSX1RBVE9DSU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BUX0lDTFJfVEFUT0NJTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUFRfSUNMUl9UQVRPQ0lOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEFJTFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBUQUlMUgorLy8KKy8vIEdQVCBUaW1lciBBIEludGVydmFsIExvYWQgIFJlZ2lzdGVyCisvLworLy8gV3JpdGluZyB0aGlzIGZpZWxkIGxvYWRzIHRoZSBjb3VudGVyIGZvciBUaW1lciBBLiBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudAorLy8gdmFsdWUgb2YgVEFJTFIuCisjZGVmaW5lIEdQVF9UQUlMUl9UQUlMUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgR1BUX1RBSUxSX1RBSUxSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBHUFRfVEFJTFJfVEFJTFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEJJTFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBUQklMUgorLy8KKy8vIEdQVCBUaW1lciBCIEludGVydmFsIExvYWQgIFJlZ2lzdGVyCisvLworLy8gV3JpdGluZyB0aGlzIGZpZWxkIGxvYWRzIHRoZSBjb3VudGVyIGZvciBUaW1lciBCLiBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudAorLy8gdmFsdWUgb2YgVEJJTFIuCisjZGVmaW5lIEdQVF9UQklMUl9UQklMUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgR1BUX1RCSUxSX1RCSUxSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBHUFRfVEJJTFJfVEJJTFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEFNQVRDSFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBUQU1BVENIUgorLy8KKy8vIEdQVCBUaW1lciBBIE1hdGNoIFJlZ2lzdGVyCisjZGVmaW5lIEdQVF9UQU1BVENIUl9UQU1BVENIUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgR1BUX1RBTUFUQ0hSX1RBTUFUQ0hSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBHUFRfVEFNQVRDSFJfVEFNQVRDSFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEJNQVRDSFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBUQk1BVENIUgorLy8KKy8vIEdQVCBUaW1lciBCIE1hdGNoIFJlZ2lzdGVyCisjZGVmaW5lIEdQVF9UQk1BVENIUl9UQk1BVENIUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR1BUX1RCTUFUQ0hSX1RCTUFUQ0hSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBHUFRfVEJNQVRDSFJfVEJNQVRDSFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEFQUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFRBUFNSCisvLworLy8gVGltZXIgQSBQcmUtc2NhbGUuCisvLworLy8gUHJlc2NhbGVyIHJhdGlvIGluIG9uZS1zaG90IGFuZCBwZXJpb2RpYyBjb3VudCBtb2RlIGlzIFRBUFNSICsgMSwgdGhhdCBpczoKKy8vCisvLyAwOiBQcmVzY2FsZXIgcmF0aW8gPSAxCisvLyAxOiBQcmVzY2FsZXIgcmF0aW8gPSAyCisvLyAyOiBQcmVzY2FsZXIgcmF0aW8gPSAzCisvLyAuLi4KKy8vIDI1NTogUHJlc2NhbGVyIHJhdGlvID0gMjU2CisjZGVmaW5lIEdQVF9UQVBSX1RBUFNSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX1RBUFJfVEFQU1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBHUFRfVEFQUl9UQVBTUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEJQUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFRCUFNSCisvLworLy8gVGltZXIgQiBQcmUtc2NhbGUuCisvLworLy8gUHJlc2NhbGUgcmF0aW8gaW4gb25lLXNob3QgYW5kIHBlcmlvZGljIGNvdW50IG1vZGUgaXMgVEJQU1IgKyAxLCB0aGF0IGlzOgorLy8KKy8vIDA6IFByZXNjYWxlciByYXRpbyA9IDEKKy8vIDE6IFByZXNjYWxlciByYXRpbyA9IDIKKy8vIDI6IFByZXNjYWxlciByYXRpbyA9IDMKKy8vIC4uLgorLy8gMjU1OiBQcmVzY2FsZXIgcmF0aW8gPSAyNTYKKyNkZWZpbmUgR1BUX1RCUFJfVEJQU1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfVEJQUl9UQlBTUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEdQVF9UQlBSX1RCUFNSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQVBNUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFRBUFNNUgorLy8KKy8vIEdQVCBUaW1lciBBIFByZS1zY2FsZSBNYXRjaC4gIEluIDE2IGJpdCBtb2RlIHRoaXMgZmllbGQgaG9sZHMgYml0cyAyMyB0byAxNi4KKyNkZWZpbmUgR1BUX1RBUE1SX1RBUFNNUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfVEFQTVJfVEFQU01SX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEdQVF9UQVBNUl9UQVBTTVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQlBNUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFRCUFNNUgorLy8KKy8vIEdQVCBUaW1lciBCIFByZS1zY2FsZSBNYXRjaCBSZWdpc3Rlci4gIEluIDE2IGJpdCBtb2RlIHRoaXMgZmllbGQgaG9sZHMgYml0cworLy8gMjMgdG8gMTYuCisjZGVmaW5lIEdQVF9UQlBNUl9UQlBTTVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX1RCUE1SX1RCUFNNUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBHUFRfVEJQTVJfVEJQU01SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEFSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVEFSCisvLworLy8gR1BUIFRpbWVyIEEgUmVnaXN0ZXIKKy8vCisvLyBCYXNlZCBvbiB0aGUgdmFsdWUgaW4gdGhlIHJlZ2lzdGVyIGZpZWxkIFRBTVIuVEFJTEQsIHRoaXMgcmVnaXN0ZXIgaXMKKy8vIHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWUgZnJvbSBUQUlMUiByZWdpc3RlciBlaXRoZXIgb24gdGhlIG5leHQgY3ljbGUgb3Igb24KKy8vIHRoZSBuZXh0IHRpbWVvdXQuCisvLworLy8gQSByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRpbWVyIEEgQ291bnQgUmVnaXN0ZXIsIGluIGFsbCBjYXNlcworLy8gZXhjZXB0IGZvciBJbnB1dCBFZGdlIGNvdW50IGFuZCBUaW1lciBtb2Rlcy4KKy8vIEluIHRoZSBJbnB1dCBFZGdlIENvdW50IE1vZGUsIHRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIG51bWJlciBvZiBlZGdlcworLy8gdGhhdCBoYXZlIG9jY3VycmVkLiBJbiB0aGUgSW5wdXQgRWRnZSBUaW1lIG1vZGUsIHRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlCisvLyB0aW1lIGF0IHdoaWNoIHRoZSBsYXN0IGVkZ2UgZXZlbnQgdG9vayBwbGFjZS4KKyNkZWZpbmUgR1BUX1RBUl9UQVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBHUFRfVEFSX1RBUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEdQVF9UQVJfVEFSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQlIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBUQlIKKy8vCisvLyBHUFQgVGltZXIgQiBSZWdpc3RlcgorLy8KKy8vIEJhc2VkIG9uIHRoZSB2YWx1ZSBpbiB0aGUgcmVnaXN0ZXIgZmllbGQgVEJNUi5UQklMRCwgdGhpcyByZWdpc3RlciBpcworLy8gdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZSBmcm9tIFRCSUxSIHJlZ2lzdGVyIGVpdGhlciBvbiB0aGUgbmV4dCBjeWNsZSBvciBvbgorLy8gdGhlIG5leHQgdGltZW91dC4KKy8vCisvLyBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgVGltZXIgQiBDb3VudCBSZWdpc3RlciwgaW4gYWxsIGNhc2VzCisvLyBleGNlcHQgZm9yIElucHV0IEVkZ2UgY291bnQgYW5kIFRpbWVyIG1vZGVzLgorLy8gSW4gdGhlIElucHV0IEVkZ2UgQ291bnQgTW9kZSwgdGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgbnVtYmVyIG9mIGVkZ2VzCisvLyB0aGF0IGhhdmUgb2NjdXJyZWQuIEluIHRoZSBJbnB1dCBFZGdlIFRpbWUgbW9kZSwgdGhpcyByZWdpc3RlciBjb250YWlucyB0aGUKKy8vIHRpbWUgYXQgd2hpY2ggdGhlIGxhc3QgZWRnZSBldmVudCB0b29rIHBsYWNlLgorI2RlZmluZSBHUFRfVEJSX1RCUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEdQVF9UQlJfVEJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgR1BUX1RCUl9UQlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX1RBVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFRBVgorLy8KKy8vIEdQVCBUaW1lciBBIFJlZ2lzdGVyCisvLyBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCwgZnJlZS1ydW5uaW5nIHZhbHVlIG9mIFRpbWVyIEEgaW4gYWxsIG1vZGVzLgorLy8gV2hlbiB3cml0dGVuLCB0aGUgdmFsdWUgd3JpdHRlbiBpbnRvIHRoaXMgcmVnaXN0ZXIgaXMgbG9hZGVkIGludG8gdGhlCisvLyBUQVIgcmVnaXN0ZXIgb24gdGhlIG5leHQgY2xvY2sgY3ljbGUuCisvLyBOb3RlOiBJbiAxNi1iaXQgbW9kZSwgb25seSB0aGUgbG93ZXIgMTYtYml0cyBvZiB0aGlzCisvLyByZWdpc3RlciBjYW4gYmUgd3JpdHRlbiB3aXRoIGEgbmV3IHZhbHVlLiBXcml0ZXMgdG8gdGhlIHByZXNjYWxlciBiaXRzIGhhdmUKKy8vIG5vIGVmZmVjdAorI2RlZmluZSBHUFRfVEFWX1RBVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEdQVF9UQVZfVEFWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgR1BUX1RBVl9UQVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX1RCVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFRCVgorLy8KKy8vIEdQVCBUaW1lciBCIFJlZ2lzdGVyCisvLyBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCwgZnJlZS1ydW5uaW5nIHZhbHVlIG9mIFRpbWVyIEIgaW4gYWxsIG1vZGVzLgorLy8gV2hlbiB3cml0dGVuLCB0aGUgdmFsdWUgd3JpdHRlbiBpbnRvIHRoaXMgcmVnaXN0ZXIgaXMgbG9hZGVkIGludG8gdGhlCisvLyBUQlIgcmVnaXN0ZXIgb24gdGhlIG5leHQgY2xvY2sgY3ljbGUuCisvLyBOb3RlOiBJbiAxNi1iaXQgbW9kZSwgb25seSB0aGUgbG93ZXIgMTYtYml0cyBvZiB0aGlzCisvLyByZWdpc3RlciBjYW4gYmUgd3JpdHRlbiB3aXRoIGEgbmV3IHZhbHVlLiBXcml0ZXMgdG8gdGhlIHByZXNjYWxlciBiaXRzIGhhdmUKKy8vIG5vIGVmZmVjdAorI2RlZmluZSBHUFRfVEJWX1RCVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEdQVF9UQlZfVEJWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgR1BUX1RCVl9UQlZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX1RBUFMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBQU1MKKy8vCisvLyBHUFQgVGltZXIgQSBQcmUtc2NhbGVyCisjZGVmaW5lIEdQVF9UQVBTX1BTU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX1RBUFNfUFNTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBHUFRfVEFQU19QU1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEJQUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFBTUworLy8KKy8vIEdQVCBUaW1lciBCIFByZS1zY2FsZXIKKyNkZWZpbmUgR1BUX1RCUFNfUFNTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfVEJQU19QU1NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEdQVF9UQlBTX1BTU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQVBWCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gUFNWCisvLworLy8gR1BUIFRpbWVyIEEgUHJlLXNjYWxlciBWYWx1ZQorI2RlZmluZSBHUFRfVEFQVl9QU1ZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9UQVBWX1BTVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgR1BUX1RBUFZfUFNWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX1RCUFYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBQU1YKKy8vCisvLyBHUFQgVGltZXIgQiBQcmUtc2NhbGVyIFZhbHVlCisjZGVmaW5lIEdQVF9UQlBWX1BTVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX1RCUFZfUFNWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBHUFRfVEJQVl9QU1ZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fRE1BRVYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzExXSBUQk1ETUFFTgorLy8KKy8vIEdQVCBUaW1lciBCIE1hdGNoIERNQSBUcmlnZ2VyIEVuYWJsZQorI2RlZmluZSBHUFRfRE1BRVZfVEJNRE1BRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9ETUFFVl9UQk1ETUFFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BUX0RNQUVWX1RCTURNQUVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUFRfRE1BRVZfVEJNRE1BRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIENCRURNQUVOCisvLworLy8gR1BUIFRpbWVyIEIgQ2FwdHVyZSBFdmVudCBETUEgVHJpZ2dlciBFbmFibGUKKyNkZWZpbmUgR1BUX0RNQUVWX0NCRURNQUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfRE1BRVZfQ0JFRE1BRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQVF9ETUFFVl9DQkVETUFFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BUX0RNQUVWX0NCRURNQUVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBDQk1ETUFFTgorLy8KKy8vIEdQVCBUaW1lciBCIENhcHR1cmUgTWF0Y2ggRE1BIFRyaWdnZXIgRW5hYmxlCisjZGVmaW5lIEdQVF9ETUFFVl9DQk1ETUFFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX0RNQUVWX0NCTURNQUVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUFRfRE1BRVZfQ0JNRE1BRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9ETUFFVl9DQk1ETUFFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gVEJUT0RNQUVOCisvLworLy8gR1BUIFRpbWVyIEIgVGltZS1PdXQgRE1BIFRyaWdnZXIgRW5hYmxlCisjZGVmaW5lIEdQVF9ETUFFVl9UQlRPRE1BRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX0RNQUVWX1RCVE9ETUFFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfRE1BRVZfVEJUT0RNQUVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9ETUFFVl9UQlRPRE1BRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbNF0gVEFNRE1BRU4KKy8vCisvLyBHUFQgVGltZXIgQSBNYXRjaCBETUEgVHJpZ2dlciBFbmFibGUKKyNkZWZpbmUgR1BUX0RNQUVWX1RBTURNQUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfRE1BRVZfVEFNRE1BRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQVF9ETUFFVl9UQU1ETUFFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX0RNQUVWX1RBTURNQUVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFsyXSBDQUVETUFFTgorLy8KKy8vIEdQVCBUaW1lciBBIENhcHR1cmUgRXZlbnQgRE1BIFRyaWdnZXIgRW5hYmxlCisjZGVmaW5lIEdQVF9ETUFFVl9DQUVETUFFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX0RNQUVWX0NBRURNQUVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfRE1BRVZfQ0FFRE1BRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9ETUFFVl9DQUVETUFFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQ0FNRE1BRU4KKy8vCisvLyBHUFQgVGltZXIgQSBDYXB0dXJlIE1hdGNoIERNQSBUcmlnZ2VyIEVuYWJsZQorI2RlZmluZSBHUFRfRE1BRVZfQ0FNRE1BRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9ETUFFVl9DQU1ETUFFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BUX0RNQUVWX0NBTURNQUVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfRE1BRVZfQ0FNRE1BRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFRBVE9ETUFFTgorLy8KKy8vIEdQVCBUaW1lciBBIFRpbWUtT3V0IERNQSBUcmlnZ2VyIEVuYWJsZQorI2RlZmluZSBHUFRfRE1BRVZfVEFUT0RNQUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9ETUFFVl9UQVRPRE1BRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BUX0RNQUVWX1RBVE9ETUFFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUFRfRE1BRVZfVEFUT0RNQUVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVkVSU0lPTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFZFUlNJT04KKy8vCisvLyBUaW1lciBSZXZpc2lvbi4KKyNkZWZpbmUgR1BUX1ZFUlNJT05fVkVSU0lPTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBHUFRfVkVSU0lPTl9WRVJTSU9OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEdQVF9WRVJTSU9OX1ZFUlNJT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19BTkRDQ1AKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDQ1BfQU5EX0VOCisvLworLy8gRW5hYmxlcyBBTkQgb3BlcmF0aW9uIG9mIHRoZSBDQ1Agb3V0cHV0cyBmb3IgdGltZXJzIEEgYW5kIEIuCisvLworLy8gMCA6IFBXTSBvdXRwdXRzIG9mIFRpbWVyIEEgYW5kIFRpbWVyIEIgYXJlIHRoZSBpbnRlcm5hbCBnZW5lcmF0ZWQgUFdNCisvLyBzaWduYWxzIG9mIHRoZSByZXNwZWN0aXZlIHRpbWVycy4KKy8vIDEgOiBQV00gb3V0cHV0IG9mIFRpbWVyIEEgaXMgQU5EZWQgdmVyc2lvbiBvZiBUaW1lciBBIGFuZCBUaW1lciBCIFBXTQorLy8gc2lnbmFscyBhbmQgVGltZXIgQiBQV00gb3VwdXQgaXMgVGltZXIgQiBQV00gc2lnbmFsIG9ubHkuCisjZGVmaW5lIEdQVF9BTkRDQ1BfQ0NQX0FORF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX0FORENDUF9DQ1BfQU5EX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfQU5EQ0NQX0NDUF9BTkRfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9BTkRDQ1BfQ0NQX0FORF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19HUFRfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfaTJjLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWMxMjVjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfaTJjLmgKQEAgLTAsMCArMSw3MjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19pMmNfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfSTJDX0hfXworI2RlZmluZSBfX0hXX0kyQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBJMkMgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gU2xhdmUgT3duIEFkZHJlc3MKKyNkZWZpbmUgSTJDX09fU09BUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBTbGF2ZSBTdGF0dXMKKyNkZWZpbmUgSTJDX09fU1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBTbGF2ZSBDb250cm9sCisjZGVmaW5lIEkyQ19PX1NDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gU2xhdmUgRGF0YQorI2RlZmluZSBJMkNfT19TRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIFNsYXZlIEludGVycnVwdCBNYXNrCisjZGVmaW5lIEkyQ19PX1NJTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gU2xhdmUgUmF3IEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgSTJDX09fU1JJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBTbGF2ZSBNYXNrZWQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBJMkNfT19TTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIFNsYXZlIEludGVycnVwdCBDbGVhcgorI2RlZmluZSBJMkNfT19TSUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIE1hc3RlciBTYWx2ZSBBZGRyZXNzCisjZGVmaW5lIEkyQ19PX01TQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKworLy8gTWFzdGVyIFN0YXR1cworI2RlZmluZSBJMkNfT19NU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODA0CisKKy8vIE1hc3RlciBDb250cm9sCisjZGVmaW5lIEkyQ19PX01DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDQKKworLy8gTWFzdGVyIERhdGEKKyNkZWZpbmUgSTJDX09fTURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwOAorCisvLyBJMkMgTWFzdGVyIFRpbWVyIFBlcmlvZAorI2RlZmluZSBJMkNfT19NVFBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODBDCisKKy8vIE1hc3RlciBJbnRlcnJ1cHQgTWFzaworI2RlZmluZSBJMkNfT19NSU1SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODEwCisKKy8vIE1hc3RlciBSYXcgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBJMkNfT19NUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODE0CisKKy8vIE1hc3RlciBNYXNrZWQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBJMkNfT19NTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODE4CisKKy8vIE1hc3RlciBJbnRlcnJ1cHQgQ2xlYXIKKyNkZWZpbmUgSTJDX09fTUlDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgxQworCisvLyBNYXN0ZXIgQ29uZmlndXJhdGlvbgorI2RlZmluZSBJMkNfT19NQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJDX09fU09BUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIE9BUgorLy8KKy8vIEkyQyBzbGF2ZSBvd24gYWRkcmVzcworLy8gVGhpcyBmaWVsZCBzcGVjaWZpZXMgYml0cyBhNiB0aHJvdWdoIGEwIG9mIHRoZSBzbGF2ZSBhZGRyZXNzLgorI2RlZmluZSBJMkNfU09BUl9PQVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEkyQ19TT0FSX09BUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgSTJDX1NPQVJfT0FSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX1NTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gRkJSCisvLworLy8gRmlyc3QgYnl0ZSByZWNlaXZlZAorLy8KKy8vIDA6IFRoZSBmaXJzdCBieXRlIGhhcyBub3QgYmVlbiByZWNlaXZlZC4KKy8vIDE6IFRoZSBmaXJzdCBieXRlIGZvbGxvd2luZyB0aGUgc2xhdmUncyBvd24gYWRkcmVzcyBoYXMgYmVlbiByZWNlaXZlZC4KKy8vCisvLyBUaGlzIGJpdCBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlIFJSRVEgYml0IGlzIHNldCBhbmQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkCisvLyB3aGVuIGRhdGEgaGFzIGJlZW4gcmVhZCBmcm9tIHRoZSBTRFIgcmVnaXN0ZXIuCisvLyBOb3RlOiBUaGlzIGJpdCBpcyBub3QgdXNlZCBmb3Igc2xhdmUgdHJhbnNtaXQgb3BlcmF0aW9ucy4KKyNkZWZpbmUgSTJDX1NTVEFUX0ZCUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMkNfU1NUQVRfRkJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyQ19TU1RBVF9GQlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX1NTVEFUX0ZCUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBUUkVRCisvLworLy8gVHJhbnNtaXQgcmVxdWVzdAorLy8KKy8vIDA6IE5vIG91dHN0YW5kaW5nIHRyYW5zbWl0IHJlcXVlc3QuCisvLyAxOiBUaGUgSTJDIGNvbnRyb2xsZXIgaGFzIGJlZW4gYWRkcmVzc2VkIGFzIGEgc2xhdmUgdHJhbnNtaXR0ZXIgYW5kIGlzIHVzaW5nCisvLyBjbG9jayBzdHJldGNoaW5nIHRvIGRlbGF5IHRoZSBtYXN0ZXIgdW50aWwgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIHRoZSBTRFIKKy8vIHJlZ2lzdGVyLgorI2RlZmluZSBJMkNfU1NUQVRfVFJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19TU1RBVF9UUkVRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSTJDX1NTVEFUX1RSRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMkNfU1NUQVRfVFJFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJSRVEKKy8vCisvLyBSZWNlaXZlIHJlcXVlc3QKKy8vCisvLyAwOiBObyBvdXRzdGFuZGluZyByZWNlaXZlIGRhdGEKKy8vIDE6IFRoZSBJMkMgY29udHJvbGxlciBoYXMgb3V0c3RhbmRpbmcgcmVjZWl2ZSBkYXRhIGZyb20gdGhlIEkyQyBtYXN0ZXIgYW5kCisvLyBpcyB1c2luZyBjbG9jayBzdHJldGNoaW5nIHRvIGRlbGF5IHRoZSBtYXN0ZXIgdW50aWwgZGF0YSBoYXMgYmVlbiByZWFkIGZyb20KKy8vIHRoZSBTRFIgcmVnaXN0ZXIuCisjZGVmaW5lIEkyQ19TU1RBVF9SUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX1NTVEFUX1JSRVFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfU1NUQVRfUlJFUV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19TU1RBVF9SUkVRX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19TQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gREEKKy8vCisvLyBEZXZpY2UgYWN0aXZlCisvLworLy8gMDogRGlzYWJsZXMgdGhlIEkyQyBzbGF2ZSBvcGVyYXRpb24KKy8vIDE6IEVuYWJsZXMgdGhlIEkyQyBzbGF2ZSBvcGVyYXRpb24KKyNkZWZpbmUgSTJDX1NDVExfREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfU0NUTF9EQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19TQ1RMX0RBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX1NDVExfREFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX1NEUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIERBVEEKKy8vCisvLyBEYXRhIGZvciB0cmFuc2ZlcgorLy8gVGhpcyBmaWVsZCBjb250YWlucyB0aGUgZGF0YSBmb3IgdHJhbnNmZXIgZHVyaW5nIGEgc2xhdmUgcmVjZWl2ZSBvciB0cmFuc21pdAorLy8gb3BlcmF0aW9uLiAgV2hlbiB3cml0dGVuIHRoZSByZWdpc3RlciBkYXRhIGlzIHVzZWQgYXMgdHJhbnNtaXQgZGF0YS4gIFdoZW4KKy8vIHJlYWQsIHRoaXMgcmVnaXN0ZXIgcmV0dXJucyB0aGUgbGFzdCBkYXRhIHJlY2VpdmVkLgorLy8gRGF0YSBpcyBzdG9yZWQgdW50aWwgbmV4dCB1cGRhdGUsIGVpdGhlciBieSBhIHN5c3RlbSB3cml0ZSBmb3IgdHJhbnNtaXQgb3IKKy8vIGJ5IGFuIGV4dGVybmFsIG1hc3RlciBmb3IgcmVjZWl2ZS4KKyNkZWZpbmUgSTJDX1NEUl9EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJMkNfU0RSX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEkyQ19TRFJfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19TSU1SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gU1RPUElNCisvLworLy8gU3RvcCBjb25kaXRpb24gaW50ZXJydXB0IG1hc2sKKy8vCisvLyAwOiBUaGUgU1JJUy5TVE9QUklTIGludGVycnVwdCBpcyBzdXBwcmVzc2VkIGFuZCBub3Qgc2VudCB0byB0aGUgaW50ZXJydXB0CisvLyBjb250cm9sbGVyLgorLy8gMTogVGhlIFNSSVMuU1RPUFJJUyBpbnRlcnJ1cHQgaXMgZW5hYmxlZCBhbmQgc2VudCB0byB0aGUgaW50ZXJydXB0CisvLyBjb250cm9sbGVyLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEludGVycnVwdAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgSW50ZXJydXB0CisjZGVmaW5lIEkyQ19TSU1SX1NUT1BJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX1NJTVJfU1RPUElNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJMkNfU0lNUl9TVE9QSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19TSU1SX1NUT1BJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJDX1NJTVJfU1RPUElNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMkNfU0lNUl9TVE9QSU1fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIFNUQVJUSU0KKy8vCisvLyBTdGFydCBjb25kaXRpb24gaW50ZXJydXB0IG1hc2sKKy8vCisvLyAwOiBUaGUgU1JJUy5TVEFSVFJJUyBpbnRlcnJ1cHQgaXMgc3VwcHJlc3NlZCBhbmQgbm90IHNlbnQgdG8gdGhlIGludGVycnVwdAorLy8gY29udHJvbGxlci4KKy8vIDE6IFRoZSBTUklTLlNUQVJUUklTIGludGVycnVwdCBpcyBlbmFibGVkIGFuZCBzZW50IHRvIHRoZSBpbnRlcnJ1cHQKKy8vIGNvbnRyb2xsZXIuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgSTJDX1NJTVJfU1RBUlRJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMkNfU0lNUl9TVEFSVElNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEkyQ19TSU1SX1NUQVJUSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJDX1NJTVJfU1RBUlRJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJMkNfU0lNUl9TVEFSVElNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19TSU1SX1NUQVJUSU1fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gREFUQUlNCisvLworLy8gRGF0YSBpbnRlcnJ1cHQgbWFzaworLy8KKy8vIDA6IFRoZSBTUklTLkRBVEFSSVMgaW50ZXJydXB0IGlzIHN1cHByZXNzZWQgYW5kIG5vdCBzZW50IHRvIHRoZSBpbnRlcnJ1cHQKKy8vIGNvbnRyb2xsZXIuCisvLyAxOiBUaGUgU1JJUy5EQVRBUklTIGludGVycnVwdCBpcyBlbmFibGVkIGFuZCBzZW50IHRvIHRoZSBpbnRlcnJ1cHQKKy8vIGNvbnRyb2xsZXIuCisjZGVmaW5lIEkyQ19TSU1SX0RBVEFJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX1NJTVJfREFUQUlNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfU0lNUl9EQVRBSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19TSU1SX0RBVEFJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19TUklTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gU1RPUFJJUworLy8KKy8vIFN0b3AgY29uZGl0aW9uIHJhdyBpbnRlcnJ1cHQgc3RhdHVzCisvLworLy8gMDogTm8gaW50ZXJydXB0CisvLyAxOiBBIFN0b3AgY29uZGl0aW9uIGludGVycnVwdCBpcyBwZW5kaW5nLgorLy8KKy8vIFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyBhIDEgdG8gU0lDUi5TVE9QSUMuCisjZGVmaW5lIEkyQ19TUklTX1NUT1BSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX1NSSVNfU1RPUFJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJMkNfU1JJU19TVE9QUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19TUklTX1NUT1BSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gU1RBUlRSSVMKKy8vCisvLyBTdGFydCBjb25kaXRpb24gcmF3IGludGVycnVwdCBzdGF0dXMKKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQKKy8vIDE6IEEgU3RhcnQgY29uZGl0aW9uIGludGVycnVwdCBpcyBwZW5kaW5nLgorLy8KKy8vIFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyBhIDEgdG8gU0lDUi5TVEFSVElDLgorI2RlZmluZSBJMkNfU1JJU19TVEFSVFJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19TUklTX1NUQVJUUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSTJDX1NSSVNfU1RBUlRSSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMkNfU1JJU19TVEFSVFJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIERBVEFSSVMKKy8vCisvLyBEYXRhIHJhdyBpbnRlcnJ1cHQgc3RhdHVzCisvLworLy8gMDogTm8gaW50ZXJydXB0CisvLyAxOiBBIGRhdGEgcmVjZWl2ZWQgb3IgZGF0YSByZXF1ZXN0ZWQgaW50ZXJydXB0IGlzIHBlbmRpbmcuCisvLworLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIGEgMSB0byB0aGUgU0lDUi5EQVRBSUMuCisjZGVmaW5lIEkyQ19TUklTX0RBVEFSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX1NSSVNfREFUQVJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfU1JJU19EQVRBUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19TUklTX0RBVEFSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19TTUlTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gU1RPUE1JUworLy8KKy8vIFN0b3AgY29uZGl0aW9uIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzCisvLworLy8gMDogQW4gaW50ZXJydXB0IGhhcyBub3Qgb2NjdXJyZWQgb3IgaXMgbWFza2VkL2Rpc2FibGVkLgorLy8gMTogQW4gdW5tYXNrZWQgU3RvcCBjb25kaXRpb24gaW50ZXJydXB0IGlzIHBlbmRpbmcuCisvLworLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIGEgMSB0byB0aGUgU0lDUi5TVE9QSUMuCisjZGVmaW5lIEkyQ19TTUlTX1NUT1BNSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX1NNSVNfU1RPUE1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJMkNfU01JU19TVE9QTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19TTUlTX1NUT1BNSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gU1RBUlRNSVMKKy8vCisvLyBTdGFydCBjb25kaXRpb24gbWFza2VkIGludGVycnVwdCBzdGF0dXMKKy8vCisvLyAwOiBBbiBpbnRlcnJ1cHQgaGFzIG5vdCBvY2N1cnJlZCBvciBpcyBtYXNrZWQvZGlzYWJsZWQuCisvLyAxOiBBbiB1bm1hc2tlZCBTdGFydCBjb25kaXRpb24gaW50ZXJydXB0IGlzIHBlbmRpbmcuCisvLworLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIGEgMSB0byB0aGUgU0lDUi5TVEFSVElDLgorI2RlZmluZSBJMkNfU01JU19TVEFSVE1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19TTUlTX1NUQVJUTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSTJDX1NNSVNfU1RBUlRNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMkNfU01JU19TVEFSVE1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIERBVEFNSVMKKy8vCisvLyBEYXRhIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzCisvLworLy8gMDogQW4gaW50ZXJydXB0IGhhcyBub3Qgb2NjdXJyZWQgb3IgaXMgbWFza2VkL2Rpc2FibGVkLgorLy8gMTogQW4gdW5tYXNrZWQgZGF0YSByZWNlaXZlZCBvciBkYXRhIHJlcXVlc3RlZCBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKy8vCisvLyBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgYSAxIHRvIHRoZSBTSUNSLkRBVEFJQy4KKyNkZWZpbmUgSTJDX1NNSVNfREFUQU1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfU01JU19EQVRBTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19TTUlTX0RBVEFNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX1NNSVNfREFUQU1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX1NJQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBTVE9QSUMKKy8vCisvLyBTdG9wIGNvbmRpdGlvbiBpbnRlcnJ1cHQgY2xlYXIKKy8vCisvLyBXcml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIFNSSVMuU1RPUFJJUyBhbmQgU01JUy5TVE9QTUlTLgorI2RlZmluZSBJMkNfU0lDUl9TVE9QSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19TSUNSX1NUT1BJQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJDX1NJQ1JfU1RPUElDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMkNfU0lDUl9TVE9QSUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFNUQVJUSUMKKy8vCisvLyBTdGFydCBjb25kaXRpb24gaW50ZXJydXB0IGNsZWFyCisvLworLy8gV3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyBTUklTLlNUQVJUUklTIFNNSVMuU1RBUlRNSVMuCisjZGVmaW5lIEkyQ19TSUNSX1NUQVJUSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJDX1NJQ1JfU1RBUlRJQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJMkNfU0lDUl9TVEFSVElDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19TSUNSX1NUQVJUSUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gREFUQUlDCisvLworLy8gRGF0YSBpbnRlcnJ1cHQgY2xlYXIKKy8vCisvLyBXcml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIFNSSVMuREFUQVJJUyBTTUlTLkRBVEFNSVMuCisjZGVmaW5lIEkyQ19TSUNSX0RBVEFJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX1NJQ1JfREFUQUlDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfU0lDUl9EQVRBSUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19TSUNSX0RBVEFJQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19NU0EKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzoxXSBTQQorLy8KKy8vIEkyQyBtYXN0ZXIgc2xhdmUgYWRkcmVzcworLy8gRGVmaW5lcyB3aGljaCBzbGF2ZSBpcyBhZGRyZXNzZWQgZm9yIHRoZSB0cmFuc2FjdGlvbiBpbiBtYXN0ZXIgbW9kZQorI2RlZmluZSBJMkNfTVNBX1NBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEkyQ19NU0FfU0FfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkUKKyNkZWZpbmUgSTJDX01TQV9TQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSUworLy8KKy8vIFJlY2VpdmUgb3IgU2VuZAorLy8gVGhpcyBiaXQtZmllbGQgc3BlY2lmaWVzIGlmIHRoZSBuZXh0IG9wZXJhdGlvbiBpcyBhIHJlY2VpdmUgKGhpZ2gpIG9yIGEKKy8vIHRyYW5zbWl0L3NlbmQgKGxvdykgZnJvbSB0aGUgYWRkcmVzc2VkIHNsYXZlIFNBLgorLy8gRU5VTXM6CisvLyBSWCAgICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBkYXRhIGZyb20gc2xhdmUKKy8vIFRYICAgICAgICAgICAgICAgICAgICAgICBUcmFuc21pdC9zZW5kIGRhdGEgdG8gc2xhdmUKKyNkZWZpbmUgSTJDX01TQV9SUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTVNBX1JTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19NU0FfUlNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01TQV9SU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfTVNBX1JTX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NU0FfUlNfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19NU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzZdIEJVU0JTWQorLy8KKy8vIEJ1cyBidXN5CisvLworLy8gMDogVGhlIEkyQyBidXMgaXMgaWRsZS4KKy8vIDE6IFRoZSBJMkMgYnVzIGlzIGJ1c3kuCisvLworLy8gVGhlIGJpdCBjaGFuZ2VzIGJhc2VkIG9uIHRoZSBNQ1RSTC5TVEFSVCBhbmQgTUNUUkwuU1RPUCBjb25kaXRpb25zLgorI2RlZmluZSBJMkNfTVNUQVRfQlVTQlNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEkyQ19NU1RBVF9CVVNCU1lfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSTJDX01TVEFUX0JVU0JTWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBJMkNfTVNUQVRfQlVTQlNZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIElETEUKKy8vCisvLyBJMkMgaWRsZQorLy8KKy8vIDA6IFRoZSBJMkMgY29udHJvbGxlciBpcyBub3QgaWRsZS4KKy8vIDE6IFRoZSBJMkMgY29udHJvbGxlciBpcyBpZGxlLgorI2RlZmluZSBJMkNfTVNUQVRfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEkyQ19NU1RBVF9JRExFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgSTJDX01TVEFUX0lETEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMkNfTVNUQVRfSURMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIEFSQkxTVAorLy8KKy8vIEFyYml0cmF0aW9uIGxvc3QKKy8vCisvLyAwOiBUaGUgSTJDIGNvbnRyb2xsZXIgd29uIGFyYml0cmF0aW9uLgorLy8gMTogVGhlIEkyQyBjb250cm9sbGVyIGxvc3QgYXJiaXRyYXRpb24uCisjZGVmaW5lIEkyQ19NU1RBVF9BUkJMU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSTJDX01TVEFUX0FSQkxTVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBJMkNfTVNUQVRfQVJCTFNUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEkyQ19NU1RBVF9BUkJMU1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gREFUQUNLX04KKy8vCisvLyBEYXRhIFdhcyBOb3QgQWNrbm93bGVkZ2UKKy8vCisvLyAwOiBUaGUgdHJhbnNtaXR0ZWQgZGF0YSB3YXMgYWNrbm93bGVkZ2VkLgorLy8gMTogVGhlIHRyYW5zbWl0dGVkIGRhdGEgd2FzIG5vdCBhY2tub3dsZWRnZWQuCisjZGVmaW5lIEkyQ19NU1RBVF9EQVRBQ0tfTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSTJDX01TVEFUX0RBVEFDS19OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJMkNfTVNUQVRfREFUQUNLX05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEkyQ19NU1RBVF9EQVRBQ0tfTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQURSQUNLX04KKy8vCisvLyBBZGRyZXNzIFdhcyBOb3QgQWNrbm93bGVkZ2UKKy8vCisvLyAwOiBUaGUgdHJhbnNtaXR0ZWQgYWRkcmVzcyB3YXMgYWNrbm93bGVkZ2VkLgorLy8gMTogVGhlIHRyYW5zbWl0dGVkIGFkZHJlc3Mgd2FzIG5vdCBhY2tub3dsZWRnZWQuCisjZGVmaW5lIEkyQ19NU1RBVF9BRFJBQ0tfTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX01TVEFUX0FEUkFDS19OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJMkNfTVNUQVRfQURSQUNLX05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19NU1RBVF9BRFJBQ0tfTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gRVJSCisvLworLy8gRXJyb3IKKy8vCisvLyAwOiBObyBlcnJvciB3YXMgZGV0ZWN0ZWQgb24gdGhlIGxhc3Qgb3BlcmF0aW9uLgorLy8gMTogQW4gZXJyb3Igb2NjdXJyZWQgb24gdGhlIGxhc3Qgb3BlcmF0aW9uLgorI2RlZmluZSBJMkNfTVNUQVRfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19NU1RBVF9FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSTJDX01TVEFUX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMkNfTVNUQVRfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEJVU1kKKy8vCisvLyBJMkMgYnVzeQorLy8KKy8vIDA6IFRoZSBjb250cm9sbGVyIGlzIGlkbGUuCisvLyAxOiBUaGUgY29udHJvbGxlciBpcyBidXN5LgorLy8KKy8vIFdoZW4gdGhpcyBiaXQtZmllbGQgaXMgc2V0LCB0aGUgb3RoZXIgc3RhdHVzIGJpdHMgYXJlIG5vdCB2YWxpZC4KKy8vCisvLyBOb3RlOiBUaGUgSTJDIGNvbnRyb2xsZXIgcmVxdWlyZXMgZm91ciBTWVNCVVMgY2xvY2sgY3ljbGVzIHRvIGFzc2VydCB0aGUKKy8vIEJVU1kgc3RhdHVzIGFmdGVyIEkyQyBtYXN0ZXIgb3BlcmF0aW9uIGhhcyBiZWVuIGluaXRpYXRlZCB0aHJvdWdoIE1DVFJMCisvLyByZWdpc3Rlci4KKy8vIEhlbmNlIGFmdGVyIHByb2dyYW1taW5nIE1DVFJMIHJlZ2lzdGVyLCBhcHBsaWNhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gd2FpdCBmb3IKKy8vIGZvdXIgU1lTQlVTIGNsb2NrIGN5Y2xlcyBiZWZvcmUgaXNzdWluZyBhIGNvbnRyb2xsZXIgc3RhdHVzIGlucXVpcnkgdGhyb3VnaAorLy8gTVNUQVQgcmVnaXN0ZXIuCisvLyBBbnkgcHJpb3IgaW5xdWlyeSB3b3VsZCByZXN1bHQgaW4gd3Jvbmcgc3RhdHVzIGJlaW5nIHJlcG9ydGVkLgorI2RlZmluZSBJMkNfTVNUQVRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NU1RBVF9CVVNZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJDX01TVEFUX0JVU1lfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTVNUQVRfQlVTWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJDX09fTUNUUkwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFszXSBBQ0sKKy8vCisvLyBEYXRhIGFja25vd2xlZGdlIGVuYWJsZQorLy8KKy8vIDA6IFRoZSByZWNlaXZlZCBkYXRhIGJ5dGUgaXMgbm90IGFja25vd2xlZGdlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBtYXN0ZXIuCisvLyAxOiBUaGUgcmVjZWl2ZWQgZGF0YSBieXRlIGlzIGFja25vd2xlZGdlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBtYXN0ZXIuCisvLworLy8gVGhpcyBiaXQtZmllbGQgbXVzdCBiZSBjbGVhcmVkIHdoZW4gdGhlIEkyQyBidXMgY29udHJvbGxlciByZXF1aXJlcyBubworLy8gZnVydGhlciBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkIGZyb20gdGhlIHNsYXZlIHRyYW5zbWl0dGVyLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGFja25vd2xlZGdlCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBhY2tub3dsZWRnZQorI2RlZmluZSBJMkNfTUNUUkxfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEkyQ19NQ1RSTF9BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSTJDX01DVFJMX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJMkNfTUNUUkxfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEkyQ19NQ1RSTF9BQ0tfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSTJDX01DVFJMX0FDS19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsyXSBTVE9QCisvLworLy8gVGhpcyBiaXQtZmllbGQgZGV0ZXJtaW5lcyBpZiB0aGUgY3ljbGUgc3RvcHMgYXQgdGhlIGVuZCBvZiB0aGUgZGF0YSBjeWNsZSBvcgorLy8gY29udGludWVzIG9uIHRvIGEgcmVwZWF0ZWQgU1RBUlQgY29uZGl0aW9uLgorLy8KKy8vIDA6IFRoZSBjb250cm9sbGVyIGRvZXMgbm90IGdlbmVyYXRlIHRoZSBTdG9wIGNvbmRpdGlvbi4KKy8vIDE6IFRoZSBjb250cm9sbGVyIGdlbmVyYXRlcyB0aGUgU3RvcCBjb25kaXRpb24uCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgU1RPUAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgU1RPUAorI2RlZmluZSBJMkNfTUNUUkxfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19NQ1RSTF9TVE9QX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJDX01DVFJMX1NUT1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMkNfTUNUUkxfU1RPUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyQ19NQ1RSTF9TVE9QX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX01DVFJMX1NUT1BfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBTVEFSVAorLy8KKy8vIFRoaXMgYml0LWZpZWxkIGdlbmVyYXRlcyB0aGUgU3RhcnQgb3IgUmVwZWF0ZWQgU3RhcnQgY29uZGl0aW9uLgorLy8KKy8vIDA6IFRoZSBjb250cm9sbGVyIGRvZXMgbm90IGdlbmVyYXRlIHRoZSBTdGFydCBjb25kaXRpb24uCisvLyAxOiBUaGUgY29udHJvbGxlciBnZW5lcmF0ZXMgdGhlIFN0YXJ0IGNvbmRpdGlvbi4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBTVEFSVAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgU1RBUlQKKyNkZWZpbmUgSTJDX01DVFJMX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMkNfTUNUUkxfU1RBUlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEkyQ19NQ1RSTF9TVEFSVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJDX01DVFJMX1NUQVJUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJMkNfTUNUUkxfU1RBUlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19NQ1RSTF9TVEFSVF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gUlVOCisvLworLy8gSTJDIG1hc3RlciBlbmFibGUKKy8vCisvLyAwOiBUaGUgbWFzdGVyIGlzIGRpc2FibGVkLgorLy8gMTogVGhlIG1hc3RlciBpcyBlbmFibGVkIHRvIHRyYW5zbWl0IG9yIHJlY2VpdmUgZGF0YS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBNYXN0ZXIKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIE1hc3RlcgorI2RlZmluZSBJMkNfTUNUUkxfUlVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NQ1RSTF9SVU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJDX01DVFJMX1JVTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTUNUUkxfUlVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19NQ1RSTF9SVU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01DVFJMX1JVTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX01EUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIERBVEEKKy8vCisvLyBXaGVuIFJlYWQ6IExhc3QgUlggRGF0YSBpcyByZXR1cm5lZAorLy8gV2hlbiBXcml0dGVuOiBEYXRhIGlzIHRyYW5zZmVycmVkIGR1cmluZyBUWCAgdHJhbnNhY3Rpb24KKyNkZWZpbmUgSTJDX01EUl9EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJMkNfTURSX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEkyQ19NRFJfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19NVFBSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gVFBSXzcKKy8vCisvLyBNdXN0IGJlIHNldCB0byAwIHRvIHNldCBUUFIuIElmIHNldCB0byAxLCBhIHdyaXRlIHRvIFRQUiB3aWxsIGJlIGlnbm9yZWQuCisjZGVmaW5lIEkyQ19NVFBSX1RQUl83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSTJDX01UUFJfVFBSXzdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBJMkNfTVRQUl9UUFJfN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEkyQ19NVFBSX1RQUl83X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgWzY6MF0gVFBSCisvLworLy8gU0NMIGNsb2NrIHBlcmlvZAorLy8gVGhpcyBmaWVsZCBzcGVjaWZpZXMgdGhlIHBlcmlvZCBvZiB0aGUgU0NMIGNsb2NrLgorLy8gU0NMX1BSRCA9IDIqKDErVFBSKSooU0NMX0xQICsgU0NMX0hQKSpDTEtfUFJECisvLyB3aGVyZToKKy8vIFNDTF9QUkQgaXMgdGhlIFNDTCBsaW5lIHBlcmlvZCAoSTJDIGNsb2NrKS4KKy8vIFRQUiBpcyB0aGUgdGltZXIgcGVyaW9kIHJlZ2lzdGVyIHZhbHVlIChyYW5nZSBvZiAxIHRvIDEyNykKKy8vIFNDTF9MUCBpcyB0aGUgU0NMIGxvdyBwZXJpb2QgKGZpeGVkIGF0IDYpLgorLy8gU0NMX0hQIGlzIHRoZSBTQ0wgaGlnaCBwZXJpb2QgKGZpeGVkIGF0IDQpLgorLy8gQ0xLX1BSRCBpcyB0aGUgc3lzdGVtIGNsb2NrIHBlcmlvZCBpbiBucy4KKyNkZWZpbmUgSTJDX01UUFJfVFBSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBJMkNfTVRQUl9UUFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEkyQ19NVFBSX1RQUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19NSU1SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gSU0KKy8vCisvLyBJbnRlcnJ1cHQgbWFzaworLy8KKy8vIDA6IFRoZSBNUklTLlJJUyBpbnRlcnJ1cHQgaXMgc3VwcHJlc3NlZCBhbmQgbm90IHNlbnQgdG8gdGhlIGludGVycnVwdAorLy8gY29udHJvbGxlci4KKy8vIDE6IFRoZSBtYXN0ZXIgaW50ZXJydXB0IGlzIHNlbnQgdG8gdGhlIGludGVycnVwdCBjb250cm9sbGVyIHdoZW4gdGhlCisvLyBNUklTLlJJUyBpcyBzZXQuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgSTJDX01JTVJfSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTUlNUl9JTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19NSU1SX0lNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01JTVJfSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfTUlNUl9JTV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NSU1SX0lNX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19NUklTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gUklTCisvLworLy8gUmF3IGludGVycnVwdCBzdGF0dXMKKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQKKy8vIDE6IEEgbWFzdGVyIGludGVycnVwdCBpcyBwZW5kaW5nLgorLy8KKy8vIFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIHRoZSBNSUNSLklDIGJpdCAuCisjZGVmaW5lIEkyQ19NUklTX1JJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01SSVNfUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfTVJJU19SSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NUklTX1JJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19NTUlTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gTUlTCisvLworLy8gTWFza2VkIGludGVycnVwdCBzdGF0dXMKKy8vCisvLyAwOiBBbiBpbnRlcnJ1cHQgaGFzIG5vdCBvY2N1cnJlZCBvciBpcyBtYXNrZWQuCisvLyAxOiBBIG1hc3RlciBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKy8vCisvLyBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byB0aGUgTUlDUi5JQyBiaXQgLgorI2RlZmluZSBJMkNfTU1JU19NSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NTUlTX01JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJDX01NSVNfTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTU1JU19NSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJDX09fTUlDUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIElDCisvLworLy8gSW50ZXJydXB0IGNsZWFyCisvLyBXcml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIE1SSVMuUklTIGFuZCAgTU1JUy5NSVMgLgorLy8KKy8vIFJlYWRpbmcgdGhpcyByZWdpc3RlciByZXR1cm5zIG5vIG1lYW5pbmdmdWwgZGF0YS4KKyNkZWZpbmUgSTJDX01JQ1JfSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTUlDUl9JQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19NSUNSX0lDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01JQ1JfSUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX01DUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzVdIFNGRQorLy8KKy8vIEkyQyBzbGF2ZSBmdW5jdGlvbiBlbmFibGUKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFNsYXZlIG1vZGUgaXMgZW5hYmxlZC4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBTbGF2ZSBtb2RlIGlzIGRpc2FibGVkLgorI2RlZmluZSBJMkNfTUNSX1NGRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEkyQ19NQ1JfU0ZFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgSTJDX01DUl9TRkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMkNfTUNSX1NGRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEkyQ19NQ1JfU0ZFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSTJDX01DUl9TRkVfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs0XSBNRkUKKy8vCisvLyBJMkMgbWFzdGVyIGZ1bmN0aW9uIGVuYWJsZQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgTWFzdGVyIG1vZGUgaXMgZW5hYmxlZC4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBNYXN0ZXIgbW9kZSBpcyBkaXNhYmxlZC4KKyNkZWZpbmUgSTJDX01DUl9NRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJMkNfTUNSX01GRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEkyQ19NQ1JfTUZFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSTJDX01DUl9NRkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBJMkNfTUNSX01GRV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEkyQ19NQ1JfTUZFX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gTFBCSworLy8KKy8vIEkyQyBsb29wYmFjaworLy8KKy8vIDA6IE5vcm1hbCBvcGVyYXRpb24KKy8vIDE6IExvb3BiYWNrIG9wZXJhdGlvbiAodGVzdCBtb2RlKQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIFRlc3QgTW9kZQorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgVGVzdCBNb2RlCisjZGVmaW5lIEkyQ19NQ1JfTFBCSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01DUl9MUEJLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfTUNSX0xQQktfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NQ1JfTFBCS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJDX01DUl9MUEJLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTUNSX0xQQktfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKworI2VuZGlmIC8vIF9fSTJDX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2kycy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfaTJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmNmIzYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2kycy5oCkBAIC0wLDAgKzEsMTAyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2kyc19oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19JMlNfSF9fCisjZGVmaW5lIF9fSFdfSTJTX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEkyUyBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBXQ0xLIFNvdXJjZSBTZWxlY3Rpb24KKyNkZWZpbmUgSTJTX09fQUlGV0NMS1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBETUEgQnVmZmVyIFNpemUgQ29uZmlndXJhdGlvbgorI2RlZmluZSBJMlNfT19BSUZETUFDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIFBpbiBEaXJlY3Rpb24KKyNkZWZpbmUgSTJTX09fQUlGRElSQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBTZXJpYWwgSW50ZXJmYWNlIEZvcm1hdCBDb25maWd1cmF0aW9uCisjZGVmaW5lIEkyU19PX0FJRkZNVENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gV29yZCBTZWxlY3Rpb24gQml0IE1hc2sgZm9yIFBpbiAwCisjZGVmaW5lIEkyU19PX0FJRldNQVNLMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gV29yZCBTZWxlY3Rpb24gQml0IE1hc2sgZm9yIFBpbiAxCisjZGVmaW5lIEkyU19PX0FJRldNQVNLMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gV29yZCBTZWxlY3Rpb24gQml0IE1hc2sgZm9yIFBpbiAyCisjZGVmaW5lIEkyU19PX0FJRldNQVNLMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gQXVkaW8gSW50ZXJmYWNlIFBXTSBEZWJ1ZyBWYWx1ZQorI2RlZmluZSBJMlNfT19BSUZQV01WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIERNQSBJbnB1dCBCdWZmZXIgTmV4dCBQb2ludGVyCisjZGVmaW5lIEkyU19PX0FJRklOUFRSTkVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworLy8gRE1BIElucHV0IEJ1ZmZlciBDdXJyZW50IFBvaW50ZXIKKyNkZWZpbmUgSTJTX09fQUlGSU5QVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBETUEgT3V0cHV0IEJ1ZmZlciBOZXh0IFBvaW50ZXIKKyNkZWZpbmUgSTJTX09fQUlGT1VUUFRSTkVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorCisvLyBETUEgT3V0cHV0IEJ1ZmZlciBDdXJyZW50IFBvaW50ZXIKKyNkZWZpbmUgSTJTX09fQUlGT1VUUFRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBTYW1wbGVTdGFNUCBHZW5lcmF0b3IgQ29udHJvbCBSZWdpc3RlcgorI2RlZmluZSBJMlNfT19TVE1QQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisKKy8vIENhcHR1cmVkIFhPU0MgQ291bnRlciBWYWx1ZSwgQ2FwdHVyZSBDaGFubmVsIDAKKyNkZWZpbmUgSTJTX09fU1RNUFhDTlRDQVBUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorCisvLyBYT1NDIFBlcmlvZCBWYWx1ZQorI2RlZmluZSBJMlNfT19TVE1QWFBFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNDCisKKy8vIENhcHR1cmVkIFdDTEsgQ291bnRlciBWYWx1ZSwgQ2FwdHVyZSBDaGFubmVsIDAKKyNkZWZpbmUgSTJTX09fU1RNUFdDTlRDQVBUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorCisvLyBXQ0xLIENvdW50ZXIgUGVyaW9kIFZhbHVlCisjZGVmaW5lIEkyU19PX1NUTVBXUEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKworLy8gV0NMSyBDb3VudGVyIFRyaWdnZXIgVmFsdWUgZm9yIElucHV0IFBpbnMKKyNkZWZpbmUgSTJTX09fU1RNUElOVFJJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAorCisvLyBXQ0xLIENvdW50ZXIgVHJpZ2dlciBWYWx1ZSBmb3IgT3V0cHV0IFBpbnMKKyNkZWZpbmUgSTJTX09fU1RNUE9VVFRSSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0QworCisvLyBXQ0xLIENvdW50ZXIgU2V0IE9wZXJhdGlvbgorI2RlZmluZSBJMlNfT19TVE1QV1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisKKy8vIFdDTEsgQ291bnRlciBBZGQgT3BlcmF0aW9uCisjZGVmaW5lIEkyU19PX1NUTVBXQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKworLy8gWE9TQyBNaW5pbXVtIFBlcmlvZCBWYWx1ZQorI2RlZmluZSBJMlNfT19TVE1QWFBFUk1JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4CisKKy8vIEN1cnJlbnQgVmFsdWUgb2YgV0NOVAorI2RlZmluZSBJMlNfT19TVE1QV0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVDCisKKy8vIEN1cnJlbnQgVmFsdWUgb2YgWENOVAorI2RlZmluZSBJMlNfT19TVE1QWENOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisKKy8vIENhcHR1cmVkIFhPU0MgQ291bnRlciBWYWx1ZSwgQ2FwdHVyZSBDaGFubmVsIDEKKyNkZWZpbmUgSTJTX09fU1RNUFhDTlRDQVBUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAorCisvLyBDYXB0dXJlZCBXQ0xLIENvdW50ZXIgVmFsdWUsIENhcHR1cmUgQ2hhbm5lbCAxCisjZGVmaW5lIEkyU19PX1NUTVBXQ05UQ0FQVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKKworLy8gTWFza2VkIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyNkZWZpbmUgSTJTX09fSVJRTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorCisvLyBSYXcgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorI2RlZmluZSBJMlNfT19JUlFGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc0CisKKy8vIEludGVycnVwdCBTZXQgUmVnaXN0ZXIKKyNkZWZpbmUgSTJTX09fSVJRU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAorCisvLyBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIKKyNkZWZpbmUgSTJTX09fSVJRQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX0FJRldDTEtTUkMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBXQ0xLX0lOVgorLy8KKy8vIEludmVydHMgV0NMSyBzb3VyY2UgKHBhZCBvciBpbnRlcm5hbCkgd2hlbiBzZXQuCisvLworLy8gMDogTm90IGludmVydGVkCisvLyAxOiBJbnZlcnRlZAorI2RlZmluZSBJMlNfQUlGV0NMS1NSQ19XQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyU19BSUZXQ0xLU1JDX1dDTEtfSU5WX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJTX0FJRldDTEtTUkNfV0NMS19JTlZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfQUlGV0NMS1NSQ19XQ0xLX0lOVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgIFsxOjBdIFdDTEtfU1JDCisvLworLy8gU2VsZWN0cyBXQ0xLIHNvdXJjZSBmb3IgQUlGIChzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEJDTEsgc291cmNlKS4gVGhlCisvLyBCQ0xLIHNvdXJjZSBpcyBkZWZpbmVkIGluIHRoZSBQUkNNOkkyU0JDTEtTRUwuU1JDCisvLyBFTlVNczoKKy8vIFJFU0VSVkVEICAgICAgICAgICAgICAgICBOb3Qgc3VwcG9ydGVkLiBXaWxsIGdpdmUgc2FtZSBXQ0xLIGFzICdOT05FJworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICgnMDAnKQorLy8gSU5UICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsIFdDTEsgZ2VuZXJhdG9yLCBmcm9tIG1vZHVsZSBQUkNNL0Nsa0N0cmwKKy8vIEVYVCAgICAgICAgICAgICAgICAgICAgICBFeHRlcm5hbCBXQ0xLIGdlbmVyYXRvciwgZnJvbSBwYWQKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBOb25lICgnMCcpCisjZGVmaW5lIEkyU19BSUZXQ0xLU1JDX1dDTEtfU1JDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJTX0FJRldDTEtTUkNfV0NMS19TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBJMlNfQUlGV0NMS1NSQ19XQ0xLX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyU19BSUZXQ0xLU1JDX1dDTEtfU1JDX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSTJTX0FJRldDTEtTUkNfV0NMS19TUkNfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMlNfQUlGV0NMS1NSQ19XQ0xLX1NSQ19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyU19BSUZXQ0xLU1JDX1dDTEtfU1JDX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19BSUZETUFDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBFTkRfRlJBTUVfSURYCisvLworLy8gRGVmaW5lcyB0aGUgbGVuZ3RoIG9mIHRoZSBXcml0aW5nIGEgbm9uLXplcm8gdmFsdWUgdG8gdGhpcyByZWdpc3RlcmZpZWxkCisvLyBlbmFibGVzIGFuZCBpbml0aWFsaXplcyBBSUYuIE5vdGUgdGhhdCBiZWZvcmUgZG9pbmcgc28sIGFsbCBvdGhlcgorLy8gY29uZmlndXJhdGlvbiBtdXN0IGhhdmUgYmVlbiBkb25lLCBhbmQgQUlGSU5QVFIvQUlGT1VUUFRSIG11c3QgaGF2ZSBiZWVuCisvLyBsb2FkZWQuCisjZGVmaW5lIEkyU19BSUZETUFDRkdfRU5EX0ZSQU1FX0lEWF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSTJTX0FJRkRNQUNGR19FTkRfRlJBTUVfSURYX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBJMlNfQUlGRE1BQ0ZHX0VORF9GUkFNRV9JRFhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fQUlGRElSQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzk6OF0gQUQyCisvLworLy8gQ29uZmlndXJlcyB0aGUgQUQyIGF1ZGlvIGRhdGEgcGluIHVzYWdlCisvLworLy8gMHgzOiBSZXNlcnZlZAorLy8gRU5VTXM6CisvLyBPVVQgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IG1vZGUKKy8vIElOICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCBtb2RlCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm90IGluIHVzZSAoZGlzYWJsZWQpCisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQyX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDJfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjRdIEFEMQorLy8KKy8vIENvbmZpZ3VyZXMgdGhlIEFEMSBhdWRpbyBkYXRhIHBpbiB1c2FnZToKKy8vCisvLyAweDM6IFJlc2VydmVkCisvLyBFTlVNczoKKy8vIE9VVCAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgbW9kZQorLy8gSU4gICAgICAgICAgICAgICAgICAgICAgIElucHV0IG1vZGUKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBOb3QgaW4gdXNlIChkaXNhYmxlZCkKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDFfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMV9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQxX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzE6MF0gQUQwCisvLworLy8gQ29uZmlndXJlcyB0aGUgQUQwIGF1ZGlvIGRhdGEgcGluIHVzYWdlOgorLy8KKy8vIDB4MzogUmVzZXJ2ZWQKKy8vIEVOVU1zOgorLy8gT1VUICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBtb2RlCisvLyBJTiAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgbW9kZQorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vdCBpbiB1c2UgKGRpc2FibGVkKQorI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQwX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDBfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX0FJRkZNVENGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjhdIERBVEFfREVMQVkKKy8vCisvLyBUaGUgbnVtYmVyIG9mIEJDTEsgcGVyaW9kcyBiZXR3ZWVuIGEgV0NMSyBlZGdlIGFuZCBNU0Igb2YgdGhlIGZpcnN0IHdvcmQgaW4KKy8vIGEgcGhhc2U6CisvLworLy8gMHgwMDogTEpGIGZvcm1hdAorLy8gMHgwMTogSTJTIGFuZCBEU1AgZm9ybWF0CisvLyAweDAyOiBSSkYgZm9ybWF0CisvLyAuLi4KKy8vIDB4RkY6IFJKRiBmb3JtYXQKKy8vCisvLyBOb3RlOiBXaGVuIDAsIE1TQiBvZiB0aGUgbmV4dCB3b3JkIHdpbGwgYmUgb3V0cHV0IGluIHRoZSBpZGxlIHBlcmlvZCBiZXR3ZWVuCisvLyBMU0Igb2YgdGhlIHByZXZpb3VzIHdvcmQgYW5kIHRoZSBzdGFydCBvZiB0aGUgbmV4dCB3b3JkLiBPdGhlcndpc2UgbG9naWNhbCAwCisvLyB3aWxsIGJlIG91dHB1dCB1bnRpbCB0aGUgZGF0YSBkZWxheSBoYXMgZXhwaXJlZC4KKyNkZWZpbmUgSTJTX0FJRkZNVENGR19EQVRBX0RFTEFZX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX0RBVEFfREVMQVlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEkyU19BSUZGTVRDRkdfREFUQV9ERUxBWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gTUVNX0xFTl8yNAorLy8KKy8vIFRoZSBzaXplIG9mIGVhY2ggd29yZCBzdG9yZWQgdG8gb3IgbG9hZGVkIGZyb20gbWVtb3J5OgorLy8gRU5VTXM6CisvLyAyNEJJVCAgICAgICAgICAgICAgICAgICAgMjQtYml0IChvbmUgOCBiaXQgYW5kIG9uZSAxNiBiaXQgbG9ja2VkIGFjY2VzcyBwZXIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGUpCisvLyAxNkJJVCAgICAgICAgICAgICAgICAgICAgMTYtYml0IChvbmUgMTYgYml0IGFjY2VzcyBwZXIgc2FtcGxlKQorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX01FTV9MRU5fMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEkyU19BSUZGTVRDRkdfTUVNX0xFTl8yNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19NRU1fTEVOXzI0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX01FTV9MRU5fMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEkyU19BSUZGTVRDRkdfTUVNX0xFTl8yNF8yNEJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19NRU1fTEVOXzI0XzE2QklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs2XSBTTVBMX0VER0UKKy8vCisvLyBPbiB0aGUgc2VyaWFsIGF1ZGlvIGludGVyZmFjZSwgZGF0YSAoYW5kIHdjbGspIGlzIHNhbXBsZWQgYW5kIGNsb2NrZWQgb3V0IG9uCisvLyBvcHBvc2l0ZSBlZGdlcyBvZiBCQ0xLLgorLy8gRU5VTXM6CisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgRGF0YSBpcyBzYW1wbGVkIG9uIHRoZSBwb3NpdGl2ZSBlZGdlIGFuZCBjbG9ja2VkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IG9uIHRoZSBuZWdhdGl2ZSBlZGdlLgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIERhdGEgaXMgc2FtcGxlZCBvbiB0aGUgbmVnYXRpdmUgZWRnZSBhbmQgY2xvY2tlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG91dCBvbiB0aGUgcG9zaXRpdmUgZWRnZS4KKyNkZWZpbmUgSTJTX0FJRkZNVENGR19TTVBMX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX1NNUExfRURHRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEkyU19BSUZGTVRDRkdfU01QTF9FREdFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19TTVBMX0VER0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX1NNUExfRURHRV9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEkyU19BSUZGTVRDRkdfU01QTF9FREdFX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNV0gRFVBTF9QSEFTRQorLy8KKy8vIFNlbGVjdHMgZHVhbC0gb3Igc2luZ2xlLXBoYXNlIGZvcm1hdC4KKy8vCisvLyAwOiBTaW5nbGUtcGhhc2UKKy8vIDE6IER1YWwtcGhhc2UKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19EVUFMX1BIQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX0RVQUxfUEhBU0VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEkyU19BSUZGTVRDRkdfRFVBTF9QSEFTRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19EVUFMX1BIQVNFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICBbNDowXSBXT1JEX0xFTgorLy8KKy8vIE51bWJlciBvZiBiaXRzIHBlciB3b3JkICg4LTI0KToKKy8vIEluIHNpbmdsZS1waGFzZSBmb3JtYXQsIHRoaXMgaXMgdGhlIGV4YWN0IG51bWJlciBvZiBiaXRzIHBlciB3b3JkLgorLy8gSW4gZHVhbC1waGFzZSBmb3JtYXQsIHRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJpdHMgcGVyIHdvcmQuCisvLworLy8gVmFsdWVzIGJlbG93IDggYW5kIGFib3ZlIDI0IGdpdmUgdW5kZWZpbmVkIGJlaGF2aW9yLiBEYXRhIHdyaXR0ZW4gdG8gbWVtb3J5CisvLyBpcyBhbHdheXMgYWxpZ25lZCB0byAxNiBvciAyNCBiaXRzIGFzIGRlZmluZWQgYnkgTUVNX0xFTl8yNC4gQml0IHdpZHRocyB0aGF0CisvLyBkaWZmZXIgZnJvbSB0aGlzIGFsaWdubWVudCB3aWxsIGVpdGhlciBiZSB0cnVuY2F0ZWQgb3IgemVybyBwYWRkZWQuCisjZGVmaW5lIEkyU19BSUZGTVRDRkdfV09SRF9MRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19XT1JEX0xFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX1dPUkRfTEVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fQUlGV01BU0swCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gTUFTSworLy8KKy8vIEJpdC1tYXNrIGluZGljYXRpbmcgdmFsaWQgY2hhbm5lbHMgaW4gYSBmcmFtZSBvbiBBRDAuCisvLworLy8gSW4gc2luZ2xlLXBoYXNlIG1vZGUsIGVhY2ggYml0IHJlcHJlc2VudHMgb25lIGNoYW5uZWwsIHN0YXJ0aW5nIHdpdGggTFNCIGZvcgorLy8gdGhlIGZpcnN0IHdvcmQgaW4gdGhlIGZyYW1lLiBBIGZyYW1lIGNhbiBjb250YWluIHVwIHRvIDggY2hhbm5lbHMuICBDaGFubmVscworLy8gdGhhdCBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBtYXNrIHdpbGwgbm90IGJlIHNhbXBsZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnksCisvLyBhbmQgY2xvY2tlZCBvdXQgYXMgJzAnLgorLy8KKy8vIEluIGR1YWwtcGhhc2UgbW9kZSwgb25seSB0aGUgdHdvIExTQnMgYXJlIGNvbnNpZGVyZWQuIEZvciBhIHN0ZXJlbworLy8gY29uZmlndXJhdGlvbiwgc2V0IGJvdGggYml0cy4gRm9yIGEgbW9ubyBjb25maWd1cmF0aW9uLCBzZXQgYml0IDAgb25seS4gSW4KKy8vIG1vbm8gbW9kZSwgb25seSBjaGFubmVsIDAgd2lsbCBiZSBzYW1wbGVkIGFuZCBzdG9yZWQgdG8gbWVtb3J5LCBhbmQgY2hhbm5lbAorLy8gMCB3aWxsIGJlIHJlcGVhdGVkIHdoZW4gY2xvY2tlZCBvdXQuCisvLworLy8gSW4gbW9ubyBtb2RlLCBvbmx5IGNoYW5uZWwgMCB3aWxsIGJlIHNhbXBsZWQgYW5kIHN0b3JlZCB0byBtZW1vcnksIGFuZAorLy8gY2hhbm5lbCAwIHdpbGwgYmUgcmVwZWF0ZWQgaW4gdGhlIHNlY29uZCBwaGFzZSB3aGVuIGNsb2NrZWQgb3V0LgorLy8KKy8vIElmIGFsbCBiaXRzIGFyZSB6ZXJvLCBubyBpbnB1dCB3b3JkcyB3aWxsIGJlIHN0b3JlZCB0byBtZW1vcnksIGFuZCB0aGUKKy8vIG91dHB1dCBkYXRhIGxpbmVzIHdpbGwgYmUgY29uc3RhbnQgJzAnLiBUaGlzIGNhbiBiZSB1dGlsaXplZCB3aGVuIFBXTSBkZWJ1ZworLy8gb3V0cHV0IGlzIGRlc2lyZWQgd2l0aG91dCBhbnkgYWN0aXZlbHkgdXNlZCBvdXRwdXQgcGlucy4KKyNkZWZpbmUgSTJTX0FJRldNQVNLMF9NQVNLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJMlNfQUlGV01BU0swX01BU0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEkyU19BSUZXTUFTSzBfTUFTS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19BSUZXTUFTSzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBNQVNLCisvLworLy8gQml0LW1hc2sgaW5kaWNhdGluZyB2YWxpZCBjaGFubmVscyBpbiBhIGZyYW1lIG9uIEFEMS4KKy8vCisvLyBJbiBzaW5nbGUtcGhhc2UgbW9kZSwgZWFjaCBiaXQgcmVwcmVzZW50cyBvbmUgY2hhbm5lbCwgc3RhcnRpbmcgd2l0aCBMU0IgZm9yCisvLyB0aGUgZmlyc3Qgd29yZCBpbiB0aGUgZnJhbWUuIEEgZnJhbWUgY2FuIGNvbnRhaW4gdXAgdG8gOCBjaGFubmVscy4gIENoYW5uZWxzCisvLyB0aGF0IGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIG1hc2sgd2lsbCBub3QgYmUgc2FtcGxlZCBhbmQgc3RvcmVkIGluIG1lbW9yeSwKKy8vIGFuZCBjbG9ja2VkIG91dCBhcyAnMCcuCisvLworLy8gSW4gZHVhbC1waGFzZSBtb2RlLCBvbmx5IHRoZSB0d28gTFNCcyBhcmUgY29uc2lkZXJlZC4gRm9yIGEgc3RlcmVvCisvLyBjb25maWd1cmF0aW9uLCBzZXQgYm90aCBiaXRzLiBGb3IgYSBtb25vIGNvbmZpZ3VyYXRpb24sIHNldCBiaXQgMCBvbmx5LiBJbgorLy8gbW9ubyBtb2RlLCBvbmx5IGNoYW5uZWwgMCB3aWxsIGJlIHNhbXBsZWQgYW5kIHN0b3JlZCB0byBtZW1vcnksIGFuZCBjaGFubmVsCisvLyAwIHdpbGwgYmUgcmVwZWF0ZWQgd2hlbiBjbG9ja2VkIG91dC4KKy8vCisvLyBJbiBtb25vIG1vZGUsIG9ubHkgY2hhbm5lbCAwIHdpbGwgYmUgc2FtcGxlZCBhbmQgc3RvcmVkIHRvIG1lbW9yeSwgYW5kCisvLyBjaGFubmVsIDAgd2lsbCBiZSByZXBlYXRlZCBpbiB0aGUgc2Vjb25kIHBoYXNlIHdoZW4gY2xvY2tlZCBvdXQuCisvLworLy8gSWYgYWxsIGJpdHMgYXJlIHplcm8sIG5vIGlucHV0IHdvcmRzIHdpbGwgYmUgc3RvcmVkIHRvIG1lbW9yeSwgYW5kIHRoZQorLy8gb3V0cHV0IGRhdGEgbGluZXMgd2lsbCBiZSBjb25zdGFudCAnMCcuIFRoaXMgY2FuIGJlIHV0aWxpemVkIHdoZW4gUFdNIGRlYnVnCisvLyBvdXRwdXQgaXMgZGVzaXJlZCB3aXRob3V0IGFueSBhY3RpdmVseSB1c2VkIG91dHB1dCBwaW5zLgorI2RlZmluZSBJMlNfQUlGV01BU0sxX01BU0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEkyU19BSUZXTUFTSzFfTUFTS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgSTJTX0FJRldNQVNLMV9NQVNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX0FJRldNQVNLMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIE1BU0sKKy8vCisvLyBCaXQtbWFzayBpbmRpY2F0aW5nIHZhbGlkIGNoYW5uZWxzIGluIGEgZnJhbWUgb24gQUQyCisvLworLy8gSW4gc2luZ2xlLXBoYXNlIG1vZGUsIGVhY2ggYml0IHJlcHJlc2VudHMgb25lIGNoYW5uZWwsIHN0YXJ0aW5nIHdpdGggTFNCIGZvcgorLy8gdGhlIGZpcnN0IHdvcmQgaW4gdGhlIGZyYW1lLiBBIGZyYW1lIGNhbiBjb250YWluIHVwIHRvIDggY2hhbm5lbHMuICBDaGFubmVscworLy8gdGhhdCBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBtYXNrIHdpbGwgbm90IGJlIHNhbXBsZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnksCisvLyBhbmQgY2xvY2tlZCBvdXQgYXMgJzAnLgorLy8KKy8vIEluIGR1YWwtcGhhc2UgbW9kZSwgb25seSB0aGUgdHdvIExTQnMgYXJlIGNvbnNpZGVyZWQuIEZvciBhIHN0ZXJlbworLy8gY29uZmlndXJhdGlvbiwgc2V0IGJvdGggYml0cy4gRm9yIGEgbW9ubyBjb25maWd1cmF0aW9uLCBzZXQgYml0IDAgb25seS4gSW4KKy8vIG1vbm8gbW9kZSwgb25seSBjaGFubmVsIDAgd2lsbCBiZSBzYW1wbGVkIGFuZCBzdG9yZWQgdG8gbWVtb3J5LCBhbmQgY2hhbm5lbAorLy8gMCB3aWxsIGJlIHJlcGVhdGVkIHdoZW4gY2xvY2tlZCBvdXQuCisvLworLy8gSW4gbW9ubyBtb2RlLCBvbmx5IGNoYW5uZWwgMCB3aWxsIGJlIHNhbXBsZWQgYW5kIHN0b3JlZCB0byBtZW1vcnksIGFuZAorLy8gY2hhbm5lbCAwIHdpbGwgYmUgcmVwZWF0ZWQgaW4gdGhlIHNlY29uZCBwaGFzZSB3aGVuIGNsb2NrZWQgb3V0LgorLy8KKy8vIElmIGFsbCBiaXRzIGFyZSB6ZXJvLCBubyBpbnB1dCB3b3JkcyB3aWxsIGJlIHN0b3JlZCB0byBtZW1vcnksIGFuZCB0aGUKKy8vIG91dHB1dCBkYXRhIGxpbmVzIHdpbGwgYmUgY29uc3RhbnQgJzAnLiBUaGlzIGNhbiBiZSB1dGlsaXplZCB3aGVuIFBXTSBkZWJ1ZworLy8gb3V0cHV0IGlzIGRlc2lyZWQgd2l0aG91dCBhbnkgYWN0aXZlbHkgdXNlZCBvdXRwdXQgcGlucy4KKyNkZWZpbmUgSTJTX0FJRldNQVNLMl9NQVNLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJMlNfQUlGV01BU0syX01BU0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEkyU19BSUZXTUFTSzJfTUFTS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19BSUZQV01WQUxVRQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIFBVTFNFX1dJRFRICisvLworLy8gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhpcyByZWdpc3RlciBkZXRlcm1pbmVzIHRoZSB3aWR0aCBvZiB0aGUgYWN0aXZlIGhpZ2gKKy8vIFBXTSBwdWxzZSAocHdtX2RlYnVnKSwgd2hpY2ggc3RhcnRzIHRvZ2V0aGVyIHdpdGggTVNCIG9mIHRoZSBmaXJzdCBvdXRwdXQKKy8vIHdvcmQgaW4gYSBETUEgYnVmZmVyOgorLy8KKy8vIDB4MDAwMDogQ29uc3RhbnQgbG93CisvLyAweDAwMDE6IFdpZHRoIG9mIHRoZSBwdWxzZSAobnVtYmVyIG9mIEJDTEsgY3ljbGVzLCBoZXJlIDEpLgorLy8gLi4uCisvLyAweEZGRkU6IFdpZHRoIG9mIHRoZSBwdWxzZSAobnVtYmVyIG9mIEJDTEsgY3ljbGVzLCBoZXJlIDY1NTM0KS4KKy8vIDB4RkZGRjogQ29uc3RhbnQgaGlnaAorI2RlZmluZSBJMlNfQUlGUFdNVkFMVUVfUFVMU0VfV0lEVEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEkyU19BSUZQV01WQUxVRV9QVUxTRV9XSURUSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSTJTX0FJRlBXTVZBTFVFX1BVTFNFX1dJRFRIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX0FJRklOUFRSTkVYVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFBUUgorLy8KKy8vIFBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ5dGUgaW4gdGhlIG5leHQgRE1BIGlucHV0IGJ1ZmZlci4KKy8vCisvLyBUaGUgcmVhZCB2YWx1ZSBlcXVhbHMgdGhlIGxhc3Qgd3JpdHRlbiB2YWx1ZSB1bnRpbCB0aGUgY3VycmVudGx5IHVzZWQgRE1BCisvLyBpbnB1dCBidWZmZXIgaXMgY29tcGxldGVkLCBhbmQgdGhlbiBiZWNvbWVzIG51bGwgd2hlbiB0aGUgbGFzdCB3cml0dGVuIHZhbHVlCisvLyBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgRE1BIGNvbnRyb2xsZXIgdG8gc3RhcnQgb24gdGhlIG5leHQgYnVmZmVyLiBUaGlzIGV2ZW50CisvLyBpcyBzaWduYWxpemVkIGJ5IGFpZl9kbWFfaW5faXJxLgorLy8KKy8vIEF0IHN0YXJ0dXAsIHRoZSB2YWx1ZSBtdXN0IGJlIHdyaXR0ZW4gb25jZSBiZWZvcmUgYW5kIG9uY2UgYWZ0ZXIgY29uZmlndXJpbmcKKy8vIHRoZSBETUEgYnVmZmVyIHNpemUgaW4gQUlGRE1BQ0ZHLgorLy8KKy8vIFRoZSBuZXh0IHBvaW50ZXIgbXVzdCBiZSB3cml0dGVuIHRvIHRoaXMgcmVnaXN0ZXIgd2hpbGUgdGhlIERNQSBmdW5jdGlvbgorLy8gdXNlcyB0aGUgcHJldmlvdXNseSB3cml0dGVuIHBvaW50ZXIuIElmIG5vdCB3cml0dGVuIGluIHRpbWUsCisvLyBJUlFGTEFHUy5QVFJfRVJSIHdpbGwgYmUgcmFpc2VkIGFuZCBhbGwgaW5wdXQgcGlucyB3aWxsIGJlIGRpc2FibGVkLgorLy8KKy8vIE5vdGUgdGhlIGZvbGxvd2luZyBsaW1pdGF0aW9uczoKKy8vIC0gIEFkZHJlc3Mgc3BhY2Ugd3JhcHBpbmcgaXMgbm90IHN1cHBvcnRlZC4gVGhhdCBtZWFucyBhZGRyZXNzKGxhc3Qgc2FtcGxlKQorLy8gbXVzdCBiZSBoaWdoZXIgdGhhbiBhZGRyZXNzKGZpcnN0IHNhbXBsZS4KKy8vIC0gIEEgRE1BIGJsb2NrIGNhbm5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGVuZCBvZiB0aGUgYWRkcmVzcyBzcGFjZSwgdGhhdAorLy8gbWVhbnMgYSBibG9jayBjYW5ub3QgY29udGFpbiB0aGUgYWRkcmVzcyAweEZGRkYuCisjZGVmaW5lIEkyU19BSUZJTlBUUk5FWFRfUFRSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgSTJTX0FJRklOUFRSTkVYVF9QVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBJMlNfQUlGSU5QVFJORVhUX1BUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fQUlGSU5QVFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBQVFIKKy8vCisvLyBWYWx1ZSBvZiB0aGUgRE1BIGlucHV0IGJ1ZmZlciBwb2ludGVyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBETUEgY29udHJvbGxlci4KKy8vIEluY3JlbWVudGVkIGJ5IDEgKGJ5dGUpIG9yIDIgKHdvcmQpIGZvciBlYWNoIEFIQiBhY2Nlc3MuCisjZGVmaW5lIEkyU19BSUZJTlBUUl9QVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgSTJTX0FJRklOUFRSX1BUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBJMlNfQUlGSU5QVFJfUFRSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fQUlGT1VUUFRSTkVYVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFBUUgorLy8KKy8vIFBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ5dGUgaW4gdGhlIG5leHQgRE1BIG91dHB1dCBidWZmZXIuCisvLworLy8gVGhlIHJlYWQgdmFsdWUgZXF1YWxzIHRoZSBsYXN0IHdyaXR0ZW4gdmFsdWUgdW50aWwgdGhlIGN1cnJlbnRseSB1c2VkIERNQQorLy8gb3V0cHV0IGJ1ZmZlciBpcyBjb21wbGV0ZWQsIGFuZCB0aGVuIGJlY29tZXMgbnVsbCB3aGVuIHRoZSBsYXN0IHdyaXR0ZW4KKy8vIHZhbHVlIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBETUEgY29udHJvbGxlciB0byBzdGFydCBvbiB0aGUgbmV4dCBidWZmZXIuIFRoaXMKKy8vIGV2ZW50IGlzIHNpZ25hbGl6ZWQgYnkgYWlmX2RtYV9vdXRfaXJxLgorLy8KKy8vIEF0IHN0YXJ0dXAsIHRoZSB2YWx1ZSBtdXN0IGJlIHdyaXR0ZW4gb25jZSBiZWZvcmUgYW5kIG9uY2UgYWZ0ZXIgY29uZmlndXJpbmcKKy8vIHRoZSBETUEgYnVmZmVyIHNpemUgaW4gQUlGRE1BQ0ZHLiBBdCB0aGlzIHRpbWUsIHRoZSBmaXJzdCB0d28gc2FtcGxlcyB3aWxsCisvLyBiZSBmZXRjaGVkIGZyb20gbWVtb3J5LgorLy8KKy8vIFRoZSBuZXh0IHBvaW50ZXIgbXVzdCBiZSB3cml0dGVuIHRvIHRoaXMgcmVnaXN0ZXIgd2hpbGUgdGhlIERNQSBmdW5jdGlvbgorLy8gdXNlcyB0aGUgcHJldmlvdXNseSB3cml0dGVuIHBvaW50ZXIuIElmIG5vdCB3cml0dGVuIGluIHRpbWUsCisvLyBJUlFGTEFHUy5QVFJfRVJSIHdpbGwgYmUgcmFpc2VkIGFuZCBhbGwgb3V0cHV0IHBpbnMgd2lsbCBiZSBkaXNhYmxlZC4KKy8vCisvLyBOb3RlIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnM6CisvLyAtICBBZGRyZXNzIHNwYWNlIHdyYXBwaW5nIGlzIG5vdCBzdXBwb3J0ZWQuIFRoYXQgbWVhbnMgYWRkcmVzcyhsYXN0IHNhbXBsZSkKKy8vIG11c3QgYmUgaGlnaGVyIHRoYW4gYWRkcmVzcyhmaXJzdCBzYW1wbGUuCisvLyAtICBBIERNQSBibG9jayBjYW5ub3QgYmUgYWxpZ25lZCB3aXRoIHRoZSBlbmQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UsIHRoYXQKKy8vIG1lYW5zIGEgYmxvY2sgY2Fubm90IGNvbnRhaW4gdGhlIGFkZHJlc3MgMHhGRkZGLgorI2RlZmluZSBJMlNfQUlGT1VUUFRSTkVYVF9QVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEkyU19BSUZPVVRQVFJORVhUX1BUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgSTJTX0FJRk9VVFBUUk5FWFRfUFRSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX0FJRk9VVFBUUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFBUUgorLy8KKy8vIFZhbHVlIG9mIHRoZSBETUEgb3V0cHV0IGJ1ZmZlciBwb2ludGVyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBETUEgY29udHJvbGxlcgorLy8gSW5jcmVtZW50ZWQgYnkgMSAoYnl0ZSkgb3IgMiAod29yZCkgZm9yIGVhY2ggQUhCIGFjY2Vzcy4KKyNkZWZpbmUgSTJTX0FJRk9VVFBUUl9QVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBJMlNfQUlGT1VUUFRSX1BUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEkyU19BSUZPVVRQVFJfUFRSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19TVE1QQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gT1VUX1JEWQorLy8KKy8vIExvdyB1bnRpbCB0aGUgb3V0cHV0IHBpbnMgYXJlIHJlYWR5IHRvIGJlIHN0YXJ0ZWQgYnkgdGhlIHNhbXBsZXN0YW1wCisvLyBnZW5lcmF0b3IuIFdoZW4gc3RhcnRlZCAodGhhdCBpcyBTVE1QT1VUVFJJRyBlcXVhbHMgdGhlIFdDTEsgY291bnRlcikgdGhlCisvLyBiaXQgZ29lcyBiYWNrIGxvdy4KKyNkZWZpbmUgSTJTX1NUTVBDVExfT1VUX1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfU1RNUENUTF9PVVRfUkRZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyU19TVE1QQ1RMX09VVF9SRFlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJTX1NUTVBDVExfT1VUX1JEWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBJTl9SRFkKKy8vCisvLyBMb3cgdW50aWwgdGhlIGlucHV0IHBpbnMgYXJlIHJlYWR5IHRvIGJlIHN0YXJ0ZWQgYnkgdGhlIHNhbXBsZXN0YW1wCisvLyBnZW5lcmF0b3IuIFdoZW4gc3RhcnRlZCAodGhhdCBpcyBTVE1QSU5UUklHIGVxdWFscyB0aGUgV0NMSyBjb3VudGVyKSB0aGUgYml0CisvLyBnb2VzIGJhY2sgbG93LgorI2RlZmluZSBJMlNfU1RNUENUTF9JTl9SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19TVE1QQ1RMX0lOX1JEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSTJTX1NUTVBDVExfSU5fUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMlNfU1RNUENUTF9JTl9SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFNUTVBfRU4KKy8vCisvLyBFbmFibGVzIHRoZSBzYW1wbGVzdGFtcCBnZW5lcmF0b3IuIFRoZSBzYW1wbGVzdGFtcCBnZW5lcmF0b3IgbXVzdCBvbmx5IGJlCisvLyBlbmFibGVkIGFmdGVyIGl0IGhhcyBiZWVuIHByb3Blcmx5IGNvbmZpZ3VyZWQuCisvLyBXaGVuIGNsZWFyZWQsIGFsbCBzYW1wbGVzdGFtcCBnZW5lcmF0b3IgY291bnRlcnMgYW5kIGNhcHR1cmUgdmFsdWVzIGFyZQorLy8gY2xlYXJlZC4KKyNkZWZpbmUgSTJTX1NUTVBDVExfU1RNUF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMlNfU1RNUENUTF9TVE1QX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyU19TVE1QQ1RMX1NUTVBfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX1NUTVBDVExfU1RNUF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX1NUTVBYQ05UQ0FQVDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBDQVBUX1ZBTFVFCisvLworLy8gVGhlIHZhbHVlIG9mIHRoZSBzYW1wbGVzdGFtcCBYT1NDIGNvdW50ZXIgKFNUTVBYQ05ULkNVUlJfVkFMVUUpIGxhc3QgdGltZSBhbgorLy8gZXZlbnQgd2FzIHB1bHNlZCAoZXZlbnQgc291cmNlIHNlbGVjdGVkIGluIFtFVkVOVC5JMlNTVE1QU0VMMC5FVl0gZm9yCisvLyBjaGFubmVsIDApLiBUaGlzIG51bWJlciBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mIDI0IE1IeiBjbG9jayBjeWNsZXMKKy8vIHNpbmNlIHRoZSBsYXN0IHBvc2l0aXZlIGVkZ2Ugb2YgdGhlIHNlbGVjdGVkIFdDTEsuCisvLyBUaGUgdmFsdWUgaXMgY2xlYXJlZCB3aGVuIFNUTVBDVEwuU1RNUF9FTiA9IDAuCisvLyBOb3RlOiBEdWUgdG8gYnVmZmVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24sIFdDTEsgaXMgZGVsYXllZCBieSBhIHNtYWxsCisvLyBudW1iZXIgb2YgQkNMSyBwZXJpb2RzIGFuZCBjbGsgcGVyaW9kcy4KKy8vIE5vdGU6IFdoZW4gY2FsY3VsYXRpbmcgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgc2FtcGxlIHN0YW1wLCBTVE1QWFBFUiBtYXkKKy8vIGJlIGxlc3MgdGhhbiB0aGlzIGJpdCBmaWVsZC4KKyNkZWZpbmUgSTJTX1NUTVBYQ05UQ0FQVDBfQ0FQVF9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJMlNfU1RNUFhDTlRDQVBUMF9DQVBUX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEkyU19TVE1QWENOVENBUFQwX0NBUFRfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19TVE1QWFBFUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIFZBTFVFCisvLworLy8gVGhlIG51bWJlciBvZiAyNCBNSHogY2xvY2sgY3ljbGVzIGluIHRoZSBwcmV2aW91cyBXQ0xLIHBlcmlvZCAodGhhdCBpcyAtCisvLyB0aGUgbmV4dCB2YWx1ZSBvZiB0aGUgWE9TQyBjb3VudGVyIGF0IHRoZSBwb3NpdGl2ZSBXQ0xLIGVkZ2UsIGhhZCBpdCBub3QKKy8vIGJlZW4gcmVzZXQgdG8gMCkuCisvLyBUaGUgdmFsdWUgaXMgY2xlYXJlZCB3aGVuIFNUTVBDVEwuU1RNUF9FTiA9IDAuCisjZGVmaW5lIEkyU19TVE1QWFBFUl9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSTJTX1NUTVBYUEVSX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBJMlNfU1RNUFhQRVJfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fU1RNUFdDTlRDQVBUMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIENBUFRfVkFMVUUKKy8vCisvLyBUaGUgdmFsdWUgb2YgdGhlIHNhbXBsZXN0YW1wIFdDTEsgY291bnRlciAoU1RNUFdDTlQuQ1VSUl9WQUxVRSkgbGFzdCB0aW1lIGFuCisvLyBldmVudCB3YXMgcHVsc2VkIChldmVudCBzb3VyY2Ugc2VsZWN0ZWQgaW4gRVZFTlQ6STJTU1RNUFNFTDAuRVYgZm9yIGNoYW5uZWwKKy8vIDApLiBUaGlzIG51bWJlciBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mIHBvc2l0aXZlIFdDTEsgZWRnZXMgc2luY2UgdGhlCisvLyBzYW1wbGVzdGFtcCBnZW5lcmF0b3Igd2FzIGVuYWJsZWQgKG5vdCB0YWtpbmcgbW9kaWZpY2F0aW9uIHRocm91Z2gKKy8vIFNUTVBXQUREL1NUTVBXU0VUIGludG8gYWNjb3VudCkuCisvLyBUaGUgdmFsdWUgaXMgY2xlYXJlZCB3aGVuIFNUTVBDVEwuU1RNUF9FTiA9IDAuCisjZGVmaW5lIEkyU19TVE1QV0NOVENBUFQwX0NBUFRfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSTJTX1NUTVBXQ05UQ0FQVDBfQ0FQVF9WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBJMlNfU1RNUFdDTlRDQVBUMF9DQVBUX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fU1RNUFdQRVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBWQUxVRQorLy8KKy8vIFVzZWQgdG8gZGVmaW5lIHdoZW4gU1RNUFdDTlQgaXMgdG8gYmUgcmVzZXQgc28gbnVtYmVyIG9mIFdDTEsgZWRnZXMgYXJlCisvLyBmb3VuZCBmb3IgdGhlIHNpemUgb2YgdGhlIHNhbXBsZSBidWZmZXIuIFRoaXMgaXMgdGh1cyBhIG1vZHVsbyB2YWx1ZSBmb3IgdGhlCisvLyBXQ0xLIGNvdW50ZXIuIFRoaXMgbnVtYmVyIG11c3QgY29ycmVzcG9uZCB0byB0aGUgc2l6ZSBvZiB0aGUgc2FtcGxlIGJ1ZmZlcgorLy8gdXNlZCBieSB0aGUgc3lzdGVtICh0aGF0IGlzIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBzYW1wbGUgcGx1cyAxKS4KKyNkZWZpbmUgSTJTX1NUTVBXUEVSX1ZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJMlNfU1RNUFdQRVJfVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEkyU19TVE1QV1BFUl9WQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19TVE1QSU5UUklHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gSU5fU1RBUlRfV0NOVAorLy8KKy8vIENvbXBhcmUgdmFsdWUgdXNlZCB0byBzdGFydCB0aGUgaW5jb21pbmcgYXVkaW8gc3RyZWFtcy4KKy8vIFRoaXMgYml0IGZpZWxkIHNoYWxsIGVxdWFsIHRoZSBXQ0xLIGNvdW50ZXIgdmFsdWUgZHVyaW5nIHRoZSBXQ0xLIHBlcmlvZCBpbgorLy8gd2hpY2ggdGhlIGZpcnN0IGlucHV0IHdvcmQocykgYXJlIHNhbXBsZWQgYW5kIHN0b3JlZCB0byBtZW1vcnkgKHRoYXQgaXMgdGhlCisvLyBzYW1wbGUgYXQgdGhlIHN0YXJ0IG9mIHRoZSB2ZXJ5IGZpcnN0IERNQSBpbnB1dCBidWZmZXIpLgorLy8KKy8vIFRoZSB2YWx1ZSBvZiB0aGlzIHJlZ2lzdGVyIHRha2VzIGVmZmVjdCB3aGVuIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vIC0gT25lIG9yIG1vcmUgcGlucyBhcmUgY29uZmlndXJlZCBhcyBpbnB1dHMgaW4gQUlGRElSQ0ZHLgorLy8gLSBBSUZETUFDRkcgaGFzIGJlZW4gY29uZmlndXJlZCBmb3IgdGhlIGNvcnJlY3QgYnVmZmVyIHNpemUsIGFuZCBhdCBsZWFzdCAzMgorLy8gQkNMSyBjeWNsZSB0aWNrcyBoYXZlIGhhcHBlbmVkLgorLy8KKy8vIE5vdGU6IFRvIGF2b2lkIGZhbHNlIHRyaWdnZXJzLCB0aGlzIGJpdCBmaWVsZCBzaG91bGQgYmUgc2V0IGhpZ2hlciB0aGFuCisvLyBTVE1QV1BFUi5WQUxVRS4KKyNkZWZpbmUgSTJTX1NUTVBJTlRSSUdfSU5fU1RBUlRfV0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJMlNfU1RNUElOVFJJR19JTl9TVEFSVF9XQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEkyU19TVE1QSU5UUklHX0lOX1NUQVJUX1dDTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19TVE1QT1VUVFJJRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIE9VVF9TVEFSVF9XQ05UCisvLworLy8gQ29tcGFyZSB2YWx1ZSB1c2VkIHRvIHN0YXJ0IHRoZSBvdXRnb2luZyBhdWRpbyBzdHJlYW1zLgorLy8KKy8vIFRoaXMgYml0IGZpZWxkIG11c3QgZXF1YWwgdGhlIFdDTEsgY291bnRlciB2YWx1ZSBkdXJpbmcgdGhlIFdDTEsgcGVyaW9kIGluCisvLyB3aGljaCB0aGUgZmlyc3Qgb3V0cHV0IHdvcmQocykgcmVhZCBmcm9tIG1lbW9yeSBhcmUgY2xvY2tlZCBvdXQgKHRoYXQgaXMgdGhlCisvLyBzYW1wbGUgYXQgdGhlIHN0YXJ0IG9mIHRoZSB2ZXJ5IGZpcnN0IERNQSBvdXRwdXQgYnVmZmVyKS4KKy8vCisvLyBUaGUgdmFsdWUgb2YgdGhpcyByZWdpc3RlciB0YWtlcyBlZmZlY3Qgd2hlbiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLyAtIE9uZSBvciBtb3JlIHBpbnMgYXJlIGNvbmZpZ3VyZWQgYXMgb3V0cHV0cyBpbiBBSUZESVJDRkcuCisvLyAtIEFJRkRNQUNGRyBoYXMgYmVlbiBjb25maWd1cmVkIGZvciB0aGUgY29ycmVjdCBidWZmZXIgc2l6ZSwgYW5kIDMyIEJDTEsKKy8vIGN5Y2xlIHRpY2tzIGhhdmUgaGFwcGVuZWQuCisvLyAtIDIgc2FtcGxlcyBoYXZlIGJlZW4gcHJlbG9hZGVkIGZyb20gbWVtb3J5IChleGFtaW5lIHRoZSBBSUZPVVRQVFIgcmVnaXN0ZXIKKy8vIGlmIG5lY2Vzc2FyeSkuCisvLyBOb3RlOiBUaGUgbWVtb3J5IHJlYWQgYWNjZXNzIGlzIG9ubHkgcGVyZm9ybWVkIHdoZW4gcmVxdWlyZWQsIHRoYXQgaXMKKy8vIGNoYW5uZWxzIDAvMSBtdXN0IGJlIHNlbGVjdGVkIGluIEFJRldNQVNLMC9BSUZXTUFTSzEuCisvLworLy8gTm90ZTogVG8gYXZvaWQgZmFsc2UgdHJpZ2dlcnMsIHRoaXMgYml0IGZpZWxkIHNob3VsZCBiZSBzZXQgaGlnaGVyIHRoYW4KKy8vIFNUTVBXUEVSLlZBTFVFLgorI2RlZmluZSBJMlNfU1RNUE9VVFRSSUdfT1VUX1NUQVJUX1dDTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEkyU19TVE1QT1VUVFJJR19PVVRfU1RBUlRfV0NOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSTJTX1NUTVBPVVRUUklHX09VVF9TVEFSVF9XQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX1NUTVBXU0VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gVkFMVUUKKy8vCisvLyBXQ0xLIGNvdW50ZXIgbW9kaWZpY2F0aW9uOiBTZXRzIHRoZSBydW5uaW5nIFdDTEsgY291bnRlciBlcXVhbCB0byB0aGUKKy8vIHdyaXR0ZW4gdmFsdWUuCisjZGVmaW5lIEkyU19TVE1QV1NFVF9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSTJTX1NUTVBXU0VUX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBJMlNfU1RNUFdTRVRfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fU1RNUFdBREQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBWQUxVRV9JTkMKKy8vCisvLyBXQ0xLIGNvdW50ZXIgbW9kaWZpY2F0aW9uOiBBZGRzIHRoZSB3cml0dGVuIHZhbHVlIHRvIHRoZSBydW5uaW5nIFdDTEsKKy8vIGNvdW50ZXIuIElmIGEgcG9zaXRpdmUgZWRnZSBvZiBXQ0xLIG9jY3VycyBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZQorLy8gb3BlcmF0aW9uLCB0aGlzIHdpbGwgYmUgdGFrZW4gaW50byBhY2NvdW50LgorLy8gVG8gYWRkIGEgbmVnYXRpdmUgdmFsdWUsIHdyaXRlICJTVE1QV1BFUi5WQUxVRSAtIHZhbHVlIi4KKy8vCisjZGVmaW5lIEkyU19TVE1QV0FERF9WQUxVRV9JTkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSTJTX1NUTVBXQUREX1ZBTFVFX0lOQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBJMlNfU1RNUFdBRERfVkFMVUVfSU5DX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fU1RNUFhQRVJNSU4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBWQUxVRQorLy8KKy8vIEVhY2ggdGltZSBTVE1QWFBFUiBpcyB1cGRhdGVkLCB0aGUgdmFsdWUgaXMgYWxzbyBsb2FkZWQgaW50byB0aGlzIHJlZ2lzdGVyLAorLy8gcHJvdmlkZWQgdGhhdCB0aGUgdmFsdWUgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHZhbHVlIGluIHRoaXMgcmVnaXN0ZXIuCisvLyBXaGVuIHdyaXR0ZW4sIHRoZSByZWdpc3RlciBpcyByZXNldCB0byAweEZGRkYgKDY1NTM1KSwgcmVnYXJkbGVzcyBvZiB0aGUKKy8vIHZhbHVlIHdyaXR0ZW4uCisvLyBUaGUgbWluaW11bSB2YWx1ZSBjYW4gYmUgdXNlZCB0byBkZXRlY3QgZXh0cmEgV0NMSyBwdWxzZXMgKHRoaXMgcmVnaXN0ZXJzCisvLyB2YWx1ZSB3aWxsIGJlIHNpZ25pZmljYW50bHkgc21hbGxlciB0aGFuIFNUTVBYUEVSLlZBTFVFKS4KKyNkZWZpbmUgSTJTX1NUTVBYUEVSTUlOX1ZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJMlNfU1RNUFhQRVJNSU5fVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEkyU19TVE1QWFBFUk1JTl9WQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19TVE1QV0NOVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIENVUlJfVkFMVUUKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIHRoZSBXQ0xLIGNvdW50ZXIKKyNkZWZpbmUgSTJTX1NUTVBXQ05UX0NVUlJfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJMlNfU1RNUFdDTlRfQ1VSUl9WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEkyU19TVE1QV0NOVF9DVVJSX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19TVE1QWENOVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIENVUlJfVkFMVUUKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIHRoZSBYT1NDIGNvdW50ZXIsIGxhdGNoZWQgd2hlbiByZWFkaW5nIFNUTVBXQ05ULgorI2RlZmluZSBJMlNfU1RNUFhDTlRfQ1VSUl9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEkyU19TVE1QWENOVF9DVVJSX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSTJTX1NUTVBYQ05UX0NVUlJfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX1NUTVBYQ05UQ0FQVDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBDQVBUX1ZBTFVFCisvLworLy8gQ2hhbm5lbCAxIGlzIGlkbGUgYW5kIGNhbiBub3QgYmUgc2FtcGxlZCBmcm9tIGFuIGV4dGVybmFsIHB1bHNlIGFzIHdpdGgKKy8vIENoYW5uZWwgMCBTVE1QWENOVENBUFQwCisjZGVmaW5lIEkyU19TVE1QWENOVENBUFQxX0NBUFRfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSTJTX1NUTVBYQ05UQ0FQVDFfQ0FQVF9WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBJMlNfU1RNUFhDTlRDQVBUMV9DQVBUX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fU1RNUFdDTlRDQVBUMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIENBUFRfVkFMVUUKKy8vCisvLyBDaGFubmVsIDEgaXMgaWRsZSBhbmQgY2FuIG5vdCBiZSBzYW1wbGVkIGZyb20gYW4gZXh0ZXJuYWwgZXZlbnQgYXMgd2l0aAorLy8gQ2hhbm5lbCAwIFNUTVBXQ05UQ0FQVDAKKyNkZWZpbmUgSTJTX1NUTVBXQ05UQ0FQVDFfQ0FQVF9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJMlNfU1RNUFdDTlRDQVBUMV9DQVBUX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEkyU19TVE1QV0NOVENBUFQxX0NBUFRfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19JUlFNQVNLCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNV0gQUlGX0RNQV9JTgorLy8KKy8vIERlZmluZXMgdGhlIG1hc2tzIHN0YXRlIGZvciB0aGUgaW50ZXJydXB0ICBvZiBJUlFGTEFHUy5BSUZfRE1BX0lOCisvLworLy8gMDogRGlzYWJsZQorLy8gMTogRW5hYmxlCisjZGVmaW5lIEkyU19JUlFNQVNLX0FJRl9ETUFfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSTJTX0lSUU1BU0tfQUlGX0RNQV9JTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBJMlNfSVJRTUFTS19BSUZfRE1BX0lOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEkyU19JUlFNQVNLX0FJRl9ETUFfSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQUlGX0RNQV9PVVQKKy8vCisvLyBEZWZpbmVzIHRoZSBtYXNrcyBzdGF0ZSBmb3IgdGhlIGludGVycnVwdCBvZiBJUlFGTEFHUy5BSUZfRE1BX09VVAorLy8KKy8vIDA6IERpc2FibGUKKy8vIDE6IEVuYWJsZQorI2RlZmluZSBJMlNfSVJRTUFTS19BSUZfRE1BX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEkyU19JUlFNQVNLX0FJRl9ETUFfT1VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSTJTX0lSUU1BU0tfQUlGX0RNQV9PVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJMlNfSVJRTUFTS19BSUZfRE1BX09VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFdDTEtfVElNRU9VVAorLy8KKy8vIERlZmluZXMgdGhlIG1hc2tzIHN0YXRlIGZvciB0aGUgaW50ZXJydXB0ICBvZiBJUlFGTEFHUy5XQ0xLX1RJTUVPVVQKKy8vCisvLyAwOiBEaXNhYmxlCisvLyAxOiBFbmFibGUKKyNkZWZpbmUgSTJTX0lSUU1BU0tfV0NMS19USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJMlNfSVJRTUFTS19XQ0xLX1RJTUVPVVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEkyU19JUlFNQVNLX1dDTEtfVElNRU9VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSTJTX0lSUU1BU0tfV0NMS19USU1FT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBCVVNfRVJSCisvLworLy8gRGVmaW5lcyB0aGUgbWFza3Mgc3RhdGUgZm9yIHRoZSBpbnRlcnJ1cHQgIG9mIElSUUZMQUdTLkJVU19FUlIKKy8vCisvLyAwOiBEaXNhYmxlCisvLyAxOiBFbmFibGUKKyNkZWZpbmUgSTJTX0lSUU1BU0tfQlVTX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfSVJRTUFTS19CVVNfRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyU19JUlFNQVNLX0JVU19FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJTX0lSUU1BU0tfQlVTX0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBXQ0xLX0VSUgorLy8KKy8vIERlZmluZXMgdGhlIG1hc2tzIHN0YXRlIGZvciB0aGUgaW50ZXJydXB0ICBvZiBJUlFGTEFHUy5XQ0xLX0VSUgorLy8KKy8vIDA6IERpc2FibGUKKy8vIDE6IEVuYWJsZQorI2RlZmluZSBJMlNfSVJRTUFTS19XQ0xLX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19JUlFNQVNLX1dDTEtfRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSTJTX0lSUU1BU0tfV0NMS19FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMlNfSVJRTUFTS19XQ0xLX0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFBUUl9FUlIKKy8vCisvLyBEZWZpbmVzIHRoZSBtYXNrcyBzdGF0ZSBmb3IgdGhlIGludGVycnVwdCBvZiBJUlFGTEFHUy5QVFJfRVJSCisvLworLy8gMDogRGlzYWJsZQorLy8gMTogRW5hYmxlCisjZGVmaW5lIEkyU19JUlFNQVNLX1BUUl9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX0lSUU1BU0tfUFRSX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMlNfSVJRTUFTS19QVFJfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyU19JUlFNQVNLX1BUUl9FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19JUlFGTEFHUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzVdIEFJRl9ETUFfSU4KKy8vCisvLyBTZXQgd2hlbiBjb25kaXRpb24gZm9yIHRoaXMgYml0IGZpZWxkIGV2ZW50IG9jY3VycyAoYXV0byBjbGVhcmVkIHdoZW4gaW5wdXQKKy8vIHBvaW50ZXIgaXMgdXBkYXRlZCAtIEFJRklOUFRSKSwgc2VlIGRlc2NyaXB0aW9uIG9mIEFJRklOUFRSIHJlZ2lzdGVyCisjZGVmaW5lIEkyU19JUlFGTEFHU19BSUZfRE1BX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX0FJRl9ETUFfSU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBJMlNfSVJRRkxBR1NfQUlGX0RNQV9JTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEkyU19JUlFGTEFHU19BSUZfRE1BX0lOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQUlGX0RNQV9PVVQKKy8vCisvLyBTZXQgd2hlbiBjb25kaXRpb24gZm9yIHRoaXMgYml0IGZpZWxkIGV2ZW50IG9jY3VycyAoYXV0byBjbGVhcmVkIHdoZW4gb3V0cHV0CisvLyBwb2ludGVyIGlzIHVwZGF0ZWQgLSBBSUZPVVRQVFIpLCBzZWUgZGVzY3JpcHRpb24gb2YgQUlGT1VUUFRSIHJlZ2lzdGVyIGZvcgorLy8gZGV0YWlscworI2RlZmluZSBJMlNfSVJRRkxBR1NfQUlGX0RNQV9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEkyU19JUlFGTEFHU19BSUZfRE1BX09VVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX0FJRl9ETUFfT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJMlNfSVJRRkxBR1NfQUlGX0RNQV9PVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFdDTEtfVElNRU9VVAorLy8KKy8vIFNldCB3aGVuIHRoZSBzYW1wbGUgc3RhbXAgZ2VuZXJhdG9yIGRvZXMgbm90IGRldGVjdCBhIHBvc2l0aXZlIFdDTEsgZWRnZSBmb3IKKy8vICA2NTUzNSBjbGsgcGVyaW9kcy4gVGhpcyBzaWduYWxpemVzIHRoYXQgdGhlIGludGVybmFsIG9yIGV4dGVybmFsIEJDTEsgYW5kCisvLyBXQ0xLIGdlbmVyYXRvciBzb3VyY2UgaGFzIGJlZW4gZGlzYWJsZWQuCisvLworLy8gVGhlIGJpdCBpcyBzdGlja3kgYW5kIG1heSBvbmx5IGJlIGNsZWFyZWQgYnkgc29mdHdhcmUgKGJ5IHdyaXRpbmcgJzEnIHRvCisvLyBJUlFDTFIuV0NMS19USU1FT1VUKS4KKyNkZWZpbmUgSTJTX0lSUUZMQUdTX1dDTEtfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJMlNfSVJRRkxBR1NfV0NMS19USU1FT1VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEkyU19JUlFGTEFHU19XQ0xLX1RJTUVPVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX1dDTEtfVElNRU9VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBCVVNfRVJSCisvLworLy8gU2V0IHdoZW4gYSBETUEgb3BlcmF0aW9uIGlzIG5vdCBjb21wbGV0ZWQgaW4gdGltZSAodGhhdCBpcyBhdWRpbyBvdXRwdXQKKy8vIGJ1ZmZlciB1bmRlcmZsb3csIG9yIGF1ZGlvIGlucHV0IGJ1ZmZlciBvdmVyZmxvdykuCisvLyBUaGlzIGVycm9yIHJlcXVpcmVzIGEgY29tcGxldGUgcmVzdGFydCBzaW5jZSB3b3JkIHN5bmNocm9uaXphdGlvbiBoYXMgYmVlbgorLy8gbG9zdC4gVGhlIGJpdCBpcyBzdGlja3kgYW5kIG1heSBvbmx5IGJlIGNsZWFyZWQgYnkgc29mdHdhcmUgKGJ5IHdyaXRpbmcgJzEnCisvLyB0byBJUlFDTFIuQlVTX0VSUikuCisvLworLy8gTm90ZSB0aGF0IERNQSBpbml0aWF0ZWQgdHJhbnNhY3Rpb25zIHRvIGlsbGVnYWwgYWRkcmVzc2VzIHdpbGwgbm90IHRyaWdnZXIKKy8vIGFuIGludGVycnVwdC4gVGhlIHJlc3BvbnNlIHRvIHN1Y2ggdHJhbnNhY3Rpb25zIGlzIHVuZGVmaW5lZC4KKyNkZWZpbmUgSTJTX0lSUUZMQUdTX0JVU19FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfSVJRRkxBR1NfQlVTX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyU19JUlFGTEFHU19CVVNfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX0JVU19FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBXQ0xLX0VSUgorLy8KKy8vIFNldCB3aGVuOgorLy8gLSBBbiB1bmV4cGVjdGVkIFdDTEsgZWRnZSBvY2N1cnMgZHVyaW5nIHRoZSBkYXRhIGRlbGF5IHBlcmlvZCBvZiBhIHBoYXNlLgorLy8gTm90ZSB1bmV4cGVjdGVkIFdDTEsgZWRnZXMgZHVyaW5nIHRoZSB3b3JkIGFuZCBpZGxlIHBlcmlvZHMgb2YgdGhlIHBoYXNlIGFyZQorLy8gbm90IGRldGVjdGVkLgorLy8gLSAgSW4gZHVhbC1waGFzZSBtb2RlLCB3aGVuIHR3byBXQ0xLIGVkZ2VzIGFyZSBsZXNzIHRoYW4gNCBCQ0xLIGN5Y2xlcworLy8gYXBhcnQuCisvLyAtICBJbiBzaW5nbGUtcGhhc2UgbW9kZSwgd2hlbiBhIFdDTEsgcHVsc2Ugb2NjdXJzIGJlZm9yZSB0aGUgbGFzdCBjaGFubmVsLgorLy8gVGhpcyBlcnJvciByZXF1aXJlcyBhIGNvbXBsZXRlIHJlc3RhcnQgc2luY2Ugd29yZCBzeW5jaHJvbml6YXRpb24gaGFzIGJlZW4KKy8vIGxvc3QuIFRoZSBiaXQgaXMgc3RpY2t5IGFuZCBtYXkgb25seSBiZSBjbGVhcmVkIGJ5IHNvZnR3YXJlIChieSB3cml0aW5nICcxJworLy8gdG8gSVJRQ0xSLldDTEtfRVJSKS4KKyNkZWZpbmUgSTJTX0lSUUZMQUdTX1dDTEtfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMlNfSVJRRkxBR1NfV0NMS19FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEkyU19JUlFGTEFHU19XQ0xLX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX1dDTEtfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBQVFJfRVJSCisvLworLy8gU2V0IHdoZW4gQUlGSU5QVFJORVhUIG9yIEFJRk9VVFBUUk5FWFQgaGFzIG5vdCBiZWVuIGxvYWRlZCB3aXRoIHRoZSBuZXh0CisvLyBibG9jayBhZGRyZXNzIGluIHRpbWUuCisvLyBUaGlzIGVycm9yIHJlcXVpcmVzIGEgY29tcGxldGUgcmVzdGFydCBzaW5jZSB3b3JkIHN5bmNocm9uaXphdGlvbiBoYXMgYmVlbgorLy8gbG9zdC4gVGhlIGJpdCBpcyBzdGlja3kgYW5kIG1heSBvbmx5IGJlIGNsZWFyZWQgYnkgc29mdHdhcmUgKGJ5IHdyaXRpbmcgJzEnCisvLyB0byBJUlFDTFIuUFRSX0VSUikuCisjZGVmaW5lIEkyU19JUlFGTEFHU19QVFJfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX1BUUl9FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMlNfSVJRRkxBR1NfUFRSX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyU19JUlFGTEFHU19QVFJfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19JUlFTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs1XSBBSUZfRE1BX0lOCisvLworLy8gMTogU2V0cyB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLkFJRl9ETUFfSU4gKHVubGVzcyBhIGF1dG8gY2xlYXIgY3JpdGVyaWEKKy8vIHdhcyBnaXZlbiBhdCB0aGUgc2FtZSB0aW1lLCBpbiB3aGljaCB0aGUgc2V0IHdpbGwgYmUgaWdub3JlZCkKKyNkZWZpbmUgSTJTX0lSUVNFVF9BSUZfRE1BX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMlNfSVJRU0VUX0FJRl9ETUFfSU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEkyU19JUlFTRVRfQUlGX0RNQV9JTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSTJTX0lSUVNFVF9BSUZfRE1BX0lOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBBSUZfRE1BX09VVAorLy8KKy8vIDE6IFNldHMgdGhlIGludGVycnVwdCBvZiBJUlFGTEFHUy5BSUZfRE1BX09VVCAodW5sZXNzIGEgYXV0byBjbGVhciBjcml0ZXJpYQorLy8gd2FzIGdpdmVuIGF0IHRoZSBzYW1lIHRpbWUsIGluIHdoaWNoIHRoZSBzZXQgd2lsbCBiZSBpZ25vcmVkKQorI2RlZmluZSBJMlNfSVJRU0VUX0FJRl9ETUFfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEkyU19JUlFTRVRfQUlGX0RNQV9PVVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSTJTX0lSUVNFVF9BSUZfRE1BX09VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJMlNfSVJRU0VUX0FJRl9ETUFfT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFdDTEtfVElNRU9VVAorLy8KKy8vIDE6IFNldHMgdGhlIGludGVycnVwdCBvZiBJUlFGTEFHUy5XQ0xLX1RJTUVPVVQKKyNkZWZpbmUgSTJTX0lSUVNFVF9XQ0xLX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJMlNfSVJRU0VUX1dDTEtfVElNRU9VVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEkyU19JUlFTRVRfV0NMS19USU1FT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSTJTX0lSUVNFVF9XQ0xLX1RJTUVPVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBCVVNfRVJSCisvLworLy8gMTogU2V0cyB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLkJVU19FUlIKKyNkZWZpbmUgSTJTX0lSUVNFVF9CVVNfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfSVJRU0VUX0JVU19FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyU19JUlFTRVRfQlVTX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJTX0lSUVNFVF9CVVNfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBXQ0xLX0VSUgorLy8KKy8vIDE6IFNldHMgdGhlIGludGVycnVwdCBvZiBJUlFGTEFHUy5XQ0xLX0VSUgorI2RlZmluZSBJMlNfSVJRU0VUX1dDTEtfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19JUlFTRVRfV0NMS19FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSTJTX0lSUVNFVF9XQ0xLX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMlNfSVJRU0VUX1dDTEtfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFBUUl9FUlIKKy8vCisvLyAxOiBTZXRzIHRoZSBpbnRlcnJ1cHQgb2YgSVJRRkxBR1MuUFRSX0VSUgorI2RlZmluZSBJMlNfSVJRU0VUX1BUUl9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyU19JUlFTRVRfUFRSX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJTX0lSUVNFVF9QVFJfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMlNfSVJRU0VUX1BUUl9FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fSVJRQ0xSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNV0gQUlGX0RNQV9JTgorLy8KKy8vIDE6IENsZWFycyB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLkFJRl9ETUFfSU4gKHVubGVzcyBhIHNldCBjcml0ZXJpYSB3YXMKKy8vIGdpdmVuIGF0IHRoZSBzYW1lIHRpbWUgaW4gd2hpY2ggdGhlIGNsZWFyIHdpbGwgYmUgaWdub3JlZCkKKyNkZWZpbmUgSTJTX0lSUUNMUl9BSUZfRE1BX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMlNfSVJRQ0xSX0FJRl9ETUFfSU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEkyU19JUlFDTFJfQUlGX0RNQV9JTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSTJTX0lSUUNMUl9BSUZfRE1BX0lOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBBSUZfRE1BX09VVAorLy8KKy8vIDE6IENsZWFycyB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLkFJRl9ETUFfT1VUICh1bmxlc3MgYSBzZXQgY3JpdGVyaWEgd2FzCisvLyBnaXZlbiBhdCB0aGUgc2FtZSB0aW1lIGluIHdoaWNoIHRoZSBjbGVhciB3aWxsIGJlIGlnbm9yZWQpCisjZGVmaW5lIEkyU19JUlFDTFJfQUlGX0RNQV9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSTJTX0lSUUNMUl9BSUZfRE1BX09VVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBJMlNfSVJRQ0xSX0FJRl9ETUFfT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEkyU19JUlFDTFJfQUlGX0RNQV9PVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gV0NMS19USU1FT1VUCisvLworLy8gMTogQ2xlYXJzIHRoZSBpbnRlcnJ1cHQgb2YgSVJRRkxBR1MuV0NMS19USU1FT1VUICh1bmxlc3MgYSBzZXQgY3JpdGVyaWEgd2FzCisvLyBnaXZlbiBhdCB0aGUgc2FtZSB0aW1lIGluIHdoaWNoIHRoZSBjbGVhciB3aWxsIGJlIGlnbm9yZWQpCisjZGVmaW5lIEkyU19JUlFDTFJfV0NMS19USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSTJTX0lSUUNMUl9XQ0xLX1RJTUVPVVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJMlNfSVJRQ0xSX1dDTEtfVElNRU9VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEkyU19JUlFDTFJfV0NMS19USU1FT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQlVTX0VSUgorLy8KKy8vIDE6IENsZWFycyB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLkJVU19FUlIgKHVubGVzcyBhIHNldCBjcml0ZXJpYSB3YXMgZ2l2ZW4KKy8vIGF0IHRoZSBzYW1lIHRpbWUgaW4gd2hpY2ggdGhlIGNsZWFyIHdpbGwgYmUgaWdub3JlZCkKKyNkZWZpbmUgSTJTX0lSUUNMUl9CVVNfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfSVJRQ0xSX0JVU19FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyU19JUlFDTFJfQlVTX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJTX0lSUUNMUl9CVVNfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBXQ0xLX0VSUgorLy8KKy8vIDE6IENsZWFycyB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLldDTEtfRVJSICh1bmxlc3MgYSBzZXQgY3JpdGVyaWEgd2FzCisvLyBnaXZlbiBhdCB0aGUgc2FtZSB0aW1lIGluIHdoaWNoIHRoZSBjbGVhciB3aWxsIGJlIGlnbm9yZWQpCisjZGVmaW5lIEkyU19JUlFDTFJfV0NMS19FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJTX0lSUUNMUl9XQ0xLX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJMlNfSVJRQ0xSX1dDTEtfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19JUlFDTFJfV0NMS19FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUFRSX0VSUgorLy8KKy8vIDE6IENsZWFycyB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLlBUUl9FUlIgKHVubGVzcyBhIHNldCBjcml0ZXJpYSB3YXMgZ2l2ZW4KKy8vIGF0IHRoZSBzYW1lIHRpbWUgaW4gd2hpY2ggdGhlIGNsZWFyIHdpbGwgYmUgaWdub3JlZCkKKyNkZWZpbmUgSTJTX0lSUUNMUl9QVFJfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMlNfSVJRQ0xSX1BUUl9FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyU19JUlFDTFJfUFRSX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX0lSUUNMUl9QVFJfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0kyU19fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19pbnRzLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19pbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcwZGY1ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2ludHMuaApAQCAtMCwwICsxLDExMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2ludHNfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfSU5UU19IX18KKyNkZWZpbmUgX19IV19JTlRTX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGludGVycnVwdCBhc3NpZ25tZW50cy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIElOVF9OTUlfRkFVTFQgICAgICAgICAgICAgICAgICAgIDIgLy8gTk1JIEZhdWx0CisjZGVmaW5lIElOVF9IQVJEX0ZBVUxUICAgICAgICAgICAgICAgICAgIDMgLy8gSGFyZCBGYXVsdAorI2RlZmluZSBJTlRfTUVNTUFOQUdFX0ZBVUxUICAgICAgICAgICAgICA0IC8vIE1lbW9yeSBNYW5hZ2VtZW50IChNZW1NYW5hZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmF1bHQKKyNkZWZpbmUgSU5UX0JVU19GQVVMVCAgICAgICAgICAgICAgICAgICAgNSAvLyBCdXMgRmF1bHQKKyNkZWZpbmUgSU5UX1VTQUdFX0ZBVUxUICAgICAgICAgICAgICAgICAgNiAvLyBVc2FnZSBGYXVsdAorI2RlZmluZSBJTlRfU1ZDQUxMICAgICAgICAgICAgICAgICAgICAgIDExIC8vIFN1cGVydmlzb3IgQ2FsbCAoU1ZDYWxsKQorI2RlZmluZSBJTlRfREVCVUcgICAgICAgICAgICAgICAgICAgICAgIDEyIC8vIERlYnVnIE1vbml0b3IKKyNkZWZpbmUgSU5UX1BFTkRTViAgICAgICAgICAgICAgICAgICAgICAxNCAvLyBQZW5kaW5nIFNlcnZpY2UgQ2FsbCAoUGVuZFNWKQorI2RlZmluZSBJTlRfU1lTVElDSyAgICAgICAgICAgICAgICAgICAgIDE1IC8vIFN5c1RpY2sgSW50ZXJydXB0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtIFRpbWVyIGluIE5WSUMuCisjZGVmaW5lIElOVF9BT05fR1BJT19FREdFICAgICAgICAgICAgICAgMTYgLy8gRWRnZSBkZXRlY3QgZXZlbnQgZnJvbSBJT0MKKyNkZWZpbmUgSU5UX0kyQ19JUlEgICAgICAgICAgICAgICAgICAgICAxNyAvLyBJbnRlcnJ1cHQgZXZlbnQgZnJvbSBJMkMKKyNkZWZpbmUgSU5UX1JGQ19DUEVfMSAgICAgICAgICAgICAgICAgICAxOCAvLyBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlZCBldmVudHMKKyNkZWZpbmUgSU5UX0FPTl9SVENfQ09NQiAgICAgICAgICAgICAgICAyMCAvLyBFdmVudCBmcm9tIEFPTl9SVEMKKyNkZWZpbmUgSU5UX1VBUlQwX0NPTUIgICAgICAgICAgICAgICAgICAyMSAvLyBVQVJUMCBjb21iaW5lZCBpbnRlcnJ1cHQKKyNkZWZpbmUgSU5UX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgICAyMiAvLyBBVVggc29mdHdhcmUgZXZlbnQgMAorI2RlZmluZSBJTlRfU1NJMF9DT01CICAgICAgICAgICAgICAgICAgIDIzIC8vIFNTSTAgY29tYmluZWQgaW50ZXJydXB0CisjZGVmaW5lIElOVF9TU0kxX0NPTUIgICAgICAgICAgICAgICAgICAgMjQgLy8gU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQKKyNkZWZpbmUgSU5UX1JGQ19DUEVfMCAgICAgICAgICAgICAgICAgICAyNSAvLyBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlZCBldmVudHMKKyNkZWZpbmUgSU5UX1JGQ19IV19DT01CICAgICAgICAgICAgICAgICAyNiAvLyBDb21iaW5lZCBSQ0YgaGFyZHdhcmUgaW50ZXJydXB0CisjZGVmaW5lIElOVF9SRkNfQ01EX0FDSyAgICAgICAgICAgICAgICAgMjcgLy8gUkZDIERvb3JiZWxsIENvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBY2tub3dsZWRnZW1lbnQgSW50ZXJydXB0CisjZGVmaW5lIElOVF9JMlNfSVJRICAgICAgICAgICAgICAgICAgICAgMjggLy8gSW50ZXJydXB0IGV2ZW50IGZyb20gSTJTCisjZGVmaW5lIElOVF9BVVhfU1dFVjEgICAgICAgICAgICAgICAgICAgMjkgLy8gQVVYIHNvZnR3YXJlIGV2ZW50IDEKKyNkZWZpbmUgSU5UX1dEVF9JUlEgICAgICAgICAgICAgICAgICAgICAzMCAvLyBXYXRjaGRvZyBpbnRlcnJ1cHQgZXZlbnQKKyNkZWZpbmUgSU5UX0dQVDBBICAgICAgICAgICAgICAgICAgICAgICAzMSAvLyBHUFQwQSBpbnRlcnJ1cHQgZXZlbnQKKyNkZWZpbmUgSU5UX0dQVDBCICAgICAgICAgICAgICAgICAgICAgICAzMiAvLyBHUFQwQiBpbnRlcnJ1cHQgZXZlbnQKKyNkZWZpbmUgSU5UX0dQVDFBICAgICAgICAgICAgICAgICAgICAgICAzMyAvLyBHUFQxQSBpbnRlcnJ1cHQgZXZlbnQKKyNkZWZpbmUgSU5UX0dQVDFCICAgICAgICAgICAgICAgICAgICAgICAzNCAvLyBHUFQxQiBpbnRlcnJ1cHQgZXZlbnQKKyNkZWZpbmUgSU5UX0dQVDJBICAgICAgICAgICAgICAgICAgICAgICAzNSAvLyBHUFQyQSBpbnRlcnJ1cHQgZXZlbnQKKyNkZWZpbmUgSU5UX0dQVDJCICAgICAgICAgICAgICAgICAgICAgICAzNiAvLyBHUFQyQiBpbnRlcnJ1cHQgZXZlbnQKKyNkZWZpbmUgSU5UX0dQVDNBICAgICAgICAgICAgICAgICAgICAgICAzNyAvLyBHUFQzQSBpbnRlcnJ1cHQgZXZlbnQKKyNkZWZpbmUgSU5UX0dQVDNCICAgICAgICAgICAgICAgICAgICAgICAzOCAvLyBHUFQzQiBpbnRlcnJ1cHQgZXZlbnQKKyNkZWZpbmUgSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRICAgICAzOSAvLyBDUllQVE8gcmVzdWx0IGF2YWlsYWJsZSBpbnRlcnVwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50CisjZGVmaW5lIElOVF9ETUFfRE9ORV9DT01CICAgICAgICAgICAgICAgNDAgLy8gQ29tYmluZWQgRE1BIGRvbmUKKyNkZWZpbmUgSU5UX0RNQV9FUlIgICAgICAgICAgICAgICAgICAgICA0MSAvLyBETUEgYnVzIGVycm9yCisjZGVmaW5lIElOVF9GTEFTSCAgICAgICAgICAgICAgICAgICAgICAgNDIgLy8gRkxBU0ggY29udHJvbGxlciBlcnJvciBldmVudAorI2RlZmluZSBJTlRfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgIDQzIC8vIFNvZnR3YXJlIGV2ZW50IDAKKyNkZWZpbmUgSU5UX0FVWF9DT01CICAgICAgICAgICAgICAgICAgICA0NCAvLyBBVVggY29tYmluZWQgZXZlbnQKKyNkZWZpbmUgSU5UX0FPTl9QUk9HMCAgICAgICAgICAgICAgICAgICA0NSAvLyBBT04gcHJvZ3JhbW1hYmxlIGV2ZW50IDAKKyNkZWZpbmUgSU5UX1BST0cwICAgICAgICAgICAgICAgICAgICAgICA0NiAvLyBQcm9ncmFtbWFibGUgSW50ZXJydXB0IDAKKyNkZWZpbmUgSU5UX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICA0NyAvLyBBVVggQ29tcGFyZSBBIGV2ZW50CisjZGVmaW5lIElOVF9BVVhfQURDX0lSUSAgICAgICAgICAgICAgICAgNDggLy8gQVVYIEFEQyBpbnRlcnJ1cHQgZXZlbnQKKyNkZWZpbmUgSU5UX1RSTkdfSVJRICAgICAgICAgICAgICAgICAgICA0OSAvLyBUUk5HIEludGVycnVwdCBldmVudAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgbnVtYmVyIG9mIGludGVycnVwdHMgYW5kIHByaW9yaXR5IGxldmVscy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5VTV9JTlRFUlJVUFRTICAgICAgICAgICAgICAgICAgNTAgLy8gTnVtYmVyIG9mIGludGVycnVwdHMKKyNkZWZpbmUgTlVNX1BSSU9SSVRZX0JJVFMgICAgICAgICAgICAgICAgMyAvLyBOdW1iZXIgb2YgUHJpb3JpdHkgYml0cworI2RlZmluZSBOVU1fUFJJT1JJVFkgICAgICAgICAgICAgICAgICAgICA4IC8vIE51bWJlciBvZiBwcmlvcml0eSBsZXZlbHMKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQWxpYXNlcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBTZW5zb3IgQ29udHJvbGxlciBTdHVkaW8gMS4xLjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgSU5UX0FPTl9BVVhfU1dFVjAgICAgSU5UX0FVWF9TV0VWMAorI2RlZmluZSBJTlRfQU9OX0FVWF9TV0VWMSAgICBJTlRfQVVYX1NXRVYxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfaW9jLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGUyMjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfaW9jLmgKQEAgLTAsMCArMSw5ODM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfaW9jX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0lPQ19IX18KKyNkZWZpbmUgX19IV19JT0NfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gSU9DIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMAorI2RlZmluZSBJT0NfT19JT0NGRzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMQorI2RlZmluZSBJT0NfT19JT0NGRzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMgorI2RlZmluZSBJT0NfT19JT0NGRzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMworI2RlZmluZSBJT0NfT19JT0NGRzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPNAorI2RlZmluZSBJT0NfT19JT0NGRzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPNQorI2RlZmluZSBJT0NfT19JT0NGRzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPNgorI2RlZmluZSBJT0NfT19JT0NGRzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPNworI2RlZmluZSBJT0NfT19JT0NGRzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPOAorI2RlZmluZSBJT0NfT19JT0NGRzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPOQorI2RlZmluZSBJT0NfT19JT0NGRzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMTAKKyNkZWZpbmUgSU9DX09fSU9DRkcxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzExCisjZGVmaW5lIElPQ19PX0lPQ0ZHMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8xMgorI2RlZmluZSBJT0NfT19JT0NGRzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMTMKKyNkZWZpbmUgSU9DX09fSU9DRkcxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzE0CisjZGVmaW5lIElPQ19PX0lPQ0ZHMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8xNQorI2RlZmluZSBJT0NfT19JT0NGRzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNDCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMTYKKyNkZWZpbmUgSU9DX09fSU9DRkcxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzE3CisjZGVmaW5lIElPQ19PX0lPQ0ZHMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8xOAorI2RlZmluZSBJT0NfT19JT0NGRzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMTkKKyNkZWZpbmUgSU9DX09fSU9DRkcxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0QworCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzIwCisjZGVmaW5lIElPQ19PX0lPQ0ZHMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8yMQorI2RlZmluZSBJT0NfT19JT0NGRzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMjIKKyNkZWZpbmUgSU9DX09fSU9DRkcyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzIzCisjZGVmaW5lIElPQ19PX0lPQ0ZHMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUMKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8yNAorI2RlZmluZSBJT0NfT19JT0NGRzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMjUKKyNkZWZpbmUgSU9DX09fSU9DRkcyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAorCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzI2CisjZGVmaW5lIElPQ19PX0lPQ0ZHMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8yNworI2RlZmluZSBJT0NfT19JT0NGRzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMjgKKyNkZWZpbmUgSU9DX09fSU9DRkcyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzI5CisjZGVmaW5lIElPQ19PX0lPQ0ZHMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzQKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8zMAorI2RlZmluZSBJT0NfT19JT0NGRzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc4CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMzEKKyNkZWZpbmUgSU9DX09fSU9DRkczMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzBfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcwX0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzBfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcwX0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMF9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcwX1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dC9vdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzBfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzBfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzBfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcwX0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzBfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzBfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzBfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcwX1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzBfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcwX1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcwX1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzBfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcwX0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzBfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcwX0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcwX0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzBfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcwX0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzBfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMAorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzFfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcxX0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzFfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcxX0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMV9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxX1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzFfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzFfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzFfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcxX0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzFfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzFfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzFfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxX1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzFfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcxX1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxX1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzFfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcxX0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzFfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcxX0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxX0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzFfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxX0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzFfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMQorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzJfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcyX0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzJfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcyX0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMl9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyX1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzJfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzJfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzJfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcyX0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzJfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzJfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzJfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyX1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzJfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcyX1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyX1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzJfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcyX0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzJfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcyX0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyX0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzJfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyX0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzJfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMgorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzNfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkczX0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzNfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkczX0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHM19XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkczX1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzNfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczX0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzNfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczX0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczX0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzNfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkczX0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzNfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHM19FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkczX0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzNfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkczX0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzNfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkczX1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzNfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkczX1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkczX1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHM19TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkczX1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzNfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkczX0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzNfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkczX0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkczX0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzNfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkczX0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzNfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMworLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzRfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkc0X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzRfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkc0X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHNF9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc0X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzRfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzRfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzRfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkc0X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzRfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzRfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzRfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc0X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzRfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkc0X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkc0X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzRfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkc0X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzRfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkc0X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc0X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzRfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkc0X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzRfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPNAorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzVfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkc1X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzVfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkc1X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHNV9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc1X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzVfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzVfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzVfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkc1X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzVfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzVfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzVfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc1X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzVfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkc1X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkc1X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzVfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkc1X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzVfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkc1X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc1X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzVfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkc1X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzVfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPNQorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzZfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkc2X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzZfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkc2X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHNl9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc2X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzZfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzZfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzZfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkc2X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzZfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzZfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzZfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc2X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzZfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkc2X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkc2X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzZfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkc2X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzZfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkc2X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc2X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzZfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkc2X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzZfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPNgorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzdfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkc3X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzdfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkc3X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHN19XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc3X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzdfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzdfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzdfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkc3X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzdfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHN19FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzdfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzdfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc3X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzdfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkc3X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHN19TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkc3X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzdfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkc3X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzdfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkc3X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc3X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzdfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkc3X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzdfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPNworLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzhfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkc4X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzhfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkc4X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHOF9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc4X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzhfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzhfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzhfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkc4X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzhfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzhfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzhfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc4X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzhfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkc4X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkc4X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzhfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkc4X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzhfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkc4X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc4X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzhfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkc4X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzhfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPOAorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzlfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkc5X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzlfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkc5X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHOV9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc5X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzlfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzlfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzlfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkc5X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzlfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzlfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzlfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc5X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzlfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkc5X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkc5X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzlfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkc5X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzlfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkc5X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc5X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzlfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkc5X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzlfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPOQorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcxMF9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcxMF9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzEwX1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcxMF9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcxMF9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzEwX0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcxMF9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcxMF9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzEwX1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcxMF9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzEwX1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcxMF9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzEwX0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzEwCisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcxMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzExX0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcxMV9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzExX0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcxMV9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxMV9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzExX0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzExX0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzExX0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcxMV9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzExX0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzExX0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzExX1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzExX1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcxMV9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzExX0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzExX0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxMV9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzExX0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzExX0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMTEKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzEyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzEyX0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzEyX0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcxMl9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzEyX1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcxMl9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzEyX0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxMl9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxMl9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzEyX1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcxMl9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxMl9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcxMl9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcxMl9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8xMgorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMTMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcxM19IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcxM19JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzEzX1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcxM19JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcxM19JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcxM19FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcxM19FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzEzX0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcxM19FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcxM19QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzEzX1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcxM19QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzEzX1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcxM19JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcxM19JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxM19JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzEzX0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcxM19JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzEzCisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcxNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzE0X0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcxNF9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzE0X0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcxNF9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxNF9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzE0X0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzE0X0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzE0X0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcxNF9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzE0X0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzE0X0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzE0X1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzE0X1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcxNF9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxNF9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMTQKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzE1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzE1X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzE1X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcxNV9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE1X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcxNV9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzE1X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxNV9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxNV9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzE1X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcxNV9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxNV9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcxNV9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcxNV9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8xNQorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMTYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcxNl9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcxNl9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzE2X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcxNl9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcxNl9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE2X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcxNl9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcxNl9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE2X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcxNl9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzE2X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcxNl9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzE2X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzE2CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcxNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzE3X0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcxN19IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzE3X0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcxN19JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxN19XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzE3X0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzE3X0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzE3X0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcxN19FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzE3X0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzE3X0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzE3X1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzE3X1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcxN19TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcxN19JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcxN19JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxN19JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxN19JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMTcKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzE4CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzE4X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzE4X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcxOF9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE4X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcxOF9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzE4X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMThfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxOF9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxOF9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzE4X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcxOF9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxOF9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcxOF9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcxOF9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8xOAorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMTkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcxOV9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcxOV9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzE5X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcxOV9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcxOV9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE5X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcxOV9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcxOV9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE5X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcxOV9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzE5X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcxOV9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzE5X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzE5CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcyMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzIwX0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcyMF9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzIwX0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcyMF9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyMF9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzIwX0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzIwX0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzIwX0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcyMF9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzIwX0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzIwX0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzIwX1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzIwX1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcyMF9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyMF9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMjAKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzIxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzIxX0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzIxX0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcyMV9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIxX1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcyMV9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzIxX0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyMV9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyMV9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzIxX1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcyMV9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyMV9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcyMV9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcyMV9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8yMQorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcyMl9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcyMl9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzIyX1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcyMl9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcyMl9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIyX0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcyMl9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcyMl9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIyX1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcyMl9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzIyX1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcyMl9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzIyX0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzIyCisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcyMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzIzX0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcyM19IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzIzX0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcyM19JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyM19XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzIzX0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzIzX0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzIzX0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcyM19FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzIzX0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzIzX0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzIzX1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzIzX1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcyM19TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcyM19JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcyM19JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyM19JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyM19JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMjMKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzI0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzI0X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzI0X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcyNF9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI0X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcyNF9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzI0X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyNF9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyNF9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzI0X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcyNF9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyNF9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcyNF9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcyNF9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8yNAorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMjUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcyNV9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcyNV9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzI1X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcyNV9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcyNV9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI1X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcyNV9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcyNV9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI1X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcyNV9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzI1X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcyNV9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzI1X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzI1CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcyNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzI2X0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcyNl9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzI2X0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcyNl9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyNl9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzI2X0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzI2X0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzI2X0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcyNl9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzI2X0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzI2X0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzI2X1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzI2X1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcyNl9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyNl9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMjYKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzI3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzI3X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzI3X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcyN19XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI3X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcyN19JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzI3X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyN19FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyN19QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzI3X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcyN19TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyN19JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcyN19JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcyN19JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcyN19JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcyN19JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8yNworLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMjgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcyOF9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcyOF9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzI4X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcyOF9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcyOF9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI4X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcyOF9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcyOF9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI4X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcyOF9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzI4X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcyOF9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzI4X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzI4CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcyOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzI5X0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcyOV9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzI5X0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcyOV9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyOV9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzI5X0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzI5X0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzI5X0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcyOV9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzI5X0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzI5X0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzI5X1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzI5X1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcyOV9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyOV9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMjkKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzMwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzMwX0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzMwX0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkczMF9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzMwX1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkczMF9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzMwX0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkczMF9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkczMF9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzMwX1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkczMF9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkczMF9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkczMF9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkczMF9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkczMF9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkczMF9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8zMAorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkczMV9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkczMV9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzMxX1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkczMV9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkczMV9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkczMV9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkczMV9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzMxX0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkczMV9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkczMV9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzMxX1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkczMV9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzMxX1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkczMV9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkczMV9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkczMV9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzMxX0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkczMV9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzMxCisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKworI2VuZGlmIC8vIF9fSU9DX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X21lbW1hcC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfbWVtbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlZjNkYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X21lbW1hcC5oCkBAIC0wLDAgKzEsMTU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfbWVtbWFwX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX01FTU1BUF9IX18KKyNkZWZpbmUgX19IV19NRU1NQVBfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcmllcyBhbmQKKy8vIHBlcmlwaGVyYWxzIG9uIHRoZSBDUFVfTU1BUCBpbnRlcmZhY2UKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEZMQVNITUVNX0JBU0UgICAgICAgICAgIDB4MDAwMDAwMDAgLy8gRkxBU0hNRU0KKyNkZWZpbmUgQlJPTV9CQVNFICAgICAgICAgICAgICAgMHgxMDAwMDAwMCAvLyBCUk9NCisjZGVmaW5lIEdQUkFNX0JBU0UgICAgICAgICAgICAgIDB4MTEwMDAwMDAgLy8gR1BSQU0KKyNkZWZpbmUgU1JBTV9CQVNFICAgICAgICAgICAgICAgMHgyMDAwMDAwMCAvLyBTUkFNCisjZGVmaW5lIFJGQ19SQU1fQkFTRSAgICAgICAgICAgIDB4MjEwMDAwMDAgLy8gUkZSQU0KKyNkZWZpbmUgU1NJMF9CQVNFICAgICAgICAgICAgICAgMHg0MDAwMDAwMCAvLyBTU0kKKyNkZWZpbmUgVUFSVDBfQkFTRSAgICAgICAgICAgICAgMHg0MDAwMTAwMCAvLyBVQVJUCisjZGVmaW5lIEkyQzBfQkFTRSAgICAgICAgICAgICAgIDB4NDAwMDIwMDAgLy8gSTJDCisjZGVmaW5lIFNTSTFfQkFTRSAgICAgICAgICAgICAgIDB4NDAwMDgwMDAgLy8gU1NJCisjZGVmaW5lIEdQVDBfQkFTRSAgICAgICAgICAgICAgIDB4NDAwMTAwMDAgLy8gR1BUCisjZGVmaW5lIEdQVDFfQkFTRSAgICAgICAgICAgICAgIDB4NDAwMTEwMDAgLy8gR1BUCisjZGVmaW5lIEdQVDJfQkFTRSAgICAgICAgICAgICAgIDB4NDAwMTIwMDAgLy8gR1BUCisjZGVmaW5lIEdQVDNfQkFTRSAgICAgICAgICAgICAgIDB4NDAwMTMwMDAgLy8gR1BUCisjZGVmaW5lIFVETUEwX0JBU0UgICAgICAgICAgICAgIDB4NDAwMjAwMDAgLy8gVURNQQorI2RlZmluZSBJMlMwX0JBU0UgICAgICAgICAgICAgICAweDQwMDIxMDAwIC8vIEkyUworI2RlZmluZSBHUElPX0JBU0UgICAgICAgICAgICAgICAweDQwMDIyMDAwIC8vIEdQSU8KKyNkZWZpbmUgQ1JZUFRPX0JBU0UgICAgICAgICAgICAgMHg0MDAyNDAwMCAvLyBDUllQVE8KKyNkZWZpbmUgVFJOR19CQVNFICAgICAgICAgICAgICAgMHg0MDAyODAwMCAvLyBUUk5HCisjZGVmaW5lIEZMQVNIX0JBU0UgICAgICAgICAgICAgIDB4NDAwMzAwMDAgLy8gRkxBU0gKKyNkZWZpbmUgVklNU19CQVNFICAgICAgICAgICAgICAgMHg0MDAzNDAwMCAvLyBWSU1TCisjZGVmaW5lIFJGQ19QV1JfQkFTRSAgICAgICAgICAgIDB4NDAwNDAwMDAgLy8gUkZDX1BXUgorI2RlZmluZSBSRkNfREJFTExfQkFTRSAgICAgICAgICAweDQwMDQxMDAwIC8vIFJGQ19EQkVMTAorI2RlZmluZSBSRkNfUkFUX0JBU0UgICAgICAgICAgICAweDQwMDQzMDAwIC8vIFJGQ19SQVQKKyNkZWZpbmUgUkZDX0ZTQ0FfQkFTRSAgICAgICAgICAgMHg0MDA0NDAwMCAvLyBSRkNfRlNDQQorI2RlZmluZSBXRFRfQkFTRSAgICAgICAgICAgICAgICAweDQwMDgwMDAwIC8vIFdEVAorI2RlZmluZSBJT0NfQkFTRSAgICAgICAgICAgICAgICAweDQwMDgxMDAwIC8vIElPQworI2RlZmluZSBQUkNNX0JBU0UgICAgICAgICAgICAgICAweDQwMDgyMDAwIC8vIFBSQ00KKyNkZWZpbmUgRVZFTlRfQkFTRSAgICAgICAgICAgICAgMHg0MDA4MzAwMCAvLyBFVkVOVAorI2RlZmluZSBTTVBIX0JBU0UgICAgICAgICAgICAgICAweDQwMDg0MDAwIC8vIFNNUEgKKyNkZWZpbmUgQURJMl9CQVNFICAgICAgICAgICAgICAgMHg0MDA4NjAwMCAvLyBBREkKKyNkZWZpbmUgQURJM19CQVNFICAgICAgICAgICAgICAgMHg0MDA4NjIwMCAvLyBBREkKKyNkZWZpbmUgQU9OX1NZU0NUTF9CQVNFICAgICAgICAgMHg0MDA5MDAwMCAvLyBBT05fU1lTQ1RMCisjZGVmaW5lIEFPTl9XVUNfQkFTRSAgICAgICAgICAgIDB4NDAwOTEwMDAgLy8gQU9OX1dVQworI2RlZmluZSBBT05fUlRDX0JBU0UgICAgICAgICAgICAweDQwMDkyMDAwIC8vIEFPTl9SVEMKKyNkZWZpbmUgQU9OX0VWRU5UX0JBU0UgICAgICAgICAgMHg0MDA5MzAwMCAvLyBBT05fRVZFTlQKKyNkZWZpbmUgQU9OX0lPQ19CQVNFICAgICAgICAgICAgMHg0MDA5NDAwMCAvLyBBT05fSU9DCisjZGVmaW5lIEFPTl9CQVRNT05fQkFTRSAgICAgICAgIDB4NDAwOTUwMDAgLy8gQU9OX0JBVE1PTgorI2RlZmluZSBBVVhfQUlPRElPMF9CQVNFICAgICAgICAweDQwMEMxMDAwIC8vIEFVWF9BSU9ESU8KKyNkZWZpbmUgQVVYX0FJT0RJTzFfQkFTRSAgICAgICAgMHg0MDBDMjAwMCAvLyBBVVhfQUlPRElPCisjZGVmaW5lIEFVWF9URENfQkFTRSAgICAgICAgICAgIDB4NDAwQzQwMDAgLy8gQVVYX1REQworI2RlZmluZSBBVVhfRVZDVExfQkFTRSAgICAgICAgICAweDQwMEM1MDAwIC8vIEFVWF9FVkNUTAorI2RlZmluZSBBVVhfV1VDX0JBU0UgICAgICAgICAgICAweDQwMEM2MDAwIC8vIEFVWF9XVUMKKyNkZWZpbmUgQVVYX1RJTUVSX0JBU0UgICAgICAgICAgMHg0MDBDNzAwMCAvLyBBVVhfVElNRVIKKyNkZWZpbmUgQVVYX1NNUEhfQkFTRSAgICAgICAgICAgMHg0MDBDODAwMCAvLyBBVVhfU01QSAorI2RlZmluZSBBVVhfQU5BSUZfQkFTRSAgICAgICAgICAweDQwMEM5MDAwIC8vIEFVWF9BTkFJRgorI2RlZmluZSBBVVhfRERJMF9PU0NfQkFTRSAgICAgICAweDQwMENBMDAwIC8vIERESQorI2RlZmluZSBBVVhfQURJNF9CQVNFICAgICAgICAgICAweDQwMENCMDAwIC8vIEFESQorI2RlZmluZSBBVVhfUkFNX0JBU0UgICAgICAgICAgICAweDQwMEUwMDAwIC8vIEFVWF9SQU0KKyNkZWZpbmUgQVVYX1NDRV9CQVNFICAgICAgICAgICAgMHg0MDBFMTAwMCAvLyBBVVhfU0NFCisjZGVmaW5lIEZMQVNIX0NGR19CQVNFICAgICAgICAgIDB4NTAwMDAwMDAgLy8gQ0MyNl9EVU1NWV9DT01QCisjZGVmaW5lIEZDRkcxX0JBU0UgICAgICAgICAgICAgIDB4NTAwMDEwMDAgLy8gRkNGRzEKKyNkZWZpbmUgRkNGRzJfQkFTRSAgICAgICAgICAgICAgMHg1MDAwMjAwMCAvLyBGQ0ZHMgorI2lmbmRlZiBDQ0ZHX0JBU0UKKyNkZWZpbmUgQ0NGR19CQVNFICAgICAgICAgICAgICAgMHg1MDAwMzAwMCAvLyBDQ0ZHCisjZW5kaWYKKyNkZWZpbmUgU1NJMF9OT05CVUZfQkFTRSAgICAgICAgMHg2MDAwMDAwMCAvLyBTU0kgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIFVBUlQwX05PTkJVRl9CQVNFICAgICAgIDB4NjAwMDEwMDAgLy8gVUFSVCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgSTJDMF9OT05CVUZfQkFTRSAgICAgICAgMHg2MDAwMjAwMCAvLyBJMkMgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIFNTSTFfTk9OQlVGX0JBU0UgICAgICAgIDB4NjAwMDgwMDAgLy8gU1NJIENQVSBub25idWYgYmFzZQorI2RlZmluZSBHUFQwX05PTkJVRl9CQVNFICAgICAgICAweDYwMDEwMDAwIC8vIEdQVCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgR1BUMV9OT05CVUZfQkFTRSAgICAgICAgMHg2MDAxMTAwMCAvLyBHUFQgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEdQVDJfTk9OQlVGX0JBU0UgICAgICAgIDB4NjAwMTIwMDAgLy8gR1BUIENQVSBub25idWYgYmFzZQorI2RlZmluZSBHUFQzX05PTkJVRl9CQVNFICAgICAgICAweDYwMDEzMDAwIC8vIEdQVCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgVURNQTBfTk9OQlVGX0JBU0UgICAgICAgMHg2MDAyMDAwMCAvLyBVRE1BIENQVSBub25idWYgYmFzZQorI2RlZmluZSBJMlMwX05PTkJVRl9CQVNFICAgICAgICAweDYwMDIxMDAwIC8vIEkyUyBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgR1BJT19OT05CVUZfQkFTRSAgICAgICAgMHg2MDAyMjAwMCAvLyBHUElPIENQVSBub25idWYgYmFzZQorI2RlZmluZSBDUllQVE9fTk9OQlVGX0JBU0UgICAgICAweDYwMDI0MDAwIC8vIENSWVBUTyBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgVFJOR19OT05CVUZfQkFTRSAgICAgICAgMHg2MDAyODAwMCAvLyBUUk5HIENQVSBub25idWYgYmFzZQorI2RlZmluZSBGTEFTSF9OT05CVUZfQkFTRSAgICAgICAweDYwMDMwMDAwIC8vIEZMQVNIIENQVSBub25idWYgYmFzZQorI2RlZmluZSBWSU1TX05PTkJVRl9CQVNFICAgICAgICAweDYwMDM0MDAwIC8vIFZJTVMgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIFJGQ19QV1JfTk9OQlVGX0JBU0UgICAgIDB4NjAwNDAwMDAgLy8gUkZDX1BXUiBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgUkZDX0RCRUxMX05PTkJVRl9CQVNFICAgMHg2MDA0MTAwMCAvLyBSRkNfREJFTEwgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIFJGQ19SQVRfTk9OQlVGX0JBU0UgICAgIDB4NjAwNDMwMDAgLy8gUkZDX1JBVCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgUkZDX0ZTQ0FfTk9OQlVGX0JBU0UgICAgMHg2MDA0NDAwMCAvLyBSRkNfRlNDQSBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgV0RUX05PTkJVRl9CQVNFICAgICAgICAgMHg2MDA4MDAwMCAvLyBXRFQgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIElPQ19OT05CVUZfQkFTRSAgICAgICAgIDB4NjAwODEwMDAgLy8gSU9DIENQVSBub25idWYgYmFzZQorI2RlZmluZSBQUkNNX05PTkJVRl9CQVNFICAgICAgICAweDYwMDgyMDAwIC8vIFBSQ00gQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEVWRU5UX05PTkJVRl9CQVNFICAgICAgIDB4NjAwODMwMDAgLy8gRVZFTlQgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIFNNUEhfTk9OQlVGX0JBU0UgICAgICAgIDB4NjAwODQwMDAgLy8gU01QSCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQURJMl9OT05CVUZfQkFTRSAgICAgICAgMHg2MDA4NjAwMCAvLyBBREkgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFESTNfTk9OQlVGX0JBU0UgICAgICAgIDB4NjAwODYyMDAgLy8gQURJIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBT05fU1lTQ1RMX05PTkJVRl9CQVNFICAweDYwMDkwMDAwIC8vIEFPTl9TWVNDVEwgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFPTl9XVUNfTk9OQlVGX0JBU0UgICAgIDB4NjAwOTEwMDAgLy8gQU9OX1dVQyBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQU9OX1JUQ19OT05CVUZfQkFTRSAgICAgMHg2MDA5MjAwMCAvLyBBT05fUlRDIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBT05fRVZFTlRfTk9OQlVGX0JBU0UgICAweDYwMDkzMDAwIC8vIEFPTl9FVkVOVCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQU9OX0lPQ19OT05CVUZfQkFTRSAgICAgMHg2MDA5NDAwMCAvLyBBT05fSU9DIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBT05fQkFUTU9OX05PTkJVRl9CQVNFICAweDYwMDk1MDAwIC8vIEFPTl9CQVRNT04gQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFVWF9BSU9ESU8wX05PTkJVRl9CQVNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MDBDMTAwMCAvLyBBVVhfQUlPRElPIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBVVhfQUlPRElPMV9OT05CVUZfQkFTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAwQzIwMDAgLy8gQVVYX0FJT0RJTyBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQVVYX1REQ19OT05CVUZfQkFTRSAgICAgMHg2MDBDNDAwMCAvLyBBVVhfVERDIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBVVhfRVZDVExfTk9OQlVGX0JBU0UgICAweDYwMEM1MDAwIC8vIEFVWF9FVkNUTCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQVVYX1dVQ19OT05CVUZfQkFTRSAgICAgMHg2MDBDNjAwMCAvLyBBVVhfV1VDIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBVVhfVElNRVJfTk9OQlVGX0JBU0UgICAweDYwMEM3MDAwIC8vIEFVWF9USU1FUiBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQVVYX1NNUEhfTk9OQlVGX0JBU0UgICAgMHg2MDBDODAwMCAvLyBBVVhfU01QSCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQVVYX0FOQUlGX05PTkJVRl9CQVNFICAgMHg2MDBDOTAwMCAvLyBBVVhfQU5BSUYgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFVWF9EREkwX09TQ19OT05CVUZfQkFTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAwQ0EwMDAgLy8gRERJIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBVVhfQURJNF9OT05CVUZfQkFTRSAgICAweDYwMENCMDAwIC8vIEFESSBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQVVYX1JBTV9OT05CVUZfQkFTRSAgICAgMHg2MDBFMDAwMCAvLyBBVVhfUkFNIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBVVhfU0NFX05PTkJVRl9CQVNFICAgICAweDYwMEUxMDAwIC8vIEFVWF9TQ0UgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEZMQVNITUVNX0FMSUFTX0JBU0UgICAgIDB4QTAwMDAwMDAgLy8gRkxBU0hNRU0gQWxpYXMgYmFzZQorI2RlZmluZSBDUFVfSVRNX0JBU0UgICAgICAgICAgICAweEUwMDAwMDAwIC8vIENQVV9JVE0KKyNkZWZpbmUgQ1BVX0RXVF9CQVNFICAgICAgICAgICAgMHhFMDAwMTAwMCAvLyBDUFVfRFdUCisjZGVmaW5lIENQVV9GUEJfQkFTRSAgICAgICAgICAgIDB4RTAwMDIwMDAgLy8gQ1BVX0ZQQgorI2RlZmluZSBDUFVfU0NTX0JBU0UgICAgICAgICAgICAweEUwMDBFMDAwIC8vIENQVV9TQ1MKKyNkZWZpbmUgQ1BVX1RQSVVfQkFTRSAgICAgICAgICAgMHhFMDA0MDAwMCAvLyBDUFVfVFBJVQorI2RlZmluZSBDUFVfVElQUk9QX0JBU0UgICAgICAgICAweEUwMEZFMDAwIC8vIENQVV9USVBST1AKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9CQVNFICAgICAgMHhFMDBGRjAwMCAvLyBDUFVfUk9NX1RBQkxFCisKKyNlbmRpZiAvLyBfX0hXX01FTU1BUF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19udmljLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19udmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxYmNhMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X252aWMuaApAQCAtMCwwICsxLDEwMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19udmljLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTAxLTEzIDE2OjU5OjU1ICswMTAwIChUdWUsIDEzIEphbiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQyMzY1CisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfTlZJQ19IX18KKyNkZWZpbmUgX19IV19OVklDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIE5WSUMgcmVnaXN0ZXIgYWRkcmVzc2VzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19JTlRfVFlQRSAgICAgICAgICAgMHhFMDAwRTAwNCAgLy8gSW50ZXJydXB0IENvbnRyb2xsZXIgVHlwZSBSZWcKKyNkZWZpbmUgTlZJQ19BQ1RMUiAgICAgICAgICAgICAgMHhFMDAwRTAwOCAgLy8gQXV4aWxpYXJ5IENvbnRyb2wKKyNkZWZpbmUgTlZJQ19TVF9DVFJMICAgICAgICAgICAgMHhFMDAwRTAxMCAgLy8gU3lzVGljayBDb250cm9sIGFuZCBTdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIKKyNkZWZpbmUgTlZJQ19TVF9SRUxPQUQgICAgICAgICAgMHhFMDAwRTAxNCAgLy8gU3lzVGljayBSZWxvYWQgVmFsdWUgUmVnaXN0ZXIKKyNkZWZpbmUgTlZJQ19TVF9DVVJSRU5UICAgICAgICAgMHhFMDAwRTAxOCAgLy8gU3lzVGljayBDdXJyZW50IFZhbHVlIFJlZ2lzdGVyCisjZGVmaW5lIE5WSUNfU1RfQ0FMICAgICAgICAgICAgIDB4RTAwMEUwMUMgIC8vIFN5c1RpY2sgQ2FsaWJyYXRpb24gVmFsdWUgUmVnCisjZGVmaW5lIE5WSUNfRU4wICAgICAgICAgICAgICAgIDB4RTAwMEUxMDAgIC8vIEludGVycnVwdCAwLTMxIFNldCBFbmFibGUKKyNkZWZpbmUgTlZJQ19FTjEgICAgICAgICAgICAgICAgMHhFMDAwRTEwNCAgLy8gSW50ZXJydXB0IDMyLTU0IFNldCBFbmFibGUKKyNkZWZpbmUgTlZJQ19ESVMwICAgICAgICAgICAgICAgMHhFMDAwRTE4MCAgLy8gSW50ZXJydXB0IDAtMzEgQ2xlYXIgRW5hYmxlCisjZGVmaW5lIE5WSUNfRElTMSAgICAgICAgICAgICAgIDB4RTAwMEUxODQgIC8vIEludGVycnVwdCAzMi01NCBDbGVhciBFbmFibGUKKyNkZWZpbmUgTlZJQ19QRU5EMCAgICAgICAgICAgICAgMHhFMDAwRTIwMCAgLy8gSW50ZXJydXB0IDAtMzEgU2V0IFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19QRU5EMSAgICAgICAgICAgICAgMHhFMDAwRTIwNCAgLy8gSW50ZXJydXB0IDMyLTU0IFNldCBQZW5kaW5nCisjZGVmaW5lIE5WSUNfVU5QRU5EMCAgICAgICAgICAgIDB4RTAwMEUyODAgIC8vIEludGVycnVwdCAwLTMxIENsZWFyIFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19VTlBFTkQxICAgICAgICAgICAgMHhFMDAwRTI4NCAgLy8gSW50ZXJydXB0IDMyLTU0IENsZWFyIFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwICAgICAgICAgICAgMHhFMDAwRTMwMCAgLy8gSW50ZXJydXB0IDAtMzEgQWN0aXZlIEJpdAorI2RlZmluZSBOVklDX0FDVElWRTEgICAgICAgICAgICAweEUwMDBFMzA0ICAvLyBJbnRlcnJ1cHQgMzItNTQgQWN0aXZlIEJpdAorI2RlZmluZSBOVklDX1BSSTAgICAgICAgICAgICAgICAweEUwMDBFNDAwICAvLyBJbnRlcnJ1cHQgMC0zIFByaW9yaXR5CisjZGVmaW5lIE5WSUNfUFJJMSAgICAgICAgICAgICAgIDB4RTAwMEU0MDQgIC8vIEludGVycnVwdCA0LTcgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19QUkkyICAgICAgICAgICAgICAgMHhFMDAwRTQwOCAgLy8gSW50ZXJydXB0IDgtMTEgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19QUkkzICAgICAgICAgICAgICAgMHhFMDAwRTQwQyAgLy8gSW50ZXJydXB0IDEyLTE1IFByaW9yaXR5CisjZGVmaW5lIE5WSUNfUFJJNCAgICAgICAgICAgICAgIDB4RTAwMEU0MTAgIC8vIEludGVycnVwdCAxNi0xOSBQcmlvcml0eQorI2RlZmluZSBOVklDX1BSSTUgICAgICAgICAgICAgICAweEUwMDBFNDE0ICAvLyBJbnRlcnJ1cHQgMjAtMjMgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19QUkk2ICAgICAgICAgICAgICAgMHhFMDAwRTQxOCAgLy8gSW50ZXJydXB0IDI0LTI3IFByaW9yaXR5CisjZGVmaW5lIE5WSUNfUFJJNyAgICAgICAgICAgICAgIDB4RTAwMEU0MUMgIC8vIEludGVycnVwdCAyOC0zMSBQcmlvcml0eQorI2RlZmluZSBOVklDX1BSSTggICAgICAgICAgICAgICAweEUwMDBFNDIwICAvLyBJbnRlcnJ1cHQgMzItMzUgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19QUkk5ICAgICAgICAgICAgICAgMHhFMDAwRTQyNCAgLy8gSW50ZXJydXB0IDM2LTM5IFByaW9yaXR5CisjZGVmaW5lIE5WSUNfUFJJMTAgICAgICAgICAgICAgIDB4RTAwMEU0MjggIC8vIEludGVycnVwdCA0MC00MyBQcmlvcml0eQorI2RlZmluZSBOVklDX1BSSTExICAgICAgICAgICAgICAweEUwMDBFNDJDICAvLyBJbnRlcnJ1cHQgNDQtNDcgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19QUkkxMiAgICAgICAgICAgICAgMHhFMDAwRTQzMCAgLy8gSW50ZXJydXB0IDQ4LTUxIFByaW9yaXR5CisjZGVmaW5lIE5WSUNfUFJJMTMgICAgICAgICAgICAgIDB4RTAwMEU0MzQgIC8vIEludGVycnVwdCA1Mi01NSBQcmlvcml0eQorI2RlZmluZSBOVklDX0NQVUlEICAgICAgICAgICAgICAweEUwMDBFRDAwICAvLyBDUFUgSUQgQmFzZQorI2RlZmluZSBOVklDX0lOVF9DVFJMICAgICAgICAgICAweEUwMDBFRDA0ICAvLyBJbnRlcnJ1cHQgQ29udHJvbCBhbmQgU3RhdGUKKyNkZWZpbmUgTlZJQ19WVEFCTEUgICAgICAgICAgICAgMHhFMDAwRUQwOCAgLy8gVmVjdG9yIFRhYmxlIE9mZnNldAorI2RlZmluZSBOVklDX0FQSU5UICAgICAgICAgICAgICAweEUwMDBFRDBDICAvLyBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRyb2wKKyNkZWZpbmUgTlZJQ19TWVNfQ1RSTCAgICAgICAgICAgMHhFMDAwRUQxMCAgLy8gU3lzdGVtIENvbnRyb2wKKyNkZWZpbmUgTlZJQ19DRkdfQ1RSTCAgICAgICAgICAgMHhFMDAwRUQxNCAgLy8gQ29uZmlndXJhdGlvbiBhbmQgQ29udHJvbAorI2RlZmluZSBOVklDX1NZU19QUkkxICAgICAgICAgICAweEUwMDBFRDE4ICAvLyBTeXN0ZW0gSGFuZGxlciBQcmlvcml0eSAxCisjZGVmaW5lIE5WSUNfU1lTX1BSSTIgICAgICAgICAgIDB4RTAwMEVEMUMgIC8vIFN5c3RlbSBIYW5kbGVyIFByaW9yaXR5IDIKKyNkZWZpbmUgTlZJQ19TWVNfUFJJMyAgICAgICAgICAgMHhFMDAwRUQyMCAgLy8gU3lzdGVtIEhhbmRsZXIgUHJpb3JpdHkgMworI2RlZmluZSBOVklDX1NZU19ITkRfQ1RSTCAgICAgICAweEUwMDBFRDI0ICAvLyBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZQorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVQgICAgICAgICAweEUwMDBFRDI4ICAvLyBDb25maWd1cmFibGUgRmF1bHQgU3RhdHVzCisjZGVmaW5lIE5WSUNfSEZBVUxUX1NUQVQgICAgICAgIDB4RTAwMEVEMkMgIC8vIEhhcmQgRmF1bHQgU3RhdHVzCisjZGVmaW5lIE5WSUNfREVCVUdfU1RBVCAgICAgICAgIDB4RTAwMEVEMzAgIC8vIERlYnVnIFN0YXR1cyBSZWdpc3RlcgorI2RlZmluZSBOVklDX01NX0FERFIgICAgICAgICAgICAweEUwMDBFRDM0ICAvLyBNZW1vcnkgTWFuYWdlbWVudCBGYXVsdCBBZGRyZXNzCisjZGVmaW5lIE5WSUNfRkFVTFRfQUREUiAgICAgICAgIDB4RTAwMEVEMzggIC8vIEJ1cyBGYXVsdCBBZGRyZXNzCisjZGVmaW5lIE5WSUNfTVBVX1RZUEUgICAgICAgICAgIDB4RTAwMEVEOTAgIC8vIE1QVSBUeXBlCisjZGVmaW5lIE5WSUNfTVBVX0NUUkwgICAgICAgICAgIDB4RTAwMEVEOTQgIC8vIE1QVSBDb250cm9sCisjZGVmaW5lIE5WSUNfTVBVX05VTUJFUiAgICAgICAgIDB4RTAwMEVEOTggIC8vIE1QVSBSZWdpb24gTnVtYmVyCisjZGVmaW5lIE5WSUNfTVBVX0JBU0UgICAgICAgICAgIDB4RTAwMEVEOUMgIC8vIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzCisjZGVmaW5lIE5WSUNfTVBVX0FUVFIgICAgICAgICAgIDB4RTAwMEVEQTAgIC8vIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplCisjZGVmaW5lIE5WSUNfTVBVX0JBU0UxICAgICAgICAgIDB4RTAwMEVEQTQgIC8vIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIEFsaWFzIDEKKyNkZWZpbmUgTlZJQ19NUFVfQVRUUjEgICAgICAgICAgMHhFMDAwRURBOCAgLy8gTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxpYXMgMQorI2RlZmluZSBOVklDX01QVV9CQVNFMiAgICAgICAgICAweEUwMDBFREFDICAvLyBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBBbGlhcyAyCisjZGVmaW5lIE5WSUNfTVBVX0FUVFIyICAgICAgICAgIDB4RTAwMEVEQjAgIC8vIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsaWFzIDIKKyNkZWZpbmUgTlZJQ19NUFVfQkFTRTMgICAgICAgICAgMHhFMDAwRURCNCAgLy8gTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgQWxpYXMgMworI2RlZmluZSBOVklDX01QVV9BVFRSMyAgICAgICAgICAweEUwMDBFREI4ICAvLyBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGlhcyAzCisjZGVmaW5lIE5WSUNfREJHX0NUUkwgICAgICAgICAgIDB4RTAwMEVERjAgIC8vIERlYnVnIENvbnRyb2wgYW5kIFN0YXR1cyBSZWcKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUiAgICAgICAgICAgMHhFMDAwRURGNCAgLy8gRGVidWcgQ29yZSBSZWcuIFRyYW5zZmVyIFNlbGVjdAorI2RlZmluZSBOVklDX0RCR19EQVRBICAgICAgICAgICAweEUwMDBFREY4ICAvLyBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIERhdGEKKyNkZWZpbmUgTlZJQ19EQkdfSU5UICAgICAgICAgICAgMHhFMDAwRURGQyAgLy8gRGVidWcgUmVzZXQgSW50ZXJydXB0IENvbnRyb2wKKyNkZWZpbmUgTlZJQ19TV19UUklHICAgICAgICAgICAgMHhFMDAwRUYwMCAgLy8gU29mdHdhcmUgVHJpZ2dlciBJbnRlcnJ1cHQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0lOVF9UWVBFIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19JTlRfVFlQRV9MSU5FU19NICAgMHgwMDAwMDAxRiAgLy8gTnVtYmVyIG9mIGludGVycnVwdCBsaW5lcyAoeDMyKQorI2RlZmluZSBOVklDX0lOVF9UWVBFX0xJTkVTX1MgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19BQ1RMUiByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfQUNUTFJfRElTRk9MRCAgICAgIDB4MDAwMDAwMDQgIC8vIERpc2FibGUgSVQgRm9sZGluZworI2RlZmluZSBOVklDX0FDVExSX0RJU1dCVUYgICAgICAweDAwMDAwMDAyICAvLyBEaXNhYmxlIFdyaXRlIEJ1ZmZlcgorI2RlZmluZSBOVklDX0FDVExSX0RJU01DWUMgICAgICAweDAwMDAwMDAxICAvLyBEaXNhYmxlIEludGVycnVwdHMgb2YgTXVsdGlwbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3ljbGUgSW5zdHJ1Y3Rpb25zCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19TVF9DVFJMIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19TVF9DVFJMX0NPVU5UICAgICAgMHgwMDAxMDAwMCAgLy8gQ291bnQgRmxhZworI2RlZmluZSBOVklDX1NUX0NUUkxfQ0xLX1NSQyAgICAweDAwMDAwMDA0ICAvLyBDbG9jayBTb3VyY2UKKyNkZWZpbmUgTlZJQ19TVF9DVFJMX0lOVEVOICAgICAgMHgwMDAwMDAwMiAgLy8gSW50ZXJydXB0IEVuYWJsZQorI2RlZmluZSBOVklDX1NUX0NUUkxfRU5BQkxFICAgICAweDAwMDAwMDAxICAvLyBFbmFibGUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1NUX1JFTE9BRCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfU1RfUkVMT0FEX00gICAgICAgIDB4MDBGRkZGRkYgIC8vIFJlbG9hZCBWYWx1ZQorI2RlZmluZSBOVklDX1NUX1JFTE9BRF9TICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19TVF9DVVJSRU5UCisvLyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfU1RfQ1VSUkVOVF9NICAgICAgIDB4MDBGRkZGRkYgIC8vIEN1cnJlbnQgVmFsdWUKKyNkZWZpbmUgTlZJQ19TVF9DVVJSRU5UX1MgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfU1RfQ0FMIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19TVF9DQUxfTk9SRUYgICAgICAgMHg4MDAwMDAwMCAgLy8gTm8gcmVmZXJlbmNlIGNsb2NrCisjZGVmaW5lIE5WSUNfU1RfQ0FMX1NLRVcgICAgICAgIDB4NDAwMDAwMDAgIC8vIENsb2NrIHNrZXcKKyNkZWZpbmUgTlZJQ19TVF9DQUxfT05FTVNfTSAgICAgMHgwMEZGRkZGRiAgLy8gMW1zIHJlZmVyZW5jZSB2YWx1ZQorI2RlZmluZSBOVklDX1NUX0NBTF9PTkVNU19TICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19FTjAgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0VOMF9JTlRfTSAgICAgICAgICAweEZGRkZGRkZGICAvLyBJbnRlcnJ1cHQgRW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIEludGVycnVwdCAwIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQxICAgICAgICAgICAweDAwMDAwMDAyICAvLyBJbnRlcnJ1cHQgMSBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMiAgICAgICAgICAgMHgwMDAwMDAwNCAgLy8gSW50ZXJydXB0IDIgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDMgICAgICAgICAgIDB4MDAwMDAwMDggIC8vIEludGVycnVwdCAzIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQ0ICAgICAgICAgICAweDAwMDAwMDEwICAvLyBJbnRlcnJ1cHQgNCBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UNSAgICAgICAgICAgMHgwMDAwMDAyMCAgLy8gSW50ZXJydXB0IDUgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDYgICAgICAgICAgIDB4MDAwMDAwNDAgIC8vIEludGVycnVwdCA2IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQ3ICAgICAgICAgICAweDAwMDAwMDgwICAvLyBJbnRlcnJ1cHQgNyBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UOCAgICAgICAgICAgMHgwMDAwMDEwMCAgLy8gSW50ZXJydXB0IDggZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDkgICAgICAgICAgIDB4MDAwMDAyMDAgIC8vIEludGVycnVwdCA5IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQxMCAgICAgICAgICAweDAwMDAwNDAwICAvLyBJbnRlcnJ1cHQgMTAgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDExICAgICAgICAgIDB4MDAwMDA4MDAgIC8vIEludGVycnVwdCAxMSBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMTIgICAgICAgICAgMHgwMDAwMTAwMCAgLy8gSW50ZXJydXB0IDEyIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQxMyAgICAgICAgICAweDAwMDAyMDAwICAvLyBJbnRlcnJ1cHQgMTMgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDE0ICAgICAgICAgIDB4MDAwMDQwMDAgIC8vIEludGVycnVwdCAxNCBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMTUgICAgICAgICAgMHgwMDAwODAwMCAgLy8gSW50ZXJydXB0IDE1IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQxNiAgICAgICAgICAweDAwMDEwMDAwICAvLyBJbnRlcnJ1cHQgMTYgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDE3ICAgICAgICAgIDB4MDAwMjAwMDAgIC8vIEludGVycnVwdCAxNyBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMTggICAgICAgICAgMHgwMDA0MDAwMCAgLy8gSW50ZXJydXB0IDE4IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQxOSAgICAgICAgICAweDAwMDgwMDAwICAvLyBJbnRlcnJ1cHQgMTkgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDIwICAgICAgICAgIDB4MDAxMDAwMDAgIC8vIEludGVycnVwdCAyMCBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMjEgICAgICAgICAgMHgwMDIwMDAwMCAgLy8gSW50ZXJydXB0IDIxIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQyMiAgICAgICAgICAweDAwNDAwMDAwICAvLyBJbnRlcnJ1cHQgMjIgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDIzICAgICAgICAgIDB4MDA4MDAwMDAgIC8vIEludGVycnVwdCAyMyBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMjQgICAgICAgICAgMHgwMTAwMDAwMCAgLy8gSW50ZXJydXB0IDI0IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQyNSAgICAgICAgICAweDAyMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjUgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDI2ICAgICAgICAgIDB4MDQwMDAwMDAgIC8vIEludGVycnVwdCAyNiBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMjcgICAgICAgICAgMHgwODAwMDAwMCAgLy8gSW50ZXJydXB0IDI3IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQyOCAgICAgICAgICAweDEwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjggZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDI5ICAgICAgICAgIDB4MjAwMDAwMDAgIC8vIEludGVycnVwdCAyOSBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMzAgICAgICAgICAgMHg0MDAwMDAwMCAgLy8gSW50ZXJydXB0IDMwIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQzMSAgICAgICAgICAweDgwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMzEgZW5hYmxlCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19FTjEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0VOMV9JTlRfTSAgICAgICAgICAweDAwN0ZGRkZGICAvLyBJbnRlcnJ1cHQgRW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDMyICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIEludGVycnVwdCAzMiBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UMzMgICAgICAgICAgMHgwMDAwMDAwMiAgLy8gSW50ZXJydXB0IDMzIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQzNCAgICAgICAgICAweDAwMDAwMDA0ICAvLyBJbnRlcnJ1cHQgMzQgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDM1ICAgICAgICAgIDB4MDAwMDAwMDggIC8vIEludGVycnVwdCAzNSBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UMzYgICAgICAgICAgMHgwMDAwMDAxMCAgLy8gSW50ZXJydXB0IDM2IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQzNyAgICAgICAgICAweDAwMDAwMDIwICAvLyBJbnRlcnJ1cHQgMzcgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDM4ICAgICAgICAgIDB4MDAwMDAwNDAgIC8vIEludGVycnVwdCAzOCBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UMzkgICAgICAgICAgMHgwMDAwMDA4MCAgLy8gSW50ZXJydXB0IDM5IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQ0MCAgICAgICAgICAweDAwMDAwMTAwICAvLyBJbnRlcnJ1cHQgNDAgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDQxICAgICAgICAgIDB4MDAwMDAyMDAgIC8vIEludGVycnVwdCA0MSBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UNDIgICAgICAgICAgMHgwMDAwMDQwMCAgLy8gSW50ZXJydXB0IDQyIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQ0MyAgICAgICAgICAweDAwMDAwODAwICAvLyBJbnRlcnJ1cHQgNDMgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDQ0ICAgICAgICAgIDB4MDAwMDEwMDAgIC8vIEludGVycnVwdCA0NCBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UNDUgICAgICAgICAgMHgwMDAwMjAwMCAgLy8gSW50ZXJydXB0IDQ1IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQ0NiAgICAgICAgICAweDAwMDA0MDAwICAvLyBJbnRlcnJ1cHQgNDYgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDQ3ICAgICAgICAgIDB4MDAwMDgwMDAgIC8vIEludGVycnVwdCA0NyBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UNDggICAgICAgICAgMHgwMDAxMDAwMCAgLy8gSW50ZXJydXB0IDQ4IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQ0OSAgICAgICAgICAweDAwMDIwMDAwICAvLyBJbnRlcnJ1cHQgNDkgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDUwICAgICAgICAgIDB4MDAwNDAwMDAgIC8vIEludGVycnVwdCA1MCBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UNTEgICAgICAgICAgMHgwMDA4MDAwMCAgLy8gSW50ZXJydXB0IDUxIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQ1MiAgICAgICAgICAweDAwMTAwMDAwICAvLyBJbnRlcnJ1cHQgNTIgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDUzICAgICAgICAgIDB4MDAyMDAwMDAgIC8vIEludGVycnVwdCA1MyBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UNTQgICAgICAgICAgMHgwMDQwMDAwMCAgLy8gSW50ZXJydXB0IDU0IGVuYWJsZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfRElTMCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfRElTMF9JTlRfTSAgICAgICAgIDB4RkZGRkZGRkYgIC8vIEludGVycnVwdCBEaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMF9JTlQwICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIEludGVycnVwdCAwIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDEgICAgICAgICAgMHgwMDAwMDAwMiAgLy8gSW50ZXJydXB0IDEgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMiAgICAgICAgICAweDAwMDAwMDA0ICAvLyBJbnRlcnJ1cHQgMiBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMF9JTlQzICAgICAgICAgIDB4MDAwMDAwMDggIC8vIEludGVycnVwdCAzIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDQgICAgICAgICAgMHgwMDAwMDAxMCAgLy8gSW50ZXJydXB0IDQgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UNSAgICAgICAgICAweDAwMDAwMDIwICAvLyBJbnRlcnJ1cHQgNSBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMF9JTlQ2ICAgICAgICAgIDB4MDAwMDAwNDAgIC8vIEludGVycnVwdCA2IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDcgICAgICAgICAgMHgwMDAwMDA4MCAgLy8gSW50ZXJydXB0IDcgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UOCAgICAgICAgICAweDAwMDAwMTAwICAvLyBJbnRlcnJ1cHQgOCBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMF9JTlQ5ICAgICAgICAgIDB4MDAwMDAyMDAgIC8vIEludGVycnVwdCA5IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDEwICAgICAgICAgMHgwMDAwMDQwMCAgLy8gSW50ZXJydXB0IDEwIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDExICAgICAgICAgMHgwMDAwMDgwMCAgLy8gSW50ZXJydXB0IDExIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDEyICAgICAgICAgMHgwMDAwMTAwMCAgLy8gSW50ZXJydXB0IDEyIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDEzICAgICAgICAgMHgwMDAwMjAwMCAgLy8gSW50ZXJydXB0IDEzIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDE0ICAgICAgICAgMHgwMDAwNDAwMCAgLy8gSW50ZXJydXB0IDE0IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDE1ICAgICAgICAgMHgwMDAwODAwMCAgLy8gSW50ZXJydXB0IDE1IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDE2ICAgICAgICAgMHgwMDAxMDAwMCAgLy8gSW50ZXJydXB0IDE2IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDE3ICAgICAgICAgMHgwMDAyMDAwMCAgLy8gSW50ZXJydXB0IDE3IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDE4ICAgICAgICAgMHgwMDA0MDAwMCAgLy8gSW50ZXJydXB0IDE4IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDE5ICAgICAgICAgMHgwMDA4MDAwMCAgLy8gSW50ZXJydXB0IDE5IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDIwICAgICAgICAgMHgwMDEwMDAwMCAgLy8gSW50ZXJydXB0IDIwIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDIxICAgICAgICAgMHgwMDIwMDAwMCAgLy8gSW50ZXJydXB0IDIxIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDIyICAgICAgICAgMHgwMDQwMDAwMCAgLy8gSW50ZXJydXB0IDIyIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDIzICAgICAgICAgMHgwMDgwMDAwMCAgLy8gSW50ZXJydXB0IDIzIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDI0ICAgICAgICAgMHgwMTAwMDAwMCAgLy8gSW50ZXJydXB0IDI0IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDI1ICAgICAgICAgMHgwMjAwMDAwMCAgLy8gSW50ZXJydXB0IDI1IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDI2ICAgICAgICAgMHgwNDAwMDAwMCAgLy8gSW50ZXJydXB0IDI2IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDI3ICAgICAgICAgMHgwODAwMDAwMCAgLy8gSW50ZXJydXB0IDI3IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDI4ICAgICAgICAgMHgxMDAwMDAwMCAgLy8gSW50ZXJydXB0IDI4IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDI5ICAgICAgICAgMHgyMDAwMDAwMCAgLy8gSW50ZXJydXB0IDI5IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDMwICAgICAgICAgMHg0MDAwMDAwMCAgLy8gSW50ZXJydXB0IDMwIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDMxICAgICAgICAgMHg4MDAwMDAwMCAgLy8gSW50ZXJydXB0IDMxIGRpc2FibGUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0RJUzEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0RJUzFfSU5UX00gICAgICAgICAweDAwN0ZGRkZGICAvLyBJbnRlcnJ1cHQgRGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UMzIgICAgICAgICAweDAwMDAwMDAxICAvLyBJbnRlcnJ1cHQgMzIgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UMzMgICAgICAgICAweDAwMDAwMDAyICAvLyBJbnRlcnJ1cHQgMzMgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UMzQgICAgICAgICAweDAwMDAwMDA0ICAvLyBJbnRlcnJ1cHQgMzQgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UMzUgICAgICAgICAweDAwMDAwMDA4ICAvLyBJbnRlcnJ1cHQgMzUgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UMzYgICAgICAgICAweDAwMDAwMDEwICAvLyBJbnRlcnJ1cHQgMzYgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UMzcgICAgICAgICAweDAwMDAwMDIwICAvLyBJbnRlcnJ1cHQgMzcgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UMzggICAgICAgICAweDAwMDAwMDQwICAvLyBJbnRlcnJ1cHQgMzggZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UMzkgICAgICAgICAweDAwMDAwMDgwICAvLyBJbnRlcnJ1cHQgMzkgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNDAgICAgICAgICAweDAwMDAwMTAwICAvLyBJbnRlcnJ1cHQgNDAgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNDEgICAgICAgICAweDAwMDAwMjAwICAvLyBJbnRlcnJ1cHQgNDEgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNDIgICAgICAgICAweDAwMDAwNDAwICAvLyBJbnRlcnJ1cHQgNDIgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNDMgICAgICAgICAweDAwMDAwODAwICAvLyBJbnRlcnJ1cHQgNDMgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNDQgICAgICAgICAweDAwMDAxMDAwICAvLyBJbnRlcnJ1cHQgNDQgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNDUgICAgICAgICAweDAwMDAyMDAwICAvLyBJbnRlcnJ1cHQgNDUgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNDYgICAgICAgICAweDAwMDA0MDAwICAvLyBJbnRlcnJ1cHQgNDYgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNDcgICAgICAgICAweDAwMDA4MDAwICAvLyBJbnRlcnJ1cHQgNDcgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNDggICAgICAgICAweDAwMDEwMDAwICAvLyBJbnRlcnJ1cHQgNDggZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNDkgICAgICAgICAweDAwMDIwMDAwICAvLyBJbnRlcnJ1cHQgNDkgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNTAgICAgICAgICAweDAwMDQwMDAwICAvLyBJbnRlcnJ1cHQgNTAgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNTEgICAgICAgICAweDAwMDgwMDAwICAvLyBJbnRlcnJ1cHQgNTEgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNTIgICAgICAgICAweDAwMTAwMDAwICAvLyBJbnRlcnJ1cHQgNTIgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNTMgICAgICAgICAweDAwMjAwMDAwICAvLyBJbnRlcnJ1cHQgNTMgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzFfSU5UNTQgICAgICAgICAweDAwNDAwMDAwICAvLyBJbnRlcnJ1cHQgNTQgZGlzYWJsZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUEVORDAgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1BFTkQwX0lOVF9NICAgICAgICAweEZGRkZGRkZGICAvLyBJbnRlcnJ1cHQgU2V0IFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19QRU5EMF9JTlQwICAgICAgICAgMHgwMDAwMDAwMSAgLy8gSW50ZXJydXB0IDAgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDEgICAgICAgICAweDAwMDAwMDAyICAvLyBJbnRlcnJ1cHQgMSBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMiAgICAgICAgIDB4MDAwMDAwMDQgIC8vIEludGVycnVwdCAyIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMF9JTlQzICAgICAgICAgMHgwMDAwMDAwOCAgLy8gSW50ZXJydXB0IDMgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDQgICAgICAgICAweDAwMDAwMDEwICAvLyBJbnRlcnJ1cHQgNCBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UNSAgICAgICAgIDB4MDAwMDAwMjAgIC8vIEludGVycnVwdCA1IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMF9JTlQ2ICAgICAgICAgMHgwMDAwMDA0MCAgLy8gSW50ZXJydXB0IDYgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDcgICAgICAgICAweDAwMDAwMDgwICAvLyBJbnRlcnJ1cHQgNyBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UOCAgICAgICAgIDB4MDAwMDAxMDAgIC8vIEludGVycnVwdCA4IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMF9JTlQ5ICAgICAgICAgMHgwMDAwMDIwMCAgLy8gSW50ZXJydXB0IDkgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDEwICAgICAgICAweDAwMDAwNDAwICAvLyBJbnRlcnJ1cHQgMTAgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDExICAgICAgICAweDAwMDAwODAwICAvLyBJbnRlcnJ1cHQgMTEgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDEyICAgICAgICAweDAwMDAxMDAwICAvLyBJbnRlcnJ1cHQgMTIgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDEzICAgICAgICAweDAwMDAyMDAwICAvLyBJbnRlcnJ1cHQgMTMgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDE0ICAgICAgICAweDAwMDA0MDAwICAvLyBJbnRlcnJ1cHQgMTQgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDE1ICAgICAgICAweDAwMDA4MDAwICAvLyBJbnRlcnJ1cHQgMTUgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDE2ICAgICAgICAweDAwMDEwMDAwICAvLyBJbnRlcnJ1cHQgMTYgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDE3ICAgICAgICAweDAwMDIwMDAwICAvLyBJbnRlcnJ1cHQgMTcgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDE4ICAgICAgICAweDAwMDQwMDAwICAvLyBJbnRlcnJ1cHQgMTggcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDE5ICAgICAgICAweDAwMDgwMDAwICAvLyBJbnRlcnJ1cHQgMTkgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDIwICAgICAgICAweDAwMTAwMDAwICAvLyBJbnRlcnJ1cHQgMjAgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDIxICAgICAgICAweDAwMjAwMDAwICAvLyBJbnRlcnJ1cHQgMjEgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDIyICAgICAgICAweDAwNDAwMDAwICAvLyBJbnRlcnJ1cHQgMjIgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDIzICAgICAgICAweDAwODAwMDAwICAvLyBJbnRlcnJ1cHQgMjMgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDI0ICAgICAgICAweDAxMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjQgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDI1ICAgICAgICAweDAyMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjUgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDI2ICAgICAgICAweDA0MDAwMDAwICAvLyBJbnRlcnJ1cHQgMjYgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDI3ICAgICAgICAweDA4MDAwMDAwICAvLyBJbnRlcnJ1cHQgMjcgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDI4ICAgICAgICAweDEwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjggcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDI5ICAgICAgICAweDIwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjkgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDMwICAgICAgICAweDQwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMzAgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDMxICAgICAgICAweDgwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMzEgcGVuZAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUEVORDEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1BFTkQxX0lOVF9NICAgICAgICAweDAwN0ZGRkZGICAvLyBJbnRlcnJ1cHQgU2V0IFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQzMiAgICAgICAgMHgwMDAwMDAwMSAgLy8gSW50ZXJydXB0IDMyIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQzMyAgICAgICAgMHgwMDAwMDAwMiAgLy8gSW50ZXJydXB0IDMzIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQzNCAgICAgICAgMHgwMDAwMDAwNCAgLy8gSW50ZXJydXB0IDM0IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQzNSAgICAgICAgMHgwMDAwMDAwOCAgLy8gSW50ZXJydXB0IDM1IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQzNiAgICAgICAgMHgwMDAwMDAxMCAgLy8gSW50ZXJydXB0IDM2IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQzNyAgICAgICAgMHgwMDAwMDAyMCAgLy8gSW50ZXJydXB0IDM3IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQzOCAgICAgICAgMHgwMDAwMDA0MCAgLy8gSW50ZXJydXB0IDM4IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQzOSAgICAgICAgMHgwMDAwMDA4MCAgLy8gSW50ZXJydXB0IDM5IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ0MCAgICAgICAgMHgwMDAwMDEwMCAgLy8gSW50ZXJydXB0IDQwIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ0MSAgICAgICAgMHgwMDAwMDIwMCAgLy8gSW50ZXJydXB0IDQxIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ0MiAgICAgICAgMHgwMDAwMDQwMCAgLy8gSW50ZXJydXB0IDQyIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ0MyAgICAgICAgMHgwMDAwMDgwMCAgLy8gSW50ZXJydXB0IDQzIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ0NCAgICAgICAgMHgwMDAwMTAwMCAgLy8gSW50ZXJydXB0IDQ0IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ0NSAgICAgICAgMHgwMDAwMjAwMCAgLy8gSW50ZXJydXB0IDQ1IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ0NiAgICAgICAgMHgwMDAwNDAwMCAgLy8gSW50ZXJydXB0IDQ2IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ0NyAgICAgICAgMHgwMDAwODAwMCAgLy8gSW50ZXJydXB0IDQ3IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ0OCAgICAgICAgMHgwMDAxMDAwMCAgLy8gSW50ZXJydXB0IDQ4IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ0OSAgICAgICAgMHgwMDAyMDAwMCAgLy8gSW50ZXJydXB0IDQ5IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ1MCAgICAgICAgMHgwMDA0MDAwMCAgLy8gSW50ZXJydXB0IDUwIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ1MSAgICAgICAgMHgwMDA4MDAwMCAgLy8gSW50ZXJydXB0IDUxIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ1MiAgICAgICAgMHgwMDEwMDAwMCAgLy8gSW50ZXJydXB0IDUyIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ1MyAgICAgICAgMHgwMDIwMDAwMCAgLy8gSW50ZXJydXB0IDUzIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMV9JTlQ1NCAgICAgICAgMHgwMDQwMDAwMCAgLy8gSW50ZXJydXB0IDU0IHBlbmQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1VOUEVORDAgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UX00gICAgICAweEZGRkZGRkZGICAvLyBJbnRlcnJ1cHQgQ2xlYXIgUGVuZGluZworI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMCAgICAgICAweDAwMDAwMDAxICAvLyBJbnRlcnJ1cHQgMCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDEgICAgICAgMHgwMDAwMDAwMiAgLy8gSW50ZXJydXB0IDEgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQyICAgICAgIDB4MDAwMDAwMDQgIC8vIEludGVycnVwdCAyIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMyAgICAgICAweDAwMDAwMDA4ICAvLyBJbnRlcnJ1cHQgMyB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDQgICAgICAgMHgwMDAwMDAxMCAgLy8gSW50ZXJydXB0IDQgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQ1ICAgICAgIDB4MDAwMDAwMjAgIC8vIEludGVycnVwdCA1IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UNiAgICAgICAweDAwMDAwMDQwICAvLyBJbnRlcnJ1cHQgNiB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDcgICAgICAgMHgwMDAwMDA4MCAgLy8gSW50ZXJydXB0IDcgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQ4ICAgICAgIDB4MDAwMDAxMDAgIC8vIEludGVycnVwdCA4IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UOSAgICAgICAweDAwMDAwMjAwICAvLyBJbnRlcnJ1cHQgOSB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDEwICAgICAgMHgwMDAwMDQwMCAgLy8gSW50ZXJydXB0IDEwIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMTEgICAgICAweDAwMDAwODAwICAvLyBJbnRlcnJ1cHQgMTEgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQxMiAgICAgIDB4MDAwMDEwMDAgIC8vIEludGVycnVwdCAxMiB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDEzICAgICAgMHgwMDAwMjAwMCAgLy8gSW50ZXJydXB0IDEzIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMTQgICAgICAweDAwMDA0MDAwICAvLyBJbnRlcnJ1cHQgMTQgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQxNSAgICAgIDB4MDAwMDgwMDAgIC8vIEludGVycnVwdCAxNSB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDE2ICAgICAgMHgwMDAxMDAwMCAgLy8gSW50ZXJydXB0IDE2IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMTcgICAgICAweDAwMDIwMDAwICAvLyBJbnRlcnJ1cHQgMTcgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQxOCAgICAgIDB4MDAwNDAwMDAgIC8vIEludGVycnVwdCAxOCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDE5ICAgICAgMHgwMDA4MDAwMCAgLy8gSW50ZXJydXB0IDE5IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMjAgICAgICAweDAwMTAwMDAwICAvLyBJbnRlcnJ1cHQgMjAgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQyMSAgICAgIDB4MDAyMDAwMDAgIC8vIEludGVycnVwdCAyMSB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDIyICAgICAgMHgwMDQwMDAwMCAgLy8gSW50ZXJydXB0IDIyIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMjMgICAgICAweDAwODAwMDAwICAvLyBJbnRlcnJ1cHQgMjMgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQyNCAgICAgIDB4MDEwMDAwMDAgIC8vIEludGVycnVwdCAyNCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDI1ICAgICAgMHgwMjAwMDAwMCAgLy8gSW50ZXJydXB0IDI1IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMjYgICAgICAweDA0MDAwMDAwICAvLyBJbnRlcnJ1cHQgMjYgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQyNyAgICAgIDB4MDgwMDAwMDAgIC8vIEludGVycnVwdCAyNyB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDI4ICAgICAgMHgxMDAwMDAwMCAgLy8gSW50ZXJydXB0IDI4IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMjkgICAgICAweDIwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjkgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQzMCAgICAgIDB4NDAwMDAwMDAgIC8vIEludGVycnVwdCAzMCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDMxICAgICAgMHg4MDAwMDAwMCAgLy8gSW50ZXJydXB0IDMxIHVucGVuZAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfVU5QRU5EMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlRfTSAgICAgIDB4MDA3RkZGRkYgIC8vIEludGVycnVwdCBDbGVhciBQZW5kaW5nCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQzMiAgICAgIDB4MDAwMDAwMDEgIC8vIEludGVycnVwdCAzMiB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDMzICAgICAgMHgwMDAwMDAwMiAgLy8gSW50ZXJydXB0IDMzIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UMzQgICAgICAweDAwMDAwMDA0ICAvLyBJbnRlcnJ1cHQgMzQgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQzNSAgICAgIDB4MDAwMDAwMDggIC8vIEludGVycnVwdCAzNSB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDM2ICAgICAgMHgwMDAwMDAxMCAgLy8gSW50ZXJydXB0IDM2IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UMzcgICAgICAweDAwMDAwMDIwICAvLyBJbnRlcnJ1cHQgMzcgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQzOCAgICAgIDB4MDAwMDAwNDAgIC8vIEludGVycnVwdCAzOCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDM5ICAgICAgMHgwMDAwMDA4MCAgLy8gSW50ZXJydXB0IDM5IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UNDAgICAgICAweDAwMDAwMTAwICAvLyBJbnRlcnJ1cHQgNDAgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQ0MSAgICAgIDB4MDAwMDAyMDAgIC8vIEludGVycnVwdCA0MSB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDQyICAgICAgMHgwMDAwMDQwMCAgLy8gSW50ZXJydXB0IDQyIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UNDMgICAgICAweDAwMDAwODAwICAvLyBJbnRlcnJ1cHQgNDMgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQ0NCAgICAgIDB4MDAwMDEwMDAgIC8vIEludGVycnVwdCA0NCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDQ1ICAgICAgMHgwMDAwMjAwMCAgLy8gSW50ZXJydXB0IDQ1IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UNDYgICAgICAweDAwMDA0MDAwICAvLyBJbnRlcnJ1cHQgNDYgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQ0NyAgICAgIDB4MDAwMDgwMDAgIC8vIEludGVycnVwdCA0NyB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDQ4ICAgICAgMHgwMDAxMDAwMCAgLy8gSW50ZXJydXB0IDQ4IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UNDkgICAgICAweDAwMDIwMDAwICAvLyBJbnRlcnJ1cHQgNDkgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQ1MCAgICAgIDB4MDAwNDAwMDAgIC8vIEludGVycnVwdCA1MCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDUxICAgICAgMHgwMDA4MDAwMCAgLy8gSW50ZXJydXB0IDUxIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UNTIgICAgICAweDAwMTAwMDAwICAvLyBJbnRlcnJ1cHQgNTIgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQ1MyAgICAgIDB4MDAyMDAwMDAgIC8vIEludGVycnVwdCA1MyB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDU0ICAgICAgMHgwMDQwMDAwMCAgLy8gSW50ZXJydXB0IDU0IHVucGVuZAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfQUNUSVZFMCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlRfTSAgICAgIDB4RkZGRkZGRkYgIC8vIEludGVycnVwdCBBY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDAgICAgICAgMHgwMDAwMDAwMSAgLy8gSW50ZXJydXB0IDAgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQxICAgICAgIDB4MDAwMDAwMDIgIC8vIEludGVycnVwdCAxIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMiAgICAgICAweDAwMDAwMDA0ICAvLyBJbnRlcnJ1cHQgMiBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDMgICAgICAgMHgwMDAwMDAwOCAgLy8gSW50ZXJydXB0IDMgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQ0ICAgICAgIDB4MDAwMDAwMTAgIC8vIEludGVycnVwdCA0IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UNSAgICAgICAweDAwMDAwMDIwICAvLyBJbnRlcnJ1cHQgNSBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDYgICAgICAgMHgwMDAwMDA0MCAgLy8gSW50ZXJydXB0IDYgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQ3ICAgICAgIDB4MDAwMDAwODAgIC8vIEludGVycnVwdCA3IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UOCAgICAgICAweDAwMDAwMTAwICAvLyBJbnRlcnJ1cHQgOCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDkgICAgICAgMHgwMDAwMDIwMCAgLy8gSW50ZXJydXB0IDkgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQxMCAgICAgIDB4MDAwMDA0MDAgIC8vIEludGVycnVwdCAxMCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDExICAgICAgMHgwMDAwMDgwMCAgLy8gSW50ZXJydXB0IDExIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMTIgICAgICAweDAwMDAxMDAwICAvLyBJbnRlcnJ1cHQgMTIgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQxMyAgICAgIDB4MDAwMDIwMDAgIC8vIEludGVycnVwdCAxMyBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDE0ICAgICAgMHgwMDAwNDAwMCAgLy8gSW50ZXJydXB0IDE0IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMTUgICAgICAweDAwMDA4MDAwICAvLyBJbnRlcnJ1cHQgMTUgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQxNiAgICAgIDB4MDAwMTAwMDAgIC8vIEludGVycnVwdCAxNiBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDE3ICAgICAgMHgwMDAyMDAwMCAgLy8gSW50ZXJydXB0IDE3IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMTggICAgICAweDAwMDQwMDAwICAvLyBJbnRlcnJ1cHQgMTggYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQxOSAgICAgIDB4MDAwODAwMDAgIC8vIEludGVycnVwdCAxOSBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDIwICAgICAgMHgwMDEwMDAwMCAgLy8gSW50ZXJydXB0IDIwIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMjEgICAgICAweDAwMjAwMDAwICAvLyBJbnRlcnJ1cHQgMjEgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQyMiAgICAgIDB4MDA0MDAwMDAgIC8vIEludGVycnVwdCAyMiBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDIzICAgICAgMHgwMDgwMDAwMCAgLy8gSW50ZXJydXB0IDIzIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMjQgICAgICAweDAxMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjQgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQyNSAgICAgIDB4MDIwMDAwMDAgIC8vIEludGVycnVwdCAyNSBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDI2ICAgICAgMHgwNDAwMDAwMCAgLy8gSW50ZXJydXB0IDI2IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMjcgICAgICAweDA4MDAwMDAwICAvLyBJbnRlcnJ1cHQgMjcgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQyOCAgICAgIDB4MTAwMDAwMDAgIC8vIEludGVycnVwdCAyOCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDI5ICAgICAgMHgyMDAwMDAwMCAgLy8gSW50ZXJydXB0IDI5IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMzAgICAgICAweDQwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMzAgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQzMSAgICAgIDB4ODAwMDAwMDAgIC8vIEludGVycnVwdCAzMSBhY3RpdmUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0FDVElWRTEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UX00gICAgICAweDAwN0ZGRkZGICAvLyBJbnRlcnJ1cHQgQWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQzMiAgICAgIDB4MDAwMDAwMDEgIC8vIEludGVycnVwdCAzMiBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDMzICAgICAgMHgwMDAwMDAwMiAgLy8gSW50ZXJydXB0IDMzIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UMzQgICAgICAweDAwMDAwMDA0ICAvLyBJbnRlcnJ1cHQgMzQgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQzNSAgICAgIDB4MDAwMDAwMDggIC8vIEludGVycnVwdCAzNSBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDM2ICAgICAgMHgwMDAwMDAxMCAgLy8gSW50ZXJydXB0IDM2IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UMzcgICAgICAweDAwMDAwMDIwICAvLyBJbnRlcnJ1cHQgMzcgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQzOCAgICAgIDB4MDAwMDAwNDAgIC8vIEludGVycnVwdCAzOCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDM5ICAgICAgMHgwMDAwMDA4MCAgLy8gSW50ZXJydXB0IDM5IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UNDAgICAgICAweDAwMDAwMTAwICAvLyBJbnRlcnJ1cHQgNDAgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQ0MSAgICAgIDB4MDAwMDAyMDAgIC8vIEludGVycnVwdCA0MSBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDQyICAgICAgMHgwMDAwMDQwMCAgLy8gSW50ZXJydXB0IDQyIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UNDMgICAgICAweDAwMDAwODAwICAvLyBJbnRlcnJ1cHQgNDMgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQ0NCAgICAgIDB4MDAwMDEwMDAgIC8vIEludGVycnVwdCA0NCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDQ1ICAgICAgMHgwMDAwMjAwMCAgLy8gSW50ZXJydXB0IDQ1IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UNDYgICAgICAweDAwMDA0MDAwICAvLyBJbnRlcnJ1cHQgNDYgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQ0NyAgICAgIDB4MDAwMDgwMDAgIC8vIEludGVycnVwdCA0NyBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDQ4ICAgICAgMHgwMDAxMDAwMCAgLy8gSW50ZXJydXB0IDQ4IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UNDkgICAgICAweDAwMDIwMDAwICAvLyBJbnRlcnJ1cHQgNDkgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQ1MCAgICAgIDB4MDAwNDAwMDAgIC8vIEludGVycnVwdCA1MCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDUxICAgICAgMHgwMDA4MDAwMCAgLy8gSW50ZXJydXB0IDUxIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UNTIgICAgICAweDAwMTAwMDAwICAvLyBJbnRlcnJ1cHQgNTIgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQ1MyAgICAgIDB4MDAyMDAwMDAgIC8vIEludGVycnVwdCA1MyBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDU0ICAgICAgMHgwMDQwMDAwMCAgLy8gSW50ZXJydXB0IDU0IGFjdGl2ZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUFJJMCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUFJJMF9JTlQzX00gICAgICAgIDB4RTAwMDAwMDAgIC8vIEludGVycnVwdCAzIFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkwX0lOVDJfTSAgICAgICAgMHgwMEUwMDAwMCAgLy8gSW50ZXJydXB0IDIgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTBfSU5UMV9NICAgICAgICAweDAwMDBFMDAwICAvLyBJbnRlcnJ1cHQgMSBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMF9JTlQwX00gICAgICAgIDB4MDAwMDAwRTAgIC8vIEludGVycnVwdCAwIFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkwX0lOVDNfUyAgICAgICAgMjkKKyNkZWZpbmUgTlZJQ19QUkkwX0lOVDJfUyAgICAgICAgMjEKKyNkZWZpbmUgTlZJQ19QUkkwX0lOVDFfUyAgICAgICAgMTMKKyNkZWZpbmUgTlZJQ19QUkkwX0lOVDBfUyAgICAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUFJJMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUFJJMV9JTlQ3X00gICAgICAgIDB4RTAwMDAwMDAgIC8vIEludGVycnVwdCA3IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkxX0lOVDZfTSAgICAgICAgMHgwMEUwMDAwMCAgLy8gSW50ZXJydXB0IDYgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTFfSU5UNV9NICAgICAgICAweDAwMDBFMDAwICAvLyBJbnRlcnJ1cHQgNSBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMV9JTlQ0X00gICAgICAgIDB4MDAwMDAwRTAgIC8vIEludGVycnVwdCA0IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkxX0lOVDdfUyAgICAgICAgMjkKKyNkZWZpbmUgTlZJQ19QUkkxX0lOVDZfUyAgICAgICAgMjEKKyNkZWZpbmUgTlZJQ19QUkkxX0lOVDVfUyAgICAgICAgMTMKKyNkZWZpbmUgTlZJQ19QUkkxX0lOVDRfUyAgICAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUFJJMiByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUFJJMl9JTlQxMV9NICAgICAgIDB4RTAwMDAwMDAgIC8vIEludGVycnVwdCAxMSBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMl9JTlQxMF9NICAgICAgIDB4MDBFMDAwMDAgIC8vIEludGVycnVwdCAxMCBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMl9JTlQ5X00gICAgICAgIDB4MDAwMEUwMDAgIC8vIEludGVycnVwdCA5IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkyX0lOVDhfTSAgICAgICAgMHgwMDAwMDBFMCAgLy8gSW50ZXJydXB0IDggUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTJfSU5UMTFfUyAgICAgICAyOQorI2RlZmluZSBOVklDX1BSSTJfSU5UMTBfUyAgICAgICAyMQorI2RlZmluZSBOVklDX1BSSTJfSU5UOV9TICAgICAgICAxMworI2RlZmluZSBOVklDX1BSSTJfSU5UOF9TICAgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QUkkzIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19QUkkzX0lOVDE1X00gICAgICAgMHhFMDAwMDAwMCAgLy8gSW50ZXJydXB0IDE1IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkzX0lOVDE0X00gICAgICAgMHgwMEUwMDAwMCAgLy8gSW50ZXJydXB0IDE0IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkzX0lOVDEzX00gICAgICAgMHgwMDAwRTAwMCAgLy8gSW50ZXJydXB0IDEzIFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkzX0lOVDEyX00gICAgICAgMHgwMDAwMDBFMCAgLy8gSW50ZXJydXB0IDEyIFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkzX0lOVDE1X1MgICAgICAgMjkKKyNkZWZpbmUgTlZJQ19QUkkzX0lOVDE0X1MgICAgICAgMjEKKyNkZWZpbmUgTlZJQ19QUkkzX0lOVDEzX1MgICAgICAgMTMKKyNkZWZpbmUgTlZJQ19QUkkzX0lOVDEyX1MgICAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUFJJNCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUFJJNF9JTlQxOV9NICAgICAgIDB4RTAwMDAwMDAgIC8vIEludGVycnVwdCAxOSBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJNF9JTlQxOF9NICAgICAgIDB4MDBFMDAwMDAgIC8vIEludGVycnVwdCAxOCBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJNF9JTlQxN19NICAgICAgIDB4MDAwMEUwMDAgIC8vIEludGVycnVwdCAxNyBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJNF9JTlQxNl9NICAgICAgIDB4MDAwMDAwRTAgIC8vIEludGVycnVwdCAxNiBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJNF9JTlQxOV9TICAgICAgIDI5CisjZGVmaW5lIE5WSUNfUFJJNF9JTlQxOF9TICAgICAgIDIxCisjZGVmaW5lIE5WSUNfUFJJNF9JTlQxN19TICAgICAgIDEzCisjZGVmaW5lIE5WSUNfUFJJNF9JTlQxNl9TICAgICAgIDUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1BSSTUgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1BSSTVfSU5UMjNfTSAgICAgICAweEUwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjMgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTVfSU5UMjJfTSAgICAgICAweDAwRTAwMDAwICAvLyBJbnRlcnJ1cHQgMjIgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTVfSU5UMjFfTSAgICAgICAweDAwMDBFMDAwICAvLyBJbnRlcnJ1cHQgMjEgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTVfSU5UMjBfTSAgICAgICAweDAwMDAwMEUwICAvLyBJbnRlcnJ1cHQgMjAgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTVfSU5UMjNfUyAgICAgICAyOQorI2RlZmluZSBOVklDX1BSSTVfSU5UMjJfUyAgICAgICAyMQorI2RlZmluZSBOVklDX1BSSTVfSU5UMjFfUyAgICAgICAxMworI2RlZmluZSBOVklDX1BSSTVfSU5UMjBfUyAgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QUkk2IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19QUkk2X0lOVDI3X00gICAgICAgMHhFMDAwMDAwMCAgLy8gSW50ZXJydXB0IDI3IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk2X0lOVDI2X00gICAgICAgMHgwMEUwMDAwMCAgLy8gSW50ZXJydXB0IDI2IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk2X0lOVDI1X00gICAgICAgMHgwMDAwRTAwMCAgLy8gSW50ZXJydXB0IDI1IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk2X0lOVDI0X00gICAgICAgMHgwMDAwMDBFMCAgLy8gSW50ZXJydXB0IDI0IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk2X0lOVDI3X1MgICAgICAgMjkKKyNkZWZpbmUgTlZJQ19QUkk2X0lOVDI2X1MgICAgICAgMjEKKyNkZWZpbmUgTlZJQ19QUkk2X0lOVDI1X1MgICAgICAgMTMKKyNkZWZpbmUgTlZJQ19QUkk2X0lOVDI0X1MgICAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUFJJNyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUFJJN19JTlQzMV9NICAgICAgIDB4RTAwMDAwMDAgIC8vIEludGVycnVwdCAzMSBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJN19JTlQzMF9NICAgICAgIDB4MDBFMDAwMDAgIC8vIEludGVycnVwdCAzMCBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJN19JTlQyOV9NICAgICAgIDB4MDAwMEUwMDAgIC8vIEludGVycnVwdCAyOSBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJN19JTlQyOF9NICAgICAgIDB4MDAwMDAwRTAgIC8vIEludGVycnVwdCAyOCBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJN19JTlQzMV9TICAgICAgIDI5CisjZGVmaW5lIE5WSUNfUFJJN19JTlQzMF9TICAgICAgIDIxCisjZGVmaW5lIE5WSUNfUFJJN19JTlQyOV9TICAgICAgIDEzCisjZGVmaW5lIE5WSUNfUFJJN19JTlQyOF9TICAgICAgIDUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1BSSTggcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1BSSThfSU5UMzVfTSAgICAgICAweEUwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMzUgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSThfSU5UMzRfTSAgICAgICAweDAwRTAwMDAwICAvLyBJbnRlcnJ1cHQgMzQgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSThfSU5UMzNfTSAgICAgICAweDAwMDBFMDAwICAvLyBJbnRlcnJ1cHQgMzMgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSThfSU5UMzJfTSAgICAgICAweDAwMDAwMEUwICAvLyBJbnRlcnJ1cHQgMzIgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSThfSU5UMzVfUyAgICAgICAyOQorI2RlZmluZSBOVklDX1BSSThfSU5UMzRfUyAgICAgICAyMQorI2RlZmluZSBOVklDX1BSSThfSU5UMzNfUyAgICAgICAxMworI2RlZmluZSBOVklDX1BSSThfSU5UMzJfUyAgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QUkk5IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19QUkk5X0lOVDM5X00gICAgICAgMHhFMDAwMDAwMCAgLy8gSW50ZXJydXB0IDM5IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk5X0lOVDM4X00gICAgICAgMHgwMEUwMDAwMCAgLy8gSW50ZXJydXB0IDM4IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk5X0lOVDM3X00gICAgICAgMHgwMDAwRTAwMCAgLy8gSW50ZXJydXB0IDM3IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk5X0lOVDM2X00gICAgICAgMHgwMDAwMDBFMCAgLy8gSW50ZXJydXB0IDM2IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk5X0lOVDM5X1MgICAgICAgMjkKKyNkZWZpbmUgTlZJQ19QUkk5X0lOVDM4X1MgICAgICAgMjEKKyNkZWZpbmUgTlZJQ19QUkk5X0lOVDM3X1MgICAgICAgMTMKKyNkZWZpbmUgTlZJQ19QUkk5X0lOVDM2X1MgICAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUFJJMTAgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1BSSTEwX0lOVDQzX00gICAgICAweEUwMDAwMDAwICAvLyBJbnRlcnJ1cHQgNDMgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEwX0lOVDQyX00gICAgICAweDAwRTAwMDAwICAvLyBJbnRlcnJ1cHQgNDIgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEwX0lOVDQxX00gICAgICAweDAwMDBFMDAwICAvLyBJbnRlcnJ1cHQgNDEgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEwX0lOVDQwX00gICAgICAweDAwMDAwMEUwICAvLyBJbnRlcnJ1cHQgNDAgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEwX0lOVDQzX1MgICAgICAyOQorI2RlZmluZSBOVklDX1BSSTEwX0lOVDQyX1MgICAgICAyMQorI2RlZmluZSBOVklDX1BSSTEwX0lOVDQxX1MgICAgICAxMworI2RlZmluZSBOVklDX1BSSTEwX0lOVDQwX1MgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QUkkxMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUFJJMTFfSU5UNDdfTSAgICAgIDB4RTAwMDAwMDAgIC8vIEludGVycnVwdCA0NyBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTFfSU5UNDZfTSAgICAgIDB4MDBFMDAwMDAgIC8vIEludGVycnVwdCA0NiBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTFfSU5UNDVfTSAgICAgIDB4MDAwMEUwMDAgIC8vIEludGVycnVwdCA0NSBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTFfSU5UNDRfTSAgICAgIDB4MDAwMDAwRTAgIC8vIEludGVycnVwdCA0NCBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTFfSU5UNDdfUyAgICAgIDI5CisjZGVmaW5lIE5WSUNfUFJJMTFfSU5UNDZfUyAgICAgIDIxCisjZGVmaW5lIE5WSUNfUFJJMTFfSU5UNDVfUyAgICAgIDEzCisjZGVmaW5lIE5WSUNfUFJJMTFfSU5UNDRfUyAgICAgIDUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1BSSTEyIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19QUkkxMl9JTlQ1MV9NICAgICAgMHhFMDAwMDAwMCAgLy8gSW50ZXJydXB0IDUxIFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkxMl9JTlQ1MF9NICAgICAgMHgwMEUwMDAwMCAgLy8gSW50ZXJydXB0IDUwIFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkxMl9JTlQ0OV9NICAgICAgMHgwMDAwRTAwMCAgLy8gSW50ZXJydXB0IDQ5IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkxMl9JTlQ0OF9NICAgICAgMHgwMDAwMDBFMCAgLy8gSW50ZXJydXB0IDQ4IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkxMl9JTlQ1MV9TICAgICAgMjkKKyNkZWZpbmUgTlZJQ19QUkkxMl9JTlQ1MF9TICAgICAgMjEKKyNkZWZpbmUgTlZJQ19QUkkxMl9JTlQ0OV9TICAgICAgMTMKKyNkZWZpbmUgTlZJQ19QUkkxMl9JTlQ0OF9TICAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUFJJMTMgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1BSSTEzX0lOVDU1X00gICAgICAweEUwMDAwMDAwICAvLyBJbnRlcnJ1cHQgNTUgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEzX0lOVDU0X00gICAgICAweDAwRTAwMDAwICAvLyBJbnRlcnJ1cHQgNTQgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEzX0lOVDUzX00gICAgICAweDAwMDBFMDAwICAvLyBJbnRlcnJ1cHQgNTMgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEzX0lOVDUyX00gICAgICAweDAwMDAwMEUwICAvLyBJbnRlcnJ1cHQgNTIgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEzX0lOVDU1X1MgICAgICAyOQorI2RlZmluZSBOVklDX1BSSTEzX0lOVDU0X1MgICAgICAyMQorI2RlZmluZSBOVklDX1BSSTEzX0lOVDUzX1MgICAgICAxMworI2RlZmluZSBOVklDX1BSSTEzX0lOVDUyX1MgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19DUFVJRCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfQ1BVSURfSU1QX00gICAgICAgIDB4RkYwMDAwMDAgIC8vIEltcGxlbWVudGVyIENvZGUKKyNkZWZpbmUgTlZJQ19DUFVJRF9JTVBfQVJNICAgICAgMHg0MTAwMDAwMCAgLy8gQVJNCisjZGVmaW5lIE5WSUNfQ1BVSURfVkFSX00gICAgICAgIDB4MDBGMDAwMDAgIC8vIFZhcmlhbnQgTnVtYmVyCisjZGVmaW5lIE5WSUNfQ1BVSURfQ09OX00gICAgICAgIDB4MDAwRjAwMDAgIC8vIENvbnN0YW50CisjZGVmaW5lIE5WSUNfQ1BVSURfUEFSVE5PX00gICAgIDB4MDAwMEZGRjAgIC8vIFBhcnQgTnVtYmVyCisjZGVmaW5lIE5WSUNfQ1BVSURfUEFSVE5PX0NNMyAgIDB4MDAwMEMyMzAgIC8vIENvcnRleC1NMyBwcm9jZXNzb3IKKyNkZWZpbmUgTlZJQ19DUFVJRF9QQVJUTk9fQ000ICAgMHgwMDAwQzI0MCAgLy8gQ29ydGV4LU00IHByb2Nlc3NvcgorI2RlZmluZSBOVklDX0NQVUlEX1JFVl9NICAgICAgICAweDAwMDAwMDBGICAvLyBSZXZpc2lvbiBOdW1iZXIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0lOVF9DVFJMIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9OTUlfU0VUICAgMHg4MDAwMDAwMCAgLy8gTk1JIFNldCBQZW5kaW5nCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfUEVORF9TViAgIDB4MTAwMDAwMDAgIC8vIFBlbmRTViBTZXQgUGVuZGluZworI2RlZmluZSBOVklDX0lOVF9DVFJMX1VOUEVORF9TViAweDA4MDAwMDAwICAvLyBQZW5kU1YgQ2xlYXIgUGVuZGluZworI2RlZmluZSBOVklDX0lOVF9DVFJMX1BFTkRTVFNFVCAweDA0MDAwMDAwICAvLyBTeXNUaWNrIFNldCBQZW5kaW5nCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfUEVORFNUQ0xSIDB4MDIwMDAwMDAgIC8vIFN5c1RpY2sgQ2xlYXIgUGVuZGluZworI2RlZmluZSBOVklDX0lOVF9DVFJMX0lTUl9QUkUgICAweDAwODAwMDAwICAvLyBEZWJ1ZyBJbnRlcnJ1cHQgSGFuZGxpbmcKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9JU1JfUEVORCAgMHgwMDQwMDAwMCAgLy8gSW50ZXJydXB0IFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9WRUNfUEVOX00gMHgwMDA3RjAwMCAgLy8gSW50ZXJydXB0IFBlbmRpbmcgVmVjdG9yIE51bWJlcgorI3VuZGVmIE5WSUNfSU5UX0NUUkxfVkVDX1BFTl9NCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfVkVDX1BFTl9NIDB4MDAwRkYwMDAgIC8vIEludGVycnVwdCBQZW5kaW5nIFZlY3RvciBOdW1iZXIKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9WRUNfUEVOX05NSSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAgIC8vIE5NSQorI2RlZmluZSBOVklDX0lOVF9DVFJMX1ZFQ19QRU5fSEFSRCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAgIC8vIEhhcmQgZmF1bHQKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9WRUNfUEVOX01FTSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAgIC8vIE1lbW9yeSBtYW5hZ2VtZW50IGZhdWx0CisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfVkVDX1BFTl9CVVMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA1MDAwICAvLyBCdXMgZmF1bHQKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9WRUNfUEVOX1VTRyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAgIC8vIFVzYWdlIGZhdWx0CisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfVkVDX1BFTl9TVkMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBCMDAwICAvLyBTVkNhbGwKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9WRUNfUEVOX1BORFNWIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRTAwMCAgLy8gUGVuZFNWCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfVkVDX1BFTl9USUNLIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMCAgLy8gU3lzVGljaworI2RlZmluZSBOVklDX0lOVF9DVFJMX1JFVF9CQVNFICAweDAwMDAwODAwICAvLyBSZXR1cm4gdG8gQmFzZQorI2RlZmluZSBOVklDX0lOVF9DVFJMX1ZFQ19BQ1RfTSAweDAwMDAwMDdGICAvLyBJbnRlcnJ1cHQgUGVuZGluZyBWZWN0b3IgTnVtYmVyCisjdW5kZWYgTlZJQ19JTlRfQ1RSTF9WRUNfQUNUX00KKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9WRUNfQUNUX00gMHgwMDAwMDBGRiAgLy8gSW50ZXJydXB0IFBlbmRpbmcgVmVjdG9yIE51bWJlcgorI2RlZmluZSBOVklDX0lOVF9DVFJMX1ZFQ19QRU5fUyAxMgorI2RlZmluZSBOVklDX0lOVF9DVFJMX1ZFQ19BQ1RfUyAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19WVEFCTEUgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1ZUQUJMRV9CQVNFICAgICAgICAweDIwMDAwMDAwICAvLyBWZWN0b3IgVGFibGUgQmFzZQorI2RlZmluZSBOVklDX1ZUQUJMRV9PRkZTRVRfTSAgICAweDFGRkZGRTAwICAvLyBWZWN0b3IgVGFibGUgT2Zmc2V0CisjdW5kZWYgTlZJQ19WVEFCTEVfT0ZGU0VUX00KKyNkZWZpbmUgTlZJQ19WVEFCTEVfT0ZGU0VUX00gICAgMHgxRkZGRkMwMCAgLy8gVmVjdG9yIFRhYmxlIE9mZnNldAorI2RlZmluZSBOVklDX1ZUQUJMRV9PRkZTRVRfUyAgICA5CisjdW5kZWYgTlZJQ19WVEFCTEVfT0ZGU0VUX1MKKyNkZWZpbmUgTlZJQ19WVEFCTEVfT0ZGU0VUX1MgICAgMTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0FQSU5UIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19BUElOVF9WRUNUS0VZX00gICAgMHhGRkZGMDAwMCAgLy8gUmVnaXN0ZXIgS2V5CisjZGVmaW5lIE5WSUNfQVBJTlRfVkVDVEtFWSAgICAgIDB4MDVGQTAwMDAgIC8vIFZlY3RvciBrZXkKKyNkZWZpbmUgTlZJQ19BUElOVF9FTkRJQU5FU1MgICAgMHgwMDAwODAwMCAgLy8gRGF0YSBFbmRpYW5lc3MKKyNkZWZpbmUgTlZJQ19BUElOVF9QUklHUk9VUF9NICAgMHgwMDAwMDcwMCAgLy8gSW50ZXJydXB0IFByaW9yaXR5IEdyb3VwaW5nCisjZGVmaW5lIE5WSUNfQVBJTlRfUFJJR1JPVVBfN18xIDB4MDAwMDAwMDAgIC8vIFByaW9yaXR5IGdyb3VwIDcuMSBzcGxpdAorI2RlZmluZSBOVklDX0FQSU5UX1BSSUdST1VQXzZfMiAweDAwMDAwMTAwICAvLyBQcmlvcml0eSBncm91cCA2LjIgc3BsaXQKKyNkZWZpbmUgTlZJQ19BUElOVF9QUklHUk9VUF81XzMgMHgwMDAwMDIwMCAgLy8gUHJpb3JpdHkgZ3JvdXAgNS4zIHNwbGl0CisjZGVmaW5lIE5WSUNfQVBJTlRfUFJJR1JPVVBfNF80IDB4MDAwMDAzMDAgIC8vIFByaW9yaXR5IGdyb3VwIDQuNCBzcGxpdAorI2RlZmluZSBOVklDX0FQSU5UX1BSSUdST1VQXzNfNSAweDAwMDAwNDAwICAvLyBQcmlvcml0eSBncm91cCAzLjUgc3BsaXQKKyNkZWZpbmUgTlZJQ19BUElOVF9QUklHUk9VUF8yXzYgMHgwMDAwMDUwMCAgLy8gUHJpb3JpdHkgZ3JvdXAgMi42IHNwbGl0CisjZGVmaW5lIE5WSUNfQVBJTlRfUFJJR1JPVVBfMV83IDB4MDAwMDA2MDAgIC8vIFByaW9yaXR5IGdyb3VwIDEuNyBzcGxpdAorI2RlZmluZSBOVklDX0FQSU5UX1BSSUdST1VQXzBfOCAweDAwMDAwNzAwICAvLyBQcmlvcml0eSBncm91cCAwLjggc3BsaXQKKyNkZWZpbmUgTlZJQ19BUElOVF9TWVNSRVNFVFJFUSAgMHgwMDAwMDAwNCAgLy8gU3lzdGVtIFJlc2V0IFJlcXVlc3QKKyNkZWZpbmUgTlZJQ19BUElOVF9WRUNUX0NMUl9BQ1QgMHgwMDAwMDAwMiAgLy8gQ2xlYXIgQWN0aXZlIE5NSSAvIEZhdWx0CisjZGVmaW5lIE5WSUNfQVBJTlRfVkVDVF9SRVNFVCAgIDB4MDAwMDAwMDEgIC8vIFN5c3RlbSBSZXNldAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfU1lTX0NUUkwgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1NZU19DVFJMX1NFVk9OUEVORCAweDAwMDAwMDEwICAvLyBXYWtlIFVwIG9uIFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19TWVNfQ1RSTF9TTEVFUERFRVAgMHgwMDAwMDAwNCAgLy8gRGVlcCBTbGVlcCBFbmFibGUKKyNkZWZpbmUgTlZJQ19TWVNfQ1RSTF9TTEVFUEVYSVQgMHgwMDAwMDAwMiAgLy8gU2xlZXAgb24gSVNSIEV4aXQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0NGR19DVFJMIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19DRkdfQ1RSTF9TVEtBTElHTiAgMHgwMDAwMDIwMCAgLy8gU3RhY2sgQWxpZ25tZW50IG9uIEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnRyeQorI2RlZmluZSBOVklDX0NGR19DVFJMX0JGSEZOTUlHTiAweDAwMDAwMTAwICAvLyBJZ25vcmUgQnVzIEZhdWx0IGluIE5NSSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmF1bHQKKyNkZWZpbmUgTlZJQ19DRkdfQ1RSTF9ESVYwICAgICAgMHgwMDAwMDAxMCAgLy8gVHJhcCBvbiBEaXZpZGUgYnkgMAorI2RlZmluZSBOVklDX0NGR19DVFJMX1VOQUxJR05FRCAweDAwMDAwMDA4ICAvLyBUcmFwIG9uIFVuYWxpZ25lZCBBY2Nlc3MKKyNkZWZpbmUgTlZJQ19DRkdfQ1RSTF9NQUlOX1BFTkQgMHgwMDAwMDAwMiAgLy8gQWxsb3cgTWFpbiBJbnRlcnJ1cHQgVHJpZ2dlcgorI2RlZmluZSBOVklDX0NGR19DVFJMX0JBU0VfVEhSICAweDAwMDAwMDAxICAvLyBUaHJlYWQgU3RhdGUgQ29udHJvbAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfU1lTX1BSSTEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1NZU19QUkkxX1VTQUdFX00gICAweDAwRTAwMDAwICAvLyBVc2FnZSBGYXVsdCBQcmlvcml0eQorI2RlZmluZSBOVklDX1NZU19QUkkxX0JVU19NICAgICAweDAwMDBFMDAwICAvLyBCdXMgRmF1bHQgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19TWVNfUFJJMV9NRU1fTSAgICAgMHgwMDAwMDBFMCAgLy8gTWVtb3J5IE1hbmFnZW1lbnQgRmF1bHQgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19TWVNfUFJJMV9VU0FHRV9TICAgMjEKKyNkZWZpbmUgTlZJQ19TWVNfUFJJMV9CVVNfUyAgICAgMTMKKyNkZWZpbmUgTlZJQ19TWVNfUFJJMV9NRU1fUyAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfU1lTX1BSSTIgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1NZU19QUkkyX1NWQ19NICAgICAweEUwMDAwMDAwICAvLyBTVkNhbGwgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19TWVNfUFJJMl9TVkNfUyAgICAgMjkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1NZU19QUkkzIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19TWVNfUFJJM19USUNLX00gICAgMHhFMDAwMDAwMCAgLy8gU3lzVGljayBFeGNlcHRpb24gUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19TWVNfUFJJM19QRU5EU1ZfTSAgMHgwMEUwMDAwMCAgLy8gUGVuZFNWIFByaW9yaXR5CisjZGVmaW5lIE5WSUNfU1lTX1BSSTNfREVCVUdfTSAgIDB4MDAwMDAwRTAgIC8vIERlYnVnIFByaW9yaXR5CisjZGVmaW5lIE5WSUNfU1lTX1BSSTNfVElDS19TICAgIDI5CisjZGVmaW5lIE5WSUNfU1lTX1BSSTNfUEVORFNWX1MgIDIxCisjZGVmaW5lIE5WSUNfU1lTX1BSSTNfREVCVUdfUyAgIDUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1NZU19ITkRfQ1RSTAorLy8gcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1NZU19ITkRfQ1RSTF9VU0FHRSAweDAwMDQwMDAwICAvLyBVc2FnZSBGYXVsdCBFbmFibGUKKyNkZWZpbmUgTlZJQ19TWVNfSE5EX0NUUkxfQlVTICAgMHgwMDAyMDAwMCAgLy8gQnVzIEZhdWx0IEVuYWJsZQorI2RlZmluZSBOVklDX1NZU19ITkRfQ1RSTF9NRU0gICAweDAwMDEwMDAwICAvLyBNZW1vcnkgTWFuYWdlbWVudCBGYXVsdCBFbmFibGUKKyNkZWZpbmUgTlZJQ19TWVNfSE5EX0NUUkxfU1ZDICAgMHgwMDAwODAwMCAgLy8gU1ZDIENhbGwgUGVuZGluZworI2RlZmluZSBOVklDX1NZU19ITkRfQ1RSTF9CVVNQICAweDAwMDA0MDAwICAvLyBCdXMgRmF1bHQgUGVuZGluZworI2RlZmluZSBOVklDX1NZU19ITkRfQ1RSTF9NRU1QICAweDAwMDAyMDAwICAvLyBNZW1vcnkgTWFuYWdlbWVudCBGYXVsdCBQZW5kaW5nCisjZGVmaW5lIE5WSUNfU1lTX0hORF9DVFJMX1VTQUdFUCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAgIC8vIFVzYWdlIEZhdWx0IFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19TWVNfSE5EX0NUUkxfVElDSyAgMHgwMDAwMDgwMCAgLy8gU3lzVGljayBFeGNlcHRpb24gQWN0aXZlCisjZGVmaW5lIE5WSUNfU1lTX0hORF9DVFJMX1BORFNWIDB4MDAwMDA0MDAgIC8vIFBlbmRTViBFeGNlcHRpb24gQWN0aXZlCisjZGVmaW5lIE5WSUNfU1lTX0hORF9DVFJMX01PTiAgIDB4MDAwMDAxMDAgIC8vIERlYnVnIE1vbml0b3IgQWN0aXZlCisjZGVmaW5lIE5WSUNfU1lTX0hORF9DVFJMX1NWQ0EgIDB4MDAwMDAwODAgIC8vIFNWQyBDYWxsIEFjdGl2ZQorI2RlZmluZSBOVklDX1NZU19ITkRfQ1RSTF9VU0dBICAweDAwMDAwMDA4ICAvLyBVc2FnZSBGYXVsdCBBY3RpdmUKKyNkZWZpbmUgTlZJQ19TWVNfSE5EX0NUUkxfQlVTQSAgMHgwMDAwMDAwMiAgLy8gQnVzIEZhdWx0IEFjdGl2ZQorI2RlZmluZSBOVklDX1NZU19ITkRfQ1RSTF9NRU1BICAweDAwMDAwMDAxICAvLyBNZW1vcnkgTWFuYWdlbWVudCBGYXVsdCBBY3RpdmUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0ZBVUxUX1NUQVQKKy8vIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19GQVVMVF9TVEFUX0RJVjAgICAgMHgwMjAwMDAwMCAgLy8gRGl2aWRlLWJ5LVplcm8gVXNhZ2UgRmF1bHQKKyNkZWZpbmUgTlZJQ19GQVVMVF9TVEFUX1VOQUxJR04gMHgwMTAwMDAwMCAgLy8gVW5hbGlnbmVkIEFjY2VzcyBVc2FnZSBGYXVsdAorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfTk9DUCAgICAweDAwMDgwMDAwICAvLyBObyBDb3Byb2Nlc3NvciBVc2FnZSBGYXVsdAorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfSU5WUEMgICAweDAwMDQwMDAwICAvLyBJbnZhbGlkIFBDIExvYWQgVXNhZ2UgRmF1bHQKKyNkZWZpbmUgTlZJQ19GQVVMVF9TVEFUX0lOVlNUQVQgMHgwMDAyMDAwMCAgLy8gSW52YWxpZCBTdGF0ZSBVc2FnZSBGYXVsdAorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfVU5ERUYgICAweDAwMDEwMDAwICAvLyBVbmRlZmluZWQgSW5zdHJ1Y3Rpb24gVXNhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmF1bHQKKyNkZWZpbmUgTlZJQ19GQVVMVF9TVEFUX0JGQVJWICAgMHgwMDAwODAwMCAgLy8gQnVzIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgVmFsaWQKKyNkZWZpbmUgTlZJQ19GQVVMVF9TVEFUX0JMU1BFUlIgMHgwMDAwMjAwMCAgLy8gQnVzIEZhdWx0IG9uIEZsb2F0aW5nLVBvaW50IExhenkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgUHJlc2VydmF0aW9uCisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVF9CU1RLRSAgIDB4MDAwMDEwMDAgIC8vIFN0YWNrIEJ1cyBGYXVsdAorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfQlVTVEtFICAweDAwMDAwODAwICAvLyBVbnN0YWNrIEJ1cyBGYXVsdAorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfSU1QUkUgICAweDAwMDAwNDAwICAvLyBJbXByZWNpc2UgRGF0YSBCdXMgRXJyb3IKKyNkZWZpbmUgTlZJQ19GQVVMVF9TVEFUX1BSRUNJU0UgMHgwMDAwMDIwMCAgLy8gUHJlY2lzZSBEYXRhIEJ1cyBFcnJvcgorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfSUJVUyAgICAweDAwMDAwMTAwICAvLyBJbnN0cnVjdGlvbiBCdXMgRXJyb3IKKyNkZWZpbmUgTlZJQ19GQVVMVF9TVEFUX01NQVJWICAgMHgwMDAwMDA4MCAgLy8gTWVtb3J5IE1hbmFnZW1lbnQgRmF1bHQgQWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBWYWxpZAorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfTUxTUEVSUiAweDAwMDAwMDIwICAvLyBNZW1vcnkgTWFuYWdlbWVudCBGYXVsdCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGbG9hdGluZy1Qb2ludCBMYXp5IFN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXNlcnZhdGlvbgorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfTVNUS0UgICAweDAwMDAwMDEwICAvLyBTdGFjayBBY2Nlc3MgVmlvbGF0aW9uCisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVF9NVVNUS0UgIDB4MDAwMDAwMDggIC8vIFVuc3RhY2sgQWNjZXNzIFZpb2xhdGlvbgorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfREVSUiAgICAweDAwMDAwMDAyICAvLyBEYXRhIEFjY2VzcyBWaW9sYXRpb24KKyNkZWZpbmUgTlZJQ19GQVVMVF9TVEFUX0lFUlIgICAgMHgwMDAwMDAwMSAgLy8gSW5zdHJ1Y3Rpb24gQWNjZXNzIFZpb2xhdGlvbgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfSEZBVUxUX1NUQVQKKy8vIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19IRkFVTFRfU1RBVF9EQkcgICAgMHg4MDAwMDAwMCAgLy8gRGVidWcgRXZlbnQKKyNkZWZpbmUgTlZJQ19IRkFVTFRfU1RBVF9GT1JDRUQgMHg0MDAwMDAwMCAgLy8gRm9yY2VkIEhhcmQgRmF1bHQKKyNkZWZpbmUgTlZJQ19IRkFVTFRfU1RBVF9WRUNUICAgMHgwMDAwMDAwMiAgLy8gVmVjdG9yIFRhYmxlIFJlYWQgRmF1bHQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0RFQlVHX1NUQVQKKy8vIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19ERUJVR19TVEFUX0VYVFJOTCAgMHgwMDAwMDAxMCAgLy8gRURCR1JRIGFzc2VydGVkCisjZGVmaW5lIE5WSUNfREVCVUdfU1RBVF9WQ0FUQ0ggIDB4MDAwMDAwMDggIC8vIFZlY3RvciBjYXRjaAorI2RlZmluZSBOVklDX0RFQlVHX1NUQVRfRFdUVFJBUCAweDAwMDAwMDA0ICAvLyBEV1QgbWF0Y2gKKyNkZWZpbmUgTlZJQ19ERUJVR19TVEFUX0JLUFQgICAgMHgwMDAwMDAwMiAgLy8gQnJlYWtwb2ludCBpbnN0cnVjdGlvbgorI2RlZmluZSBOVklDX0RFQlVHX1NUQVRfSEFMVEVEICAweDAwMDAwMDAxICAvLyBIYWx0IHJlcXVlc3QKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX01NX0FERFIgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX01NX0FERFJfTSAgICAgICAgICAweEZGRkZGRkZGICAvLyBGYXVsdCBBZGRyZXNzCisjZGVmaW5lIE5WSUNfTU1fQUREUl9TICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0ZBVUxUX0FERFIKKy8vIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19GQVVMVF9BRERSX00gICAgICAgMHhGRkZGRkZGRiAgLy8gRmF1bHQgQWRkcmVzcworI2RlZmluZSBOVklDX0ZBVUxUX0FERFJfUyAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19EQkdfQ1RSTCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfREJHX0NUUkxfREJHS0VZX00gIDB4RkZGRjAwMDAgIC8vIERlYnVnIGtleSBtYXNrCisjZGVmaW5lIE5WSUNfREJHX0NUUkxfREJHS0VZICAgIDB4QTA1RjAwMDAgIC8vIERlYnVnIGtleQorI2RlZmluZSBOVklDX0RCR19DVFJMX1NfUkVTRVRfU1QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwICAvLyBDb3JlIGhhcyByZXNldCBzaW5jZSBsYXN0IHJlYWQKKyNkZWZpbmUgTlZJQ19EQkdfQ1RSTF9TX1JFVElSRV9TVCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAgIC8vIENvcmUgaGFzIGV4ZWN1dGVkIGluc3J1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgbGFzdCByZWFkCisjZGVmaW5lIE5WSUNfREJHX0NUUkxfU19MT0NLVVAgIDB4MDAwODAwMDAgIC8vIENvcmUgaXMgbG9ja2VkIHVwCisjZGVmaW5lIE5WSUNfREJHX0NUUkxfU19TTEVFUCAgIDB4MDAwNDAwMDAgIC8vIENvcmUgaXMgc2xlZXBpbmcKKyNkZWZpbmUgTlZJQ19EQkdfQ1RSTF9TX0hBTFQgICAgMHgwMDAyMDAwMCAgLy8gQ29yZSBzdGF0dXMgb24gaGFsdAorI2RlZmluZSBOVklDX0RCR19DVFJMX1NfUkVHUkRZICAweDAwMDEwMDAwICAvLyBSZWdpc3RlciByZWFkL3dyaXRlIGF2YWlsYWJsZQorI2RlZmluZSBOVklDX0RCR19DVFJMX0NfU05BUFNUQUxMIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMCAgLy8gQnJlYWtzIGEgc3RhbGxlZCBsb2FkL3N0b3JlCisjZGVmaW5lIE5WSUNfREJHX0NUUkxfQ19NQVNLSU5UIDB4MDAwMDAwMDggIC8vIE1hc2sgaW50ZXJydXB0cyB3aGVuIHN0ZXBwaW5nCisjZGVmaW5lIE5WSUNfREJHX0NUUkxfQ19TVEVQICAgIDB4MDAwMDAwMDQgIC8vIFN0ZXAgdGhlIGNvcmUKKyNkZWZpbmUgTlZJQ19EQkdfQ1RSTF9DX0hBTFQgICAgMHgwMDAwMDAwMiAgLy8gSGFsdCB0aGUgY29yZQorI2RlZmluZSBOVklDX0RCR19DVFJMX0NfREVCVUdFTiAweDAwMDAwMDAxICAvLyBFbmFibGUgZGVidWcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0RCR19YRkVSIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfV05SICAgMHgwMDAxMDAwMCAgLy8gV3JpdGUgb3Igbm90IHJlYWQKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfU0VMX00gMHgwMDAwMDAxRiAgLy8gUmVnaXN0ZXIKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjAgICAgMHgwMDAwMDAwMCAgLy8gUmVnaXN0ZXIgUjAKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjEgICAgMHgwMDAwMDAwMSAgLy8gUmVnaXN0ZXIgUjEKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjIgICAgMHgwMDAwMDAwMiAgLy8gUmVnaXN0ZXIgUjIKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjMgICAgMHgwMDAwMDAwMyAgLy8gUmVnaXN0ZXIgUjMKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjQgICAgMHgwMDAwMDAwNCAgLy8gUmVnaXN0ZXIgUjQKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjUgICAgMHgwMDAwMDAwNSAgLy8gUmVnaXN0ZXIgUjUKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjYgICAgMHgwMDAwMDAwNiAgLy8gUmVnaXN0ZXIgUjYKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjcgICAgMHgwMDAwMDAwNyAgLy8gUmVnaXN0ZXIgUjcKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjggICAgMHgwMDAwMDAwOCAgLy8gUmVnaXN0ZXIgUjgKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjkgICAgMHgwMDAwMDAwOSAgLy8gUmVnaXN0ZXIgUjkKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjEwICAgMHgwMDAwMDAwQSAgLy8gUmVnaXN0ZXIgUjEwCisjZGVmaW5lIE5WSUNfREJHX1hGRVJfUkVHX1IxMSAgIDB4MDAwMDAwMEIgIC8vIFJlZ2lzdGVyIFIxMQorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SMTIgICAweDAwMDAwMDBDICAvLyBSZWdpc3RlciBSMTIKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjEzICAgMHgwMDAwMDAwRCAgLy8gUmVnaXN0ZXIgUjEzCisjZGVmaW5lIE5WSUNfREJHX1hGRVJfUkVHX1IxNCAgIDB4MDAwMDAwMEUgIC8vIFJlZ2lzdGVyIFIxNAorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SMTUgICAweDAwMDAwMDBGICAvLyBSZWdpc3RlciBSMTUKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfRkxBR1MgMHgwMDAwMDAxMCAgLy8geFBTUi9GbGFncyByZWdpc3RlcgorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19NU1AgICAweDAwMDAwMDExICAvLyBNYWluIFNQCisjZGVmaW5lIE5WSUNfREJHX1hGRVJfUkVHX1BTUCAgIDB4MDAwMDAwMTIgIC8vIFByb2Nlc3MgU1AKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfRFNQICAgMHgwMDAwMDAxMyAgLy8gRGVlcCBTUAorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19DRkJQICAweDAwMDAwMDE0ICAvLyBDb250cm9sL0ZhdWx0L0Jhc2VQcmkvUHJpTWFzaworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfREJHX0RBVEEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0RCR19EQVRBX00gICAgICAgICAweEZGRkZGRkZGICAvLyBEYXRhIHRlbXBvcmFyeSBjYWNoZQorI2RlZmluZSBOVklDX0RCR19EQVRBX1MgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19EQkdfSU5UIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19EQkdfSU5UX0hBUkRFUlIgICAgMHgwMDAwMDQwMCAgLy8gRGVidWcgdHJhcCBvbiBoYXJkIGZhdWx0CisjZGVmaW5lIE5WSUNfREJHX0lOVF9JTlRFUlIgICAgIDB4MDAwMDAyMDAgIC8vIERlYnVnIHRyYXAgb24gaW50ZXJydXB0IGVycm9ycworI2RlZmluZSBOVklDX0RCR19JTlRfQlVTRVJSICAgICAweDAwMDAwMTAwICAvLyBEZWJ1ZyB0cmFwIG9uIGJ1cyBlcnJvcgorI2RlZmluZSBOVklDX0RCR19JTlRfU1RBVEVSUiAgICAweDAwMDAwMDgwICAvLyBEZWJ1ZyB0cmFwIG9uIHVzYWdlIGZhdWx0IHN0YXRlCisjZGVmaW5lIE5WSUNfREJHX0lOVF9DSEtFUlIgICAgIDB4MDAwMDAwNDAgIC8vIERlYnVnIHRyYXAgb24gdXNhZ2UgZmF1bHQgY2hlY2sKKyNkZWZpbmUgTlZJQ19EQkdfSU5UX05PQ1BFUlIgICAgMHgwMDAwMDAyMCAgLy8gRGVidWcgdHJhcCBvbiBjb3Byb2Nlc3NvciBlcnJvcgorI2RlZmluZSBOVklDX0RCR19JTlRfTU1FUlIgICAgICAweDAwMDAwMDEwICAvLyBEZWJ1ZyB0cmFwIG9uIG1lbSBtYW5hZ2UgZmF1bHQKKyNkZWZpbmUgTlZJQ19EQkdfSU5UX1JFU0VUICAgICAgMHgwMDAwMDAwOCAgLy8gQ29yZSByZXNldCBzdGF0dXMKKyNkZWZpbmUgTlZJQ19EQkdfSU5UX1JTVFBFTkRDTFIgMHgwMDAwMDAwNCAgLy8gQ2xlYXIgcGVuZGluZyBjb3JlIHJlc2V0CisjZGVmaW5lIE5WSUNfREJHX0lOVF9SU1RQRU5ESU5HIDB4MDAwMDAwMDIgIC8vIENvcmUgcmVzZXQgaXMgcGVuZGluZworI2RlZmluZSBOVklDX0RCR19JTlRfUlNUVkNBVENIICAweDAwMDAwMDAxICAvLyBSZXNldCB2ZWN0b3IgY2F0Y2gKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1NXX1RSSUcgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1NXX1RSSUdfSU5USURfTSAgICAweDAwMDAwMDNGICAvLyBJbnRlcnJ1cHQgSUQKKyNkZWZpbmUgTlZJQ19TV19UUklHX0lOVElEX1MgICAgMAorCisjZW5kaWYgLy8gX19IV19OVklDX0hfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfcHJjbS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfcHJjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMWMwOTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19wcmNtLmgKQEAgLTAsMCArMSwxNTgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfcHJjbV9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0yMCAyMDozMjo1MyArMDIwMCAoRnJpLCAyMCBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjQyOQorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19QUkNNX0hfXworI2RlZmluZSBfX0hXX1BSQ01fSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gUFJDTSBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBJbmZyYXN0cnVjdHVyZSBDbG9jayBEaXZpc2lvbiBGYWN0b3IgRm9yIFJ1biBNb2RlCisjZGVmaW5lIFBSQ01fT19JTkZSQ0xLRElWUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gSW5mcmFzdHJ1Y3R1cmUgQ2xvY2sgRGl2aXNpb24gRmFjdG9yIEZvciBTbGVlcCBNb2RlCisjZGVmaW5lIFBSQ01fT19JTkZSQ0xLRElWUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gSW5mcmFzdHJ1Y3R1cmUgQ2xvY2sgRGl2aXNpb24gRmFjdG9yIEZvciBEZWVwU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fSU5GUkNMS0RJVkRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIE1DVSBWb2x0YWdlIERvbWFpbiBDb250cm9sCisjZGVmaW5lIFBSQ01fT19WRENUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gQ2xvY2sgTG9hZCBDb250cm9sCisjZGVmaW5lIFBSQ01fT19DTEtMT0FEQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8gUkZDIENsb2NrIEdhdGUKKyNkZWZpbmUgUFJDTV9PX1JGQ0NMS0cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBWSU1TIENsb2NrIEdhdGUKKyNkZWZpbmUgUFJDTV9PX1ZJTVNDTEtHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorCisvLyBUUk5HLCBDUllQVE8gQW5kIFVETUEgQ2xvY2sgR2F0ZSBGb3IgUnVuIE1vZGUKKyNkZWZpbmUgUFJDTV9PX1NFQ0RNQUNMS0dSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzQworCisvLyBUUk5HLCBDUllQVE8gQW5kIFVETUEgQ2xvY2sgR2F0ZSBGb3IgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fU0VDRE1BQ0xLR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisKKy8vIFRSTkcsIENSWVBUTyBBbmQgVURNQSBDbG9jayBHYXRlIEZvciBEZWVwIFNsZWVwIE1vZGUKKyNkZWZpbmUgUFJDTV9PX1NFQ0RNQUNMS0dEUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorCisvLyBHUElPIENsb2NrIEdhdGUgRm9yIFJ1biBNb2RlCisjZGVmaW5lIFBSQ01fT19HUElPQ0xLR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKworLy8gR1BJTyBDbG9jayBHYXRlIEZvciBTbGVlcCBNb2RlCisjZGVmaW5lIFBSQ01fT19HUElPQ0xLR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEMKKworLy8gR1BJTyBDbG9jayBHYXRlIEZvciBEZWVwIFNsZWVwIE1vZGUKKyNkZWZpbmUgUFJDTV9PX0dQSU9DTEtHRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorCisvLyBHUFQgQ2xvY2sgR2F0ZSBGb3IgUnVuIE1vZGUKKyNkZWZpbmUgUFJDTV9PX0dQVENMS0dSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorCisvLyBHUFQgQ2xvY2sgR2F0ZSBGb3IgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fR1BUQ0xLR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4CisKKy8vIEdQVCBDbG9jayBHYXRlIEZvciBEZWVwIFNsZWVwIE1vZGUKKyNkZWZpbmUgUFJDTV9PX0dQVENMS0dEUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QworCisvLyBJMkMgQ2xvY2sgR2F0ZSBGb3IgUnVuIE1vZGUKKyNkZWZpbmUgUFJDTV9PX0kyQ0NMS0dSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorCisvLyBJMkMgQ2xvY2sgR2F0ZSBGb3IgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fSTJDQ0xLR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisKKy8vIEkyQyBDbG9jayBHYXRlIEZvciBEZWVwIFNsZWVwIE1vZGUKKyNkZWZpbmUgUFJDTV9PX0kyQ0NMS0dEUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAorCisvLyBVQVJUIENsb2NrIEdhdGUgRm9yIFJ1biBNb2RlCisjZGVmaW5lIFBSQ01fT19VQVJUQ0xLR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKworLy8gVUFSVCBDbG9jayBHYXRlIEZvciBTbGVlcCBNb2RlCisjZGVmaW5lIFBSQ01fT19VQVJUQ0xLR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKworLy8gVUFSVCBDbG9jayBHYXRlIEZvciBEZWVwIFNsZWVwIE1vZGUKKyNkZWZpbmUgUFJDTV9PX1VBUlRDTEtHRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NAorCisvLyBTU0kgQ2xvY2sgR2F0ZSBGb3IgUnVuIE1vZGUKKyNkZWZpbmUgUFJDTV9PX1NTSUNMS0dSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAorCisvLyBTU0kgQ2xvY2sgR2F0ZSBGb3IgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fU1NJQ0xLR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdDCisKKy8vIFNTSSBDbG9jayBHYXRlIEZvciBEZWVwIFNsZWVwIE1vZGUKKyNkZWZpbmUgUFJDTV9PX1NTSUNMS0dEUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorCisvLyBJMlMgQ2xvY2sgR2F0ZSBGb3IgUnVuIE1vZGUKKyNkZWZpbmUgUFJDTV9PX0kyU0NMS0dSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4NAorCisvLyBJMlMgQ2xvY2sgR2F0ZSBGb3IgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fSTJTQ0xLR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDg4CisKKy8vIEkyUyBDbG9jayBHYXRlIEZvciBEZWVwIFNsZWVwIE1vZGUKKyNkZWZpbmUgUFJDTV9PX0kyU0NMS0dEUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBQUkNNX09fQ1BVQ0xLRElWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEI4CisKKy8vIEkyUyBDbG9jayBDb250cm9sCisjZGVmaW5lIFBSQ01fT19JMlNCQ0xLU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQzgKKworLy8gR1BUIFNjYWxhcgorI2RlZmluZSBQUkNNX09fR1BUQ0xLRElWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMENDCisKKy8vIEkyUyBDbG9jayBDb250cm9sCisjZGVmaW5lIFBSQ01fT19JMlNDTEtDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRDAKKworLy8gTUNMSyBEaXZpc2lvbiBSYXRpbworI2RlZmluZSBQUkNNX09fSTJTTUNMS0RJViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEQ0CisKKy8vIEJDTEsgRGl2aXNpb24gUmF0aW8KKyNkZWZpbmUgUFJDTV9PX0kyU0JDTEtESVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBEOAorCisvLyBXQ0xLIERpdmlzaW9uIFJhdGlvCisjZGVmaW5lIFBSQ01fT19JMlNXQ0xLRElWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwREMKKworLy8gU1cgSW5pdGlhdGVkIFJlc2V0cworI2RlZmluZSBQUkNNX09fU1dSRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTBDCisKKy8vIFdBUk0gUmVzZXQgQ29udHJvbCBBbmQgU3RhdHVzCisjZGVmaW5lIFBSQ01fT19XQVJNUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTAKKworLy8gUG93ZXIgRG9tYWluIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX1BEQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEyQworCisvLyBSRkMgUG93ZXIgRG9tYWluIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX1BEQ1RMMFJGQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEzMAorCisvLyBTRVJJQUwgUG93ZXIgRG9tYWluIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX1BEQ1RMMFNFUklBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEzNAorCisvLyBQRVJJUEggUG93ZXIgRG9tYWluIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX1BEQ1RMMFBFUklQSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEzOAorCisvLyBQb3dlciBEb21haW4gU3RhdHVzCisjZGVmaW5lIFBSQ01fT19QRFNUQVQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxNDAKKworLy8gUkZDIFBvd2VyIERvbWFpbiBTdGF0dXMKKyNkZWZpbmUgUFJDTV9PX1BEU1RBVDBSRkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE0NAorCisvLyBTRVJJQUwgUG93ZXIgRG9tYWluIFN0YXR1cworI2RlZmluZSBQUkNNX09fUERTVEFUMFNFUklBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTQ4CisKKy8vIFBFUklQSCBQb3dlciBEb21haW4gU3RhdHVzCisjZGVmaW5lIFBSQ01fT19QRFNUQVQwUEVSSVBIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxNEMKKworLy8gUG93ZXIgRG9tYWluIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX1BEQ1RMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE3QworCisvLyBDUFUgUG93ZXIgRG9tYWluIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX1BEQ1RMMUNQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4NAorCisvLyBSRkMgUG93ZXIgRG9tYWluIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX1BEQ1RMMVJGQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4OAorCisvLyBWSU1TIFBvd2VyIERvbWFpbiBDb250cm9sCisjZGVmaW5lIFBSQ01fT19QRENUTDFWSU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxOEMKKworLy8gUG93ZXIgRG9tYWluIFN0YXR1cworI2RlZmluZSBQUkNNX09fUERTVEFUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTk0CisKKy8vIEJVUyBQb3dlciBEb21haW4gU3RhdHVzCisjZGVmaW5lIFBSQ01fT19QRFNUQVQxQlVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxOTgKKworLy8gUkZDIFBvd2VyIERvbWFpbiBTdGF0dXMKKyNkZWZpbmUgUFJDTV9PX1BEU1RBVDFSRkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE5QworCisvLyBDUFUgUG93ZXIgRG9tYWluIFN0YXR1cworI2RlZmluZSBQUkNNX09fUERTVEFUMUNQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMUEwCisKKy8vIFZJTVMgUG93ZXIgRG9tYWluIFN0YXR1cworI2RlZmluZSBQUkNNX09fUERTVEFUMVZJTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMUE0CisKKy8vIFNlbGVjdGVkIFJGQyBNb2RlCisjZGVmaW5lIFBSQ01fT19SRkNNT0RFU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxRDAKKworLy8gUG93ZXIgUHJvZmlsZXIgUmVnaXN0ZXIKKyNkZWZpbmUgUFJDTV9PX1BXUlBST0ZTVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFFMAorCisvLyBNZW1vcnkgUmV0ZW50aW9uIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX1JBTVJFVEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19JTkZSQ0xLRElWUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsxOjBdIFJBVElPCisvLworLy8gRGl2aXNpb24gcmF0ZSBmb3IgY2xvY2tzIGRyaXZpbmcgbW9kdWxlcyBpbiB0aGUgTUNVX0FPTiBkb21haW4gd2hlbiBzeXN0ZW0KKy8vIENQVSBpcyBpbiBydW4gbW9kZS4gRGl2aXNpb24gcmF0aW8gYWZmZWN0cyBib3RoIGluZnJhc3RydWN0dXJlIGNsb2NrIGFuZAorLy8gcGVyYnVzdWxsIGNsb2NrLgorLy8gRU5VTXM6CisvLyBESVYzMiAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDMyCisvLyBESVY4ICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDgKKy8vIERJVjIgICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMgorLy8gRElWMSAgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAxCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVlJfUkFUSU9fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWUl9SQVRJT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQUkNNX0lORlJDTEtESVZSX1JBVElPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVlJfUkFUSU9fRElWMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWUl9SQVRJT19ESVY4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX0lORlJDTEtESVZSX1JBVElPX0RJVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVlJfUkFUSU9fRElWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSU5GUkNMS0RJVlMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMTowXSBSQVRJTworLy8KKy8vIERpdmlzaW9uIHJhdGUgZm9yIGNsb2NrcyBkcml2aW5nIG1vZHVsZXMgaW4gdGhlIE1DVV9BT04gZG9tYWluIHdoZW4gc3lzdGVtCisvLyBDUFUgaXMgaW4gc2xlZXAgbW9kZS4gRGl2aXNpb24gcmF0aW8gYWZmZWN0cyBib3RoIGluZnJhc3RydWN0dXJlIGNsb2NrIGFuZAorLy8gcGVyYnVzdWxsIGNsb2NrLgorLy8gRU5VTXM6CisvLyBESVYzMiAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDMyCisvLyBESVY4ICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDgKKy8vIERJVjIgICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMgorLy8gRElWMSAgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAxCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVlNfUkFUSU9fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWU19SQVRJT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQUkNNX0lORlJDTEtESVZTX1JBVElPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVlNfUkFUSU9fRElWMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWU19SQVRJT19ESVY4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX0lORlJDTEtESVZTX1JBVElPX0RJVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVlNfUkFUSU9fRElWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSU5GUkNMS0RJVkRTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzE6MF0gUkFUSU8KKy8vCisvLyBEaXZpc2lvbiByYXRlIGZvciBjbG9ja3MgZHJpdmluZyBtb2R1bGVzIGluIHRoZSBNQ1VfQU9OIGRvbWFpbiB3aGVuIHN5c3RlbQorLy8gQ1BVIGlzIGluIHNlZXBzbGVlcCBtb2RlLiBEaXZpc2lvbiByYXRpbyBhZmZlY3RzIGJvdGggaW5mcmFzdHJ1Y3R1cmUgY2xvY2sKKy8vIGFuZCBwZXJidXN1bGwgY2xvY2suCisvLyBFTlVNczoKKy8vIERJVjMyICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMzIKKy8vIERJVjggICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgOAorLy8gRElWMiAgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAyCisvLyBESVYxICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDEKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWRFNfUkFUSU9fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUkNNX0lORlJDTEtESVZEU19SQVRJT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVkRTX1JBVElPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWRFNfUkFUSU9fRElWMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQUkNNX0lORlJDTEtESVZEU19SQVRJT19ESVY4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVkRTX1JBVElPX0RJVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWRFNfUkFUSU9fRElWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19WRENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIE1DVV9WRAorLy8KKy8vIFJlcXVlc3QgV1VDIHRvIHBvd2VyIGRvd24gdGhlIE1DVSB2b2x0YWdlIGRvbWFpbgorLy8KKy8vIDA6IE5vIHJlcXVlc3QKKy8vIDE6IEFzc2VydCByZXF1ZXN0IHdoZW4gcG9zc2libGUuIEFuIGFzc2VydGVkIHBvd2VyIGRvd24gcmVxdWVzdCB3aWxsIHJlc3VsdAorLy8gaW4gYSBib290IG9mIHRoZSBNQ1Ugc3lzdGVtIHdoZW4gcG93ZXJlZCB1cCBhZ2Fpbi4KKy8vCisvLyBUaGUgYml0IHdpbGwgaGF2ZSBubyBlZmZlY3QgYmVmb3JlIHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzIGFyZSBtZXQ6CisvLyAxLiBQRENUTDEuQ1BVX09OID0gMAorLy8gMi4gUERDVEwxLlZJTVNfTU9ERSA9IDAKKy8vIDMuIFNFQ0RNQUNMS0dEUy5ETUFfQ0xLX0VOID0gMCAoTm90ZTogU2V0dGluZyBtdXN0IGJlIGxvYWRlZCB3aXRoCisvLyBDTEtMT0FEQ1RMLkxPQUQpCisvLyA0LiBTRUNETUFDTEtHRFMuQ1JZUFRPX0NMS19FTiA9IDAgKE5vdGU6IFNldHRpbmcgbXVzdCBiZSBsb2FkZWQgd2l0aAorLy8gQ0xLTE9BRENUTC5MT0FEKQorLy8gNS4gUkZDIGRvIG5vIHJlcXVlc3QgYWNjZXNzIHRvIEJVUworLy8gNi4gU3lzdGVtIENQVSBpbiBkZWVwc2xlZXAKKyNkZWZpbmUgUFJDTV9WRENUTF9NQ1VfVkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1ZEQ1RMX01DVV9WRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fVkRDVExfTUNVX1ZEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9WRENUTF9NQ1VfVkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFswXSBVTERPCisvLworLy8gUmVxdWVzdCBXVUMgdG8gc3dpdGNoIHRvIHVMRE8uCisvLworLy8gMDogTm8gcmVxdWVzdAorLy8gMTogQXNzZXJ0IHJlcXVlc3Qgd2hlbiBwb3NzaWJsZQorLy8KKy8vIFRoZSBiaXQgd2lsbCBoYXZlIG5vIGVmZmVjdCBiZWZvcmUgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHMgYXJlIG1ldDoKKy8vIDEuIFBEQ1RMMS5DUFVfT04gPSAwCisvLyAyLiBQRENUTDEuVklNU19NT0RFID0gMAorLy8gMy4gU0VDRE1BQ0xLR0RTLkRNQV9DTEtfRU4gPSAwIChOb3RlOiBTZXR0aW5nIG11c3QgYmUgbG9hZGVkIHdpdGgKKy8vIENMS0xPQURDVEwuTE9BRCkKKy8vIDQuIFNFQ0RNQUNMS0dEUy5DUllQVE9fQ0xLX0VOID0gMCAoTm90ZTogU2V0dGluZyBtdXN0IGJlIGxvYWRlZCB3aXRoCisvLyBDTEtMT0FEQ1RMLkxPQUQpCisvLyA1LiBSRkMgZG8gbm8gcmVxdWVzdCBhY2Nlc3MgdG8gQlVTCisvLyA2LiBTeXN0ZW0gQ1BVIGluIGRlZXBzbGVlcAorI2RlZmluZSBQUkNNX1ZEQ1RMX1VMRE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fVkRDVExfVUxET19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9WRENUTF9VTERPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1ZEQ1RMX1VMRE9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0NMS0xPQURDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBMT0FEX0RPTkUKKy8vCisvLyBTdGF0dXMgb2YgTE9BRC4KKy8vIFdpbGwgYmUgY2xlYXJlZCB0byAwIHdoZW4gYW55IG9mIHRoZSByZWdpc3RlcnMgcmVxdWlyaW5nIGEgTE9BRCBpcyB3cml0dGVuCisvLyB0bywgYW5kIGJlIHNldCB0byAxIHdoZW4gYSBMT0FEIGlzIGRvbmUuCisvLyBOb3RlIHRoYXQgd3JpdGluZyBubyBjaGFuZ2UgdG8gYSByZWdpc3RlciB3aWxsIHJlc3VsdCBpbiB0aGUgTE9BRF9ET05FIGJlaW5nCisvLyBjbGVhcmVkLgorLy8KKy8vIDAgOiBPbmUgb3IgbW9yZSByZWdpc3RlcnMgaGF2ZSBiZWVuIHdyaXRlIGFjY2Vzc2VkIGFmdGVyIGxhc3QgTE9BRAorLy8gMSA6IE5vIHJlZ2lzdGVycyBhcmUgd3JpdGUgYWNjZXNzZWQgYWZ0ZXIgbGFzdCBMT0FECisjZGVmaW5lIFBSQ01fQ0xLTE9BRENUTF9MT0FEX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9DTEtMT0FEQ1RMX0xPQURfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQUkNNX0NMS0xPQURDVExfTE9BRF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fQ0xLTE9BRENUTF9MT0FEX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gTE9BRAorLy8KKy8vIDA6IE5vIGFjdGlvbgorLy8gMTogTG9hZCBzZXR0aW5ncyB0byBDTEtDVFJMLiBCaXQgaXMgSFcgY2xlYXJlZC4KKy8vCisvLyBNdWx0aXBsZSBjaGFuZ2VzIHRvIHNldHRpbmdzIG1heSBiZSBkb25lIGJlZm9yZSBMT0FEIGlzIHdyaXR0ZW4gb25jZSBzbyBhbGwKKy8vIGNoYW5nZXMgdGFrZXMgcGxhY2UgYXQgdGhlIHNhbWUgdGltZS4gTE9BRCBjYW4gYWxzbyBiZSBkb25lIGFmdGVyIHNpbmdsZQorLy8gc2V0dGluZyB1cGRhdGVzLgorLy8KKy8vIFJlZ2lzdGVycyB0aGF0IG5lZWRzIHRvIGJlIGZvbGxvd2VkIGJ5IExPQUQgYmVmb3JlIHNldHRpbmdzIGJlaW5nIGFwcGxpZWQKKy8vIGFyZToKKy8vIC0gUkZDQ0xLRworLy8gLSBWSU1TQ0xLRworLy8gLSBTRUNETUFDTEtHUgorLy8gLSBTRUNETUFDTEtHUworLy8gLSBTRUNETUFDTEtHRFMKKy8vIC0gR1BJT0NMS0dSCisvLyAtIEdQSU9DTEtHUworLy8gLSBHUElPQ0xLR0RTCisvLyAtIEdQVENMS0dSCisvLyAtIEdQVENMS0dTCisvLyAtIEdQVENMS0dEUworLy8gLSBHUFRDTEtESVYKKy8vIC0gSTJDQ0xLR1IKKy8vIC0gSTJDQ0xLR1MKKy8vIC0gSTJDQ0xLR0RTCisvLyAtIFNTSUNMS0dSCisvLyAtIFNTSUNMS0dTCisvLyAtIFNTSUNMS0dEUworLy8gLSBVQVJUQ0xLR1IKKy8vIC0gVUFSVENMS0dTCisvLyAtIFVBUlRDTEtHRFMKKy8vIC0gSTJTQ0xLR1IKKy8vIC0gSTJTQ0xLR1MKKy8vIC0gSTJTQ0xLR0RTCisvLyAtIEkyU0JDTEtTRUwKKy8vIC0gSTJTQ0xLQ1RMCisvLyAtIEkyU01DTEtESVYKKy8vIC0gSTJTQkNMS0RJVgorLy8gLSBJMlNXQ0xLRElWCisjZGVmaW5lIFBSQ01fQ0xLTE9BRENUTF9MT0FEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9DTEtMT0FEQ1RMX0xPQURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0NMS0xPQURDVExfTE9BRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fQ0xLTE9BRENUTF9MT0FEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fUkZDQ0xLRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIENMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sgaWYgUkZDIHBvd2VyIGRvbWFpbiBpcyBvbgorLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX1JGQ0NMS0dfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUkZDQ0xLR19DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9SRkNDTEtHX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1JGQ0NMS0dfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1ZJTVNDTEtHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzE6MF0gQ0xLX0VOCisvLworLy8gMDA6IERpc2FibGUgY2xvY2sKKy8vIDAxOiBEaXNhYmxlIGNsb2NrIHdoZW4gU1lTQlVTIGNsb2NrIGlzIGRpc2FibGVkCisvLyAxMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fVklNU0NMS0dfQ0xLX0VOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUFJDTV9WSU1TQ0xLR19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQUkNNX1ZJTVNDTEtHX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1NFQ0RNQUNMS0dSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOF0gRE1BX0NMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHUl9ETUFfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dSX0RNQV9DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1JfRE1BX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHUl9ETUFfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFsxXSBUUk5HX0NMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHUl9UUk5HX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dSX1RSTkdfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1JfVFJOR19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHUl9UUk5HX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBDUllQVE9fQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dSX0NSWVBUT19DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1JfQ1JZUFRPX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHUl9DUllQVE9fQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dSX0NSWVBUT19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1NFQ0RNQUNMS0dTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOF0gRE1BX0NMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHU19ETUFfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dTX0RNQV9DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1NfRE1BX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHU19ETUFfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFsxXSBUUk5HX0NMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHU19UUk5HX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dTX1RSTkdfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1NfVFJOR19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHU19UUk5HX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBDUllQVE9fQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dTX0NSWVBUT19DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1NfQ1JZUFRPX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHU19DUllQVE9fQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dTX0NSWVBUT19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1NFQ0RNQUNMS0dEUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzhdIERNQV9DTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR0RTX0RNQV9DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHRFNfRE1BX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dEU19ETUFfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR0RTX0RNQV9DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbMV0gVFJOR19DTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR0RTX1RSTkdfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHRFNfVFJOR19DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dEU19UUk5HX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR0RTX1RSTkdfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQ1JZUFRPX0NMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHRFNfQ1JZUFRPX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dEU19DUllQVE9fQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR0RTX0NSWVBUT19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHRFNfQ1JZUFRPX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19HUElPQ0xLR1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fR1BJT0NMS0dSX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9HUElPQ0xLR1JfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0dQSU9DTEtHUl9DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fR1BJT0NMS0dSX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fR1BJT0NMS0dTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0dQSU9DTEtHU19DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fR1BJT0NMS0dTX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9HUElPQ0xLR1NfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0dQSU9DTEtHU19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0dQSU9DTEtHRFMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fR1BJT0NMS0dEU19DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9HUElPQ0xLR0RTX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0dQSU9DTEtHRFNfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fR1BJT0NMS0dEU19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fR1BUQ0xLR1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMzowXSBDTEtfRU4KKy8vCisvLyBFYWNoIGJpdCBiZWxvdyBoYXMgdGhlIGZvbGxvd2luZyBtZWFuaW5nOgorLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEVOVU1zIGNhbiBiZSBjb21iaW5lZAorLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisvLyBFTlVNczoKKy8vIEdQVDMgICAgICAgICAgICAgICAgICAgICBFbmFibGUgY2xvY2sgZm9yIEdQVDMKKy8vIEdQVDIgICAgICAgICAgICAgICAgICAgICBFbmFibGUgY2xvY2sgZm9yIEdQVDIKKy8vIEdQVDEgICAgICAgICAgICAgICAgICAgICBFbmFibGUgY2xvY2sgZm9yIEdQVDEKKy8vIEdQVDAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgY2xvY2sgZm9yIEdQVDAKKyNkZWZpbmUgUFJDTV9HUFRDTEtHUl9DTEtfRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBQUkNNX0dQVENMS0dSX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIFBSQ01fR1BUQ0xLR1JfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9HUFRDTEtHUl9DTEtfRU5fR1BUMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBQUkNNX0dQVENMS0dSX0NMS19FTl9HUFQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFBSQ01fR1BUQ0xLR1JfQ0xLX0VOX0dQVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9HUFRDTEtHUl9DTEtfRU5fR1BUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19HUFRDTEtHUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFszOjBdIENMS19FTgorLy8KKy8vIEVhY2ggYml0IGJlbG93IGhhcyB0aGUgZm9sbG93aW5nIG1lYW5pbmc6CisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRU5VTXMgY2FuIGJlIGNvbWJpbmVkCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKy8vIEVOVU1zOgorLy8gR1BUMyAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMworLy8gR1BUMiAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMgorLy8gR1BUMSAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMQorLy8gR1BUMCAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMAorI2RlZmluZSBQUkNNX0dQVENMS0dTX0NMS19FTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFBSQ01fR1BUQ0xLR1NfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgUFJDTV9HUFRDTEtHU19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0dQVENMS0dTX0NMS19FTl9HUFQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFBSQ01fR1BUQ0xLR1NfQ0xLX0VOX0dQVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9HUFRDTEtHU19DTEtfRU5fR1BUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX0dQVENMS0dTX0NMS19FTl9HUFQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0dQVENMS0dEUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFszOjBdIENMS19FTgorLy8KKy8vIEVhY2ggYml0IGJlbG93IGhhcyB0aGUgZm9sbG93aW5nIG1lYW5pbmc6CisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRU5VTXMgY2FuIGJlIGNvbWJpbmVkCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKy8vIEVOVU1zOgorLy8gR1BUMyAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMworLy8gR1BUMiAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMgorLy8gR1BUMSAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMQorLy8gR1BUMCAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMAorI2RlZmluZSBQUkNNX0dQVENMS0dEU19DTEtfRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFBSQ01fR1BUQ0xLR0RTX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgUFJDTV9HUFRDTEtHRFNfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0dQVENMS0dEU19DTEtfRU5fR1BUMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFBSQ01fR1BUQ0xLR0RTX0NMS19FTl9HUFQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9HUFRDTEtHRFNfQ0xLX0VOX0dQVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX0dQVENMS0dEU19DTEtfRU5fR1BUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0kyQ0NMS0dSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyQ0NMS0dSX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJDQ0xLR1JfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9JMkNDTEtHUl9DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0kyQ0NMS0dSX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0kyQ0NMS0dTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyQ0NMS0dTX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJDQ0xLR1NfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9JMkNDTEtHU19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0kyQ0NMS0dTX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0kyQ0NMS0dEUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIENMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9JMkNDTEtHRFNfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0kyQ0NMS0dEU19DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fSTJDQ0xLR0RTX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JMkNDTEtHRFNfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19VQVJUQ0xLR1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fVUFSVENMS0dSX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9VQVJUQ0xLR1JfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1VBUlRDTEtHUl9DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fVUFSVENMS0dSX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fVUFSVENMS0dTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX1VBUlRDTEtHU19DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fVUFSVENMS0dTX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9VQVJUQ0xLR1NfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1VBUlRDTEtHU19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1VBUlRDTEtHRFMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fVUFSVENMS0dEU19DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9VQVJUQ0xLR0RTX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1VBUlRDTEtHRFNfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fVUFSVENMS0dEU19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fU1NJQ0xLR1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMTowXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisvLyBFTlVNczoKKy8vIFNTSTEgICAgICAgICAgICAgICAgICAgICBFbmFibGUgY2xvY2sgZm9yIFNTSTEKKy8vIFNTSTAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgY2xvY2sgZm9yIFNTSTAKKyNkZWZpbmUgUFJDTV9TU0lDTEtHUl9DTEtfRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUkNNX1NTSUNMS0dSX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFBSQ01fU1NJQ0xLR1JfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9TU0lDTEtHUl9DTEtfRU5fU1NJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1NTSUNMS0dSX0NMS19FTl9TU0kwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1NTSUNMS0dTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzE6MF0gQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorLy8gRU5VTXM6CisvLyBTU0kxICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGNsb2NrIGZvciBTU0kxCisvLyBTU0kwICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGNsb2NrIGZvciBTU0kwCisjZGVmaW5lIFBSQ01fU1NJQ0xLR1NfQ0xLX0VOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUFJDTV9TU0lDTEtHU19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQUkNNX1NTSUNMS0dTX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fU1NJQ0xLR1NfQ0xLX0VOX1NTSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9TU0lDTEtHU19DTEtfRU5fU1NJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19TU0lDTEtHRFMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMTowXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisvLyBFTlVNczoKKy8vIFNTSTEgICAgICAgICAgICAgICAgICAgICBFbmFibGUgY2xvY2sgZm9yIFNTSTEKKy8vIFNTSTAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgY2xvY2sgZm9yIFNTSTAKKyNkZWZpbmUgUFJDTV9TU0lDTEtHRFNfQ0xLX0VOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUkNNX1NTSUNMS0dEU19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFBSQ01fU1NJQ0xLR0RTX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9TU0lDTEtHRFNfQ0xLX0VOX1NTSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1NTSUNMS0dEU19DTEtfRU5fU1NJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0kyU0NMS0dSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyU0NMS0dSX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJTQ0xLR1JfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9JMlNDTEtHUl9DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0kyU0NMS0dSX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0kyU0NMS0dTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyU0NMS0dTX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJTQ0xLR1NfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9JMlNDTEtHU19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0kyU0NMS0dTX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0kyU0NMS0dEUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIENMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9JMlNDTEtHRFNfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0kyU0NMS0dEU19DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fSTJTQ0xLR0RTX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JMlNDTEtHRFNfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19DUFVDTEtESVYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBSQVRJTworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIERJVjIgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElWMSAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIFBSQ01fQ1BVQ0xLRElWX1JBVElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9DUFVDTEtESVZfUkFUSU9fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0NQVUNMS0RJVl9SQVRJT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fQ1BVQ0xLRElWX1JBVElPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9DUFVDTEtESVZfUkFUSU9fRElWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0NQVUNMS0RJVl9SQVRJT19ESVYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0kyU0JDTEtTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTUkMKKy8vCisvLyBCQ0xLIHNvdXJjZSBzZWxlY3RvcgorLy8KKy8vIDA6IFVzZSBleHRlcm5hbCBCQ0xLCisvLyAxOiBVc2UgaW50ZXJuYWxseSBnZW5lcmF0ZWQgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9JMlNCQ0xLU0VMX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0kyU0JDTEtTRUxfU1JDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fSTJTQkNMS1NFTF9TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JMlNCQ0xLU0VMX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19HUFRDTEtESVYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMzowXSBSQVRJTworLy8KKy8vIFNjYWxhciB1c2VkIGZvciBHUFRzLiBUaGUgZGl2aXNpb24gcmF0ZSB3aWxsIGJlIGNvbnN0YW50IGFuZCB1bmdhdGVkIGZvciBSdW4KKy8vIC8gU2xlZXAgLyBEZWVwU2xlZXAgbW9kZS4KKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKy8vIE90aGVyIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZC4KKy8vIEVOVU1zOgorLy8gRElWMjU2ICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAyNTYKKy8vIERJVjEyOCAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMTI4CisvLyBESVY2NCAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDY0CisvLyBESVYzMiAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDMyCisvLyBESVYxNiAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDE2CisvLyBESVY4ICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDgKKy8vIERJVjQgICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgNAorLy8gRElWMiAgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAyCisvLyBESVYxICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDEKKyNkZWZpbmUgUFJDTV9HUFRDTEtESVZfUkFUSU9fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBQUkNNX0dQVENMS0RJVl9SQVRJT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIFBSQ01fR1BUQ0xLRElWX1JBVElPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVYxMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIFBSQ01fR1BUQ0xLRElWX1JBVElPX0RJVjY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVYxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFBSQ01fR1BUQ0xLRElWX1JBVElPX0RJVjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fR1BUQ0xLRElWX1JBVElPX0RJVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSTJTQ0xLQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gU01QTF9PTl9QT1NFREdFCisvLworLy8gT24gdGhlIEkyUyBzZXJpYWwgaW50ZXJmYWNlLCBkYXRhIGFuZCBXQ0xLIGlzIHNhbXBsZWQgYW5kIGNsb2NrZWQgb3V0IG9uCisvLyBvcHBvc2l0ZSBlZGdlcyBvZiBCQ0xLLgorLy8KKy8vIDAgLSBkYXRhIGFuZCBXQ0xLIGFyZSBzYW1wbGVkIG9uIHRoZSBuZWdhdGl2ZSBlZGdlIGFuZCBjbG9ja2VkIG91dCBvbiB0aGUKKy8vIHBvc2l0aXZlIGVkZ2UuCisvLyAxIC0gZGF0YSBhbmQgV0NMSyBhcmUgc2FtcGxlZCBvbiB0aGUgcG9zaXRpdmUgZWRnZSBhbmQgY2xvY2tlZCBvdXQgb24gdGhlCisvLyBuZWdhdGl2ZSBlZGdlLgorLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyU0NMS0NUTF9TTVBMX09OX1BPU0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFBSQ01fSTJTQ0xLQ1RMX1NNUExfT05fUE9TRURHRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUFJDTV9JMlNDTEtDVExfU01QTF9PTl9QT1NFREdFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBQUkNNX0kyU0NMS0NUTF9TTVBMX09OX1BPU0VER0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgIFsyOjFdIFdDTEtfUEhBU0UKKy8vCisvLyBEZWNpZGVzIGhvdyB0aGUgV0NMSyBkaXZpc2lvbiByYXRpbyBpcyBjYWxjdWxhdGVkIGFuZCB1c2VkIHRvIGdlbmVyYXRlCisvLyBkaWZmZXJlbnQgZHV0eSBjeWNsZXMgKFNlZSBJMlNXQ0xLRElWLldESVYpLgorLy8KKy8vIDA6IFNpbmdsZSBwaGFzZQorLy8gMTogRHVhbCBwaGFzZQorLy8gMjogVXNlciBEZWZpbmVkCisvLyAzOiBSZXNlcnZlZC9VbmRlZmluZWQKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9JMlNDTEtDVExfV0NMS19QSEFTRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUkNNX0kyU0NMS0NUTF9XQ0xLX1BIQVNFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIFBSQ01fSTJTQ0xLQ1RMX1dDTEtfUEhBU0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLworLy8gMDogTUNMSywgQkNMSyBhbmQgKipXQ0xLKiogd2lsbCBiZSBzdGF0aWMgbG93CisvLyAxOiBFbmFibGVzIHRoZSBnZW5lcmF0aW9uIG9mICBNQ0xLLCBCQ0xLIGFuZCBXQ0xLCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fSTJTQ0xLQ1RMX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JMlNDTEtDVExfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0kyU0NMS0NUTF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJTQ0xLQ1RMX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSTJTTUNMS0RJVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs5OjBdIE1ESVYKKy8vCisvLyBBbiB1bnNpZ25lZCBmYWN0b3Igb2YgdGhlIGRpdmlzaW9uIHJhdGlvIHVzZWQgdG8gZ2VuZXJhdGUgTUNMSyBbMi0xMDI0XToKKy8vCisvLyBNQ0xLID0gTUNVQ0xLL01ESVZbSHpdCisvLyBNQ1VDTEsgaXMgNDhNSHogaW4gbm9ybWFsIG1vZGUuIEZvciBwb3dlcmRvd24gbW9kZSB0aGUgZnJlcXVlbmN5IGlzIGRlZmluZWQKKy8vIGJ5IEFPTl9XVUM6TUNVQ0xLLlBXUl9EV05fU1JDCisvLworLy8gQSB2YWx1ZSBvZiAwIGlzIGludGVycHJldGVkIGFzIDEwMjQuCisvLyBBIHZhbHVlIG9mIDEgaXMgaW52YWxpZC4KKy8vIElmIE1ESVYgaXMgb2RkIHRoZSBsb3cgcGhhc2Ugb2YgdGhlIGNsb2NrIGlzIG9uZSBNQ1VDTEsgcGVyaW9kIGxvbmdlciB0aGFuCisvLyB0aGUgaGlnaCBwaGFzZS4KKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9JMlNNQ0xLRElWX01ESVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBQUkNNX0kyU01DTEtESVZfTURJVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM0ZGCisjZGVmaW5lIFBSQ01fSTJTTUNMS0RJVl9NRElWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSTJTQkNMS0RJVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs5OjBdIEJESVYKKy8vCisvLyBBbiB1bnNpZ25lZCBmYWN0b3Igb2YgdGhlIGRpdmlzaW9uIHJhdGlvIHVzZWQgdG8gZ2VuZXJhdGUgSTJTIEJDTEsgWzItMTAyNF06CisvLworLy8gQkNMSyA9IE1DVUNMSy9CRElWW0h6XQorLy8gTUNVQ0xLIGlzIDQ4TUh6IGluIG5vcm1hbCBtb2RlLiBGb3IgcG93ZXJkb3duIG1vZGUgdGhlIGZyZXF1ZW5jeSBpcyBkZWZpbmVkCisvLyBieSBBT05fV1VDOk1DVUNMSy5QV1JfRFdOX1NSQworLy8KKy8vIEEgdmFsdWUgb2YgMCBpcyBpbnRlcnByZXRlZCBhcyAxMDI0LgorLy8gQSB2YWx1ZSBvZiAxIGlzIGludmFsaWQuCisvLyBJZiBCRElWIGlzIG9kZCBhbmQgSTJTQ0xLQ1RMLlNNUExfT05fUE9TRURHRSA9IDAsIHRoZSBsb3cgcGhhc2Ugb2YgdGhlIGNsb2NrCisvLyBpcyBvbmUgTUNVQ0xLIHBlcmlvZCBsb25nZXIgdGhhbiB0aGUgaGlnaCBwaGFzZS4KKy8vIElmIEJESVYgaXMgb2RkIGFuZCBJMlNDTEtDVEwuU01QTF9PTl9QT1NFREdFID0gMSAsIHRoZSBoaWdoIHBoYXNlIG9mIHRoZQorLy8gY2xvY2sgaXMgb25lIE1DVUNMSyBwZXJpb2QgbG9uZ2VyIHRoYW4gdGhlIGxvdyBwaGFzZS4KKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9JMlNCQ0xLRElWX0JESVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBQUkNNX0kyU0JDTEtESVZfQkRJVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM0ZGCisjZGVmaW5lIFBSQ01fSTJTQkNMS0RJVl9CRElWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSTJTV0NMS0RJVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIFdESVYKKy8vCisvLyBJZiBJMlNDTEtDVEwuV0NMS19QSEFTRSA9IDAsIFNpbmdsZSBwaGFzZS4KKy8vIFdDTEsgaXMgaGlnaCBvbmUgQkNMSyBwZXJpb2QgYW5kIGxvdyBXRElWWzk6MF0gKHVuc2lnbmVkLCBbMS0xMDIzXSkgQkNMSworLy8gcGVyaW9kcy4KKy8vCisvLyBXQ0xLID0gTUNVQ0xLIC8gQkRJViooV0RJVls5OjBdICsgMSkgW0h6XQorLy8gTUNVQ0xLIGlzIDQ4TUh6IGluIG5vcm1hbCBtb2RlLiBGb3IgcG93ZXJkb3duIG1vZGUgdGhlIGZyZXF1ZW5jeSBpcyBkZWZpbmVkCisvLyBieSBBT05fV1VDOk1DVUNMSy5QV1JfRFdOX1NSQworLy8KKy8vIElmIEkyU0NMS0NUTC5XQ0xLX1BIQVNFID0gMSwgRHVhbCBwaGFzZS4KKy8vIEVhY2ggcGhhc2Ugb24gV0NMSyAoNTAlIGR1dHkgY3ljbGUpIGlzIFdESVZbOTowXSAodW5zaWduZWQsIFsxLTEwMjNdKSBCQ0xLCisvLyBwZXJpb2RzLgorLy8KKy8vIFdDTEsgPSBNQ1VDTEsgLyBCRElWKigyKldESVZbOTowXSkgW0h6XQorLy8KKy8vIElmIEkyU0NMS0NUTC5XQ0xLX1BIQVNFID0gMiwgVXNlciBkZWZpbmVkLgorLy8gV0NMSyBpcyBoaWdoIFdESVZbNzowXSAodW5zaWduZWQsIFsxLTI1NV0pIEJDTEsgcGVyaW9kcyBhbmQgbG93IFdESVZbMTU6OF0KKy8vICh1bnNpZ25lZCwgWzEtMjU1XSkgQkNMSyBwZXJpb2RzLgorLy8KKy8vIFdDTEsgPSBNQ1VDTEsgLyAoQkRJViooV0RJVls3OjBdICsgV0RJVlsxNTo4XSkgW0h6XQorLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyU1dDTEtESVZfV0RJVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFBSQ01fSTJTV0NMS0RJVl9XRElWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUFJDTV9JMlNXQ0xLRElWX1dESVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19TV1JFU0VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gTUNVCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgUFJDTV9TV1JFU0VUX01DVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1NXUkVTRVRfTUNVX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fU1dSRVNFVF9NQ1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9TV1JFU0VUX01DVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19XQVJNUkVTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBXUl9UT19QSU5SRVNFVAorLy8KKy8vIDA6IE5vIGFjdGlvbgorLy8gMTogQSB3YXJtIHN5c3RlbSByZXNldCBldmVudCB0cmlnZ2VyZWQgYnkgdGhlIGJlbG93IGxpc3RlZCBzb3VyY2VzIHdpbGwKKy8vIHJlc3VsdCBpbiBhbiBlbXVsYXRlZCBwaW4gcmVzZXQuCisvLworLy8gV2FybSByZXNldCBzb3VyY2VzIGluY2x1ZGVkOgorLy8gSUNFUGljayBzeXNyZXNldAorLy8gU3lzdGVtIENQVSByZXNldCByZXF1ZXN0LCBDUFVfU0NTOkFJUkNSLlNZU1JFU0VUUkVRCisvLyBTeXN0ZW0gQ1BVIExvY2t1cAorLy8gV0RUIHRpbWVvdXQKKy8vCisvLyBBbiBhY3RpdmUgSUNFUGljayBibG9jayBzeXN0ZW0gcmVzZXQgd2lsbCBnYXRlIGFsbCBzb3VyY2VzIGV4Y2VwdCBJQ0VQaWNrCisvLyBzeXNyZXNldAorLy8KKy8vIFNXIGNhbiByZWFkIEFPTl9TWVNDVEw6UkVTRVRDVEwuUkVTRVRfU1JDIHRvIGZpbmQgdGhlIHNvdXJjZSBvZiB0aGUgbGFzdAorLy8gcmVzZXQgcmVzdWx0aW5nIGluIGEgZnVsbCBwb3dlciB1cCBzZXF1ZW5jZS4gV0FSTVJFU0VUIGluIHRoaXMgcmVnaXN0ZXIgaXMKKy8vIHNldCBpbiB0aGUgc2NlbmFyaW8gdGhhdCBXUl9UT19QSU5SRVNFVD0xIGFuZCBvbmUgb2YgdGhlIGFib3ZlIGxpc3RlZAorLy8gc291cmNlcyBpcyB0cmlnZ2VyZWQuCisjZGVmaW5lIFBSQ01fV0FSTVJFU0VUX1dSX1RPX1BJTlJFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9XQVJNUkVTRVRfV1JfVE9fUElOUkVTRVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUkNNX1dBUk1SRVNFVF9XUl9UT19QSU5SRVNFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFBSQ01fV0FSTVJFU0VUX1dSX1RPX1BJTlJFU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gTE9DS1VQX1NUQVQKKy8vCisvLworLy8gMDogTm8gcmVnaXN0cmVkIGV2ZW50CisvLyAxOiBBIHN5c3RlbSBDUFUgTE9DS1VQIGV2ZW50IGhhcyBvY2N1cmVkIHNpbmNlIGxhc3QgU1cgY2xlYXIgb2YgdGhlCisvLyByZWdpc3Rlci4KKy8vCisvLyBBIHJlYWQgb2YgdGhpcyByZWdpc3RlciBjbGVhcnMgYm90aCAgV0RUX1NUQVQgYW5kIExPQ0tVUF9TVEFULgorI2RlZmluZSBQUkNNX1dBUk1SRVNFVF9MT0NLVVBfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fV0FSTVJFU0VUX0xPQ0tVUF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFJDTV9XQVJNUkVTRVRfTE9DS1VQX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1dBUk1SRVNFVF9MT0NLVVBfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFdEVF9TVEFUCisvLworLy8KKy8vIDA6IE5vIHJlZ2lzdGVyZWQgZXZlbnQKKy8vIDE6IEEgV0RUIGV2ZW50IGhhcyBvY2N1cmVkIHNpbmNlIGxhc3QgU1cgY2xlYXIgb2YgdGhlIHJlZ2lzdGVyLgorLy8KKy8vIEEgcmVhZCBvZiB0aGlzIHJlZ2lzdGVyIGNsZWFycyBib3RoIFdEVF9TVEFUIGFuZCBMT0NLVVBfU1RBVC4KKyNkZWZpbmUgUFJDTV9XQVJNUkVTRVRfV0RUX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1dBUk1SRVNFVF9XRFRfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fV0FSTVJFU0VUX1dEVF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9XQVJNUkVTRVRfV0RUX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRENUTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBQRVJJUEhfT04KKy8vCisvLyBQRVJJUEggUG93ZXIgZG9tYWluLgorLy8KKy8vIDA6IFBFUklQSCBwb3dlciBkb21haW4gaXMgcG93ZXJlZCBkb3duCisvLyAxOiBQRVJJUEggcG93ZXIgZG9tYWluIGlzIHBvd2VyZWQgdXAKKyNkZWZpbmUgUFJDTV9QRENUTDBfUEVSSVBIX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1BEQ1RMMF9QRVJJUEhfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fUERDVEwwX1BFUklQSF9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9QRENUTDBfUEVSSVBIX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBTRVJJQUxfT04KKy8vCisvLyBTRVJJQUwgUG93ZXIgZG9tYWluLgorLy8KKy8vIDA6IFNFUklBTCBwb3dlciBkb21haW4gaXMgcG93ZXJlZCBkb3duCisvLyAxOiBTRVJJQUwgcG93ZXIgZG9tYWluIGlzIHBvd2VyZWQgdXAKKyNkZWZpbmUgUFJDTV9QRENUTDBfU0VSSUFMX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1BEQ1RMMF9TRVJJQUxfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBSQ01fUERDVEwwX1NFUklBTF9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9QRENUTDBfU0VSSUFMX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRkNfT04KKy8vCisvLworLy8gMDogUkZDIHBvd2VyIGRvbWFpbiBwb3dlcmVkIG9mZiBpZiBhbHNvIFBEQ1RMMS5SRkNfT04gPSAwCisvLyAxOiBSRkMgcG93ZXIgZG9tYWluIHBvd2VyZWQgb24KKyNkZWZpbmUgUFJDTV9QRENUTDBfUkZDX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEQ1RMMF9SRkNfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUERDVEwwX1JGQ19PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRENUTDBfUkZDX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRENUTDBSRkMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBPTgorLy8KKy8vIEFsaWFzIGZvciBQRENUTDAuUkZDX09OCisjZGVmaW5lIFBSQ01fUERDVEwwUkZDX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRENUTDBSRkNfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1BEQ1RMMFJGQ19PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERDVEwwUkZDX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fUERDVEwwU0VSSUFMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gT04KKy8vCisvLyBBbGlhcyBmb3IgUERDVEwwLlNFUklBTF9PTgorI2RlZmluZSBQUkNNX1BEQ1RMMFNFUklBTF9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERDVEwwU0VSSUFMX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRENUTDBTRVJJQUxfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEQ1RMMFNFUklBTF9PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEQ1RMMFBFUklQSAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIE9OCisvLworLy8gQWxpYXMgZm9yIFBEQ1RMMC5QRVJJUEhfT04KKyNkZWZpbmUgUFJDTV9QRENUTDBQRVJJUEhfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEQ1RMMFBFUklQSF9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUERDVEwwUEVSSVBIX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRENUTDBQRVJJUEhfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRFNUQVQwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gUEVSSVBIX09OCisvLworLy8gUEVSSVBIIFBvd2VyIGRvbWFpbi4KKy8vCisvLyAwOiBEb21haW4gbWF5IGJlIHBvd2VyZWQgZG93bgorLy8gMTogRG9tYWluIHBvd2VyZWQgdXAgKGd1YXJhbnRlZWQpCisjZGVmaW5lIFBSQ01fUERTVEFUMF9QRVJJUEhfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9QRFNUQVQwX1BFUklQSF9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUkNNX1BEU1RBVDBfUEVSSVBIX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFBSQ01fUERTVEFUMF9QRVJJUEhfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gU0VSSUFMX09OCisvLworLy8gU0VSSUFMIFBvd2VyIGRvbWFpbi4KKy8vCisvLyAwOiBEb21haW4gbWF5IGJlIHBvd2VyZWQgZG93bgorLy8gMTogRG9tYWluIHBvd2VyZWQgdXAgKGd1YXJhbnRlZWQpCisjZGVmaW5lIFBSQ01fUERTVEFUMF9TRVJJQUxfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9QRFNUQVQwX1NFUklBTF9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQUkNNX1BEU1RBVDBfU0VSSUFMX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fUERTVEFUMF9TRVJJQUxfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUkZDX09OCisvLworLy8gUkZDIFBvd2VyIGRvbWFpbgorLy8KKy8vIDA6IERvbWFpbiBtYXkgYmUgcG93ZXJlZCBkb3duCisvLyAxOiBEb21haW4gcG93ZXJlZCB1cCAoZ3VhcmFudGVlZCkKKyNkZWZpbmUgUFJDTV9QRFNUQVQwX1JGQ19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDBfUkZDX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUERTVEFUMF9SRkNfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRFNUQVQwX1JGQ19PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRFNUQVQwUkZDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gT04KKy8vCisvLyBBbGlhcyBmb3IgUERTVEFUMC5SRkNfT04KKyNkZWZpbmUgUFJDTV9QRFNUQVQwUkZDX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDBSRkNfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUERTVEFUMFJGQ19PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRFNUQVQwUkZDX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRFNUQVQwU0VSSUFMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gT04KKy8vCisvLyBBbGlhcyBmb3IgUERTVEFUMC5TRVJJQUxfT04KKyNkZWZpbmUgUFJDTV9QRFNUQVQwU0VSSUFMX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDBTRVJJQUxfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUERTVEFUMFNFUklBTF9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRFNUQVQwU0VSSUFMX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRFNUQVQwUEVSSVBICisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gT04KKy8vCisvLyBBbGlhcyBmb3IgUERTVEFUMC5QRVJJUEhfT04KKyNkZWZpbmUgUFJDTV9QRFNUQVQwUEVSSVBIX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDBQRVJJUEhfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUERTVEFUMFBFUklQSF9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRFNUQVQwUEVSSVBIX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRENUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFszXSBWSU1TX01PREUKKy8vCisvLworLy8gMDogVklNUyBwb3dlciBkb21haW4gaXMgb25seSBwb3dlcmVkIHdoZW4gQ1BVIHBvd2VyIGRvbWFpbiBpcyBwb3dlcmVkLgorLy8gMTogVklNUyBwb3dlciBkb21haW4gaXMgcG93ZXJlZCB3aGVuZXZlciB0aGUgQlVTIHBvd2VyIGRvbWFpbiBpcyBwb3dlcmVkLgorI2RlZmluZSBQUkNNX1BEQ1RMMV9WSU1TX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFBSQ01fUERDVEwxX1ZJTVNfTU9ERV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUFJDTV9QRENUTDFfVklNU19NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBQUkNNX1BEQ1RMMV9WSU1TX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFJGQ19PTgorLy8KKy8vCisvLyAwOiBSRkMgcG93ZXIgZG9tYWluIHBvd2VyZWQgb2ZmIGlmIGFsc28gUERDVEwwLlJGQ19PTiA9IDAKKy8vIDE6IFJGQyBwb3dlciBkb21haW4gcG93ZXJlZCBvbgorLy8KKy8vIEJpdCBzaGFsbCBiZSB1c2VkIGJ5IFJGQyBpbiBhdXRvbm9tdXMgbW9kZSBidXQgdGhlcmUgaXMgbm8gSFcgcmVzdHJpY3Rpb25zCisvLyBmb20gc3lzdGVtIENQVSB0byBhY2Nlc3MgdGhlIGJpdC4KKyNkZWZpbmUgUFJDTV9QRENUTDFfUkZDX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1BEQ1RMMV9SRkNfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fUERDVEwxX1JGQ19PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9QRENUTDFfUkZDX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBDUFVfT04KKy8vCisvLworLy8gMDogQ2F1c2VzIGEgcG93ZXIgZG93biBvZiB0aGUgQ1BVIHBvd2VyIGRvbWFpbiB3aGVuIHN5c3RlbSBDUFUgaW5kaWNhdGVzIGl0CisvLyBpcyBpZGxlLgorLy8gMTogSW5pdGlhdGVzIHBvd2VyLW9uIG9mIHRoZSBDUFUgcG93ZXIgZG9tYWluLgorLy8KKy8vIFRoaXMgYml0IGlzIGF1dG9tYXRpY2FsbHkgc2V0IGJ5IGEgV0lDIHBvd2VyLW9uIGV2ZW50LgorI2RlZmluZSBQUkNNX1BEQ1RMMV9DUFVfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fUERDVEwxX0NQVV9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFJDTV9QRENUTDFfQ1BVX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1BEQ1RMMV9DUFVfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEQ1RMMUNQVQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIE9OCisvLworLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgUERDVEwxLkNQVV9PTgorI2RlZmluZSBQUkNNX1BEQ1RMMUNQVV9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERDVEwxQ1BVX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRENUTDFDUFVfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEQ1RMMUNQVV9PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEQ1RMMVJGQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIE9OCisvLworLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgUERDVEwxLlJGQ19PTgorI2RlZmluZSBQUkNNX1BEQ1RMMVJGQ19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERDVEwxUkZDX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRENUTDFSRkNfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEQ1RMMVJGQ19PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEQ1RMMVZJTVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBPTgorLy8KKy8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIFBEQ1RMMS5WSU1TX01PREUKKyNkZWZpbmUgUFJDTV9QRENUTDFWSU1TX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEQ1RMMVZJTVNfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUERDVEwxVklNU19PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRENUTDFWSU1TX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRFNUQVQxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNF0gQlVTX09OCisvLworLy8KKy8vIDA6IEJVUyBkb21haW4gbm90IGFjY2Vzc2libGUKKy8vIDE6IEJVUyBkb21haW4gaXMgY3VycmVudGx5IGFjY2Vzc2libGUKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX0JVU19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBQUkNNX1BEU1RBVDFfQlVTX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFBSQ01fUERTVEFUMV9CVVNfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX0JVU19PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBWSU1TX01PREUKKy8vCisvLworLy8gMDogVklNUyBkb21haW4gbm90IGFjY2Vzc2libGUKKy8vIDE6IFZJTVMgZG9tYWluIGlzIGN1cnJlbnRseSBhY2Nlc3NpYmxlCisjZGVmaW5lIFBSQ01fUERTVEFUMV9WSU1TX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX1ZJTVNfTU9ERV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBQUkNNX1BEU1RBVDFfVklNU19NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFBSQ01fUERTVEFUMV9WSU1TX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gUkZDX09OCisvLworLy8KKy8vIDA6IFJGQyBkb21haW4gbm90IGFjY2Vzc2libGUKKy8vIDE6IFJGQyBkb21haW4gaXMgY3VycmVudGx5IGFjY2Vzc2libGUKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX1JGQ19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1BEU1RBVDFfUkZDX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fUERTVEFUMV9SRkNfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX1JGQ19PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBDUFVfT04KKy8vCisvLworLy8gMDogQ1BVIGFuZCBCVVMgZG9tYWluIG5vdCBhY2Nlc3NpYmxlCisvLyAxOiBDUFUgYW5kIEJVUyBkb21haW5zIGFyZSBib3RoIGN1cnJlbnRseSBhY2Nlc3NpYmxlCisjZGVmaW5lIFBSQ01fUERTVEFUMV9DUFVfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX0NQVV9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQUkNNX1BEU1RBVDFfQ1BVX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fUERTVEFUMV9DUFVfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fUERTVEFUMUJVUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIE9OCisvLworLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgUERTVEFUMS5CVVNfT04KKyNkZWZpbmUgUFJDTV9QRFNUQVQxQlVTX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDFCVVNfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUERTVEFUMUJVU19PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRFNUQVQxQlVTX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRFNUQVQxUkZDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gT04KKy8vCisvLyBUaGlzIGlzIGFuIGFsaWFzIGZvciBQRFNUQVQxLlJGQ19PTgorI2RlZmluZSBQUkNNX1BEU1RBVDFSRkNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERTVEFUMVJGQ19PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRFNUQVQxUkZDX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDFSRkNfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEU1RBVDFDUFUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBPTgorLy8KKy8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIFBEU1RBVDEuQ1BVX09OCisjZGVmaW5lIFBSQ01fUERTVEFUMUNQVV9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRFNUQVQxQ1BVX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1BEU1RBVDFDUFVfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERTVEFUMUNQVV9PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fUERTVEFUMVZJTVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBPTgorLy8KKy8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIFBEU1RBVDEuVklNU19NT0RFCisjZGVmaW5lIFBSQ01fUERTVEFUMVZJTVNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRFNUQVQxVklNU19PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1BEU1RBVDFWSU1TX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERTVEFUMVZJTVNfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fUkZDTU9ERVNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsyOjBdIENVUlIKKy8vCisvLyBXcml0dGVuIGJ5IE1DVSAtIE91dHB1dHMgdG8gUkZDLiBPbmx5IG1vZGVzIHBlcm1pdHRlZCBieSBSRkNNT0RFSFdPUFQuQVZBSUwKKy8vIGFyZSB3cml0ZWFibGUuCisvLyBFTlVNczoKKy8vIE1PREU3ICAgICAgICAgICAgICAgICAgICBTZWxlY3QgTW9kZSA3CisvLyBNT0RFNiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IE1vZGUgNgorLy8gTU9ERTUgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBNb2RlIDUKKy8vIE1PREU0ICAgICAgICAgICAgICAgICAgICBTZWxlY3QgTW9kZSA0CisvLyBNT0RFMyAgICAgICAgICAgICAgICAgICAgU2VsZWN0IE1vZGUgMworLy8gTU9ERTIgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBNb2RlIDIKKy8vIE1PREUxICAgICAgICAgICAgICAgICAgICBTZWxlY3QgTW9kZSAxCisvLyBNT0RFMCAgICAgICAgICAgICAgICAgICAgU2VsZWN0IE1vZGUgMAorI2RlZmluZSBQUkNNX1JGQ01PREVTRUxfQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFBSQ01fUkZDTU9ERVNFTF9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgUFJDTV9SRkNNT0RFU0VMX0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1JGQ01PREVTRUxfQ1VSUl9NT0RFNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIFBSQ01fUkZDTU9ERVNFTF9DVVJSX01PREU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgUFJDTV9SRkNNT0RFU0VMX0NVUlJfTU9ERTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBQUkNNX1JGQ01PREVTRUxfQ1VSUl9NT0RFNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFBSQ01fUkZDTU9ERVNFTF9DVVJSX01PREUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUFJDTV9SRkNNT0RFU0VMX0NVUlJfTU9ERTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1JGQ01PREVTRUxfQ1VSUl9NT0RFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUkZDTU9ERVNFTF9DVVJSX01PREUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fUFdSUFJPRlNUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBWQUxVRQorLy8KKy8vIFNXIGNhbiB1c2UgdGhlc2UgYml0cyB0byB0aW1lc3RhbXAgdGhlIGFwcGxpY2F0aW9uLiBUaGVzZSBiaXRzIGFyZSBhbHNvCisvLyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgdGVzdHRhcCBhbmQgY2FuIHRodXMgYmUgdXNlZCBieSB0aGUgZW11bGF0b3IgdG8KKy8vIHByb2ZpbGUgaW4gcmVhbCB0aW1lLgorI2RlZmluZSBQUkNNX1BXUlBST0ZTVEFUX1ZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFBSQ01fUFdSUFJPRlNUQVRfVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgUFJDTV9QV1JQUk9GU1RBVF9WQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19SQU1SRVRFTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIFJGQworLy8KKy8vCisvLyAwOiBSZXRlbnRpb24gZm9yIFJGQyBTUkFNIGRpc2FibGVkCisvLyAxOiBSZXRlbnRpb24gZm9yIFJGQyBTUkFNIGVuYWJsZWQKKyNkZWZpbmUgUFJDTV9SQU1SRVRFTl9SRkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1JBTVJFVEVOX1JGQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fUkFNUkVURU5fUkZDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9SQU1SRVRFTl9SRkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICBbMTowXSBWSU1TCisvLworLy8KKy8vIDA6IE1lbW9yeSByZXRlbnRpb24gZGlzYWJsZWQKKy8vIDE6IE1lbW9yeSByZXRlbnRpb24gZW5hYmxlZAorLy8KKy8vIEJpdCAwOiBWSU1TX1RSQU0KKy8vIEJpdCAxOiBWSU1TX0NSQU0KKy8vCisvLyBMZWdhbCBtb2RlcyBkZXBlbmQgb24gc2V0dGluZ3MgaW4gVklNUzpDVEwuTU9ERQorLy8KKy8vIDAwOiBWSU1TOkNUTC5NT0RFIG11c3QgYmUgT0ZGIGJlZm9yZSBERUVQU0xFRVAgaXMgYXNzZXJ0ZWQgLSBtdXN0IGJlIHNldCB0bworLy8gQ0FDSEUgb3IgU1BMSVQgbW9kZSBhZnRlciB3YWtpbmcgdXAgYWdhaW4KKy8vIDAxOiBWSU1TOkNUTC5NT0RFIG11c3QgYmUgR1BSQU0gYmVmb3JlIERFRVBTTEVFUCBpcyBhc3NlcnRlZC4gTXVzdCByZW1haW4gaW4KKy8vIEdQUkFNIG1vZGUgYWZ0ZXIgd2FrZSB1cCwgYWx0ZXJuYXRpdmVseSBzZWxlY3QgT0ZGIG1vZGUgZmlyc3QgYW5kIHRoZW4gQ0FDSEUKKy8vIG9yIFNQSUxUIG1vZGUuCisvLyAxMDogSWxsZWdhbCBtb2RlCisvLyAxMTogTm8gcmVzdHJpY3Rpb25zCisjZGVmaW5lIFBSQ01fUkFNUkVURU5fVklNU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUFJDTV9SQU1SRVRFTl9WSU1TX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQUkNNX1JBTVJFVEVOX1ZJTVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fUFJDTV9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19yZmNfZGJlbGwuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3JmY19kYmVsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMzNiYzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19yZmNfZGJlbGwuaApAQCAtMCwwICsxLDE2NzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19yZmNfZGJlbGxfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfUkZDX0RCRUxMX0hfXworI2RlZmluZSBfX0hXX1JGQ19EQkVMTF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBSRkNfREJFTEwgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRG9vcmJlbGwgQ29tbWFuZCBSZWdpc3RlcgorI2RlZmluZSBSRkNfREJFTExfT19DTURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIERvb3JiZWxsIENvbW1hbmQgU3RhdHVzIFJlZ2lzdGVyCisjZGVmaW5lIFJGQ19EQkVMTF9PX0NNRFNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gSW50ZXJydXB0IEZsYWdzIEZyb20gUkYgSGFyZHdhcmUgTW9kdWxlcworI2RlZmluZSBSRkNfREJFTExfT19SRkhXSUZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIEludGVycnVwdCBFbmFibGUgRm9yIFJGIEhhcmR3YXJlIE1vZHVsZXMKKyNkZWZpbmUgUkZDX0RCRUxMX09fUkZIV0lFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBJbnRlcnJ1cHQgRmxhZ3MgRm9yIENvbW1hbmQgYW5kIFBhY2tldCBFbmdpbmUgR2VuZXJhdGVkIEludGVycnVwdHMKKyNkZWZpbmUgUkZDX0RCRUxMX09fUkZDUEVJRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBJbnRlcnJ1cHQgRW5hYmxlIEZvciBDb21tYW5kIGFuZCBQYWNrZXQgRW5naW5lIEdlbmVyYXRlZCBJbnRlcnJ1cHRzCisjZGVmaW5lIFJGQ19EQkVMTF9PX1JGQ1BFSUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gSW50ZXJydXB0IFZlY3RvciBTZWxlY3Rpb24gRm9yIENvbW1hbmQgYW5kIFBhY2tldCBFbmdpbmUgR2VuZXJhdGVkCisvLyBJbnRlcnJ1cHRzCisjZGVmaW5lIFJGQ19EQkVMTF9PX1JGQ1BFSVNMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gRG9vcmJlbGwgQ29tbWFuZCBBY2tub3dsZWRnZW1lbnQgSW50ZXJydXB0IEZsYWcKKyNkZWZpbmUgUkZDX0RCRUxMX09fUkZBQ0tJRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBSRiBDb3JlIEdlbmVyYWwgUHVycG9zZSBPdXRwdXQgQ29udHJvbAorI2RlZmluZSBSRkNfREJFTExfT19TWVNHUE9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUkZDX0RCRUxMX09fQ01EUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENNRAorLy8KKy8vIENvbW1hbmQgcmVnaXN0ZXIuIFJhaXNlcyBhbiBpbnRlcnJ1cHQgdG8gdGhlIENvbW1hbmQgYW5kIHBhY2tldCBlbmdpbmUgKENQRSkKKy8vIHVwb24gd3JpdGUuCisjZGVmaW5lIFJGQ19EQkVMTF9DTURSX0NNRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgUkZDX0RCRUxMX0NNRFJfQ01EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBSRkNfREJFTExfQ01EUl9DTURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUkZDX0RCRUxMX09fQ01EU1RBCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RBVAorLy8KKy8vIFN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIHVzZWQKKyNkZWZpbmUgUkZDX0RCRUxMX0NNRFNUQV9TVEFUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBSRkNfREJFTExfQ01EU1RBX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFJGQ19EQkVMTF9DTURTVEFfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfREJFTExfT19SRkhXSUZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxOV0gUkFUQ0g3CisvLworLy8gUmFkaW8gdGltZXIgY2hhbm5lbCA3IGludGVycnVwdCBmbGFnLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZQorLy8gaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0g3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0g3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBSQVRDSDYKKy8vCisvLyBSYWRpbyB0aW1lciBjaGFubmVsIDYgaW50ZXJydXB0IGZsYWcuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lCisvLyBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENINl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0g2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIFJBVENINQorLy8KKy8vIFJhZGlvIHRpbWVyIGNoYW5uZWwgNSBpbnRlcnJ1cHQgZmxhZy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUKKy8vIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENINSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0g1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENINV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gUkFUQ0g0CisvLworLy8gUmFkaW8gdGltZXIgY2hhbm5lbCA0IGludGVycnVwdCBmbGFnLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZQorLy8gaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0g0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENINF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0g0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBSQVRDSDMKKy8vCisvLyBSYWRpbyB0aW1lciBjaGFubmVsIDMgaW50ZXJydXB0IGZsYWcuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lCisvLyBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0gzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIFJBVENIMgorLy8KKy8vIFJhZGlvIHRpbWVyIGNoYW5uZWwgMiBpbnRlcnJ1cHQgZmxhZy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUKKy8vIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0gyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gUkFUQ0gxCisvLworLy8gUmFkaW8gdGltZXIgY2hhbm5lbCAxIGludGVycnVwdCBmbGFnLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZQorLy8gaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0gxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0gxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBSQVRDSDAKKy8vCisvLyBSYWRpbyB0aW1lciBjaGFubmVsIDAgaW50ZXJydXB0IGZsYWcuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lCisvLyBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0gwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIFJGRVNPRlQyCisvLworLy8gUkYgZW5naW5lIHNvZnR3YXJlIGRlZmluZWQgaW50ZXJydXB0IDIgZmxhZy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZQorLy8gdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JGRVNPRlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkZFU09GVDJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SRkVTT0ZUMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JGRVNPRlQyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gUkZFU09GVDEKKy8vCisvLyBSRiBlbmdpbmUgc29mdHdhcmUgZGVmaW5lZCBpbnRlcnJ1cHQgMSBmbGFnLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlCisvLyB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkZFU09GVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SRkVTT0ZUMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JGRVNPRlQxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkZFU09GVDFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBSRkVTT0ZUMAorLy8KKy8vIFJGIGVuZ2luZSBzb2Z0d2FyZSBkZWZpbmVkIGludGVycnVwdCAwIGZsYWcuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUKKy8vIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SRkVTT0ZUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JGRVNPRlQwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkZFU09GVDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SRkVTT0ZUMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFJGRURPTkUKKy8vCisvLyBSRiBlbmdpbmUgY29tbWFuZCBkb25lIGludGVycnVwdCBmbGFnLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvCisvLyBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkZFRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SRkVET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JGRURPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkZFRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs2XSBUUkNUSworLy8KKy8vIERlYnVnIHRyYWNlciBzeXN0ZW0gdGljayBpbnRlcnJ1cHQgZmxhZy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0bworLy8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1RSQ1RLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfVFJDVEtfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19UUkNUS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1RSQ1RLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gTURNU09GVAorLy8KKy8vIE1vZGVtIHN5bmNocm9uaXphdGlvbiB3b3JkIGRldGVjdGlvbiBpbnRlcnJ1cHQgZmxhZy4gVGhpcyBpbnRlcnJ1cHQgd2lsbCBiZQorLy8gcmFpc2VkIGJ5IG1vZGVtIHdoZW4gdGhlIHN5bmNocm9uaXphdGlvbiB3b3JkIGlzIHJlY2VpdmVkLiBUaGUgQ1BFIG1heQorLy8gZGVjaWRlIHRvIHJlamVjdCB0aGUgcGFja2V0IGJhc2VkIG9uIGl0cyBoZWFkZXIgKHByb3RvY29sIHNwZWNpZmljKS4gV3JpdGUKKy8vIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETVNPRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfTURNU09GVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19NRE1TT0ZUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETVNPRlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gTURNT1VUCisvLworLy8gTW9kZW0gRklGTyBvdXRwdXQgaW50ZXJydXB0IGZsYWcuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcworLy8gbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19NRE1PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETU9VVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfTURNT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19NRE1PVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIE1ETUlOCisvLworLy8gTW9kZW0gRklGTyBpbnB1dCBpbnRlcnJ1cHQgZmxhZy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzCisvLyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfTURNSU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19NRE1JTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETUlOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gTURNRE9ORQorLy8KKy8vIE1vZGVtIGNvbW1hbmQgZG9uZSBpbnRlcnJ1cHQgZmxhZy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUKKy8vIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETURPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfTURNRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19NRE1ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETURPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gRlNDQQorLy8KKy8vIEZyZXF1ZW5jeSBzeW50aGVzaXplciBjYWxpYnJhdGlvbiBhY2NlbGVyYXRvciBpbnRlcnJ1cHQgZmxhZy4gV3JpdGUgemVybyB0bworLy8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX0ZTQ0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfRlNDQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19GU0NBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX0ZTQ0FfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfREJFTExfT19SRkhXSUVOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxOV0gUkFUQ0g3CisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5SQVRDSDcuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENINyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gUkFUQ0g2CisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5SQVRDSDYuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENINiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENINl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gUkFUQ0g1CisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5SQVRDSDUuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENINSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENINV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gUkFUQ0g0CisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5SQVRDSDQuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENINCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENINF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gUkFUQ0gzCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5SQVRDSDMuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gUkFUQ0gyCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5SQVRDSDIuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gUkFUQ0gxCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5SQVRDSDEuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gUkFUQ0gwCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5SQVRDSDAuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gUkZFU09GVDIKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLlJGRVNPRlQyLgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SRkVTT0ZUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JGRVNPRlQyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkZFU09GVDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SRkVTT0ZUMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIFJGRVNPRlQxCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5SRkVTT0ZUMS4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkZFU09GVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SRkVTT0ZUMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JGRVNPRlQxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkZFU09GVDFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBSRkVTT0ZUMAorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGSFdJRkcuUkZFU09GVDAuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JGRVNPRlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkZFU09GVDBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SRkVTT0ZUMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JGRVNPRlQwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gUkZFRE9ORQorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGSFdJRkcuUkZFRE9ORS4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkZFRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SRkVET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JGRURPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkZFRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs2XSBUUkNUSworLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGSFdJRkcuVFJDVEsuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1RSQ1RLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fVFJDVEtfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9UUkNUS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1RSQ1RLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gTURNU09GVAorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGSFdJRkcuTURNU09GVC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNU09GVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9NRE1TT0ZUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX01ETVNPRlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNU09GVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBNRE1PVVQKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLk1ETU9VVC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9NRE1PVVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX01ETU9VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBNRE1JTgorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGSFdJRkcuTURNSU4uCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX01ETUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNSU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9NRE1JTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX01ETUlOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gTURNRE9ORQorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGSFdJRkcuTURNRE9ORS4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9NRE1ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX01ETURPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBGU0NBCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5GU0NBLgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9GU0NBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX0ZTQ0FfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fRlNDQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9GU0NBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUkZDX0RCRUxMX09fUkZDUEVJRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBJTlRFUk5BTF9FUlJPUgorLy8KKy8vIEludGVycnVwdCBmbGFnIDMxLiBUaGUgY29tbWFuZCBhbmQgcGFja2V0IGVuZ2luZSAoQ1BFKSBoYXMgb2JzZXJ2ZWQgYW4KKy8vIHVuZXhwZWN0ZWQgZXJyb3IuIEEgcmVzZXQgb2YgdGhlIENQRSBpcyBuZWVkZWQuIFRoaXMgY2FuIGJlIGRvbmUgYnkKKy8vIHN3aXRjaGluZyB0aGUgUkYgQ29yZSBwb3dlciBkb21haW4gb2ZmIGFuZCBvbiBpbiBQUkNNOlBEQ1RMMVJGQy4gV3JpdGUgemVybworLy8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JTlRFUk5BTF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lOVEVSTkFMX0VSUk9SX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSU5URVJOQUxfRVJST1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JTlRFUk5BTF9FUlJPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gQk9PVF9ET05FCisvLworLy8gSW50ZXJydXB0IGZsYWcgMzAuIFRoZSBjb21tYW5kIGFuZCBwYWNrZXQgZW5naW5lIChDUEUpIGJvb3QgaXMgZmluaXNoZWQuCisvLyBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfQk9PVF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19CT09UX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0JPT1RfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfQk9PVF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIE1PRFVMRVNfVU5MT0NLRUQKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAyOS4gQXMgcGFydCBvZiBjb21tYW5kIGFuZCBwYWNrZXQgZW5naW5lIChDUEUpIGJvb3QgcHJvY2VzcywKKy8vIGl0IGhhcyBvcGVuZWQgYWNjZXNzIHRvIFJGIENvcmUgbW9kdWxlcyBhbmQgbWVtb3JpZXMuIFdyaXRlIHplcm8gdG8gY2xlYXIKKy8vIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfTU9EVUxFU19VTkxPQ0tFRCAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19NT0RVTEVTX1VOTE9DS0VEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX01PRFVMRVNfVU5MT0NLRURfTSAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfTU9EVUxFU19VTkxPQ0tFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIFNZTlRIX05PX0xPQ0sKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAyOC4gVGhlIHBoYXNlLWxvY2tlZCBsb29wIGluIGZyZXF1ZW5jeSBzeW50aGVzaXplciBoYXMKKy8vIHJlcG9ydGVkIGxvc3Mgb2YgbG9jay4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1NZTlRIX05PX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfU1lOVEhfTk9fTE9DS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19TWU5USF9OT19MT0NLX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1NZTlRIX05PX0xPQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBJUlEyNworLy8KKy8vIEludGVycnVwdCBmbGFnIDI3LiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlEyN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIFJYX0FCT1JURUQKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAyNi4gUGFja2V0IHJlY2VwdGlvbiBzdG9wcGVkIGJlZm9yZSBwYWNrZXQgd2FzIGRvbmUuIFdyaXRlCisvLyB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQUJPUlRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9BQk9SVEVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0FCT1JURURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQUJPUlRFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIFJYX05fREFUQV9XUklUVEVOCisvLworLy8gSW50ZXJydXB0IGZsYWcgMjUuIFNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBwYXJ0aWFsIHJlYWQgUngKKy8vIGJ1ZmZlci4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX05fREFUQV9XUklUVEVOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfTl9EQVRBX1dSSVRURU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9OX0RBVEFfV1JJVFRFTl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX05fREFUQV9XUklUVEVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBSWF9EQVRBX1dSSVRURU4KKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAyNC4gRGF0YSB3cml0dGVuIHRvIHBhcnRpYWwgcmVhZCBSeCBidWZmZXIuIFdyaXRlIHplcm8gdG8KKy8vIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfREFUQV9XUklUVEVOICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9EQVRBX1dSSVRURU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0RBVEFfV1JJVFRFTl9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfREFUQV9XUklUVEVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIFJYX0VOVFJZX0RPTkUKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAyMy4gUnggcXVldWUgZGF0YSBlbnRyeSBjaGFuZ2luZyBzdGF0ZSB0byBmaW5pc2hlZC4gIFdyaXRlCisvLyB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfRU5UUllfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9FTlRSWV9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0VOVFJZX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfRU5UUllfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIFJYX0JVRl9GVUxMCisvLworLy8gSW50ZXJydXB0IGZsYWcgMjIuIFBhY2tldCByZWNlaXZlZCB0aGF0IGRpZCBub3QgZml0IGluIFJ4IHF1ZXVlLiBCTEUgbW9kZToKKy8vIFBhY2tldCByZWNlaXZlZCB0aGF0IGRpZCBub3QgZml0IGluIHRoZSBSeCBxdWV1ZS4gSUVFRSA4MDIuMTUuNCBtb2RlOiBGcmFtZQorLy8gcmVjZWl2ZWQgdGhhdCBkaWQgbm90IGZpdCBpbiB0aGUgUnggcXVldWUuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUKKy8vIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQlVGX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9CVUZfRlVMTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0JVRl9GVUxMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQlVGX0ZVTExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIFJYX0NUUkxfQUNLCisvLworLy8gSW50ZXJydXB0IGZsYWcgMjEuIEJMRSBtb2RlIG9ubHk6IExMIGNvbnRyb2wgcGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIE9LLAorLy8gbm90IHRvIGJlIGlnbm9yZWQsIHRoZW4gYWNrbm93bGVkZ2VtZW50IHNlbnQuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4KKy8vIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQ1RSTF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9DVFJMX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0NUUkxfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQ1RSTF9BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIFJYX0NUUkwKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAyMC4gQkxFIG1vZGUgb25seTogTEwgY29udHJvbCBwYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgT0ssCisvLyBub3QgdG8gYmUgaWdub3JlZC4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQ1RSTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9DVFJMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0NUUkxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBSWF9FTVBUWQorLy8KKy8vIEludGVycnVwdCBmbGFnIDE5LiBCTEUgbW9kZSBvbmx5OiBQYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgT0ssIG5vdCB0byBiZQorLy8gaWdub3JlZCwgbm8gcGF5bG9hZC4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0VNUFRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfRU1QVFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9FTVBUWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0VNUFRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBSWF9JR05PUkVECisvLworLy8gSW50ZXJydXB0IGZsYWcgMTguIFBhY2tldCByZWNlaXZlZCwgYnV0IGNhbiBiZSBpZ25vcmVkLiBCTEUgbW9kZTogUGFja2V0CisvLyByZWNlaXZlZCB3aXRoIENSQyBPSywgYnV0IHRvIGJlIGlnbm9yZWQuIElFRUUgODAyLjE1LjQgbW9kZTogRnJhbWUgcmVjZWl2ZWQKKy8vIHdpdGggaWdub3JlIGZsYWcgc2V0LiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfSUdOT1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9JR05PUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0lHTk9SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfSUdOT1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIFJYX05PSworLy8KKy8vIEludGVycnVwdCBmbGFnIDE3LiBQYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IuIEJMRSBtb2RlOiBQYWNrZXQgcmVjZWl2ZWQKKy8vIHdpdGggQ1JDIGVycm9yLiBJRUVFIDgwMi4xNS40IG1vZGU6IEZyYW1lIHJlY2VpdmVkIHdpdGggQ1JDIGVycm9yLiBXcml0ZQorLy8gemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX05PSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfTk9LX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9OT0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX05PS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBSWF9PSworLy8KKy8vIEludGVycnVwdCBmbGFnIDE2LiBQYWNrZXQgcmVjZWl2ZWQgY29ycmVjdGx5LiBCTEUgbW9kZTogUGFja2V0IHJlY2VpdmVkIHdpdGgKKy8vIENSQyBPSywgcGF5bG9hZCwgYW5kIG5vdCB0byBiZSBpZ25vcmVkLiBJRUVFIDgwMi4xNS40IG1vZGU6IEZyYW1lIHJlY2VpdmVkCisvLyB3aXRoIENSQyBPSy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX09LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfT0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9PS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX09LX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBJUlExNQorLy8KKy8vIEludGVycnVwdCBmbGFnIDE1LiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlExNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIElSUTE0CisvLworLy8gSW50ZXJydXB0IGZsYWcgMTQuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlExNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlExNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gSVJRMTMKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAxMy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlExM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBJUlExMgorLy8KKy8vIEludGVycnVwdCBmbGFnIDEyLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlExMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIFRYX0JVRkZFUl9DSEFOR0VECisvLworLy8gSW50ZXJydXB0IGZsYWcgMTEuIEJMRSBtb2RlIG9ubHk6IEEgYnVmZmVyIGNoYW5nZSBpcyBjb21wbGV0ZSBhZnRlcgorLy8gQ01EX0JMRV9BRFZfUEFZTE9BRC4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0JVRkZFUl9DSEFOR0VEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQlVGRkVSX0NIQU5HRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9CVUZGRVJfQ0hBTkdFRF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0JVRkZFUl9DSEFOR0VEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBUWF9FTlRSWV9ET05FCisvLworLy8gSW50ZXJydXB0IGZsYWcgMTAuIFR4IHF1ZXVlIGRhdGEgZW50cnkgc3RhdGUgY2hhbmdlZCB0byBmaW5pc2hlZC4gV3JpdGUgemVybworLy8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9FTlRSWV9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0VOVFJZX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfRU5UUllfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9FTlRSWV9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gVFhfUkVUUkFOUworLy8KKy8vIEludGVycnVwdCBmbGFnIDkuIEJMRSBtb2RlIG9ubHk6IFBhY2tldCByZXRyYW5zbWl0dGVkLiBXcml0ZSB6ZXJvIHRvIGNsZWFyCisvLyBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX1JFVFJBTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfUkVUUkFOU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9SRVRSQU5TX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX1JFVFJBTlNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBUWF9DVFJMX0FDS19BQ0sKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyA4LiBCTEUgbW9kZSBvbmx5OiBBY2tub3dsZWRnZW1lbnQgcmVjZWl2ZWQgb24gYSB0cmFuc21pdHRlZAorLy8gTEwgY29udHJvbCBwYWNrZXQsIGFuZCBhY2tub3dsZWRnZW1lbnQgdHJhbnNtaXR0ZWQgZm9yIHRoYXQgcGFja2V0LiBXcml0ZQorLy8gemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0NUUkxfQUNLX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQ1RSTF9BQ0tfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9DVFJMX0FDS19BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0NUUkxfQUNLX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBUWF9DVFJMX0FDSworLy8KKy8vIEludGVycnVwdCBmbGFnIDcuIEJMRSBtb2RlOiBBY2tub3dsZWRnZW1lbnQgcmVjZWl2ZWQgb24gYSB0cmFuc21pdHRlZCBMTAorLy8gY29udHJvbCBwYWNrZXQuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9DVFJMX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0NUUkxfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQ1RSTF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9DVFJMX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gVFhfQ1RSTAorLy8KKy8vIEludGVycnVwdCBmbGFnIDYuIEJMRSBtb2RlOiBUcmFuc21pdHRlZCBMTCBjb250cm9sIHBhY2tldC4gV3JpdGUgemVybyB0bworLy8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0NUUkxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQ1RSTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9DVFJMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gVFhfQUNLCisvLworLy8gSW50ZXJydXB0IGZsYWcgNS4gQkxFIG1vZGU6IEFja25vd2xlZGdlbWVudCByZWNlaXZlZCBvbiBhIHRyYW5zbWl0dGVkCisvLyBwYWNrZXQuIElFRUUgODAyLjE1LjQgbW9kZTogVHJhbnNtaXR0ZWQgYXV0b21hdGljIEFDSyBmcmFtZS4gV3JpdGUgemVybyB0bworLy8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gVFhfRE9ORQorLy8KKy8vIEludGVycnVwdCBmbGFnIDQuIFBhY2tldCB0cmFuc21pdHRlZC4gKEJMRSBtb2RlOiBBIHBhY2tldCBoYXMgYmVlbgorLy8gdHJhbnNtaXR0ZWQuKSAoSUVFRSA4MDIuMTUuNCBtb2RlOiBBIGZyYW1lIGhhcyBiZWVuIHRyYW5zbWl0dGVkKS4gV3JpdGUgemVybworLy8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gTEFTVF9GR19DT01NQU5EX0RPTkUKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAzLiBJRUVFIDgwMi4xNS40IG1vZGUgb25seTogVGhlIGxhc3QgZm9yZWdyb3VuZCByYWRpbworLy8gb3BlcmF0aW9uIGNvbW1hbmQgaW4gYSBjaGFpbiBvZiBjb21tYW5kcyBoYXMgZmluaXNoZWQuIFdyaXRlIHplcm8gdG8gY2xlYXIKKy8vIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfTEFTVF9GR19DT01NQU5EX0RPTkUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19MQVNUX0ZHX0NPTU1BTkRfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0xBU1RfRkdfQ09NTUFORF9ET05FX00gICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfTEFTVF9GR19DT01NQU5EX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEZHX0NPTU1BTkRfRE9ORQorLy8KKy8vIEludGVycnVwdCBmbGFnIDIuIElFRUUgODAyLjE1LjQgbW9kZSBvbmx5OiBBIGZvcmVncm91bmQgcmFkaW8gb3BlcmF0aW9uCisvLyBjb21tYW5kIGhhcyBmaW5pc2hlZC4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0ZHX0NPTU1BTkRfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfRkdfQ09NTUFORF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19GR19DT01NQU5EX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0ZHX0NPTU1BTkRfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBMQVNUX0NPTU1BTkRfRE9ORQorLy8KKy8vIEludGVycnVwdCBmbGFnIDEuIFRoZSBsYXN0IHJhZGlvIG9wZXJhdGlvbiBjb21tYW5kIGluIGEgY2hhaW4gb2YgY29tbWFuZHMKKy8vIGhhcyBmaW5pc2hlZC4gKElFRUUgODAyLjE1LjQgbW9kZTogVGhlIGxhc3QgYmFja2dyb3VuZCBsZXZlbCByYWRpbyBvcGVyYXRpb24KKy8vIGNvbW1hbmQgaW4gYSBjaGFpbiBvZiBjb21tYW5kcyBoYXMgZmluaXNoZWQuKSBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuCisvLyBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0xBU1RfQ09NTUFORF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfTEFTVF9DT01NQU5EX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19MQVNUX0NPTU1BTkRfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0xBU1RfQ09NTUFORF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBDT01NQU5EX0RPTkUKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAwLiBBIHJhZGlvIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQuIChJRUVFIDgwMi4xNS40IG1vZGU6IEEKKy8vIGJhY2tncm91bmQgbGV2ZWwgcmFkaW8gb3BlcmF0aW9uIGNvbW1hbmQgaGFzIGZpbmlzaGVkLikgV3JpdGUgemVybyB0byBjbGVhcgorLy8gZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19DT01NQU5EX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0NPTU1BTkRfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfQ09NTUFORF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19DT01NQU5EX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfREJFTExfT19SRkNQRUlFTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIElOVEVSTkFMX0VSUk9SCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuSU5URVJOQUxfRVJST1IuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JTlRFUk5BTF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lOVEVSTkFMX0VSUk9SX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSU5URVJOQUxfRVJST1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JTlRFUk5BTF9FUlJPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gQk9PVF9ET05FCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuQk9PVF9ET05FLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fQk9PVF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9CT09UX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0JPT1RfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fQk9PVF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIE1PRFVMRVNfVU5MT0NLRUQKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5NT0RVTEVTX1VOTE9DS0VELgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fTU9EVUxFU19VTkxPQ0tFRCAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9NT0RVTEVTX1VOTE9DS0VEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX01PRFVMRVNfVU5MT0NLRURfTSAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fTU9EVUxFU19VTkxPQ0tFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIFNZTlRIX05PX0xPQ0sKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5TWU5USF9OT19MT0NLLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fU1lOVEhfTk9fTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9TWU5USF9OT19MT0NLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1NZTlRIX05PX0xPQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fU1lOVEhfTk9fTE9DS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIElSUTI3CisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuSVJRMjcuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlEyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlEyN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gUlhfQUJPUlRFRAorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlJYX0FCT1JURUQuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9BQk9SVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0FCT1JURURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfQUJPUlRFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9BQk9SVEVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gUlhfTl9EQVRBX1dSSVRURU4KKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5SWF9OX0RBVEFfV1JJVFRFTi4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX05fREFUQV9XUklUVEVOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfTl9EQVRBX1dSSVRURU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9OX0RBVEFfV1JJVFRFTl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX05fREFUQV9XUklUVEVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBSWF9EQVRBX1dSSVRURU4KKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5SWF9EQVRBX1dSSVRURU4uCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9EQVRBX1dSSVRURU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0RBVEFfV1JJVFRFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfREFUQV9XUklUVEVOX00gICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9EQVRBX1dSSVRURU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gUlhfRU5UUllfRE9ORQorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlJYX0VOVFJZX0RPTkUuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9FTlRSWV9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0VOVFJZX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfRU5UUllfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9FTlRSWV9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gUlhfQlVGX0ZVTEwKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5SWF9CVUZfRlVMTC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0JVRl9GVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfQlVGX0ZVTExfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9CVUZfRlVMTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0JVRl9GVUxMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBSWF9DVFJMX0FDSworLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlJYX0NUUkxfQUNLLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfQ1RSTF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9DVFJMX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0NUUkxfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfQ1RSTF9BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIFJYX0NUUkwKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5SWF9DVFJMLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9DVFJMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0NUUkxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfQ1RSTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIFJYX0VNUFRZCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuUlhfRU1QVFkuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9FTVBUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0VNUFRZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfRU1QVFlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9FTVBUWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gUlhfSUdOT1JFRAorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlJYX0lHTk9SRUQuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9JR05PUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0lHTk9SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfSUdOT1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9JR05PUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gUlhfTk9LCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuUlhfTk9LLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfTk9LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9OT0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX05PS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfTk9LX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIFJYX09LCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuUlhfT0suCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9PSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX09LX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfT0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9PS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gSVJRMTUKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5JUlExNS4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlExNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBJUlExNAorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLklSUTE0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlExNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIElSUTEzCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuSVJRMTMuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlExMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlExM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gSVJRMTIKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5JUlExMi4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlExMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBUWF9CVUZGRVJfQ0hBTkdFRAorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlRYX0JVRkZFUl9DSEFOR0VELgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQlVGRkVSX0NIQU5HRUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9CVUZGRVJfQ0hBTkdFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0JVRkZFUl9DSEFOR0VEX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQlVGRkVSX0NIQU5HRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIFRYX0VOVFJZX0RPTkUKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5UWF9FTlRSWV9ET05FLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfRU5UUllfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9FTlRSWV9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0VOVFJZX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfRU5UUllfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFRYX1JFVFJBTlMKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5UWF9SRVRSQU5TLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfUkVUUkFOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9SRVRSQU5TX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX1JFVFJBTlNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfUkVUUkFOU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFRYX0NUUkxfQUNLX0FDSworLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlRYX0NUUkxfQUNLX0FDSy4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0NUUkxfQUNLX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQ1RSTF9BQ0tfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9DVFJMX0FDS19BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0NUUkxfQUNLX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBUWF9DVFJMX0FDSworLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlRYX0NUUkxfQUNLLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQ1RSTF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9DVFJMX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0NUUkxfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQ1RSTF9BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFRYX0NUUkwKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5UWF9DVFJMLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9DVFJMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0NUUkxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQ1RSTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFRYX0FDSworLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlRYX0FDSy4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBUWF9ET05FCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuVFhfRE9ORS4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBMQVNUX0ZHX0NPTU1BTkRfRE9ORQorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLkxBU1RfRkdfQ09NTUFORF9ET05FLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fTEFTVF9GR19DT01NQU5EX0RPTkUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9MQVNUX0ZHX0NPTU1BTkRfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0xBU1RfRkdfQ09NTUFORF9ET05FX00gICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fTEFTVF9GR19DT01NQU5EX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEZHX0NPTU1BTkRfRE9ORQorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLkZHX0NPTU1BTkRfRE9ORS4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0ZHX0NPTU1BTkRfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fRkdfQ09NTUFORF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9GR19DT01NQU5EX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0ZHX0NPTU1BTkRfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBMQVNUX0NPTU1BTkRfRE9ORQorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLkxBU1RfQ09NTUFORF9ET05FLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fTEFTVF9DT01NQU5EX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9MQVNUX0NPTU1BTkRfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0xBU1RfQ09NTUFORF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fTEFTVF9DT01NQU5EX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENPTU1BTkRfRE9ORQorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLkNPTU1BTkRfRE9ORS4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0NPTU1BTkRfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fQ09NTUFORF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9DT01NQU5EX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0NPTU1BTkRfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19EQkVMTF9PX1JGQ1BFSVNMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gSU5URVJOQUxfRVJST1IKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLklOVEVSTkFMX0VSUk9SIGludGVycnVwdAorLy8gc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lOVEVSTkFMX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSU5URVJOQUxfRVJST1JfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JTlRFUk5BTF9FUlJPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lOVEVSTkFMX0VSUk9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSU5URVJOQUxfRVJST1JfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JTlRFUk5BTF9FUlJPUl9DUEUwICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFszMF0gQk9PVF9ET05FCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5CT09UX0RPTkUgaW50ZXJydXB0IHNob3VsZAorLy8gdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfQk9PVF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9CT09UX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0JPT1RfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfQk9PVF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9CT09UX0RPTkVfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0JPT1RfRE9ORV9DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzI5XSBNT0RVTEVTX1VOTE9DS0VECisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5NT0RVTEVTX1VOTE9DS0VEIGludGVycnVwdAorLy8gc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX01PRFVMRVNfVU5MT0NLRUQgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTU9EVUxFU19VTkxPQ0tFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9NT0RVTEVTX1VOTE9DS0VEX00gICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX01PRFVMRVNfVU5MT0NLRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTU9EVUxFU19VTkxPQ0tFRF9DUEUxICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9NT0RVTEVTX1VOTE9DS0VEX0NQRTAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyOF0gU1lOVEhfTk9fTE9DSworLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuU1lOVEhfTk9fTE9DSyBpbnRlcnJ1cHQKKy8vIHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9TWU5USF9OT19MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1NZTlRIX05PX0xPQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfU1lOVEhfTk9fTE9DS19NICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9TWU5USF9OT19MT0NLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1NZTlRIX05PX0xPQ0tfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfU1lOVEhfTk9fTE9DS19DUEUwICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMjddIElSUTI3CisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5JUlEyNyBpbnRlcnJ1cHQgc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlEyN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMjdfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlEyN19DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyNl0gUlhfQUJPUlRFRAorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuUlhfQUJPUlRFRCBpbnRlcnJ1cHQgc2hvdWxkCisvLyB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9BQk9SVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0FCT1JURURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQUJPUlRFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9BQk9SVEVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0FCT1JURURfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQUJPUlRFRF9DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMjVdIFJYX05fREFUQV9XUklUVEVOCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5SWF9OX0RBVEFfV1JJVFRFTiBpbnRlcnJ1cHQKKy8vIHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9OX0RBVEFfV1JJVFRFTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX05fREFUQV9XUklUVEVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfTl9EQVRBX1dSSVRURU5fTSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9OX0RBVEFfV1JJVFRFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX05fREFUQV9XUklUVEVOX0NQRTEgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfTl9EQVRBX1dSSVRURU5fQ1BFMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMjRdIFJYX0RBVEFfV1JJVFRFTgorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuUlhfREFUQV9XUklUVEVOIGludGVycnVwdAorLy8gc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0RBVEFfV1JJVFRFTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfREFUQV9XUklUVEVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9EQVRBX1dSSVRURU5fTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0RBVEFfV1JJVFRFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfREFUQV9XUklUVEVOX0NQRTEgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9EQVRBX1dSSVRURU5fQ1BFMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyM10gUlhfRU5UUllfRE9ORQorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuUlhfRU5UUllfRE9ORSBpbnRlcnJ1cHQKKy8vIHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9FTlRSWV9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0VOVFJZX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfRU5UUllfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9FTlRSWV9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0VOVFJZX0RPTkVfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfRU5UUllfRE9ORV9DUEUwICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMjJdIFJYX0JVRl9GVUxMCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5SWF9CVUZfRlVMTCBpbnRlcnJ1cHQgc2hvdWxkCisvLyB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9CVUZfRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0JVRl9GVUxMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQlVGX0ZVTExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9CVUZfRlVMTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0JVRl9GVUxMX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQlVGX0ZVTExfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMjFdIFJYX0NUUkxfQUNLCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5SWF9DVFJMX0FDSyBpbnRlcnJ1cHQgc2hvdWxkCisvLyB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9DVFJMX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0NUUkxfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQ1RSTF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9DVFJMX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0NUUkxfQUNLX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQ1RSTF9BQ0tfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMjBdIFJYX0NUUkwKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlJYX0NUUkwgaW50ZXJydXB0IHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0NUUkxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQ1RSTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9DVFJMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0NUUkxfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQ1RSTF9DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTldIFJYX0VNUFRZCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5SWF9FTVBUWSBpbnRlcnJ1cHQgc2hvdWxkCisvLyB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9FTVBUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0VNUFRZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfRU1QVFlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9FTVBUWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0VNUFRZX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfRU1QVFlfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIFJYX0lHTk9SRUQKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlJYX0lHTk9SRUQgaW50ZXJydXB0IHNob3VsZAorLy8gdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfSUdOT1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9JR05PUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0lHTk9SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfSUdOT1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9JR05PUkVEX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0lHTk9SRURfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE3XSBSWF9OT0sKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlJYX05PSyBpbnRlcnJ1cHQgc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX05PSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfTk9LX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9OT0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX05PS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfTk9LX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9OT0tfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxNl0gUlhfT0sKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlJYX09LIGludGVycnVwdCBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfT0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9PS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX09LX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfT0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9PS19DUEUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX09LX0NQRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE1XSBJUlExNQorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuSVJRMTUgaW50ZXJydXB0IHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTE1X0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTVfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTRdIElSUTE0CisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5JUlExNCBpbnRlcnJ1cHQgc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTRfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExNF9DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxM10gSVJRMTMKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLklSUTEzIGludGVycnVwdCBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExM19DUEUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTEzX0NQRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzEyXSBJUlExMgorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuSVJRMTIgaW50ZXJydXB0IHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTEyX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTJfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTFdIFRYX0JVRkZFUl9DSEFOR0VECisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5UWF9CVUZGRVJfQ0hBTkdFRCBpbnRlcnJ1cHQKKy8vIHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9CVUZGRVJfQ0hBTkdFRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0JVRkZFUl9DSEFOR0VEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQlVGRkVSX0NIQU5HRURfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9CVUZGRVJfQ0hBTkdFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0JVRkZFUl9DSEFOR0VEX0NQRTEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQlVGRkVSX0NIQU5HRURfQ1BFMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTBdIFRYX0VOVFJZX0RPTkUKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlRYX0VOVFJZX0RPTkUgaW50ZXJydXB0CisvLyBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfRU5UUllfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9FTlRSWV9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0VOVFJZX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfRU5UUllfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9FTlRSWV9ET05FX0NQRTEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0VOVFJZX0RPTkVfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs5XSBUWF9SRVRSQU5TCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5UWF9SRVRSQU5TIGludGVycnVwdCBzaG91bGQKKy8vIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX1JFVFJBTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfUkVUUkFOU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9SRVRSQU5TX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX1JFVFJBTlNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfUkVUUkFOU19DUEUxICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9SRVRSQU5TX0NQRTAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOF0gVFhfQ1RSTF9BQ0tfQUNLCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5UWF9DVFJMX0FDS19BQ0sgaW50ZXJydXB0CisvLyBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTF9BQ0tfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMX0FDS19BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfQUNLX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTF9BQ0tfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMX0FDS19BQ0tfQ1BFMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfQUNLX0FDS19DUEUwICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs3XSBUWF9DVFJMX0FDSworLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuVFhfQ1RSTF9BQ0sgaW50ZXJydXB0IHNob3VsZAorLy8gdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTF9BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMX0FDS19DUEUxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfQUNLX0NQRTAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs2XSBUWF9DVFJMCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5UWF9DVFJMIGludGVycnVwdCBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs1XSBUWF9BQ0sKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlRYX0FDSyBpbnRlcnJ1cHQgc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQUNLX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9BQ0tfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNF0gVFhfRE9ORQorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuVFhfRE9ORSBpbnRlcnJ1cHQgc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfRE9ORV9DUEUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9ET05FX0NQRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gTEFTVF9GR19DT01NQU5EX0RPTkUKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLkxBU1RfRkdfQ09NTUFORF9ET05FCisvLyBpbnRlcnJ1cHQgc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0xBU1RfRkdfQ09NTUFORF9ET05FICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTEFTVF9GR19DT01NQU5EX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9MQVNUX0ZHX0NPTU1BTkRfRE9ORV9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0xBU1RfRkdfQ09NTUFORF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTEFTVF9GR19DT01NQU5EX0RPTkVfQ1BFMSAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9MQVNUX0ZHX0NPTU1BTkRfRE9ORV9DUEUwICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMl0gRkdfQ09NTUFORF9ET05FCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5GR19DT01NQU5EX0RPTkUgaW50ZXJydXB0CisvLyBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfRkdfQ09NTUFORF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9GR19DT01NQU5EX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0ZHX0NPTU1BTkRfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfRkdfQ09NTUFORF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9GR19DT01NQU5EX0RPTkVfQ1BFMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0ZHX0NPTU1BTkRfRE9ORV9DUEUwICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBMQVNUX0NPTU1BTkRfRE9ORQorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuTEFTVF9DT01NQU5EX0RPTkUgaW50ZXJydXB0CisvLyBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTEFTVF9DT01NQU5EX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9MQVNUX0NPTU1BTkRfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0xBU1RfQ09NTUFORF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTEFTVF9DT01NQU5EX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9MQVNUX0NPTU1BTkRfRE9ORV9DUEUxICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0xBU1RfQ09NTUFORF9ET05FX0NQRTAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBDT01NQU5EX0RPTkUKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLkNPTU1BTkRfRE9ORSBpbnRlcnJ1cHQgc2hvdWxkCisvLyB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9DT01NQU5EX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0NPTU1BTkRfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfQ09NTUFORF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9DT01NQU5EX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0NPTU1BTkRfRE9ORV9DUEUxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfQ09NTUFORF9ET05FX0NQRTAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUkZDX0RCRUxMX09fUkZBQ0tJRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBBQ0tGTEFHCisvLworLy8gSW50ZXJydXB0IGZsYWcgZm9yIENvbW1hbmQgQUNLCisjZGVmaW5lIFJGQ19EQkVMTF9SRkFDS0lGR19BQ0tGTEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQUNLSUZHX0FDS0ZMQUdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBSRkNfREJFTExfUkZBQ0tJRkdfQUNLRkxBR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkFDS0lGR19BQ0tGTEFHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfREJFTExfT19TWVNHUE9DVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE1OjEyXSBHUE9DVEwzCisvLworLy8gUkYgQ29yZSBHUE8gY29udHJvbCBiaXQgMy4gU2VsZWN0cyB3aGljaCBzaWduYWwgdG8gb3V0cHV0IG9uIHRoZSBSRiBDb3JlIEdQTworLy8gbGluZSAzLgorLy8gRU5VTXM6CisvLyBSQVRHUE8zICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDMKKy8vIFJBVEdQTzIgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMgorLy8gUkFUR1BPMSAgICAgICAgICAgICAgICAgIFJBVCBHUE8gbGluZSAxCisvLyBSQVRHUE8wICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDAKKy8vIFJGRUdQTzMgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMworLy8gUkZFR1BPMiAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAyCisvLyBSRkVHUE8xICAgICAgICAgICAgICAgICAgUkZFIEdQTyBsaW5lIDEKKy8vIFJGRUdQTzAgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMAorLy8gTUNFR1BPMyAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAzCisvLyBNQ0VHUE8yICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDIKKy8vIE1DRUdQTzEgICAgICAgICAgICAgICAgICBNQ0UgR1BPIGxpbmUgMQorLy8gTUNFR1BPMCAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAwCisvLyBDUEVHUE8zICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDMKKy8vIENQRUdQTzIgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMgorLy8gQ1BFR1BPMSAgICAgICAgICAgICAgICAgIENQRSBHUE8gbGluZSAxCisvLyBDUEVHUE8wICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX1JBVEdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfUkFUR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBFMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19SQVRHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEQwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX1JBVEdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwQzAwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfUkZFR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBCMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19SRkVHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEEwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX1JGRUdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTAwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfUkZFR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19NQ0VHUE8zICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDcwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX01DRUdQTzIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfTUNFR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA1MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19NQ0VHUE8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX0NQRUdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfQ1BFR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19DUEVHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX0NQRUdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogIFsxMTo4XSBHUE9DVEwyCisvLworLy8gUkYgQ29yZSBHUE8gY29udHJvbCBiaXQgMi4gU2VsZWN0cyB3aGljaCBzaWduYWwgdG8gb3V0cHV0IG9uIHRoZSBSRiBDb3JlIEdQTworLy8gbGluZSAyLgorLy8gRU5VTXM6CisvLyBSQVRHUE8zICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDMKKy8vIFJBVEdQTzIgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMgorLy8gUkFUR1BPMSAgICAgICAgICAgICAgICAgIFJBVCBHUE8gbGluZSAxCisvLyBSQVRHUE8wICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDAKKy8vIFJGRUdQTzMgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMworLy8gUkZFR1BPMiAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAyCisvLyBSRkVHUE8xICAgICAgICAgICAgICAgICAgUkZFIEdQTyBsaW5lIDEKKy8vIFJGRUdQTzAgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMAorLy8gTUNFR1BPMyAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAzCisvLyBNQ0VHUE8yICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDIKKy8vIE1DRUdQTzEgICAgICAgICAgICAgICAgICBNQ0UgR1BPIGxpbmUgMQorLy8gTUNFR1BPMCAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAwCisvLyBDUEVHUE8zICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDMKKy8vIENQRUdQTzIgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMgorLy8gQ1BFR1BPMSAgICAgICAgICAgICAgICAgIENQRSBHUE8gbGluZSAxCisvLyBDUEVHUE8wICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX1JBVEdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfUkFUR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRTAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9SQVRHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX1JBVEdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfUkZFR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQjAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9SRkVHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBBMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX1JGRUdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDkwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfUkZFR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9NQ0VHUE8zICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX01DRUdQTzIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfTUNFR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9NQ0VHUE8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX0NQRUdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfQ1BFR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9DUEVHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX0NQRUdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNzo0XSBHUE9DVEwxCisvLworLy8gUkYgQ29yZSBHUE8gY29udHJvbCBiaXQgMS4gU2VsZWN0cyB3aGljaCBzaWduYWwgdG8gb3V0cHV0IG9uIHRoZSBSRiBDb3JlIEdQTworLy8gbGluZSAxLgorLy8gRU5VTXM6CisvLyBSQVRHUE8zICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDMKKy8vIFJBVEdQTzIgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMgorLy8gUkFUR1BPMSAgICAgICAgICAgICAgICAgIFJBVCBHUE8gbGluZSAxCisvLyBSQVRHUE8wICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDAKKy8vIFJGRUdQTzMgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMworLy8gUkZFR1BPMiAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAyCisvLyBSRkVHUE8xICAgICAgICAgICAgICAgICAgUkZFIEdQTyBsaW5lIDEKKy8vIFJGRUdQTzAgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMAorLy8gTUNFR1BPMyAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAzCisvLyBNQ0VHUE8yICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDIKKy8vIE1DRUdQTzEgICAgICAgICAgICAgICAgICBNQ0UgR1BPIGxpbmUgMQorLy8gTUNFR1BPMCAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAwCisvLyBDUEVHUE8zICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDMKKy8vIENQRUdQTzIgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMgorLy8gQ1BFR1BPMSAgICAgICAgICAgICAgICAgIENQRSBHUE8gbGluZSAxCisvLyBDUEVHUE8wICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX1JBVEdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfUkFUR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEUwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9SQVRHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX1JBVEdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfUkZFR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEIwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9SRkVHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQTAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX1JGRUdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5MAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfUkZFR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9NQ0VHUE8zICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX01DRUdQTzIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfTUNFR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9NQ0VHUE8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX0NQRUdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfQ1BFR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9DUEVHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX0NQRUdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMzowXSBHUE9DVEwwCisvLworLy8gUkYgQ29yZSBHUE8gY29udHJvbCBiaXQgMC4gU2VsZWN0cyB3aGljaCBzaWduYWwgdG8gb3V0cHV0IG9uIHRoZSBSRiBDb3JlIEdQTworLy8gbGluZSAwLgorLy8gRU5VTXM6CisvLyBSQVRHUE8zICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDMKKy8vIFJBVEdQTzIgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMgorLy8gUkFUR1BPMSAgICAgICAgICAgICAgICAgIFJBVCBHUE8gbGluZSAxCisvLyBSQVRHUE8wICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDAKKy8vIFJGRUdQTzMgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMworLy8gUkZFR1BPMiAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAyCisvLyBSRkVHUE8xICAgICAgICAgICAgICAgICAgUkZFIEdQTyBsaW5lIDEKKy8vIFJGRUdQTzAgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMAorLy8gTUNFR1BPMyAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAzCisvLyBNQ0VHUE8yICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDIKKy8vIE1DRUdQTzEgICAgICAgICAgICAgICAgICBNQ0UgR1BPIGxpbmUgMQorLy8gTUNFR1BPMCAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAwCisvLyBDUEVHUE8zICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDMKKy8vIENQRUdQTzIgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMgorLy8gQ1BFR1BPMSAgICAgICAgICAgICAgICAgIENQRSBHUE8gbGluZSAxCisvLyBDUEVHUE8wICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX1JBVEdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfUkFUR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9SQVRHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX1JBVEdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfUkZFR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9SRkVHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX1JGRUdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfUkZFR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9NQ0VHUE8zICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX01DRUdQTzIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfTUNFR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9NQ0VHUE8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX0NQRUdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfQ1BFR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9DUEVHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX0NQRUdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisKKyNlbmRpZiAvLyBfX1JGQ19EQkVMTF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19yZmNfcHdyLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19yZmNfcHdyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE1Y2U2YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3JmY19wd3IuaApAQCAtMCwwICsxLDE1MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X3JmY19wd3JfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfUkZDX1BXUl9IX18KKyNkZWZpbmUgX19IV19SRkNfUFdSX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIFJGQ19QV1IgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gUkYgQ29yZSBQb3dlciBNYW5hZ2VtZW50IGFuZCBDbG9jayBFbmFibGUKKyNkZWZpbmUgUkZDX1BXUl9PX1BXTUNMS0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19QV1JfT19QV01DTEtFTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTBdIFJGQ1RSQworLy8KKy8vIEVuYWJsZSBjbG9jayB0byB0aGUgUkYgQ29yZSBUcmFjZXIgKFJGQ1RSQykgbW9kdWxlLgorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JGQ1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkZDVFJDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SRkNUUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JGQ1RSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIEZTQ0EKKy8vCisvLyBFbmFibGUgY2xvY2sgdG8gdGhlIEZyZXF1ZW5jeSBTeW50aGVzaXplciBDYWxpYnJhdGlvbiBBY2NlbGVyYXRvciAoRlNDQSkKKy8vIG1vZHVsZS4KKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9GU0NBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX0ZTQ0FfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fRlNDQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9GU0NBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBQSEEKKy8vCisvLyBFbmFibGUgY2xvY2sgdG8gdGhlIFBhY2tldCBIYW5kbGluZyBBY2NlbGVyYXRvciAoUEhBKSBtb2R1bGUuCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9QSEFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1BIQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUEhBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gUkFUCisvLworLy8gRW5hYmxlIGNsb2NrIHRvIHRoZSBSYWRpbyBUaW1lciAoUkFUKSBtb2R1bGUuCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gUkZFUkFNCisvLworLy8gRW5hYmxlIGNsb2NrIHRvIHRoZSBSRiBFbmdpbmUgUkFNIG1vZHVsZS4KKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SRkVSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JGRVJBTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkZFUkFNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SRkVSQU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBSRkUKKy8vCisvLyBFbmFibGUgY2xvY2sgdG8gdGhlIFJGIEVuZ2luZSAoUkZFKSBtb2R1bGUuCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SRkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JGRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gTURNUkFNCisvLworLy8gRW5hYmxlIGNsb2NrIHRvIHRoZSBNb2RlbSBSQU0gbW9kdWxlLgorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX01ETVJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fTURNUkFNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9NRE1SQU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX01ETVJBTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIE1ETQorLy8KKy8vIEVuYWJsZSBjbG9jayB0byB0aGUgTW9kZW0gKE1ETSkgbW9kdWxlLgorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX01ETSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fTURNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9NRE1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX01ETV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIENQRVJBTQorLy8KKy8vIEVuYWJsZSBjbG9jayB0byB0aGUgQ29tbWFuZCBhbmQgUGFja2V0IEVuZ2luZSAoQ1BFKSBSQU0gbW9kdWxlLiBBcyBwYXJ0IG9mCisvLyBSRiBDb3JlIGluaXRpYWxpemF0aW9uLCBzZXQgdGhpcyBiaXQgdG9nZXRoZXIgd2l0aCBDUEUgYml0IHRvIGVuYWJsZSBDUEUgdG8KKy8vIGJvb3QuCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fQ1BFUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9DUEVSQU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX0NQRVJBTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fQ1BFUkFNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQ1BFCisvLworLy8gRW5hYmxlIHByb2Nlc3NvciBjbG9jayAoaGNsaykgdG8gdGhlIENvbW1hbmQgYW5kIFBhY2tldCBFbmdpbmUgKENQRSkuIEFzCisvLyBwYXJ0IG9mIFJGIENvcmUgaW5pdGlhbGl6YXRpb24sIHNldCB0aGlzIGJpdCB0b2dldGhlciB3aXRoIENQRVJBTSBiaXQgdG8KKy8vIGVuYWJsZSBDUEUgdG8gYm9vdC4KKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9DUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX0NQRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fQ1BFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9DUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRkMKKy8vCisvLyBFbmFibGUgZXNzZW50aWFsIGNsb2NrcyBmb3IgdGhlIFJGIENvcmUgaW50ZXJmYWNlLiBUaGlzIGluY2x1ZGVzIHRoZQorLy8gaW50ZXJjb25uZWN0LCB0aGUgcmFkaW8gZG9vcmJlbGwgREJFTEwgY29tbWFuZCBpbnRlcmZhY2UsIHRoZSBwb3dlcgorLy8gbWFuYWdlbWVudCAoUFdSKSBjbG9jayBjb250cm9sIG1vZHVsZSwgYW5kIGJ1cyBjbG9jayAoc2NsaykgZm9yIHRoZSBDUEUuIFRvCisvLyByZW1vdmUgcG9zc2liaWxpdHkgb2YgbG9ja2luZyB5b3Vyc2VsZiBvdXQgZnJvbSB0aGUgUkYgQ29yZSwgdGhpcyBiaXQgY2FuCisvLyBub3QgYmUgY2xlYXJlZC4gSWYgeW91IG5lZWQgdG8gZGlzYWJsZSBhbGwgY2xvY2tzIHRvIHRoZSBSRiBDb3JlLCBzZWUgdGhlCisvLyBQUkNNOlJGQ0NMS0cuQ0xLX0VOIHJlZ2lzdGVyLgorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JGQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkZDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SRkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JGQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fUkZDX1BXUl9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19yZmNfcmF0LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19yZmNfcmF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJlZGU4NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3JmY19yYXQuaApAQCAtMCwwICsxLDE5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X3JmY19yYXRfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfUkZDX1JBVF9IX18KKyNkZWZpbmUgX19IV19SRkNfUkFUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIFJGQ19SQVQgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gUmFkaW8gVGltZXIgQ291bnRlciBWYWx1ZQorI2RlZmluZSBSRkNfUkFUX09fUkFUQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIFRpbWVyIENoYW5uZWwgMCBDYXB0dXJlL0NvbXBhcmUgUmVnaXN0ZXIKKyNkZWZpbmUgUkZDX1JBVF9PX1JBVENIMFZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorCisvLyBUaW1lciBDaGFubmVsIDEgQ2FwdHVyZS9Db21wYXJlIFJlZ2lzdGVyCisjZGVmaW5lIFJGQ19SQVRfT19SQVRDSDFWQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODQKKworLy8gVGltZXIgQ2hhbm5lbCAyIENhcHR1cmUvQ29tcGFyZSBSZWdpc3RlcgorI2RlZmluZSBSRkNfUkFUX09fUkFUQ0gyVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDg4CisKKy8vIFRpbWVyIENoYW5uZWwgMyBDYXB0dXJlL0NvbXBhcmUgUmVnaXN0ZXIKKyNkZWZpbmUgUkZDX1JBVF9PX1JBVENIM1ZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4QworCisvLyBUaW1lciBDaGFubmVsIDQgQ2FwdHVyZS9Db21wYXJlIFJlZ2lzdGVyCisjZGVmaW5lIFJGQ19SQVRfT19SQVRDSDRWQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOTAKKworLy8gVGltZXIgQ2hhbm5lbCA1IENhcHR1cmUvQ29tcGFyZSBSZWdpc3RlcgorI2RlZmluZSBSRkNfUkFUX09fUkFUQ0g1VkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDk0CisKKy8vIFRpbWVyIENoYW5uZWwgNiBDYXB0dXJlL0NvbXBhcmUgUmVnaXN0ZXIKKyNkZWZpbmUgUkZDX1JBVF9PX1JBVENINlZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5OAorCisvLyBUaW1lciBDaGFubmVsIDcgQ2FwdHVyZS9Db21wYXJlIFJlZ2lzdGVyCisjZGVmaW5lIFJGQ19SQVRfT19SQVRDSDdWQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOUMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfUkFUX09fUkFUQ05UCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ05UCisvLworLy8gQ291bnRlciB2YWx1ZS4gVGhpcyBpcyBub3Qgd3JpdGFibGUgd2hpbGUgcmFkaW8gdGltZXIgY291bnRlciBpcyBlbmFibGVkLgorI2RlZmluZSBSRkNfUkFUX1JBVENOVF9DTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFJGQ19SQVRfUkFUQ05UX0NOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUkZDX1JBVF9SQVRDTlRfQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19SQVRfT19SQVRDSDBWQUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUwKKy8vCisvLyBDYXB0dXJlL2NvbXBhcmUgdmFsdWUuIFRoZSBzeXN0ZW0gQ1BVIGNhbiBzYWZlbHkgcmVhZCB0aGlzIHJlZ2lzdGVyLCBidXQgaXQKKy8vIGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgQ1BFIEFQSSBjb21tYW5kcyB0byBjb25maWd1cmUgaXQgZm9yIGNvbXBhcmUgbW9kZS4KKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDBWQUxfVkFMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBSRkNfUkFUX1JBVENIMFZBTF9WQUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0gwVkFMX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfUkFUX09fUkFUQ0gxVkFMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkFMCisvLworLy8gQ2FwdHVyZS9jb21wYXJlIHZhbHVlLiBUaGUgc3lzdGVtIENQVSBjYW4gc2FmZWx5IHJlYWQgdGhpcyByZWdpc3RlciwgYnV0IGl0CisvLyBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIENQRSBBUEkgY29tbWFuZHMgdG8gY29uZmlndXJlIGl0IGZvciBjb21wYXJlIG1vZGUuCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0gxVkFMX1ZBTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDFWQUxfVkFMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBSRkNfUkFUX1JBVENIMVZBTF9WQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUkZDX1JBVF9PX1JBVENIMlZBTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFZBTAorLy8KKy8vIENhcHR1cmUvY29tcGFyZSB2YWx1ZS4gVGhlIHN5c3RlbSBDUFUgY2FuIHNhZmVseSByZWFkIHRoaXMgcmVnaXN0ZXIsIGJ1dCBpdAorLy8gaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBDUEUgQVBJIGNvbW1hbmRzIHRvIGNvbmZpZ3VyZSBpdCBmb3IgY29tcGFyZSBtb2RlLgorI2RlZmluZSBSRkNfUkFUX1JBVENIMlZBTF9WQUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0gyVkFMX1ZBTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDJWQUxfVkFMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19SQVRfT19SQVRDSDNWQUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUwKKy8vCisvLyBDYXB0dXJlL2NvbXBhcmUgdmFsdWUuIFRoZSBzeXN0ZW0gQ1BVIGNhbiBzYWZlbHkgcmVhZCB0aGlzIHJlZ2lzdGVyLCBidXQgaXQKKy8vIGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgQ1BFIEFQSSBjb21tYW5kcyB0byBjb25maWd1cmUgaXQgZm9yIGNvbXBhcmUgbW9kZS4KKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDNWQUxfVkFMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBSRkNfUkFUX1JBVENIM1ZBTF9WQUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0gzVkFMX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfUkFUX09fUkFUQ0g0VkFMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkFMCisvLworLy8gQ2FwdHVyZS9jb21wYXJlIHZhbHVlLiBUaGUgc3lzdGVtIENQVSBjYW4gc2FmZWx5IHJlYWQgdGhpcyByZWdpc3RlciwgYnV0IGl0CisvLyBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIENQRSBBUEkgY29tbWFuZHMgdG8gY29uZmlndXJlIGl0IGZvciBjb21wYXJlIG1vZGUuCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0g0VkFMX1ZBTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDRWQUxfVkFMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBSRkNfUkFUX1JBVENINFZBTF9WQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUkZDX1JBVF9PX1JBVENINVZBTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFZBTAorLy8KKy8vIENhcHR1cmUvY29tcGFyZSB2YWx1ZS4gVGhlIHN5c3RlbSBDUFUgY2FuIHNhZmVseSByZWFkIHRoaXMgcmVnaXN0ZXIsIGJ1dCBpdAorLy8gaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBDUEUgQVBJIGNvbW1hbmRzIHRvIGNvbmZpZ3VyZSBpdCBmb3IgY29tcGFyZSBtb2RlLgorI2RlZmluZSBSRkNfUkFUX1JBVENINVZBTF9WQUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0g1VkFMX1ZBTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDVWQUxfVkFMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19SQVRfT19SQVRDSDZWQUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUwKKy8vCisvLyBDYXB0dXJlL2NvbXBhcmUgdmFsdWUuIFRoZSBzeXN0ZW0gQ1BVIGNhbiBzYWZlbHkgcmVhZCB0aGlzIHJlZ2lzdGVyLCBidXQgaXQKKy8vIGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgQ1BFIEFQSSBjb21tYW5kcyB0byBjb25maWd1cmUgaXQgZm9yIGNvbXBhcmUgbW9kZS4KKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDZWQUxfVkFMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBSRkNfUkFUX1JBVENINlZBTF9WQUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0g2VkFMX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfUkFUX09fUkFUQ0g3VkFMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkFMCisvLworLy8gQ2FwdHVyZS9jb21wYXJlIHZhbHVlLiBUaGUgc3lzdGVtIENQVSBjYW4gc2FmZWx5IHJlYWQgdGhpcyByZWdpc3RlciwgYnV0IGl0CisvLyBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIENQRSBBUEkgY29tbWFuZHMgdG8gY29uZmlndXJlIGl0IGZvciBjb21wYXJlIG1vZGUuCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0g3VkFMX1ZBTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDdWQUxfVkFMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBSRkNfUkFUX1JBVENIN1ZBTF9WQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fUkZDX1JBVF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19zbXBoLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19zbXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwMjJmMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3NtcGguaApAQCAtMCwwICsxLDE0NTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19zbXBoX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX1NNUEhfSF9fCisjZGVmaW5lIF9fSFdfU01QSF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBTTVBIIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIE1DVSBTRU1BUEhPUkUgMAorI2RlZmluZSBTTVBIX09fU01QSDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIE1DVSBTRU1BUEhPUkUgMQorI2RlZmluZSBTTVBIX09fU01QSDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIE1DVSBTRU1BUEhPUkUgMgorI2RlZmluZSBTTVBIX09fU01QSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIE1DVSBTRU1BUEhPUkUgMworI2RlZmluZSBTTVBIX09fU01QSDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIE1DVSBTRU1BUEhPUkUgNAorI2RlZmluZSBTTVBIX09fU01QSDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIE1DVSBTRU1BUEhPUkUgNQorI2RlZmluZSBTTVBIX09fU01QSDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIE1DVSBTRU1BUEhPUkUgNgorI2RlZmluZSBTTVBIX09fU01QSDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIE1DVSBTRU1BUEhPUkUgNworI2RlZmluZSBTTVBIX09fU01QSDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIE1DVSBTRU1BUEhPUkUgOAorI2RlZmluZSBTTVBIX09fU01QSDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIE1DVSBTRU1BUEhPUkUgOQorI2RlZmluZSBTTVBIX09fU01QSDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIE1DVSBTRU1BUEhPUkUgMTAKKyNkZWZpbmUgU01QSF9PX1NNUEgxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorCisvLyBNQ1UgU0VNQVBIT1JFIDExCisjZGVmaW5lIFNNUEhfT19TTVBIMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8gTUNVIFNFTUFQSE9SRSAxMgorI2RlZmluZSBTTVBIX09fU01QSDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKy8vIE1DVSBTRU1BUEhPUkUgMTMKKyNkZWZpbmUgU01QSF9PX1NNUEgxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorCisvLyBNQ1UgU0VNQVBIT1JFIDE0CisjZGVmaW5lIFNNUEhfT19TTVBIMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKworLy8gTUNVIFNFTUFQSE9SRSAxNQorI2RlZmluZSBTTVBIX09fU01QSDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNDCisKKy8vIE1DVSBTRU1BUEhPUkUgMTYKKyNkZWZpbmUgU01QSF9PX1NNUEgxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorCisvLyBNQ1UgU0VNQVBIT1JFIDE3CisjZGVmaW5lIFNNUEhfT19TTVBIMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKworLy8gTUNVIFNFTUFQSE9SRSAxOAorI2RlZmluZSBTTVBIX09fU01QSDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4CisKKy8vIE1DVSBTRU1BUEhPUkUgMTkKKyNkZWZpbmUgU01QSF9PX1NNUEgxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0QworCisvLyBNQ1UgU0VNQVBIT1JFIDIwCisjZGVmaW5lIFNNUEhfT19TTVBIMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKworLy8gTUNVIFNFTUFQSE9SRSAyMQorI2RlZmluZSBTTVBIX09fU01QSDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisKKy8vIE1DVSBTRU1BUEhPUkUgMjIKKyNkZWZpbmUgU01QSF9PX1NNUEgyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorCisvLyBNQ1UgU0VNQVBIT1JFIDIzCisjZGVmaW5lIFNNUEhfT19TTVBIMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUMKKworLy8gTUNVIFNFTUFQSE9SRSAyNAorI2RlZmluZSBTTVBIX09fU01QSDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisKKy8vIE1DVSBTRU1BUEhPUkUgMjUKKyNkZWZpbmUgU01QSF9PX1NNUEgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAorCisvLyBNQ1UgU0VNQVBIT1JFIDI2CisjZGVmaW5lIFNNUEhfT19TTVBIMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKKworLy8gTUNVIFNFTUFQSE9SRSAyNworI2RlZmluZSBTTVBIX09fU01QSDI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisKKy8vIE1DVSBTRU1BUEhPUkUgMjgKKyNkZWZpbmUgU01QSF9PX1NNUEgyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorCisvLyBNQ1UgU0VNQVBIT1JFIDI5CisjZGVmaW5lIFNNUEhfT19TTVBIMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzQKKworLy8gTUNVIFNFTUFQSE9SRSAzMAorI2RlZmluZSBTTVBIX09fU01QSDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc4CisKKy8vIE1DVSBTRU1BUEhPUkUgMzEKKyNkZWZpbmUgU01QSF9PX1NNUEgzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3QworCisvLyBNQ1UgU0VNQVBIT1JFIDAgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUswICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorCisvLyBNQ1UgU0VNQVBIT1JFIDEgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwNAorCisvLyBNQ1UgU0VNQVBIT1JFIDIgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwOAorCisvLyBNQ1UgU0VNQVBIT1JFIDMgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUszICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwQworCisvLyBNQ1UgU0VNQVBIT1JFIDQgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUs0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgxMAorCisvLyBNQ1UgU0VNQVBIT1JFIDUgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUs1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgxNAorCisvLyBNQ1UgU0VNQVBIT1JFIDYgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUs2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgxOAorCisvLyBNQ1UgU0VNQVBIT1JFIDcgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUs3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgxQworCisvLyBNQ1UgU0VNQVBIT1JFIDggQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUs4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgyMAorCisvLyBNQ1UgU0VNQVBIT1JFIDkgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUs5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgyNAorCisvLyBNQ1UgU0VNQVBIT1JFIDEwIEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MjgKKworLy8gTUNVIFNFTUFQSE9SRSAxMSBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODJDCisKKy8vIE1DVSBTRU1BUEhPUkUgMTIgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgzMAorCisvLyBNQ1UgU0VNQVBIT1JFIDEzIEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MzQKKworLy8gTUNVIFNFTUFQSE9SRSAxNCBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODM4CisKKy8vIE1DVSBTRU1BUEhPUkUgMTUgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgzQworCisvLyBNQ1UgU0VNQVBIT1JFIDE2IEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4NDAKKworLy8gTUNVIFNFTUFQSE9SRSAxNyBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODQ0CisKKy8vIE1DVSBTRU1BUEhPUkUgMTggQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg0OAorCisvLyBNQ1UgU0VNQVBIT1JFIDE5IEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4NEMKKworLy8gTUNVIFNFTUFQSE9SRSAyMCBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODUwCisKKy8vIE1DVSBTRU1BUEhPUkUgMjEgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg1NAorCisvLyBNQ1UgU0VNQVBIT1JFIDIyIEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4NTgKKworLy8gTUNVIFNFTUFQSE9SRSAyMyBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODVDCisKKy8vIE1DVSBTRU1BUEhPUkUgMjQgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg2MAorCisvLyBNQ1UgU0VNQVBIT1JFIDI1IEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4NjQKKworLy8gTUNVIFNFTUFQSE9SRSAyNiBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODY4CisKKy8vIE1DVSBTRU1BUEhPUkUgMjcgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg2QworCisvLyBNQ1UgU0VNQVBIT1JFIDI4IEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4NzAKKworLy8gTUNVIFNFTUFQSE9SRSAyOSBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODc0CisKKy8vIE1DVSBTRU1BUEhPUkUgMzAgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUszMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg3OAorCisvLyBNQ1UgU0VNQVBIT1JFIDMxIEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4N0MKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fU01QSDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgwX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDBfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgxX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDFfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMV9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gUmVhZGluZyB0aGUgcmVnaXN0ZXIgY2F1c2VzIGl0IHRvIGNoYW5nZSB2YWx1ZSB0byAwLiBSZWxlYXNpbmcgdGhlIHNlbWFwaG9yZQorLy8gaXMgZG9uZSBieSB3cml0aW5nIDEuCisjZGVmaW5lIFNNUEhfU01QSDJfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMl9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1NNUEgyX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDJfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fU01QSDMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIM19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgzX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDNfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIM19TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBINAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEg0X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDRfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBINF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEg0X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEg1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gUmVhZGluZyB0aGUgcmVnaXN0ZXIgY2F1c2VzIGl0IHRvIGNoYW5nZSB2YWx1ZSB0byAwLiBSZWxlYXNpbmcgdGhlIHNlbWFwaG9yZQorLy8gaXMgZG9uZSBieSB3cml0aW5nIDEuCisjZGVmaW5lIFNNUEhfU01QSDVfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBINV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1NNUEg1X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDVfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fU01QSDYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBINl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEg2X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDZfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBINl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBINworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEg3X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDdfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIN19TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEg3X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEg4CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gUmVhZGluZyB0aGUgcmVnaXN0ZXIgY2F1c2VzIGl0IHRvIGNoYW5nZSB2YWx1ZSB0byAwLiBSZWxlYXNpbmcgdGhlIHNlbWFwaG9yZQorLy8gaXMgZG9uZSBieSB3cml0aW5nIDEuCisjZGVmaW5lIFNNUEhfU01QSDhfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIOF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1NNUEg4X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDhfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fU01QSDkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIOV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEg5X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDlfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIOV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMTBfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxMF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDEwX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMTBfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMTEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMTFfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxMV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDExX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMTFfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMTIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMTJfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxMl9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDEyX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMTJfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMTMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMTNfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxM19TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDEzX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMTNfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMTQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMTRfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxNF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDE0X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMTRfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMTUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMTVfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxNV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDE1X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMTVfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMTYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMTZfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxNl9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDE2X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMTZfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMTcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMTdfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxN19TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDE3X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMTdfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMTgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMThfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxOF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDE4X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMThfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMTkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMTlfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxOV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDE5X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMTlfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMjBfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyMF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDIwX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMjBfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMjFfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyMV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDIxX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMjFfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMjJfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyMl9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDIyX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMjJfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMjMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMjNfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyM19TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDIzX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMjNfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMjQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMjRfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyNF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDI0X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMjRfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMjUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMjVfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyNV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDI1X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMjVfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMjYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMjZfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyNl9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDI2X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMjZfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMjcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMjdfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyN19TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDI3X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMjdfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMjgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMjhfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyOF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDI4X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMjhfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMjkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMjlfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyOV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDI5X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMjlfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMzBfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgzMF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDMwX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMzBfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMzFfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgzMV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDMxX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMzFfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzBfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUswX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzBfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsxX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzFfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMV9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzJfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzNfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLM19TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUszX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzNfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUs0X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzRfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLNF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUs0X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUs1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLNV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUs1X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzVfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLNV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzZfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLNl9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUs2X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzZfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUs3X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzdfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLN19TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUs3X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUs4CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLOF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUs4X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzhfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLOF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzlfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLOV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUs5X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzlfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzEwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMTBfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxMF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzEwX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMTBfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMTEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsxMV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzExX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMTFfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxMV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsxMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzEyX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMTJfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsxMl9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzEyX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzEzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMTNfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxM19TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzEzX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMTNfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMTQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsxNF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzE0X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMTRfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxNF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsxNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzE1X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMTVfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsxNV9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzE1X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzE2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMTZfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxNl9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzE2X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMTZfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMTcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsxN19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzE3X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMTdfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxN19TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsxOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzE4X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMThfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsxOF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzE4X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzE5CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMTlfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxOV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzE5X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMTlfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsyMF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzIwX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMjBfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyMF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsyMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzIxX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjFfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsyMV9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzIxX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzIyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMjJfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyMl9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzIyX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjJfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMjMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsyM19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzIzX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMjNfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyM19TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsyNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzI0X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjRfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsyNF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzI0X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzI1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMjVfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyNV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzI1X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjVfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMjYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsyNl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzI2X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMjZfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyNl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsyNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzI3X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjdfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsyN19TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzI3X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzI4CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMjhfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyOF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzI4X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjhfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMjkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsyOV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzI5X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMjlfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyOV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUszMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzMwX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMzBfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUszMF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzMwX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzMxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMzFfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUszMV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzMxX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMzFfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX1NNUEhfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfc3NpLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19zc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmRlNzBmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfc3NpLmgKQEAgLTAsMCArMSw1NDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19zc2lfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfU1NJX0hfXworI2RlZmluZSBfX0hXX1NTSV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBTU0kgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQ29udHJvbCAwCisjZGVmaW5lIFNTSV9PX0NSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gQ29udHJvbCAxCisjZGVmaW5lIFNTSV9PX0NSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gRGF0YQorI2RlZmluZSBTU0lfT19EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIFN0YXR1cworI2RlZmluZSBTU0lfT19TUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIENsb2NrIFByZXNjYWxlCisjZGVmaW5lIFNTSV9PX0NQU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gSW50ZXJydXB0IE1hc2sgU2V0IGFuZCBDbGVhcgorI2RlZmluZSBTU0lfT19JTVNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIFJhdyBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIFNTSV9PX1JJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gTWFza2VkIEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgU1NJX09fTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBJbnRlcnJ1cHQgQ2xlYXIKKyNkZWZpbmUgU1NJX09fSUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBETUEgQ29udHJvbAorI2RlZmluZSBTU0lfT19ETUFDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU1NJX09fQ1IwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6OF0gU0NSCisvLworLy8gU2VyaWFsIGNsb2NrIHJhdGU6CisvLyBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGJpdCByYXRlIG9mIHRoZSBTU0kuIFRoZQorLy8gYml0IHJhdGUgaXMKKy8vIChTU0kncyBjbG9jayBmcmVxdWVuY3kpLygoU0NSKzEpKkNQU1IuQ1BTRFZTUikuCisvLyBTQ1IgaXMgYSB2YWx1ZSBmcm9tIDAtMjU1LgorI2RlZmluZSBTU0lfQ1IwX1NDUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFNTSV9DUjBfU0NSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgU1NJX0NSMF9TQ1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBTUEgKKy8vCisvLyBDTEtPVVQgcGhhc2UgKE1vdG9yb2xhIFNQSSBmcmFtZSBmb3JtYXQgb25seSkKKy8vIFRoaXMgYml0IHNlbGVjdHMgdGhlIGNsb2NrIGVkZ2UgdGhhdCBjYXB0dXJlcyBkYXRhIGFuZCBlbmFibGVzIGl0IHRvIGNoYW5nZQorLy8gc3RhdGUuIEl0CisvLyBoYXMgdGhlIG1vc3QgaW1wYWN0IG9uIHRoZSBmaXJzdCBiaXQgdHJhbnNtaXR0ZWQgYnkgZWl0aGVyIHBlcm1pdHRpbmcgb3Igbm90CisvLyBwZXJtaXR0aW5nIGEgY2xvY2sgdHJhbnNpdGlvbiBiZWZvcmUgdGhlIGZpcnN0IGRhdGEgY2FwdHVyZSBlZGdlLgorLy8gRU5VTXM6CisvLyAyTkRfQ0xLX0VER0UgICAgICAgICAgICAgRGF0YSBpcyBjYXB0dXJlZCBvbiB0aGUgc2Vjb25kIGNsb2NrIGVkZ2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLgorLy8gMVNUX0NMS19FREdFICAgICAgICAgICAgIERhdGEgaXMgY2FwdHVyZWQgb24gdGhlIGZpcnN0IGNsb2NrIGVkZ2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLgorI2RlZmluZSBTU0lfQ1IwX1NQSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFNTSV9DUjBfU1BIX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgU1NJX0NSMF9TUEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBTU0lfQ1IwX1NQSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFNTSV9DUjBfU1BIXzJORF9DTEtfRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgU1NJX0NSMF9TUEhfMVNUX0NMS19FREdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs2XSBTUE8KKy8vCisvLyBDTEtPVVQgcG9sYXJpdHkgKE1vdG9yb2xhIFNQSSBmcmFtZSBmb3JtYXQgb25seSkKKy8vIEVOVU1zOgorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIFNTSSBwcm9kdWNlcyBhIHN0ZWFkeSBzdGF0ZSBISUdIIHZhbHVlIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENMS09VVCBwaW4gd2hlbiBkYXRhIGlzIG5vdCBiZWluZyB0cmFuc2ZlcnJlZC4KKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBTU0kgcHJvZHVjZXMgYSBzdGVhZHkgc3RhdGUgTE9XIHZhbHVlIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENMS09VVCBwaW4gd2hlbiBkYXRhIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGJlaW5nIHRyYW5zZmVycmVkLgorI2RlZmluZSBTU0lfQ1IwX1NQTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFNTSV9DUjBfU1BPX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgU1NJX0NSMF9TUE9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBTU0lfQ1IwX1NQT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFNTSV9DUjBfU1BPX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgU1NJX0NSMF9TUE9fTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTo0XSBGUkYKKy8vCisvLyBGcmFtZSBmb3JtYXQuCisvLyBUaGUgc3VwcG9ydGVkIGZyYW1lIGZvcm1hdHMgYXJlIE1vdG9yb2xhIFNQSSwgVEkgc3luY2hyb25vdXMgc2VyaWFsIGFuZAorLy8gTmF0aW9uYWwgTWljcm93aXJlLgorLy8gVmFsdWUgMCdiMTEgaXMgcmVzZXJ2ZWQgYW5kIHNoYWxsIG5vdCBiZSB1c2VkLgorLy8gRU5VTXM6CisvLyBOQVRJT05BTF9NSUNST1dJUkUgICAgICAgTmF0aW9uYWwgTWljcm93aXJlIGZyYW1lIGZvcm1hdAorLy8gVElfU1lOQ19TRVJJQUwgICAgICAgICAgIFRJIHN5bmNocm9ub3VzIHNlcmlhbCBmcmFtZSBmb3JtYXQKKy8vIE1PVE9ST0xBX1NQSSAgICAgICAgICAgICBNb3Rvcm9sYSBTUEkgZnJhbWUgZm9ybWF0CisjZGVmaW5lIFNTSV9DUjBfRlJGX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU1NJX0NSMF9GUkZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBTU0lfQ1IwX0ZSRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFNTSV9DUjBfRlJGX05BVElPTkFMX01JQ1JPV0lSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgU1NJX0NSMF9GUkZfVElfU1lOQ19TRVJJQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBTU0lfQ1IwX0ZSRl9NT1RPUk9MQV9TUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFszOjBdIERTUworLy8KKy8vIERhdGEgU2l6ZSBTZWxlY3QuCisvLyBWYWx1ZXMgMGIwMDAwLCAwYjAwMDEsIDBiMDAxMCBhcmUgcmVzZXJ2ZWQgYW5kIHNoYWxsIG5vdCBiZSB1c2VkLgorLy8gRU5VTXM6CisvLyAxNl9CSVQgICAgICAgICAgICAgICAgICAgMTYtYml0IGRhdGEKKy8vIDE1X0JJVCAgICAgICAgICAgICAgICAgICAxNS1iaXQgZGF0YQorLy8gMTRfQklUICAgICAgICAgICAgICAgICAgIDE0LWJpdCBkYXRhCisvLyAxM19CSVQgICAgICAgICAgICAgICAgICAgMTMtYml0IGRhdGEKKy8vIDEyX0JJVCAgICAgICAgICAgICAgICAgICAxMi1iaXQgZGF0YQorLy8gMTFfQklUICAgICAgICAgICAgICAgICAgIDExLWJpdCBkYXRhCisvLyAxMF9CSVQgICAgICAgICAgICAgICAgICAgMTAtYml0IGRhdGEKKy8vIDlfQklUICAgICAgICAgICAgICAgICAgICA5LWJpdCBkYXRhCisvLyA4X0JJVCAgICAgICAgICAgICAgICAgICAgOC1iaXQgZGF0YQorLy8gN19CSVQgICAgICAgICAgICAgICAgICAgIDctYml0IGRhdGEKKy8vIDZfQklUICAgICAgICAgICAgICAgICAgICA2LWJpdCBkYXRhCisvLyA1X0JJVCAgICAgICAgICAgICAgICAgICAgNS1iaXQgZGF0YQorLy8gNF9CSVQgICAgICAgICAgICAgICAgICAgIDQtYml0IGRhdGEKKyNkZWZpbmUgU1NJX0NSMF9EU1NfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBTU0lfQ1IwX0RTU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIFNTSV9DUjBfRFNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1NJX0NSMF9EU1NfMTZfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBTU0lfQ1IwX0RTU18xNV9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIFNTSV9DUjBfRFNTXzE0X0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgU1NJX0NSMF9EU1NfMTNfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBTU0lfQ1IwX0RTU18xMl9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIFNTSV9DUjBfRFNTXzExX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgU1NJX0NSMF9EU1NfMTBfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBTU0lfQ1IwX0RTU185X0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNTSV9DUjBfRFNTXzhfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgU1NJX0NSMF9EU1NfN19CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBTU0lfQ1IwX0RTU182X0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIFNTSV9DUjBfRFNTXzVfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU1NJX0NSMF9EU1NfNF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNTSV9PX0NSMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzNdIFNPRAorLy8KKy8vIFNsYXZlLW1vZGUgb3V0cHV0IGRpc2FibGVkCisvLyBUaGlzIGJpdCBpcyByZWxldmFudCBvbmx5IGluIHRoZSBzbGF2ZSBtb2RlLCBNUz0xLiBJbiBtdWx0aXBsZS1zbGF2ZQorLy8gc3lzdGVtcywgaXQgaXMgcG9zc2libGUgZm9yIGFuIFNTSSBtYXN0ZXIgdG8gYnJvYWRjYXN0IGEgbWVzc2FnZSB0byBhbGwKKy8vIHNsYXZlcyBpbiB0aGUgc3lzdGVtIHdoaWxlIGVuc3VyaW5nIHRoYXQgb25seSBvbmUgc2xhdmUgZHJpdmVzIGRhdGEgb250byBpdHMKKy8vIHNlcmlhbCBvdXRwdXQgbGluZS4gSW4gc3VjaCBzeXN0ZW1zIHRoZSBSWEQgbGluZXMgZnJvbSBtdWx0aXBsZSBzbGF2ZXMgY291bGQKKy8vIGJlIHRpZWQgdG9nZXRoZXIuIFRvIG9wZXJhdGUgaW4gc3VjaCBzeXN0ZW1zLCB0aGlzIGJpdGZpZWxkIGNhbiBiZSBzZXQgaWYKKy8vIHRoZSBTU0kgc2xhdmUgaXMgbm90IHN1cHBvc2VkIHRvIGRyaXZlIHRoZSBUWEQgbGluZToKKy8vCisvLyAwOiBTU0kgY2FuIGRyaXZlIHRoZSBUWEQgb3V0cHV0IGluIHNsYXZlIG1vZGUuCisvLyAxOiBTU0kgY2Fubm90IGRyaXZlIHRoZSBUWEQgb3V0cHV0IGluIHNsYXZlIG1vZGUuCisjZGVmaW5lIFNTSV9DUjFfU09EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1NJX0NSMV9TT0RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBTU0lfQ1IxX1NPRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNTSV9DUjFfU09EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gTVMKKy8vCisvLyBNYXN0ZXIgb3Igc2xhdmUgbW9kZSBzZWxlY3QuIFRoaXMgYml0IGNhbiBiZSBtb2RpZmllZCBvbmx5IHdoZW4gU1NJIGlzCisvLyBkaXNhYmxlZCwgU1NFPTAuCisvLyBFTlVNczoKKy8vIFNMQVZFICAgICAgICAgICAgICAgICAgICBEZXZpY2UgY29uZmlndXJlZCBhcyBzbGF2ZQorLy8gTUFTVEVSICAgICAgICAgICAgICAgICAgIERldmljZSBjb25maWd1cmVkIGFzIG1hc3RlcgorI2RlZmluZSBTU0lfQ1IxX01TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNTSV9DUjFfTVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU1NJX0NSMV9NU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTU0lfQ1IxX01TX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFNTSV9DUjFfTVNfU0xBVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU1NJX0NSMV9NU19NQVNURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBTU0UKKy8vCisvLyBTeW5jaHJvbm91cyBzZXJpYWwgaW50ZXJmYWNlIGVuYWJsZS4KKy8vIEVOVU1zOgorLy8gU1NJX0VOQUJMRUQgICAgICAgICAgICAgIE9wZXJhdGlvbiBlbmFibGVkCisvLyBTU0lfRElTQUJMRUQgICAgICAgICAgICAgT3BlcmF0aW9uIGRpc2FibGVkCisjZGVmaW5lIFNTSV9DUjFfU1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1NJX0NSMV9TU0VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTU0lfQ1IxX1NTRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNTSV9DUjFfU1NFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU1NJX0NSMV9TU0VfU1NJX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU0lfQ1IxX1NTRV9TU0lfRElTQUJMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIExCTQorLy8KKy8vIExvb3AgYmFjayBtb2RlOgorLy8KKy8vIDA6IE5vcm1hbCBzZXJpYWwgcG9ydCBvcGVyYXRpb24gZW5hYmxlZC4KKy8vIDE6IE91dHB1dCBvZiB0cmFuc21pdCBzZXJpYWwgc2hpZnRlciBpcyBjb25uZWN0ZWQgdG8gaW5wdXQgb2YgcmVjZWl2ZSBzZXJpYWwKKy8vIHNoaWZ0ZXIgaW50ZXJuYWxseS4KKyNkZWZpbmUgU1NJX0NSMV9MQk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTU0lfQ1IxX0xCTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNTSV9DUjFfTEJNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1NJX0NSMV9MQk1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNTSV9PX0RSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gREFUQQorLy8KKy8vIFRyYW5zbWl0L3JlY2VpdmUgZGF0YQorLy8gVGhlIHZhbHVlcyByZWFkIGZyb20gdGhpcyBmaWVsZCBvciB3cml0dGVuIHRvIHRoaXMgZmllbGQgbXVzdCBiZQorLy8gcmlnaHQtanVzdGlmaWVkIHdoZW4gU1NJIGlzIHByb2dyYW1tZWQgZm9yIGEgZGF0YSBzaXplIHRoYXQgaXMgbGVzcyB0aGFuIDE2CisvLyBiaXRzIChDUjAuRFNTICE9IDBiMTExMSkuIFVudXNlZCBiaXRzIGF0IHRoZSB0b3AgYXJlIGlnbm9yZWQgYnkgdHJhbnNtaXQKKy8vIGxvZ2ljLiBUaGUgcmVjZWl2ZSBsb2dpYyBhdXRvbWF0aWNhbGx5IHJpZ2h0LWp1c3RpZmllcy4KKyNkZWZpbmUgU1NJX0RSX0RBVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBTU0lfRFJfREFUQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFNTSV9EUl9EQVRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTU0lfT19TUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzRdIEJTWQorLy8KKy8vIFNlcmlhbCBpbnRlcmZhY2UgYnVzeToKKy8vCisvLyAwOiBTU0kgaXMgaWRsZQorLy8gMTogU1NJIGlzIGN1cnJlbnRseSB0cmFuc21pdHRpbmcgYW5kL29yIHJlY2VpdmluZyBhIGZyYW1lIG9yIHRoZSB0cmFuc21pdAorLy8gRklGTyBpcyBub3QgZW1wdHkuCisjZGVmaW5lIFNTSV9TUl9CU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgU1NJX1NSX0JTWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBTU0lfU1JfQlNZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFNTSV9TUl9CU1lfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gUkZGCisvLworLy8gUmVjZWl2ZSBGSUZPIGZ1bGw6CisvLworLy8gMDogUmVjZWl2ZSBGSUZPIGlzIG5vdCBmdWxsLgorLy8gMTogUmVjZWl2ZSBGSUZPIGlzIGZ1bGwuCisjZGVmaW5lIFNTSV9TUl9SRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1NJX1NSX1JGRl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBTU0lfU1JfUkZGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNTSV9TUl9SRkZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gUk5FCisvLworLy8gUmVjZWl2ZSBGSUZPIG5vdCBlbXB0eQorLy8KKy8vIDA6IFJlY2VpdmUgRklGTyBpcyBlbXB0eS4KKy8vIDE6IFJlY2VpdmUgRklGTyBpcyBub3QgZW1wdHkuCisjZGVmaW5lIFNTSV9TUl9STkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU1NJX1NSX1JORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBTU0lfU1JfUk5FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNTSV9TUl9STkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gVE5GCisvLworLy8gVHJhbnNtaXQgRklGTyBub3QgZnVsbDoKKy8vCisvLyAwOiBUcmFuc21pdCBGSUZPIGlzIGZ1bGwuCisvLyAxOiBUcmFuc21pdCBGSUZPIGlzIG5vdCBmdWxsLgorI2RlZmluZSBTU0lfU1JfVE5GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNTSV9TUl9UTkZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU1NJX1NSX1RORl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU0lfU1JfVE5GX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFRGRQorLy8KKy8vIFRyYW5zbWl0IEZJRk8gZW1wdHk6CisvLworLy8gMDogVHJhbnNtaXQgRklGTyBpcyBub3QgZW1wdHkuCisvLyAxOiBUcmFuc21pdCBGSUZPIGlzIGVtcHR5LgorI2RlZmluZSBTU0lfU1JfVEZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTSV9TUl9URkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1NJX1NSX1RGRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTU0lfU1JfVEZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU1NJX09fQ1BTUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIENQU0RWU1IKKy8vCisvLyBDbG9jayBwcmVzY2FsZSBkaXZpc29yOgorLy8gVGhpcyBmaWVsZCBzcGVjaWZpZXMgdGhlIGRpdmlzaW9uIGZhY3RvciBieSB3aGljaCB0aGUgaW5wdXQgc3lzdGVtIGNsb2NrIHRvCisvLyBTU0kgbXVzdCBiZSBpbnRlcm5hbGx5IGRpdmlkZWQgYmVmb3JlIGZ1cnRoZXIgdXNlLgorLy8gVGhlIHZhbHVlIHByb2dyYW1tZWQgaW50byB0aGlzIGZpZWxkIG11c3QgYmUgYW4gZXZlbiBub24temVybyBudW1iZXIKKy8vICgyLTI1NCkuIFRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIHByb2dyYW1tZWQgbnVtYmVyIGlzIGhhcmQtY29kZWQgdG8KKy8vIHplcm8uIElmIGFuIG9kZCBudW1iZXIgaXMgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyLCBkYXRhIHJlYWQgYmFjayBmcm9tCisvLyB0aGlzIHJlZ2lzdGVyIGhhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGFzIHplcm8uCisjZGVmaW5lIFNTSV9DUFNSX0NQU0RWU1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgU1NJX0NQU1JfQ1BTRFZTUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBTU0lfQ1BTUl9DUFNEVlNSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU1NJX09fSU1TQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzNdIFRYSU0KKy8vCisvLyBUcmFuc21pdCBGSUZPIGludGVycnVwdCBtYXNrOgorLy8gQSByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgbWFzayBmb3IgdHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQuIE9uIGEgd3JpdGUgb2YKKy8vIDEsIHRoZSBtYXNrIGZvciB0cmFuc21pdCBGSUZPIGludGVycnVwdCBpcyBzZXQgd2hpY2ggbWVhbnMgdGhlIGludGVycnVwdAorLy8gc3RhdGUgd2lsbCBiZSByZWZsZWN0ZWQgaW4gTUlTLlRYTUlTLiBBIHdyaXRlIG9mIDAgY2xlYXJzIHRoZSBtYXNrIHdoaWNoCisvLyBtZWFucyBNSVMuVFhNSVMgd2lsbCBub3QgcmVmbGVjdCB0aGUgaW50ZXJydXB0LgorI2RlZmluZSBTU0lfSU1TQ19UWElNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNTSV9JTVNDX1RYSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgU1NJX0lNU0NfVFhJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTU0lfSU1TQ19UWElNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFJYSU0KKy8vCisvLyBSZWNlaXZlIEZJRk8gaW50ZXJydXB0IG1hc2s6CisvLyBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCBtYXNrIGZvciByZWNlaXZlIEZJRk8gaW50ZXJydXB0LiBPbiBhIHdyaXRlIG9mIDEsCisvLyB0aGUgbWFzayBmb3IgcmVjZWl2ZSBGSUZPIGludGVycnVwdCBpcyBzZXQgd2hpY2ggbWVhbnMgdGhlIGludGVycnVwdCBzdGF0ZQorLy8gd2lsbCBiZSByZWZsZWN0ZWQgaW4gTUlTLlJYTUlTLiBBIHdyaXRlIG9mIDAgY2xlYXJzIHRoZSBtYXNrIHdoaWNoIG1lYW5zCisvLyBNSVMuUlhNSVMgd2lsbCBub3QgcmVmbGVjdCB0aGUgaW50ZXJydXB0LgorI2RlZmluZSBTU0lfSU1TQ19SWElNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNTSV9JTVNDX1JYSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU1NJX0lNU0NfUlhJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTU0lfSU1TQ19SWElNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFJUSU0KKy8vCisvLyBSZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0IG1hc2s6CisvLyBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCBtYXNrIGZvciByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0LiBPbiBhIHdyaXRlIG9mCisvLyAxLCB0aGUgbWFzayBmb3IgcmVjZWl2ZSB0aW1lb3V0IGludGVycnVwdCBpcyBzZXQgd2hpY2ggbWVhbnMgdGhlIGludGVycnVwdAorLy8gc3RhdGUgd2lsbCBiZSByZWZsZWN0ZWQgaW4gTUlTLlJUTUlTLiBBIHdyaXRlIG9mIDAgY2xlYXJzIHRoZSBtYXNrIHdoaWNoCisvLyBtZWFucyBNSVMuUlRNSVMgd2lsbCBub3QgcmVmbGVjdCB0aGUgaW50ZXJydXB0LgorI2RlZmluZSBTU0lfSU1TQ19SVElNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNTSV9JTVNDX1JUSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU1NJX0lNU0NfUlRJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU0lfSU1TQ19SVElNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJPUklNCisvLworLy8gUmVjZWl2ZSBvdmVycnVuIGludGVycnVwdCBtYXNrOgorLy8gQSByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgbWFzayBmb3IgcmVjZWl2ZSBvdmVycnVuIGludGVycnVwdC4gT24gYSB3cml0ZSBvZgorLy8gMSwgdGhlIG1hc2sgZm9yIHJlY2VpdmUgb3ZlcnJ1biBpbnRlcnJ1cHQgaXMgc2V0IHdoaWNoIG1lYW5zIHRoZSBpbnRlcnJ1cHQKKy8vIHN0YXRlIHdpbGwgYmUgcmVmbGVjdGVkIGluIE1JUy5ST1JNSVMuIEEgd3JpdGUgb2YgMCBjbGVhcnMgdGhlIG1hc2sgd2hpY2gKKy8vIG1lYW5zIE1JUy5ST1JNSVMgd2lsbCBub3QgcmVmbGVjdCB0aGUgaW50ZXJydXB0LgorI2RlZmluZSBTU0lfSU1TQ19ST1JJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTSV9JTVNDX1JPUklNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1NJX0lNU0NfUk9SSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTU0lfSU1TQ19ST1JJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU1NJX09fUklTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gVFhSSVMKKy8vCisvLyBSYXcgdHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhlIHRyYW5zbWl0IGludGVycnVwdCBpcyBhc3NlcnRlZCB3aGVuIHRoZXJlIGFyZSBmb3VyIG9yIGZld2VyIHZhbGlkCisvLyBlbnRyaWVzIGluIHRoZSB0cmFuc21pdCBGSUZPLiBUaGUgdHJhbnNtaXQgaW50ZXJydXB0IGlzIG5vdCBxdWFsaWZpZWQgd2l0aAorLy8gdGhlIFNTSSBlbmFibGUgc2lnbmFsLiBUaGVyZWZvcmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgd2F5cyBjYW4gYmUgdXNlZDoKKy8vICAtIGRhdGEgY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIHRyYW5zbWl0IEZJRk8gcHJpb3IgdG8gZW5hYmxpbmcgdGhlIFNTSSBhbmQKKy8vIHRoZQorLy8gaW50ZXJydXB0cy4KKy8vICAtIFNTSSBhbmQgaW50ZXJydXB0cyBjYW4gYmUgZW5hYmxlZCBzbyB0aGF0IGRhdGEgY2FuIGJlIHdyaXR0ZW4gdG8gdGhlCisvLyB0cmFuc21pdCBGSUZPIGJ5IGFuIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCisjZGVmaW5lIFNTSV9SSVNfVFhSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1NJX1JJU19UWFJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBTU0lfUklTX1RYUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNTSV9SSVNfVFhSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gUlhSSVMKKy8vCisvLyBSYXcgaW50ZXJydXB0IHN0YXRlIG9mIHJlY2VpdmUgRklGTyBpbnRlcnJ1cHQ6CisvLyBUaGUgcmVjZWl2ZSBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgd2hlbiB0aGVyZSBhcmUgZm91ciBvciBtb3JlIHZhbGlkIGVudHJpZXMKKy8vIGluIHRoZSByZWNlaXZlIEZJRk8uCisjZGVmaW5lIFNTSV9SSVNfUlhSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU1NJX1JJU19SWFJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBTU0lfUklTX1JYUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNTSV9SSVNfUlhSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gUlRSSVMKKy8vCisvLyBSYXcgaW50ZXJydXB0IHN0YXRlIG9mIHJlY2VpdmUgdGltZW91dCBpbnRlcnJ1cHQ6CisvLyBUaGUgcmVjZWl2ZSB0aW1lb3V0IGludGVycnVwdCBpcyBhc3NlcnRlZCB3aGVuIHRoZSByZWNlaXZlIEZJRk8gaXMgbm90IGVtcHR5CisvLyBhbmQgU1NJIGhhcyByZW1haW5lZCBpZGxlIGZvciBhIGZpeGVkIDMyIGJpdCBwZXJpb2QuIFRoaXMgbWVjaGFuaXNtIGNhbiBiZQorLy8gdXNlZCB0byBub3RpZnkgdGhlIHVzZXIgdGhhdCBkYXRhIGlzIHN0aWxsIHByZXNlbnQgaW4gdGhlIHJlY2VpdmUgRklGTyBhbmQKKy8vIHJlcXVpcmVzIHNlcnZpY2luZy4gVGhpcyBpbnRlcnJ1cHQgaXMgZGVhc3NlcnRlZCBpZiB0aGUgcmVjZWl2ZSBGSUZPIGJlY29tZXMKKy8vIGVtcHR5IGJ5IHN1YnNlcXVlbnQgcmVhZHMsIG9yIGlmIG5ldyBkYXRhIGlzIHJlY2VpdmVkIG9uIFJYRC4KKy8vIEl0IGNhbiBhbHNvIGJlIGNsZWFyZWQgYnkgd3JpdGluZyB0byBJQ1IuUlRJQy4KKyNkZWZpbmUgU1NJX1JJU19SVFJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU0lfUklTX1JUUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNTSV9SSVNfUlRSSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1NJX1JJU19SVFJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBST1JSSVMKKy8vCisvLyBSYXcgaW50ZXJydXB0IHN0YXRlIG9mIHJlY2VpdmUgb3ZlcnJ1biBpbnRlcnJ1cHQ6CisvLyBUaGUgcmVjZWl2ZSBvdmVycnVuIGludGVycnVwdCBpcyBhc3NlcnRlZCB3aGVuIHRoZSBGSUZPIGlzIGFscmVhZHkgZnVsbCBhbmQKKy8vIGFuIGFkZGl0aW9uYWwgZGF0YSBmcmFtZSBpcyByZWNlaXZlZCwgY2F1c2luZyBhbiBvdmVycnVuIG9mIHRoZSBGSUZPLiBEYXRhCisvLyBpcyBvdmVyLXdyaXR0ZW4gaW4gdGhlCisvLyByZWNlaXZlIHNoaWZ0IHJlZ2lzdGVyLCBidXQgbm90IHRoZSBGSUZPIHNvIHRoZSBGSUZPIGNvbnRlbnRzIHN0YXkgdmFsaWQuCisvLyBJdCBjYW4gYWxzbyBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgdG8gSUNSLlJPUklDLgorI2RlZmluZSBTU0lfUklTX1JPUlJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTSV9SSVNfUk9SUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1NJX1JJU19ST1JSSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTU0lfUklTX1JPUlJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU1NJX09fTUlTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gVFhNSVMKKy8vCisvLyBNYXNrZWQgaW50ZXJydXB0IHN0YXRlIG9mIHRyYW5zbWl0IEZJRk8gaW50ZXJydXB0OgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSBtYXNrZWQgaW50ZXJydXB0IHN0YXRlIG9mIHRyYW5zbWl0IEZJRk8gaW50ZXJydXB0CisvLyB3aGljaCBpcyB0aGUgQU5EIHByb2R1Y3Qgb2YgcmF3IGludGVycnVwdCBzdGF0ZSBSSVMuVFhSSVMgYW5kIHRoZSBtYXNrCisvLyBzZXR0aW5nIElNU0MuVFhJTS4KKyNkZWZpbmUgU1NJX01JU19UWE1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTU0lfTUlTX1RYTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFNTSV9NSVNfVFhNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1NJX01JU19UWE1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBSWE1JUworLy8KKy8vIE1hc2tlZCBpbnRlcnJ1cHQgc3RhdGUgb2YgcmVjZWl2ZSBGSUZPIGludGVycnVwdDoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgbWFza2VkIGludGVycnVwdCBzdGF0ZSBvZiByZWNlaXZlIEZJRk8gaW50ZXJydXB0CisvLyB3aGljaCBpcyB0aGUgQU5EIHByb2R1Y3Qgb2YgcmF3IGludGVycnVwdCBzdGF0ZSBSSVMuUlhSSVMgYW5kIHRoZSBtYXNrCisvLyBzZXR0aW5nIElNU0MuUlhJTS4KKyNkZWZpbmUgU1NJX01JU19SWE1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTU0lfTUlTX1JYTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFNTSV9NSVNfUlhNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU1NJX01JU19SWE1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBSVE1JUworLy8KKy8vIE1hc2tlZCBpbnRlcnJ1cHQgc3RhdGUgb2YgcmVjZWl2ZSB0aW1lb3V0IGludGVycnVwdDoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgbWFza2VkIGludGVycnVwdCBzdGF0ZSBvZiByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0CisvLyB3aGljaCBpcyB0aGUgQU5EIHByb2R1Y3Qgb2YgcmF3IGludGVycnVwdCBzdGF0ZSBSSVMuUlRSSVMgYW5kIHRoZSBtYXNrCisvLyBzZXR0aW5nIElNU0MuUlRJTS4KKyNkZWZpbmUgU1NJX01JU19SVE1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU0lfTUlTX1JUTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNTSV9NSVNfUlRNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1NJX01JU19SVE1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBST1JNSVMKKy8vCisvLyBNYXNrZWQgaW50ZXJydXB0IHN0YXRlIG9mIHJlY2VpdmUgb3ZlcnJ1biBpbnRlcnJ1cHQ6CisvLyBUaGlzIGZpZWxkIHJldHVybnMgdGhlIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdGUgb2YgcmVjZWl2ZSBvdmVycnVuIGludGVycnVwdAorLy8gd2hpY2ggaXMgdGhlIEFORCBwcm9kdWN0IG9mIHJhdyBpbnRlcnJ1cHQgc3RhdGUgUklTLlJPUlJJUyBhbmQgdGhlIG1hc2sKKy8vIHNldHRpbmcgSU1TQy5ST1JJTS4KKyNkZWZpbmUgU1NJX01JU19ST1JNSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTU0lfTUlTX1JPUk1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNTSV9NSVNfUk9STUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1NJX01JU19ST1JNSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNTSV9PX0lDUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIFJUSUMKKy8vCisvLyBDbGVhciB0aGUgcmVjZWl2ZSB0aW1lb3V0IGludGVycnVwdDoKKy8vIFdyaXRpbmcgMSB0byB0aGlzIGZpZWxkIGNsZWFycyB0aGUgdGltZW91dCBpbnRlcnJ1cHQgKFJJUy5SVFJJUykuIFdyaXRpbmcgMAorLy8gaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgU1NJX0lDUl9SVElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU0lfSUNSX1JUSUNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNTSV9JQ1JfUlRJQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1NJX0lDUl9SVElDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBST1JJQworLy8KKy8vIENsZWFyIHRoZSByZWNlaXZlIG92ZXJydW4gaW50ZXJydXB0OgorLy8gV3JpdGluZyAxIHRvIHRoaXMgZmllbGQgY2xlYXJzIHRoZSBvdmVycnVuIGVycm9yIGludGVycnVwdCAoUklTLlJPUlJJUykuCisvLyBXcml0aW5nIDAgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgU1NJX0lDUl9ST1JJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTU0lfSUNSX1JPUklDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNTSV9JQ1JfUk9SSUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1NJX0lDUl9ST1JJQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNTSV9PX0RNQUNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gVFhETUFFCisvLworLy8gVHJhbnNtaXQgRE1BIGVuYWJsZS4gSWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIERNQSBmb3IgdGhlIHRyYW5zbWl0IEZJRk8gaXMKKy8vIGVuYWJsZWQuCisjZGVmaW5lIFNTSV9ETUFDUl9UWERNQUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1NJX0RNQUNSX1RYRE1BRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTU0lfRE1BQ1JfVFhETUFFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNTSV9ETUFDUl9UWERNQUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUlhETUFFCisvLworLy8gUmVjZWl2ZSBETUEgZW5hYmxlLiBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgRE1BIGZvciB0aGUgcmVjZWl2ZSBGSUZPIGlzCisvLyBlbmFibGVkLgorI2RlZmluZSBTU0lfRE1BQ1JfUlhETUFFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTSV9ETUFDUl9SWERNQUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1NJX0RNQUNSX1JYRE1BRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTU0lfRE1BQ1JfUlhETUFFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fU1NJX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3N5c2N0bC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfc3lzY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU3MzkwOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3N5c2N0bC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19zeXNjdGwuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDMtMTYgMTQ6NDM6NDUgKzAxMDAgKE1vbiwgMTYgTWFyIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDI5ODkKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19TWVNDVExfSF9fCisjZGVmaW5lIF9fSFdfU1lTQ1RMX0hfXworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBpbml0aWFsIGRlZmluZXMgZm9yIHRoZSBNQ1UgY2xvY2sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEdFVF9NQ1VfQ0xPQ0sgICAgICAgICA0ODAwMDAwMAorCisKKyNlbmRpZiAvLyBfX0hXX1NZU0NUTF9IX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3RybmcuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3RybmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjk2Y2VmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfdHJuZy5oCkBAIC0wLDAgKzEsNjA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfdHJuZ19oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19UUk5HX0hfXworI2RlZmluZSBfX0hXX1RSTkdfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gVFJORyBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBSYW5kb20gTnVtYmVyIExvd2VyIFdvcmQgUmVhZG91dCBWYWx1ZQorI2RlZmluZSBUUk5HX09fT1VUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIFJhbmRvbSBOdW1iZXIgVXBwZXIgV29yZCBSZWFkb3V0IFZhbHVlCisjZGVmaW5lIFRSTkdfT19PVVQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBUUk5HX09fSVJRRkxBR1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIEludGVycnVwdCBNYXNrCisjZGVmaW5lIFRSTkdfT19JUlFGTEFHTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gSW50ZXJydXB0IEZsYWcgQ2xlYXIKKyNkZWZpbmUgVFJOR19PX0lSUUZMQUdDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBDb250cm9sCisjZGVmaW5lIFRSTkdfT19DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gQ29uZmlndXJhdGlvbiAwCisjZGVmaW5lIFRSTkdfT19DRkcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gQWxhcm0gQ29udHJvbAorI2RlZmluZSBUUk5HX09fQUxBUk1DTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIEZSTyBFbmFibGUKKyNkZWZpbmUgVFJOR19PX0ZST0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBGUk8gRGUtdHVuZSBCaXQKKyNkZWZpbmUgVFJOR19PX0ZST0RFVFVORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBBbGFybSBFdmVudAorI2RlZmluZSBUUk5HX09fQUxBUk1NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIEFsYXJtIFNodXRkb3duCisjZGVmaW5lIFRSTkdfT19BTEFSTVNUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8gTEZTUiBSZWFkb3V0IFZhbHVlCisjZGVmaW5lIFRSTkdfT19MRlNSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKworLy8gTEZTUiBSZWFkb3V0IFZhbHVlCisjZGVmaW5lIFRSTkdfT19MRlNSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKworLy8gTEZTUiBSZWFkb3V0IFZhbHVlCisjZGVmaW5lIFRSTkdfT19MRlNSMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKworLy8gVFJORyBFbmdpbmUgT3B0aW9ucyBJbmZvcm1hdGlvbgorI2RlZmluZSBUUk5HX09fSFdPUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc4CisKKy8vIEhXIFZlcnNpb24gMAorI2RlZmluZSBUUk5HX09fSFdWRVIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdDCisKKy8vIEludGVycnVwdCBTdGF0dXMgQWZ0ZXIgTWFza2luZworI2RlZmluZSBUUk5HX09fSVJRU1RBVE1BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRkQ4CisKKy8vIEhXIFZlcnNpb24gMQorI2RlZmluZSBUUk5HX09fSFdWRVIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRkUwCisKKy8vIEludGVycnVwdCBTZXQKKyNkZWZpbmUgVFJOR19PX0lSUVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUZFQworCisvLyBTVyBSZXNldCBDb250cm9sCisjZGVmaW5lIFRSTkdfT19TV1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGRjAKKworLy8gSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBUUk5HX09fSVJRU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRkY4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX09VVDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUxVRV8zMV8wCisvLworLy8gTFNXIG9mIDY0LSBiaXQgcmFuZG9tIHZhbHVlLiBOZXcgdmFsdWUgcmVhZHkgd2hlbiBJUlFGTEFHU1RBVC5SRFkgPSAxLgorI2RlZmluZSBUUk5HX09VVDBfVkFMVUVfMzFfMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFRSTkdfT1VUMF9WQUxVRV8zMV8wX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVFJOR19PVVQwX1ZBTFVFXzMxXzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19PVVQxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkFMVUVfNjNfMzIKKy8vCisvLyBNU1cgb2YgNjQtYml0IHJhbmRvbSB2YWx1ZS4gTmV3IHZhbHVlIHJlYWR5IHdoZW4gSVJRRkxBR1NUQVQuUkRZID0gMS4KKyNkZWZpbmUgVFJOR19PVVQxX1ZBTFVFXzYzXzMyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBUUk5HX09VVDFfVkFMVUVfNjNfMzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFRSTkdfT1VUMV9WQUxVRV82M18zMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fSVJRRkxBR1NUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBORUVEX0NMT0NLCisvLworLy8gMTogSW5kaWNhdGVzIHRoYXQgdGhlIFRSTkcgaXMgYnVzeSBnZW5lcmF0aW5nIGVudHJvcHkgb3IgaXMgaW4gb25lIG9mIGl0cworLy8gdGVzdCBtb2RlcyAtIGNsb2NrcyBtYXkgbm90IGJlIHR1cm5lZCBvZmYgYW5kIHRoZSBwb3dlciBzdXBwbHkgdm9sdGFnZSBtdXN0CisvLyBiZSBrZXB0IHN0YWJsZS4KKy8vIDA6IFRSTkcgaXMgaWRsZSBhbmQgY2FuIGJlIHNodXQgZG93bgorI2RlZmluZSBUUk5HX0lSUUZMQUdTVEFUX05FRURfQ0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFRSTkdfSVJRRkxBR1NUQVRfTkVFRF9DTE9DS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgVFJOR19JUlFGTEFHU1RBVF9ORUVEX0NMT0NLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBUUk5HX0lSUUZMQUdTVEFUX05FRURfQ0xPQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICAgWzFdIFNIVVRET1dOX09WRgorLy8KKy8vIDE6IFRoZSBudW1iZXIgb2YgRlJPcyBzaHV0IGRvd24gKGkuZS4gdGhlIG51bWJlciBvZiAnMScgYml0cyBpbiB0aGUKKy8vIEFMQVJNU1RPUCByZWdpc3RlcikgaGFzIGV4Y2VlZGVkIHRoZSB0aHJlc2hvbGQgc2V0IGJ5IEFMQVJNQ05ULlNIVVRET1dOX1RIUgorLy8KKy8vIFdyaXRpbmcgJzEnIHRvIElSUUZMQUdDTFIuU0hVVERPV05fT1ZGIGNsZWFycyB0aGlzIGJpdCB0byAnMCcgYWdhaW4uCisjZGVmaW5lIFRSTkdfSVJRRkxBR1NUQVRfU0hVVERPV05fT1ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVFJOR19JUlFGTEFHU1RBVF9TSFVURE9XTl9PVkZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUUk5HX0lSUUZMQUdTVEFUX1NIVVRET1dOX09WRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFRSTkdfSVJRRkxBR1NUQVRfU0hVVERPV05fT1ZGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUkRZCisvLworLy8gMTogRGF0YSBhcmUgYXZhaWxhYmxlIGluIE9VVDAgYW5kIE9VVDEuCisvLworLy8gQWNrbm93bGVkZ2luZyB0aGlzIHN0YXRlIGJ5IHdyaXRpbmcgJzEnIHRvIElSUUZMQUdDTFIuUkRZIGNsZWFycyB0aGlzIGJpdCB0bworLy8gJzAnLgorLy8gSWYgYSBuZXcgbnVtYmVyIGlzIGFscmVhZHkgYXZhaWxhYmxlIGluIHRoZSBpbnRlcm5hbCByZWdpc3RlciBvZiB0aGUgVFJORywKKy8vIHRoZSBudW1iZXIgaXMgZGlyZWN0bHkgY2xvY2tlZCBpbnRvIHRoZSByZXN1bHQgcmVnaXN0ZXIuIEluIHRoaXMgY2FzZSB0aGUKKy8vIHN0YXR1cyBiaXQgaXMgYXNzZXJ0ZWQgYWdhaW4sIGFmdGVyIG9uZSBjbG9jayBjeWNsZS4KKyNkZWZpbmUgVFJOR19JUlFGTEFHU1RBVF9SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUUk5HX0lSUUZMQUdTVEFUX1JEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRSTkdfSVJRRkxBR1NUQVRfUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVFJOR19JUlFGTEFHU1RBVF9SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19JUlFGTEFHTUFTSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIFNIVVRET1dOX09WRgorLy8KKy8vIDE6IEFsbG93IElSUUZMQUdTVEFULlNIVVRET1dOX09WRiB0byBhY3RpdmF0ZSB0aGUgaW50ZXJydXB0IGZyb20gdGhpcworLy8gbW9kdWxlLgorI2RlZmluZSBUUk5HX0lSUUZMQUdNQVNLX1NIVVRET1dOX09WRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFRSTkdfSVJRRkxBR01BU0tfU0hVVERPV05fT1ZGX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFJOR19JUlFGTEFHTUFTS19TSFVURE9XTl9PVkZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBUUk5HX0lSUUZMQUdNQVNLX1NIVVRET1dOX09WRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJEWQorLy8KKy8vIDE6IEFsbG93IElSUUZMQUdTVEFULlJEWSB0byBhY3RpdmF0ZSB0aGUgaW50ZXJydXB0IGZyb20gdGhpcyBtb2R1bGUuCisjZGVmaW5lIFRSTkdfSVJRRkxBR01BU0tfUkRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVFJOR19JUlFGTEFHTUFTS19SRFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBUUk5HX0lSUUZMQUdNQVNLX1JEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFRSTkdfSVJRRkxBR01BU0tfUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fSVJRRkxBR0NMUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIFNIVVRET1dOX09WRgorLy8KKy8vIDE6IENsZWFyIElSUUZMQUdTVEFULlNIVVRET1dOX09WRi4KKyNkZWZpbmUgVFJOR19JUlFGTEFHQ0xSX1NIVVRET1dOX09WRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBUUk5HX0lSUUZMQUdDTFJfU0hVVERPV05fT1ZGX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRSTkdfSVJRRkxBR0NMUl9TSFVURE9XTl9PVkZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVFJOR19JUlFGTEFHQ0xSX1NIVVRET1dOX09WRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRFkKKy8vCisvLyAxOiBDbGVhciBJUlFGTEFHU1RBVC5SRFkuCisjZGVmaW5lIFRSTkdfSVJRRkxBR0NMUl9SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVFJOR19JUlFGTEFHQ0xSX1JEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBUUk5HX0lSUUZMQUdDTFJfUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFRSTkdfSVJRRkxBR0NMUl9SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gU1RBUlRVUF9DWUNMRVMKKy8vCisvLyBUaGlzIGZpZWxkIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIChiZXR3ZWVuIDJeOCBhbmQgMl4yNCkgdGFrZW4gdG8KKy8vIGdhdGhlciBlbnRyb3B5IGZyb20gdGhlIEZST3MgZHVyaW5nIHN0YXJ0dXAuIElmIHRoZSB3cml0dGVuIHZhbHVlIG9mIHRoaXMKKy8vIGZpZWxkIGlzIHplcm8sIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBpcyAyXjI0LCBvdGhlcndpc2UgdGhlIG51bWJlciBvZgorLy8gc2FtcGxlcyBlcXVhbHMgdGhlIHdyaXR0ZW4gdmFsdWUgdGltZXMgMl44LgorLy8KKy8vIDB4MDAwMDogMl4yNCBzYW1wbGVzCisvLyAweDAwMDE6IDEqMl44IHNhbXBsZXMKKy8vIDB4MDAwMjogMioyXjggc2FtcGxlcworLy8gMHgwMDAzOiAzKjJeOCBzYW1wbGVzCisvLyAuLi4KKy8vIDB4ODAwMDogMzI3NjgqMl44IHNhbXBsZXMKKy8vIDB4QzAwMDogNDkxNTIqMl44IHNhbXBsZXMKKy8vIC4uLgorLy8gMHhGRkZGOiA2NTUzNSoyXjggc2FtcGxlcworLy8KKy8vIFRoaXMgZmllbGQgY2FuIG9ubHkgYmUgbW9kaWZpZWQgd2hpbGUgVFJOR19FTiBpcyAwLiBJZiAxIGFuIHVwZGF0ZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBUUk5HX0NUTF9TVEFSVFVQX0NZQ0xFU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFRSTkdfQ1RMX1NUQVJUVVBfQ1lDTEVTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgVFJOR19DVExfU1RBUlRVUF9DWUNMRVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzEwXSBUUk5HX0VOCisvLworLy8gMDogRm9yY2VzIGFsbCBUUk5HIGxvZ2ljIGJhY2sgaW50byB0aGUgaWRsZSBzdGF0ZSBpbW1lZGlhdGVseS4KKy8vIDE6IFN0YXJ0cyBUUk5HLCBnYXRoZXJpbmcgZW50cm9weSBmcm9tIHRoZSBGUk9zIGZvciB0aGUgbnVtYmVyIG9mIHNhbXBsZXMKKy8vIGRldGVybWluZWQgYnkgU1RBUlRVUF9DWUNMRVMuCisjZGVmaW5lIFRSTkdfQ1RMX1RSTkdfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgVFJOR19DVExfVFJOR19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBUUk5HX0NUTF9UUk5HX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFRSTkdfQ1RMX1RSTkdfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbMl0gTk9fTEZTUl9GQgorLy8KKy8vIDE6IFJlbW92ZSBYTk9SIGZlZWRiYWNrIGZyb20gdGhlIG1haW4gTEZTUiwgY29udmVydGluZyBpdCBpbnRvIGEgbm9ybWFsCisvLyBzaGlmdCByZWdpc3RlciBmb3IgdGhlIFhPUi1lZCBvdXRwdXRzIG9mIHRoZSBGUk9zIChzaGlmdGluZyBkYXRhIGluIG9uIHRoZQorLy8gTFNCIHNpZGUpLiBBICcxJyBhbHNvIGZvcmNlcyB0aGUgTEZTUiB0byBzYW1wbGUgY29udGludW91c2x5LgorLy8KKy8vIFRoaXMgYml0IGNhbiBvbmx5IGJlIHNldCB0byAnMScgd2hlbiBURVNUX01PREUgaXMgYWxzbyBzZXQgdG8gJzEnIGFuZCBzaG91bGQKKy8vIG5vdCBiZSB1c2VkIGZvciBvdGhlciB0aGFuIHRlc3QgcHVycG9zZXMKKyNkZWZpbmUgVFJOR19DVExfTk9fTEZTUl9GQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBUUk5HX0NUTF9OT19MRlNSX0ZCX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFRSTkdfQ1RMX05PX0xGU1JfRkJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVFJOR19DVExfTk9fTEZTUl9GQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBURVNUX01PREUKKy8vCisvLyAxOiBFbmFibGVzIGFjY2VzcyB0byB0aGUgVEVTVENOVCBhbmQgTEZTUjAvTEZTUjEvTEZTUjIgcmVnaXN0ZXJzICh0aGUgbGF0dGVyCisvLyBhcmUgYXV0b21hdGljYWxseSBjbGVhcmVkIGJlZm9yZSBlbmFibGluZyBhY2Nlc3MpICBhbmQga2VlcHMKKy8vIElSUUZMQUdTVEFULk5FRURfQ0xPQ0sgYXQgJzEnLgorLy8KKy8vIFRoaXMgYml0IHNoYWxsIG5vdCBiZSB1c2VkIHVubGVzcyB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIExGU1Igc2VlZCBwcmlvciB0bworLy8gY3JlYXRpbmcgYSBuZXcgcmFuZG9tIHZhbHVlLiBBbGwgb3RoZXIgdGVzdGluZyBpcyBkb25lIGV4dGVybmFsIHRvIHJlZ2lzdGVyCisvLyBjb250cm9sLgorI2RlZmluZSBUUk5HX0NUTF9URVNUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFRSTkdfQ1RMX1RFU1RfTU9ERV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFJOR19DVExfVEVTVF9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBUUk5HX0NUTF9URVNUX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX0NGRzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBNQVhfUkVGSUxMX0NZQ0xFUworLy8KKy8vIFRoaXMgZmllbGQgZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2FtcGxlcyAoYmV0d2VlbiAyXjggYW5kIDJeMjQpCisvLyB0YWtlbiB0byByZS1nZW5lcmF0ZSBlbnRyb3B5IGZyb20gdGhlIEZST3MgYWZ0ZXIgcmVhZGluZyBvdXQgYSA2NCBiaXRzCisvLyByYW5kb20gbnVtYmVyLiBJZiB0aGUgd3JpdHRlbiB2YWx1ZSBvZiB0aGlzIGZpZWxkIGlzIHplcm8sIHRoZSBudW1iZXIgb2YKKy8vIHNhbXBsZXMgaXMgMl4yNCwgb3RoZXJ3aXNlIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBlcXVhbHMgdGhlIHdyaXR0ZW4gdmFsdWUKKy8vIHRpbWVzIDJeOC4KKy8vCisvLyAweDAwMDA6IDJeMjQgc2FtcGxlcworLy8gMHgwMDAxOiAxKjJeOCBzYW1wbGVzCisvLyAweDAwMDI6IDIqMl44IHNhbXBsZXMKKy8vIDB4MDAwMzogMyoyXjggc2FtcGxlcworLy8gLi4uCisvLyAweDgwMDA6IDMyNzY4KjJeOCBzYW1wbGVzCisvLyAweEMwMDA6IDQ5MTUyKjJeOCBzYW1wbGVzCisvLyAuLi4KKy8vIDB4RkZGRjogNjU1MzUqMl44IHNhbXBsZXMKKy8vCisvLyBUaGlzIGZpZWxkIGNhbiBvbmx5IGJlIG1vZGlmaWVkIHdoaWxlIENUTC5UUk5HX0VOIGlzIDAuCisjZGVmaW5lIFRSTkdfQ0ZHMF9NQVhfUkVGSUxMX0NZQ0xFU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVFJOR19DRkcwX01BWF9SRUZJTExfQ1lDTEVTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBUUk5HX0NGRzBfTUFYX1JFRklMTF9DWUNMRVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzExOjhdIFNNUExfRElWCisvLworLy8gVGhpcyBmaWVsZCBkaXJlY3RseSBjb250cm9scyB0aGUgbnVtYmVyIG9mIGNsb2NrIGN5Y2xlcyBiZXR3ZWVuIHNhbXBsZXMKKy8vIHRha2VuIGZyb20gdGhlIEZST3MuIERlZmF1bHQgdmFsdWUgMCBpbmRpY2F0ZXMgdGhhdCBzYW1wbGVzIGFyZSB0YWtlbiBldmVyeQorLy8gY2xvY2sgY3ljbGUsCisvLyBtYXhpbXVtIHZhbHVlIDB4RiB0YWtlcyBvbmUgc2FtcGxlIGV2ZXJ5IDE2IGNsb2NrIGN5Y2xlcy4KKy8vIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gYSB2YWx1ZSBzdWNoIHRoYXQgdGhlIHNsb3dlc3QgRlJPIChldmVuIHVuZGVyCisvLyB3b3JzdC1jYXNlCisvLyBjb25kaXRpb25zKSBoYXMgYSBjeWNsZSB0aW1lIGxlc3MgdGhhbiB0d2ljZSB0aGUgc2FtcGxlIHBlcmlvZC4KKy8vCisvLyBUaGlzIGZpZWxkIGNhbiBvbmx5IGJlIG1vZGlmaWVkIHdoaWxlIENUTC5UUk5HX0VOIGlzICcwJy4KKyNkZWZpbmUgVFJOR19DRkcwX1NNUExfRElWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBUUk5HX0NGRzBfU01QTF9ESVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIFRSTkdfQ0ZHMF9TTVBMX0RJVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gTUlOX1JFRklMTF9DWUNMRVMKKy8vCisvLyBUaGlzIGZpZWxkIGRldGVybWluZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHNhbXBsZXMgKGJldHdlZW4gMl42IGFuZCAyXjE0KQorLy8gdGFrZW4gdG8gcmUtZ2VuZXJhdGUgZW50cm9weSBmcm9tIHRoZSBGUk9zIGFmdGVyIHJlYWRpbmcgb3V0IGEgNjQgYml0cworLy8gcmFuZG9tIG51bWJlci4gSWYgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgaXMgemVybywgdGhlIG51bWJlciBvZiBzYW1wbGVzIGlzCisvLyBmaXhlZCB0byB0aGUgdmFsdWUgZGV0ZXJtaW5lZCBieSB0aGUgTUFYX1JFRklMTF9DWUNMRVMgZmllbGQsIG90aGVyd2lzZSB0aGUKKy8vIG1pbmltdW0gbnVtYmVyIG9mIHNhbXBsZXMgZXF1YWxzIHRoZSB3cml0dGVuIHZhbHVlIHRpbWVzIDY0ICh3aGljaCBjYW4gYmUgdXAKKy8vIHRvIDJeMTQpLiBUbyBlbnN1cmUgc2FtZSBlbnRyb3B5IGluIGFsbCBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlcnMgdGhlIHZhbHVlIDAKKy8vIHNob3VsZCBiZSB1c2VkLiBUaGVuIE1BWF9SRUZJTExfQ1lDTEVTIGNvbnRyb2xzIHRoZSBtaW5pbXVtIHJlZmlsbCBpbnRlcnZhbC4KKy8vIFRoZSBudW1iZXIgb2Ygc2FtcGxlcyBkZWZpbmVkIGhlcmUgY2Fubm90IGJlIGhpZ2hlciB0aGFuIHRoZSBudW1iZXIgZGVmaW5lZAorLy8gYnkgdGhlICdtYXhfcmVmaWxsX2N5Y2xlcycgZmllbGQgKGkuZS4gdGhhdCBmaWVsZCB0YWtlcyBwcmVjZWRlbmNlKS4gTm8KKy8vIHJhbmRvbSB2YWx1ZSB3aWxsIGJlIGNyZWF0ZWQgaWYgbWluIHJlZmlsbCA+IG1heCByZWZpbGwuCisvLworLy8gVGhpcyBmaWVsZCBjYW4gb25seSBiZSBtb2RpZmllZCB3aGlsZSBDVEwuVFJOR19FTiA9IDAuCisvLworLy8gMHgwMDogTWluaW11bSBzYW1wbGVzID0gTUFYX1JFRklMTF9DWUNMRVMgKGFsbCBudW1iZXJzIGhhdmUgc2FtZSBlbnRyb3B5KQorLy8gMHgwMTogMSoyXjYgc2FtcGxlcworLy8gMHgwMjogMioyXjYgc2FtcGxlcworLy8gLi4uCisvLyAweEZGOiAyNTUqMl42IHNhbXBsZXMKKyNkZWZpbmUgVFJOR19DRkcwX01JTl9SRUZJTExfQ1lDTEVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBUUk5HX0NGRzBfTUlOX1JFRklMTF9DWUNMRVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIFRSTkdfQ0ZHMF9NSU5fUkVGSUxMX0NZQ0xFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fQUxBUk1DTlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI5OjI0XSBTSFVURE9XTl9DTlQKKy8vCisvLyBSZWFkLW9ubHksIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mICcxJyBiaXRzIGluIEFMQVJNU1RPUCByZWdpc3Rlci4KKy8vIFRoZSBtYXhpbXVtIHZhbHVlIGVxdWFscyB0aGUgbnVtYmVyIG9mIEZST3MuCisjZGVmaW5lIFRSTkdfQUxBUk1DTlRfU0hVVERPV05fQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVFJOR19BTEFSTUNOVF9TSFVURE9XTl9DTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzRjAwMDAwMAorI2RlZmluZSBUUk5HX0FMQVJNQ05UX1NIVVRET1dOX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjA6MTZdIFNIVVRET1dOX1RIUgorLy8KKy8vIFRocmVzaG9sZCBzZXR0aW5nIGZvciBnZW5lcmF0aW5nIElSUUZMQUdTVEFULlNIVVRET1dOX09WRiBpbnRlcnJ1cHQuIFRoZQorLy8gaW50ZXJydXB0IGlzIHRyaWdnZXJlZCB3aGVuIFNIVVRET1dOX0NOVCB2YWx1ZSBleGNlZWRzIHRoaXMgYml0IGZpZWxkLgorI2RlZmluZSBUUk5HX0FMQVJNQ05UX1NIVVRET1dOX1RIUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFRSTkdfQUxBUk1DTlRfU0hVVERPV05fVEhSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxRjAwMDAKKyNkZWZpbmUgVFJOR19BTEFSTUNOVF9TSFVURE9XTl9USFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICBbNzowXSBBTEFSTV9USFIKKy8vCisvLyBBbGFybSBkZXRlY3Rpb24gdGhyZXNob2xkIGZvciB0aGUgcmVwZWF0aW5nIHBhdHRlcm4gZGV0ZWN0b3JzIG9uIGVhY2ggRlJPLgorLy8gQW4gRlJPICdhbGFybSBldmVudCcgaXMgZGVjbGFyZWQgd2hlbiBhIHJlcGVhdGluZyBwYXR0ZXJuIChvZiB1cCB0byBmb3VyCisvLyBzYW1wbGVzIGxlbmd0aCkgaXMgZGV0ZWN0ZWQgY29udGludW91c2x5IGZvciB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZGVmaW5lZAorLy8gYnkgdGhpcyBmaWVsZCdzIHZhbHVlLiBSZXNldCB2YWx1ZSAweEZGIHNob3VsZCBrZWVwIHRoZSBudW1iZXIgb2YgJ2FsYXJtCisvLyBldmVudHMnIHRvIGEgbWFuYWdlYWJsZSBsZXZlbC4KKyNkZWZpbmUgVFJOR19BTEFSTUNOVF9BTEFSTV9USFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBUUk5HX0FMQVJNQ05UX0FMQVJNX1RIUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIFRSTkdfQUxBUk1DTlRfQUxBUk1fVEhSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fRlJPRU4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsyMzowXSBGUk9fTUFTSworLy8KKy8vIEVuYWJsZSBiaXRzIGZvciB0aGUgaW5kaXZpZHVhbCBGUk9zLiBBICcxJyBpbiBiaXQgW25dIGVuYWJsZXMgRlJPICduJy4KKy8vIERlZmF1bHQgc3RhdGUgaXMgYWxsICcxJ3MgdG8gZW5hYmxlIGFsbCBGUk9zIGFmdGVyIHBvd2VyLXVwLiBOb3RlIHRoYXQgdGhleQorLy8gYXJlIG5vdCBhY3R1YWxseSBzdGFydGVkIHVwIGJlZm9yZSB0aGUgQ1RMLlRSTkdfRU4gYml0ICBpcyBzZXQgdG8gJzEnLgorLy8KKy8vIEJpdHMgYXJlIGF1dG9tYXRpY2FsbHkgZm9yY2VkIHRvICcwJyBoZXJlIChhbmQgY2Fubm90IGJlIHdyaXR0ZW4gdG8gJzEnKQorLy8gd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluICBBTEFSTVNUT1AuRlJPX0ZMQUdTIGhhcyB2YWx1ZSAnMScuCisjZGVmaW5lIFRSTkdfRlJPRU5fRlJPX01BU0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgVFJOR19GUk9FTl9GUk9fTUFTS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBUUk5HX0ZST0VOX0ZST19NQVNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX0ZST0RFVFVORQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzIzOjBdIEZST19NQVNLCisvLworLy8gRGUtdHVuZSBiaXRzIGZvciB0aGUgaW5kaXZpZHVhbCBGUk9zLiBBICcxJyBpbiBiaXQgW25dIGxldHMgRlJPICduJyBydW4KKy8vIGFwcHJveGltYXRlbHkgNSUgZmFzdGVyLiBUaGUgdmFsdWUgb2Ygb25lIG9mIHRoZXNlIGJpdHMgbWF5IG9ubHkgYmUgY2hhbmdlZAorLy8gd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgRlJPIGlzIHR1cm5lZCBvZmYgKGJ5IHRlbXBvcmFyaWx5IHdyaXRpbmcgYSAnMCcgaW4KKy8vIHRoZSBjb3JyZXNwb25kaW5nCisvLyBiaXQgb2YgdGhlIEZST0VOLkZST19NQVNLIHJlZ2lzdGVyKS4KKyNkZWZpbmUgVFJOR19GUk9ERVRVTkVfRlJPX01BU0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBUUk5HX0ZST0RFVFVORV9GUk9fTUFTS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIFRSTkdfRlJPREVUVU5FX0ZST19NQVNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fQUxBUk1NQVNLCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMjM6MF0gRlJPX01BU0sKKy8vCisvLyBMb2dnaW5nIGJpdHMgZm9yIHRoZSAnYWxhcm0gZXZlbnRzJyBvZiBpbmRpdmlkdWFsIEZST3MuIEEgJzEnIGluIGJpdCBbbl0KKy8vIGluZGljYXRlcyBGUk8gJ24nIGV4cGVyaWVuY2VkIGFuICdhbGFybSBldmVudCcuCisjZGVmaW5lIFRSTkdfQUxBUk1NQVNLX0ZST19NQVNLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgVFJOR19BTEFSTU1BU0tfRlJPX01BU0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBUUk5HX0FMQVJNTUFTS19GUk9fTUFTS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX0FMQVJNU1RPUAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzIzOjBdIEZST19GTEFHUworLy8KKy8vIExvZ2dpbmcgYml0cyBmb3IgdGhlICdhbGFybSBldmVudHMnIG9mIGluZGl2aWR1YWwgRlJPcy4gQSAnMScgaW4gYml0IFtuXQorLy8gaW5kaWNhdGVzIEZSTyAnbicgZXhwZXJpZW5jZWQgbW9yZSB0aGFuIG9uZSAnYWxhcm0gZXZlbnQnIGluIHF1aWNrCisvLyBzdWNjZXNzaW9uIGFuZCBoYXMgYmVlbiB0dXJuZWQgb2ZmLiBBICcxJyBpbiB0aGlzIGZpZWxkIGZvcmNlcyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEZST0VOLkZST19NQVNLIHRvICcwJy4KKyNkZWZpbmUgVFJOR19BTEFSTVNUT1BfRlJPX0ZMQUdTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBUUk5HX0FMQVJNU1RPUF9GUk9fRkxBR1NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIFRSTkdfQUxBUk1TVE9QX0ZST19GTEFHU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fTEZTUjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBMRlNSXzMxXzAKKy8vCisvLyBCaXRzIFszMTowXSBvZiB0aGUgbWFpbiBlbnRyb3B5IGFjY3VtdWxhdGlvbiBMRlNSLiBSZWdpc3RlciBjYW4gb25seSBiZQorLy8gYWNjZXNzZWQgd2hlbiBDVEwuVEVTVF9NT0RFICA9IDEuCisvLyBSZWdpc3RlciBjb250ZW50cyB3aWxsIGJlIGNsZWFyZWQgdG8gemVybyBiZWZvcmUgYWNjZXNzIGlzIGVuYWJsZWQuCisjZGVmaW5lIFRSTkdfTEZTUjBfTEZTUl8zMV8wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVFJOR19MRlNSMF9MRlNSXzMxXzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBUUk5HX0xGU1IwX0xGU1JfMzFfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX0xGU1IxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gTEZTUl82M18zMgorLy8KKy8vIEJpdHMgWzYzOjMyXSBvZiB0aGUgbWFpbiBlbnRyb3B5IGFjY3VtdWxhdGlvbiBMRlNSLiBSZWdpc3RlciBjYW4gb25seSBiZQorLy8gYWNjZXNzZWQgd2hlbiBDVEwuVEVTVF9NT0RFID0gMS4KKy8vIFJlZ2lzdGVyIGNvbnRlbnRzIHdpbGwgYmUgY2xlYXJlZCB0byB6ZXJvIGJlZm9yZSBhY2Nlc3MgaXMgZW5hYmxlZC4KKyNkZWZpbmUgVFJOR19MRlNSMV9MRlNSXzYzXzMyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBUUk5HX0xGU1IxX0xGU1JfNjNfMzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFRSTkdfTEZTUjFfTEZTUl82M18zMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fTEZTUjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNjowXSBMRlNSXzgwXzY0CisvLworLy8gQml0cyBbODA6NjRdIG9mIHRoZSBtYWluIGVudHJvcHkgYWNjdW11bGF0aW9uIExGU1IuIFJlZ2lzdGVyIGNhbiBvbmx5IGJlCisvLyBhY2Nlc3NlZCB3aGVuIENUTC5URVNUX01PREUgPSAxLgorLy8gUmVnaXN0ZXIgY29udGVudHMgd2lsbCBiZSBjbGVhcmVkIHRvIHplcm8gYmVmb3JlIGFjY2VzcyBpcyBlbmFibGVkLgorI2RlZmluZSBUUk5HX0xGU1IyX0xGU1JfODBfNjRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFRSTkdfTEZTUjJfTEZTUl84MF82NF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMUZGRkYKKyNkZWZpbmUgVFJOR19MRlNSMl9MRlNSXzgwXzY0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19IV09QVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzExOjZdIE5SX09GX0ZST1MKKy8vCisvLyBOdW1iZXIgb2YgRlJPcyBpbXBsZW1lbnRlZCBpbiB0aGlzIFRSTkcsIHZhbHVlIDI0IChkZWNpbWFsKS4KKyNkZWZpbmUgVFJOR19IV09QVF9OUl9PRl9GUk9TX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBUUk5HX0hXT1BUX05SX09GX0ZST1NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkMwCisjZGVmaW5lIFRSTkdfSFdPUFRfTlJfT0ZfRlJPU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fSFdWRVIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoyNF0gSFdfTUFKT1JfVkVSCisvLworLy8gNCBiaXRzIGJpbmFyeSBlbmNvZGluZyBvZiB0aGUgbWFqb3IgaGFyZHdhcmUgcmV2aXNpb24gbnVtYmVyLgorI2RlZmluZSBUUk5HX0hXVkVSMF9IV19NQUpPUl9WRVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFRSTkdfSFdWRVIwX0hXX01BSk9SX1ZFUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgVFJOR19IV1ZFUjBfSFdfTUFKT1JfVkVSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjIwXSBIV19NSU5PUl9WRVIKKy8vCisvLyA0IGJpdHMgYmluYXJ5IGVuY29kaW5nIG9mIHRoZSBtaW5vciBoYXJkd2FyZSByZXZpc2lvbiBudW1iZXIuCisjZGVmaW5lIFRSTkdfSFdWRVIwX0hXX01JTk9SX1ZFUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVFJOR19IV1ZFUjBfSFdfTUlOT1JfVkVSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBUUk5HX0hXVkVSMF9IV19NSU5PUl9WRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTZdIEhXX1BBVENIX0xWTAorLy8KKy8vIDQgYml0cyBiaW5hcnkgZW5jb2Rpbmcgb2YgdGhlIGhhcmR3YXJlIHBhdGNoIGxldmVsLCBpbml0aWFsIHJlbGVhc2Ugd2lsbAorLy8gY2FycnkgdmFsdWUgemVyby4KKyNkZWZpbmUgVFJOR19IV1ZFUjBfSFdfUEFUQ0hfTFZMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBUUk5HX0hXVkVSMF9IV19QQVRDSF9MVkxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIFRSTkdfSFdWRVIwX0hXX1BBVENIX0xWTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gRUlQX05VTV9DT01QTAorLy8KKy8vIEJpdC1ieS1iaXQgbG9naWMgY29tcGxlbWVudCBvZiBiaXRzIFs3OjBdLiBUaGlzIFRSTkcgZ2l2ZXMgMHhCNC4KKyNkZWZpbmUgVFJOR19IV1ZFUjBfRUlQX05VTV9DT01QTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBUUk5HX0hXVkVSMF9FSVBfTlVNX0NPTVBMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIFRSTkdfSFdWRVIwX0VJUF9OVU1fQ09NUExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gRUlQX05VTQorLy8KKy8vIDggYml0cyBiaW5hcnkgZW5jb2Rpbmcgb2YgdGhlIG1vZHVsZSBudW1iZXIuIFRoaXMgVFJORyBnaXZlcyAweDRCLgorI2RlZmluZSBUUk5HX0hXVkVSMF9FSVBfTlVNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFRSTkdfSFdWRVIwX0VJUF9OVU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgVFJOR19IV1ZFUjBfRUlQX05VTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19JUlFTVEFUTUFTSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIFNIVVRET1dOX09WRgorLy8KKy8vIFNodXRkb3duIE92ZXJmbG93IChyZXN1bHQgb2YgSVJRRkxBR1NUQVQuU0hVVERPV05fT1ZGIEFORCdlZCB3aXRoCisvLyBJUlFGTEFHTUFTSy5TSFVURE9XTl9PVkYpCisjZGVmaW5lIFRSTkdfSVJRU1RBVE1BU0tfU0hVVERPV05fT1ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVFJOR19JUlFTVEFUTUFTS19TSFVURE9XTl9PVkZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUUk5HX0lSUVNUQVRNQVNLX1NIVVRET1dOX09WRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFRSTkdfSVJRU1RBVE1BU0tfU0hVVERPV05fT1ZGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUkRZCisvLworLy8gTmV3IHJhbmRvbSB2YWx1ZSBhdmFpbGFibGUgKHJlc3VsdCBvZiBJUlFGTEFHU1RBVC5SRFkgQU5EJ2VkIHdpdGgKKy8vIElSUUZMQUdNQVNLLlJEWSkKKyNkZWZpbmUgVFJOR19JUlFTVEFUTUFTS19SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUUk5HX0lSUVNUQVRNQVNLX1JEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRSTkdfSVJRU1RBVE1BU0tfUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVFJOR19JUlFTVEFUTUFTS19SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19IV1ZFUjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBSRVYKKy8vCisvLyBUaGUgcmV2aXNpb24gbnVtYmVyIG9mIHRoaXMgbW9kdWxlIGlzIFJldiAyLjAuCisjZGVmaW5lIFRSTkdfSFdWRVIxX1JFVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVFJOR19IV1ZFUjFfUkVWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBUUk5HX0hXVkVSMV9SRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX0lSUVNFVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX1NXUkVTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBSRVNFVAorLy8KKy8vIFdyaXRlICcxJyB0byBzb2Z0IHJlc2V0ICwgcmVzZXQgd2lsbCBiZSBsb3cgZm9yIDQtNSBjbG9jayBjeWNsZXMuIFBvbGwgdG8gMAorLy8gZm9yIHJlc2V0IHRvIGJlIGNvbXBsZXRlZC4KKyNkZWZpbmUgVFJOR19TV1JFU0VUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUUk5HX1NXUkVTRVRfUkVTRVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRSTkdfU1dSRVNFVF9SRVNFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVFJOR19TV1JFU0VUX1JFU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19JUlFTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFRSTkcgSW50ZXJydXB0IHN0YXR1cy4gT1InZWQgdmVyc2lvbiBvZiBJUlFGTEFHU1RBVC5TSFVURE9XTl9PVkYgYW5kCisvLyBJUlFGTEFHU1RBVC5SRFkKKyNkZWZpbmUgVFJOR19JUlFTVEFUX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUUk5HX0lSUVNUQVRfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRSTkdfSVJRU1RBVF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVFJOR19JUlFTVEFUX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX1RSTkdfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfdHlwZXMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMxMDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3R5cGVzLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod190eXBlcy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMi0xNSAxMDo0MDo1NiArMDEwMCAoVHVlLCAxNSBEZWMgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTMwNworKgorKiAgRGVzY3JpcHRpb246ICAgIENvbW1vbiB0eXBlcyBhbmQgbWFjcm9zLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX1RZUEVTX0hfXworI2RlZmluZSBfX0hXX1RZUEVTX0hfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPGluYy9od19jaGlwX2RlZi5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ29tbW9uIGRyaXZlcmxpYiB0eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3R5cGVkZWYgdm9pZCAoKiBGUFRSX1ZPSURfVk9JRF9UKSAodm9pZCk7Cit0eXBlZGVmIHZvaWQgKCogRlBUUl9WT0lEX1VJTlQ4X1QpICh1aW50OF90KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc3ltYm9sIGZvcmNlcyBzaW1wbGUgZHJpdmVybGliIGZ1bmN0aW9ucyB0byBiZSBpbmxpbmVkIGluIHRoZSBjb2RlCisvLyBpbnN0ZWFkIG9mIHVzaW5nIGZ1bmN0aW9uIGNhbGxzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZm5kZWYgX19TVEFUSUNfSU5MSU5FCisjZGVmaW5lIF9fU1RBVElDX0lOTElORSBzdGF0aWMgaW5saW5lCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEM5OSB0eXBlcyBvbmx5IGFsbG93cyBiaXRmaWVsZCBkZWZpbnRpb25zIG9uIGNlcnRhaW4gZGF0YXR5cGVzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3R5cGVkZWYgdW5zaWduZWQgaW50ICBfX1VJTlQzMjsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hY3JvcyBmb3IgZGlyZWN0IGhhcmR3YXJlIGFjY2Vzcy4KKy8vCisvLyBJZiB1c2luZyB0aGVzZSBtYWNyb3MgdGhlIHByb2dyYW1tZXIgc2hvdWxkIGJlIGF3YXJlIG9mIGFueSBsaW1pdGF0aW9ucyB0bworLy8gdGhlIGFkZHJlc3MgYWNjZXNzZWQgaS5lLiBpZiBpdCBzdXBwb3J0cyB3b3JkIGFuZC9vciBieXRlIGFjY2Vzcy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBXb3JkICgzMiBiaXQpIGFjY2VzcyB0byBhZGRyZXNzIHgKKy8vIFJlYWQgZXhhbXBsZSAgOiBteTMyQml0VmFyID0gSFdSRUcoYmFzZV9hZGRyICsgb2Zmc2V0KSA7CisvLyBXcml0ZSBleGFtcGxlIDogSFdSRUcoYmFzZV9hZGRyICsgb2Zmc2V0KSA9IG15MzJCaXRWYXIgOworI2RlZmluZSBIV1JFRyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSh4KSkpCisKKy8vIEhhbGYgd29yZCAoMTYgYml0KSBhY2Nlc3MgdG8gYWRkcmVzcyB4CisvLyBSZWFkIGV4YW1wbGUgIDogbXkxNkJpdFZhciA9IEhXUkVHSChiYXNlX2FkZHIgKyBvZmZzZXQpIDsKKy8vIFdyaXRlIGV4YW1wbGUgOiBIV1JFR0goYmFzZV9hZGRyICsgb2Zmc2V0KSA9IG15MTZCaXRWYXIgOworI2RlZmluZSBIV1JFR0goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoeCkpKQorCisvLyBCeXRlICg4IGJpdCkgYWNjZXNzIHRvIGFkZHJlc3MgeAorLy8gUmVhZCBleGFtcGxlICA6IG15OEJpdFZhciA9IEhXUkVHQihiYXNlX2FkZHIgKyBvZmZzZXQpIDsKKy8vIFdyaXRlIGV4YW1wbGUgOiBIV1JFR0IoYmFzZV9hZGRyICsgb2Zmc2V0KSA9IG15OEJpdFZhciA7CisjZGVmaW5lIEhXUkVHQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHgpKSkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hY3JvcyBmb3IgaGFyZHdhcmUgYWNjZXNzIHRvIGJpdC1iYW5kIHN1cHBvcnRlZCBhZGRyZXNzZXMgdmlhIHRoZSBiaXQtYmFuZCByZWdpb24uCisvLworLy8gTWFjcm9zIGNhbGN1bGF0ZSB0aGUgY29ycmVzcG9uZGluZyBhZGRyZXNzIHRvIGFjY2VzcyBpbiB0aGUgYml0LWJhbmQgcmVnaW9uCisvLyBiYXNlZCBvbiB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeS9yZWdpc3RlciBhbmQgdGhlIGJpdCBudW1iZXIuCisvLworLy8gRG8gTk9UIHVzZSB0aGVzZSBtYWNyb3MgdG8gYWNjZXNzIHRoZSBiaXQtYmFuZCByZWdpb24gZGlyZWN0bHkhCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQml0LWJhbmQgYWNjZXNzIHRvIGFkZHJlc3MgeCBiaXQgbnVtYmVyIGIgdXNpbmcgd29yZCBhY2Nlc3MgKDMyIGJpdCkKKyNkZWZpbmUgSFdSRUdCSVRXKHgsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgSFdSRUcoKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4RjAwMDAwMDApIHwgMHgwMjAwMDAwMCB8ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgKCgodW5zaWduZWQgbG9uZykoeCkgJiAweDAwMEZGRkZGKSA8PCA1KSB8ICgoYikgPDwgMikpCisKKy8vIEJpdC1iYW5kIGFjY2VzcyB0byBhZGRyZXNzIHggYml0IG51bWJlciBiIHVzaW5nIGhhbGYgd29yZCBhY2Nlc3MgKDE2IGJpdCkKKyNkZWZpbmUgSFdSRUdCSVRIKHgsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgSFdSRUdIKCgodW5zaWduZWQgbG9uZykoeCkgJiAweEYwMDAwMDAwKSB8IDB4MDIwMDAwMDAgfCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgoKHVuc2lnbmVkIGxvbmcpKHgpICYgMHgwMDBGRkZGRikgPDwgNSkgfCAoKGIpIDw8IDIpKQorCisvLyBCaXQtYmFuZCBhY2Nlc3MgdG8gYWRkcmVzcyB4IGJpdCBudW1iZXIgYiB1c2luZyBieXRlIGFjY2VzcyAoOCBiaXQpCisjZGVmaW5lIEhXUkVHQklUQih4LCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEhXUkVHQigoKHVuc2lnbmVkIGxvbmcpKHgpICYgMHhGMDAwMDAwMCkgfCAweDAyMDAwMDAwIHwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4MDAwRkZGRkYpIDw8IDUpIHwgKChiKSA8PCAyKSkKKworCisjZW5kaWYgLy8gX19IV19UWVBFU19IX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3VhcnQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjhiYTdmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfdWFydC5oCkBAIC0wLDAgKzEsMTA0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X3VhcnRfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfVUFSVF9IX18KKyNkZWZpbmUgX19IV19VQVJUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIFVBUlQgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRGF0YQorI2RlZmluZSBVQVJUX09fRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIFN0YXR1cworI2RlZmluZSBVQVJUX09fUlNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIEVycm9yIENsZWFyCisjZGVmaW5lIFVBUlRfT19FQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gRmxhZworI2RlZmluZSBVQVJUX09fRlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIEludGVnZXIgQmF1ZC1SYXRlIERpdmlzb3IKKyNkZWZpbmUgVUFSVF9PX0lCUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBGcmFjdGlvbmFsIEJhdWQtUmF0ZSBEaXZpc29yCisjZGVmaW5lIFVBUlRfT19GQlJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8gTGluZSBDb250cm9sCisjZGVmaW5lIFVBUlRfT19MQ1JIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8gQ29udHJvbAorI2RlZmluZSBVQVJUX09fQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKy8vIEludGVycnVwdCBGSUZPIExldmVsIFNlbGVjdAorI2RlZmluZSBVQVJUX09fSUZMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisKKy8vIEludGVycnVwdCBNYXNrIFNldC9DbGVhcgorI2RlZmluZSBVQVJUX09fSU1TQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisKKy8vIFJhdyBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIFVBUlRfT19SSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8gTWFza2VkIEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgVUFSVF9PX01JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorCisvLyBJbnRlcnJ1cHQgQ2xlYXIKKyNkZWZpbmUgVUFSVF9PX0lDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorCisvLyBETUEgQ29udHJvbAorI2RlZmluZSBVQVJUX09fRE1BQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVUFSVF9PX0RSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxMV0gT0UKKy8vCisvLyBVQVJUIE92ZXJydW4gRXJyb3I6CisvLyBUaGlzIGJpdCBpcyBzZXQgdG8gMSBpZiBkYXRhIGlzIHJlY2VpdmVkIGFuZCB0aGUgcmVjZWl2ZSBGSUZPIGlzIGFscmVhZHkKKy8vIGZ1bGwuIFRoZSBGSUZPIGNvbnRlbnRzIHJlbWFpbiB2YWxpZCBiZWNhdXNlIG5vIG1vcmUgZGF0YSBpcyB3cml0dGVuIHdoZW4KKy8vIHRoZSBGSUZPIGlzIGZ1bGwsICwgb25seSB0aGUgY29udGVudHMgb2YgdGhlIHNoaWZ0IHJlZ2lzdGVyIGFyZSBvdmVyd3JpdHRlbi4KKy8vIFRoaXMgaXMgY2xlYXJlZCB0byAwIG9uY2UgdGhlcmUgaXMgYW4gZW1wdHkgc3BhY2UgaW4gdGhlIEZJRk8gYW5kIGEgbmV3CisvLyBjaGFyYWN0ZXIgY2FuIGJlIHdyaXR0ZW4gdG8gaXQuCisjZGVmaW5lIFVBUlRfRFJfT0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgVUFSVF9EUl9PRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBVQVJUX0RSX09FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFVBUlRfRFJfT0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gQkUKKy8vCisvLyBVQVJUIEJyZWFrIEVycm9yOgorLy8gVGhpcyBiaXQgaXMgc2V0IHRvIDEgaWYgYSBicmVhayBjb25kaXRpb24gd2FzIGRldGVjdGVkLCBpbmRpY2F0aW5nIHRoYXQgdGhlCisvLyByZWNlaXZlZCBkYXRhIGlucHV0IChVQVJUUlhEIGlucHV0IHBpbikgd2FzIGhlbGQgTE9XIGZvciBsb25nZXIgdGhhbiBhCisvLyBmdWxsLXdvcmQgdHJhbnNtaXNzaW9uIHRpbWUgKGRlZmluZWQgYXMgc3RhcnQsIGRhdGEsIHBhcml0eSBhbmQgc3RvcCBiaXRzKS4KKy8vIEluIEZJRk8gbW9kZSwgdGhpcyBlcnJvciBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNoYXJhY3RlciBhdCB0aGUgdG9wIG9mIHRoZQorLy8gRklGTyAoaS5lLiwgdGhlIG9sZGVzdCByZWNlaXZlZCBkYXRhIGNoYXJhY3RlciBzaW5jZSBsYXN0IHJlYWQpLiBXaGVuIGEKKy8vIGJyZWFrIG9jY3VycywgYSAwIGNoYXJhY3RlciBpcyBsb2FkZWQgaW50byB0aGUgRklGTy4gVGhlIG5leHQgY2hhcmFjdGVyIGlzCisvLyBlbmFibGVkIGFmdGVyIHRoZSByZWNlaXZlIGRhdGEgaW5wdXQgKFVBUlRSWEQgaW5wdXQgcGluKSBnb2VzIHRvIGEgMQorLy8gKG1hcmtpbmcgc3RhdGUpLCBhbmQgdGhlIG5leHQgdmFsaWQgc3RhcnQgYml0IGlzIHJlY2VpdmVkLgorI2RlZmluZSBVQVJUX0RSX0JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFVBUlRfRFJfQkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgVUFSVF9EUl9CRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBVQVJUX0RSX0JFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFBFCisvLworLy8gVUFSVCBQYXJpdHkgRXJyb3I6CisvLyBXaGVuIHNldCB0byAxLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyaXR5IG9mIHRoZSByZWNlaXZlZCBkYXRhIGNoYXJhY3RlcgorLy8gZG9lcyBub3QgbWF0Y2ggdGhlIHBhcml0eSB0aGF0IHRoZSBMQ1JILkVQUyBhbmQgTENSSC5TUFMgc2VsZWN0LgorLy8gSW4gRklGTyBtb2RlLCB0aGlzIGVycm9yIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hhcmFjdGVyIGF0IHRoZSB0b3Agb2YgdGhlCisvLyBGSUZPIChpLmUuLCB0aGUgb2xkZXN0IHJlY2VpdmVkIGRhdGEgY2hhcmFjdGVyIHNpbmNlIGxhc3QgcmVhZCkuCisjZGVmaW5lIFVBUlRfRFJfUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVUFSVF9EUl9QRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBVQVJUX0RSX1BFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFVBUlRfRFJfUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gRkUKKy8vCisvLyBVQVJUIEZyYW1pbmcgRXJyb3I6CisvLyBXaGVuIHNldCB0byAxLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVjZWl2ZWQgY2hhcmFjdGVyIGRpZCBub3QgaGF2ZSBhIHZhbGlkCisvLyBzdG9wIGJpdCAoYSB2YWxpZCBzdG9wIGJpdCBpcyAxKS4KKy8vIEluIEZJRk8gbW9kZSwgdGhpcyBlcnJvciBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNoYXJhY3RlciBhdCB0aGUgdG9wIG9mIHRoZQorLy8gRklGTyAoaS5lLiwgdGhlIG9sZGVzdCByZWNlaXZlZCBkYXRhIGNoYXJhY3RlciBzaW5jZSBsYXN0IHJlYWQpLgorI2RlZmluZSBVQVJUX0RSX0ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVBUlRfRFJfRkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVUFSVF9EUl9GRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBVQVJUX0RSX0ZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIERBVEEKKy8vCisvLyBEYXRhIHRyYW5zbWl0dGVkIG9yIHJlY2VpdmVkOgorLy8gT24gd3JpdGVzLCB0aGUgdHJhbnNtaXQgZGF0YSBjaGFyYWN0ZXIgaXMgcHVzaGVkIGludG8gdGhlIEZJRk8uCisvLyBPbiByZWFkcywgdGhlIG9sZGVzdCByZWNlaXZlZCBkYXRhIGNoYXJhY3RlciBzaW5jZSB0aGUgbGFzdCByZWFkIGlzCisvLyByZXR1cm5lZC4KKyNkZWZpbmUgVUFSVF9EUl9EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBVQVJUX0RSX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIFVBUlRfRFJfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fUlNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gT0UKKy8vCisvLyBVQVJUIE92ZXJydW4gRXJyb3I6CisvLyBUaGlzIGJpdCBpcyBzZXQgdG8gMSBpZiBkYXRhIGlzIHJlY2VpdmVkIGFuZCB0aGUgcmVjZWl2ZSBGSUZPIGlzIGFscmVhZHkKKy8vIGZ1bGwuIFRoZSBGSUZPIGNvbnRlbnRzIHJlbWFpbiB2YWxpZCBiZWNhdXNlIG5vIG1vcmUgZGF0YSBpcyB3cml0dGVuIHdoZW4KKy8vIHRoZSBGSUZPIGlzIGZ1bGwsICwgb25seSB0aGUgY29udGVudHMgb2YgdGhlIHNoaWZ0IHJlZ2lzdGVyIGFyZSBvdmVyd3JpdHRlbi4KKy8vIFRoaXMgaXMgY2xlYXJlZCB0byAwIG9uY2UgdGhlcmUgaXMgYW4gZW1wdHkgc3BhY2UgaW4gdGhlIEZJRk8gYW5kIGEgbmV3CisvLyBjaGFyYWN0ZXIgY2FuIGJlIHdyaXR0ZW4gdG8gaXQuCisjZGVmaW5lIFVBUlRfUlNSX09FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVUFSVF9SU1JfT0VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBVQVJUX1JTUl9PRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFVBUlRfUlNSX09FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQkUKKy8vCisvLyBVQVJUIEJyZWFrIEVycm9yOgorLy8gVGhpcyBiaXQgaXMgc2V0IHRvIDEgaWYgYSBicmVhayBjb25kaXRpb24gd2FzIGRldGVjdGVkLCBpbmRpY2F0aW5nIHRoYXQgdGhlCisvLyByZWNlaXZlZCBkYXRhIGlucHV0IChVQVJUUlhEIGlucHV0IHBpbikgd2FzIGhlbGQgTE9XIGZvciBsb25nZXIgdGhhbiBhCisvLyBmdWxsLXdvcmQgdHJhbnNtaXNzaW9uIHRpbWUgKGRlZmluZWQgYXMgc3RhcnQsIGRhdGEsIHBhcml0eSBhbmQgc3RvcCBiaXRzKS4KKy8vIFdoZW4gYSBicmVhayBvY2N1cnMsIGEgMCBjaGFyYWN0ZXIgaXMgbG9hZGVkIGludG8gdGhlIEZJRk8uIFRoZSBuZXh0CisvLyBjaGFyYWN0ZXIgaXMgZW5hYmxlZCBhZnRlciB0aGUgcmVjZWl2ZSBkYXRhIGlucHV0IChVQVJUUlhEIGlucHV0IHBpbikgZ29lcworLy8gdG8gYSAxIChtYXJraW5nIHN0YXRlKSwgYW5kIHRoZSBuZXh0IHZhbGlkIHN0YXJ0IGJpdCBpcyByZWNlaXZlZC4KKyNkZWZpbmUgVUFSVF9SU1JfQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBVQVJUX1JTUl9CRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFVBUlRfUlNSX0JFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVUFSVF9SU1JfQkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBQRQorLy8KKy8vIFVBUlQgUGFyaXR5IEVycm9yOgorLy8gV2hlbiBzZXQgdG8gMSwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIHBhcml0eSBvZiB0aGUgcmVjZWl2ZWQgZGF0YSBjaGFyYWN0ZXIKKy8vIGRvZXMgbm90IG1hdGNoIHRoZSBwYXJpdHkgdGhhdCB0aGUgTENSSC5FUFMgYW5kIExDUkguU1BTIHNlbGVjdC4KKyNkZWZpbmUgVUFSVF9SU1JfUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX1JTUl9QRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFVBUlRfUlNSX1BFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVUFSVF9SU1JfUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBGRQorLy8KKy8vIFVBUlQgRnJhbWluZyBFcnJvcjoKKy8vIFdoZW4gc2V0IHRvIDEsIGl0IGluZGljYXRlcyB0aGF0IHRoZSByZWNlaXZlZCBjaGFyYWN0ZXIgZGlkIG5vdCBoYXZlIGEgdmFsaWQKKy8vIHN0b3AgYml0IChhIHZhbGlkIHN0b3AgYml0IGlzIDEpLgorI2RlZmluZSBVQVJUX1JTUl9GRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfUlNSX0ZFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVUFSVF9SU1JfRkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVQVJUX1JTUl9GRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVUFSVF9PX0VDUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzNdIE9FCisvLworLy8gVGhlIGZyYW1pbmcgKEZFKSwgcGFyaXR5IChQRSksIGJyZWFrIChCRSkgYW5kIG92ZXJydW4gKE9FKSBlcnJvcnMgYXJlCisvLyBjbGVhcmVkIHRvIDAgYnkgYW55IHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIuCisjZGVmaW5lIFVBUlRfRUNSX09FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVUFSVF9FQ1JfT0VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBVQVJUX0VDUl9PRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFVBUlRfRUNSX09FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQkUKKy8vCisvLyBUaGUgZnJhbWluZyAoRkUpLCBwYXJpdHkgKFBFKSwgYnJlYWsgKEJFKSBhbmQgb3ZlcnJ1biAoT0UpIGVycm9ycyBhcmUKKy8vIGNsZWFyZWQgdG8gMCBieSBhbnkgd3JpdGUgdG8gdGhpcyByZWdpc3Rlci4KKyNkZWZpbmUgVUFSVF9FQ1JfQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBVQVJUX0VDUl9CRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFVBUlRfRUNSX0JFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVUFSVF9FQ1JfQkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBQRQorLy8KKy8vIFRoZSBmcmFtaW5nIChGRSksIHBhcml0eSAoUEUpLCBicmVhayAoQkUpIGFuZCBvdmVycnVuIChPRSkgZXJyb3JzIGFyZQorLy8gY2xlYXJlZCB0byAwIGJ5IGFueSB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyLgorI2RlZmluZSBVQVJUX0VDUl9QRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfRUNSX1BFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVUFSVF9FQ1JfUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX0VDUl9QRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEZFCisvLworLy8gVGhlIGZyYW1pbmcgKEZFKSwgcGFyaXR5IChQRSksIGJyZWFrIChCRSkgYW5kIG92ZXJydW4gKE9FKSBlcnJvcnMgYXJlCisvLyBjbGVhcmVkIHRvIDAgYnkgYW55IHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIuCisjZGVmaW5lIFVBUlRfRUNSX0ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVUFSVF9FQ1JfRkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBVQVJUX0VDUl9GRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfRUNSX0ZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fRlIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBUWEZFCisvLworLy8gVUFSVCBUcmFuc21pdCBGSUZPIEVtcHR5OgorLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBiaXQgZGVwZW5kcyBvbiB0aGUgc3RhdGUgb2YgTENSSC5GRU4gLgorLy8gICAtIElmIHRoZSBGSUZPIGlzIGRpc2FibGVkLCB0aGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgdHJhbnNtaXQgaG9sZGluZworLy8gcmVnaXN0ZXIgaXMgZW1wdHkuCisvLyAgIC0gSWYgdGhlIEZJRk8gaXMgZW5hYmxlZCwgdGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIHRyYW5zbWl0IEZJRk8gaXMgZW1wdHkuCisvLyBUaGlzIGJpdCBkb2VzIG5vdCBpbmRpY2F0ZSBpZiB0aGVyZSBpcyBkYXRhIGluIHRoZSB0cmFuc21pdCBzaGlmdCByZWdpc3Rlci4KKyNkZWZpbmUgVUFSVF9GUl9UWEZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBVQVJUX0ZSX1RYRkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFVBUlRfRlJfVFhGRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVUFSVF9GUl9UWEZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBSWEZGCisvLworLy8gVUFSVCBSZWNlaXZlIEZJRk8gRnVsbDoKKy8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgYml0IGRlcGVuZHMgb24gdGhlIHN0YXRlIG9mIExDUkguRkVOLgorLy8gICAtIElmIHRoZSBGSUZPIGlzIGRpc2FibGVkLCB0aGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgcmVjZWl2ZSBob2xkaW5nCisvLyByZWdpc3RlciBpcyBmdWxsLgorLy8gICAtIElmIHRoZSBGSUZPIGlzIGVuYWJsZWQsIHRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSByZWNlaXZlIEZJRk8gaXMgZnVsbC4KKyNkZWZpbmUgVUFSVF9GUl9SWEZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBVQVJUX0ZSX1JYRkZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFVBUlRfRlJfUlhGRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgVUFSVF9GUl9SWEZGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBUWEZGCisvLworLy8gVUFSVCBUcmFuc21pdCBGSUZPIEZ1bGw6CisvLyBUcmFuc21pdCBGSUZPIGZ1bGwuIFRoZSBtZWFuaW5nIG9mIHRoaXMgYml0IGRlcGVuZHMgb24gdGhlIHN0YXRlIG9mCisvLyBMQ1JILkZFTi4KKy8vICAgLSBJZiB0aGUgRklGTyBpcyBkaXNhYmxlZCwgdGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIHRyYW5zbWl0IGhvbGRpbmcKKy8vIHJlZ2lzdGVyIGlzIGZ1bGwuCisvLyAgIC0gSWYgdGhlIEZJRk8gaXMgZW5hYmxlZCwgdGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIHRyYW5zbWl0IEZJRk8gaXMgZnVsbC4KKyNkZWZpbmUgVUFSVF9GUl9UWEZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBVQVJUX0ZSX1RYRkZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFVBUlRfRlJfVFhGRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgVUFSVF9GUl9UWEZGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBSWEZFCisvLworLy8gVUFSVCBSZWNlaXZlIEZJRk8gRW1wdHk6CisvLyBSZWNlaXZlIEZJRk8gZW1wdHkuIFRoZSBtZWFuaW5nIG9mIHRoaXMgYml0IGRlcGVuZHMgb24gdGhlIHN0YXRlIG9mCisvLyBMQ1JILkZFTi4KKy8vICAgLSBJZiB0aGUgRklGTyBpcyBkaXNhYmxlZCwgdGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIHJlY2VpdmUgaG9sZGluZworLy8gcmVnaXN0ZXIgaXMgZW1wdHkuCisvLyAgIC0gSWYgdGhlIEZJRk8gaXMgZW5hYmxlZCwgdGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIHJlY2VpdmUgRklGTyBpcyBlbXB0eS4KKyNkZWZpbmUgVUFSVF9GUl9SWEZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBVQVJUX0ZSX1JYRkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFVBUlRfRlJfUlhGRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVUFSVF9GUl9SWEZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBCVVNZCisvLworLy8gVUFSVCBCdXN5OgorLy8gSWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHRoZSBVQVJUIGlzIGJ1c3kgdHJhbnNtaXR0aW5nIGRhdGEuIFRoaXMgYml0CisvLyByZW1haW5zIHNldCB1bnRpbCB0aGUgY29tcGxldGUgYnl0ZSwgaW5jbHVkaW5nIGFsbCB0aGUgc3RvcCBiaXRzLCBoYXMgYmVlbgorLy8gc2VudCBmcm9tIHRoZSBzaGlmdCByZWdpc3Rlci4KKy8vIFRoaXMgYml0IGlzIHNldCBhcyBzb29uIGFzIHRoZSB0cmFuc21pdCBGSUZPIGJlY29tZXMgbm9uLWVtcHR5LCByZWdhcmRsZXNzCisvLyBvZiB3aGV0aGVyIHRoZSBVQVJUIGlzIGVuYWJsZWQgb3Igbm90LgorI2RlZmluZSBVQVJUX0ZSX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFVBUlRfRlJfQlVTWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgVUFSVF9GUl9CVVNZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBVQVJUX0ZSX0JVU1lfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzBdIENUUworLy8KKy8vIENsZWFyIFRvIFNlbmQ6CisvLyBUaGlzIGJpdCBpcyB0aGUgY29tcGxlbWVudCBvZiB0aGUgYWN0aXZlLWxvdyBVQVJUIENUUyBpbnB1dCBwaW4uCisvLyBUaGF0IGlzLCB0aGUgYml0IGlzIDEgd2hlbiBDVFMgaW5wdXQgcGluIGlzIExPVy4KKyNkZWZpbmUgVUFSVF9GUl9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVQVJUX0ZSX0NUU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVBUlRfRlJfQ1RTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVUFSVF9GUl9DVFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVBUlRfT19JQlJECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gRElWSU5UCisvLworLy8gVGhlIGludGVnZXIgYmF1ZCByYXRlIGRpdmlzb3I6CisvLyBUaGUgYmF1ZCByYXRlIGRpdmlzb3IgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgZm9ybXVsYSBiZWxvdzoKKy8vIEJhdWQgcmF0ZSBkaXZpc29yID0gKFVBUlQgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeSkgLyAoMTYgKiBCYXVkIHJhdGUpCisvLyBCYXVkIHJhdGUgZGl2aXNvciBtdXN0IGJlIG1pbmltdW0gMSBhbmQgbWF4aW11bSA2NTUzNS4KKy8vIFRoYXQgaXMsIERJVklOVD0wIGRvZXMgbm90IGdpdmUgYSB2YWxpZCBiYXVkIHJhdGUuCisvLyBTaW1pbGFybHksIGlmIERJVklOVD0weEZGRkYsIGFueSBub24temVybyB2YWx1ZXMgaW4gRkJSRC5ESVZGUkFDIHdpbGwgYmUKKy8vIGlsbGVnYWwuCisvLyBBIHZhbGlkIHZhbHVlIG11c3QgYmUgd3JpdHRlbiB0byB0aGlzIGZpZWxkIGJlZm9yZSB0aGUgVUFSVCBjYW4gYmUgdXNlZCBmb3IKKy8vIFJYIG9yIFRYIG9wZXJhdGlvbnMuCisjZGVmaW5lIFVBUlRfSUJSRF9ESVZJTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVUFSVF9JQlJEX0RJVklOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBVQVJUX0lCUkRfRElWSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVUFSVF9PX0ZCUkQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNTowXSBESVZGUkFDCisvLworLy8gRnJhY3Rpb25hbCBCYXVkLVJhdGUgRGl2aXNvcjoKKy8vIFRoZSBiYXVkIHJhdGUgZGl2aXNvciBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBmb3JtdWxhIGJlbG93OgorLy8gQmF1ZCByYXRlIGRpdmlzb3IgPSAoVUFSVCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5KSAvICgxNiAqIEJhdWQgcmF0ZSkKKy8vIEJhdWQgcmF0ZSBkaXZpc29yIG11c3QgYmUgbWluaW11bSAxIGFuZCBtYXhpbXVtIDY1NTM1LgorLy8gVGhhdCBpcywgSUJSRC5ESVZJTlQ9MCBkb2VzIG5vdCBnaXZlIGEgdmFsaWQgYmF1ZCByYXRlLgorLy8gU2ltaWxhcmx5LCBpZiBJQlJELkRJVklOVD0weEZGRkYsIGFueSBub24temVybyB2YWx1ZXMgaW4gRElWRlJBQyB3aWxsIGJlCisvLyBpbGxlZ2FsLgorLy8gQSB2YWxpZCB2YWx1ZSBtdXN0IGJlIHdyaXR0ZW4gdG8gdGhpcyBmaWVsZCBiZWZvcmUgdGhlIFVBUlQgY2FuIGJlIHVzZWQgZm9yCisvLyBSWCBvciBUWCBvcGVyYXRpb25zLgorI2RlZmluZSBVQVJUX0ZCUkRfRElWRlJBQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFVBUlRfRkJSRF9ESVZGUkFDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgVUFSVF9GQlJEX0RJVkZSQUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVBUlRfT19MQ1JICisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gU1BTCisvLworLy8gVUFSVCBTdGljayBQYXJpdHkgU2VsZWN0OgorLy8KKy8vIDA6IFN0aWNrIHBhcml0eSBpcyBkaXNhYmxlZAorLy8gMTogVGhlIHBhcml0eSBiaXQgaXMgdHJhbnNtaXR0ZWQgYW5kIGNoZWNrZWQgYXMgaW52ZXJ0IG9mIEVQUyBmaWVsZCAoaS5lLgorLy8gdGhlIHBhcml0eSBiaXQgaXMgdHJhbnNtaXR0ZWQgYW5kIGNoZWNrZWQgYXMgMSB3aGVuIEVQUyA9IDApLgorLy8KKy8vIFRoaXMgYml0IGhhcyBubyBlZmZlY3Qgd2hlbiBQRU4gZGlzYWJsZXMgcGFyaXR5IGNoZWNraW5nIGFuZCBnZW5lcmF0aW9uLgorI2RlZmluZSBVQVJUX0xDUkhfU1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVBUlRfTENSSF9TUFNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgVUFSVF9MQ1JIX1NQU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBVQVJUX0xDUkhfU1BTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgIFs2OjVdIFdMRU4KKy8vCisvLyBVQVJUIFdvcmQgTGVuZ3RoOgorLy8gVGhlc2UgYml0cyBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyB0cmFuc21pdHRlZCBvciByZWNlaXZlZCBpbiBhCisvLyBmcmFtZS4KKy8vIEVOVU1zOgorLy8gOCAgICAgICAgICAgICAgICAgICAgICAgIFdvcmQgTGVuZ3RoIDggYml0cworLy8gNyAgICAgICAgICAgICAgICAgICAgICAgIFdvcmQgTGVuZ3RoIDcgYml0cworLy8gNiAgICAgICAgICAgICAgICAgICAgICAgIFdvcmQgTGVuZ3RoIDYgYml0cworLy8gNSAgICAgICAgICAgICAgICAgICAgICAgIFdvcmQgTGVuZ3RoIDUgYml0cworI2RlZmluZSBVQVJUX0xDUkhfV0xFTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFVBUlRfTENSSF9XTEVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgVUFSVF9MQ1JIX1dMRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBVQVJUX0xDUkhfV0xFTl84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIFVBUlRfTENSSF9XTEVOXzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgVUFSVF9MQ1JIX1dMRU5fNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBVQVJUX0xDUkhfV0xFTl81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzRdIEZFTgorLy8KKy8vIFVBUlQgRW5hYmxlIEZJRk9zCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBUcmFuc21pdCBhbmQgcmVjZWl2ZSBGSUZPIGJ1ZmZlcnMgYXJlIGVuYWJsZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAoRklGTyBtb2RlKQorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEZJRk9zIGFyZSBkaXNhYmxlZCAoY2hhcmFjdGVyIG1vZGUpIHRoYXQgaXMsIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEZJRk9zIGJlY29tZSAxLWJ5dGUtZGVlcCBob2xkaW5nIHJlZ2lzdGVycy4KKyNkZWZpbmUgVUFSVF9MQ1JIX0ZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBVQVJUX0xDUkhfRkVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFVBUlRfTENSSF9GRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVUFSVF9MQ1JIX0ZFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBVQVJUX0xDUkhfRkVOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFVBUlRfTENSSF9GRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gU1RQMgorLy8KKy8vIFVBUlQgVHdvIFN0b3AgQml0cyBTZWxlY3Q6CisvLyBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgdHdvIHN0b3AgYml0cyBhcmUgdHJhbnNtaXR0ZWQgYXQgdGhlIGVuZCBvZiB0aGUKKy8vIGZyYW1lLiBUaGUgcmVjZWl2ZSBsb2dpYyBkb2VzIG5vdCBjaGVjayBmb3IgdHdvIHN0b3AgYml0cyBiZWluZyByZWNlaXZlZC4KKyNkZWZpbmUgVUFSVF9MQ1JIX1NUUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBVQVJUX0xDUkhfU1RQMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFVBUlRfTENSSF9TVFAyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVUFSVF9MQ1JIX1NUUDJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBFUFMKKy8vCisvLyBVQVJUIEV2ZW4gUGFyaXR5IFNlbGVjdAorLy8gRU5VTXM6CisvLyBFVkVOICAgICAgICAgICAgICAgICAgICAgRXZlbiBwYXJpdHk6IFRoZSBVQVJUIGdlbmVyYXRlcyBvciBjaGVja3MgZm9yIGFuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbiBudW1iZXIgb2YgMXMgaW4gdGhlIGRhdGEgYW5kIHBhcml0eSBiaXRzLgorLy8gT0REICAgICAgICAgICAgICAgICAgICAgIE9kZCBwYXJpdHk6IFRoZSBVQVJUIGdlbmVyYXRlcyBvciBjaGVja3MgZm9yIGFuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkIG51bWJlciBvZiAxcyBpbiB0aGUgZGF0YSBhbmQgcGFyaXR5IGJpdHMuCisjZGVmaW5lIFVBUlRfTENSSF9FUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVUFSVF9MQ1JIX0VQU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBVQVJUX0xDUkhfRVBTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFVBUlRfTENSSF9FUFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVUFSVF9MQ1JIX0VQU19FVkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBVQVJUX0xDUkhfRVBTX09ERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIFBFTgorLy8KKy8vIFVBUlQgUGFyaXR5IEVuYWJsZQorLy8gVGhpcyBiaXQgY29udHJvbHMgZ2VuZXJhdGlvbiBhbmQgY2hlY2tpbmcgb2YgcGFyaXR5IGJpdC4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFBhcml0eSBjaGVja2luZyBhbmQgZ2VuZXJhdGlvbiBpcyBlbmFibGVkLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFBhcml0eSBpcyBkaXNhYmxlZCBhbmQgbm8gcGFyaXR5IGJpdCBpcyBhZGRlZCB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhIGZyYW1lCisjZGVmaW5lIFVBUlRfTENSSF9QRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVUFSVF9MQ1JIX1BFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBVQVJUX0xDUkhfUEVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfTENSSF9QRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVUFSVF9MQ1JIX1BFTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX0xDUkhfUEVOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIEJSSworLy8KKy8vIFVBUlQgU2VuZCBCcmVhaworLy8gSWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIGEgbG93LWxldmVsIGlzIGNvbnRpbnVhbGx5IG91dHB1dCBvbiB0aGUgVUFSVFRYRAorLy8gb3V0cHV0IHBpbiwgYWZ0ZXIgY29tcGxldGluZyB0cmFuc21pc3Npb24gb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLiBGb3IgdGhlCisvLyBwcm9wZXIgZXhlY3V0aW9uIG9mIHRoZSBicmVhayBjb21tYW5kLCB0aGUKKy8vIHNvZnR3YXJlIG11c3Qgc2V0IHRoaXMgYml0IGZvciBhdCBsZWFzdCB0d28gY29tcGxldGUgZnJhbWVzLiBGb3Igbm9ybWFsIHVzZSwKKy8vIHRoaXMgYml0IG11c3QgYmUgY2xlYXJlZCB0byAwLgorI2RlZmluZSBVQVJUX0xDUkhfQlJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfTENSSF9CUktfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVUFSVF9MQ1JIX0JSS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVQVJUX0xDUkhfQlJLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVUFSVF9PX0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTVdIENUU0VOCisvLworLy8gQ1RTIGhhcmR3YXJlIGZsb3cgY29udHJvbCBlbmFibGUKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIENUUyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgZW5hYmxlZAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIENUUyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgZGlzYWJsZWQKKyNkZWZpbmUgVUFSVF9DVExfQ1RTRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBVQVJUX0NUTF9DVFNFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFVBUlRfQ1RMX0NUU0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgVUFSVF9DVExfQ1RTRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBVQVJUX0NUTF9DVFNFTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFVBUlRfQ1RMX0NUU0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxNF0gUlRTRU4KKy8vCisvLyBSVFMgaGFyZHdhcmUgZmxvdyBjb250cm9sIGVuYWJsZQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgUlRTIGhhcmR3YXJlIGZsb3cgY29udHJvbCBlbmFibGVkCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgUlRTIGhhcmR3YXJlIGZsb3cgY29udHJvbCBkaXNhYmxlZAorI2RlZmluZSBVQVJUX0NUTF9SVFNFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFVBUlRfQ1RMX1JUU0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgVUFSVF9DVExfUlRTRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBVQVJUX0NUTF9SVFNFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFVBUlRfQ1RMX1JUU0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgVUFSVF9DVExfUlRTRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzExXSBSVFMKKy8vCisvLyBSZXF1ZXN0IHRvIFNlbmQKKy8vIFRoaXMgYml0IGlzIHRoZSBjb21wbGVtZW50IG9mIHRoZSBhY3RpdmUtbG93IFVBUlQgUlRTIG91dHB1dC4gVGhhdCBpcywgd2hlbgorLy8gdGhlIGJpdCBpcyBwcm9ncmFtbWVkIHRvIGEgMSB0aGVuIFJUUyBvdXRwdXQgb24gdGhlIHBpbnMgaXMgTE9XLgorI2RlZmluZSBVQVJUX0NUTF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFVBUlRfQ1RMX1JUU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgVUFSVF9DVExfUlRTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBVQVJUX0NUTF9SVFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICAgWzldIFJYRQorLy8KKy8vIFVBUlQgUmVjZWl2ZSBFbmFibGUKKy8vIElmIHRoZSBVQVJUIGlzIGRpc2FibGVkIGluIHRoZSBtaWRkbGUgb2YgcmVjZXB0aW9uLCBpdCBjb21wbGV0ZXMgdGhlIGN1cnJlbnQKKy8vIGNoYXJhY3RlciBiZWZvcmUgc3RvcHBpbmcuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBVQVJUIFJlY2VpdmUgZW5hYmxlZAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFVBUlQgUmVjZWl2ZSBkaXNhYmxlZAorI2RlZmluZSBVQVJUX0NUTF9SWEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFVBUlRfQ1RMX1JYRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgVUFSVF9DVExfUlhFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBVQVJUX0NUTF9SWEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFVBUlRfQ1RMX1JYRV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVUFSVF9DVExfUlhFX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs4XSBUWEUKKy8vCisvLyBVQVJUIFRyYW5zbWl0IEVuYWJsZQorLy8gSWYgdGhlIFVBUlQgaXMgZGlzYWJsZWQgaW4gdGhlIG1pZGRsZSBvZiB0cmFuc21pc3Npb24sIGl0IGNvbXBsZXRlcyB0aGUKKy8vIGN1cnJlbnQgY2hhcmFjdGVyIGJlZm9yZSBzdG9wcGluZy4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFVBUlQgVHJhbnNtaXQgZW5hYmxlZAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFVBUlQgVHJhbnNtaXQgZGlzYWJsZWQKKyNkZWZpbmUgVUFSVF9DVExfVFhFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBVQVJUX0NUTF9UWEVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFVBUlRfQ1RMX1RYRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgVUFSVF9DVExfVFhFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBVQVJUX0NUTF9UWEVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVBUlRfQ1RMX1RYRV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbN10gTEJFCisvLworLy8gVUFSVCBMb29wIEJhY2sgRW5hYmxlOgorLy8gRW5hYmxpbmcgdGhlIGxvb3AtYmFjayBtb2RlIGNvbm5lY3RzIHRoZSBVQVJUVFhEIG91dHB1dCBmcm9tIHRoZSBVQVJUIHRvCisvLyBVQVJUUlhEIGlucHV0IG9mIHRoZSBVQVJULgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgTG9vcCBCYWNrIGVuYWJsZWQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBMb29wIEJhY2sgZGlzYWJsZWQKKyNkZWZpbmUgVUFSVF9DVExfTEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBVQVJUX0NUTF9MQkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFVBUlRfQ1RMX0xCRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVUFSVF9DVExfTEJFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBVQVJUX0NUTF9MQkVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVBUlRfQ1RMX0xCRV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gVUFSVEVOCisvLworLy8gVUFSVCBFbmFibGUKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFVBUlQgZW5hYmxlZAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFVBUlQgZGlzYWJsZWQKKyNkZWZpbmUgVUFSVF9DVExfVUFSVEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVQVJUX0NUTF9VQVJURU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVBUlRfQ1RMX1VBUlRFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVUFSVF9DVExfVUFSVEVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBVQVJUX0NUTF9VQVJURU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfQ1RMX1VBUlRFTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fSUZMUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjNdIFJYU0VMCisvLworLy8gUmVjZWl2ZSBpbnRlcnJ1cHQgRklGTyBsZXZlbCBzZWxlY3Q6CisvLyBUaGlzIGZpZWxkIHNldHMgdGhlIHRyaWdnZXIgcG9pbnRzIGZvciB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQuIFZhbHVlcworLy8gMGIxMDEtMGIxMTEgYXJlIHJlc2VydmVkLgorLy8gRU5VTXM6CisvLyA3XzggICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBGSUZPIGJlY29tZXMgPj0gNy84IGZ1bGwKKy8vIDZfOCAgICAgICAgICAgICAgICAgICAgICBSZWNlaXZlIEZJRk8gYmVjb21lcyA+PSAzLzQgZnVsbAorLy8gNF84ICAgICAgICAgICAgICAgICAgICAgIFJlY2VpdmUgRklGTyBiZWNvbWVzID49IDEvMiBmdWxsCisvLyAyXzggICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBGSUZPIGJlY29tZXMgPj0gMS80IGZ1bGwKKy8vIDFfOCAgICAgICAgICAgICAgICAgICAgICBSZWNlaXZlIEZJRk8gYmVjb21lcyA+PSAxLzggZnVsbAorI2RlZmluZSBVQVJUX0lGTFNfUlhTRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFVBUlRfSUZMU19SWFNFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgVUFSVF9JRkxTX1JYU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBVQVJUX0lGTFNfUlhTRUxfN184ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFVBUlRfSUZMU19SWFNFTF82XzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgVUFSVF9JRkxTX1JYU0VMXzRfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBVQVJUX0lGTFNfUlhTRUxfMl84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFVBUlRfSUZMU19SWFNFTF8xXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzI6MF0gVFhTRUwKKy8vCisvLyBUcmFuc21pdCBpbnRlcnJ1cHQgRklGTyBsZXZlbCBzZWxlY3Q6CisvLyBUaGlzIGZpZWxkIHNldHMgdGhlIHRyaWdnZXIgcG9pbnRzIGZvciB0aGUgdHJhbnNtaXQgaW50ZXJydXB0LiBWYWx1ZXMKKy8vIDBiMTAxLTBiMTExIGFyZSByZXNlcnZlZC4KKy8vIEVOVU1zOgorLy8gN184ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbWl0IEZJRk8gYmVjb21lcyA8PSA3LzggZnVsbAorLy8gNl84ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbWl0IEZJRk8gYmVjb21lcyA8PSAzLzQgZnVsbAorLy8gNF84ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbWl0IEZJRk8gYmVjb21lcyA8PSAxLzIgZnVsbAorLy8gMl84ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbWl0IEZJRk8gYmVjb21lcyA8PSAxLzQgZnVsbAorLy8gMV84ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbWl0IEZJRk8gYmVjb21lcyA8PSAxLzggZnVsbAorI2RlZmluZSBVQVJUX0lGTFNfVFhTRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFVBUlRfSUZMU19UWFNFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgVUFSVF9JRkxTX1RYU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBVQVJUX0lGTFNfVFhTRUxfN184ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFVBUlRfSUZMU19UWFNFTF82XzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgVUFSVF9JRkxTX1RYU0VMXzRfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX0lGTFNfVFhTRUxfMl84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfSUZMU19UWFNFTF8xXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fSU1TQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTBdIE9FSU0KKy8vCisvLyBPdmVycnVuIGVycm9yIGludGVycnVwdCBtYXNrLiBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCBtYXNrIGZvciBVQVJUJ3MKKy8vIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0LiBPbiBhIHdyaXRlIG9mIDEsIHRoZSBtYXNrIG9mIHRoZSBvdmVycnVuIGVycm9yCisvLyBpbnRlcnJ1cHQgaXMgc2V0IHdoaWNoIG1lYW5zIHRoZSBpbnRlcnJ1cHQgc3RhdGUgd2lsbCBiZSByZWZsZWN0ZWQgaW4KKy8vIE1JUy5PRU1JUy4gQSB3cml0ZSBvZiAwIGNsZWFycyB0aGUgbWFzayB3aGljaCBtZWFucyBNSVMuT0VNSVMgd2lsbCBub3QKKy8vIHJlZmxlY3QgdGhlIGludGVycnVwdC4KKyNkZWZpbmUgVUFSVF9JTVNDX09FSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBVQVJUX0lNU0NfT0VJTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFVBUlRfSU1TQ19PRUlNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgVUFSVF9JTVNDX09FSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBCRUlNCisvLworLy8gQnJlYWsgZXJyb3IgaW50ZXJydXB0IG1hc2suIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IG1hc2sgZm9yIFVBUlQncyBicmVhaworLy8gZXJyb3IgaW50ZXJydXB0LiBPbiBhIHdyaXRlIG9mIDEsIHRoZSBtYXNrIG9mIHRoZSBvdmVycnVuIGVycm9yIGludGVycnVwdCBpcworLy8gc2V0IHdoaWNoIG1lYW5zIHRoZSBpbnRlcnJ1cHQgc3RhdGUgd2lsbCBiZSByZWZsZWN0ZWQgaW4gTUlTLkJFTUlTLiBBIHdyaXRlCisvLyBvZiAwIGNsZWFycyB0aGUgbWFzayB3aGljaCBtZWFucyBNSVMuQkVNSVMgd2lsbCBub3QgcmVmbGVjdCB0aGUgaW50ZXJydXB0LgorI2RlZmluZSBVQVJUX0lNU0NfQkVJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFVBUlRfSU1TQ19CRUlNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgVUFSVF9JTVNDX0JFSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBVQVJUX0lNU0NfQkVJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFBFSU0KKy8vCisvLyBQYXJpdHkgZXJyb3IgaW50ZXJydXB0IG1hc2suIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IG1hc2sgZm9yIFVBUlQncworLy8gcGFyaXR5IGVycm9yIGludGVycnVwdC4gT24gYSB3cml0ZSBvZiAxLCB0aGUgbWFzayBvZiB0aGUgb3ZlcnJ1biBlcnJvcgorLy8gaW50ZXJydXB0IGlzIHNldCB3aGljaCBtZWFucyB0aGUgaW50ZXJydXB0IHN0YXRlIHdpbGwgYmUgcmVmbGVjdGVkIGluCisvLyBNSVMuUEVNSVMuIEEgd3JpdGUgb2YgMCBjbGVhcnMgdGhlIG1hc2sgd2hpY2ggbWVhbnMgTUlTLlBFTUlTIHdpbGwgbm90CisvLyByZWZsZWN0IHRoZSBpbnRlcnJ1cHQuCisjZGVmaW5lIFVBUlRfSU1TQ19QRUlNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgVUFSVF9JTVNDX1BFSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBVQVJUX0lNU0NfUEVJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVBUlRfSU1TQ19QRUlNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gRkVJTQorLy8KKy8vIEZyYW1pbmcgZXJyb3IgaW50ZXJydXB0IG1hc2suIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IG1hc2sgZm9yIFVBUlQncworLy8gZnJhbWluZyBlcnJvciBpbnRlcnJ1cHQuIE9uIGEgd3JpdGUgb2YgMSwgdGhlIG1hc2sgb2YgdGhlIG92ZXJydW4gZXJyb3IKKy8vIGludGVycnVwdCBpcyBzZXQgd2hpY2ggbWVhbnMgdGhlIGludGVycnVwdCBzdGF0ZSB3aWxsIGJlIHJlZmxlY3RlZCBpbgorLy8gTUlTLkZFTUlTLiBBIHdyaXRlIG9mIDAgY2xlYXJzIHRoZSBtYXNrIHdoaWNoIG1lYW5zIE1JUy5GRU1JUyB3aWxsIG5vdAorLy8gcmVmbGVjdCB0aGUgaW50ZXJydXB0LgorI2RlZmluZSBVQVJUX0lNU0NfRkVJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVBUlRfSU1TQ19GRUlNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgVUFSVF9JTVNDX0ZFSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBVQVJUX0lNU0NfRkVJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFJUSU0KKy8vCisvLyBSZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0IG1hc2suIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IG1hc2sgZm9yIFVBUlQncworLy8gcmVjZWl2ZSB0aW1lb3V0IGludGVycnVwdC4gT24gYSB3cml0ZSBvZiAxLCB0aGUgbWFzayBvZiB0aGUgb3ZlcnJ1biBlcnJvcgorLy8gaW50ZXJydXB0IGlzIHNldCB3aGljaCBtZWFucyB0aGUgaW50ZXJydXB0IHN0YXRlIHdpbGwgYmUgcmVmbGVjdGVkIGluCisvLyBNSVMuUlRNSVMuIEEgd3JpdGUgb2YgMCBjbGVhcnMgdGhlIG1hc2sgd2hpY2ggbWVhbnMgdGhpcyBiaXRmaWVsZCB3aWxsIG5vdAorLy8gcmVmbGVjdCB0aGUgaW50ZXJydXB0LgorLy8gVGhlIHJhdyBpbnRlcnJ1cHQgZm9yIHJlY2VpdmUgdGltZW91dCBSSVMuUlRSSVMgY2Fubm90IGJlIHNldCB1bmxlc3MgdGhlCisvLyBtYXNrIGlzIHNldCAoUlRJTSA9IDEpLiBUaGlzIGlzIGJlY2F1c2UgdGhlIG1hc2sgYWN0cyBhcyBhbiBlbmFibGUgZm9yIHBvd2VyCisvLyBzYXZpbmcuIFRoYXQgaXMsIHRoZSBzYW1lIHN0YXR1cyBjYW4gYmUgcmVhZCBmcm9tIE1JUy5SVE1JUyBhbmQgUklTLlJUUklTLgorI2RlZmluZSBVQVJUX0lNU0NfUlRJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFVBUlRfSU1TQ19SVElNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVUFSVF9JTVNDX1JUSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBVQVJUX0lNU0NfUlRJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFRYSU0KKy8vCisvLyBUcmFuc21pdCBpbnRlcnJ1cHQgbWFzay4gQSByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgbWFzayBmb3IgVUFSVCdzIHRyYW5zbWl0CisvLyBpbnRlcnJ1cHQuIE9uIGEgd3JpdGUgb2YgMSwgdGhlIG1hc2sgb2YgdGhlIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0IGlzIHNldAorLy8gd2hpY2ggbWVhbnMgdGhlIGludGVycnVwdCBzdGF0ZSB3aWxsIGJlIHJlZmxlY3RlZCBpbiBNSVMuVFhNSVMuIEEgd3JpdGUgb2YgMAorLy8gY2xlYXJzIHRoZSBtYXNrIHdoaWNoIG1lYW5zIE1JUy5UWE1JUyB3aWxsIG5vdCByZWZsZWN0IHRoZSBpbnRlcnJ1cHQuCisjZGVmaW5lIFVBUlRfSU1TQ19UWElNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgVUFSVF9JTVNDX1RYSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBVQVJUX0lNU0NfVFhJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFVBUlRfSU1TQ19UWElNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gUlhJTQorLy8KKy8vIFJlY2VpdmUgaW50ZXJydXB0IG1hc2suIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IG1hc2sgZm9yIFVBUlQncyByZWNlaXZlCisvLyBpbnRlcnJ1cHQuIE9uIGEgd3JpdGUgb2YgMSwgdGhlIG1hc2sgb2YgdGhlIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0IGlzIHNldAorLy8gd2hpY2ggbWVhbnMgdGhlIGludGVycnVwdCBzdGF0ZSB3aWxsIGJlIHJlZmxlY3RlZCBpbiBNSVMuUlhNSVMuIEEgd3JpdGUgb2YgMAorLy8gY2xlYXJzIHRoZSBtYXNrIHdoaWNoIG1lYW5zIE1JUy5SWE1JUyB3aWxsIG5vdCByZWZsZWN0IHRoZSBpbnRlcnJ1cHQuCisjZGVmaW5lIFVBUlRfSU1TQ19SWElNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVUFSVF9JTVNDX1JYSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBVQVJUX0lNU0NfUlhJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFVBUlRfSU1TQ19SWElNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMV0gQ1RTTUlNCisvLworLy8gQ2xlYXIgdG8gU2VuZCAoQ1RTKSBtb2RlbSBpbnRlcnJ1cHQgbWFzay4gQSByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgbWFzaworLy8gZm9yIFVBUlQncyBjbGVhciB0byBzZW5kIGludGVycnVwdC4gT24gYSB3cml0ZSBvZiAxLCB0aGUgbWFzayBvZiB0aGUgb3ZlcnJ1bgorLy8gZXJyb3IgaW50ZXJydXB0IGlzIHNldCB3aGljaCBtZWFucyB0aGUgaW50ZXJydXB0IHN0YXRlIHdpbGwgYmUgcmVmbGVjdGVkIGluCisvLyBNSVMuQ1RTTU1JUy4gQSB3cml0ZSBvZiAwIGNsZWFycyB0aGUgbWFzayB3aGljaCBtZWFucyBNSVMuQ1RTTU1JUyB3aWxsIG5vdAorLy8gcmVmbGVjdCB0aGUgaW50ZXJydXB0LgorI2RlZmluZSBVQVJUX0lNU0NfQ1RTTUlNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfSU1TQ19DVFNNSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVUFSVF9JTVNDX0NUU01JTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX0lNU0NfQ1RTTUlNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVUFSVF9PX1JJUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTBdIE9FUklTCisvLworLy8gT3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSByYXcgaW50ZXJydXB0IHN0YXRlIG9mIFVBUlQncyBvdmVycnVuIGVycm9yCisvLyBpbnRlcnJ1cHQuIE92ZXJydW4gZXJyb3Igb2NjdXJzIGlmIGRhdGEgaXMgcmVjZWl2ZWQgYW5kIHRoZSByZWNlaXZlIEZJRk8gaXMKKy8vIGZ1bGwuCisjZGVmaW5lIFVBUlRfUklTX09FUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgVUFSVF9SSVNfT0VSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBVQVJUX1JJU19PRVJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFVBUlRfUklTX09FUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gQkVSSVMKKy8vCisvLyBCcmVhayBlcnJvciBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSByYXcgaW50ZXJydXB0IHN0YXRlIG9mIFVBUlQncyBicmVhayBlcnJvciBpbnRlcnJ1cHQuCisvLyBCcmVhayBlcnJvciBpcyBzZXQgd2hlbiBhIGJyZWFrIGNvbmRpdGlvbiBpcyBkZXRlY3RlZCwgaW5kaWNhdGluZyB0aGF0IHRoZQorLy8gcmVjZWl2ZWQgZGF0YSBpbnB1dCAoVUFSVFJYRCBpbnB1dCBwaW4pIHdhcyBoZWxkIExPVyBmb3IgbG9uZ2VyIHRoYW4gYQorLy8gZnVsbC13b3JkIHRyYW5zbWlzc2lvbiB0aW1lIChkZWZpbmVkIGFzIHN0YXJ0LCBkYXRhLCBwYXJpdHkgYW5kIHN0b3AgYml0cykuCisjZGVmaW5lIFVBUlRfUklTX0JFUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVUFSVF9SSVNfQkVSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBVQVJUX1JJU19CRVJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFVBUlRfUklTX0JFUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gUEVSSVMKKy8vCisvLyBQYXJpdHkgZXJyb3IgaW50ZXJydXB0IHN0YXR1czoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgcmF3IGludGVycnVwdCBzdGF0ZSBvZiBVQVJUJ3MgcGFyaXR5IGVycm9yIGludGVycnVwdC4KKy8vIFBhcml0eSBlcnJvciBpcyBzZXQgaWYgdGhlIHBhcml0eSBvZiB0aGUgcmVjZWl2ZWQgZGF0YSBjaGFyYWN0ZXIgZG9lcyBub3QKKy8vIG1hdGNoIHRoZSBwYXJpdHkgdGhhdCB0aGUgTENSSC5FUFMgYW5kIExDUkguU1BTIHNlbGVjdC4KKyNkZWZpbmUgVUFSVF9SSVNfUEVSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBVQVJUX1JJU19QRVJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFVBUlRfUklTX1BFUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgVUFSVF9SSVNfUEVSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBGRVJJUworLy8KKy8vIEZyYW1pbmcgZXJyb3IgaW50ZXJydXB0IHN0YXR1czoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgcmF3IGludGVycnVwdCBzdGF0ZSBvZiBVQVJUJ3MgZnJhbWluZyBlcnJvcgorLy8gaW50ZXJydXB0LiBGcmFtaW5nIGVycm9yIGlzIHNldCBpZiB0aGUgcmVjZWl2ZWQgY2hhcmFjdGVyIGRvZXMgbm90IGhhdmUgYQorLy8gdmFsaWQgc3RvcCBiaXQgKGEgdmFsaWQgc3RvcCBiaXQgaXMgMSkuCisjZGVmaW5lIFVBUlRfUklTX0ZFUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVUFSVF9SSVNfRkVSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBVQVJUX1JJU19GRVJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVBUlRfUklTX0ZFUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gUlRSSVMKKy8vCisvLyBSZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0IHN0YXR1czoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgcmF3IGludGVycnVwdCBzdGF0ZSBvZiBVQVJUJ3MgcmVjZWl2ZSB0aW1lb3V0CisvLyBpbnRlcnJ1cHQuIFRoZSByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0IGlzIGFzc2VydGVkIHdoZW4gdGhlIHJlY2VpdmUgRklGTworLy8gaXMgbm90IGVtcHR5LCBhbmQgbm8gbW9yZSBkYXRhIGlzIHJlY2VpdmVkIGR1cmluZyBhIDMyLWJpdCBwZXJpb2QuIFRoZQorLy8gcmVjZWl2ZSB0aW1lb3V0IGludGVycnVwdCBpcyBjbGVhcmVkIGVpdGhlciB3aGVuIHRoZSBGSUZPIGJlY29tZXMgZW1wdHkKKy8vIHRocm91Z2ggcmVhZGluZyBhbGwgdGhlIGRhdGEsIG9yIHdoZW4gYSAxIGlzIHdyaXR0ZW4gdG8gSUNSLlJUSUMuCisvLyBUaGUgcmF3IGludGVycnVwdCBmb3IgcmVjZWl2ZSB0aW1lb3V0IGNhbm5vdCBiZSBzZXQgdW5sZXNzIHRoZSBtYXNrIGlzIHNldAorLy8gKElNU0MuUlRJTSA9IDEpLiBUaGlzIGlzIGJlY2F1c2UgdGhlIG1hc2sgYWN0cyBhcyBhbiBlbmFibGUgZm9yIHBvd2VyCisvLyBzYXZpbmcuIFRoYXQgaXMsIHRoZSBzYW1lIHN0YXR1cyBjYW4gYmUgcmVhZCBmcm9tIE1JUy5SVE1JUyBhbmQgUlRSSVMuCisjZGVmaW5lIFVBUlRfUklTX1JUUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgVUFSVF9SSVNfUlRSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBVQVJUX1JJU19SVFJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFVBUlRfUklTX1JUUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gVFhSSVMKKy8vCisvLyBUcmFuc21pdCBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSByYXcgaW50ZXJydXB0IHN0YXRlIG9mIFVBUlQncyB0cmFuc21pdCBpbnRlcnJ1cHQuCisvLyBXaGVuIEZJRk9zIGFyZSBlbmFibGVkIChMQ1JILkZFTiA9IDEpLCB0aGUgdHJhbnNtaXQgaW50ZXJydXB0IGlzIGFzc2VydGVkIGlmCisvLyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IEZJRk8gaXMgZXF1YWwgdG8gb3IgbG93ZXIgdGhhbiB0aGUKKy8vIHByb2dyYW1tZWQgdHJpZ2dlciBsZXZlbCAoSUZMUy5UWFNFTCkuIFRoZSB0cmFuc21pdCBpbnRlcnJ1cHQgaXMgY2xlYXJlZCBieQorLy8gd3JpdGluZyBkYXRhIHRvIHRoZSB0cmFuc21pdCBGSUZPIHVudGlsIGl0IGJlY29tZXMgZ3JlYXRlciB0aGFuIHRoZSB0cmlnZ2VyCisvLyBsZXZlbCwgb3IgYnkgY2xlYXJpbmcgdGhlIGludGVycnVwdCB0aHJvdWdoIElDUi5UWElDLgorLy8gV2hlbiBGSUZPcyBhcmUgZGlzYWJsZWQgKExDUkguRkVOID0gMCksIHRoYXQgaXMgdGhleSBoYXZlIGEgZGVwdGggb2Ygb25lCisvLyBsb2NhdGlvbiwgdGhlIHRyYW5zbWl0IGludGVycnVwdCBpcyBhc3NlcnRlZCBpZiB0aGVyZSBpcyBubyBkYXRhIHByZXNlbnQgaW4KKy8vIHRoZSB0cmFuc21pdHRlcnMgc2luZ2xlIGxvY2F0aW9uLiBJdCBpcyBjbGVhcmVkIGJ5IHBlcmZvcm1pbmcgYSBzaW5nbGUgd3JpdGUKKy8vIHRvIHRoZSB0cmFuc21pdCBGSUZPLCBvciBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IHRocm91Z2ggSUNSLlRYSUMuCisjZGVmaW5lIFVBUlRfUklTX1RYUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgVUFSVF9SSVNfVFhSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBVQVJUX1JJU19UWFJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFVBUlRfUklTX1RYUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gUlhSSVMKKy8vCisvLyBSZWNlaXZlIGludGVycnVwdCBzdGF0dXM6CisvLyBUaGlzIGZpZWxkIHJldHVybnMgdGhlIHJhdyBpbnRlcnJ1cHQgc3RhdGUgb2YgVUFSVCdzIHJlY2VpdmUgaW50ZXJydXB0LgorLy8gV2hlbiBGSUZPcyBhcmUgZW5hYmxlZCAoTENSSC5GRU4gPSAxKSwgdGhlIHJlY2VpdmUgaW50ZXJydXB0IGlzIGFzc2VydGVkIGlmCisvLyB0aGUgcmVjZWl2ZSBGSUZPIHJlYWNoZXMgdGhlIHByb2dyYW1tZWQgdHJpZ2dlcgorLy8gbGV2ZWwgKElGTFMuUlhTRUwpLiBUaGUgcmVjZWl2ZSBpbnRlcnJ1cHQgaXMgY2xlYXJlZCBieSByZWFkaW5nIGRhdGEgZnJvbQorLy8gdGhlIHJlY2VpdmUgRklGTyB1bnRpbCBpdCBiZWNvbWVzIGxlc3MgdGhhbiB0aGUgdHJpZ2dlciBsZXZlbCwgb3IgYnkKKy8vIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQgdGhyb3VnaCBJQ1IuUlhJQy4KKy8vIFdoZW4gRklGT3MgYXJlIGRpc2FibGVkIChMQ1JILkZFTiA9IDApLCB0aGF0IGlzIHRoZXkgaGF2ZSBhIGRlcHRoIG9mIG9uZQorLy8gbG9jYXRpb24sIHRoZSByZWNlaXZlIGludGVycnVwdCBpcyBhc3NlcnRlZCBpZiBkYXRhIGlzIHJlY2VpdmVkCisvLyB0aGVyZWJ5IGZpbGxpbmcgdGhlIGxvY2F0aW9uLiBUaGUgcmVjZWl2ZSBpbnRlcnJ1cHQgaXMgY2xlYXJlZCBieSBwZXJmb3JtaW5nCisvLyBhIHNpbmdsZSByZWFkIG9mIHRoZSByZWNlaXZlIEZJRk8sIG9yIGJ5IGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQgdGhyb3VnaAorLy8gSUNSLlJYSUMuCisjZGVmaW5lIFVBUlRfUklTX1JYUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVUFSVF9SSVNfUlhSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBVQVJUX1JJU19SWFJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFVBUlRfUklTX1JYUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMV0gQ1RTUk1JUworLy8KKy8vIENsZWFyIHRvIFNlbmQgKENUUykgbW9kZW0gaW50ZXJydXB0IHN0YXR1czoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgcmF3IGludGVycnVwdCBzdGF0ZSBvZiBVQVJUJ3MgY2xlYXIgdG8gc2VuZAorLy8gaW50ZXJydXB0LgorI2RlZmluZSBVQVJUX1JJU19DVFNSTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfUklTX0NUU1JNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVUFSVF9SSVNfQ1RTUk1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX1JJU19DVFNSTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVUFSVF9PX01JUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTBdIE9FTUlTCisvLworLy8gT3ZlcnJ1biBlcnJvciBtYXNrZWQgaW50ZXJydXB0IHN0YXR1czoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgbWFza2VkIGludGVycnVwdCBzdGF0ZSBvZiB0aGUgb3ZlcnJ1biBpbnRlcnJ1cHQgd2hpY2gKKy8vIGlzIHRoZSBBTkQgcHJvZHVjdCBvZiByYXcgaW50ZXJydXB0IHN0YXRlIFJJUy5PRVJJUyBhbmQgdGhlIG1hc2sgc2V0dGluZworLy8gSU1TQy5PRUlNLgorI2RlZmluZSBVQVJUX01JU19PRU1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFVBUlRfTUlTX09FTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgVUFSVF9NSVNfT0VNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBVQVJUX01JU19PRU1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIEJFTUlTCisvLworLy8gQnJlYWsgZXJyb3IgbWFza2VkIGludGVycnVwdCBzdGF0dXM6CisvLyBUaGlzIGZpZWxkIHJldHVybnMgdGhlIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdGUgb2YgdGhlIGJyZWFrIGVycm9yIGludGVycnVwdAorLy8gd2hpY2ggaXMgdGhlIEFORCBwcm9kdWN0IG9mIHJhdyBpbnRlcnJ1cHQgc3RhdGUgUklTLkJFUklTIGFuZCB0aGUgbWFzaworLy8gc2V0dGluZyBJTVNDLkJFSU0uCisjZGVmaW5lIFVBUlRfTUlTX0JFTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVUFSVF9NSVNfQkVNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBVQVJUX01JU19CRU1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFVBUlRfTUlTX0JFTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gUEVNSVMKKy8vCisvLyBQYXJpdHkgZXJyb3IgbWFza2VkIGludGVycnVwdCBzdGF0dXM6CisvLyBUaGlzIGZpZWxkIHJldHVybnMgdGhlIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdGUgb2YgdGhlIHBhcml0eSBlcnJvciBpbnRlcnJ1cHQKKy8vIHdoaWNoIGlzIHRoZSBBTkQgcHJvZHVjdCBvZiByYXcgaW50ZXJydXB0IHN0YXRlIFJJUy5QRVJJUyBhbmQgdGhlIG1hc2sKKy8vIHNldHRpbmcgSU1TQy5QRUlNLgorI2RlZmluZSBVQVJUX01JU19QRU1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVBUlRfTUlTX1BFTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVUFSVF9NSVNfUEVNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBVQVJUX01JU19QRU1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIEZFTUlTCisvLworLy8gRnJhbWluZyBlcnJvciBtYXNrZWQgaW50ZXJydXB0IHN0YXR1czogUmV0dXJucyB0aGUgbWFza2VkIGludGVycnVwdCBzdGF0ZSBvZgorLy8gdGhlIGZyYW1pbmcgZXJyb3IgaW50ZXJydXB0IHdoaWNoIGlzIHRoZSBBTkQgcHJvZHVjdCBvZiByYXcgaW50ZXJydXB0IHN0YXRlCisvLyBSSVMuRkVSSVMgYW5kIHRoZSBtYXNrIHNldHRpbmcgSU1TQy5GRUlNLgorI2RlZmluZSBVQVJUX01JU19GRU1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVBUlRfTUlTX0ZFTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgVUFSVF9NSVNfRkVNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBVQVJUX01JU19GRU1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFJUTUlTCisvLworLy8gUmVjZWl2ZSB0aW1lb3V0IG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gUmV0dXJucyB0aGUgbWFza2VkIGludGVycnVwdCBzdGF0ZSBvZiB0aGUgcmVjZWl2ZSB0aW1lb3V0IGludGVycnVwdC4KKy8vIFRoZSByYXcgaW50ZXJydXB0IGZvciByZWNlaXZlIHRpbWVvdXQgY2Fubm90IGJlIHNldCB1bmxlc3MgdGhlIG1hc2sgaXMgc2V0CisvLyAoSU1TQy5SVElNID0gMSkuIFRoaXMgaXMgYmVjYXVzZSB0aGUgbWFzayBhY3RzIGFzIGFuIGVuYWJsZSBmb3IgcG93ZXIKKy8vIHNhdmluZy4gVGhhdCBpcywgdGhlIHNhbWUgc3RhdHVzIGNhbiBiZSByZWFkIGZyb20gUlRNSVMgYW5kIFJJUy5SVFJJUy4KKyNkZWZpbmUgVUFSVF9NSVNfUlRNSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBVQVJUX01JU19SVE1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFVBUlRfTUlTX1JUTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgVUFSVF9NSVNfUlRNSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBUWE1JUworLy8KKy8vIFRyYW5zbWl0IG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSBtYXNrZWQgaW50ZXJydXB0IHN0YXRlIG9mIHRoZSB0cmFuc21pdCBpbnRlcnJ1cHQKKy8vIHdoaWNoIGlzIHRoZSBBTkQgcHJvZHVjdCBvZiByYXcgaW50ZXJydXB0IHN0YXRlIFJJUy5UWFJJUyBhbmQgdGhlIG1hc2sKKy8vIHNldHRpbmcgSU1TQy5UWElNLgorI2RlZmluZSBVQVJUX01JU19UWE1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFVBUlRfTUlTX1RYTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVUFSVF9NSVNfVFhNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBVQVJUX01JU19UWE1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFJYTUlTCisvLworLy8gUmVjZWl2ZSBtYXNrZWQgaW50ZXJydXB0IHN0YXR1czoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgbWFza2VkIGludGVycnVwdCBzdGF0ZSBvZiB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQKKy8vIHdoaWNoIGlzIHRoZSBBTkQgcHJvZHVjdCBvZiByYXcgaW50ZXJydXB0IHN0YXRlIFJJUy5SWFJJUyBhbmQgdGhlIG1hc2sKKy8vIHNldHRpbmcgSU1TQy5SWElNLgorI2RlZmluZSBVQVJUX01JU19SWE1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFVBUlRfTUlTX1JYTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVUFSVF9NSVNfUlhNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBVQVJUX01JU19SWE1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzFdIENUU01NSVMKKy8vCisvLyBDbGVhciB0byBTZW5kIChDVFMpIG1vZGVtIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSBtYXNrZWQgaW50ZXJydXB0IHN0YXRlIG9mIHRoZSBjbGVhciB0byBzZW5kIGludGVycnVwdAorLy8gd2hpY2ggaXMgdGhlIEFORCBwcm9kdWN0IG9mIHJhdyBpbnRlcnJ1cHQgc3RhdGUgUklTLkNUU1JNSVMgYW5kIHRoZSBtYXNrCisvLyBzZXR0aW5nIElNU0MuQ1RTTUlNLgorI2RlZmluZSBVQVJUX01JU19DVFNNTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfTUlTX0NUU01NSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVUFSVF9NSVNfQ1RTTU1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX01JU19DVFNNTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVUFSVF9PX0lDUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTBdIE9FSUMKKy8vCisvLyBPdmVycnVuIGVycm9yIGludGVycnVwdCBjbGVhcjoKKy8vIFdyaXRpbmcgMSB0byB0aGlzIGZpZWxkIGNsZWFycyB0aGUgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgKFJJUy5PRVJJUykuCisvLyBXcml0aW5nIDAgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgVUFSVF9JQ1JfT0VJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBVQVJUX0lDUl9PRUlDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFVBUlRfSUNSX09FSUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgVUFSVF9JQ1JfT0VJQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBCRUlDCisvLworLy8gQnJlYWsgZXJyb3IgaW50ZXJydXB0IGNsZWFyOgorLy8gV3JpdGluZyAxIHRvIHRoaXMgZmllbGQgY2xlYXJzIHRoZSBicmVhayBlcnJvciBpbnRlcnJ1cHQgKFJJUy5CRVJJUykuCisvLyBXcml0aW5nIDAgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgVUFSVF9JQ1JfQkVJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBVQVJUX0lDUl9CRUlDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFVBUlRfSUNSX0JFSUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVUFSVF9JQ1JfQkVJQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBQRUlDCisvLworLy8gUGFyaXR5IGVycm9yIGludGVycnVwdCBjbGVhcjoKKy8vIFdyaXRpbmcgMSB0byB0aGlzIGZpZWxkIGNsZWFycyB0aGUgcGFyaXR5IGVycm9yIGludGVycnVwdCAoUklTLlBFUklTKS4KKy8vIFdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBVQVJUX0lDUl9QRUlDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVBUlRfSUNSX1BFSUNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVUFSVF9JQ1JfUEVJQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBVQVJUX0lDUl9QRUlDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIEZFSUMKKy8vCisvLyBGcmFtaW5nIGVycm9yIGludGVycnVwdCBjbGVhcjoKKy8vIFdyaXRpbmcgMSB0byB0aGlzIGZpZWxkIGNsZWFycyB0aGUgZnJhbWluZyBlcnJvciBpbnRlcnJ1cHQgKFJJUy5GRVJJUykuCisvLyBXcml0aW5nIDAgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgVUFSVF9JQ1JfRkVJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBVQVJUX0lDUl9GRUlDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFVBUlRfSUNSX0ZFSUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVUFSVF9JQ1JfRkVJQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBSVElDCisvLworLy8gUmVjZWl2ZSB0aW1lb3V0IGludGVycnVwdCBjbGVhcjoKKy8vIFdyaXRpbmcgMSB0byB0aGlzIGZpZWxkIGNsZWFycyB0aGUgcmVjZWl2ZSB0aW1lb3V0IGludGVycnVwdCAoUklTLlJUUklTKS4KKy8vIFdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBVQVJUX0lDUl9SVElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFVBUlRfSUNSX1JUSUNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVUFSVF9JQ1JfUlRJQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBVQVJUX0lDUl9SVElDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFRYSUMKKy8vCisvLyBUcmFuc21pdCBpbnRlcnJ1cHQgY2xlYXI6CisvLyBXcml0aW5nIDEgdG8gdGhpcyBmaWVsZCBjbGVhcnMgdGhlIHRyYW5zbWl0IGludGVycnVwdCAoUklTLlRYUklTKS4gV3JpdGluZyAwCisvLyBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBVQVJUX0lDUl9UWElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFVBUlRfSUNSX1RYSUNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVUFSVF9JQ1JfVFhJQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBVQVJUX0lDUl9UWElDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFJYSUMKKy8vCisvLyBSZWNlaXZlIGludGVycnVwdCBjbGVhcjoKKy8vIFdyaXRpbmcgMSB0byB0aGlzIGZpZWxkIGNsZWFycyB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQgKFJJUy5SWFJJUykuIFdyaXRpbmcgMAorLy8gaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgVUFSVF9JQ1JfUlhJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBVQVJUX0lDUl9SWElDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFVBUlRfSUNSX1JYSUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVUFSVF9JQ1JfUlhJQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFsxXSBDVFNNSUMKKy8vCisvLyBDbGVhciB0byBTZW5kIChDVFMpIG1vZGVtIGludGVycnVwdCBjbGVhcjoKKy8vIFdyaXRpbmcgMSB0byB0aGlzIGZpZWxkIGNsZWFycyB0aGUgY2xlYXIgdG8gc2VuZCBpbnRlcnJ1cHQgKFJJUy5DVFNSTUlTKS4KKy8vIFdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBVQVJUX0lDUl9DVFNNSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfSUNSX0NUU01JQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVUFSVF9JQ1JfQ1RTTUlDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX0lDUl9DVFNNSUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVUFSVF9PX0RNQUNUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIERNQU9ORVJSCisvLworLy8gRE1BIG9uIGVycm9yLiBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgdGhlIERNQSByZWNlaXZlIHJlcXVlc3Qgb3V0cHV0cyAoZm9yCisvLyBzaW5nbGUgYW5kIGJ1cnN0IHJlcXVlc3RzKSBhcmUgZGlzYWJsZWQgd2hlbiB0aGUgVUFSVCBlcnJvciBpbnRlcnJ1cHQgaXMKKy8vIGFzc2VydGVkIChtb3JlIHNwZWNpZmljYWxseSBpZiBhbnkgb2YgdGhlIGVycm9yIGludGVycnVwdHMgUklTLlBFUklTLAorLy8gUklTLkJFUklTLCBSSVMuRkVSSVMgb3IgUklTLk9FUklTIGFyZSBhc3NlcnRlZCkuCisjZGVmaW5lIFVBUlRfRE1BQ1RMX0RNQU9ORVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVUFSVF9ETUFDVExfRE1BT05FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBVQVJUX0RNQUNUTF9ETUFPTkVSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFVBUlRfRE1BQ1RMX0RNQU9ORVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gVFhETUFFCisvLworLy8gVHJhbnNtaXQgRE1BIGVuYWJsZS4gSWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIERNQSBmb3IgdGhlIHRyYW5zbWl0IEZJRk8gaXMKKy8vIGVuYWJsZWQuCisjZGVmaW5lIFVBUlRfRE1BQ1RMX1RYRE1BRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVUFSVF9ETUFDVExfVFhETUFFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBVQVJUX0RNQUNUTF9UWERNQUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfRE1BQ1RMX1RYRE1BRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUlhETUFFCisvLworLy8gUmVjZWl2ZSBETUEgZW5hYmxlLiBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgRE1BIGZvciB0aGUgcmVjZWl2ZSBGSUZPIGlzCisvLyBlbmFibGVkLgorI2RlZmluZSBVQVJUX0RNQUNUTF9SWERNQUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfRE1BQ1RMX1JYRE1BRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVUFSVF9ETUFDVExfUlhETUFFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVQVJUX0RNQUNUTF9SWERNQUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fVUFSVF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od191ZG1hLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od191ZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5YWRlMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3VkbWEuaApAQCAtMCwwICsxLDU3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X3VkbWFfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfVURNQV9IX18KKyNkZWZpbmUgX19IV19VRE1BX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIFVETUEgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gU3RhdHVzCisjZGVmaW5lIFVETUFfT19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gQ29uZmlndXJhdGlvbgorI2RlZmluZSBVRE1BX09fQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIENoYW5uZWwgQ29udHJvbCBEYXRhIEJhc2UgUG9pbnRlcgorI2RlZmluZSBVRE1BX09fQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIENoYW5uZWwgQWx0ZXJuYXRlIENvbnRyb2wgRGF0YSBCYXNlIFBvaW50ZXIKKyNkZWZpbmUgVURNQV9PX0FMVENUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBDaGFubmVsIFdhaXQgT24gUmVxdWVzdCBTdGF0dXMKKyNkZWZpbmUgVURNQV9PX1dBSVRPTlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBDaGFubmVsIFNvZnR3YXJlIFJlcXVlc3QKKyNkZWZpbmUgVURNQV9PX1NPRlRSRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBDaGFubmVsIFNldCBVc2VCdXJzdAorI2RlZmluZSBVRE1BX09fU0VUQlVSU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIENoYW5uZWwgQ2xlYXIgVXNlQnVyc3QKKyNkZWZpbmUgVURNQV9PX0NMRUFSQlVSU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBDaGFubmVsIFNldCBSZXF1ZXN0IE1hc2sKKyNkZWZpbmUgVURNQV9PX1NFVFJFUU1BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBDbGVhciBDaGFubmVsIFJlcXVlc3QgTWFzaworI2RlZmluZSBVRE1BX09fQ0xFQVJSRVFNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIFNldCBDaGFubmVsIEVuYWJsZQorI2RlZmluZSBVRE1BX09fU0VUQ0hBTk5FTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIENsZWFyIENoYW5uZWwgRW5hYmxlCisjZGVmaW5lIFVETUFfT19DTEVBUkNIQU5ORUxFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8gQ2hhbm5lbCBTZXQgUHJpbWFyeS1BbHRlcm5hdGUKKyNkZWZpbmUgVURNQV9PX1NFVENITkxQUklBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorCisvLyBDaGFubmVsIENsZWFyIFByaW1hcnktQWx0ZXJuYXRlCisjZGVmaW5lIFVETUFfT19DTEVBUkNITkxQUklBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKworLy8gU2V0IENoYW5uZWwgUHJpb3JpdHkKKyNkZWZpbmUgVURNQV9PX1NFVENITkxQUklPUklUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorCisvLyBDbGVhciBDaGFubmVsIFByaW9yaXR5CisjZGVmaW5lIFVETUFfT19DTEVBUkNITkxQUklPUklUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8gRXJyb3IgU3RhdHVzIGFuZCBDbGVhcgorI2RlZmluZSBVRE1BX09fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRDCisKKy8vIENoYW5uZWwgUmVxdWVzdCBEb25lCisjZGVmaW5lIFVETUFfT19SRVFET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDQKKworLy8gQ2hhbm5lbCBSZXF1ZXN0IERvbmUgTWFzaworI2RlZmluZSBVRE1BX09fRE9ORU1BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX1NUQVRVUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIFRFU1QKKy8vCisvLworLy8gMHgwOiBDb250cm9sbGVyIGRvZXMgbm90IGluY2x1ZGUgdGhlIGludGVncmF0aW9uIHRlc3QgbG9naWMKKy8vIDB4MTogQ29udHJvbGxlciBpbmNsdWRlcyB0aGUgaW50ZWdyYXRpb24gdGVzdCBsb2dpYworLy8gMHgyOiBVbmRlZmluZWQKKy8vIC4uLgorLy8gMHhGOiBVbmRlZmluZWQKKyNkZWZpbmUgVURNQV9TVEFUVVNfVEVTVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBVRE1BX1NUQVRVU19URVNUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIFVETUFfU1RBVFVTX1RFU1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyMDoxNl0gVE9UQUxDSEFOTkVMUworLy8KKy8vIFJlZ2lzdGVyIHZhbHVlIHJldHVybnMgbnVtYmVyIG9mIGF2YWlsYWJsZSB1RE1BIGNoYW5uZWxzIG1pbnVzIG9uZS4gRm9yCisvLyBleGFtcGxlIGEgcmVhZCBvdXQgdmFsdWUgb2Y6CisvLworLy8gMHgwMDogU2hvdyB0aGF0IHRoZSBjb250cm9sbGVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIDEgdURNQSBjaGFubmVsCisvLyAweDAxOiBTaG93cyB0aGF0IHRoZSBjb250cm9sbGVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIDIgdURNQSBjaGFubmVscworLy8gLi4uCisvLyAweDFGOiBTaG93cyB0aGF0IHRoZSBjb250cm9sbGVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIDMyIHVETUEgY2hhbm5lbHMKKy8vICgzMi0xPTMxPTB4MUYpCisjZGVmaW5lIFVETUFfU1RBVFVTX1RPVEFMQ0hBTk5FTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVURNQV9TVEFUVVNfVE9UQUxDSEFOTkVMU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFGMDAwMAorI2RlZmluZSBVRE1BX1NUQVRVU19UT1RBTENIQU5ORUxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgIFs3OjRdIFNUQVRFCisvLworLy8gQ3VycmVudCBzdGF0ZSBvZiB0aGUgY29udHJvbCBzdGF0ZSBtYWNoaW5lLiBTdGF0ZSBjYW4gYmUgb25lIG9mIHRoZQorLy8gZm9sbG93aW5nOgorLy8KKy8vIDB4MDogSWRsZQorLy8gMHgxOiBSZWFkaW5nIGNoYW5uZWwgY29udHJvbGxlciBkYXRhCisvLyAweDI6IFJlYWRpbmcgc291cmNlIGRhdGEgZW5kIHBvaW50ZXIKKy8vIDB4MzogUmVhZGluZyBkZXN0aW5hdGlvbiBkYXRhIGVuZCBwb2ludGVyCisvLyAweDQ6IFJlYWRpbmcgc291cmNlIGRhdGEKKy8vIDB4NTogV3JpdGluZyBkZXN0aW5hdGlvbiBkYXRhCisvLyAweDY6IFdhaXRpbmcgZm9yIHVETUEgcmVxdWVzdCB0byBjbGVhcgorLy8gMHg3OiBXcml0aW5nIGNoYW5uZWwgY29udHJvbGxlciBkYXRhCisvLyAweDg6IFN0YWxsZWQKKy8vIDB4OTogRG9uZQorLy8gMHhBOiBQZXJpcGhlcmFsIHNjYXR0ZXItZ2F0aGVyIHRyYW5zaXRpb24KKy8vIDB4QjogVW5kZWZpbmVkCisvLyAuLi4KKy8vIDB4RjogVW5kZWZpbmVkLgorI2RlZmluZSBVRE1BX1NUQVRVU19TVEFURV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFVETUFfU1RBVFVTX1NUQVRFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgVURNQV9TVEFUVVNfU1RBVEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFswXSBNQVNURVJFTkFCTEUKKy8vCisvLyBTaG93cyB0aGUgZW5hYmxlIHN0YXR1cyBvZiB0aGUgY29udHJvbGxlciBhcyBjb25maWd1cmVkIGJ5IENGRy5NQVNURVJFTkFCTEU6CisvLworLy8gMDogQ29udHJvbGxlciBpcyBkaXNhYmxlZAorLy8gMTogQ29udHJvbGxlciBpcyBlbmFibGVkCisjZGVmaW5lIFVETUFfU1RBVFVTX01BU1RFUkVOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVURNQV9TVEFUVVNfTUFTVEVSRU5BQkxFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBVRE1BX1NUQVRVU19NQVNURVJFTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVETUFfU1RBVFVTX01BU1RFUkVOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVRE1BX09fQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NV0gUFJUT0NUUkwKKy8vCisvLyBTZXRzIHRoZSBBSEItTGl0ZSBidXMgcHJvdG9jb2wgcHJvdGVjdGlvbiBzdGF0ZSBieSBjb250cm9sbGluZyB0aGUgQUhCCisvLyBzaWduYWwgSFByb3RbMzoxXSBhcyBmb2xsb3dzOgorLy8KKy8vIEJpdCBbN10gQ29udHJvbHMgSFByb3RbM10gdG8gaW5kaWNhdGUgaWYgYSBjYWNoZWFibGUgYWNjZXNzIGlzIG9jY3VycmluZy4KKy8vIEJpdCBbNl0gQ29udHJvbHMgSFByb3RbMl0gdG8gaW5kaWNhdGUgaWYgYSBidWZmZXJhYmxlIGFjY2VzcyBpcyBvY2N1cnJpbmcuCisvLyBCaXQgWzVdIENvbnRyb2xzIEhQcm90WzFdIHRvIGluZGljYXRlIGlmIGEgcHJpdmlsZWdlZCBhY2Nlc3MgaXMgb2NjdXJyaW5nLgorLy8KKy8vIFdoZW4gYml0IFtuXSA9IDEgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBIUHJvdCBiaXQgaXMgaGlnaC4KKy8vIFdoZW4gYml0IFtuXSA9IDAgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBIUHJvdCBiaXQgaXMgbG93LgorLy8KKy8vIFRoaXMgZmllbGQgY29udHJvbHMgSFByb3RbMzoxXSBzaWduYWwgZm9yIGFsbCB0cmFuc2FjdGlvbnMgaW5pdGlhdGVkIGJ5IHVETUEKKy8vIGV4Y2VwdCB0d28gdHJhbnNhY3Rpb25zIGJlbG93OgorLy8gLSB0aGUgcmVhZCBmcm9tIHRoZSBhZGRyZXNzIGluZGljYXRlZCBieSBzb3VyY2UgYWRkcmVzcyBwb2ludGVyCisvLyAtIHRoZSB3cml0ZSB0byB0aGUgYWRkcmVzcyBpbmRpY2F0ZWQgYnkgZGVzdGluYXRpb24gYWRkcmVzcyBwb2ludGVyCisvLyBIUHJvdFszOjFdIGZvciB0aGVzZSB0d28gZXhjZXB0aW9ucyBjYW4gYmUgY29udHJvbGxlZCBieSBkZWRpY2F0ZWQgZmllbGRzIGluCisvLyB0aGUgY2hhbm5lbCBjb25maWd1dGF0aW9uIGRlc2NyaXB0b3IuCisjZGVmaW5lIFVETUFfQ0ZHX1BSVE9DVFJMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgVURNQV9DRkdfUFJUT0NUUkxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBFMAorI2RlZmluZSBVRE1BX0NGR19QUlRPQ1RSTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzBdIE1BU1RFUkVOQUJMRQorLy8KKy8vIEVuYWJsZXMgdGhlIGNvbnRyb2xsZXI6CisvLworLy8gMDogRGlzYWJsZXMgdGhlIGNvbnRyb2xsZXIKKy8vIDE6IEVuYWJsZXMgdGhlIGNvbnRyb2xsZXIKKyNkZWZpbmUgVURNQV9DRkdfTUFTVEVSRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVRE1BX0NGR19NQVNURVJFTkFCTEVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVETUFfQ0ZHX01BU1RFUkVOQUJMRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVURNQV9DRkdfTUFTVEVSRU5BQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19DVFJMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxMF0gQkFTRVBUUgorLy8KKy8vIFRoaXMgcmVnaXN0ZXIgcG9pbnQgdG8gdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlIHByaW1hcnkgZGF0YSBzdHJ1Y3R1cmVzIG9mCisvLyBlYWNoIERNQSBjaGFubmVsLiBUaGlzIGlzIG5vdCBzdG9yZWQgaW4gbW9kdWxlLCBidXQgaW4gc3lzdGVtIG1lbW9yeSwgdGh1cworLy8gc3BhY2UgbXVzdCBiZSBhbGxvY2F0ZWQgZm9yIHRoaXMgdXNhZ2Ugd2hlbiBETUEgaXMgaW4gdXNhZ2UKKyNkZWZpbmUgVURNQV9DVFJMX0JBU0VQVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBVRE1BX0NUUkxfQkFTRVBUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGQzAwCisjZGVmaW5lIFVETUFfQ1RSTF9CQVNFUFRSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVRE1BX09fQUxUQ1RSTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEJBU0VQVFIKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIHNob3dzIHRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoZSBhbHRlcm5hdGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZAorLy8gaXMgY2FsY3VsYXRlZCBieSBtb2R1bGUsIHRodXMgcmVhZCBvbmx5CisjZGVmaW5lIFVETUFfQUxUQ1RSTF9CQVNFUFRSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVURNQV9BTFRDVFJMX0JBU0VQVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBVRE1BX0FMVENUUkxfQkFTRVBUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX1dBSVRPTlJFUQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENITkxTVEFUVVMKKy8vCisvLyBDaGFubmVsIHdhaXQgb24gcmVxdWVzdCBzdGF0dXM6CisvLworLy8gQml0IFtDaF0gPSAwOiBPbmNlIHVETUEgcmVjZWl2ZXMgYSBzaW5nbGUgb3IgYnVyc3QgcmVxdWVzdCBvbiBjaGFubmVsIENoLAorLy8gdGhpcyBjaGFubmVsIG1heSBjb21lIG91dCBvZiBhY3RpdmUgc3RhdGUgZXZlbiBpZiByZXF1ZXN0IGlzIHN0aWxsIHByZXNlbnQuCisvLyBCaXQgW0NoXSA9IDE6IE9uY2UgdURNQSByZWNlaXZlcyBhIHNpbmdsZSBvciBidXJzdCByZXF1ZXN0IG9uIGNoYW5uZWwgQ2gsIGl0CisvLyBrZWVwcyBjaGFubmVsIENoIGluIGFjdGl2ZSBzdGF0ZSB1bnRpbCB0aGUgcmVxdWVzdHMgYXJlIGRlYXNzZXJ0ZWQuIFRoaXMKKy8vIGhhbmRzaGFrZSBpcyBuZWNlc3NhcnkgZm9yIGNoYW5uZWxzIHdoZXJlIHRoZSByZXF1ZXN0ZXIgaXMgaW4gYW4KKy8vIGFzeW5jaHJvbm91cyBkb21haW4gb3IgY2FuIHJ1biBhdCBzbG93ZXIgY2xvY2sgc3BlZWQgdGhhbiB1RE1BCisjZGVmaW5lIFVETUFfV0FJVE9OUkVRX0NITkxTVEFUVVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVURNQV9XQUlUT05SRVFfQ0hOTFNUQVRVU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBVRE1BX1dBSVRPTlJFUV9DSE5MU1RBVFVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX1NPRlRSRVEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDSE5MUworLy8KKy8vIFNldCB0aGUgYXBwcm9wcmlhdGUgYml0IHRvIGdlbmVyYXRlIGEgc29mdHdhcmUgdURNQSByZXF1ZXN0IG9uIHRoZQorLy8gY29ycmVzcG9uZGluZyB1RE1BIGNoYW5uZWwKKy8vCisvLyBCaXQgW0NoXSA9IDA6IERvZXMgbm90IGNyZWF0ZSBhIHVETUEgcmVxdWVzdCBmb3IgY2hhbm5lbCBDaAorLy8gQml0IFtDaF0gPSAxOiBDcmVhdGVzIGEgdURNQSByZXF1ZXN0IGZvciBjaGFubmVsIENoCisvLworLy8gV3JpdGluZyB0byBhIGJpdCB3aGVyZSBhIHVETUEgY2hhbm5lbCBpcyBub3QgaW1wbGVtZW50ZWQgZG9lcyBub3QgY3JlYXRlIGEKKy8vIHVETUEgcmVxdWVzdCBmb3IgdGhhdCBjaGFubmVsCisjZGVmaW5lIFVETUFfU09GVFJFUV9DSE5MU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVURNQV9TT0ZUUkVRX0NITkxTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBVRE1BX1NPRlRSRVFfQ0hOTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX1NFVEJVUlNUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0hOTFMKKy8vCisvLyBSZXR1cm5zIHRoZSB1c2VidXJzdCBzdGF0dXMsIG9yIGRpc2FibGVzIGluZGl2aWR1YWwgY2hhbm5lbHMgZnJvbSBnZW5lcmF0aW5nCisvLyBzaW5nbGUgdURNQSByZXF1ZXN0cy4gVGhlIHZhbHVlIFIgaXMgdGhlIGFyYml0cmF0aW9uIHJhdGUgYW5kIHN0b3JlZCBpbiB0aGUKKy8vIGNvbnRyb2xsZXIgZGF0YSBzdHJ1Y3R1cmUuCisvLworLy8gUmVhZCBhczoKKy8vCisvLyBCaXQgW0NoXSA9IDA6IHVETUEgY2hhbm5lbCBDaCByZXNwb25kcyB0byBib3RoIGJ1cnN0IGFuZCBzaW5nbGUgcmVxdWVzdHMgb24KKy8vIGNoYW5uZWwgQy4gVGhlIGNvbnRyb2xsZXIgcGVyZm9ybXMgMl5SLCBvciBzaW5nbGUsIGJ1cyB0cmFuc2ZlcnMuCisvLworLy8gQml0IFtDaF0gPSAxOiB1RE1BIGNoYW5uZWwgQ2ggZG9lcyBub3QgcmVzcG9uZCB0byBzaW5nbGUgdHJhbnNmZXIgcmVxdWVzdHMuCisvLyBUaGUgY29udHJvbGxlciBvbmx5IHJlc3BvbmRzIHRvIGJ1cnN0IHRyYW5zZmVyIHJlcXVlc3RzIGFuZCBwZXJmb3JtcyAyXlIKKy8vIHRyYW5zZmVycy4KKy8vCisvLyBXcml0ZSBhczoKKy8vIEJpdCBbQ2hdID0gMDogTm8gZWZmZWN0LiBVc2UgdGhlIENMRUFSQlVSU1QuQ0hOTFMgdG8gc2V0IGJpdCBbQ2hdIHRvIDAuCisvLyBCaXQgW0NoXSA9IDE6IERpc2FibGVzIHNpbmdsZSB0cmFuc2ZlciByZXF1ZXN0cyBvbiBjaGFubmVsIENoLiBUaGUKKy8vIGNvbnRyb2xsZXIgcGVyZm9ybXMgMl5SIHRyYW5zZmVycyBmb3IgYnVyc3QgcmVxdWVzdHMuCisvLworLy8gV3JpdGluZyB0byBhIGJpdCB3aGVyZSBhIHVETUEgY2hhbm5lbCBpcyBub3QgaW1wbGVtZW50ZWQgaGFzIG5vIGVmZmVjdAorI2RlZmluZSBVRE1BX1NFVEJVUlNUX0NITkxTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFVETUFfU0VUQlVSU1RfQ0hOTFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVURNQV9TRVRCVVJTVF9DSE5MU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19DTEVBUkJVUlNUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0hOTFMKKy8vCisvLyBTZXQgdGhlIGFwcHJvcHJpYXRlIGJpdCB0byBlbmFibGUgc2luZ2xlIHRyYW5zZmVyIHJlcXVlc3RzLgorLy8KKy8vIFdyaXRlIGFzOgorLy8KKy8vIEJpdCBbQ2hdID0gMDogTm8gZWZmZWN0LiBVc2UgdGhlIFNFVEJVUlNULkNITkxTIHRvIGRpc2FibGUgc2luZ2xlIHRyYW5zZmVyCisvLyByZXF1ZXN0cy4KKy8vCisvLyBCaXQgW0NoXSA9IDE6IEVuYWJsZXMgc2luZ2xlIHRyYW5zZmVyIHJlcXVlc3RzIG9uIGNoYW5uZWwgQ2guCisvLworLy8gV3JpdGluZyB0byBhIGJpdCB3aGVyZSBhIERNQSBjaGFubmVsIGlzIG5vdCBpbXBsZW1lbnRlZCBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBVRE1BX0NMRUFSQlVSU1RfQ0hOTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFVETUFfQ0xFQVJCVVJTVF9DSE5MU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVURNQV9DTEVBUkJVUlNUX0NITkxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19TRVRSRVFNQVNLCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0hOTFMKKy8vCisvLyBSZXR1cm5zIHRoZSBidXJzdCBhbmQgc2luZ2xlIHJlcXVlc3QgbWFzayBzdGF0dXMsIG9yIGRpc2FibGVzIHRoZQorLy8gY29ycmVzcG9uZGluZyBjaGFubmVsIGZyb20gZ2VuZXJhdGluZyB1RE1BIHJlcXVlc3RzLgorLy8KKy8vIFJlYWQgYXM6CisvLyBCaXQgW0NoXSA9IDA6IEV4dGVybmFsIHJlcXVlc3RzIGFyZSBlbmFibGVkIGZvciBjaGFubmVsIENoLgorLy8gQml0IFtDaF0gPSAxOiBFeHRlcm5hbCByZXF1ZXN0cyBhcmUgZGlzYWJsZWQgZm9yIGNoYW5uZWwgQ2guCisvLworLy8gV3JpdGUgYXM6CisvLyBCaXQgW0NoXSA9IDA6IE5vIGVmZmVjdC4gVXNlIHRoZSBDTEVBUlJFUU1BU0suQ0hOTFMgdG8gZW5hYmxlIHVETUEgcmVxdWVzdHMuCisvLyBCaXQgW0NoXSA9IDE6IERpc2FibGVzIHVETUEgYnVyc3QgcmVxdWVzdCBjaGFubmVsIFtDXSBhbmQgdURNQSBzaW5nbGUKKy8vIHJlcXVlc3QgY2hhbm5lbCBbQ10gaW5wdXQgZnJvbSBnZW5lcmF0aW5nIHVETUEgcmVxdWVzdHMuCisvLworLy8gV3JpdGluZyB0byBhIGJpdCB3aGVyZSBhIHVETUEgY2hhbm5lbCBpcyBub3QgaW1wbGVtZW50ZWQgaGFzIG5vIGVmZmVjdAorI2RlZmluZSBVRE1BX1NFVFJFUU1BU0tfQ0hOTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFVETUFfU0VUUkVRTUFTS19DSE5MU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVURNQV9TRVRSRVFNQVNLX0NITkxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19DTEVBUlJFUU1BU0sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDSE5MUworLy8KKy8vIFNldCB0aGUgYXBwcm9wcmlhdGUgYml0IHRvIGVuYWJsZSBETUEgcmVxdWVzdCBmb3IgdGhlIGNoYW5uZWwuCisvLworLy8gV3JpdGUgYXM6CisvLyBCaXQgW0NoXSA9IDA6IE5vIGVmZmVjdC4gVXNlIHRoZSBTRVRSRVFNQVNLLkNITkxTIHRvIGRpc2FibGUgY2hhbm5lbCBDIGZyb20KKy8vIGdlbmVyYXRpbmcgcmVxdWVzdHMuCisvLyBCaXQgW0NoXSA9IDE6IEVuYWJsZXMgY2hhbm5lbCBbQ10gdG8gZ2VuZXJhdGUgRE1BIHJlcXVlc3RzLgorLy8KKy8vIFdyaXRpbmcgdG8gYSBiaXQgd2hlcmUgYSBETUEgY2hhbm5lbCBpcyBub3QgaW1wbGVtZW50ZWQgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgVURNQV9DTEVBUlJFUU1BU0tfQ0hOTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBVRE1BX0NMRUFSUkVRTUFTS19DSE5MU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFVETUFfQ0xFQVJSRVFNQVNLX0NITkxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVRE1BX09fU0VUQ0hBTk5FTEVOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0hOTFMKKy8vCisvLyBSZXR1cm5zIHRoZSBlbmFibGUgc3RhdHVzIG9mIHRoZSBjaGFubmVscywgb3IgZW5hYmxlcyB0aGUgY29ycmVzcG9uZGluZworLy8gY2hhbm5lbHMuCisvLworLy8gUmVhZCBhczoKKy8vIEJpdCBbQ2hdID0gMDogQ2hhbm5lbCBDaCBpcyBkaXNhYmxlZC4KKy8vIEJpdCBbQ2hdID0gMTogQ2hhbm5lbCBDaCBpcyBlbmFibGVkLgorLy8KKy8vIFdyaXRlIGFzOgorLy8gQml0IFtDaF0gPSAwOiBObyBlZmZlY3QuIFVzZSB0aGUgQ0xFQVJDSEFOTkVMRU4uQ0hOTFMgdG8gZGlzYWJsZSBhIGNoYW5uZWwKKy8vIEJpdCBbQ2hdID0gMTogRW5hYmxlcyBjaGFubmVsIENoCisvLworLy8gV3JpdGluZyB0byBhIGJpdCB3aGVyZSBhIERNQSBjaGFubmVsIGlzIG5vdCBpbXBsZW1lbnRlZCBoYXMgbm8gZWZmZWN0CisjZGVmaW5lIFVETUFfU0VUQ0hBTk5FTEVOX0NITkxTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVURNQV9TRVRDSEFOTkVMRU5fQ0hOTFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBVRE1BX1NFVENIQU5ORUxFTl9DSE5MU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX0NMRUFSQ0hBTk5FTEVOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0hOTFMKKy8vCisvLyBTZXQgdGhlIGFwcHJvcHJpYXRlIGJpdCB0byBkaXNhYmxlIHRoZSBjb3JyZXNwb25kaW5nIHVETUEgY2hhbm5lbC4KKy8vCisvLyBXcml0ZSBhczoKKy8vIEJpdCBbQ2hdID0gMDogTm8gZWZmZWN0LiBVc2UgdGhlIFNFVENIQU5ORUxFTi5DSE5MUyB0byBlbmFibGUgdURNQSBjaGFubmVscy4KKy8vIEJpdCBbQ2hdID0gMTogRGlzYWJsZXMgY2hhbm5lbCBDaAorLy8KKy8vIFdyaXRpbmcgdG8gYSBiaXQgd2hlcmUgYSB1RE1BIGNoYW5uZWwgaXMgbm90IGltcGxlbWVudGVkIGhhcyBubyBlZmZlY3QKKyNkZWZpbmUgVURNQV9DTEVBUkNIQU5ORUxFTl9DSE5MU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBVRE1BX0NMRUFSQ0hBTk5FTEVOX0NITkxTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFVETUFfQ0xFQVJDSEFOTkVMRU5fQ0hOTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVRE1BX09fU0VUQ0hOTFBSSUFMVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENITkxTCisvLworLy8gUmV0dXJucyB0aGUgY2hhbm5lbCBjb250cm9sIGRhdGEgc3RydWN0dXJlIHN0YXR1cywgb3Igc2VsZWN0cyB0aGUgYWx0ZXJuYXRlCisvLyBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdURNQSBjaGFubmVsLgorLy8KKy8vIFJlYWQgYXM6CisvLyBCaXQgW0NoXSA9IDA6IHVETUEgY2hhbm5lbCBDaCBpcyB1c2luZyB0aGUgcHJpbWFyeSBkYXRhIHN0cnVjdHVyZS4KKy8vIEJpdCBbQ2hdID0gMTogdURNQSBjaGFubmVsIENoIGlzIHVzaW5nIHRoZSBhbHRlcm5hdGUgZGF0YSBzdHJ1Y3R1cmUuCisvLworLy8gV3JpdGUgYXM6CisvLyBCaXQgW0NoXSA9IDA6IE5vIGVmZmVjdC4gVXNlIHRoZSBDTEVBUkNITkxQUklBTFQuQ0hOTFMgdG8gZGlzYWJsZSBhIGNoYW5uZWwKKy8vIEJpdCBbQ2hdID0gMTogU2VsZWN0cyB0aGUgYWx0ZXJuYXRlIGRhdGEgc3RydWN0dXJlIGZvciBjaGFubmVsIENoCisvLworLy8gV3JpdGluZyB0byBhIGJpdCB3aGVyZSBhIHVETUEgY2hhbm5lbCBpcyBub3QgaW1wbGVtZW50ZWQgaGFzIG5vIGVmZmVjdAorI2RlZmluZSBVRE1BX1NFVENITkxQUklBTFRfQ0hOTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFVETUFfU0VUQ0hOTFBSSUFMVF9DSE5MU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVURNQV9TRVRDSE5MUFJJQUxUX0NITkxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19DTEVBUkNITkxQUklBTFQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDSE5MUworLy8KKy8vIENsZWFycyB0aGUgYXBwcm9wcmlhdGUgYml0IHRvIHNlbGVjdCB0aGUgcHJpbWFyeSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlCisvLyBjb3JyZXNwb25kaW5nIHVETUEgY2hhbm5lbC4KKy8vCisvLyBXcml0ZSBhczoKKy8vIEJpdCBbQ2hdID0gMDogTm8gZWZmZWN0LiBVc2UgdGhlIFNFVENITkxQUklBTFQuQ0hOTFMgdG8gc2VsZWN0IHRoZSBhbHRlcm5hdGUKKy8vIGRhdGEgc3RydWN0dXJlLgorLy8gQml0IFtDaF0gPSAxOiBTZWxlY3RzIHRoZSBwcmltYXJ5IGRhdGEgc3RydWN0dXJlIGZvciBjaGFubmVsIENoLgorLy8KKy8vIFdyaXRpbmcgdG8gYSBiaXQgd2hlcmUgYSB1RE1BIGNoYW5uZWwgaXMgbm90IGltcGxlbWVudGVkIGhhcyBubyBlZmZlY3QKKyNkZWZpbmUgVURNQV9DTEVBUkNITkxQUklBTFRfQ0hOTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBVRE1BX0NMRUFSQ0hOTFBSSUFMVF9DSE5MU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFVETUFfQ0xFQVJDSE5MUFJJQUxUX0NITkxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVRE1BX09fU0VUQ0hOTFBSSU9SSVRZCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0hOTFMKKy8vCisvLyBSZXR1cm5zIHRoZSBjaGFubmVsIHByaW9yaXR5IG1hc2sgc3RhdHVzLCBvciBzZXRzIHRoZSBjaGFubmVsIHByaW9yaXR5IHRvCisvLyBoaWdoLgorLy8KKy8vIFJlYWQgYXM6CisvLyBCaXQgW0NoXSA9IDA6IHVETUEgY2hhbm5lbCBDaCBpcyB1c2luZyB0aGUgZGVmYXVsdCBwcmlvcml0eSBsZXZlbC4KKy8vIEJpdCBbQ2hdID0gMTogdURNQSBjaGFubmVsIENoIGlzIHVzaW5nIGEgaGlnaCBwcmlvcml0eSBsZXZlbC4KKy8vCisvLyBXcml0ZSBhczoKKy8vIEJpdCBbQ2hdID0gMDogTm8gZWZmZWN0LiBVc2UgdGhlIENMRUFSQ0hOTFBSSU9SSVRZLkNITkxTIHRvIHNldCBjaGFubmVsIENoCisvLyB0byB0aGUgZGVmYXVsdCBwcmlvcml0eSBsZXZlbC4KKy8vIEJpdCBbQ2hdID0gMTogQ2hhbm5lbCBDaCB1c2VzIHRoZSBoaWdoIHByaW9yaXR5IGxldmVsLgorLy8KKy8vIFdyaXRpbmcgdG8gYSBiaXQgd2hlcmUgYSB1RE1BIGNoYW5uZWwgaXMgbm90IGltcGxlbWVudGVkIGhhcyBubyBlZmZlY3QKKyNkZWZpbmUgVURNQV9TRVRDSE5MUFJJT1JJVFlfQ0hOTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBVRE1BX1NFVENITkxQUklPUklUWV9DSE5MU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFVETUFfU0VUQ0hOTFBSSU9SSVRZX0NITkxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVRE1BX09fQ0xFQVJDSE5MUFJJT1JJVFkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDSE5MUworLy8KKy8vIENsZWFyIHRoZSBhcHByb3ByaWF0ZSBiaXQgdG8gc2VsZWN0IHRoZSBkZWZhdWx0IHByaW9yaXR5IGxldmVsIGZvciB0aGUKKy8vIHNwZWNpZmllZCB1RE1BIGNoYW5uZWwuCisvLworLy8gV3JpdGUgYXM6CisvLyBCaXQgW0NoXSA9IDA6IE5vIGVmZmVjdC4gVXNlIHRoZSBTRVRDSE5MUFJJT1JJVFkuQ0hOTFMgdG8gc2V0IGNoYW5uZWwgQ2ggdG8KKy8vIHRoZSBoaWdoIHByaW9yaXR5IGxldmVsLgorLy8gQml0IFtDaF0gPSAxOiBDaGFubmVsIENoIHVzZXMgdGhlIGRlZmF1bHQgcHJpb3JpdHkgbGV2ZWwuCisvLworLy8gV3JpdGluZyB0byBhIGJpdCB3aGVyZSBhIHVETUEgY2hhbm5lbCBpcyBub3QgaW1wbGVtZW50ZWQgaGFzIG5vIGVmZmVjdAorI2RlZmluZSBVRE1BX0NMRUFSQ0hOTFBSSU9SSVRZX0NITkxTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFVETUFfQ0xFQVJDSE5MUFJJT1JJVFlfQ0hOTFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVURNQV9DTEVBUkNITkxQUklPUklUWV9DSE5MU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19FUlJPUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVRVUworLy8KKy8vIFJldHVybnMgdGhlIHN0YXR1cyBvZiBidXMgZXJyb3IgZmxhZyBpbiB1RE1BLCBvciBjbGVhcnMgdGhpcyBiaXQKKy8vCisvLyBSZWFkIGFzOgorLy8KKy8vIDA6IE5vIGJ1cyBlcnJvciBkZXRlY3RlZAorLy8gMTogQnVzIGVycm9yIGRldGVjdGVkCisvLworLy8gV3JpdGUgYXM6CisvLworLy8gMDogTm8gZWZmZWN0LCBzdGF0dXMgb2YgYnVzIGVycm9yIGZsYWcgaXMgdW5jaGFuZ2VkLgorLy8gMTogQ2xlYXJzIHRoZSBidXMgZXJyb3IgZmxhZy4KKyNkZWZpbmUgVURNQV9FUlJPUl9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVRE1BX0VSUk9SX1NUQVRVU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVETUFfRVJST1JfU1RBVFVTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVURNQV9FUlJPUl9TVEFUVVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19SRVFET05FCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0hOTFMKKy8vCisvLyBSZWZsZWN0cyB0aGUgdURNQSBkb25lIHN0YXR1cyBmb3IgdGhlIGdpdmVuIGNoYW5uZWwsIGNoYW5uZWwgW0NoXS4gSXQncyBhCisvLyBzdGlja3kgZG9uZSBiaXQuIFVubGVzcyBjbGVhcmVkIGJ5IHdyaXRpbmcgYSAxLCBpdCBob2xkcyB0aGUgdmFsdWUgb2YgMS4KKy8vCisvLyBSZWFkIGFzOgorLy8gQml0IFtDaF0gPSAwOiBSZXF1ZXN0IGhhcyBub3QgY29tcGxldGVkIGZvciBjaGFubmVsIENoCisvLyBCaXQgW0NoXSA9IDE6IFJlcXVlc3QgaGFzIGNvbXBsZXRlZCBmb3IgdGhlIGNoYW5uZWwgQ2gKKy8vCisvLyBXcml0aW5nIGEgMSB0byBpbmRpdmlkdWFsIGJpdHMgd291bGQgY2xlYXIgdGhlIGNvcnJlc3BvbmRpbmcgYml0LgorLy8KKy8vIFdyaXRlIGFzOgorLy8gQml0IFtDaF0gPSAwOiBObyBlZmZlY3QuCisvLyBCaXQgW0NoXSA9IDE6IFRoZSBjb3JyZXNwb25kaW5nIFtDaF0gYml0IGlzIGNsZWFyZWQgIGFuZCBpcyBzZXQgdG8gMAorI2RlZmluZSBVRE1BX1JFUURPTkVfQ0hOTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFVETUFfUkVRRE9ORV9DSE5MU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVURNQV9SRVFET05FX0NITkxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19ET05FTUFTSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENITkxTCisvLworLy8gQ29udHJvbHMgdGhlIHByb3BhZ2F0aW9uIG9mIHRoZSB1RE1BIGRvbmUgYW5kIGFjdGl2ZSBzdGF0ZSB0byB0aGUgYXNzaWduZWQKKy8vIHBlcmlwaGVyYWwuIFNwZWNpZmljYWxseSB1c2VkIGZvciBzb2Z0d2FyZSBjaGFubmVscy4KKy8vCisvLyBSZWFkIGFzOgorLy8gQml0IFtDaF0gPSAwOiB1RE1BIGRvbmUgYW5kIGFjdGl2ZSBzdGF0ZSBmb3IgY2hhbm5lbCBDaCBpcyBub3QgYmxvY2tlZCBmcm9tCisvLyByZWFjaGluZyB0byB0aGUgcGVyaXBoZXJhbHMuCisvLyBOb3RlIHRoYXQgdGhlIHVETUEgZG9uZSBzdGF0ZSBmb3IgY2hhbm5lbCBbQ2hdIGlzIGJsb2NrZWQgZnJvbSBjb250cmlidXRpbmcKKy8vIHRvIGdlbmVyYXRpb24gb2YgY29tYmluZWQgdURNQSBkb25lIHNpZ25hbAorLy8KKy8vIEJpdCBbQ2hdID0gMTogdURNQSBkb25lIGFuZCBhY3RpdmUgc3RhdGUgZm9yIGNoYW5uZWwgQ2ggaXMgYmxvY2tlZCBmcm9tCisvLyByZWFjaGluZyB0byB0aGUgcGVyaXBoZXJhbHMuCisvLyBOb3RlIHRoYXQgdGhlIHVETUEgZG9uZSBzdGF0ZSBmb3IgY2hhbm5lbCBbQ2hdIGlzIG5vdCBibG9ja2VkIGZyb20KKy8vIGNvbnRyaWJ1dGluZyB0byBnZW5lcmF0aW9uIG9mIGNvbWJpbmVkIHVETUEgZG9uZSBzaWduYWwKKy8vCisvLyBXcml0ZSBhczoKKy8vIEJpdCBbQ2hdID0gMDogQWxsb3dzIHVETUEgZG9uZSBhbmQgYWN0aXZlIHN0YXQgdG8gcHJvcGFnYXRlIHRvIHRoZQorLy8gcGVyaXBoZXJhbHMuCisvLyBOb3RlIHRoYXQgdGhpcyBkaXNhYmxlcyB1RE1BIGRvbmUgc3RhdGUgZm9yIGNoYW5uZWwgW0NoXSBmcm9tIGNvbnRyaWJ1dGluZworLy8gdG8gZ2VuZXJhdGlvbiBvZiBjb21iaW5lZCB1RE1BIGRvbmUgc2lnbmFsCisvLworLy8gQml0IFtDaF0gPSAxOiBCbG9ja3MgdURNQSBkb25lIGFuZCBhY3RpdmUgc3RhdGUgdG8gcHJvcGFnYXRlIHRvIHRoZQorLy8gcGVyaXBoZXJhbHMuCisvLyBOb3RlIHRoYXQgdGhpcyBlbmFibGVzIHVETUEgZG9uZSBmb3IgIGNoYW5uZWwgW0NoXSB0byBjb250cmlidXRlIHRvCisvLyBnZW5lcmF0aW9uIG9mIGNvbWJpbmVkIHVETUEgZG9uZSBzaWduYWwuCisjZGVmaW5lIFVETUFfRE9ORU1BU0tfQ0hOTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVURNQV9ET05FTUFTS19DSE5MU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBVRE1BX0RPTkVNQVNLX0NITkxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fVURNQV9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od192aW1zLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od192aW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwNjY4YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3ZpbXMuaApAQCAtMCwwICsxLDIwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X3ZpbXNfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfVklNU19IX18KKyNkZWZpbmUgX19IV19WSU1TX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIFZJTVMgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gU3RhdHVzCisjZGVmaW5lIFZJTVNfT19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gQ29udHJvbAorI2RlZmluZSBWSU1TX09fQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVklNU19PX1NUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs1XSBJRENPREVfTEJfRElTCisvLworLy8gSWNvZGUvRGNvZGUgZmxhc2ggbGluZSBidWZmZXIgc3RhdHVzCisvLworLy8gMDogRW5hYmxlZCBvciBpbiB0cmFuc2l0aW9uIHRvIGRpc2FibGVkCisvLyAxOiBEaXNhYmxlZCBhbmQgZmx1c2hlZAorI2RlZmluZSBWSU1TX1NUQVRfSURDT0RFX0xCX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFZJTVNfU1RBVF9JRENPREVfTEJfRElTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVklNU19TVEFUX0lEQ09ERV9MQl9ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBWSU1TX1NUQVRfSURDT0RFX0xCX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFNZU0JVU19MQl9ESVMKKy8vCisvLyBTeXNidXMgZmxhc2ggbGluZSBidWZmZXIgY29udHJvbAorLy8KKy8vIDA6IEVuYWJsZWQgb3IgaW4gdHJhbnNpdGlvbiB0byBkaXNhYmxlZAorLy8gMTogRGlzYWJsZWQgYW5kIGZsdXNoZWQKKyNkZWZpbmUgVklNU19TVEFUX1NZU0JVU19MQl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBWSU1TX1NUQVRfU1lTQlVTX0xCX0RJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFZJTVNfU1RBVF9TWVNCVVNfTEJfRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVklNU19TVEFUX1NZU0JVU19MQl9ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBNT0RFX0NIQU5HSU5HCisvLworLy8gVklNUyBtb2RlIGNoYW5nZSBzdGF0dXMKKy8vCisvLyAwOiBWSU1TIGlzIGluIHRoZSBtb2RlIGRlZmluZWQgYnkgTU9ERQorLy8gMTogVklNUyBpcyBpbiB0aGUgcHJvY2VzcyBvZiBjaGFuZ2luZyB0byB0aGUgbW9kZSBnaXZlbiBpbiBDVEwuTU9ERQorI2RlZmluZSBWSU1TX1NUQVRfTU9ERV9DSEFOR0lORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFZJTVNfU1RBVF9NT0RFX0NIQU5HSU5HX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgVklNU19TVEFUX01PREVfQ0hBTkdJTkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBWSU1TX1NUQVRfTU9ERV9DSEFOR0lOR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIElOVgorLy8KKy8vIFRoaXMgYml0IGlzIHNldCB3aGVuIGludmFsaWRhdGlvbiBvZiB0aGUgY2FjaGUgbWVtb3J5IGlzIGFjdGl2ZSAvIG9uZ29pbmcKKyNkZWZpbmUgVklNU19TVEFUX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBWSU1TX1NUQVRfSU5WX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFZJTVNfU1RBVF9JTlZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVklNU19TVEFUX0lOVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICBbMTowXSBNT0RFCisvLworLy8gQ3VycmVudCBWSU1TIG1vZGUKKy8vIEVOVU1zOgorLy8gT0ZGICAgICAgICAgICAgICAgICAgICAgIFZJTVMgT2ZmIG1vZGUKKy8vIENBQ0hFICAgICAgICAgICAgICAgICAgICBWSU1TIENhY2hlIG1vZGUKKy8vIEdQUkFNICAgICAgICAgICAgICAgICAgICBWSU1TIEdQUkFNIG1vZGUKKyNkZWZpbmUgVklNU19TVEFUX01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBWSU1TX1NUQVRfTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFZJTVNfU1RBVF9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVklNU19TVEFUX01PREVfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBWSU1TX1NUQVRfTU9ERV9DQUNIRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFZJTVNfU1RBVF9NT0RFX0dQUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBWSU1TX09fQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gU1RBVFNfQ0xSCisvLworLy8gU2V0IHRoaXMgYml0IHRvIGNsZWFyIHN0YXRpc3RpYyBjb3VudGVycy4KKyNkZWZpbmUgVklNU19DVExfU1RBVFNfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBWSU1TX0NUTF9TVEFUU19DTFJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIFZJTVNfQ1RMX1NUQVRTX0NMUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgVklNU19DVExfU1RBVFNfQ0xSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBTVEFUU19FTgorLy8KKy8vIFNldCB0aGlzIGJpdCB0byBlbmFibGUgc3RhdGlzdGljIGNvdW50ZXJzLgorI2RlZmluZSBWSU1TX0NUTF9TVEFUU19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFZJTVNfQ1RMX1NUQVRTX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgVklNU19DVExfU1RBVFNfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBWSU1TX0NUTF9TVEFUU19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIERZTl9DR19FTgorLy8KKy8vIDA6IFRoZSBpbi1idWlsdCBjbG9jayBnYXRlIGZ1bmN0aW9uYWxpdHkgaXMgYnlwYXNzZWQuCisvLyAxOiBUaGUgaW4tYnVpbHQgY2xvY2sgZ2F0ZSBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQsIGF1dG9tYXRpY2FsbHkgZ2F0aW5nCisvLyB0aGUgY2xvY2sgd2hlbiBub3QgbmVlZGVkLgorI2RlZmluZSBWSU1TX0NUTF9EWU5fQ0dfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFZJTVNfQ1RMX0RZTl9DR19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgVklNU19DVExfRFlOX0NHX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBWSU1TX0NUTF9EWU5fQ0dfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICAgWzVdIElEQ09ERV9MQl9ESVMKKy8vCisvLyBJY29kZS9EY29kZSBmbGFzaCBsaW5lIGJ1ZmZlciBjb250cm9sCisvLworLy8gMDogRW5hYmxlCisvLyAxOiBEaXNhYmxlCisjZGVmaW5lIFZJTVNfQ1RMX0lEQ09ERV9MQl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgVklNU19DVExfSURDT0RFX0xCX0RJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBWSU1TX0NUTF9JRENPREVfTEJfRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFZJTVNfQ1RMX0lEQ09ERV9MQl9ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gU1lTQlVTX0xCX0RJUworLy8KKy8vIFN5c2J1cyBmbGFzaCBsaW5lIGJ1ZmZlciBjb250cm9sCisvLworLy8gMDogRW5hYmxlCisvLyAxOiBEaXNhYmxlCisjZGVmaW5lIFZJTVNfQ1RMX1NZU0JVU19MQl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVklNU19DVExfU1lTQlVTX0xCX0RJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBWSU1TX0NUTF9TWVNCVVNfTEJfRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFZJTVNfQ1RMX1NZU0JVU19MQl9ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gQVJCX0NGRworLy8KKy8vIEljb2RlL0Rjb2RlIGFuZCBzeXNidXMgYXJiaXRhdGlvbiBzY2hlbWUKKy8vCisvLyAwOiBTdGF0aWMgYXJiaXRyYXRpb24gIChpY29kZS9kb2NkZSA+IHN5c2J1cykKKy8vIDE6IFJvdW5kLXJvYmluIGFyYml0cmF0aW9uCisjZGVmaW5lIFZJTVNfQ1RMX0FSQl9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVklNU19DVExfQVJCX0NGR19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBWSU1TX0NUTF9BUkJfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFZJTVNfQ1RMX0FSQl9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gUFJFRl9FTgorLy8KKy8vIFRhZyBwcmVmZXRjaCBjb250cm9sCisvLworLy8gMDogRGlzYWJsZWQKKy8vIDE6IEVuYWJsZWQKKyNkZWZpbmUgVklNU19DVExfUFJFRl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBWSU1TX0NUTF9QUkVGX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFZJTVNfQ1RMX1BSRUZfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVklNU19DVExfUFJFRl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICBbMTowXSBNT0RFCisvLworLy8gVklNUyBtb2RlIHJlcXVlc3QuCisvLyBXcml0ZSBhY2Nlc3NlcyB0byB0aGlzIGZpZWxkIHdpbGwgYmUgYmxvY2tlZCB3aGlsZSBTVEFULk1PREVfQ0hBTkdJTkcgaXMgc2V0CisvLyB0byAxLgorLy8gTm90ZTogVHJhbnNhY3Rpb24gZnJvbSBDQUNIRSBtb2RlIHRvIEdQUkFNIG1vZGUgc2hvdWxkIGJlIGRvbmUgdGhyb3VnaCBPRkYKKy8vIG1vZGUgdG8gbWluaW1pemUgZmxhc2ggYmxvY2sgZGVsYXkuCisvLyBFTlVNczoKKy8vIE9GRiAgICAgICAgICAgICAgICAgICAgICBWSU1TIE9mZiBtb2RlCisvLyBDQUNIRSAgICAgICAgICAgICAgICAgICAgVklNUyBDYWNoZSBtb2RlCisvLyBHUFJBTSAgICAgICAgICAgICAgICAgICAgVklNUyBHUFJBTSBtb2RlCisjZGVmaW5lIFZJTVNfQ1RMX01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVklNU19DVExfTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBWSU1TX0NUTF9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFZJTVNfQ1RMX01PREVfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgVklNU19DVExfTU9ERV9DQUNIRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBWSU1TX0NUTF9NT0RFX0dQUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKworI2VuZGlmIC8vIF9fVklNU19fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od193ZHQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3dkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYTA1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od193ZHQuaApAQCAtMCwwICsxLDI5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X3dkdF9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19XRFRfSF9fCisjZGVmaW5lIF9fSFdfV0RUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIFdEVCBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBDb25maWd1cmF0aW9uCisjZGVmaW5lIFdEVF9PX0xPQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gQ3VycmVudCBDb3VudCBWYWx1ZQorI2RlZmluZSBXRFRfT19WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIENvbnRyb2wKKyNkZWZpbmUgV0RUX09fQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBJbnRlcnJ1cHQgQ2xlYXIKKyNkZWZpbmUgV0RUX09fSUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBSYXcgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBXRFRfT19SSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIE1hc2tlZCBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIFdEVF9PX01JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gVGVzdCBNb2RlCisjZGVmaW5lIFdEVF9PX1RFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MTgKKworLy8gSW50ZXJydXB0IENhdXNlIFRlc3QgTW9kZQorI2RlZmluZSBXRFRfT19JTlRfQ0FVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDFDCisKKy8vIExvY2sKKyNkZWZpbmUgV0RUX09fTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFdEVF9PX0xPQUQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBXRFRMT0FECisvLworLy8gVGhpcyByZWdpc3RlciBpcyB0aGUgMzItYml0IGludGVydmFsIHZhbHVlIHVzZWQgYnkgdGhlIDMyLWJpdCBjb3VudGVyLiBXaGVuCisvLyB0aGlzIHJlZ2lzdGVyIGlzIHdyaXR0ZW4sIHRoZSB2YWx1ZSBpcyBpbW1lZGlhdGVseSBsb2FkZWQgYW5kIHRoZSBjb3VudGVyIGlzCisvLyByZXN0YXJ0ZWQgdG8gY291bnQgZG93biBmcm9tIHRoZSBuZXcgdmFsdWUuIElmIHRoaXMgcmVnaXN0ZXIgaXMgbG9hZGVkIHdpdGgKKy8vIDB4MDAwMC4wMDAwLCBhbiBpbnRlcnJ1cHQgaXMgaW1tZWRpYXRlbHkgZ2VuZXJhdGVkLgorI2RlZmluZSBXRFRfTE9BRF9XRFRMT0FEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFdEVF9MT0FEX1dEVExPQURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgV0RUX0xPQURfV0RUTE9BRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFdEVF9PX1ZBTFVFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gV0RUVkFMVUUKKy8vCisvLyAgVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgY3VycmVudCBjb3VudCB2YWx1ZSBvZiB0aGUgdGltZXIuCisjZGVmaW5lIFdEVF9WQUxVRV9XRFRWQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgV0RUX1ZBTFVFX1dEVFZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBXRFRfVkFMVUVfV0RUVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogV0RUX09fQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gSU5UVFlQRQorLy8KKy8vIFdEVCBJbnRlcnJ1cHQgVHlwZQorLy8KKy8vIDA6ICBXRFQgaW50ZXJydXB0IGlzIGEgc3RhbmRhcmQgaW50ZXJydXB0LgorLy8gMTogIFdEVCBpbnRlcnJ1cHQgaXMgYSBub24tbWFza2FibGUgaW50ZXJydXB0LgorLy8gRU5VTXM6CisvLyBOT05NQVNLQUJMRSAgICAgICAgICAgICAgTm9uLW1hc2thYmxlIGludGVycnVwdAorLy8gTUFTS0FCTEUgICAgICAgICAgICAgICAgIE1hc2thYmxlIGludGVycnVwdAorI2RlZmluZSBXRFRfQ1RMX0lOVFRZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFdEVF9DVExfSU5UVFlQRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV0RUX0NUTF9JTlRUWVBFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBXRFRfQ1RMX0lOVFRZUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdEVF9DVExfSU5UVFlQRV9OT05NQVNLQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgV0RUX0NUTF9JTlRUWVBFX01BU0tBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBSRVNFTgorLy8KKy8vIFdEVCBSZXNldCBFbmFibGUuIERlZmluZXMgdGhlIGZ1bmN0aW9uIG9mIHRoZSBXRFQgcmVzZXQgc291cmNlIChzZWUKKy8vIFBSQ006V0FSTVJFU0VULldEVF9TVEFUIGlmIGVuYWJsZWQpCisvLworLy8gMDogIERpc2FibGVkLgorLy8gMTogIEVuYWJsZSB0aGUgV2F0Y2hkb2cgcmVzZXQgb3V0cHV0LgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgUmVzZXQgb3V0cHV0IEVuYWJsZWQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBSZXNldCBvdXRwdXQgRGlzYWJsZWQKKyNkZWZpbmUgV0RUX0NUTF9SRVNFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBXRFRfQ1RMX1JFU0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdEVF9DVExfUkVTRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgV0RUX0NUTF9SRVNFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXRFRfQ1RMX1JFU0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFdEVF9DVExfUkVTRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gSU5URU4KKy8vCisvLyBXRFQgSW50ZXJydXB0IEVuYWJsZQorLy8KKy8vIDA6IEludGVycnVwdCBldmVudCBkaXNhYmxlZC4KKy8vIDE6IEludGVycnVwdCBldmVudCBlbmFibGVkLiBPbmNlIHNldCwgdGhpcyBiaXQgY2FuIG9ubHkgYmUgY2xlYXJlZCBieSBhCisvLyBoYXJkd2FyZSByZXNldC4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBFbmFibGVkCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IERpc2FibGVkCisjZGVmaW5lIFdEVF9DVExfSU5URU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgV0RUX0NUTF9JTlRFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXRFRfQ1RMX0lOVEVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFdEVF9DVExfSU5URU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV0RUX0NUTF9JTlRFTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBXRFRfQ1RMX0lOVEVOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogV0RUX09fSUNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gV0RUSUNSCisvLworLy8gVGhpcyByZWdpc3RlciBpcyB0aGUgaW50ZXJydXB0IGNsZWFyIHJlZ2lzdGVyLiBBIHdyaXRlIG9mIGFueSB2YWx1ZSB0byB0aGlzCisvLyByZWdpc3RlciBjbGVhcnMgdGhlIFdEVCBpbnRlcnJ1cHQgYW5kIHJlbG9hZHMgdGhlIDMyLWJpdCBjb3VudGVyIGZyb20gdGhlCisvLyBMT0FEIHJlZ2lzdGVyLgorI2RlZmluZSBXRFRfSUNSX1dEVElDUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFdEVF9JQ1JfV0RUSUNSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgV0RUX0lDUl9XRFRJQ1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFdEVF9PX1JJUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFdEVFJJUworLy8KKy8vIFRoaXMgcmVnaXN0ZXIgaXMgdGhlIHJhdyBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLiBXRFQgaW50ZXJydXB0IGV2ZW50cyBjYW4KKy8vIGJlIG1vbml0b3JlZCB2aWEgdGhpcyByZWdpc3RlciBpZiB0aGUgY29udHJvbGxlciBpbnRlcnJ1cHQgaXMgbWFza2VkLgorLy8KKy8vIFZhbHVlIERlc2NyaXB0aW9uCisvLworLy8gMDogVGhlIFdEVCBoYXMgbm90IHRpbWVkIG91dAorLy8gMTogQSBXRFQgdGltZS1vdXQgZXZlbnQgaGFzIG9jY3VycmVkCisvLworI2RlZmluZSBXRFRfUklTX1dEVFJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFdEVF9SSVNfV0RUUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV0RUX1JJU19XRFRSSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBXRFRfUklTX1dEVFJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogV0RUX09fTUlTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gV0RUTUlTCisvLworLy8gVGhpcyByZWdpc3RlciBpcyB0aGUgbWFza2VkIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuIFRoZSB2YWx1ZSBvZiB0aGlzCisvLyByZWdpc3RlciBpcyB0aGUgbG9naWNhbCBBTkQgb2YgdGhlIHJhdyBpbnRlcnJ1cHQgYml0IGFuZCB0aGUgV0RUIGludGVycnVwdAorLy8gZW5hYmxlIGJpdCBDVEwuSU5URU4uCisvLworLy8gVmFsdWUgRGVzY3JpcHRpb24KKy8vCisvLyAwOiBUaGUgV0RUIGhhcyBub3QgdGltZWQgb3V0IG9yIGlzIG1hc2tlZC4KKy8vIDE6IEFuIHVubWFza2VkIFdEVCB0aW1lLW91dCBldmVudCBoYXMgb2NjdXJyZWQuCisjZGVmaW5lIFdEVF9NSVNfV0RUTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgV0RUX01JU19XRFRNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXRFRfTUlTX1dEVE1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFdEVF9NSVNfV0RUTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBXRFRfT19URVNUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOF0gU1RBTEwKKy8vCisvLyBXRFQgU3RhbGwgRW5hYmxlCisvLworLy8gMDogIFRoZSBXRFQgdGltZXIgY29udGludWVzIGNvdW50aW5nIGlmIHRoZSBDUFUgaXMgc3RvcHBlZCB3aXRoIGEgZGVidWdnZXIuCisvLyAxOiAgSWYgdGhlIENQVSBpcyBzdG9wcGVkIHdpdGggYSBkZWJ1Z2dlciwgdGhlIFdEVCBzdG9wcyBjb3VudGluZy4gT25jZSB0aGUKKy8vIENQVSBpcyByZXN0YXJ0ZWQsIHRoZSBXRFQgcmVzdW1lcyBjb3VudGluZy4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBTVEFMTAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgU1RBTEwKKyNkZWZpbmUgV0RUX1RFU1RfU1RBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBXRFRfVEVTVF9TVEFMTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdEVF9URVNUX1NUQUxMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgV0RUX1RFU1RfU1RBTExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBXRFRfVEVTVF9TVEFMTF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFdEVF9URVNUX1NUQUxMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gVEVTVF9FTgorLy8KKy8vIFRoZSB0ZXN0IGVuYWJsZSBiaXQKKy8vCisvLyAwOiBFbmFibGUgZXh0ZXJuYWwgcmVzZXQKKy8vIDE6IERpc2FibGVzIHRoZSBnZW5lcmF0aW9uIG9mIGFuIGV4dGVybmFsIHJlc2V0LiBJbnN0ZWFkIGJpdCAxIG9mIHRoZQorLy8gSU5UX0NBVVMgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhbiBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBUZXN0IG1vZGUgRW5hYmxlZAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFRlc3QgbW9kZSBEaXNhYmxlZAorI2RlZmluZSBXRFRfVEVTVF9URVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFdEVF9URVNUX1RFU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV0RUX1RFU1RfVEVTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBXRFRfVEVTVF9URVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdEVF9URVNUX1RFU1RfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgV0RUX1RFU1RfVEVTVF9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFdEVF9PX0lOVF9DQVVTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gQ0FVU0VfUkVTRVQKKy8vCisvLyBJbmRpY2F0ZXMgdGhhdCB0aGUgY2F1c2Ugb2YgYW4gaW50ZXJydXB0IHdhcyBhIHJlc2V0IGdlbmVyYXRlZCBidXQgYmxvY2tlZAorLy8gZHVlIHRvIFRFU1QuVEVTVF9FTiAob25seSBwb3NzaWJsZSB3aGVuIFRFU1QuVEVTVF9FTiBpcyBzZXQpLgorI2RlZmluZSBXRFRfSU5UX0NBVVNfQ0FVU0VfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFdEVF9JTlRfQ0FVU19DQVVTRV9SRVNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV0RUX0lOVF9DQVVTX0NBVVNFX1JFU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBXRFRfSU5UX0NBVVNfQ0FVU0VfUkVTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENBVVNFX0lOVFIKKy8vCisvLyBSZXBsaWNhIG9mIFJJUy5XRFRSSVMKKyNkZWZpbmUgV0RUX0lOVF9DQVVTX0NBVVNFX0lOVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBXRFRfSU5UX0NBVVNfQ0FVU0VfSU5UUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdEVF9JTlRfQ0FVU19DQVVTRV9JTlRSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgV0RUX0lOVF9DQVVTX0NBVVNFX0lOVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFdEVF9PX0xPQ0sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBXRFRMT0NLCisvLworLy8gV0RUIExvY2s6IEEgd3JpdGUgb2YgdGhlIHZhbHVlIDB4MUFDQy5FNTUxIHVubG9ja3MgdGhlIHdhdGNoZG9nIHJlZ2lzdGVycworLy8gZm9yIHdyaXRlIGFjY2Vzcy4gQSB3cml0ZSBvZiBhbnkgb3RoZXIgdmFsdWUgcmVhcHBsaWVzIHRoZSBsb2NrLCBwcmV2ZW50aW5nCisvLyBhbnkgcmVnaXN0ZXIgdXBkYXRlcyAoTk9URTogVEVTVC5URVNUX0VOIGJpdCBpcyBub3QgbG9ja2FibGUpLgorLy8KKy8vIEEgcmVhZCBvZiB0aGlzIHJlZ2lzdGVyIHJldHVybnMgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLworLy8gMHgwMDAwLjAwMDA6IFVubG9ja2VkCisvLyAweDAwMDAuMDAwMTogIExvY2tlZAorI2RlZmluZSBXRFRfTE9DS19XRFRMT0NLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFdEVF9MT0NLX1dEVExPQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgV0RUX0xPQ0tfV0RUTE9DS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX1dEVF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2xpbmtlcl9maWxlcy9jYzI2eDBmMTI4LmNtZCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvbGlua2VyX2ZpbGVzL2NjMjZ4MGYxMjguY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYmM3YjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2xpbmtlcl9maWxlcy9jYzI2eDBmMTI4LmNtZApAQCAtMCwwICsxLDEyMyBAQAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8hIEBmaWxlICAgICAgIGNjMjZ4MGYxMjguY21kCisvLyEgQGJyaWVmICAgICAgQ0MyNngwRjEyOCByZXYyIGxpbmtlciBmaWxlIGZvciBDb2RlIENvbXBvc2VyIFN0dWRpby4KKy8vIQorLy8hIFJldmlzZWQgICAgICREYXRlOiAyMDE2LTA0LTEzIDEyOjAwOjU5ICswMjAwIChvbiwgMTMgYXByIDIwMTYpICQKKy8vISBSZXZpc2lvbiAgICAkUmV2aXNpb246IDE3MDA2ICQKKy8vCisvLyAgVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkLgorLy8KKy8vICBDb3B5cmlnaHQgKEMpIDIwMTYgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisvLworLy8KKy8vICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy8vICBhcmUgbWV0OgorLy8KKy8vICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLworLy8gICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLworLy8gICAgTmVpdGhlciB0aGUgbmFtZSBvZiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgbm9yIHRoZSBuYW1lcyBvZgorLy8gICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUmV0YWluIGludGVycnVwdCB2ZWN0b3IgdGFibGUgdmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLS1yZXRhaW49Z19wZm5WZWN0b3JzCisvKiBPdmVycmlkZSBkZWZhdWx0IGVudHJ5IHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistLWVudHJ5X3BvaW50IFJlc2V0SVNSCisvKiBBbGxvdyBtYWluKCkgdG8gdGFrZSBhcmdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistLWFyZ3MgMHg4CisvKiBTdXBwcmVzcyB3YXJuaW5ncyBhbmQgZXJyb3JzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtIDEwMDYzOiBXYXJuaW5nIGFib3V0IGVudHJ5IHBvaW50IG5vdCBiZWluZyBfY19pbnQwMCAgICAgICAgICAgICAgICAgICAgICovCisvKiAtIDE2MDExLCAxNjAxMjogOC1ieXRlIGFsaWdubWVudCBlcnJvcnMuIE9ic2VydmVkIHdoZW4gbGlua2luZyBpbiBvYmplY3QgICovCisvKiAgIGZpbGVzIGNvbXBpbGVkIHVzaW5nIEtlaWwgKEFSTSBjb21waWxlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistLWRpYWdfc3VwcHJlc3M9MTAwNjMsMTYwMTEsMTYwMTIKKworLyogVGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmUgc2V0IGFzIHBhcnQgb2YgdGhlIENDUyBwcm9qZWN0LiAgICAqLworLyogSWYgeW91IGFyZSBidWlsZGluZyB1c2luZyB0aGUgY29tbWFuZCBsaW5lLCBvciBmb3Igc29tZSByZWFzb24gd2FudCB0byAgICAqLworLyogZGVmaW5lIHRoZW0gaGVyZSwgeW91IGNhbiB1bmNvbW1lbnQgYW5kIG1vZGlmeSB0aGVzZSBsaW5lcyBhcyBuZWVkZWQuICAgICAqLworLyogSWYgeW91IGFyZSB1c2luZyBDQ1MgZm9yIGJ1aWxkaW5nLCBpdCBpcyBwcm9iYWJseSBiZXR0ZXIgdG8gbWFrZSBhbnkgc3VjaCAqLworLyogbW9kaWZpY2F0aW9ucyBpbiB5b3VyIENDUyBwcm9qZWN0IGFuZCBsZWF2ZSB0aGlzIGZpbGUgYWxvbmUuICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS1oZWFwX3NpemU9MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS1zdGFja19zaXplPTI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS1saWJyYXJ5PXJ0c3Y3TTNfVF9sZV9lYWJpLmxpYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBUaGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgYXBwbGljYXRpb24uICBOb3JtYWxseSB0aGUgaW50ZXJydXB0IHZlY3RvcnMgICovCisvKiBtdXN0IGJlIGxvY2F0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXBwbGljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZMQVNIX0JBU0UgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBGTEFTSF9TSVpFICAgICAgICAgICAgICAweDIwMDAwCisjZGVmaW5lIFJBTV9CQVNFICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUkFNX1NJWkUgICAgICAgICAgICAgICAgMHg1MDAwCisjZGVmaW5lIEdQUkFNX0JBU0UgICAgICAgICAgICAgIDB4MTEwMDAwMDAKKyNkZWZpbmUgR1BSQU1fU0laRSAgICAgICAgICAgICAgMHgyMDAwCisKKworLyogU3lzdGVtIG1lbW9yeSBtYXAgKi8KKworTUVNT1JZCit7CisgICAgLyogQXBwbGljYXRpb24gc3RvcmVkIGluIGFuZCBleGVjdXRlcyBmcm9tIGludGVybmFsIGZsYXNoICovCisgICAgRkxBU0ggKFJYKSA6IG9yaWdpbiA9IEZMQVNIX0JBU0UsIGxlbmd0aCA9IEZMQVNIX1NJWkUKKyAgICAvKiBBcHBsaWNhdGlvbiB1c2VzIGludGVybmFsIFJBTSBmb3IgZGF0YSAqLworICAgIFNSQU0gKFJXWCkgOiBvcmlnaW4gPSBSQU1fQkFTRSwgbGVuZ3RoID0gUkFNX1NJWkUKKyAgICAvKiBBcHBsaWNhdGlvbiBjYW4gdXNlIEdQUkFNIHJlZ2lvbiBhcyBSQU0gaWYgY2FjaGUgaXMgZGlzYWJsZWQgaW4gdGhlIENDRkcKKyAgICAoREVGQVVMVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHUy5TRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNID0gMCkgKi8KKyAgICBHUFJBTSAoUldYKTogb3JpZ2luID0gR1BSQU1fQkFTRSwgbGVuZ3RoID0gR1BSQU1fU0laRQorfQorCisvKiBTZWN0aW9uIGFsbG9jYXRpb24gaW4gbWVtb3J5ICovCisKK1NFQ1RJT05TCit7CisgICAgLmludHZlY3MgICAgICAgIDogICA+IEZMQVNIX0JBU0UKKyAgICAudGV4dCAgICAgICAgICAgOiAgID4gRkxBU0gKKyAgICAuY29uc3QgICAgICAgICAgOiAgID4gRkxBU0gKKyAgICAuY29uc3RkYXRhICAgICAgOiAgID4gRkxBU0gKKyAgICAucm9kYXRhICAgICAgICAgOiAgID4gRkxBU0gKKyAgICAuYmluaXQgICAgICAgICAgOiAgID4gRkxBU0gKKyAgICAuY2luaXQgICAgICAgICAgOiAgID4gRkxBU0gKKyAgICAucGluaXQgICAgICAgICAgOiAgID4gRkxBU0gKKyAgICAuaW5pdF9hcnJheSAgICAgOiAgID4gRkxBU0gKKyAgICAuZW1iX3RleHQgICAgICAgOiAgID4gRkxBU0gKKyAgICAuY2NmZyAgICAgICAgICAgOiAgID4gRkxBU0ggKEhJR0gpCisKKyAgICAudnRhYmxlICAgICAgICAgOiAgID4gU1JBTQorICAgIC52dGFibGVfcmFtICAgICA6ICAgPiBTUkFNCisgICAgIHZ0YWJsZV9yYW0gICAgIDogICA+IFNSQU0KKyAgICAuZGF0YSAgICAgICAgICAgOiAgID4gU1JBTQorICAgIC5ic3MgICAgICAgICAgICA6ICAgPiBTUkFNCisgICAgLnN5c21lbSAgICAgICAgIDogICA+IFNSQU0KKyAgICAuc3RhY2sgICAgICAgICAgOiAgID4gU1JBTSAoSElHSCkKKyAgICAubm9ucmV0ZW52YXIgICAgOiAgID4gU1JBTQorICAgIC5ncHJhbSAgICAgICAgICA6ICAgPiBHUFJBTQorCisjaWZkZWYgX19USV9DT01QSUxFUl9WRVJTSU9OCisjaWYgX19USV9DT01QSUxFUl9WRVJTSU9OID49IDE1MDA5MDAwCisvKiAgSGlkZSBzZWN0aW9uIGZyb20gb2xkZXIgY29tcGlsZXJzIG5vdCBzdXBwb3J0aW5nIHRoZSAicmFtZnVuYyIgYXR0cmlidXRlLgorICAgIFNlZSBodHRwOi8vcHJvY2Vzc29ycy53aWtpLnRpLmNvbS9pbmRleC5waHAvUGxhY2luZ19mdW5jdGlvbnNfaW5fUkFNICovCisgICAgLlRJLnJhbWZ1bmMgOiB7fSBsb2FkPUZMQVNILCBydW49U1JBTSwgdGFibGUoQklOSVQpCisjZW5kaWYKKyNlbmRpZgorfQorCisvKiBDcmVhdGUgZ2xvYmFsIGNvbnN0YW50IHRoYXQgcG9pbnRzIHRvIHRvcCBvZiBzdGFjayAqLworLyogQ0NTOiBDaGFuZ2Ugc3RhY2sgc2l6ZSB1bmRlciBQcm9qZWN0IFByb3BlcnRpZXMgICAgKi8KK19fU1RBQ0tfVE9QID0gX19zdGFjayArIF9fU1RBQ0tfU0laRTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvbGlua2VyX2ZpbGVzL2NjMjZ4MGYxMjguaWNmIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9saW5rZXJfZmlsZXMvY2MyNngwZjEyOC5pY2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliZDgyZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvbGlua2VyX2ZpbGVzL2NjMjZ4MGYxMjguaWNmCkBAIC0wLDAgKzEsMTQzIEBACisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyEgQGZpbGUgICAgICAgY2MyNngwZjEyOC5pY2YKKy8vISBAYnJpZWYgICAgICBDQzI2eDBGMTI4IHJldjIgbGlua2VyIGZpbGUgZm9yIElBUiBFV0FSTS4KKy8vIQorLy8hIFJldmlzZWQgICAgICREYXRlOiAyMDE2LTA0LTEzIDEwOjU5OjEwICswMjAwIChvbiwgMTMgYXByIDIwMTYpICQKKy8vISBSZXZpc2lvbiAgICAkUmV2aXNpb246IDE2OTk5ICQKKy8vCisvLyAgVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkLgorLy8KKy8vICBDb3B5cmlnaHQgKEMpIDIwMTYgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisvLworLy8KKy8vICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy8vICBhcmUgbWV0OgorLy8KKy8vICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLworLy8gICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLworLy8gICAgTmVpdGhlciB0aGUgbmFtZSBvZiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgbm9yIHRoZSBuYW1lcyBvZgorLy8gICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKiMjI0lDRiMjIyBTZWN0aW9uIGhhbmRsZWQgYnkgSUNGIGVkaXRvciwgZG9uJ3QgdG91Y2ghICoqKiovCisvKi1FZGl0b3IgYW5ub3RhdGlvbiBmaWxlLSovCisvKiBJY2ZFZGl0b3JGaWxlPSIkVE9PTEtJVF9ESVIkXGNvbmZpZ1xpZGVcSWNmRWRpdG9yXGNvcnRleF92MV8wLnhtbCIgKi8KKy8qLVNwZWNpYWxzLSovCitkZWZpbmUgc3ltYm9sIF9fSUNGRURJVF9pbnR2ZWNfc3RhcnRfXyA9IDA7CisvKi1NZW1vcnkgUmVnaW9ucy0qLworZGVmaW5lIHN5bWJvbCBfX0lDRkVESVRfcmVnaW9uX1JPTV9zdGFydF9fID0gMHgwMDAwMDAwMDsKK2RlZmluZSBzeW1ib2wgX19JQ0ZFRElUX3JlZ2lvbl9ST01fZW5kX18gICA9IDB4MDAwMUZGRkY7CitkZWZpbmUgc3ltYm9sIF9fSUNGRURJVF9yZWdpb25fUkFNX3N0YXJ0X18gPSAweDIwMDAwMDAwOworZGVmaW5lIHN5bWJvbCBfX0lDRkVESVRfcmVnaW9uX1JBTV9lbmRfXyAgID0gMHgyMDAwNEZGRjsKKy8qLVNpemVzLSovCitkZWZpbmUgc3ltYm9sIF9fSUNGRURJVF9zaXplX2NzdGFja19fID0gMHg4MDA7CitkZWZpbmUgc3ltYm9sIF9fSUNGRURJVF9zaXplX2hlYXBfXyAgID0gMHgxMDAwOworLyoqKiogRW5kIG9mIElDRiBlZGl0b3Igc2VjdGlvbi4gIyMjSUNGIyMjKi8KKworZGVmaW5lIHN5bWJvbCBfX0dQUkFNX1NUQVJUX18gICA9IDB4MTEwMDAwMDA7CitkZWZpbmUgc3ltYm9sIF9fR1BSQU1fRU5EX18gICAgID0gMHgxMTAwMUZGRjsKKworLy8KKy8vIERlZmluZSBhIG1lbW9yeSByZWdpb24gdGhhdCBjb3ZlcnMgdGhlIGVudGlyZSA0IEdCIGFkZHJlc3NhYmxlIHNwYWNlIG9mIHRoZQorLy8gcHJvY2Vzc29yLgorLy8KK2RlZmluZSBtZW1vcnkgbWVtIHdpdGggc2l6ZSA9IDRHOworCisvLworLy8gRGVmaW5lIGEgcmVnaW9uIGZvciB0aGUgb24tY2hpcCBmbGFzaC4KKy8vCitkZWZpbmUgcmVnaW9uIEZMQVNIX3JlZ2lvbiAgID0gbWVtOltmcm9tIF9fSUNGRURJVF9yZWdpb25fUk9NX3N0YXJ0X18gdG8gX19JQ0ZFRElUX3JlZ2lvbl9ST01fZW5kX19dOworCisvLworLy8gRGVmaW5lIGEgcmVnaW9uIGZvciB0aGUgb24tY2hpcCBTUkFNLgorLy8KK2RlZmluZSByZWdpb24gU1JBTV9yZWdpb24gICAgID0gbWVtOltmcm9tIF9fSUNGRURJVF9yZWdpb25fUkFNX3N0YXJ0X18gdG8gX19JQ0ZFRElUX3JlZ2lvbl9SQU1fZW5kX19dOworCisvLworLy8gUGxhY2UgdGhlIGludGVycnVwdCB2ZWN0b3JzIGF0IHRoZSBzdGFydCBvZiBmbGFzaC4KKy8vCitwbGFjZSBhdCBhZGRyZXNzIG1lbTpfX0lDRkVESVRfaW50dmVjX3N0YXJ0X18geyByZWFkb25seSBzZWN0aW9uIC5pbnR2ZWMgfTsKK2tlZXAgeyBzZWN0aW9uIC5pbnR2ZWMgfTsKKworLy8KKy8vIFBsYWNlIHRoZSBDQ0ZHIGFyZWEgYXQgdGhlIGVuZCBvZiBmbGFzaAorLy8KK3BsYWNlIGF0IGVuZCBvZiBGTEFTSF9yZWdpb24geyByZWFkb25seSBzZWN0aW9uIC5jY2ZnIH07CitrZWVwIHsgc2VjdGlvbiAuY2NmZyB9OworCisvLworLy8gUGxhY2UgcmVtYWluaW5nICdyZWFkIG9ubHknIGluIEZsYXNoCisvLworcGxhY2UgaW4gRkxBU0hfcmVnaW9uIHsgcmVhZG9ubHkgfTsKKworCisvLworLy8gUGxhY2UgLnZ0YWJsZV9yYW0gaW4gc3RhcnQgb2YgUkFNCisvLworcGxhY2UgYXQgc3RhcnQgb2YgU1JBTV9yZWdpb24geyBzZWN0aW9uIC52dGFibGVfcmFtIH07CisKKy8vCisvLyBEZWZpbmUgQ1NUQUNLIGJsb2NrIHRvIGNvbnRhaW4gLnN0YWNrIHNlY3Rpb24uIFRoaXMgZW5hYmxlcyB0aGUgSUFSIElERQorLy8gdG8gcHJvcGVybHkgc2hvdyB0aGUgc3RhY2sgY29udGVudCBkdXJpbmcgZGVidWcuIFBsYWNlIHN0YWNrIGF0IGVuZCBvZgorLy8gcmV0ZW50aW9uIFJBTSwgZG8gbm90IGluaXRpYWxpemUgKGluaXRpYWxpemluZyB0aGUgc3RhY2sgd2lsbCBkZXN0cm95IHRoZQorLy8gcmV0dXJuIGFkZHJlc3MgZnJvbSB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSwgY2F1c2luZyB0aGUgcHJvY2Vzc29yIHRvIGJyYW5jaAorLy8gdG8gemVybyBhbmQgZmF1bHQpCisvLworZGVmaW5lIGJsb2NrIENTVEFDSyB3aXRoIGFsaWdubWVudCA9IDgsIHNpemUgPSBfX0lDRkVESVRfc2l6ZV9jc3RhY2tfXyB7IHNlY3Rpb24gLnN0YWNrIH07CitwbGFjZSBhdCBlbmQgb2YgU1JBTV9yZWdpb24geyBibG9jayBDU1RBQ0sgfTsKK2RvIG5vdCBpbml0aWFsaXplIHsgc2VjdGlvbiAuc3RhY2ssIHNlY3Rpb24gLm5vaW5pdH07CisKKy8vCisvLyBFeHBvcnQgc3RhY2sgdG9wIHN5bWJvbC4gVXNlZCBieSBzdGFydHVwIGZpbGUuCisvLworZGVmaW5lIGV4cG9ydGVkIHN5bWJvbCBTVEFDS19UT1AgPSBfX0lDRkVESVRfcmVnaW9uX1JBTV9lbmRfXyArIDE7CisKKy8vCisvLyBEZWZpbmUgYSBibG9jayBmb3IgdGhlIGhlYXAuICBUaGUgc2l6ZSBzaG91bGQgYmUgc2V0IHRvIHNvbWV0aGluZyBvdGhlcgorLy8gdGhhbiB6ZXJvIGlmIHRoaW5ncyBpbiB0aGUgQyBsaWJyYXJ5IHRoYXQgcmVxdWlyZSB0aGUgaGVhcCBhcmUgdXNlZC4KKy8vCitkZWZpbmUgYmxvY2sgSEVBUCB3aXRoIGFsaWdubWVudCA9IDgsIHNpemUgPSBfX0lDRkVESVRfc2l6ZV9oZWFwX18geyB9OworcGxhY2UgaW4gU1JBTV9yZWdpb24geyBibG9jayBIRUFQIH07CisKKy8vCisvLyBQbGFjZSBhbGwgcmVhZC93cml0ZSBpdGVtcyBpbnRvIFJBTS4KKy8vCitwbGFjZSBpbiBTUkFNX3JlZ2lvbiAgIHsgcmVhZHdyaXRlIH07Citpbml0aWFsaXplIGJ5IGNvcHkgeyByZWFkd3JpdGUgfTsKKworLy8KKy8vIFRoZSBVU0VfVElSVE9TX1JPTSBzeW1ib2wgaXMgZGVmaW5lZCBpbnRlcm5hbGx5IGluIHRoZSBidWlsZCBmbG93ICh1c2luZworLy8gLS1jb25maWdfZGVmIFVTRV9USVJUT1NfUk9NPTEpIGZvciBUSS1SVE9TIGFwcGxpY2F0aW9ucyB3aG9zZSBhcHAuY2ZnIGZpbGUKKy8vIHNwZWNpZmllcyB0byB1c2UgdGhlIFJPTS4KKy8vCitpZiAoaXNkZWZpbmVkc3ltYm9sKFVTRV9USVJUT1NfUk9NKSkgeworICAgIGluY2x1ZGUgIlRJUlRPU19ST00uaWNmIjsKK30KKworLy8KKy8vIERlZmluZSBhIHJlZ2lvbiBmb3IgdGhlIG9uLWNoaXAgR1BSQU0vY2FjaGUuCisvLyBBcHBsaWNhdGlvbiBjYW4gdXNlIHRoaXMgcmVnaW9uIGFzIFJBTSBpZiBjYWNoZSBpcyBkaXNhYmxlZCBpbiB0aGUgQ0NGRworLy8gKERFRkFVTFRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1MuU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19HUFJBTSA9IDApCisvLworZGVmaW5lIHJlZ2lvbiBHUFJBTV9yZWdpb24gICAgPSBtZW06W2Zyb20gX19HUFJBTV9TVEFSVF9fIHRvIF9fR1BSQU1fRU5EX19dOworcGxhY2UgaW4gR1BSQU1fcmVnaW9uIHtzZWN0aW9uIC5ncHJhbX07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2xpbmtlcl9maWxlcy9jYzI2eDBmMTI4LmxkcyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvbGlua2VyX2ZpbGVzL2NjMjZ4MGYxMjgubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNjQ4NjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2xpbmtlcl9maWxlcy9jYzI2eDBmMTI4LmxkcwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyBAZmlsZSAgICAgIGNjMjZ4MGYxMjgubGRzCisgQGJyaWVmICAgICBDQzI2eDBGMTI4IGxpbmtlciBjb25maWd1cmF0aW9uIGZpbGUgZm9yIEdOVSBjb21waWxlci4KKworIFJldmlzZWQgICAgJERhdGU6IDIwMTYtMDQtMTMgMTA6NTk6MTAgKzAyMDAgKG9uLCAxMyBhcHIgMjAxNikgJAorIFJldmlzaW9uICAgJFJldmlzaW9uOiAxNjk5OSAkCisKKyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQuCisKKyAgQ29weXJpZ2h0IChDKSAyMDE2IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6d3d3LnRpLmNvbS8KKworCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgYXJlIG1ldDoKKworICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgIE5laXRoZXIgdGhlIG5hbWUgb2YgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIG5vciB0aGUgbmFtZXMgb2YKKyAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIEVudHJ5IFBvaW50ICovCitFTlRSWSggUmVzZXRJU1IgKQorCisvKiBFbnN1cmUgQ3VzdG9tZXIgQ29uZmlndXJhdGlvbiBBcmVhIGlzIGFuIHVuZGVmaW5lZCBzeW1ib2wgKi8KK0VYVEVSTiggX19jY2ZnICkKKworLyogU3lzdGVtIG1lbW9yeSBtYXAgKi8KK01FTU9SWQoreworICAgIC8qIEFwcGxpY2F0aW9uIGlzIHN0b3JlZCBpbiBhbmQgZXhlY3V0ZXMgZnJvbSBpbnRlcm5hbCBmbGFzaCAqLworICAgIEZMQVNIIChSWCkgOiBPUklHSU4gPSAweDAsIExFTkdUSCA9IDB4MUZGQTgKKyAgICAvKiBDdXN0b21lciBDb25maWd1cmF0aW9uIEFyZWEgKENDRkcpICovCisgICAgRkxBU0hfQ0NGRyAoUlgpIDogT1JJR0lOID0gMHgxRkZBOCwgTEVOR1RIID0gODgKKyAgICAvKiBBcHBsaWNhdGlvbiB1c2VzIGludGVybmFsIFJBTSBmb3IgZGF0YSAqLworICAgIFNSQU0gKFJXWCkgOiBPUklHSU4gPSAweDIwMDAwMDAwLCBMRU5HVEggPSAweDUwMDAKKyAgICAvKiBBcHBsaWNhdGlvbiBjYW4gdXNlIEdQUkFNIHJlZ2lvbiBhcyBSQU0gaWYgY2FjaGUgaXMgZGlzYWJsZWQgaW4gdGhlIENDRkcKKyAgICAgICAoREVGQVVMVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHUy5TRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNID0gMCkgKi8KKyAgICBHUFJBTSAoUldYKSA6IE9SSUdJTiA9IDB4MTEwMDAwMDAsIExFTkdUSCA9IDB4MjAwMAorfQorCisvKi4gSGlnaGVzdCBhZGRyZXNzIG9mIHRoZSBzdGFjay4gVXNlZCBpbiBzdGFydHVwIGZpbGUgLiovCitfZXN0YWNrID0gT1JJR0lOKFNSQU0pICsgTEVOR1RIKFNSQU0pOyAvKmVuZCBvZiBTUkFNIC4qLworCisvKi4gR2VuZXJhdGUgYSBsaW5rIGVycm9yIGlmIGhlYXAgYW5kIHN0YWNrIGRvbuKAmXQgZml0IGludG8gUkFNIC4qLworX01pbl9IZWFwX1NpemUgPSAwOworX01pbl9TdGFja19TaXplID0gMHgxMDA7CisKKworLyogU2VjdGlvbiBhbGxvY2F0aW9uIGluIG1lbW9yeSAqLworU0VDVElPTlMKK3sKKyAgICAudGV4dCA6CisgICAgeworICAgICAgICBfdGV4dCA9IC47CisgICAgICAgIEtFRVAoKigudmVjdG9ycykpCisgICAgICAgICooLnRleHQqKQorICAgICAgICAqKC5yb2RhdGEqKQorICAgICAgICAqKC5pbml0KQorICAgICAgICAqKC5maW5pKikKKyAgICAgICAgKiguZWhfZnJhbWUqKQorICAgICAgICBfZXRleHQgPSAuOworICAgIH0gPiBGTEFTSCA9IDAKKworICAgLkFSTS5leGlkeCA6CisgICAgeworICAgICAgICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgICAgICAgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopCisgICAgICAgIF9fZXhpZHhfZW5kID0gLjsKKyAgICB9ID4gRkxBU0gKKworICAgIC5BUk0uZXh0YWIgOgorICAgIHsKKyAgICAgICAgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopCisgICAgfSA+IEZMQVNICisKKyAgICAuZGF0YSA6CisgICAgeworICAgICAgICBfZGF0YSA9IC47CisgICAgICAgICoodnRhYmxlKQorICAgICAgICAqKC5kYXRhKikKKyAgICAgICAgX2VkYXRhID0gLjsKKyAgICB9ID4gU1JBTSBBVCA+IEZMQVNICisgICAgX2xkYXRhID0gTE9BREFERFIoLmRhdGEpOworCisgICAgLmJzcyA6CisgICAgeworICAgICAgICBfX2Jzc19zdGFydF9fID0gLjsKKyAgICAgICAgX2JzcyA9IC47CisgICAgICAgICooLmJzcyopCisgICAgICAgICooQ09NTU9OKQorICAgICAgICBfZWJzcyA9IC47CisgICAgICAgIF9fYnNzX2VuZF9fID0gLjsKKyAgICB9ID4gU1JBTQorCisgICAgLmNjZmcgOgorICAgIHsKKyAgICAgICAgS0VFUCgqKC5jY2ZnKSkKKyAgICB9ID4gRkxBU0hfQ0NGRworCisgICAgLyogVXNlcl9oZWFwX3N0YWNrIHNlY3Rpb24sIHVzZWQgdG8gY2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggU1JBTSBsZWZ0ICovCisgICAgLl91c2VyX2hlYXBfc3RhY2sgOgorICAgIHsKKyAgICAgIC4gPSBBTElHTig0KTsKKworICAgICAgICBQUk9WSURFKGVuZCA9IC4pOworICAgICAgICBQUk9WSURFKF9lbmQgPSAuKTsKKyAgICAgICAgUFJPVklERShfX2VuZF9fID0gLik7CisKKyAgICAgIC4gPSAuICsgX01pbl9IZWFwX1NpemU7CisgICAgICAuID0gLiArIF9NaW5fU3RhY2tfU2l6ZTsKKyAgICAgIC4gPSBBTElHTig0KTsKKyAgICB9ID4gU1JBTQorCisgICAgLmdwcmFtIDoKKyAgICB7CisgICAgfSA+IEdQUkFNCit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2xpbmtlcl9maWxlcy9jYzI2eDBmMTI4LnNjdCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvbGlua2VyX2ZpbGVzL2NjMjZ4MGYxMjguc2N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OTJkNGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2xpbmtlcl9maWxlcy9jYzI2eDBmMTI4LnNjdApAQCAtMCwwICsxLDY4IEBACis7IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis7ICogIEBmaWxlICAgICAgICAgICBjYzI2eDBmMTI4LnNjdAorOyAqICBAYnJpZWYgICAgICAgICAgQ0MyNngwRjEyOCByZXYyIHNjYXR0ZXIgbG9hZGluZyBmaWxlIGZvciBBUk0gbGlua2VyLgorOyAqCis7ICogIFJldmlzZWQgICAgICAgICAkRGF0ZTogMjAxNi0wNC0xMyAxNzoyNTowNyArMDIwMCAob24sIDEzIGFwciAyMDE2KSAkCis7ICogIFJldmlzaW9uICAgICAgICAkUmV2aXNpb246IDE3MDE3ICQKKzsgKgorOyAqICBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQuCis7ICoKKzsgKiAgQ29weXJpZ2h0IChDKSAyMDE2IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworOyAqCis7ICoKKzsgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cis7ICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworOyAqICBhcmUgbWV0OgorOyAqCis7ICogICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKzsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCis7ICoKKzsgKiAgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorOyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKzsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorOyAqCis7ICogICAgTmVpdGhlciB0aGUgbmFtZSBvZiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgbm9yIHRoZSBuYW1lcyBvZgorOyAqICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKzsgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCis7ICoKKzsgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworOyAqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorOyAqICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKzsgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKzsgKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCis7ICogIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKzsgKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCis7ICogIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorOyAqICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCis7ICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorOyAqICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorOyAqCis7ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xSX0lST00xIDB4MDAwMDAwMDAgMHgyMDAwMCAgeyA7IGxvYWQgcmVnaW9uIHNpemVfcmVnaW9uCisgICAgRVJfSVJPTTEgMHgwMDAwMDAwMCAweDIwMDAwICB7IDsgbG9hZCBhZGRyZXNzID0gZXhlY3V0aW9uIGFkZHJlc3MKKyAgICAgICAgKi5vIChSRVNFVCwgK0ZpcnN0KQorICAgICAgICAqKEluUm9vdCQkU2VjdGlvbnMpCisgICAgICAgIC5BTlkgKCtSTykKKyAgICB9CisKKyAgICBSV19JUkFNMSAweDIwMDAwMDAwIDB4NTAwMCB7IDsgUlcgZGF0YQorICAgICAgICAuQU5ZICgrUlcgK1pJKQorICAgIH0KKworICAgIDsgRGVmaW5lIGEgcmVnaW9uIGZvciB0aGUgb24tY2hpcCBHUFJBTS9jYWNoZS4KKyAgICA7IEFwcGxpY2F0aW9uIGNhbiB1c2UgdGhpcyByZWdpb24gYXMgUkFNIGlmIGNhY2hlIGlzIGRpc2FibGVkIGluIHRoZSBDQ0ZHCisgICAgOyAoREVGQVVMVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHUy5TRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNID0gMCkKKyAgICA7UldfSVJBTTIgMHgxMTAwMDAwMCAweDAwMDAyMDAwIHsKKyAgICA7ICAgICooLmdwcmFtKQorICAgIDt9Cit9CisKKzsgQ3VzdG9tZXIgY29uZmlndXJhdGlvbiBhcmVhIChDQ0ZHKSBwbGFjZWQgYXQgZW5kIG9mIGRldmljZSBmbGFzaC4KKzsgTWFrZSBzdXJlIHRoZSBlbnRyeSBpbiB0aGlzIGxpbmtlciBmaWxlIGlzIGFsaWduZWQgd2l0aCB5b3VyIGFwcGxpY2F0aW9uJ3MKKzsgQ0NGRyBhcmVhLgorTFJfQ0NGRyAgICAgKDB4MjAwMDAtODgpIHsgOyBsb2FkIHJlZ2lvbiBzaXplX3JlZ2lvbgorICAgIEVSX0NDRkcgSW1hZ2VCYXNlKExSX0NDRkcpIHsgOyBsb2FkIGFkZHJlc3MgPSBleGVjdXRpb24gYWRkcmVzcworICAgICAgICAqKC5jY2ZnLCArRmlyc3QpCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9yZl9wYXRjaGVzL3JmX3BhdGNoX2NwZV9ibGUuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvcmZfcGF0Y2hlcy9yZl9wYXRjaF9jcGVfYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJhYmQ3NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvcmZfcGF0Y2hlcy9yZl9wYXRjaF9jcGVfYmxlLmgKQEAgLTAsMCArMSwyMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICByZl9wYXRjaF9jcGVfYmxlLmgKKyogIFJldmlzZWQ6ICAgICAgICAkRGF0ZSQKKyogIFJldmlzaW9uOiAgICAgICAkUmV2aXNpb24kCisqCisqICBEZXNjcmlwdGlvbjogICAgUkYgQ29yZSBwYXRjaCBmaWxlIGZvciBDQzI2eHgKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkZfUEFUQ0hfQ1BFX0JMRV9ICisjZGVmaW5lIF9SRl9QQVRDSF9DUEVfQkxFX0gKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgQ1BFX1BBVENIX1RZUEUKKyNkZWZpbmUgQ1BFX1BBVENIX1RZUEUgc3RhdGljIGNvbnN0IHVpbnQzMl90CisjZW5kaWYKKworI2lmbmRlZiBTWVNfUEFUQ0hfVFlQRQorI2RlZmluZSBTWVNfUEFUQ0hfVFlQRSBzdGF0aWMgY29uc3QgdWludDMyX3QKKyNlbmRpZgorCisjaWZuZGVmIFBBVENIX0ZVTl9TUEVDCisjZGVmaW5lIFBBVENIX0ZVTl9TUEVDIHN0YXRpYyBpbmxpbmUKKyNlbmRpZgorCisjaWZuZGVmIF9BUFBMWV9QQVRDSF9UQUIKKyNkZWZpbmUgX0FQUExZX1BBVENIX1RBQgorI2VuZGlmCisKKworQ1BFX1BBVENIX1RZUEUgcGF0Y2hJbWFnZUJsZVtdID0geworICAgMHgyMTAwMDQ5OSwKKyAgIDB4MjEwMDA1MTksCisgICAweDIxMDAwNDc5LAorICAgMHg0YzE3YjVmMCwKKyAgIDB4MTg2MTIxNDAsCisgICAweDI4MDI3OGM4LAorICAgMHg0ODA5ZDAwNSwKKyAgIDB4NjAwMTIxMDAsCisgICAweDQ3ODg0OTA4LAorICAgMHg2ZTI1YmRmMCwKKyAgIDB4NjAzNTRlMDcsCisgICAweDQzMjgwNzYwLAorICAgMHg2ODI3NjYyMCwKKyAgIDB4NDgwZTYwMjQsCisgICAweDYwMjc0NzgwLAorICAgMHhiZGYwNjAzNSwKKyAgIDB4NDAwNDExMmMsCisgICAweDAwMDA2NWE1LAorICAgMHg0MDA0NDAyOCwKKyAgIDB4NGMwN2I1MTAsCisgICAweDI5MDA3ZGExLAorICAgMHgyMTAxZDEwNSwKKyAgIDB4MDI0ODc1YTEsCisgICAweDM5M2U0OTA0LAorICAgMHg2ODIwNDc4OCwKKyAgIDB4ZDAwMDI4MDAsCisgICAweGJkMTA0NzgwLAorICAgMHgyMTAwMDI1NCwKKyAgIDB4MDAwMDM5OGIsCisgICAweDQ5MDViNTEwLAorICAgMHhiNjcyNGEwNSwKKyAgIDB4MjgwMTc4YzgsCisgICAweDIwMDFkYzAyLAorICAgMHgxZDEyNzA0OCwKKyAgIDB4NDcxMGI2NjIsCisgICAweDIxMDAwMjk0LAorICAgMHgwMDAwNDc2ZCwKKyAgIDB4NGUxYWI1ZjgsCisgICAweDZiMzE0NjA1LAorICAgMHgwOWNjNDgxOSwKKyAgIDB4MmQwMDAxZTQsCisgICAweDQ5MThkMDExLAorICAgMHgyOTAyNzgwOSwKKyAgIDB4N2IwMGQwMGYsCisgICAweGI2NzI0MzA0LAorICAgMHg0ZjE1MjAwMSwKKyAgIDB4NDdiODAyNDAsCisgICAweDM4MjA0ODExLAorICAgMHgwOWMxODgwMCwKKyAgIDB4ZDAwNDA3YzksCisgICAweDdhYzBlMDE2LAorICAgMHg3YjQwZTdmMCwKKyAgIDB4NDkwZmU3ZWUsCisgICAweDYxY2M2MzM0LAorICAgMHgwN2MwMGE0MCwKKyAgIDB4MjAwMWQwMGMsCisgICAweDZhZjEwMzgwLAorICAgMHhkMDAxMmQwMCwKKyAgIDB4ZTAwMDQzMDEsCisgICAweDQ2MDg0MzgxLAorICAgMHg0OTA3NjJmMSwKKyAgIDB4NjM0ODM5NDAsCisgICAweDQ3YjgyMDAwLAorICAgMHhiZGY4YjY2MiwKKyAgIDB4MjEwMDAyODAsCisgICAweDIxMDAwMDg4LAorICAgMHgyMTAwMDI5NiwKKyAgIDB4MDAwMDNjZGYsCisgICAweDQwMDQ0MDQwLAorICAgMHgyODAwNDkwNywKKyAgIDB4MjAwNGQwMDAsCisgICAweGI2NzI0YTA2LAorICAgMHgwN2M5NzgwOSwKKyAgIDB4NTgxMGQwMDEsCisgICAweDIwODBlMDAwLAorICAgMHhiMjQwYjY2MiwKKyAgIDB4MDAwMDQ3NzAsCisgICAweDIxMDAwMjZiLAorICAgMHg0MDA0NjA1OCwKK307CisjZGVmaW5lIF9OV09SRF9QQVRDSElNQUdFX0JMRSA3OQorCisjZGVmaW5lIF9OV09SRF9QQVRDSFNZU19CTEUgMAorCisjZGVmaW5lIF9JUlFfUEFUQ0hfMCAweDIxMDAwNDExCisjZGVmaW5lIF9JUlFfUEFUQ0hfMSAweDIxMDAwNDUxCisKKworI2lmbmRlZiBfQkxFX1NZU1JBTV9TVEFSVAorI2RlZmluZSBfQkxFX1NZU1JBTV9TVEFSVCAweDIwMDAwMDAwCisjZW5kaWYKKworI2lmbmRlZiBfQkxFX0NQRVJBTV9TVEFSVAorI2RlZmluZSBfQkxFX0NQRVJBTV9TVEFSVCAweDIxMDAwMDAwCisjZW5kaWYKKworI2RlZmluZSBfQkxFX1NZU19QQVRDSF9GSVhFRF9BRERSIDB4MjAwMDAwMDAKKworI2RlZmluZSBfQkxFX1BBUlNFUl9QQVRDSF9UQUJfT0ZGU0VUIDB4MDMzNAorI2RlZmluZSBfQkxFX1BBVENIX1RBQl9PRkZTRVQgMHgwMzNDCisjZGVmaW5lIF9CTEVfSVJRUEFUQ0hfT0ZGU0VUIDB4MDNBQworI2RlZmluZSBfQkxFX1BBVENIX1ZFQ19PRkZTRVQgMHgwNDA0CisKK1BBVENIX0ZVTl9TUEVDIHZvaWQgZW50ZXJCbGVDcGVQYXRjaCh2b2lkKQoreworICAgdWludDMyX3QgKnBQYXRjaFZlYyA9ICh1aW50MzJfdCAqKSAoX0JMRV9DUEVSQU1fU1RBUlQgKyBfQkxFX1BBVENIX1ZFQ19PRkZTRVQpOworCisjaWYgKF9OV09SRF9QQVRDSElNQUdFX0JMRSA+IDApCisgICBtZW1jcHkocFBhdGNoVmVjLCBwYXRjaEltYWdlQmxlLCBzaXplb2YocGF0Y2hJbWFnZUJsZSkpOworI2VuZGlmCit9CisKK1BBVENIX0ZVTl9TUEVDIHZvaWQgZW50ZXJCbGVTeXNQYXRjaCh2b2lkKQoreworfQorCitQQVRDSF9GVU5fU1BFQyB2b2lkIGNvbmZpZ3VyZUJsZVBhdGNoKHZvaWQpCit7CisgICB1aW50OF90ICpwUGF0Y2hUYWIgPSAodWludDhfdCAqKSAoX0JMRV9DUEVSQU1fU1RBUlQgKyBfQkxFX1BBVENIX1RBQl9PRkZTRVQpOworICAgdWludDMyX3QgKnBJcnFQYXRjaCA9ICh1aW50MzJfdCAqKSAoX0JMRV9DUEVSQU1fU1RBUlQgKyBfQkxFX0lSUVBBVENIX09GRlNFVCk7CisKKworICAgcFBhdGNoVGFiWzEwM10gPSAwOworICAgcFBhdGNoVGFiWzYwXSA9IDE7CisgICBwUGF0Y2hUYWJbNDhdID0gMjsKKworICAgcElycVBhdGNoWzFdID0gX0lSUV9QQVRDSF8wOworICAgcElycVBhdGNoWzldID0gX0lSUV9QQVRDSF8xOworfQorCitQQVRDSF9GVU5fU1BFQyB2b2lkIGFwcGx5QmxlUGF0Y2godm9pZCkKK3sKKyAgIGVudGVyQmxlU3lzUGF0Y2goKTsKKyAgIGVudGVyQmxlQ3BlUGF0Y2goKTsKKyAgIGNvbmZpZ3VyZUJsZVBhdGNoKCk7Cit9CisKK1BBVENIX0ZVTl9TUEVDIHZvaWQgcmVmcmVzaEJsZVBhdGNoKHZvaWQpCit7CisgICBlbnRlckJsZUNwZVBhdGNoKCk7CisgICBjb25maWd1cmVCbGVQYXRjaCgpOworfQorCitQQVRDSF9GVU5fU1BFQyB2b2lkIHJmX3BhdGNoX2NwZV9ibGUodm9pZCkKK3sKKyAgIGFwcGx5QmxlUGF0Y2goKTsKK30KKworI3VuZGVmIF9JUlFfUEFUQ0hfMAorI3VuZGVmIF9JUlFfUEFUQ0hfMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vICBfUkZfUEFUQ0hfQ1BFX0JMRV9ICisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvcmZfcGF0Y2hlcy9yZl9wYXRjaF9jcGVfYmxlX3ByaXZfMV8yLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3JmX3BhdGNoZXMvcmZfcGF0Y2hfY3BlX2JsZV9wcml2XzFfMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZGE4N2UKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3JmX3BhdGNoZXMvcmZfcGF0Y2hfY3BlX2JsZV9wcml2XzFfMi5oCkBAIC0wLDAgKzEsMzMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgcmZfcGF0Y2hfY3BlX2JsZV9wcml2XzFfMi5oCisqICBSZXZpc2VkOiAgICAgICAgJERhdGUkCisqICBSZXZpc2lvbjogICAgICAgJFJldmlzaW9uJAorKgorKiAgRGVzY3JpcHRpb246ICAgIFJGIENvcmUgcGF0Y2ggZmlsZSBmb3IgQ0MyNnh4IEJsdWV0b290aCBMb3cgRW5lcmd5IHdpdGggcHJpdmFjeSAxLjIgc3VwcG9ydAorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9SRl9QQVRDSF9DUEVfQkxFX1BSSVZfMV8yX0gKKyNkZWZpbmUgX1JGX1BBVENIX0NQRV9CTEVfUFJJVl8xXzJfSAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBDUEVfUEFUQ0hfVFlQRQorI2RlZmluZSBDUEVfUEFUQ0hfVFlQRSBzdGF0aWMgY29uc3QgdWludDMyX3QKKyNlbmRpZgorCisjaWZuZGVmIFNZU19QQVRDSF9UWVBFCisjZGVmaW5lIFNZU19QQVRDSF9UWVBFIHN0YXRpYyBjb25zdCB1aW50MzJfdAorI2VuZGlmCisKKyNpZm5kZWYgUEFUQ0hfRlVOX1NQRUMKKyNkZWZpbmUgUEFUQ0hfRlVOX1NQRUMgc3RhdGljIGlubGluZQorI2VuZGlmCisKKyNpZm5kZWYgX0FQUExZX1BBVENIX1RBQgorI2RlZmluZSBfQVBQTFlfUEFUQ0hfVEFCCisjZW5kaWYKKworCitDUEVfUEFUQ0hfVFlQRSBwYXRjaEltYWdlQmxlUHJpdjEyW10gPSB7CisgICAweDIxMDAwNWM1LAorICAgMHgyMTAwMDYxMSwKKyAgIDB4MjEwMDA2OTEsCisgICAweDIxMDAwNDdkLAorICAgMHg0YzE3YjVmMCwKKyAgIDB4MTg2MTIxNDAsCisgICAweDI4MDI3OGM4LAorICAgMHg0ODA5ZDAwNSwKKyAgIDB4NjAwMTIxMDAsCisgICAweDQ3ODg0OTA4LAorICAgMHg2ZTI1YmRmMCwKKyAgIDB4NjAzNTRlMDcsCisgICAweDQzMjgwNzYwLAorICAgMHg2ODI3NjYyMCwKKyAgIDB4NDgwZTYwMjQsCisgICAweDYwMjc0NzgwLAorICAgMHhiZGYwNjAzNSwKKyAgIDB4NDAwNDExMmMsCisgICAweDAwMDA2NWE1LAorICAgMHg0MDA0NDAyOCwKKyAgIDB4NGMwN2I1MTAsCisgICAweDI5MDA3ZGExLAorICAgMHgyMTAxZDEwNSwKKyAgIDB4MDI0ODc1YTEsCisgICAweDM5M2U0OTA0LAorICAgMHg2ODIwNDc4OCwKKyAgIDB4ZDAwMDI4MDAsCisgICAweGJkMTA0NzgwLAorICAgMHgyMTAwMDI1NCwKKyAgIDB4MDAwMDM5OGIsCisgICAweDQ5MDViNTEwLAorICAgMHhiNjcyNGEwNSwKKyAgIDB4MjgwMTc4YzgsCisgICAweDIwMDFkYzAyLAorICAgMHgxZDEyNzA0OCwKKyAgIDB4NDcxMGI2NjIsCisgICAweDIxMDAwMjk0LAorICAgMHgwMDAwNDc2ZCwKKyAgIDB4NGQ1M2I1ZmUsCisgICAweDQ2MmM0NjI4LAorICAgMHg5MDAwMzA0MCwKKyAgIDB4N2UwMTQ2MjcsCisgICAweDc4MzgzNzYwLAorICAgMHhkMDAyMjkwMCwKKyAgIDB4ZDEwNzA3YzAsCisgICAweDA5YzFlMDUwLAorICAgMHgwN2MwZDA0ZSwKKyAgIDB4N2QyMGQxNGMsCisgICAweGQ1NDkwNjQwLAorICAgMHgzMTcyNDYyOSwKKyAgIDB4MjAwNjRhNDgsCisgICAweDk4MDA0NzkwLAorICAgMHgyODAwN2UwMCwKKyAgIDB4N2QyMGQwMDcsCisgICAweGQ1MDEwNjQwLAorICAgMHhlMDAwMjAwMywKKyAgIDB4MjYxMzIwMDEsCisgICAweDZmNjhlMDA4LAorICAgMHgyODAxMGY4MCwKKyAgIDB4MjAwNmQwMDIsCisgICAweGUwMDE0NjA2LAorICAgMHgyNjA3MjAwMywKKyAgIDB4MDIzMTIyMDEsCisgICAweDFhODkwNDEyLAorICAgMHgwMjAwOGE3YSwKKyAgIDB4NDMwMjA0MTIsCisgICAweDM1ODA2ZjZiLAorICAgMHg2OGE4OTUwMSwKKyAgIDB4NDdhODRkMzcsCisgICAweDJlMDYyMjAxLAorICAgMHgyZTA3ZDAwMiwKKyAgIDB4ZTAwN2QwMDIsCisgICAweGUwMDU0M2MwLAorICAgMHg3MDc5NzgzOSwKKyAgIDB4NzAzOTQzMTEsCisgICAweDYxMDg5OTAxLAorICAgMHhkYTAxMjgwMCwKKyAgIDB4NTUwMjIwMzksCisgICAweDdlODA5ODAwLAorICAgMHhkMDAyMjgwMCwKKyAgIDB4MjAxZTIxMDYsCisgICAweDZhNjFlMDAyLAorICAgMHgyMDFmMWY4OSwKKyAgIDB4NmNhMTYyYTEsCisgICAweDY0ZTA0Nzg4LAorICAgMHhiZGZlMjAwMCwKKyAgIDB4NDc4MDQ4MjYsCisgICAweDQ4MjJiZGZlLAorICAgMHg3ODQxMzA2MCwKKyAgIDB4ZDAwMjI5MDAsCisgICAweDIxMDA3MDAxLAorICAgMHg0ODIxNzA0MSwKKyAgIDB4NDcwMDM4YjAsCisgICAweDRlMWNiNWY4LAorICAgMHg0NjM1NDgxZiwKKyAgIDB4N2ZlYzM1NDAsCisgICAweDA5ZTE0NjM3LAorICAgMHg2ZGIxZDAxYSwKKyAgIDB4ZDAxNzI5MDEsCisgICAweDI5MDA3ZjY5LAorICAgMHgwN2ExZDAwMiwKKyAgIDB4ZTAxMWQ1MDIsCisgICAweGQxMGYwN2UxLAorICAgMHgwNjQ5N2QzOSwKKyAgIDB4MjEwM2Q1MGMsCisgICAweDc3ZTk0MzIxLAorICAgMHg2ZjMxNDc4MCwKKyAgIDB4MjkwMTBmODksCisgICAweDIxMDBkMDAyLAorICAgMHg3Njc5MzcyMCwKKyAgIDB4YmRmODc3ZWMsCisgICAweGJkZjg0NzgwLAorICAgMHgzMTQwNDkwOSwKKyAgIDB4MjgxNTc1MDgsCisgICAweDI4MWJkMDA4LAorICAgMHgyODFkZDAwOCwKKyAgIDB4NDkwYWQwMDgsCisgICAweDE4NDAwMDgwLAorICAgMHg0NzcwNjk4MCwKKyAgIDB4NDc3MDQ4MDgsCisgICAweDQ3NzA0ODA4LAorICAgMHg0NzcwNDgwOCwKKyAgIDB4MjEwMDAxNDQsCisgICAweDAwMDBiOGFmLAorICAgMHgwMDAwYTAwMSwKKyAgIDB4MDAwMGJlMDMsCisgICAweDAwMDBiOThkLAorICAgMHgwMDAwY2NjMCwKKyAgIDB4MjEwMDA1NzksCisgICAweDIxMDAwNTYzLAorICAgMHgyMTAwMDQ5ZCwKKyAgIDB4NGUxYWI1ZjgsCisgICAweDZiMzE0NjA1LAorICAgMHgwOWNjNDgxOSwKKyAgIDB4MmQwMDAxZTQsCisgICAweDQ5MThkMDExLAorICAgMHgyOTAyNzgwOSwKKyAgIDB4N2IwMGQwMGYsCisgICAweGI2NzI0MzA0LAorICAgMHg0ZjE1MjAwMSwKKyAgIDB4NDdiODAyNDAsCisgICAweDM4MjA0ODExLAorICAgMHgwOWMxODgwMCwKKyAgIDB4ZDAwNDA3YzksCisgICAweDdhYzBlMDE2LAorICAgMHg3YjQwZTdmMCwKKyAgIDB4NDkwZmU3ZWUsCisgICAweDYxY2M2MzM0LAorICAgMHgwN2MwMGE0MCwKKyAgIDB4MjAwMWQwMGMsCisgICAweDZhZjEwMzgwLAorICAgMHhkMDAxMmQwMCwKKyAgIDB4ZTAwMDQzMDEsCisgICAweDQ2MDg0MzgxLAorICAgMHg0OTA3NjJmMSwKKyAgIDB4NjM0ODM5NDAsCisgICAweDQ3YjgyMDAwLAorICAgMHhiZGY4YjY2MiwKKyAgIDB4MjEwMDAyODAsCisgICAweDIxMDAwMDg4LAorICAgMHgyMTAwMDI5NiwKKyAgIDB4MDAwMDNjZGYsCisgICAweDQwMDQ0MDQwLAorICAgMHgyODAwNDkwNywKKyAgIDB4MjAwNGQwMDAsCisgICAweGI2NzI0YTA2LAorICAgMHgwN2M5NzgwOSwKKyAgIDB4NTgxMGQwMDEsCisgICAweDIwODBlMDAwLAorICAgMHhiMjQwYjY2MiwKKyAgIDB4MDAwMDQ3NzAsCisgICAweDIxMDAwMjZiLAorICAgMHg0MDA0NjA1OCwKK307CisjZGVmaW5lIF9OV09SRF9QQVRDSElNQUdFX0JMRV9QUklWXzFfMiAxNzMKKworI2RlZmluZSBfTldPUkRfUEFUQ0hTWVNfQkxFX1BSSVZfMV8yIDAKKworI2RlZmluZSBfSVJRX1BBVENIXzAgMHgyMTAwMDQxNQorI2RlZmluZSBfSVJRX1BBVENIXzEgMHgyMTAwMDQ1NQorCisKKyNpZm5kZWYgX0JMRV9QUklWXzFfMl9TWVNSQU1fU1RBUlQKKyNkZWZpbmUgX0JMRV9QUklWXzFfMl9TWVNSQU1fU1RBUlQgMHgyMDAwMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgX0JMRV9QUklWXzFfMl9DUEVSQU1fU1RBUlQKKyNkZWZpbmUgX0JMRV9QUklWXzFfMl9DUEVSQU1fU1RBUlQgMHgyMTAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgX0JMRV9QUklWXzFfMl9TWVNfUEFUQ0hfRklYRURfQUREUiAweDIwMDAwMDAwCisKKyNkZWZpbmUgX0JMRV9QUklWXzFfMl9QQVJTRVJfUEFUQ0hfVEFCX09GRlNFVCAweDAzMzQKKyNkZWZpbmUgX0JMRV9QUklWXzFfMl9QQVRDSF9UQUJfT0ZGU0VUIDB4MDMzQworI2RlZmluZSBfQkxFX1BSSVZfMV8yX0lSUVBBVENIX09GRlNFVCAweDAzQUMKKyNkZWZpbmUgX0JMRV9QUklWXzFfMl9QQVRDSF9WRUNfT0ZGU0VUIDB4MDQwNAorCitQQVRDSF9GVU5fU1BFQyB2b2lkIGVudGVyQmxlUHJpdjEyQ3BlUGF0Y2godm9pZCkKK3sKKyAgIHVpbnQzMl90ICpwUGF0Y2hWZWMgPSAodWludDMyX3QgKikgKF9CTEVfUFJJVl8xXzJfQ1BFUkFNX1NUQVJUICsgX0JMRV9QUklWXzFfMl9QQVRDSF9WRUNfT0ZGU0VUKTsKKworI2lmIChfTldPUkRfUEFUQ0hJTUFHRV9CTEVfUFJJVl8xXzIgPiAwKQorICAgbWVtY3B5KHBQYXRjaFZlYywgcGF0Y2hJbWFnZUJsZVByaXYxMiwgc2l6ZW9mKHBhdGNoSW1hZ2VCbGVQcml2MTIpKTsKKyNlbmRpZgorfQorCitQQVRDSF9GVU5fU1BFQyB2b2lkIGVudGVyQmxlUHJpdjEyU3lzUGF0Y2godm9pZCkKK3sKK30KKworUEFUQ0hfRlVOX1NQRUMgdm9pZCBjb25maWd1cmVCbGVQcml2MTJQYXRjaCh2b2lkKQoreworICAgdWludDhfdCAqcFBhdGNoVGFiID0gKHVpbnQ4X3QgKikgKF9CTEVfUFJJVl8xXzJfQ1BFUkFNX1NUQVJUICsgX0JMRV9QUklWXzFfMl9QQVRDSF9UQUJfT0ZGU0VUKTsKKyAgIHVpbnQzMl90ICpwSXJxUGF0Y2ggPSAodWludDMyX3QgKikgKF9CTEVfUFJJVl8xXzJfQ1BFUkFNX1NUQVJUICsgX0JMRV9QUklWXzFfMl9JUlFQQVRDSF9PRkZTRVQpOworCisKKyAgIHBQYXRjaFRhYlsxXSA9IDA7CisgICBwUGF0Y2hUYWJbMTAzXSA9IDE7CisgICBwUGF0Y2hUYWJbNjBdID0gMjsKKyAgIHBQYXRjaFRhYls0OF0gPSAzOworCisgICBwSXJxUGF0Y2hbMV0gPSBfSVJRX1BBVENIXzA7CisgICBwSXJxUGF0Y2hbOV0gPSBfSVJRX1BBVENIXzE7Cit9CisKK1BBVENIX0ZVTl9TUEVDIHZvaWQgYXBwbHlCbGVQcml2MTJQYXRjaCh2b2lkKQoreworICAgZW50ZXJCbGVQcml2MTJTeXNQYXRjaCgpOworICAgZW50ZXJCbGVQcml2MTJDcGVQYXRjaCgpOworICAgY29uZmlndXJlQmxlUHJpdjEyUGF0Y2goKTsKK30KKworUEFUQ0hfRlVOX1NQRUMgdm9pZCByZWZyZXNoQmxlUHJpdjEyUGF0Y2godm9pZCkKK3sKKyAgIGVudGVyQmxlUHJpdjEyQ3BlUGF0Y2goKTsKKyAgIGNvbmZpZ3VyZUJsZVByaXYxMlBhdGNoKCk7Cit9CisKK1BBVENIX0ZVTl9TUEVDIHZvaWQgcmZfcGF0Y2hfY3BlX2JsZV9wcml2XzFfMih2b2lkKQoreworICAgYXBwbHlCbGVQcml2MTJQYXRjaCgpOworfQorCisjdW5kZWYgX0lSUV9QQVRDSF8wCisjdW5kZWYgX0lSUV9QQVRDSF8xCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gIF9SRl9QQVRDSF9DUEVfQkxFX1BSSVZfMV8yX0gKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9yZl9wYXRjaGVzL3JmX3BhdGNoX3JmZV9ibGUuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvcmZfcGF0Y2hlcy9yZl9wYXRjaF9yZmVfYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYwZWIyZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvcmZfcGF0Y2hlcy9yZl9wYXRjaF9yZmVfYmxlLmgKQEAgLTAsMCArMSw0MTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICByZl9wYXRjaF9yZmVfYmxlLmgKKyogIFJldmlzZWQ6ICAgICAgICAkRGF0ZSQKKyogIFJldmlzaW9uOiAgICAgICAkUmV2aXNpb24kCisqCisqICBEZXNjcmlwdGlvbjogCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9SRl9QQVRDSF9SRkVfQkxFX0gKKyNkZWZpbmUgX1JGX1BBVENIX1JGRV9CTEVfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisKKyNpZm5kZWYgUkZFX1BBVENIX1RZUEUKKyNkZWZpbmUgUkZFX1BBVENIX1RZUEUgc3RhdGljIGNvbnN0IHVpbnQzMl90CisjZW5kaWYKKworI2lmbmRlZiBQQVRDSF9GVU5fU1BFQworI2RlZmluZSBQQVRDSF9GVU5fU1BFQyBzdGF0aWMgaW5saW5lCisjZW5kaWYKKworI2lmbmRlZiBSRkNfUkZFUkFNX0JBU0UKKyNkZWZpbmUgUkZDX1JGRVJBTV9CQVNFIDB4MjEwMEMwMDAKKyNlbmRpZgorCitSRkVfUEFUQ0hfVFlQRSBwYXRjaEJsZVJmZVszMTVdID0geyAKKyAgIDB4MDAwMDYxNTQsCisgICAweDAwMDIxNDdmLAorICAgMHgwMDA1MDAwNiwKKyAgIDB4MDAwODAwMGYsCisgICAweDAwNTIwMDQ4LAorICAgMHgwMDNmZmY4MCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDQwMDA0MDMwLAorICAgMHg0MDAzNDAwMSwKKyAgIDB4NDAwZjQwMDcsCisgICAweDQwY2Y0MDRmLAorICAgMHg0M2NmNDFjZiwKKyAgIDB4NGZjZjQ3Y2YsCisgICAweDJmY2YzZmNmLAorICAgMHgwZmNmMWZjZiwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMDBmMDAwMCwKKyAgIDB4MDAwMDAwMDgsCisgICAweDAwMDAwMDNmLAorICAgMHgwMDNmMDA0MCwKKyAgIDB4MDAwNDAwMDAsCisgICAweDAwMGUwMDY4LAorICAgMHgwMDA2MDBkYywKKyAgIDB4MDAxYTAwNDMsCisgICAweDAwMDAwMDA1LAorICAgMHgwMDAyMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMGMwMDAwNCwKKyAgIDB4MDAwNDAwMDAsCisgICAweDAwMDAwMGMwLAorICAgMHgwMDAwMDAwNywKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDkxMDBjMDUwLAorICAgMHhjMDcwNzAwMCwKKyAgIDB4NzAwMDkxMDAsCisgICAweDAwMjEzMTgyLAorICAgMHhiMTEwOTEzMSwKKyAgIDB4ODEwMTcwMDAsCisgICAweGExMDBiMTAxLAorICAgMHg5MTMyMzE4MiwKKyAgIDB4OTEwMWIxMTAsCisgICAweDgxNDExMDExLAorICAgMHg0MDYzMjI0MSwKKyAgIDB4NzAwMDA2ZjEsCisgICAweDkxMDFjMDUxLAorICAgMHgzOTEwMTgzMCwKKyAgIDB4ZDAwODMxODMsCisgICAweDZmNDEzMTE4LAorICAgMHg5MTMxMDAzMSwKKyAgIDB4MTQ4M2IxMTAsCisgICAweDY4NmYxNjE0LAorICAgMHgxMDI1NzAwMCwKKyAgIDB4OTEwMGMwNTAsCisgICAweGMxNDBjM2Y0LAorICAgMHg2ZjAzMTQyMCwKKyAgIDB4MDQ0MTEwMzEsCisgICAweDIyZjA4MjUwLAorICAgMHgyNjUxNDA4NCwKKyAgIDB4MzE4MmMwMjIsCisgICAweDkxMzEwMDIxLAorICAgMHgzOTYzYjExMCwKKyAgIDB4MDQ0MTEwMzEsCisgICAweDMxODJjMDgyLAorICAgMHg5MTMxMDAyMSwKKyAgIDB4Mzk2M2IxMTAsCisgICAweGMwYTIxMDMxLAorICAgMHgwMDIxMzE4MiwKKyAgIDB4YjExMDkxMzEsCisgICAweDMxMTUxMDUwLAorICAgMHg5MjA1MTQwNSwKKyAgIDB4NjQ1MzcwMDAsCisgICAweDEwMzFjMDUyLAorICAgMHgzMTYxMDYzMSwKKyAgIDB4NjQ1NjAyYzEsCisgICAweDEwMzFjMTEyLAorICAgMHgwNjcxMzkyMSwKKyAgIDB4MDJlMTMxNTEsCisgICAweDcwMDA2NDU2LAorICAgMHg5MTAxYzA1MSwKKyAgIDB4YzBlMmNjMDEsCisgICAweDY0NTM2NDU2LAorICAgMHhjMGMyYzExMSwKKyAgIDB4YjA1NDY0NTYsCisgICAweGEwNTQ3MTAwLAorICAgMHg4MGYwYjA2NCwKKyAgIDB4NDBiNTIyMDAsCisgICAweGMxMjJjMTExLAorICAgMHhjMDUxNjQ1NiwKKyAgIDB4YzBlMjkxMDEsCisgICAweDgyNjAzMTgyLAorICAgMHg5MTMyMDAwMiwKKyAgIDB4YzMwMGIxMTAsCisgICAweDY0NTM2OGM4LAorICAgMHg5MGIwMTI0MCwKKyAgIDB4YzMwMGIwMzIsCisgICAweGMyNDA2OGNlLAorICAgMHgxMjgwNjhkMCwKKyAgIDB4YjAzMjkwYjAsCisgICAweDY0NTM3MDAwLAorICAgMHhjMTIyYzEwMSwKKyAgIDB4YzEwMTY0NTYsCisgICAweDY0NTZjMGMyLAorICAgMHg2NDlkODI1MywKKyAgIDB4OTBiMDEyYzAsCisgICAweDcwMDBiMDMyLAorICAgMHhjMjcyNjQ1MywKKyAgIDB4NjQ1NmMwODEsCisgICAweGMxMTFjMTIyLAorICAgMHhjMDAyNjQ1NiwKKyAgIDB4NjQ1NmMxMTEsCisgICAweGMzMzFjMDYyLAorICAgMHhjMzYyNjQ1NiwKKyAgIDB4NjQ1NmMxMTEsCisgICAweGMxMTFjMzAyLAorICAgMHg4MjUzNjQ1NiwKKyAgIDB4NjQ5ZDM5NTMsCisgICAweDY0NWJjM2UyLAorICAgMHg0MGY4MjIxMSwKKyAgIDB4Yzg4MWMyNDIsCisgICAweGMyNTI2NDU2LAorICAgMHg2NDU2YzExMSwKKyAgIDB4Y2VlMWMyNzIsCisgICAweGMyMDI2NDU2LAorICAgMHg2NDU2Yzg4MSwKKyAgIDB4YzgwMWMyMDIsCisgICAweGMwYjA2NDU2LAorICAgMHg3MDAwNjkwYywKKyAgIDB4YzI0MjY0NTMsCisgICAweDY0NTZjODAxLAorICAgMHhjMDExYzI1MiwKKyAgIDB4YzI3MjY0NTYsCisgICAweDY0NTZjMGUxLAorICAgMHhjMTAxYzAwMiwKKyAgIDB4YzA2MjY0NTYsCisgICAweDY0NTZjMzAxLAorICAgMHhjMTAxYzEyMiwKKyAgIDB4YzM2MjY0NTYsCisgICAweDY0NTZjMTAxLAorICAgMHhjMTAxYzMwMiwKKyAgIDB4ODI1MzY0NTYsCisgICAweDcwMDA2NDlkLAorICAgMHgzMTYyYzEwMiwKKyAgIDB4ODBhMGMwMDEsCisgICAweDQxMzIxZTAwLAorICAgMHg2MTM0MWExMCwKKyAgIDB4MWExMDEwMjAsCisgICAweDZlMjM2ZjEzLAorICAgMHgxNjEyMTYxMSwKKyAgIDB4NzAwMDY5MzQsCisgICAweDgyZDA5MmUwLAorICAgMHg0NTNiMjIwMCwKKyAgIDB4NzAwMGIyYzAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHg3MjA1NzMwNiwKKyAgIDB4NzIwZTcyMGIsCisgICAweDcxMDBiMDUwLAorICAgMHhiMDYwODA4MSwKKyAgIDB4ODA5MmEwNTAsCisgICAweDkyZjFlZmYwLAorICAgMHg2NTNhOTMwMiwKKyAgIDB4NDU3ODIyNDEsCisgICAweGMxZjE4MDgwLAorICAgMHgxNjMwMDQxMCwKKyAgIDB4MTQwMTExMDEsCisgICAweDYxOGI2YzAxLAorICAgMHg2MThkNjE4YywKKyAgIDB4NjE4ZjYxOGUsCisgICAweDYxOTE2MTkwLAorICAgMHg2MTk1NjE5MywKKyAgIDB4NjE5OTYxOTcsCisgICAweDYyNzM2MjcwLAorICAgMHhjMGYyODA5MSwKKyAgIDB4MzEyMTA0MjEsCisgICAweDJhNDI4MDgyLAorICAgMHgxNjMyMTQxMiwKKyAgIDB4MTQyMTExMDEsCisgICAweDYxYTY2YzAxLAorICAgMHg2MWFjNjFjNywKKyAgIDB4NjFhNjYyNzMsCisgICAweDYxYWM2MWM3LAorICAgMHg2MTliNjI3MywKKyAgIDB4NjE5YjYxOWIsCisgICAweDYxOWI2MTliLAorICAgMHg2NGFjNjE5YiwKKyAgIDB4NjRkNTYxOWIsCisgICAweDY0ZTI2MTliLAorICAgMHg2NTBlNjE5YiwKKyAgIDB4NjUyYTYxOWIsCisgICAweDgwODI2MTliLAorICAgMHg5MmYyZGZlMCwKKyAgIDB4YjBiMDY1M2EsCisgICAweGIwYjE2MWEyLAorICAgMHg3MjA1NzMwNiwKKyAgIDB4NjE1OGIwMzAsCisgICAweDY1M2FjZmQwLAorICAgMHhjMDAzYzI4NCwKKyAgIDB4NjQ2OGMzYzAsCisgICAweDkxNTA3ODkwLAorICAgMHgzMTEwNzg2MCwKKyAgIDB4MTQxMDc4NjEsCisgICAweDc4NTA5MjAwLAorICAgMHg3ODYxMzE0MCwKKyAgIDB4MzE0MDAwMTAsCisgICAweDAwMTA3ODcxLAorICAgMHg3OGIwOTIxMCwKKyAgIDB4Nzg4MTkyNjAsCisgICAweDc4MzA5MjIxLAorICAgMHg3ODQxMzE0MCwKKyAgIDB4OTIzMDAwMTAsCisgICAweDkxZjBjMDEwLAorICAgMHhhMDU0NjE5YiwKKyAgIDB4MjI1MDgwZjAsCisgICAweDgwNDA0NWNmLAorICAgMHg0NjY2MjIwMCwKKyAgIDB4YzgwMDYxYzcsCisgICAweDgxNTk5MTYwLAorICAgMHg4MDkxYjA1MCwKKyAgIDB4NDYyZTIyNDEsCisgICAweDY1M2FjZmMwLAorICAgMHgzMTgyODIxMiwKKyAgIDB4Mzk0MjM5ODIsCisgICAweDY0NzcxMDI4LAorICAgMHgxMmYxODIxMiwKKyAgIDB4MTAyZjA0MTIsCisgICAweDE0MmYzMTFmLAorICAgMHgxNDIwYzE0MCwKKyAgIDB4Mzk2ZDZmMGQsCisgICAweGMzZjQxMGRlLAorICAgMHhjMDgyMDQ0ZSwKKyAgIDB4MDAyZTMxODIsCisgICAweGMwYTIzOTZkLAorICAgMHgwMDJkMzE4MiwKKyAgIDB4Mzk4YTgyMWEsCisgICAweDMxODA4MjIwLAorICAgMHhjMDBiMzk4MCwKKyAgIDB4NzhhYzE4MGIsCisgICAweDM5NDA4MjMwLAorICAgMHhjMDExMTAwMiwKKyAgIDB4YzAxMDMwMDEsCisgICAweDE4MDIxODAxLAorICAgMHgwMDIxMzE4MiwKKyAgIDB4OTE5MTI2YzEsCisgICAweGIwMTNiMDAzLAorICAgMHhiMDUzYjA2MywKKyAgIDB4MTQzOTgyMDMsCisgICAweDIyMDE4MDQxLAorICAgMHg4MWI0NDY2NiwKKyAgIDB4ODFkNTkxYzQsCisgICAweDFjYjUxODk1LAorICAgMHgxY2M1NGUxYywKKyAgIDB4OTE2NTRhNTQsCisgICAweDIyMTA4MGYwLAorICAgMHg2MjJjNDIwYywKKyAgIDB4YjExMDkxM2QsCisgICAweGIxMTA5MTNlLAorICAgMHg5MjBmOTE2NSwKKyAgIDB4MTRmOTgxNTksCisgICAweDEwYmMxOGFiLAorICAgMHgyMjUwODBmMCwKKyAgIDB4MjIxMDQxYzcsCisgICAweDYyMGM0NjJjLAorICAgMHg2NTNhY2ZiMCwKKyAgIDB4ODIzMGIwNjMsCisgICAweGMwZjIxMDAwLAorICAgMHgxMDAyMDQyMCwKKyAgIDB4MzAwMWMwMTEsCisgICAweDE4MDFjMDEwLAorICAgMHgzMTgyMTgwMiwKKyAgIDB4MjZjMTAwMjEsCisgICAweDkxOTE5MTkxLAorICAgMHhiMDAzYjAxMywKKyAgIDB4YjA1M2IwNjMsCisgICAweGIwNTRiMDY0LAorICAgMHg4MDQxNzEwMCwKKyAgIDB4NDY2NjIyMDEsCisgICAweGIwNjRiMDYzLAorICAgMHgyMjUwODBmMCwKKyAgIDB4ODFiMTQxYzcsCisgICAweDgxZDE5MWMxLAorICAgMHg5MTYxMTg5MSwKKyAgIDB4NjI0NGIwMzEsCisgICAweDMxODI4MjEyLAorICAgMHgzOTQyMzk4MiwKKyAgIDB4NjQ3NzEwMjgsCisgICAweDgyMDU4MTU5LAorICAgMHg4MjIwMTQ1OSwKKyAgIDB4MTgwYmMwMGIsCisgICAweGMwODA3OGFjLAorICAgMHhiMDYzNzEwMCwKKyAgIDB4NjIwYzZhNjIsCisgICAweDgxNjI4MjAxLAorICAgMHgzZDgyMzE4MiwKKyAgIDB4OTJmMWVmYTAsCisgICAweDY1M2E5MzAyLAorICAgMHg2MTliYTAwMywKKyAgIDB4NjQ3NzgwYTIsCisgICAweGIwNTA2MTliLAorICAgMHg2MTliNzEwMAorfTsKKworUEFUQ0hfRlVOX1NQRUMgdm9pZCByZl9wYXRjaF9yZmVfYmxlKHZvaWQpCit7CisjaWZkZWYgX19QQVRDSF9OT19VTlJPTExJTkcKKyAgIHVpbnQzMl90IGk7CisgICBmb3IgKGkgPSAwOyBpIDwgMzE1OyBpKyspIHsKKyAgICAgIEhXUkVHKFJGQ19SRkVSQU1fQkFTRSArIDQgKiBpKSA9IHBhdGNoQmxlUmZlW2ldOworICAgfQorI2Vsc2UKKyAgIGNvbnN0IHVpbnQzMl90ICpwUyA9IHBhdGNoQmxlUmZlOworICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcEQgPSAmSFdSRUcoUkZDX1JGRVJBTV9CQVNFKTsKKyAgIHVpbnQzMl90IHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0ODsKKyAgIHVpbnQzMl90IG5JdGVyYXRpb25zID0gMzk7CisKKyAgIGRvIHsKKyAgICAgIHQxID0gKnBTKys7CisgICAgICB0MiA9ICpwUysrOworICAgICAgdDMgPSAqcFMrKzsKKyAgICAgIHQ0ID0gKnBTKys7CisgICAgICB0NSA9ICpwUysrOworICAgICAgdDYgPSAqcFMrKzsKKyAgICAgIHQ3ID0gKnBTKys7CisgICAgICB0OCA9ICpwUysrOworICAgICAgKnBEKysgPSB0MTsKKyAgICAgICpwRCsrID0gdDI7CisgICAgICAqcEQrKyA9IHQzOworICAgICAgKnBEKysgPSB0NDsKKyAgICAgICpwRCsrID0gdDU7CisgICAgICAqcEQrKyA9IHQ2OworICAgICAgKnBEKysgPSB0NzsKKyAgICAgICpwRCsrID0gdDg7CisgICB9IHdoaWxlICgtLW5JdGVyYXRpb25zKTsKKworICAgdDEgPSAqcFMrKzsKKyAgIHQyID0gKnBTKys7CisgICB0MyA9ICpwUysrOworICAgKnBEKysgPSB0MTsKKyAgICpwRCsrID0gdDI7CisgICAqcEQrKyA9IHQzOworI2VuZGlmCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL2NjZmcuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvc3RhcnR1cF9maWxlcy9jY2ZnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhMjlmYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvc3RhcnR1cF9maWxlcy9jY2ZnLmMKQEAgLTAsMCArMSw0ODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBjY2ZnLmMKKyogIFJldmlzZWQ6ICAgICAgICAkRGF0ZTogMjAxNi0wMy0xNCAxMDo0NjozMiArMDEwMCAobWEsIDE0IG1hciAyMDE2KSAkCisqICBSZXZpc2lvbjogICAgICAgJFJldmlzaW9uOiAxNjg2MiAkCisqCisqICBEZXNjcmlwdGlvbjogICAgQ3VzdG9tZXIgQ29uZmlndXJhdGlvbiBmb3IgQ0MyNnh4IGRldmljZSBmYW1pbHkgKEhXIHJldiAyKS4KKyoKKyogIENvcHlyaWdodCAoQykgMjAxNCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyoKKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqICBhcmUgbWV0OgorKgorKiAgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogICAgTmVpdGhlciB0aGUgbmFtZSBvZiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgbm9yIHRoZSBuYW1lcyBvZgorKiAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisqICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyogIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyogIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyogIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfY2NmZy5oPgorI2luY2x1ZGUgPGluYy9od19jY2ZnX3NpbXBsZV9zdHJ1Y3QuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEludHJvZHVjdGlvbgorLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyBmaWVsZHMgdXNlZCBieSBCb290IFJPTSwgc3RhcnR1cCBjb2RlLCBhbmQgU1cgcmFkaW8gCisvLyBzdGFja3MgdG8gY29uZmlndXJlIGNoaXAgYmVoYXZpb3IuCisvLworLy8gRmllbGRzIGFyZSBkb2N1bWVudGVkIGluIG1vcmUgZGV0YWlscyBpbiBod19jY2ZnLmggYW5kIENDRkcuaHRtbCBpbiAKKy8vIERyaXZlckxpYiBkb2N1bWVudGF0aW9uIChkb2Nfb3ZlcnZpZXcuaHRtbCAtPiBDUFUgRG9tYWluIE1lbW9yeSBNYXAgLT4gQ0NGRykuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU2V0IHRoZSB2YWx1ZXMgb2YgdGhlIGluZGl2aWR1YWwgYml0IGZpZWxkcy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gQWx0ZXJuYXRpdmUgREMvREMgc2V0dGluZ3MKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjaWZuZGVmIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfQUxUX0RDRENfU0VUVElORworI2RlZmluZSBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0FMVF9EQ0RDX1NFVFRJTkcgICAgMHgwICAgIC8vIEFsdGVybmF0aXZlIERDL0RDIHNldHRpbmcgZW5hYmxlZAorLy8gI2RlZmluZSBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0FMVF9EQ0RDX1NFVFRJTkcgMHgxICAgIC8vIEFsdGVybmF0aXZlIERDL0RDIHNldHRpbmcgZGlzYWJsZWQKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX1ZNSU4KKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfVk1JTiAgICAgICAgICAgICAgMHg4ICAgICAgICAvLyAyLjI1VgorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfRElUSEVSX0VOCisjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX0RJVEhFUl9FTiAgICAgICAgIDB4MCAgICAgICAgLy8gRGlzYWJsZQorLy8gI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19ESVRIRVJfRU4gICAgICAweDEgICAgICAgIC8vIEVuYWJsZQorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfSVBFQUsKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfSVBFQUsgICAgICAgICAgICAgMHgyICAgICAgICAvLyAzOW1BCisjZW5kaWYKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBYT1NDIG92ZXJyaWRlIHNldHRpbmdzCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworI2lmbmRlZiBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1hPU0NfT1ZSCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfWE9TQ19PVlIgICAgIDB4MCAgICAgICAgLy8gRW5hYmxlIG92ZXJyaWRlCisjZGVmaW5lIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfWE9TQ19PVlIgICAgICAgIDB4MSAgICAgICAgLy8gRGlzYWJsZSBvdmVycmlkZQorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfSU5JVAorI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19JTklUICAgICAgICAgICAweDAgICAgICAgIC8vIERlbHRhID0gMAorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfT0ZGU0VUCisjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl8xX0RFTFRBX0lCSUFTX09GRlNFVCAgICAgICAgIDB4MCAgICAgICAgLy8gRGVsdGEgPSAwCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19NT0RFX0NPTkZfMV9YT1NDX01BWF9TVEFSVAorI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfMV9YT1NDX01BWF9TVEFSVCAgICAgICAgICAgICAweDEwICAgICAgIC8vIDE2MDB1cworI2VuZGlmCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gUG93ZXIgc2V0dGluZ3MKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjaWZuZGVmIFNFVF9DQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfREVMVEEKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9ERUxUQSAgICAgICAgMHhGICAgICAgICAvLyBTaWduZWQgZGVsdGEgdmFsdWUgKzEgdG8gYXBwbHkgdG8gdGhlIFZERFJfVFJJTV9TTEVFUCB0YXJnZXQgKDB4Rj0tMT1kZWZhdWx0PW5vIGNvbXBlbnNhdGlvbikKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX01PREVfQ09ORl9EQ0RDX1JFQ0hBUkdFCisjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9EQ0RDX1JFQ0hBUkdFICAgICAgICAgICAgICAgIDB4MCAgICAgICAgLy8gVXNlIHRoZSBEQy9EQyBkdXJpbmcgcmVjaGFyZ2UgaW4gcG93ZXJkb3duCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9EQ0RDX1JFQ0hBUkdFICAgICAgICAgICAgIDB4MSAgICAgICAgLy8gRG8gbm90IHVzZSB0aGUgREMvREMgZHVyaW5nIHJlY2hhcmdlIGluIHBvd2VyZG93bgorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GX0RDRENfQUNUSVZFCisjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9EQ0RDX0FDVElWRSAgICAgICAgICAgICAgICAgIDB4MCAgICAgICAgLy8gVXNlIHRoZSBEQy9EQyBkdXJpbmcgYWN0aXZlIG1vZGUKKy8vICNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX0RDRENfQUNUSVZFICAgICAgICAgICAgICAgMHgxICAgICAgICAvLyBEbyBub3QgdXNlIHRoZSBEQy9EQyBkdXJpbmcgYWN0aXZlIG1vZGUKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX01PREVfQ09ORl9WRERTX0JPRF9MRVZFTAorLy8gI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfVkREU19CT0RfTEVWRUwgICAgICAgICAgICAweDAgICAgICAgIC8vIFZERFMgQk9EIGxldmVsIGlzIDIuMFYKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1ZERFNfQk9EX0xFVkVMICAgICAgICAgICAgICAgMHgxICAgICAgICAvLyBWRERTIEJPRCBsZXZlbCBpcyAxLjhWIChvciAxLjY1ViBmb3IgZXh0ZXJuYWwgcmVndWxhdG9yIG1vZGUpCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19NT0RFX0NPTkZfVkREUl9DQVAKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1ZERFJfQ0FQICAgICAgICAgICAgICAgICAgICAgMHgzQSAgICAgICAvLyBVbnNpZ25lZCA4LWJpdCBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbWluLiBkZWNvdXBsaW5nIGNhcGFjaXRhbmNlIG9uIFZERFIgaW4gdW5pdHMgb2YgMTAwbkYKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfVEMKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9UQyAgICAgICAgICAgMHgxICAgICAgICAvLyBUZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gb24gVkREUiBzbGVlcCB0cmltIGRpc2FibGVkIChkZWZhdWx0KQorLy8gI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX1RDICAgICAgICAweDAgICAgICAgIC8vIFRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBvbiBWRERSIHNsZWVwIHRyaW0gZW5hYmxlZAorI2VuZGlmCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gQ2xvY2sgc2V0dGluZ3MKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjaWZuZGVmIFNFVF9DQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTgorLy8gI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT04gICAgICAgICAgICAweDAgICAgICAgIC8vIExGIGNsb2NrIGRlcml2ZWQgZnJvbSBIaWdoIEZyZXF1ZW5jeSBYT1NDCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTiAgICAgICAgICAgIDB4MSAgICAgICAgLy8gRXh0ZXJuYWwgTEYgY2xvY2sKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OICAgICAgICAgICAgICAgMHgyICAgICAgICAvLyBMRiBYT1NDCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTiAgICAgICAgICAgIDB4MyAgICAgICAgLy8gTEYgUkNPU0MKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX01PREVfQ09ORl9YT1NDX0NBUF9NT0QKKy8vICNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1hPU0NfQ0FQX01PRCAgICAgICAgICAgICAgMHgwICAgICAgICAvLyBBcHBseSBjYXAtYXJyYXkgZGVsdGEKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1hPU0NfQ0FQX01PRCAgICAgICAgICAgICAgICAgMHgxICAgICAgICAvLyBEb24ndCBhcHBseSBjYXAtYXJyYXkgZGVsdGEgCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19NT0RFX0NPTkZfWE9TQ19DQVBBUlJBWV9ERUxUQQorI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfWE9TQ19DQVBBUlJBWV9ERUxUQSAgICAgICAgICAweEZGICAgICAgIC8vIFNpZ25lZCA4LWJpdCB2YWx1ZSwgZGlyZWN0bHkgbW9kaWZ5aW5nIHRyaW1tZWQgWE9TQyBjYXAtYXJyYXkgdmFsdWUKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX0VYVF9MRl9DTEtfRElPCisjZGVmaW5lIFNFVF9DQ0ZHX0VYVF9MRl9DTEtfRElPICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEgICAgICAgLy8gRElPIG51bWJlciBpZiB1c2luZyBleHRlcm5hbCBMRiBjbG9jaworI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfRVhUX0xGX0NMS19SVENfSU5DUkVNRU5UCisjZGVmaW5lIFNFVF9DQ0ZHX0VYVF9MRl9DTEtfUlRDX0lOQ1JFTUVOVCAgICAgICAgICAgICAgIDB4ODAwMDAwICAgLy8gUlRDIGluY3JlbWVudCByZXByZXNlbnRpbmcgdGhlIGV4dGVybmFsIExGIGNsb2NrIGZyZXF1ZW5jeQorI2VuZGlmCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gU3BlY2lhbCBIRiBjbG9jayBzb3VyY2Ugc2V0dGluZworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjaWZuZGVmIFNFVF9DQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVEKKy8vICNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1hPU0NfRlJFUSAgICAgICAgICAgICAgICAgMHgxICAgICAgICAvLyBVc2UgSFBPU0MgYXMgSEYgc291cmNlIChpZiBleGVjdXRpbmcgb24gYSBIUE9TQyBjaGlwLCBvdGhlcndpc2UgdXNpbmcgZGVmYXVsdCAoPTB4MykpCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVEgICAgICAgICAgICAgICAgIDB4MiAgICAgICAgLy8gSEYgc291cmNlIGlzIGEgNDggTUh6IHh0YWwKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1hPU0NfRlJFUSAgICAgICAgICAgICAgICAgICAgMHgzICAgICAgICAvLyBIRiBzb3VyY2UgaXMgYSAyNCBNSHogeHRhbCAoZGVmYXVsdCkKKyNlbmRpZgorCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIEJvb3Rsb2FkZXIgc2V0dGluZ3MKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjaWZuZGVmIFNFVF9DQ0ZHX0JMX0NPTkZJR19CT09UTE9BREVSX0VOQUJMRQorI2RlZmluZSBTRVRfQ0NGR19CTF9DT05GSUdfQk9PVExPQURFUl9FTkFCTEUgICAgICAgICAgICAweDAwICAgICAgIC8vIERpc2FibGUgUk9NIGJvb3QgbG9hZGVyCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0JMX0NPTkZJR19CT09UTE9BREVSX0VOQUJMRSAgICAgICAgIDB4QzUgICAgICAgLy8gRW5hYmxlIFJPTSBib290IGxvYWRlcgorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfQkxfQ09ORklHX0JMX0xFVkVMCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0JMX0NPTkZJR19CTF9MRVZFTCAgICAgICAgICAgICAgICAgIDB4MCAgICAgICAgLy8gQWN0aXZlIGxvdyB0byBvcGVuIGJvb3QgbG9hZGVyIGJhY2tkb29yCisjZGVmaW5lIFNFVF9DQ0ZHX0JMX0NPTkZJR19CTF9MRVZFTCAgICAgICAgICAgICAgICAgICAgIDB4MSAgICAgICAgLy8gQWN0aXZlIGhpZ2ggdG8gb3BlbiBib290IGxvYWRlciBiYWNrZG9vcgorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfQkxfQ09ORklHX0JMX1BJTl9OVU1CRVIKKyNkZWZpbmUgU0VUX0NDRkdfQkxfQ09ORklHX0JMX1BJTl9OVU1CRVIgICAgICAgICAgICAgICAgMHhGRiAgICAgICAvLyBESU8gbnVtYmVyIGZvciBib290IGxvYWRlciBiYWNrZG9vcgorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfQkxfQ09ORklHX0JMX0VOQUJMRQorLy8gI2RlZmluZSBTRVRfQ0NGR19CTF9DT05GSUdfQkxfRU5BQkxFICAgICAgICAgICAgICAgICAweEM1ICAgICAgIC8vIEVuYWJsZWQgYm9vdCBsb2FkZXIgYmFja2Rvb3IKKyNkZWZpbmUgU0VUX0NDRkdfQkxfQ09ORklHX0JMX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMHhGRiAgICAgICAvLyBEaXNhYmxlZCBib290IGxvYWRlciBiYWNrZG9vcgorI2VuZGlmCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gRGVidWcgYWNjZXNzIHNldHRpbmdzCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworI2lmbmRlZiBTRVRfQ0NGR19DQ0ZHX1RJX09QVElPTlNfVElfRkFfRU5BQkxFCisjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVElfT1BUSU9OU19USV9GQV9FTkFCTEUgICAgICAgICAgIDB4MDAgICAgICAgLy8gRGlzYWJsZSB1bmxvY2tpbmcgb2YgVEkgRkEgb3B0aW9uLgorLy8gI2RlZmluZSBTRVRfQ0NGR19DQ0ZHX1RJX09QVElPTlNfVElfRkFfRU5BQkxFICAgICAgICAweEM1ICAgICAgIC8vIEVuYWJsZSB1bmxvY2tpbmcgb2YgVEkgRkEgb3B0aW9uIHdpdGggdGhlIHVubG9jayBjb2RlCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19DQ0ZHX1RBUF9EQVBfMF9DUFVfREFQX0VOQUJMRQorLy8gI2RlZmluZSBTRVRfQ0NGR19DQ0ZHX1RBUF9EQVBfMF9DUFVfREFQX0VOQUJMRSAgICAgICAweDAwICAgICAgIC8vIEFjY2VzcyBkaXNhYmxlZAorI2RlZmluZSBTRVRfQ0NGR19DQ0ZHX1RBUF9EQVBfMF9DUFVfREFQX0VOQUJMRSAgICAgICAgICAweEM1ICAgICAgIC8vIEFjY2VzcyBlbmFibGVkIGlmIGFsc28gZW5hYmxlZCBpbiBGQ0ZHCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19DQ0ZHX1RBUF9EQVBfMF9QUkNNX1RBUF9FTkFCTEUKKyNkZWZpbmUgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzBfUFJDTV9UQVBfRU5BQkxFICAgICAgICAgMHgwMCAgICAgICAvLyBBY2Nlc3MgZGlzYWJsZWQKKy8vICNkZWZpbmUgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzBfUFJDTV9UQVBfRU5BQkxFICAgICAgMHhDNSAgICAgICAvLyBBY2Nlc3MgZW5hYmxlZCBpZiBhbHNvIGVuYWJsZWQgaW4gRkNGRworI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzBfVEVTVF9UQVBfRU5BQkxFCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8wX1RFU1RfVEFQX0VOQUJMRSAgICAgIDB4MDAgICAgICAgLy8gQWNjZXNzIGRpc2FibGVkCisjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8wX1RFU1RfVEFQX0VOQUJMRSAgICAgICAgIDB4QzUgICAgICAgLy8gQWNjZXNzIGVuYWJsZWQgaWYgYWxzbyBlbmFibGVkIGluIEZDRkcKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMl9UQVBfRU5BQkxFCisjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMl9UQVBfRU5BQkxFICAgICAgIDB4MDAgICAgICAgLy8gQWNjZXNzIGRpc2FibGVkCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMl9UQVBfRU5BQkxFICAgIDB4QzUgICAgICAgLy8gQWNjZXNzIGVuYWJsZWQgaWYgYWxzbyBlbmFibGVkIGluIEZDRkcKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMV9UQVBfRU5BQkxFCisjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMV9UQVBfRU5BQkxFICAgICAgIDB4MDAgICAgICAgLy8gQWNjZXNzIGRpc2FibGVkCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMV9UQVBfRU5BQkxFICAgIDB4QzUgICAgICAgLy8gQWNjZXNzIGVuYWJsZWQgaWYgYWxzbyBlbmFibGVkIGluIEZDRkcKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8xX1dVQ19UQVBfRU5BQkxFCisjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8xX1dVQ19UQVBfRU5BQkxFICAgICAgICAgIDB4MDAgICAgICAgLy8gQWNjZXNzIGRpc2FibGVkCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8xX1dVQ19UQVBfRU5BQkxFICAgICAgIDB4QzUgICAgICAgLy8gQWNjZXNzIGVuYWJsZWQgaWYgYWxzbyBlbmFibGVkIGluIEZDRkcKKyNlbmRpZgorCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIEFsdGVybmF0aXZlIElFRUUgODAyLjE1LjQgTUFDIGFkZHJlc3MKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI2lmbmRlZiBTRVRfQ0NGR19JRUVFX01BQ18wCisjZGVmaW5lIFNFVF9DQ0ZHX0lFRUVfTUFDXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYgLy8gQml0cyBbMzE6MF0KKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX0lFRUVfTUFDXzEKKyNkZWZpbmUgU0VUX0NDRkdfSUVFRV9NQUNfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRiAvLyBCaXRzIFs2MzozMl0KKyNlbmRpZgorCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIEFsdGVybmF0aXZlIEJMRSBhZGRyZXNzCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyNpZm5kZWYgU0VUX0NDRkdfSUVFRV9CTEVfMAorI2RlZmluZSBTRVRfQ0NGR19JRUVFX0JMRV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGIC8vIEJpdHMgWzMxOjBdCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19JRUVFX0JMRV8xCisjZGVmaW5lIFNFVF9DQ0ZHX0lFRUVfQkxFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYgLy8gQml0cyBbNjM6MzJdCisjZW5kaWYKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBGbGFzaCBlcmFzZSBzZXR0aW5ncworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyNpZm5kZWYgU0VUX0NDRkdfRVJBU0VfQ09ORl9DSElQX0VSQVNFX0RJU19OCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0VSQVNFX0NPTkZfQ0hJUF9FUkFTRV9ESVNfTiAgICAgICAgIDB4MCAgICAgICAgLy8gQW55IGNoaXAgZXJhc2UgcmVxdWVzdCBkZXRlY3RlZCBkdXJpbmcgYm9vdCB3aWxsIGJlIGlnbm9yZWQKKyNkZWZpbmUgU0VUX0NDRkdfRVJBU0VfQ09ORl9DSElQX0VSQVNFX0RJU19OICAgICAgICAgICAgMHgxICAgICAgICAvLyBBbnkgY2hpcCBlcmFzZSByZXF1ZXN0IGRldGVjdGVkIGR1cmluZyBib290IHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHRoZSBib290IEZXCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19FUkFTRV9DT05GX0JBTktfRVJBU0VfRElTX04KKy8vICNkZWZpbmUgU0VUX0NDRkdfRVJBU0VfQ09ORl9CQU5LX0VSQVNFX0RJU19OICAgICAgICAgMHgwICAgICAgICAvLyBEaXNhYmxlIHRoZSBib290IGxvYWRlciBiYW5rIGVyYXNlIGZ1bmN0aW9uCisjZGVmaW5lIFNFVF9DQ0ZHX0VSQVNFX0NPTkZfQkFOS19FUkFTRV9ESVNfTiAgICAgICAgICAgIDB4MSAgICAgICAgLy8gRW5hYmxlIHRoZSBib290IGxvYWRlciBiYW5rIGVyYXNlIGZ1bmN0aW9uCisjZW5kaWYKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBGbGFzaCBpbWFnZSB2YWxpZAorLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjaWZuZGVmIFNFVF9DQ0ZHX0lNQUdFX1ZBTElEX0NPTkZfSU1BR0VfVkFMSUQKKyNkZWZpbmUgU0VUX0NDRkdfSU1BR0VfVkFMSURfQ09ORl9JTUFHRV9WQUxJRCAgICAgICAgICAgMHgwMDAwMDAwMCAvLyBGbGFzaCBpbWFnZSBpcyB2YWxpZAorLy8gI2RlZmluZSBTRVRfQ0NGR19JTUFHRV9WQUxJRF9DT05GX0lNQUdFX1ZBTElEICAgICAgICA8bm9uLXplcm8+IC8vIEZsYXNoIGltYWdlIGlzIGludmFsaWQsIGNhbGwgYm9vdGxvYWRlcgorI2VuZGlmCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gRmxhc2ggc2VjdG9yIHdyaXRlIHByb3RlY3Rpb24KKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI2lmbmRlZiBTRVRfQ0NGR19DQ0ZHX1BST1RfMzFfMAorI2RlZmluZSBTRVRfQ0NGR19DQ0ZHX1BST1RfMzFfMCAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19DQ0ZHX1BST1RfNjNfMzIKKyNkZWZpbmUgU0VUX0NDRkdfQ0NGR19QUk9UXzYzXzMyICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfQ0NGR19QUk9UXzk1XzY0CisjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfUFJPVF85NV82NCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX0NDRkdfUFJPVF8xMjdfOTYKKyNkZWZpbmUgU0VUX0NDRkdfQ0NGR19QUk9UXzEyN185NiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2VuZGlmCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gU2VsZWN0IGJldHdlZW4gY2FjaGUgb3IgR1BSQU0KKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI2lmbmRlZiBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU0gICAgICAgIDB4MCAgICAgICAgLy8gQ2FjaGUgaXMgZGlzYWJsZWQgYW5kIEdQUkFNIGlzIGF2YWlsYWJsZSBhdCAweDExMDAwMDAwLTB4MTEwMDFGRkYKKyNkZWZpbmUgU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19HUFJBTSAgICAgICAgICAgMHgxICAgICAgICAvLyBDYWNoZSBpcyBlbmFibGVkIGFuZCBHUFJBTSBpcyBkaXNhYmxlZCAodW5hdmFpbGFibGUpCisjZW5kaWYKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBTZWxlY3QgVENYTworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjaWZuZGVmIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfVENYTworI2RlZmluZSBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1RDWE8gICAgICAgICAgICAweDEgICAgLy8gRGlzYWJsZSBUQ1hPCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfVENYTyAgICAgICAgIDB4MCAgICAvLyBFbmFibGUgVFhDTworI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDQ0ZHIHZhbHVlcyB0aGF0IHNob3VsZCBub3QgYmUgbW9kaWZpZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfU0laRV9PRl9DQ0ZHICAgICAgICAweDAwNTgKKyNkZWZpbmUgU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU0FCTEVfRkxBR1MgICAgICAgKENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU0FCTEVfRkxBR1NfTSA+PiBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNBQkxFX0ZMQUdTX1MpCisKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1ZERFJfRVhUX0xPQUQgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9SVENfQ09NUCAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfSEZfQ09NUCAgICAgICAgICAgICAgICAgICAgICAweDEKKworI2RlZmluZSBTRVRfQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDQ1ICAgICAgICAgICAgICAweEZGCisjZGVmaW5lIFNFVF9DQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQMjUgICAgICAgICAgICAgIDB4RkYKKyNkZWZpbmUgU0VUX0NDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFA1ICAgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBTRVRfQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UTTE1ICAgICAgICAgICAgICAweEZGCisKKyNkZWZpbmUgU0VUX0NDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFAxMjUgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBTRVRfQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDEwNSAgICAgICAgICAgICAweEZGCisjZGVmaW5lIFNFVF9DQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQODUgICAgICAgICAgICAgIDB4RkYKKyNkZWZpbmUgU0VUX0NDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFA2NSAgICAgICAgICAgICAgMHhGRgorCisjZGVmaW5lIFNFVF9DQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDAgICAgICAgICAgICAgICAgIDB4RkZGRgorI2RlZmluZSBTRVRfQ0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AxICAgICAgICAgICAgICAgICAweEZGCisjZGVmaW5lIFNFVF9DQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDIgICAgICAgICAgICAgICAgIDB4RkYKKworI2RlZmluZSBTRVRfQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AwICAgICAgICAgICAgICAgICAweEZGRkYKKyNkZWZpbmUgU0VUX0NDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMSAgICAgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBTRVRfQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AyICAgICAgICAgICAgICAgICAweEZGCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDb25jYXRlbmF0ZSBiaXQgZmllbGRzIHRvIHdvcmRzLgorLy8gRE8gTk9UIEVESVQhCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBERUZBVUxUX0NDRkdfRVhUX0xGX0NMSyAgICAgICAgICAoIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfRVhUX0xGX0NMS19ESU8gICAgICAgICAgIDw8IENDRkdfRVhUX0xGX0NMS19ESU9fUyAgICAgICAgICAgKSkgfCB+Q0NGR19FWFRfTEZfQ0xLX0RJT19NICAgICAgICAgICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19FWFRfTEZfQ0xLX1JUQ19JTkNSRU1FTlQgPDwgQ0NGR19FWFRfTEZfQ0xLX1JUQ19JTkNSRU1FTlRfUyApKSB8IH5DQ0ZHX0VYVF9MRl9DTEtfUlRDX0lOQ1JFTUVOVF9NICkgKQorICAgICAKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX01PREVfQ09ORl8xICAgICAgICAgKCBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX1ZNSU4gICAgICA8PCBDQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX1ZNSU5fUyAgICAgICkpIHwgfkNDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfVk1JTl9NICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfRElUSEVSX0VOIDw8IENDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfRElUSEVSX0VOX1MgKSkgfCB+Q0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19ESVRIRVJfRU5fTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19JUEVBSyAgICAgPDwgQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19JUEVBS19TICAgICApKSB8IH5DQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX0lQRUFLX00gICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl8xX0RFTFRBX0lCSUFTX0lOSVQgICA8PCBDQ0ZHX01PREVfQ09ORl8xX0RFTFRBX0lCSUFTX0lOSVRfUyAgICkpIHwgfkNDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfSU5JVF9NICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfT0ZGU0VUIDw8IENDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfT0ZGU0VUX1MgKSkgfCB+Q0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19PRkZTRVRfTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfMV9YT1NDX01BWF9TVEFSVCAgICAgPDwgQ0NGR19NT0RFX0NPTkZfMV9YT1NDX01BWF9TVEFSVF9TICAgICApKSB8IH5DQ0ZHX01PREVfQ09ORl8xX1hPU0NfTUFYX1NUQVJUX00gICAgICkgKQorCisjZGVmaW5lIERFRkFVTFRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1MgICggXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfU0laRV9PRl9DQ0ZHICAgICAgICAgPDwgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfU0laRV9PRl9DQ0ZHX1MgICAgICAgICApKSB8IH5DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19TSVpFX09GX0NDRkdfTSAgICAgICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNBQkxFX0ZMQUdTICAgICAgICA8PCBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNBQkxFX0ZMQUdTX1MgICAgICAgICkpIHwgfkNDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU0FCTEVfRkxBR1NfTSAgICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19UQ1hPICAgICAgICAgICAgIDw8IENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19UQ1hPX1MgICAgICAgICAgICAgKSkgfCB+Q0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1RDWE9fTSAgICAgICAgICAgICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNICAgICAgICAgICAgPDwgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNX1MgICAgICAgICAgICApKSB8IH5DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU1fTSAgICAgICAgICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfQUxUX0RDRENfU0VUVElORyA8PCBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfQUxUX0RDRENfU0VUVElOR19TICkpIHwgfkNDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19BTFRfRENEQ19TRVRUSU5HX00gKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19YT1NDX09WUiAgICAgICAgIDw8IENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19YT1NDX09WUl9TICAgICAgICAgKSkgfCB+Q0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1hPU0NfT1ZSX00gICAgICAgICApICkKKworI2RlZmluZSBERUZBVUxUX0NDRkdfTU9ERV9DT05GICAgICAgICAgICAoIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9ERUxUQSA8PCBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfREVMVEFfUyApKSB8IH5DQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfREVMVEFfTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfRENEQ19SRUNIQVJHRSAgICAgICAgIDw8IENDRkdfTU9ERV9DT05GX0RDRENfUkVDSEFSR0VfUyAgICAgICAgICkpIHwgfkNDRkdfTU9ERV9DT05GX0RDRENfUkVDSEFSR0VfTSAgICAgICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl9EQ0RDX0FDVElWRSAgICAgICAgICAgPDwgQ0NGR19NT0RFX0NPTkZfRENEQ19BQ1RJVkVfUyAgICAgICAgICAgKSkgfCB+Q0NGR19NT0RFX0NPTkZfRENEQ19BQ1RJVkVfTSAgICAgICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GX1ZERFJfRVhUX0xPQUQgICAgICAgICA8PCBDQ0ZHX01PREVfQ09ORl9WRERSX0VYVF9MT0FEX1MgICAgICAgICApKSB8IH5DQ0ZHX01PREVfQ09ORl9WRERSX0VYVF9MT0FEX00gICAgICAgICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfVkREU19CT0RfTEVWRUwgICAgICAgIDw8IENDRkdfTU9ERV9DT05GX1ZERFNfQk9EX0xFVkVMX1MgICAgICAgICkpIHwgfkNDRkdfTU9ERV9DT05GX1ZERFNfQk9EX0xFVkVMX00gICAgICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTiAgICAgICAgPDwgQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fUyAgICAgICAgKSkgfCB+Q0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fTSAgICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9UQyAgICA8PCBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfVENfUyAgICApKSB8IH5DQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfVENfTSAgICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfUlRDX0NPTVAgICAgICAgICAgICAgIDw8IENDRkdfTU9ERV9DT05GX1JUQ19DT01QX1MgICAgICAgICAgICAgICkpIHwgfkNDRkdfTU9ERV9DT05GX1JUQ19DT01QX00gICAgICAgICAgICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVEgICAgICAgICAgICAgPDwgQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRX1MgICAgICAgICAgICAgKSkgfCB+Q0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRX00gICAgICAgICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GX1hPU0NfQ0FQX01PRCAgICAgICAgICA8PCBDQ0ZHX01PREVfQ09ORl9YT1NDX0NBUF9NT0RfUyAgICAgICAgICApKSB8IH5DQ0ZHX01PREVfQ09ORl9YT1NDX0NBUF9NT0RfTSAgICAgICAgICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfSEZfQ09NUCAgICAgICAgICAgICAgIDw8IENDRkdfTU9ERV9DT05GX0hGX0NPTVBfUyAgICAgICAgICAgICAgICkpIHwgfkNDRkdfTU9ERV9DT05GX0hGX0NPTVBfTSAgICAgICAgICAgICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl9YT1NDX0NBUEFSUkFZX0RFTFRBICAgPDwgQ0NGR19NT0RFX0NPTkZfWE9TQ19DQVBBUlJBWV9ERUxUQV9TICAgKSkgfCB+Q0NGR19NT0RFX0NPTkZfWE9TQ19DQVBBUlJBWV9ERUxUQV9NICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GX1ZERFJfQ0FQICAgICAgICAgICAgICA8PCBDQ0ZHX01PREVfQ09ORl9WRERSX0NBUF9TICAgICAgICAgICAgICApKSB8IH5DQ0ZHX01PREVfQ09ORl9WRERSX0NBUF9NICAgICAgICAgICAgICApICkKKworI2RlZmluZSBERUZBVUxUX0NDRkdfVk9MVF9MT0FEXzAgICAgICAgICAoIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFA0NSA8PCBDQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQNDVfUyApKSB8IH5DQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQNDVfTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDI1IDw8IENDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFAyNV9TICkpIHwgfkNDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFAyNV9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQNSAgPDwgQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDVfUyAgKSkgfCB+Q0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDVfTSAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVE0xNSA8PCBDQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RNMTVfUyApKSB8IH5DQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RNMTVfTSApICkKKworI2RlZmluZSBERUZBVUxUX0NDRkdfVk9MVF9MT0FEXzEgICAgICAgICAoIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFAxMjUgPDwgQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDEyNV9TICkpIHwgfkNDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFAxMjVfTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDEwNSA8PCBDQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQMTA1X1MgKSkgfCB+Q0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDEwNV9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQODUgIDw8IENDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFA4NV9TICApKSB8IH5DQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQODVfTSAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFA2NSAgPDwgQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDY1X1MgICkpIHwgfkNDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFA2NV9NICApICkKKworI2RlZmluZSBERUZBVUxUX0NDRkdfUlRDX09GRlNFVCAgICAgICAgICAoIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMCA8PCBDQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDBfUyApKSB8IH5DQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDBfTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AxIDw8IENDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMV9TICkpIHwgfkNDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMV9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDIgPDwgQ0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AyX1MgKSkgfCB+Q0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AyX00gKSApCisKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX0ZSRVFfT0ZGU0VUICAgICAgICAgKCBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDAgPDwgQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AwX1MgKSkgfCB+Q0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AwX00gKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMSA8PCBDQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDFfUyApKSB8IH5DQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDFfTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AyIDw8IENDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMl9TICkpIHwgfkNDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMl9NICkgKQorCisjZGVmaW5lIERFRkFVTFRfQ0NGR19JRUVFX01BQ18wICAgICAgICAgIFNFVF9DQ0ZHX0lFRUVfTUFDXzAKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX0lFRUVfTUFDXzEgICAgICAgICAgU0VUX0NDRkdfSUVFRV9NQUNfMQorI2RlZmluZSBERUZBVUxUX0NDRkdfSUVFRV9CTEVfMCAgICAgICAgICBTRVRfQ0NGR19JRUVFX0JMRV8wCisjZGVmaW5lIERFRkFVTFRfQ0NGR19JRUVFX0JMRV8xICAgICAgICAgIFNFVF9DQ0ZHX0lFRUVfQkxFXzEKKworI2RlZmluZSBERUZBVUxUX0NDRkdfQkxfQ09ORklHICAgICAgICAgICAoIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfQkxfQ09ORklHX0JPT1RMT0FERVJfRU5BQkxFIDw8IENDRkdfQkxfQ09ORklHX0JPT1RMT0FERVJfRU5BQkxFX1MgKSkgfCB+Q0NGR19CTF9DT05GSUdfQk9PVExPQURFUl9FTkFCTEVfTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19CTF9DT05GSUdfQkxfTEVWRUwgICAgICAgICAgPDwgQ0NGR19CTF9DT05GSUdfQkxfTEVWRUxfUyAgICAgICAgICApKSB8IH5DQ0ZHX0JMX0NPTkZJR19CTF9MRVZFTF9NICAgICAgICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0JMX0NPTkZJR19CTF9QSU5fTlVNQkVSICAgICA8PCBDQ0ZHX0JMX0NPTkZJR19CTF9QSU5fTlVNQkVSX1MgICAgICkpIHwgfkNDRkdfQkxfQ09ORklHX0JMX1BJTl9OVU1CRVJfTSAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfQkxfQ09ORklHX0JMX0VOQUJMRSAgICAgICAgIDw8IENDRkdfQkxfQ09ORklHX0JMX0VOQUJMRV9TICAgICAgICAgKSkgfCB+Q0NGR19CTF9DT05GSUdfQkxfRU5BQkxFX00gICAgICAgICApICkKKworI2RlZmluZSBERUZBVUxUX0NDRkdfRVJBU0VfQ09ORiAgICAgICAgICAoIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfRVJBU0VfQ09ORl9DSElQX0VSQVNFX0RJU19OIDw8IENDRkdfRVJBU0VfQ09ORl9DSElQX0VSQVNFX0RJU19OX1MgKSkgfCB+Q0NGR19FUkFTRV9DT05GX0NISVBfRVJBU0VfRElTX05fTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19FUkFTRV9DT05GX0JBTktfRVJBU0VfRElTX04gPDwgQ0NGR19FUkFTRV9DT05GX0JBTktfRVJBU0VfRElTX05fUyApKSB8IH5DQ0ZHX0VSQVNFX0NPTkZfQkFOS19FUkFTRV9ESVNfTl9NICkgKQorCisjZGVmaW5lIERFRkFVTFRfQ0NGR19DQ0ZHX1RJX09QVElPTlMgICAgICggXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19DQ0ZHX1RJX09QVElPTlNfVElfRkFfRU5BQkxFIDw8IENDRkdfQ0NGR19USV9PUFRJT05TX1RJX0ZBX0VOQUJMRV9TICkpIHwgfkNDRkdfQ0NGR19USV9PUFRJT05TX1RJX0ZBX0VOQUJMRV9NICkgKQorCisjZGVmaW5lIERFRkFVTFRfQ0NGR19DQ0ZHX1RBUF9EQVBfMCAgICAgICggXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19DQ0ZHX1RBUF9EQVBfMF9DUFVfREFQX0VOQUJMRSAgPDwgQ0NGR19DQ0ZHX1RBUF9EQVBfMF9DUFVfREFQX0VOQUJMRV9TICApKSB8IH5DQ0ZHX0NDRkdfVEFQX0RBUF8wX0NQVV9EQVBfRU5BQkxFX00gICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8wX1BSQ01fVEFQX0VOQUJMRSA8PCBDQ0ZHX0NDRkdfVEFQX0RBUF8wX1BSQ01fVEFQX0VOQUJMRV9TICkpIHwgfkNDRkdfQ0NGR19UQVBfREFQXzBfUFJDTV9UQVBfRU5BQkxFX00gKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfQ0NGR19UQVBfREFQXzBfVEVTVF9UQVBfRU5BQkxFIDw8IENDRkdfQ0NGR19UQVBfREFQXzBfVEVTVF9UQVBfRU5BQkxFX1MgKSkgfCB+Q0NGR19DQ0ZHX1RBUF9EQVBfMF9URVNUX1RBUF9FTkFCTEVfTSApICkKKworI2RlZmluZSBERUZBVUxUX0NDRkdfQ0NGR19UQVBfREFQXzEgICAgICAoIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QyX1RBUF9FTkFCTEUgPDwgQ0NGR19DQ0ZHX1RBUF9EQVBfMV9QQklTVDJfVEFQX0VOQUJMRV9TICkpIHwgfkNDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QyX1RBUF9FTkFCTEVfTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19DQ0ZHX1RBUF9EQVBfMV9QQklTVDFfVEFQX0VOQUJMRSA8PCBDQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMV9UQVBfRU5BQkxFX1MgKSkgfCB+Q0NGR19DQ0ZHX1RBUF9EQVBfMV9QQklTVDFfVEFQX0VOQUJMRV9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8xX1dVQ19UQVBfRU5BQkxFICAgIDw8IENDRkdfQ0NGR19UQVBfREFQXzFfV1VDX1RBUF9FTkFCTEVfUyAgICApKSB8IH5DQ0ZHX0NDRkdfVEFQX0RBUF8xX1dVQ19UQVBfRU5BQkxFX00gICAgKSApCisKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX0lNQUdFX1ZBTElEX0NPTkYgICAgKCBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0lNQUdFX1ZBTElEX0NPTkZfSU1BR0VfVkFMSUQgPDwgQ0NGR19JTUFHRV9WQUxJRF9DT05GX0lNQUdFX1ZBTElEX1MgKSkgfCB+Q0NGR19JTUFHRV9WQUxJRF9DT05GX0lNQUdFX1ZBTElEX00gKSApCisKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX0NDRkdfUFJPVF8zMV8wICAgICAgU0VUX0NDRkdfQ0NGR19QUk9UXzMxXzAgIAorI2RlZmluZSBERUZBVUxUX0NDRkdfQ0NGR19QUk9UXzYzXzMyICAgICBTRVRfQ0NGR19DQ0ZHX1BST1RfNjNfMzIgCisjZGVmaW5lIERFRkFVTFRfQ0NGR19DQ0ZHX1BST1RfOTVfNjQgICAgIFNFVF9DQ0ZHX0NDRkdfUFJPVF85NV82NCAKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX0NDRkdfUFJPVF8xMjdfOTYgICAgU0VUX0NDRkdfQ0NGR19QUk9UXzEyN185NgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ3VzdG9tZXIgQ29uZmlndXJhdGlvbiBBcmVhIGluIExvY2sgUGFnZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCitfX3Jvb3QgY29uc3QgY2NmZ190IF9fY2NmZyBAICIuY2NmZyIgPQorI2VsaWYgZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykKKyNwcmFnbWEgREFUQV9TRUNUSU9OKF9fY2NmZywgIi5jY2ZnIikKKyNwcmFnbWEgUkVUQUlOKF9fY2NmZykKK2NvbnN0IGNjZmdfdCBfX2NjZmcgPQorI2Vsc2UKK19fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuY2NmZyIpLCB1c2VkKSkKK2NvbnN0IGNjZmdfdCBfX2NjZmcgPQorI2VuZGlmCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcHBlZCB0byBhZGRyZXNzCisgICAgREVGQVVMVF9DQ0ZHX0VYVF9MRl9DTEsgICAgICAgICAsIC8vIDB4NTAwMDNGQTggKDB4NTAwMDN4eHggbWFwcyB0byBsYXN0CisgICAgREVGQVVMVF9DQ0ZHX01PREVfQ09ORl8xICAgICAgICAsIC8vIDB4NTAwMDNGQUMgIHNlY3RvciBpbiBGTEFTSC4KKyAgICBERUZBVUxUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTICwgLy8gMHg1MDAwM0ZCMCAgSW5kZXBlbmRlbnQgb2YgRkxBU0ggc2l6ZSkKKyAgICBERUZBVUxUX0NDRkdfTU9ERV9DT05GICAgICAgICAgICwgLy8gMHg1MDAwM0ZCNAorICAgIERFRkFVTFRfQ0NGR19WT0xUX0xPQURfMCAgICAgICAgLCAvLyAweDUwMDAzRkI4IAorICAgIERFRkFVTFRfQ0NGR19WT0xUX0xPQURfMSAgICAgICAgLCAvLyAweDUwMDAzRkJDCisgICAgREVGQVVMVF9DQ0ZHX1JUQ19PRkZTRVQgICAgICAgICAsIC8vIDB4NTAwMDNGQzAKKyAgICBERUZBVUxUX0NDRkdfRlJFUV9PRkZTRVQgICAgICAgICwgLy8gMHg1MDAwM0ZDNAorICAgIERFRkFVTFRfQ0NGR19JRUVFX01BQ18wICAgICAgICAgLCAvLyAweDUwMDAzRkM4CisgICAgREVGQVVMVF9DQ0ZHX0lFRUVfTUFDXzEgICAgICAgICAsIC8vIDB4NTAwMDNGQ0MKKyAgICBERUZBVUxUX0NDRkdfSUVFRV9CTEVfMCAgICAgICAgICwgLy8gMHg1MDAwM0ZEMAorICAgIERFRkFVTFRfQ0NGR19JRUVFX0JMRV8xICAgICAgICAgLCAvLyAweDUwMDAzRkQ0CisgICAgREVGQVVMVF9DQ0ZHX0JMX0NPTkZJRyAgICAgICAgICAsIC8vIDB4NTAwMDNGRDgKKyAgICBERUZBVUxUX0NDRkdfRVJBU0VfQ09ORiAgICAgICAgICwgLy8gMHg1MDAwM0ZEQworICAgIERFRkFVTFRfQ0NGR19DQ0ZHX1RJX09QVElPTlMgICAgLCAvLyAweDUwMDAzRkUwCisgICAgREVGQVVMVF9DQ0ZHX0NDRkdfVEFQX0RBUF8wICAgICAsIC8vIDB4NTAwMDNGRTQKKyAgICBERUZBVUxUX0NDRkdfQ0NGR19UQVBfREFQXzEgICAgICwgLy8gMHg1MDAwM0ZFOAorICAgIERFRkFVTFRfQ0NGR19JTUFHRV9WQUxJRF9DT05GICAgLCAvLyAweDUwMDAzRkVDCisgICAgREVGQVVMVF9DQ0ZHX0NDRkdfUFJPVF8zMV8wICAgICAsIC8vIDB4NTAwMDNGRjAKKyAgICBERUZBVUxUX0NDRkdfQ0NGR19QUk9UXzYzXzMyICAgICwgLy8gMHg1MDAwM0ZGNAorICAgIERFRkFVTFRfQ0NGR19DQ0ZHX1BST1RfOTVfNjQgICAgLCAvLyAweDUwMDAzRkY4CisgICAgREVGQVVMVF9DQ0ZHX0NDRkdfUFJPVF8xMjdfOTYgICAsIC8vIDB4NTAwMDNGRkMKK307CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3N0YXJ0dXBfZmlsZXMvc3RhcnR1cF9jY3MuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvc3RhcnR1cF9maWxlcy9zdGFydHVwX2Njcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjJkM2UKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3N0YXJ0dXBfZmlsZXMvc3RhcnR1cF9jY3MuYwpAQCAtMCwwICsxLDIyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHN0YXJ0dXBfY2NzLmMKKyogIFJldmlzZWQ6ICAgICAgICAkRGF0ZTogMjAxNi0wNS0xOSAxMTowODoyNiArMDIwMCAodG8sIDE5IG1haSAyMDE2KSAkCisqICBSZXZpc2lvbjogICAgICAgJFJldmlzaW9uOiAxNzEwOSAkCisqCisqICBEZXNjcmlwdGlvbjogICAgU3RhcnR1cCBjb2RlIGZvciBDQzI2eHggUEcyIGRldmljZSBmYW1pbHkgZm9yIHVzZSB3aXRoIENDUy4KKyoKKyogIENvcHlyaWdodCAoQykgMjAxNCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyoKKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqICBhcmUgbWV0OgorKgorKiAgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogICAgTmVpdGhlciB0aGUgbmFtZSBvZiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgbm9yIHRoZSBuYW1lcyBvZgorKiAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisqICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyogIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyogIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyogIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENoZWNrIGlmIGNvbXBpbGVyIGlzIENDUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhKGRlZmluZWQoX19USV9DT01QSUxFUl9WRVJTSU9OX18pKQorI2Vycm9yICJzdGFydHVwX2Njcy5jOiBVbnN1cHBvcnRlZCBjb21waWxlciEiCisjZW5kaWYKKworI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zZXR1cC5oPgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcmVzZXQgSVNSIGFuZCB0aGUgZGVmYXVsdCBmYXVsdCBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkICAgICAgICBSZXNldElTUiggdm9pZCApOworc3RhdGljIHZvaWQgTm1pU1IoIHZvaWQgKTsKK3N0YXRpYyB2b2lkIEZhdWx0SVNSKCB2b2lkICk7CitzdGF0aWMgdm9pZCBJbnREZWZhdWx0SGFuZGxlciggdm9pZCApOworZXh0ZXJuIGludCAgbWFpbih2b2lkKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGFwcGxpY2F0aW9uIHN0YXJ0dXAgY29kZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBfY19pbnQwMCh2b2lkKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ0NTOiBMaW5rZXIgdmFyaWFibGUgdGhhdCBtYXJrcyB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX1NUQUNLX0VORDsKKworCisvLyEgVGhlIHZlY3RvciB0YWJsZS4gTm90ZSB0aGF0IHRoZSBwcm9wZXIgY29uc3RydWN0cyBtdXN0IGJlIHBsYWNlZCBvbiB0aGlzIHRvCisvLyEgZW5zdXJlIHRoYXQgaXQgZW5kcyB1cCBhdCBwaHlzaWNhbCBhZGRyZXNzIDB4MDAwMC4wMDAwIG9yIGF0IHRoZSBzdGFydCBvZgorLy8hIHRoZSBwcm9ncmFtIGlmIGxvY2F0ZWQgYXQgYSBzdGFydCBhZGRyZXNzIG90aGVyIHRoYW4gMC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjcHJhZ21hIERBVEFfU0VDVElPTihnX3BmblZlY3RvcnMsICIuaW50dmVjcyIpCit2b2lkICgqIGNvbnN0IGdfcGZuVmVjdG9yc1tdKSh2b2lkKSA9Cit7CisgICAgKHZvaWQgKCopKHZvaWQpKSgodW5zaWduZWQgbG9uZykmX19TVEFDS19FTkQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaW5pdGlhbCBzdGFjayBwb2ludGVyCisgICAgUmVzZXRJU1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZXNldCBoYW5kbGVyCisgICAgTm1pU1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBOTUkgaGFuZGxlcgorICAgIEZhdWx0SVNSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaGFyZCBmYXVsdCBoYW5kbGVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBNUFUgZmF1bHQgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYnVzIGZhdWx0IGhhbmRsZXIKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVzYWdlIGZhdWx0IGhhbmRsZXIKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gU1ZDYWxsIGhhbmRsZXIKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gRGVidWcgbW9uaXRvciBoYW5kbGVyCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2VydmVkCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBQZW5kU1YgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgU3lzVGljayBoYW5kbGVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIEFPTiBlZGdlIGRldGVjdAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBJMkMKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gUkYgQ29yZSBDb21tYW5kICYgUGFja2V0IEVuZ2luZSAxCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIEFPTiBTcGlTcGxhdmUgUngsIFR4IGFuZCBDUworICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBBT04gUlRDCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFVBUlQwIFJ4IGFuZCBUeAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBBVVggc29mdHdhcmUgZXZlbnQgMAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBTU0kwIFJ4IGFuZCBUeAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBTU0kxIFJ4IGFuZCBUeAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBSRiBDb3JlIENvbW1hbmQgJiBQYWNrZXQgRW5naW5lIDAKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gUkYgQ29yZSBIYXJkd2FyZQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBSRiBDb3JlIENvbW1hbmQgQWNrbm93bGVkZ2UKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gSTJTCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIEFVWCBzb2Z0d2FyZSBldmVudCAxCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFdhdGNoZG9nIHRpbWVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDAgc3VidGltZXIgQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAwIHN1YnRpbWVyIEIKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMSBzdWJ0aW1lciBBCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDEgc3VidGltZXIgQgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAyIHN1YnRpbWVyIEEKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMiBzdWJ0aW1lciBCCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDMgc3VidGltZXIgQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAzIHN1YnRpbWVyIEIKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gQ3J5cHRvIENvcmUgUmVzdWx0IGF2YWlsYWJsZQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyB1RE1BIFNvZnR3YXJlCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIHVETUEgRXJyb3IKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gRmxhc2ggY29udHJvbGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBFdmVudCAwCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIEFVWCBjb21iaW5lZCBldmVudAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBBT04gcHJvZ3JhbW1hYmxlIDAKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gRHluYW1pYyBQcm9ncmFtbWFibGUgaW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSAoRGVmYXVsdDogUFJDTSkKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gQVVYIENvbXBhcmF0b3IgQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBBVVggQURDIG5ldyBzYW1wbGUgb3IgQURDIERNQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb25lLCBBREMgdW5kZXJmbG93LCBBREMgb3ZlcmZsb3cKKyAgICBJbnREZWZhdWx0SGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgLy8gVFJORyBldmVudAorfTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzb3IgZmlyc3Qgc3RhcnRzIGV4ZWN1dGlvbgorLy8hIGZvbGxvd2luZyBhIHJlc2V0IGV2ZW50LiBPbmx5IHRoZSBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSBzZXQgaXMgcGVyZm9ybWVkLAorLy8hIGFmdGVyIHdoaWNoIHRoZSBhcHBsaWNhdGlvbiBzdXBwbGllZCBlbnRyeSgpIHJvdXRpbmUgaXMgY2FsbGVkLiBBbnkgZmFuY3kKKy8vISBhY3Rpb25zIChzdWNoIGFzIG1ha2luZyBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIHJlc2V0IGNhdXNlIHJlZ2lzdGVyLCBhbmQKKy8vISByZXNldHRpbmcgdGhlIGJpdHMgaW4gdGhhdCByZWdpc3RlcikgYXJlIGxlZnQgc29sZWx5IGluIHRoZSBoYW5kcyBvZiB0aGUKKy8vISBhcHBsaWNhdGlvbi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitSZXNldElTUih2b2lkKQoreworICAgIC8vCisgICAgLy8gRmluYWwgdHJpbSBvZiBkZXZpY2UKKyAgICAvLworICAgIFNldHVwVHJpbURldmljZSgpOworCisgICAgLy8KKyAgICAvLyBKdW1wIHRvIHRoZSBDQ1MgQyBJbml0aWFsaXphdGlvbiBSb3V0aW5lLgorICAgIC8vCisgICAgX19hc20oIiAgICAuZ2xvYmFsIF9jX2ludDAwXG4iCisgICAgICAgICAgICAiICAgIGIudyAgICAgX2NfaW50MDAiKTsKKworICAgIC8vCisgICAgLy8gSWYgd2UgZXZlciByZXR1cm4gc2lnbmFsIEVycm9yCisgICAgLy8KKyAgICBGYXVsdElTUigpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzb3IgcmVjZWl2ZXMgYSBOTUkuIFRoaXMKKy8vISBzaW1wbHkgZW50ZXJzIGFuIGluZmluaXRlIGxvb3AsIHByZXNlcnZpbmcgdGhlIHN5c3RlbSBzdGF0ZSBmb3IgZXhhbWluYXRpb24KKy8vISBieSBhIGRlYnVnZ2VyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyB2b2lkCitObWlTUih2b2lkKQoreworICAgIC8vCisgICAgLy8gRW50ZXIgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAvLworICAgIHdoaWxlKDEpCisgICAgeworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvY2Vzc29yIHJlY2VpdmVzIGEgZmF1bHQKKy8vISBpbnRlcnJ1cHQuIFRoaXMgc2ltcGx5IGVudGVycyBhbiBpbmZpbml0ZSBsb29wLCBwcmVzZXJ2aW5nIHRoZSBzeXN0ZW0gc3RhdGUKKy8vISBmb3IgZXhhbWluYXRpb24gYnkgYSBkZWJ1Z2dlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZAorRmF1bHRJU1Iodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEVudGVyIGFuIGluZmluaXRlIGxvb3AuCisgICAgLy8KKyAgICB3aGlsZSgxKQorICAgIHsKKyAgICB9Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvY2Vzc29yIHJlY2VpdmVzIGFuIHVuZXhwZWN0ZWQKKy8vISBpbnRlcnJ1cHQuIFRoaXMgc2ltcGx5IGVudGVycyBhbiBpbmZpbml0ZSBsb29wLCBwcmVzZXJ2aW5nIHRoZSBzeXN0ZW0gc3RhdGUKKy8vISBmb3IgZXhhbWluYXRpb24gYnkgYSBkZWJ1Z2dlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZAorSW50RGVmYXVsdEhhbmRsZXIodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEdvIGludG8gYW4gaW5maW5pdGUgbG9vcC4KKyAgICAvLworICAgIHdoaWxlKDEpCisgICAgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvc3RhcnR1cF9maWxlcy9zdGFydHVwX2djYy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL3N0YXJ0dXBfZ2NjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2NGRjNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvc3RhcnR1cF9maWxlcy9zdGFydHVwX2djYy5jCkBAIC0wLDAgKzEsMzEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc3RhcnR1cF9nY2MuYworKiAgUmV2aXNlZDogICAgICAgICREYXRlOiAyMDE2LTA1LTE5IDExOjA4OjI2ICswMjAwICh0bywgMTkgbWFpIDIwMTYpICQKKyogIFJldmlzaW9uOiAgICAgICAkUmV2aXNpb246IDE3MTA5ICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBTdGFydHVwIGNvZGUgZm9yIENDMjZ4eCBQRzIgZGV2aWNlIGZhbWlseSBmb3IgdXNlIHdpdGggR0NDLgorKgorKiAgQ29weXJpZ2h0IChDKSAyMDE0IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworKgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogIGFyZSBtZXQ6CisqCisqICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgICBOZWl0aGVyIHRoZSBuYW1lIG9mIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCBub3IgdGhlIG5hbWVzIG9mCisqICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyogIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyogIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENoZWNrIGlmIGNvbXBpbGVyIGlzIEdOVSBDb21waWxlcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhKGRlZmluZWQoX19HTlVDX18pKQorI2Vycm9yICJzdGFydHVwX2djYy5jOiBVbnN1cHBvcnRlZCBjb21waWxlciEiCisjZW5kaWYKKworI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zZXR1cC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFnaWMgQysrIGZ1bmN0aW9ucworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fZXh0ZW5zaW9uX18gdHlwZWRlZiBpbnQgX19ndWFyZCBfX2F0dHJpYnV0ZV9fKChtb2RlKF9fRElfXykpKTsKK2ludCBfX2N4YV9ndWFyZF9hY3F1aXJlKF9fZ3VhcmQgKmcpIHsgcmV0dXJuICEqKGNoYXIgKikoZyk7IH0KK3ZvaWQgX19jeGFfZ3VhcmRfcmVsZWFzZShfX2d1YXJkICpnKSB7ICooY2hhciAqKWcgPSAxOyB9Cit2b2lkIF9fY3hhX2d1YXJkX2Fib3J0KF9fZ3VhcmQgKmcpIHsgKHZvaWQpZzsgfQorLyogWFhYOiBhbGlhcyB0aGlzIHRvIHRoZSBmYXVsdCBJU1IgPz8/PyAqLwordm9pZCBfX2N4YV9wdXJlX3ZpcnR1YWwodm9pZCkgeyB3aGlsZSAoMSk7IH0KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hY3JvIGZvciB3ZWFrIHN5bWJvbCBhbGlhc2luZworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgV0VBS19BTElBUyh4KSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMoI3gpKSkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHJlc2V0IElTUiBhbmQgdGhlIGRlZmF1bHQgZmF1bHQgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZCAgICAgICAgUmVzZXRJU1IoIHZvaWQgKTsKK3N0YXRpYyB2b2lkIE5taVNSSGFuZGxlciggdm9pZCApOworc3RhdGljIHZvaWQgRmF1bHRJU1JIYW5kbGVyKCB2b2lkICk7CitzdGF0aWMgdm9pZCBJbnREZWZhdWx0SGFuZGxlciggdm9pZCApOworZXh0ZXJuIGludCAgbWFpbiggdm9pZCApOworCisKKy8vIERlZmF1bHQgaW50ZXJydXB0IGhhbmRsZXJzCit2b2lkIE5taVNSKHZvaWQpIFdFQUtfQUxJQVMoTm1pU1JIYW5kbGVyKTsKK3ZvaWQgRmF1bHRJU1Iodm9pZCkgV0VBS19BTElBUyhGYXVsdElTUkhhbmRsZXIpOwordm9pZCBNUFVGYXVsdEludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIEJ1c0ZhdWx0SW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgVXNhZ2VGYXVsdEludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFNWQ2FsbEludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIERlYnVnTW9uSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgUGVuZFNWSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgU3lzVGlja0ludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIEdQSU9JbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBJMkNJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBSRkNDUEUxSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgQU9OSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgQU9OUlRDSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgVUFSVDBJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBBVVhTV0V2ZW50MEludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFNTSTBJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBTU0kxSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgUkZDQ1BFMEludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFJGQ0hhcmR3YXJlSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgUkZDQ21kQWNrSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgSTJTSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgQVVYU1dFdmVudDFJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBXYXRjaGRvZ0ludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFRpbWVyMEFJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBUaW1lcjBCSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgVGltZXIxQUludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFRpbWVyMUJJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBUaW1lcjJBSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgVGltZXIyQkludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFRpbWVyM0FJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBUaW1lcjNCSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgQ3J5cHRvSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgdURNQUludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIHVETUFFcnJJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBGbGFzaEludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFNXRXZlbnQwSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgQVVYQ29tYkV2ZW50SW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgQU9OUHJvZ0ludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIER5blByb2dJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBBVVhDb21wQUludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIEFVWEFEQ0ludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFRSTkdJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBjb25zdHJ1Y3RzIGNyZWF0ZWQgYnkgdGhlIGxpbmtlciwgaW5kaWNhdGluZyB3aGVyZSB0aGUKKy8vIHRoZSAiZGF0YSIgYW5kICJic3MiIHNlZ21lbnRzIHJlc2lkZSBpbiBtZW1vcnkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IF9ldGV4dDsKK2V4dGVybiB1aW50MzJfdCBfZGF0YTsKK2V4dGVybiB1aW50MzJfdCBfZWRhdGE7CitleHRlcm4gdWludDMyX3QgX2JzczsKK2V4dGVybiB1aW50MzJfdCBfZWJzczsKK2V4dGVybiB1aW50MzJfdCBfZXN0YWNrOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoZSB2ZWN0b3IgdGFibGUuIE5vdGUgdGhhdCB0aGUgcHJvcGVyIGNvbnN0cnVjdHMgbXVzdCBiZSBwbGFjZWQgb24gdGhpcyB0bworLy8hIGVuc3VyZSB0aGF0IGl0IGVuZHMgdXAgYXQgcGh5c2ljYWwgYWRkcmVzcyAweDAwMDAuMDAwMCBvciBhdCB0aGUgc3RhcnQgb2YKKy8vISB0aGUgcHJvZ3JhbSBpZiBsb2NhdGVkIGF0IGEgc3RhcnQgYWRkcmVzcyBvdGhlciB0aGFuIDAuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi52ZWN0b3JzIiksIHVzZWQpKQordm9pZCAoKiBjb25zdCBnX3BmblZlY3RvcnNbXSkodm9pZCkgPQoreworICAgICh2b2lkICgqKSh2b2lkKSkoKHVuc2lnbmVkIGxvbmcpJl9lc3RhY2spLCAvLyBUaGUgaW5pdGlhbCBzdGFjayBwb2ludGVyIAorICAgIFJlc2V0SVNSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVzZXQgaGFuZGxlcgorICAgIE5taVNSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgTk1JIGhhbmRsZXIKKyAgICBGYXVsdElTUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGhhcmQgZmF1bHQgaGFuZGxlcgorICAgIE1QVUZhdWx0SW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgTVBVIGZhdWx0IGhhbmRsZXIKKyAgICBCdXNGYXVsdEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJ1cyBmYXVsdCBoYW5kbGVyCisgICAgVXNhZ2VGYXVsdEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgIC8vIFRoZSB1c2FnZSBmYXVsdCBoYW5kbGVyCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2VydmVkCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2VydmVkCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2VydmVkCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2VydmVkCisgICAgU1ZDYWxsSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8vIFNWQ2FsbCBoYW5kbGVyCisgICAgRGVidWdNb25JbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgIC8vIERlYnVnIG1vbml0b3IgaGFuZGxlcgorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNlcnZlZAorICAgIFBlbmRTVkludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgUGVuZFNWIGhhbmRsZXIKKyAgICBTeXNUaWNrSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIFN5c1RpY2sgaGFuZGxlcgorICAgIEdQSU9JbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBT04gZWRnZSBkZXRlY3QKKyAgICBJMkNJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSTJDCisgICAgUkZDQ1BFMUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFJGIENvcmUgQ29tbWFuZCAmIFBhY2tldCBFbmdpbmUgMQorICAgIEFPTkludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBT04gU3BpU3BsYXZlIFJ4LCBUeCBhbmQgQ1MKKyAgICBBT05SVENJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy8gQU9OIFJUQworICAgIFVBUlQwSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAvLyBVQVJUMCBSeCBhbmQgVHgKKyAgICBBVVhTV0V2ZW50MEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgLy8gQVVYIHNvZnR3YXJlIGV2ZW50IDAKKyAgICBTU0kwSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU1NJMCBSeCBhbmQgVHgKKyAgICBTU0kxSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU1NJMSBSeCBhbmQgVHgKKyAgICBSRkNDUEUwSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gUkYgQ29yZSBDb21tYW5kICYgUGFja2V0IEVuZ2luZSAwCisgICAgUkZDSGFyZHdhcmVJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgIC8vIFJGIENvcmUgSGFyZHdhcmUKKyAgICBSRkNDbWRBY2tJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgLy8gUkYgQ29yZSBDb21tYW5kIEFja25vd2xlZGdlCisgICAgSTJTSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEkyUworICAgIEFVWFNXRXZlbnQxSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAvLyBBVVggc29mdHdhcmUgZXZlbnQgMQorICAgIFdhdGNoZG9nSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvLyBXYXRjaGRvZyB0aW1lcgorICAgIFRpbWVyMEFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAwIHN1YnRpbWVyIEEKKyAgICBUaW1lcjBCSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMCBzdWJ0aW1lciBCCisgICAgVGltZXIxQUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDEgc3VidGltZXIgQQorICAgIFRpbWVyMUJJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAxIHN1YnRpbWVyIEIKKyAgICBUaW1lcjJBSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMiBzdWJ0aW1lciBBCisgICAgVGltZXIyQkludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDIgc3VidGltZXIgQgorICAgIFRpbWVyM0FJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAzIHN1YnRpbWVyIEEKKyAgICBUaW1lcjNCSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMyBzdWJ0aW1lciBCCisgICAgQ3J5cHRvSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8vIENyeXB0byBDb3JlIFJlc3VsdCBhdmFpbGFibGUKKyAgICB1RE1BSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdURNQSBTb2Z0d2FyZQorICAgIHVETUFFcnJJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyB1RE1BIEVycm9yCisgICAgRmxhc2hJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZsYXNoIGNvbnRyb2xsZXIKKyAgICBTV0V2ZW50MEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy8gU29mdHdhcmUgRXZlbnQgMAorICAgIEFVWENvbWJFdmVudEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAvLyBBVVggY29tYmluZWQgZXZlbnQKKyAgICBBT05Qcm9nSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gQU9OIHByb2dyYW1tYWJsZSAwCisgICAgRHluUHJvZ0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIER5bmFtaWMgUHJvZ3JhbW1hYmxlIGludGVycnVwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb3VyY2UgKERlZmF1bHQ6IFBSQ00pCisgICAgQVVYQ29tcEFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgIC8vIEFVWCBDb21wYXJhdG9yIEEKKyAgICBBVVhBRENJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy8gQVVYIEFEQyBuZXcgc2FtcGxlIG9yIEFEQyBETUEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uZSwgQURDIHVuZGVyZmxvdywgQURDIG92ZXJmbG93CisgICAgVFJOR0ludEhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRSTkcgZXZlbnQKK307CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvY2Vzc29yIGZpcnN0IHN0YXJ0cyBleGVjdXRpb24KKy8vISBmb2xsb3dpbmcgYSByZXNldCBldmVudC4gT25seSB0aGUgYWJzb2x1dGVseSBuZWNlc3Nhcnkgc2V0IGlzIHBlcmZvcm1lZCwKKy8vISBhZnRlciB3aGljaCB0aGUgYXBwbGljYXRpb24gc3VwcGxpZWQgZW50cnkoKSByb3V0aW5lIGlzIGNhbGxlZC4gQW55IGZhbmN5CisvLyEgYWN0aW9ucyAoc3VjaCBhcyBtYWtpbmcgZGVjaXNpb25zIGJhc2VkIG9uIHRoZSByZXNldCBjYXVzZSByZWdpc3RlciwgYW5kCisvLyEgcmVzZXR0aW5nIHRoZSBiaXRzIGluIHRoYXQgcmVnaXN0ZXIpIGFyZSBsZWZ0IHNvbGVseSBpbiB0aGUgaGFuZHMgb2YgdGhlCisvLyEgYXBwbGljYXRpb24uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorUmVzZXRJU1Iodm9pZCkKK3sKKyAgICB1aW50MzJfdCAqcHVpMzJTcmMsICpwdWkzMkRlc3Q7CisKKyAgICAvLworICAgIC8vIEZpbmFsIHRyaW0gb2YgZGV2aWNlCisgICAgLy8KKyAgICBTZXR1cFRyaW1EZXZpY2UoKTsKKyAgICAKKyAgICAvLworICAgIC8vIENvcHkgdGhlIGRhdGEgc2VnbWVudCBpbml0aWFsaXplcnMgZnJvbSBmbGFzaCB0byBTUkFNLgorICAgIC8vCisgICAgcHVpMzJTcmMgPSAmX2V0ZXh0OworICAgIGZvcihwdWkzMkRlc3QgPSAmX2RhdGE7IHB1aTMyRGVzdCA8ICZfZWRhdGE7ICkKKyAgICB7CisgICAgICAgICpwdWkzMkRlc3QrKyA9ICpwdWkzMlNyYysrOworICAgIH0KKworICAgIC8vCisgICAgLy8gWmVybyBmaWxsIHRoZSBic3Mgc2VnbWVudC4KKyAgICAvLworICAgIF9fYXNtKCIgICAgbGRyICAgICByMCwgPV9ic3NcbiIKKyAgICAgICAgICAiICAgIGxkciAgICAgcjEsID1fZWJzc1xuIgorICAgICAgICAgICIgICAgbW92ICAgICByMiwgIzBcbiIKKyAgICAgICAgICAiICAgIC50aHVtYl9mdW5jXG4iCisgICAgICAgICAgInplcm9fbG9vcDpcbiIKKyAgICAgICAgICAiICAgICAgICBjbXAgICAgIHIwLCByMVxuIgorICAgICAgICAgICIgICAgICAgIGl0ICAgICAgbHRcbiIKKyAgICAgICAgICAiICAgICAgICBzdHJsdCAgIHIyLCBbcjBdLCAjNFxuIgorICAgICAgICAgICIgICAgICAgIGJsdCAgICAgemVyb19sb29wIik7CisKKyAgIC8vCisgICAvLyBDYWxsIHRoZSBhcHBsaWNhdGlvbidzIGVudHJ5IHBvaW50LgorICAgLy8KKyAgIG1haW4oKTsKKworICAgIC8vCisgICAgLy8gSWYgd2UgZXZlciByZXR1cm4gc2lnbmFsIEVycm9yCisgICAgLy8KKyAgICBGYXVsdElTUigpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzb3IgcmVjZWl2ZXMgYSBOTUkuIFRoaXMKKy8vISBzaW1wbHkgZW50ZXJzIGFuIGluZmluaXRlIGxvb3AsIHByZXNlcnZpbmcgdGhlIHN5c3RlbSBzdGF0ZSBmb3IgZXhhbWluYXRpb24KKy8vISBieSBhIGRlYnVnZ2VyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyB2b2lkCitObWlTUkhhbmRsZXIodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEVudGVyIGFuIGluZmluaXRlIGxvb3AuCisgICAgLy8KKyAgICB3aGlsZSgxKQorICAgIHsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhpcyBpcyB0aGUgY29kZSB0aGF0IGdldHMgY2FsbGVkIHdoZW4gdGhlIHByb2Nlc3NvciByZWNlaXZlcyBhIGZhdWx0CisvLyEgaW50ZXJydXB0LiBUaGlzIHNpbXBseSBlbnRlcnMgYW4gaW5maW5pdGUgbG9vcCwgcHJlc2VydmluZyB0aGUgc3lzdGVtIHN0YXRlCisvLyEgZm9yIGV4YW1pbmF0aW9uIGJ5IGEgZGVidWdnZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHZvaWQKK0ZhdWx0SVNSSGFuZGxlcih2b2lkKQoreworICAgIC8vCisgICAgLy8gRW50ZXIgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAvLworICAgIHdoaWxlKDEpCisgICAgeworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvY2Vzc29yIHJlY2VpdmVzIGFuIHVuZXhwZWN0ZWQKKy8vISBpbnRlcnJ1cHQuIFRoaXMgc2ltcGx5IGVudGVycyBhbiBpbmZpbml0ZSBsb29wLCBwcmVzZXJ2aW5nIHRoZSBzeXN0ZW0gc3RhdGUKKy8vISBmb3IgZXhhbWluYXRpb24gYnkgYSBkZWJ1Z2dlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZAorSW50RGVmYXVsdEhhbmRsZXIodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEdvIGludG8gYW4gaW5maW5pdGUgbG9vcC4KKyAgICAvLworICAgIHdoaWxlKDEpCisgICAgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvc3RhcnR1cF9maWxlcy9zdGFydHVwX2lhci5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL3N0YXJ0dXBfaWFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlMWJmZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvc3RhcnR1cF9maWxlcy9zdGFydHVwX2lhci5jCkBAIC0wLDAgKzEsMzIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc3RhcnR1cF9pYXIuYworKiAgUmV2aXNlZDogICAgICAgICREYXRlOiAyMDE2LTA1LTE5IDExOjA4OjI2ICswMjAwICh0bywgMTkgbWFpIDIwMTYpICQKKyogIFJldmlzaW9uOiAgICAgICAkUmV2aXNpb246IDE3MTA5ICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBTdGFydHVwIGNvZGUgZm9yIENDMjZ4eCBQRzIgZGV2aWNlIGZhbWlseSBmb3IgdXNlIHdpdGggSUFSLgorKgorKiAgQ29weXJpZ2h0IChDKSAyMDE0IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworKgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogIGFyZSBtZXQ6CisqCisqICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgICBOZWl0aGVyIHRoZSBuYW1lIG9mIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCBub3IgdGhlIG5hbWVzIG9mCisqICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyogIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyogIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ2hlY2sgaWYgY29tcGlsZXIgaXMgSUFSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICEoZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSkKKyNlcnJvciAic3RhcnR1cF9pYXIuYzogVW5zdXBwb3J0ZWQgY29tcGlsZXIhIgorI2VuZGlmCisKKworLy8gV2UgbmVlZCBpbnRyaW5zaWMgZnVuY3Rpb25zIGZvciBJQVIgKGlmIHVzZWQgaW4gc291cmNlIGNvZGUpCisjaW5jbHVkZSA8aW50cmluc2ljcy5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zZXR1cC5oPgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcmVzZXQgSVNSIGFuZCB0aGUgZGVmYXVsdCBmYXVsdCBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkICAgICAgICBSZXNldElTUiggdm9pZCApOworc3RhdGljIHZvaWQgTm1pU1JIYW5kbGVyKCB2b2lkICk7CitzdGF0aWMgdm9pZCBGYXVsdElTUkhhbmRsZXIoIHZvaWQgKTsKK3N0YXRpYyB2b2lkIEludERlZmF1bHRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gaW50ICBtYWluKCB2b2lkICk7CisKK2V4dGVybiB2b2lkIE5taVNSKCB2b2lkICk7CitleHRlcm4gdm9pZCBGYXVsdElTUiggdm9pZCApOworZXh0ZXJuIHZvaWQgTVBVRmF1bHRJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBCdXNGYXVsdEludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFVzYWdlRmF1bHRJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBTVkNhbGxJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBEZWJ1Z01vbkludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFBlbmRTVkludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFN5c1RpY2tJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBHUElPSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgSTJDSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgUkZDQ1BFMUludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIEFPTkludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIEFPTlJUQ0ludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFVBUlQwSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgQVVYU1dFdmVudDBJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBTU0kwSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgU1NJMUludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFJGQ0NQRTBJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBSRkNIYXJkd2FyZUludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFJGQ0NtZEFja0ludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIEkyU0ludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIEFVWFNXRXZlbnQxSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgV2F0Y2hkb2dJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBUaW1lcjBBSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgVGltZXIwQkludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFRpbWVyMUFJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBUaW1lcjFCSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgVGltZXIyQUludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFRpbWVyMkJJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBUaW1lcjNBSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgVGltZXIzQkludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIENyeXB0b0ludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIHVETUFJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCB1RE1BRXJySW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgRmxhc2hJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBTV0V2ZW50MEludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIEFVWENvbWJFdmVudEludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIEFPTlByb2dJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBEeW5Qcm9nSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgQVVYQ29tcEFJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBBVVhBRENJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBUUk5HSW50SGFuZGxlciggdm9pZCApOworCisvLyBEZWZhdWx0IGludGVycnVwdCBoYW5kbGVycworI3ByYWdtYSB3ZWFrIE5taVNSID0gTm1pU1JIYW5kbGVyCisjcHJhZ21hIHdlYWsgRmF1bHRJU1IgPSBGYXVsdElTUkhhbmRsZXIKKyNwcmFnbWEgd2VhayBNUFVGYXVsdEludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIEJ1c0ZhdWx0SW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgVXNhZ2VGYXVsdEludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFNWQ2FsbEludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIERlYnVnTW9uSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgUGVuZFNWSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgU3lzVGlja0ludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIEdQSU9JbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBJMkNJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBSRkNDUEUxSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgQU9OSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgQU9OUlRDSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgVUFSVDBJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBBVVhTV0V2ZW50MEludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFNTSTBJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBTU0kxSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgUkZDQ1BFMEludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFJGQ0hhcmR3YXJlSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgUkZDQ21kQWNrSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgSTJTSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgQVVYU1dFdmVudDFJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBXYXRjaGRvZ0ludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFRpbWVyMEFJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBUaW1lcjBCSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgVGltZXIxQUludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFRpbWVyMUJJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBUaW1lcjJBSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgVGltZXIyQkludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFRpbWVyM0FJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBUaW1lcjNCSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgQ3J5cHRvSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgdURNQUludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIHVETUFFcnJJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBGbGFzaEludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFNXRXZlbnQwSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgQVVYQ29tYkV2ZW50SW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgQU9OUHJvZ0ludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIER5blByb2dJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBBVVhDb21wQUludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIEFVWEFEQ0ludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFRSTkdJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGUgZW50cnkgcG9pbnQgZm9yIHRoZSBhcHBsaWNhdGlvbiBzdGFydHVwIGNvZGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgX19pYXJfcHJvZ3JhbV9zdGFydCh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgc3RhY2sgc3RhcnQgKGhpZ2hlc3QgYWRkcmVzcykgc3ltYm9sIGZyb20gbGlua2VyIGZpbGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGNvbnN0IHZvaWQqIFNUQUNLX1RPUDsKKworLy8gSXQgaXMgcmVxdWlyZWQgdG8gcGxhY2Ugc29tZXRoaW5nIGluIHRoZSBDU1RBQ0sgc2VnbWVudCB0byBnZXQgdGhlIHN0YWNrCisvLyBjaGVjayBmZWF0dXJlIGluIElBUiB0byB3b3JrIGFzIGV4cGVjdGVkCitfX3Jvb3Qgc3RhdGljIHZvaWQqIGR1bW15X3N0YWNrIEAgIi5zdGFjayI7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGUgdmVjdG9yIHRhYmxlLiBOb3RlIHRoYXQgdGhlIHByb3BlciBjb25zdHJ1Y3RzIG11c3QgYmUgcGxhY2VkIG9uIHRoaXMgdG8KKy8vISBlbnN1cmUgdGhhdCBpdCBlbmRzIHVwIGF0IHBoeXNpY2FsIGFkZHJlc3MgMHgwMDAwLjAwMDAgb3IgYXQgdGhlIHN0YXJ0IG9mCisvLyEgdGhlIHByb2dyYW0gaWYgbG9jYXRlZCBhdCBhIHN0YXJ0IGFkZHJlc3Mgb3RoZXIgdGhhbiAwLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fcm9vdCB2b2lkICgqIGNvbnN0IF9fdmVjdG9yX3RhYmxlW10pKHZvaWQpIEAgIi5pbnR2ZWMiID0KK3sKKyAgICAodm9pZCAoKikodm9pZCkpJlNUQUNLX1RPUCwgICAgICAgICAgICAgLy8gVGhlIGluaXRpYWwgc3RhY2sgcG9pbnRlcgorICAgIFJlc2V0SVNSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVzZXQgaGFuZGxlcgorICAgIE5taVNSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgTk1JIGhhbmRsZXIKKyAgICBGYXVsdElTUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGhhcmQgZmF1bHQgaGFuZGxlcgorICAgIE1QVUZhdWx0SW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgTVBVIGZhdWx0IGhhbmRsZXIKKyAgICBCdXNGYXVsdEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJ1cyBmYXVsdCBoYW5kbGVyCisgICAgVXNhZ2VGYXVsdEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgIC8vIFRoZSB1c2FnZSBmYXVsdCBoYW5kbGVyCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2VydmVkCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2VydmVkCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2VydmVkCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2VydmVkCisgICAgU1ZDYWxsSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8vIFNWQ2FsbCBoYW5kbGVyCisgICAgRGVidWdNb25JbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgIC8vIERlYnVnIG1vbml0b3IgaGFuZGxlcgorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNlcnZlZAorICAgIFBlbmRTVkludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgUGVuZFNWIGhhbmRsZXIKKyAgICBTeXNUaWNrSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIFN5c1RpY2sgaGFuZGxlcgorICAgIEdQSU9JbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBT04gZWRnZSBkZXRlY3QKKyAgICBJMkNJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSTJDCisgICAgUkZDQ1BFMUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFJGIENvcmUgQ29tbWFuZCAmIFBhY2tldCBFbmdpbmUgMQorICAgIEFPTkludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBT04gU3BpU3BsYXZlIFJ4LCBUeCBhbmQgQ1MKKyAgICBBT05SVENJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy8gQU9OIFJUQworICAgIFVBUlQwSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAvLyBVQVJUMCBSeCBhbmQgVHgKKyAgICBBVVhTV0V2ZW50MEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgLy8gQVVYIHNvZnR3YXJlIGV2ZW50IDAKKyAgICBTU0kwSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU1NJMCBSeCBhbmQgVHgKKyAgICBTU0kxSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU1NJMSBSeCBhbmQgVHgKKyAgICBSRkNDUEUwSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gUkYgQ29yZSBDb21tYW5kICYgUGFja2V0IEVuZ2luZSAwCisgICAgUkZDSGFyZHdhcmVJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgIC8vIFJGIENvcmUgSGFyZHdhcmUKKyAgICBSRkNDbWRBY2tJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgLy8gUkYgQ29yZSBDb21tYW5kIEFja25vd2xlZGdlCisgICAgSTJTSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEkyUworICAgIEFVWFNXRXZlbnQxSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAvLyBBVVggc29mdHdhcmUgZXZlbnQgMQorICAgIFdhdGNoZG9nSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvLyBXYXRjaGRvZyB0aW1lcgorICAgIFRpbWVyMEFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAwIHN1YnRpbWVyIEEKKyAgICBUaW1lcjBCSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMCBzdWJ0aW1lciBCCisgICAgVGltZXIxQUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDEgc3VidGltZXIgQQorICAgIFRpbWVyMUJJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAxIHN1YnRpbWVyIEIKKyAgICBUaW1lcjJBSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMiBzdWJ0aW1lciBBCisgICAgVGltZXIyQkludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDIgc3VidGltZXIgQgorICAgIFRpbWVyM0FJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAzIHN1YnRpbWVyIEEKKyAgICBUaW1lcjNCSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMyBzdWJ0aW1lciBCCisgICAgQ3J5cHRvSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8vIENyeXB0byBDb3JlIFJlc3VsdCBhdmFpbGFibGUKKyAgICB1RE1BSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdURNQSBTb2Z0d2FyZQorICAgIHVETUFFcnJJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyB1RE1BIEVycm9yCisgICAgRmxhc2hJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZsYXNoIGNvbnRyb2xsZXIKKyAgICBTV0V2ZW50MEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy8gU29mdHdhcmUgRXZlbnQgMAorICAgIEFVWENvbWJFdmVudEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAvLyBBVVggY29tYmluZWQgZXZlbnQKKyAgICBBT05Qcm9nSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gQU9OIHByb2dyYW1tYWJsZSAwCisgICAgRHluUHJvZ0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIER5bmFtaWMgUHJvZ3JhbW1hYmxlIGludGVycnVwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb3VyY2UgKERlZmF1bHQ6IFBSQ00pCisgICAgQVVYQ29tcEFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgIC8vIEFVWCBDb21wYXJhdG9yIEEKKyAgICBBVVhBRENJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy8gQVVYIEFEQyBuZXcgc2FtcGxlIG9yIEFEQyBETUEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uZSwgQURDIHVuZGVyZmxvdywgQURDIG92ZXJmbG93CisgICAgVFJOR0ludEhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRSTkcgZXZlbnQKK307CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvY2Vzc29yIGZpcnN0IHN0YXJ0cyBleGVjdXRpb24KKy8vISBmb2xsb3dpbmcgYSByZXNldCBldmVudC4gT25seSB0aGUgYWJzb2x1dGVseSBuZWNlc3Nhcnkgc2V0IGlzIHBlcmZvcm1lZCwKKy8vISBhZnRlciB3aGljaCB0aGUgYXBwbGljYXRpb24gc3VwcGxpZWQgZW50cnkoKSByb3V0aW5lIGlzIGNhbGxlZC4gQW55IGZhbmN5CisvLyEgYWN0aW9ucyAoc3VjaCBhcyBtYWtpbmcgZGVjaXNpb25zIGJhc2VkIG9uIHRoZSByZXNldCBjYXVzZSByZWdpc3RlciwgYW5kCisvLyEgcmVzZXR0aW5nIHRoZSBiaXRzIGluIHRoYXQgcmVnaXN0ZXIpIGFyZSBsZWZ0IHNvbGVseSBpbiB0aGUgaGFuZHMgb2YgdGhlCisvLyEgYXBwbGljYXRpb24uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorUmVzZXRJU1Iodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEZpbmFsIHRyaW0gb2YgZGV2aWNlCisgICAgLy8KKyAgICBTZXR1cFRyaW1EZXZpY2UoKTsKKworICAgIC8vCisgICAgLy8gSnVtcCB0byBJQVIgaW5pdGlhbGl6YXRpb24gcm91dGluZQorICAgIC8vCisgICAgX19pYXJfcHJvZ3JhbV9zdGFydCgpOworCisgICAgLy8KKyAgICAvLyBJZiB3ZSBldmVyIHJldHVybiBzaWduYWwgRXJyb3IKKyAgICAvLworICAgIEZhdWx0SVNSKCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhpcyBpcyB0aGUgY29kZSB0aGF0IGdldHMgY2FsbGVkIHdoZW4gdGhlIHByb2Nlc3NvciByZWNlaXZlcyBhIE5NSS4gVGhpcworLy8hIHNpbXBseSBlbnRlcnMgYW4gaW5maW5pdGUgbG9vcCwgcHJlc2VydmluZyB0aGUgc3lzdGVtIHN0YXRlIGZvciBleGFtaW5hdGlvbgorLy8hIGJ5IGEgZGVidWdnZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHZvaWQKK05taVNSSGFuZGxlcih2b2lkKQoreworICAgIC8vCisgICAgLy8gRW50ZXIgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAvLworICAgIHdoaWxlKDEpCisgICAgeworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvY2Vzc29yIHJlY2VpdmVzIGEgZmF1bHQKKy8vISBpbnRlcnJ1cHQuIFRoaXMgc2ltcGx5IGVudGVycyBhbiBpbmZpbml0ZSBsb29wLCBwcmVzZXJ2aW5nIHRoZSBzeXN0ZW0gc3RhdGUKKy8vISBmb3IgZXhhbWluYXRpb24gYnkgYSBkZWJ1Z2dlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZAorRmF1bHRJU1JIYW5kbGVyKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBFbnRlciBhbiBpbmZpbml0ZSBsb29wLgorICAgIC8vCisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzb3IgcmVjZWl2ZXMgYW4gdW5leHBlY3RlZAorLy8hIGludGVycnVwdC4gVGhpcyBzaW1wbHkgZW50ZXJzIGFuIGluZmluaXRlIGxvb3AsIHByZXNlcnZpbmcgdGhlIHN5c3RlbSBzdGF0ZQorLy8hIGZvciBleGFtaW5hdGlvbiBieSBhIGRlYnVnZ2VyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyB2b2lkCitJbnREZWZhdWx0SGFuZGxlcih2b2lkKQoreworICAgIC8vCisgICAgLy8gR28gaW50byBhbiBpbmZpbml0ZSBsb29wLgorICAgIC8vCisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL3N0YXJ0dXBfa2VpbC5zIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL3N0YXJ0dXBfa2VpbC5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOGE0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3N0YXJ0dXBfZmlsZXMvc3RhcnR1cF9rZWlsLnMKQEAgLTAsMCArMSwyOTggQEAKKzsgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorOyAqICBGaWxlbmFtZTogICAgICAgc3RhcnR1cF9rZWlsLmMKKzsgKiAgUmV2aXNlZDogICAgICAgICREYXRlOiAyMDE2LTA1LTIwIDE3OjAwOjQwICswMjAwIChmciwgMjAgbWFpIDIwMTYpICQKKzsgKiAgUmV2aXNpb246ICAgICAgICRSZXZpc2lvbjogMTcxMzMgJAorOyAqCis7ICogIERlc2NyaXB0aW9uOiAgICBTdGFydHVwIGNvZGUgZm9yIENDMjZ4eCBkZXZpY2UgZmFtaWx5IGZvciB1c2Ugd2l0aCBLRUlMLgorOyAqCis7ICogIENvcHlyaWdodCAoQykgMjAxNSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKzsgKgorOyAqCis7ICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorOyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKzsgKiAgYXJlIG1ldDoKKzsgKgorOyAqICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cis7ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorOyAqCis7ICogICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKzsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCis7ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzsgKgorOyAqICAgIE5laXRoZXIgdGhlIG5hbWUgb2YgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIG5vciB0aGUgbmFtZXMgb2YKKzsgKiAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCis7ICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorOyAqCis7ICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKzsgKiAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKzsgKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCis7ICogIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCis7ICogIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorOyAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCis7ICogIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorOyAqICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKzsgKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorOyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKzsgKiAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKzsgKgorOyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCis7Ly8gPDw8IFVzZSBDb25maWd1cmF0aW9uIFdpemFyZCBpbiBDb250ZXh0IE1lbnUgPj4+Cis7Ki8KKworCis7IDxoPiBTdGFjayBDb25maWd1cmF0aW9uCis7ICAgPG8+IFN0YWNrIFNpemUgKGluIEJ5dGVzKSA8MHgwLTB4RkZGRkZGRkY6OD4KKzsgPC9oPgorU3RhY2tfU2l6ZSAgICAgIEVRVSAgICAgMHgwMDAwMDIwMAorCisgICAgICAgICAgICAgICAgQVJFQSAgICBTVEFDSywgTk9JTklULCBSRUFEV1JJVEUsIEFMSUdOPTMKK1N0YWNrX01lbSAgICAgICBTUEFDRSAgIFN0YWNrX1NpemUKK19faW5pdGlhbF9zcAorCisKKzsgPGg+IEhlYXAgQ29uZmlndXJhdGlvbgorOyAgIDxvPiAgSGVhcCBTaXplIChpbiBCeXRlcykgPDB4MC0weEZGRkZGRkZGOjg+Cis7IDwvaD4KK0hlYXBfU2l6ZSAgICAgICBFUVUgICAgIDB4MDAwMDAwMDAKKworICAgICAgICAgICAgICAgIEFSRUEgICAgSEVBUCwgTk9JTklULCBSRUFEV1JJVEUsIEFMSUdOPTMKK19faGVhcF9iYXNlCitIZWFwX01lbSAgICAgICAgU1BBQ0UgICBIZWFwX1NpemUKK19faGVhcF9saW1pdAorCisKKyAgICAgICAgICAgICAgICBQUkVTRVJWRTgKKyAgICAgICAgICAgICAgICBUSFVNQgorOy8vIDw8PCBlbmQgb2YgY29uZmlndXJhdGlvbiBzZWN0aW9uID4+PgorCis7IFZlY3RvciBUYWJsZSBNYXBwZWQgdG8gQWRkcmVzcyAwIGF0IFJlc2V0CisKKyAgICAgICAgICAgICAgICBBUkVBICAgIFJFU0VULCBEQVRBLCBSRUFET05MWQorICAgICAgICAgICAgICAgIEVYUE9SVCAgX19WZWN0b3JzCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX1ZlY3RvcnNfRW5kCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX1ZlY3RvcnNfU2l6ZQorCitfX1ZlY3RvcnMgICAgICAgRENEICAgICBfX2luaXRpYWxfc3AgICAgICAgICAgICAgIDsgVG9wIG9mIFN0YWNrCisgICAgICAgICAgICAgICAgRENEICAgICBSZXNldElTUiAgICAgICAgICAgICAgICAgIDsgUmVzZXQgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgTm1pU1IgICAgICAgICAgICAgICAgICAgICA7IE5NSSBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBGYXVsdElTUiAgICAgICAgICAgICAgICAgIDsgSGFyZCBGYXVsdCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBNUFVGYXVsdEludEhhbmRsZXIgICAgICAgIDsgVGhlIE1QVSBmYXVsdCBoYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBCdXNGYXVsdEludEhhbmRsZXIgICAgICAgIDsgVGhlIGJ1cyBmYXVsdCBoYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBVc2FnZUZhdWx0SW50SGFuZGxlciAgICAgIDsgVGhlIHVzYWdlIGZhdWx0IGhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgU1ZDYWxsSW50SGFuZGxlciAgICAgICAgICA7IFNWQ2FsbCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBEZWJ1Z01vbkludEhhbmRsZXIgICAgICAgIDsgRGVidWcgbW9uaXRvciBoYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBlbmRTVkludEhhbmRsZXIgICAgICAgICAgOyBQZW5kU1YgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgU3lzVGlja0ludEhhbmRsZXIgICAgICAgICA7IFN5c1RpY2sgSGFuZGxlcgorCisgICAgICAgICAgICAgICAgOyBFeHRlcm5hbCBJbnRlcnJ1cHRzCisgICAgICAgICAgICAgICAgRENEICAgICBHUElPSW50SGFuZGxlciAgICAgICAgICAgIDsgMCBBT04gZWRnZSBkZXRlY3QKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQ0ludEhhbmRsZXIgICAgICAgICAgICAgOyAxIEkyQworICAgICAgICAgICAgICAgIERDRCAgICAgUkZDQ1BFMUludEhhbmRsZXIgICAgICAgICA7IDIgUkYgQ29yZSBDb21tYW5kICYgUGFja2V0IEVuZ2luZSAxCisgICAgICAgICAgICAgICAgRENEICAgICBBT05JbnRIYW5kbGVyICAgICAgICAgICAgIDsgMyBBT04gU3BpU3BsYXZlIFJ4LCBUeCBhbmQgQ1MKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEFPTlJUQ0ludEhhbmRsZXIgICAgICAgICAgOyA0IEFPTiBSVEMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQwSW50SGFuZGxlciAgICAgICAgICAgOyA1IFVBUlQwIFJ4IGFuZCBUeAorICAgICAgICAgICAgICAgIERDRCAgICAgSW50RGVmYXVsdEhhbmRsZXIgICAgICAgICA7IDYgQVVYIHNvZnR3YXJlIGV2ZW50IDAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNTSTBJbnRIYW5kbGVyICAgICAgICAgICAgOyA3IFNTSTAgUnggYW5kIFR4CisgICAgICAgICAgICAgICAgRENEICAgICBTU0kxSW50SGFuZGxlciAgICAgICAgICAgIDsgOCBTU0kxIFJ4IGFuZCBUeAorICAgICAgICAgICAgICAgIERDRCAgICAgUkZDQ1BFMEludEhhbmRsZXIgICAgICAgICA7IDkgUkYgQ29yZSBDb21tYW5kICYgUGFja2V0IEVuZ2luZSAwCisgICAgICAgICAgICAgICAgRENEICAgICBSRkNIYXJkd2FyZUludEhhbmRsZXIgICAgIDsgMTAgUkYgQ29yZSBIYXJkd2FyZQorICAgICAgICAgICAgICAgIERDRCAgICAgUkZDQ21kQWNrSW50SGFuZGxlciAgICAgICA7IDExIFJGIENvcmUgQ29tbWFuZCBBY2tub3dsZWRnZQorICAgICAgICAgICAgICAgIERDRCAgICAgSTJTSW50SGFuZGxlciAgICAgICAgICAgICA7IDEyIEkyUworICAgICAgICAgICAgICAgIERDRCAgICAgSW50RGVmYXVsdEhhbmRsZXIgICAgICAgICA7IDEzIEFVWCBzb2Z0d2FyZSBldmVudCAxCisgICAgICAgICAgICAgICAgRENEICAgICBXYXRjaGRvZ0ludEhhbmRsZXIgICAgICAgIDsgMTQgV2F0Y2hkb2cgdGltZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRpbWVyMEFJbnRIYW5kbGVyICAgICAgICAgOyAxNSBUaW1lciAwIHN1YnRpbWVyIEEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRpbWVyMEJJbnRIYW5kbGVyICAgICAgICAgOyAxNiBUaW1lciAwIHN1YnRpbWVyIEIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRpbWVyMUFJbnRIYW5kbGVyICAgICAgICAgOyAxNyBUaW1lciAxIHN1YnRpbWVyIEEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRpbWVyMUJJbnRIYW5kbGVyICAgICAgICAgOyAxOCBUaW1lciAxIHN1YnRpbWVyIEIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRpbWVyMkFJbnRIYW5kbGVyICAgICAgICAgOyAxOSBUaW1lciAyIHN1YnRpbWVyIEEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRpbWVyMkJJbnRIYW5kbGVyICAgICAgICAgOyAyMCBUaW1lciAyIHN1YnRpbWVyIEIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRpbWVyM0FJbnRIYW5kbGVyICAgICAgICAgOyAyMSBUaW1lciAzIHN1YnRpbWVyIEEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRpbWVyM0JJbnRIYW5kbGVyICAgICAgICAgOyAyMiBUaW1lciAzIHN1YnRpbWVyIEIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENyeXB0b0ludEhhbmRsZXIgICAgICAgICAgOyAyMyBDcnlwdG8gQ29yZSBSZXN1bHQgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgRENEICAgICB1RE1BSW50SGFuZGxlciAgICAgICAgICAgIDsgMjQgdURNQSBTb2Z0d2FyZQorICAgICAgICAgICAgICAgIERDRCAgICAgdURNQUVyckludEhhbmRsZXIgICAgICAgICA7IDI1IHVETUEgRXJyb3IKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEZsYXNoSW50SGFuZGxlciAgICAgICAgICAgOyAyNiBGbGFzaCBjb250cm9sbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBTV0V2ZW50MEludEhhbmRsZXIgICAgICAgIDsgMjcgU29mdHdhcmUgRXZlbnQgMAorICAgICAgICAgICAgICAgIERDRCAgICAgQVVYQ29tYkV2ZW50SW50SGFuZGxlciAgICA7IDI4IEFVWCBjb21iaW5lZCBldmVudAorICAgICAgICAgICAgICAgIERDRCAgICAgQU9OUHJvZ0ludEhhbmRsZXIgICAgICAgICA7IDI5IEFPTiBwcm9ncmFtbWFibGUgMAorICAgICAgICAgICAgICAgIERDRCAgICAgRHluUHJvZ0ludEhhbmRsZXIgICAgICAgICA7IDMwIER5bmFtaWMgUHJvZ3JhbW1hYmxlIGludGVycnVwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgIHNvdXJjZSAoRGVmYXVsdDogUFJDTSkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEFVWENvbXBBSW50SGFuZGxlciAgICAgICAgOyAzMSBBVVggQ29tcGFyYXRvciBBCisgICAgICAgICAgICAgICAgRENEICAgICBBVVhBRENJbnRIYW5kbGVyICAgICAgICAgIDsgMzIgQVVYIEFEQyBuZXcgc2FtcGxlIG9yIEFEQyBETUEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICBkb25lLCBBREMgdW5kZXJmbG93LCBBREMgb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRSTkdJbnRIYW5kbGVyICAgICAgICAgICAgOyAzMyBUUk5HIGV2ZW50CitfX1ZlY3RvcnNfRW5kCisKK19fVmVjdG9yc19TaXplICBFUVUgICAgIF9fVmVjdG9yc19FbmQgLSBfX1ZlY3RvcnMKKworICAgICAgICAgICAgICAgIEFSRUEgICAgfC50ZXh0fCwgQ09ERSwgUkVBRE9OTFkKKworCis7IFJlc2V0IEhhbmRsZXIKKworUmVzZXRJU1IgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFJlc2V0SVNSICAgICAgICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgSU1QT1JUICBOT1JPTV9TZXR1cFRyaW1EZXZpY2UKKyAgICAgICAgICAgICAgICBJTVBPUlQgIF9fbWFpbgorICAgICAgICAgICAgICAgIDsgRmluYWwgdHJpbSBvZiBkZXZpY2UgKHNldHVwLmMgaW4gQ0MyNnh4V2FyZSkKKyAgICAgICAgICAgICAgICBMRFIgICAgIFIwLCA9Tk9ST01fU2V0dXBUcmltRGV2aWNlCisgICAgICAgICAgICAgICAgQkxYICAgICBSMAorICAgICAgICAgICAgICAgIDsgSnVtcCB0byBpbml0aWFsaXphdGlvbiByb3V0aW5lCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPV9fbWFpbgorICAgICAgICAgICAgICAgIEJYICAgICAgUjAKKyAgICAgICAgICAgICAgICA7IElmIHdlIGV2ZXIgcmV0dXJuLCBzaWduYWwgZXJyb3IKKyAgICAgICAgICAgICAgICBMRFIgICAgIFIwLCA9RmF1bHRJU1IKKyAgICAgICAgICAgICAgICBCWCAgICAgIFIwCisgICAgICAgICAgICAgICAgRU5EUAorCisKKzsgRHVtbXkgRXhjZXB0aW9uIEhhbmRsZXJzIChpbmZpbml0ZSBsb29wcyB3aGljaCBjYW4gYmUgbW9kaWZpZWQpCisKK05taVNSICAgICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBObWlTUiAgICAgICAgICAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK0ZhdWx0SVNSICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBGYXVsdElTUiAgICAgICAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK01QVUZhdWx0SW50SGFuZGxlclwKKyAgICAgICAgICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBNUFVGYXVsdEludEhhbmRsZXIgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK0J1c0ZhdWx0SW50SGFuZGxlclwKKyAgICAgICAgICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBCdXNGYXVsdEludEhhbmRsZXIgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK1VzYWdlRmF1bHRJbnRIYW5kbGVyXAorICAgICAgICAgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVzYWdlRmF1bHRJbnRIYW5kbGVyICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorU1ZDYWxsSW50SGFuZGxlclwKKyAgICAgICAgICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBTVkNhbGxJbnRIYW5kbGVyICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK0RlYnVnTW9uSW50SGFuZGxlclwKKyAgICAgICAgICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBEZWJ1Z01vbkludEhhbmRsZXIgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK1BlbmRTVkludEhhbmRsZXJcCisgICAgICAgICAgICAgICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgUGVuZFNWSW50SGFuZGxlciAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCitTeXNUaWNrSW50SGFuZGxlclwKKyAgICAgICAgICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBTeXNUaWNrSW50SGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKKworSW50RGVmYXVsdEhhbmRsZXJcCisgICAgICAgICAgICAgICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgR1BJT0ludEhhbmRsZXIgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyQ0ludEhhbmRsZXIgICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBSRkNDUEUxSW50SGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgQU9OSW50SGFuZGxlciAgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIEFPTlJUQ0ludEhhbmRsZXIgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBVQVJUMEludEhhbmRsZXIgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgU1NJMEludEhhbmRsZXIgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNTSTFJbnRIYW5kbGVyICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBSRkNDUEUwSW50SGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgUkZDSGFyZHdhcmVJbnRIYW5kbGVyICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFJGQ0NtZEFja0ludEhhbmRsZXIgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBJMlNJbnRIYW5kbGVyICAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgV2F0Y2hkb2dJbnRIYW5kbGVyICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRpbWVyMEFJbnRIYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBUaW1lcjBCSW50SGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgVGltZXIxQUludEhhbmRsZXIgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRpbWVyMUJJbnRIYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBUaW1lcjJBSW50SGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgVGltZXIyQkludEhhbmRsZXIgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRpbWVyM0FJbnRIYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBUaW1lcjNCSW50SGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgQ3J5cHRvSW50SGFuZGxlciAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIHVETUFJbnRIYW5kbGVyICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICB1RE1BRXJySW50SGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgRmxhc2hJbnRIYW5kbGVyICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNXRXZlbnQwSW50SGFuZGxlciAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBBVVhDb21iRXZlbnRJbnRIYW5kbGVyICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgQU9OUHJvZ0ludEhhbmRsZXIgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIER5blByb2dJbnRIYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBBVVhDb21wQUludEhhbmRsZXIgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgQVVYQURDSW50SGFuZGxlciAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRSTkdJbnRIYW5kbGVyICAgICAgICAgICAgW1dFQUtdCitHUElPSW50SGFuZGxlcgorSTJDSW50SGFuZGxlcgorUkZDQ1BFMUludEhhbmRsZXIKK0FPTkludEhhbmRsZXIKK0FPTlJUQ0ludEhhbmRsZXIKK1VBUlQwSW50SGFuZGxlcgorU1NJMEludEhhbmRsZXIKK1NTSTFJbnRIYW5kbGVyCitSRkNDUEUwSW50SGFuZGxlcgorUkZDSGFyZHdhcmVJbnRIYW5kbGVyCitSRkNDbWRBY2tJbnRIYW5kbGVyCitJMlNJbnRIYW5kbGVyCitXYXRjaGRvZ0ludEhhbmRsZXIKK1RpbWVyMEFJbnRIYW5kbGVyCitUaW1lcjBCSW50SGFuZGxlcgorVGltZXIxQUludEhhbmRsZXIKK1RpbWVyMUJJbnRIYW5kbGVyCitUaW1lcjJBSW50SGFuZGxlcgorVGltZXIyQkludEhhbmRsZXIKK1RpbWVyM0FJbnRIYW5kbGVyCitUaW1lcjNCSW50SGFuZGxlcgorQ3J5cHRvSW50SGFuZGxlcgordURNQUludEhhbmRsZXIKK3VETUFFcnJJbnRIYW5kbGVyCitGbGFzaEludEhhbmRsZXIKK1NXRXZlbnQwSW50SGFuZGxlcgorQVVYQ29tYkV2ZW50SW50SGFuZGxlcgorQU9OUHJvZ0ludEhhbmRsZXIKK0R5blByb2dJbnRIYW5kbGVyCitBVVhDb21wQUludEhhbmRsZXIKK0FVWEFEQ0ludEhhbmRsZXIKK1RSTkdJbnRIYW5kbGVyCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorCisKKyAgICAgICAgICAgICAgICBBTElHTgorCisKKzsgVXNlciBJbml0aWFsIFN0YWNrICYgSGVhcAorCisgICAgICAgICAgICAgICAgSUYgICAgICA6REVGOl9fTUlDUk9MSUIKKworICAgICAgICAgICAgICAgIEVYUE9SVCAgX19pbml0aWFsX3NwCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX2hlYXBfYmFzZQorICAgICAgICAgICAgICAgIEVYUE9SVCAgX19oZWFwX2xpbWl0CisKKyAgICAgICAgICAgICAgICBFTFNFCisKKyAgICAgICAgICAgICAgICBJTVBPUlQgIF9fdXNlX3R3b19yZWdpb25fbWVtb3J5CisgICAgICAgICAgICAgICAgRVhQT1JUICBfX3VzZXJfaW5pdGlhbF9zdGFja2hlYXAKK19fdXNlcl9pbml0aWFsX3N0YWNraGVhcAorCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPSAgSGVhcF9NZW0KKyAgICAgICAgICAgICAgICBMRFIgICAgIFIxLCA9KFN0YWNrX01lbSArIFN0YWNrX1NpemUpCisgICAgICAgICAgICAgICAgTERSICAgICBSMiwgPSAoSGVhcF9NZW0gKyAgSGVhcF9TaXplKQorICAgICAgICAgICAgICAgIExEUiAgICAgUjMsID0gU3RhY2tfTWVtCisgICAgICAgICAgICAgICAgQlggICAgICBMUgorCisgICAgICAgICAgICAgICAgQUxJR04KKworICAgICAgICAgICAgICAgIEVORElGCisKKworICAgICAgICAgICAgICAgIEVORApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS91dGlscy9yb21fY3J5cHRvL3N0YW5kYWxvbmVfcm9tX2NyeXB0by5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS91dGlscy9yb21fY3J5cHRvL3N0YW5kYWxvbmVfcm9tX2NyeXB0by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNjM2YmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3V0aWxzL3JvbV9jcnlwdG8vc3RhbmRhbG9uZV9yb21fY3J5cHRvLmMKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHN0YW5kYWxvbmVfcm9tX2NyeXB0by5oCisqICBSZXZpc2VkOiAgICAgICAgJERhdGU6IDIwMTUtMDMtMTkgMTU6Mzc6MTEgKzAxMDAgKHRvLCAxOSBtYXIgMjAxNSkgJAorKiAgUmV2aXNpb246ICAgICAgICRSZXZpc2lvbjogNDMwNTEgJAorKgorKiAgRGVzY3JpcHRpb246ICAgIFByb3ZpZGUgYSBzaW1wbGUgaW5pdGlhbGl6YXRpb24gdGhlIGNvbW1vbiBST00tUkFNIHN5c3RlbQorKiAgICAgICAgICAgICAgICAgIG5lZWRlZCBwcmlvciB0byB1c2luZyB0aGUgUk9NIEVuY3J5cHRpb24gZnVuY3Rpb25zCisqICAgICAgICAgICAgICAgICAgKHJlZi4gPGRyaXZlcmxpYi9Sb21FbmNyeXB0aW9uLmg+KQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X2NoaXBfZGVmLmg+CisKKy8vIE5vdGU6IENvbnRlbnRzIG9mIHRoZSBIZWxwRnVuY1RhYmxlW10gZGlmZmVyIGJldHdlZW4gdGhlIENDMjZ4eCBhbmQgQ0MxM3h4IGNoaXAgZmFtaWx5Cit1aW50MzJfdCBIZWxwRnVuY1RhYmxlW10gPSB7CisgICAwICAgICAgICAgLCAvLyBbMF0gPT4gb2Zmc2V0IDB4MDAKKyAgIDAgICAgICAgICAsIC8vIFsxXSA9PiBvZmZzZXQgMHgwNAorICAgMCAgICAgICAgICwgLy8gWzJdID0+IG9mZnNldCAweDA4CisgICAweDEwMDA0NmY3LCAvLyBbM10gPT4gb2Zmc2V0IDB4MEMKKyAgIDAgICAgICAgICAsIC8vIFs0XSA9PiBvZmZzZXQgMHgxMAorICAgMCAgICAgICAgICAgLy8gWzVdID0+IG9mZnNldCAweDE0Cit9OworCisKK3VpbnQzMl90IFJvbTJSb21QYXRjaFRhYmxlW10gPSB7CisgICAweDEwMDE2OTc1LCAvLyBbMzJdID0+IG9mZnNldCAweDgwCisgICAweDEwMDE2OTc5LCAvLyBbMzNdID0+IG9mZnNldCAweDg0CisgICAweDEwMDE2OTg1LCAvLyBbMzRdID0+IG9mZnNldCAweDg4CisgICAweDEwMDE2YTk5LCAvLyBbMzVdID0+IG9mZnNldCAweDhDCisgICAweDEwMDE2YWY1LCAvLyBbMzZdID0+IG9mZnNldCAweDkwCisgICAweDEwMDE2Yjc5LCAvLyBbMzddID0+IG9mZnNldCAweDk0CisgICAweDEwMDE2YzI5LCAvLyBbMzhdID0+IG9mZnNldCAweDk4CisgICAweDEwMDE2YzQ1LCAvLyBbMzldID0+IG9mZnNldCAweDlDCisgICAweDEwMDE2Yzc5LCAvLyBbNDBdID0+IG9mZnNldCAweEEwCisgICAweDEwMDE2ZDA1LCAvLyBbNDFdID0+IG9mZnNldCAweEE0CisgICAweDEwMDE2ZDI5LCAvLyBbNDJdID0+IG9mZnNldCAweEE4CisgICAweDEwMDE2ZGExLCAvLyBbNDNdID0+IG9mZnNldCAweEFDCisgICAweDEwMDE2ZGM5LCAvLyBbNDRdID0+IG9mZnNldCAweEIwCisgICAweDEwMDE2ZThkLCAvLyBbNDVdID0+IG9mZnNldCAweEI0CisgICAweDEwMDE2ZWExLCAvLyBbNDZdID0+IG9mZnNldCAweEI4CisgICAweDEwMDE2ZWQ1LCAvLyBbNDddID0+IG9mZnNldCAweEJDCisgICAweDEwMDE3MzY1LCAvLyBbNDhdID0+IG9mZnNldCAweEMwCisgICAweDEwMDE3NGZkLCAvLyBbNDldID0+IG9mZnNldCAweEM0CisgICAweDEwMDE3NjdkLCAvLyBbNTBdID0+IG9mZnNldCAweEM4CisgICAweDEwMDE3ODM5LCAvLyBbNTFdID0+IG9mZnNldCAweENDCisgICAweDEwMDE3ODk1LCAvLyBbNTJdID0+IG9mZnNldCAweEQwCisgICAweDEwMDE3OGY1LCAvLyBbNTNdID0+IG9mZnNldCAweEQ0CisgICAweDEwMDE3NzcxLCAvLyBbNTRdID0+IG9mZnNldCAweEQ4CisgICAweDEwMDE3NWVkLCAvLyBbNTVdID0+IG9mZnNldCAweERDCisgICAweDEwMDE4YjA5LCAvLyBbNTZdID0+IG9mZnNldCAweEUwCisgICAweDEwMDE4YTk5LCAvLyBbNTddID0+IG9mZnNldCAweEU0CisgICAweDEwMDE4YWM1LCAvLyBbNThdID0+IG9mZnNldCAweEU4CisgICAweDEwMDE4YTE5LCAvLyBbNTldID0+IG9mZnNldCAweEVDCisgICAweDEwMDE4YTM1ICAvLyBbNjBdID0+IG9mZnNldCAweEYwCit9OworCit1aW50MzJfdCBjb21tb25ST01TY3JhdGNoQXJlYVsgNTMgXSBAMHgyMDAwNEYyQzsKKworZXh0ZXJuIHZvaWQgU3RhbmRhbG9uZVJvbUNyeXB0b0luaXQoIHZvaWQgKQoreworICAgZm9yICggaW50IGkgPSAwIDsgaSA8ICggc2l6ZW9mKCBjb21tb25ST01TY3JhdGNoQXJlYSApIC8gc2l6ZW9mKCB1aW50MzJfdCApKSA7IGkrKyApIHsKKyAgICAgIGNvbW1vblJPTVNjcmF0Y2hBcmVhWyBpIF0gPSAwOworICAgfQorICAgY29tbW9uUk9NU2NyYXRjaEFyZWFbIDMgXSA9ICgodWludDMyX3QpSGVscEZ1bmNUYWJsZSk7CisgICBjb21tb25ST01TY3JhdGNoQXJlYVsgNCBdID0gKCh1aW50MzJfdClSb20yUm9tUGF0Y2hUYWJsZSkgLSAoIDMyICogc2l6ZW9mKCB1aW50MzJfdCApKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvdXRpbHMvcm9tX2NyeXB0by9zdGFuZGFsb25lX3JvbV9jcnlwdG8uaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvdXRpbHMvcm9tX2NyeXB0by9zdGFuZGFsb25lX3JvbV9jcnlwdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTZlYTJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS91dGlscy9yb21fY3J5cHRvL3N0YW5kYWxvbmVfcm9tX2NyeXB0by5oCkBAIC0wLDAgKzEsODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBzdGFuZGFsb25lX3JvbV9jcnlwdG8uaAorKiAgUmV2aXNlZDogICAgICAgICREYXRlOiAyMDE1LTAzLTE5IDE1OjM3OjExICswMTAwICh0bywgMTkgbWFyIDIwMTUpICQKKyogIFJldmlzaW9uOiAgICAgICAkUmV2aXNpb246IDQzMDUxICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBQcm92aWRlIGEgc2ltcGxlIGluaXRpYWxpemF0aW9uIHRoZSBjb21tb24gUk9NLVJBTSBzeXN0ZW0KKyogICAgICAgICAgICAgICAgICBuZWVkZWQgcHJpb3IgdG8gdXNpbmcgdGhlIFJPTSBFbmNyeXB0aW9uIGZ1bmN0aW9ucworKiAgICAgICAgICAgICAgICAgIChyZWYuIDxkcml2ZXJsaWIvUm9tRW5jcnlwdGlvbi5oPikKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1NUQU5EQUxPTkVfUk9NX0NSWVBUT19fCisjZGVmaW5lIF9fU1RBTkRBTE9ORV9ST01fQ1JZUFRPX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTaW1wbGlmaWVkIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjb21tb24gUk9NLVJBTSBzeXN0ZW0gbmVlZGVkIHByaW9yIHRvIHVzaW5nIHRoZSBSb21FbmNyeXB0aW9uIGZ1bmN0aW9ucy4KKy8vIQorLy8hIFRoaXMgc2ltcGxpZmllZCBpbml0aWFsaXphdGlvbiBzaGFsbCBub3QgYmUgdXNlZCBpZiB1c2luZyB0aGUgc3RhY2sgc29mdHdhcmUuCisvLyEgVGhlIHN0YWNrIHNvZnR3YXJlIGltcGxpZXMgY2FsbGluZyB0aGUgZnVuY3Rpb24gQ29tbW9uUk9NX0luaXQoKSByZXBsYWNpbmcKKy8vISB0aGlzIHNpbXBsaWZpZWQgbWV0aG9kLgorLy8hCisvLyEgXG5vdGUgU1JBTSBhcmVhIDB4MjAwMDRGMkMtMHgyMDAwNEZGRiB3aWxsIGJlIGFsbG9jYXRlZCAoQ09NTU9OX1JBTV9CQVNFX0FERFIgcmVnaW9uKS4KKy8vIQorLy8hIFxwYXJhbSBOb25lCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBSb21FbmNyeXB0aW9uLmgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTdGFuZGFsb25lUm9tQ3J5cHRvSW5pdCggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fU1RBTkRBTE9ORV9ST01fQ1JZUFRPX18KZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlLmFtIGIvdG9vbHMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVlZGVkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNTUgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworIyBBbHdheXMgcGFja2FnZSAoZS5nLiBmb3IgJ21ha2UgZGlzdCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitESVNUX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgaGFybmVzcy1hdXRvbWF0aW9uICAgICAgICAgICAgICAgICAgICBcCisgICAgaGFybmVzcy10aGNpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3BpLWhkbGMtYWRhcHRlciAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIEFsd2F5cyBidWlsZCAoZS5nLiBmb3IgJ21ha2UgYWxsJykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfQlVJTERfVE9PTFMKK2lmIE9QRU5USFJFQURfVEFSR0VUX0xJTlVYCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBzcGktaGRsYy1hZGFwdGVyCitlbmRpZgorZW5kaWYgIyBPUEVOVEhSRUFEX0JVSUxEX1RPT0xTCisKKyMgQWx3YXlzIHByZXR0eSAoZS5nLiBmb3IgJ21ha2UgcHJldHR5JykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK1BSRVRUWV9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL01ha2VmaWxlLmFtIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDVjZWUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw0MSBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitFWFRSQV9ESVNUICAgICAgICAgICAgICA9IFwKKyAgICBhdXRvdGhyZWFkaGFybmVzcyAgICAgXAorICAgIGNhc2VzICAgICAgICAgICAgICAgICBcCisgICAgZG9jICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXF1aXJlbWVudHMudHh0ICAgICAgXAorICAgIFJFQURNRS5yc3QgICAgICAgICAgICBcCisgICAgc3RhcnQuYmF0ICAgICAgICAgICAgIFwKKyAgICBzdGFydC5zaCAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vUkVBRE1FLnJzdCBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9SRUFETUUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZmU3NmQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vUkVBRE1FLnJzdApAQCAtMCwwICsxLDcwIEBACis9PT09PT09PT09PT09PT09PT09PT09PQorSGFybmVzcyBBdXRvbWF0aW9uIFRvb2wKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgYSB0b29sIHRvIGF1dG9tYXRlIHRlc3Rpbmcgb3BlbnRocmVhZCB3aXRoIEdSTCBUaHJlYWQtVGVzdC1IYXJuZXNzMS4xLUFscGhhIHYxLjAtUmVsZWFzZV80MC4wLgorCistLS0tLS0tLS0tLQorUXVpY2sgU3RhcnQKKy0tLS0tLS0tLS0tCisKK0ZvbGxvdyB0aGUgYFF1aWNrIFN0YXJ0IDxkb2MvcXVpY2tzdGFydC5yc3Q+YF8KKworLS0tLS0tCitTeW50YXgKKy0tLS0tLQorCis6OgorCisgLi9zdGFydC5zaCBbLWhdIFstLXBhdHRlcm4gUEFUVEVSTl0gWy0tZGVsZXRlLWJsYWNrbGlzdF0gWy0tc2tpcCBTS0lQXQorICAgICAgICAgICAgICAgICBbLS1kcnktcnVuXSBbLS1yZXN1bHQtZmlsZSBSRVNVTFRfRklMRV0KKyAgICAgICAgICAgICAgICAgWy0tbGlzdC1maWxlIExJU1RfRklMRV0gWy0tY29udGludWUtZnJvbSBDT05USU5VRV9GUk9NXQorICAgICAgICAgICAgICAgICBbLS1hdXRvLXJlYm9vdF0gWy0tbWFudWFsLXJlc2V0XSBbLS1saXN0LWRldmljZXNdCisgICAgICAgICAgICAgICAgIFtOQU1FIFtOQU1FIC4uLl1dCisKKy0tLS0tLS0KK09wdGlvbnMKKy0tLS0tLS0KKworSWYgYGAtbGBgIGlzIGdpdmVuLCBgYE5BTUVgYCBpcyB0aGUgc2VyaWFsIHBvcnQgZGV2aWNlIG5hbWUuIE90aGVyd2lzZSBgYE5BTUVgYCBpcyB0ZXN0IGNhc2UgbmFtZS4gVGhpcyBlbmFibGVzIHJ1bm5pbmcgc2luZ2xlIG9yIG11bHRpcGxlIHRlc3QgY2FzZXMgZGlyZWN0bHkuCisKK090aGVyIG9wdGlvbnM6OgorCisgICAgLWgsIC0taGVscAorICAgICAgICBTaG93IGhlbHAgbWVzc2FnZSBhbmQgZXhpdC4KKworICAgIC0tYmxhY2tsaXN0IEJMQUNLTElTVF9GSUxFLCAtYiBCTEFDS0xJU1RfRklMRQorICAgICAgICBza2lwIHRlc3QgY2FzZXMgbGlzdGVkIGluIEJMQUNLTElTVF9GSUxFLgorCisgICAgLS1wYXR0ZXJuIFBBVFRFUk4sIC1wIFBBVFRFUk4KKyAgICAgICAgRmlsZSBuYW1lIHBhdHRlcm4sIERlZmF1bHQgdG8gYWxsIHB5dGhvbiBmaWxlcy4KKworICAgIC0tZGVsZXRlLWJsYWNrbGlzdCwgLWQKKyAgICAgICAgQ2xlYXIgZ29sZGVuIGRldmljZSBibGFja2xpc3Qgb24gc3RhcnR1cC4gQnkgZGVmYXVsdCwgZ29sZGVuIGRldmljZXMgZmFpbGVkIHRvIGJlIGNvbm5lY3RlZCBhcmUga2VwdCBpbiBhIGJsYWNrbGlzdCBhdXRvbWF0aWNhbGx5LiBBZGQgdGhpcyBvcHRpb24gdG8gY2xlYXIgYmxhY2tsaXN0IG9uIHN0YXJ0dXAuCisKKyAgICAtLW5hbWUtZ3JlcHMgTkFNRV9HUkVQUywgLWcgTkFNRV9HUkVQUworICAgICAgICBGaWx0ZXIgY2FzZSBieSBpdHMgbmFtZSB1c2luZyBmaWxlbmFtZSBtYXRjaGluZyBzeW50YXguIE11bHRpcGxlIHRoaXMgb3B0aW9ucyBhcmUgT1ItZWQgdG8gYWxsb3cgbW9yZSB0ZXN0cy4KKworICAgIC0tc2tpcCBTS0lQLCAtayBTS0lQCisgICAgICAgIFR5cGUgb2YgdGVzdCBjYXNlIHN0YXR1cyB0byBza2lwLiBgYGVgYCBmb3IgZXJyb3IsIGBgZmBgIGZvciBmYWlsLCBgYHBgYCBmb3IgcGFzcy4gSWYgdGVzdCBjYXNlIG5hbWVzIGFyZSBnaXZlbiBieSBgYE5BTUVgYCwgdGhpcyBvcHRpb24gd2lsbCBub3Qgd29yay4KKworICAgIC0tZHJ5LXJ1biwgLW4KKyAgICAgICAgSnVzdCBzaG93IHdoYXQgdGVzdCBjYXNlIHdpbGwgYmUgcnVuLgorCisgICAgLS1yZXN1bHQtZmlsZSBSRVNVTFRfRklMRSwgLW8gUkVTVUxUX0ZJTEUKKyAgICAgICAgRmlsZSB0byBzdG9yZSBhbmQgcmVhZCBjdXJyZW50IHN0YXR1cy4KKworICAgIC0tbGlzdC1maWxlIExJU1RfRklMRSwgLWkgTElTVF9GSUxFCisgICAgICAgIEZpbGUgdG8gbGlzdCBjYXNlcyBuYW1lcyB0byB0ZXN0LgorCisgICAgLS1jb250aW51ZS1mcm9tIENPTlRJTlVFX0ZST00sIC1jIENPTlRJTlVFX0ZST00KKyAgICAgICAgRmlyc3QgY2FzZSB0byB0ZXN0LgorCisgICAgLS1hdXRvLXJlYm9vdCwgLWEKKyAgICAgICAgUmVzdGFydCBzeXN0ZW0gd2hlbiBoYXJuZXNzIGNhbm5vdCByZWNvdmVyLiBUaGlzIGlzIGEgd2FsayBhcm91bmQgdG8gc29tZSBpc3N1ZXMsIHN1Y2ggYXMgZ29sZGVuIGRldmljZXMgbWF5IG5vdCB3b3JrIGFmdGVyIGxvbmcgdGltZSBydW5uaW5nIGFuZCBoYXZlIHRvIHJlc3RhcnQgc3lzdGVtLgorCisgICAgLS1tYW51YWwtcmVzZXQsIC1tCisgICAgICAgIFJlc2V0IGRldmljZXMgbWFudWFsbHksIGluIGNhc2Ugbm8gUERVIGF2YWlsYWJsZSBzbyB0aGF0IHJlc2V0IGdvbGRlbiBkZXZpY2VzIGhhdmUgdG8gYmUgZG9uZSBtYW51YWxseS4KKworICAgIC0tbGlzdC1kZXZpY2VzLCAtbAorICAgICAgICBMaXN0IGRldmljZXMsIGluY2x1ZGluZyB0aGVpciB2ZXJzaW9uIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL19faW5pdF9fLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMGI1YmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvX19pbml0X18ucHkKQEAgLTAsMCArMSwyOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIwpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL2V4Y2VwdGlvbnMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvZXhjZXB0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjk5Y2M3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL2V4Y2VwdGlvbnMucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitjbGFzcyBGYWlsRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJUaGlzIGVycm9yIGNsYXNzIGlzIHRoZSBiYXNlIGZvciBhbGwgZXJyb3JzIHRoYXQgY2F1c2UgdGhlIGN1cnJlbnQgdGVzdCBjYXNlIGZhaWxzLgorICAgICIiIgorICAgIHBhc3MKKworY2xhc3MgRmF0YWxFcnJvcihGYWlsRXJyb3IpOgorICAgICIiIlRoaXMgZXJyb3IgY2xhc3MgaXMgdGhlIGJhc2UgZm9yIGFsbCBlcnJvcnMgdGhhdCBjYXVzZSB0aGUgd2hvbGUgdGVzdCBwcm9jZWR1cmUgc3RvcHMuCisgICAgIiIiCisgICAgcGFzcworCitjbGFzcyBHb2xkZW5EZXZpY2VOb3RFbm91Z2hFcnJvcihGYWlsRXJyb3IpOgorICAgICIiIlJhaXNlZCB3aGVuIG5vIG1vcmUgZ29sZGVuIGRldmljZXMgYXJlIGF2YWlsYWJsZSBmb3IgdHJ5aW5nLgorICAgICIiIgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9oYXJuZXNzX2Nhc2UucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvaGFybmVzc19jYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZGE1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvaGFybmVzc19jYXNlLnB5CkBAIC0wLDAgKzEsODY5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBDb25maWdQYXJzZXIKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHJlCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gc2VsZW5pdW0gaW1wb3J0IHdlYmRyaXZlcgorZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIgaW1wb3J0IEFjdGlvbkNoYWlucworZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuc3VwcG9ydC51aSBpbXBvcnQgU2VsZWN0Citmcm9tIHNlbGVuaXVtLmNvbW1vbi5leGNlcHRpb25zIGltcG9ydCBVbmV4cGVjdGVkQWxlcnRQcmVzZW50RXhjZXB0aW9uCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MgaW1wb3J0IHNldHRpbmdzCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmV4Y2VwdGlvbnMgaW1wb3J0IEZhaWxFcnJvciwgRmF0YWxFcnJvciwgR29sZGVuRGV2aWNlTm90RW5vdWdoRXJyb3IKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jb250cm9sbGVyIGltcG9ydCBIYXJuZXNzQ29udHJvbGxlcgorZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oZWxwZXJzIGltcG9ydCBIaXN0b3J5SGVscGVyCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLm9wZW5fdGhyZWFkX2NvbnRyb2xsZXIgaW1wb3J0IE9wZW5UaHJlYWRDb250cm9sbGVyCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLnBkdV9jb250cm9sbGVyX2ZhY3RvcnkgaW1wb3J0IFBkdUNvbnRyb2xsZXJGYWN0b3J5CisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCitUSFJFQURfQ0hBTk5FTF9NQVggPSAyNgorIiIiTWF4aW11bSBjaGFubmVsIG51bWJlciBvZiB0aHJlYWQgcHJvdG9jb2wiIiIKKworVEhSRUFEX0NIQU5ORUxfTUlOID0gMTEKKyIiIk1pbmltdW0gY2hhbm5lbCBudW1iZXIgb2YgdGhyZWFkIHByb3RvY29sIiIiCisKK0RFRkFVTFRfVElNRU9VVCA9IDI3MDAKKyIiIlRpbWVvdXQgZm9yIGVhY2ggdGVzdCBjYXNlIGluIHNlY29uZHMiIiIKKworZGVmIHdhaXRfdW50aWwod2hhdCwgdGltZXM9LTEpOgorICAgICIiIldhaXQgdW50aWwgYHdoYXRgIHJldHVybiBUcnVlCisKKyAgICBBcmdzOgorICAgICAgICB3aGF0IChDYWxsYWJsZVtib29sXSk6IENhbGwgYHdhaXQoKWAgYWdhaW4gYW5kIGFnYWluIHVudGlsIGl0IHJldHVybnMgVHJ1ZQorICAgICAgICB0aW1lcyAoaW50KTogTWF4aW11bSB0aW1lcyBvZiB0cmlhbHMgYmVmb3JlIGdpdmluZyB1cAorCisgICAgUmV0dXJuczoKKyAgICAgICAgVHJ1ZSBpZiBzdWNjZXNzLCBGYWxzZSBpZiB0aW1lcyB0aHJlc2hvbGQgcmVhY2hlZAorCisgICAgIiIiCisgICAgd2hpbGUgdGltZXM6CisgICAgICAgIGxvZ2dlci5pbmZvKCdXYWl0aW5nIHRpbWVzIGxlZnQgJWQnLCB0aW1lcykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgd2hhdCgpIGlzIFRydWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignV2FpdCBmYWlsZWQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ1RyaWFsWyVkXSBmYWlsZWQnLCB0aW1lcykKKyAgICAgICAgdGltZXMgLT0gMQorICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgSGFybmVzc0Nhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRoaXMgaXMgdGhlIGNhc2UgY2xhc3Mgb2YgYWxsIGF1dG9tYXRpb24gdGVzdCBjYXNlcy4KKworICAgIEFsbCB0ZXN0IGNhc2UgY2xhc3NlcyBNVVNUIGRlZmluZSBwcm9wZXJ0aWVzIGByb2xlYCwgYGNhc2VgIGFuZCBgZ29sZGVuX2RldmljZXNfcmVxdWlyZWRgCisgICAgIiIiCisKKyAgICBjaGFubmVsID0gc2V0dGluZ3MuVEhSRUFEX0NIQU5ORUwKKyAgICAiIiJpbnQ6IFRocmVhZCBjaGFubmVsLgorCisgICAgVGhyZWFkIGNoYW5uZWwgcmFuZ2VzIGZyb20gMTEgdG8gMjYuCisgICAgIiIiCisKKyAgICBST0xFX0xFQURFUiAgICAgICAgID0gMQorICAgIFJPTEVfUk9VVEVSICAgICAgICAgPSAyCisgICAgUk9MRV9TRUQgICAgICAgICAgICA9IDQKKyAgICBST0xFX0JPUkRFUiAgICAgICAgID0gOAorICAgIFJPTEVfUkVFRCAgICAgICAgICAgPSAxNgorICAgIFJPTEVfRUQgICAgICAgICAgICAgPSAzMgorICAgIFJPTEVfQ09NTUlTU0lPTkVSICAgPSA2NAorICAgIFJPTEVfSk9JTkVSICAgICAgICAgPSAxMjgKKyAgICBST0xFX0ZFRCAgICAgICAgICAgID0gNTEyCisgICAgUk9MRV9NRUQgICAgICAgICAgICA9IDEwMjQKKworICAgIHJvbGUgPSBOb25lCisgICAgIiIiaW50OiByb2xlIGlkLgorCisgICAgMQorICAgICAgICBMZWFkZXIKKyAgICAyCisgICAgICAgIFJvdXRlcgorICAgIDQKKyAgICAgICAgU2xlZXB5IGVuZCBkZXZpY2UKKyAgICAxNgorICAgICAgICBSb3V0ZXIgZWxpZ2libGUgZW5kIGRldmljZQorICAgIDMyCisgICAgICAgIEVuZCBkZXZpY2UKKyAgICA2NAorICAgICAgICBDb21taXNzaW9uZXIKKyAgICAxMjgKKyAgICAgICAgSm9pbmVyCisgICAgNTEyCisgICAgICAgIEZ1bGwgZW5kIGRldmljZQorICAgIDEwMjQKKyAgICAgICAgTWluaW1hbCBlbmQgZGV2aWNlCisgICAgIiIiCisKKyAgICBjYXNlID0gTm9uZQorICAgICIiInN0cjogQ2FzZSBpZCwgZS5nLiAnNiA1IDEnLgorICAgICIiIgorCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAwCisgICAgIiIiaW50OiBHb2xkZW4gZGV2aWNlcyBuZWVkZWQgdG8gZmluaXNoIHRoZSB0ZXN0CisgICAgIiIiCisKKyAgICBjaGlsZF90aW1lb3V0ID0gc2V0dGluZ3MuVEhSRUFEX0NISUxEX1RJTUVPVVQKKyAgICAiIiJpbnQ6IENoaWxkIHRpbWVvdXQgaW4gc2Vjb25kcworICAgICIiIgorCisgICAgc2VkX3BvbGxpbmdfaW50ZXJ2YWwgPSBzZXR0aW5ncy5USFJFQURfU0VEX1BPTExJTkdfSU5URVJWQUwKKyAgICAiIiJpbnQ6IFNFRCBwb2xsaW5nIGludGVydmFsIGluIHNlY29uZHMKKyAgICAiIiIKKworICAgIGF1dG9fZHV0ID0gc2V0dGluZ3MuQVVUT19EVVQKKyAgICAiIiJib29sOiB3aGV0aGVyIHVzZSBoYXJuZXNzIGF1dG8gZHV0IGZlYXR1cmUiIiIKKworICAgIHRpbWVvdXQgPSBoYXNhdHRyKHNldHRpbmdzLCAnVElNRU9VVCcpIGFuZCBzZXR0aW5ncy5USU1FT1VUIG9yIERFRkFVTFRfVElNRU9VVAorICAgICIiIm51bWJlcjogdGltZW91dCBpbiBzZWNvbmRzIHRvIHN0b3AgcnVubmluZyB0aGlzIHRlc3QgY2FzZSIiIgorCisgICAgc3RhcnRlZCA9IDAKKyAgICAiIiJudW1iZXI6IHRlc3QgY2FzZSBzdGFydGVkIHRpbWVzdGFtcCIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZHV0ID0gTm9uZQorICAgICAgICBzZWxmLl9icm93c2VyID0gTm9uZQorICAgICAgICBzZWxmLl9oYyA9IE5vbmUKKyAgICAgICAgc2VsZi5yZXN1bHRfZGlyID0gJyVzXFwlcycgJSAoc2V0dGluZ3MuT1VUUFVUX1BBVEgsIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICBzZWxmLmhpc3RvcnkgPSBIaXN0b3J5SGVscGVyKCkKKworICAgICAgICBzdXBlcihIYXJuZXNzQ2FzZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIF9pbml0X2RldmljZXMoc2VsZik6CisgICAgICAgICIiIlJlYm9vdCBhbGwgdXNiIGRldmljZXMuCisKKyAgICAgICAgTm90ZToKKyAgICAgICAgICAgIElmIFBEVV9DT05UUk9MTEVSX1RZUEUgaXMgbm90IHZhbGlkLCB1c2IgZGV2aWNlcyBpcyBub3QgcmVib290ZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2V0dGluZ3MuUERVX0NPTlRST0xMRVJfVFlQRToKKyAgICAgICAgICAgIGlmIHNldHRpbmdzLkFVVE9fRFVUOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBmb3IgZGV2aWNlIGluIHNldHRpbmdzLkdPTERFTl9ERVZJQ0VTOgorICAgICAgICAgICAgICAgIHBvcnQsIF8gPSBkZXZpY2UKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggT3BlblRocmVhZENvbnRyb2xsZXIocG9ydCkgYXMgb3RjOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1Jlc2V0dGluZyAlcycsIHBvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICBvdGMucmVzZXQoKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbGVkIHRvIHJlc2V0IGRldmljZSAlcycsIHBvcnQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGlzdG9yeS5tYXJrX2JhZF9nb2xkZW5fZGV2aWNlKGRldmljZSkKKworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJpZXMgPSAzCisgICAgICAgIHBkdV9mYWN0b3J5ID0gUGR1Q29udHJvbGxlckZhY3RvcnkoKQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGR1ID0gcGR1X2ZhY3RvcnkuY3JlYXRlX3BkdV9jb250cm9sbGVyKHNldHRpbmdzLlBEVV9DT05UUk9MTEVSX1RZUEUpCisgICAgICAgICAgICAgICAgcGR1Lm9wZW4oKipzZXR0aW5ncy5QRFVfQ09OVFJPTExFUl9PUEVOX1BBUkFNUykKKyAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnRmFpbGVkIHRvIGNvbm5lY3QgdG8gdGVsbmV0JykKKyAgICAgICAgICAgICAgICB0cmllcyA9IHRyaWVzIC0gMQorICAgICAgICAgICAgICAgIGlmIHRyaWVzOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRmF0YWwgZXJyb3I6IGNhbm5vdCBjb25uZWN0IHRvIGFwYycpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBkdS5yZWJvb3QoKipzZXR0aW5ncy5QRFVfQ09OVFJPTExFUl9SRUJPT1RfUEFSQU1TKQorICAgICAgICAgICAgICAgIHBkdS5jbG9zZSgpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICB0aW1lLnNsZWVwKGxlbihzZXR0aW5ncy5HT0xERU5fREVWSUNFUykpCisKKyAgICBkZWYgX2luaXRfaGFybmVzcyhzZWxmKToKKyAgICAgICAgIiIiUmVzdGFydCBoYXJuZXNzIGJhY2tlbmQgc2VydmljZS4KKworICAgICAgICBQbGVhc2Ugc3RhcnQgdGhlIGhhcm5lc3MgY29udHJvbGxlciBiZWZvcmUgcnVubmluZyB0aGUgY2FzZXMsIG90aGVyd2lzZSwgbm90aGluZyBoYXBwZW5zCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9oYyA9IEhhcm5lc3NDb250cm9sbGVyKHNlbGYucmVzdWx0X2RpcikKKyAgICAgICAgc2VsZi5faGMuc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgc2VsZi5faGMuc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDIpCisKKyAgICAgICAgaGFybmVzc19jb25maWcgPSBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgaGFybmVzc19jb25maWcucmVhZCgnJXNcXENvbmZpZ1xcQ29uZmlndXJhdGlvbi5pbmknICUgc2V0dGluZ3MuSEFSTkVTU19IT01FKQorICAgICAgICBpZiBoYXJuZXNzX2NvbmZpZy5oYXNfb3B0aW9uKCdUSFJFQURfSEFSTkVTU19DT05GSUcnLCAnQnJvd3NlckF1dG9OYXZpZ2F0ZScpIGFuZCBcCisgICAgICAgICAgICAgICAgaGFybmVzc19jb25maWcuZ2V0Ym9vbGVhbignVEhSRUFEX0hBUk5FU1NfQ09ORklHJywgJ0Jyb3dzZXJBdXRvTmF2aWdhdGUnKToKKyAgICAgICAgICAgIG9zLnN5c3RlbSgndGFza2tpbGwgL3QgL2YgL2ltIGNocm9tZS5leGUnKQorCisgICAgZGVmIF9kZXN0cm95X2hhcm5lc3Moc2VsZik6CisgICAgICAgICIiIlN0b3AgaGFybmVzcyBiYWNrZW5kIHNlcnZpY2UKKworICAgICAgICBTdG9wIGhhcm5lc3Mgc2VydmljZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2hjLnN0b3AoKQorICAgICAgICB0aW1lLnNsZWVwKDIpCisKKyAgICBkZWYgX2luaXRfZHV0KHNlbGYpOgorICAgICAgICAiIiJJbml0aWFsaXplIHRoZSBEVVQuCisKKyAgICAgICAgRFVUIHdpbGwgYmUgcmVzdGFydGVkLiBhbmQgb3BlbnRocmVhZCB3aWxsIHN0YXJ0ZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmF1dG9fZHV0OgorICAgICAgICAgICAgc2VsZi5kdXQgPSBOb25lCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkdXRfcG9ydCA9IHNldHRpbmdzLkRVVF9ERVZJQ0VbMF0KKyAgICAgICAgZHV0ID0gT3BlblRocmVhZENvbnRyb2xsZXIoZHV0X3BvcnQpCisgICAgICAgIHNlbGYuZHV0ID0gZHV0CisKKyAgICBkZWYgX2Rlc3Ryb3lfZHV0KHNlbGYpOgorICAgICAgICBzZWxmLmR1dCA9IE5vbmUKKworICAgIGRlZiBfaW5pdF9icm93c2VyKHNlbGYpOgorICAgICAgICAiIiJPcGVuIGhhcm5lc3Mgd2ViIHBhZ2UuCisKKyAgICAgICAgT3BlbiBhIHF1aWV0IGNocm9tZSB3aGljaDoKKyAgICAgICAgMS4gZGlzYWJsZXMgZXh0ZW5zaW9ucywKKyAgICAgICAgMi4gaWdub3JlIGNlcnRpZmljYXRlIGVycm9ycyBhbmQKKyAgICAgICAgMy4gYWx3YXlzIGFsbG93IG5vdGlmaWNhdGlvbnMuCisgICAgICAgICIiIgorICAgICAgICBjaHJvbWVfb3B0aW9ucyA9IHdlYmRyaXZlci5DaHJvbWVPcHRpb25zKCkKKyAgICAgICAgY2hyb21lX29wdGlvbnMuYWRkX2FyZ3VtZW50KCctLWRpc2FibGUtZXh0ZW5zaW9ucycpCisgICAgICAgIGNocm9tZV9vcHRpb25zLmFkZF9hcmd1bWVudCgnLS1pZ25vcmUtY2VydGlmaWNhdGUtZXJyb3JzJykKKyAgICAgICAgY2hyb21lX29wdGlvbnMuYWRkX2V4cGVyaW1lbnRhbF9vcHRpb24oJ3ByZWZzJywgeworICAgICAgICAgICAgJ3Byb2ZpbGUubWFuYWdlZF9kZWZhdWx0X2NvbnRlbnRfc2V0dGluZ3Mubm90aWZpY2F0aW9ucyc6IDEKKyAgICAgICAgfSkKKworICAgICAgICBicm93c2VyID0gd2ViZHJpdmVyLkNocm9tZShjaHJvbWVfb3B0aW9ucz1jaHJvbWVfb3B0aW9ucykKKyAgICAgICAgYnJvd3Nlci5zZXRfcGFnZV9sb2FkX3RpbWVvdXQoMTApCisgICAgICAgIGJyb3dzZXIuaW1wbGljaXRseV93YWl0KDEpCisgICAgICAgIGJyb3dzZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgYnJvd3Nlci5nZXQoc2V0dGluZ3MuSEFSTkVTU19VUkwpCisgICAgICAgIHNlbGYuX2Jyb3dzZXIgPSBicm93c2VyCisgICAgICAgIGlmIG5vdCB3YWl0X3VudGlsKGxhbWJkYTogJ1RocmVhZCcgaW4gYnJvd3Nlci50aXRsZSwgMzApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignVGhyZWFkJywgYnJvd3Nlci50aXRsZSkKKworICAgIGRlZiBfZGVzdHJveV9icm93c2VyKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgYnJvd3Nlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2Jyb3dzZXIuY2xvc2UoKQorICAgICAgICBzZWxmLl9icm93c2VyID0gTm9uZQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJQcmVwYXJlIHRvIHJ1biB0ZXN0IGNhc2UuCisKKyAgICAgICAgU3RhcnQgaGFybmVzcyBzZXJ2aWNlLCBpbml0IGdvbGRlbiBkZXZpY2VzLCByZXNldCBEVVQgYW5kIG9wZW4gYnJvd3Nlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIEhhcm5lc3NDYXNlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1NldHRpbmcgdXAnKQorICAgICAgICAjIGNsZWFyIGZpbGVzCisgICAgICAgIGxvZ2dlci5pbmZvKCdEZWxldGluZyBhbGwgLnBkZicpCisgICAgICAgIG9zLnN5c3RlbSgnZGVsIC9xICIlSE9NRURSSVZFJSVIT01FUEFUSCVcXERvd25sb2Fkc1xcTmV3UGRmXyoucGRmIicpCisgICAgICAgIGxvZ2dlci5pbmZvKCdEZWxldGluZyBhbGwgLnhsc3gnKQorICAgICAgICBvcy5zeXN0ZW0oJ2RlbCAvcSAiJUhPTUVEUklWRSUlSE9NRVBBVEglXFxEb3dubG9hZHNcXEV4Y2VsUmVwb3J0Ki54bHN4IicpCisgICAgICAgIGxvZ2dlci5pbmZvKCdEZWxldGluZyBhbGwgLnBjYXBuZycpCisgICAgICAgIG9zLnN5c3RlbSgnZGVsIC9xICIlc1xcQ2FwdHVyZXNcXCoucGNhcG5nIicgJSBzZXR0aW5ncy5IQVJORVNTX0hPTUUpCisKKyAgICAgICAgIyB1c2luZyB0ZW1wIGZpbGVzIHRvIGZpeCBleGNlbCBkb3dubG9hZGluZyBmYWlsCisgICAgICAgIGxvZ2dlci5pbmZvKCdFbXB0eSBmaWxlcyBpbiB0ZW1wcycpCisgICAgICAgIG9zLnN5c3RlbSgnZGVsIC9xICIlc1xcVGhyZWFkX0hhcm5lc3NcXHRlbXBcXCouKiInICUgc2V0dGluZ3MuSEFSTkVTU19IT01FKQorCisgICAgICAgICMgY3JlYXRlIGRpcmVjdG9yeQorICAgICAgICBvcy5zeXN0ZW0oJ21rZGlyICVzJyAlIHNlbGYucmVzdWx0X2RpcikKKyAgICAgICAgc2VsZi5faW5pdF9oYXJuZXNzKCkKKyAgICAgICAgc2VsZi5faW5pdF9kZXZpY2VzKCkKKyAgICAgICAgc2VsZi5faW5pdF9kdXQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAiIiJDbGVhbiB1cCBhZnRlciBlYWNoIGNhc2UuCisKKyAgICAgICAgU3RvcCBoYXJuZXNzIHNlcnZpY2UsIGNsb3NlIGJyb3dzZXIgYW5kIGNsb3NlIERVVC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIEhhcm5lc3NDYXNlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1RlYXJpbmcgZG93bicpCisgICAgICAgIHNlbGYuX2Rlc3Ryb3lfaGFybmVzcygpCisgICAgICAgIHNlbGYuX2Rlc3Ryb3lfYnJvd3NlcigpCisgICAgICAgIHNlbGYuX2Rlc3Ryb3lfZHV0KCkKKworICAgIGRlZiBfc2V0dXBfcGFnZShzZWxmKToKKyAgICAgICAgIiIiRG8gc25pZmZlciBzZXR0aW5ncyBhbmQgZ2VuZXJhbCBzZXR0aW5ncworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuc3RhcnRlZDoKKyAgICAgICAgICAgIHNlbGYuc3RhcnRlZCA9IHRpbWUudGltZSgpCisKKyAgICAgICAgaWYgdGltZS50aW1lKCkgLSBzZWxmLnN0YXJ0ZWQgPiAzMDoKKyAgICAgICAgICAgIHNlbGYuX2Jyb3dzZXIucmVmcmVzaCgpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIERldGVjdCBTbmlmZmVyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRpYWxvZyA9IHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCdjYXB0dXJlLVNldHVwLW1vZGFsJykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbGVkIHRvIGdldCBkaWFsb2cuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGRpYWxvZyBhbmQgZGlhbG9nLmdldF9hdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgPT0gJ2ZhbHNlJzoKKyAgICAgICAgICAgICAgICB0aW1lcyA9IDYwCisgICAgICAgICAgICAgICAgd2hpbGUgdGltZXM6CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfY2xhc3NfbmFtZSgnc3RhdHVzLW5vdGlmeScpLnRleHQKKyAgICAgICAgICAgICAgICAgICAgaWYgJ1NlYXJjaGluZycgaW4gc3RhdHVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1N0aWxsIGRldGVjdGluZy4uJykKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAnTm90JyBpbiBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnU25pZmZlciBkZXZpY2Ugbm90IHZlcmlmaWVkIScpCisgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdzbmlmZmVyQXV0b0RldGVjdEJ0bicpCisgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xpY2soKQorICAgICAgICAgICAgICAgICAgICBlbGlmICdWZXJpZmllZCcgaW4gc3RhdHVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1ZlcmlmaWVkIScpCisgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdzYXZlQ2FwdHVyZVNldHRpbmdzJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGljaygpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ1VuZXhwZWN0ZWQgc25pZmZlciB2ZXJpZmljYXRpb24gc3RhdHVzJykKKworICAgICAgICAgICAgICAgICAgICB0aW1lcyA9IHRpbWVzIC0gMQorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgdGltZXM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5hYmxlIHRvIGRldGVjdCBzbmlmZmVyIGRldmljZScpCisKKyAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNraXBfYnV0dG9uID0gc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ1NraXBQcmVwYXJlRGV2aWNlJykKKyAgICAgICAgICAgIGlmIHNraXBfYnV0dG9uLmlzX2VuYWJsZWQoKToKKyAgICAgICAgICAgICAgICBza2lwX2J1dHRvbi5jbGljaygpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnU3RpbGwgZGV0ZWN0aW5nIHNuaWZmZXJzJykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0X2J1dHRvbiA9IHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCduZXh0QnV0dG9uJykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbGVkIHRvIGZpbmlzaCBzZXR1cCcpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3QgbmV4dF9idXR0b24uaXNfZW5hYmxlZCgpOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0hhcm5lc3MgaXMgc3RpbGwgbm90IHJlYWR5JykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgR2VuZXJhbCBTZXR1cAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLmNoaWxkX3RpbWVvdXQgb3Igc2VsZi5zZWRfcG9sbGluZ19pbnRlcnZhbDoKKyAgICAgICAgICAgICAgICBidXR0b24gPSBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudF9ieV9pZCgnZ2VuZXJhbC1TZXR1cCcpCisgICAgICAgICAgICAgICAgYnV0dG9uLmNsaWNrKCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIpCisKKyAgICAgICAgICAgICAgICBkaWFsb2cgPSBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudF9ieV9pZCgnZ2VuZXJhbC1TZXR1cC1tb2RhbCcpCisgICAgICAgICAgICAgICAgaWYgZGlhbG9nLmdldF9hdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgIT0gJ2ZhbHNlJzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdNaXNzaW5nIEdlbmVyYWwgU2V0dXAgZGlhbG9nJykKKworICAgICAgICAgICAgICAgIGZpZWxkID0gZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnaW5wX2dlbmVyYWxfY2hpbGRfdXBkYXRlX3dhaXRfdGltZScpCisgICAgICAgICAgICAgICAgZmllbGQuY2xlYXIoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuY2hpbGRfdGltZW91dDoKKyAgICAgICAgICAgICAgICAgICAgZmllbGQuc2VuZF9rZXlzKHN0cihzZWxmLmNoaWxkX3RpbWVvdXQpKQorCisgICAgICAgICAgICAgICAgZmllbGQgPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdpbnBfZ2VuZXJhbF9zZWRfcG9sbGluZ19yYXRlJykKKyAgICAgICAgICAgICAgICBmaWVsZC5jbGVhcigpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZWRfcG9sbGluZ19pbnRlcnZhbDoKKyAgICAgICAgICAgICAgICAgICAgZmllbGQuc2VuZF9rZXlzKHN0cihzZWxmLnNlZF9wb2xsaW5nX2ludGVydmFsKSkKKworICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ3NhdmVHZW5lcmFsU2V0dGluZ3MnKQorICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGljaygpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhaWxlZCB0byBkbyBnZW5lcmFsIHNldHVwJykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgRmluaXNoIHRoaXMgcGFnZQorICAgICAgICBuZXh0X2J1dHRvbi5jbGljaygpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgIGRlZiBfY29ubmVjdF9kZXZpY2VzKHNlbGYpOgorICAgICAgICBjb25uZWN0X2FsbCA9IHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgnQ29ubmVjdCBBbGwnKQorICAgICAgICBjb25uZWN0X2FsbC5jbGljaygpCisKKyAgICBkZWYgX2FkZF9kZXZpY2Uoc2VsZiwgcG9ydCwgZGV2aWNlX3R5cGVfaWQpOgorICAgICAgICBicm93c2VyID0gc2VsZi5fYnJvd3NlcgorICAgICAgICB0ZXN0X2JlZCA9IGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCd0ZXN0LWJlZCcpCisgICAgICAgIGRldmljZSA9IGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKGRldmljZV90eXBlX2lkKQorICAgICAgICAjIGRyYWcKKyAgICAgICAgYWN0aW9uX2NoYWlucyA9IEFjdGlvbkNoYWlucyhicm93c2VyKQorICAgICAgICBhY3Rpb25fY2hhaW5zLmNsaWNrX2FuZF9ob2xkKGRldmljZSkKKyAgICAgICAgYWN0aW9uX2NoYWlucy5tb3ZlX3RvX2VsZW1lbnQodGVzdF9iZWQpLnBlcmZvcm0oKQorICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgIyBkcm9wCisgICAgICAgIGRyb3BfaHcgPSBicm93c2VyLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdkcm9wLWh3JykKKyAgICAgICAgYWN0aW9uX2NoYWlucyA9IEFjdGlvbkNoYWlucyhicm93c2VyKQorICAgICAgICBhY3Rpb25fY2hhaW5zLm1vdmVfdG9fZWxlbWVudChkcm9wX2h3KQorICAgICAgICBhY3Rpb25fY2hhaW5zLnJlbGVhc2UoZHJvcF9odykucGVyZm9ybSgpCisKKyAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgIHNlbGVjdGVkX2h3ID0gYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfY2xhc3NfbmFtZSgnc2VsZWN0ZWQtaHcnKQorICAgICAgICBmb3JtX2lucHV0cyA9IHNlbGVjdGVkX2h3LmZpbmRfZWxlbWVudHNfYnlfdGFnX25hbWUoJ2lucHV0JykKKyAgICAgICAgZm9ybV9wb3J0ID0gZm9ybV9pbnB1dHNbMF0KKyAgICAgICAgZm9ybV9wb3J0LmNsZWFyKCkKKyAgICAgICAgZm9ybV9wb3J0LnNlbmRfa2V5cyhwb3J0KQorCisgICAgZGVmIF90ZXN0X2JlZChzZWxmKToKKyAgICAgICAgIiIiU2V0IHVwIHRoZSB0ZXN0IGJlZC4KKworICAgICAgICBDb25uZWN0IG51bWJlciBvZiBnb2xkZW4gZGV2aWNlcyByZXF1aXJlZCBieSBlYWNoIGNhc2UuCisgICAgICAgICIiIgorICAgICAgICBicm93c2VyID0gc2VsZi5fYnJvd3NlcgorICAgICAgICB0ZXN0X2JlZCA9IGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCd0ZXN0LWJlZCcpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc2VsZWN0ZWRfaHdfc2V0ID0gdGVzdF9iZWQuZmluZF9lbGVtZW50c19ieV9jbGFzc19uYW1lKCdzZWxlY3RlZC1odycpCisgICAgICAgIHNlbGVjdGVkX2h3X251bSA9IGxlbihzZWxlY3RlZF9od19zZXQpCisKKyAgICAgICAgd2hpbGUgc2VsZWN0ZWRfaHdfbnVtOgorICAgICAgICAgICAgcmVtb3ZlX2J1dHRvbiA9IHNlbGVjdGVkX2h3X3NldFtzZWxlY3RlZF9od19udW0gLSAxXS5maW5kX2VsZW1lbnRfYnlfY2xhc3NfbmFtZSgKKyAgICAgICAgICAgICAgICAncmVtb3ZlU2VsZWN0ZWREZXZpY2UnKQorICAgICAgICAgICAgcmVtb3ZlX2J1dHRvbi5jbGljaygpCisgICAgICAgICAgICBzZWxlY3RlZF9od19udW0gPSBzZWxlY3RlZF9od19udW0gLSAxCisKKyAgICAgICAgZGV2aWNlcyA9IFtkZXZpY2UgZm9yIGRldmljZSBpbiBzZXR0aW5ncy5HT0xERU5fREVWSUNFUworICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmhpc3RvcnkuaXNfYmFkX2dvbGRlbl9kZXZpY2UoZGV2aWNlWzBdKSBhbmQgXAorICAgICAgICAgICAgICAgICAgIG5vdCAoc2V0dGluZ3MuRFVUX0RFVklDRSBhbmQgZGV2aWNlWzBdID09IHNldHRpbmdzLkRVVF9ERVZJQ0VbMF0pXQorCisgICAgICAgIGxvZ2dlci5pbmZvKCdBdmFpbGFibGUgZ29sZGVuIGRldmljZXM6ICVzJywganNvbi5kdW1wcyhkZXZpY2VzLCBpbmRlbnQ9MikpCisgICAgICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gc2VsZi5nb2xkZW5fZGV2aWNlc19yZXF1aXJlZAorCisgICAgICAgIGlmIHNlbGYuYXV0b19kdXQgYW5kIG5vdCBzZXR0aW5ncy5EVVRfREVWSUNFOgorICAgICAgICAgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgKz0gMQorCisgICAgICAgIGlmIGxlbihkZXZpY2VzKSA8IGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkOgorICAgICAgICAgICAgcmFpc2UgR29sZGVuRGV2aWNlTm90RW5vdWdoRXJyb3IoKQorCisgICAgICAgICMgYWRkIGdvbGRlbiBkZXZpY2VzCisgICAgICAgIHdoaWxlIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkOgorICAgICAgICAgICAgc2VsZi5fYWRkX2RldmljZSgqZGV2aWNlcy5wb3AoKSkKKyAgICAgICAgICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgLSAxCisKKyAgICAgICAgIyBhZGQgRFVUCisgICAgICAgIGlmIHNldHRpbmdzLkRVVF9ERVZJQ0U6CisgICAgICAgICAgICBzZWxmLl9hZGRfZGV2aWNlKCpzZXR0aW5ncy5EVVRfREVWSUNFKQorCisgICAgICAgICMgZW5hYmxlIEFVVE8gRFVUCisgICAgICAgIGlmIHNlbGYuYXV0b19kdXQ6CisgICAgICAgICAgICBjaGVja2JveF9hdXRvX2R1dCA9IGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCdFbmFibGVBdXRvRHV0U2VsZWN0aW9uJykKKyAgICAgICAgICAgIGlmIG5vdCBjaGVja2JveF9hdXRvX2R1dC5pc19zZWxlY3RlZCgpOgorICAgICAgICAgICAgICAgIGNoZWNrYm94X2F1dG9fZHV0LmNsaWNrKCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgICAgIGlmIHNldHRpbmdzLkRVVF9ERVZJQ0U6CisgICAgICAgICAgICAgICAgcmFkaW9fYXV0b19kdXQgPSBicm93c2VyLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdBdXRvRFVUX1JhZEJ0bnMnKQorICAgICAgICAgICAgICAgIGlmIG5vdCByYWRpb19hdXRvX2R1dC5pc19zZWxlY3RlZCgpOgorICAgICAgICAgICAgICAgICAgICByYWRpb19hdXRvX2R1dC5jbGljaygpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0X2RldmljZXMoKQorICAgICAgICAgICAgICAgIGJ1dHRvbl9uZXh0ID0gYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ25leHRCdG4nKQorICAgICAgICAgICAgICAgIGlmIG5vdCB3YWl0X3VudGlsKGxhbWJkYTogJ2Rpc2FibGVkJyBub3QgaW4gYnV0dG9uX25leHQuZ2V0X2F0dHJpYnV0ZSgnY2xhc3MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcz0oMzAgKyA0ICogc2VsZi5nb2xkZW5fZGV2aWNlc19yZXF1aXJlZCkpOgorICAgICAgICAgICAgICAgICAgICBiYWRfb25lcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkX2h3X3NldCA9IHRlc3RfYmVkLmZpbmRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSgnc2VsZWN0ZWQtaHcnKQorICAgICAgICAgICAgICAgICAgICBmb3Igc2VsZWN0ZWRfaHcgaW4gc2VsZWN0ZWRfaHdfc2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pbnB1dHMgPSBzZWxlY3RlZF9ody5maW5kX2VsZW1lbnRzX2J5X3RhZ19uYW1lKCdpbnB1dCcpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX3BvcnQgPSBmb3JtX2lucHV0c1swXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybV9wb3J0LmlzX2VuYWJsZWQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRfb25lcy5hcHBlbmQoc2VsZWN0ZWRfaHcpCisKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNlbGVjdGVkX2h3IGluIGJhZF9vbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pbnB1dHMgPSBzZWxlY3RlZF9ody5maW5kX2VsZW1lbnRzX2J5X3RhZ19uYW1lKCdpbnB1dCcpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX3BvcnQgPSBmb3JtX2lucHV0c1swXQorICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IGZvcm1fcG9ydC5nZXRfYXR0cmlidXRlKCd2YWx1ZScpLmVuY29kZSgndXRmOCcpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXR0aW5ncy5EVVRfREVWSUNFIGFuZCBwb3J0ID09IHNldHRpbmdzLkRVVF9ERVZJQ0VbMF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2V0dGluZ3MuUERVX0NPTlRST0xMRVJfVFlQRSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbm5lY3Rpb24gZXJyb3IgY2Fubm90IHJlY292ZXIgd2l0aG91dCBwb3dlciBjeWNsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhdGFsRXJyb3IoJ0ZhaWxlZCB0byBjb25uZWN0IHRvIERVVCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbEVycm9yKCdGYWlsZWQgdG8gY29ubmVjdCB0byBEVVQnKQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXR0aW5ncy5QRFVfQ09OVFJPTExFUl9UWVBFIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwb3J0IGNhbm5vdCByZWNvdmVyIHdpdGhvdXQgcG93ZXIgY3ljbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGlzdG9yeS5tYXJrX2JhZF9nb2xkZW5fZGV2aWNlKHBvcnQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIHRoZSBiYWQgb25lCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZF9ody5maW5kX2VsZW1lbnRfYnlfY2xhc3NfbmFtZSgncmVtb3ZlU2VsZWN0ZWREZXZpY2UnKS5jbGljaygpCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGRldmljZXMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9kZXZpY2UoKmRldmljZXMucG9wKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXMgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgaWYgZGV2aWNlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ0dvbGRlbiBkZXZpY2VzIG5vdCBlbm91Z2gnKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgR29sZGVuRGV2aWNlTm90RW5vdWdoRXJyb3IoKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1RyeSBhZ2FpbiB3aXRoIG5ldyBnb2xkZW4gZGV2aWNlcycpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgc2VsZi5hdXRvX2R1dCBhbmQgbm90IHNldHRpbmdzLkRVVF9ERVZJQ0U6CisgICAgICAgICAgICAgICAgICAgIHJhZGlvX2F1dG9fZHV0ID0gYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfY2xhc3NfbmFtZSgnQXV0b0RVVF9SYWRCdG5zJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJhZGlvX2F1dG9fZHV0LmlzX3NlbGVjdGVkKCk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWRpb19hdXRvX2R1dC5jbGljaygpCisKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgICAgICAgICAgYnV0dG9uX25leHQuY2xpY2soKQorICAgICAgICAgICAgZXhjZXB0IEZhaWxFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ1VuZXhwZWN0ZWQgZXJyb3InKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIF9zZWxlY3RfY2FzZShzZWxmLCByb2xlLCBjYXNlKToKKyAgICAgICAgIiIiU2VsZWN0IHRoZSB0ZXN0IGNhc2UuCisgICAgICAgICIiIgorICAgICAgICAjIHNlbGVjdCB0aGUgY2FzZQorICAgICAgICBlbGVtID0gU2VsZWN0KHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCdzZWxlY3QtZHV0JykpCisgICAgICAgIGVsZW0uc2VsZWN0X2J5X3ZhbHVlKHN0cihyb2xlKSkKKyAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIGNoZWNrYm94ID0gTm9uZQorICAgICAgICB3YWl0X3VudGlsKGxhbWJkYTogc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRzX2J5X2Nzc19zZWxlY3RvcignLnRyZWUtbm9kZSAudHJlZS10aXRsZScpIGFuZCBUcnVlKQorICAgICAgICBlbGVtcyA9IHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50c19ieV9jc3Nfc2VsZWN0b3IoJy50cmVlLW5vZGUgLnRyZWUtdGl0bGUnKQorICAgICAgICBmaW5kZXIgPSByZS5jb21waWxlKHInLipcYicgKyBjYXNlICsgcidcYicpCisgICAgICAgIGZpbmRlcl9kb3R0ZWQgPSByZS5jb21waWxlKHInLipcYicgKyBjYXNlLnJlcGxhY2UoJyAnLCByJ1wuJykgKyByJ1xiJykKKyAgICAgICAgZm9yIGVsZW0gaW4gZWxlbXM6CisgICAgICAgICAgICBhY3Rpb25fY2hhaW5zID0gQWN0aW9uQ2hhaW5zKHNlbGYuX2Jyb3dzZXIpCisgICAgICAgICAgICBhY3Rpb25fY2hhaW5zLm1vdmVfdG9fZWxlbWVudChlbGVtKQorICAgICAgICAgICAgYWN0aW9uX2NoYWlucy5wZXJmb3JtKCkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhlbGVtLnRleHQpCisgICAgICAgICAgICBpZiBmaW5kZXIubWF0Y2goZWxlbS50ZXh0KSBvciBmaW5kZXJfZG90dGVkLm1hdGNoKGVsZW0udGV4dCk6CisgICAgICAgICAgICAgICAgcGFyZW50ID0gZWxlbS5maW5kX2VsZW1lbnRfYnlfeHBhdGgoJy4uJykKKyAgICAgICAgICAgICAgICBjaGVja2JveCA9IHBhcmVudC5maW5kX2VsZW1lbnRfYnlfY2xhc3NfbmFtZSgndHJlZS1jaGVja2JveCcpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBub3QgY2hlY2tib3g6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBmaW5kIHRoZSBjYXNlJykKKworICAgICAgICBzZWxmLl9icm93c2VyLmV4ZWN1dGVfc2NyaXB0KCIkKCcub3ZlcnZpZXcnKS5jc3MoJ2xlZnQnLCAnMCcpIikKKyAgICAgICAgY2hlY2tib3guY2xpY2soKQorICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgZWxlbSA9IHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCdydW5UZXN0JykKKyAgICAgICAgZWxlbS5jbGljaygpCisgICAgICAgIGlmIG5vdCB3YWl0X3VudGlsKGxhbWJkYTogc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ3N0b3BUZXN0JykgYW5kIFRydWUsIDEwKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIHN0YXJ0IHRlc3QgY2FzZScpCisKKyAgICBkZWYgX2NvbGxlY3RfcmVzdWx0KHNlbGYpOgorICAgICAgICAiIiJDb2xsZWN0IHRlc3QgcmVzdWx0LgorCisgICAgICAgIEdlbmVyYXRlIFBERiwgZXhjZWwgYW5kIHBjYXAgZmlsZQorICAgICAgICAiIiIKKyAgICAgICAgIyBnZW5lcmF0ZSBwZGYKKyAgICAgICAgc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfY2xhc3NfbmFtZSgnc2F2ZS1wZGYnKS5jbGljaygpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGlhbG9nID0gc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ1Rlc3RpbmZvJykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbGVkIHRvIGdldCB0ZXN0IGluZm8gZGlhbG9nLicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkaWFsb2cuZ2V0X2F0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSAhPSAnZmFsc2UnOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVGVzdCBpbmZvcm1hdGlvbiBkaWFsb2cgbm90IHJlYWR5JykKKworICAgICAgICAgICAgdmVyc2lvbiA9IHNlbGYuYXV0b19kdXQgYW5kIHNldHRpbmdzLkRVVF9WRVJTSU9OIG9yIHNlbGYuZHV0LnZlcnNpb24KKyAgICAgICAgICAgIGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2lucF9kdXRfbWFudWZhY3R1cmVyJykuc2VuZF9rZXlzKHNldHRpbmdzLkRVVF9NQU5VRkFDVFVSRVIpCisgICAgICAgICAgICBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdpbnBfZHV0X2Zpcm13YXJlX3ZlcnNpb24nKS5zZW5kX2tleXModmVyc2lvbikKKyAgICAgICAgICAgIGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2lucF90ZXN0ZXJfbmFtZScpLnNlbmRfa2V5cyhzZXR0aW5ncy5URVNURVJfTkFNRSkKKyAgICAgICAgICAgIGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2lucF9yZW1hcmtzJykuc2VuZF9rZXlzKHNldHRpbmdzLlRFU1RFUl9SRU1BUktTKQorICAgICAgICAgICAgZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnZ2VuZXJhdGVQZGYnKS5jbGljaygpCisKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBtYWluX3dpbmRvdyA9IHNlbGYuX2Jyb3dzZXIuY3VycmVudF93aW5kb3dfaGFuZGxlCisKKyAgICAgICAgIyBnZW5lcmF0ZSBleGNlbAorICAgICAgICBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdzYXZlLWV4Y2VsJykuY2xpY2soKQorICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIGZvciB3aW5kb3dfaGFuZGxlIGluIHNlbGYuX2Jyb3dzZXIud2luZG93X2hhbmRsZXM6CisgICAgICAgICAgICBpZiB3aW5kb3dfaGFuZGxlICE9IG1haW5fd2luZG93OgorICAgICAgICAgICAgICAgIHNlbGYuX2Jyb3dzZXIuc3dpdGNoX3RvLndpbmRvdyh3aW5kb3dfaGFuZGxlKQorICAgICAgICAgICAgICAgIHNlbGYuX2Jyb3dzZXIuY2xvc2UoKQorICAgICAgICBzZWxmLl9icm93c2VyLnN3aXRjaF90by53aW5kb3cobWFpbl93aW5kb3cpCisKKyAgICAgICAgIyBzYXZlIHBjYXAKKyAgICAgICAgc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfY2xhc3NfbmFtZSgnc2F2ZS13aXJlc2hhcmsnKS5jbGljaygpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgZm9yIHdpbmRvd19oYW5kbGUgaW4gc2VsZi5fYnJvd3Nlci53aW5kb3dfaGFuZGxlczoKKyAgICAgICAgICAgIGlmIHdpbmRvd19oYW5kbGUgIT0gbWFpbl93aW5kb3c6CisgICAgICAgICAgICAgICAgc2VsZi5fYnJvd3Nlci5zd2l0Y2hfdG8ud2luZG93KHdpbmRvd19oYW5kbGUpCisgICAgICAgICAgICAgICAgc2VsZi5fYnJvd3Nlci5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Jyb3dzZXIuc3dpdGNoX3RvLndpbmRvdyhtYWluX3dpbmRvdykKKworICAgICAgICBvcy5zeXN0ZW0oJ2NvcHkgIiUlSE9NRVBBVEglJVxcRG93bmxvYWRzXFxOZXdQZGZfKi5wZGYiICVzXFwnCisgICAgICAgICAgICAgICAgICAlIHNlbGYucmVzdWx0X2RpcikKKyAgICAgICAgb3Muc3lzdGVtKCdjb3B5ICIlJUhPTUVQQVRIJSVcXERvd25sb2Fkc1xcRXhjZWxSZXBvcnRfKi54bHN4IiAlc1xcJworICAgICAgICAgICAgICAgICAgJSBzZWxmLnJlc3VsdF9kaXIpCisgICAgICAgIG9zLnN5c3RlbSgnY29weSAiJXNcXENhcHR1cmVzXFwqLnBjYXBuZyIgJXNcXCcKKyAgICAgICAgICAgICAgICAgICUgKHNldHRpbmdzLkhBUk5FU1NfSE9NRSwgc2VsZi5yZXN1bHRfZGlyKSkKKyAgICAgICAgb3Muc3lzdGVtKCdjb3B5ICIlc1xcVGhyZWFkX0hhcm5lc3NcXHRlbXBcXCouKiIgIiVzIicKKyAgICAgICAgICAgICAgICAgICUgKHNldHRpbmdzLkhBUk5FU1NfSE9NRSwgc2VsZi5yZXN1bHRfZGlyKSkKKworICAgIGRlZiBfd2FpdF9kaWFsb2coc2VsZik6CisgICAgICAgICIiIldhaXQgZm9yIGRpYWxvZ3MgYW5kIGhhbmRsZSB0aGVtIHVudGlsIGRvbmUuCisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuZGVidWcoJ3dhaXRpbmcgZm9yIGRpYWxvZycpCisgICAgICAgIGRvbmUgPSBGYWxzZQorICAgICAgICBlcnJvciA9IEZhbHNlCisKKyAgICAgICAgd2hpbGUgbm90IGRvbmUgYW5kIHNlbGYudGltZW91dDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkaWFsb2cgPSBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudF9ieV9pZCgnUmVtb3RlQ29uZmlybScpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbGVkIHRvIGdldCBkaWFsb2cuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgZGlhbG9nIGFuZCBkaWFsb2cuZ2V0X2F0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSA9PSAnZmFsc2UnOgorICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfY2xhc3NfbmFtZSgnbW9kYWwtdGl0bGUnKS50ZXh0CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0hhbmRsaW5nIGRpYWxvZ1slc10nLCB0aXRsZSkKKworICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gc2VsZi5faGFuZGxlX2RpYWxvZyhkaWFsb2csIHRpdGxlKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdFcnJvciBoYW5kbGluZyBkaWFsb2c6ICVzJywgdGl0bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFRydWUKKworICAgICAgICAgICAgICAgICAgICBpZiBkb25lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsRXJyb3IoJ1VuZXhwZWN0ZWQgZGlhbG9nIG9jY3VycmVkJykKKworICAgICAgICAgICAgICAgICAgICBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdDb25maXJtT2snKS5jbGljaygpCisKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0b3BfYnV0dG9uID0gc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ3N0b3BUZXN0JykKKyAgICAgICAgICAgICAgICBpZiBkb25lOgorICAgICAgICAgICAgICAgICAgICBzdG9wX2J1dHRvbi5jbGljaygpCisgICAgICAgICAgICAgICAgICAgICMgd2FpdCBmb3Igc3RvcCBwcm9jZWR1cmUgZW5kCisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignVGVzdCBzdG9wcGVkJykKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgICAgICAgICAgZG9uZSA9IFRydWUKKworICAgICAgICAgICAgc2VsZi50aW1lb3V0IC09IDEKKworICAgICAgICAgICAgIyBjaGVjayBpZiBhbHJlYWR5IGVuZGVkIGNhcHR1cmUKKyAgICAgICAgICAgIGlmIHNlbGYudGltZW91dCAlIDEwID09IDA6CisgICAgICAgICAgICAgICAgbGluZXMgPSBzZWxmLl9oYy50YWlsKCkKKyAgICAgICAgICAgICAgICBpZiAnU1VDQ0VTUzogVGhlIHByb2Nlc3MgImR1bXBjYXAuZXhlIiB3aXRoIFBJRCAnIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnVHNoYXJrIHNob3VsZCBiZSBlbmRlZCBub3csIGxldHMgd2FpdCBhdCBtb3N0IDMwIHNlY29uZHMuJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHdhaXRfdW50aWwobGFtYmRhOiAndHNoYXJrLmV4ZScgbm90IGluIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCd0YXNrbGlzdCcpLCAzMCk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgndGFza2tpbGwgL3QgL2YgL2ltIHRzaGFyay5leGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8ocmVzKQorCisgICAgICAgICMgV2FpdCB1bnRpbCBjYXNlIHJlYWxseSBzdG9wcGVkCisgICAgICAgIHdhaXRfdW50aWwobGFtYmRhOiBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudF9ieV9pZCgncnVuVGVzdCcpIGFuZCBUcnVlLCAzMCkKKworICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEZhaWxFcnJvcignRmFpbCBmb3IgcHJldmlvdXMgZXhjZXB0aW9ucycpCisKKyAgICBkZWYgX2hhbmRsZV9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgICIiIkhhbmRsZSBhIGRpYWxvZy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgYm9vbCBUcnVlIGlmIG5vIG1vcmUgZGlhbG9ncyBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgRmFsc2UgaWYgbW9yZSBkaWFsb2dzIG5lZWRlZCwgYW5kCisgICAgICAgICAgICAgICAgIE5vbmUgaWYgbm90IGhhbmRsZWQKKyAgICAgICAgIiIiCisgICAgICAgIGRvbmUgPSBzZWxmLm9uX2RpYWxvZyhkaWFsb2csIHRpdGxlKQorICAgICAgICBpZiBpc2luc3RhbmNlKGRvbmUsIGJvb2wpOgorICAgICAgICAgICAgcmV0dXJuIGRvbmUKKworICAgICAgICBpZiB0aXRsZS5zdGFydHN3aXRoKCdTdGFydCBEVVQnKToKKyAgICAgICAgICAgIGJvZHkgPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdjbmZybU1zZycpLnRleHQKKyAgICAgICAgICAgIGlmICdTbGVlcHkgRW5kIERldmljZScgaW4gYm9keToKKyAgICAgICAgICAgICAgICBzZWxmLmR1dC5tb2RlID0gJ3MnCisgICAgICAgICAgICAgICAgc2VsZi5kdXQuY2hpbGRfdGltZW91dCA9IHNlbGYuY2hpbGRfdGltZW91dAorICAgICAgICAgICAgZWxpZiAnRW5kIERldmljZScgaW4gYm9keToKKyAgICAgICAgICAgICAgICBzZWxmLmR1dC5tb2RlID0gJ3JzbicKKyAgICAgICAgICAgICAgICBzZWxmLmR1dC5jaGlsZF90aW1lb3V0ID0gc2VsZi5jaGlsZF90aW1lb3V0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZHV0Lm1vZGUgPSAncnNkbicKKworICAgICAgICAgICAgaWYgJ2F0IGNoYW5uZWwnIGluIGJvZHk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGFubmVsID0gaW50KGJvZHkuc3BsaXQoJzonKVsxXSkKKworICAgICAgICAgICAgc2VsZi5kdXQuY2hhbm5lbCA9IHNlbGYuY2hhbm5lbAorICAgICAgICAgICAgc2VsZi5kdXQucGFuaWQgPSBzZXR0aW5ncy5USFJFQURfUEFOSUQKKyAgICAgICAgICAgIHNlbGYuZHV0Lm5ldHdvcmtuYW1lID0gc2V0dGluZ3MuVEhSRUFEX05FVFdPUktOQU1FCisgICAgICAgICAgICBzZWxmLmR1dC5leHRwYW5pZCA9IHNldHRpbmdzLlRIUkVBRF9FWFRQQU5JRAorICAgICAgICAgICAgc2VsZi5kdXQuc3RhcnQoKQorCisgICAgICAgIGVsaWYgKHRpdGxlLnN0YXJ0c3dpdGgoJ01BQyBBZGRyZXNzIFJlcXVpcmVkJykKKyAgICAgICAgICAgICAgb3IgdGl0bGUuc3RhcnRzd2l0aCgnRFVUIFJhbmRvbSBFeHRlbmRlZCBNQUMgQWRkcmVzcyBSZXF1aXJlZCcpKToKKyAgICAgICAgICAgIG1hYyA9IHNlbGYuZHV0Lm1hYworICAgICAgICAgICAgaW5wID0gZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnY25mcm1JbnBUZXh0JykKKyAgICAgICAgICAgIGlucC5jbGVhcigpCisgICAgICAgICAgICBpbnAuc2VuZF9rZXlzKCcweCVzJyAlIG1hYykKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ0xMNjQgQWRkcmVzcycpOgorICAgICAgICAgICAgbGw2NCA9IE5vbmUKKyAgICAgICAgICAgIGZvciBhZGRyIGluIHNlbGYuZHV0LmFkZHJzOgorICAgICAgICAgICAgICAgIGFkZHIgPSBhZGRyLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBpZiBhZGRyLnN0YXJ0c3dpdGgoJ2ZlODAnKSBhbmQgbm90IHJlLm1hdGNoKCcuK2ZmOmZlMDA6WzAtOWEtZl17MCw0fSQnLCBhZGRyKToKKyAgICAgICAgICAgICAgICAgICAgbGw2NCA9IGFkZHIKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbm90IGxsNjQ6CisgICAgICAgICAgICAgICAgcmFpc2UgRmFpbEVycm9yKCdObyBsaW5rIGxvY2FsIGFkZHJlc3MgZm91bmQnKQorCisgICAgICAgICAgICBsb2dnZXIuaW5mbygnTGluayBsb2NhbCBhZGRyZXNzIGlzICVzJywgbGw2NCkKKyAgICAgICAgICAgIGlucCA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2NuZnJtSW5wVGV4dCcpCisgICAgICAgICAgICBpbnAuY2xlYXIoKQorICAgICAgICAgICAgaW5wLnNlbmRfa2V5cyhsbDY0KQorCisgICAgICAgIGVsaWYgdGl0bGUuc3RhcnRzd2l0aCgnRW50ZXIgQ2hhbm5lbCcpOgorICAgICAgICAgICAgc2VsZi5kdXQuY2hhbm5lbCA9IHNlbGYuY2hhbm5lbAorICAgICAgICAgICAgaW5wID0gZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnY25mcm1JbnBUZXh0JykKKyAgICAgICAgICAgIGlucC5jbGVhcigpCisgICAgICAgICAgICBpbnAuc2VuZF9rZXlzKHN0cihzZWxmLmR1dC5jaGFubmVsKSkKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1VzZXIgQWN0aW9uIE5lZWRlZCcpOgorICAgICAgICAgICAgYm9keSA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2NuZnJtTXNnJykudGV4dAorICAgICAgICAgICAgaWYgYm9keS5zdGFydHN3aXRoKCdQb3dlciBEb3duIHRoZSBEVVQnKToKKyAgICAgICAgICAgICAgICBzZWxmLmR1dC5zdG9wKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZWxpZiB0aXRsZS5zdGFydHN3aXRoKCdTaG9ydCBBZGRyZXNzJyk6CisgICAgICAgICAgICBzaG9ydF9hZGRyID0gJzB4JXMnICUgc2VsZi5kdXQuc2hvcnRfYWRkcgorICAgICAgICAgICAgaW5wID0gZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnY25mcm1JbnBUZXh0JykKKyAgICAgICAgICAgIGlucC5jbGVhcigpCisgICAgICAgICAgICBpbnAuc2VuZF9rZXlzKHNob3J0X2FkZHIpCisKKyAgICAgICAgZWxpZiB0aXRsZS5zdGFydHN3aXRoKCdNTDY0IEFkZHJlc3MnKToKKyAgICAgICAgICAgIG1sNjQgPSBOb25lCisgICAgICAgICAgICBmb3IgYWRkciBpbiBzZWxmLmR1dC5hZGRyczoKKyAgICAgICAgICAgICAgICBpZiBhZGRyLnN0YXJ0c3dpdGgoJ2ZkJykgYW5kIG5vdCByZS5tYXRjaCgnLitmZjpmZTAwOlswLTlhLWZdezAsNH0kJywgYWRkcik6CisgICAgICAgICAgICAgICAgICAgIG1sNjQgPSBhZGRyCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG5vdCBtbDY0OgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTm8gbWVzaCBsb2NhbCBhZGRyZXNzIGZvdW5kJykKKworICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ01lc2ggbG9jYWwgYWRkcmVzcyBpcyAlcycsIG1sNjQpCisgICAgICAgICAgICBpbnAgPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdjbmZybUlucFRleHQnKQorICAgICAgICAgICAgaW5wLmNsZWFyKCkKKyAgICAgICAgICAgIGlucC5zZW5kX2tleXMobWw2NCkKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1NoaWVsZCBEZXZpY2VzJykgb3IgdGl0bGUuc3RhcnRzd2l0aCgnU2hlaWxkIERVVCcpOgorICAgICAgICAgICAgaWYgc2VsZi5kdXQgYW5kIHNldHRpbmdzLlNISUVMRF9TSU1VTEFUSU9OOgorICAgICAgICAgICAgICAgIHNlbGYuZHV0LmNoYW5uZWwgPSAoc2VsZi5jaGFubmVsID09IFRIUkVBRF9DSEFOTkVMX01BWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIFRIUkVBRF9DSEFOTkVMX01JTikgb3IgKHNlbGYuY2hhbm5lbCArIDEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhd19pbnB1dCgnU2hpZWxkIERVVCBhbmQgcHJlc3MgZW50ZXIgdG8gY29udGludWUuLicpCisKKyAgICAgICAgZWxpZiB0aXRsZS5zdGFydHN3aXRoKCdVbnNoaWVsZCBEZXZpY2VzJykgb3IgdGl0bGUuc3RhcnRzd2l0aCgnQnJpbmcgRFVUIEJhY2sgdG8gbmV0d29yaycpOgorICAgICAgICAgICAgaWYgc2VsZi5kdXQgYW5kIHNldHRpbmdzLlNISUVMRF9TSU1VTEFUSU9OOgorICAgICAgICAgICAgICAgIHNlbGYuZHV0LmNoYW5uZWwgPSBzZWxmLmNoYW5uZWwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmF3X2lucHV0KCdCcmluZyBEVVQgYW5kIHByZXNzIGVudGVyIHRvIGNvbnRpbnVlLi4nKQorCisgICAgICAgIGVsaWYgdGl0bGUuc3RhcnRzd2l0aCgnQ29uZmlndXJlIFByZWZpeCBvbiBEVVQnKToKKyAgICAgICAgICAgIGJvZHkgPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdjbmZybU1zZycpLnRleHQKKyAgICAgICAgICAgIGJvZHkgPSBib2R5LnNwbGl0KCc6ICcpWzFdCisgICAgICAgICAgICBwYXJhbXMgPSByZWR1Y2UobGFtYmRhIHBhcmFtcywgcGFyYW06IHBhcmFtcy51cGRhdGUoKChwYXJhbVswXS5zdHJpcCgnICcpLCBwYXJhbVsxXSksKSkgb3IgcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdC5zcGxpdCgnPScpIGZvciBpdCBpbiBib2R5LnNwbGl0KCcsICcpXSwge30pCisgICAgICAgICAgICBwcmVmaXggPSBwYXJhbXNbJ1BfUHJlZml4J10uc3RyaXAoJ1wwXHJcblx0ICcpCisgICAgICAgICAgICBmbGFncyA9IFtdCisgICAgICAgICAgICBpZiBwYXJhbXMuZ2V0KCdQX3NsYWFjX3ByZWZlcnJlZCcsIDApID09ICcxJzoKKyAgICAgICAgICAgICAgICBmbGFncy5hcHBlbmQoJ3AnKQorICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKCdhbycpCisgICAgICAgICAgICBpZiBwYXJhbXMuZ2V0KCdQX3N0YWJsZScsIDApID09ICcxJzoKKyAgICAgICAgICAgICAgICBmbGFncy5hcHBlbmQoJ3MnKQorICAgICAgICAgICAgaWYgcGFyYW1zLmdldCgnUF9kZWZhdWx0JywgMCkgPT0gJzEnOgorICAgICAgICAgICAgICAgIGZsYWdzLmFwcGVuZCgncicpCisgICAgICAgICAgICBwcmYgPSAnaGlnaCcKKyAgICAgICAgICAgIHNlbGYuZHV0LmFkZF9wcmVmaXgocHJlZml4LCAnJy5qb2luKGZsYWdzKSwgcHJmKQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICIiIlRoaXMgbWV0aG9kIHdpbGwgb25seSBzdGFydCB0ZXN0IGNhc2UgaW4gY2hpbGQgY2xhc3MiIiIKKyAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgSGFybmVzc0Nhc2U6CisgICAgICAgICAgICBsb2dnZXIud2FybmluZygnU2tpcCB0aGlzIGhhcm5lc3MgaXRzZWxmJykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGxvZ2dlci5pbmZvKCdUZXN0aW5nIHJvbGVbJWRdIGNhc2VbJXNdJywgc2VsZi5yb2xlLCBzZWxmLmNhc2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2luaXRfYnJvd3NlcigpCisgICAgICAgICAgICAjIHByZXBhcmUgdGVzdCBjYXNlCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHVybCA9IHNlbGYuX2Jyb3dzZXIuY3VycmVudF91cmwKKyAgICAgICAgICAgICAgICBpZiB1cmwuZW5kc3dpdGgoJ1NldHVwUGFnZS5odG1sJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NldHVwX3BhZ2UoKQorICAgICAgICAgICAgICAgIGVsaWYgdXJsLmVuZHN3aXRoKCdUZXN0QmVkLmh0bWwnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9iZWQoKQorICAgICAgICAgICAgICAgIGVsaWYgdXJsLmVuZHN3aXRoKCdUZXN0RXhlY3V0aW9uLmh0bWwnKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1JlYWR5IHRvIGhhbmRsZSBkaWFsb2dzJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIpCisgICAgICAgIGV4Y2VwdCBVbmV4cGVjdGVkQWxlcnRQcmVzZW50RXhjZXB0aW9uOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbGVkIHRvIGNvbm5lY3QgdG8gaGFybmVzcyBzZXJ2ZXInKQorICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgpCisgICAgICAgIGV4Y2VwdCBGYXRhbEVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignVGVzdCBzdG9wcGVkIGZvciBmYXRhbCBlcnJvcicpCisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCkKKyAgICAgICAgZXhjZXB0IEZhaWxFcnJvcjoKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ1Rlc3QgZmFpbGVkJykKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ1NvbWV0aGluZyB3cm9uZycpCisKKyAgICAgICAgc2VsZi5fc2VsZWN0X2Nhc2Uoc2VsZi5yb2xlLCBzZWxmLmNhc2UpCisKKyAgICAgICAgc2VsZi5fd2FpdF9kaWFsb2coKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2NvbGxlY3RfcmVzdWx0KCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbGVkIHRvIGNvbGxlY3QgcmVzdWx0cycpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgICMgZ2V0IGNhc2UgcmVzdWx0CisgICAgICAgIHN0YXR1cyA9IHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50X2J5X2NsYXNzX25hbWUoJ3RpdGxlLXRlc3QnKS50ZXh0CisgICAgICAgIGxvZ2dlci5pbmZvKHN0YXR1cykKKyAgICAgICAgc3VjY2VzcyA9ICdQYXNzJyBpbiBzdGF0dXMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvaGFybmVzc19jb250cm9sbGVyLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL2hhcm5lc3NfY29udHJvbGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzBmNjlkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL2hhcm5lc3NfY29udHJvbGxlci5weQpAQCAtMCwwICsxLDEzNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCBDb25maWdQYXJzZXIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzIGltcG9ydCBzZXR0aW5ncworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworSEFSTkVTU19TVk5fVkVSU0lPTl9SNDQgPSAxNDcxCisiIiJpbnQ6IHRoaXMgaXMgdGhlIGZpcnN0IHB1Ymxpc2hlZCByZWxlYXNlIHRoYXQgbWluaXdlYiB3YXMgcmVtb3ZlZCBmcm9tIEhhcm5lc3MiIiIKKworZGVmIF90cnlfa2lsbChwcm9jKToKKyAgICBsb2dnZXIuaW5mbygnVHJ5IGtpbGwgcHJvY2VzcycpCisgICAgdGltZXMgPSAxCisKKyAgICB3aGlsZSBwcm9jLnBvbGwoKSBpcyBOb25lOgorICAgICAgICBwcm9jLmtpbGwoKQorCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBpZiBwcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdQcm9jZXNzIGhhcyBiZWVuIGtpbGxlZCcpCisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGxvZ2dlci5pbmZvKCdUcmlhbCAlZCBmYWlsZWQnLCB0aW1lcykKKyAgICAgICAgdGltZXMgKz0gMQorCisgICAgICAgIGlmIHRpbWVzID4gMzoKKyAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoKQorCitjbGFzcyBIYXJuZXNzQ29udHJvbGxlcihvYmplY3QpOgorICAgICIiIkhhcm5lc3Mgc2VydmljZSBjb250cm9sCisKKyAgICBUaGlzIGNvbnRyb2xzIGhhcm5lc3Mgc2VydmljZSwgaW5jbHVkaW5nIHRoZSBoYXJuZXNzIGJhY2stZW5kIGFuZCBmcm9udC1lbmQuCisgICAgIiIiCisgICAgaGFybmVzcyA9IE5vbmUKKyAgICAiIiJoYXJuZXNzIGJhY2stZW5kIiIiCisKKyAgICBtaW5pd2ViID0gTm9uZQorICAgICIiImhhcm5lc3MgZnJvbnQtZW5kIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVzdWx0X2Rpcj1Ob25lKToKKyAgICAgICAgc2VsZi5yZXN1bHRfZGlyID0gcmVzdWx0X2RpcgorICAgICAgICBzZWxmLmhhcm5lc3NfZmlsZSA9ICcnCisKKyAgICAgICAgaGFybmVzc19pbmZvID0gQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgIGhhcm5lc3NfaW5mby5yZWFkKCclc1xcaW5mby5pbmknICUgc2V0dGluZ3MuSEFSTkVTU19IT01FKQorICAgICAgICBzZWxmLnZlcnNpb24gPSBoYXJuZXNzX2luZm8uZ2V0aW50KCdUaHJlYWRfSGFybmVzc19JbmZvJywgJ1NWTicpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGxvZ2dlci5pbmZvKCdTdGFydGluZyBoYXJuZXNzIHNlcnZpY2UnKQorICAgICAgICBpZiBzZWxmLmhhcm5lc3M6CisgICAgICAgICAgICBsb2dnZXIud2FybmluZygnSGFybmVzcyBhbHJlYWR5IHN0YXJ0ZWQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW52ID0gZGljdChvcy5lbnZpcm9uLCBQWVRIT05QQVRIPSclc1xcVGhyZWFkX0hhcm5lc3M7JXNcXFRoaXJkUGFydHlcXGhzZGstcHl0aG9uXFxzcmMnCisgICAgICAgICAgICAgICAgICAgICAgICUgKHNldHRpbmdzLkhBUk5FU1NfSE9NRSwgc2V0dGluZ3MuSEFSTkVTU19IT01FKSkKKworICAgICAgICAgICAgc2VsZi5oYXJuZXNzX2ZpbGUgPSAnJXNcXGhhcm5lc3MtJXMubG9nJyAlIChzZWxmLnJlc3VsdF9kaXIsIHRpbWUuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycpKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuaGFybmVzc19maWxlLCAndycpIGFzIGhhcm5lc3Nfb3V0OgorICAgICAgICAgICAgICAgIHNlbGYuaGFybmVzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW3NldHRpbmdzLkhBUk5FU1NfSE9NRSArICdcXFB5dGhvbjI3XFxweXRob24uZXhlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5IQVJORVNTX0hPTUUgKyAnXFxUaHJlYWRfSGFybmVzc1xcUnVuLnB5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9c2V0dGluZ3MuSEFSTkVTU19IT01FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PWhhcm5lc3Nfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPWhhcm5lc3Nfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMikKKworICAgICAgICBpZiBzZWxmLnZlcnNpb24gPj0gSEFSTkVTU19TVk5fVkVSU0lPTl9SNDQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLm1pbml3ZWI6CisgICAgICAgICAgICBsb2dnZXIud2FybmluZygnTWluaXdlYiBhbHJlYWR5IHN0YXJ0ZWQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2l0aCBvcGVuKCclc1xcbWluaXdlYi0lcy5sb2cnICUgKHNlbGYucmVzdWx0X2RpciwgdGltZS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykpLCAndycpIGFzIG1pbml3ZWJfb3V0OgorICAgICAgICAgICAgICAgIHNlbGYubWluaXdlYiA9IHN1YnByb2Nlc3MuUG9wZW4oW3NldHRpbmdzLkhBUk5FU1NfSE9NRSArICdcXE1pbmlXZWJcXG1pbml3ZWIuZXhlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9bWluaXdlYl9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9bWluaXdlYl9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9c2V0dGluZ3MuSEFSTkVTU19IT01FICsgJ1xcTWluaVdlYicpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1N0b3BwaW5nIGhhcm5lc3Mgc2VydmljZScpCisKKyAgICAgICAgaWYgc2VsZi5oYXJuZXNzOgorICAgICAgICAgICAgX3RyeV9raWxsKHNlbGYuaGFybmVzcykKKyAgICAgICAgICAgIHNlbGYuaGFybmVzcyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdIYXJuZXNzIG5vdCBzdGFydGVkIHlldCcpCisKKyAgICAgICAgaWYgc2VsZi52ZXJzaW9uID49IEhBUk5FU1NfU1ZOX1ZFUlNJT05fUjQ0OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5taW5pd2ViOgorICAgICAgICAgICAgX3RyeV9raWxsKHNlbGYubWluaXdlYikKKyAgICAgICAgICAgIHNlbGYubWluaXdlYiA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdNaW5pd2ViIG5vdCBzdGFydGVkIHlldCcpCisKKyAgICBkZWYgdGFpbChzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuaGFybmVzc19maWxlKSBhcyBoYXJuZXNzX291dDoKKyAgICAgICAgICAgIGhhcm5lc3Nfb3V0LnNlZWsoLTEwMCwgMikKKyAgICAgICAgICAgIHJldHVybiAnJy5qb2luKGhhcm5lc3Nfb3V0LnJlYWRsaW5lcygpKQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuc3RvcCgpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvaGVscGVycy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9oZWxwZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NDhjYjMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvaGVscGVycy5weQpAQCAtMCwwICsxLDYxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IGpzb24KK2ltcG9ydCBsb2dnaW5nCisKKworY2xhc3MgSGlzdG9yeUhlbHBlcihvYmplY3QpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPScuL2hpc3RvcnkuanNvbicpOgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kYXRhID0ganNvbi5sb2FkKG9wZW4oZmlsZW5hbWUsICdyJykpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5leGNlcHRpb24oJ2ZpbGUgbWF5IG5vdCBleGlzdHMnKQorICAgICAgICAgICAgc2VsZi5kYXRhID0geworICAgICAgICAgICAgICAgICdnb2xkZW5fZGV2aWNlX2JsYWNrX2xpc3QnOiBbXQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VsZi5zYXZlKCkKKworICAgIGRlZiBzYXZlKHNlbGYpOgorICAgICAgICBqc29uLmR1bXAoc2VsZi5kYXRhLCBvcGVuKHNlbGYuZmlsZW5hbWUsICd3JyksIGluZGVudD0yKQorCisgICAgZGVmIG1hcmtfYmFkX2dvbGRlbl9kZXZpY2Uoc2VsZiwgcG9ydCk6CisgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoJ21hcmsgc2VyaWFsIHBvcnRbJXNdIGFzIGJhZCcsIHBvcnQpCisgICAgICAgIHNlbGYuZGF0YVsnZ29sZGVuX2RldmljZV9ibGFja19saXN0J10uYXBwZW5kKHBvcnQpCisgICAgICAgIHNlbGYuc2F2ZSgpCisKKyAgICBkZWYgaXNfYmFkX2dvbGRlbl9kZXZpY2Uoc2VsZiwgcG9ydCk6CisgICAgICAgIHJldHVybiBwb3J0IGluIHNlbGYuZGF0YVsnZ29sZGVuX2RldmljZV9ibGFja19saXN0J10KKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4ganNvbi5kdW1wcyhzZWxmLmRhdGEsIGluZGVudD0yKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL29wZW5fdGhyZWFkX2NvbnRyb2xsZXIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3Mvb3Blbl90aHJlYWRfY29udHJvbGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODY0NzllCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL29wZW5fdGhyZWFkX2NvbnRyb2xsZXIucHkKQEAgLTAsMCArMSwzODUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQorCitpbXBvcnQgc2VyaWFsCisKK2Zyb20gLiBpbXBvcnQgc2V0dGluZ3MKKworX19hbGxfXyA9IFsnT3BlblRocmVhZENvbnRyb2xsZXInXQorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKK2xpbmVzZXB4ID0gcmUuY29tcGlsZShyJ1xyXG58XG4nKQorCitjbGFzcyBPcGVuVGhyZWFkQ29udHJvbGxlcih0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAiIiJUaGlzIGlzIGFuIHNpbXBsZSB3cmFwcGVyIHRvIGNvbW11bmljYXRlIHdpdGggb3BlbnRocmVhZCIiIgorICAgIF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgIHZpZXdpbmcgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGxvZz1GYWxzZSk6CisgICAgICAgICIiIkluaXRpYWxpemUgdGhlIGNvbnRyb2xsZXIKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcG9ydCAoc3RyKTogc2VyaWFsIHBvcnQncyBwYXRoIG9yIG5hbWUod2luZG93cykKKyAgICAgICAgIiIiCisgICAgICAgIHN1cGVyKE9wZW5UaHJlYWRDb250cm9sbGVyLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5oYW5kbGUgPSBOb25lCisgICAgICAgIHNlbGYubGluZXMgPSBbXQorICAgICAgICBzZWxmLl9sb2cgPSBsb2cKKyAgICAgICAgc2VsZi5faXNfbmV0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5faW5pdCgpCisKKyAgICBkZWYgX2luaXQoc2VsZik6CisgICAgICAgIHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICBpZiBub3Qgc2VsZi5fbG9nOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5zdGFydCgpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYudmlld2luZyA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmpvaW4oKQorCisgICAgICAgIHNlbGYuX2Nsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIF9jbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5oYW5kbGU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmhhbmRsZSA9IE5vbmUKKworICAgIGRlZiBfY29ubmVjdChzZWxmKToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdNeSBwb3J0IGlzICVzJywgc2VsZi5wb3J0KQorICAgICAgICBpZiBzZWxmLnBvcnQuc3RhcnRzd2l0aCgnTkVUJyk6CisgICAgICAgICAgICBwb3J0bnVtID0gc2V0dGluZ3MuU0VSMk5FVF9QT1JUQkFTRSArIGludChzZWxmLnBvcnQuc3BsaXQoJ05FVCcpWzFdKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdNeSBwb3J0IG51bSBpcyAlZCcsIHBvcnRudW0pCisgICAgICAgICAgICBhZGRyZXNzID0gKHNldHRpbmdzLlNFUjJORVRfSE9TVE5BTUUsIHBvcnRudW0pCisgICAgICAgICAgICBzZWxmLmhhbmRsZSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5oYW5kbGUuc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgICAgIHNlbGYuX2lzX25ldCA9IFRydWUKKyAgICAgICAgZWxpZiAnOicgaW4gc2VsZi5wb3J0OgorICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYucG9ydC5zcGxpdCgnOicpCisgICAgICAgICAgICBzZWxmLmhhbmRsZSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCkpCisgICAgICAgICAgICBzZWxmLmhhbmRsZS5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgc2VsZi5faXNfbmV0ID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGUgPSBzZXJpYWwuU2VyaWFsKHNlbGYucG9ydCwgMTE1MjAwLCB0aW1lb3V0PTAsIHhvbnhvZmY9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX2lzX25ldCA9IEZhbHNlCisKKyAgICBkZWYgX3JlYWQoc2VsZiwgc2l6ZT01MTIpOgorICAgICAgICBpZiBzZWxmLl9pc19uZXQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGUucmVjdihzaXplKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlLnJlYWQoc2l6ZSkKKworICAgIGRlZiBfd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIHNlbGYuX2lzX25ldDoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlLnNlbmRhbGwoZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlLndyaXRlKGRhdGEpCisKKyAgICBkZWYgX2V4cGVjdChzZWxmLCBleHBlY3RlZCwgdGltZXM9NTApOgorICAgICAgICAiIiJGaW5kIHRoZSBgZXhwZWN0ZWRgIGxpbmUgd2l0aGluIGB0aW1lc2AgdHJpYWxzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBleHBlY3RlZCAgICBzdHI6IHRoZSBleHBlY3RlZCBzdHJpbmcKKyAgICAgICAgICAgIHRpbWVzICAgICAgIGludDogbnVtYmVyIG9mIHRyaWFscworICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdbJXNdIEV4cGVjdGluZyBbJXNdJywgc2VsZi5wb3J0LCBleHBlY3RlZCkKKyAgICAgICAgcmV0cnlfdGltZXMgPSAxMAorICAgICAgICB3aGlsZSB0aW1lczoKKyAgICAgICAgICAgIGlmIG5vdCByZXRyeV90aW1lczoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBsaW5lID0gc2VsZi5fcmVhZGxpbmUoKQorCisgICAgICAgICAgICBpZiBsaW5lID09IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICByZXRyeV90aW1lcyAtPSAxCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisKKyAgICAgICAgICAgIHRpbWVzIC09IDEKKworICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2ZhaWxlZCB0byBmaW5kIGV4cGVjdGVkIHN0cmluZ1slc10nICUgZXhwZWN0ZWQpCisKKyAgICBkZWYgX3JlYWRsaW5lKHNlbGYpOgorICAgICAgICAiIiJSZWFkIGV4YWN0bHkgb25lIGxpbmUgZnJvbSB0aGUgZGV2aWNlLCBub25ibG9ja2luZy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgTm9uZSBvbiBubyBkYXRhCisgICAgICAgICIiIgorICAgICAgICBpZiBsZW4oc2VsZi5saW5lcykgPiAxOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubGluZXMucG9wKDApCisKKyAgICAgICAgdGFpbCA9ICcnCisgICAgICAgIGlmIGxlbihzZWxmLmxpbmVzKToKKyAgICAgICAgICAgIHRhaWwgPSBzZWxmLmxpbmVzLnBvcCgpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFpbCArPSBzZWxmLl9yZWFkKCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCdObyBuZXcgZGF0YScpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKworICAgICAgICBzZWxmLmxpbmVzICs9IGxpbmVzZXB4LnNwbGl0KHRhaWwpCisgICAgICAgIGlmIGxlbihzZWxmLmxpbmVzKSA+IDE6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5saW5lcy5wb3AoMCkKKworICAgIGRlZiBfc2VuZGxpbmUoc2VsZiwgbGluZSk6CisgICAgICAgICIiIlNlbmQgZXhhY3RseSBvbmUgbGluZSB0byB0aGUgZGV2aWNlCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGxpbmUgc3RyOiBkYXRhIHNlbmQgdG8gZGV2aWNlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmxpbmVzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcmVhZCgpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCdOb3RoaW5nIGNsZWFyZWQnKQorCisgICAgICAgIGxvZ2dlci5kZWJ1Zygnc2VuZGluZyBbJXNdJywgbGluZSkKKyAgICAgICAgc2VsZi5fd3JpdGUobGluZSArICdcclxuJykKKworICAgICAgICAjIHdhaXQgZm9yIHdyaXRlIHRvIGNvbXBsZXRlCisgICAgICAgIHRpbWUuc2xlZXAoMC41KQorCisgICAgZGVmIF9yZXEoc2VsZiwgcmVxKToKKyAgICAgICAgIiIiU2VuZCBjb21tYW5kIGFuZCB3YWl0IGZvciByZXNwb25zZS4KKworICAgICAgICBUaGUgY29tbWFuZCB3aWxsIGJlIHJlcGVhdGVkIDMgdGltZXMgYXQgbW9zdCBpbiBjYXNlIGRhdGEgbG9zcyBvZiBzZXJpYWwgcG9ydC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxIChzdHIpOiBDb21tYW5kIHRvIHNlbmQsIHBsZWFzZSBkbyBub3QgaW5jbHVkZSBuZXcgbGluZSBpbiB0aGUgZW5kLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBbc3RyXTogVGhlIG91dHB1dCBsaW5lcworICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdEVVQ+ICVzJywgcmVxKQorICAgICAgICBzZWxmLl9sb2cgYW5kIHNlbGYucGF1c2UoKQorICAgICAgICB0aW1lcyA9IDMKKyAgICAgICAgcmVzID0gTm9uZQorCisgICAgICAgIHdoaWxlIHRpbWVzOgorICAgICAgICAgICAgdGltZXMgPSB0aW1lcyAtIDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZW5kbGluZShyZXEpCisgICAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0KHJlcSkKKworICAgICAgICAgICAgICAgIGxpbmUgPSBOb25lCisgICAgICAgICAgICAgICAgcmVzID0gW10KKworICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnR290IGxpbmUgJXMnLCBsaW5lKQorCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gc2VuZCBjb21tYW5kJykKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbml0KCkKKworICAgICAgICBzZWxmLl9sb2cgYW5kIHNlbGYucmVzdW1lKCkKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIiIiVGhyZWFkaW5nIGNhbGxiYWNrIiIiCisKKyAgICAgICAgc2VsZi52aWV3aW5nID0gVHJ1ZQorICAgICAgICB3aGlsZSBzZWxmLnZpZXdpbmcgYW5kIHNlbGYuX2xvY2suYWNxdWlyZSgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9yZWFkbGluZSgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhsaW5lKQorICAgICAgICAgICAgc2VsZi5fbG9jay5yZWxlYXNlKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMCkKKworICAgIGRlZiBpc19zdGFydGVkKHNlbGYpOgorICAgICAgICAiIiJjaGVjayBpZiBvcGVudGhyZWFkIGlzIHN0YXJ0ZWQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgYm9vbDogc3RhcnRlZCBvciBub3QKKyAgICAgICAgIiIiCisgICAgICAgIHN0YXRlID0gc2VsZi5fcmVxKCdzdGF0ZScpWzBdCisgICAgICAgIHJldHVybiBzdGF0ZSAhPSAnZGlzYWJsZWQnCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgICIiIlN0YXJ0IG9wZW50aHJlYWQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3JlcSgnaWZjb25maWcgdXAnKQorICAgICAgICBzZWxmLl9yZXEoJ3RocmVhZCBzdGFydCcpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiU3RvcCBvcGVudGhyZWFkCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9yZXEoJ3RocmVhZCBzdG9wJykKKyAgICAgICAgc2VsZi5fcmVxKCdpZmNvbmZpZyBkb3duJykKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgIiIiUmVzZXQgb3BlbnRocmVhZCBkZXZpY2UsIG5vdCBlcXVpdmFsZW50IHRvIHN0b3AgYW5kIHN0YXJ0CisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuZGVidWcoJ0RVVD4gcmVzZXQnKQorICAgICAgICBzZWxmLl9sb2cgYW5kIHNlbGYucGF1c2UoKQorICAgICAgICBzZWxmLl9zZW5kbGluZSgncmVzZXQnKQorICAgICAgICBzZWxmLl9yZWFkKCkKKyAgICAgICAgc2VsZi5fbG9nIGFuZCBzZWxmLnJlc3VtZSgpCisKKworICAgIGRlZiByZXN1bWUoc2VsZik6CisgICAgICAgICIiIlN0YXJ0IGR1bXBpbmcgbG9ncyIiIgorICAgICAgICBzZWxmLl9sb2NrLnJlbGVhc2UoKQorCisgICAgZGVmIHBhdXNlKHNlbGYpOgorICAgICAgICAiIiJTdGFydCBkdW1waW5nIGxvZ3MiIiIKKyAgICAgICAgc2VsZi5fbG9jay5hY3F1aXJlKCkKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmV0d29ya25hbWUoc2VsZik6CisgICAgICAgICIiInN0cjogVGhyZWFkIG5ldHdvcmsgbmFtZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcSgnbmV0d29ya25hbWUnKVswXQorCisgICAgQG5ldHdvcmtuYW1lLnNldHRlcgorICAgIGRlZiBuZXR3b3JrbmFtZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3JlcSgnbmV0d29ya25hbWUgJXMnICUgdmFsdWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbW9kZShzZWxmKToKKyAgICAgICAgIiIic3RyOiBUaHJlYWQgbW9kZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcSgnbW9kZScpWzBdCisKKyAgICBAbW9kZS5zZXR0ZXIKKyAgICBkZWYgbW9kZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3JlcSgnbW9kZSAlcycgJSB2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtYWMoc2VsZik6CisgICAgICAgICIiInN0cjogTUFDIGFkZHJlc3Mgb2YgdGhlIGRldmljZSIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxKCdleHRhZGRyJylbMF0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhZGRycyhzZWxmKToKKyAgICAgICAgIiIiW3N0cl06IElQIGFkZHJlc3NlcyBvZiB0aGUgZGV2aWNlcyIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxKCdpcGFkZHInKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNob3J0X2FkZHIoc2VsZik6CisgICAgICAgICIiInN0cjogU2hvcnQgYWRkcmVzcyIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxKCdybG9jMTYnKVswXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNoYW5uZWwoc2VsZik6CisgICAgICAgICIiImludDogQ2hhbm5lbCBudW1iZXIgb2Ygb3BlbnRocmVhZCIiIgorICAgICAgICByZXR1cm4gaW50KHNlbGYuX3JlcSgnY2hhbm5lbCcpWzBdKQorCisgICAgQGNoYW5uZWwuc2V0dGVyCisgICAgZGVmIGNoYW5uZWwoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9yZXEoJ2NoYW5uZWwgJWQnICUgdmFsdWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFuaWQoc2VsZik6CisgICAgICAgICIiInN0cjogVGhyZWFkIHBhbmlkIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9yZXEoJ3BhbmlkJylbMF0KKworICAgIEBwYW5pZC5zZXR0ZXIKKyAgICBkZWYgcGFuaWQoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9yZXEoJ3BhbmlkICVzJyAlIHZhbHVlKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGV4dHBhbmlkKHNlbGYpOgorICAgICAgICAiIiJzdHI6IFRocmVhZCBleHRwYW5pZCIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxKCdleHRwYW5pZCcpWzBdCisKKyAgICBAZXh0cGFuaWQuc2V0dGVyCisgICAgZGVmIGV4dHBhbmlkKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fcmVxKCdleHRwYW5pZCAlcycgJSB2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjaGlsZF90aW1lb3V0KHNlbGYpOgorICAgICAgICAiIiJzdHI6IFRocmVhZCBjaGlsZCB0aW1lb3V0IGluIHNlY29uZHMiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcSgnY2hpbGR0aW1lb3V0JylbMF0KKworICAgIEBjaGlsZF90aW1lb3V0LnNldHRlcgorICAgIGRlZiBjaGlsZF90aW1lb3V0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fcmVxKCdjaGlsZHRpbWVvdXQgJWQnICUgdmFsdWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICAgICAgIiIic3RyOiBPcGVuIHRocmVhZCB2ZXJzaW9uIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9yZXEoJ3ZlcnNpb24nKVswXQorCisgICAgZGVmIGFkZF9wcmVmaXgoc2VsZiwgcHJlZml4LCBmbGFncywgcHJmKToKKyAgICAgICAgIiIiQWRkIG5ldHdvcmsgcHJlZml4LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBwcmVmaXggKHN0cik6IG5ldHdvcmsgcHJlZml4LgorICAgICAgICAgICAgZmxhZ3MgKHN0cik6IG5ldHdvcmsgcHJlZml4IGZsYWdzLCBwbGVhc2UgcmVmZXIgdGhyZWFkIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMKKyAgICAgICAgICAgIHByZiAoc3RyKTogbmV0d29yayBwcmYsIHBsZWFzZSByZWZlciB0aHJlYWQgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVxKCdwcmVmaXggYWRkICVzICVzICVzJyAlIChwcmVmaXgsIGZsYWdzLCBwcmYpKQorICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIHNlbGYuX3JlcSgnbmV0ZGF0YXJlZ2lzdGVyJykKKworICAgIGRlZiByZW1vdmVfcHJlZml4KHNlbGYsIHByZWZpeCk6CisgICAgICAgICIiIlJlbW92ZSBuZXR3b3JrIHByZWZpeC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3JlcSgncHJlZml4IHJlbW92ZSAlcycgJSBwcmVmaXgpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgc2VsZi5fcmVxKCduZXRkYXRhcmVnaXN0ZXInKQorCisgICAgZGVmIGVuYWJsZV9ibGFja2xpc3Qoc2VsZik6CisgICAgICAgICIiIkVuYWJsZSBibGFja2xpc3QgZmVhdHVyZSIiIgorICAgICAgICBzZWxmLl9yZXEoJ2JsYWNrbGlzdCBlbmFibGUnKQorCisgICAgZGVmIGFkZF9ibGFja2xpc3Qoc2VsZiwgbWFjKToKKyAgICAgICAgIiIiQWRkIGEgbWFjIGFkZHJlc3MgdG8gYmxhY2tsaXN0IiIiCisgICAgICAgIHNlbGYuX3JlcSgnYmxhY2tsaXN0IGFkZCAlcycgJSBtYWMpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvcGR1X2NvbnRyb2xsZXIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvcGR1X2NvbnRyb2xsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1MGNmOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9wZHVfY29udHJvbGxlci5weQpAQCAtMCwwICsxLDE5MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCB0ZWxuZXRsaWIKK2ltcG9ydCB0aW1lCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFBkdUNvbnRyb2xsZXIob2JqZWN0KToKKworICAgIGRlZiBvcGVuKHNlbGYsICoqcGFyYW1zKToKKyAgICAgICAgIiIiT3BlbiBQRFUgY29udHJvbGxlciBjb25uZWN0aW9uIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZWJvb3Qoc2VsZiwgKipwYXJhbXMpOgorICAgICAgICAiIiJSZWJvb3QgYW4gb3V0bGV0IG9yIGEgYm9hcmQgcGFzc2VkIGFzIHBhcmFtcyIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIFBEVSBjb250cm9sbGVyIGNvbm5lY3Rpb24iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIER1bW15UGR1Q29udHJvbGxlcihQZHVDb250cm9sbGVyKToKKyAgICAiIiJEdW1teSBpbXBsZW1lbnRhdGlvbiB3aGljaCBvbmx5IHNheXMgdGhhdCBQRFUgY29udHJvbGxlciBpcyBub3QgY29ubmVjdGVkIiIiCisKKyAgICBkZWYgb3BlbihzZWxmLCAqKnBhcmFtcyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiByZWJvb3Qoc2VsZiwgKipwYXJhbXMpOgorICAgICAgICBsb2dnZXIuaW5mbygnTm8gUERVIGNvbnRyb2xsZXIgY29ubmVjdGVkLicpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBBcGNQZHVDb250cm9sbGVyKFBkdUNvbnRyb2xsZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnRuID0gTm9uZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIF9pbml0KHNlbGYpOgorICAgICAgICAiIiJJbml0aWFsaXplIHRoZSB0ZWxuZXQgY29ubmVjdGlvbgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi50biA9IHRlbG5ldGxpYi5UZWxuZXQoc2VsZi5pcCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLnRuLnJlYWRfdW50aWwoJ1VzZXIgTmFtZScpCisgICAgICAgIHNlbGYudG4ud3JpdGUoJ2FwY1xyXG4nKQorICAgICAgICBzZWxmLnRuLnJlYWRfdW50aWwoJ1Bhc3N3b3JkJykKKyAgICAgICAgc2VsZi50bi53cml0ZSgnYXBjXHJcbicpCisgICAgICAgIHNlbGYudW50aWxfZG9uZSgpCisKKyAgICBkZWYgb3BlbihzZWxmLCAqKnBhcmFtcyk6CisgICAgICAgICIiIk9wZW4gdGVsbmV0IGNvbm5lY3Rpb24KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcGFyYW1zIChkaWN0KSwgbXVzdCBjb250YWluIHR3byBwYXJhbWV0ZXJzICJpcCIgLSBpcCBhZGRyZXNzIG9yIGhvc3RuYW1lIGFuZCAicG9ydCIgLSBwb3J0IG51bWJlcgorCisgICAgICAgIEV4YW1wbGU6CisgICAgICAgICAgICBwYXJhbXMgPSB7J3BvcnQnOiAyMywgJ2lwJzogJ2xvY2FsaG9zdCd9CisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuaW5mbygnb3BlbmluZyB0ZWxuZXQnKQorICAgICAgICBzZWxmLnBvcnQgPSBwYXJhbXNbJ3BvcnQnXQorICAgICAgICBzZWxmLmlwID0gcGFyYW1zWydpcCddCisgICAgICAgIHNlbGYudG4gPSBOb25lCisgICAgICAgIHNlbGYuX2luaXQoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0ZWxuZXQgY29ubmVjdGlvbiIiIgorICAgICAgICBsb2dnZXIuaW5mbygnY2xvc2luZyB0ZWxuZXQnKQorICAgICAgICBpZiBzZWxmLnRuOgorICAgICAgICAgICAgc2VsZi50bi5jbG9zZSgpCisKKyAgICBkZWYgdW50aWxfZG9uZShzZWxmKToKKyAgICAgICAgIiIiV2FpdCB1bnRpbCB0aGUgcHJvbXB0IGVuY291bnRlcmVkCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnVudGlsKHInXj4nKQorCisgICAgZGVmIHVudGlsKHNlbGYsIHJlZ2V4KToKKyAgICAgICAgIiIiV2FpdCB1bnRpbCB0aGUgcmVnZXggZW5jb3VudGVyZWQKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dlci5kZWJ1Zygnd2FpdGluZyBmb3IgJXMnLCByZWdleCkKKyAgICAgICAgciA9IHJlLmNvbXBpbGUocmVnZXgsIHJlLk0pCisgICAgICAgIHNlbGYudG4uZXhwZWN0KFtyXSkKKworICAgIGRlZiByZWJvb3Qoc2VsZiwgKipwYXJhbXMpOgorICAgICAgICAiIiJSZWJvb3Qgb3V0bGV0CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHBhcmFtcyAoZGljdCksIG11c3QgY29udGFpbiBwYXJhbWV0ZXIgIm91dGxldCIgLSBvdXRsZXQgbnVtYmVyCisKKyAgICAgICAgRXhhbXBsZToKKyAgICAgICAgICAgIHBhcmFtcyA9IHsnb3V0bGV0JzogMX0KKyAgICAgICAgIiIiCisgICAgICAgIG91dGxldCA9IHBhcmFtc1snb3V0bGV0J10KKworICAgICAgICAjIG1haW4gbWVudQorICAgICAgICBzZWxmLnRuLndyaXRlKCdceDFiXHJcbicpCisgICAgICAgIHNlbGYudW50aWxfZG9uZSgpCisgICAgICAgICMgRGV2aWNlIE1hbmFnZXIKKyAgICAgICAgc2VsZi50bi53cml0ZSgnMVxyXG4nKQorICAgICAgICBzZWxmLnVudGlsX2RvbmUoKQorICAgICAgICAjIE91dGxldCBNYW5hZ2VtZW50CisgICAgICAgIHNlbGYudG4ud3JpdGUoJzJcclxuJykKKyAgICAgICAgc2VsZi51bnRpbF9kb25lKCkKKyAgICAgICAgIyBPdXRsZXQgQ29udHJvbAorICAgICAgICBzZWxmLnRuLndyaXRlKCcxXHJcbicpCisgICAgICAgIHNlbGYudW50aWxfZG9uZSgpCisgICAgICAgICMgU2VsZWN0IG91dGxldAorICAgICAgICBzZWxmLnRuLndyaXRlKCclZFxyXG4nICUgb3V0bGV0KQorICAgICAgICBzZWxmLnVudGlsX2RvbmUoKQorICAgICAgICAjIENvbnRyb2wKKyAgICAgICAgc2VsZi50bi53cml0ZSgnMVxyXG4nKQorICAgICAgICBzZWxmLnVudGlsX2RvbmUoKQorICAgICAgICAjIG9mZgorICAgICAgICBzZWxmLnRuLndyaXRlKCcyXHJcbicpCisgICAgICAgIHNlbGYudW50aWwoJ3RvIGNhbmNlbCcpCisgICAgICAgIHNlbGYudG4ud3JpdGUoJ1lFU1xyXG4nKQorICAgICAgICBzZWxmLnVudGlsKCd0byBjb250aW51ZScpCisgICAgICAgIHNlbGYudG4ud3JpdGUoJ1xyXG4nKQorICAgICAgICBzZWxmLnVudGlsX2RvbmUoKQorCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgIyBvbgorICAgICAgICBzZWxmLnRuLndyaXRlKCcxXHJcbicpCisgICAgICAgIHNlbGYudW50aWwoJ3RvIGNhbmNlbCcpCisgICAgICAgIHNlbGYudG4ud3JpdGUoJ1lFU1xyXG4nKQorICAgICAgICBzZWxmLnVudGlsKCd0byBjb250aW51ZScpCisgICAgICAgIHNlbGYudG4ud3JpdGUoJ1xyXG4nKQorICAgICAgICBzZWxmLnVudGlsX2RvbmUoKQorCisKK2NsYXNzIE5vcmRpY0JvYXJkUGR1Q29udHJvbGxlcihQZHVDb250cm9sbGVyKToKKworICAgIGRlZiBvcGVuKHNlbGYsICoqcGFyYW1zKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9waW5fcmVzZXQoc2VsZiwgc2VyaWFsX251bWJlcik6CisgICAgICAgIG9zLnN5c3RlbSgnbnJmanByb2cgLWYgTlJGNTIgLS1zbnIge30gLXAnLmZvcm1hdChzZXJpYWxfbnVtYmVyKSkKKworICAgIGRlZiByZWJvb3Qoc2VsZiwgKipwYXJhbXMpOgorICAgICAgICBib2FyZHNfc2VyaWFsX251bWJlcnMgPSBwYXJhbXNbJ2JvYXJkc19zZXJpYWxfbnVtYmVycyddCisKKyAgICAgICAgZm9yIHNlcmlhbF9udW1iZXIgaW4gYm9hcmRzX3NlcmlhbF9udW1iZXJzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1Jlc2V0dGluZyBib2FyZCB3aXRoIHRoZSBzZXJpYWwgbnVtYmVyOiAlcycsIHNlcmlhbF9udW1iZXIpCisgICAgICAgICAgICBzZWxmLl9waW5fcmVzZXQoc2VyaWFsX251bWJlcikKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcGFzcworCitjbGFzcyBNYW51YWxQZHVDb250cm9sbGVyKFBkdUNvbnRyb2xsZXIpOgorCisgICAgZGVmIG9wZW4oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmVib290KHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgcmF3X2lucHV0KCdSZXNldCBhbGwgZGV2aWNlcyBhbmQgcHJlc3MgZW50ZXIgdG8gY29udGludWUuLicpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9wZHVfY29udHJvbGxlcl9mYWN0b3J5LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL3BkdV9jb250cm9sbGVyX2ZhY3RvcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4NWMwNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9wZHVfY29udHJvbGxlcl9mYWN0b3J5LnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2Zyb20gLiBpbXBvcnQgcGR1X2NvbnRyb2xsZXIKKworCitjbGFzcyBQZHVDb250cm9sbGVyRmFjdG9yeShvYmplY3QpOgorICAgICIiIkZhY3RvcnkgdGhhdCBjcmVhdGVzIFBEVSBjb250cm9sbGVycy4iIiIKKworICAgIGRlZiBjcmVhdGVfcGR1X2NvbnRyb2xsZXIoc2VsZiwgX3R5cGUpOgorICAgICAgICBpZiBfdHlwZSA9PSAnTk9SRElDX0JPQVJEX1BEVV9DT05UT0xMRVInOgorICAgICAgICAgICAgcmV0dXJuIHBkdV9jb250cm9sbGVyLk5vcmRpY0JvYXJkUGR1Q29udHJvbGxlcigpCisgICAgICAgIGVsaWYgX3R5cGUgPT0gJ0FQQ19QRFVfQ09OVFJPTExFUic6CisgICAgICAgICAgICByZXR1cm4gcGR1X2NvbnRyb2xsZXIuQXBjUGR1Q29udHJvbGxlcigpCisgICAgICAgIGVsaWYgX3R5cGUgPT0gJ01BTlVBTF9QRFVfQ09OVFJPTExFUic6CisgICAgICAgICAgICByZXR1cm4gcGR1X2NvbnRyb2xsZXIuTWFudWFsUGR1Q29udHJvbGxlcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcGR1X2NvbnRyb2xsZXIuRHVtbXlQZHVDb250cm9sbGVyKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9ydW5uZXIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvcnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NDE3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvcnVubmVyLnB5CkBAIC0wLDAgKzEsMzM1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5vcGVuX3RocmVhZF9jb250cm9sbGVyIGltcG9ydCBPcGVuVGhyZWFkQ29udHJvbGxlcgorZnJvbSBhdXRvdGhyZWFkaGFybmVzcyBpbXBvcnQgc2V0dGluZ3MKKworbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLklORk8pCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyIiIkxvZ2dlcjogVGhlIGdsb2JhbCBsb2dnZXIiIiIKKworbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKworUkVTVU1FX1NDUklQVF9QQVRIID0gJyVhcHBkYXRhJVxcTWljcm9zb2Z0XFxXaW5kb3dzXFxTdGFydCBNZW51XFxQcm9ncmFtc1xcJyBcCisgICAgICAgICAgICAgICAgICAgICAnU3RhcnR1cFxcY29udGludWVfaGFybmVzcy5iYXQnCisKK2NsYXNzIFNpbXBsZVRlc3RSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGF1dG9fcmVib290X2FyZ3M9Tm9uZSk6CisgICAgICAgICIiIlJlY29yZCB0ZXN0IHJlc3VsdHMgaW4ganNvbiBmaWxlCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHBhdGggKHN0cik6IEZpbGUgcGF0aCB0byByZWNvcmQgdGhlIHJlc3VsdHMKKyAgICAgICAgICAgIGF1dG9fcmVib290IChib29sKTogV2hldGhlciByZWJvb3Qgd2hlbiBoYXJuZXNzIGRpZQorICAgICAgICAiIiIKKyAgICAgICAgc3VwZXIoU2ltcGxlVGVzdFJlc3VsdCwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYuYXV0b19yZWJvb3RfYXJncyA9IGF1dG9fcmVib290X2FyZ3MKKyAgICAgICAgc2VsZi5yZXN1bHQgPSBqc29uLmxvYWQob3BlbihzZWxmLnBhdGgsICdyJykpCisgICAgICAgIHNlbGYubG9nX2hhbmRsZXIgPSBOb25lCisgICAgICAgIHNlbGYuc3RhcnRlZCA9IE5vbmUKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0luaXRpYWwgc3RhdGUgaXMgJXMnLCBqc29uLmR1bXBzKHNlbGYucmVzdWx0LCBpbmRlbnQ9MikpCisKKyAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICBsb2dnZXIuaW5mbygnXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4lc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScsIHRlc3QuX19jbGFzc19fLl9fbmFtZV9fKQorCisgICAgICAgICMgY3JlYXRlIHN0YXJ0IHVwIHNjcmlwdCBpZiBhdXRvIHJlYm9vdCBlbmFibGVkCisgICAgICAgIGlmIHNlbGYuYXV0b19yZWJvb3RfYXJnczoKKyAgICAgICAgICAgIHRlc3QuYXV0b19yZWJvb3QgPSBUcnVlCisgICAgICAgICAgICBvcy5zeXN0ZW0oJ2VjaG8gJXMgPiAiJXMiJworICAgICAgICAgICAgICAgICAgICAgICUgKCcgJy5qb2luKHNlbGYuYXV0b19yZWJvb3RfYXJncyArIFsnLWMnLCB0ZXN0Ll9fY2xhc3NfXy5fX25hbWVfX10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VNRV9TQ1JJUFRfUEFUSCkpCisKKyAgICAgICAgIyByZWNvcmQgc3RhcnQgdGltZXN0YW1wCisgICAgICAgIHNlbGYuc3RhcnRlZCA9IHRpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTJykKKworICAgICAgICBvcy5zeXN0ZW0oJ21rZGlyICVzJyAlIHRlc3QucmVzdWx0X2RpcikKKyAgICAgICAgc2VsZi5sb2dfaGFuZGxlciA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoJyVzXFxhdXRvLSVzLmxvZycgJSAodGVzdC5yZXN1bHRfZGlyLCB0aW1lLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnKSkpCisgICAgICAgIHNlbGYubG9nX2hhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAgICAgc2VsZi5sb2dfaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzICUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMnKSkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5sb2dfaGFuZGxlcikKKworICAgIGRlZiBhZGRfcmVzdWx0KHNlbGYsIHRlc3QsIHBhc3NlZCwgZXJyb3I9Tm9uZSk6CisgICAgICAgICIiIlJlY29yZCB0ZXN0IHJlc3VsdCBpbnRvIGpzb24gZmlsZQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0ZXN0IChUZXN0Q2FzZSk6IFRoZSB0ZXN0IGp1c3QgcnVuCisgICAgICAgICAgICBwYXNzZWQgKGJvb2wpOiBXaGV0aGVyIHRoZSBjYXNlIGlzIHBhc3NlZAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5yZXN1bHRbdW5pY29kZSh0ZXN0Ll9fY2xhc3NfXy5fX25hbWVfXyldID0geworICAgICAgICAgICAgJ3N0YXJ0ZWQnOiBzZWxmLnN0YXJ0ZWQsCisgICAgICAgICAgICAnc3RvcHBlZCc6IHRpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTJyksCisgICAgICAgICAgICAncGFzc2VkJzogcGFzc2VkLAorICAgICAgICAgICAgJ2Vycm9yJzogZXJyb3IKKyAgICAgICAgfQorICAgICAgICBpZiBzZWxmLmF1dG9fcmVib290X2FyZ3M6CisgICAgICAgICAgICBvcy5zeXN0ZW0oJ2RlbCAiJXMiJyAlIFJFU1VNRV9TQ1JJUFRfUEFUSCkKKworICAgICAgICBqc29uLmR1bXAoT3JkZXJlZERpY3Qoc29ydGVkKHNlbGYucmVzdWx0Lml0ZW1zKCksIGtleT1sYW1iZGEgdDogdFswXSkpLAorICAgICAgICAgICAgICAgICAgb3BlbihzZWxmLnBhdGgsICd3JyksIGluZGVudD0yKQorCisgICAgICAgICMgc2F2ZSBsb2dzCisgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYubG9nX2hhbmRsZXIpCisgICAgICAgIHNlbGYubG9nX2hhbmRsZXIuY2xvc2UoKQorICAgICAgICBzZWxmLmxvZ19oYW5kbGVyID0gTm9uZQorICAgICAgICB0aW1lLnNsZWVwKDIpCisKKyAgICAgICAgIyBjbG9zZSBleHBsb3JlcnMKKyAgICAgICAgb3Muc3lzdGVtKCd0YXNra2lsbCAvZiAvaW0gZXhwbG9yZXIuZXhlICYmIHN0YXJ0IGV4cGxvcmVyLmV4ZScpCisKKyAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCB0ZXN0KToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ2Nhc2VbJXNdIHBhc3MnLCB0ZXN0Ll9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgc3VwZXIoU2ltcGxlVGVzdFJlc3VsdCwgc2VsZikuYWRkU3VjY2Vzcyh0ZXN0KQorICAgICAgICBzZWxmLmFkZF9yZXN1bHQodGVzdCwgVHJ1ZSkKKworICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgIGxvZ2dlci53YXJuaW5nKCdjYXNlWyVzXSBmYWlsJywgdGVzdC5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHN1cGVyKFNpbXBsZVRlc3RSZXN1bHQsIHNlbGYpLmFkZEZhaWx1cmUodGVzdCwgZXJyKQorICAgICAgICBzZWxmLmFkZF9yZXN1bHQodGVzdCwgRmFsc2UpCisKKyAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgdGVzdCwgZXJyKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdjYXNlWyVzXSBlcnJvcicsIHRlc3QuX19jbGFzc19fLl9fbmFtZV9fLCBleGNfaW5mbz1lcnIpCisKKyAgICAgICAgaWYgZXJyIGFuZCBlcnJbMF0gaXMgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgIGlmIHNlbGYuYXV0b19yZWJvb3RfYXJnczoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygncmVib290aW5nLi4nKQorICAgICAgICAgICAgICAgIG9zLnN5c3RlbSgnc2h1dGRvd24gL3IgL3QgMScpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdleGl0aW5nLi4nKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBzdXBlcihTaW1wbGVUZXN0UmVzdWx0LCBzZWxmKS5hZGRFcnJvcih0ZXN0LCBlcnIpCisgICAgICAgIHNlbGYuYWRkX3Jlc3VsdCh0ZXN0LCBOb25lLCBzdHIoZXJyWzFdKSkKKworZGVmIGxpc3RfZGV2aWNlcyhuYW1lcz1Ob25lLCBjb250aW51ZV9mcm9tPU5vbmUsICoqa3dhcmdzKToKKyAgICAiIiJMaXN0IGRldmljZXMgaW4gc2V0dGluZ3MgZmlsZSBhbmQgcHJpbnQgdmVyc2lvbnMiIiIKKworICAgIGlmIG5vdCBuYW1lczoKKyAgICAgICAgbmFtZXMgPSBbZGV2aWNlIGZvciBkZXZpY2UsIF90eXBlIGluIHNldHRpbmdzLkdPTERFTl9ERVZJQ0VTIGlmIF90eXBlID09ICdPcGVuVGhyZWFkJ10KKworICAgIGlmIGNvbnRpbnVlX2Zyb206CisgICAgICAgIGNvbnRpbnVlX2Zyb20gPSBuYW1lcy5pbmRleChjb250aW51ZV9mcm9tKQorICAgIGVsc2U6CisgICAgICAgIGNvbnRpbnVlX2Zyb20gPSAwCisKKyAgICBmb3IgcG9ydCBpbiBuYW1lc1tjb250aW51ZV9mcm9tOl06CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggT3BlblRocmVhZENvbnRyb2xsZXIocG9ydCkgYXMgb3RjOgorICAgICAgICAgICAgICAgIHByaW50KCclczogJXMnICUgKHBvcnQsIG90Yy52ZXJzaW9uKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignZmFpbGVkIHRvIGdldCB2ZXJzaW9uIG9mICVzJyAlIHBvcnQpCisKK2RlZiBkaXNjb3ZlcihuYW1lcz1Ob25lLCBwYXR0ZXJuPVsnKi5weSddLCBza2lwPSdlZnAnLCBkcnlfcnVuPUZhbHNlLCBibGFja2xpc3Q9Tm9uZSwgbmFtZV9ncmVwcz1Ob25lLAorICAgICAgICAgICAgIG1hbnVhbF9yZXNldD1GYWxzZSwgZGVsZXRlX2hpc3Rvcnk9RmFsc2UsIG1heF9kZXZpY2VzPTAsCisgICAgICAgICAgICAgY29udGludWVfZnJvbT1Ob25lLCByZXN1bHRfZmlsZT0nLi9yZXN1bHQuanNvbicsIGF1dG9fcmVib290PUZhbHNlKToKKyAgICAiIiJEaXNjb3ZlciBhbGwgdGVzdCBjYXNlcyBhbmQgc2tpcCB0aG9zZSBwYXNzZWQKKworICAgIEFyZ3M6CisgICAgICAgIHBhdHRlcm4gKHN0cik6IFBhdHRlcm4gdG8gbWF0Y2ggY2FzZSBtb2R1bGVzLCByZWZlciBweXRob24ncyB1bml0dGVzdAorICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMKKyAgICAgICAgc2tpcCAoc3RyKTogdHlwZXMgY2FzZXMgdG8gc2tpcAorICAgICIiIgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZXR0aW5ncy5PVVRQVVRfUEFUSCk6CisgICAgICAgIG9zLm1rZGlyKHNldHRpbmdzLk9VVFBVVF9QQVRIKQorCisgICAgaWYgZGVsZXRlX2hpc3Rvcnk6CisgICAgICAgIG9zLnN5c3RlbSgnZGVsIGhpc3RvcnkuanNvbicpCisKKyAgICBpZiBibGFja2xpc3Q6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4Y2x1ZGVzID0gW2xpbmUuc3RyaXAoJ1xuJykgZm9yIGxpbmUgaW4gb3BlbihibGFja2xpc3QsICdyJykucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJyMnKV0KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbGVkIHRvIG9wZW4gdGVzdCBjYXNlIGJsYWNrIGxpc3QgZmlsZScpCisgICAgICAgICAgICByYWlzZQorICAgIGVsc2U6CisgICAgICAgIGV4Y2x1ZGVzID0gW10KKworICAgIGxvZyA9IE5vbmUKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShyZXN1bHRfZmlsZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvZyA9IGpzb24ubG9hZChvcGVuKHJlc3VsdF9maWxlLCAncicpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gb3BlbiByZXN1bHQgZmlsZScpCisKKyAgICBpZiBub3QgbG9nOgorICAgICAgICBsb2cgPSB7fQorICAgICAgICBqc29uLmR1bXAobG9nLCBvcGVuKHJlc3VsdF9maWxlLCAndycpLCBpbmRlbnQ9MikKKworICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBkaXNjb3ZlcmVkID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIuZGlzY292ZXIoJ2Nhc2VzJywgcGF0dGVybikKKworICAgIGlmIG5hbWVzIGFuZCBjb250aW51ZV9mcm9tOgorICAgICAgICBuYW1lcyA9IG5hbWVzW25hbWVzLmluZGV4KGNvbnRpbnVlX2Zyb20pOl0KKworICAgIGZvciBzMSBpbiBkaXNjb3ZlcmVkOgorICAgICAgICBmb3IgczIgaW4gczE6CisgICAgICAgICAgICBmb3IgY2FzZSBpbiBzMjoKKyAgICAgICAgICAgICAgICBpZiBjYXNlLl9fY2xhc3NfXyBpcyBIYXJuZXNzQ2FzZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBjYXNlX25hbWUgPSB1bmljb2RlKGNhc2UuX19jbGFzc19fLl9fbmFtZV9fKQorCisgICAgICAgICAgICAgICAgIyBncmVwIG5hbWUKKyAgICAgICAgICAgICAgICBpZiBuYW1lX2dyZXBzIGFuZCBub3QgYW55KGZubWF0Y2guZm5tYXRjaChjYXNlX25hbWUsIG5hbWVfZ3JlcCkgZm9yIG5hbWVfZ3JlcCBpbiBuYW1lX2dyZXBzKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ2Nhc2VbJXNdIHNraXBwZWQgYnkgbmFtZSBncmVwcycsIGNhc2VfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgd2hpdGVsaXN0CisgICAgICAgICAgICAgICAgaWYgbGVuKG5hbWVzKSBhbmQgY2FzZV9uYW1lIG5vdCBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ2Nhc2VbJXNdIHNraXBwZWQnLCBjYXNlX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAjIHNraXAgY2FzZXMKKyAgICAgICAgICAgICAgICBpZiBjYXNlX25hbWUgaW4gbG9nLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ1tjYXNlX25hbWVdWydwYXNzZWQnXSBhbmQgKCdwJyBpbiBza2lwKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgKGxvZ1tjYXNlX25hbWVdWydwYXNzZWQnXSBpcyBGYWxzZSBhbmQgKCdmJyBpbiBza2lwKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgKGxvZ1tjYXNlX25hbWVdWydwYXNzZWQnXSBpcyBOb25lIGFuZCAoJ2UnIGluIHNraXApKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdjYXNlWyVzXSBza2lwcGVkIGZvciBpdHMgc3RhdHVzWyVzXScsIGNhc2VfbmFtZSwgbG9nW2Nhc2VfbmFtZV1bJ3Bhc3NlZCddKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgY29udGludWUgZnJvbQorICAgICAgICAgICAgICAgIGlmIGNvbnRpbnVlX2Zyb206CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbnRpbnVlX2Zyb20gIT0gY2FzZV9uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ2Nhc2VbJXNdIHNraXBwZWQgZm9yIGNvbnRpbnVlIGZyb21bJXNdJywgY2FzZV9uYW1lLCBjb250aW51ZV9mcm9tKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlX2Zyb20gPSBOb25lCisKKyAgICAgICAgICAgICAgICAjIGJsYWNrIGxpc3QKKyAgICAgICAgICAgICAgICBpZiBjYXNlX25hbWUgaW4gZXhjbHVkZXM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdjYXNlWyVzXSBza2lwcGVkIGZvciBibGFja2xpc3QnLCBjYXNlX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAjIG1heCBkZXZpY2VzCisgICAgICAgICAgICAgICAgaWYgbWF4X2RldmljZXMgYW5kIGNhc2UuZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPiBtYXhfZGV2aWNlczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ2Nhc2VbJXNdIHNraXBwZWQgZm9yIGV4Y2VlZGluZyBtYXggZ29sZGVuIGRldmljZXMgYWxsb3dlZFslZF0nLCBjYXNlX25hbWUsIG1heF9kZXZpY2VzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChjYXNlKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdjYXNlWyVzXSBhZGRlZCcsIGNhc2VfbmFtZSkKKworICAgIGlmIGF1dG9fcmVib290OgorICAgICAgICBhcmd2ID0gW10KKyAgICAgICAgYXJndi5hcHBlbmQoJyIlcyInICUgb3Muc2VwLmpvaW4oW29zLmdldGN3ZCgpLCAnc3RhcnQuYmF0J10pKQorICAgICAgICBhcmd2LmV4dGVuZChbJy1wJywgcGF0dGVybl0pCisgICAgICAgIGFyZ3YuZXh0ZW5kKFsnLWsnLCBza2lwXSkKKyAgICAgICAgYXJndi5leHRlbmQoWyctbycsIHJlc3VsdF9maWxlXSkKKyAgICAgICAgYXJndi5hcHBlbmQoJy1hJykKKworICAgICAgICBpZiBtYW51YWxfcmVzZXQ6CisgICAgICAgICAgICBhcmd2LmFwcGVuZCgnLW0nKQorCisgICAgICAgIGlmIGRlbGV0ZV9oaXN0b3J5OgorICAgICAgICAgICAgYXJndi5hcHBlbmQoJy1kJykKKworICAgICAgICBhdXRvX3JlYm9vdF9hcmdzID0gYXJndiArIG5hbWVzCisgICAgZWxzZToKKyAgICAgICAgYXV0b19yZWJvb3RfYXJncyA9IE5vbmUKKyAgICAgICAgb3Muc3lzdGVtKCdkZWwgIiVzIicgJSBSRVNVTUVfU0NSSVBUX1BBVEgpCisKKyAgICAjIG1hbnVhbCByZXNldAorICAgIGlmIG1hbnVhbF9yZXNldDoKKyAgICAgICAgc2V0dGluZ3MuUERVX0NPTlRST0xMRVJfVFlQRSA9ICdNQU5VQUxfUERVX0NPTlRST0xMRVInCisgICAgICAgIHNldHRpbmdzLlBEVV9DT05UUk9MTEVSX09QRU5fUEFSQU1TID0ge30KKyAgICAgICAgc2V0dGluZ3MuUERVX0NPTlRST0xMRVJfUkVCT09UX1BBUkFNUyA9IHt9CisKKyAgICByZXN1bHQgPSBTaW1wbGVUZXN0UmVzdWx0KHJlc3VsdF9maWxlLCBhdXRvX3JlYm9vdF9hcmdzKQorICAgIGZvciBjYXNlIGluIHN1aXRlOgorICAgICAgICBsb2dnZXIuaW5mbyhjYXNlLl9fY2xhc3NfXy5fX25hbWVfXykKKworICAgIGlmIGRyeV9ydW46CisgICAgICAgIHJldHVybgorCisgICAgc3VpdGUucnVuKHJlc3VsdCkKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nVGhyZWFkIGhhcm5lc3MgdGVzdCBjYXNlIHJ1bm5lcicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hdXRvLXJlYm9vdCcsICctYScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyZXN0YXJ0IHN5c3RlbSB3aGVuIGhhcm5lc3Mgc2VydmljZSBkaWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ25hbWVzJywgbWV0YXZhcj0nTkFNRScsIHR5cGU9c3RyLCBuYXJncz0nKicsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Rlc3QgY2FzZSBuYW1lLCBvbWl0IHRvIHRlc3QgYWxsJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJsYWNrbGlzdCcsICctYicsIG1ldGF2YXI9J0JMQUNLTElTVF9GSUxFJywgdHlwZT1zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmaWxlIHRvIGxpc3QgdGVzdCBjYXNlcyB0byBza2lwJywgZGVmYXVsdD1Ob25lKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29udGludWUtZnJvbScsICctYycsIHR5cGU9c3RyLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmaXJzdCBjYXNlIHRvIHRlc3QnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGVsZXRlLWhpc3RvcnknLCAnLWQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nY2xlYXIgaGlzdG9yeSBvbiBzdGFydHVwJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW5hbWUtZ3JlcHMnLCAnLWcnLCBhY3Rpb249J2FwcGVuZCcsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2dyZXAgY2FzZSBieSBuYW1lcycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1saXN0LWZpbGUnLCAnLWknLCB0eXBlPXN0ciwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZmlsZSB0byBsaXN0IGNhc2VzIG5hbWVzIHRvIHRlc3QnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2tpcCcsICctaycsIG1ldGF2YXI9J1NLSVAnLCB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3R5cGUgb2YgcmVzdWx0cyB0byBza2lwLicgXAorICAgICAgICAgICAgICAgICAgICAgICAgJ2UgZm9yIGVycm9yLCBmIGZvciBmYWlsLCBwIGZvciBwYXNzLicsIGRlZmF1bHQ9JycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1saXN0LWRldmljZXMnLCAnLWwnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nbGlzdCBkZXZpY2VzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1hbnVhbC1yZXNldCcsICctbScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyZXNldCBkZXZpY2VzIG1hbnVhbGx5JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRyeS1ydW4nLCAnLW4nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nanVzdCBzaG93IHdoYXQgdG8gcnVuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJlc3VsdC1maWxlJywgJy1vJywgdHlwZT1zdHIsIGRlZmF1bHQ9c2V0dGluZ3MuT1VUUFVUX1BBVEggKyAnXFxyZXN1bHQuanNvbicsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmaWxlIHRvIHN0b3JlIGFuZCByZWFkIGN1cnJlbnQgc3RhdHVzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXBhdHRlcm4nLCAnLXAnLCBtZXRhdmFyPSdQQVRURVJOJywgdHlwZT1zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmaWxlIG5hbWUgcGF0dGVybiwgZGVmYXVsdCB0byAiKi5weSInLCBkZWZhdWx0PScqLnB5JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1heC1kZXZpY2VzJywgJy11JywgdHlwZT1pbnQsIGRlZmF1bHQ9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J21heCBnb2xkZW4gZGV2aWNlcyBhbGxvd2VkJykKKworICAgIGFyZ3MgPSB2YXJzKHBhcnNlci5wYXJzZV9hcmdzKCkpCisKKyAgICBpZiBhcmdzWydsaXN0X2ZpbGUnXToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZXMgPSBbbGluZS5zdHJpcCgnXG4nKSBmb3IgbGluZSBpbiBvcGVuKGFyZ3NbJ2xpc3RfZmlsZSddLCAncicpLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKCcjJyldCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhaWxlZCB0byBvcGVuIHRlc3QgY2FzZSBsaXN0IGZpbGUnKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZ3NbJ25hbWVzJ10gPSBhcmdzWyduYW1lcyddICsgbmFtZXMKKworICAgIGFyZ3MucG9wKCdsaXN0X2ZpbGUnKQorCisgICAgaWYgYXJncy5wb3AoJ2xpc3RfZGV2aWNlcycsIEZhbHNlKToKKyAgICAgICAgbGlzdF9kZXZpY2VzKCoqYXJncykKKyAgICBlbHNlOgorICAgICAgICBkaXNjb3ZlcigqKmFyZ3MpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3Mvc2V0dGluZ3Nfc2FtcGxlLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL3NldHRpbmdzX3NhbXBsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDdlYjIzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL3NldHRpbmdzX3NhbXBsZS5weQpAQCAtMCwwICsxLDExOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK0FVVE9fRFVUID0gVHJ1ZQorIiIiYm9vbDogV2hldGhlciB1c2UgdGhlIGF1dG8gRFVUIGZlYXR1cmUgb2YgdGhyZWFkIGhhcm5lc3MuIiIiCisKK0RVVF9ERVZJQ0UgPSAoJ0NPTTE2JywgJ09wZW5UaHJlYWQnKQorIiIiKHN0ciwgc3RyKTogVGhlIGZpcnN0IGVsZW1lbnQgaXMgc2VyaWFsIHBvcnQgb2YgdGhlIERVVCwgYW5kIHRoZSBzZWNvbmQgaXMKK3RoZSBkZXZpY2UgdHlwZS4gVGhpcyBtdXN0IGJlIHNldCBpZiBBVVRPX0RVVD1GYWxzZS4iIiIKKworRFVUX1ZFUlNJT04gPSAnZzEyMzQ1JworIiIic3RyOiBWZXJzaW9uIG9mIERVVCwgbXVzdCBiZSBzZXQgaWYgQVVUT19EVVQ9RmFsc2UuIiIiCisKK0RVVF9NQU5VRkFDVFVSRVIgPSAnT3BlbiBUaHJlYWQnCisiIiJzdHI6IE1hbnVmYWN0dXJlciBvZiB0aGUgRFVUIiIiCisKK1RIUkVBRF9DSEFOTkVMID0gMTgKKyIiImludDogVGhyZWFkIGNoYW5uZWwiIiIKKworVEhSRUFEX1BBTklEID0gJzB4ZmFjZScKKyIiInN0cjogVGhyZWFkIFBBTiBJRCIiIgorCitUSFJFQURfTkVUV09SS05BTUUgPSAnR1JMJworIiIic3RyOiBUaHJlYWQgbmV0d29yayBuYW1lIiIiCisKK1RIUkVBRF9FWFRQQU5JRCA9ICcwMDBkYjgwMDAwMDAwMDAwJworIiIic3RyOiBUaHJlYWQgZXh0ZW5kZWQgUEFOIElEIiIiCisKK1RIUkVBRF9DSElMRF9USU1FT1VUID0gMAorIiIiaW50OiBDaGlsZCB0aW1lb3V0IGluIHNlY29uZHMuIFNldCB0byAwIHRvIHVzZSBIYXJuZXNzJ3MgZGVmYXVsdCB2YWx1ZS4iIiIKKworVEhSRUFEX1NFRF9QT0xMSU5HX0lOVEVSVkFMID0gMAorIiIiaW50OiBTRUQgcG9sbGluZyBpbnRlcnZhbCBpbiBzZWNvbmRzLiBTZXQgdG8gMCB0byB1c2UgSGFybmVzcydzIGRlZmF1bHQgdmFsdWUuIiIiCisKK0hBUk5FU1NfSE9NRSA9ICdDOlxcR1JMXFxUaHJlYWQxLjEnCisiIiJzdHI6IEhhcm5lc3MgaW5zdGFsbGF0aW9uIHBhdGgsIGUuZy4gYGBDOlxHUkxcVGhyZWFkMS4xYGAiIiIKKworSEFSTkVTU19VUkwgPSAnaHR0cDovLzEyNy4wLjAuMTo4MDAwJworIiIic3RyOiBIYXJuZXNzIGZyb250LWVuZCB1cmwiIiIKKworVEVTVEVSX05BTUUgPSAnVGhyZWFkIE9wZW4nCisiIiJzdHI6IFdobyBhcmUgeW91IiIiCisKK1RFU1RFUl9SRU1BUktTID0gJ09wZW5UaHJlYWQgaXMgZ3JlYXQnCisiIiJzdHI6IEFueSBjb21tZW50cyBpbiB0aGUgZmluYWwgUERGIiIiCisKK0dPTERFTl9ERVZJQ0VTID0gW10KKyIiIlsoc3RyLCBzdHIpXTogZGV2aWNlcyBsaXN0LgorCitJdCBzaG91bGQgYmUgc29tZXRoaW5nIGxpa2UgWygnQ09NMScsICdPcGVuVGhyZWFkJyksICgnQ09NMicsICdBUk0nKV0gZm9yIGRldmljZXMgY29ubmVjdGVkIHRvIFdpbmRvd3MuCisKK0ZvciBPcGVuVGhyZWFkIGdvbGRlbiBkZXZpY2VzLCBzZXIybmV0IGlzIGFsc28gc3VwcG9ydGVkLCBqdXN0IHVzZSBJUDpQT1JUIGZvciB0aGUgbmFtZS4gRm9yIGV4YW1wbGUsCisoJzE5Mi4xNjguMS4yOjUwMDEnLCAnT3BlblRocmVhZCcpLgorIiIiCisKK09VVFBVVF9QQVRIID0gJy5cXG91dHB1dCcKKyIiInN0cjogUGF0aCB0byBzdG9yZSByZXN1bHRzIGFuZCBsb2dzLCBNVVNUIGJlIHdyaXRhYmxlLiIiIgorCitTSElFTERfU0lNVUxBVElPTiA9IEZhbHNlCisiIiJib29sOiB3aGV0aGVyIHRvIHNpbXVsYXRlIFJGIHNoaWVsZCBieSBjaGFuZ2luZyBjaGFubmVsIiIiCisKK1BEVV9DT05UUk9MTEVSX1RZUEUgPSBOb25lCisiIiJzdHI6IFR5cGUgb2YgY29ubmVjdGVkIFBEVSBjb250cm9sbGVyLgorCitLZWVwIHRoaXMgTm9uZSBpZiBubyBQRFUgY29udHJvbGxlciBhdmFpbGFibGUuCisKK1R5cGVzIG9mIHN1cHBvcnRlZCBQRFUgY29udHJvbGxlcnM6CisgICAgLSBOb25lIC0gd2hlbiBubyBQRFUgY29udHJvbGxlciBjb25uZWN0ZWQKKyAgICAtICdBUENfUERVX0NPTlRST0xMRVInIC0gd2hlbiBBUEMgUERVIGNvbnRyb2xsZXIgY29ubmVjdGVkCisgICAgLSAnTk9SRElDX0JPQVJEX1BEVV9DT05UT0xMRVInIC0gd2hlbiBOb3JkaWMgYm9hcmRzIFBEVSBjb250cm9sbGVyIGNvbm5lY3RlZAorIiIiCisKK1BEVV9DT05UUk9MTEVSX09QRU5fUEFSQU1TID0geydwb3J0JzogMjMsICdpcCc6ICcxMjcuMC4wLjEnfQorIiIiZGljdDogUGFyYW1ldGVycyBwYXNzIHRvIHRoZSAib3BlbiIgbWV0aG9kIG9mIFBEVSBjb250cm9sbGVyLgorCitFeGFtcGxlIHBhcmFtZXRlcnMgZm9yIHRoZSAnQVBDX1BEVV9DT05UUk9MTEVSJzoKKyAgICB7J3BvcnQnOiAyMywgJ2lwJzogJzEyNy4wLjAuMSd9CisKK0V4YW1wbGUgcGFyYW1ldGVycyBmb3IgdGhlICdOT1JESUNfQk9BUkRfUERVX0NPTlRPTExFUic6CisgICAge30gLSBlbXB0eSBkaWN0aW9uYXJ5CisiIiIKKworUERVX0NPTlRST0xMRVJfUkVCT09UX1BBUkFNUyA9IHsnb3V0bGV0JzogMX0KKyIiImRpY3Q6IFBhcmFtZXRlcnMgcGFzcyB0byB0aGUgInJlYm9vdCIgbWV0aG9kIG9mIFBEVSBjb250cm9sbGVyLgorCitFeGFtcGxlIHBhcmFtZXRlcnMgZm9yIHRoZSAnQVBDX1BEVV9DT05UUk9MTEVSJzoKKyAgICB7J291dGxldCc6IDF9CisKK0V4YW1wbGUgcGFyYW1ldGVycyBmb3IgdGhlICdOT1JESUNfQk9BUkRfUERVX0NPTlRPTExFUic6CisgICAgeydib2FyZHNfc2VyaWFsX251bWJlcnMnOiAoJzEyMzQ1MTIzJywgLi4uKX0KKyIiIgpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL19faW5pdF9fLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MmQxMWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvX19pbml0X18ucHkKQEAgLTAsMCArMSwzMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8xXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMV8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MzJmZmUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMV8xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIENvbW1pc3Npb25lcl84XzFfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfQ09NTUlTU0lPTkVSCisgICAgY2FzZSA9ICc4IDEgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMV8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzFfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGQxMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzFfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBDb21taXNzaW9uZXJfOF8xXzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0NPTU1JU1NJT05FUgorICAgIGNhc2UgPSAnOCAxIDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzFfNi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8xXzYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkMDk4MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8xXzYucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgQ29tbWlzc2lvbmVyXzhfMV82KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9DT01NSVNTSU9ORVIKKyAgICBjYXNlID0gJzggMSA2JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8yXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMl8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZmI5YTcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMl8xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIENvbW1pc3Npb25lcl84XzJfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfQ09NTUlTU0lPTkVSCisgICAgY2FzZSA9ICc4IDIgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMl8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzJfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzBjOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzJfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBDb21taXNzaW9uZXJfOF8yXzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0NPTU1JU1NJT05FUgorICAgIGNhc2UgPSAnOCAyIDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzJfNS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8yXzUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5Nzc1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8yXzUucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgQ29tbWlzc2lvbmVyXzhfMl81KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9DT01NSVNTSU9ORVIKKyAgICBjYXNlID0gJzggMiA1JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8zXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfM18xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYzY2NDgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfM18xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIENvbW1pc3Npb25lcl84XzNfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfQ09NTUlTU0lPTkVSCisgICAgY2FzZSA9ICc4IDMgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl85XzJfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjMyMGZmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl85XzJfMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBDb21taXNzaW9uZXJfOV8yXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0NPTU1JU1NJT05FUgorICAgIGNhc2UgPSAnOSAyIDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl85XzJfMTQucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl8xNC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmY4NzI2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl85XzJfMTQucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgQ29tbWlzc2lvbmVyXzlfMl8xNChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfQ09NTUlTU0lPTkVSCisgICAgY2FzZSA9ICc5IDIgMTQnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl85XzJfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOV8yXzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyYmFkNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOV8yXzIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgQ29tbWlzc2lvbmVyXzlfMl8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9DT01NSVNTSU9ORVIKKyAgICBjYXNlID0gJzkgMiAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOV8yXzMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl8zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWZjYzIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl8zLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIENvbW1pc3Npb25lcl85XzJfMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfQ09NTUlTU0lPTkVSCisgICAgY2FzZSA9ICc5IDIgMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl80LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl85XzJfNC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDVhYzA0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl85XzJfNC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBDb21taXNzaW9uZXJfOV8yXzQoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0NPTU1JU1NJT05FUgorICAgIGNhc2UgPSAnOSAyIDQnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5OTM0MGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfNl8xXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc2IDEgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwYzk2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzFfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgMSAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWU3Mjc3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV8zLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzZfMV8zKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnNiAxIDMnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV80LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV80LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YWYxMDcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzQucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfNl8xXzQoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc2IDEgNCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzUucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiYTFjZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfNS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzFfNShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgMSA1JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfNi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfNi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDFmODIxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV82LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzZfMV82KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnNiAxIDYnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMl8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMl8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZGUwZTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8yXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfNl8yXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc2IDIgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8yXzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8yXzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4MTc3NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzJfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzJfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgMiAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzNfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzNfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDIxN2ZmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfM18xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzZfM18xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnNiAzIDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNF8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNF8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YzBjMGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl80XzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfNl80XzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc2IDQgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl80XzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl80XzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjZDU1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzRfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzRfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgNCAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzVfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzVfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDYyMjgxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNV8xLnB5CkBAIC0wLDAgKzEsNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0aW1lCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzVfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgNSAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlc2V0IERVVCcpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RvcCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKHNlbGYuY2hpbGRfdGltZW91dCArIDEwKQorICAgICAgICAgICAgc2VsZi5kdXQuc3RhcnQoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl81XzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl81XzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJiMDhmYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzVfMi5weQpAQCAtMCwwICsxLDUyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJlCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzVfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgNSAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlc2V0IERVVCcpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RvcCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlam9pbiBOb3cnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0YXJ0KCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl81XzMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl81XzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkM2ZiNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzVfMy5weQpAQCAtMCwwICsxLDUwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfNl81XzMoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc2IDUgMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBpZiB0aXRsZS5zdGFydHN3aXRoKCdSZXNldCBEVVQnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0b3AoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZWxpZiB0aXRsZS5zdGFydHN3aXRoKCdSZWpvaW4gTm93Jyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdGFydCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzZfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzZfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWFhOGIzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNl8xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzZfNl8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnNiA2IDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNl8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNl8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5Yzk0ODYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl82XzIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfNl82XzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc2IDYgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzEwLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzlfMl8xMC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWZjNTU0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzlfMl8xMC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF85XzJfMTAoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc5IDIgMTAnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzlfMl8xMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF85XzJfMTEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5MTU3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF85XzJfMTEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfOV8yXzExKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnOSAyIDExJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF85XzJfMTcucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzE3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NzhhOTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzE3LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzlfMl8xNyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzkgMiAxNycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzE4LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzlfMl8xOC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWU4ODRmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzlfMl8xOC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF85XzJfMTgoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc5IDIgMTgnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzlfMl82LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzlfMl82LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNGZlYTIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzYucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfOV8yXzYoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc5IDIgNicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzgucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiYjhmZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF85XzJfOC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF85XzJfOChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzkgMiA4JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9mZWRfNl8xXzcucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZmVkXzZfMV83LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNGZjNGMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZmVkXzZfMV83LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEZFRF82XzFfNyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRkVECisgICAgY2FzZSA9ICc2IDEgNycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZmVkXzlfMl8xMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9mZWRfOV8yXzEzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYjA4YTUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZmVkXzlfMl8xMy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBGRURfOV8yXzEzKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9GRUQKKyAgICBjYXNlID0gJzkgMiAxMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvam9pbmVyXzhfMV8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2pvaW5lcl84XzFfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmVjYzhhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2pvaW5lcl84XzFfMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBKb2luZXJfOF8xXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0pPSU5FUgorICAgIGNhc2UgPSAnOCAxIDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2pvaW5lcl84XzFfNi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9qb2luZXJfOF8xXzYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U1OTNkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9qb2luZXJfOF8xXzYucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgSm9pbmVyXzhfMV82KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9KT0lORVIKKyAgICBjYXNlID0gJzggMSA2JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8xXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfMV8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOWUxYWUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfMV8xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl81XzFfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDEgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfMV8xMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8xXzEzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYWFjY2YKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfMV8xMy5weQpAQCAtMCwwICsxLDQ4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgTGVhZGVyXzVfMV8xMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDEgMTMnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgaWYgdGl0bGUuc3RhcnRzd2l0aCgnVXNlciBJbnB1dCBSZXF1aXJlZCcpOgorICAgICAgICAgICAgI2JvZHkgPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdjbmZybU1zZycpLnRleHQKKyAgICAgICAgICAgICNpZiBib2R5LnN0YXJ0c3dpdGgoJ1Jlc2V0IExlYWRlcicpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RvcCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICBzZWxmLmR1dC5zdGFydCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8xXzUucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfMV81LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTU4MjIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfMV81LnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBMZWFkZXJfNV8xXzUoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSAxIDUnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzJfMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8yXzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczYWEzZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8yXzMucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzVfMl8zKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzUgMiAzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMzIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfM182LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzNfNi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmViM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzNfNi5weQpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgTGVhZGVyXzVfM182KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzUgMyA2JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8zXzcucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfM183LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmODAwNWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfM183LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl81XzNfNyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDMgNycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfM184LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzNfOC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmEwZmNkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzNfOC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfNV8zXzgoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSAzIDgnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzVfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2NWQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzEucHkKQEAgLTAsMCArMSw1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCByZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzVfNV8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzUgNSAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1VzZXIgSW5wdXQgUmVxdWlyZWQnKToKKyAgICAgICAgICAgIGJvZHkgPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdjbmZybU1zZycpLnRleHQKKyAgICAgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHInKD88PUxlYWRlciBUaW1lb3V0XFspXGQrKD89IFNlY29uZHNcXSknLCBib2R5KQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IGludChtYXRjaC5ncm91cCgwKSkgLyAyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAxMAorICAgICAgICAgICAgc2VsZi5kdXQuc3RvcCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKHRpbWVvdXQpCisgICAgICAgICAgICBzZWxmLmR1dC5zdGFydCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNV8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZGQzMzUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNV8yLnB5CkBAIC0wLDAgKzEsNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfNV81XzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSA1IDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgaWYgdGl0bGUuc3RhcnRzd2l0aCgnVXNlciBJbnB1dCBSZXF1aXJlZCcpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RvcCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICBzZWxmLmR1dC5zdGFydCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNV8zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNTYwNTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNV8zLnB5CkBAIC0wLDAgKzEsNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfNV81XzMoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSA1IDMnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgaWYgdGl0bGUuc3RhcnRzd2l0aCgnUmVzZXQgRFVUJyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdG9wKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGVsaWYgdGl0bGUuc3RhcnRzd2l0aCgnUmVqb2luJyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdGFydCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzQucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNV80LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTViNTgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNV80LnB5CkBAIC0wLDAgKzEsNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfNV81XzQoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSA1IDQnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgaWYgdGl0bGUuc3RhcnRzd2l0aCgnUmVzZXQgRFVUJyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdG9wKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGVsaWYgdGl0bGUuc3RhcnRzd2l0aCgnUmVqb2luIE5vdycpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RhcnQoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNV83LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzVfNy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTAyMTljCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzVfNy5weQpAQCAtMCwwICsxLDUwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgTGVhZGVyXzVfNV83KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzUgNSA3JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlc2V0IERVVCcpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RvcCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlam9pbiBOb3cnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0YXJ0KCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzZfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV82XzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmMWFjNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV82XzIucHkKQEAgLTAsMCArMSw0MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIExlYWRlcl81XzZfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDYgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNl80LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzZfNC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWJjZWExCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzZfNC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfNV82XzQoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSA2IDQnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzZfNS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV82XzUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjMzkzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV82XzUucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzVfNl81KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzUgNiA1JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV82XzYucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNl82LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDY3OTgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNl82LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl81XzZfNihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDYgNicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfOF80LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzhfNC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTEwZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzhfNC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfNV84XzQoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSA4IDQnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl83XzFfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfN18xXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxZTc5OAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfN18xXzEucHkKQEAgLTAsMCArMSw0MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIExlYWRlcl83XzFfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc3IDEgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzdfMV8zLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl83XzFfMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTY2ODA4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl83XzFfMy5weQpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgTGVhZGVyXzdfMV8zKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzcgMSAzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOF8zXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzhfM18xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYmJiMGIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzhfM18xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl84XzNfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc4IDMgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjQ0N2JjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfOV8yXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnOSAyIDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMTEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTFkODNjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMTEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzlfMl8xMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc5IDIgMTEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMTIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjY1ODFjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMTIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzlfMl8xMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc5IDIgMTInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMTgucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xOC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzM0MGM3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMTgucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzlfMl8xOChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc5IDIgMTgnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5ZmRiZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzlfMl8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzkgMiAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MzhjZWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8zLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl85XzJfMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc5IDIgMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl80LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfNC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmZjY2ZlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfNC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfOV8yXzQoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnOSAyIDQnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfNS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwMWYzNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzUucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzlfMl81KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzkgMiA1JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzYucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl82LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzU0OGMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl82LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl85XzJfNihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc5IDIgNicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl83LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfNy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDNjYzMxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfNy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfOV8yXzcoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnOSAyIDcnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfOS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4N2ZjMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzkucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzlfMl85KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzkgMiA5JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9tZWRfNl8zXzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbWVkXzZfM18yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMTk0NWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbWVkXzZfM18yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIE1FRF82XzNfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTUVECisgICAgY2FzZSA9ICc2IDMgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbWVkXzlfMl8xMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9tZWRfOV8yXzEyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YzEwY2EKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbWVkXzlfMl8xMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBNRURfOV8yXzEyKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9NRUQKKyAgICBjYXNlID0gJzkgMiAxMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbWVkXzlfMl8xMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9tZWRfOV8yXzEzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOWJiNTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbWVkXzlfMl8xMy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBNRURfOV8yXzEzKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9NRUQKKyAgICBjYXNlID0gJzkgMiAxMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcmVlZF81XzJfNC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yZWVkXzVfMl80LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNjM1ODkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcmVlZF81XzJfNC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSRUVEXzVfMl80KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9SRUVECisgICAgY2FzZSA9ICc1IDIgNCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDE4CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JlZWRfNV8yXzUucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcmVlZF81XzJfNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDA1ZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JlZWRfNV8yXzUucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUkVFRF81XzJfNShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUkVFRAorICAgIGNhc2UgPSAnNSAyIDUnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxNworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yZWVkXzVfMl83LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JlZWRfNV8yXzcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhYWZkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yZWVkXzVfMl83LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJFRURfNV8yXzcoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JFRUQKKyAgICBjYXNlID0gJzUgMiA3JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMTYKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcmVlZF81XzVfNS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yZWVkXzVfNV81LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNjBiOTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcmVlZF81XzVfNS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSRUVEXzVfNV81KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9SRUVECisgICAgY2FzZSA9ICc1IDUgNScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDE2CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JlZWRfNV82XzcucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcmVlZF81XzZfNy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTA3NmZhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JlZWRfNV82XzcucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUkVFRF81XzZfNyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUkVFRAorICAgIGNhc2UgPSAnNSA2IDcnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxNgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMDU1MDIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzFfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDEgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8xMC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzEwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZmJiOWMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8xMC5weQpAQCAtMCwwICsxLDQ0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfNV8xXzEwKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMSAxMCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzExLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMTEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwOGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzExLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzFfMTEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAxIDExJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzEyLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMTIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjOTIyNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzEyLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzFfMTIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAxIDEyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzEzLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMTMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwYzAyZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzEzLnB5CkBAIC0wLDAgKzEsNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0aW1lCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfNV8xXzEzKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMSAxMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBpZiB0aXRsZS5zdGFydHN3aXRoKCdSZXNldCBEVVQnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0b3AoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZWxpZiB0aXRsZS5zdGFydHN3aXRoKCdSZWpvaW4gTm93Jyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdGFydCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ODJmODIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzFfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDEgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8zLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDk3NzIzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfNV8xXzMoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAxIDMnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfNC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U2Nzk5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzQucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzVfMV80KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMSA0JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzYucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV82LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NmIzZDgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV82LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzFfNihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDEgNicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV83LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfNy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTE2ZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfNy5weQpAQCAtMCwwICsxLDQ3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfNV8xXzcoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAxIDcnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ0VudGVyIFJvdXRlciBNYXggQ2hpbGQgQ291bnQnKToKKyAgICAgICAgICAgIGlucCA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2NuZnJtSW5wVGV4dCcpCisgICAgICAgICAgICBpbnAuY2xlYXIoKQorICAgICAgICAgICAgaW5wLnNlbmRfa2V5cygnNScpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzgucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV84LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NjU3MGIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV84LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzFfOChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDEgOCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV85LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfOS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjQwMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfOS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfNV8xXzkoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAxIDknCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzJfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8yXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwNzYzMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8yXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzVfMl8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMiAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8yXzYucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMl82LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MGJlNjcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMl82LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzJfNihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDIgNicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzJfNy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8yXzcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlMDBmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8yXzcucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzVfMl83KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMiA3JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMTYKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM18xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTFhZjdjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMS5weQpAQCAtMCwwICsxLDQxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUm91dGVyXzVfM18xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMyAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM18xMC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzEwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjM0NzEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM18xMC5weQpAQCAtMCwwICsxLDQxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUm91dGVyXzVfM18xMChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDMgMTAnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzExLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMTEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzOGJhZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzExLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBSb3V0ZXJfNV8zXzExKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMyAxMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiMTNhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzIucHkKQEAgLTAsMCArMSw0MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJvdXRlcl81XzNfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDMgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZlZWIwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzMucHkKQEAgLTAsMCArMSw0NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJvdXRlcl81XzNfMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDMgMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBpZiB0aXRsZS5zdGFydHN3aXRoKCdTdGFydCBEVVQnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LmVuYWJsZV9ibGFja2xpc3QoKQorICAgICAgICAgICAgc2VsZi5kdXQuYWRkX2JsYWNrbGlzdCgnMTY2ZTBhMDAwMDAwMDA1JykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzQucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM180LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZGNhNzYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM180LnB5CkBAIC0wLDAgKzEsNDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBSb3V0ZXJfNV8zXzQoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAzIDQnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA2CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzUucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM181LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NGMwZTgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM181LnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBSb3V0ZXJfNV8zXzUoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAzIDUnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfOS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0NTRlZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzkucHkKQEAgLTAsMCArMSw0MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJvdXRlcl81XzNfOShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDMgOScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzVfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV81XzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxMWY1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV81XzEucHkKQEAgLTAsMCArMSw0MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJvdXRlcl81XzVfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDUgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNV8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzVfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmJkZTAyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzVfMi5weQpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUm91dGVyXzVfNV8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgNSAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV81XzMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNV8zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZGU3YzgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNV8zLnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBSb3V0ZXJfNV81XzMoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSA1IDMnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzVfNC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV81XzQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhYjk2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV81XzQucHkKQEAgLTAsMCArMSw0MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJvdXRlcl81XzVfNChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDUgNCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNV83LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzVfNy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTQ4MWJkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzVfNy5weQpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUm91dGVyXzVfNV83KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgNSA3JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV82XzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNl8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNmQwMDkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNl8xLnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBSb3V0ZXJfNV82XzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSA2IDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzZfMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV82XzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdmZmIxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV82XzMucHkKQEAgLTAsMCArMSw0MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJvdXRlcl81XzZfMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDYgMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNl85LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzZfOS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmQ0MmE2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzZfOS5weQpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUm91dGVyXzVfNl85KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgNiA5JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV83XzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfN18xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyM2ExODkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfN18xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzdfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDcgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfOF8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzhfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGE2MjIxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzhfMi5weQpAQCAtMCwwICsxLDQxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKK2NsYXNzIFJvdXRlcl81XzhfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDggMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfOF8zLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzhfMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTI5YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzhfMy5weQpAQCAtMCwwICsxLDQxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKK2NsYXNzIFJvdXRlcl81XzhfMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDggMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzdfMV8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl83XzFfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjViZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl83XzFfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfN18xXzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNyAxIDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl83XzFfNC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfN18xXzQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlMzQxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfN18xXzQucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzdfMV80KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzcgMSA0JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfN18xXzUucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzdfMV81LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOWI5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzdfMV81LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl83XzFfNShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc3IDEgNScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzdfMV84LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl83XzFfOC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjc5NjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl83XzFfOC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfN18xXzgoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNyAxIDgnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl84XzJfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOF8yXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1MmNjZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOF8yXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzhfMl8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzggMiAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOF8yXzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzhfMl8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NTE2MGIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzhfMl8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl84XzJfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc4IDIgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzhfMl81LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl84XzJfNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWViMTQzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl84XzJfNS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOF8yXzUoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnOCAyIDUnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTAucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDRiZDNlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTAucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzlfMl8xMChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc5IDIgMTAnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTc0M2M2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzlfMl8xMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc5IDIgMTEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmE3YzhkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzlfMl8xMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc5IDIgMTInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjYwOGE3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTMucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzlfMl8xMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc5IDIgMTMnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTQucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xNC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2I3ZmQwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTQucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzlfMl8xNChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc5IDIgMTQnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTUucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTc5MzhmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTUucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzlfMl8xNShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc5IDIgMTUnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTYucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xNi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDFmOTNlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTYucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzlfMl8xNihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc5IDIgMTYnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTgucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xOC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDIyMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfMTgucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzlfMl8xOChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc5IDIgMTgnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfNi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2ZjdlNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzYucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzlfMl82KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzkgMiA2JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzgucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl84LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZmU2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl84LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl85XzJfOChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc5IDIgOCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl85LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfOS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmJmM2U5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfOS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOV8yXzkoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnOSAyIDknCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4NDk0NAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfMV8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgMSAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMDFmZGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzFfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDEgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV8zLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjljYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfMy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfNl8xXzMoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1NFRAorICAgIGNhc2UgPSAnNiAxIDMnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfNC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhMmU3YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzQucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfMV80KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgMSA0JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzUucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV81LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTk0NjQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV81LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzFfNShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDEgNScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV82LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfNi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTY4MWNmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfNi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfNl8xXzYoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1NFRAorICAgIGNhc2UgPSAnNiAxIDYnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzJfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8yXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE4ZDdlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8yXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfMl8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgMiAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8yXzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMl8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmQ4MTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMl8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzJfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDIgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfM18xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzNfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmU4N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzNfMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfNl8zXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1NFRAorICAgIGNhc2UgPSAnNiAzIDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzNfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8zXzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxYjYwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8zXzIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfM18yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgMyAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl80XzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNF8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjhmOGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNF8xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzRfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDQgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNF8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzRfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNkMmJkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzRfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfNl80XzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1NFRAorICAgIGNhc2UgPSAnNiA0IDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzVfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl81XzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzOTU4MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl81XzEucHkKQEAgLTAsMCArMSw0OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzVfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDUgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBpZiB0aXRsZS5zdGFydHN3aXRoKCdSZXNldCBEVVQnKToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5jaGlsZF90aW1lb3V0ICsgNSkKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0b3AoKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICAgICAgc2VsZi5kdXQuc3RhcnQoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNV8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzVfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmU1YjY3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzVfMi5weQpAQCAtMCwwICsxLDUwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfNV8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgNSAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlc2V0IERVVCcpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RvcCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlam9pbiBOb3cnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0YXJ0KCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzVfMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl81XzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmNzIwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl81XzMucHkKQEAgLTAsMCArMSw1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzVfMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDUgMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBpZiB0aXRsZS5zdGFydHN3aXRoKCdSZXNldCBEVVQnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0b3AoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZWxpZiB0aXRsZS5zdGFydHN3aXRoKCdSZWpvaW4gTm93Jyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdGFydCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl82XzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNl8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjBlZWUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNl8xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzZfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDYgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNl8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzZfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzFlMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzZfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfNl82XzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1NFRAorICAgIGNhc2UgPSAnNiA2IDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfMTAucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xMC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGI5ODU1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfMTAucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzlfMl8xMChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc5IDIgMTAnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfMTEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTIyOWZmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfMTEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzlfMl8xMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc5IDIgMTEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfMTMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzAzZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfMTMucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzlfMl8xMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc5IDIgMTMnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfMTcucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xNy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzE3NTAzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfMTcucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzlfMl8xNyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc5IDIgMTcnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfMTgucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xOC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTQzZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfMTgucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzlfMl8xOChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc5IDIgMTgnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfNi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfOV8yXzYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyMDgyNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfOV8yXzYucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzlfMl82KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzkgMiA2JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfOV8yXzgucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl84LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ODg5ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl84LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF85XzJfOChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc5IDIgOCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZG9jL2NvbXBvbmVudHMuZ3YgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZG9jL2NvbXBvbmVudHMuZ3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0OWM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9kb2MvY29tcG9uZW50cy5ndgpAQCAtMCwwICsxLDE4IEBACitkaWdyYXBoIEcgeworICBzdWJncmFwaCBjbHVzdGVyX29zIHsKKyAgICBzdHlsZT1maWxsZWQ7CisgICAgY29sb3I9Z3JleTsKKyAgICBsYWJlbD0iV2luZG93cyI7CisKKyAgICBzdWJncmFwaCBjbHVzdGVyX3B5dGhvbiB7CisgICAgICBsYWJlbD0iQXV0b21hdGlvbiBUb29sL1B5dGhvbiI7CisgICAgICBjb2xvcj1saWdodGdyZXk7CisgICAgICBIYXJuZXNzQ2FzZSAtPiBIYXJuZXNzQ29udHJvbGxlcjsKKyAgICAgIEhhcm5lc3NDYXNlIC0+IE9wZW5UaHJlYWRDb250cm9sbGVyOworICAgIH0KKworICAgIEhhcm5lc3NDYXNlIC0+IENocm9tZSBbbGFiZWw9InNlbGVuaXVtIl07CisgICAgSGFybmVzc0NvbnRyb2xsZXIgLT4gIlRocmVhZCBIYXJuZXNzIjsKKyAgfQorICBPcGVuVGhyZWFkQ29udHJvbGxlciAtPiBEVVQgW2xhYmVsPSJzZXJpYWwgcG9ydCJdOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2RvYy9jb21wb25lbnRzLnBuZyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9kb2MvY29tcG9uZW50cy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1NmExNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9kb2MvY29tcG9uZW50cy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2RvYy9jb25mLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2RvYy9jb25mLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjIwNDUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZG9jL2NvbmYucHkKQEAgLTAsMCArMSwzNjggQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKKyMKKyMgVGhyZWFkIEhhcm5lc3MgQXV0b21hdGlvbiBkb2N1bWVudGF0aW9uIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZSwgY3JlYXRlZCBieQorIyBzcGhpbngtcXVpY2tzdGFydCBvbiBXZWQgSnVuIDI5IDE1OjE4OjI0IDIwMTYuCisjCisjIFRoaXMgZmlsZSBpcyBleGVjZmlsZSgpZCB3aXRoIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBzZXQgdG8gaXRzCisjIGNvbnRhaW5pbmcgZGlyLgorIworIyBOb3RlIHRoYXQgbm90IGFsbCBwb3NzaWJsZSBjb25maWd1cmF0aW9uIHZhbHVlcyBhcmUgcHJlc2VudCBpbiB0aGlzCisjIGF1dG9nZW5lcmF0ZWQgZmlsZS4KKyMKKyMgQWxsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGhhdmUgYSBkZWZhdWx0OyB2YWx1ZXMgdGhhdCBhcmUgY29tbWVudGVkIG91dAorIyBzZXJ2ZSB0byBzaG93IHRoZSBkZWZhdWx0LgorCisjIElmIGV4dGVuc2lvbnMgKG9yIG1vZHVsZXMgdG8gZG9jdW1lbnQgd2l0aCBhdXRvZG9jKSBhcmUgaW4gYW5vdGhlciBkaXJlY3RvcnksCisjIGFkZCB0aGVzZSBkaXJlY3RvcmllcyB0byBzeXMucGF0aCBoZXJlLiBJZiB0aGUgZGlyZWN0b3J5IGlzIHJlbGF0aXZlIHRvIHRoZQorIyBkb2N1bWVudGF0aW9uIHJvb3QsIHVzZSBvcy5wYXRoLmFic3BhdGggdG8gbWFrZSBpdCBhYnNvbHV0ZSwgbGlrZSBzaG93biBoZXJlLgorIworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3BoaW54X3J0ZF90aGVtZQorCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5hYnNwYXRoKCcuLicpKQorCisjIC0tIEdlbmVyYWwgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB5b3VyIGRvY3VtZW50YXRpb24gbmVlZHMgYSBtaW5pbWFsIFNwaGlueCB2ZXJzaW9uLCBzdGF0ZSBpdCBoZXJlLgorIworIyBuZWVkc19zcGhpbnggPSAnMS4wJworCisjIEFkZCBhbnkgU3BoaW54IGV4dGVuc2lvbiBtb2R1bGUgbmFtZXMgaGVyZSwgYXMgc3RyaW5ncy4gVGhleSBjYW4gYmUKKyMgZXh0ZW5zaW9ucyBjb21pbmcgd2l0aCBTcGhpbnggKG5hbWVkICdzcGhpbnguZXh0LionKSBvciB5b3VyIGN1c3RvbQorIyBvbmVzLgorZXh0ZW5zaW9ucyA9IFsKKyAgICAnc3BoaW54LmV4dC5hdXRvZG9jJywKKyAgICAnc3BoaW54Y29udHJpYi5uYXBvbGVvbicKK10KKworIyBBZGQgYW55IHBhdGhzIHRoYXQgY29udGFpbiB0ZW1wbGF0ZXMgaGVyZSwgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuCit0ZW1wbGF0ZXNfcGF0aCA9IFsnX3RlbXBsYXRlcyddCisKKyMgVGhlIHN1ZmZpeChlcykgb2Ygc291cmNlIGZpbGVuYW1lcy4KKyMgWW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIHN1ZmZpeCBhcyBhIGxpc3Qgb2Ygc3RyaW5nOgorIworIyBzb3VyY2Vfc3VmZml4ID0gWycucnN0JywgJy5tZCddCitzb3VyY2Vfc3VmZml4ID0gJy5yc3QnCisKKyMgVGhlIGVuY29kaW5nIG9mIHNvdXJjZSBmaWxlcy4KKyMKKyMgc291cmNlX2VuY29kaW5nID0gJ3V0Zi04LXNpZycKKworIyBUaGUgbWFzdGVyIHRvY3RyZWUgZG9jdW1lbnQuCittYXN0ZXJfZG9jID0gJ2luZGV4JworCisjIEdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2plY3QuCitwcm9qZWN0ID0gdSdUaHJlYWQgSGFybmVzcyBBdXRvbWF0aW9uJworY29weXJpZ2h0ID0gdScyMDE2LCBZYWt1biBYdScKK2F1dGhvciA9IHUnWWFrdW4gWHUnCisKKyMgVGhlIHZlcnNpb24gaW5mbyBmb3IgdGhlIHByb2plY3QgeW91J3JlIGRvY3VtZW50aW5nLCBhY3RzIGFzIHJlcGxhY2VtZW50IGZvcgorIyB8dmVyc2lvbnwgYW5kIHxyZWxlYXNlfCwgYWxzbyB1c2VkIGluIHZhcmlvdXMgb3RoZXIgcGxhY2VzIHRocm91Z2hvdXQgdGhlCisjIGJ1aWx0IGRvY3VtZW50cy4KKyMKKyMgVGhlIHNob3J0IFguWSB2ZXJzaW9uLgordmVyc2lvbiA9IHUnMC41JworIyBUaGUgZnVsbCB2ZXJzaW9uLCBpbmNsdWRpbmcgYWxwaGEvYmV0YS9yYyB0YWdzLgorcmVsZWFzZSA9IHUnMC41JworCisjIFRoZSBsYW5ndWFnZSBmb3IgY29udGVudCBhdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueC4gUmVmZXIgdG8gZG9jdW1lbnRhdGlvbgorIyBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBsYW5ndWFnZXMuCisjCisjIFRoaXMgaXMgYWxzbyB1c2VkIGlmIHlvdSBkbyBjb250ZW50IHRyYW5zbGF0aW9uIHZpYSBnZXR0ZXh0IGNhdGFsb2dzLgorIyBVc3VhbGx5IHlvdSBzZXQgImxhbmd1YWdlIiBmcm9tIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZXNlIGNhc2VzLgorbGFuZ3VhZ2UgPSBOb25lCisKKyMgVGhlcmUgYXJlIHR3byBvcHRpb25zIGZvciByZXBsYWNpbmcgfHRvZGF5fDogZWl0aGVyLCB5b3Ugc2V0IHRvZGF5IHRvIHNvbWUKKyMgbm9uLWZhbHNlIHZhbHVlLCB0aGVuIGl0IGlzIHVzZWQ6CisjCisjIHRvZGF5ID0gJycKKyMKKyMgRWxzZSwgdG9kYXlfZm10IGlzIHVzZWQgYXMgdGhlIGZvcm1hdCBmb3IgYSBzdHJmdGltZSBjYWxsLgorIworIyB0b2RheV9mbXQgPSAnJUIgJWQsICVZJworCisjIExpc3Qgb2YgcGF0dGVybnMsIHJlbGF0aXZlIHRvIHNvdXJjZSBkaXJlY3RvcnksIHRoYXQgbWF0Y2ggZmlsZXMgYW5kCisjIGRpcmVjdG9yaWVzIHRvIGlnbm9yZSB3aGVuIGxvb2tpbmcgZm9yIHNvdXJjZSBmaWxlcy4KKyMgVGhpcyBwYXR0ZXJucyBhbHNvIGVmZmVjdCB0byBodG1sX3N0YXRpY19wYXRoIGFuZCBodG1sX2V4dHJhX3BhdGgKK2V4Y2x1ZGVfcGF0dGVybnMgPSBbJ19idWlsZCcsICdUaHVtYnMuZGInLCAnLkRTX1N0b3JlJ10KKworIyBUaGUgcmVTVCBkZWZhdWx0IHJvbGUgKHVzZWQgZm9yIHRoaXMgbWFya3VwOiBgdGV4dGApIHRvIHVzZSBmb3IgYWxsCisjIGRvY3VtZW50cy4KKyMKKyMgZGVmYXVsdF9yb2xlID0gTm9uZQorCisjIElmIHRydWUsICcoKScgd2lsbCBiZSBhcHBlbmRlZCB0byA6ZnVuYzogZXRjLiBjcm9zcy1yZWZlcmVuY2UgdGV4dC4KKyMKKyMgYWRkX2Z1bmN0aW9uX3BhcmVudGhlc2VzID0gVHJ1ZQorCisjIElmIHRydWUsIHRoZSBjdXJyZW50IG1vZHVsZSBuYW1lIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGFsbCBkZXNjcmlwdGlvbgorIyB1bml0IHRpdGxlcyAoc3VjaCBhcyAuLiBmdW5jdGlvbjo6KS4KKyMKKyMgYWRkX21vZHVsZV9uYW1lcyA9IFRydWUKKworIyBJZiB0cnVlLCBzZWN0aW9uYXV0aG9yIGFuZCBtb2R1bGVhdXRob3IgZGlyZWN0aXZlcyB3aWxsIGJlIHNob3duIGluIHRoZQorIyBvdXRwdXQuIFRoZXkgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdC4KKyMKKyMgc2hvd19hdXRob3JzID0gRmFsc2UKKworIyBUaGUgbmFtZSBvZiB0aGUgUHlnbWVudHMgKHN5bnRheCBoaWdobGlnaHRpbmcpIHN0eWxlIHRvIHVzZS4KK3B5Z21lbnRzX3N0eWxlID0gJ3NwaGlueCcKKworIyBBIGxpc3Qgb2YgaWdub3JlZCBwcmVmaXhlcyBmb3IgbW9kdWxlIGluZGV4IHNvcnRpbmcuCisjIG1vZGluZGV4X2NvbW1vbl9wcmVmaXggPSBbXQorCisjIElmIHRydWUsIGtlZXAgd2FybmluZ3MgYXMgInN5c3RlbSBtZXNzYWdlIiBwYXJhZ3JhcGhzIGluIHRoZSBidWlsdCBkb2N1bWVudHMuCisjIGtlZXBfd2FybmluZ3MgPSBGYWxzZQorCisjIElmIHRydWUsIGB0b2RvYCBhbmQgYHRvZG9MaXN0YCBwcm9kdWNlIG91dHB1dCwgZWxzZSB0aGV5IHByb2R1Y2Ugbm90aGluZy4KK3RvZG9faW5jbHVkZV90b2RvcyA9IEZhbHNlCisKKworIyAtLSBPcHRpb25zIGZvciBIVE1MIG91dHB1dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIHRoZW1lIHRvIHVzZSBmb3IgSFRNTCBhbmQgSFRNTCBIZWxwIHBhZ2VzLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorIyBhIGxpc3Qgb2YgYnVpbHRpbiB0aGVtZXMuCisjCisjaHRtbF90aGVtZSA9ICdhbGFiYXN0ZXInCitodG1sX3RoZW1lID0gJ3NwaGlueF9ydGRfdGhlbWUnCisKKyMgVGhlbWUgb3B0aW9ucyBhcmUgdGhlbWUtc3BlY2lmaWMgYW5kIGN1c3RvbWl6ZSB0aGUgbG9vayBhbmQgZmVlbCBvZiBhIHRoZW1lCisjIGZ1cnRoZXIuICBGb3IgYSBsaXN0IG9mIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBlYWNoIHRoZW1lLCBzZWUgdGhlCisjIGRvY3VtZW50YXRpb24uCisjCisjIGh0bWxfdGhlbWVfb3B0aW9ucyA9IHt9CisKKyMgQWRkIGFueSBwYXRocyB0aGF0IGNvbnRhaW4gY3VzdG9tIHRoZW1lcyBoZXJlLCByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS4KKyMgaHRtbF90aGVtZV9wYXRoID0gW10KK2h0bWxfdGhlbWVfcGF0aCA9IFtzcGhpbnhfcnRkX3RoZW1lLmdldF9odG1sX3RoZW1lX3BhdGgoKV0KKworIyBUaGUgbmFtZSBmb3IgdGhpcyBzZXQgb2YgU3BoaW54IGRvY3VtZW50cy4KKyMgIjxwcm9qZWN0PiB2PHJlbGVhc2U+IGRvY3VtZW50YXRpb24iIGJ5IGRlZmF1bHQuCisjCisjIGh0bWxfdGl0bGUgPSB1J1RocmVhZCBIYXJuZXNzIEF1dG9tYXRpb24gdjAuNScKKworIyBBIHNob3J0ZXIgdGl0bGUgZm9yIHRoZSBuYXZpZ2F0aW9uIGJhci4gIERlZmF1bHQgaXMgdGhlIHNhbWUgYXMgaHRtbF90aXRsZS4KKyMKKyMgaHRtbF9zaG9ydF90aXRsZSA9IE5vbmUKKworIyBUaGUgbmFtZSBvZiBhbiBpbWFnZSBmaWxlIChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkgdG8gcGxhY2UgYXQgdGhlIHRvcAorIyBvZiB0aGUgc2lkZWJhci4KKyMKKyMgaHRtbF9sb2dvID0gTm9uZQorCisjIFRoZSBuYW1lIG9mIGFuIGltYWdlIGZpbGUgKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KSB0byB1c2UgYXMgYSBmYXZpY29uIG9mCisjIHRoZSBkb2NzLiAgVGhpcyBmaWxlIHNob3VsZCBiZSBhIFdpbmRvd3MgaWNvbiBmaWxlICguaWNvKSBiZWluZyAxNngxNiBvciAzMngzMgorIyBwaXhlbHMgbGFyZ2UuCisjCisjIGh0bWxfZmF2aWNvbiA9IE5vbmUKKworIyBBZGQgYW55IHBhdGhzIHRoYXQgY29udGFpbiBjdXN0b20gc3RhdGljIGZpbGVzIChzdWNoIGFzIHN0eWxlIHNoZWV0cykgaGVyZSwKKyMgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuIFRoZXkgYXJlIGNvcGllZCBhZnRlciB0aGUgYnVpbHRpbiBzdGF0aWMgZmlsZXMsCisjIHNvIGEgZmlsZSBuYW1lZCAiZGVmYXVsdC5jc3MiIHdpbGwgb3ZlcndyaXRlIHRoZSBidWlsdGluICJkZWZhdWx0LmNzcyIuCitodG1sX3N0YXRpY19wYXRoID0gWydfc3RhdGljJ10KKworIyBBZGQgYW55IGV4dHJhIHBhdGhzIHRoYXQgY29udGFpbiBjdXN0b20gZmlsZXMgKHN1Y2ggYXMgcm9ib3RzLnR4dCBvcgorIyAuaHRhY2Nlc3MpIGhlcmUsIHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5LiBUaGVzZSBmaWxlcyBhcmUgY29waWVkCisjIGRpcmVjdGx5IHRvIHRoZSByb290IG9mIHRoZSBkb2N1bWVudGF0aW9uLgorIworIyBodG1sX2V4dHJhX3BhdGggPSBbXQorCisjIElmIG5vdCBOb25lLCBhICdMYXN0IHVwZGF0ZWQgb246JyB0aW1lc3RhbXAgaXMgaW5zZXJ0ZWQgYXQgZXZlcnkgcGFnZQorIyBib3R0b20sIHVzaW5nIHRoZSBnaXZlbiBzdHJmdGltZSBmb3JtYXQuCisjIFRoZSBlbXB0eSBzdHJpbmcgaXMgZXF1aXZhbGVudCB0byAnJWIgJWQsICVZJy4KKyMKKyMgaHRtbF9sYXN0X3VwZGF0ZWRfZm10ID0gTm9uZQorCisjIElmIHRydWUsIFNtYXJ0eVBhbnRzIHdpbGwgYmUgdXNlZCB0byBjb252ZXJ0IHF1b3RlcyBhbmQgZGFzaGVzIHRvCisjIHR5cG9ncmFwaGljYWxseSBjb3JyZWN0IGVudGl0aWVzLgorIworIyBodG1sX3VzZV9zbWFydHlwYW50cyA9IFRydWUKKworIyBDdXN0b20gc2lkZWJhciB0ZW1wbGF0ZXMsIG1hcHMgZG9jdW1lbnQgbmFtZXMgdG8gdGVtcGxhdGUgbmFtZXMuCisjCisjIGh0bWxfc2lkZWJhcnMgPSB7fQorCisjIEFkZGl0aW9uYWwgdGVtcGxhdGVzIHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkIHRvIHBhZ2VzLCBtYXBzIHBhZ2UgbmFtZXMgdG8KKyMgdGVtcGxhdGUgbmFtZXMuCisjCisjIGh0bWxfYWRkaXRpb25hbF9wYWdlcyA9IHt9CisKKyMgSWYgZmFsc2UsIG5vIG1vZHVsZSBpbmRleCBpcyBnZW5lcmF0ZWQuCisjCisjIGh0bWxfZG9tYWluX2luZGljZXMgPSBUcnVlCisKKyMgSWYgZmFsc2UsIG5vIGluZGV4IGlzIGdlbmVyYXRlZC4KKyMKKyMgaHRtbF91c2VfaW5kZXggPSBUcnVlCisKKyMgSWYgdHJ1ZSwgdGhlIGluZGV4IGlzIHNwbGl0IGludG8gaW5kaXZpZHVhbCBwYWdlcyBmb3IgZWFjaCBsZXR0ZXIuCisjCisjIGh0bWxfc3BsaXRfaW5kZXggPSBGYWxzZQorCisjIElmIHRydWUsIGxpbmtzIHRvIHRoZSByZVNUIHNvdXJjZXMgYXJlIGFkZGVkIHRvIHRoZSBwYWdlcy4KKyMKKyMgaHRtbF9zaG93X3NvdXJjZWxpbmsgPSBUcnVlCisKKyMgSWYgdHJ1ZSwgIkNyZWF0ZWQgdXNpbmcgU3BoaW54IiBpcyBzaG93biBpbiB0aGUgSFRNTCBmb290ZXIuIERlZmF1bHQgaXMgVHJ1ZS4KKyMKKyMgaHRtbF9zaG93X3NwaGlueCA9IFRydWUKKworIyBJZiB0cnVlLCAiKEMpIENvcHlyaWdodCAuLi4iIGlzIHNob3duIGluIHRoZSBIVE1MIGZvb3Rlci4gRGVmYXVsdCBpcyBUcnVlLgorIworIyBodG1sX3Nob3dfY29weXJpZ2h0ID0gVHJ1ZQorCisjIElmIHRydWUsIGFuIE9wZW5TZWFyY2ggZGVzY3JpcHRpb24gZmlsZSB3aWxsIGJlIG91dHB1dCwgYW5kIGFsbCBwYWdlcyB3aWxsCisjIGNvbnRhaW4gYSA8bGluaz4gdGFnIHJlZmVycmluZyB0byBpdC4gIFRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBtdXN0IGJlIHRoZQorIyBiYXNlIFVSTCBmcm9tIHdoaWNoIHRoZSBmaW5pc2hlZCBIVE1MIGlzIHNlcnZlZC4KKyMKKyMgaHRtbF91c2Vfb3BlbnNlYXJjaCA9ICcnCisKKyMgVGhpcyBpcyB0aGUgZmlsZSBuYW1lIHN1ZmZpeCBmb3IgSFRNTCBmaWxlcyAoZS5nLiAiLnhodG1sIikuCisjIGh0bWxfZmlsZV9zdWZmaXggPSBOb25lCisKKyMgTGFuZ3VhZ2UgdG8gYmUgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgSFRNTCBmdWxsLXRleHQgc2VhcmNoIGluZGV4LgorIyBTcGhpbnggc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBsYW5ndWFnZXM6CisjICAgJ2RhJywgJ2RlJywgJ2VuJywgJ2VzJywgJ2ZpJywgJ2ZyJywgJ2h1JywgJ2l0JywgJ2phJworIyAgICdubCcsICdubycsICdwdCcsICdybycsICdydScsICdzdicsICd0cicsICd6aCcKKyMKKyMgaHRtbF9zZWFyY2hfbGFuZ3VhZ2UgPSAnZW4nCisKKyMgQSBkaWN0aW9uYXJ5IHdpdGggb3B0aW9ucyBmb3IgdGhlIHNlYXJjaCBsYW5ndWFnZSBzdXBwb3J0LCBlbXB0eSBieSBkZWZhdWx0LgorIyAnamEnIHVzZXMgdGhpcyBjb25maWcgdmFsdWUuCisjICd6aCcgdXNlciBjYW4gY3VzdG9tIGNoYW5nZSBgamllYmFgIGRpY3Rpb25hcnkgcGF0aC4KKyMKKyMgaHRtbF9zZWFyY2hfb3B0aW9ucyA9IHsndHlwZSc6ICdkZWZhdWx0J30KKworIyBUaGUgbmFtZSBvZiBhIGphdmFzY3JpcHQgZmlsZSAocmVsYXRpdmUgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5KSB0aGF0CisjIGltcGxlbWVudHMgYSBzZWFyY2ggcmVzdWx0cyBzY29yZXIuIElmIGVtcHR5LCB0aGUgZGVmYXVsdCB3aWxsIGJlIHVzZWQuCisjCisjIGh0bWxfc2VhcmNoX3Njb3JlciA9ICdzY29yZXIuanMnCisKKyMgT3V0cHV0IGZpbGUgYmFzZSBuYW1lIGZvciBIVE1MIGhlbHAgYnVpbGRlci4KK2h0bWxoZWxwX2Jhc2VuYW1lID0gJ1RocmVhZEhhcm5lc3NBdXRvbWF0aW9uZG9jJworCisjIC0tIE9wdGlvbnMgZm9yIExhVGVYIG91dHB1dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbGF0ZXhfZWxlbWVudHMgPSB7CisgICAgICMgVGhlIHBhcGVyIHNpemUgKCdsZXR0ZXJwYXBlcicgb3IgJ2E0cGFwZXInKS4KKyAgICAgIworICAgICAjICdwYXBlcnNpemUnOiAnbGV0dGVycGFwZXInLAorCisgICAgICMgVGhlIGZvbnQgc2l6ZSAoJzEwcHQnLCAnMTFwdCcgb3IgJzEycHQnKS4KKyAgICAgIworICAgICAjICdwb2ludHNpemUnOiAnMTBwdCcsCisKKyAgICAgIyBBZGRpdGlvbmFsIHN0dWZmIGZvciB0aGUgTGFUZVggcHJlYW1ibGUuCisgICAgICMKKyAgICAgIyAncHJlYW1ibGUnOiAnJywKKworICAgICAjIExhdGV4IGZpZ3VyZSAoZmxvYXQpIGFsaWdubWVudAorICAgICAjCisgICAgICMgJ2ZpZ3VyZV9hbGlnbic6ICdodGJwJywKK30KKworIyBHcm91cGluZyB0aGUgZG9jdW1lbnQgdHJlZSBpbnRvIExhVGVYIGZpbGVzLiBMaXN0IG9mIHR1cGxlcworIyAoc291cmNlIHN0YXJ0IGZpbGUsIHRhcmdldCBuYW1lLCB0aXRsZSwKKyMgIGF1dGhvciwgZG9jdW1lbnRjbGFzcyBbaG93dG8sIG1hbnVhbCwgb3Igb3duIGNsYXNzXSkuCitsYXRleF9kb2N1bWVudHMgPSBbCisgICAgKG1hc3Rlcl9kb2MsICdUaHJlYWRIYXJuZXNzQXV0b21hdGlvbi50ZXgnLCB1J1RocmVhZCBIYXJuZXNzIEF1dG9tYXRpb24gRG9jdW1lbnRhdGlvbicsCisgICAgIHUnWWFrdW4gWHUnLCAnbWFudWFsJyksCitdCisKKyMgVGhlIG5hbWUgb2YgYW4gaW1hZ2UgZmlsZSAocmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkpIHRvIHBsYWNlIGF0IHRoZSB0b3Agb2YKKyMgdGhlIHRpdGxlIHBhZ2UuCisjCisjIGxhdGV4X2xvZ28gPSBOb25lCisKKyMgRm9yICJtYW51YWwiIGRvY3VtZW50cywgaWYgdGhpcyBpcyB0cnVlLCB0aGVuIHRvcGxldmVsIGhlYWRpbmdzIGFyZSBwYXJ0cywKKyMgbm90IGNoYXB0ZXJzLgorIworIyBsYXRleF91c2VfcGFydHMgPSBGYWxzZQorCisjIElmIHRydWUsIHNob3cgcGFnZSByZWZlcmVuY2VzIGFmdGVyIGludGVybmFsIGxpbmtzLgorIworIyBsYXRleF9zaG93X3BhZ2VyZWZzID0gRmFsc2UKKworIyBJZiB0cnVlLCBzaG93IFVSTCBhZGRyZXNzZXMgYWZ0ZXIgZXh0ZXJuYWwgbGlua3MuCisjCisjIGxhdGV4X3Nob3dfdXJscyA9IEZhbHNlCisKKyMgRG9jdW1lbnRzIHRvIGFwcGVuZCBhcyBhbiBhcHBlbmRpeCB0byBhbGwgbWFudWFscy4KKyMKKyMgbGF0ZXhfYXBwZW5kaWNlcyA9IFtdCisKKyMgSWYgZmFsc2UsIG5vIG1vZHVsZSBpbmRleCBpcyBnZW5lcmF0ZWQuCisjCisjIGxhdGV4X2RvbWFpbl9pbmRpY2VzID0gVHJ1ZQorCisKKyMgLS0gT3B0aW9ucyBmb3IgbWFudWFsIHBhZ2Ugb3V0cHV0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIE9uZSBlbnRyeSBwZXIgbWFudWFsIHBhZ2UuIExpc3Qgb2YgdHVwbGVzCisjIChzb3VyY2Ugc3RhcnQgZmlsZSwgbmFtZSwgZGVzY3JpcHRpb24sIGF1dGhvcnMsIG1hbnVhbCBzZWN0aW9uKS4KK21hbl9wYWdlcyA9IFsKKyAgICAobWFzdGVyX2RvYywgJ3RocmVhZGhhcm5lc3NhdXRvbWF0aW9uJywgdSdUaHJlYWQgSGFybmVzcyBBdXRvbWF0aW9uIERvY3VtZW50YXRpb24nLAorICAgICBbYXV0aG9yXSwgMSkKK10KKworIyBJZiB0cnVlLCBzaG93IFVSTCBhZGRyZXNzZXMgYWZ0ZXIgZXh0ZXJuYWwgbGlua3MuCisjCisjIG1hbl9zaG93X3VybHMgPSBGYWxzZQorCisKKyMgLS0gT3B0aW9ucyBmb3IgVGV4aW5mbyBvdXRwdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEdyb3VwaW5nIHRoZSBkb2N1bWVudCB0cmVlIGludG8gVGV4aW5mbyBmaWxlcy4gTGlzdCBvZiB0dXBsZXMKKyMgKHNvdXJjZSBzdGFydCBmaWxlLCB0YXJnZXQgbmFtZSwgdGl0bGUsIGF1dGhvciwKKyMgIGRpciBtZW51IGVudHJ5LCBkZXNjcmlwdGlvbiwgY2F0ZWdvcnkpCit0ZXhpbmZvX2RvY3VtZW50cyA9IFsKKyAgICAobWFzdGVyX2RvYywgJ1RocmVhZEhhcm5lc3NBdXRvbWF0aW9uJywgdSdUaHJlYWQgSGFybmVzcyBBdXRvbWF0aW9uIERvY3VtZW50YXRpb24nLAorICAgICBhdXRob3IsICdUaHJlYWRIYXJuZXNzQXV0b21hdGlvbicsICdPbmUgbGluZSBkZXNjcmlwdGlvbiBvZiBwcm9qZWN0LicsCisgICAgICdNaXNjZWxsYW5lb3VzJyksCitdCisKKyMgRG9jdW1lbnRzIHRvIGFwcGVuZCBhcyBhbiBhcHBlbmRpeCB0byBhbGwgbWFudWFscy4KKyMKKyMgdGV4aW5mb19hcHBlbmRpY2VzID0gW10KKworIyBJZiBmYWxzZSwgbm8gbW9kdWxlIGluZGV4IGlzIGdlbmVyYXRlZC4KKyMKKyMgdGV4aW5mb19kb21haW5faW5kaWNlcyA9IFRydWUKKworIyBIb3cgdG8gZGlzcGxheSBVUkwgYWRkcmVzc2VzOiAnZm9vdG5vdGUnLCAnbm8nLCBvciAnaW5saW5lJy4KKyMKKyMgdGV4aW5mb19zaG93X3VybHMgPSAnZm9vdG5vdGUnCisKKyMgSWYgdHJ1ZSwgZG8gbm90IGdlbmVyYXRlIGEgQGRldGFpbG1lbnUgaW4gdGhlICJUb3AiIG5vZGUncyBtZW51LgorIworIyB0ZXhpbmZvX25vX2RldGFpbG1lbnUgPSBGYWxzZQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2RvYy9pbmRleC5yc3QgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZG9jL2luZGV4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjkxZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2RvYy9pbmRleC5yc3QKQEAgLTAsMCArMSwyNSBAQAorLi4gVGhyZWFkIEhhcm5lc3MgQXV0b21hdGlvbiBkb2N1bWVudGF0aW9uIG1hc3RlciBmaWxlLCBjcmVhdGVkIGJ5CisgICBzcGhpbngtcXVpY2tzdGFydCBvbiBXZWQgSnVuIDI5IDE1OjE4OjI0IDIwMTYuCisgICBZb3UgY2FuIGFkYXB0IHRoaXMgZmlsZSBjb21wbGV0ZWx5IHRvIHlvdXIgbGlraW5nLCBidXQgaXQgc2hvdWxkIGF0IGxlYXN0CisgICBjb250YWluIHRoZSByb290IGB0b2N0cmVlYCBkaXJlY3RpdmUuCisKK1dlbGNvbWUgdG8gVGhyZWFkIEhhcm5lc3MgQXV0b21hdGlvbidzIGRvY3VtZW50YXRpb24hCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb250ZW50czoKKworLi4gdG9jdHJlZTo6CisgICA6bWF4ZGVwdGg6IDIKKworICAgcXVpY2tzdGFydAorICAgYXBpL21vZHVsZXMKKworCisKK0luZGljZXMgYW5kIHRhYmxlcworPT09PT09PT09PT09PT09PT09CisKKyogOnJlZjpgZ2VuaW5kZXhgCisqIDpyZWY6YG1vZGluZGV4YAorKiA6cmVmOmBzZWFyY2hgCisKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9kb2MvcXVpY2tzdGFydC5yc3QgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZG9jL3F1aWNrc3RhcnQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZWY4MzYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZG9jL3F1aWNrc3RhcnQucnN0CkBAIC0wLDAgKzEsNzkgQEAKK1RocmVhZCBIYXJuZXNzIEF1dG9tYXRpb24gUXVpY2sgU3RhcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU2V0dXAKKy0tLS0tCisKKyMuIEluc3RhbGwgVGhyZWFkLVRlc3QtSGFybmVzczEuMS1BbHBoYSB2MS4wLVJlbGVhc2VfNDAuMAorIy4gSW5zdGFsbCBweXRob24gMi43CisjLiBHZXQgdGhlIE9wZW5UaHJlYWQgYW5kIHN3aXRjaCB0byB0aGUgaGFybmVzcyBhdXRvbWF0aW9uIHBhdGg6OgorCisgICAgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQuZ2l0CisgICAgY2Qgb3BlbnRocmVhZC90b29scy9oYXJuZXNzLWF1dG9tYXRpb24KKworIy4gSW5zdGFsbCBweXRob24gbGlicmFyaWVzIGRlcGVuZGVuY2llczo6CisKKyAgICBwaXAgaW5zdGFsbCAtciByZXF1aXJlbWVudHMudHh0CisKKyMuIFVwZGF0ZSBzZXR0aW5ncy4KKworICAgIEp1c3QgY29weSB0aGUgc2FtcGxlIGFuZCBtb2RpZnkgYWNjb3JkaW5nIHRvIHRoZSBjb21tZW50cyBjYXJlZnVsbHk6OgorCisgICAgICAgIGNwIGF1dG90aHJlYWRoYXJuZXNzL3NldHRpbmdzX3NhbXBsZS5weSBhdXRvdGhyZWFkaGFybmVzcy9zZXR0aW5ncy5weQorCitSdW4gc2luZ2xlIGNhc2UKKy0tLS0tLS0tLS0tLS0tLQorCis6OgorCisgICAgIyBiYXNoCisgICAgLi9zdGFydC5zaCBSb3V0ZXJfNV8xXzEKKworICAgICMgd2luZG93cyBjb21tYW5kIGxpbmUKKyAgICBzdGFydC5iYXQgUm91dGVyXzVfMV8xCisKK1J1biBhbGwgY2FzZXMKKy0tLS0tLS0tLS0tLS0KKworOjoKKworICAgICMgYmFzaAorICAgIC4vc3RhcnQuc2gKKworICAgICMgd2luZG93cyBjb21tYW5kIGxpbmUKKyAgICBzdGFydC5iYXQKKworVGhpcyB3aWxsIHJlY29yZCB0aGUgcmVzdWx0cyBpbiByZXN1bHQuanNvbiwgc28gdGhhdCB5b3UgY2FuIGNvbnRpbnVlIHJ1bm5pbmcgY2FzZXMgb25jZSBicm9rZW4uIFlvdSBjYW4gYWxzbyBnZXQgaGVscCBpbmZvcm1hdGlvbiB3aXRoIGFyZ3VtZW50IC1oIG9yIC0taGVscC4KKworTGlzdCBkZXZpY2VzCistLS0tLS0tLS0tLS0KKworOjoKKworICAgICMgYmFzaAorICAgIC4vc3RhcnQuc2ggLWwKKworICAgICMgd2luZG93cyBjb21tYW5kIGxpbmUKKyAgICBzdGFydC5iYXQgLWwKKworQ2hlY2sgc2luZ2xlIGRldmljZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6OgorCisgICAgIyBiYXNoCisgICAgLi9zdGFydC5zaCAtbCBDT00yOAorCisgICAgIyB3aW5kb3dzIGNvbW1hbmQgbGluZQorICAgIHN0YXJ0LmJhdCAtbCBDT00yOAorCitHZXQgSGVscAorLS0tLS0tLS0tCisKKzo6CisKKyAgICAjIGJhc2gKKyAgICAuL3N0YXJ0LnNoIC1oCisKKyAgICAjIHdpbmRvd3MgY29tbWFuZCBsaW5lCisgICAgc3RhcnQuYmF0IC1oCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZ2VuY3N2LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2dlbmNzdi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNWQxNTJmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2dlbmNzdi5weQpAQCAtMCwwICsxLDIxIEBACisjIS91c3IvYmluL2VudiBweXRob24KK2ltcG9ydCBqc29uCitpbXBvcnQgc3lzCisKKworaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgZmlsZW5hbWUgPSBzeXMuYXJndlsxXQorZWxzZToKKyAgICBmaWxlbmFtZSA9ICcuL3Jlc3VsdC5qc29uJworCitkZWYgZ2V0X2tleShpdGVtKToKKyAgICBkcyA9IGl0ZW1bMF0uc3BsaXQoJ18nKQorICAgIG5vID0gaW50KGRzWzFdKSAqIDEwMDAwICsgaW50KGRzWzJdKSAqIDEwMCArIGludChkc1szXSkKKyAgICBybyA9IGRzWzBdCisgICAgcmV0dXJuICclZC0lcycgJSAobm8sIHJvKQorCityZXN1bHQgPSBqc29uLmxvYWQob3BlbihmaWxlbmFtZSwgJ3InKSkKK28gPSBvcGVuKCcuL3Jlc3VsdC5jc3YnLCAndycpCitvLndyaXRlKCdDYXNlLFN0YXR1cyxTdGFydGVkLFN0b3BwZWQsUmVhc29uXG4nKQorZm9yIGssIHYgaW4gc29ydGVkKHJlc3VsdC5pdGVtcygpLCBrZXk9Z2V0X2tleSk6CisgICAgby53cml0ZSgnJXMsJXMsJXMsJXMsJXNcbicgJSAoaywgKHZbJ3Bhc3NlZCddIGFuZCAnUGFzcycpIG9yICdGYWlsJywgdlsnc3RhcnRlZCddLCB2WydzdG9wcGVkJ10sICh2WydlcnJvciddIG9yICcnKS5yZXBsYWNlKCdcbicsICcgJykpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL3JlcXVpcmVtZW50cy50eHQgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vcmVxdWlyZW1lbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzYxMTdkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL3JlcXVpcmVtZW50cy50eHQKQEAgLTAsMCArMSwyIEBACitweXNlcmlhbAorc2VsZW5pdW0KZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9zdGFydC5iYXQgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vc3RhcnQuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTllZTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vc3RhcnQuYmF0CkBAIC0wLDAgKzEsMiBAQAorY2QgJX5kcDAKK3B5dGhvbiAtdSAtbSBhdXRvdGhyZWFkaGFybmVzcy5ydW5uZXIgJSoKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9zdGFydC5zaCBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9zdGFydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNWQ2MzliCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL3N0YXJ0LnNoCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCitjZCAkKGRpcm5hbWUgJDApCitweXRob24gLXUgLW0gYXV0b3RocmVhZGhhcm5lc3MucnVubmVyICRACmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLXRoY2kvTWFrZWZpbGUuYW0gYi90b29scy9oYXJuZXNzLXRoY2kvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3YWEyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtdGhjaS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDM4IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgID0gXAorICAgIE9wZW5UaHJlYWQucHkgICAgICAgICBcCisgICAgT3BlblRocmVhZC5wbmcgICAgICAgIFwKKyAgICBkZXZpY2VJbnB1dEZpZWxkcy54bWwgXAorICAgIFJFQURNRS5tZCAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtdGhjaS9PcGVuVGhyZWFkLnBuZyBiL3Rvb2xzL2hhcm5lc3MtdGhjaS9PcGVuVGhyZWFkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmQzOTgwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy10aGNpL09wZW5UaHJlYWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtdGhjaS9PcGVuVGhyZWFkLnB5IGIvdG9vbHMvaGFybmVzcy10aGNpL09wZW5UaHJlYWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVmODM1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtdGhjaS9PcGVuVGhyZWFkLnB5CkBAIC0wLDAgKzEsMjU5MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKz4+IFRocmVhZCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlCis+PiBEZXZpY2UgOiBPcGVuVGhyZWFkIFRIQ0kKKz4+IENsYXNzIDogT3BlblRocmVhZAorIiIiCisKK2ltcG9ydCByZQoraW1wb3J0IHRpbWUKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBsb2dnaW5nCitmcm9tIFF1ZXVlIGltcG9ydCBRdWV1ZQorCitpbXBvcnQgc2VyaWFsCitmcm9tIElUaGNpIGltcG9ydCBJVGhjaQorZnJvbSBHUkxMaWJzLlV0aWxpdHlNb2R1bGVzLlRlc3QgaW1wb3J0IFRocmVhZF9EZXZpY2VfUm9sZSwgRGV2aWNlX0RhdGFfUmVxdWlyZW1lbnQsIE1hY1R5cGUKK2Zyb20gR1JMTGlicy5VdGlsaXR5TW9kdWxlcy5lbnVtcyBpbXBvcnQgUGxhdGZvcm1EaWFnbm9zdGljUGFja2V0X0RpcmVjdGlvbiwgUGxhdGZvcm1EaWFnbm9zdGljUGFja2V0X1R5cGUKK2Zyb20gR1JMTGlicy5VdGlsaXR5TW9kdWxlcy5Nb2R1bGVIZWxwZXIgaW1wb3J0IE1vZHVsZUhlbHBlciwgVGhyZWFkUnVubmVyCitmcm9tIEdSTExpYnMuVGhyZWFkUGFja2V0LlBsYXRmb3JtUGFja2V0cyBpbXBvcnQgUGxhdGZvcm1EaWFnbm9zdGljUGFja2V0LCBQbGF0Zm9ybVBhY2tldHMKK2Zyb20gR1JMTGlicy5VdGlsaXR5TW9kdWxlcy5QbHVnaW5zLkFFU19DTUFDIGltcG9ydCBUaHJlYWRfUEJLREYyCisKK0xJTkVTRVBYID0gcmUuY29tcGlsZShyJ1xyXG58XG4nKQorIiIicmVnZXg6IHVzZWQgdG8gc3BsaXQgbGluZXMiIiIKKworY2xhc3MgT3BlblRocmVhZChJVGhjaSk6CisgICAgTE9XRVNUX1BPU1NJQkxFX1BBUlRBVElPTl9JRCA9IDB4MQorICAgIExJTktfUVVBTElUWV9DSEFOR0VfVElNRSA9IDEwMAorCisgICAgI2RlZiBfX2luaXRfXyhzZWxmLCBTZXJpYWxQb3J0PUNPTVBvcnROYW1lLCBFVUk9TUFDX0FkZHJlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgICIiImluaXRpYWxpemUgdGhlIHNlcmlhbCBwb3J0IGFuZCBkZWZhdWx0IG5ldHdvcmsgcGFyYW1ldGVycworICAgICAgICBBcmdzOgorICAgICAgICAgICAgKiprd2FyZ3M6IEFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVzICdFVUknIGFuZCAnU2VyaWFsUG9ydCcKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuVUlTdGF0dXNNc2cgPSAnJworICAgICAgICAgICAgc2VsZi5tYWMgPSBrd2FyZ3MuZ2V0KCdFVUknKQorICAgICAgICAgICAgc2VsZi5wb3J0ID0ga3dhcmdzLmdldCgnU2VyaWFsUG9ydCcpCisgICAgICAgICAgICBzZWxmLmhhbmRsZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuQXV0b0RVVEVuYWJsZSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl9pc19uZXQgPSBGYWxzZSAgICAgICAgICAgICAgICAgICMgd2hldGhlciBkZXZpY2UgaXMgdGhyb3VnaCBzZXIybmV0CisgICAgICAgICAgICBzZWxmLmxvZ1N0YXR1cyA9IHsnc3RvcCc6J3N0b3AnLCAncnVubmluZyc6J3J1bm5pbmcnLCAicGF1c2VSZXEiOidwYXVzZVJlcScsICdwYXVzZWQnOidwYXVzZWQnfQorICAgICAgICAgICAgc2VsZi5qb2luU3RhdHVzID0geydub3RzdGFydCc6J25vdHN0YXJ0JywgJ29uZ29pbmcnOidvbmdvaW5nJywgJ3N1Y2NlZWQnOidzdWNjZWVkJywgImZhaWxlZCI6J2ZhaWxlZCd9CisgICAgICAgICAgICBzZWxmLmxvZ1RocmVhZFN0YXR1cyA9IHNlbGYubG9nU3RhdHVzWydzdG9wJ10KKyAgICAgICAgICAgIHNlbGYuaW50aWFsaXplKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiaW5pdGlhbGl6ZSgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICIiImNsb3NlIHRoZSBzZXJpYWwgcG9ydCBjb25uZWN0aW9uIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY2xvc2VDb25uZWN0aW9uKCkKKyAgICAgICAgICAgIHNlbGYuZGV2aWNlQ29ubmVjdGVkID0gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiZGVsZXRlKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgX2V4cGVjdChzZWxmLCBleHBlY3RlZCwgdGltZXM9NTApOgorICAgICAgICAiIiJGaW5kIHRoZSBgZXhwZWN0ZWRgIGxpbmUgd2l0aGluIGB0aW1lc2AgdHJpYWxzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBleHBlY3RlZCAgICBzdHI6IHRoZSBleHBlY3RlZCBzdHJpbmcKKyAgICAgICAgICAgIHRpbWVzICAgICAgIGludDogbnVtYmVyIG9mIHRyaWFscworICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJ1slc10gRXhwZWN0aW5nIFslc10nICUgKHNlbGYucG9ydCwgZXhwZWN0ZWQpCisKKyAgICAgICAgcmV0cnlfdGltZXMgPSAxMAorICAgICAgICB3aGlsZSB0aW1lcyA+IDAgYW5kIHJldHJ5X3RpbWVzID4gMDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9yZWFkbGluZSgpCisgICAgICAgICAgICBwcmludCAnWyVzXSBHb3QgbGluZSBbJXNdJyAlIChzZWxmLnBvcnQsIGxpbmUpCisKKyAgICAgICAgICAgIGlmIGxpbmUgPT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgcHJpbnQgJ1slc10gRXhwZWN0ZWQgWyVzXScgJSAoc2VsZi5wb3J0LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgcmV0cnlfdGltZXMgLT0gMQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorCisgICAgICAgICAgICB0aW1lcyAtPSAxCisKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdmYWlsZWQgdG8gZmluZCBleHBlY3RlZCBzdHJpbmdbJXNdJyAlIGV4cGVjdGVkKQorCisgICAgZGVmIF9yZWFkKHNlbGYsIHNpemU9NTEyKToKKyAgICAgICAgbG9nZ2luZy5pbmZvKCclczogcmVhZGluZycsIHNlbGYucG9ydCkKKyAgICAgICAgaWYgc2VsZi5faXNfbmV0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlLnJlY3Yoc2l6ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZS5yZWFkKHNpemUpCisKKyAgICBkZWYgX3dyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBsb2dnaW5nLmluZm8oJyVzOiB3cml0aW5nJywgc2VsZi5wb3J0KQorICAgICAgICBpZiBzZWxmLl9pc19uZXQ6CisgICAgICAgICAgICBzZWxmLmhhbmRsZS5zZW5kYWxsKGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmhhbmRsZS53cml0ZShkYXRhKQorCisgICAgZGVmIF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgIiIiUmVhZCBleGFjdGx5IG9uZSBsaW5lIGZyb20gdGhlIGRldmljZQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBOb25lIG9uIG5vIGRhdGEKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dpbmcuaW5mbygnJXM6IHJlYWRpbmcgbGluZScsIHNlbGYucG9ydCkKKyAgICAgICAgaWYgbGVuKHNlbGYuX2xpbmVzKSA+IDE6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbGluZXMucG9wKDApCisKKyAgICAgICAgdGFpbCA9ICcnCisgICAgICAgIGlmIGxlbihzZWxmLl9saW5lcyk6CisgICAgICAgICAgICB0YWlsID0gc2VsZi5fbGluZXMucG9wKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWlsICs9IHNlbGYuX3JlYWQoKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oJyVzOiBObyBuZXcgZGF0YScsIHNlbGYucG9ydCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorCisgICAgICAgIHNlbGYuX2xpbmVzICs9IExJTkVTRVBYLnNwbGl0KHRhaWwpCisgICAgICAgIGlmIGxlbihzZWxmLl9saW5lcykgPiAxOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xpbmVzLnBvcCgwKQorCisgICAgZGVmIF9zZW5kbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiU2VuZCBleGFjdGx5IG9uZSBsaW5lIHRvIHRoZSBkZXZpY2UKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbGluZSBzdHI6IGRhdGEgc2VuZCB0byBkZXZpY2UKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dpbmcuaW5mbygnJXM6IHNlbmRpbmcgbGluZScsIHNlbGYucG9ydCkKKyAgICAgICAgIyBjbGVhciBidWZmZXIKKyAgICAgICAgc2VsZi5fbGluZXMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9yZWFkKCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJyVzOiBOb3RoaW5nIGNsZWFyZWQnLCBzZWxmLnBvcnQpCisKKyAgICAgICAgcHJpbnQgJ3NlbmRpbmcgWyVzXScgJSBsaW5lCisgICAgICAgIHNlbGYuX3dyaXRlKGxpbmUgKyAnXHJcbicpCisKKyAgICAgICAgIyB3YWl0IGZvciB3cml0ZSB0byBjb21wbGV0ZQorICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKworICAgIGRlZiBfX3NlbmRDb21tYW5kKHNlbGYsIGNtZCk6CisgICAgICAgICIiInNlbmQgc3BlY2lmaWMgY29tbWFuZCB0byByZWZlcmVuY2UgdW5pdCBvdmVyIHNlcmlhbCBwb3J0CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGNtZDogT3BlblRocmVhZCBDTEkgc3RyaW5nCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIERvbmU6IHN1Y2Nlc3NmdWxseSBzZW5kIHRoZSBjb21tYW5kIHRvIHJlZmVyZW5jZSB1bml0IGFuZCBwYXJzZSBpdAorICAgICAgICAgICAgVmFsdWU6IHN1Y2Nlc3NmdWxseSByZXRyaWV2ZSB0aGUgZGVzaXJlZCB2YWx1ZSBmcm9tIHJlZmVyZW5jZSB1bml0CisgICAgICAgICAgICBFcnJvcjogc29tZSBlcnJvcnMgb2NjdXIsIGluZGljYXRlcyBieSB0aGUgZm9sbG93ZWQgc3BlY2lmaWMgZXJyb3IgbnVtYmVyCisgICAgICAgICIiIgorICAgICAgICBsb2dnaW5nLmluZm8oJyVzOiBzZW5kQ29tbWFuZFslc10nLCBzZWxmLnBvcnQsIGNtZCkKKyAgICAgICAgaWYgc2VsZi5sb2dUaHJlYWRTdGF0dXMgPT0gc2VsZi5sb2dTdGF0dXNbJ3J1bm5pbmcnXToKKyAgICAgICAgICAgIHNlbGYubG9nVGhyZWFkU3RhdHVzID0gc2VsZi5sb2dTdGF0dXNbJ3BhdXNlUmVxJ10KKyAgICAgICAgICAgIHdoaWxlIHNlbGYubG9nVGhyZWFkU3RhdHVzICE9IHNlbGYubG9nU3RhdHVzWydwYXVzZWQnXSBhbmQgc2VsZi5sb2dUaHJlYWRTdGF0dXMgIT0gc2VsZi5sb2dTdGF0dXNbJ3N0b3AnXToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBjb21tYW5kIHJldHJhbnNtaXQgdGltZXMKKyAgICAgICAgICAgIHJldHJ5X3RpbWVzID0gMworICAgICAgICAgICAgd2hpbGUgcmV0cnlfdGltZXMgPiAwOgorICAgICAgICAgICAgICAgIHJldHJ5X3RpbWVzIC09IDEKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRsaW5lKGNtZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0KGNtZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCclczogZmFpbGVkIHRvIHNlbmQgY29tbWFuZFslc106ICVzJywgc2VsZi5wb3J0LCBjbWQsIHN0cihlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmV0cnlfdGltZXMgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgbGluZSA9IE5vbmUKKyAgICAgICAgICAgIHJlc3BvbnNlID0gW10KKyAgICAgICAgICAgIHJldHJ5X3RpbWVzID0gMTAKKyAgICAgICAgICAgIHdoaWxlIHJldHJ5X3RpbWVzID4gMDoKKyAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fcmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnJXM6IHRoZSByZWFkIGxpbmUgaXNbJXNdJywgc2VsZi5wb3J0LCBsaW5lKQorICAgICAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0cnlfdGltZXMgLT0gMQorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgIGlmIGxpbmUgIT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignJXM6IGZhaWxlZCB0byBmaW5kIGVuZCBvZiByZXNwb25zZScgJSBzZWxmLnBvcnQpCisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyVzOiBzZW5kIGNvbW1hbmRbJXNdIGRvbmUhJywgc2VsZi5wb3J0LCBjbWQpCisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2VuZENvbW1hbmQoKSBFcnJvcjogIiArIHN0cihlKSkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgX19nZXRJcDZBZGRyZXNzKHNlbGYsIGFkZHJlc3NUeXBlKToKKyAgICAgICAgIiIiZ2V0IHNwZWNpZmljIHR5cGUgb2YgSVB2NiBhZGRyZXNzIGNvbmZpZ3VyZWQgb24gdGhyZWFkIGRldmljZQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBhZGRyZXNzVHlwZTogdGhlIHNwZWNpZmljIHR5cGUgb2YgSVB2NiBhZGRyZXNzCisKKyAgICAgICAgICAgIGxpbmsgbG9jYWw6IGxpbmsgbG9jYWwgdW5pY2FzdCBJUHY2IGFkZHJlc3MgdGhhdCdzIHdpdGhpbiBvbmUtaG9wIHNjb3BlCisgICAgICAgICAgICBnbG9iYWw6IGdsb2JhbCB1bmljYXN0IElQdjYgYWRkcmVzcworICAgICAgICAgICAgcmxvYzogbWVzaCBsb2NhbCB1bmljYXN0IElQdjYgYWRkcmVzcyBmb3Igcm91dGluZyBpbiB0aHJlYWQgbmV0d29yaworICAgICAgICAgICAgbWVzaCBFSUQ6IG1lc2ggRW5kcG9pbnQgSWRlbnRpZmllcgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBJUHY2IGFkZHJlc3Mgc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBhZGRyVHlwZSA9IFsnbGluayBsb2NhbCcsICdnbG9iYWwnLCAncmxvYycsICdtZXNoIEVJRCddCisgICAgICAgIGFkZHJzID0gW10KKyAgICAgICAgZ2xvYmFsQWRkciA9IFtdCisgICAgICAgIGxpbmtMb2NhbDY0QWRkciA9ICcnCisgICAgICAgIHJsb2NBZGRyID0gJycKKyAgICAgICAgbWVzaEVJREFkZHIgPSAnJworCisgICAgICAgIGFkZHJzID0gc2VsZi5fX3NlbmRDb21tYW5kKCdpcGFkZHInKQorICAgICAgICBmb3IgaXA2QWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGlwNkFkZHIgPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlwNkFkZHJQcmVmaXggPSBpcDZBZGRyLnNwbGl0KCc6JylbMF0KKyAgICAgICAgICAgIGlmIGlwNkFkZHJQcmVmaXggPT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgICMgbGluayBsb2NhbCBhZGRyZXNzCisgICAgICAgICAgICAgICAgaWYgaXA2QWRkci5zcGxpdCgnOicpWzRdICE9ICcwJzoKKyAgICAgICAgICAgICAgICAgICAgbGlua0xvY2FsNjRBZGRyID0gaXA2QWRkcgorICAgICAgICAgICAgZWxpZiBpcDZBZGRyUHJlZml4ID09ICdmZDAwJzoKKyAgICAgICAgICAgICAgICAjIG1lc2ggbG9jYWwgYWRkcmVzcworICAgICAgICAgICAgICAgIGlmIGlwNkFkZHIuc3BsaXQoJzonKVs0XSA9PSAnMCc6CisgICAgICAgICAgICAgICAgICAgICMgcmxvYworICAgICAgICAgICAgICAgICAgICBybG9jQWRkciA9IGlwNkFkZHIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIG1lc2ggRUlECisgICAgICAgICAgICAgICAgICAgIG1lc2hFSURBZGRyID0gaXA2QWRkcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGdsb2JhbCBpcHY2IGFkZHJlc3MKKyAgICAgICAgICAgICAgICBpZiBpcDZBZGRyICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGdsb2JhbEFkZHIuYXBwZW5kKGlwNkFkZHIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIGFkZHJlc3NUeXBlID09IGFkZHJUeXBlWzBdOgorICAgICAgICAgICAgcmV0dXJuIGxpbmtMb2NhbDY0QWRkcgorICAgICAgICBlbGlmIGFkZHJlc3NUeXBlID09IGFkZHJUeXBlWzFdOgorICAgICAgICAgICAgcmV0dXJuIGdsb2JhbEFkZHIKKyAgICAgICAgZWxpZiBhZGRyZXNzVHlwZSA9PSBhZGRyVHlwZVsyXToKKyAgICAgICAgICAgIHJldHVybiBybG9jQWRkcgorICAgICAgICBlbGlmIGFkZHJlc3NUeXBlID09IGFkZHJUeXBlWzNdOgorICAgICAgICAgICAgcmV0dXJuIG1lc2hFSURBZGRyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX19zZXREZXZpY2VNb2RlKHNlbGYsIG1vZGUpOgorICAgICAgICAiIiJzZXQgdGhyZWFkIGRldmljZSBtb2RlOgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgIG1vZGU6IHRocmVhZCBkZXZpY2UgbW9kZQorICAgICAgICAgICByOiByeC1vbi13aGVuLWlkbGUKKyAgICAgICAgICAgczogc2VjdXJlIElFRUUgODAyLjE1LjQgZGF0YSByZXF1ZXN0CisgICAgICAgICAgIGQ6IGZ1bGwgZnVuY3Rpb24gZGV2aWNlCisgICAgICAgICAgIG46IGZ1bGwgbmV0d29yayBkYXRhCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgdGhlIGRldmljZSBtb2RlCisgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCB0aGUgZGV2aWNlIG1vZGUKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICdjYWxsIF9fc2V0RGV2aWNlTW9kZScKKyAgICAgICAgcHJpbnQgbW9kZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnbW9kZSAlcycgJSBtb2RlCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInNldERldmljZU1vZGUoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBfX3NldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQoc2VsZiwgaVRocmVzaG9sZCk6CisgICAgICAgICIiInNldCByb3V0ZXIgdXBncmFkZSB0aHJlc2hvbGQKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgaVRocmVzaG9sZDogdGhlIG51bWJlciBvZiBhY3RpdmUgcm91dGVycyBvbiB0aGUgVGhyZWFkIG5ldHdvcmsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiBiZWxvdyB3aGljaCBhIFJFRUQgbWF5IGRlY2lkZSB0byBiZWNvbWUgYSBSb3V0ZXIuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBST1VURVJfVVBHUkFERV9USFJFU0hPTEQKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCBST1VURVJfVVBHUkFERV9USFJFU0hPTEQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICdjYWxsIF9fc2V0Um91dGVyVXBncmFkZVRocmVzaG9sZCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ3JvdXRlcnVwZ3JhZGV0aHJlc2hvbGQgJXMnICUgc3RyKGlUaHJlc2hvbGQpCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0Um91dGVyVXBncmFkZVRocmVzaG9sZCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIF9fc2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKHNlbGYsIGlUaHJlc2hvbGQpOgorICAgICAgICAiIiJzZXQgcm91dGVyIGRvd25ncmFkZSB0aHJlc2hvbGQKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgaVRocmVzaG9sZDogdGhlIG51bWJlciBvZiBhY3RpdmUgcm91dGVycyBvbiB0aGUgVGhyZWFkIG5ldHdvcmsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiBhYm92ZSB3aGljaCBhbiBhY3RpdmUgcm91dGVyIG1heSBkZWNpZGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJlY29tZSBhIGNoaWxkLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCB0aGUgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCBST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJ2NhbGwgX19zZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdyb3V0ZXJkb3duZ3JhZGV0aHJlc2hvbGQgJXMnICUgc3RyKGlUaHJlc2hvbGQpCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgX19zZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoc2VsZiwgaVJvdXRlckppdHRlcik6CisgICAgICAgICIiInNldCBST1VURVJfU0VMRUNUSU9OX0pJVFRFUiBwYXJhbWV0ZXIgZm9yIFJFRUQgdG8gdXBncmFkZSB0byBSb3V0ZXIKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgaVJvdXRlckppdHRlcjogYSByYW5kb20gcGVyaW9kIHByaW9yIHRvIHJlcXVlc3QgUm91dGVyIElEIGZvciBSRUVECisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBST1VURVJfU0VMRUNUSU9OX0pJVFRFUgorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnY2FsbCBfc2V0Um91dGVyU2VsZWN0aW9uSml0dGVyJworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAncm91dGVyc2VsZWN0aW9uaml0dGVyICVzJyAlIHN0cihpUm91dGVySml0dGVyKQorICAgICAgICAgICAgcHJpbnQgY21kCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZCkgPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInNldFJvdXRlclNlbGVjdGlvbkppdHRlcigpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIF9fZW5hYmxlV2hpdGVMaXN0KHNlbGYpOgorICAgICAgICAiIiJlbmFibGUgd2hpdGUgbGlzdCBmaWx0ZXIKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBlbmFibGUgd2hpdGUgbGlzdCBmaWx0ZXIKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIGVuYWJsZSB3aGl0ZSBsaXN0IGZpbHRlcgorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJ2NhbGwgZW5hYmxlV2hpdGVMaXN0JworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoJ3doaXRlbGlzdCBlbmFibGUnKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgc2VsZi5pc1doaXRlTGlzdEVuYWJsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImVuYWJsZVdoaXRlTGlzdCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIF9fZW5hYmxlQmxhY2tMaXN0KHNlbGYpOgorICAgICAgICAiIiJlbmFibGUgYmxhY2sgbGlzdCBmaWx0ZXIKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBlbmFibGUgYmxhY2sgbGlzdCBmaWx0ZXIKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIGVuYWJsZSBibGFjayBsaXN0IGZpbHRlcgorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJ2NhbGwgZW5hYmxlQmxhY2tMaXN0JworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoJ2JsYWNrbGlzdCBlbmFibGUnKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgc2VsZi5pc0JsYWNrTGlzdEVuYWJsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImVuYWJsZUJsYWNrTGlzdCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIF9fZGlzYWJsZVdoaXRlTGlzdChzZWxmKToKKyAgICAgICAgIiIiZGlzYWJsZSB3aGl0ZSBsaXN0IGZpbHRlcgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIGRpc2FibGUgd2hpdGUgbGlzdCBmaWx0ZXIKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIGRpc2FibGUgd2hpdGUgbGlzdCBmaWx0ZXIKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICdjYWxsIGRpc2FibGVXaGl0ZUxpc3QnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZCgnd2hpdGVsaXN0IGRpc2FibGUnKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgc2VsZi5pc1doaXRlTGlzdEVuYWJsZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJkaXNhYmxlV2hpdGVMaXN0KCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgX19kaXNhYmxlQmxhY2tMaXN0KHNlbGYpOgorICAgICAgICAiIiJkaXNhYmxlIGJsYWNrIGxpc3QgZmlsdGVyCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gZGlzYWJsZSBibGFjayBsaXN0IGZpbHRlcgorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gZGlzYWJsZSBibGFjayBsaXN0IGZpbHRlcgorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJ2NhbGwgZGlzYWJsZUJsYWNrTGlzdCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKCdibGFja2xpc3QgZGlzYWJsZScpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICBzZWxmLmlzQmxhY2tMaXN0RW5hYmxlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImRpc2FibGVCbGFja0xpc3QoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBfX3N0YXJ0T3BlblRocmVhZChzZWxmKToKKyAgICAgICAgIiIic3RhcnQgT3BlblRocmVhZCBzdGFjaworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHN0YXJ0IE9wZW5UaHJlYWQgc3RhY2sgYW5kIHRocmVhZCBpbnRlcmZhY2UgdXAKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHN0YXJ0IE9wZW5UaHJlYWQgc3RhY2sKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICdjYWxsIHN0YXJ0T3BlblRocmVhZCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5oYXNBY3RpdmVEYXRhc2V0VG9Db21taXQ6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKCdkYXRhc2V0IGNvbW1pdCBhY3RpdmUnKVswXSAhPSAnRG9uZSc6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignZmFpbGVkIHRvIGNvbW1pdCBhY3RpdmUgZGF0YXNldCcpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYXNBY3RpdmVEYXRhc2V0VG9Db21taXQgPSBGYWxzZQorCisgICAgICAgICAgICAjIHJlc3RvcmUgd2hpdGVsaXN0IGlmIHJlam9pbiBhZnRlciByZXNldAorICAgICAgICAgICAgaWYgc2VsZi5pc1Bvd2VyRG93biBhbmQgc2VsZi5pc1doaXRlTGlzdEVuYWJsZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5fX2VuYWJsZVdoaXRlTGlzdCgpCisgICAgICAgICAgICAgICAgZm9yIGFkZHIgaW4gc2VsZi5fd2hpdGVMaXN0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZEFsbG93TUFDKGFkZHIpCisKKyAgICAgICAgICAgICMgcmVzdG9yZSBibGFja2xpc3QgaWYgcmVqb2luIGFmdGVyIHJlc2V0CisgICAgICAgICAgICBpZiBzZWxmLmlzUG93ZXJEb3duIGFuZCBzZWxmLmlzQmxhY2tMaXN0RW5hYmxlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9fZW5hYmxlQmxhY2tMaXN0KCkKKyAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBzZWxmLl9ibGFja0xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkQmxvY2tlZE1BQyhhZGRyKQorCisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoJ2lmY29uZmlnIHVwJylbMF0gPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgIHNlbGYuX19zZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoMSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoJ3RocmVhZCBzdGFydCcpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pc1Bvd2VyRG93biA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzdGFydE9wZW5UaHJlYWQoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBfX3N0b3BPcGVuVGhyZWFkKHNlbGYpOgorICAgICAgICAiIiJzdG9wIE9wZW5UaHJlYWQgc3RhY2sKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzdG9wIE9wZW5UaHJlYWQgc3RhY2sgYW5kIHRocmVhZCBpbnRlcmZhY2UgZG93bgorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc3RvcCBPcGVuVGhyZWFkIHN0YWNrCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnY2FsbCBzdG9wT3BlblRocmVhZCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKCd0aHJlYWQgc3RvcCcpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKCdpZmNvbmZpZyBkb3duJylbMF0gPT0gJ0RvbmUnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzdG9wT3BlblRocmVhZCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIF9faXNPcGVuVGhyZWFkUnVubmluZyhzZWxmKToKKyAgICAgICAgIiIiY2hlY2sgd2hldGhlciBvciBub3QgT3BlblRocmVhZCBpcyBydW5uaW5nCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IE9wZW5UaHJlYWQgaXMgcnVubmluZworICAgICAgICAgICAgRmFsc2U6IE9wZW5UaHJlYWQgaXMgbm90IHJ1bm5pbmcKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICdjYWxsIGlzT3BlblRocmVhZFJ1bm5pbmcnCisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoJ3N0YXRlJylbMF0gIT0gJ2Rpc2FibGVkJworCisgICAgIyBybG9jMTYgbWlnaHQgYmUgaGV4IHN0cmluZyBvciBpbnRlZ2VyLCBuZWVkIHRvIHJldHVybiBhY3R1YWwgYWxsb2NhdGVkIHJvdXRlciBpZAorICAgIGRlZiBfX2NvbnZlcnRSbG9jVG9Sb3V0ZXJJZChzZWxmLCB4UmxvYzE2KToKKyAgICAgICAgIiIibWFwcGluZyBSbG9jMTYgdG8gcm91dGVyIGlkCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHhSbG9jMTY6IGhleCBybG9jMTYgc2hvcnQgYWRkcmVzcworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBhY3R1YWwgcm91dGVyIGlkIGFsbG9jYXRlZCBieSBsZWFkZXIKKyAgICAgICAgIiIiCisgICAgICAgIHJvdXRlckxpc3QgPSBbXQorICAgICAgICByb3V0ZXJMaXN0ID0gc2VsZi5fX3NlbmRDb21tYW5kKCdyb3V0ZXIgbGlzdCcpWzBdLnNwbGl0KCkKKyAgICAgICAgcHJpbnQgcm91dGVyTGlzdAorICAgICAgICBwcmludCB4UmxvYzE2CisKKyAgICAgICAgZm9yIGluZGV4IGluIHJvdXRlckxpc3Q6CisgICAgICAgICAgICByb3V0ZXIgPSBbXQorICAgICAgICAgICAgY21kID0gJ3JvdXRlciAlcycgJSBpbmRleAorICAgICAgICAgICAgcm91dGVyID0gc2VsZi5fX3NlbmRDb21tYW5kKGNtZCkKKworICAgICAgICAgICAgZm9yIGxpbmUgaW4gcm91dGVyOgorICAgICAgICAgICAgICAgIGlmICdEb25lJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsaWYgJ1JvdXRlciBJRCcgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgcm91dGVyaWQgPSBsaW5lLnNwbGl0KClbMl0KKyAgICAgICAgICAgICAgICBlbGlmICdSbG9jJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBybG9jMTYgPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICMgcHJvY2VzcyBpbnB1dCBybG9jMTYKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoeFJsb2MxNiwgc3RyKToKKyAgICAgICAgICAgICAgICBybG9jMTYgPSAnMHgnICsgcmxvYzE2CisgICAgICAgICAgICAgICAgaWYgcmxvYzE2ID09IHhSbG9jMTY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3V0ZXJpZAorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHhSbG9jMTYsIGludCk6CisgICAgICAgICAgICAgICAgaWYgaW50KHJsb2MxNiwgMTYpID09IHhSbG9jMTY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3V0ZXJpZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfX2NvbnZlcnRJcDZQcmVmaXhTdHJpbmdUb0lwNkFkZHJlc3Moc2VsZiwgc3RySXA2UHJlZml4KToKKyAgICAgICAgIiIiY29udmVydCBJUHY2IHByZWZpeCBzdHJpbmcgdG8gSVB2NiBkb3R0ZWQtcXVhZCBmb3JtYXQKKyAgICAgICAgICAgZm9yIGV4YW1wbGU6CisgICAgICAgICAgIDIwMDEwMDAwMDAwMDAwMDAgLT4gMjAwMTo6CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHN0cklwNlByZWZpeDogSVB2NiBhZGRyZXNzIHN0cmluZworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBJUHY2IGFkZHJlc3MgZG90dGVkLXF1YWQgZm9ybWF0CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc3RySXA2UHJlZml4WzA6NF0gKyAnOjonCisKKyAgICBkZWYgX19jb252ZXJ0TG9uZ1RvU3RyaW5nKHNlbGYsIGlWYWx1ZSk6CisgICAgICAgICIiImNvbnZlcnQgYSBsb25nIGhleCBpbnRlZ2VyIHRvIHN0cmluZworICAgICAgICAgICByZW1vdmUgJzB4JyBhbmQgJ0wnIHJldHVybiBzdHJpbmcKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgaVZhbHVlOiBsb25nIGludGVnZXIgaW4gaGV4IGZvcm1hdAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBzdHJpbmcgb2YgdGhpcyBsb25nIGludGVnZXIgd2l0aG91dCAiMHgiIGFuZCAiTCIKKyAgICAgICAgIiIiCisgICAgICAgIHN0cmluZyA9ICcnCisgICAgICAgIHN0clZhbHVlID0gc3RyKGhleChpVmFsdWUpKQorCisgICAgICAgIHN0cmluZyA9IHN0clZhbHVlLmxzdHJpcCgnMHgnKQorICAgICAgICBzdHJpbmcgPSBzdHJpbmcucnN0cmlwKCdMJykKKworICAgICAgICByZXR1cm4gc3RyaW5nCisKKyAgICBkZWYgX19yZWFkQ29tbWlzc2lvbmluZ0xvZ3Moc2VsZiwgZHVyYXRpb25JblNlY29uZHMpOgorICAgICAgICAiIiJyZWFkIGxvZ3MgZHVyaW5nIHRoZSBjb21taXNzaW9uaW5nIHByb2Nlc3MKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZHVyYXRpb25JblNlY29uZHM6IHRpbWUgZHVyYXRpb24gZm9yIHJlYWRpbmcgY29tbWlzc2lvbmluZyBsb2dzCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIENvbW1pc3Npb25pbmcgbG9ncworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5sb2dUaHJlYWRTdGF0dXMgPSBzZWxmLmxvZ1N0YXR1c1sncnVubmluZyddCisgICAgICAgIGxvZ3MgPSBRdWV1ZSgpCisgICAgICAgIHRfZW5kID0gdGltZS50aW1lKCkgKyBkdXJhdGlvbkluU2Vjb25kcworICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSA8IHRfZW5kOgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjMpCisgICAgICAgICAgICBpZiBzZWxmLmxvZ1RocmVhZFN0YXR1cyA9PSBzZWxmLmxvZ1N0YXR1c1sncGF1c2VkJ106CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgbGluZQorICAgICAgICAgICAgICAgICAgICBsb2dzLnB1dChsaW5lKQorCisgICAgICAgICAgICAgICAgICAgIGlmICJKb2luIHN1Y2Nlc3MiIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmpvaW5Db21taXNzaW9uZWRTdGF0dXMgPSBzZWxmLmpvaW5TdGF0dXNbJ3N1Y2NlZWQnXQorICAgICAgICAgICAgICAgICAgICBlbGlmICJKb2luIGZhaWxlZCIgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuam9pbkNvbW1pc3Npb25lZFN0YXR1cyA9IHNlbGYuam9pblN0YXR1c1snZmFpbGVkJ10KKworICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGlmIHNlbGYubG9nVGhyZWFkU3RhdHVzID09IHNlbGYubG9nU3RhdHVzWydwYXVzZVJlcSddOgorICAgICAgICAgICAgICAgIHNlbGYubG9nVGhyZWFkU3RhdHVzID0gc2VsZi5sb2dTdGF0dXNbJ3BhdXNlZCddCisKKyAgICAgICAgc2VsZi5sb2dUaHJlYWRTdGF0dXMgPSBzZWxmLmxvZ1N0YXR1c1snc3RvcCddCisgICAgICAgIHJldHVybiBsb2dzCisKKyAgICBkZWYgX19jb252ZXJ0Q2hhbm5lbE1hc2soc2VsZiwgY2hhbm5lbHNBcnJheSk6CisgICAgICAgICIiImNvbnZlcnQgY2hhbm5lbHNBcnJheSB0byBiaXRtYXNrIGZvcm1hdAorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBjaGFubmVsc0FycmF5OiBjaGFubmVsIGFycmF5IChpLmUuIFsyMSwgMjJdKQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBiaXRtYXNrIGZvcm1hdCBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gY2hhbm5lbCBhcnJheQorICAgICAgICAiIiIKKyAgICAgICAgbWFza1NldCA9IDAKKworICAgICAgICBmb3IgZWFjaENoYW5uZWwgaW4gY2hhbm5lbHNBcnJheToKKyAgICAgICAgICAgIG1hc2sgPSAxIDw8IGVhY2hDaGFubmVsCisgICAgICAgICAgICBtYXNrU2V0ID0gKG1hc2tTZXQgfCBtYXNrKQorCisgICAgICAgIHJldHVybiBtYXNrU2V0CisKKyAgICBkZWYgX19zZXRDaGFubmVsTWFzayhzZWxmLCBjaGFubmVsTWFzayk6CisgICAgICAgIHByaW50ICdjYWxsIF9zZXRDaGFubmVsTWFzaycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ2RhdGFzZXQgY2hhbm5lbG1hc2sgJXMnICUgY2hhbm5lbE1hc2sKKyAgICAgICAgICAgIHNlbGYuaGFzQWN0aXZlRGF0YXNldFRvQ29tbWl0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRDaGFubmVsTWFzaygpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIF9fc2V0U2VjdXJpdHlQb2xpY3koc2VsZiwgc2VjdXJpdHlQb2xpY3lTZWNzLCBzZWN1cml0eVBvbGljeUZsYWdzKToKKyAgICAgICAgcHJpbnQgJ2NhbGwgX3NldFNlY3VyaXR5UG9saWN5JworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBzZWN1cml0eXBvbGljeSAlcyAlcycgJSAoc3RyKHNlY3VyaXR5UG9saWN5U2VjcyksIHNlY3VyaXR5UG9saWN5RmxhZ3MpCisgICAgICAgICAgICBzZWxmLmhhc0FjdGl2ZURhdGFzZXRUb0NvbW1pdCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0U2VjdXJpdHlQb2xpY3koKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBfX3NldEtleVN3aXRjaEd1YXJkVGltZShzZWxmLCBpS2V5U3dpdGNoR3VhcmRUaW1lKToKKyAgICAgICAgIiIiIHNldCB0aGUgS2V5IHN3aXRjaCBndWFyZCB0aW1lCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGlLZXlTd2l0Y2hHdWFyZFRpbWU6IGtleSBzd2l0Y2ggZ3VhcmQgdGltZQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCBrZXkgc3dpdGNoIGd1YXJkIHRpbWUKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCBrZXkgc3dpdGNoIGd1YXJkIHRpbWUKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldEtleVN3aXRjaEd1YXJkVGltZScgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgaUtleVN3aXRjaEd1YXJkVGltZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAna2V5c2VxdWVuY2UgZ3VhcmR0aW1lICVzJyAlIHN0cihpS2V5U3dpdGNoR3VhcmRUaW1lKQorICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0S2V5U3dpdGNoR3VhcmRUaW1lKCkgRXJyb3I7ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgX19nZXRDb21taXNzaW9uZXJTZXNzaW9uSWQoc2VsZik6CisgICAgICAgICIiIiBnZXQgdGhlIGNvbW1pc3Npb25lciBzZXNzaW9uIGlkIGFsbG9jYXRlZCBmcm9tIExlYWRlciAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkJyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKCdjb21taXNzaW9uZXIgc2Vzc2lvbmlkJylbMF0KKworICAgIGRlZiBfY29ubmVjdChzZWxmKToKKyAgICAgICAgcHJpbnQgJ015IHBvcnQgaXMgJXMnICUgc2VsZi5wb3J0CisgICAgICAgIGlmIHNlbGYucG9ydC5zdGFydHN3aXRoKCdDT00nKToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlID0gc2VyaWFsLlNlcmlhbChzZWxmLnBvcnQsIDExNTIwMCwgdGltZW91dD0wKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICAgICAgc2VsZi5oYW5kbGUud3JpdGUoJ1xyXG4nKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgICAgICBzZWxmLl9pc19uZXQgPSBGYWxzZQorICAgICAgICBlbGlmICc6JyBpbiBzZWxmLnBvcnQ6CisgICAgICAgICAgICBob3N0LCBwb3J0ID0gc2VsZi5wb3J0LnNwbGl0KCc6JykKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlLnNldGJsb2NraW5nKDApCisgICAgICAgICAgICBzZWxmLl9pc19uZXQgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1Vua25vd24gcG9ydCBzY2hlbWEnKQorICAgICAgICBzZWxmLlVJU3RhdHVzTXNnID0gc2VsZi5nZXRWZXJzaW9uTnVtYmVyKCkKKworICAgIGRlZiBjbG9zZUNvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICIiImNsb3NlIGN1cnJlbnQgc2VyaWFsIHBvcnQgY29ubmVjdGlvbiIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBjbG9zZUNvbm5lY3Rpb24nICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuaGFuZGxlOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZSA9IE5vbmUKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiY2xvc2VDb25uZWN0aW9uKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgaW50aWFsaXplKHNlbGYpOgorICAgICAgICAiIiJpbml0aWFsaXplIHRoZSBzZXJpYWwgcG9ydCB3aXRoIGJhdWRyYXRlLCB0aW1lb3V0IHBhcmFtZXRlcnMiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgaW50aWFsaXplJyAlIHNlbGYucG9ydAorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGluaXQgc2VyaWFsIHBvcnQKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICAgICAgc2VsZi5kZXZpY2VDb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImludGlhbGl6ZSgpIEVycm9yOiAiICsgc3RyKGUpKQorICAgICAgICAgICAgc2VsZi5kZXZpY2VDb25uZWN0ZWQgPSBGYWxzZQorCisgICAgZGVmIHNldE5ldHdvcmtOYW1lKHNlbGYsIG5ldHdvcmtOYW1lPSdHUkwnKToKKyAgICAgICAgIiIic2V0IFRocmVhZCBOZXR3b3JrIG5hbWUKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbmV0d29ya05hbWU6IHRoZSBuZXR3b3JrbmFtZSBzdHJpbmcgdG8gYmUgc2V0CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBUaHJlYWQgTmV0d29ya25hbWUKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCB0aGUgVGhyZWFkIE5ldHdvcmtuYW1lCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXROZXR3b3JrTmFtZScgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgbmV0d29ya05hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ25ldHdvcmtuYW1lICVzJyAlIG5ldHdvcmtOYW1lCisgICAgICAgICAgICBkYXRhc2V0Q21kID0gJ2RhdGFzZXQgbmV0d29ya25hbWUgJXMnICUgbmV0d29ya05hbWUKKyAgICAgICAgICAgIHNlbGYuaGFzQWN0aXZlRGF0YXNldFRvQ29tbWl0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJyBhbmQgc2VsZi5fX3NlbmRDb21tYW5kKGRhdGFzZXRDbWQpWzBdID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXROZXR3b3JrTmFtZSgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIGdldE5ldHdvcmtOYW1lKHNlbGYpOgorICAgICAgICAiIiJnZXQgVGhyZWFkIE5ldHdvcmsgbmFtZSIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXROZXR3b3JrbmFtZScgJSBzZWxmLnBvcnQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZCgnbmV0d29ya25hbWUnKVswXQorCisgICAgZGVmIHNldENoYW5uZWwoc2VsZiwgY2hhbm5lbD0xMSk6CisgICAgICAgICIiInNldCBjaGFubmVsIG9mIFRocmVhZCBkZXZpY2Ugb3BlcmF0ZXMgb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGNoYW5uZWw6CisgICAgICAgICAgICAgICAgICAgICgwICAtIDEwOiBSZXNlcnZlZCkKKyAgICAgICAgICAgICAgICAgICAgKDExIC0gMjY6IDIuNEdIeiBjaGFubmVscykKKyAgICAgICAgICAgICAgICAgICAgKDI3IC0gNjU1MzU6IFJlc2VydmVkKQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCB0aGUgY2hhbm5lbAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IHRoZSBjaGFubmVsCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXRDaGFubmVsJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBjaGFubmVsCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdjaGFubmVsICVzJyAlIGNoYW5uZWwKKyAgICAgICAgICAgIGRhdGFzZXRDbWQgPSAnZGF0YXNldCBjaGFubmVsICVzJyAlIGNoYW5uZWwKKyAgICAgICAgICAgIHNlbGYuaGFzQWN0aXZlRGF0YXNldFRvQ29tbWl0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJyBhbmQgc2VsZi5fX3NlbmRDb21tYW5kKGRhdGFzZXRDbWQpWzBdID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRDaGFubmVsKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgZ2V0Q2hhbm5lbChzZWxmKToKKyAgICAgICAgIiIiZ2V0IGN1cnJlbnQgY2hhbm5lbCIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRDaGFubmVsJyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKCdjaGFubmVsJylbMF0KKworICAgIGRlZiBzZXRNQUMoc2VsZiwgeEVVSSk6CisgICAgICAgICIiInNldCB0aGUgZXh0ZW5kZWQgYWRkcmVzc3Mgb2YgVGhyZWFkIGRldmljZQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB4RVVJOiBleHRlbmRlZCBhZGRyZXNzIGluIGhleCBmb3JtYXQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgdGhlIGV4dGVuZGVkIGFkZHJlc3MKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCB0aGUgZXh0ZW5kZWQgYWRkcmVzcworICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0TUFDJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCB4RVVJCisgICAgICAgIGFkZHJlc3M2NCA9ICcnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCB4RVVJOgorICAgICAgICAgICAgICAgIGFkZHJlc3M2NCA9IHNlbGYubWFjCisKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHhFVUksIHN0cik6CisgICAgICAgICAgICAgICAgYWRkcmVzczY0ID0gc2VsZi5fX2NvbnZlcnRMb25nVG9TdHJpbmcoeEVVSSkKKworICAgICAgICAgICAgICAgICMgcHJlcGVuZCAwIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICAgICAgICBpZiBsZW4oYWRkcmVzczY0KSA8IDE2OgorICAgICAgICAgICAgICAgICAgICBhZGRyZXNzNjQgPSBhZGRyZXNzNjQuemZpbGwoMTYpCisgICAgICAgICAgICAgICAgICAgIHByaW50IGFkZHJlc3M2NAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhZGRyZXNzNjQgPSB4RVVJCisKKyAgICAgICAgICAgIGNtZCA9ICdleHRhZGRyICVzJyAlIGFkZHJlc3M2NAorICAgICAgICAgICAgcHJpbnQgY21kCisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgc2VsZi5tYWMgPSBhZGRyZXNzNjQKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0TUFDKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgZ2V0TUFDKHNlbGYsIGJUeXBlPU1hY1R5cGUuUmFuZG9tTWFjKToKKyAgICAgICAgIiIiZ2V0IG9uZSBzcGVjaWZpYyB0eXBlIG9mIE1BQyBhZGRyZXNzCisgICAgICAgICAgIGN1cnJlbnRseSBPcGVuVGhyZWFkIG9ubHkgc3VwcG9ydHMgUmFuZG9tIE1BQyBhZGRyZXNzCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGJUeXBlOiBpbmRpY2F0ZSB3aGljaCBraW5kIG9mIE1BQyBhZGRyZXNzIGlzIHJlcXVpcmVkCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIHNwZWNpZmljIHR5cGUgb2YgTUFDIGFkZHJlc3MKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldE1BQycgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgYlR5cGUKKyAgICAgICAgIyBpZiBwb3dlciBkb3duIGhhcHBlbnMsIHJldHVybiBleHRlbmRlZCBhZGRyZXNzIGFzc2lnbmVkIHByZXZpb3VzbHkKKyAgICAgICAgaWYgc2VsZi5pc1Bvd2VyRG93bjoKKyAgICAgICAgICAgIG1hY0FkZHI2NCA9IHNlbGYubWFjCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBiVHlwZSA9PSBNYWNUeXBlLkZhY3RvcnlNYWM6CisgICAgICAgICAgICAgICAgbWFjQWRkcjY0ID0gc2VsZi5fX3NlbmRDb21tYW5kKCdldWk2NCcpWzBdCisgICAgICAgICAgICBlbGlmIGJUeXBlID09IE1hY1R5cGUuSGFzaE1hYzoKKyAgICAgICAgICAgICAgICBtYWNBZGRyNjQgPSBzZWxmLl9fc2VuZENvbW1hbmQoJ2hhc2htYWNhZGRyJylbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWFjQWRkcjY0ID0gc2VsZi5fX3NlbmRDb21tYW5kKCdleHRhZGRyJylbMF0KKyAgICAgICAgcHJpbnQgbWFjQWRkcjY0CisKKyAgICAgICAgcmV0dXJuIGludChtYWNBZGRyNjQsIDE2KQorCisgICAgZGVmIGdldExMNjQoc2VsZik6CisgICAgICAgICIiImdldCBsaW5rIGxvY2FsIHVuaWNhc3QgSVB2NiBhZGRyZXNzIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldExMNjQnICUgc2VsZi5wb3J0CisgICAgICAgIHJldHVybiBzZWxmLl9fZ2V0SXA2QWRkcmVzcygnbGluayBsb2NhbCcpCisKKyAgICBkZWYgZ2V0TUxFSUQoc2VsZik6CisgICAgICAgICIiImdldCBtZXNoIGxvY2FsIGVuZHBvaW50IGlkZW50aWZpZXIgYWRkcmVzcyIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRNTEVJRCcgJSBzZWxmLnBvcnQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19nZXRJcDZBZGRyZXNzKCdtZXNoIEVJRCcpCisKKyAgICBkZWYgZ2V0UmxvYzE2KHNlbGYpOgorICAgICAgICAiIiJnZXQgcmxvYzE2IHNob3J0IGFkZHJlc3MiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0UmxvYzE2JyAlIHNlbGYucG9ydAorICAgICAgICBybG9jMTYgPSBzZWxmLl9fc2VuZENvbW1hbmQoJ3Jsb2MxNicpWzBdCisgICAgICAgIHJldHVybiBpbnQocmxvYzE2LCAxNikKKworICAgIGRlZiBnZXRSbG9jKHNlbGYpOgorICAgICAgICAiIiJnZXQgcm91dGVyIGxvY2F0b3IgdW5pY2FzdCBJUHY2IGFkZHJlc3MiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0UmxvYycgJSBzZWxmLnBvcnQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19nZXRJcDZBZGRyZXNzKCdybG9jJykKKworICAgIGRlZiBnZXRHbG9iYWwoc2VsZik6CisgICAgICAgICIiImdldCBnbG9iYWwgdW5pY2FzdCBJUHY2IGFkZHJlc3Mgc2V0CisgICAgICAgICAgIGlmIGNvbmZpZ3VyaW5nIG11bHRpcGxlIGVudHJpZXMKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldEdsb2JhbCcgJSBzZWxmLnBvcnQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19nZXRJcDZBZGRyZXNzKCdnbG9iYWwnKQorCisgICAgZGVmIHNldE5ldHdvcmtLZXkoc2VsZiwga2V5KToKKyAgICAgICAgIiIic2V0IFRocmVhZCBOZXR3b3JrIG1hc3RlciBrZXkKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAga2V5OiBUaHJlYWQgTmV0d29yayBtYXN0ZXIga2V5IHVzZWQgaW4gc2VjdXJlIHRoZSBNTEUvODAyLjE1LjQgcGFja2V0CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBUaHJlYWQgTmV0d29yayBtYXN0ZXIga2V5CisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZXQgdGhlIFRocmVhZCBOZXR3b3JrIG1hc3RlciBrZXkKKyAgICAgICAgIiIiCisgICAgICAgIG1hc3RlcktleSA9ICcnCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldE5ldHdvcmtLZXknICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IGtleQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIHN0cik6CisgICAgICAgICAgICAgICAgbWFzdGVyS2V5ID0gc2VsZi5fX2NvbnZlcnRMb25nVG9TdHJpbmcoa2V5KQorCisgICAgICAgICAgICAgICAgIyBwcnBlbmQgJzAnIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICAgICAgICBpZiBsZW4obWFzdGVyS2V5KSA8IDMyOgorICAgICAgICAgICAgICAgICAgICBtYXN0ZXJLZXkgPSBtYXN0ZXJLZXkuemZpbGwoMzIpCisgICAgICAgICAgICAgICAgICAgIHByaW50IG1hc3RlcktleQorCisgICAgICAgICAgICAgICAgY21kID0gJ21hc3RlcmtleSAlcycgJW1hc3RlcktleQorICAgICAgICAgICAgICAgIGRhdGFzZXRDbWQgPSAnZGF0YXNldCBtYXN0ZXJrZXkgJXMnICUgbWFzdGVyS2V5CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1hc3RlcktleSA9IGtleQorICAgICAgICAgICAgICAgIGNtZCA9ICdtYXN0ZXJrZXkgJXMnICUgbWFzdGVyS2V5CisgICAgICAgICAgICAgICAgZGF0YXNldENtZCA9ICdkYXRhc2V0IG1hc3RlcmtleSAlcycgJSBtYXN0ZXJLZXkKKworICAgICAgICAgICAgc2VsZi5uZXR3b3JrS2V5ID0gbWFzdGVyS2V5CisgICAgICAgICAgICBzZWxmLmhhc0FjdGl2ZURhdGFzZXRUb0NvbW1pdCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScgYW5kIHNlbGYuX19zZW5kQ29tbWFuZChkYXRhc2V0Q21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0TmV0d29ya2tleSgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIGdldE5ldHdvcmtLZXkoc2VsZik6CisgICAgICAgICIiImdldCB0aGUgY3VycmVudCBUaHJlYWQgTmV0d29yayBtYXN0ZXIga2V5IiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldE5ldHdva0tleScgJSBzZWxmLnBvcnQKKyAgICAgICAgcmV0dXJuIHNlbGYubmV0d29ya0tleQorCisgICAgZGVmIGFkZEJsb2NrZWRNQUMoc2VsZiwgeEVVSSk6CisgICAgICAgICIiImFkZCBhIGdpdmVuIGV4dGVuZGVkIGFkZHJlc3MgdG8gdGhlIGJsYWNrIGxpc3QgZW50cnkKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgeEVVSTogZXh0ZW5kZWQgYWRkcmVzcyBpbiBoZXggZm9ybWF0CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gYWRkIGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcyB0byB0aGUgYmxhY2sgbGlzdCBlbnRyeQorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gYWRkIGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcyB0byB0aGUgYmxhY2sgbGlzdCBlbnRyeQorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgYWRkQmxvY2tlZE1BQycgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgeEVVSQorICAgICAgICBpZiBpc2luc3RhbmNlKHhFVUksIHN0cik6CisgICAgICAgICAgICBtYWNBZGRyID0geEVVSQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFjQWRkciA9IHNlbGYuX19jb252ZXJ0TG9uZ1RvU3RyaW5nKHhFVUkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBpZiBibG9ja2VkIGRldmljZSBpcyBpdHNlbGYKKyAgICAgICAgICAgIGlmIG1hY0FkZHIgPT0gc2VsZi5tYWM6CisgICAgICAgICAgICAgICAgcHJpbnQgJ2Jsb2NrIGRldmljZSBpdHNlbGYnCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNCbGFja0xpc3RFbmFibGVkOgorICAgICAgICAgICAgICAgIHNlbGYuX19lbmFibGVCbGFja0xpc3QoKQorCisgICAgICAgICAgICBjbWQgPSAnYmxhY2tsaXN0IGFkZCAlcycgJSBtYWNBZGRyCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHNlbGYuX2JsYWNrTGlzdC5hZGQobWFjQWRkcikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiYWRkQmxvY2tlZE1BQygpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIGFkZEFsbG93TUFDKHNlbGYsIHhFVUkpOgorICAgICAgICAiIiJhZGQgYSBnaXZlbiBleHRlbmRlZCBhZGRyZXNzIHRvIHRoZSB3aGl0ZSBsaXN0IGVudHJ5CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHhFVUk6IGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcyBpbiBoZXggZm9ybWF0CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gYWRkIGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcyB0byB0aGUgd2hpdGUgbGlzdCBlbnRyeQorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gYWRkIGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcyB0byB0aGUgd2hpdGUgbGlzdCBlbnRyeQorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgYWRkQWxsb3dNQUMnICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IHhFVUkKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh4RVVJLCBzdHIpOgorICAgICAgICAgICAgbWFjQWRkciA9IHhFVUkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hY0FkZHIgPSBzZWxmLl9fY29udmVydExvbmdUb1N0cmluZyh4RVVJKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlzV2hpdGVMaXN0RW5hYmxlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9fZW5hYmxlV2hpdGVMaXN0KCkKKworICAgICAgICAgICAgY21kID0gJ3doaXRlbGlzdCBhZGQgJXMnICUgbWFjQWRkcgorICAgICAgICAgICAgcHJpbnQgY21kCisgICAgICAgICAgICBzZWxmLl93aGl0ZUxpc3QuYWRkKG1hY0FkZHIpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImFkZEFsbG93TUFDKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgY2xlYXJCbG9ja0xpc3Qoc2VsZik6CisgICAgICAgICIiImNsZWFyIGFsbCBlbnRyaWVzIGluIGJsYWNrIGxpc3QgdGFibGUKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBjbGVhciB0aGUgYmxhY2sgbGlzdAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gY2xlYXIgdGhlIGJsYWNrIGxpc3QKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGNsZWFyQmxvY2tMaXN0JyAlIHNlbGYucG9ydAorCisgICAgICAgICMgcmVtb3ZlIGFsbCBlbnRyaWVzIGluIGJsYWNrIGxpc3QKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKCdibGFja2xpc3QgY2xlYXInKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgc2VsZi5fX2Rpc2FibGVCbGFja0xpc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuX2JsYWNrTGlzdC5jbGVhcigpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImNsZWFyQmxvY2tMaXN0KCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgY2xlYXJBbGxvd0xpc3Qoc2VsZik6CisgICAgICAgICIiImNsZWFyIGFsbCBlbnRyaWVzIGluIHdoaXRlIGxpc3QgdGFibGUKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBjbGVhciB0aGUgd2hpdGUgbGlzdAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gY2xlYXIgdGhlIHdoaXRlIGxpc3QKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGNsZWFyQWxsb3dMaXN0JyAlIHNlbGYucG9ydAorCisgICAgICAgICMgcmVtb3ZlIGFsbCBlbnRyaWVzIGluIHdoaXRlIGxpc3QgYXMgd2VsbCBhcyBpbiBibGFjayBsaXN0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZCgnd2hpdGVsaXN0IGNsZWFyJylbMF0gPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgIHNlbGYuX19kaXNhYmxlV2hpdGVMaXN0KCkKKyAgICAgICAgICAgICAgICBzZWxmLl93aGl0ZUxpc3QuY2xlYXIoKQorICAgICAgICAgICAgICAgIHNlbGYuY2xlYXJCbG9ja0xpc3QoKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJjbGVhckFsbG93TGlzdCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIGdldERldmljZVJvbGUoc2VsZik6CisgICAgICAgICIiImdldCBjdXJyZW50IGRldmljZSByb2xlIGluIFRocmVhZCBOZXR3b3JrIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldERldmljZVJvbGUnICUgc2VsZi5wb3J0CisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoJ3N0YXRlJylbMF0KKworICAgIGRlZiBqb2luTmV0d29yayhzZWxmLCBlUm9sZUlkKToKKyAgICAgICAgIiIibWFrZSBkZXZpY2UgcmVhZHkgdG8gam9pbiB0aGUgVGhyZWFkIE5ldHdvcmsgd2l0aCBhIGdpdmVuIHJvbGUKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZVJvbGVJZDogYSBnaXZlbiBkZXZpY2Ugcm9sZSBpZAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiByZWFkeSB0byBzZXQgVGhyZWFkIE5ldHdvcmsgcGFyYW1ldGVyIGZvciBqb2luaW5nIGRlc2lyZWQgTmV0d29yaworICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgam9pbk5ldHdvcmsnICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IGVSb2xlSWQKKworICAgICAgICBzZWxmLmRldmljZVJvbGUgPSBlUm9sZUlkCisgICAgICAgIG1vZGUgPSAnJworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBNb2R1bGVIZWxwZXIuTGVhZGVyRHV0Q2hhbm5lbEZvdW5kOgorICAgICAgICAgICAgICAgIHNlbGYuY2hhbm5lbCA9IE1vZHVsZUhlbHBlci5EZWZhdWx0X0NoYW5uZWwKKworICAgICAgICAgICAgIyBGSVhNRTogd2hlbiBIYXJuZXNzIGNhbGwgc2V0TmV0d29ya0RhdGFSZXF1aXJlbWVudCgpPworICAgICAgICAgICAgIyBvbmx5IHNsZWVwIGVuZCBkZXZpY2UgcmVxdWlyZXMgc3RhYmxlIG5ldHdvcmtkYXRhIG5vdworICAgICAgICAgICAgaWYgZVJvbGVJZCA9PSBUaHJlYWRfRGV2aWNlX1JvbGUuTGVhZGVyOgorICAgICAgICAgICAgICAgIHByaW50ICdqb2luIGFzIGxlYWRlcicKKyAgICAgICAgICAgICAgICBtb2RlID0gJ3JzZG4nCisgICAgICAgICAgICAgICAgaWYgc2VsZi5BdXRvRFVURW5hYmxlIGlzIEZhbHNlOgorICAgICAgICAgICAgICAgICAgICAjIHNldCBST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9fc2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKDMzKQorICAgICAgICAgICAgZWxpZiBlUm9sZUlkID09IFRocmVhZF9EZXZpY2VfUm9sZS5Sb3V0ZXI6CisgICAgICAgICAgICAgICAgcHJpbnQgJ2pvaW4gYXMgcm91dGVyJworICAgICAgICAgICAgICAgIG1vZGUgPSAncnNkbicKKyAgICAgICAgICAgICAgICBpZiBzZWxmLkF1dG9EVVRFbmFibGUgaXMgRmFsc2U6CisgICAgICAgICAgICAgICAgICAgICMgc2V0IFJPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xECisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19zZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoMzMpCisgICAgICAgICAgICBlbGlmIGVSb2xlSWQgPT0gVGhyZWFkX0RldmljZV9Sb2xlLlNFRDoKKyAgICAgICAgICAgICAgICBwcmludCAnam9pbiBhcyBzbGVlcHkgZW5kIGRldmljZScKKyAgICAgICAgICAgICAgICBtb2RlID0gJ3MnCisgICAgICAgICAgICAgICAgc2VsZi5zZXRQb2xsaW5nUmF0ZShzZWxmLnNlZFBvbGxpbmdSYXRlKQorICAgICAgICAgICAgZWxpZiBlUm9sZUlkID09IFRocmVhZF9EZXZpY2VfUm9sZS5FbmREZXZpY2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ2pvaW4gYXMgZW5kIGRldmljZScKKyAgICAgICAgICAgICAgICBtb2RlID0gJ3JzbicKKyAgICAgICAgICAgIGVsaWYgZVJvbGVJZCA9PSBUaHJlYWRfRGV2aWNlX1JvbGUuUkVFRDoKKyAgICAgICAgICAgICAgICBwcmludCAnam9pbiBhcyBSRUVEJworICAgICAgICAgICAgICAgIG1vZGUgPSAncnNkbicKKyAgICAgICAgICAgICAgICAjIHNldCBST1VURVJfVVBHUkFERV9USFJFU0hPTEQKKyAgICAgICAgICAgICAgICBzZWxmLl9fc2V0Um91dGVyVXBncmFkZVRocmVzaG9sZCgwKQorICAgICAgICAgICAgZWxpZiBlUm9sZUlkID09IFRocmVhZF9EZXZpY2VfUm9sZS5FbmREZXZpY2VfRkVEOgorICAgICAgICAgICAgICAgICMgYWx3YXlzIHJlbWFpbiBhbiBFRCwgbmV2ZXIgcmVxdWVzdCB0byBiZSBhIHJvdXRlcgorICAgICAgICAgICAgICAgIHByaW50ICdqb2luIGFzIEZFRCcKKyAgICAgICAgICAgICAgICBtb2RlID0gJ3JzZG4nCisgICAgICAgICAgICAgICAgIyBzZXQgUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xECisgICAgICAgICAgICAgICAgc2VsZi5fX3NldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQoMCkKKyAgICAgICAgICAgIGVsaWYgZVJvbGVJZCA9PSBUaHJlYWRfRGV2aWNlX1JvbGUuRW5kRGV2aWNlX01FRDoKKyAgICAgICAgICAgICAgICBwcmludCAnam9pbiBhcyBNRUQnCisgICAgICAgICAgICAgICAgbW9kZSA9ICdyc24nCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBzZXQgVGhyZWFkIGRldmljZSBtb2RlIHdpdGggYSBnaXZlbiByb2xlCisgICAgICAgICAgICBzZWxmLl9fc2V0RGV2aWNlTW9kZShtb2RlKQorICAgICAgICAgICAgc2VsZi5fX3NldEtleVN3aXRjaEd1YXJkVGltZSgwKQorCisgICAgICAgICAgICAjIHN0YXJ0IE9wZW5UaHJlYWQKKyAgICAgICAgICAgIHNlbGYuX19zdGFydE9wZW5UaHJlYWQoKQorICAgICAgICAgICAgdGltZS5zbGVlcCgzKQorCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJqb2luTmV0d29yaygpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIGdldE5ldHdvcmtGcmFnbWVudElEKHNlbGYpOgorICAgICAgICAiIiJnZXQgY3VycmVudCBwYXJ0aXRpb24gaWQgb2YgVGhyZWFkIE5ldHdvcmsgUGFydGl0aW9uIGZyb20gTGVhZGVyRGF0YQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUaGUgVGhyZWFkIG5ldHdvcmsgUGFydGl0aW9uIElkCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXROZXR3b3JrRnJhZ21lbnRJRCcgJSBzZWxmLnBvcnQKKyAgICAgICAgaWYgbm90IHNlbGYuX19pc09wZW5UaHJlYWRSdW5uaW5nKCk6CisgICAgICAgICAgICBwcmludCAnT3BlblRocmVhZCBpcyBub3QgcnVubmluZycKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgbGVhZGVyRGF0YSA9IFtdCisgICAgICAgIGxlYWRlckRhdGEgPSBzZWxmLl9fc2VuZENvbW1hbmQoJ2xlYWRlcmRhdGEnKQorICAgICAgICByZXR1cm4gaW50KGxlYWRlckRhdGFbMF0uc3BsaXQoKVsyXSwgMTYpCisKKyAgICBkZWYgZ2V0UGFyZW50QWRkcmVzcyhzZWxmKToKKyAgICAgICAgIiIiZ2V0IFRocmVhZCBkZXZpY2UncyBwYXJlbnQgZXh0ZW5kZWQgYWRkcmVzcyBhbmQgcmxvYzE2IHNob3J0IGFkZHJlc3MKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVGhlIGV4dGVuZGVkIGFkZHJlc3Mgb2YgcGFyZW50IGluIGhleCBmb3JtYXQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldFBhcmVudEFkZHJlc3MnICUgc2VsZi5wb3J0CisgICAgICAgIHBhcmVudEluZm8gPSBbXQorICAgICAgICBwYXJlbnRJbmZvID0gc2VsZi5fX3NlbmRDb21tYW5kKCdwYXJlbnQnKQorCisgICAgICAgIGZvciBsaW5lIGluIHBhcmVudEluZm86CisgICAgICAgICAgICBpZiAnRG9uZScgaW4gbGluZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiAnRXh0IEFkZHInIGluIGxpbmU6CisgICAgICAgICAgICAgICAgZXVpID0gbGluZS5zcGxpdCgpWzJdCisgICAgICAgICAgICAgICAgcHJpbnQgZXVpCisgICAgICAgICAgICAjZWxpZiAnUmxvYycgaW4gbGluZToKKyAgICAgICAgICAgICMgICAgcmxvYzE2ID0gbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICAjICAgIHByaW50IHJsb2MxNgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIGludChldWksIDE2KQorCisgICAgZGVmIHBvd2VyRG93bihzZWxmKToKKyAgICAgICAgIiIicG93ZXIgZG93biB0aGUgVGhyZWFkIGRldmljZSIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBwb3dlckRvd24nICUgc2VsZi5wb3J0CisgICAgICAgIHNlbGYuX3NlbmRsaW5lKCdyZXNldCcpCisgICAgICAgIHNlbGYuaXNQb3dlckRvd24gPSBUcnVlCisKKyAgICBkZWYgcG93ZXJVcChzZWxmKToKKyAgICAgICAgIiIicG93ZXIgdXAgdGhlIFRocmVhZCBkZXZpY2UiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgcG93ZXJVcCcgJSBzZWxmLnBvcnQKKyAgICAgICAgaWYgbm90IHNlbGYuaGFuZGxlOgorICAgICAgICAgICAgc2VsZi5fY29ubmVjdCgpCisKKyAgICAgICAgc2VsZi5pc1Bvd2VyRG93biA9IEZhbHNlCisKKyAgICAgICAgaWYgbm90IHNlbGYuX19pc09wZW5UaHJlYWRSdW5uaW5nKCk6CisgICAgICAgICAgICBzZWxmLl9fc3RhcnRPcGVuVGhyZWFkKCkKKworICAgIGRlZiByZWJvb3Qoc2VsZik6CisgICAgICAgICIiInJlc2V0IGFuZCByZWpvaW4gdG8gVGhyZWFkIE5ldHdvcmsgd2l0aG91dCBhbnkgdGltZW91dAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHJlc2V0IGFuZCByZWpvaW4gdGhlIFRocmVhZCBOZXR3b3JrCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byByZXNldCBhbmQgcmVqb2luIHRoZSBUaHJlYWQgTmV0d29yaworICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgcmVib290JyAlIHNlbGYucG9ydAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zZW5kbGluZSgncmVzZXQnKQorICAgICAgICAgICAgc2VsZi5pc1Bvd2VyRG93biA9IFRydWUKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICAgICAgc2VsZi5fX3N0YXJ0T3BlblRocmVhZCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDMpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZCgnc3RhdGUnKVswXSA9PSAnZGlzYWJsZWQnOgorICAgICAgICAgICAgICAgIHByaW50ICdbRkFJTF0gcmVib290JworICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJyZWJvb3QoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBwaW5nKHNlbGYsIGRlc3RpbmF0aW9uLCBsZW5ndGg9MjApOgorICAgICAgICAiIiIgc2VuZCBJQ01QdjYgZWNobyByZXF1ZXN0IHdpdGggYSBnaXZlbiBsZW5ndGggdG8gYSB1bmljYXN0IGRlc3RpbmF0aW9uCisgICAgICAgICAgICBhZGRyZXNzCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uOiB0aGUgdW5pY2FzdCBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIElDTVB2NiBlY2hvIHJlcXVlc3QKKyAgICAgICAgICAgIGxlbmd0aDogdGhlIHNpemUgb2YgSUNNUHY2IGVjaG8gcmVxdWVzdCBwYXlsb2FkCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBwaW5nJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCAnZGVzdGluYXRpb246ICVzJyAlZGVzdGluYXRpb24KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ3BpbmcgJXMgJXMnICUgKGRlc3RpbmF0aW9uLCBzdHIobGVuZ3RoKSkKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgc2VsZi5fc2VuZGxpbmUoY21kKQorICAgICAgICAgICAgc2VsZi5fZXhwZWN0KGNtZCkKKyAgICAgICAgICAgICMgd2FpdCBlY2hvIHJlcGx5CisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInBpbmcoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBtdWx0aWNhc3RfUGluZyhzZWxmLCBkZXN0aW5hdGlvbiwgbGVuZ3RoPTIwKToKKyAgICAgICAgIiIic2VuZCBJQ01QdjYgZWNobyByZXF1ZXN0IHdpdGggYSBnaXZlbiBsZW5ndGggdG8gYSBtdWx0aWNhc3QgZGVzdGluYXRpb24KKyAgICAgICAgICAgYWRkcmVzcworCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBkZXN0aW5hdGlvbjogdGhlIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIElDTVB2NiBlY2hvIHJlcXVlc3QKKyAgICAgICAgICAgIGxlbmd0aDogdGhlIHNpemUgb2YgSUNNUHY2IGVjaG8gcmVxdWVzdCBwYXlsb2FkCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBtdWx0aWNhc3RfUGluZycgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgJ2Rlc3RpbmF0aW9uOiAlcycgJSBkZXN0aW5hdGlvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAncGluZyAlcyAlcycgJSAoZGVzdGluYXRpb24sIHN0cihsZW5ndGgpKQorICAgICAgICAgICAgcHJpbnQgY21kCisgICAgICAgICAgICBzZWxmLl9zZW5kbGluZShjbWQpCisgICAgICAgICAgICBzZWxmLl9leHBlY3QoY21kKQorICAgICAgICAgICAgIyB3YWl0IGVjaG8gcmVwbHkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigibXVsdGljYXN0X3BpbmcoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBnZXRWZXJzaW9uTnVtYmVyKHNlbGYpOgorICAgICAgICAiIiJnZXQgT3BlblRocmVhZCBzdGFjayBmaXJtd2FyZSB2ZXJzaW9uIG51bWJlciIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRWZXJzaW9uTnVtYmVyJyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKCd2ZXJzaW9uJylbMF0KKworICAgIGRlZiBzZXRQQU5JRChzZWxmLCB4UEFOKToKKyAgICAgICAgIiIic2V0IFRocmVhZCBOZXR3b3JrIFBBTiBJRAorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB4UEFOOiBhIGdpdmVuIFBBTiBJRCBpbiBoZXggZm9ybWF0CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBUaHJlYWQgTmV0d29yayBQQU4gSUQKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCB0aGUgVGhyZWFkIE5ldHdvcmsgUEFOIElECisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXRQQU5JRCcgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgeFBBTgorICAgICAgICBwYW5pZCA9ICcnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHhQQU4sIHN0cik6CisgICAgICAgICAgICAgICAgcGFuaWQgPSBzdHIoaGV4KHhQQU4pKQorICAgICAgICAgICAgICAgIHByaW50IHBhbmlkCisKKyAgICAgICAgICAgIGNtZCA9ICdwYW5pZCAlcycgJSBwYW5pZAorICAgICAgICAgICAgZGF0YXNldENtZCA9ICdkYXRhc2V0IHBhbmlkICVzJyAlIHBhbmlkCisgICAgICAgICAgICBzZWxmLmhhc0FjdGl2ZURhdGFzZXRUb0NvbW1pdCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScgYW5kIHNlbGYuX19zZW5kQ29tbWFuZChkYXRhc2V0Q21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0UEFOSUQoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBnZXRQQU5JRChzZWxmKToKKyAgICAgICAgIiIiZ2V0IGN1cnJlbnQgVGhyZWFkIE5ldHdvcmsgUEFOIElEIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldFBBTklEJyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKCdwYW5pZCcpWzBdCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgICIiImZhY3RvcnkgcmVzZXQiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgcmVzZXQnICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3NlbmRsaW5lKCdmYWN0b3J5cmVzZXQnKQorICAgICAgICAgICAgc2VsZi5fcmVhZCgpCisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigicmVzZXQoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiByZW1vdmVSb3V0ZXIoc2VsZiwgeFJvdXRlcklkKToKKyAgICAgICAgIiIia2lja29mZiByb3V0ZXIgd2l0aCBhIGdpdmVuIHJvdXRlciBpZCBmcm9tIHRoZSBUaHJlYWQgTmV0d29yaworCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB4Um91dGVySWQ6IGEgZ2l2ZW4gcm91dGVyIGlkIGluIGhleCBmb3JtYXQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byByZW1vdmUgdGhlIHJvdXRlciBmcm9tIHRoZSBUaHJlYWQgTmV0d29yaworICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gcmVtb3ZlIHRoZSByb3V0ZXIgZnJvbSB0aGUgVGhyZWFkIE5ldHdvcmsKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHJlbW92ZVJvdXRlcicgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgeFJvdXRlcklkCisgICAgICAgIHJvdXRlcklkID0gJycKKyAgICAgICAgcm91dGVySWQgPSBzZWxmLl9fY29udmVydFJsb2NUb1JvdXRlcklkKHhSb3V0ZXJJZCkKKyAgICAgICAgcHJpbnQgcm91dGVySWQKKworICAgICAgICBpZiByb3V0ZXJJZCA9PSBOb25lOgorICAgICAgICAgICAgcHJpbnQgJ25vIG1hdGNoZWQgeFJvdXRlcklkJworICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ3JlbGVhc2Vyb3V0ZXJpZCAlcycgJSByb3V0ZXJJZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJyZW1vdmVSb3V0ZXIoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBzZXREZWZhdWx0VmFsdWVzKHNlbGYpOgorICAgICAgICAiIiJzZXQgZGVmYXVsdCBtYW5kYXRvcnkgVGhyZWFkIE5ldHdvcmsgcGFyYW1ldGVyIHZhbHVlIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldERlZmF1bHRWYWx1ZXMnICUgc2VsZi5wb3J0CisKKyAgICAgICAgIyBpbml0aWFsaXplIHZhcmlhYmxlcworICAgICAgICBzZWxmLm5ldHdvcmtOYW1lID0gTW9kdWxlSGVscGVyLkRlZmF1bHRfTndrTmFtZQorICAgICAgICBzZWxmLm5ldHdvcmtLZXkgPSBNb2R1bGVIZWxwZXIuRGVmYXVsdF9Od2tLZXkKKyAgICAgICAgc2VsZi5jaGFubmVsID0gTW9kdWxlSGVscGVyLkRlZmF1bHRfQ2hhbm5lbAorICAgICAgICBzZWxmLmNoYW5uZWxNYXNrID0gIjB4N2ZmZjgwMCIgIygweGZmZmYgPDwgMTEpCisgICAgICAgIHNlbGYucGFuSWQgPSBNb2R1bGVIZWxwZXIuRGVmYXVsdF9QYW5JZAorICAgICAgICBzZWxmLnhwYW5JZCA9IE1vZHVsZUhlbHBlci5EZWZhdWx0X1hwYW5JZAorICAgICAgICBzZWxmLmxvY2FscHJlZml4ID0gTW9kdWxlSGVscGVyLkRlZmF1bHRfTUxQcmVmaXgKKyAgICAgICAgc2VsZi5wc2tjID0gIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiAgIyBPVCBvbmx5IGFjY2VwdCBoZXggZm9ybWF0IFBTS2MgZm9yIG5vdworICAgICAgICBzZWxmLnNlY3VyaXR5UG9saWN5U2VjcyA9IE1vZHVsZUhlbHBlci5EZWZhdWx0X1NlY3VyaXR5UG9saWN5CisgICAgICAgIHNlbGYuc2VjdXJpdHlQb2xpY3lGbGFncyA9ICJvbnJjYiIKKyAgICAgICAgc2VsZi5hY3RpdmV0aW1lc3RhbXAgPSBNb2R1bGVIZWxwZXIuRGVmYXVsdF9BY3RpdmVUaW1lc3RhbXAKKyAgICAgICAgI3NlbGYuc2VkUG9sbGluZ1JhdGUgPSBNb2R1bGVIZWxwZXIuRGVmYXVsdF9IYXJuZXNzX1NFRF9Qb2xsaW5nX1JhdGUKKyAgICAgICAgc2VsZi5zZWRQb2xsaW5nUmF0ZSA9IDMKKyAgICAgICAgc2VsZi5kZXZpY2VSb2xlID0gTm9uZQorICAgICAgICBzZWxmLnByb3Zpc2lvbmluZ1VybCA9ICcnCisgICAgICAgIHNlbGYuaGFzQWN0aXZlRGF0YXNldFRvQ29tbWl0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5sb2dUaHJlYWQgPSBRdWV1ZSgpCisgICAgICAgIHNlbGYubG9nVGhyZWFkU3RhdHVzID0gc2VsZi5sb2dTdGF0dXNbJ3N0b3AnXQorICAgICAgICBzZWxmLmpvaW5Db21taXNzaW9uZWRTdGF0dXMgPSBzZWxmLmpvaW5TdGF0dXNbJ25vdHN0YXJ0J10KKyAgICAgICAgc2VsZi5uZXR3b3JrRGF0YVJlcXVpcmVtZW50ID0gJycgICAgICAjIGluZGljYXRlIFRocmVhZCBkZXZpY2UgcmVxdWVzdHMgZnVsbCBvciBzdGFibGUgbmV0d29yayBkYXRhCisgICAgICAgIHNlbGYuaXNQb3dlckRvd24gPSBGYWxzZSAgICAgICAgICAgICAgIyBpbmRpY2F0ZSBpZiBUaHJlYWQgZGV2aWNlIGV4cGVyaWVuY2VzIGEgcG93ZXIgZG93biBldmVudAorICAgICAgICBzZWxmLmlzV2hpdGVMaXN0RW5hYmxlZCA9IEZhbHNlICAgICAgICMgaW5kaWNhdGUgaWYgVGhyZWFkIGRldmljZSBlbmFibGVzIHdoaXRlIGxpc3QgZmlsdGVyCisgICAgICAgIHNlbGYuaXNCbGFja0xpc3RFbmFibGVkID0gRmFsc2UgICAgICAgIyBpbmRpY2F0ZSBpZiBUaHJlYWQgZGV2aWNlIGVuYWJsZXMgYmxhY2sgbGlzdCBmaWx0ZXIKKyAgICAgICAgc2VsZi5fd2hpdGVMaXN0ID0gc2V0KCkgICAgICAgICAgICAgICAjIGNhY2hlIHdoaXRlbGlzdCBkZXZpY2VzIHdoZW4gd2hpdGUgbGlzdCBmaWx0ZXIgaXMgZW5hYmxlZAorICAgICAgICBzZWxmLl9ibGFja0xpc3QgPSBzZXQoKSAgICAgICAgICAgICAgICMgY2FjaGUgYmxhY2tsaXN0IGRldmljZXMgd2hlbiBibGFjayBsaXN0IGZpbHRlciBpcyBlbmFibGVkCisgICAgICAgIHNlbGYuaXNBY3RpdmVDb21taXNzaW9uZXIgPSBGYWxzZSAgICAgIyBpbmRpY2F0ZSBpZiBUaHJlYWQgZGV2aWNlIGlzIGFuIGFjdGl2ZSBjb21taXNzaW9uZXIKKyAgICAgICAgc2VsZi5fbGluZXMgPSBOb25lICAgICAgICAgICAgICAgICAgICAjIGJ1ZmZlcmVkIGxpbmVzIHJlYWQgZnJvbSBkZXZpY2UKKworICAgICAgICAjIGluaXRpYWxpemUgZGV2aWNlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXRNQUMoc2VsZi5tYWMpCisgICAgICAgICAgICBzZWxmLl9fc2V0Q2hhbm5lbE1hc2soc2VsZi5jaGFubmVsTWFzaykKKyAgICAgICAgICAgIHNlbGYuX19zZXRTZWN1cml0eVBvbGljeShzZWxmLnNlY3VyaXR5UG9saWN5U2Vjcywgc2VsZi5zZWN1cml0eVBvbGljeUZsYWdzKQorICAgICAgICAgICAgc2VsZi5zZXRDaGFubmVsKHNlbGYuY2hhbm5lbCkKKyAgICAgICAgICAgIHNlbGYuc2V0UEFOSUQoc2VsZi5wYW5JZCkKKyAgICAgICAgICAgIHNlbGYuc2V0WHBhbklkKHNlbGYueHBhbklkKQorICAgICAgICAgICAgc2VsZi5zZXROZXR3b3JrTmFtZShzZWxmLm5ldHdvcmtOYW1lKQorICAgICAgICAgICAgc2VsZi5zZXROZXR3b3JrS2V5KHNlbGYubmV0d29ya0tleSkKKyAgICAgICAgICAgIHNlbGYuc2V0TUxQcmVmaXgoc2VsZi5sb2NhbHByZWZpeCkKKyAgICAgICAgICAgIHNlbGYuc2V0UFNLYyhzZWxmLnBza2MpCisgICAgICAgICAgICBzZWxmLnNldEFjdGl2ZVRpbWVzdGFtcChzZWxmLmFjdGl2ZXRpbWVzdGFtcCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0RGVmYXVsdFZhbHVlKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgZ2V0RGV2aWNlQ29ubmNldGlvblN0YXR1cyhzZWxmKToKKyAgICAgICAgIiIiY2hlY2sgaWYgc2VyaWFsIHBvcnQgY29ubmVjdGlvbiBpcyByZWFkeSBvciBub3QiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0RGV2aWNlQ29ubmVjdGlvblN0YXR1cycgJSBzZWxmLnBvcnQKKyAgICAgICAgcmV0dXJuIHNlbGYuZGV2aWNlQ29ubmVjdGVkCisKKyAgICBkZWYgZ2V0UG9sbGluZ1JhdGUoc2VsZik6CisgICAgICAgICIiImdldCBkYXRhIHBvbGxpbmcgcmF0ZSBmb3Igc2xlZXB5IGVuZCBkZXZpY2UiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0UG9sbGluZ1JhdGUnICUgc2VsZi5wb3J0CisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoJ3BvbGxwZXJpb2QnKVswXQorCisgICAgZGVmIHNldFBvbGxpbmdSYXRlKHNlbGYsIGlQb2xsaW5nUmF0ZSk6CisgICAgICAgICIiInNldCBkYXRhIHBvbGxpbmcgcmF0ZSBmb3Igc2xlZXB5IGVuZCBkZXZpY2UKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgaVBvbGxpbmdSYXRlOiBkYXRhIHBvbGwgcGVyaW9kIG9mIHNsZWVweSBlbmQgZGV2aWNlCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBkYXRhIHBvbGxpbmcgcmF0ZSBmb3Igc2xlZXB5IGVuZCBkZXZpY2UKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCB0aGUgZGF0YSBwb2xsaW5nIHJhdGUgZm9yIHNsZWVweSBlbmQgZGV2aWNlCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXRQb2xsaW5nUmF0ZScgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgaVBvbGxpbmdSYXRlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdwb2xscGVyaW9kICVzJyAlIHN0cihpUG9sbGluZ1JhdGUpCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0UG9sbGluZ1JhdGUoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBzZXRMaW5rUXVhbGl0eShzZWxmLCBFVUlhZHIsIExpbmtRdWFsaXR5KToKKyAgICAgICAgIiIic2V0IGN1c3RvbSBsaW5rIHF1YWxpdHkgb24gYSBsaW5rIHRvIFRocmVhZCBkZXZpY2Ugd2l0aCBhIGdpdmVuIGV4dGVuZGVkIGFkZHJlc3MKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgRVVJYWRyOiBhIGdpdmVuIGV4dGVuZGVkIGFkZHJlc3MKKyAgICAgICAgICAgIExpbmtRdWFsaXR5OiBhIGdpdmVuIGN1c3RvbSBsaW5rIHF1YWxpdHkgZm9yIGNoaWxkIGRldmljZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rIHF1YWxpdHkvbGluayBtYXJnaW4gbWFwcGluZyB0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgIDM6IDIxIC0gMjU1IChkQikKKyAgICAgICAgICAgICAgICAgICAgICAgICAyOiAxMSAtIDIwIChkQikKKyAgICAgICAgICAgICAgICAgICAgICAgICAxOiAzIC0gOSAoZEIpCisgICAgICAgICAgICAgICAgICAgICAgICAgMDogMCAtIDIgKGRCKQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCB0aGUgbGluayBxdWFsaXR5IG9uIGEgbGluayB0byBhIFRocmVhZCBkZXZpY2UKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCB0aGUgbGluayBxdWFsaXR5IG9uIGEgbGluayB0byBhIFRocmVhZCBkZXZpY2UKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldExpbmtRdWFsaXR5JyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBFVUlhZHIKKyAgICAgICAgcHJpbnQgTGlua1F1YWxpdHkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBwcm9jZXNzIEVVSWFkcgorICAgICAgICAgICAgZXVpSGV4ID0gaGV4KEVVSWFkcikKKyAgICAgICAgICAgIGV1aVN0ciA9IHN0cihldWlIZXgpCisgICAgICAgICAgICBldWlTdHIgPSBldWlTdHIucnN0cmlwKCdMJykKKyAgICAgICAgICAgIGFkZHJlc3M2NCA9ICcnCisgICAgICAgICAgICBpZiAnMHgnIGluIGV1aVN0cjoKKyAgICAgICAgICAgICAgICBhZGRyZXNzNjQgPSBldWlTdHIubHN0cmlwKCcweCcpCisKKyAgICAgICAgICAgICAgICAjIHByZXBlbmQgMCBhdCB0aGUgYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgaWYgbGVuKGFkZHJlc3M2NCkgPCAxNjoKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzczY0ID0gYWRkcmVzczY0LnpmaWxsKDE2KQorICAgICAgICAgICAgICAgICAgICBwcmludCBhZGRyZXNzNjQKKworICAgICAgICAgICAgY21kID0gJ2xpbmtxdWFsaXR5ICVzICVzJyAlIChhZGRyZXNzNjQsIHN0cihMaW5rUXVhbGl0eSkpCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0TGlua1F1YWxpdHkoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiByZW1vdmVSb3V0ZXJQcmVmaXgoc2VsZiwgcHJlZml4RW50cnkpOgorICAgICAgICAiIiJyZW1vdmUgdGhlIGNvbmZpZ3VyZWQgcHJlZml4IG9uIGEgYm9yZGVyIHJvdXRlcgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBwcmVmaXhFbnRyeTogYSBvbi1tZXNoIHByZWZpeCBlbnRyeQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHJlbW92ZSB0aGUgcHJlZml4IGVudHJ5IGZyb20gYm9yZGVyIHJvdXRlcgorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gcmVtb3ZlIHRoZSBwcmVmaXggZW50cnkgZnJvbSBib3JkZXIgcm91dGVyCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCByZW1vdmVSb3V0ZXJQcmVmaXgnICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IHByZWZpeEVudHJ5CisgICAgICAgIHByZWZpeCA9IHNlbGYuX19jb252ZXJ0SXA2UHJlZml4U3RyaW5nVG9JcDZBZGRyZXNzKHN0cihwcmVmaXhFbnRyeSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByZWZpeExlbiA9IDY0CisgICAgICAgICAgICBjbWQgPSAncHJlZml4IHJlbW92ZSAlcy8lZCcgJSAocHJlZml4LCBwcmVmaXhMZW4pCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICAjIHNlbmQgc2VydmVyIGRhdGEgbnRmIHRvIGxlYWRlcgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoJ25ldGRhdGFyZWdpc3RlcicpWzBdID09ICdEb25lJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigicmVtb3ZlUm91dGVyUHJlZml4KCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgcmVzZXRBbmRSZWpvaW4oc2VsZiwgdGltZW91dCk6CisgICAgICAgICIiInJlc2V0IGFuZCBqb2luIGJhY2sgVGhyZWFkIE5ldHdvcmsgd2l0aCBhIGdpdmVuIHRpbWVvdXQgZGVsYXkKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdGltZW91dDogYSB0aW1lb3V0IGludGVydmFsIGJlZm9yZSByZWpvaW4gVGhyZWFkIE5ldHdvcmsKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byByZXNldCBhbmQgcmVqb2luIFRocmVhZCBOZXR3b3JrCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byByZXNldCBhbmQgcmVqb2luIHRoZSBUaHJlYWQgTmV0d29yaworICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgcmVzZXRBbmRSZWpvaW4nICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IHRpbWVvdXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc2VuZGxpbmUoJ3Jlc2V0JykKKyAgICAgICAgICAgIHNlbGYuaXNQb3dlckRvd24gPSBUcnVlCisgICAgICAgICAgICB0aW1lLnNsZWVwKHRpbWVvdXQpCisKKyAgICAgICAgICAgIGlmIHNlbGYuZGV2aWNlUm9sZSA9PSBUaHJlYWRfRGV2aWNlX1JvbGUuU0VEOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0UG9sbGluZ1JhdGUoc2VsZi5zZWRQb2xsaW5nUmF0ZSkKKworICAgICAgICAgICAgc2VsZi5fX3N0YXJ0T3BlblRocmVhZCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDMpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZCgnc3RhdGUnKVswXSA9PSAnZGlzYWJsZWQnOgorICAgICAgICAgICAgICAgIHByaW50ICdbRkFJTF0gcmVzZXQgYW5kIHJlam9pbicKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInJlc2V0QW5kUmVqb2luKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgY29uZmlnQm9yZGVyUm91dGVyKHNlbGYsIFBfUHJlZml4LCBQX3N0YWJsZT0xLCBQX2RlZmF1bHQ9MSwgUF9zbGFhY19wcmVmZXJyZWQ9MCwgUF9EaGNwPTAsIFBfcHJlZmVyZW5jZT0wLCBQX29uX21lc2g9MSwgUF9uZF9kbnM9MCk6CisgICAgICAgICIiImNvbmZpZ3VyZSB0aGUgYm9yZGVyIHJvdXRlciB3aXRoIGEgZ2l2ZW4gcHJlZml4IGVudHJ5IHBhcmFtZXRlcnMKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgUF9QcmVmaXg6IElQdjYgcHJlZml4IHRoYXQgaXMgYXZhaWxhYmxlIG9uIHRoZSBUaHJlYWQgTmV0d29yaworICAgICAgICAgICAgUF9zdGFibGU6IGlzIHRydWUgaWYgdGhlIGRlZmF1bHQgcm91dGVyIGlzIGV4cGVjdGVkIHRvIGJlIHN0YWJsZSBuZXR3b3JrIGRhdGEKKyAgICAgICAgICAgIFBfZGVmYXVsdDogaXMgdHJ1ZSBpZiBib3JkZXIgcm91dGVyIG9mZmVycyB0aGUgZGVmYXVsdCByb3V0ZSBmb3IgUF9QcmVmaXgKKyAgICAgICAgICAgIFBfc2xhYWNfcHJlZmVycmVkOiBpcyB0cnVlIGlmIFRocmVhZCBkZXZpY2UgaXMgYWxsb3dlZCBhdXRvLWNvbmZpZ3VyZSBhZGRyZXNzIHVzaW5nIFBfUHJlZml4CisgICAgICAgICAgICBQX0RoY3A6IGlzIHRydWUgaWYgYm9yZGVyIHJvdXRlciBpcyBhIERIQ1B2NiBBZ2VudAorICAgICAgICAgICAgUF9wcmVmZXJlbmNlOiBpcyB0d28tYml0IHNpZ25lZCBpbnRlZ2VyIGluZGljYXRpbmcgcm91dGVyIHByZWZlcmVuY2UKKyAgICAgICAgICAgIFBfb25fbWVzaDogaXMgdHJ1ZSBpZiBQX1ByZWZpeCBpcyBjb25zaWRlcmVkIHRvIGJlIG9uLW1lc2gKKyAgICAgICAgICAgIFBfbmRfZG5zOiBpcyB0cnVlIGlmIGJvcmRlciByb3V0ZXIgaXMgYWJsZSB0byBzdXBwbHkgRE5TIGluZm9ybWF0aW9uIG9idGFpbmVkIHZpYSBORAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIGNvbmZpZ3VyZSB0aGUgYm9yZGVyIHJvdXRlciB3aXRoIGEgZ2l2ZW4gcHJlZml4IGVudHJ5CisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBjb25maWd1cmUgdGhlIGJvcmRlciByb3V0ZXIgd2l0aCBhIGdpdmVuIHByZWZpeCBlbnRyeQorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgY29uZmlnQm9yZGVyUm91dGVyJyAlIHNlbGYucG9ydAorICAgICAgICBwcmVmaXggPSBzZWxmLl9fY29udmVydElwNlByZWZpeFN0cmluZ1RvSXA2QWRkcmVzcyhzdHIoUF9QcmVmaXgpKQorICAgICAgICBwcmludCBwcmVmaXgKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyYW1ldGVyID0gJycKKyAgICAgICAgICAgIHByZiA9ICcnCisKKyAgICAgICAgICAgIGlmIFBfc2xhYWNfcHJlZmVycmVkID09IDE6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyICs9ICdwJworICAgICAgICAgICAgICAgIHBhcmFtZXRlciArPSAnYScKKworICAgICAgICAgICAgaWYgUF9zdGFibGUgPT0gMToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgKz0gJ3MnCisKKyAgICAgICAgICAgIGlmIFBfZGVmYXVsdCA9PSAxOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlciArPSAncicKKworICAgICAgICAgICAgaWYgUF9EaGNwID09IDE6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyICs9ICdkJworCisgICAgICAgICAgICBpZiBQX29uX21lc2ggPT0gMToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgKz0gJ28nCisKKyAgICAgICAgICAgIGlmIFBfcHJlZmVyZW5jZSA9PSAxOgorICAgICAgICAgICAgICAgIHByZiA9ICdoaWdoJworICAgICAgICAgICAgZWxpZiBQX3ByZWZlcmVuY2UgPT0gMDoKKyAgICAgICAgICAgICAgICBwcmYgPSAnbWVkJworICAgICAgICAgICAgZWxpZiBQX3ByZWZlcmVuY2UgPT0gLTE6CisgICAgICAgICAgICAgICAgcHJmID0gJ2xvdycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBjbWQgPSAncHJlZml4IGFkZCAlcy82NCAlcyAlcycgJSAocHJlZml4LCBwYXJhbWV0ZXIsIHByZikKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgICMgaWYgcHJlZml4IGNvbmZpZ3VyZWQgYmVmb3JlIHN0YXJ0aW5nIE9wZW5UaHJlYWQgc3RhY2sKKyAgICAgICAgICAgICAgICAjIGRvIG5vdCBzZW5kIG91dCBzZXJ2ZXIgZGF0YSBudGYgcHJvLWFjdGl2ZWx5CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX19pc09wZW5UaHJlYWRSdW5uaW5nKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBzZW5kIHNlcnZlciBkYXRhIG50ZiB0byBsZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZCgnbmV0ZGF0YXJlZ2lzdGVyJylbMF0gPT0gJ0RvbmUnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJjb25maWdCb3JkZXJSb3V0ZXIoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBzZXROZXR3b3JrSURUaW1lb3V0KHNlbGYsIGlOd2tJRFRpbWVPdXQpOgorICAgICAgICAiIiJzZXQgbmV0d29ya2lkIHRpbWVvdXQgZm9yIFRocmVhZCBkZXZpY2UKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgaU53a0lEVGltZU91dDogYSBnaXZlbiBORVRXT1JLX0lEX1RJTUVPVVQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgTkVUV09SS19JRF9USU1FT1VUCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZXQgTkVUV09SS19JRF9USU1FT1VUCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXROZXR3b3JrSURUaW1lb3V0JyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBpTndrSURUaW1lT3V0CisgICAgICAgIGlOd2tJRFRpbWVPdXQgLz0gMTAwMAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnbmV0d29ya2lkdGltZW91dCAlcycgJSBzdHIoaU53a0lEVGltZU91dCkKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXROZXR3b3JrSURUaW1lb3V0KCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgc2V0S2VlcEFsaXZlVGltZU91dChzZWxmLCBpVGltZU91dCk6CisgICAgICAgICIiInNldCBrZWVwIGFsaXZlIHRpbWVvdXQgZm9yIGRldmljZQorICAgICAgICAgICBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBhbHNvIHNldCBTRUQgcG9sbGluZyByYXRlCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGlUaW1lT3V0OiBkYXRhIHBvbGwgcGVyaW9kIGZvciBzbGVlcHkgZW5kIGRldmljZQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCB0aGUgZGF0YSBwb2xsIHBlcmlvZCBmb3IgU0VECisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZXQgdGhlIGRhdGEgcG9sbCBwZXJpb2QgZm9yIFNFRAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0S2VlcEFsaXZlVGltZU91dCcgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgaVRpbWVPdXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ3BvbGxwZXJpb2QgJXMnICUgc3RyKGlUaW1lT3V0KQorICAgICAgICAgICAgcHJpbnQgY21kCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInNldEtlZXBBbGl2ZVRpbWVPdXQoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBzZXRLZXlTZXF1ZW5jZUNvdW50ZXIoc2VsZiwgaUtleVNlcXVlbmNlVmFsdWUpOgorICAgICAgICAiIiIgc2V0IHRoZSBLZXkgc2VxdWVuY2UgY291bnRlciBjb3JyZXNwb25kaW5nIHRvIFRocmVhZCBOZXR3b3JrIG1hc3RlciBrZXkKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgaUtleVNlcXVlbmNlVmFsdWU6IGtleSBzZXF1ZW5jZSB2YWx1ZQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCB0aGUga2V5IHNlcXVlbmNlCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZXQgdGhlIGtleSBzZXF1ZW5jZQorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0S2V5U2VxdWVuY2VDb3VudGVyJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBpS2V5U2VxdWVuY2VWYWx1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAna2V5c2VxdWVuY2UgY291bnRlciAlcycgJSBzdHIoaUtleVNlcXVlbmNlVmFsdWUpCisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRLZXlTZXF1ZW5jZUNvdW50ZXIoKSBFcnJvcjsgIiArIHN0cihlKSkKKworICAgIGRlZiBnZXRLZXlTZXF1ZW5jZUNvdW50ZXIoc2VsZik6CisgICAgICAgICIiImdldCBjdXJyZW50IFRocmVhZCBOZXR3b3JrIGtleSBzZXF1ZW5jZSIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRLZXlTZXF1ZW5jZUNvdW50ZXInICUgc2VsZi5wb3J0CisgICAgICAgIGtleVNlcXVlbmNlID0gJycKKyAgICAgICAga2V5U2VxdWVuY2UgPSBzZWxmLl9fc2VuZENvbW1hbmQoJ2tleXNlcXVlbmNlIGNvdW50ZXInKVswXQorICAgICAgICByZXR1cm4ga2V5U2VxdWVuY2UKKworICAgIGRlZiBpbmNyZW1lbnRLZXlTZXF1ZW5jZUNvdW50ZXIoc2VsZiwgaUluY3JlbWVudFZhbHVlPTEpOgorICAgICAgICAiIiJpbmNyZW1lbnQgdGhlIGtleSBzZXF1ZW5jZSB3aXRoIGEgZ2l2ZW4gdmFsdWUKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgaUluY3JlbWVudFZhbHVlOiBzcGVjaWZpYyBpbmNyZW1lbnQgdmFsdWUgdG8gYmUgYWRkZWQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBpbmNyZW1lbnQgdGhlIGtleSBzZXF1ZW5jZSB3aXRoIGEgZ2l2ZW4gdmFsdWUKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIGluY3JlbWVudCB0aGUga2V5IHNlcXVlbmNlIHdpdGggYSBnaXZlbiB2YWx1ZQorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgaW5jcmVtZW50S2V5U2VxdWVuY2VDb3VudGVyJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBpSW5jcmVtZW50VmFsdWUKKyAgICAgICAgY3VycmVudEtleVNlcSA9ICcnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1cnJlbnRLZXlTZXEgPSBzZWxmLmdldEtleVNlcXVlbmNlQ291bnRlcigpCisgICAgICAgICAgICBrZXlTZXF1ZW5jZSA9IGludChjdXJyZW50S2V5U2VxLCAxMCkgKyBpSW5jcmVtZW50VmFsdWUKKyAgICAgICAgICAgIHByaW50IGtleVNlcXVlbmNlCisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRLZXlTZXF1ZW5jZUNvdW50ZXIoa2V5U2VxdWVuY2UpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImluY3JlbWVudEtleVNlcXVlbmNlQ291bnRlcigpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIHNldE5ldHdvcmtEYXRhUmVxdWlyZW1lbnQoc2VsZiwgZURhdGFSZXF1aXJlbWVudCk6CisgICAgICAgICIiInNldCB3aGV0aGVyIHRoZSBUaHJlYWQgZGV2aWNlIHJlcXVpcmVzIHRoZSBmdWxsIG5ldHdvcmsgZGF0YQorICAgICAgICAgICBvciBvbmx5IHJlcXVpcmVzIHRoZSBzdGFibGUgbmV0d29yayBkYXRhCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGVEYXRhUmVxdWlyZW1lbnQ6IGlzIHRydWUgaWYgcmVxdWlyaW5nIHRoZSBmdWxsIG5ldHdvcmsgZGF0YQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCB0aGUgbmV0d29yayByZXF1aXJlbWVudAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0TmV0d29ya0RhdGFSZXF1aXJlbWVudCcgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgZURhdGFSZXF1aXJlbWVudAorCisgICAgICAgIGlmIGVEYXRhUmVxdWlyZW1lbnQgPT0gRGV2aWNlX0RhdGFfUmVxdWlyZW1lbnQuQUxMX0RBVEE6CisgICAgICAgICAgICBzZWxmLm5ldHdvcmtEYXRhUmVxdWlyZW1lbnQgPSAnbicKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjb25maWdFeHRlcm5hbFJvdXRlcihzZWxmLCBQX1ByZWZpeCwgUF9zdGFibGUsIFJfUHJlZmVyZW5jZT0wKToKKyAgICAgICAgIiIiY29uZmlndXJlIGJvcmRlciByb3V0ZXIgd2l0aCBhIGdpdmVuIGV4dGVybmFsIHJvdXRlIHByZWZpeCBlbnRyeQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBQX1ByZWZpeDogSVB2NiBwcmVmaXggZm9yIHRoZSByb3V0ZQorICAgICAgICAgICAgUF9TdGFibGU6IGlzIHRydWUgaWYgdGhlIGV4dGVybmFsIHJvdXRlIHByZWZpeCBpcyBzdGFibGUgbmV0d29yayBkYXRhCisgICAgICAgICAgICBSX1ByZWZlcmVuY2U6IGEgdHdvLWJpdCBzaWduZWQgaW50ZWdlciBpbmRpY2F0aW5nIFJvdXRlciBwcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIDE6IGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMDogbWVkaXVtCisgICAgICAgICAgICAgICAgICAgICAgICAgLTE6IGxvdworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIGNvbmZpZ3VyZSB0aGUgYm9yZGVyIHJvdXRlciB3aXRoIGEgZ2l2ZW4gZXh0ZXJuYWwgcm91dGUgcHJlZml4CisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBjb25maWd1cmUgdGhlIGJvcmRlciByb3V0ZXIgd2l0aCBhIGdpdmVuIGV4dGVybmFsIHJvdXRlIHByZWZpeAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgY29uZmlnRXh0ZXJuYWxSb3V0ZXInICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IFBfUHJlZml4CisgICAgICAgIHN0YWJsZSA9ICcnCisgICAgICAgIHByZWZpeCA9IHNlbGYuX19jb252ZXJ0SXA2UHJlZml4U3RyaW5nVG9JcDZBZGRyZXNzKHN0cihQX1ByZWZpeCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIFJfUHJlZmVyZW5jZSA9PSAxOgorICAgICAgICAgICAgICAgIHByZiA9ICdoaWdoJworICAgICAgICAgICAgZWxpZiBSX1ByZWZlcmVuY2UgPT0gMDoKKyAgICAgICAgICAgICAgICBwcmYgPSAnbWVkJworICAgICAgICAgICAgZWxpZiBSX1ByZWZlcmVuY2UgPT0gLTE6CisgICAgICAgICAgICAgICAgcHJmID0gJ2xvdycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBpZiBQX3N0YWJsZToKKyAgICAgICAgICAgICAgICBzdGFibGUgKz0gJ3MnCisgICAgICAgICAgICAgICAgY21kID0gJ3JvdXRlIGFkZCAlcy82NCAlcyAlcycgJSAocHJlZml4LCBzdGFibGUsIHByZikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY21kID0gJ3JvdXRlIGFkZCAlcy82NCAlcycgJSAocHJlZml4LCBwcmYpCisgICAgICAgICAgICBwcmludCBjbWQKKworICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgICMgc2VuZCBzZXJ2ZXIgZGF0YSBudGYgdG8gbGVhZGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZCgnbmV0ZGF0YXJlZ2lzdGVyJylbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImNvbmZpZ0V4dGVybmFsUm91dGVyKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgZ2V0TmVpZ2hib3VyaW5nUm91dGVycyhzZWxmKToKKyAgICAgICAgIiIiZ2V0IG5laWdoYm9yaW5nIHJvdXRlcnMgaW5mb3JtYXRpb24KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgbmVpZ2hib3Jpbmcgcm91dGVycycgZXh0ZW5kZWQgYWRkcmVzcworICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0TmVpZ2hib3VyaW5nUm91dGVycycgJSBzZWxmLnBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcm91dGVySW5mbyA9IFtdCisgICAgICAgICAgICByb3V0ZXJMaXN0ID0gW10KKyAgICAgICAgICAgIHJvdXRlckxpc3QgPSBzZWxmLl9fc2VuZENvbW1hbmQoJ3JvdXRlciBsaXN0JylbMF0uc3BsaXQoKQorICAgICAgICAgICAgcHJpbnQgcm91dGVyTGlzdAorCisgICAgICAgICAgICBpZiAnRG9uZScgaW4gcm91dGVyTGlzdDoKKyAgICAgICAgICAgICAgICBwcmludCAnbm8gbmVpZ2hib3VyaW5nIHJvdXRlcnMnCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgZm9yIGluZGV4IGluIHJvdXRlckxpc3Q6CisgICAgICAgICAgICAgICAgcm91dGVyID0gW10KKyAgICAgICAgICAgICAgICBjbWQgPSAncm91dGVyICVzJyAlIGluZGV4CisgICAgICAgICAgICAgICAgcm91dGVyID0gc2VsZi5fX3NlbmRDb21tYW5kKGNtZCkKKworICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHJvdXRlcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0RvbmUnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAjZWxpZiAnUmxvYycgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgIyAgICBybG9jMTYgPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgICAgICAgICAgZWxpZiAnRXh0IEFkZHInIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBldWkgPSBsaW5lLnNwbGl0KClbMl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckluZm8uYXBwZW5kKGludChldWksIDE2KSkKKyAgICAgICAgICAgICAgICAgICAgI2VsaWYgJ0xRSSBJbicgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgIyAgICBscWlfaW4gPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgICAgICAgICAgI2VsaWYgJ0xRSSBPdXQnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICMgICAgbHFpX291dCA9IGxpbmUuc3BsaXQoKVsxXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBwcmludCByb3V0ZXJJbmZvCisgICAgICAgICAgICByZXR1cm4gcm91dGVySW5mbworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJnZXROZWlnaGJvdXJpbmdEZXZpY2UoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBnZXRDaGlsZHJlbkluZm8oc2VsZik6CisgICAgICAgICIiImdldCBhbGwgY2hpbGRyZW4gaW5mb3JtYXRpb24KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgY2hpbGRyZW4ncyBleHRlbmRlZCBhZGRyZXNzCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRDaGlsZHJlbkluZm8nICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNoaWxkcmVuSW5mb0FsbCA9IFtdCisgICAgICAgICAgICBjaGlsZHJlbkluZm8gPSB7J0VVSSc6IDAsICdSbG9jMTYnOiAwLCAnTUxFSUQnOiAnJ30KKyAgICAgICAgICAgIGNoaWxkcmVuTGlzdCA9IHNlbGYuX19zZW5kQ29tbWFuZCgnY2hpbGQgbGlzdCcpWzBdLnNwbGl0KCkKKyAgICAgICAgICAgIHByaW50IGNoaWxkcmVuTGlzdAorCisgICAgICAgICAgICBpZiAnRG9uZScgaW4gY2hpbGRyZW5MaXN0OgorICAgICAgICAgICAgICAgIHByaW50ICdubyBjaGlsZHJlbicKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBmb3IgaW5kZXggaW4gY2hpbGRyZW5MaXN0OgorICAgICAgICAgICAgICAgIGNtZCA9ICdjaGlsZCAlcycgJSBpbmRleAorICAgICAgICAgICAgICAgIGNoaWxkID0gW10KKyAgICAgICAgICAgICAgICBjaGlsZCA9IHNlbGYuX19zZW5kQ29tbWFuZChjbWQpCisKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjaGlsZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0RvbmUnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBlbGlmICdSbG9jJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmxvYzE2ID0gbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICAgICAgICAgIGVsaWYgJ0V4dCBBZGRyJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgZXVpID0gbGluZS5zcGxpdCgpWzJdCisgICAgICAgICAgICAgICAgICAgICNlbGlmICdDaGlsZCBJRCcgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgIyAgICBjaGlsZF9pZCA9IGxpbmUuc3BsaXQoKVsyXQorICAgICAgICAgICAgICAgICAgICAjZWxpZiAnTW9kZScgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgIyAgICBtb2RlID0gbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICBjaGlsZHJlbkluZm9bJ0VVSSddID0gaW50KGV1aSwgMTYpCisgICAgICAgICAgICAgICAgY2hpbGRyZW5JbmZvWydSbG9jMTYnXSA9IGludChybG9jMTYsIDE2KQorICAgICAgICAgICAgICAgICNjaGlsZHJlbl9pbmZvWydNTEVJRCddID0gc2VsZi5nZXRNTEVJRCgpCisKKyAgICAgICAgICAgICAgICBjaGlsZHJlbkluZm9BbGwuYXBwZW5kKGNoaWxkcmVuSW5mb1snRVVJJ10pCisgICAgICAgICAgICAgICAgI2NoaWxkcmVuSW5mb0FsbC5hcHBlbmQoY2hpbGRyZW5JbmZvKQorCisgICAgICAgICAgICBwcmludCBjaGlsZHJlbkluZm9BbGwKKyAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbkluZm9BbGwKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiZ2V0Q2hpbGRyZW5JbmZvKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgc2V0WHBhbklkKHNlbGYsIHhQYW5JZCk6CisgICAgICAgICIiInNldCBleHRlbmRlZCBQQU4gSUQgb2YgVGhyZWFkIE5ldHdvcmsKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgeFBhbklkOiBleHRlbmRlZCBQQU4gSUQgaW4gaGV4IGZvcm1hdAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCB0aGUgZXh0ZW5kZWQgUEFOIElECisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZXQgdGhlIGV4dGVuZGVkIFBBTiBJRAorICAgICAgICAiIiIKKyAgICAgICAgeHBhbmlkID0gJycKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0WHBhbklkJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCB4UGFuSWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoeFBhbklkLCBzdHIpOgorICAgICAgICAgICAgICAgIHhwYW5pZCA9IHNlbGYuX19jb252ZXJ0TG9uZ1RvU3RyaW5nKHhQYW5JZCkKKworICAgICAgICAgICAgICAgICMgcHJlcGVuZCAnMCcgYXQgdGhlIGJlZ2lubmluZworICAgICAgICAgICAgICAgIGlmIGxlbih4cGFuaWQpIDwgMTY6CisgICAgICAgICAgICAgICAgICAgIHhwYW5pZCA9IHhwYW5pZC56ZmlsbCgxNikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgeHBhbmlkCisgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdleHRwYW5pZCAlcycgJSB4cGFuaWQKKyAgICAgICAgICAgICAgICAgICAgZGF0YXNldENtZCA9ICdkYXRhc2V0IGV4dHBhbmlkICVzJyAlIHhwYW5pZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB4cGFuaWQgPSB4UGFuSWQKKyAgICAgICAgICAgICAgICBjbWQgPSAnZXh0cGFuaWQgJXMnICUgeHBhbmlkCisgICAgICAgICAgICAgICAgZGF0YXNldENtZCA9ICdkYXRhc2V0IGV4dHBhbmlkICVzJyAlIHhwYW5pZAorCisgICAgICAgICAgICBzZWxmLnhwYW5JZCA9IHhwYW5pZAorICAgICAgICAgICAgc2VsZi5oYXNBY3RpdmVEYXRhc2V0VG9Db21taXQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnIGFuZCBzZWxmLl9fc2VuZENvbW1hbmQoZGF0YXNldENtZClbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInNldFhwYW5JZCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIGdldE5laWdoYm91cmluZ0RldmljZXMoc2VsZik6CisgICAgICAgICIiImdldHMgdGhlIG5laWdoYm9yaW5nIGRldmljZXMnIGV4dGVuZGVkIGFkZHJlc3MgdG8gY29tcHV0ZSB0aGUgRFVUCisgICAgICAgICAgIGV4dGVuZGVkIGFkZHJlc3MgYXV0b21hdGljYWxseQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGxpc3QgaW5jbHVkaW5nIGV4dGVuZGVkIGFkZHJlc3Mgb2YgbmVpZ2hib3Jpbmcgcm91dGVycywgcGFyZW50CisgICAgICAgICAgICBhcyB3ZWxsIGFzIGNoaWxkcmVuCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXROZWlnaGJvdXJpbmdEZXZpY2VzJyAlIHNlbGYucG9ydAorICAgICAgICBuZWlnaGJvdXJMaXN0ID0gW10KKworICAgICAgICAjIGdldCBwYXJlbnQgaW5mbworICAgICAgICBwYXJlbnRBZGRyID0gc2VsZi5nZXRQYXJlbnRBZGRyZXNzKCkKKyAgICAgICAgaWYgcGFyZW50QWRkciAhPSAwOgorICAgICAgICAgICAgbmVpZ2hib3VyTGlzdC5hcHBlbmQocGFyZW50QWRkcikKKworICAgICAgICAjIGdldCBFRC9TRUQgY2hpbGRyZW4gaW5mbworICAgICAgICBjaGlsZE5laWdoYm91cnMgPSBzZWxmLmdldENoaWxkcmVuSW5mbygpCisgICAgICAgIGlmIGNoaWxkTmVpZ2hib3VycyAhPSBOb25lIGFuZCBsZW4oY2hpbGROZWlnaGJvdXJzKSA+IDA6CisgICAgICAgICAgICBmb3IgZW50cnkgaW4gY2hpbGROZWlnaGJvdXJzOgorICAgICAgICAgICAgICAgIG5laWdoYm91ckxpc3QuYXBwZW5kKGVudHJ5KQorCisgICAgICAgICMgZ2V0IG5laWdoYm9yaW5nIHJvdXRlcnMgaW5mbworICAgICAgICByb3V0ZXJOZWlnaGJvdXJzID0gc2VsZi5nZXROZWlnaGJvdXJpbmdSb3V0ZXJzKCkKKyAgICAgICAgaWYgcm91dGVyTmVpZ2hib3VycyAhPSBOb25lIGFuZCBsZW4ocm91dGVyTmVpZ2hib3VycykgPiAwOgorICAgICAgICAgICAgZm9yIGVudHJ5IGluIHJvdXRlck5laWdoYm91cnM6CisgICAgICAgICAgICAgICAgbmVpZ2hib3VyTGlzdC5hcHBlbmQoZW50cnkpCisKKyAgICAgICAgcHJpbnQgbmVpZ2hib3VyTGlzdAorICAgICAgICByZXR1cm4gbmVpZ2hib3VyTGlzdAorCisgICAgZGVmIHNldFBhcnRhdGlvbklkKHNlbGYsIHBhcnRhdGlvbklkKToKKyAgICAgICAgIiIic2V0IFRocmVhZCBOZXR3b3JrIFBhcnRpdGlvbiBJRAorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBwYXJ0aXRpb25JZDogcGFydGl0aW9uIGlkIHRvIGJlIHNldCBieSBsZWFkZXIKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgdGhlIFBhcnRpdGlvbiBJRAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IHRoZSBQYXJ0aXRpb24gSUQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldFBhcnRhdGlvbklkJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBwYXJ0YXRpb25JZAorCisgICAgICAgIGNtZCA9ICdsZWFkZXJwYXJ0aXRpb25pZCAlcycgJShzdHIoaGV4KHBhcnRhdGlvbklkKSkucnN0cmlwKCdMJykpCisgICAgICAgIHByaW50IGNtZAorICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisKKyAgICBkZWYgZ2V0R1VBKHNlbGYsIGZpbHRlckJ5UHJlZml4PU5vbmUpOgorICAgICAgICAiIiJnZXQgZXhwZWN0ZWQgZ2xvYmFsIHVuaWNhc3QgSVB2NiBhZGRyZXNzIG9mIFRocmVhZCBkZXZpY2UKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZmlsdGVyQnlQcmVmaXg6IGEgZ2l2ZW4gZXhwZWN0ZWQgZ2xvYmFsIElQdjYgcHJlZml4IHRvIGJlIG1hdGNoZWQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgYSBnbG9iYWwgSVB2NiBhZGRyZXNzIHRoYXQgbWF0Y2hlcyB3aXRoIGZpbHRlckJ5UHJlZml4CisgICAgICAgICAgICBvciBOb25lIGlmIG5vIG1hdGNoZWQgR1VBCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRHVUEnICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IGZpbHRlckJ5UHJlZml4CisgICAgICAgIGdsb2JhbEFkZHJzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBnZXQgZ2xvYmFsIGFkZHJzIHNldCBpZiBtdWx0aXBsZQorICAgICAgICAgICAgZ2xvYmFsQWRkcnMgPSBzZWxmLmdldEdsb2JhbCgpCisKKyAgICAgICAgICAgIGlmIGZpbHRlckJ5UHJlZml4IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbEFkZHJzWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGdsb2JhbEFkZHJzOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoZmlsdGVyQnlQcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgICAgICAgICBwcmludCAnbm8gZ2xvYmFsIGFkZHJlc3MgbWF0Y2hlZCcKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJnZXRHVUEoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBnZXRTaG9ydEFkZHJlc3Moc2VsZik6CisgICAgICAgICIiImdldCBSbG9jMTYgc2hvcnQgYWRkcmVzcyBvZiBUaHJlYWQgZGV2aWNlIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldFNob3J0QWRkcmVzcycgJSBzZWxmLnBvcnQKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0UmxvYzE2KCkKKworICAgIGRlZiBnZXRVTEE2NChzZWxmKToKKyAgICAgICAgIiIiZ2V0IG1lc2ggbG9jYWwgRUlEIG9mIFRocmVhZCBkZXZpY2UiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0VUxBNjQnICUgc2VsZi5wb3J0CisgICAgICAgIHJldHVybiBzZWxmLmdldE1MRUlEKCkKKworICAgIGRlZiBzZXRNTFByZWZpeChzZWxmLCBzTWVzaExvY2FsUHJlZml4KToKKyAgICAgICAgIiIic2V0IG1lc2ggbG9jYWwgcHJlZml4IiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldE1MUHJlZml4JyAlIHNlbGYucG9ydAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBtZXNobG9jYWxwcmVmaXggJXMnICUgc01lc2hMb2NhbFByZWZpeAorICAgICAgICAgICAgc2VsZi5oYXNBY3RpdmVEYXRhc2V0VG9Db21taXQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInNldE1MUHJlZml4KCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgZ2V0TUwxNihzZWxmKToKKyAgICAgICAgIiIiZ2V0IG1lc2ggbG9jYWwgMTYgdW5pY2FzdCBhZGRyZXNzIChSbG9jKSIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRNTDE2JyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5nZXRSbG9jKCkKKworICAgIGRlZiBkb3duZ3JhZGVUb0RldmljZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHVwZ3JhZGVUb1JvdXRlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGZvcmNlU2V0U2xhYWMoc2VsZiwgc2xhYWNBZGRyZXNzKToKKyAgICAgICAgIiIiZm9yY2UgdG8gc2V0IGEgc2xhYWMgSVB2NiBhZGRyZXNzIHRvIFRocmVhZCBpbnRlcmZhY2UKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgc2xhYWNBZGRyZXNzOiBhIHNsYWFjIElQdjYgYWRkcmVzcyB0byBiZSBzZXQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgc2xhYWMgYWRkcmVzcyB0byBUaHJlYWQgaW50ZXJmYWNlCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZXQgc2xhYWMgYWRkcmVzcyB0byBUaHJlYWQgaW50ZXJmYWNlCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBmb3JjZVNldFNsYWFjJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBzbGFhY0FkZHJlc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ2lwYWRkciBhZGQgJXMnICUgc3RyKHNsYWFjQWRkcmVzcykKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJmb3JjZVNldFNsYWFjKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgc2V0U2xlZXB5Tm9kZVBvbGxUaW1lKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZW5hYmxlQXV0b0RVVE9iamVjdEZsYWcoc2VsZik6CisgICAgICAgICIiInNldCBBdXRvRFVUZW5hYmxlIGZsYWciIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZW5hYmxlQXV0b0RVVE9iamVjdEZsYWcnICUgc2VsZi5wb3J0CisgICAgICAgIHNlbGYuQXV0b0RVVEVuYWJsZSA9IFRydWUKKworICAgIGRlZiBnZXRDaGlsZFRpbWVvdXRWYWx1ZShzZWxmKToKKyAgICAgICAgIiIiZ2V0IGNoaWxkIHRpbWVvdXQiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0Q2hpbGRUaW1lb3V0VmFsdWUnICUgc2VsZi5wb3J0CisgICAgICAgIGNoaWxkVGltZW91dCA9IHNlbGYuX19zZW5kQ29tbWFuZCgnY2hpbGR0aW1lb3V0JylbMF0KKyAgICAgICAgcmV0dXJuIGludChjaGlsZFRpbWVvdXQpCisKKyAgICBkZWYgZGlhZ25vc3RpY0dldChzZWxmLCBzdHJEZXN0aW5hdGlvbkFkZHIsIGxpc3RUTFZfaWRzPVtdKToKKyAgICAgICAgaWYgbm90IGxpc3RUTFZfaWRzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IGxlbihsaXN0VExWX2lkcyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbWQgPSAnbmV0d29ya2RpYWdub3N0aWMgZ2V0ICVzICVzJyAlIChzdHJEZXN0aW5hdGlvbkFkZHIsICcgJy5qb2luKFtzdHIodGx2KSBmb3IgdGx2IGluIGxpc3RUTFZfaWRzXSkpCisgICAgICAgIHByaW50IGNtZAorCisgICAgICAgIHJldHVybiBzZWxmLl9zZW5kbGluZShjbWQpCisKKyAgICBkZWYgZGlhZ25vc3RpY1Jlc2V0KHNlbGYsIHN0ckRlc3RpbmF0aW9uQWRkciwgbGlzdFRMVl9pZHM9W10pOgorICAgICAgICBpZiBub3QgbGlzdFRMVl9pZHM6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3QgbGVuKGxpc3RUTFZfaWRzKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNtZCA9ICduZXR3b3JrZGlhZ25vc3RpYyByZXNldCAlcyAlcycgJSAoc3RyRGVzdGluYXRpb25BZGRyLCAnICcuam9pbihbc3RyKHRsdikgZm9yIHRsdiBpbiBsaXN0VExWX2lkc10pKQorICAgICAgICBwcmludCBjbWQKKworICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZCkKKworICAgIGRlZiBzdGFydE5hdGl2ZUNvbW1pc3Npb25lcihzZWxmLCBzdHJQU0tjPSdHUkxwYXNzV29yZCcpOgorICAgICAgICAjVE9ETzogU3VwcG9ydCB0aGUgd2hvbGUgTmF0aXZlIENvbW1pc3Npb25lciBmdW5jdGlvbmFsaXR5CisgICAgICAgICMgICAgICBDdXJyZW50bHkgaXQgb25seSBhaW1zIHRvIHRyaWdnZXIgYSBEaXNjb3ZlcnkgUmVxdWVzdCBtZXNzYWdlIHRvIHBhc3MgQ2VydGlmaWNhdGlvbiB0ZXN0IDUuOC40CisgICAgICAgIHByaW50ICclcyBjYWxsIHN0YXJ0TmF0aXZlQ29tbWlzc2lvbmVyJyAlIHNlbGYucG9ydAorICAgICAgICBzZWxmLl9fc2VuZENvbW1hbmQoJ2lmY29uZmlnIHVwJykKKyAgICAgICAgY21kID0gJ2pvaW5lciBzdGFydCAlcycgJShzdHJQU0tjKQorICAgICAgICBwcmludCBjbWQKKyAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gIkRvbmUiOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHN0YXJ0Q29sbGFwc2VkQ29tbWlzc2lvbmVyKHNlbGYpOgorICAgICAgICAiIiJzdGFydCBDb2xsYXBzZWQgQ29tbWlzc2lvbmVyCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc3RhcnQgQ29tbWlzc2lvbmVyCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzdGFydCBDb21taXNzaW9uZXIKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHN0YXJ0Q29sbGFwc2VkQ29tbWlzc2lvbmVyJyAlIHNlbGYucG9ydAorICAgICAgICBpZiBzZWxmLl9fc3RhcnRPcGVuVGhyZWFkKCk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDIwKQorICAgICAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBzdGFydCcKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgIHNlbGYuaXNBY3RpdmVDb21taXNzaW9uZXIgPSBUcnVlCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgyMCkgIyB0aW1lIGZvciBwZXRpdGlvbiBwcm9jZXNzCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc2V0Sm9pbktleShzZWxmLCBzdHJQU0tjKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHNjYW5Kb2luZXIoc2VsZiwgeEVVST0nKicsIHN0clBTS2Q9J3RocmVhZGpwYWtldGVzdCcpOgorICAgICAgICAiIiJzY2FuIEpvaW5lcgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB4RVVJOiBKb2luZXIncyBFVUktNjQKKyAgICAgICAgICAgIHN0clBTS2Q6IEpvaW5lcidzIFBTS2QgZm9yIGNvbW1pc3Npb25pbmcKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBhZGQgSm9pbmVyJ3Mgc3RlZXJpbmcgZGF0YQorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gYWRkIEpvaW5lcidzIHN0ZWVyaW5nIGRhdGEKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNjYW5Kb2luZXInICUgc2VsZi5wb3J0CisgICAgICAgIGlmIHhFVUkgPT0gJyonOgorICAgICAgICAgICAgSm9pbmVySGFzaE1hYyA9ICcqJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgSm9pbmVyQWRkciA9IE1vZHVsZUhlbHBlci5DYWxjdWxhdGVIYXNoTWFjKHhFVUkpCisgICAgICAgICAgICBKb2luZXJIYXNoTWFjID0gaGV4KGludChKb2luZXJBZGRyKSkucnN0cmlwKCJMIikubHN0cmlwKCIweCIpCisKKyAgICAgICAgIyBsb25nIHRpbWVvdXQgdmFsdWUgdG8gYXZvaWQgYXV0b21hdGljIGpvaW5lciByZW1vdmFsIChpbiBzZWNvbmRzKQorICAgICAgICB0aW1lb3V0ID0gNTAwCisKKyAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBqb2luZXIgYWRkICVzICVzICVzJyAlIChKb2luZXJIYXNoTWFjLCBzdHJQU0tkLCBzdHIodGltZW91dCkpCisgICAgICAgIHByaW50IGNtZAorICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICBpZiBzZWxmLmxvZ1RocmVhZFN0YXR1cyA9PSBzZWxmLmxvZ1N0YXR1c1snc3RvcCddOgorICAgICAgICAgICAgICAgIHNlbGYubG9nVGhyZWFkID0gVGhyZWFkUnVubmVyLnJ1bih0YXJnZXQ9c2VsZi5fX3JlYWRDb21taXNzaW9uaW5nTG9ncywgYXJncz0oMTIwLCkpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc2V0UHJvdmlzaW9uaW5nVXJsKHNlbGYsIHN0clVSTD0nZ3JsLmNvbScpOgorICAgICAgICAiIiJzZXQgcHJvdmlzaW9uaW5nIFVybAorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzdHJVUkw6IFByb3Zpc2lvbmluZyBVcmwgc3RyaW5nCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHByb3Zpc2lvbmluZyBVcmwKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCBwcm92aXNpb25pbmcgVXJsCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXRQcm92aXNpb25pbmdVcmwnICUgc2VsZi5wb3J0CisgICAgICAgIGNtZCA9ICdjb21taXNzaW9uZXIgcHJvdmlzaW9uaW5ndXJsICVzJyAlKHN0clVSTCkKKyAgICAgICAgc2VsZi5wcm92aXNpb25pbmdVcmwgPSBzdHJVUkwKKyAgICAgICAgcHJpbnQgY21kCisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAiRG9uZSIKKworICAgIGRlZiBhbGxvd0NvbW1pc3Npb24oc2VsZik6CisgICAgICAgICIiInN0YXJ0IGNvbW1pc3Npb25lciBjYW5kaWRhdGUgcGV0aXRpb24gcHJvY2VzcworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHN0YXJ0IGNvbW1pc3Npb25lciBjYW5kaWRhdGUgcGV0aXRpb24gcHJvY2VzcworICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc3RhcnQgY29tbWlzc2lvbmVyIGNhbmRpZGF0ZSBwZXRpdGlvbiBwcm9jZXNzCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBhbGxvd0NvbW1pc3Npb24nICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdjb21taXNzaW9uZXIgc3RhcnQnCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICBzZWxmLmlzQWN0aXZlQ29tbWlzc2lvbmVyID0gVHJ1ZQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoNDApICMgdGltZSBmb3IgcGV0aXRpb24gcHJvY2VzcyBhbmQgYXQgbGVhc3Qgb25lIGtlZXAgYWxpdmUKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci53cml0ZWludG9kZWJ1Z2xvZ2dlcigiYWxsb3djb21taXNzaW9uKCkgZXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgam9pbkNvbW1pc3Npb25lZChzZWxmLCBzdHJQU0tkPSd0aHJlYWRqcGFrZXRlc3QnLCB3YWl0VGltZT0yMCk6CisgICAgICAgICIiInN0YXJ0IGpvaW5lcgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzdHJQU0tkOiBKb2luZXIncyBQU0tkCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc3RhcnQgam9pbmVyCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzdGFydCBqb2luZXIKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGpvaW5Db21taXNzaW9uZWQnICUgc2VsZi5wb3J0CisgICAgICAgIHNlbGYuX19zZW5kQ29tbWFuZCgnaWZjb25maWcgdXAnKQorICAgICAgICBjbWQgPSAnam9pbmVyIHN0YXJ0ICVzICVzJyAlKHN0clBTS2QsIHNlbGYucHJvdmlzaW9uaW5nVXJsKQorICAgICAgICBwcmludCBjbWQKKyAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gIkRvbmUiOgorICAgICAgICAgICAgbWF4RHVyYXRpb24gPSAxNTAgIyBzZWNvbmRzCisgICAgICAgICAgICBzZWxmLmpvaW5Db21taXNzaW9uZWRTdGF0dXMgPSBzZWxmLmpvaW5TdGF0dXNbJ29uZ29pbmcnXQorCisgICAgICAgICAgICBpZiBzZWxmLmxvZ1RocmVhZFN0YXR1cyA9PSBzZWxmLmxvZ1N0YXR1c1snc3RvcCddOgorICAgICAgICAgICAgICAgIHNlbGYubG9nVGhyZWFkID0gVGhyZWFkUnVubmVyLnJ1bih0YXJnZXQ9c2VsZi5fX3JlYWRDb21taXNzaW9uaW5nTG9ncywgYXJncz0obWF4RHVyYXRpb24sKSkKKworICAgICAgICAgICAgdF9lbmQgPSB0aW1lLnRpbWUoKSArIG1heER1cmF0aW9uCisgICAgICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSA8IHRfZW5kOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuam9pbkNvbW1pc3Npb25lZFN0YXR1cyA9PSBzZWxmLmpvaW5TdGF0dXNbJ3N1Y2NlZWQnXToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuam9pbkNvbW1pc3Npb25lZFN0YXR1cyA9PSBzZWxmLmpvaW5TdGF0dXNbJ2ZhaWxlZCddOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICAgICAgc2VsZi5fX3NlbmRDb21tYW5kKCd0aHJlYWQgc3RhcnQnKQorICAgICAgICAgICAgdGltZS5zbGVlcCgzMCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXRDb21taXNzaW9uaW5nTG9ncyhzZWxmKToKKyAgICAgICAgIiIiZ2V0IENvbW1pc3Npb25pbmcgbG9ncworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgIENvbW1pc3Npb25pbmcgbG9ncworICAgICAgICAiIiIKKyAgICAgICAgcmF3TG9ncyA9IHNlbGYubG9nVGhyZWFkLmdldCgpCisgICAgICAgIFByb2Nlc3NlZExvZ3MgPSBbXQorICAgICAgICBwYXlsb2FkID0gW10KKyAgICAgICAgd2hpbGUgbm90IHJhd0xvZ3MuZW1wdHkoKToKKyAgICAgICAgICAgIHJhd0xvZ0VhY2ggPSByYXdMb2dzLmdldCgpCisgICAgICAgICAgICBwcmludCByYXdMb2dFYWNoCisgICAgICAgICAgICBpZiAiW1RIQ0ldIiBub3QgaW4gcmF3TG9nRWFjaDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBFbmNyeXB0ZWRQYWNrZXQgPSBQbGF0Zm9ybURpYWdub3N0aWNQYWNrZXQoKQorICAgICAgICAgICAgaW5mb0xpc3QgPSByYXdMb2dFYWNoLnNwbGl0KCdbVEhDSV0nKVsxXS5zcGxpdCgnXScpWzBdLnNwbGl0KCd8JykKKyAgICAgICAgICAgIGZvciBlYWNoSW5mbyBpbiBpbmZvTGlzdDoKKyAgICAgICAgICAgICAgICBwcmludCBlYWNoSW5mbworICAgICAgICAgICAgICAgIGluZm8gPSBlYWNoSW5mby5zcGxpdCgiPSIpCisgICAgICAgICAgICAgICAgaW5mb1R5cGUgPSBpbmZvWzBdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpbmZvVmFsdWUgPSBpbmZvWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiAiZGlyZWN0aW9uIiBpbiBpbmZvVHlwZToKKyAgICAgICAgICAgICAgICAgICAgRW5jcnlwdGVkUGFja2V0LkRpcmVjdGlvbiA9IFBsYXRmb3JtRGlhZ25vc3RpY1BhY2tldF9EaXJlY3Rpb24uSU4gaWYgJ3JlY3YnIGluIGluZm9WYWx1ZSBcCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFBsYXRmb3JtRGlhZ25vc3RpY1BhY2tldF9EaXJlY3Rpb24uT1VUIGlmICdzZW5kJyBpbiBpbmZvVmFsdWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBQbGF0Zm9ybURpYWdub3N0aWNQYWNrZXRfRGlyZWN0aW9uLlVOS05PV04KKyAgICAgICAgICAgICAgICBlbGlmICJ0eXBlIiBpbiBpbmZvVHlwZToKKyAgICAgICAgICAgICAgICAgICAgRW5jcnlwdGVkUGFja2V0LlR5cGUgPSBQbGF0Zm9ybURpYWdub3N0aWNQYWNrZXRfVHlwZS5KT0lOX0ZJTl9yZXEgaWYgJ0pPSU5fRklOLnJlcScgaW4gaW5mb1ZhbHVlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgUGxhdGZvcm1EaWFnbm9zdGljUGFja2V0X1R5cGUuSk9JTl9GSU5fcnNwIGlmICdKT0lOX0ZJTi5yc3AnIGluIGluZm9WYWx1ZSBcCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFBsYXRmb3JtRGlhZ25vc3RpY1BhY2tldF9UeXBlLkpPSU5fRU5UX3JlcSBpZiAnSk9JTl9FTlQubnRmJyBpbiBpbmZvVmFsdWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBQbGF0Zm9ybURpYWdub3N0aWNQYWNrZXRfVHlwZS5KT0lOX0VOVF9yc3AgaWYgJ0pPSU5fRU5ULnJzcCcgaW4gaW5mb1ZhbHVlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgUGxhdGZvcm1EaWFnbm9zdGljUGFja2V0X1R5cGUuVU5LTk9XTgorICAgICAgICAgICAgICAgIGVsaWYgImxlbiIgaW4gaW5mb1R5cGU6CisgICAgICAgICAgICAgICAgICAgIGJ5dGVzSW5FYWNoTGluZSA9IDE2CisgICAgICAgICAgICAgICAgICAgIEVuY3J5cHRlZFBhY2tldC5UTFZzTGVuZ3RoID0gaW50KGluZm9WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZExpbmVDb3VudCA9IChpbnQoaW5mb1ZhbHVlKSArIGJ5dGVzSW5FYWNoTGluZSAtIDEpL2J5dGVzSW5FYWNoTGluZQorICAgICAgICAgICAgICAgICAgICB3aGlsZSBwYXlsb2FkTGluZUNvdW50ID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRMaW5lQ291bnQgPSBwYXlsb2FkTGluZUNvdW50IC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZExpbmUgPSByYXdMb2dzLmdldCgpCisgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkU3BsaXQgPSBwYXlsb2FkTGluZS5zcGxpdCgnfCcpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYmxvY2sgaW4gcmFuZ2UoMSwgMyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZEJsb2NrID0gcGF5bG9hZFNwbGl0W2Jsb2NrXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRWYWx1ZXMgPSBwYXlsb2FkQmxvY2suc3BsaXQoJyAnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBudW0gaW4gcmFuZ2UoMSwgOSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICIuLiIgbm90IGluIHBheWxvYWRWYWx1ZXNbbnVtXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuYXBwZW5kKGludChwYXlsb2FkVmFsdWVzW251bV0sIDE2KSkKKworICAgICAgICAgICAgICAgICAgICBFbmNyeXB0ZWRQYWNrZXQuVExWcyA9IFBsYXRmb3JtUGFja2V0cy5yZWFkKEVuY3J5cHRlZFBhY2tldC5UeXBlLCBwYXlsb2FkKSBpZiBwYXlsb2FkICE9IFtdIGVsc2UgW10KKworICAgICAgICAgICAgUHJvY2Vzc2VkTG9ncy5hcHBlbmQoRW5jcnlwdGVkUGFja2V0KQorICAgICAgICByZXR1cm4gUHJvY2Vzc2VkTG9ncworCisgICAgZGVmIE1HTVRfRURfU0NBTihzZWxmLCBzQWRkciwgeENvbW1pc3Npb25lclNlc3Npb25JZCwgbGlzdENoYW5uZWxNYXNrLCB4Q291bnQsIHhQZXJpb2QsIHhTY2FuRHVyYXRpb24pOgorICAgICAgICAiIiJzZW5kIE1HTVRfRURfU0NBTiBtZXNzYWdlIHRvIGEgZ2l2ZW4gZGVzdGluYWl0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzQWRkcjogSVB2NiBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGlzIG1lc3NhZ2UKKyAgICAgICAgICAgIHhDb21taXNzaW9uZXJTZXNzaW9uSWQ6IGNvbW1pc3Npb25lciBzZXNzaW9uIGlkCisgICAgICAgICAgICBsaXN0Q2hhbm5lbE1hc2s6IGEgY2hhbm5lbCBhcnJheSB0byBpbmRpY2F0ZSB3aGljaCBjaGFubmVscyB0byBiZSBzY2FuZWQKKyAgICAgICAgICAgIHhDb3VudDogbnVtYmVyIG9mIElFRUUgODAyLjE1LjQgRUQgU2NhbnMgKG1pbGxpc2Vjb25kcykKKyAgICAgICAgICAgIHhQZXJpb2Q6IFBlcmlvZCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgSUVFRTgwMi4xNS40IEVEIFNjYW5zIChtaWxsaXNlY29uZHMpCisgICAgICAgICAgICB4U2NhbkR1cmF0aW9uOiBJRUVFIDgwMi4xNS40IFNjYW5EdXJhdGlvbiB0byB1c2Ugd2hlbiBwZXJmb3JtaW5nIGFuIElFRUUgODAyLjE1LjQgRUQgU2NhbiAobWlsbGlzZWNvbmRzKQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNlbmQgTUdNVF9FRF9TQ0FOIG1lc3NhZ2UuCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZW5kIE1HTVRfRURfU0NBTiBtZXNzYWdlCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBNR01UX0VEX1NDQU4nICUgc2VsZi5wb3J0CisgICAgICAgIGNoYW5uZWxNYXNrID0gJycKKyAgICAgICAgY2hhbm5lbE1hc2sgPSAnMHgnICsgc2VsZi5fX2NvbnZlcnRMb25nVG9TdHJpbmcoc2VsZi5fX2NvbnZlcnRDaGFubmVsTWFzayhsaXN0Q2hhbm5lbE1hc2spKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnY29tbWlzc2lvbmVyIGVuZXJneSAlcyAlcyAlcyAlcyAlcycgJSAoY2hhbm5lbE1hc2ssIHhDb3VudCwgeFBlcmlvZCwgeFNjYW5EdXJhdGlvbiwgc0FkZHIpCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci53cml0ZWludG9kZWJ1Z2xvZ2dlcigiTUdNVF9FRF9TQ0FOKCkgZXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgTUdNVF9QQU5JRF9RVUVSWShzZWxmLCBzQWRkciwgeENvbW1pc3Npb25lclNlc3Npb25JZCwgbGlzdENoYW5uZWxNYXNrLCB4UGFuSWQpOgorICAgICAgICAiIiJzZW5kIE1HTVRfUEFOSURfUVVFUlkgbWVzc2FnZSB0byBhIGdpdmVuIGRlc3RpbmF0aW9uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHhQYW5JZDogYSBnaXZlbiBQQU4gSUQgdG8gY2hlY2sgdGhlIGNvbmZsaWN0cworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNlbmQgTUdNVF9QQU5JRF9RVUVSWSBtZXNzYWdlLgorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2VuZCBNR01UX1BBTklEX1FVRVJZIG1lc3NhZ2UuCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBNR01UX1BBTklEX1FVRVJZJyAlIHNlbGYucG9ydAorICAgICAgICBwYW5pZCA9ICcnCisgICAgICAgIGNoYW5uZWxNYXNrID0gJycKKyAgICAgICAgY2hhbm5lbE1hc2sgPSAnMHgnICsgc2VsZi5fX2NvbnZlcnRMb25nVG9TdHJpbmcoc2VsZi5fX2NvbnZlcnRDaGFubmVsTWFzayhsaXN0Q2hhbm5lbE1hc2spKQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHhQYW5JZCwgc3RyKToKKyAgICAgICAgICAgIHBhbmlkID0gc3RyKGhleCh4UGFuSWQpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdjb21taXNzaW9uZXIgcGFuaWQgJXMgJXMgJXMnICUgKHBhbmlkLCBjaGFubmVsTWFzaywgc0FkZHIpCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci53cml0ZWludG9kZWJ1Z2xvZ2dlcigiTUdNVF9QQU5JRF9RVUVSWSgpIGVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIE1HTVRfQU5OT1VOQ0VfQkVHSU4oc2VsZiwgc0FkZHIsIHhDb21taXNzaW9uZXJTZXNzaW9uSWQsIGxpc3RDaGFubmVsTWFzaywgeENvdW50LCB4UGVyaW9kKToKKyAgICAgICAgIiIic2VuZCBNR01UX0FOTk9VTkNFX0JFR0lOIG1lc3NhZ2UgdG8gYSBnaXZlbiBkZXN0aW5hdGlvbgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNlbmQgTUdNVF9BTk5PVU5DRV9CRUdJTiBtZXNzYWdlLgorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2VuZCBNR01UX0FOTk9VTkNFX0JFR0lOIG1lc3NhZ2UuCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBNR01UX0FOTk9VTkNFX0JFR0lOJyAlIHNlbGYucG9ydAorICAgICAgICBjaGFubmVsTWFzayA9ICcnCisgICAgICAgIGNoYW5uZWxNYXNrID0gJzB4JyArIHNlbGYuX19jb252ZXJ0TG9uZ1RvU3RyaW5nKHNlbGYuX19jb252ZXJ0Q2hhbm5lbE1hc2sobGlzdENoYW5uZWxNYXNrKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBhbm5vdW5jZSAlcyAlcyAlcyAlcycgJSAoY2hhbm5lbE1hc2ssIHhDb3VudCwgeFBlcmlvZCwgc0FkZHIpCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci53cml0ZWludG9kZWJ1Z2xvZ2dlcigiTUdNVF9BTk5PVU5DRV9CRUdJTigpIGVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIE1HTVRfQUNUSVZFX0dFVChzZWxmLCBBZGRyPScnLCBUTFZzPVtdKToKKyAgICAgICAgIiIic2VuZCBNR01UX0FDVElWRV9HRVQgY29tbWFuZAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNlbmQgTUdNVF9BQ1RJVkVfR0VUCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZW5kIE1HTVRfQUNUSVZFX0dFVAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgTUdNVF9BQ1RJVkVfR0VUJyAlIHNlbGYucG9ydAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBtZ210Z2V0Y29tbWFuZCBhY3RpdmUnCisKKyAgICAgICAgICAgIGlmIEFkZHIgIT0gJyc6CisgICAgICAgICAgICAgICAgY21kICs9ICcgYWRkcmVzcyAnCisgICAgICAgICAgICAgICAgY21kICs9IEFkZHIKKworICAgICAgICAgICAgaWYgbGVuKFRMVnMpICE9IDA6CisgICAgICAgICAgICAgICAgdGx2cyA9ICIiLmpvaW4oaGV4KHRsdikubHN0cmlwKCIweCIpLnpmaWxsKDIpIGZvciB0bHYgaW4gVExWcykKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBiaW5hcnkgJworICAgICAgICAgICAgICAgIGNtZCArPSB0bHZzCisKKyAgICAgICAgICAgIHByaW50IGNtZAorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiTUdNVF9BQ1RJVkVfR0VUKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgTUdNVF9BQ1RJVkVfU0VUKHNlbGYsIHNBZGRyPScnLCB4Q29tbWlzc2lvbmluZ1Nlc3Npb25JZD1Ob25lLCBsaXN0QWN0aXZlVGltZXN0YW1wPU5vbmUsIGxpc3RDaGFubmVsTWFzaz1Ob25lLCB4RXh0ZW5kZWRQYW5JZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgc05ldHdvcmtOYW1lPU5vbmUsIHNQU0tjPU5vbmUsIGxpc3RTZWN1cml0eVBvbGljeT1Ob25lLCB4Q2hhbm5lbD1Ob25lLCBzTWVzaExvY2FsUHJlZml4PU5vbmUsIHhNYXN0ZXJLZXk9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHhQYW5JZD1Ob25lLCB4VG1mUG9ydD1Ob25lLCB4U3RlZXJpbmdEYXRhPU5vbmUsIHhCb3JkZXJSb3V0ZXJMb2NhdG9yPU5vbmUsIEJvZ3VzVExWPU5vbmUsIHhEZWxheVRpbWVyPU5vbmUpOgorICAgICAgICAiIiJzZW5kIE1HTVRfQUNUSVZFX1NFVCBjb21tYW5kCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2VuZCBNR01UX0FDVElWRV9TRVQKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNlbmQgTUdNVF9BQ1RJVkVfU0VUCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBNR01UX0FDVElWRV9TRVQnICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdkYXRhc2V0IG1nbXRzZXRjb21tYW5kIGFjdGl2ZScKKworICAgICAgICAgICAgaWYgbGlzdEFjdGl2ZVRpbWVzdGFtcCAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIGFjdGl2ZXRpbWVzdGFtcCAnCisgICAgICAgICAgICAgICAgY21kICs9IHN0cihsaXN0QWN0aXZlVGltZXN0YW1wWzBdKQorCisgICAgICAgICAgICBpZiB4RXh0ZW5kZWRQYW5JZCAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIGV4dHBhbmlkICcKKyAgICAgICAgICAgICAgICB4cGFuaWQgPSBzZWxmLl9fY29udmVydExvbmdUb1N0cmluZyh4RXh0ZW5kZWRQYW5JZCkKKworICAgICAgICAgICAgICAgIGlmIGxlbih4cGFuaWQpIDwgMTY6CisgICAgICAgICAgICAgICAgICAgIHhwYW5pZCA9IHhwYW5pZC56ZmlsbCgxNikKKworICAgICAgICAgICAgICAgIGNtZCArPSB4cGFuaWQKKworICAgICAgICAgICAgaWYgc05ldHdvcmtOYW1lICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgbmV0d29ya25hbWUgJworICAgICAgICAgICAgICAgIGNtZCArPSBzdHIoc05ldHdvcmtOYW1lKQorCisgICAgICAgICAgICBpZiB4Q2hhbm5lbCAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIGNoYW5uZWwgJworICAgICAgICAgICAgICAgIGNtZCArPSBzdHIoeENoYW5uZWwpCisKKyAgICAgICAgICAgIGlmIHNNZXNoTG9jYWxQcmVmaXggIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBsb2NhbHByZWZpeCAnCisgICAgICAgICAgICAgICAgY21kICs9IHN0cihzTWVzaExvY2FsUHJlZml4KQorCisgICAgICAgICAgICBpZiB4TWFzdGVyS2V5ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgbWFzdGVya2V5ICcKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9fY29udmVydExvbmdUb1N0cmluZyh4TWFzdGVyS2V5KQorCisgICAgICAgICAgICAgICAgaWYgbGVuKGtleSkgPCAzMjoKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnpmaWxsKDMyKQorCisgICAgICAgICAgICAgICAgY21kICs9IGtleQorCisgICAgICAgICAgICBpZiB4UGFuSWQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBwYW5pZCAnCisgICAgICAgICAgICAgICAgY21kICs9IHN0cih4UGFuSWQpCisKKyAgICAgICAgICAgIGlmIGxpc3RDaGFubmVsTWFzayAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIGNoYW5uZWxtYXNrICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gJzB4JyArIHNlbGYuX19jb252ZXJ0TG9uZ1RvU3RyaW5nKHNlbGYuX19jb252ZXJ0Q2hhbm5lbE1hc2sobGlzdENoYW5uZWxNYXNrKSkKKworICAgICAgICAgICAgaWYgc1BTS2MgIT0gTm9uZSBvciBsaXN0U2VjdXJpdHlQb2xpY3kgIT0gTm9uZSBvciBcCisgICAgICAgICAgICAgICB4Q29tbWlzc2lvbmluZ1Nlc3Npb25JZCAhPSBOb25lIG9yIHhUbWZQb3J0ICE9IE5vbmUgb3IgeFN0ZWVyaW5nRGF0YSAhPSBOb25lIG9yIHhCb3JkZXJSb3V0ZXJMb2NhdG9yICE9IE5vbmUgb3IgXAorICAgICAgICAgICAgICAgQm9ndXNUTFYgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBiaW5hcnkgJworCisgICAgICAgICAgICBpZiBzUFNLYyAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnMDQxMCcKKyAgICAgICAgICAgICAgICBzdHJldGNoZWRQc2tjID0gVGhyZWFkX1BCS0RGMi5nZXQoc1BTS2MsTW9kdWxlSGVscGVyLkRlZmF1bHRfWHBhbklkLE1vZHVsZUhlbHBlci5EZWZhdWx0X053a05hbWUpCisgICAgICAgICAgICAgICAgcHNrYyA9IGhleChzdHJldGNoZWRQc2tjKS5yc3RyaXAoJ0wnKS5sc3RyaXAoJzB4JykKKworICAgICAgICAgICAgICAgIGlmIGxlbihwc2tjKSA8IDMyOgorICAgICAgICAgICAgICAgICAgICBwc2tjID0gcHNrYy56ZmlsbCgzMikKKworICAgICAgICAgICAgICAgIGNtZCArPSBwc2tjCisKKyAgICAgICAgICAgIGlmIGxpc3RTZWN1cml0eVBvbGljeSAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnMGMwMycKKworICAgICAgICAgICAgICAgIHJvdGF0aW9uVGltZSA9IDAKKyAgICAgICAgICAgICAgICBwb2xpY3lCaXRzID0gMAorCisgICAgICAgICAgICAgICAgIyBwcmV2aW91cyBwYXNzaW5nIHdheSBsaXN0U2VjdXJpdHlQb2xpY3k9W1RydWUsIFRydWUsIDM2MDAsIEZhbHNlLCBGYWxzZSwgVHJ1ZV0KKyAgICAgICAgICAgICAgICBpZiAobGVuKGxpc3RTZWN1cml0eVBvbGljeSkgPT0gNik6CisgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uVGltZSA9IGxpc3RTZWN1cml0eVBvbGljeVsyXQorCisgICAgICAgICAgICAgICAgICAgICMgdGhlIGxhc3QgdGhyZWUgcmVzZXJ2ZWQgYml0cyBtdXN0IGJlIDEKKyAgICAgICAgICAgICAgICAgICAgcG9saWN5Qml0cyA9IDBiMDAwMDAxMTEKKworICAgICAgICAgICAgICAgICAgICBpZiBsaXN0U2VjdXJpdHlQb2xpY3lbMF06CisgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lCaXRzID0gcG9saWN5Qml0cyB8IDBiMTAwMDAwMDAKKyAgICAgICAgICAgICAgICAgICAgaWYgbGlzdFNlY3VyaXR5UG9saWN5WzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Qml0cyA9IHBvbGljeUJpdHMgfCAwYjAxMDAwMDAwCisgICAgICAgICAgICAgICAgICAgIGlmIGxpc3RTZWN1cml0eVBvbGljeVszXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUJpdHMgPSBwb2xpY3lCaXRzIHwgMGIwMDEwMDAwMAorICAgICAgICAgICAgICAgICAgICBpZiBsaXN0U2VjdXJpdHlQb2xpY3lbNF06CisgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lCaXRzID0gcG9saWN5Qml0cyB8IDBiMDAwMTAwMDAKKyAgICAgICAgICAgICAgICAgICAgaWYgbGlzdFNlY3VyaXR5UG9saWN5WzVdOgorICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Qml0cyA9IHBvbGljeUJpdHMgfCAwYjAwMDAxMDAwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBuZXcgcGFzc2luZyB3YXkgbGlzdFNlY3VyaXR5UG9saWN5PVszNjAwLCAwYjExMDAxMTExXQorICAgICAgICAgICAgICAgICAgICByb3RhdGlvblRpbWUgPSBsaXN0U2VjdXJpdHlQb2xpY3lbMF0KKyAgICAgICAgICAgICAgICAgICAgcG9saWN5Qml0cyA9IGxpc3RTZWN1cml0eVBvbGljeVsxXQorCisgICAgICAgICAgICAgICAgcG9saWN5ID0gc3RyKGhleChyb3RhdGlvblRpbWUpKVsyOl0KKworICAgICAgICAgICAgICAgIGlmIGxlbihwb2xpY3kpIDwgNDoKKyAgICAgICAgICAgICAgICAgICAgcG9saWN5ID0gcG9saWN5LnpmaWxsKDQpCisKKyAgICAgICAgICAgICAgICBjbWQgKz0gcG9saWN5CisKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKGhleChwb2xpY3lCaXRzKSlbMjpdCisKKyAgICAgICAgICAgIGlmIHhDb21taXNzaW9uaW5nU2Vzc2lvbklkICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcwYjAyJworICAgICAgICAgICAgICAgIHNlc3Npb25pZCA9IHN0cihoZXgoeENvbW1pc3Npb25pbmdTZXNzaW9uSWQpKVsyOl0KKworICAgICAgICAgICAgICAgIGlmIGxlbihzZXNzaW9uaWQpIDwgNDoKKyAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbmlkID0gc2Vzc2lvbmlkLnpmaWxsKDQpCisKKyAgICAgICAgICAgICAgICBjbWQgKz0gc2Vzc2lvbmlkCisKKyAgICAgICAgICAgIGlmIHhCb3JkZXJSb3V0ZXJMb2NhdG9yICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcwOTAyJworICAgICAgICAgICAgICAgIGxvY2F0b3IgPSBzdHIoaGV4KHhCb3JkZXJSb3V0ZXJMb2NhdG9yKSlbMjpdCisKKyAgICAgICAgICAgICAgICBpZiBsZW4obG9jYXRvcikgPCA0OgorICAgICAgICAgICAgICAgICAgICBsb2NhdG9yID0gbG9jYXRvci56ZmlsbCg0KQorCisgICAgICAgICAgICAgICAgY21kICs9IGxvY2F0b3IKKworICAgICAgICAgICAgaWYgeFN0ZWVyaW5nRGF0YSAhPSBOb25lOgorICAgICAgICAgICAgICAgIHN0ZWVyaW5nRGF0YSA9IHNlbGYuX19jb252ZXJ0TG9uZ1RvU3RyaW5nKHhTdGVlcmluZ0RhdGEpCisgICAgICAgICAgICAgICAgY21kICs9ICcwOCcgKyBzdHIobGVuKHN0ZWVyaW5nRGF0YSkvMikuemZpbGwoMikKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RlZXJpbmdEYXRhCisKKyAgICAgICAgICAgIGlmIEJvZ3VzVExWICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICI4MjAyYWE1NSIKKworICAgICAgICAgICAgcHJpbnQgY21kCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJNR01UX0FDVElWRV9TRVQoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBNR01UX1BFTkRJTkdfR0VUKHNlbGYsIEFkZHI9JycsIFRMVnM9W10pOgorICAgICAgICAiIiJzZW5kIE1HTVRfUEVORElOR19HRVQgY29tbWFuZAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNlbmQgTUdNVF9QRU5ESU5HX0dFVAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2VuZCBNR01UX1BFTkRJTkdfR0VUCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBNR01UX1BFTkRJTkdfR0VUJyAlIHNlbGYucG9ydAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBtZ210Z2V0Y29tbWFuZCBwZW5kaW5nJworCisgICAgICAgICAgICBpZiBBZGRyICE9ICcnOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIGFkZHJlc3MgJworICAgICAgICAgICAgICAgIGNtZCArPSBBZGRyCisKKyAgICAgICAgICAgIGlmIGxlbihUTFZzKSAhPSAwOgorICAgICAgICAgICAgICAgIHRsdnMgPSAiIi5qb2luKGhleCh0bHYpLmxzdHJpcCgiMHgiKS56ZmlsbCgyKSBmb3IgdGx2IGluIFRMVnMpCisgICAgICAgICAgICAgICAgY21kICs9ICcgYmluYXJ5ICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gdGx2cworCisgICAgICAgICAgICBwcmludCBjbWQKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoIk1HTVRfUEVORElOR19HRVQoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBNR01UX1BFTkRJTkdfU0VUKHNlbGYsIHNBZGRyPScnLCB4Q29tbWlzc2lvbmVyU2Vzc2lvbklkPU5vbmUsIGxpc3RQZW5kaW5nVGltZXN0YW1wPU5vbmUsIGxpc3RBY3RpdmVUaW1lc3RhbXA9Tm9uZSwgeERlbGF5VGltZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB4Q2hhbm5lbD1Ob25lLCB4UGFuSWQ9Tm9uZSwgeE1hc3RlcktleT1Ob25lLCBzTWVzaExvY2FsUHJlZml4PU5vbmUsIHNOZXR3b3JrTmFtZT1Ob25lKToKKyAgICAgICAgIiIic2VuZCBNR01UX1BFTkRJTkdfU0VUIGNvbW1hbmQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZW5kIE1HTVRfUEVORElOR19TRVQKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNlbmQgTUdNVF9QRU5ESU5HX1NFVAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgTUdNVF9QRU5ESU5HX1NFVCcgJSBzZWxmLnBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ2RhdGFzZXQgbWdtdHNldGNvbW1hbmQgcGVuZGluZycKKworICAgICAgICAgICAgaWYgbGlzdFBlbmRpbmdUaW1lc3RhbXAgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBwZW5kaW5ndGltZXN0YW1wICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKGxpc3RQZW5kaW5nVGltZXN0YW1wWzBdKQorCisgICAgICAgICAgICBpZiBsaXN0QWN0aXZlVGltZXN0YW1wICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgYWN0aXZldGltZXN0YW1wICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKGxpc3RBY3RpdmVUaW1lc3RhbXBbMF0pCisKKyAgICAgICAgICAgIGlmIHhEZWxheVRpbWVyICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgZGVsYXl0aW1lciAnCisgICAgICAgICAgICAgICAgY21kICs9IHN0cih4RGVsYXlUaW1lcikKKyAgICAgICAgICAgICAgICAjY21kICs9ICcgZGVsYXl0aW1lciAzMDAwMDAwJworCisgICAgICAgICAgICBpZiB4Q2hhbm5lbCAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIGNoYW5uZWwgJworICAgICAgICAgICAgICAgIGNtZCArPSBzdHIoeENoYW5uZWwpCisKKyAgICAgICAgICAgIGlmIHhQYW5JZCAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIHBhbmlkICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKHhQYW5JZCkKKworICAgICAgICAgICAgaWYgeE1hc3RlcktleSAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIG1hc3RlcmtleSAnCisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5fX2NvbnZlcnRMb25nVG9TdHJpbmcoeE1hc3RlcktleSkKKworICAgICAgICAgICAgICAgIGlmIGxlbihrZXkpIDwgMzI6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS56ZmlsbCgzMikKKworICAgICAgICAgICAgICAgIGNtZCArPSBrZXkKKworICAgICAgICAgICAgaWYgc01lc2hMb2NhbFByZWZpeCAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIGxvY2FscHJlZml4ICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKHNNZXNoTG9jYWxQcmVmaXgpCisKKyAgICAgICAgICAgIGlmIHNOZXR3b3JrTmFtZSAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIG5ldHdvcmtuYW1lICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKHNOZXR3b3JrTmFtZSkKKworICAgICAgICAgICAgaWYgeENvbW1pc3Npb25lclNlc3Npb25JZCAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIGJpbmFyeSAnCisgICAgICAgICAgICAgICAgY21kICs9ICcwYjAyJworICAgICAgICAgICAgICAgIHNlc3Npb25pZCA9IHN0cihoZXgoeENvbW1pc3Npb25lclNlc3Npb25JZCkpWzI6XQorCisgICAgICAgICAgICAgICAgaWYgbGVuKHNlc3Npb25pZCkgPCA0OgorICAgICAgICAgICAgICAgICAgICBzZXNzaW9uaWQgPSBzZXNzaW9uaWQuemZpbGwoNCkKKworICAgICAgICAgICAgICAgIGNtZCArPSBzZXNzaW9uaWQKKworICAgICAgICAgICAgcHJpbnQgY21kCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJNR01UX1BFTkRJTkdfU0VUKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgTUdNVF9DT01NX0dFVChzZWxmLCBBZGRyPSdmZjAyOjoxJywgVExWcz1bXSk6CisgICAgICAgICIiInNlbmQgTUdNVF9DT01NX0dFVCBjb21tYW5kCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2VuZCBNR01UX0NPTU1fR0VUCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZW5kIE1HTVRfQ09NTV9HRVQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIE1HTVRfQ09NTV9HRVQnICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdjb21taXNzaW9uZXIgbWdtdGdldCcKKworICAgICAgICAgICAgaWYgbGVuKFRMVnMpICE9IDA6CisgICAgICAgICAgICAgICAgdGx2cyA9ICIiLmpvaW4oaGV4KHRsdikubHN0cmlwKCIweCIpLnpmaWxsKDIpIGZvciB0bHYgaW4gVExWcykKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBiaW5hcnkgJworICAgICAgICAgICAgICAgIGNtZCArPSB0bHZzCisKKyAgICAgICAgICAgIHByaW50IGNtZAorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiTUdNVF9DT01NX0dFVCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIE1HTVRfQ09NTV9TRVQoc2VsZiwgQWRkcj0nZmYwMjo6MScsIHhDb21taXNzaW9uZXJTZXNzaW9uSUQ9Tm9uZSwgeFN0ZWVyaW5nRGF0YT1Ob25lLCB4Qm9yZGVyUm91dGVyTG9jYXRvcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIHhDaGFubmVsVGx2PU5vbmUsIEV4Y2VlZE1heFBheWxvYWQ9RmFsc2UpOgorICAgICAgICAiIiJzZW5kIE1HTVRfQ09NTV9TRVQgY29tbWFuZAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNlbmQgTUdNVF9DT01NX1NFVAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2VuZCBNR01UX0NPTU1fU0VUCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBNR01UX0NPTU1fU0VUJyAlIHNlbGYucG9ydAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnY29tbWlzc2lvbmVyIG1nbXRzZXQnCisKKyAgICAgICAgICAgIGlmIHhDb21taXNzaW9uZXJTZXNzaW9uSUQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAjIHVzZSBhc3NpZ25lZCBzZXNzaW9uIGlkCisgICAgICAgICAgICAgICAgY21kICs9ICcgc2Vzc2lvbmlkICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKHhDb21taXNzaW9uZXJTZXNzaW9uSUQpCisgICAgICAgICAgICBlbGlmIHhDb21taXNzaW9uZXJTZXNzaW9uSUQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIHVzZSBvcmlnaW5hbCBzZXNzaW9uIGlkCisgICAgICAgICAgICAgICAgaWYgc2VsZi5pc0FjdGl2ZUNvbW1pc3Npb25lciBpcyBUcnVlOgorICAgICAgICAgICAgICAgICAgICBjbWQgKz0gJyBzZXNzaW9uaWQgJworICAgICAgICAgICAgICAgICAgICBjbWQgKz0gc2VsZi5fX2dldENvbW1pc3Npb25lclNlc3Npb25JZCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBpZiB4U3RlZXJpbmdEYXRhICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgc3RlZXJpbmdkYXRhICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKGhleCh4U3RlZXJpbmdEYXRhKVsyOl0pCisKKyAgICAgICAgICAgIGlmIHhCb3JkZXJSb3V0ZXJMb2NhdG9yICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgbG9jYXRvciAnCisgICAgICAgICAgICAgICAgY21kICs9IHN0cihoZXgoeEJvcmRlclJvdXRlckxvY2F0b3IpKQorCisgICAgICAgICAgICBpZiB4Q2hhbm5lbFRsdiAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIGJpbmFyeSAnCisgICAgICAgICAgICAgICAgY21kICs9ICcwMDAzMDAnICsgaGV4KHhDaGFubmVsVGx2KS5sc3RyaXAoJzB4JykuemZpbGwoNCkKKworICAgICAgICAgICAgcHJpbnQgY21kCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJNR01UX0NPTU1fU0VUKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgc2V0QWN0aXZlRGF0YXNldChzZWxmLCBsaXN0QWN0aXZlRGF0YXNldD1bXSk6CisgICAgICAgIHByaW50ICclcyBjYWxsIHNldEFjdGl2ZURhdGFzZXQnICUgc2VsZi5wb3J0CisKKyAgICBkZWYgc2V0Q29tbWlzaW9uZXJNb2RlKHNlbGYpOgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXRDb21taXNzaW9uZXJNb2RlJyAlIHNlbGYucG9ydAorCisgICAgZGVmIHNldFBTS2Moc2VsZiwgc3RyUFNLYyk6CisgICAgICAgIHByaW50ICclcyBjYWxsIHNldFBTS2MnICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdkYXRhc2V0IHBza2MgJXMnICUgc3RyUFNLYworICAgICAgICAgICAgc2VsZi5oYXNBY3RpdmVEYXRhc2V0VG9Db21taXQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInNldFBTS2MoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBzZXRBY3RpdmVUaW1lc3RhbXAoc2VsZiwgeEFjdGl2ZVRpbWVzdGFtcCk6CisgICAgICAgIHByaW50ICclcyBjYWxsIHNldEFjdGl2ZVRpbWVzdGFtcCcgJSBzZWxmLnBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hY3RpdmV0aW1lc3RhbXAgPSB4QWN0aXZlVGltZXN0YW1wCisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBhY3RpdmV0aW1lc3RhbXAgJXMnICUgc3RyKHhBY3RpdmVUaW1lc3RhbXApCisgICAgICAgICAgICBzZWxmLmhhc0FjdGl2ZURhdGFzZXRUb0NvbW1pdCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0QWN0aXZlVGltZXN0YW1wKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgc2V0VWRwSm9pbmVyUG9ydChzZWxmLCBwb3J0TnVtYmVyKToKKyAgICAgICAgIiIic2V0IEpvaW5lciBVRFAgUG9ydAorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBwb3J0TnVtYmVyOiBKb2luZXIgVURQIFBvcnQgbnVtYmVyCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IEpvaW5lciBVRFAgUG9ydAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IEpvaW5lciBVRFAgUG9ydAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0VWRwSm9pbmVyUG9ydCcgJSBzZWxmLnBvcnQKKyAgICAgICAgY21kID0gJ2pvaW5lcnBvcnQgJWQnICUgcG9ydE51bWJlcgorICAgICAgICBwcmludCBjbWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworCisgICAgZGVmIGNvbW1pc3Npb25lclVucmVnaXN0ZXIoc2VsZik6CisgICAgICAgICIiInN0b3AgY29tbWlzc2lvbmVyCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc3RvcCBjb21taXNzaW9uZXIKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHN0b3AgY29tbWlzc2lvbmVyCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBjb21taXNzaW9uZXJVbnJlZ2lzdGVyJyAlIHNlbGYucG9ydAorICAgICAgICBjbWQgPSAnY29tbWlzc2lvbmVyIHN0b3AnCisgICAgICAgIHByaW50IGNtZAorICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisKKyAgICBkZWYgc2VuZEJlYWNvbnMoc2VsZiwgc0FkZHIsIHhDb21taXNzaW9uZXJTZXNzaW9uSWQsIGxpc3RDaGFubmVsTWFzaywgeFBhbklkKToKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2VuZEJlYWNvbnMnICUgc2VsZi5wb3J0CisgICAgICAgIHNlbGYuX3NlbmRsaW5lKCdzY2FuJykKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB1cGRhdGVSb3V0ZXJTdGF0dXMoc2VsZik6CisgICAgICAgICIiImZvcmNlIHVwZGF0ZSB0byByb3V0ZXIgYXMgaWYgdGhlcmUgaXMgY2hpbGQgaWQgcmVxdWVzdCIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCB1cGRhdGVSb3V0ZXJTdGF0dXMnICUgc2VsZi5wb3J0CisgICAgICAgIGNtZCA9ICdzdGF0ZScKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHN0YXRlID0gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0KKyAgICAgICAgICAgIGlmIHN0YXRlID09ICdkZXRhY2hlZCc6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgc3RhdGUgPT0gJ2NoaWxkJzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBjbWQgPSAnc3RhdGUgcm91dGVyJworICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisKKyAgICBkZWYgc2V0Um91dGVyVGhyZXNob2xkVmFsdWVzKHNlbGYsIHVwZ3JhZGVUaHJlc2hvbGQsIGRvd25ncmFkZVRocmVzaG9sZCk6CisgICAgICAgIHByaW50ICclcyBjYWxsIHNldFJvdXRlclRocmVzaG9sZFZhbHVlcycgJSBzZWxmLnBvcnQKKyAgICAgICAgc2VsZi5fX3NldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQodXBncmFkZVRocmVzaG9sZCkKKyAgICAgICAgc2VsZi5fX3NldFJvdXRlckRvd25ncmFkZVRocmVzaG9sZChkb3duZ3JhZGVUaHJlc2hvbGQpCisKKyAgICBkZWYgc2V0TWluRGVsYXlUaW1lcihzZWxmLCBpU2Vjb25kcyk6CisgICAgICAgIHByaW50ICclcyBjYWxsIHNldE1pbkRlbGF5VGltZXInICUgc2VsZi5wb3J0CisgICAgICAgIGNtZCA9ICdkZWxheXRpbWVybWluICVzJyAlIGlTZWNvbmRzCisgICAgICAgIHByaW50IGNtZAorICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisKKyAgICBkZWYgVmFsaWRhdGVEZXZpY2VGaXJtd2FyZShzZWxmKToKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgVmFsaWRhdGVEZXZpY2VGaXJtd2FyZScgJSBzZWxmLnBvcnQKKyAgICAgICAgaWYgIk9QRU5USFJFQUQiIGluIHNlbGYuVUlTdGF0dXNNc2c6CisgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy10aGNpL1JFQURNRS5tZCBiL3Rvb2xzL2hhcm5lc3MtdGhjaS9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlOGIwOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtdGhjaS9SRUFETUUubWQKQEAgLTAsMCArMSwzMCBAQAorT3BlblRocmVhZCBUSENJCis9PT09PT09PT09PT09PT0KKworT3BlblRocmVhZCBUSENJIChUaHJlYWQgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSkgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFB5dGhvbiBhYnN0cmFjdCBjbGFzcyB0ZW1wbGF0ZSAiSVRoY2kiLAord2hpY2ggaXMgdXNlZCBieSBUaHJlYWQgVGVzdCBIYXJuZXNzIFNvZnR3YXJlIHRvIGNvbnRyb2wgT3BlblRocmVhZC1iYXNlZCByZWZlcmVuY2UgZGV2aWNlcyBhY2NvcmRpbmcgdG8gZWFjaCB0ZXN0CitzY2VuYXJpby4KKworVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIENDMjUzOCBleGFtcGxlIHBsYXRmb3JtIGFuZCBpcyBpbmNsdWRlZCBpbiB0aGUgY3VycmVudCBUaHJlYWQgVGVzdCBIYXJuZXNzCitTb2Z0d2FyZSByZWxlYXNlLgorCitQbGF0Zm9ybSBkZXZlbG9wZXJzIHNob3VsZCBtb2RpZnkgdGhlIFRIQ0kgaW1wbGVtZW50YXRpb24gZGlyZWN0bHkgdG8gbWF0Y2ggdGhlaXIgcGxhdGZvcm0gKGUuZy4gc2VyaWFsIGJhdWQgcmF0ZSkuCitBbHRlcm5hdGl2ZWx5LCBwbGF0Zm9ybSBkZXZlbG9wZXJzIG1heSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBiZWxvdyB0byBhZGQgYSBuZXcgVEhDSSBpbXBsZW1lbnRhdGlvbiB0byB0aGUgVGVzdAorSGFybmVzcy4gQWRkaW5nIGEgbmV3IFRIQ0kgaW1wbGVtZW50YXRpb24gYWxsb3dzIHRoZSBleGlzdGluZyBDQzI1MzgtYmFzZWQgVEhDSSBpbXBsZW1lbnRhdGlvbiB0byBjb2V4aXN0IHdpdGggdGhlCituZXcgVEhDSSBpbXBsZW1lbnRhdGlvbi4KKworIyMgRW52aXJvbm1lbnQgU2V0dXAgIyMKKworMS4gQ29weSB0aGUgIk9wZW5UaHJlYWQucG5nIiB0byAvR1JML1RocmVhZDEuMS9NaW5pV2ViL2h0ZG9jcy9pbWFnZXMgZm9sZGVyLgorCisyLiBDb3B5IHRoZSAiZGV2aWNlSW5wdXRGaWVsZHMueG1sIiB0byAvR1JML1RocmVhZDEuMS9NaW5pV2ViL2h0ZG9jcy9kYXRhIGZvbGRlci4KKworMy4gQ29weSB0aGUgIk9wZW5UaHJlYWQucHkiIHRvIC9HUkwvVGhyZWFkMS4xL1RocmVhZF9IYXJuZXNzL1RIQ0kgZm9sZGVyLgorCis0LiBDb25uZWN0IERVVChEZXZpY2UgVW5kZXIgVGVzdCksIHNuaWZmZXIgYW5kIENDMjUzOERLKG9yIGhhcmR3YXJlIHJ1bm5pbmcgT3BlblRocmVhZCkgYXMgcmVmZXJlbmNlIGRldmljZSB0byBIb3N0IFBDLgorCis1LiBMYXVuY2ggVGhyZWFkIFRlc3QgSGFybmVzcyBTb2Z0d2FyZSBhbmQgbW9kaWZ5IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaWYgbmVlZGVkIHRoZW4gY2xpY2sgIlN0YXJ0Ii4KKworNi4gRHJhZyBPcGVuVGhyZWFkOiBUSSBDQzI1MzhESyByZWZlcmVuY2UgZGV2aWNlIHRvIFRlc3QgQmVkIGxpc3Qgd2l0aCBkZXNpcmVkIG51bWJlci4KKworNy4gU2VsZWN0IG9uZSBvciBtdWx0aXBsZSB0ZXN0IGNhc2VzIHRvIGV4ZWN1dGUuCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLXRoY2kvZGV2aWNlSW5wdXRGaWVsZHMueG1sIGIvdG9vbHMvaGFybmVzcy10aGNpL2RldmljZUlucHV0RmllbGRzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTg5MjJjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy10aGNpL2RldmljZUlucHV0RmllbGRzLnhtbApAQCAtMCwwICsxLDc5IEBACis8REVWSUNFX0ZJRUxEUz4KKyAgICA8REVWSUNFIG5hbWU9IkFSTSIgdGh1bWJuYWlsPSJhcm0tYm9hcmQuanBnIiBkZXNjcmlwdGlvbiA9ICJBUk06IE5YUCBGUkRNLUs2NEYgd2l0aCBGaXJlRmx5IDZMb1dQQU4gU0hJRUxEIj4KKyAgICAgICAgPElURU0gbGFiZWw9IlNlcmlhbCBMaW5lIgorICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgorICAgICAgICAgICAgICBmb3JQYXJhbT0iU2VyaWFsUG9ydCIKKyAgICAgICAgICAgICAgdmFsaWRhdGlvbj0iQ09NIgorICAgICAgICAgICAgICBoaW50PSJlZzogQ09NMSI+Q09NCisgICAgICAgIDwvSVRFTT4KKyAgICAgICAgPElURU0gbGFiZWw9IlNwZWVkIgorICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgorICAgICAgICAgICAgICBmb3JQYXJhbT0iU2VyaWFsQmF1ZFJhdGUiCisgICAgICAgICAgICAgIHZhbGlkYXRpb249ImJhdWQtcmF0ZSIKKyAgICAgICAgICAgICAgaGludD0iZWc6IDExNTIwMCI+MTE1MjAwCisgICAgICAgIDwvSVRFTT4KKyAgICA8L0RFVklDRT4KKyAgICA8REVWSUNFIG5hbWU9Ik5YUCIgdGh1bWJuYWlsPSJVU0ItS1cyNC5qcGciIGRlc2NyaXB0aW9uID0gIiBOWFAoRnJlZXNjYWxlKTogVVNCLUtXMjRENTEyIERvbmdsZXMiPgorICAgICAgICA8SVRFTSBsYWJlbD0iU2VyaWFsIExpbmUiCisgICAgICAgICAgICAgIHR5cGU9InRleHQiCisgICAgICAgICAgICAgIGZvclBhcmFtPSJTZXJpYWxQb3J0IgorICAgICAgICAgICAgICB2YWxpZGF0aW9uPSJDT00iCisgICAgICAgICAgICAgIGhpbnQ9ImVnOiBDT00xIj5DT00KKyAgICAgICAgPC9JVEVNPgorICAgICAgICA8SVRFTSBsYWJlbD0iU3BlZWQiCisgICAgICAgICAgICAgIHR5cGU9InRleHQiCisgICAgICAgICAgICAgIGZvclBhcmFtPSJTZXJpYWxCYXVkUmF0ZSIKKyAgICAgICAgICAgICAgdmFsaWRhdGlvbj0iYmF1ZC1yYXRlIgorICAgICAgICAgICAgICBoaW50PSJlZzogMTE1MjAwIj4xMTUyMDAKKyAgICAgICAgPC9JVEVNPgorICAgIDwvREVWSUNFPgorICAgIDwhLS1ERVZJQ0UgbmFtZT0iU2lMYWJzX0lQIiB0aHVtYm5haWw9InNpbGFicy1ib2FyZC5ibXAiIGRlc2NyaXB0aW9uID0gIkVtYmVyIERlYnVnIEFkYXB0ZXIgKElTQTMpICsgRU0zNXggSW50ZXJmYWNlIGJvYXJkICsgTWVzaENvbm5lY3QgWklDTTM1ODhTUDAtMSIgVEhDST0iU2lMYWJzIj4KKyAgICAgICAgPElURU0gbGFiZWw9IklQIGFkZHIiCisgICAgICAgICAgICAgIHR5cGU9InRleHQiCisgICAgICAgICAgICAgIGZvclBhcmFtPSJUZWxuZXRJUCIKKyAgICAgICAgICAgICAgdmFsaWRhdGlvbj0iaXB2NCIKKyAgICAgICAgICAgICAgaGludD0iZWc6IDE5Mi4xNjguNC4xOTUiPgorICAgICAgICA8L0lURU0+CisgICAgICAgIDxJVEVNIGxhYmVsPSJQT1JUIgorICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgorICAgICAgICAgICAgICBmb3JQYXJhbT0iVGVsbmV0UG9ydCIKKyAgICAgICAgICAgICAgdmFsaWRhdGlvbj0icG9ydCIKKyAgICAgICAgICAgICAgaGludD0iZWc6IDQ5MDEiPjQ5MDEKKyAgICAgICAgPC9JVEVNPgorICAgICAgICA8SVRFTSB0eXBlPSJoaWRkZW4iIGxhYmVsID0gIiIKKyAgICAgICAgICAgICAgZm9yUGFyYW09IlBhcmFtNSI+aXAKKyAgICAgICAgPC9JVEVNPgorICAgIDwvREVWSUNFLS0+CisKKyAgICA8REVWSUNFIG5hbWU9IlNpTGFicyIgdGh1bWJuYWlsPSJaTTM1N1MtVVNCLmpwZyIgZGVzY3JpcHRpb24gPSAiU2lMYWJzOiBFTTM1OHggVVNCIFN0aWNrIiBUSENJPSJTaUxhYnMiPgorICAgICAgICA8SVRFTSBsYWJlbD0iU2VyaWFsIExpbmUiCisgICAgICAgICAgICAgIHR5cGU9InRleHQiCisgICAgICAgICAgICAgIGZvclBhcmFtPSJTZXJpYWxQb3J0IgorICAgICAgICAgICAgICB2YWxpZGF0aW9uPSJDT00iCisgICAgICAgICAgICAgIGhpbnQ9ImVnOiBDT00xIj5DT00KKyAgICAgICAgPC9JVEVNPgorICAgICAgICA8SVRFTSBsYWJlbD0iU3BlZWQiCisgICAgICAgICAgICAgIHR5cGU9InRleHQiCisgICAgICAgICAgICAgIGZvclBhcmFtPSJTZXJpYWxCYXVkUmF0ZSIKKyAgICAgICAgICAgICAgdmFsaWRhdGlvbj0iYmF1ZC1yYXRlIgorICAgICAgICAgICAgICBoaW50PSJlZzogMTE1MjAwIj4xMTUyMDAKKyAgICAgICAgPC9JVEVNPgorICAgICAgICA8SVRFTSBsYWJlbD0gIiIgdHlwZT0iaGlkZGVuIgorICAgICAgICAgICAgICBmb3JQYXJhbT0iUGFyYW01Ij51c2IKKyAgICAgICAgPC9JVEVNPgorICAgIDwvREVWSUNFPgorICAgIDxERVZJQ0UgbmFtZT0iT3BlblRocmVhZCIgdGh1bWJuYWlsPSJPcGVuVGhyZWFkLnBuZyIgZGVzY3JpcHRpb24gPSAiT3BlblRocmVhZDogVEkgQ0MyNTM4REsiIFRIQ0k9Ik9wZW5UaHJlYWQiPgorICAgICAgICA8SVRFTSBsYWJlbD0iU2VyaWFsIExpbmUiCisgICAgICAgICAgICAgIHR5cGU9InRleHQiCisgICAgICAgICAgICAgIGZvclBhcmFtPSJTZXJpYWxQb3J0IgorICAgICAgICAgICAgICB2YWxpZGF0aW9uPSJDT00iCisgICAgICAgICAgICAgIGhpbnQ9ImVnOiBDT00xIj5DT00KKyAgICAgICAgPC9JVEVNPgorICAgICAgICA8SVRFTSBsYWJlbD0iU3BlZWQiCisgICAgICAgICAgICAgIHR5cGU9InRleHQiCisgICAgICAgICAgICAgIGZvclBhcmFtPSJTZXJpYWxCYXVkUmF0ZSIKKyAgICAgICAgICAgICAgdmFsaWRhdGlvbj0iYmF1ZC1yYXRlIgorICAgICAgICAgICAgICBoaW50PSJlZzogMTE1MjAwIj4xMTUyMDAKKyAgICAgICAgPC9JVEVNPgorICAgIDwvREVWSUNFPgorPC9ERVZJQ0VfRklFTERTPgpkaWZmIC0tZ2l0IGEvdG9vbHMvc3BpLWhkbGMtYWRhcHRlci9NYWtlZmlsZS5hbSBiL3Rvb2xzL3NwaS1oZGxjLWFkYXB0ZXIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkZGM1NAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3NwaS1oZGxjLWFkYXB0ZXIvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw1NCBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitFWFRSQV9ESVNUID0gUkVBRE1FLm1kIC5naXRpZ25vcmUKKworYmluX1BST0dSQU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBzcGktaGRsYy1hZGFwdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitzcGlfaGRsY19hZGFwdGVyX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworc3BpX2hkbGNfYWRhcHRlcl9MREFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK3NwaV9oZGxjX2FkYXB0ZXJfTERGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitzcGlfaGRsY19hZGFwdGVyX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHNwaS1oZGxjLWFkYXB0ZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKK0NMRUFORklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKHdpbGRjYXJkICouZ2NkYSAqLmdjbm8pCitlbmRpZiAjIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90b29scy9zcGktaGRsYy1hZGFwdGVyL1JFQURNRS5tZCBiL3Rvb2xzL3NwaS1oZGxjLWFkYXB0ZXIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MjJhMTEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9zcGktaGRsYy1hZGFwdGVyL1JFQURNRS5tZApAQCAtMCwwICsxLDEwNSBAQAorU1BJL0hETEMgQWRhcHRvcgorPT09PT09PT09PT09PT09PQorCitgc3BpLWhkbGMtYWRhcHRlcmAgaXMgYW4gYWRhcHRlciB0b29sIGZvciB1c2luZyBhIFNQSSBpbnRlcmZhY2UgYXMgaWYKK2l0IHdlcmUgYW4gSERMQy1saXRlIGVuY29kZWQgYmlkaXJlY3Rpb25hbCBhc3luY2hyb25vdXMgc2VyaWFsIHN0cmVhbS4KK0l0IHVzZXMgdGhlIFNQSSBwcm90b2NvbCBvdXRsaW5lZCBpbiBbQXBwZW5kaXggQS4yXVsxXSBvZiB0aGUgU3BpbmVsCitwcm90b2NvbCBkb2N1bWVudC4KKworWzFdOiBodHRwczovL2dvby5nbC9ndDE4TzQKKworIyMgU3ludGF4ICMjCisKKyAgICBzcGktaGRsYy1hZGFwdGVyIFtvcHRpb25zXSA8c3BpLWRldmljZS1wYXRoPgorCisjIyBPcHRpb25zICMjCisKKyogICBgLS1zdGRpb2A6IFVzZSBgc3RkaW5gIGFuZCBgc3Rkb3V0YCBmb3IgSERMQyBpbnB1dC9vdXRwdXQuIFVzZWZ1bAorICAgIHdoZW4gZGlyZWN0bHkgc3RhcnRlZCBieSB0aGUgcHJvZ3JhbSB0aGF0IHdpbGwgYmUgdXNpbmcgaXQuCisqICAgYC0tcHR5YDogQ3JlYXRlIGEgcHNldWRvIHRlcm1pbmFsIGZvciBIRExDIGlucHV0L291dHB1dC4gVGhlIHBhdGgKKyAgICBvZiB0aGUgbmV3bHktY3JlYXRlZCBQVFkgd2lsbCBiZSB3cml0dGVuIHRvIGBzdGRvdXRgLCBmb2xsb3dlZCBieQorICAgIGEgbmV3bGluZS4KKyogICBgLS1yYXdgOiBEbyBub3QgZW5jb2RlL2RlY29kZSBwYWNrZXRzIHVzaW5nIEhETEMuIEluc3RlYWQsIHdyaXRlCisgICAgd2hvbGUsIHJhdyBmcmFtZXMgdG8gdGhlIHNwZWNpZmllZCBpbnB1dCBhbmQgb3V0cHV0IEZEcy4gVGhpcyBpcworICAgIHVzZWZ1bCBmb3IgZW11bGF0aW5nIGEgc2VyaWFsIHBvcnQsIG9yIHdoZW4gZGF0YWdyYW0tYmFzZWQgc29ja2V0cworICAgIGFyZSBzdXBwbGllZCBmb3IgYHN0ZGluYCBhbmQgYHN0ZG91dGAgKHdoZW4gdXNlZCB3aXRoIGAtLXN0ZGlvYCkuCisqICAgYC0tbXR1PVtNVFVdYDogU3BlY2lmeSB0aGUgTVRVLiBDdXJyZW50bHkgb25seSB1c2VkIGluIHJhdyBtb2RlLgorICAgIERlZmF1bHQgYW5kIG1heGltdW0gdmFsdWUgaXMgMjA0My4gTXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4KKyogICBgLS1ncGlvLWludFs9Z3Bpby1wYXRoXWA6IFNwZWNpZnkgYSBwYXRoIHRvIHRoZSBMaW51eAorICAgIHN5c2ZzLWV4cG9ydGVkIEdQSU8gZGlyZWN0b3J5IGZvciB0aGUgYEnMhU7MhVTMhWAgcGluLiBJZiBub3QKKyAgICBzcGVjaWZpZWQsIGBzcGktaGRsYy1hZGFwdGVyYCB3aWxsIGZhbGwgYmFjayB0byBwb2xsaW5nLCB3aGljaCBpcworICAgIGluZWZmaWNpZW50LgorKiAgIGAtLWdwaW8tcmVzZXRbPWdwaW8tcGF0aF1gOiBTcGVjaWZ5IGEgcGF0aCB0byB0aGUgTGludXgKKyAgICBzeXNmcy1leHBvcnRlZCBHUElPIGRpcmVjdG9yeSBmb3IgdGhlIGBSzIVFzIVTzIVgIHBpbi4KKyogICBgLS1zcGktbW9kZVs9bW9kZV1gOiBTcGVjaWZ5IHRoZSBTUEkgbW9kZSB0byB1c2UgKDAtMykuIERlZmF1bHQKKyAgICB2YWx1ZSBpcyBgMGAuCisqICAgYC0tc3BpLXNwZWVkWz1oZXJ0el1gOiBTcGVjaWZ5IHRoZSBTUEkgc3BlZWQgaW4gaGVydHouIERlZmF1bHQKKyAgICB2YWx1ZSBpcyBgMTAwMDAwMGAgKDFNSHopLgorKiAgIGAtLXNwaS1jcy1kZWxheVs9dXNlY11gOiBTcGVjaWZ5IHRoZSBkZWxheSBhZnRlciBDzIVTzIUgYXNzZXJ0aW9uLAorICAgIGluIG1pY3Jvc2Vjb25kcy4gRGVmYXVsdCBpcyAyMMK1cy4gTm90ZSB0aGF0IHRoaXMgbWF5IG5lZWQgdG8gYmUKKyAgICBzZXQgdG8gemVybyBmb3Igc3BpLWhkbGMtYWRhcHRlciB0byB3b3JrIHdpdGggc29tZSBTUEkgZHJpdmVycy4KKyogICBgLS1zcGktYWxpZ24tYWxsb3dhbmNlWz1uXWA6IFNwZWNpZnkgdGhlIHRoZSBtYXhpbXVtIG51bWJlciBvZiAweEZGCisgICAgYnl0ZXMgdG8gY2xpcCBmcm9tIHN0YXJ0IG9mIE1JU08gZnJhbWUuIFRoaXMgbWFrZXMgdGhpcyB0b29sIHVzYWJsZQorICAgIHdpdGggU1BJIHNsYXZlcyB3aGljaCBoYXZlIGJ1Z2d5IFNQSSBibG9ja3MgdGhhdCBwcmVwZW5kIHVwIHRvCisgICAgdGhyZWUgMHhGRiBieXRlcyB0byB0aGUgc3RhcnQgb2YgTUlTTyBmcmFtZS4gRGVmYXVsdCB2YWx1ZSBpcyBgMGAuCisgICAgTWF4aW11bSB2YWx1ZSBpcyBgNmAuICpUaGlzIG11c3QgYmUgc2V0IHRvIGA0YCBmb3IgY2hpcHMgaW4gdGhlCisgICAgU2lMYWJzIEVNMzV4IGZhbWlseS4qCisqICAgYC0tc3BpLXNtYWxsLXBhY2tldD1bbl1gOiBTcGVjaWZ5IHRoZSBzbWFsbGVzdCBwYWNrZXQgd2UgY2FuIHJlY2VpdmUKKyAgICBpbiBhIHNpbmdsZSBTUEkgdHJhbnNhY3Rpb24uIFBhY2tldHMgc2VudCBieSB0aGUgc2xhdmUgd2hpY2ggYXJlIHNtYWxsZXIKKyAgICB0aGFuIG9yIGVxdWFsIHRvIHRoaXMgc2l6ZSB3aWxsIHJlcXVpcmUgb25seSBhIHNpbmdsZSBTUEkgdHJhbnNhY3Rpb24KKyAgICB0byBiZSBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQuIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSB3aWxsICh1cCB0byBhIHBvaW50KQorICAgIGRlY3JlYXNlIGxhdGVuY3kgZm9yIHNtYWxsZXIgcGFja2V0cyBhdCB0aGUgZXhwZW5zZSBvZiBvdmVyYWxsIGJhbmR3aWR0aC4KKyAgICBEZWZhdWx0IHZhbHVlIGlzIDMyLiBUaGUgbWluaW11bSB2YWx1ZSBpcyAwLiBUaGUgbWF4aW11bSB2YWx1ZSBpcyAyMDQzLgorKiAgIGAtLXZlcmJvc2VgOiBJbmNyZWFzZSBkZWJ1ZyB2ZXJib3NpdHkuCisqICAgYC0taGVscGA6IFByaW50IG91dCB1c2FnZSBpbmZvcm1hdGlvbiB0byBgc3Rkb3V0YCBhbmQgZXhpdC4KKworYHNwaS1kZXZpY2UtcGF0aGAgaXMgYSByZXF1aXJlZCBhcmd1bWVudCBzaW5jZSBpdCBpbmRpY2F0ZXMgd2hpY2ggU1BJCitkZXZpY2UgdG8gdXNlLiBBbiBleGFtcGxlIHBhdGggbWlnaHQgYmUgYC9kZXYvc3BpZGV2MS4wYC4KKworVGhlIEdQSU8gcGF0aHMgYXJlIHRvIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IGZvciB0aGF0IEdQSU8uIFRoZXkgbXVzdAorYmUgYWxyZWFkeSBiZSBleHBvcnRlZCBiZWZvcmUgYHNwaS1oZGxjLWFkYXB0ZXJgIGNhbiB1c2UgdGhlbS4KKworIyMgQmVoYXZpb3IgIyMKKworSWYgYW4gTUNVIHJlc2V0IGlzIGRldGVjdGVkIGJ5IHRoZSByZXNldCBiaXQgYmVpbmcgc2V0IG9uIGEgU1BJIGZyYW1lLAordGhlIHNwZWNpYWwgdmVuZG9yLXNwZWNpZmljIEhETEMtbGl0ZSBzeW1ib2wgYDB4RjhgIGlzIGVtaXR0ZWQuIElmCitgLS1ncGlvLXJlc2V0YCBpcyBzcGVjaWZpZWQsIHRoZSBIRExDIGNsaWVudCBjYW4gdHJpZ2dlciBhbiBNQ1UgcmVzZXQKK2J5IHNlbmRpbmcgdGhlIHN5bWJvbHMgYDB4N0UgMHgxMyAweDExIDB4N0VgIG9yIGJ5IHNlbmRpbmcgYFNJR1VTUjFgLgorCitXaGVuIHN0YXJ0ZWQsIGBzcGktaGRsYy1hZGFwdGVyYCB3aWxsIGNvbmZpZ3VyZSB0aGUgZm9sbG93aW5nCitwcm9wZXJ0aWVzIG9uIHRoZSBHUElPczoKKworMS4gIFNldCBgScyFTsyFVMyFL2RpcmVjdGlvbmAgdG8gYGluYC4KKzIuICBTZXQgYEnMhU7MhVTMhS9lZGdlYCB0byBgZmFsbGluZ2AuCiszLiAgU2V0IGBSzIVFzIVTzIUvZGlyZWN0aW9uYCB0byBgaGlnaGAuCisKK1doZW4gcmVzZXR0aW5nIHRoZSBzbGF2ZSBkZXZpY2UsIGBzcGktaGRsY2AgcGVyZm9ybXMgdGhlIGZvbGxvd2luZworcHJvY2VkdXJlOgorCisxLiAgU2V0IGBSzIVFzIVTzIUvZGlyZWN0aW9uYCB0byBgbG93YC4KKzIuICBTbGVlcCBmb3IgMzBtcy4KKzMuICBTZXQgYFLMhUXMhVPMhS9kaXJlY3Rpb25gIHRvIGBoaWdoYC4KKworIyMgU3RhdGlzdGljcyAjIworCitTb21lIHNpbXBsZSB1c2FnZSBzdGF0aXN0aWNzIGFyZSBwcmludGVkIG91dCB0byBzeXNsb2cgYXQgZXhpdCBhbmQKK3doZW5ldmVyIHRoZSBgU0lHVVNSMWAgc2lnbmFsIGlzIHJlY2VpdmVkLiBUaGUgZWFzaWVzdCB3YXkgdG8gc2VuZAordGhhdCBzaWduYWwgdG8gYHNwaS1oZGxjLWFkYXB0ZXJgIGlzIGxpa2UgdGhpczoKKworICAgICMga2lsbGFsbCAtc2lndXNyMSBzcGktaGRsYy1hZGFwdGVyCisKK0F0IHdoaWNoIHBvaW50IHlvdSB3aWxsIHNlZSBzb21ldGhpbmcgbGlrZSB0aGlzIGluIHRoZSBzeXNsb2dzOgorCisgICAgc3BpLWhkbGMtYWRhcHRlclsxODQwOF06IElORk86IHNTbGF2ZVJlc2V0Q291bnQ9MTYKKyAgICBzcGktaGRsYy1hZGFwdGVyWzE4NDA4XTogSU5GTzogc1NwaUZyYW1lQ291bnQ9MjY3MworICAgIHNwaS1oZGxjLWFkYXB0ZXJbMTg0MDhdOiBJTkZPOiBzU3BpVmFsaWRGcmFtZUNvdW50PTI2NjgKKyAgICBzcGktaGRsYy1hZGFwdGVyWzE4NDA4XTogSU5GTzogc1NwaUR1cGxleEZyYW1lQ291bnQ9MworICAgIHNwaS1oZGxjLWFkYXB0ZXJbMTg0MDhdOiBJTkZPOiBzU3BpVW5yZXNwb25zaXZlRnJhbWVDb3VudD01CisgICAgc3BpLWhkbGMtYWRhcHRlclsxODQwOF06IElORk86IHNTcGlHYXJiYWdlRnJhbWVDb3VudD0wCisgICAgc3BpLWhkbGMtYWRhcHRlclsxODQwOF06IElORk86IHNIZGxjVHhGcmFtZUNvdW50PTE0NTQKKyAgICBzcGktaGRsYy1hZGFwdGVyWzE4NDA4XTogSU5GTzogc0hkbGNUeEZyYW1lQnl0ZUNvdW50PTI5MDgKKyAgICBzcGktaGRsYy1hZGFwdGVyWzE4NDA4XTogSU5GTzogc0hkbGNSeEZyYW1lQ291bnQ9ODg0CisgICAgc3BpLWhkbGMtYWRhcHRlclsxODQwOF06IElORk86IHNIZGxjUnhGcmFtZUJ5dGVDb3VudD0zODc1CisgICAgc3BpLWhkbGMtYWRhcHRlclsxODQwOF06IElORk86IHNIZGxjUnhCYWRDcmNDb3VudD0wCisKK1NlbmRpbmcgYFNJR1VTUjJgIHdpbGwgY2xlYXIgdGhlIGNvdW50ZXJzLgpkaWZmIC0tZ2l0IGEvdG9vbHMvc3BpLWhkbGMtYWRhcHRlci9zcGktaGRsYy1hZGFwdGVyLmMgYi90b29scy9zcGktaGRsYy1hZGFwdGVyL3NwaS1oZGxjLWFkYXB0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGI3NjJjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvc3BpLWhkbGMtYWRhcHRlci9zcGktaGRsYy1hZGFwdGVyLmMKQEAgLTAsMCArMSwxOTk2IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjZGVmaW5lIF9HTlVfU09VUkNFIDEKKworI2lmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9maWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpZGV2Lmg+CisKKyNpZiBIQVZFX0VYRUNJTkZPX0gKKyNpbmNsdWRlIDxleGVjaW5mby5oPgorI2VuZGlmCisKKyNpZiBIQVZFX1BUWV9ICisjaW5jbHVkZSA8cHR5Lmg+CisjZW5kaWYKKworI2lmIEhBVkVfVVRJTF9ICisjaW5jbHVkZSA8dXRpbC5oPgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIE1BUks6IE1hY3JvcyBhbmQgQ29uc3RhbnRzICovCisKKyNkZWZpbmUgU1BJX0hETENfVkVSU0lPTiAgICAgICAgICAgICAgICAiMC4wNiIKKworI2RlZmluZSBNQVhfRlJBTUVfU0laRSAgICAgICAgICAgICAgICAgIDIwNDgKKyNkZWZpbmUgSEVBREVSX0xFTiAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFNQSV9IRUFERVJfUkVTRVRfRkxBRyAgICAgICAgICAgMHg4MAorI2RlZmluZSBTUElfSEVBREVSX0NSQ19GTEFHICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgU1BJX0hFQURFUl9QQVRURVJOX1ZBTFVFICAgICAgICAweDAyCisjZGVmaW5lIFNQSV9IRUFERVJfUEFUVEVSTl9NQVNLICAgICAgICAgMHgwMworCisjZGVmaW5lIEVYSVRfUVVJVCAgICAgICAgICAgICAgICAgICAgICAgNjU1MzUKKworI2lmbmRlZiBNU0VDX1BFUl9TRUMKKyNkZWZpbmUgTVNFQ19QRVJfU0VDICAgICAgICAgICAgICAgICAgICAxMDAwCisjZW5kaWYKKworI2lmbmRlZiBVU0VDX1BFUl9NU0VDCisjZGVmaW5lIFVTRUNfUEVSX01TRUMgICAgICAgICAgICAgICAgICAgMTAwMAorI2VuZGlmCisKKyNpZm5kZWYgVVNFQ19QRVJfU0VDCisjZGVmaW5lIFVTRUNfUEVSX1NFQyAgICAgICAgICAgICAgICAgICAgKFVTRUNfUEVSX01TRUMgKiBNU0VDX1BFUl9TRUMpCisjZW5kaWYKKworI2RlZmluZSBTUElfUE9MTF9QRVJJT0RfTVNFQyAgICAgICAgICAgIChNU0VDX1BFUl9TRUMvMzApCisKKyNkZWZpbmUgR1BJT19JTlRfQVNTRVJUX1NUQVRFICAgICAgICAgICAwIC8vIEnMhU7MhVTMhSBpcyBhc3NlcnRlZCBsb3cKKyNkZWZpbmUgR1BJT19SRVNfQVNTRVJUX1NUQVRFICAgICAgICAgICAwIC8vIFLMhUXMhVPMhSBpcyBhc3NlcnRlZCBsb3cKKworI2RlZmluZSBTUElfUlhfQUxJR05fQUxMT1dBTkNFX01BWCAgICAgIDYKKworI2RlZmluZSBTT0NLRVRfREVCVUdfQllURVNfUEVSX0xJTkUgICAgIDE2CisKKyNpZm5kZWYgQVVUT19QUklOVF9CQUNLVFJBQ0UKKyNkZWZpbmUgQVVUT19QUklOVF9CQUNLVFJBQ0UgICAgICAgICAgICAoSEFWRV9FWEVDSU5GT19IKQorI2VuZGlmCisKKyNkZWZpbmUgQVVUT19QUklOVF9CQUNLVFJBQ0VfU1RBQ0tfREVQVEggICAgIDIwCisKK3N0YXRpYyBjb25zdCB1aW50OF90IGtIZGxjUmVzZXRTaWduYWxbXSA9IHsgMHg3RSwgMHgxMywgMHgxMSwgMHg3RSB9Oworc3RhdGljIGNvbnN0IHVpbnQxNl90IGtIZGxjQ3JjQ2hlY2tWYWx1ZSA9IDB4ZjBiODsKK3N0YXRpYyBjb25zdCB1aW50MTZfdCBrSGRsY0NyY1Jlc2V0VmFsdWUgPSAweGZmZmY7CisKK2VudW0geworICAgIE1PREVfU1RESU8gPSAwLAorICAgIE1PREVfUFRZID0gMSwKK307CisKKy8vIElnbm9yZXMgcmV0dXJuIHZhbHVlIGZyb20gZnVuY3Rpb24gJ3MnCisjZGVmaW5lIElHTk9SRV9SRVRVUk5fVkFMVUUocykgIGRvIHsgaWYgKHMpe30gfSB3aGlsZSAoMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTUFSSzogR2xvYmFsIFN0YXRlICovCisKKyNpZiBIQVZFX09QRU5QVFkKK3N0YXRpYyBpbnQgc01vZGUgPSBNT0RFX1BUWTsKKyNlbHNlCitzdGF0aWMgaW50IHNNb2RlID0gTU9ERV9TVERJTzsKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciogc1NwaURldlBhdGggICAgID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyKiBzSW50R3Bpb0RldlBhdGggPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIqIHNSZXNHcGlvRGV2UGF0aCA9IE5VTEw7CisKK3N0YXRpYyBpbnQgc1ZlcmJvc2UgICAgICAgICAgICAgPSBMT0dfTk9USUNFOworCitzdGF0aWMgaW50IHNTcGlEZXZGZCAgICAgICAgICAgID0gLTE7CitzdGF0aWMgaW50IHNSZXNHcGlvVmFsdWVGZCAgICAgID0gLTE7CitzdGF0aWMgaW50IHNJbnRHcGlvVmFsdWVGZCAgICAgID0gLTE7CisKK3N0YXRpYyBpbnQgc0hkbGNJbnB1dEZkICAgICAgICAgPSAtMTsKK3N0YXRpYyBpbnQgc0hkbGNPdXRwdXRGZCAgICAgICAgPSAtMTsKKworc3RhdGljIGludCBzU3BpU3BlZWQgICAgICAgICAgICA9IDEwMDAwMDA7IC8vIGluIEh6IChkZWZhdWx0OiAxTUh6KQorc3RhdGljIHVpbnQ4X3Qgc1NwaU1vZGUgICAgICAgICA9IDA7CitzdGF0aWMgaW50IHNTcGlDc0RlbGF5ICAgICAgICAgID0gMjA7ICAgICAgLy8gaW4gbWljcm9zZWNvbmRzCisKK3N0YXRpYyB1aW50MTZfdCBzU3BpUnhQYXlsb2FkU2l6ZTsKK3N0YXRpYyB1aW50OF90IHNTcGlSeEZyYW1lQnVmZmVyW01BWF9GUkFNRV9TSVpFICsgU1BJX1JYX0FMSUdOX0FMTE9XQU5DRV9NQVhdOworCitzdGF0aWMgdWludDE2X3Qgc1NwaVR4UGF5bG9hZFNpemU7CitzdGF0aWMgYm9vbCBzU3BpVHhJc1JlYWR5ID0gZmFsc2U7CitzdGF0aWMgaW50IHNTcGlUeFJlZnVzZWRDb3VudCA9IDA7CitzdGF0aWMgdWludDhfdCBzU3BpVHhGcmFtZUJ1ZmZlcltNQVhfRlJBTUVfU0laRSArIFNQSV9SWF9BTElHTl9BTExPV0FOQ0VfTUFYXTsKKworc3RhdGljIGludCBzU3BpUnhBbGlnbkFsbG93YW5jZSA9IDA7CitzdGF0aWMgaW50IHNTcGlTbWFsbFBhY2tldFNpemUgID0gMzI7ICAgICAgLy8gaW4gYnl0ZXMKKworc3RhdGljIGJvb2wgc1NsYXZlRGlkUmVzZXQgPSBmYWxzZTsKKworLy8gSWYgc1VzZVJhd0ZyYW1lcyBpcyBzZXQgdG8gdHJ1ZSwgSERMQyBlbmNvZGluZy9lbmNvZGluZworLy8gaXMgc2tpcHBlZCBhbmQgdGhlIHJhdyBmcmFtZXMgYXJlIHJlYWQtZnJvbS93cml0dGVuLXRvCisvLyB0aGUgc0hkbGNJbnB1dEZkL3NIZGxjT3V0cHV0RmQgd2hvbGUuIFNlZSBgLS1yYXdgLgorc3RhdGljIGJvb2wgc1VzZVJhd0ZyYW1lcyA9IGZhbHNlOworCitzdGF0aWMgaW50IHNNVFUgPSBNQVhfRlJBTUVfU0laRSAtIEhFQURFUl9MRU47CisKK3N0YXRpYyBpbnQgc1JldCA9IDA7CisKK3N0YXRpYyBib29sIHNEdW1wU3RhdHMgPSBmYWxzZTsKKworc3RhdGljIHNpZ190IHNQcmV2aW91c0hhbmRsZXJGb3JTSUdJTlQ7CitzdGF0aWMgc2lnX3Qgc1ByZXZpb3VzSGFuZGxlckZvclNJR1RFUk07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIE1BUks6IFN0YXRpc3RpY3MgKi8KKworc3RhdGljIHVpbnQ2NF90IHNTbGF2ZVJlc2V0Q291bnQgPSAwOworc3RhdGljIHVpbnQ2NF90IHNTcGlGcmFtZUNvdW50ID0gMDsKK3N0YXRpYyB1aW50NjRfdCBzU3BpVmFsaWRGcmFtZUNvdW50ID0gMDsKK3N0YXRpYyB1aW50NjRfdCBzU3BpR2FyYmFnZUZyYW1lQ291bnQgPSAwOworc3RhdGljIHVpbnQ2NF90IHNTcGlEdXBsZXhGcmFtZUNvdW50ID0gMDsKK3N0YXRpYyB1aW50NjRfdCBzU3BpVW5yZXNwb25zaXZlRnJhbWVDb3VudCA9IDA7CitzdGF0aWMgdWludDY0X3Qgc0hkbGNSeEZyYW1lQnl0ZUNvdW50ID0gMDsKK3N0YXRpYyB1aW50NjRfdCBzSGRsY1R4RnJhbWVCeXRlQ291bnQgPSAwOworc3RhdGljIHVpbnQ2NF90IHNIZGxjUnhGcmFtZUNvdW50ID0gMDsKK3N0YXRpYyB1aW50NjRfdCBzSGRsY1R4RnJhbWVDb3VudCA9IDA7CitzdGF0aWMgdWludDY0X3Qgc0hkbGNSeEJhZENyY0NvdW50ID0gMDsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTUFSSzogU2lnbmFsIEhhbmRsZXJzICovCisKK3N0YXRpYyB2b2lkIHNpZ25hbF9TSUdJTlQoaW50IHNpZykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlW10gPSAiXG5DYXVnaHQgU0lHSU5UIVxuIjsKKworICAgIHNSZXQgPSBFWElUX1FVSVQ7CisKKyAgICAvLyBDYW4ndCB1c2Ugc3lzbG9nKCkgYmVjYXVzZSBpdCBpc24ndCBhc3luYyBzaWduYWwgc2FmZS4KKyAgICAvLyBTbyB3ZSB3cml0ZSB0byBzdGRlcnIKKyAgICBJR05PUkVfUkVUVVJOX1ZBTFVFKHdyaXRlKFNUREVSUl9GSUxFTk8sIG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKS0xKSk7CisKKyAgICAvLyBSZXN0b3JlIHRoZSBwcmV2aW91cyBoYW5kbGVyIHNvIHRoYXQgaWYgd2UgZW5kIHVwIGdldHRpbmcKKyAgICAvLyB0aGlzIHNpZ25hbCBhZ2FpbiB3ZSBwZXJmb3JtIHRoZSBzeXN0ZW0gZGVmYXVsdCBhY3Rpb24uCisgICAgc2lnbmFsKFNJR0lOVCwgc1ByZXZpb3VzSGFuZGxlckZvclNJR0lOVCk7CisgICAgc1ByZXZpb3VzSGFuZGxlckZvclNJR0lOVCA9IE5VTEw7CisKKyAgICAvLyBJZ25vcmUgc2lnbmFsIGFyZ3VtZW50LgorICAgICh2b2lkKXNpZzsKK30KKworc3RhdGljIHZvaWQgc2lnbmFsX1NJR1RFUk0oaW50IHNpZykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlW10gPSAiXG5DYXVnaHQgU0lHVEVSTSFcbiI7CisKKyAgICBzUmV0ID0gRVhJVF9RVUlUOworCisgICAgLy8gQ2FuJ3QgdXNlIHN5c2xvZygpIGJlY2F1c2UgaXQgaXNuJ3QgYXN5bmMgc2lnbmFsIHNhZmUuCisgICAgLy8gU28gd2Ugd3JpdGUgdG8gc3RkZXJyCisgICAgSUdOT1JFX1JFVFVSTl9WQUxVRSh3cml0ZShTVERFUlJfRklMRU5PLCBtZXNzYWdlLCBzaXplb2YobWVzc2FnZSktMSkpOworCisgICAgLy8gUmVzdG9yZSB0aGUgcHJldmlvdXMgaGFuZGxlciBzbyB0aGF0IGlmIHdlIGVuZCB1cCBnZXR0aW5nCisgICAgLy8gdGhpcyBzaWduYWwgYWdhaW4gd2UgcGVyZm9ybSB0aGUgc3lzdGVtIGRlZmF1bHQgYWN0aW9uLgorICAgIHNpZ25hbChTSUdURVJNLCBzUHJldmlvdXNIYW5kbGVyRm9yU0lHVEVSTSk7CisgICAgc1ByZXZpb3VzSGFuZGxlckZvclNJR1RFUk0gPSBOVUxMOworCisgICAgLy8gSWdub3JlIHNpZ25hbCBhcmd1bWVudC4KKyAgICAodm9pZClzaWc7Cit9CisKK3N0YXRpYyB2b2lkIHNpZ25hbF9TSUdIVVAoaW50IHNpZykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlW10gPSAiXG5DYXVnaHQgU0lHSFVQIVxuIjsKKworICAgIHNSZXQgPSBFWElUX0ZBSUxVUkU7CisKKyAgICAvLyBDYW4ndCB1c2Ugc3lzbG9nKCkgYmVjYXVzZSBpdCBpc24ndCBhc3luYyBzaWduYWwgc2FmZS4KKyAgICAvLyBTbyB3ZSB3cml0ZSB0byBzdGRlcnIKKyAgICBJR05PUkVfUkVUVVJOX1ZBTFVFKHdyaXRlKFNUREVSUl9GSUxFTk8sIG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKS0xKSk7CisKKyAgICAvLyBXZSBkb24ndCByZXN0b3JlIHRoZSAicHJldmlvdXMgaGFuZGxlciIKKyAgICAvLyBiZWNhdXNlIHdlIGFsd2F5cyB3YW50IHRvIGxldCB0aGUgbWFpbgorICAgIC8vIGxvb3AgZGVjaWRlIHdoYXQgdG8gZG8gZm9yIGhhbmd1cHMuCisKKyAgICAvLyBJZ25vcmUgc2lnbmFsIGFyZ3VtZW50LgorICAgICh2b2lkKXNpZzsKK30KKworc3RhdGljIHZvaWQgc2lnbmFsX2R1bXBzdGF0cyhpbnQgc2lnKQoreworICAgIHNEdW1wU3RhdHMgPSB0cnVlOworCisgICAgLy8gSWdub3JlIHNpZ25hbCBhcmd1bWVudC4KKyAgICAodm9pZClzaWc7Cit9CisKK3N0YXRpYyB2b2lkIHNpZ25hbF9jbGVhcnN0YXRzKGludCBzaWcpCit7CisgICAgc0R1bXBTdGF0cyA9IHRydWU7CisgICAgc1NsYXZlUmVzZXRDb3VudCA9IDA7CisgICAgc1NwaUZyYW1lQ291bnQgPSAwOworICAgIHNTcGlWYWxpZEZyYW1lQ291bnQgPSAwOworICAgIHNTcGlHYXJiYWdlRnJhbWVDb3VudCA9IDA7CisgICAgc1NwaUR1cGxleEZyYW1lQ291bnQgPSAwOworICAgIHNTcGlVbnJlc3BvbnNpdmVGcmFtZUNvdW50ID0gMDsKKyAgICBzSGRsY1J4RnJhbWVCeXRlQ291bnQgPSAwOworICAgIHNIZGxjVHhGcmFtZUJ5dGVDb3VudCA9IDA7CisgICAgc0hkbGNSeEZyYW1lQ291bnQgPSAwOworICAgIHNIZGxjVHhGcmFtZUNvdW50ID0gMDsKKyAgICBzSGRsY1J4QmFkQ3JjQ291bnQgPSAwOworCisgICAgLy8gSWdub3JlIHNpZ25hbCBhcmd1bWVudC4KKyAgICAodm9pZClzaWc7Cit9CisKKyNpZiBBVVRPX1BSSU5UX0JBQ0tUUkFDRQorc3RhdGljIHZvaWQgc2lnbmFsX2NyaXRpY2FsKGludCBzaWcsIHNpZ2luZm9fdCAqIGluZm8sIHZvaWQgKiB1Y29udGV4dCkKK3sKKyAgICAvLyBUaGlzIGlzIHRoZSBsYXN0IGh1cmFoIGZvciB0aGlzIHByb2Nlc3MuCisgICAgLy8gV2UgZHVtcCB0aGUgc3RhY2ssIGJlY2F1c2UgdGhhdCdzIGFsbCB3ZSBjYW4gZG8uCisKKyAgICB2b2lkICpzdGFja19tZW1bQVVUT19QUklOVF9CQUNLVFJBQ0VfU1RBQ0tfREVQVEhdOworICAgIHZvaWQgKipzdGFjayA9IHN0YWNrX21lbTsKKyAgICBjaGFyICoqc3RhY2tfc3ltYm9sczsKKyAgICBpbnQgc3RhY2tfZGVwdGgsIGk7CisgICAgdWNvbnRleHRfdCAqdWMgPSAodWNvbnRleHRfdCopdWNvbnRleHQ7CisKKyAgICAvLyBTaHV0IHVwIGNvbXBpbGVyIHdhcm5pbmcuCisgICAgKHZvaWQpdWM7CisgICAgKHZvaWQpaW5mbzsKKworICAgIC8vIFdlIGNhbGwgc29tZSBmdW5jdGlvbnMgaGVyZSB3aGljaCBhcmVuJ3QgYXN5bmMtc2lnbmFsLXNhZmUsCisgICAgLy8gYnV0IHRoaXMgZnVuY3Rpb24gaXNuJ3QgcmVhbGx5IHVzZWZ1bCB3aXRob3V0IHRob3NlIGNhbGxzLgorICAgIC8vIFNpbmNlIHdlIGFyZSBtYWtpbmcgYSBnYW1ibGUgKGFuZCB3ZSBkZWFkbG9jayBpZiB3ZSBsb29zZSksCisgICAgLy8gd2UgYXJlIGdvaW5nIHRvIHNldCB1cCBhIHR3by1zZWNvbmQgd2F0Y2hkb2cgdG8gbWFrZSBzdXJlCisgICAgLy8gd2UgZW5kIHVwIHRlcm1pbmF0aW5nIGxpa2Ugd2Ugc2hvdWxkLiBUaGUgY2hvaWNlIG9mIGEgdHdvCisgICAgLy8gc2Vjb25kIHRpbWVvdXQgaXMgZW50aXJlbHkgYXJiaXRyYXJ5LCBhbmQgbWF5IGJlIGNoYW5nZWQKKyAgICAvLyBpZiBuZWVkcyB3YXJyYW50LgorICAgIGFsYXJtKDIpOworICAgIHNpZ25hbChTSUdBTFJNLCBTSUdfREZMKTsKKworICAgIGZwcmludGYoc3RkZXJyLCAiICoqKiBGQVRBTCBFUlJPUjogQ2F1Z2h0IHNpZ25hbCAlZCAoJXMpOlxuIiwgc2lnLCBzdHJzaWduYWwoc2lnKSk7CisKKyAgICBzdGFja19kZXB0aCA9IGJhY2t0cmFjZShzdGFjaywgQVVUT19QUklOVF9CQUNLVFJBQ0VfU1RBQ0tfREVQVEgpOworCisgICAgLy8gSGVyZSBhcmUgYXJlIHRyeWluZyB0byB1cGRhdGUgdGhlIHBvaW50ZXIgaW4gdGhlIGJhY2t0cmFjZQorICAgIC8vIHRvIGJlIHRoZSBhY3R1YWwgbG9jYXRpb24gb2YgdGhlIGZhdWx0LgorI2lmIGRlZmluZWQoX194ODZfNjRfXykKKyAgICBzdGFja1sxXSA9ICh2b2lkICopIHVjLT51Y19tY29udGV4dC5ncmVnc1tSRUdfUklQXTsKKyNlbGlmIGRlZmluZWQoX19pMzg2X18pCisgICAgc3RhY2tbMV0gPSAodm9pZCAqKSB1Yy0+dWNfbWNvbnRleHQuZ3JlZ3NbUkVHX0VJUF07CisjZWxpZiBkZWZpbmVkKF9fYXJtX18pCisgICAgc3RhY2tbMV0gPSAodm9pZCAqKSB1Yy0+dWNfbWNvbnRleHQuYXJtX2lwOworI2Vsc2UKKyN3YXJuaW5nIFRPRE86IEFkZCB0aGlzIGFyY2ggdG8gc2lnbmFsX2NyaXRpY2FsCisjZW5kaWYKKworICAgIC8vIE5vdyBkdW1wIHRoZSBzeW1ib2xzIHRvIHN0ZGVyciwgaW4gY2FzZSBzeXNsb2cgYmFyZnMuCisgICAgYmFja3RyYWNlX3N5bWJvbHNfZmQoc3RhY2ssIHN0YWNrX2RlcHRoLCBTVERFUlJfRklMRU5PKTsKKworICAgIC8vIExvYWQgdXAgdGhlIHN5bWJvbHMgaW5kaXZpZHVhbGx5LCBzbyB3ZSBjYW4gb3V0cHV0IHRvIHN5c2xvZywgdG9vLgorICAgIHN0YWNrX3N5bWJvbHMgPSBiYWNrdHJhY2Vfc3ltYm9scyhzdGFjaywgc3RhY2tfZGVwdGgpOworCisgICAgc3lzbG9nKExPR19DUklULCAiICoqKiBGQVRBTCBFUlJPUjogQ2F1Z2h0IHNpZ25hbCAlZCAoJXMpOiIsIHNpZywgc3Ryc2lnbmFsKHNpZykpOworCisgICAgZm9yIChpID0gMDsgaSAhPSBzdGFja19kZXB0aDsgaSsrKQorICAgIHsKKyAgICAgICAgc3lzbG9nKExPR19DUklULCAiW0JUXSAlMmQ6ICVzIiwgaSwgc3RhY2tfc3ltYm9sc1tpXSk7CisgICAgfQorCisgICAgZnJlZShzdGFja19zeW1ib2xzKTsKKworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZiAvLyBpZiBBVVRPX1BSSU5UX0JBQ0tUUkFDRQorCitzdGF0aWMgdm9pZCBsb2dfZGVidWdfYnVmZmVyKGNvbnN0IGNoYXIqIGRlc2MsIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcl9wdHIsIGludCBidWZmZXJfbGVuLCBib29sIGZvcmNlKQoreworICAgIGludCBpID0gMDsKKworICAgIGlmICghZm9yY2UgJiYgKHNWZXJib3NlIDwgTE9HX0RFQlVHKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAoaSA8IGJ1ZmZlcl9sZW4pCisgICAgeworICAgICAgICBpbnQgajsKKyAgICAgICAgY2hhciBkdW1wX3N0cmluZ1tTT0NLRVRfREVCVUdfQllURVNfUEVSX0xJTkUqMysxXTsKKworICAgICAgICBmb3IgKGogPSAwOyBpIDwgYnVmZmVyX2xlbiAmJiBqIDwgU09DS0VUX0RFQlVHX0JZVEVTX1BFUl9MSU5FOyBpKyssIGorKykKKyAgICAgICAgeworICAgICAgICAgICAgc3ByaW50ZihkdW1wX3N0cmluZytqKjMsICIlMDJYICIsIGJ1ZmZlcl9wdHJbaV0pOworICAgICAgICB9CisKKyAgICAgICAgc3lzbG9nKGZvcmNlID8gTE9HX1dBUk5JTkcgOiBMT0dfREVCVUcsICIlczogJXMlcyIsIGRlc2MsIGR1bXBfc3RyaW5nLCAoaSA8IGJ1ZmZlcl9sZW4pPyIgLi4uIjoiIik7CisgICAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBNQVJLOiBTUEkgVHJhbnNmZXIgRnVuY3Rpb25zICovCisKK3N0YXRpYyB2b2lkIHNwaV9oZWFkZXJfc2V0X2ZsYWdfYnl0ZSh1aW50OF90ICpoZWFkZXIsIHVpbnQ4X3QgdmFsdWUpCit7CisgICAgaGVhZGVyWzBdID0gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHNwaV9oZWFkZXJfc2V0X2FjY2VwdF9sZW4odWludDhfdCAqaGVhZGVyLCB1aW50MTZfdCBsZW4pCit7CisgICAgaGVhZGVyWzFdID0gKChsZW4gPj4gMCkgJiAweEZGKTsKKyAgICBoZWFkZXJbMl0gPSAoKGxlbiA+PiA4KSAmIDB4RkYpOworfQorCitzdGF0aWMgdm9pZCBzcGlfaGVhZGVyX3NldF9kYXRhX2xlbih1aW50OF90ICpoZWFkZXIsIHVpbnQxNl90IGxlbikKK3sKKyAgICBoZWFkZXJbM10gPSAoKGxlbiA+PiAwKSAmIDB4RkYpOworICAgIGhlYWRlcls0XSA9ICgobGVuID4+IDgpICYgMHhGRik7Cit9CisKK3N0YXRpYyB1aW50OF90IHNwaV9oZWFkZXJfZ2V0X2ZsYWdfYnl0ZShjb25zdCB1aW50OF90ICpoZWFkZXIpCit7CisgICAgcmV0dXJuIGhlYWRlclswXTsKK30KKworc3RhdGljIHVpbnQxNl90IHNwaV9oZWFkZXJfZ2V0X2FjY2VwdF9sZW4oY29uc3QgdWludDhfdCAqaGVhZGVyKQoreworICAgIHJldHVybiAoIGhlYWRlclsxXSArICh1aW50MTZfdCkoaGVhZGVyWzJdIDw8IDgpICk7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBzcGlfaGVhZGVyX2dldF9kYXRhX2xlbihjb25zdCB1aW50OF90ICpoZWFkZXIpCit7CisgICAgcmV0dXJuICggaGVhZGVyWzNdICsgKHVpbnQxNl90KShoZWFkZXJbNF0gPDwgOCkgKTsKK30KKworc3RhdGljIHVpbnQ4X3QqIGdldF9yZWFsX3J4X2ZyYW1lX3N0YXJ0KHZvaWQpCit7CisgICAgdWludDhfdCogcmV0ID0gc1NwaVJ4RnJhbWVCdWZmZXI7CisgICAgaW50IGkgPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IHNTcGlSeEFsaWduQWxsb3dhbmNlOyBpKyspCisgICAgeworICAgICAgICBpZiAocmV0WzBdICE9IDB4RkYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldCsrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZG9fc3BpX3hmZXIoaW50IGxlbikKKyB7CisgICAgaW50IHJldDsKKworICAgIHN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyIHhmZXJbMl0gPQorICAgIHsKKyAgICAgICAgeyAgIC8vIFRoaXMgcGFydCBpcyB0aGUgZGVsYXkgYmV0d2VlbiBDzIVTzIUgYmVpbmcKKyAgICAgICAgICAgIC8vIGFzc2VydGVkIGFuZCB0aGUgU1BJIGNsb2NrIHN0YXJ0aW5nLiBUaGlzCisgICAgICAgICAgICAvLyBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBMaW51eCBTUEkgZHJpdmVycy4KKyAgICAgICAgICAgIC50eF9idWYgPSAwLAorICAgICAgICAgICAgLnJ4X2J1ZiA9IDAsCisgICAgICAgICAgICAubGVuID0gMCwKKyAgICAgICAgICAgIC5kZWxheV91c2VjcyA9ICh1aW50MTZfdClzU3BpQ3NEZWxheSwKKyAgICAgICAgICAgIC5zcGVlZF9oeiA9ICh1aW50MzJfdClzU3BpU3BlZWQsCisgICAgICAgICAgICAuYml0c19wZXJfd29yZCA9IDgsCisgICAgICAgICAgICAuY3NfY2hhbmdlID0gZmFsc2UsCisgICAgICAgIH0sCisgICAgICAgIHsgICAvLyBUaGlzIHBhcnQgaXMgdGhlIGFjdHVhbCBTUEkgdHJhbnNmZXIuCisgICAgICAgICAgICAudHhfYnVmID0gKHVuc2lnbmVkIGxvbmcpc1NwaVR4RnJhbWVCdWZmZXIsCisgICAgICAgICAgICAucnhfYnVmID0gKHVuc2lnbmVkIGxvbmcpc1NwaVJ4RnJhbWVCdWZmZXIsCisgICAgICAgICAgICAubGVuID0gKHVpbnQzMl90KShsZW4gKyBIRUFERVJfTEVOICsgc1NwaVJ4QWxpZ25BbGxvd2FuY2UpLAorICAgICAgICAgICAgLmRlbGF5X3VzZWNzID0gMCwKKyAgICAgICAgICAgIC5zcGVlZF9oeiA9ICh1aW50MzJfdClzU3BpU3BlZWQsCisgICAgICAgICAgICAuYml0c19wZXJfd29yZCA9IDgsCisgICAgICAgICAgICAuY3NfY2hhbmdlID0gZmFsc2UsCisgICAgICAgIH0KKyAgICB9OworCisKKworICAgIGlmIChzU3BpQ3NEZWxheSA+IDApCisgICAgeworICAgICAgICAvLyBBIEPMhVPMhSBkZWxheSBoYXMgYmVlbiBzcGVjaWZpZWQuIFN0YXJ0IHRyYW5zYWN0aW9ucworICAgICAgICAvLyB3aXRoIGJvdGggcGFydHMuCisgICAgICAgIHJldCA9IGlvY3RsKHNTcGlEZXZGZCwgU1BJX0lPQ19NRVNTQUdFKDIpLCAmeGZlclswXSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIE5vIEPMhVPMhSBkZWxheSBoYXMgYmVlbiBzcGVjaWZpZWQsIHNvIHdlIHNraXAgdGhlIGZpcnN0CisgICAgICAgIC8vIHBhcnQgYmVjYXVzZSBpdCBjYXVzZXMgc29tZSBTUEkgZHJpdmVycyB0byBjcm9hay4KKyAgICAgICAgcmV0ID0gaW9jdGwoc1NwaURldkZkLCBTUElfSU9DX01FU1NBR0UoMSksICZ4ZmVyWzFdKTsKKyAgICB9CisKKyAgICBpZiAocmV0ICE9IC0xKQorICAgIHsKKyAgICAgICAgbG9nX2RlYnVnX2J1ZmZlcigiU1BJLVRYIiwgc1NwaVR4RnJhbWVCdWZmZXIsIChpbnQpeGZlclsxXS5sZW4sIGZhbHNlKTsKKyAgICAgICAgbG9nX2RlYnVnX2J1ZmZlcigiU1BJLVJYIiwgc1NwaVJ4RnJhbWVCdWZmZXIsIChpbnQpeGZlclsxXS5sZW4sIGZhbHNlKTsKKworICAgICAgICBzU3BpRnJhbWVDb3VudCsrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3NwaV9oZWFkZXIoY29uc3QgY2hhciogaGludCwgYm9vbCBmb3JjZSkKK3sKKyAgICBpZiAoZm9yY2UgfHwgKHNWZXJib3NlID49IExPR19ERUJVRykpCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90KiBzcGlSeEZyYW1lQnVmZmVyID0gZ2V0X3JlYWxfcnhfZnJhbWVfc3RhcnQoKTsKKworICAgICAgICBzeXNsb2coZm9yY2UgPyBMT0dfV0FSTklORyA6IExPR19ERUJVRywgIiVzLVRYOiBIOiUwMlggQUNDRVBUOiVkIERBVEE6JTBkXG4iLAorICAgICAgICAgICAgaGludCwKKyAgICAgICAgICAgIHNwaV9oZWFkZXJfZ2V0X2ZsYWdfYnl0ZShzU3BpVHhGcmFtZUJ1ZmZlciksCisgICAgICAgICAgICBzcGlfaGVhZGVyX2dldF9hY2NlcHRfbGVuKHNTcGlUeEZyYW1lQnVmZmVyKSwKKyAgICAgICAgICAgIHNwaV9oZWFkZXJfZ2V0X2RhdGFfbGVuKHNTcGlUeEZyYW1lQnVmZmVyKQorICAgICAgICApOworCisgICAgICAgIHN5c2xvZyhmb3JjZSA/IExPR19XQVJOSU5HIDogTE9HX0RFQlVHLCAiJXMtUlg6IEg6JTAyWCBBQ0NFUFQ6JWQgREFUQTolMGRcbiIsCisgICAgICAgICAgICBoaW50LAorICAgICAgICAgICAgc3BpX2hlYWRlcl9nZXRfZmxhZ19ieXRlKHNwaVJ4RnJhbWVCdWZmZXIpLAorICAgICAgICAgICAgc3BpX2hlYWRlcl9nZXRfYWNjZXB0X2xlbihzcGlSeEZyYW1lQnVmZmVyKSwKKyAgICAgICAgICAgIHNwaV9oZWFkZXJfZ2V0X2RhdGFfbGVuKHNwaVJ4RnJhbWVCdWZmZXIpCisgICAgICAgICk7CisgICAgfQorfQorCitzdGF0aWMgaW50IHB1c2hfcHVsbF9zcGkodm9pZCkKK3sKKyAgICBpbnQgcmV0OworICAgIHVpbnQxNl90IHNwaV94ZmVyX2J5dGVzID0gMDsKKyAgICBjb25zdCB1aW50OF90KiBzcGlSeEZyYW1lQnVmZmVyID0gTlVMTDsKKyAgICB1aW50OF90IHNsYXZlX2hlYWRlcjsKKyAgICB1aW50MTZfdCBzbGF2ZV9tYXhfcng7CisgICAgaW50IHN1Y2Nlc3NmdWxfZXhjaGFuZ2VzID0gMDsKKworICAgIHN0YXRpYyB1aW50MTZfdCBzbGF2ZV9kYXRhX2xlbjsKKworICAgIC8vIEZvciBub3csIHNTcGlSeFBheWxvYWRTaXplIG11c3QgYmUgemVybworICAgIC8vIHdoZW4gZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4gVGhpcyBtYXkgY2hhbmdlCisgICAgLy8gYXQgc29tZSBwb2ludCwgZm9yIG5vdyB0aGlzIG1ha2VzIHRoaW5ncworICAgIC8vIG11Y2ggZWFzaWVyLgorICAgIGFzc2VydChzU3BpUnhQYXlsb2FkU2l6ZSA9PSAwKTsKKworICAgIGlmIChzU3BpVmFsaWRGcmFtZUNvdW50ID09IDApCisgICAgeworICAgICAgICAvLyBTZXQgdGhlIHJlc2V0IGZsYWcgdG8gaW5kaWNhdGUgdG8gb3VyIHNsYXZlIHRoYXQgd2UKKyAgICAgICAgLy8gYXJlIGNvbWluZyB1cCBmcm9tIHNjcmF0Y2guCisgICAgICAgIHNwaV9oZWFkZXJfc2V0X2ZsYWdfYnl0ZShzU3BpVHhGcmFtZUJ1ZmZlciwgU1BJX0hFQURFUl9SRVNFVF9GTEFHfFNQSV9IRUFERVJfUEFUVEVSTl9WQUxVRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNwaV9oZWFkZXJfc2V0X2ZsYWdfYnl0ZShzU3BpVHhGcmFtZUJ1ZmZlciwgU1BJX0hFQURFUl9QQVRURVJOX1ZBTFVFKTsKKyAgICB9CisKKyAgICAvLyBaZXJvIG91dCBvdXIgcnhfYWNjZXB0IGFuZCBvdXIgZGF0YV9sZW4gZm9yIG5vdy4KKyAgICBzcGlfaGVhZGVyX3NldF9hY2NlcHRfbGVuKHNTcGlUeEZyYW1lQnVmZmVyLCAwKTsKKyAgICBzcGlfaGVhZGVyX3NldF9kYXRhX2xlbihzU3BpVHhGcmFtZUJ1ZmZlciwgMCk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2suCisgICAgaWYgKHNsYXZlX2RhdGFfbGVuID4gTUFYX0ZSQU1FX1NJWkUpCisgICAgeworICAgICAgICBzbGF2ZV9kYXRhX2xlbiA9IDA7CisgICAgfQorCisgICAgaWYgKHNTcGlUeElzUmVhZHkpCisgICAgeworICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdHJ5IHRvIGltbWVkaWF0ZWx5IHNlbmQgYSBmcmFtZSBpZiB3ZSBoYXZlIGl0IHF1ZXVlZCB1cC4KKyAgICAgICAgc3BpX2hlYWRlcl9zZXRfZGF0YV9sZW4oc1NwaVR4RnJhbWVCdWZmZXIsIHNTcGlUeFBheWxvYWRTaXplKTsKKworICAgICAgICBpZiAoc1NwaVR4UGF5bG9hZFNpemUgPiBzcGlfeGZlcl9ieXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgc3BpX3hmZXJfYnl0ZXMgPSBzU3BpVHhQYXlsb2FkU2l6ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzU3BpUnhQYXlsb2FkU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKHNsYXZlX2RhdGFfbGVuICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluIGEgcHJldmlvdXMgdHJhbnNhY3Rpb24gdGhlIHNsYXZlIGluZGljYXRlZAorICAgICAgICAgICAgLy8gaXQgaGFkIHNvbWV0aGluZyB0byBzZW5kIHVzLiBNYWtlIHN1cmUgb3VyCisgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbiBpcyBsYXJnZSBlbm91Z2ggdG8gaGFuZGxlIGl0LgorICAgICAgICAgICAgaWYgKHNsYXZlX2RhdGFfbGVuID4gc3BpX3hmZXJfYnl0ZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3BpX3hmZXJfYnl0ZXMgPSBzbGF2ZV9kYXRhX2xlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFNldCB1cCBhIG1pbmltdW0gdHJhbnNmZXIgc2l6ZSB0byBhbGxvdyBzbWFsbAorICAgICAgICAgICAgLy8gZnJhbWVzIHRoZSBzbGF2ZSB3YW50cyB0byBzZW5kIHVzIHRvIGJlIGhhbmRsZWQKKyAgICAgICAgICAgIC8vIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLgorICAgICAgICAgICAgaWYgKHNTcGlTbWFsbFBhY2tldFNpemUgPiBzcGlfeGZlcl9ieXRlcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcGlfeGZlcl9ieXRlcyA9ICh1aW50MTZfdClzU3BpU21hbGxQYWNrZXRTaXplOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc3BpX2hlYWRlcl9zZXRfYWNjZXB0X2xlbihzU3BpVHhGcmFtZUJ1ZmZlciwgc3BpX3hmZXJfYnl0ZXMpOworICAgIH0KKworICAgIC8vIFBlcmZvcm0gdGhlIFNQSSB0cmFuc2FjdGlvbi4KKyAgICByZXQgPSBkb19zcGlfeGZlcihzcGlfeGZlcl9ieXRlcyk7CisKKyAgICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgICAgIHBlcnJvcigiZG9fc3BpX3hmZXIiKTsKKworICAgICAgICAvLyBQcmludCBvdXQgYSBoZWxwZnVsIGVycm9yIG1lc3NhZ2UgZm9yCisgICAgICAgIC8vIGEgY29tbW9uIGVycm9yLgorICAgICAgICBpZiAoIChzU3BpQ3NEZWxheSAhPSAwKQorICAgICAgICAgICYmIChlcnJubyA9PSBFSU5WQUwpCisgICAgICAgICkgeworICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJTUEkgaW9jdGwgZmFpbGVkIHdpdGggRUlOVkFMLiBUcnkgYWRkaW5nIGAtLXNwaS1jcy1kZWxheT0wYCB0byBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiIpOworICAgICAgICB9CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICAvLyBBY2NvdW50IGZvciBtaXNhbGlnbm1lbnQgKDB4RkYgYnl0ZXMgYXQgdGhlIHN0YXJ0KQorICAgIHNwaVJ4RnJhbWVCdWZmZXIgPSBnZXRfcmVhbF9yeF9mcmFtZV9zdGFydCgpOworCisgICAgZGVidWdfc3BpX2hlYWRlcigicHVzaF9wdWxsIiwgZmFsc2UpOworCisgICAgc2xhdmVfaGVhZGVyID0gc3BpX2hlYWRlcl9nZXRfZmxhZ19ieXRlKHNwaVJ4RnJhbWVCdWZmZXIpOworCisgICAgaWYgKChzbGF2ZV9oZWFkZXIgPT0gMHhGRikgfHwgKHNsYXZlX2hlYWRlciA9PSAweDAwKSkKKyAgICB7CisgICAgICAgIGlmICggKHNsYXZlX2hlYWRlciA9PSBzcGlSeEZyYW1lQnVmZmVyWzFdKQorICAgICAgICAgICYmIChzbGF2ZV9oZWFkZXIgPT0gc3BpUnhGcmFtZUJ1ZmZlclsyXSkKKyAgICAgICAgICAmJiAoc2xhdmVfaGVhZGVyID09IHNwaVJ4RnJhbWVCdWZmZXJbM10pCisgICAgICAgICAgJiYgKHNsYXZlX2hlYWRlciA9PSBzcGlSeEZyYW1lQnVmZmVyWzRdKQorICAgICAgICApIHsKKyAgICAgICAgICAgIC8vIERldmljZSBpcyBvZmYgb3IgaW4gYSBiYWQgc3RhdGUuCisgICAgICAgICAgICAvLyBJbiBzb21lIGNhc2VzIG1heSBiZSBpbmR1Y2VkIGJ5IGZsb3cgY29udHJvbC4KKyAgICAgICAgICAgIHN5c2xvZyhzbGF2ZV9kYXRhX2xlbiA9PSAwID8gTE9HX0RFQlVHIDogTE9HX1dBUk5JTkcsICJTbGF2ZSBkaWQgbm90IHJlc3BvbmQgdG8gZnJhbWUuIChIZWFkZXIgd2FzIGFsbCAweCUwMlgpIiwgc2xhdmVfaGVhZGVyKTsKKyAgICAgICAgICAgIHNTcGlVbnJlc3BvbnNpdmVGcmFtZUNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBIZWFkZXIgaXMgZnVsbCBvZiBnYXJiYWdlCisgICAgICAgICAgICBzeXNsb2coCisgICAgICAgICAgICAgICAgTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgIkdhcmJhZ2UgaW4gaGVhZGVyIDogJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYIiwKKyAgICAgICAgICAgICAgICBzcGlSeEZyYW1lQnVmZmVyWzBdLAorICAgICAgICAgICAgICAgIHNwaVJ4RnJhbWVCdWZmZXJbMV0sCisgICAgICAgICAgICAgICAgc3BpUnhGcmFtZUJ1ZmZlclsyXSwKKyAgICAgICAgICAgICAgICBzcGlSeEZyYW1lQnVmZmVyWzNdLAorICAgICAgICAgICAgICAgIHNwaVJ4RnJhbWVCdWZmZXJbNF0KKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBzU3BpR2FyYmFnZUZyYW1lQ291bnQrKzsKKyAgICAgICAgICAgIGlmIChzVmVyYm9zZSA8IExPR19ERUJVRykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb2dfZGVidWdfYnVmZmVyKCJTUEktVFgiLCBzU3BpVHhGcmFtZUJ1ZmZlciwgKGludClzcGlfeGZlcl9ieXRlcyArIEhFQURFUl9MRU4gKyBzU3BpUnhBbGlnbkFsbG93YW5jZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgbG9nX2RlYnVnX2J1ZmZlcigiU1BJLVJYIiwgc1NwaVJ4RnJhbWVCdWZmZXIsIChpbnQpc3BpX3hmZXJfYnl0ZXMgKyBIRUFERVJfTEVOICsgc1NwaVJ4QWxpZ25BbGxvd2FuY2UsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNTcGlUeFJlZnVzZWRDb3VudCsrOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgc2xhdmVfbWF4X3J4ID0gc3BpX2hlYWRlcl9nZXRfYWNjZXB0X2xlbihzcGlSeEZyYW1lQnVmZmVyKTsKKyAgICBzbGF2ZV9kYXRhX2xlbiA9IHNwaV9oZWFkZXJfZ2V0X2RhdGFfbGVuKHNwaVJ4RnJhbWVCdWZmZXIpOworCisgICAgaWYgKCAoKHNsYXZlX2hlYWRlciAmIFNQSV9IRUFERVJfUEFUVEVSTl9NQVNLKSAhPSBTUElfSEVBREVSX1BBVFRFUk5fVkFMVUUpCisgICAgICB8fCAoc2xhdmVfbWF4X3J4ID4gTUFYX0ZSQU1FX1NJWkUpCisgICAgICB8fCAoc2xhdmVfZGF0YV9sZW4gPiBNQVhfRlJBTUVfU0laRSkKKyAgICApCisgICAgeworICAgICAgICBzU3BpR2FyYmFnZUZyYW1lQ291bnQrKzsKKyAgICAgICAgc1NwaVR4UmVmdXNlZENvdW50Kys7CisgICAgICAgIHNsYXZlX2RhdGFfbGVuID0gMDsKKyAgICAgICAgc3lzbG9nKAorICAgICAgICAgICAgTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAiR2FyYmFnZSBpbiBoZWFkZXIgOiAlMDJYICUwMlggJTAyWCAlMDJYICUwMlgiLAorICAgICAgICAgICAgc3BpUnhGcmFtZUJ1ZmZlclswXSwKKyAgICAgICAgICAgIHNwaVJ4RnJhbWVCdWZmZXJbMV0sCisgICAgICAgICAgICBzcGlSeEZyYW1lQnVmZmVyWzJdLAorICAgICAgICAgICAgc3BpUnhGcmFtZUJ1ZmZlclszXSwKKyAgICAgICAgICAgIHNwaVJ4RnJhbWVCdWZmZXJbNF0KKyAgICAgICAgKTsKKyAgICAgICAgaWYgKHNWZXJib3NlIDwgTE9HX0RFQlVHKQorICAgICAgICB7CisgICAgICAgICAgICBsb2dfZGVidWdfYnVmZmVyKCJTUEktVFgiLCBzU3BpVHhGcmFtZUJ1ZmZlciwgKGludClzcGlfeGZlcl9ieXRlcyArIEhFQURFUl9MRU4gKyBzU3BpUnhBbGlnbkFsbG93YW5jZSwgdHJ1ZSk7CisgICAgICAgICAgICBsb2dfZGVidWdfYnVmZmVyKCJTUEktUlgiLCBzU3BpUnhGcmFtZUJ1ZmZlciwgKGludClzcGlfeGZlcl9ieXRlcyArIEhFQURFUl9MRU4gKyBzU3BpUnhBbGlnbkFsbG93YW5jZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIHNTcGlWYWxpZEZyYW1lQ291bnQrKzsKKworICAgIGlmICggKHNsYXZlX2hlYWRlciAmIFNQSV9IRUFERVJfUkVTRVRfRkxBRykgPT0gU1BJX0hFQURFUl9SRVNFVF9GTEFHKQorICAgIHsKKyAgICAgICAgc1NsYXZlUmVzZXRDb3VudCsrOworICAgICAgICBzeXNsb2coTE9HX05PVElDRSwgIlNsYXZlIGRpZCByZXNldCAoJWxsdSByZXNldHMgc28gZmFyKSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc1NsYXZlUmVzZXRDb3VudCk7CisgICAgICAgIHNTbGF2ZURpZFJlc2V0ID0gdHJ1ZTsKKyAgICAgICAgc0R1bXBTdGF0cyA9IHRydWU7CisgICAgfQorCisgICAgLy8gSGFuZGxlIHJlY2VpdmVkIHBhY2tldCwgaWYgYW55LgorICAgIGlmICggKHNTcGlSeFBheWxvYWRTaXplID09IDApCisgICAgICAmJiAoc2xhdmVfZGF0YV9sZW4gIT0gMCkKKyAgICAgICYmIChzbGF2ZV9kYXRhX2xlbiA8PSBzcGlfaGVhZGVyX2dldF9hY2NlcHRfbGVuKHNTcGlUeEZyYW1lQnVmZmVyKSkKKyAgICApIHsKKyAgICAgICAgLy8gV2UgaGF2ZSByZWNlaXZlZCBhIHBhY2tldC4gU2V0IHNTcGlSeFBheWxvYWRTaXplIHNvIHRoYXQKKyAgICAgICAgLy8gdGhlIHBhY2tldCB3aWxsIGV2ZW50dWFsbHkgZ2V0IHF1ZXVlZCB1cCBieSBwdXNoX2hkbGMoKS4KKyAgICAgICAgc1NwaVJ4UGF5bG9hZFNpemUgPSBzbGF2ZV9kYXRhX2xlbjsKKworICAgICAgICBzbGF2ZV9kYXRhX2xlbiA9IDA7CisKKyAgICAgICAgc3VjY2Vzc2Z1bF9leGNoYW5nZXMrKzsKKyAgICB9CisKKyAgICAvLyBIYW5kbGUgdHJhbnNtaXR0ZWQgcGFja2V0LCBpZiBhbnkuCisgICAgaWYgKCBzU3BpVHhJc1JlYWR5CisgICAgICAmJiAoc1NwaVR4UGF5bG9hZFNpemUgPT0gc3BpX2hlYWRlcl9nZXRfZGF0YV9sZW4oc1NwaVR4RnJhbWVCdWZmZXIpKQorICAgICkgeworICAgICAgICBpZiAoc3BpX2hlYWRlcl9nZXRfZGF0YV9sZW4oc1NwaVR4RnJhbWVCdWZmZXIpIDw9IHNsYXZlX21heF9yeCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gT3VyIG91dGJvdW5kIHBhY2tldCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQuIENsZWFyCisgICAgICAgICAgICAvLyBzU3BpVHhQYXlsb2FkU2l6ZSBhbmQgc1NwaVR4SXNSZWFkeSBzbyB0aGF0IHB1bGxfaGRsYygpIGNhbgorICAgICAgICAgICAgLy8gcHVsbCBhbm90aGVyIHBhY2tldCBmb3IgdXMgdG8gc2VuZC4KKyAgICAgICAgICAgIHNTcGlUeElzUmVhZHkgPSBmYWxzZTsKKyAgICAgICAgICAgIHNTcGlUeFBheWxvYWRTaXplID0gMDsKKyAgICAgICAgICAgIHNTcGlUeFJlZnVzZWRDb3VudCA9IDA7CisgICAgICAgICAgICBzdWNjZXNzZnVsX2V4Y2hhbmdlcysrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHNsYXZlIFdhc24ndCByZWFkeSBmb3Igd2hhdCB3ZSBoYWQgdG8KKyAgICAgICAgICAgIC8vIHNlbmQgdGhlbS4gSW5jcmVtZW50aW5nIHRoaXMgY291bnRlciB3aWxsCisgICAgICAgICAgICAvLyB0dXJuIG9uIHJhdGUgbGltaXRpbmcgc28gdGhhdCB3ZQorICAgICAgICAgICAgLy8gZG9uJ3Qgd2FzdGUgYSB0b24gb2YgQ1BVIGJvbWJhcmRpbmcgdGhlbQorICAgICAgICAgICAgLy8gd2l0aCB1c2VsZXNzIFNQSSB0cmFuc2ZlcnMuCisgICAgICAgICAgICBzU3BpVHhSZWZ1c2VkQ291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghc1NwaVR4SXNSZWFkeSkKKyAgICB7CisgICAgICAgIHNTcGlUeFJlZnVzZWRDb3VudCA9IDA7CisgICAgfQorCisgICAgaWYgKHN1Y2Nlc3NmdWxfZXhjaGFuZ2VzID09IDIpCisgICAgeworICAgICAgICBzU3BpRHVwbGV4RnJhbWVDb3VudCsrOworICAgIH0KK2JhaWw6CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wgY2hlY2tfYW5kX2NsZWFyX2ludGVycnVwdCh2b2lkKQoreworICAgIGlmIChzSW50R3Bpb1ZhbHVlRmQgPj0gMCkKKyAgICB7CisgICAgICAgIGNoYXIgdmFsdWVbNV0gPSAiIjsKKyAgICAgICAgc3NpemVfdCBsZW47CisKKyAgICAgICAgbHNlZWsoc0ludEdwaW9WYWx1ZUZkLCAwLCBTRUVLX1NFVCk7CisKKyAgICAgICAgbGVuID0gcmVhZChzSW50R3Bpb1ZhbHVlRmQsIHZhbHVlLCBzaXplb2YodmFsdWUpLTEpOworCisgICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBwZXJyb3IoImNoZWNrX2FuZF9jbGVhcl9pbnRlcnJ1cHQiKTsKKyAgICAgICAgICAgIHNSZXQgPSBFWElUX0ZBSUxVUkU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgaW50ZXJydXB0IHBpbiBpcyBhY3RpdmUgbG93LgorICAgICAgICByZXR1cm4gR1BJT19JTlRfQVNTRVJUX1NUQVRFID09IGF0b2kodmFsdWUpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBNQVJLOiBIRExDIFRyYW5zZmVyIEZ1bmN0aW9ucyAqLworCisjZGVmaW5lIEhETENfQllURV9GTEFHICAgICAgICAgICAgIDB4N0UKKyNkZWZpbmUgSERMQ19CWVRFX0VTQyAgICAgICAgICAgICAgMHg3RAorI2RlZmluZSBIRExDX0JZVEVfWE9OICAgICAgICAgICAgICAweDExCisjZGVmaW5lIEhETENfQllURV9YT0ZGICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgSERMQ19CWVRFX1NQRUNJQUwgICAgICAgICAgMHhGOAorI2RlZmluZSBIRExDX0VTQ0FQRV9YRk9STSAgICAgICAgICAweDIwCisKK3N0YXRpYyB1aW50MTZfdCBoZGxjX2NyYzE2KHVpbnQxNl90IGFGY3MsIHVpbnQ4X3QgYUJ5dGUpCit7CisjaWYgMQorICAgIC8vIENSQy0xNi9DQ0lUVCwgQ1JDLTE2L0NDSVRULVRSVUUsIENSQy1DQ0lUVAorICAgIC8vIHdpZHRoPTE2IHBvbHk9MHgxMDIxIGluaXQ9MHgwMDAwIHJlZmluPXRydWUgcmVmb3V0PXRydWUgeG9yb3V0PTB4MDAwMCBjaGVjaz0weDIxODkgbmFtZT0iS0VSTUlUIgorICAgIC8vIGh0dHA6Ly9yZXZlbmcuc291cmNlZm9yZ2UubmV0L2NyYy1jYXRhbG9ndWUvMTYuaHRtI2NyYy5jYXQua2VybWl0CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNGY3NUYWJsZVsyNTZdID0KKyAgICB7CisgICAgICAgIDB4MDAwMCwgMHgxMTg5LCAweDIzMTIsIDB4MzI5YiwgMHg0NjI0LCAweDU3YWQsIDB4NjUzNiwgMHg3NGJmLAorICAgICAgICAweDhjNDgsIDB4OWRjMSwgMHhhZjVhLCAweGJlZDMsIDB4Y2E2YywgMHhkYmU1LCAweGU5N2UsIDB4ZjhmNywKKyAgICAgICAgMHgxMDgxLCAweDAxMDgsIDB4MzM5MywgMHgyMjFhLCAweDU2YTUsIDB4NDcyYywgMHg3NWI3LCAweDY0M2UsCisgICAgICAgIDB4OWNjOSwgMHg4ZDQwLCAweGJmZGIsIDB4YWU1MiwgMHhkYWVkLCAweGNiNjQsIDB4ZjlmZiwgMHhlODc2LAorICAgICAgICAweDIxMDIsIDB4MzA4YiwgMHgwMjEwLCAweDEzOTksIDB4NjcyNiwgMHg3NmFmLCAweDQ0MzQsIDB4NTViZCwKKyAgICAgICAgMHhhZDRhLCAweGJjYzMsIDB4OGU1OCwgMHg5ZmQxLCAweGViNmUsIDB4ZmFlNywgMHhjODdjLCAweGQ5ZjUsCisgICAgICAgIDB4MzE4MywgMHgyMDBhLCAweDEyOTEsIDB4MDMxOCwgMHg3N2E3LCAweDY2MmUsIDB4NTRiNSwgMHg0NTNjLAorICAgICAgICAweGJkY2IsIDB4YWM0MiwgMHg5ZWQ5LCAweDhmNTAsIDB4ZmJlZiwgMHhlYTY2LCAweGQ4ZmQsIDB4Yzk3NCwKKyAgICAgICAgMHg0MjA0LCAweDUzOGQsIDB4NjExNiwgMHg3MDlmLCAweDA0MjAsIDB4MTVhOSwgMHgyNzMyLCAweDM2YmIsCisgICAgICAgIDB4Y2U0YywgMHhkZmM1LCAweGVkNWUsIDB4ZmNkNywgMHg4ODY4LCAweDk5ZTEsIDB4YWI3YSwgMHhiYWYzLAorICAgICAgICAweDUyODUsIDB4NDMwYywgMHg3MTk3LCAweDYwMWUsIDB4MTRhMSwgMHgwNTI4LCAweDM3YjMsIDB4MjYzYSwKKyAgICAgICAgMHhkZWNkLCAweGNmNDQsIDB4ZmRkZiwgMHhlYzU2LCAweDk4ZTksIDB4ODk2MCwgMHhiYmZiLCAweGFhNzIsCisgICAgICAgIDB4NjMwNiwgMHg3MjhmLCAweDQwMTQsIDB4NTE5ZCwgMHgyNTIyLCAweDM0YWIsIDB4MDYzMCwgMHgxN2I5LAorICAgICAgICAweGVmNGUsIDB4ZmVjNywgMHhjYzVjLCAweGRkZDUsIDB4YTk2YSwgMHhiOGUzLCAweDhhNzgsIDB4OWJmMSwKKyAgICAgICAgMHg3Mzg3LCAweDYyMGUsIDB4NTA5NSwgMHg0MTFjLCAweDM1YTMsIDB4MjQyYSwgMHgxNmIxLCAweDA3MzgsCisgICAgICAgIDB4ZmZjZiwgMHhlZTQ2LCAweGRjZGQsIDB4Y2Q1NCwgMHhiOWViLCAweGE4NjIsIDB4OWFmOSwgMHg4YjcwLAorICAgICAgICAweDg0MDgsIDB4OTU4MSwgMHhhNzFhLCAweGI2OTMsIDB4YzIyYywgMHhkM2E1LCAweGUxM2UsIDB4ZjBiNywKKyAgICAgICAgMHgwODQwLCAweDE5YzksIDB4MmI1MiwgMHgzYWRiLCAweDRlNjQsIDB4NWZlZCwgMHg2ZDc2LCAweDdjZmYsCisgICAgICAgIDB4OTQ4OSwgMHg4NTAwLCAweGI3OWIsIDB4YTYxMiwgMHhkMmFkLCAweGMzMjQsIDB4ZjFiZiwgMHhlMDM2LAorICAgICAgICAweDE4YzEsIDB4MDk0OCwgMHgzYmQzLCAweDJhNWEsIDB4NWVlNSwgMHg0ZjZjLCAweDdkZjcsIDB4NmM3ZSwKKyAgICAgICAgMHhhNTBhLCAweGI0ODMsIDB4ODYxOCwgMHg5NzkxLCAweGUzMmUsIDB4ZjJhNywgMHhjMDNjLCAweGQxYjUsCisgICAgICAgIDB4Mjk0MiwgMHgzOGNiLCAweDBhNTAsIDB4MWJkOSwgMHg2ZjY2LCAweDdlZWYsIDB4NGM3NCwgMHg1ZGZkLAorICAgICAgICAweGI1OGIsIDB4YTQwMiwgMHg5Njk5LCAweDg3MTAsIDB4ZjNhZiwgMHhlMjI2LCAweGQwYmQsIDB4YzEzNCwKKyAgICAgICAgMHgzOWMzLCAweDI4NGEsIDB4MWFkMSwgMHgwYjU4LCAweDdmZTcsIDB4NmU2ZSwgMHg1Y2Y1LCAweDRkN2MsCisgICAgICAgIDB4YzYwYywgMHhkNzg1LCAweGU1MWUsIDB4ZjQ5NywgMHg4MDI4LCAweDkxYTEsIDB4YTMzYSwgMHhiMmIzLAorICAgICAgICAweDRhNDQsIDB4NWJjZCwgMHg2OTU2LCAweDc4ZGYsIDB4MGM2MCwgMHgxZGU5LCAweDJmNzIsIDB4M2VmYiwKKyAgICAgICAgMHhkNjhkLCAweGM3MDQsIDB4ZjU5ZiwgMHhlNDE2LCAweDkwYTksIDB4ODEyMCwgMHhiM2JiLCAweGEyMzIsCisgICAgICAgIDB4NWFjNSwgMHg0YjRjLCAweDc5ZDcsIDB4Njg1ZSwgMHgxY2UxLCAweDBkNjgsIDB4M2ZmMywgMHgyZTdhLAorICAgICAgICAweGU3MGUsIDB4ZjY4NywgMHhjNDFjLCAweGQ1OTUsIDB4YTEyYSwgMHhiMGEzLCAweDgyMzgsIDB4OTNiMSwKKyAgICAgICAgMHg2YjQ2LCAweDdhY2YsIDB4NDg1NCwgMHg1OWRkLCAweDJkNjIsIDB4M2NlYiwgMHgwZTcwLCAweDFmZjksCisgICAgICAgIDB4Zjc4ZiwgMHhlNjA2LCAweGQ0OWQsIDB4YzUxNCwgMHhiMWFiLCAweGEwMjIsIDB4OTJiOSwgMHg4MzMwLAorICAgICAgICAweDdiYzcsIDB4NmE0ZSwgMHg1OGQ1LCAweDQ5NWMsIDB4M2RlMywgMHgyYzZhLCAweDFlZjEsIDB4MGY3OAorICAgIH07CisgICAgcmV0dXJuIChhRmNzID4+IDgpIF4gc0Zjc1RhYmxlWyhhRmNzIF4gYUJ5dGUpICYgMHhmZl07CisjZWxzZQorICAgIC8vIENSQy0xNi9DQ0lUVC1GQUxTRSwgc2FtZSBDUkMgYXMgODAyLjE1LjQKKyAgICAvLyB3aWR0aD0xNiBwb2x5PTB4MTAyMSBpbml0PTB4ZmZmZiByZWZpbj1mYWxzZSByZWZvdXQ9ZmFsc2UgeG9yb3V0PTB4MDAwMCBjaGVjaz0weDI5YjEgbmFtZT0iQ1JDLTE2L0NDSVRULUZBTFNFIgorICAgIC8vIGh0dHA6Ly9yZXZlbmcuc291cmNlZm9yZ2UubmV0L2NyYy1jYXRhbG9ndWUvMTYuaHRtI2NyYy5jYXQuY3JjLTE2LWNjaXR0LWZhbHNlCisgICAgYUZjcyA9ICh1aW50MTZfdCkoKGFGY3MgPj4gOCkgfCAoYUZjcyA8PCA4KSk7CisgICAgYUZjcyBePSBhQnl0ZTsKKyAgICBhRmNzIF49ICgoYUZjcyAmIDB4ZmYpID4+IDQpOworICAgIGFGY3MgXj0gKGFGY3MgPDwgMTIpOworICAgIGFGY3MgXj0gKChhRmNzICYgMHhmZikgPDwgNSk7CisgICAgcmV0dXJuIGFGY3M7CisjZW5kaWYKK30KKworc3RhdGljIGJvb2wgaGRsY19ieXRlX25lZWRzX2VzY2FwZSh1aW50OF90IGJ5dGUpCit7CisgICAgc3dpdGNoKGJ5dGUpCisgICAgeworICAgIGNhc2UgSERMQ19CWVRFX1NQRUNJQUw6CisgICAgY2FzZSBIRExDX0JZVEVfRVNDOgorICAgIGNhc2UgSERMQ19CWVRFX0ZMQUc6CisgICAgY2FzZSBIRExDX0JZVEVfWE9GRjoKKyAgICBjYXNlIEhETENfQllURV9YT046CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGludCBwdXNoX2hkbGModm9pZCkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBjb25zdCB1aW50OF90KiBzcGlSeEZyYW1lQnVmZmVyID0gZ2V0X3JlYWxfcnhfZnJhbWVfc3RhcnQoKTsKKyAgICBzdGF0aWMgdWludDhfdCBlc2NhcGVkX2ZyYW1lX2J1ZmZlcltNQVhfRlJBTUVfU0laRSoyXTsKKyAgICBzdGF0aWMgdWludDE2X3QgdW5lc2NhcGVkX2ZyYW1lX2xlbjsKKyAgICBzdGF0aWMgdWludDE2X3QgZXNjYXBlZF9mcmFtZV9sZW47CisgICAgc3RhdGljIHVpbnQxNl90IGVzY2FwZWRfZnJhbWVfc2VudDsKKworICAgIGlmIChlc2NhcGVkX2ZyYW1lX2xlbiA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKHNTbGF2ZURpZFJlc2V0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJbmRpY2F0ZSBhbiBNQ1UgcmVzZXQuCisgICAgICAgICAgICBtZW1jcHkoZXNjYXBlZF9mcmFtZV9idWZmZXIsIGtIZGxjUmVzZXRTaWduYWwsIHNpemVvZihrSGRsY1Jlc2V0U2lnbmFsKSk7CisgICAgICAgICAgICBlc2NhcGVkX2ZyYW1lX2xlbiA9IHNpemVvZihrSGRsY1Jlc2V0U2lnbmFsKTsKKyAgICAgICAgICAgIHNTbGF2ZURpZFJlc2V0ID0gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIFNldCB0aGlzIHRvIHplcm8sIHNpbmNlIHRoaXMgaXNuJ3QgYSByZWFsIGZyYW1lLgorICAgICAgICAgICAgdW5lc2NhcGVkX2ZyYW1lX2xlbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc1NwaVJ4UGF5bG9hZFNpemUgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRXNjYXBlIHRoZSBmcmFtZS4KKyAgICAgICAgICAgIHVpbnQ4X3QgYzsKKyAgICAgICAgICAgIHVpbnQxNl90IGZjcyA9IGtIZGxjQ3JjUmVzZXRWYWx1ZTsKKyAgICAgICAgICAgIHVpbnQxNl90IGk7CisKKyAgICAgICAgICAgIHVuZXNjYXBlZF9mcmFtZV9sZW4gPSBzU3BpUnhQYXlsb2FkU2l6ZTsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNTcGlSeFBheWxvYWRTaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYyA9IHNwaVJ4RnJhbWVCdWZmZXJbaSArIEhFQURFUl9MRU5dOworICAgICAgICAgICAgICAgIGZjcyA9IGhkbGNfY3JjMTYoZmNzLCBjKTsKKyAgICAgICAgICAgICAgICBpZiAoaGRsY19ieXRlX25lZWRzX2VzY2FwZShjKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZWRfZnJhbWVfYnVmZmVyW2VzY2FwZWRfZnJhbWVfbGVuKytdID0gSERMQ19CWVRFX0VTQzsKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZF9mcmFtZV9idWZmZXJbZXNjYXBlZF9mcmFtZV9sZW4rK10gPSBjIF4gSERMQ19FU0NBUEVfWEZPUk07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZWRfZnJhbWVfYnVmZmVyW2VzY2FwZWRfZnJhbWVfbGVuKytdID0gYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZjcyBePSAweEZGRkY7CisKKyAgICAgICAgICAgIGMgPSBmY3MgJiAweEZGOworICAgICAgICAgICAgaWYgKGhkbGNfYnl0ZV9uZWVkc19lc2NhcGUoYykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXNjYXBlZF9mcmFtZV9idWZmZXJbZXNjYXBlZF9mcmFtZV9sZW4rK10gPSBIRExDX0JZVEVfRVNDOworICAgICAgICAgICAgICAgIGVzY2FwZWRfZnJhbWVfYnVmZmVyW2VzY2FwZWRfZnJhbWVfbGVuKytdID0gYyBeIEhETENfRVNDQVBFX1hGT1JNOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVzY2FwZWRfZnJhbWVfYnVmZmVyW2VzY2FwZWRfZnJhbWVfbGVuKytdID0gYzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYyA9IChmY3MgPj4gOCkgJiAweEZGOworICAgICAgICAgICAgaWYgKGhkbGNfYnl0ZV9uZWVkc19lc2NhcGUoYykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXNjYXBlZF9mcmFtZV9idWZmZXJbZXNjYXBlZF9mcmFtZV9sZW4rK10gPSBIRExDX0JZVEVfRVNDOworICAgICAgICAgICAgICAgIGVzY2FwZWRfZnJhbWVfYnVmZmVyW2VzY2FwZWRfZnJhbWVfbGVuKytdID0gYyBeIEhETENfRVNDQVBFX1hGT1JNOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVzY2FwZWRfZnJhbWVfYnVmZmVyW2VzY2FwZWRfZnJhbWVfbGVuKytdID0gYzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXNjYXBlZF9mcmFtZV9idWZmZXJbZXNjYXBlZF9mcmFtZV9sZW4rK10gPSBIRExDX0JZVEVfRkxBRzsKKyAgICAgICAgICAgIGVzY2FwZWRfZnJhbWVfc2VudCA9IDA7CisgICAgICAgICAgICBzU3BpUnhQYXlsb2FkU2l6ZSA9IDA7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXQgPSAoaW50KXdyaXRlKAorICAgICAgICBzSGRsY091dHB1dEZkLAorICAgICAgICBlc2NhcGVkX2ZyYW1lX2J1ZmZlciArIGVzY2FwZWRfZnJhbWVfc2VudCwKKyAgICAgICAgZXNjYXBlZF9mcmFtZV9sZW4gICAgLSBlc2NhcGVkX2ZyYW1lX3NlbnQKKyAgICApOworCisgICAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcGVycm9yKCJwdXNoX2hkbGM6d3JpdGUiKTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAicHVzaF9oZGxjOndyaXRlOiBlcnJubz0lZCAoJXMpIiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIH0KKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIGVzY2FwZWRfZnJhbWVfc2VudCArPSByZXQ7CisKKyAgICAvLyBSZXNldCBzdGF0ZSBvbmNlIHdlIGhhdmUgc2VudCB0aGUgZW50aXJlIGZyYW1lLgorICAgIGlmIChlc2NhcGVkX2ZyYW1lX2xlbiA9PSBlc2NhcGVkX2ZyYW1lX3NlbnQpCisgICAgeworICAgICAgICBlc2NhcGVkX2ZyYW1lX2xlbiA9IGVzY2FwZWRfZnJhbWVfc2VudCA9IDA7CisKKyAgICAgICAgLy8gSW5jcmVtZW50IGNvdW50ZXIgZm9yIHN0YXRpc3RpY3MKKyAgICAgICAgc0hkbGNUeEZyYW1lQ291bnQrKzsKKyAgICAgICAgc0hkbGNUeEZyYW1lQnl0ZUNvdW50ICs9IHVuZXNjYXBlZF9mcmFtZV9sZW47CisgICAgfQorCisgICAgcmV0ID0gMDsKKworYmFpbDoKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHB1bGxfaGRsYyh2b2lkKQoreworICAgIGludCByZXQgPSAwOworICAgIHN0YXRpYyB1aW50MTZfdCBmY3M7CisgICAgc3RhdGljIGJvb2wgdW5lc2NhcGVfbmV4dF9ieXRlID0gZmFsc2U7CisKKyAgICBpZiAoIXNTcGlUeElzUmVhZHkpCisgICAgeworICAgICAgICB1aW50OF90IGJ5dGU7CisgICAgICAgIHdoaWxlICgocmV0ID0gKGludClyZWFkKHNIZGxjSW5wdXRGZCwgJmJ5dGUsIDEpKSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc1NwaVR4UGF5bG9hZFNpemUgPj0gKE1BWF9GUkFNRV9TSVpFIC0gSEVBREVSX0xFTikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19XQVJOSU5HLCAiSERMQyBmcmFtZSB3YXMgdG9vIGJpZyIpOworICAgICAgICAgICAgICAgIHVuZXNjYXBlX25leHRfYnl0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHNTcGlUeFBheWxvYWRTaXplID0gMDsKKyAgICAgICAgICAgICAgICBmY3MgPSBrSGRsY0NyY1Jlc2V0VmFsdWU7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGUgPT0gSERMQ19CWVRFX0ZMQUcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHNTcGlUeFBheWxvYWRTaXplIDw9IDIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZV9uZXh0X2J5dGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgc1NwaVR4UGF5bG9hZFNpemUgPSAwOworICAgICAgICAgICAgICAgICAgICBmY3MgPSBrSGRsY0NyY1Jlc2V0VmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZjcyAhPSBrSGRsY0NyY0NoZWNrVmFsdWUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX1dBUk5JTkcsICJIRExDIGZyYW1lIHdpdGggYmFkIENSQyAoTEVOOiVkLCBGQ1M6MHglMDRYKSIsIHNTcGlUeFBheWxvYWRTaXplLCBmY3MpOworICAgICAgICAgICAgICAgICAgICBzSGRsY1J4QmFkQ3JjQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVfbmV4dF9ieXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNTcGlUeFBheWxvYWRTaXplID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZmNzID0ga0hkbGNDcmNSZXNldFZhbHVlOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDbGlwIG9mZiB0aGUgQ1JDCisgICAgICAgICAgICAgICAgc1NwaVR4UGF5bG9hZFNpemUgLT0gMjsKKworICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHRoYXQgYSBmcmFtZSBpcyByZWFkeSB0byBnbyBvdXQKKyAgICAgICAgICAgICAgICBzU3BpVHhJc1JlYWR5ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIC8vIEluY3JlbWVudCBjb3VudGVycyBmb3Igc3RhdGlzdGljcworICAgICAgICAgICAgICAgIHNIZGxjUnhGcmFtZUNvdW50Kys7CisgICAgICAgICAgICAgICAgc0hkbGNSeEZyYW1lQnl0ZUNvdW50ICs9IHNTcGlUeFBheWxvYWRTaXplOworCisgICAgICAgICAgICAgICAgLy8gQ2xlYW4gdXAgZm9yIHRoZSBuZXh0IGZyYW1lCisgICAgICAgICAgICAgICAgdW5lc2NhcGVfbmV4dF9ieXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZmNzID0ga0hkbGNDcmNSZXNldFZhbHVlOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChieXRlID09IEhETENfQllURV9FU0MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5lc2NhcGVfbmV4dF9ieXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaGRsY19ieXRlX25lZWRzX2VzY2FwZShieXRlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTa2lwIGFsbCBvdGhlciBjb250cm9sIGNvZGVzLgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh1bmVzY2FwZV9uZXh0X2J5dGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnl0ZSA9IGJ5dGUgXiBIRExDX0VTQ0FQRV9YRk9STTsKKyAgICAgICAgICAgICAgICB1bmVzY2FwZV9uZXh0X2J5dGUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmNzID0gaGRsY19jcmMxNihmY3MsIGJ5dGUpOworICAgICAgICAgICAgc1NwaVR4RnJhbWVCdWZmZXJbSEVBREVSX0xFTiArIHNTcGlUeFBheWxvYWRTaXplKytdID0gYnl0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcnJvcigicHVsbF9oZGxjOnJlYWQiKTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAicHVsbF9oZGxjOnJlYWQ6IGVycm5vPSVkICglcykiLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXQgPCAwCisgICAgICAgID8gcmV0CisgICAgICAgIDogMDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBNQVJLOiBSYXcgVHJhbnNmZXIgRnVuY3Rpb25zICovCisKK3N0YXRpYyBpbnQgcHVzaF9yYXcodm9pZCkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBjb25zdCB1aW50OF90KiBzcGlSeEZyYW1lQnVmZmVyID0gZ2V0X3JlYWxfcnhfZnJhbWVfc3RhcnQoKTsKKyAgICBzdGF0aWMgdWludDhfdCByYXdfZnJhbWVfYnVmZmVyW01BWF9GUkFNRV9TSVpFXTsKKyAgICBzdGF0aWMgdWludDE2X3QgcmF3X2ZyYW1lX2xlbjsKKyAgICBzdGF0aWMgdWludDE2X3QgcmF3X2ZyYW1lX3NlbnQ7CisKKyAgICBpZiAocmF3X2ZyYW1lX2xlbiA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKHNTbGF2ZURpZFJlc2V0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJbmRpY2F0ZXMgYW4gTUNVIHJlc2V0LgorICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBkbyBoZXJlIGJlY2F1c2UKKyAgICAgICAgICAgIC8vIHJhdyBtb2RlIGRvZXNuJ3QgaGF2ZSBhbnkgd2F5IHRvIHNpZ25hbAorICAgICAgICAgICAgLy8gcmVzZXRzIG91dC1vZi1iYW5kLgorICAgICAgICAgICAgc1NsYXZlRGlkUmVzZXQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzU3BpUnhQYXlsb2FkU2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlYWQgdGhlIGZyYW1lIGludG8gcmF3X2ZyYW1lX2J1ZmZlcgorICAgICAgICAgICAgYXNzZXJ0KHNTcGlSeFBheWxvYWRTaXplIDw9IHNpemVvZihyYXdfZnJhbWVfYnVmZmVyKSk7CisgICAgICAgICAgICBtZW1jcHkocmF3X2ZyYW1lX2J1ZmZlciwgJnNwaVJ4RnJhbWVCdWZmZXJbSEVBREVSX0xFTl0sIHNTcGlSeFBheWxvYWRTaXplKTsKKyAgICAgICAgICAgIHJhd19mcmFtZV9sZW4gPSBzU3BpUnhQYXlsb2FkU2l6ZTsKKyAgICAgICAgICAgIHJhd19mcmFtZV9zZW50ID0gMDsKKyAgICAgICAgICAgIHNTcGlSeFBheWxvYWRTaXplID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXQgPSAoaW50KXdyaXRlKAorICAgICAgICBzSGRsY091dHB1dEZkLAorICAgICAgICByYXdfZnJhbWVfYnVmZmVyICsgcmF3X2ZyYW1lX3NlbnQsCisgICAgICAgIHJhd19mcmFtZV9sZW4gICAgLSByYXdfZnJhbWVfc2VudAorICAgICk7CisKKyAgICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwZXJyb3IoInB1c2hfcmF3OndyaXRlIik7CisgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgInB1c2hfcmF3OndyaXRlOiBlcnJubz0lZCAoJXMpIiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIH0KKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIHJhd19mcmFtZV9zZW50ICs9IHJldDsKKworICAgIC8vIFJlc2V0IHN0YXRlIG9uY2Ugd2UgaGF2ZSBzZW50IHRoZSBlbnRpcmUgZnJhbWUuCisgICAgaWYgKHJhd19mcmFtZV9sZW4gPT0gcmF3X2ZyYW1lX3NlbnQpCisgICAgeworICAgICAgICAvLyBJbmNyZW1lbnQgY291bnRlciBmb3Igc3RhdGlzdGljcworICAgICAgICBzSGRsY1R4RnJhbWVDb3VudCsrOworICAgICAgICBzSGRsY1R4RnJhbWVCeXRlQ291bnQgKz0gcmF3X2ZyYW1lX2xlbjsKKworICAgICAgICByYXdfZnJhbWVfbGVuID0gcmF3X2ZyYW1lX3NlbnQgPSAwOworICAgIH0KKworICAgIHJldCA9IDA7CisKK2JhaWw6CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwdWxsX3Jhdyh2b2lkKQoreworICAgIGludCByZXQgPSAwOworCisgICAgaWYgKCFzU3BpVHhJc1JlYWR5KQorICAgIHsKKyAgICAgICAgcmV0ID0gKGludClyZWFkKHNIZGxjSW5wdXRGZCwgJnNTcGlUeEZyYW1lQnVmZmVyW0hFQURFUl9MRU5dLCAoc2l6ZV90KXNNVFUpOworCisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGVycm9yKCJwdWxsX3JhdzpyZWFkIik7CisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJwdWxsX3JhdzpyZWFkOiBlcnJubz0lZCAoJXMpIiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyZXQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBzU3BpVHhQYXlsb2FkU2l6ZSA9ICh1aW50MTZfdClyZXQ7CisgICAgICAgICAgICBzU3BpVHhJc1JlYWR5ID0gdHJ1ZTsKKworICAgICAgICAgICAgLy8gSW5jcmVtZW50IGNvdW50ZXJzIGZvciBzdGF0aXN0aWNzCisgICAgICAgICAgICBzSGRsY1J4RnJhbWVDb3VudCsrOworICAgICAgICAgICAgc0hkbGNSeEZyYW1lQnl0ZUNvdW50ICs9IHNTcGlUeFBheWxvYWRTaXplOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldCA8IDAKKyAgICAgICAgPyByZXQKKyAgICAgICAgOiAwOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIE1BUks6IFNldHVwIEZ1bmN0aW9ucyAqLworCitzdGF0aWMgYm9vbCB1cGRhdGVfc3BpX21vZGUoaW50IHgpCit7CisgICAgc1NwaU1vZGUgPSAodWludDhfdCl4OworCisgICAgaWYgKCAoc1NwaURldkZkID49IDApCisgICAgICAmJiAoaW9jdGwoc1NwaURldkZkLCBTUElfSU9DX1dSX01PREUsICZzU3BpTW9kZSkgPCAwKQorICAgICkKKyAgICB7CisgICAgICAgIHBlcnJvcigiaW9jdGwoU1BJX0lPQ19XUl9NT0RFKSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHVwZGF0ZV9zcGlfc3BlZWQoaW50IHgpCit7CisgICAgc1NwaVNwZWVkID0geDsKKworICAgIGlmICggKHNTcGlEZXZGZCA+PSAwKQorICAgICAgJiYgKGlvY3RsKHNTcGlEZXZGZCwgU1BJX0lPQ19XUl9NQVhfU1BFRURfSFosICZzU3BpU3BlZWQpIDwgMCkKKyAgICApCisgICAgeworICAgICAgICBwZXJyb3IoImlvY3RsKFNQSV9JT0NfV1JfTUFYX1NQRUVEX0haKSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIGJvb2wgc2V0dXBfc3BpX2Rldihjb25zdCBjaGFyKiBwYXRoKQoreworICAgIGludCBmZCA9IC0xOworICAgIGNvbnN0IHVpbnQ4X3Qgc3BpX3dvcmRfYml0cyA9IDg7CisgICAgaW50IHJldDsKKyAgICBzU3BpRGV2UGF0aCA9IHBhdGg7CisKKyAgICBmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTsKKyAgICBpZiAoZmQgPCAwKQorICAgIHsKKyAgICAgICAgcGVycm9yKCJvcGVuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIFNQSSBtb2RlLgorICAgIHJldCA9IGlvY3RsKGZkLCBTUElfSU9DX1dSX01PREUsICZzU3BpTW9kZSk7CisgICAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgICBwZXJyb3IoImlvY3RsKFNQSV9JT0NfV1JfTU9ERSkiKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIC8vIFNldCB0aGUgU1BJIGNsb2NrIHNwZWVkLgorICAgIHJldCA9IGlvY3RsKGZkLCBTUElfSU9DX1dSX01BWF9TUEVFRF9IWiwgJnNTcGlTcGVlZCk7CisgICAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgICBwZXJyb3IoImlvY3RsKFNQSV9JT0NfV1JfTUFYX1NQRUVEX0haKSIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBTUEkgd29yZCBzaXplLgorICAgIHJldCA9IGlvY3RsKGZkLCBTUElfSU9DX1dSX0JJVFNfUEVSX1dPUkQsICZzcGlfd29yZF9iaXRzKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgICAgIHBlcnJvcigiaW9jdGwoU1BJX0lPQ19XUl9CSVRTX1BFUl9XT1JEKSIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgLy8gTG9jayB0aGUgZmlsZSBkZXNjcmlwdG9yCisgICAgaWYgKGZsb2NrKGZkLCBMT0NLX0VYIHwgTE9DS19OQikgPCAwKQorICAgIHsKKyAgICAgICAgcGVycm9yKCJmbG9jayIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgc1NwaURldkZkID0gZmQ7CisgICAgZmQgPSAtMTsKKworYmFpbDoKKyAgICBpZiAoZmQgPj0gMCkKKyAgICB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICB9CisgICAgcmV0dXJuIHNTcGlEZXZGZCA+PSAwOworfQorCitzdGF0aWMgYm9vbCBzZXR1cF9yZXNfZ3Bpbyhjb25zdCBjaGFyKiBwYXRoKQoreworICAgIGludCBzZXR1cF9mZCA9IC0xOworICAgIGNoYXIqIGRpcl9wYXRoID0gTlVMTDsKKyAgICBjaGFyKiB2YWx1ZV9wYXRoID0gTlVMTDsKKyAgICBpbnQgbGVuOworCisgICAgc1Jlc0dwaW9EZXZQYXRoID0gcGF0aDsKKworICAgIGxlbiA9IGFzcHJpbnRmKCZkaXJfcGF0aCwgIiVzL2RpcmVjdGlvbiIsIHBhdGgpOworCisgICAgaWYgKGxlbiA8IDApCisgICAgeworICAgICAgICBwZXJyb3IoImFzcHJpbnRmIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBsZW4gPSBhc3ByaW50ZigmdmFsdWVfcGF0aCwgIiVzL3ZhbHVlIiwgcGF0aCk7CisKKyAgICBpZiAobGVuIDwgMCkKKyAgICB7CisgICAgICAgIHBlcnJvcigiYXNwcmludGYiKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIHNldHVwX2ZkID0gb3BlbihkaXJfcGF0aCwgT19XUk9OTFkpOworCisgICAgaWYgKHNldHVwX2ZkID49IDApCisgICAgeworICAgICAgICBpZiAoLTEgPT0gd3JpdGUoc2V0dXBfZmQsICJoaWdoXG4iLCA1KSkKKyAgICAgICAgeworICAgICAgICAgICAgcGVycm9yKCJzZXRfcmVzX2RpcmVjdGlvbiIpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgc1Jlc0dwaW9WYWx1ZUZkID0gb3Blbih2YWx1ZV9wYXRoLCBPX1dST05MWSk7CisKK2JhaWw6CisKKyAgICBpZiAoc2V0dXBfZmQgPj0gMCkKKyAgICB7CisgICAgICAgIGNsb3NlKHNldHVwX2ZkKTsKKyAgICB9CisKKyAgICBpZiAoZGlyX3BhdGgpCisgICAgeworICAgICAgICBmcmVlKGRpcl9wYXRoKTsKKyAgICB9CisKKyAgICBpZiAodmFsdWVfcGF0aCkKKyAgICB7CisgICAgICAgIGZyZWUodmFsdWVfcGF0aCk7CisgICAgfQorCisgICAgcmV0dXJuIHNSZXNHcGlvVmFsdWVGZCA+PSAwOworfQorCitzdGF0aWMgdm9pZCB0cmlnZ2VyX3Jlc2V0KHZvaWQpCit7CisgICAgaWYgKHNSZXNHcGlvVmFsdWVGZCA+PSAwKQorICAgIHsKKyAgICAgICAgY2hhciBzdHJbXSA9IHsgJzAnICsgR1BJT19SRVNfQVNTRVJUX1NUQVRFLCAnXG4nIH07CisKKyAgICAgICAgbHNlZWsoc1Jlc0dwaW9WYWx1ZUZkLCAwLCBTRUVLX1NFVCk7CisgICAgICAgIGlmICh3cml0ZShzUmVzR3Bpb1ZhbHVlRmQsIHN0ciwgc2l6ZW9mKHN0cikpID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgInRyaWdnZXJfcmVzZXQoKTogZXJyb3Igb24gd3JpdGU6ICVkICglcykiLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgfQorCisgICAgICAgIHVzbGVlcCgxMCAqIFVTRUNfUEVSX01TRUMpOworCisgICAgICAgIC8vIFNldCB0aGUgc3RyaW5nIHRvIHN3aXRjaCB0byB0aGUgbm90LWFzc2VydGVkIHN0YXRlLgorICAgICAgICBzdHJbMF0gPSAnMCcgKyAhR1BJT19SRVNfQVNTRVJUX1NUQVRFOworCisgICAgICAgIGxzZWVrKHNSZXNHcGlvVmFsdWVGZCwgMCwgU0VFS19TRVQpOworICAgICAgICBpZiAod3JpdGUoc1Jlc0dwaW9WYWx1ZUZkLCBzdHIsIHNpemVvZihzdHIpKSA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJ0cmlnZ2VyX3Jlc2V0KCk6IGVycm9yIG9uIHdyaXRlOiAlZCAoJXMpIiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIH0KKworICAgICAgICBzeXNsb2coTE9HX05PVElDRSwgIlRyaWdnZXJlZCBoYXJkd2FyZSByZXNldCIpOworICAgIH0KK30KKworc3RhdGljIGJvb2wgc2V0dXBfaW50X2dwaW8oY29uc3QgY2hhciogcGF0aCkKK3sKKyAgICBjaGFyKiBlZGdlX3BhdGggPSBOVUxMOworICAgIGNoYXIqIGRpcl9wYXRoID0gTlVMTDsKKyAgICBjaGFyKiB2YWx1ZV9wYXRoID0gTlVMTDsKKyAgICBzc2l6ZV90IGxlbjsKKyAgICBpbnQgc2V0dXBfZmQgPSAtMTsKKworICAgIHNJbnRHcGlvVmFsdWVGZCA9IC0xOworCisgICAgc0ludEdwaW9EZXZQYXRoID0gcGF0aDsKKworICAgIGxlbiA9IGFzcHJpbnRmKCZkaXJfcGF0aCwgIiVzL2RpcmVjdGlvbiIsIHBhdGgpOworCisgICAgaWYgKGxlbiA8IDApCisgICAgeworICAgICAgICBwZXJyb3IoImFzcHJpbnRmIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBsZW4gPSBhc3ByaW50ZigmZWRnZV9wYXRoLCAiJXMvZWRnZSIsIHBhdGgpOworCisgICAgaWYgKGxlbiA8IDApCisgICAgeworICAgICAgICBwZXJyb3IoImFzcHJpbnRmIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBsZW4gPSBhc3ByaW50ZigmdmFsdWVfcGF0aCwgIiVzL3ZhbHVlIiwgcGF0aCk7CisKKyAgICBpZiAobGVuIDwgMCkKKyAgICB7CisgICAgICAgIHBlcnJvcigiYXNwcmludGYiKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIHNldHVwX2ZkID0gb3BlbihkaXJfcGF0aCwgT19XUk9OTFkpOworCisgICAgaWYgKHNldHVwX2ZkID49IDApCisgICAgeworICAgICAgICBsZW4gPSB3cml0ZShzZXR1cF9mZCwgImluIiwgMik7CisgICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBwZXJyb3IoIndyaXRlIik7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKworICAgICAgICBjbG9zZShzZXR1cF9mZCk7CisgICAgfQorCisgICAgc2V0dXBfZmQgPSBvcGVuKGVkZ2VfcGF0aCwgT19XUk9OTFkpOworCisgICAgaWYgKHNldHVwX2ZkID49IDApCisgICAgeworICAgICAgICBsZW4gPSB3cml0ZShzZXR1cF9mZCwgImZhbGxpbmciLCA3KTsKKworICAgICAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcGVycm9yKCJ3cml0ZSIpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisKKyAgICAgICAgY2xvc2Uoc2V0dXBfZmQpOworCisgICAgICAgIHNldHVwX2ZkID0gLTE7CisgICAgfQorCisgICAgc0ludEdwaW9WYWx1ZUZkID0gb3Blbih2YWx1ZV9wYXRoLCBPX1JET05MWSk7CisKK2JhaWw6CisKKyAgICBpZiAoc2V0dXBfZmQgPj0gMCkKKyAgICB7CisgICAgICAgIGNsb3NlKHNldHVwX2ZkKTsKKyAgICB9CisKKyAgICBpZiAoZWRnZV9wYXRoKQorICAgIHsKKyAgICAgICAgZnJlZShlZGdlX3BhdGgpOworICAgIH0KKworICAgIGlmIChkaXJfcGF0aCkKKyAgICB7CisgICAgICAgIGZyZWUoZGlyX3BhdGgpOworICAgIH0KKworICAgIGlmICh2YWx1ZV9wYXRoKQorICAgIHsKKyAgICAgICAgZnJlZSh2YWx1ZV9wYXRoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc0ludEdwaW9WYWx1ZUZkID49IDA7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTUFSSzogSGVscCAqLworCitzdGF0aWMgdm9pZCBwcmludF92ZXJzaW9uKHZvaWQpCit7CisgICAgcHJpbnRmKCJzcGktaGRsYy1hZGFwdGVyICIgU1BJX0hETENfVkVSU0lPTiAiICgiIF9fVElNRV9fICIgIiBfX0RBVEVfXyAiKVxuIik7CisgICAgcHJpbnRmKCJDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycywgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2hlbHAodm9pZCkKK3sKKyAgICBwcmludF92ZXJzaW9uKCk7CisgICAgY29uc3QgY2hhciogaGVscCA9CisgICAgIlxuIgorICAgICJTeW50YXg6XG4iCisgICAgIlxuIgorICAgICIgICAgc3BpLWhkbGMgW29wdGlvbnNdIDxzcGktZGV2aWNlLXBhdGg+XG4iCisgICAgIlxuIgorICAgICJPcHRpb25zOlxuIgorICAgICJcbiIKKyAgICAiICAgIC0tc3RkaW8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBVc2UgYHN0ZGluYCBhbmQgYHN0ZG91dGAgZm9yIEhETEMgaW5wdXQgYW5kXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LiBVc2VmdWwgd2hlbiBkaXJlY3RseSBzdGFydGVkIGJ5IHRoZVxuIgorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0gdGhhdCB3aWxsIGJlIHVzaW5nIGl0LlxuIgorI2lmIEhBVkVfT1BFTlBUWQorICAgICIgICAgLS1wdHkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIENyZWF0ZSBhIHBzZXVkb3Rlcm1pbmFsIGZvciBIRExDIGlucHV0IGFuZFxuIgorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC4gVGhlIHBhdGggb2YgdGhlIG5ld2x5LWNyZWF0ZWQgUFRZXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB3cml0dGVuIHRvIGBzdGRvdXRgLCBmb2xsb3dlZCBieSBhXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZS5cbiIKKyNlbmRpZiAvLyBIQVZFX09QRU5QVFkKKyAgICAiICAgIC0tcmF3IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBEbyBub3QgZW5jb2RlL2RlY29kZSBwYWNrZXRzIHVzaW5nIEhETEMuXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgd3JpdGUgd2hvbGUsIHJhdyBmcmFtZXMgdG8gdGhlXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGlucHV0IGFuZCBvdXRwdXQgRkRzLiBUaGlzIGlzIHVzZWZ1bFxuIgorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlbXVsYXRpbmcgYSBzZXJpYWwgcG9ydCwgb3Igd2hlbiBkYXRhZ3JhbS1cbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBzb2NrZXRzIGFyZSBzdXBwbGllZCBmb3Igc3RkaW4gYW5kXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0YCAod2hlbiB1c2VkIHdpdGggLS1zdGRpbykuXG4iCisgICAgIiAgICAtLW10dT1bTVRVXSAuLi4uLi4uLi4uLi4uLi4uLi4gU3BlY2lmeSB0aGUgTVRVLiBDdXJyZW50bHkgb25seSB1c2VkIGluIHJhdyBtb2RlLlxuIgorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgYW5kIG1heGltdW0gdmFsdWUgaXMgMjA0My5cbiIKKyAgICAiICAgIC1pLy0tZ3Bpby1pbnRbPWdwaW8tcGF0aF0gLi4uLiBTcGVjaWZ5IGEgcGF0aCB0byB0aGUgTGludXggc3lzZnMtZXhwb3J0ZWRcbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPIGRpcmVjdG9yeSBmb3IgdGhlIGBJzIVOzIVUzIVgIHBpbi4gSWYgbm90XG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkLCBgc3BpLWhkbGNgIHdpbGwgZmFsbCBiYWNrIHRvXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9sbGluZywgd2hpY2ggaXMgaW5lZmZpY2llbnQuXG4iCisgICAgIiAgICAtci8tLWdwaW8tcmVzZXRbPWdwaW8tcGF0aF0gLi4gU3BlY2lmeSBhIHBhdGggdG8gdGhlIExpbnV4IHN5c2ZzLWV4cG9ydGVkXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJTyBkaXJlY3RvcnkgZm9yIHRoZSBgUsyFRcyFU8yFYCBwaW4uXG4iCisgICAgIiAgICAtLXNwaS1tb2RlWz1tb2RlXSAuLi4uLi4uLi4uLi4gU3BlY2lmeSB0aGUgU1BJIG1vZGUgdG8gdXNlICgwLTMpLlxuIgorICAgICIgICAgLS1zcGktc3BlZWRbPWhlcnR6XSAuLi4uLi4uLi4uIFNwZWNpZnkgdGhlIFNQSSBzcGVlZCBpbiBoZXJ0ei5cbiIKKyAgICAiICAgIC0tc3BpLWNzLWRlbGF5Wz11c2VjXSAuLi4uLi4uLiBTcGVjaWZ5IHRoZSBkZWxheSBhZnRlciBDzIVTzIUgYXNzZXJ0aW9uLCBpbiDCtXNlY1xuIgorICAgICIgICAgLS1zcGktYWxpZ24tYWxsb3dhbmNlWz1uXSAuLi4uIFNwZWNpZnkgdGhlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBGRiBieXRlcyB0b1xuIgorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAgZnJvbSBzdGFydCBvZiBNSVNPIGZyYW1lLiBNYXggdmFsdWUgaXMgMy5cbiIKKyAgICAiICAgIC0tc3BpLXNtYWxsLXBhY2tldD1bbl0gLi4uLi4uLiBTcGVjaWZ5IHRoZSBzbWFsbGVzdCBwYWNrZXQgd2UgY2FuIHJlY2VpdmVcbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbihsYXJnZXIgcGFja2V0cyB3aWxsXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSB0d28gdHJhbnNhY3Rpb25zKS4gRGVmYXVsdCB2YWx1ZSBpcyAzMi5cbiIKKyAgICAiICAgIC12Ly0tdmVyYm9zZSAuLi4uLi4uLi4uLi4uLi4uLiBJbmNyZWFzZSBkZWJ1ZyB2ZXJib3NpdHkuIChSZXBlYXRhYmxlKVxuIgorICAgICIgICAgLWgvLT8vLS1oZWxwIC4uLi4uLi4uLi4uLi4uLi4uIFByaW50IG91dCB1c2FnZSBpbmZvcm1hdGlvbiBhbmQgZXhpdC5cbiIKKyAgICAiXG4iOworCisgICAgcHJpbnRmKCIlcyIsIGhlbHApOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIE1BUks6IE1haW4gTG9vcCAqLworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCBpID0gMDsKKyAgICBjaGFyIHByb2dbMzJdOworICAgIHN0YXRpYyBmZF9zZXQgcmVhZF9zZXQ7CisgICAgc3RhdGljIGZkX3NldCB3cml0ZV9zZXQ7CisgICAgc3RhdGljIGZkX3NldCBlcnJvcl9zZXQ7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICBpbnQgbWF4X2ZkID0gLTE7CisgICAgYm9vbCBkaWRfcHJpbnRfcmF0ZV9saW1pdF9sb2cgPSBmYWxzZTsKKworI2lmIEFVVE9fUFJJTlRfQkFDS1RSQUNFCisgICAgc3RydWN0IHNpZ2FjdGlvbiBzaWdhY3Q7CisjZW5kaWYgLy8gaWYgQVVUT19QUklOVF9CQUNLVFJBQ0UKKworICAgIGVudW0geworICAgICAgICBBUkdfU1BJX01PREUgPSAxMDAxLAorICAgICAgICBBUkdfU1BJX1NQRUVEID0gMTAwMiwKKyAgICAgICAgQVJHX1ZFUkJPU0UgPSAxMDAzLAorICAgICAgICBBUkdfU1BJX0NTX0RFTEFZID0gMTAwNCwKKyAgICAgICAgQVJHX1NQSV9BTElHTl9BTExPV0FOQ0UgPSAxMDA1LAorICAgICAgICBBUkdfUkFXID0gMTAwNiwKKyAgICAgICAgQVJHX01UVSA9IDEwMDcsCisgICAgICAgIEFSR19TUElfU01BTExfUEFDS0VUID0gMTAwOCwKKyAgICB9OworCisgICAgc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworICAgICAgICB7ICJzdGRpbyIsICAgICAgbm9fYXJndW1lbnQsICAgICAgICZzTW9kZSwgTU9ERV9TVERJTyAgICB9LAorICAgICAgICB7ICJwdHkiLCAgICAgICAgbm9fYXJndW1lbnQsICAgICAgICZzTW9kZSwgTU9ERV9QVFkgICAgICB9LAorICAgICAgICB7ICJncGlvLWludCIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICAgJ2knICAgICAgICAgICB9LAorICAgICAgICB7ICJncGlvLXJlcyIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICAgJ3InICAgICAgICAgICB9LAorICAgICAgICB7ICJ2ZXJib3NlIiwgICAgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEwsICAgQVJHX1ZFUkJPU0UgICB9LAorICAgICAgICB7ICJ2ZXJzaW9uIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICAgJ1YnICAgICAgICAgICB9LAorICAgICAgICB7ICJyYXciLCAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICAgQVJHX1JBVyAgICAgICB9LAorICAgICAgICB7ICJtdHUiLCAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICAgQVJHX01UVSAgICAgICB9LAorICAgICAgICB7ICJoZWxwIiwgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICAgJ2gnICAgICAgICAgICB9LAorICAgICAgICB7ICJzcGktbW9kZSIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICAgQVJHX1NQSV9NT0RFICB9LAorICAgICAgICB7ICJzcGktc3BlZWQiLCAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICAgQVJHX1NQSV9TUEVFRCB9LAorICAgICAgICB7ICJzcGktY3MtZGVsYXkiLHJlcXVpcmVkX2FyZ3VtZW50LE5VTEwsICAgQVJHX1NQSV9DU19ERUxBWSB9LAorICAgICAgICB7ICJzcGktYWxpZ24tYWxsb3dhbmNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIEFSR19TUElfQUxJR05fQUxMT1dBTkNFIH0sCisgICAgICAgIHsgInNwaS1zbWFsbC1wYWNrZXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgQVJHX1NQSV9TTUFMTF9QQUNLRVQgfSwKKyAgICAgICAgeyBOVUxMLCAgICAgICAgIDAsICAgICAgICAgICAgICAgICBOVUxMLCAgIDAgICAgICAgICAgICAgfSwKKyAgICB9OworCisgICAgc3RybmNweShwcm9nLCBhcmd2WzBdLCBzaXplb2YocHJvZykgLSAxKTsKKyAgICBwcm9nW3NpemVvZihwcm9nKSAtIDFdID0gMDsKKworICAgIGlmIChhcmdjIDwgMikKKyAgICB7CisgICAgICAgIHByaW50X2hlbHAoKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gSU5JVElBTElaQVRJT04KKworICAgIHNQcmV2aW91c0hhbmRsZXJGb3JTSUdJTlQgPSBzaWduYWwoU0lHSU5ULCAmc2lnbmFsX1NJR0lOVCk7CisgICAgc1ByZXZpb3VzSGFuZGxlckZvclNJR1RFUk0gPSBzaWduYWwoU0lHVEVSTSwgJnNpZ25hbF9TSUdURVJNKTsKKyAgICBzaWduYWwoU0lHSFVQLCAmc2lnbmFsX1NJR0hVUCk7CisgICAgc2lnbmFsKFNJR1VTUjEsICZzaWduYWxfZHVtcHN0YXRzKTsKKyAgICBzaWduYWwoU0lHVVNSMiwgJnNpZ25hbF9jbGVhcnN0YXRzKTsKKworI2lmIEFVVE9fUFJJTlRfQkFDS1RSQUNFCisgICAgc2lnYWN0LnNhX3NpZ2FjdGlvbiA9ICZzaWduYWxfY3JpdGljYWw7CisgICAgc2lnYWN0LnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk8gfCBTQV9OT0NMRFdBSVQ7CisKKyAgICBzaWdhY3Rpb24oU0lHU0VHViwgJnNpZ2FjdCwgKHN0cnVjdCBzaWdhY3Rpb24gKilOVUxMKTsKKyAgICBzaWdhY3Rpb24oU0lHQlVTLCAmc2lnYWN0LCAoc3RydWN0IHNpZ2FjdGlvbiAqKU5VTEwpOworICAgIHNpZ2FjdGlvbihTSUdJTEwsICZzaWdhY3QsIChzdHJ1Y3Qgc2lnYWN0aW9uICopTlVMTCk7CisgICAgc2lnYWN0aW9uKFNJR0FCUlQsICZzaWdhY3QsIChzdHJ1Y3Qgc2lnYWN0aW9uICopTlVMTCk7CisjZW5kaWYgLy8gaWYgQVVUT19QUklOVF9CQUNLVFJBQ0UKKworICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIEFSR1VNRU5UIFBBUlNJTkcKKworICAgIG9wZW5sb2coYmFzZW5hbWUocHJvZyksIExPR19QRVJST1IgfCBMT0dfUElEIHwgTE9HX0NPTlMsIExPR19EQUVNT04pOworCisgICAgc2V0bG9nbWFzayhMT0dfVVBUTyhzVmVyYm9zZSkpOworCisgICAgd2hpbGUgKDEpCisgICAgeworICAgICAgICBpbnQgYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJpOnI6dlZoPyIsIG9wdGlvbnMsIE5VTEwpOworICAgICAgICBpZiAoYyA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlICdpJzoKKyAgICAgICAgICAgICAgICBpZiAoIXNldHVwX2ludF9ncGlvKG9wdGFyZykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIlVuYWJsZSB0byBzZXR1cCBJTlQgR1BJTyBcIiVzXCIsICVzIiwgb3B0YXJnLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFSR19TUElfQUxJR05fQUxMT1dBTkNFOgorICAgICAgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgICAgICAgICBzU3BpUnhBbGlnbkFsbG93YW5jZSA9IGF0b2kob3B0YXJnKTsKKworICAgICAgICAgICAgICAgIGlmIChlcnJubyAhPSAwIHx8IChzU3BpUnhBbGlnbkFsbG93YW5jZSA8IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJJbnZhbGlkIFNQSSBSWCBBbGlnbiBBbGxvd2FuY2UgXCIlc1wiIiwgb3B0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzU3BpUnhBbGlnbkFsbG93YW5jZSA+IFNQSV9SWF9BTElHTl9BTExPV0FOQ0VfTUFYKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19XQVJOSU5HLCAiUmVkdWNpbmcgU1BJIFJYIEFsaWduIEFsbG93YW5jZSBmcm9tICVzIHRvICVkIiwgb3B0YXJnLCBTUElfUlhfQUxJR05fQUxMT1dBTkNFX01BWCk7CisgICAgICAgICAgICAgICAgICAgIHNTcGlSeEFsaWduQWxsb3dhbmNlID0gU1BJX1JYX0FMSUdOX0FMTE9XQU5DRV9NQVg7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQVJHX1NQSV9NT0RFOgorICAgICAgICAgICAgICAgIGlmICghdXBkYXRlX3NwaV9tb2RlKGF0b2kob3B0YXJnKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIlVuYWJsZSB0byBzZXQgU1BJIG1vZGUgdG8gXCIlc1wiLCAlcyIsIG9wdGFyZywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBUkdfU1BJX1NQRUVEOgorICAgICAgICAgICAgICAgIGlmICghdXBkYXRlX3NwaV9zcGVlZChhdG9pKG9wdGFyZykpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJVbmFibGUgdG8gc2V0IFNQSSBzcGVlZCB0byBcIiVzXCIsICVzIiwgb3B0YXJnLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFSR19TUElfU01BTExfUEFDS0VUOgorICAgICAgICAgICAgICAgIHNTcGlTbWFsbFBhY2tldFNpemUgPSBhdG9pKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgaWYgKHNTcGlTbWFsbFBhY2tldFNpemUgPiBNQVhfRlJBTUVfU0laRSAtIEhFQURFUl9MRU4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX1dBUk5JTkcsICJSZWR1Y2luZyBTUEkgc21hbGwtcGFja2V0IHNpemUgZnJvbSAlcyB0byAlZCIsIG9wdGFyZywgTUFYX0ZSQU1FX1NJWkUgLSBIRUFERVJfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgc1NwaVNtYWxsUGFja2V0U2l6ZSA9IE1BWF9GUkFNRV9TSVpFIC0gSEVBREVSX0xFTjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNTcGlTbWFsbFBhY2tldFNpemUgPCAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJUaGUgYXJndW1lbnQgdG8gLS1zcGktc21hbGwtcGFja2V0IGNhbm5vdCBiZSBuZWdhdGl2ZS4gKEdpdmVuOiBcIiVzXCIpIiwgb3B0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzeXNsb2coTE9HX05PVElDRSwgIlNQSSBzbWFsbC1wYWNrZXQgc2l6ZSBzZXQgdG8gJWQgYnl0ZXMuIiwgc1NwaVNtYWxsUGFja2V0U2l6ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQVJHX1NQSV9DU19ERUxBWToKKyAgICAgICAgICAgICAgICBzU3BpQ3NEZWxheSA9IGF0b2kob3B0YXJnKTsKKyAgICAgICAgICAgICAgICBpZiAoc1NwaUNzRGVsYXkgPCAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJOZWdhdGl2ZSB2YWx1ZXMgKCVkKSBmb3IgLS1zcGktY3MtZGVsYXkgYXJlIGludmFsaWQuIiwgc1NwaUNzRGVsYXkpOworICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiU1BJIENTIERlbGF5IHNldCB0byAlZCB1c2VjIiwgc1NwaUNzRGVsYXkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFSR19SQVc6CisgICAgICAgICAgICAgICAgc1VzZVJhd0ZyYW1lcyA9IHRydWU7CisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19OT1RJQ0UsICJIRExDIGVuY29kaW5nL2RlY29kaW5nIGRpc2FibGVkLiBXaWxsIHVzZSByYXcgZnJhbWVzIGZvciBpbnB1dC9vdXRwdXQuIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQVJHX01UVToKKyAgICAgICAgICAgICAgICBzTVRVID0gYXRvaShvcHRhcmcpOworICAgICAgICAgICAgICAgIGlmIChzTVRVID4gTUFYX0ZSQU1FX1NJWkUgLSBIRUFERVJfTEVOKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJTcGVjaWZpZWQgTVRVIG9mICVkIGlzIHRvbyBsYXJnZSwgbWF4aW11bSBpcyAlZCBieXRlcy4iLCBzTVRVLCBNQVhfRlJBTUVfU0laRSAtIEhFQURFUl9MRU4pOworICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzTVRVIDwgMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAiU3BlY2lmaWVkIE1UVSBvZiAlZCBpcyB0b28gc21hbGwsIG1pbmltdW0gaXMgMSBieXRlLiIsIHNNVFUpOworICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiTVRVIHNldCB0byAlZCBieXRlcyIsIHNNVFUpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICBpZiAoIXNldHVwX3Jlc19ncGlvKG9wdGFyZykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIlVuYWJsZSB0byBzZXR1cCBSRVMgR1BJTyBcIiVzXCIsICVzIiwgb3B0YXJnLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgIGNhc2UgQVJHX1ZFUkJPU0U6CisgICAgICAgICAgICAgICAgaWYgKHNWZXJib3NlIDwgTE9HX0RFQlVHKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGFyZykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc1ZlcmJvc2UgKz0gYXRvaShvcHRhcmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc1ZlcmJvc2UrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzZXRsb2dtYXNrKHNldGxvZ21hc2soMCkgfCBMT0dfVVBUTyhzVmVyYm9zZSkpOworICAgICAgICAgICAgICAgICAgICBzeXNsb2coc1ZlcmJvc2UsICJWZXJib3NpdHkgc2V0IHRvIGxldmVsICVkIiwgc1ZlcmJvc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnVic6CisgICAgICAgICAgICAgICAgcHJpbnRfdmVyc2lvbigpOworICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICBjYXNlICc/JzoKKyAgICAgICAgICAgICAgICBwcmludF9oZWxwKCk7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3lzbG9nKExPR19OT1RJQ0UsInNwaS1oZGxjLWFkYXB0ZXIgIiBTUElfSERMQ19WRVJTSU9OICIgKCIgX19USU1FX18gIiAiIF9fREFURV9fICIpXG4iKTsKKworICAgIGFyZ2MgLT0gb3B0aW5kOworICAgIGFyZ3YgKz0gb3B0aW5kOworCisgICAgaWYgKGFyZ2MgPj0gMSkKKyAgICB7CisgICAgICAgIGlmICghc2V0dXBfc3BpX2Rldihhcmd2WzBdKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciBzcGlfcGF0aFs2NF07CisKKyAgICAgICAgICAgIHN0cm5jcHkoc3BpX3BhdGgsIGFyZ3ZbMF0sIHNpemVvZihzcGlfcGF0aCkgLSAxKTsKKyAgICAgICAgICAgIHNwaV9wYXRoW3NpemVvZihzcGlfcGF0aCkgLSAxXSA9IDA7CisgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIiVzOiBVbmFibGUgdG8gb3BlbiBTUEkgZGV2aWNlIFwiJXNcIiwgJXMiLCBwcm9nLCBzcGlfcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICBhcmdjLS07CisgICAgICAgIGFyZ3YrKzsKKyAgICB9CisKKyAgICBpZiAoYXJnYyA+PSAxKQorICAgIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogVW5leHBlY3RlZCBhcmd1bWVudCBcIiVzXCJcbiIsIHByb2csIGFyZ3ZbMF0pOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgaWYgKHNTcGlEZXZQYXRoID09IE5VTEwpCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBNaXNzaW5nIFNQSSBkZXZpY2UgcGF0aFxuIiwgcHJvZyk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICBpZiAoc01vZGUgPT0gTU9ERV9TVERJTykKKyAgICB7CisgICAgICAgIHNIZGxjSW5wdXRGZCA9IGR1cChTVERJTl9GSUxFTk8pOworICAgICAgICBzSGRsY091dHB1dEZkID0gZHVwKFNURE9VVF9GSUxFTk8pOworICAgICAgICBjbG9zZShTVERJTl9GSUxFTk8pOworICAgICAgICBjbG9zZShTVERPVVRfRklMRU5PKTsKKworICAgIH0KKyAgICBlbHNlIGlmIChzTW9kZSA9PSBNT0RFX1BUWSkKKyAgICB7CisjaWYgSEFWRV9PUEVOUFRZCisKKyAgICAgICAgc3RhdGljIGludCBwdHlfc2xhdmVfZmQgPSAtMTsKKyAgICAgICAgY2hhciBwdHlfbmFtZVsxMDI0XTsKKyAgICAgICAgc1JldCA9IG9wZW5wdHkoJnNIZGxjSW5wdXRGZCwgJnB0eV9zbGF2ZV9mZCwgcHR5X25hbWUsIE5VTEwsIE5VTEwpOworCisgICAgICAgIGlmIChzUmV0ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcnJvcigib3BlbnB0eSIpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisKKyAgICAgICAgc0hkbGNPdXRwdXRGZCA9IGR1cChzSGRsY0lucHV0RmQpOworCisgICAgICAgIHByaW50ZigiJXNcbiIsIHB0eV9uYW1lKTsKKworICAgICAgICBjbG9zZShTVERPVVRfRklMRU5PKTsKKworI2Vsc2UgLy8gaWYgSEFWRV9PUEVOUFRZCisKKyAgICAgICAgc3lzbG9nKExPR19FUlIsICJOb3QgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBgLS1wdHlgLiIpOworICAgICAgICBzUmV0ID0gRVhJVF9GQUlMVVJFOworICAgICAgICBnb3RvIGJhaWw7CisKKyNlbmRpZiAvLyBlbHNlIEhBVkVfT1BFTlBUWQorCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNSZXQgPSBFWElUX0ZBSUxVUkU7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBpZiAoKHNIZGxjSW5wdXRGZCA8IDApIHx8IChzSGRsY091dHB1dEZkIDwgMCkpCisgICAgeworICAgICAgICBzUmV0ID0gRVhJVF9GQUlMVVJFOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgLy8gU2V0IHVwIHNIZGxjSW5wdXRGZCBmb3Igbm9uLWJsb2NraW5nIEkvTworICAgIGlmICgtMSA9PSAoaSA9IGZjbnRsKHNIZGxjSW5wdXRGZCwgRl9HRVRGTCwgMCkpKQorICAgIHsKKyAgICAgICAgaSA9IDA7CisgICAgfQorICAgIElHTk9SRV9SRVRVUk5fVkFMVUUoZmNudGwoc0hkbGNJbnB1dEZkLCBGX1NFVEZMLCBpIHwgT19OT05CTE9DSykpOworCisgICAgLy8gU2luY2UgdGhlcmUgYXJlIHNvIGZldyBmaWxlIGRlc2NyaXB0b3JzIGluCisgICAgLy8gdGhpcyBwcm9ncmFtLCB3ZSBjYWxjdWxhdGUgYG1heF9mZGAgb25jZQorICAgIC8vIGluc3RlYWQgb2YgdHJ5aW5nIHRvIG9wdGltaXplIGl0cyB2YWx1ZQorICAgIC8vIGF0IGV2ZXJ5IGl0ZXJhdGlvbi4KKyAgICBtYXhfZmQgPSBzSGRsY0lucHV0RmQ7CisKKyAgICBpZiAobWF4X2ZkIDwgc0hkbGNPdXRwdXRGZCkKKyAgICB7CisgICAgICAgIG1heF9mZCA9IHNIZGxjT3V0cHV0RmQ7CisgICAgfQorCisgICAgaWYgKG1heF9mZCA8IHNJbnRHcGlvVmFsdWVGZCkKKyAgICB7CisgICAgICAgIG1heF9mZCA9IHNJbnRHcGlvVmFsdWVGZDsKKyAgICB9CisKKyAgICBpZiAoc0ludEdwaW9WYWx1ZUZkIDwgMCkKKyAgICB7CisgICAgICAgIHN5c2xvZyhMT0dfV0FSTklORywgIkludGVycnVwdCBwaW4gd2FzIG5vdCBzZXQsIG11c3QgcG9sbCBTUEkuIFBlcmZvcm1hbmNlIHdpbGwgc3VmZmVyLiIpOworICAgIH0KKworICAgIHRyaWdnZXJfcmVzZXQoKTsKKworICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIE1BSU4gTE9PUAorCisgICAgd2hpbGUgKHNSZXQgPT0gMCkKKyAgICB7CisgICAgICAgIGludCB0aW1lb3V0X21zID0gTVNFQ19QRVJfU0VDICogNjAgKiA2MCAqIDI0OyAvLyAyNCBob3VycworCisgICAgICAgIEZEX1pFUk8oJnJlYWRfc2V0KTsKKyAgICAgICAgRkRfWkVSTygmd3JpdGVfc2V0KTsKKyAgICAgICAgRkRfWkVSTygmZXJyb3Jfc2V0KTsKKworICAgICAgICBpZiAoIXNTcGlUeElzUmVhZHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZEX1NFVChzSGRsY0lucHV0RmQsICZyZWFkX3NldCk7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgZGF0YSB0byBzZW5kIHRvIHRoZSBzbGF2ZS4KKyAgICAgICAgICAgIHRpbWVvdXRfbXMgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNTcGlSeFBheWxvYWRTaXplICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgZGF0YSB0aGF0IHdlIGFyZSB3YWl0aW5nIHRvIHNlbmQgb3V0CisgICAgICAgICAgICAvLyBvZiB0aGUgSERMQyBkZXNjcmlwdG9yLCBzbyB3ZSBuZWVkIHRvIHdhaXQKKyAgICAgICAgICAgIC8vIGZvciB0aGF0IHRvIGNsZWFyIG91dCBiZWZvcmUgd2UgY2FuIGRvIGFueXRoaW5nCisgICAgICAgICAgICAvLyBlbHNlLgorICAgICAgICAgICAgRkRfU0VUKHNIZGxjT3V0cHV0RmQsICZ3cml0ZV9zZXQpOworCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc0ludEdwaW9WYWx1ZUZkID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjaGVja19hbmRfY2xlYXJfaW50ZXJydXB0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gSW50ZXJydXB0IHBpbiBpcyBhc3NlcnRlZCwKKyAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIHRpbWVvdXQgdG8gYmUgMC4KKyAgICAgICAgICAgICAgICB0aW1lb3V0X21zID0gMDsKKworICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfREVCVUcsICJJbnRlcnJ1cHQuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGludGVycnVwdCBwaW4gd2FzIG5vdCBhc3NlcnRlZCwKKyAgICAgICAgICAgICAgICAvLyBzbyB3ZSB3YWl0IGZvciB0aGUgaW50ZXJydXB0IHBpbiB0bworICAgICAgICAgICAgICAgIC8vIGJlIGFzc2VydGVkIGJ5IGFkZGluZyBpdCB0byB0aGUgZXJyb3IKKyAgICAgICAgICAgICAgICAvLyBzZXQuCisgICAgICAgICAgICAgICAgRkRfU0VUKHNJbnRHcGlvVmFsdWVGZCwgJmVycm9yX3NldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aW1lb3V0X21zID4gU1BJX1BPTExfUEVSSU9EX01TRUMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkb24ndCBoYXZlIGFuIGludGVycnVwdCwgc28KKyAgICAgICAgICAgIC8vIHdlIHJldmVydCB0byBTUEkgcG9sbGluZy4KKyAgICAgICAgICAgIHRpbWVvdXRfbXMgPSBTUElfUE9MTF9QRVJJT0RfTVNFQzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzRHVtcFN0YXRzKQorICAgICAgICB7CisgICAgICAgICAgICB0aW1lb3V0X21zID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzU3BpVHhSZWZ1c2VkQ291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBiZWluZyByYXRlLWxpbWl0ZWQgYnkgdGhlIHNsYXZlLiBUaGlzIGlzCisgICAgICAgICAgICAvLyBmYWlybHkgbm9ybWFsIGJlaGF2aW9yLiBXZSBwb2xsIGJlY2F1c2Ugd2UKKyAgICAgICAgICAgIC8vIHdvbid0IGdldCBhbiBpbnRlcnJ1cHQgdW5sZXNzIHRoZSBzbGF2ZSBoYXBwZW5zCisgICAgICAgICAgICAvLyB0byBiZSB0cnlpbmcgdG8gc2VuZCB1cyBzb21ldGhpbmcuCisgICAgICAgICAgICBpZiAodGltZW91dF9tcyA8IFNQSV9QT0xMX1BFUklPRF9NU0VDKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRpbWVvdXRfbXMgPSBTUElfUE9MTF9QRVJJT0RfTVNFQzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBzU3BpVHhJc1JlYWR5CisgICAgICAgICAgICAgICYmICFkaWRfcHJpbnRfcmF0ZV9saW1pdF9sb2cKKyAgICAgICAgICAgICAgJiYgKHNTcGlUeFJlZnVzZWRDb3VudCA+IDEpCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAvLyBUbyBhdm9pZCBwcmludGluZyBvdXQgdGhpcyBtZXNzYWdlIG92ZXIgYW5kIG92ZXIsCisgICAgICAgICAgICAgICAgLy8gd2Ugb25seSBwcmludCBpdCBvdXQgb25jZSB0aGUgcmVmdXNlZCBjb3VudCBpcyBhdAorICAgICAgICAgICAgICAgIC8vIHR3byBvciBoaWdoZXIgd2hlbiB3ZSBhY3R1YWxseSBoYXZlIHNvbWV0aGluZyB0bworICAgICAgICAgICAgICAgIC8vIHNlbmQgdGhlIHNsYXZlLiBBbmQgdGhlbiwgd2Ugb25seSBwcmludCBpdCBvbmNlLgorICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywgIlNsYXZlIGlzIHJhdGUgbGltaXRpbmcgdHJhbnNhY3Rpb25zIik7CisKKyAgICAgICAgICAgICAgICBkaWRfcHJpbnRfcmF0ZV9saW1pdF9sb2cgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc1NwaVR4UmVmdXNlZENvdW50ID09IDMwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFVhLW9oLiBUaGUgc2xhdmUgaGFzbid0IGdpdmVuIHVzIGEgY2hhbmNlIHRvIHNlbmQKKyAgICAgICAgICAgICAgICAvLyBpdCBhbnl0aGluZyBmb3Igb3ZlciB0aGlydHkgZnJhbWVzLiBJZiB0aGlzIGV2ZXIKKyAgICAgICAgICAgICAgICAvLyBoYXBwZW5zLCBwcmludCBvdXQgYSB3YXJuaW5nIHRvIHRoZSBsb2dzLgorICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfV0FSTklORywgIlNsYXZlIHNlZW1zIHN0dWNrLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc1NwaVR4UmVmdXNlZENvdW50ID09IDEwMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBEb3VibGUgdWEtb2guIFRoZSBzbGF2ZSBoYXNuJ3QgZ2l2ZW4gdXMgYSBjaGFuY2UKKyAgICAgICAgICAgICAgICAvLyB0byBzZW5kIGl0IGFueXRoaW5nIGZvciBvdmVyIGEgaHVuZHJlZCBmcmFtZXMuCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIHRoYXQgdGhlIHNsYXZlIGhhcworICAgICAgICAgICAgICAgIC8vIGxvY2tlZCB1cCBvciBnb3R0ZW4gaW50byBhbiB1bnJlY292ZXJhYmxlIHN0YXRlLgorICAgICAgICAgICAgICAgIC8vIEl0IGlzIG5vdCBzcGktaGRsYy1hZGFwdGVyJ3Mgam9iIHRvIGlkZW50aWZ5IGFuZAorICAgICAgICAgICAgICAgIC8vIHJlc2V0IG1pc2JlaGF2aW5nIGRldmljZXMgKHRoYXQgaXMgaGFuZGxlZCBhdCBhCisgICAgICAgICAgICAgICAgLy8gaGlnaGVyIGxldmVsKSwgYnV0IHdlIGdvIGFoZWFkIGFuZCBsb2cgdGhlIGNvbmRpdGlvbgorICAgICAgICAgICAgICAgIC8vIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJTbGF2ZSBzZWVtcyBSRUFMTFkgc3R1Y2suIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkaWRfcHJpbnRfcmF0ZV9saW1pdF9sb2cgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgdGltZW91dCB2YWx1ZS4KKyAgICAgICAgdGltZW91dC50dl9zZWMgPSB0aW1lb3V0X21zIC8gTVNFQ19QRVJfU0VDOworICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSAodGltZW91dF9tcyAlIE1TRUNfUEVSX1NFQykgKiBVU0VDX1BFUl9NU0VDOworCisgICAgICAgIC8vIFdhaXQgZm9yIHNvbWV0aGluZyB0byBoYXBwZW4uCisgICAgICAgIElHTk9SRV9SRVRVUk5fVkFMVUUoc2VsZWN0KG1heF9mZCArIDEsICZyZWFkX3NldCwgJndyaXRlX3NldCwgJmVycm9yX3NldCwgJnRpbWVvdXQpKTsKKworICAgICAgICBpZiAoc0R1bXBTdGF0cyB8fCBzUmV0ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNEdW1wU3RhdHMgPSBmYWxzZTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiSU5GTzogc1NsYXZlUmVzZXRDb3VudD0lbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzU2xhdmVSZXNldENvdW50KTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiSU5GTzogc1NwaUZyYW1lQ291bnQ9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc1NwaUZyYW1lQ291bnQpOworICAgICAgICAgICAgc3lzbG9nKExPR19OT1RJQ0UsICJJTkZPOiBzU3BpVmFsaWRGcmFtZUNvdW50PSVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXNTcGlWYWxpZEZyYW1lQ291bnQpOworICAgICAgICAgICAgc3lzbG9nKExPR19OT1RJQ0UsICJJTkZPOiBzU3BpRHVwbGV4RnJhbWVDb3VudD0lbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzU3BpRHVwbGV4RnJhbWVDb3VudCk7CisgICAgICAgICAgICBzeXNsb2coTE9HX05PVElDRSwgIklORk86IHNTcGlVbnJlc3BvbnNpdmVGcmFtZUNvdW50PSVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXNTcGlVbnJlc3BvbnNpdmVGcmFtZUNvdW50KTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiSU5GTzogc1NwaUdhcmJhZ2VGcmFtZUNvdW50PSVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXNTcGlHYXJiYWdlRnJhbWVDb3VudCk7CisgICAgICAgICAgICBzeXNsb2coTE9HX05PVElDRSwgIklORk86IHNIZGxjVHhGcmFtZUNvdW50PSVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXNIZGxjVHhGcmFtZUNvdW50KTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiSU5GTzogc0hkbGNUeEZyYW1lQnl0ZUNvdW50PSVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXNIZGxjVHhGcmFtZUJ5dGVDb3VudCk7CisgICAgICAgICAgICBzeXNsb2coTE9HX05PVElDRSwgIklORk86IHNIZGxjUnhGcmFtZUNvdW50PSVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXNIZGxjUnhGcmFtZUNvdW50KTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiSU5GTzogc0hkbGNSeEZyYW1lQnl0ZUNvdW50PSVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXNIZGxjUnhGcmFtZUJ5dGVDb3VudCk7CisgICAgICAgICAgICBzeXNsb2coTE9HX05PVElDRSwgIklORk86IHNIZGxjUnhCYWRDcmNDb3VudD0lbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzSGRsY1J4QmFkQ3JjQ291bnQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIHNlcmlhbCBpbnB1dC4KKyAgICAgICAgaWYgKEZEX0lTU0VUKHNIZGxjSW5wdXRGZCwgJnJlYWRfc2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmVhZCBpbiB0aGUgZGF0YS4KKyAgICAgICAgICAgIGlmICgoc1VzZVJhd0ZyYW1lcyA/IHB1bGxfcmF3KCkgOiBwdWxsX2hkbGMoKSkgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNSZXQgPSBFWElUX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGUgc2VyaWFsIG91dHB1dC4KKyAgICAgICAgaWYgKEZEX0lTU0VUKHNIZGxjT3V0cHV0RmQsICZ3cml0ZV9zZXQpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXcml0ZSBvdXQgdGhlIGRhdGEuCisgICAgICAgICAgICBpZiAoKHNVc2VSYXdGcmFtZXMgPyBwdXNoX3JhdygpIDogcHVzaF9oZGxjKCkpIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzUmV0ID0gRVhJVF9GQUlMVVJFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlcnZpY2UgdGhlIFNQSSBwb3J0IGlmIHdlIGNhbiByZWNlaXZlCisgICAgICAgIC8vIGEgcGFja2V0IG9yIHdlIGhhdmUgYSBwYWNrZXQgdG8gYmUgc2VudC4KKyAgICAgICAgaWYgKCAoc1NwaVJ4UGF5bG9hZFNpemUgPT0gMCkKKyAgICAgICAgICAmJiAoc1NwaVR4SXNSZWFkeSB8fCBjaGVja19hbmRfY2xlYXJfaW50ZXJydXB0KCkpCisgICAgICAgICkgeworICAgICAgICAgICAgLy8gV2UgZ3VhcmQgdGhpcyB3aXRoIHRoZSBhYm92ZSBjaGVjayBiZWNhdXNlIHdlIGRvbid0CisgICAgICAgICAgICAvLyB3YW50IHRvIG92ZXJ3cml0ZSBhbnkgcHJldmlvdXNseSByZWNlaXZlZCAoYnV0IG5vdAorICAgICAgICAgICAgLy8geWV0IHB1c2hlZCBvdXQpIGZyYW1lcy4KKyAgICAgICAgICAgIGlmIChwdXNoX3B1bGxfc3BpKCkgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNSZXQgPSBFWElUX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIFNIVVRET1dOCisKK2JhaWw6CisgICAgc3lzbG9nKExPR19OT1RJQ0UsICJTaHV0ZG93bi4gKHNSZXQgPSAlZCkiLCBzUmV0KTsKKworICAgIGlmIChzUmV0ID09IEVYSVRfUVVJVCkKKyAgICB7CisgICAgICAgIHNSZXQgPSBFWElUX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UgaWYgKHNSZXQgPT0gLTEpCisgICAgeworICAgICAgICBzUmV0ID0gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAgIHJldHVybiBzUmV0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvd2luZG93cy9UaHJlYWRFdHcucmVnIGIvdG9vbHMvd2luZG93cy9UaHJlYWRFdHcucmVnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMzgwNGMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy93aW5kb3dzL1RocmVhZEV0dy5yZWcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvd2luZG93cy9hcm0vb3RpbnN0YWxsLmV4ZSBiL3Rvb2xzL3dpbmRvd3MvYXJtL290aW5zdGFsbC5leGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiNDk4YQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3dpbmRvd3MvYXJtL290aW5zdGFsbC5leGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvd2luZG93cy9pbnN0YWxsX2NjMjUzOC5jbWQgYi90b29scy93aW5kb3dzL2luc3RhbGxfY2MyNTM4LmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTM5ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvd2luZG93cy9pbnN0YWxsX2NjMjUzOC5jbWQKQEAgLTAsMCArMSwzMCBAQAorUkVNCitSRU0gIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KK1JFTSAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JFTQorUkVNICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK1JFTSAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CitSRU0gIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CitSRU0gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JFTSAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK1JFTSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorUkVNICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorUkVNICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKK1JFTSAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKK1JFTSAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitSRU0KK1JFTSAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitSRU0gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK1JFTSAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK1JFTSAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorUkVNICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitSRU0gIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitSRU0gIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworUkVNICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorUkVNICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorUkVNICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUkVNICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1JFTQorCitkZXZjb24gdXBkYXRlIGZ0ZGlidXMuaW5mICJVU0JcVklEXzA0MDMmUElEX0E2RDEqIgorZGV2Y29uIHVwZGF0ZSBmdGRpcG9ydC5pbmYgRlRESUJVU1xWSURfMDQwMytQSURfQTZEMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3dpbmRvd3MvaW5zdGFsbF9vdGx3Zi5jbWQgYi90b29scy93aW5kb3dzL2luc3RhbGxfb3Rsd2YuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMDdjOTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy93aW5kb3dzL2luc3RhbGxfb3Rsd2YuY21kCkBAIC0wLDAgKzEsNDIgQEAKK1JFTQorUkVNICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCitSRU0gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSRU0KK1JFTSAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CitSRU0gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorUkVNICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorUkVNICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSRU0gIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CitSRU0gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK1JFTSAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1JFTSAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCitSRU0gICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCitSRU0gICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorUkVNCitSRU0gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorUkVNICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitSRU0gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitSRU0gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKK1JFTSAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorUkVNICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorUkVNICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK1JFTSAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK1JFTSAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK1JFTSAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1JFTSAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitSRU0KKworUkVNIEluc3RhbGwgdGhlIEFQSQorY29weSBvdGFwaS5kbGwgJVN5c3RlbVJvb3QlXFN5c3RlbTMyCisKK1JFTSBJbnN0YWxsIHRoZSBjZXJ0aWZpY2F0aW9ucyB0byB0aGUgY2VydCBzdG9yZXMKK2NlcnR1dGlsIC1hZGRzdG9yZSByb290IG90THdmLmNlcgorY2VydHV0aWwgLWFkZHN0b3JlIFRydXN0ZWRQdWJsaXNoZXIgb3RMd2YuY2VyCisKK1JFTSBTdGFydCBFVFcgbG9nZ2luZyAocmVxdWlyZXMgcmVib290KQorcmVnLmV4ZSBpbXBvcnQgVGhyZWFkRXR3LnJlZworCitSRU0gSW5zdGFsbCB0aGUgZHJpdmVyCitjb3B5IG90bHdmLnN5cyAlU3lzdGVtUm9vdCVcU3lzdGVtMzJcZHJpdmVycworc2MuZXhlIGNyZWF0ZSBvdGx3ZiBiaW5QYXRoPSBcU3lzdGVtUm9vdFxzeXN0ZW0zMlxkcml2ZXJzXG90bHdmLnN5cyB0eXBlPSBrZXJuZWwgc3RhcnQ9IHN5c3RlbSBncm91cD0gTkRJUyBkaXNwbGF5bmFtZT0gIk9wZW5UaHJlYWQgTkRJUyBMaWdodFdlaWdodCBGaWx0ZXIiCitvdEluc3RhbGwuZXhlIC1pClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvd2luZG93cy9pbnN0YWxsX290dG1wLmNtZCBiL3Rvb2xzL3dpbmRvd3MvaW5zdGFsbF9vdHRtcC5jbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMyNGQ2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3dpbmRvd3MvaW5zdGFsbF9vdHRtcC5jbWQKQEAgLTAsMCArMSwzMyBAQAorUkVNCitSRU0gIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KK1JFTSAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JFTQorUkVNICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK1JFTSAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CitSRU0gIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CitSRU0gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JFTSAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK1JFTSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorUkVNICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorUkVNICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKK1JFTSAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKK1JFTSAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitSRU0KK1JFTSAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitSRU0gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK1JFTSAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK1JFTSAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorUkVNICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitSRU0gIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitSRU0gIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworUkVNICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorUkVNICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorUkVNICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUkVNICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1JFTQorCitSRU0gSW5zdGFsbCB0aGUgY2VydGlmaWNhdGlvbnMgdG8gdGhlIGNlcnQgc3RvcmVzCitjZXJ0dXRpbCAtYWRkc3RvcmUgcm9vdCBvdHRtcC5jZXIKK2NlcnR1dGlsIC1hZGRzdG9yZSBUcnVzdGVkUHVibGlzaGVyIG90dG1wLmNlcgorCitkZXZjb24gaW5zdGFsbCBvdHRtcC5pbmYgcm9vdFxvdHRtcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3dpbmRvd3MveDY0L290aW5zdGFsbC5leGUgYi90b29scy93aW5kb3dzL3g2NC9vdGluc3RhbGwuZXhlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkY2NiNGQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy93aW5kb3dzL3g2NC9vdGluc3RhbGwuZXhlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3dpbmRvd3MveDg2L290aW5zdGFsbC5leGUgYi90b29scy93aW5kb3dzL3g4Ni9vdGluc3RhbGwuZXhlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmZkOTUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy93aW5kb3dzL3g4Ni9vdGluc3RhbGwuZXhlCkJpbmFyeSBmaWxlcyBkaWZmZXIK